pax_global_header00006660000000000000000000000064145400737350014522gustar00rootroot0000000000000052 comment=843a15101a166f24261443aab3c9a56b8459f18d libvips-8.15.1/000077500000000000000000000000001454007373500132665ustar00rootroot00000000000000libvips-8.15.1/.clang-format000066400000000000000000000012411454007373500156370ustar00rootroot00000000000000BasedOnStyle: GNU AccessModifierOffset: -4 AlignAfterOpenBracket: DontAlign AlignEscapedNewlines: DontAlign AlignOperands: DontAlign AllowAllArgumentsOnNextLine: false AllowAllParametersOfDeclarationOnNextLine: false BreakBeforeBinaryOperators: None BreakBeforeBraces: Stroustrup IndentWidth: 4 SortIncludes: Never SpaceAfterCStyleCast: true SpaceBeforeParens: ControlStatements TabWidth: 4 UseTab: Always # Our column limit is actually 80, but setting that results in clang-format # making a lot of dubious hanging-indent choices; disable it and assume the # developer will line wrap appropriately. clang-format will still check # existing hanging indents. ColumnLimit: 0 libvips-8.15.1/.codespellrc000066400000000000000000000003661454007373500155730ustar00rootroot00000000000000[codespell] skip = .git,*.pdf,*.svg,./test/test-suite/images,./fuzz/common_fuzzer_corpus,./build/meson-private,./build,*.gir,*.po,./cplusplus/html,./libvips/deprecated,*.xml ignore-words-list = gir,ody,te,tre,mmaped,openin,dout,inout,co-ordinate libvips-8.15.1/.editorconfig000066400000000000000000000003331454007373500157420ustar00rootroot00000000000000# http://editorconfig.org [*] end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true [*.{cpp,c,h}] indent_style = tab indent_size = 4 [*.py] indent_style = space indent_size = 4 libvips-8.15.1/.git-blame-ignore-revs000066400000000000000000000007651454007373500173760ustar00rootroot00000000000000# Since version 2.23 (released in August 2019), git-blame has a feature # to ignore or bypass certain commits. # # This file contains a list of commits that are not likely what you # are looking for in a blame, such as mass reformatting or renaming. # You can set this file as a default ignore file for blame by running # the following command. # # $ git config blame.ignoreRevsFile .git-blame-ignore-revs # Enforce code consistency with clang-format (#3125) 873ae7305f07a3a1493249148c1d0f0a0407f797 libvips-8.15.1/.gitattributes000066400000000000000000000002771454007373500161670ustar00rootroot00000000000000# Shell scripts sources can't have CRLF line endings *.sh eol=lf # Ignore repository language statistics and hide diffs for generated files libvips/colour/profiles.c linguist-generated=true libvips-8.15.1/.github/000077500000000000000000000000001454007373500146265ustar00rootroot00000000000000libvips-8.15.1/.github/FUNDING.yml000066400000000000000000000000311454007373500164350ustar00rootroot00000000000000open_collective: libvips libvips-8.15.1/.github/ISSUE_TEMPLATE/000077500000000000000000000000001454007373500170115ustar00rootroot00000000000000libvips-8.15.1/.github/ISSUE_TEMPLATE/bug_report.md000066400000000000000000000016101454007373500215010ustar00rootroot00000000000000--- name: Bug Report about: Create A Bug Report title: A concise title of what the bug is. labels: bug assignees: '' --- ## Questions, enhancements, tips, etc. Please use libvips discussions for other topics. https://github.com/libvips/libvips/discussions ## Bug report **Describe the bug** A clear and concise description of what the bug is. **To Reproduce** Steps to reproduce the behavior: 1. Use Image '...' 2. Use Configuration '....' 3. See error **Expected behavior** A clear and concise description of what you expected to happen. **Actual behavior** A clear and concise description of what actually happen. **Screenshots** If applicable, add screenshots to help explain your problem. **Environment** (please complete the following information) - OS: [e.g. Ubuntu 16.04, MacOS 10.13] - Vips: [e.g. 8.8, 8.9, etc] **Additional context** Add any other context about the problem here. libvips-8.15.1/.github/ISSUE_TEMPLATE/config.yaml000066400000000000000000000003011454007373500211340ustar00rootroot00000000000000blank_issues_enabled: false contact_links: - name: libvips discussions url: https://github.com/libvips/libvips/discussions about: Please ask questions and suggest improvements here. libvips-8.15.1/.github/workflows/000077500000000000000000000000001454007373500166635ustar00rootroot00000000000000libvips-8.15.1/.github/workflows/ci.yml000066400000000000000000000126471454007373500200130ustar00rootroot00000000000000name: CI on: [ push, pull_request, workflow_dispatch ] jobs: CI: name: ${{ matrix.name }} runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: include: - name: "Linux x64 (Ubuntu 22.04) - GCC 11" os: ubuntu-22.04 build: { cc: gcc, cxx: g++, linker: ld } shell: bash - name: "Linux x64 (Ubuntu 22.04) - Clang 14 with ASan and UBSan" os: ubuntu-22.04 build: { cc: clang-14, cxx: clang++-14, linker: ld.lld-14, sanitize: true } shell: bash - name: "macOS (12.6) - Xcode 14.2" os: macos-12 build: { cc: clang, cxx: clang++, linker: ld.lld } shell: bash # TODO: Re-enable self-hosted M1 runner provided by MacStadium #- name: "macOS (10.15) - Xcode 12.4 - M1" # os: macos-m1 # build: { cc: clang, cxx: clang++, linker: ld.lld } # shell: "/usr/bin/arch -arch arm64e /bin/bash -l {0}" defaults: run: shell: ${{ matrix.shell }} env: CC: ${{ matrix.build.cc }} CXX: ${{ matrix.build.cxx }} LD: ${{ matrix.build.linker }} CPPFLAGS: -Wall steps: - name: Checkout code uses: actions/checkout@v3 - name: Update apt if: runner.os == 'Linux' run: sudo apt-get update -qq - name: Install Ubuntu dependencies if: runner.os == 'Linux' run: sudo apt-get install -fqq meson python3-pip python3-setuptools python3-wheel libfftw3-dev libexif-dev libjpeg-turbo8-dev libpng-dev libwebp-dev libtiff5-dev libheif-dev libexpat1-dev libcfitsio-dev libmatio-dev libnifti-dev libhwy-dev liblcms2-dev libpoppler-glib-dev librsvg2-dev libopenexr-dev libpango1.0-dev libarchive-dev libopenslide-dev libffi-dev libopenjp2-7-dev libimagequant-dev libcgif-dev liborc-0.4-dev # FIXME: Remove once libhwy 1.0.5 is available. - name: Install macOS dependencies if: runner.os == 'macOS' run: | brew install meson ninja fftw fontconfig glib libexif libarchive little-cms2 highway pango pkg-config brew install cfitsio cgif jpeg-xl libheif libimagequant mozjpeg libmatio librsvg libspng libtiff openexr openjpeg openslide poppler webp - name: Install Clang 14 if: runner.os == 'Linux' && matrix.build.cc == 'clang-14' run: sudo apt-get install -fqq clang-14 libomp-14-dev lld-14 llvm-14 - name: Prepare macOS environment if: runner.os == 'macOS' run: | echo "PKG_CONFIG_PATH=$(brew --prefix mozjpeg)/lib/pkgconfig:$(brew --prefix libarchive)/lib/pkgconfig:$PKG_CONFIG_PATH" >> $GITHUB_ENV - name: Prepare sanitizers if: matrix.build.sanitize env: LLVM_PREFIX: /usr/lib/llvm-14 run: | ASAN_DSO=`$CC -print-file-name=libclang_rt.asan-x86_64.so` echo "LDSHARED=$CC -shared" >> $GITHUB_ENV echo "CPPFLAGS=-g -fsanitize=address,undefined -fno-omit-frame-pointer -fopenmp -DFUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION" >> $GITHUB_ENV echo "LDFLAGS=-g -fsanitize=address,undefined -shared-libasan -fopenmp=libomp" >> $GITHUB_ENV echo "ASAN_DSO=$ASAN_DSO" >> $GITHUB_ENV # Glib is built without -fno-omit-frame-pointer. We need # to disable the fast unwinder to get full stacktraces. # FIXME: remove `intercept_tls_get_addr=0` # https://github.com/google/sanitizers/issues/1322 echo "ASAN_OPTIONS=suppressions=${{ github.workspace }}/suppressions/asan.supp:fast_unwind_on_malloc=0:allocator_may_return_null=1:intercept_tls_get_addr=0" >> $GITHUB_ENV echo "LSAN_OPTIONS=suppressions=${{ github.workspace }}/suppressions/lsan.supp:fast_unwind_on_malloc=0" >> $GITHUB_ENV echo "TSAN_OPTIONS=suppressions=${{ github.workspace }}/suppressions/tsan.supp" >> $GITHUB_ENV # Ensure UBSan issues causes the program to abort. echo "UBSAN_OPTIONS=suppressions=${{ github.workspace }}/suppressions/ubsan.supp:halt_on_error=1:abort_on_error=1:print_stacktrace=1" >> $GITHUB_ENV echo "LD_LIBRARY_PATH=$LLVM_PREFIX/lib:`dirname $ASAN_DSO`" >> $GITHUB_ENV echo "$LLVM_PREFIX/bin" >> $GITHUB_PATH # Workaround for https://github.com/google/sanitizers/issues/89 # otherwise libIlmImf-2_3.so ends up as . echo "DLCLOSE_PRELOAD=${{ github.workspace }}/dlclose.so" >> $GITHUB_ENV echo -e '#include \nint dlclose(void*handle){return 0;}' | $CC -shared -xc -odlclose.so - - name: Configure libvips run: meson setup build -Ddebug=true -Ddeprecated=false || (cat build/meson-logs/meson-log.txt && exit 1) - name: Build libvips run: ninja -C build - name: Check libvips run: ninja -C build test - name: Install libvips run: sudo ninja -C build install - name: Rebuild the shared library cache if: runner.os == 'Linux' run: sudo ldconfig - name: Install pyvips run: pip3 install pyvips[test] - name: Run test suite env: VIPS_LEAK: 1 LD_PRELOAD: ${{ env.ASAN_DSO }} ${{ env.DLCLOSE_PRELOAD }} run: python3 -m pytest -sv --log-cli-level=WARNING test/test-suite libvips-8.15.1/.github/workflows/cifuzz.yml000066400000000000000000000012171454007373500207210ustar00rootroot00000000000000name: CIFuzz on: [pull_request] jobs: Fuzzing: runs-on: ubuntu-latest steps: - name: Build Fuzzers id: build uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master with: oss-fuzz-project-name: 'libvips' dry-run: false - name: Run Fuzzers uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master with: oss-fuzz-project-name: 'libvips' fuzz-seconds: 600 dry-run: false - name: Upload Crash uses: actions/upload-artifact@v1 if: failure() && steps.build.outcome == 'success' with: name: artifacts path: ./out/artifacts libvips-8.15.1/.github/workflows/codespell.yml000066400000000000000000000004401454007373500213560ustar00rootroot00000000000000name: Codespell on: [push, pull_request] permissions: {} jobs: codespell: name: Check for spelling errors runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Codespell uses: codespell-project/actions-codespell@v2 libvips-8.15.1/.github/workflows/lint.yml000066400000000000000000000012071454007373500203540ustar00rootroot00000000000000name: Lint on: [pull_request] jobs: cpp-linter: runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v3 - uses: cpp-linter/cpp-linter-action@v2 id: linter with: style: file version: 14 # Ubuntu 22.04 provides clang-format-14 tidy-checks: '-*' # disable clang-tidy lines-changed-only: true # ignore bundled files ignore: 'libvips/foreign/libnsgif|fuzz/StandaloneFuzzTargetMain.c' - name: Fail fast continue-on-error: true # TODO: remove this line in the future if: steps.linter.outputs.checks-failed > 0 run: exit 1 libvips-8.15.1/.gitignore000066400000000000000000000006521454007373500152610ustar00rootroot00000000000000### C # Object files *.o # Libraries *.a *.la *.lo # Build directories build/ debug/ release/ # Executables *.out ### End of C ### Python # Byte-compiled / optimized __pycache__/ *.py[cod] # Unit test .pytest_cache/ ### End of Python ### VIM # Temporary files *~ tmp tmp-* # Swap .*.swp .*.swo # Backup *.bak # Auto-generated tag files tags TAGS ### End of VIM ### Distribution vips-*.tar.gz ### End of Distribution libvips-8.15.1/CODE_OF_CONDUCT.md000066400000000000000000000071711454007373500160730ustar00rootroot00000000000000libvips Code of Conduct ======================= libvips, is developed and maintained by a mixed group of professionals and volunteers from all over the world. We ask people to adhere to a few ground rules. They apply equally to founders, maintainers, contributors and those seeking help and guidance. This is not meant to be an exhaustive list of things you are not allowed to do. We rather would like you to think of it as a guide to enrich our community and the technical community in general with new knowledge and perspectives by allowing everyone to participate. This code of conduct applies to all spaces managed by the libvips community. This includes the mailing list, our GitHub projects, face to face events, and any other forums created by the community for communication within the community. In addition, violations of this code outside these spaces may also affect a person's ability to participate within them. If you believe someone is violating the code of conduct, we ask that you report it. - **Be friendly and patient.** - **Be welcoming.** We strive to be a community that welcomes and supports people of all backgrounds. - **Be considerate.** Your work will be used by other people, and you in turn will depend on the work of others. Any decision you take will affect users and colleagues, and you should take those consequences into account when making decisions. Remember that we're a world-wide community, so you might not be communicating in someone else's primary language. - **Be respectful.** Not all of us will agree all the time, but disagreement is no excuse for poor behavior and poor manners. We might all experience some frustration now and then, but we cannot allow that frustration to turn into a personal attack. It’s important to remember that a community where people feel uncomfortable or threatened is not a productive one. Members of our community should be respectful when dealing with other members as well as with people outside the our community. - **Be careful in the words that you choose.** We are a community of professionals, and we conduct ourselves professionally. Be kind to others. Do not insult or put down other participants. Harassment and other exclusionary behavior aren't acceptable. This includes, but is not limited to: - Violent threats or language directed against another person. - Discriminatory jokes and language. - Posting sexually explicit or violent material. - Posting (or threatening to post) other people's personally identifying information ("doxing"). - Personal insults, especially those using racist or sexist terms. - Unwelcome sexual attention. - Advocating for, or encouraging, any of the above behavior. - Repeated harassment of others. In general, if someone asks you to stop, then stop. - **When we disagree, try to understand why.** Disagreements, both social and technical, happen all the time. It is important that we resolve disagreements and differing views constructively. Remember that we’re different. The strength of group software development comes from its varied community, people from a wide range of backgrounds. Different people have different perspectives on issues. Being unable to understand why someone holds a viewpoint doesn’t mean that they’re wrong. Don’t forget we all make mistakes and blaming each other doesn’t get us anywhere. Instead, focus on helping to resolve issues and learning from mistakes. Text based on the Code of Conduct of the [Django community](https://www.djangoproject.com/conduct/). libvips-8.15.1/CONTRIBUTING.md000066400000000000000000000027551454007373500155300ustar00rootroot00000000000000# Contributing to libvips Thank you for your interest in contributing to libvips! There are many ways to contribute, and we appreciate all contributions. ## Code style This project uses `clang-format` to maintain a consistent code style throughout the codebase. We recommend using version 14 (as available in Ubuntu 22.04), to avoid any formatting mismatch with our [GitHub Actions lint check]( .github/workflows/lint.yml). `clang-format` can be used via the `git-clang-format` script. On some systems, it may already be installed (or be installable via your package manager). If so, you can simply run it – the following commands will format only the code on the staged changes: ```shell # Stage original changes $ git add . # Run clang-format on staged changes $ git clang-format # Stage formatting changes and commit $ git add . $ git commit -m "My commit message" ``` Alternatively, you can format only the code changed in the most recent commit: ```shell $ git clang-format HEAD~1 ``` Note that this modifies the files, but doesn't commit them – you'll likely want to run: ```shell $ git commit --amend -a ``` in order to update the last commit with all pending changes. In an emergency, reformat the entire project with something like: ```shell find . \ \( -name "*.[hc]" -o -name "*.cc" -o -name "*.cpp" \) \ -not \( -path "./libvips/foreign/libnsgif/*" -o \ -name vips-operators.cpp -o \ -name StandaloneFuzzTargetMain.c -o \ -name profiles.c \) | \ xargs clang-format -i ``` libvips-8.15.1/ChangeLog000066400000000000000000004533421454007373500150530ustar00rootroot0000000000000018/12/23 8.15.1 - reduceh: fix Highway path on SSE2 [DarthSim] - fix JPEG in TIFF colourspace for Q >= 90 [heman1-test] - fix build with upcoming libjxl 0.9 [kleisauke] - jxlsave: lower min effort value to 1 [DarthSim] - fix build without libjpeg [ionenwks] - fix vips7 plugin load [jcupitt] - allow ".jfif" as a suffix for jpegsave [casperbrike] - don't let the magick sniffer hijack TIFF [kleisauke] - ignore BLOCKED classes in foreign map [jcupitt] - add locks to fftw3 calls [akash-akya] 11/11/23 8.15.0 - add support for target_clones attribute [lovell] * use with (un)premultiply for ~10% perf gain on AVX CPUs * use with XYZ to LAB colourspace conversion for ~10% perf gain on AVX CPUs - add fast path to extract_band and bandjoin for uchar images [lovell] - reduce `vips_sharpen` max `sigma` to 10 [lovell] - inline scRGB to XYZ colourspace conversion, ~2x faster [lovell] - set "interlaced=1" for interlaced GIF images [kleisauke] - add @line_art to find_trim [miltoncandelero] - improve C++ binding [MathemanFlo] * add `inplace()` / `VImage::new_from_memory_copy()` * add overloads for `draw_*()` / `VImage::thumbnail_buffer()` - allow negative line spacing in text [donghuikugou] - add VIPS_META_BITS_PER_SAMPLE metadata, deprecate the "palette-bit-depth" and "heif-bitdepth" meta fields [MathemanFlo] - add "revalidate" to foreign loaders [jcupitt] - add `premultiplied` option to smartcrop [lovell] - add "prewitt" and "scharr" edge detectors, "sobel" is more accurate for non-uchar formats [jcupitt] - add support for forms in pdfium loader [kleisauke] - swap built-in profiles with ICC v4 variants [kleisauke] - remove libgsf dependency in favor of libarchive [kleisauke] - better chunking for small shrinks [jcupitt] - use alpha range of 0.0 - 1.0 for scRGB images [DarthSim] - add support for 16-bit float TIFFs [DarthSim] - add direct mode to dzsave [jcupitt] - require C++11 as a minimum standard [kleisauke] - add support for SIMD via Highway [kleisauke] - threaded write in tiffsave for tiled JPEG and JPEG2000 [jcupitt] - add vips_thread_execute() to the public API [jcupitt] - add "keep" flag to foreign savers, deprecate "strip" [a3mar] - improve scRGB handling [jcupitt] 18/9/23 8.14.5 - fix a crash with alpha plus icc_import and icc_export [jcupitt] - fix a crash in jxlsave [jcupitt] 15/8/23 8.14.4 - fix null-pointer dereference during svgload [kleisauke] - heif{load,save}: guard against NULL strings [kleisauke] - pdfiumload: fix rendering of pages with different sizes [DarthSim] 20/7/23 8.14.3 - fix ICC handling of greyscale images with a incompatible profile [kleisauke] - fix use-after-free during tiff pyramid save [kleisauke] - fix vips7 PNG load and save when using libspng [jcupitt] - tiffload: slightly relax tile size sanity check [lovell] - heifsave: limit dimensions to a maximum edge of 16384 [lovell] - colourspace: ensure CMYK conversion uses the embedded ICC profile [kleisauke] - ensure chromatic adaptation during icc_{im,ex}port() [kleisauke] - improve ICC compatibility check for CMYK images [kleisauke] 21/3/23 8.14.2 - use a private fontmap in vips_text() [jcupitt] - increase sanity checks on TIFF tile dimensions [lovell] - ensure compatibility with libheif > 1.14.2 [kleisauke] - minor doc fixes [jcupitt] - sanitise dimensions in JPEG-compressed TIFF images [lovell] - fix target pnm write [ewelot] - dedupe FITS header write [ewelot] - fix `strip` parameter in webpsave [jcupitt] - earlier abort of webpsave on kill [dloebl] - fix thumbnail of CMYK images with an embedded ICC profile [kleisauke] - fix ICC handling of RGB images with a monochrome profile [kleisauke] - ensure ICC transforms keep all precision [kleisauke] - fix openslideload associated=XXX load [jcupitt] - fix compatibility with MSVC [SpaceIm] 9/1/23 8.14.1 - add vips_thread_isworker() compatibility function [remicollet] - add vips_semaphore_down_timeout() [kleisauke] - idle threads are removed after 15s [kleisauke] - fix version number in gtk-doc index [kleisauke] - save mono fits images as NAXIS=2 [ewelot] - fix jpeg `autorotate` for orientation 3 [zhifengzhuang] 22/12/22 8.14.0 - remove autotools - remove various obsolete scripts - remove benchmark - `jp2ksave` defaults to chroma subsample off, and jp2 write - don't minimise `vips_sink_screen()` input after expose ... improves caching during interactive use - require libjxl 0.6+ - add `interlace` option to GIF save [dloebl] - magick load sets `magick-format` metadata [aksdb] - add `.pnm` save [ewelot] - threaded tiff jp2k and jpeg decompress - improve speed and efficiency of animated WebP write [dloebl] - add `rgb` mode to openslideload - new thread recycler - threadpools size dynamically with load - operations can hint threadpool size - faster `dzsave` - support for N-colour ICC profiles - add bash completions for `vips` - fits load and allows many more bands - fits write doesn't duplicate header fields - add `wrap` to `vips_text()` - GIF load supports truncated frames [tlsa] - EXIF support for PNG load and save - expose location of interest when using attention based cropping [ejoebstl] - deprecate gifsave `reoptimise`, add `reuse` - add `encoder` to heifsave [dloebl] - add `cplusplus` meson build option [jcupitt] - make arrayjoin much faster with large arrays 9/11/22 started 8.13.4 - missing include in mosaic_fuzzer [ServOKio] - emit "finish" at the end of targetcustom write [lucaskanashiro] 11/10/22 started 8.13.3 - improve rules for 16-bit heifsave [johntrunc] - improve libspng palette write [kleisauke] - improve libspng palette sort [DarthSim] - ensure EXIF has prefix before parsing [lovell] - fix low bit depth palette spng save [DarthSim] - fix thumbnail of non-sRGB images with an export profile [kleisauke] 5/9/22 started 8.13.2 - in dzsave, add add missing include directive for errno/EEXIST [kleisauke] - fix 8 bit palette PNG save [lovell] - fix null string in buffer print [pclewis] - revise caching of seq mode loaders [jcupitt] - reduce latency on dzsave kill [kleisauke] - improve text too large check [kleisauke] - fix subifd writing for small images [ruven] - name ICC profiles in spngsave [lovell] 24/7/22 started 8.13.1 - fix im7 feature detection in meson - add a summary table at the end of configure in meson - fix libpng fallback when spng is disabled in meson - add "unlimited" to jpegload - better 0 detection in unpremultiply - fix low bitdepth spng save [jeffska] - fix PNG low bitdepth save of high bitdepth images - add support for libjxl 0.7 [kleisauke] - improve compatibility with older libgsf versions [kleisauke] 21/11/21 started 8.13 - configure fails for requested but unmet dependencies [remicollet] - add support for another quantiser [DarthSim] - add "extend", "background" and "premultiplied" to vips_mapim() to fix edge antialiasing [GavinJoyce] - add support for HDR HEIC and AVIF images - add vips_spngsave() - jpeg2000 load left-justifies bitdepth - add "password" option to pdfload, fix byte ordering of "background" - add vips_operation_block_set(), vips_block_untrusted_set() - improve the pixel rng - new meson build system [tintou] - improve introspection annotations [tintou] - add "unlimited" to heifload [lovell] - add support for regions in C++ API [shado23] - add "maxerror" to gifsave [dloebl] - update libnsgif API [tlsa] - deprecate "properties" option to dzsave (now always on) - add vips_dzsave_buffer() - always set the min stack size for pthreads, if we can - add "fail-on" to thumbnail - add "gap" option to vips_reduce[hv]() and vips_resize() [kleisauke] - add "ceil" option to vips_shrink() [kleisauke] - quality improvements for image resizing [kleisauke] - add vips_source_new_from_target() - add vips_target_seek(), vips_target_read(), vips_target_new_temp() - add vips_tiffsave_target() - add vips_target_end(), deprecate vips_target_finish() - add "mixed" to webpsave [dloebl] - add support for ICC profiles and linear encoding to JXL load and save [f1ac] - add "reoptimise" to gifsave [dloebl] - add "bitdepth" to magicksave [dloebl] - change default PNG filter to "none" [lovell] 26/11/21 started 8.12.3 - better arg checking for vips_hist_find_ndim() [travisbell] - fix thumbnail with CMYK output [AdamGaskins] - fix size_t / ssize_t confusion [flga] - fix jxl compatibility break [lovell] 26/11/21 started 8.12.2 - make exif resuint optional and default to inch - win: don't set create time on inappropriate file descriptors [lovell] - fall back to magicksave for gif if cgif is not present [erik-frontify] - fix a crash with 0 length vectors - change default frame delay for GIFs from 1s to 0.1s - remove stray trailing comma from iiif3 dirnames [whalehub] - fix TTF load [chregu] - revise GIF save alpha threshold [jfcalvo] - raise libpng pixel size limit from 1m to 10m pixels [jskrzypek] - fix gif save change detector [TheEssem] - fix load from pipe with variable size reads 21/11/21 started 8.12.1 - fix insert [chregu] 14/6/21 started 8.12 - all tools support `--version` - add vips_svgload_string() convenience function - fix thumbnail with small image plus crop plus no upsize [Andrewsville] - rename speed / reduction-effort / etc. params as "effort" - add gifsave [lovell] - arrayjoin minimises inputs during sequential processing, saving a lot of memory and file descriptors - add vips_image_get_format_max() - flatten handles out of range alpha and max_alpha correctly - don't use atexit for cleanup, it's too unreliable - tiff writer loops for the whole image rather than per page [LionelArn2] - fix VipsSource with named pipes [vibbix] - added restart_interval option to jpegsave [manthey] - add IIIF3 support to dzsave [martimpassos] - add atan2 to math2 [indus] - improve buffer and target save file format selection - added VipsForeignPpmFormat, format arg to ppm savers - add fail-on to give better control over loader error sensitivity - add hyperbolic functions sinh, cosh, tanh, asinh, acosh, atanh [hroskes] - add untiled jp2k load - "insert" will minimise in seq mode - better EXIF string handling [lovell] 16/8/21 started 8.11.4 - fix off-by-one error in new rank fast path - add "unlimited" flag to png load [joshuamsager] - improve filtering of .v enums [lovell] - better logic to prevent shrink to nothing in thumbnail [kleisauke] 14/7/21 started 8.11.3 - build threadpool later [kleisauke] - add jxlsave prototypes [adil-benameur] - limit text chunks in PNGs [randy408] 15/6/20 started 8.11.2 - better libdir guessing [remi] - fix tiff pyramid creation with jp2k compression (was broken by 8.11.1) - don't load modules if we're built without modules 18/6/21 started 8.11.1 - add more example code to C docs - update libtool support in configure.ac - more startup info if VIPS_INFO is set - command-line programs set glib prgname (no longer set for you by VIPS_INIT) - enable strip chopping for TIFF read [DavidStorm] - disable modules by default for static builds [kleisauke] - fix jpeg tiff pyramid save 14/8/20 started 8.11 - add vips_jpegload_source() and vips_svgload_source() to public C API - integrate doxygen in build system to generate C++ API docs - improve C++ API doc comments - add VipsInterpolate and guint64 support to C++ API - add VImage::new_from_memory_steal [Zeranoe] - vipsthumbnail supports stdin / stdout thumbnailing - have a lock just for pdfium [DarthSim] - get pdfium load building again [Projkt-James] - add _source load support for pdfium - add "seed" param to perlin, worley and gaussnoise - add vips_source_g_input_stream_new() to load images from a GInputStream - add openslideload_source(), vipsload_source(), vipssave_target() - add hist path to rank for large windows on uchar images - better 8/16-bit choice for pngsave - avoid NaN in mapim [afontenot] - hist_find outputs a double histogram for large images [erdmann] - fix ref leaks in mosaicing package - run libvips leak test in CI - add vips_fitsload_source(), vips_niftiload_source() - png and gif load note background colour as metadata [781545872] - add vips_image_[set|get]_array_double() - add GIF load with libnsgif - add jp2kload, jp2ksave - add jp2k compression to tiff load and save - add JPEG-XL load and save - add black_point_compensation flag for icc transforms - add "rgba" flag to vips_text() to enable full colour text rendering - move openslide, libheif, poppler and magick to loadable modules [kleisauke] - better detection of invalid ICC profiles, better fallback paths - add "premultiply" flag to tiffsave - new threading model has a single threadpool shared by all pipelines [kleisauke] 30/4/21 start 8.10.7 - better vips7 PNG load compatibility [SkyDiverCool] - fix load of large PPM images from a pipe [ewelot] 22/12/20 start 8.10.6 - don't seek on bad file descriptors [kleisauke] - check for null memory sources [kleisauke] - improve ppmload, fixing a couple of small bugs - improve EOF detection in jpegload [bozaro] - improve error detection in spngload [randy408] - fix includes of glib headers in C++ [lovell] - fix build with more modern librsvg [lovell] - fix a possible segv with very wide images [f1ac] - fix issue thumbnailing RGBA images in linear mode [jjonesrs] - improve vipsthumbnail profile handling - fix tiff deflate predictor setting [Adios] - fix vector path for composite on i386 [kleisauke] 18/12/20 started 8.10.5 - fix potential /0 in animated webp load [lovell] 14/12/20 started 8.10.4 - fix spng detection 18/10/20 started 8.10.3 - relax heic is_a rules [hisham] - fix vips7 webp load [barryspearce] - fix out of bounds exif read in heifload - fix out of bounds read in tiffload - fix tiffsave region shrink mode [imgifty] - add missing flushes on write to target [harukizaemon] - hide info messages you could get with some older glibs [kleisauke] - fix --no-strip on dzsave with icc-profiles [altert] - better GraphicsMagick image write [bfriesen] - add missing read loops to spng, heif, giflib and ppm load [kleisauke] - block zero width or height images from imagemagick load [Koen1999] - check for overflow in gifload height [lovell] - fix msb_first default in ppm load and save [ewelot] - force binary mode on win for connection read / write [Alreiber] - better testing for output to target [barryspearce] - ppmload_source was missing is_a [ewelot] - improve webpload rounding and blending behaviour [lovell] - fix range clip in int32 -> unsigned casts [ewelot] - fix precision error in clip of float -> int casts [ewelot] - fix load of HEIC images with 0 length metadata [ddennedy-gpsw] - revise rounding in reduce [kleisauke] 6/9/20 started 8.10.2 - update magicksave/load profile handling [kelilevi] - better demand hint rules [kaas3000] - fix tiff thumbnail from buffer and source [vansante] - in jpegsave, don't set JFIF resolution if we set EXIF resolution - bump minimum libheif version to 1.3 [lovell] - dzsave in iiif mode could set info.json dimensions off by one [Linden6] - pdfload allows dpi and scale to both be set [le0daniel] - allow gaussblur sigma zero, meaning no blur - better heif signature detection [lovell] - fix vips_fractsurf() typo [kleisauke] - better heif EOF detection [lovell] - fix gir build with g-o-i 1.66+ [László] - improve seek behaviour on pipes - add "speed" param to heifsave [lovell] - fix regression in C path for dilate / erode [kleisauke] - fix build with libheif save but no load [estepnv] 9/8/20 started 8.10.1 - fix markdown -> xml conversion in doc generation - remove typedef redefinitions to please old gccs - fix regression in tiff pyramid thumbnailing [tand826] - stop 0-length buffer being passed to imagemagick [lovell] - convert no-profile CMYK to RGB on save [augustocdias] - ensure SVG loader skips input with chars outside x09-x7F range [lovell] - better mask sizing in gaussmat [johntrunc] - fix tiffsave "squash" handling [barryspearce] - fix jpegload autorotate [chregu] - only start the background render thread on first use 24/1/20 started 8.10.0 - more conformat IIIF output from dzsave [regisrob] - add @id to dzsave to set IIIF id property [regisrob] - add max and min to region shrink [rgluskin] - allow \ as an escape character in vips_break_token() [akemrir] - tiffsave has a "depth" param to set max pyr depth - libtiff LOGLUV images load and save as libvips XYZ - add gifload_source, csvload_source, csvsave_target, matrixload_source, matrixsave_source, pdfload_source, heifload_source, heifsave_target, ppmload_source, ppmsave_target - revise vipsthumbnail flags - add VIPS_LEAK env var - add vips_pipe_read_limit_set(), --vips-pipe-read-limit, VIPS_PIPE_READ_LIMIT - revise gifload to fix BACKGROUND and PREVIOUS dispose [alon-ne] - add subsample_mode, deprecate no_subsample in jpegsave [Elad-Laufer] - add vips_isdirf() - add PAGENUMBER support to tiff write [jclavoie-jive] - add "all" mode to smartcrop - flood fill could stop half-way for some very complex shapes - better handling of unaligned reads in multipage tiffs [petoor] - mark old --delete option to vipsthumbnail as deprecated [UweOhse] - png save with a bad ICC profile just gives a warning - add "premultipled" option to vips_affine(), clarified vips_resize() behaviour with alpha channels - improve bioformats support with read and write of tiff subifd pyramids - thumbnail exploits subifd pyramids - handle all EXIF orientation cases, deprecate vips_autorot_get_angle() [Elad-Laufer] - load PNGs with libspng, if possible - deprecate heifload autorotate -- it's now always on - revised resize improves accuracy [kleisauke] - add --vips-config flag to show configuration info - add "bitdepth" param to tiff save, deprecate "squash" [MathemanFlo] - tiff load and save now supports 2 and 4 bit data [MathemanFlo] - pngsave @bitdepth parameter lets you write 1, 2 and 4 bit PNGs - ppmsave also uses "bitdepth" now, for consistency - reduce operation cache max to 100 - rework the final bits of vips7 for vips8 [kleisauke] - --disable-deprecated now works [kleisauke] - vipsheader allows "stdin" as a filename - gifload allows gifs with images outside the canvas - wasm compatibility patches [kleisauke] - webpsave has a @profile param 24/4/20 started 8.9.3 - better iiif tile naming [IllyaMoskvin] 31/1/19 started 8.9.2 - fix a deadlock with --vips-leak [DarthSim] - better gifload behaviour for DISPOSAL_UNSPECIFIED [DarthSim] - ban ppm max_value < 0 - add fuzz corpus to dist - detect read errors correctly in source_sniff - fix regression in autorot [malomalo] - thumbnail on HEIC images could select the thumbnail incorrectly under some size modes [ZorinArsenij] 20/6/19 started 8.9.1 - don't use the new source loaders for new_from_file or new_from_buffer, it will break the loader priority system - fix thumbnail autorot [janko] - fix a warning with magicksave with no delay array [chregu] - fix a race in tiled tiff load [kleisauke] - better imagemagick init [LebronCurry] - lock for metadata changes [jcupitt] 20/6/19 started 8.9.0 - add vips_image_get/set_array_int() - disable webp alpha output if all frame fill the canvas and are solid - support arrays of delays for animated images [deftomat] - add "unlimited" flag to svgload - disable webp alpha output if all frames fill the canvas and are solid - add "compression" option to heifsave [lovell] - support webp and zstd compression in tiff - loaders use "minimise" to close input files earlier - integrate support for oss-fuzz [omira-sch] - add vips_switch() / vips_case() ... fast many-way ifthenelse - better const handling for arithmetic operators fixes comparisons against out of range values - sharpen restores input colourspace - handle alpha in heifload / heifsave [meyermarcel] - add @interpretation and @format to rawload - nifti load/save uses double for all floating point metadata - add vips_error_buffer_copy() - add VipsSource and VipsTarget: a universal IO class for loaders and savers - jpeg, png, tiff (though not tiffsave), rad, svg, ppm and webp use the new IO class - rewritten ppm load/save is faster and uses less memory - add @no_strip option to dzsave [kalozka1] - add iiif layout to dzsave - fix use of resolution-unit metadata on tiff save [kayarre] - support TIFF CIELAB images with alpha [angelmixu] - support TIFF with premultiplied alpha in any band - block metadata changes on shared images [pvdz] - RGB and sRGB are synonmous 17/9/19 started 8.8.4 - improve compatibility with older imagemagick versions - remove realpath, since it can fail on systems with grsec 31/8/19 started 8.8.3 - revert sharpen restoring the input colourspace - xres/yres tiffsave params were in pixels/cm [f--f] 9/7/19 started 8.8.2 - better early shutdown in readers - don't attempt to save large XMP to jpeg [tnextday] - always fetch HEIC metadata from the main image [zhoux2016] - fix loop in malformed ppm [Kyle-Kyle] - better support for PNGs with long comment names - fix build with GM - add locks for pdfium load - fix build with MSVC - fix a problem with shinkv tail processing [angelmixu] - fix a read one byte beyond buffer bug in jpegload - make GIF parsing less strict - better feof() handling in GIF load - clip coding and interpretation on vips image read - check image bounds for GIF load - prevent over-pre-shrink in thumbnail [kleisauke] - fix sharpen with sigma 0.5 [2h4dl] - sharpen restores input colourspace - verify bands/format for coded images - improve data_length handling for jpeg metadata 24/5/19 started 8.8.1 - improve realpath() use on older libc - better magickload error messages - more consistent behaviour for page-height metadata - fix for composite with many small images and some combinations of blend modes - fix memleak in tiff pyr save to memory [scossu] - istiff attempts to read the first directory rather than just testing the magic number [przemyslawpluta] - much faster ismagick() [jcupitt] - better behaviour for vips_region_fetch() if request lies partly outside image - remove 256 band limit in arithmetic.c [erdmann] - disable Orc if building with CET [lovell] - fix vipsthumbnail with pyr tiff [kleisauke] - text autofit could occasionally terminate early [levmorozov] - fewer warnings on tiffload [chregu] - vips_resize() breaks aspect ratio and limits shrink to prevent <1px dimensions [lovell] 21/9/18 started 8.8.0 - much faster smartcrop [lovell] - add low/high to smartcrop [jcupitt] - add XMP support to png read/write [jcupitt] - deprecate thumbnail auto_rotate, add no_rotate [jcupitt] - implement thumbnail shrink-on-load for openslide images [jcupitt] - add animated webp support [jcupitt] - revise vips_cast() to improve behaviour with uint images [erdmann] - add bandand()/or()/eor() to cplusplus binding [clcaalu] - implement shrink-on-load for tiff pyramids [jcupitt] - added vips_image_set_blob_copy() [jcupitt] - don't stop composite on first non-transparent image [felixbuenemann, GDmac] - add vips_rect_overlapsrect() - composite is much faster at positioning subimages - stop tiff pyr layers if width or height drop to 1 [gvincke] - dzsave has a new skip_blanks option - add vips_CMYK2XYZ() and vips_XYZ2CMYK(), plus associated routes - include cmyk and srgb fallback profiles - add vips_profile_load() and use it everywhere - fix race in temp filename creation [lhecker] - add @reduction_effort param to webpsave [lovell] - add @option_string param to thumbnail_buffer [kleisauke] - add XMP, IPCT, ICC, EXIF etc. support to magickload/magicksave - much lower memuse for gifload - tilecache speedups - add vips_heifload(), vips_heifsave() - add heif thumbnail support to vips_thumbnail() - free threadpool earlier, reducing mem growth for some long-running processes [jtorresfabra] - add vips_region_fetch() / _width() / _height() for language bindings - vips_text() supports justification - move vips_image_set_kill() and iskilled() to the public API - dzsave to szi sets suffix correctly [martinweihrauch] - dzsave szi writes "scan-properties.xml" - add vips_image_(get|set)_image() - add openslideload option to attach all associated images as metadata - dzsave to szi will write all associated images - remove old c++ and python interfaces - vipsthumbnail can thumbnail animated and multipage images - deprecate webpload @shrink, use @scale instead 31/3/19 started 8.7.5 - better buffer sizing in tiff reader [omira-sch] 4/1/19 started 8.7.4 - magickload with magick6 API did not chain exceptions correctly causing a memory leak under some conditions [kleisauke] - zero memory on allocate to prevent write of uninitialized memory under some error conditions [Balint Varga-Perke] 21/11/18 started 8.7.3 - fix infinite loop for autofit with non-scaleable font - mapim was not offsetting by window offset [erdmann] - better rounding for scale [kleisauke] - fix a memleak in magick6load [kleisauke] 21/11/18 started 8.7.2 - more info output for temp files to help diagnose problems - vips_text() could set the wrong DPI - vips_text() leaked in autofit mode 23/9/18 started 8.7.1 - update function list in docs [janko-m] - test for g_str_to_ascii() [jcupitt] - fix temp file open on Windows and fallback on linux [lovell] 23/12/17 started 8.7.0 - add magicksave, save image with libMagick [dlemstra] - remove jpeg thumbnail from EXIF if "jpeg-thumbnail-data" has been removed by user - hough_line scales width to 0 - 180, not 0 - 360 - hough_line is 4x faster - hough_circle is 2x faster - add vips_sobel() and vips_canny() edge detectors - add vips_rotate() ... a convenience method for vips_similarity() - svgload was missing is_a [lovell] - better header sniffing for small files - drop incompatible ICC profiles before save - better hasalpha rules - create funcs always make MULTIBAND (ie. no alpha) - use O_TMPFILE, if available [Alexander--] - set "interlaced=1" for interlaced JPG and PNG images - add PDFium PDF loader - jpegload adds a jpeg-chroma-subsample field with eg. 4:4:4 for no chrominance subsampling. - tiffload, pdfload, magickload set VIPS_META_N_PAGES "n-pages" metadata item - add fontfile option to vips_text() [fangqiao] - add vips_transpose3d() -- swap major dimensions in a volumetric image - remove vips7 stuff from default API ... you must now #include it explicitly - added vips_argument_get_id() to fix derived classes on win32 [angelmixu] - fix compile with MSVC 2017 [angelmixu] - pdfload has a option for background - vips7 C++ interface defaults off - make members, getters and operators "const" in cpp API - composite has params for x/y position of sub-images [medakk] - add Mitchell kernel - pyramid builders have a choice of 2x2 shrinkers [harukizaemon] - add `palette` option to pngsave [felixbuenemann] - add basic nifti load/save support - support writing string-valued fields via libexif - paste in the test suite from pyvips - get EXIF tag names from tag plus ifd [@Nan619] - escape ASCII control characters in XML - magickload now sniffs some file types itself - update radiance load from upstream - add region_shrink to tiffsave - mapim could fail for float index images with coordinates out of int range - scale openexr alpha to 0 - 255 - close input earlier, when we can [kleisauke] - add vips_object_get_args() for language bindings [kleisauke] 12/3/18 started 8.6.4 - better fitting of fonts with overhanging edges [Adrià] - revise C++ example [fangqiao] - strict round down on jpeg shrink on load [davidwood] - configure test for g++ 7.2 and composite.cpp - don't Ping in magickload, too unreliable - ensure WebP can add metadata when compiled with libwebpmux [lovell] - improve accuracy of vector path convolution [felixbuenemann] 12/2/18 started 8.6.3 - use pkg-config to find libjpeg, if we can - better clean of output image in vips_image_write() fixes a crash writing twice to memory - better rounding behaviour in convolution means we hit the vector path more often - fix a crash if a delayed load failed [gsharpsh00ter] - icc_import attaches the fallback profile if it used it 5/1/18 started 8.6.2 - vips_sink_screen() keeps a ref to the input image ... stops a rare race - fix a minor accidental ABI break in 8.6.0 -> 8.6.1 [remicollet] - fix read of plane-separate TIFFs with large strips [remicollet] - fix a C++ warning in composite.cpp [lovell] - remove number of images limit in composite - composite allows 1 mode ... reused for all joins - fix race in vips_sink() for seq read 10/12/17 started 8.6.1 - fix mmap window new/free cycling - fix some compiler warnings - remove the 64-image limit on bandary operations - better version date [bmwiedemann] - bump wrapper script version [bgilbert] - fix a memleak on error during jpeg buffer write [lovell] - fix misspelling of IPTC as IPCT [lovell] - seq could be set on small images opened in random-access mode [aferrero2707] - fix small memleak in dzsave [lovell] - small speedup for rgb->g [lovell] 15/4/17 started 8.6.0 - supports fits images with leading non-image HDUs, thanks benepo - add vips_image_new_from_image() and vips_image_new_from_image1() ... make a constant image - add new_from_image() to Python as well - slight change to cpp new_from_image() to match py/C behaviour - vips_conv(), vips_compass(), vips_convsep() default to FLOAT precision - add FORCE resize mode to break aspect ratio - add vips_thumbnail_image() - better prefix guessing on Windows, thanks tumagonx - savers support a "page_height" option for multipage save - rename 'disc' as 'memory' and default off - add vips_find_trim(), search for non-background areas - remove lcms1 support, it had bitrotted - `join` tagged as seq - support tiffsave_buffer for pyramids, thanks bubba - thumbnail and vipsthumbnail have an option for rendering intent, thanks kleisauke - set file create time on Windows, thanks dlong500 - remove python tests ... moved to pyvips test suite - vips7 and vips8 python bindings default to off ... use the new pyvips binding instead - better svgload: larger output, handle missing width/height, thanks lovell - add vips_gravity() ... embed, but with direction rather than position - vips_text() can autofit text to a box, thanks gargsms - add vips_composite() / vips_composite2(): merge a set of images with a set of blend modes - better gobject-introspection annotations, thanks astavale - vips_image_write() severs all links between images, when it can ... thanks Warren and Nakilon - vector path for convolution is more accurate and can handle larger masks - linear and cubic kernels for reduce are higher quality - added vips_value_set_blob_free() - "--size Nx" to vipsthumbnail was broken, thanks jrochkind - fix build with gcc 7 - add vips_fill_nearest() ... fill pixels with nearest colour - add VIPS_COMBINE_MIN, a new combining mode for vips_compass() - vips_hist_find_indexed() now has a @combine parameter - vips_affine() and vips_similarity() have a "background" parameter - fix nasty jaggies on the edges of affine output, thanks chregu - add gif-delay, gif-comment and gif-loop metadata - add dispose handling to gifload - dzsave outputs extra right and bottom overlap-only tiles, for closer spec adherence - deprecate the "centre" option for vips_resize(): it's now always on - setting the EXIF data block automatically sets other image tags - add "extend" option to affine; resize uses it to stop black edges 29/8/17 started 8.5.9 - make --fail stop jpeg read on any libjpeg warning, thanks @mceachen - don't build enumtypes so often, removing perl as a compile dependency - fix a crash with heavy use of draw operations from language bindings, thanks @Nakilon 2/8/17 started 8.5.8 - fix transparency detection in merge, thanks Haida - define env var VIPS_WARNING to hide warning messages - shut down dzsave output earlier to help mark-sweep bindings - fix webp thumbnail upscale, thanks Kleis 9/6/17 started 8.5.7 - better smartcrop - transform cmyk->rgb automatically on write if there's an embedded profile and the saver does not support cmyk - fix DPI mixup in svgload ... we were writing images about 20% too large, thanks Fosk 19/5/17 started 8.5.6 - tiff read with start page > 0 could break edge tiles or strips - raise b64 limit to allow for huge profiles (thanks jaume) - fix error return in blob save (thanks jaume) - tag vipsprofile as py2 (thanks ioquatix) - don't cache thumbnail (thanks tomasc) 23/4/17 started 8.5.5 - doc polishing - more improvements for truncated PNG files, thanks juyunsang - improve corrupted jpg handling, thanks juyunsang - fix small test suite issues on os x 23/4/17 started 8.5.4 - don't depend on image width when setting n_lines, thanks kleisauke 7/4/17 started 8.5.3 - more link fixing in docs - revise cache sizing again to help out of order errors under heavy load, thanks kleisauke 25/3/17 started 8.5.2 - better behaviour for truncated PNG files, thanks Yury - missing proto for vips_tiffsave_buffer(), thanks greut - move some docs from the wiki and blog into core libvips docs - add support for markdown in docs 25/3/17 started 8.5.1 - init more classes earlier, thanks David 13/10/16 started 8.5.0 - rewritten buffer system is safer and frees memory earlier - added tiff save to buffer - added dzsave save to buffer (zip only) - revise header get/set functions - better vipsheader behaviour with complex field types - added vips_image_hasalpha() - added vips_thumbnail() / vips_thumbnail_buffer() - webpload/webpsave read and write icc, xmp, exif metadata - better >4gb detect for zip dzsave output [Felix Bünemann] - all loaders have a @fail option, meaning fail on first warning, though it only does anything for jpg and csv - add vips_image_get_fields() to help bindings - add tiff multi-page read/write - add VIPS_META_PAGE_HEIGHT metadata - IM6/IM7 magickload supports page/n/page-height, all_frames deprecated - gifload supports n/page-height - added #defines for VIPS_SONAME, VIPS_LIBRARY_CURRENT, VIPS_LIBRARY_REVISION, VIPS_LIBRARY_AGE - better support for bscale / bzero in fits images - deprecate vips_warn() / vips_info(); use g_warning() / g_info() instead - vipsthumbnail supports much fancier geometry strings, thanks tomasc - vips_thumbnail() has new @size option - fix --vips-cache-max etc. - add compute reordering, plus some new API to support it: vips_reorder_margin_hint() and vips_reorder_prepare_many(), thanks aferrero2707 - kick load operations from cache on read error, thanks gaillard - fix return from C++ assignment operator overloads (+=, -= etc) - add @max_slope to vips_hist_local() to implement CLAHE, thanks hunter-87 - vips_gaussnoise() pixels are reproducible on recalc, thanks MvGulik - max/min sort values by y and x coordinate - tiff read uses libtiff scanline API if rows-per-strip is large - vips_region_shrink() knows about alpha, helps dzsave and tiffsave - use expat, not libxml, for XML load ... removes a required dependency, since we get expat as part of glib - new sequential mode infrastructure is faster and more flexible - add vips_smartcrop(), based on sharp's smartcropper - vipsthumbnail has a --smartcrop option - added vips_rot90() etc. convenience functions - fix vips_resize() bug when hscale and vscale were very different 8/12/16 started 8.4.5 - allow libgsf-1.14.26 to help centos, thanks tdiprima 11/11/16 started 8.4.4 - fix crash in vips.exe arg parsing on Windows, thanks Yury 18/10/16 started 8.4.3 - fix error detection in gif_close, thanks aaron42net - fix tiny threading memleak - improve compatibility with very old glib, see #548 27/9/16 started 8.4.2 - small doc improvements - fix error message for metadata fetch type mismatch - resolve a race condition in thread shutdown, thanks Lovell 1/5/16 started 8.4 - many more wepsave options [Felix Bünemann] - added quant_table option to wepsave [Felix Bünemann] - added @n option to pdfload, thanks andris - dzsave won't write empty tiles in google mode, thanks bverem, perog, felixbuenemann - allow nested [] in CLI args - restore BandFmt on unpremultiply in vipsthumbnail - better python detection and build [Felix Bünemann] - max-alpha defaults to 65535 for RGB16/GREY16 - added radsave_buffer [Henri Chain] - support tiff orientation tag - autorotate option for tiff load - tiffsave converts for jpg if jpg compression is turned on - tiffsave supports --strip - conversions to GREY16 could lock - free pixel buffers on image close as well as thread exit ... stops main thread buffers clogging up the system - dzsave can write compressed zips [Felix Bünemann] - vips_image_write() only refs the input when it has to ... makes it easier to combine many images in bounded memory - VImage::write() implementation was missing - VImage::write() return value changed from void to VImage to help chaining - added C++ arithmetic assignment overloads, += etc. - VImage::ifthenelse() with double args was missing =0 on options - better accuracy for reducev with smarter multiplication - better quality for vips_resize() with linear/cubic kernels - pyvips8 can create new metadata - better upsizing with vips_resize() - add imagemagick v7 support, thanks sachinwalia2k8 - added vips_worley(), vips_perlin() noise generators - added vips_convf(), vips_convi(), vips_convasep(), vips_conva() ... im_conv*() functions rewritten as classes - vips_convsep() calls vips_convasep() for the approximate case - new fixed-point vector path for convi is up to about 2x faster - gif loader can make 1, 2, 3, or 4 bands depending on file contents - support --strip for pngsave - add svgz support [Felix Bünemann] - rename bootstrap.sh -> autogen.sh to help snapcraft - support unicode filenames on Windows - added VIPS_ROUND as well as VIPS_RINT - resize/reduce*/shrink*/affine now round output size to nearest rather than rounding down, thanks ioquatix - better support for tile overlaps in google maps mode in dzsave - dzsave puts vips-properties.xml in the main dir for gm and zoomify layouts - resize and reduce have @centre option for centre convention downsampling - vipsthumbnail uses centre convention to better match imagemagick _ add vips_foreign_get_suffixes() 19/8/16 started 8.3.4 - better transparency handling in gifload, thanks diegocsandrim 30/7/16 started 8.3.3 - fix performance regression in 8.3.2, thanks Lovell - yet more robust vips file reading 18/5/16 started 8.3.2 - more robust vips image reading - more robust tiff read [Matt Richards] 15/4/16 started 8.3.1 - rename vips wrapper script, it was still vips-8.2, thanks Benjamin - export C++ operator overloads for MSVC linking [Lovell] - fix magickload @page with GraphicsMagick - add giflib5 support - allow resize >1 on one axis, <1 on the other - vips_resize has an optional @kernel argument - fix giflib4 detection [felixbuenemann] 29/1/16 started 8.3 - add vips_reduce*() ... a fast path for affine downsize - vips_resize() uses vips_reduce() with lanczos3 - bicubic is better on 32-bit int images - add pdfload, svgload, gifload for PDF, SVG and GIF rendering - vipsthumbnail knows about pdfload and svgload - added @page param to magickload - matload is more specific (thanks bithive) - lower mem use for progressive jpg decode - sharpen has a new @sigma param, @radius is deprecated - sharpen allows a much greater range of parameters - sharpen defaults now suitable for screen output - better handling of deprecated args in python - much better handling of arrayimage command-line args - faster hist_find (Lovell Fuller) - webpload has a @shrink parameter for shrink-on-load - vipsthumbnail knows about webp shrink-on-load - better behaviour for vips_cast() shift of non-int types (thanks apacheark) - python .bandrank() now works like .bandjoin() - vipsthumbnail --interpolator and --sharpen switches are deprecated - switches to disable PPM, Rad and Analyze support - added VIPS_COUNT_PIXELS(), overcomputation tracking - @out_format in vips_system() can contain [options] - webpsave_buffer no longer ignores @lossless, thanks aaron42net - float tiff tagged as scRGB to match photoshop convention, thanks Murat - better jpeg autorot, thanks otto 24/3/16 started 8.2.4 - fix nohalo and vsqbs interpolators, thanks Rafael 27/1/16 started 8.2.3 - fix a crash with SPARC byte-order labq vips images - fix parsing of filenames containing brackets, thanks shilpi230 - fix hist_entropy (lovell) - small fixes to radiance load 12/1/16 started 8.2.2 - changes to ease compiling C++ binding with MSVC [Lovell Fuller] - reorder file tests to put slow loaders last - ifthenelse needs less C stack during eval - better rounding in bilinear interpolator - fix to "make check" in non-C locales [felixbuenemann] - use compiler builtins isnan, isinf, fabs, fmin, fmax, ceil, floor when possible [Lovell Fuller] - tune vips_shrinkh(), 30% faster [Lovell Fuller] - remove SEQ hint from vips_subsample(), fixes cli performance [erdmann] - fix double free on attach ICC profile from file in tiff write [erdmann] - use g_assert_not_reached() - better vips-from-C docs - remove Duff from im_conv() / im_conv_f() for a 25% speedup [Lovell Fuller] 1/1/16 started 8.2.1 - add a compat stub [Benjamin Gilbert] - python bandjoin is now just an instance function - small doc improvements - small vips7 C++ improvement - remove exception specifications from vips8 C++ interface [Lovell Fuller] - VImage::get_typeof() now returns GType 7/10/15 started 8.2.0 - added im_bufmagick2vips(), a vips7 wrapper for magick load from buffer - fetch unset property now returns default value rather than warning - many more const declarations to help gobject-introspection - rewritten vips_shrink() is 2x faster, much lower memuse, now handles complex - only allow [] for filename options - add memory.h to Python API .. makes tracked highwater visible - added bandjoin_const to add constant bands to an image - better alpha handling for tiff write, thanks sadaqatullahn - better cache sizing for vips_resize() - sizealike / formatalike / bandsalike elide completely if they can for a x2 saving in C stack use in many cases - added vips_mapim() ... resample with an index image, plus test - try to improve vips_resize() quality a little more - vips_resize() can do non-square resizes - dzsave removes tile metadata by default, thanks Benjamin - jpeg strip option removes a little more, thanks Benjamin - added vips_image_new_from_memory_copy() - improve vips_sink_screen() stability under heavy load - added vips_arrayjoin() - Python x.bandjoin(y) is now x.ibandjoin(y), sorry - faster and lower-mem TIFF read - faster bilinear interpolator - TIFF loads and saves IMAGEDESCRIPTION - add --properties flag to tiffsave - dzsave defaults changed: now writes 256x256 jpegs for non-edge tiles, thanks Daniel 7/5/15 started 8.1.1 - oop, vips-8.0 wrapper script should be vips-8.1, thanks Danilo - fix vips7 pathname parsing on windows, thanks Lovell 7/5/15 starteld 8.1.0 - add vips_premultiply(), vips_unpremultiply() - change the alpha range rules for vips_flatten() to match vips_premultiply() - vipsthumbnail uses vips_resize() rather than its own code - vipsthumbnail uses vips_premultiply() for better alpha quality - added bandand() bandor() bandeor() convenience funcs to Python - oops, base64 encode could pad by up to two zero bytes - added VipsRefString as a thing that gi bindings can unpack - support "with Vips.Image as i:" in Python - try to support DOS CSV and PPM files on linux - add vips_byteswap(), remove byteswap option from vips_copy() - add vips_bandfold()/vips_bandunfold() - dzsave supports zip output > 4gb, thanks benjamin - add support for HSV colourspace [Jonas Øgaard] - skip oversized markers in jpeg write - jpeg exif tags saved as name rather than title - can now set any jpeg exif tag, not just modify existing tags - add vips_hist_entropy() - vips_log(), vips_log10() are zero-avoiding - better overlap handling for dzsave, thanks robclouth - add @spacing option to vips_text() - tiff loads and saves IPCT and Photoshop data 7/5/15 started 8.0.3 - dzsave and tif pyr write could fail for some image dimensions, thanks Jonas 4/5/15 started 8.0.2 - fix a refcount error in C++ wrapper, thanks huskier - better C++ api test - test suite improvements - remove a couple of stray header decls, thanks benjamin 25/4/15 started 8.0.1 - fix some compiler warnings - work around a glib bug that can cause segv under load - add some notes on threading to the docs - better leak reporting 11/2/15 started 8.0 - remove old doc stuff, lots of doc improvements - add fliphor(), flipver(), rot90(), rot180(), rot270(), median(), dilate(), erode() convenience methods to Python and C++ - python: use [] to index and slice image bands, use () to get a point - c++: use [] to band index, () returns a vector - add shift option to cast - sRGB2scRGB and scRGB2sRGB scale 16-bit alpha to and from 8-bit - add magickload_buffer() [mcuelenaere] - add vips_foreign_is_a_buffer() [mcuelenaere] - added test_foreign.py, plus more test images - added vips_region_shrink(), fast x2 shrinker - rewritten tiff writer is about 3 - 4x faster at making pyramids - jpg, magick, png, tiff readers now use only 1 fd per input image - added vips_info_set(), vips_progress_set(), vips_profile_set() ... bindings can now support all the vips command-line options if they wish - better conversion to greyscale, thanks bkw - add vips_image_copy_memory(), improves stability with heavy threading - jpegsave supports new mozjpeg features [lovell] - add vips_vipsload(), vips_vipssave() ... why not 26/3/15 started 7.42.4 - im_maxpos_avg() avoids NaN - small tiffsave doc improvements - better thresholding for tiffsave "squash" mode - add @miniswhite mode to tiffsave 6/2/15 started 7.42.3 - bump version for back-compat ABI change - added vips_image_memory(), an alias for vips_image_new_memory() - improvements to configure for python - remove --disable-cxx configure flag - python imageize preserves interpretation - fix dzsave as a target format 30/12/14 started 7.42.2 - C++ required output params were broken, thanks Lovell - remove VImage::scale() to get scale from header, it clashed with the VipsScale operator, thanks Lovell - allow c++ set enum from string - display param default and range in usage - better docs - more tests - renamed VIPS_FOREIGN_DZ_DEPTH_1 as VIPS_FOREIGN_DZ_DEPTH_ONE etc. to help bindings - vipsthumbnail will return an error code if one or more conversions failed - disable chroma subsample in jpeg-tiff if Q >= 90 - try to handle tiffs with old-style 8-bit colormaps - rename vipsthumbnail -o as -f, -o stays as a hidden flag - fix some small leaks - faster openslide load, thanks Benjamin - add VInterpolate class to cplusplus binding, thanks Lovell - add lower-level operation cache access - turn on leak testing in test suite - don't use isnormal() to test for crazy FP numbers, thanks Murat - much faster RGB16 -> sRGB path 24/12/14 started 7.42.1 - add gobject-2.0 to Requires: in vips and vips-cpp .pc files - bump soname - fix VipsBlob read - remove "future" dependency, thanks bgilbert 4/11/14 started 7.42.0 - better default resolution for png load - better pbm (one bit) load, better pfm (float) load/save - added pbm (one bit) save - changed vips_gaussblur() parameters, sorry - add .szi as a dzsave zip synonym - support tiff XMP metadata - support @density arg to magickload [Lovell] - support python3.4 and python2.7 in new python binding - vips_gaussmat() and vips_logmat() are now int by default, to match vips_conv(), and use @precision, not @integer - added --disable-pyvips8 switch to turn off new py binding - "vips thing" exit status can now be used to test for optional components 25/7/14 started 7.41.0 - start working on --disable-deprecated - fix pngload with libpng >1.6.1 - add vips_resize() - return of vips_init(), but just for bindings - revised type.c to make it more binding-friendly - add @background arg to save: the colour to flatten against - add VIPS_ARGUMENT_MODIFY flag ... used for draw_circle etc, meaning an op which modifies its argument - rename VIPS_OPERATION_RELATIONAL_NOTEQUAL as VIPS_OPERATION_RELATIONAL_NOTEQ for consistency - python vips8 binding - python vips8 test suite: test_arithmetic.py, test_colour.py, test_conversion.py - move zoomify ImageProperties file, now a better match to the official tool - rename VIPS_ANGLE_180 as VIPS_ANGLE_D180 etc. to help python - remove cimg support, we have a gmic plugin now instead - add support for vips8 plugins - added "autorotate" option to jpeg load - added autorot operator - added @filter option to pngsave (Lovell) - C++ vips8 binding 27/10/14 started 7.40.12 - better tiff detection (Lovell) - fix memleak in sharpen (Lovell) - fix profile handling in XYZ2scRGB, thanks Lovell 8/10/14 started 7.40.11 - rework extra band handling for colour functions - set interpretation of matlut output more carefully 8/9/14 started 7.40.10 - icc_import and icc_transform checks the input profile for compatibility with the image, thanks James - try to make vips_thread_shutdown() optional 8/9/14 started 7.40.9 - support jfif resunit "none" - support GRAY as an input and output ICC space - fix a read loop with setjmp() in png read, if the png file is broken - fix vipsthumbnail with both input cmyk and output rgb profiles specified - vipsthumbnail retries with specified input profile if embedded profile is broken - add @profile option to pngsave, matching tiff and jpeg - fix a race in the operation cache [Lovell] 8/9/14 started 7.40.8 - fix configure on rhel6 [Lovell] - mono <-> rgb converters were not handling extra bands, thanks James - support jpeg resunit "none" 21/8/14 started 7.40.7 - width and height were swapped in matlab load - set interpretation more carefully on matlab load - fix memleak in tilecache [Lovell] - fix memleak in VipsArray [Lovell] - fix memleak in webp load from buffer [Lovell] - fix memleak in png save to buffer [Lovell] - make out of order read in png and jpg a fatal error - add thread_shutdown() to C++ (and thereby to python) 12/8/14 started 7.40.6 - more doc fixes - fix similarity rotate+scale, thanks Topochicho - fix 16-bit PNG save, thanks John - fix dzsave date on Windows, thanks John - fix vipsthumbnail on many-core systems, thanks James 25/7/14 started 7.40.5 - fix a race in im_maxpos_avg() - limit n_thr on tiny images - don't exit() on memleak detected, just warn - add "autocrop" option to openslide load - argh fix affine, again, there were sometimes black bars with nohalo and the vips8 interface - pngsave in interlaced mode makes a copy of the image, so it's always seq - vipsthumbnail shrinks to 1/2 window_size - vipsthumbnail has an anti-alias filter between shrink and affine - vipsthumbnail defaults to bicubic - better rounding behaviour for fixed-point bicubic reduces noise - fix pngload with libpng >=1.6.11 - fix colour for openslide read associated 4/7/14 started 7.40.4 - fix vips_rawsave_fd(), thanks aferrero2707 - fix im_point() - vips_scale() now does round to nearest to avoid rounding errors - improve im_openout() compat macro - more vips7 compatibility fixes, thanks steve - more robust vips_system() - add webp support to vips7 30/6/14 started 7.40.3 - fix interlaced thumbnails in vipsthumbnail, thanks lovell - fix use of "header" in benchmark/, thanks David - fits save now caches the image before write, so it's top-to-bottom - add --properties argument to dzsave, thanks bgilbert, jhenriksen 25/6/14 started 7.40.2 - dzsave write to zip stops at 4gb, thanks bgilbert - improve short option name handling, thanks bgilbert - added --enable-docs configure option to help freebsd - removed a bash-ism from configure to help freebsd - don't assume GType fits in an int to help freebsd 24/6/14 started 7.40.1 - revise man.1 pages - fix vips_guess_prefix() 23/6/14 started 7.40.0 - version bump - renamed "header" as "vipsheader" and "edvips" as "vipsedit" 21/1/14 started 7.39.0 - auto-decode for (almost) all operations, see vips_image_decode() - background render thread cleans up and quits neatly - colourspace has a source_space option - operations can be tagged as "deprecated" - redo im_draw_circle(), im_draw_flood(), im_draw_line(), im_draw_mask(), im_draw_image(), im_draw_rect(), im_draw_point(), im_read_point(), im_draw_smudge(), im_label_regions() as classes - better rounding in vips_flatten() - VipsStatistic operations are sequential - vipsthumbnail has --rotate auto-rotate option - removed embedded thumbnail reader from vipsthumbnail: embedded thumbnails are too unlike the main image - fix to vipsthumbnail --crop, thanks Alessandro - add vips_sum() - add vips_hough base class and vips_hough_line() - add "mode" param to vips_draw_image() - add vips_hough_circle() - reduce default cache size to 1,000 operations - added "postbuild" signal - vips_system() now supports many input images and you can change image argument order - support 16-bit palette TIFFs, plus palette TIFFs can have an alpha - libgsf-1 is now an optional dependency - dzsave can directly write a ZIP file - add ".vips" as an alternative suffix for vips files - added vips_tiffload_buffer() - added vips_image_new_from_buffer(), vips_image_write_to_buffer() - added vips_object_set_from_string() - added @container option to dzsave - support 1/2/4 bit palette tiff images with alpha - vips_system() now uses g_spawn_command_line_sync() - added im_tile_cache_random() to help nip2 - added hough_circle() to vips7 C++ API - added Travis CI config, thanks Lovell - im_*merge(), im_*mosaic(), im_match*(), im_global_balance*(), im_remosaic(), im_*mosaic1(), im_*merge1() redone as classes - better filename tracking for globalbalance - revised vips8 image load/save API, now simpler and more logical - operations emit "invalidate" if any of their input images invalidate - operation cache drops ops on invalidate - skipahead is back, thanks to a new threadpool tweak 6/3/14 started 7.38.6 - grey ramp minimum was wrong - vipsthumbnail --crop could fail for very non-square images, thanks Alessandro - fix a crash in vips_rawsave(), thanks Andrea - updated German translation, thanks Chris - fix coordinate error in affine, thanks ferryfax 24/2/14 started 7.38.5 - jpeg load from buffer could write to input, thanks Lovell - fix webpload from buffer, thanks Lovell - vips_sequential() could fail under heavy load - remove support for seq mode read for operations like extract 13/2/14 started 7.38.4 - --sharpen=none option to vipsthumbnail was broken, thanks ferryfax - more locking on property create and lookup to help very-threaded systems, thanks Nick 22/1/14 started 7.38.3 - undeprecate VIPS_MASK_IDEAL_HIGHPASS and friends, ruby-vips was using them, thanks ahacking 22/1/14 started 7.38.2 - auto RAD decode for affine - falsecolour was not working for some image types - foreign memory buffer images did not have the right dhint, broke command-line falsecolour on sequential images - support many Radiance readers active at once - add secret "rgbjpeg" flag to vips_tiffsave() to help IIP 19/1/14 started 7.38.1 - bump soname, thanks benjamin - better conversion to and from scrgb/xyz for rad (hdr) - fix --interpolate flag to vipsthumbnail, thanks Lovell 18/1/14 started 7.38.0 - version bump 19/10/13 started 7.37.0 - redone im_rotate_*mask45(), im_gauss_*mask*(), im_log_*mask(), im_dilate(), im_erode(), im_rank_image(), im_compass(), im_linedet(), im_gradient(), im_convsep(), im_convsep_f(), im_fastcor(), im_spcor(), im_sharpen() as classes - im_gradcor() deprecated - vips_init() now does some ABI compat checking, though this change requires an ABI break - add "interlace" option to vips_jpegsave() - remove vips_image_copy_fields() and vips_demand_hint() and add vips_image_pipeline() to do both jobs - vipsthumbnail allows non-square bounding boxes, thanks seth - add vips_matrixprint() - add @point subsample mode to vips_subsample() - im_contrast_surface() deprecated: it was slower than calling conv a few times - radiance load supports sequential read - rewritten radiance decode is much faster - add vips_crop(), a synonym for vips_extract_area() - rename vips_gammacorrect() as vips_gamma(), now takes 1 / exp - vips_gamma() works for any format - add --linear mode to vipsthumbnail - support XYZ as a PCS for vips_icc_import() and vips_icc_export() - add --strip option to jpegsave - added vips_gaussblur() convenience function - added --vips-profile, records and dumps thread timing and memory use info - added vipsprofile, visualises --vips-profile output - auto-vectorization-friendly inner loops - added vips::init() and vips::shutdown() to C++ API - reuse pixel buffers on sharing to reduce mem cycling - conv is SMALLTILE, huge mem use saving on wide images - vipsthumbnail has a --crop option - remove video4linux1 code, it was useless on all modern linuxes - redone freq filter builders as classes - redone im_fwfft(), im_invfft(), im_freqflt(), im_disp_ps(), im_fractsurf(), im_phasecor() as classes - vips_colourspace() allows B_W, GREY16, RGB16 as source / target - added vips_thread_shutdown(), thanks Lovell - vips_linear() has a uchar output mode - redone im_cntlines(), im_rank() as classes - move im_zerox() to deprecated, it wasm't very useful 9/1/14 started 7.36.6 - fix some clang compiler warnings 20/11/13 started 7.36.5 - better cache sizing in unbuffered sequential mode - allow larger tile_size in dzsave - remove use of PATH_MAX to help gnu hurd - fix vips_hist_match() 15/11/13 started 7.36.4 - improve compat with im_init_world() 18/10/13 started 7.36.3 - fix compiler warnings in ubuntu 13.10 - reverse similarity rotation direction to match the convention used elsewhere in vips - fix blocked caching of sequential load operations - fix cache flags - fix --delete option to vipsthumbnail 10/10/13 started 7.36.2 - better jpeg startup - rename jpeg bool type to reduce confusion between libraries 3/10/13 started 7.36.1 - fix to help OS X build 3/10/13 started 7.36.0 - version bump 1/7/13 started 7.35.0 - added vips_matrixload() and vips_matrixsave(), load and save vips mat format - rename image arrays as image matrices ... INTERPRETATION_ARRAY -> INTERPRETATION_MATRIX etc. - rewrite im_buildlut(), im_identity*(), im_maplut(), im_falsecolour(), im_gammacorrect(), im_histgr(), im_histcum(), im_histnorm(), im_heq(), im_histnD(), im_histindexed(), im_histspec(), im_invertlut(), im_lhisteq(), im_stdif(), im_project(), im_profile(), im_tone_build*(), im_mpercent*(), im_ismonotonic() as classes - vips_hist_local(), vips_stdif() do any number of bands - thin vips8 wrapper for im_histplot() - added vips_error_freeze() / vips_error_thaw() - used freeze() / thaw() to stop file format sniffers logging spurious errors - vipsthumbnail uses embedded jpg thumbnails if it can - rename vips_diag() as vips_info(), add --vips-info flag - deprecate im_hsp() - added vips_webpload(), vips_webpload_buffer(), vips_webpsave(), vips_webpsave_buffer(), vips_webpsave_mime() - tiff reader allows separate planes for strip read - tiff reader and writer allow many more formats, eg. 32-bit int, complex, etc. - tiff reader and writer allow any number of bands - added vips_image_new_matrixv() - dzsave basename param now called filename, so you can use .dz as a destination (basename is still there but deprecated) - new _UNBUFFERED sequential mode saves memory in some important cases - vips_conv() is a simple wrapper over the old convolution functions - new optimize_coding param for jpeg write produces optimal Huffman tables, thanks Lovell - im_tone_map() and im_tone_analyse() deprecated - new --band arg to vips_maplut() replaces im_tone_map() functionality - added vips_similarity(), simple wrapper for vips_affine() that lets you give a scale and rotate 3/7/13 started 7.34.2 - lower priority for Matlab load to reduce segvs from Mat_Open(), thanks Michael - null-terminate libexif strings, thanks Mike - openslide always outputs solid pixels 28/6/13 started 7.34.1 - fix morphological operators on non-uchar images - remove any ICC profile when we use vips to go to srgb 7/6/13 started 7.34.0 - version bump - oops, VImage.PIL_mode_from_vips() failed for CMYK, thanks Alessandro - fix no-pango build - add im_vips2dz(): run the deepzoom writer from vips7 - vips_magickload() has an option to read all images in a sequence - redo im_make_xy(), im_*eye(), im_zone*(), im_sines() as classes - added vips_pngload_buffer() - faster --centre option to dzsave, thanks Kacey 12/3/13 started 7.33.0 - vipsthumbnail lets you specify the sharpening mask - turn off caching for im_copy()/vips_copy(), we use copy to stop sharing, and it's cheap so caching doesn't help anyway - auto rshift down to 8 bits on save, if necessary - im_gaussnoise(), im_copy_file(), im_grid(), im_scale(), im_scaleps(), im_wrap(), im_rotquad(), im_zoom(), im_subsample(), im_msb(), im_text(), im_system(), im_system_image() redone as classes - add --angle option to dzsave - another vips_shrink() fix argh 14/5/13 started 7.32.4 - icc import and export could segv on very wide images - fix centos 5 build, thanks re-boot 16/4/13 started 7.32.3 - rename GETTEXT_PACKAGE as vips7.32 to help Debian (thanks Jay) - added "persistent" option to tilecache 12/3/13 started 7.32.2 - removed some left-over debugging code from configure.ac - better handling of args without values, thanks Ruven - better error messages from vips.c - fix demand hints so "vips shrink" works again, thanks Jan - im_jpeg2vips.c builds without jpeglib.h, thanks Alessandro 6/2/13 started 7.32.1 - fix --without-lcms, thanks speckins - updates to licence, thanks Benjamin - remove "fred" from dist - better bootstrap on OS X 22/1/13 started 7.32.0 - tilecache in threaded mode could deadlock if the downstream pixel source raised an error (thanks Todd) - fix another dzsave corner-case (thanks Martin) - neater output for "header" - added VIPS_META_LOADER: record the loader name = header displays this loader hint - vipsthumbnail is better at cache sizing 31/8/12 started 7.31.0 - redone im_Lab2XYZ(), im_XYZ2Lab(), im_Lab2LCh(), im_LCh2Lab(), im_UCS2LCh, im_LCh2UCS(), im_XYZ2Yxy(), im_Yxy2XYZ(), im_float2rad(), im_rad2float(), im_Lab2LabQ(), im_LabQ2Lab(), im_Lab2LabS(), im_LabS2Lab(), im_LabQ2LabS(), im_LabS2LabQ(), im_LabQ2disp(), im_XYZ2disp(), im_disp2XYZ(), im_icc_import*(), im_icc_export*(), im_icc_transform*(), im_dE_fromLab(), im_dECMC_fromLab(), im_dE00_from_Lab(), im_icc_ac2rc() as classes - added vips_colourspace(), vips_colourspace_issupported(), replaces all derived conversions - faster and more accurate sRGB <-> XYZ conversion - support 16-bit sRGB import and export - rename UCS colourspace as CMC - dzsave can write zoomify and google maps layout as well - tilecache supports threaded access, so openslide read now threads - openslide2vips gets underlying tile size from openslide - embed has 'background' option - dzsave --layout google has a @background option - dzsave has a --depth option - update for new glib threading API - remove no threads option, glib no longer support it - better --help output for vips driver prog - vipsthumbnail -o allows absolute file names - much better exif handling for jpg images (thanks Gary) - preserve jpeg app13 (photoshop ipct) - vips_max() / _min() track the top n maxima / minima - deprecate im_maxpos_avg(): too specialised to be worth maintaining - deprecate im_linreg(): easily done by combining other operators - deprecate im_point(): easily done by combining other operators - add binary complex operations, with cross_phase as the only one so far - added vips_bandbool(), with vips_bandand(), _bandor(), _bandeor() as convenience functions - added scRGB colourspace, linear light float space with sRGB primaries - all interpolators use corner convention ... we had round-to-nearest in several of them before, causing a range of annoying problems - redone im_affine*() as a class - added input space displacement to affine - VipsArea is threadsafe - dzsave has a --centre option 31/12/12 started 7.30.8 - png icc profile write was broken 31/12/12 started 7.30.7 - better option parsing for "vips", thanks Haida - small fixes to help OS X - backported threaded tile cache from next version, im_tile_cache() now uses it to prevent a deadlock, see comment there 14/11/12 started 7.30.6 - capture tiff warnings earlier 14/11/12 started 7.30.5 - fix libtool version mess up (thanks Benjamin) 2/10/12 started 7.30.4 - remove options from format string in .dzi (thanks Martin) - vipsCC.pc required the wrong version of vips (thanks Alessandro) - larger max tile size for dzsave - linecache is 50% larger to leave some slop room 13/9/12 started 7.30.3 - linecache sized itself too large - fix a compile failure if libtiff was not found (thanks Martin) - dzsave did not work for images with an odd number of scanlines (thanks Martin) 4/9/12 started 7.30.2 - sequential stops all threads on error - sequential delays ahead threads rather than blocking them completely 6/8/12 started 7.30.1 - fixes to dzsave: shrink down to a 1x1 pixel tile, round image size up on shrink, write a .dzi file with the pyramid params, default tile size and overlap now matches the openslide writer - wrap VipsInterpolate for C++ - so affinei and affinei_all appear in Python - be more cautious enabling YCbCr mode in tiff write - add "DEPRECATED" flag to arguments - jpeg load/save note and use the preferred resolution unit - better error msgs for enum args - fix compiler warnings in production build (thanks Dmitry) - fix spurious warnings about exif updates - VipsSequential has an integrated cache and stalls out of order threads - add a line cache ... sizes up dynamically with request size - tilecache / linecache use a hash table not a linear list 20/7/12 started 7.30.0 - support "rs" mode in vips7 - add --vips-version cmdline arg - fix --without-tiff / exr / jpeg / png / magick - add --vips-fatal flag 19/3/12 started 7.29.0 - sanity-check PNG read geometry - nearest-neighbor interpolation rounds coordinates to nearest instead of rounding down (thanks Nicolas) - add dzsave, save in deep zoom format - rework im_shrink() as a class - remove im_rightshift_size(), just a convenience function now - vipsthumbnail no longer removes profiles by default - much more gentle sharpening in thumbnails - added "minimise" signal, used by tilecache to drop - add :seq support to im_tiff2vips(), im_jpeg2vips() ... helps ruby-vips - better thread safety for vips8 operation dispatch - better thread safety for upstream / downstream image linking - added "rs" open mode, removed "rd" - added vips_operation_get_flags() ... system for attaching sets of flags to operations - added VIPS_OPERATION_SEQUENTIAL flag - vips8 command-line interface uses this to turn sequential mode on automatically when possible - better handling of input files in vips7 command-line interface - sequential can skip ahead, so extract / insert are now seq 16/7/12 started 7.28.10 - wopconst was broken - vips_sign() was broken - png save compression range was wrong - more/moreeq was wrong - vips7 ppm save with options was broken - don't cache write operations 18/6/12 started 7.28.9 - slightly more memory debugging output - remove references to the static bicubic interpolator from the docs - fix temp file handling on Windows --- was breaking for non-vips files over 100mb - better support for using images from multiple threads 18/6/12 started 7.28.8 - fixes for centos5 portability 18/6/12 started 7.28.7 - add vips_flatten() -- flatten RGBA to RGB - better alpha handling in PNG load - don't save RGBA PNG as CMYK JPG (thanks Tobsn) - fix a crash with malformed jpg files (thanks Grigoriy) - vipsthumbnail enables sequential mode more and caches lines better 19/4/12 started 7.28.6 - better resolution unit handling in deprecated im_vips2tiff() - use TIFF_CFLAGS output from pkg-config (thanks Jay) - much faster vips_argument_map() - make jpeg pyramids work with tiff4 - tiff loader always offers THINSTRIP (thanks Diuming) - add "nocache" operation flag, set for sequential load (thanks Diuming) - fix a crash in the tiff reader for huge values of RowsPerStrip (thanks Nicolas) - remove use of G_DEFINE_BOXED_TYPE() to help compat (thanks Jake) 19/4/12 started 7.28.5 - ifthenelse blend mode was broken - small blend speedup - default to libtiff-4 17/4/12 started 7.28.4 - up max buffer size for vipsbuf 6/4/12 started 7.28.3 - vips_divide() failed for int arguments - fix warning for unused vips7 gvalue argument - fix openslide read: always return png-style rgba, im_argb2rgba() becomes a NOP - cast to unsigned int now removes <0 values - vips7 interface to openslide now supports :,level,associated options (thanks Benjamin) - make vips8 cache smaller - more accurate progress reporting 13/3/12 started 7.28.2 - xres/yres tiffsave args were broken 13/3/12 started 7.28.1 - add ICC profile read/write for png files 30/1/12 started 7.28.0 - version bump - added vips_foreign_find_save_options()/vips_foreign_find_load_options() - delayed write to foreign via a "w" image was not working - support operations with many returns in Python - sequential read mode - better im_shrink() - added vips_sequential() - new vips_sink_memory() keeps read ordering - tiff, jpeg, png readers support sequential read - max/min avoid NaN - oop, histnorm was broken by the new vipsstats - never use IM ping to get a header, fixes BMP load - set @filename for non-vips formats in vips7 compat layer - make Xres/Yres double - completely disable debug by default in production builds 20/8/11 started 7.27.0 - version bump for new dev cycle - im_subtract(), im_avg(), im_min(), im_minpos(), im_copy(), im_embed(), im_flophor(), im_flipver(), im_insert(), im_insert_noexpand(), im_lrjoin(), im_tbjoin(), im_extract_area(), im_extract_bands(), im_extract_areabands(), im_replicate(), im_clip2fmt(), im_gbandjoin(), im_bandjoin(), im_invert(), im_lintra(), im_lintra_vec(), im_black(), im_rot90, im_rot180(), im_rot270() im_sintra(), im_costra(), im_tantra(), im_asintra(), im_acostra(), im_atantra(), im_exptra(), im_exp10tra(), im_logtra(), im_log10tra(), im_abs(), im_sign(), im_max(), im_maxpos(), im_deviate(), im_divide(), im_multiply(), im_stats(), im_measure(), im_recomb(), im_floor(), im_ceil(), im_rint(), im_equal*(), im_notequal*(), im_less*(), im_lesseq*(), im_more*(), im_moreeq*(), im_remainder*(), im_and*(), im_or*(), im_eor*(), im_shift*(), im_pow*(), im_exp*(), im_ifthenelse(), im_blend(), im_c2amph(), im_c2rect(), im_bandmean(), im_c2real(), im_c2imag(), im_ri2c(), im_jpeg*2vips(), im_vips2jpeg*(), im_tiff2vips(), im_vips2tiff(), im_exr2vips(), im_fits2vips(), im_vips2fits(), im_analyze2vips(), im_raw2vips(), im_vips2raw(), im_magick2vips(), im_png2vips(), im_png2*(), im_ppm2vips(), im_vips2ppm(), im_mat2vips(), im_rad2vips(), im_vips2rad() redone as classes - added argument priorites to help control arg ordering - generate has a 'stop' param to signal successful early termination - added optional output args, eg. x/y for min - CLI supports optional output args - in im_vips2tiff, enable YCbCr compression for jpeg write - VipsMin stops search early if it can - C API supports optional output args - switch back to int-valued operations - add the operation cache, various --vips-cache-* flags - fallback vips_init() - vips_tracked_malloc() tracks allocation size and can report total mem usage - cache limits, drop, init, flush plus command-line controls - remove dmalloc support, was never used and valgrind is better - im_csv2vips() allows quoted strings, including escaped quotes - added vips_shutdown() - added --vips-leak flag - more VipsImage props - added vips_image_write(), old one becomes vips_image_write_to_file() - added vips_region_paint_pel() - added VipsArea as a public struct - added array members and arguments - added nary - remove VipsPool, vips_object_local_array() is much better - cache.c now drops if you have too many open files - CLI args to change max files - new format for handling exif tags - switch SMALLTILE to 128, 512 was just too big - oop mode "rd" was not always being used for images - added ARRAY interpretation for images - VipsStats tracks minpos/maxpos as well - moved mask/ to deprecated - use atexit() to call vips_shutdown() - set _O_TEMPORARY on delete-on-close temp images if possible - unlink temps on rewind on *nix, less likely to leave temps on a crash - added complex conj as a basic operation - rect/polar/conj work on any format, not just complex - new VipsFile system for load/save in image formats - options now introspectable, try "vips jpegsave" - copy swap uses glib byteswap macros, about 2x faster - edvips can change vips header byte ordering - "header" is terse by default - "header" outputs filenames if working on many files - added openslide support (Benjamin Gilbert) - allow new-style load/save options in filenames to vips_image_new_from_file() etc. - VipsFormat is deprecated - remove outchecks from documented API - support gobject-introspection - new Python binding based on gobject-introspection - only spot options at the end of arg strings - add vips_cache() as a vips8 operator - remove the old fft fallback - remove fftw2 support - much faster im_draw_smudge() 14/1/12 started 7.26.8 - interpolate CLI args were broken (thanks speckins) 5/12/11 started 7.26.7 - lazy read from tiled tiff from layers other than 0 was broken - optional args to vips_call*() do not work, disabled (fixed correctly in master) - address calculations in files over 4gb were broken on 32-bit platforms (broken since March 2011, oops) 12/10/11 started 7.26.6 - NOCACHE was not being set correctly on OS X causing performance problems with large files - update Orientation exif tag on jpeg write 12/10/11 started 7.26.5 - jpeg read/write copies over XMP data - handle offset correctly in separable convolutions (thanks Nicolas) - macros for class arg boilerplate - class arg order set by new 'priority' param - VipsExtend, VipsDirection enums added 12/9/11 started 7.26.4 - fallback vips_init() - im_openout() compat stub was wrong, breaking ruby-vips - vips_class_map_concrete_all() needed a compat macro too - vips_class_map_all() was broken 10/8/11 started 7.26.3 - don't use G_VALUE_COLLECT_INIT(), many platforms do not have a glib this recent - don't leave image->kill set when we detect termination - test for a working C++ compiler, disable C++ parts of none found 10/8/11 started 7.26.2 - oops, im_benchmark.c had some stuff turned off - configure option --without-cfitsio was broken (thanks Mike) 26/7/11 started 7.26.1 - doc fixups - oops, ==0 missing from a strcmp() in vips7compat - fixed a race in im_XYZ2Lab() table build - added im_concurrency_get() to operation db - better benchmarkn.sh runs for the correct number of CPUs automatically, runs three times for each one, and just reports the fastest 26/7/11 started 7.26.0 - version bunp for 7.26 - various fixes to get win32 and OS X building 6/12/10 started 7.25.0 - attach the jpeg thumbnail and multiscan fields (thanks Mike) - faster tiff read for some common cases - faster im_tile_cache() - if we use C++ in libvips, add -lstdc++ to vips-7.xx.pc - im_vips2png() / im_png2vips() set / get png resolution (thanks Zhiyu Wu) - updated README - don't use tables for bilinear on float data for a small speedup (thanks Nicolas Robidoux) - no tables for uchar either, about a 15% speedup (thanks Nicolas) - dmask write was broken - lr/tbmerge() cast images to match, like im_insert() - lr/tbmosaic() work for any mix of image formats / bands - removed ancient balance stuff from im_lr/tbmosaic() - gtk-doc for mosaicing - add im_fits2vips() to the operation database - im_fits2vips() is lazy and much faster - im__file_open_write() / _read() has a flag for text_mode, get rid of all the remaining fopen()s - move cooc_* and glds_* to deprecated - move im_dif_std() to almostdeprecated - move im_simcontr() to almostdeprecated - add im_sines() to operation db - move im_spatres() to almostdeprecated - done gtk-doc for other - --vips-progress tells you about nthreads, tile size, nlines - gtk-doc for interpolate - move im_stretch3() to deprecated - move im_clamp() to deprecated - gtk-doc for video ... all operators done! amazing argh - set MAP_NOCACHE on OS X, otherwise performance dives off a cliff with files larger than memory - removed man pages, we are all gtk-doc now - im_jpeg2vips() ignores weird APP1 chunks - im_add() for int/uint was broken - im_ri2c() was broken - added VIPS_FORMAT_BIGENDIAN format flag - moved IMAGE and REGION to VipsImage and VipsRegion, classes over VipsObject - Rect -> VipsRect - libpng-1.5 supported - better png read for 1-bit and palette images - fits write - better fits metadata support - renamed all header fields, old names still supported, hopefully - all of iofuncs moved to vips_ namespace - lots of old iofuncs API moved to deprecated - added VipsOperation, an abstract base class for all vips operations - added VipsAdd, the first operation object - im_tiff2vips() int/uint mixup for rows_per_strip, thanks Bubba - removed the links feature, won't work with vips8 - got rid of the tools/ subdirs - added im_bufjpeg2vips() - tiff reader can do 1, 2, 4, 8 bit palette images - tiff palette read can do mono images - im_bufjpeg2vips() has a "header_only" parameter - added vips_image_get_data() - updated German translation (thanks Chris) - fixed typo in im_conv() overflow estimation which could cause errors - vips.c has new action syntax, knows about vips8 operations - add now has sizealike - vips7 binops all do sizealike too, also gbandjoin and ifthenelse - new API is now functional - vips.c generates GOption flags for vips8 operations - added im_gauss_dmask_sep() - laplacian generator lost -ve lobes for large sigma - added im_aconv(), approximate convolution - bumped smalltile to 512x512 for testing - added VipsPool, got rid of floating refs again, argh - VIPS_EXEEXT is now part of the exported API - im_blend() also does sizealike, oops - jpeg write was not inverting CMYK, thanks Ole - im_falsecolour() converts to mono 8-bit for you - im_icc_import*/export*() cast inputs for you - im_vips2tiff() uses im__temp_name() for intermediates - added vips_wrap7 ... wrap up vips7 operations as vips8 classes - man pages are back for commands 30/11/10 started 7.24.0 - bump for new stable - added im_dmask2imask(), im_imask2dmask() - im_rotate_*mask90() can do masks of any size (thanks Adam Turcotte) 18/7/10 started 7.23.0 - im_vips2bufjpeg() writes to a linked list, so it will work for any size image and header - added im_vips2bufpng() - use GetTempPath() to pick a temp dir on Windows - added "rd" mode to im_open() - vipsthumbnail and vips use "rd" - im_divide spots /0 - remove liboil dependency, we will use Orc instead - various small cleanups (thanks Tim) - add lcms2 support - VImage(filename) defaults to "rd" mode - revise window_offset / window_size, again - fix a mixup with ANY hints that caused performance problems on the main benchmark - rewritten im_circle as im_draw_circle, im_circle moved to almostdeprecated - added IM_TYPE_RW args for inplace ops --- nip2 uses this to wrap inplace ops automatically - special-case 3x3 masks in im_conv() for a 20% speedup - add IM_TYPE_RW flag for im__rw_image, helps nip2 auto-wrap inplace ops - im_insertplace() casts and bandalikes - copy iconv.m4 and friends in bootstrap, thanks Mike - moved the stupid _copy() versions of the inplace ops to deprecated, since nip2 can call inplace ops directly now - added im_draw_rect(), moved im_paintrect() to deprecated - added im_draw_image(), moved im_insertplace() to deprecated - added im_draw_line(), now clips, moved im_fastline() to deprecated - added im_draw_line_user(), now clips, moved im_fastlineuser() to deprecated - added im_draw_mask(), now wrappable, moved im_plotmask() to deprecated - added im_draw_point(), moved im_plotpoint() to deprecated - added im_read_point(), now partial, moved im_readpoint() to deprecated - added im_draw_smudge(), moved im_smudge() / im_smear() to deprecated - convolution functions support complex images - im_blend() can have any format condition image and it's converted to uchar - security fix for vips-7.23 wrapper script (thanks Jay) - im_affine() has a larger safety margin - fix gtk-doc warnings - small mask load/save improvements - mask gtk-doc done - add cfitsio dependency - add FITS reader - land the vector branch and the orc dependency ... we have SSE erode/dilate/add/conv - add IM_SWAP - dilate/erode do (!=0) on non-uchar images - add multipass Orc to im_conv(), 3.5x faster for 5x5 mask - im_profile() works for any image format, any number of bands - im_rank_image() works for mix of formats, bands - morph gtk-doc done - oops, missing braces in debug.h and util.h, thanks Laurence - update C++/Python binding - oop, bool constants are always (int) now, so (^-1) works for unsigned types, thanks Nicolas Robidoux - much lower memuse for im_cache() in complex pipelines - im_scale_dmask() normalises to 20, not 100 ... we hit the fast conv path more often 12/5/10 started 7.22.2 - the conditional image of ifthenelse can be any format, a (!=0) is added if necessary - oops vipsthumbnail sharpening was turning off for integer shrinks, thanks Nicolas Robidoux - im_vips2jpeg() could fail for very small images (thanks Tim) - threadpool wasn't stopping on allocate errors (thanks Tim) - vips_sink_disc() could block if allocate failed (thanks Tim) 12/5/10 started 7.22.1 - fix a problem with tiff pyramid write and >1cpu, thanks Ruven - constant ops clip to target range - oops, moreconst and moreeqconst were the same - better buffer handling in sinkdisc for single-line images - less chatty errors from "vips" - oops, don't rename "copy_set" as "copy_", thanks Ole 12/5/10 started 7.22.0 - bump and rename - vipsthumbnail has a manualpage and sharpens correctly - more interpolator work - fixes to --disable-cxx mode (thanks Mike) - added German translation, thanks Chris Leick - fixed typos in some messages, thanks Chris Leick - fix gettext startup - all "colour" in messages changed to "color", have a proper en_GB translation file - vipsthumbnail delete profile failed if there was a profile - interpolate cli unref was broken - more accurate, slightly faster bilinear and bicubic (thanks Nicolas Robidoux) 21/3/10 started 7.21.3 - added progress feedback to threadpool - --vips-wbuffer2 switch does all wbuffer use now - im_wbuffer2() renamed as vips_discsink(), some cleanups - im_gammacorrect() can do 16-bit images too - im_histplot() could fail for signed int histograms - im_fwfft() and im_invfft() could free their output image too early - added im_local_imask(), im_local_dmask() - added im_mpercent_hist() - im_maplut() casts the index image to one of the uint types - fixed a couple of /0 problems with scale == 0 masks - set G_LOG_DOMAIN to VIPS so we can use g_warning etc. - added VIPS_DEBUG_MSG() macro - --vips-wbuffer2 turns on threadpool for im_iterate as well - im_vips2tiff() uses vips_sink() instead of threadgroup - strip out threadgroup - add --enable-debug=xxx flag - im_iterate() -> vips_sink() - better number-of-bands detection for im_magick2vips() - added im_get_argv0() - added PFM read / write 16/1/10 started 7.21.2 - "invalidate" is careful to keep images alive, so invalidate callbacks can do im_close() - flood_blob could loop if start point == ink - added im_meta_remove() - added remove profile option to vipsthumbnail - added vips_bandfmt_iscomplex() and friends, im_iscomplex() and friends deprecated - im_bandjoin()/im_gbandjoin() work with images of varying formats - added im_copy_native(), deprecated im_copy_from() and friends - im_check*() name rationalisation - finally removed old flood stuff - im_insert*() bandalike and formatalike - im_*join() bandalike and formatalike - im_ri2c() bandalike - im_vips2png() saves 16-bit PNGs, if necessary - vipsthumbnail has selectable interpolators, optional sharpen - moved a lot of stuff (eg. im_iscomplex()) from deprecated to almostdeprecated to avoid breakage - im_csv2vips(): allow lines that end with EOF rather than \n - im_vips2tiff has a bigtiff option - oops, im_lineset() needs to ask for WIO of mask and ink - move cache invalidation to REGION, fixes a race - don't im_invalidate() after paint, it can cause horrible performance problems ... for example, im_plotmask() used as the action operator for im_fastlineuser() is terrible - instead, users of the inplace operations need to call im_invalidate() at the end of a set of paint actions to trigger an update - parent/child renamed as upstream/downstream in DAG - set VIPS_ICC_DIR in configure - ICC profiles are looked for in VIPS_ICC_DIR as a fallback - im_render() mask image generation no longer triggers image calc - threadgroups scale output buffers with number of threads for smalltile ... improves SMP scaling for narrow images on many-way machines - default to max number of processors (--vips-concurrency and IM_CONCURRENCY set >0 can override) on linux and win32 - better nprocs guesser - im_render() fixes to help the paintbox, some speedups too - added im_wbuffer2(), a new distributed threading system, and --vips-wbuffer2 to enable it, thank you Christian 15/1/10 started 7.21.1 - added "written" callbacks, used to implement write to non-vips formats 26/11/09 started 7.21.0 - branch for new dev cycle - argh, missing init from colour.c (thanks Peter) - argh, im_measure() was not looping over bands correctly (thanks Peter) - removed mmap_limit, we now always use windows ... reduces VM use hugely, because mmap windows are freed when their regions are freed, while images are only unmapped when they are closed - have a min bytes for mmap windows as well, so we don't make too many tiny windows - im_disp2Lab() was broken - deprecated.h is now defined in terms of current functionality, rather than repeating stuff - im_flood() and friends rewritten, typically 4x faster - removed --with-cimg option, added --disable-cxx - added im_system_image() (thanks Roland) - added postclose callbacks - added vipsthumbnail - oops, generate C++/Python wrappers for deprecated operations by default - read TIFF images strip-wise, not scanline-wise - better TIFF YCbCr reading (thanks Ole) - isanalyze generates fewer silly error messages 26/11/09 started 7.20.3 - updated en_GB.po translation - file_length is gint64 to avoid win32 breakage 23/11/09 started 7.20.2 - GETTEXT_PACKAGE now includes lib version number (thanks Jay) 11/11/09 started 7.20.1 - oop, im_clip2fmt() was missing PTOP flag, should get a small speedup - im_conv() / im_convf() didn't like all-zero masks - small updates to im_convf() from im_conv() - im_read_imask() produced an incorrect error message if passed a doublemask - rename im_convf(), im_convsepf() as _f() - vips.c drops _f suffix when overloading - regenerate C++ binding, don't make deprecated package 9/11/09 started 7.20.0 - removed vips-7.x.spec.in, shouldn't really have this in SVN - bumped version to 7.20 - fixes to get "make dist" working again 3/4/09 started 7.19.0 - version bump - tiny conv speedup - catch lcms error messages - fix includes for gtk+-3.0 - report virtual memory too in im__print_all() - cosmetic changes to nohalo - im_magick2vips() needs to invert alpha - now (more or less) passes -Wextra - added "fail" option to im_jpeg2vips: fail with an error on any warning (thank you Ole) - started gtk-doc changes - renamed im_meta_get_type() and im_header_get_type() as im_meta_get_typeof() and im_header_get_typeof() to prevent confusion with GObject type definers (was breaking gtkdoc object scan) - revised more names, limited documented API - im_buildlut() could segv for non-zero based tables (thanks Jack) - VIPS_BUF_STATIC() does not take length arg - check for SetImageOption() so we work with GraphicsMagick too - "header" sets a non-zero exit code if anything failed - add and use im_check_uncoded() and friends - matlab load handles column-major and plane-separated images (thanks Mikhail) - JPEG save allows "none" for profile, meaning don't attach a profile - saner, simpler, faster typecasting for im_add(), im_subtract(), im_multiply(), im_divide(), im_remainder() - im_remainder() has a float result for float types - im_measure() allows sel == NULL, meaning all patches - added "deprecated" package - faster, simpler, better im_max(), im_min, im_avg(), im_deviate() - im_max() returns true modulus, not square of modulus, for complex images - im_avg() works for complex, returning average modulus - im_system() fix (thanks Roland) - im_system() rewrite - im_maxpos()/im_minpos() are partial and work for complex - im_max()/im_min() are now convenience functions - im_maxpos_avg() handles complex and multi-band images - added im_point(), rewrite im_point_bilinear() in terms of this - close callbacks now happen *after* images have closed resources (such as open files) ... this lets them delete temps and stuff. Expect breakage :( - added vips_interpolate_get_window_offset() - boolean revised: smaller, more general, faster - im_remainderconst_vec() renamed to im_remainder_vec() for consistency - added im_shift*_vec() - renamed im_eor_vec() as im_eorimage_vec() for consistency, also and, or - renamed im_eorconst() as im_eorimage_const() for consistency, also and, or - relational revised: smaller, more general, faster - im_blend()/im_ifthenelse() allows many-band conditional, 1-band then/else - im_blend()/im_ifthenelse() allows band and format to differ between then and else parts - better im_check() functions - added im_flood_other() as start of simple segmentation operator - added im_label_regions() - im_printlines(), im_debugim() deprecated (use im_vips2csv() instead) - meta, header, callback, error, region, check, generate, memory gtkdocs - removed printlines tool, vips2csv is much better - removed other useless tools as well: debugim, binfile - fix up addr calcs on 64-bit machines with >2gb images and inplace ops (thanks Christoph) - im_generate() checks that im_demand_hint() has been called for this image - im_jpeg2vips.c, set scale_num on shrink (thanks Guido) - heh argh reading history always stopped after the first line (thanks Haida) - added im_histindexed - new im_iterate() calls start and stop functions from workers so resources they make are owned by the worker thread ... this makes it possible to have start functions which create multiple regions and therefore allows im_iterate() to scan more than one image at once - threadgroup no longer has any default action, you must attach a work function - added im_copy_file() - added im_insertset() - im_insertplace() allows small to be outside big - added im__colour_difference(), colour ops now work on any image format - added im_col_display_get_table(), so display tables are now shared by name - added im__colour_unary() - drop "set" postfix from names, so "insert" can now take a vector of positions - deprecate all the "_raw" variants, not really necessary now - removed "contrib", not very useful anymore - added im_header_as_string() - im_malloc()/im_free() now call g_try_malloc()/g_free() ... removes confusion over whether to use im_free() or g_free() for things like im_header_string() - added im_history_get(), im_getexp(), im_printdesc() as wrapped functions ... so you no longer need the "header" program - image vectors from Python work, woo 25/3/09 started 7.18.0 - revised version numbers - updated vipsmanual - revised manpages - removed name and "changed" from vipsobject since we don't use them yet - explicitly link with stdc++ for nohalo etc. stuff - wrap im_gauss_imask_sep in C++/Python 6/3/09 started 7.17.3 - revised nohalo - remove fading stuff from im_render() -- cleaner and simpler - configure spots support for "restrict" - reset dcm:display-range on magick read to help DICOM - saner im_buildlut() behaviour - added im_gauss_imask_sep() - allow open and view of truncated images (thanks Joe & Rachel) - revising rounding on im_affine*() coordinate transforms to make them more stable - added Radiance write - added im_float2rad() - added IM_CODING_RAD, support where it makes sense (extract, flip, rotate, etc.) - IM_PROGRESS env var - docs for rad2float and IM_CODING_RAD 3/3/09 started 7.17.2 - im_magick2vips.c: allow funky bit depths, like 14 (thanks Mikkel) - isradiance was returning TRUE too often - radiance loader now loads packed RGBE/XYZE instead of unpacking to float - added im_rad2float() 11/10/08 started 7.17.0 - merge vips-7.16 branch back into trunk - bumped version number to 7.17.0 - re-added type.[hc] - added vipsinterpolate and im_affinei - added yafrsmooth interpolation - added yafrtest - added yafrnohalo - ubuntu 8.10 changes - interpolators get an output pointer, not region - tuning for bicubic - revised transform / clip code, we now do corner not centre - yafr-smooth reworked along the lines of bicubic - cleanups after yafr hacking - added affinei_all - don't set im_error() on failed callback - moved im_format_t to VipsFormat, now sits over VipsObject - IM_FORMAT_FLAG_PARTIAL -> VIPS_FORMAT_PARTIAL - updated docs - interpolators use type introspection - added vips --list classes, does formats too - include sys/param.h to get PATH_MAX in more places - added vips_format_get_flags() - oop, forgot to check for cancel during tiled tiff write - don't use mmap for tiff read: no performance advantage, chews up VM - VIPS_INTERPOLATE_SHIFT bumped to 12, we need the extra precision for u16 gel data - added string->double transform for cmdline args - merged class-params branch back into trunk - IM_FREE() can do "const char*" variables - im_buf_t renamed as VipsBuf - added vips_object_to_string() - added "nickname" and "description" properties to VipsObject - shift/and/or/eor ops were broken for non-int types - added nohalo interpolator - updated format docs - IM_INPUT_INTERPOLATE() now used by affinei and affinei_all - added vips_object_new - resamplers/interpolators now in a resample package - removed yafrnohalo.c - added matio as a dependency - added Matlab save file read - added Radiance file read - better file-not-found messages 11/9/08 started 7.16.3 - oop typo in manpage for im_project() - doc fixes - returning non-zero from eval callbacks was not always stopping computation 11/9/08 started 7.16.2 - added --without-v4l option - added -no-undefined to libsrcCC build, so we get a libvipsCC.dll - removed the swig dependency: we include the generated bindings in the distribution tarball 6/9/08 started 7.16.1 - trigger eval callbacks on tiled tiff write - added vips as an im_format_t - added im_format_write()/_read() convenience functions - more cleanups for the format API, argh - removed win32/ directory now mingw finally makes DLLs correctly - removed the windowed spcor for now, it has some edge effects 24/8/08 branch for 7.16 - renames and version numbers - load plgs from libdir as well as libdir/vips-x.x for compat - complex -> complex conversion was broken - refstring <-> gstring transforms - better behaviour with Magick non-presence - added --enable-links switch to configure ... we no longer make the bin/im_* links by default - started a 'format' section in the docs - configure fails if no gettext found - revised po/ - released as 7.16.0! 25/5/08 fork for loadable image format branch - image load/save in non-vips format code moved to own dir - simple format searching added - some cleanups for vips load - im_open() simplified - add im_format_flags - only consider formats with a save method in im_format_for_name() - oops, format sort order was reversed - im_filename_suffix() includes "." in suffix - merge back into trunk for 7.15.1 - remove im_ispng(), im_png2vips_header() etc. & friends - add "vips --list formats" - rename VBuf as im_buf_t for consistency - add type.[hc], start of new type system - removed man pages for IM_MIN, MAX and RINT to avoid case confusion on OS X / win 7/3/08 started 7.15.0 - MAGIC constants should be tagged as unsigned - write MAGIC correctly on sparc/powerpc machines (thanks Joe) - oop, we were still making fade threads even when not fading - tiny cond jump fixes for valgrind in colour.c - remove -lstdc++ from libs, except on windows - push Magick cflags earlier in the include order to make it easier to pick GraphicsMagick over ImageMagick (thanks Mikhail) - fix the en_GB translation - use meta to preserve resunit between tiff load and save - small doc improvements - read and write CMYKA tiff (thanks Doron) - performance improvements for morphology ops, esp. when zooming out - oop, im_render() was broken for mask == NULL - better support for multiple Python installs (thanks Jay) - better IM_SETSTR() stops some warnings - im_histcum() works for signed histograms - better rounding for im_conv(), im_convsep() - tiny speedup for im_conv() - better /0 test for remainderconst - revise i18n configure, get rid of intltool - command-line IMAGVEC input could segv with non-vips image output - added .tobuffer()/.frombuffer(), .tostring()/.fromstring() to Python binding - add PIL_mode_from_vips () and vips_from_PIL_mode () utility functions - update docs for new Python stuff - FIND_ macros no longer search for stuff, you have to specify prefixes if the packages are not on the default path (or in $prefix). This avoids some accidents on some platforms - configure prints a summary of optional packages found at the end - im_lhisteq() checks for window too small - added invalidate callbacks - now tests for MagickWand before ImageMagick (thanks Adam Turcotte) - added "-rotate" option to vips2dj - added man page for im_resize_linear - better jpeg-in-tiff YCbCr read (thanks Ole) - oops, invalidatefns were not being freed on im__close() - VMask() can init from std::vector, so Python can init from [] - added IM_LIBDIR, im_guess_libdir() - load plugins from libdir/vips-x.x on startup - added meta get/set int/double/string/area/blob/GValue to C++ API - include time_t in vips.h, thanks Nicolas Robidoux - lock global image list (thanks lee) 25/1/08 started 7.14.0 - bump all version numbers for new stable - better CMYK JPEG read (thanks Ole) - add __str__ to VError in Python (thanks Ole) - revert the dynamic wrapping for Python :-( next version! - added VImage::convert2disc (thanks Ole) - you can now set the jpeg quality factor for tiff pyramids (thanks Joe) - you can now shrink jpegs during read, see "man im_jpeg2vips" - added CMYK JPEG write - optionally use GraphicsMagick (thanks Bob Friesenhahn) - look for MAGICKCORE_HDRI_SUPPORT (thanks Marcel) - set icc profiles in tiff pyramids explicitly (thanks Joe) - add --without-cimg configure option - add im_maxpos_subpel - make im_abs compile without liboil - add im_align_bands - fix type overflow in complex division - fix im_cross_phase and im_addgnoise (Tom) - updated docs, C++ and python - header no longer stops on error - C++ dummy2.cpp helps OS X linking 12/12/07 started 7.13.3 - added "include " to VImage.cc to help gcc 4.3 - started moving the python binding to dynamic wrapping - added im_wrap(), im_wraptwo(), im_phasecor_fft(), im_cross_phase() (Tom) - memleak plugged in im_save_string_setf() - bugfix in and docs for im_gradcor() (Tom) - use Glib macros to make im_msb work on big-endian platforms (Tom) - use Glib macros to get rid of needless compile warnings (Tom) - fix type overflow in im_c2ps/im_abs (Tom) 31/10/07 started 7.13.2 - build cimg on windows fixes - various include cleanups, updated man pages - break im_wbuffer() out to a separate API - use im_wbuffer() to make im_vips2jpeg() compress in the background - also im_vips2png(), im_vips2tiff(), im_vips2ppm() - revised evaluation progress system - new evalstart/evalend/preclose callbacks fix over/underflow reporting - but the meaning of evalend has changed in a non-backwards-compatible way :( use preclose instead ito get the old behaviour - added "--vips-progress" flag to turn on a simple eval progress tracker - make im_spcor[12] static, im_spcor is wrapper (Tom) 28/9/07 started 7.13.1 - vips2dj can print RGB images - oop, include missing - add protos for generate/iterate function args, fix warnings - add cimg package, we now have C++ source inside VIPS, sigh - added OUTPUT_DOUBLEVEC and OUTPUT_INTVEC, use for im_maxpos_vec() and friends 29/8/07 started 7.13.0 - we now have a trunk and the version is 7.13.x, woo! - move manpages into a separate man/ dir ... speeds up builds a lot on windows - don't install malkovich - don't fail on unknown args for python (thanks Simon) 1/8/07 started 7.12.5 - im_embed() is more general ... x and y can be negative - predicate.c is smaller and cleaner - libsrcCC link improvement from Pablo - support 32/64-bit ImageMagick as well (thanks Marcel) - better im_magick2vips() for Q8 ImageMagick - split repository to trunk/branches ready for a stable 7.12.x branch 27/7/07 started 7.12.4 - proto.h had vars called small, breaking on win32 - more python fixing, we now have working matrices too 17/7/07 started 7.12.3 - fix to VImage.i for gcc 4.2 (thanks Damir) - eek, off by 1 for more than 1 band hists - needed a slightly larger worst-case buffer in im__b64_encode() - tiny cleanup for make_hI() prevents cond jump on ui in valgrind - --disable-threads was broken again - remove .svn dirs from dist - now passes distcheck again 17/7/07 started 7.12.2 - added im_bandmean() - added support for TIFFTAG_PREDICTOR (Andrey Kiselev) - fix TIFFOpen() mode snafu (Andrey Kiselev) 11/5/07 started 7.12.1 - memory.c abort()s with DEBUG - oops, im_bits_of_fmt() manpage was not being installed - im_histcum() can do all image types - updated NEWS - added im_csv2vips_header() - command-line csv read was broken (thanks Tom) - removed length limit on argument vectors (Tom) - added IM_PREFIX, configure-time install prefix - oop, turned off memory.c DEBUG - fix some bogus gcc 4.1 warnings with im_open_local_array() - better vips usage message - oops, IM_ANY missing from im_demand_hint() manpage (thanks Shahid) - just warn if plugins fail to load in im_init_world() - expose Vargv and make refblock public rather than private so that subclasses of VImage can add vips-style member operations (thanks Pablo) - oops, im_initdesc() needed to have bbits set correctly (thanks Shahid) - make VError derive from std::exception more officially - woo, got exceptions working in SWIG - soname version bumped to 12.x.x - oops, added vector ops to Python - check for overflow of int in return of strtol in dispatch system (Tom) - add im_[di]mask_[xy]size to dispatch system (Tom) - add im_gradcor(), im_grad_[xy] (Tom) 26/3/07 started 7.11.21 - ooo, added %include "std_except.i" & friends to VError.i, VImage.i - im_init_world() is more lenient about recursive invocation - im_gbandjoin() falls back to im_copy() for 1 input image - race condition fixed in im_render.c (thanks Simon) - bump for 7.12!!! 26/1/07 started 7.11.20 - another fix to im_region_image() (thanks Mikkel) - tiny speed up to im_rect_includesrect() - avoid recursive invocation in im_init_world() (thanks Christian) - fix to extract_prefix (thanks Christian) - buffer cache is now per thread - combine buffer unref and ref in a single operation to reduce malloc/free cycles - new internal API for passing regions between threads means we can remove buffer locks - more buffer/region sanity checks, plus a memory barrier - lock around error buffer changes - im_vips2mask() was wrong for nx1 m-band images - liboil back to "test" - add buffer_cache_list to avoid GHashTable _insert()s - oop, --vips-concurrency was broken - renamed (in dispatch layer) im_and/or/eor_const -> im_and/or/eorimageconst for consistency - C++ API wraps IMAGEVEC, DOUBLEVEC, INTVEC arguments - oop, IMAGE % vector was broken 21/12/06 started 7.11.19 - added im_linreg() (Tom) - various C++ API polishes, plus a bugfix (Dennis Lubert) - vips.spec split to devel and python too (Dennis Lubert) - be more explicit about sizeof(magic) - init magic to native order by default (thanks Dennis) - Hist becomes im_history_get() - new history mechanism is faster, uses much less memory, and removes duplicate lines - added im_get_option_group() - added official im_concurrency_set()/_get()() - don't read bbits from vips files ... set ourselves from bandfmt - oops add RGB16 and GREY16 to C++ header - --list packages option to vips.c - updated docs to 7.12 - oops, im_region_image() snafu was causing a lot of recomputation - make im_mpercent() suck a little less - EXIF save was a bit bOrked ... cause of mac crashes? - im_histgr(), im_heq(), im_hist() all number bands from zero now - fix stride in liboil calls - set RGB16 on 16-bit RGB ICC export 29/11/06 started 7.11.18 - added im_buffer_t so regions can share calculated pixels: 2-3x speedup on the benchmark - im_region_local() -> im_region_buffer() - im_sharpen() order change to help sharing - im_invalidate() clears buffer caches - add sentinel attributes - add some missing im_demand_hint()s - paint ops invalidate the output image - fix nothread eval - raise threads limit to 1024 (thanks Christian) - manual redone - vipsCC python init() hooks - add liboil dependency - use liboil for im_abs(), im_add(), im_divide(), im_floor(), im_multiply(), im_subtract(), im_lintra(), im_avg(),im_deviate() - quiet libtoolize test (thanks Tom) - im_benchmarkn now regrows image each time - strip meta from sample2.v ... saves a lot of mem (esp. Hist) - added im_isscalar() (Tom) - added IM_REGION_ADDR_TOPLEFT() (Tom) - reduce size of im_rightshift_size.c to help compile (Tom) - make im_stop_many(NULL) safe (Tom) 24/11/06 started 7.11.17 1;5Q - better benchmark script makes graphing easier - double-buffer image file writes - reuse write threads - clean up threadgroup / iterate / generate - added im_benchmarkn to make it easier to make a CPU-bound op on large machines - im_cache() failed for cpus > 1 1/11/06 started 7.11.16 - moved im__convert_saveable() into im_copy() (thanks Christian) - missing gobject dependency (thanks Christian) - --enable-threads was broken (thanks Christian) - eval without theads was broken (thanks Christian) - LIBADD libvips.la to libvipsCC.la (thanks Simon) - benchmark.sh is now plain sh, not bash - set ORIENTATION_TOPLEFT in im_vips2tiff (thanks Josef) - oops, im_vips2csv() output separator was broken - added im_benchmark2 - move XYZ2Lab LUT build outside the eval thread 30/10/06 started 7.11.15 - print leaked windows - oops, race condition in im_window_unref() - integrated im_region_window() into im_region_image(), tiny speed up 6/10/06 started 7.11.14 - ifthenelse and affine dhints revised - buildlut no longer outputs x cods - configure asks for glib >= 2.6 (we need GOption) - configure uses AC_TOOL_CHECK to find tool names to help cross-compiling. - better configure test for libexif - add C++ include ... include in a namespace - added im_benchmark / SMP benchmark script - add im_maxpos_avg() and im_point_bilinear() (Tom) - make im_region_free(NULL) safe (Tom) - link in manpages for im_contrast_surface (Tom) 8/9/06 started 7.11.11 - add im_norm_dmask() - removed old code for gradient and lindetect - internal decls split from proto.h to help SWIG - test for python and SWIG during configure - added python dir for the binding - python binding done! - oops, --without-python was broken (thanks Tom) - added python/test - add im_lu_decomp() im_lu_solve(), rewrite NR type functions in terms of these (Tom) 23/6/06 started 7.11.10 - still more im_affine() rounding/clipping tweaks - ignore "--" arguments to vips.c - im_init_world() also sets g_*_prgname() and loads plugins - add manpage for im_init_world() (oops) - error_exit() prints prgname - various cygwin fixes - fix cache thread assert failure (thanks Joe) - "header" now uses GOption, slightly different args, will loop over args - fixed assert() overenthusiasm in im_prepare() - im_csv2vips() now has separate whitespace / separator tables - add im_rightshift_size() (Tom) - add im_maxpos_vec(), im_minpos_vec() (Tom) - add im_norm_dmask() (Tom) - make im_free_[di]mask(NULL) safe (Tom) 23/6/06 started 7.11.9 - back on sourceforge CVS again - require openexr 1.2.2 or greater - range check xy on im_insert*() for sanity - VMask::invertlut decl removed (thanks Jean) - added \"all\" option to vips.c 17/5/06 started 7.11.8 - debrokened openexr read - added im_tile_cache() - added tiled read to im_exr2vips() - im_tiff2vips() now uses im_tile_cache() rather than its own cache ... faster in some cases, less RAM use in some cases, saves 200+ lines - removed 'broken' read option from im_tiff2vips() - read/write doubles with g_ascii_strtod() and friends where appropriate - add a "thread" member to region to help sanity check region ownership - saner threadgroup fixes a race problem on gcc 4.0.3 / amd64 - added im_vips2csv() - im_open() now does CSV read/write too - oops, broke vips main prog for function name in argv1 case 22/4/06 started 7.11.7 - split vips_png.c to im_vips2png.c and im_png2vips.c - added OpenEXR dependency - added im_exr2vips(), im_exr2vips_header() - added im_isexr(), im_open() knows about OpenEXR - added im_contrast_surface(), im_contrast_surface_raw() (Tom) - added im_msb(), im_msb_band() (Tom) - im_scale() sets Type on output - added RGB16, GREY16 types - im_*2vips() set these types if appropriate - configure fixes for mac - vips main prog uses GOption - im_icc_* locks around calls to cmsDoTransform() to avoid corruption on SMP machines - add im_prepare_many() (Tom) 10/3/06 started 7.11.6 - typo in manpage and header for im_rect_dup() (Tom) - don't abort image load if XML read fails - added im_video_test() ... test video source - oops, lcms .pc finder was not working - clipping problem in im_affine() fixed (thanks Clare) - test for attr support in libmagick - im_text() returns an error for empty string - im_falsecolour() scale reversed - im_remosaic() could crash on bad mosaics - configure changes to fix --without-magick, lcms and fftw (but sadly we now require .pc files for these libs) - im_vips2jpeg() automatically converts to 1 or 3 band sRGB uchar for write - also im_vips2png() - added im_project() 20/2/06 started 7.11.5 - added im_csv2vips() - commas in filename options can be escaped with a '\' - raise tile buffer limit (thanks Ruven) - im_spcor() and im_fastcor() have prettier borders - im_fastcor() returns sum of squares of differences, not sum of abs of differences 18/11/05 started 7.11.4 - small win32 fixes, thanks Juan - added im_flood_blob_copy() ... a temporary hack - much faster im_histplot() - read RGBA palette-ized PNG images more robustly (thanks Tom) - turn on -ms-bitfields automatically for mingw 26/9/05 started 7.11.3 - better error recovery for im_binfile() file too large - all raw files now use mmap windows, so (eg.) ppm and analyze reads can go >2GB - remove DISABLE_COMPAT ... you now have to define IM_ENABLE_DEPRECATED to get broken #defines - fix to build without exif, thanks Chas - use native win32 API for seek()/truncate() to work with large files - use attribute to check printf-style args with gcc - fix gcc4 warnings - removed ebuild, since it's in gentoo now - im_magick2vips() sets meta from attributes (good for dicom) - im_magick2vips() writes many-frame images as tall thin VIPS images - im_histcum() was broken for vertical histograms - im_histnorm() is neater - simpler and faster inner loop for im_conv() and im_convf() avoids gcc4 bug - appendc() was reading past the end of the buffer on MSB machines 13/6/05 started 7.11.2 - im_copy_set() was messed up in 7.11.1 - put into CVS, phew - fixed a rounding bug in im_affine() ... should no longer get black edges on image resize - if TIFF open fails in im_open(), try going through libmagick - merge requires all bands == 0 for transparency (used to just check 1st band) - 16 bit LAB TIFF read/write was wrong - new GType for refstring makes it visible from im_header_map() - jpeg loader attaches exif data (and human-readable meta fields) - jpeg saver writes any exif data - meta not wiped by im_*incheck() in a "w" image - meta keeps traverse order - now require glib >= 2.4 - require libxml-2.0 for meta save and new history mechanism - no more .desc files, history saved in XML after pixel data - i/s/d meta fields saved there too - added base64 encode/decode - added blob header write - added a save string type: types which define transforms to and from the save format get serialized - GValue meta API now exposed, since we can serialise anything - jpeg loader loads ICC profiles - jpeg saver saves ICC profiles from the VIPS header - src/header.c knows about meta system - added im_analyze2vips(), im_grid(), im_raw2vips() - extract/grid/replicate/zoom were not setting TRANSFORM flag - better falsecolour LUT - less stupid + more portable read/write of VIPS header - better im_updatehist() - jpeg load sets vips xres/yres from exif, if possible - jpeg save sets exif xres/yres from vips, if possible - icc_export and icc_transform attach profiles and intents to output images - added im_icc_import_embedded() to import with an embedded profile - split vips_jpeg.c into two, it was getting too big - added im_cp_descv(), im_cp_desc_array(), funcs use them - removed im_append_Hist() from API - fixed meta copy bug - better history copy, removed nonsense about 1st line of Hist being special - tiff read/write now reads/writes ICC profile from meta - edvips rewritten to remove stupidness, and can now set xml - header can now print xml extension block - IM_ prefix for colour temp names 1/6/05 started 7.11 - added im_copy_morph() - im_region_region() allows Bands and BandFmt to differ, provided sizeof( pel ) is the same ... makes im_copy_morph() work - added im_meta*() functions (MW) - im_header_*() rewritten for meta - added im_header_exists(), im_header_map() - use pkg-config to find libpng and ImageMagick - added im_lineset() - added im_extract_areabands() (JF) - added im_copy_from() (JF) 15/4/05 started 7.10.12 - im_ifthenelse just evals left/right for region all zero/all one - also im_blend - swap g_setenv() back to plain setenv() so we work with glib 2.2 9/4/05 JC started 7.10.11 - docs no longer have broken links - fixed memleak in im_text() 8/4/05 - one bit tiff read was sometimes reading a byte too far in each scanline 14/1/05 started 7.10.9 - im_filename_split() will now usually work for filenames containing ':' characters - added im_render_fade() for fancier nip2 image repaint - added "ccittfax4" as a TIFF compression option - fix all 64-bit compiler warnings - "," allowed as column separator in mask read - better at spotting singular matrices - small im_render() tidies - glib dependency reduced to just 2.0, but untested ... helps people building on older systems who aren't interested in nip2 - removing leading spaces from IMAGEVEC arguments - load non-interlaced PNGs more efficiently - 1 point mosaic functions work on more image types - better memory allocation debugging info - local memory on regions can shrink as well as grow - shut down threadgroups on render if no dirty tiles - limit number of simultaneous renders - higher mmap window threshold - allow max == -1 for unlimited render cache - 'priority' marks non-suspendable renders - im_embed() mode == 4 paints white pels - im_tiff2vips() was broken with --disable-threads - oops, im_errormsg() compat macros were GCC only - larger default tile size and strip height - tiff write sets PHOTOMETRIC_CIELAB for vips TYPE_LAB images ... so we can write float LAB as well as float RGB (thanks Ruven) - also 16 bit LAB TIFF write - im_render() rewritten 20/11/04 started 7.10.8 - im_sharpen() is ~15% faster - more quoting for MAGICK finder - im_XYZ2Lab() uses a LUT rather than cbrt(), 5x faster - --disable-threads removes gthread dependency completely (thanks Simon) - intercept TIFF warnings as well as errors ... stops occasional libMagick exceptions - add im_init_world() to im_init() as well to help backwards compat (thanks Simon) - im_icc_present() function description was broken, thanks Jay - oops, libtool library versioning was wrong, thanks Jay - can now make TIFF pyramids of any non-complex image type (was uchar and LAB only), thanks Ruven - 1st order mosaic code now works for LABQ too - build system changes to make "make distcheck" work - RPM .spec files fixed up and updated by configure (thanks Simon) - tiny cleanups for vdump - use g_setenv()/g_getenv() - tiny improvements to IM_FREE*() - tiny VImage debug print fixes (thanks Jay) - swap off_t for gint64 to fix LARGEFILE support on win32 - computation feedback now uses gint64 for number of pels, so we give feedback correctly on images with >2**31 pels - other small fixes for >2**31 pels in an image 10/11/04 started 7.10.7 - im_histnD() was not checking BandFmt (thanks Kirk) - improvements to threading system speed up non-vips output in some cases - use cbrt(x) where we can ... 10x faster than pow(x,1.0/3) on win32 - typeo in im_text() when built without PANGOFT2 (thanks Stefan) 1/11/04 styarted 7.10.6 - tiny doc fixes - scripts now only depend on 'vips' program - im_open( "r" ) is now lazier ... for non-VIPS formats, we delay read until the first ->generate() - so im_open_header() now deprecated since im_open("r") is identical - now looks for fftw3 as well as fftw2 ... slightly faster ffts 19/10/04 started 7.10.5 - fix to light_correct (thanks Jay) - edvips knows about xoffset/yoffset - better vips enum<->char conversions 4/10/04 started 7.10.4 - man page fixes (thanks Jay) - removed last csh scripts (thanks Jay) - scripts default VIPSHOME to $prefix (thanks Jay) - doc build system tidies - im_rank() edge padding was wrong - im_vips2tiff() can now embed ICC profiles 22/9/04 started 7.10.3 - mildly better im_vips2tiff() - *, -, +, /, % between two images now work for mixed number of bands - im_free() was missing a man page - revised documentation 1/9/04 started 7.10.2 - C++ .pc files were still set for 7.9, grr - im_insertplace() didn't check compatibility of images (thanks Matt) 27/7/04 started 7.10.1 - set default stack size explicitly to help platforms with a very low default - 16 bit RGB tiff read was broken (bug introduced in 7.9.5, thanks Haida) - !pangoft2 was broken, thanks Kenneth - win32 build fixes 12/7/04 renamed as 7.10.0 - added NOCACHE function flag ... stops nip memoising video & paint ops - added im_extract_bands() ... takes out many bands from an image - im_vips2tiff() scanline write speed up for area pipelines 10/6/04 started 7.9.6 - tiny polishing of im_ppm2vips() - im_blend() can now work on labq - boolean ops all work on float/complex images (by casting to int) - im_maplut() was broken for 1 band image + many band lut + >8 bit output - im_lintra_vec() now handles 1 band image and many band vector to make many band image - oops, im_lintra_vec() was missing a man page - im_measure() can work on labq - im_lhisteq() uses new embed mode, _raw() version is one pixel smaller, sets Xoffset/Yoffset for new origin scheme - generalised im_tone_build() to any image type to make im_tone_build_range() 20/5/04 started 7.9.5 - tiff output res can be a single number too - added im_text() to make a bitmap from a string with pango - im_tiff2vips() does 16 bit RGBA - im_binfile() was broken since 7.9.2 due to im_mapfile() change - im_ppm2vips() now works for 16 bit images - added im_copy_swap() ... copies, reversing byte order - im_resize_linear() was broken for some images, thanks Javi 8/3/04 started 7.9.4 - oops, config.h include missing in a few places - im_vips2tiff() can now write 1 bit images - im__find_lr/tboverlap() now exported to nip - better edge tile handling for tiff read/write (thanks Ruven) - added extend-pixels-from-edge mode to im_embed() - im_conv*(), im_rank(), im_stdif(), im_dilate(), im_erode() all use it to expand their input, so their output now has guess borders, not black borders - im_fastcor() now does an im_embed( 1 ) on the output ... the zero borders were very annoying before, since you would usually be searching for the minimum point - no change to im_spcor(), since you will usually be searching for the maximum - better im_render() cache behaviour under heavy loads - im_affine() revised * clip, resample and transform is now pixel-perfect for all inputs (I hope) * uses the new embed to make sure there are no black borders from edge interpolation * about 20 - 30% faster - policy change: Xoffset and Yoffset are now set by all operations to record the position of the input origin in the output - im_replicate() is much faster for some cases - added tile and mirror flags to im_embed() - added im_cache() convenience function - better ETA for image calculation - im_tiff2vips() now has a "broken" option so it can read tiled tiffs made with earlier versions of vips - on convert float to int format, now does floor() not rint() ... more 'mathematical' - added im_rint() - im_sharpen() now uses a gaussian mask - im_convsep() more resistant to int overflow problems - added im_make_xy(), avoids rounding problems with the old float-based thing - im_profile() now makes vertical images for a vertical profile - added im_vips2tiff() option to set the resolution in inches not cm (thanks Andrey) - im_binfile() is now exported 6/2/04 started 7.9.3 - added an im_init_world() to im_open(), to help old progs - renamed VSemaphore as im_semaphore_t - started using libtool library versioning - now uses g_module_*() in place of dlopen() - now uses pkg-config instead of vips-config (thanks Simon) - fixes to vips.h for _ADDR() with DEBUG on (thanks Konrad) 10/12/03 started 7.9.2 - patches for freebsd, thanks Lev Serebryakov - vips2dj knows about my colour laser printer - added i18n support, glib/gmodule/gthread dependency - im_error*() API revised to be more i18n friendly - List type removed, now uses g_slist - VBuf added, some more utility funcs pushed down from nip - im_thread stuff removed, now uses g_thread - im_lock stuff removed, now uses g_mutex - im_semaphore_t renamed to VSemaphore, not sure this is a good idea - build with --disable-threads to turn off threaded render - #include now pulls in most of the public API, you shouldn't need other vips includes very often - im_close() is better at cleaning up if there's an error - inverse FFTs could fail for wider-than-high images with fftw - better im_icc_transform error messages - bug fix in im_render with large caches - im_binfile() now has an offset parameter - im_mapfile()/im_unmapfile() now work on IMAGE and record the length of the file they mapped ... this lets VIPS successfully unmap a file if it changes size while it's open 20/10/03 started 7.9.1 - threadgroups now have their own kill flag - im_plotmask() now does anti-aliasing - im_iterate() fix for operations on mmap window images (thanks Clare) - im_writeline() stops on kill - fix for im_fwfft() segv for wider-than-high real images (thanks Andrey) - fix for im_fwfft() to work for non-square real images (thanks Andrey) - can now read and write 32-bit IEEE float TIFF (Andrey Kiselev) - clean-ups for colour.c (Andrey Kiselev) - no longer lets you make an image with width|height|bands == 0 (thanks Joe) - im_vips2tiff(), im_vips2*jpeg*(), im_vips2png(), im_vips2ppm() could sometimes fail for mmap window input images (thanks David) - added IM_RECT_HCENTRE(), IM_RECT_VCENTRE() macros 20/8/03 JC - started 7.9.0 - added im_rank_image() ... im_maxvalue() a special case of this - im_subtract() goes up to int earlier for better value preserving, thanks Haida - im_rank() much faster for large windows, correct result on all platforms (dratted memcpy() was causing problems before) - fixed problem with libMagick config if installed somewhere strange - fixed problem with include order in library compile - added --without-magick configure option - added im_render(), threaded background image paint - added im_replicate(), replicate an image horizontally and vertically 31/5/03 JC - started 7.8.11 - fixed a problem with relational operators and some combinations of input types (bug introduced in 7.8.9), thanks Haida - vips-7.8 script overrides VIPSHOME environment variable - better im_guess_prefix - stupid light_correct script no longer uses /pics/tmp - added batch_crop script 22/5/03 - started 7.8.10 - the JPEG writer can embed ICC profiles in output images ... although I've yet to see it make any difference :-( test this carefully at some point - fixed a possible coredumper in jpeg write - jpeg read now spots truncated files - im_invertlut() now makes an image, not a mask ... sorry :-( - im_histnD() makes an n-dimensional histogram from an n-band image - im_col_pythagoras() patch - IM_NUMBER() now returns int not size_t - new win32 build system from Juan and friends, based on tmake - sample project files for MSVC added, thanks Juan - win32/ subdir now has the win32 build systems - spec/ subdir now has the spec files for building RPMs - dist now includes formatted documentation - license change: VIPS is now LGPL, nip stays GPL ... this means proprietary programs can link against the vips library - had a report of a working VIPS build on a 64 bit system (!) - im_log_dmask() now includes all of the negative lobe, thanks matt - vips-7.8 start script now auto-relocates - im_spcor_raw(), im_fastcor_raw() now exported 29/4/03 - started 7.8.9 - changes to build to help MSVC - oops, makedef.pl missed out function names with an initial cap, and error_exit() - im_min() and im_max() gave random wrong results for >1 thread on >1 CPU machines (bug introduced in 7.7.20), thanks Joe - vips.c no longer generates C++ wrappers for functions with no image argument (thanks Haida) - im_invertlut() now wrapped by hand in VMask.cc - C++ docs updated - added im_open_header(), returns an IMAGE with just width/height/etc and no data - ... so now "header" will print useful stuff even on truncated files - tiff writer knows about alpha (thanks Jenny) 7/2/03 - started 7.8.8 - build failed with lcms turned off - im_spcor() could segv for 16bit images (thanks Joe) - im_tiff2vips() read resolution expressed as pixels/cm incorrectly - im_vips2tiff() tries not to write mad resolutions - header and im_open file type tests reordered for slight speedup - im_copy_set() had a broken dispatch function for xres/yres - im_fwfft() exploits libfftw real -> complex transform if possible for a 2x speed-up (thanks Matt) - im_invfftr() added for complex -> real inverse transform for 2x speed-up (thanks Matt) - im_freqflt() now uses im_invfftr() for real result and speedup - im_flipver() could segv on some inputs, thanks Clare - relational operators now work on complex - relational rewritten ... now fractionally slower, but 1/3 the size - vips2dj -1:1 produced incorrect height - better overlap-too-small detection in mosaicing code - im_system() can have NULL output - global balance ignores overlaps with only transparent pixels 3/1/03 - started 7.8.7 - worked in patch from Hans Breuer (thanks!) - png read/write with im_png2vips(), im_png2vips_header(), im_vips2png(), im_ispng() - im_errorstring() and im_col_displays() are now functions not externs (helps DLLs) - many include fixes to help native win32 build - added libMagick support, 78 file formats now loadable with im_magick2vips(), im_magick2vips_header() and im_ismagick(), w00t - now installs vips.m4 to $prefix/share/aclocal - added im_icc_export_depth() ... export to device space with a specified bit depth (8 or 16) - vips.def now rebuilt with custom rule in libsrc/Makefile.am - removed externs im_Type, im_BandFmt, im_Coding, im_Compression to simplify DLL build - im_mmap() -> im__mmap(), since it's supposed to be an internal function - new vips-7.8.x/proj directory holds unsupported sample makefiles and config.h for building with the MSC toolchain - new scripts batch_image_convert and batch_rubber_sheet (thanks Joe) - added the RPM .spec files to the main distribution - InitializeMagic() now passed "" rather than NULL to avoid assert() problems on some libMagic versions 2/12/02 - started 7.8.6 - now reads 8-bit RGBA tiff - C++ build guide fixes (thanks fsicre) - im_Type2char array text slightly messed up - global_balance is safer for complex mixed mosaics - removed im_lintra() fallback to im_copy() for scale == 1, offset == 0 ... too confusing - im_tiff2vips() now reads 16-bit LAB - added im_Lab2LabS() and im_LabS2Lab() 5/11/02 - started 7.8.5 - fix for mmap window of local region ... caused im_iterate() to break sometimes for large images, in turn occasionally breaking im_max()/im_min()/etc. (thanks Joe) - tiny speed up for im_rot90()/270() - on install on win32, add .exe suffix for links - vips.c knows to remove .exe suffix for linked commands - added im_errormsg_system() ... decode win32 error codes too - pagesize calcs for roving mmap windows were messed up on win32 (thanks Kirk) - some TODO cleanups - global balance broke horribly if you had filenames with spaces in (thanks Clare) 31/10/02 - started 7.8.4 - im_unmapfile() includes mixed up on mac os x - libtool patched for mac os x - vips.c sets numeric locale to "C" 27/10/02 - started 7.8.3 - configure fixes help mac os x - im_guess_prefix() adds ".exe" suffix on w32 if not there - changed im_measure() error messages to number bands from 1 - added func descriptor for im_read_dmask() to help nip, updated C++ API, docs 21/10/02 JC - started 7.8.2 - tries rand() if random() is not available - tries mktemp() if mkstemp() is not available - turns off realpath() if not available - added IM_DIR_SEP/IM_DIR_SEP_STR directory separator character/string - added IM_PATH_SEP/IM_PATH_SEP_STR path separator character/string - added im_path_is_absolute() - vips.c knows to link to vips.exe on win32 - spot mingw* and set BINARY_OPEN - open images in binary too (since we now read() the header) 10/10/02 JC - im_lintra() and im_lintra_vec() were broken for complex images :-( thanks matt - renamed im_and() as im_andimage(), im_eor() as im_eorimage() and im_or() as im_orimage() ... avoids breakage in the C++ layer - added im_dE00_fromLab() - limited release as vips-7.8.0 2/10/02 - renamed as vips-7.8, woohoo - revised documentation 19/9/02 JC - started sorting out VIPS #defines ... there are now a sensible set of new names (eg. NOCODING becomes IM_CODING_NONE, LAB becomes IM_TYPE_LAB) - define IM_NO_VIPS7_COMPAT to turn off the old names - added im_mmap()/im_munmap() layer for windows portability - removed the contents of history.h .. obsolete - added IM_IMAGE_ADDR() macro 10/9/02 JC - handle errors from TIFF lib correctly - configure fixes for cygwin - CMYK TIFF write fixed - configure fixes for mingw 5/9/02 JC - im_cp_desc() now copies Xoffset/Yoffset 21/8/02 JC - started 7.7.24 - reads CMYK TIFF - reads dpi from TIFFs - better float Xres/Yres 14/8/02 JC - new header fields Xoffset and Yoffset ... used by functions to hint the position of the origin in output images - support added to c++ api and to header - im__lrmerge(), im__tbmerge(), im__affine(), im_insert(), set Xoffset/Yoffset - now uses , not for better suse w0rkage - better configure for fftw (uses libdfftw name if libfftw not found) 8/8/02 JC - large file support with mmap() windows ... had to change im_prepare_inplace() to im_prepare_to() benchmark: - system hardware: 2 x 2.5GHz P4, 1GB RAM, 15k SCSI, ReiserFS os: suse 8 (kernel 2.4.18) compiler: gcc 2.95.3, -O2, threads turned on images: fred.v, fred2.v; both 4k by 4k LABPACK (64MB) images: jim.v, jim2.v; both 15k by 15k LABPACK (900MB) time: smallest real of 5 runs, system idle vips: 7.7.23, debug on in im_openin.c, window limit set with an environment variable - benchmarks cpu-bound: im_sharpen fred.v fred3.v 11 1.5 20 50 1 2 io-bound: im_insert fred.v fred2.v fred3.v 4000 0 worst-case: im_rot90 fred.v fred3.v - results desktop: no mmap windows mmap windows cpu-bound real 0m3.712s real 0m3.970s user 0m6.010s user 0m6.390s sys 0m0.900s sys 0m1.110s io-bound real 0m1.813s real 0m1.865s user 0m0.900s user 0m0.990s sys 0m1.720s sys 0m1.520s worst-case real 0m1.344s real 0m3.039s user 0m1.270s user 0m2.230s sys 0m0.850s sys 0m3.050s not quite sure why sharpen is a little slower (4%?) ... IO speed is about the same though ... worst-case is having to constantly move windows about (500,000 page faults, vs 10,000 for no windows) again, with an image larger than RAM no mmap windows mmap windows io-bound real 2m52.759s real 2m11.172s user 0m14.940s user 0m14.890s sys 0m29.940s sys 0m26.560s worst-case real 3m35.391s real 3m50.760s user 0m19.850s user 0m26.600s sys 0m12.650s sys 0m43.130s mmap windows actually slightly faster in this case ... plus they stress the OS less 31/7/02 JC - added -lm for better lcms detect - README notes for fftw on suse8 - im_profile() sets HISTOGRAM for output image - im_copy()/im_copy_set() function descriptor no longer sets PTOP ... helps avoid LUT problems - im_subsample()/im_zoom() fall back to im_copy() for shrink/grow == 1 - im_lintra() falls back to im_copy() for scale == 1, offset == 0 - no longer use Type == LUT ... all just Type == HISTOGRAM now - im_blend() was messed up for > 1 band images :( 16/7/02 JC - started 7.7.23 - im_XYZ2sRGB() wasn't setting Type = sRGB - im_icc_import() was broken for rgb - im_header_string() had wrong return type in function database 13/7/02 JC - added im_flood_blob() - added im_open_local_array() ... C API convenience function - oop, im_flood() was missing a man page - Type == FOURIER added to help visualisation - released as 7.7.22 30/6/02 JC - JPEG, TIFF and PPM import all now set sRGB Type for RGB import - im_header_int(), im_header_double() and im_header_string() added to aid UIs - now uses gettimeofday(), not time() - for consistency with other trig functions, im_c2amph() now returns degrees not radians (ouch) - added im_c2rect() ... turn (amp, phase) to rectangular - added im_sign() ... unit vector in direction of value - better im_scaleps() ... old code was terrible - rewritten im_rotquad() ... now partial - im_icc_export()/_import() now do ABSOLUTE correctly - added im_icc_ac2rc() ... converts absolute to relative colorimetry 25/6/02 JC - added im_copy_set(3) ... like im_copy(), but set informational header fields 20/6/02 JC - added im_ceil(), im_floor() - im_Lab2LabQ was not clipping a/b range correctly - im_icc_export(), own ABSOLUTE mode - released as 7.7.21 28/5/02 JC - im_remainderconst_vec broken for float/double - added Yxy colourspace 16/05/02 JC - auug, libtool was all messed up ... redone all the autotools stuff - uses libtool convenience libraries to build vips in sections - uses config subdir for temp files and .m4 things - patched stupid suse config.guess - vips2dj patched for better raw cmyk - released as 7.7.20 12/5/02 JC - im_vips2jpeg*() and im_vips2ppm() now both partial - started updating the C++ guide - had to change the location of the C++ headers :-( all C++ progs should now have: #include this is so things can work on systems which do not have case sensitive file systems - changes for Mac OS X * im_system() TRUE/FALSE removed * searches /*/[lib|include] to get fink libs for tiff and jpeg 30/4/02 JC - several functions were missing IM_FN_PIO in their descriptor ... this was harmless for nip/ip/C, but broke the ref counting in the C++ layer - im_system() now defaults "/tmp" for temp files - STRING input and output args were broken for C++ :-( - threads exit more quickly on error - im_min()/im_max() now partial (at last) - im_remainderconst()/im_remainderconst_vec() added - --with-dmalloc configure switch - vips2dj does CMYK and mono too - im_vips2tiff() allows any number of bands (but not the right way to write CMYK, see TODO) 26/4/02 JC - old ICC profile reader removed - little cms wrapped ... configure spots it, im_icc_transform() uses it to map between two images - also im_icc_import() and im_icc_export() so you can see PCS images - im_icc_present() to test for existence of lib - README fixes 4/4/02 JC - TODO changes - oops, DEBUG left on in im_invertlut() 2/4/02 JC - im_fwfft.c/im_invfft.c now use libfftw if available ... about 5x speed up and double precision - added FIND_FFTW autoconf macro - include/vips/proto.h changes 26/3/02 JC - started 7.7.19 25/3/02 JC - im_log_dmask() was broken (thanks matt) - casts between VDMask and VIMask were broken (thanks matt) - various error msgs improvements and tiny man page fixes 13/3/02 JC - tb/lr merge first/last cache moved to per-call state for better sharing - im_remosaic() bails out faster on error and makes better error messages 13/3/02 ruven - im_vips2tiff() pyramids stop at tilesize, not 64x64 25/02/02 JC - im_remosaic() is smarter, and works better with im_global_balance() - im_affine() 2x faster 14/2/02 JC - started 7.7.18 - vips.m4 and libsrc/Makefile.am fixes for IRIX 11/02/02 JC - vips/thread.h and vips/threadgroup.h were missing extern "C" for C++ - VImage::write() now tracks dependencies, so you can write() to a partial safely ... although it's not a very useful thing to do (thanks Mike) - new VImage::print() function for debugging - added im_print() 22/01/02 JC - started 7.7.17 15/01/02 JC - im_rect_unionrect() and im_rect_intersectrect() safer for repeated args - im_video_v4l() no longer perror()s on ioctl fail for less spam 03/01/02 JC - started 7.7.16 - im_version_string() really does return the date as well now 12/12/01 JC - im_guess_prefix() extra smartness for relative path names - VImage() no longer uses tmpnam() (thanks Paul) 11/12/01 JC - renamed im_fexists() as im_existsf() 7/12/01 JC - ppm man pages added (doh) 28/11/01 JC - warnings on g++ 2.96 fixed 22/11/01 JC - started 7.7.15 - im_video_v4l() failed to compile on non-linux platforms 7/11/01 JC - im_remosaic() added - im_*merge() are more intelligent about transparency in bizarre overlaps - grr! putenv() semantics change on more recent clibs ... should be safer now 19/10/01 JC - VDisplay( "display name" ) segved on unknown display :-( thanks mike 26/9/01 JC - contrib tools get data files from share/vips/xxx area now - im_vipshome() renamed as im_guess_prefix(), reworked for new package layout - doc/ build sorted out - ... but of course, docs still need updating for 7.8 20/9/01 JC - fix to im_vipshome() - ip2 renamed as nip - split to library only ... separate ip and nip packages - new VIPS_VERSION_* macros set from configure.in in vips/version.h.in - vips.m4 VIPS finder - reworked README, doc/README and TODO - now installs to /usr/local/ by default - fmask4th.c was including varargs.h ... d'oh - include area reorganised: everything inside now ... hopefully the only user-visible change is that all plain C progs need to change: #include to: #include the C++ API should be unaltered 21/8/01 ruven - im_setupout() was missing some #includes 20/8/01 JC - started 7.7.14 15/8/01 JC - added libxml dependency for ip2 27/7/01 JC - im_conv(), im_convf(), im_convsep(), im_convsepf() now reject masks with scale == 0 26/7/01 JC - started 7.7.12 25/7/01 JC - started 7.7.11 - oop, im_histeq() and im_tonemap() also missed - better error messages from im_run_command() 23/7/01 JC - started 7.7.10 - im_sharpen() failed due to change in im_band_extract() offset 20/7/01 JC - started 7.7.9 4/7/01 JC - im_open(,"w") open() delayed until im_setupout(), very slightly safer - updated im_open() man page - im_tiff2vips() now embeds index in filename ... and it's page number (from 0), not subsample factor - finally bit the bullet ... im_extract()/im_extract_band() now number from zero (sorry!) - and im_lrmosaic()/im_tbmosaic() bandno param too 29/6/01 JC - im_region_free() now frees immediately 27/6/01 JC - im_vips2tiff() man page updated for deflate, 2 years late 22/6/01 JC - oops, limit wrong on im_rank() 21/6/01 JC - better post_install for --prefix outside VIPS's tree - -ltiff needs -lm in acinclude.m4 ... fixes configure on redhat 7.x 13/6/01 JC - started 7.7.8 6/6/01 JC - im_invertlut() added 31/5/01 JC - im_colour_temperature, im_XYZ2Lab_temp, im_Lab2XYZ_temp added - ... colour temp stuff needs sorting out properly 25/5/01 JC - added vips-config script, cf. gtk-config - --without-threads option added - did a bit of work on the C++ API docs 24/5/01 JC - added im_tiff2vips_header(), im_jpeg2vips_header() and im_ppm2vips_header() - header uses these to print fields quickly - switched to config.h - configure.in rewritten ... much nicer, fewer options, more automatic 17/5/01 JC - im_matinv() didn't free stuff correctly on singular matrix 16/5/01 JC - vips2dj now knows about 5000ps printers - allow RW mode for non-native VIPS image files, for 8 bit images 2/5/01 JC - started 7.7.7 1/5/01 JC - im_addgnoise() did not work for >1 band images 23/4/01 JC - configure options to remove support for JPEG and TIFF ... helpful for a no- dependencies build 20/4/01 JC - im_(v)snprintf() added - all sprintf()s removed 15/4/01 JC - im_affine() had a rounding problem 11/4/01 JC - tiny mosaicing bug fixed in im__lrcalcon - started 7.7.6 21/3/01 JC - new iblend code in im_tbmerge() was typo-d - mosaic1 was broken by affine too 20/3/01 JC - im_image() failed for FMTUCHAR 12/3/01 JC - started 7.7.5 - im_sharpen() uses separable convolution for big speed up - new "Print" menu 11/3/01 JC - REALVEC renamed as DOUBLEVEC - added IMAGEVEC - added IM_INPUT_IMAGEVEC - gbandjoin now has function description - new function im_maxvalue() - im_compass()/im_lindetect() reimplemented with im_conv()/im_maxvalue(), about 15% faster, works for any type, partial - im_gradient() reimplemented with im_conv()/im_abs()/im_add(), about 30% slower, works for any type, partial 10/3/01 JC - new function, im_clip2fmt() converts between any image formats ... slightly faster than the old im_clip() - legacy im_clip2us() etc. functions now just call this 9/3/01 JC - im_conv() rewritten, simpler, about 10% faster - im_convsep() rewritten, now does any non-complex type, partial, 20% faster - new functions: im_convf(), im_convsepf() for DOUBLEMASK - raw versions of each - legacy convolvers (eg. im_convbi()) removed 8/3/01 JC - new function im_blend() - new function im_lab_morph() - speed up to im_ifthenelse() - speed up to im_*merge() (uses integer arithmetic for integer blends) 4/3/01 JC - tiny speed ups to im_histgr() - speed ups to im_maplut() 3/3/01 JC - new functions: im_histnorm(), im_histcum() - im_histeq() more general - im_vipshome() --- better behaviour for relative paths 2/3/01 JC - new video package - im_video_v4l1() (video for linux) added - configure.in switches to turn v4l1 on and off 1/3/01 JC - new im_histspec() implementation ... more general, bugs removed 14/2/01 JC - better vips2dj usage message 13/2/01 JC - im_image_sanity() added, called in various places in iofuncs 9/2/01 JC - added 'check' and 'name' class member stuff to ip from ip_gtk2 - new "Plot" menu - new "Overlay" menu - more stuff in _stdenv/_list ... curried forms of head/tail etc. 7/2/01 JC - started 7.7.4 - vips2dj and vdump now use im_vipshome() 5/2/01 JC - new im_vipshome() function - min()/max() macros renamed as MIN()/MAX() - new im_load_plugins() function - vips.exe and ip now load $VIPSHOME/lib plugins at startup 2/2/01 JC - mosaicing functions now have an extra max blend width parameter 30/1/01 JC - fixed tbmerge no overlap detect 13/12/00 JC - started 7.7.3 30/12/00 JC - vips.h fixes for cygwin/wingdi conflict 27/11/00 JC - added im_vips2ppm(), im_open() imports and exports it - fixed nasty implicit output conversion problem for PIO dispatch() calls 21/11/00 JC - added im_ppm2vips() 16/11/00 JC - configure.in fixes ... jpeg found correctly now - searches for libz as well 16/11/00 JC - started 7.7.2 5/11/00 JC - speed up to lab2labq 19/10/00 JC - started 7.7.1 13/1/00 JC - oops, im_open() was missing an 'else' in jpeg/tiff load 5/8/00 JC - im_vips2tiff() now has mode string embedded in output filename - im_vips2jpeg() now has qfac in output filename - im_open() understands this 11/7/00 JC - new im_image() function ... wraps a VIPS image around a memory buffer - C++ layer changes: * now use #include * error renamed as VError * new VMask() constructors * new VImage() constructor * new VImage::data() access member * more operator equivalences: <, >, <=, >=, ==, !=, &, |, ^, % 17/6/00 JC - more consts added to vips protos 10/5/00 JC - minor configure.in changes to help solaris - removed _TIFFmalloc() and _TIFFfree() calls 9/3/00 JC - fixed rounding problem in generate grid 8/3/00 JC - fixup to im_system() temp dir 7/3/00 JC - added im_system() - small tidies 1/3/00 JC - better plugin test in configure.in 26/2/00 JC - fixes to Makefile.am in ip/src* and configure.in, to help ip find the right gtk includes on systems with more than one gtk-xxx installed 21/2/00 JC - now builds ip and ip_gtk2 16/2/00 JC - configure.in fixes for xil and some TIFF/JPEG strangeness 15/2/00 JC - im_global_balancef() was broken! d'oh - note in README about enabling video cards 10/2/00 JC - configure now searches for xil ... FIND_XIL macro - im_zoom() spots integer overflow - better shape set on region drag end in ip - better zoom-too-far handling in ip 13/1/00 JC - fixes to configure etc. to help cygwin - jpeg is now searched for too ... FIND_JPEG macro 10/1/00 JC - global_balance() now uses new affine() atuff 27/12/99 JC - mosaic1 stuff now uses new affine() funcs 21/12/99 JC - added Joe's docs - im_LabS2LabQ() rounding on a/b slightly broken for a/b == 0 20/12/99 JC - new function: im_affine() - similarity*() now in terms of affine() - tests for error return in reduce.c from maplut - small clean-ups 15/12/99 - im_version() added, new iofuncs package for it - ip did not call zero-input-arg vips functions - vips.c did not like zero-input-arg functions 6/12/99 JC - Sobel filter was a bit broken 3/12/99 JC - menu reorganisation - generate gauss mask dialog 2/12/99 JC - reworked text file IO, better error messages 1/12/99 JC - reworked .iprc filename stuff, cleaner 30/11/99 JC - better menu set switcher in calc preferences - ip now thinks it's 7.7 - did a spellcheck on the ip guide 29/11/99 JC - 7.7 started! - srgb D65->D50 converter - Negate added to arith - find similar pixel value dialog - find similar colour dialog - paste into background dialog 19/11/99 JC - adjust labq was missing - shrink image defaulted to /2 not /1 - sharpdropshadow broken - Rotate.* broken - vips-7.6.3 release 18/11/99 JC - ip didn't report space free on >2GB filesystems correctly - ip did not link statically against libXpm on solaris7 17/11/99 JC - im_histplot() failed for all 0's histogram - new profile_image dialog - man pages for im_sRGB2XYZ/im_XYZ2sRGB were broken - new colourize image dialog - new shrink image image dialog - new expand image image dialog - better doc Makefiles 16/11/99 JC - more menu reorganising - new image_to_mask/mask_to_image buttons - new match_two_images dialog - new measure_colour_chart dialog 15/11/99 JC - new custom LABQ sharpen in Image menu - configure support for SGI video (thanks Ruven) - menu fiddling in ip - new "resize canvas" menu item - im_insert_noexpand() added, no docs tho' 11/11/99 JC - new ip menu item: Image=>Adjust white/black/saturation of LabQ - fixed bug in decompose complex number - browse-icons now ignores errors - better error msg for "12 12" etc cases 10/11/99 JC - open hi-res gives proper error msg if no file found - made file-select boxes a bit more compact and clearer - updated configure.in for vips-examples-7.6 9/11/99 JC - new column start point moved - vdump now defaults to subsample 1, portrait - navigation boxes were broken - no longer shrink-to-fit if loading as high res - better positioning of zoom windows - removed some old cruft 8/11/99 JC - ooops, im_remainder() got lost somehow - refguide converted to latex and updated - cppguide updated 5/11/99 JC - libguide converted to latex and updated 4/11/99 JC - ip guide now latex2htmls cleanly ... still needs updating tho' - cpp/app guide latex2html redone 2/11/99 JC - configure no longer adds -32 to IRIX builds for you - some more stuff in README - simple DEBUGM malloc tracking, made libsrc/iofuncs/memory.c - changed im_malloc() to return void * - removed duplicate im_malloc() proto from util.h - changed all malloc/free to go through im_malloc()/im_free() 23/10/99 JC - double-click on error image now pops a load browser and an error dialog - add-new-column no longer scrolls to right edge of workspace - better scroll-to-bottom on item add - load ws twice does not cause 'already open' errors - memorise directory button in fsb 18/10/99 JC - new FIND_TIFF/FIND_MOTIF macros for acinclude.m4 - new ./configure switches, see ./configure --help - enabled static libs 8/10/99 - broke action_proc_bop() into smaller functions, stops bad code gen on gcc2.95.1 (and others, prolly) - restored old Makefiles in doc/src/ipguide - vips7.6 script renamed as vips-7.6 5/10/99 - replace image was broken - some menu reorganisation - 'reload all menus' button 4/10/99 - computed regions in ip were broken - updated system.iprc defaults - new menu item: adjust white/black points 2/10/99 - browse icons was broken - greyscale 16-bit tiled tiff was broken - extra mutex locks for TIFF*() in im_tiff2vips() 1/10/99 - some automake probs fixed - squished two ip bugs 30/9/99 - fixed problem with pthreads, now works on suse6.2 as well - new API stuff for threaded evaluation with im_threadgroup_t - new public interface provide platform independent threads/locks/semaphores - no error box if you zoom out too far now 26/9/99 - lr/tb merge blend was not quite right ... should be smoother now - histplot broken for float images 24/9/99 - better mono->labq converter - more portable ispoweroftwo detect for freq filter stuff 23/9/99 - better graphics expose handling 17/9/99 - >/< stuff in ip was a bit mixed up - ink preview fixed for mono images - help popup fixed 15/9/99 - linedetect and sobel filters for ip, thnx Kirk 14/9/99 - Find_histogram was broken - im_profile() man pages was broken - ooops, ip had old set of macros 10/9/99 - im_and/im_or/im_eor now work for any integer type Summer hols: (2nd half August '99) - initial heap block larger to avoid start gcs - def slicer fixed - larger max heap - toolkits with initial '_' hidden by default - custom recomb - dialog.def removed - ... other menu fixes - generate grid menu - im_remainder() added - new cursor change code, hglass rotates during comp! - dialog.c handles cursor changes better - rubber band in paintbox displays - mag widget stays on right! - undo/redo single pixel paint ops - heap size control from prefs - cancel for reductions as well as for image calc - browse stuff reworked, no more .icon.v files - save stops you overwriting open .v files - better animate_countdown() handling - better resize behaviour for bars added to images - better code generation, bug fixed in state tracking - auto recover from crash libvips-8.15.1/LICENSE000066400000000000000000000636421454007373500143060ustar00rootroot00000000000000 GNU LESSER GENERAL PUBLIC LICENSE Version 2.1, February 1999 Copyright (C) 1991, 1999 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. [This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. When we speak of free software, we are referring to freedom of use, 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 and use pieces of it in new free programs; and that you are informed that you can do these things. To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author's reputation will not be affected by problems that might be introduced by others. Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. We call this license the "Lesser" General Public License because it does Less to protect the user's freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. Although the Lesser General Public License is Less protective of the users' freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. GNU LESSER GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) "Source code" for a work means the preferred form of the work for making modifications to it. For a library, 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 library. Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. 1. You may copy and distribute verbatim copies of the Library's complete 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 distribute a copy of this License along with the Library. 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 Library or any portion of it, thus forming a work based on the Library, 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) The modified work must itself be a software library. b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. (For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, 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 Library, 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 Library. In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. This option is useful when you wish to copy part of the code of the Library into a program that is not a library. 4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you 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. If distribution of 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 satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. 5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. 6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user's computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be 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. It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. 7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. 8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library 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. 9. 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 Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. 10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library 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 with this License. 11. 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 Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library 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 Library. 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. 12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library 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. 13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Library 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 Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. 14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, 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 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "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 LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. 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 LIBRARY 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 LIBRARY (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 LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), 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 Libraries If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). To apply these terms, attach the following notices to the library. 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 library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; 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. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the library `Frob' (a library for tweaking knobs) written by James Random Hacker. , 1 April 1990 Ty Coon, President of Vice That's all there is to it! libvips-8.15.1/README.md000066400000000000000000000233341454007373500145520ustar00rootroot00000000000000# libvips : an image processing library [![CI](https://github.com/libvips/libvips/workflows/CI/badge.svg)](https://github.com/libvips/libvips/actions) [![Fuzzing Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/libvips.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=2&q=proj:libvips) [![Coverity Status](https://scan.coverity.com/projects/6503/badge.svg)](https://scan.coverity.com/projects/jcupitt-libvips) [![Gitter](https://badges.gitter.im/libvips/devchat.svg)](https://gitter.im/libvips/devchat?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) # Introduction libvips is a [demand-driven, horizontally threaded](https://github.com/libvips/libvips/wiki/Why-is-libvips-quick) image processing library. Compared to similar libraries, [libvips runs quickly and uses little memory](https://github.com/libvips/libvips/wiki/Speed-and-memory-use). libvips is licensed under the [LGPL 2.1+](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html). It has around [300 operations](https://libvips.github.io/libvips/API/current/func-list.html) covering arithmetic, histograms, convolution, morphological operations, frequency filtering, colour, resampling, statistics and others. It supports a large range of [numeric types](https://libvips.github.io/libvips/API/current/VipsImage.html#VipsBandFormat), from 8-bit int to 128-bit complex. Images can have any number of bands. It supports a good range of image formats, including JPEG, JPEG2000, JPEG-XL, TIFF, PNG, WebP, HEIC, AVIF, FITS, Matlab, OpenEXR, PDF, SVG, HDR, PPM / PGM / PFM, CSV, GIF, Analyze, NIfTI, DeepZoom, and OpenSlide. It can also load images via ImageMagick or GraphicsMagick, letting it work with formats like DICOM. It comes with bindings for [C](https://libvips.github.io/libvips/API/current/using-from-c.html), [C++](https://libvips.github.io/libvips/API/current/libvips-from-C++.html), and the [command-line](https://libvips.github.io/libvips/API/current/using-cli.html). Full bindings are available for : | Language | Binding | |---|---| | Ruby | [ruby-vips](https://rubygems.org/gems/ruby-vips) | | Python | [pyvips](https://pypi.python.org/pypi/pyvips) | | PHP | [php-vips](https://github.com/libvips/php-vips) | | C# / .NET | [NetVips](https://www.nuget.org/packages/NetVips) | | Go | [govips](https://github.com/davidbyttow/govips) | | Lua | [lua-vips](https://github.com/libvips/lua-vips) | | Crystal | [crystal-vips](https://github.com/naqvis/crystal-vips) | | Elixir | [vix](https://github.com/akash-akya/vix) | libvips is used as an image processing engine by: | | |---| | [sharp (on node.js)](https://www.npmjs.org/package/sharp) | | [imgproxy](https://github.com/imgproxy/imgproxy) | | [bimg](https://github.com/h2non/bimg) | | [sharp for Go](https://github.com/DAddYE/vips) | | [Ruby on Rails](https://edgeguides.rubyonrails.org/active_storage_overview.html) | | [carrierwave-vips](https://github.com/eltiare/carrierwave-vips) | | [mediawiki](https://www.mediawiki.org/wiki/Extension:VipsScaler) | | [PhotoFlow](https://github.com/aferrero2707/PhotoFlow) | and others. The official libvips GUI is [nip2](https://github.com/libvips/nip2), a strange combination of a spreadsheet and a photo editor. # Install There are packages for most Unix-like operating systems, including macOS. Check your package manager. There are binaries for Windows in [releases](https://github.com/libvips/libvips/releases). The [libvips website](https://libvips.github.io/libvips) has [detailed install notes](https://libvips.github.io/libvips/install.html). # Building from source libvips uses the [Meson build system](https://mesonbuild.com), version 0.56 or later. Meson can use [`ninja`](https://ninja-build.org), Visual Studio or XCode as a backend, so you'll also need one of them. libvips must have `build-essential`, `pkg-config`, `libglib2.0-dev`, `libexpat1-dev`. See the **Dependencies** section below for a full list of the libvips optional dependencies. There are basic bash completions in `completions/`, see the README in there. ## Cheatsheet ``` cd libvips-x.y.x meson setup build --prefix /my/install/prefix cd build meson compile meson test meson install ``` Check the output of `meson setup` carefully and make sure it found everything you wanted it to find. Add arguments to `meson setup` to change the build configuration. - Add flags like `-Dnsgif=false` to turn libvips options on and off, see `meson_options.txt` for a list of all the build options libvips supports. - Add flags like `-Dmagick=disabled` to turn libvips dependencies on and off, see `meson_options.txt` and the list below for a summary of all the libvips dependencies. - You might need to add `--libdir lib` on Debian if you don't want the arch name in the library path. - Add `--default-library static` for a static build. - Use eg. `CC=clang CXX=clang++ meson setup ...` to change compiler. - You can have many `build-dir`, pick whatever names you like, for example one for release and one for debug. There's a more comprehensive test suite you can run once libvips has been installed. Use `pytest` in the libvips base directory. ## Optional dependencies If suitable versions are found, libvips will add support for the following libraries automatically. Packages are generally found with `pkg-config`, so make sure that is working. ### libjpeg Anything that is compatible with the IJG JPEG library. Use `mozjpeg` if you can. Another option is `libjpeg-turbo`. ### libexif If available, libvips adds support for EXIF metadata in JPEG files. ### librsvg The usual SVG loader. If this is not present, vips will try to load SVGs via imagemagick instead. ### PDFium If present, libvips will attempt to load PDFs with PDFium. Download the prebuilt pdfium binary from: https://github.com/bblanchon/pdfium-binaries Untar to the libvips install prefix, for example: cd ~/vips tar xf ~/pdfium-linux.tgz Create a `pdfium.pc` like this (update the version number): VIPSHOME=/home/john/vips cat > $VIPSHOME/lib/pkgconfig/pdfium.pc << EOF prefix=$VIPSHOME exec_prefix=\${prefix} libdir=\${exec_prefix}/lib includedir=\${prefix}/include Name: pdfium Description: pdfium Version: 4290 Requires: Libs: -L\${libdir} -lpdfium Cflags: -I\${includedir} EOF If PDFium is not detected, libvips will look for `poppler-glib` instead. ### poppler-glib The Poppler PDF renderer, with a glib API. If this is not present, vips will try to load PDFs via imagemagick. ### cgif If available, libvips will save GIFs with [cgif](https://github.com/dloebl/cgif). If this is not present, vips will try to save gifs via imagemagick instead. ### libarchive If available, libvips adds support for creating image pyramids with `dzsave`. ### libtiff The TIFF library. It needs to be built with support for JPEG and ZIP compression. 3.4b037 and later are known to be OK. ### fftw3 If libvips finds this library, it uses it for fourier transforms. ### lcms2 If present, `vips_icc_import()`, `vips_icc_export()` and `vips_icc_transform()` can be used to manipulate images with ICC profiles. ### libspng If present, libvips will load and save PNG files using libspng. If not, it will look for the standard libpng package. ### libimagequant, quantizr If one of these quantisation packages is present, libvips can write 8-bit palette-ised PNGs and GIFs. ### ImageMagick, or optionally GraphicsMagick If available, libvips adds support for loading and saving all libMagick-supported image file types. You can enable and disable load and save separately. Imagemagick 6.9+ needs to have been built with `--with-modules`. Most packaged IMs are, I think. If you are going to be using libvips with untrusted images, perhaps in a web server, for example, you should consider the security implications of enabling a package with such a large attack surface. ### pangocairo If available, libvips adds support for text rendering. You need the package pangocairo in `pkg-config --list-all`. ### highway If present, libvips will accelerate some operations with SIMD. If not, it will look for the orc-0.4 package. ### matio If available, vips can load images from Matlab save files. ### cfitsio If available, vips can load FITS images. ### libwebp If available, vips can load and save WebP images. ### libniftiio If available, vips can load and save NIfTI images. ### OpenEXR If available, libvips will directly read (but not write, sadly) OpenEXR images. ### OpenJPEG If available, libvips will read and write JPEG2000 images. ### libjxl If available, libvips will read and write JPEG-XL images. ### OpenSlide If available, libvips can load OpenSlide-supported virtual slide files: Aperio, Hamamatsu, Leica, MIRAX, Sakura, Trestle, and Ventana. ### libheif If available, libvips can load and save HEIC and AVIF images. Your libheif (in turn) needs to be built with the correct decoders and encoders. You can check with eg.: ```console $ heif-convert --list-decoders HEIC decoders: - libde265 = libde265 HEVC decoder, version 1.0.9 AVIF decoders: - dav1d = dav1d v6.6.0 - aom = AOMedia Project AV1 Decoder v3.5.0 $ heif-enc --list-encoders HEIC encoders: - x265 = x265 HEVC encoder (3.5+1-f0c1022b6) [default] AVIF encoders: - aom = AOMedia Project AV1 Encoder v3.5.0 [default] - svt = SVT-AV1 encoder v1.1.0 - rav1e = Rav1e encoder ``` # Contributors ### Code Contributors This project exists thanks to all the people who contribute. ### Organizations We've had generous financial support from our sponsors. Thank you very much! libvips-8.15.1/completions/000077500000000000000000000000001454007373500156225ustar00rootroot00000000000000libvips-8.15.1/completions/README.md000066400000000000000000000015441454007373500171050ustar00rootroot00000000000000# Shell completions for vips Basic shell completions for the `vips` program. Internally, these use the `-c` argument to `vips` to list argument options. ## Example ``` $ vips relational relational relational_const $ vips relational_const ~/pics/k2. ~/pics/k2.avif ~/pics/k2.hdr ~/pics/k2.pdf ~/pics/k2.tif ~/pics/k2.bmp ~/pics/k2.heic ~/pics/k2.pfm ~/pics/k2.v ~/pics/k2.csv ~/pics/k2.jp2 ~/pics/k2.pgm ~/pics/k2.vips ~/pics/k2.fits ~/pics/k2.jpg ~/pics/k2.png ~/pics/k2.webp ~/pics/k2.flif ~/pics/k2.jxl ~/pics/k2.ppm ~/pics/k2.gif ~/pics/k2.pbm ~/pics/k2.ppt $ vips relational_const ~/pics/k2.jpg x.v less less lesseq $ vips relational_const ~/pics/k2.jpg x.v lesseq 12 ``` ## Install ### `vips-completion.bash` Usually copy to `/etc/bash_completion.d` to install, but it depends on your system. libvips-8.15.1/completions/vips-completion.bash000066400000000000000000000020641454007373500216130ustar00rootroot00000000000000#/usr/bin/env bash # bash completions for the "vips" command # copy to /etc/bash_completion.d to install _vips_compgen_f() { COMPREPLY=($(compgen -f -- "${COMP_WORDS[-1]}")) if [ ${#COMPREPLY[@]} = 1 ]; then local LASTCHAR= if [ -d "$COMPREPLY" ]; then LASTCHAR=/ fi COMPREPLY=$(printf %q%s "$COMPREPLY" "$LASTCHAR") else for ((i=0; i < ${#COMPREPLY[@]}; i++)); do if [ -d "${COMPREPLY[$i]}" ]; then COMPREPLY[$i]=${COMPREPLY[$i]}/ fi done fi } _vips_completions() { if [ ${#COMP_WORDS[@]} == "2" ]; then COMPREPLY=($(compgen -W "$(vips -c)" "${COMP_WORDS[1]}")) else local args=($(vips -c ${COMP_WORDS[1]})) local arg_type=${args[${#COMP_WORDS[@]}-3]} if [ x$arg_type == x"" ]; then COMPREPLY= elif [ $arg_type == "file" ]; then _vips_compgen_f elif [[ $arg_type = word:* ]]; then local options=$(echo $arg_type | sed 's/word://' | sed 's/|/ /g') COMPREPLY=($(compgen -W "${options[@]}" "${COMP_WORDS[-1]}")) fi fi } complete -F _vips_completions vips libvips-8.15.1/cplusplus/000077500000000000000000000000001454007373500153205ustar00rootroot00000000000000libvips-8.15.1/cplusplus/.gitignore000066400000000000000000000000421454007373500173040ustar00rootroot00000000000000html latex Doxyfile doxygen.stamp libvips-8.15.1/cplusplus/Doxyfile.in000066400000000000000000000023541454007373500174370ustar00rootroot00000000000000PROJECT_NAME = vips-cpp PROJECT_NUMBER = @VIPS_MAJOR_VERSION@.@VIPS_MINOR_VERSION@ PROJECT_BRIEF = "libvips C++ binding" OUTPUT_DIRECTORY = @DOXY_OUTPUT_DIRECTORY@ QUIET = YES INPUT = @DOXY_INPUT_DIRECTORY@/README.md \ @DOXY_INPUT_DIRECTORY@/VConnection.cpp \ @DOXY_INPUT_DIRECTORY@/VError.cpp \ @DOXY_INPUT_DIRECTORY@/VImage.cpp \ @DOXY_INPUT_DIRECTORY@/VInterpolate.cpp \ @DOXY_INPUT_DIRECTORY@/VRegion.cpp \ @DOXY_INPUT_DIRECTORY@/vips-operators.cpp \ @DOXY_INPUT_DIRECTORY@/include/vips/VConnection8.h \ @DOXY_INPUT_DIRECTORY@/include/vips/VError8.h \ @DOXY_INPUT_DIRECTORY@/include/vips/VImage8.h \ @DOXY_INPUT_DIRECTORY@/include/vips/VInterpolate8.h \ @DOXY_INPUT_DIRECTORY@/include/vips/VRegion8.h \ @DOXY_INPUT_DIRECTORY@/include/vips/vips8 USE_MDFILE_AS_MAINPAGE = @DOXY_INPUT_DIRECTORY@/README.md GENERATE_LATEX = NO HAVE_DOT = YES DOT_IMAGE_FORMAT = svg libvips-8.15.1/cplusplus/README.md000066400000000000000000000227631454007373500166110ustar00rootroot00000000000000### Introduction The libvips C++ API is a thin layer over the libvips GObject API. It adds automatic reference counting, exceptions, operator overloads, and automatic constant expansion. You can drop down to the C API at any point, so all the C API docs also work for C++. ### Example /* compile with: * g++ -g -Wall example.cc `pkg-config vips-cpp --cflags --libs` */ #include using namespace vips; int main (int argc, char **argv) { if (VIPS_INIT (argv[0])) vips_error_exit (NULL); if (argc != 3) vips_error_exit ("usage: %s input-file output-file", argv[0]); VImage in = VImage::new_from_file (argv[1], VImage::option ()->set ("access", VIPS_ACCESS_SEQUENTIAL)); double avg = in.avg (); printf ("avg = %g\n", avg); printf ("width = %d\n", in.width ()); in = VImage::new_from_file (argv[1], VImage::option ()->set ("access", VIPS_ACCESS_SEQUENTIAL)); VImage out = in.embed (10, 10, 1000, 1000, VImage::option ()-> set ("extend", "background")-> set ("background", 128)); out.write_to_file (argv[2]); vips_shutdown (); return 0; } Everything before `VImage in = VImage::new_from_file()` is exactly as the C API. `vips_error_exit()` just prints the arguments plus the libvips error log and exits with an error code. `VImage::new_from_file()` is the C++ equivalent of `vips_image_new_from_file()`. It works in the same way, the differences being: - VImage lifetime is managed automatically, like a smart pointer. You don't need to call `g_object_unref()`. - Instead of using varargs and a `NULL`-terminated option list, this function takes an optional `VOption` pointer. This gives a list of name / value pairs for optional arguments to the function. In this case we request unbuffered IO for the image, meaning, we expect to do a single top-to-bottom scan of the image and do not need it to be decompressed entirely. You can use the C enum name, as is done in this case, or use a string and have the string looked up. See below. The function will delete the `VOption` pointer for us when it's finished with it. - Instead of returning `NULL` on error, this constructor will raise a `VError` exception. There are a series of similar constructors which parallel the other constructors in the C API, see `VImage::new_from_memory()`, `VImage::new_from_buffer()`, and `VImage::new_matrix()`. The convenience function `VImage::new_from_image()` makes a constant image from an existing image. The image it returns will have the same size, interpretation, resolution and format as the image you call it on, but with every pixel having the constant value you specify. For example: new_image = image.new_from_image (12); Now `new_image` has the same size as `image`, but has one band, and every pixel has the value 12. You can pass a `std::vector` as the argument to make a constant image with a different number of bands. There's also `VImage::new_memory()` and `VImage::new_temp_file()`, which when written to with `VImage::write()` will create whole images on memory or on disc. The next line finds the average pixel value, it's the equivalent of the `vips_avg()` function. The differences from the C API are: - `VImage::avg()` is a member function: the `this` parameter is the first (the only, in this case) input image. - The function returns the first output parameter, in this case the average pixel value. Other return values are via pointer arguments, as in the C API. - Like `VImage::new_from_file()`, function raises the `VError` exception on error. - Like `VImage::new_from_file()`, extra arguments are passed via an optional `VOption` parameter. There are none in this case, so the function brackets can be left empty. All other operations follow the same pattern, for example the C API call `vips_add(`): int vips_add (VipsImage *left, VipsImage *right, VipsImage **out, ...); appears in C++ as: VImage VImage::add (VImage right, VOption *options) const The next line uses `VImage::width()` to get the image width in pixels. There are similar functions paralleling `vips_image_get_format()` and friends. Use `VImage::set()` to set metadata fields, `VImage::get_int()` and c. to fetch metadata. Next we reload the image. The `VImage::avg()` will have scanned the image and reached the end of the file, we need to scan again for the next operation. If we'd selected random access mode (the default) in the original `VImage::new_from_file()`, we would not need to reload. The next line runs `vips_embed()` with two optional parameters. The first sets the value to an enum (here we use a string to set the value, it'll be looked up in the list of possible enum values, or you can use the symbols from the C API), the second sets the value to an `int`. The `"background"` parameter is actually a `VipsArrayDouble`: if you pass an `int` instead, it will be automatically converted to a one-element array for you. You can pass a `std::vector` too: the utility function `VImage::to_vectorv()` is a convenient way to make one. Finally, `VImage::write_to_file()` will write the new image to the filesystem. You can add a `VOption` as a final parameter and set options for the writer if you wish. Again, the operation will throw a `VError` exception on error. The other writers from the C API are also present: you can write to a memory array, to a formatted image in memory, or to another image. The API docs have a [handy table of all vips operations](https://libvips.github.io/libvips/API/current/func-list.html), if you want to find out how to do something, try searching that. ### Automatic constant expansion The C++ API will automatically turn constants into images in some cases. For example, you can join two images together bandwise (the bandwise join of two RGB images would be a six-band image) with: VImage rgb = ...; VImage six_band = rgb.bandjoin (rgb); You can also bandjoin a constant, for example: VImage rgb_with_alpha = rgb.bandjoin (255); Will add an extra band to an image, with every element in the new band having the value 255. This is quite a general feature. You can use a constant in most places where you can use an image and it will be converted. For example: VImage a = (a < 128).ifthenelse (128, a); Will set every band element of `a` less than 128 to 128. The C++ API includes the usual range of arithmetic operator overloads. You can mix constants, vectors and images freely. The API overloads `[]` to be `vips_extract_band()`. You can write: VImage xyz = VImage::xyz (256, 256) - VImage::to_vectorv (2, 128.0, 128.0); VImage mask = (xyz[0].pow (2) + xyz[1].pow (2)).pow (0.5) < 100; to make a circular mask, for example. The API overloads `()` to be `vips_getpoint()`. You can write: VImage xyz = VImage::xyz (256, 256) - VImage::to_vectorv (2, 128.0, 128.0); // this will have the value [0, 0] std::vector point = xyz (128, 128); ### Enum expansion libvips operations which implement several functions with a controlling enum, such as `vips_math()`, are expanded to a set of member functions named after the enum. For example, the C function: int vips_math (VipsImage *in, VipsImage **out, VipsOperationMath math, ...); where `VipsOperationMath` has the member `VIPS_OPERATION_MATH_SIN`, has a C convenience function `vips_sin()`: int vips_sin (VipsImage *in, VipsImage **out, ...); and a C++ member function `VImage::sin()`: VImage VImage::sin (VOption *options = nullptr) const ### Image metadata libvips images can have a lot of metadata attached to them, giving things like ICC profiles, EXIF data, and so on. You can use the command-line program `vipsheader` with the `-a` flag to list all the fields. You can read metadata items with the member functions `get_int()`, `get_double()`, `get_string()` and `get_blob()`. Use `get_typeof()` to call `vips_image_get_typeof()` and read the type of an item. This will return 0 for undefined fields. const char *VImage::get_string (const char *field); You can use the `set()` family of overloaded members to set metadata, for example: void VImage::set (const char *field, const char *value); You can use these functions to manipulate exif metadata, for example: VImage im = VImage::new_from_file ("x.jpg") int orientation = im.get_int (VIPS_META_ORIENTATION); im.set (VIPS_META_ORIENTATION, 2); im.write_to_file ("y.jpg"); ### Extending the C++ interface The C++ interface comes in two parts. First, `VImage8.h` defines a simple layer over `GObject` for automatic reference counting, then a generic way to call any vips8 operation with `VImage::call()`, then a few convenience functions, then a set of overloads. The member definition and declaration for each operation, for example `VImage::add()`, is generated by a small Python program called `gen-operators.py`. If you write a new libvips operator, you'll need to rerun this program to make it visible in the C++ interface. You can write the wrapper yourself, of course, they are very simple. The one for `VImage::add()` looks like this: VImage VImage::add (VImage right, VOption *options) const { VImage out; call("add", (options ? options : VImage::option())-> set("out", &out)-> set("left", *this)-> set("right", right)); return out; } Where `VImage::call()` is the generic call-a-vips8-operation function. libvips-8.15.1/cplusplus/VConnection.cpp000066400000000000000000000050531454007373500202540ustar00rootroot00000000000000/* Object part of the VSource and VTarget class */ /* Copyright (C) 1991-2001 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include /* #define VIPS_DEBUG #define VIPS_DEBUG_VERBOSE */ VIPS_NAMESPACE_START VSource VSource::new_from_descriptor(int descriptor) { VipsSource *input; if (!(input = vips_source_new_from_descriptor(descriptor))) throw VError(); VSource out(input); return out; } VSource VSource::new_from_file(const char *filename) { VipsSource *input; if (!(input = vips_source_new_from_file(filename))) throw VError(); VSource out(input); return out; } VSource VSource::new_from_blob(VipsBlob *blob) { VipsSource *input; if (!(input = vips_source_new_from_blob(blob))) throw VError(); VSource out(input); return out; } VSource VSource::new_from_memory(const void *data, size_t size) { VipsSource *input; if (!(input = vips_source_new_from_memory(data, size))) throw VError(); VSource out(input); return out; } VSource VSource::new_from_options(const char *options) { VipsSource *input; if (!(input = vips_source_new_from_options(options))) throw VError(); VSource out(input); return out; } VTarget VTarget::new_to_descriptor(int descriptor) { VipsTarget *output; if (!(output = vips_target_new_to_descriptor(descriptor))) throw VError(); VTarget out(output); return out; } VTarget VTarget::new_to_file(const char *filename) { VipsTarget *output; if (!(output = vips_target_new_to_file(filename))) throw VError(); VTarget out(output); return out; } VTarget VTarget::new_to_memory() { VipsTarget *output; if (!(output = vips_target_new_to_memory())) throw VError(); VTarget out(output); return out; } VIPS_NAMESPACE_END libvips-8.15.1/cplusplus/VError.cpp000066400000000000000000000022501454007373500172420ustar00rootroot00000000000000// Code for error type /* Copyright (C) 1991-2001 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include VIPS_NAMESPACE_START std::ostream & operator<<(std::ostream &file, const VError &err) { err.ostream_print(file); return file; } void VError::ostream_print(std::ostream &file) const { file << _what; } VIPS_NAMESPACE_END libvips-8.15.1/cplusplus/VImage.cpp000066400000000000000000000720121454007373500171760ustar00rootroot00000000000000/* Object part of VImage class * * 30/12/14 * - allow set enum value from string * 10/6/16 * - missing implementation of VImage::write() * 11/6/16 * - added arithmetic assignment overloads, += etc. */ /* Copyright (C) 1991-2001 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include /* #define VIPS_DEBUG #define VIPS_DEBUG_VERBOSE */ VIPS_NAMESPACE_START /** * \namespace vips * * General docs for the vips namespace. */ std::vector to_vectorv(int n, ...) { std::vector vector(n); va_list ap; va_start(ap, n); for (int i = 0; i < n; i++) vector[i] = va_arg(ap, double); va_end(ap); return vector; } std::vector to_vector(double value) { return to_vectorv(1, value); } std::vector to_vector(int n, double array[]) { std::vector vector(n); for (int i = 0; i < n; i++) vector[i] = array[i]; return vector; } std::vector negate(std::vector vector) { std::vector new_vector(vector.size()); for (std::vector::size_type i = 0; i < vector.size(); i++) new_vector[i] = vector[i] * -1; return new_vector; } std::vector invert(std::vector vector) { std::vector new_vector(vector.size()); for (std::vector::size_type i = 0; i < vector.size(); i++) new_vector[i] = 1.0 / vector[i]; return new_vector; } VOption::~VOption() { std::list::iterator i; for (i = options.begin(); i != options.end(); ++i) delete *i; } // input bool VOption * VOption::set(const char *name, bool value) { Pair *pair = new Pair(name); pair->input = true; g_value_init(&pair->value, G_TYPE_BOOLEAN); g_value_set_boolean(&pair->value, value); options.push_back(pair); return this; } // input int ... this path is used for enums as well VOption * VOption::set(const char *name, int value) { Pair *pair = new Pair(name); pair->input = true; g_value_init(&pair->value, G_TYPE_INT); g_value_set_int(&pair->value, value); options.push_back(pair); return this; } // input guint64 VOption * VOption::set(const char *name, guint64 value) { Pair *pair = new Pair(name); pair->input = true; g_value_init(&pair->value, G_TYPE_UINT64); g_value_set_uint64(&pair->value, value); options.push_back(pair); return this; } // input double VOption * VOption::set(const char *name, double value) { Pair *pair = new Pair(name); pair->input = true; g_value_init(&pair->value, G_TYPE_DOUBLE); g_value_set_double(&pair->value, value); options.push_back(pair); return this; } VOption * VOption::set(const char *name, const char *value) { Pair *pair = new Pair(name); pair->input = true; g_value_init(&pair->value, G_TYPE_STRING); g_value_set_string(&pair->value, value); options.push_back(pair); return this; } // input vips object (image, source, target, etc. etc.) VOption * VOption::set(const char *name, const VObject value) { Pair *pair = new Pair(name); VipsObject *object = value.get_object(); GType type = G_OBJECT_TYPE(object); pair->input = true; g_value_init(&pair->value, type); g_value_set_object(&pair->value, object); options.push_back(pair); return this; } // input int array VOption * VOption::set(const char *name, std::vector value) { Pair *pair = new Pair(name); int *array; pair->input = true; g_value_init(&pair->value, VIPS_TYPE_ARRAY_INT); vips_value_set_array_int(&pair->value, nullptr, static_cast(value.size())); array = vips_value_get_array_int(&pair->value, nullptr); for (std::vector::size_type i = 0; i < value.size(); i++) array[i] = value[i]; options.push_back(pair); return this; } // input double array VOption * VOption::set(const char *name, std::vector value) { Pair *pair = new Pair(name); double *array; pair->input = true; g_value_init(&pair->value, VIPS_TYPE_ARRAY_DOUBLE); vips_value_set_array_double(&pair->value, nullptr, static_cast(value.size())); array = vips_value_get_array_double(&pair->value, nullptr); for (std::vector::size_type i = 0; i < value.size(); i++) array[i] = value[i]; options.push_back(pair); return this; } // input image array VOption * VOption::set(const char *name, std::vector value) { Pair *pair = new Pair(name); VipsImage **array; pair->input = true; g_value_init(&pair->value, VIPS_TYPE_ARRAY_IMAGE); vips_value_set_array_image(&pair->value, static_cast(value.size())); array = vips_value_get_array_image(&pair->value, nullptr); for (std::vector::size_type i = 0; i < value.size(); i++) { VipsImage *vips_image = value[i].get_image(); array[i] = vips_image; g_object_ref(vips_image); } options.push_back(pair); return this; } // input blob VOption * VOption::set(const char *name, VipsBlob *value) { Pair *pair = new Pair(name); pair->input = true; g_value_init(&pair->value, VIPS_TYPE_BLOB); g_value_set_boxed(&pair->value, value); options.push_back(pair); return this; } // output bool VOption * VOption::set(const char *name, bool *value) { Pair *pair = new Pair(name); pair->input = false; pair->vbool = value; g_value_init(&pair->value, G_TYPE_BOOLEAN); options.push_back(pair); return this; } // output int VOption * VOption::set(const char *name, int *value) { Pair *pair = new Pair(name); pair->input = false; pair->vint = value; g_value_init(&pair->value, G_TYPE_INT); options.push_back(pair); return this; } // output double VOption * VOption::set(const char *name, double *value) { Pair *pair = new Pair(name); pair->input = false; pair->vdouble = value; g_value_init(&pair->value, G_TYPE_DOUBLE); options.push_back(pair); return this; } // output image VOption * VOption::set(const char *name, VImage *value) { Pair *pair = new Pair(name); pair->input = false; pair->vimage = value; g_value_init(&pair->value, VIPS_TYPE_IMAGE); options.push_back(pair); return this; } // output doublearray VOption * VOption::set(const char *name, std::vector *value) { Pair *pair = new Pair(name); pair->input = false; pair->vvector = value; g_value_init(&pair->value, VIPS_TYPE_ARRAY_DOUBLE); options.push_back(pair); return this; } // output blob VOption * VOption::set(const char *name, VipsBlob **value) { Pair *pair = new Pair(name); pair->input = false; pair->vblob = value; g_value_init(&pair->value, VIPS_TYPE_BLOB); options.push_back(pair); return this; } // just g_object_set_property(), except we allow set enum from string static void set_property(VipsObject *object, const char *name, const GValue *value) { VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(object); GType type = G_VALUE_TYPE(value); GParamSpec *pspec; VipsArgumentClass *argument_class; VipsArgumentInstance *argument_instance; if (vips_object_get_argument(object, name, &pspec, &argument_class, &argument_instance)) { g_warning("%s", vips_error_buffer()); vips_error_clear(); return; } if (G_IS_PARAM_SPEC_ENUM(pspec) && type == G_TYPE_STRING) { GType pspec_type = G_PARAM_SPEC_VALUE_TYPE(pspec); int enum_value; GValue value2 = G_VALUE_INIT; if ((enum_value = vips_enum_from_nick(object_class->nickname, pspec_type, g_value_get_string(value))) < 0) { g_warning("%s", vips_error_buffer()); vips_error_clear(); return; } g_value_init(&value2, pspec_type); g_value_set_enum(&value2, enum_value); g_object_set_property(G_OBJECT(object), name, &value2); g_value_unset(&value2); } else g_object_set_property(G_OBJECT(object), name, value); } // walk the options and set props on the operation void VOption::set_operation(VipsOperation *operation) { std::list::iterator i; for (i = options.begin(); i != options.end(); ++i) if ((*i)->input) { #ifdef VIPS_DEBUG_VERBOSE printf("set_operation: "); vips_object_print_name(VIPS_OBJECT(operation)); char *str_value = g_strdup_value_contents(&(*i)->value); printf(".%s = %s\n", (*i)->name, str_value); g_free(str_value); #endif /*VIPS_DEBUG_VERBOSE*/ set_property(VIPS_OBJECT(operation), (*i)->name, &(*i)->value); } } // walk the options and fetch any requested outputs void VOption::get_operation(VipsOperation *operation) { std::list::iterator i; for (i = options.begin(); i != options.end(); ++i) if (!(*i)->input) { const char *name = (*i)->name; g_object_get_property(G_OBJECT(operation), name, &(*i)->value); #ifdef VIPS_DEBUG_VERBOSE printf("get_operation: "); vips_object_print_name(VIPS_OBJECT(operation)); char *str_value = g_strdup_value_contents( &(*i)->value); printf(".%s = %s\n", name, str_value); g_free(str_value); #endif /*VIPS_DEBUG_VERBOSE*/ GValue *value = &(*i)->value; GType type = G_VALUE_TYPE(value); if (type == VIPS_TYPE_IMAGE) { // rebox object VipsImage *image = VIPS_IMAGE( g_value_get_object(value)); *((*i)->vimage) = VImage(image); } else if (type == G_TYPE_INT) *((*i)->vint) = g_value_get_int(value); else if (type == G_TYPE_BOOLEAN) *((*i)->vbool) = g_value_get_boolean(value); else if (type == G_TYPE_DOUBLE) *((*i)->vdouble) = g_value_get_double(value); else if (type == VIPS_TYPE_ARRAY_DOUBLE) { int length; double *array = vips_value_get_array_double(value, &length); ((*i)->vvector)->resize(length); for (int j = 0; j < length; j++) (*((*i)->vvector))[j] = array[j]; } else if (type == VIPS_TYPE_BLOB) { // our caller gets a reference *((*i)->vblob) = (VipsBlob *) g_value_dup_boxed(value); } } } void VImage::call_option_string(const char *operation_name, const char *option_string, VOption *options) { VipsOperation *operation; VIPS_DEBUG_MSG("call_option_string: starting for %s ...\n", operation_name); if (!(operation = vips_operation_new(operation_name))) { delete options; throw(VError()); } /* Set str options before vargs options, so the user can't * override things we set deliberately. */ if (option_string && vips_object_set_from_string(VIPS_OBJECT(operation), option_string)) { vips_object_unref_outputs(VIPS_OBJECT(operation)); g_object_unref(operation); delete options; throw(VError()); } if (options) options->set_operation(operation); /* Build from cache. */ if (vips_cache_operation_buildp(&operation)) { vips_object_unref_outputs(VIPS_OBJECT(operation)); g_object_unref(operation); delete options; throw(VError()); } /* Walk args again, writing output. */ if (options) options->get_operation(operation); /* We're done with options! */ delete options; /* The operation we have built should now have been reffed by * one of its arguments or have finished its work. Either * way, we can unref. */ g_object_unref(operation); } void VImage::call(const char *operation_name, VOption *options) { call_option_string(operation_name, nullptr, options); } VImage VImage::new_from_file(const char *name, VOption *options) { char filename[VIPS_PATH_MAX]; char option_string[VIPS_PATH_MAX]; const char *operation_name; VImage out; vips__filename_split8(name, filename, option_string); if (!(operation_name = vips_foreign_find_load(filename))) { delete options; throw VError(); } call_option_string(operation_name, option_string, (options ? options : VImage::option()) ->set("filename", filename) ->set("out", &out)); return out; } VImage VImage::new_from_buffer(const void *buf, size_t len, const char *option_string, VOption *options) { const char *operation_name; VipsBlob *blob; VImage out; if (!(operation_name = vips_foreign_find_load_buffer(buf, len))) { delete options; throw(VError()); } /* We don't take a copy of the data or free it. */ blob = vips_blob_new(nullptr, buf, len); options = (options ? options : VImage::option()) ->set("buffer", blob) ->set("out", &out); vips_area_unref(VIPS_AREA(blob)); call_option_string(operation_name, option_string, options); return out; } VImage VImage::new_from_buffer(const std::string &buf, const char *option_string, VOption *options) { return new_from_buffer(buf.c_str(), buf.size(), option_string, options); } VImage VImage::new_from_source(VSource source, const char *option_string, VOption *options) { const char *operation_name; VImage out; if (!(operation_name = vips_foreign_find_load_source( source.get_source()))) { delete options; throw(VError()); } options = (options ? options : VImage::option()) ->set("source", source) ->set("out", &out); call_option_string(operation_name, option_string, options); return out; } VImage VImage::new_from_memory_steal(void *data, size_t size, int width, int height, int bands, VipsBandFormat format) { VipsImage *image; if (!(image = vips_image_new_from_memory(data, size, width, height, bands, format))) throw(VError()); g_signal_connect(image, "postclose", G_CALLBACK(vips_image_free_buffer), data); return VImage(image); } VImage VImage::new_matrix(int width, int height) { return VImage(vips_image_new_matrix(width, height)); } VImage VImage::new_matrixv(int width, int height, ...) { VImage matrix = new_matrix(width, height); VipsImage *vips_matrix = matrix.get_image(); va_list ap; va_start(ap, height); for (int y = 0; y < height; y++) for (int x = 0; x < width; x++) *VIPS_MATRIX(vips_matrix, x, y) = va_arg(ap, double); va_end(ap); return matrix; } VImage VImage::write(VImage out) const { if (vips_image_write(this->get_image(), out.get_image())) throw VError(); return out; } void VImage::write_to_file(const char *name, VOption *options) const { char filename[VIPS_PATH_MAX]; char option_string[VIPS_PATH_MAX]; const char *operation_name; vips__filename_split8(name, filename, option_string); if (!(operation_name = vips_foreign_find_save(filename))) { delete options; throw VError(); } call_option_string(operation_name, option_string, (options ? options : VImage::option()) ->set("in", *this) ->set("filename", filename)); } void VImage::write_to_buffer(const char *suffix, void **buf, size_t *size, VOption *options) const { char filename[VIPS_PATH_MAX]; char option_string[VIPS_PATH_MAX]; const char *operation_name; VipsBlob *blob; /* Save with the new target API if we can. Fall back to the older * mechanism in case the saver we need has not been converted yet. * * We need to hide any errors from this first phase. */ vips__filename_split8(suffix, filename, option_string); vips_error_freeze(); operation_name = vips_foreign_find_save_target(filename); vips_error_thaw(); if (operation_name) { VTarget target = VTarget::new_to_memory(); call_option_string(operation_name, option_string, (options ? options : VImage::option()) ->set("in", *this) ->set("target", target)); g_object_get(target.get_target(), "blob", &blob, nullptr); } else if ((operation_name = vips_foreign_find_save_buffer(filename))) { call_option_string(operation_name, option_string, (options ? options : VImage::option()) ->set("in", *this) ->set("buffer", &blob)); } else { delete options; throw VError(); } if (blob) { if (buf) { *buf = VIPS_AREA(blob)->data; VIPS_AREA(blob)->free_fn = nullptr; } if (size) *size = VIPS_AREA(blob)->length; vips_area_unref(VIPS_AREA(blob)); } } void VImage::write_to_target(const char *suffix, VTarget target, VOption *options) const { char filename[VIPS_PATH_MAX]; char option_string[VIPS_PATH_MAX]; const char *operation_name; vips__filename_split8(suffix, filename, option_string); if (!(operation_name = vips_foreign_find_save_target(filename))) { delete options; throw VError(); } call_option_string(operation_name, option_string, (options ? options : VImage::option()) ->set("in", *this) ->set("target", target)); } VImage VImage::thumbnail_buffer(void *buf, size_t len, int width, VOption *options) { VipsBlob *blob; VImage out; /* We don't take a copy of the data or free it. */ blob = vips_blob_new(nullptr, buf, len); options = (options ? options : VImage::option())->set("buffer", blob)->set("width", width)->set("out", &out); vips_area_unref(VIPS_AREA(blob)); call("thumbnail_buffer", options); return out; } VRegion VImage::region() const { return VRegion::new_from_image(*this); } VRegion VImage::region(VipsRect *rect) const { VRegion region = VRegion::new_from_image(*this); region.prepare(rect); return region; } VRegion VImage::region(int left, int top, int width, int height) const { VRegion region = VRegion::new_from_image(*this); region.prepare(left, top, width, height); return region; } #include "vips-operators.cpp" std::vector VImage::bandsplit(VOption *options) const { std::vector b; b.reserve(bands()); for (int i = 0; i < bands(); i++) b.push_back(extract_band(i)); return b; } VImage VImage::bandjoin(VImage other, VOption *options) const { VImage v[2] = { *this, other }; std::vector vec(v, v + VIPS_NUMBER(v)); return bandjoin(vec, options); } VImage VImage::composite(VImage other, VipsBlendMode mode, VOption *options) const { VImage v[2] = { *this, other }; std::vector ivec(v, v + VIPS_NUMBER(v)); int m[1] = { static_cast(mode) }; std::vector mvec(m, m + VIPS_NUMBER(m)); return composite(ivec, mvec, options); } std::complex VImage::minpos(VOption *options) const { double x, y; (void) min( (options ? options : VImage::option()) ->set("x", &x) ->set("y", &y)); return std::complex(x, y); } std::complex VImage::maxpos(VOption *options) const { double x, y; (void) max( (options ? options : VImage::option()) ->set("x", &x) ->set("y", &y)); return std::complex(x, y); } // Operator overloads VImage VImage::operator[](int index) const { return this->extract_band(index); } std::vector VImage::operator()(int x, int y) const { return this->getpoint(x, y); } VImage operator+(const VImage a, const VImage b) { return a.add(b); } VImage operator+(double a, const VImage b) { return b.linear(1.0, a); } VImage operator+(const VImage a, double b) { return a.linear(1.0, b); } VImage operator+(const std::vector a, const VImage b) { return b.linear(1.0, a); } VImage operator+(const VImage a, const std::vector b) { return a.linear(1.0, b); } VImage & operator+=(VImage &a, const VImage b) { a = a + b; return a; } VImage & operator+=(VImage &a, const double b) { a = a + b; return a; } VImage & operator+=(VImage &a, const std::vector b) { a = a + b; return a; } VImage operator-(const VImage a, const VImage b) { return a.subtract(b); } VImage operator-(double a, const VImage b) { return b.linear(-1.0, a); } VImage operator-(const VImage a, double b) { return a.linear(1.0, -b); } VImage operator-(const std::vector a, const VImage b) { return b.linear(-1.0, a); } VImage operator-(const VImage a, const std::vector b) { return a.linear(1.0, vips::negate(b)); } VImage & operator-=(VImage &a, const VImage b) { a = a - b; return a; } VImage & operator-=(VImage &a, const double b) { a = a - b; return a; } VImage & operator-=(VImage &a, const std::vector b) { a = a - b; return a; } VImage operator-(const VImage a) { return a * -1; } VImage operator*(const VImage a, const VImage b) { return a.multiply(b); } VImage operator*(double a, const VImage b) { return b.linear(a, 0.0); } VImage operator*(const VImage a, double b) { return a.linear(b, 0.0); } VImage operator*(const std::vector a, const VImage b) { return b.linear(a, 0.0); } VImage operator*(const VImage a, const std::vector b) { return a.linear(b, 0.0); } VImage & operator*=(VImage &a, const VImage b) { a = a * b; return a; } VImage & operator*=(VImage &a, const double b) { a = a * b; return a; } VImage & operator*=(VImage &a, const std::vector b) { a = a * b; return a; } VImage operator/(const VImage a, const VImage b) { return a.divide(b); } VImage operator/(double a, const VImage b) { return b.pow(-1.0).linear(a, 0.0); } VImage operator/(const VImage a, double b) { return a.linear(1.0 / b, 0.0); } VImage operator/(const std::vector a, const VImage b) { return b.pow(-1.0).linear(a, 0.0); } VImage operator/(const VImage a, const std::vector b) { return a.linear(vips::invert(b), 0.0); } VImage & operator/=(VImage &a, const VImage b) { a = a / b; return a; } VImage & operator/=(VImage &a, const double b) { a = a / b; return a; } VImage & operator/=(VImage &a, const std::vector b) { a = a / b; return a; } VImage operator%(const VImage a, const VImage b) { return a.remainder(b); } VImage operator%(const VImage a, const double b) { return a.remainder_const(to_vector(b)); } VImage operator%(const VImage a, const std::vector b) { return a.remainder_const(b); } VImage & operator%=(VImage &a, const VImage b) { a = a % b; return a; } VImage & operator%=(VImage &a, const double b) { a = a % b; return a; } VImage & operator%=(VImage &a, const std::vector b) { a = a % b; return a; } VImage operator<(const VImage a, const VImage b) { return a.relational(b, VIPS_OPERATION_RELATIONAL_LESS); } VImage operator<(const double a, const VImage b) { return b.relational_const(VIPS_OPERATION_RELATIONAL_MORE, to_vector(a)); } VImage operator<(const VImage a, const double b) { return a.relational_const(VIPS_OPERATION_RELATIONAL_LESS, to_vector(b)); } VImage operator<(const std::vector a, const VImage b) { return b.relational_const(VIPS_OPERATION_RELATIONAL_MORE, a); } VImage operator<(const VImage a, const std::vector b) { return a.relational_const(VIPS_OPERATION_RELATIONAL_LESS, b); } VImage operator<=(const VImage a, const VImage b) { return a.relational(b, VIPS_OPERATION_RELATIONAL_LESSEQ); } VImage operator<=(const double a, const VImage b) { return b.relational_const(VIPS_OPERATION_RELATIONAL_MOREEQ, to_vector(a)); } VImage operator<=(const VImage a, const double b) { return a.relational_const(VIPS_OPERATION_RELATIONAL_LESSEQ, to_vector(b)); } VImage operator<=(const std::vector a, const VImage b) { return b.relational_const(VIPS_OPERATION_RELATIONAL_MOREEQ, a); } VImage operator<=(const VImage a, const std::vector b) { return a.relational_const(VIPS_OPERATION_RELATIONAL_LESSEQ, b); } VImage operator>(const VImage a, const VImage b) { return a.relational(b, VIPS_OPERATION_RELATIONAL_MORE); } VImage operator>(const double a, const VImage b) { return b.relational_const(VIPS_OPERATION_RELATIONAL_LESS, to_vector(a)); } VImage operator>(const VImage a, const double b) { return a.relational_const(VIPS_OPERATION_RELATIONAL_MORE, to_vector(b)); } VImage operator>(const std::vector a, const VImage b) { return b.relational_const(VIPS_OPERATION_RELATIONAL_LESS, a); } VImage operator>(const VImage a, const std::vector b) { return a.relational_const(VIPS_OPERATION_RELATIONAL_MORE, b); } VImage operator>=(const VImage a, const VImage b) { return a.relational(b, VIPS_OPERATION_RELATIONAL_MOREEQ); } VImage operator>=(const double a, const VImage b) { return b.relational_const(VIPS_OPERATION_RELATIONAL_LESSEQ, to_vector(a)); } VImage operator>=(const VImage a, const double b) { return a.relational_const(VIPS_OPERATION_RELATIONAL_MOREEQ, to_vector(b)); } VImage operator>=(const std::vector a, const VImage b) { return b.relational_const(VIPS_OPERATION_RELATIONAL_LESSEQ, a); } VImage operator>=(const VImage a, const std::vector b) { return a.relational_const(VIPS_OPERATION_RELATIONAL_MOREEQ, b); } VImage operator==(const VImage a, const VImage b) { return a.relational(b, VIPS_OPERATION_RELATIONAL_EQUAL); } VImage operator==(const double a, const VImage b) { return b.relational_const(VIPS_OPERATION_RELATIONAL_EQUAL, to_vector(a)); } VImage operator==(const VImage a, const double b) { return a.relational_const(VIPS_OPERATION_RELATIONAL_EQUAL, to_vector(b)); } VImage operator==(const std::vector a, const VImage b) { return b.relational_const(VIPS_OPERATION_RELATIONAL_EQUAL, a); } VImage operator==(const VImage a, const std::vector b) { return a.relational_const(VIPS_OPERATION_RELATIONAL_EQUAL, b); } VImage operator!=(const VImage a, const VImage b) { return a.relational(b, VIPS_OPERATION_RELATIONAL_NOTEQ); } VImage operator!=(const double a, const VImage b) { return b.relational_const(VIPS_OPERATION_RELATIONAL_NOTEQ, to_vector(a)); } VImage operator!=(const VImage a, const double b) { return a.relational_const(VIPS_OPERATION_RELATIONAL_NOTEQ, to_vector(b)); } VImage operator!=(const std::vector a, const VImage b) { return b.relational_const(VIPS_OPERATION_RELATIONAL_NOTEQ, a); } VImage operator!=(const VImage a, const std::vector b) { return a.relational_const(VIPS_OPERATION_RELATIONAL_NOTEQ, b); } VImage operator&(const VImage a, const VImage b) { return a.boolean(b, VIPS_OPERATION_BOOLEAN_AND); } VImage operator&(const double a, const VImage b) { return b.boolean_const(VIPS_OPERATION_BOOLEAN_AND, to_vector(a)); } VImage operator&(const VImage a, const double b) { return a.boolean_const(VIPS_OPERATION_BOOLEAN_AND, to_vector(b)); } VImage operator&(const std::vector a, const VImage b) { return b.boolean_const(VIPS_OPERATION_BOOLEAN_AND, a); } VImage operator&(const VImage a, const std::vector b) { return a.boolean_const(VIPS_OPERATION_BOOLEAN_AND, b); } VImage & operator&=(VImage &a, const VImage b) { a = a & b; return a; } VImage & operator&=(VImage &a, const double b) { a = a & b; return a; } VImage & operator&=(VImage &a, const std::vector b) { a = a & b; return a; } VImage operator|(const VImage a, const VImage b) { return a.boolean(b, VIPS_OPERATION_BOOLEAN_OR); } VImage operator|(const double a, const VImage b) { return b.boolean_const(VIPS_OPERATION_BOOLEAN_OR, to_vector(a)); } VImage operator|(const VImage a, const double b) { return a.boolean_const(VIPS_OPERATION_BOOLEAN_OR, to_vector(b)); } VImage operator|(const std::vector a, const VImage b) { return b.boolean_const(VIPS_OPERATION_BOOLEAN_OR, a); } VImage operator|(const VImage a, const std::vector b) { return a.boolean_const(VIPS_OPERATION_BOOLEAN_OR, b); } VImage & operator|=(VImage &a, const VImage b) { a = a | b; return a; } VImage & operator|=(VImage &a, const double b) { a = a | b; return a; } VImage & operator|=(VImage &a, const std::vector b) { a = a | b; return a; } VImage operator^(const VImage a, const VImage b) { return a.boolean(b, VIPS_OPERATION_BOOLEAN_EOR); } VImage operator^(const double a, const VImage b) { return b.boolean_const(VIPS_OPERATION_BOOLEAN_EOR, to_vector(a)); } VImage operator^(const VImage a, const double b) { return a.boolean_const(VIPS_OPERATION_BOOLEAN_EOR, to_vector(b)); } VImage operator^(const std::vector a, const VImage b) { return b.boolean_const(VIPS_OPERATION_BOOLEAN_EOR, a); } VImage operator^(const VImage a, const std::vector b) { return a.boolean_const(VIPS_OPERATION_BOOLEAN_EOR, b); } VImage & operator^=(VImage &a, const VImage b) { a = a ^ b; return a; } VImage & operator^=(VImage &a, const double b) { a = a ^ b; return a; } VImage & operator^=(VImage &a, const std::vector b) { a = a ^ b; return a; } VImage operator<<(const VImage a, const VImage b) { return a.boolean(b, VIPS_OPERATION_BOOLEAN_LSHIFT); } VImage operator<<(const VImage a, const double b) { return a.boolean_const(VIPS_OPERATION_BOOLEAN_LSHIFT, to_vector(b)); } VImage operator<<(const VImage a, const std::vector b) { return a.boolean_const(VIPS_OPERATION_BOOLEAN_LSHIFT, b); } VImage & operator<<=(VImage &a, const VImage b) { a = a << b; return a; } VImage & operator<<=(VImage &a, const double b) { a = a << b; return a; } VImage & operator<<=(VImage &a, const std::vector b) { a = a << b; return a; } VImage operator>>(const VImage a, const VImage b) { return a.boolean(b, VIPS_OPERATION_BOOLEAN_RSHIFT); } VImage operator>>(const VImage a, const double b) { return a.boolean_const(VIPS_OPERATION_BOOLEAN_RSHIFT, to_vector(b)); } VImage operator>>(const VImage a, const std::vector b) { return a.boolean_const(VIPS_OPERATION_BOOLEAN_RSHIFT, b); } VImage & operator>>=(VImage &a, const VImage b) { a = a << b; return a; } VImage & operator>>=(VImage &a, const double b) { a = a << b; return a; } VImage & operator>>=(VImage &a, const std::vector b) { a = a << b; return a; } VIPS_NAMESPACE_END libvips-8.15.1/cplusplus/VInterpolate.cpp000066400000000000000000000025171454007373500204450ustar00rootroot00000000000000/* Object part of VInterpolate class */ /* Copyright (C) 1991-2001 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include /* #define VIPS_DEBUG #define VIPS_DEBUG_VERBOSE */ VIPS_NAMESPACE_START VInterpolate VInterpolate::new_from_name(const char *name, VOption *options) { VipsInterpolate *interp; if (!(interp = vips_interpolate_new(name))) { delete options; throw VError(); } delete options; VInterpolate out(interp); return out; } VIPS_NAMESPACE_END libvips-8.15.1/cplusplus/VRegion.cpp000066400000000000000000000005671454007373500174050ustar00rootroot00000000000000// Object part of VRegion class #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include VIPS_NAMESPACE_START VRegion VRegion::new_from_image(VImage image) { VipsRegion *region; if (!(region = vips_region_new(image.get_image()))) { throw VError(); } VRegion out(region); return out; } VIPS_NAMESPACE_END libvips-8.15.1/cplusplus/examples/000077500000000000000000000000001454007373500171365ustar00rootroot00000000000000libvips-8.15.1/cplusplus/examples/avg.cpp000066400000000000000000000006711454007373500204230ustar00rootroot00000000000000/* * compile with: * * g++ -g -Wall avg.cpp `pkg-config vips-cpp --cflags --libs` * */ #define DEBUG #include using namespace vips; int main(int argc, char **argv) { if (vips_init(argv[0])) vips_error_exit(NULL); VImage in = VImage::new_from_file(argv[1], VImage::option()->set("access", VIPS_ACCESS_SEQUENTIAL)); double avg; avg = in.avg(); printf("avg = %g\n", avg); vips_shutdown(); return 0; } libvips-8.15.1/cplusplus/examples/buffer.cpp000066400000000000000000000016221454007373500211140ustar00rootroot00000000000000/* * compile with: * * g++ -g -Wall buffer.cpp `pkg-config vips-cpp --cflags --libs` * */ #define DEBUG #include using namespace vips; int main(int argc, char **argv) { if (VIPS_INIT(argv[0])) vips_error_exit(NULL); // load an image from a file VImage im = VImage::new_from_file(argv[1], VImage::option()->set("access", "sequential")); printf("loaded %d x %d pixel image from %s\n", im.width(), im.height(), argv[1]); // write to a formatted memory buffer size_t size; void *buf; im.write_to_buffer(".png", &buf, &size); printf("written to memory %p in png format, %zu bytes\n", buf, size); // load from the formatted memory area im = VImage::new_from_buffer(buf, size, ""); printf("loaded from memory, %d x %d pixel image\n", im.width(), im.height()); // write back to a file im.write_to_file(argv[2]); printf("written back to %s\n", argv[2]); return 0; } libvips-8.15.1/cplusplus/examples/embed.cpp000066400000000000000000000007531454007373500207230ustar00rootroot00000000000000/* * compile with: * * g++ -g -Wall embed.cpp `pkg-config vips-cpp --cflags --libs` * */ #define DEBUG #include using namespace vips; int main(int argc, char **argv) { if (vips_init(argv[0])) vips_error_exit(NULL); VImage in = VImage::new_from_file(argv[1], VImage::option()->set("access", "sequential")); VImage out = in.embed(10, 10, 1000, 1000, VImage::option()->set("extend", "copy")); out.write_to_file(argv[2]); vips_shutdown(); return 0; } libvips-8.15.1/cplusplus/examples/invert.cpp000066400000000000000000000011621454007373500211510ustar00rootroot00000000000000/* * compile with: * * g++ -g -Wall invert.cpp `pkg-config vips-cpp --cflags --libs` * */ #define DEBUG #include using namespace vips; int main(int argc, char **argv) { if (vips_init(argv[0])) vips_error_exit(NULL); printf("these should match if VImage is compile-time-only\n"); printf("sizeof(VipsImage *) = %zd\n", sizeof(VipsImage *)); printf("sizeof(VImage) = %zd\n", sizeof(VImage)); VImage in = VImage::new_from_file(argv[1], VImage::option()->set("access", VIPS_ACCESS_SEQUENTIAL)); VImage out; out = in.invert(); out.write_to_file(argv[2]); vips_shutdown(); return 0; } libvips-8.15.1/cplusplus/examples/profile.cpp000066400000000000000000000006641454007373500213100ustar00rootroot00000000000000/* * compile with: * * g++ -g -Wall profile.cpp `pkg-config vips-cpp --cflags --libs` * */ #define DEBUG #include using namespace vips; int main(int argc, char **argv) { if (vips_init(argv[0])) vips_error_exit(NULL); VImage in = VImage::new_from_file(argv[1]); VImage rows; VImage cols = in.profile(&rows); rows.write_to_file(argv[2]); cols.write_to_file(argv[3]); vips_shutdown(); return 0; } libvips-8.15.1/cplusplus/examples/resize.cpp000066400000000000000000000010631454007373500211430ustar00rootroot00000000000000/* compile with: * * g++ -g -Wall resize.cpp `pkg-config vips-cpp --cflags --libs` */ #include using namespace vips; int main(int argc, char **argv) { if (VIPS_INIT(argv[0])) vips_error_exit(NULL); if (argc != 3) vips_error_exit("usage: %s infile outfile", argv[0]); VImage in = VImage::new_from_file(argv[1], VImage::option() ->set("access", "sequential")); VImage out = in.resize(0.2, VImage::option() ->set("kernel", "cubic") ->set("vscale", 0.2)); out.write_to_file(argv[2]); vips_shutdown(); return 0; } libvips-8.15.1/cplusplus/examples/test.cpp000066400000000000000000000210571454007373500206260ustar00rootroot00000000000000/* Test the C++ API. * * This isn't a full test suite, look in the Python area for that. This is * just supposed to check that the C++ binding is working. * * compile with: * * g++ -g -Wall test.cpp `pkg-config vips-cpp --cflags --libs` * * run with: * * VIPS_LEAK=1 ./a.out ~/pics/k2.jpg ~/pics/shark.jpg * valgrind --leak-check=yes ./a.out ~/pics/k2.jpg ~/pics/shark.jpg * rm x.tif * */ /* #define VIPS_DEBUG #define VIPS_DEBUG_VERBOSE */ #include #include using namespace vips; bool equal_vector(std::vector a, std::vector b) { for (unsigned int i = 0; i < a.size(); i++) if (fabs(a[i] - b[i]) > 0.001) { printf("vectors differ at %u: should be [", i); for (unsigned int i = 0; i < a.size(); i++) { if (i > 0) printf(", "); printf("%g", a[i]); } printf("], is ["); for (unsigned int i = 0; i < a.size(); i++) { if (i > 0) printf(", "); printf("%g", a[i]); } printf("]\n"); return false; } return true; } bool equal_double(double a, double b) { if (fabs(a - b) > 0.001) { printf("doubles differ: should be %g, is %g\n", a, b); return false; } return true; } /* We can't do this with a template, I think we'd need partially-parameterised * template, which is C++11 only. */ /* Only test a few points and only test uchar: we are just testing the C++ * overloads, we rely on the python test suite for testing the underlying * vips operators. */ #define TEST_BINARY(OPERATOR) \ void \ test_binary_##OPERATOR(VImage left, VImage right) \ { \ for (int x = 10; x < 30; x += 10) { \ std::vector p_left = left.getpoint(x, x); \ std::vector p_right = right.getpoint(x, x); \ std::vector p_result = \ OPERATOR, \ std::vector, \ std::vector >(p_left, p_right); \ \ VImage im_result; \ std::vector p_im_result; \ \ /* test: image = image OP image \ */ \ im_result = OPERATOR(left, right); \ p_im_result = im_result.getpoint(x, x); \ \ if (!equal_vector(p_result, p_im_result)) { \ printf(#OPERATOR \ "(VImage, VImage) failed at (%d, %d)\n", \ x, x); \ abort(); \ } \ \ /* test: image = image OP vec \ */ \ im_result = \ OPERATOR >(left, p_right); \ p_im_result = im_result.getpoint(x, x); \ \ if (!equal_vector(p_result, p_im_result)) { \ printf(#OPERATOR \ "(VImage, vector) failed at (%d, %d)\n", \ x, x); \ abort(); \ } \ \ /* test: image = vec OP image \ */ \ im_result = \ OPERATOR, \ VImage>(p_left, right); \ p_im_result = im_result.getpoint(x, x); \ \ if (!equal_vector(p_result, p_im_result)) { \ printf(#OPERATOR \ "(vector, VImage) failed at (%d, %d)\n", \ x, x); \ abort(); \ } \ \ /* test: image = image OP double \ */ \ for (unsigned int i = 0; i < p_right.size(); i++) { \ im_result = \ OPERATOR(left, p_right[i]); \ p_im_result = im_result.getpoint(x, x); \ \ if (!equal_double(p_result[i], p_im_result[i])) { \ printf(#OPERATOR \ "(VImage, double) failed at " \ "(%d, %d)\n", \ x, x); \ abort(); \ } \ } \ \ /* test: image = double OP image \ */ \ for (unsigned int i = 0; i < p_left.size(); i++) { \ im_result = \ OPERATOR(p_left[i], right); \ p_im_result = im_result.getpoint(x, x); \ \ if (!equal_double(p_result[i], p_im_result[i])) { \ printf(#OPERATOR \ "(double, VImage) failed at " \ "(%d, %d)\n", \ x, x); \ abort(); \ } \ } \ } \ } // eg. double = double + double // or image = double + image template A test_add(B left, C right) { return left + right; } template std::vector operator+(std::vector &v1, const std::vector &v2) { std::vector result(v1.size()); for (unsigned int i = 0; i < v1.size(); i++) result[i] = v1[i] + v2[i]; return result; } TEST_BINARY(test_add); template A test_subtract(B left, C right) { return left - right; } template std::vector operator-(std::vector &v1, const std::vector &v2) { std::vector result(v1.size()); for (unsigned int i = 0; i < v1.size(); i++) result[i] = v1[i] - v2[i]; return result; } TEST_BINARY(test_subtract); template A test_multiply(B left, C right) { return left * right; } template std::vector operator*(std::vector &v1, const std::vector &v2) { std::vector result(v1.size()); for (unsigned int i = 0; i < v1.size(); i++) result[i] = v1[i] * v2[i]; return result; } TEST_BINARY(test_multiply); template A test_divide(B left, C right) { return left / right; } template std::vector operator/(std::vector &v1, const std::vector &v2) { std::vector result(v1.size()); for (unsigned int i = 0; i < v1.size(); i++) result[i] = v1[i] / v2[i]; return result; } TEST_BINARY(test_divide); int main(int argc, char **argv) { if (VIPS_INIT(argv[0])) vips_error_exit(NULL); VImage left = VImage::new_from_file(argv[1]); VImage right = VImage::new_from_file(argv[2]); { printf("testing constant args ...\n"); double a[] = { 1.0, 2.0, 3.0 }; double b[] = { 4.0, 5.0, 6.0 }; std::vector avec(a, a + VIPS_NUMBER(a)); std::vector bvec(b, b + VIPS_NUMBER(b)); VImage out = left.linear(avec, bvec); out.write_to_file("x.tif"); } { printf("testing operator overloads ...\n"); test_binary_test_add(left, right); test_binary_test_subtract(left, right); test_binary_test_multiply(left, right); test_binary_test_divide(left, right); VImage band_one = left[1]; std::vector point = left(0, 0); } { // write to a formatted memory buffer printf("testing formatted memory write ...\n"); size_t size; void *buf; left.write_to_buffer(".png", &buf, &size); printf("written to memory %p in png format, %zu bytes\n", buf, size); // load from the formatted memory area VImage im = VImage::new_from_buffer(buf, size, ""); printf("loaded from memory, %d x %d pixel image\n", im.width(), im.height()); // write back to a file im.write_to_file("x.tif"); printf("written back to x.tif\n"); g_free(buf); } { // write to a formatted AVIF memory buffer printf("testing formatted AVIF memory write ...\n"); if (vips_type_find("VipsOperation", "avifsave_target") != 0) { size_t size; void *buf; // speed-up test by setting @effort to 0 left.write_to_buffer(".avif", &buf, &size, VImage::option()->set("effort", 0)); printf("written to memory %p in AVIF format, %zu bytes\n", buf, size); // load from the formatted memory area VImage im = VImage::new_from_buffer(buf, size, ""); printf("loaded from memory, %d x %d pixel %s image\n", im.width(), im.height(), im.get_string("heif-compression")); g_free(buf); } else { printf("skipped, not compiled against libheif\n"); } } { // write to a vanilla memory buffer printf("testing memory array write ...\n"); size_t size; void *buf; buf = left.write_to_memory(&size); printf("written to memory %p as an array, %zu bytes\n", buf, size); // load from the memory array VImage im = VImage::new_from_memory(buf, size, left.width(), left.height(), left.bands(), left.format()); printf("loaded from memory array, %d x %d pixel image\n", im.width(), im.height()); // write back to a file im.write_to_file("x.tif"); printf("written back to x.tif\n"); g_free(buf); } { printf("testing double return from operation ...\n"); double avg = left.avg(); printf("left.avg() = %g\n", avg); } { printf("testing optional enum args ...\n"); VImage out = left.embed(10, 10, 1000, 1000, VImage::option()->set("extend", "copy")); out.write_to_file("x.tif"); } { printf("testing multiple image return ...\n"); VImage rows; VImage cols = left.profile(&rows); rows.write_to_file("x.tif"); cols.write_to_file("x.tif"); } { printf("testing interpolators ...\n"); VInterpolate interp = VInterpolate::new_from_name("nohalo"); VImage out; out = left.resize(0.2, VImage::option()->set("interpolate", interp)); out.write_to_file("x.tif"); } { printf("testing new_from_image() ...\n"); VImage out = left.new_from_image(128); out.write_to_file("x.tif"); } printf("all tests passed\n"); return 0; } libvips-8.15.1/cplusplus/examples/test_overloads.cpp000066400000000000000000000211541454007373500227020ustar00rootroot00000000000000/* Test +/-* overloads with every combination of vector, image and double. * This isn't a full test suite, look in the Python area for that. * * compile with: * * g++ -g -Wall test_overloads.cpp `pkg-config vips-cpp --cflags --libs` * * run with: * * valgrind --leak-check=yes ./a.out ~/pics/k2.jpg ~/pics/shark.jpg * */ /* #define VIPS_DEBUG #define VIPS_DEBUG_VERBOSE */ #include #include using namespace vips; bool equal_vector(std::vector a, std::vector b) { for (unsigned int i = 0; i < a.size(); i++) if (fabs(a[i] - b[i]) > 0.001) { printf("vectors differ at %u: should be [", i); for (unsigned int i = 0; i < a.size(); i++) { if (i > 0) printf(", "); printf("%g", a[i]); } printf("], is ["); for (unsigned int i = 0; i < a.size(); i++) { if (i > 0) printf(", "); printf("%g", a[i]); } printf("]\n"); return false; } return true; } bool equal_double(double a, double b) { if (fabs(a - b) > 0.001) { printf("doubles differ: should be %g, is %g\n", a, b); return false; } return true; } /* We can't do this with a template, I think we'd need partially-parameterised * template, which is C++11 only. */ /* Only test a few points and only test uchar: we are just testing the C++ * overloads, we rely on the python test suite for testing the underlying * vips operators. */ #define TEST_BINARY(OPERATOR) \ void \ test_binary_##OPERATOR(VImage left, VImage right) \ { \ for (int x = 10; x < 30; x += 10) { \ std::vector p_left = left.getpoint(x, x); \ std::vector p_right = right.getpoint(x, x); \ std::vector p_result = \ OPERATOR, \ std::vector, \ std::vector >(p_left, p_right); \ \ VImage im_result; \ std::vector p_im_result; \ \ /* test: image = image OP image \ */ \ im_result = OPERATOR(left, right); \ p_im_result = im_result.getpoint(x, x); \ \ if (!equal_vector(p_result, p_im_result)) { \ printf(#OPERATOR \ "(VImage, VImage) failed at (%d, %d)\n", \ x, x); \ abort(); \ } \ \ /* test: image = image OP vec \ */ \ im_result = \ OPERATOR >(left, p_right); \ p_im_result = im_result.getpoint(x, x); \ \ if (!equal_vector(p_result, p_im_result)) { \ printf(#OPERATOR \ "(VImage, vector) failed at (%d, %d)\n", \ x, x); \ abort(); \ } \ \ /* test: image = vec OP image \ */ \ im_result = \ OPERATOR, \ VImage>(p_left, right); \ p_im_result = im_result.getpoint(x, x); \ \ if (!equal_vector(p_result, p_im_result)) { \ printf(#OPERATOR \ "(vector, VImage) failed at (%d, %d)\n", \ x, x); \ abort(); \ } \ \ /* test: image = image OP double \ */ \ for (unsigned int i = 0; i < p_right.size(); i++) { \ im_result = \ OPERATOR(left, p_right[i]); \ p_im_result = im_result.getpoint(x, x); \ \ if (!equal_double(p_result[i], p_im_result[i])) { \ printf(#OPERATOR \ "(VImage, double) failed at " \ "(%d, %d)\n", \ x, x); \ abort(); \ } \ } \ \ /* test: image = double OP image \ */ \ for (unsigned int i = 0; i < p_left.size(); i++) { \ im_result = \ OPERATOR(p_left[i], right); \ p_im_result = im_result.getpoint(x, x); \ \ if (!equal_double(p_result[i], p_im_result[i])) { \ printf(#OPERATOR \ "(double, VImage) failed at " \ "(%d, %d)\n", \ x, x); \ abort(); \ } \ } \ } \ } // eg. double = double + double // or image = double + image template A test_add(B left, C right) { return left + right; } template std::vector operator+(std::vector &v1, const std::vector &v2) { std::vector result(v1.size()); for (unsigned int i = 0; i < v1.size(); i++) result[i] = v1[i] + v2[i]; return result; } TEST_BINARY(test_add); template A test_subtract(B left, C right) { return left - right; } template std::vector operator-(std::vector &v1, const std::vector &v2) { std::vector result(v1.size()); for (unsigned int i = 0; i < v1.size(); i++) result[i] = v1[i] - v2[i]; return result; } TEST_BINARY(test_subtract); template A test_multiply(B left, C right) { return left * right; } template std::vector operator*(std::vector &v1, const std::vector &v2) { std::vector result(v1.size()); for (unsigned int i = 0; i < v1.size(); i++) result[i] = v1[i] * v2[i]; return result; } TEST_BINARY(test_multiply); template A test_divide(B left, C right) { return left / right; } template std::vector operator/(std::vector &v1, const std::vector &v2) { std::vector result(v1.size()); for (unsigned int i = 0; i < v1.size(); i++) result[i] = v1[i] / v2[i]; return result; } TEST_BINARY(test_divide); /* We can't test remainder easily, vips does not support constant % image. */ /* We'd need an int version to test the bool operators, C++ does not like * double & double. */ /* Only test a few points and only test uchar: we are just testing the C++ * overloads, we rely on the python test suite for testing the underlying * vips operators. */ #define TEST_ASSIGNMENT(OPERATOR) \ void \ test_assignment_##OPERATOR(VImage left, VImage right) \ { \ for (int x = 10; x < 30; x += 10) { \ std::vector p_left = left.getpoint(x, x); \ std::vector p_right = right.getpoint(x, x); \ std::vector p_result = p_left; \ OPERATOR, \ std::vector >(p_result, p_right); \ \ /* test: image OP= image \ */ \ VImage im_result = left; \ OPERATOR(im_result, right); \ std::vector p_im_result = im_result.getpoint(x, x); \ \ if (!equal_vector(p_result, p_im_result)) { \ printf(#OPERATOR \ "(VImage, VImage) failed at (%d, %d)\n", \ x, x); \ abort(); \ } \ \ /* test: image OP= vec \ */ \ im_result = left; \ OPERATOR >(im_result, p_right); \ p_im_result = im_result.getpoint(x, x); \ \ if (!equal_vector(p_result, p_im_result)) { \ printf(#OPERATOR \ "(VImage, vector) failed at (%d, %d)\n", \ x, x); \ abort(); \ } \ \ /* test: image OP= double \ */ \ for (unsigned int i = 0; i < p_left.size(); i++) { \ im_result = left; \ OPERATOR(im_result, p_right[i]); \ p_im_result = im_result.getpoint(x, x); \ \ if (!equal_double(p_result[i], p_im_result[i])) { \ printf(#OPERATOR \ "(VImage, double) failed at " \ "(%d, %d)\n", \ x, x); \ abort(); \ } \ } \ } \ } template std::vector & operator+=(std::vector &a, std::vector b) { a = a + b; return a; } template void test_plusequals(A &left, B right) { left += right; } TEST_ASSIGNMENT(test_plusequals); template std::vector & operator-=(std::vector &a, std::vector b) { a = a - b; return a; } template void test_minusequals(A &left, B right) { left -= right; } TEST_ASSIGNMENT(test_minusequals); template std::vector & operator*=(std::vector &a, std::vector b) { a = a * b; return a; } template void test_timesequals(A &left, B right) { left *= right; } TEST_ASSIGNMENT(test_timesequals); template std::vector & operator/=(std::vector &a, std::vector b) { a = a / b; return a; } template void test_divideequals(A &left, B right) { left /= right; } TEST_ASSIGNMENT(test_divideequals); /* We can't test remainder easily, vips does not support constant % image. */ /* We'd need an int version to test the bool operators. */ int main(int argc, char **argv) { if (VIPS_INIT(argv[0])) vips_error_exit(NULL); VImage left = VImage::new_from_file(argv[1]); VImage right = VImage::new_from_file(argv[2]); VImage band_one = left[1]; std::vector point = left(0, 0); test_binary_test_add(left, right); test_binary_test_subtract(left, right); test_binary_test_multiply(left, right); test_binary_test_divide(left, right); test_assignment_test_plusequals(left, right); test_assignment_test_minusequals(left, right); test_assignment_test_timesequals(left, right); test_assignment_test_divideequals(left, right); vips_shutdown(); return 0; } libvips-8.15.1/cplusplus/gen-operators.py000077500000000000000000000172241454007373500204700ustar00rootroot00000000000000#!/usr/bin/python3 # This file generates the member definitions and declarations for all vips # operators. # this needs pyvips # # pip install --user pyvips # Sample member declaration: # VImage invert(VOption *options = nullptr) const; # Sample member definition: # VImage # VImage::invert(VOption *options) const # { # VImage out; # # call("invert", (options ? options : VImage::option()) # ->set("in", *this) # ->set("out", &out)); # # return out; # } import argparse from pyvips import Introspect, Operation, GValue, Error, \ ffi, gobject_lib, type_map, type_from_name, nickname_find, type_name # turn a GType into a C++ type gtype_to_cpp = { GValue.gbool_type: 'bool', GValue.gint_type: 'int', GValue.gdouble_type: 'double', GValue.gstr_type: 'const char *', GValue.refstr_type: 'char *', GValue.image_type: 'VImage', GValue.source_type: 'VSource', GValue.target_type: 'VTarget', GValue.guint64_type: 'guint64', type_from_name('VipsInterpolate'): 'VInterpolate', GValue.array_int_type: 'std::vector', GValue.array_double_type: 'std::vector', GValue.array_image_type: 'std::vector', GValue.blob_type: 'VipsBlob *' } cplusplus_suffixes = ('*', '&') cplusplus_keywords = ('case', 'switch') # values for VipsArgumentFlags _REQUIRED = 1 _INPUT = 16 _OUTPUT = 32 _DEPRECATED = 64 _MODIFY = 128 # for VipsOperationFlags _OPERATION_DEPRECATED = 8 def get_cpp_type(gtype): """Map a gtype to the C++ type name we use to represent it. """ if gtype in gtype_to_cpp: return gtype_to_cpp[gtype] fundamental = gobject_lib.g_type_fundamental(gtype) # enum/flag params use the C name as their name if fundamental == GValue.genum_type or fundamental == GValue.gflags_type: return type_name(gtype) if fundamental in gtype_to_cpp: return gtype_to_cpp[fundamental] return '' # swap any '-' for '_' def cppize(name): return name.replace('-', '_') def generate_operation(operation_name, declaration_only=False, indent=''): intro = Introspect.get(operation_name) required_output = [name for name in intro.required_output if name != intro.member_x] # We are only interested in non-deprecated arguments optional_input = [name for name in intro.optional_input if intro.details[name]['flags'] & _DEPRECATED == 0] has_output = len(required_output) >= 1 # Add a C++ style comment block with some additional markings (@param, # @return) if declaration_only: result = f'\n{indent}/**' result += f'\n{indent} * {intro.description.capitalize()}.' if len(optional_input) > 0: result += f'\n{indent} *' result += f'\n{indent} * **Optional parameters**' for name in optional_input: details = intro.details[name] result += f'\n{indent} * - **{cppize(name)}** -- ' result += f'{details["blurb"]}, ' result += f'{get_cpp_type(details["type"])}.' result += f'\n{indent} *' for name in intro.method_args: details = intro.details[name] result += f'\n{indent} * @param {cppize(name)} {details["blurb"]}.' if has_output: # skip the first element for name in required_output[1:]: details = intro.details[name] result += f'\n{indent} * @param {cppize(name)} {details["blurb"]}.' result += f'\n{indent} * @param options Set of options.' if has_output: details = intro.details[required_output[0]] result += f'\n{indent} * @return {details["blurb"]}.' result += f'\n{indent} */\n' else: result = '\n' if intro.member_x is None and declaration_only: result += f'{indent}static ' else: result += indent if has_output: # the first output arg will be used as the result cpp_type = get_cpp_type(intro.details[required_output[0]]['type']) result += f'{cpp_type}' else: cpp_type = 'void' result += cpp_type if declaration_only: result += '' if cpp_type.endswith(cplusplus_suffixes) else ' ' else: result += '\nVImage::' cplusplus_operation = operation_name if operation_name in cplusplus_keywords: cplusplus_operation += '_image' result += f'{cplusplus_operation}(' for name in intro.method_args: details = intro.details[name] gtype = details['type'] cpp_type = get_cpp_type(gtype) spacing = '' if cpp_type.endswith(cplusplus_suffixes) else ' ' result += f'{cpp_type}{spacing}{cppize(name)}, ' # output params are passed by reference if has_output: # skip the first element for name in required_output[1:]: details = intro.details[name] gtype = details['type'] cpp_type = get_cpp_type(gtype) spacing = '' if cpp_type.endswith(cplusplus_suffixes) else ' ' result += f'{cpp_type}{spacing}*{cppize(name)}, ' result += f'VOption *options{" = nullptr" if declaration_only else ""})' # if no 'this' available, it's a class method and they are all const if intro.member_x is not None: result += ' const' if declaration_only: result += ';' return result result += '\n{\n' if has_output: # the first output arg will be used as the result name = required_output[0] cpp_type = get_cpp_type(intro.details[name]['type']) spacing = '' if cpp_type.endswith(cplusplus_suffixes) else ' ' result += f'\t{cpp_type}{spacing}{cppize(name)};\n\n' result += f'\tcall("{operation_name}", (options ? options : VImage::option())' if intro.member_x is not None: result += f'\n\t\t\t->set("{intro.member_x}", *this)' all_required = intro.method_args if has_output: # first element needs to be passed by reference arg = cppize(required_output[0]) result += f'\n\t\t\t->set("{required_output[0]}", &{arg})' # append the remaining list all_required += required_output[1:] for name in all_required: arg = cppize(name) result += f'\n\t\t\t->set("{name}", {arg})' result += ');\n' if has_output: result += f'\n' result += f'\treturn {required_output[0]};\n' result += '}' return result def generate_operators(declarations_only=False): all_nicknames = [] def add_nickname(gtype, a, b): nickname = nickname_find(gtype) try: # can fail for abstract types intro = Introspect.get(nickname) # we are only interested in non-deprecated operations if (intro.flags & _OPERATION_DEPRECATED) == 0: all_nicknames.append(nickname) except Error: pass type_map(gtype, add_nickname) return ffi.NULL type_map(type_from_name('VipsOperation'), add_nickname) # add 'missing' synonyms by hand all_nicknames.append('crop') # make list unique and sort all_nicknames = list(set(all_nicknames)) all_nicknames.sort() for nickname in all_nicknames: print(generate_operation(nickname, declarations_only, '\t' if declarations_only else '')) parser = argparse.ArgumentParser(description='C++ binding generator') parser.add_argument('--gen', '-g', default='cpp', choices=['h', 'cpp'], help='File to generate: h (headers) or cpp ' + \ '(implementations) (default: %(default)s)') if __name__ == '__main__': args = parser.parse_args() generate_operators(args.gen == 'h') libvips-8.15.1/cplusplus/include/000077500000000000000000000000001454007373500167435ustar00rootroot00000000000000libvips-8.15.1/cplusplus/include/vips/000077500000000000000000000000001454007373500177245ustar00rootroot00000000000000libvips-8.15.1/cplusplus/include/vips/VConnection8.h000066400000000000000000000064561454007373500224250ustar00rootroot00000000000000// VIPS connection wrapper /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_VCONNECTION_H #define VIPS_VCONNECTION_H #include VIPS_NAMESPACE_START /** * A generic source object. These supply a stream of bytes that loaders can * use to fetch image files, see VImage::new_from_source(). * * Methods let you can connect a source up to memory, a file or * a file descriptor. Use vips::VSourceCustom to implement custom sources * using GObject signals. */ class VSource : public VObject { public: /** * Wrap a VSource around an underlying VipsSource object. */ explicit VSource(VipsSource *input, VSteal steal = STEAL) : VObject((VipsObject *) input, steal) { } /** * Make a new VSource from a file descriptor. */ static VSource new_from_descriptor(int descriptor); /** * Make a new VSource from a file on disc. */ static VSource new_from_file(const char *filename); /** * Make a new VSource from a binary object. */ static VSource new_from_blob(VipsBlob *blob); /** * Make a new VSource from an area of memory. */ static VSource new_from_memory(const void *data, size_t size); /** * Make a new VSource from a set of options encoded as a string. See * vips_source_new(). */ static VSource new_from_options(const char *options); /** * Get a pointer to the underlying VipsSoure object. */ VipsSource * get_source() const { return (VipsSource *) VObject::get_object(); } }; /** * A generic target object. Savers can use these to write a stream of bytes * somewhere, see VImage::write_to_target(). * * Methods let you can connect a target up to memory, a file or * a file descriptor. Use vips::VTargetCustom to implement custom targets * using GObject signals. */ class VTarget : public VObject { public: /** * Wrap a VTarget around an underlying VipsTarget object. */ explicit VTarget(VipsTarget *output, VSteal steal = STEAL) : VObject((VipsObject *) output, steal) { } /** * Make a new VTarget which, when written to, will write to a file * descriptor. */ static VTarget new_to_descriptor(int descriptor); /** * Make a new VTarget which, when written to, will write to a file. */ static VTarget new_to_file(const char *filename); /** * Make a new VTarget which, when written to, will write to a file * descriptor. */ static VTarget new_to_memory(); /** * Get a pointer to the underlying VipsTarget object. */ VipsTarget * get_target() const { return (VipsTarget *) VObject::get_object(); } }; VIPS_NAMESPACE_END #endif /*VIPS_VCONNECTION_H*/ libvips-8.15.1/cplusplus/include/vips/VError8.h000066400000000000000000000033621454007373500214100ustar00rootroot00000000000000// Header for error type /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_VERROR_H #define VIPS_VERROR_H #include #include #include #include VIPS_NAMESPACE_START /** * The libvips error class. It holds a single string containing an * internationalized error message in utf-8 encoding. */ class VIPS_CPLUSPLUS_API VError : public std::exception { std::string _what; public: /** * Construct a VError, setting the error message. */ VError(const std::string &what) : _what(what) {} /** * Construct a VError, fetching the error message from the libvips * error buffer. */ VError() : _what(vips_error_buffer()) {} virtual ~VError() throw() {} /** * Get a reference to the underlying C string. */ virtual const char * what() const throw() { return _what.c_str(); } /** * Print the error message to a stream. */ void ostream_print(std::ostream &) const; }; VIPS_NAMESPACE_END #endif /*VIPS_VERROR_H*/ libvips-8.15.1/cplusplus/include/vips/VImage8.h000066400000000000000000005761121454007373500213510ustar00rootroot00000000000000// VIPS image wrapper /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_VIMAGE_H #define VIPS_VIMAGE_H #include #include #include #include #include VIPS_NAMESPACE_START /* Small utility things. */ VIPS_CPLUSPLUS_API std::vector to_vectorv(int n, ...); VIPS_CPLUSPLUS_API std::vector to_vector(double value); VIPS_CPLUSPLUS_API std::vector to_vector(int n, double array[]); VIPS_CPLUSPLUS_API std::vector negate(std::vector value); VIPS_CPLUSPLUS_API std::vector invert(std::vector value); /** * Whether or not VObject should take over the reference that you pass in. See * VObject(). */ enum VSteal { NOSTEAL = 0, STEAL = 1 }; /** * A smart VipsObject pointer. It calls g_object_ref()/_unref() for you * automatically. * * VObjects can be null (have no value set). See is_null(). */ class VObject { private: // can be NULL, see eg. VObject() VipsObject *vobject; public: /** * Wrap a VObject around the underlying VipsObject pointer. * * If steal is STEAL, then the new VObject takes over the reference * that you pass in. */ explicit VObject(VipsObject *new_vobject, VSteal steal = STEAL) : vobject(new_vobject) { // we allow NULL init, eg. "VImage a;" g_assert(!new_vobject || VIPS_IS_OBJECT(new_vobject)); #ifdef VIPS_DEBUG_VERBOSE printf("VObject constructor, obj = %p, steal = %d\n", new_vobject, steal); if (new_vobject) { printf(" obj "); vips_object_print_name(VIPS_OBJECT(new_vobject)); printf("\n"); } #endif /*VIPS_DEBUG_VERBOSE*/ if (!steal && vobject) { #ifdef VIPS_DEBUG_VERBOSE printf(" reffing object\n"); #endif /*VIPS_DEBUG_VERBOSE*/ g_object_ref(vobject); } } VObject() : vobject(nullptr) { } VObject(const VObject &a) : vobject(a.vobject) { g_assert(!vobject || VIPS_IS_OBJECT(vobject)); #ifdef VIPS_DEBUG_VERBOSE printf("VObject copy constructor, obj = %p\n", vobject); printf(" reffing object\n"); #endif /*VIPS_DEBUG_VERBOSE*/ if (vobject) g_object_ref(vobject); } // assignment ... we must delete the old ref VObject & operator=(const VObject &a) { #ifdef VIPS_DEBUG_VERBOSE printf("VObject assignment\n"); printf(" reffing %p\n", a.vobject); printf(" unreffing %p\n", vobject); #endif /*VIPS_DEBUG_VERBOSE*/ g_assert(!vobject || VIPS_IS_OBJECT(vobject)); g_assert(!a.vobject || VIPS_IS_OBJECT(a.vobject)); // delete the old ref at the end ... otherwise "a = a;" could // unref before reffing again if (a.vobject) g_object_ref(a.vobject); if (vobject) g_object_unref(vobject); vobject = a.vobject; return *this; } // this mustn't be virtual: we want this class to only be a pointer, // no vtable allowed ~VObject() { #ifdef VIPS_DEBUG_VERBOSE printf("VObject destructor\n"); printf(" unreffing %p\n", vobject); #endif /*VIPS_DEBUG_VERBOSE*/ g_assert(!vobject || VIPS_IS_OBJECT(vobject)); if (vobject) g_object_unref(vobject); } /** * Return the underlying VipsObject pointer. This does not make a new * reference -- you'll need to g_object_ref() the result if you want * to keep it. */ VipsObject * get_object() const { g_assert(!vobject || VIPS_IS_OBJECT(vobject)); return vobject; } /** * TRUE if this is a null VObject. */ bool is_null() const { return vobject == nullptr; } }; class VIPS_CPLUSPLUS_API VImage; class VIPS_CPLUSPLUS_API VInterpolate; class VIPS_CPLUSPLUS_API VRegion; class VIPS_CPLUSPLUS_API VSource; class VIPS_CPLUSPLUS_API VTarget; class VIPS_CPLUSPLUS_API VOption; /** * A list of name-value pairs. Pass these to libvips operations to set * options. For example: * * VImage out = in.embed(10, 10, 1000, 1000, VImage::option() * ->set("extend", "background") * ->set("background", 128)); * * The `set` member functions will take copies (or hold references to) * compound objects, so you can free them immediately afterwards if necessary. * * You can get values back from operations by using the * form of the set * member functions. For example: * * VImage in = VImage::new_from_file(argv[1]); * int x, y; * double value = in.max(VImage::option() * ->set("x", &x) * ->set("y", &y)); * */ class VOption { private: struct Pair { const char *name; // the thing we pass to and from our caller GValue value; // an input or output parameter ... we guess the direction // from the arg to set() bool input; // the pointer we write output values to union { bool *vbool; int *vint; double *vdouble; VImage *vimage; std::vector *vvector; VipsBlob **vblob; }; explicit Pair(const char *name) : name(name), value(G_VALUE_INIT), input(false), vimage(nullptr) { } ~Pair() { g_value_unset(&value); } }; std::list options; public: VOption() = default; virtual ~VOption(); /** * Set an input boolean option. */ VOption * set(const char *name, bool value); /** * Set an input int option. This is used for enums as well, or you can * use the string version. */ VOption * set(const char *name, int value); /** * Set an input unsigned 64-bit integer option. */ VOption * set(const char *name, guint64 value); /** * Set an input double option. */ VOption * set(const char *name, double value); /** * Set an input string option. * * A copy is taken of the object. */ VOption * set(const char *name, const char *value); /** * Set a libvips object as an option. These can be images, sources, * targets, etc. * * A copy is taken of the object. */ VOption * set(const char *name, const VObject value); /** * Set an array of integers as an input option. * * A copy is taken of the object. */ VOption * set(const char *name, std::vector value); /** * Set an array of doubles as an input option. * * A copy is taken of the object. */ VOption * set(const char *name, std::vector value); /** * Set an array of images as an input option. * * A copy is taken of the object. */ VOption * set(const char *name, std::vector value); /** * Set a binary object an input option. Use vips_blob_new() to make * blobs. * * A copy is taken of the object. */ VOption * set(const char *name, VipsBlob *value); /** * Set an option which will return a bool value. */ VOption * set(const char *name, bool *value); /** * Set an option which will return an integer value. */ VOption * set(const char *name, int *value); /** * Set an option which will return a double value. */ VOption * set(const char *name, double *value); /** * Set an option which will return a reference to an image. */ VOption * set(const char *name, VImage *value); /** * Set an option which will return an array of doubles. */ VOption * set(const char *name, std::vector *value); /** * Set an option which will return a binary object, such as an ICC * profile. */ VOption * set(const char *name, VipsBlob **blob); /** * Walk the set of options, setting options on the operation. This is * used internally by VImage::call(). */ void set_operation(VipsOperation *operation); /** * Walk the set of options, fetching any output values. This is used * internally by VImage::call(). */ void get_operation(VipsOperation *operation); }; /** * An image object. * * Image processing operations on images are member functions of VImage. For * example: * * VImage in = VImage::new_from_file(argv[1], VImage::option() * ->set("access", "sequential")); * VImage out = in.embed(10, 10, 1000, 1000, VImage::option() * ->set("extend", "copy")); * out.write_to_file(argv[2]); * * VImage objects are smart pointers over the underlying VipsImage objects. * They manage the complications of GLib's ref and unref system for you. */ class VImage : public VObject { public: using VObject::is_null; /** * Wrap a VImage around an underlying VipsImage object. * * If steal is STEAL, then the VImage will take ownership of the * reference to the VipsImage. */ explicit VImage(VipsImage *image, VSteal steal = STEAL) : VObject((VipsObject *) image, steal) { } /** * An empty (NULL) VImage, eg. "VImage a;" */ VImage() : VObject(nullptr) { } /** * Return the underlying VipsImage reference that this VImage holds. * This does not make a new reference -- you'll need to g_object_ref() * the pointer if you need it to last. */ VipsImage * get_image() const { return (VipsImage *) VObject::get_object(); } /** * Return the width of the image in pixels. */ int width() const { return vips_image_get_width(get_image()); } /** * Return the height of the image in pixels. */ int height() const { return vips_image_get_height(get_image()); } /** * Return the number of image bands. */ int bands() const { return vips_image_get_bands(get_image()); } /** * Return the image format, for example VIPS_FORMAT_UCHAR. */ VipsBandFormat format() const { return vips_image_get_format(get_image()); } /** * Return the image coding, for example VIPS_CODING_NONE. */ VipsCoding coding() const { return vips_image_get_coding(get_image()); } /** * Return the image interpretation, for example * VIPS_INTERPRETATION_sRGB. */ VipsInterpretation interpretation() const { return vips_image_get_interpretation(get_image()); } /** * Try to guess the image interpretation from other fields. This is * handy if the interpretation has not been set correctly. */ VipsInterpretation guess_interpretation() const { return vips_image_guess_interpretation(get_image()); } /** * The horizontal resolution in pixels per millimeter. */ double xres() const { return vips_image_get_xres(get_image()); } /** * The vertical resolution in pixels per millimeter. */ double yres() const { return vips_image_get_yres(get_image()); } /** * The horizontal offset of the origin in pixels. */ int xoffset() const { return vips_image_get_xoffset(get_image()); } /** * The vertical offset of the origin in pixels. */ int yoffset() const { return vips_image_get_yoffset(get_image()); } /** * TRUE if the image has an alpha channel. */ bool has_alpha() const { return vips_image_hasalpha(get_image()); } /** * The name of the file this image originally came from, or NULL if * it's not a file image. */ const char * filename() const { return vips_image_get_filename(get_image()); } /** * Gets an VImage ready for an in-place operation, such as draw_circle(). * After calling this function you can both read and write the image with * VIPS_IMAGE_ADDR(). * * This method is called for you by the draw operations, * there's no need to call it yourself. * * Since this function modifies the image, it is not thread-safe. Only call it on * images which you are sure have not been shared with another thread. * All in-place operations are inherently not thread-safe, so you need to take * great care in any case. */ void inplace() { if (vips_image_inplace(this->get_image())) throw(VError()); } /** * Arrange for the underlying object to be entirely in memory, then * return a pointer to the first pixel. * * This can take a long time and need a very large amount of RAM. */ const void * data() const { return vips_image_get_data(get_image()); } /** * Set the value of an int metadata item on an image. */ void set(const char *field, int value) { vips_image_set_int(this->get_image(), field, value); } /** * Set the value of an int array metadata item on an image. * * A copy of the array is taken. */ void set(const char *field, int *value, int n) { vips_image_set_array_int(this->get_image(), field, value, n); } /** * Set the value of an int array metadata item on an image. * * A copy of the array is taken. */ void set(const char *field, std::vector value) { vips_image_set_array_int(this->get_image(), field, &value[0], static_cast(value.size())); } /** * Set the value of an double array metadata item on an image. * * A copy of the array is taken. */ void set(const char *field, double *value, int n) { vips_image_set_array_double(this->get_image(), field, value, n); } /** * Set the value of an double array metadata item on an image. * * A copy of the array is taken. */ void set(const char *field, std::vector value) { vips_image_set_array_double(this->get_image(), field, &value[0], static_cast(value.size())); } /** * Set the value of a double metadata item on an image. */ void set(const char *field, double value) { vips_image_set_double(this->get_image(), field, value); } /** * Set the value of a string metadata item on an image. * * A copy of the string is taken. */ void set(const char *field, const char *value) { vips_image_set_string(this->get_image(), field, value); } /** * Set the value of a binary object metadata item on an image, such as * an ICC profile. * * When libvips no longer needs the value, it will be disposed with * the free function. This can be NULL. */ void set(const char *field, VipsCallbackFn free_fn, void *data, size_t length) { vips_image_set_blob(this->get_image(), field, free_fn, data, length); } /** * Return the GType of a metadata item, or 0 if the named item does not * exist. */ GType get_typeof(const char *field) const { return vips_image_get_typeof(this->get_image(), field); } /** * Get the value of a metadata item as an int. * * If the item is not of this type, an exception is thrown. */ int get_int(const char *field) const { int value; if (vips_image_get_int(this->get_image(), field, &value)) throw(VError()); return value; } /** * Get the value of a metadata item as an array of ints. Do not free * the result. * * If the item is not of this type, an exception is thrown. */ void get_array_int(const char *field, int **out, int *n) const { if (vips_image_get_array_int(this->get_image(), field, out, n)) throw(VError()); } /** * Get the value of a metadata item as an array of ints. * * If the item is not of this type, an exception is thrown. */ std::vector get_array_int(const char *field) const { int length; int *array; if (vips_image_get_array_int(this->get_image(), field, &array, &length)) throw(VError()); std::vector vector(array, array + length); return vector; } /** * Get the value of a metadata item as an array of doubles. Do not free * the result. * * If the item is not of this type, an exception is thrown. */ void get_array_double(const char *field, double **out, int *n) const { if (vips_image_get_array_double(this->get_image(), field, out, n)) throw(VError()); } /** * Get the value of a metadata item as an array of doubles. * * If the item is not of this type, an exception is thrown. */ std::vector get_array_double(const char *field) const { int length; double *array; if (vips_image_get_array_double(this->get_image(), field, &array, &length)) throw(VError()); std::vector vector(array, array + length); return vector; } /** * Get the value of a metadata item as a double. * * If the item is not of this type, an exception is thrown. */ double get_double(const char *field) const { double value; if (vips_image_get_double(this->get_image(), field, &value)) throw(VError()); return value; } /** * Get the value of a metadata item as a string. You must not free the * result. * * If the item is not of this type, an exception is thrown. */ const char * get_string(const char *field) const { const char *value; if (vips_image_get_string(this->get_image(), field, &value)) throw(VError()); return value; } /** * Get the value of a metadata item as a binary object. You must not * free the result. * * If the item is not of this type, an exception is thrown. */ const void * get_blob(const char *field, size_t *length) const { const void *value; if (vips_image_get_blob(this->get_image(), field, &value, length)) throw(VError()); return value; } /** * Remove a metadata item. This does nothing if the item does not * exist. */ bool remove(const char *name) const { return vips_image_remove(get_image(), name); } /** * Make a new VOption. Can save some typing. */ static VOption * option() { return new VOption(); } /** * Call any libvips operation, with a set of string-encoded options as * well as VOption. */ static void call_option_string(const char *operation_name, const char *option_string, VOption *options = nullptr); /** * Call any libvips operation. */ static void call(const char *operation_name, VOption *options = nullptr); /** * Make a new image which, when written to, will create a large memory * object. See VImage::write(). */ static VImage new_memory() { return VImage(vips_image_new_memory()); } /** * Make a new VImage which, when written to, will create a temporary * file on disc. See VImage::write(). */ static VImage new_temp_file(const char *file_format = ".v") { VipsImage *image; if (!(image = vips_image_new_temp_file(file_format))) throw(VError()); return VImage(image); } /** * Create a new VImage object from a file on disc. * * The available options depends on the image format. See for example * VImage::jpegload(). */ static VImage new_from_file(const char *name, VOption *options = nullptr); /** * Create a new VImage object from an area of memory containing an * image encoded in some format such as JPEG. * * The available options depends on the image format. See for example * VImage::jpegload(). */ static VImage new_from_buffer(const void *buf, size_t len, const char *option_string, VOption *options = nullptr); /** * Create a new VImage object from an area of memory containing an * image encoded in some format such as JPEG. * * The available options depends on the image format. See for example * VImage::jpegload(). */ static VImage new_from_buffer(const std::string &buf, const char *option_string, VOption *options = nullptr); /** * Create a new VImage object from a generic source object. * * The available options depends on the image format. See for example * VImage::jpegload(). */ static VImage new_from_source(VSource source, const char *option_string, VOption *options = nullptr); /** * Create a new VImage object from an area of memory containing a * C-style array. */ static VImage new_from_memory(void *data, size_t size, int width, int height, int bands, VipsBandFormat format) { VipsImage *image; if (!(image = vips_image_new_from_memory(data, size, width, height, bands, format))) throw(VError()); return VImage(image); } /** * Create a new VImage object from an area of memory containing a * C-style array. * The VImage makes a copy of @data. */ static VImage new_from_memory_copy(void *data, size_t size, int width, int height, int bands, VipsBandFormat format) { VipsImage *image; if (!(image = vips_image_new_from_memory_copy(data, size, width, height, bands, format))) throw(VError()); return VImage(image); } /** * Create a new VImage object from an area of memory containing a * C-style array. * * The VImage steals ownership of @data and will free() it when it * goes out of scope. */ static VImage new_from_memory_steal(void *data, size_t size, int width, int height, int bands, VipsBandFormat format); /** * Create a matrix image of a specified size. All elements will be * zero. */ static VImage new_matrix(int width, int height); /** * Create a matrix image of a specified size, initialized from the * array. */ static VImage new_matrix(int width, int height, double *array, int size) { VipsImage *image; if (!(image = vips_image_new_matrix_from_array(width, height, array, size))) throw(VError()); return VImage(image); } /** * Create a matrix image of a specified size, initialized from the * function parameters. */ static VImage new_matrixv(int width, int height, ...); /** * Make a new image of the same size and type as self, but with each * pixel initialized with the constant. */ VImage new_from_image(std::vector pixel) const { VipsImage *image; if (!(image = vips_image_new_from_image(this->get_image(), &pixel[0], static_cast(pixel.size())))) throw(VError()); return VImage(image); } /** * Make a new image of the same size and type as self, but with each * pixel initialized with the constant. */ VImage new_from_image(double pixel) const { return new_from_image(to_vectorv(1, pixel)); } /** * This operation allocates memory, renders self into it, builds a new * image around the memory area, and returns that. * * If the image is already a simple area of memory, it does nothing. * * Call this before using the draw operations to make sure you have a * memory image that can be modified. * * VImage::copy() adds a null "copy" node to a pipeline. Use that * instead if you want to change metadata and not pixels. */ VImage copy_memory() const { VipsImage *image; if (!(image = vips_image_copy_memory(this->get_image()))) throw(VError()); return VImage(image); } /** * Write self to out. See VImage::new_memory() etc. */ VImage write(VImage out) const; /** * Write an image to a file. * * The available options depends on the file format. See * VImage::jpegsave(), for example. */ void write_to_file(const char *name, VOption *options = nullptr) const; /** * Write an image to an area of memory in the specified format. You * must free() the memory area once you are done with it. * * For example: * * void *buf; * size_t size; * image.write_to_buffer(".jpg", &buf, &size); * * The available options depends on the file format. See * VImage::jpegsave(), for example. */ void write_to_buffer(const char *suffix, void **buf, size_t *size, VOption *options = nullptr) const; /** * Write an image to a generic target object in the specified format. * * The available options depends on the file format. See * VImage::jpegsave(), for example. */ void write_to_target(const char *suffix, VTarget target, VOption *options = nullptr) const; /** * Write an image to an area of memory as a C-style array. */ void * write_to_memory(size_t *size) const { void *result; if (!(result = vips_image_write_to_memory(this->get_image(), size))) throw(VError()); return result; } /** * Acquire an unprepared VRegion. */ VRegion region() const; /** * Acquire VRegion covering the given VipsRect. */ VRegion region(VipsRect *rect) const; /** * Acquire VRegion covering the given coordinates. */ VRegion region(int left, int top, int width, int height) const; /** * Apply a linear transform to an image. For every pixel, * * out = in * a + b */ VImage linear(double a, double b, VOption *options = nullptr) const { return this->linear(to_vector(a), to_vector(b), options); } /** * Apply a linear transform to an image. For every pixel, * * out = in * a + b */ VImage linear(std::vector a, double b, VOption *options = nullptr) const { return this->linear(a, to_vector(b), options); } /** * Apply a linear transform to an image. For every pixel, * * out = in * a + b */ VImage linear(double a, std::vector b, VOption *options = nullptr) const { return this->linear(to_vector(a), b, options); } /** * Split a many-band image into an array of one-band images. */ std::vector bandsplit(VOption *options = nullptr) const; /** * Join two images bandwise. */ VImage bandjoin(VImage other, VOption *options = nullptr) const; /** * Append a band to an image, with each element initialized to the * constant value. */ VImage bandjoin(double other, VOption *options = nullptr) const { return bandjoin(to_vector(other), options); } /** * Append a series of bands to an image, with each element initialized * to the constant values. */ VImage bandjoin(std::vector other, VOption *options = nullptr) const { return bandjoin_const(other, options); } /** * Composite other on top of self using the specified blending mode. */ VImage composite(VImage other, VipsBlendMode mode, VOption *options = nullptr) const; /** * Find the position of the image minimum as (x, y). */ std::complex minpos(VOption *options = nullptr) const; /** * Find the position of the image maximum as (x, y). */ std::complex maxpos(VOption *options = nullptr) const; /** * Flip the image left-right. */ VImage fliphor(VOption *options = nullptr) const { return flip(VIPS_DIRECTION_HORIZONTAL, options); } /** * Flip the image top-bottom. */ VImage flipver(VOption *options = nullptr) const { return flip(VIPS_DIRECTION_VERTICAL, options); } /** * Rotate the image by 90 degrees clockwise. */ VImage rot90(VOption *options = nullptr) const { return rot(VIPS_ANGLE_D90, options); } /** * Rotate the image by 180 degrees. */ VImage rot180(VOption *options = nullptr) const { return rot(VIPS_ANGLE_D180, options); } /** * Rotate the image by 270 degrees clockwise. */ VImage rot270(VOption *options = nullptr) const { return rot(VIPS_ANGLE_D270, options); } /** * Dilate the image with the specified structuring element, see * VImage::new_matrix(). Structuring element values can be 0 for * black, 255 for white and 128 for don't care. See VImage::morph(). */ VImage dilate(VImage mask, VOption *options = nullptr) const { return morph(mask, VIPS_OPERATION_MORPHOLOGY_DILATE, options); } /** * Erode the image with the specified structuring element, see * VImage::new_matrix(). Structuring element values can be 0 for * black, 255 for white and 128 for don't care. See VImage::morph(). */ VImage erode(VImage mask, VOption *options = nullptr) const { return morph(mask, VIPS_OPERATION_MORPHOLOGY_ERODE, options); } /** * A median filter of the specified size. See VImage::rank(). */ VImage median(int size = 3, VOption *options = nullptr) const { return rank(size, size, (size * size) / 2, options); } /** * Convert to integer, rounding down. */ VImage floor(VOption *options = nullptr) const { return round(VIPS_OPERATION_ROUND_FLOOR, options); } /** * Convert to integer, rounding up. */ VImage ceil(VOption *options = nullptr) const { return round(VIPS_OPERATION_ROUND_CEIL, options); } /** * Convert to integer, rounding to nearest. */ VImage rint(VOption *options = nullptr) const { return round(VIPS_OPERATION_ROUND_RINT, options); } /** * AND all bands of an image together to make a one-band image. Useful * with the relational operators, for example: * * VImage mask = (in > 128).bandand() */ VImage bandand(VOption *options = nullptr) const { return bandbool(VIPS_OPERATION_BOOLEAN_AND, options); } /** * OR all bands of an image together to make a one-band image. Useful * with the relational operators, for example: * * VImage mask = (in > 128).bandand() */ VImage bandor(VOption *options = nullptr) const { return bandbool(VIPS_OPERATION_BOOLEAN_OR, options); } /** * EOR all bands of an image together to make a one-band image. Useful * with the relational operators, for example: * * VImage mask = (in > 128).bandand() */ VImage bandeor(VOption *options = nullptr) const { return bandbool(VIPS_OPERATION_BOOLEAN_EOR, options); } /** * Return the real part of a complex image. */ VImage real(VOption *options = nullptr) const { return complexget(VIPS_OPERATION_COMPLEXGET_REAL, options); } /** * Return the imaginary part of a complex image. */ VImage imag(VOption *options = nullptr) const { return complexget(VIPS_OPERATION_COMPLEXGET_IMAG, options); } /** * Convert a complex image to polar coordinates. */ VImage polar(VOption *options = nullptr) const { return complex(VIPS_OPERATION_COMPLEX_POLAR, options); } /** * Convert a complex image to rectangular coordinates. */ VImage rect(VOption *options = nullptr) const { return complex(VIPS_OPERATION_COMPLEX_RECT, options); } /** * Find the complex conjugate. */ VImage conj(VOption *options = nullptr) const { return complex(VIPS_OPERATION_COMPLEX_CONJ, options); } /** * Find the sine of each pixel. Angles are in degrees. */ VImage sin(VOption *options = nullptr) const { return math(VIPS_OPERATION_MATH_SIN, options); } /** * Find the cosine of each pixel. Angles are in degrees. */ VImage cos(VOption *options = nullptr) const { return math(VIPS_OPERATION_MATH_COS, options); } /** * Find the tangent of each pixel. Angles are in degrees. */ VImage tan(VOption *options = nullptr) const { return math(VIPS_OPERATION_MATH_TAN, options); } /** * Find the arc sine of each pixel. Angles are in degrees. */ VImage asin(VOption *options = nullptr) const { return math(VIPS_OPERATION_MATH_ASIN, options); } /** * Find the arc cosine of each pixel. Angles are in degrees. */ VImage acos(VOption *options = nullptr) const { return math(VIPS_OPERATION_MATH_ACOS, options); } /** * Find the arc tangent of each pixel. Angles are in degrees. */ VImage atan(VOption *options = nullptr) const { return math(VIPS_OPERATION_MATH_ATAN, options); } /** * Find the hyperbolic sine of each pixel. Angles are in degrees. */ VImage sinh(VOption *options = nullptr) const { return math(VIPS_OPERATION_MATH_SINH, options); } /** * Find the hyperbolic cosine of each pixel. Angles are in degrees. */ VImage cosh(VOption *options = nullptr) const { return math(VIPS_OPERATION_MATH_COSH, options); } /** * Find the hyperbolic tangent of each pixel. Angles are in degrees. */ VImage tanh(VOption *options = nullptr) const { return math(VIPS_OPERATION_MATH_TANH, options); } /** * Find the hyperbolic arc sine of each pixel. Angles are in radians. */ VImage asinh(VOption *options = nullptr) const { return math(VIPS_OPERATION_MATH_ASINH, options); } /** * Find the hyperbolic arc cosine of each pixel. Angles are in radians. */ VImage acosh(VOption *options = nullptr) const { return math(VIPS_OPERATION_MATH_ACOSH, options); } /** * Find the hyperbolic arc tangent of each pixel. Angles are in radians. */ VImage atanh(VOption *options = nullptr) const { return math(VIPS_OPERATION_MATH_ATANH, options); } /** * Find the natural log of each pixel. */ VImage log(VOption *options = nullptr) const { return math(VIPS_OPERATION_MATH_LOG, options); } /** * Find the base 10 log of each pixel. */ VImage log10(VOption *options = nullptr) const { return math(VIPS_OPERATION_MATH_LOG10, options); } /** * Find e to the power of each pixel. */ VImage exp(VOption *options = nullptr) const { return math(VIPS_OPERATION_MATH_EXP, options); } /** * Find 10 to the power of each pixel. */ VImage exp10(VOption *options = nullptr) const { return math(VIPS_OPERATION_MATH_EXP10, options); } /** * Raise each pixel to the specified power. */ VImage pow(VImage other, VOption *options = nullptr) const { return math2(other, VIPS_OPERATION_MATH2_POW, options); } /** * Raise each pixel to the specified power. */ VImage pow(double other, VOption *options = nullptr) const { return math2_const(VIPS_OPERATION_MATH2_POW, to_vector(other), options); } /** * Raise each pixel to the specified power. */ VImage pow(std::vector other, VOption *options = nullptr) const { return math2_const(VIPS_OPERATION_MATH2_POW, other, options); } /** * Raise other to the power of each pixel (the opposite of pow). */ VImage wop(VImage other, VOption *options = nullptr) const { return math2(other, VIPS_OPERATION_MATH2_WOP, options); } /** * Raise the constant to the power of each pixel (the opposite of pow). */ VImage wop(double other, VOption *options = nullptr) const { return math2_const(VIPS_OPERATION_MATH2_WOP, to_vector(other), options); } /** * Raise the constant to the power of each pixel (the opposite of pow). */ VImage wop(std::vector other, VOption *options = nullptr) const { return math2_const(VIPS_OPERATION_MATH2_WOP, other, options); } /** * Calculate atan2 of each pixel. */ VImage atan2(VImage other, VOption *options = nullptr) const { return math2(other, VIPS_OPERATION_MATH2_ATAN2, options); } /** * Calculate atan2 of each pixel. */ VImage atan2(double other, VOption *options = nullptr) const { return math2_const(VIPS_OPERATION_MATH2_ATAN2, to_vector(other), options); } /** * Calculate atan2 of each pixel. */ VImage atan2(std::vector other, VOption *options = nullptr) const { return math2_const(VIPS_OPERATION_MATH2_ATAN2, other, options); } /** * Use self as a conditional image (not zero meaning TRUE) to pick * pixels from th (then) or el (else). */ VImage ifthenelse(std::vector th, VImage el, VOption *options = nullptr) const { return ifthenelse(el.new_from_image(th), el, options); } /** * Use self as a conditional image (not zero meaning TRUE) to pick * pixels from th (then) or el (else). */ VImage ifthenelse(VImage th, std::vector el, VOption *options = nullptr) const { return ifthenelse(th, th.new_from_image(el), options); } /** * Use self as a conditional image (not zero meaning TRUE) to pick * pixels from th (then) or el (else). */ VImage ifthenelse(std::vector th, std::vector el, VOption *options = nullptr) const { return ifthenelse(new_from_image(th), new_from_image(el), options); } /** * Use self as a conditional image (not zero meaning TRUE) to pick * pixels from th (then) or el (else). */ VImage ifthenelse(double th, VImage el, VOption *options = nullptr) const { return ifthenelse(to_vector(th), el, options); } /** * Use self as a conditional image (not zero meaning TRUE) to pick * pixels from th (then) or el (else). */ VImage ifthenelse(VImage th, double el, VOption *options = nullptr) const { return ifthenelse(th, to_vector(el), options); } /** * Use self as a conditional image (not zero meaning TRUE) to pick * pixels from th (then) or el (else). */ VImage ifthenelse(double th, double el, VOption *options = nullptr) const { return ifthenelse(to_vector(th), to_vector(el), options); } /** * Draw a circle on an image. * * **Optional parameters** * - **fill** -- Draw a solid object, bool. * * @param ink Color for pixels. * @param cx Centre of draw_circle. * @param cy Centre of draw_circle. * @param radius Radius in pixels. * @param options Set of options. */ void draw_circle(double ink, int cx, int cy, int radius, VOption *options = nullptr) const { return draw_circle(to_vector(ink), cx, cy, radius, options); } /** * Draw a line on an image. * @param ink Color for pixels. * @param x1 Start of draw_line. * @param y1 Start of draw_line. * @param x2 End of draw_line. * @param y2 End of draw_line. * @param options Set of options. */ void draw_line(double ink, int x1, int y1, int x2, int y2, VOption *options = nullptr) const { return draw_line(to_vector(ink), x1, y1, x2, y2, options); } /** * Paint a rectangle on an image. * * **Optional parameters** * - **fill** -- Draw a solid object, bool. * * @param ink Color for pixels. * @param left Rect to fill. * @param top Rect to fill. * @param width Rect to fill. * @param height Rect to fill. * @param options Set of options. */ void draw_rect(double ink, int left, int top, int width, int height, VOption *options = nullptr) const { return draw_rect(to_vector(ink), left, top, width, height, options); } /** * Paint a single pixel on an image. * * @param ink Color for pixels. * @param x Point to paint. * @param y Point to paint. */ void draw_point(double ink, int x, int y, VOption *options = nullptr) const { return draw_rect(ink, x, y, 1, 1, options); } /** * Paint a single pixel on an image. * * @param ink Color for pixels. * @param x Point to paint. * @param y Point to paint. */ void draw_point(std::vector ink, int x, int y, VOption *options = nullptr) const { return draw_rect(ink, x, y, 1, 1, options); } /** * Flood-fill an area. * * **Optional parameters** * - **test** -- Test pixels in this image, VImage. * - **equal** -- DrawFlood while equal to edge, bool. * * @param ink Color for pixels. * @param x DrawFlood start point. * @param y DrawFlood start point. * @param options Set of options. */ void draw_flood(double ink, int x, int y, VOption *options = nullptr) const { return draw_flood(to_vector(ink), x, y, options); } /** * Draw a mask on an image. * @param ink Color for pixels. * @param mask Mask of pixels to draw. * @param x Draw mask here. * @param y Draw mask here. * @param options Set of options. */ void draw_mask(double ink, VImage mask, int x, int y, VOption *options = nullptr) const { return draw_mask(to_vector(ink), mask, x, y, options); } /** * Generate thumbnail from buffer. * * **Optional parameters** * - **option_string** -- Options that are passed on to the underlying loader, const char *. * - **height** -- Size to this height, int. * - **size** -- Only upsize, only downsize, or both, VipsSize. * - **no_rotate** -- Don't use orientation tags to rotate image upright, bool. * - **crop** -- Reduce to fill target rectangle, then crop, VipsInteresting. * - **linear** -- Reduce in linear light, bool. * - **import_profile** -- Fallback import profile, const char *. * - **export_profile** -- Fallback export profile, const char *. * - **intent** -- Rendering intent, VipsIntent. * - **fail_on** -- Error level to fail on, VipsFailOn. * * @param buf Buffer to load from. * @param len Size of buffer. * @param width Size to this width. * @param options Set of options. * @return Output image. */ static VImage thumbnail_buffer(void *buf, size_t len, int width, VOption *options = nullptr); // Operator overloads VImage operator[](int index) const; std::vector operator()(int x, int y) const; friend VIPS_CPLUSPLUS_API VImage operator+(const VImage a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator+(const double a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator+(const VImage a, const double b); friend VIPS_CPLUSPLUS_API VImage operator+(const std::vector a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator+(const VImage a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage & operator+=(VImage &a, const VImage b); friend VIPS_CPLUSPLUS_API VImage & operator+=(VImage &a, const double b); friend VIPS_CPLUSPLUS_API VImage & operator+=(VImage &a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage operator-(const VImage a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator-(const double a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator-(const VImage a, const double b); friend VIPS_CPLUSPLUS_API VImage operator-(const std::vector a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator-(const VImage a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage & operator-=(VImage &a, const VImage b); friend VIPS_CPLUSPLUS_API VImage & operator-=(VImage &a, const double b); friend VIPS_CPLUSPLUS_API VImage & operator-=(VImage &a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage operator-(const VImage a); friend VIPS_CPLUSPLUS_API VImage operator*(const VImage a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator*(const double a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator*(const VImage a, const double b); friend VIPS_CPLUSPLUS_API VImage operator*(const std::vector a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator*(const VImage a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage & operator*=(VImage &a, const VImage b); friend VIPS_CPLUSPLUS_API VImage & operator*=(VImage &a, const double b); friend VIPS_CPLUSPLUS_API VImage & operator*=(VImage &a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage operator/(const VImage a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator/(const double a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator/(const VImage a, const double b); friend VIPS_CPLUSPLUS_API VImage operator/(const std::vector a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator/(const VImage a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage & operator/=(VImage &a, const VImage b); friend VIPS_CPLUSPLUS_API VImage & operator/=(VImage &a, const double b); friend VIPS_CPLUSPLUS_API VImage & operator/=(VImage &a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage operator%(const VImage a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator%(const VImage a, const double b); friend VIPS_CPLUSPLUS_API VImage operator%(const VImage a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage & operator%=(VImage &a, const VImage b); friend VIPS_CPLUSPLUS_API VImage & operator%=(VImage &a, const double b); friend VIPS_CPLUSPLUS_API VImage & operator%=(VImage &a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage operator<(const VImage a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator<(const double a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator<(const VImage a, const double b); friend VIPS_CPLUSPLUS_API VImage operator<(const std::vector a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator<(const VImage a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage operator<=(const VImage a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator<=(const double a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator<=(const VImage a, const double b); friend VIPS_CPLUSPLUS_API VImage operator<=(const std::vector a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator<=(const VImage a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage operator>(const VImage a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator>(const double a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator>(const VImage a, const double b); friend VIPS_CPLUSPLUS_API VImage operator>(const std::vector a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator>(const VImage a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage operator>=(const VImage a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator>=(const double a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator>=(const VImage a, const double b); friend VIPS_CPLUSPLUS_API VImage operator>=(const std::vector a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator>=(const VImage a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage operator==(const VImage a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator==(const double a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator==(const VImage a, const double b); friend VIPS_CPLUSPLUS_API VImage operator==(const std::vector a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator==(const VImage a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage operator!=(const VImage a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator!=(const double a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator!=(const VImage a, const double b); friend VIPS_CPLUSPLUS_API VImage operator!=(const std::vector a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator!=(const VImage a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage operator&(const VImage a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator&(const double a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator&(const VImage a, const double b); friend VIPS_CPLUSPLUS_API VImage operator&(const std::vector a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator&(const VImage a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage & operator&=(VImage &a, const VImage b); friend VIPS_CPLUSPLUS_API VImage & operator&=(VImage &a, const double b); friend VIPS_CPLUSPLUS_API VImage & operator&=(VImage &a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage operator|(const VImage a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator|(const double a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator|(const VImage a, const double b); friend VIPS_CPLUSPLUS_API VImage operator|(const std::vector a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator|(const VImage a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage & operator|=(VImage &a, const VImage b); friend VIPS_CPLUSPLUS_API VImage & operator|=(VImage &a, const double b); friend VIPS_CPLUSPLUS_API VImage & operator|=(VImage &a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage operator^(const VImage a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator^(const double a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator^(const VImage a, const double b); friend VIPS_CPLUSPLUS_API VImage operator^(const std::vector a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator^(const VImage a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage & operator^=(VImage &a, const VImage b); friend VIPS_CPLUSPLUS_API VImage & operator^=(VImage &a, const double b); friend VIPS_CPLUSPLUS_API VImage & operator^=(VImage &a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage operator<<(const VImage a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator<<(const VImage a, const double b); friend VIPS_CPLUSPLUS_API VImage operator<<(const VImage a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage & operator<<=(VImage &a, const VImage b); friend VIPS_CPLUSPLUS_API VImage & operator<<=(VImage &a, const double b); friend VIPS_CPLUSPLUS_API VImage & operator<<=(VImage &a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage operator>>(const VImage a, const VImage b); friend VIPS_CPLUSPLUS_API VImage operator>>(const VImage a, const double b); friend VIPS_CPLUSPLUS_API VImage operator>>(const VImage a, const std::vector b); friend VIPS_CPLUSPLUS_API VImage & operator>>=(VImage &a, const VImage b); friend VIPS_CPLUSPLUS_API VImage & operator>>=(VImage &a, const double b); friend VIPS_CPLUSPLUS_API VImage & operator>>=(VImage &a, const std::vector b); /* Automatically generated members. * * Rebuild with: * * meson compile -Cbuild vips-operators-header * * Then delete from here to the end of the class and paste in * vips-operators.h. We could just #include vips-operators.h, but * that confuses doxygen. */ // headers for vips operations // this file is generated automatically, do not edit! /** * Transform lch to cmc. * @param options Set of options. * @return Output image. */ VImage CMC2LCh(VOption *options = nullptr) const; /** * Transform cmyk to xyz. * @param options Set of options. * @return Output image. */ VImage CMYK2XYZ(VOption *options = nullptr) const; /** * Transform hsv to srgb. * @param options Set of options. * @return Output image. */ VImage HSV2sRGB(VOption *options = nullptr) const; /** * Transform lch to cmc. * @param options Set of options. * @return Output image. */ VImage LCh2CMC(VOption *options = nullptr) const; /** * Transform lch to lab. * @param options Set of options. * @return Output image. */ VImage LCh2Lab(VOption *options = nullptr) const; /** * Transform lab to lch. * @param options Set of options. * @return Output image. */ VImage Lab2LCh(VOption *options = nullptr) const; /** * Transform float lab to labq coding. * @param options Set of options. * @return Output image. */ VImage Lab2LabQ(VOption *options = nullptr) const; /** * Transform float lab to signed short. * @param options Set of options. * @return Output image. */ VImage Lab2LabS(VOption *options = nullptr) const; /** * Transform cielab to xyz. * * **Optional parameters** * - **temp** -- Color temperature, std::vector. * * @param options Set of options. * @return Output image. */ VImage Lab2XYZ(VOption *options = nullptr) const; /** * Unpack a labq image to float lab. * @param options Set of options. * @return Output image. */ VImage LabQ2Lab(VOption *options = nullptr) const; /** * Unpack a labq image to short lab. * @param options Set of options. * @return Output image. */ VImage LabQ2LabS(VOption *options = nullptr) const; /** * Convert a labq image to srgb. * @param options Set of options. * @return Output image. */ VImage LabQ2sRGB(VOption *options = nullptr) const; /** * Transform signed short lab to float. * @param options Set of options. * @return Output image. */ VImage LabS2Lab(VOption *options = nullptr) const; /** * Transform short lab to labq coding. * @param options Set of options. * @return Output image. */ VImage LabS2LabQ(VOption *options = nullptr) const; /** * Transform xyz to cmyk. * @param options Set of options. * @return Output image. */ VImage XYZ2CMYK(VOption *options = nullptr) const; /** * Transform xyz to lab. * * **Optional parameters** * - **temp** -- Colour temperature, std::vector. * * @param options Set of options. * @return Output image. */ VImage XYZ2Lab(VOption *options = nullptr) const; /** * Transform xyz to yxy. * @param options Set of options. * @return Output image. */ VImage XYZ2Yxy(VOption *options = nullptr) const; /** * Transform xyz to scrgb. * @param options Set of options. * @return Output image. */ VImage XYZ2scRGB(VOption *options = nullptr) const; /** * Transform yxy to xyz. * @param options Set of options. * @return Output image. */ VImage Yxy2XYZ(VOption *options = nullptr) const; /** * Absolute value of an image. * @param options Set of options. * @return Output image. */ VImage abs(VOption *options = nullptr) const; /** * Add two images. * @param right Right-hand image argument. * @param options Set of options. * @return Output image. */ VImage add(VImage right, VOption *options = nullptr) const; /** * Affine transform of an image. * * **Optional parameters** * - **interpolate** -- Interpolate pixels with this, VInterpolate. * - **oarea** -- Area of output to generate, std::vector. * - **odx** -- Horizontal output displacement, double. * - **ody** -- Vertical output displacement, double. * - **idx** -- Horizontal input displacement, double. * - **idy** -- Vertical input displacement, double. * - **background** -- Background value, std::vector. * - **premultiplied** -- Images have premultiplied alpha, bool. * - **extend** -- How to generate the extra pixels, VipsExtend. * * @param matrix Transformation matrix. * @param options Set of options. * @return Output image. */ VImage affine(std::vector matrix, VOption *options = nullptr) const; /** * Load an analyze6 image. * * **Optional parameters** * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param filename Filename to load from. * @param options Set of options. * @return Output image. */ static VImage analyzeload(const char *filename, VOption *options = nullptr); /** * Join an array of images. * * **Optional parameters** * - **across** -- Number of images across grid, int. * - **shim** -- Pixels between images, int. * - **background** -- Colour for new pixels, std::vector. * - **halign** -- Align on the left, centre or right, VipsAlign. * - **valign** -- Align on the top, centre or bottom, VipsAlign. * - **hspacing** -- Horizontal spacing between images, int. * - **vspacing** -- Vertical spacing between images, int. * * @param in Array of input images. * @param options Set of options. * @return Output image. */ static VImage arrayjoin(std::vector in, VOption *options = nullptr); /** * Autorotate image by exif tag. * @param options Set of options. * @return Output image. */ VImage autorot(VOption *options = nullptr) const; /** * Find image average. * @param options Set of options. * @return Output value. */ double avg(VOption *options = nullptr) const; /** * Boolean operation across image bands. * @param boolean Boolean to perform. * @param options Set of options. * @return Output image. */ VImage bandbool(VipsOperationBoolean boolean, VOption *options = nullptr) const; /** * Fold up x axis into bands. * * **Optional parameters** * - **factor** -- Fold by this factor, int. * * @param options Set of options. * @return Output image. */ VImage bandfold(VOption *options = nullptr) const; /** * Bandwise join a set of images. * @param in Array of input images. * @param options Set of options. * @return Output image. */ static VImage bandjoin(std::vector in, VOption *options = nullptr); /** * Append a constant band to an image. * @param c Array of constants to add. * @param options Set of options. * @return Output image. */ VImage bandjoin_const(std::vector c, VOption *options = nullptr) const; /** * Band-wise average. * @param options Set of options. * @return Output image. */ VImage bandmean(VOption *options = nullptr) const; /** * Band-wise rank of a set of images. * * **Optional parameters** * - **index** -- Select this band element from sorted list, int. * * @param in Array of input images. * @param options Set of options. * @return Output image. */ static VImage bandrank(std::vector in, VOption *options = nullptr); /** * Unfold image bands into x axis. * * **Optional parameters** * - **factor** -- Unfold by this factor, int. * * @param options Set of options. * @return Output image. */ VImage bandunfold(VOption *options = nullptr) const; /** * Make a black image. * * **Optional parameters** * - **bands** -- Number of bands in image, int. * * @param width Image width in pixels. * @param height Image height in pixels. * @param options Set of options. * @return Output image. */ static VImage black(int width, int height, VOption *options = nullptr); /** * Boolean operation on two images. * @param right Right-hand image argument. * @param boolean Boolean to perform. * @param options Set of options. * @return Output image. */ VImage boolean(VImage right, VipsOperationBoolean boolean, VOption *options = nullptr) const; /** * Boolean operations against a constant. * @param boolean Boolean to perform. * @param c Array of constants. * @param options Set of options. * @return Output image. */ VImage boolean_const(VipsOperationBoolean boolean, std::vector c, VOption *options = nullptr) const; /** * Build a look-up table. * @param options Set of options. * @return Output image. */ VImage buildlut(VOption *options = nullptr) const; /** * Byteswap an image. * @param options Set of options. * @return Output image. */ VImage byteswap(VOption *options = nullptr) const; /** * Cache an image. * * **Optional parameters** * - **max_tiles** -- Maximum number of tiles to cache, int. * - **tile_height** -- Tile height in pixels, int. * - **tile_width** -- Tile width in pixels, int. * * @param options Set of options. * @return Output image. */ VImage cache(VOption *options = nullptr) const; /** * Canny edge detector. * * **Optional parameters** * - **sigma** -- Sigma of Gaussian, double. * - **precision** -- Convolve with this precision, VipsPrecision. * * @param options Set of options. * @return Output image. */ VImage canny(VOption *options = nullptr) const; /** * Use pixel values to pick cases from an array of images. * @param cases Array of case images. * @param options Set of options. * @return Output image. */ VImage case_image(std::vector cases, VOption *options = nullptr) const; /** * Cast an image. * * **Optional parameters** * - **shift** -- Shift integer values up and down, bool. * * @param format Format to cast to. * @param options Set of options. * @return Output image. */ VImage cast(VipsBandFormat format, VOption *options = nullptr) const; /** * Convert to a new colorspace. * * **Optional parameters** * - **source_space** -- Source color space, VipsInterpretation. * * @param space Destination color space. * @param options Set of options. * @return Output image. */ VImage colourspace(VipsInterpretation space, VOption *options = nullptr) const; /** * Convolve with rotating mask. * * **Optional parameters** * - **times** -- Rotate and convolve this many times, int. * - **angle** -- Rotate mask by this much between convolutions, VipsAngle45. * - **combine** -- Combine convolution results like this, VipsCombine. * - **precision** -- Convolve with this precision, VipsPrecision. * - **layers** -- Use this many layers in approximation, int. * - **cluster** -- Cluster lines closer than this in approximation, int. * * @param mask Input matrix image. * @param options Set of options. * @return Output image. */ VImage compass(VImage mask, VOption *options = nullptr) const; /** * Perform a complex operation on an image. * @param cmplx Complex to perform. * @param options Set of options. * @return Output image. */ VImage complex(VipsOperationComplex cmplx, VOption *options = nullptr) const; /** * Complex binary operations on two images. * @param right Right-hand image argument. * @param cmplx Binary complex operation to perform. * @param options Set of options. * @return Output image. */ VImage complex2(VImage right, VipsOperationComplex2 cmplx, VOption *options = nullptr) const; /** * Form a complex image from two real images. * @param right Right-hand image argument. * @param options Set of options. * @return Output image. */ VImage complexform(VImage right, VOption *options = nullptr) const; /** * Get a component from a complex image. * @param get Complex to perform. * @param options Set of options. * @return Output image. */ VImage complexget(VipsOperationComplexget get, VOption *options = nullptr) const; /** * Blend an array of images with an array of blend modes. * * **Optional parameters** * - **x** -- Array of x coordinates to join at, std::vector. * - **y** -- Array of y coordinates to join at, std::vector. * - **compositing_space** -- Composite images in this colour space, VipsInterpretation. * - **premultiplied** -- Images have premultiplied alpha, bool. * * @param in Array of input images. * @param mode Array of VipsBlendMode to join with. * @param options Set of options. * @return Output image. */ static VImage composite(std::vector in, std::vector mode, VOption *options = nullptr); /** * Blend a pair of images with a blend mode. * * **Optional parameters** * - **x** -- x position of overlay, int. * - **y** -- y position of overlay, int. * - **compositing_space** -- Composite images in this colour space, VipsInterpretation. * - **premultiplied** -- Images have premultiplied alpha, bool. * * @param overlay Overlay image. * @param mode VipsBlendMode to join with. * @param options Set of options. * @return Output image. */ VImage composite2(VImage overlay, VipsBlendMode mode, VOption *options = nullptr) const; /** * Convolution operation. * * **Optional parameters** * - **precision** -- Convolve with this precision, VipsPrecision. * - **layers** -- Use this many layers in approximation, int. * - **cluster** -- Cluster lines closer than this in approximation, int. * * @param mask Input matrix image. * @param options Set of options. * @return Output image. */ VImage conv(VImage mask, VOption *options = nullptr) const; /** * Approximate integer convolution. * * **Optional parameters** * - **layers** -- Use this many layers in approximation, int. * - **cluster** -- Cluster lines closer than this in approximation, int. * * @param mask Input matrix image. * @param options Set of options. * @return Output image. */ VImage conva(VImage mask, VOption *options = nullptr) const; /** * Approximate separable integer convolution. * * **Optional parameters** * - **layers** -- Use this many layers in approximation, int. * * @param mask Input matrix image. * @param options Set of options. * @return Output image. */ VImage convasep(VImage mask, VOption *options = nullptr) const; /** * Float convolution operation. * @param mask Input matrix image. * @param options Set of options. * @return Output image. */ VImage convf(VImage mask, VOption *options = nullptr) const; /** * Int convolution operation. * @param mask Input matrix image. * @param options Set of options. * @return Output image. */ VImage convi(VImage mask, VOption *options = nullptr) const; /** * Separable convolution operation. * * **Optional parameters** * - **precision** -- Convolve with this precision, VipsPrecision. * - **layers** -- Use this many layers in approximation, int. * - **cluster** -- Cluster lines closer than this in approximation, int. * * @param mask Input matrix image. * @param options Set of options. * @return Output image. */ VImage convsep(VImage mask, VOption *options = nullptr) const; /** * Copy an image. * * **Optional parameters** * - **width** -- Image width in pixels, int. * - **height** -- Image height in pixels, int. * - **bands** -- Number of bands in image, int. * - **format** -- Pixel format in image, VipsBandFormat. * - **coding** -- Pixel coding, VipsCoding. * - **interpretation** -- Pixel interpretation, VipsInterpretation. * - **xres** -- Horizontal resolution in pixels/mm, double. * - **yres** -- Vertical resolution in pixels/mm, double. * - **xoffset** -- Horizontal offset of origin, int. * - **yoffset** -- Vertical offset of origin, int. * * @param options Set of options. * @return Output image. */ VImage copy(VOption *options = nullptr) const; /** * Count lines in an image. * @param direction Countlines left-right or up-down. * @param options Set of options. * @return Number of lines. */ double countlines(VipsDirection direction, VOption *options = nullptr) const; /** * Extract an area from an image. * @param left Left edge of extract area. * @param top Top edge of extract area. * @param width Width of extract area. * @param height Height of extract area. * @param options Set of options. * @return Output image. */ VImage crop(int left, int top, int width, int height, VOption *options = nullptr) const; /** * Load csv. * * **Optional parameters** * - **skip** -- Skip this many lines at the start of the file, int. * - **lines** -- Read this many lines from the file, int. * - **whitespace** -- Set of whitespace characters, const char *. * - **separator** -- Set of separator characters, const char *. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param filename Filename to load from. * @param options Set of options. * @return Output image. */ static VImage csvload(const char *filename, VOption *options = nullptr); /** * Load csv. * * **Optional parameters** * - **skip** -- Skip this many lines at the start of the file, int. * - **lines** -- Read this many lines from the file, int. * - **whitespace** -- Set of whitespace characters, const char *. * - **separator** -- Set of separator characters, const char *. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param source Source to load from. * @param options Set of options. * @return Output image. */ static VImage csvload_source(VSource source, VOption *options = nullptr); /** * Save image to csv. * * **Optional parameters** * - **profile** -- Filename of ICC profile to embed, const char *. * - **separator** -- Separator characters, const char *. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param filename Filename to save to. * @param options Set of options. */ void csvsave(const char *filename, VOption *options = nullptr) const; /** * Save image to csv. * * **Optional parameters** * - **profile** -- Filename of ICC profile to embed, const char *. * - **separator** -- Separator characters, const char *. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param target Target to save to. * @param options Set of options. */ void csvsave_target(VTarget target, VOption *options = nullptr) const; /** * Calculate de00. * @param right Right-hand input image. * @param options Set of options. * @return Output image. */ VImage dE00(VImage right, VOption *options = nullptr) const; /** * Calculate de76. * @param right Right-hand input image. * @param options Set of options. * @return Output image. */ VImage dE76(VImage right, VOption *options = nullptr) const; /** * Calculate decmc. * @param right Right-hand input image. * @param options Set of options. * @return Output image. */ VImage dECMC(VImage right, VOption *options = nullptr) const; /** * Find image standard deviation. * @param options Set of options. * @return Output value. */ double deviate(VOption *options = nullptr) const; /** * Divide two images. * @param right Right-hand image argument. * @param options Set of options. * @return Output image. */ VImage divide(VImage right, VOption *options = nullptr) const; /** * Draw a circle on an image. * * **Optional parameters** * - **fill** -- Draw a solid object, bool. * * @param ink Color for pixels. * @param cx Centre of draw_circle. * @param cy Centre of draw_circle. * @param radius Radius in pixels. * @param options Set of options. */ void draw_circle(std::vector ink, int cx, int cy, int radius, VOption *options = nullptr) const; /** * Flood-fill an area. * * **Optional parameters** * - **test** -- Test pixels in this image, VImage. * - **equal** -- DrawFlood while equal to edge, bool. * * @param ink Color for pixels. * @param x DrawFlood start point. * @param y DrawFlood start point. * @param options Set of options. */ void draw_flood(std::vector ink, int x, int y, VOption *options = nullptr) const; /** * Paint an image into another image. * * **Optional parameters** * - **mode** -- Combining mode, VipsCombineMode. * * @param sub Sub-image to insert into main image. * @param x Draw image here. * @param y Draw image here. * @param options Set of options. */ void draw_image(VImage sub, int x, int y, VOption *options = nullptr) const; /** * Draw a line on an image. * @param ink Color for pixels. * @param x1 Start of draw_line. * @param y1 Start of draw_line. * @param x2 End of draw_line. * @param y2 End of draw_line. * @param options Set of options. */ void draw_line(std::vector ink, int x1, int y1, int x2, int y2, VOption *options = nullptr) const; /** * Draw a mask on an image. * @param ink Color for pixels. * @param mask Mask of pixels to draw. * @param x Draw mask here. * @param y Draw mask here. * @param options Set of options. */ void draw_mask(std::vector ink, VImage mask, int x, int y, VOption *options = nullptr) const; /** * Paint a rectangle on an image. * * **Optional parameters** * - **fill** -- Draw a solid object, bool. * * @param ink Color for pixels. * @param left Rect to fill. * @param top Rect to fill. * @param width Rect to fill. * @param height Rect to fill. * @param options Set of options. */ void draw_rect(std::vector ink, int left, int top, int width, int height, VOption *options = nullptr) const; /** * Blur a rectangle on an image. * @param left Rect to fill. * @param top Rect to fill. * @param width Rect to fill. * @param height Rect to fill. * @param options Set of options. */ void draw_smudge(int left, int top, int width, int height, VOption *options = nullptr) const; /** * Save image to deepzoom file. * * **Optional parameters** * - **imagename** -- Image name, const char *. * - **layout** -- Directory layout, VipsForeignDzLayout. * - **suffix** -- Filename suffix for tiles, const char *. * - **overlap** -- Tile overlap in pixels, int. * - **tile_size** -- Tile size in pixels, int. * - **profile** -- Filename of ICC profile to embed, const char *. * - **centre** -- Center image in tile, bool. * - **depth** -- Pyramid depth, VipsForeignDzDepth. * - **angle** -- Rotate image during save, VipsAngle. * - **container** -- Pyramid container type, VipsForeignDzContainer. * - **compression** -- ZIP deflate compression level, int. * - **region_shrink** -- Method to shrink regions, VipsRegionShrink. * - **skip_blanks** -- Skip tiles which are nearly equal to the background, int. * - **id** -- Resource ID, const char *. * - **Q** -- Q factor, int. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param filename Filename to save to. * @param options Set of options. */ void dzsave(const char *filename, VOption *options = nullptr) const; /** * Save image to dz buffer. * * **Optional parameters** * - **imagename** -- Image name, const char *. * - **layout** -- Directory layout, VipsForeignDzLayout. * - **suffix** -- Filename suffix for tiles, const char *. * - **overlap** -- Tile overlap in pixels, int. * - **tile_size** -- Tile size in pixels, int. * - **profile** -- Filename of ICC profile to embed, const char *. * - **centre** -- Center image in tile, bool. * - **depth** -- Pyramid depth, VipsForeignDzDepth. * - **angle** -- Rotate image during save, VipsAngle. * - **container** -- Pyramid container type, VipsForeignDzContainer. * - **compression** -- ZIP deflate compression level, int. * - **region_shrink** -- Method to shrink regions, VipsRegionShrink. * - **skip_blanks** -- Skip tiles which are nearly equal to the background, int. * - **id** -- Resource ID, const char *. * - **Q** -- Q factor, int. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param options Set of options. * @return Buffer to save to. */ VipsBlob *dzsave_buffer(VOption *options = nullptr) const; /** * Save image to deepzoom target. * * **Optional parameters** * - **imagename** -- Image name, const char *. * - **layout** -- Directory layout, VipsForeignDzLayout. * - **suffix** -- Filename suffix for tiles, const char *. * - **overlap** -- Tile overlap in pixels, int. * - **tile_size** -- Tile size in pixels, int. * - **profile** -- Filename of ICC profile to embed, const char *. * - **centre** -- Center image in tile, bool. * - **depth** -- Pyramid depth, VipsForeignDzDepth. * - **angle** -- Rotate image during save, VipsAngle. * - **container** -- Pyramid container type, VipsForeignDzContainer. * - **compression** -- ZIP deflate compression level, int. * - **region_shrink** -- Method to shrink regions, VipsRegionShrink. * - **skip_blanks** -- Skip tiles which are nearly equal to the background, int. * - **id** -- Resource ID, const char *. * - **Q** -- Q factor, int. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param target Target to save to. * @param options Set of options. */ void dzsave_target(VTarget target, VOption *options = nullptr) const; /** * Embed an image in a larger image. * * **Optional parameters** * - **extend** -- How to generate the extra pixels, VipsExtend. * - **background** -- Color for background pixels, std::vector. * * @param x Left edge of input in output. * @param y Top edge of input in output. * @param width Image width in pixels. * @param height Image height in pixels. * @param options Set of options. * @return Output image. */ VImage embed(int x, int y, int width, int height, VOption *options = nullptr) const; /** * Extract an area from an image. * @param left Left edge of extract area. * @param top Top edge of extract area. * @param width Width of extract area. * @param height Height of extract area. * @param options Set of options. * @return Output image. */ VImage extract_area(int left, int top, int width, int height, VOption *options = nullptr) const; /** * Extract band from an image. * * **Optional parameters** * - **n** -- Number of bands to extract, int. * * @param band Band to extract. * @param options Set of options. * @return Output image. */ VImage extract_band(int band, VOption *options = nullptr) const; /** * Make an image showing the eye's spatial response. * * **Optional parameters** * - **uchar** -- Output an unsigned char image, bool. * - **factor** -- Maximum spatial frequency, double. * * @param width Image width in pixels. * @param height Image height in pixels. * @param options Set of options. * @return Output image. */ static VImage eye(int width, int height, VOption *options = nullptr); /** * False-color an image. * @param options Set of options. * @return Output image. */ VImage falsecolour(VOption *options = nullptr) const; /** * Fast correlation. * @param ref Input reference image. * @param options Set of options. * @return Output image. */ VImage fastcor(VImage ref, VOption *options = nullptr) const; /** * Fill image zeros with nearest non-zero pixel. * @param options Set of options. * @return Value of nearest non-zero pixel. */ VImage fill_nearest(VOption *options = nullptr) const; /** * Search an image for non-edge areas. * * **Optional parameters** * - **threshold** -- Object threshold, double. * - **background** -- Color for background pixels, std::vector. * - **line_art** -- Enable line art mode, bool. * * @param top Top edge of extract area. * @param width Width of extract area. * @param height Height of extract area. * @param options Set of options. * @return Left edge of image. */ int find_trim(int *top, int *width, int *height, VOption *options = nullptr) const; /** * Load a fits image. * * **Optional parameters** * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param filename Filename to load from. * @param options Set of options. * @return Output image. */ static VImage fitsload(const char *filename, VOption *options = nullptr); /** * Load fits from a source. * * **Optional parameters** * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param source Source to load from. * @param options Set of options. * @return Output image. */ static VImage fitsload_source(VSource source, VOption *options = nullptr); /** * Save image to fits file. * * **Optional parameters** * - **profile** -- Filename of ICC profile to embed, const char *. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param filename Filename to save to. * @param options Set of options. */ void fitssave(const char *filename, VOption *options = nullptr) const; /** * Flatten alpha out of an image. * * **Optional parameters** * - **background** -- Background value, std::vector. * - **max_alpha** -- Maximum value of alpha channel, double. * * @param options Set of options. * @return Output image. */ VImage flatten(VOption *options = nullptr) const; /** * Flip an image. * @param direction Direction to flip image. * @param options Set of options. * @return Output image. */ VImage flip(VipsDirection direction, VOption *options = nullptr) const; /** * Transform float rgb to radiance coding. * @param options Set of options. * @return Output image. */ VImage float2rad(VOption *options = nullptr) const; /** * Make a fractal surface. * @param width Image width in pixels. * @param height Image height in pixels. * @param fractal_dimension Fractal dimension. * @param options Set of options. * @return Output image. */ static VImage fractsurf(int width, int height, double fractal_dimension, VOption *options = nullptr); /** * Frequency-domain filtering. * @param mask Input mask image. * @param options Set of options. * @return Output image. */ VImage freqmult(VImage mask, VOption *options = nullptr) const; /** * Forward fft. * @param options Set of options. * @return Output image. */ VImage fwfft(VOption *options = nullptr) const; /** * Gamma an image. * * **Optional parameters** * - **exponent** -- Gamma factor, double. * * @param options Set of options. * @return Output image. */ VImage gamma(VOption *options = nullptr) const; /** * Gaussian blur. * * **Optional parameters** * - **min_ampl** -- Minimum amplitude of Gaussian, double. * - **precision** -- Convolve with this precision, VipsPrecision. * * @param sigma Sigma of Gaussian. * @param options Set of options. * @return Output image. */ VImage gaussblur(double sigma, VOption *options = nullptr) const; /** * Make a gaussian image. * * **Optional parameters** * - **separable** -- Generate separable Gaussian, bool. * - **precision** -- Generate with this precision, VipsPrecision. * * @param sigma Sigma of Gaussian. * @param min_ampl Minimum amplitude of Gaussian. * @param options Set of options. * @return Output image. */ static VImage gaussmat(double sigma, double min_ampl, VOption *options = nullptr); /** * Make a gaussnoise image. * * **Optional parameters** * - **sigma** -- Standard deviation of pixels in generated image, double. * - **mean** -- Mean of pixels in generated image, double. * - **seed** -- Random number seed, int. * * @param width Image width in pixels. * @param height Image height in pixels. * @param options Set of options. * @return Output image. */ static VImage gaussnoise(int width, int height, VOption *options = nullptr); /** * Read a point from an image. * @param x Point to read. * @param y Point to read. * @param options Set of options. * @return Array of output values. */ std::vector getpoint(int x, int y, VOption *options = nullptr) const; /** * Load gif with libnsgif. * * **Optional parameters** * - **n** -- Number of pages to load, -1 for all, int. * - **page** -- First page to load, int. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param filename Filename to load from. * @param options Set of options. * @return Output image. */ static VImage gifload(const char *filename, VOption *options = nullptr); /** * Load gif with libnsgif. * * **Optional parameters** * - **n** -- Number of pages to load, -1 for all, int. * - **page** -- First page to load, int. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param buffer Buffer to load from. * @param options Set of options. * @return Output image. */ static VImage gifload_buffer(VipsBlob *buffer, VOption *options = nullptr); /** * Load gif from source. * * **Optional parameters** * - **n** -- Number of pages to load, -1 for all, int. * - **page** -- First page to load, int. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param source Source to load from. * @param options Set of options. * @return Output image. */ static VImage gifload_source(VSource source, VOption *options = nullptr); /** * Save as gif. * * **Optional parameters** * - **dither** -- Amount of dithering, double. * - **effort** -- Quantisation effort, int. * - **profile** -- Filename of ICC profile to embed, const char *. * - **bitdepth** -- Number of bits per pixel, int. * - **interframe_maxerror** -- Maximum inter-frame error for transparency, double. * - **reuse** -- Reuse palette from input, bool. * - **interpalette_maxerror** -- Maximum inter-palette error for palette reusage, double. * - **interlace** -- Generate an interlaced (progressive) GIF, bool. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param filename Filename to save to. * @param options Set of options. */ void gifsave(const char *filename, VOption *options = nullptr) const; /** * Save as gif. * * **Optional parameters** * - **dither** -- Amount of dithering, double. * - **effort** -- Quantisation effort, int. * - **profile** -- Filename of ICC profile to embed, const char *. * - **bitdepth** -- Number of bits per pixel, int. * - **interframe_maxerror** -- Maximum inter-frame error for transparency, double. * - **reuse** -- Reuse palette from input, bool. * - **interpalette_maxerror** -- Maximum inter-palette error for palette reusage, double. * - **interlace** -- Generate an interlaced (progressive) GIF, bool. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param options Set of options. * @return Buffer to save to. */ VipsBlob *gifsave_buffer(VOption *options = nullptr) const; /** * Save as gif. * * **Optional parameters** * - **dither** -- Amount of dithering, double. * - **effort** -- Quantisation effort, int. * - **profile** -- Filename of ICC profile to embed, const char *. * - **bitdepth** -- Number of bits per pixel, int. * - **interframe_maxerror** -- Maximum inter-frame error for transparency, double. * - **reuse** -- Reuse palette from input, bool. * - **interpalette_maxerror** -- Maximum inter-palette error for palette reusage, double. * - **interlace** -- Generate an interlaced (progressive) GIF, bool. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param target Target to save to. * @param options Set of options. */ void gifsave_target(VTarget target, VOption *options = nullptr) const; /** * Global balance an image mosaic. * * **Optional parameters** * - **gamma** -- Image gamma, double. * - **int_output** -- Integer output, bool. * * @param options Set of options. * @return Output image. */ VImage globalbalance(VOption *options = nullptr) const; /** * Place an image within a larger image with a certain gravity. * * **Optional parameters** * - **extend** -- How to generate the extra pixels, VipsExtend. * - **background** -- Color for background pixels, std::vector. * * @param direction Direction to place image within width/height. * @param width Image width in pixels. * @param height Image height in pixels. * @param options Set of options. * @return Output image. */ VImage gravity(VipsCompassDirection direction, int width, int height, VOption *options = nullptr) const; /** * Make a grey ramp image. * * **Optional parameters** * - **uchar** -- Output an unsigned char image, bool. * * @param width Image width in pixels. * @param height Image height in pixels. * @param options Set of options. * @return Output image. */ static VImage grey(int width, int height, VOption *options = nullptr); /** * Grid an image. * @param tile_height Chop into tiles this high. * @param across Number of tiles across. * @param down Number of tiles down. * @param options Set of options. * @return Output image. */ VImage grid(int tile_height, int across, int down, VOption *options = nullptr) const; /** * Load a heif image. * * **Optional parameters** * - **page** -- First page to load, int. * - **n** -- Number of pages to load, -1 for all, int. * - **thumbnail** -- Fetch thumbnail image, bool. * - **unlimited** -- Remove all denial of service limits, bool. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param filename Filename to load from. * @param options Set of options. * @return Output image. */ static VImage heifload(const char *filename, VOption *options = nullptr); /** * Load a heif image. * * **Optional parameters** * - **page** -- First page to load, int. * - **n** -- Number of pages to load, -1 for all, int. * - **thumbnail** -- Fetch thumbnail image, bool. * - **unlimited** -- Remove all denial of service limits, bool. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param buffer Buffer to load from. * @param options Set of options. * @return Output image. */ static VImage heifload_buffer(VipsBlob *buffer, VOption *options = nullptr); /** * Load a heif image. * * **Optional parameters** * - **page** -- First page to load, int. * - **n** -- Number of pages to load, -1 for all, int. * - **thumbnail** -- Fetch thumbnail image, bool. * - **unlimited** -- Remove all denial of service limits, bool. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param source Source to load from. * @param options Set of options. * @return Output image. */ static VImage heifload_source(VSource source, VOption *options = nullptr); /** * Save image in heif format. * * **Optional parameters** * - **Q** -- Q factor, int. * - **bitdepth** -- Number of bits per pixel, int. * - **profile** -- Filename of ICC profile to embed, const char *. * - **lossless** -- Enable lossless compression, bool. * - **compression** -- Compression format, VipsForeignHeifCompression. * - **effort** -- CPU effort, int. * - **subsample_mode** -- Select chroma subsample operation mode, VipsForeignSubsample. * - **encoder** -- Select encoder to use, VipsForeignHeifEncoder. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param filename Filename to save to. * @param options Set of options. */ void heifsave(const char *filename, VOption *options = nullptr) const; /** * Save image in heif format. * * **Optional parameters** * - **Q** -- Q factor, int. * - **bitdepth** -- Number of bits per pixel, int. * - **profile** -- Filename of ICC profile to embed, const char *. * - **lossless** -- Enable lossless compression, bool. * - **compression** -- Compression format, VipsForeignHeifCompression. * - **effort** -- CPU effort, int. * - **subsample_mode** -- Select chroma subsample operation mode, VipsForeignSubsample. * - **encoder** -- Select encoder to use, VipsForeignHeifEncoder. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param options Set of options. * @return Buffer to save to. */ VipsBlob *heifsave_buffer(VOption *options = nullptr) const; /** * Save image in heif format. * * **Optional parameters** * - **Q** -- Q factor, int. * - **bitdepth** -- Number of bits per pixel, int. * - **profile** -- Filename of ICC profile to embed, const char *. * - **lossless** -- Enable lossless compression, bool. * - **compression** -- Compression format, VipsForeignHeifCompression. * - **effort** -- CPU effort, int. * - **subsample_mode** -- Select chroma subsample operation mode, VipsForeignSubsample. * - **encoder** -- Select encoder to use, VipsForeignHeifEncoder. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param target Target to save to. * @param options Set of options. */ void heifsave_target(VTarget target, VOption *options = nullptr) const; /** * Form cumulative histogram. * @param options Set of options. * @return Output image. */ VImage hist_cum(VOption *options = nullptr) const; /** * Estimate image entropy. * @param options Set of options. * @return Output value. */ double hist_entropy(VOption *options = nullptr) const; /** * Histogram equalisation. * * **Optional parameters** * - **band** -- Equalise with this band, int. * * @param options Set of options. * @return Output image. */ VImage hist_equal(VOption *options = nullptr) const; /** * Find image histogram. * * **Optional parameters** * - **band** -- Find histogram of band, int. * * @param options Set of options. * @return Output histogram. */ VImage hist_find(VOption *options = nullptr) const; /** * Find indexed image histogram. * * **Optional parameters** * - **combine** -- Combine bins like this, VipsCombine. * * @param index Index image. * @param options Set of options. * @return Output histogram. */ VImage hist_find_indexed(VImage index, VOption *options = nullptr) const; /** * Find n-dimensional image histogram. * * **Optional parameters** * - **bins** -- Number of bins in each dimension, int. * * @param options Set of options. * @return Output histogram. */ VImage hist_find_ndim(VOption *options = nullptr) const; /** * Test for monotonicity. * @param options Set of options. * @return true if in is monotonic. */ bool hist_ismonotonic(VOption *options = nullptr) const; /** * Local histogram equalisation. * * **Optional parameters** * - **max_slope** -- Maximum slope (CLAHE), int. * * @param width Window width in pixels. * @param height Window height in pixels. * @param options Set of options. * @return Output image. */ VImage hist_local(int width, int height, VOption *options = nullptr) const; /** * Match two histograms. * @param ref Reference histogram. * @param options Set of options. * @return Output image. */ VImage hist_match(VImage ref, VOption *options = nullptr) const; /** * Normalise histogram. * @param options Set of options. * @return Output image. */ VImage hist_norm(VOption *options = nullptr) const; /** * Plot histogram. * @param options Set of options. * @return Output image. */ VImage hist_plot(VOption *options = nullptr) const; /** * Find hough circle transform. * * **Optional parameters** * - **scale** -- Scale down dimensions by this factor, int. * - **min_radius** -- Smallest radius to search for, int. * - **max_radius** -- Largest radius to search for, int. * * @param options Set of options. * @return Output image. */ VImage hough_circle(VOption *options = nullptr) const; /** * Find hough line transform. * * **Optional parameters** * - **width** -- Horizontal size of parameter space, int. * - **height** -- Vertical size of parameter space, int. * * @param options Set of options. * @return Output image. */ VImage hough_line(VOption *options = nullptr) const; /** * Output to device with icc profile. * * **Optional parameters** * - **pcs** -- Set Profile Connection Space, VipsPCS. * - **intent** -- Rendering intent, VipsIntent. * - **black_point_compensation** -- Enable black point compensation, bool. * - **output_profile** -- Filename to load output profile from, const char *. * - **depth** -- Output device space depth in bits, int. * * @param options Set of options. * @return Output image. */ VImage icc_export(VOption *options = nullptr) const; /** * Import from device with icc profile. * * **Optional parameters** * - **pcs** -- Set Profile Connection Space, VipsPCS. * - **intent** -- Rendering intent, VipsIntent. * - **black_point_compensation** -- Enable black point compensation, bool. * - **embedded** -- Use embedded input profile, if available, bool. * - **input_profile** -- Filename to load input profile from, const char *. * * @param options Set of options. * @return Output image. */ VImage icc_import(VOption *options = nullptr) const; /** * Transform between devices with icc profiles. * * **Optional parameters** * - **pcs** -- Set Profile Connection Space, VipsPCS. * - **intent** -- Rendering intent, VipsIntent. * - **black_point_compensation** -- Enable black point compensation, bool. * - **embedded** -- Use embedded input profile, if available, bool. * - **input_profile** -- Filename to load input profile from, const char *. * - **depth** -- Output device space depth in bits, int. * * @param output_profile Filename to load output profile from. * @param options Set of options. * @return Output image. */ VImage icc_transform(const char *output_profile, VOption *options = nullptr) const; /** * Make a 1d image where pixel values are indexes. * * **Optional parameters** * - **bands** -- Number of bands in LUT, int. * - **ushort** -- Create a 16-bit LUT, bool. * - **size** -- Size of 16-bit LUT, int. * * @param options Set of options. * @return Output image. */ static VImage identity(VOption *options = nullptr); /** * Ifthenelse an image. * * **Optional parameters** * - **blend** -- Blend smoothly between then and else parts, bool. * * @param in1 Source for TRUE pixels. * @param in2 Source for FALSE pixels. * @param options Set of options. * @return Output image. */ VImage ifthenelse(VImage in1, VImage in2, VOption *options = nullptr) const; /** * Insert image @sub into @main at @x, @y. * * **Optional parameters** * - **expand** -- Expand output to hold all of both inputs, bool. * - **background** -- Color for new pixels, std::vector. * * @param sub Sub-image to insert into main image. * @param x Left edge of sub in main. * @param y Top edge of sub in main. * @param options Set of options. * @return Output image. */ VImage insert(VImage sub, int x, int y, VOption *options = nullptr) const; /** * Invert an image. * @param options Set of options. * @return Output image. */ VImage invert(VOption *options = nullptr) const; /** * Build an inverted look-up table. * * **Optional parameters** * - **size** -- LUT size to generate, int. * * @param options Set of options. * @return Output image. */ VImage invertlut(VOption *options = nullptr) const; /** * Inverse fft. * * **Optional parameters** * - **real** -- Output only the real part of the transform, bool. * * @param options Set of options. * @return Output image. */ VImage invfft(VOption *options = nullptr) const; /** * Join a pair of images. * * **Optional parameters** * - **expand** -- Expand output to hold all of both inputs, bool. * - **shim** -- Pixels between images, int. * - **background** -- Colour for new pixels, std::vector. * - **align** -- Align on the low, centre or high coordinate edge, VipsAlign. * * @param in2 Second input image. * @param direction Join left-right or up-down. * @param options Set of options. * @return Output image. */ VImage join(VImage in2, VipsDirection direction, VOption *options = nullptr) const; /** * Load jpeg2000 image. * * **Optional parameters** * - **page** -- Load this page from the image, int. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param filename Filename to load from. * @param options Set of options. * @return Output image. */ static VImage jp2kload(const char *filename, VOption *options = nullptr); /** * Load jpeg2000 image. * * **Optional parameters** * - **page** -- Load this page from the image, int. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param buffer Buffer to load from. * @param options Set of options. * @return Output image. */ static VImage jp2kload_buffer(VipsBlob *buffer, VOption *options = nullptr); /** * Load jpeg2000 image. * * **Optional parameters** * - **page** -- Load this page from the image, int. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param source Source to load from. * @param options Set of options. * @return Output image. */ static VImage jp2kload_source(VSource source, VOption *options = nullptr); /** * Save image in jpeg2000 format. * * **Optional parameters** * - **tile_width** -- Tile width in pixels, int. * - **profile** -- Filename of ICC profile to embed, const char *. * - **tile_height** -- Tile height in pixels, int. * - **lossless** -- Enable lossless compression, bool. * - **Q** -- Q factor, int. * - **subsample_mode** -- Select chroma subsample operation mode, VipsForeignSubsample. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param filename Filename to load from. * @param options Set of options. */ void jp2ksave(const char *filename, VOption *options = nullptr) const; /** * Save image in jpeg2000 format. * * **Optional parameters** * - **tile_width** -- Tile width in pixels, int. * - **profile** -- Filename of ICC profile to embed, const char *. * - **tile_height** -- Tile height in pixels, int. * - **lossless** -- Enable lossless compression, bool. * - **Q** -- Q factor, int. * - **subsample_mode** -- Select chroma subsample operation mode, VipsForeignSubsample. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param options Set of options. * @return Buffer to save to. */ VipsBlob *jp2ksave_buffer(VOption *options = nullptr) const; /** * Save image in jpeg2000 format. * * **Optional parameters** * - **tile_width** -- Tile width in pixels, int. * - **profile** -- Filename of ICC profile to embed, const char *. * - **tile_height** -- Tile height in pixels, int. * - **lossless** -- Enable lossless compression, bool. * - **Q** -- Q factor, int. * - **subsample_mode** -- Select chroma subsample operation mode, VipsForeignSubsample. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param target Target to save to. * @param options Set of options. */ void jp2ksave_target(VTarget target, VOption *options = nullptr) const; /** * Load jpeg from file. * * **Optional parameters** * - **shrink** -- Shrink factor on load, int. * - **autorotate** -- Rotate image using exif orientation, bool. * - **unlimited** -- Remove all denial of service limits, bool. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param filename Filename to load from. * @param options Set of options. * @return Output image. */ static VImage jpegload(const char *filename, VOption *options = nullptr); /** * Load jpeg from buffer. * * **Optional parameters** * - **shrink** -- Shrink factor on load, int. * - **autorotate** -- Rotate image using exif orientation, bool. * - **unlimited** -- Remove all denial of service limits, bool. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param buffer Buffer to load from. * @param options Set of options. * @return Output image. */ static VImage jpegload_buffer(VipsBlob *buffer, VOption *options = nullptr); /** * Load image from jpeg source. * * **Optional parameters** * - **shrink** -- Shrink factor on load, int. * - **autorotate** -- Rotate image using exif orientation, bool. * - **unlimited** -- Remove all denial of service limits, bool. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param source Source to load from. * @param options Set of options. * @return Output image. */ static VImage jpegload_source(VSource source, VOption *options = nullptr); /** * Save image to jpeg file. * * **Optional parameters** * - **Q** -- Q factor, int. * - **profile** -- Filename of ICC profile to embed, const char *. * - **optimize_coding** -- Compute optimal Huffman coding tables, bool. * - **interlace** -- Generate an interlaced (progressive) jpeg, bool. * - **trellis_quant** -- Apply trellis quantisation to each 8x8 block, bool. * - **overshoot_deringing** -- Apply overshooting to samples with extreme values, bool. * - **optimize_scans** -- Split spectrum of DCT coefficients into separate scans, bool. * - **quant_table** -- Use predefined quantization table with given index, int. * - **subsample_mode** -- Select chroma subsample operation mode, VipsForeignSubsample. * - **restart_interval** -- Add restart markers every specified number of mcu, int. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param filename Filename to save to. * @param options Set of options. */ void jpegsave(const char *filename, VOption *options = nullptr) const; /** * Save image to jpeg buffer. * * **Optional parameters** * - **Q** -- Q factor, int. * - **profile** -- Filename of ICC profile to embed, const char *. * - **optimize_coding** -- Compute optimal Huffman coding tables, bool. * - **interlace** -- Generate an interlaced (progressive) jpeg, bool. * - **trellis_quant** -- Apply trellis quantisation to each 8x8 block, bool. * - **overshoot_deringing** -- Apply overshooting to samples with extreme values, bool. * - **optimize_scans** -- Split spectrum of DCT coefficients into separate scans, bool. * - **quant_table** -- Use predefined quantization table with given index, int. * - **subsample_mode** -- Select chroma subsample operation mode, VipsForeignSubsample. * - **restart_interval** -- Add restart markers every specified number of mcu, int. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param options Set of options. * @return Buffer to save to. */ VipsBlob *jpegsave_buffer(VOption *options = nullptr) const; /** * Save image to jpeg mime. * * **Optional parameters** * - **Q** -- Q factor, int. * - **profile** -- Filename of ICC profile to embed, const char *. * - **optimize_coding** -- Compute optimal Huffman coding tables, bool. * - **interlace** -- Generate an interlaced (progressive) jpeg, bool. * - **trellis_quant** -- Apply trellis quantisation to each 8x8 block, bool. * - **overshoot_deringing** -- Apply overshooting to samples with extreme values, bool. * - **optimize_scans** -- Split spectrum of DCT coefficients into separate scans, bool. * - **quant_table** -- Use predefined quantization table with given index, int. * - **subsample_mode** -- Select chroma subsample operation mode, VipsForeignSubsample. * - **restart_interval** -- Add restart markers every specified number of mcu, int. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param options Set of options. */ void jpegsave_mime(VOption *options = nullptr) const; /** * Save image to jpeg target. * * **Optional parameters** * - **Q** -- Q factor, int. * - **profile** -- Filename of ICC profile to embed, const char *. * - **optimize_coding** -- Compute optimal Huffman coding tables, bool. * - **interlace** -- Generate an interlaced (progressive) jpeg, bool. * - **trellis_quant** -- Apply trellis quantisation to each 8x8 block, bool. * - **overshoot_deringing** -- Apply overshooting to samples with extreme values, bool. * - **optimize_scans** -- Split spectrum of DCT coefficients into separate scans, bool. * - **quant_table** -- Use predefined quantization table with given index, int. * - **subsample_mode** -- Select chroma subsample operation mode, VipsForeignSubsample. * - **restart_interval** -- Add restart markers every specified number of mcu, int. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param target Target to save to. * @param options Set of options. */ void jpegsave_target(VTarget target, VOption *options = nullptr) const; /** * Load jpeg-xl image. * * **Optional parameters** * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param filename Filename to load from. * @param options Set of options. * @return Output image. */ static VImage jxlload(const char *filename, VOption *options = nullptr); /** * Load jpeg-xl image. * * **Optional parameters** * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param buffer Buffer to load from. * @param options Set of options. * @return Output image. */ static VImage jxlload_buffer(VipsBlob *buffer, VOption *options = nullptr); /** * Load jpeg-xl image. * * **Optional parameters** * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param source Source to load from. * @param options Set of options. * @return Output image. */ static VImage jxlload_source(VSource source, VOption *options = nullptr); /** * Save image in jpeg-xl format. * * **Optional parameters** * - **tier** -- Decode speed tier, int. * - **distance** -- Target butteraugli distance, double. * - **profile** -- Filename of ICC profile to embed, const char *. * - **effort** -- Encoding effort, int. * - **lossless** -- Enable lossless compression, bool. * - **Q** -- Quality factor, int. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param filename Filename to load from. * @param options Set of options. */ void jxlsave(const char *filename, VOption *options = nullptr) const; /** * Save image in jpeg-xl format. * * **Optional parameters** * - **tier** -- Decode speed tier, int. * - **distance** -- Target butteraugli distance, double. * - **profile** -- Filename of ICC profile to embed, const char *. * - **effort** -- Encoding effort, int. * - **lossless** -- Enable lossless compression, bool. * - **Q** -- Quality factor, int. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param options Set of options. * @return Buffer to save to. */ VipsBlob *jxlsave_buffer(VOption *options = nullptr) const; /** * Save image in jpeg-xl format. * * **Optional parameters** * - **tier** -- Decode speed tier, int. * - **distance** -- Target butteraugli distance, double. * - **profile** -- Filename of ICC profile to embed, const char *. * - **effort** -- Encoding effort, int. * - **lossless** -- Enable lossless compression, bool. * - **Q** -- Quality factor, int. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param target Target to save to. * @param options Set of options. */ void jxlsave_target(VTarget target, VOption *options = nullptr) const; /** * Label regions in an image. * @param options Set of options. * @return Mask of region labels. */ VImage labelregions(VOption *options = nullptr) const; /** * Calculate (a * in + b). * * **Optional parameters** * - **uchar** -- Output should be uchar, bool. * * @param a Multiply by this. * @param b Add this. * @param options Set of options. * @return Output image. */ VImage linear(std::vector a, std::vector b, VOption *options = nullptr) const; /** * Cache an image as a set of lines. * * **Optional parameters** * - **tile_height** -- Tile height in pixels, int. * - **access** -- Expected access pattern, VipsAccess. * - **threaded** -- Allow threaded access, bool. * - **persistent** -- Keep cache between evaluations, bool. * * @param options Set of options. * @return Output image. */ VImage linecache(VOption *options = nullptr) const; /** * Make a laplacian of gaussian image. * * **Optional parameters** * - **separable** -- Generate separable Gaussian, bool. * - **precision** -- Generate with this precision, VipsPrecision. * * @param sigma Radius of Gaussian. * @param min_ampl Minimum amplitude of Gaussian. * @param options Set of options. * @return Output image. */ static VImage logmat(double sigma, double min_ampl, VOption *options = nullptr); /** * Load file with imagemagick. * * **Optional parameters** * - **density** -- Canvas resolution for rendering vector formats like SVG, const char *. * - **page** -- First page to load, int. * - **n** -- Number of pages to load, -1 for all, int. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param filename Filename to load from. * @param options Set of options. * @return Output image. */ static VImage magickload(const char *filename, VOption *options = nullptr); /** * Load buffer with imagemagick. * * **Optional parameters** * - **density** -- Canvas resolution for rendering vector formats like SVG, const char *. * - **page** -- First page to load, int. * - **n** -- Number of pages to load, -1 for all, int. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param buffer Buffer to load from. * @param options Set of options. * @return Output image. */ static VImage magickload_buffer(VipsBlob *buffer, VOption *options = nullptr); /** * Save file with imagemagick. * * **Optional parameters** * - **format** -- Format to save in, const char *. * - **quality** -- Quality to use, int. * - **optimize_gif_frames** -- Apply GIF frames optimization, bool. * - **optimize_gif_transparency** -- Apply GIF transparency optimization, bool. * - **bitdepth** -- Number of bits per pixel, int. * - **profile** -- Filename of ICC profile to embed, const char *. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param filename Filename to save to. * @param options Set of options. */ void magicksave(const char *filename, VOption *options = nullptr) const; /** * Save image to magick buffer. * * **Optional parameters** * - **format** -- Format to save in, const char *. * - **quality** -- Quality to use, int. * - **optimize_gif_frames** -- Apply GIF frames optimization, bool. * - **optimize_gif_transparency** -- Apply GIF transparency optimization, bool. * - **bitdepth** -- Number of bits per pixel, int. * - **profile** -- Filename of ICC profile to embed, const char *. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param options Set of options. * @return Buffer to save to. */ VipsBlob *magicksave_buffer(VOption *options = nullptr) const; /** * Resample with a map image. * * **Optional parameters** * - **interpolate** -- Interpolate pixels with this, VInterpolate. * - **background** -- Background value, std::vector. * - **premultiplied** -- Images have premultiplied alpha, bool. * - **extend** -- How to generate the extra pixels, VipsExtend. * * @param index Index pixels with this. * @param options Set of options. * @return Output image. */ VImage mapim(VImage index, VOption *options = nullptr) const; /** * Map an image though a lut. * * **Optional parameters** * - **band** -- Apply one-band lut to this band of in, int. * * @param lut Look-up table image. * @param options Set of options. * @return Output image. */ VImage maplut(VImage lut, VOption *options = nullptr) const; /** * Make a butterworth filter. * * **Optional parameters** * - **uchar** -- Output an unsigned char image, bool. * - **nodc** -- Remove DC component, bool. * - **reject** -- Invert the sense of the filter, bool. * - **optical** -- Rotate quadrants to optical space, bool. * * @param width Image width in pixels. * @param height Image height in pixels. * @param order Filter order. * @param frequency_cutoff Frequency cutoff. * @param amplitude_cutoff Amplitude cutoff. * @param options Set of options. * @return Output image. */ static VImage mask_butterworth(int width, int height, double order, double frequency_cutoff, double amplitude_cutoff, VOption *options = nullptr); /** * Make a butterworth_band filter. * * **Optional parameters** * - **uchar** -- Output an unsigned char image, bool. * - **nodc** -- Remove DC component, bool. * - **reject** -- Invert the sense of the filter, bool. * - **optical** -- Rotate quadrants to optical space, bool. * * @param width Image width in pixels. * @param height Image height in pixels. * @param order Filter order. * @param frequency_cutoff_x Frequency cutoff x. * @param frequency_cutoff_y Frequency cutoff y. * @param radius Radius of circle. * @param amplitude_cutoff Amplitude cutoff. * @param options Set of options. * @return Output image. */ static VImage mask_butterworth_band(int width, int height, double order, double frequency_cutoff_x, double frequency_cutoff_y, double radius, double amplitude_cutoff, VOption *options = nullptr); /** * Make a butterworth ring filter. * * **Optional parameters** * - **uchar** -- Output an unsigned char image, bool. * - **nodc** -- Remove DC component, bool. * - **reject** -- Invert the sense of the filter, bool. * - **optical** -- Rotate quadrants to optical space, bool. * * @param width Image width in pixels. * @param height Image height in pixels. * @param order Filter order. * @param frequency_cutoff Frequency cutoff. * @param amplitude_cutoff Amplitude cutoff. * @param ringwidth Ringwidth. * @param options Set of options. * @return Output image. */ static VImage mask_butterworth_ring(int width, int height, double order, double frequency_cutoff, double amplitude_cutoff, double ringwidth, VOption *options = nullptr); /** * Make fractal filter. * * **Optional parameters** * - **uchar** -- Output an unsigned char image, bool. * - **nodc** -- Remove DC component, bool. * - **reject** -- Invert the sense of the filter, bool. * - **optical** -- Rotate quadrants to optical space, bool. * * @param width Image width in pixels. * @param height Image height in pixels. * @param fractal_dimension Fractal dimension. * @param options Set of options. * @return Output image. */ static VImage mask_fractal(int width, int height, double fractal_dimension, VOption *options = nullptr); /** * Make a gaussian filter. * * **Optional parameters** * - **uchar** -- Output an unsigned char image, bool. * - **nodc** -- Remove DC component, bool. * - **reject** -- Invert the sense of the filter, bool. * - **optical** -- Rotate quadrants to optical space, bool. * * @param width Image width in pixels. * @param height Image height in pixels. * @param frequency_cutoff Frequency cutoff. * @param amplitude_cutoff Amplitude cutoff. * @param options Set of options. * @return Output image. */ static VImage mask_gaussian(int width, int height, double frequency_cutoff, double amplitude_cutoff, VOption *options = nullptr); /** * Make a gaussian filter. * * **Optional parameters** * - **uchar** -- Output an unsigned char image, bool. * - **nodc** -- Remove DC component, bool. * - **reject** -- Invert the sense of the filter, bool. * - **optical** -- Rotate quadrants to optical space, bool. * * @param width Image width in pixels. * @param height Image height in pixels. * @param frequency_cutoff_x Frequency cutoff x. * @param frequency_cutoff_y Frequency cutoff y. * @param radius Radius of circle. * @param amplitude_cutoff Amplitude cutoff. * @param options Set of options. * @return Output image. */ static VImage mask_gaussian_band(int width, int height, double frequency_cutoff_x, double frequency_cutoff_y, double radius, double amplitude_cutoff, VOption *options = nullptr); /** * Make a gaussian ring filter. * * **Optional parameters** * - **uchar** -- Output an unsigned char image, bool. * - **nodc** -- Remove DC component, bool. * - **reject** -- Invert the sense of the filter, bool. * - **optical** -- Rotate quadrants to optical space, bool. * * @param width Image width in pixels. * @param height Image height in pixels. * @param frequency_cutoff Frequency cutoff. * @param amplitude_cutoff Amplitude cutoff. * @param ringwidth Ringwidth. * @param options Set of options. * @return Output image. */ static VImage mask_gaussian_ring(int width, int height, double frequency_cutoff, double amplitude_cutoff, double ringwidth, VOption *options = nullptr); /** * Make an ideal filter. * * **Optional parameters** * - **uchar** -- Output an unsigned char image, bool. * - **nodc** -- Remove DC component, bool. * - **reject** -- Invert the sense of the filter, bool. * - **optical** -- Rotate quadrants to optical space, bool. * * @param width Image width in pixels. * @param height Image height in pixels. * @param frequency_cutoff Frequency cutoff. * @param options Set of options. * @return Output image. */ static VImage mask_ideal(int width, int height, double frequency_cutoff, VOption *options = nullptr); /** * Make an ideal band filter. * * **Optional parameters** * - **uchar** -- Output an unsigned char image, bool. * - **nodc** -- Remove DC component, bool. * - **reject** -- Invert the sense of the filter, bool. * - **optical** -- Rotate quadrants to optical space, bool. * * @param width Image width in pixels. * @param height Image height in pixels. * @param frequency_cutoff_x Frequency cutoff x. * @param frequency_cutoff_y Frequency cutoff y. * @param radius Radius of circle. * @param options Set of options. * @return Output image. */ static VImage mask_ideal_band(int width, int height, double frequency_cutoff_x, double frequency_cutoff_y, double radius, VOption *options = nullptr); /** * Make an ideal ring filter. * * **Optional parameters** * - **uchar** -- Output an unsigned char image, bool. * - **nodc** -- Remove DC component, bool. * - **reject** -- Invert the sense of the filter, bool. * - **optical** -- Rotate quadrants to optical space, bool. * * @param width Image width in pixels. * @param height Image height in pixels. * @param frequency_cutoff Frequency cutoff. * @param ringwidth Ringwidth. * @param options Set of options. * @return Output image. */ static VImage mask_ideal_ring(int width, int height, double frequency_cutoff, double ringwidth, VOption *options = nullptr); /** * First-order match of two images. * * **Optional parameters** * - **hwindow** -- Half window size, int. * - **harea** -- Half area size, int. * - **search** -- Search to improve tie-points, bool. * - **interpolate** -- Interpolate pixels with this, VInterpolate. * * @param sec Secondary image. * @param xr1 Position of first reference tie-point. * @param yr1 Position of first reference tie-point. * @param xs1 Position of first secondary tie-point. * @param ys1 Position of first secondary tie-point. * @param xr2 Position of second reference tie-point. * @param yr2 Position of second reference tie-point. * @param xs2 Position of second secondary tie-point. * @param ys2 Position of second secondary tie-point. * @param options Set of options. * @return Output image. */ VImage match(VImage sec, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, VOption *options = nullptr) const; /** * Apply a math operation to an image. * @param math Math to perform. * @param options Set of options. * @return Output image. */ VImage math(VipsOperationMath math, VOption *options = nullptr) const; /** * Binary math operations. * @param right Right-hand image argument. * @param math2 Math to perform. * @param options Set of options. * @return Output image. */ VImage math2(VImage right, VipsOperationMath2 math2, VOption *options = nullptr) const; /** * Binary math operations with a constant. * @param math2 Math to perform. * @param c Array of constants. * @param options Set of options. * @return Output image. */ VImage math2_const(VipsOperationMath2 math2, std::vector c, VOption *options = nullptr) const; /** * Load mat from file. * * **Optional parameters** * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param filename Filename to load from. * @param options Set of options. * @return Output image. */ static VImage matload(const char *filename, VOption *options = nullptr); /** * Invert an matrix. * @param options Set of options. * @return Output matrix. */ VImage matrixinvert(VOption *options = nullptr) const; /** * Load matrix. * * **Optional parameters** * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param filename Filename to load from. * @param options Set of options. * @return Output image. */ static VImage matrixload(const char *filename, VOption *options = nullptr); /** * Load matrix. * * **Optional parameters** * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param source Source to load from. * @param options Set of options. * @return Output image. */ static VImage matrixload_source(VSource source, VOption *options = nullptr); /** * Print matrix. * * **Optional parameters** * - **profile** -- Filename of ICC profile to embed, const char *. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param options Set of options. */ void matrixprint(VOption *options = nullptr) const; /** * Save image to matrix. * * **Optional parameters** * - **profile** -- Filename of ICC profile to embed, const char *. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param filename Filename to save to. * @param options Set of options. */ void matrixsave(const char *filename, VOption *options = nullptr) const; /** * Save image to matrix. * * **Optional parameters** * - **profile** -- Filename of ICC profile to embed, const char *. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param target Target to save to. * @param options Set of options. */ void matrixsave_target(VTarget target, VOption *options = nullptr) const; /** * Find image maximum. * * **Optional parameters** * - **size** -- Number of maximum values to find, int. * * @param options Set of options. * @return Output value. */ double max(VOption *options = nullptr) const; /** * Measure a set of patches on a color chart. * * **Optional parameters** * - **left** -- Left edge of extract area, int. * - **top** -- Top edge of extract area, int. * - **width** -- Width of extract area, int. * - **height** -- Height of extract area, int. * * @param h Number of patches across chart. * @param v Number of patches down chart. * @param options Set of options. * @return Output array of statistics. */ VImage measure(int h, int v, VOption *options = nullptr) const; /** * Merge two images. * * **Optional parameters** * - **mblend** -- Maximum blend size, int. * * @param sec Secondary image. * @param direction Horizontal or vertical merge. * @param dx Horizontal displacement from sec to ref. * @param dy Vertical displacement from sec to ref. * @param options Set of options. * @return Output image. */ VImage merge(VImage sec, VipsDirection direction, int dx, int dy, VOption *options = nullptr) const; /** * Find image minimum. * * **Optional parameters** * - **size** -- Number of minimum values to find, int. * * @param options Set of options. * @return Output value. */ double min(VOption *options = nullptr) const; /** * Morphology operation. * @param mask Input matrix image. * @param morph Morphological operation to perform. * @param options Set of options. * @return Output image. */ VImage morph(VImage mask, VipsOperationMorphology morph, VOption *options = nullptr) const; /** * Mosaic two images. * * **Optional parameters** * - **hwindow** -- Half window size, int. * - **harea** -- Half area size, int. * - **mblend** -- Maximum blend size, int. * - **bandno** -- Band to search for features on, int. * * @param sec Secondary image. * @param direction Horizontal or vertical mosaic. * @param xref Position of reference tie-point. * @param yref Position of reference tie-point. * @param xsec Position of secondary tie-point. * @param ysec Position of secondary tie-point. * @param options Set of options. * @return Output image. */ VImage mosaic(VImage sec, VipsDirection direction, int xref, int yref, int xsec, int ysec, VOption *options = nullptr) const; /** * First-order mosaic of two images. * * **Optional parameters** * - **hwindow** -- Half window size, int. * - **harea** -- Half area size, int. * - **search** -- Search to improve tie-points, bool. * - **interpolate** -- Interpolate pixels with this, VInterpolate. * - **mblend** -- Maximum blend size, int. * * @param sec Secondary image. * @param direction Horizontal or vertical mosaic. * @param xr1 Position of first reference tie-point. * @param yr1 Position of first reference tie-point. * @param xs1 Position of first secondary tie-point. * @param ys1 Position of first secondary tie-point. * @param xr2 Position of second reference tie-point. * @param yr2 Position of second reference tie-point. * @param xs2 Position of second secondary tie-point. * @param ys2 Position of second secondary tie-point. * @param options Set of options. * @return Output image. */ VImage mosaic1(VImage sec, VipsDirection direction, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, VOption *options = nullptr) const; /** * Pick most-significant byte from an image. * * **Optional parameters** * - **band** -- Band to msb, int. * * @param options Set of options. * @return Output image. */ VImage msb(VOption *options = nullptr) const; /** * Multiply two images. * @param right Right-hand image argument. * @param options Set of options. * @return Output image. */ VImage multiply(VImage right, VOption *options = nullptr) const; /** * Load nifti volume. * * **Optional parameters** * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param filename Filename to load from. * @param options Set of options. * @return Output image. */ static VImage niftiload(const char *filename, VOption *options = nullptr); /** * Load nifti volumes. * * **Optional parameters** * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param source Source to load from. * @param options Set of options. * @return Output image. */ static VImage niftiload_source(VSource source, VOption *options = nullptr); /** * Save image to nifti file. * * **Optional parameters** * - **profile** -- Filename of ICC profile to embed, const char *. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param filename Filename to save to. * @param options Set of options. */ void niftisave(const char *filename, VOption *options = nullptr) const; /** * Load an openexr image. * * **Optional parameters** * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param filename Filename to load from. * @param options Set of options. * @return Output image. */ static VImage openexrload(const char *filename, VOption *options = nullptr); /** * Load file with openslide. * * **Optional parameters** * - **level** -- Load this level from the file, int. * - **autocrop** -- Crop to image bounds, bool. * - **associated** -- Load this associated image, const char *. * - **attach_associated** -- Attach all associated images, bool. * - **rgb** -- Output RGB (not RGBA), bool. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param filename Filename to load from. * @param options Set of options. * @return Output image. */ static VImage openslideload(const char *filename, VOption *options = nullptr); /** * Load source with openslide. * * **Optional parameters** * - **level** -- Load this level from the file, int. * - **autocrop** -- Crop to image bounds, bool. * - **associated** -- Load this associated image, const char *. * - **attach_associated** -- Attach all associated images, bool. * - **rgb** -- Output RGB (not RGBA), bool. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param source Source to load from. * @param options Set of options. * @return Output image. */ static VImage openslideload_source(VSource source, VOption *options = nullptr); /** * Load pdf from file. * * **Optional parameters** * - **page** -- First page to load, int. * - **n** -- Number of pages to load, -1 for all, int. * - **dpi** -- DPI to render at, double. * - **scale** -- Factor to scale by, double. * - **background** -- Background colour, std::vector. * - **password** -- Password to decrypt with, const char *. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param filename Filename to load from. * @param options Set of options. * @return Output image. */ static VImage pdfload(const char *filename, VOption *options = nullptr); /** * Load pdf from buffer. * * **Optional parameters** * - **page** -- First page to load, int. * - **n** -- Number of pages to load, -1 for all, int. * - **dpi** -- DPI to render at, double. * - **scale** -- Factor to scale by, double. * - **background** -- Background colour, std::vector. * - **password** -- Password to decrypt with, const char *. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param buffer Buffer to load from. * @param options Set of options. * @return Output image. */ static VImage pdfload_buffer(VipsBlob *buffer, VOption *options = nullptr); /** * Load pdf from source. * * **Optional parameters** * - **page** -- First page to load, int. * - **n** -- Number of pages to load, -1 for all, int. * - **dpi** -- DPI to render at, double. * - **scale** -- Factor to scale by, double. * - **background** -- Background colour, std::vector. * - **password** -- Password to decrypt with, const char *. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param source Source to load from. * @param options Set of options. * @return Output image. */ static VImage pdfload_source(VSource source, VOption *options = nullptr); /** * Find threshold for percent of pixels. * @param percent Percent of pixels. * @param options Set of options. * @return Threshold above which lie percent of pixels. */ int percent(double percent, VOption *options = nullptr) const; /** * Make a perlin noise image. * * **Optional parameters** * - **cell_size** -- Size of Perlin cells, int. * - **uchar** -- Output an unsigned char image, bool. * - **seed** -- Random number seed, int. * * @param width Image width in pixels. * @param height Image height in pixels. * @param options Set of options. * @return Output image. */ static VImage perlin(int width, int height, VOption *options = nullptr); /** * Calculate phase correlation. * @param in2 Second input image. * @param options Set of options. * @return Output image. */ VImage phasecor(VImage in2, VOption *options = nullptr) const; /** * Load png from file. * * **Optional parameters** * - **unlimited** -- Remove all denial of service limits, bool. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param filename Filename to load from. * @param options Set of options. * @return Output image. */ static VImage pngload(const char *filename, VOption *options = nullptr); /** * Load png from buffer. * * **Optional parameters** * - **unlimited** -- Remove all denial of service limits, bool. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param buffer Buffer to load from. * @param options Set of options. * @return Output image. */ static VImage pngload_buffer(VipsBlob *buffer, VOption *options = nullptr); /** * Load png from source. * * **Optional parameters** * - **unlimited** -- Remove all denial of service limits, bool. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param source Source to load from. * @param options Set of options. * @return Output image. */ static VImage pngload_source(VSource source, VOption *options = nullptr); /** * Save image to file as png. * * **Optional parameters** * - **compression** -- Compression factor, int. * - **interlace** -- Interlace image, bool. * - **profile** -- Filename of ICC profile to embed, const char *. * - **filter** -- libspng row filter flag(s), VipsForeignPngFilter. * - **palette** -- Quantise to 8bpp palette, bool. * - **Q** -- Quantisation quality, int. * - **dither** -- Amount of dithering, double. * - **bitdepth** -- Write as a 1, 2, 4, 8 or 16 bit image, int. * - **effort** -- Quantisation CPU effort, int. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param filename Filename to save to. * @param options Set of options. */ void pngsave(const char *filename, VOption *options = nullptr) const; /** * Save image to buffer as png. * * **Optional parameters** * - **compression** -- Compression factor, int. * - **interlace** -- Interlace image, bool. * - **profile** -- Filename of ICC profile to embed, const char *. * - **filter** -- libspng row filter flag(s), VipsForeignPngFilter. * - **palette** -- Quantise to 8bpp palette, bool. * - **Q** -- Quantisation quality, int. * - **dither** -- Amount of dithering, double. * - **bitdepth** -- Write as a 1, 2, 4, 8 or 16 bit image, int. * - **effort** -- Quantisation CPU effort, int. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param options Set of options. * @return Buffer to save to. */ VipsBlob *pngsave_buffer(VOption *options = nullptr) const; /** * Save image to target as png. * * **Optional parameters** * - **compression** -- Compression factor, int. * - **interlace** -- Interlace image, bool. * - **profile** -- Filename of ICC profile to embed, const char *. * - **filter** -- libspng row filter flag(s), VipsForeignPngFilter. * - **palette** -- Quantise to 8bpp palette, bool. * - **Q** -- Quantisation quality, int. * - **dither** -- Amount of dithering, double. * - **bitdepth** -- Write as a 1, 2, 4, 8 or 16 bit image, int. * - **effort** -- Quantisation CPU effort, int. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param target Target to save to. * @param options Set of options. */ void pngsave_target(VTarget target, VOption *options = nullptr) const; /** * Load ppm from file. * * **Optional parameters** * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param filename Filename to load from. * @param options Set of options. * @return Output image. */ static VImage ppmload(const char *filename, VOption *options = nullptr); /** * Load ppm base class. * * **Optional parameters** * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param source Source to load from. * @param options Set of options. * @return Output image. */ static VImage ppmload_source(VSource source, VOption *options = nullptr); /** * Save image to ppm file. * * **Optional parameters** * - **format** -- Format to save in, VipsForeignPpmFormat. * - **ascii** -- Save as ascii, bool. * - **profile** -- Filename of ICC profile to embed, const char *. * - **bitdepth** -- Set to 1 to write as a 1 bit image, int. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param filename Filename to save to. * @param options Set of options. */ void ppmsave(const char *filename, VOption *options = nullptr) const; /** * Save to ppm. * * **Optional parameters** * - **format** -- Format to save in, VipsForeignPpmFormat. * - **ascii** -- Save as ascii, bool. * - **profile** -- Filename of ICC profile to embed, const char *. * - **bitdepth** -- Set to 1 to write as a 1 bit image, int. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param target Target to save to. * @param options Set of options. */ void ppmsave_target(VTarget target, VOption *options = nullptr) const; /** * Premultiply image alpha. * * **Optional parameters** * - **max_alpha** -- Maximum value of alpha channel, double. * * @param options Set of options. * @return Output image. */ VImage premultiply(VOption *options = nullptr) const; /** * Prewitt edge detector. * @param options Set of options. * @return Output image. */ VImage prewitt(VOption *options = nullptr) const; /** * Find image profiles. * @param rows First non-zero pixel in row. * @param options Set of options. * @return First non-zero pixel in column. */ VImage profile(VImage *rows, VOption *options = nullptr) const; /** * Load named icc profile. * @param name Profile name. * @param options Set of options. * @return Loaded profile. */ static VipsBlob *profile_load(const char *name, VOption *options = nullptr); /** * Find image projections. * @param rows Sums of rows. * @param options Set of options. * @return Sums of columns. */ VImage project(VImage *rows, VOption *options = nullptr) const; /** * Resample an image with a quadratic transform. * * **Optional parameters** * - **interpolate** -- Interpolate values with this, VInterpolate. * * @param coeff Coefficient matrix. * @param options Set of options. * @return Output image. */ VImage quadratic(VImage coeff, VOption *options = nullptr) const; /** * Unpack radiance coding to float rgb. * @param options Set of options. * @return Output image. */ VImage rad2float(VOption *options = nullptr) const; /** * Load a radiance image from a file. * * **Optional parameters** * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param filename Filename to load from. * @param options Set of options. * @return Output image. */ static VImage radload(const char *filename, VOption *options = nullptr); /** * Load rad from buffer. * * **Optional parameters** * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param buffer Buffer to load from. * @param options Set of options. * @return Output image. */ static VImage radload_buffer(VipsBlob *buffer, VOption *options = nullptr); /** * Load rad from source. * * **Optional parameters** * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param source Source to load from. * @param options Set of options. * @return Output image. */ static VImage radload_source(VSource source, VOption *options = nullptr); /** * Save image to radiance file. * * **Optional parameters** * - **profile** -- Filename of ICC profile to embed, const char *. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param filename Filename to save to. * @param options Set of options. */ void radsave(const char *filename, VOption *options = nullptr) const; /** * Save image to radiance buffer. * * **Optional parameters** * - **profile** -- Filename of ICC profile to embed, const char *. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param options Set of options. * @return Buffer to save to. */ VipsBlob *radsave_buffer(VOption *options = nullptr) const; /** * Save image to radiance target. * * **Optional parameters** * - **profile** -- Filename of ICC profile to embed, const char *. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param target Target to save to. * @param options Set of options. */ void radsave_target(VTarget target, VOption *options = nullptr) const; /** * Rank filter. * @param width Window width in pixels. * @param height Window height in pixels. * @param index Select pixel at index. * @param options Set of options. * @return Output image. */ VImage rank(int width, int height, int index, VOption *options = nullptr) const; /** * Load raw data from a file. * * **Optional parameters** * - **offset** -- Offset in bytes from start of file, guint64. * - **format** -- Pixel format in image, VipsBandFormat. * - **interpretation** -- Pixel interpretation, VipsInterpretation. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param filename Filename to load from. * @param width Image width in pixels. * @param height Image height in pixels. * @param bands Number of bands in image. * @param options Set of options. * @return Output image. */ static VImage rawload(const char *filename, int width, int height, int bands, VOption *options = nullptr); /** * Save image to raw file. * * **Optional parameters** * - **profile** -- Filename of ICC profile to embed, const char *. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param filename Filename to save to. * @param options Set of options. */ void rawsave(const char *filename, VOption *options = nullptr) const; /** * Write raw image to file descriptor. * * **Optional parameters** * - **profile** -- Filename of ICC profile to embed, const char *. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param fd File descriptor to write to. * @param options Set of options. */ void rawsave_fd(int fd, VOption *options = nullptr) const; /** * Linear recombination with matrix. * @param m Matrix of coefficients. * @param options Set of options. * @return Output image. */ VImage recomb(VImage m, VOption *options = nullptr) const; /** * Reduce an image. * * **Optional parameters** * - **kernel** -- Resampling kernel, VipsKernel. * - **gap** -- Reducing gap, double. * * @param hshrink Horizontal shrink factor. * @param vshrink Vertical shrink factor. * @param options Set of options. * @return Output image. */ VImage reduce(double hshrink, double vshrink, VOption *options = nullptr) const; /** * Shrink an image horizontally. * * **Optional parameters** * - **kernel** -- Resampling kernel, VipsKernel. * - **gap** -- Reducing gap, double. * * @param hshrink Horizontal shrink factor. * @param options Set of options. * @return Output image. */ VImage reduceh(double hshrink, VOption *options = nullptr) const; /** * Shrink an image vertically. * * **Optional parameters** * - **kernel** -- Resampling kernel, VipsKernel. * - **gap** -- Reducing gap, double. * * @param vshrink Vertical shrink factor. * @param options Set of options. * @return Output image. */ VImage reducev(double vshrink, VOption *options = nullptr) const; /** * Relational operation on two images. * @param right Right-hand image argument. * @param relational Relational to perform. * @param options Set of options. * @return Output image. */ VImage relational(VImage right, VipsOperationRelational relational, VOption *options = nullptr) const; /** * Relational operations against a constant. * @param relational Relational to perform. * @param c Array of constants. * @param options Set of options. * @return Output image. */ VImage relational_const(VipsOperationRelational relational, std::vector c, VOption *options = nullptr) const; /** * Remainder after integer division of two images. * @param right Right-hand image argument. * @param options Set of options. * @return Output image. */ VImage remainder(VImage right, VOption *options = nullptr) const; /** * Remainder after integer division of an image and a constant. * @param c Array of constants. * @param options Set of options. * @return Output image. */ VImage remainder_const(std::vector c, VOption *options = nullptr) const; /** * Replicate an image. * @param across Repeat this many times horizontally. * @param down Repeat this many times vertically. * @param options Set of options. * @return Output image. */ VImage replicate(int across, int down, VOption *options = nullptr) const; /** * Resize an image. * * **Optional parameters** * - **kernel** -- Resampling kernel, VipsKernel. * - **gap** -- Reducing gap, double. * - **vscale** -- Vertical scale image by this factor, double. * * @param scale Scale image by this factor. * @param options Set of options. * @return Output image. */ VImage resize(double scale, VOption *options = nullptr) const; /** * Rotate an image. * @param angle Angle to rotate image. * @param options Set of options. * @return Output image. */ VImage rot(VipsAngle angle, VOption *options = nullptr) const; /** * Rotate an image. * * **Optional parameters** * - **angle** -- Angle to rotate image, VipsAngle45. * * @param options Set of options. * @return Output image. */ VImage rot45(VOption *options = nullptr) const; /** * Rotate an image by a number of degrees. * * **Optional parameters** * - **interpolate** -- Interpolate pixels with this, VInterpolate. * - **background** -- Background value, std::vector. * - **odx** -- Horizontal output displacement, double. * - **ody** -- Vertical output displacement, double. * - **idx** -- Horizontal input displacement, double. * - **idy** -- Vertical input displacement, double. * * @param angle Rotate anticlockwise by this many degrees. * @param options Set of options. * @return Output image. */ VImage rotate(double angle, VOption *options = nullptr) const; /** * Perform a round function on an image. * @param round Rounding operation to perform. * @param options Set of options. * @return Output image. */ VImage round(VipsOperationRound round, VOption *options = nullptr) const; /** * Transform srgb to hsv. * @param options Set of options. * @return Output image. */ VImage sRGB2HSV(VOption *options = nullptr) const; /** * Convert an srgb image to scrgb. * @param options Set of options. * @return Output image. */ VImage sRGB2scRGB(VOption *options = nullptr) const; /** * Convert scrgb to bw. * * **Optional parameters** * - **depth** -- Output device space depth in bits, int. * * @param options Set of options. * @return Output image. */ VImage scRGB2BW(VOption *options = nullptr) const; /** * Transform scrgb to xyz. * @param options Set of options. * @return Output image. */ VImage scRGB2XYZ(VOption *options = nullptr) const; /** * Convert an scrgb image to srgb. * * **Optional parameters** * - **depth** -- Output device space depth in bits, int. * * @param options Set of options. * @return Output image. */ VImage scRGB2sRGB(VOption *options = nullptr) const; /** * Scale an image to uchar. * * **Optional parameters** * - **exp** -- Exponent for log scale, double. * - **log** -- Log scale, bool. * * @param options Set of options. * @return Output image. */ VImage scale(VOption *options = nullptr) const; /** * Scharr edge detector. * @param options Set of options. * @return Output image. */ VImage scharr(VOption *options = nullptr) const; /** * Check sequential access. * * **Optional parameters** * - **tile_height** -- Tile height in pixels, int. * * @param options Set of options. * @return Output image. */ VImage sequential(VOption *options = nullptr) const; /** * Unsharp masking for print. * * **Optional parameters** * - **sigma** -- Sigma of Gaussian, double. * - **x1** -- Flat/jaggy threshold, double. * - **y2** -- Maximum brightening, double. * - **y3** -- Maximum darkening, double. * - **m1** -- Slope for flat areas, double. * - **m2** -- Slope for jaggy areas, double. * * @param options Set of options. * @return Output image. */ VImage sharpen(VOption *options = nullptr) const; /** * Shrink an image. * * **Optional parameters** * - **ceil** -- Round-up output dimensions, bool. * * @param hshrink Horizontal shrink factor. * @param vshrink Vertical shrink factor. * @param options Set of options. * @return Output image. */ VImage shrink(double hshrink, double vshrink, VOption *options = nullptr) const; /** * Shrink an image horizontally. * * **Optional parameters** * - **ceil** -- Round-up output dimensions, bool. * * @param hshrink Horizontal shrink factor. * @param options Set of options. * @return Output image. */ VImage shrinkh(int hshrink, VOption *options = nullptr) const; /** * Shrink an image vertically. * * **Optional parameters** * - **ceil** -- Round-up output dimensions, bool. * * @param vshrink Vertical shrink factor. * @param options Set of options. * @return Output image. */ VImage shrinkv(int vshrink, VOption *options = nullptr) const; /** * Unit vector of pixel. * @param options Set of options. * @return Output image. */ VImage sign(VOption *options = nullptr) const; /** * Similarity transform of an image. * * **Optional parameters** * - **scale** -- Scale by this factor, double. * - **angle** -- Rotate anticlockwise by this many degrees, double. * - **interpolate** -- Interpolate pixels with this, VInterpolate. * - **background** -- Background value, std::vector. * - **odx** -- Horizontal output displacement, double. * - **ody** -- Vertical output displacement, double. * - **idx** -- Horizontal input displacement, double. * - **idy** -- Vertical input displacement, double. * * @param options Set of options. * @return Output image. */ VImage similarity(VOption *options = nullptr) const; /** * Make a 2d sine wave. * * **Optional parameters** * - **uchar** -- Output an unsigned char image, bool. * - **hfreq** -- Horizontal spatial frequency, double. * - **vfreq** -- Vertical spatial frequency, double. * * @param width Image width in pixels. * @param height Image height in pixels. * @param options Set of options. * @return Output image. */ static VImage sines(int width, int height, VOption *options = nullptr); /** * Extract an area from an image. * * **Optional parameters** * - **interesting** -- How to measure interestingness, VipsInteresting. * - **premultiplied** -- Input image already has premultiplied alpha, bool. * * @param width Width of extract area. * @param height Height of extract area. * @param options Set of options. * @return Output image. */ VImage smartcrop(int width, int height, VOption *options = nullptr) const; /** * Sobel edge detector. * @param options Set of options. * @return Output image. */ VImage sobel(VOption *options = nullptr) const; /** * Spatial correlation. * @param ref Input reference image. * @param options Set of options. * @return Output image. */ VImage spcor(VImage ref, VOption *options = nullptr) const; /** * Make displayable power spectrum. * @param options Set of options. * @return Output image. */ VImage spectrum(VOption *options = nullptr) const; /** * Find many image stats. * @param options Set of options. * @return Output array of statistics. */ VImage stats(VOption *options = nullptr) const; /** * Statistical difference. * * **Optional parameters** * - **s0** -- New deviation, double. * - **b** -- Weight of new deviation, double. * - **m0** -- New mean, double. * - **a** -- Weight of new mean, double. * * @param width Window width in pixels. * @param height Window height in pixels. * @param options Set of options. * @return Output image. */ VImage stdif(int width, int height, VOption *options = nullptr) const; /** * Subsample an image. * * **Optional parameters** * - **point** -- Point sample, bool. * * @param xfac Horizontal subsample factor. * @param yfac Vertical subsample factor. * @param options Set of options. * @return Output image. */ VImage subsample(int xfac, int yfac, VOption *options = nullptr) const; /** * Subtract two images. * @param right Right-hand image argument. * @param options Set of options. * @return Output image. */ VImage subtract(VImage right, VOption *options = nullptr) const; /** * Sum an array of images. * @param in Array of input images. * @param options Set of options. * @return Output image. */ static VImage sum(std::vector in, VOption *options = nullptr); /** * Load svg with rsvg. * * **Optional parameters** * - **dpi** -- Render at this DPI, double. * - **scale** -- Scale output by this factor, double. * - **unlimited** -- Allow SVG of any size, bool. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param filename Filename to load from. * @param options Set of options. * @return Output image. */ static VImage svgload(const char *filename, VOption *options = nullptr); /** * Load svg with rsvg. * * **Optional parameters** * - **dpi** -- Render at this DPI, double. * - **scale** -- Scale output by this factor, double. * - **unlimited** -- Allow SVG of any size, bool. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param buffer Buffer to load from. * @param options Set of options. * @return Output image. */ static VImage svgload_buffer(VipsBlob *buffer, VOption *options = nullptr); /** * Load svg from source. * * **Optional parameters** * - **dpi** -- Render at this DPI, double. * - **scale** -- Scale output by this factor, double. * - **unlimited** -- Allow SVG of any size, bool. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param source Source to load from. * @param options Set of options. * @return Output image. */ static VImage svgload_source(VSource source, VOption *options = nullptr); /** * Find the index of the first non-zero pixel in tests. * @param tests Table of images to test. * @param options Set of options. * @return Output image. */ static VImage switch_image(std::vector tests, VOption *options = nullptr); /** * Run an external command. * * **Optional parameters** * - **in** -- Array of input images, std::vector. * - **out_format** -- Format for output filename, const char *. * - **in_format** -- Format for input filename, const char *. * * @param cmd_format Command to run. * @param options Set of options. */ static void system(const char *cmd_format, VOption *options = nullptr); /** * Make a text image. * * **Optional parameters** * - **font** -- Font to render with, const char *. * - **width** -- Maximum image width in pixels, int. * - **height** -- Maximum image height in pixels, int. * - **align** -- Align on the low, centre or high edge, VipsAlign. * - **justify** -- Justify lines, bool. * - **dpi** -- DPI to render at, int. * - **spacing** -- Line spacing, int. * - **fontfile** -- Load this font file, const char *. * - **rgba** -- Enable RGBA output, bool. * - **wrap** -- Wrap lines on word or character boundaries, VipsTextWrap. * * @param text Text to render. * @param options Set of options. * @return Output image. */ static VImage text(const char *text, VOption *options = nullptr); /** * Generate thumbnail from file. * * **Optional parameters** * - **height** -- Size to this height, int. * - **size** -- Only upsize, only downsize, or both, VipsSize. * - **no_rotate** -- Don't use orientation tags to rotate image upright, bool. * - **crop** -- Reduce to fill target rectangle, then crop, VipsInteresting. * - **linear** -- Reduce in linear light, bool. * - **import_profile** -- Fallback import profile, const char *. * - **export_profile** -- Fallback export profile, const char *. * - **intent** -- Rendering intent, VipsIntent. * - **fail_on** -- Error level to fail on, VipsFailOn. * * @param filename Filename to read from. * @param width Size to this width. * @param options Set of options. * @return Output image. */ static VImage thumbnail(const char *filename, int width, VOption *options = nullptr); /** * Generate thumbnail from buffer. * * **Optional parameters** * - **option_string** -- Options that are passed on to the underlying loader, const char *. * - **height** -- Size to this height, int. * - **size** -- Only upsize, only downsize, or both, VipsSize. * - **no_rotate** -- Don't use orientation tags to rotate image upright, bool. * - **crop** -- Reduce to fill target rectangle, then crop, VipsInteresting. * - **linear** -- Reduce in linear light, bool. * - **import_profile** -- Fallback import profile, const char *. * - **export_profile** -- Fallback export profile, const char *. * - **intent** -- Rendering intent, VipsIntent. * - **fail_on** -- Error level to fail on, VipsFailOn. * * @param buffer Buffer to load from. * @param width Size to this width. * @param options Set of options. * @return Output image. */ static VImage thumbnail_buffer(VipsBlob *buffer, int width, VOption *options = nullptr); /** * Generate thumbnail from image. * * **Optional parameters** * - **height** -- Size to this height, int. * - **size** -- Only upsize, only downsize, or both, VipsSize. * - **no_rotate** -- Don't use orientation tags to rotate image upright, bool. * - **crop** -- Reduce to fill target rectangle, then crop, VipsInteresting. * - **linear** -- Reduce in linear light, bool. * - **import_profile** -- Fallback import profile, const char *. * - **export_profile** -- Fallback export profile, const char *. * - **intent** -- Rendering intent, VipsIntent. * - **fail_on** -- Error level to fail on, VipsFailOn. * * @param width Size to this width. * @param options Set of options. * @return Output image. */ VImage thumbnail_image(int width, VOption *options = nullptr) const; /** * Generate thumbnail from source. * * **Optional parameters** * - **option_string** -- Options that are passed on to the underlying loader, const char *. * - **height** -- Size to this height, int. * - **size** -- Only upsize, only downsize, or both, VipsSize. * - **no_rotate** -- Don't use orientation tags to rotate image upright, bool. * - **crop** -- Reduce to fill target rectangle, then crop, VipsInteresting. * - **linear** -- Reduce in linear light, bool. * - **import_profile** -- Fallback import profile, const char *. * - **export_profile** -- Fallback export profile, const char *. * - **intent** -- Rendering intent, VipsIntent. * - **fail_on** -- Error level to fail on, VipsFailOn. * * @param source Source to load from. * @param width Size to this width. * @param options Set of options. * @return Output image. */ static VImage thumbnail_source(VSource source, int width, VOption *options = nullptr); /** * Load tiff from file. * * **Optional parameters** * - **page** -- First page to load, int. * - **subifd** -- Subifd index, int. * - **n** -- Number of pages to load, -1 for all, int. * - **autorotate** -- Rotate image using orientation tag, bool. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param filename Filename to load from. * @param options Set of options. * @return Output image. */ static VImage tiffload(const char *filename, VOption *options = nullptr); /** * Load tiff from buffer. * * **Optional parameters** * - **page** -- First page to load, int. * - **subifd** -- Subifd index, int. * - **n** -- Number of pages to load, -1 for all, int. * - **autorotate** -- Rotate image using orientation tag, bool. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param buffer Buffer to load from. * @param options Set of options. * @return Output image. */ static VImage tiffload_buffer(VipsBlob *buffer, VOption *options = nullptr); /** * Load tiff from source. * * **Optional parameters** * - **page** -- First page to load, int. * - **subifd** -- Subifd index, int. * - **n** -- Number of pages to load, -1 for all, int. * - **autorotate** -- Rotate image using orientation tag, bool. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param source Source to load from. * @param options Set of options. * @return Output image. */ static VImage tiffload_source(VSource source, VOption *options = nullptr); /** * Save image to tiff file. * * **Optional parameters** * - **compression** -- Compression for this file, VipsForeignTiffCompression. * - **Q** -- Q factor, int. * - **predictor** -- Compression prediction, VipsForeignTiffPredictor. * - **tile** -- Write a tiled tiff, bool. * - **tile_width** -- Tile width in pixels, int. * - **profile** -- Filename of ICC profile to embed, const char *. * - **tile_height** -- Tile height in pixels, int. * - **pyramid** -- Write a pyramidal tiff, bool. * - **miniswhite** -- Use 0 for white in 1-bit images, bool. * - **bitdepth** -- Write as a 1, 2, 4 or 8 bit image, int. * - **resunit** -- Resolution unit, VipsForeignTiffResunit. * - **xres** -- Horizontal resolution in pixels/mm, double. * - **yres** -- Vertical resolution in pixels/mm, double. * - **bigtiff** -- Write a bigtiff image, bool. * - **properties** -- Write a properties document to IMAGEDESCRIPTION, bool. * - **region_shrink** -- Method to shrink regions, VipsRegionShrink. * - **level** -- ZSTD compression level, int. * - **lossless** -- Enable WEBP lossless mode, bool. * - **depth** -- Pyramid depth, VipsForeignDzDepth. * - **subifd** -- Save pyr layers as sub-IFDs, bool. * - **premultiply** -- Save with premultiplied alpha, bool. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param filename Filename to save to. * @param options Set of options. */ void tiffsave(const char *filename, VOption *options = nullptr) const; /** * Save image to tiff buffer. * * **Optional parameters** * - **compression** -- Compression for this file, VipsForeignTiffCompression. * - **Q** -- Q factor, int. * - **predictor** -- Compression prediction, VipsForeignTiffPredictor. * - **tile** -- Write a tiled tiff, bool. * - **tile_width** -- Tile width in pixels, int. * - **profile** -- Filename of ICC profile to embed, const char *. * - **tile_height** -- Tile height in pixels, int. * - **pyramid** -- Write a pyramidal tiff, bool. * - **miniswhite** -- Use 0 for white in 1-bit images, bool. * - **bitdepth** -- Write as a 1, 2, 4 or 8 bit image, int. * - **resunit** -- Resolution unit, VipsForeignTiffResunit. * - **xres** -- Horizontal resolution in pixels/mm, double. * - **yres** -- Vertical resolution in pixels/mm, double. * - **bigtiff** -- Write a bigtiff image, bool. * - **properties** -- Write a properties document to IMAGEDESCRIPTION, bool. * - **region_shrink** -- Method to shrink regions, VipsRegionShrink. * - **level** -- ZSTD compression level, int. * - **lossless** -- Enable WEBP lossless mode, bool. * - **depth** -- Pyramid depth, VipsForeignDzDepth. * - **subifd** -- Save pyr layers as sub-IFDs, bool. * - **premultiply** -- Save with premultiplied alpha, bool. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param options Set of options. * @return Buffer to save to. */ VipsBlob *tiffsave_buffer(VOption *options = nullptr) const; /** * Save image to tiff target. * * **Optional parameters** * - **compression** -- Compression for this file, VipsForeignTiffCompression. * - **Q** -- Q factor, int. * - **predictor** -- Compression prediction, VipsForeignTiffPredictor. * - **tile** -- Write a tiled tiff, bool. * - **tile_width** -- Tile width in pixels, int. * - **profile** -- Filename of ICC profile to embed, const char *. * - **tile_height** -- Tile height in pixels, int. * - **pyramid** -- Write a pyramidal tiff, bool. * - **miniswhite** -- Use 0 for white in 1-bit images, bool. * - **bitdepth** -- Write as a 1, 2, 4 or 8 bit image, int. * - **resunit** -- Resolution unit, VipsForeignTiffResunit. * - **xres** -- Horizontal resolution in pixels/mm, double. * - **yres** -- Vertical resolution in pixels/mm, double. * - **bigtiff** -- Write a bigtiff image, bool. * - **properties** -- Write a properties document to IMAGEDESCRIPTION, bool. * - **region_shrink** -- Method to shrink regions, VipsRegionShrink. * - **level** -- ZSTD compression level, int. * - **lossless** -- Enable WEBP lossless mode, bool. * - **depth** -- Pyramid depth, VipsForeignDzDepth. * - **subifd** -- Save pyr layers as sub-IFDs, bool. * - **premultiply** -- Save with premultiplied alpha, bool. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param target Target to save to. * @param options Set of options. */ void tiffsave_target(VTarget target, VOption *options = nullptr) const; /** * Cache an image as a set of tiles. * * **Optional parameters** * - **tile_width** -- Tile width in pixels, int. * - **tile_height** -- Tile height in pixels, int. * - **max_tiles** -- Maximum number of tiles to cache, int. * - **access** -- Expected access pattern, VipsAccess. * - **threaded** -- Allow threaded access, bool. * - **persistent** -- Keep cache between evaluations, bool. * * @param options Set of options. * @return Output image. */ VImage tilecache(VOption *options = nullptr) const; /** * Build a look-up table. * * **Optional parameters** * - **in_max** -- Size of LUT to build, int. * - **out_max** -- Maximum value in output LUT, int. * - **Lb** -- Lowest value in output, double. * - **Lw** -- Highest value in output, double. * - **Ps** -- Position of shadow, double. * - **Pm** -- Position of mid-tones, double. * - **Ph** -- Position of highlights, double. * - **S** -- Adjust shadows by this much, double. * - **M** -- Adjust mid-tones by this much, double. * - **H** -- Adjust highlights by this much, double. * * @param options Set of options. * @return Output image. */ static VImage tonelut(VOption *options = nullptr); /** * Transpose3d an image. * * **Optional parameters** * - **page_height** -- Height of each input page, int. * * @param options Set of options. * @return Output image. */ VImage transpose3d(VOption *options = nullptr) const; /** * Unpremultiply image alpha. * * **Optional parameters** * - **max_alpha** -- Maximum value of alpha channel, double. * - **alpha_band** -- Unpremultiply with this alpha, int. * * @param options Set of options. * @return Output image. */ VImage unpremultiply(VOption *options = nullptr) const; /** * Load vips from file. * * **Optional parameters** * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param filename Filename to load from. * @param options Set of options. * @return Output image. */ static VImage vipsload(const char *filename, VOption *options = nullptr); /** * Load vips from source. * * **Optional parameters** * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param source Source to load from. * @param options Set of options. * @return Output image. */ static VImage vipsload_source(VSource source, VOption *options = nullptr); /** * Save image to file in vips format. * * **Optional parameters** * - **profile** -- Filename of ICC profile to embed, const char *. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param filename Filename to save to. * @param options Set of options. */ void vipssave(const char *filename, VOption *options = nullptr) const; /** * Save image to target in vips format. * * **Optional parameters** * - **profile** -- Filename of ICC profile to embed, const char *. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param target Target to save to. * @param options Set of options. */ void vipssave_target(VTarget target, VOption *options = nullptr) const; /** * Load webp from file. * * **Optional parameters** * - **page** -- First page to load, int. * - **n** -- Number of pages to load, -1 for all, int. * - **scale** -- Factor to scale by, double. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param filename Filename to load from. * @param options Set of options. * @return Output image. */ static VImage webpload(const char *filename, VOption *options = nullptr); /** * Load webp from buffer. * * **Optional parameters** * - **page** -- First page to load, int. * - **n** -- Number of pages to load, -1 for all, int. * - **scale** -- Factor to scale by, double. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param buffer Buffer to load from. * @param options Set of options. * @return Output image. */ static VImage webpload_buffer(VipsBlob *buffer, VOption *options = nullptr); /** * Load webp from source. * * **Optional parameters** * - **page** -- First page to load, int. * - **n** -- Number of pages to load, -1 for all, int. * - **scale** -- Factor to scale by, double. * - **memory** -- Force open via memory, bool. * - **access** -- Required access pattern for this file, VipsAccess. * - **fail_on** -- Error level to fail on, VipsFailOn. * - **revalidate** -- Don't use a cached result for this operation, bool. * * @param source Source to load from. * @param options Set of options. * @return Output image. */ static VImage webpload_source(VSource source, VOption *options = nullptr); /** * Save as webp. * * **Optional parameters** * - **Q** -- Q factor, int. * - **lossless** -- Enable lossless compression, bool. * - **profile** -- Filename of ICC profile to embed, const char *. * - **preset** -- Preset for lossy compression, VipsForeignWebpPreset. * - **smart_subsample** -- Enable high quality chroma subsampling, bool. * - **near_lossless** -- Enable preprocessing in lossless mode (uses Q), bool. * - **alpha_q** -- Change alpha plane fidelity for lossy compression, int. * - **min_size** -- Optimise for minimum size, bool. * - **kmin** -- Minimum number of frames between key frames, int. * - **kmax** -- Maximum number of frames between key frames, int. * - **effort** -- Level of CPU effort to reduce file size, int. * - **mixed** -- Allow mixed encoding (might reduce file size), bool. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param filename Filename to save to. * @param options Set of options. */ void webpsave(const char *filename, VOption *options = nullptr) const; /** * Save as webp. * * **Optional parameters** * - **Q** -- Q factor, int. * - **lossless** -- Enable lossless compression, bool. * - **profile** -- Filename of ICC profile to embed, const char *. * - **preset** -- Preset for lossy compression, VipsForeignWebpPreset. * - **smart_subsample** -- Enable high quality chroma subsampling, bool. * - **near_lossless** -- Enable preprocessing in lossless mode (uses Q), bool. * - **alpha_q** -- Change alpha plane fidelity for lossy compression, int. * - **min_size** -- Optimise for minimum size, bool. * - **kmin** -- Minimum number of frames between key frames, int. * - **kmax** -- Maximum number of frames between key frames, int. * - **effort** -- Level of CPU effort to reduce file size, int. * - **mixed** -- Allow mixed encoding (might reduce file size), bool. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param options Set of options. * @return Buffer to save to. */ VipsBlob *webpsave_buffer(VOption *options = nullptr) const; /** * Save image to webp mime. * * **Optional parameters** * - **Q** -- Q factor, int. * - **lossless** -- Enable lossless compression, bool. * - **profile** -- Filename of ICC profile to embed, const char *. * - **preset** -- Preset for lossy compression, VipsForeignWebpPreset. * - **smart_subsample** -- Enable high quality chroma subsampling, bool. * - **near_lossless** -- Enable preprocessing in lossless mode (uses Q), bool. * - **alpha_q** -- Change alpha plane fidelity for lossy compression, int. * - **min_size** -- Optimise for minimum size, bool. * - **kmin** -- Minimum number of frames between key frames, int. * - **kmax** -- Maximum number of frames between key frames, int. * - **effort** -- Level of CPU effort to reduce file size, int. * - **mixed** -- Allow mixed encoding (might reduce file size), bool. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param options Set of options. */ void webpsave_mime(VOption *options = nullptr) const; /** * Save as webp. * * **Optional parameters** * - **Q** -- Q factor, int. * - **lossless** -- Enable lossless compression, bool. * - **profile** -- Filename of ICC profile to embed, const char *. * - **preset** -- Preset for lossy compression, VipsForeignWebpPreset. * - **smart_subsample** -- Enable high quality chroma subsampling, bool. * - **near_lossless** -- Enable preprocessing in lossless mode (uses Q), bool. * - **alpha_q** -- Change alpha plane fidelity for lossy compression, int. * - **min_size** -- Optimise for minimum size, bool. * - **kmin** -- Minimum number of frames between key frames, int. * - **kmax** -- Maximum number of frames between key frames, int. * - **effort** -- Level of CPU effort to reduce file size, int. * - **mixed** -- Allow mixed encoding (might reduce file size), bool. * - **keep** -- Which metadata to retain, VipsForeignKeep. * - **background** -- Background value, std::vector. * - **page_height** -- Set page height for multipage save, int. * * @param target Target to save to. * @param options Set of options. */ void webpsave_target(VTarget target, VOption *options = nullptr) const; /** * Make a worley noise image. * * **Optional parameters** * - **cell_size** -- Size of Worley cells, int. * - **seed** -- Random number seed, int. * * @param width Image width in pixels. * @param height Image height in pixels. * @param options Set of options. * @return Output image. */ static VImage worley(int width, int height, VOption *options = nullptr); /** * Wrap image origin. * * **Optional parameters** * - **x** -- Left edge of input in output, int. * - **y** -- Top edge of input in output, int. * * @param options Set of options. * @return Output image. */ VImage wrap(VOption *options = nullptr) const; /** * Make an image where pixel values are coordinates. * * **Optional parameters** * - **csize** -- Size of third dimension, int. * - **dsize** -- Size of fourth dimension, int. * - **esize** -- Size of fifth dimension, int. * * @param width Image width in pixels. * @param height Image height in pixels. * @param options Set of options. * @return Output image. */ static VImage xyz(int width, int height, VOption *options = nullptr); /** * Make a zone plate. * * **Optional parameters** * - **uchar** -- Output an unsigned char image, bool. * * @param width Image width in pixels. * @param height Image height in pixels. * @param options Set of options. * @return Output image. */ static VImage zone(int width, int height, VOption *options = nullptr); /** * Zoom an image. * @param xfac Horizontal zoom factor. * @param yfac Vertical zoom factor. * @param options Set of options. * @return Output image. */ VImage zoom(int xfac, int yfac, VOption *options = nullptr) const; }; VIPS_NAMESPACE_END #endif /*VIPS_VIMAGE_H*/ libvips-8.15.1/cplusplus/include/vips/VInterpolate8.h000066400000000000000000000037701454007373500226100ustar00rootroot00000000000000// VIPS interpolate wrapper /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_VINTERPOLATE_H #define VIPS_VINTERPOLATE_H #include VIPS_NAMESPACE_START /** * An interpolation. You can pass one of these to something like * VImage::affine for it to use to interpolate pixels. * * The available interpolators vary a bit with your libvips version and how it * was built, but will include `nearest`, `bilinear` and `bicubic`. Run * vips -l interpolate` to see them all. */ class VInterpolate : public VObject { public: /** * Create a VInterpolate that wraps a VipsInterpolate object. If steal * is STEAL, then this VInterpolate takes over ownership of the libvips * object and will automatically unref it. */ explicit VInterpolate(VipsInterpolate *interpolate, VSteal steal = STEAL) : VObject((VipsObject *) interpolate, steal) { } /** * Create a VInterpolate from a name, for example `"bicubic"`. */ static VInterpolate new_from_name(const char *name, VOption *options = nullptr); /** * Get a pointer to the underlying VipsInterpolate object. */ VipsInterpolate * get_interpolate() const { return (VipsInterpolate *) VObject::get_object(); } }; VIPS_NAMESPACE_END #endif /*VIPS_VINTERPOLATE_H*/ libvips-8.15.1/cplusplus/include/vips/VRegion8.h000066400000000000000000000055761454007373500215530ustar00rootroot00000000000000// VIPS region wrapper /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_VREGION_H #define VIPS_VREGION_H #include VIPS_NAMESPACE_START /** * A region of an image. Can be used to access raw pixel data. * */ class VRegion : public VObject { public: /** * Create a VRegion that wraps a VipsRegion object. If steal * is STEAL, then this VRegion takes over ownership of the libvips * object and will automatically unref it. */ explicit VRegion(VipsRegion *region, VSteal steal = STEAL) : VObject((VipsObject *) region, steal) { } /** * Create a VRegion from an image. */ static VRegion new_from_image(VImage image); /** * Get a pointer to the underlying VipsRegion object. */ VipsRegion * get_region() const { return (VipsRegion *) VObject::get_object(); } /** * Prepare the region from VipsRect. */ void prepare(const VipsRect *rect) const { if (vips_region_prepare(get_region(), rect)) throw VError(); } /** * Prepare the region from rectangle coordinates. */ void prepare(int left, int top, int width, int height) const { VipsRect rect = { left, top, width, height }; prepare(&rect); } /** * Get valid bounds of the region. */ VipsRect valid() const { return get_region()->valid; } /** * Get pointer to the start of the region. */ VipsPel * addr() const { return addr(0); } /** * Get pointer at the given index of the region. */ VipsPel * addr(size_t i) const { return &VIPS_REGION_ADDR_TOPLEFT(get_region())[i]; } /** * Get pointer at the given coordinates of the region. */ VipsPel * addr(int x, int y) const { return VIPS_REGION_ADDR(get_region(), x, y); } /** * Get the stride (bytes per row, including padding) of the region. */ size_t stride() const { return VIPS_REGION_LSKIP(get_region()); } /** * Get VipsPel at the given index of the region. */ VipsPel operator[](size_t i) const { return *addr(i); } /** * Get VipsPel at the given coordinates of the region. */ VipsPel operator()(int x, int y) const { return *addr(x, y); } }; VIPS_NAMESPACE_END #endif /*VIPS_VREGION_H*/ libvips-8.15.1/cplusplus/include/vips/meson.build000066400000000000000000000003771454007373500220750ustar00rootroot00000000000000public_cpp_headers = files( 'VError8.h', 'VImage8.h', 'VInterpolate8.h', 'VRegion8.h', 'VConnection8.h', 'vips8', ) install_headers( public_cpp_headers, subdir: 'vips' ) libvips_cpp_includedir = include_directories('..') libvips-8.15.1/cplusplus/include/vips/vips8000066400000000000000000000030561454007373500207240ustar00rootroot00000000000000// Include file to get vips C++ binding /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_CPLUSPLUS #define VIPS_CPLUSPLUS #include #include /* Define VIPS_CPLUSPLUS_EXPORTS to build a DLL using MSVC. */ #ifdef _VIPS_PUBLIC # define VIPS_CPLUSPLUS_API _VIPS_PUBLIC #elif defined(_MSC_VER) # ifdef VIPS_CPLUSPLUS_EXPORTS # define VIPS_CPLUSPLUS_API __declspec(dllexport) # else # define VIPS_CPLUSPLUS_API __declspec(dllimport) # endif #else # define VIPS_CPLUSPLUS_API #endif #define VIPS_NAMESPACE_START namespace vips { #define VIPS_NAMESPACE_END } #include "VError8.h" #include "VImage8.h" #include "VInterpolate8.h" #include "VRegion8.h" #include "VConnection8.h" #endif /*VIPS_CPLUSPLUS*/ libvips-8.15.1/cplusplus/meson.build000066400000000000000000000033251454007373500174650ustar00rootroot00000000000000subdir('include/vips') libvips_cpp_lib = library('vips-cpp', 'VImage.cpp', 'VInterpolate.cpp', 'VRegion.cpp', 'VConnection.cpp', 'VError.cpp', dependencies: libvips_dep, include_directories: libvips_cpp_includedir, version: library_version, darwin_versions: darwin_versions, gnu_symbol_visibility: 'hidden', install: true, ) libvips_cpp_dep = declare_dependency( link_with: libvips_cpp_lib, dependencies: libvips_dep, include_directories: libvips_cpp_includedir, ) pkg.generate( libvips_cpp_lib, requires: [ libvips_lib, glib_dep, gobject_dep ], name: 'vips-cpp', description: 'C++ API for vips8 image processing library', ) custom_target('vips-operators-header', command: [ 'gen-operators.py', '-g', 'h'], capture: true, output: 'vips-operators.h' ) custom_target('vips-operators-source', command: [ 'gen-operators.py', '-g', 'cpp'], capture: true, output: 'vips-operators.cpp' ) if get_option('doxygen') doxygen = find_program('doxygen') doxygen_data = configuration_data() doxygen_data.set('VIPS_MAJOR_VERSION', version_major) doxygen_data.set('VIPS_MINOR_VERSION', version_minor) doxygen_data.set('DOXY_INPUT_DIRECTORY', meson.current_source_dir()) doxygen_data.set('DOXY_OUTPUT_DIRECTORY', 'cplusplus') doxyfile = configure_file( input: 'Doxyfile.in', output: 'Doxyfile', configuration: doxygen_data, install: false ) html_target = custom_target('vips-cpp-docs', input: doxyfile, output: 'html', command: [doxygen, doxyfile], install: true, install_dir: get_option('prefix') / get_option('datadir') / 'doc' / 'vips-doc' ) endif libvips-8.15.1/cplusplus/vips-operators.cpp000066400000000000000000002071151454007373500210270ustar00rootroot00000000000000// bodies for vips operations // this file is generated automatically, do not edit! // clang-format off VImage VImage::CMC2LCh(VOption *options) const { VImage out; call("CMC2LCh", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::CMYK2XYZ(VOption *options) const { VImage out; call("CMYK2XYZ", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::HSV2sRGB(VOption *options) const { VImage out; call("HSV2sRGB", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::LCh2CMC(VOption *options) const { VImage out; call("LCh2CMC", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::LCh2Lab(VOption *options) const { VImage out; call("LCh2Lab", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::Lab2LCh(VOption *options) const { VImage out; call("Lab2LCh", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::Lab2LabQ(VOption *options) const { VImage out; call("Lab2LabQ", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::Lab2LabS(VOption *options) const { VImage out; call("Lab2LabS", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::Lab2XYZ(VOption *options) const { VImage out; call("Lab2XYZ", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::LabQ2Lab(VOption *options) const { VImage out; call("LabQ2Lab", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::LabQ2LabS(VOption *options) const { VImage out; call("LabQ2LabS", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::LabQ2sRGB(VOption *options) const { VImage out; call("LabQ2sRGB", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::LabS2Lab(VOption *options) const { VImage out; call("LabS2Lab", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::LabS2LabQ(VOption *options) const { VImage out; call("LabS2LabQ", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::XYZ2CMYK(VOption *options) const { VImage out; call("XYZ2CMYK", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::XYZ2Lab(VOption *options) const { VImage out; call("XYZ2Lab", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::XYZ2Yxy(VOption *options) const { VImage out; call("XYZ2Yxy", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::XYZ2scRGB(VOption *options) const { VImage out; call("XYZ2scRGB", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::Yxy2XYZ(VOption *options) const { VImage out; call("Yxy2XYZ", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::abs(VOption *options) const { VImage out; call("abs", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::add(VImage right, VOption *options) const { VImage out; call("add", (options ? options : VImage::option()) ->set("left", *this) ->set("out", &out) ->set("right", right)); return out; } VImage VImage::affine(std::vector matrix, VOption *options) const { VImage out; call("affine", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("matrix", matrix)); return out; } VImage VImage::analyzeload(const char *filename, VOption *options) { VImage out; call("analyzeload", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename)); return out; } VImage VImage::arrayjoin(std::vector in, VOption *options) { VImage out; call("arrayjoin", (options ? options : VImage::option()) ->set("out", &out) ->set("in", in)); return out; } VImage VImage::autorot(VOption *options) const { VImage out; call("autorot", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } double VImage::avg(VOption *options) const { double out; call("avg", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::bandbool(VipsOperationBoolean boolean, VOption *options) const { VImage out; call("bandbool", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("boolean", boolean)); return out; } VImage VImage::bandfold(VOption *options) const { VImage out; call("bandfold", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::bandjoin(std::vector in, VOption *options) { VImage out; call("bandjoin", (options ? options : VImage::option()) ->set("out", &out) ->set("in", in)); return out; } VImage VImage::bandjoin_const(std::vector c, VOption *options) const { VImage out; call("bandjoin_const", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("c", c)); return out; } VImage VImage::bandmean(VOption *options) const { VImage out; call("bandmean", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::bandrank(std::vector in, VOption *options) { VImage out; call("bandrank", (options ? options : VImage::option()) ->set("out", &out) ->set("in", in)); return out; } VImage VImage::bandunfold(VOption *options) const { VImage out; call("bandunfold", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::black(int width, int height, VOption *options) { VImage out; call("black", (options ? options : VImage::option()) ->set("out", &out) ->set("width", width) ->set("height", height)); return out; } VImage VImage::boolean(VImage right, VipsOperationBoolean boolean, VOption *options) const { VImage out; call("boolean", (options ? options : VImage::option()) ->set("left", *this) ->set("out", &out) ->set("right", right) ->set("boolean", boolean)); return out; } VImage VImage::boolean_const(VipsOperationBoolean boolean, std::vector c, VOption *options) const { VImage out; call("boolean_const", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("boolean", boolean) ->set("c", c)); return out; } VImage VImage::buildlut(VOption *options) const { VImage out; call("buildlut", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::byteswap(VOption *options) const { VImage out; call("byteswap", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::cache(VOption *options) const { VImage out; call("cache", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::canny(VOption *options) const { VImage out; call("canny", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::case_image(std::vector cases, VOption *options) const { VImage out; call("case", (options ? options : VImage::option()) ->set("index", *this) ->set("out", &out) ->set("cases", cases)); return out; } VImage VImage::cast(VipsBandFormat format, VOption *options) const { VImage out; call("cast", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("format", format)); return out; } VImage VImage::colourspace(VipsInterpretation space, VOption *options) const { VImage out; call("colourspace", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("space", space)); return out; } VImage VImage::compass(VImage mask, VOption *options) const { VImage out; call("compass", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("mask", mask)); return out; } VImage VImage::complex(VipsOperationComplex cmplx, VOption *options) const { VImage out; call("complex", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("cmplx", cmplx)); return out; } VImage VImage::complex2(VImage right, VipsOperationComplex2 cmplx, VOption *options) const { VImage out; call("complex2", (options ? options : VImage::option()) ->set("left", *this) ->set("out", &out) ->set("right", right) ->set("cmplx", cmplx)); return out; } VImage VImage::complexform(VImage right, VOption *options) const { VImage out; call("complexform", (options ? options : VImage::option()) ->set("left", *this) ->set("out", &out) ->set("right", right)); return out; } VImage VImage::complexget(VipsOperationComplexget get, VOption *options) const { VImage out; call("complexget", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("get", get)); return out; } VImage VImage::composite(std::vector in, std::vector mode, VOption *options) { VImage out; call("composite", (options ? options : VImage::option()) ->set("out", &out) ->set("in", in) ->set("mode", mode)); return out; } VImage VImage::composite2(VImage overlay, VipsBlendMode mode, VOption *options) const { VImage out; call("composite2", (options ? options : VImage::option()) ->set("base", *this) ->set("out", &out) ->set("overlay", overlay) ->set("mode", mode)); return out; } VImage VImage::conv(VImage mask, VOption *options) const { VImage out; call("conv", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("mask", mask)); return out; } VImage VImage::conva(VImage mask, VOption *options) const { VImage out; call("conva", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("mask", mask)); return out; } VImage VImage::convasep(VImage mask, VOption *options) const { VImage out; call("convasep", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("mask", mask)); return out; } VImage VImage::convf(VImage mask, VOption *options) const { VImage out; call("convf", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("mask", mask)); return out; } VImage VImage::convi(VImage mask, VOption *options) const { VImage out; call("convi", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("mask", mask)); return out; } VImage VImage::convsep(VImage mask, VOption *options) const { VImage out; call("convsep", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("mask", mask)); return out; } VImage VImage::copy(VOption *options) const { VImage out; call("copy", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } double VImage::countlines(VipsDirection direction, VOption *options) const { double nolines; call("countlines", (options ? options : VImage::option()) ->set("in", *this) ->set("nolines", &nolines) ->set("direction", direction)); return nolines; } VImage VImage::crop(int left, int top, int width, int height, VOption *options) const { VImage out; call("crop", (options ? options : VImage::option()) ->set("input", *this) ->set("out", &out) ->set("left", left) ->set("top", top) ->set("width", width) ->set("height", height)); return out; } VImage VImage::csvload(const char *filename, VOption *options) { VImage out; call("csvload", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename)); return out; } VImage VImage::csvload_source(VSource source, VOption *options) { VImage out; call("csvload_source", (options ? options : VImage::option()) ->set("out", &out) ->set("source", source)); return out; } void VImage::csvsave(const char *filename, VOption *options) const { call("csvsave", (options ? options : VImage::option()) ->set("in", *this) ->set("filename", filename)); } void VImage::csvsave_target(VTarget target, VOption *options) const { call("csvsave_target", (options ? options : VImage::option()) ->set("in", *this) ->set("target", target)); } VImage VImage::dE00(VImage right, VOption *options) const { VImage out; call("dE00", (options ? options : VImage::option()) ->set("left", *this) ->set("out", &out) ->set("right", right)); return out; } VImage VImage::dE76(VImage right, VOption *options) const { VImage out; call("dE76", (options ? options : VImage::option()) ->set("left", *this) ->set("out", &out) ->set("right", right)); return out; } VImage VImage::dECMC(VImage right, VOption *options) const { VImage out; call("dECMC", (options ? options : VImage::option()) ->set("left", *this) ->set("out", &out) ->set("right", right)); return out; } double VImage::deviate(VOption *options) const { double out; call("deviate", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::divide(VImage right, VOption *options) const { VImage out; call("divide", (options ? options : VImage::option()) ->set("left", *this) ->set("out", &out) ->set("right", right)); return out; } void VImage::draw_circle(std::vector ink, int cx, int cy, int radius, VOption *options) const { call("draw_circle", (options ? options : VImage::option()) ->set("image", *this) ->set("ink", ink) ->set("cx", cx) ->set("cy", cy) ->set("radius", radius)); } void VImage::draw_flood(std::vector ink, int x, int y, VOption *options) const { call("draw_flood", (options ? options : VImage::option()) ->set("image", *this) ->set("ink", ink) ->set("x", x) ->set("y", y)); } void VImage::draw_image(VImage sub, int x, int y, VOption *options) const { call("draw_image", (options ? options : VImage::option()) ->set("image", *this) ->set("sub", sub) ->set("x", x) ->set("y", y)); } void VImage::draw_line(std::vector ink, int x1, int y1, int x2, int y2, VOption *options) const { call("draw_line", (options ? options : VImage::option()) ->set("image", *this) ->set("ink", ink) ->set("x1", x1) ->set("y1", y1) ->set("x2", x2) ->set("y2", y2)); } void VImage::draw_mask(std::vector ink, VImage mask, int x, int y, VOption *options) const { call("draw_mask", (options ? options : VImage::option()) ->set("image", *this) ->set("ink", ink) ->set("mask", mask) ->set("x", x) ->set("y", y)); } void VImage::draw_rect(std::vector ink, int left, int top, int width, int height, VOption *options) const { call("draw_rect", (options ? options : VImage::option()) ->set("image", *this) ->set("ink", ink) ->set("left", left) ->set("top", top) ->set("width", width) ->set("height", height)); } void VImage::draw_smudge(int left, int top, int width, int height, VOption *options) const { call("draw_smudge", (options ? options : VImage::option()) ->set("image", *this) ->set("left", left) ->set("top", top) ->set("width", width) ->set("height", height)); } void VImage::dzsave(const char *filename, VOption *options) const { call("dzsave", (options ? options : VImage::option()) ->set("in", *this) ->set("filename", filename)); } VipsBlob * VImage::dzsave_buffer(VOption *options) const { VipsBlob *buffer; call("dzsave_buffer", (options ? options : VImage::option()) ->set("in", *this) ->set("buffer", &buffer)); return buffer; } void VImage::dzsave_target(VTarget target, VOption *options) const { call("dzsave_target", (options ? options : VImage::option()) ->set("in", *this) ->set("target", target)); } VImage VImage::embed(int x, int y, int width, int height, VOption *options) const { VImage out; call("embed", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("x", x) ->set("y", y) ->set("width", width) ->set("height", height)); return out; } VImage VImage::extract_area(int left, int top, int width, int height, VOption *options) const { VImage out; call("extract_area", (options ? options : VImage::option()) ->set("input", *this) ->set("out", &out) ->set("left", left) ->set("top", top) ->set("width", width) ->set("height", height)); return out; } VImage VImage::extract_band(int band, VOption *options) const { VImage out; call("extract_band", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("band", band)); return out; } VImage VImage::eye(int width, int height, VOption *options) { VImage out; call("eye", (options ? options : VImage::option()) ->set("out", &out) ->set("width", width) ->set("height", height)); return out; } VImage VImage::falsecolour(VOption *options) const { VImage out; call("falsecolour", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::fastcor(VImage ref, VOption *options) const { VImage out; call("fastcor", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("ref", ref)); return out; } VImage VImage::fill_nearest(VOption *options) const { VImage out; call("fill_nearest", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } int VImage::find_trim(int *top, int *width, int *height, VOption *options) const { int left; call("find_trim", (options ? options : VImage::option()) ->set("in", *this) ->set("left", &left) ->set("top", top) ->set("width", width) ->set("height", height)); return left; } VImage VImage::fitsload(const char *filename, VOption *options) { VImage out; call("fitsload", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename)); return out; } VImage VImage::fitsload_source(VSource source, VOption *options) { VImage out; call("fitsload_source", (options ? options : VImage::option()) ->set("out", &out) ->set("source", source)); return out; } void VImage::fitssave(const char *filename, VOption *options) const { call("fitssave", (options ? options : VImage::option()) ->set("in", *this) ->set("filename", filename)); } VImage VImage::flatten(VOption *options) const { VImage out; call("flatten", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::flip(VipsDirection direction, VOption *options) const { VImage out; call("flip", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("direction", direction)); return out; } VImage VImage::float2rad(VOption *options) const { VImage out; call("float2rad", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::fractsurf(int width, int height, double fractal_dimension, VOption *options) { VImage out; call("fractsurf", (options ? options : VImage::option()) ->set("out", &out) ->set("width", width) ->set("height", height) ->set("fractal_dimension", fractal_dimension)); return out; } VImage VImage::freqmult(VImage mask, VOption *options) const { VImage out; call("freqmult", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("mask", mask)); return out; } VImage VImage::fwfft(VOption *options) const { VImage out; call("fwfft", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::gamma(VOption *options) const { VImage out; call("gamma", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::gaussblur(double sigma, VOption *options) const { VImage out; call("gaussblur", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("sigma", sigma)); return out; } VImage VImage::gaussmat(double sigma, double min_ampl, VOption *options) { VImage out; call("gaussmat", (options ? options : VImage::option()) ->set("out", &out) ->set("sigma", sigma) ->set("min_ampl", min_ampl)); return out; } VImage VImage::gaussnoise(int width, int height, VOption *options) { VImage out; call("gaussnoise", (options ? options : VImage::option()) ->set("out", &out) ->set("width", width) ->set("height", height)); return out; } std::vector VImage::getpoint(int x, int y, VOption *options) const { std::vector out_array; call("getpoint", (options ? options : VImage::option()) ->set("in", *this) ->set("out_array", &out_array) ->set("x", x) ->set("y", y)); return out_array; } VImage VImage::gifload(const char *filename, VOption *options) { VImage out; call("gifload", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename)); return out; } VImage VImage::gifload_buffer(VipsBlob *buffer, VOption *options) { VImage out; call("gifload_buffer", (options ? options : VImage::option()) ->set("out", &out) ->set("buffer", buffer)); return out; } VImage VImage::gifload_source(VSource source, VOption *options) { VImage out; call("gifload_source", (options ? options : VImage::option()) ->set("out", &out) ->set("source", source)); return out; } void VImage::gifsave(const char *filename, VOption *options) const { call("gifsave", (options ? options : VImage::option()) ->set("in", *this) ->set("filename", filename)); } VipsBlob * VImage::gifsave_buffer(VOption *options) const { VipsBlob *buffer; call("gifsave_buffer", (options ? options : VImage::option()) ->set("in", *this) ->set("buffer", &buffer)); return buffer; } void VImage::gifsave_target(VTarget target, VOption *options) const { call("gifsave_target", (options ? options : VImage::option()) ->set("in", *this) ->set("target", target)); } VImage VImage::globalbalance(VOption *options) const { VImage out; call("globalbalance", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::gravity(VipsCompassDirection direction, int width, int height, VOption *options) const { VImage out; call("gravity", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("direction", direction) ->set("width", width) ->set("height", height)); return out; } VImage VImage::grey(int width, int height, VOption *options) { VImage out; call("grey", (options ? options : VImage::option()) ->set("out", &out) ->set("width", width) ->set("height", height)); return out; } VImage VImage::grid(int tile_height, int across, int down, VOption *options) const { VImage out; call("grid", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("tile_height", tile_height) ->set("across", across) ->set("down", down)); return out; } VImage VImage::heifload(const char *filename, VOption *options) { VImage out; call("heifload", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename)); return out; } VImage VImage::heifload_buffer(VipsBlob *buffer, VOption *options) { VImage out; call("heifload_buffer", (options ? options : VImage::option()) ->set("out", &out) ->set("buffer", buffer)); return out; } VImage VImage::heifload_source(VSource source, VOption *options) { VImage out; call("heifload_source", (options ? options : VImage::option()) ->set("out", &out) ->set("source", source)); return out; } void VImage::heifsave(const char *filename, VOption *options) const { call("heifsave", (options ? options : VImage::option()) ->set("in", *this) ->set("filename", filename)); } VipsBlob * VImage::heifsave_buffer(VOption *options) const { VipsBlob *buffer; call("heifsave_buffer", (options ? options : VImage::option()) ->set("in", *this) ->set("buffer", &buffer)); return buffer; } void VImage::heifsave_target(VTarget target, VOption *options) const { call("heifsave_target", (options ? options : VImage::option()) ->set("in", *this) ->set("target", target)); } VImage VImage::hist_cum(VOption *options) const { VImage out; call("hist_cum", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } double VImage::hist_entropy(VOption *options) const { double out; call("hist_entropy", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::hist_equal(VOption *options) const { VImage out; call("hist_equal", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::hist_find(VOption *options) const { VImage out; call("hist_find", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::hist_find_indexed(VImage index, VOption *options) const { VImage out; call("hist_find_indexed", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("index", index)); return out; } VImage VImage::hist_find_ndim(VOption *options) const { VImage out; call("hist_find_ndim", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } bool VImage::hist_ismonotonic(VOption *options) const { bool monotonic; call("hist_ismonotonic", (options ? options : VImage::option()) ->set("in", *this) ->set("monotonic", &monotonic)); return monotonic; } VImage VImage::hist_local(int width, int height, VOption *options) const { VImage out; call("hist_local", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("width", width) ->set("height", height)); return out; } VImage VImage::hist_match(VImage ref, VOption *options) const { VImage out; call("hist_match", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("ref", ref)); return out; } VImage VImage::hist_norm(VOption *options) const { VImage out; call("hist_norm", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::hist_plot(VOption *options) const { VImage out; call("hist_plot", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::hough_circle(VOption *options) const { VImage out; call("hough_circle", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::hough_line(VOption *options) const { VImage out; call("hough_line", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::icc_export(VOption *options) const { VImage out; call("icc_export", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::icc_import(VOption *options) const { VImage out; call("icc_import", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::icc_transform(const char *output_profile, VOption *options) const { VImage out; call("icc_transform", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("output_profile", output_profile)); return out; } VImage VImage::identity(VOption *options) { VImage out; call("identity", (options ? options : VImage::option()) ->set("out", &out)); return out; } VImage VImage::ifthenelse(VImage in1, VImage in2, VOption *options) const { VImage out; call("ifthenelse", (options ? options : VImage::option()) ->set("cond", *this) ->set("out", &out) ->set("in1", in1) ->set("in2", in2)); return out; } VImage VImage::insert(VImage sub, int x, int y, VOption *options) const { VImage out; call("insert", (options ? options : VImage::option()) ->set("main", *this) ->set("out", &out) ->set("sub", sub) ->set("x", x) ->set("y", y)); return out; } VImage VImage::invert(VOption *options) const { VImage out; call("invert", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::invertlut(VOption *options) const { VImage out; call("invertlut", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::invfft(VOption *options) const { VImage out; call("invfft", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::join(VImage in2, VipsDirection direction, VOption *options) const { VImage out; call("join", (options ? options : VImage::option()) ->set("in1", *this) ->set("out", &out) ->set("in2", in2) ->set("direction", direction)); return out; } VImage VImage::jp2kload(const char *filename, VOption *options) { VImage out; call("jp2kload", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename)); return out; } VImage VImage::jp2kload_buffer(VipsBlob *buffer, VOption *options) { VImage out; call("jp2kload_buffer", (options ? options : VImage::option()) ->set("out", &out) ->set("buffer", buffer)); return out; } VImage VImage::jp2kload_source(VSource source, VOption *options) { VImage out; call("jp2kload_source", (options ? options : VImage::option()) ->set("out", &out) ->set("source", source)); return out; } void VImage::jp2ksave(const char *filename, VOption *options) const { call("jp2ksave", (options ? options : VImage::option()) ->set("in", *this) ->set("filename", filename)); } VipsBlob * VImage::jp2ksave_buffer(VOption *options) const { VipsBlob *buffer; call("jp2ksave_buffer", (options ? options : VImage::option()) ->set("in", *this) ->set("buffer", &buffer)); return buffer; } void VImage::jp2ksave_target(VTarget target, VOption *options) const { call("jp2ksave_target", (options ? options : VImage::option()) ->set("in", *this) ->set("target", target)); } VImage VImage::jpegload(const char *filename, VOption *options) { VImage out; call("jpegload", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename)); return out; } VImage VImage::jpegload_buffer(VipsBlob *buffer, VOption *options) { VImage out; call("jpegload_buffer", (options ? options : VImage::option()) ->set("out", &out) ->set("buffer", buffer)); return out; } VImage VImage::jpegload_source(VSource source, VOption *options) { VImage out; call("jpegload_source", (options ? options : VImage::option()) ->set("out", &out) ->set("source", source)); return out; } void VImage::jpegsave(const char *filename, VOption *options) const { call("jpegsave", (options ? options : VImage::option()) ->set("in", *this) ->set("filename", filename)); } VipsBlob * VImage::jpegsave_buffer(VOption *options) const { VipsBlob *buffer; call("jpegsave_buffer", (options ? options : VImage::option()) ->set("in", *this) ->set("buffer", &buffer)); return buffer; } void VImage::jpegsave_mime(VOption *options) const { call("jpegsave_mime", (options ? options : VImage::option()) ->set("in", *this)); } void VImage::jpegsave_target(VTarget target, VOption *options) const { call("jpegsave_target", (options ? options : VImage::option()) ->set("in", *this) ->set("target", target)); } VImage VImage::jxlload(const char *filename, VOption *options) { VImage out; call("jxlload", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename)); return out; } VImage VImage::jxlload_buffer(VipsBlob *buffer, VOption *options) { VImage out; call("jxlload_buffer", (options ? options : VImage::option()) ->set("out", &out) ->set("buffer", buffer)); return out; } VImage VImage::jxlload_source(VSource source, VOption *options) { VImage out; call("jxlload_source", (options ? options : VImage::option()) ->set("out", &out) ->set("source", source)); return out; } void VImage::jxlsave(const char *filename, VOption *options) const { call("jxlsave", (options ? options : VImage::option()) ->set("in", *this) ->set("filename", filename)); } VipsBlob * VImage::jxlsave_buffer(VOption *options) const { VipsBlob *buffer; call("jxlsave_buffer", (options ? options : VImage::option()) ->set("in", *this) ->set("buffer", &buffer)); return buffer; } void VImage::jxlsave_target(VTarget target, VOption *options) const { call("jxlsave_target", (options ? options : VImage::option()) ->set("in", *this) ->set("target", target)); } VImage VImage::labelregions(VOption *options) const { VImage mask; call("labelregions", (options ? options : VImage::option()) ->set("in", *this) ->set("mask", &mask)); return mask; } VImage VImage::linear(std::vector a, std::vector b, VOption *options) const { VImage out; call("linear", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("a", a) ->set("b", b)); return out; } VImage VImage::linecache(VOption *options) const { VImage out; call("linecache", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::logmat(double sigma, double min_ampl, VOption *options) { VImage out; call("logmat", (options ? options : VImage::option()) ->set("out", &out) ->set("sigma", sigma) ->set("min_ampl", min_ampl)); return out; } VImage VImage::magickload(const char *filename, VOption *options) { VImage out; call("magickload", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename)); return out; } VImage VImage::magickload_buffer(VipsBlob *buffer, VOption *options) { VImage out; call("magickload_buffer", (options ? options : VImage::option()) ->set("out", &out) ->set("buffer", buffer)); return out; } void VImage::magicksave(const char *filename, VOption *options) const { call("magicksave", (options ? options : VImage::option()) ->set("in", *this) ->set("filename", filename)); } VipsBlob * VImage::magicksave_buffer(VOption *options) const { VipsBlob *buffer; call("magicksave_buffer", (options ? options : VImage::option()) ->set("in", *this) ->set("buffer", &buffer)); return buffer; } VImage VImage::mapim(VImage index, VOption *options) const { VImage out; call("mapim", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("index", index)); return out; } VImage VImage::maplut(VImage lut, VOption *options) const { VImage out; call("maplut", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("lut", lut)); return out; } VImage VImage::mask_butterworth(int width, int height, double order, double frequency_cutoff, double amplitude_cutoff, VOption *options) { VImage out; call("mask_butterworth", (options ? options : VImage::option()) ->set("out", &out) ->set("width", width) ->set("height", height) ->set("order", order) ->set("frequency_cutoff", frequency_cutoff) ->set("amplitude_cutoff", amplitude_cutoff)); return out; } VImage VImage::mask_butterworth_band(int width, int height, double order, double frequency_cutoff_x, double frequency_cutoff_y, double radius, double amplitude_cutoff, VOption *options) { VImage out; call("mask_butterworth_band", (options ? options : VImage::option()) ->set("out", &out) ->set("width", width) ->set("height", height) ->set("order", order) ->set("frequency_cutoff_x", frequency_cutoff_x) ->set("frequency_cutoff_y", frequency_cutoff_y) ->set("radius", radius) ->set("amplitude_cutoff", amplitude_cutoff)); return out; } VImage VImage::mask_butterworth_ring(int width, int height, double order, double frequency_cutoff, double amplitude_cutoff, double ringwidth, VOption *options) { VImage out; call("mask_butterworth_ring", (options ? options : VImage::option()) ->set("out", &out) ->set("width", width) ->set("height", height) ->set("order", order) ->set("frequency_cutoff", frequency_cutoff) ->set("amplitude_cutoff", amplitude_cutoff) ->set("ringwidth", ringwidth)); return out; } VImage VImage::mask_fractal(int width, int height, double fractal_dimension, VOption *options) { VImage out; call("mask_fractal", (options ? options : VImage::option()) ->set("out", &out) ->set("width", width) ->set("height", height) ->set("fractal_dimension", fractal_dimension)); return out; } VImage VImage::mask_gaussian(int width, int height, double frequency_cutoff, double amplitude_cutoff, VOption *options) { VImage out; call("mask_gaussian", (options ? options : VImage::option()) ->set("out", &out) ->set("width", width) ->set("height", height) ->set("frequency_cutoff", frequency_cutoff) ->set("amplitude_cutoff", amplitude_cutoff)); return out; } VImage VImage::mask_gaussian_band(int width, int height, double frequency_cutoff_x, double frequency_cutoff_y, double radius, double amplitude_cutoff, VOption *options) { VImage out; call("mask_gaussian_band", (options ? options : VImage::option()) ->set("out", &out) ->set("width", width) ->set("height", height) ->set("frequency_cutoff_x", frequency_cutoff_x) ->set("frequency_cutoff_y", frequency_cutoff_y) ->set("radius", radius) ->set("amplitude_cutoff", amplitude_cutoff)); return out; } VImage VImage::mask_gaussian_ring(int width, int height, double frequency_cutoff, double amplitude_cutoff, double ringwidth, VOption *options) { VImage out; call("mask_gaussian_ring", (options ? options : VImage::option()) ->set("out", &out) ->set("width", width) ->set("height", height) ->set("frequency_cutoff", frequency_cutoff) ->set("amplitude_cutoff", amplitude_cutoff) ->set("ringwidth", ringwidth)); return out; } VImage VImage::mask_ideal(int width, int height, double frequency_cutoff, VOption *options) { VImage out; call("mask_ideal", (options ? options : VImage::option()) ->set("out", &out) ->set("width", width) ->set("height", height) ->set("frequency_cutoff", frequency_cutoff)); return out; } VImage VImage::mask_ideal_band(int width, int height, double frequency_cutoff_x, double frequency_cutoff_y, double radius, VOption *options) { VImage out; call("mask_ideal_band", (options ? options : VImage::option()) ->set("out", &out) ->set("width", width) ->set("height", height) ->set("frequency_cutoff_x", frequency_cutoff_x) ->set("frequency_cutoff_y", frequency_cutoff_y) ->set("radius", radius)); return out; } VImage VImage::mask_ideal_ring(int width, int height, double frequency_cutoff, double ringwidth, VOption *options) { VImage out; call("mask_ideal_ring", (options ? options : VImage::option()) ->set("out", &out) ->set("width", width) ->set("height", height) ->set("frequency_cutoff", frequency_cutoff) ->set("ringwidth", ringwidth)); return out; } VImage VImage::match(VImage sec, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, VOption *options) const { VImage out; call("match", (options ? options : VImage::option()) ->set("ref", *this) ->set("out", &out) ->set("sec", sec) ->set("xr1", xr1) ->set("yr1", yr1) ->set("xs1", xs1) ->set("ys1", ys1) ->set("xr2", xr2) ->set("yr2", yr2) ->set("xs2", xs2) ->set("ys2", ys2)); return out; } VImage VImage::math(VipsOperationMath math, VOption *options) const { VImage out; call("math", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("math", math)); return out; } VImage VImage::math2(VImage right, VipsOperationMath2 math2, VOption *options) const { VImage out; call("math2", (options ? options : VImage::option()) ->set("left", *this) ->set("out", &out) ->set("right", right) ->set("math2", math2)); return out; } VImage VImage::math2_const(VipsOperationMath2 math2, std::vector c, VOption *options) const { VImage out; call("math2_const", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("math2", math2) ->set("c", c)); return out; } VImage VImage::matload(const char *filename, VOption *options) { VImage out; call("matload", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename)); return out; } VImage VImage::matrixinvert(VOption *options) const { VImage out; call("matrixinvert", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::matrixload(const char *filename, VOption *options) { VImage out; call("matrixload", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename)); return out; } VImage VImage::matrixload_source(VSource source, VOption *options) { VImage out; call("matrixload_source", (options ? options : VImage::option()) ->set("out", &out) ->set("source", source)); return out; } void VImage::matrixprint(VOption *options) const { call("matrixprint", (options ? options : VImage::option()) ->set("in", *this)); } void VImage::matrixsave(const char *filename, VOption *options) const { call("matrixsave", (options ? options : VImage::option()) ->set("in", *this) ->set("filename", filename)); } void VImage::matrixsave_target(VTarget target, VOption *options) const { call("matrixsave_target", (options ? options : VImage::option()) ->set("in", *this) ->set("target", target)); } double VImage::max(VOption *options) const { double out; call("max", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::measure(int h, int v, VOption *options) const { VImage out; call("measure", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("h", h) ->set("v", v)); return out; } VImage VImage::merge(VImage sec, VipsDirection direction, int dx, int dy, VOption *options) const { VImage out; call("merge", (options ? options : VImage::option()) ->set("ref", *this) ->set("out", &out) ->set("sec", sec) ->set("direction", direction) ->set("dx", dx) ->set("dy", dy)); return out; } double VImage::min(VOption *options) const { double out; call("min", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::morph(VImage mask, VipsOperationMorphology morph, VOption *options) const { VImage out; call("morph", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("mask", mask) ->set("morph", morph)); return out; } VImage VImage::mosaic(VImage sec, VipsDirection direction, int xref, int yref, int xsec, int ysec, VOption *options) const { VImage out; call("mosaic", (options ? options : VImage::option()) ->set("ref", *this) ->set("out", &out) ->set("sec", sec) ->set("direction", direction) ->set("xref", xref) ->set("yref", yref) ->set("xsec", xsec) ->set("ysec", ysec)); return out; } VImage VImage::mosaic1(VImage sec, VipsDirection direction, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, VOption *options) const { VImage out; call("mosaic1", (options ? options : VImage::option()) ->set("ref", *this) ->set("out", &out) ->set("sec", sec) ->set("direction", direction) ->set("xr1", xr1) ->set("yr1", yr1) ->set("xs1", xs1) ->set("ys1", ys1) ->set("xr2", xr2) ->set("yr2", yr2) ->set("xs2", xs2) ->set("ys2", ys2)); return out; } VImage VImage::msb(VOption *options) const { VImage out; call("msb", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::multiply(VImage right, VOption *options) const { VImage out; call("multiply", (options ? options : VImage::option()) ->set("left", *this) ->set("out", &out) ->set("right", right)); return out; } VImage VImage::niftiload(const char *filename, VOption *options) { VImage out; call("niftiload", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename)); return out; } VImage VImage::niftiload_source(VSource source, VOption *options) { VImage out; call("niftiload_source", (options ? options : VImage::option()) ->set("out", &out) ->set("source", source)); return out; } void VImage::niftisave(const char *filename, VOption *options) const { call("niftisave", (options ? options : VImage::option()) ->set("in", *this) ->set("filename", filename)); } VImage VImage::openexrload(const char *filename, VOption *options) { VImage out; call("openexrload", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename)); return out; } VImage VImage::openslideload(const char *filename, VOption *options) { VImage out; call("openslideload", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename)); return out; } VImage VImage::openslideload_source(VSource source, VOption *options) { VImage out; call("openslideload_source", (options ? options : VImage::option()) ->set("out", &out) ->set("source", source)); return out; } VImage VImage::pdfload(const char *filename, VOption *options) { VImage out; call("pdfload", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename)); return out; } VImage VImage::pdfload_buffer(VipsBlob *buffer, VOption *options) { VImage out; call("pdfload_buffer", (options ? options : VImage::option()) ->set("out", &out) ->set("buffer", buffer)); return out; } VImage VImage::pdfload_source(VSource source, VOption *options) { VImage out; call("pdfload_source", (options ? options : VImage::option()) ->set("out", &out) ->set("source", source)); return out; } int VImage::percent(double percent, VOption *options) const { int threshold; call("percent", (options ? options : VImage::option()) ->set("in", *this) ->set("threshold", &threshold) ->set("percent", percent)); return threshold; } VImage VImage::perlin(int width, int height, VOption *options) { VImage out; call("perlin", (options ? options : VImage::option()) ->set("out", &out) ->set("width", width) ->set("height", height)); return out; } VImage VImage::phasecor(VImage in2, VOption *options) const { VImage out; call("phasecor", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("in2", in2)); return out; } VImage VImage::pngload(const char *filename, VOption *options) { VImage out; call("pngload", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename)); return out; } VImage VImage::pngload_buffer(VipsBlob *buffer, VOption *options) { VImage out; call("pngload_buffer", (options ? options : VImage::option()) ->set("out", &out) ->set("buffer", buffer)); return out; } VImage VImage::pngload_source(VSource source, VOption *options) { VImage out; call("pngload_source", (options ? options : VImage::option()) ->set("out", &out) ->set("source", source)); return out; } void VImage::pngsave(const char *filename, VOption *options) const { call("pngsave", (options ? options : VImage::option()) ->set("in", *this) ->set("filename", filename)); } VipsBlob * VImage::pngsave_buffer(VOption *options) const { VipsBlob *buffer; call("pngsave_buffer", (options ? options : VImage::option()) ->set("in", *this) ->set("buffer", &buffer)); return buffer; } void VImage::pngsave_target(VTarget target, VOption *options) const { call("pngsave_target", (options ? options : VImage::option()) ->set("in", *this) ->set("target", target)); } VImage VImage::ppmload(const char *filename, VOption *options) { VImage out; call("ppmload", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename)); return out; } VImage VImage::ppmload_source(VSource source, VOption *options) { VImage out; call("ppmload_source", (options ? options : VImage::option()) ->set("out", &out) ->set("source", source)); return out; } void VImage::ppmsave(const char *filename, VOption *options) const { call("ppmsave", (options ? options : VImage::option()) ->set("in", *this) ->set("filename", filename)); } void VImage::ppmsave_target(VTarget target, VOption *options) const { call("ppmsave_target", (options ? options : VImage::option()) ->set("in", *this) ->set("target", target)); } VImage VImage::premultiply(VOption *options) const { VImage out; call("premultiply", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::prewitt(VOption *options) const { VImage out; call("prewitt", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::profile(VImage *rows, VOption *options) const { VImage columns; call("profile", (options ? options : VImage::option()) ->set("in", *this) ->set("columns", &columns) ->set("rows", rows)); return columns; } VipsBlob * VImage::profile_load(const char *name, VOption *options) { VipsBlob *profile; call("profile_load", (options ? options : VImage::option()) ->set("profile", &profile) ->set("name", name)); return profile; } VImage VImage::project(VImage *rows, VOption *options) const { VImage columns; call("project", (options ? options : VImage::option()) ->set("in", *this) ->set("columns", &columns) ->set("rows", rows)); return columns; } VImage VImage::quadratic(VImage coeff, VOption *options) const { VImage out; call("quadratic", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("coeff", coeff)); return out; } VImage VImage::rad2float(VOption *options) const { VImage out; call("rad2float", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::radload(const char *filename, VOption *options) { VImage out; call("radload", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename)); return out; } VImage VImage::radload_buffer(VipsBlob *buffer, VOption *options) { VImage out; call("radload_buffer", (options ? options : VImage::option()) ->set("out", &out) ->set("buffer", buffer)); return out; } VImage VImage::radload_source(VSource source, VOption *options) { VImage out; call("radload_source", (options ? options : VImage::option()) ->set("out", &out) ->set("source", source)); return out; } void VImage::radsave(const char *filename, VOption *options) const { call("radsave", (options ? options : VImage::option()) ->set("in", *this) ->set("filename", filename)); } VipsBlob * VImage::radsave_buffer(VOption *options) const { VipsBlob *buffer; call("radsave_buffer", (options ? options : VImage::option()) ->set("in", *this) ->set("buffer", &buffer)); return buffer; } void VImage::radsave_target(VTarget target, VOption *options) const { call("radsave_target", (options ? options : VImage::option()) ->set("in", *this) ->set("target", target)); } VImage VImage::rank(int width, int height, int index, VOption *options) const { VImage out; call("rank", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("width", width) ->set("height", height) ->set("index", index)); return out; } VImage VImage::rawload(const char *filename, int width, int height, int bands, VOption *options) { VImage out; call("rawload", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename) ->set("width", width) ->set("height", height) ->set("bands", bands)); return out; } void VImage::rawsave(const char *filename, VOption *options) const { call("rawsave", (options ? options : VImage::option()) ->set("in", *this) ->set("filename", filename)); } void VImage::rawsave_fd(int fd, VOption *options) const { call("rawsave_fd", (options ? options : VImage::option()) ->set("in", *this) ->set("fd", fd)); } VImage VImage::recomb(VImage m, VOption *options) const { VImage out; call("recomb", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("m", m)); return out; } VImage VImage::reduce(double hshrink, double vshrink, VOption *options) const { VImage out; call("reduce", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("hshrink", hshrink) ->set("vshrink", vshrink)); return out; } VImage VImage::reduceh(double hshrink, VOption *options) const { VImage out; call("reduceh", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("hshrink", hshrink)); return out; } VImage VImage::reducev(double vshrink, VOption *options) const { VImage out; call("reducev", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("vshrink", vshrink)); return out; } VImage VImage::relational(VImage right, VipsOperationRelational relational, VOption *options) const { VImage out; call("relational", (options ? options : VImage::option()) ->set("left", *this) ->set("out", &out) ->set("right", right) ->set("relational", relational)); return out; } VImage VImage::relational_const(VipsOperationRelational relational, std::vector c, VOption *options) const { VImage out; call("relational_const", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("relational", relational) ->set("c", c)); return out; } VImage VImage::remainder(VImage right, VOption *options) const { VImage out; call("remainder", (options ? options : VImage::option()) ->set("left", *this) ->set("out", &out) ->set("right", right)); return out; } VImage VImage::remainder_const(std::vector c, VOption *options) const { VImage out; call("remainder_const", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("c", c)); return out; } VImage VImage::replicate(int across, int down, VOption *options) const { VImage out; call("replicate", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("across", across) ->set("down", down)); return out; } VImage VImage::resize(double scale, VOption *options) const { VImage out; call("resize", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("scale", scale)); return out; } VImage VImage::rot(VipsAngle angle, VOption *options) const { VImage out; call("rot", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("angle", angle)); return out; } VImage VImage::rot45(VOption *options) const { VImage out; call("rot45", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::rotate(double angle, VOption *options) const { VImage out; call("rotate", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("angle", angle)); return out; } VImage VImage::round(VipsOperationRound round, VOption *options) const { VImage out; call("round", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("round", round)); return out; } VImage VImage::sRGB2HSV(VOption *options) const { VImage out; call("sRGB2HSV", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::sRGB2scRGB(VOption *options) const { VImage out; call("sRGB2scRGB", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::scRGB2BW(VOption *options) const { VImage out; call("scRGB2BW", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::scRGB2XYZ(VOption *options) const { VImage out; call("scRGB2XYZ", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::scRGB2sRGB(VOption *options) const { VImage out; call("scRGB2sRGB", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::scale(VOption *options) const { VImage out; call("scale", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::scharr(VOption *options) const { VImage out; call("scharr", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::sequential(VOption *options) const { VImage out; call("sequential", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::sharpen(VOption *options) const { VImage out; call("sharpen", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::shrink(double hshrink, double vshrink, VOption *options) const { VImage out; call("shrink", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("hshrink", hshrink) ->set("vshrink", vshrink)); return out; } VImage VImage::shrinkh(int hshrink, VOption *options) const { VImage out; call("shrinkh", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("hshrink", hshrink)); return out; } VImage VImage::shrinkv(int vshrink, VOption *options) const { VImage out; call("shrinkv", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("vshrink", vshrink)); return out; } VImage VImage::sign(VOption *options) const { VImage out; call("sign", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::similarity(VOption *options) const { VImage out; call("similarity", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::sines(int width, int height, VOption *options) { VImage out; call("sines", (options ? options : VImage::option()) ->set("out", &out) ->set("width", width) ->set("height", height)); return out; } VImage VImage::smartcrop(int width, int height, VOption *options) const { VImage out; call("smartcrop", (options ? options : VImage::option()) ->set("input", *this) ->set("out", &out) ->set("width", width) ->set("height", height)); return out; } VImage VImage::sobel(VOption *options) const { VImage out; call("sobel", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::spcor(VImage ref, VOption *options) const { VImage out; call("spcor", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("ref", ref)); return out; } VImage VImage::spectrum(VOption *options) const { VImage out; call("spectrum", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::stats(VOption *options) const { VImage out; call("stats", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::stdif(int width, int height, VOption *options) const { VImage out; call("stdif", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("width", width) ->set("height", height)); return out; } VImage VImage::subsample(int xfac, int yfac, VOption *options) const { VImage out; call("subsample", (options ? options : VImage::option()) ->set("input", *this) ->set("out", &out) ->set("xfac", xfac) ->set("yfac", yfac)); return out; } VImage VImage::subtract(VImage right, VOption *options) const { VImage out; call("subtract", (options ? options : VImage::option()) ->set("left", *this) ->set("out", &out) ->set("right", right)); return out; } VImage VImage::sum(std::vector in, VOption *options) { VImage out; call("sum", (options ? options : VImage::option()) ->set("out", &out) ->set("in", in)); return out; } VImage VImage::svgload(const char *filename, VOption *options) { VImage out; call("svgload", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename)); return out; } VImage VImage::svgload_buffer(VipsBlob *buffer, VOption *options) { VImage out; call("svgload_buffer", (options ? options : VImage::option()) ->set("out", &out) ->set("buffer", buffer)); return out; } VImage VImage::svgload_source(VSource source, VOption *options) { VImage out; call("svgload_source", (options ? options : VImage::option()) ->set("out", &out) ->set("source", source)); return out; } VImage VImage::switch_image(std::vector tests, VOption *options) { VImage out; call("switch", (options ? options : VImage::option()) ->set("out", &out) ->set("tests", tests)); return out; } void VImage::system(const char *cmd_format, VOption *options) { call("system", (options ? options : VImage::option()) ->set("cmd_format", cmd_format)); } VImage VImage::text(const char *text, VOption *options) { VImage out; call("text", (options ? options : VImage::option()) ->set("out", &out) ->set("text", text)); return out; } VImage VImage::thumbnail(const char *filename, int width, VOption *options) { VImage out; call("thumbnail", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename) ->set("width", width)); return out; } VImage VImage::thumbnail_buffer(VipsBlob *buffer, int width, VOption *options) { VImage out; call("thumbnail_buffer", (options ? options : VImage::option()) ->set("out", &out) ->set("buffer", buffer) ->set("width", width)); return out; } VImage VImage::thumbnail_image(int width, VOption *options) const { VImage out; call("thumbnail_image", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out) ->set("width", width)); return out; } VImage VImage::thumbnail_source(VSource source, int width, VOption *options) { VImage out; call("thumbnail_source", (options ? options : VImage::option()) ->set("out", &out) ->set("source", source) ->set("width", width)); return out; } VImage VImage::tiffload(const char *filename, VOption *options) { VImage out; call("tiffload", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename)); return out; } VImage VImage::tiffload_buffer(VipsBlob *buffer, VOption *options) { VImage out; call("tiffload_buffer", (options ? options : VImage::option()) ->set("out", &out) ->set("buffer", buffer)); return out; } VImage VImage::tiffload_source(VSource source, VOption *options) { VImage out; call("tiffload_source", (options ? options : VImage::option()) ->set("out", &out) ->set("source", source)); return out; } void VImage::tiffsave(const char *filename, VOption *options) const { call("tiffsave", (options ? options : VImage::option()) ->set("in", *this) ->set("filename", filename)); } VipsBlob * VImage::tiffsave_buffer(VOption *options) const { VipsBlob *buffer; call("tiffsave_buffer", (options ? options : VImage::option()) ->set("in", *this) ->set("buffer", &buffer)); return buffer; } void VImage::tiffsave_target(VTarget target, VOption *options) const { call("tiffsave_target", (options ? options : VImage::option()) ->set("in", *this) ->set("target", target)); } VImage VImage::tilecache(VOption *options) const { VImage out; call("tilecache", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::tonelut(VOption *options) { VImage out; call("tonelut", (options ? options : VImage::option()) ->set("out", &out)); return out; } VImage VImage::transpose3d(VOption *options) const { VImage out; call("transpose3d", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::unpremultiply(VOption *options) const { VImage out; call("unpremultiply", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::vipsload(const char *filename, VOption *options) { VImage out; call("vipsload", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename)); return out; } VImage VImage::vipsload_source(VSource source, VOption *options) { VImage out; call("vipsload_source", (options ? options : VImage::option()) ->set("out", &out) ->set("source", source)); return out; } void VImage::vipssave(const char *filename, VOption *options) const { call("vipssave", (options ? options : VImage::option()) ->set("in", *this) ->set("filename", filename)); } void VImage::vipssave_target(VTarget target, VOption *options) const { call("vipssave_target", (options ? options : VImage::option()) ->set("in", *this) ->set("target", target)); } VImage VImage::webpload(const char *filename, VOption *options) { VImage out; call("webpload", (options ? options : VImage::option()) ->set("out", &out) ->set("filename", filename)); return out; } VImage VImage::webpload_buffer(VipsBlob *buffer, VOption *options) { VImage out; call("webpload_buffer", (options ? options : VImage::option()) ->set("out", &out) ->set("buffer", buffer)); return out; } VImage VImage::webpload_source(VSource source, VOption *options) { VImage out; call("webpload_source", (options ? options : VImage::option()) ->set("out", &out) ->set("source", source)); return out; } void VImage::webpsave(const char *filename, VOption *options) const { call("webpsave", (options ? options : VImage::option()) ->set("in", *this) ->set("filename", filename)); } VipsBlob * VImage::webpsave_buffer(VOption *options) const { VipsBlob *buffer; call("webpsave_buffer", (options ? options : VImage::option()) ->set("in", *this) ->set("buffer", &buffer)); return buffer; } void VImage::webpsave_mime(VOption *options) const { call("webpsave_mime", (options ? options : VImage::option()) ->set("in", *this)); } void VImage::webpsave_target(VTarget target, VOption *options) const { call("webpsave_target", (options ? options : VImage::option()) ->set("in", *this) ->set("target", target)); } VImage VImage::worley(int width, int height, VOption *options) { VImage out; call("worley", (options ? options : VImage::option()) ->set("out", &out) ->set("width", width) ->set("height", height)); return out; } VImage VImage::wrap(VOption *options) const { VImage out; call("wrap", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } VImage VImage::xyz(int width, int height, VOption *options) { VImage out; call("xyz", (options ? options : VImage::option()) ->set("out", &out) ->set("width", width) ->set("height", height)); return out; } VImage VImage::zone(int width, int height, VOption *options) { VImage out; call("zone", (options ? options : VImage::option()) ->set("out", &out) ->set("width", width) ->set("height", height)); return out; } VImage VImage::zoom(int xfac, int yfac, VOption *options) const { VImage out; call("zoom", (options ? options : VImage::option()) ->set("input", *this) ->set("out", &out) ->set("xfac", xfac) ->set("yfac", yfac)); return out; } libvips-8.15.1/doc/000077500000000000000000000000001454007373500140335ustar00rootroot00000000000000libvips-8.15.1/doc/Cite.md000066400000000000000000000012751454007373500152460ustar00rootroot00000000000000 Cite 3 libvips Cite References to cite for libvips Martinez, K. and Cupitt, J. (2005) VIPS -- a highly tuned image processing software architecture. In Proceedings of IEEE International Conference on Image Processing 2, pp. 574-577, Genova. Cupitt, J. and Martinez, K. (1996) VIPS: An image processing system for large images, Proc. SPIE, vol. 2663, pp. 19--28. libvips-8.15.1/doc/Cite.xml000066400000000000000000000016721454007373500154470ustar00rootroot00000000000000 Cite 3 libvips Cite References to cite for libvips Martinez, K. and Cupitt, J. (2005) VIPS – a highly tuned image processing software architecture. In Proceedings of IEEE International Conference on Image Processing 2, pp. 574-577, Genova. Cupitt, J. and Martinez, K. (1996) VIPS: An image processing system for large images, Proc. SPIE, vol. 2663, pp. 19–28. libvips-8.15.1/doc/Examples.md000066400000000000000000000050341454007373500161350ustar00rootroot00000000000000 Examples 3 libvips libvips examples A few example Python programs using libvips This page shows a few libvips examples using Python. They will work with small syntax changes in any language with a libvips binding. The libvips test suite is written in Python and exercises every operation in the API. It's also a useful source of examples. # Average a region of interest box on an image ```python #!/usr/bin/python3 import sys import pyvips left = 10 top = 10 width = 64 height = 64 image = pyvips.Image.new_from_file(sys.argv[1]) roi = image.crop(left, top, width, height) print('average:', roi.avg()) ``` # Build huge image mosaic This makes a 100,000 x 100,000 black image, then inserts all the images you pass on the command-line into it at random positions. libvips is able to run this program in sequential mode: it'll open all the input images at the same time, and stream pixels from them as it needs them to generate the output. To test it, first make a large 1-bit image. This command will take the green channel and write as a 1-bit fax image. `wtc.jpg` is a test 10,000 x 10,000 jpeg: ```bash $ vips extract_band wtc.jpg x.tif[squash,compression=ccittfax4,keep=none] 1 ``` Now make 1,000 copies of that image in a subdirectory: ```bash $ mkdir test $ for i in {1..1000}; do cp x.tif test/$i.tif; done ``` And run this Python program on them: ```bash $ time python try255.py x.tif[squash,compression=ccittfax4,strip,bigtiff] test/* real 1m59.924s user 4m5.388s sys 0m8.936s ``` It completes in just under two minutes on this laptop, and needs about 7gb of RAM to run. It would need about the same amount of memory for a full-colour RGB image, I was just keen to keep disc usage down. If you wanted to handle transparency, or if you wanted mixed CMYK and RGB images, you'd need to do some more work to convert them all into the same colourspace before inserting them. ```python #!/usr/bin/python3 #file try255.py import sys import random import pyvips # this makes a 8-bit, mono image of 100,000 x 100,000 pixels, each pixel zero im = pyvips.Image.black(100000, 100000) for filename in sys.argv[2:]: tile = pyvips.Image.new_from_file(filename, access='sequential') im = im.insert(tile, random.randint(0, im.width - tile.width), random.randint(0, im.height - tile.height)) im.write_to_file(sys.argv[1]) ``` libvips-8.15.1/doc/Examples.xml000066400000000000000000000064441454007373500163430ustar00rootroot00000000000000 Examples 3 libvips libvips examples A few example Python programs using libvips This page shows a few libvips examples using Python. They will work with small syntax changes in any language with a libvips binding. The libvips test suite is written in Python and exercises every operation in the API. It’s also a useful source of examples. Average a region of interest box on an image #!/usr/bin/python3 import sys import pyvips left = 10 top = 10 width = 64 height = 64 image = pyvips.Image.new_from_file(sys.argv[1]) roi = image.crop(left, top, width, height) print('average:', roi.avg()) Build huge image mosaic This makes a 100,000 x 100,000 black image, then inserts all the images you pass on the command-line into it at random positions. libvips is able to run this program in sequential mode: it’ll open all the input images at the same time, and stream pixels from them as it needs them to generate the output. To test it, first make a large 1-bit image. This command will take the green channel and write as a 1-bit fax image. wtc.jpg is a test 10,000 x 10,000 jpeg: $ vips extract_band wtc.jpg x.tif[squash,compression=ccittfax4,keep=none] 1 Now make 1,000 copies of that image in a subdirectory: $ mkdir test $ for i in {1..1000}; do cp x.tif test/$i.tif; done And run this Python program on them: $ time python try255.py x.tif[squash,compression=ccittfax4,strip,bigtiff] test/* real 1m59.924s user 4m5.388s sys 0m8.936s It completes in just under two minutes on this laptop, and needs about 7gb of RAM to run. It would need about the same amount of memory for a full-colour RGB image, I was just keen to keep disc usage down. If you wanted to handle transparency, or if you wanted mixed CMYK and RGB images, you’d need to do some more work to convert them all into the same colourspace before inserting them. #!/usr/bin/python3 #file try255.py import sys import random import pyvips # this makes a 8-bit, mono image of 100,000 x 100,000 pixels, each pixel zero im = pyvips.Image.black(100000, 100000) for filename in sys.argv[2:]: tile = pyvips.Image.new_from_file(filename, access='sequential') im = im.insert(tile, random.randint(0, im.width - tile.width), random.randint(0, im.height - tile.height)) im.write_to_file(sys.argv[1]) libvips-8.15.1/doc/How-it-opens-files.md000066400000000000000000000122171454007373500177510ustar00rootroot00000000000000 Opening files 3 libvips Opening How libvips opens files libvips has at least four different ways of opening image files, each best for different file types, file sizes and image use cases. libvips tries hard to pick the best strategy in each case and mostly you don't need to know what it is doing behind the scenes, except unfortunately when you do. This page tries to explain what the different strategies are and when each is used. If you are running into unexpected memory, disc or CPU use, this might be helpful. `vips_image_new_from_file()` has the official documentation. # Caching libvips caches recent operations. This means that if a file changes between one load and the next, the second load will return the old image, even though the file has been replaced. You can force libvips to load a file and ignore any cached value by setting the `revalidate` flag, see #VipsForeignLoad. # Direct access This is the fastest and simplest one. The file is mapped directly into the process's address space and can be read with ordinary pointer access. Small files are completely mapped; large files are mapped in a series of small windows that are shared and which scroll about as pixels are read. Files which are accessed like this can be read by many threads at once, making them especially quick. They also interact well with the computer's operating system: your OS will use spare memory to cache recently used chunks of the file. For this to be possible, the file format needs to be a simple dump of a memory array. libvips supports direct access for vips, 8-bit binary ppm/pbm/pnm, analyse and raw. libvips has a special direct write mode where pixels can be written directly to the file image. This is used for the draw operators. # Random access via load library Some image file formats have libraries which allow true random access to image pixels. For example, libtiff lets you read any tile out of a tiled tiff image very quickly. Because the libraries allow true random access, libvips can simply hook the image load library up to the input of the operation pipeline. These libraries are generally single-threaded, so only one thread may read at once, making them slower than simple direct access. Additionally, tiles are often compressed, meaning that each time a tile is fetched it must be decompressed. libvips keeps a cache of recently-decompressed tiles to try to avoid repeatedly decompressing the same tile. libvips can load tiled tiff, tiled OpenEXR, FITS and OpenSlide images in this manner. # Full decompression Many image load libraries do not support random access. In order to use images of this type as inputs to pipelines, libvips has to convert them to a random access format first. For small images (less than 100mb when decompressed), libvips allocates a large area of memory and decompresses the entire image to that. It then uses that memory buffer of decompressed pixels to feed the pipeline. For large images, libvips decompresses to a temporary file on disc, then loads that temporary file in direct access mode (see above). Note that on open libvips just reads the image header and is quick: the image decompress happens on the first pixel access. You can control this process with environment variables, command-line flags and API calls as you choose, see vips_image_new_from_file(). They let you set the threshold at which libvips switches between memory and disc and where on disc the temporary files are held. This is the slowest and most memory-hungry way to read files, but it's unavoidable for many file formats. Unless you can use the next one! # Sequential access This a fairly recent addition to libvips and is a hybrid of the previous two. Imagine how this command might be executed: ```bash $ vips flip fred.jpg jim.jpg vertical ``` meaning, read `fred.jpg`, flip it up-down, and write as `jim.jpg`. In order to write `jim.jpg` top-to-bottom, it'll have to read `fred.jpg` bottom-to-top. Unfortunately libjpeg only supports top-to-bottom reading and writing, so libvips must convert `fred.jpg` to a random access format before it can run the flip operation. However many useful operations do not require true random access.  For example: ```bash $ vips shrink fred.png jim.png 10 10 ``` meaning shrink `fred.png` by a factor of 10 in both axes and write as `jim.png`. You can imagine this operation running without needing `fred.png` to be completely decompressed first. You just read 10 lines from `fred.png` for every one line you write to `jim.png`. To help in this case, libvips has a hint you can give to loaders to say "I will only need pixels from this image in top-to-bottom order". With this hint set, libvips will hook up the pipeline of operations directly to the read-a-line interface provided by the image library, and add a small cache of the most recent 100 or so lines. This is done automatically in command-line operation. In programs, you need to set `access` to #VIPS_ACCESS_SEQUENTIAL in calls to functions like vips_image_new_from_file(). libvips-8.15.1/doc/How-it-opens-files.xml000066400000000000000000000147751454007373500201640ustar00rootroot00000000000000 Opening files 3 libvips Opening How libvips opens files libvips has at least four different ways of opening image files, each best for different file types, file sizes and image use cases. libvips tries hard to pick the best strategy in each case and mostly you don’t need to know what it is doing behind the scenes, except unfortunately when you do. This page tries to explain what the different strategies are and when each is used. If you are running into unexpected memory, disc or CPU use, this might be helpful. vips_image_new_from_file() has the official documentation. Caching libvips caches recent operations. This means that if a file changes between one load and the next, the second load will return the old image, even though the file has been replaced. You can force libvips to load a file and ignore any cached value by setting the revalidate flag, see #VipsForeignLoad. Direct access This is the fastest and simplest one. The file is mapped directly into the process’s address space and can be read with ordinary pointer access. Small files are completely mapped; large files are mapped in a series of small windows that are shared and which scroll about as pixels are read. Files which are accessed like this can be read by many threads at once, making them especially quick. They also interact well with the computer’s operating system: your OS will use spare memory to cache recently used chunks of the file. For this to be possible, the file format needs to be a simple dump of a memory array. libvips supports direct access for vips, 8-bit binary ppm/pbm/pnm, analyse and raw. libvips has a special direct write mode where pixels can be written directly to the file image. This is used for the draw operators. Random access via load library Some image file formats have libraries which allow true random access to image pixels. For example, libtiff lets you read any tile out of a tiled tiff image very quickly. Because the libraries allow true random access, libvips can simply hook the image load library up to the input of the operation pipeline. These libraries are generally single-threaded, so only one thread may read at once, making them slower than simple direct access. Additionally, tiles are often compressed, meaning that each time a tile is fetched it must be decompressed. libvips keeps a cache of recently-decompressed tiles to try to avoid repeatedly decompressing the same tile. libvips can load tiled tiff, tiled OpenEXR, FITS and OpenSlide images in this manner. Full decompression Many image load libraries do not support random access. In order to use images of this type as inputs to pipelines, libvips has to convert them to a random access format first. For small images (less than 100mb when decompressed), libvips allocates a large area of memory and decompresses the entire image to that. It then uses that memory buffer of decompressed pixels to feed the pipeline. For large images, libvips decompresses to a temporary file on disc, then loads that temporary file in direct access mode (see above). Note that on open libvips just reads the image header and is quick: the image decompress happens on the first pixel access. You can control this process with environment variables, command-line flags and API calls as you choose, see vips_image_new_from_file(). They let you set the threshold at which libvips switches between memory and disc and where on disc the temporary files are held. This is the slowest and most memory-hungry way to read files, but it’s unavoidable for many file formats. Unless you can use the next one! Sequential access This a fairly recent addition to libvips and is a hybrid of the previous two. Imagine how this command might be executed: $ vips flip fred.jpg jim.jpg vertical meaning, read fred.jpg, flip it up-down, and write as jim.jpg. In order to write jim.jpg top-to-bottom, it’ll have to read fred.jpg bottom-to-top. Unfortunately libjpeg only supports top-to-bottom reading and writing, so libvips must convert fred.jpg to a random access format before it can run the flip operation. However many useful operations do not require true random access.  For example: $ vips shrink fred.png jim.png 10 10 meaning shrink fred.png by a factor of 10 in both axes and write as jim.png. You can imagine this operation running without needing fred.png to be completely decompressed first. You just read 10 lines from fred.png for every one line you write to jim.png. To help in this case, libvips has a hint you can give to loaders to say I will only need pixels from this image in top-to-bottom order. With this hint set, libvips will hook up the pipeline of operations directly to the read-a-line interface provided by the image library, and add a small cache of the most recent 100 or so lines. This is done automatically in command-line operation. In programs, you need to set access to #VIPS_ACCESS_SEQUENTIAL in calls to functions like vips_image_new_from_file(). libvips-8.15.1/doc/How-it-works.md000066400000000000000000000326431454007373500166770ustar00rootroot00000000000000 How libvips works 3 libvips Internals A high-level technical overview of libvips's evaluation system Compared to most image processing libraries, VIPS needs little RAM and runs quickly, especially on machines with more than one CPU. VIPS achieves this improvement by only keeping the pixels currently being processed in RAM and by having an efficient, threaded image IO system. This page explains how these features are implemented. **Images** VIPS images have three dimensions: width, height and bands. Bands usually (though not always) represent colour. These three dimensions can be any size up to 2 ** 31 elements. Every band element in an image has to have the same format. A format is an 8-, 16- or 32-bit int, signed or unsigned, 32- or 64-bit float, and 64- or 128-bit complex. **Regions** An image can be very large, much larger than the available memory, so you can't just access pixels with a pointer \*. Instead, you read pixels from an image with a region. This is a rectangular sub-area of an image. In C, the API looks like: ```c VipsImage *image = vips_image_new_from_file(filename, NULL); VipsRegion *region = vips_region_new(image); // ask for a 100x100 pixel region at 0x0 (top left) VipsRect r = { .left = 0, .top = 0, .width = 100, .height = 100 }; if (vips_region_prepare(region, &r)) vips_error(...); // get a pointer to the pixel at x, y, where x, y must // be within the region // as long as you stay within the valid area for the region, // you can address pixels with regular pointer arithmetic // compile with -DDEBUG and the macro will check bounds for you // add VIPS_REGION_LSKIP() to move down a line VipsPel *pixel = VIPS_REGION_ADDR(region, x, y); // you can call vips_region_prepare() many times // everything in libvips is a GObject ... when you're done, // just free with g_object_unref(region); ``` The action that `vips_region_prepare()` takes varies with the type of image. If the image is a file on disc, for example, then VIPS will arrange for a section of the file to be read in. (\* there is an image access mode where you can just use a pointer, but it's rarely used) **Partial images** A partial image is one where, instead of storing a value for each pixel, VIPS stores a function which can make any rectangular area of pixels on demand. If you use `vips_region_prepare()` on a region created on a partial image, VIPS will allocate enough memory to hold the pixels you asked for and use the stored function to calculate values for just those pixels \*. The stored function comes in three parts: a start function, a generate function and a stop function. The start function creates a state, the generate function uses the state plus a requested area to calculate pixel values and the stop function frees the state again. Breaking the stored function into three parts is good for SMP scaling: resource allocation and synchronisation mostly happens in start functions, so generate functions can run without having to talk to each other. VIPS makes a set of guarantees about parallelism that make this simple to program. Start and stop functions are mutually exclusive and a state is never used by more than one generate. In other words, a start / generate / generate / stop sequence works like a thread. ![](Sequence.png) (\* in fact VIPS keeps a cache of calculated pixel buffers and will return a pointer to a previously-calculated buffer if it can) **Operations** VIPS operations read input images and write output images, performing some transformation on the pixels. When an operation writes to an image the action it takes depends upon the image type. For example, if the image is a file on disc then VIPS will start a data sink to stream pixels to the file, or if the image is a partial one then it will just attach start / generate / stop functions. Like most threaded image processing systems, all VIPS operations have to be free of side-effects. In other words, operations cannot modify images, they can only create new images. This could result in a lot of copying if an operation is only making a small change to a large image so VIPS has a set of mechanisms to copy image areas by just adjusting pointers. Most of the time no actual copying is necessary and you can perform operations on large images at low cost. **SIMD optimisations** VIPS uses Highway, a C++ library, to optimise various operations with SIMD/vector instructions. These optimised code paths are flexible and can adapt to different instruction sets, including those with 'scalable' vectors (size unknown at compile time). At runtime, dynamic dispatch selects the best available implementation based on the processor's capabilities, ensuring optimal performance. SIMD typically speeds operations up by a factor of three or four. **Joining operations together** The region create / prepare / prepare / free calls you use to get pixels from an image are an exact parallel to the start / generate / generate / stop calls that images use to create pixels. In fact, they are the same: a region on a partial image holds the state created by that image for the generate function that will fill the region with pixels. ![](Combine.png) VIPS joins image processing operations together by linking the output of one operation (the start / generate / stop sequence) to the input of the next (the region it uses to get pixels for processing). This link is a single function call, and very fast. Additionally, because of the the split between allocation and processing, once a pipeline of operations has been set up, VIPS is able to run without allocating and freeing memory. This graph (generated by `vipsprofile`, the vips profiler) shows memory use over time for a vips pipeline running on a large image. The bottom trace shows total memory, the upper traces show threads calculating useful results (green), threads blocked on synchronisation (red) and memory allocations (white ticks). ![](Memtrace.png) Because the intermediate image is just a small region in memory, a pipeline of operations running together needs very little RAM. In fact, intermediates are small enough that they can fit in L2 cache on most machines, so an entire pipeline can run without touching main memory. And finally, because each thread runs a very cheap copy of just the writeable state of the entire pipeline, threads can run with few locks. VIPS needs just four lock operations per output tile, regardless of the pipeline length or complexity. **Data sources** VIPS has data sources which can supply pixels for processing from a variety of sources. VIPS can stream images from files in VIPS native format, from tiled TIFF files, from binary PPM/PGM/PBM/PFM, from Radiance (HDR) files, from FITS images and from tiled OpenEXR images. VIPS will automatically unpack other formats to temporary disc files for you but this can obviously generate a lot of disc traffic. It also has a special sequential mode for streaming operations on non-random-access formats. Another section in these docs explains how libvips opens a file. One of the sources uses the ImageMagick (or optionally GraphicsMagick library, so VIPS can read any image format that these libraries can read. VIPS images are held on disc as a 64-byte header containing basic image information like width, height, bands and format, then the image data as a single large block of pixels, left-to-right and top-to-bottom, then an XML extension block holding all the image metadata, such as ICC profiles and EXIF blocks. When reading from a large VIPS image (or any other format with the same structure on disc, such as binary PPM), VIPS keeps a set of small rolling windows into the file, some small number of scanlines in size. As pixels are demanded by different threads VIPS will move these windows up and down the file. As a result, VIPS can process images much larger than RAM, even on 32-bit machines. **Data sinks** In a demand-driven system, something has to do the demanding. VIPS has a variety of data sinks that you can use to pull image data though a pipeline in various situations. There are sinks that will build a complete image in memory, sinks to draw to a display, sinks to loop over an image (useful for statistical operations, for example) and sinks to stream an image to disc. The disc sink looks something like this: ![](Sink.png) The sink keeps two buffers\*, each as wide as the image. It starts threads as rapidly as it can up to the concurrency limit, filling each buffer with tiles\*\* of calculated pixels, each thread calculating one tile at once. A separate background thread watches each buffer and, as soon as the last tile in a buffer finishes, writes that complete set of scanlines to disc using whatever image write library is appropriate. VIPS can write with libjpeg, libtiff, libpng and others. It then wipes the buffer and repositions it further down the image, ready for the next set of tiles to stream in. These features in combination mean that, once a pipeline of image processing operations has been built, VIPS can run almost lock-free. This is very important for SMP scaling: you don't want the synchronization overhead to scale with either the number of threads or the complexity of the pipeline of operations being performed. As a result, VIPS scales almost linearly with increasing numbers of threads: ![](Vips-smp.png) Number of CPUs is on the horizontal axis, speedup is on the vertical axis. Taken from the [[Benchmarks]] page. (\* there can actually be more than one, it allocate enough buffers to ensure that there are at least two tiles for every thread) (\*\* tiles can be any shape and size, VIPS has a tile hint system that operations use to tell sinks what tile geometry they prefer) **Operation cache** Because VIPS operations are free of side-effects\*, you can cache them. Every time you call an operation, VIPS searches the cache for a previous call to the same operation with the same arguments. If it finds a match, you get the previous result again. This can give a huge speedup. By default, VIPS caches the last 100 operation calls. You can also control the cache size by memory use or by files opened. (\* Some vips operations DO have side effects, for example, `vips_draw_circle()` will draw a circle on an image. These operations emit an "invalidate" signal on the image they are called on and this signal makes all downstream operations and caches drop their contents.) **Operation database and APIs** VIPS has around 300 image processing operations written in this style. Each operation is a GObject class. You can use the standard GObject calls to walk the class hierarchy and discover operations, and libvips adds a small amount of extra introspection metadata to handle things like optional arguments. The C API is a set of simple wrappers which create class instances for you. The C++ API is a little fancier and adds things like automatic object lifetime management. The command-line interface uses introspection to run any vips operation in the class hierarchy. There are bindings for many other languages on many platforms. Most of these bindings use the introspection system to generate the binding at run-time. **Snip** The VIPS GUI, nip2, has its own scripting language called Snip. Snip is a lazy, higher-order, purely functional, object oriented language. Almost all of nip2's menus are implemented in it, and nip2 workspaces are Snip programs. VIPS operations listed in the operation database appear as Snip functions. For example, `abs` can be used from Snip as: ``` // absolute value of image b a = vips_call "abs" [b] []; ``` However, `abs` won't work on anything except the primitive vips image type. It can't be used on any class, or list or number. Definitions in `_stdenv.dev` wrap each VIPS operation as a higher level Snip operation. For example: ``` abs x = oo_unary_function abs_op x, is_class x = vips_call "abs" [x] [], is_image x = abs_cmplx x, is_complex x = abs_num x, is_real x = abs_list x, is_real_list x = abs_list (map abs_list x), is_matrix x = error (_ "bad arguments to " ++ "abs") { abs_op = Operator "abs" abs Operator_type.COMPOUND false; abs_list l = (sum (map square l)) ** 0.5; abs_num n = n, n >= 0 = -n; abs_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; } ``` This defines the behaviour of `abs` for the base Snip types (number, list, matrix, image and so on), then classes will use that to define operator behaviour on higher-level objects. Now you can use: ``` // absolute value of anything a = abs b; ``` and you ought to get sane behaviour for any object, including things like the `Matrix` class. You can write Snip classes which present functions to the user as menu items. For example, `Math.def` has this: ``` Math_arithmetic_item = class Menupullright "_Arithmetic" "basic arithmetic for objects" { Absolute_value_item = class Menuaction "A_bsolute Value" "absolute value of x" { action x = map_unary abs x; } } ``` Now the user can select an object and click `Math / Abs` to find the absolute value of that object. libvips-8.15.1/doc/How-it-works.xml000066400000000000000000000375461454007373500171060ustar00rootroot00000000000000 How libvips works 3 libvips Internals A high-level technical overview of libvips’s evaluation system Compared to most image processing libraries, VIPS needs little RAM and runs quickly, especially on machines with more than one CPU. VIPS achieves this improvement by only keeping the pixels currently being processed in RAM and by having an efficient, threaded image IO system. This page explains how these features are implemented. Images VIPS images have three dimensions: width, height and bands. Bands usually (though not always) represent colour. These three dimensions can be any size up to 2 ** 31 elements. Every band element in an image has to have the same format. A format is an 8-, 16- or 32-bit int, signed or unsigned, 32- or 64-bit float, and 64- or 128-bit complex. Regions An image can be very large, much larger than the available memory, so you can’t just access pixels with a pointer *. Instead, you read pixels from an image with a region. This is a rectangular sub-area of an image. In C, the API looks like: VipsImage *image = vips_image_new_from_file(filename, NULL); VipsRegion *region = vips_region_new(image); // ask for a 100x100 pixel region at 0x0 (top left) VipsRect r = { .left = 0, .top = 0, .width = 100, .height = 100 }; if (vips_region_prepare(region, &r)) vips_error(...); // get a pointer to the pixel at x, y, where x, y must // be within the region // as long as you stay within the valid area for the region, // you can address pixels with regular pointer arithmetic // compile with -DDEBUG and the macro will check bounds for you // add VIPS_REGION_LSKIP() to move down a line VipsPel *pixel = VIPS_REGION_ADDR(region, x, y); // you can call vips_region_prepare() many times // everything in libvips is a GObject ... when you're done, // just free with g_object_unref(region); The action that vips_region_prepare() takes varies with the type of image. If the image is a file on disc, for example, then VIPS will arrange for a section of the file to be read in. (* there is an image access mode where you can just use a pointer, but it’s rarely used) Partial images A partial image is one where, instead of storing a value for each pixel, VIPS stores a function which can make any rectangular area of pixels on demand. If you use vips_region_prepare() on a region created on a partial image, VIPS will allocate enough memory to hold the pixels you asked for and use the stored function to calculate values for just those pixels *. The stored function comes in three parts: a start function, a generate function and a stop function. The start function creates a state, the generate function uses the state plus a requested area to calculate pixel values and the stop function frees the state again. Breaking the stored function into three parts is good for SMP scaling: resource allocation and synchronisation mostly happens in start functions, so generate functions can run without having to talk to each other. VIPS makes a set of guarantees about parallelism that make this simple to program. Start and stop functions are mutually exclusive and a state is never used by more than one generate. In other words, a start / generate / generate / stop sequence works like a thread. (* in fact VIPS keeps a cache of calculated pixel buffers and will return a pointer to a previously-calculated buffer if it can) Operations VIPS operations read input images and write output images, performing some transformation on the pixels. When an operation writes to an image the action it takes depends upon the image type. For example, if the image is a file on disc then VIPS will start a data sink to stream pixels to the file, or if the image is a partial one then it will just attach start / generate / stop functions. Like most threaded image processing systems, all VIPS operations have to be free of side-effects. In other words, operations cannot modify images, they can only create new images. This could result in a lot of copying if an operation is only making a small change to a large image so VIPS has a set of mechanisms to copy image areas by just adjusting pointers. Most of the time no actual copying is necessary and you can perform operations on large images at low cost. SIMD optimisations VIPS uses Highway, a C++ library, to optimise various operations with SIMD/vector instructions. These optimised code paths are flexible and can adapt to different instruction sets, including those with scalable vectors (size unknown at compile time). At runtime, dynamic dispatch selects the best available implementation based on the processor’s capabilities, ensuring optimal performance. SIMD typically speeds operations up by a factor of three or four. Joining operations together The region create / prepare / prepare / free calls you use to get pixels from an image are an exact parallel to the start / generate / generate / stop calls that images use to create pixels. In fact, they are the same: a region on a partial image holds the state created by that image for the generate function that will fill the region with pixels. VIPS joins image processing operations together by linking the output of one operation (the start / generate / stop sequence) to the input of the next (the region it uses to get pixels for processing). This link is a single function call, and very fast. Additionally, because of the the split between allocation and processing, once a pipeline of operations has been set up, VIPS is able to run without allocating and freeing memory. This graph (generated by vipsprofile, the vips profiler) shows memory use over time for a vips pipeline running on a large image. The bottom trace shows total memory, the upper traces show threads calculating useful results (green), threads blocked on synchronisation (red) and memory allocations (white ticks). Because the intermediate image is just a small region in memory, a pipeline of operations running together needs very little RAM. In fact, intermediates are small enough that they can fit in L2 cache on most machines, so an entire pipeline can run without touching main memory. And finally, because each thread runs a very cheap copy of just the writeable state of the entire pipeline, threads can run with few locks. VIPS needs just four lock operations per output tile, regardless of the pipeline length or complexity. Data sources VIPS has data sources which can supply pixels for processing from a variety of sources. VIPS can stream images from files in VIPS native format, from tiled TIFF files, from binary PPM/PGM/PBM/PFM, from Radiance (HDR) files, from FITS images and from tiled OpenEXR images. VIPS will automatically unpack other formats to temporary disc files for you but this can obviously generate a lot of disc traffic. It also has a special sequential mode for streaming operations on non-random-access formats. Another section in these docs explains how libvips opens a file. One of the sources uses the ImageMagick (or optionally GraphicsMagick library, so VIPS can read any image format that these libraries can read. VIPS images are held on disc as a 64-byte header containing basic image information like width, height, bands and format, then the image data as a single large block of pixels, left-to-right and top-to-bottom, then an XML extension block holding all the image metadata, such as ICC profiles and EXIF blocks. When reading from a large VIPS image (or any other format with the same structure on disc, such as binary PPM), VIPS keeps a set of small rolling windows into the file, some small number of scanlines in size. As pixels are demanded by different threads VIPS will move these windows up and down the file. As a result, VIPS can process images much larger than RAM, even on 32-bit machines. Data sinks In a demand-driven system, something has to do the demanding. VIPS has a variety of data sinks that you can use to pull image data though a pipeline in various situations. There are sinks that will build a complete image in memory, sinks to draw to a display, sinks to loop over an image (useful for statistical operations, for example) and sinks to stream an image to disc. The disc sink looks something like this: The sink keeps two buffers*, each as wide as the image. It starts threads as rapidly as it can up to the concurrency limit, filling each buffer with tiles** of calculated pixels, each thread calculating one tile at once. A separate background thread watches each buffer and, as soon as the last tile in a buffer finishes, writes that complete set of scanlines to disc using whatever image write library is appropriate. VIPS can write with libjpeg, libtiff, libpng and others. It then wipes the buffer and repositions it further down the image, ready for the next set of tiles to stream in. These features in combination mean that, once a pipeline of image processing operations has been built, VIPS can run almost lock-free. This is very important for SMP scaling: you don’t want the synchronization overhead to scale with either the number of threads or the complexity of the pipeline of operations being performed. As a result, VIPS scales almost linearly with increasing numbers of threads: Number of CPUs is on the horizontal axis, speedup is on the vertical axis. Taken from the [[Benchmarks]] page. (* there can actually be more than one, it allocate enough buffers to ensure that there are at least two tiles for every thread) (** tiles can be any shape and size, VIPS has a tile hint system that operations use to tell sinks what tile geometry they prefer) Operation cache Because VIPS operations are free of side-effects*, you can cache them. Every time you call an operation, VIPS searches the cache for a previous call to the same operation with the same arguments. If it finds a match, you get the previous result again. This can give a huge speedup. By default, VIPS caches the last 100 operation calls. You can also control the cache size by memory use or by files opened. (* Some vips operations DO have side effects, for example, vips_draw_circle() will draw a circle on an image. These operations emit an invalidate signal on the image they are called on and this signal makes all downstream operations and caches drop their contents.) Operation database and APIs VIPS has around 300 image processing operations written in this style. Each operation is a GObject class. You can use the standard GObject calls to walk the class hierarchy and discover operations, and libvips adds a small amount of extra introspection metadata to handle things like optional arguments. The C API is a set of simple wrappers which create class instances for you. The C++ API is a little fancier and adds things like automatic object lifetime management. The command-line interface uses introspection to run any vips operation in the class hierarchy. There are bindings for many other languages on many platforms. Most of these bindings use the introspection system to generate the binding at run-time. Snip The VIPS GUI, nip2, has its own scripting language called Snip. Snip is a lazy, higher-order, purely functional, object oriented language. Almost all of nip2’s menus are implemented in it, and nip2 workspaces are Snip programs. VIPS operations listed in the operation database appear as Snip functions. For example, abs can be used from Snip as: // absolute value of image b a = vips_call "abs" [b] []; However, abs won’t work on anything except the primitive vips image type. It can’t be used on any class, or list or number. Definitions in _stdenv.dev wrap each VIPS operation as a higher level Snip operation. For example: abs x = oo_unary_function abs_op x, is_class x = vips_call "abs" [x] [], is_image x = abs_cmplx x, is_complex x = abs_num x, is_real x = abs_list x, is_real_list x = abs_list (map abs_list x), is_matrix x = error (_ "bad arguments to " ++ "abs") { abs_op = Operator "abs" abs Operator_type.COMPOUND false; abs_list l = (sum (map square l)) ** 0.5; abs_num n = n, n >= 0 = -n; abs_cmplx c = ((re c)**2 + (im c)**2) ** 0.5; } This defines the behaviour of abs for the base Snip types (number, list, matrix, image and so on), then classes will use that to define operator behaviour on higher-level objects. Now you can use: // absolute value of anything a = abs b; and you ought to get sane behaviour for any object, including things like the Matrix class. You can write Snip classes which present functions to the user as menu items. For example, Math.def has this: Math_arithmetic_item = class Menupullright "_Arithmetic" "basic arithmetic for objects" { Absolute_value_item = class Menuaction "A_bsolute Value" "absolute value of x" { action x = map_unary abs x; } } Now the user can select an object and click Math / Abs to find the absolute value of that object. libvips-8.15.1/doc/Making-image-pyramids.md000066400000000000000000000151201454007373500204700ustar00rootroot00000000000000 Image pyramids 3 libvips Pyramids How to use libvips to make image pyramids libvips includes `vips_dzsave()`, an operation that can build image pyramids compatible with DeepZoom, Zoomify and Google Maps image viewers. It's fast and can generate pyramids for large images using only a small amount of memory. The TIFF writer, `vips_tiffsave()` can also build tiled pyramidal TIFF images, but that's very simple to use. This page concentrates on the DeepZoom builder. Run dzsave with no arguments to see a summary: ``` $ vips dzsave save image to deepzoom file usage: dzsave in filename where: in - Image to save, input VipsImage filename - Filename to save to, input gchararray optional arguments: basename - Base name to save to, input gchararray layout - Directory layout, input VipsForeignDzLayout default: dz allowed: dz, zoomify, google, iiif, iiif3 suffix - Filename suffix for tiles, input gchararray overlap - Tile overlap in pixels, input gint default: 1 min: 0, max: 8192 tile-size - Tile size in pixels, input gint default: 254 min: 1, max: 8192 centre - Center image in tile, input gboolean default: false depth - Pyramid depth, input VipsForeignDzDepth default: onepixel allowed: onepixel, onetile, one angle - Rotate image during save, input VipsAngle default: d0 allowed: d0, d90, d180, d270 container - Pyramid container type, input VipsForeignDzContainer default: fs allowed: fs, zip properties - Write a properties file to the output directory, input gboolean default: false compression - ZIP deflate compression level, input gint default: 0 min: -1, max: 9 strip - Strip all metadata from image, input gboolean default: false background - Background value, input VipsArrayDouble operation flags: sequential nocache ``` You can also call `vips_dzsave()` from any language with a libvips binding, or by using `.dz` or `.szi` as an output file suffix. # Writing DeepZoom pyramids The `--layout` option sets the basic mode of operation. With no `--layout`, dzsave writes DeepZoom pyramids. For example: ```bash $ vips dzsave huge.tif mydz ``` This will create a directory called `mydz_files` containing the image tiles, and write a file called `mydz.dzi` containing the image metadata.  You can use the `--suffix` option to control how tiles are written. For example: ```bash $ vips dzsave huge.tif mydz --suffix .jpg[Q=90] ``` will write JPEG tiles with the quality factor set to 90. You can set any format write options you like, see the API docs for `vips_jpegsave()` for details. # Writing Zoomify pyramids Use `--layout zoomify` to put dzsave into zoomify mode. For example: ```bash $ vips dzsave huge.tif myzoom --layout zoomify ``` This will create a directory called `myzoom` containing a file called `ImageProperties.xml` with the image metadata in, and a series of directories called `TileGroupn`, each containing 256 image tiles. As with DeepZoom, you can use `--suffix` to set jpeg quality. # Writing Google Maps pyramids Use `--layout google` to write Google maps-style pyramids. These are compatible with Leaflet. For example: ```bash $ vips dzsave wtc.tif gmapdir --layout google ``` Will create a directory called `gmapdir` containing `blank.png`, the file to display for blank tiles, and a set of numbered directories, one for each zoom level. The pyramid can be sparse (blank tiles are not written). As with DeepZoom, you can use `--suffix` to set jpeg quality. Use `--background` to set the background colour. This is the colour displayed for bits of the pyramid not in the image (image edges, for example). By default, the image background is white. Use `--centre` to add a border to the image large enough to centre the image within the lowest resolution tile. By default, images are not centred. For example: ```bash $ vips dzsave wtc.tif gmapdir --layout google --background 0 --centre ``` # Other options You can use `--tile-size` and `--overlap` to control how large the tiles are and how they overlap (obviously). They default to the correct values for the selected layout. You can use `--depth` to control how deep the pyramid should be. Possible values are `onepixel`, `onetile` and `one`. `onepixel` means the image is shrunk until it fits within a single pixel. `onetile` means shrink until it fits with a tile. `one` means only write one pyramid layer (the highest resolution one). It defaults to the correct value for the selected layout. `--depth one` is handy for slicing up a large image into tiles (rather than a pyramid). You can use `--angle` to do a 90, 180 or 270 degree rotate of an image during pyramid write. You can use `--container` to set the container type. Normally dzsave will write a tree of directories, but with `--container zip` you'll get a zip file instead. Use .zip as the directory suffix to turn on zip format automatically: ```bash $ vips dzsave wtc.tif mypyr.zip ``` to write a zipfile containing the tiles. You can use `.szi` as a suffix to enable zip output as well. Use `--properties` to output an XML file called `vips-properties.xml`. This contains a dump of all the metadata vips has about the image as a set of name-value pairs. It's handy with openslide image sources. # Preprocessing images You can use `.dz` as a filename suffix, meaning send the image to `vips_dzsave()`. This means you can write the output of any vips operation to a pyramid. For example: ```bash $ vips extract_area huge.svs mypy.dz[layout=google] 100 100 10000 10000 ``` The arguments to `extract_area` are image-in, image-out, left, top, width, height. So this command will cut out a 10,000 by 10,000 pixel area from near the top-left-hand corner of an Aperio slide image, then build a pyramid in Google layout using just those pixels. If you are working from OpenSlide images, you can use the shrink-on-load feature of many of those formats. For example: ```bash $ vips dzsave CMU-1.mrxs[level=1] x ``` Will pull out level 1 (the half-resolution level of an MRXS slide) and make a pyramid from that. # Troubleshooting If you are building vips from source you do need to check the summary at the end of configure carefully. You must have the `libarchive-dev` package for `vips_dzsave()` to work. libvips-8.15.1/doc/Making-image-pyramids.xml000066400000000000000000000217651454007373500207040ustar00rootroot00000000000000 Image pyramids 3 libvips Pyramids How to use libvips to make image pyramids libvips includes vips_dzsave(), an operation that can build image pyramids compatible with DeepZoom, Zoomify and Google Maps image viewers. It’s fast and can generate pyramids for large images using only a small amount of memory. The TIFF writer, vips_tiffsave() can also build tiled pyramidal TIFF images, but that’s very simple to use. This page concentrates on the DeepZoom builder. Run dzsave with no arguments to see a summary: $ vips dzsave save image to deepzoom file usage: dzsave in filename where: in - Image to save, input VipsImage filename - Filename to save to, input gchararray optional arguments: basename - Base name to save to, input gchararray layout - Directory layout, input VipsForeignDzLayout default: dz allowed: dz, zoomify, google, iiif, iiif3 suffix - Filename suffix for tiles, input gchararray overlap - Tile overlap in pixels, input gint default: 1 min: 0, max: 8192 tile-size - Tile size in pixels, input gint default: 254 min: 1, max: 8192 centre - Center image in tile, input gboolean default: false depth - Pyramid depth, input VipsForeignDzDepth default: onepixel allowed: onepixel, onetile, one angle - Rotate image during save, input VipsAngle default: d0 allowed: d0, d90, d180, d270 container - Pyramid container type, input VipsForeignDzContainer default: fs allowed: fs, zip properties - Write a properties file to the output directory, input gboolean default: false compression - ZIP deflate compression level, input gint default: 0 min: -1, max: 9 strip - Strip all metadata from image, input gboolean default: false background - Background value, input VipsArrayDouble operation flags: sequential nocache You can also call vips_dzsave() from any language with a libvips binding, or by using .dz or .szi as an output file suffix. Writing DeepZoom pyramids The --layout option sets the basic mode of operation. With no --layout, dzsave writes DeepZoom pyramids. For example: $ vips dzsave huge.tif mydz This will create a directory called mydz_files containing the image tiles, and write a file called mydz.dzi containing the image metadata.  You can use the --suffix option to control how tiles are written. For example: $ vips dzsave huge.tif mydz --suffix .jpg[Q=90] will write JPEG tiles with the quality factor set to 90. You can set any format write options you like, see the API docs for vips_jpegsave() for details. Writing Zoomify pyramids Use --layout zoomify to put dzsave into zoomify mode. For example: $ vips dzsave huge.tif myzoom --layout zoomify This will create a directory called myzoom containing a file called ImageProperties.xml with the image metadata in, and a series of directories called TileGroupn, each containing 256 image tiles. As with DeepZoom, you can use --suffix to set jpeg quality. Writing Google Maps pyramids Use --layout google to write Google maps-style pyramids. These are compatible with Leaflet. For example: $ vips dzsave wtc.tif gmapdir --layout google Will create a directory called gmapdir containing blank.png, the file to display for blank tiles, and a set of numbered directories, one for each zoom level. The pyramid can be sparse (blank tiles are not written). As with DeepZoom, you can use --suffix to set jpeg quality. Use --background to set the background colour. This is the colour displayed for bits of the pyramid not in the image (image edges, for example). By default, the image background is white. Use --centre to add a border to the image large enough to centre the image within the lowest resolution tile. By default, images are not centred. For example: $ vips dzsave wtc.tif gmapdir --layout google --background 0 --centre Other options You can use --tile-size and --overlap to control how large the tiles are and how they overlap (obviously). They default to the correct values for the selected layout. You can use --depth to control how deep the pyramid should be. Possible values are onepixel, onetile and one. onepixel means the image is shrunk until it fits within a single pixel. onetile means shrink until it fits with a tile. one means only write one pyramid layer (the highest resolution one). It defaults to the correct value for the selected layout. --depth one is handy for slicing up a large image into tiles (rather than a pyramid). You can use --angle to do a 90, 180 or 270 degree rotate of an image during pyramid write. You can use --container to set the container type. Normally dzsave will write a tree of directories, but with --container zip you’ll get a zip file instead. Use .zip as the directory suffix to turn on zip format automatically: $ vips dzsave wtc.tif mypyr.zip to write a zipfile containing the tiles. You can use .szi as a suffix to enable zip output as well. Use --properties to output an XML file called vips-properties.xml. This contains a dump of all the metadata vips has about the image as a set of name-value pairs. It’s handy with openslide image sources. Preprocessing images You can use .dz as a filename suffix, meaning send the image to vips_dzsave(). This means you can write the output of any vips operation to a pyramid. For example: $ vips extract_area huge.svs mypy.dz[layout=google] 100 100 10000 10000 The arguments to extract_area are image-in, image-out, left, top, width, height. So this command will cut out a 10,000 by 10,000 pixel area from near the top-left-hand corner of an Aperio slide image, then build a pyramid in Google layout using just those pixels. If you are working from OpenSlide images, you can use the shrink-on-load feature of many of those formats. For example: $ vips dzsave CMU-1.mrxs[level=1] x Will pull out level 1 (the half-resolution level of an MRXS slide) and make a pyramid from that. Troubleshooting If you are building vips from source you do need to check the summary at the end of configure carefully. You must have the libarchive-dev package for vips_dzsave() to work. libvips-8.15.1/doc/Using-vipsthumbnail.md000066400000000000000000000230401454007373500203240ustar00rootroot00000000000000 Using `vipsthumbnail` 3 libvips `vipsthumbnail` Introduction to `vipsthumbnail`, with examples libvips ships with a handy command-line image thumbnailer, `vipsthumbnail`. This page introduces it, with some examples. The thumbnailing functionality is implemented by `vips_thumbnail()` and `vips_thumbnail_buffer()` (which thumbnails an image held as a string), see the docs for details. You can use these functions from any language with a libvips binding. For example, from PHP you could write: ```php?start_inline=1 $filename = "image.jpg"; $image = Vips\Image::thumbnail($filename, 200, ["height" => 200]); $image->writeToFile("my-thumbnail.jpg"); ``` You can also call `thumbnail_source` from the CLI, for example: ```bash $ cat k2.jpg | \ vips thumbnail_source [descriptor=0] .jpg[Q=90] 128 | \ cat > x.jpg ``` # libvips options `vipsthumbnail` supports the usual range of vips command-line options. A few of them are useful: `--vips-cache-trace` shows each operation as libvips starts it. It can be handy to see exactly what operations `vipsthumbnail` is running for you. `--vips-leak` turns on the libvips memory leak checker. As well as reporting leaks (hopefully there are none) it also tracks and reports peak memory use. `--vips-progress` runs a progress indicator during computation. It can be useful to see where libvips is looping and how often. `--vips-info` shows a higher level view of the operations that `vipsthumbnail` is running.  # Looping `vipsthumbnail` can process many images in one command. For example: ```bash $ vipsthumbnail *.jpg ``` will make a thumbnail for every jpeg in the current directory.  See the [Output directory](#output-directory) section below to see how to change where thumbnails are written. `vipsthumbnail` will process images one after the other. You can get a good speedup by running several `vipsthumbnail`s in parallel, depending on how much load you want to put on your system. For example: ```bash $ parallel vipsthumbnail ::: *.jpg ``` # Thumbnail size You can set the bounding box of the generated thumbnail with the `--size` option. For example: ```bash $ vipsthumbnail shark.jpg --size 200x100 ``` Use a single number to set a square bounding box. You can omit either number but keep the x to mean resize just based on that axis, for example: ```bash $ vipsthumbnail shark.jpg --size 200x ``` Will resize to 200 pixels across, no matter what the height of the input image is. You can append `<` or `>` to mean only resize if the image is smaller or larger than the target. You can append `!` to force a resize to the exact target size, breaking the aspect ratio. # Cropping `vipsthumbnail` normally shrinks images to fit within the box set by `--size`. You can use the `--smartcrop` option to crop to fill the box instead. Excess pixels are trimmed away using the strategy you set. For example: ```bash $ vipsthumbnail owl.jpg --smartcrop attention -s 128 ``` Where `owl.jpg` is an off-centre composition: ![](owl.jpg) Gives this result: ![](tn_owl.jpg) First it shrinks the image to get the vertical axis to 128 pixels, then crops down to 128 pixels across using the `attention` strategy. This one searches the image for features which might catch a human eye, see `vips_smartcrop()` for details. # Linear light Shrinking images involves combining many pixels into one. Arithmetic averaging really ought to be in terms of the number of photons, but (for historical reasons) the values stored in image files are usually related to the voltage that should be applied to the electron gun in a CRT display. `vipsthumbnail` has an option to perform image shrinking in linear space, that is, a colourspace where values are proportional to photon numbers. For example: ```bash $ vipsthumbnail fred.jpg --linear ``` The downside is that in linear mode, none of the very fast shrink-on-load tricks that `vipsthumbnail` normally uses are possible, since the shrinking is done at encode time, not decode time, and is done in terms of CRT voltage, not photons. This can make linear light thumbnailing of large images extremely slow. For example, for a 10,000 x 10,000 pixel JPEG I see: ```bash $ time vipsthumbnail wtc.jpg real 0m0.317s user 0m0.292s sys 0m0.016s $ time vipsthumbnail wtc.jpg --linear real 0m4.660s user 0m4.640s sys 0m0.016s ``` # Output directory You set the thumbnail write parameters with the `-o` option. This is a pattern which the input filename is pasted into to produce the output filename. For example: ```bash $ vipsthumbnail fred.jpg jim.tif -o tn_%s.jpg ``` For each of the files to be thumbnailed, `vipsthumbnail` will drop the extension (`.jpg` and `.tif` in this case) and then substitute the name into the `-o` option, replacing the `%s` So this example will write thumbnails to `tn_fred.jpg` and `tn_jim.jpg`. If the pattern given to `-o` is an absolute path, any path components are dropped from the input filenames. This lets you write all of your thumbnails to a specific directory, if you want. For example: ```bash $ vipsthumbnail fred.jpg ../jim.tif -o /mythumbs/tn_%s.jpg ``` Now both thumbnails will be written to `/mythumbs`, even though the source images are in different directories. Conversely, if `-o` is set to a relative path, any path component from the input file is prepended. For example: ```bash $ vipsthumbnail fred.jpg ../jim.tif -o mythumbs/tn_%s.jpg ``` Now both input files will have thumbnails written to a subdirectory of their current directory. # Output format and options You can use `-o` to specify the thumbnail image format too. For example:  ```bash $ vipsthumbnail fred.jpg ../jim.tif -o tn_%s.png ``` Will write thumbnails in PNG format. You can give options to the image write operation as a list of comma-separated arguments in square brackets. For example: ```bash $ vipsthumbnail fred.jpg ../jim.tif -o tn_%s.jpg[Q=90,optimize_coding] ``` will write jpeg images with quality 90, and will turn on the libjpeg coding optimizer. Check the image write operations to see all the possible options. For example: ``` $ vips jpegsave save image to jpeg file usage: jpegsave in filename where: in - Image to save, input VipsImage filename - Filename to save to, input gchararray optional arguments: Q - Q factor, input gint default: 75 min: 1, max: 100 profile - Filename of ICC profile to embed, input gchararray optimize-coding - Compute optimal Huffman coding tables, input gboolean default: false interlace - Generate an interlaced (progressive) jpeg, input gboolean default: false trellis-quant - Apply trellis quantisation to each 8x8 block, input gboolean default: false overshoot-deringing - Apply overshooting to samples with extreme values, input gboolean default: false optimize-scans - Split spectrum of DCT coefficients into separate scans, input gboolean default: false quant-table - Use predefined quantization table with given index, input gint default: 0 min: 0, max: 8 subsample-mode - Select chroma subsample operation mode, input VipsForeignSubsample default enum: auto allowed enums: auto, on, off restart-interval - Add restart markers every specified number of mcu, input gint default: 0 min: 0, max: 2147483647 keep - Which metadata to retain, input VipsForeignKeep default flags: exif:xmp:iptc:icc:other:all allowed flags: none, exif, xmp, iptc, icc, other, all background - Background value, input VipsArrayDouble ``` The `keep` option is especially useful. Many image have very large IPTC, ICC or XMP metadata items embedded in them, and removing these can give a large saving. For example: ``` $ vipsthumbnail 42-32157534.jpg $ ls -l tn_42-32157534.jpg -rw-r–r– 1 john john 6682 Nov 12 21:27 tn_42-32157534.jpg ``` `keep=none` almost halves the size of the thumbnail: ``` $ vipsthumbnail 42-32157534.jpg -o x.jpg[optimize_coding,keep=none] $ ls -l x.jpg -rw-r–r– 1 john john 3600 Nov 12 21:27 x.jpg ``` # Colour management `vipsthumbnail` will optionally put images through LittleCMS for you. You can use this to move all thumbnails to the same colour space. All web browsers assume that images without an ICC profile are in sRGB colourspace, so if you move your thumbnails to sRGB, you can strip all the embedded profiles. This can save several kb per thumbnail. For example: ``` $ vipsthumbnail shark.jpg $ ls -l tn_shark.jpg -rw-r–r– 1 john john 7295 Nov  9 14:33 tn_shark.jpg ``` Now transform to sRGB and don't attach a profile (you can also use `keep=none`, though that will remove *all* metadata from the image): ``` $ vipsthumbnail shark.jpg --export-profile srgb -o tn_shark.jpg[profile=none] $ ls -l tn_shark.jpg -rw-r–r– 1 john john 4229 Nov  9 14:33 tn_shark.jpg ``` (You can use the filename of any RGB profile. The magic string `srgb` selects a high-quality sRGB profile that's built into libvips.) `tn_shark.jpg` will look identical to a user, but it's almost half the size. You can also specify a fallback input profile to use if the image has no embedded one. For example, perhaps you somehow know that a JPG is in Adobe98 space, even though it has no embedded profile. ```bash $ vipsthumbnail kgdev.jpg --input-profile /my/profiles/a98.icm ``` # Final suggestion Putting all this together, I suggest this as a sensible set of options: ```bash $ vipsthumbnail fred.jpg \ --size 128 \ --export-profile srgb \ -o tn_%s.jpg[optimize_coding,keep=none] ``` libvips-8.15.1/doc/Using-vipsthumbnail.xml000066400000000000000000000324141454007373500205310ustar00rootroot00000000000000 Using vipsthumbnail 3 libvips vipsthumbnail Introduction to vipsthumbnail, with examples libvips ships with a handy command-line image thumbnailer, vipsthumbnail. This page introduces it, with some examples. The thumbnailing functionality is implemented by vips_thumbnail() and vips_thumbnail_buffer() (which thumbnails an image held as a string), see the docs for details. You can use these functions from any language with a libvips binding. For example, from PHP you could write: $filename = "image.jpg"; $image = Vips\Image::thumbnail($filename, 200, ["height" => 200]); $image->writeToFile("my-thumbnail.jpg"); You can also call thumbnail_source from the CLI, for example: $ cat k2.jpg | \ vips thumbnail_source [descriptor=0] .jpg[Q=90] 128 | \ cat > x.jpg libvips options vipsthumbnail supports the usual range of vips command-line options. A few of them are useful: --vips-cache-trace shows each operation as libvips starts it. It can be handy to see exactly what operations vipsthumbnail is running for you. --vips-leak turns on the libvips memory leak checker. As well as reporting leaks (hopefully there are none) it also tracks and reports peak memory use. --vips-progress runs a progress indicator during computation. It can be useful to see where libvips is looping and how often. --vips-info shows a higher level view of the operations that vipsthumbnail is running.  Looping vipsthumbnail can process many images in one command. For example: $ vipsthumbnail *.jpg will make a thumbnail for every jpeg in the current directory.  See the Output directory section below to see how to change where thumbnails are written. vipsthumbnail will process images one after the other. You can get a good speedup by running several vipsthumbnails in parallel, depending on how much load you want to put on your system. For example: $ parallel vipsthumbnail ::: *.jpg Thumbnail size You can set the bounding box of the generated thumbnail with the --size option. For example: $ vipsthumbnail shark.jpg --size 200x100 Use a single number to set a square bounding box. You can omit either number but keep the x to mean resize just based on that axis, for example: $ vipsthumbnail shark.jpg --size 200x Will resize to 200 pixels across, no matter what the height of the input image is. You can append < or > to mean only resize if the image is smaller or larger than the target. You can append ! to force a resize to the exact target size, breaking the aspect ratio. Cropping vipsthumbnail normally shrinks images to fit within the box set by --size. You can use the --smartcrop option to crop to fill the box instead. Excess pixels are trimmed away using the strategy you set. For example: $ vipsthumbnail owl.jpg --smartcrop attention -s 128 Where owl.jpg is an off-centre composition: Gives this result: First it shrinks the image to get the vertical axis to 128 pixels, then crops down to 128 pixels across using the attention strategy. This one searches the image for features which might catch a human eye, see vips_smartcrop() for details. Linear light Shrinking images involves combining many pixels into one. Arithmetic averaging really ought to be in terms of the number of photons, but (for historical reasons) the values stored in image files are usually related to the voltage that should be applied to the electron gun in a CRT display. vipsthumbnail has an option to perform image shrinking in linear space, that is, a colourspace where values are proportional to photon numbers. For example: $ vipsthumbnail fred.jpg --linear The downside is that in linear mode, none of the very fast shrink-on-load tricks that vipsthumbnail normally uses are possible, since the shrinking is done at encode time, not decode time, and is done in terms of CRT voltage, not photons. This can make linear light thumbnailing of large images extremely slow. For example, for a 10,000 x 10,000 pixel JPEG I see: $ time vipsthumbnail wtc.jpg real 0m0.317s user 0m0.292s sys 0m0.016s $ time vipsthumbnail wtc.jpg --linear real 0m4.660s user 0m4.640s sys 0m0.016s Output directory You set the thumbnail write parameters with the -o option. This is a pattern which the input filename is pasted into to produce the output filename. For example: $ vipsthumbnail fred.jpg jim.tif -o tn_%s.jpg For each of the files to be thumbnailed, vipsthumbnail will drop the extension (.jpg and .tif in this case) and then substitute the name into the -o option, replacing the %s So this example will write thumbnails to tn_fred.jpg and tn_jim.jpg. If the pattern given to -o is an absolute path, any path components are dropped from the input filenames. This lets you write all of your thumbnails to a specific directory, if you want. For example: $ vipsthumbnail fred.jpg ../jim.tif -o /mythumbs/tn_%s.jpg Now both thumbnails will be written to /mythumbs, even though the source images are in different directories. Conversely, if -o is set to a relative path, any path component from the input file is prepended. For example: $ vipsthumbnail fred.jpg ../jim.tif -o mythumbs/tn_%s.jpg Now both input files will have thumbnails written to a subdirectory of their current directory. Output format and options You can use -o to specify the thumbnail image format too. For example:  $ vipsthumbnail fred.jpg ../jim.tif -o tn_%s.png Will write thumbnails in PNG format. You can give options to the image write operation as a list of comma-separated arguments in square brackets. For example: $ vipsthumbnail fred.jpg ../jim.tif -o tn_%s.jpg[Q=90,optimize_coding] will write jpeg images with quality 90, and will turn on the libjpeg coding optimizer. Check the image write operations to see all the possible options. For example: $ vips jpegsave save image to jpeg file usage: jpegsave in filename where: in - Image to save, input VipsImage filename - Filename to save to, input gchararray optional arguments: Q - Q factor, input gint default: 75 min: 1, max: 100 profile - Filename of ICC profile to embed, input gchararray optimize-coding - Compute optimal Huffman coding tables, input gboolean default: false interlace - Generate an interlaced (progressive) jpeg, input gboolean default: false trellis-quant - Apply trellis quantisation to each 8x8 block, input gboolean default: false overshoot-deringing - Apply overshooting to samples with extreme values, input gboolean default: false optimize-scans - Split spectrum of DCT coefficients into separate scans, input gboolean default: false quant-table - Use predefined quantization table with given index, input gint default: 0 min: 0, max: 8 subsample-mode - Select chroma subsample operation mode, input VipsForeignSubsample default enum: auto allowed enums: auto, on, off restart-interval - Add restart markers every specified number of mcu, input gint default: 0 min: 0, max: 2147483647 keep - Which metadata to retain, input VipsForeignKeep default flags: exif:xmp:iptc:icc:other:all allowed flags: none, exif, xmp, iptc, icc, other, all background - Background value, input VipsArrayDouble The keep option is especially useful. Many image have very large IPTC, ICC or XMP metadata items embedded in them, and removing these can give a large saving. For example: $ vipsthumbnail 42-32157534.jpg $ ls -l tn_42-32157534.jpg -rw-r–r– 1 john john 6682 Nov 12 21:27 tn_42-32157534.jpg keep=none almost halves the size of the thumbnail: $ vipsthumbnail 42-32157534.jpg -o x.jpg[optimize_coding,keep=none] $ ls -l x.jpg -rw-r–r– 1 john john 3600 Nov 12 21:27 x.jpg Colour management vipsthumbnail will optionally put images through LittleCMS for you. You can use this to move all thumbnails to the same colour space. All web browsers assume that images without an ICC profile are in sRGB colourspace, so if you move your thumbnails to sRGB, you can strip all the embedded profiles. This can save several kb per thumbnail. For example: $ vipsthumbnail shark.jpg $ ls -l tn_shark.jpg -rw-r–r– 1 john john 7295 Nov  9 14:33 tn_shark.jpg Now transform to sRGB and don’t attach a profile (you can also use keep=none, though that will remove all metadata from the image): $ vipsthumbnail shark.jpg --export-profile srgb -o tn_shark.jpg[profile=none] $ ls -l tn_shark.jpg -rw-r–r– 1 john john 4229 Nov  9 14:33 tn_shark.jpg (You can use the filename of any RGB profile. The magic string srgb selects a high-quality sRGB profile that’s built into libvips.) tn_shark.jpg will look identical to a user, but it’s almost half the size. You can also specify a fallback input profile to use if the image has no embedded one. For example, perhaps you somehow know that a JPG is in Adobe98 space, even though it has no embedded profile. $ vipsthumbnail kgdev.jpg --input-profile /my/profiles/a98.icm Final suggestion Putting all this together, I suggest this as a sensible set of options: $ vipsthumbnail fred.jpg \ --size 128 \ --export-profile srgb \ -o tn_%s.jpg[optimize_coding,keep=none] libvips-8.15.1/doc/binding.md000066400000000000000000000150111454007373500157650ustar00rootroot00000000000000 How to write bindings 3 libvips Binding Writing bindings for libvips There are full libvips bindings for quite a few environments now: C, C++, command-line, Ruby, PHP, Lua, Python and JavaScript (node). This chapter runs through the four main styles that have been found to work well. If you want to write a new binding, one of these should be close to what you need. # Don't bind the top-level C API The libvips C API (vips_add() and so on) was designed to be easy for humans to write. It is inconvenient and dangerous to use from other languages due to its heavy use of varargs. It's much better to use the layer below. This lower layer is structured as: - Create operator. You can use vips_operation_new() to make a new `VipsOperation` object from an operator nickname, like `"add"`. - Set parameters. You can loop over the operation with vips_argument_map() to get the name and type of each input argument. For each argument, you need to get the value from your language, convert to a `GValue`, then use g_object_set_property() to set that value on the operator. - Execute with vips_cache_operation_build(). - Extract results. Again, you loop over the operator arguments with vips_argument_map(), but instead of inputs, this time you look for output arguments. You extract their value with g_object_get_property(), and pass the value back to your language. For example, you can execute vips_invert() like this: ```c /* compile with * * gcc -g -Wall callvips.c `pkg-config vips --cflags --libs` * */ #include int main(int argc, char **argv) { VipsImage *in; VipsImage *out; VipsOperation *op; VipsOperation *new_op; GValue gvalue = G_VALUE_INIT; if (VIPS_INIT(argv[0])) /* This shows the vips error buffer and quits with a fail exit * code. */ vips_error_exit(NULL); /* This will print a table of any ref leaks on exit, very handy for * development. */ vips_leak_set(TRUE); if (argc != 3) vips_error_exit("usage: %s input-filename output-filename", argv[0]); if (!(in = vips_image_new_from_file(argv[1], NULL))) vips_error_exit(NULL); /* Create a new operator from a nickname. NULL for unknown operator. */ op = vips_operation_new("invert"); /* Init a gvalue as an image, set it to in, use the gvalue to set the * operator property. */ g_value_init(&gvalue, VIPS_TYPE_IMAGE); g_value_set_object(&gvalue, in); g_object_set_property(G_OBJECT(op), "in", &gvalue); g_value_unset(&gvalue); /* We no longer need in: op will hold a ref to it as long as it needs * it. */ g_object_unref(in); /* Call the operation. This will look up the operation+args in the vips * operation cache and either return a previous operation, or build * this one. In either case, we have a new ref we must release. */ if (!(new_op = vips_cache_operation_build(op))) { g_object_unref(op); vips_error_exit(NULL); } g_object_unref(op); op = new_op; /* Now get the result from op. g_value_get_object() does not ref the * object, so we need to make a ref for out to hold. */ g_value_init(&gvalue, VIPS_TYPE_IMAGE); g_object_get_property(G_OBJECT(op), "out", &gvalue); out = VIPS_IMAGE(g_value_get_object(&gvalue)); g_object_ref(out); g_value_unset(&gvalue); /* All done: we can unref op. The output objects from op actually hold * refs back to it, so before we can unref op, we must unref them. */ vips_object_unref_outputs(VIPS_OBJECT(op)); g_object_unref(op); if (vips_image_write_to_file(out, argv[2], NULL)) vips_error_exit(NULL); g_object_unref(out); return 0; } ``` # Compiled language which can call C The C++ binding uses this lower layer to define a function called `VImage::call()` which can call any libvips operator with a set of variable arguments. A small Python program walks the set of all libvips operators and generates a set of static bindings. For example: ```c++ VImage VImage::invert(VOption *options) const { VImage out; call("invert", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } ``` So from C++ you can call any libvips operator (though without static typechecking) with `VImage::call()`, or use the member functions on `VImage` to get type-checked calls for at least the required operator arguments. The `VImage` class also adds automatic reference counting, constant expansion, operator overloads, and various other useful features. # Dynamic language with FFI Languages like Ruby, Python, JavaScript and LuaJIT can't call C directly, but they do support FFI. The bindings for these languages work rather like C++, but use FFI to call into libvips and run operations. Since these languages are dynamic, they can add another trick: they intercept the method-missing hook and attempt to run any method calls not implemented by the `Image` class as libvips operators. In effect, the binding is generated at runtime. # gobject-introspection The C source code to libvips has been marked up with special comments describing the interface in a standard way. These comments are read by the `gobject-introspection` package when libvips is compiled and used to generate a typelib, a description of how to call the library. Many languages have gobject-introspection packages: all you need to do to call libvips from your favorite language is to start g-o-i, load the libvips typelib, and you should have the whole library available. For example, from Python it's as simple as: ```python from gi.repository import Vips ``` You can now use all of the libvips introspection machinery, as noted above. Unfortunately g-o-i has some strong disadvantages. It is not very portable, since you will need a g-o-i layer for whatever platform you are targeting; it does not cross-compile well, since typelibs include a lot of very-low level data (such as exact structure layouts); and installation for your users is likely to be tricky. If you have a choice, I would recommend simply using FFI. # Documentation You can generate searchable docs from a .gir (the thing that is built from scanning libvips and which in turn turn the typelib is made from) with g-ir-doc-tool, for example: ```bash $ g-ir-doc-tool --language=Python -o ~/mydocs Vips-8.0.gir ``` Then to view them, either: ```bash $ yelp ~/mydocs ``` Or perhaps: ```bash $ cd ~/mydocs $ yelp-build html . ``` To make HTML docs. This is an easy way to see what you can call in the library. libvips-8.15.1/doc/binding.xml000066400000000000000000000210061454007373500161660ustar00rootroot00000000000000 How to write bindings 3 libvips Binding Writing bindings for libvips There are full libvips bindings for quite a few environments now: C, C++, command-line, Ruby, PHP, Lua, Python and JavaScript (node). This chapter runs through the four main styles that have been found to work well. If you want to write a new binding, one of these should be close to what you need. Don’t bind the top-level C API The libvips C API (vips_add() and so on) was designed to be easy for humans to write. It is inconvenient and dangerous to use from other languages due to its heavy use of varargs. It’s much better to use the layer below. This lower layer is structured as: Create operator. You can use vips_operation_new() to make a new VipsOperation object from an operator nickname, like "add". Set parameters. You can loop over the operation with vips_argument_map() to get the name and type of each input argument. For each argument, you need to get the value from your language, convert to a GValue, then use g_object_set_property() to set that value on the operator. Execute with vips_cache_operation_build(). Extract results. Again, you loop over the operator arguments with vips_argument_map(), but instead of inputs, this time you look for output arguments. You extract their value with g_object_get_property(), and pass the value back to your language. For example, you can execute vips_invert() like this: /* compile with * * gcc -g -Wall callvips.c `pkg-config vips --cflags --libs` * */ #include <vips/vips.h> int main(int argc, char **argv) { VipsImage *in; VipsImage *out; VipsOperation *op; VipsOperation *new_op; GValue gvalue = G_VALUE_INIT; if (VIPS_INIT(argv[0])) /* This shows the vips error buffer and quits with a fail exit * code. */ vips_error_exit(NULL); /* This will print a table of any ref leaks on exit, very handy for * development. */ vips_leak_set(TRUE); if (argc != 3) vips_error_exit("usage: %s input-filename output-filename", argv[0]); if (!(in = vips_image_new_from_file(argv[1], NULL))) vips_error_exit(NULL); /* Create a new operator from a nickname. NULL for unknown operator. */ op = vips_operation_new("invert"); /* Init a gvalue as an image, set it to in, use the gvalue to set the * operator property. */ g_value_init(&gvalue, VIPS_TYPE_IMAGE); g_value_set_object(&gvalue, in); g_object_set_property(G_OBJECT(op), "in", &gvalue); g_value_unset(&gvalue); /* We no longer need in: op will hold a ref to it as long as it needs * it. */ g_object_unref(in); /* Call the operation. This will look up the operation+args in the vips * operation cache and either return a previous operation, or build * this one. In either case, we have a new ref we must release. */ if (!(new_op = vips_cache_operation_build(op))) { g_object_unref(op); vips_error_exit(NULL); } g_object_unref(op); op = new_op; /* Now get the result from op. g_value_get_object() does not ref the * object, so we need to make a ref for out to hold. */ g_value_init(&gvalue, VIPS_TYPE_IMAGE); g_object_get_property(G_OBJECT(op), "out", &gvalue); out = VIPS_IMAGE(g_value_get_object(&gvalue)); g_object_ref(out); g_value_unset(&gvalue); /* All done: we can unref op. The output objects from op actually hold * refs back to it, so before we can unref op, we must unref them. */ vips_object_unref_outputs(VIPS_OBJECT(op)); g_object_unref(op); if (vips_image_write_to_file(out, argv[2], NULL)) vips_error_exit(NULL); g_object_unref(out); return 0; } Compiled language which can call C The C++ binding uses this lower layer to define a function called VImage::call() which can call any libvips operator with a set of variable arguments. A small Python program walks the set of all libvips operators and generates a set of static bindings. For example: VImage VImage::invert(VOption *options) const { VImage out; call("invert", (options ? options : VImage::option()) ->set("in", *this) ->set("out", &out)); return out; } So from C++ you can call any libvips operator (though without static typechecking) with VImage::call(), or use the member functions on VImage to get type-checked calls for at least the required operator arguments. The VImage class also adds automatic reference counting, constant expansion, operator overloads, and various other useful features. Dynamic language with FFI Languages like Ruby, Python, JavaScript and LuaJIT can’t call C directly, but they do support FFI. The bindings for these languages work rather like C++, but use FFI to call into libvips and run operations. Since these languages are dynamic, they can add another trick: they intercept the method-missing hook and attempt to run any method calls not implemented by the Image class as libvips operators. In effect, the binding is generated at runtime. gobject-introspection The C source code to libvips has been marked up with special comments describing the interface in a standard way. These comments are read by the gobject-introspection package when libvips is compiled and used to generate a typelib, a description of how to call the library. Many languages have gobject-introspection packages: all you need to do to call libvips from your favorite language is to start g-o-i, load the libvips typelib, and you should have the whole library available. For example, from Python it’s as simple as: from gi.repository import Vips You can now use all of the libvips introspection machinery, as noted above. Unfortunately g-o-i has some strong disadvantages. It is not very portable, since you will need a g-o-i layer for whatever platform you are targeting; it does not cross-compile well, since typelibs include a lot of very-low level data (such as exact structure layouts); and installation for your users is likely to be tricky. If you have a choice, I would recommend simply using FFI. Documentation You can generate searchable docs from a .gir (the thing that is built from scanning libvips and which in turn turn the typelib is made from) with g-ir-doc-tool, for example: $ g-ir-doc-tool --language=Python -o ~/mydocs Vips-8.0.gir Then to view them, either: $ yelp ~/mydocs Or perhaps: $ cd ~/mydocs $ yelp-build html . To make HTML docs. This is an easy way to see what you can call in the library. libvips-8.15.1/doc/extending.xml000066400000000000000000000341571454007373500165540ustar00rootroot00000000000000 Extending VIPS 3 VIPS Library Extending How to add operations to VIPS Introduction This section runs quickly through adding a simple operator to VIPS. For more information, see #VipsOperation and #VipsRegion. A good starting point for a new operation is a similar one in the VIPS library. All VIPS operations are subclasses of #VipsOperation, which in turn subclasses #VipsObject and then %GObject. You add an operation to VIPS by defining a new subclass of #VipsOperation and arranging for its class_init() to be called, perhaps by calling its get_type() function. The class and object structures First you need to define a new object struct and a new class struct. typedef struct _Negative { VipsOperation parent_instance; VipsImage *in; VipsImage *out; int image_max; } Negative; typedef struct _NegativeClass { VipsOperationClass parent_class; /* No new class members needed for this op. */ } NegativeClass; This operation will find the photographic negative of an unsigned 8-bit image, optionally letting you specify the value which the pixels "pivot" about. It doesn't need any class members (ie. values common to all operations of this type), so the second struct is empty. See the source to vips_invert() for a more complete version of this operation that's actually in the library. %GObject has a handy macro to write some of the boilerplate for you. G_DEFINE_TYPE(Negative, negative, VIPS_TYPE_OPERATION); G_DEFINE_TYPE() defines a function called negative_get_type(), which registers this new class and returns its %GType (a pointer-sized integer). negative_get_type() in turn needs two functions, negative_init(), to initialise a new instance, and negative_class_init(), to initialise a new class. Class and object initialisation negative_init() is very simple, it just sets the default value for our optional parameter. static void negative_init(Negative *negative) { negative->image_max = 255; } negative_class_init() is more complicated: it has to set various fields in various superclasses and define the operation's parameters. static void negative_class_init(NegativeClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "negative"; object_class->description = "photographic negative"; object_class->build = negative_build; VIPS_ARG_IMAGE(class, "in", 1, "Input", "Input image", VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(Negative, in)); VIPS_ARG_IMAGE(class, "out", 2, "Output", "Output image", VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(Negative, out)); VIPS_ARG_INT(class, "image_max", 4, "Image maximum", "Maximum value in image: pivot about this", VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(Negative, image_max), 0, 255, 255); } In %GObject, it needs to set the getters and setters for this class. vips has a generic get/set system, so any subclass of #VipsObject needs to use the vips ones. In #VipsObject, it needs to set the operation @nickname and @description, and set a build function (see below). @nickname is used to refer to this operation in the API, @description is used to explain this operation to users and will be translated into their language. Finally, it needs to define the arguments the constructor for this class takes. There are a set of handy macros for doing this, see VIPS_ARG_INT() and friends. The first few parameters are always the same and mean: class pointer for argument, argument name, argument priority (bindings expect required arguments in order of priority), long argument name (this one is internationalised and displayed to users), description (again, users can see this), some flags describing the argument, and finally the position of the member in the struct. Integer arguments take three more values: the minimum, maximum and default value for the argument. The build() function The build function is the thing #VipsObject calls during object construction, after all arguments have been supplied and before the object is used. It has two roles: to verify that arguments are correct, and then to construct the object. After build(), the object is expected to be ready for use. static int negative_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); Negative *negative = (Negative *) object; if (VIPS_OBJECT_CLASS(negative_parent_class)->build(object)) return -1; if (vips_check_uncoded(class->nickname, negative->in) || vips_check_format(class->nickname, negative->in, VIPS_FORMAT_UCHAR)) return -1; g_object_set(object, "out", vips_image_new(), NULL); if (vips_image_pipelinev(negative->out, VIPS_DEMAND_STYLE_THINSTRIP, negative->in, NULL)) return -1; if (vips_image_generate(negative->out, vips_start_one, negative_generate, vips_stop_one, negative->in, negative)) return -1; return 0; } negative_build() first chains up to the superclass: this will check that all input arguments have been supplied and are sane. Next, it adds its own checks. This is a demo operation, so we just work for uncoded, unsigned 8-bit images. There are a lot of convenience functions like vips_check_format(), see the docs. Next, it creates the output image. This needs to be set with g_object_set() so that vips can see that it has been assigned. vips will also handle the reference counting for you. vips_image_pipelinev() links our new image onto the input image and notes that this operation prefers to work in lines. You can request other input geometries, see #VipsDemandStyle. The geometry hint is just a hint, an operation needs to be able to supply any size #VipsRegion on request. If you must have a certain size request, you can put a cache in the pipeline after your operation, see vips_linecache() and vips_tilecache(). You can also make requests to your operation ordered, see vips_sequential(). Finally, vips_image_generate() attaches a set of callbacks to the output image to generate chunks of it on request. vips_start_one() and vips_stop_one() are convenience functions that make the input region for you, see below. The generate() function The generate() function does the actual image processing. negative_generate() (of type #VipsGenerateFn, supplied to vips_image_generate() above) is called whenever some pixels of our output image are required. static int negative_generate(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { /* The area of the output region we have been asked to make. */ VipsRect *r = &out_region->valid; /* The sequence value ... the thing returned by vips_start_one(). */ VipsRegion *ir = (VipsRegion *) vseq; VipsImage *in = (VipsImage *) a; Negative *negative = (Negative *) b; int line_size = r->width * negative->in->Bands; int x, y; /* Request matching part of input region. */ if (vips_region_prepare(ir, r)) return -1; for (y = 0; y < r->height; y++) { unsigned char *p = (unsigned char *) VIPS_REGION_ADDR(ir, r->left, r->top + y); unsigned char *q = (unsigned char *) VIPS_REGION_ADDR(out_region, r->left, r->top + y); for (x = 0; x < line_size; x++) q[x] = negative->image_max - p[x]; } return 0; } This has to calculate a section of the output image. The output #VipsRegion, @out_region, contains a #VipsRect called @valid which is the area needing calculation. This call to negative_generate() must somehow make this part of @out_region contain pixel data. @vseq is the sequence value. This is the per-thread state for this generate, created (in this example) by vips_start_one(). In this simple case it's just a #VipsRegion defined on the input image. If you need more per-thread state you can write your own start and stop functions and have a struct you create and pass as a sequence value. There are plenty of examples in the VIPS source code, see vips_rank(). @a and @b are the last two arguments to vips_image_generate() above. @stop is a bool pointer you can set to stop computation early. vips_min() on an unsigned int image, for example, will set @stop as soon as it sees a zero, and will not scan the entire image. The first thing negative_generate() does is use vips_region_prepare() to ask for the corresponding pixels from the input image. Operations which do coordinate transforms or which need an area of input for each output point will need to calculate a new rect before calling vips_region_prepare(). Finally, it can calculate some pixels. negative_generate() loops over the valid area of the output and calls VIPS_REGION_ADDR() for each line. This macro is reasonaly quick, but it's best not to call it for each pixel. Once per line is fine though. Adding to VIPS To add the operation to vips, just call negative_get_type(). You can include the source in your program, or use %GModule to make a binary plugin that will be loaded by libvips at startup. There are some example plugins available. You can then use @negative from any of the vips interfaces. For example, in Python you'd use it like this: out = in.negative(image_max = 128) From the command-line it'd look like this: $ vips negative in.png out.tif --image-max 128 And from C like this: VipsImage *in; VipsImage *out; if (vips_call("negative", in, &out, "image_max", 128, NULL)) ... error Unfortunately that will do almost no compile-time type checking, so all vips operations have a tiny extra wrapper to add a bit of safety. For example: static int negative(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("negative", ap, in, out); va_end(ap); return result; } And now you can write: if (negative(in, &out, "image_max", 128, NULL)) ... error and it's at least a bit safer. Other types of operation Change the _build() function to make other types of operation. Use vips_image_generate() with vips_start_many() to make operations which demand pixels from more than one image at once, such as image plus image. Use vips_sink() instead of vips_image_generate() to loop over an image and calculate a value. vips uses this for the statistics operations, like vips_avg(). Use vips_image_wio_input() to get an entire image into memory so you can read it with a pointer. This will obviously not scale well to very large images, but some operations, like FFTs or flood-fill, need the whole image to be available at once. Make area operations, like filters, by enlarging the #VipsRect that _generate() is given before calling vips_region_prepare(). You can enlarge the input image, so that the output image is the same size as the original input, by using vips_embed() within the _build() function. Make things like flips and rotates by making larger changes to the #VipsRect in _generate(). Make zero-copy operations, like vips_insert(), with vips_region_region(). libvips-8.15.1/doc/file-format.xml000066400000000000000000000201341454007373500167620ustar00rootroot00000000000000 The VIPS file format 3 VIPS Library File format The VIPS file format Introduction VIPS has a simple, native file format. It's very fast, there is no image size limit, and it supports arbitrary metadata. Although few other programs can read these images (though recent versions of ImageMagick do have basic support for .vips format), it can be useful as an intermediate format for command-line processing. For example: $ vips invert input.tif t.v $ vips gamma t.v output.tif is faster than using .tif for the temporary intermediate image. This section documents the VIPS file format. VIPS comes with a command-line program called vipsedit which is useful for destructively changing fields in a vips image. The vipsheader program can be used to extract any metadata. VIPS files come in three parts. First, there is a 64-byte header, containing an identifying magic number and a set of very basic fields, such as image width in pixels. Next, the image data is stored as a set of band-interleaved scanlines, from the top of the image to the bottom. Finally, after the pixel data comes an optional block of XML containing any extra metadata, such as an ICC profile or the EXIF data. The header The fields in the VIPS header are always stored least-significant byte first (Intel ordering). Only the most basic information about the image is in the header: most metadata is stored in the XML extension block after the pixel data. If the first four bytes of the file are in order 08 f2 a6 b6, the image data (see the next section) is stored in Intel byte order (LSB first) and will need to be swapped if read on a SPARC-style machine (MSB first). If the magic number is b6 a6 f2 08, the image data is in SPARC order and will need to swapped if read on an Intel-style machine. libvips does this swapping automatically. The VIPS header Bytes Type VIPS name Meaning 0 -- 3 VIPS magic number: 08 f2 a6 b6, or b6 a6 f2 08 4 -- 7 int32 width Width of image, in pixels 8 -- 11 int32 height Height of image, in pixels 12 -- 15 int32 bands Number of image bands 16 -- 19 Unused 20 -- 23 #VipsBandFormat format Band format 24 -- 27 #VipsCoding coding Image coding 28 -- 31 #VipsInterpretation interpretation Pixel interpretation 32 -- 35 float32 xres Horizontal resolution, in pixels per millimetre 36 -- 39 float32 yres Vertical resolution, in pixels per millimetre 40 -- 47 Unused 48 -- 51 int32 xoffset Horizontal offset of origin, in pixels 52 -- 55 int32 yoffset Vertical offset of origin, in pixels 56 -- 63 Unused
The image data If coding is set to #VIPS_CODING_NONE, pixels are stored in native C format, that is, the native format of the machine that wrote the data. If you open a big-endian image on a little-endian machine, VIPS will automatically byte-swap for you. VIPS has 10 band formats, see #VipsBandFormat. Image data is stored as a simple list of scanlines, from the top of the image to the bottom. Pixels are band-interleaved, so RGBRGBRGBRGB, for example. There is no padding at the end of scanlines. If coding is set to #VIPS_CODING_LABQ, each pixel is four bytes, with 10 bits for L* and 11 bits for each of a* and b*. These 32 bits are packed into 4 bytes, with the most significant 8 bits of each value in the first 3 bytes, and the left-over bits packed into the final byte as 2:3:3. If coding is set to #VIPS_CODING_RAD, each pixel is RGB or XYZ float, with 8 bits of mantissa and then 8 bits of exponent, shared between the three channels. This coding style is used by the Radiance family of programs (and the HDR format) commonly used for HDR imaging. Other values of coding can set other coding styles. Use VIPS_IMAGE_SIZEOF_IMAGE() to calculate the size of the image data section. The metadata Following the image data is a chunk of XML holding a simple list of name-value pairs. Binary data is encoded with base64. Use vips_image_set() and friends to set and get image metadata. You can use vipsheader -f getext some_file.v to get the XML from a VIPS image, and vipsedit --setext some_file.v < file.xml to replace the XML.
libvips-8.15.1/doc/function-list.xml000066400000000000000000001167271454007373500173710ustar00rootroot00000000000000 VIPS function list 3 VIPS Library Using VIPS List of VIPS functions and operators Function list VIPS has a set of operators each of which computes some useful image processing operation. Each operator is implemented as a %GObject class, for example VipsGamma. Classes are identified by their unique nickname, in this case gamma. From the command-line, C++ and most language bindings, you use the nickname to call the operator. For example in C++: vips::VImage fred = ...; vips::VImage jim = fred.gamma(); or Python: fred = jim.gamma() VIPS has a set of C wrapper functions for calling operators, in this case vips_gamma(): VipsImage *fred = ...; VipsImage *jim; if (vips_gamma(fred, &jim, NULL)) ...error; Some operators have many C convenience functions. This table lists all the VIPS operators with their C convenience functions and a short description. It's supposed to be useful for searching. See the API docs each function links to for more details. VIPS functions and operators Operator Description C functions CMC2LCh Transform lch to cmc vips_CMC2LCh() CMYK2XYZ Transform cmyk to xyz vips_CMYK2XYZ() HSV2sRGB Transform hsv to srgb vips_HSV2sRGB() LCh2CMC Transform lch to cmc vips_LCh2CMC() LCh2Lab Transform lch to lab vips_LCh2Lab() Lab2LCh Transform lab to lch vips_Lab2LCh() Lab2LabQ Transform float lab to labq coding vips_Lab2LabQ() Lab2LabS Transform float lab to signed short vips_Lab2LabS() Lab2XYZ Transform cielab to xyz vips_Lab2XYZ() LabQ2Lab Unpack a labq image to float lab vips_LabQ2Lab() LabQ2LabS Unpack a labq image to short lab vips_LabQ2LabS() LabQ2sRGB Convert a labq image to srgb vips_LabQ2sRGB() LabS2Lab Transform signed short lab to float vips_LabS2Lab() LabS2LabQ Transform short lab to labq coding vips_LabS2LabQ() XYZ2CMYK Transform xyz to cmyk vips_XYZ2CMYK() XYZ2Lab Transform xyz to lab vips_XYZ2Lab() XYZ2Yxy Transform xyz to yxy vips_XYZ2Yxy() XYZ2scRGB Transform xyz to scrgb vips_XYZ2scRGB() Yxy2XYZ Transform yxy to xyz vips_Yxy2XYZ() abs Absolute value of an image vips_abs() add Add two images vips_add() affine Affine transform of an image vips_affine() analyzeload Load an analyze6 image vips_analyzeload() arrayjoin Join an array of images vips_arrayjoin() autorot Autorotate image by exif tag vips_autorot() avg Find image average vips_avg() bandbool Boolean operation across image bands vips_bandbool(), vips_bandand(), vips_bandor(), vips_bandeor(), vips_bandmean() bandfold Fold up x axis into bands vips_bandfold() bandjoin Bandwise join a set of images vips_bandjoin(), vips_bandjoin2() bandjoin_const Append a constant band to an image vips_bandjoin_const(), vips_bandjoin_const1() bandmean Band-wise average vips_bandmean() bandrank Band-wise rank of a set of images vips_bandrank() bandunfold Unfold image bands into x axis vips_bandunfold() black Make a black image vips_black() boolean Boolean operation on two images vips_boolean(), vips_andimage(), vips_orimage(), vips_eorimage(), vips_lshift(), vips_rshift() boolean_const Boolean operations against a constant vips_boolean_const(), vips_andimage_const(), vips_orimage_const(), vips_eorimage_const(), vips_lshift_const(), vips_rshift_const(), vips_boolean_const1(), vips_andimage_const1(), vips_orimage_const1(), vips_eorimage_const1(), vips_lshift_const1(), vips_rshift_const1() buildlut Build a look-up table vips_buildlut() byteswap Byteswap an image vips_byteswap() cache Cache an image vips_cache() canny Canny edge detector vips_canny() case Use pixel values to pick cases from an array of images vips_case() cast Cast an image vips_cast(), vips_cast_uchar(), vips_cast_char(), vips_cast_ushort(), vips_cast_shortcast_uint(), vips_cast_int(), vips_cast_float(), vips_cast_double(), vips_cast_complex(), vips_cast_dpcomplex() colourspace Convert to a new colorspace vips_colourspace() compass Convolve with rotating mask vips_compass() complex Perform a complex operation on an image vips_complex(), vips_polar(), vips_rect(), vips_conj() complex2 Complex binary operations on two images vips_complex2(), vips_cross_phase() complexform Form a complex image from two real images vips_complexform() complexget Get a component from a complex image vips_complexget(), vips_real(), vips_imag() composite Blend an array of images with an array of blend modes vips_composite() composite2 Blend a pair of images with a blend mode vips_composite2() conv Convolution operation vips_conv() conva Approximate integer convolution vips_conva() convasep Approximate separable integer convolution vips_convasep() convf Float convolution operation vips_convf() convi Int convolution operation vips_convi() convsep Separable convolution operation vips_convsep() copy Copy an image vips_copy() countlines Count lines in an image vips_countlines() csvload Load csv vips_csvload() csvload_source Load csv vips_csvload_source() csvsave Save image to csv vips_csvsave() csvsave_target Save image to csv vips_csvsave_target() dE00 Calculate de00 vips_dE00() dE76 Calculate de76 vips_dE76() dECMC Calculate decmc vips_dECMC() deviate Find image standard deviation vips_deviate() divide Divide two images vips_divide() draw_circle Draw a circle on an image vips_draw_circle(), vips_draw_circle1() draw_flood Flood-fill an area vips_draw_flood(), vips_draw_flood1() draw_image Paint an image into another image vips_draw_image() draw_line Draw a line on an image vips_draw_line(), vips_draw_line1() draw_mask Draw a mask on an image vips_draw_mask(), vips_draw_mask1() draw_rect Paint a rectangle on an image vips_draw_rect(), vips_draw_rect1(), vips_draw_point(), vips_draw_point1() draw_smudge Blur a rectangle on an image vips_draw_smudge() dzsave Save image to deepzoom file vips_dzsave() dzsave_buffer Save image to dz buffer vips_dzsave_buffer() dzsave_target Save image to deepzoom target vips_dzsave_target() embed Embed an image in a larger image vips_embed() extract_area Extract an area from an image vips_extract_area(), vips_crop() extract_band Extract band from an image vips_extract_band() eye Make an image showing the eye's spatial response vips_eye() falsecolour False-color an image vips_falsecolour() fastcor Fast correlation vips_fastcor() fill_nearest Fill image zeros with nearest non-zero pixel vips_fill_nearest() find_trim Search an image for non-edge areas vips_find_trim() fitsload Load a fits image vips_fitsload() fitsload_source Load fits from a source vips_fitsload_source() fitssave Save image to fits file vips_fitssave() flatten Flatten alpha out of an image vips_flatten() flip Flip an image vips_flip() float2rad Transform float rgb to radiance coding vips_float2rad() fractsurf Make a fractal surface vips_fractsurf() freqmult Frequency-domain filtering vips_freqmult() fwfft Forward fft vips_fwfft() gamma Gamma an image vips_gamma() gaussblur Gaussian blur vips_gaussblur() gaussmat Make a gaussian image vips_gaussmat() gaussnoise Make a gaussnoise image vips_gaussnoise() getpoint Read a point from an image vips_getpoint() gifload Load gif with libnsgif vips_gifload() gifload_buffer Load gif with libnsgif vips_gifload_buffer() gifload_source Load gif from source vips_gifload_source() gifsave Save as gif vips_gifsave() gifsave_buffer Save as gif vips_gifsave_buffer() gifsave_target Save as gif vips_gifsave_target() globalbalance Global balance an image mosaic vips_globalbalance() gravity Place an image within a larger image with a certain gravity vips_gravity() grey Make a grey ramp image vips_grey() grid Grid an image vips_grid() heifload Load a heif image vips_heifload() heifload_buffer Load a heif image vips_heifload_buffer() heifload_source Load a heif image vips_heifload_source() heifsave Save image in heif format vips_heifsave() heifsave_buffer Save image in heif format vips_heifsave_buffer() heifsave_target Save image in heif format vips_heifsave_target() hist_cum Form cumulative histogram vips_hist_cum() hist_entropy Estimate image entropy vips_hist_entropy() hist_equal Histogram equalisation vips_hist_equal() hist_find Find image histogram vips_hist_find() hist_find_indexed Find indexed image histogram vips_hist_find_indexed() hist_find_ndim Find n-dimensional image histogram vips_hist_find_ndim() hist_ismonotonic Test for monotonicity vips_hist_ismonotonic() hist_local Local histogram equalisation vips_hist_local() hist_match Match two histograms vips_hist_match() hist_norm Normalise histogram vips_hist_norm() hist_plot Plot histogram vips_hist_plot() hough_circle Find hough circle transform vips_hough_circle() hough_line Find hough line transform vips_hough_line() icc_export Output to device with icc profile vips_icc_export() icc_import Import from device with icc profile vips_icc_import() icc_transform Transform between devices with icc profiles vips_icc_transform() identity Make a 1d image where pixel values are indexes vips_identity() ifthenelse Ifthenelse an image vips_ifthenelse() insert Insert image @sub into @main at @x, @y vips_insert() invert Invert an image vips_invert() invertlut Build an inverted look-up table vips_invertlut() invfft Inverse fft vips_invfft() join Join a pair of images vips_join() jp2kload Load jpeg2000 image vips_jp2kload() jp2kload_buffer Load jpeg2000 image vips_jp2kload_buffer() jp2kload_source Load jpeg2000 image vips_jp2kload_source() jp2ksave Save image in jpeg2000 format vips_jp2ksave() jp2ksave_buffer Save image in jpeg2000 format vips_jp2ksave_buffer() jp2ksave_target Save image in jpeg2000 format vips_jp2ksave_target() jpegload Load jpeg from file vips_jpegload() jpegload_buffer Load jpeg from buffer vips_jpegload_buffer() jpegload_source Load image from jpeg source vips_jpegload_source() jpegsave Save image to jpeg file vips_jpegsave() jpegsave_buffer Save image to jpeg buffer vips_jpegsave_buffer() jpegsave_mime Save image to jpeg mime vips_jpegsave_mime() jpegsave_target Save image to jpeg target vips_jpegsave_target() jxlload Load jpeg-xl image vips_jxlload() jxlload_buffer Load jpeg-xl image vips_jxlload_buffer() jxlload_source Load jpeg-xl image vips_jxlload_source() jxlsave Save image in jpeg-xl format vips_jxlsave() jxlsave_buffer Save image in jpeg-xl format vips_jxlsave_buffer() jxlsave_target Save image in jpeg-xl format vips_jxlsave_target() labelregions Label regions in an image vips_labelregions() linear Calculate (a * in + b) vips_linear(), vips_linear1() linecache Cache an image as a set of lines vips_linecache() logmat Make a laplacian of gaussian image vips_logmat() magickload Load file with imagemagick vips_magickload() magickload_buffer Load buffer with imagemagick vips_magickload_buffer() magicksave Save file with imagemagick vips_magicksave() magicksave_buffer Save image to magick buffer vips_magicksave_buffer() mapim Resample with a map image vips_mapim() maplut Map an image though a lut vips_maplut() mask_butterworth Make a butterworth filter vips_mask_butterworth() mask_butterworth_band Make a butterworth_band filter vips_mask_butterworth_band() mask_butterworth_ring Make a butterworth ring filter vips_mask_butterworth_ring() mask_fractal Make fractal filter vips_mask_fractal() mask_gaussian Make a gaussian filter vips_mask_gaussian() mask_gaussian_band Make a gaussian filter vips_mask_gaussian_band() mask_gaussian_ring Make a gaussian ring filter vips_mask_gaussian_ring() mask_ideal Make an ideal filter vips_mask_ideal() mask_ideal_band Make an ideal band filter vips_mask_ideal_band() mask_ideal_ring Make an ideal ring filter vips_mask_ideal_ring() match First-order match of two images vips_match() math Apply a math operation to an image vips_math(), vips_sin(), vips_cos(), vips_tan(), vips_asin(), vips_acos(), vips_atan(), vips_sinh(), vips_cosh(), vips_tanh(), vips_asinh(), vips_acosh(), vips_atanh(), vips_exp(), vips_exp10(), vips_log(), vips_log10() math2 Binary math operations vips_math2(), vips_pow(), vips_wop(), vips_atan2() math2_const Binary math operations with a constant vips_math2_const(), vips_andimage_const(), vips_orimage_const(), vips_eorimage_const(), vips_lshift_const(), vips_rshift_const(), vips_math2_const1(), vips_andimage_const1(), vips_orimage_const1(), vips_eorimage_const1(), vips_lshift_const1(), vips_rshift_const1() matload Load mat from file vips_matload() matrixinvert Invert an matrix vips_matrixinvert() matrixload Load matrix vips_matrixload() matrixload_source Load matrix vips_matrixload_source() matrixprint Print matrix vips_matrixprint() matrixsave Save image to matrix vips_matrixsave() matrixsave_target Save image to matrix vips_matrixsave_target() max Find image maximum vips_max() measure Measure a set of patches on a color chart vips_measure() merge Merge two images vips_merge() min Find image minimum vips_min() morph Morphology operation vips_morph() mosaic Mosaic two images vips_mosaic() mosaic1 First-order mosaic of two images vips_mosaic1() msb Pick most-significant byte from an image vips_msb() multiply Multiply two images vips_multiply() niftiload Load nifti volume vips_niftiload() niftiload_source Load nifti volumes vips_niftiload_source() niftisave Save image to nifti file vips_niftisave() openexrload Load an openexr image vips_openexrload() openslideload Load file with openslide vips_openslideload() openslideload_source Load source with openslide vips_openslideload_source() pdfload Load pdf from file vips_pdfload() pdfload_buffer Load pdf from buffer vips_pdfload_buffer() pdfload_source Load pdf from source vips_pdfload_source() percent Find threshold for percent of pixels vips_percent() perlin Make a perlin noise image vips_perlin() phasecor Calculate phase correlation vips_phasecor() pngload Load png from file vips_pngload() pngload_buffer Load png from buffer vips_pngload_buffer() pngload_source Load png from source vips_pngload_source() pngsave Save image to file as png vips_pngsave() pngsave_buffer Save image to buffer as png vips_pngsave_buffer() pngsave_target Save image to target as png vips_pngsave_target() ppmload Load ppm from file vips_ppmload() ppmload_source Load ppm base class vips_ppmload_source() ppmsave Save image to ppm file vips_ppmsave() ppmsave_target Save to ppm vips_ppmsave_target() premultiply Premultiply image alpha vips_premultiply() prewitt Prewitt edge detector vips_prewitt() profile Find image profiles vips_profile() profile_load Load named icc profile vips_profile_load() project Find image projections vips_project() quadratic Resample an image with a quadratic transform vips_quadratic() rad2float Unpack radiance coding to float rgb vips_rad2float() radload Load a radiance image from a file vips_radload() radload_buffer Load rad from buffer vips_radload_buffer() radload_source Load rad from source vips_radload_source() radsave Save image to radiance file vips_radsave() radsave_buffer Save image to radiance buffer vips_radsave_buffer() radsave_target Save image to radiance target vips_radsave_target() rank Rank filter vips_rank(), vips_median() rawload Load raw data from a file vips_rawload() rawsave Save image to raw file vips_rawsave() rawsave_fd Write raw image to file descriptor vips_rawsave_fd() recomb Linear recombination with matrix vips_recomb() reduce Reduce an image vips_reduce() reduceh Shrink an image horizontally vips_reduceh() reducev Shrink an image vertically vips_reducev() relational Relational operation on two images vips_relational(), vips_equal(), vips_notequal(), vips_less(), vips_lesseq(), vips_more(), vips_moreeq() relational_const Relational operations against a constant vips_relational_const(), vips_equal_const(), vips_notequal_const(), vips_less_const(), vips_lesseq_const(), vips_more_const(), vips_moreeq_const(), vips_relational_const1(), vips_equal_const1(), vips_notequal_const1(), vips_less_const1(), vips_lesseq_const1(), vips_more_const1(), vips_moreeq_const1() remainder Remainder after integer division of two images vips_remainder() remainder_const Remainder after integer division of an image and a constant vips_remainder_const(), vips_remainder_const1() replicate Replicate an image vips_replicate() resize Resize an image vips_resize() rot Rotate an image vips_rot() rot45 Rotate an image vips_rot45() rotate Rotate an image by a number of degrees vips_rotate() round Perform a round function on an image vips_round(), vips_floor(), vips_ceil(), vips_rint() sRGB2HSV Transform srgb to hsv vips_sRGB2HSV() sRGB2scRGB Convert an srgb image to scrgb vips_sRGB2scRGB() scRGB2BW Convert scrgb to bw vips_scRGB2BW() scRGB2XYZ Transform scrgb to xyz vips_scRGB2XYZ() scRGB2sRGB Convert an scrgb image to srgb vips_scRGB2sRGB() scale Scale an image to uchar vips_scale() scharr Scharr edge detector vips_scharr() sequential Check sequential access vips_sequential() sharpen Unsharp masking for print vips_sharpen() shrink Shrink an image vips_shrink() shrinkh Shrink an image horizontally vips_shrinkh() shrinkv Shrink an image vertically vips_shrinkv() sign Unit vector of pixel vips_sign() similarity Similarity transform of an image vips_similarity() sines Make a 2d sine wave vips_sines() smartcrop Extract an area from an image vips_smartcrop() sobel Sobel edge detector vips_sobel() spcor Spatial correlation vips_spcor() spectrum Make displayable power spectrum vips_spectrum() stats Find many image stats vips_stats() stdif Statistical difference vips_stdif() subsample Subsample an image vips_subsample() subtract Subtract two images vips_subtract() sum Sum an array of images vips_sum() svgload Load svg with rsvg vips_svgload() svgload_buffer Load svg with rsvg vips_svgload_buffer() svgload_source Load svg from source vips_svgload_source() switch Find the index of the first non-zero pixel in tests vips_switch() system Run an external command vips_system() text Make a text image vips_text() thumbnail Generate thumbnail from file vips_thumbnail() thumbnail_buffer Generate thumbnail from buffer vips_thumbnail_buffer() thumbnail_image Generate thumbnail from image vips_thumbnail_image() thumbnail_source Generate thumbnail from source vips_thumbnail_source() tiffload Load tiff from file vips_tiffload() tiffload_buffer Load tiff from buffer vips_tiffload_buffer() tiffload_source Load tiff from source vips_tiffload_source() tiffsave Save image to tiff file vips_tiffsave() tiffsave_buffer Save image to tiff buffer vips_tiffsave_buffer() tiffsave_target Save image to tiff target vips_tiffsave_target() tilecache Cache an image as a set of tiles vips_tilecache() tonelut Build a look-up table vips_tonelut() transpose3d Transpose3d an image vips_transpose3d() unpremultiply Unpremultiply image alpha vips_unpremultiply() vipsload Load vips from file vips_vipsload() vipsload_source Load vips from source vips_vipsload_source() vipssave Save image to file in vips format vips_vipssave() vipssave_target Save image to target in vips format vips_vipssave_target() webpload Load webp from file vips_webpload() webpload_buffer Load webp from buffer vips_webpload_buffer() webpload_source Load webp from source vips_webpload_source() webpsave Save as webp vips_webpsave() webpsave_buffer Save as webp vips_webpsave_buffer() webpsave_mime Save image to webp mime vips_webpsave_mime() webpsave_target Save as webp vips_webpsave_target() worley Make a worley noise image vips_worley() wrap Wrap image origin vips_wrap() xyz Make an image where pixel values are coordinates vips_xyz() zone Make a zone plate vips_zone() zoom Zoom an image vips_zoom()
libvips-8.15.1/doc/gen-function-list.py000077500000000000000000000070631454007373500177630ustar00rootroot00000000000000#!/usr/bin/python3 # walk vips and generate a list of all operators and their descriptions # for docs # this needs pyvips # # pip install --user pyvips # sample output: # # gamma # Gamma an image # vips_gamma() # from pyvips import Introspect, Operation, Error, \ ffi, type_map, type_from_name, nickname_find # for VipsOperationFlags _OPERATION_DEPRECATED = 8 def gen_function(operation_name, overloads): intro = Introspect.get(operation_name) c_operations = 'vips_{}()'.format(operation_name) if overloads: c_operations += ', ' + (', '.join('vips_{}()'.format(n) for n in overloads)) result = '\n' result += ' {}\n'.format(operation_name) result += ' {}\n'.format(intro.description.capitalize()) result += ' {}\n'.format(c_operations) result += '' return result def gen_function_list(): all_nicknames = [] def add_nickname(gtype, a, b): nickname = nickname_find(gtype) try: # can fail for abstract types intro = Introspect.get(nickname) # we are only interested in non-deprecated operations if (intro.flags & _OPERATION_DEPRECATED) == 0: all_nicknames.append(nickname) except Error: pass type_map(gtype, add_nickname) return ffi.NULL type_map(type_from_name('VipsOperation'), add_nickname) # make list unique and sort all_nicknames = list(set(all_nicknames)) all_nicknames.sort() # make dict with overloads overloads = { 'bandbool': ['bandand', 'bandor', 'bandeor', 'bandmean'], 'bandjoin': ['bandjoin2'], 'bandjoin_const': ['bandjoin_const1'], 'boolean': ['andimage', 'orimage', 'eorimage', 'lshift', 'rshift'], 'cast': ['cast_uchar', 'cast_char', 'cast_ushort', 'cast_short' 'cast_uint', 'cast_int', 'cast_float', 'cast_double', 'cast_complex', 'cast_dpcomplex'], 'complex': ['polar', 'rect', 'conj'], 'complex2': ['cross_phase'], 'complexget': ['real', 'imag'], 'draw_circle': ['draw_circle1'], 'draw_flood': ['draw_flood1'], 'draw_line': ['draw_line1'], 'draw_mask': ['draw_mask1'], 'draw_rect': ['draw_rect1', 'draw_point', 'draw_point1'], 'extract_area': ['crop'], 'linear': ['linear1'], 'math': ['sin', 'cos', 'tan', 'asin', 'acos', 'atan', 'sinh', 'cosh', 'tanh', 'asinh', 'acosh', 'atanh', 'exp', 'exp10', 'log', 'log10'], 'math2': ['pow', 'wop', 'atan2'], 'rank': ['median'], 'relational': ['equal', 'notequal', 'less', 'lesseq', 'more', 'moreeq'], 'remainder_const': ['remainder_const1'], 'round': ['floor', 'ceil', 'rint'], } overloads['boolean_const'] = [o + '_const' for o in overloads['boolean']] + ['boolean_const1'] + \ [o + '_const1' for o in overloads['boolean']] overloads['math2_const'] = [o + '_const' for o in overloads['boolean']] + ['math2_const1'] + \ [o + '_const1' for o in overloads['boolean']] overloads['relational_const'] = [o + '_const' for o in overloads['relational']] + ['relational_const1'] + \ [o + '_const1' for o in overloads['relational']] for nickname in all_nicknames: result = gen_function(nickname, overloads[nickname] if nickname in overloads else None) print(result) if __name__ == '__main__': gen_function_list() libvips-8.15.1/doc/images/000077500000000000000000000000001454007373500153005ustar00rootroot00000000000000libvips-8.15.1/doc/images/Combine.png000066400000000000000000000312031454007373500173610ustar00rootroot00000000000000PNG  IHDR?kPsBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxwgo7; R4b[ bEMlXK,1[?5FMK 4 p;Wa;ߙ{YY\yyCbT硚&5ڻ"""] hR@ZDDć""">!)EDD|H-""C hR@ZDDć""">!)EDD|H-""C hR@ZDDć""">!)EDD|H-""C hR@ZDDć""">!)EDD|H-""C hR@ZDDć""">!)EDD|H-""C hR@ZDDć""">!)EDD|H-""C hR@ZDDć""">!)EDD|H-""C hR@ZDDć""">`{7@ږ@/go]tmnJi N`sEipά^q@vV+ιo[ҡDZzVZ0_wr=PulB[5VC| (6$AeH&GuXi)m޼1/^ ۯ4>r-L˃;_ʚDx;fv p,0̞~[ʫ">i{ =̼9wyUUnR]׬Vee_Uؖԯ ] Ue(ӀSz.)ރ_C"%.]ϭUe0/997VM$63;N3DO7ˊ{ϯZ2lHNwI]mu.ނyuHH9vicZ/9YS}Ӂfvsnͮ/yTS3Ԓ%=׭ߔYkJM~`εqb}_eC1f$s FZbȪ>sp 3luVMXS.TS+PI?Wz,LwlLM:8Ք?(;~Lo?1 #^}n-73gFCnH뇋/gFY{i )P@wPe/>{>HJQ?pU6Dඅph.rYm)HKRMzT4ϖqB  .E"ag`TS"] eoqYEbb Zio$M}絇z!Ͽ5ujJ:-t⳷->{G+*vmwkzN̓q+}UqmoMՔt> fcYaofe}uy0 p - w|FU/>}%(H;M ĩQ@w0>{5ǹ%iI< -ƆKRF|{~!}qicj@5%7̃ks1!)˗ΪR֚:5u|sQP63S7o\Y9S*clH9N:nw6p: mRSC͙'I)]fvuief6gt; ).IٴkW/LރT7+ݑÆXMJNJP)i]TgC@vjiY0fGt7vEo}r@C6{lN)LK 5dC^YKL~פjB¯glk]̜KH^XVk"{o=vrN-Vr:;Tr ϼz$79`I'ac%$WWWMIcsdι^ 1OkǁޯQ{>0f E}8s+' dzv82Dp `49~Zb3Oe|mzf7^?|v]˹7֬ܲ2.y ˩hNWf =ˊY=yf={Gtm sjT1h͚:ԝxM={B Gիp8}ffߘf0I3̖f4ߙR3[kfefY3rmf֏v[{X=jrsIK3ڻD,..jC ft[`F瞸)4pȒh=lθ ~去*7|=?\s͕鑗^b<л7:?1/Kw0;( 4l^1A{6m,N\`FMC5U[j3,{V~sCh7ύ)+jJb望>uhS u]oaej0~-pb&n~ qH@Q1ޯwwD#PR@vN}lEvKǨ驠E3rM| ͻ4Ϲ *hэi E PBmՔt: fC6vX/]bؽZbSjK{ܖY.]SSՔt. &ÎԾ-htvo 'è o mw}֦(Ք(;U} HUe^?oՊwm^?šѦ9LՔ?ɥ>s˃@'=-Ï?Kzp#9_\kC̔G011{ޜ;RXyxiZι\ 5ZWg\u֚kIݔ-ޫgqt跫vY_]֯{#}]aȰ_ݑ lp8xT(}q=pJ{tAZ_gn)ݲS}Ev$ةލ>S *Km%Pu\q+?ե dMEk ;r.6-v/SsoskՕ6z5ujJvv#>hFHP6q ?狷z6Y=$9Q{RH , gaH(ݢ~[L{tjj6r ލ.ow^{7 ?XV)t}ژTSQgeW^޷^d` o7Kfkn4 09'dIǠi N䄓X^n03@P:BJHTS"G݉9ޞ͆nTS"-G*!)EDD|H-""C hR@ZDDć""">!)EDD|H-""C hR@ZDDć""">!)EDD|H-""C hR@ZDDć""">!)EDD|H-""C hR@ZDDć""">!)EDD|H-""C hR@ZDDć""">!)EDD|H-""C hR@ZDDć""">!)EDD|H-""C hR@ZDDć""">!ۻ1>q;#:dfdĥuMKZU~FT5gm{YM5%-NhMٴ83ҳӣ^CN)wHU4Y|N5%c hi 혴:Z ݫg5uݺW[ BAj-?|:"S:ǀX'i_))e]n}f8<Nʃ)Őඟ/+r@pmVBEk +IK_~>y'qP+jJ$v hi < {.ekwk\0ed\yrM$Rm%%ߝK}K<GUʈ/DCtm]8nSEmrkOeuIGfz{%~5\⿳g2tqqI./+/PtgʆKXVtT5Yt.X:Q^>@qW)?}+~t=oڜqLgg {} W%V5H5պTSTgAKCeC:i9|[D39됚6v>oHN]wޛh֣E ḫ.ޘu@CpzvIJZ?yK~TS"G-ٱ޳?g=. 7`?#=u-mx:TS"OəYp?>fw6l8g~$..=R]Uܓ7jDvjJe(J?<԰R b:$ .3-DZ3lˤE0ap|p!Эٕ)^~Hd?PMtk :F6{;>nP*y[~*;TS"-DI{Ϧ΃Ai)nw.פT0g曹m.SMuiQ8O͑3ĕfUWU%%XUDZ;?6BZhO􆬜 @(T7]iA =ye6)ޟC҂Rv٫W nn@]=ij~vs>Et"nkMX#㓎8<>)9PM0;1>ԾS쬝ffgفEޓ̙N_?tQGpZA#~kG vEX`gѣ{ pU/6|Vu)i¯?W pZjkXScO攜 5\]r?jb7VM*8 iGgk۶iafw?afG+ ǟ53g{Ƈܫ|cpZafܺMx{)M%aH2ecAy3`7uΨs[asڵOϵc]^aXtg}>>xO+FTpi]{6ԪUSmZiL|/^|"nTS{&ܛf6snbi;Y9 䜫0@9.:7,uE ^k}Khuιpt+ ]rrzWN([93zC||⑗Bֹicz}"gCd?_|1>8z4kj fd\{}E:5k¡xc_Ĥ!Dܖ`MIM1bݷdN{տ{ 1PpAScoIǚ*)D7br. fgt1+)qMj;6ιj`2pc0H4)ιEf Xwrdzt3XwY`9l+>V]\ks^A$gwݗw7ƀe49aY?G>O<8ߞux^yNnz֬ګR~M N7'oﵵqۿm˗~ɛ#=z}oγC-R5pIs憪J"XnKԔ~/y#[s٣x|s.lfû@10<mf< \{hqf \Y)?W TU #O١O_q1%?j;x:3gd2*^{3RSͪ*6nnwcI)!bTSE0ILJ '$}gTS[RSf5]S'>vL0_ZW{RM.y9W `fG5KL;hOK-şIDATpsf6̎r} k~9>naf<7t#n׬iv승k I}GR/>}H`68`~/2v%m-KKٔN<3l/*SS̪n\oSS6 ..rU s->>1srqŧ{+Wv555,^޾#Sp kin_qŮ'^Ԝ*< 9w5!t̓gr}kfOϛ]@Nfn c[׷ХMM看R`_  x8hX9\uTWc~f&I#FJ^~ 0xrXpƊrjjچxz޸)egZFn~Mmpm/`\s}h7K}v^/zʲƽzpZ޽CaK)'G9M?)=  _>fjg  {tI$7ՔH t'ss޳9iCEo%N5fRcFS)n6B]l%pnH D7 okP "C5%BНs~N;Ȩ(_05緪ҾTS"-G-\XH ߻9ƲϿa㋆?qcTS"-@EI{1pPhښ/>=W8\HNɨ;GY6ՔHP@ ιw˽ghz"*|ٽₑ/}~nH} h9w[.0 #*W?|wrүN>W 0uCvp)ݣ$z{4X0Ȧ@)F,Ca)sLM&.\>KkQMu.ɛGףﮀYÏsaL3 }aptx]辣%l#UUUλ-{Պg:nсO]ZjuZOgΤCt0wL;s4P^9ǿ };cP`'`) ,wWeOf^?} kkچjJ:T@KۉM+v" G} W-2r2l[iyM(-T9ݏ;ǟ|#{ՔH(ess6D؜ w@eBR<^nvuUA0b]ƲEIE#LʛrUfS ))IιT388 DX?̻EV 28׷в}G'vﯛwb))%fιߙY8`%;wJZFVMzzvmFfNMC+F9$-=K] ՔȎ)e8kl}.EvF5%-ZDDć""">!)EDD|H-""C hR@ZDDć""">!)EDD|H-""C hR@ZDDć""">!)EDD|H-""C hR@ZDDć""">!)EDD|H-""C hR@ZDDć""">!)EDD|H-""C hR@ZDDć""">!)EDD|H-""C hR@ZDDć""">!)EDD|H-""C hR@ZDDć""">!)EDD|H-""C hR@ZDDć""">!)EDD|H-""C hR@ZDDć""">!)EDD|H-""C hR@PC{7B̪6zT籪G5yj9ڻ """uqZDDć""">!)EDD|H-""C hR@ZDDć""">!)E|zYb{C f4fm6}3۱3f66b3sfm3fnΘl=5̞3.i5sۻ;cf53͒6; n1 s݀A@2py6I:ι@O}$mfSfv4OlkfkfY-~O~ff+31!qA3-3fe4.\s `A~3{~af 3;̎\3`#3ˋƯ[޹f4:\ef6Qq3>Zq3j]ιws 7''!-̎7-f>2}t3f ff_Y-2lkl-4qIfvGt;Qs9W}\ | mOBZJh 8 H>^~a3뀓-̎0q#Tn>?8 uWOAp8xx8 Ӝs=j"3;F@jt+4`wΩGҦu':0 o0rԏ?7Rw,pE$D 7:!52;&wӀw{munvw;V; lp}l+%{-?q gߣK۸ʞ' 9W 99.~p6DƱmMpνwkQ`#ǁ)ffvކW-6sw9犁S[kf}sZX.gs=\p`?j|;⣀D bk,& hι߆]E@x'}C|k̷ /1p>ޞw, к?rmpE;`vTSS;¹5Krنɶ]a7ְhw篁 ι]\?i{ -E@sn9s.nx'^\WSiiXSo`x; I_Qѝ+R/kIH:ZTo?ssfx9X[5V:ks/ ƭ;$Bt x9w_,o=+fHlPp5ι.h0۩ zqν o50̒sU0y!f.֩w`jf5,{YO143bfg6&֮΃eϓlx ;LzWfnf{ُ{3;X-xݡVY#i79,̮6od3n7٤vjxv2fN;~s ƅN 7xm6Px7~ׅsn%nixJ܃wo>^wAx]WFs?2`v?;Ro.P}#/l~ ᝸xƴ$:>*چ'6? p*^m݈qG_5WWS }'~w D3zIxg[On;]j~=HëOzf>iZJ0Xbfιs.9E]MM;)RdWmWS?.sq'nʧfVy gMY .T8nZ`fK񺾳UAo¬IENDB`libvips-8.15.1/doc/images/Memtrace.png000066400000000000000000001604461454007373500175560ustar00rootroot00000000000000PNG  IHDRPU pHYs{Rk IDATxy\Uy]j^K 4De:~UGgՁ;QfA.0Mš,@BB'tzǹuzI{F sΩh^s=){]L]޵ 7 s6?py>o3ۦ!,JΑ1+Qs(Ľ62+DLb>@Qr 6} !2b>K2j] ȀٙDaњG@̗=g qEF[6e@LiO0$"cVd3yȀC&b^_+֩9owyP"2+H H_b}Qfg^${ jlJ 8|b6&Y#>Zp a@+l'L900YJP%A~!JyP=L 0'bCrB_z;`zlRy @q\4h A'2:Ķ_f]_ oRř9lCEurmpրGp10I?[?fI/fGNv*1< |0{%O&؃ ڨ) '*QR9P+83f,{#d@yh.,I&KaHu@.UR\^ȅ#DpR9%"/xXP+lyO$oi!K&5LȄ UQ"ɢI"ٞwEOj3$Q 4 Rwi8cFMccz$xo,g{>?~_mXj4֜zz2MSQ5}?OԗZo mxؗ%GE4j圊Wkj}}(KCEh6ny([:<ٳ?իru޻~]Ѽ8f-(aQ>ݝ&qLϛ"mA؏ JX={n={{7k]wѳ~]^s˖f5knhT?˞}{Ox^Ѹfͭ7+{ v/dv2s9gƝ߸qgaö Ffq?wh}MOp2wpaQěk1oO[mk_smKΫXH]·w{$|< oJ֟?ߞygr9&q晳WZve v>-?o>Xlރ}Q[.k3f\{w؂rgjXԸ_o<εe޿avgcIYAKQr({%zF)_-=$B%Ie0\,%Dd9!LD%Ir_bȤILF #|,]"d0 &7).q8/XB`p7'xPOdָ7!]R"샢(1s $+E%4:au1 zp$Ȃ oDu ɂI%a F%ATxHpN@DPl`rrLfI$%LQA6&A 2R*!l.)>؈ȐI)3fȐeɧOpX+UrGf@LRPT{⋻zܳk.\sƝ+W.֟xE'>o}}'?o;w~{ʳ6?ѯ*\??7|w<|gNPm[u(^`Ay:%2.{-hc\Uyׅs9͛wß]{mٽvᩝUU{]/s͟}`R|GL42x}p}g+W.ۛk-o[[CS[6mص@wwDlaqy]qŹGO.Z4'-nѨ7v4ݸKo^{"ƍvv6 e_xfp[/6^iD7zi3_5k~/4VFybX楛nmmmm;묎wk>uFX,R&)e-s.ӽkׁk?XňFu;׻zlWީ? K|wqN;K|~kŇ~,>_? ફN'i[6W5Fs`Xn[6?ްvr9} /q ܜnh?MWW>tO_~֭ۺhќikWFh4) rΚ5/]zص}+V,zߩF?٬{_}pݺmK.b.W}gomѨpa痿Iz|V-?5VZjҚZ~?mF_j΋Fh4B-|Ņ ;iu x9uחOm6l~v}Xr9}OoӺuۮrMlP?_/7sgo}}ƽ{-Y2wɒa26Fh4ǎ#=q)Kh4͛#Ӳ Ы FhLh4F}F-4FL'zmh4f:k Fh4Ӊ^[h4FN{"7,k֤2@>orgK۔u ZV`x,+uab=֏Шwc2{D֑Gr,"{Ÿ 'L!W9)dL+V4TFUB':Ya|M^Q}I,TBZ|_szm/NsLq^Sgmw~?èvݶΜ2gm=oiQ8PSd"yݖ8;l4;h5D>h ݃D7'eV(4V wv;"/{Mq,Q.>(s{LE)6*DXUi*X~)sXIFb$J:VM`ơrFeq"R3v{{ZF}qRư^e} E cdPe!؊,2IrQdڌ_=2Q*%[1_xDNL"5èR7/;~&9L4*` 2x sݹܦi5L^[h4FND4ȇs_{ƭ޺q8k=񙯞ܐ?j?uk_}^sCcW}h݌x{uK5%Oﱦ?XSյ6e6_|s/U&> W/~>cWݸ2e_?x{ׯZ}ϾG~S?1њZzplX0o̸j8s^zE}x3N.'9/$/g4 g5쨚3kuڼҮPCCO5:;JxOoI=5{]o_tgxmծG羽6ggpV~)CMR+.~` ݽ/&r{%5gV^`j8E{jSn{o7׮/l<>`sz~ţM NZr՗^|kkSnGkfUc}wzuOeK}y rQ뤒ޖ_ޓ2 zG/T%9m*kkm̆}cMXtɋ_ZqA7`648`YCW/X|3.[+U9cؕmY_bz~`+va[p/ZgtU}ACV_?zvmVmS˺ E~ŚyCO^M9w@OG~~Ѝg.Yrhc믾t/h\8_.ٹ7 <\݊wt`8gX^Oxi,z[K/Wj8ϼ6l̷7?BݕZֽ~sz~kW3 茬T%FUW;yx5,S-_ޓ8A+pwW~0rbypqމEXU^[h& /<'r3g:F$-/-;m>_ PtOiO;s2k3r;gVfFP( sڇg 1nkcټq2-ÞOY:e!I>:7e)L:ո;e)Uq?]ҚNs3["H:J!5e\kS.UY&M(mmMو%39Spc]@Kc>yQ_5 N%Hv }3+֔E&gV'\q$KeE|I*wvk>ڞ;bږr՜||m1\Nmo*AUT;uV&7b8^N_W& VSF4Z?nǎ7i$'w''c(-~h9ɛ&!rܞ+? ЗI8|,'N&p`]9nk S:9ʆa3! 9IQlaREQAC(XF% Y,[aHEKh(*`, dFi&Q*TΔ  3P$0WliA'6Z'K.qq8PEk%U'q숕BLYUbDDq&Ljjo{ULA:ALUxSbb0JN|QzTZeyek$rIktLv-4+j -9ch׾Xa]ryqʬapCĢR*G}ے)kSyɄO@4ۖq@c}@:20N9SmlG$X-Kz>S ,,YT%<o VeH${"{X7 1[l@2-ɘRZ1@ ,lS+# @M D*P`a $['b:$!ؓu史zpM*PhlRu6 [Ƣ>ڔkR\_J$aPM*Uɑ,6@M5%mI0 ze@20MVt<miɘ  bDSvJ!t߶Al{Lʨx*:4 ( A 瓺W[OLcv@M *ٖ$ RH[F`(Jxшe4H%=H2%Tueģ~*IL\T3MM IDAT_&!3bQgE53qCW6R/ bĺm2GVT@DRu* %d%hp+U32(*@%ʭ &d Rj  B U >(Lh!R+)b :B31;ݯlRNֹ>=+DWo& ~O 1{$|f UlYFaOySj3TAW](̌/2#2c> rlޏy_ W'x "<τ%1X?)v¥i8SnYx(?'; S"pFBsFdC+<ܐLyQr{*Ќؒd6gD#2qڨyGj [ob8ol9VÃVK}.lS]兂 z>ǢDHrI7`>yM+bK!He+z(\^4~yQܵтe;Beq+ 㫚|z,Sb ŁVdr1['SQ7"x8q7Nԏ2:?0|[I%hg|^Dm?ό|ި.E,9̖qe赅Fh4DODh4tFhTxD"N F<:>B3uu7h4F3 d2D4FL'zmh4f:k F'(>v=?ڇqќىvA}|7}O#Sԫǭz- o#p=͖^[hchhvA桡u>CǭzMf}|,j4'9FysݿpM|g:I5+ȣr{Ͼ|#KR?y/P>ږ{K|~P e +~|y{}͛Fysћ|)sKs;i՟=7uE[!w%}aQ6oƍy˟nӯ3u;MC?}!'_~}m{@)y?C-~nӉFs2ͮ}q]Ba[~Z7箢ۿmkϢ:;S~Î+jmVmyOnnuuGl-g)|sYM^[h4 /H7`%^MUg^ޝшlkʮ8{:ܐNzшw/?P}QW]%g>]cO}5)7 ѝv-U{ڍ[C6oIe4 BѼu OoRx5fu%wxoҁ5dڐNL~?N_Jv__;{=kQ{xI }'F9uUD#2r½es_Nh4 h4F3˗y}h4FցFh4L&]]ӫVsBW Yhq^PDp_s%X" l C7)!A1"Gɼ'0% v 1DI8`!-I">8+[q\ٯ `#@,s^']RVP &` [v @-`" \w<Nn\K _dY3?mLoD:ouZsO?m``#zx97sEs}}zK_a.LsfnlHwmqs0/&>yhr]#1 Âj]h=gQTCFb.Sv[JrYy8BİK$=p<R@F[^H x$%&-/ c!h#kp^ >!p6DI1)h{"a d3/[<,B=2+H Α!d><0lMN( E]Q+8cP+"0fݗ#<`RUq8+B".;PELiﲎ:Cy^&*$@#&13=v`:+$QKFu 0) πkpFA32`{3#{L! y\J3yȀC32dO 6T8v8 w"ɄI>3 ~A5!ҞwTbԜ'*J ¢j;Paк꫿VeO?}ŊS}3n;xm]ϯzѨo_n Qfά;pob )9s 7|qL9Y3Ѣ~H4Lɒ)͸THӱ\_nݶlY{]r_~cŊEUW-Q~3WwzϢQۮ﾿Rmmņ?(S#7?+W.gX oSJϝvڟW\q?Or5̝zmKλ>xhJr𧶛mrUp/W~zn?]嬷?˟x兗:藏Z#y~51+ ǟ&,T*%$#,W ɹ`/g̠ɶlp3`/ga[V1M `Γj@D'0Y̹=qj p%lc+B4T=\u1!P؟8i&; ءWp/'`p`:/PD/l-  Q G@m@ rF}v#! `$neD0_$.PU]18 #aaYY5c=R5jO%"yBd:(ć`ʰqqýJ0A0 *dQ [^*O\l(qsp/;yђJ:}FY@~⌇*M%950t?/mmN̉恒RR?}Ad 631$@K~cbrΚ5/-Y2{ןsΩ޻~ժ v_yCVZz@߭ @.|K?߻rp)/|L7ছ>dٸq:{֮_M)֟~]S5xٗѸhќ ;s9'sDS$._“ri_0}VgND6m냃e':>~х γkȽh48aذa۵^/|_{MM꫗bvuu\hkkPOC}}{7ý{=s@GGe-kUpCPh+@EsyCfͰ|?;z78o_pggϿO;Y=sfwٶmh4cxnϴmǷ$nޡknҹEjjܿyd?/\馻[J٣$9eLO}'''þ̝w> `nufӦ]O[Lk]Fќ[:=o;w^_xsΜ?M._~fUUl]c)|?oxB \8s2ۙ غuh4F3yL/zܷUx~׮ſKɷGݬ1/0sx.wzOܵko·z{g\uՒ.y2^|_|F*Oen t>̩̎ɟ\裛Fh4eɒK̍Fnc.Fh4c]h4t"&nh4F3iBh4tFhh4F3赅Fh4D-4FL'v@sRL^6$GdJ aP8# _,?D@2K"SSrdEGDmY)H*m "i) 0K: H)]!"D<Dfz [h6,DL GHY^0J3Jmʲ6V+evU(GCR/ !GV_w%(E@do+Y9"SiRt0hv|9-(cԣBWA9L$ 0ufC١a-öO}9@+}N`ՎmuRmy0urNe蠔}ʢa4JV-koD{Aè! {B}1͆(QXr`zmw2=۲ZDBUK#(S5urcjSQ)cFiHnSѮ(uO!q/Ѭ45g u[٨JpQ>[;"ӎ00$E1)-4.V5ag<, H*]b'W{PW ݈j#=BME 3㶶D4' :qb9٢1sȱ|5e(G#{b{2'h8k Fh4Ӊ^[h4FNh#]8$3Sѡd>|P8~A3#9YQgp`b5Q;“%2oCB .` eѪ`"ڌ' "YfGmy$39Ԝ_Xw LODzU47E #+2D d[8.J{95m<.h4M^[h&c·|;w틫3<ʞ?-?cYȺ >ȺLָv{mZuG5\kbf>ݫ7_ЦmmD{z^vVSN]K}=;&n~d]\vټ13ugr~㊞>!+S2yW''C[_vo6^xv͵gbYewEmk.8S׽c^`o ys|=u.>U- t]=X#^ݛX8ݦ@׮qtf KIʥg_;{(bg']j*ZjXT>RzBO>Ww~WsZPĖ/l^zVc/9̣.[ڽ~syшug;[lޞ:kmmMT[ŇB;~@lh؜9Z9`ˎҳzzE=ͼ5]g }zK9gDC;1.0D4w艤\ےv%u 곻E0q3jGayCWRO{9ZotG+~qϦm՝|-975v5_Bt 'גsg9:FuݺY>khXcp4?E=7\{ބmo6]guȘ{b ?L26 w..KP-/y[[?d~06:bI2+Hcm~DS]>:%;:VmMą YgVDN\vYnɮ۔^w`;{m_ y9ezc 斌hKt|=a[!iju.93/:g;UTiZ\mY{Ǟtɡk74l3<#ĩϧ%G{ [jw'20lږY\EyXmkH=v 97b!}eo߾o9bxh[2z |" ̓h3a1\*W5M$Rv# G)qM"q/ɸ}$'(quNVvzE\äcyE5(ܓq<&kf9>3 6赅f8o0&->=o<ƁJБQ5Sr FB7YиW')?ъ A=&d?~jGhek>}iMzm<_!``lL`D0$00M` a  `̪fBqB0dmJ QF%"Br8sH ӐlK`,ϖɢ+D UU8[}hݗ_)T  1Py.TDCmj2#gR\_p#~2v@H|IΉE|CpU IDATPr-a7&! Dj\H> F|\UH%% I@uSTqThE,i2\xD#߈%-S&S "`4X2U=& `F]`P_뀐{jv5eM-kT B*9I69ː`'r8Rt FʋXnH;KBN`Ț*G;2(Duţ>ǣ*ڮAt@*q2Tayb`&,SVaH˔j7mTU7!D} Ĭk[} ݸw+_tu#¦[@aIz²$3wRz2KOL)%>%FvD,% ?$S/I(I`e(9QaIWP*6GJ)dY,%@ D!DG 1313I\ =,VU8 TMlݗd(}F!V g2X:yd,`!0*yd dTd#CVO'lSsXĂx0$308@ aA9#A=gB̤_Z_\LQ1OIE(SJPEYRzR1yPI3 KW]Q&8urJ^S UdE]G$OfqZRNOd`(cz[VW>Q, 22<-DT[:rs[k!ǖ?+wlyf[&}PIxhю}Q _,zmhNn?oneqEjU ;zn֜߷<ŏ;`\g{߾?\ٱ@6wvۗ|b/}~nݿEw?M)Vg)P Fy Fssgx?lYĒwfL>fEgwμgW?KP:ttʋ'ɺ'lχ߽wϛyE+/ٶ=4}b0>}Y|ͬI_Ҹ34{_ zmhNz⍝ywăi'o\{M@eٜ%3S&`k{-LTXֻV}~ʿ*nտ& Ah4o9@@qٱ Ƕ_~Q1̈-yZn! bѱ/>Lw_#.s(m{"M^[h4?. _7{fP_~sWK%>o@K5A8~ Iќlܖ2 y~xLLJyw?Xcy->ڔ75A!8ܷnʒ.W+;Rq@O׿gU.[Z ZCtּO3_<ӠFA#Fh TFh4q ?>h4Fy` OFh:˖F"ֺuWp-0X|b Lsd?c ɀ8'* $sXZ)|c %c`J#eJ c c 8AH bPj' k&,p (@ ůCQA9҃A\#K\(#`1 rT`! uJC@Q`P0A !j.@E0"P8zC5c"s# %B\D"|,Bi F3Pb8: Tc:Bs 0DeA0&d!=$ J ~b!%g"ZX#(@ 5FRޢC |:`JqD*0#1Be $#yO.)ř| k ^"8p(f- ~ah$3$ Т!PULmjQ"#`! `ȤcF>ДA ~vqUZY(|VTmBT,Ie8`:DBtQuSS(jRJMXajJ3b1РXH$MyM]}T*>knȲemmgbDZ֯vk+uq4)} Վ(= @TdM:5ZsmL8h"" ƀ||ci~ H9u>r0Z\-{ @2{8,B .9b2EDG`M<`yd Ȑ6cMi.u[#Ow!k oL2LyƢRvZj: |MYI$hqe@B13V  K>cL!PJp!hɘʌA<̳!&Vhz!Z$Mrgd yFnIKAn8  j.*tżڒҦl3]=ry D@y^v`6Y ><Chǁ<+U*zӠ>#y9#]P3`K=x9jEg6m"tUI9+@m@fr~kT((@E?+2RDPLMǚ C)%LMX̃)ψ, (U`\BLF$y I9'bI&c]L൵ͨ:k_&HD&7eF4c6_|_t_51?>VƭOa*꘣=1w+xhnn|v#j+W8VW*Zf{칍wmm3/n瞍W]uYoVZԔկW_lɒ]n{xAF$^r ؘXX}zoGL4'q?׷oHz88QoJ:v8vq%S`;-|\? ;Ԕ;w >YsM7}dӦ]T$bkҗ{r{C7skS֯3yիo?K[L;9~5_/遣Mr,#L"Gʼnsg̜4Nc FX9G;o†=NLǨaCjͽgv#\0.lN&cLv[?_xῨ㳷ofh_~#z̊/[OjmquYSLV)OycjsŊL ;7xeoo'?ypf{ƌgDɈIzh N ){^7wu׼Ooh]s\W~d{?\8ڲchOf7GHDphxcݖ(F a!x ,E@@*׏HyX  .[/3WşjV:!FtZ̫O UW>v]!<\F H'aCq ǔ\* <,1F-Aj,UH3Tz}d5?Jr X#+oE}jO5*UC.\B&B{-+Vqm\voSZjՂ{ٸto V93o*o speѪ~#{w/_yJgӦ5Jx⨙?jjާ[`ŊBh4Hӆ W_'w@mڴkŊӯgu?w_O2%{޿=p{o_Hz7~ժ;wdmm3V>Ӷ/Ν>sHڶ˾o|h4F&mm3-{=ueZ͛q睏{"8֚5g-YrZoo'_ lk6{6WZeZxL&*qkϞCjFXS$cQY6%(e?c#PY,S1aQ6t> p\|B9ٲf9"Eʽ1't> p̜S>rse cFX2 ˚*0Ԇw1{*Z`YC¶猞 s]!aY [Q߶OF=B=ڌ4#uU"U+"DQ2z;T ]e]\HU&xD KQ ceF2Vk۳ cM'h4~F3JQ-4Fь'zmh4f<ѿ' ƢG(AXΊ#yc3ƹK.2\SԱsa5p,cƱnRlHYx*L. }]$ |D4!e/W\g4OM`ݓ ܮw'>g}ӴI#\6tΙQ;]seR띑y-єw=֕-0D\LW%䎺[UCo-S{[miHyKTv; 3ҐLo{ Ioz7TSg|}}l;kV;Ν߳#1J` NLs`ogd{K֧W9pLy_ڴ#ugRl{xS}ǩ,S0с.@-%J -9ٺޡvũjusFf#bn;PC "~,Rj6?\0ʛ:cti,FC*q^<ȨXVl%>#9iGV,d$۱#KC1ԌRh:NJ[% h4F3赅f<9?x0t)Шb q$8EUԥ#p`é=Ѝ<}jAG3n "qFJ2jD Z)`R@jF#|HK `R22^|8RyW&$@X1z;B)V,c~5bCZ2${YLuTdp ܐ`[3`HA*kX|e !*'`Ha14IC3U4 근P I %@H%eK@% <*U&sJ1bLNpN"٦PuH `!VT;0,q %#b;0]L ,F(oj(zXʚ:t龺2=3{"E(p,kbAđ-#d"E"j-a ud 0@ #2!ˠ#A28LDmaȈ%  Ȩ-K""7 EIӠxTئLuj|ˤ-L`Ʉ5d2 `ɄoҶȱ$&>g'/`[viP Y*3D KF!$K&|S4*LN0LaXҶ$"۔,&pN`ԦPLNE[Y؎Mi[RHT-=`"RX$@L%|۔X`YdTorJDA0d7 J!&iDTXQQ(gY2A*tA5 kbkH#yCńcĢi$MXD*! NAQ`rrl;Ljeɨ#MCSĂPec5bHL&M.O%|I99Ty4Lr,,ce Ihdұjǒh`d2@L)#,) 1J&-c0Mo2z,"P%('B/TOA% 6p,SږW%; "JIJI$H&˔QGj)'àxT0I%`s2 kʸZ&"@"< %eAQGL150DđMLRE``a2;HĄaaX%+!jK@T/e\UZTq-Alxj ZS4d)gxd·M2]ZqFI !:"nk~ a_7}w#t&k) g˕ڷla"e#jb mW/8;zh>1־_J?DlRZo gw(MNj~J%\|X]E DrQ QJ4$jbA6o fah$ |EYpY,"3}48MS}9|4M09|fl|I< \ 2$ǖ}Y2rF4 |qDDXcK_ pFAQW}\D#"WdwY9 /UZA ےyGYmJ|Τ y#S<m0JQ/0ӔMS\EQS˻2Թ^ *n QQX8۔UDΫ;+0۔AnA`߀ߏLj4' wP5/ݻ잆-jw]Sƿo_;cve: F|hYzThkXwE}W~Cjc_7?xomr[ړ//\_|](z߫I㳦D'2͛}Bќ|gsVwhk{74K?֬8nn /H޵J^=Y_n\uٞ۾lo|?-_Գٺ) 7]~w;[&r͛h4oM~SԋuO6Xl>(.zE9|drF~ Fss(m=-տ)^$ܮI)Ol2د6׬8h4[h4mS ?/zDٜ '~pZl[}\I?2P>v{DHǾw~>n6KWk_g}ќϠj4O޿QO=]iku@5` gl|+m<^q(x^|-6kj>U㿲'zrO5M9kj۾gz5:?O5tgYS>/BmhAKOFh:-4Fь'ϝh4FѼuUDh4?oqU%oo|:8֭/^Ry@z4hƉNO330%x q95 *Xl.' Is@,.dڠ>Q#&!G0$:_2XGO(ǁ<L H&$B2 @HĘB>œ] &@$ ACߚ*^4gPW<#q`Ϟ3-o?;^5 ,Anqc)1* x1ja\s#O<32i{' |$ O DH*|D$MLIY.֚H,rcNAf $&{c!J2Z\& (!@V V'`&{h ]&x bӠ|V-A8x4h@Ȣ p8 `\궤 P!y>, ,%Jr@H,Wc!ȧh%m3rF+{LDT獥X%}f{ jE8 Yz_T+Jzp'mDIU OТԤDQgP0°P0,C,=V2m HByA`eUM@b.K.`D6c\&c*%T0ܿdQR@yƧ#W=d`VlD| vP)CJe'*k@"C3 ӆ3%X |NDHQyrM{Icu_߽d͚Yn;9 xq/}nXkяc}rv37B5k^̻Znnn|{Q]I?eJk޽lY;|L ꪋܿ?}Uy7r%L-\|[#j >< 'qgK~nݽjՂjmqիո=yr׿뚚5\|yۥ~ڦëV>Y|~oǺN&c\rC%u׮}wܱqo~{g?r\pFgg;G-Y^}իwmxCsmߖ{⾚rAT@ԋ\e9œt;;uR}M}Q>٭G0rJs1|=LsKP!GrLvkHIgJ$x8xHH( r >0 hZg$"Lsz( IyF}\}۔CdIz PiMg|N>0j@g1 "L1p"Lf89 e9.I||l_n=8e  ~PjI"X乌0xânCs`Te0#Lz>CɄ$ T,#K"C%dAy@e)а(mfL  +kH^C|4R𤘵p$"ICٰD7A@cpuXD>D \F9 CY ؿ?ck˗mݺsOMWL2mjq9gNK;::`۶G-ꍼ6w~uƝzLI=W2,|k_r j@{Wr:L-F>"^zӅr__s?9,"}U?n{Ow~z'n͟3js}}5kn|o}<2,Xp}pO,4F3aC/W>75.|ك>3m:`i۷nޜZ@ooba1wOzCAstzLm:eYƙgx]GNd?~?MU _ʝjgGG^7Fh4ŷau}mW]uڵϨAkn46}PFuo}ow?{ ._Fګ`iƯ| <:FFh[l>I({^vu}>nWY&?>偭[w7> dinnz-j`Ҥ; ~U|[˥sL}7U4FьN&cOHLr@ss-aC{H&cUĔ))({~BiV@GGgTĔ)|e)VUFh4Fh4d؉v@h4[ h4F3赅Fh4D-4Fь'zmh4f:tׄ:zm]mU1f , ڈ&͘V# 6plB".f"b'B me_W*)J1UCH\ʎzj0r]0#̓1 +saGE'5Z-4BBw"R\nzpF-!u;lA;F8lFH~_*Tp%˘-, =Fh4^[h4FO8͋'rOn*ۓ&HKK E$8!r"Bt)xHH/&BH SCz!!D me]DHU#D?4QAHG]AH e_dn}(CMR ʃ9,EOT&1*V6"r]D1gj4$2V =*SeX+#;DDUWN,5ua7=N6c0BAF{2MUg) 9)Rfա\Dwh4F3g9552}'& >L"*~͙>ް-3ZfN®Wco?w6^^;VBM<"Lr7nOɗࣛ7ju:ϓV-^MM%/YuϣM.j&ҿKWw9>m{XtY Kw=熥 29`uܫ")?^-]y m-~;ZqMxy֝{:3&B"D0*UxU*U۟o[|wbk"VETpSPJ涻31e |?^vfgy3'3gf,=~ݖT})i_`}vIlt<ag^2r? xS`ʵ_2VFִ/,_۹y(Mᢂ`Ai-rCuJUڧWQtkꥣ*)ҿ.y]74rP Tmܞ+9y>Kgn|q5I/Yc(s@G*Uݯ(,_9g ޘ~ո#2}wOg[SS WYy ^*QGW̋/ܱ KUċݪbN\sk/hc ;~DUb{kAgYnȚ//,`C>۾w D`Aܾ:``]VXHj|1䜣r]ƅUM#ŋ7yw>?꫽^r-μ|庌zDYmO kWUʅU .VUVՄ,8hTGwfegHbL;U} KT[\vtIݻ/+<ҨLw{11_:rէ6aCFpi8]s'T#+%7Joڑ+6՟9pVQl.~×隳i{jzM2rp{,z}{RSb_|忢Vu/Y+}B+w;~GxkU.9~vW|8㢂{EhgO۸#qٶԀ/-|c1VV P{z#qaƤ,s_b8^kC^Q>׿~5oANIJz}q#*M<8oor]:`~6H=w=l~^u(Ǐ W-;PXҭ#*?"zn+冽2ӣC/+,?^YMGT Eê*`߷q)g8^XP%-뽲"%?9ʘ.S޿wf4kyYݢ9#^+u~_++#Amٵ2q#*~_l̐`h ӟbgeZ zF-peZ$#?/6zf%#nу*[{mX2tpHonȣ;9M7vwϰ㸹+96$;zp.$QkN~zMq*l˜fiz=c`mH_j X#1?_nHUEVz4[tyuJe/7b9ua9o9WUWyJCsF_}|y {z^P5}5Ul?,:59 ),vOvO2V{A?%vuQؔr]- {y  j!o9GT&JO]+TS'>_њEЪDvɍdȊ~!CǷ 5uri~nߺF{:GT&v~gS-~^uYfFaXkNB^;'2fH0f ;;BӿwHSwEaωI x#*5naUjonXSU{u4n}Hv(2zt*UYF c6 2 baK0vyڷk@ɾ<ʹO/(؜No4UAkK+ (9v켖|k떕vkShLS 5rqNSǢ$ޒ{*AwɩoA:AVBH ӹoAZ㲤*h[uִ؉z'O*ip[5 7a4CK h$'ID&?4fʠUd*1ištIj^VlHCv&;B+Vl7uD[kJ-E-ȩQ%&@&o= g=#I(I0 ,@Mf;cYF` %"&稩ąQ⨩N"EGEF7a3@Dr̀0t Y pd, ДxI @W7wT#qCw3GEq+5@ 0@.cٱ2@DpsTwdtw'UCY^]!+6ȂK薶g"@Q⛏'p ƀ" UrpFkSUs!qgnJsM-*IF@PUt[~EV)A$n4Te Q䚊UX6+[&WITp8GP7!r(XMuA$PU-q`^1UNJqwgI.m7HUA(KjE`3@CLvJ_ 709i/XL)Ώf"TúH4fYB⻪W;@Mx>O,yLQ$Bź||= 4qCJ$G{H5P{(zUE(R$׈ŻDۮL^vjY*2` % ŰXn | rj#U_6@?B9x7|6aLEѨ̀uJ{mEF?Ŗ%L<ӽ"g9| n{tں&ST_LWp<#qymwEC^chButMc&YB64O:RlM^É%U8 P3M)^ǣ9! MHz «;&$u]04ǣ;^T5CwtM)ЅGw CxuGЄ4!˨iԔ UA£;Ö%T%T!M(j041z GSe 14 ݑ8(UUjG&|[џbmbkzՅ$# fN(2 Mnu{uG1YBUхLjU|u$Lښ"|^ЄbVdnxGw$* =[ں& ]x5O ͑et"$U D$T*£ YFغ hNjJLӄ;.4M,9]RmUH1lhGw4 =-KC>ۣ IB_uM-YDʒH8vЫۆ.|^qcS045$#xm5[f{ u ͑e4TL)ЄGw4-ޘ= GS,֗aps*&5ѵxƳWUa£;*^14Gֻ=x]>J.TEh:ѽ籏 X&TM r{l1t!x{NM^GUDq;n}%.R+-6ܣQapM0.|&1xHuN躐9&j3y]w7TDoRJ3g*(X^Ñ8XNz9/׆uw_Z;owa80EF3qXg⟏Bc`̆Y1>] &m*5w bpC#YC ~@,y1@` 6[']7]D`А]܏Uh8 N6 ,^'l"}hTM%{L3U"c 8[_Seu4w‰ۂUUdmM0@qz?Ŏ.pʖIyt{|bF5sGha{h8q%2M> ~cQKD%<.wbMlxul-%yifGN:rYr“5gɻi^4"o}uq{m88b j9YjES0^*1ʠ;;T]2FmѝLK xc:c8`(@0jIQc8+/mwfѣ%q2b,EwjòpCRƆTTi)^qPZuɍGU"2U& Eb6s35$ǧ G%IB`FpbW!d2C,cASU$5Y"22iJ1:&Nb]# `,Q]EڰB 7dŠq!@qą[W8c1bd;DQ*lT5*$ &OD\tء"DKDDEXEn8,l7-IeIG!lMN.+EVWqQ\HF6dVP"\ˡɂ5-Hs8"MIf;ܧ.#IXS'{ 2cNC3HjD!`ԇeM5urI8ٝA`M&p@!f3]uTHs(:1ޘp(#b\_fL xcQ"5*:wDy5fC}^[ ZG&u/">;ۊ1EF.aF1t+>(9䕹(<~2oA!DB!-Q߂B!mBiK| r2YY$)QBieevȈ[B!-Q߂B!moJ탳^a9o '^ò#d,k$vv=US[{oo9pjlw8{gwLv1Q߂L0lg@ȩ!h(O @uŠ[7HiE:&;B8[BlS.=< ܳK;М{ojʝ{R/[ri؜w=iQ?z/y/[웾?VYAWqS O|p4식qqͺ~ϔKW*ϼڻ[Bl2/?CԮZXk?VgV&)E}ݱ/s7)L{d@ϺcyO74_l[p7t[9 &3u;KRϝo~͜`¡U+e ,\gߴGFtUT*k_i{$ry^|+>OvyǏJzr`=v~m0!]-!N6ts?T*}r‰83yʽO(M^7/'i{*ʃΈ?".\rг+;o !g[BRL{z ssB8_>[y1+WɻJl!g&[Bx?-q{j^NxƯՔÿ~l Kr'jGUDvYZޑ8AI(W׺u}c^y01'o;Sל̨;s{r{DwvIy;əS'" | ,|״I|װd뾵/ׇ7_kٙ}]nFϛrCs`gfyl =[4!U!.]y9a]s@~ߺ}k%5%=յF_ryy9ᒃӓW,,Ж6-|hTENykuVv!qԷ BH[BiK6|HbDC r tML*w:>Ө, (Ӭ3'qE}gF:Ѻ Vު|gBRҰ gB F/mYdg֭+x`-J=;;`->F @^»աF ̜9aȐ<زe+2zL*w]~тx{ 8_gt#JO-mCgJ~{̈vN̈́:;";lŎ?Glu.L`탢{:ꋫ IDAT ,O=_Į<㨯jVB ]oΝޣG۞C`-ɓ;{^yyMff%k]?;޸MvNvBi}Űa-ZU\Ý,(%&[{n۶ذ~F_=Ѝ=z4s!9zBph}v'v=˳oaoǣ%y}X/4yp]W9g_oߟ˩׸w#.F_?DNaMxϞ6 xA\?ć~:BHgoߟ1f5kv=-~7vy[K,:o[o}b͚fM~FMv뺒YgeWOƍw\tSOGOVx꧞z;uu͚?lհaw>5k58pVuu(H9眞o|4 VALMX;疔=koiw 33Q)+ʯԾjV++uJjPΔZ:c=$TIB j?U)d\Q Wc9CBދ iEo WY>ppQJm90i߷ɥ-[~{׬qu{Ӧ-(iɓϝjb%K2nfMO8Qif:,Bb/u[䞁_1pO ~m=0oM24iʕ[V*j4_'d\0턼[n-ZxYΠ=|tvkD[g'tKO8!U/[o}:f@oQWy寿~_-˾si~O>y[0Ȳn{_jkæKLԄաI7oڵlYΝ`d֬I6ɍꩧf1nm̟,//=?EB!eu5499irUN{I!wB!-B!*Է BH[!Bڒx4!Bcwv BDɜ%E;;6# PNEY30-_w]` }jBfegr*gVS&#_-۬sggv|zܸ{7mݢs,ajjgF  -;lX!C~c-K<"-{W7Zxժ/?pK.Kڬ/;;6hm&_NtuO]iͻu:wNdDd8ʯnַgݼK=ZҢM+E^٥Kյ~[E= ^MGtC446p;a4oךϛ74c#G4'[7~3z􀲲܌_^[:lwyǎ=۟!aշHCe-\~yfywI|:cƂA{9/~sB%BH'ǫ}E g{PS/sg=//+؁/N:Fպ n]wժ`pѮ]O Nw ee/:0??Q'z{#fM^ti#!BH+Wna\KBqߍ{oK,7>Z\cK|rVIIʕu]itrsg^=̟<6o~ߛ? ӌy~ sz0=%KaӦ]<~}%%eo;kɓf,\CP֩:C]=3B ~muv8Ppm}[Utv4'|`J{|V Y|;z^&=f7X]P lh7ZL8iZ8qʕǎ=of̸M'O>wE~+7SO=m؛n*r'd{ 6|#1ukvϟxMPUyƌ{G_}kj@ 3x8:V [,ݭKH qD]8p0 0 ,\cm_M.C9nцV6BGZ5Έnusi(|` Er]03BB7Ĥ@Co"}97L( 2n(c 8 hhuXr@+; 0@!$H︫0"0(bt6pD@Bc`瀘hQIĀaC%J3.PHN Ս8b"<`oMXLDDY)0QA0&r@n9K队f=v~o[?rJiiޢ#G?Qq1,樀(OjV^20׶eN9%E:Z*sjQI~[r p^խ&2yvQA45: !C9SPD<*lS%,B8ϒ:LɮbEҼ@ҥk˩yyYM߼WΟXz7~gϾf Zmg^70nz Ý92R|z_2?8?:8B!d9~UW<Æ;NCɣ2M331mM͟XD}DWa)- k; 7vp = N-l44cw\C!8چN5;>d{+2j=فE~?phᖾڴs`L}= ^KIIl93BIIա%Ktʭdi}n%Y^߰᫋.U+2j=Z mE~dV &ݻ{ !3B [l߾߲Gfفo~Aiiޒ2 Ws+߸ѣy <!d⋒_|QD,))>}}]7kh[S `njXzk#>bꭹtwRiiկ~gY~k'BHۢB!-3 !B\Է BH[!B-!ҖoA!D} B!<; ]/p?QkYtn0BHEGKO!o&B!D} B!%[]iXW?u !mphUxy3t1O /',^n !Bc9[CS̚\ݤo[ٷkfBHǣ̔K?r׶Cq]P]ZIfgdΐ)~;SkCm ^.Ma{=97]s`ZwăumNBOooڤC2k[?fZn,b|Y?{~i9eA!4[m_kΰZgk~6V1;>oTCsf]wcZr{D~װ{ћ=?'3~=]76K?ֽ[ܽuX޳%wós6_ӑ^ B Qߢ3Mnsr3"J+4(9q{jP~\hTŒwݙ7sܑ%<%=͉!X2gpzuy9fK!t[@iK޾; IDAT%Ϲ}gѨΈ&]izeIO ظ=UUD~z[B:h0`=n|Vx&{b_UTui~. 8bfTj~BHǠE>7n=x  443^c*ВOr J^ &pѨ MN!NA} =} o{K 8\Y1~ krfTo|0[эVUk囿 Mym~j4J|%eo<[2| Px篭ZVͻauZ>4xo<?!ٛCspO(mNxBFD!gQn薸Cde!3=)E#+ krb`^=Ύ6&B6?f2*?ydG?|sXV9O34.SVr;ziik#6zv!B]!BH[k"k5kmMjԪCmT ַSʦifuiV$bGP_iM3D)el93^;H~EGDHݵ)S~WZ7Ҽӧ|˖/Kwk-[yK/9nܽ班^_;묌'ս{ܹt2OYYϾc}.So':% uc!EG&BrsĎ>\@Gf扱c旯QLP8N>OfyEb67Ӵ z[t:y[:KtV:-[RXx.11]@\v V^PP!vpI#|aT/׉܅z  |'N|:44ر]!A >8'tvv؁@K,{KOl/9yfLLh~Y+T*G޼yύN~~؁@K&׌Dn6ѸB?)v `B('l٤S.;NuvFn]M;%$l7bֱЕĄTeo@nP8%`'@gf46}`Ӧ=V?TN6ŎZeZFPgvv) N5L>e؁[ }{fe sgR*.\(v p7<=r xp%q {J;h˗>r xk٥ǎ;"hE-4}|⊋+Ŏ:e% 6e./  IEP -=ޱcVLJ1̐[ed,1 W0xZCp>|0MOœ`25bTYLLhZZ6 h'p2Y/@!o،\gPAT CWT$v`Fc7_$܇L-[xH@:^OERBXV b>X[FaSEЖaw; J[@[T*%; %A2hcuu )ot--r @ HMQ(+An-GP[@ G-$djt,*ʕ:.['bG] r hUH޽bG'cЮ/ؘԈ 0߽{ Ď`]tn׮Ď`:?Qe@ - +'4f&aw`ĉOc<`EXoVVQP *ؕVbS3`o!!>Ǐc'< RHStU-. CK²f>Qd`?#F +; []9.v ,􉀝t^%%zQ@@@&S#DN"#0'@w Α[[Cnw0 -t[=DFqL(@pFc[=DEffty-JeDa;nG;+FR\\ɲfͷ<=y`K@8<0bGaEM_@=z8ԘDXYYk67HD)\\<=N; WTXU޽!7o"47 Ǝf67&O#7l;h׮キ맟~;Ngfm;(12,=hձcpXբ*~Ă ~R(:#IcՍ7Ϝ'EN ,.]kkqrBUT fU0l `K-zBT*J_RogjE%3\]_}պ~z ̝;ޞEpܹs͛{_ߕ2rZߟ XEFYQQq)0pѪU?lVw 32CC""kSRZ-3v^_P89HQT**.֎֮ 󽷘GX YWϘ278X;mZRDo6j1v?XwoM^yeC37sǎ}kނf8mڳCܺCJvmLR7G߳ZPu׮22 cN 90pQbbOi˭J#c0u6QahM mZ= C75sj0tU游 Tʍ/rϞ-J.^Rllrg555. cȐ"m/:ב#GZ]A[TNnス};s-[1Lq_?'2ohnD>}ܦMhzo:9mw?I~?~pNX}8Li#N(ىWT\_WY-P8VWoY%V…-={-!d55~s_b\->C)/>>b|~0A^d;+zƅ2Ewv&b'պ߾9mڳUU*+7VUm"#6== GQQkjUUm6ӿnUҦѸd=M1bȽ%  F{KZ1B 'ccue~`0 !u(jk#o;פ(ټy:T,u wzY\Wwť%[fsΞ][Xxn/+ŋW[C v[+{&߫k+57HJ>0@Q^~,/Dh'y:~~W_-lOHY( ٺRHLLkY֜z 5+$--kkbY̙19д!IJ7-i46Fc#!<`E}]]c߾rT-W#NT۷qJ\77%+a2Y'(ER(ilnVVo=> ,k5cR(oג%w_o~Yhl{sԨQ <=]SR~A.mɏvhQ;] 45`m||}߮Ds>&3wlQqWU*efMpgd ?`jp2O .Ð*EjX_$VnX֜>@Ѱz?.t•{Kz{܌tݻ坑pe25Bܔ/J5:/'XxA~yK\qUrw{/>M-O㛥K7M{ uq闑Qmj4.|>s:(ȓߌI<+oG*N}?FOuPֶee=x2 ŋ_֍- BgW_ 6'LzZlZ4yHw22ҏ{% e}3jB:*JO 'M6U*l><|di4Vx{Oyygi\Ed25 2ГrTell &S#uԆ YMM=b462 =kVj ˚6_?b0\ ׿޹sAQyvݺfdd,ٰ!+8X M1r;(/9kƨ.|q=P8y-պՋ֍=D'bF/իFG=t蝴j)S<>aͯsX]R!dժ4 WذhK7䛻rsWnr8.n#!LKSKZjwAo:TeVi93$!aC8ֹf0\kM/v򔔹嗦Lѕ_ܺ5kf~S :;;jI>5pmzd֬Gï==]'N|zw_x9DyⴣGW-,<7qjSC+Ǐ 47:v׎Ǯ^iѣ} l͚}y L >|oO yr:S*++kFz';FW ɓ?] 479 Cvǎ/j;9pƠ /~Kn߸ :Eqo C{x<β YVuSeoed: vƌtd lVVQsmh`.-Ä́'OG}ݝhرΞDt骫kǜKJS)(/j{z>#[5lJ,O _5NTG) L :i6f|RI@2y>0ixQR݁kf..,ruEF:)ל`=Z͍QJ6Zk Lz@,Zkj(Esc1;@P퀀 J)`1p%(й5x^m\(fB,v ;8VGƷ9J!@x-Ӻm80 2ޓR*:h{_|lk|0ΐ*7J)/pG`:cy]0*6kWTp{}ZuĞ\4@T2pzǸ1󥞭/JKH= >#0#'߻ Mk]1؀8ݺj?\Z[1IZ_REiwz,?0[\rz?xTk6_"MDfbtcq?f{T+7J=)Ǝ=R J+P461  RzLY)eQJc(c׀;+'([p'8SLn%p0 8nB|>`ۂX :gR+W?-pO>) UZ7l/{ (gn2p װγ0vVn61=kv$T"pyL^q^9/ a}@6p{uY[a\w}:l0ו`{3cz,T`_-=(FusCT X ]R~r }j{>(WJqTyXn=YR=Re-&lj߄:iEJN!F:PF`,Ɓ7v`Dz#b4O&FR}3?pz@~袔Z/c$6ϝT`(PJRG\@oGeh.ɾ JZ{ӂьy{.wa\=Q N<#}wI؇HJ)|t?YJՖ]RuKFzhRNݩ~o`Ǹׁ ` {GOJ*8~Gk1ZR`\ ZgsD+\XZ?X9B)eZRD*qci R; MJ{Cx&_Y~GHkJ\;N9d}qwuRkc+;RJ=g=>κ{^JR0k[FZo8#ϟ1;[13@4 |_+jWJ=l5Y-gaܯ.;$Z 㑷՞GGhS@'F#vtGM0nZtO8*8x^{z砷ckyRj8Wm:uׄ8JQ.~,=+w<=q 9&uQe ĸ k8X\A}Q(GVjø-۸܏Z6~$]kjw)BZu>h}R*' pدRj0 k?1NFǣBԦ${!B4 yW!h$ !-${!d/BpBNBIB!Z8IB!D '^!h$ !-${!d/BpBNBIB!Z8IB!D '^!h$ !-${!d/BpBv:= CB@n`(35VFiOALB .!-Ws8&;z3ǁ J!D<p8fR+^ tmBF8%:aow4ZDB!Zm@ZZ}lll[`LF$[\p8HKQcV="!R1cف%X?`0ؔBN`ܭyNll>ABHsW:2#Sˆ سg䐝M^^V]2tP[!D\<!!g}t6og"#g`x{YwSCxE_TT-[ƺux衇߿lBSecv Q.뚔zR,:v۰X|:\?С7(/jr7s嗟u!8#&6فTG1k,***a9DD\bG)XXlm[99+))`ƍ3bRfWBC0gϞfXK_2Cx6J+~~ 쏾JK]gf\Ӿ6Lvmg_FMվ),,dƍڵL";;___',,( Fǎ[!N>44ZkS Y|̹qAtS[frgp:v&..-[ u`"= 5G34PFԪ嬾bŊdz}vktMBBBո?v1|pFEӦy05[VL,_ ϴimY" ||,|n ^z)Ν9pr,s~u2jt?k!$$4Z!//XJKK+e# `+=(-Mp+餥1o<͛G޽1c$}!DgP\rٵbƌvl\Hi b˖,޽EDEyqade|y.vsea]Ϙ1AgKٻ>f= EDF.rk>$$DoFJKK/(..f &$daar6[}l!+k K(,Ν;yG0`r ݺuk؍BSdz$!!klJ{׏ yq]y'ӷ?V|I*#Fѧ/CE _9f=5-&Gl &FRn.ygV?DL]XsNS+2B­I$qѾ}{֬]{uaaaL.1CNNO=xya j.]&:z| /6f${-@JF_bzӽR 833f̐kMا~JFFV/}_{Ӿ7}ZRe@ e@%0xEkY)H`:Y&{O{{nj+5k^^^&E&ѷVzfX!x{+֭+ /sNgݺp~DF s%=ֺeFkWESǫJqq1aë߼[f#<|"qJHIÇߤ4xq:v["̦.WJ^ʴ֛Ru%(:b|6~sZMD(.NN䫯203ӦQ+сzkyy,_KB//U5E&#-ƇrJJ2Y4MZk>c{9w CB۶{l6/:tÇcQNrr2<V2{Eii@R@)ezL/c=M||E3V8δZbf^=?ȤI( v1X0sؽ۸&U;jYf;#Ug웮 y+2dbb+Х_8["q: G 00Pnm/^ @ңS) $opבoA6m߿[4R`i-fU^kWKiwnbϿ 9{!j2rH>3LDٴ)MWyv^PPN||1۽I] IDATcڣrb@Iy29iէ8`$#F zMի裏hbz|3Y,^ _JqA}Y^{5y_1r^4[;w1cƘ\3&oʋhzRFf #F8S ѳd[,5o[`k?%%ݮ(+S.AAV>jٳ3((0Z FgV#% 4cؿ0.%#U˨=u:wjA6E?O.\ܹsbؾ}>;[s\BB׹2'HHXAB PJ1vXO.7G[]4+ WWwDjU>[]#+G9"ri O?,ZR'6~Z[*RQ$^h ?>_}qKu$4#m ?b 3)(Ƞ ȑ#>}::u2g) L# C=A. [#xTo/1Ϝَ[UNn>x{+<ڝ_2jt~~~VNh+8q"qqqdzqFN'YYde%k9]ves9tҥ dJPP-;%%,ZŢEYLƄ G!DDذXDhes/%%.lDEOj^9 |}njIqq(,,t7[rE?~[)%"+돪x8r{=z4)dfn5ӛJbׯ%ZIBVGm}ʾ} >|864Š#^*wy9FC%1g22CU:u*;YUӛ+ >ljnEAU k`o1^)Ν_vɵ$Z IBVK/]vhPVgj}Fv^`ر-0;!0n{fELi/*Je?S^$,,oiExf!f0`w}7ObtxMee̟g ÓO>)oͫ](0;$Bi„ \}<3Ӥ/#GvbXNnL&Mr)d/30adΜՠMĜ97=M&Or)B!̦/ ]ta֬Y/f0j |6ۙb0ի-[ $$~}u`N @)2e ]v^ ''+`ٌu;_ros:P^nG `u[H0:$بzLkG!D PJ?:,rJa' R+{ !'EiRJMf~Ƙn9psʩ-qpQg0kqJ?i?93 !h nS*^m8ؽnNxiS`Rx{+|Ro*썺B!-9?J)+=0?~\ Jfw%”Trlxt/CBQ9?5oRuKSPp%ow0߆P!ٟ͟$]е;`[|]q?f^sBFOR"ech!|gɖ67[!D3'ɾ7Ľ Xc6,4^hҷT@%PJ)!͔$ 4r뻿B' zR-E1޼'BG}=(€'%|_ WR*@!D3&ɾ~BV$Y^2 !+A!D$ɾ~?94n}GLqlB!Q렔 23ʴp+7@5!h$}9鉽ru㽢!*A!D*R2Tz~cxaz}MR#$C!D ⒽRʢLTJմV`RMJ,L??QqlB!E%{}Rʯڬ )>UJ >z&_p!6:$K` szD.",$6:* gW};ިZpBR-S< v+[+\)Sv:) t) F8y']-łr""fr;H8N~hL;@QL)a])D@>Zqw.N6b-*_{ (rWS^S'*-E=$$lyarH)up p 30(SJ>Z;,X!DѢzRjF7Q@:KR!h` Bk=W@8_'m>A=cA̍7 S4Fk}_ ̮QJ G'#`h_1NP J }!}`K(]UJ={MGJZϕRsuMMq u u&%KH[MVql<99jm$qqܽ~=,\vرtj>L @eVݡdTPJ!uʃId8?/ hX 1CJ?EKAu9ƍv5SGpvk'qܘ1|fdPp=|U^NEz:k6r ݻI7C~2v\~/SXKٵt){^xESn@U·v8?z2 =A"htL{ J)+BVGyZ(BNR:`6( &@.+,/G?0goLB^^ӉҼSPnnZju|J5}Z5 {6𮀇6~! ;0euZ}JwI @`1"`|eo,B`Ik|y{;Z% (cxx w W欄bx7_H?9̈́!^w e@ pgo8c u=D KOa^@U h$ٟu p)PApݰ×FI'xewCA(P LZjr}3q`isDW>xl)d[dtQ'4Jv0qHZʳ34]e7!D 4h!= C`^Nua( zvtr0Dk}.rERJ]WNi0(ӛk+*;OjC4F)M.״NӤNQJn:)c!WNN C DŽߓ~Rj4ZdJmcG&ƙt5*^PJk3͎H:T0L/ <).y*w^:}@cڜYyaƝaP[mYW&;a`@+%o/樂Z+7j 6l!+WedeQusݾ$J*GDK^'[!诵VϊJfz?&j`,`?d ?DS ɾa\dI|FO{_̈5RJZkGyaUsΝ$M2J)*ۺxpzQݟՙqc;Fe@]J R!VTjx}RҌ֥bw}?Ѥ 21ђe>.exԗx4bj.EwsfC ?gm_[% pMBf|9Ygw[RBIT^7=xq=﹇z<B(~f@)u FJc1I0%M%'x5kH# 8YYZYkwxl: I!& (^ްWX!"zE^OET"*  Uz ! %'{~l 1 lyٙ3CwΙ3vE`_fQioՀ31TX7a[{0T#!N-~@kl[~=4!p_u] Pd>m!`6S 9 :u8vQ!c&ǔR &?s C /m5|Crvx- #1:mQJ]^`/3qiZ_qRjhOŘ =o3_O8~6vJOГ77HWL !JANGয়شjR|`kۯ!-J<-k/jqy{&L xSMk~ SJM^ҍo#'^@kJ Ũ P19~! =U: jٯ^M˅iߟGoYgX_uW l+.lSJe~H) ,zk. B߆îE m*H¤^SJ}lWiZ:#tss) ~zUNH`mٰas?4I_~F J'Kx IDAT'ilRBl#+,HCf9@OpäھwzABlY)WkB_~Eւ{zVx56ҵk9O7߰曉7qz*: ˅{f.]!w$YcXN'NԌ]zcNUd=vkEa;+v;!*QJZ> n,_pϞEd|l?r.zdj/_=zzxXn\]^ vJZ$k"V67ܳÆ򡇸4$" _}-83ЃL,R5t~OWB ?c 0cH^JU7wIh /B G:RiFvfzJa~mo.Zϵ8Nd"!|3 pp,bZK0z l,/YqgY̩JW3 BwcsaSX{ qN8QO6h S7P|iه;pρ B3@ XqGm7(kOp5 JP"cФϥ+,8U1!'u6KwVN93jϷê;Ͳ^<3셨o`~|t-K~0ȋx|&uo\ftMyXثJw4f#GAx{!ֺ  R?΅[Pn)LRjR+;x;rVAW\ MDk}c\L( `ip>v73YkA)WJ[MV@RJkUm+hm,:5RCf;T Hiw,g{Assi_ PJRsI*z(Ÿ? HWJnN[Kp]rs~:eKƥD;4z4lݻұ#AuݟZe;3(ꃌ'D=ZRJ .~pMӊ(x`,$wPܪ{JaLG :_)cn5ԧ3(c3=1ZgjW;8ZTDqh(!ò^b{L Ч]22Ȏ {3s&)tJZuN~-_̏u;69 ~NjBX@k >4 ➀͉aWˆa(3HQլl/Oȏx #]йZjW^IK/e۶-?%按7C6%ukhۖ>:npdfRв%уw=~ݻR~.,oR"f[R_b=bt FG6Cli[{=ncukL+N\n5TZ|'Se'$~R/'`){8>LoBcfCZ gOB­5n))8@5<8xxC) BXLk>XFÆFz 2 <dC( ((h 1Pڤf7d{~}Ee[ZW*ޫk0?Zg(N0*ah~aa(lw:"h '$,|g,~,.,2ۍsN<)),";u}=wu/"^?F)-0~\H5: , 9^~O)[1&RLJ<#`hfM߰."fC!ChCf2\_ϒmϸJmZ5f`/Zfz}&ƣX1[y@zX#XCk=M)_kj= |Q+u9kg쎠+lv{sdh 9[?W]E7ߐKдi Bu+Gá?k. ZxQ"% !cGS#pà ڶ' \Yֽ4 !ZoPJ:'51tyPBᇤf/ce`9O|S1y'  %^!@m|$ }UkZ˲k¢m䷬`;/2ȬwDxsֻo"4²I&DfAh!6((6 xn/HjBрiRSb !j@Lk%7>0[1C)~)@,|m R͔S,)71kI+;!`/B4rBFNBIB!9 B!D#'^!h$ !{!`/B4rBFNBD8Ȝ T́ YkVM!D%އRm1敾sTJ6VP!{/SJE+1擮 ;g RZ_U!_{/QJwOb4՛BFEС:A\)`i Hl Ev>JBN(Ӂ d(Vs?VX JlMswW 0 #?ӃBH? J)u^y'`7\nmxO=8KcZkWB!D'ޝ T @J,^?}.,Z KBϣ~PJUU BTO PJEK5 apv~ ~;"B!D$'/4<VAK!N+< @wkT`=BJAy_m4WNɫͲcBH?J0.ߊOkKbݬwG-`_G`9KS_}8}YRQ>;x! {hv7k94 t̀ɾ>B!& upGjh Wn09A)G@!D&nB XCޣb`oд&$!h$8mСK+%0fYο !$0B)5l,]˃{UF`;3B4d26~.7^`\E9U.Y]"!/YWJݪ:O)Pg/2z[]. mw!Y J}rjƏ,R*zװ6K,,5YǖW!04f|T4 \5G)u:ՓOk\)5?fiWجl,׬'ۀր/BQ[?g)UZ׬v Lj]r%؏A90p@f$%AѣLT OgNXv-9IIzVɍ7LSQat˭ 1lE+ Hi,5`^#= \WM<`>xXH-#F2õs'ɀ\.R e(6kfٳݤqm55+Nu]{~ϔR1.8@KJl`: !gWa9iZcjJJubtNk]b]/;"v^VFYp0Th %SW ̡>`cͲedxEָPlZm6̿[[1WAf )jGѸ:I)u< LZ/O)f.nև*mϩ: t6~[k]X{~/&k.|pN:ȇ%оڗ@@J0$/aEkb Jw+u:B4`^VJy 6zCWth "&r>~ȭSp02{r\wͲD:ffȺul ֻ7]dُRhU==`yPJb\bT4p,qN>pa | _v`AET`Rj: !X/͚}TVJ] X2US^lJ q^}5} OL=p=z?\wjR֫}@MncM|x+.?NeZ߽6TGuGkK"ğUk wN3)sa!]ǠpBRS9zy>>Ko%Ny+^4b0‰hWUQxy NV*Zo>FjuL:hB<%Ve^)5xXj+|Ӝ0~$!;'5{>r5WL5= ?@.b ?ݍ1wJPr@k30Xycy ޻,ZkiSJi0wSH疛 廣B upXC]9]?rʼnRJ) ZC. 7&ŻE)Uq!D#$1Z3`Vz^k!ۗW@\ q^ !$(~3|K~g[A+bX 7%cy..G=VJIN!1 Ak]\3\?],8 \,v` ,WLɣ*O%hD$'A_p0<}ZrD]fI=QyYaJ>9BI?Z߀ P S?e.p Fބw("s way`*ݶ]L!&iaL)PXh2.7^iw%y~^\+NE@фN,O_Uj^ }7Aa5 'Ak}c܏59_`9m(ZvJ˔R+} t.Z|ufyG FD)ꢔJPJ+R2\_c$s8ޛRu=2;Ea3' Luy+ ~n`iPV! `z+E)RZUJ}qK5(/m0p|d7 8hZMVRcyf$UTCH.fCh5((4'7Y<ߖZ(yV։~TaU2)zG|@<\f/K9!Ch|9iPGW_i;d-!tnvdDtϞD&;(oi' >)8Y96R=c5.f$n0/FR>gyJWKs}QJ]VjϬw"Z5Z || l0=f`w2j6r qN'G2oV`L׮Y17>}톽{RP D+`  D..O^) c;97yH!Ю:C"h` C`o,i-bKo*w}fdI}|$mmT6@W}T`:Ϛ f}Rj;^Ut30c?FuVET+M>^&150h0Fj JT` A~^OK>"\ ͆rpGs`l|wR9SkB79u/b>1F=vKۍs iFZ  K)Z`/a&dB*Zy"TJy4OzF4TJ= 4jP& #øNfoAv6~Hk6o&p+ˣij ͆iZ @:h1)\d7Pu1p`Hn LUJ n1+/`/TJ^x2 xSk=b>T0p#Zb>Vk_,r|&];B}ٗU8k( ͸mM*Y!T7Ac7ܷo/<I oCaY; R\/.D}0ihR*zUwZS/VmN/7΅pז-ܗBۍp[.eͦMM4%$2qBR`L <+D`,T8cY)JHE!u F yAޓ&1d؇1ڣ//3۰G< IDATbz}Y>;k$ {S4pٳ=ag/|ib>j7Xl~+ӳ`>`/#=m,8 .K^,j>;xqv|n7 SgU13셨_o]wƒ@!nJC0&b-N9}d+Ļ-;^[c$ Q1Jc{7Sצp (C&ԓJuf K[jJ9$^zb7`pa~o9y<5۴֟17vJ0~ Œ*L cfŧJJ{ymx%:ڄt:^}6~l!yH~;g'I)fd+f\1%KȬ<aJpZ! BXHk=M)5\ !v; X oGj VD]aJ*h;0k3RU_ Viݗ3N;(hZcKπܶŔ,]ʑ,r}7ux8%TPGp pu ,#Gx )u@6mxyO}(6[jܯ`My$ Ǵ.`D8s3XEoS۷ׯ'S'fvv%*=3 l!w>B-'gZ/n¯qlǣwQJuĨw¶p9 ޼#]=7kFTvpO.Z=ۗ8YRB ( ;jʬ{aݎ}RǍ /Pm{oKh)0k<{MwU4ɾX\+N +>X>~th(~c_=?l6޾p)xOZ Ge$^!$Dc)#9ztXpG`/~Jko,}p5Kkcσ͞ZWIBv+ .;0RLsw|{›$ !ZP OMצi] cd΅EB9&J madޙz_5 `pI ?'^!BQ0qf$<x9B`u,lFk똅HBBk 0n;|1Z=NkM6{.t} 6iz0DkUx{!h@[xNr@FNgzAg.LCu{=DN)ru^=2GJd"q"9qg6:n-04 "H'99`}?H?l3`{8H DX+RYk·l*H(gHy-HD8BiUJu1~DJZ(_ZPJEX8 ) إtjZ$Nꞽ\hqJNرc˒ "~8;pCFuv!5iҤ>B ! %$$4Nc~kc0P{nl?=I\BR Tq̿= t8&$$HgXp8 &GO?eܹ o[T2!UV9oG/ ԘZw8a44i|[tr}⡇B!6p| < SzY5{Xq巁W^j 5iiih9x .<7"*6f`fuajd_ ~G)g]gC%$#B@84&U{1X ✜QFz!~) p8. ş1Q{fM6u͚5_~H! >{qLw8?68'r-~ȑaB4,$Qf&ӊxñK8zh K#$u޳ ]yw8}-,WDDD0x1cΝiޯBq:3.DCVf*d0OSȑ#-Boju24HNNfƍa fÆ $''guBa#B4T7XZPVVƦMXf k֬!==Oy}c7oN||<ۗ`Z!Յh44>sV\q=±ۛtfrQ?z( ,`1d/ E#(!!Af$()6^Ov{(:nRv:O+MuM?(Hzz:/by@!~!,"믿&11n&Ѳ>Wӳ12֭[O<-B!I`ٳKNw|]S\tx'#--#|r]OB`?sL #8t_]!BBZt:?OE}z5L2Ś !k{cѢEtzќfЭD6mz+VӳgO%lС?9sMqq1ӦM#332Ǝ7BqlnѩM6WNڍ#"1deeQTTġC(++`VO!N^kիhv (ڵ5k_4;ұc-Bx~۶mdffЦv?x. ڴ9B֯_o>2d^jB`rJ;uU&M%((Çf1bJ$cy߹s'[uB-Z0dHϛcct 5j1'&&Ƣ!X322 ksB:5yDD=j>ԳgObcc˗>l K#cw᭩馨8 =zPRY2ۋ9Zs-q5|b\< N||8n7ZORR!qq ޽%AQњ;ޅ QFgСC.Bx5JJJ k]c377'66/_',Ltٷ76qc!Ji9'nkΝŤr}-9pҴligܸh.22}ii6[j~^ۜerY8\WyVٺ|֭~61MnF̲ Xm*-֭[ILL_%%%Oy.\… ˗CCC0`fРA4mڴ>,'`Npp0%%%T5|֯ϧ[P. {iԩ)3=PTE ;))-VwMдiAAPVf|E ;Gո͚5ыl&//<6[(q CkW_}RAHvܓ븷kӢ%hq1G~Ǿ}S).ҥKٷo<1 !?{g@^8M~~:SX褸r~#l"'eeZSPpߏ)_L2ڵk->Bq,˃}˛[xז.aɒ?F>}XyD-JJJxgXnmڌ_ S@O lFAA?|Erj\f`*lι\E>R-˪s~pcQCD5L6͜oAѣǫr |3_@XXWn7SNeVc .̚5/¢ q,˃=E]D@@ش||`tqqxɾn)44?!(9=zXyD ;w.ө}\_ق9|0ӦM_1bvqÔѮ];ufq 0E+^_NQQtMV"Q |@T@zzҿz lذD+O𡈈\g*M,&GFFr5kB֮}ͦM3f ZB ,g-ojJ65:s~ᇵv WUA])%S$ 7K/3 1]vrXC%K^o+OAAAfem\JӦ,a$8gHIIaV&C |}y|C46JNJJJ[[U6 J)&NX>?>K 6== Akqqq%+Wer?BrrJPŦ|XR8`'R*P{wey/pL&dNB.Qr :JrĭrSRB{sRT U*Jl@H =Lf} !aK2|yyy߼3@fw#B!BN@bawfܰLɼ⋁3暚^{mEEpmRf^{̮]s^~e.,X(--"if/*fPTT#& ޼ P?<*TzEQ!wE2E˅:EQL`"`4 O=&L7ߤ}rr3a­$&fv먩ftEFF2o<͛8۬8ҰPUU@RT4wb^Ŵi ~L39t}ߏB hnnV4 ZFvIBBFP* uFN& 1"nV)[a/Lɾǜ9s馛Xv-6mmVm*0ntƎ8C:N ؿ+#""9s&{{6477Ju3,H/Znnn˜jeΝl߾ovZ+W:%%\rrr8q<E !6) L\@Rs)@ WQSm%,=?#'?c֭vڎc;NZAˊw{=7{7L${>U RZছb#w)XG{ 3fĠժ(//=(wݕ_v neJ>%f-TVVfQO,PV'ӄsr'Na6l؀Fa̟?Ӷ#_ ZMv@t@({nL1x $xPQ *l}$q{1***(--@(6j(NԩS8q"N'GE ę{fs'.W=.WhmE~~>_}v#!!]KaJQb%U !BOsG& !l.EQo=(! !JEwa{j&MĤIxq:YVIHH,ّjueL-tQUՉϧPQyƁ׫P^n3'~ONGI棏Q|I eevLH~8x!hZm?@nW^y>,Г7=q:6U*-ju:QQO#=i:s*\6l͛Y`d+3{:9" {FeEyXS`pWyKv !~Lajz҈Gkk+.WK2'`A2fQ\lc6݁ɤ!/DWa4Fs`M#ɓ Atb&?tO :]O3jzt&ƌyA{GΪUaѢEz~R Ⱥ{ۻޟϦWz;S;I:q"ula^xPXdLw%SnNNVwG}6F^Ig7=菫MZhzݍǣ0j:omDBzkUUc]?-fiٻw/K.(js5 = @PSS3<#/HbĔKOϣV끠eH&%EC{^ڵ\z^^3 a[вbE&NO]^/05۷wPXtG=g?L8q˅VkbҤb0LBCAf;8~8? v~ֆZÔ)oa0g}oɳ^?_駟|IF񥰕ZFQ|=ZpxhowuUˋַ*u;/(_>Lw'd;|[qi$^ [QQQLq|{tzY>S__DP&᧪[0~bnGq$%Y,|I:g2Ka'bԞbi~Ç; 큒NuV=rϢRE|wS;vyyy44I΅LRXtqߐU{uh=zbR^LDIʐkٴI|>cƌᩧ STT@Jt"#B^ oIJF;B%4b̟?[n;^!qZ-[FttYB' uIvQ 5u)J҅#I#/~ ٽ{7۶LS^f\Z=nO岣VYd iiiOtuu韘`0RHySIKd_hnnH#L҈VYl/ٳ}~HLy uⴘ%Bd/]222{AQhiiVz=FHbb?hZllGx7~\\>{mm<_GNX"˗W&n9 _m2]vETTII^}iIII~KL%OABB dee:i\}SW6.|rjN#?ouB@]]ٶ%rssyB|T  b1ԁH$J||'AJU<{h$!{}vf3!se#fssNz詥%]uhjں:_[w9 xa<0D"sA9 xa<0D"sA9 xa<0D"sA9 xa<0D"sA9 xa<0D"sA9 xa<0D"sA9 xa<0D"sA9 xa<0D u𲊺Qm])3=a40f󹈳@#Ahn9I]m~ \fN`Gﯥ@E#t?ȁh {"sA9 xa<0D"f`fٍw2fiffm$Yfqf#3bf6OdIo5IRǵf0%͐tCl]Kwsgf#f6o6'.t%-OVxI#)97\bw.9l>9Wfjs/:ދ}$iJǟH::3pSIc$%Mr=;%=*ǒ2$97o75)i]&iiq+m\$nb۶J9fefK%e vFH:9Pota()4UYf54BjIw; cmFN4Vsƅ9~=hE xg.7 ,}۟ I%=.aH$z3qpOͬnj%=蝪%%df&CIꪐ4rp~Th {&tN^!)KZIKk6Iձ,YXOHJ4bm],YI)Z#{Npg%wKQ44=kf/J97̆*8,Iι%VwIys1I2}V&49qz&v|_Iņ:if*M[9pҧԹsn-᜛;6ARu?TIwlEWcs]߄ܙxs9wsc߈ ,i] ĂE@] iY?nyed7 $i-0Eq쾇>۩MaoKafla,eϾ}Cw䜛gfWH*t"I],9W?Th+,[coY+97jsIv +54}5)J%MwΝ}=@;9gمflΓdI, QTþ)dfyNޕ̾^:34N{8|30EcN&iu}5I5#Vޗ/^r5f\R%][뜫tw6|E]H8GJZsnaNIlyْ*:d7Iڪ3K Oi^BY>_o%i21gI 3sfh~k++y5K%EKwŤg뱿hv, OgIrmi}B?bwLҶ;ܝkmK0ҦaJ 6]<36eo)j/saߐն)@0K xa<0D"sA9@[M-ݏ@ ̵#fO!HrIcI%}kĔHvb:a _xIK:CҐ}8ޖws-Pb`\/Ԗ5h~ u t46`f>IIYR߯oKѥS['UIe{T')G%tsUO&fN3oaeV[@GCkefv[$ jmJ-ҹ[3^3*=Ez0G$INO쯒qUIy[,+ݚ}̌åϵut$VbftWk"ytB龵vpyt2iSt@R]$qmЮ&j|+U?ųșlW$ ^(ݲ@:kޭVzbtrCWJ>OsMWWW+/Mq^Vﯦ_^-$J}DV0$()C2'btO,5#$IϘu߮H؂aKh. 3 )5(=tBI[N/f# )q5@!̵3,MIRf7IүJ=rbfYh-`fɒ^#g&KU\Òޞ".$ƵhGID3mSSEVnIJo/TIJR41)暙H^V#2Jzh I?oJsIRZlikXN&.t8f`fٍw2fiffm$Yfqf#D!r[Pw^}8}"bf6OdIo5Iḿf0%͐tCl]Kfffv2fg3볿anN5fK3˾ã ڬdwݥakPHWOS6gf}G~:qМ.tG$hpigT}1RsÝs]&is~WE IJ%fhs{4IKlfٹf}E/W 5kTvݚG{[;'i_B뒜{$m4fm:smrMq=ܰ|fS3{6\[if3c/iܨif63{F3%%Ŏ̎0_ٿC0,̮535nVnf13̮ک[,̎GIfv] aEskp`fwY^~cff[蜻9797O5&Y߽9nk3$(io{,u)W_*)'U |0I6=ˌCp\$.>1l .ntkl(%af$ QR$+Ox}uwǍ>te%KIg;sKk؛zX>IϸOvu`cf(ι{6jaSZZ53شY!)v-4RIE4JD~mQ,-Z'c݆ Nu›7k[^ZۍmR]ðs7H3CwhnC EU}ݮ)f圛gfWH*tCYsr,97\qꪝهKt\ ι==>04BёvTӕJ;cT敏Pͷ$Vtt sCgN9[ض,ӴIHU''+aݨQV\rI3^ԥa[j[7u^Ne;0q&@7ћo5\+Nm̸sHHH&1 ,'$l$Rt_Ɔ(a_E.St"fIQbt1YFNŊ>&I$ 1PbS&fvd /I06՛6J{s{`fc%3%ur]Emd`-]{ TWj-M8$qFA;ƙ"IsE9)6):r-iwI>VUYNxMzEϷHڝGJ:Ngfb)MZmG%K؄}D0q3:gtQMjx@wIϧȜ9Z׏JKUJ%3⋵c&ӄ?>ж9wsnCjv)isn>9wLgxC r97MҀ(s[c4%f轩q;F_W9h9^q&i[][I2Km?ٝak|H&sqVt;ιF89Z}~ s;Hc*ڵ>Hmfr)r)zK榛4vcnM޾圛 ):oOl)j/sMeێ}CvW~C,ϻ$0Kwޱz_ipg8jlsG(lٷx}v):yI?/׋ΕKzl47s]* žix, G?r},?;B*Uun uQlbzK׎V-+N/ܗ-s\3sν̖9_(C'FtER]%@ ̵_KjҤ 6Ʃ͆Wxdts[\ p-t42^5COo-|Z a8ސtMۊQҰIkC.\tKc|"'-zZ&hAιͬc+=~t֖8 p4؊Œq[ϯ|.)9#q-;v{[V]q]cf%#twt ??ҚwD*[Ks'$EzJplR" )?xG`gEttιlNJo,]T)~?_KN>:vJ05` i'C|o&TU_]isl񴼻o;|Ա8ktϝ:&"أ~/7a(e\\pN3W%tkB5sEMv5H=PFu^3Ͽvq'pk@AKu}/gL*I@HNuUYٗ՚9ߟ䲲/̺EBsk]|٭+~|CYiAC\>b钔zl{ϧf Xf.'5߯۸gN{ۖM+Si9#=s>X{?rr@\f|ε͒윟TKK2gChsvpчg K3$k{˻vgjWrIZvazP^0`>sKKR^+s.6k%/ܼ+$iv~;zUhs$I+Lt$)#ڮTR*tq[EZ{vռ:a$OrJHR3f\O;s[> aMy)oúřԵ>bWo(5eϚfN^%0"}%)5u|]vΙ>S{XrW26(Iotw! lKTwv^\oJ^dzZ^-0̜'I Cimnc㻆%iwj9d繒}Jsq>F4m@A`+L+/۞(I9ygW|r͵ krΪ-,5"kHϗi! $wN|ԩo>)۶yXI5 sm]SZ-A;͜kζ{LT~x\YuiW\\~$o@G`e9}79ꫧMܻ)??1<E COO'ud\cOԖǛY֖rsrNZWZgIwUg%}f|ZfϿlYjJnwUk|BP0_VZߒ+f  cw:wZYvIDAT>@a? $\vwY i.'lw*ʊW\YuH蔓/~B)xbHO7& ÒTVZȝ9Z'I@R|N;/3*h>c_]cFS_c>'Saa$HMI&|N8' ;'s:? Vnz'X5dp !'|O4@0K`gͯ95Х7p?o, y>ߠY+ |&g>Bm$_ΚL |C% HPMJ%)-#Z303$)X5`oN['ħ~>5XECn⤆TPG/{VUpgʂ>s3xqRVe q jj$m%96bq@\$l}-gTϊ+,Em+?l]&u3fkf 4l7>RW񔺪5nAג%)>>1s>sfNaYL"GwJQ[_/0sBv&IZ~EKuΔG!)9st׭KLJk}KݜWd፹HRR2gm}eJҖMooߔml\tZR%;^r_G I:+6wS)9͛.%3\Qg $u6|I?!$w5_U̩ԬL5UY- ZZzn}Ƌt9;/Km|=KKL0sgK I9]m}]#? 'iw5՛>|fukN\֬|"ӏU[-D.Žj^ںϸ,JM͚nXUUi3Z}F17&$4D$_ޔ~˙]7gw/4]:⬮KҺzqKn8\;qPo?Nz~ AG9͍n5K=zYݺTޭw+;wP%4ipֶl ew6mx/>X旤Gn`&0wCO-(Ҷ-hs/˙áwH^꒒R:KRuզꭁ-qe+| 8Dιz}Vvg&:jں:am&=mi9E7%6rzT vX '_)/g]s׈v0@3c%}ҩKڋ~t*Il^8g9+|UVVXUQ_]]\$SSRYj _<;m<oK]Ig^a]$҂8I̯-0Y|>o-WsA9 xa<0D"sA9 xa@֬³³w3ݬ`]~|颩v樱5UnqHںF:kΜF׸H$'=&@oMj:[K$ɒkR] мϺ7pqBq'p$Z>;u9iH _ֻߨo\$y颩p W֧誝Ï(̯//7k9qq [h#L(MLJ /[<-==3/XSUX#`[ZzNhə/MZwa|~'IK~߫.7G$mm󪤡#.D6c9c9x";JRI/gY-ua6mXTYY߹W$mݼ*nߧ貪Ҹɓ}9ZyԄ $iOu~{xHq.}z޿E,)=4C<{{EyQQߩK>oWu]y.T0wY0grcG2n>ϽC=̭G@V,>gy`KE)ʸ7_ߟ`w[6HKwUQOh:s@S\%|U'UFS&I/mwJ?GM8޼dgoUۛ6,K~>\~IJ{o=--='?7.K?𠒆#FW"}}9iYٝjvX#Iq^}GnX8URq'5|ܵ_ŪӇ8li}ަmF];7Ia|.5-;WӊF9`ovR~޿{r/x۳..6I29s1115Խ򩟼صn@7|#Ȭ/U[~]ucȃwxX -]tFvMu_rޞj?҂-W&JT֭]ٻ I{XU_8]ֳ+z ._xzvcz,0`ʶ' GHĶm]ݥ/$I<[/>豇gPMI ;p%ϼ/>w9Sm뒯7ϮA͓ '4q¹pqg@ ~}`͑^?GX:3OQ%:PFtbQ}Y|iɶ䔌gr^<Q_WWQd| =tKۺ]I 'KLLM5ާ,0oY9]r̴#.k^m]%3" rhYk++7.O8d|$9h'Qu#Eg{t?֮^׸UgnX$%7[ݰQǖ}5"?gƤ.Wgt nL;`le$>>꘲lX(9!)5ߩW$m[0grfZzNa/[<=} -vT^5qsm] a͂0w`{u?L~{n^+~Ҷ af0K20鍿|n =M{? 0`׶u f"Ww`o˦I߶ښJ-3#oc9wm7@K"PCz^!I.L~G}۶͟Wm(MѭJ&}Ooa3ݬHK UW0kJeV2u'lX8>XKN-q֐Gft C&IK|U__+tС%Djk*sf]^V7p>FW\C}ַzŗ5Օ韽k= 7[l1Ts_|j1Ǘ,YYFYiAq'^5emۼ:[UW}SygUuگz츓nULZt9gn~)m[9-CТ#9pڧ/-[<-{'|+KO :{!UsgSW[wԊ-WC5+K胾SRT1/ӹ&S}It5BVmmr}ֿfts+^n=֣}<Gs~$=R .ңЊ:_`߀JNy/*Y9]kof^t_"IK~胿ٷؒ`]ߺKA|Hɲ%ӳN8-˖L4t|S8Kgd 4aߒ-I?uj\\BD~?GLNqN_u]+]ۿǯ:ᤉ[KJN ?ez$֣UsfNosoA%g%V[[I$l=lsH_ +/+xu'VX~u^~Ϻ^yϡ{?i$=5ˊR 96)>9e^<;v3λfMþ,irMaՏ?t " CV[SWT1!7G[ _U#*>z_o1fBq絫e|>Пs.NsHf̜z5 2¡zsm/X߳nUi'u m zXez^A:3l{xu ..2Ws{xuþ)ҶsN}*2ϭsE32NBbr痋|=Kffvіs>4;j7w6& ӏaY\aMrJFwrꊸ}vPdYN$-]4rC"JϟW/W}64vYc2:N/};~܀WWl[|ío^}FT%$i9FWg{E#2r%6{y׬}WڶumJo s;Nti[q* Z>;uȰ#<"9%=,I۶Nu9dǰ-W&FacPMúmn^4tđe@ x 7$gqTYJJn߼qyRM #FWq丸H.}k%¿v!Ï,s?<[dz+#Z:H$b| l舣֯]ܭԬ$nLXӌ=ްvaaG7>{k"Hsh9{Aں#sA9 xa<0D"sA9 xa<0D"sA9 xa<0D"sA9 xa<0D"sA9 xa<0D"sA9 xa<0D"sA9 xa<^NIENDB`libvips-8.15.1/doc/images/Vips-smp.png000066400000000000000000000261431454007373500175320ustar00rootroot00000000000000PNG  IHDR IDATx{XUu{"j&)y PA9xijjy*W3IdjYd6fYvlP<+Pp~ **Y{~]ו{)}e[a*q8Pλ = ԯEܧ:A= ԏG7$P øhXrO"(9u== dH= ~tH:y/J.A,s^(''e`eZZL!Czll”pƺtHR0׬}JP+Ngw'VW{]p !)W9rZGUqq/UBR"(5k4|x0pJYT˩S%0a֯ɽխ[ G|pYןаaԠCɑ I%Ξ-{mGejԨEE]kHTi߾SISf -%ɛ4th||퀠T-+BJG2$I?pTCRPPS͝ۏ;J"L٢:1cz曯6{$BPؑ_LShh3-XFfqJRCҬY_:GX%ѣe=g8_AAMɣ0W_ԫU5vBQ [wB&ݢk۰![ÆOYO+!Y3(Ξ-̙Zpbbnw1{$DPJ11kմi-XnlH^䓽4i{ wO+`Ezڷ@Gaax,.imݺ.ĎXQSoE_~yPS,/cGFLSpJI]J2wkz普J"ǎTPpz<% [@>=%x&WB-у Ď<ƍ>| Ђ Qr:K5kVRRhtU45nHjEOJ KSB&=hx=[ckϞSzcYOkVԟ0($EENME_|qP/SJO'"(;wk4kהVGP@=*-5[ᄏ]O?UOO#(;vZtdv0{$T@=(i޽fKHzvFgfq߬nPC(M{ZϞ-i%$;Jp1T￿C ֋/Ѐm u@P eehԨ45j#u5z;\O)!ay$LÇחnYA uWck>6SAg%|uf1 R-[6RRRB҂Q@-;[n&%Ю]e=m4тjтV+#(JK }͘MO=E?!fz@P@5?~F딗W>뮣.x.cժC6lv М9} IaG Q7)" :;bG Uؼ9GÇRIIRRIcG 8={wJف5j6QRRnJ_'nil-?u|έ)a m1 J4~$!*`;=˖e{ӊK"(e=^D))QJPZjh=>}.oC ^`yǏ/Snn`*P}<Ҿs=vB5Ǝ%>}V'n?oܤ=C`9[9TJJ!:aG 2R͙S /tw=,` :iKq 륦C}[kI;J^+?XƭWFFMU;SAcG +?5t*5opvJqSSM5ztn#J^cϞ92MZk( #(xRC}wJO+A 8QӚ]ٳ*$#fx6lÛkB`G >}VzQի#Q([jU*(8 " I%tjܝJL,izZJ;tPFph|zZY8z`e˲ߨo֚1VxvLqdƏߠ[۷멠gbG ޥ6kP Ix4vMIIYO맟KO+<A ^sR11ij_ Dꪫ [Z(SӦmoC0{,Jnsť3zjߞ :x}Wڱc3}! ŎK9sV wGk7ލ%)iF'O(%%%PgNgwiܝz^zZa%:9|PFaJJk+Z,=7ӧ}! KbG {Zlɥǎ@]{\ÆRӦ IH)))ܹԳgOXZNN( 0@999nyJJz-bb"Ը1RjҥK+//O#G԰a**,,L Wll[`̓z "կe氏jebbBBB#ámV\KMMճ>&M(::Zn@[(Sw5yroa;5:7q8ʊrʊ߯`IRHH\8"3dg).nVy P~~O_%qkذ w5k^cƌx]vڻw:vLUQyZa xo=qnԍ7RAT{GOرcӄ t 7T\4hUXX <-pmr(/X))$j({衈eggO>JJJ!CE۷.\aYyvvivfx$0 sp8n >\^Z+ЫR6M pK*楘Z~A3`W˗gQޭ{}I"lԩmڔ.]Z=Q6n RJN$$j`G @IS3flK7k %`q{RLL`AZ E25u=DgCPS%`A99Ezt:TYnWhfx-,f#:tGHuĎ"&MڬUk_覛6{$Q}{x`IH.ĎbNgvkΜnBP^BN%%JL짶m܁W }=7斚9! ;J:U_ߠ r4eJouJn(/^ڰ# I<ٳz5EF '`ȑijޜV,%LMEKg BO+`0=jաtx WѰatuM؏<;J95yf}!K7L)Jdy92M͔ @%%`Tɻ;Uw#A ԓŒuiVEEN͝OAATAyHUW5Ұaz0LJ*d'cL@M,FUdu%@Pn~%F99Ej"sB%FcƤ{ FB.< 'UVVƏQ x+pMYG=:p1TFGqA ;C p Ж-9JNޭT ș3gV/][71{.BP.Y_\wd(\W##JI4{.FPu[u;J?bu4fzsOnjG%P|WQ G@-Ѿ;JRZw (Z3g6}^ں5WII4>;p5pYF`#%P&mQu=v+PMW7}tӋf8za̘6fw!(Xd;٣0G%de(!a;.}Gh쌠.vAx8zukͣ};JgΜULL%pI(Hq ۢ}@uT޾_7w\A [<}gРvfq ᇣZRRhpy%l%7H/NcR<^a+cǮ>t>sJ>^a (>5ǎt꥗H#(aysC=Qx!^ai۶*1qhP;|e9k}@ɓ7c+5x0;jWX?_ӾJXNy+}@q 7n h[nie(,,]OwSOѾ58zekGbA}!;܇%Rnnbc).EP+M"(uRSӾ=Jx 4q&wv0A KhP8zWؾ}g޼~W|Ɓ+kY6m=!(L٢f0ErѢE޽5j޽{kݺurrr4p@kq˰,k9٣jeJJÇkСbccl+66-^5ztYN@@#`SIa5M'O5\BIR|ruQ;v=ܣ]vUC5 ?eFzvjg钥y)ֿp{ _+88XZHe;v駻= qP{Zd&O\YTT?*ĉ4v/h`e||N˗+ (ڵ޽{%I \Ra\(W}sgwGRvucƌќ9sW_骫:ڠAB%$$h7o.0]y66(ѕpѣ%IW_}ukO4dhB}… 9;,j\};u~VTqɝ奎Hb W*oyٮ0]9 SlQW藿Qؘ`cH):LW޾i(pS+6v^~霠j Ӹqu[[= T-Ȋ{o}_;w멧= r&6Bw8tPoIo}V9q&}*TGA_OT<̃z[N#:= \g^Wy3giLzSTȑimiJԛ*k߹>wx^Q/֬9/}aG +kACPƏ_kumט= Gpe˲= A 9|Po^WY^Z}w#(IIu?ލ0܎y=;C}\;h` %\j- B;W̚5vpbƮ}p7ִ^Qg˖ei۶<%'ӾzJ ;WZy΃ҾJe;?L cG?C6>áwyh`m%jЯl(vF֬9о6Qh`G%6_kh`+Z>w2BLyHJ-|miK!(mrH[ (m5;K (m"=Z]#(m$-WFH6pane I~š= X;J/f1g룏x;J/RTԸqP&|"sPԯ_kG`[%=Z QVQzGպuG[!(eY)fѫ/V|&߬ y=ԩ[տkuh(`K(=ƍZ-=`v|+lPɻռ jg(`kzÇ 5kVfk(`{(=olҐ!QJsgy$Q"(=g=ԨDPzwݮ=ջw+Gy<Ν}(GTŽ;v|Z7{@%JQ|9998p5`tH[dJJJ= <J0dFbccl+66eZ]NNzkFAlӸ3sjj}Y5iDJMMuŇͺ u`(*a+80$$DYYYv\kД)[4`@uQ.ŽEOPzÎΞ-رsԬ\eDD,$EGwWLje-$%$l֧0qpZ C}0a5TUHV;\AYC;l]FH5YO>ٹ$Xo6m+_QրY 6*:쀠Ey8٣ ۢj-Ҍ4}mfG(wi6 kn(zĎvӊ+QVÄ Q+(7X]٣L@P^™3gY/]Qݩ.]tMW= $WJI_}P'N 탲ȩ7AqcdHLܩΝt.dy.ԼyD+jQNE}{mK+j ʵkkݺz\gˠt:K5aF=LW\dˠ\x4ijk(gT~~M۪߾U>>x8(gخkչ3}˳Վr׮|-[EsTvoIsZP= ʕ+2٣2"b""W><}ljDD,[nTaaWwV&NF !YnC&Lv ʪB:W\P_kTrA)U$6,NU+ڲdg[֘10{\Pfe`;zߤ?Zjl( TPYsL۷顇:= ",NgxcQ#_Xe* O5{XabMMӦj(Ďrƌ튌V:= b~GgI}~-Zt٣,w'nң+0٣,ȫ++@C7{EymP8曛s԰!oeJmT}6{y<%I-Z< jGYS훙8 &(+^"(/%"(0Wez@]yEPJvw&M(::Z%A~KBBB  0ATPP DW\q.uQQQZjU]TΞ=[p8\vi޽ر233TrʋRװzVi-vYTֺrAB%$$h%G2d;W .T-?MacNk:p&(.XeZN5AI3AauZ]:.\V8zq eV-Sw8?g5/ZHݻwWFԻwo[⚕֚Ν;O={Ԋ+*Yi咓kV[g{jk},sju3 Z]ijPZL0>ee5(99Y>|ZqJk]t>siȑ6lX5+S4e 2׭N:|M:Ur:Jrر>|x5W0Khhc0 ### 5mwk77n\s+̙3… =zTfu>|իi 4kVZaT}ZoFO?YСO?UVuJ2L ʆ ņaFqqg,P՟g1V[7h_uȈ4{0 [n\:I2JiӦ̊kVZsM41:ud׬r_9_F)a{ァ%Khf6a(??_z'x 1B}$۷0 iϞ=ҥ9GuVt:G?=[͚5K>? f?[+yĉF=Ǐjeǯ":嬲Ϊ 6ja]aFNN`8qzjҎeV[1c4g}Wꪫιf>:v4ap ׬N|:ϗǟt+ٳUXXٳg[n׬NIJJJw߭s^w:]5v ;4;6mW%*ښZӧ ðZgΜii7N###⚕Y_4''Ǹ{ ???{Fzzz5+0 gϞ_|quY$f.f.)M@z1I\cnNUuqO8ޫ8zfu== s p8.ܓ@~lp_spOpIENDB`libvips-8.15.1/doc/images/interconvert.png000066400000000000000000000664241454007373500205440ustar00rootroot00000000000000PNG  IHDRYssBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxwxTE[ ! PC-ޛ4)Rl("b{E?D_ATU@޶|dҀf3g޽ܓΙ3gQ!-n@k>Ppi@p;@ H$DbAZq.ZH$B6+0[pw64OzP+s@k 1n |!5H$Dbi*AP<D"Xb AS`ix6Vx#S |N+;ӁoE`D"H(=M/@[2B4x: |Ra?d# `=bA"H$Ƒ=* ~ SwhWPv <\ H$;Ǒ WfXXTY*x5hX< oD"HG20.`psOem#D"H$w#y\ @t[m-P>#,pI$DRG< GDI0g#iTD"H$w#K1 Nn5` EUD" b4ڊGNbs62Cm$D"-Z[ `!-&D!!$.Wkm-B!u6;8Q"p؃)dOhg0B]fшbe]=K$KXp*i-X@Tb"e`Z3:w.aèCYZ(A!t~FƁ"m3#~=rH,@BX JlRCjp  ]3 a(T6:)0Ud>2$gQ^pų1Q4mrՐAp+6&p{=JhNKN&g:ncj1<Az=U-ON#h3h6m" 03fbȦEmuCpjǤ0蜿+8 q=l%z"N1 <LGب #,J6\7 uFb\`e5-BbS\FRq/(6cc?^8^ܙw.{5ŸnQQ=Yr-Zu N> lr۷giRc})}NYçKw7Y%WɫU(-awUx{᰾MZL±#x_649ScҙGa4 M+"s$DbCagf,7y |P :wfeF,9twޡs-mۖ{ >!8SV;vSvx.GL3IX 8AtX oq.o_ahaRFtbeGh_1a_7ڙ8Z c5BJ$ ܧF#/37&"//ܫVb@' 99e ڶ&W>0Ӊ)t=P$ %]nrr :MmX[V53a>2Ry2͚7'+1C Z@:W]Kѣ$ %7b@k1ʜp=f[9 R@OumuT7}Ͻ6=P,UiʗZeq)?p;2h҄%K8Ebڦ<jhLǷnMHTʕޝV[it޳ii. n ̨F[яe +7G6P1eq퍷'sa׽O5L]voh'H,#x D,\&ܹNO'۴b>Ms׈ ~ÛoһeKԭoW?H.޶I7oZ=zh8f k !8ld1VЅ0Plxf W", #@N0b}}_XS=Iy 7Ap ėݡ3 !D0V%n gsn]hܘG2{6;^%anz nnܚ5GtS޽$Fs-bW0wǏb.C~{D \FU;(cNi6PHx!0@͛} 뱉N}s XA,{H,#,;xr!~TIŸOv4ܙbbLT{|@:*| AU"gcπ@+,vP6R,8A9u7 MUtvR)6Yd( Z<ΰB \`!X䪠p7ҡ3$[Aom!oEM)h%7Kk0)r ",&C)DUΊtEG9hjNzx͔x=©(BraO"(2PR hFjp[g׸cP- мM:'Ē8A+b :>B3S/(o< -(:]((]3^ "`2F޿`_|/DX&ΜI#Kh6"]'i{7}Z%[FWYCd*,L4bOϡz9*V+nB@0p ŋW:fvJc(1`͆eƍ$h>A¨ohrbctNH\ Td"S*\ ֔]HLJ99SzZF$kW6l7QQdxxFSҽ@2>DbC"6cát8AD'!I8B]#1PQUM #N~6ލnڧӡ>C^F!YHڕ徢yjR]H B)T M~tZ9å39n~̂\ܵ  yőYҽE 1%J~8 !011Ձ3`70n,}B[tdʊxq˦՚FCCqgNbJ187d5L> EuYj&,o L"b_MO$hz<MTt\>{rc~KNٳL:| {pi"Mނ1XĒR=D-pdDT(:5c#,Z \Vnjax3`D$ad lF-woI42/b u)ɰ0^NŢƍ&'"/CA. Q'rM *kptW~4бER¨ ''4>Dr29/ޣu&N /wD~'uN>jk:Z āptD`l fZZwš!j< lRޛ0 tZ3(APܨ62lrZg   :z77TE߻q*,QRig8D0ULp@6>jqR1̞'e ϭ:uJ 4 wVjF:]Ka@ $Qc shgCfX04p֕2Ea_q7@%,DH2a#%ٓ{!Aw '{ś7tn9sePsvN-0ZVi~4k: 'krS'6kkƄ~ŋ\wqA[ҽEz2  WGA A nhp HuLWXK+`B-`A5$( ᚶU/*F,YwgتUJL$m[Bv/sn0KqJsۄlZ`/D[02;wBF;23=m_wq0&G]<l@LWH݈@=`nO)^zDR-{'X.6Ww[*lCC0\SdU4 Xi5l,:&0`M[ǀR|`JGlG}g?RHXXgcY$'D7Dd5Iwq?_MlyiUAo[Y€ ^ZES1^Į ǀ@mEXi"D\ Dׅ88UA#xY7_{0:gb8;|kLvH$eGs?jcY$t~;:l򇡯+ -P2Xț6EZjɈl#DrgB~D ip!G6Bi]^m7 Uz}~x+q" * NdHUh \W= K$A^Ī:ۊ#c @d^~qK2F)F/TQـԅӍaƝ\ hSQ׀SNp1-tBAe~+a_j9WZ D埔Zx"rEPׂ cL 7M)fX~uAa6P-=Nto?@bh! :c-{#^p;? HH?[xxn̲q`p;!^l*; 8G,oT^A+@mZ 3{?zÖc*Ż; }&P$R4BG~H1AJ$iT,bĈI+s+_\}CĔύR%/cB!hQ&:܆g'8rݔ?rL?S`EG yL>}v|[~G:CUDM" :=)_ vC䡘 T߭2%Aq^YଇdWHWP^fBLSV&T%M ~uCp%gxg-WHj W@ىF/Ć8qpQnqU_{QPuw]r]":CPqqFT{1x-tM_D|7Ċ>DJۍ 74B)B!X' a4D!JA dD"C?RXX XD"T2 DVC0%D")w M K H$Db%S@$ւH$Db"#$DbgAāD"C,=ikAxD"T s]m-!$DR!ipE H$a xeH$(s+xGl-D"H$ pkkA*xֶD"H$KQgdD"H*s㒂xD"T*F' %/ H$Jɣaւ2^@"H$ xmPD"TZ^FwdB~D"8 XH$TTƲXSƲH$DR!P!F+.)l-D"3o)@>P p@XY6Kx{V(XG"4p)q+\_"H$B00 ؀ehY`xpTUwx+0aP\l:5"oܻ[/zגH$X4Ȁz < 'A`:h8#b k݄3,4j*YP+%_!S\u2^@"H6e 1ঃ.q-$Btp3~N'a/׀gN [1ϫ!ouuӎ)P-Ǹ*U*f9e : K$D{݂ä+ॿKf@>1_ƶxљ9 *`°: EU{`Z4ʼ[ZcJ8Q H$=P P`%!VOYGaUb?.\Qpas .jm> Y,,s(W !|txc$_"H*n4Gţ> ]xJCi a~3ЩQNQG$ + ~iֹj0{(;>SވDJہ71!D"  h(EIֿ_~0;$"V$ 1 B@_á-ZD̅% :áʎt`2^@"H,!~ҭ0܋' 7<4;%WTj'Q#,5Rv$=D"Gu2-0`(k7ALDYIy*23v7\tl3yX1"H$ @G1}' 1\έ-a h @*"Ѱط [B Ql%<>.EDHD"#6ewa`eɯ IDAT[ S7!U$4^ ‰s d!X1s3ͮ]CG-H$G3V/ NV|2DFC| p hpW!߭'!00G񦥇l-D"Td)Y@95UhvLΊB|_lAOVn܏a H$Q `ؼtfy{Դ<+P :|0"p{ $2(AOSՙz *(=sܳ4C EACNcsժfCCD"48A[$@T,4 @;n5,s=\h:j(mQXiqDBZwwfWJH$(A[2Etx/>/oy ,ZpddLv6ݼɄ~Clg#hkUmXEFtHuMղkj>>,`';9/ȫE6H$]B |k( ThFeB;s,+N,%C|z${W6? ؀F%82ߟ*y{Y1*N K HwGȼί!H$Gx":W <"U*k6lw3(:qNo<YGF2qFMH0׭tl,~^?bZ_- x&bɈ*];o }|&)KWI$X pȥh?HL8w;g< RahPˆ(2MJ;>b=DSx}Ə?FISK`QWp\'[YN G5nÇ໵Vq')Woȍ}٭5jr0ݺQ8h:wض}; ۷У{sl:2RCJ$DAF-SշM1s&_|\NK#+(_>!#̨(L_DBzTIInja;fM\Υ2⯿)҅z?? ڟelj\,b=8 6o#SډEx8BQ/sMqq){7w,]^:œi2JyIߖhpH DMs}zϋ1TR2!@c-\\O k!(v`dϜyhtzxT*nnx{NIAǭ[NL cDz-#Q)R 04|y + v=%s'!x%:-]ʮɓ0> ȫ`=:ZwxܮI3yRJ`?hkW ,>K>h Apʗc mR%9QӤ0G.]h~gAF`z;u§S'=6F`bo3j$%qkfih}f&9\Rd^jvZd'^F#x_}%.T6.cƀ9K\9)jn(X/[1))$s5lH%%q3* v.Z~|ASMq$g% x#;$_ /ʨg`l[ 衴}5x]+]^ 7 tŜr HwB$kDtGvxxN~N޷j <> -0Pi[FۉQ ̀p󓻹;笝Qt Gsr '٘9M {4ըQeeI>)mˑOr^ROMDne .Ha j_ >V;c>GɾW혺x5@_E 4. 5|ᜩC#F3KG%h-:`%xtMKia~}*ĸ,G1flxÖeW;tN{[KT *TLu SW^GXS`#H솁[GU(DX3Cux%\5-w= .oabҙw/A3 Z_j <@a7<?.gC h;- ޴}'0/ G1@ Plukl-<yLB ;KYr>(-Asx I' /Ĕvݑ-`i% ( / xeGX*U}^Bws?"^B U`>xJF--kkLv#KދXGrǀ W]"}40!HgE]XS:6ץyN5@L(DwB9=5-ؾ&`5} [Pn3[ـ nM+ Uck ?wi GFvVò6nj[O(o;l)5.CPm- ̈́,w`>%؜J@a.5wN@,b Qm'@x'CoiLZ.Zx:V#-G4@<abXO0L :`"I9gZ!0 C:X|Do0F {dW_b#B狰kiK\sƣ!ɝwĄ7+  GC+"hΰA/KVY@g!b4d8#FM؄XGõ0?hO+bL oT@!7[Bh.΅:= 4_e_2"04}s@qS:] |9# %`0h:f#v Wp \BM}.:X`s]b@ښ!鈵k 0`/cXxs*!"TtH\:'8uK \B'#{qﱤdT3byhտwf$k)/@38мs<3u%&ZK LA'`[6? 7^@za1wh4,z ZD1\6#gŮAmxͼr[gBrb1Det@ĚoSNI y9` 7\xJu ǞPUsx%;g`4ON@Z@J5'@(x-<O*j btE!*ǭځ Kj%hE\Z7S`w0jh :D\"Kv*FHex I.l-UKZ x_+yd/ӁuWTdM_`[X `8H3l>N}BOe;"G# J&o ЅV077WܡN/:P-x 7w1-@:W!vJ*KKÈ* ;;["rd,϶XAZ-P{};C賃E8ݛȫQkkg  mU{ZWK<47+r k][,^ñ "Fd3?Mo1.9a^*: MOC5ڦRm+ pi Alv+,Y'w ~GdK/qLF"2w5 27͛,ZġYW~A"ѧf 'x}XAijNB_}O?54 73[w3[|9] 9@V9QQĿ ;l!tLXn}Go0`hPGGs}\} Lt6e ;/^W 4}ط>}Y>'cߘ_^x#j5,_Ni nlɲs ukV_nǎСm[qiWH]Me2nV C !tT&KZg\V(! wm\0Pta|0ށo|D\X\x#oNMLiymJF +ÔAQ\C k=6 %ET1.bc` e{\D@b/n+Hw*EzL{ΌYٕ? Fn#4*UPoDkx &>{?4s*1T* F#ĐEYun :bmz ˗s%'N~nDD[f&::\t'c&xK]fCMeIr-%\D:wu:ǎ2ok `9 ړ'I n'~݃cb8rի9HrVǤϚ妝;GѧSrXJ=(ߨRa MIܑ#$Ltsp.=}H:wӦCi+ޢgeƀDۮW#dO a$!2cE#:>Gg>b .οtd; TAtyȷj-Dԕ%^43{6UóCed5`Vcغqq$/ r-TRI Æd4‚\TB3hբݛz.z5q>Έ鷏+k'^4z(782c0t(K"W/!_FF$Rn=qKII'eӇqijL-i T#/sa515-T/j53h`wAms0꯿iQku})2 lNPO>+APӏ6A`srBLTZyW(&`pqASm@=l!!iOg TFSb"ϨTZMKp t2t:*P??^yMWs]ϰa=8ljCYcf& D5tgMP+<:ʨѨUg7WίRaЁFtr`,Eq{{E}~5ٮ]AhzjhZT$S k•jDP-O3ŸG`D* С443RC 9 >ǐ9spٶÃ>'ٜ6ϟo++O.A˜I֮]$Ebv6+,oɅg@͚8ĐH\ EؽDUx> oVX oucoBa0C O³0\> S DMJLx8D{,\7Nn|")SV"J 2&p4cŕ8 IB?'S}{t:7s-7\ML$ƍ#c YY,`رtACƒ%lye!pF=v,AZ-Z]2`~|BM ۺU ]af~͓3`~=D ]$ܺE^tlNt oͱkHؾ1:4N6?fM3̽gd=Z&Yw i-lw1ahNFߦAh(%ahjPmFN_sׯscX[dR8W? ("úb?Qc+cָ<Ӣ$ll &M__H\]5woϙCsx9-ݻ9p!gn\Oۗ&=G)S82b.^;GI|3a<˗V. ,a`Z\waԩ'*?d#K7l >CxLLs)H=@ʕ+\/QCݬ IDATpdLF #"H cW_q ;nsgg\26C&)2`/^49iH4{d7`} "dJ;pHn).qgh7f yyM9:}:G?t)| 7agmXH_+=F *qJ!hv.0Y ހo$E3[K!l'l^fka;G1blZAͰ\ F*c2()E܉ +p j5W]՚5 eL^Ő@] 6g!2`&bȷ'Mv6>c(ZU'N\c4(h\H^=vOjBׇaIEգc֛Ba1~~l>wYoF^nOe57: R$`wS1wuHo/qy^!;Lm8n5cfy;=6cmi8^c1쑷yT!'.o &}zzm+ H)#0bzXmʿx$#)TTkh B@b0*6CzW+CH U.HH~w/$ VqNb!'H[|!bT5d2w[V ]F yuʐ}*.Yt^{hca-̐q `ju~\&E~IɂE$?Pλ+ELμq?ɞ6kĔD䟀!I ݩ0(6ϋYG@nlɭ5D&t>O{ qi<()89.L$n `DI,6޸u_T P$m1߈ 1a #Elv8oh,?FpNd.Svt]D xk '&p{|DBl}0 TyqB ƱP[3H{|PA`:*#Y Ғ|-B[ 6c6">l0ghXd!UMQhmv0dz Xdݯm5V!-l Au|>;> ;LWͅT9qC=2PR_`6m1Pp>!4k']$E ːG`IFs u(Rt 6_pT1H) 7GUd>`CCy2 TJı|my\E4x  Zr_ R5_ާ$ljȱ1&hl5` 08 =a< 힂 9~Zo 5D_c< 힆= 9ĵfPK;HTk4tr\)0U؂/R #~ ;XLm&RKmn|V^{U6V| 2y#p,Z Amxk$ܬ`X<8S0t05xj',Z!sbJ(7n3VETVU!p<%s*/ė]xPt"YH/8o#ʢgt[ʅ\{9u4D1|xT+"d3z|CBϟaB_8x/r_JFwqkYf<{݄a֟P\W? GŒ$6[T!pǑ@hxm?Jȅ?)Xe-hFn!slĻ; rM5\!-*,WSx߄6M00c`rCXF䀸vrU>ס*xo}9oo7:{ E$fUH68٘ԂW,*5~/Tm͹<Fj.@$4ͣJS(:RJ5 /\l F(؉<(ZHFMAklE,V^E+bK|7l-ȏo!+<Y-/n/| R&9_`/?/#vʝ]HjOъq *"B O(:"X_2*RT澋REBgfO.iBs0EnE4`\ " |_ˑ80TPF!tQ@kyx|CF*`JFj]4C`n@ʢ6CgI(2#Vq^myhqv.S\"V[nP\2.Ek+JB[ڞfHS܌z{**%imAhn ypv v :Ӡ(i8ҐFqn<COۊsZAץ_́ݶNQcZ"lXhxi L؍񭁅h/ش*VPB( *W@UE/haa@aG-RP \#f:H@o}sH_c03Q[jpzց,jX2Rl( Y˾@1"<$wے H^|Ȭ8.Iw16WW=V?̙Ql$ /oߒ F?ɓ\Vǎ4mswařF:pWclIu 9'Zj l#(Ύ+TYO73`1"\5V$OB>X| pxڻԨU#"H0֮׬adTanl읮ҥq߻'laםä:Eqv91@˰WxZ!ky+tѣٚLڐ!7 0B.xj D!C{x~nJoͥ(g!q@Yy#%cpfcBm! .-~ F^N)a/9 @,KN&H<*Wԩ44PSRH#YѫBpEQ{,Hxxs]%w`s6hVUf袑G3ɀ;,eٳ<0_r :r0z4?FF``GD/\1),j8*>?CBH+,(M?Ht@+œM@[h6}gkaf|SxR+ϭ(L.?D!(7Anufz԰ʷW_egCvYn@E)V8B0(n0uV&xoF_$(vQ:_.5Fæp4ԐuAQ;ę\{Ͱ{`~+*P,2~zBH8.xq`=\(PJ]8Yjڡ#Bh,o^@b)x)8ۯ'3 H`$ࢍSq A2>=$ش͈0n$F J.]J:@jHǎ1hXںIݻk9I*œKHl|0tw6VhxАkh6)TQg,@My\,T>Q#Lj„٤ @t%ukݺqd9Ge*7HU͗`G;p/-&7YÑ H RK`1<1(N3XHWlbiݼ)ф^\BU\^ϖ-3u*nݺҥl]2@pn; 8 (l")Fǹ2E9%M%\-0!! 255}(ڵXzTm&``(D:aE VSNyA' 8^ Ҩ?PPnp\lŅ4WtlKԟonn4?xH+5`[F ³@w@[ OyjxP"=WQGѦ/ 0̣'OrZ5 ᮱iQiivjIE@B-H&݁ː Bpw8X|]wgZC! LnS-Hv'R`>RpKQC}̟<(&GO>>ի٫#"۾efȑTMp E_@2ĕ_ƟAqw?x%4} *̂/GCt  O@#$aqܒp\EQg 4ajK>s'ϝ#woV u&Ofɓ9r 7jD?I8X%V |whR R-5beb>X5J16 0 sm(yg<&KQ nguCx)8d-|Hf$(, 09 Xaèv ?Hzڵ=z*Qen-]ʉ fфQ%1۹8kRS-Z *Ŗ@_$rӵ$#$U˚k -*b8B0paO@YSf<\+cakihC,+ p 8n>N.^4䈳(sﲵ@wu5lKi C H}GQp$ 8 l-ݴ[ U)~t>@ ! 85, u 8rP PlφZ 6 sPe@)Z#eH>oy'R(9A:\rlD!_mU[cRAR#O_CFб8:Τ'oZ s6TׅW_@zR{^X >9c&uC( bvTD{@\m6qi(=DrLRQ2W@B@,R\O O8Bp?R* BmK );3 71V Cj+b1H4Bփd)`OƊߑ"R'8n␜[5{ 8қYi+m_,3Ź8|dj"|)Rx&a!M*j0Ce#-bPYv_qVSfՄI [&Y*S D2f# N6ˇ /Y.`Tn%–ʈe5T H-]#`EYhqShp/HHd(# ,BjDRw#6H@Hg$VWǃWAҋ8C:Ť,z܆֫ߠw30wԒW1e$r~xZ^EQ,( ^B|%[`Ax0*l `]+8R< Hqӊ(֥T@;l( @J4PqB`RlwU+L$ŀO $M;MF~\" [8EQr% E`ïPJA6]c&%qն(Jgo$*gRkq HF-(@{w~Wՠl,֎O~qh8ݑ[YE)('`%C]`M}sQp(?v7x*PbEJ:;GpwmSiSj NHc8};,;oI;VE)($K;y_F>pkH46mG̃rϠA|O2z0ĉ4R{٢Ḙ8'R T!P1ByP \\Hsq!-m)ٸ1D?|za WlуfÆQ? HhC њ(AEQo7$f A:??}}n*a( _~ɩ4RN4Y,J-(∜"m<,[FgÆ DO~Z2l $ptv|p!Έe([Yr"ɴF \!).uQQ$Ⱥysj6lY_p$v>(EGf ASY0Tc,n+?ڐmDEEӧ#14g,ZG3YgydXPVYw:`+jpQ1(Uc#-mr7hb\xH%ROr |Q<-_JӦ/8ܐ"J(B8ze/J R]lÏ\\mGKL\%!p˴y,`_%{!>SlҮzTr6XI!X ;|$n!BpG(=b~7F:S`0QL7yh}ݐ=ٜo>C,$CEOw`il[ 3۷hͶ5Gx;Ͷ >Og!'{20X.hވ5`?E3< Xb|-LeOS,VkRRVE)$L77@{j}!7M{HBr7dqPh˚ma|1l7y0}{!ɡL0LD1hg|gHO5f U8h1f? ˌU'6e (R0 c`%+A!XŐqpj3(I!x+߾90ym&;|4kÝu1]Dq菤W4!JBfB}>3[wx}8lq78EUDYq3d*>QdyEQ&xMޞcZ`seTk$}{E)D\_pħ'3-i8Tf9iIM  ULu}7@yfl{(F{DLIDHb[Yįl6#$!֊NXN:-[JL$Ē(JOX~󶂫`x[gx-H8@[$mo fmtǙ<^Cײ(w5!#/FnlQ=ϴmmjN 2o b9 B "h(EIa(>z`U & 6Km @3_ 1DfqgY+~0/+P :Y>~@Hρ >:cy-$e=+ GQ%$@6vQnas.!kK%n{`74C 1@ߦE!Y&w Q@C6 .C3;rc?o|>G_csA˫ :!{ YC:!6$?9 y#㜱rQգy>viȨ(JX*B\) n!+g[A'p](o(Da.@nx_5ؖH'E0O*  ;+N!Vţ9XPBRFLSQ[s[AˆB Kq[ ֔:f*C͍EqVaӇ~WI;HV#TUEqv"Mjf ۡ!uFgћnC%.nCyIU.((3KAnP*ʟI.Y쟌;k/(B2* GpD gn䂔;+bU 20A(ЧeQphLA2g5n!i/r5LQv@~>HfAO0ҡRb"R#! ZF 5Y,"DOG('XJrC % dzSQѪ3D~@.HJ>RxP}Zu됪%̶#=111膔5 DrAn9N46R(7F>EQEqX&!*8lm#Okh_9\!ʎƈFd݊YڇXN!A 0]A9@F12o`mbhblϬLD 5^EQ)c1o,?V&ۈD!H3k'2"M\G/8O AgBT` BQEQK$!47F~2w:t9ma{v'7{`r$ MLtBr@_hjl((MD! y]t|iKl"}ɈȊSba)n)2D, OFLMDdɴ>76[~(bx푎1H`B:Ura`!oBL/ofl @4G2Lq{hAF7{Mʊ(bW#7ͷ߁Ǹ3 ?FR{jO!mC#k#HH{ 8#ĩH ]i^̐sĢLF](.Jąp5`H 㬞ʽ%c7$z4jfl?T5_QLu &dD lr'D1g]E Z8X7 BZ*oCk+(JF&(Xk((?`(IENDB`libvips-8.15.1/doc/images/interconvert.svg000066400000000000000000000566021454007373500205540ustar00rootroot00000000000000 image/svg+xml Lab XYZ LCh scRGB Yxy UCS LabQ LabS ICC Any device withan ICC profile sRGB HSV libvips-8.15.1/doc/images/owl.jpg000066400000000000000000000510041454007373500166030ustar00rootroot00000000000000 ExifII*2&i:@2011:03:03 02:17:20j JFIFC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((i" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?䄔%RH_8|٠BOJr5=BբSP+z W./-m?.Mpŏ#zoj,FS3>R5QZ\zGi$\㞜z|1{e yly@jZ\[rfl :]'cZQ>أ*sۓj-h E,q[zX×}z ǯY{+RN.|QSQD#R)TOFbx$JPv3)j˧4>+E2lSqQ*Ur< H֬"VRHbkkšbUd~p3 t[@XӠVԮ]70bӒOaZu4)Y:by5y49%e!Xtskj}+|YRڗƷ#oJK|N'5v:rYF9$1YfUlRۉǢ{W<_gG,6ڷ1 !R|mkգx/ͷ{ETArٽگQȂC    ' .)10.)-,3:J>36F7,-@WAFLNRSR2>ZaZP`JQROC&&O5-5OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOX";!1Aa"Qq2B#3Rb$rc"!1A"Qqa ?YBNǠRWlJӴ{\-4^!Y ?tQ! )YIPV";$ "SIP]z}_B7uBB?k4T>QHMJ%T`\E#nV%]St0[Z)?tr0$Ri`UI4dRdn7?|Z/duO#`)"MP&N]* *zJ*T*ߒZ;JҽWjm NȵpuE{!0Z9?;I BBAB>&#0KWB>RLB(=Wtd([T@n#N t>YQ4K4$Piv)P@S0BB$ T#r[M * (B llF_$ZJBVCMJbR4Siv4!\]yKئɡT$Kd @/$T ґӒi% >h@YQFE!KI:YSBPB~`HE cɄPdM9uI2)1 $P!!W!P'hER?!]L ך4# {(uJL7;@ӴZ˺VAV'tJoh) /nHBVB "h{nH$!@SH]vBhPJ=ӭ@#PsY &LrRtOBQI4#i~ɠt%]0 엺 `?dB`\SIT$#d+hO$@B(EGʡ! ע`p?t! #iB=P-!hj:sG`}M 'NiVJ"Zi{"$EJЁi^J~BRTBP$ЊQBe tL a=L hB Z-w ZCӪE0D@򺣉o8 $c+8yjHGRvT| OfS ţdFhsC;-t7I+@s N_$nh z/q, Vh\й~C׋ |s9.>Gunk?ZְoB[DE&$@$_t#4B?t*#AH4rI?(#y!+GʠB^L飢TIEq8 j@^A'x#Ӳ&0荓g/4د.ønDka~<`\*40NS^)dHdpM r:fFos̒w;sr8u]7DlĆMZ ڬy~:@$v]5IELas0ib呌V˿X`ڡji^MMf,QpeF~V,;0Hd>R#] $*_B! TEZa tuBU' W)U#`HR:B:n}PP 6(h |'%r|=Ǣ-$J eBJ Ѝ{!?).Rj򏵧E*U`,Y"#o[Lw ٳk3e5,9r7  O-n4{uks3"\KWU3.3)# ai\^%}''5Ka"B74^ظ m %/ 1,H%׽9Ұ35jeYQi|1a5yDm?tp":wAlz!p(Oʅ/㥛 Yl$w/a\Y)"YKESZ*|ZCw痫‡#Coe?DpG'+$7^dP=;/ܜ)oBz.Y+gn;uVBcu88lV/,.󵻹~'rUɗ)czuzXkEG,sq _Lgk+b@`A$jjgNя71@O`R@sAGih !9jUGRL ?t#M@&NR4R$oO3$mۜZ!6-P\p0M_]~1kc#ce7$@X,, Fq{԰ub`Yp3z~V"cZ7^Gxyh6}V3%1GE˕?v #<sur ^#!xGf49 7 d!oOOPs<&::͋c~vFF26lHYR°vd<4Yȟږ-[ ϋ.ɇ` Ȃ+&F`riuM\6zE?.u7[cu|'#''%;n*.W xk׮\5t.X#.y"uϛ:I4"W|9ohPO×W[^d|v6s3",#CIM&He'OcWے\oq)#`;;Ƨ˅c1V7o].Tֶ= \;G3nYc>:ǩ/M#29`/m %tatϖ<1w \yZd$nh"}RW5j$Is!sfSYOZb-$5L5s(X$4mpkp㚄dWuXM'[HD*WBUvHJ%[[J>*BU%V4Кշ$:PJ]RDs*Nu5j$R]thN4JGثI&+#*#deP%TA)'HS['JZ Mf4 RNE#oDm@ep1Ӳi@|~KCt9n17z~Zjpl^f>r dc\g a89ў32H~D'@R61y![BߏbcZwt^Ֆ bx4^ָw`{~;L/KEjy;5ɝA\j5ÓW'4찖K5c9N/^|B=|m#@[Z#%};s cHAeywJTE!tr9c`Fާ93cCkZ냑.V0U04E\AcwlL4M6[O^3'-ycdqd51jUEf9r1aU &O? ث"r6J CKh\?ڵ<`J$-O07BޓN?tru5U+x1kf}֋2&l{2A(Yj|r.&}-4MFGs"dS'J؍cDNJR1 ]<֖lmakfp_$nMíJ)>Ys*RU[Ut*I:MV*RhК%*VBJJ~R ]}):IgB*--*BR#t )*iUJ):>HIE"A(%[sMD%[*%I&[%J4M4B:L4*N('J(U):RVa55SK~"&dL 1^=Wo) d:äp \W|KLimy[t{uƕ]#ɠ ?EX,!>yi;bF܁+_]73H{MҲHR)iE3\dޖlSl _^!L!Ŭ ]PasýlZڕĂώ%ۛS+Vh>c0ZmZnbXYg&V1/hSH浸3Hh1E"X/H-N8̺G+lEl 5U'̐[HViجi--q|O=mV6d'bhɇKZc?N,oW8y(h1ߐVG7^hVrHsRY: _zWJ4E,m{?rkLF7FkV\i<ls}WI{x,B%`FN,5$߲궠 <+{t(.p8 p˟hi%d$&TutJ%IRTWIRE*$JM!Unё*U$T"IRj%*UWӚT!M+%I]Ti?tWuU\H*UӢUSDT쮢JzMlUHQ5 t{&I6NE*NWe@"RRiT%:'H]H8\Li#?]0Ѯmq}pց4OtZ vmǑޖ fKih5'LPoO𺺳dd9"Ic0x~w+Z O{LjRs|akx.s}I6s+6CG-_Z,$ 3&+OSWӆ]gXrgw|-; Nr|gs\[}7'm h  ݹ>m_4cr.OO=#WP:;(IK zid)cFǛO$;DJIs rVaO9cBzZdtҞ'3 R\!8ֿ,~h Htt$)W.iC[eP$!8m|hㅎFl[rKo1+(?'䆒{%MvChs_cN\`%sLp56s_eO4ɷ+(] X?ӓ֟No=hp5eb: i+6,.deёuΓPkKGRWy/i?c5k4MVln<+916< ר+G"<ߞ0/`v> /p'(1ުY\9Z(k{h w#r݊ZÅnՍ4n6X(j6!p?2!uIJ!A)őkևN UyRu՛d&`n-L\-$ Ü~3M-F(e!o;̯ %@4"k pIP)ׯ5ewi7jʎ]lvK7ω1m;WEu1;XX<==#۲H \ n$%1OC Sbc~krm2b593+emkrj6kkaz)0]mdI ś2!uAЬgp'tc:(b|=cΏ^$oc;/1P q;xMG(z%;4Hᩴ7?w{#uh^ms­ҥ[&R)]*RiRhM+&U"*&)UI"B%tO=Ӯi*WIRj!*5uq;I^L/dGhJs5q4UT&'i)4*L:M:Up!RhNT E"6 NeReyik\ܧ)䙋m!4 ~CZbu:"X-,IC?lX7_ٮNV^<<2|IZ/Kt ~n#m׺S~b25iuyI^7dp"٨a~G]ԿӻƠ{)gQk\onn[m?R]l= ^z_#s:m3!jfKVmZ qf^Y_<-viqc҆F,itEqi)w 7CUckㇽ<]|}0lFwVNk tC;,~ R"-[6s˂cHQFX5\Ul81O J$2Qϩꔗa/ޖZoK,dms> .6 VL\MwC5eo<2qåBIϧ]\Ӫ(p0Ȳa:NbԲ0qőa-qgz,/1x._އ)[Ej`B^,}o8G%U\?q®ȮDJ+t*T$'H@N$BV#)QI]H@{*r $RT$t$uKIRJB"&'4^AA)n*MIժWJ'IRuIB+R+='HE&B=@?Кcai=F: ktJ5[L̜q#q$Ր֍'@?yxt s^Ϗ'9R:&O bǗ&6jEsxld𤽜;(9 u__O\XAiUj7sp5̄l!K" xg#KĄ-O 9Boe>mXqsN4~ qn:znI a!o,H wmäpd:W߰E.hatpuU&7av#L:قX'8Ck=[0iv8)PWKю4!keՑ猙'-eQaٰGJA0A6]?8#+JkŌHL̬GJ^szM $ШN@ B}!:EZk T"%I4h|)t %TR^ʑH&N!:E UN'VkR}#:N-hUHuU^U4TA4Ёi֊E =BfCqǠ=6i`K^ Җt/?sT#w\otomXk5_:tnۑ?eqΪR~el8Q+˅&<'`m{~,qrL.yz-hcZizGǐgA$jVzc?%d@+3%z}=~Ђfku1\\`-ǯu$k[͐Yp$hVz;9 U˃33qZ:W HAo2Ѹ=po nN cZ$h;=Çl]O74{ocOz沌GF\eRO0$rfrfSLmwY-fהU||n[e`3?'H~dνlc;'ڜNK&a޹d!v?[$Y:Vf˜g4+ FhFjKxZb&ŏ:~֊Wb97\%ď{ldO 8kcqs[lm$rBd1͊NYך6n O^-h$!p XypnmkC׺%&c㓞Dzpӌd;7t=B AI8 |ܯge;\Fv'Wó[u<>hU" :?6WѻK^Fxt18a;&%l?0FWUq0F,1/XsG[yWBX:2ǐ܆ n_ѝnz(PqI䑹~`|Z]~ǔeᙑHszzv||N=l IC\w;c3&m`sda9TI@) S עhcDYhmú|O[ ^0: 屽ly n=V,nn#"?ҏ%w`]9 fߺsE*켶0E+ҊLIR^MJFjILd]S:B] iOOecF4 tvW:S1E,Q\VM)ҘZQK.iLO˥-!0FҲiFJtOd벘1*J{& zStLHt)4KOeOd=)V-mM& tvY40E%K!iW>IRجtztW.IY/ nF08 m4?N`Вǹ*d!nOU;Ip,k^{fOІ,qsSM=ddkK龧w}?{b|qS ƾip|#(ۛqg6v[+װi |^/<1?#_+ݩ7oe&~+ ӏ]˕- L^F-?g7%GɡdlO:YCXn$]uam5گeNC~^D1VI),[9/h-sm]^XٳkwY 7cnVQ)Q ZZYC~c`EVuc{vݻ4GZx@dep$`$tV\t/4O۟ &C?P4[z/l'76/SL]/|^^n^V^ut0Y85~,a-ncst|m4@\=bl15Lmߖܖ!d& ҝ+R툊N)0FQY)1NdWdQ]'0F]")Q]JEvW:'^#J4ے"J"UIR6OACo]Nfъmdrk?<5][ ZY wVIl,n\R%5﮾niS,8Ѻא7A5kNe>H4K G8<>̌U1x:Ρy6Gq-ȝNepyE.}N]\_s'7e<[&pum[q=q%n:CVŠ 9dq"B\v+.r?P mPAحujhn3dގY2ka8s eYej8e/#zgֻ2^$lp68k$He m)&sy Of88sW#6z+4 :cwײf4&P%gP|5߁ΓS~kH c#kv cs67ZE6@uՋX2 y1&8;-ۭ'Yqݒ=Jz_ƮQur;憒ll#chkCַX;gj'Zߪu賆1-tMд]UBԩ] sdƑ~z|%@Zmxels˒,{zoʊ KXoYaZzrYc`M@ ebA>X2hu} D9 hi_dI9/kwX1_F$\zoi*tZUC0;)+R"nJI4K%"diW=(ҮJ`E+\HUHLIҴuDנNR 4HI*Rttii)A4VA*IR5CXIp,E'b+O),U=jFKHp'˾NS _>YE+QkZN lx9dL%iut= _? h`tK,D`vWF'a򥲜@ЭG+ϊ^C)cdž87=S<+t5[V+,B5-_Er_gFZ)8[\M: d[[v5ԞխyXl<֣٨?Uxu{Ysv{s[)u^,t5U^kX=1ݹH vä ۍ&Ҭj~`J;rJ\UB2VǥxZrQ{SvM#VOm]E9ıK7[]6!8͑٥IR&R:&R& RE"Z)0E!Zlibvips-8.15.1/doc/images/tn_owl.jpg000066400000000000000000000154201454007373500173060ustar00rootroot00000000000000JFIF ExifII*jr(2Viz2011:03:03 02:17:208c8c02100100 ( HHJFIFC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((i" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?䄔%RH_8|٠BOJr5=BբSP+z W./-m?.Mpŏ#zoj,FS3>R5QZ\zGi$\㞜z|1{e yly@jZ\[rfl :]'cZQ>أ*sۓj-h E,q[zX×}z ǯY{+RN.|QSQD#R)TOFbx$JPv3)j˧4>+E2lSqQ*Ur< H֬"VRHbkkšbUd~p3 t[@XӠVԮ]70bӒOaZu4)Y:by5y49%e!Xtskj}+|YRڗƷ#oJK|N'5v:rYF9$1YfUlRۉǢ{W<_gG,6ڷ1 !R|mkգx/ͷ{ETArٽگQȂC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?Q74i^Mmr3E)Q$ H4 H@➢ rN 8 v-.PE3!RPbu S:D S1*%Hx dd%Arڑݵlm U(AN&)*@@iåhLRi굛cCUyHO|h䉮Ϟ˴1;Y-I嬮kh5wU(n R 2IInmMu8Iʼf2 f;Q'U},n KK9ZQkG|̓;S?[$aBZF8QX^*e@&1O:F4IUp\:He||U]8羽ky"*:g-N䉒e;D<ʤ2)SA"gdQu*5d4%#2U˜EEJHLS)  NDV.E$l:~VWv{x}j6̶rZhɑ x<%n!X#o\vʶބ=\^Nz6 "m|p}p~7L .7HӤvhķf!ןcW .ZL7;iZm -dm~UvMlF[.we3쎎n7ӻTO"Q+ukB{k91=jг6jD11sU泒0tfq `[E]6+LlRs >f][}١V0ȫՁ f[IQz5f*k+mɦXL" i*^ijbU=EXsC*uZrJr({l6a .hdGnueWkr߮O nxBxKN9Me'ߊfg2Hv{H\tvHkke+r.NG`%m6Ev}) ƂE'qcv}6(Ȳ"d*Ӛ3V}b3oGe~RzJ6'RC^j- 5hX`>ȼ8iL ?1=ǧ^B;(v& y qK/1%][Gl'=<{WE- WE(Tv91XVhoމ1Zi^jM+^g9bLJw%))JX=Oj~j~jP9b[{0[ʆ&w,W?&2qֹj w"\AE}޺"Ƞ8= ^"8խ/FNq߅tQ*1}BRQO UoOݮg ' KF澟#%[u*I52 kqc n TAOX[sz#:8#bmJ$3 R P¥#al ۭn'؆VGI`@ǵO+9Xkvcqʋ 6R0r7\nX,][^Zdea:bRNAP6,Gr$Lck֦,c7f#"'2 ԛjbݵ1"4#Z?g8]J &ʺSD FICV@UV,vici8TTIܻ@[X, /X9n0O2=5>D˄b:h!"vɝc9^O-F['Rg.A u#s]58b8D!q qz-2;NW!`ykR}&aN&-C"hs=i``eF fc;?a\+H8UJ ҭu{)1ΖUHܱ#tk[\sU5C&QǛ2ȸ=y]G7[O$۬gEʜ3ǎ3Rs{΢gL)zspK= R(9z+ڣM(l4=I{W/$0{S \vдpkĖ<+2Exgl=q]5%^khf)8ǥTĺUr$<݀^P'xbE'Rԁ^qycrQrˑ\T,U7ns;ik Ko.Yd9W=vשP6 '=G^KkheUKg=th0[I9CBR-Zyl^qk֛vߌcۨK'3ܸʅ9'kV1\? lq4*YGZGe62º3xoXm#YMFT =g^#Ư%C/<`ΐ@8!}yBm"q` "_緷^}zjNOrI>sKzNlQ,MߡЎƮy^Ղs;ȭW.libvips-8.15.1/doc/images/x.jpg000066400000000000000000000153151454007373500162560ustar00rootroot00000000000000JFIF ExifII*jr(2Viz2011:03:03 02:17:208c8c02100100 ( HHJFIFC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((i" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?䄔%RH_8|٠BOJr5=BբSP+z W./-m?.Mpŏ#zoj,FS3>R5QZ\zGi$\㞜z|1{e yly@jZ\[rfl :]'cZQ>أ*sۓj-h E,q[zX×}z ǯY{+RN.|QSQD#R)TOFbx$JPv3)j˧4>+E2lSqQ*Ur< H֬"VRHbkkšbUd~p3 t[@XӠVԮ]70bӒOaZu4)Y:by5y49%e!Xtskj}+|YRڗƷ#oJK|N'5v:rYF9$1YfUlRۉǢ{W<_gG,6ڷ1 !R|mkգx/ͷ{ETArٽگQȂC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?M'p|D$]N !IW=q?C>@T@M9= |yMu_K%[BMVZ9nx GjKd"Ub6QX-b~n6>7#RѴIIT1; 'QUt㾢wƷrqiq{ Y*K(hN6J' R<0ErɊ]ҦRSH3L)TTʵ2Ёj@J'I: Ο*בqK[e *YnRei-ɑywk Œ-.7;$.@Br:{d;s+B/Rg1:m|~8kJrѳ:t-KzTa|{p3\6I. $>h ݮiC +?eJi4$evI뎎n7ԹS҈igadFnsk @8QtȲkE2㚭}DI.LpQqw8ɭ/6',R;d d˦tI]/]=><{V]ͯmJ֦Yz^TesUvEM{rikLVVS*T:c Diʞ(ZȢ[|8aV`rCoPp9\H$~s;RBmWae$z\M!C2:54ݒK{:G&,m˓0?RG^$lb+wȊH 1IXݟsg^rVDLzt淌լ(ksͼeEz xJ0U~g٢uaJd^_@mfUWW4b0pr;]{4Y}?gKƒKhq/r0i!sC* zaZ/mҵs+VJSJSS :&;T;gW1V" OOJ4\,X ouPxk֬.˙e[d}9EYSkX]ia/ Jԫ< R@>r;\O1s?z|YYJ|kqՔmܻJW|`-|Eq[1;`%I$ǥs#Ubca%g).ܢ9`B{T9XZ݉!>VH`DMB-'*TZưd][_ִ4GL ?ZμNG8Ir]0J0,r$Lc O+KYr Ep#f?&+ǒ0l Rmv\XpҘhzSL8]J &ʼS FICV@Ujͥ,"C ,*SOvԷ9 . |mFGU ȝp[EGQaew;dj(޼Yj8YX ?ZGǭ6*.'$^ZdvCc Nl~5]:Mf<{C֔  E`9c?ǿa\+H8UWE[e>QtEX@ G];nCxvae$zn)5"HzJ/{WQ I(6. "eN3ǎՄi<7c#gw8֟ڒK1M:__^=yTiIvBWO#ڹ}$0{TfsW^;hZW-s߉-xVdzH'_^B^e'mQÏTĺUr,"gc^gk2ī$N RIj/7LE$guB[ZvO?c1/ȭYd9ڹwU\ځdO9ץg6B{42 D 6EnL+Nz졂IGB[-ZldO(듎SXov1nD,>2xkq# y=]*ScК5(Yp͌= t՛IdY -Tǯu#xQ$ybuh 625^IP]4.צtG$zp4g4]R.Y"n[I IVڏ+ڏf?libvips-8.15.1/doc/libvips-docs.xml000066400000000000000000000077071454007373500171660ustar00rootroot00000000000000 ]> libvips Reference Manual For libvips &version;. The latest version of this documentation can be found on the libvips website. libvips Overview libvips is a free image processing system. It is good with large images (images larger than the amount of RAM you have available), with many CPUs (speed scales linearly to at least 32 threads), for working with colour, for scientific analysis and for general research and development. As well as JPEG, TIFF and PNG images, it also supports scientific formats like FITS, Matlab, Analyze, PFM, Radiance and OpenSlide. It works on many UNIX-like platforms, as well as Windows and OS X. libvips is released under the GNU Library General Public License (GNU LGPL). Core libvips API libvips operation API by section Other API (no gtkdoc comments yet) Object Hierarchy API Index libvips-8.15.1/doc/libvips-from-C++.md000066400000000000000000000010471454007373500172760ustar00rootroot00000000000000 libvips from C++ 3 libvips C++ Using libvips from C++ libvips comes with a convenient C++ API. It is a very thin wrapper over the C API and adds automatic reference counting, exceptions, operator overloads, and automatic constant expansion. See the C++ API documentation for more details. libvips-8.15.1/doc/libvips-from-C++.xml000066400000000000000000000014751454007373500175030ustar00rootroot00000000000000 libvips from C++ 3 libvips C++ Using libvips from C++ libvips comes with a convenient C++ API. It is a very thin wrapper over the C API and adds automatic reference counting, exceptions, operator overloads, and automatic constant expansion. See the C++ API documentation for more details. libvips-8.15.1/doc/meson.build000066400000000000000000000112211454007373500161720ustar00rootroot00000000000000private_libvips_headers = [ 'include/vips/almostdeprecated.h', 'include/vips/deprecated.h', 'include/vips/vips7compat.h', 'include/vips/dispatch.h', 'include/vips/internal.h', 'include/vips/thread.h', 'include/vips/intl.h', 'include/vips/format.h', 'include/vips/mask.h', 'include/vips/private.h', 'include/vips/video.h', # ignore all .h files in libvips/*, these are internal 'arithmetic/binary.h', 'arithmetic/hough.h', 'arithmetic/nary.h', 'arithmetic/parithmetic.h', 'arithmetic/statistic.h', 'arithmetic/unary.h', 'arithmetic/unaryconst.h', 'colour/pcolour.h', 'colour/profiles.h', 'conversion/bandary.h', 'conversion/pconversion.h', 'convolution/correlation.h', 'convolution/pconvolution.h', 'create/pcreate.h', 'create/pmask.h', 'create/point.h', 'draw/drawink.h', 'draw/pdraw.h', 'foreign/dbh.h', 'foreign/jpeg.h', 'foreign/magick.h', 'foreign/pforeign.h', 'foreign/quantise.h', 'foreign/tiff.h', 'foreign/libnsgif/lzw.h', 'foreign/libnsgif/nsgif.h', 'foreign/libnsgif/test/cli.h', 'freqfilt/pfreqfilt.h', 'histogram/hist_unary.h', 'histogram/phistogram.h', 'iofuncs/sink.h', 'morphology/pmorphology.h', 'mosaicing/global_balance.h', 'mosaicing/pmosaicing.h', 'resample/presample.h', 'resample/templates.h' ] private_headers = [] foreach private_libvips_header : private_libvips_headers private_headers += [join_paths(project_source_root, 'libvips', private_libvips_header)] endforeach markdown_content_files = files( 'How-it-works.md', 'libvips-from-C++.md', 'Using-vipsthumbnail.md', 'How-it-opens-files.md', 'Examples.md', 'Cite.md', 'binding.md', 'Making-image-pyramids.md', ) pandoc = find_program('pandoc', required: false) if pandoc.found() # we have some files in markdown ... convert to docbook for gtk-doc gen = generator(pandoc, output: '@BASENAME@.xml', arguments: [ '@INPUT@', '--template=@0@'.format(join_paths(meson.current_source_dir(), 'pandoc-docbook-template.docbook')), '--wrap=none', '-V', 'title=@BASENAME@', '-f', 'markdown+smart', '-t', 'docbook', '-o', '@OUTPUT@', ] ) markdown_content_files_generated = gen.process(markdown_content_files) # pandoc makes section headers, we want refsect3 for gtk-doc markdown_content_files_docbook = custom_target('gen-docs', output: 'generated', input: markdown_content_files_generated, command: [ 'sed', '-i', '-e', 's| $if(mathml)$ $else$ $endif$ $for(include-before)$ $include-before$ $endfor$ $body$ $for(include-after)$ $include-after$ $endfor$ libvips-8.15.1/doc/using-C.xml000066400000000000000000000270031454007373500160640ustar00rootroot00000000000000 VIPS from C 3 VIPS Library Using VIPS How to use the VIPS library from C Introduction VIPS comes with a convenient, high-level C API. You should read the API docs for full details, but this section will try to give a brief overview. Library startup When your program starts, use VIPS_INIT() to start up the VIPS library. You should pass it the name of your program, usually argv[0]. If you call vips_shutdown() just before you exit, libvips will attempt to free all resources. This can help leak checking, but is not required. VIPS_INIT() is a macro to let it check that the libvips library you have linked to matches the libvips headers you included. You can add the VIPS flags to your %GObject command-line processing with vips_add_option_entries(). The #VipsImage class The basic data object is the #VipsImage. You can create an image from a file on disc or from an area of memory, either as a C-style array, or as a formatted object, like JPEG. See vips_image_new_from_file() and friends. Loading an image is fast: VIPS read just enough of the image to be able to get the various properties, such as width, but no decoding occurs until pixel values are really needed. Once you have an image, you can get properties from it in the usual way. You can use projection functions, like vips_image_get_width() or g_object_get(), to get %GObject properties. All VIPS objects are immutable, meaning you can only get properties, you can't set them. See VIPS Header to read about image properties. Reference counting VIPS is based on the %GObject library and is therefore reference counted. vips_image_new_from_file() returns an object with a count of 1. When you are done with an image, use g_object_unref() to dispose of it. If you pass an image to an operation and that operation needs to keep a copy of the image, it will ref it. So you can unref an image as soon as you no longer need it, you don't need to hang on to it in case anyone else is still using it. See #VipsOperation for more detail on VIPS reference counting conventions. See the Reference pools section below for a way to automate reference counting in C. VIPS operations Use things like vips_embed() to manipulate your images. You use it from C like this: const char *filename; VipsImage *in = vips_image_new_from_file(filename, NULL); const int x = 10; const int y = 10; const int width = 1000; const int height = 1000; VipsImage *out; if (vips_embed(in, &out, x, y, width, height, NULL)) error_handling(); Now out will hold a reference to a 1000 by 1000 pixel image, with in pasted 10 right and 10 down from the top left-hand corner. The remainder of the image will be black. If in is too large, it will be clipped at the image edges. Operations can take optional arguments. You give these as a set of NULL-terminated name-value pairs at the end of the call. For example, you can write: if (vips_embed(in, &out, x, y, width, height, "extend", VIPS_EXTEND_COPY, NULL)) error_handling(); And now the new edge pixels, which were black, will be filled with a copy of the edge pixels of in. Operation options are listed at the top of each operation's entry in the docs. Alternatively, the vips program is handy for getting a summary of an operation's parameters. For example: $ vips embed embed an image in a larger image usage: embed in out x y width height where: in - Input image, input VipsImage out - Output image, output VipsImage x - Left edge of input in output, input gint default: 0 min: -1000000000, max: 1000000000 y - Top edge of input in output, input gint default: 0 min: -1000000000, max: 1000000000 width - Image width in pixels, input gint default: 1 min: 1, max: 1000000000 height - Image height in pixels, input gint default: 1 min: 1, max: 1000000000 optional arguments: extend - How to generate the extra pixels, input VipsExtend default: black allowed: black, copy, repeat, mirror, white, background background - Colour for background pixels, input VipsArrayDouble operation flags: sequential-unbuffered See #VipsOperation for more information on running operations on images. The API docs have a handy table of all vips operations, if you want to find out how to do something, try searching that. When you are done, you can write the final image to a disc file, to a formatted memory buffer, or to C-style memory array. See vips_image_write_to_file() and friends. Getting pixels Use #VipsRegion to read pixels out of images. You can use VIPS_IMAGE_ADDR() as well, but this can need a large amount of memory to work. See extending for an introduction to writing your own operations. Error handling VIPS keeps a log of error message, see VIPS Error to find out how to get and clear the error log. Example On *nix systems, you can compile the example code with something like: $ gcc -g -Wall myprog.c `pkg-config vips --cflags --libs` On Windows, you'll need to set the compiler flags by hand, perhaps: x86_64-w64-mingw32-gcc-win32 -mms-bitfields \ -Ic:/vips-8.6/include \ -Ic:/vips-8.6/include/glib-2.0 \ -Ic:/vips-8.6/lib/glib-2.0/include \ myprog.c \ -Lc:/vips-8.6/lib \ -lvips -lz -ljpeg -lstdc++ -lxml2 -lfftw3 -lm -lMagickWand -llcms2 \ -lopenslide -lcfitsio -lpangoft2-1.0 -ltiff -lpng14 -lexif \ -lMagickCore -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 \ -lgmodule-2.0 -lgthread-2.0 -lglib-2.0 -lintl \ -o myprog.exe VIPS from C example #include <stdio.h> #include <vips/vips.h> int main(int argc, char **argv) { VipsImage *in; double mean; VipsImage *out; if (VIPS_INIT(argv[0])) vips_error_exit(NULL); if (argc != 3) vips_error_exit("usage: %s infile outfile", argv[0]); if (!(in = vips_image_new_from_file(argv[1], NULL))) vips_error_exit(NULL); printf("image width = %d\n", vips_image_get_width(in)); if (vips_avg(in, &mean, NULL)) vips_error_exit(NULL); printf("mean pixel value = %g\n", mean); if (vips_invert(in, &out, NULL)) vips_error_exit(NULL); g_object_unref(in); if (vips_image_write_to_file(out, argv[2], NULL)) vips_error_exit(NULL); g_object_unref(out); return 0; } Reference pools libvips has a simple system to automate at least some reference counting issues. Reference pools are arrays of object pointers which will be released automatically when some other object is finalized. The code below crops a many-page image (perhaps a GIF or PDF). It splits the image into separate pages, crops each page, reassembles the cropped areas, and saves again. It creates a context object representing the state of processing, and crop_animation allocates two reference pools off that using vips_object_local_array, one to hold the cropped frames, and one to assemble and copy the result. All unreffing is handled by main, and it doesn't need to know anything about crop_animation. Reference pool example #include <vips/vips.h> static int crop_animation(VipsObject *context, VipsImage *image, VipsImage **out, int left, int top, int width, int height) { int page_height = vips_image_get_page_height(image); int n_pages = image->Ysize / page_height; VipsImage **page = (VipsImage **) vips_object_local_array(context, n_pages); VipsImage **copy = (VipsImage **) vips_object_local_array(context, 1); int i; /* Split the image into cropped frames. */ for (i = 0; i < n_pages; i++) if (vips_crop(image, &page[i], left, page_height * i + top, width, height, NULL)) return -1; /* Reassemble the frames and set the page height. You must copy before * modifying metadata. */ if (vips_arrayjoin(page, &copy[0], n_pages, "across", 1, NULL) || vips_copy(copy[0], out, NULL)) return -1; vips_image_set_int(*out, "page-height", height); return 0; } int main(int argc, char **argv) { VipsImage *image; VipsObject *context; VipsImage *x; if (VIPS_INIT(NULL)) vips_error_exit(NULL); if (!(image = vips_image_new_from_file(argv[1], "access", VIPS_ACCESS_SEQUENTIAL, NULL))) vips_error_exit(NULL); context = VIPS_OBJECT(vips_image_new()); if (crop_animation(context, image, &x, 10, 10, 500, 500)) { g_object_unref(image); g_object_unref(context); vips_error_exit(NULL); } g_object_unref(image); g_object_unref(context); image = x; if (vips_image_write_to_file(image, argv[2], NULL)) { g_object_unref(image); vips_error_exit(NULL); } g_object_unref(image); return 0; } libvips-8.15.1/doc/using-command-line.xml000066400000000000000000000156741454007373500202600ustar00rootroot00000000000000 VIPS from the command-line 1 VIPS Library Using VIPS How to use the VIPS library from the command-line Introduction Use the vips command to execute VIPS operations from the command-line. For example: $ vips rot k2.jpg x.jpg d90 Will rotate the image k2.jpg by 90 degrees anticlockwise and write the result to the file x.jpg. If you don't give any arguments to an operation, vips will give a short description, for example: $ vips rot rotate an image usage: rot in out angle where: in - Input image, input VipsImage out - Output image, output VipsImage angle - Angle to rotate image, input VipsAngle default: d90 allowed: d0, d90, d180, d270 There's a straightforward relationship with the C API: compare this to the API docs for vips_rot(). Listing all operations You can list all classes with: $ vips -l ... VipsOperation (operation), operations VipsSystem (system), run an external command VipsArithmetic (arithmetic), arithmetic operations VipsBinary (binary), binary operations VipsAdd (add), add two images ... etc. Each line shows the canonical name of the class (for example VipsAdd), the class nickname (add in this case), and a short description. Some subclasses of operation will show more: for example, subclasses of VipsForeign will show some of the extra flags supported by the file load/save operations. The API docs have a handy table of all vips operations, if you want to find out how to do something, try searching that. Optional arguments Many operations take optional arguments. You can supply these as command-line options. For example: $ vips gamma gamma an image usage: gamma in out where: in - Input image, input VipsImage out - Output image, output VipsImage optional arguments: exponent - Gamma factor, input gdouble default: 2.4 min: 1e-06, max: 1000 operation flags: sequential-unbuffered vips_gamma() applies a gamma factor to an image. By default, it uses 2.4, the sRGB gamma factor, but you can specify any gamma with the exponent option. Use it from the command-line like this: $ vips gamma k2.jpg x.jpg --exponent 0.42 This will read file k2.jpg, un-gamma it, and write the result to file x.jpg. Array arguments Some operations take arrays of values as arguments. For example, vips_affine() needs an array of four numbers for the 2x2 transform matrix. You pass arrays as space-separated lists: $ vips affine k2.jpg x.jpg "2 0 0 1" You may need the quotes to stop your shell breaking the argument at the spaces. vips_bandjoin() needs an array of input images to join, run it like this: $ vips bandjoin "k2.jpg k4.jpg" x.tif Implicit file format conversion vips will automatically convert between image file formats for you. Input images are detected by sniffing their first few bytes; output formats are set from the filename suffix. You can see a list of all the supported file formats with something like: $ vips -l foreign Then get a list of the options a format supports with: $ vips jpegsave You can pass options to the implicit load and save operations enclosed in square brackets after the filename: vips affine k2.jpg x.jpg[Q=90,strip] "2 0 0 1" Will write x.jpg at quality level 90 and will strip all metadata from the image. Chaining operations Because each operation runs in a separate process, you can't use libvips's chaining system to join operations together, you have to use intermediate files. The command-line interface is therefore quite a bit slower than Python or C. The best alternative is to use vips files for intermediates. Something like: vips invert input.jpg t1.v vips affine t1.v output.jpg "2 0 0 1" rm t1.v Other features Finally, vips has a couple of useful extra options. Use to get vips to display a simple progress indicator. Use and vips will leak-test on exit, and also display an estimate of peak memory use. Set G_MESSAGES_DEBUG=VIPS and GLib will display informational and debug messages from libvips. VIPS comes with a couple of other useful programs. vipsheader is a command which can print image header fields. vipsedit can change fields in vips format images. vipsthumbnail can make image thumbnails quickly. libvips-8.15.1/doc/using-threads.xml000066400000000000000000000140341454007373500173340ustar00rootroot00000000000000 VIPS and threads 3 VIPS Library Using VIPS VIPS and threading Introduction This section tries to summarise the rules for threaded programs using libvips. Generally, libvips is threaded and thread-safe, with a few exceptions. Images On startup, you need to call VIPS_INIT() single-threaded. After that, you can freely create images in any thread and read them in any other thread. See the example at the end of this chapter. Note that results can also be shared between threads for you by the vips operation cache. The exception is the drawing operators, such as vips_draw_circle(). These operations modify their image argument so you can't call them on the same image from more than one thread. Reading from an image while another thread is writing to it with one of the draw operations will obviously also fail. When libvips calculates an image, by default it will use as many threads as you have CPU cores. Use vips_concurrency_set() to change this. Error handling libvips has a single error code (-1 or %NULL) returned by all functions on error. Error messages are not returned, instead they are logged in a single global error buffer shared by all threads, see vips_error_buffer(). This makes error handling very simple but the obvious downside is that because error returns and error messages are separate, when you detect an error return you can't be sure that what's in the error buffer is the message that matches your error. The simplest way to handle this is to present the whole error log to the user on the next interaction and leave it to them to decide what action caused the failure. Using #VipsRegion between threads #VipsImage objects are immutable and can be shared between threads very simply. However the lower-level #VipsRegion object used to implement #VipsImage (see Extending VIPS) is mutable and you can only use a #VipsRegion from one thread at once. In fact it's worse than that: to reduce locking, #VipsRegion keeps a lot of state in per-thread storage. If you want to create a region in one thread and use it in another, you have to first tag the region as unowned from the creating thread with vips__region_no_ownership(), then in the receiving thread take ownership with vips__region_take_ownership(). See the source for operations like vips_tilecache() if you're curious how this works. libvips includes a set of sanity checks for region ownership and will fail if you don't pass ownership correctly. Example This example runs many vips_resize() in parallel from many threads. VIPS and threads example /* Read from many threads. * * Compile with: * * gcc -g -Wall soak.c `pkg-config vips --cflags --libs` * * Run with: * * rm -rf x * mkdir x * for i in {0..10}; do ./a.out ~/pics/k2.jpg; done * */ #include <stdio.h> #include <glib.h> #include <vips/vips.h> /* How many pings we run at once. */ #define NUM_IN_PARALLEL (50) /* Number of tests we do in total. */ #define TOTAL_TESTS (NUM_IN_PARALLEL * 20) /* Workers queue up on this. */ GMutex allocation_lock; /* Our set of threads. */ GThread *workers[NUM_IN_PARALLEL]; /* Number of calls so far. */ int n_calls = 0; /* Our test function. This is called by NUM_IN_PARALLEL threads a total of * TOTAL_TESTS times. */ static int test(const char *filename) { VipsImage *im, *x; char output_file[256]; snprintf(output_file, 256, "x/tmp-%p.jpg", g_thread_self()); if (!(im = vips_image_new_from_file(filename, "access", VIPS_ACCESS_SEQUENTIAL, NULL))) return -1; if (vips_resize(im, &x, 0.1, NULL)) { g_object_unref(im); return -1; } g_object_unref(im); im = x; if (vips_image_write_to_file(im, output_file, NULL)) { g_object_unref(im); return -1; } g_object_unref(im); return 0; } /* What we run as a thread. */ static void * worker(void *data) { const char *filename = (const char *) data; for (;;) { gboolean done; done = FALSE; g_mutex_lock(&allocation_lock); n_calls += 1; if (n_calls > TOTAL_TESTS) done = TRUE; g_mutex_unlock(&allocation_lock); if (done) break; if (test(filename)) vips_error_exit(NULL); } return NULL; } int main(int argc, char **argv) { int i; if (VIPS_INIT(argv[0])) vips_error_exit(NULL); g_mutex_init(&allocation_lock); for (i = 0; i < NUM_IN_PARALLEL; i++) workers[i] = g_thread_new(NULL, (GThreadFunc) worker, argv[1]); for (i = 0; i < NUM_IN_PARALLEL; i++) g_thread_join(workers[i]); return 0; } libvips-8.15.1/doc/version.xml.in000066400000000000000000000000161454007373500166440ustar00rootroot00000000000000@VIPS_VERSION@libvips-8.15.1/examples/000077500000000000000000000000001454007373500151045ustar00rootroot00000000000000libvips-8.15.1/examples/annotate-animated.c000066400000000000000000000044351454007373500206470ustar00rootroot00000000000000/* Draw something on every frame of an animated image. * * compile with: * * gcc -g -Wall annotate-animated.c `pkg-config vips --cflags --libs` * * run with: * * annotate-animated ~/pics/3198.gif[n=-1] x.webp */ #include static int annotate_image(VipsObject *context, VipsImage *image, VipsImage **out) { int page_height = vips_image_get_page_height(image); int n_pages = image->Ysize / page_height; VipsImage **overlay = (VipsImage **) vips_object_local_array(context, n_pages); VipsImage **page = (VipsImage **) vips_object_local_array(context, n_pages); VipsImage **annotated = (VipsImage **) vips_object_local_array(context, n_pages); /* Red as RGBA. */ double red[] = { 255, 0, 0, 255 }; double transparent[] = { 0, 0, 0, 0 }; int i; /* Split the image into frames. */ for (i = 0; i < n_pages; i++) if (vips_crop(image, &page[i], 0, page_height * i, image->Xsize, page_height, NULL)) return -1; /* Make an overlay ... a solid red square, with a transparent hole. */ if ( !(overlay[0] = vips_image_new_from_image(page[0], red, VIPS_NUMBER(red))) || vips_draw_rect(overlay[0], transparent, VIPS_NUMBER(transparent), 10, 10, overlay[0]->Xsize - 20, overlay[0]->Ysize - 20, "fill", TRUE, NULL)) return -1; /* Draw the overlay on every page. */ for (i = 0; i < n_pages; i++) if (vips_composite2(page[i], overlay[0], &annotated[i], VIPS_BLEND_MODE_OVER, NULL)) return -1; /* Reassemble the frames. */ if (vips_arrayjoin(annotated, out, n_pages, "across", 1, NULL)) return -1; return 0; } int main(int argc, char **argv) { VipsImage *image; VipsObject *context; VipsImage *x; if (VIPS_INIT(argv[0])) vips_error_exit(NULL); if (argc != 3) vips_error_exit("usage: %s xxx.gif[n=-1] yyy.gif", argv[0]); if (!(image = vips_image_new_from_file(argv[1], "access", VIPS_ACCESS_SEQUENTIAL, NULL))) vips_error_exit(NULL); context = VIPS_OBJECT(vips_image_new()); if (annotate_image(context, image, &x)) { g_object_unref(image); g_object_unref(context); vips_error_exit(NULL); } g_object_unref(image); g_object_unref(context); image = x; if (vips_image_write_to_file(image, argv[2], NULL)) { g_object_unref(image); vips_error_exit(NULL); } g_object_unref(image); return 0; } libvips-8.15.1/examples/meson.build000066400000000000000000000003541454007373500172500ustar00rootroot00000000000000examples = [ 'annotate-animated', 'new-from-buffer', 'progress-cancel', 'use-vips-func', ] foreach example : examples executable(example, example + '.c', dependencies: libvips_dep, ) endforeach libvips-8.15.1/examples/new-from-buffer.c000066400000000000000000000016131454007373500202520ustar00rootroot00000000000000/* Read and write formatted images to memory. * * Compile with: * * gcc -g -Wall new-from-buffer.c `pkg-config vips --cflags --libs` * */ #include int main(int argc, char **argv) { gchar *buf; gsize len; int i; if (VIPS_INIT(argv[0])) vips_error_exit(NULL); if (argc != 2) vips_error_exit("usage: %s FILENAME", argv[0]); if (!g_file_get_contents(argv[1], &buf, &len, NULL)) vips_error_exit(NULL); for (i = 0; i < 10; i++) { VipsImage *image; void *new_buf; size_t new_len; printf("loop %d ...\n", i); if (!(image = vips_image_new_from_buffer(buf, len, "", "access", VIPS_ACCESS_SEQUENTIAL, NULL))) vips_error_exit(NULL); if (vips_image_write_to_buffer(image, ".jpg", &new_buf, &new_len, "Q", 95, NULL)) vips_error_exit(NULL); g_object_unref(image); g_free(new_buf); } g_free(buf); vips_shutdown(); return 0; } libvips-8.15.1/examples/progress-cancel.c000066400000000000000000000032641454007373500203440ustar00rootroot00000000000000/* Show progress feedback and computation cancel. * * compile with * * gcc -g -Wall progress-cancel.c `pkg-config vips --cflags --libs` */ #include #include #include void preeval_callback(VipsImage *image, VipsProgress *progress, void *pdata) { printf("preeval_callback:\n"); } void eval_callback(VipsImage *image, VipsProgress *progress, void *pdata) { printf("eval_callback: percent = %d\n", progress->percent); if (progress->percent >= 25) { printf("calling vips_image_set_kill() ...\n"); vips_image_set_kill(image, TRUE); } } void posteval_callback(VipsImage *image, VipsProgress *progress, void *pdata) { printf("posteval_callback: finished in %.3gs\n", g_timer_elapsed(progress->start, NULL)); } int main(int argc, char **argv) { VipsImage *image; VipsImage *out; void *output; size_t output_length; if (VIPS_INIT(argv[0])) vips_error_exit(NULL); if (argc != 3) vips_error_exit("usage: %s INPUT-FILE OUTPUT-FILE", argv[0]); if (!(image = vips_image_new_from_file(argv[1], "access", VIPS_ACCESS_SEQUENTIAL, NULL))) vips_error_exit(NULL); if (vips_resize(image, &out, 0.5, NULL)) vips_error_exit(NULL); vips_image_set_progress(out, TRUE); g_signal_connect(out, "preeval", G_CALLBACK(preeval_callback), NULL); g_signal_connect(out, "eval", G_CALLBACK(eval_callback), NULL); g_signal_connect(out, "posteval", G_CALLBACK(posteval_callback), NULL); output = NULL; if (vips_image_write_to_buffer(out, argv[2], &output, &output_length, NULL)) printf("error return from vips_image_write_to_buffer()\n"); g_object_unref(out); g_object_unref(image); if (output) g_free(output); vips_shutdown(); return 0; } libvips-8.15.1/examples/use-vips-func.c000066400000000000000000000016171454007373500177610ustar00rootroot00000000000000/* Example showing how to call a couple of vips functions using an input * image file and creating an output file * also gathers some info on the input image */ #include #include int main(int argc, char **argv) { VipsImage *in; double mean; VipsImage *out; if (VIPS_INIT(argv[0])) vips_error_exit(NULL); if (argc != 3) vips_error_exit("usage: %s infile outfile", argv[0]); if (!(in = vips_image_new_from_file(argv[1], NULL))) vips_error_exit(NULL); printf("image width = %d\n", vips_image_get_width(in)); if (vips_avg(in, &mean, NULL)) vips_error_exit(NULL); printf("mean pixel value = %g\n", mean); /* generate photo nexative - replace with other vips_ funcs */ if (vips_invert(in, &out, NULL)) vips_error_exit(NULL); g_object_unref(in); if (vips_image_write_to_file(out, argv[2], NULL)) vips_error_exit(NULL); g_object_unref(out); return 0; } libvips-8.15.1/fuzz/000077500000000000000000000000001454007373500142645ustar00rootroot00000000000000libvips-8.15.1/fuzz/StandaloneFuzzTargetMain.c000066400000000000000000000034251454007373500213570ustar00rootroot00000000000000/*===- StandaloneFuzzTargetMain.c - standalone main() for fuzz targets. ---===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // This main() function can be linked to a fuzz target (i.e. a library // that exports LLVMFuzzerTestOneInput() and possibly LLVMFuzzerInitialize()) // instead of libFuzzer. This main() function will not perform any fuzzing // but will simply feed all input files one by one to the fuzz target. // // Use this file to provide reproducers for bugs when linking against libFuzzer // or other fuzzing engine is undesirable. //===----------------------------------------------------------------------===*/ #include #include #include #include extern int LLVMFuzzerTestOneInput(const unsigned char *data, size_t size); extern int LLVMFuzzerInitialize(int *argc, char ***argv); int main(int argc, char **argv) { const char *progname; if ((progname = strrchr(argv[0], '/'))) progname++; else progname = argv[0]; fprintf(stderr, "%s: running %d inputs\n", progname, argc - 1); LLVMFuzzerInitialize(&argc, &argv); for (int i = 1; i < argc; i++) { fprintf(stderr, "Running: %s\n", argv[i]); FILE *f = fopen(argv[i], "r+"); assert(f); fseek(f, 0, SEEK_END); long len = ftell(f); fseek(f, 0, SEEK_SET); unsigned char *buf = (unsigned char*)malloc(len); size_t n_read = fread(buf, 1, len, f); fclose(f); assert(n_read == len); LLVMFuzzerTestOneInput(buf, len); free(buf); fprintf(stderr, "Done: %s: (%zd bytes)\n", argv[i], n_read); } } libvips-8.15.1/fuzz/common_fuzzer_corpus/000077500000000000000000000000001454007373500205545ustar00rootroot00000000000000libvips-8.15.1/fuzz/common_fuzzer_corpus/.keep000066400000000000000000000000001454007373500214670ustar00rootroot00000000000000libvips-8.15.1/fuzz/common_fuzzer_corpus/jpegsave_buffer_fuzzer-5658586599915520000066400000000000000000000002521454007373500270450ustar00rootroot00000000000000II*0? P           libvips-8.15.1/fuzz/common_fuzzer_corpus/jpegsave_buffer_fuzzer-5673786296238080000066400000000000000000000000541454007373500270350ustar00rootroot00000000000000  !  A http libvips-8.15.1/fuzz/common_fuzzer_corpus/jpegsave_buffer_fuzzer-5759265708441600000066400000000000000000000004411454007373500270220ustar00rootroot00000000000000ExifMM*b1 i cs  ;"5  ;"cs  ;"5 libvips-8.15.1/fuzz/common_fuzzer_corpus/jpegsave_file_fuzzer-5662041322291200000066400000000000000000000077561454007373500264600ustar00rootroot00000000000000   MatrRAP"A%Q 65535xFIF׀JFID׀ MatrRAP"A%Q 65535x MatrRAP"A%Q 65535xRAP"A%Q 65535x@?3aJ{FIF׀JFID׀ MatrRAP"A%Q 65535x MatrRAP"A%Q 65535xFIF׀JFID׀ MatrRAP"A%Q 65535x MatrRAP"A%Q 65535xlibvips-8.15.1/fuzz/common_fuzzer_corpus/pngsave_buffer_fuzzer-5078454764044288000066400000000000000000000001071454007373500266670ustar00rootroot00000000000000PNG  IHDR  iTXt IDAT(@fIDATlibvips-8.15.1/fuzz/common_fuzzer_corpus/sharpen_fuzzer-5203581631725568000066400000000000000000000000151454007373500253200ustar00rootroot00000000000000GIF8 =libvips-8.15.1/fuzz/common_fuzzer_corpus/sharpen_fuzzer-5678720198639616000066400000000000000000000004621454007373500253470ustar00rootroot00000000000000II*      R  libvips-8.15.1/fuzz/common_fuzzer_corpus/sharpen_fuzzer-5691855517253632000066400000000000000000000031151454007373500253320ustar00rootroot00000000000000II* I R         libvips-8.15.1/fuzz/common_fuzzer_corpus/sharpen_fuzzer-5806172036399104000066400000000000000000035110531454007373500253310ustar00rootroot00000000000000GIF82,-)Z,-)Z,-)Z,,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Rg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-Z,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-Str)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-Z,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg )Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)ZB)Zg )Z,-)Z@)^,-)Z,-)Z?--)Z,-)Z,-)Z,-)Z,-@)^,-SriZ,-)Z,-Z,-@)^,-SriZ,-)Z,-Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-Z,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-Str)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-Z,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg )Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-Str)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-Z,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg )Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)ZB)Zg )Z,-)Z@)^,-)Z,-)Z?--)Z,-)Z,-)Z,-)Z,-@)^,-SriZ,-)Z,-Z,-@)^,-SriZ,-)Z,-Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-Z,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-Str)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-Z,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg )Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)ZB)Zg )Z,-)Z@)^,-)Z,-)Z?--)Z,-)Z,-)Z,-)Z,-@)^,-SriZ,-)Z,-Z,-@)^,-SriZ,-)Z,-Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-Z,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg )Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)*Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z@,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg )Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg )))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)ZB)Zg )Z,-)Z@)^,-)Z,-)Z?--)Z,-)Z,-)Z,-)Z,-@)^,-SriZ,-)Z,-Z,-@)^,-SriZ,-)Z,-Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-Z,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg )Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg )Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)*Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z@,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)Z,-)Z,-)Z,-@)^,-StriZ,-)Z)Zg ))Z,-)Z,-)ZB)Zg )Z,-)Z@)^,-)Z,-)Z?--)Z,-)Z,-)Z,-)Z,-@)^,-SriZ,-)Z,-Z,-@)^,-SriZ,-)Z,-Z,- )Z,-)Z,-@)^,-StriZ,-)Z,-Z,-)Zg )Z,-)Z,-)Z?-libvips-8.15.1/fuzz/common_fuzzer_corpus/smartcrop_fuzzer-5687924892368896000066400000000000000000000001551454007373500257400ustar00rootroot00000000000000GIF8 ! ,  libvips-8.15.1/fuzz/common_fuzzer_corpus/thumbnail_fuzzer-5111890150424576000066400000000000000000000000411454007373500256320ustar00rootroot00000000000000#?RADIANCE X1Y5 libvips-8.15.1/fuzz/common_fuzzer_corpus/thumbnail_fuzzer-5676300823429120000066400000000000000000000005721454007373500256420ustar00rootroot00000000000000II*       libvips-8.15.1/fuzz/common_fuzzer_corpus/thumbnail_fuzzer-5718717719117824000066400000000000000000000020321454007373500256550ustar00rootroot00000000000000II* J Q       S libvips-8.15.1/fuzz/common_fuzzer_corpus/thumbnail_fuzzer-5741423734816768000066400000000000000000000040051454007373500256570ustar00rootroot00000000000000II*       S k libvips-8.15.1/fuzz/common_fuzzer_corpus/webpsave_buffer_fuzzer-5207224829345792000066400000000000000000000002461454007373500270370ustar00rootroot00000000000000RIFFWEBPVP8L/0? pڶ\ extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) { vips_concurrency_set(1); return 0; } extern "C" int LLVMFuzzerTestOneInput(const guint8 *data, size_t size) { VipsImage *image; void *buf; size_t len; if (size > 100 * 1024 * 1024) return 0; if (!(image = vips_image_new_from_buffer(data, size, "", nullptr))) return 0; if (image->Xsize > 100 || image->Ysize > 100 || image->Bands > 4) { g_object_unref(image); return 0; } if (vips_gifsave_buffer(image, &buf, &len, nullptr)) { g_object_unref(image); return 0; } g_free(buf); g_object_unref(image); return 0; } libvips-8.15.1/fuzz/jpegsave_buffer_fuzzer.cc000066400000000000000000000011731454007373500213370ustar00rootroot00000000000000#include extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) { vips_concurrency_set(1); return 0; } extern "C" int LLVMFuzzerTestOneInput(const guint8 *data, size_t size) { VipsImage *image; void *buf; size_t len; if (size > 100 * 1024 * 1024) return 0; if (!(image = vips_image_new_from_buffer(data, size, "", nullptr))) return 0; if (image->Xsize > 100 || image->Ysize > 100 || image->Bands > 4) { g_object_unref(image); return 0; } if (vips_jpegsave_buffer(image, &buf, &len, nullptr)) { g_object_unref(image); return 0; } g_free(buf); g_object_unref(image); return 0; } libvips-8.15.1/fuzz/jpegsave_file_fuzzer.cc000066400000000000000000000017131454007373500210050ustar00rootroot00000000000000#include extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) { vips_concurrency_set(1); return 0; } static int test_one_file(const char *name) { VipsImage *image; void *buf; size_t len; if (!(image = vips_image_new_from_file(name, "access", VIPS_ACCESS_SEQUENTIAL, nullptr))) return 0; if (image->Xsize > 100 || image->Ysize > 100 || image->Bands > 4) { g_object_unref(image); return 0; } if (vips_jpegsave_buffer(image, &buf, &len, nullptr)) { g_object_unref(image); return 0; } g_free(buf); g_object_unref(image); return 0; } extern "C" int LLVMFuzzerTestOneInput(const guint8 *data, size_t size) { char *name; if (size > 100 * 1024 * 1024) return 0; if (!(name = vips__temp_name("%s"))) return 0; if (!g_file_set_contents(name, (const char *) data, size, nullptr) || test_one_file(name)) { g_unlink(name); g_free(name); return 0; } g_unlink(name); g_free(name); return 0; } libvips-8.15.1/fuzz/meson.build000066400000000000000000000027051454007373500164320ustar00rootroot00000000000000fuzz_deps = libvips_deps # Links in a static library provided by OSS-Fuzz, else a standalone driver. # https://google.github.io/oss-fuzz/getting-started/new-project-guide/#buildsh-script-environment fuzzing_engine = cpp.find_library('FuzzingEngine', required: false) if fuzzing_engine.found() fuzz_deps += fuzzing_engine else standalone_engine = static_library('standalone_engine', 'StandaloneFuzzTargetMain.c' ) fuzz_deps += declare_dependency(link_with: standalone_engine) endif fuzz_progs = [ 'jpegsave_file_fuzzer', 'jpegsave_buffer_fuzzer', 'pngsave_buffer_fuzzer', 'webpsave_buffer_fuzzer', 'gifsave_buffer_fuzzer', 'sharpen_fuzzer', 'thumbnail_fuzzer', 'smartcrop_fuzzer', 'mosaic_fuzzer' ] fuzz_execs = [] foreach fuzz_prog : fuzz_progs fuzz_execs += executable(fuzz_prog, fuzz_prog + '.cc', dependencies: [libvips_dep, fuzz_deps] ) endforeach # If the FuzzingEngine isn't available, build the unit tests to be run on CI if not fuzzing_engine.found() test_fuzz = configure_file( input: 'test_fuzz.sh', output: 'test_fuzz.sh', copy: true, ) test( 'fuzz', test_fuzz, workdir: meson.current_build_dir(), depends: [ fuzz_execs, ], # Increase the timeout as running the tests with sanitizers # enabled could be slower than the default 30 seconds. timeout: 60, ) endif libvips-8.15.1/fuzz/mosaic_fuzzer.cc000066400000000000000000000026221454007373500174550ustar00rootroot00000000000000#include #include #ifdef __GNUC__ #define PACK(...) __VA_ARGS__ __attribute__((__packed__)) #elif defined(_MSC_VER) #define PACK(...) __pragma(pack(push, 1)) __VA_ARGS__ __pragma(pack(pop)) #else #define PACK(...) __VA_ARGS__ #endif PACK(struct mosaic_opt { guint8 dir : 1; guint16 xref; guint16 yref; guint16 xsec; guint16 ysec; }); extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) { vips_concurrency_set(1); return 0; } extern "C" int LLVMFuzzerTestOneInput(const guint8 *data, size_t size) { VipsImage *ref, *sec, *out; mosaic_opt opt = {}; double d; if (size < sizeof(mosaic_opt)) return 0; if (size > 100 * 1024 * 1024) return 0; /* The tail of `data` is treated as mosaic configuration */ size -= sizeof(mosaic_opt); memcpy(&opt, data + size, sizeof(mosaic_opt)); /* Remainder of input is the image */ if (!(ref = vips_image_new_from_buffer(data, size, "", nullptr))) return 0; if (ref->Xsize > 100 || ref->Ysize > 100 || ref->Bands > 4) { g_object_unref(ref); return 0; } if (vips_rot180(ref, &sec, nullptr)) { g_object_unref(ref); return 0; } if (vips_mosaic(ref, sec, &out, (VipsDirection) opt.dir, opt.xref, opt.yref, opt.xsec, opt.ysec, nullptr)) { g_object_unref(sec); g_object_unref(ref); return 0; } vips_max(out, &d, nullptr); g_object_unref(out); g_object_unref(sec); g_object_unref(ref); return 0; } libvips-8.15.1/fuzz/oss_fuzz_build.sh000077500000000000000000000121121454007373500176610ustar00rootroot00000000000000#!/bin/bash -eu export PKG_CONFIG="pkg-config --static" export PKG_CONFIG_PATH="$WORK/lib/pkgconfig" export CPPFLAGS="-I$WORK/include" export LDFLAGS="-L$WORK/lib" # libz pushd $SRC/zlib ./configure --static --prefix=$WORK make -j$(nproc) all make install popd # libexif pushd $SRC/libexif autoreconf -fi ./configure \ --enable-static \ --disable-shared \ --disable-nls \ --disable-docs \ --disable-dependency-tracking \ --prefix=$WORK make -j$(nproc) make install popd # lcms pushd $SRC/lcms ./autogen.sh ./configure \ --enable-static \ --disable-shared \ --disable-dependency-tracking \ --prefix=$WORK make -j$(nproc) make install popd # aom pushd $SRC/aom mkdir -p build/linux cd build/linux extra_libaom_flags='-DAOM_MAX_ALLOCABLE_MEMORY=536870912 -DDO_RANGE_CHECK_CLAMP=1' cmake \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_INSTALL_PREFIX=$WORK \ -DCONFIG_PIC=1 \ -DENABLE_EXAMPLES=0 \ -DENABLE_DOCS=0 \ -DENABLE_TESTS=0 \ -DENABLE_TOOLS=0 \ -DCONFIG_SIZE_LIMIT=1 \ -DDECODE_HEIGHT_LIMIT=12288 \ -DDECODE_WIDTH_LIMIT=12288 \ -DAOM_EXTRA_C_FLAGS="$extra_libaom_flags" \ -DAOM_EXTRA_CXX_FLAGS="$extra_libaom_flags" \ -DAOM_TARGET_CPU=generic \ ../../ make clean make -j$(nproc) make install popd # libheif pushd $SRC/libheif cmake \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_INSTALL_PREFIX=$WORK \ -DBUILD_SHARED_LIBS=FALSE \ -DWITH_EXAMPLES=FALSE \ -DENABLE_PLUGIN_LOADING=FALSE \ . make -j$(nproc) make install popd # libjpeg-turbo pushd $SRC/libjpeg-turbo cmake \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_INSTALL_PREFIX=$WORK \ -DENABLE_STATIC=TRUE \ -DENABLE_SHARED=FALSE \ -DWITH_TURBOJPEG=FALSE \ . make -j$(nproc) make install popd # libpng pushd $SRC/libpng sed -ie 's/option WARNING /& disabled/' scripts/pnglibconf.dfa autoreconf -fi ./configure \ --prefix=$WORK \ --disable-shared \ --disable-dependency-tracking make -j$(nproc) make install popd # libspng pushd $SRC/libspng meson setup build --prefix=$WORK --libdir=lib --default-library=static --buildtype=debugoptimized \ -Dstatic_zlib=true ninja -C build ninja -C build install popd # libwebp pushd $SRC/libwebp autoreconf -fi ./configure \ --enable-libwebpdemux \ --enable-libwebpmux \ --disable-shared \ --disable-jpeg \ --disable-tiff \ --disable-gif \ --disable-wic \ --disable-threading \ --disable-dependency-tracking \ --prefix=$WORK make -j$(nproc) make install popd # libtiff ... a bug in libtiff master as of 20 Nov 2019 means we have to # explicitly disable lzma pushd $SRC/libtiff autoreconf -fi ./configure \ --disable-lzma \ --disable-shared \ --disable-dependency-tracking \ --prefix=$WORK make -j$(nproc) make install popd # libimagequant pushd $SRC/libimagequant meson setup build --prefix=$WORK --libdir=lib --default-library=static --buildtype=debugoptimized ninja -C build ninja -C build install popd # cgif pushd $SRC/cgif meson setup build --prefix=$WORK --libdir=lib --default-library=static --buildtype=debugoptimized ninja -C build ninja -C build install popd # pdfium doesn't need fuzzing, but we want to fuzz the libvips/pdfium link pushd $SRC/pdfium-latest cp lib/* $WORK/lib cp -r include/* $WORK/include popd # make a pdfium.pc that libvips can use ... the version number just needs to # be higher than 4200 to satisfy libvips cat > $WORK/lib/pkgconfig/pdfium.pc << EOF prefix=$WORK exec_prefix=\${prefix} libdir=\${exec_prefix}/lib includedir=\${prefix}/include Name: pdfium Description: pdfium Version: 4901 Requires: Libs: -L\${libdir} -lpdfium Cflags: -I\${includedir} EOF # highway pushd $SRC/highway cmake \ -DCMAKE_BUILD_TYPE=RelWithDebInfo \ -DCMAKE_INSTALL_PREFIX=$WORK \ -DBUILD_SHARED_LIBS=0 \ -DBUILD_TESTING=0 \ -DHWY_ENABLE_CONTRIB=0 \ -DHWY_ENABLE_EXAMPLES=0 \ -DHWY_ENABLE_TESTS=0 \ . make -j$(nproc) make install popd # libvips # Disable building man pages, gettext po files, tools, and tests sed -i "/subdir('man')/{N;N;N;d;}" meson.build meson setup build --prefix=$WORK --libdir=lib --prefer-static --default-library=static \ -Ddeprecated=false -Dexamples=false -Dcplusplus=false -Dmodules=disabled \ -Dcpp_link_args="$LDFLAGS -Wl,-rpath=\$ORIGIN/lib" ninja -C build ninja -C build install # Copy fuzz executables to $OUT find build/fuzz -maxdepth 1 -executable -type f -exec cp -v '{}' $OUT \; # All shared libraries needed during fuzz target execution should be inside the $OUT/lib directory mkdir -p $OUT/lib cp $WORK/lib/*.so $OUT/lib # Merge the seed corpus in a single directory, exclude files larger than 2k mkdir -p fuzz/corpus find \ $SRC/afl-testcases/{gif*,jpeg*,png,tiff,webp}/full/images \ fuzz/*_fuzzer_corpus \ test/test-suite/images \ -type f -size -2k \ -exec bash -c 'hash=($(sha1sum {})); mv {} fuzz/corpus/$hash' \; zip -jrq $OUT/seed_corpus.zip fuzz/corpus # Link corpus for fuzzer in fuzz/*_fuzzer.cc; do target=$(basename "$fuzzer" .cc) ln -sf "seed_corpus.zip" "$OUT/${target}_seed_corpus.zip" done # Copy options and dictionary files to $OUT find fuzz -name '*_fuzzer.dict' -exec cp -v '{}' $OUT \; find fuzz -name '*_fuzzer.options' -exec cp -v '{}' $OUT \; libvips-8.15.1/fuzz/pngsave_buffer_fuzzer.cc000066400000000000000000000011721454007373500211750ustar00rootroot00000000000000#include extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) { vips_concurrency_set(1); return 0; } extern "C" int LLVMFuzzerTestOneInput(const guint8 *data, size_t size) { VipsImage *image; void *buf; size_t len; if (size > 100 * 1024 * 1024) return 0; if (!(image = vips_image_new_from_buffer(data, size, "", nullptr))) return 0; if (image->Xsize > 100 || image->Ysize > 100 || image->Bands > 4) { g_object_unref(image); return 0; } if (vips_pngsave_buffer(image, &buf, &len, nullptr)) { g_object_unref(image); return 0; } g_free(buf); g_object_unref(image); return 0; } libvips-8.15.1/fuzz/sharpen_fuzzer.cc000066400000000000000000000012131454007373500176350ustar00rootroot00000000000000#include extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) { vips_concurrency_set(1); return 0; } extern "C" int LLVMFuzzerTestOneInput(const guint8 *data, size_t size) { VipsImage *image, *out; double d; if (size > 100 * 1024 * 1024) return 0; if (!(image = vips_image_new_from_buffer(data, size, "", nullptr))) return 0; if (image->Xsize > 100 || image->Ysize > 100 || image->Bands > 4) { g_object_unref(image); return 0; } if (vips_sharpen(image, &out, nullptr)) { g_object_unref(image); return 0; } vips_avg(out, &d, nullptr); g_object_unref(out); g_object_unref(image); return 0; } libvips-8.15.1/fuzz/smartcrop_fuzzer.cc000066400000000000000000000012251454007373500202120ustar00rootroot00000000000000#include extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) { vips_concurrency_set(1); return 0; } extern "C" int LLVMFuzzerTestOneInput(const guint8 *data, size_t size) { VipsImage *image, *out; double d; if (size > 100 * 1024 * 1024) return 0; if (!(image = vips_image_new_from_buffer(data, size, "", nullptr))) return 0; if (image->Xsize > 100 || image->Ysize > 100 || image->Bands > 4) { g_object_unref(image); return 0; } if (vips_smartcrop(image, &out, 32, 32, nullptr)) { g_object_unref(image); return 0; } vips_min(out, &d, nullptr); g_object_unref(out); g_object_unref(image); return 0; } libvips-8.15.1/fuzz/test_fuzz.sh000077500000000000000000000005531454007373500166630ustar00rootroot00000000000000#!/bin/sh #set -x set -e . ../test/variables.sh # Hide all warning messages from vips. export VIPS_WARNING=0 ret=0 for fuzzer in *_fuzzer; do for file in $top_srcdir/fuzz/common_fuzzer_corpus/*; do exit_code=0 ./$fuzzer $file || exit_code=$? if [ $exit_code -ne 0 ]; then echo FAIL $fuzzer $file ret=1 fi done done exit $ret libvips-8.15.1/fuzz/thumbnail_fuzzer.cc000066400000000000000000000012271454007373500201650ustar00rootroot00000000000000#include extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) { vips_concurrency_set(1); return 0; } extern "C" int LLVMFuzzerTestOneInput(const guint8 *data, size_t size) { VipsImage *image, *out; double d; if (size > 100 * 1024 * 1024) return 0; if (!(image = vips_image_new_from_buffer(data, size, "", nullptr))) return 0; if (image->Xsize > 100 || image->Ysize > 100 || image->Bands > 4) { g_object_unref(image); return 0; } if (vips_thumbnail_image(image, &out, 42, nullptr)) { g_object_unref(image); return 0; } vips_avg(out, &d, nullptr); g_object_unref(out); g_object_unref(image); return 0; } libvips-8.15.1/fuzz/webpsave_buffer_fuzzer.cc000066400000000000000000000011731454007373500213470ustar00rootroot00000000000000#include extern "C" int LLVMFuzzerInitialize(int *argc, char ***argv) { vips_concurrency_set(1); return 0; } extern "C" int LLVMFuzzerTestOneInput(const guint8 *data, size_t size) { VipsImage *image; void *buf; size_t len; if (size > 100 * 1024 * 1024) return 0; if (!(image = vips_image_new_from_buffer(data, size, "", nullptr))) return 0; if (image->Xsize > 100 || image->Ysize > 100 || image->Bands > 4) { g_object_unref(image); return 0; } if (vips_webpsave_buffer(image, &buf, &len, nullptr)) { g_object_unref(image); return 0; } g_free(buf); g_object_unref(image); return 0; } libvips-8.15.1/libvips/000077500000000000000000000000001454007373500147365ustar00rootroot00000000000000libvips-8.15.1/libvips/Vips-8.0.metadata000066400000000000000000000031641454007373500176700ustar00rootroot00000000000000Object.new_from_string.object_class type="GLib.ObjectClass" Object.print_summary_class.klass type="GLib.ObjectClass" ArgumentClass.object_class type="GLib.ObjectClass" class_find type="GLib.ObjectClass" ClassMapFn.cls type="GLib.ObjectClass" ArgumentClassMapFn.object_class type="GLib.ObjectClass" ArgumentTable type="GLib.HashTable" ArrayDouble.newv skip=false ArrayImage.newv skip=false ArrayInt.newv skip=false Image.*#method skip=false Image.eval#virtual_method name="eval_impl" Image.invalidate#virtual_method name="invalidate_impl" Image.minimise#virtual_method name="minimise_impl" Image.posteval#virtual_method name="posteval_impl" Image.preeval#virtual_method name="preeval_impl" Image.written#virtual_method name="written_impl" Image.written#virtual_method.result out Image.set_area.free_fn closure=-1 destroy=-1 Object.close#virtual_method name="close_impl" Object.postbuild#virtual_method name="postbuild_impl" Object.postclose#virtual_method name="postclose_impl" Object.preclose#virtual_method name="preclose_impl" Object.preclose#method name="do_preclose" Object.sanity#virtual_method name="sanity_impl" _object_set_member name="set_member" parent="Vips.Object" symbol_type="method" instance_idx=0 value_set_blob.free_fn closure=-1 destroy=-1 value_set_area.free_fn closure=-1 destroy=-1 Area.new.free_fn closure=-1 destroy=-1 cache_* skip=false name="cache_(.+)" parent="Vips.Cache" col_* skip=false name="col_(.+)" parent="Vips.ColorUtils" tracked_* skip=false name="tracked_(.+)" parent="Vips.Tracked" check_* skip=false parent="Vips.Utils" value_* skip=false name="value_(.+)" parent="Vips.Value" libvips-8.15.1/libvips/arithmetic/000077500000000000000000000000001454007373500170675ustar00rootroot00000000000000libvips-8.15.1/libvips/arithmetic/abs.c000066400000000000000000000133571454007373500200110ustar00rootroot00000000000000/* absolute value * * Copyright: 1990, N. Dessipris, based on im_powtra() * Author: Nicos Dessipris * Written on: 02/05/1990 * Modified on: * 5/5/93 J.Cupitt * - adapted from im_lintra to work with partial images * - complex and signed support added * 30/6/93 JC * - adapted for partial v2 * - ANSI conversion * - spe29873r6k3h()**!@lling errors removed * 9/2/95 JC * - adapted for im_wrap... * 20/6/02 JC * - tiny speed up * 8/12/06 * - add liboil support * 28/8/09 * - gtkdoc * - tiny polish * 31/7/10 * - remove liboil * 6/11/11 * - redone as a class * 3/12/13 * - add orc, though the speed improvement vs. gcc's auto-vectorizer * seems very marginal * 21/2/19 * - move orc init to first use of abs */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "unary.h" typedef VipsUnary VipsAbs; typedef VipsUnaryClass VipsAbsClass; G_DEFINE_TYPE(VipsAbs, vips_abs, VIPS_TYPE_UNARY); static int vips_abs_build(VipsObject *object) { VipsUnary *unary = (VipsUnary *) object; if (unary->in && vips_band_format_isuint(unary->in->BandFmt)) return vips_unary_copy(unary); if (VIPS_OBJECT_CLASS(vips_abs_parent_class)->build(object)) return -1; return 0; } /* Integer abs operation: just test and negate. */ #define ABS_INT(TYPE) \ { \ TYPE *restrict p = (TYPE *) in[0]; \ TYPE *restrict q = (TYPE *) out; \ int x; \ \ for (x = 0; x < sz; x++) \ q[x] = p[x] < 0 ? 0 - p[x] : p[x]; \ } /* Float abs operation: call fabs(). */ #define ABS_FLOAT(TYPE) \ { \ TYPE *restrict p = (TYPE *) in[0]; \ TYPE *restrict q = (TYPE *) out; \ int x; \ \ for (x = 0; x < sz; x++) \ q[x] = VIPS_FABS(p[x]); \ } /* Complex abs operation: calculate modulus. */ #ifdef HAVE_HYPOT #define ABS_COMPLEX(TYPE) \ { \ TYPE *restrict p = (TYPE *) in[0]; \ TYPE *restrict q = (TYPE *) out; \ int x; \ \ for (x = 0; x < sz; x++) { \ q[x] = hypot(p[0], p[1]); \ p += 2; \ } \ } #else /*HAVE_HYPOT*/ #define ABS_COMPLEX(TYPE) \ { \ TYPE *restrict p = (TYPE *) in[0]; \ TYPE *restrict q = (TYPE *) out; \ int x; \ \ for (x = 0; x < sz; x++) { \ double rp = p[0]; \ double ip = p[1]; \ double abs_rp = VIPS_FABS(rp); \ double abs_ip = VIPS_FABS(ip); \ \ if (abs_rp > abs_ip) { \ double temp = ip / rp; \ \ q[x] = abs_rp * sqrt(1.0 + temp * temp); \ } \ else { \ double temp = rp / ip; \ \ q[x] = abs_ip * sqrt(1.0 + temp * temp); \ } \ \ p += 2; \ } \ } #endif /*HAVE_HYPOT*/ static void vips_abs_buffer(VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width) { VipsImage *im = arithmetic->ready[0]; const int bands = vips_image_get_bands(im); int sz = width * bands; switch (vips_image_get_format(im)) { case VIPS_FORMAT_CHAR: ABS_INT(signed char); break; case VIPS_FORMAT_SHORT: ABS_INT(signed short); break; case VIPS_FORMAT_INT: ABS_INT(signed int); break; case VIPS_FORMAT_FLOAT: ABS_FLOAT(float); break; case VIPS_FORMAT_DOUBLE: ABS_FLOAT(double); break; case VIPS_FORMAT_COMPLEX: ABS_COMPLEX(float); break; case VIPS_FORMAT_DPCOMPLEX: ABS_COMPLEX(double); break; default: g_assert_not_reached(); } } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX /* Format doesn't change with abs, other than complex -> real. */ static const VipsBandFormat vips_abs_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, C, US, S, UI, I, F, F, D, D }; static void vips_abs_class_init(VipsAbsClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class); object_class->nickname = "abs"; object_class->description = _("absolute value of an image"); object_class->build = vips_abs_build; aclass->process_line = vips_abs_buffer; vips_arithmetic_set_format_table(aclass, vips_abs_format_table); } static void vips_abs_init(VipsAbs *abs) { } /** * vips_abs: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * This operation finds the absolute value of an image. It does a copy for * unsigned integer types, negate for negative values in * signed integer types, fabs(3) for * float types, and calculates modulus for complex * types. * * See also: vips_sign(). * * Returns: 0 on success, -1 on error */ int vips_abs(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("abs", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/add.c000066400000000000000000000157771454007373500200040ustar00rootroot00000000000000/* add operation * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 02/05/1990 * Modified on: * 29/4/93 J.Cupitt * - now works for partial images * 1/7/93 JC * - adapted for partial v2 * 9/5/95 JC * - simplified: now just handles 10 cases (instead of 50), using * im_clip2*() to help * - now uses im_wrapmany() rather than im_generate() * 31/5/96 JC * - SWAP() removed, *p++ removed * 27/9/04 * - im__cast_and_call() now matches bands as well * - ... so 1 band + 4 band image -> 4 band image * 8/12/06 * - add liboil support * 18/8/08 * - revise upcasting system * - im__cast_and_call() no longer sets bbits for you * - add gtkdoc comments * - remove separate complex case, just double size * 11/9/09 * - im__cast_and_call() becomes im__arith_binary() * - more of operation scaffold moved inside * 25/7/10 * - remove oil support again ... we'll try Orc instead * 29/10/10 * - move to VipsVector for Orc support * 28/2/11 * - argh vector int/uint was broken * 4/4/11 * - rewrite as a class * 2/12/13 * - remove vector code, gcc autovec with -O3 is now as fast */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "binary.h" typedef VipsBinary VipsAdd; typedef VipsBinaryClass VipsAddClass; G_DEFINE_TYPE(VipsAdd, vips_add, VIPS_TYPE_BINARY); #define LOOP(IN, OUT) \ { \ IN *restrict left = (IN *) in[0]; \ IN *restrict right = (IN *) in[1]; \ OUT *restrict q = (OUT *) out; \ \ for (x = 0; x < sz; x++) \ q[x] = left[x] + right[x]; \ } static void add_buffer(VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width) { VipsImage *im = arithmetic->ready[0]; /* Complex just doubles the size. */ const int sz = width * vips_image_get_bands(im) * (vips_band_format_iscomplex(vips_image_get_format(im)) ? 2 : 1); int x; /* Add all input types. Keep types here in sync with * vips_add_format_table[] below. */ switch (vips_image_get_format(im)) { case VIPS_FORMAT_UCHAR: LOOP(unsigned char, unsigned short); break; case VIPS_FORMAT_CHAR: LOOP(signed char, signed short); break; case VIPS_FORMAT_USHORT: LOOP(unsigned short, unsigned int); break; case VIPS_FORMAT_SHORT: LOOP(signed short, signed int); break; case VIPS_FORMAT_UINT: LOOP(unsigned int, unsigned int); break; case VIPS_FORMAT_INT: LOOP(signed int, signed int); break; case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_COMPLEX: LOOP(float, float); break; case VIPS_FORMAT_DOUBLE: case VIPS_FORMAT_DPCOMPLEX: LOOP(double, double); break; default: g_assert_not_reached(); } } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX /* Type promotion for addition. Sign and value preserving. Make sure these * match the case statement in add_buffer() above. */ static const VipsBandFormat vips_add_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ US, S, UI, I, UI, I, F, X, D, DX }; static void vips_add_class_init(VipsAddClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class); object_class->nickname = "add"; object_class->description = _("add two images"); aclass->process_line = add_buffer; vips_arithmetic_set_format_table(aclass, vips_add_format_table); } static void vips_add_init(VipsAdd *add) { } /** * vips_add: * @left: input image * @right: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * This operation calculates @in1 + @in2 and writes the result to @out. * * If the images differ in size, the smaller image is enlarged to match the * larger by adding zero pixels along the bottom and right. * * If the number of bands differs, one of the images * must have one band. In this case, an n-band image is formed from the * one-band image by joining n copies of the one-band image together, and then * the two n-band images are operated upon. * * The two input images are cast up to the smallest common format (see table * Smallest common format in * arithmetic), then the * following table is used to determine the output type: * * * VipsAdd type promotion * * * * input type * output type * * * * * uchar * ushort * * * char * short * * * ushort * uint * * * short * int * * * uint * uint * * * int * int * * * float * float * * * double * double * * * complex * complex * * * double complex * double complex * * * *
* * In other words, the output type is just large enough to hold the whole * range of possible values. * * See also: vips_subtract(), vips_linear(). * * Returns: 0 on success, -1 on error */ int vips_add(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("add", ap, left, right, out); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/arithmetic.c000066400000000000000000000535571454007373500214030ustar00rootroot00000000000000/* base class for all arithmetic operations * * properties: * - one output image, one or more inputs * - cast input images to match * - output is large enough to hold output values (value preserving) * - point-to-point operations (ie. each pixel depends only on the * corresponding pixel in the input) * - LUT-able: ie. arithmetic (image) can be exactly replaced by * maplut (image, arithmetic (lut)) for 8/16 bit int images */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "parithmetic.h" /** * SECTION: arithmetic * @short_description: pixel arithmetic, trig, log, statistics * @stability: Stable * @include: vips/vips.h * * These operations perform pixel arithmetic, that is, they perform an * arithmetic operation, such as addition, on every pixel in an image or a * pair of images. All (except in a few cases noted below) will work with * images of any type or any mixture of types, of any size and of any number * of bands. * * For binary operations, if the number of bands differs, one of the images * must have one band. In this case, an n-band image is formed from the * one-band image by joining n copies of the one-band image together, and then * the two n-band images are operated upon. * * In the same way, for operations that take an array constant, such as * vips_remainder_const(), you can mix single-element arrays or single-band * images freely. * * Arithmetic operations try to preserve precision by increasing the number of * bits in the output image when necessary. Generally, this follows the ANSI C * conventions for type promotion, so multiplying two * #VIPS_FORMAT_UCHAR images together, for example, produces a * #VIPS_FORMAT_USHORT image, and taking the vips_cos() of a * #VIPS_FORMAT_USHORT image produces #VIPS_FORMAT_FLOAT image. * * After processing, use vips_cast() and friends to take then format back down * again. vips_cast_uchar(), for example, will cast any image down to 8-bit * unsigned. * * Images have an *interpretation*: a meaning for the pixel values. With * #VIPS_INTERPRETATION_sRGB, for example, the first three bands will be * interpreted (for example, by a saver like vips_jpegsave()) as R, G and B, * with values in 0 - 255, and any fourth band will be interpreted as an * alpha channel. * * After arithmetic, you may wish to change the interpretation (for example to * save as 16-bit PNG). Use vips_copy() to change the interpretation without * changing pixels. * * For binary arithmetic operations, type promotion occurs in two stages. * First, the two input images are cast up to the smallest common format, * that is, the type with the smallest range that can represent the full * range of both inputs. This conversion can be represented as a table: * * * Smallest common format * * * * @in2/@in1 * uchar * char * ushort * short * uint * int * float * double * complex * double complex * * * * * uchar * ushort * short * ushort * short * uint * int * float * double * complex * double complex * * * char * short * short * short * short * int * int * float * double * complex * double complex * * * ushort * ushort * short * ushort * short * uint * int * float * double * complex * double complex * * * short * short * short * short * short * int * int * float * double * complex * double complex * * * uint * uint * int * uint * int * uint * int * float * double * complex * double complex * * * int * int * int * int * int * int * int * float * double * complex * double complex * * * float * float * float * float * float * float * float * float * double * complex * double complex * * * double * double * double * double * double * double * double * double * double * double complex * double complex * * * complex * complex * complex * complex * complex * complex * complex * complex * double complex * complex * double complex * * * double complex * double complex * double complex * double complex * double complex * double complex * double complex * double complex * double complex * double complex * double complex * * * *
* * In the second stage, the operation is performed between the two identical * types to form the output. The details vary between operations, but * generally the principle is that the output type should be large enough to * represent the whole range of possible values, except that int never becomes * float. */ G_DEFINE_ABSTRACT_TYPE(VipsArithmetic, vips_arithmetic, VIPS_TYPE_OPERATION); /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX /* For two integer types, the "largest", ie. one which can represent the * full range of both. */ static VipsBandFormat format_largest[6][6] = { /* UC C US S UI I */ /* UC */ { UC, S, US, S, UI, I }, /* C */ { S, C, I, S, I, I }, /* US */ { US, I, US, I, UI, I }, /* S */ { S, S, I, S, I, I }, /* UI */ { UI, I, UI, I, UI, I }, /* I */ { I, I, I, I, I, I } }; /* For two formats, find one which can represent the full range of both. */ static VipsBandFormat vips_format_common(VipsBandFormat a, VipsBandFormat b) { if (vips_band_format_iscomplex(a) || vips_band_format_iscomplex(b)) { if (a == VIPS_FORMAT_DPCOMPLEX || b == VIPS_FORMAT_DPCOMPLEX) return VIPS_FORMAT_DPCOMPLEX; else return VIPS_FORMAT_COMPLEX; } else if (vips_band_format_isfloat(a) || vips_band_format_isfloat(b)) { if (a == VIPS_FORMAT_DOUBLE || b == VIPS_FORMAT_DOUBLE) return VIPS_FORMAT_DOUBLE; else return VIPS_FORMAT_FLOAT; } else return format_largest[a][b]; } int vips__formatalike_vec(VipsImage **in, VipsImage **out, int n) { int i; VipsBandFormat format; g_assert(n >= 1); format = in[0]->BandFmt; for (i = 1; i < n; i++) format = vips_format_common(format, in[i]->BandFmt); for (i = 0; i < n; i++) if (in[i]->BandFmt == format) { /* Already in the right format ... just copy the image * pointer and add a ref. */ out[i] = in[i]; g_object_ref(in[i]); } else { if (vips_cast(in[i], &out[i], format, NULL)) return -1; } return 0; } int vips__sizealike_vec(VipsImage **in, VipsImage **out, int n) { int i; int width_max; int height_max; g_assert(n >= 1); width_max = in[0]->Xsize; height_max = in[0]->Ysize; for (i = 1; i < n; i++) { width_max = VIPS_MAX(width_max, in[i]->Xsize); height_max = VIPS_MAX(height_max, in[i]->Ysize); } for (i = 0; i < n; i++) if (in[i]->Xsize == width_max && in[i]->Ysize == height_max) { /* Already the right size ... just copy the image * pointer and add a ref. */ out[i] = in[i]; g_object_ref(in[i]); } else { if (vips_embed(in[i], &out[i], 0, 0, width_max, height_max, NULL)) return -1; } return 0; } /* Make an n-band image. Input 1 or n bands. */ int vips__bandup(const char *domain, VipsImage *in, VipsImage **out, int n) { VipsImage **bands; int i; int result; if (in->Bands == n) return vips_copy(in, out, NULL); if (in->Bands != 1) { vips_error(domain, _("not one band or %d bands"), n); return -1; } if (n > VIPS_MAX_COORD || n < 1) { vips_error(domain, "%s", _("bad bands")); return -1; } if (!(bands = VIPS_ARRAY(NULL, n, VipsImage *))) return -1; for (i = 0; i < n; i++) bands[i] = in; result = vips_bandjoin(bands, out, n, NULL); VIPS_FREE(bands); return result; } /* base_bands is the default minimum. * * Handy for example, if you have VipsLinear with * a 3-element vector of constants and a 1-band input image, you need to cast * the image up to three bands. */ int vips__bandalike_vec(const char *domain, VipsImage **in, VipsImage **out, int n, int base_bands) { int i; int max_bands; VipsInterpretation interpretation; g_assert(n >= 1); /* We try to set the interpretation of the output images from the * interpretation of the n-band input. For example, if we are matching * a set of BW images to an RGB image, we want the BW images to be * tagged as RGB. */ max_bands = base_bands; interpretation = VIPS_INTERPRETATION_ERROR; for (i = 0; i < n; i++) { /* >= so we can pick up interpretation if base_bands is equal * to the number of bands of the largest image. */ if (in[i]->Bands >= max_bands) { max_bands = in[i]->Bands; interpretation = in[i]->Type; } } for (i = 0; i < n; i++) if (in[i]->Bands == max_bands) { /* Already the right number of bands ... just copy the * image pointer and add a ref. */ out[i] = in[i]; g_object_ref(in[i]); } else { if (vips__bandup(domain, in[i], &out[i], max_bands)) return -1; if (interpretation != VIPS_INTERPRETATION_ERROR) out[i]->Type = interpretation; } return 0; } int vips__formatalike(VipsImage *in1, VipsImage *in2, VipsImage **out1, VipsImage **out2) { VipsImage *in[2]; VipsImage *out[2]; in[0] = in1; in[1] = in2; if (vips__formatalike_vec(in, out, 2)) return -1; *out1 = out[0]; *out2 = out[1]; return 0; } int vips__sizealike(VipsImage *in1, VipsImage *in2, VipsImage **out1, VipsImage **out2) { VipsImage *in[2]; VipsImage *out[2]; in[0] = in1; in[1] = in2; if (vips__sizealike_vec(in, out, 2)) return -1; *out1 = out[0]; *out2 = out[1]; return 0; } int vips__bandalike(const char *domain, VipsImage *in1, VipsImage *in2, VipsImage **out1, VipsImage **out2) { VipsImage *in[2]; VipsImage *out[2]; in[0] = in1; in[1] = in2; if (vips__bandalike_vec(domain, in, out, 2, 1)) return -1; *out1 = out[0]; *out2 = out[1]; return 0; } /* Our sequence value. */ typedef struct { VipsArithmetic *arithmetic; /* Set of input regions. */ VipsRegion **ir; /* For each input, an input pointer. */ VipsPel **p; } VipsArithmeticSequence; static int vips_arithmetic_stop(void *vseq, void *a, void *b) { VipsArithmeticSequence *seq = (VipsArithmeticSequence *) vseq; if (seq->ir) { int i; for (i = 0; seq->ir[i]; i++) VIPS_UNREF(seq->ir[i]); VIPS_FREE(seq->ir); } VIPS_FREE(seq->p); VIPS_FREE(seq); return 0; } static void * vips_arithmetic_start(VipsImage *out, void *a, void *b) { VipsImage **in = (VipsImage **) a; VipsArithmetic *arithmetic = (VipsArithmetic *) b; VipsArithmeticSequence *seq; int i, n; if (!(seq = VIPS_NEW(NULL, VipsArithmeticSequence))) return NULL; seq->arithmetic = arithmetic; seq->ir = NULL; seq->p = NULL; /* How many images? */ for (n = 0; in[n]; n++) ; /* Allocate space for region array. */ if (!(seq->ir = VIPS_ARRAY(NULL, n + 1, VipsRegion *))) { vips_arithmetic_stop(seq, NULL, NULL); return NULL; } /* Create a set of regions. */ for (i = 0; i < n; i++) if (!(seq->ir[i] = vips_region_new(in[i]))) { vips_arithmetic_stop(seq, NULL, NULL); return NULL; } seq->ir[n] = NULL; /* Input pointers. */ if (!(seq->p = VIPS_ARRAY(NULL, n + 1, VipsPel *))) { vips_arithmetic_stop(seq, NULL, NULL); return NULL; } return seq; } static int vips_arithmetic_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsArithmeticSequence *seq = (VipsArithmeticSequence *) vseq; VipsRegion **ir = seq->ir; VipsArithmetic *arithmetic = VIPS_ARITHMETIC(b); VipsArithmeticClass *class = VIPS_ARITHMETIC_GET_CLASS(arithmetic); VipsRect *r = &out_region->valid; VipsPel *q; int i, y; /* Prepare all input regions and make buffer pointers. */ if (vips_reorder_prepare_many(out_region->im, ir, r)) return -1; for (i = 0; ir[i]; i++) seq->p[i] = (VipsPel *) VIPS_REGION_ADDR(ir[i], r->left, r->top); seq->p[i] = NULL; q = (VipsPel *) VIPS_REGION_ADDR(out_region, r->left, r->top); VIPS_GATE_START("vips_arithmetic_gen: work"); for (y = 0; y < r->height; y++) { class->process_line(arithmetic, q, seq->p, r->width); for (i = 0; ir[i]; i++) seq->p[i] += VIPS_REGION_LSKIP(ir[i]); q += VIPS_REGION_LSKIP(out_region); } VIPS_GATE_STOP("vips_arithmetic_gen: work"); VIPS_COUNT_PIXELS(out_region, VIPS_OBJECT_CLASS(class)->nickname); return 0; } static int vips_arithmetic_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsArithmetic *arithmetic = VIPS_ARITHMETIC(object); VipsArithmeticClass *aclass = VIPS_ARITHMETIC_GET_CLASS(arithmetic); VipsImage **decode; VipsImage **format; VipsImage **band; VipsImage **size; int i; #ifdef DEBUG printf("vips_arithmetic_build: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ if (VIPS_OBJECT_CLASS(vips_arithmetic_parent_class)->build(object)) return -1; g_object_set(arithmetic, "out", vips_image_new(), NULL); decode = (VipsImage **) vips_object_local_array(object, arithmetic->n); format = (VipsImage **) vips_object_local_array(object, arithmetic->n); band = (VipsImage **) vips_object_local_array(object, arithmetic->n); size = (VipsImage **) vips_object_local_array(object, arithmetic->n); /* Decode RAD/LABQ etc. */ for (i = 0; i < arithmetic->n; i++) if (vips_image_decode(arithmetic->in[i], &decode[i])) return -1; /* Cast our input images up to a common format, bands and size. */ if (vips__formatalike_vec(decode, format, arithmetic->n) || vips__bandalike_vec(class->nickname, format, band, arithmetic->n, arithmetic->base_bands) || vips__sizealike_vec(band, size, arithmetic->n)) return -1; /* Keep a copy of the processed images here for subclasses. */ arithmetic->ready = size; if (vips_image_pipeline_array(arithmetic->out, VIPS_DEMAND_STYLE_THINSTRIP, arithmetic->ready)) return -1; arithmetic->out->Bands = arithmetic->ready[0]->Bands; if (arithmetic->format != VIPS_FORMAT_NOTSET) arithmetic->out->BandFmt = arithmetic->format; else arithmetic->out->BandFmt = aclass->format_table[arithmetic->ready[0]->BandFmt]; if (vips_image_generate(arithmetic->out, vips_arithmetic_start, vips_arithmetic_gen, vips_arithmetic_stop, arithmetic->ready, arithmetic)) return -1; return 0; } static void vips_arithmetic_class_init(VipsArithmeticClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "arithmetic"; vobject_class->description = _("arithmetic operations"); vobject_class->build = vips_arithmetic_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "out", 100, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsArithmetic, out)); } static void vips_arithmetic_init(VipsArithmetic *arithmetic) { arithmetic->base_bands = 1; arithmetic->format = VIPS_FORMAT_NOTSET; } void vips_arithmetic_set_format_table(VipsArithmeticClass *class, const VipsBandFormat *format_table) { g_assert(!class->format_table); class->format_table = format_table; } /* Called from iofuncs to init all operations in this dir. Use a plugin system * instead? */ void vips_arithmetic_operation_init(void) { extern GType vips_add_get_type(void); extern GType vips_sum_get_type(void); extern GType vips_subtract_get_type(void); extern GType vips_multiply_get_type(void); extern GType vips_divide_get_type(void); extern GType vips_invert_get_type(void); extern GType vips_avg_get_type(void); extern GType vips_min_get_type(void); extern GType vips_max_get_type(void); extern GType vips_deviate_get_type(void); extern GType vips_linear_get_type(void); extern GType vips_math_get_type(void); extern GType vips_abs_get_type(void); extern GType vips_sign_get_type(void); extern GType vips_stats_get_type(void); extern GType vips_hist_find_get_type(void); extern GType vips_hist_find_ndim_get_type(void); extern GType vips_hist_find_indexed_get_type(void); extern GType vips_hough_line_get_type(void); extern GType vips_hough_circle_get_type(void); extern GType vips_project_get_type(void); extern GType vips_profile_get_type(void); extern GType vips_measure_get_type(void); extern GType vips_getpoint_get_type(void); extern GType vips_round_get_type(void); extern GType vips_relational_get_type(void); extern GType vips_relational_const_get_type(void); extern GType vips_remainder_get_type(void); extern GType vips_remainder_const_get_type(void); extern GType vips_boolean_get_type(void); extern GType vips_boolean_const_get_type(void); extern GType vips_math2_get_type(void); extern GType vips_math2_const_get_type(void); extern GType vips_complex_get_type(void); extern GType vips_complex2_get_type(void); extern GType vips_complexget_get_type(void); extern GType vips_complexform_get_type(void); extern GType vips_find_trim_get_type(void); vips_add_get_type(); vips_sum_get_type(); vips_subtract_get_type(); vips_multiply_get_type(); vips_divide_get_type(); vips_invert_get_type(); vips_avg_get_type(); vips_min_get_type(); vips_max_get_type(); vips_deviate_get_type(); vips_linear_get_type(); vips_math_get_type(); vips_abs_get_type(); vips_sign_get_type(); vips_stats_get_type(); vips_hist_find_get_type(); vips_hist_find_ndim_get_type(); vips_hist_find_indexed_get_type(); vips_hough_line_get_type(); vips_hough_circle_get_type(); vips_project_get_type(); vips_profile_get_type(); vips_measure_get_type(); vips_getpoint_get_type(); vips_round_get_type(); vips_relational_get_type(); vips_relational_const_get_type(); vips_remainder_get_type(); vips_remainder_const_get_type(); vips_boolean_get_type(); vips_boolean_const_get_type(); vips_math2_get_type(); vips_math2_const_get_type(); vips_complex_get_type(); vips_complex2_get_type(); vips_complexget_get_type(); vips_complexform_get_type(); vips_find_trim_get_type(); } libvips-8.15.1/libvips/arithmetic/avg.c000066400000000000000000000130361454007373500200130ustar00rootroot00000000000000/* avg ... average value of image * * Copyright: 1990, J. Cupitt * * Author: J. Cupitt * Written on: 02/08/1990 * Modified on: * 5/5/93 JC * - now does partial images * - less likely to overflow * 1/7/93 JC * - adapted for partial v2 * - ANSI C * 21/2/95 JC * - modernised again * 11/5/95 JC * - oops! return( NULL ) in im_avg(), instead of return( -1 ) * 20/6/95 JC * - now returns double * 13/1/05 * - use 64 bit arithmetic * 8/12/06 * - add liboil support * 18/8/09 * - gtkdoc, minor reformatting * 7/9/09 * - rewrite for im__wrapiter() * - add complex case (needed for im_max()) * 8/9/09 * - wrapscan stuff moved here * 31/7/10 * - remove liboil * 24/8/11 * - rewrite as a class * 12/9/14 * - oops, fix complex avg */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "statistic.h" typedef struct _VipsAvg { VipsStatistic parent_instance; double sum; double out; } VipsAvg; typedef VipsStatisticClass VipsAvgClass; G_DEFINE_TYPE(VipsAvg, vips_avg, VIPS_TYPE_STATISTIC); static int vips_avg_build(VipsObject *object) { VipsStatistic *statistic = VIPS_STATISTIC(object); VipsAvg *avg = (VipsAvg *) object; gint64 vals; double average; if (VIPS_OBJECT_CLASS(vips_avg_parent_class)->build(object)) return -1; vals = (gint64) vips_image_get_width(statistic->in) * vips_image_get_height(statistic->in) * vips_image_get_bands(statistic->in); average = avg->sum / vals; g_object_set(object, "out", average, NULL); return 0; } /* Start function: allocate space for a double in which we can accumulate the * sum for this thread. */ static void * vips_avg_start(VipsStatistic *statistic) { return (void *) g_new0(double, 1); } /* Stop function. Add this little sum to the main sum. */ static int vips_avg_stop(VipsStatistic *statistic, void *seq) { VipsAvg *avg = (VipsAvg *) statistic; double *sum = (double *) seq; avg->sum += *sum; g_free(seq); return 0; } /* Sum pels in this section. */ #define LOOP(TYPE) \ { \ TYPE *p = (TYPE *) in; \ \ for (i = 0; i < sz; i++) \ m += p[i]; \ } #define CLOOP(TYPE) \ { \ TYPE *p = (TYPE *) in; \ \ for (i = 0; i < sz; i++) { \ double mod = sqrt(p[0] * p[0] + p[1] * p[1]); \ \ m += mod; \ p += 2; \ } \ } /* Loop over region, accumulating a sum in *tmp. */ static int vips_avg_scan(VipsStatistic *statistic, void *seq, int x, int y, void *in, int n) { const int sz = n * vips_image_get_bands(statistic->in); double *sum = (double *) seq; int i; double m; m = *sum; /* Now generate code for all types. */ switch (vips_image_get_format(statistic->in)) { case VIPS_FORMAT_UCHAR: LOOP(unsigned char); break; case VIPS_FORMAT_CHAR: LOOP(signed char); break; case VIPS_FORMAT_USHORT: LOOP(unsigned short); break; case VIPS_FORMAT_SHORT: LOOP(signed short); break; case VIPS_FORMAT_UINT: LOOP(unsigned int); break; case VIPS_FORMAT_INT: LOOP(signed int); break; case VIPS_FORMAT_FLOAT: LOOP(float); break; case VIPS_FORMAT_DOUBLE: LOOP(double); break; case VIPS_FORMAT_COMPLEX: CLOOP(float); break; case VIPS_FORMAT_DPCOMPLEX: CLOOP(double); break; default: g_assert_not_reached(); } *sum = m; return 0; } static void vips_avg_class_init(VipsAvgClass *class) { GObjectClass *gobject_class = (GObjectClass *) class; VipsObjectClass *object_class = (VipsObjectClass *) class; VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "avg"; object_class->description = _("find image average"); object_class->build = vips_avg_build; sclass->start = vips_avg_start; sclass->scan = vips_avg_scan; sclass->stop = vips_avg_stop; VIPS_ARG_DOUBLE(class, "out", 2, _("Output"), _("Output value"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsAvg, out), -INFINITY, INFINITY, 0.0); } static void vips_avg_init(VipsAvg *avg) { } /** * vips_avg: (method) * @in: input #VipsImage * @out: (out): output pixel average * @...: %NULL-terminated list of optional named arguments * * This operation finds the average value in an image. It operates on all * bands of the input image: use vips_stats() if you need to calculate an * average for each band. For complex images, return the average modulus. * * See also: vips_stats(), vips_bandmean(), vips_deviate(), vips_rank() * * Returns: 0 on success, -1 on error */ int vips_avg(VipsImage *in, double *out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("avg", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/binary.c000066400000000000000000000052521454007373500205230ustar00rootroot00000000000000/* base class for all binary operations * * 13/3/11 * - argh, forgot to make a private array for the inputs * 16/5/11 * - added sizealike * 30/10/11 * - moe most functionality into arithmetic.c */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "binary.h" G_DEFINE_ABSTRACT_TYPE(VipsBinary, vips_binary, VIPS_TYPE_ARITHMETIC); static int vips_binary_build(VipsObject *object) { VipsArithmetic *arithmetic = VIPS_ARITHMETIC(object); VipsBinary *binary = VIPS_BINARY(object); arithmetic->n = 2; arithmetic->in = (VipsImage **) vips_object_local_array(object, 2); arithmetic->in[0] = binary->left; arithmetic->in[1] = binary->right; if (arithmetic->in[0]) g_object_ref(arithmetic->in[0]); if (arithmetic->in[1]) g_object_ref(arithmetic->in[1]); if (VIPS_OBJECT_CLASS(vips_binary_parent_class)->build(object)) return -1; return 0; } static void vips_binary_class_init(VipsBinaryClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "binary"; vobject_class->description = _("binary operations"); vobject_class->build = vips_binary_build; /* Create properties. */ VIPS_ARG_IMAGE(class, "left", 1, _("Left"), _("Left-hand image argument"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsBinary, left)); VIPS_ARG_IMAGE(class, "right", 2, _("Right"), _("Right-hand image argument"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsBinary, right)); } static void vips_binary_init(VipsBinary *binary) { /* Init our instance fields. */ } libvips-8.15.1/libvips/arithmetic/binary.h000066400000000000000000000035661454007373500205360ustar00rootroot00000000000000/* base class for all binary arithmetic operations */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_BINARY_H #define VIPS_BINARY_H #include #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #include "parithmetic.h" #define VIPS_TYPE_BINARY (vips_binary_get_type()) #define VIPS_BINARY(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_BINARY, VipsBinary)) #define VIPS_BINARY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_BINARY, VipsBinaryClass)) #define VIPS_IS_BINARY(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_BINARY)) #define VIPS_IS_BINARY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_BINARY)) #define VIPS_BINARY_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_BINARY, VipsBinaryClass)) typedef struct _VipsBinary { VipsArithmetic parent_instance; /* Original left and right image args. */ VipsImage *left; VipsImage *right; } VipsBinary; typedef VipsArithmeticClass VipsBinaryClass; GType vips_binary_get_type(void); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_BINARY_H*/ libvips-8.15.1/libvips/arithmetic/boolean.c000066400000000000000000000540001454007373500206510ustar00rootroot00000000000000/* boolean.c --- various bit operations * * Modified: * 15/12/94 JC * - ANSIfied * - adapted to partials with im_wrap... * 25/1/95 JC * - added check1ary(), check2ary() * 8/2/95 JC * - new im_wrapmany * 19/7/95 JC * - added im_shiftleft() and im_shiftright() * 6/7/98 JC * - added _vec forms * - removed *p++ stuff * 10/9/99 JC * - and/or/eor now do all int types * 10/10/02 JC * - renamed im_and() etc. as im_andimage() to remove breakage in the C++ * layer if operator names are turned on * 30/6/04 * - now cast float/complex args to int * 11/9/09 * - use new im__cast_and__call() * - therefore now supports 1-band $op n-band * 17/9/09 * - moved to im__arith_binary*() * - renamed im_eor_vec() as im_eorimage_vec() for C++ sanity * 21/11/10 * - oop, constants are always (int) now, so (^-1) works for unsigned * types * 12/11/11 * - redo as a class */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "binary.h" #include "unaryconst.h" typedef struct _VipsBoolean { VipsBinary parent_instance; VipsOperationBoolean operation; } VipsBoolean; typedef VipsBinaryClass VipsBooleanClass; G_DEFINE_TYPE(VipsBoolean, vips_boolean, VIPS_TYPE_BINARY); static int vips_boolean_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsBinary *binary = (VipsBinary *) object; if (binary->left && vips_check_noncomplex(class->nickname, binary->left)) return -1; if (binary->right && vips_check_noncomplex(class->nickname, binary->right)) return -1; if (VIPS_OBJECT_CLASS(vips_boolean_parent_class)->build(object)) return -1; return 0; } #define LOOP(TYPE, OP) \ { \ TYPE *restrict left = (TYPE *) in[0]; \ TYPE *restrict right = (TYPE *) in[1]; \ TYPE *restrict q = (TYPE *) out; \ \ for (x = 0; x < sz; x++) \ q[x] = left[x] OP right[x]; \ } #define FLOOP(TYPE, OP) \ { \ TYPE *restrict left = (TYPE *) in[0]; \ TYPE *restrict right = (TYPE *) in[1]; \ int *restrict q = (int *) out; \ \ for (x = 0; x < sz; x++) \ q[x] = ((int) left[x]) OP((int) right[x]); \ } #define SWITCH(I, F, OP) \ switch (vips_image_get_format(im)) { \ case VIPS_FORMAT_UCHAR: \ I(unsigned char, OP); \ break; \ case VIPS_FORMAT_CHAR: \ I(signed char, OP); \ break; \ case VIPS_FORMAT_USHORT: \ I(unsigned short, OP); \ break; \ case VIPS_FORMAT_SHORT: \ I(signed short, OP); \ break; \ case VIPS_FORMAT_UINT: \ I(unsigned int, OP); \ break; \ case VIPS_FORMAT_INT: \ I(signed int, OP); \ break; \ case VIPS_FORMAT_FLOAT: \ F(float, OP); \ break; \ case VIPS_FORMAT_DOUBLE: \ F(double, OP); \ break; \ \ default: \ g_assert_not_reached(); \ } #define FNLOOP(TYPE, FN) \ { \ TYPE *restrict left = (TYPE *) in[0]; \ TYPE *restrict right = (TYPE *) in[1]; \ int *restrict q = (int *) out; \ \ for (x = 0; x < sz; x++) \ q[x] = FN(left[x], right[x]); \ } static void vips_boolean_buffer(VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width) { VipsBoolean *boolean = (VipsBoolean *) arithmetic; VipsImage *im = arithmetic->ready[0]; const int sz = width * vips_image_get_bands(im); int x; switch (boolean->operation) { case VIPS_OPERATION_BOOLEAN_AND: SWITCH(LOOP, FLOOP, &); break; case VIPS_OPERATION_BOOLEAN_OR: SWITCH(LOOP, FLOOP, |); break; case VIPS_OPERATION_BOOLEAN_EOR: SWITCH(LOOP, FLOOP, ^); break; /* Special case: we need to be able to use VIPS_LSHIFT_INT(). */ case VIPS_OPERATION_BOOLEAN_LSHIFT: switch (vips_image_get_format(im)) { case VIPS_FORMAT_UCHAR: LOOP(unsigned char, <<); break; case VIPS_FORMAT_CHAR: FNLOOP(signed char, VIPS_LSHIFT_INT); break; case VIPS_FORMAT_USHORT: LOOP(unsigned short, <<); break; case VIPS_FORMAT_SHORT: FNLOOP(signed short, VIPS_LSHIFT_INT); break; case VIPS_FORMAT_UINT: LOOP(unsigned int, <<); break; case VIPS_FORMAT_INT: FNLOOP(signed int, VIPS_LSHIFT_INT); break; case VIPS_FORMAT_FLOAT: FLOOP(float, <<); break; case VIPS_FORMAT_DOUBLE: FLOOP(double, <<); break; default: g_assert_not_reached(); } break; case VIPS_OPERATION_BOOLEAN_RSHIFT: SWITCH(LOOP, FLOOP, >>); break; default: g_assert_not_reached(); } } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX /* Type conversions for boolean. */ static const VipsBandFormat vips_boolean_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, C, US, S, UI, I, I, I, I, I }; static void vips_boolean_class_init(VipsBooleanClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "boolean"; object_class->description = _("boolean operation on two images"); object_class->build = vips_boolean_build; aclass->process_line = vips_boolean_buffer; vips_arithmetic_set_format_table(aclass, vips_boolean_format_table); VIPS_ARG_ENUM(class, "boolean", 200, _("Operation"), _("Boolean to perform"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsBoolean, operation), VIPS_TYPE_OPERATION_BOOLEAN, VIPS_OPERATION_BOOLEAN_AND); } static void vips_boolean_init(VipsBoolean *boolean) { } static int vips_booleanv(VipsImage *left, VipsImage *right, VipsImage **out, VipsOperationBoolean operation, va_list ap) { return vips_call_split("boolean", ap, left, right, out, operation); } /** * vips_boolean: * @left: left-hand input #VipsImage * @right: right-hand input #VipsImage * @out: (out): output #VipsImage * @boolean: boolean operation to perform * @...: %NULL-terminated list of optional named arguments * * Perform various boolean operations on pairs of images. * * The output image is the same format as the upcast input images for integer * types. Float types are cast to int before processing. Complex types are not * supported. * * If the images differ in size, the smaller image is enlarged to match the * larger by adding zero pixels along the bottom and right. * * If the number of bands differs, one of the images * must have one band. In this case, an n-band image is formed from the * one-band image by joining n copies of the one-band image together, and then * the two n-band images are operated upon. * * The two input images are cast up to the smallest common format (see table * Smallest common format in * arithmetic). * * See also: vips_boolean_const(). * * Returns: 0 on success, -1 on error */ int vips_boolean(VipsImage *left, VipsImage *right, VipsImage **out, VipsOperationBoolean boolean, ...) { va_list ap; int result; va_start(ap, boolean); result = vips_booleanv(left, right, out, boolean, ap); va_end(ap); return result; } /** * vips_andimage: * @left: left-hand input #VipsImage * @right: right-hand input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_BOOLEAN_AND on a pair of images. See * vips_boolean(). * * Returns: 0 on success, -1 on error */ int vips_andimage(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_booleanv(left, right, out, VIPS_OPERATION_BOOLEAN_AND, ap); va_end(ap); return result; } /** * vips_orimage: * @left: left-hand input #VipsImage * @right: right-hand input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_BOOLEAN_OR on a pair of images. See * vips_boolean(). * * Returns: 0 on success, -1 on error */ int vips_orimage(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_booleanv(left, right, out, VIPS_OPERATION_BOOLEAN_OR, ap); va_end(ap); return result; } /** * vips_eorimage: * @left: left-hand input #VipsImage * @right: right-hand input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_BOOLEAN_EOR on a pair of images. See * vips_boolean(). * * Returns: 0 on success, -1 on error */ int vips_eorimage(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_booleanv(left, right, out, VIPS_OPERATION_BOOLEAN_EOR, ap); va_end(ap); return result; } /** * vips_lshift: * @left: left-hand input #VipsImage * @right: right-hand input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_BOOLEAN_LSHIFT on a pair of images. See * vips_boolean(). * * Returns: 0 on success, -1 on error */ int vips_lshift(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_booleanv(left, right, out, VIPS_OPERATION_BOOLEAN_LSHIFT, ap); va_end(ap); return result; } /** * vips_rshift: * @left: left-hand input #VipsImage * @right: right-hand input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_BOOLEAN_RSHIFT on a pair of images. See * vips_boolean(). * * Returns: 0 on success, -1 on error */ int vips_rshift(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_booleanv(left, right, out, VIPS_OPERATION_BOOLEAN_RSHIFT, ap); va_end(ap); return result; } typedef struct _VipsBooleanConst { VipsUnaryConst parent_instance; VipsOperationBoolean operation; } VipsBooleanConst; typedef VipsUnaryConstClass VipsBooleanConstClass; G_DEFINE_TYPE(VipsBooleanConst, vips_boolean_const, VIPS_TYPE_UNARY_CONST); static int vips_boolean_const_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsUnary *unary = (VipsUnary *) object; if (unary->in && vips_check_noncomplex(class->nickname, unary->in)) return -1; if (VIPS_OBJECT_CLASS(vips_boolean_const_parent_class)->build(object)) return -1; return 0; } #define LOOPC(TYPE, OP) \ { \ TYPE *restrict p = (TYPE *) in[0]; \ TYPE *restrict q = (TYPE *) out; \ int *restrict c = uconst->c_int; \ \ for (i = 0, x = 0; x < width; x++) \ for (b = 0; b < bands; b++, i++) \ q[i] = p[i] OP c[b]; \ } #define FLOOPC(TYPE, OP) \ { \ TYPE *restrict p = (TYPE *) in[0]; \ int *restrict q = (int *) out; \ int *restrict c = uconst->c_int; \ \ for (i = 0, x = 0; x < width; x++) \ for (b = 0; b < bands; b++, i++) \ q[i] = ((int) p[i]) OP((int) c[b]); \ } static void vips_boolean_const_buffer(VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width) { VipsUnaryConst *uconst = (VipsUnaryConst *) arithmetic; VipsBooleanConst *bconst = (VipsBooleanConst *) arithmetic; VipsImage *im = arithmetic->ready[0]; int bands = im->Bands; int i, x, b; switch (bconst->operation) { case VIPS_OPERATION_BOOLEAN_AND: SWITCH(LOOPC, FLOOPC, &); break; case VIPS_OPERATION_BOOLEAN_OR: SWITCH(LOOPC, FLOOPC, |); break; case VIPS_OPERATION_BOOLEAN_EOR: SWITCH(LOOPC, FLOOPC, ^); break; case VIPS_OPERATION_BOOLEAN_LSHIFT: SWITCH(LOOPC, FLOOPC, <<); break; case VIPS_OPERATION_BOOLEAN_RSHIFT: SWITCH(LOOPC, FLOOPC, >>); break; default: g_assert_not_reached(); } } static void vips_boolean_const_class_init(VipsBooleanConstClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "boolean_const"; object_class->description = _("boolean operations against a constant"); object_class->build = vips_boolean_const_build; aclass->process_line = vips_boolean_const_buffer; vips_arithmetic_set_format_table(aclass, vips_boolean_format_table); VIPS_ARG_ENUM(class, "boolean", 200, _("Operation"), _("Boolean to perform"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsBooleanConst, operation), VIPS_TYPE_OPERATION_BOOLEAN, VIPS_OPERATION_BOOLEAN_AND); } static void vips_boolean_const_init(VipsBooleanConst *boolean_const) { } static int vips_boolean_constv(VipsImage *in, VipsImage **out, VipsOperationBoolean operation, const double *c, int n, va_list ap) { VipsArea *area_c; double *array; int result; int i; area_c = vips_area_new_array(G_TYPE_DOUBLE, sizeof(double), n); array = (double *) area_c->data; for (i = 0; i < n; i++) array[i] = c[i]; result = vips_call_split("boolean_const", ap, in, out, operation, area_c); vips_area_unref(area_c); return result; } /** * vips_boolean_const: (method) * @in: input image * @out: (out): output image * @boolean: boolean operation to perform * @c: (array length=n): array of constants * @n: number of constants in @c * @...: %NULL-terminated list of optional named arguments * * Perform various boolean operations on an image against an array of * constants. * * The output type is always uchar, with 0 for FALSE and 255 for TRUE. * * If the array of constants has just one element, that constant is used for * all image bands. If the array has more than one element and they have * the same number of elements as there are bands in the image, then * one array element is used for each band. If the arrays have more than one * element and the image only has a single band, the result is a many-band * image where each band corresponds to one array element. * * See also: vips_boolean(), vips_boolean_const1(). * * Returns: 0 on success, -1 on error */ int vips_boolean_const(VipsImage *in, VipsImage **out, VipsOperationBoolean boolean, const double *c, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_boolean_constv(in, out, boolean, c, n, ap); va_end(ap); return result; } /** * vips_andimage_const: (method) * @in: input image * @out: (out): output image * @c: (array length=n): array of constants * @n: number of constants in @c * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_BOOLEAN_AND on an image and an array of constants. * See vips_boolean_const(). * * See also: vips_boolean(), vips_boolean_const1(). * * Returns: 0 on success, -1 on error */ int vips_andimage_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_boolean_constv(in, out, VIPS_OPERATION_BOOLEAN_AND, c, n, ap); va_end(ap); return result; } /** * vips_orimage_const: (method) * @in: input image * @out: (out): output image * @c: (array length=n): array of constants * @n: number of constants in @c * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_BOOLEAN_OR on an image and an array of constants. * See vips_boolean_const(). * * See also: vips_boolean(), vips_boolean_const1(). * * Returns: 0 on success, -1 on error */ int vips_orimage_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_boolean_constv(in, out, VIPS_OPERATION_BOOLEAN_OR, c, n, ap); va_end(ap); return result; } /** * vips_eorimage_const: (method) * @in: input image * @out: (out): output image * @c: (array length=n): array of constants * @n: number of constants in @c * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_BOOLEAN_EOR on an image and an array of constants. * See vips_boolean_const(). * * See also: vips_boolean(), vips_boolean_const1(). * * Returns: 0 on success, -1 on error */ int vips_eorimage_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_boolean_constv(in, out, VIPS_OPERATION_BOOLEAN_EOR, c, n, ap); va_end(ap); return result; } /** * vips_lshift_const: (method) * @in: input image * @out: (out): output image * @c: (array length=n): array of constants * @n: number of constants in @c * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_BOOLEAN_LSHIFT on an image and an array of constants. * See vips_boolean_const(). * * See also: vips_boolean(), vips_boolean_const1(). * * Returns: 0 on success, -1 on error */ int vips_lshift_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_boolean_constv(in, out, VIPS_OPERATION_BOOLEAN_LSHIFT, c, n, ap); va_end(ap); return result; } /** * vips_rshift_const: (method) * @in: input image * @out: (out): output image * @c: (array length=n): array of constants * @n: number of constants in @c * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_BOOLEAN_LSHIFT on an image and an array of constants. * See vips_boolean_const(). * * See also: vips_boolean(), vips_boolean_const1(). * * Returns: 0 on success, -1 on error */ int vips_rshift_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_boolean_constv(in, out, VIPS_OPERATION_BOOLEAN_RSHIFT, c, n, ap); va_end(ap); return result; } /** * vips_boolean_const1: (method) * @in: input image * @out: (out): output image * @boolean: boolean operation to perform * @c: constant * @...: %NULL-terminated list of optional named arguments * * Perform various boolean operations on an image with a single constant. See * vips_boolean_const(). * * See also: vips_boolean(), vips_boolean_const(). * * Returns: 0 on success, -1 on error */ int vips_boolean_const1(VipsImage *in, VipsImage **out, VipsOperationBoolean boolean, double c, ...) { va_list ap; int result; va_start(ap, c); result = vips_boolean_constv(in, out, boolean, &c, 1, ap); va_end(ap); return result; } /** * vips_andimage_const1: (method) * @in: input image * @out: (out): output image * @c: constant * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_BOOLEAN_AND on an image and a constant. * See vips_boolean_const1(). * * See also: vips_boolean(), vips_boolean_const(). * * Returns: 0 on success, -1 on error */ int vips_andimage_const1(VipsImage *in, VipsImage **out, double c, ...) { va_list ap; int result; va_start(ap, c); result = vips_boolean_constv(in, out, VIPS_OPERATION_BOOLEAN_AND, &c, 1, ap); va_end(ap); return result; } /** * vips_orimage_const1: (method) * @in: input image * @out: (out): output image * @c: constant * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_BOOLEAN_OR on an image and a constant. * See vips_boolean_const1(). * * See also: vips_boolean(), vips_boolean_const(). * * Returns: 0 on success, -1 on error */ int vips_orimage_const1(VipsImage *in, VipsImage **out, double c, ...) { va_list ap; int result; va_start(ap, c); result = vips_boolean_constv(in, out, VIPS_OPERATION_BOOLEAN_OR, &c, 1, ap); va_end(ap); return result; } /** * vips_eorimage_const1: (method) * @in: input image * @out: (out): output image * @c: constant * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_BOOLEAN_EOR on an image and a constant. * See vips_boolean_const1(). * * See also: vips_boolean(), vips_boolean_const(). * * Returns: 0 on success, -1 on error */ int vips_eorimage_const1(VipsImage *in, VipsImage **out, double c, ...) { va_list ap; int result; va_start(ap, c); result = vips_boolean_constv(in, out, VIPS_OPERATION_BOOLEAN_EOR, &c, 1, ap); va_end(ap); return result; } /** * vips_lshift_const1: (method) * @in: input image * @out: (out): output image * @c: constant * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_BOOLEAN_LSHIFT on an image and a constant. * See vips_boolean_const1(). * * See also: vips_boolean(), vips_boolean_const(). * * Returns: 0 on success, -1 on error */ int vips_lshift_const1(VipsImage *in, VipsImage **out, double c, ...) { va_list ap; int result; va_start(ap, c); result = vips_boolean_constv(in, out, VIPS_OPERATION_BOOLEAN_LSHIFT, &c, 1, ap); va_end(ap); return result; } /** * vips_rshift_const1: (method) * @in: input image * @out: (out): output image * @c: constant * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_BOOLEAN_RSHIFT on an image and a constant. * See vips_boolean_const1(). * * See also: vips_boolean(), vips_boolean_const(). * * Returns: 0 on success, -1 on error */ int vips_rshift_const1(VipsImage *in, VipsImage **out, double c, ...) { va_list ap; int result; va_start(ap, c); result = vips_boolean_constv(in, out, VIPS_OPERATION_BOOLEAN_RSHIFT, &c, 1, ap); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/complex.c000066400000000000000000000560521454007373500207120ustar00rootroot00000000000000/* complex.c ... various complex operations * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 12/02/1990 * Modified on : 09/05/1990 * 15/6/93 JC * - stupid stupid includes and externs fixed * - I have been editing for 1 1/2 hours and I'm still drowning in * rubbish extetrnshh * 13/12/94 JC * - modernised * 9/7/02 JC * - degree output, for consistency * - slightly better behaviour in edge cases * 27/1/10 * - modernised * - gtk-doc * 19/11/11 * - redo as a class * 21/11/11 * - add vips_complexget() * 29/9/15 * - return 0 for cross-product where one arg is zero */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "unary.h" #include "binary.h" typedef struct _VipsComplex { VipsUnary parent_instance; VipsOperationComplex cmplx; } VipsComplex; typedef VipsUnaryClass VipsComplexClass; G_DEFINE_TYPE(VipsComplex, vips_complex, VIPS_TYPE_UNARY); #define LOOP(IN, OUT, OP) \ { \ IN *restrict p = (IN *) in[0]; \ OUT *restrict q = (OUT *) out; \ \ for (x = 0; x < sz; x++) { \ OP(q, p[x], 0.0); \ \ q += 2; \ } \ } #define CLOOP(IN, OUT, OP) \ { \ IN *restrict p = (IN *) in[0]; \ OUT *restrict q = (OUT *) out; \ \ for (x = 0; x < sz; x++) { \ OP(q, p[0], p[1]); \ \ p += 2; \ q += 2; \ } \ } #define SWITCH(OP) \ switch (vips_image_get_format(im)) { \ case VIPS_FORMAT_UCHAR: \ LOOP(unsigned char, float, OP); \ break; \ case VIPS_FORMAT_CHAR: \ LOOP(signed char, float, OP); \ break; \ case VIPS_FORMAT_USHORT: \ LOOP(unsigned short, float, OP); \ break; \ case VIPS_FORMAT_SHORT: \ LOOP(signed short, float, OP); \ break; \ case VIPS_FORMAT_UINT: \ LOOP(unsigned int, float, OP); \ break; \ case VIPS_FORMAT_INT: \ LOOP(signed int, float, OP); \ break; \ case VIPS_FORMAT_FLOAT: \ LOOP(float, float, OP); \ break; \ case VIPS_FORMAT_DOUBLE: \ LOOP(double, double, OP); \ break; \ case VIPS_FORMAT_COMPLEX: \ CLOOP(float, float, OP); \ break; \ case VIPS_FORMAT_DPCOMPLEX: \ CLOOP(double, double, OP); \ break; \ \ default: \ g_assert_not_reached(); \ } static double vips_complex_hypot(double a, double b) { double d; /* hypot() is less sensitive to overflow. Use it if we can. */ #ifdef HAVE_HYPOT d = hypot(a, b); #else d = sqrt(a * a + b * b); #endif return d; } static double vips_complex_atan2(double a, double b) { double h; /* atan2() is very slow, but is better behaved when a is near 0. Use * it in preference when we can. */ #ifdef HAVE_ATAN2 h = VIPS_DEG(atan2(b, a)); if (h < 0.0) h += 360; #else h = vips_col_ab2h(a, b); #endif return h; } #define POLAR(Q, X, Y) \ { \ double re = (X); \ double im = (Y); \ double am, ph; \ \ am = vips_complex_hypot(re, im); \ ph = vips_complex_atan2(re, im); \ \ Q[0] = am; \ Q[1] = ph; \ } #define RECT(Q, X, Y) \ { \ double am = (X); \ double ph = (Y); \ double re, im; \ \ re = am * cos(VIPS_RAD(ph)); \ im = am * sin(VIPS_RAD(ph)); \ \ Q[0] = re; \ Q[1] = im; \ } #define CONJ(Q, X, Y) \ { \ double re = (X); \ double im = (Y); \ \ im *= -1; \ \ Q[0] = re; \ Q[1] = im; \ } static void vips_complex_buffer(VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width) { VipsComplex *cmplx = (VipsComplex *) arithmetic; VipsImage *im = arithmetic->ready[0]; const int sz = width * vips_image_get_bands(im); int x; switch (cmplx->cmplx) { case VIPS_OPERATION_COMPLEX_POLAR: SWITCH(POLAR); break; case VIPS_OPERATION_COMPLEX_RECT: SWITCH(RECT); break; case VIPS_OPERATION_COMPLEX_CONJ: SWITCH(CONJ); break; default: g_assert_not_reached(); } } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX static const VipsBandFormat vips_complex_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ X, X, X, X, X, X, X, X, DX, DX }; static void vips_complex_class_init(VipsComplexClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "complex"; object_class->description = _("perform a complex operation on an image"); aclass->process_line = vips_complex_buffer; vips_arithmetic_set_format_table(aclass, vips_complex_format_table); VIPS_ARG_ENUM(class, "cmplx", 200, _("Operation"), _("Complex to perform"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsComplex, cmplx), VIPS_TYPE_OPERATION_COMPLEX, VIPS_OPERATION_COMPLEX_POLAR); } static void vips_complex_init(VipsComplex *cmplx) { } static int vips_complexv(VipsImage *in, VipsImage **out, VipsOperationComplex cmplx, va_list ap) { return vips_call_split("complex", ap, in, out, cmplx); } /** * vips_complex: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @cmplx: complex operation to perform * @...: %NULL-terminated list of optional named arguments * * Perform various operations on complex images. * * Angles are expressed in degrees. The output type is complex unless the * input is double or dpcomplex, in which case the output is dpcomplex. * * Returns: 0 on success, -1 on error */ int vips_complex(VipsImage *in, VipsImage **out, VipsOperationComplex cmplx, ...) { va_list ap; int result; va_start(ap, cmplx); result = vips_complexv(in, out, cmplx, ap); va_end(ap); return result; } /** * vips_polar: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_COMPLEX_POLAR on an image. See vips_complex(). * * Returns: 0 on success, -1 on error */ int vips_polar(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_complexv(in, out, VIPS_OPERATION_COMPLEX_POLAR, ap); va_end(ap); return result; } /** * vips_rect: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_COMPLEX_RECT on an image. See vips_complex(). * * Returns: 0 on success, -1 on error */ int vips_rect(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_complexv(in, out, VIPS_OPERATION_COMPLEX_RECT, ap); va_end(ap); return result; } /** * vips_conj: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_COMPLEX_CONJ on an image. See vips_complex(). * * Returns: 0 on success, -1 on error */ int vips_conj(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_complexv(in, out, VIPS_OPERATION_COMPLEX_CONJ, ap); va_end(ap); return result; } typedef struct _VipsComplex2 { VipsBinary parent_instance; VipsOperationComplex2 cmplx; } VipsComplex2; typedef VipsBinaryClass VipsComplex2Class; G_DEFINE_TYPE(VipsComplex2, vips_complex2, VIPS_TYPE_BINARY); #define LOOP2(IN, OUT, OP) \ { \ IN *p1 = (IN *) in[0]; \ IN *p2 = (IN *) in[1]; \ OUT *q = (OUT *) out; \ \ for (x = 0; x < sz; x++) { \ OP(q, p1[x], 0.0, p2[x], 0.0); \ \ q += 2; \ } \ } #define CLOOP2(IN, OUT, OP) \ { \ IN *p1 = (IN *) in[0]; \ IN *p2 = (IN *) in[1]; \ OUT *q = (OUT *) out; \ \ for (x = 0; x < sz; x++) { \ OP(q, p1[0], p1[1], p2[0], p2[1]); \ \ p1 += 2; \ p2 += 2; \ q += 2; \ } \ } #define SWITCH2(OP) \ switch (vips_image_get_format(im)) { \ case VIPS_FORMAT_UCHAR: \ LOOP2(unsigned char, float, OP); \ break; \ case VIPS_FORMAT_CHAR: \ LOOP2(signed char, float, OP); \ break; \ case VIPS_FORMAT_USHORT: \ LOOP2(unsigned short, float, OP); \ break; \ case VIPS_FORMAT_SHORT: \ LOOP2(signed short, float, OP); \ break; \ case VIPS_FORMAT_UINT: \ LOOP2(unsigned int, float, OP); \ break; \ case VIPS_FORMAT_INT: \ LOOP2(signed int, float, OP); \ break; \ case VIPS_FORMAT_FLOAT: \ LOOP2(float, float, OP); \ break; \ case VIPS_FORMAT_DOUBLE: \ LOOP2(double, double, OP); \ break; \ case VIPS_FORMAT_COMPLEX: \ CLOOP2(float, float, OP); \ break; \ case VIPS_FORMAT_DPCOMPLEX: \ CLOOP2(double, double, OP); \ break; \ \ default: \ g_assert_not_reached(); \ } /* There doesn't seem to be much difference in speed between these two methods * (on an Athlon64), so I use the modulus argument version, since atan2() is * in c89 but hypot() is c99. * * If you think that it might be faster on your platform, uncomment the * following: */ #define USE_MODARG_DIV #ifdef USE_MODARG_DIV #define CROSS(Q, X1, Y1, X2, Y2) \ { \ if (((X1) == 0.0 && (Y1) == 0.0) || \ ((X2) == 0.0 && (Y2) == 0.0)) { \ Q[0] = 0.0; \ Q[1] = 0.0; \ } \ else { \ double arg = atan2(X2, X1) - atan2(Y2, Y1); \ \ Q[0] = cos(arg); \ Q[1] = sin(arg); \ } \ } #else /* USE_MODARG_DIV */ #define CROSS(Q, X1, Y1, X2, Y2) \ { \ if (((X1) == 0.0 && (Y1) == 0.0) || \ ((X2) == 0.0 && (Y2) == 0.0)) { \ Q[0] = 0.0; \ Q[1] = 0.0; \ } \ else if (ABS(Y1) > ABS(Y2)) { \ double a = Y2 / Y1; \ double b = Y1 + Y2 * a; \ double re = (X1 + X2 * a) / b; \ double im = (X2 - X1 * a) / b; \ double mod = vips__hypot(re, im); \ \ Q[0] = re / mod; \ Q[1] = im / mod; \ } \ else { \ double a = Y1 / Y2; \ double b = Y2 + Y1 * a; \ double re = (X1 * a + X2) / b; \ double im = (X2 * a - X1) / b; \ double mod = vips__hypot(re, im); \ \ Q[0] = re / mod; \ Q[1] = im / mod; \ } \ } #endif /* USE_MODARG_DIV */ static void vips_complex2_buffer(VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width) { VipsComplex2 *cmplx = (VipsComplex2 *) arithmetic; VipsImage *im = arithmetic->ready[0]; const int sz = width * vips_image_get_bands(im); int x; switch (cmplx->cmplx) { case VIPS_OPERATION_COMPLEX2_CROSS_PHASE: SWITCH2(CROSS); break; default: g_assert_not_reached(); } } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX static const VipsBandFormat vips_complex2_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ X, X, X, X, X, X, X, X, DX, DX }; static void vips_complex2_class_init(VipsComplex2Class *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "complex2"; object_class->description = _("complex binary operations on two images"); aclass->process_line = vips_complex2_buffer; vips_arithmetic_set_format_table(aclass, vips_complex2_format_table); VIPS_ARG_ENUM(class, "cmplx", 200, _("Operation"), _("Binary complex operation to perform"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsComplex2, cmplx), VIPS_TYPE_OPERATION_COMPLEX2, VIPS_OPERATION_COMPLEX2_CROSS_PHASE); } static void vips_complex2_init(VipsComplex2 *cmplx) { } static int vips_complex2v(VipsImage *left, VipsImage *right, VipsImage **out, VipsOperationComplex2 cmplx, va_list ap) { return vips_call_split("complex2", ap, left, right, out, cmplx); } /** * vips_complex2: * @left: input #VipsImage * @right: input #VipsImage * @out: (out): output #VipsImage * @cmplx: complex2 operation to perform * @...: %NULL-terminated list of optional named arguments * * Perform various binary operations on complex images. * * Angles are expressed in degrees. The output type is complex unless the * input is double or dpcomplex, in which case the output is dpcomplex. * * Returns: 0 on success, -1 on error */ int vips_complex2(VipsImage *left, VipsImage *right, VipsImage **out, VipsOperationComplex2 cmplx, ...) { va_list ap; int result; va_start(ap, cmplx); result = vips_complex2v(left, right, out, cmplx, ap); va_end(ap); return result; } /** * vips_cross_phase: * @left: input #VipsImage * @right: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_COMPLEX2_CROSS_PHASE on an image. * See vips_complex2(). * * Returns: 0 on success, -1 on error */ int vips_cross_phase(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_complex2v(left, right, out, VIPS_OPERATION_COMPLEX2_CROSS_PHASE, ap); va_end(ap); return result; } typedef struct _VipsComplexget { VipsUnary parent_instance; VipsOperationComplexget get; } VipsComplexget; typedef VipsUnaryClass VipsComplexgetClass; G_DEFINE_TYPE(VipsComplexget, vips_complexget, VIPS_TYPE_UNARY); static int vips_complexget_build(VipsObject *object) { VipsUnary *unary = (VipsUnary *) object; VipsComplexget *complexget = (VipsComplexget *) object; if (unary->in && !vips_band_format_iscomplex(unary->in->BandFmt) && complexget->get == VIPS_OPERATION_COMPLEXGET_REAL) return vips_unary_copy(unary); if (VIPS_OBJECT_CLASS(vips_complexget_parent_class)->build(object)) return -1; return 0; } #define GETLOOP(TYPE, OP) \ { \ TYPE *p G_GNUC_UNUSED = (TYPE *) in[0]; \ TYPE *q = (TYPE *) out; \ \ for (x = 0; x < sz; x++) { \ OP(q[x], p[x], 0.0); \ } \ } #define CGETLOOP(TYPE, OP) \ { \ TYPE *p G_GNUC_UNUSED = (TYPE *) in[0]; \ TYPE *q = (TYPE *) out; \ \ for (x = 0; x < sz; x++) { \ OP(q[x], p[0], p[1]); \ \ p += 2; \ } \ } #define GETSWITCH(OP) \ switch (vips_image_get_format(im)) { \ case VIPS_FORMAT_UCHAR: \ GETLOOP(unsigned char, OP); \ break; \ case VIPS_FORMAT_CHAR: \ GETLOOP(signed char, OP); \ break; \ case VIPS_FORMAT_USHORT: \ GETLOOP(unsigned short, OP); \ break; \ case VIPS_FORMAT_SHORT: \ GETLOOP(signed short, OP); \ break; \ case VIPS_FORMAT_UINT: \ GETLOOP(unsigned int, OP); \ break; \ case VIPS_FORMAT_INT: \ GETLOOP(signed int, OP); \ break; \ case VIPS_FORMAT_FLOAT: \ GETLOOP(float, OP); \ break; \ case VIPS_FORMAT_DOUBLE: \ GETLOOP(double, OP); \ break; \ case VIPS_FORMAT_COMPLEX: \ CGETLOOP(float, OP); \ break; \ case VIPS_FORMAT_DPCOMPLEX: \ CGETLOOP(double, OP); \ break; \ \ default: \ g_assert_not_reached(); \ } #define REAL(Q, X, Y) \ { \ Q = X; \ } #define IMAG(Q, X, Y) \ { \ Q = Y; \ } static void vips_complexget_buffer(VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width) { VipsComplexget *complexget = (VipsComplexget *) arithmetic; VipsImage *im = arithmetic->ready[0]; const int sz = width * vips_image_get_bands(im); int x; switch (complexget->get) { case VIPS_OPERATION_COMPLEXGET_REAL: GETSWITCH(REAL); break; case VIPS_OPERATION_COMPLEXGET_IMAG: GETSWITCH(IMAG); break; default: g_assert_not_reached(); } } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX static const VipsBandFormat vips_complexget_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, C, US, S, UI, I, F, F, D, D }; static void vips_complexget_class_init(VipsComplexgetClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "complexget"; object_class->description = _("get a component from a complex image"); object_class->build = vips_complexget_build; aclass->process_line = vips_complexget_buffer; vips_arithmetic_set_format_table(aclass, vips_complexget_format_table); VIPS_ARG_ENUM(class, "get", 200, _("Operation"), _("Complex to perform"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsComplexget, get), VIPS_TYPE_OPERATION_COMPLEXGET, VIPS_OPERATION_COMPLEXGET_REAL); } static void vips_complexget_init(VipsComplexget *complexget) { } static int vips_complexgetv(VipsImage *in, VipsImage **out, VipsOperationComplexget get, va_list ap) { return vips_call_split("complexget", ap, in, out, get); } /** * vips_complexget: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @get: complex operation to perform * @...: %NULL-terminated list of optional named arguments * * Get components of complex images. * * The output type is the same as the input type, except #VIPS_FORMAT_COMPLEX * becomes #VIPS_FORMAT_FLOAT and #VIPS_FORMAT_DPCOMPLEX becomes * #VIPS_FORMAT_DOUBLE. * * Returns: 0 on success, -1 on error */ int vips_complexget(VipsImage *in, VipsImage **out, VipsOperationComplexget get, ...) { va_list ap; int result; va_start(ap, get); result = vips_complexgetv(in, out, get, ap); va_end(ap); return result; } /** * vips_real: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_COMPLEXGET_REAL on an image. See vips_complexget(). * * Returns: 0 on success, -1 on error */ int vips_real(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_complexgetv(in, out, VIPS_OPERATION_COMPLEXGET_REAL, ap); va_end(ap); return result; } /** * vips_imag: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_COMPLEXGET_IMAG on an image. See vips_complexget(). * * Returns: 0 on success, -1 on error */ int vips_imag(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_complexgetv(in, out, VIPS_OPERATION_COMPLEXGET_IMAG, ap); va_end(ap); return result; } typedef VipsBinary VipsComplexform; typedef VipsBinaryClass VipsComplexformClass; G_DEFINE_TYPE(VipsComplexform, vips_complexform, VIPS_TYPE_BINARY); static int vips_complexform_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsBinary *binary = (VipsBinary *) object; if (binary->left && vips_check_noncomplex(class->nickname, binary->left)) return -1; if (binary->right && vips_check_noncomplex(class->nickname, binary->right)) return -1; if (VIPS_OBJECT_CLASS(vips_complexform_parent_class)->build(object)) return -1; return 0; } #define CFORM(IN, OUT) \ { \ IN *left = (IN *) in[0]; \ IN *right = (IN *) in[1]; \ OUT *q = (OUT *) out; \ \ for (x = 0; x < sz; x++) { \ q[0] = left[x]; \ q[1] = right[x]; \ \ q += 2; \ } \ } static void vips_complexform_buffer(VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width) { VipsImage *im = arithmetic->ready[0]; const int sz = width * vips_image_get_bands(im); int x; /* Keep types here in sync with bandfmt_complexform[] * below. */ switch (vips_image_get_format(im)) { case VIPS_FORMAT_UCHAR: CFORM(unsigned char, float); break; case VIPS_FORMAT_CHAR: CFORM(signed char, float); break; case VIPS_FORMAT_USHORT: CFORM(unsigned short, float); break; case VIPS_FORMAT_SHORT: CFORM(signed short, float); break; case VIPS_FORMAT_UINT: CFORM(unsigned int, float); break; case VIPS_FORMAT_INT: CFORM(signed int, float); break; case VIPS_FORMAT_FLOAT: CFORM(float, float); break; case VIPS_FORMAT_DOUBLE: CFORM(double, double); break; default: g_assert_not_reached(); } } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX /* Type promotion for form complex. Sign and value preserving. Make sure * these match the case statement in complexform_buffer() above. */ static VipsBandFormat vips_complexform_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ X, X, X, X, X, X, X, X, DX, DX }; static void vips_complexform_class_init(VipsComplexformClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class); object_class->nickname = "complexform"; object_class->description = _("form a complex image from two real images"); object_class->build = vips_complexform_build; aclass->process_line = vips_complexform_buffer; vips_arithmetic_set_format_table(aclass, vips_complexform_format_table); } static void vips_complexform_init(VipsComplexform *complexform) { } /** * vips_complexform: * @left: input image * @right: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Compose two real images to make a complex image. If either @left or @right * are #VIPS_FORMAT_DOUBLE, @out is #VIPS_FORMAT_DPCOMPLEX. Otherwise @out * is #VIPS_FORMAT_COMPLEX. @left becomes the real component of @out and * @right the imaginary. * * If the number of bands differs, one of the images * must have one band. In this case, an n-band image is formed from the * one-band image by joining n copies of the one-band image together, and then * the two n-band images are operated upon. * * See also: vips_complexget(). * * Returns: 0 on success, -1 on error */ int vips_complexform(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("complexform", ap, left, right, out); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/deviate.c000066400000000000000000000134241454007373500206600ustar00rootroot00000000000000/* VipsDeviate * * Copyright: 1990, J. Cupitt * * Author: J. Cupitt * Written on: 02/08/1990 * Modified on: * 5/5/93 JC * - now does partial images * - less likely to overflow * - adapted from im_deviate * 1/7/93 JC * - adapted for partial v2 * - ANSIfied * 21/2/95 JC * - modernised again * 11/5/95 JC * - oops! return( NULL ) in im_deviate(), instead of return( -1 ) * 20/6/95 JC * - now returns double, not float * 13/1/05 * - use 64 bit arithmetic * 8/12/06 * - add liboil support * 2/9/09 * - gtk-doc comment * - minor reformatting * 4/9/09 * - use im__wrapscan() * 31/7/10 * - remove liboil * 6/11/11 * - rewrite as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "statistic.h" typedef struct _VipsDeviate { VipsStatistic parent_instance; double sum; double sum2; double out; } VipsDeviate; typedef VipsStatisticClass VipsDeviateClass; G_DEFINE_TYPE(VipsDeviate, vips_deviate, VIPS_TYPE_STATISTIC); static int vips_deviate_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsStatistic *statistic = VIPS_STATISTIC(object); VipsDeviate *deviate = (VipsDeviate *) object; gint64 vals; double s, s2; if (statistic->in && vips_check_noncomplex(class->nickname, statistic->in)) return -1; if (VIPS_OBJECT_CLASS(vips_deviate_parent_class)->build(object)) return -1; /* NOTE: NR suggests a two-pass algorithm to minimise roundoff. But that's too expensive for us :-( so do it the old one-pass way. */ /* Calculate and return deviation. Add a fabs to stop sqrt(<=0). */ vals = (gint64) vips_image_get_width(statistic->in) * vips_image_get_height(statistic->in) * vips_image_get_bands(statistic->in); s = deviate->sum; s2 = deviate->sum2; g_object_set(object, "out", sqrt(VIPS_FABS(s2 - (s * s / vals)) / (vals - 1)), NULL); return 0; } /* Start function: allocate space for an array in which we can accumulate the * sum and sum of squares for this thread. */ static void * vips_deviate_start(VipsStatistic *statistic) { return (void *) g_new0(double, 2); } /* Stop function. Add this little sum to the main sum. */ static int vips_deviate_stop(VipsStatistic *statistic, void *seq) { VipsDeviate *deviate = (VipsDeviate *) statistic; double *ss2 = (double *) seq; deviate->sum += ss2[0]; deviate->sum2 += ss2[1]; g_free(ss2); return 0; } #define LOOP(TYPE) \ { \ TYPE *p = (TYPE *) in; \ \ for (x = 0; x < sz; x++) { \ TYPE v = p[x]; \ \ sum += v; \ sum2 += (double) v * (double) v; \ } \ } static int vips_deviate_scan(VipsStatistic *statistic, void *seq, int x, int y, void *in, int n) { const int sz = n * vips_image_get_bands(statistic->in); double *ss2 = (double *) seq; double sum; double sum2; sum = ss2[0]; sum2 = ss2[1]; /* Now generate code for all types. */ switch (vips_image_get_format(statistic->in)) { case VIPS_FORMAT_UCHAR: LOOP(unsigned char); break; case VIPS_FORMAT_CHAR: LOOP(signed char); break; case VIPS_FORMAT_USHORT: LOOP(unsigned short); break; case VIPS_FORMAT_SHORT: LOOP(signed short); break; case VIPS_FORMAT_UINT: LOOP(unsigned int); break; case VIPS_FORMAT_INT: LOOP(signed int); break; case VIPS_FORMAT_FLOAT: LOOP(float); break; case VIPS_FORMAT_DOUBLE: LOOP(double); break; default: g_assert_not_reached(); } ss2[0] = sum; ss2[1] = sum2; return 0; } static void vips_deviate_class_init(VipsDeviateClass *class) { GObjectClass *gobject_class = (GObjectClass *) class; VipsObjectClass *object_class = (VipsObjectClass *) class; VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "deviate"; object_class->description = _("find image standard deviation"); object_class->build = vips_deviate_build; sclass->start = vips_deviate_start; sclass->scan = vips_deviate_scan; sclass->stop = vips_deviate_stop; VIPS_ARG_DOUBLE(class, "out", 2, _("Output"), _("Output value"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsDeviate, out), -INFINITY, INFINITY, 0.0); } static void vips_deviate_init(VipsDeviate *deviate) { } /** * vips_deviate: (method) * @in: input #VipsImage * @out: (out): output pixel standard deviation * @...: %NULL-terminated list of optional named arguments * * This operation finds the standard deviation of all pixels in @in. It * operates on all bands of the input image: use vips_stats() if you need * to calculate an average for each band. * * Non-complex images only. * * See also: vips_avg(), vips_stats().. * * Returns: 0 on success, -1 on error */ int vips_deviate(VipsImage *in, double *out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("deviate", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/divide.c000066400000000000000000000204251454007373500205020ustar00rootroot00000000000000/* Divide two images * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 02/05/1990 * Modified on: * 29/4/93 JC * - now works for partial images * 1/7/93 JC * - adapted for partial v2 * - ANSIfied * 19/10/93 JC * - coredump-inducing bug in complex*complex fixed * 13/12/93 * - char * short bug fixed * 12/6/95 JC * - new im_multiply adapted to make new im_divide * 27/9/04 * - updated for 1 band $op n band image -> n band image case * 8/12/06 * - add liboil support * 18/8/08 * - revise upcasting system * - add gtkdoc comments * 31/7/10 * - remove liboil support * - avoid /0 * 6/11/11 * - rewrite as a class * 22/2/12 * - avoid /0 for complex as well * 6/4/12 * - fixed switch cases * - fixed int operands with <1 result */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "binary.h" typedef VipsBinary VipsDivide; typedef VipsBinaryClass VipsDivideClass; G_DEFINE_TYPE(VipsDivide, vips_divide, VIPS_TYPE_BINARY); /* Complex divide. */ #ifdef USE_MODARG_DIV /* This is going to be much slower */ #define CLOOP(TYPE) \ { \ TYPE *restrict left = (TYPE *) in[0]; \ TYPE *restrict right = (TYPE *) in[1]; \ TYPE *restrict q = (TYPE *) out; \ int i; \ \ for (i = 0; i < sz; i++) { \ if (right[0] == 0.0 && \ right[1] == 0.0) { \ q[0] = 0.0; \ q[1] = 0.0; \ } \ else { \ double arg = atan2(left[1], left[0]) - \ atan2(right[1], right[0]); \ double mod = hypot(left[1], left[0]) / \ hypot(right[1], right[0]); \ \ q[0] = mod * cos(arg); \ q[1] = mod * sin(arg); \ } \ \ left += 2; \ right += 2; \ q += 2; \ } \ } #else /* USE_MODARG_DIV */ #define CLOOP(TYPE) \ { \ TYPE *restrict left = (TYPE *) in[0]; \ TYPE *restrict right = (TYPE *) in[1]; \ TYPE *restrict q = (TYPE *) out; \ int i; \ \ for (i = 0; i < sz; i++) { \ if (right[0] == 0.0 && \ right[1] == 0.0) { \ q[0] = 0.0; \ q[1] = 0.0; \ } \ else if (VIPS_FABS(right[0]) > VIPS_FABS(right[1])) { \ double a = right[1] / right[0]; \ double b = right[0] + right[1] * a; \ \ q[0] = (left[0] + left[1] * a) / b; \ q[1] = (left[1] - left[0] * a) / b; \ } \ else { \ double a = right[0] / right[1]; \ double b = right[1] + right[0] * a; \ \ q[0] = (left[0] * a + left[1]) / b; \ q[1] = (left[1] * a - left[0]) / b; \ } \ \ left += 2; \ right += 2; \ q += 2; \ } \ } #endif /* USE_MODARG_DIV */ /* Real divide. Cast in to OUT before divide so we work for float output. */ #define RLOOP(IN, OUT) \ { \ IN *restrict left = (IN *) in[0]; \ IN *restrict right = (IN *) in[1]; \ OUT *restrict q = (OUT *) out; \ \ for (x = 0; x < sz; x++) \ q[x] = right[x] == 0 ? 0 : (OUT) left[x] / (OUT) right[x]; \ } static void vips_divide_buffer(VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width) { VipsImage *im = arithmetic->ready[0]; const int sz = width * vips_image_get_bands(im); int x; /* Keep types here in sync with vips_divide_format_table[] * below. */ switch (vips_image_get_format(im)) { case VIPS_FORMAT_CHAR: RLOOP(signed char, float); break; case VIPS_FORMAT_UCHAR: RLOOP(unsigned char, float); break; case VIPS_FORMAT_SHORT: RLOOP(signed short, float); break; case VIPS_FORMAT_USHORT: RLOOP(unsigned short, float); break; case VIPS_FORMAT_INT: RLOOP(signed int, float); break; case VIPS_FORMAT_UINT: RLOOP(unsigned int, float); break; case VIPS_FORMAT_FLOAT: RLOOP(float, float); break; case VIPS_FORMAT_DOUBLE: RLOOP(double, double); break; case VIPS_FORMAT_COMPLEX: CLOOP(float); break; case VIPS_FORMAT_DPCOMPLEX: CLOOP(double); break; default: g_assert_not_reached(); } } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX /* Type promotion for division. Sign and value preserving. Make sure * these match the case statement in divide_buffer() above. */ static VipsBandFormat vips_divide_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ F, F, F, F, F, F, F, X, D, DX }; static void vips_divide_class_init(VipsDivideClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class); object_class->nickname = "divide"; object_class->description = _("divide two images"); aclass->process_line = vips_divide_buffer; vips_arithmetic_set_format_table(aclass, vips_divide_format_table); } static void vips_divide_init(VipsDivide *divide) { } /** * vips_divide: * @left: input image * @right: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * This operation calculates @in1 / @in2 and writes the result to @out. If any * pixels in @in2 are zero, the corresponding pixel in @out is also zero. * * If the images differ in size, the smaller image is enlarged to match the * larger by adding zero pixels along the bottom and right. * * If the number of bands differs, one of the images * must have one band. In this case, an n-band image is formed from the * one-band image by joining n copies of the one-band image together, and then * the two n-band images are operated upon. * * The two input images are cast up to the smallest common format (see table * Smallest common format in * arithmetic), then the * following table is used to determine the output type: * * * vips_divide() type promotion * * * * input type * output type * * * * * uchar * float * * * char * float * * * ushort * float * * * short * float * * * uint * float * * * int * float * * * float * float * * * double * double * * * complex * complex * * * double complex * double complex * * * *
* * In other words, the output type is just large enough to hold the whole * range of possible values. * * See also: vips_multiply(), vips_linear(), vips_pow(). * * Returns: 0 on success, -1 on error */ int vips_divide(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("divide", ap, left, right, out); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/find_trim.c000066400000000000000000000174211454007373500212130ustar00rootroot00000000000000/* return the bounding box of the non-border part of the image * * 26/7/17 * - from a ruby example * 18/9/17 kleisauke * - missing bandor * - only flatten if there is an alpha * 8/2/23 * - add @line_art */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include typedef struct _VipsFindTrim { VipsOperation parent_instance; VipsImage *in; double threshold; VipsArrayDouble *background; gboolean line_art; int left; int top; int width; int height; } VipsFindTrim; typedef VipsOperationClass VipsFindTrimClass; G_DEFINE_TYPE(VipsFindTrim, vips_find_trim, VIPS_TYPE_OPERATION); static int vips_find_trim_build(VipsObject *object) { VipsFindTrim *find_trim = (VipsFindTrim *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 20); VipsImage *in; double *background; int n; double *neg_bg; double *ones; int i; double left; double top; double right; double bottom; if (VIPS_OBJECT_CLASS(vips_find_trim_parent_class)->build(object)) return -1; /* Is "background" unset? Default to the correct value * for this interpretation. */ if (!vips_object_argument_isset(object, "background")) find_trim->background = vips_array_double_newv(1, vips_interpretation_max_alpha(find_trim->in->Type)); /* Flatten out alpha, if any. */ in = find_trim->in; if (vips_image_hasalpha(in)) { if (vips_flatten(in, &t[0], "background", find_trim->background, NULL)) return -1; in = t[0]; } /* We want to subtract the bg. */ background = vips_array_double_get(find_trim->background, &n); if (!(neg_bg = VIPS_ARRAY(find_trim, n, double)) || !(ones = VIPS_ARRAY(find_trim, n, double))) return -1; for (i = 0; i < n; i++) { neg_bg[i] = -1 * background[i]; ones[i] = 1.0; } /* Filter out noise, unless we're in line_art mode. */ if (!find_trim->line_art) { if (vips_median(in, &t[1], 3, NULL)) return -1; in = t[1]; } /* Smooth, find difference from bg, abs, threshold. */ if (vips_linear(in, &t[2], ones, neg_bg, n, NULL) || vips_abs(t[2], &t[3], NULL) || vips_more_const1(t[3], &t[4], find_trim->threshold, NULL) || vips_bandor(t[4], &t[5], NULL)) return -1; in = t[5]; /* t[6] == column sums, t[7] == row sums. */ if (vips_project(in, &t[6], &t[7], NULL)) return -1; /* t[8] == search column sums in from left. */ if (vips_profile(t[6], &t[8], &t[9], NULL) || vips_avg(t[9], &left, NULL)) return -1; if (vips_flip(t[6], &t[10], VIPS_DIRECTION_HORIZONTAL, NULL) || vips_profile(t[10], &t[11], &t[12], NULL) || vips_avg(t[12], &right, NULL)) return -1; /* t[8] == search column sums in from left. */ if (vips_profile(t[7], &t[13], &t[14], NULL) || vips_avg(t[13], &top, NULL)) return -1; if (vips_flip(t[7], &t[15], VIPS_DIRECTION_VERTICAL, NULL) || vips_profile(t[15], &t[16], &t[17], NULL) || vips_avg(t[16], &bottom, NULL)) return -1; g_object_set(find_trim, "left", (int) left, "top", (int) top, "width", (int) VIPS_MAX(0, (t[6]->Xsize - right) - left), "height", (int) VIPS_MAX(0, (t[7]->Ysize - bottom) - top), NULL); return 0; } static void vips_find_trim_class_init(VipsFindTrimClass *class) { GObjectClass *gobject_class = (GObjectClass *) class; VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "find_trim"; object_class->description = _("search an image for non-edge areas"); object_class->build = vips_find_trim_build; // operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Image to find_trim"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsFindTrim, in)); VIPS_ARG_DOUBLE(class, "threshold", 2, _("Threshold"), _("Object threshold"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsFindTrim, threshold), 0, INFINITY, 10.0); VIPS_ARG_BOXED(class, "background", 3, _("Background"), _("Color for background pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsFindTrim, background), VIPS_TYPE_ARRAY_DOUBLE); VIPS_ARG_BOOL(class, "line_art", 4, _("Line art mode"), _("Enable line art mode"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsFindTrim, line_art), FALSE); VIPS_ARG_INT(class, "left", 5, _("Left"), _("Left edge of image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsFindTrim, left), 0, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "top", 11, _("Top"), _("Top edge of extract area"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsFindTrim, top), 0, VIPS_MAX_COORD, 0); VIPS_ARG_INT(class, "width", 12, _("Width"), _("Width of extract area"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsFindTrim, width), 0, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "height", 13, _("Height"), _("Height of extract area"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsFindTrim, height), 0, VIPS_MAX_COORD, 1); } static void vips_find_trim_init(VipsFindTrim *find_trim) { find_trim->threshold = 10; } /** * vips_find_trim: (method) * @in: image to find_trim * @left: (out): output left edge * @top: (out): output top edge * @width: (out): output width * @height: (out): output height * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @threshold: %gdouble, background / object threshold * * @background: #VipsArrayDouble, background colour * * @line_art: %gboolean, enable line art mode * * Search @in for the bounding box of the non-background area. * * Any alpha is flattened out, then the image is median-filtered (unless * @line_art is set, see below), all the row * and column sums of the absolute * difference from @background are calculated in a * single pass, then the first row or column in each of the * four directions where the sum is greater than @threshold gives the bounding * box. * * If the image is entirely background, vips_find_trim() returns @width == 0 * and @height == 0. * * @background defaults to 255, or 65535 for 16-bit images. Set another value, * or use vips_getpoint() to pick a value from an edge. You'll need to flatten * before vips_getpoint() to get a correct background value. * * @threshold defaults to 10. * * The detector is designed for photographic or compressed images where there * is a degree of noise that needs filtering. If your images are synthetic * (eg. rendered from vector art, perhaps), set @line_art to disable this * filtering. * * The image needs to be at least 3x3 pixels in size. * * See also: vips_getpoint(), vips_extract_area(), vips_smartcrop(). * * Returns: 0 on success, -1 on error */ int vips_find_trim(VipsImage *in, int *left, int *top, int *width, int *height, ...) { va_list ap; int result; va_start(ap, height); result = vips_call_split("find_trim", ap, in, left, top, width, height); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/getpoint.c000066400000000000000000000121771454007373500210740ustar00rootroot00000000000000/* read a single getpoint * * Copyright: J. Cupitt * Written: 15/06/1992 * 22/7/93 JC * - im_incheck() added * 16/8/94 JC * - im_incheck() changed to im_makerw() * 5/12/06 * - im_invalidate() after paint * 6/3/10 * - don't im_invalidate() after paint, this now needs to be at a higher * level * 29/9/10 * - gtk-doc * - use Draw base class * - read_getpoint partial-ised * 10/2/14 * - redo as a class * 16/12/14 * - free the input region much earlier * 14/10/16 * - crop to a memory image rather than using a region ... this means we * use workers to calculate pixels and therefore use per-thread caching * in the revised buffer system */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "statistic.h" typedef struct _VipsGetpoint { VipsOperation parent_instance; VipsImage *in; int x; int y; VipsArrayDouble *out_array; } VipsGetpoint; typedef VipsOperationClass VipsGetpointClass; G_DEFINE_TYPE(VipsGetpoint, vips_getpoint, VIPS_TYPE_OPERATION); static int vips_getpoint_build(VipsObject *object) { VipsGetpoint *getpoint = (VipsGetpoint *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 4); double *vector; VipsArrayDouble *out_array; if (VIPS_OBJECT_CLASS(vips_getpoint_parent_class)->build(object)) return -1; /* Crop, decode and unpack to double. */ if (vips_crop(getpoint->in, &t[0], getpoint->x, getpoint->y, 1, 1, NULL) || vips_image_decode(t[0], &t[1]) || vips_cast(t[1], &t[2], VIPS_FORMAT_DOUBLE, NULL)) return -1; /* To a mem buffer, then copy to out. */ vips_image_set_int(t[2], "hide-progress", 1); if (!(t[3] = vips_image_new_memory()) || vips_image_write(t[2], t[3])) return -1; if (!(vector = VIPS_ARRAY(getpoint->in, t[3]->Bands, double))) return -1; memcpy(vector, t[3]->data, VIPS_IMAGE_SIZEOF_PEL(t[3])); out_array = vips_array_double_new(vector, t[3]->Bands); g_object_set(object, "out_array", out_array, NULL); vips_area_unref(VIPS_AREA(out_array)); return 0; } static void vips_getpoint_class_init(VipsGetpointClass *class) { GObjectClass *gobject_class = (GObjectClass *) class; VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "getpoint"; object_class->description = _("read a point from an image"); object_class->build = vips_getpoint_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsGetpoint, in)); VIPS_ARG_BOXED(class, "out_array", 2, _("Output array"), _("Array of output values"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsGetpoint, out_array), VIPS_TYPE_ARRAY_DOUBLE); VIPS_ARG_INT(class, "x", 5, _("x"), _("Point to read"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsGetpoint, x), 0, VIPS_MAX_COORD, 0); VIPS_ARG_INT(class, "y", 6, _("y"), _("Point to read"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsGetpoint, y), 0, VIPS_MAX_COORD, 0); } static void vips_getpoint_init(VipsGetpoint *getpoint) { } /** * vips_getpoint: (method) * @in: image to read from * @vector: (out)(array length=n): output pixel value here * @n: length of output vector * @x: position to read * @y: position to read * @...: %NULL-terminated list of optional named arguments * * Reads a single pixel on an image. * * The pixel values are returned in @vector, the length of the * array in @n. You must free the array with g_free() when you are done with * it. * * See also: vips_draw_point(). * * Returns: 0 on success, or -1 on error. */ int vips_getpoint(VipsImage *in, double **vector, int *n, int x, int y, ...) { va_list ap; VipsArrayDouble *out_array; VipsArea *area; int result; va_start(ap, y); result = vips_call_split("getpoint", ap, in, &out_array, x, y); va_end(ap); if (result) return -1; area = VIPS_AREA(out_array); *vector = VIPS_ARRAY(NULL, area->n, double); if (!*vector) { vips_area_unref(area); return -1; } memcpy(*vector, area->data, area->n * area->sizeof_type); *n = area->n; vips_area_unref(area); return 0; } libvips-8.15.1/libvips/arithmetic/hist_find.c000066400000000000000000000244341454007373500212110ustar00rootroot00000000000000/* find histograms * * Copyright: 1990, 1991, N. Dessipris. * * Author: Nicos Dessipris. * Written on: 09/07/1990 * Modified on : 11/03/1991 * 19/7/93 JC * - test for Coding type added * 26/10/94 JC * - rewritten for ANSI * - now does USHORT too * - 5 x faster! * 2/6/95 JC * - rewritten for partials * 3/3/01 JC * - tiny speed ups * 21/1/07 * - number bands from zero * 24/3/10 * - gtkdoc * - small cleanups * 25/1/12 * - cast @in to u8/u16. * 12/8/13 * - redo as a class * 28/2/16 lovell * - unroll common cases * 1/2/21 erdmann * - use double for very large histograms */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include "statistic.h" /* Accumulate a histogram in one of these. */ typedef struct { int n_bands; /* Number of bands in output */ int band; /* If one band in out, which band of input */ int size; /* Number of bins for each band */ int mx; /* Maximum value we have seen */ VipsPel **bins; /* double or uint bins */ } Histogram; typedef struct _VipsHistFind { VipsStatistic parent_instance; /* -1 for all bands, or the band we scan. */ int band; /* Main image histogram. Subhists accumulate to this. */ Histogram *hist; /* Write hist to this output image. */ VipsImage *out; /* TRUE for "large" histograms ... causes double output rather than * uint. */ gboolean large; } VipsHistFind; typedef VipsStatisticClass VipsHistFindClass; G_DEFINE_TYPE(VipsHistFind, vips_hist_find, VIPS_TYPE_STATISTIC); /* Build a Histogram. */ static Histogram * histogram_new(VipsHistFind *hist_find, int n_bands, int band, int size) { /* We won't use all of this for uint accumulators. */ int n_bytes = size * sizeof(double); Histogram *hist; int i; if (!(hist = VIPS_NEW(hist_find, Histogram)) || !(hist->bins = VIPS_ARRAY(hist_find, n_bands, VipsPel *))) return NULL; for (i = 0; i < n_bands; i++) { if (!(hist->bins[i] = VIPS_ARRAY(hist_find, n_bytes, VipsPel))) return NULL; memset(hist->bins[i], 0, n_bytes); } hist->n_bands = n_bands; hist->band = band; hist->size = size; hist->mx = 0; return hist; } static int vips_hist_find_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsStatistic *statistic = VIPS_STATISTIC(object); VipsHistFind *hist_find = (VipsHistFind *) object; VipsImage *in = statistic->in; VipsPel *obuffer; g_object_set(object, "out", vips_image_new(), NULL); if (in && vips_check_bandno(class->nickname, in, hist_find->band)) return -1; /* Is this a large histogram? We want to avoid overflow of the uint * accumulators. */ if (in && (guint64) in->Xsize * (guint64) in->Ysize >= ((guint64) 1 << 32)) hist_find->large = TRUE; /* main hist made on in vips_hist_find_start(). */ if (VIPS_OBJECT_CLASS(vips_hist_find_parent_class)->build(object)) return -1; /* Make the output image. */ if (vips_image_pipelinev(hist_find->out, VIPS_DEMAND_STYLE_ANY, statistic->ready, NULL)) return -1; vips_image_init_fields(hist_find->out, hist_find->hist->mx + 1, 1, hist_find->hist->n_bands, hist_find->large ? VIPS_FORMAT_DOUBLE : VIPS_FORMAT_UINT, VIPS_CODING_NONE, VIPS_INTERPRETATION_HISTOGRAM, 1.0, 1.0); /* Interleave for output. */ if (!(obuffer = VIPS_ARRAY(object, VIPS_IMAGE_SIZEOF_LINE(hist_find->out), VipsPel))) return -1; #define INTERLEAVE(TYPE) \ G_STMT_START \ { \ TYPE **bins = (TYPE **) hist_find->hist->bins; \ \ TYPE *q; \ int i, j; \ \ for (q = (TYPE *) obuffer, j = 0; j < hist_find->out->Xsize; j++) \ for (i = 0; i < hist_find->out->Bands; i++) \ *q++ = bins[i][j]; \ } \ G_STMT_END if (hist_find->large) INTERLEAVE(double); else INTERLEAVE(unsigned int); if (vips_image_write_line(hist_find->out, 0, obuffer)) return -1; return 0; } /* Build a sub-hist, based on the main hist. */ static void * vips_hist_find_start(VipsStatistic *statistic) { VipsHistFind *hist_find = (VipsHistFind *) statistic; /* Make the main hist, if necessary. */ if (!hist_find->hist) hist_find->hist = histogram_new(hist_find, hist_find->band == -1 ? statistic->ready->Bands : 1, hist_find->band, statistic->ready->BandFmt == VIPS_FORMAT_UCHAR ? 256 : 65536); return (void *) histogram_new(hist_find, hist_find->hist->n_bands, hist_find->hist->band, hist_find->hist->size); } /* Join a sub-hist onto the main hist. */ static int vips_hist_find_stop(VipsStatistic *statistic, void *seq) { Histogram *sub_hist = (Histogram *) seq; VipsHistFind *hist_find = (VipsHistFind *) statistic; Histogram *hist = hist_find->hist; int i, j; g_assert(sub_hist->n_bands == hist->n_bands && sub_hist->size == hist->size); /* Add on sub-data. */ hist->mx = VIPS_MAX(hist->mx, sub_hist->mx); #define SUM(TYPE) \ G_STMT_START \ { \ TYPE **main_bins = (TYPE **) hist->bins; \ TYPE **sub_bins = (TYPE **) sub_hist->bins; \ \ for (i = 0; i < hist->n_bands; i++) \ for (j = 0; j < hist->size; j++) \ main_bins[i][j] += sub_bins[i][j]; \ } \ G_STMT_END if (hist_find->large) SUM(double); else SUM(unsigned int); /* Blank out sub-hist to make sure we can't add it again. */ sub_hist->mx = 0; for (i = 0; i < sub_hist->n_bands; i++) sub_hist->bins[i] = NULL; return 0; } #define SCANOP \ G_STMT_START \ { \ for (z = 0; z < nb; z++) { \ int v = p[z]; \ \ if (v > mx) \ mx = v; \ \ bins[z][v] += 1; \ } \ \ p += nb; \ } \ G_STMT_END /* No need to track max for uchar images (it's always 255). */ #define UCSCANOP \ G_STMT_START \ { \ for (z = 0; z < nb; z++) { \ int v = p[z]; \ \ bins[z][v] += 1; \ } \ \ p += nb; \ } \ G_STMT_END /* Hist of all bands. This one is just about worth unrolling. */ #define SCAN(IMAGE_TYPE, HIST_TYPE, OP) \ G_STMT_START \ { \ HIST_TYPE **bins = (HIST_TYPE **) hist->bins; \ IMAGE_TYPE *p = (IMAGE_TYPE *) in; \ \ int z; \ \ VIPS_UNROLL(n, OP); \ } \ G_STMT_END /* Hist of selected band. */ #define SCAN1(IMAGE_TYPE, HIST_TYPE) \ G_STMT_START \ { \ HIST_TYPE *bins = (HIST_TYPE *) hist->bins[0]; \ IMAGE_TYPE *p = (IMAGE_TYPE *) in; \ int max = nb * n; \ \ for (i = hist->band; i < max; i += nb) { \ int v = p[i]; \ \ if (v > mx) \ mx = v; \ \ bins[v] += 1; \ } \ } \ G_STMT_END static int vips_hist_find_scan(VipsStatistic *statistic, void *seq, int x, int y, void *in, int n) { VipsHistFind *hist_find = (VipsHistFind *) statistic; Histogram *hist = (Histogram *) seq; int nb = statistic->ready->Bands; int mx = hist->mx; int i; if (hist_find->band < 0) switch (statistic->ready->BandFmt) { case VIPS_FORMAT_UCHAR: if (hist_find->large) SCAN(unsigned char, double, UCSCANOP); else SCAN(unsigned char, unsigned int, UCSCANOP); mx = 255; break; case VIPS_FORMAT_USHORT: if (hist_find->large) SCAN(unsigned short, double, SCANOP); else SCAN(unsigned short, unsigned int, SCANOP); break; default: g_assert_not_reached(); } else switch (statistic->ready->BandFmt) { case VIPS_FORMAT_UCHAR: if (hist_find->large) SCAN1(unsigned char, double); else SCAN1(unsigned char, unsigned int); break; case VIPS_FORMAT_USHORT: if (hist_find->large) SCAN1(unsigned short, double); else SCAN1(unsigned short, unsigned int); break; default: g_assert_not_reached(); } hist->mx = mx; return 0; } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define US VIPS_FORMAT_USHORT /* Type mapping: go to uchar or ushort. */ static const VipsBandFormat vips_hist_find_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, UC, US, US, US, US, US, US, US, US }; static void vips_hist_find_class_init(VipsHistFindClass *class) { GObjectClass *gobject_class = (GObjectClass *) class; VipsObjectClass *object_class = (VipsObjectClass *) class; VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "hist_find"; object_class->description = _("find image histogram"); object_class->build = vips_hist_find_build; sclass->start = vips_hist_find_start; sclass->scan = vips_hist_find_scan; sclass->stop = vips_hist_find_stop; sclass->format_table = vips_hist_find_format_table; VIPS_ARG_IMAGE(class, "out", 100, _("Output"), _("Output histogram"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsHistFind, out)); VIPS_ARG_INT(class, "band", 110, _("Band"), _("Find histogram of band"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsHistFind, band), -1, 100000, -1); } static void vips_hist_find_init(VipsHistFind *hist_find) { hist_find->band = -1; } /** * vips_hist_find: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @band: band to equalise * * Find the histogram of @in. Find the histogram for band @band (producing a * one-band histogram), or for all bands (producing an n-band histogram) if * @band is -1. * * char and uchar images are cast to uchar before histogramming, all other * image types are cast to ushort. * * See also: vips_hist_find_ndim(), vips_hist_find_indexed(). * * Returns: 0 on success, -1 on error */ int vips_hist_find(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("hist_find", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/hist_find_indexed.c000066400000000000000000000303131454007373500227020ustar00rootroot00000000000000/* indexed histogram: use an index image to pick the bins * * 13/10/09 * - from im_histgr.c * 24/3/10 * - gtkdoc * 17/8/13 * - redo as a class * 2/11/17 * - add @combine ... pick a bin combine mode */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "statistic.h" struct _VipsHistFindIndexed; /* Accumulate a histogram in one of these. */ typedef struct { struct _VipsHistFindIndexed *indexed; VipsRegion *reg; /* Get index pixels with this */ int size; /* Length of bins */ int mx; /* Maximum value we have seen */ double *bins; /* All the bins! */ int *init; /* TRUE for bin has been initialised */ } Histogram; typedef struct _VipsHistFindIndexed { VipsStatistic parent_instance; VipsImage *index; /* Index image, cast to uchar/ushort. */ VipsImage *index_ready; /* Main image histogram. Subhists accumulate to this. */ Histogram *hist; /* Write hist to this output image. */ VipsImage *out; /* Combine bins with this. */ VipsCombine combine; } VipsHistFindIndexed; typedef VipsStatisticClass VipsHistFindIndexedClass; G_DEFINE_TYPE(VipsHistFindIndexed, vips_hist_find_indexed, VIPS_TYPE_STATISTIC); static Histogram * histogram_new(VipsHistFindIndexed *indexed) { VipsStatistic *statistic = VIPS_STATISTIC(indexed); int bands = statistic->ready->Bands; Histogram *hist; if (!(hist = VIPS_NEW(indexed, Histogram))) return NULL; hist->indexed = indexed; hist->reg = NULL; hist->size = indexed->index_ready->BandFmt == VIPS_FORMAT_UCHAR ? 256 : 65536; hist->mx = 0; hist->bins = NULL; hist->init = NULL; if (!(hist->bins = VIPS_ARRAY(indexed, bands * hist->size, double)) || !(hist->init = VIPS_ARRAY(indexed, hist->size, int)) || !(hist->reg = vips_region_new(indexed->index_ready))) return NULL; memset(hist->bins, 0, bands * hist->size * sizeof(double)); memset(hist->init, 0, hist->size * sizeof(int)); return hist; } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define US VIPS_FORMAT_USHORT /* Type mapping: go to uchar or ushort. */ static const VipsBandFormat vips_hist_find_indexed_format[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, UC, US, US, US, US, US, US, US, US }; static int vips_hist_find_indexed_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsStatistic *statistic = VIPS_STATISTIC(object); VipsHistFindIndexed *indexed = (VipsHistFindIndexed *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); g_object_set(object, "out", vips_image_new(), NULL); /* main hist made on first thread start. */ /* index image must be cast to uchar/ushort. */ if (indexed->index && statistic->in) { if (vips_check_uncoded(class->nickname, indexed->index) || vips_check_size_same(class->nickname, indexed->index, statistic->in) || vips_check_mono(class->nickname, indexed->index)) return -1; if (vips_cast(indexed->index, &t[0], vips_hist_find_indexed_format[indexed->index->BandFmt], NULL)) return -1; indexed->index_ready = t[0]; } if (statistic->in) if (vips_check_noncomplex(class->nickname, statistic->in)) return -1; if (VIPS_OBJECT_CLASS(vips_hist_find_indexed_parent_class)->build(object)) return -1; VIPS_UNREF(indexed->hist->reg); if (vips_image_pipelinev(indexed->out, VIPS_DEMAND_STYLE_ANY, statistic->ready, indexed->index_ready, NULL)) return -1; vips_image_init_fields(indexed->out, indexed->hist->mx + 1, 1, statistic->ready->Bands, VIPS_FORMAT_DOUBLE, VIPS_CODING_NONE, VIPS_INTERPRETATION_HISTOGRAM, 1.0, 1.0); if (vips_image_write_line(indexed->out, 0, (VipsPel *) indexed->hist->bins)) return -1; return 0; } static void * vips_hist_find_indexed_start(VipsStatistic *statistic) { VipsHistFindIndexed *indexed = (VipsHistFindIndexed *) statistic; /* Make the main hist, if necessary. */ if (!indexed->hist) indexed->hist = histogram_new(indexed); return (void *) histogram_new(indexed); } /* Combine B with A according to mode. */ #define COMBINE(MODE, A, B) \ G_STMT_START \ { \ switch (MODE) { \ case VIPS_COMBINE_MAX: \ (A) = VIPS_MAX(A, B); \ break; \ \ case VIPS_COMBINE_SUM: \ (A) += (B); \ break; \ \ case VIPS_COMBINE_MIN: \ (A) = VIPS_MIN(A, B); \ break; \ \ default: \ g_assert_not_reached(); \ } \ } \ G_STMT_END /* Join a sub-hist onto the main hist. */ static int vips_hist_find_indexed_stop(VipsStatistic *statistic, void *seq) { Histogram *sub_hist = (Histogram *) seq; VipsHistFindIndexed *indexed = (VipsHistFindIndexed *) statistic; Histogram *hist = indexed->hist; int bands = statistic->ready->Bands; int i, j; double *bins; double *sub_bins; int *init; int *sub_init; hist->mx = VIPS_MAX(hist->mx, sub_hist->mx); bins = hist->bins; sub_bins = sub_hist->bins; init = hist->init; sub_init = sub_hist->init; for (i = 0; i <= sub_hist->mx; i++) { if (sub_init[i]) { if (init[i]) for (j = 0; j < bands; j++) COMBINE(indexed->combine, bins[j], sub_bins[j]); else { for (j = 0; j < bands; j++) bins[j] = sub_bins[j]; init[i] = TRUE; } } bins += bands; sub_bins += bands; } VIPS_UNREF(sub_hist->reg); return 0; } /* Accumulate a buffer of pels, uchar index. */ #define ACCUMULATE_UCHAR(TYPE) \ { \ int x, z; \ TYPE *tv = (TYPE *) in; \ \ for (x = 0; x < n; x++) { \ int ix = i[x]; \ double *bin = hist->bins + ix * bands; \ \ if (hist->init[ix]) \ for (z = 0; z < bands; z++) \ COMBINE(indexed->combine, bin[z], tv[z]); \ else { \ for (z = 0; z < bands; z++) \ bin[z] = tv[z]; \ hist->init[ix] = TRUE; \ } \ \ tv += bands; \ } \ } /* A uchar index image. */ static void vips_hist_find_indexed_uchar_scan(VipsHistFindIndexed *indexed, Histogram *hist, void *in, void *index, int n) { VipsStatistic *statistic = VIPS_STATISTIC(indexed); int bands = statistic->ready->Bands; unsigned char *i = (unsigned char *) index; switch (statistic->ready->BandFmt) { case VIPS_FORMAT_UCHAR: ACCUMULATE_UCHAR(unsigned char); break; case VIPS_FORMAT_CHAR: ACCUMULATE_UCHAR(signed char); break; case VIPS_FORMAT_USHORT: ACCUMULATE_UCHAR(unsigned short); break; case VIPS_FORMAT_SHORT: ACCUMULATE_UCHAR(signed short); break; case VIPS_FORMAT_UINT: ACCUMULATE_UCHAR(unsigned int); break; case VIPS_FORMAT_INT: ACCUMULATE_UCHAR(signed int); break; case VIPS_FORMAT_FLOAT: ACCUMULATE_UCHAR(float); break; case VIPS_FORMAT_DOUBLE: ACCUMULATE_UCHAR(double); break; default: g_assert_not_reached(); } /* Max is always 255. */ hist->mx = 255; } /* Accumulate a buffer of pels, ushort index. */ #define ACCUMULATE_USHORT(TYPE) \ { \ int x, z; \ TYPE *tv = (TYPE *) in; \ \ for (x = 0; x < n; x++) { \ int ix = i[x]; \ double *bin = hist->bins + ix * bands; \ \ if (ix > mx) \ mx = ix; \ \ if (hist->init[ix]) \ for (z = 0; z < bands; z++) \ COMBINE(indexed->combine, bin[z], tv[z]); \ else { \ for (z = 0; z < bands; z++) \ bin[z] = tv[z]; \ hist->init[ix] = TRUE; \ } \ \ tv += bands; \ } \ } /* A ushort index image. */ static void vips_hist_find_indexed_ushort_scan(VipsHistFindIndexed *indexed, Histogram *hist, void *in, void *index, int n) { VipsStatistic *statistic = VIPS_STATISTIC(indexed); int bands = statistic->ready->Bands; unsigned short *i = (unsigned short *) index; int mx; mx = hist->mx; switch (statistic->ready->BandFmt) { case VIPS_FORMAT_UCHAR: ACCUMULATE_USHORT(unsigned char); break; case VIPS_FORMAT_CHAR: ACCUMULATE_USHORT(signed char); break; case VIPS_FORMAT_USHORT: ACCUMULATE_USHORT(unsigned short); break; case VIPS_FORMAT_SHORT: ACCUMULATE_USHORT(signed short); break; case VIPS_FORMAT_UINT: ACCUMULATE_USHORT(unsigned int); break; case VIPS_FORMAT_INT: ACCUMULATE_USHORT(signed int); break; case VIPS_FORMAT_FLOAT: ACCUMULATE_USHORT(float); break; case VIPS_FORMAT_DOUBLE: ACCUMULATE_USHORT(double); break; default: g_assert_not_reached(); } /* Note the maximum. */ hist->mx = mx; } typedef void (*VipsHistFindIndexedScanFn)(VipsHistFindIndexed *indexed, Histogram *hist, void *in, void *index, int n); static int vips_hist_find_indexed_scan(VipsStatistic *statistic, void *seq, int x, int y, void *in, int n) { Histogram *hist = (Histogram *) seq; VipsHistFindIndexed *indexed = (VipsHistFindIndexed *) statistic; VipsRect r = { x, y, n, 1 }; VipsHistFindIndexedScanFn scan; /* Need the corresponding area of the index image. */ if (vips_region_prepare(hist->reg, &r)) return -1; if (indexed->index_ready->BandFmt == VIPS_FORMAT_UCHAR) scan = vips_hist_find_indexed_uchar_scan; else scan = vips_hist_find_indexed_ushort_scan; scan(indexed, hist, in, VIPS_REGION_ADDR(hist->reg, x, y), n); return 0; } static void vips_hist_find_indexed_class_init(VipsHistFindIndexedClass *class) { GObjectClass *gobject_class = (GObjectClass *) class; VipsObjectClass *object_class = (VipsObjectClass *) class; VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "hist_find_indexed"; object_class->description = _("find indexed image histogram"); object_class->build = vips_hist_find_indexed_build; sclass->start = vips_hist_find_indexed_start; sclass->scan = vips_hist_find_indexed_scan; sclass->stop = vips_hist_find_indexed_stop; VIPS_ARG_IMAGE(class, "index", 90, _("Index"), _("Index image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsHistFindIndexed, index)); VIPS_ARG_IMAGE(class, "out", 100, _("Output"), _("Output histogram"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsHistFindIndexed, out)); VIPS_ARG_ENUM(class, "combine", 104, _("Combine"), _("Combine bins like this"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsHistFindIndexed, combine), VIPS_TYPE_COMBINE, VIPS_COMBINE_SUM); } static void vips_hist_find_indexed_init(VipsHistFindIndexed *indexed) { indexed->combine = VIPS_COMBINE_SUM; } /** * vips_hist_find_indexed: (method) * @in: input #VipsImage * @index: input index #VipsImage * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @combine: #VipsCombine, combine bins like this * * Make a histogram of @in, but use image @index to pick the bins. In other * words, element zero in @out contains the combination of all the pixels in @in * whose corresponding pixel in @index is zero. * * char and uchar @index images are cast to uchar before histogramming, all * other image types are cast to ushort. @index must have just one band. * * @in must be non-complex. * * @out always has the same size and format as @in. * * Normally, bins are summed, but you can use @combine to set other combine * modes. * * This operation is useful in conjunction with vips_labelregions(). You can * use it to find the centre of gravity of blobs in an image, for example. * * See also: vips_hist_find(), vips_labelregions(). * * Returns: 0 on success, -1 on error */ int vips_hist_find_indexed(VipsImage *in, VipsImage *index, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("hist_find_indexed", ap, in, index, out); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/hist_find_ndim.c000066400000000000000000000203731454007373500222160ustar00rootroot00000000000000/* n-dimensional histogram * * Written on: 8/7/03 * 10/11/04 * - oops, was not checking the bandfmt coming in * 24/3/10 * - gtkdoc * - small celanups * 17/8/13 * - redo as a class * 28/1/22 travisbell * - better arg checking */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "statistic.h" struct _VipsHistFindNDim; /* Accumulate a histogram in one of these. */ typedef struct { struct _VipsHistFindNDim *ndim; unsigned int ***data; } Histogram; typedef struct _VipsHistFindNDim { VipsStatistic parent_instance; /* Number of bins on each axis. */ int bins; /* Max pixel value for this format. */ int max_val; /* Main image histogram. Subhists accumulate to this. */ Histogram *hist; /* Write hist to this output image. */ VipsImage *out; } VipsHistFindNDim; typedef VipsStatisticClass VipsHistFindNDimClass; G_DEFINE_TYPE(VipsHistFindNDim, vips_hist_find_ndim, VIPS_TYPE_STATISTIC); /* Build a Histogram. */ static Histogram * histogram_new(VipsHistFindNDim *ndim) { VipsImage *in = VIPS_STATISTIC(ndim)->ready; int bins = ndim->bins; /* How many dimensions do we need to allocate? */ int ilimit = in->Bands > 2 ? bins : 1; int jlimit = in->Bands > 1 ? bins : 1; int i, j; Histogram *hist; if (!(hist = VIPS_NEW(ndim, Histogram))) return NULL; hist->ndim = ndim; if (!(hist->data = VIPS_ARRAY(ndim, bins, unsigned int **))) return NULL; memset(hist->data, 0, bins * sizeof(unsigned int **)); for (i = 0; i < ilimit; i++) { if (!(hist->data[i] = VIPS_ARRAY(ndim, bins, unsigned int *))) return NULL; memset(hist->data[i], 0, bins * sizeof(unsigned int *)); for (j = 0; j < jlimit; j++) { if (!(hist->data[i][j] = VIPS_ARRAY(ndim, bins, unsigned int))) return NULL; memset(hist->data[i][j], 0, bins * sizeof(unsigned int)); } } return hist; } static int vips_hist_find_ndim_build(VipsObject *object) { VipsStatistic *statistic = VIPS_STATISTIC(object); VipsHistFindNDim *ndim = (VipsHistFindNDim *) object; unsigned int *obuffer; int y, i, x, z; g_object_set(object, "out", vips_image_new(), NULL); if (statistic->in) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(ndim); if (statistic->in->Bands > 3) { vips_error(class->nickname, "%s", _("image is not 1 - 3 bands")); return -1; } ndim->max_val = statistic->in->BandFmt == VIPS_FORMAT_UCHAR ? 256 : 65536; if (ndim->bins < 1 || ndim->bins > ndim->max_val) { vips_error(class->nickname, _("bins out of range [1,%d]"), ndim->max_val); return -1; } } /* main hist made on first thread start. */ if (VIPS_OBJECT_CLASS(vips_hist_find_ndim_parent_class)->build(object)) return -1; if (vips_image_pipelinev(ndim->out, VIPS_DEMAND_STYLE_ANY, statistic->ready, NULL)) return -1; vips_image_init_fields(ndim->out, ndim->bins, statistic->ready->Bands > 1 ? ndim->bins : 1, statistic->ready->Bands > 2 ? ndim->bins : 1, VIPS_FORMAT_UINT, VIPS_CODING_NONE, VIPS_INTERPRETATION_HISTOGRAM, 1.0, 1.0); if (!(obuffer = VIPS_ARRAY(ndim, VIPS_IMAGE_N_ELEMENTS(ndim->out), unsigned int))) return -1; for (y = 0; y < ndim->out->Ysize; y++) { for (i = 0, x = 0; x < ndim->out->Xsize; x++) for (z = 0; z < ndim->out->Bands; z++, i++) obuffer[i] = ndim->hist->data[z][y][x]; if (vips_image_write_line(ndim->out, y, (VipsPel *) obuffer)) return -1; } return 0; } static void * vips_hist_find_ndim_start(VipsStatistic *statistic) { VipsHistFindNDim *ndim = (VipsHistFindNDim *) statistic; /* Make the main hist, if necessary. */ if (!ndim->hist) ndim->hist = histogram_new(ndim); return (void *) histogram_new(ndim); } /* Join a sub-hist onto the main hist. */ static int vips_hist_find_ndim_stop(VipsStatistic *statistic, void *seq) { Histogram *sub_hist = (Histogram *) seq; VipsHistFindNDim *ndim = (VipsHistFindNDim *) statistic; Histogram *hist = ndim->hist; int i, j, k; for (i = 0; i < ndim->bins; i++) for (j = 0; j < ndim->bins; j++) for (k = 0; k < ndim->bins; k++) if (hist->data[i] && hist->data[i][j]) { hist->data[i][j][k] += sub_hist->data[i][j][k]; /* Zap sub-hist to make sure we * can't add it again. */ sub_hist->data[i][j][k] = 0; } return 0; } #define LOOP(TYPE) \ { \ TYPE *p = (TYPE *) in; \ \ for (i = 0, j = 0; j < n; j++) { \ for (k = 0; k < nb; k++, i++) \ index[k] = p[i] / scale; \ \ hist->data[index[2]][index[1]][index[0]] += 1; \ } \ } static int vips_hist_find_ndim_scan(VipsStatistic *statistic, void *seq, int x, int y, void *in, int n) { Histogram *hist = (Histogram *) seq; VipsHistFindNDim *ndim = (VipsHistFindNDim *) statistic; VipsImage *im = statistic->ready; int nb = im->Bands; double scale = (double) (ndim->max_val + 1) / ndim->bins; int i, j, k; int index[3]; /* Fill these with dimensions, backwards. */ index[0] = index[1] = index[2] = 0; switch (im->BandFmt) { case VIPS_FORMAT_UCHAR: LOOP(unsigned char); break; case VIPS_FORMAT_USHORT: LOOP(unsigned short); break; default: g_assert_not_reached(); } return 0; } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define US VIPS_FORMAT_USHORT #define UI VIPS_FORMAT_UINT /* Type mapping: go to uchar or ushort. */ static const VipsBandFormat vips_hist_find_ndim_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, UC, US, US, US, US, US, US, US, US }; static void vips_hist_find_ndim_class_init(VipsHistFindNDimClass *class) { GObjectClass *gobject_class = (GObjectClass *) class; VipsObjectClass *object_class = (VipsObjectClass *) class; VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "hist_find_ndim"; object_class->description = _("find n-dimensional image histogram"); object_class->build = vips_hist_find_ndim_build; sclass->start = vips_hist_find_ndim_start; sclass->scan = vips_hist_find_ndim_scan; sclass->stop = vips_hist_find_ndim_stop; sclass->format_table = vips_hist_find_ndim_format_table; VIPS_ARG_IMAGE(class, "out", 100, _("Output"), _("Output histogram"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsHistFindNDim, out)); VIPS_ARG_INT(class, "bins", 110, _("Bins"), _("Number of bins in each dimension"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsHistFindNDim, bins), 1, 65536, 10); } static void vips_hist_find_ndim_init(VipsHistFindNDim *ndim) { ndim->bins = 10; } /** * vips_hist_find_ndim: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @bins: number of bins to make on each axis * * Make a one, two or three dimensional histogram of a 1, 2 or * 3 band image. Divide each axis into @bins bins .. ie. * output is 1 x bins, bins x bins, or bins x bins x bins bands. * @bins defaults to 10. * * char and uchar images are cast to uchar before histogramming, all other * image types are cast to ushort. * * See also: vips_hist_find(), vips_hist_find_indexed(). * * Returns: 0 on success, -1 on error */ int vips_hist_find_ndim(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("hist_find_ndim", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/hough.c000066400000000000000000000104151454007373500203460ustar00rootroot00000000000000/* hough transform * * 7/3/14 * - from hist_find.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include "statistic.h" #include "hough.h" G_DEFINE_ABSTRACT_TYPE(VipsHough, vips_hough, VIPS_TYPE_STATISTIC); static VipsImage * vips_hough_new_accumulator(VipsHough *hough) { VipsHoughClass *class = VIPS_HOUGH_GET_CLASS(hough); VipsStatistic *statistic = VIPS_STATISTIC(hough); VipsImage *accumulator; accumulator = vips_image_new_memory(); if (vips_image_pipelinev(accumulator, VIPS_DEMAND_STYLE_ANY, statistic->ready, NULL) || class->init_accumulator(hough, accumulator) || vips_image_write_prepare(accumulator)) { g_object_unref(accumulator); return NULL; } return accumulator; } static int vips_hough_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsStatistic *statistic = VIPS_STATISTIC(object); VipsHough *hough = (VipsHough *) object; VipsImage *out; /* Mono only, we use the bands dimension of the output image for * a parameter. */ if (statistic->in) if (vips_check_mono(class->nickname, statistic->in)) return -1; if (!(out = vips_hough_new_accumulator(hough))) return -1; g_object_set(object, "out", out, NULL); if (VIPS_OBJECT_CLASS(vips_hough_parent_class)->build(object)) return -1; return 0; } /* Build a new accumulator. */ static void * vips_hough_start(VipsStatistic *statistic) { VipsHough *hough = (VipsHough *) statistic; VipsImage *accumulator; if (!(accumulator = vips_hough_new_accumulator(hough))) return NULL; return (void *) accumulator; } /* Add our finished accumulator to the main area. */ static int vips_hough_stop(VipsStatistic *statistic, void *seq) { VipsImage *accumulator = (VipsImage *) seq; VipsHough *hough = (VipsHough *) statistic; if (vips_draw_image(hough->out, accumulator, 0, 0, "mode", VIPS_COMBINE_MODE_ADD, NULL)) { g_object_unref(accumulator); return -1; } g_object_unref(accumulator); return 0; } static int vips_hough_scan(VipsStatistic *statistic, void *seq, int x, int y, void *in, int n) { VipsHough *hough = (VipsHough *) statistic; VipsHoughClass *class = VIPS_HOUGH_GET_CLASS(hough); VipsImage *accumulator = (VipsImage *) seq; VipsPel *p = (VipsPel *) in; int i; for (i = 0; i < n; i++) if (p[i]) class->vote(hough, accumulator, x + i, y); return 0; } #define UC VIPS_FORMAT_UCHAR /* Input image is cast to this format. */ static const VipsBandFormat vips_hough_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, UC, UC, UC, UC, UC, UC, UC, UC, UC }; static void vips_hough_class_init(VipsHoughClass *class) { GObjectClass *gobject_class = (GObjectClass *) class; VipsObjectClass *object_class = (VipsObjectClass *) class; VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "hough"; object_class->description = _("find hough transform"); object_class->build = vips_hough_build; sclass->start = vips_hough_start; sclass->scan = vips_hough_scan; sclass->stop = vips_hough_stop; sclass->format_table = vips_hough_format_table; VIPS_ARG_IMAGE(class, "out", 100, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsHough, out)); } static void vips_hough_init(VipsHough *hough) { } libvips-8.15.1/libvips/arithmetic/hough.h000066400000000000000000000042471454007373500203610ustar00rootroot00000000000000/* hough transform * * 7/3/14 * - from hist_find.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_HOUGH_H #define VIPS_HOUGH_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #define VIPS_TYPE_HOUGH (vips_hough_get_type()) #define VIPS_HOUGH(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_HOUGH, VipsHough)) #define VIPS_HOUGH_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_HOUGH, VipsHoughClass)) #define VIPS_IS_HOUGH(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_HOUGH)) #define VIPS_IS_HOUGH_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_HOUGH)) #define VIPS_HOUGH_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_HOUGH, VipsHoughClass)) typedef struct _VipsHough VipsHough; typedef struct _VipsHoughClass VipsHoughClass; typedef int (*VipsHoughInitAccumulator)(VipsHough *hough, VipsImage *accumulator); typedef void (*VipsHoughVote)(VipsHough *hough, VipsImage *accumulator, int x, int y); struct _VipsHough { VipsStatistic parent_instance; /* Sum the thread accumulators to here. */ VipsImage *out; }; struct _VipsHoughClass { VipsStatisticClass parent_class; /* Init an accumulator image. */ VipsHoughInitAccumulator init_accumulator; /* Vote function for this parameter space. */ VipsHoughVote vote; }; GType vips_hough_get_type(void); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_HOUGH_H*/ libvips-8.15.1/libvips/arithmetic/hough_circle.c000066400000000000000000000174351454007373500217000ustar00rootroot00000000000000/* hough transform for circles * * 7/3/14 * - from hough_line.c * 2/1/18 * - 20% speedup */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Derived in part from David Young's Matlab circle detector: * * http://www.mathworks.com/matlabcentral/fileexchange/26978-hough-transform-for-circles */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "statistic.h" #include "hough.h" typedef struct _VipsHoughCircle { VipsHough parent_instance; int scale; int min_radius; int max_radius; int width; int height; int bands; } VipsHoughCircle; typedef VipsHoughClass VipsHoughCircleClass; G_DEFINE_TYPE(VipsHoughCircle, vips_hough_circle, VIPS_TYPE_HOUGH); /* Smaller circles have fewer pixels and therefore fewer votes. Scale bands by * the ratio of circumference, so all radii get equal weight. */ static void vips_hough_circle_normalise(VipsHoughCircle *hough_circle) { VipsHough *hough = (VipsHough *) hough_circle; int max_radius = hough_circle->max_radius; int min_radius = hough_circle->min_radius; int scale = hough_circle->scale; int bands = hough_circle->bands; int width = hough_circle->width; int height = hough_circle->height; double max_circumference = 2 * VIPS_PI * max_radius; int b; for (b = 0; b < bands; b++) { int radius = b * scale + min_radius; double circumference = 2 * VIPS_PI * radius; double ratio = max_circumference / circumference; size_t n_pels = (size_t) width * height * bands; size_t i; guint *q; q = b + (guint *) VIPS_IMAGE_ADDR(hough->out, 0, 0); for (i = 0; i < n_pels; i += bands) q[i] *= ratio; } } static int vips_hough_circle_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsStatistic *statistic = (VipsStatistic *) object; VipsHoughCircle *hough_circle = (VipsHoughCircle *) object; int range = hough_circle->max_radius - hough_circle->min_radius; if (range <= 0) { vips_error(class->nickname, "%s", _("parameters out of range")); return -1; } hough_circle->width = statistic->in->Xsize / hough_circle->scale; hough_circle->height = statistic->in->Ysize / hough_circle->scale; hough_circle->bands = 1 + range / hough_circle->scale; if (VIPS_OBJECT_CLASS(vips_hough_circle_parent_class)->build(object)) return -1; vips_hough_circle_normalise(hough_circle); return 0; } static int vips_hough_circle_init_accumulator(VipsHough *hough, VipsImage *accumulator) { VipsHoughCircle *hough_circle = (VipsHoughCircle *) hough; vips_image_init_fields(accumulator, hough_circle->width, hough_circle->height, hough_circle->bands, VIPS_FORMAT_UINT, VIPS_CODING_NONE, VIPS_INTERPRETATION_MATRIX, 1.0, 1.0); return 0; } /* Vote endpoints, with clip. */ static void vips_hough_circle_vote_endpoints_clip(VipsImage *image, int y, int x1, int x2, int quadrant, void *client) { int r = *((int *) client); int b = image->Bands; if (y >= 0 && y < image->Ysize) { guint *line = (guint *) VIPS_IMAGE_ADDR(image, 0, y) + r; if (x1 >= 0 && x1 < image->Xsize) line[x1 * b] += 1; if (x2 >= 0 && x2 < image->Xsize) line[x2 * b] += 1; } } /* Vote endpoints, no clip. */ static void vips_hough_circle_vote_endpoints_noclip(VipsImage *image, int y, int x1, int x2, int quadrant, void *client) { int r = *((int *) client); guint *line = (guint *) VIPS_IMAGE_ADDR(image, 0, y) + r; int b = image->Bands; line[x1 * b] += 1; line[x2 * b] += 1; } /* Cast votes for all possible circles passing through x, y. */ static void vips_hough_circle_vote(VipsHough *hough, VipsImage *accumulator, int x, int y) { VipsHoughCircle *hough_circle = (VipsHoughCircle *) hough; int min_radius = hough_circle->min_radius; int cx = x / hough_circle->scale; int cy = y / hough_circle->scale; int rb; g_assert(hough_circle->max_radius - min_radius >= 0); for (rb = 0; rb < hough_circle->bands; rb++) { /* r needs to be in scaled down image space. */ int r = rb + min_radius / hough_circle->scale; VipsDrawScanline draw_scanline; if (cx - r >= 0 && cx + r < accumulator->Xsize && cy - r >= 0 && cy + r < accumulator->Ysize) draw_scanline = vips_hough_circle_vote_endpoints_noclip; else draw_scanline = vips_hough_circle_vote_endpoints_clip; vips__draw_circle_direct(accumulator, cx, cy, r, draw_scanline, &rb); } } static void vips_hough_circle_class_init(VipsHoughClass *class) { GObjectClass *gobject_class = (GObjectClass *) class; VipsObjectClass *object_class = (VipsObjectClass *) class; VipsHoughClass *hclass = (VipsHoughClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "hough_circle"; object_class->description = _("find hough circle transform"); object_class->build = vips_hough_circle_build; hclass->init_accumulator = vips_hough_circle_init_accumulator; hclass->vote = vips_hough_circle_vote; VIPS_ARG_INT(class, "scale", 119, _("Scale"), _("Scale down dimensions by this factor"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsHoughCircle, scale), 1, 100000, 3); VIPS_ARG_INT(class, "min_radius", 120, _("Min radius"), _("Smallest radius to search for"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsHoughCircle, min_radius), 1, 100000, 10); VIPS_ARG_INT(class, "max_radius", 121, _("Max radius"), _("Largest radius to search for"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsHoughCircle, max_radius), 1, 100000, 20); } static void vips_hough_circle_init(VipsHoughCircle *hough_circle) { hough_circle->scale = 1; hough_circle->min_radius = 10; hough_circle->max_radius = 20; } /** * vips_hough_circle: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @scale: scale down dimensions by this much * * @min_radius: smallest radius to search for * * @max_radius: largest radius to search for * * Find the circular Hough transform of an image. @in must be one band, with * non-zero pixels for image edges. @out is three-band, with the third channel * representing the detected circle radius. The operation scales the number of * votes by circle circumference so circles of differing size are given equal * weight. * * The output pixel at (x, y, band) is the strength of the circle centred on * (x, y) and with radius (band). * * Use @max_radius and @min_radius to set the range of radii to search for. * * Use @scale to set how @in coordinates are scaled to @out coordinates. A * @scale of 3, for example, will make @out 1/3rd of the width and height of * @in, and reduce the number of radii tested (and hence the number of bands * int @out) by a factor of three as well. * * See also: vips_hough_line(). * * Returns: 0 on success, -1 on error */ int vips_hough_circle(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("hough_circle", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/hough_line.c000066400000000000000000000115761454007373500213660ustar00rootroot00000000000000/* hough transform for lines * * 7/3/14 * - from hist_find.c * 1/2/18 * - change width to 0 - 180 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "statistic.h" #include "hough.h" typedef struct _VipsHoughLine { VipsHough parent_instance; /* Size of parameter space. */ int width; int height; /* LUT for this transform. */ double *sin; } VipsHoughLine; typedef VipsHoughClass VipsHoughLineClass; G_DEFINE_TYPE(VipsHoughLine, vips_hough_line, VIPS_TYPE_HOUGH); static int vips_hough_line_build(VipsObject *object) { VipsHoughLine *hough_line = (VipsHoughLine *) object; int width = hough_line->width; int i; if (!(hough_line->sin = VIPS_ARRAY(object, 2 * width, double))) return -1; /* Map width to 180 degrees, width * 2 to 360. */ for (i = 0; i < 2 * width; i++) hough_line->sin[i] = sin(2 * VIPS_PI * i / (2 * width)); if (VIPS_OBJECT_CLASS(vips_hough_line_parent_class)->build(object)) return -1; return 0; } static int vips_hough_line_init_accumulator(VipsHough *hough, VipsImage *accumulator) { VipsHoughLine *hough_line = (VipsHoughLine *) hough; vips_image_init_fields(accumulator, hough_line->width, hough_line->height, 1, VIPS_FORMAT_UINT, VIPS_CODING_NONE, VIPS_INTERPRETATION_MATRIX, 1.0, 1.0); return 0; } /* Cast votes for all lines passing through x, y. */ static void vips_hough_line_vote(VipsHough *hough, VipsImage *accumulator, int x, int y) { VipsHoughLine *hough_line = (VipsHoughLine *) hough; VipsStatistic *statistic = (VipsStatistic *) hough; double xd = (double) x / statistic->ready->Xsize; double yd = (double) y / statistic->ready->Ysize; int width = hough_line->width; int height = hough_line->height; guint *data = (guint *) accumulator->data; int i; for (i = 0; i < width; i++) { int i90 = i + width / 2; double r = xd * hough_line->sin[i90] + yd * hough_line->sin[i]; int ri = height * r; if (ri >= 0 && ri < height) data[i + ri * width] += 1; } } static void vips_hough_line_class_init(VipsHoughClass *class) { GObjectClass *gobject_class = (GObjectClass *) class; VipsObjectClass *object_class = (VipsObjectClass *) class; VipsHoughClass *hclass = (VipsHoughClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "hough_line"; object_class->description = _("find hough line transform"); object_class->build = vips_hough_line_build; hclass->init_accumulator = vips_hough_line_init_accumulator; hclass->vote = vips_hough_line_vote; VIPS_ARG_INT(class, "width", 110, _("Width"), _("Horizontal size of parameter space"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsHoughLine, width), 1, 100000, 256); VIPS_ARG_INT(class, "height", 111, _("Height"), _("Vertical size of parameter space"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsHoughLine, height), 1, 100000, 256); } static void vips_hough_line_init(VipsHoughLine *hough_line) { hough_line->width = 256; hough_line->height = 256; } /** * vips_hough_line: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @width: horizontal size of parameter space * * @height: vertical size of parameter space * * Find the line Hough transform for @in. @in must have one band. @out has one * band, with pixels being the number of votes for that line. The X dimension * of @out is the line angle in 0 - 180 degrees, the Y dimension is the * distance of the closest part of that line to the origin in the top-left. * * Use @width @height to set the size of the parameter space image (@out), * that is, how accurate the line determination should be. * * See also: vips_hough_circle(). * * Returns: 0 on success, -1 on error */ int vips_hough_line(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("hough_line", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/invert.c000066400000000000000000000110301454007373500205350ustar00rootroot00000000000000/* photographic negative ... just an example, really * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 12/02/1990 * Modified on : * 7/7/93 JC * - memory leaks fixed * - adapted for partial v2 * - ANSIfied * 22/2/95 JC * - tidied up again * 2/9/09 * - gtk-doc comment * 23/8/11 * - rewrite as a class * 7/12/12 * - only invert real part of complex */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "unary.h" typedef VipsUnary VipsInvert; typedef VipsUnaryClass VipsInvertClass; G_DEFINE_TYPE(VipsInvert, vips_invert, VIPS_TYPE_UNARY); #define LOOP(TYPE, L) \ { \ TYPE *restrict p = (TYPE *) in[0]; \ TYPE *restrict q = (TYPE *) out; \ \ for (x = 0; x < sz; x++) \ q[x] = (L) -p[x]; \ } #define LOOPN(TYPE) \ { \ TYPE *restrict p = (TYPE *) in[0]; \ TYPE *restrict q = (TYPE *) out; \ \ for (x = 0; x < sz; x++) \ q[x] = -1 * p[x]; \ } #define LOOPC(TYPE) \ { \ TYPE *restrict p = (TYPE *) in[0]; \ TYPE *restrict q = (TYPE *) out; \ \ for (x = 0; x < sz; x++) { \ q[0] = -1 * p[0]; \ q[1] = p[1]; \ \ p += 2; \ q += 2; \ } \ } static void vips_invert_buffer(VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width) { VipsImage *im = arithmetic->ready[0]; const int sz = width * vips_image_get_bands(im); int x; switch (vips_image_get_format(im)) { case VIPS_FORMAT_UCHAR: LOOP(unsigned char, UCHAR_MAX); break; case VIPS_FORMAT_CHAR: LOOPN(signed char); break; case VIPS_FORMAT_USHORT: LOOP(unsigned short, USHRT_MAX); break; case VIPS_FORMAT_SHORT: LOOPN(signed short); break; case VIPS_FORMAT_UINT: LOOP(unsigned int, UINT_MAX); break; case VIPS_FORMAT_INT: LOOPN(signed int); break; case VIPS_FORMAT_FLOAT: LOOPN(float); break; case VIPS_FORMAT_DOUBLE: LOOPN(double); break; case VIPS_FORMAT_COMPLEX: LOOPC(float); break; case VIPS_FORMAT_DPCOMPLEX: LOOPC(double); break; default: g_assert_not_reached(); } } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX /* Format doesn't change with invert. */ static const VipsBandFormat vips_invert_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, C, US, S, UI, I, F, X, D, DX }; static void vips_invert_class_init(VipsInvertClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class); object_class->nickname = "invert"; object_class->description = _("invert an image"); aclass->process_line = vips_invert_buffer; vips_arithmetic_set_format_table(aclass, vips_invert_format_table); } static void vips_invert_init(VipsInvert *invert) { } /** * vips_invert: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * For unsigned formats, this operation calculates (max - @in), eg. (255 - * @in) for uchar. For signed and float formats, this operation calculates (-1 * @in). * * For complex images, only the real part is inverted. See also vips_conj(). * * See also: vips_linear(). * * Returns: 0 on success, -1 on error */ int vips_invert(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("invert", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/linear.c000066400000000000000000000310261454007373500205070ustar00rootroot00000000000000/* im_lintra.c -- linear transform * * Copyright: 1990, N. Dessipris, based on im_powtra() * Author: Nicos Dessipris * Written on: 02/05/1990 * Modified on: * 23/4/93 JC * - adapted to work with partial images * 1/7/93 JC * - adapted for partial v2 * 7/10/94 JC * - new IM_NEW() * - more typedefs * 9/2/95 JC * - adapted for im_wrap... * - operations on complex images now just transform the real channel * 29/9/95 JC * - complex was broken * 15/4/97 JC * - return(0) missing from generate, arrgh! * 1/7/98 JC * - im_lintra_vec added * 3/8/02 JC * - fall back to im_copy() for a == 1, b == 0 * 10/10/02 JC * - auug, failing to multiply imag for complex! (thanks matt) * 10/12/02 JC * - removed im_copy() fallback ... meant that output format could change * with value :-( very confusing * 30/6/04 * - added 1 band image * n band vector case * 8/12/06 * - add liboil support * 9/9/09 * - gtkdoc comment, minor reformat * 31/7/10 * - remove liboil * 31/10/11 * - rework as a class * - removed the 1-ary constant path, no faster * 30/11/13 * - 1ary is back, faster with gcc 4.8 * 14/1/14 * - add uchar output option * 30/9/17 * - squash constants with all elements equal so we use 1ary path more * often */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "unary.h" typedef struct _VipsLinear { VipsUnary parent_instance; /* Our constants: multiply by a, add b. */ VipsArea *a; VipsArea *b; /* uchar output. */ gboolean uchar; /* Our constants expanded to match arith->ready in size. */ int n; double *a_ready; double *b_ready; } VipsLinear; typedef VipsUnaryClass VipsLinearClass; G_DEFINE_TYPE(VipsLinear, vips_linear, VIPS_TYPE_UNARY); static int vips_linear_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsArithmetic *arithmetic = VIPS_ARITHMETIC(object); VipsUnary *unary = (VipsUnary *) object; VipsLinear *linear = (VipsLinear *) object; int i; /* If we have a three-element vector, we need to bandup the image to * match. */ linear->n = 1; if (linear->a) linear->n = VIPS_MAX(linear->n, linear->a->n); if (linear->b) linear->n = VIPS_MAX(linear->n, linear->b->n); if (unary->in) { int bands; vips_image_decode_predict(unary->in, &bands, NULL); linear->n = VIPS_MAX(linear->n, bands); } arithmetic->base_bands = linear->n; if (unary->in && linear->a && linear->b) { if (vips_check_vector(class->nickname, linear->a->n, unary->in) || vips_check_vector(class->nickname, linear->b->n, unary->in)) return -1; } /* If all elements of the constants are equal, we can shrink them down * to a single element. */ if (linear->a) { double *ary = (double *) linear->a->data; gboolean all_equal; all_equal = TRUE; for (i = 1; i < linear->a->n; i++) if (ary[i] != ary[0]) { all_equal = FALSE; break; } if (all_equal) linear->a->n = 1; } if (linear->b) { double *ary = (double *) linear->b->data; gboolean all_equal; all_equal = TRUE; for (i = 1; i < linear->b->n; i++) if (ary[i] != ary[0]) { all_equal = FALSE; break; } if (all_equal) linear->b->n = 1; } /* Make up-banded versions of our constants. */ linear->a_ready = VIPS_ARRAY(linear, linear->n, double); linear->b_ready = VIPS_ARRAY(linear, linear->n, double); for (i = 0; i < linear->n; i++) { if (linear->a) { double *ary = (double *) linear->a->data; int j = VIPS_MIN(i, linear->a->n - 1); linear->a_ready[i] = ary[j]; } if (linear->b) { double *ary = (double *) linear->b->data; int j = VIPS_MIN(i, linear->b->n - 1); linear->b_ready[i] = ary[j]; } } if (linear->uchar) arithmetic->format = VIPS_FORMAT_UCHAR; if (VIPS_OBJECT_CLASS(vips_linear_parent_class)->build(object)) return -1; return 0; } /* Non-complex input, any output, all bands of the constant equal. */ #define LOOP1(IN, OUT) \ { \ IN *restrict p = (IN *) in[0]; \ OUT *restrict q = (OUT *) out; \ OUT a1 = a[0]; \ OUT b1 = b[0]; \ int sz = width * nb; \ \ for (x = 0; x < sz; x++) \ q[x] = a1 * (OUT) p[x] + b1; \ } /* Non-complex input, any output. */ #define LOOPN(IN, OUT) \ { \ IN *restrict p = (IN *) in[0]; \ OUT *restrict q = (OUT *) out; \ \ for (i = 0, x = 0; x < width; x++) \ for (k = 0; k < nb; k++, i++) \ q[i] = a[k] * (OUT) p[i] + b[k]; \ } #define LOOP(IN, OUT) \ { \ if (linear->a->n == 1 && linear->b->n == 1) { \ LOOP1(IN, OUT); \ } \ else { \ LOOPN(IN, OUT); \ } \ } /* Complex input, complex output. */ #define LOOPCMPLXN(IN, OUT) \ { \ IN *restrict p = (IN *) in[0]; \ OUT *restrict q = (OUT *) out; \ \ for (x = 0; x < width; x++) \ for (k = 0; k < nb; k++) { \ q[0] = a[k] * p[0] + b[k]; \ q[1] = p[1]; \ q += 2; \ p += 2; \ } \ } /* Non-complex input, any output, all bands of the constant equal, uchar * output. */ #define LOOP1uc(IN) \ { \ IN *restrict p = (IN *) in[0]; \ VipsPel *restrict q = (VipsPel *) out; \ float a1 = a[0]; \ float b1 = b[0]; \ int sz = width * nb; \ \ for (x = 0; x < sz; x++) { \ float t = a1 * p[x] + b1; \ \ q[x] = VIPS_FCLIP(0, t, 255); \ } \ } /* Non-complex input, uchar output. */ #define LOOPNuc(IN) \ { \ IN *restrict p = (IN *) in[0]; \ VipsPel *restrict q = (VipsPel *) out; \ \ for (i = 0, x = 0; x < width; x++) \ for (k = 0; k < nb; k++, i++) { \ double t = a[k] * p[i] + b[k]; \ \ q[i] = VIPS_FCLIP(0, t, 255); \ } \ } #define LOOPuc(IN) \ { \ if (linear->a->n == 1 && linear->b->n == 1) { \ LOOP1uc(IN); \ } \ else { \ LOOPNuc(IN); \ } \ } /* Complex input, uchar output. */ #define LOOPCMPLXNuc(IN) \ { \ IN *restrict p = (IN *) in[0]; \ VipsPel *restrict q = (VipsPel *) out; \ \ for (i = 0, x = 0; x < width; x++) \ for (k = 0; k < nb; k++, i++) { \ double t = a[k] * p[0] + b[k]; \ \ q[i] = VIPS_FCLIP(0, t, 255); \ p += 2; \ } \ } /* Lintra a buffer, n set of scale/offset. */ static void vips_linear_buffer(VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width) { VipsImage *im = arithmetic->ready[0]; VipsLinear *linear = (VipsLinear *) arithmetic; double *restrict a = linear->a_ready; double *restrict b = linear->b_ready; int nb = im->Bands; int i, x, k; if (linear->uchar) switch (vips_image_get_format(im)) { case VIPS_FORMAT_UCHAR: LOOPuc(unsigned char); break; case VIPS_FORMAT_CHAR: LOOPuc(signed char); break; case VIPS_FORMAT_USHORT: LOOPuc(unsigned short); break; case VIPS_FORMAT_SHORT: LOOPuc(signed short); break; case VIPS_FORMAT_UINT: LOOPuc(unsigned int); break; case VIPS_FORMAT_INT: LOOPuc(signed int); break; case VIPS_FORMAT_FLOAT: LOOPuc(float); break; case VIPS_FORMAT_DOUBLE: LOOPuc(double); break; case VIPS_FORMAT_COMPLEX: LOOPCMPLXNuc(float); break; case VIPS_FORMAT_DPCOMPLEX: LOOPCMPLXNuc(double); break; default: g_assert_not_reached(); } else switch (vips_image_get_format(im)) { case VIPS_FORMAT_UCHAR: LOOP(unsigned char, float); break; case VIPS_FORMAT_CHAR: LOOP(signed char, float); break; case VIPS_FORMAT_USHORT: LOOP(unsigned short, float); break; case VIPS_FORMAT_SHORT: LOOP(signed short, float); break; case VIPS_FORMAT_UINT: LOOP(unsigned int, float); break; case VIPS_FORMAT_INT: LOOP(signed int, float); break; case VIPS_FORMAT_FLOAT: LOOP(float, float); break; case VIPS_FORMAT_DOUBLE: LOOP(double, double); break; case VIPS_FORMAT_COMPLEX: LOOPCMPLXN(float, float); break; case VIPS_FORMAT_DPCOMPLEX: LOOPCMPLXN(double, double); break; default: g_assert_not_reached(); } } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX /* Format doesn't change with linear. */ static const VipsBandFormat vips_linear_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ F, F, F, F, F, F, F, X, D, DX }; static void vips_linear_class_init(VipsLinearClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "linear"; object_class->description = _("calculate (a * in + b)"); object_class->build = vips_linear_build; aclass->process_line = vips_linear_buffer; vips_arithmetic_set_format_table(aclass, vips_linear_format_table); VIPS_ARG_BOXED(class, "a", 110, _("a"), _("Multiply by this"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsLinear, a), VIPS_TYPE_ARRAY_DOUBLE); VIPS_ARG_BOXED(class, "b", 111, _("b"), _("Add this"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsLinear, b), VIPS_TYPE_ARRAY_DOUBLE); VIPS_ARG_BOOL(class, "uchar", 112, _("uchar"), _("Output should be uchar"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsLinear, uchar), FALSE); } static void vips_linear_init(VipsLinear *linear) { } static int vips_linearv(VipsImage *in, VipsImage **out, const double *a, const double *b, int n, va_list ap) { VipsArea *area_a; VipsArea *area_b; int result; area_a = VIPS_AREA(vips_array_double_new(a, n)); area_b = VIPS_AREA(vips_array_double_new(b, n)); result = vips_call_split("linear", ap, in, out, area_a, area_b); vips_area_unref(area_a); vips_area_unref(area_b); return result; } /** * vips_linear: (method) * @in: image to transform * @out: (out): output image * @a: (array length=n): array of constants for multiplication * @b: (array length=n): array of constants for addition * @n: length of constant arrays * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @uchar: output uchar pixels * * Pass an image through a linear transform, ie. (@out = @in * @a + @b). Output * is float for integer input, double for double input, complex for * complex input and double complex for double complex input. Set @uchar to * output uchar pixels. * * If the arrays of constants have just one element, that constant is used for * all image bands. If the arrays have more than one element and they have * the same number of elements as there are bands in the image, then * one array element is used for each band. If the arrays have more than one * element and the image only has a single band, the result is a many-band * image where each band corresponds to one array element. * * See also: vips_linear1(), vips_add(). * * Returns: 0 on success, -1 on error */ int vips_linear(VipsImage *in, VipsImage **out, const double *a, const double *b, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_linearv(in, out, a, b, n, ap); va_end(ap); return result; } /** * vips_linear1: (method) * @in: image to transform * @out: (out): output image * @a: constant for multiplication * @b: constant for addition * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @uchar: output uchar pixels * * Run vips_linear() with a single constant. * * See also: vips_linear(). * * Returns: 0 on success, -1 on error */ int vips_linear1(VipsImage *in, VipsImage **out, double a, double b, ...) { va_list ap; int result; va_start(ap, b); result = vips_linearv(in, out, &a, &b, 1, ap); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/math.c000066400000000000000000000344061454007373500201730ustar00rootroot00000000000000/* VipsMath --- call various -lm functions (trig, log etc.) on images * * Copyright: 1990, N. Dessipris, based on im_powtra() * Author: Nicos Dessipris * Written on: 02/05/1990 * Modified on: * 5/5/93 JC * - adapted from im_lintra to work with partial images * - incorrect implementation of complex logs removed * 1/7/93 JC * - adapted for partial v2 * - ANSIfied * 24/2/95 JC * - im_logtra() adapted to make im_sintra() * - adapted for im_wrapone() * 26/1/96 JC * - im_asintra() added * 30/8/09 * - gtkdoc * - tiny cleanups * - use im__math() * 19/9/09 * - im_sintra() adapted to make math.c * 4/11/11 * - redone as a class * 11/8/15 * - log/log10 zero-avoid */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "unary.h" typedef struct _VipsMath { VipsUnary parent_instance; VipsOperationMath math; } VipsMath; typedef VipsUnaryClass VipsMathClass; G_DEFINE_TYPE(VipsMath, vips_math, VIPS_TYPE_UNARY); static int vips_math_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsUnary *unary = (VipsUnary *) object; if (unary->in && vips_check_noncomplex(class->nickname, unary->in)) return -1; if (VIPS_OBJECT_CLASS(vips_math_parent_class)->build(object)) return -1; return 0; } #define LOOP(IN, OUT, OP) \ { \ IN *restrict p = (IN *) in[0]; \ OUT *restrict q = (OUT *) out; \ \ for (x = 0; x < sz; x++) \ q[x] = OP(p[x]); \ } #define SWITCH(OP) \ switch (vips_image_get_format(im)) { \ case VIPS_FORMAT_UCHAR: \ LOOP(unsigned char, float, OP); \ break; \ case VIPS_FORMAT_CHAR: \ LOOP(signed char, float, OP); \ break; \ case VIPS_FORMAT_USHORT: \ LOOP(unsigned short, float, OP); \ break; \ case VIPS_FORMAT_SHORT: \ LOOP(signed short, float, OP); \ break; \ case VIPS_FORMAT_UINT: \ LOOP(unsigned int, float, OP); \ break; \ case VIPS_FORMAT_INT: \ LOOP(signed int, float, OP); \ break; \ case VIPS_FORMAT_FLOAT: \ LOOP(float, float, OP); \ break; \ case VIPS_FORMAT_DOUBLE: \ LOOP(double, double, OP); \ break; \ \ default: \ g_assert_not_reached(); \ } /* If there's asinh, assume we have the other two as well. */ #if HAVE_ASINH #define ASINH(X) (asinh(X)) #define ACOSH(X) (acosh(X)) #define ATANH(X) (atanh(X)) #else #define ASINH(X) (LOGZ((X) + sqrt((X) * (X) + 1.0))) #define ACOSH(X) (LOGZ((X) + sqrt((X) * (X) -1.0))) #define ATANH(X) (0.5 * LOGZ((1.0 + (X)) / (1.0 - (X)))) #endif /* sin/cos/tan in degrees. */ #define DSIN(X) (sin(VIPS_RAD(X))) #define DCOS(X) (cos(VIPS_RAD(X))) #define DTAN(X) (tan(VIPS_RAD(X))) #define ADSIN(X) (VIPS_DEG(asin(X))) #define ADCOS(X) (VIPS_DEG(acos(X))) #define ADTAN(X) (VIPS_DEG(atan(X))) /* exp10() is a gnu extension, use pow(). */ #define EXP10(X) (pow(10.0, (X))) /* Zero-avoiding log, cf. zero-avoiding behaviour of /. */ #define LOGZ(X) ((X) == 0.0 ? 0.0 : log(X)) #define LOGZ10(X) ((X) == 0.0 ? 0.0 : log10(X)) static void vips_math_buffer(VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width) { VipsMath *math = (VipsMath *) arithmetic; VipsImage *im = arithmetic->ready[0]; const int sz = width * vips_image_get_bands(im); int x; switch (math->math) { case VIPS_OPERATION_MATH_SIN: SWITCH(DSIN); break; case VIPS_OPERATION_MATH_COS: SWITCH(DCOS); break; case VIPS_OPERATION_MATH_TAN: SWITCH(DTAN); break; case VIPS_OPERATION_MATH_ASIN: SWITCH(ADSIN); break; case VIPS_OPERATION_MATH_ACOS: SWITCH(ADCOS); break; case VIPS_OPERATION_MATH_ATAN: SWITCH(ADTAN); break; case VIPS_OPERATION_MATH_SINH: SWITCH(sinh); break; case VIPS_OPERATION_MATH_COSH: SWITCH(cosh); break; case VIPS_OPERATION_MATH_TANH: SWITCH(tanh); break; case VIPS_OPERATION_MATH_ASINH: SWITCH(ASINH); break; case VIPS_OPERATION_MATH_ACOSH: SWITCH(ACOSH); break; case VIPS_OPERATION_MATH_ATANH: SWITCH(ATANH); break; case VIPS_OPERATION_MATH_LOG: SWITCH(LOGZ); break; case VIPS_OPERATION_MATH_LOG10: SWITCH(LOGZ10); break; case VIPS_OPERATION_MATH_EXP: SWITCH(exp); break; case VIPS_OPERATION_MATH_EXP10: SWITCH(EXP10); break; default: g_assert_not_reached(); } } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX static const VipsBandFormat vips_math_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ F, F, F, F, F, F, F, X, D, DX }; static void vips_math_class_init(VipsMathClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "math"; object_class->description = _("apply a math operation to an image"); object_class->build = vips_math_build; aclass->process_line = vips_math_buffer; vips_arithmetic_set_format_table(aclass, vips_math_format_table); VIPS_ARG_ENUM(class, "math", 200, _("Operation"), _("Math to perform"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMath, math), VIPS_TYPE_OPERATION_MATH, VIPS_OPERATION_MATH_SIN); } static void vips_math_init(VipsMath *math) { } static int vips_mathv(VipsImage *in, VipsImage **out, VipsOperationMath math, va_list ap) { return vips_call_split("math", ap, in, out, math); } /** * vips_math: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @math: math operation to perform * @...: %NULL-terminated list of optional named arguments * * Perform various functions in -lm, the maths library, on images. * * Angles are expressed in degrees. The output type is float unless the * input is double, in which case the output is double. * * Non-complex images only. * * See also: vips_math2(). * * Returns: 0 on success, -1 on error */ int vips_math(VipsImage *in, VipsImage **out, VipsOperationMath math, ...) { va_list ap; int result; va_start(ap, math); result = vips_mathv(in, out, math, ap); va_end(ap); return result; } /** * vips_sin: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH_SIN on an image. See vips_math(). * * Returns: 0 on success, -1 on error */ int vips_sin(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_mathv(in, out, VIPS_OPERATION_MATH_SIN, ap); va_end(ap); return result; } /** * vips_cos: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH_COS on an image. See vips_math(). * * Returns: 0 on success, -1 on error */ int vips_cos(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_mathv(in, out, VIPS_OPERATION_MATH_COS, ap); va_end(ap); return result; } /** * vips_tan: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH_TAN on an image. See vips_math(). * * Returns: 0 on success, -1 on error */ int vips_tan(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_mathv(in, out, VIPS_OPERATION_MATH_TAN, ap); va_end(ap); return result; } /** * vips_asin: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH_ASIN on an image. See vips_math(). * * Returns: 0 on success, -1 on error */ int vips_asin(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_mathv(in, out, VIPS_OPERATION_MATH_ASIN, ap); va_end(ap); return result; } /** * vips_acos: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH_ACOS on an image. See vips_math(). * * Returns: 0 on success, -1 on error */ int vips_acos(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_mathv(in, out, VIPS_OPERATION_MATH_ACOS, ap); va_end(ap); return result; } /** * vips_atan: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH_ATAN on an image. See vips_math(). * * Returns: 0 on success, -1 on error */ int vips_atan(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_mathv(in, out, VIPS_OPERATION_MATH_ATAN, ap); va_end(ap); return result; } /** * vips_sinh: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH_SINH on an image. See vips_math(). * * Returns: 0 on success, -1 on error */ int vips_sinh(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_mathv(in, out, VIPS_OPERATION_MATH_SINH, ap); va_end(ap); return result; } /** * vips_cosh: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH_COSH on an image. See vips_math(). * * Returns: 0 on success, -1 on error */ int vips_cosh(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_mathv(in, out, VIPS_OPERATION_MATH_COSH, ap); va_end(ap); return result; } /** * vips_tanh: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH_TANH on an image. See vips_math(). * * Returns: 0 on success, -1 on error */ int vips_tanh(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_mathv(in, out, VIPS_OPERATION_MATH_TANH, ap); va_end(ap); return result; } /** * vips_asinh: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH_ASINH on an image. See vips_math(). * * Returns: 0 on success, -1 on error */ int vips_asinh(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_mathv(in, out, VIPS_OPERATION_MATH_ASINH, ap); va_end(ap); return result; } /** * vips_acosh: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH_ACOSH on an image. See vips_math(). * * Returns: 0 on success, -1 on error */ int vips_acosh(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_mathv(in, out, VIPS_OPERATION_MATH_ACOSH, ap); va_end(ap); return result; } /** * vips_atanh: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH_ATANH on an image. See vips_math(). * * Returns: 0 on success, -1 on error */ int vips_atanh(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_mathv(in, out, VIPS_OPERATION_MATH_ATANH, ap); va_end(ap); return result; } /** * vips_log: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH_LOG on an image. See vips_math(). * * Returns: 0 on success, -1 on error */ int vips_log(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_mathv(in, out, VIPS_OPERATION_MATH_LOG, ap); va_end(ap); return result; } /** * vips_log10: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH_LOG10 on an image. See vips_math(). * * Returns: 0 on success, -1 on error */ int vips_log10(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_mathv(in, out, VIPS_OPERATION_MATH_LOG10, ap); va_end(ap); return result; } /** * vips_exp: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH_EXP on an image. See vips_math(). * * Returns: 0 on success, -1 on error */ int vips_exp(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_mathv(in, out, VIPS_OPERATION_MATH_EXP, ap); va_end(ap); return result; } /** * vips_exp10: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH_EXP10 on an image. See vips_math(). * * Returns: 0 on success, -1 on error */ int vips_exp10(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_mathv(in, out, VIPS_OPERATION_MATH_EXP10, ap); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/math2.c000066400000000000000000000420241454007373500202500ustar00rootroot00000000000000/* math2.c --- 2ary math funcs * * Copyright: 1990, N. Dessipris * * Author: Nicos Dessipris * Written on: 02/05/1990 * Modified on: * 10/12/93 JC * - now reports total number of x/0, rather than each one. * 1/2/95 JC * - rewritten for PIO with im_wrapone() * - incorrect complex code removed * - /0 reporting removed for ease of programming * 15/4/97 JC * - return( 0 ) missing, oops! * 6/7/98 JC * - _vec form added * 30/8/09 * - gtkdoc * - tiny cleanups * 20/9/09 * - im_powtra() adapted to make math2.c * 12/11/11 * - redone as a class * 17/7/12 * - wopconst was broken * 20/10/21 indus * - add atan2 */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "binary.h" #include "unaryconst.h" typedef struct _VipsMath2 { VipsBinary parent_instance; VipsOperationMath2 math2; } VipsMath2; typedef VipsBinaryClass VipsMath2Class; G_DEFINE_TYPE(VipsMath2, vips_math2, VIPS_TYPE_BINARY); static int vips_math2_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsBinary *binary = (VipsBinary *) object; if (binary->left && vips_check_noncomplex(class->nickname, binary->left)) return -1; if (binary->right && vips_check_noncomplex(class->nickname, binary->right)) return -1; if (VIPS_OBJECT_CLASS(vips_math2_parent_class)->build(object)) return -1; return 0; } #define LOOP(IN, OUT, OP) \ { \ IN *restrict p1 = (IN *) in[0]; \ IN *restrict p2 = (IN *) in[1]; \ OUT *restrict q = (OUT *) out; \ \ for (x = 0; x < sz; x++) \ OP(q[x], p1[x], p2[x]); \ } #define SWITCH(L, OP) \ switch (vips_image_get_format(im)) { \ case VIPS_FORMAT_UCHAR: \ L(unsigned char, float, OP); \ break; \ case VIPS_FORMAT_CHAR: \ L(signed char, float, OP); \ break; \ case VIPS_FORMAT_USHORT: \ L(unsigned short, float, OP); \ break; \ case VIPS_FORMAT_SHORT: \ L(signed short, float, OP); \ break; \ case VIPS_FORMAT_UINT: \ L(unsigned int, float, OP); \ break; \ case VIPS_FORMAT_INT: \ L(signed int, float, OP); \ break; \ case VIPS_FORMAT_FLOAT: \ L(float, float, OP); \ break; \ case VIPS_FORMAT_DOUBLE: \ L(double, double, OP); \ break; \ \ default: \ g_assert_not_reached(); \ } #define POW(Y, X, E) \ { \ double left = (double) (X); \ double right = (double) (E); \ \ /* Special case for **-1 and **0.5, since they are so common. Also \ * watch for /0. \ */ \ (Y) = (left == 0.0) \ ? 0.0 \ : (right == -1) \ ? 1.0 / left \ : (right == 0.5) \ ? sqrt(left) \ : pow(left, right); \ } #define WOP(Y, X, E) POW(Y, E, X) #ifdef HAVE_ATAN2 #define ATAN2(Y, L, R) \ { \ double left = (double) (L); \ double right = (double) (R); \ \ (Y) = VIPS_DEG(atan2(left, right)); \ if ((Y) < 0.0) \ (Y) += 360; \ } #else #define ATAN2(Y, L, R) \ { \ double left = (double) (L); \ double right = (double) (R); \ \ (Y) = vips_col_ab2h(left, right); \ } #endif static void vips_math2_buffer(VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width) { VipsMath2 *math2 = (VipsMath2 *) arithmetic; VipsImage *im = arithmetic->ready[0]; const int sz = width * vips_image_get_bands(im); int x; switch (math2->math2) { case VIPS_OPERATION_MATH2_POW: SWITCH(LOOP, POW); break; case VIPS_OPERATION_MATH2_WOP: SWITCH(LOOP, WOP); break; case VIPS_OPERATION_MATH2_ATAN2: SWITCH(LOOP, ATAN2); break; default: g_assert_not_reached(); } } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX /* Type promotion for math2. Keep in sync with math2_buffer() above. */ static const VipsBandFormat vips_math2_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ F, F, F, F, F, F, F, X, D, DX }; static void vips_math2_class_init(VipsMath2Class *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "math2"; object_class->description = _("binary math operations"); object_class->build = vips_math2_build; aclass->process_line = vips_math2_buffer; vips_arithmetic_set_format_table(aclass, vips_math2_format_table); VIPS_ARG_ENUM(class, "math2", 200, _("Operation"), _("Math to perform"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMath2, math2), VIPS_TYPE_OPERATION_MATH2, VIPS_OPERATION_MATH2_POW); } static void vips_math2_init(VipsMath2 *math2) { } static int vips_math2v(VipsImage *left, VipsImage *right, VipsImage **out, VipsOperationMath2 math2, va_list ap) { return vips_call_split("math2", ap, left, right, out, math2); } /** * vips_math2: * @left: left-hand input #VipsImage * @right: right-hand input #VipsImage * @out: (out): output #VipsImage * @math2: math operation to perform * @...: %NULL-terminated list of optional named arguments * * This operation calculates a 2-ary maths operation on a pair of images * and writes the result to @out. The images may have any * non-complex format. @out is float except in the case that either of @left * or @right are double, in which case @out is also double. * * It detects division by zero, setting those pixels to zero in the output. * Beware: it does this silently! * * If the images differ in size, the smaller image is enlarged to match the * larger by adding zero pixels along the bottom and right. * * If the number of bands differs, one of the images * must have one band. In this case, an n-band image is formed from the * one-band image by joining n copies of the one-band image together, and then * the two n-band images are operated upon. * * The two input images are cast up to the smallest common format (see table * Smallest common format in * arithmetic), and that format is the * result type. * * See also: vips_math2_const(). * * Returns: 0 on success, -1 on error */ int vips_math2(VipsImage *left, VipsImage *right, VipsImage **out, VipsOperationMath2 math2, ...) { va_list ap; int result; va_start(ap, math2); result = vips_math2v(left, right, out, math2, ap); va_end(ap); return result; } /** * vips_pow: * @left: left-hand input #VipsImage * @right: right-hand input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH2_POW on a pair of images. See * vips_math2(). * * Returns: 0 on success, -1 on error */ int vips_pow(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_math2v(left, right, out, VIPS_OPERATION_MATH2_POW, ap); va_end(ap); return result; } /** * vips_wop: * @left: left-hand input #VipsImage * @right: right-hand input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH2_WOP on a pair of images. See * vips_math2(). * * Returns: 0 on success, -1 on error */ int vips_wop(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_math2v(left, right, out, VIPS_OPERATION_MATH2_WOP, ap); va_end(ap); return result; } /** * vips_atan2: * @left: left-hand input #VipsImage * @right: right-hand input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH2_ATAN2 on a pair of images. See * vips_math2(). * * Returns: 0 on success, -1 on error */ int vips_atan2(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_math2v(left, right, out, VIPS_OPERATION_MATH2_ATAN2, ap); va_end(ap); return result; } typedef struct _VipsMath2Const { VipsUnaryConst parent_instance; VipsOperationMath2 math2; } VipsMath2Const; typedef VipsUnaryConstClass VipsMath2ConstClass; G_DEFINE_TYPE(VipsMath2Const, vips_math2_const, VIPS_TYPE_UNARY_CONST); static int vips_math2_const_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsUnary *unary = (VipsUnary *) object; if (unary->in && vips_check_noncomplex(class->nickname, unary->in)) return -1; if (VIPS_OBJECT_CLASS(vips_math2_const_parent_class)->build(object)) return -1; return 0; } #define LOOPC(IN, OUT, OP) \ { \ IN *restrict p = (IN *) in[0]; \ OUT *restrict q = (OUT *) out; \ double *restrict c = uconst->c_double; \ \ for (i = 0, x = 0; x < width; x++) \ for (b = 0; b < bands; b++, i++) \ OP(q[i], p[i], c[b]); \ } static void vips_math2_const_buffer(VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width) { VipsUnaryConst *uconst = (VipsUnaryConst *) arithmetic; VipsMath2Const *math2 = (VipsMath2Const *) arithmetic; VipsImage *im = arithmetic->ready[0]; int bands = im->Bands; int i, x, b; switch (math2->math2) { case VIPS_OPERATION_MATH2_POW: SWITCH(LOOPC, POW); break; case VIPS_OPERATION_MATH2_WOP: SWITCH(LOOPC, WOP); break; case VIPS_OPERATION_MATH2_ATAN2: SWITCH(LOOPC, ATAN2); break; default: g_assert_not_reached(); break; } } static void vips_math2_const_class_init(VipsMath2ConstClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "math2_const"; object_class->description = _("binary math operations with a constant"); object_class->build = vips_math2_const_build; aclass->process_line = vips_math2_const_buffer; vips_arithmetic_set_format_table(aclass, vips_math2_format_table); VIPS_ARG_ENUM(class, "math2", 200, _("Operation"), _("Math to perform"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMath2Const, math2), VIPS_TYPE_OPERATION_MATH2, VIPS_OPERATION_MATH2_POW); } static void vips_math2_const_init(VipsMath2Const *math2_const) { } static int vips_math2_constv(VipsImage *in, VipsImage **out, VipsOperationMath2 math2, const double *c, int n, va_list ap) { VipsArea *area_c; double *array; int result; int i; area_c = vips_area_new_array(G_TYPE_DOUBLE, sizeof(double), n); array = (double *) area_c->data; for (i = 0; i < n; i++) array[i] = c[i]; result = vips_call_split("math2_const", ap, in, out, math2, area_c); vips_area_unref(area_c); return result; } /** * vips_math2_const: (method) * @in: input image * @out: (out): output image * @math2: math operation to perform * @c: (array length=n): array of constants * @n: number of constants in @c * @...: %NULL-terminated list of optional named arguments * * This operation calculates various 2-ary maths operations on an image and * an array of constants and writes the result to @out. * The image may have any * non-complex format. @out is float except in the case that @in * is double, in which case @out is also double. * * It detects division by zero, setting those pixels to zero in the output. * Beware: it does this silently! * * If the array of constants has just one element, that constant is used for * all image bands. If the array has more than one element and they have * the same number of elements as there are bands in the image, then * one array element is used for each band. If the arrays have more than one * element and the image only has a single band, the result is a many-band * image where each band corresponds to one array element. * * See also: vips_math2(), vips_math(). * * Returns: 0 on success, -1 on error */ int vips_math2_const(VipsImage *in, VipsImage **out, VipsOperationMath2 math2, const double *c, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_math2_constv(in, out, math2, c, n, ap); va_end(ap); return result; } /** * vips_pow_const: (method) * @in: left-hand input #VipsImage * @out: (out): output #VipsImage * @c: (array length=n): array of constants * @n: number of constants in @c * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH2_POW on an image and a constant. See * vips_math2_const(). * * Returns: 0 on success, -1 on error */ int vips_pow_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_math2_constv(in, out, VIPS_OPERATION_MATH2_POW, c, n, ap); va_end(ap); return result; } /** * vips_wop_const: (method) * @in: left-hand input #VipsImage * @out: (out): output #VipsImage * @c: (array length=n): array of constants * @n: number of constants in @c * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH2_WOP on an image and a constant. See * vips_math2_const(). * * Returns: 0 on success, -1 on error */ int vips_wop_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_math2_constv(in, out, VIPS_OPERATION_MATH2_WOP, c, n, ap); va_end(ap); return result; } /** * vips_atan2_const: (method) * @in: left-hand input #VipsImage * @out: (out): output #VipsImage * @c: (array length=n): array of constants * @n: number of constants in @c * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH2_ATAN2 on an image and a constant. See * vips_math2_const(). * * Returns: 0 on success, -1 on error */ int vips_atan2_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_math2_constv(in, out, VIPS_OPERATION_MATH2_ATAN2, c, n, ap); va_end(ap); return result; } /** * vips_math2_const1: (method) * @in: input image * @out: (out): output image * @math2: math operation to perform * @c: constant * @...: %NULL-terminated list of optional named arguments * * This operation calculates various 2-ary maths operations on an image and * a constant. See vips_math2_const(). * * Returns: 0 on success, -1 on error */ int vips_math2_const1(VipsImage *in, VipsImage **out, VipsOperationMath2 math2, double c, ...) { va_list ap; int result; va_start(ap, c); result = vips_math2_constv(in, out, math2, &c, 1, ap); va_end(ap); return result; } /** * vips_pow_const1: (method) * @in: left-hand input #VipsImage * @out: (out): output #VipsImage * @c: constant * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH2_POW on an image and a constant. See * vips_math2_const(). * * Returns: 0 on success, -1 on error */ int vips_pow_const1(VipsImage *in, VipsImage **out, double c, ...) { va_list ap; int result; va_start(ap, c); result = vips_math2_constv(in, out, VIPS_OPERATION_MATH2_POW, &c, 1, ap); va_end(ap); return result; } /** * vips_wop_const1: (method) * @in: left-hand input #VipsImage * @out: (out): output #VipsImage * @c: constant * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH2_WOP on an image and a constant. See * vips_math2_const(). * * Returns: 0 on success, -1 on error */ int vips_wop_const1(VipsImage *in, VipsImage **out, double c, ...) { va_list ap; int result; va_start(ap, c); result = vips_math2_constv(in, out, VIPS_OPERATION_MATH2_WOP, &c, 1, ap); va_end(ap); return result; } /** * vips_atan2_const1: (method) * @in: left-hand input #VipsImage * @out: (out): output #VipsImage * @c: constant * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_MATH2_ATAN2 on an image and a constant. See * vips_math2_const(). * * Returns: 0 on success, -1 on error */ int vips_atan2_const1(VipsImage *in, VipsImage **out, double c, ...) { va_list ap; int result; va_start(ap, c); result = vips_math2_constv(in, out, VIPS_OPERATION_MATH2_ATAN2, &c, 1, ap); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/max.c000066400000000000000000000312401454007373500200200ustar00rootroot00000000000000/* find image maximum * * Copyright: 1990, J. Cupitt * * Author: J. Cupitt * Written on: 02/05/1990 * Modified on : 18/03/1991, N. Dessipris * 23/11/92: J.Cupitt - correct result for more than 1 band now. * 23/7/93 JC * - im_incheck() call added * 20/6/95 JC * - now returns double for value, like im_max() * 4/9/09 * - gtkdoc comment * 8/9/09 * - rewrite based on im_max() to get partial * - move im_max() in here as a convenience function * 6/11/11 * - rewrite as a class * - abandon scan if we find maximum possible value * 24/2/12 * - avoid NaN in float/double/complex images * - allow +/- INFINITY as a result * 4/12/12 * - track and return top n values * 24/1/17 * - sort equal values by y then x to make order more consistent */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "statistic.h" /* Track max values and position here. We need one of these for each thread, * and one for the main value. * * We will generally only be tracking a small (<10?) number of values, so * simple arrays will be fastest. */ typedef struct _VipsValues { struct _VipsMax *max; /* Number of values we track. */ int size; /* How many values we have in the arrays. */ int n; /* Position and values. We track mod**2 for complex and do a sqrt() at * the end. The three arrays are sorted by @value, smallest first. */ double *value; int *x_pos; int *y_pos; } VipsValues; typedef struct _VipsMax { VipsStatistic parent_instance; /* Max number of values we track. */ int size; /* The single max. Can be unset if, for example, the whole image is * NaN. */ double out; int x; int y; /* And the positions and values we found as VipsArrays for returning * to our caller. */ VipsArrayDouble *out_array; VipsArrayInt *x_array; VipsArrayInt *y_array; /* Global state here. */ VipsValues values; } VipsMax; static void vips_values_init(VipsValues *values, VipsMax *max) { values->max = max; values->size = max->size; values->n = 0; values->value = VIPS_ARRAY(max, values->size, double); values->x_pos = VIPS_ARRAY(max, values->size, int); values->y_pos = VIPS_ARRAY(max, values->size, int); } /* Add a value. Do nothing if the value is too small. */ static void vips_values_add(VipsValues *values, double v, int x, int y) { int i, j; /* Find insertion point. */ for (i = 0; i < values->n; i++) { if (v < values->value[i]) break; if (v == values->value[i]) { if (y < values->y_pos[i]) break; if (y == values->y_pos[i]) if (x <= values->x_pos[i]) break; } } /* Array full? */ if (values->n == values->size) { if (i > 0) { /* We need to move stuff to the left to make space, * shunting the smallest out. */ for (j = 0; j < i - 1; j++) { values->value[j] = values->value[j + 1]; values->x_pos[j] = values->x_pos[j + 1]; values->y_pos[j] = values->y_pos[j + 1]; } values->value[i - 1] = v; values->x_pos[i - 1] = x; values->y_pos[i - 1] = y; } } else { /* Not full, move stuff to the right into empty space. */ for (j = values->n; j > i; j--) { values->value[j] = values->value[j - 1]; values->x_pos[j] = values->x_pos[j - 1]; values->y_pos[j] = values->y_pos[j - 1]; } values->value[i] = v; values->x_pos[i] = x; values->y_pos[i] = y; values->n += 1; } } typedef VipsStatisticClass VipsMaxClass; G_DEFINE_TYPE(VipsMax, vips_max, VIPS_TYPE_STATISTIC); static int vips_max_build(VipsObject *object) { VipsStatistic *statistic = VIPS_STATISTIC(object); VipsMax *max = (VipsMax *) object; VipsValues *values = &max->values; vips_values_init(values, max); if (VIPS_OBJECT_CLASS(vips_max_parent_class)->build(object)) return -1; /* For speed we accumulate max ** 2 for complex. */ if (vips_band_format_iscomplex( vips_image_get_format(statistic->in))) { int i; for (i = 0; i < values->n; i++) values->value[i] = sqrt(values->value[i]); } /* Don't set if there's no value (eg. if every pixel is NaN). This * will trigger an error later. */ if (values->n > 0) { VipsArrayDouble *out_array; VipsArrayInt *x_array; VipsArrayInt *y_array; out_array = vips_array_double_new(values->value, values->n); x_array = vips_array_int_new(values->x_pos, values->n); y_array = vips_array_int_new(values->y_pos, values->n); /* We have to set the props via g_object_set() to stop vips * complaining they are unset. */ g_object_set(max, "out", values->value[values->n - 1], "x", values->x_pos[values->n - 1], "y", values->y_pos[values->n - 1], "out_array", out_array, "x_array", x_array, "y_array", y_array, NULL); vips_area_unref(VIPS_AREA(out_array)); vips_area_unref(VIPS_AREA(x_array)); vips_area_unref(VIPS_AREA(y_array)); } #ifdef DEBUG { int i; printf("vips_max_build: %d values found\n", values->n); for (i = 0; i < values->n; i++) printf("%d) %g\t%d\t%d\n", i, values->value[i], values->x_pos[i], values->y_pos[i]); } #endif /*DEBUG*/ return 0; } /* New sequence value. Make a private VipsValues for this thread. */ static void * vips_max_start(VipsStatistic *statistic) { VipsValues *values; values = g_new(VipsValues, 1); vips_values_init(values, (VipsMax *) statistic); return (void *) values; } /* Merge the sequence value back into the per-call state. */ static int vips_max_stop(VipsStatistic *statistic, void *seq) { VipsMax *max = (VipsMax *) statistic; VipsValues *values = (VipsValues *) seq; int i; for (i = 0; i < values->n; i++) vips_values_add(&max->values, values->value[i], values->x_pos[i], values->y_pos[i]); g_free(values); return 0; } /* Real max with an upper bound. * * Add values to the buffer if they are greater than the buffer minimum. If * the buffer isn't full, there is no minimum. * * Avoid a double test by splitting the loop into two phases: before and after * the buffer fills. * * Stop if our array fills with maxval. */ #define LOOPU(TYPE, UPPER) \ { \ TYPE *p = (TYPE *) in; \ TYPE m; \ \ for (i = 0; i < sz && values->n < values->size; i++) \ vips_values_add(values, p[i], x + i / bands, y); \ m = values->value[0]; \ \ for (; i < sz; i++) { \ if (p[i] > m) { \ vips_values_add(values, p[i], x + i / bands, y); \ m = values->value[0]; \ \ if (m >= UPPER) { \ statistic->stop = TRUE; \ break; \ } \ } \ } \ } /* float/double max ... no limits, and we have to avoid NaN. * * NaN compares false to every float value, so we don't need to test for NaN * in the second loop. */ #define LOOPF(TYPE) \ { \ TYPE *p = (TYPE *) in; \ TYPE m; \ \ for (i = 0; i < sz && values->n < values->size; i++) \ if (!VIPS_ISNAN(p[i])) \ vips_values_add(values, p[i], x + i / bands, y); \ m = values->value[0]; \ \ for (; i < sz; i++) \ if (p[i] > m) { \ vips_values_add(values, p[i], x + i / bands, y); \ m = values->value[0]; \ } \ } /* As LOOPF, but complex. Track max(mod ** 2) to avoid sqrt(). */ #define LOOPC(TYPE) \ { \ TYPE *p = (TYPE *) in; \ TYPE m; \ \ for (i = 0; i < sz && values->n < values->size; i++) { \ TYPE mod2 = p[0] * p[0] + p[1] * p[1]; \ \ if (!VIPS_ISNAN(mod2)) \ vips_values_add(values, p[i], x + i / bands, y); \ \ p += 2; \ } \ m = values->value[0]; \ \ for (; i < sz; i++) { \ TYPE mod2 = p[0] * p[0] + p[1] * p[1]; \ \ if (mod2 > m) { \ vips_values_add(values, mod2, x + i / bands, y); \ m = values->value[0]; \ } \ \ p += 2; \ } \ } /* Loop over region, adding to seq. */ static int vips_max_scan(VipsStatistic *statistic, void *seq, int x, int y, void *in, int n) { VipsValues *values = (VipsValues *) seq; const int bands = vips_image_get_bands(statistic->in); const int sz = n * bands; int i; switch (vips_image_get_format(statistic->in)) { case VIPS_FORMAT_UCHAR: LOOPU(unsigned char, UCHAR_MAX); break; case VIPS_FORMAT_CHAR: LOOPU(signed char, SCHAR_MAX); break; case VIPS_FORMAT_USHORT: LOOPU(unsigned short, USHRT_MAX); break; case VIPS_FORMAT_SHORT: LOOPU(signed short, SHRT_MAX); break; case VIPS_FORMAT_UINT: LOOPU(unsigned int, UINT_MAX); break; case VIPS_FORMAT_INT: LOOPU(signed int, INT_MAX); break; case VIPS_FORMAT_FLOAT: LOOPF(float); break; case VIPS_FORMAT_DOUBLE: LOOPF(double); break; case VIPS_FORMAT_COMPLEX: LOOPC(float); break; case VIPS_FORMAT_DPCOMPLEX: LOOPC(double); break; default: g_assert_not_reached(); } return 0; } static void vips_max_class_init(VipsMaxClass *class) { GObjectClass *gobject_class = (GObjectClass *) class; VipsObjectClass *object_class = (VipsObjectClass *) class; VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "max"; object_class->description = _("find image maximum"); object_class->build = vips_max_build; sclass->start = vips_max_start; sclass->scan = vips_max_scan; sclass->stop = vips_max_stop; VIPS_ARG_DOUBLE(class, "out", 1, _("Output"), _("Output value"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsMax, out), -INFINITY, INFINITY, 0.0); VIPS_ARG_INT(class, "x", 2, _("x"), _("Horizontal position of maximum"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsMax, x), 0, VIPS_MAX_COORD, 0); VIPS_ARG_INT(class, "y", 3, _("y"), _("Vertical position of maximum"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsMax, y), 0, VIPS_MAX_COORD, 0); VIPS_ARG_INT(class, "size", 4, _("Size"), _("Number of maximum values to find"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMax, size), 1, 1000000, 10); VIPS_ARG_BOXED(class, "out_array", 6, _("Output array"), _("Array of output values"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsMax, out_array), VIPS_TYPE_ARRAY_DOUBLE); VIPS_ARG_BOXED(class, "x_array", 7, _("x array"), _("Array of horizontal positions"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsMax, x_array), VIPS_TYPE_ARRAY_INT); VIPS_ARG_BOXED(class, "y_array", 8, _("y array"), _("Array of vertical positions"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsMax, y_array), VIPS_TYPE_ARRAY_INT); } static void vips_max_init(VipsMax *max) { max->size = 1; } /** * vips_max: (method) * @in: input #VipsImage * @out: (out): output pixel maximum * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @x: horizontal position of maximum * * @y: vertical position of maximum * * @size: number of maxima to find * * @out_array: return array of maximum values * * @x_array: corresponding horizontal positions * * @y_array: corresponding vertical positions * * This operation finds the maximum value in an image. * * By default it finds the single largest value. If @size is set >1, it will * find the @size largest values. It will stop searching early if has found * enough values. * Equal values will be sorted by y then x. * * It operates on all * bands of the input image: use vips_stats() if you need to find an * maximum for each band. * * For complex images, this operation finds the maximum modulus. * * You can read out the position of the maximum with @x and @y. You can read * out arrays of the values and positions of the top @size maxima with * @out_array, @x_array and @y_array. These values are returned sorted from * largest to smallest. * * If there are more than @size maxima, the maxima returned will be a random * selection of the maxima in the image. * * See also: vips_min(), vips_stats(). * * Returns: 0 on success, -1 on error */ int vips_max(VipsImage *in, double *out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("max", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/measure.c000066400000000000000000000160601454007373500206770ustar00rootroot00000000000000/* im_measure.c * * Modified: * 19/8/94 JC * - now uses doubles for addressing * - could miss by up to h pixels previously! * - ANSIfied * - now issues warning if any deviations are greater than 20% of the * mean * 31/10/95 JC * - more careful about warning for averages <0, or averages near zero * - can get these cases with im_measure() of IM_TYPE_LAB images * 28/10/02 JC * - number bands from zero in error messages * 7/7/04 * - works on labq * 18/8/08 * - add gtkdoc comments * - remove deprecated im_extract() * 30/11/09 * - changes for im_extract() broke averaging * 9/11/11 * - redo as a class * 19/5/14 * - add auto-unpack */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "statistic.h" typedef struct _VipsMeasure { VipsOperation parent_instance; VipsImage *in; VipsImage *out; int left; int top; int width; int height; int h; int v; } VipsMeasure; typedef VipsOperationClass VipsMeasureClass; G_DEFINE_TYPE(VipsMeasure, vips_measure, VIPS_TYPE_OPERATION); static int vips_measure_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsMeasure *measure = (VipsMeasure *) object; VipsImage *ready; int bands; double pw; double ph; int j, i; int w, h; int b; if (VIPS_OBJECT_CLASS(vips_measure_parent_class)->build(object)) return -1; if (vips_image_decode(measure->in, &ready)) return -1; vips_object_local(measure, ready); bands = vips_image_get_bands(ready); g_object_set(object, "out", vips_image_new_matrix(bands, measure->h * measure->v), NULL); /* left/top/width/height default to the size of the image. */ if (!vips_object_argument_isset(object, "width")) measure->width = vips_image_get_width(ready); if (!vips_object_argument_isset(object, "height")) measure->height = vips_image_get_height(ready); /* How large are the patches we are to measure? */ pw = (double) measure->width / measure->h; ph = (double) measure->height / measure->v; /* The size of a patch. */ w = (pw + 1) / 2; h = (ph + 1) / 2; for (j = 0; j < measure->v; j++) { for (i = 0; i < measure->h; i++) { int x = measure->left + i * pw + (pw + 2) / 4; int y = measure->top + j * ph + (ph + 2) / 4; double avg, dev; for (b = 0; b < bands; b++) { VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); /* Extract and measure. */ if (vips_extract_area(ready, &t[0], x, y, w, h, NULL) || vips_extract_band(t[0], &t[1], b, NULL) || vips_avg(t[1], &avg, NULL) || vips_deviate(t[1], &dev, NULL)) return -1; /* Is the deviation large compared with the * average? This could be a clue that our * parameters have caused us to miss the * patch. Look out for averages <0, or * averages near zero (can get these if use * measure on IM_TYPE_LAB images). */ if (dev * 5 > VIPS_FABS(avg) && VIPS_FABS(avg) > 3) g_warning(_("%s: " "patch %d x %d, " "band %d: " "avg = %g, sdev = %g"), class->nickname, i, j, b, avg, dev); *VIPS_MATRIX(measure->out, b, i + j * measure->h) = avg; } } } return 0; } static void vips_measure_class_init(VipsMeasureClass *class) { GObjectClass *gobject_class = (GObjectClass *) class; VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "measure"; object_class->description = _("measure a set of patches on a color chart"); object_class->build = vips_measure_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Image to measure"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMeasure, in)); VIPS_ARG_IMAGE(class, "out", 2, _("Output"), _("Output array of statistics"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsMeasure, out)); VIPS_ARG_INT(class, "h", 5, _("Across"), _("Number of patches across chart"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMeasure, h), 1, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "v", 6, _("Down"), _("Number of patches down chart"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMeasure, v), 1, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "left", 10, _("Left"), _("Left edge of extract area"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMeasure, left), 0, VIPS_MAX_COORD, 0); VIPS_ARG_INT(class, "top", 11, _("Top"), _("Top edge of extract area"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMeasure, top), 0, VIPS_MAX_COORD, 0); VIPS_ARG_INT(class, "width", 12, _("Width"), _("Width of extract area"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMeasure, width), 1, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "height", 13, _("Height"), _("Height of extract area"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMeasure, height), 1, VIPS_MAX_COORD, 1); } static void vips_measure_init(VipsMeasure *measure) { } /** * vips_measure: (method) * @in: image to measure * @out: (out): array of measurements * @h: patches across chart * @v: patches down chart * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @left: area of image containing chart * * @top: area of image containing chart * * @width: area of image containing chart * * @height: area of image containing chart * * Analyse a grid of colour patches, producing an array of patch averages. * The mask has a row for each measured patch and a column for each image * band. The operations issues a warning if any patch has a deviation more * than 20% of * the mean. Only the central 50% of each patch is averaged. * * If the chart does not fill the whole image, use the optional @left, @top, * @width, @height arguments to indicate the * position of the chart. * * See also: vips_avg(), vips_deviate(). * * Returns: 0 on success, -1 on error */ int vips_measure(VipsImage *in, VipsImage **out, int h, int v, ...) { va_list ap; int result; va_start(ap, v); result = vips_call_split("measure", ap, in, out, h, v); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/meson.build000066400000000000000000000020531454007373500212310ustar00rootroot00000000000000arithmetic_sources = files( 'find_trim.c', 'sum.c', 'hough.c', 'hough_line.c', 'hough_circle.c', 'abs.c', 'complex.c', 'deviate.c', 'divide.c', 'measure.c', 'getpoint.c', 'multiply.c', 'remainder.c', 'sign.c', 'statistic.c', 'stats.c', 'avg.c', 'min.c', 'max.c', 'hist_find.c', 'hist_find_ndim.c', 'hist_find_indexed.c', 'project.c', 'profile.c', 'subtract.c', 'math.c', 'arithmetic.c', 'binary.c', 'unary.c', 'nary.c', 'unaryconst.c', 'relational.c', 'boolean.c', 'add.c', 'linear.c', 'invert.c', 'math2.c', 'round.c', ) arithmetic_headers = files( 'hough.h', 'statistic.h', 'parithmetic.h', 'binary.h', 'unary.h', 'nary.h', 'unaryconst.h' ) libvips_sources += arithmetic_sources arithmetic_lib = static_library('arithmetic', arithmetic_sources, arithmetic_headers, dependencies: libvips_deps, gnu_symbol_visibility: 'hidden', ) libvips_components += arithmetic_lib libvips-8.15.1/libvips/arithmetic/min.c000066400000000000000000000310151454007373500200160ustar00rootroot00000000000000/* find image minimum * * Copyright: 1990, J. Cupitt * * Author: J. Cupitt * Written on: 02/05/1990 * Modified on : 18/03/1991, N. Dessipris * 23/11/92 JC * - correct result for more than 1 band now. * 23/7/93 JC * - im_incheck() added * 20/6/95 JC * - now returns double for value, like im_min() * 4/9/09 * - gtkdoc comment * 8/9/09 * - rewrite, from im_minpos() * 30/8/11 * - rewrite as a class * 5/9/11 * - abandon scan if we find minimum possible value * 24/2/12 * - avoid NaN in float/double/complex images * - allow +/- INFINITY as a result * 4/12/12 * - from min.c * - track and return bottom n values */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "statistic.h" /* Track min values and position here. We need one of these for each thread, * and one for the main value. * * We will generally only be tracking a small (<10?) number of values, so * simple arrays will be fastest. */ typedef struct _VipsValues { struct _VipsMin *min; /* The min number of values we track. */ int size; /* How many values we have in the arrays. */ int n; /* Position and values. We track mod**2 for complex and do a sqrt() at * the end. The three arrays are sorted by @value, largest first. */ double *value; int *x_pos; int *y_pos; } VipsValues; typedef struct _VipsMin { VipsStatistic parent_instance; /* Number of values we track. */ int size; /* The single min. Can be unset if, for example, the whole image is * NaN. */ double min; int x; int y; /* And the positions and values we found as VipsArrays for returning * to our caller. */ VipsArrayDouble *min_array; VipsArrayInt *x_array; VipsArrayInt *y_array; /* Global state here. */ VipsValues values; } VipsMin; static void vips_values_init(VipsValues *values, VipsMin *min) { values->min = min; values->size = min->size; values->n = 0; values->value = VIPS_ARRAY(min, values->size, double); values->x_pos = VIPS_ARRAY(min, values->size, int); values->y_pos = VIPS_ARRAY(min, values->size, int); } /* Add a value. Do nothing if the value is too large. */ static void vips_values_add(VipsValues *values, double v, int x, int y) { int i, j; /* Find insertion point. */ for (i = 0; i < values->n; i++) { if (v > values->value[i]) break; if (v == values->value[i]) { if (y < values->y_pos[i]) break; if (y == values->y_pos[i]) if (x <= values->x_pos[i]) break; } } /* Array full? */ if (values->n == values->size) { if (i > 0) { /* We need to move stuff to the left to make space, * shunting the largest out. */ for (j = 0; j < i - 1; j++) { values->value[j] = values->value[j + 1]; values->x_pos[j] = values->x_pos[j + 1]; values->y_pos[j] = values->y_pos[j + 1]; } values->value[i - 1] = v; values->x_pos[i - 1] = x; values->y_pos[i - 1] = y; } } else { /* Not full, move stuff to the right into empty space. */ for (j = values->n; j > i; j--) { values->value[j] = values->value[j - 1]; values->x_pos[j] = values->x_pos[j - 1]; values->y_pos[j] = values->y_pos[j - 1]; } values->value[i] = v; values->x_pos[i] = x; values->y_pos[i] = y; values->n += 1; } } typedef VipsStatisticClass VipsMinClass; G_DEFINE_TYPE(VipsMin, vips_min, VIPS_TYPE_STATISTIC); static int vips_min_build(VipsObject *object) { VipsStatistic *statistic = VIPS_STATISTIC(object); VipsMin *min = (VipsMin *) object; VipsValues *values = &min->values; vips_values_init(values, min); if (VIPS_OBJECT_CLASS(vips_min_parent_class)->build(object)) return -1; /* For speed we accumulate min ** 2 for complex. */ if (vips_band_format_iscomplex( vips_image_get_format(statistic->in))) { int i; for (i = 0; i < values->n; i++) values->value[i] = sqrt(values->value[i]); } /* Don't set if there's no value (eg. if every pixel is NaN). This * will trigger an error later. */ if (values->n > 0) { VipsArrayDouble *out_array; VipsArrayInt *x_array; VipsArrayInt *y_array; out_array = vips_array_double_new(values->value, values->n); x_array = vips_array_int_new(values->x_pos, values->n); y_array = vips_array_int_new(values->y_pos, values->n); /* We have to set the props via g_object_set() to stop vips * complaining they are unset. */ g_object_set(min, "out", values->value[values->n - 1], "x", values->x_pos[values->n - 1], "y", values->y_pos[values->n - 1], "out_array", out_array, "x_array", x_array, "y_array", y_array, NULL); vips_area_unref(VIPS_AREA(out_array)); vips_area_unref(VIPS_AREA(x_array)); vips_area_unref(VIPS_AREA(y_array)); } #ifdef DEBUG { int i; printf("vips_min_build: %d values found\n", values->n); for (i = 0; i < values->n; i++) printf("%d) %g\t%d\t%d\n", i, values->value[i], values->x_pos[i], values->y_pos[i]); } #endif /*DEBUG*/ return 0; } /* New sequence value. Make a private VipsValues for this thread. */ static void * vips_min_start(VipsStatistic *statistic) { VipsValues *values; values = g_new(VipsValues, 1); vips_values_init(values, (VipsMin *) statistic); return (void *) values; } /* Merge the sequence value back into the per-call state. */ static int vips_min_stop(VipsStatistic *statistic, void *seq) { VipsMin *min = (VipsMin *) statistic; VipsValues *values = (VipsValues *) seq; int i; for (i = 0; i < values->n; i++) vips_values_add(&min->values, values->value[i], values->x_pos[i], values->y_pos[i]); g_free(values); return 0; } /* Real min with a lower bound. * * Add values to the buffer if they are less than the buffer maximum. If * the buffer isn't full, there is no maximum. * * Avoid a double test by splitting the loop into two phases: before and after * the buffer fills. * * Stop if our array fills with minval. */ #define LOOPU(TYPE, LOWER) \ { \ TYPE *p = (TYPE *) in; \ TYPE m; \ \ for (i = 0; i < sz && values->n < values->size; i++) \ vips_values_add(values, p[i], x + i / bands, y); \ m = values->value[0]; \ \ for (; i < sz; i++) { \ if (p[i] < m) { \ vips_values_add(values, p[i], x + i / bands, y); \ m = values->value[0]; \ \ if (m <= LOWER) { \ statistic->stop = TRUE; \ break; \ } \ } \ } \ } /* float/double min ... no limits, and we have to avoid NaN. * * NaN compares false to every float value, so we don't need to test for NaN * in the second loop. */ #define LOOPF(TYPE) \ { \ TYPE *p = (TYPE *) in; \ TYPE m; \ \ for (i = 0; i < sz && values->n < values->size; i++) \ if (!VIPS_ISNAN(p[i])) \ vips_values_add(values, p[i], x + i / bands, y); \ m = values->value[0]; \ \ for (; i < sz; i++) \ if (p[i] < m) { \ vips_values_add(values, p[i], x + i / bands, y); \ m = values->value[0]; \ } \ } /* As LOOPF, but complex. Track min(mod ** 2) to avoid sqrt(). */ #define LOOPC(TYPE) \ { \ TYPE *p = (TYPE *) in; \ TYPE m; \ \ for (i = 0; i < sz && values->n < values->size; i++) { \ TYPE mod2 = p[0] * p[0] + p[1] * p[1]; \ \ if (!VIPS_ISNAN(mod2)) \ vips_values_add(values, p[i], x + i / bands, y); \ \ p += 2; \ } \ m = values->value[0]; \ \ for (; i < sz; i++) { \ TYPE mod2 = p[0] * p[0] + p[1] * p[1]; \ \ if (mod2 < m) { \ vips_values_add(values, mod2, x + i / bands, y); \ m = values->value[0]; \ } \ \ p += 2; \ } \ } /* Loop over region, adding to seq. */ static int vips_min_scan(VipsStatistic *statistic, void *seq, int x, int y, void *in, int n) { VipsValues *values = (VipsValues *) seq; const int bands = vips_image_get_bands(statistic->in); const int sz = n * bands; int i; switch (vips_image_get_format(statistic->in)) { case VIPS_FORMAT_UCHAR: LOOPU(unsigned char, 0); break; case VIPS_FORMAT_CHAR: LOOPU(signed char, SCHAR_MIN); break; case VIPS_FORMAT_USHORT: LOOPU(unsigned short, 0); break; case VIPS_FORMAT_SHORT: LOOPU(signed short, SHRT_MIN); break; case VIPS_FORMAT_UINT: LOOPU(unsigned int, 0); break; case VIPS_FORMAT_INT: LOOPU(signed int, INT_MIN); break; case VIPS_FORMAT_FLOAT: LOOPF(float); break; case VIPS_FORMAT_DOUBLE: LOOPF(double); break; case VIPS_FORMAT_COMPLEX: LOOPC(float); break; case VIPS_FORMAT_DPCOMPLEX: LOOPC(double); break; default: g_assert_not_reached(); } return 0; } static void vips_min_class_init(VipsMinClass *class) { GObjectClass *gobject_class = (GObjectClass *) class; VipsObjectClass *object_class = (VipsObjectClass *) class; VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "min"; object_class->description = _("find image minimum"); object_class->build = vips_min_build; sclass->start = vips_min_start; sclass->scan = vips_min_scan; sclass->stop = vips_min_stop; VIPS_ARG_DOUBLE(class, "out", 1, _("Output"), _("Output value"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsMin, min), -INFINITY, INFINITY, 0.0); VIPS_ARG_INT(class, "x", 2, _("x"), _("Horizontal position of minimum"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsMin, x), 0, VIPS_MAX_COORD, 0); VIPS_ARG_INT(class, "y", 3, _("y"), _("Vertical position of minimum"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsMin, y), 0, VIPS_MAX_COORD, 0); VIPS_ARG_INT(class, "size", 4, _("Size"), _("Number of minimum values to find"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMin, size), 1, 1000000, 10); VIPS_ARG_BOXED(class, "out_array", 6, _("Output array"), _("Array of output values"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsMin, min_array), VIPS_TYPE_ARRAY_DOUBLE); VIPS_ARG_BOXED(class, "x_array", 7, _("x array"), _("Array of horizontal positions"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsMin, x_array), VIPS_TYPE_ARRAY_INT); VIPS_ARG_BOXED(class, "y_array", 8, _("y array"), _("Array of vertical positions"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsMin, y_array), VIPS_TYPE_ARRAY_INT); } static void vips_min_init(VipsMin *min) { min->size = 1; } /** * vips_min: (method) * @in: input #VipsImage * @out: (out): output pixel minimum * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @x: horizontal position of minimum * * @y: vertical position of minimum * * @size: number of minima to find * * @out_array: return array of minimum values * * @x_array: corresponding horizontal positions * * @y_array: corresponding vertical positions * * This operation finds the minimum value in an image. * * By default it finds the single smallest value. If @size is set >1, it will * find the @size smallest values. It will stop searching early if has found * enough values. * Equal values will be sorted by y then x. * * It operates on all * bands of the input image: use vips_stats() if you need to find an * minimum for each band. * * For complex images, this operation finds the minimum modulus. * * You can read out the position of the minimum with @x and @y. You can read * out arrays of the values and positions of the top @size minima with * @out_array, @x_array and @y_array. * These values are returned sorted from * smallest to largest. * * If there are more than @size minima, the minima returned will be a random * selection of the minima in the image. * * See also: vips_min(), vips_stats(). * * Returns: 0 on success, -1 on error */ int vips_min(VipsImage *in, double *out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("min", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/multiply.c000066400000000000000000000160041454007373500211130ustar00rootroot00000000000000/* im_multiply.c * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 02/05/1990 * Modified on: * 29/4/93 JC * - now works for partial images * 1/7/93 JC * - adapted for partial v2 * - ANSIfied * 19/10/93 JC * - coredump-inducing bug in complex*complex fixed * 13/12/93 * - char * short bug fixed * 12/6/95 JC * - new im_add adapted to make new im_multiply * 27/9/04 * - updated for 1 band $op n band image -> n band image case * 8/12/06 * - add liboil support * 18/8/08 * - revise upcasting system * - add gtkdoc comments * 31/7/10 * - remove liboil * 7/11/11 * - redo as a class */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "binary.h" typedef VipsBinary VipsMultiply; typedef VipsBinaryClass VipsMultiplyClass; G_DEFINE_TYPE(VipsMultiply, vips_multiply, VIPS_TYPE_BINARY); /* Complex multiply. */ #define CLOOP(TYPE) \ { \ TYPE *restrict left = (TYPE *) in[0]; \ TYPE *restrict right = (TYPE *) in[1]; \ TYPE *restrict q = (TYPE *) out; \ \ for (x = 0; x < sz; x++) { \ double x1 = left[0]; \ double y1 = left[1]; \ double x2 = right[0]; \ double y2 = right[1]; \ \ left += 2; \ right += 2; \ \ q[0] = x1 * x2 - y1 * y2; \ q[1] = x1 * y2 + x2 * y1; \ \ q += 2; \ } \ } /* Real multiply. */ #define RLOOP(IN, OUT) \ { \ IN *restrict left = (IN *) in[0]; \ IN *restrict right = (IN *) in[1]; \ OUT *restrict q = (OUT *) out; \ \ for (x = 0; x < sz; x++) \ q[x] = left[x] * right[x]; \ } static void vips_multiply_buffer(VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width) { VipsImage *im = arithmetic->ready[0]; const int sz = width * vips_image_get_bands(im); int x; /* Keep types here in sync with vips_bandfmt_multiply[] * below. */ switch (vips_image_get_format(im)) { case VIPS_FORMAT_CHAR: RLOOP(signed char, signed short); break; case VIPS_FORMAT_UCHAR: RLOOP(unsigned char, signed short); break; case VIPS_FORMAT_SHORT: RLOOP(signed short, signed int); break; case VIPS_FORMAT_USHORT: RLOOP(unsigned short, signed int); break; case VIPS_FORMAT_INT: RLOOP(signed int, signed int); break; case VIPS_FORMAT_UINT: RLOOP(unsigned int, signed int); break; case VIPS_FORMAT_FLOAT: RLOOP(float, float); break; case VIPS_FORMAT_DOUBLE: RLOOP(double, double); break; case VIPS_FORMAT_COMPLEX: CLOOP(float); break; case VIPS_FORMAT_DPCOMPLEX: CLOOP(double); break; default: g_assert_not_reached(); } } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX /* Type promotion for multiplication. Sign and value preserving. Make sure * these match the case statement in multiply_buffer() above. */ static const VipsBandFormat vips_multiply_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ US, S, UI, I, UI, I, F, X, D, DX }; static void vips_multiply_class_init(VipsMultiplyClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class); object_class->nickname = "multiply"; object_class->description = _("multiply two images"); aclass->process_line = vips_multiply_buffer; vips_arithmetic_set_format_table(aclass, vips_multiply_format_table); } static void vips_multiply_init(VipsMultiply *multiply) { } /** * vips_multiply: * @left: left-hand image * @right: right-hand image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * This operation calculates @left * @right and writes the result to @out. * * If the images differ in size, the smaller image is enlarged to match the * larger by adding zero pixels along the bottom and right. * * If the number of bands differs, one of the images * must have one band. In this case, an n-band image is formed from the * one-band image by joining n copies of the one-band image together, and then * the two n-band images are operated upon. * * The two input images are cast up to the smallest common format (see table * Smallest common format in * arithmetic), then the * following table is used to determine the output type: * * * VipsMultiply type promotion * * * * input type * output type * * * * * uchar * ushort * * * char * short * * * ushort * uint * * * short * int * * * uint * uint * * * int * int * * * float * float * * * double * double * * * complex * complex * * * double complex * double complex * * * *
* * In other words, the output type is just large enough to hold the whole * range of possible values. * * See also: vips_add(), vips_linear(). * * Returns: 0 on success, -1 on error */ int vips_multiply(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("multiply", ap, left, right, out); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/nary.c000066400000000000000000000042731454007373500202120ustar00rootroot00000000000000/* base class for all nary operations * * 18/3/14 * - from binary.c */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "nary.h" G_DEFINE_ABSTRACT_TYPE(VipsNary, vips_nary, VIPS_TYPE_ARITHMETIC); static int vips_nary_build(VipsObject *object) { VipsArithmetic *arithmetic = VIPS_ARITHMETIC(object); VipsNary *nary = VIPS_NARY(object); if (nary->in) { arithmetic->in = nary->in->data; arithmetic->n = nary->in->n; } if (VIPS_OBJECT_CLASS(vips_nary_parent_class)->build(object)) return -1; return 0; } static void vips_nary_class_init(VipsNaryClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "nary"; vobject_class->description = _("nary operations"); vobject_class->build = vips_nary_build; /* Create properties. */ VIPS_ARG_BOXED(class, "in", 0, _("Input"), _("Array of input images"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsNary, in), VIPS_TYPE_ARRAY_IMAGE); } static void vips_nary_init(VipsNary *nary) { /* Init our instance fields. */ } libvips-8.15.1/libvips/arithmetic/nary.h000066400000000000000000000034401454007373500202120ustar00rootroot00000000000000/* base class for all nary arithmetic operations */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_NARY_H #define VIPS_NARY_H #include #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #include "parithmetic.h" #define VIPS_TYPE_NARY (vips_nary_get_type()) #define VIPS_NARY(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_NARY, VipsNary)) #define VIPS_NARY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_NARY, VipsNaryClass)) #define VIPS_IS_NARY(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_NARY)) #define VIPS_IS_NARY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_NARY)) #define VIPS_NARY_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_NARY, VipsNaryClass)) typedef struct _VipsNary { VipsArithmetic parent_instance; /* The input images. */ VipsArea *in; } VipsNary; typedef VipsArithmeticClass VipsNaryClass; GType vips_nary_get_type(void); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_NARY_H*/ libvips-8.15.1/libvips/arithmetic/parithmetic.h000066400000000000000000000054541454007373500215610ustar00rootroot00000000000000/* base class for all arithmetic operations */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_PARITHMETIC_H #define VIPS_PARITHMETIC_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #include #define VIPS_TYPE_ARITHMETIC (vips_arithmetic_get_type()) #define VIPS_ARITHMETIC(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_ARITHMETIC, VipsArithmetic)) #define VIPS_ARITHMETIC_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_ARITHMETIC, VipsArithmeticClass)) #define VIPS_IS_ARITHMETIC(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_ARITHMETIC)) #define VIPS_IS_ARITHMETIC_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_ARITHMETIC)) #define VIPS_ARITHMETIC_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_ARITHMETIC, VipsArithmeticClass)) struct _VipsArithmetic; typedef void (*VipsArithmeticProcessFn)(struct _VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width); typedef struct _VipsArithmetic { VipsOperation parent_instance; /* All have an output image. */ VipsImage *out; /* Array of input arguments, set these from a subclass. */ VipsImage **in; int n; /* The minimum number of output bands. For example, VipsLinear with a * three element constant must make at least a three-band output. */ int base_bands; /* The input images, ready for the operation. */ VipsImage **ready; /* Set this to override class->format_table. */ VipsBandFormat format; } VipsArithmetic; typedef struct _VipsArithmeticClass { VipsOperationClass parent_class; /* For each input format, what output format. Used for arithmetic * too, since we cast inputs to match. */ const VipsBandFormat *format_table; /* The buffer processor. */ VipsArithmeticProcessFn process_line; } VipsArithmeticClass; GType vips_arithmetic_get_type(void); void vips_arithmetic_set_format_table(VipsArithmeticClass *klass, const VipsBandFormat *format_table); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_PARITHMETIC_H*/ libvips-8.15.1/libvips/arithmetic/profile.c000066400000000000000000000171711454007373500207020ustar00rootroot00000000000000/* find image profiles * * 11/8/99 JC * - from im_cntlines() * 22/4/04 * - now outputs horizontal/vertical image * 9/11/10 * - any image format, any number of bands * - gtk-doc * 21/9/13 * - rewrite as a class * - output h and v profile in one pass * - partial * - output is int rather than ushort */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "statistic.h" struct _Edges; typedef struct { /* Horizontal array: Ys of top-most non-zero pixel. */ int *column_edges; /* Vertical array: Xs of left-most non-zero pixel. */ int *row_edges; } Edges; typedef struct _VipsProfile { VipsStatistic parent_instance; /* Main edge set. Threads accumulate to this. */ Edges *edges; /* Write profiles here. */ VipsImage *columns; VipsImage *rows; } VipsProfile; typedef VipsStatisticClass VipsProfileClass; G_DEFINE_TYPE(VipsProfile, vips_profile, VIPS_TYPE_STATISTIC); static Edges * edges_new(VipsProfile *profile) { VipsStatistic *statistic = VIPS_STATISTIC(profile); VipsImage *in = statistic->ready; Edges *edges; int i; if (!(edges = VIPS_NEW(profile, Edges))) return NULL; edges->column_edges = VIPS_ARRAY(profile, in->Xsize * in->Bands, int); edges->row_edges = VIPS_ARRAY(profile, in->Ysize * in->Bands, int); if (!edges->column_edges || !edges->row_edges) return NULL; for (i = 0; i < in->Xsize * in->Bands; i++) edges->column_edges[i] = in->Ysize; for (i = 0; i < in->Ysize * in->Bands; i++) edges->row_edges[i] = in->Xsize; return edges; } static int vips_profile_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsStatistic *statistic = VIPS_STATISTIC(object); VipsProfile *profile = (VipsProfile *) object; int y; if (statistic->in && vips_check_noncomplex(class->nickname, statistic->in)) return -1; g_object_set(object, "columns", vips_image_new(), "rows", vips_image_new(), NULL); /* main edge set made on first thread start. */ if (VIPS_OBJECT_CLASS(vips_profile_parent_class)->build(object)) return -1; /* Make the output image. */ if (vips_image_pipelinev(profile->columns, VIPS_DEMAND_STYLE_ANY, statistic->ready, NULL) || vips_image_pipelinev(profile->rows, VIPS_DEMAND_STYLE_ANY, statistic->ready, NULL)) return -1; profile->columns->Ysize = 1; profile->columns->BandFmt = VIPS_FORMAT_INT; profile->columns->Type = VIPS_INTERPRETATION_HISTOGRAM; profile->rows->Xsize = 1; profile->rows->BandFmt = VIPS_FORMAT_INT; profile->rows->Type = VIPS_INTERPRETATION_HISTOGRAM; if (vips_image_write_line(profile->columns, 0, (VipsPel *) profile->edges->column_edges)) return -1; for (y = 0; y < profile->rows->Ysize; y++) if (vips_image_write_line(profile->rows, y, (VipsPel *) profile->edges->row_edges + y * VIPS_IMAGE_SIZEOF_PEL(profile->rows))) return -1; return 0; } /* New edge accumulator. */ static void * vips_profile_start(VipsStatistic *statistic) { VipsProfile *profile = (VipsProfile *) statistic; /* Make the main hist, if necessary. */ if (!profile->edges) profile->edges = edges_new(profile); return (void *) edges_new(profile); } /* We do this a lot. */ #define MINBANG(V, C) ((V) = VIPS_MIN(V, C)) /* Add a line of pixels. */ #define ADD_PIXELS(TYPE) \ { \ TYPE *p; \ int *column_edges; \ int *row_edges; \ \ p = (TYPE *) in; \ column_edges = edges->column_edges + x * nb; \ row_edges = edges->row_edges + y * nb; \ for (i = 0; i < n; i++) { \ for (j = 0; j < nb; j++) { \ if (p[j]) { \ MINBANG(column_edges[j], y); \ MINBANG(row_edges[j], x + i); \ } \ } \ \ p += nb; \ column_edges += nb; \ } \ } /* Add a region to a profile. */ static int vips_profile_scan(VipsStatistic *statistic, void *seq, int x, int y, void *in, int n) { int nb = statistic->ready->Bands; Edges *edges = (Edges *) seq; int i, j; switch (statistic->ready->BandFmt) { case VIPS_FORMAT_UCHAR: ADD_PIXELS(guchar); break; case VIPS_FORMAT_CHAR: ADD_PIXELS(char); break; case VIPS_FORMAT_USHORT: ADD_PIXELS(gushort); break; case VIPS_FORMAT_SHORT: ADD_PIXELS(short); break; case VIPS_FORMAT_UINT: ADD_PIXELS(guint); break; case VIPS_FORMAT_INT: ADD_PIXELS(int); break; case VIPS_FORMAT_FLOAT: ADD_PIXELS(float); break; case VIPS_FORMAT_DOUBLE: ADD_PIXELS(double); break; default: g_assert_not_reached(); } return 0; } /* Join a sub-profile onto the main profile. */ static int vips_profile_stop(VipsStatistic *statistic, void *seq) { VipsProfile *profile = (VipsProfile *) statistic; Edges *edges = profile->edges; Edges *sub_edges = (Edges *) seq; VipsImage *in = statistic->ready; int i; for (i = 0; i < in->Xsize * in->Bands; i++) MINBANG(edges->column_edges[i], sub_edges->column_edges[i]); for (i = 0; i < in->Ysize * in->Bands; i++) MINBANG(edges->row_edges[i], sub_edges->row_edges[i]); /* Blank out sub-profile to make sure we can't add it again. */ sub_edges->row_edges = NULL; sub_edges->column_edges = NULL; return 0; } static void vips_profile_class_init(VipsProfileClass *class) { GObjectClass *gobject_class = (GObjectClass *) class; VipsObjectClass *object_class = (VipsObjectClass *) class; VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "profile"; object_class->description = _("find image profiles"); object_class->build = vips_profile_build; sclass->start = vips_profile_start; sclass->scan = vips_profile_scan; sclass->stop = vips_profile_stop; VIPS_ARG_IMAGE(class, "columns", 100, _("Columns"), _("First non-zero pixel in column"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsProfile, columns)); VIPS_ARG_IMAGE(class, "rows", 101, _("Rows"), _("First non-zero pixel in row"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsProfile, rows)); } static void vips_profile_init(VipsProfile *profile) { } /** * vips_profile: (method) * @in: input image * @columns: (out): distances from top edge * @rows: (out): distances from left edge * @...: %NULL-terminated list of optional named arguments * * vips_profile() searches inward from the edge of @in and finds the * first non-zero pixel. Pixels in @columns have the distance from the top edge * to the first non-zero pixel in that column, @rows has the distance from the * left edge to the first non-zero pixel in that row. * * See also: vips_project(), vips_hist_find(). * * Returns: 0 on success, -1 on error */ int vips_profile(VipsImage *in, VipsImage **columns, VipsImage **rows, ...) { va_list ap; int result; va_start(ap, rows); result = vips_call_split("profile", ap, in, columns, rows); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/project.c000066400000000000000000000207011454007373500207010ustar00rootroot00000000000000/* horizontal and vertical projection * * 20/4/06 * - from im_histgr() * 25/3/10 * - gtkdoc * - small celanups * 11/9/13 * - redo as a class, from vips_hist_find() */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "statistic.h" struct _Project; typedef struct { /* Horizontal array: sums of all columns. */ void *column_sums; /* Vertical array: sums of all rows. */ void *row_sums; } Histogram; typedef struct _VipsProject { VipsStatistic parent_instance; /* Main image histogram. Subhists accumulate to this. */ Histogram *hist; /* Write sums here. */ VipsImage *columns; VipsImage *rows; } VipsProject; typedef VipsStatisticClass VipsProjectClass; G_DEFINE_TYPE(VipsProject, vips_project, VIPS_TYPE_STATISTIC); /* Save a bit of typing. */ #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define D VIPS_FORMAT_DOUBLE #define N VIPS_FORMAT_NOTSET static const VipsBandFormat vips_project_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UI, I, UI, I, UI, I, D, N, D, N }; static Histogram * histogram_new(VipsProject *project) { VipsStatistic *statistic = VIPS_STATISTIC(project); VipsImage *in = statistic->ready; VipsBandFormat outfmt = vips_project_format_table[in->BandFmt]; int psize = vips_format_sizeof(outfmt) * in->Bands; Histogram *hist; if (!(hist = VIPS_NEW(project, Histogram))) return NULL; hist->column_sums = VIPS_ARRAY(project, psize * in->Xsize, guchar); hist->row_sums = VIPS_ARRAY(project, psize * in->Ysize, guchar); if (!hist->column_sums || !hist->row_sums) return NULL; memset(hist->column_sums, 0, psize * in->Xsize); memset(hist->row_sums, 0, psize * in->Ysize); return hist; } static int vips_project_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsStatistic *statistic = VIPS_STATISTIC(object); VipsProject *project = (VipsProject *) object; int y; if (statistic->in && vips_check_noncomplex(class->nickname, statistic->in)) return -1; g_object_set(object, "columns", vips_image_new(), "rows", vips_image_new(), NULL); /* main hist made on first thread start. */ if (VIPS_OBJECT_CLASS(vips_project_parent_class)->build(object)) return -1; /* Make the output image. */ if (vips_image_pipelinev(project->columns, VIPS_DEMAND_STYLE_ANY, statistic->ready, NULL) || vips_image_pipelinev(project->rows, VIPS_DEMAND_STYLE_ANY, statistic->ready, NULL)) return -1; project->columns->Ysize = 1; project->columns->BandFmt = vips_project_format_table[statistic->ready->BandFmt]; project->columns->Type = VIPS_INTERPRETATION_HISTOGRAM; project->rows->Xsize = 1; project->rows->BandFmt = vips_project_format_table[statistic->ready->BandFmt]; project->rows->Type = VIPS_INTERPRETATION_HISTOGRAM; if (vips_image_write_line(project->columns, 0, (VipsPel *) project->hist->column_sums)) return -1; for (y = 0; y < project->rows->Ysize; y++) if (vips_image_write_line(project->rows, y, (VipsPel *) project->hist->row_sums + y * VIPS_IMAGE_SIZEOF_PEL(project->rows))) return -1; return 0; } /* Build a sub-hist, based on the main hist. */ static void * vips_project_start(VipsStatistic *statistic) { VipsProject *project = (VipsProject *) statistic; /* Make the main hist, if necessary. */ if (!project->hist) project->hist = histogram_new(project); return (void *) histogram_new(project); } /* Add a line of pixels. */ #define ADD_PIXELS(OUT, IN) \ { \ OUT *row_sums = ((OUT *) hist->row_sums) + y * nb; \ OUT *column_sums; \ IN *p; \ \ column_sums = ((OUT *) hist->column_sums) + x * nb; \ p = (IN *) in; \ for (i = 0; i < n; i++) { \ for (j = 0; j < nb; j++) { \ column_sums[j] += p[j]; \ row_sums[j] += p[j]; \ } \ \ p += nb; \ column_sums += nb; \ } \ } /* Add a region to a project. */ static int vips_project_scan(VipsStatistic *statistic, void *seq, int x, int y, void *in, int n) { int nb = statistic->ready->Bands; Histogram *hist = (Histogram *) seq; int i, j; switch (statistic->ready->BandFmt) { case VIPS_FORMAT_UCHAR: ADD_PIXELS(guint, guchar); break; case VIPS_FORMAT_CHAR: ADD_PIXELS(int, char); break; case VIPS_FORMAT_USHORT: ADD_PIXELS(guint, gushort); break; case VIPS_FORMAT_SHORT: ADD_PIXELS(int, short); break; case VIPS_FORMAT_UINT: ADD_PIXELS(guint, guint); break; case VIPS_FORMAT_INT: ADD_PIXELS(int, int); break; case VIPS_FORMAT_FLOAT: ADD_PIXELS(double, float); break; case VIPS_FORMAT_DOUBLE: ADD_PIXELS(double, double); break; default: g_assert_not_reached(); } return 0; } #define ADD_BUFFER(TYPE, Q, P, N) \ { \ TYPE *p = (TYPE *) (P); \ TYPE *q = (TYPE *) (Q); \ int n = (N); \ int i; \ \ for (i = 0; i < n; i++) \ q[i] += p[i]; \ } /* Join a sub-project onto the main project. */ static int vips_project_stop(VipsStatistic *statistic, void *seq) { VipsProject *project = (VipsProject *) statistic; Histogram *hist = project->hist; Histogram *sub_hist = (Histogram *) seq; VipsImage *in = statistic->ready; VipsBandFormat outfmt = vips_project_format_table[in->BandFmt]; int hsz = in->Xsize * in->Bands; int vsz = in->Ysize * in->Bands; /* Add on sub-data. */ switch (outfmt) { case VIPS_FORMAT_UINT: ADD_BUFFER(guint, hist->column_sums, sub_hist->column_sums, hsz); ADD_BUFFER(guint, hist->row_sums, sub_hist->row_sums, vsz); break; case VIPS_FORMAT_INT: ADD_BUFFER(int, hist->column_sums, sub_hist->column_sums, hsz); ADD_BUFFER(int, hist->row_sums, sub_hist->row_sums, vsz); break; case VIPS_FORMAT_DOUBLE: ADD_BUFFER(double, hist->column_sums, sub_hist->column_sums, hsz); ADD_BUFFER(double, hist->row_sums, sub_hist->row_sums, vsz); break; default: g_assert_not_reached(); } /* Blank out sub-project to make sure we can't add it again. */ sub_hist->column_sums = NULL; sub_hist->row_sums = NULL; return 0; } static void vips_project_class_init(VipsProjectClass *class) { GObjectClass *gobject_class = (GObjectClass *) class; VipsObjectClass *object_class = (VipsObjectClass *) class; VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "project"; object_class->description = _("find image projections"); object_class->build = vips_project_build; sclass->start = vips_project_start; sclass->scan = vips_project_scan; sclass->stop = vips_project_stop; VIPS_ARG_IMAGE(class, "columns", 100, _("Columns"), _("Sums of columns"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsProject, columns)); VIPS_ARG_IMAGE(class, "rows", 101, _("Rows"), _("Sums of rows"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsProject, rows)); } static void vips_project_init(VipsProject *project) { } /** * vips_project: (method) * @in: input image * @columns: (out): sums of columns * @rows: (out): sums of rows * @...: %NULL-terminated list of optional named arguments * * Find the horizontal and vertical projections of an image, ie. the sum * of every row of pixels, and the sum of every column of pixels. The output * format is uint, int or double, depending on the input format. * * Non-complex images only. * * See also: vips_hist_find(), vips_profile(). * * Returns: 0 on success, -1 on error */ int vips_project(VipsImage *in, VipsImage **columns, VipsImage **rows, ...) { va_list ap; int result; va_start(ap, rows); result = vips_call_split("project", ap, in, columns, rows); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/relational.c000066400000000000000000000577061454007373500214040ustar00rootroot00000000000000/* relational.c --- various relational operations * * Modified: * 26/7/93 JC * - >,<,>=,<= tests now as (double) to prevent compiler warnings. Should * split into int/float cases really for speed. * 25/1/95 JC * - partialized * - updated * 7/2/95 JC * - oops! bug with doubles fixed * 3/7/98 JC * - vector versions added ... im_equal_vec(), im_lesseq_vec() etc * - small tidies * - should be a bit faster, lots of *q++ changed to q[x] * 10/3/03 JC * - reworked to remove nested #defines: a bit slower, but much smaller * - all except _vec forms now work on complex * 31/7/03 JC * - oops, relational_format was broken for some combinations * 23/9/09 * - gtkdoc * - use new im__arith_binary*() functions * - more meta-programming * 23/6/10 * - oops, moreconst and moreeqconst were the same * 4/11/11 * - redone as a class * 1/2/12 * - complex ==, != were broken * 16/7/12 * - im1 > im2, im1 >= im2 were broken * 17/9/14 * - im1 > im2, im1 >= im2 were still broken, but in a more subtle way */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "binary.h" #include "unaryconst.h" typedef struct _VipsRelational { VipsBinary parent_instance; VipsOperationRelational relational; } VipsRelational; typedef VipsBinaryClass VipsRelationalClass; G_DEFINE_TYPE(VipsRelational, vips_relational, VIPS_TYPE_BINARY); #define RLOOP(TYPE, ROP) \ { \ TYPE *restrict left = (TYPE *) in0; \ TYPE *restrict right = (TYPE *) in1; \ VipsPel *restrict q = (VipsPel *) out; \ \ for (x = 0; x < sz; x++) \ q[x] = (left[x] ROP right[x]) ? 255 : 0; \ } #define CLOOP(TYPE, COP) \ { \ TYPE *restrict left = (TYPE *) in0; \ TYPE *restrict right = (TYPE *) in1; \ VipsPel *restrict q = (VipsPel *) out; \ \ for (x = 0; x < sz; x++) { \ q[x] = COP(left[0], left[1], right[0], right[1]) ? 255 : 0; \ \ left += 2; \ right += 2; \ } \ } #define SWITCH(R, C, ROP, COP) \ switch (vips_image_get_format(im)) { \ case VIPS_FORMAT_UCHAR: \ R(unsigned char, ROP); \ break; \ case VIPS_FORMAT_CHAR: \ R(signed char, ROP); \ break; \ case VIPS_FORMAT_USHORT: \ R(unsigned short, ROP); \ break; \ case VIPS_FORMAT_SHORT: \ R(signed short, ROP); \ break; \ case VIPS_FORMAT_UINT: \ R(unsigned int, ROP); \ break; \ case VIPS_FORMAT_INT: \ R(signed int, ROP); \ break; \ case VIPS_FORMAT_FLOAT: \ R(float, ROP); \ break; \ case VIPS_FORMAT_DOUBLE: \ R(double, ROP); \ break; \ case VIPS_FORMAT_COMPLEX: \ C(float, COP); \ break; \ case VIPS_FORMAT_DPCOMPLEX: \ C(double, COP); \ break; \ \ default: \ g_assert_not_reached(); \ } #define CEQUAL(x1, y1, x2, y2) (x1 == x2 && y1 == y2) #define CNOTEQ(x1, y1, x2, y2) (x1 != x2 || y1 != y2) #define CLESS(x1, y1, x2, y2) (x1 * x1 + y1 * y1 < x2 * x2 + y2 * y2) #define CLESSEQ(x1, y1, x2, y2) (x1 * x1 + y1 * y1 <= x2 * x2 + y2 * y2) #define CMORE(x1, y1, x2, y2) (x1 * x1 + y1 * y1 > x2 * x2 + y2 * y2) #define CMOREEQ(x1, y1, x2, y2) (x1 * x1 + y1 * y1 >= x2 * x2 + y2 * y2) static void vips_relational_buffer(VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width) { VipsRelational *relational = (VipsRelational *) arithmetic; VipsImage *im = arithmetic->ready[0]; const int sz = width * vips_image_get_bands(im); VipsOperationRelational op; VipsPel *in0; VipsPel *in1; int x; in0 = in[0]; in1 = in[1]; op = relational->relational; if (op == VIPS_OPERATION_RELATIONAL_MORE) { op = VIPS_OPERATION_RELATIONAL_LESS; VIPS_SWAP(VipsPel *, in0, in1); } if (op == VIPS_OPERATION_RELATIONAL_MOREEQ) { op = VIPS_OPERATION_RELATIONAL_LESSEQ; VIPS_SWAP(VipsPel *, in0, in1); } switch (op) { case VIPS_OPERATION_RELATIONAL_EQUAL: SWITCH(RLOOP, CLOOP, ==, CEQUAL); break; case VIPS_OPERATION_RELATIONAL_NOTEQ: SWITCH(RLOOP, CLOOP, !=, CNOTEQ); break; case VIPS_OPERATION_RELATIONAL_LESS: SWITCH(RLOOP, CLOOP, <, CLESS); break; case VIPS_OPERATION_RELATIONAL_LESSEQ: SWITCH(RLOOP, CLOOP, <=, CLESSEQ); break; default: g_assert_not_reached(); } } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX static const VipsBandFormat vips_relational_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, UC, UC, UC, UC, UC, UC, UC, UC, UC }; static void vips_relational_class_init(VipsRelationalClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "relational"; object_class->description = _("relational operation on two images"); aclass->process_line = vips_relational_buffer; vips_arithmetic_set_format_table(aclass, vips_relational_format_table); VIPS_ARG_ENUM(class, "relational", 200, _("Operation"), _("Relational to perform"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsRelational, relational), VIPS_TYPE_OPERATION_RELATIONAL, VIPS_OPERATION_RELATIONAL_EQUAL); } static void vips_relational_init(VipsRelational *relational) { } static int vips_relationalv(VipsImage *left, VipsImage *right, VipsImage **out, VipsOperationRelational relational, va_list ap) { return vips_call_split("relational", ap, left, right, out, relational); } /** * vips_relational: * @left: left-hand input #VipsImage * @right: right-hand input #VipsImage * @out: (out): output #VipsImage * @relational: relational operation to perform * @...: %NULL-terminated list of optional named arguments * * Perform various relational operations on pairs of images. * * The output type is always uchar, with 0 for FALSE and 255 for TRUE. * * Less-than and greater-than for complex images compare the modulus. * * If the images differ in size, the smaller image is enlarged to match the * larger by adding zero pixels along the bottom and right. * * If the number of bands differs, one of the images * must have one band. In this case, an n-band image is formed from the * one-band image by joining n copies of the one-band image together, and then * the two n-band images are operated upon. * * The two input images are cast up to the smallest common format (see table * Smallest common format in * arithmetic). * * To decide if pixels match exactly, that is have the same value in every * band, use vips_bandbool() after this operation to AND or OR image bands * together. * * See also: vips_boolean(), vips_bandbool(), vips_relational_const(). * * Returns: 0 on success, -1 on error */ int vips_relational(VipsImage *left, VipsImage *right, VipsImage **out, VipsOperationRelational relational, ...) { va_list ap; int result; va_start(ap, relational); result = vips_relationalv(left, right, out, relational, ap); va_end(ap); return result; } /** * vips_equal: * @left: left-hand input #VipsImage * @right: right-hand input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_RELATIONAL_EQUAL on a pair of images. See * vips_relational(). * * Returns: 0 on success, -1 on error */ int vips_equal(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_relationalv(left, right, out, VIPS_OPERATION_RELATIONAL_EQUAL, ap); va_end(ap); return result; } /** * vips_notequal: * @left: left-hand input #VipsImage * @right: right-hand input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_RELATIONAL_NOTEQ on a pair of images. See * vips_relational(). * * Returns: 0 on success, -1 on error */ int vips_notequal(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_relationalv(left, right, out, VIPS_OPERATION_RELATIONAL_NOTEQ, ap); va_end(ap); return result; } /** * vips_more: * @left: left-hand input #VipsImage * @right: right-hand input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_RELATIONAL_MORE on a pair of images. See * vips_relational(). * * Returns: 0 on success, -1 on error */ int vips_more(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_relationalv(left, right, out, VIPS_OPERATION_RELATIONAL_MORE, ap); va_end(ap); return result; } /** * vips_moreeq: * @left: left-hand input #VipsImage * @right: right-hand input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_RELATIONAL_MOREEQ on a pair of images. See * vips_relational(). * * Returns: 0 on success, -1 on error */ int vips_moreeq(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_relationalv(left, right, out, VIPS_OPERATION_RELATIONAL_MOREEQ, ap); va_end(ap); return result; } /** * vips_less: * @left: left-hand input #VipsImage * @right: right-hand input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_RELATIONAL_LESS on a pair of images. See * vips_relational(). * * Returns: 0 on success, -1 on error */ int vips_less(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_relationalv(left, right, out, VIPS_OPERATION_RELATIONAL_LESS, ap); va_end(ap); return result; } /** * vips_lesseq: * @left: left-hand input #VipsImage * @right: right-hand input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_RELATIONAL_LESSEQ on a pair of images. See * vips_relational(). * * Returns: 0 on success, -1 on error */ int vips_lesseq(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_relationalv(left, right, out, VIPS_OPERATION_RELATIONAL_LESSEQ, ap); va_end(ap); return result; } typedef struct _VipsRelationalConst { VipsUnaryConst parent_instance; VipsOperationRelational relational; } VipsRelationalConst; typedef VipsUnaryConstClass VipsRelationalConstClass; G_DEFINE_TYPE(VipsRelationalConst, vips_relational_const, VIPS_TYPE_UNARY_CONST); #define RLOOPCI(TYPE, OP) \ { \ TYPE *restrict p = (TYPE *) in[0]; \ int *restrict c = uconst->c_int; \ \ for (i = 0, x = 0; x < width; x++) \ for (b = 0; b < bands; b++, i++) \ out[i] = (p[i] OP c[b]) ? 255 : 0; \ } #define RLOOPCF(TYPE, OP) \ { \ TYPE *restrict p = (TYPE *) in[0]; \ double *restrict c = uconst->c_double; \ \ for (i = 0, x = 0; x < width; x++) \ for (b = 0; b < bands; b++, i++) \ out[i] = (p[i] OP c[b]) ? 255 : 0; \ } #define CLOOPC(TYPE, OP) \ { \ TYPE *restrict p = (TYPE *) in[0]; \ \ for (i = 0, x = 0; x < width; x++) { \ double *restrict c = uconst->c_double; \ \ for (b = 0; b < bands; b++, i++) { \ out[i] = OP(p[0], p[1], c[0], c[1]) ? 255 : 0; \ \ p += 2; \ c += 2; \ } \ } \ } static void vips_relational_const_buffer(VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width) { VipsUnaryConst *uconst = (VipsUnaryConst *) arithmetic; VipsRelationalConst *rconst = (VipsRelationalConst *) arithmetic; VipsImage *im = arithmetic->ready[0]; int bands = im->Bands; gboolean is_int = uconst->is_int && vips_band_format_isint(im->BandFmt); int i, x, b; switch (rconst->relational) { case VIPS_OPERATION_RELATIONAL_EQUAL: if (is_int) { SWITCH(RLOOPCI, CLOOPC, ==, CEQUAL); } else { SWITCH(RLOOPCF, CLOOPC, ==, CEQUAL); } break; case VIPS_OPERATION_RELATIONAL_NOTEQ: if (is_int) { SWITCH(RLOOPCI, CLOOPC, !=, CNOTEQ); } else { SWITCH(RLOOPCF, CLOOPC, !=, CNOTEQ); } break; case VIPS_OPERATION_RELATIONAL_LESS: if (is_int) { SWITCH(RLOOPCI, CLOOPC, <, CLESS); } else { SWITCH(RLOOPCF, CLOOPC, <, CLESS); } break; case VIPS_OPERATION_RELATIONAL_LESSEQ: if (is_int) { SWITCH(RLOOPCI, CLOOPC, <=, CLESSEQ); } else { SWITCH(RLOOPCF, CLOOPC, <=, CLESSEQ); } break; case VIPS_OPERATION_RELATIONAL_MORE: if (is_int) { SWITCH(RLOOPCI, CLOOPC, >, CMORE); } else { SWITCH(RLOOPCF, CLOOPC, >, CMORE); } break; case VIPS_OPERATION_RELATIONAL_MOREEQ: if (is_int) { SWITCH(RLOOPCI, CLOOPC, >=, CMOREEQ); } else { SWITCH(RLOOPCF, CLOOPC, >=, CMOREEQ); } break; default: g_assert_not_reached(); } } static void vips_relational_const_class_init(VipsRelationalConstClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "relational_const"; object_class->description = _("relational operations against a constant"); aclass->process_line = vips_relational_const_buffer; vips_arithmetic_set_format_table(aclass, vips_relational_format_table); VIPS_ARG_ENUM(class, "relational", 200, _("Operation"), _("Relational to perform"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsRelationalConst, relational), VIPS_TYPE_OPERATION_RELATIONAL, VIPS_OPERATION_RELATIONAL_EQUAL); } static void vips_relational_const_init(VipsRelationalConst *relational_const) { } static int vips_relational_constv(VipsImage *in, VipsImage **out, VipsOperationRelational relational, const double *c, int n, va_list ap) { VipsArea *area_c; double *array; int result; int i; area_c = vips_area_new_array(G_TYPE_DOUBLE, sizeof(double), n); array = (double *) area_c->data; for (i = 0; i < n; i++) array[i] = c[i]; result = vips_call_split("relational_const", ap, in, out, relational, area_c); vips_area_unref(area_c); return result; } /** * vips_relational_const: (method) * @in: input image * @out: (out): output image * @relational: relational operation to perform * @c: (array length=n): array of constants * @n: number of constants in @c * @...: %NULL-terminated list of optional named arguments * * Perform various relational operations on an image and an array of * constants. * * The output type is always uchar, with 0 for FALSE and 255 for TRUE. * * If the array of constants has just one element, that constant is used for * all image bands. If the array has more than one element and they have * the same number of elements as there are bands in the image, then * one array element is used for each band. If the arrays have more than one * element and the image only has a single band, the result is a many-band * image where each band corresponds to one array element. * * See also: vips_boolean(), vips_relational(). * * Returns: 0 on success, -1 on error */ int vips_relational_const(VipsImage *in, VipsImage **out, VipsOperationRelational relational, const double *c, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_relational_constv(in, out, relational, c, n, ap); va_end(ap); return result; } /** * vips_equal_const: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @c: (array length=n): array of constants * @n: number of constants in @c * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_RELATIONAL_EQUAL on an image and a constant. See * vips_relational_const(). * * Returns: 0 on success, -1 on error */ int vips_equal_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_relational_constv(in, out, VIPS_OPERATION_RELATIONAL_EQUAL, c, n, ap); va_end(ap); return result; } /** * vips_notequal_const: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @c: (array length=n): array of constants * @n: number of constants in @c * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_RELATIONAL_NOTEQ on an image and a constant. See * vips_relational_const(). * * Returns: 0 on success, -1 on error */ int vips_notequal_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_relational_constv(in, out, VIPS_OPERATION_RELATIONAL_NOTEQ, c, n, ap); va_end(ap); return result; } /** * vips_less_const: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @c: (array length=n): array of constants * @n: number of constants in @c * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_RELATIONAL_LESS on an image and a constant. See * vips_relational_const(). * * Returns: 0 on success, -1 on error */ int vips_less_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_relational_constv(in, out, VIPS_OPERATION_RELATIONAL_LESS, c, n, ap); va_end(ap); return result; } /** * vips_lesseq_const: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @c: (array length=n): array of constants * @n: number of constants in @c * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_RELATIONAL_LESSEQ on an image and a constant. See * vips_relational_const(). * * Returns: 0 on success, -1 on error */ int vips_lesseq_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_relational_constv(in, out, VIPS_OPERATION_RELATIONAL_LESSEQ, c, n, ap); va_end(ap); return result; } /** * vips_more_const: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @c: (array length=n): array of constants * @n: number of constants in @c * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_RELATIONAL_MORE on an image and a constant. See * vips_relational_const(). * * Returns: 0 on success, -1 on error */ int vips_more_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_relational_constv(in, out, VIPS_OPERATION_RELATIONAL_MORE, c, n, ap); va_end(ap); return result; } /** * vips_moreeq_const: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @c: (array length=n): array of constants * @n: number of constants in @c * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_RELATIONAL_MOREEQ on an image and a constant. See * vips_relational_const(). * * Returns: 0 on success, -1 on error */ int vips_moreeq_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_relational_constv(in, out, VIPS_OPERATION_RELATIONAL_MOREEQ, c, n, ap); va_end(ap); return result; } /** * vips_relational_const1: (method) * @in: input image * @out: (out): output image * @relational: relational operation to perform * @c: constant * @...: %NULL-terminated list of optional named arguments * * Perform various relational operations on an image and a constant. See * vips_relational_const(). * * See also: vips_boolean(), vips_relational(). * * Returns: 0 on success, -1 on error */ int vips_relational_const1(VipsImage *in, VipsImage **out, VipsOperationRelational relational, double c, ...) { va_list ap; int result; va_start(ap, c); result = vips_relational_constv(in, out, relational, &c, 1, ap); va_end(ap); return result; } /** * vips_equal_const1: (method) * @in: input image * @out: (out): output image * @c: constant * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_RELATIONAL_EQUAL on an image and a constant. See * vips_relational_const(). * * Returns: 0 on success, -1 on error */ int vips_equal_const1(VipsImage *in, VipsImage **out, double c, ...) { va_list ap; int result; va_start(ap, c); result = vips_relational_constv(in, out, VIPS_OPERATION_RELATIONAL_EQUAL, &c, 1, ap); va_end(ap); return result; } /** * vips_notequal_const1: (method) * @in: input image * @out: (out): output image * @c: constant * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_RELATIONAL_NOTEQ on an image and a constant. See * vips_relational_const(). * * Returns: 0 on success, -1 on error */ int vips_notequal_const1(VipsImage *in, VipsImage **out, double c, ...) { va_list ap; int result; va_start(ap, c); result = vips_relational_constv(in, out, VIPS_OPERATION_RELATIONAL_NOTEQ, &c, 1, ap); va_end(ap); return result; } /** * vips_less_const1: (method) * @in: input image * @out: (out): output image * @c: constant * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_RELATIONAL_LESS on an image and a constant. See * vips_relational_const(). * * Returns: 0 on success, -1 on error */ int vips_less_const1(VipsImage *in, VipsImage **out, double c, ...) { va_list ap; int result; va_start(ap, c); result = vips_relational_constv(in, out, VIPS_OPERATION_RELATIONAL_LESS, &c, 1, ap); va_end(ap); return result; } /** * vips_lesseq_const1: (method) * @in: input image * @out: (out): output image * @c: constant * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_RELATIONAL_LESSEQ on an image and a constant. See * vips_relational_const(). * * Returns: 0 on success, -1 on error */ int vips_lesseq_const1(VipsImage *in, VipsImage **out, double c, ...) { va_list ap; int result; va_start(ap, c); result = vips_relational_constv(in, out, VIPS_OPERATION_RELATIONAL_LESSEQ, &c, 1, ap); va_end(ap); return result; } /** * vips_more_const1: (method) * @in: input image * @out: (out): output image * @c: constant * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_RELATIONAL_MORE on an image and a constant. See * vips_relational_const(). * * Returns: 0 on success, -1 on error */ int vips_more_const1(VipsImage *in, VipsImage **out, double c, ...) { va_list ap; int result; va_start(ap, c); result = vips_relational_constv(in, out, VIPS_OPERATION_RELATIONAL_MORE, &c, 1, ap); va_end(ap); return result; } /** * vips_moreeq_const1: (method) * @in: input image * @out: (out): output image * @c: constant * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_RELATIONAL_MOREEQ on an image and a constant. See * vips_relational_const(). * * Returns: 0 on success, -1 on error */ int vips_moreeq_const1(VipsImage *in, VipsImage **out, double c, ...) { va_list ap; int result; va_start(ap, c); result = vips_relational_constv(in, out, VIPS_OPERATION_RELATIONAL_MOREEQ, &c, 1, ap); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/remainder.c000066400000000000000000000271241454007373500212070ustar00rootroot00000000000000/* remainder.c * * 2/8/99 JC * - im_divide adapted to make im_remainder * 8/5/02 JC * - im_remainderconst added * - im_remainderconst_vec added * 27/9/04 * - updated for 1 band $op n band image -> n band image case * 26/2/07 * - oop, broken for _vec case :-( * 14/5/08 * - better /0 test * 27/8/08 * - revise upcasting system * - add gtkdoc comments * 23/6/10 * - constant ops clip to target range * 12/11/11 * - redone as a class */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "binary.h" #include "unaryconst.h" typedef VipsBinary VipsRemainder; typedef VipsBinaryClass VipsRemainderClass; G_DEFINE_TYPE(VipsRemainder, vips_remainder, VIPS_TYPE_BINARY); static int vips_remainder_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsBinary *binary = (VipsBinary *) object; if (binary->left && vips_check_noncomplex(class->nickname, binary->left)) return -1; if (binary->right && vips_check_noncomplex(class->nickname, binary->right)) return -1; if (VIPS_OBJECT_CLASS(vips_remainder_parent_class)->build(object)) return -1; return 0; } /* Integer remainder-after-division. */ #define IREMAINDER(TYPE) \ { \ TYPE *restrict p1 = (TYPE *) in[0]; \ TYPE *restrict p2 = (TYPE *) in[1]; \ TYPE *restrict q = (TYPE *) out; \ \ for (x = 0; x < sz; x++) \ q[x] = p2[x] ? p1[x] % p2[x] : -1; \ } /* Float remainder-after-division. */ #define FREMAINDER(TYPE) \ { \ TYPE *restrict p1 = (TYPE *) in[0]; \ TYPE *restrict p2 = (TYPE *) in[1]; \ TYPE *restrict q = (TYPE *) out; \ \ for (x = 0; x < sz; x++) { \ double a = p1[x]; \ double b = p2[x]; \ \ q[x] = b ? a - b * VIPS_FLOOR(a / b) : -1; \ } \ } static void vips_remainder_buffer(VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width) { VipsImage *im = arithmetic->ready[0]; const int sz = width * vips_image_get_bands(im); int x; switch (vips_image_get_format(im)) { case VIPS_FORMAT_CHAR: IREMAINDER(signed char); break; case VIPS_FORMAT_UCHAR: IREMAINDER(unsigned char); break; case VIPS_FORMAT_SHORT: IREMAINDER(signed short); break; case VIPS_FORMAT_USHORT: IREMAINDER(unsigned short); break; case VIPS_FORMAT_INT: IREMAINDER(signed int); break; case VIPS_FORMAT_UINT: IREMAINDER(unsigned int); break; case VIPS_FORMAT_FLOAT: FREMAINDER(float); break; case VIPS_FORMAT_DOUBLE: FREMAINDER(double); break; default: g_assert_not_reached(); } } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX /* Type promotion for remainder. Keep in sync with remainder_buffer() above. */ static const VipsBandFormat vips_remainder_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, C, US, S, UI, I, F, X, D, DX }; static void vips_remainder_class_init(VipsRemainderClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "remainder"; object_class->description = _("remainder after integer division of two images"); object_class->build = vips_remainder_build; aclass->process_line = vips_remainder_buffer; vips_arithmetic_set_format_table(aclass, vips_remainder_format_table); } static void vips_remainder_init(VipsRemainder *remainder) { } /** * vips_remainder: * @left: left-hand input #VipsImage * @right: right-hand input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * This operation calculates @left % @right (remainder after integer division) * and writes the result to @out. The images may have any * non-complex format. For float formats, vips_remainder() calculates @in1 - * @in2 * floor (@in1 / @in2). * * If the images differ in size, the smaller image is enlarged to match the * larger by adding zero pixels along the bottom and right. * * If the number of bands differs, one of the images * must have one band. In this case, an n-band image is formed from the * one-band image by joining n copies of the one-band image together, and then * the two n-band images are operated upon. * * The two input images are cast up to the smallest common format (see table * Smallest common format in * arithmetic), and that format is the * result type. * * See also: vips_remainder_const(), vips_divide(), vips_round(). * * Returns: 0 on success, -1 on error */ int vips_remainder(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("remainder", ap, left, right, out); va_end(ap); return result; } typedef VipsUnaryConst VipsRemainderConst; typedef VipsUnaryConstClass VipsRemainderConstClass; G_DEFINE_TYPE(VipsRemainderConst, vips_remainder_const, VIPS_TYPE_UNARY_CONST); static int vips_remainder_const_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsUnary *unary = (VipsUnary *) object; if (unary->in && vips_check_noncomplex(class->nickname, unary->in)) return -1; if (VIPS_OBJECT_CLASS(vips_remainder_const_parent_class)->build(object)) return -1; return 0; } /* Integer remainder-after-divide, per-band constant. */ #define IREMAINDERCONST(TYPE) \ { \ TYPE *restrict p = (TYPE *) in[0]; \ TYPE *restrict q = (TYPE *) out; \ int *restrict c = uconst->c_int; \ \ for (i = 0, x = 0; x < width; x++) \ for (b = 0; b < bands; b++, i++) \ q[i] = p[i] % c[b]; \ } /* Float remainder-after-divide, per-band constant. */ #define FREMAINDERCONST(TYPE) \ { \ TYPE *restrict p = (TYPE *) in[0]; \ TYPE *restrict q = (TYPE *) out; \ int *restrict c = uconst->c_int; \ \ for (i = 0, x = 0; x < width; x++) \ for (b = 0; b < bands; b++, i++) { \ double left = p[i]; \ double right = c[b]; \ \ q[i] = right ? left - right * floor(left / right) : -1; \ } \ } static void vips_remainder_const_buffer(VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width) { VipsUnaryConst *uconst = (VipsUnaryConst *) arithmetic; VipsImage *im = arithmetic->ready[0]; int bands = im->Bands; int i, x, b; switch (vips_image_get_format(im)) { case VIPS_FORMAT_CHAR: IREMAINDERCONST(signed char); break; case VIPS_FORMAT_UCHAR: IREMAINDERCONST(unsigned char); break; case VIPS_FORMAT_SHORT: IREMAINDERCONST(signed short); break; case VIPS_FORMAT_USHORT: IREMAINDERCONST(unsigned short); break; case VIPS_FORMAT_INT: IREMAINDERCONST(signed int); break; case VIPS_FORMAT_UINT: IREMAINDERCONST(unsigned int); break; case VIPS_FORMAT_FLOAT: FREMAINDERCONST(float); break; case VIPS_FORMAT_DOUBLE: FREMAINDERCONST(double); break; default: g_assert_not_reached(); } } static void vips_remainder_const_class_init(VipsRemainderConstClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "remainder_const"; object_class->description = _("remainder after integer division of an image and a constant"); object_class->build = vips_remainder_const_build; aclass->process_line = vips_remainder_const_buffer; vips_arithmetic_set_format_table(aclass, vips_remainder_format_table); } static void vips_remainder_const_init(VipsRemainderConst *remainder_const) { } static int vips_remainder_constv(VipsImage *in, VipsImage **out, const double *c, int n, va_list ap) { VipsArea *area_c; double *array; int result; int i; area_c = vips_area_new_array(G_TYPE_DOUBLE, sizeof(double), n); array = (double *) area_c->data; for (i = 0; i < n; i++) array[i] = c[i]; result = vips_call_split("remainder_const", ap, in, out, area_c); vips_area_unref(area_c); return result; } /** * vips_remainder_const: (method) * @in: input image * @out: (out): output image * @c: (array length=n): array of constants * @n: number of constants in @c * @...: %NULL-terminated list of optional named arguments * * This operation calculates @in % @c (remainder after division by an * array of constants) * and writes the result to @out. * The image may have any * non-complex format. For float formats, vips_remainder_const() calculates * @in - @c * floor (@in / @c). * * If the array of constants has just one element, that constant is used for * all image bands. If the array has more than one element and they have * the same number of elements as there are bands in the image, then * one array element is used for each band. If the arrays have more than one * element and the image only has a single band, the result is a many-band * image where each band corresponds to one array element. * * See also: vips_remainder(), vips_divide(), vips_round(). * * Returns: 0 on success, -1 on error */ int vips_remainder_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_remainder_constv(in, out, c, n, ap); va_end(ap); return result; } /** * vips_remainder_const1: (method) * @in: input image * @out: (out): output image * @c: constant * @...: %NULL-terminated list of optional named arguments * * This operation calculates @in % @c (remainder after division by a * constant) * and writes the result to @out. * The image may have any * non-complex format. For float formats, vips_remainder_const() calculates * @in - @c * floor (@in / @c). * * If the array of constants has just one element, that constant is used for * all image bands. If the array has more than one element and they have * the same number of elements as there are bands in the image, then * one array element is used for each band. If the arrays have more than one * element and the image only has a single band, the result is a many-band * image where each band corresponds to one array element. * * See also: vips_remainder(), vips_divide(), vips_round(). * * Returns: 0 on success, -1 on error */ int vips_remainder_const1(VipsImage *in, VipsImage **out, double c, ...) { va_list ap; int result; va_start(ap, c); result = vips_remainder_constv(in, out, &c, 1, ap); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/round.c000066400000000000000000000146371454007373500203750ustar00rootroot00000000000000/* round.c --- various rounding operations * * 20/6/02 JC * - adapted from im_abs() * 29/8/09 * - gtkdoc * - tiny cleanups * 19/9/09 * - im_ceil.c adapted to make round.c * 10/11/11 * - redone as a class */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "unary.h" typedef struct _VipsRound { VipsUnary parent_instance; VipsOperationRound round; } VipsRound; typedef VipsUnaryClass VipsRoundClass; G_DEFINE_TYPE(VipsRound, vips_round, VIPS_TYPE_UNARY); static int vips_round_build(VipsObject *object) { VipsUnary *unary = (VipsUnary *) object; /* Is this one of the int types? Degenerate to vips_copy() if it * is. */ if (unary->in && vips_band_format_isint(unary->in->BandFmt)) return vips_unary_copy(unary); if (VIPS_OBJECT_CLASS(vips_round_parent_class)->build(object)) return -1; return 0; } #define LOOP(TYPE, OP) \ { \ TYPE *restrict p = (TYPE *) in[0]; \ TYPE *restrict q = (TYPE *) out; \ \ for (x = 0; x < sz; x++) \ q[x] = OP(p[x]); \ } #define SWITCH(OP) \ { \ switch (vips_image_get_format(im)) { \ case VIPS_FORMAT_COMPLEX: \ case VIPS_FORMAT_FLOAT: \ LOOP(float, OP); \ break; \ \ case VIPS_FORMAT_DPCOMPLEX: \ case VIPS_FORMAT_DOUBLE: \ LOOP(double, OP); \ break; \ \ default: \ g_assert_not_reached(); \ } \ } static void vips_round_buffer(VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width) { VipsRound *round = (VipsRound *) arithmetic; VipsImage *im = arithmetic->ready[0]; /* Complex just doubles the size. */ const int sz = width * im->Bands * (vips_band_format_iscomplex(im->BandFmt) ? 2 : 1); int x; switch (round->round) { case VIPS_OPERATION_ROUND_RINT: SWITCH(VIPS_RINT); break; case VIPS_OPERATION_ROUND_CEIL: SWITCH(VIPS_CEIL); break; case VIPS_OPERATION_ROUND_FLOOR: SWITCH(VIPS_FLOOR); break; default: g_assert_not_reached(); } } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX static const VipsBandFormat vips_round_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, C, US, S, UI, I, F, X, D, DX }; static void vips_round_class_init(VipsRoundClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "round"; object_class->description = _("perform a round function on an image"); object_class->build = vips_round_build; aclass->process_line = vips_round_buffer; vips_arithmetic_set_format_table(aclass, vips_round_format_table); VIPS_ARG_ENUM(class, "round", 200, _("Round operation"), _("Rounding operation to perform"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsRound, round), VIPS_TYPE_OPERATION_ROUND, VIPS_OPERATION_ROUND_RINT); } static void vips_round_init(VipsRound *round) { } static int vips_roundv(VipsImage *in, VipsImage **out, VipsOperationRound round, va_list ap) { return vips_call_split("round", ap, in, out, round); } /** * vips_round: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @round: #VipsOperationRound rounding operation to perform * @...: %NULL-terminated list of optional named arguments * * Round to an integral value. * * Copy for integer types, round float and * complex types. * * The format of @out is always the same as @in, so you may wish to cast to an * integer format afterwards. * * See also: vips_cast() * * Returns: 0 on success, -1 on error */ int vips_round(VipsImage *in, VipsImage **out, VipsOperationRound round, ...) { va_list ap; int result; va_start(ap, round); result = vips_roundv(in, out, round, ap); va_end(ap); return result; } /** * vips_floor: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Round to an integral value with #VIPS_OPERATION_ROUND_FLOOR. See * vips_round(). * * Returns: 0 on success, -1 on error */ int vips_floor(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_roundv(in, out, VIPS_OPERATION_ROUND_FLOOR, ap); va_end(ap); return result; } /** * vips_ceil: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Round to an integral value with #VIPS_OPERATION_ROUND_CEIL. See * vips_round(). * * Returns: 0 on success, -1 on error */ int vips_ceil(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_roundv(in, out, VIPS_OPERATION_ROUND_CEIL, ap); va_end(ap); return result; } /** * vips_rint: (method) * @in: input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Round to an integral value with #VIPS_OPERATION_ROUND_RINT. See * vips_round(). * * Returns: 0 on success, -1 on error */ int vips_rint(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_roundv(in, out, VIPS_OPERATION_ROUND_RINT, ap); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/sign.c000066400000000000000000000105021454007373500201710ustar00rootroot00000000000000/* im_sign.c * * 9/7/02 JC * - from im_cmulnorm * 9/9/09 * - gtkdoc, tidies * 6/11/11 * - redone as a class */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "unary.h" typedef VipsUnary VipsSign; typedef VipsUnaryClass VipsSignClass; G_DEFINE_TYPE(VipsSign, vips_sign, VIPS_TYPE_UNARY); #define CSIGN(TYPE) \ { \ TYPE *restrict p = (TYPE *) in[0]; \ TYPE *restrict q = (TYPE *) out; \ int x; \ \ for (x = 0; x < sz; x++) { \ TYPE re = p[0]; \ TYPE im = p[1]; \ double fac = sqrt(re * re + im * im); \ \ p += 2; \ \ if (fac == 0.0) { \ q[0] = 0.0; \ q[1] = 0.0; \ } \ else { \ q[0] = re / fac; \ q[1] = im / fac; \ } \ \ q += 2; \ } \ } #define SIGN(TYPE) \ { \ TYPE *restrict p = (TYPE *) in[0]; \ signed char *restrict q = (signed char *) out; \ int x; \ \ for (x = 0; x < sz; x++) { \ TYPE v = p[x]; \ \ if (v > 0) \ q[x] = 1; \ else if (v == 0) \ q[x] = 0; \ else \ q[x] = -1; \ } \ } static void vips_sign_buffer(VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width) { VipsUnary *unary = VIPS_UNARY(arithmetic); const int bands = vips_image_get_bands(unary->in); int sz = width * bands; switch (vips_image_get_format(unary->in)) { case VIPS_FORMAT_UCHAR: SIGN(unsigned char); break; case VIPS_FORMAT_CHAR: SIGN(signed char); break; case VIPS_FORMAT_USHORT: SIGN(unsigned short); break; case VIPS_FORMAT_SHORT: SIGN(signed short); break; case VIPS_FORMAT_UINT: SIGN(unsigned int); break; case VIPS_FORMAT_INT: SIGN(signed int); break; case VIPS_FORMAT_FLOAT: SIGN(float); break; case VIPS_FORMAT_DOUBLE: SIGN(double); break; case VIPS_FORMAT_COMPLEX: CSIGN(float); break; case VIPS_FORMAT_DPCOMPLEX: CSIGN(double); break; default: g_assert_not_reached(); } } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX static const VipsBandFormat vips_sign_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ C, C, C, C, C, C, C, X, C, DX }; static void vips_sign_class_init(VipsSignClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class); object_class->nickname = "sign"; object_class->description = _("unit vector of pixel"); aclass->process_line = vips_sign_buffer; vips_arithmetic_set_format_table(aclass, vips_sign_format_table); } static void vips_sign_init(VipsSign *sign) { } /** * vips_sign: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Finds the unit vector in the direction of the pixel value. For non-complex * images, it returns a signed char image with values -1, 0, and 1 for negative, * zero and positive pixels. For complex images, it returns a * complex normalised to length 1. * * See also: vips_abs(). * * Returns: 0 on success, -1 on error */ int vips_sign(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("sign", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/statistic.c000066400000000000000000000102721454007373500212440ustar00rootroot00000000000000/* base class for all stats operations * * properties: * - one image in, single value or matrix out * - output depends on whole of input, ie. we have a sink * * 24/8/11 * - from im_avg.c */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "statistic.h" G_DEFINE_ABSTRACT_TYPE(VipsStatistic, vips_statistic, VIPS_TYPE_OPERATION); static void * vips_statistic_scan_start(VipsImage *in, void *a, void *b) { VipsStatistic *statistic = VIPS_STATISTIC(a); VipsStatisticClass *class = VIPS_STATISTIC_GET_CLASS(statistic); return class->start(statistic); } static int vips_statistic_scan(VipsRegion *region, void *seq, void *a, void *b, gboolean *stop) { VipsStatistic *statistic = VIPS_STATISTIC(a); VipsStatisticClass *class = VIPS_STATISTIC_GET_CLASS(statistic); VipsRect *r = ®ion->valid; int lsk = VIPS_REGION_LSKIP(region); int y; VipsPel *p; VIPS_DEBUG_MSG("vips_statistic_scan: %d x %d @ %d x %d\n", r->width, r->height, r->left, r->top); p = VIPS_REGION_ADDR(region, r->left, r->top); for (y = 0; y < r->height; y++) { if (class->scan(statistic, seq, r->left, r->top + y, p, r->width)) return -1; p += lsk; } /* If we've requested stop, pass the message on. */ if (statistic->stop) *stop = TRUE; return 0; } static int vips_statistic_scan_stop(void *seq, void *a, void *b) { VipsStatistic *statistic = VIPS_STATISTIC(a); VipsStatisticClass *class = VIPS_STATISTIC_GET_CLASS(statistic); return class->stop(statistic, seq); } static int vips_statistic_build(VipsObject *object) { VipsStatistic *statistic = VIPS_STATISTIC(object); VipsStatisticClass *sclass = VIPS_STATISTIC_GET_CLASS(statistic); VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); #ifdef DEBUG printf("vips_statistic_build: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ if (VIPS_OBJECT_CLASS(vips_statistic_parent_class)->build(object)) return -1; statistic->ready = statistic->in; if (vips_image_decode(statistic->ready, &t[0])) return -1; statistic->ready = t[0]; /* If there's a format table, cast the input. */ if (sclass->format_table) { if (vips_cast(statistic->ready, &t[1], sclass->format_table[statistic->in->BandFmt], NULL)) return -1; statistic->ready = t[1]; } if (vips_sink(statistic->ready, vips_statistic_scan_start, vips_statistic_scan, vips_statistic_scan_stop, statistic, NULL)) return -1; return 0; } static void vips_statistic_class_init(VipsStatisticClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "statistic"; vobject_class->description = _("VIPS statistic operations"); vobject_class->build = vips_statistic_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 0, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsStatistic, in)); } static void vips_statistic_init(VipsStatistic *statistic) { } libvips-8.15.1/libvips/arithmetic/statistic.h000066400000000000000000000051521454007373500212520ustar00rootroot00000000000000/* base class for all stats operations */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_STATISTIC_H #define VIPS_STATISTIC_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #define VIPS_TYPE_STATISTIC (vips_statistic_get_type()) #define VIPS_STATISTIC(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_STATISTIC, VipsStatistic)) #define VIPS_STATISTIC_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_STATISTIC, VipsStatisticClass)) #define VIPS_IS_STATISTIC(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_STATISTIC)) #define VIPS_IS_STATISTIC_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_STATISTIC)) #define VIPS_STATISTIC_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_STATISTIC, VipsStatisticClass)) typedef struct _VipsStatistic VipsStatistic; typedef struct _VipsStatisticClass VipsStatisticClass; typedef void *(*VipsStatisticStartFn)(VipsStatistic *statistic); typedef int (*VipsStatisticScanFn)(VipsStatistic *statistic, void *seq, int x, int y, void *p, int n); typedef int (*VipsStatisticStopFn)(VipsStatistic *statistic, void *seq); struct _VipsStatistic { VipsOperation parent_instance; /* All have an input image. */ VipsImage *in; /* The input image cast and ready for processing. */ VipsImage *ready; /* Set this to stop computation early. */ gboolean stop; /* Client data for the subclass. */ void *a; void *b; }; struct _VipsStatisticClass { VipsOperationClass parent_class; /* Start/scan/stop, for vips_sink. */ VipsStatisticStartFn start; VipsStatisticScanFn scan; VipsStatisticStopFn stop; /* For each input format, what output format. If NULL, no casting. */ const VipsBandFormat *format_table; }; GType vips_statistic_get_type(void); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_STATISTIC_H*/ libvips-8.15.1/libvips/arithmetic/stats.c000066400000000000000000000253121454007373500203740ustar00rootroot00000000000000/* stats.c ... many image stats in a single pass * (C) Kirk Martinez 1993 23/4/93 J.Cupitt - adapted to partial images - special struct abandoned; now returns DOUBLEMASK. 1/7/93 JC - adapted for partial v2 - ANSIfied 27/7/93 JC - init of mask changed to use actual values, not IM_MAXDOUBLE and (-IM_MAXDOUBLE). These caused problems when assigned to floats. funny business with offset==42, yuk! 31/8/93 JC - forgot to init global max/min properly! sorry. 21/6/95 JC - still did not init max and min correctly --- now fixed for good * 13/1/05 * - use 64 bit arithmetic * 1/9/09 * - argh nope min/max was broken again for >1CPU in short pipelines on * some architectures * 7/9/09 * - rework based on new im__wrapscan() / im_max() ideas for a proper fix * - gtkdoc comment * 7/11/11 * - redone as a class * - track maxpos / minpos too */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "statistic.h" typedef struct _VipsStats { VipsStatistic parent_instance; VipsImage *out; gboolean set; /* FALSE means no value yet */ } VipsStats; typedef VipsStatisticClass VipsStatsClass; G_DEFINE_TYPE(VipsStats, vips_stats, VIPS_TYPE_STATISTIC); /* Names for our columns. */ enum { COL_MIN = 0, COL_MAX = 1, COL_SUM = 2, COL_SUM2 = 3, COL_AVG = 4, COL_SD = 5, COL_XMIN = 6, COL_YMIN = 7, COL_XMAX = 8, COL_YMAX = 9, COL_LAST = 10 }; static int vips_stats_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsStatistic *statistic = VIPS_STATISTIC(object); VipsStats *stats = (VipsStats *) object; gint64 vals, pels; double *row0, *row; int b, y, i; if (vips_object_argument_isset(object, "in")) { int bands = vips_image_get_bands(statistic->in); if (vips_check_noncomplex(class->nickname, statistic->in)) return -1; g_object_set(object, "out", vips_image_new_matrix(COL_LAST, bands + 1), NULL); } if (VIPS_OBJECT_CLASS(vips_stats_parent_class)->build(object)) return -1; pels = (gint64) vips_image_get_width(statistic->in) * vips_image_get_height(statistic->in); vals = pels * vips_image_get_bands(statistic->in); row0 = VIPS_MATRIX(stats->out, 0, 0); row = VIPS_MATRIX(stats->out, 0, 1); for (i = 0; i < COL_LAST; i++) row0[i] = row[i]; for (b = 1; b < vips_image_get_bands(statistic->in); b++) { row = VIPS_MATRIX(stats->out, 0, b + 1); if (row[COL_MIN] < row0[COL_MIN]) { row0[COL_MIN] = row[COL_MIN]; row0[COL_XMIN] = row[COL_XMIN]; row0[COL_YMIN] = row[COL_YMIN]; } if (row[COL_MAX] > row0[COL_MAX]) { row0[COL_MAX] = row[COL_MAX]; row0[COL_XMAX] = row[COL_XMAX]; row0[COL_YMAX] = row[COL_YMAX]; } row0[COL_SUM] += row[COL_SUM]; row0[COL_SUM2] += row[COL_SUM2]; } for (y = 1; y < vips_image_get_height(stats->out); y++) { double *row = VIPS_MATRIX(stats->out, 0, y); row[COL_AVG] = row[COL_SUM] / pels; row[COL_SD] = sqrt( VIPS_FABS(row[COL_SUM2] - (row[COL_SUM] * row[COL_SUM] / pels)) / (pels - 1)); } row0[COL_AVG] = row0[COL_SUM] / vals; row0[COL_SD] = sqrt( VIPS_FABS(row0[COL_SUM2] - (row0[COL_SUM] * row0[COL_SUM] / vals)) / (vals - 1)); return 0; } /* Stop function. Add these little stats to the main set of stats. */ static int vips_stats_stop(VipsStatistic *statistic, void *seq) { int bands = vips_image_get_bands(statistic->in); VipsStats *global = (VipsStats *) statistic; VipsStats *local = (VipsStats *) seq; int b; if (local->set && !global->set) { for (b = 0; b < bands; b++) { double *p = VIPS_MATRIX(local->out, 0, b + 1); double *q = VIPS_MATRIX(global->out, 0, b + 1); int i; for (i = 0; i < COL_LAST; i++) q[i] = p[i]; } global->set = TRUE; } else if (local->set && global->set) { for (b = 0; b < bands; b++) { double *p = VIPS_MATRIX(local->out, 0, b + 1); double *q = VIPS_MATRIX(global->out, 0, b + 1); if (p[COL_MIN] < q[COL_MIN]) { q[COL_MIN] = p[COL_MIN]; q[COL_XMIN] = p[COL_XMIN]; q[COL_YMIN] = p[COL_YMIN]; } if (p[COL_MAX] > q[COL_MAX]) { q[COL_MAX] = p[COL_MAX]; q[COL_XMAX] = p[COL_XMAX]; q[COL_YMAX] = p[COL_YMAX]; } q[COL_SUM] += p[COL_SUM]; q[COL_SUM2] += p[COL_SUM2]; } } VIPS_FREEF(g_object_unref, local->out); VIPS_FREEF(g_free, seq); return 0; } /* Start function: make a dummy local stats for the private use of this thread. */ static void * vips_stats_start(VipsStatistic *statistic) { int bands = vips_image_get_bands(statistic->in); VipsStats *stats; stats = g_new(VipsStats, 1); if (!(stats->out = vips_image_new_matrix(COL_LAST, bands + 1))) { g_free(stats); return NULL; } stats->set = FALSE; return (void *) stats; } /* We scan lines bands times to avoid repeating band loops. * Use temp variables of same type for min/max for faster comparisons. */ #define LOOP(TYPE) \ { \ for (b = 0; b < bands; b++) { \ TYPE *p = ((TYPE *) in) + b; \ double *q = VIPS_MATRIX(local->out, 0, b + 1); \ TYPE small, big; \ double sum, sum2; \ int xmin, ymin; \ int xmax, ymax; \ \ if (local->set) { \ small = q[COL_MIN]; \ big = q[COL_MAX]; \ sum = q[COL_SUM]; \ sum2 = q[COL_SUM2]; \ xmin = q[COL_XMIN]; \ ymin = q[COL_YMIN]; \ xmax = q[COL_XMAX]; \ ymax = q[COL_YMAX]; \ } \ else { \ small = p[0]; \ big = p[0]; \ sum = 0; \ sum2 = 0; \ xmin = x; \ ymin = y; \ xmax = x; \ ymax = y; \ } \ \ for (i = 0; i < n; i++) { \ TYPE value = *p; \ \ sum += value; \ sum2 += (double) value * (double) value; \ if (value > big) { \ big = value; \ xmax = x + i; \ ymax = y; \ } \ else if (value < small) { \ small = value; \ xmin = x + i; \ ymin = y; \ } \ \ p += bands; \ } \ \ q[COL_MIN] = small; \ q[COL_MAX] = big; \ q[COL_SUM] = sum; \ q[COL_SUM2] = sum2; \ q[COL_XMIN] = xmin; \ q[COL_YMIN] = ymin; \ q[COL_XMAX] = xmax; \ q[COL_YMAX] = ymax; \ } \ \ local->set = TRUE; \ } /* As above, but for float/double types where we have to avoid NaN. */ #define LOOPF(TYPE) \ { \ for (b = 0; b < bands; b++) { \ TYPE *p = ((TYPE *) in) + b; \ double *q = VIPS_MATRIX(local->out, 0, b + 1); \ TYPE small, big; \ double sum, sum2; \ int xmin, ymin; \ int xmax, ymax; \ \ if (local->set) { \ small = q[COL_MIN]; \ big = q[COL_MAX]; \ sum = q[COL_SUM]; \ sum2 = q[COL_SUM2]; \ xmin = q[COL_XMIN]; \ ymin = q[COL_YMIN]; \ xmax = q[COL_XMAX]; \ ymax = q[COL_YMAX]; \ } \ else { \ small = p[0]; \ big = p[0]; \ sum = 0; \ sum2 = 0; \ xmin = x; \ ymin = y; \ xmax = x; \ ymax = y; \ } \ \ for (i = 0; i < n; i++) { \ TYPE value = *p; \ \ sum += value; \ sum2 += (double) value * (double) value; \ if (value > big) { \ big = value; \ xmax = x + i; \ ymax = y; \ } \ else if (value < small) { \ small = value; \ xmin = x + i; \ ymin = y; \ } \ \ p += bands; \ } \ \ q[COL_MIN] = small; \ q[COL_MAX] = big; \ q[COL_SUM] = sum; \ q[COL_SUM2] = sum2; \ q[COL_XMIN] = xmin; \ q[COL_YMIN] = ymin; \ q[COL_XMAX] = xmax; \ q[COL_YMAX] = ymax; \ } \ \ local->set = TRUE; \ } /* Loop over region, accumulating a sum in *tmp. */ static int vips_stats_scan(VipsStatistic *statistic, void *seq, int x, int y, void *in, int n) { const int bands = vips_image_get_bands(statistic->in); VipsStats *local = (VipsStats *) seq; int b, i; switch (vips_image_get_format(statistic->in)) { case VIPS_FORMAT_UCHAR: LOOP(unsigned char); break; case VIPS_FORMAT_CHAR: LOOP(signed char); break; case VIPS_FORMAT_USHORT: LOOP(unsigned short); break; case VIPS_FORMAT_SHORT: LOOP(signed short); break; case VIPS_FORMAT_UINT: LOOP(unsigned int); break; case VIPS_FORMAT_INT: LOOP(signed int); break; case VIPS_FORMAT_FLOAT: LOOP(float); break; case VIPS_FORMAT_DOUBLE: LOOP(double); break; default: g_assert_not_reached(); } return 0; } static void vips_stats_class_init(VipsStatsClass *class) { GObjectClass *gobject_class = (GObjectClass *) class; VipsObjectClass *object_class = (VipsObjectClass *) class; VipsStatisticClass *sclass = VIPS_STATISTIC_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "stats"; object_class->description = _("find many image stats"); object_class->build = vips_stats_build; sclass->start = vips_stats_start; sclass->scan = vips_stats_scan; sclass->stop = vips_stats_stop; VIPS_ARG_IMAGE(class, "out", 100, _("Output"), _("Output array of statistics"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsStats, out)); } static void vips_stats_init(VipsStats *stats) { } /** * vips_stats: (method) * @in: image to scan * @out: (out): image of statistics * @...: %NULL-terminated list of optional named arguments * * Find many image statistics in a single pass through the data. @out is a * one-band #VIPS_FORMAT_DOUBLE image of at least 10 columns by n + 1 * (where n is number of bands in image @in) * rows. Columns are statistics, and are, in order: minimum, maximum, sum, * sum of squares, mean, standard deviation, x coordinate of minimum, y * coordinate of minimum, x coordinate of maximum, y coordinate of maximum. * Later versions of vips_stats() may add more columns. * * Row 0 has statistics for all * bands together, row 1 has stats for band 1, and so on. * * If there is more than one maxima or minima, one of them will be chosen at * random. * * See also: vips_avg(), vips_min(). * * Returns: 0 on success, -1 on error */ int vips_stats(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("stats", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/subtract.c000066400000000000000000000154751454007373500210760ustar00rootroot00000000000000/* Subtract two images * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 02/05/1990 * Modified on: * 29/4/93 J.Cupitt * - now works for partial images * 1/7/93 JC * - adapted for partial v2 * 9/5/95 JC * - simplified: now just handles 10 cases (instead of 50), using * im_clip2*() to help * - now uses im_wrapmany() rather than im_generate() * 12/6/95 JC * - new im_add() adapted to make this * 31/5/96 JC * - what was this SWAP() stuff? failed for small - big! * 22/8/03 JC * - cast up more quickly to help accuracy * 27/9/04 * - updated for 1 band $op n band image -> n band image case * 8/12/06 * - add liboil support * 18/8/08 * - revise upcasting system * - add gtkdoc comments * - remove separate complex case, just double size * 31/7/10 * - remove liboil * 23/8/11 * - rewrite as a class from add.c */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "binary.h" typedef VipsBinary VipsSubtract; typedef VipsBinaryClass VipsSubtractClass; G_DEFINE_TYPE(VipsSubtract, vips_subtract, VIPS_TYPE_BINARY); #define LOOP(IN, OUT) \ { \ IN *restrict left = (IN *) in[0]; \ IN *restrict right = (IN *) in[1]; \ OUT *restrict q = (OUT *) out; \ \ for (x = 0; x < sz; x++) \ q[x] = left[x] - right[x]; \ } static void vips_subtract_buffer(VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width) { VipsImage *im = arithmetic->ready[0]; /* Complex just doubles the size. */ const int sz = width * vips_image_get_bands(im) * (vips_band_format_iscomplex(vips_image_get_format(im)) ? 2 : 1); int x; /* Keep types here in sync with bandfmt_subtract[] * below. */ switch (vips_image_get_format(im)) { case VIPS_FORMAT_CHAR: LOOP(signed char, signed short); break; case VIPS_FORMAT_UCHAR: LOOP(unsigned char, signed short); break; case VIPS_FORMAT_SHORT: LOOP(signed short, signed int); break; case VIPS_FORMAT_USHORT: LOOP(unsigned short, signed int); break; case VIPS_FORMAT_INT: LOOP(signed int, signed int); break; case VIPS_FORMAT_UINT: LOOP(unsigned int, signed int); break; case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_COMPLEX: LOOP(float, float); break; case VIPS_FORMAT_DOUBLE: case VIPS_FORMAT_DPCOMPLEX: LOOP(double, double); break; default: g_assert_not_reached(); } } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX /* Type promotion for subtraction. Sign and value preserving. Make sure these * match the case statement in vips_subtract_buffer() above. */ static const VipsBandFormat vips_subtract_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ S, S, I, I, I, I, F, X, D, DX }; static void vips_subtract_class_init(VipsSubtractClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class); object_class->nickname = "subtract"; object_class->description = _("subtract two images"); aclass->process_line = vips_subtract_buffer; vips_arithmetic_set_format_table(aclass, vips_subtract_format_table); } static void vips_subtract_init(VipsSubtract *subtract) { } /** * vips_subtract: * @in1: input image * @in2: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * This operation calculates @in1 - @in2 and writes the result to @out. * * If the images differ in size, the smaller image is enlarged to match the * larger by adding zero pixels along the bottom and right. * * If the number of bands differs, one of the images * must have one band. In this case, an n-band image is formed from the * one-band image by joining n copies of the one-band image together, and then * the two n-band images are operated upon. * * The two input images are cast up to the smallest common format (see table * Smallest common format in * arithmetic), then the * following table is used to determine the output type: * * * VipsSubtract type promotion * * * * input type * output type * * * * * uchar * short * * * char * short * * * ushort * int * * * short * int * * * uint * int * * * int * int * * * float * float * * * double * double * * * complex * complex * * * double complex * double complex * * * *
* * In other words, the output type is just large enough to hold the whole * range of possible values. * * See also: vips_add(), vips_linear(). * * Returns: 0 on success, -1 on error */ int vips_subtract(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("subtract", ap, left, right, out); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/sum.c000066400000000000000000000143261454007373500200450ustar00rootroot00000000000000/* sum an array of images * * 18/3/14 * - from add.c */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "nary.h" typedef VipsNary VipsSum; typedef VipsNaryClass VipsSumClass; G_DEFINE_TYPE(VipsSum, vips_sum, VIPS_TYPE_NARY); #define LOOP(IN, OUT) \ { \ IN **restrict p = (IN **) in; \ OUT *restrict q = (OUT *) out; \ \ for (x = 0; x < sz; x++) { \ OUT sum; \ \ sum = p[0][x]; \ for (i = 1; i < n; i++) \ sum += p[i][x]; \ q[x] = sum; \ } \ } static void sum_buffer(VipsArithmetic *arithmetic, VipsPel *out, VipsPel **in, int width) { VipsImage *im = arithmetic->ready[0]; int n = arithmetic->n; /* Complex just doubles the size. */ const int sz = width * vips_image_get_bands(im) * (vips_band_format_iscomplex(vips_image_get_format(im)) ? 2 : 1); int x; int i; /* Sum all input types. Keep types here in sync with * vips_sum_format_table[] below. */ switch (vips_image_get_format(im)) { case VIPS_FORMAT_UCHAR: LOOP(unsigned char, unsigned int); break; case VIPS_FORMAT_CHAR: LOOP(signed char, signed int); break; case VIPS_FORMAT_USHORT: LOOP(unsigned short, unsigned int); break; case VIPS_FORMAT_SHORT: LOOP(signed short, signed int); break; case VIPS_FORMAT_UINT: LOOP(unsigned int, unsigned int); break; case VIPS_FORMAT_INT: LOOP(signed int, signed int); break; case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_COMPLEX: LOOP(float, float); break; case VIPS_FORMAT_DOUBLE: case VIPS_FORMAT_DPCOMPLEX: LOOP(double, double); break; default: g_assert_not_reached(); } } #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX /* Type promotion for addition. Sign and value preserving. Make sure these * match the case statement in sum_buffer() above. */ static const VipsBandFormat vips_sum_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UI, I, UI, I, UI, I, F, X, D, DX }; static void vips_sum_class_init(VipsSumClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsArithmeticClass *aclass = VIPS_ARITHMETIC_CLASS(class); object_class->nickname = "sum"; object_class->description = _("sum an array of images"); aclass->process_line = sum_buffer; vips_arithmetic_set_format_table(aclass, vips_sum_format_table); } static void vips_sum_init(VipsSum *sum) { } static int vips_sumv(VipsImage **in, VipsImage **out, int n, va_list ap) { VipsArrayImage *array; int result; array = vips_array_image_new(in, n); result = vips_call_split("sum", ap, array, out); vips_area_unref(VIPS_AREA(array)); return result; } /** * vips_sum: * @in: (array length=n): array of input images * @out: (out): output image * @n: number of input images * @...: %NULL-terminated list of optional named arguments * * This operation sums all images in @in and writes the result to @out. * * If the images differ in size, the smaller images are enlarged to match the * largest by adding zero pixels along the bottom and right. * * If the number of bands differs, all but one of the images * must have one band. In this case, n-band images are formed from the * one-band images by joining n copies of the one-band images together, and then * the n-band images are operated upon. * * The input images are cast up to the smallest common format (see table * Smallest common format in * arithmetic), then the * following table is used to determine the output type: * * * VipsSum type promotion * * * * input type * output type * * * * * uchar * uint * * * char * int * * * ushort * uint * * * short * int * * * uint * uint * * * int * int * * * float * float * * * double * double * * * complex * complex * * * double complex * double complex * * * *
* * In other words, the output type is just large enough to hold the whole * range of possible values. * * See also: vips_add(). * * Returns: 0 on success, -1 on error */ int vips_sum(VipsImage **in, VipsImage **out, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_sumv(in, out, n, ap); va_end(ap); return result; } libvips-8.15.1/libvips/arithmetic/unary.c000066400000000000000000000052561454007373500204010ustar00rootroot00000000000000/* base class for all unary operations * * 30/10/11 * - from binary.c */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "unary.h" G_DEFINE_ABSTRACT_TYPE(VipsUnary, vips_unary, VIPS_TYPE_ARITHMETIC); static int vips_unary_build(VipsObject *object) { VipsArithmetic *arithmetic = VIPS_ARITHMETIC(object); VipsUnary *unary = VIPS_UNARY(object); arithmetic->n = 1; arithmetic->in = (VipsImage **) vips_object_local_array(object, 1); arithmetic->in[0] = unary->in; if (arithmetic->in[0]) g_object_ref(arithmetic->in[0]); if (VIPS_OBJECT_CLASS(vips_unary_parent_class)->build(object)) return -1; return 0; } static void vips_unary_class_init(VipsUnaryClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "unary"; vobject_class->description = _("unary operations"); vobject_class->build = vips_unary_build; /* Create properties. */ VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsUnary, in)); } static void vips_unary_init(VipsUnary *unary) { /* Init our instance fields. */ } /* Call this before chaining up in _build() to make the operation fall back to * copy. */ int vips_unary_copy(VipsUnary *unary) { VipsArithmetic *arithmetic = VIPS_ARITHMETIC(unary); /* This isn't set by arith until build(), so we have to set * again here. * * Should arith set out in _init()? */ g_object_set(unary, "out", vips_image_new(), NULL); return vips_image_write(unary->in, arithmetic->out); } libvips-8.15.1/libvips/arithmetic/unary.h000066400000000000000000000034551454007373500204050ustar00rootroot00000000000000/* base class for all unary arithmetic operations */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_UNARY_H #define VIPS_UNARY_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #include "parithmetic.h" #define VIPS_TYPE_UNARY (vips_unary_get_type()) #define VIPS_UNARY(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_UNARY, VipsUnary)) #define VIPS_UNARY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_UNARY, VipsUnaryClass)) #define VIPS_IS_UNARY(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_UNARY)) #define VIPS_IS_UNARY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_UNARY)) #define VIPS_UNARY_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_UNARY, VipsUnaryClass)) typedef struct _VipsUnary { VipsArithmetic parent_instance; VipsImage *in; } VipsUnary; typedef VipsArithmeticClass VipsUnaryClass; GType vips_unary_get_type(void); int vips_unary_copy(VipsUnary *unary); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_UNARY_H*/ libvips-8.15.1/libvips/arithmetic/unaryconst.c000066400000000000000000000074461454007373500214530ustar00rootroot00000000000000/* an image plus a constant * * 11/11/11 * - from arith_binary_const * 21/8/19 * - revise to fix out of range comparisons */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "unaryconst.h" G_DEFINE_ABSTRACT_TYPE(VipsUnaryConst, vips_unary_const, VIPS_TYPE_UNARY); static int vips_unary_const_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsArithmetic *arithmetic = VIPS_ARITHMETIC(object); VipsUnary *unary = (VipsUnary *) object; VipsUnaryConst *uconst = (VipsUnaryConst *) object; /* If we have a three-element vector we need to bandup the image to * match. */ uconst->n = 1; if (uconst->c) uconst->n = VIPS_MAX(uconst->n, uconst->c->n); if (unary->in) uconst->n = VIPS_MAX(uconst->n, unary->in->Bands); arithmetic->base_bands = uconst->n; if (unary->in && uconst->c) { if (vips_check_vector(class->nickname, uconst->c->n, unary->in)) return -1; } /* Some operations need int constants, for example boolean AND, SHIFT * etc. * * Some can use int constants as an optimisation, for example (x < * 12). It depends on the value though: obviously (x < 12.5) should * not use the int form. * * For complex images, we double the vector length and set the * imaginary part to 0. */ if (uconst->c) { gboolean is_complex = vips_band_format_iscomplex(unary->in->BandFmt); int step = is_complex ? 2 : 1; int n = step * uconst->n; double *c = (double *) uconst->c->data; int i; uconst->c_int = VIPS_ARRAY(object, n, int); uconst->c_double = VIPS_ARRAY(object, n, double); if (!uconst->c_int || !uconst->c_double) return -1; memset(uconst->c_int, 0, n * sizeof(int)); memset(uconst->c_double, 0, n * sizeof(double)); for (i = 0; i < n; i += step) uconst->c_double[i] = c[VIPS_MIN(i / step, uconst->c->n - 1)]; for (i = 0; i < n; i += step) uconst->c_int[i] = uconst->c_double[i]; uconst->is_int = TRUE; for (i = 0; i < n; i += step) if (uconst->c_int[i] != uconst->c_double[i]) { uconst->is_int = FALSE; break; } } if (VIPS_OBJECT_CLASS(vips_unary_const_parent_class)->build(object)) return -1; return 0; } static void vips_unary_const_class_init(VipsUnaryConstClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "unary_const"; object_class->description = _("unary operations with a constant"); object_class->build = vips_unary_const_build; VIPS_ARG_BOXED(class, "c", 201, _("c"), _("Array of constants"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsUnaryConst, c), VIPS_TYPE_ARRAY_DOUBLE); } static void vips_unary_const_init(VipsUnaryConst *uconst) { } libvips-8.15.1/libvips/arithmetic/unaryconst.h000066400000000000000000000042561454007373500214540ustar00rootroot00000000000000/* base class for all unaryconst arithmetic operations */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_UNARY_CONST_H #define VIPS_UNARY_CONST_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #include "unary.h" #define VIPS_TYPE_UNARY_CONST (vips_unary_const_get_type()) #define VIPS_UNARY_CONST(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_UNARY_CONST, VipsUnaryConst)) #define VIPS_UNARY_CONST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_UNARY_CONST, VipsUnaryConstClass)) #define VIPS_IS_UNARY_CONST(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_UNARY_CONST)) #define VIPS_IS_UNARY_CONST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_UNARY_CONST)) #define VIPS_UNARY_CONST_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_UNARY_CONST, VipsUnaryConstClass)) typedef struct _VipsUnaryConst { VipsUnary parent_instance; /* Our constants. */ VipsArea *c; /* Our constant expanded to match arith->ready in size. We need int * and double versions. * * is_int is TRUE if the two arrays are equal for every element. */ int n; int *c_int; double *c_double; gboolean is_int; } VipsUnaryConst; typedef struct _VipsUnaryConstClass { VipsUnaryClass parent_class; } VipsUnaryConstClass; GType vips_unary_const_get_type(void); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_UNARY_CONST_H*/ libvips-8.15.1/libvips/colour/000077500000000000000000000000001454007373500162415ustar00rootroot00000000000000libvips-8.15.1/libvips/colour/CMYK2XYZ.c000066400000000000000000000125751454007373500176570ustar00rootroot00000000000000/* Use lcms to move from CMYK to XYZ, if we can. This needs a working * vips_icc_import. * * 21/12/18 * - from scRGB2XYZ.c * 7/5/23 kleisauke * - use embedded ICC profile, if available */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "profiles.h" #include "pcolour.h" #ifdef HAVE_LCMS2 typedef struct _VipsCMYK2XYZ { VipsOperation parent_instance; VipsImage *in; VipsImage *out; } VipsCMYK2XYZ; typedef VipsColourCodeClass VipsCMYK2XYZClass; G_DEFINE_TYPE(VipsCMYK2XYZ, vips_CMYK2XYZ, VIPS_TYPE_OPERATION); /* Our actual processing, as a VipsColourTransformFn. */ static int vips_CMYK2XYZ_process(VipsImage *in, VipsImage **out, ...) { return vips_icc_import(in, out, "input_profile", "cmyk", "embedded", TRUE, "pcs", VIPS_PCS_XYZ, NULL); } static int vips_CMYK2XYZ_build(VipsObject *object) { VipsCMYK2XYZ *CMYK2XYZ = (VipsCMYK2XYZ *) object; VipsImage *out; VipsImage *t; if (VIPS_OBJECT_CLASS(vips_CMYK2XYZ_parent_class)->build(object)) return -1; out = vips_image_new(); g_object_set(object, "out", out, NULL); if (vips__colourspace_process_n("CMYK2XYZ", CMYK2XYZ->in, &t, 4, vips_CMYK2XYZ_process)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } static void vips_CMYK2XYZ_class_init(VipsCMYK2XYZClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "CMYK2XYZ"; object_class->description = _("transform CMYK to XYZ"); object_class->build = vips_CMYK2XYZ_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsCMYK2XYZ, in)); VIPS_ARG_IMAGE(class, "out", 100, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsCMYK2XYZ, out)); } static void vips_CMYK2XYZ_init(VipsCMYK2XYZ *CMYK2XYZ) { } #else /*!HAVE_LCMS2*/ typedef VipsColourCode VipsCMYK2XYZ; typedef VipsColourCodeClass VipsCMYK2XYZClass; G_DEFINE_TYPE(VipsCMYK2XYZ, vips_CMYK2XYZ, VIPS_TYPE_COLOUR_CODE); static void vips_CMYK2XYZ_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { unsigned char *p = (unsigned char *) in[0]; float *q = (float *) out; int i; for (i = 0; i < width; i++) { float c = p[0] / 255.0; float m = p[1] / 255.0; float y = p[2] / 255.0; float k = p[3] / 255.0; float r = 1.0 - (c * (1.0 - k) + k); float g = 1.0 - (m * (1.0 - k) + k); float b = 1.0 - (y * (1.0 - k) + k); q[0] = VIPS_D65_X0 * r; q[1] = VIPS_D65_Y0 * g; q[2] = VIPS_D65_Z0 * b; p += 4; q += 3; } } static void vips_CMYK2XYZ_class_init(VipsCMYK2XYZClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "CMYK2XYZ"; object_class->description = _("transform CMYK to XYZ"); colour_class->process_line = vips_CMYK2XYZ_line; } static void vips_CMYK2XYZ_init(VipsCMYK2XYZ *CMYK2XYZ) { VipsColour *colour = VIPS_COLOUR(CMYK2XYZ); VipsColourCode *code = VIPS_COLOUR_CODE(CMYK2XYZ); colour->interpretation = VIPS_INTERPRETATION_XYZ; colour->format = VIPS_FORMAT_FLOAT; colour->bands = 3; colour->input_bands = 4; code->input_coding = VIPS_CODING_NONE; code->input_format = VIPS_FORMAT_UCHAR; code->input_interpretation = VIPS_INTERPRETATION_CMYK; } #endif /*HAVE_LCMS2*/ /** * vips_CMYK2XYZ: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Turn CMYK to XYZ. If the image has an embedded ICC profile this will be * used for the conversion. If there is no embedded profile, a generic * fallback profile will be used. * * Conversion is to D65 XYZ with relative intent. If you need more control * over the process, use vips_icc_import() instead. * * Returns: 0 on success, -1 on error */ int vips_CMYK2XYZ(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("CMYK2XYZ", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/HSV2sRGB.c000066400000000000000000000067621454007373500176600ustar00rootroot00000000000000/* to sRGB from HSV * * 9/6/15 * - from sRGB2HSV.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pcolour.h" #define SIXTH_OF_CHAR (42.5) typedef VipsColourCode VipsHSV2sRGB; typedef VipsColourCodeClass VipsHSV2sRGBClass; G_DEFINE_TYPE(VipsHSV2sRGB, vips_HSV2sRGB, VIPS_TYPE_COLOUR_CODE); static void vips_HSV2sRGB_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { unsigned char *p = (unsigned char *) in[0]; unsigned char *q = (unsigned char *) out; int i; for (i = 0; i < width; i++) { float c, x, m; c = p[2] * p[1] / 255.0; x = c * (1 - VIPS_FABS(fmod(p[0] / SIXTH_OF_CHAR, 2) - 1)); m = p[2] - c; if (p[0] < (int) SIXTH_OF_CHAR) { q[0] = c + m; q[1] = x + m; q[2] = 0 + m; } else if (p[0] < (int) (2 * SIXTH_OF_CHAR)) { q[0] = x + m; q[1] = c + m; q[2] = 0 + m; } else if (p[0] < (int) (3 * SIXTH_OF_CHAR)) { q[0] = 0 + m; q[1] = c + m; q[2] = x + m; } else if (p[0] < (int) (4 * SIXTH_OF_CHAR)) { q[0] = 0 + m; q[1] = x + m; q[2] = c + m; } else if (p[0] < (int) (5 * SIXTH_OF_CHAR)) { q[0] = x + m; q[1] = 0 + m; q[2] = c + m; } else { q[0] = c + m; q[1] = 0 + m; q[2] = x + m; } p += 3; q += 3; } } static void vips_HSV2sRGB_class_init(VipsHSV2sRGBClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); object_class->nickname = "HSV2sRGB"; object_class->description = _("transform HSV to sRGB"); colour_class->process_line = vips_HSV2sRGB_line; } static void vips_HSV2sRGB_init(VipsHSV2sRGB *HSV2sRGB) { VipsColour *colour = VIPS_COLOUR(HSV2sRGB); VipsColourCode *code = VIPS_COLOUR_CODE(HSV2sRGB); colour->interpretation = VIPS_INTERPRETATION_sRGB; colour->format = VIPS_FORMAT_UCHAR; colour->bands = 3; colour->input_bands = 3; code->input_coding = VIPS_CODING_NONE; code->input_format = VIPS_FORMAT_UCHAR; code->input_interpretation = VIPS_INTERPRETATION_HSV; } /** * vips_HSV2sRGB: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Convert HSV to sRGB. * * HSV is a crude polar coordinate system for RGB images. It is provided for * compatibility with other image processing systems. See vips_Lab2LCh() for a * much better colour space. * * See also: vips_sRGB2HSV(). * * Returns: 0 on success, -1 on error. */ int vips_HSV2sRGB(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("HSV2sRGB", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/LCh2Lab.c000066400000000000000000000056131454007373500175610ustar00rootroot00000000000000/* im_LCh2Lab * * 15/11/94 JC * - error messages added * - memory leak fixed * 16/11/94 JC * - uses im_wrap_oneonebuf() now * 8/2/95 JC * - im_wrap v2 * 2/11/09 * - gtkdoc * 19/9/12 * - redone as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pcolour.h" typedef VipsColourTransform VipsLCh2Lab; typedef VipsColourTransformClass VipsLCh2LabClass; G_DEFINE_TYPE(VipsLCh2Lab, vips_LCh2Lab, VIPS_TYPE_COLOUR_TRANSFORM); /** * vips_col_Ch2ab: * @C: Chroma * @h: Hue angle (degrees) * @a: return CIE a* value * @b: return CIE b* value * * Calculate ab from Ch, h in degrees. */ void vips_col_Ch2ab(float C, float h, float *a, float *b) { *a = C * cos(VIPS_RAD(h)); *b = C * sin(VIPS_RAD(h)); } /* Process a buffer of data. */ static void vips_LCh2Lab_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { float *restrict p = (float *) in[0]; float *restrict q = (float *) out; int x; for (x = 0; x < width; x++) { float L = p[0]; float C = p[1]; float h = p[2]; float a, b; p += 3; vips_col_Ch2ab(C, h, &a, &b); q[0] = L; q[1] = a; q[2] = b; q += 3; } } static void vips_LCh2Lab_class_init(VipsLCh2LabClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); object_class->nickname = "LCh2Lab"; object_class->description = _("transform LCh to Lab"); colour_class->process_line = vips_LCh2Lab_line; } static void vips_LCh2Lab_init(VipsLCh2Lab *LCh2Lab) { VipsColour *colour = VIPS_COLOUR(LCh2Lab); colour->interpretation = VIPS_INTERPRETATION_LAB; } /** * vips_LCh2Lab: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Turn LCh to Lab. * * Returns: 0 on success, -1 on error */ int vips_LCh2Lab(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("LCh2Lab", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/LCh2UCS.c000066400000000000000000000115601454007373500175130ustar00rootroot00000000000000/* LCh2CMC * * Modified: * 2/11/09 * - gtkdoc * 19/9/12 * - redone as a class * 24/9/14 * - rechecked against original paper, seems OK */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pcolour.h" typedef VipsColourTransform VipsLCh2CMC; typedef VipsColourTransformClass VipsLCh2CMCClass; G_DEFINE_TYPE(VipsLCh2CMC, vips_LCh2CMC, VIPS_TYPE_COLOUR_TRANSFORM); /* I ordered this paper from the library and it took ages. For reference, the * recommended short formula are: * * Lucs * = 1.744 * L, L < 16 * = (1/l) * (21.75 * ln(L) + 0.3838 * L - 38.54), otherwise * * Cucs = (l/c) * (0.162 * C + 10.92 * (ln(0.638 + 0.07216 * C)) + 4.907) * * hucs = h + D * f * where * D = k4 + k5 * P * | P | ** k6 * P = cos(k7 * h + k8) * f = (C ** 4 / (C ** 4 + 1900)) ** 0.5 * * h k4 k5 k6 k7 k8 * 0 - 49 133.87 -134.5 -0.924 1.727 340 * 49 - 110 11.78 -12.7 -0.218 2.120 333 * 110 - 269.5 13.87 10.93 0.140 1.000 -83 * 269.5 - 360 0.14 5.23 0.170 1.610 233 * * They have a much more complicated but slightly more accurate formula for * hucs. This one is pretty good, simple approximation. */ /** * vips_col_L2Lcmc: * @L: CIE L* * * Calculate Lcmc from L. * * Returns: Lcmc */ float vips_col_L2Lcmc(float L) { float Lcmc; if (L < 16.0) Lcmc = 1.744 * L; else Lcmc = 21.75 * log(L) + 0.3838 * L - 38.54; return Lcmc; } /** * vips_col_C2Ccmc: * @C: Chroma * * Calculate Ccmc from C. * * Returns: Ccmc. */ float vips_col_C2Ccmc(float C) { float Ccmc; Ccmc = 0.162 * C + 10.92 * log(0.638 + 0.07216 * C) + 4.907; if (Ccmc < 0) Ccmc = 0; return Ccmc; } /** * vips_col_Ch2hcmc: * @C: Chroma * @h: Hue (degrees) * * Calculate hcmc from C and h. * * Returns: hcmc. */ float vips_col_Ch2hcmc(float C, float h) { float P, D, f, g; float k4, k5, k6, k7, k8; float hcmc; if (h < 49.1) { k4 = 133.87; k5 = -134.5; k6 = -.924; k7 = 1.727; k8 = 340.0; } else if (h < 110.1) { k4 = 11.78; k5 = -12.7; k6 = -.218; k7 = 2.12; k8 = 333.0; } else if (h < 269.6) { k4 = 13.87; k5 = 10.93; k6 = 0.14; k7 = 1.0; k8 = -83.0; } else { k4 = .14; k5 = 5.23; k6 = .17; k7 = 1.61; k8 = 233.0; } P = cos(VIPS_RAD(k7 * h + k8)); D = k4 + k5 * P * pow(VIPS_FABS(P), k6); g = C * C * C * C; f = sqrt(g / (g + 1900.0)); hcmc = h + D * f; return hcmc; } static void vips_LCh2CMC_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { float *p = (float *) in[0]; float *q = (float *) out; int x; for (x = 0; x < width; x++) { float L = p[0]; float C = p[1]; float h = p[2]; p += 3; q[0] = vips_col_L2Lcmc(L); q[1] = vips_col_C2Ccmc(C); q[2] = vips_col_Ch2hcmc(C, h); q += 3; } } static void vips_LCh2CMC_class_init(VipsLCh2CMCClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); object_class->nickname = "LCh2CMC"; object_class->description = _("transform LCh to CMC"); colour_class->process_line = vips_LCh2CMC_line; } static void vips_LCh2CMC_init(VipsLCh2CMC *LCh2CMC) { VipsColour *colour = VIPS_COLOUR(LCh2CMC); colour->interpretation = VIPS_INTERPRETATION_CMC; } /** * vips_LCh2CMC: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Turn LCh to CMC. * * The CMC colourspace is described in "Uniform Colour Space Based on the * CMC(l:c) Colour-difference Formula", M R Luo and B Rigg, Journal of the * Society of Dyers and Colourists, vol 102, 1986. Distances in this * colourspace approximate, within 10% or so, differences in the CMC(l:c) * colour difference formula. * * This operation generates CMC(1:1). For CMC(2:1), halve Lucs and double * Cucs. * * See also: vips_CMC2LCh(). * * Returns: 0 on success, -1 on error */ int vips_LCh2CMC(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("LCh2CMC", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/Lab2LCh.c000066400000000000000000000061401454007373500175550ustar00rootroot00000000000000/* Turn Lab to LCh * * 2/11/09 * - gtkdoc * - cleanups * 18/9/12 * - redone as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pcolour.h" typedef VipsColourTransform VipsLab2LCh; typedef VipsColourTransformClass VipsLab2LChClass; G_DEFINE_TYPE(VipsLab2LCh, vips_Lab2LCh, VIPS_TYPE_COLOUR_TRANSFORM); /** * vips_col_ab2h: * @a: CIE a * @b: CIE b * * Returns: Hue (degrees) */ double vips_col_ab2h(double a, double b) { double h; /* We have to get the right quadrant! */ if (a == 0) { if (b < 0.0) h = 270; else if (b == 0.0) h = 0; else h = 90; } else { double t = atan(b / a); if (a > 0.0) if (b < 0.0) h = VIPS_DEG(t + VIPS_PI * 2.0); else h = VIPS_DEG(t); else h = VIPS_DEG(t + VIPS_PI); } return h; } void vips_col_ab2Ch(float a, float b, float *C, float *h) { *h = vips_col_ab2h(a, b); #ifdef HAVE_HYPOT *C = hypot(a, b); #else *C = sqrt(a * a + b * b); #endif } static void vips_Lab2LCh_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { float *restrict p = (float *) in[0]; float *restrict q = (float *) out; int x; for (x = 0; x < width; x++) { float L = p[0]; float a = p[1]; float b = p[2]; float C, h; p += 3; C = sqrt(a * a + b * b); h = vips_col_ab2h(a, b); q[0] = L; q[1] = C; q[2] = h; q += 3; } } static void vips_Lab2LCh_class_init(VipsLab2LChClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); object_class->nickname = "Lab2LCh"; object_class->description = _("transform Lab to LCh"); colour_class->process_line = vips_Lab2LCh_line; } static void vips_Lab2LCh_init(VipsLab2LCh *Lab2LCh) { VipsColour *colour = VIPS_COLOUR(Lab2LCh); colour->interpretation = VIPS_INTERPRETATION_LCH; } /** * vips_Lab2LCh: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Turn Lab to LCh. * * Returns: 0 on success, -1 on error */ int vips_Lab2LCh(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("Lab2LCh", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/Lab2LabQ.c000066400000000000000000000105021454007373500177230ustar00rootroot00000000000000/* Lab2LabQ: quantise FLOAT Lab image into 10 11 11 format * * 4 bytes per pel: l a b lsbs * this is an image wrapper which calls line-wise packing * Copyright K.Martinez 3/5/93 * Modified: * 7/6/93 JC * - adapted for partial v2 * 5/5/94 JC * - some nint->+0.5, for speed and to ease portability * - other nint->rint * - now includes ! * 15/11/94 JC * - all nint(), rint() removed for speed * - now -128 rather than -127 for a, b * - checks input type properly * 16/11/94 JC * - uses new im_wrap_oneonebuf() * 22/5/95 JC * - changed L to scale by 10.24, not 10.23 * 11/7/95 JC * - now uses IM_RINT() for rounding * 4/9/97 JC * - L* = 100.0 now allowed * 5/11/00 JC * - go int earlier for speed up * 20/6/02 JC * - oops, were not clipping a/b range correctly * 1/11/09 * - gtkdoc * - cleanups * 20/9/12 * - redo as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pcolour.h" typedef VipsColourCode VipsLab2LabQ; typedef VipsColourCodeClass VipsLab2LabQClass; G_DEFINE_TYPE(VipsLab2LabQ, vips_Lab2LabQ, VIPS_TYPE_COLOUR_CODE); /* @(#) convert float Lab to packed Lab32 format 10 11 11 bits * works only on buffers, not IMAGEs * Copyright 1993 K.Martinez * Modified: 3/5/93, 16/6/93 */ static void vips_Lab2LabQ_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { float *restrict p = (float *) in[0]; VipsPel *restrict q = out; int i; for (i = 0; i < width; i++) { float fval; int lsbs; int intv; /* Scale L up to 10 bits. */ intv = VIPS_ROUND_UINT(10.23 * p[0]); intv = VIPS_CLIP(0, intv, 1023); lsbs = (intv & 0x3) << 6; /* 00000011 -> 11000000 */ q[0] = intv >> 2; /* drop bot 2 bits and store */ fval = 8.0 * p[1]; /* do a */ intv = VIPS_RINT(fval); intv = VIPS_CLIP(-1024, intv, 1023); lsbs |= (intv & 0x7) << 3; /* 00000111 -> 00111000 */ q[1] = intv >> 3; /* drop bot 3 bits & store */ fval = 8.0 * p[2]; /* do b */ intv = VIPS_RINT(fval); intv = VIPS_CLIP(-1024, intv, 1023); lsbs |= (intv & 0x7); q[2] = intv >> 3; q[3] = lsbs; /* store lsb band */ p += 3; q += 4; } } void vips__Lab2LabQ_vec(VipsPel *out, float *in, int width) { vips_Lab2LabQ_line(NULL, out, (VipsPel **) &in, width); } static void vips_Lab2LabQ_class_init(VipsLab2LabQClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); object_class->nickname = "Lab2LabQ"; object_class->description = _("transform float Lab to LabQ coding"); colour_class->process_line = vips_Lab2LabQ_line; } static void vips_Lab2LabQ_init(VipsLab2LabQ *Lab2LabQ) { VipsColour *colour = VIPS_COLOUR(Lab2LabQ); VipsColourCode *code = VIPS_COLOUR_CODE(Lab2LabQ); colour->coding = VIPS_CODING_LABQ; colour->interpretation = VIPS_INTERPRETATION_LABQ; colour->format = VIPS_FORMAT_UCHAR; colour->input_bands = 3; colour->bands = 4; code->input_coding = VIPS_CODING_NONE; code->input_format = VIPS_FORMAT_FLOAT; } /** * vips_Lab2LabQ: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Convert a Lab three-band float image to LabQ (#VIPS_CODING_LABQ). * * See also: vips_LabQ2Lab(). * * Returns: 0 on success, -1 on error. */ int vips_Lab2LabQ(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("Lab2LabQ", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/Lab2LabS.c000066400000000000000000000054711454007373500177360ustar00rootroot00000000000000/* Lab2LabS: quantise FLOAT Lab image into signed short format * * 12/12/02 JC * - from im_Lab2LabS * 1/11/09 * - gtkdoc * - cleanups * 20/9/12 * - redo as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pcolour.h" typedef VipsColourCode VipsLab2LabS; typedef VipsColourCodeClass VipsLab2LabSClass; G_DEFINE_TYPE(VipsLab2LabS, vips_Lab2LabS, VIPS_TYPE_COLOUR_CODE); static void vips_Lab2LabS_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { float *restrict p = (float *) in[0]; signed short *restrict q = (signed short *) out; int i; for (i = 0; i < width; i++) { q[0] = p[0] * (32767.0 / 100.0); q[1] = p[1] * (32768.0 / 128.0); q[2] = p[2] * (32768.0 / 128.0); q += 3; p += 3; } } static void vips_Lab2LabS_class_init(VipsLab2LabSClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); object_class->nickname = "Lab2LabS"; object_class->description = _("transform float Lab to signed short"); colour_class->process_line = vips_Lab2LabS_line; } static void vips_Lab2LabS_init(VipsLab2LabS *Lab2LabS) { VipsColour *colour = VIPS_COLOUR(Lab2LabS); VipsColourCode *code = VIPS_COLOUR_CODE(Lab2LabS); colour->interpretation = VIPS_INTERPRETATION_LABS; colour->format = VIPS_FORMAT_SHORT; colour->input_bands = 3; colour->bands = 3; code->input_coding = VIPS_CODING_NONE; code->input_format = VIPS_FORMAT_FLOAT; } /** * vips_Lab2LabS: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Turn Lab to LabS, signed 16-bit int fixed point. * * See also: vips_LabQ2Lab(). * * Returns: 0 on success, -1 on error. */ int vips_Lab2LabS(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("Lab2LabS", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/Lab2XYZ.c000066400000000000000000000125011454007373500175770ustar00rootroot00000000000000/* Lab to XYZ. * * Modified: * 15/11/94 JC * - ANSIfied * - sets Type of output * - better error messages * 16/11/94 JC * - partialed * - in-line conversion * 8/2/95 JC * - new im_wrapone function * 2/11/09 * - gtkdoc * - cleanups * 18/9/12 * - redone as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pcolour.h" typedef struct _VipsLab2XYZ { VipsColourTransform parent_instance; /* The colour temperature -- default to D65. */ VipsArea *temp; /* Broken out as xyz. */ double X0; double Y0; double Z0; } VipsLab2XYZ; typedef VipsColourTransformClass VipsLab2XYZClass; G_DEFINE_TYPE(VipsLab2XYZ, vips_Lab2XYZ, VIPS_TYPE_COLOUR_TRANSFORM); static void vips_col_Lab2XYZ_helper(VipsLab2XYZ *Lab2XYZ, float L, float a, float b, float *X, float *Y, float *Z) { double cby, tmp; if (L < 8.0) { *Y = (L * Lab2XYZ->Y0) / 903.3; cby = 7.787 * (*Y / Lab2XYZ->Y0) + 16.0 / 116.0; } else { cby = (L + 16.0) / 116.0; *Y = Lab2XYZ->Y0 * cby * cby * cby; } tmp = a / 500.0 + cby; if (tmp < 0.2069) *X = Lab2XYZ->X0 * (tmp - 0.13793) / 7.787; else *X = Lab2XYZ->X0 * tmp * tmp * tmp; tmp = cby - b / 200.0; if (tmp < 0.2069) *Z = Lab2XYZ->Z0 * (tmp - 0.13793) / 7.787; else *Z = Lab2XYZ->Z0 * tmp * tmp * tmp; } /* Process a buffer of data. */ static void vips_Lab2XYZ_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { VipsLab2XYZ *Lab2XYZ = (VipsLab2XYZ *) colour; float *restrict p = (float *) in[0]; float *restrict q = (float *) out; int x; VIPS_DEBUG_MSG("vips_Lab2XYZ_line: X0 = %g, Y0 = %g, Z0 = %g\n", Lab2XYZ->X0, Lab2XYZ->Y0, Lab2XYZ->Z0); for (x = 0; x < width; x++) { float L, a, b; float X, Y, Z; L = p[0]; a = p[1]; b = p[2]; p += 3; vips_col_Lab2XYZ_helper(Lab2XYZ, L, a, b, &X, &Y, &Z); /* Write. */ q[0] = X; q[1] = Y; q[2] = Z; q += 3; } } static int vips_Lab2XYZ_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsLab2XYZ *Lab2XYZ = (VipsLab2XYZ *) object; if (Lab2XYZ->temp) { if (vips_check_vector_length(class->nickname, Lab2XYZ->temp->n, 3)) return -1; Lab2XYZ->X0 = ((double *) Lab2XYZ->temp->data)[0]; Lab2XYZ->Y0 = ((double *) Lab2XYZ->temp->data)[1]; Lab2XYZ->Z0 = ((double *) Lab2XYZ->temp->data)[2]; } if (VIPS_OBJECT_CLASS(vips_Lab2XYZ_parent_class)->build(object)) return -1; return 0; } static void vips_Lab2XYZ_class_init(VipsLab2XYZClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "Lab2XYZ"; object_class->description = _("transform CIELAB to XYZ"); object_class->build = vips_Lab2XYZ_build; colour_class->process_line = vips_Lab2XYZ_line; VIPS_ARG_BOXED(class, "temp", 110, _("Temperature"), _("Color temperature"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsLab2XYZ, temp), VIPS_TYPE_ARRAY_DOUBLE); } static void vips_Lab2XYZ_init(VipsLab2XYZ *Lab2XYZ) { VipsColour *colour = VIPS_COLOUR(Lab2XYZ); Lab2XYZ->X0 = VIPS_D65_X0; Lab2XYZ->Y0 = VIPS_D65_Y0; Lab2XYZ->Z0 = VIPS_D65_Z0; colour->interpretation = VIPS_INTERPRETATION_XYZ; } /** * vips_Lab2XYZ: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @temp: #VipsArrayDouble, colour temperature * * Turn Lab to XYZ. The colour temperature defaults to D65, but can be * specified with @temp. * * Returns: 0 on success, -1 on error */ int vips_Lab2XYZ(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("Lab2XYZ", ap, in, out); va_end(ap); return result; } /** * vips_col_Lab2XYZ: * @L: Input CIE Lab value * @a: Input CIE Lab value * @b: Input CIE Lab value * @X: (out): Return CIE XYZ colour * @Y: (out): Return CIE XYZ colour * @Z: (out): Return CIE XYZ colour * * Calculate XYZ from Lab, D65. * * See also: vips_Lab2XYZ(). */ void vips_col_Lab2XYZ(float L, float a, float b, float *X, float *Y, float *Z) { VipsLab2XYZ Lab2XYZ; Lab2XYZ.X0 = VIPS_D65_X0; Lab2XYZ.Y0 = VIPS_D65_Y0; Lab2XYZ.Z0 = VIPS_D65_Z0; vips_col_Lab2XYZ_helper(&Lab2XYZ, L, a, b, X, Y, Z); } libvips-8.15.1/libvips/colour/LabQ2Lab.c000066400000000000000000000075471454007373500177420ustar00rootroot00000000000000/* LabQ2Lab * * Copyright Kirk Martinez 2/5/1993 * * Modified: 16/6/93 * 7/6/93 JC * - adapted for partial v2 * 16/11/94 JC * - adapted to new im_wrap_oneonebuf() function. * 9/2/95 JC * - new im_wrapone function * 22/5/95 JC * - changed char to unsigned char for RS/6000 * - small tidies and speed-ups * 4/9/97 JC * - L* = 100.0 now handled correctly * 2/11/09 * - gtkdoc * 20/9/12 * - redo as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pcolour.h" typedef VipsColourCode VipsLabQ2Lab; typedef VipsColourCodeClass VipsLabQ2LabClass; G_DEFINE_TYPE(VipsLabQ2Lab, vips_LabQ2Lab, VIPS_TYPE_COLOUR_CODE); /* imb_LabQ2Lab: CONVERT n pels from packed 32bit Lab to float values * in a buffer * ARGS: VipsPel *inp pointer to first byte of Lab32 buffer * float *outbuf destination buffer * int n number of pels to process * (C) K.Martinez 2/5/93 */ static void vips_LabQ2Lab_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { signed char *restrict p = (signed char *) in[0]; float *restrict q = (float *) out; int l; int lsbs; /* for lsbs byte */ int i; /* counter */ /* Read input with a signed pointer to get signed ab easily. */ for (i = 0; i < width; i++) { /* Get extra bits. */ lsbs = ((unsigned char *) p)[3]; /* Build L. */ l = ((unsigned char *) p)[0]; l = (l << 2) | (lsbs >> 6); q[0] = (float) l * (100.0 / 1023.0); /* Build a. */ l = VIPS_LSHIFT_INT(p[1], 3) | ((lsbs >> 3) & 0x7); q[1] = (float) l * 0.125; /* And b. */ l = VIPS_LSHIFT_INT(p[2], 3) | (lsbs & 0x7); q[2] = (float) l * 0.125; p += 4; q += 3; } } void vips__LabQ2Lab_vec(float *out, VipsPel *in, int width) { vips_LabQ2Lab_line(NULL, (VipsPel *) out, &in, width); } static void vips_LabQ2Lab_class_init(VipsLabQ2LabClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); object_class->nickname = "LabQ2Lab"; object_class->description = _("unpack a LabQ image to float Lab"); colour_class->process_line = vips_LabQ2Lab_line; } static void vips_LabQ2Lab_init(VipsLabQ2Lab *LabQ2Lab) { VipsColour *colour = VIPS_COLOUR(LabQ2Lab); VipsColourCode *code = VIPS_COLOUR_CODE(LabQ2Lab); colour->coding = VIPS_CODING_NONE; colour->interpretation = VIPS_INTERPRETATION_LAB; colour->format = VIPS_FORMAT_FLOAT; colour->bands = 3; code->input_coding = VIPS_CODING_LABQ; } /** * vips_LabQ2Lab: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Unpack a LabQ (#VIPS_CODING_LABQ) image to a three-band float image. * * See also: vips_LabQ2Lab(), vips_LabQ2LabS(), vips_rad2float(). * * Returns: 0 on success, -1 on error. */ int vips_LabQ2Lab(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("LabQ2Lab", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/LabQ2LabS.c000066400000000000000000000063171454007373500200570ustar00rootroot00000000000000/* LabQ2LabS * * 17/11/93 JC * - adapted from im_LabQ2LabS() * 16/11/94 JC * - uses new im_wrap_oneonebuf() fn * 9/2/95 JC * - new im_wrapone function * 2/11/09 * - gtkdoc * 21/9/12 * - redo as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include "pcolour.h" typedef VipsColourCode VipsLabQ2LabS; typedef VipsColourCodeClass VipsLabQ2LabSClass; G_DEFINE_TYPE(VipsLabQ2LabS, vips_LabQ2LabS, VIPS_TYPE_COLOUR_CODE); /* CONVERT n pels from packed 32bit Lab to signed short. */ static void vips_LabQ2LabS_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { unsigned char *restrict p = (unsigned char *) in[0]; signed short *restrict q = (signed short *) out; int i; unsigned char ext; signed short l, a, b; for (i = 0; i < width; i++) { /* Get most significant 8 bits of lab. */ l = p[0] << 7; a = p[1] << 8; b = p[2] << 8; /* Get x-tra bits. */ ext = p[3]; p += 4; /* Shift and mask in to lab. */ l |= (unsigned char) (ext & 0xc0) >> 1; a |= (ext & 0x38) << 2; b |= (ext & 0x7) << 5; /* Write! */ q[0] = l; q[1] = a; q[2] = b; q += 3; } } static void vips_LabQ2LabS_class_init(VipsLabQ2LabSClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); object_class->nickname = "LabQ2LabS"; object_class->description = _("unpack a LabQ image to short Lab"); colour_class->process_line = vips_LabQ2LabS_line; } static void vips_LabQ2LabS_init(VipsLabQ2LabS *LabQ2LabS) { VipsColour *colour = VIPS_COLOUR(LabQ2LabS); VipsColourCode *code = VIPS_COLOUR_CODE(LabQ2LabS); colour->coding = VIPS_CODING_NONE; colour->interpretation = VIPS_INTERPRETATION_LABS; colour->format = VIPS_FORMAT_SHORT; colour->bands = 3; code->input_coding = VIPS_CODING_LABQ; } /** * vips_LabQ2LabS: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Unpack a LabQ (#VIPS_CODING_LABQ) image to a three-band short image. * * See also: vips_LabS2LabQ(), vips_LabQ2LabS(), vips_rad2float(). * * Returns: 0 on success, -1 on error. */ int vips_LabQ2LabS(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("LabQ2LabS", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/LabQ2sRGB.c000066400000000000000000000271201454007373500200260ustar00rootroot00000000000000/* Turn Lab 32bit packed format into displayable rgb. Fast, but very * inaccurate: for display only! Note especially that this dithers and will * give different results on different runs. * * The XYZ <-> sRGB transform implemented is this one: * * http://en.wikipedia.org/wiki/SRGB * * 5/11/97 Steve Perry * - adapted from old ip code * 7/11/97 JC * - small tidies, added to VIPS * - LUT build split into separate function * 21/9/12 * - redone as a class * - sRGB only, support for other RGBs is now via lcms * 1/11/12 * - faster and more accurate sRGB <-> XYZ conversion * 6/11/12 * - added a 16-bit path * 11/12/12 * - spot NaN, Inf in XYZ2RGB, they break LUT indexing * - split sRGB <-> XYZ into sRGB <-> scRGB <-> XYZ so we can support * scRGB as a colourspace * 10/3/16 Lovell Fuller * - move vips_col_make_tables_LabQ2sRGB() to first pixel processing */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pcolour.h" typedef VipsColourCode VipsLabQ2sRGB; typedef VipsColourCodeClass VipsLabQ2sRGBClass; G_DEFINE_TYPE(VipsLabQ2sRGB, vips_LabQ2sRGB, VIPS_TYPE_COLOUR_CODE); /* 8-bit linear -> sRGB lut. * * There's an extra element at the end to let us do a +1 for interpolation. */ static int vips_Y2v_8[256 + 1]; /* 8-bit sRGB -> linear lut. */ float vips_v2Y_8[256]; /* 16-bit linear -> sRGB lut. * * There's an extra element at the end to let us do a +1 for interpolation. */ static int vips_Y2v_16[65536 + 1]; /* 16-bit sRGB -> linear lut. */ float vips_v2Y_16[65536]; /* Do our own indexing of the arrays below to make sure we get efficient mults. */ #define INDEX(L, A, B) (L + (A << 6) + (B << 12)) /* A set of LUTs for quick LabQ->sRGB transforms. */ static VipsPel vips_red[64 * 64 * 64]; static VipsPel vips_green[64 * 64 * 64]; static VipsPel vips_blue[64 * 64 * 64]; /* sRGB to scRGB. * * @range is eg. 256 for 8-bit data. */ static int vips_col_sRGB2scRGB(int range, float *lut, int r, int g, int b, float *R, float *G, float *B) { int maxval = range - 1; int i; i = VIPS_CLIP(0, r, maxval); *R = lut[i]; i = VIPS_CLIP(0, g, maxval); *G = lut[i]; i = VIPS_CLIP(0, b, maxval); *B = lut[i]; return 0; } /* Create the sRGB linear and unlinear luts. @range is eg. 256 for 8-bit luts. */ static void calcul_tables(int range, int *Y2v, float *v2Y) { int i; for (i = 0; i < range; i++) { float f = (float) i / (range - 1); float v; if (f <= 0.0031308) v = 12.92 * f; else v = (1.0 + 0.055) * pow(f, 1.0 / 2.4) - 0.055; Y2v[i] = VIPS_RINT((range - 1) * v); } /* Copy the final element. This is used in the piecewise linear * interpolator below. */ Y2v[range] = Y2v[range - 1]; for (i = 0; i < range; i++) { float f = (float) i / (range - 1); if (f <= 0.04045) v2Y[i] = f / 12.92; else v2Y[i] = pow((f + 0.055) / (1 + 0.055), 2.4); } } static void * calcul_tables_8(void *client) { calcul_tables(256, vips_Y2v_8, vips_v2Y_8); return NULL; } void vips_col_make_tables_RGB_8(void) { static GOnce once = G_ONCE_INIT; VIPS_ONCE(&once, calcul_tables_8, NULL); } int vips_col_sRGB2scRGB_8(int r, int g, int b, float *R, float *G, float *B) { vips_col_make_tables_RGB_8(); return vips_col_sRGB2scRGB(256, vips_v2Y_8, r, g, b, R, G, B); } static void * calcul_tables_16(void *client) { calcul_tables(65536, vips_Y2v_16, vips_v2Y_16); return NULL; } void vips_col_make_tables_RGB_16(void) { static GOnce once = G_ONCE_INIT; VIPS_ONCE(&once, calcul_tables_16, NULL); } int vips_col_sRGB2scRGB_16(int r, int g, int b, float *R, float *G, float *B) { vips_col_make_tables_RGB_16(); return vips_col_sRGB2scRGB(65536, vips_v2Y_16, r, g, b, R, G, B); } /* The matrix already includes the D65 channel weighting, so we just scale by * Y. */ #define SCALE (VIPS_D65_Y0) /** * vips_col_scRGB2XYZ: * @R: Input scRGB value * @G: Input scRGB value * @B: Input scRGB value * @X: (out): Return XYZ colour * @Y: (out): Return XYZ colour * @Z: (out): Return XYZ colour * * Turn scRGB into XYZ. * * See also: vips_scRGB2XYZ(). */ int vips_col_scRGB2XYZ(float R, float G, float B, float *X, float *Y, float *Z) { R *= SCALE; G *= SCALE; B *= SCALE; *X = 0.4124 * R + 0.3576 * G + 0.1805 * B; *Y = 0.2126 * R + 0.7152 * G + 0.0722 * B; *Z = 0.0193 * R + 0.1192 * G + 0.9505 * B; return 0; } /** * vips_col_XYZ2scRGB: * @X: Input XYZ value * @Y: Input XYZ value * @Z: Input XYZ value * @R: (out): Return scRGB colour * @G: (out): Return scRGB colour * @B: (out): Return scRGB colour * * Turn XYZ into scRGB. * * See also: vips_XYZ2scRGB(). */ int vips_col_XYZ2scRGB(float X, float Y, float Z, float *R, float *G, float *B) { X /= SCALE; Y /= SCALE; Z /= SCALE; /* Use 6 decimal places of precision for the inverse matrix. */ *R = 3.240625 * X + -1.537208 * Y + -0.498629 * Z; *G = -0.968931 * X + 1.875756 * Y + 0.041518 * Z; *B = 0.055710 * X + -0.204021 * Y + 1.056996 * Z; return 0; } /* Turn scRGB into sRGB. Return og=1 for out of gamut - rgb will contain an * approximation of the right colour. * * Return -1 for NaN. */ static int vips_col_scRGB2sRGB(int range, int *lut, float R, float G, float B, int *r, int *g, int *b, int *og_ret) { int maxval = range - 1; int og; float Yf; int Yi; float v; /* RGB can be NaN. Throw those values out, they will break * our clipping. * * Don't use isnormal(), it is false for 0.0 and for subnormal * numbers. */ if (VIPS_ISNAN(R) || VIPS_ISNAN(G) || VIPS_ISNAN(B)) { *r = 0; *g = 0; *b = 0; return -1; } /* Clip range, set the out-of-gamut flag. */ #define CLIP(L, V, H) \ { \ if ((V) < (L)) { \ (V) = (L); \ og = 1; \ } \ else if ((V) > (H)) { \ (V) = (H); \ og = 1; \ } \ } /* Look up with a float index: interpolate between the nearest two * points. * * The +1 on the index is safe, see above. */ og = 0; Yf = R * maxval; CLIP(0, Yf, maxval); Yi = (int) Yf; v = lut[Yi] + (lut[Yi + 1] - lut[Yi]) * (Yf - Yi); *r = VIPS_RINT(v); Yf = G * maxval; CLIP(0, Yf, maxval); Yi = (int) Yf; v = lut[Yi] + (lut[Yi + 1] - lut[Yi]) * (Yf - Yi); *g = VIPS_RINT(v); Yf = B * maxval; CLIP(0, Yf, maxval); Yi = (int) Yf; v = lut[Yi] + (lut[Yi + 1] - lut[Yi]) * (Yf - Yi); *b = VIPS_RINT(v); if (og_ret) *og_ret = og; return 0; } int vips_col_scRGB2sRGB_8(float R, float G, float B, int *r, int *g, int *b, int *og) { vips_col_make_tables_RGB_8(); return vips_col_scRGB2sRGB(256, vips_Y2v_8, R, G, B, r, g, b, og); } int vips_col_scRGB2sRGB_16(float R, float G, float B, int *r, int *g, int *b, int *og) { vips_col_make_tables_RGB_16(); return vips_col_scRGB2sRGB(65536, vips_Y2v_16, R, G, B, r, g, b, og); } /* Turn scRGB into BW. Return or=1 for out of gamut - g will contain an * approximation of the right colour. * * Return -1 for NaN. */ static int vips_col_scRGB2BW(int range, int *lut, float R, float G, float B, int *g, int *og_ret) { int maxval = range - 1; float Y; int og; float Yf; int Yi; float v; /* The usual ratio. We do this in linear space before we gamma. */ Y = 0.2 * R + 0.7 * G + 0.1 * B; /* Y can be Nan. Throw those values out, they will break * our clipping. */ if (VIPS_ISNAN(Y)) { *g = 0; return -1; } /* Look up with a float index: interpolate between the nearest two * points. * * The +1 on the index is safe, see above. */ og = 0; Yf = Y * maxval; CLIP(0, Yf, maxval); Yi = (int) Yf; v = lut[Yi] + (lut[Yi + 1] - lut[Yi]) * (Yf - Yi); *g = VIPS_RINT(v); if (og_ret) *og_ret = og; return 0; } int vips_col_scRGB2BW_16(float R, float G, float B, int *g, int *og) { vips_col_make_tables_RGB_16(); return vips_col_scRGB2BW(65536, vips_Y2v_16, R, G, B, g, og); } int vips_col_scRGB2BW_8(float R, float G, float B, int *g, int *og) { vips_col_make_tables_RGB_8(); return vips_col_scRGB2BW(256, vips_Y2v_8, R, G, B, g, og); } /* Build Lab->disp dither tables. */ static void * build_tables(void *client) { int l, a, b; int t; for (l = 0; l < 64; l++) { for (a = 0; a < 64; a++) { for (b = 0; b < 64; b++) { /* Scale to lab space. */ float L = (l << 2) * (100.0 / 256.0); float A = (signed char) (a << 2); float B = (signed char) (b << 2); float X, Y, Z; float Rf, Gf, Bf; int rb, gb, bb; vips_col_Lab2XYZ(L, A, B, &X, &Y, &Z); vips_col_XYZ2scRGB(X, Y, Z, &Rf, &Gf, &Bf); vips_col_scRGB2sRGB_8(Rf, Gf, Bf, &rb, &gb, &bb, NULL); t = INDEX(l, a, b); vips_red[t] = rb; vips_green[t] = gb; vips_blue[t] = bb; } } } return NULL; } static void vips_col_make_tables_LabQ2sRGB(void) { static GOnce once = G_ONCE_INIT; VIPS_ONCE(&once, build_tables, NULL); } /* Process a buffer of data. */ static void vips_LabQ2sRGB_line(VipsColour *colour, VipsPel *q, VipsPel **in, int width) { unsigned char *p = (unsigned char *) in[0]; int i, t; /* Current error. */ int le = 0; int ae = 0; int be = 0; vips_col_make_tables_LabQ2sRGB(); for (i = 0; i < width; i++) { /* Get colour, add in error from previous pixel. */ int L = p[0] + le; int A = (signed char) p[1] + ae; int B = (signed char) p[2] + be; p += 4; /* Look out for overflow. */ L = VIPS_MIN(255, L); A = VIPS_MIN(127, A); B = VIPS_MIN(127, B); /* Find new quant error. This will always be +ve. */ le = L & 3; ae = A & 3; be = B & 3; /* Scale to 0-63. */ L = (L >> 2) & 63; A = (A >> 2) & 63; B = (B >> 2) & 63; /* Convert to RGB. */ t = INDEX(L, A, B); q[0] = vips_red[t]; q[1] = vips_green[t]; q[2] = vips_blue[t]; q += 3; } } static void vips_LabQ2sRGB_class_init(VipsLabQ2sRGBClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); object_class->nickname = "LabQ2sRGB"; object_class->description = _("convert a LabQ image to sRGB"); colour_class->process_line = vips_LabQ2sRGB_line; } static void vips_LabQ2sRGB_init(VipsLabQ2sRGB *LabQ2sRGB) { VipsColour *colour = VIPS_COLOUR(LabQ2sRGB); VipsColourCode *code = VIPS_COLOUR_CODE(LabQ2sRGB); colour->coding = VIPS_CODING_NONE; colour->interpretation = VIPS_INTERPRETATION_sRGB; colour->format = VIPS_FORMAT_UCHAR; colour->bands = 3; code->input_coding = VIPS_CODING_LABQ; } /** * vips_LabQ2sRGB: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Unpack a LabQ (#VIPS_CODING_LABQ) image to a three-band short image. * * See also: vips_LabS2LabQ(), vips_LabQ2sRGB(), vips_rad2float(). * * Returns: 0 on success, -1 on error. */ int vips_LabQ2sRGB(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("LabQ2sRGB", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/LabS2Lab.c000066400000000000000000000054231454007373500177330ustar00rootroot00000000000000/* LabS2Lab() * * 12/12/02 JC * - adapted from im_LabS2LabQ() * 2/11/09 * - gtkdoc, cleanup */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include "pcolour.h" typedef VipsColourCode VipsLabS2Lab; typedef VipsColourCodeClass VipsLabS2LabClass; G_DEFINE_TYPE(VipsLabS2Lab, vips_LabS2Lab, VIPS_TYPE_COLOUR_CODE); /* Convert n pels from signed short to Lab. */ static void vips_LabS2Lab_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { signed short *p = (signed short *) in[0]; float *q = (float *) out; int i; for (i = 0; i < width; i++) { q[0] = p[0] / (32767.0 / 100.0); q[1] = p[1] / (32768.0 / 128.0); q[2] = p[2] / (32768.0 / 128.0); p += 3; q += 3; } } static void vips_LabS2Lab_class_init(VipsLabS2LabClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); object_class->nickname = "LabS2Lab"; object_class->description = _("transform signed short Lab to float"); colour_class->process_line = vips_LabS2Lab_line; } static void vips_LabS2Lab_init(VipsLabS2Lab *LabS2Lab) { VipsColour *colour = VIPS_COLOUR(LabS2Lab); VipsColourCode *code = VIPS_COLOUR_CODE(LabS2Lab); colour->interpretation = VIPS_INTERPRETATION_LAB; colour->format = VIPS_FORMAT_FLOAT; colour->input_bands = 3; colour->bands = 3; code->input_coding = VIPS_CODING_NONE; code->input_format = VIPS_FORMAT_SHORT; } /** * vips_LabS2Lab: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Convert a LabS three-band signed short image to a three-band float image. * * See also: vips_LabS2Lab(). * * Returns: 0 on success, -1 on error. */ int vips_LabS2Lab(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("LabS2Lab", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/LabS2LabQ.c000066400000000000000000000071071454007373500200550ustar00rootroot00000000000000/* LabS2LabQ() * * 17/11/93 JC * - adapted from im_LabS2LabQ() * 16/11/94 JC * - adapted to new im_wrap_oneonebuf() function * 15/6/95 JC * - oops! rounding was broken * 6/6/95 JC * - added round-to-nearest * - somewhat slower ... * 21/12/99 JC * - a/b ==0 rounding was broken * 2/11/09 * - gtkdoc, cleanup * 21/9/12 * - redo as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include "pcolour.h" typedef VipsColourCode VipsLabS2LabQ; typedef VipsColourCodeClass VipsLabS2LabQClass; G_DEFINE_TYPE(VipsLabS2LabQ, vips_LabS2LabQ, VIPS_TYPE_COLOUR_CODE); /* Convert n pels from signed short to IM_CODING_LABQ. */ static void vips_LabS2LabQ_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { signed short *p = (signed short *) in[0]; unsigned char *q = (unsigned char *) out; int i; for (i = 0; i < width; i++) { int l, a, b; unsigned char ext; /* Get LAB, rounding to 10, 11, 11. */ l = p[0] + 16; l = VIPS_CLIP(0, l, 32767); l >>= 5; /* Make sure we round -ves in the right direction! */ a = p[1]; if (a >= 0) a += 16; else a -= 16; a = VIPS_CLIP(-32768, a, 32767); a >>= 5; b = p[2]; if (b >= 0) b += 16; else b -= 16; b = VIPS_CLIP(-32768, b, 32767); b >>= 5; p += 3; /* Extract top 8 bits. */ q[0] = l >> 2; q[1] = a >> 3; q[2] = b >> 3; /* Form extension byte. */ ext = (l << 6) & 0xc0; ext |= (a << 3) & 0x38; ext |= b & 0x7; q[3] = ext; q += 4; } } static void vips_LabS2LabQ_class_init(VipsLabS2LabQClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); object_class->nickname = "LabS2LabQ"; object_class->description = _("transform short Lab to LabQ coding"); colour_class->process_line = vips_LabS2LabQ_line; } static void vips_LabS2LabQ_init(VipsLabS2LabQ *LabS2LabQ) { VipsColour *colour = VIPS_COLOUR(LabS2LabQ); VipsColourCode *code = VIPS_COLOUR_CODE(LabS2LabQ); colour->coding = VIPS_CODING_LABQ; colour->interpretation = VIPS_INTERPRETATION_LABQ; colour->format = VIPS_FORMAT_UCHAR; colour->input_bands = 3; colour->bands = 4; code->input_coding = VIPS_CODING_NONE; code->input_format = VIPS_FORMAT_SHORT; } /** * vips_LabS2LabQ: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Convert a LabS three-band signed short image to LabQ * * See also: vips_LabQ2LabS(). * * Returns: 0 on success, -1 on error. */ int vips_LabS2LabQ(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("LabS2LabQ", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/UCS2LCh.c000066400000000000000000000131741454007373500175160ustar00rootroot00000000000000/* Turn CMC to LCh * * 15/11/94 JC * - error messages added * - memory leak fixed * 16/11/94 JC * - uses im_wrap_oneonebuf() now * 2/11/09 * - gtkdoc * 30/11/09 * - argh, im_col_make_tables_CMC(); missing, thanks Peter * 19/9/12 * - redone as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pcolour.h" /* Arrays for lookup tables for the inverse function. */ static float LI[1001]; static float CI[3001]; static float hI[101][361]; typedef VipsColourTransform VipsCMC2LCh; typedef VipsColourTransformClass VipsCMC2LChClass; G_DEFINE_TYPE(VipsCMC2LCh, vips_CMC2LCh, VIPS_TYPE_COLOUR_TRANSFORM); /* Generate LI (inverse) tables. */ static void make_LI(void) { int i; float Ll[1001]; for (i = 0; i < 1001; i++) Ll[i] = vips_col_L2Lcmc(i / 10.0); for (i = 0; i < 1001; i++) { int j; /* Must be 1000, since j will be +1 on exit. */ for (j = 0; j < 1000 && Ll[j] <= i / 10.0; j++) ; LI[i] = (j - 1) / 10.0 + (i / 10.0 - Ll[j - 1]) / ((Ll[j] - Ll[j - 1]) * 10.0); } } /* Generate Ccmc table. */ static void make_CI(void) { int i; float Cl[3001]; for (i = 0; i < 3001; i++) Cl[i] = vips_col_C2Ccmc(i / 10.0); for (i = 0; i < 3001; i++) { int j; /* Must be 3000, since j will be +1 on exit. */ for (j = 0; j < 3000 && Cl[j] <= i / 10.0; j++) ; CI[i] = (j - 1) / 10.0 + (i / 10.0 - Cl[j - 1]) / ((Cl[j] - Cl[j - 1]) * 10.0); } } /* The difficult one: hcmc. */ static void make_hI(void) { int i, j; float hl[101][361]; for (i = 0; i < 361; i++) for (j = 0; j < 101; j++) hl[j][i] = vips_col_Ch2hcmc(j * 2.0, i); for (j = 0; j < 101; j++) { for (i = 0; i < 361; i++) { int k; for (k = 1; k < 360 && hl[j][k] <= i; k++) ; hI[j][i] = k - 1 + (i - hl[j][k - 1]) / (hl[j][k] - hl[j][k - 1]); } } } /** * vips_col_Lcmc2L: * @Lcmc: L cmc * * Calculate L from Lcmc using a table. Call vips_col_make_tables_CMC() at * least once before using this function. * * Returns: L* */ float vips_col_Lcmc2L(float Lcmc) { int known; known = VIPS_FLOOR(Lcmc * 10.0); known = VIPS_CLIP(0, known, 999); return LI[known] + (LI[known + 1] - LI[known]) * (Lcmc * 10.0 - known); } /** * vips_col_Ccmc2C: * @Ccmc: Ccmc * * Calculate C from Ccmc using a table. * Call vips_col_make_tables_CMC() at * least once before using this function. * * Returns: C. */ float vips_col_Ccmc2C(float Ccmc) { int known; known = VIPS_FLOOR(Ccmc * 10.0); known = VIPS_CLIP(0, known, 2999); return CI[known] + (CI[known + 1] - CI[known]) * (Ccmc * 10.0 - known); } /** * vips_col_Chcmc2h: * @C: Chroma * @hcmc: Hue cmc (degrees) * * Calculate h from C and hcmc, using a table. * Call vips_col_make_tables_CMC() at * least once before using this function. * * Returns: h. */ float vips_col_Chcmc2h(float C, float hcmc) { int r; int known; /* Which row of the table? */ r = (int) ((C + 1.0) / 2.0); r = VIPS_CLIP(0, r, 99); known = VIPS_FLOOR(hcmc); known = VIPS_CLIP(0, known, 359); return hI[r][known] + (hI[r][(known + 1) % 360] - hI[r][known]) * (hcmc - known); } static void * tables_init(void *client) { make_LI(); make_CI(); make_hI(); return NULL; } /** * vips_col_make_tables_CMC: * * Make the lookup tables for cmc. */ void vips_col_make_tables_CMC(void) { static GOnce once = G_ONCE_INIT; VIPS_ONCE(&once, tables_init, NULL); } /* Process a buffer of data. */ static void vips_CMC2LCh_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { float *p = (float *) in[0]; float *q = (float *) out; int x; for (x = 0; x < width; x++) { float Lcmc = p[0]; float Ccmc = p[1]; float hcmc = p[2]; /* Turn from CMC. */ float C = vips_col_Ccmc2C(Ccmc); float h = vips_col_Chcmc2h(C, hcmc); float L = vips_col_Lcmc2L(Lcmc); p += 3; q[0] = L; q[1] = C; q[2] = h; q += 3; } } static void vips_CMC2LCh_class_init(VipsCMC2LChClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); object_class->nickname = "CMC2LCh"; object_class->description = _("transform LCh to CMC"); colour_class->process_line = vips_CMC2LCh_line; } static void vips_CMC2LCh_init(VipsCMC2LCh *CMC2LCh) { VipsColour *colour = VIPS_COLOUR(CMC2LCh); vips_col_make_tables_CMC(); colour->interpretation = VIPS_INTERPRETATION_LCH; } /** * vips_CMC2LCh: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Turn LCh to CMC. * * See also: vips_LCh2CMC(). * * Returns: 0 on success, -1 on error */ int vips_CMC2LCh(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("CMC2LCh", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/XYZ2CMYK.c000066400000000000000000000127041454007373500176510ustar00rootroot00000000000000/* Use lcms to move from XYZ to CMYK, if we can. This needs a working * vips_icc_export. * * 21/12/18 * - from CMYK2XYZ.c * 09/01/2019 * - add CMYK <-> XYZ conversions if no lcms2 has been found */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pcolour.h" #include "profiles.h" #ifdef HAVE_LCMS2 typedef struct _VipsXYZ2CMYK { VipsOperation parent_instance; VipsImage *in; VipsImage *out; } VipsXYZ2CMYK; typedef VipsColourCodeClass VipsXYZ2CMYKClass; G_DEFINE_TYPE(VipsXYZ2CMYK, vips_XYZ2CMYK, VIPS_TYPE_OPERATION); /* Our actual processing, as a VipsColourTransformFn. */ static int vips_XYZ2CMYK_process(VipsImage *in, VipsImage **out, ...) { return vips_icc_export(in, out, "output_profile", "cmyk", "pcs", VIPS_PCS_XYZ, NULL); } static int vips_XYZ2CMYK_build(VipsObject *object) { VipsXYZ2CMYK *XYZ2CMYK = (VipsXYZ2CMYK *) object; VipsImage *out; VipsImage *t; if (VIPS_OBJECT_CLASS(vips_XYZ2CMYK_parent_class)->build(object)) return -1; out = vips_image_new(); g_object_set(object, "out", out, NULL); if (vips__colourspace_process_n("XYZ2CMYK", XYZ2CMYK->in, &t, 3, vips_XYZ2CMYK_process)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } static void vips_XYZ2CMYK_class_init(VipsXYZ2CMYKClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "XYZ2CMYK"; object_class->description = _("transform XYZ to CMYK"); object_class->build = vips_XYZ2CMYK_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsXYZ2CMYK, in)); VIPS_ARG_IMAGE(class, "out", 100, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsXYZ2CMYK, out)); } static void vips_XYZ2CMYK_init(VipsXYZ2CMYK *XYZ2CMYK) { } #else /*!HAVE_LCMS2*/ typedef VipsColourCode VipsXYZ2CMYK; typedef VipsColourCodeClass VipsXYZ2CMYKClass; G_DEFINE_TYPE(VipsXYZ2CMYK, vips_XYZ2CMYK, VIPS_TYPE_COLOUR_CODE); static void vips_XYZ2CMYK_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { float *p = (float *) in[0]; unsigned char *q = (unsigned char *) out; const float epsilon = 0.00001; int i; for (i = 0; i < width; i++) { float r = p[0] / VIPS_D65_X0; float g = p[1] / VIPS_D65_Y0; float b = p[2] / VIPS_D65_Z0; float c = 1.0 - r; float m = 1.0 - g; float y = 1.0 - b; float k = VIPS_MIN(c, VIPS_MIN(m, y)); float ik = 1.0 - k; if (ik < epsilon) { q[0] = 255; q[1] = 255; q[2] = 255; q[3] = 255; } else { q[0] = VIPS_CLIP(0, 255 * (c - k) / ik, 255); q[1] = VIPS_CLIP(0, 255 * (m - k) / ik, 255); q[2] = VIPS_CLIP(0, 255 * (y - k) / ik, 255); q[3] = VIPS_CLIP(0, 255 * k, 255); } p += 3; q += 4; } } static void vips_XYZ2CMYK_class_init(VipsXYZ2CMYKClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "XYZ2CMYK"; object_class->description = _("transform XYZ to CMYK"); colour_class->process_line = vips_XYZ2CMYK_line; } static void vips_XYZ2CMYK_init(VipsXYZ2CMYK *XYZ2CMYK) { VipsColour *colour = VIPS_COLOUR(XYZ2CMYK); VipsColourCode *code = VIPS_COLOUR_CODE(XYZ2CMYK); colour->interpretation = VIPS_INTERPRETATION_CMYK; colour->format = VIPS_FORMAT_UCHAR; colour->bands = 4; colour->input_bands = 3; code->input_coding = VIPS_CODING_NONE; code->input_format = VIPS_FORMAT_FLOAT; code->input_interpretation = VIPS_INTERPRETATION_XYZ; } #endif /*HAVE_LCMS2*/ /** * vips_XYZ2CMYK: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Turn XYZ to CMYK. * * Conversion is from D65 XYZ with relative intent. If you need more control * over the process, use vips_icc_export() instead. * * Returns: 0 on success, -1 on error */ int vips_XYZ2CMYK(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("XYZ2CMYK", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/XYZ2Lab.c000066400000000000000000000143211454007373500176010ustar00rootroot00000000000000/* Turn XYZ to Lab colourspace. * * Modified: * 16/11/94 JC * - uses im_wrapone() * - in-line conversion * 27/1/03 JC * - swapped cbrt() for pow(), more portable * 12/11/04 * - swapped pow() for cbrt() again, pow() is insanely slow on win32 * - added a configure test for cbrt(). * 23/11/04 * - use a large LUT instead, about 5x faster * 23/11/06 * - ahem, build the LUT outside the eval thread * 2/11/09 * - gtkdoc * 3/8/11 * - fix a race in the table build * 19/9/12 * - redone as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pcolour.h" #ifndef HAVE_CBRT #define cbrt(X) pow((X), 1.0 / 3.0) #endif /*!HAVE_CBRT*/ /* Lookup table size. */ #define QUANT_ELEMENTS (100000) static float cbrt_table[QUANT_ELEMENTS]; typedef struct _VipsXYZ2Lab { VipsColourTransform parent_instance; /* The colour temperature -- default to D65. */ VipsArea *temp; /* Broken out as xyz. */ double X0; double Y0; double Z0; } VipsXYZ2Lab; typedef VipsColourTransformClass VipsXYZ2LabClass; G_DEFINE_TYPE(VipsXYZ2Lab, vips_XYZ2Lab, VIPS_TYPE_COLOUR_TRANSFORM); static GOnce table_init_once = G_ONCE_INIT; static void * table_init(void *client) { int i; for (i = 0; i < QUANT_ELEMENTS; i++) { float Y = (double) i / QUANT_ELEMENTS; if (Y < 0.008856) cbrt_table[i] = 7.787 * Y + (16.0 / 116.0); else cbrt_table[i] = cbrt(Y); } return NULL; } static void vips_col_XYZ2Lab_helper(VipsXYZ2Lab *XYZ2Lab, float X, float Y, float Z, float *L, float *a, float *b) { float nX, nY, nZ; int i; float f; float cbx, cby, cbz; nX = QUANT_ELEMENTS * X / XYZ2Lab->X0; nY = QUANT_ELEMENTS * Y / XYZ2Lab->Y0; nZ = QUANT_ELEMENTS * Z / XYZ2Lab->Z0; /* CLIP is much faster than FCLIP, and we want an int result. */ i = VIPS_CLIP(0, (int) nX, QUANT_ELEMENTS - 2); f = nX - i; cbx = cbrt_table[i] + f * (cbrt_table[i + 1] - cbrt_table[i]); i = VIPS_CLIP(0, (int) nY, QUANT_ELEMENTS - 2); f = nY - i; cby = cbrt_table[i] + f * (cbrt_table[i + 1] - cbrt_table[i]); i = VIPS_CLIP(0, (int) nZ, QUANT_ELEMENTS - 2); f = nZ - i; cbz = cbrt_table[i] + f * (cbrt_table[i + 1] - cbrt_table[i]); *L = 116.0 * cby - 16.0; *a = 500.0 * (cbx - cby); *b = 200.0 * (cby - cbz); } /* Process a buffer of data. */ VIPS_TARGET_CLONES("default,avx") static void vips_XYZ2Lab_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { VipsXYZ2Lab *XYZ2Lab = (VipsXYZ2Lab *) colour; float *p = (float *) in[0]; float *q = (float *) out; int x; VIPS_ONCE(&table_init_once, table_init, NULL); for (x = 0; x < width; x++) { float X, Y, Z; float L, a, b; X = p[0]; Y = p[1]; Z = p[2]; p += 3; vips_col_XYZ2Lab_helper(XYZ2Lab, X, Y, Z, &L, &a, &b); q[0] = L; q[1] = a; q[2] = b; q += 3; } } /** * vips_col_XYZ2Lab: * @X: Input CIE XYZ colour * @Y: Input CIE XYZ colour * @Z: Input CIE XYZ colour * @L: (out): Return CIE Lab value * @a: (out): Return CIE Lab value * @b: (out): Return CIE Lab value * * Calculate XYZ from Lab, D65. * * See also: vips_XYZ2Lab(). */ void vips_col_XYZ2Lab(float X, float Y, float Z, float *L, float *a, float *b) { VipsXYZ2Lab XYZ2Lab; VIPS_ONCE(&table_init_once, table_init, NULL); XYZ2Lab.X0 = VIPS_D65_X0; XYZ2Lab.Y0 = VIPS_D65_Y0; XYZ2Lab.Z0 = VIPS_D65_Z0; vips_col_XYZ2Lab_helper(&XYZ2Lab, X, Y, Z, L, a, b); } static int vips_XYZ2Lab_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsXYZ2Lab *XYZ2Lab = (VipsXYZ2Lab *) object; if (XYZ2Lab->temp) { if (vips_check_vector_length(class->nickname, XYZ2Lab->temp->n, 3)) return -1; XYZ2Lab->X0 = ((double *) XYZ2Lab->temp->data)[0]; XYZ2Lab->Y0 = ((double *) XYZ2Lab->temp->data)[1]; XYZ2Lab->Z0 = ((double *) XYZ2Lab->temp->data)[2]; } if (VIPS_OBJECT_CLASS(vips_XYZ2Lab_parent_class)->build(object)) return -1; return 0; } static void vips_XYZ2Lab_class_init(VipsXYZ2LabClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "XYZ2Lab"; object_class->description = _("transform XYZ to Lab"); object_class->build = vips_XYZ2Lab_build; colour_class->process_line = vips_XYZ2Lab_line; VIPS_ARG_BOXED(class, "temp", 110, _("Temperature"), _("Colour temperature"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsXYZ2Lab, temp), VIPS_TYPE_ARRAY_DOUBLE); } static void vips_XYZ2Lab_init(VipsXYZ2Lab *XYZ2Lab) { VipsColour *colour = VIPS_COLOUR(XYZ2Lab); XYZ2Lab->X0 = VIPS_D65_X0; XYZ2Lab->Y0 = VIPS_D65_Y0; XYZ2Lab->Z0 = VIPS_D65_Z0; colour->interpretation = VIPS_INTERPRETATION_LAB; } /** * vips_XYZ2Lab: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @temp: #VipsArrayDouble, colour temperature * * Turn XYZ to Lab, optionally specifying the colour temperature. @temp * defaults to D65. * * Returns: 0 on success, -1 on error. */ int vips_XYZ2Lab(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("XYZ2Lab", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/XYZ2Yxy.c000066400000000000000000000050511454007373500176740ustar00rootroot00000000000000/* Turn XYZ to Yxy colourspace. * * Modified: * 29/5/02 JC * - from lab2xyz * 2/11/09 * - gtkdoc * - cleanups * 20/9/12 * redo as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pcolour.h" typedef VipsColourTransform VipsXYZ2Yxy; typedef VipsColourTransformClass VipsXYZ2YxyClass; G_DEFINE_TYPE(VipsXYZ2Yxy, vips_XYZ2Yxy, VIPS_TYPE_COLOUR_TRANSFORM); static void vips_XYZ2Yxy_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { float *restrict p = (float *) in[0]; float *restrict q = (float *) out; int i; for (i = 0; i < width; i++) { float X = p[0]; float Y = p[1]; float Z = p[2]; double total = X + Y + Z; float x, y; p += 3; x = X / total; y = Y / total; q[0] = Y; q[1] = x; q[2] = y; q += 3; } } static void vips_XYZ2Yxy_class_init(VipsXYZ2YxyClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); object_class->nickname = "XYZ2Yxy"; object_class->description = _("transform XYZ to Yxy"); colour_class->process_line = vips_XYZ2Yxy_line; } static void vips_XYZ2Yxy_init(VipsXYZ2Yxy *XYZ2Yxy) { VipsColour *colour = VIPS_COLOUR(XYZ2Yxy); colour->interpretation = VIPS_INTERPRETATION_YXY; } /** * vips_XYZ2Yxy: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Turn XYZ to Yxy. * * Returns: 0 on success, -1 on error */ int vips_XYZ2Yxy(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("XYZ2Yxy", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/XYZ2scRGB.c000066400000000000000000000122271454007373500200460ustar00rootroot00000000000000/* Turn XYZ to scRGB colourspace. * * 11/12/12 * - from Yxy2XYZ.c * 1/7/13 * - remove any ICC profile * 25/11/14 * - oh argh, revert the above */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pcolour.h" /* We can't use VipsColourCode as our parent class. We want to handle * alpha ourselves. */ typedef struct _VipsXYZ2scRGB { VipsOperation parent_instance; VipsImage *in; VipsImage *out; } VipsXYZ2scRGB; typedef VipsOperationClass VipsXYZ2scRGBClass; G_DEFINE_TYPE(VipsXYZ2scRGB, vips_XYZ2scRGB, VIPS_TYPE_OPERATION); /* We used to have the comment: * We've converted to sRGB without a profile. We must remove any ICC * profile left over from import or there will be a mismatch between * pixel values and the attached profile. But this isn't right, we often call things sRGB that we know are not true sRGB, for example: vips sharpen k2.jpg x.jpg sharpen will treat k2 as being in sRGB space even if that image has a profile. If we drop the profile, x.jpg is suddenly untagged. */ static void vips_XYZ2scRGB_line(float *restrict q, float *restrict p, int extra_bands, int width) { int i, j; for (i = 0; i < width; i++) { const float X = p[0]; const float Y = p[1]; const float Z = p[2]; float R, G, B; p += 3; vips_col_XYZ2scRGB(X, Y, Z, &R, &G, &B); q[0] = R; q[1] = G; q[2] = B; q += 3; for (j = 0; j < extra_bands; j++) q[j] = VIPS_CLIP(0, p[j] / 255.0, 1.0); p += extra_bands; q += extra_bands; } } static int vips_XYZ2scRGB_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsRect *r = &out_region->valid; VipsImage *in = ir->im; int y; if (vips_region_prepare(ir, r)) return -1; VIPS_GATE_START("vips_XYZ2scRGB: work"); for (y = 0; y < r->height; y++) { float *p = (float *) VIPS_REGION_ADDR(ir, r->left, r->top + y); float *q = (float *) VIPS_REGION_ADDR(out_region, r->left, r->top + y); vips_XYZ2scRGB_line(q, p, in->Bands - 3, r->width); } VIPS_GATE_STOP("vips_XYZ2scRGB: work"); return 0; } static int vips_XYZ2scRGB_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsXYZ2scRGB *XYZ2scRGB = (VipsXYZ2scRGB *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); VipsImage *in; VipsImage *out; if (VIPS_OBJECT_CLASS(vips_XYZ2scRGB_parent_class)->build(object)) return -1; in = XYZ2scRGB->in; if (vips_check_bands_atleast(class->nickname, in, 3)) return -1; if (vips_cast_float(in, &t[0], NULL)) return -1; in = t[0]; out = vips_image_new(); if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_THINSTRIP, in, NULL)) { g_object_unref(out); return -1; } out->Type = VIPS_INTERPRETATION_scRGB; out->BandFmt = VIPS_FORMAT_FLOAT; if (vips_image_generate(out, vips_start_one, vips_XYZ2scRGB_gen, vips_stop_one, in, XYZ2scRGB)) { g_object_unref(out); return -1; } g_object_set(object, "out", out, NULL); return 0; } static void vips_XYZ2scRGB_class_init(VipsXYZ2scRGBClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "XYZ2scRGB"; object_class->description = _("transform XYZ to scRGB"); object_class->build = vips_XYZ2scRGB_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsXYZ2scRGB, in)); VIPS_ARG_IMAGE(class, "out", 100, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsXYZ2scRGB, out)); } static void vips_XYZ2scRGB_init(VipsXYZ2scRGB *XYZ2scRGB) { } /** * vips_XYZ2scRGB: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Turn XYZ to scRGB. * * Returns: 0 on success, -1 on error */ int vips_XYZ2scRGB(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("XYZ2scRGB", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/Yxy2XYZ.c000066400000000000000000000052471454007373500177030ustar00rootroot00000000000000/* Turn Yxy to XYZ colourspace. * * Modified: * 29/5/02 JC * - from lab2xyz * 2/11/09 * - gtkdoc * - cleanups * 20/9/12 * - redo as a class * 29/8/19 * - avoid /0 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pcolour.h" typedef VipsColourTransform VipsYxy2XYZ; typedef VipsColourTransformClass VipsYxy2XYZClass; G_DEFINE_TYPE(VipsYxy2XYZ, vips_Yxy2XYZ, VIPS_TYPE_COLOUR_TRANSFORM); static void vips_Yxy2XYZ_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { float *restrict p = (float *) in[0]; float *restrict q = (float *) out; int i; for (i = 0; i < width; i++) { float Y = p[0]; float x = p[1]; float y = p[2]; float X, Z; if (x == 0.0 || y == 0.0) { X = 0.0; Z = 0.0; } else { double total; total = Y / y; X = x * total; Z = (X - x * X - x * Y) / x; } q[0] = X; q[1] = Y; q[2] = Z; p += 3; q += 3; } } static void vips_Yxy2XYZ_class_init(VipsYxy2XYZClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); object_class->nickname = "Yxy2XYZ"; object_class->description = _("transform Yxy to XYZ"); colour_class->process_line = vips_Yxy2XYZ_line; } static void vips_Yxy2XYZ_init(VipsYxy2XYZ *Yxy2XYZ) { VipsColour *colour = VIPS_COLOUR(Yxy2XYZ); colour->interpretation = VIPS_INTERPRETATION_XYZ; } /** * vips_Yxy2XYZ: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Turn XYZ to Yxy. * * Returns: 0 on success, -1 on error */ int vips_Yxy2XYZ(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("Yxy2XYZ", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/colour.c000066400000000000000000000501441454007373500177140ustar00rootroot00000000000000/* base class for all colour operations */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pcolour.h" /** * SECTION: colour * @short_description: colour operators * @stability: Stable * @see_also: arithmetic * @include: vips/vips.h * * These operators let you transform coordinates and images between colour * spaces, calculate colour differences, and move * to and from device spaces. * * All operations process colour from the first few bands and pass other bands * through unaltered. This means you can operate on images with alpha channels * safely. If you move to or from 16-bit RGB, any alpha channels are rescaled * for you. * * Radiance images have four 8-bits bands and store 8 bits of R, G and B and * another 8 bits of exponent, common to all channels. They are widely used in * the HDR imaging community. * * The colour functions can be divided into three main groups. First, * functions to transform images between the different colour spaces supported * by VIPS: #VIPS_INTERPRETATION_sRGB, #VIPS_INTERPRETATION_scRGB, * #VIPS_INTERPRETATION_B_W, * #VIPS_INTERPRETATION_XYZ, #VIPS_INTERPRETATION_YXY, * #VIPS_INTERPRETATION_LAB, * #VIPS_INTERPRETATION_LCH, and * #VIPS_INTERPRETATION_CMC. * * There are also a set of minor colourspaces which are one of the above in a * slightly different format: * #VIPS_INTERPRETATION_LAB, #VIPS_INTERPRETATION_LABQ, * #VIPS_INTERPRETATION_LABS, #VIPS_INTERPRETATION_LCH, * #VIPS_INTERPRETATION_RGB16, and #VIPS_INTERPRETATION_GREY16. * * Use vips_colourspace() to move an image to a * target colourspace using the best sequence of colour transform operations. * * Secondly, there are a set of operations for * calculating colour difference metrics. Finally, VIPS wraps LittleCMS and * uses it to provide a set of operations for reading and writing images with * ICC profiles. * * This figure shows how the VIPS colour spaces interconvert: * * * * * * The colour spaces supported by VIPS are: * * * #VIPS_INTERPRETATION_LAB -- CIELAB '76 colourspace with a D65 white. This * uses three floats for each band, and bands have the obvious range. * * There are two * variants, #VIPS_INTERPRETATION_LABQ and #VIPS_INTERPRETATION_LABS, which * use ints to store values. These are less precise, but can be quicker to * store and process. * * #VIPS_INTERPRETATION_LCH is the same, but with a*b* as polar coordinates. * Hue is expressed in degrees. * * * #VIPS_INTERPRETATION_XYZ -- CIE XYZ. This uses three floats. * See #VIPS_D75_X0 and friends for values for the ranges * under various illuminants. * * #VIPS_INTERPRETATION_YXY is the same, but with little x and y. * * * #VIPS_INTERPRETATION_scRGB -- a linear colourspace with the sRGB * primaries. This is useful if you need linear light and don't care * much what the primaries are. * * Linearization is performed with the usual sRGB equations, see below. * * * #VIPS_INTERPRETATION_sRGB -- the standard sRGB colourspace, see: * [wikipedia sRGB](http://en.wikipedia.org/wiki/SRGB). * * This uses three 8-bit values for each of RGB. * * #VIPS_INTERPRETATION_RGB16 is the same, but using three 16-bit values for * RGB. * * #VIPS_INTERPRETATION_HSV is sRGB, but in polar coordinates. * #VIPS_INTERPRETATION_LCH is much better, only use HSV if you have to. * * * #VIPS_INTERPRETATION_B_W -- a monochrome image, roughly G from sRGB. * The grey value is * calculated in #VIPS_INTERPRETATION_scRGB space with the usual 0.2, 0.7, 0.1 * RGB ratios. * * #VIPS_INTERPRETATION_GREY16 is the same, but using 16-bits. * * * #VIPS_INTERPRETATION_CMC -- a colour space based on the CMC(1:1) * colour difference measurement. This is a highly uniform colour space, * much better than CIELAB for expressing small differences. * * The CMC colourspace is described in "Uniform Colour Space Based on the * CMC(l:c) Colour-difference Formula", M R Luo and B Rigg, Journal of the * Society of Dyers and Colourists, vol 102, 1986. Distances in this * colourspace approximate, within 10% or so, differences in the CMC(l:c) * colour difference formula. * * You can calculate metrics like CMC(2:1) by scaling the spaces before * finding differences. * */ /* Areas under curves for Dxx. 2 degree observer. */ /** * VIPS_D93_X0: * * Areas under curves for D93, 2 degree observer. */ /** * VIPS_D75_X0: * * Areas under curves for D75, 2 degree observer. */ /** * VIPS_D65_X0: * * Areas under curves for D65, 2 degree observer. */ /** * VIPS_D55_X0: * * Areas under curves for D55, 2 degree observer. */ /** * VIPS_D50_X0: * * Areas under curves for D50, 2 degree observer. */ /** * VIPS_A_X0: * * Areas under curves for illuminant A (2856K), 2 degree observer. */ /** * VIPS_B_X0: * * Areas under curves for illuminant B (4874K), 2 degree observer. */ /** * VIPS_C_X0: * * Areas under curves for illuminant C (6774K), 2 degree observer. */ /** * VIPS_E_X0: * * Areas under curves for equal energy illuminant E. */ /** * VIPS_D3250_X0: * * Areas under curves for black body at 3250K, 2 degree observer. */ G_DEFINE_ABSTRACT_TYPE(VipsColour, vips_colour, VIPS_TYPE_OPERATION); /* Maximum number of input images -- why not? */ #define MAX_INPUT_IMAGES (64) static int vips_colour_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion **ir = (VipsRegion **) seq; VipsColour *colour = VIPS_COLOUR(b); VipsColourClass *class = VIPS_COLOUR_GET_CLASS(colour); VipsRect *r = &out_region->valid; int i, y; VipsPel *p[MAX_INPUT_IMAGES], *q; /* printf("vips_colour_gen: %s, " "left = %d, top = %d, width = %d, height = %d\n", VIPS_OBJECT_CLASS(class)->nickname, r->left, r->top, r->width, r->height); */ if (vips_reorder_prepare_many(out_region->im, ir, r)) return -1; VIPS_GATE_START("vips_colour_gen: work"); for (y = 0; y < r->height; y++) { for (i = 0; ir[i]; i++) p[i] = VIPS_REGION_ADDR(ir[i], r->left, r->top + y); p[i] = NULL; q = VIPS_REGION_ADDR(out_region, r->left, r->top + y); class->process_line(colour, q, p, r->width); } VIPS_GATE_STOP("vips_colour_gen: work"); VIPS_COUNT_PIXELS(out_region, VIPS_OBJECT_GET_CLASS(colour)->nickname); return 0; } static int vips_colour_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsColour *colour = VIPS_COLOUR(object); VipsImage **in; VipsImage **extra_bands; VipsImage *out; int i; #ifdef DEBUG printf("vips_colour_build: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ if (VIPS_OBJECT_CLASS(vips_colour_parent_class)->build(object)) return -1; if (colour->n > MAX_INPUT_IMAGES) { vips_error(class->nickname, "%s", _("too many input images")); return -1; } for (i = 0; i < colour->n; i++) if (vips_image_pio_input(colour->in[i])) return -1; /* colour->in[] must be NULL-terminated, we can use it as an arg to * vips_start_many(). */ g_assert(!colour->in[colour->n]); in = colour->in; extra_bands = (VipsImage **) vips_object_local_array(object, colour->n); /* If there are more than @input_bands bands, we detach and reattach * after processing. */ if (colour->input_bands > 0) { VipsImage **new_in = (VipsImage **) vips_object_local_array(object, colour->n); for (i = 0; i < colour->n; i++) { if (vips_check_bands_atleast(class->nickname, in[i], colour->input_bands)) return -1; if (in[i]->Bands > colour->input_bands) { if (vips_extract_band(in[i], &new_in[i], 0, "n", colour->input_bands, NULL)) return -1; } else { new_in[i] = in[i]; g_object_ref(new_in[i]); } if (in[i]->Bands > colour->input_bands) if (vips_extract_band(in[i], &extra_bands[i], colour->input_bands, "n", in[i]->Bands - colour->input_bands, NULL)) return -1; } in = new_in; } out = vips_image_new(); if (vips_image_pipeline_array(out, VIPS_DEMAND_STYLE_THINSTRIP, in)) { g_object_unref(out); return -1; } out->Coding = colour->coding; out->Type = colour->interpretation; out->BandFmt = colour->format; out->Bands = colour->bands; if (colour->profile_filename && vips__profile_set(out, colour->profile_filename)) return -1; if (vips_image_generate(out, vips_start_many, vips_colour_gen, vips_stop_many, in, colour)) { g_object_unref(out); return -1; } /* Reattach higher bands, if necessary. If we have more than one input * image, just use the first extra bands. */ for (i = 0; i < colour->n; i++) if (extra_bands[i]) { VipsImage *t1, *t2; /* We can't just reattach the extra bands: they might * be float (for example) and we might be trying to * make a short image. Cast extra to match the body of * the image. */ if (vips_cast(extra_bands[i], &t1, out->BandFmt, NULL)) { g_object_unref(out); return -1; } if (vips_bandjoin2(out, t1, &t2, NULL)) { g_object_unref(t1); g_object_unref(out); return -1; } g_object_unref(out); g_object_unref(t1); out = t2; break; } g_object_set(colour, "out", out, NULL); return 0; } static void vips_colour_class_init(VipsColourClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "colour"; vobject_class->description = _("color operations"); vobject_class->build = vips_colour_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "out", 100, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsColour, out)); } static void vips_colour_init(VipsColour *colour) { colour->coding = VIPS_CODING_NONE; colour->interpretation = VIPS_INTERPRETATION_sRGB; colour->format = VIPS_FORMAT_UCHAR; colour->bands = 3; colour->input_bands = -1; } G_DEFINE_ABSTRACT_TYPE(VipsColourTransform, vips_colour_transform, VIPS_TYPE_COLOUR); static int vips_colour_transform_build(VipsObject *object) { VipsColour *colour = VIPS_COLOUR(object); VipsColourTransform *transform = VIPS_COLOUR_TRANSFORM(object); VipsImage **t = (VipsImage **) vips_object_local_array(object, 1); /* We only process float. */ if (transform->in && transform->in->BandFmt != VIPS_FORMAT_FLOAT) { if (vips_cast_float(transform->in, &t[0], NULL)) return -1; } else { t[0] = transform->in; g_object_ref(t[0]); } /* We always do 3 bands -> 3 bands. */ colour->input_bands = 3; colour->n = 1; colour->in = t; if (VIPS_OBJECT_CLASS(vips_colour_transform_parent_class)->build(object)) return -1; return 0; } static void vips_colour_transform_class_init(VipsColourTransformClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "space"; vobject_class->description = _("color space transformations"); vobject_class->build = vips_colour_transform_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsColourTransform, in)); } static void vips_colour_transform_init(VipsColourTransform *space) { VipsColour *colour = (VipsColour *) space; /* What we write. interpretation should be overwritten in subclass * builds. */ colour->coding = VIPS_CODING_NONE; colour->interpretation = VIPS_INTERPRETATION_LAB; colour->format = VIPS_FORMAT_FLOAT; colour->bands = 3; } G_DEFINE_ABSTRACT_TYPE(VipsColourCode, vips_colour_code, VIPS_TYPE_COLOUR); static int vips_colour_code_build(VipsObject *object) { VipsColour *colour = VIPS_COLOUR(object); VipsColourCode *code = VIPS_COLOUR_CODE(object); VipsColourCodeClass *class = VIPS_COLOUR_CODE_GET_CLASS(object); VipsImage **t = (VipsImage **) vips_object_local_array(object, 6); VipsImage *in; in = code->in; /* If this is a LABQ and the coder wants uncoded, unpack. */ if (in && in->Coding == VIPS_CODING_LABQ && code->input_coding == VIPS_CODING_NONE) { if (vips_LabQ2Lab(in, &t[0], NULL)) return -1; in = t[0]; } if (in && vips_check_coding(VIPS_OBJECT_CLASS(class)->nickname, in, code->input_coding)) return -1; if (in && code->input_coding == VIPS_CODING_NONE && code->input_format != VIPS_FORMAT_NOTSET && in->BandFmt != code->input_format) { if (vips_cast(in, &t[3], code->input_format, NULL)) return -1; in = t[3]; } if (in && code->input_coding == VIPS_CODING_NONE && code->input_interpretation != VIPS_INTERPRETATION_ERROR && in->Type != code->input_interpretation) { if (vips_colourspace(in, &t[4], code->input_interpretation, NULL)) return -1; in = t[4]; } colour->n = 1; colour->in = VIPS_ARRAY(object, 2, VipsImage *); colour->in[0] = in; colour->in[1] = NULL; if (VIPS_OBJECT_CLASS(vips_colour_code_parent_class)->build(object)) return -1; return 0; } static void vips_colour_code_class_init(VipsColourCodeClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "code"; vobject_class->description = _("change color coding"); vobject_class->build = vips_colour_code_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsColourCode, in)); } static void vips_colour_code_init(VipsColourCode *code) { code->input_coding = VIPS_CODING_NONE; code->input_interpretation = VIPS_INTERPRETATION_ERROR; code->input_format = VIPS_FORMAT_NOTSET; } G_DEFINE_ABSTRACT_TYPE(VipsColourDifference, vips_colour_difference, VIPS_TYPE_COLOUR); static int vips_colour_difference_build(VipsObject *object) { VipsColour *colour = VIPS_COLOUR(object); VipsColourDifference *difference = VIPS_COLOUR_DIFFERENCE(object); VipsImage **t; VipsImage *left; VipsImage *right; t = (VipsImage **) vips_object_local_array(object, 12); left = difference->left; right = difference->right; if (left) { if (vips_image_decode(left, &t[0])) return -1; left = t[0]; } if (right) { if (vips_image_decode(right, &t[1])) return -1; right = t[1]; } /* Detach and reattach any extra bands. */ colour->input_bands = 3; if (left && left->Type != difference->interpretation) { if (vips_colourspace(left, &t[6], difference->interpretation, NULL)) return -1; left = t[6]; } if (right && right->Type != difference->interpretation) { if (vips_colourspace(right, &t[7], difference->interpretation, NULL)) return -1; right = t[7]; } /* We only process float. */ if (left && left->BandFmt != VIPS_FORMAT_FLOAT) { if (vips_cast_float(left, &t[8], NULL)) return -1; left = t[8]; } if (right && right->BandFmt != VIPS_FORMAT_FLOAT) { if (vips_cast_float(right, &t[9], NULL)) return -1; right = t[9]; } if (vips__sizealike(left, right, &t[10], &t[11])) return -1; left = t[10]; right = t[11]; colour->n = 2; colour->in = VIPS_ARRAY(object, 3, VipsImage *); colour->in[0] = left; colour->in[1] = right; colour->in[2] = NULL; if (VIPS_OBJECT_CLASS(vips_colour_difference_parent_class)->build(object)) return -1; return 0; } static void vips_colour_difference_class_init(VipsColourDifferenceClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "difference"; vobject_class->description = _("calculate color difference"); vobject_class->build = vips_colour_difference_build; VIPS_ARG_IMAGE(class, "left", 1, _("Left"), _("Left-hand input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsColourDifference, left)); VIPS_ARG_IMAGE(class, "right", 2, _("Right"), _("Right-hand input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsColourDifference, right)); } static void vips_colour_difference_init(VipsColourDifference *difference) { VipsColour *colour = VIPS_COLOUR(difference); colour->coding = VIPS_CODING_NONE; colour->interpretation = VIPS_INTERPRETATION_B_W; colour->format = VIPS_FORMAT_FLOAT; colour->bands = 1; } /* Called from iofuncs to init all operations in this dir. Use a plugin system * instead? */ void vips_colour_operation_init(void) { extern GType vips_colourspace_get_type(void); extern GType vips_Lab2XYZ_get_type(void); extern GType vips_XYZ2Lab_get_type(void); extern GType vips_Lab2LCh_get_type(void); extern GType vips_LCh2Lab_get_type(void); extern GType vips_LCh2CMC_get_type(void); extern GType vips_CMC2LCh_get_type(void); extern GType vips_Yxy2XYZ_get_type(void); extern GType vips_XYZ2Yxy_get_type(void); extern GType vips_LabQ2Lab_get_type(void); extern GType vips_Lab2LabQ_get_type(void); extern GType vips_LabQ2LabS_get_type(void); extern GType vips_LabS2LabQ_get_type(void); extern GType vips_LabS2Lab_get_type(void); extern GType vips_Lab2LabS_get_type(void); extern GType vips_rad2float_get_type(void); extern GType vips_float2rad_get_type(void); extern GType vips_LabQ2sRGB_get_type(void); extern GType vips_XYZ2sRGB_get_type(void); extern GType vips_sRGB2scRGB_get_type(void); extern GType vips_sRGB2HSV_get_type(void); extern GType vips_HSV2sRGB_get_type(void); extern GType vips_scRGB2XYZ_get_type(void); extern GType vips_scRGB2BW_get_type(void); extern GType vips_XYZ2scRGB_get_type(void); extern GType vips_scRGB2sRGB_get_type(void); extern GType vips_CMYK2XYZ_get_type(void); extern GType vips_XYZ2CMYK_get_type(void); extern GType vips_profile_load_get_type(void); #ifdef HAVE_LCMS2 extern GType vips_icc_import_get_type(void); extern GType vips_icc_export_get_type(void); extern GType vips_icc_transform_get_type(void); #endif extern GType vips_dE76_get_type(void); extern GType vips_dE00_get_type(void); extern GType vips_dECMC_get_type(void); vips_colourspace_get_type(); vips_Lab2XYZ_get_type(); vips_XYZ2Lab_get_type(); vips_Lab2LCh_get_type(); vips_LCh2Lab_get_type(); vips_LCh2CMC_get_type(); vips_CMC2LCh_get_type(); vips_XYZ2Yxy_get_type(); vips_Yxy2XYZ_get_type(); vips_LabQ2Lab_get_type(); vips_Lab2LabQ_get_type(); vips_LabQ2LabS_get_type(); vips_LabS2LabQ_get_type(); vips_LabS2Lab_get_type(); vips_Lab2LabS_get_type(); vips_rad2float_get_type(); vips_float2rad_get_type(); vips_LabQ2sRGB_get_type(); vips_sRGB2scRGB_get_type(); vips_scRGB2XYZ_get_type(); vips_scRGB2BW_get_type(); vips_sRGB2HSV_get_type(); vips_HSV2sRGB_get_type(); vips_XYZ2scRGB_get_type(); vips_scRGB2sRGB_get_type(); vips_CMYK2XYZ_get_type(); vips_XYZ2CMYK_get_type(); vips_profile_load_get_type(); #ifdef HAVE_LCMS2 vips_icc_import_get_type(); vips_icc_export_get_type(); vips_icc_transform_get_type(); #endif vips_dE76_get_type(); vips_dE00_get_type(); vips_dECMC_get_type(); } libvips-8.15.1/libvips/colour/colourspace.c000066400000000000000000000553521454007373500207360ustar00rootroot00000000000000/* convert between colourspaces * * 6/11/12 * - add RGB16 as a destination * 12/1/14 * - add B_W as a source / dest * - add GREY16 as a source / dest * - add RGB16 as a source * 19/1/14 * - auto-decode RAD images * 3/2/14 * - add "source_space", overrides source space guess * 8/5/14 * - oops, don't treat RGB16 as sRGB * 9/9/14 * - mono <-> rgb converters were not handling extra bands, thanks James * 4/2/15 * - much faster RGB16->sRGB path * 17/4/15 * - better conversion to greyscale, see * https://github.com/lovell/sharp/issues/193 * 27/12/18 * - add CMYK conversions */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pcolour.h" static int vips_scRGB2RGB16(VipsImage *in, VipsImage **out, ...) { return vips_scRGB2sRGB(in, out, "depth", 16, NULL); } static int vips_scRGB2BW16(VipsImage *in, VipsImage **out, ...) { return vips_scRGB2BW(in, out, "depth", 16, NULL); } /* Do these two with a simple cast ... since we're just cast shifting, we can * short-circuit the extra band processing. */ static int vips_RGB162sRGB(VipsImage *in, VipsImage **out, ...) { if (vips_cast(in, out, VIPS_FORMAT_UCHAR, "shift", TRUE, NULL)) return -1; (*out)->Type = VIPS_INTERPRETATION_sRGB; return 0; } static int vips_sRGB2RGB16(VipsImage *in, VipsImage **out, ...) { if (vips_cast(in, out, VIPS_FORMAT_USHORT, "shift", TRUE, NULL)) return -1; (*out)->Type = VIPS_INTERPRETATION_RGB16; return 0; } /* Process the first @n bands with @fn, detach and reattach remaining bands. * * Also used by CMYK2XYZ and XYZ2CMYK. */ int vips__colourspace_process_n(const char *domain, VipsImage *in, VipsImage **out, int n, VipsColourTransformFn fn) { if (in->Bands > n) { VipsImage *scope = vips_image_new(); VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(scope), 4); if (vips_extract_band(in, &t[0], 0, "n", n, NULL) || vips_extract_band(in, &t[1], n, "n", in->Bands - n, NULL) || fn(t[0], &t[2], NULL) || vips_cast(t[1], &t[3], t[2]->BandFmt, NULL) || vips_bandjoin2(t[2], t[3], out, NULL)) { g_object_unref(scope); return -1; } g_object_unref(scope); } else if (in->Bands == n) { if (fn(in, out, NULL)) return -1; } else { vips_error(domain, "%s", _("too few bands for operation")); return -1; } return 0; } static int vips_BW2sRGB_op(VipsImage *in, VipsImage **out, ...) { VipsImage *t[3]; t[0] = in; t[1] = in; t[2] = in; if (vips_bandjoin(t, out, 3, NULL)) return -1; return 0; } static int vips_BW2sRGB(VipsImage *in, VipsImage **out, ...) { if (vips__colourspace_process_n("BW2sRGB", in, out, 1, vips_BW2sRGB_op)) return -1; (*out)->Type = VIPS_INTERPRETATION_sRGB; return 0; } static int vips_GREY162RGB16(VipsImage *in, VipsImage **out, ...) { if (vips__colourspace_process_n("GREY162RGB16", in, out, 1, vips_BW2sRGB_op)) return -1; (*out)->Type = VIPS_INTERPRETATION_RGB16; return 0; } /* Maximum number of steps we allow in a route. 10 steps should be enough * for anyone. */ #define MAX_STEPS (10) /* A route between two colour spaces. */ typedef struct _VipsColourRoute { VipsInterpretation from; VipsInterpretation to; VipsColourTransformFn route[MAX_STEPS + 1]; } VipsColourRoute; /* Some defines to save typing. These are the colour spaces we support * conversions between. */ #define XYZ VIPS_INTERPRETATION_XYZ #define LAB VIPS_INTERPRETATION_LAB #define LABQ VIPS_INTERPRETATION_LABQ #define LCH VIPS_INTERPRETATION_LCH #define CMC VIPS_INTERPRETATION_CMC #define LABS VIPS_INTERPRETATION_LABS #define CMYK VIPS_INTERPRETATION_CMYK #define scRGB VIPS_INTERPRETATION_scRGB #define sRGB VIPS_INTERPRETATION_sRGB #define HSV VIPS_INTERPRETATION_HSV #define RGB16 VIPS_INTERPRETATION_RGB16 #define GREY16 VIPS_INTERPRETATION_GREY16 #define YXY VIPS_INTERPRETATION_YXY #define BW VIPS_INTERPRETATION_B_W /* All the routes we know about. */ static VipsColourRoute vips_colour_routes[] = { { XYZ, LAB, { vips_XYZ2Lab, NULL } }, { XYZ, LABQ, { vips_XYZ2Lab, vips_Lab2LabQ, NULL } }, { XYZ, LCH, { vips_XYZ2Lab, vips_Lab2LCh, NULL } }, { XYZ, CMC, { vips_XYZ2Lab, vips_Lab2LCh, vips_LCh2CMC, NULL } }, { XYZ, LABS, { vips_XYZ2Lab, vips_Lab2LabS, NULL } }, { XYZ, CMYK, { vips_XYZ2CMYK, NULL } }, { XYZ, scRGB, { vips_XYZ2scRGB, NULL } }, { XYZ, sRGB, { vips_XYZ2scRGB, vips_scRGB2sRGB, NULL } }, { XYZ, HSV, { vips_XYZ2scRGB, vips_scRGB2sRGB, vips_sRGB2HSV, NULL } }, { XYZ, BW, { vips_XYZ2scRGB, vips_scRGB2BW, NULL } }, { XYZ, RGB16, { vips_XYZ2scRGB, vips_scRGB2RGB16, NULL } }, { XYZ, GREY16, { vips_XYZ2scRGB, vips_scRGB2BW16, NULL } }, { XYZ, YXY, { vips_XYZ2Yxy, NULL } }, { LAB, XYZ, { vips_Lab2XYZ, NULL } }, { LAB, LABQ, { vips_Lab2LabQ, NULL } }, { LAB, LCH, { vips_Lab2LCh, NULL } }, { LAB, CMC, { vips_Lab2LCh, vips_LCh2CMC, NULL } }, { LAB, LABS, { vips_Lab2LabS, NULL } }, { LAB, CMYK, { vips_Lab2XYZ, vips_XYZ2CMYK, NULL } }, { LAB, scRGB, { vips_Lab2XYZ, vips_XYZ2scRGB, NULL } }, { LAB, sRGB, { vips_Lab2XYZ, vips_XYZ2scRGB, vips_scRGB2sRGB, NULL } }, { LAB, HSV, { vips_Lab2XYZ, vips_XYZ2scRGB, vips_scRGB2sRGB, vips_sRGB2HSV, NULL } }, { LAB, BW, { vips_Lab2XYZ, vips_XYZ2scRGB, vips_scRGB2BW, NULL } }, { LAB, RGB16, { vips_Lab2XYZ, vips_XYZ2scRGB, vips_scRGB2RGB16, NULL } }, { LAB, GREY16, { vips_Lab2XYZ, vips_XYZ2scRGB, vips_scRGB2BW16, NULL } }, { LAB, YXY, { vips_Lab2XYZ, vips_XYZ2Yxy, NULL } }, { LABQ, XYZ, { vips_LabQ2Lab, vips_Lab2XYZ, NULL } }, { LABQ, LAB, { vips_LabQ2Lab, NULL } }, { LABQ, LCH, { vips_LabQ2Lab, vips_Lab2LCh, NULL } }, { LABQ, CMC, { vips_LabQ2Lab, vips_Lab2LCh, vips_LCh2CMC, NULL } }, { LABQ, LABS, { vips_LabQ2LabS, NULL } }, { LABQ, CMYK, { vips_LabQ2Lab, vips_Lab2XYZ, vips_XYZ2CMYK, NULL } }, { LABQ, scRGB, { vips_LabQ2Lab, vips_Lab2XYZ, vips_XYZ2scRGB, NULL } }, { LABQ, sRGB, { vips_LabQ2sRGB, NULL } }, { LABQ, HSV, { vips_LabQ2sRGB, vips_sRGB2HSV, NULL } }, { LABQ, BW, { vips_LabQ2Lab, vips_Lab2XYZ, vips_XYZ2scRGB, vips_scRGB2BW, NULL } }, { LABQ, RGB16, { vips_LabQ2Lab, vips_Lab2XYZ, vips_XYZ2scRGB, vips_scRGB2RGB16, NULL } }, { LABQ, GREY16, { vips_LabQ2Lab, vips_Lab2XYZ, vips_XYZ2scRGB, vips_scRGB2BW16, NULL } }, { LABQ, YXY, { vips_LabQ2Lab, vips_Lab2XYZ, vips_XYZ2Yxy, NULL } }, { LCH, XYZ, { vips_LCh2Lab, vips_Lab2XYZ, NULL } }, { LCH, LAB, { vips_LCh2Lab, NULL } }, { LCH, LABQ, { vips_LCh2Lab, vips_Lab2LabQ, NULL } }, { LCH, CMC, { vips_LCh2CMC, NULL } }, { LCH, LABS, { vips_LCh2Lab, vips_Lab2LabS, NULL } }, { LCH, CMYK, { vips_LCh2Lab, vips_Lab2XYZ, vips_XYZ2CMYK, NULL } }, { LCH, scRGB, { vips_LCh2Lab, vips_Lab2XYZ, vips_XYZ2scRGB, NULL } }, { LCH, sRGB, { vips_LCh2Lab, vips_Lab2XYZ, vips_XYZ2scRGB, vips_scRGB2sRGB, NULL } }, { LCH, HSV, { vips_LCh2Lab, vips_Lab2XYZ, vips_XYZ2scRGB, vips_scRGB2sRGB, vips_sRGB2HSV, NULL } }, { LCH, BW, { vips_LCh2Lab, vips_Lab2XYZ, vips_XYZ2scRGB, vips_scRGB2BW, NULL } }, { LCH, RGB16, { vips_LCh2Lab, vips_Lab2XYZ, vips_XYZ2scRGB, vips_scRGB2RGB16, NULL } }, { LCH, GREY16, { vips_LCh2Lab, vips_Lab2XYZ, vips_XYZ2scRGB, vips_scRGB2BW16, NULL } }, { LCH, YXY, { vips_LCh2Lab, vips_Lab2XYZ, vips_XYZ2Yxy, NULL } }, { CMC, XYZ, { vips_CMC2LCh, vips_LCh2Lab, vips_Lab2XYZ, NULL } }, { CMC, LAB, { vips_CMC2LCh, vips_LCh2Lab, NULL } }, { CMC, LABQ, { vips_CMC2LCh, vips_LCh2Lab, vips_Lab2LabQ, NULL } }, { CMC, LCH, { vips_CMC2LCh, NULL } }, { CMC, LABS, { vips_CMC2LCh, vips_LCh2Lab, vips_Lab2LabS, NULL } }, { CMC, CMYK, { vips_CMC2LCh, vips_LCh2Lab, vips_Lab2XYZ, vips_XYZ2CMYK, NULL } }, { CMC, scRGB, { vips_CMC2LCh, vips_LCh2Lab, vips_Lab2XYZ, vips_XYZ2scRGB, NULL } }, { CMC, sRGB, { vips_CMC2LCh, vips_LCh2Lab, vips_Lab2XYZ, vips_XYZ2scRGB, vips_scRGB2sRGB, NULL } }, { CMC, HSV, { vips_CMC2LCh, vips_LCh2Lab, vips_Lab2XYZ, vips_XYZ2scRGB, vips_scRGB2sRGB, vips_sRGB2HSV, NULL } }, { CMC, BW, { vips_CMC2LCh, vips_LCh2Lab, vips_Lab2XYZ, vips_XYZ2scRGB, vips_scRGB2BW, NULL } }, { CMC, RGB16, { vips_CMC2LCh, vips_LCh2Lab, vips_Lab2XYZ, vips_XYZ2scRGB, vips_scRGB2RGB16, NULL } }, { CMC, GREY16, { vips_CMC2LCh, vips_LCh2Lab, vips_Lab2XYZ, vips_XYZ2scRGB, vips_scRGB2BW16, NULL } }, { CMC, YXY, { vips_CMC2LCh, vips_LCh2Lab, vips_Lab2XYZ, vips_XYZ2Yxy, NULL } }, { LABS, XYZ, { vips_LabS2Lab, vips_Lab2XYZ, NULL } }, { LABS, LAB, { vips_LabS2Lab, NULL } }, { LABS, LABQ, { vips_LabS2LabQ, NULL } }, { LABS, LCH, { vips_LabS2Lab, vips_Lab2LCh, NULL } }, { LABS, CMC, { vips_LabS2Lab, vips_Lab2LCh, vips_LCh2CMC, NULL } }, { LABS, CMYK, { vips_LabS2Lab, vips_Lab2XYZ, vips_XYZ2CMYK, NULL } }, { LABS, scRGB, { vips_LabS2Lab, vips_Lab2XYZ, vips_XYZ2scRGB, NULL } }, { LABS, sRGB, { vips_LabS2Lab, vips_Lab2XYZ, vips_XYZ2scRGB, vips_scRGB2sRGB, NULL } }, { LABS, HSV, { vips_LabS2Lab, vips_Lab2XYZ, vips_XYZ2scRGB, vips_scRGB2sRGB, vips_sRGB2HSV, NULL } }, { LABS, BW, { vips_LabS2Lab, vips_Lab2XYZ, vips_XYZ2scRGB, vips_scRGB2BW, NULL } }, { LABS, RGB16, { vips_LabS2Lab, vips_Lab2XYZ, vips_XYZ2scRGB, vips_scRGB2RGB16, NULL } }, { LABS, GREY16, { vips_LabS2Lab, vips_Lab2XYZ, vips_XYZ2scRGB, vips_scRGB2BW16, NULL } }, { LABS, YXY, { vips_LabS2Lab, vips_Lab2XYZ, vips_XYZ2Yxy, NULL } }, { scRGB, XYZ, { vips_scRGB2XYZ, NULL } }, { scRGB, LAB, { vips_scRGB2XYZ, vips_XYZ2Lab, NULL } }, { scRGB, LABQ, { vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LabQ, NULL } }, { scRGB, LCH, { vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LCh, NULL } }, { scRGB, CMC, { vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LCh, vips_LCh2CMC, NULL } }, { scRGB, CMYK, { vips_scRGB2XYZ, vips_XYZ2CMYK, NULL } }, { scRGB, sRGB, { vips_scRGB2sRGB, NULL } }, { scRGB, HSV, { vips_scRGB2sRGB, vips_sRGB2HSV, NULL } }, { scRGB, BW, { vips_scRGB2BW, NULL } }, { scRGB, LABS, { vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LabS, NULL } }, { scRGB, RGB16, { vips_scRGB2RGB16, NULL } }, { scRGB, GREY16, { vips_scRGB2BW16, NULL } }, { scRGB, YXY, { vips_scRGB2XYZ, vips_XYZ2Yxy, NULL } }, { CMYK, XYZ, { vips_CMYK2XYZ, NULL } }, { CMYK, LAB, { vips_CMYK2XYZ, vips_XYZ2Lab, NULL } }, { CMYK, LABQ, { vips_CMYK2XYZ, vips_XYZ2Lab, vips_Lab2LabQ, NULL } }, { CMYK, LCH, { vips_CMYK2XYZ, vips_XYZ2Lab, vips_Lab2LCh, NULL } }, { CMYK, CMC, { vips_CMYK2XYZ, vips_XYZ2Lab, vips_Lab2LCh, vips_LCh2CMC, NULL } }, { CMYK, scRGB, { vips_CMYK2XYZ, vips_XYZ2scRGB, NULL } }, { CMYK, sRGB, { vips_CMYK2XYZ, vips_XYZ2scRGB, vips_scRGB2sRGB, NULL } }, { CMYK, HSV, { vips_CMYK2XYZ, vips_XYZ2scRGB, vips_scRGB2sRGB, vips_sRGB2HSV, NULL } }, { CMYK, BW, { vips_CMYK2XYZ, vips_XYZ2scRGB, vips_scRGB2BW, NULL } }, { CMYK, LABS, { vips_CMYK2XYZ, vips_XYZ2Lab, vips_Lab2LabS, NULL } }, { CMYK, RGB16, { vips_CMYK2XYZ, vips_XYZ2scRGB, vips_scRGB2RGB16, NULL } }, { CMYK, GREY16, { vips_CMYK2XYZ, vips_XYZ2scRGB, vips_scRGB2BW16, NULL } }, { CMYK, YXY, { vips_CMYK2XYZ, vips_XYZ2Yxy, NULL } }, { sRGB, XYZ, { vips_sRGB2scRGB, vips_scRGB2XYZ, NULL } }, { sRGB, LAB, { vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, NULL } }, { sRGB, LABQ, { vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LabQ, NULL } }, { sRGB, LCH, { vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LCh, NULL } }, { sRGB, CMC, { vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LCh, vips_LCh2CMC, NULL } }, { sRGB, CMYK, { vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2CMYK, NULL } }, { sRGB, scRGB, { vips_sRGB2scRGB, NULL } }, { sRGB, HSV, { vips_sRGB2HSV, NULL } }, { sRGB, BW, { vips_sRGB2scRGB, vips_scRGB2BW, NULL } }, { sRGB, LABS, { vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LabS, NULL } }, { sRGB, RGB16, { vips_sRGB2RGB16, NULL } }, { sRGB, GREY16, { vips_sRGB2scRGB, vips_scRGB2BW16, NULL } }, { sRGB, YXY, { vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Yxy, NULL } }, { HSV, XYZ, { vips_HSV2sRGB, vips_sRGB2scRGB, vips_scRGB2XYZ, NULL } }, { HSV, LAB, { vips_HSV2sRGB, vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, NULL } }, { HSV, LABQ, { vips_HSV2sRGB, vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LabQ, NULL } }, { HSV, LCH, { vips_HSV2sRGB, vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LCh, NULL } }, { HSV, CMC, { vips_HSV2sRGB, vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LCh, vips_LCh2CMC, NULL } }, { HSV, CMYK, { vips_HSV2sRGB, vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2CMYK, NULL } }, { HSV, scRGB, { vips_HSV2sRGB, vips_sRGB2scRGB, NULL } }, { HSV, sRGB, { vips_HSV2sRGB, NULL } }, { HSV, BW, { vips_HSV2sRGB, vips_sRGB2scRGB, vips_scRGB2BW, NULL } }, { HSV, LABS, { vips_HSV2sRGB, vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LabS, NULL } }, { HSV, RGB16, { vips_HSV2sRGB, vips_sRGB2RGB16, NULL } }, { HSV, GREY16, { vips_HSV2sRGB, vips_sRGB2scRGB, vips_scRGB2BW16, NULL } }, { HSV, YXY, { vips_HSV2sRGB, vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Yxy, NULL } }, { RGB16, XYZ, { vips_sRGB2scRGB, vips_scRGB2XYZ, NULL } }, { RGB16, LAB, { vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, NULL } }, { RGB16, LABQ, { vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LabQ, NULL } }, { RGB16, LCH, { vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LCh, NULL } }, { RGB16, CMC, { vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LCh, vips_LCh2CMC, NULL } }, { RGB16, CMYK, { vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2CMYK, NULL } }, { RGB16, scRGB, { vips_sRGB2scRGB, NULL } }, { RGB16, sRGB, { vips_RGB162sRGB, NULL } }, { RGB16, HSV, { vips_RGB162sRGB, vips_sRGB2HSV, NULL } }, { RGB16, BW, { vips_sRGB2scRGB, vips_scRGB2BW, NULL } }, { RGB16, LABS, { vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LabS, NULL } }, { RGB16, GREY16, { vips_sRGB2scRGB, vips_scRGB2BW16, NULL } }, { RGB16, YXY, { vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Yxy, NULL } }, { GREY16, XYZ, { vips_GREY162RGB16, vips_sRGB2scRGB, vips_scRGB2XYZ, NULL } }, { GREY16, LAB, { vips_GREY162RGB16, vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, NULL } }, { GREY16, LABQ, { vips_GREY162RGB16, vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LabQ, NULL } }, { GREY16, LCH, { vips_GREY162RGB16, vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LCh, NULL } }, { GREY16, CMC, { vips_GREY162RGB16, vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LCh, vips_LCh2CMC, NULL } }, { GREY16, CMYK, { vips_GREY162RGB16, vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2CMYK, NULL } }, { GREY16, scRGB, { vips_GREY162RGB16, vips_sRGB2scRGB, NULL } }, { GREY16, sRGB, { vips_GREY162RGB16, vips_RGB162sRGB, NULL } }, { GREY16, HSV, { vips_GREY162RGB16, vips_RGB162sRGB, vips_sRGB2HSV, NULL } }, { GREY16, BW, { vips_GREY162RGB16, vips_sRGB2scRGB, vips_scRGB2BW, NULL } }, { GREY16, LABS, { vips_GREY162RGB16, vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LabS, NULL } }, { GREY16, RGB16, { vips_GREY162RGB16, NULL } }, { GREY16, YXY, { vips_GREY162RGB16, vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Yxy, NULL } }, { BW, XYZ, { vips_BW2sRGB, vips_sRGB2scRGB, vips_scRGB2XYZ, NULL } }, { BW, LAB, { vips_BW2sRGB, vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, NULL } }, { BW, LABQ, { vips_BW2sRGB, vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LabQ, NULL } }, { BW, LCH, { vips_BW2sRGB, vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LCh, NULL } }, { BW, CMC, { vips_BW2sRGB, vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LCh, vips_LCh2CMC, NULL } }, { BW, CMYK, { vips_BW2sRGB, vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2CMYK, NULL } }, { BW, scRGB, { vips_BW2sRGB, vips_sRGB2scRGB, NULL } }, { BW, sRGB, { vips_BW2sRGB, NULL } }, { BW, HSV, { vips_BW2sRGB, vips_sRGB2HSV, NULL } }, { BW, LABS, { vips_BW2sRGB, vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Lab, vips_Lab2LabS, NULL } }, { BW, RGB16, { vips_BW2sRGB, vips_sRGB2RGB16, NULL } }, { BW, GREY16, { vips_BW2sRGB, vips_sRGB2scRGB, vips_scRGB2BW16, NULL } }, { BW, YXY, { vips_BW2sRGB, vips_sRGB2scRGB, vips_scRGB2XYZ, vips_XYZ2Yxy, NULL } }, { YXY, XYZ, { vips_Yxy2XYZ, NULL } }, { YXY, LAB, { vips_Yxy2XYZ, vips_XYZ2Lab, NULL } }, { YXY, LABQ, { vips_Yxy2XYZ, vips_XYZ2Lab, vips_Lab2LabQ, NULL } }, { YXY, LCH, { vips_Yxy2XYZ, vips_XYZ2Lab, vips_Lab2LCh, NULL } }, { YXY, CMC, { vips_Yxy2XYZ, vips_XYZ2Lab, vips_Lab2LCh, vips_LCh2CMC, NULL } }, { YXY, LABS, { vips_Yxy2XYZ, vips_XYZ2Lab, vips_Lab2LabS, NULL } }, { YXY, CMYK, { vips_Yxy2XYZ, vips_XYZ2CMYK, NULL } }, { YXY, scRGB, { vips_Yxy2XYZ, vips_XYZ2scRGB, NULL } }, { YXY, sRGB, { vips_Yxy2XYZ, vips_XYZ2scRGB, vips_scRGB2sRGB, NULL } }, { YXY, HSV, { vips_Yxy2XYZ, vips_XYZ2scRGB, vips_scRGB2sRGB, vips_sRGB2HSV, NULL } }, { YXY, BW, { vips_Yxy2XYZ, vips_XYZ2scRGB, vips_scRGB2BW, NULL } }, { YXY, RGB16, { vips_Yxy2XYZ, vips_XYZ2scRGB, vips_scRGB2RGB16, NULL } }, { YXY, GREY16, { vips_Yxy2XYZ, vips_XYZ2scRGB, vips_scRGB2BW16, NULL } } }; /* Is an image in a supported colourspace. */ /** * vips_colourspace_issupported: (method) * @image: input image * * Test if @image is in a colourspace that vips_colourspace() can process. * * Returns: %TRUE if @image is in a supported colourspace. */ gboolean vips_colourspace_issupported(const VipsImage *image) { VipsInterpretation interpretation; int i; /* Treat RGB as sRGB. If you want some other treatment, * you'll need to use the icc funcs. */ interpretation = vips_image_guess_interpretation(image); if (interpretation == VIPS_INTERPRETATION_RGB) interpretation = VIPS_INTERPRETATION_sRGB; for (i = 0; i < VIPS_NUMBER(vips_colour_routes); i++) if (vips_colour_routes[i].from == interpretation) return TRUE; return FALSE; } typedef struct _VipsColourspace { VipsOperation parent_instance; VipsImage *in; VipsImage *out; VipsInterpretation space; VipsInterpretation source_space; } VipsColourspace; typedef VipsOperationClass VipsColourspaceClass; G_DEFINE_TYPE(VipsColourspace, vips_colourspace, VIPS_TYPE_OPERATION); static int vips_colourspace_build(VipsObject *object) { VipsColourspace *colourspace = (VipsColourspace *) object; int i, j; VipsImage *x; VipsImage **t = (VipsImage **) vips_object_local_array(object, 1); VipsImage **pipe = (VipsImage **) vips_object_local_array(object, MAX_STEPS); VipsInterpretation interpretation; /* Verify that all input args have been set. */ if (VIPS_OBJECT_CLASS(vips_colourspace_parent_class)->build(object)) return -1; x = colourspace->in; /* Unpack radiance-coded images. We can't use interpretation for this, * since rad images can be scRGB or XYZ. */ if (x->Coding == VIPS_CODING_RAD) { if (vips_rad2float(x, &t[0], NULL)) return -1; x = t[0]; } if (vips_object_argument_isset(object, "source_space")) interpretation = colourspace->source_space; else interpretation = vips_image_guess_interpretation(x); /* Treat RGB as sRGB. If you want some other treatment, * you'll need to use the icc funcs. */ if (interpretation == VIPS_INTERPRETATION_RGB) interpretation = VIPS_INTERPRETATION_sRGB; /* No conversion necessary. */ if (interpretation == colourspace->space) { g_object_set(colourspace, "out", vips_image_new(), NULL); return vips_image_write(colourspace->in, colourspace->out); } for (i = 0; i < VIPS_NUMBER(vips_colour_routes); i++) if (vips_colour_routes[i].from == interpretation && vips_colour_routes[i].to == colourspace->space) break; if (i == VIPS_NUMBER(vips_colour_routes)) { vips_error("vips_colourspace", _("no known route from '%s' to '%s'"), vips_enum_nick(VIPS_TYPE_INTERPRETATION, interpretation), vips_enum_nick(VIPS_TYPE_INTERPRETATION, colourspace->space)); return -1; } for (j = 0; vips_colour_routes[i].route[j]; j++) { if (vips_colour_routes[i].route[j](x, &pipe[j], NULL)) return -1; x = pipe[j]; } g_object_set(colourspace, "out", vips_image_new(), NULL); if (vips_image_write(x, colourspace->out)) return -1; return 0; } static void vips_colourspace_class_init(VipsColourspaceClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "colourspace"; vobject_class->description = _("convert to a new colorspace"); vobject_class->build = vips_colourspace_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsColourspace, in)); VIPS_ARG_IMAGE(class, "out", 2, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsColourspace, out)); VIPS_ARG_ENUM(class, "space", 6, _("Space"), _("Destination color space"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsColourspace, space), VIPS_TYPE_INTERPRETATION, VIPS_INTERPRETATION_sRGB); VIPS_ARG_ENUM(class, "source_space", 6, _("Source space"), _("Source color space"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsColourspace, source_space), VIPS_TYPE_INTERPRETATION, VIPS_INTERPRETATION_sRGB); } static void vips_colourspace_init(VipsColourspace *colourspace) { colourspace->source_space = VIPS_INTERPRETATION_sRGB; } /** * vips_colourspace: (method) * @in: input image * @out: (out): output image * @space: convert to this colour space * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @source_space: input colour space * * This operation looks at the interpretation field of @in (or uses * @source_space, if set) and runs * a set of colourspace conversion functions to move it to @space. * * For example, given an image tagged as #VIPS_INTERPRETATION_YXY, running * vips_colourspace() with @space set to #VIPS_INTERPRETATION_LAB will * convert with vips_Yxy2XYZ() and vips_XYZ2Lab(). * * See also: vips_colourspace_issupported(), * vips_image_guess_interpretation(). * * Returns: 0 on success, -1 on error. */ int vips_colourspace(VipsImage *in, VipsImage **out, VipsInterpretation space, ...) { va_list ap; int result; va_start(ap, space); result = vips_call_split("colourspace", ap, in, out, space); va_end(ap); return result; } libvips-8.15.1/libvips/colour/dE00.c000066400000000000000000000141551454007373500171030ustar00rootroot00000000000000/* dE00.c * * Modified: * 31/10/12 * - from dE76.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pcolour.h" typedef struct _VipsdE00 { VipsColourDifference parent_instance; } VipsdE00; typedef VipsColourDifferenceClass VipsdE00Class; G_DEFINE_TYPE(VipsdE00, vips_dE00, VIPS_TYPE_COLOUR_DIFFERENCE); /** * vips_col_dE00: * @L1: Input coordinate 1 * @a1: Input coordinate 1 * @b1: Input coordinate 1 * @L2: Input coordinate 2 * @a2: Input coordinate 2 * @b2: Input coordinate 2 * * CIEDE2000, from: * * Luo, Cui, Rigg, "The Development of the CIE 2000 Colour-Difference * Formula: CIEDE2000", COLOR research and application, pp 340 * * Returns: CIE dE2000 colour difference. */ float vips_col_dE00(float L1, float a1, float b1, float L2, float a2, float b2) { /* Code if you want XYZ params and the colour temp used in the reference float vips_col_dE00(float X1, float Y1, float Z1, float X2, float Y2, float Z2) { const double X0 = 94.811; const double Y0 = 100.0; const double Z0 = 107.304; #define f(I) ((I) > 0.008856 \ ? cbrt((I), 1.0 / 3.0) \ : 7.7871 * (I) + (16.0 / 116.0)) double nX1 = f(X1 / X0); double nY1 = f(Y1 / Y0); double nZ1 = f(Z1 / Z0); double L1 = 116 * nY1 - 16; double a1 = 500 * (nX1 - nY1); double b1 = 200 * (nY1 - nZ1); double nX2 = f(X2 / X0); double nY2 = f(Y2 / Y0); double nZ2 = f(Z2 / Z0); double L2 = 116 * nY2 - 16; double a2 = 500 * (nX2 - nY2); double b2 = 200 * (nY2 - nZ2); */ /* Chroma and mean chroma (C bar) */ double C1 = sqrt(a1 * a1 + b1 * b1); double C2 = sqrt(a2 * a2 + b2 * b2); double Cb = (C1 + C2) / 2; /* G */ double Cb7 = Cb * Cb * Cb * Cb * Cb * Cb * Cb; double G = 0.5 * (1 - sqrt(Cb7 / (Cb7 + pow(25, 7)))); /* L', a', b', C', h' */ double L1d = L1; double a1d = (1 + G) * a1; double b1d = b1; double C1d = sqrt(a1d * a1d + b1d * b1d); double h1d = vips_col_ab2h(a1d, b1d); double L2d = L2; double a2d = (1 + G) * a2; double b2d = b2; double C2d = sqrt(a2d * a2d + b2d * b2d); double h2d = vips_col_ab2h(a2d, b2d); /* L' bar, C' bar, h' bar */ double Ldb = (L1d + L2d) / 2; double Cdb = (C1d + C2d) / 2; double hdb = VIPS_FABS(h1d - h2d) < 180 ? (h1d + h2d) / 2 : VIPS_FABS(h1d + h2d - 360) / 2; /* dtheta, RC */ double hdbd = (hdb - 275) / 25; double dtheta = 30 * exp(-(hdbd * hdbd)); double Cdb7 = Cdb * Cdb * Cdb * Cdb * Cdb * Cdb * Cdb; double RC = 2 * sqrt(Cdb7 / (Cdb7 + pow(25, 7))); /* RT, T. */ double RT = -sin(VIPS_RAD(2 * dtheta)) * RC; double T = 1 - 0.17 * cos(VIPS_RAD(hdb - 30)) + 0.24 * cos(VIPS_RAD(2 * hdb)) + 0.32 * cos(VIPS_RAD(3 * hdb + 6)) - 0.20 * cos(VIPS_RAD(4 * hdb - 63)); /* SL, SC, SH */ double Ldb50 = Ldb - 50; double SL = 1 + (0.015 * Ldb50 * Ldb50) / sqrt(20 + Ldb50 * Ldb50); double SC = 1 + 0.045 * Cdb; double SH = 1 + 0.015 * Cdb * T; /* hue difference ... careful! */ double dhd = VIPS_FABS(h1d - h2d) < 180 ? h1d - h2d : 360 - (h1d - h2d); /* dLd, dCd dHd */ double dLd = L1d - L2d; double dCd = C1d - C2d; double dHd = 2 * sqrt(C1d * C2d) * sin(VIPS_RAD(dhd / 2)); /* Parametric factors for viewing parameters. */ const double kL = 1.0; const double kC = 1.0; const double kH = 1.0; /* Normalised terms. */ double nL = dLd / (kL * SL); double nC = dCd / (kC * SC); double nH = dHd / (kH * SH); /* dE00!! */ double dE00 = sqrt(nL * nL + nC * nC + nH * nH + RT * nC * nH); /* printf("X1 = %g, Y1 = %g, Z1 = %g\n", X1, Y1, Z1); printf("X2 = %g, Y2 = %g, Z2 = %g\n", X2, Y2, Z2); printf("L1 = %g, a1 = %g, b1 = %g\n", L1, a1, b1); printf("L2 = %g, a2 = %g, b2 = %g\n", L2, a2, b2); printf("L1d = %g, a1d = %g, b1d = %g, C1d = %g, h1d = %g\n", L1d, a1d, b1d, C1d, h1d); printf("L2d = %g, a2d = %g, b2d = %g, C2d = %g, h2d = %g\n", L2d, a2d, b2d, C2d, h2d); printf("G = %g, T = %g, SL = %g, SC = %g, SH = %g, RT = %g\n", G, T, SL, SC, SH, RT); printf("dE00 = %g\n", dE00); */ return dE00; } /* Find the difference between two buffers of LAB data. */ static void vips_dE00_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { float *p1 = (float *) in[0]; float *p2 = (float *) in[1]; float *q = (float *) out; int x; for (x = 0; x < width; x++) { q[x] = vips_col_dE00(p1[0], p1[1], p1[2], p2[0], p2[1], p2[2]); p1 += 3; p2 += 3; } } static void vips_dE00_class_init(VipsdE00Class *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); object_class->nickname = "dE00"; object_class->description = _("calculate dE00"); colour_class->process_line = vips_dE00_line; } static void vips_dE00_init(VipsdE00 *dE00) { VipsColourDifference *difference = VIPS_COLOUR_DIFFERENCE(dE00); difference->interpretation = VIPS_INTERPRETATION_LAB; } /** * vips_dE00: * @left: first input image * @right: second input image * @out: output image * @...: %NULL-terminated list of optional named arguments * * Calculate dE 00. * * Returns: 0 on success, -1 on error */ int vips_dE00(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("dE00", ap, left, right, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/dE76.c000066400000000000000000000062271454007373500171210ustar00rootroot00000000000000/* dE76.c * * Modified: * 16/11/94 JC * - partialed! * 31/10/09 * - use im__colour_binary() * - gtkdoc comment * 25/10/12 * - redone as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pcolour.h" typedef struct _VipsdE76 { VipsColourDifference parent_instance; } VipsdE76; typedef VipsColourDifferenceClass VipsdE76Class; G_DEFINE_TYPE(VipsdE76, vips_dE76, VIPS_TYPE_COLOUR_DIFFERENCE); /** * vips_pythagoras: * @L1: Input coordinate 1 * @a1: Input coordinate 1 * @b1: Input coordinate 1 * @L2: Input coordinate 2 * @a2: Input coordinate 2 * @b2: Input coordinate 2 * * Pythagorean distance between two points in colour space. Lab/XYZ/CMC etc. */ float vips_pythagoras(float L1, float a1, float b1, float L2, float a2, float b2) { float dL = L1 - L2; float da = a1 - a2; float db = b1 - b2; return sqrt(dL * dL + da * da + db * db); } /* Find the difference between two buffers of LAB data. */ void vips__pythagoras_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { float *restrict p1 = (float *) in[0]; float *restrict p2 = (float *) in[1]; float *restrict q = (float *) out; int x; for (x = 0; x < width; x++) { float dL = p1[0] - p2[0]; float da = p1[1] - p2[1]; float db = p1[2] - p2[2]; q[x] = sqrt(dL * dL + da * da + db * db); p1 += 3; p2 += 3; } } static void vips_dE76_class_init(VipsdE76Class *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); object_class->nickname = "dE76"; object_class->description = _("calculate dE76"); colour_class->process_line = vips__pythagoras_line; } static void vips_dE76_init(VipsdE76 *dE76) { VipsColourDifference *difference = VIPS_COLOUR_DIFFERENCE(dE76); difference->interpretation = VIPS_INTERPRETATION_LAB; } /** * vips_dE76: * @left: first input image * @right: second input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Calculate dE 76. * * Returns: 0 on success, -1 on error */ int vips_dE76(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("dE76", ap, left, right, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/dECMC.c000066400000000000000000000047631454007373500172720ustar00rootroot00000000000000/* dECMC.c * * Modified: * 31/10/12 * - from dE76.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include "pcolour.h" typedef struct _VipsdECMC { VipsColourDifference parent_instance; } VipsdECMC; typedef VipsColourDifferenceClass VipsdECMCClass; G_DEFINE_TYPE(VipsdECMC, vips_dECMC, VIPS_TYPE_COLOUR_DIFFERENCE); static void vips_dECMC_class_init(VipsdECMCClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); object_class->nickname = "dECMC"; object_class->description = _("calculate dECMC"); colour_class->process_line = vips__pythagoras_line; } static void vips_dECMC_init(VipsdECMC *dECMC) { VipsColourDifference *difference = VIPS_COLOUR_DIFFERENCE(dECMC); difference->interpretation = VIPS_INTERPRETATION_CMC; } /** * vips_dECMC: * @left: first input image * @right: second input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Calculate dE CMC. The input images are transformed to CMC colour space and * the euclidean distance between corresponding pixels calculated. * * To calculate a colour difference with values for (l:c) other than (1:1), * transform the two source images to CMC yourself, scale the channels * appropriately, and call this function. * * See also: vips_colourspace() * * Returns: 0 on success, -1 on error */ int vips_dECMC(VipsImage *left, VipsImage *right, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("dECMC", ap, left, right, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/float2rad.c000066400000000000000000000157671454007373500203030ustar00rootroot00000000000000/* Convert float to Radiance 32bit packed format * * 23/3/09 * - from im_rad2float and Radiance sources * 2/11/09 * - gtkdoc * 20/9/12 * - redo as a class * 13/12/12 * - tag as scRGB rather than XYZ */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Sections of this file from Greg Ward and Radiance with kind permission. The Radience copyright notice appears below. */ /* ==================================================================== * The Radiance Software License, Version 1.0 * * Copyright (c) 1990 - 2009 The Regents of the University of California, * through Lawrence Berkeley National Laboratory. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. 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. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes Radiance software * (http://radsite.lbl.gov/) * developed by the Lawrence Berkeley National Laboratory * (http://www.lbl.gov/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Radiance," "Lawrence Berkeley National Laboratory" * and "The Regents of the University of California" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact radiance@radsite.lbl.gov. * * 5. Products derived from this software may not be called "Radiance", * nor may "Radiance" appear in their name, without prior written * permission of Lawrence Berkeley National Laboratory. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 Lawrence Berkeley National Laboratory OR * ITS 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. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of Lawrence Berkeley National Laboratory. For more * information on Lawrence Berkeley National Laboratory, please see * . */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pcolour.h" /* Begin copy-paste from Radiance sources. */ #define RED 0 #define GRN 1 #define BLU 2 #define CIEX 0 /* or, if input is XYZ... */ #define CIEY 1 #define CIEZ 2 #define EXP 3 /* exponent same for either format */ #define COLXS 128 /* excess used for exponent */ #define WHT 3 /* used for RGBPRIMS type */ #undef BYTE #define BYTE unsigned char /* 8-bit unsigned integer */ typedef BYTE COLR[4]; /* red, green, blue (or X,Y,Z), exponent */ typedef float COLORV; typedef COLORV COLOR[3]; /* red, green, blue (or X,Y,Z) */ #define copycolor(c1, c2) ( \ (c1)[0] = (c2)[0], \ (c1)[1] = (c2)[1], \ (c1)[2] = (c2)[2]) /* assign a short color value */ static void setcolr(COLR clr, double r, double g, double b) { double d; int e; d = r > g ? r : g; if (b > d) d = b; if (d <= 1e-32) { clr[RED] = clr[GRN] = clr[BLU] = 0; clr[EXP] = 0; return; } d = frexp(d, &e) * 255.9999 / d; if (r > 0.0) clr[RED] = r * d; else clr[RED] = 0; if (g > 0.0) clr[GRN] = g * d; else clr[GRN] = 0; if (b > 0.0) clr[BLU] = b * d; else clr[BLU] = 0; clr[EXP] = e + COLXS; } /* End copy-paste from Radiance sources. */ typedef VipsColourCode VipsFloat2rad; typedef VipsColourCodeClass VipsFloat2radClass; G_DEFINE_TYPE(VipsFloat2rad, vips_float2rad, VIPS_TYPE_COLOUR_CODE); static void vips_float2rad_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { COLOR *inp = (COLOR *) in[0]; COLR *outbuf = (COLR *) out; while (width-- > 0) { setcolr(outbuf[0], inp[0][RED], inp[0][GRN], inp[0][BLU]); inp++; outbuf++; } } static void vips_float2rad_class_init(VipsFloat2radClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); object_class->nickname = "float2rad"; object_class->description = _("transform float RGB to Radiance coding"); colour_class->process_line = vips_float2rad_line; } static void vips_float2rad_init(VipsFloat2rad *float2rad) { VipsColour *colour = VIPS_COLOUR(float2rad); VipsColourCode *code = VIPS_COLOUR_CODE(float2rad); colour->coding = VIPS_CODING_RAD; colour->interpretation = VIPS_INTERPRETATION_scRGB; colour->format = VIPS_FORMAT_UCHAR; colour->input_bands = 3; colour->bands = 4; code->input_coding = VIPS_CODING_NONE; code->input_format = VIPS_FORMAT_FLOAT; } /** * vips_float2rad: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Convert a three-band float image to Radiance 32-bit packed format. * * See also: vips_rad2float(), #VIPS_CODING_RAD, vips_LabQ2Lab(). * * Returns: 0 on success, -1 on error. */ int vips_float2rad(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("float2rad", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/icc_transform.c000066400000000000000000001145411454007373500212440ustar00rootroot00000000000000/* Transform images with little cms * * 26/4/02 JC * 26/8/05 * - attach profiles and intents to output images * - added im_icc_import_embedded() to import with an embedded profile * 12/5/06 * - lock around cmsDoTransform * 23/1/07 * - set RGB16 on 16-bit RGB export * 6/4/09 * - catch lcms error messages * 2/11/09 * - gtkdoc * - small cleanups * - call attach_profile() before im_wrapone() so the profile will get * written if we are wrinting to a file * 2/8/10 * - add lcms2 * 12/7/11 * - import and export cast @in to an appropriate format for you * 25/9/12 * - redo as a class * 14/5/13 * - import and export would segv on very wide images * 12/11/13 * - support XYZ as an alternative PCS * 10/9/14 * - support GRAY as an input and output space * 29/9/14 * - check input profiles for compatibility with the input image, thanks * James * 26/6/15 * - better profile sanity checking for icc import * 2/8/17 * - remove lcms1 support, it was untested * 10/10/17 * - more input profile sanity tests * 8/3/18 * - attach fallback profile on import if we used it * 28/12/18 * - remove warning messages from vips_icc_is_compatible_profile() since * they can be triggered under normal circumstances * 17/4/19 kleisauke * - better rejection of broken embedded profiles * 29/3/21 [hanssonrickard] * - add black_point_compensation */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #ifdef HAVE_LCMS2 #include #include /* Has to be before VIPS to avoid nameclashes. */ #include #include #include "pcolour.h" /* Call lcms with up to this many pixels at once. */ #define PIXEL_BUFFER_SIZE (10000) /** * VipsIntent: * @VIPS_INTENT_PERCEPTUAL: perceptual rendering intent * @VIPS_INTENT_RELATIVE: relative colorimetric rendering intent * @VIPS_INTENT_SATURATION: saturation rendering intent * @VIPS_INTENT_ABSOLUTE: absolute colorimetric rendering intent * * The rendering intent. #VIPS_INTENT_ABSOLUTE is best for * scientific work, #VIPS_INTENT_RELATIVE is usually best for * accurate communication with other imaging libraries. */ /** * VipsPCS: * @VIPS_PCS_LAB: use CIELAB D65 as the Profile Connection Space * @VIPS_PCS_XYZ: use XYZ as the Profile Connection Space * * Pick a Profile Connection Space for vips_icc_import() and * vips_icc_export(). LAB is usually best, XYZ can be more convenient in some * cases. */ /** * vips_icc_present: * * VIPS can optionally be built without the ICC library. Use this function to * test for its availability. * * Returns: non-zero if the ICC library is present. */ int vips_icc_present(void) { return 1; } #define VIPS_TYPE_ICC (vips_icc_get_type()) #define VIPS_ICC(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_ICC, VipsIcc)) #define VIPS_ICC_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_ICC, VipsIccClass)) #define VIPS_IS_ICC(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_ICC)) #define VIPS_IS_ICC_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_ICC)) #define VIPS_ICC_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_ICC, VipsIccClass)) typedef struct _VipsIcc { VipsColourCode parent_instance; VipsIntent intent; VipsPCS pcs; int depth; gboolean black_point_compensation; VipsBlob *in_blob; cmsHPROFILE in_profile; VipsBlob *out_blob; cmsHPROFILE out_profile; cmsUInt32Number in_icc_format; cmsUInt32Number out_icc_format; cmsHTRANSFORM trans; gboolean non_standard_input_profile; } VipsIcc; typedef VipsColourCodeClass VipsIccClass; G_DEFINE_ABSTRACT_TYPE(VipsIcc, vips_icc, VIPS_TYPE_COLOUR_CODE); /* Error from lcms. */ static void icc_error(cmsContext context, cmsUInt32Number code, const char *text) { vips_error("VipsIcc", "%s", text); } static void vips_icc_dispose(GObject *gobject) { VipsIcc *icc = (VipsIcc *) gobject; VIPS_FREEF(cmsDeleteTransform, icc->trans); VIPS_FREEF(cmsCloseProfile, icc->in_profile); VIPS_FREEF(cmsCloseProfile, icc->out_profile); if (icc->in_blob) { vips_area_unref((VipsArea *) icc->in_blob); icc->in_blob = NULL; } if (icc->out_blob) { vips_area_unref((VipsArea *) icc->out_blob); icc->out_blob = NULL; } G_OBJECT_CLASS(vips_icc_parent_class)->dispose(gobject); } /* Is a profile just a pcs stub. */ static gboolean is_pcs(cmsHPROFILE profile) { return cmsGetColorSpace(profile) == cmsSigLabData || cmsGetColorSpace(profile) == cmsSigXYZData; } /* Info for all supported lcms profile signatures. */ typedef struct _VipsIccInfo { int signature; int bands; guint lcms_type8; guint lcms_type16; } VipsIccInfo; static VipsIccInfo vips_icc_info_table[] = { { cmsSigGrayData, 1, TYPE_GRAY_8, TYPE_GRAY_16 }, { cmsSigRgbData, 3, TYPE_RGB_8, TYPE_RGB_16 }, { cmsSigLabData, 3, TYPE_Lab_FLT, TYPE_Lab_16 }, { cmsSigXYZData, 3, TYPE_XYZ_FLT, TYPE_XYZ_16 }, { cmsSigCmykData, 4, TYPE_CMYK_8, TYPE_CMYK_16 }, { cmsSig4colorData, 4, TYPE_CMYK_8, TYPE_CMYK_16 }, { cmsSig5colorData, 5, TYPE_CMYK5_8, TYPE_CMYK5_16 }, { cmsSig6colorData, 6, TYPE_CMYK6_8, TYPE_CMYK6_16 }, { cmsSig7colorData, 7, TYPE_CMYK7_8, TYPE_CMYK7_16 }, { cmsSig8colorData, 8, TYPE_CMYK8_8, TYPE_CMYK8_16 }, { cmsSig9colorData, 9, TYPE_CMYK9_8, TYPE_CMYK9_16 }, { cmsSig10colorData, 10, TYPE_CMYK10_8, TYPE_CMYK10_16 }, { cmsSig11colorData, 11, TYPE_CMYK11_8, TYPE_CMYK11_16 }, { cmsSig12colorData, 12, TYPE_CMYK12_8, TYPE_CMYK12_16 }, }; static VipsIccInfo * vips_icc_info(int signature) { int i; for (i = 0; i < VIPS_NUMBER(vips_icc_info_table); i++) if (vips_icc_info_table[i].signature == signature) return &vips_icc_info_table[i]; return NULL; } static int vips_icc_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsColour *colour = (VipsColour *) object; VipsColourCode *code = (VipsColourCode *) object; VipsIcc *icc = (VipsIcc *) object; cmsUInt32Number flags; if (icc->depth != 8 && icc->depth != 16) { vips_error(class->nickname, "%s", _("depth must be 8 or 16")); return -1; } if (icc->in_profile && code->in) { int signature; VipsIccInfo *info; signature = cmsGetColorSpace(icc->in_profile); if (!(info = vips_icc_info(signature))) { vips_error(class->nickname, _("unimplemented input color space 0x%x"), signature); return -1; } colour->input_bands = info->bands; switch (signature) { case cmsSigGrayData: code->input_format = code->in->BandFmt == VIPS_FORMAT_USHORT ? VIPS_FORMAT_USHORT : VIPS_FORMAT_UCHAR; icc->in_icc_format = code->in->BandFmt == VIPS_FORMAT_USHORT ? info->lcms_type16 : info->lcms_type8; break; case cmsSigRgbData: code->input_format = code->in->BandFmt == VIPS_FORMAT_USHORT ? VIPS_FORMAT_USHORT : VIPS_FORMAT_UCHAR; icc->in_icc_format = code->in->BandFmt == VIPS_FORMAT_USHORT ? info->lcms_type16 : info->lcms_type8; break; case cmsSigLabData: code->input_format = VIPS_FORMAT_FLOAT; code->input_interpretation = VIPS_INTERPRETATION_LAB; icc->in_icc_format = info->lcms_type8; break; case cmsSigXYZData: code->input_format = VIPS_FORMAT_FLOAT; code->input_interpretation = VIPS_INTERPRETATION_XYZ; icc->in_icc_format = info->lcms_type8; break; case cmsSigCmykData: case cmsSig5colorData: case cmsSig6colorData: case cmsSig7colorData: case cmsSig8colorData: case cmsSig9colorData: case cmsSig10colorData: case cmsSig11colorData: case cmsSig12colorData: /* Treat as forms of CMYK. */ info = vips_icc_info( cmsGetColorSpace(icc->in_profile)); code->input_format = code->in->BandFmt == VIPS_FORMAT_USHORT ? VIPS_FORMAT_USHORT : VIPS_FORMAT_UCHAR; icc->in_icc_format = code->in->BandFmt == VIPS_FORMAT_USHORT ? info->lcms_type16 : info->lcms_type8; break; default: g_assert_not_reached(); return -1; } } if (icc->out_profile) { int signature; VipsIccInfo *info; signature = cmsGetColorSpace(icc->out_profile); if (!(info = vips_icc_info(signature))) { vips_error(class->nickname, _("unimplemented output color space 0x%x"), signature); return -1; } colour->bands = info->bands; switch (signature) { case cmsSigGrayData: colour->interpretation = icc->depth == 8 ? VIPS_INTERPRETATION_B_W : VIPS_INTERPRETATION_GREY16; colour->format = icc->depth == 8 ? VIPS_FORMAT_UCHAR : VIPS_FORMAT_USHORT; icc->out_icc_format = icc->depth == 16 ? info->lcms_type16 : info->lcms_type8; break; case cmsSigRgbData: colour->interpretation = icc->depth == 8 ? VIPS_INTERPRETATION_sRGB : VIPS_INTERPRETATION_RGB16; colour->format = icc->depth == 8 ? VIPS_FORMAT_UCHAR : VIPS_FORMAT_USHORT; icc->out_icc_format = icc->depth == 16 ? info->lcms_type16 : info->lcms_type8; break; case cmsSigLabData: colour->interpretation = VIPS_INTERPRETATION_LAB; colour->format = VIPS_FORMAT_FLOAT; icc->out_icc_format = info->lcms_type16; break; case cmsSigXYZData: colour->interpretation = VIPS_INTERPRETATION_XYZ; colour->format = VIPS_FORMAT_FLOAT; icc->out_icc_format = info->lcms_type16; break; case cmsSigCmykData: case cmsSig5colorData: case cmsSig6colorData: case cmsSig7colorData: case cmsSig8colorData: case cmsSig9colorData: case cmsSig10colorData: case cmsSig11colorData: case cmsSig12colorData: /* Treat as forms of CMYK. */ colour->interpretation = VIPS_INTERPRETATION_CMYK; colour->format = icc->depth == 8 ? VIPS_FORMAT_UCHAR : VIPS_FORMAT_USHORT; icc->out_icc_format = icc->depth == 16 ? info->lcms_type16 : info->lcms_type8; break; default: g_assert_not_reached(); return -1; } } /* At least one must be a device profile. */ if (icc->in_profile && icc->out_profile && is_pcs(icc->in_profile) && is_pcs(icc->out_profile)) { vips_error(class->nickname, "%s", _("no device profile")); return -1; } /* Use cmsFLAGS_NOCACHE to disable the 1-pixel cache and make * calling cmsDoTransform() from multiple threads safe. */ flags = cmsFLAGS_NOCACHE; if (icc->black_point_compensation) flags |= cmsFLAGS_BLACKPOINTCOMPENSATION; if (!(icc->trans = cmsCreateTransform( icc->in_profile, icc->in_icc_format, icc->out_profile, icc->out_icc_format, icc->intent, flags))) return -1; if (VIPS_OBJECT_CLASS(vips_icc_parent_class)->build(object)) return -1; return 0; } /* Get from an image. */ static VipsBlob * vips_icc_get_profile_image(VipsImage *image) { const void *data; size_t size; if (!vips_image_get_typeof(image, VIPS_META_ICC_NAME)) return NULL; if (vips_image_get_blob(image, VIPS_META_ICC_NAME, &data, &size)) return NULL; return vips_blob_new(NULL, data, size); } #ifdef DEBUG static void vips_icc_print_profile(const char *name, cmsHPROFILE profile) { static const cmsInfoType info_types[] = { cmsInfoDescription, cmsInfoManufacturer, cmsInfoModel, cmsInfoCopyright }; static const char *info_names[] = { "description", "manufacturer", "model", "copyright" }; int i; cmsUInt32Number n_bytes; cmsUInt32Number n_intents; cmsUInt32Number *intent_codes; char **intent_descriptions; printf("icc profile %s: %p\n", name, profile); for (i = 0; i < VIPS_NUMBER(info_types); i++) { if ((n_bytes = cmsGetProfileInfoASCII(profile, info_types[i], "en", "US", NULL, 0))) { char *buffer; buffer = VIPS_ARRAY(NULL, n_bytes, char); (void) cmsGetProfileInfoASCII(profile, info_types[i], "en", "US", buffer, n_bytes); printf("%s: %s\n", info_names[i], buffer); g_free(buffer); } } printf("intent: %d\n", cmsGetHeaderRenderingIntent(profile)); printf("profile class: %#x\n", cmsGetDeviceClass(profile)); { cmsColorSpaceSignature pcs = cmsGetPCS(profile); guint pcs_as_be = GUINT_TO_BE(pcs); char name[5]; vips_strncpy(name, (const char *) &pcs_as_be, 5); printf("PCS: %#x (%s)\n", pcs, name); } printf("matrix shaper: %d\n", cmsIsMatrixShaper(profile)); printf("version: %g\n", cmsGetProfileVersion(profile)); n_intents = cmsGetSupportedIntents(0, NULL, NULL); printf("n_intents = %u\n", n_intents); intent_codes = VIPS_ARRAY(NULL, n_intents, cmsUInt32Number); intent_descriptions = VIPS_ARRAY(NULL, n_intents, char *); (void) cmsGetSupportedIntents(n_intents, intent_codes, intent_descriptions); for (i = 0; i < n_intents; i++) { printf(" %#x: %s, in CLUT = %d, out CLUT = %d\n", intent_codes[i], intent_descriptions[i], cmsIsCLUT(profile, intent_codes[i], LCMS_USED_AS_INPUT), cmsIsCLUT(profile, intent_codes[i], LCMS_USED_AS_OUTPUT)); } g_free(intent_codes); g_free(intent_descriptions); } #endif /*DEBUG*/ /* TRUE if the number of bands in the ICC profile is compatible with the * image. */ static gboolean vips_image_is_profile_compatible(VipsImage *image, int profile_bands) { switch (image->Type) { case VIPS_INTERPRETATION_B_W: case VIPS_INTERPRETATION_GREY16: /* The ICC profile needs to be monochrome. */ return profile_bands == 1; case VIPS_INTERPRETATION_XYZ: case VIPS_INTERPRETATION_LAB: case VIPS_INTERPRETATION_LABQ: case VIPS_INTERPRETATION_RGB: case VIPS_INTERPRETATION_CMC: case VIPS_INTERPRETATION_LCH: case VIPS_INTERPRETATION_LABS: case VIPS_INTERPRETATION_sRGB: case VIPS_INTERPRETATION_YXY: case VIPS_INTERPRETATION_RGB16: case VIPS_INTERPRETATION_scRGB: case VIPS_INTERPRETATION_HSV: /* The band count in the ICC profile must correspond to that of * the image, with a maximum of 3 bands allowed. */ return VIPS_MIN(3, image->Bands) == profile_bands; case VIPS_INTERPRETATION_CMYK: /* CMYK images can only be imported if the ICC-profile has at * least 4 bands thereby blocking the usage of RGB profiles. */ return profile_bands >= 4; case VIPS_INTERPRETATION_MULTIBAND: case VIPS_INTERPRETATION_HISTOGRAM: case VIPS_INTERPRETATION_MATRIX: case VIPS_INTERPRETATION_FOURIER: default: return image->Bands >= profile_bands; } } /* Load a profile from a blob and check compatibility with image, intent and * direction. * * Don't set any errors since this is used to test compatibility. */ static cmsHPROFILE vips_icc_load_profile_blob(VipsBlob *blob, VipsImage *image, VipsIntent intent, int direction) { const void *data; size_t size; cmsHPROFILE profile; VipsIccInfo *info; #ifdef DEBUG printf("loading %s profile, intent %s, from blob %p\n", direction == LCMS_USED_AS_INPUT ? _("input") : _("output"), vips_enum_nick(VIPS_TYPE_INTENT, intent), blob); #endif /*DEBUG*/ data = vips_blob_get(blob, &size); if (!(profile = cmsOpenProfileFromMem(data, size))) { g_warning("%s", _("corrupt profile")); return NULL; } #ifdef DEBUG vips_icc_print_profile("loaded from blob to make", profile); #endif /*DEBUG*/ if (!(info = vips_icc_info(cmsGetColorSpace(profile)))) { VIPS_FREEF(cmsCloseProfile, profile); g_warning("%s", _("unsupported profile")); return NULL; } if (image && !vips_image_is_profile_compatible(image, info->bands)) { VIPS_FREEF(cmsCloseProfile, profile); g_warning("%s", _("profile incompatible with image")); return NULL; } if (!cmsIsIntentSupported(profile, intent, direction)) { VIPS_FREEF(cmsCloseProfile, profile); g_warning(_("profile does not support %s %s intent"), vips_enum_nick(VIPS_TYPE_INTENT, intent), direction == LCMS_USED_AS_INPUT ? _("input") : _("output")); return NULL; } return profile; } /* Verify that a blob is not corrupt and is compatible with this image. * * unref the blob if it's useless. */ static cmsHPROFILE vips_icc_verify_blob(VipsBlob **blob, VipsImage *image, VipsIntent intent) { if (*blob) { cmsHPROFILE profile; if (!(profile = vips_icc_load_profile_blob(*blob, image, intent, LCMS_USED_AS_INPUT))) { vips_area_unref((VipsArea *) *blob); *blob = NULL; } return profile; } return NULL; } /* Try to set the import profile. We read the input profile like this: * * embedded filename action * 0 0 image * 1 0 image * 0 1 file * 1 1 image, then fall back to file * * If averything fails, we fall back to our built-in profiles, either * srgb or cmyk, depending on the input image. * * We set attach_input_profile if we used a non-emdedded profile. The profile * in in_blob will need to be attached to the output image in some way. */ static int vips_icc_set_import(VipsIcc *icc, gboolean embedded, const char *input_profile_filename) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(icc); VipsColourCode *code = (VipsColourCode *) icc; icc->non_standard_input_profile = FALSE; /* Try embedded profile. */ if (code->in && (embedded || !input_profile_filename)) { icc->in_blob = vips_icc_get_profile_image(code->in); icc->in_profile = vips_icc_verify_blob(&icc->in_blob, code->in, icc->intent); } /* Try profile from filename. */ if (code->in && !icc->in_blob && input_profile_filename) { if ( !vips_profile_load(input_profile_filename, &icc->in_blob, NULL) && (icc->in_profile = vips_icc_verify_blob(&icc->in_blob, code->in, icc->intent))) icc->non_standard_input_profile = TRUE; } /* Try built-in profile. */ if (code->in && !icc->in_profile) { const char *name; switch (code->in->Type) { case VIPS_INTERPRETATION_B_W: case VIPS_INTERPRETATION_GREY16: name = "sgrey"; break; case VIPS_INTERPRETATION_CMYK: name = "cmyk"; break; default: name = "srgb"; break; } if ( !vips_profile_load(name, &icc->in_blob, NULL) && (icc->in_profile = vips_icc_verify_blob(&icc->in_blob, code->in, icc->intent))) icc->non_standard_input_profile = TRUE; } if (!icc->in_profile) { vips_error(class->nickname, "%s", _("unable to load or find any compatible input profile")); return -1; } return 0; } static void vips_icc_class_init(VipsIccClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->dispose = vips_icc_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "icc"; object_class->description = _("transform using ICC profiles"); object_class->build = vips_icc_build; VIPS_ARG_ENUM(class, "intent", 6, _("Intent"), _("Rendering intent"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsIcc, intent), VIPS_TYPE_INTENT, VIPS_INTENT_RELATIVE); VIPS_ARG_ENUM(class, "pcs", 6, _("PCS"), _("Set Profile Connection Space"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsIcc, pcs), VIPS_TYPE_PCS, VIPS_PCS_LAB); VIPS_ARG_BOOL(class, "black_point_compensation", 7, _("Black point compensation"), _("Enable black point compensation"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsIcc, black_point_compensation), FALSE); cmsSetLogErrorHandler(icc_error); } static void vips_icc_init(VipsIcc *icc) { icc->intent = VIPS_INTENT_RELATIVE; icc->pcs = VIPS_PCS_LAB; icc->depth = 8; } typedef struct _VipsIccImport { VipsIcc parent_instance; gboolean embedded; char *input_profile_filename; } VipsIccImport; typedef VipsIccClass VipsIccImportClass; G_DEFINE_TYPE(VipsIccImport, vips_icc_import, VIPS_TYPE_ICC); static int vips_icc_import_build(VipsObject *object) { VipsColour *colour = (VipsColour *) object; VipsIcc *icc = (VipsIcc *) object; VipsIccImport *import = (VipsIccImport *) object; if (vips_icc_set_import(icc, import->embedded, import->input_profile_filename)) return -1; if (icc->pcs == VIPS_PCS_LAB) { cmsCIExyY white; cmsWhitePointFromTemp(&white, 6504); icc->out_profile = cmsCreateLab4Profile(&white); } else icc->out_profile = cmsCreateXYZProfile(); if (VIPS_OBJECT_CLASS(vips_icc_import_parent_class)->build(object)) return -1; /* If we used the fallback profile, we need to attach it to the PCS * image, since the PCS image needs a route back to device space. * * In the same way, we don't remove the embedded input profile on * import. */ if (icc->non_standard_input_profile && icc->in_blob) { const void *data; size_t size; data = vips_blob_get(icc->in_blob, &size); vips_image_set_blob(colour->out, VIPS_META_ICC_NAME, NULL, data, size); } return 0; } static void decode_lab(guint16 *fixed, float *lab, int n) { int i; for (i = 0; i < n; i++) { /* cmsLabEncoded2Float inlined. */ lab[0] = (double) fixed[0] / 655.35; lab[1] = ((double) fixed[1] / 257.0) - 128.0; lab[2] = ((double) fixed[2] / 257.0) - 128.0; lab += 3; fixed += 3; } } /* The matrix already includes the D65 channel weighting, so we just scale by * Y. */ #define SCALE (VIPS_D65_Y0) static void decode_xyz(guint16 *fixed, float *xyz, int n) { int i; for (i = 0; i < n; i++) { /* cmsXYZEncoded2Float inlined. */ float X = fixed[0] / 32768.0; float Y = fixed[1] / 32768.0; float Z = fixed[2] / 32768.0; X *= SCALE; Y *= SCALE; Z *= SCALE; /* Transform XYZ D50 to D65, chromatic adaption is done with the * Bradford transformation. * See: https://fujiwaratko.sakura.ne.jp/infosci/colorspace/bradford_e.html */ xyz[0] = 0.955513 * X + -0.023073 * Y + 0.063309 * Z; xyz[1] = -0.028325 * X + 1.009942 * Y + 0.021055 * Z; xyz[2] = 0.012329 * X + -0.020536 * Y + 1.330714 * Z; xyz += 3; fixed += 3; } } /* Process a buffer of data. */ static void vips_icc_import_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { VipsIcc *icc = (VipsIcc *) colour; VipsPel *p; float *q; int i; /* Buffer of encoded 16-bit pixels we transform. */ guint16 encoded[3 * PIXEL_BUFFER_SIZE]; p = (VipsPel *) in[0]; q = (float *) out; for (i = 0; i < width; i += PIXEL_BUFFER_SIZE) { const int chunk = VIPS_MIN(width - i, PIXEL_BUFFER_SIZE); cmsDoTransform(icc->trans, p, encoded, chunk); if (icc->pcs == VIPS_PCS_LAB) decode_lab(encoded, q, chunk); else decode_xyz(encoded, q, chunk); // use input_bands, since in[0] may have had alpha removed, // and can have 1, 3 or 4 bands p += PIXEL_BUFFER_SIZE * colour->input_bands * VIPS_IMAGE_SIZEOF_ELEMENT(colour->in[0]); q += PIXEL_BUFFER_SIZE * 3; } } static void vips_icc_import_class_init(VipsIccImportClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "icc_import"; object_class->description = _("import from device with ICC profile"); object_class->build = vips_icc_import_build; colour_class->process_line = vips_icc_import_line; VIPS_ARG_BOOL(class, "embedded", 110, _("Embedded"), _("Use embedded input profile, if available"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsIccImport, embedded), FALSE); VIPS_ARG_STRING(class, "input_profile", 120, _("Input profile"), _("Filename to load input profile from"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsIccImport, input_profile_filename), NULL); } static void vips_icc_import_init(VipsIccImport *import) { } typedef struct _VipsIccExport { VipsIcc parent_instance; char *output_profile_filename; } VipsIccExport; typedef VipsIccClass VipsIccExportClass; G_DEFINE_TYPE(VipsIccExport, vips_icc_export, VIPS_TYPE_ICC); static int vips_icc_export_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsColour *colour = (VipsColour *) object; VipsColourCode *code = (VipsColourCode *) object; VipsIcc *icc = (VipsIcc *) object; VipsIccExport *export = (VipsIccExport *) object; /* If icc->pcs hasn't been set and this image is tagged as XYZ, swap * to XYZ pcs. This will save a XYZ->LAB conversion when we chain up. */ if (!vips_object_argument_isset(object, "pcs") && code->in && code->in->Type == VIPS_INTERPRETATION_XYZ) icc->pcs = VIPS_PCS_XYZ; if (icc->pcs == VIPS_PCS_LAB) { cmsCIExyY white; cmsWhitePointFromTemp(&white, 6504); icc->in_profile = cmsCreateLab4Profile(&white); } else icc->in_profile = cmsCreateXYZProfile(); if (code->in && !export->output_profile_filename) icc->out_blob = vips_icc_get_profile_image(code->in); if (!icc->out_blob && export->output_profile_filename) { if (vips_profile_load(export->output_profile_filename, &icc->out_blob, NULL)) return -1; colour->profile_filename = export->output_profile_filename; } if (icc->out_blob && !(icc->out_profile = vips_icc_load_profile_blob(icc->out_blob, NULL, icc->intent, LCMS_USED_AS_OUTPUT))) { vips_error(class->nickname, "%s", _("no output profile")); return -1; } if (VIPS_OBJECT_CLASS(vips_icc_export_parent_class)->build(object)) return -1; return 0; } static void encode_xyz(float *in, float *out, int n) { int i; for (i = 0; i < n; i++) { float X = in[0] / SCALE; float Y = in[1] / SCALE; float Z = in[2] / SCALE; /* Transform XYZ D65 to D50, chromatic adaption is done with the * Bradford transformation. * See: https://fujiwaratko.sakura.ne.jp/infosci/colorspace/bradford_e.html */ out[0] = 1.047886 * X + 0.022919 * Y + -0.050216 * Z; out[1] = 0.029582 * X + 0.990484 * Y + -0.017079 * Z; out[2] = -0.009252 * X + 0.015073 * Y + 0.751678 * Z; in += 3; out += 3; } } static void vips_icc_export_line_xyz(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { VipsIcc *icc = (VipsIcc *) colour; float *p; VipsPel *q; int x; /* Buffer of encoded float pixels we transform to device space. */ float encoded[3 * PIXEL_BUFFER_SIZE]; p = (float *) in[0]; q = (VipsPel *) out; for (x = 0; x < width; x += PIXEL_BUFFER_SIZE) { const int chunk = VIPS_MIN(width - x, PIXEL_BUFFER_SIZE); encode_xyz(p, encoded, chunk); cmsDoTransform(icc->trans, encoded, q, chunk); p += PIXEL_BUFFER_SIZE * 3; // use colour->bands, since out may have had alpha reattached // and can have extra bands q += PIXEL_BUFFER_SIZE * colour->bands * VIPS_IMAGE_SIZEOF_ELEMENT(colour->out); } } /* Process a buffer of data. */ static void vips_icc_export_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { VipsIcc *icc = (VipsIcc *) colour; if (icc->pcs == VIPS_PCS_LAB) cmsDoTransform(icc->trans, in[0], out, width); else vips_icc_export_line_xyz(colour, out, in, width); } static void vips_icc_export_class_init(VipsIccExportClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "icc_export"; object_class->description = _("output to device with ICC profile"); object_class->build = vips_icc_export_build; colour_class->process_line = vips_icc_export_line; VIPS_ARG_STRING(class, "output_profile", 110, _("Output profile"), _("Filename to load output profile from"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsIccExport, output_profile_filename), NULL); VIPS_ARG_INT(class, "depth", 130, _("Depth"), _("Output device space depth in bits"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsIcc, depth), 8, 16, 8); } static void vips_icc_export_init(VipsIccExport *export) { } typedef struct _VipsIccTransform { VipsIcc parent_instance; gboolean embedded; char *input_profile_filename; char *output_profile_filename; } VipsIccTransform; typedef VipsIccClass VipsIccTransformClass; G_DEFINE_TYPE(VipsIccTransform, vips_icc_transform, VIPS_TYPE_ICC); static int vips_icc_transform_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsColour *colour = (VipsColour *) object; VipsColourCode *code = (VipsColourCode *) object; VipsIcc *icc = (VipsIcc *) object; VipsIccTransform *transform = (VipsIccTransform *) object; /* Depth defaults to 16 for 16 bit images. */ if (!vips_object_argument_isset(object, "depth") && code->in && (code->in->Type == VIPS_INTERPRETATION_RGB16 || code->in->Type == VIPS_INTERPRETATION_GREY16)) icc->depth = 16; if (vips_icc_set_import(icc, transform->embedded, transform->input_profile_filename)) return -1; if (transform->output_profile_filename) { if (vips_profile_load(transform->output_profile_filename, &icc->out_blob, NULL)) return -1; colour->profile_filename = transform->output_profile_filename; } if (icc->out_blob) icc->out_profile = vips_icc_load_profile_blob(icc->out_blob, NULL, icc->intent, LCMS_USED_AS_OUTPUT); if (!icc->out_profile) { vips_error(class->nickname, "%s", _("no output profile")); return -1; } if (VIPS_OBJECT_CLASS(vips_icc_transform_parent_class)->build(object)) return -1; return 0; } /* Process a buffer of data. */ static void vips_icc_transform_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { VipsIcc *icc = (VipsIcc *) colour; cmsDoTransform(icc->trans, in[0], out, width); } static void vips_icc_transform_class_init(VipsIccImportClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "icc_transform"; object_class->description = _("transform between devices with ICC profiles"); object_class->build = vips_icc_transform_build; colour_class->process_line = vips_icc_transform_line; VIPS_ARG_STRING(class, "output_profile", 110, _("Output profile"), _("Filename to load output profile from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsIccTransform, output_profile_filename), NULL); VIPS_ARG_BOOL(class, "embedded", 120, _("Embedded"), _("Use embedded input profile, if available"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsIccTransform, embedded), FALSE); VIPS_ARG_STRING(class, "input_profile", 130, _("Input profile"), _("Filename to load input profile from"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsIccTransform, input_profile_filename), NULL); VIPS_ARG_INT(class, "depth", 140, _("Depth"), _("Output device space depth in bits"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsIcc, depth), 8, 16, 8); } static void vips_icc_transform_init(VipsIccTransform *transform) { } /** * vips_icc_ac2rc: (method) * @in: input image * @out: (out): output image * @profile_filename: use this profile * * Transform an image from absolute to relative colorimetry using the * MediaWhitePoint stored in the ICC profile. * * See also: vips_icc_transform(), vips_icc_import(). * * Returns: 0 on success, -1 on error. */ int vips_icc_ac2rc(VipsImage *in, VipsImage **out, const char *profile_filename) { VipsImage *t; cmsHPROFILE profile; cmsCIEXYZ *media; double X, Y, Z; double *add; double *mul; int i; #ifdef G_OS_WIN32 if (!(profile = cmsOpenProfileFromFile(profile_filename, "r"))) #else /*!G_OS_WIN32*/ if (!(profile = cmsOpenProfileFromFile(profile_filename, "re"))) #endif /*G_OS_WIN32*/ return -1; #ifdef DEBUG vips_icc_print_profile(profile_filename, profile); #endif /*DEBUG*/ if (!(media = cmsReadTag(profile, cmsSigMediaWhitePointTag))) { vips_error("vips_icc_ac2rc", "%s", _("unable to get media white point")); return -1; } X = media->X; Y = media->Y; Z = media->Z; cmsCloseProfile(profile); /* We need XYZ so we can adjust the white balance. */ if (vips_colourspace(in, &t, VIPS_INTERPRETATION_XYZ, NULL)) return -1; in = t; if (!(add = VIPS_ARRAY(in, in->Bands, double)) || !(mul = VIPS_ARRAY(in, in->Bands, double))) return -1; /* There might be extra bands off to the right somewhere. */ for (i = 0; i < in->Bands; i++) add[i] = 0.0; mul[0] = VIPS_D50_X0 / (X * 100.0); mul[1] = VIPS_D50_Y0 / (Y * 100.0); mul[2] = VIPS_D50_Z0 / (Z * 100.0); for (i = 3; i < in->Bands; i++) mul[i] = 1.0; if (vips_linear(in, &t, add, mul, in->Bands, NULL)) { g_object_unref(in); return -1; } g_object_unref(in); in = t; *out = in; return 0; } /* TRUE if a profile is sane and is compatible with an image. */ gboolean vips_icc_is_compatible_profile(VipsImage *image, const void *data, size_t data_length) { cmsHPROFILE profile; VipsIccInfo *info; if (!(profile = cmsOpenProfileFromMem(data, data_length))) /* Corrupt profile. */ return FALSE; #ifdef DEBUG vips_icc_print_profile("from memory", profile); #endif /*DEBUG*/ if (!(info = vips_icc_info(cmsGetColorSpace(profile)))) { /* Unsupported profile. */ VIPS_FREEF(cmsCloseProfile, profile); return FALSE; } if (!vips_image_is_profile_compatible(image, info->bands)) { /* Bands mismatch. */ VIPS_FREEF(cmsCloseProfile, profile); return FALSE; } VIPS_FREEF(cmsCloseProfile, profile); return TRUE; } #else /*!HAVE_LCMS2*/ #include int vips_icc_present(void) { return 0; } int vips_icc_ac2rc(VipsImage *in, VipsImage **out, const char *profile_filename) { vips_error("VipsIcc", "%s", _("libvips configured without lcms support")); return -1; } gboolean vips_icc_is_compatible_profile(VipsImage *image, const void *data, size_t data_length) { return TRUE; } #endif /*HAVE_LCMS2*/ /** * vips_icc_import: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @pcs: #VipsPCS, use XYZ or LAB PCS * * @intent: #VipsIntent, transform with this intent * * @black_point_compensation: %gboolean, enable black point compensation * * @embedded: %gboolean, use profile embedded in input image * * @input_profile: %gchararray, get the input profile from here * * Import an image from device space to D65 LAB with an ICC profile. If @pcs is * set to #VIPS_PCS_XYZ, use CIE XYZ PCS instead. * * The input profile is searched for in three places: * * 1. If @embedded is set, libvips will try to use any profile in the input * image metadata. You can test for the presence of an embedded profile * with vips_image_get_typeof() with #VIPS_META_ICC_NAME as an argument. * This will return %GType 0 if there is no profile. * * 2. Otherwise, if @input_profile is set, libvips will try to load a * profile from the named file. This can aslso be the name of one of the * built-in profiles. * * 3. Otherwise, libvips will try to pick a compatible profile from the set * of built-in profiles. * * If @black_point_compensation is set, LCMS black point compensation is * enabled. * * Returns: 0 on success, -1 on error. */ int vips_icc_import(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("icc_import", ap, in, out); va_end(ap); return result; } /** * vips_icc_export: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @pcs: #VipsPCS, use XYZ or LAB PCS * * @intent: #VipsIntent, transform with this intent * * @black_point_compensation: %gboolean, enable black point compensation * * @output_profile: %gchararray, get the output profile from here * * @depth: %gint, depth of output image in bits * * Export an image from D65 LAB to device space with an ICC profile. * If @pcs is * set to #VIPS_PCS_XYZ, use CIE XYZ PCS instead. * If @output_profile is not set, use the embedded profile, if any. * If @output_profile is set, export with that and attach it to the output * image. * * If @black_point_compensation is set, LCMS black point compensation is * enabled. * * Returns: 0 on success, -1 on error. */ int vips_icc_export(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("icc_export", ap, in, out); va_end(ap); return result; } /** * vips_icc_transform: (method) * @in: input image * @out: (out): output image * @output_profile: get the output profile from here * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @pcs: #VipsPCS, use XYZ or LAB PCS * * @intent: #VipsIntent, transform with this intent * * @black_point_compensation: %gboolean, enable black point compensation * * @embedded: %gboolean, use profile embedded in input image * * @input_profile: %gchararray, get the input profile from here * * @depth: %gint, depth of output image in bits * * Transform an image with a pair of ICC profiles. The input image is moved to * profile-connection space with the input profile and then to the output * space with the output profile. * * The input profile is searched for in three places: * * 1. If @embedded is set, libvips will try to use any profile in the input * image metadata. You can test for the presence of an embedded profile * with vips_image_get_typeof() with #VIPS_META_ICC_NAME as an argument. * This will return %GType 0 if there is no profile. * * 2. Otherwise, if @input_profile is set, libvips will try to load a * profile from the named file. This can aslso be the name of one of the * built-in profiles. * * 3. Otherwise, libvips will try to pick a compatible profile from the set * of built-in profiles. * * If @black_point_compensation is set, LCMS black point compensation is * enabled. * * @depth defaults to 8, or 16 if @in is a 16-bit image. * * The output image has the output profile attached to the #VIPS_META_ICC_NAME * field. * * Use vips_icc_import() and vips_icc_export() to do either the first or * second half of this operation in isolation. * * Returns: 0 on success, -1 on error. */ int vips_icc_transform(VipsImage *in, VipsImage **out, const char *output_profile, ...) { va_list ap; int result; va_start(ap, output_profile); result = vips_call_split("icc_transform", ap, in, out, output_profile); va_end(ap); return result; } libvips-8.15.1/libvips/colour/meson.build000066400000000000000000000016311454007373500204040ustar00rootroot00000000000000colour_sources = files( 'profiles.c', 'profile_load.c', 'colour.c', 'CMYK2XYZ.c', 'XYZ2CMYK.c', 'colourspace.c', 'dE76.c', 'dE00.c', 'dECMC.c', 'icc_transform.c', 'Lab2XYZ.c', 'Lab2LCh.c', 'LCh2Lab.c', 'LCh2UCS.c', 'UCS2LCh.c', 'XYZ2Lab.c', 'XYZ2Yxy.c', 'Yxy2XYZ.c', 'float2rad.c', 'rad2float.c', 'Lab2LabQ.c', 'LabQ2Lab.c', 'LabS2Lab.c', 'Lab2LabS.c', 'LabS2LabQ.c', 'LabQ2LabS.c', 'LabQ2sRGB.c', 'sRGB2scRGB.c', 'sRGB2HSV.c', 'HSV2sRGB.c', 'scRGB2XYZ.c', 'scRGB2BW.c', 'XYZ2scRGB.c', 'scRGB2sRGB.c', ) colour_headers = files( 'profiles.h', 'pcolour.h', ) libvips_sources += colour_sources colour_lib = static_library('colour', colour_sources, colour_headers, dependencies: libvips_deps, gnu_symbol_visibility: 'hidden', ) libvips_components += colour_lib libvips-8.15.1/libvips/colour/pcolour.h000066400000000000000000000142141454007373500200770ustar00rootroot00000000000000/* base class for all colour operations */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_PCOLOUR_H #define VIPS_PCOLOUR_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #include #define VIPS_TYPE_COLOUR (vips_colour_get_type()) #define VIPS_COLOUR(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_COLOUR, VipsColour)) #define VIPS_COLOUR_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_COLOUR, VipsColourClass)) #define VIPS_IS_COLOUR(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_COLOUR)) #define VIPS_IS_COLOUR_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_COLOUR)) #define VIPS_COLOUR_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_COLOUR, VipsColourClass)) struct _VipsColour; typedef void (*VipsColourProcessFn)(struct _VipsColour *colour, VipsPel *out, VipsPel **in, int width); typedef struct _VipsColour { VipsOperation parent_instance; /* Null-terminated array of input arguments, set these from a * subclass. */ VipsImage **in; int n; /* If this is >0, only process this many bands from the input. Extra * bands are removed and reattached after processing. */ int input_bands; VipsImage *out; /* Set fields on ->out from these. */ VipsCoding coding; VipsInterpretation interpretation; VipsBandFormat format; int bands; /* Attach this profile, if set. */ char *profile_filename; } VipsColour; typedef struct _VipsColourClass { VipsOperationClass parent_class; /* The buffer processor. */ VipsColourProcessFn process_line; } VipsColourClass; GType vips_colour_get_type(void); /* A float in, float out colourspace transformation. */ #define VIPS_TYPE_COLOUR_TRANSFORM (vips_colour_transform_get_type()) #define VIPS_COLOUR_TRANSFORM(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_COLOUR_TRANSFORM, VipsColourTransform)) #define VIPS_COLOUR_TRANSFORM_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_COLOUR_TRANSFORM, VipsColourTransformClass)) #define VIPS_IS_COLOUR_TRANSFORM(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_COLOUR_TRANSFORM)) #define VIPS_IS_COLOUR_TRANSFORM_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_COLOUR_TRANSFORM)) #define VIPS_COLOUR_TRANSFORM_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_COLOUR_TRANSFORM, VipsColourTransformClass)) typedef struct _VipsColourTransform { VipsColour parent_instance; VipsImage *in; } VipsColourTransform; typedef struct _VipsColourTransformClass { VipsColourClass parent_class; } VipsColourTransformClass; GType vips_colour_transform_get_type(void); /* Change colour encoding ... either in or out is not three-band float. */ #define VIPS_TYPE_COLOUR_CODE (vips_colour_code_get_type()) #define VIPS_COLOUR_CODE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_COLOUR_CODE, VipsColourCode)) #define VIPS_COLOUR_CODE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_COLOUR_CODE, VipsColourCodeClass)) #define VIPS_IS_COLOUR_CODE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_COLOUR_CODE)) #define VIPS_IS_COLOUR_CODE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_COLOUR_CODE)) #define VIPS_COLOUR_CODE_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_COLOUR_CODE, VipsColourCodeClass)) typedef struct _VipsColourCode { VipsColour parent_instance; VipsImage *in; /* Test in against these. */ VipsCoding input_coding; VipsBandFormat input_format; VipsInterpretation input_interpretation; } VipsColourCode; typedef struct _VipsColourCodeClass { VipsColourClass parent_class; } VipsColourCodeClass; GType vips_colour_code_get_type(void); /* Difference between two colour images. */ #define VIPS_TYPE_COLOUR_DIFFERENCE (vips_colour_difference_get_type()) #define VIPS_COLOUR_DIFFERENCE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_COLOUR_DIFFERENCE, VipsColourDifference)) #define VIPS_COLOUR_DIFFERENCE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_COLOUR_DIFFERENCE, VipsColourDifferenceClass)) #define VIPS_IS_COLOUR_DIFFERENCE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_COLOUR_DIFFERENCE)) #define VIPS_IS_COLOUR_DIFFERENCE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_COLOUR_DIFFERENCE)) #define VIPS_COLOUR_DIFFERENCE_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_COLOUR_DIFFERENCE, VipsColourDifferenceClass)) typedef struct _VipsColourDifference { VipsColour parent_instance; VipsImage *left; VipsImage *right; /* Both get converted to this space. */ VipsInterpretation interpretation; } VipsColourDifference; typedef struct _VipsColourDifferenceClass { VipsColourClass parent_class; } VipsColourDifferenceClass; GType vips_colour_difference_get_type(void); void vips__pythagoras_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width); /* Colour tables for Y<->v conversion. Call vips_col_make_tables_RGB_8() and * vips_col_make_tables_RGB_16() before use to initialize. */ extern float vips_v2Y_8[256]; extern float vips_v2Y_16[65536]; void vips_col_make_tables_RGB_8(void); void vips_col_make_tables_RGB_16(void); /* A colour-transforming function. */ typedef int (*VipsColourTransformFn)(VipsImage *in, VipsImage **out, ...); int vips__colourspace_process_n(const char *domain, VipsImage *in, VipsImage **out, int n, VipsColourTransformFn fn); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_PCOLOUR_H*/ libvips-8.15.1/libvips/colour/profile_load.c000066400000000000000000000125411454007373500210470ustar00rootroot00000000000000/* Load profiles as blobs. * * 10/1/19 * - from CMYK2XYZ.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "profiles.h" #include "pcolour.h" typedef struct _VipsProfileLoad { VipsOperation parent_instance; const char *name; VipsBlob *profile; } VipsProfileLoad; typedef VipsOperationClass VipsProfileLoadClass; G_DEFINE_TYPE(VipsProfileLoad, vips_profile_load, VIPS_TYPE_OPERATION); static const void * vips_profile_fallback_get(const char *name, size_t *length) { int i; VipsProfileFallback *fallback; for (i = 0; (fallback = vips__profile_fallback_table[i]); i++) if (g_ascii_strcasecmp(fallback->name, name) == 0) { void *data; GConverter *converter; GConverterResult res; gsize bytes_read; gsize bytes_written; data = g_malloc0(fallback->length); converter = G_CONVERTER(g_zlib_decompressor_new( G_ZLIB_COMPRESSOR_FORMAT_ZLIB)); res = g_converter_convert(converter, fallback->data, fallback->length, data, fallback->length, G_CONVERTER_INPUT_AT_END, &bytes_read, &bytes_written, NULL); g_object_unref(converter); if (res == G_CONVERTER_FINISHED) { *length = fallback->length; return data; } else { g_free(data); g_warning("fallback profile decompression failed"); } } return NULL; } static int vips_profile_load_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsProfileLoad *load = (VipsProfileLoad *) object; size_t length; const void *data; VipsBlob *profile; if (VIPS_OBJECT_CLASS(vips_profile_load_parent_class)->build(object)) return -1; if (g_ascii_strcasecmp(load->name, "none") == 0) profile = NULL; else if ((data = vips_profile_fallback_get(load->name, &length))) profile = vips_blob_new( (VipsCallbackFn) vips_area_free_cb, data, length); else if ((data = vips__file_read_name(load->name, vips__icc_dir(), &length))) profile = vips_blob_new( (VipsCallbackFn) vips_area_free_cb, data, length); else { vips_error(class->nickname, _("unable to load profile \"%s\""), load->name); return -1; } g_object_set(object, "profile", profile, NULL); if (profile) { vips_area_unref((VipsArea *) profile); profile = NULL; } return 0; } static void vips_profile_load_class_init(VipsProfileLoadClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "profile_load"; object_class->description = _("load named ICC profile"); object_class->build = vips_profile_load_build; VIPS_ARG_STRING(class, "name", 1, _("Name"), _("Profile name"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsProfileLoad, name), NULL); VIPS_ARG_BOXED(class, "profile", 2, _("Profile"), _("Loaded profile"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsProfileLoad, profile), VIPS_TYPE_BLOB); } static void vips_profile_load_init(VipsProfileLoad *load) { } /** * vips_profile_load: * @name: name of profile to load * @profile: (out): loaded profile * @...: %NULL-terminated list of optional named arguments * * Load a named profile. * * Profiles are loaded from four sources: * * - The special name `"none"` means no profile. @profile will be %NULL in this * case. * * - @name can be the name of one of the ICC profiles embedded in libvips. * These names can be at least `"cmyk"`, `"p3"` and `"srgb"`. * * - @name can be the full path to a file. * * - @name can be the name of an ICC profile in the system profile directory * for your platform. * * Returns: 0 on success, -1 on error */ int vips_profile_load(const char *name, VipsBlob **profile, ...) { va_list ap; int result; va_start(ap, profile); result = vips_call_split("profile_load", ap, name, profile); va_end(ap); return result; } /* Set (or remove) a named profile on an image. */ int vips__profile_set(VipsImage *image, const char *name) { VipsBlob *profile; if (vips_profile_load(name, &profile, NULL)) return -1; if (profile) { GValue value = G_VALUE_INIT; g_value_init(&value, VIPS_TYPE_BLOB); g_value_set_boxed(&value, profile); vips_image_set(image, VIPS_META_ICC_NAME, &value); g_value_unset(&value); } else vips_image_remove(image, VIPS_META_ICC_NAME); if (profile) { vips_area_unref((VipsArea *) profile); profile = NULL; } return 0; } libvips-8.15.1/libvips/colour/profiles.c000066400000000000000000107606651454007373500202550ustar00rootroot00000000000000/* this file is generated automatically, do not edit! */ /* clang-format off */ #include "profiles.h" static VipsProfileFallback vips__profile_fallback_cmyk = { "cmyk", 961644, { 0x78, 0xDA, 0xAC, 0x99, 0x03, 0x40, 0xDD, 0xFF, 0xFF, 0xFD, 0x6F, 0x5A, 0x5C, 0xDA, 0x6A, 0xD9, 0xB6, 0x6D, 0xDB, 0xD6, 0xBA, 0xD9, 0xB8, 0xD9, 0x36, 0x96, 0x6D, 0x2F, 0xDB, 0x36, 0x97, 0xD7, 0x32, 0xB6, 0x5A, 0xAE, 0x55, 0xCB, 0xF8, 0xBF, 0xBF, 0x9F, 0xBF, 0xAD, 0xDF, 0xF3, 0xEA, 0x5C, 0xFB, 0x7D, 0x1E, 0xAF, 0x73, 0x40, 0xA8, 0xD5, 0x76, 0x60, 0x88, 0xA5, 0x1D, 0x34, 0x09, 0x08, 0xE4, 0x04, 0x71, 0x85, 0x88, 0x2B, 0xEA, 0xCA, 0x2B, 0x80, 0x4D, 0x48, 0xE0, 0xB7, 0x40, 0x08, 0x20, 0x5C, 0x10, 0x0A, 0x88, 0x06, 0xC4, 0x09, 0x36, 0x75, 0x71, 0x52, 0x54, 0x97, 0xD2, 0x00, 0xFD, 0x8F, 0x07, 0x0A, 0x04, 0xBA, 0xFD, 0x0E, 0x1C, 0x03, 0xB3, 0xC8, 0xF8, 0xAF, 0xC7, 0x02, 0xFD, 0xDF, 0x0D, 0x9A, 0x99, 0xB9, 0x8B, 0x29, 0xF0, 0x30, 0x3C, 0x80, 0xB6, 0x36, 0x05, 0x5E, 0x04, 0xA0, 0x4B, 0x00, 0x6D, 0xE9, 0xE1, 0xEA, 0x04, 0x68, 0x68, 0x14, 0x40, 0x7F, 0x34, 0xB1, 0xFD, 0x47, 0x93, 0xFC, 0x4B, 0x9B, 0xDA, 0x41, 0xFE, 0xA5, 0x39, 0x00, 0x5D, 0x22, 0xCA, 0x26, 0xC6, 0x0A, 0xE8, 0x1F, 0x20, 0xD0, 0xFC, 0x23, 0xA0, 0x59, 0xFE, 0x0B, 0xCD, 0xF6, 0x1F, 0xB5, 0x18, 0x9B, 0x28, 0x70, 0x9B, 0xA5, 0x25, 0x40, 0x77, 0x03, 0x9A, 0x05, 0x04, 0x55, 0x96, 0xF0, 0x1F, 0x34, 0x1B, 0x08, 0xDA, 0x53, 0xE1, 0x5F, 0xDA, 0x12, 0x6C, 0xEF, 0x0A, 0x82, 0x91, 0x43, 0x00, 0x81, 0x98, 0xD2, 0x5C, 0x81, 0x37, 0x01, 0x82, 0xF1, 0x2C, 0x00, 0x21, 0xB3, 0x4F, 0x49, 0x98, 0xBB, 0x4B, 0xFC, 0x47, 0x2D, 0x2E, 0x2B, 0xF9, 0x9F, 0xF4, 0x3F, 0xAF, 0xF9, 0x3F, 0xBC, 0x7E, 0x71, 0x2B, 0x73, 0x7B, 0x6B, 0x53, 0xB0, 0x1D, 0x89, 0x13, 0xC4, 0xD1, 0xD1, 0x02, 0xF4, 0x6F, 0x3E, 0xAE, 0xE6, 0x9E, 0xAE, 0x20, 0x60, 0xC4, 0x21, 0xE6, 0x60, 0x57, 0x73, 0x33, 0x12, 0x13, 0x2F, 0x12, 0x69, 0x08, 0xD8, 0xDC, 0xDE, 0x9C, 0x44, 0x9B, 0x89, 0x44, 0xDA, 0xDA, 0xCE, 0x8E, 0x89, 0x44, 0xCD, 0xDC, 0xCE, 0x1C, 0xEC, 0x02, 0x5C, 0x67, 0xED, 0xE0, 0xEA, 0x48, 0xE2, 0x6A, 0x65, 0x4E, 0xE2, 0xE4, 0x66, 0x62, 0x67, 0x6D, 0x4A, 0x62, 0xE6, 0x68, 0x0F, 0xB6, 0x76, 0x60, 0x22, 0x51, 0x72, 0x24, 0xD1, 0x06, 0x43, 0x20, 0x60, 0x07, 0x57, 0x2F, 0x06, 0x12, 0x4D, 0x17, 0x73, 0x12, 0xB0, 0x2B, 0x89, 0x97, 0xA3, 0x1B, 0x84, 0xC4, 0xD1, 0xC3, 0x81, 0x04, 0x62, 0xED, 0x62, 0xCB, 0x04, 0x02, 0xE9, 0xE8, 0xEA, 0x91, 0x80, 0xFE, 0x99, 0xDD, 0x49, 0x10, 0xE8, 0x28, 0x1A, 0x04, 0x1A, 0x52, 0xFD, 0xCF, 0x97, 0xC1, 0x52, 0x00, 0x07, 0x3E, 0x10, 0x08, 0xA6, 0xE0, 0x9F, 0xCF, 0xFF, 0x3F, 0x5C, 0x28, 0xEE, 0x05, 0x76, 0xF8, 0x5F, 0xBD, 0xF6, 0x04, 0x4F, 0x7D, 0x6E, 0x79, 0x78, 0x45, 0xB0, 0xA5, 0xB9, 0x83, 0x2B, 0xF8, 0x7F, 0x7A, 0xAB, 0x30, 0xF2, 0x99, 0x24, 0xDF, 0x3B, 0x5D, 0x73, 0x3B, 0x3B, 0x47, 0x8F, 0xFF, 0xF9, 0x63, 0x5D, 0xA1, 0xF9, 0x52, 0xED, 0x13, 0x8B, 0xD9, 0x81, 0x4D, 0x6D, 0x41, 0xFF, 0xF3, 0xA1, 0x74, 0x0C, 0x79, 0xF2, 0x19, 0xB0, 0xB7, 0x70, 0x65, 0xFB, 0xE7, 0x05, 0xC2, 0x20, 0xFE, 0xF3, 0x0B, 0xFD, 0x2F, 0xE7, 0x7F, 0x74, 0x1E, 0x16, 0xD8, 0x01, 0xA3, 0x07, 0x6A, 0x86, 0x7A, 0x0F, 0x65, 0x09, 0x35, 0x00, 0x8D, 0x0F, 0xED, 0x0A, 0xFD, 0x0D, 0x86, 0x06, 0x26, 0x08, 0x66, 0x1D, 0x96, 0x13, 0x36, 0x1E, 0xF6, 0x10, 0x4E, 0x0C, 0x2E, 0x1B, 0xEE, 0xEF, 0x3B, 0xA5, 0x77, 0x15, 0xF0, 0xD0, 0xF0, 0xFA, 0xF0, 0x2D, 0x08, 0xA8, 0x08, 0x56, 0x08, 0x03, 0x88, 0xF8, 0x88, 0xAE, 0x88, 0x33, 0x48, 0xD4, 0x48, 0x81, 0x48, 0x6B, 0xC8, 0xEC, 0xC8, 0xB1, 0xC8, 0x07, 0x28, 0xC2, 0x28, 0x19, 0x28, 0x57, 0xEF, 0xE5, 0xDF, 0x97, 0xBC, 0x7F, 0x45, 0xD5, 0x46, 0xAD, 0x47, 0x43, 0x44, 0x33, 0x45, 0xEB, 0x46, 0xC7, 0x42, 0x77, 0x40, 0x1F, 0xC3, 0x20, 0xC1, 0xF0, 0xC6, 0x58, 0xC4, 0x64, 0xC0, 0x0C, 0xC3, 0xDC, 0xFA, 0xC0, 0xFD, 0x21, 0xE1, 0xC3, 0xD1, 0x47, 0xB1, 0x8F, 0xD9, 0x1F, 0x6F, 0xB0, 0x14, 0xB1, 0xCA, 0xB0, 0xDE, 0xB0, 0x75, 0xB0, 0x1B, 0x3E, 0x21, 0x7D, 0x32, 0xFD, 0xD4, 0x8D, 0x83, 0x85, 0x63, 0x8F, 0x33, 0x8A, 0x4B, 0x8C, 0xEB, 0x89, 0x3B, 0x8F, 0x47, 0x87, 0x17, 0x82, 0xB7, 0x8E, 0xCF, 0x81, 0x1F, 0x87, 0x7F, 0x40, 0x20, 0x4C, 0x90, 0x4E, 0x70, 0x49, 0x28, 0x4B, 0x58, 0x48, 0xF8, 0x48, 0xA4, 0x4E, 0x54, 0x4D, 0x0C, 0x4B, 0x6C, 0x48, 0xDC, 0x4A, 0x82, 0x4C, 0xA2, 0x40, 0x12, 0x4F, 0x32, 0x47, 0x8A, 0x49, 0xAA, 0x41, 0x9A, 0x4A, 0xBA, 0x42, 0x86, 0x4B, 0xA6, 0x4F, 0x96, 0x43, 0xB6, 0x45, 0x4E, 0x42, 0x6E, 0x42, 0x5E, 0x4C, 0xBE, 0x4F, 0x41, 0x4D, 0x61, 0x45, 0x51, 0x49, 0x71, 0x4A, 0xC9, 0x48, 0xE9, 0x48, 0xD9, 0x40, 0x79, 0x45, 0xC5, 0x41, 0xE5, 0x4E, 0xD5, 0x46, 0xF5, 0x40, 0xCD, 0x47, 0xED, 0x4B, 0xDD, 0x4B, 0xFD, 0x46, 0x23, 0x4A, 0x13, 0x4C, 0x33, 0x4C, 0x0B, 0x47, 0x2B, 0x4D, 0x1B, 0x49, 0x3B, 0x49, 0x87, 0x4C, 0xA7, 0x48, 0x17, 0x4F, 0x37, 0x4B, 0x8F, 0x41, 0xAF, 0x46, 0x9F, 0x4C, 0xBF, 0xCC, 0x80, 0xCD, 0xA0, 0xCD, 0x90, 0xC9, 0xB0, 0xC6, 0x88, 0xCF, 0x68, 0xC8, 0x98, 0xC7, 0xB8, 0xCD, 0x44, 0xC2, 0x04, 0x66, 0x2A, 0x62, 0xFA, 0xC5, 0x4C, 0xC9, 0x6C, 0xC1, 0x5C, 0xCE, 0x7C, 0xC8, 0x42, 0xCB, 0x62, 0xC3, 0x52, 0xC5, 0x72, 0xCA, 0xCA, 0xC8, 0xEA, 0xC0, 0x5A, 0xC7, 0x7A, 0xC9, 0xC6, 0xCA, 0x06, 0x61, 0x6B, 0x62, 0xBB, 0x61, 0xE7, 0x60, 0x77, 0x63, 0x6F, 0x65, 0xBF, 0xE3, 0xE0, 0xE1, 0xF0, 0xE4, 0xE8, 0xE0, 0x78, 0xE4, 0xE4, 0xE3, 0xF4, 0xE1, 0xEC, 0xE6, 0x7C, 0xE6, 0x12, 0xE4, 0xF2, 0xE3, 0xEA, 0xE5, 0x7A, 0xE3, 0x16, 0xE6, 0x0E, 0xE4, 0xEE, 0xE7, 0x01, 0xF1, 0x88, 0xF2, 0x04, 0xF1, 0x0C, 0xF2, 0x42, 0xF3, 0x8A, 0xF1, 0x86, 0xF0, 0x0E, 0xF1, 0xC1, 0xF0, 0x49, 0xF0, 0x85, 0xF2, 0x0D, 0xF3, 0xC3, 0xF2, 0x4B, 0xF2, 0x87, 0xF1, 0x8F, 0x08, 0xC0, 0x09, 0x48, 0x0A, 0x84, 0x09, 0x8C, 0x08, 0xC2, 0x09, 0x4A, 0x0A, 0x86, 0x09, 0x8E, 0x08, 0xC1, 0x09, 0x49, 0x0A, 0x85, 0x09, 0x8D, 0x08, 0xC3, 0x09, 0x4B, 0x08, 0x87, 0x0A, 0x0F, 0x8B, 0xC0, 0x88, 0x08, 0x8A, 0x78, 0x88, 0x34, 0x88, 0x9C, 0x88, 0x52, 0x8A, 0x7E, 0x16, 0xCD, 0x10, 0x5D, 0x10, 0x43, 0x11, 0x93, 0x12, 0x0B, 0x10, 0xEB, 0x10, 0xBB, 0x16, 0x67, 0x10, 0xB7, 0x10, 0xCF, 0x17, 0x5F, 0x95, 0xC0, 0x94, 0x50, 0x90, 0x08, 0x93, 0xE8, 0x93, 0xB8, 0x97, 0x64, 0x93, 0xB4, 0x95, 0x2C, 0x91, 0xDC, 0x92, 0xFA, 0x24, 0xA5, 0x22, 0x15, 0x25, 0x35, 0x24, 0xF5, 0x2C, 0xCD, 0x29, 0xED, 0x20, 0x5D, 0x2E, 0xBD, 0x23, 0x83, 0x2B, 0xA3, 0x26, 0x13, 0x23, 0x33, 0x2C, 0xF3, 0x22, 0xCB, 0x25, 0xEB, 0x28, 0x5B, 0x21, 0xBB, 0x2B, 0x87, 0x27, 0xA7, 0x26, 0x17, 0x23, 0x37, 0x2C, 0xF7, 0x2C, 0xCF, 0x29, 0xEF, 0x20, 0x5F, 0x26, 0xBF, 0xAD, 0x80, 0xA3, 0xA0, 0xA2, 0x10, 0xA5, 0x30, 0xA0, 0xF0, 0xA0, 0xC8, 0xA6, 0x68, 0xA3, 0x58, 0xAC, 0xB8, 0xAE, 0xF4, 0x41, 0x49, 0x41, 0x29, 0x54, 0xA9, 0x5B, 0xE9, 0x46, 0x99, 0x51, 0xD9, 0x5C, 0x39, 0x57, 0x79, 0x59, 0xE5, 0xBD, 0x8A, 0xA4, 0x8A, 0x9F, 0x4A, 0x8B, 0xCA, 0x99, 0x2A, 0xA5, 0xAA, 0xA1, 0x6A, 0xAA, 0xEA, 0x8C, 0x1A, 0x9C, 0x9A, 0xA0, 0x9A, 0x9B, 0x5A, 0xB5, 0xDA, 0x2F, 0x75, 0x02, 0x75, 0x0D, 0xF5, 0x18, 0xF5, 0x21, 0xF5, 0x27, 0x0D, 0x36, 0x0D, 0x1B, 0x8D, 0x42, 0x8D, 0x55, 0x4D, 0x0C, 0x4D, 0x19, 0xCD, 0x40, 0xCD, 0x36, 0xCD, 0x73, 0x2D, 0x2A, 0x2D, 0x43, 0xAD, 0x54, 0xAD, 0x69, 0x6D, 0x18, 0x6D, 0x3E, 0x6D, 0x88, 0xF6, 0x57, 0xED, 0x1D, 0x9D, 0x4F, 0x3A, 0x4A, 0x3A, 0xE1, 0x3A, 0x3D, 0x3A, 0x37, 0xBA, 0xF4, 0xBA, 0x26, 0xBA, 0x99, 0xBA, 0x73, 0x7A, 0xF0, 0x7A, 0x42, 0x7A, 0x6E, 0x7A, 0xD5, 0x7A, 0x3F, 0xF5, 0xF1, 0xF4, 0x55, 0xF5, 0x23, 0xF5, 0xFB, 0xF4, 0x6F, 0x0D, 0x18, 0x0D, 0xCC, 0x0C, 0xB2, 0x0D, 0x16, 0x0C, 0x11, 0x0D, 0x45, 0x0C, 0x3D, 0x0C, 0x6B, 0x0D, 0xF7, 0x8D, 0x08, 0x8C, 0xD4, 0x8D, 0xA2, 0x8D, 0x06, 0x8C, 0xEE, 0x3F, 0x33, 0x7D, 0x36, 0xFF, 0x9C, 0xF3, 0x79, 0xD1, 0x18, 0xD9, 0x58, 0xC6, 0x38, 0xD4, 0x78, 0xC0, 0xF8, 0x05, 0xCC, 0x0B, 0x76, 0x07, 0x37, 0x82, 0xCF, 0x4D, 0xE8, 0x4D, 0x2C, 0x4D, 0x4A, 0x4C, 0x76, 0x4C, 0x09, 0x4C, 0x75, 0x4D, 0x53, 0x4D, 0xE7, 0xCD, 0x50, 0xCD, 0xE4, 0xCC, 0xC2, 0xCD, 0x86, 0xCC, 0xDE, 0xCC, 0xF9, 0xCD, 0x3D, 0xCD, 0x9B, 0xCD, 0x2F, 0x2D, 0x18, 0x2C, 0xAC, 0x2D, 0x4A, 0x2D, 0x76, 0x2D, 0x09, 0x2D, 0xF5, 0x2C, 0xD3, 0x2C, 0x17, 0xAC, 0x50, 0xAD, 0xE4, 0xAC, 0xC2, 0xAD, 0x86, 0xAC, 0xDE, 0xAC, 0xF9, 0xAD, 0x3D, 0xAC, 0x9B, 0xAC, 0x2F, 0x6C, 0xE8, 0x6D, 0x2C, 0x6D, 0x4A, 0x6C, 0x76, 0x6C, 0x09, 0x6C, 0x75, 0x6C, 0x53, 0x6C, 0xE7, 0xEC, 0x50, 0xEC, 0x64, 0xEC, 0xC2, 0xEC, 0x06, 0xEC, 0x5E, 0xEC, 0x79, 0xED, 0xDD, 0xEC, 0x1B, 0xEC, 0xCF, 0x1C, 0x68, 0x1D, 0x2C, 0x1C, 0x8A, 0x1C, 0xB6, 0x1C, 0xF1, 0x1C, 0xB5, 0x1C, 0x93, 0x1C, 0xBF, 0x39, 0x21, 0x3B, 0x49, 0x3B, 0x85, 0x38, 0xF5, 0x39, 0x3D, 0x39, 0x73, 0x3B, 0xBB, 0x3A, 0xD7, 0x3B, 0x9F, 0x42, 0x68, 0x20, 0x66, 0x90, 0x02, 0xC8, 0x86, 0x0B, 0xAE, 0x8B, 0xA6, 0x4B, 0xA2, 0xCB, 0x8C, 0x2B, 0xA2, 0xAB, 0xA4, 0x6B, 0x90, 0x6B, 0xAF, 0xEB, 0xA3, 0x1B, 0x97, 0x1B, 0xC4, 0xAD, 0xD6, 0xED, 0xD8, 0x9D, 0xCA, 0xDD, 0xD4, 0x3D, 0xDF, 0x7D, 0xDD, 0xE3, 0x93, 0x87, 0xBA, 0xC7, 0x17, 0x8F, 0x29, 0x4F, 0x78, 0x4F, 0x09, 0xCF, 0x40, 0xCF, 0x6E, 0xCF, 0x7B, 0x2F, 0x0E, 0x2F, 0x27, 0xAF, 0x6A, 0xAF, 0x43, 0x6F, 0x0A, 0x6F, 0x63, 0xEF, 0x5C, 0xEF, 0x55, 0x1F, 0x2C, 0x1F, 0x55, 0x9F, 0x38, 0x9F, 0x09, 0x5F, 0x38, 0x5F, 0x51, 0x5F, 0x3F, 0xDF, 0x0E, 0xDF, 0xBF, 0x7E, 0x6C, 0x7E, 0x0E, 0x7E, 0x95, 0x7E, 0x07, 0xFE, 0x64, 0xFE, 0x46, 0xFE, 0x59, 0xFE, 0xDF, 0x03, 0x30, 0x03, 0x94, 0x02, 0xA2, 0x03, 0x46, 0x03, 0xA1, 0x03, 0x85, 0x03, 0x7D, 0x03, 0x3B, 0x02, 0x6F, 0x83, 0xD8, 0x83, 0x9C, 0x82, 0x6A, 0x82, 0x8E, 0x83, 0xA9, 0x83, 0xCD, 0x82, 0x0B, 0x83, 0xB7, 0x42, 0xF0, 0x43, 0x74, 0x42, 0x52, 0x43, 0x16, 0x43, 0xD1, 0x43, 0x15, 0x43, 0xA3, 0x43, 0xC7, 0xC2, 0x60, 0xC3, 0xC4, 0xC2, 0x02, 0xC2, 0xBA, 0xC3, 0x1E, 0xC2, 0xB9, 0xC3, 0x5D, 0xC3, 0x1B, 0xC2, 0x2F, 0x22, 0x18, 0x22, 0x6C, 0x22, 0xCA, 0x23, 0xF6, 0x23, 0xC9, 0x22, 0x8D, 0x23, 0x73, 0x23, 0xD7, 0xA3, 0x70, 0xA2, 0xB4, 0xA2, 0x52, 0xA2, 0xE6, 0xA3, 0xD1, 0xA2, 0x15, 0xA3, 0xA3, 0xA3, 0xC7, 0x63, 0xDE, 0xC5, 0x48, 0xC4, 0x04, 0xC5, 0xF4, 0xC5, 0xBC, 0xC4, 0xF2, 0xC7, 0x7A, 0xC5, 0xB6, 0xC5, 0xFE, 0x8D, 0x63, 0x8F, 0x73, 0x8E, 0xAB, 0x8B, 0x3B, 0x8B, 0xA7, 0x8F, 0xB7, 0x8E, 0x2F, 0x8F, 0xDF, 0xFF, 0x42, 0xFE, 0x05, 0xFC, 0xA5, 0xE0, 0xCB, 0x56, 0x02, 0x41, 0x82, 0x5E, 0x42, 0x66, 0xC2, 0x4A, 0x22, 0x56, 0xA2, 0x46, 0x62, 0x52, 0xE2, 0x5C, 0x12, 0x5A, 0x92, 0x62, 0x52, 0x6C, 0xD2, 0x64, 0x32, 0x62, 0xB2, 0x74, 0x72, 0x78, 0xF2, 0x70, 0x0A, 0x4C, 0x8A, 0x58, 0x4A, 0x60, 0x4A, 0x5F, 0xCA, 0x6B, 0xAA, 0x40, 0xAA, 0x4F, 0x6A, 0x67, 0xEA, 0x43, 0x1A, 0x4F, 0x9A, 0x7B, 0x5A, 0x4B, 0xDA, 0x4D, 0x3A, 0x7B, 0x3A, 0x24, 0xBD, 0x21, 0xFD, 0x32, 0x83, 0x39, 0xC3, 0x21, 0xA3, 0x36, 0xE3, 0x2C, 0x93, 0x21, 0xD3, 0x36, 0xB3, 0x32, 0xF3, 0x38, 0x8B, 0x36, 0xCB, 0x2A, 0xAB, 0x22, 0xEB, 0x77, 0x36, 0x55, 0xB6, 0x45, 0x76, 0x69, 0xF6, 0x7E, 0x0E, 0x45, 0x8E, 0x59, 0x4E, 0x71, 0xCE, 0xCF, 0x5C, 0xB2, 0x5C, 0x93, 0xDC, 0xA2, 0xDC, 0xDD, 0x3C, 0xD2, 0x3C, 0x70, 0x5E, 0x61, 0xDE, 0x4E, 0x3E, 0x49, 0xBE, 0x71, 0x7E, 0x41, 0xFE, 0x4E, 0x01, 0x61, 0x81, 0x4E, 0x41, 0x72, 0xC1, 0xB7, 0x42, 0xC4, 0x42, 0x89, 0xC2, 0x80, 0xC2, 0xCE, 0xC2, 0xBF, 0x45, 0x2C, 0x45, 0xB6, 0x45, 0xE5, 0x45, 0x7B, 0xC5, 0x84, 0xC5, 0x3A, 0xC5, 0xC9, 0xC5, 0xB3, 0x25, 0x48, 0x25, 0x92, 0x25, 0x41, 0x25, 0xDD, 0x25, 0x77, 0xA5, 0xEC, 0xA5, 0x0E, 0xA5, 0x5F, 0x4B, 0xF7, 0xCB, 0x48, 0xCA, 0x0C, 0xCA, 0xD2, 0xCB, 0x16, 0xCB, 0x51, 0xCB, 0xE5, 0xCA, 0xC3, 0xCA, 0x07, 0xCA, 0x9F, 0x2B, 0x78, 0x2A, 0x5C, 0x2A, 0xEA, 0x2A, 0x4E, 0xBE, 0x52, 0x7D, 0x35, 0xF9, 0x9A, 0xF7, 0x75, 0xB5, 0x12, 0xAB, 0x52, 0xB5, 0x32, 0xAE, 0x72, 0xA2, 0x0A, 0xB6, 0x4A, 0xA4, 0xCA, 0xB7, 0xAA, 0xBD, 0xEA, 0xA6, 0x9A, 0xA5, 0xDA, 0xAE, 0xBA, 0xA2, 0xFA, 0x67, 0x0D, 0x71, 0x8D, 0x7E, 0x4D, 0x7A, 0xCD, 0x62, 0x2D, 0x5A, 0xAD, 0x7C, 0x6D, 0x44, 0xED, 0x50, 0xED, 0x5B, 0x1D, 0x7F, 0x9D, 0x47, 0x5D, 0x63, 0xDD, 0x79, 0x3D, 0x5D, 0xBD, 0x45, 0x7D, 0x51, 0xFD, 0x56, 0x03, 0x5E, 0x83, 0x56, 0x43, 0x52, 0xC3, 0xB7, 0x46, 0xC4, 0x46, 0xC9, 0xC6, 0xA0, 0xC6, 0x9E, 0xC6, 0x87, 0x26, 0xCE, 0x26, 0xE7, 0xA6, 0x9A, 0xA6, 0xA3, 0x66, 0xCA, 0x66, 0xE3, 0xE6, 0x9C, 0xE6, 0x1F, 0x2D, 0x1F, 0x5B, 0x54, 0x5A, 0x62, 0x5B, 0xC6, 0x5B, 0x61, 0x5A, 0x85, 0x5B, 0x7D, 0x5A, 0xDB, 0x5A, 0xAF, 0xDB, 0x98, 0xDB, 0x6C, 0xDA, 0xCA, 0xDA, 0xF6, 0xDA, 0x89, 0xDA, 0xF5, 0xDA, 0x53, 0xDB, 0xE7, 0x3B, 0xDE, 0x77, 0xC8, 0x76, 0x84, 0x76, 0xF4, 0x77, 0x3C, 0x77, 0xF2, 0x74, 0xBA, 0x74, 0xD6, 0x75, 0x9E, 0x74, 0x51, 0x75, 0x99, 0x74, 0xE5, 0x75, 0xAD, 0x75, 0x63, 0x75, 0xAB, 0x76, 0xC7, 0x76, 0x8F, 0xF7, 0xC0, 0xF6, 0x08, 0xF7, 0xF8, 0xF4, 0xB4, 0xF5, 0x5C, 0xF5, 0x32, 0xF5, 0x5A, 0xF7, 0x96, 0xF6, 0xEE, 0xF4, 0x11, 0xF4, 0xE9, 0xF4, 0x25, 0xF7, 0xCD, 0xF6, 0x23, 0xF5, 0x8B, 0xF5, 0x7B, 0xF7, 0x37, 0xF5, 0x9F, 0x0C, 0x90, 0x0F, 0x18, 0x0C, 0xA4, 0x0C, 0x4C, 0x0F, 0xC2, 0x0D, 0x0A, 0x0E, 0xBA, 0x0D, 0xD6, 0x0E, 0x1E, 0x0C, 0x11, 0x0D, 0x69, 0x0D, 0x7D, 0x19, 0x1A, 0x1B, 0x7A, 0x1B, 0xE6, 0x1E, 0x76, 0x1C, 0xAE, 0x18, 0xDE, 0x19, 0xC1, 0x19, 0x51, 0x19, 0x89, 0x1C, 0xE9, 0x1F, 0x79, 0x18, 0x65, 0x1D, 0xB5, 0x1E, 0x2D, 0x1C, 0x5D, 0x1D, 0xC3, 0x18, 0x93, 0x1D, 0x0B, 0x1A, 0xEB, 0x18, 0xBB, 0x1A, 0xA7, 0x1B, 0x37, 0x19, 0xCF, 0x1A, 0x5F, 0x98, 0x40, 0x9A, 0x10, 0x9B, 0xF0, 0x9E, 0x68, 0x9C, 0x38, 0x9E, 0x24, 0x9B, 0xD4, 0x9B, 0x4C, 0x9A, 0x9C, 0x9C, 0x82, 0x9E, 0xE2, 0x9B, 0x82, 0x4C, 0x55, 0x4E, 0xED, 0x4D, 0xE3, 0x4D, 0xAB, 0x4D, 0x47, 0x4F, 0x0F, 0x4E, 0x3F, 0xCE, 0xB0, 0xCD, 0xD8, 0xCC, 0x14, 0xCF, 0xAC, 0x7F, 0xFB, 0xF0, 0x4D, 0xFE, 0x5B, 0xC8, 0xB7, 0xAE, 0x6F, 0xD7, 0xB3, 0xF4, 0xB3, 0xA6, 0xB3, 0xD9, 0xB3, 0x8B, 0x73, 0xC8, 0x73, 0xE2, 0x73, 0xBE, 0x73, 0xCD, 0x73, 0xA7, 0xF3, 0x14, 0xF3, 0x06, 0xF3, 0x29, 0xF3, 0xD3, 0x0B, 0xB0, 0x0B, 0x02, 0x0B, 0x6E, 0x0B, 0x35, 0x0B, 0xFB, 0x8B, 0x84, 0x8B, 0x9A, 0x8B, 0x71, 0x8B, 0x23, 0x8B, 0xAF, 0x4B, 0x5C, 0x4B, 0x0E, 0x4B, 0x65, 0x4B, 0x5B, 0xCB, 0xD8, 0xCB, 0x4A, 0xCB, 0xE1, 0xCB, 0x7D, 0xCB, 0x77, 0xDF, 0x99, 0xBF, 0x5B, 0x7E, 0xCF, 0xFF, 0xBE, 0xB2, 0x82, 0xB6, 0x22, 0xB3, 0x12, 0xB8, 0xD2, 0xBE, 0x72, 0xF9, 0x83, 0xE6, 0x87, 0xF1, 0x8F, 0x8C, 0x1F, 0x73, 0xAB, 0x88, 0xAB, 0xA2, 0xAB, 0x5E, 0xAB, 0x0D, 0xAB, 0x47, 0x6B, 0xA4, 0x6B, 0xBA, 0x6B, 0x49, 0x6B, 0x93, 0xEB, 0xD0, 0xEB, 0x7C, 0xEB, 0x90, 0xF5, 0xCA, 0xF5, 0xBD, 0x0D, 0xFC, 0x0D, 0xF5, 0x8D, 0x98, 0x8D, 0xA1, 0x8D, 0xA7, 0x4D, 0xF6, 0x4D, 0xDB, 0xCD, 0x92, 0xCD, 0x8D, 0xAD, 0x8F, 0x5B, 0x0A, 0x5B, 0xA1, 0x5B, 0xDD, 0x5B, 0x37, 0xDB, 0x0C, 0xDB, 0x66, 0xDB, 0xB9, 0xDB, 0xCB, 0x3B, 0x98, 0x3B, 0x46, 0x3B, 0x95, 0x3B, 0xB7, 0xBB, 0x62, 0xBB, 0xF1, 0xBB, 0xEB, 0x7B, 0xD4, 0x7B, 0x2E, 0x7B, 0x7D, 0x3F, 0x91, 0x7F, 0x6A, 0xFF, 0x2C, 0xFE, 0x79, 0xF1, 0x8B, 0xFF, 0x57, 0xC4, 0xAF, 0xC5, 0x7D, 0xE2, 0x7D, 0xDB, 0xFD, 0xB6, 0x03, 0x98, 0x03, 0xE5, 0x83, 0xEC, 0x83, 0xDF, 0xBF, 0xD9, 0x7F, 0x07, 0xFC, 0x9E, 0x3A, 0xFC, 0x74, 0x68, 0x7A, 0x58, 0x77, 0xF8, 0x74, 0x24, 0x7D, 0x94, 0x7C, 0xB4, 0x75, 0x4C, 0x77, 0xEC, 0x7E, 0x3C, 0x78, 0x82, 0x7A, 0xA2, 0x77, 0x52, 0x7A, 0xF2, 0xE7, 0x54, 0xF0, 0x34, 0xEA, 0x74, 0xF9, 0x8C, 0xE4, 0xCC, 0xEE, 0xAC, 0xFD, 0x1C, 0xF6, 0x5C, 0xF9, 0x3C, 0xFB, 0xFC, 0xF7, 0x05, 0xFB, 0x85, 0xFF, 0xC5, 0xE4, 0x25, 0xF6, 0x25, 0xF8, 0xB2, 0xE6, 0xF2, 0xE1, 0x8F, 0xC4, 0x9F, 0x84, 0x3F, 0x1B, 0x57, 0xD4, 0x57, 0x2E, 0x57, 0xBD, 0xD7, 0x48, 0xD7, 0x5A, 0xD7, 0x85, 0xD7, 0x67, 0x37, 0x3C, 0x37, 0xA1, 0x37, 0xB3, 0x7F, 0xF1, 0xFF, 0x5A, 0xFE, 0x6D, 0xFC, 0xFB, 0x7A, 0x2B, 0x7B, 0x9B, 0x72, 0xBB, 0x73, 0x47, 0x7F, 0xE7, 0x71, 0x37, 0x78, 0x8F, 0x7A, 0xAF, 0x7B, 0x5F, 0x7A, 0x7F, 0xF9, 0xC0, 0xFF, 0x10, 0xF1, 0xB0, 0xF0, 0x48, 0xF4, 0x68, 0xFD, 0xD8, 0xFC, 0x04, 0x7A, 0x92, 0x7F, 0x4A, 0x7B, 0xDA, 0x7B, 0x66, 0x7C, 0xF6, 0x7C, 0x1E, 0x7A, 0x41, 0x7B, 0xD1, 0x7B, 0x29, 0x7D, 0xF9, 0xF3, 0x2A, 0xF0, 0x1A, 0xF1, 0xBA, 0xF0, 0x46, 0xF8, 0x66, 0xFD, 0xD6, 0xFC, 0xF6, 0x06, 0xF8, 0xBF, 0x32, 0x28, 0x17, 0x74, 0x0A, 0xC5, 0x0F, 0x15, 0x05, 0xF5, 0x03, 0x9A, 0x0A, 0xDA, 0x0D, 0x7A, 0x18, 0x06, 0x13, 0x06, 0x0C, 0x53, 0x07, 0xF3, 0x0A, 0xAB, 0x00, 0x9B, 0x0D, 0x7B, 0x04, 0xC7, 0x03, 0x17, 0x0E, 0xB7, 0xFC, 0x8E, 0xFC, 0x1D, 0xE4, 0x5D, 0x3F, 0x3C, 0x2A, 0xBC, 0x21, 0x7C, 0x15, 0xFC, 0x23, 0x82, 0x0C, 0x42, 0x1A, 0xC2, 0x3E, 0x22, 0x3B, 0x62, 0x10, 0xE2, 0x1C, 0x12, 0x11, 0x92, 0x1D, 0x52, 0x17, 0x32, 0x22, 0xB2, 0x36, 0x72, 0x29, 0xF2, 0x0D, 0x8A, 0x18, 0x4A, 0x02, 0xCA, 0xD6, 0x7B, 0x86, 0xF7, 0xDE, 0xEF, 0x27, 0x50, 0x3F, 0xA1, 0x9A, 0xA3, 0x36, 0xA1, 0x41, 0xA1, 0x29, 0xA3, 0xE5, 0xA2, 0x9D, 0xA0, 0xF3, 0xA1, 0x47, 0xA2, 0x7F, 0xC7, 0xA0, 0xC0, 0x80, 0x60, 0xF4, 0x63, 0xA2, 0x62, 0x1A, 0x60, 0x56, 0x62, 0xDE, 0x7F, 0x90, 0xFA, 0x90, 0xF2, 0x61, 0xEF, 0x23, 0xF3, 0x47, 0xBF, 0x8F, 0x53, 0x58, 0xB8, 0x58, 0x96, 0x58, 0x2D, 0xD8, 0x30, 0xD8, 0xAA, 0xD8, 0x79, 0xD8, 0xA7, 0x9F, 0xF8, 0x3E, 0x45, 0x7E, 0xFA, 0x8E, 0x43, 0x81, 0xE3, 0x8C, 0xD3, 0x87, 0xFB, 0x1E, 0x57, 0x1F, 0xB7, 0x02, 0xF7, 0x16, 0x4F, 0x02, 0x2F, 0x09, 0x6F, 0x1B, 0x9F, 0x11, 0xDF, 0x07, 0x7F, 0x9C, 0x00, 0x9B, 0xC0, 0x8C, 0xA0, 0x81, 0xE0, 0x8D, 0x50, 0x81, 0x30, 0x8B, 0xF0, 0x90, 0x88, 0x93, 0x28, 0x84, 0x68, 0x8E, 0x98, 0x88, 0xD8, 0x96, 0xB8, 0x83, 0x04, 0x8E, 0x44, 0x86, 0x24, 0x9A, 0x64, 0x86, 0x14, 0x8D, 0x54, 0x8D, 0x34, 0xE5, 0x3F, 0x90, 0x41, 0x1E, 0xD9, 0x0E, 0x39, 0x39, 0xB9, 0x39, 0x79, 0x39, 0xF9, 0x31, 0x05, 0x03, 0x85, 0x03, 0x45, 0x03, 0xC5, 0x35, 0x25, 0x27, 0xA5, 0x27, 0x65, 0x27, 0xE5, 0x33, 0x95, 0x30, 0x55, 0x10, 0xD5, 0x10, 0x35, 0x1C, 0xB5, 0x34, 0x75, 0x34, 0xF5, 0x34, 0x0D, 0x2A, 0x8D, 0x0A, 0x4D, 0x12, 0xCD, 0x12, 0x2D, 0x36, 0xAD, 0x0E, 0x6D, 0x16, 0xED, 0x06, 0x1D, 0x11, 0x9D, 0x31, 0x5D, 0x11, 0xDD, 0x2F, 0x7A, 0x2A, 0x7A, 0x2B, 0xFA, 0x4A, 0xFA, 0x53, 0x06, 0x26, 0x06, 0x47, 0x86, 0x06, 0x86, 0x6B, 0x46, 0x4E, 0x46, 0x0F, 0xC6, 0x76, 0xC6, 0x47, 0x26, 0x01, 0x26, 0x7F, 0xA6, 0x3E, 0x66, 0x28, 0x66, 0x71, 0xE6, 0x50, 0xE6, 0x51, 0x16, 0x04, 0x16, 0x59, 0x96, 0x18, 0x96, 0x19, 0x56, 0x54, 0x56, 0x15, 0xD6, 0x44, 0xD6, 0x45, 0xB6, 0x8F, 0x6C, 0x5A, 0x6C, 0x19, 0x6C, 0xAB, 0xEC, 0x78, 0xEC, 0x06, 0xEC, 0xB9, 0xEC, 0xDB, 0x1C, 0x24, 0x1C, 0x26, 0x1C, 0xC5, 0x1C, 0xFB, 0x9C, 0x54, 0x9C, 0x96, 0x9C, 0x5F, 0x39, 0x8F, 0xB9, 0xE8, 0xB9, 0xEC, 0xB9, 0x6A, 0xB9, 0x2E, 0xB8, 0x59, 0xB9, 0x21, 0xDC, 0x4D, 0xDC, 0x37, 0x3C, 0x5C, 0x3C, 0x1E, 0x3C, 0xED, 0x3C, 0x0F, 0xBC, 0x7C, 0xBC, 0xBE, 0xBC, 0x3D, 0xBC, 0xAF, 0x7C, 0xC2, 0x7C, 0x81, 0x7C, 0x03, 0xFC, 0xD0, 0xFC, 0xE2, 0xFC, 0xA1, 0x00, 0x17, 0xBC, 0x13, 0x90, 0x16, 0x88, 0x14, 0x98, 0x10, 0x44, 0x12, 0x94, 0x17, 0x8C, 0x15, 0x9C, 0x11, 0x42, 0x15, 0x52, 0x16, 0x4A, 0x10, 0x9A, 0x13, 0xC6, 0x10, 0x56, 0x13, 0x4E, 0x16, 0x5E, 0x12, 0xC1, 0x12, 0xD1, 0x16, 0xC9, 0x12, 0xD9, 0x10, 0x25, 0x12, 0x05, 0x8B, 0x16, 0x8B, 0xEE, 0x8B, 0x51, 0x8B, 0xD9, 0x88, 0x55, 0x8B, 0x9D, 0x8B, 0xB3, 0x88, 0x43, 0xC4, 0x5B, 0xC4, 0xEF, 0x24, 0x78, 0x25, 0x7C, 0x24, 0x7A, 0x24, 0xDE, 0x24, 0x45, 0x25, 0x43, 0x24, 0x47, 0xA4, 0x10, 0xA4, 0xE4, 0xA4, 0x62, 0xA5, 0xBE, 0x49, 0xA3, 0x4B, 0xAB, 0x49, 0x27, 0x4B, 0x2F, 0xCB, 0x7C, 0x92, 0xD1, 0x95, 0xC9, 0x96, 0xD9, 0x94, 0x25, 0x96, 0x05, 0xCB, 0x16, 0xCB, 0xEE, 0xCB, 0x51, 0xC9, 0x59, 0xC9, 0x55, 0xCA, 0x9D, 0xCA, 0x33, 0xC9, 0x3B, 0xCA, 0x37, 0xC8, 0x5F, 0x2B, 0x70, 0x28, 0xB8, 0x2B, 0xB4, 0x2B, 0x3C, 0x2A, 0xF2, 0x2B, 0xFA, 0x29, 0xF6, 0x2A, 0x81, 0x94, 0xC4, 0x94, 0x42, 0x94, 0x46, 0x94, 0xDF, 0x29, 0xCB, 0x28, 0x47, 0x29, 0x4F, 0x01, 0x0C, 0xA0, 0xA4, 0x92, 0xA0, 0x32, 0xAF, 0x8A, 0xA9, 0xAA, 0x01, 0x10, 0xC0, 0x8A, 0x1A, 0x8E, 0x9A, 0x9E, 0x5A, 0xB6, 0xDA, 0x86, 0x3A, 0x91, 0xFA, 0x67, 0xF5, 0x02, 0xF5, 0x3D, 0x0D, 0x72, 0x0D, 0x33, 0x8D, 0x32, 0x8D, 0xDF, 0x9A, 0x34, 0x9A, 0xD6, 0x9A, 0x95, 0x9A, 0xA7, 0x5A, 0x8C, 0x5A, 0x0E, 0x5A, 0x75, 0x5A, 0x97, 0xDA, 0xAC, 0x80, 0xF3, 0x37, 0x69, 0xDF, 0xE8, 0x70, 0xEA, 0xB8, 0xEB, 0xB4, 0xE9, 0xDC, 0xEB, 0xF2, 0xEA, 0x7A, 0xEB, 0x76, 0xE9, 0x3E, 0xEB, 0x09, 0xEA, 0xF9, 0xEB, 0xF5, 0xE9, 0x83, 0xF4, 0x45, 0xF4, 0x83, 0xF4, 0x07, 0x0D, 0x60, 0x0C, 0x24, 0x0C, 0x42, 0x0D, 0x46, 0x0C, 0xDF, 0x19, 0x4A, 0x1B, 0x46, 0x18, 0x8E, 0x1B, 0x21, 0x1A, 0xC9, 0x02, 0x7E, 0x3F, 0xF5, 0x19, 0xF9, 0xB3, 0xC2, 0xE7, 0xD8, 0xCF, 0x33, 0xC6, 0x68, 0xC6, 0xEA, 0xC6, 0xE9, 0xC6, 0xEB, 0x60, 0x62, 0xB0, 0x29, 0xB8, 0x1C, 0x7C, 0x6A, 0xC2, 0x62, 0xE2, 0x6A, 0xD2, 0x61, 0xF2, 0x62, 0x2A, 0x6A, 0x1A, 0x6E, 0x3A, 0x69, 0x86, 0x66, 0xA6, 0x6E, 0x96, 0x61, 0xB6, 0x61, 0x4E, 0x6A, 0x6E, 0x6E, 0x5E, 0x69, 0x7E, 0x61, 0xC1, 0x6E, 0xE1, 0x69, 0xD1, 0x63, 0x09, 0x6D, 0x29, 0x65, 0x19, 0x63, 0x39, 0x67, 0x85, 0x65, 0xA5, 0x67, 0x95, 0x6F, 0xF5, 0xCB, 0x9A, 0xD6, 0xDA, 0x01, 0xF0, 0xF8, 0x7B, 0x1B, 0x41, 0x9B, 0x60, 0x9B, 0x71, 0xDB, 0xF7, 0xB6, 0x6A, 0xB6, 0xE9, 0xB6, 0x1B, 0x76, 0x64, 0x76, 0x96, 0x76, 0xD5, 0x76, 0x57, 0xF6, 0xDC, 0xF6, 0xBE, 0xF6, 0x83, 0x0E, 0xF0, 0x0E, 0x8A, 0x0E, 0x49, 0x0E, 0x3F, 0x1C, 0x09, 0x1D, 0x4D, 0x1D, 0x2B, 0x1C, 0xCF, 0x9D, 0xD8, 0x9D, 0xBC, 0x9C, 0xFA, 0x9C, 0x61, 0x9D, 0xE5, 0x9C, 0x13, 0x9C, 0x97, 0x21, 0xF8, 0x10, 0x30, 0xA4, 0x1C, 0x72, 0xE6, 0xC2, 0xE6, 0xE2, 0xE9, 0xD2, 0xEB, 0x0A, 0xEB, 0x2A, 0xE7, 0x9A, 0xE0, 0xFA, 0xDD, 0x8D, 0xC0, 0xCD, 0xC4, 0xAD, 0xC2, 0xED, 0xDC, 0x9D, 0xC3, 0xDD, 0xDB, 0xBD, 0xDF, 0x03, 0xDE, 0x43, 0xD1, 0x23, 0xD9, 0x63, 0xD5, 0x93, 0xD8, 0xD3, 0xC2, 0xB3, 0xDA, 0xF3, 0xCA, 0x8B, 0xD7, 0x2B, 0xC0, 0x6B, 0xC4, 0x1B, 0xC5, 0x5B, 0xCD, 0x3B, 0xC3, 0x7B, 0xDB, 0x87, 0xD2, 0xC7, 0xCE, 0xA7, 0xD1, 0xE7, 0xC1, 0x57, 0xC4, 0x37, 0xDC, 0x77, 0xC6, 0xEF, 0x83, 0x9F, 0x9E, 0x5F, 0xA1, 0xDF, 0xA1, 0x3F, 0x93, 0xBF, 0x9B, 0x7F, 0x77, 0x00, 0x4C, 0x80, 0x5C, 0x40, 0x62, 0xC0, 0x4A, 0x20, 0x7E, 0xA0, 0x41, 0x60, 0x4E, 0xE0, 0x46, 0x10, 0x61, 0x90, 0x61, 0x50, 0x6E, 0xD0, 0x56, 0x30, 0x51, 0xF0, 0xE7, 0xE0, 0xFC, 0xE0, 0x9D, 0x10, 0x92, 0x10, 0x70, 0x48, 0x61, 0xC8, 0x5E, 0x28, 0x79, 0xA8, 0x69, 0x68, 0x49, 0xE8, 0x7E, 0x18, 0x65, 0x98, 0x45, 0x58, 0x79, 0xD8, 0x61, 0x38, 0x6D, 0xB8, 0x4D, 0x78, 0x65, 0xF8, 0x09, 0xE0, 0xE2, 0xF6, 0x11, 0xB5, 0x11, 0x17, 0x91, 0xAC, 0x91, 0x90, 0xC8, 0xA6, 0xC8, 0x9B, 0x28, 0xCE, 0x28, 0xF7, 0xA8, 0xF6, 0xA8, 0x87, 0x68, 0xBE, 0x68, 0x9F, 0xE8, 0x9E, 0xE8, 0xD7, 0x18, 0x61, 0xC0, 0xC3, 0x07, 0x63, 0x61, 0x63, 0x25, 0x63, 0x23, 0x62, 0xC7, 0xE3, 0x90, 0xE2, 0xE4, 0xE3, 0xE2, 0xE2, 0x66, 0xE3, 0xD1, 0xE3, 0xD5, 0xE2, 0x53, 0xE2, 0xBF, 0x7F, 0xF9, 0xF4, 0x45, 0xF7, 0x4B, 0xF6, 0x97, 0xCD, 0x04, 0xE2, 0x04, 0x70, 0x42, 0x71, 0xC2, 0x7E, 0x22, 0x75, 0xA2, 0x4D, 0x62, 0x75, 0xE2, 0x79, 0x12, 0x4B, 0x12, 0x24, 0xA9, 0x25, 0xE9, 0x2E, 0x99, 0x2F, 0xD9, 0x37, 0xB9, 0x37, 0x05, 0x2A, 0x45, 0x22, 0x25, 0x3C, 0x65, 0x22, 0x15, 0x39, 0x55, 0x29, 0x35, 0x31, 0x75, 0x29, 0x0D, 0x3B, 0x4D, 0x37, 0x2D, 0x27, 0x6D, 0x3B, 0x9D, 0x2C, 0xDD, 0x3C, 0xBD, 0x22, 0xFD, 0x24, 0x83, 0x29, 0xC3, 0x39, 0xA3, 0x39, 0xE3, 0x3E, 0x93, 0x3F, 0xD3, 0x3F, 0x73, 0x30, 0x0B, 0x2E, 0x4B, 0x26, 0x2B, 0x36, 0x6B, 0x36, 0xFB, 0x43, 0xB6, 0x56, 0x76, 0x56, 0xF6, 0x66, 0x0E, 0x69, 0x8E, 0x79, 0xCE, 0xD7, 0x9C, 0xD3, 0x5C, 0x96, 0x5C, 0xD7, 0xDC, 0xF6, 0xDC, 0xE7, 0x3C, 0x91, 0xBC, 0xD0, 0xBC, 0xF1, 0x7C, 0x94, 0x7C, 0x95, 0xFC, 0x94, 0xFC, 0x1F, 0x05, 0x9F, 0x0A, 0x54, 0x0A, 0xA2, 0x0A, 0x06, 0x0A, 0x1E, 0x0B, 0xD9, 0x0B, 0xED, 0x0A, 0x4B, 0x0B, 0xB7, 0x8A, 0xB0, 0x8B, 0x94, 0x8B, 0x22, 0x8B, 0x06, 0x8A, 0x1E, 0x8B, 0xD9, 0x8B, 0xED, 0x8A, 0x4B, 0x8B, 0xB7, 0x4B, 0x70, 0x4A, 0x54, 0x4B, 0xA2, 0x4B, 0x86, 0x4A, 0x9E, 0x4B, 0xB9, 0x4A, 0x1D, 0x4B, 0x2B, 0x4A, 0x77, 0xCB, 0xF0, 0xCB, 0x34, 0xCA, 0xE2, 0xCA, 0xC6, 0xCA, 0x41, 0xE5, 0xBC, 0xE5, 0x2E, 0xE5, 0xD5, 0xE5, 0x07, 0x15, 0xC4, 0x15, 0xBA, 0x15, 0x49, 0x15, 0xD3, 0x5F, 0xE1, 0xBE, 0x0A, 0x7F, 0xF5, 0xFA, 0xDA, 0xF8, 0xF5, 0xB4, 0x92, 0xB2, 0xF2, 0x73, 0x65, 0x66, 0xE5, 0x62, 0x15, 0x4A, 0x95, 0x54, 0x55, 0x60, 0x55, 0x67, 0xD5, 0x75, 0x35, 0x63, 0xB5, 0x65, 0x75, 0x61, 0xF5, 0x7A, 0x0D, 0x56, 0x8D, 0x52, 0x4D, 0x64, 0xCD, 0x60, 0xCD, 0x73, 0x2D, 0x57, 0xAD, 0x53, 0x6D, 0x65, 0xED, 0xAF, 0x3A, 0xA2, 0x3A, 0x9D, 0xBA, 0xA4, 0xBA, 0xE9, 0xFA, 0x77, 0xF5, 0x22, 0xF5, 0xDE, 0xF5, 0xCD, 0xF5, 0xE7, 0x0D, 0x34, 0x0D, 0x26, 0x0D, 0x39, 0x0D, 0x2B, 0x8D, 0x18, 0x8D, 0xF2, 0x8D, 0x61, 0x8D, 0x7D, 0x80, 0x7F, 0x73, 0x34, 0x39, 0x34, 0x55, 0x34, 0xED, 0x35, 0x13, 0x36, 0x6B, 0x37, 0x27, 0x36, 0x4F, 0xB7, 0xBC, 0x6B, 0x11, 0x69, 0xF1, 0x69, 0x69, 0x69, 0xB9, 0x68, 0xA5, 0x6D, 0x35, 0x6B, 0xCD, 0x6B, 0xFD, 0xD1, 0x86, 0xD9, 0xA6, 0xD0, 0x16, 0xD1, 0x36, 0xD0, 0xF6, 0xD4, 0xCE, 0xD9, 0xEE, 0xD8, 0xFE, 0xB5, 0xFD, 0x67, 0x07, 0x61, 0x87, 0x76, 0x47, 0x62, 0xC7, 0x54, 0x27, 0x5C, 0xA7, 0x70, 0xA7, 0x57, 0x67, 0x53, 0xE7, 0x29, 0xE0, 0xE0, 0xC6, 0x5D, 0x59, 0x5D, 0x4B, 0xDD, 0xA8, 0xDD, 0xD2, 0xDD, 0x41, 0xDD, 0x5D, 0xDD, 0x37, 0x3D, 0x4C, 0x3D, 0x56, 0x3D, 0x45, 0x3D, 0xEB, 0xBD, 0x58, 0xBD, 0x4A, 0xBD, 0x91, 0xBD, 0x83, 0xBD, 0x4F, 0x7D, 0x9C, 0x7D, 0x0E, 0x7D, 0x15, 0x7D, 0xBB, 0xFD, 0x9F, 0xFA, 0xE5, 0xFA, 0x7D, 0xFB, 0xEB, 0xFA, 0x77, 0x07, 0x3E, 0x0E, 0x48, 0x0D, 0x78, 0x0E, 0x54, 0x0D, 0x6C, 0x0E, 0xA2, 0x0F, 0x8A, 0x0D, 0xBA, 0x0E, 0x96, 0x0F, 0xAE, 0x0E, 0x21, 0x0F, 0x09, 0x0D, 0x39, 0x0D, 0x15, 0x0D, 0x2D, 0x0D, 0xC3, 0x0F, 0xF3, 0x0E, 0xDB, 0x0E, 0xE7, 0x0E, 0xCF, 0x8E, 0x40, 0x8F, 0x70, 0x8C, 0x58, 0x8C, 0x64, 0x8C, 0x4C, 0x8E, 0x3C, 0x8F, 0x32, 0x8D, 0x1A, 0x8F, 0x26, 0x8D, 0x8E, 0x8C, 0xDE, 0x8D, 0xD1, 0x8E, 0xE9, 0x8F, 0xC5, 0x8D, 0xF5, 0x8D, 0xFD, 0x19, 0x27, 0x1F, 0xD7, 0x1C, 0x0F, 0x1F, 0x6F, 0x1F, 0x3F, 0x9E, 0x20, 0x98, 0x50, 0x9A, 0x08, 0x04, 0xDC, 0xFC, 0xD7, 0x24, 0xF6, 0xA4, 0xF4, 0xA4, 0xD7, 0x64, 0xD5, 0xE4, 0xE6, 0x14, 0xDA, 0x94, 0x08, 0xE0, 0xE7, 0x25, 0x53, 0xDF, 0xA7, 0xE1, 0xA7, 0x79, 0xA7, 0x6D, 0xA7, 0x73, 0xA6, 0xBF, 0xCD, 0x80, 0x66, 0x58, 0x67, 0x4C, 0x67, 0x52, 0x66, 0x46, 0x67, 0xEE, 0xBE, 0xD1, 0x7E, 0xD3, 0xFF, 0x16, 0xFB, 0xAD, 0xF7, 0xDB, 0xC5, 0x2C, 0xE9, 0xAC, 0xDA, 0x6C, 0xC8, 0x6C, 0xCB, 0xEC, 0xC1, 0x1C, 0xCE, 0x9C, 0xEC, 0x9C, 0xCF, 0x5C, 0xF5, 0xDC, 0xE6, 0x3C, 0xDA, 0xBC, 0xC8, 0xBC, 0xF3, 0x7C, 0xF1, 0xFC, 0xD2, 0x02, 0xDC, 0x02, 0xD7, 0x82, 0xD5, 0x42, 0xE6, 0xC2, 0xE4, 0xC2, 0xD3, 0x22, 0xE3, 0xA2, 0xD1, 0xE2, 0x97, 0xC5, 0xFE, 0xC5, 0x3F, 0x4B, 0x64, 0x4B, 0x1A, 0x4B, 0x61, 0x4B, 0xAD, 0x4B, 0xBF, 0x97, 0x71, 0x96, 0x65, 0x97, 0xBD, 0x97, 0xAB, 0x96, 0x37, 0xBE, 0xBF, 0xFF, 0x2E, 0xF4, 0xDD, 0xF1, 0x7B, 0xC1, 0xF7, 0xF9, 0x15, 0xE8, 0x15, 0xF6, 0x15, 0xB3, 0x95, 0xD4, 0x95, 0xD1, 0x95, 0x3B, 0xC0, 0xDF, 0x75, 0x7F, 0x44, 0xFF, 0xE8, 0xFA, 0x71, 0xBA, 0x4A, 0xB8, 0xAA, 0xB8, 0xEA, 0xBF, 0x5A, 0xB7, 0xBA, 0xB3, 0x86, 0xB1, 0x26, 0xB6, 0x06, 0x59, 0x2B, 0x5E, 0x5B, 0x5A, 0x87, 0x5B, 0xE7, 0x5A, 0xB7, 0x58, 0x4F, 0x5F, 0x1F, 0x5F, 0xBF, 0xDF, 0xA0, 0xDD, 0xD0, 0x03, 0x5C, 0xBE, 0x6B, 0xE3, 0x74, 0x93, 0x60, 0x53, 0x71, 0xD3, 0x7F, 0xB3, 0x76, 0x73, 0x7B, 0x0B, 0x6D, 0x4B, 0x64, 0xCB, 0x69, 0xAB, 0x70, 0x6B, 0x7E, 0x1B, 0x7A, 0x9B, 0x6D, 0xDB, 0x74, 0x3B, 0x79, 0x7B, 0x78, 0xFB, 0x66, 0x87, 0x6B, 0xC7, 0x77, 0x67, 0x68, 0x17, 0x71, 0x57, 0x79, 0x37, 0x6D, 0x77, 0x63, 0x8F, 0x7C, 0xCF, 0x7A, 0xAF, 0x6E, 0xEF, 0xEF, 0x4F, 0x81, 0x9F, 0xC1, 0x3F, 0xC7, 0x7F, 0xA1, 0xFE, 0xD2, 0xFC, 0x95, 0xFD, 0x6B, 0x77, 0x9F, 0x7A, 0xDF, 0x7E, 0xBF, 0x69, 0xFF, 0xE1, 0x40, 0xF8, 0x20, 0xEC, 0x60, 0xEA, 0x37, 0xC6, 0x6F, 0xED, 0xDF, 0xB9, 0xBF, 0xF7, 0x0E, 0x69, 0x0E, 0x1D, 0x0E, 0x9B, 0x0F, 0x1F, 0x8F, 0x84, 0x8F, 0xC2, 0x8E, 0xA6, 0x8E, 0xD1, 0x8F, 0xB5, 0x8E, 0xB3, 0x8F, 0x77, 0x4F, 0xA8, 0x4F, 0xEC, 0x4E, 0x1A, 0x4E, 0xEE, 0x4E, 0x05, 0x4E, 0x83, 0x4F, 0xC7, 0xCE, 0x50, 0xCE, 0xD4, 0xCE, 0xD2, 0xCF, 0x36, 0xCE, 0x49, 0xCF, 0x2D, 0xCE, 0xAB, 0xCF, 0xFF, 0x5C, 0x70, 0x5D, 0xF8, 0x5C, 0xF4, 0x5F, 0xC2, 0x5D, 0xCA, 0x5D, 0x7E, 0xB9, 0x5C, 0xFA, 0x83, 0xFB, 0xC7, 0xF0, 0x4F, 0xD1, 0x9F, 0xDF, 0x57, 0x0C, 0x57, 0xCE, 0x57, 0x2D, 0x57, 0x8F, 0xD7, 0xC2, 0xD7, 0x21, 0xD7, 0xE3, 0x37, 0xEF, 0x6F, 0x54, 0x6F, 0xD2, 0x6E, 0xD6, 0xFE, 0x12, 0xFF, 0x35, 0xFD, 0x5B, 0xF1, 0xF7, 0xF4, 0x96, 0xE5, 0xD6, 0xED, 0xB6, 0xE3, 0xF6, 0xE5, 0x4E, 0xEC, 0x2E, 0xFC, 0x6E, 0x12, 0x70, 0x7E, 0xB5, 0xFB, 0xB4, 0xFB, 0xF5, 0x07, 0xE2, 0x07, 0xD3, 0x87, 0xF2, 0x87, 0x93, 0x47, 0xE6, 0x47, 0x97, 0xC7, 0xB6, 0xC7, 0xC7, 0x27, 0xA1, 0xA7, 0xE0, 0xA7, 0xD1, 0x67, 0xA4, 0x67, 0xC5, 0xE7, 0xC4, 0xE7, 0xE5, 0x17, 0x9C, 0x17, 0x83, 0x97, 0x82, 0x97, 0x9F, 0xAF, 0xD4, 0xAF, 0x36, 0xAF, 0xB5, 0xAF, 0x7F, 0xDE, 0x38, 0xDF, 0x3C, 0xDF, 0xBA, 0xFF, 0xF1, 0x7F, 0x09, 0x50, 0x04, 0x68, 0x0A, 0x0A, 0x15, 0x4A, 0x0D, 0x2A, 0x15, 0x6A, 0x15, 0x9A, 0x00, 0xDA, 0x18, 0xBA, 0x18, 0xFA, 0x37, 0x0C, 0x1D, 0x8C, 0x03, 0x4C, 0x03, 0xCC, 0x0D, 0x2C, 0x0F, 0xAC, 0x0F, 0x6C, 0x1F, 0x1C, 0x34, 0x9C, 0x14, 0x5C, 0x14, 0xDC, 0xF4, 0x3B, 0xF4, 0x77, 0xEA, 0xEF, 0xD2, 0xDE, 0xAD, 0xC1, 0x13, 0xC2, 0x1B, 0xC3, 0x97, 0xC0, 0xFF, 0x46, 0xA0, 0x43, 0x70, 0x40, 0x68, 0x40, 0xB8, 0x41, 0xE4, 0x41, 0xF4, 0x41, 0xEC, 0x45, 0x82, 0x42, 0x92, 0x44, 0x8A, 0x44, 0x9A, 0x42, 0x46, 0x45, 0x56, 0x45, 0x4E, 0x45, 0xFE, 0x81, 0x82, 0x8F, 0x62, 0x84, 0x52, 0x88, 0xB2, 0xFF, 0x9E, 0xE6, 0xBD, 0xED, 0xFB, 0xDA, 0xF7, 0x7F, 0x50, 0x39, 0x50, 0x3D, 0x50, 0x3B, 0x51, 0x5F, 0xD1, 0x44, 0xD1, 0x42, 0xD1, 0xC6, 0xD0, 0x91, 0xD0, 0x15, 0xD1, 0x13, 0xD0, 0x17, 0x31, 0xB0, 0x31, 0x74, 0x31, 0x72, 0x30, 0xB6, 0x31, 0xC9, 0x30, 0xCD, 0x31, 0x2B, 0x30, 0x4F, 0x3E, 0x30, 0x7D, 0x70, 0xFE, 0xD0, 0xFC, 0xE1, 0xEE, 0x23, 0x1F, 0x40, 0x05, 0xFD, 0x58, 0x30, 0x58, 0x52, 0x58, 0x51, 0x58, 0xD3, 0xD8, 0x68, 0x00, 0x17, 0xA4, 0x60, 0xAF, 0x7C, 0xC2, 0xFB, 0x64, 0xF8, 0xA9, 0xE0, 0xD3, 0x4F, 0x1C, 0x2A, 0x1C, 0x6B, 0x9C, 0x2A, 0x9C, 0x73, 0x5C, 0x56, 0x5C, 0x57, 0xDC, 0x36, 0xDC, 0x47, 0x3C, 0x01, 0xBC, 0x00, 0xBC, 0x41, 0x7C, 0x38, 0x7C, 0x19, 0xFC, 0x68, 0xFC, 0x19, 0x02, 0x74, 0x02, 0x75, 0x82, 0x54, 0x82, 0x1F, 0x84, 0xF8, 0x84, 0x46, 0x84, 0x05, 0x84, 0x3F, 0x89, 0xA8, 0x88, 0xAC, 0x88, 0xAA, 0x88, 0xCE, 0x89, 0x59, 0x89, 0x5D, 0x88, 0x5B, 0x89, 0x1F, 0x48, 0x38, 0x49, 0x9C, 0x48, 0xAA, 0x48, 0x0E, 0x48, 0xC9, 0x48, 0x0D, 0x49, 0x33, 0x48, 0x17, 0xC9, 0xD0, 0xC8, 0xE4, 0xC8, 0xC2, 0xC8, 0xFA, 0xC9, 0x9E, 0xC8, 0xB9, 0xC9, 0x21, 0xE4, 0x35, 0xE4, 0x87, 0x14, 0xE4, 0x14, 0x46, 0x14, 0x99, 0x14, 0xCB, 0x94, 0xE8, 0x94, 0xF2, 0x94, 0xE1, 0x94, 0x03, 0x00, 0x27, 0x70, 0x53, 0x41, 0xA8, 0x6A, 0xA8, 0x0E, 0xA9, 0xC9, 0xA9, 0x8D, 0xA8, 0x33, 0xA9, 0x97, 0x68, 0xD0, 0x68, 0xE4, 0x68, 0xC2, 0x68, 0xFA, 0x69, 0x9E, 0x68, 0xB9, 0x68, 0x9D, 0x69, 0xAB, 0x69, 0x7F, 0xD3, 0x91, 0xD1, 0x19, 0xD2, 0x65, 0xD0, 0x2D, 0xD2, 0xA3, 0xD2, 0xCB, 0xD0, 0x87, 0xD0, 0xF7, 0xD2, 0x3F, 0x30, 0x70, 0x00, 0xB4, 0x50, 0xC9, 0xF0, 0x8B, 0x91, 0x98, 0x51, 0x8F, 0x31, 0x95, 0x71, 0x8E, 0x09, 0x99, 0x49, 0x92, 0x29, 0x90, 0xA9, 0x8B, 0xE9, 0x96, 0x99, 0x95, 0xD9, 0x8E, 0xB9, 0x8C, 0x79, 0x97, 0x85, 0x80, 0x45, 0x9B, 0x25, 0x09, 0x20, 0x06, 0x04, 0x56, 0x31, 0x56, 0x3F, 0xD6, 0x76, 0xD6, 0x6B, 0x36, 0x26, 0x36, 0x6B, 0xB6, 0x12, 0xB6, 0x6D, 0x76, 0x5C, 0x76, 0x0D, 0xF6, 0x2F, 0xEC, 0x93, 0x1C, 0x70, 0x1C, 0x22, 0x1C, 0x3E, 0x1C, 0xAD, 0x1C, 0x7F, 0x38, 0xE9, 0x39, 0x2D, 0x38, 0x0B, 0x39, 0x37, 0xB8, 0x3E, 0x71, 0xA9, 0x71, 0xC5, 0x71, 0x8D, 0x71, 0x43, 0x73, 0x0B, 0x72, 0x7B, 0x02, 0xDC, 0x70, 0xCE, 0x43, 0xC3, 0x63, 0xCA, 0x93, 0xC7, 0xB3, 0xCA, 0xFB, 0x91, 0x57, 0x89, 0x37, 0x8A, 0x77, 0x98, 0xF7, 0x8D, 0x8F, 0x8F, 0xCF, 0x95, 0xAF, 0x8E, 0xEF, 0x98, 0x9F, 0x92, 0xFF, 0x33, 0x7F, 0x16, 0xFF, 0xB2, 0x00, 0x9A, 0x80, 0x1C, 0x90, 0x29, 0xF4, 0x09, 0x3C, 0x0A, 0x72, 0x0A, 0x3A, 0x0A, 0x56, 0x0A, 0xEE, 0x0B, 0x11, 0x0B, 0xE9, 0x09, 0xA5, 0x08, 0xCD, 0x0A, 0x23, 0x01, 0xA9, 0x42, 0x80, 0x70, 0x87, 0xF0, 0x8D, 0x08, 0x8B, 0x88, 0xBD, 0x48, 0xA5, 0xC8, 0x81, 0x28, 0xB9, 0xA8, 0xB1, 0x68, 0xAE, 0xE8, 0xAA, 0x18, 0xB6, 0x98, 0xBA, 0xD8, 0x17, 0xB1, 0x69, 0x71, 0x04, 0x71, 0x49, 0xF1, 0x60, 0xF1, 0x5E, 0xF1, 0x27, 0x09, 0x6E, 0x09, 0x57, 0x89, 0x7A, 0x89, 0x33, 0x49, 0x5A, 0x49, 0x0B, 0xC9, 0x22, 0x20, 0x53, 0xC0, 0x97, 0xD2, 0x96, 0x4A, 0x91, 0x9A, 0x93, 0x46, 0x91, 0x96, 0x95, 0x0E, 0x93, 0x1E, 0x90, 0x7E, 0x91, 0xE1, 0x93, 0x71, 0x97, 0x69, 0x94, 0x39, 0x97, 0xA5, 0x93, 0xB5, 0x04, 0x28, 0x62, 0x5B, 0x0E, 0x5F, 0x4E, 0x5B, 0x2E, 0x59, 0x6E, 0x56, 0x1E, 0x59, 0x5E, 0x5A, 0x3E, 0x44, 0xBE, 0x4F, 0xFE, 0x49, 0x81, 0x5B, 0xC1, 0x45, 0xA1, 0x4E, 0xE1, 0x44, 0x91, 0x5A, 0xD1, 0x54, 0x31, 0x5F, 0x71, 0x4D, 0x09, 0x5B, 0x49, 0x4D, 0x29, 0x5E, 0x69, 0x52, 0x19, 0x4E, 0x59, 0x54, 0xD9, 0x4F, 0xB9, 0x43, 0xF9, 0x46, 0x85, 0x45, 0xC5, 0x4E, 0xA5, 0x5C, 0xE5, 0xA7, 0x2A, 0xB1, 0xAA, 0x9E, 0x6A, 0x9A, 0xEA, 0xBC, 0xDA, 0x7B, 0x35, 0x19, 0xB5, 0x50, 0xB5, 0x3E, 0xB5, 0x27, 0x75, 0x2E, 0x75, 0x88, 0x7A, 0x8D, 0xFA, 0x91, 0x06, 0x85, 0x86, 0xB1, 0x46, 0xB6, 0xC6, 0x77, 0x4D, 0x4C, 0x4D, 0x45, 0xCD, 0x48, 0xCD, 0x61, 0xCD, 0x37, 0x2D, 0x3E, 0x2D, 0x37, 0xAD, 0x06, 0xAD, 0x53, 0x6D, 0x1A, 0x6D, 0x53, 0xED, 0x3C, 0xED, 0x35, 0x1D, 0x2C, 0x1D, 0x55, 0x9D, 0x58, 0x9D, 0x71, 0x5D, 0x18, 0x5D, 0x61, 0x80, 0x28, 0x5A, 0x75, 0xAF, 0xF4, 0x18, 0xF5, 0xAC, 0xF5, 0x4A, 0xF5, 0x76, 0xF4, 0x09, 0xF4, 0x75, 0xF4, 0x53, 0xF4, 0x67, 0x0D, 0x90, 0x0D, 0xA4, 0x0D, 0x42, 0x0C, 0xFA, 0x0C, 0x1E, 0x0D, 0xB9, 0x0C, 0x21, 0x40, 0x8A, 0x70, 0x6C, 0x44, 0x65, 0x64, 0x62, 0x94, 0x67, 0xB4, 0xF6, 0x19, 0xFB, 0xB3, 0xDA, 0xE7, 0xF8, 0xCF, 0x93, 0xC6, 0xF0, 0xC6, 0x52, 0xC6, 0x61, 0xC6, 0xC3, 0x60, 0x18, 0xB0, 0x18, 0x38, 0x08, 0xDC, 0x0F, 0x7E, 0x33, 0x11, 0x36, 0xF1, 0x37, 0xE9, 0x31, 0x79, 0x36, 0xE5, 0x37, 0xF5, 0x31, 0xED, 0x34, 0x7D, 0x30, 0xE3, 0x35, 0xF3, 0x34, 0x6B, 0x33, 0xBB, 0x33, 0xE7, 0x32, 0x77, 0x33, 0x6F, 0x31, 0xBF, 0xB1, 0xE0, 0xB0, 0x70, 0xB1, 0x68, 0xB2, 0xB8, 0xB2, 0x64, 0xB3, 0x74, 0xB6, 0x6C, 0xB0, 0xBC, 0xB4, 0x62, 0xB1, 0x72, 0xB2, 0xAA, 0xB3, 0xBA, 0xB0, 0x66, 0xB6, 0x76, 0xB4, 0xAE, 0xB5, 0x3E, 0xB7, 0x61, 0xB2, 0x71, 0xB0, 0xA9, 0xB5, 0x39, 0xB7, 0x65, 0xB2, 0x75, 0xB0, 0xAD, 0xB5, 0x3D, 0xB7, 0x63, 0xB2, 0x73, 0xB0, 0xAB, 0xB5, 0xBB, 0xB0, 0x67, 0xB6, 0x77, 0xB4, 0xAF, 0xB3, 0xBF, 0x74, 0x60, 0x71, 0x70, 0x76, 0x68, 0x70, 0xF8, 0xE3, 0xC8, 0xE6, 0x08, 0x71, 0x6C, 0x72, 0xBC, 0x71, 0xE2, 0x70, 0x72, 0x73, 0x6A, 0x75, 0xBA, 0x05, 0xB2, 0x03, 0x4F, 0xE7, 0x0E, 0xE7, 0x07, 0x08, 0x1F, 0xC4, 0x07, 0xD2, 0x0D, 0x79, 0x71, 0x11, 0x72, 0x09, 0x70, 0xE9, 0x77, 0x85, 0x72, 0x15, 0x73, 0x0D, 0x75, 0x1D, 0x71, 0x7B, 0xE7, 0x26, 0xED, 0x16, 0xE9, 0x36, 0xE9, 0x8E, 0xEC, 0xAE, 0xE0, 0x1E, 0xEF, 0x3E, 0xEB, 0x81, 0xEE, 0xA1, 0x06, 0x30, 0xC6, 0xB2, 0x27, 0xB6, 0xA7, 0x8E, 0x67, 0xA6, 0xE7, 0xBA, 0x17, 0xA1, 0x97, 0x91, 0x57, 0x81, 0xD7, 0x9E, 0x37, 0xB9, 0xB7, 0xB9, 0x77, 0xB9, 0xF7, 0x91, 0x0F, 0x1D, 0x40, 0x19, 0xB5, 0x3E, 0x97, 0xBE, 0x6C, 0xBE, 0xAE, 0xBE, 0xAD, 0xBE, 0xF7, 0x7E, 0x7C, 0x7E, 0xBE, 0x7E, 0xBD, 0xFE, 0x20, 0x7F, 0x31, 0xFF, 0x50, 0xFF, 0xD1, 0x00, 0xC4, 0x00, 0xF9, 0x80, 0xB8, 0x80, 0xD9, 0x40, 0xF4, 0x40, 0xA5, 0xC0, 0xB8, 0xC0, 0xA9, 0x20, 0xC4, 0x20, 0xE9, 0xA0, 0xB0, 0xA0, 0xA1, 0x60, 0xA8, 0x60, 0x91, 0x60, 0xFF, 0xE0, 0xEE, 0xE0, 0xA7, 0x10, 0xDE, 0x10, 0xCF, 0x90, 0xD6, 0x90, 0xBF, 0xA1, 0xEC, 0xA1, 0x90, 0xD0, 0xFA, 0xD0, 0x8B, 0x30, 0xA6, 0x30, 0xBB, 0xB0, 0xAA, 0xB0, 0x63, 0x80, 0x34, 0xAC, 0xC2, 0xCB, 0xC3, 0x0F, 0x22, 0x28, 0x23, 0xCC, 0x22, 0x8A, 0x23, 0xF6, 0x22, 0x49, 0x81, 0xBC, 0xA0, 0x20, 0x72, 0x3B, 0x8A, 0x28, 0xCA, 0x30, 0x2A, 0x37, 0x6A, 0x23, 0x9A, 0x20, 0x5A, 0x3F, 0x3A, 0x3B, 0x7A, 0x2D, 0x06, 0x2F, 0x46, 0x2F, 0x26, 0x33, 0x66, 0x35, 0x16, 0x37, 0x56, 0x37, 0x36, 0x33, 0x76, 0x35, 0x0E, 0x37, 0x4E, 0x37, 0x2E, 0x33, 0x6E, 0x35, 0x1E, 0x37, 0x5E, 0x37, 0x3E, 0x33, 0x7E, 0xED, 0x0B, 0xDE, 0x17, 0x3D, 0x80, 0x35, 0xD6, 0x81, 0xB4, 0xC0, 0x20, 0x21, 0x37, 0x61, 0x2B, 0x91, 0x28, 0xF1, 0x73, 0x62, 0x41, 0xE2, 0x6E, 0x12, 0x59, 0x92, 0x69, 0x52, 0x49, 0xD2, 0x7E, 0x32, 0x55, 0xB2, 0x65, 0x72, 0x45, 0xF2, 0x51, 0x0A, 0x7D, 0x8A, 0x5D, 0x4A, 0x4D, 0xCA, 0x45, 0x2A, 0x4B, 0x2A, 0x24, 0xB5, 0x29, 0xF5, 0x6F, 0x1A, 0x77, 0x9A, 0x57, 0x5A, 0x67, 0xDA, 0x73, 0xBA, 0x50, 0x7A, 0x60, 0xFA, 0x60, 0x06, 0x6C, 0x86, 0x54, 0x46, 0x64, 0xC6, 0x64, 0xE6, 0xFB, 0x4C, 0xE5, 0xCC, 0xC4, 0xCC, 0xA5, 0x2C, 0xEC, 0x2C, 0x9D, 0xAC, 0xEC, 0xAC, 0xCD, 0x6C, 0x92, 0x6C, 0x53, 0x20, 0x29, 0x38, 0xCC, 0xA1, 0xCF, 0xB1, 0xCF, 0xA9, 0xCF, 0xB9, 0xCE, 0xE5, 0xCA, 0xF5, 0xCA, 0xED, 0xCE, 0x7D, 0xCB, 0x13, 0xCB, 0x0B, 0x03, 0x68, 0x03, 0x39, 0x5F, 0x29, 0x3F, 0x31, 0x7F, 0xB9, 0x00, 0xBB, 0x40, 0xA3, 0x20, 0xA9, 0x60, 0xBE, 0x10, 0xAD, 0x50, 0xB1, 0x30, 0xB6, 0x70, 0xB2, 0x08, 0xA1, 0x48, 0xBA, 0x28, 0xAC, 0x68, 0xB8, 0x18, 0xBA, 0x58, 0xB4, 0x38, 0xA0, 0xB8, 0xB7, 0xF8, 0xB9, 0x84, 0xBF, 0xC4, 0xBB, 0xA4, 0xA3, 0xE4, 0x0E, 0x20, 0x0D, 0xB7, 0xD2, 0xE6, 0xD2, 0xEB, 0x32, 0xD6, 0x32, 0xA7, 0xB2, 0xBA, 0xB2, 0xF3, 0x72, 0xC6, 0x72, 0x3B, 0x80, 0x33, 0x4E, 0x2A, 0xE8, 0x2A, 0xAC, 0x2B, 0x2A, 0x2A, 0x0E, 0xBF, 0x52, 0x7F, 0xB5, 0xF8, 0x5A, 0xFA, 0x75, 0xBF, 0x92, 0xA2, 0xD2, 0xB4, 0xB2, 0xB8, 0x72, 0xAF, 0x8A, 0xB4, 0xCA, 0xB8, 0xAA, 0xA0, 0x6A, 0xBB, 0x9A, 0xA8, 0xDA, 0xB0, 0x3A, 0x07, 0x60, 0x0C, 0xBC, 0x1A, 0xDD, 0x9A, 0x8C, 0x9A, 0x95, 0x5A, 0xAC, 0x5A, 0x8D, 0xDA, 0xE4, 0xDA, 0x85, 0x3A, 0xF4, 0x3A, 0xE5, 0xBA, 0x78, 0x80, 0x30, 0x90, 0xEB, 0xE5, 0xEA, 0x23, 0xEB, 0xC7, 0x1A, 0xE0, 0x1A, 0x24, 0x1A, 0x82, 0x1B, 0xFA, 0x1B, 0xDE, 0x1A, 0x05, 0x1B, 0x7D, 0x1A, 0x3B, 0x1B, 0xEF, 0x9B, 0xB8, 0x9A, 0x5C, 0x9B, 0x9A, 0x9A, 0xFE, 0x34, 0x33, 0x37, 0xDB, 0x37, 0x57, 0x35, 0x1F, 0xB5, 0x50, 0xB7, 0x98, 0xB7, 0x14, 0xB7, 0xEC, 0xB4, 0x12, 0xB5, 0x1A, 0xB4, 0x66, 0x01, 0x74, 0x81, 0xD5, 0xA6, 0xDE, 0x96, 0xD8, 0xF6, 0xAD, 0x1D, 0xA5, 0x5D, 0xB6, 0x3D, 0xA2, 0x7D, 0xB8, 0x03, 0xBA, 0x43, 0xB8, 0xC3, 0xAF, 0xA3, 0xB3, 0xE3, 0xAE, 0x93, 0xB3, 0x13, 0xD2, 0x59, 0x07, 0xB0, 0x05, 0x6D, 0x97, 0x65, 0x57, 0x49, 0xD7, 0x6E, 0x37, 0x51, 0xB7, 0x7E, 0x77, 0x46, 0xF7, 0x72, 0x0F, 0x66, 0x8F, 0x72, 0x4F, 0x6C, 0xCF, 0x78, 0x2F, 0x5C, 0xAF, 0x58, 0x6F, 0x40, 0x6F, 0x57, 0xEF, 0x3D, 0x40, 0x16, 0xCE, 0x7D, 0xB5, 0x7D, 0xC7, 0xFD, 0xF4, 0xFD, 0x8E, 0xFD, 0x8D, 0xFD, 0xB7, 0x03, 0xBC, 0x03, 0x7E, 0x03, 0xFD, 0x83, 0x30, 0x83, 0xD2, 0x83, 0xD1, 0x83, 0x33, 0x43, 0xE8, 0x43, 0xEA, 0x43, 0x69, 0x43, 0xAB, 0xC3, 0x04, 0xC3, 0x9F, 0x87, 0x8B, 0x86, 0xF7, 0x47, 0x68, 0x46, 0x6C, 0x47, 0x6A, 0x47, 0x2E, 0x47, 0xD9, 0x47, 0xDD, 0x47, 0xDB, 0x47, 0x9F, 0xC6, 0x84, 0xC6, 0x02, 0xC7, 0x86, 0xC6, 0xE1, 0xC6, 0x65, 0xC6, 0xA3, 0xC7, 0x67, 0x26, 0xD0, 0x26, 0x54, 0x27, 0x92, 0x27, 0xBE, 0x4F, 0xE2, 0x00, 0x69, 0x40, 0xCE, 0xE4, 0xF6, 0x14, 0xE9, 0x94, 0xE9, 0x54, 0xE9, 0xD4, 0xEF, 0x69, 0x5A, 0x80, 0x1C, 0x6A, 0xA6, 0x2F, 0x00, 0x6E, 0x70, 0x99, 0x69, 0x01, 0xA8, 0x81, 0xF7, 0x9B, 0xCF, 0xB7, 0x9E, 0x6F, 0xAF, 0xB3, 0x22, 0xB3, 0xC1, 0xB3, 0xC3, 0x73, 0xEF, 0xE6, 0xA4, 0xE7, 0xA2, 0xE6, 0xA6, 0xE6, 0x51, 0xE6, 0x95, 0xE6, 0xBF, 0xCC, 0xCF, 0x2F, 0x7C, 0x58, 0xD0, 0x58, 0x48, 0x5B, 0x58, 0x59, 0xC4, 0x5D, 0xD4, 0x5B, 0xCC, 0x5E, 0xDC, 0x5C, 0x22, 0x5A, 0x32, 0x5E, 0x2A, 0x5C, 0xFA, 0xB9, 0x4C, 0xB1, 0x6C, 0xBE, 0x5C, 0xBE, 0x7C, 0xF8, 0x9D, 0xF6, 0xBB, 0xCD, 0xF7, 0xEA, 0xEF, 0x67, 0x2B, 0x4C, 0x2B, 0x8E, 0x2B, 0x0D, 0x2B, 0x57, 0x3F, 0xD8, 0x7F, 0xB8, 0xFE, 0x68, 0xF9, 0x71, 0xB7, 0xCA, 0x03, 0xAC, 0xFC, 0x3B, 0x57, 0x9F, 0xD6, 0x04, 0xD6, 0xFC, 0xD6, 0x7A, 0xD7, 0xDE, 0xD6, 0x45, 0xD6, 0x83, 0xD6, 0x07, 0x37, 0x60, 0x36, 0x24, 0x36, 0xC2, 0x36, 0x46, 0x37, 0xE1, 0x37, 0xA5, 0x37, 0x23, 0x37, 0x27, 0xB6, 0x90, 0xB6, 0xE4, 0xB7, 0x62, 0xB6, 0xA6, 0xB7, 0xDF, 0x6F, 0x2B, 0x6D, 0xC7, 0x6F, 0xCF, 0xEE, 0x60, 0xEC, 0xE8, 0xED, 0x14, 0xED, 0x9C, 0xEC, 0xB2, 0xEF, 0xFA, 0xEE, 0x0E, 0xEF, 0xA1, 0xEC, 0x69, 0xEC, 0xE5, 0xEE, 0xED, 0xFF, 0x64, 0xFC, 0xE9, 0xF6, 0xB3, 0xE7, 0xD7, 0xBB, 0x5F, 0x4A, 0xBF, 0xD2, 0x7E, 0x6D, 0xED, 0x53, 0xED, 0x3B, 0xEC, 0xB7, 0xEE, 0xBF, 0x1E, 0x48, 0x1D, 0xC4, 0x1F, 0x2C, 0xFF, 0x26, 0xFC, 0x6D, 0xFE, 0xBB, 0xE6, 0xF7, 0xDF, 0x43, 0x81, 0xC3, 0xD0, 0xC3, 0xE9, 0xA3, 0x0F, 0x47, 0xFA, 0x47, 0xC5, 0x47, 0xC7, 0xC7, 0x6C, 0xC7, 0xDE, 0xC7, 0x03, 0x27, 0x88, 0x27, 0x2A, 0x27, 0x19, 0x27, 0xDB, 0xA7, 0x54, 0xA7, 0x0E, 0xA7, 0x2D, 0xA7, 0xCF, 0x67, 0x12, 0x67, 0x31, 0x67, 0x0B, 0xE7, 0x78, 0xE7, 0xE0, 0xF3, 0x8A, 0xF3, 0x0B, 0x80, 0x01, 0xFC, 0x2F, 0x46, 0x2E, 0x51, 0x2E, 0xD5, 0x2F, 0xB3, 0x2E, 0x77, 0xFF, 0xD0, 0xFC, 0x71, 0xFC, 0xD3, 0xFA, 0xE7, 0xE5, 0x4A, 0xE2, 0x2A, 0xE6, 0x6A, 0xFE, 0x1A, 0xE7, 0xFA, 0xF3, 0x75, 0x19, 0xB0, 0xF2, 0x67, 0xBF, 0xF1, 0xBE, 0x19, 0xF8, 0x0B, 0xFF, 0x57, 0xE9, 0x6F, 0xEA, 0xDF, 0xF5, 0x5B, 0xB2, 0x5B, 0xAB, 0xDB, 0xBA, 0xDB, 0xDB, 0x3B, 0x81, 0xBB, 0xE0, 0xBB, 0x89, 0x7B, 0xB4, 0x7B, 0xAD, 0xFB, 0x9C, 0xFB, 0xBD, 0x07, 0xDA, 0x07, 0xC7, 0x87, 0x96, 0x87, 0xE7, 0x47, 0xB1, 0xC7, 0xC8, 0xC7, 0x6F, 0x4F, 0x1F, 0x9F, 0xF4, 0x9E, 0x0A, 0x9E, 0x7E, 0x03, 0xAB, 0x7F, 0x97, 0xE7, 0x8E, 0xE7, 0xB7, 0x17, 0xC9, 0x97, 0x98, 0x97, 0xB9, 0x57, 0xEC, 0x57, 0x83, 0xD7, 0xA2, 0xD7, 0xC3, 0x37, 0xA6, 0x37, 0xD7, 0xB7, 0x8E, 0x7F, 0xFC, 0x5F, 0x1A, 0x14, 0x07, 0x5A, 0x82, 0xC2, 0x83, 0x02, 0x43, 0x95, 0x43, 0x9D, 0x43, 0x73, 0x40, 0x7B, 0x43, 0x0F, 0xC0, 0xC0, 0xC3, 0x28, 0xC1, 0xA4, 0xC0, 0xAC, 0xC1, 0x92, 0xC2, 0x5A, 0xC2, 0xD6, 0xC0, 0x5E, 0xC3, 0xF1, 0xC1, 0x05, 0xC2, 0x8D, 0xBE, 0x43, 0x79, 0xA7, 0xF6, 0x2E, 0xF3, 0xDD, 0x36, 0x3C, 0x25, 0xBC, 0x2D, 0x7C, 0x03, 0xFC, 0x1D, 0x82, 0x20, 0x42, 0x08, 0xC2, 0x04, 0x22, 0x1A, 0xA2, 0x26, 0x62, 0x36, 0xE2, 0x2E, 0xD0, 0x07, 0xD8, 0x23, 0x35, 0x21, 0x3D, 0x20, 0x0B, 0x23, 0x87, 0x21, 0x4F, 0xA1, 0xA0, 0xA3, 0x68, 0xA1, 0xE4, 0xA0, 0xEC, 0x01, 0xDE, 0x6F, 0xFF, 0xBE, 0xE9, 0xFD, 0x03, 0xAA, 0x10, 0x6A, 0x28, 0xEA, 0x24, 0x1A, 0x1A, 0x9A, 0x26, 0x5A, 0x36, 0xDA, 0x0E, 0x3A, 0x15, 0xBA, 0x2D, 0x7A, 0x03, 0xFA, 0x1D, 0x86, 0x00, 0x46, 0x30, 0xC6, 0x18, 0x26, 0x0A, 0xA6, 0x1A, 0x66, 0x3A, 0xE6, 0xE6, 0x07, 0xB2, 0x0F, 0x56, 0x1F, 0x6A, 0x3E, 0x5C, 0x7D, 0xE4, 0x01, 0x9C, 0x7F, 0x10, 0x0B, 0x01, 0x68, 0x08, 0x92, 0xB0, 0x56, 0xB0, 0x09, 0xB1, 0x4D, 0xB0, 0xCB, 0x81, 0x44, 0x80, 0xF5, 0x93, 0x07, 0xD0, 0x12, 0x40, 0xE1, 0x48, 0xE1, 0xC4, 0xE0, 0xCC, 0xE1, 0x62, 0xE1, 0xEA, 0xE1, 0xE6, 0xE3, 0xFE, 0xC2, 0xA3, 0xC5, 0x73, 0xC0, 0x6B, 0xC2, 0xBB, 0xC7, 0x17, 0xC4, 0x0F, 0xC6, 0x1F, 0x23, 0x40, 0x21, 0x50, 0x25, 0x48, 0x23, 0x58, 0x27, 0x24, 0x21, 0x34, 0x27, 0xAC, 0x24, 0x3C, 0x27, 0x62, 0x27, 0xF2, 0x24, 0xEA, 0x21, 0x86, 0x26, 0x96, 0x22, 0x8E, 0x21, 0x9E, 0x23, 0xC1, 0x00, 0x92, 0x81, 0x40, 0x92, 0x36, 0x92, 0x0B, 0x52, 0x2A, 0x52, 0x23, 0xA0, 0x35, 0x98, 0x21, 0x83, 0x23, 0x13, 0x20, 0x73, 0x25, 0xAB, 0x22, 0xDB, 0x23, 0xC7, 0x23, 0x57, 0x25, 0x8F, 0x22, 0xEF, 0x27, 0xBF, 0xA7, 0x60, 0xA6, 0xB0, 0xA0, 0xC8, 0x03, 0x9C, 0xFF, 0x3D, 0xA5, 0x04, 0xA5, 0x0F, 0x65, 0x13, 0xE5, 0x31, 0x15, 0x29, 0x95, 0x0E, 0x55, 0x02, 0xD5, 0x18, 0xD5, 0x2B, 0x35, 0x27, 0xB5, 0x3D, 0x75, 0x09, 0xF5, 0x3A, 0x0D, 0x26, 0x8D, 0x2C, 0x4D, 0x10, 0x4D, 0x3B, 0xCD, 0x05, 0x2D, 0x15, 0xAD, 0x21, 0x6D, 0x0A, 0xED, 0x14, 0x1D, 0x0C, 0x1D, 0x1F, 0x9D, 0x33, 0x5D, 0x05, 0xDD, 0x36, 0x3D, 0x36, 0xBD, 0x22, 0x7D, 0x28, 0x7D, 0x17, 0xFD, 0x15, 0x03, 0x2D, 0x83, 0x31, 0x43, 0x3A, 0xC3, 0x37, 0x46, 0x38, 0x46, 0x01, 0x46, 0x17, 0xC6, 0x4A, 0xC6, 0x5D, 0x26, 0x1C, 0x26, 0x65, 0xA6, 0x70, 0xA6, 0x6E, 0xA6, 0x6B, 0x66, 0x3A, 0x66, 0x30, 0x73, 0x06, 0xF3, 0x2C, 0x0B, 0x1C, 0x8B, 0x00, 0x8B, 0x0B, 0x4B, 0x25, 0xCB, 0x2E, 0xEB, 0x27, 0x56, 0x25, 0xD6, 0x30, 0xD6, 0x6E, 0xD6, 0x2B, 0x36, 0x5A, 0x36, 0x63, 0xB6, 0x34, 0xB6, 0x19, 0x76, 0x58, 0x76, 0x3E, 0x76, 0x67, 0xF6, 0x72, 0xF6, 0x2D, 0x0E, 0x2C, 0x0E, 0x79, 0x8E, 0x60, 0x8E, 0x76, 0x8E, 0x0B, 0x4E, 0x4A, 0x4E, 0x03, 0xCE, 0x64, 0xCE, 0x09, 0x2E, 0x10, 0x17, 0x37, 0x90, 0x1D, 0x94, 0x70, 0xAD, 0x73, 0x63, 0x72, 0xCB, 0x70, 0x07, 0x70, 0xB7, 0x72, 0x9F, 0xF1, 0x50, 0xF0, 0xE8, 0xF3, 0x24, 0xF1, 0x8C, 0xF3, 0xBC, 0xF1, 0x72, 0xF1, 0xDA, 0xF3, 0x96, 0xF0, 0xAE, 0xF3, 0x61, 0xF2, 0xC9, 0xF2, 0x05, 0xF1, 0xB5, 0xF3, 0x5D, 0xF0, 0x53, 0xF1, 0x1B, 0xF2, 0xA7, 0xF0, 0x4F, 0x09, 0xC0, 0x08, 0xF0, 0x09, 0x38, 0x0B, 0x54, 0x08, 0xEC, 0x08, 0x7E, 0x12, 0x54, 0x02, 0xDA, 0x85, 0x1E, 0xC1, 0x1B, 0x21, 0x06, 0x21, 0x53, 0xA1, 0x2C, 0xA1, 0x05, 0x61, 0x44, 0x61, 0x51, 0x61, 0x4F, 0xE1, 0x7A, 0xE1, 0xDF, 0x22, 0xC4, 0x22, 0x5A, 0x22, 0xF1, 0x22, 0x23, 0x22, 0xCF, 0xA2, 0x1C, 0xA2, 0xB6, 0xA2, 0x45, 0xA2, 0x6B, 0x62, 0x18, 0x62, 0xB2, 0x62, 0x81, 0x62, 0x6D, 0x62, 0x17, 0xE2, 0x54, 0xE2, 0x86, 0xE2, 0x29, 0xE2, 0xD3, 0x12, 0x30, 0x12, 0x7C, 0x12, 0xCE, 0x12, 0x5F, 0x25, 0x76, 0x24, 0x3F, 0x49, 0x2A, 0x49, 0x86, 0x49, 0xF6, 0x48, 0xDE, 0x48, 0xD1, 0x4B, 0x99, 0x48, 0x65, 0x02, 0x3C, 0x80, 0x20, 0x2D, 0x2C, 0xED, 0x2E, 0x5D, 0x23, 0xFD, 0x4B, 0x06, 0x1F, 0xE8, 0x18, 0xA2, 0x64, 0xFA, 0x65, 0xEE, 0x64, 0x99, 0x64, 0xCD, 0x65, 0x73, 0x64, 0x17, 0xE5, 0x90, 0xE4, 0x44, 0xE5, 0x3C, 0xE5, 0xEA, 0xE4, 0x0E, 0xE4, 0x09, 0xE5, 0x35, 0xE4, 0x63, 0xE4, 0x07, 0xE5, 0xEF, 0x15, 0x98, 0x15, 0x2C, 0x14, 0x72, 0x15, 0x96, 0x14, 0x91, 0x14, 0x45, 0x15, 0x3D, 0x15, 0xEB, 0x14, 0xF7, 0x95, 0x08, 0x94, 0xD4, 0x95, 0xA2, 0x95, 0xFA, 0x95, 0xEE, 0x94, 0x99, 0x94, 0xCD, 0x94, 0xB3, 0x95, 0xE7, 0x55, 0x10, 0x54, 0x84, 0x55, 0xDC, 0x54, 0xAA, 0x55, 0xF6, 0x54, 0x71, 0x55, 0x95, 0x55, 0xC3, 0x55, 0xBB, 0x55, 0xAF, 0xD5, 0x68, 0xD5, 0x8C, 0xD5, 0xD2, 0xD4, 0xA6, 0xD5, 0x61, 0xD4, 0x79, 0xD5, 0x9D, 0xD4, 0xCB, 0xD4, 0x37, 0x34, 0x3E, 0x68, 0xC8, 0x6A, 0x04, 0x68, 0xB4, 0x6A, 0x9C, 0x69, 0x92, 0x6B, 0xEA, 0x69, 0x26, 0x6A, 0x8E, 0x69, 0xBE, 0x6A, 0x71, 0x6A, 0xD9, 0x69, 0x15, 0x6B, 0xAD, 0x69, 0x63, 0x68, 0xCB, 0x68, 0x07, 0x68, 0xB7, 0x69, 0x9F, 0xEB, 0x50, 0xEA, 0x18, 0xEA, 0xA4, 0xE8, 0x4C, 0x03, 0x74, 0xC0, 0xAF, 0x0B, 0xD1, 0xAD, 0xD4, 0xDD, 0xD3, 0xC3, 0xD3, 0x53, 0xD3, 0x8B, 0xD6, 0x1B, 0xD0, 0x7B, 0xD4, 0x67, 0xD3, 0xB7, 0xD1, 0x2F, 0xD2, 0x5F, 0x33, 0xC0, 0x34, 0x90, 0x07, 0xF8, 0xA0, 0xCB, 0xE0, 0xC6, 0x90, 0xC1, 0xD0, 0xDC, 0x30, 0xCF, 0xF0, 0xBB, 0x11, 0x9A, 0x91, 0x8C, 0x51, 0x90, 0x51, 0xA7, 0xD1, 0xD5, 0x67, 0xFA, 0xCF, 0x66, 0x9F, 0xF3, 0x3E, 0xAF, 0x18, 0xA3, 0x1A, 0x8B, 0x1B, 0x7B, 0x18, 0x57, 0x19, 0x6F, 0x83, 0x3F, 0x82, 0x65, 0xC0, 0x7E, 0xE0, 0x06, 0xF0, 0x81, 0x09, 0xBE, 0x89, 0xB2, 0x49, 0x28, 0x90, 0x3E, 0x9C, 0x99, 0x92, 0x99, 0x6A, 0x9B, 0xC6, 0x9A, 0x0E, 0x98, 0xDE, 0x9A, 0xD1, 0x9B, 0x19, 0x9B, 0xA5, 0x98, 0x4D, 0x98, 0xBD, 0x9A, 0xB3, 0x9B, 0x5B, 0x99, 0xE7, 0x9A, 0x2F, 0x58, 0x20, 0x58, 0x08, 0x5A, 0x40, 0x2C, 0xCA, 0x2D, 0x36, 0x2C, 0x31, 0x80, 0x1C, 0xC2, 0x07, 0xA0, 0x85, 0x03, 0x2B, 0x7C, 0x2B, 0x15, 0xA0, 0x6F, 0xE8, 0xB2, 0xBA, 0xB4, 0xA6, 0xB4, 0xD6, 0xB7, 0x4E, 0xB0, 0x1E, 0xB5, 0x7E, 0xB2, 0x61, 0xB1, 0xB1, 0xB0, 0xC9, 0xB6, 0x99, 0xB7, 0x7D, 0x67, 0x2B, 0x60, 0xEB, 0x6C, 0x5B, 0x6E, 0xBB, 0x69, 0x87, 0x09, 0x74, 0x0E, 0x7E, 0x76, 0x4D, 0x76, 0x47, 0xF6, 0xC4, 0xF6, 0x1A, 0xF6, 0xD1, 0xF6, 0xFD, 0xF6, 0xB7, 0x0E, 0xF4, 0x0E, 0x60, 0x87, 0x74, 0x87, 0x19, 0x47, 0x18, 0x47, 0x5E, 0x47, 0x47, 0xC7, 0x52, 0xC7, 0x75, 0x27, 0x0C, 0xA0, 0x77, 0xF0, 0x73, 0x6A, 0x72, 0x3A, 0x72, 0x26, 0x76, 0xD6, 0x74, 0x8E, 0x71, 0x1E, 0x70, 0xBE, 0x87, 0x30, 0x01, 0xCD, 0x43, 0x16, 0x64, 0xDE, 0x05, 0xDE, 0x45, 0xD0, 0xC5, 0xD5, 0xA5, 0xD2, 0x65, 0xC7, 0xF5, 0x93, 0xAB, 0xA2, 0x6B, 0x88, 0x6B, 0xA7, 0xEB, 0xA5, 0x1B, 0xB5, 0x9B, 0xA1, 0x5B, 0x0A, 0xC0, 0x10, 0x50, 0xEE, 0x3C, 0xEE, 0x0E, 0xEE, 0xA5, 0xEE, 0x1B, 0x1E, 0x98, 0x1E, 0xB2, 0x1E, 0x01, 0x1E, 0xAD, 0x1E, 0x67, 0x9E, 0xE4, 0x9E, 0x7A, 0x9E, 0x09, 0x9E, 0x63, 0x9E, 0xAF, 0x40, 0xFF, 0x60, 0xEB, 0x55, 0xE4, 0xB5, 0xEA, 0x8D, 0xE6, 0x2D, 0xE5, 0xED, 0xE7, 0xDD, 0xEC, 0x7D, 0xE2, 0x43, 0xE6, 0xA3, 0xEB, 0xF3, 0xC5, 0x67, 0xD4, 0xE7, 0xC5, 0x97, 0xC3, 0xD7, 0xCE, 0xB7, 0xD8, 0x77, 0xCD, 0x0F, 0xC3, 0x4F, 0xC6, 0x2F, 0xC0, 0xAF, 0xD5, 0xEF, 0xCC, 0x9F, 0xD2, 0xDF, 0xC0, 0x3F, 0xD9, 0x7F, 0x2A, 0x00, 0x3A, 0x80, 0x37, 0xC0, 0x39, 0xA0, 0x22, 0x60, 0x27, 0x10, 0x33, 0x50, 0x28, 0xD0, 0x26, 0x30, 0x2D, 0x70, 0x30, 0xF0, 0x3C, 0x08, 0x2F, 0x48, 0x2A, 0x08, 0x12, 0x94, 0x17, 0x34, 0x19, 0x74, 0x1B, 0x4C, 0x16, 0xAC, 0x14, 0xEC, 0x1D, 0x5C, 0x16, 0xBC, 0x10, 0xFC, 0x16, 0x42, 0x1F, 0xA2, 0x1D, 0x12, 0x12, 0x52, 0x1F, 0xB2, 0x11, 0x8A, 0x10, 0xCA, 0x19, 0x0A, 0x0E, 0x8D, 0x0B, 0xED, 0x0C, 0x3D, 0x08, 0xFB, 0x10, 0x26, 0x0C, 0x50, 0x46, 0x46, 0xD8, 0x48, 0xD8, 0x9F, 0x70, 0xA2, 0x70, 0xB9, 0x70, 0x8F, 0xF0, 0x92, 0xF0, 0xB9, 0xF0, 0x97, 0x08, 0xBA, 0x08, 0xAD, 0x88, 0x90, 0x88, 0xFA, 0x88, 0xCD, 0x48, 0xC4, 0x48, 0xAE, 0x48, 0xD3, 0xC8, 0x84, 0xC8, 0x9E, 0xC8, 0xA3, 0x28, 0xEC, 0x28, 0xF1, 0x28, 0x27, 0x80, 0x39, 0x26, 0xA3, 0xEE, 0xA2, 0x29, 0xA2, 0x55, 0xA3, 0xFD, 0xA3, 0xAB, 0xA2, 0x7F, 0xC4, 0xC0, 0xC5, 0xB0, 0xC7, 0x18, 0xC7, 0xC4, 0xC5, 0x74, 0xC5, 0x1C, 0xC6, 0x62, 0xC5, 0x8A, 0xC7, 0x3A, 0xC5, 0xE6, 0xC5, 0x4E, 0xC7, 0x3E, 0xC4, 0x51, 0xC7, 0x69, 0xC6, 0x85, 0xC4, 0x35, 0xC4, 0x6D, 0xC7, 0xBF, 0x8F, 0xE7, 0x07, 0x1A, 0x8B, 0xF4, 0xF8, 0x91, 0xF8, 0xEB, 0x2F, 0x64, 0x5F, 0x54, 0xBE, 0xF8, 0x7F, 0xA9, 0x01, 0x38, 0x04, 0x29, 0x81, 0x27, 0xC1, 0x32, 0x21, 0x2D, 0x61, 0x24, 0xE1, 0x3A, 0x91, 0x2C, 0x51, 0x35, 0x31, 0x30, 0xB1, 0x2E, 0x71, 0x2B, 0xE9, 0x7D, 0x92, 0x40, 0x92, 0x6D, 0x52, 0x56, 0xD2, 0x64, 0xD2, 0x43, 0x32, 0x4D, 0xB2, 0x4E, 0x72, 0x44, 0x72, 0x5B, 0xF2, 0x41, 0x0A, 0x76, 0x8A, 0x54, 0x8A, 0x5B, 0x4A, 0x69, 0xCA, 0x72, 0x2A, 0x5C, 0x2A, 0x67, 0xAA, 0x79, 0x6A, 0x4A, 0xEA, 0x70, 0xEA, 0x4D, 0x1A, 0x45, 0x9A, 0x46, 0x5A, 0x68, 0x5A, 0x73, 0xDA, 0xAF, 0xF4, 0x0F, 0xE9, 0xE2, 0xE9, 0x2E, 0xE9, 0xC5, 0xE9, 0x8B, 0x19, 0xD0, 0x19, 0x6C, 0x19, 0x26, 0x19, 0x49, 0x19, 0x83, 0x19, 0x7F, 0x32, 0x49, 0x33, 0x55, 0x33, 0x83, 0x32, 0xEB, 0x33, 0x77, 0xB2, 0xD0, 0xB3, 0x84, 0xB3, 0x1C, 0xB3, 0xF2, 0xB3, 0xBE, 0x65, 0xBD, 0x66, 0x33, 0x65, 0x1B, 0x66, 0xC7, 0x65, 0xF7, 0x64, 0x9F, 0xE6, 0x10, 0xE4, 0x28, 0xE4, 0xF8, 0xE4, 0x54, 0xE5, 0xAC, 0xE5, 0x22, 0xE5, 0xF2, 0xE5, 0x5A, 0xE7, 0x66, 0xE6, 0x8E, 0xE7, 0xDE, 0xE7, 0x51, 0xE7, 0x69, 0xE7, 0x85, 0xE7, 0xB5, 0xE6, 0xED, 0xE7, 0x63, 0xE5, 0x4B, 0xE4, 0xBB, 0xE6, 0x17, 0xE7, 0x2F, 0x16, 0xC0, 0x14, 0x70, 0x17, 0xD8, 0x15, 0x14, 0x14, 0x2C, 0x03, 0x0D, 0x87, 0x50, 0x21, 0xA4, 0xB0, 0xBC, 0x70, 0xBD, 0x08, 0xBD, 0x48, 0xA2, 0xC8, 0xAB, 0xA8, 0x06, 0xE8, 0x38, 0xB0, 0x8B, 0xE5, 0x01, 0x7A, 0x69, 0x2E, 0x3E, 0x2C, 0x21, 0x00, 0x92, 0x92, 0x30, 0x80, 0x5F, 0xCE, 0x4B, 0xC9, 0x4A, 0xB5, 0x4A, 0xA3, 0x4B, 0x7B, 0x4B, 0xAF, 0xCA, 0xA8, 0xCA, 0xF4, 0xCA, 0xE2, 0xCB, 0x06, 0xCB, 0x6E, 0xCB, 0xE9, 0xCA, 0x8D, 0xCA, 0x93, 0xCA, 0x47, 0xCA, 0x1F, 0x2A, 0x18, 0x2B, 0x8C, 0x2B, 0x52, 0x2A, 0xC6, 0x2B, 0x9E, 0xBE, 0x32, 0x03, 0x5D, 0x47, 0xDA, 0xD7, 0x89, 0xAF, 0xCF, 0x95, 0x2C, 0x00, 0xC9, 0xA4, 0x55, 0x4E, 0x56, 0xBE, 0x54, 0xB1, 0x54, 0x99, 0x56, 0xA5, 0x55, 0x4D, 0x56, 0xBD, 0x00, 0x7D, 0x87, 0x69, 0x75, 0x5A, 0xF5, 0x44, 0xF5, 0x53, 0x0D, 0x53, 0x0D, 0xB8, 0x26, 0xA5, 0x66, 0xAC, 0xE6, 0xA1, 0x96, 0xA1, 0xD6, 0xA8, 0x36, 0x11, 0xE8, 0x3C, 0x6E, 0xEB, 0x68, 0xEA, 0xF4, 0xEA, 0x62, 0xEB, 0x7A, 0xEB, 0x2E, 0xEB, 0xC9, 0xEA, 0x35, 0xEA, 0xC3, 0xEB, 0xDB, 0xEB, 0x8F, 0x1B, 0xF0, 0x1B, 0x14, 0x1B, 0xFC, 0x1B, 0xEA, 0x1B, 0x76, 0x1B, 0x3F, 0x34, 0x4A, 0x34, 0xBA, 0x35, 0x96, 0x35, 0xFE, 0x68, 0x42, 0x6C, 0xE2, 0x6B, 0xB2, 0x6D, 0xCA, 0x6E, 0x9A, 0x6E, 0x7A, 0x69, 0x66, 0x6A, 0x36, 0x6A, 0xFE, 0xD2, 0xDC, 0xDF, 0x7C, 0xD9, 0x42, 0xD2, 0xA2, 0xDA, 0x12, 0xD4, 0xD2, 0xD0, 0xB2, 0xDB, 0x8A, 0xD9, 0x2A, 0xD6, 0x0A, 0x69, 0x2D, 0x6A, 0x9D, 0x6F, 0x83, 0x6A, 0x63, 0x6D, 0x03, 0xB7, 0x25, 0xB4, 0xF5, 0xB7, 0x5D, 0xB4, 0x13, 0xB7, 0x2B, 0xB5, 0xFB, 0xB7, 0xD7, 0xB4, 0x6F, 0x74, 0x20, 0x77, 0xF0, 0x75, 0x58, 0x77, 0x64, 0x74, 0x8C, 0x75, 0xDC, 0x76, 0x52, 0x76, 0x6A, 0x74, 0x06, 0x77, 0x36, 0x74, 0x6E, 0x77, 0xA1, 0x76, 0x09, 0x74, 0xD9, 0x76, 0x65, 0x76, 0x8D, 0x75, 0xFD, 0xED, 0xA6, 0xE8, 0x56, 0xEB, 0x0E, 0xEC, 0xAE, 0xED, 0x5E, 0xEF, 0x41, 0xEC, 0xE1, 0xEE, 0x31, 0xEF, 0x49, 0xEA, 0xE9, 0xEF, 0x39, 0xEF, 0xC5, 0xEF, 0x95, 0xE9, 0x75, 0xEF, 0x2D, 0xEE, 0x9D, 0xEB, 0x7D, 0xE9, 0xA3, 0xEB, 0xD3, 0xEE, 0x0B, 0xED, 0x6B, 0xE8, 0xDB, 0xEA, 0x27, 0xED, 0x2F, 0x1C, 0x20, 0x1B, 0x28, 0x1A, 0x24, 0x1B, 0x2C, 0x1A, 0x22, 0x1B, 0x2A, 0x1C, 0x26, 0x19, 0x2E, 0x18, 0x21, 0x1E, 0xC9, 0x1D, 0x25, 0x18, 0xCD, 0x1E, 0xC3, 0x1D, 0x4B, 0x1F, 0xC7, 0x1A, 0x4F, 0x9E, 0x40, 0x9F, 0x88, 0x9F, 0x44, 0x9E, 0x8C, 0x9C, 0x82, 0x9B, 0x0A, 0x9E, 0x7A, 0x9D, 0xF6, 0x99, 0xBE, 0x03, 0x58, 0xE6, 0xE2, 0x9B, 0xCD, 0xB7, 0x83, 0x59, 0xF0, 0xEC, 0xE6, 0x9C, 0xCE, 0xDC, 0xC2, 0xBC, 0xE2, 0xFC, 0xF8, 0x82, 0xD8, 0x42, 0xF7, 0x22, 0xD7, 0x62, 0xFD, 0x12, 0xDD, 0x52, 0xF1, 0x32, 0xE1, 0x72, 0xDA, 0x77, 0xB4, 0xEF, 0x91, 0x2B, 0x50, 0x2B, 0x5E, 0x2B, 0x7F, 0x7E, 0xD8, 0xFC, 0xD8, 0x5B, 0xD5, 0x5B, 0x9D, 0x5F, 0x93, 0x5D, 0xEB, 0x5F, 0xE7, 0x5E, 0xAF, 0xDD, 0xA0, 0xDC, 0xC8, 0xD9, 0xFC, 0xB0, 0x19, 0xB5, 0xF9, 0xB6, 0xE5, 0xB6, 0x75, 0xB2, 0x0D, 0xDE, 0x5E, 0xD9, 0x71, 0xDF, 0xA5, 0xDF, 0xDD, 0xDE, 0x4B, 0xF9, 0x29, 0xF3, 0xF3, 0xF9, 0x57, 0xDD, 0xBE, 0xE9, 0x01, 0xF6, 0xC1, 0xC4, 0x6F, 0x9F, 0x43, 0xA6, 0xC3, 0x9D, 0xA3, 0xA4, 0x63, 0x89, 0xE3, 0xBF, 0x27, 0x65, 0xA7, 0xDA, 0x67, 0x08, 0x67, 0x1D, 0xE7, 0xD6, 0x17, 0xB8, 0x17, 0x13, 0x97, 0x9E, 0x00, 0x3F, 0xAC, 0x5C, 0x85, 0x5F, 0x73, 0x5C, 0xFF, 0xBC, 0x49, 0xFC, 0x2B, 0xFC, 0xF7, 0xEC, 0x36, 0xEB, 0x4E, 0xFA, 0xEE, 0xE6, 0xBE, 0xF0, 0x41, 0xE9, 0xE1, 0xF1, 0xB1, 0xEC, 0x49, 0xED, 0xE9, 0xF5, 0xF9, 0xEB, 0x8B, 0xC6, 0xCB, 0xDB, 0x6B, 0xE5, 0x9B, 0xE6, 0x1B, 0x30, 0x81, 0xA0, 0x40, 0xD0, 0xE6, 0xBF, 0x63, 0xB8, 0xAC, 0x02, 0x9A, 0x6A, 0x14, 0x38, 0x6E, 0x77, 0x77, 0xD1, 0x9D, 0x26, 0xA8, 0xB4, 0x62, 0x22, 0x0A, 0xD8, 0x20, 0x82, 0x88, 0x52, 0x4A, 0xC7, 0xB6, 0xD3, 0xBD, 0xB3, 0x6E, 0x36, 0x6A, 0x74, 0x77, 0xA7, 0x48, 0x18, 0xD8, 0xDD, 0xAD, 0x9F, 0x8A, 0xDD, 0x5D, 0xF7, 0x3E, 0xFF, 0xF3, 0xF5, 0x67, 0x82, 0x59, 0x60, 0x82, 0x9E, 0x2E, 0x0C, 0xC6, 0x46, 0x95, 0xE6, 0x61, 0x9B, 0xD0, 0x63, 0x82, 0x47, 0x98, 0x08, 0x6D, 0xDD, 0x1F, 0x8A, 0xEF, 0x40, 0xB7, 0x7A, 0x27, 0xE1, 0xBD, 0xF0, 0xDF, 0x85, 0x1E, 0xE4, 0x1C, 0x88, 0xB1, 0xC2, 0xC8, 0x41, 0xB0, 0xE9, 0xDF, 0x7C, 0xF8, 0x92, 0xF4, 0xE7, 0x03, 0x43, 0x04, 0x16, 0xCF, 0xE8, 0x0B, 0x44, 0x77, 0xB2, 0xB1, 0xE5, 0x4E, 0x68, 0x2B, 0x13, 0x23, 0x6E, 0x44, 0xBB, 0xA9, 0x59, 0x91, 0x93, 0xB1, 0x6C, 0xA2, 0x7A, 0xF5, 0x77, 0x5C, 0x88, 0x8D, 0x72, 0x8C, 0x26, 0xA2, 0x10, 0x53, 0x8B, 0x6E, 0xE2, 0x2A, 0xBC, 0xF1, 0x17, 0x0A, 0x45, 0xE9, 0xCB, 0xEE, 0x4D, 0x81, 0xA7, 0x6A, 0x9F, 0xF7, 0xBC, 0x85, 0xDF, 0x29, 0x14, 0xA5, 0xE7, 0x90, 0x73, 0x92, 0x1E, 0xD1, 0x25, 0x74, 0xA1, 0xE0, 0x7B, 0xE4, 0x77, 0x6C, 0x18, 0x23, 0xF1, 0x9E, 0x86, 0xCF, 0x24, 0xD6, 0x39, 0xFC, 0xC6, 0x8F, 0xA1, 0x75, 0x16, 0xC3, 0x88, 0x49, 0x88, 0xFA, 0x5B, 0x11, 0xE4, 0x5C, 0x75, 0xEE, 0x9E, 0x0F, 0xA4, 0x2D, 0x6C, 0xEC, 0xC9, 0x80, 0x1E, 0x66, 0xD6, 0x94, 0xA2, 0xF0, 0x79, 0xCD, 0x5A, 0xD1, 0x05, 0x44, 0x25, 0x9F, 0x1D, 0x79, 0x16, 0x0D, 0x12, 0x6E, 0xF6, 0x5E, 0x85, 0xE5, 0x51, 0x5C, 0xC7, 0x25, 0x78, 0x00, 0xF6, 0xDD, 0x62, 0x31, 0x9E, 0x89, 0xA6, 0x7E, 0xAF, 0x06, 0xBD, 0xDA, 0x32, 0xEE, 0xED, 0x07, 0x2F, 0x54, 0x2B, 0x7B, 0xC6, 0x41, 0x13, 0x0B, 0x9D, 0x4B, 0xF7, 0x40, 0xBD, 0xD9, 0x43, 0x05, 0x8B, 0xE0, 0x41, 0x0D, 0x19, 0xF9, 0x07, 0x19, 0x90, 0xA6, 0xAC, 0x99, 0x81, 0xAD, 0x65, 0x2A, 0x1D, 0x4F, 0xE3, 0xA3, 0x89, 0x21, 0x16, 0x7A, 0x3C, 0x10, 0xFD, 0xF3, 0x39, 0x07, 0x0C, 0xE9, 0x5F, 0x7A, 0x93, 0x0B, 0x3E, 0x68, 0xDD, 0xDE, 0xBD, 0x01, 0xFC, 0x50, 0xF5, 0xB7, 0x04, 0x82, 0xEC, 0x8A, 0xAC, 0xD9, 0x47, 0xF0, 0xCE, 0x6C, 0xB7, 0x68, 0x3D, 0xB2, 0x42, 0x75, 0x78, 0xED, 0x17, 0xF4, 0x82, 0x60, 0xD4, 0xC2, 0x18, 0xEC, 0x3A, 0xF1, 0x9F, 0xC5, 0x7D, 0x7C, 0x0D, 0xB6, 0xE1, 0x53, 0x04, 0xF8, 0xE4, 0x82, 0xCB, 0xCD, 0x79, 0x60, 0x6E, 0xFF, 0xB9, 0xCE, 0xC7, 0xE0, 0xF1, 0xD6, 0xFE, 0xFC, 0x47, 0x90, 0x65, 0x75, 0x2D, 0x3B, 0x0A, 0x7A, 0x54, 0x34, 0x27, 0x72, 0x09, 0xFC, 0x41, 0x77, 0x6A, 0xCD, 0x04, 0xB4, 0x45, 0x14, 0xBD, 0xD0, 0x18, 0xFB, 0x8F, 0xAC, 0xB3, 0xB4, 0xC7, 0x23, 0xB1, 0xA8, 0xF7, 0xA7, 0xA1, 0xC5, 0xB7, 0x0E, 0xDF, 0xD8, 0x03, 0xB6, 0x9C, 0x7B, 0xDA, 0xA9, 0x01, 0xD1, 0x9E, 0x97, 0xF9, 0xE7, 0xC0, 0xFB, 0xCD, 0x62, 0xA6, 0x07, 0x22, 0x2A, 0xD6, 0x44, 0x64, 0xC2, 0x9D, 0x39, 0x29, 0xDE, 0xD6, 0xE8, 0x80, 0xA4, 0x6E, 0xE1, 0x28, 0xDC, 0x95, 0xF2, 0xB3, 0x04, 0xF1, 0x07, 0x98, 0xDF, 0x87, 0x5B, 0xD0, 0x92, 0xFF, 0x96, 0x5E, 0x4F, 0x00, 0xC9, 0xEB, 0x9C, 0x2E, 0x29, 0x70, 0x7B, 0x00, 0x28, 0x60, 0xC1, 0x8E, 0x2E, 0x35, 0xA3, 0x82, 0x56, 0xD4, 0x19, 0x87, 0xDF, 0x85, 0x4B, 0xF2, 0xE7, 0x78, 0xBF, 0x42, 0x2F, 0xC8, 0x3E, 0x2E, 0x2C, 0xC7, 0x8F, 0x51, 0x3D, 0x56, 0xE3, 0x88, 0x0C, 0xF4, 0xE7, 0x1B, 0x44, 0x78, 0x17, 0xCE, 0xBD, 0x32, 0x84, 0xED, 0x43, 0x22, 0xDA, 0xCF, 0x33, 0x7A, 0xC4, 0xBF, 0xF0, 0x31, 0x3D, 0x03, 0x99, 0x43, 0x9D, 0xA6, 0x2C, 0x90, 0xDA, 0x03, 0xC3, 0xC9, 0x74, 0xE4, 0xFA, 0xAA, 0xE7, 0x64, 0x28, 0xFC, 0xC8, 0x71, 0x02, 0x59, 0x09, 0x9D, 0xB3, 0xA8, 0x26, 0x6F, 0x41, 0x9B, 0x9E, 0xFB, 0x08, 0xAA, 0x45, 0xA7, 0x2F, 0xF9, 0xF3, 0x9D, 0xD9, 0xFE, 0x76, 0x86, 0x5E, 0xC5, 0x4C, 0xCB, 0x37, 0xA0, 0x7C, 0xA8, 0x63, 0x74, 0x24, 0x09, 0x90, 0x7B, 0x0F, 0x4E, 0x22, 0x8D, 0xF1, 0x07, 0xAB, 0xDA, 0xC8, 0xA9, 0xA8, 0xD0, 0x81, 0x4B, 0xBA, 0xC2, 0xCF, 0xCC, 0x1F, 0x93, 0xDB, 0x60, 0xFB, 0x67, 0x2F, 0xD8, 0x65, 0xBA, 0x33, 0x97, 0x1A, 0x69, 0xB9, 0x6A, 0x75, 0x5B, 0x2F, 0x35, 0x45, 0x9A, 0x9C, 0x5B, 0x4F, 0xEA, 0x44, 0x9F, 0xA9, 0xFB, 0xC4, 0x7D, 0xF6, 0xD7, 0xC1, 0x76, 0x82, 0xA5, 0x0B, 0x56, 0x6F, 0x23, 0x0A, 0xF0, 0x4C, 0x07, 0x17, 0xE2, 0x0C, 0x3A, 0xC7, 0x7C, 0x07, 0x71, 0x17, 0x19, 0xF5, 0x7C, 0x3E, 0xD3, 0x57, 0x84, 0x9D, 0x3B, 0x4C, 0x6F, 0xD3, 0xDB, 0xB4, 0x2A, 0xC9, 0x75, 0x5A, 0x8E, 0xFE, 0x1B, 0xD1, 0xAF, 0x9A, 0x4F, 0x46, 0x10, 0x4E, 0xD2, 0x93, 0xE1, 0x34, 0xFE, 0x9F, 0x20, 0x76, 0x55, 0x33, 0xE1, 0x47, 0xB6, 0x39, 0xD8, 0x10, 0x10, 0xB6, 0xD8, 0x7C, 0x0F, 0x21, 0x41, 0xAA, 0x9E, 0xD8, 0x33, 0x65, 0x75, 0xBE, 0xE7, 0xE2, 0xA8, 0xE8, 0xD2, 0x4F, 0xCD, 0x0F, 0x88, 0xEE, 0xBC, 0xB0, 0x9C, 0x83, 0xC4, 0xDC, 0x4C, 0x53, 0x02, 0xC5, 0x73, 0x54, 0x77, 0x0F, 0x8C, 0xC4, 0x31, 0x89, 0x72, 0x55, 0x36, 0x61, 0x45, 0xBF, 0x70, 0xD8, 0x44, 0xF8, 0xE1, 0xA6, 0xE6, 0x62, 0x22, 0x1C, 0x9D, 0xF1, 0xD8, 0x80, 0x09, 0xEE, 0x94, 0x9E, 0x5F, 0x49, 0xDE, 0x6D, 0xD8, 0xD9, 0x74, 0x93, 0xD8, 0x5B, 0xBE, 0x23, 0xBB, 0x14, 0x17, 0xE4, 0x4B, 0xF1, 0x76, 0x7C, 0x6A, 0xE6, 0x98, 0xB0, 0x6C, 0x7C, 0xA6, 0xA2, 0x7B, 0xD5, 0x15, 0xBC, 0x8D, 0xFF, 0xDD, 0x81, 0x47, 0xD8, 0xE1, 0x2F, 0xCD, 0x7B, 0x89, 0x3D, 0x68, 0xC0, 0x93, 0x95, 0x8C, 0xE7, 0x89, 0x7F, 0x67, 0x8F, 0x91, 0xA7, 0x8F, 0x6C, 0x6D, 0xDC, 0x45, 0x2C, 0x6F, 0xA4, 0xB2, 0x9E, 0xE0, 0x0B, 0x2B, 0xB6, 0x10, 0xCE, 0x18, 0x27, 0x7F, 0x7B, 0xC8, 0x63, 0xEC, 0x58, 0x7A, 0x96, 0xD7, 0x64, 0x5C, 0x23, 0x34, 0x70, 0x58, 0x4A, 0x2C, 0x22, 0x4A, 0x2C, 0x26, 0x13, 0x29, 0x68, 0xDA, 0xC3, 0xA5, 0xCC, 0xB4, 0x8B, 0xA7, 0x4E, 0x3F, 0x25, 0x07, 0x4F, 0xDA, 0x34, 0x60, 0xF8, 0xFB, 0x2E, 0x8B, 0xCC, 0x0F, 0xD8, 0xB5, 0xFA, 0xFF, 0xB0, 0x1B, 0xD8, 0xBA, 0xD2, 0xD0, 0x30, 0x07, 0x4C, 0x96, 0x15, 0xE8, 0x79, 0x19, 0x57, 0x8A, 0x7D, 0x1C, 0x36, 0x12, 0xC1, 0x64, 0x90, 0x45, 0x12, 0xD1, 0x82, 0x0A, 0xEF, 0x17, 0xF3, 0x95, 0xB7, 0x95, 0xA7, 0x8A, 0x29, 0xFF, 0x8B, 0xF3, 0xEB, 0x5B, 0x70, 0x7D, 0xBF, 0x32, 0xF3, 0x0D, 0x16, 0xD6, 0x86, 0x20, 0x97, 0xB1, 0xB9, 0x55, 0x5D, 0xA1, 0x37, 0xB0, 0xF8, 0xDC, 0x39, 0x5E, 0x73, 0x71, 0xB9, 0x74, 0xB3, 0xC3, 0x4D, 0x22, 0x9D, 0x1A, 0x6E, 0x39, 0x8D, 0x9C, 0x80, 0xEA, 0x6E, 0x2D, 0xD7, 0xF4, 0x43, 0x6F, 0x8F, 0xFB, 0x28, 0xFA, 0xE0, 0xD4, 0x9A, 0x43, 0x92, 0x5A, 0xF8, 0xB0, 0xF6, 0xB4, 0x68, 0x3E, 0xFC, 0x0B, 0x7A, 0xC3, 0xE6, 0xC2, 0xAF, 0xF6, 0xFD, 0x60, 0x9A, 0xE1, 0x77, 0x5E, 0x07, 0xE9, 0xD5, 0x70, 0x94, 0xFD, 0x47, 0x8A, 0x85, 0xFA, 0xCC, 0xF3, 0x28, 0x17, 0x28, 0xE5, 0x6A, 0x9F, 0xFA, 0x0D, 0x6B, 0x71, 0x6C, 0xAA, 0x3C, 0x8C, 0x3E, 0x52, 0x73, 0x57, 0x1C, 0x48, 0x0E, 0x6A, 0x63, 0x04, 0x6F, 0x48, 0x03, 0x58, 0xC8, 0xBF, 0x49, 0x18, 0x85, 0xB4, 0x32, 0xDB, 0xB0, 0x6B, 0x9E, 0x7B, 0xA8, 0xEF, 0xC8, 0x2D, 0xFB, 0xDD, 0x94, 0x0F, 0x0C, 0x9B, 0x3B, 0x50, 0xC3, 0xA1, 0xFF, 0xAE, 0xE6, 0xAB, 0xF8, 0x2A, 0x9F, 0xFE, 0x27, 0x32, 0x7B, 0x99, 0x41, 0x8D, 0x81, 0xE8, 0x90, 0xA8, 0x41, 0x6B, 0x2C, 0x98, 0x2A, 0x50, 0x23, 0xC1, 0xFC, 0x31, 0x7C, 0xDB, 0x7D, 0x29, 0x74, 0x0B, 0x95, 0xE6, 0xD9, 0x43, 0xE9, 0xB1, 0x2A, 0xBB, 0xB7, 0xD4, 0x58, 0x64, 0xAF, 0x99, 0x9E, 0x1C, 0x80, 0xF7, 0x5F, 0xE9, 0x56, 0x5E, 0xD1, 0x8F, 0xEE, 0xDD, 0x28, 0x55, 0x64, 0x30, 0x55, 0x5B, 0x85, 0x55, 0xEA, 0x75, 0xEA, 0x36, 0x36, 0x5C, 0xAE, 0x07, 0x27, 0x31, 0x52, 0xF1, 0x8D, 0xD0, 0x4D, 0xF4, 0x4A, 0x76, 0x93, 0xE7, 0x68, 0x6A, 0x3B, 0x51, 0x69, 0x97, 0x47, 0x5E, 0x47, 0xD7, 0x9A, 0x85, 0x92, 0xB9, 0xF0, 0xC5, 0x8B, 0x7B, 0x94, 0xF6, 0xE5, 0x9B, 0x8F, 0x7A, 0x4A, 0xBE, 0x14, 0x4E, 0xA9, 0x68, 0x12, 0x1A, 0x64, 0x17, 0xA8, 0x36, 0xF2, 0xDF, 0x6B, 0x3D, 0x01, 0x2B, 0x66, 0xB1, 0xA2, 0x3B, 0xE4, 0x11, 0xF5, 0x51, 0xBC, 0xCD, 0x33, 0x93, 0x9A, 0x4C, 0xFD, 0xB2, 0xD3, 0x93, 0x6D, 0x98, 0xA1, 0xD9, 0x1A, 0x52, 0x89, 0x4C, 0xBE, 0xF0, 0x4D, 0x51, 0xDC, 0x58, 0x75, 0x34, 0x4D, 0x82, 0x55, 0x1D, 0x2A, 0xEF, 0x12, 0x94, 0x16, 0xCF, 0x50, 0x76, 0xF3, 0x79, 0x7A, 0x2E, 0x80, 0xD0, 0x99, 0xDA, 0x0F, 0x7B, 0xB7, 0x50, 0x42, 0x79, 0xB8, 0xFB, 0x4D, 0xF2, 0x39, 0xD3, 0x61, 0xB7, 0x86, 0x6C, 0xC0, 0x7A, 0xCD, 0xA2, 0x48, 0x3D, 0xB2, 0xF4, 0x62, 0x8C, 0xC2, 0xF7, 0xE8, 0xB0, 0xA3, 0x2D, 0x92, 0xD1, 0xAD, 0x5E, 0x65, 0xE1, 0x82, 0xBC, 0x9A, 0x37, 0x4A, 0x1D, 0xDF, 0xA3, 0x74, 0x2A, 0x38, 0x8C, 0x9E, 0x9C, 0xBB, 0x29, 0x78, 0x11, 0xE5, 0xA0, 0x19, 0xEB, 0x16, 0x44, 0x9E, 0x63, 0x8B, 0xED, 0x46, 0x91, 0x1D, 0x78, 0x94, 0x59, 0x27, 0xD9, 0x82, 0x04, 0x9C, 0x3F, 0x29, 0xAF, 0x1F, 0xE0, 0x74, 0x37, 0x8A, 0x07, 0x7B, 0x2A, 0xCB, 0x1C, 0x04, 0x3B, 0x5A, 0x0D, 0x15, 0x8F, 0x99, 0xD3, 0x35, 0xD3, 0x79, 0x43, 0xA8, 0xAF, 0x45, 0x29, 0x7B, 0xBE, 0x51, 0xC3, 0x33, 0x26, 0xB9, 0xE5, 0x93, 0x2D, 0xC2, 0x7A, 0x3B, 0x86, 0xEC, 0x22, 0x16, 0x99, 0xEF, 0x20, 0xFB, 0x11, 0xD9, 0xD9, 0x8B, 0xCA, 0x79, 0x97, 0xB0, 0xAE, 0x6E, 0x89, 0xD7, 0xC0, 0xBF, 0xD2, 0x37, 0x82, 0x59, 0xDD, 0x9E, 0x2A, 0x8C, 0x99, 0xDD, 0x64, 0xC3, 0x6D, 0xA5, 0x72, 0xCB, 0x0F, 0x04, 0x99, 0x90, 0xCD, 0xD9, 0x7E, 0xEE, 0x22, 0x52, 0x26, 0x6E, 0xB0, 0x97, 0x90, 0x47, 0xC9, 0xD1, 0x16, 0x9E, 0xE4, 0x25, 0xE4, 0xF1, 0x40, 0x49, 0xDE, 0x3A, 0xC8, 0xBD, 0x35, 0x2A, 0x33, 0x1A, 0x9E, 0x55, 0xB8, 0x4E, 0xDD, 0x0C, 0x4F, 0x95, 0x4C, 0x54, 0x0C, 0x83, 0x47, 0xA5, 0xCE, 0x96, 0xF0, 0x60, 0xBB, 0xE0, 0x18, 0x61, 0x28, 0x3C, 0xC9, 0x83, 0xCF, 0x8F, 0x82, 0x8A, 0xED, 0xAD, 0xE8, 0x0E, 0xC8, 0xD5, 0x3C, 0x82, 0x1E, 0x0B, 0x8D, 0x3D, 0x3E, 0xA8, 0xBF, 0xC8, 0xA4, 0xB7, 0x7C, 0xCE, 0x70, 0xA1, 0x46, 0x17, 0x14, 0xAA, 0x6E, 0x12, 0x1A, 0xC9, 0x64, 0xB9, 0x31, 0x4E, 0xA6, 0xF2, 0xC5, 0x97, 0xB1, 0xC1, 0x40, 0xAE, 0xE0, 0x17, 0x7A, 0xDF, 0x6D, 0x3D, 0xDF, 0x14, 0x19, 0x61, 0x37, 0x95, 0x16, 0x43, 0x77, 0xCD, 0x9A, 0xA8, 0x47, 0x50, 0xC8, 0xF1, 0xB7, 0xD9, 0x47, 0xE5, 0xAF, 0x5B, 0x7A, 0xB4, 0x4F, 0xC5, 0x55, 0xF9, 0xE5, 0xAA, 0x91, 0x42, 0x67, 0x89, 0xA3, 0xCC, 0x89, 0x5F, 0x98, 0xB6, 0x4C, 0x3C, 0x86, 0x16, 0xEC, 0xFE, 0x2B, 0x48, 0x24, 0xBD, 0x5D, 0x4E, 0x30, 0xAF, 0x50, 0xD6, 0x76, 0x06, 0x1D, 0x0A, 0xAB, 0x4D, 0xDF, 0x53, 0xAD, 0x50, 0x77, 0x7F, 0x4A, 0x76, 0x7F, 0x66, 0x53, 0xD3, 0x07, 0xAD, 0x7D, 0xFA, 0xB8, 0xFC, 0xA9, 0x8A, 0x3F, 0x8A, 0x33, 0xA2, 0xFB, 0xD2, 0x10, 0x69, 0x58, 0xB2, 0x89, 0x08, 0x10, 0x9E, 0xDE, 0xB5, 0x85, 0xBD, 0xC7, 0x00, 0x2E, 0xB3, 0x99, 0x3C, 0x7C, 0x93, 0x8D, 0x82, 0x76, 0x45, 0x76, 0x9B, 0x26, 0x50, 0x05, 0xF0, 0xC4, 0xBE, 0x5B, 0xD9, 0x4C, 0x11, 0xD6, 0x58, 0x90, 0xDE, 0xA1, 0xBF, 0x9F, 0xFB, 0x56, 0x81, 0x67, 0xAC, 0x16, 0x9D, 0x96, 0x9C, 0x52, 0x3F, 0x4E, 0xBC, 0x29, 0x1C, 0x94, 0x4F, 0xDD, 0xB5, 0x9A, 0xCD, 0x12, 0x1E, 0x76, 0xD9, 0xCA, 0x84, 0x91, 0x91, 0x36, 0x11, 0xB4, 0x23, 0x3A, 0xD1, 0x74, 0x21, 0x55, 0x0D, 0xDB, 0xF7, 0xB5, 0x67, 0x31, 0xD5, 0xDC, 0x06, 0x4E, 0xFA, 0xBA, 0xB2, 0xF1, 0xFA, 0x05, 0x8A, 0x51, 0xF9, 0x09, 0x82, 0x6F, 0x92, 0xE4, 0x2C, 0x71, 0xD2, 0x50, 0xA1, 0x50, 0x93, 0xBC, 0xF3, 0x00, 0xBB, 0x51, 0x7A, 0x60, 0xA5, 0x13, 0xE3, 0x4D, 0x2F, 0xB1, 0x59, 0x40, 0xAF, 0x42, 0xD5, 0xA6, 0xEB, 0xA8, 0x3B, 0xB0, 0x59, 0xAF, 0x55, 0xD6, 0xAC, 0x36, 0x9B, 0xFA, 0x6F, 0x1A, 0xBA, 0x61, 0x68, 0x76, 0x90, 0xFC, 0x52, 0xC5, 0x15, 0x36, 0x4A, 0x12, 0x51, 0x78, 0x34, 0x51, 0x23, 0x3C, 0x90, 0x75, 0x6A, 0xE7, 0x3A, 0x76, 0x86, 0xF2, 0xC4, 0x8A, 0x7E, 0xC6, 0x96, 0xBF, 0xC0, 0x66, 0x21, 0xBD, 0x0D, 0x33, 0x37, 0xAD, 0xA3, 0x27, 0xC1, 0x0B, 0x7A, 0x1D, 0x33, 0xF3, 0xFB, 0x2C, 0x1A, 0x10, 0x0D, 0xD9, 0xF1, 0x2D, 0xFB, 0x8C, 0xBC, 0xBD, 0x61, 0x17, 0xDF, 0x4A, 0xE2, 0x54, 0x61, 0x9A, 0xE0, 0x22, 0x74, 0xCB, 0x5F, 0xB9, 0x93, 0xE2, 0x7F, 0x4B, 0xFF, 0x3F, 0x73, 0x31, 0x13, 0x05, 0x23, 0x6D, 0x47, 0xD2, 0xCB, 0xB1, 0xF7, 0x66, 0x41, 0xD4, 0x63, 0x18, 0xEA, 0xBD, 0x97, 0x89, 0x9D, 0x91, 0xD7, 0x53, 0x9A, 0xD0, 0xBE, 0xDB, 0x59, 0x4F, 0xE5, 0x65, 0xED, 0x8E, 0xFC, 0x5E, 0x71, 0x51, 0xDD, 0x9C, 0xF8, 0x5C, 0x41, 0x6D, 0xC9, 0xB4, 0x1D, 0x69, 0x7C, 0x71, 0xC6, 0xFF, 0xB9, 0x8C, 0x7E, 0x26, 0xBC, 0x6E, 0x57, 0x41, 0x5B, 0xE3, 0x17, 0xCD, 0xB9, 0xD4, 0x09, 0xF8, 0x43, 0x97, 0x5F, 0xB9, 0x37, 0x98, 0x52, 0x25, 0x2B, 0x38, 0x00, 0xAD, 0xD0, 0x75, 0x64, 0x39, 0x41, 0x9D, 0xD4, 0xD4, 0x74, 0x08, 0x02, 0x63, 0xFF, 0x2A, 0x2D, 0xA0, 0x80, 0x9D, 0xA9, 0x92, 0x7F, 0x90, 0x89, 0x4B, 0xBE, 0x20, 0x05, 0x3C, 0x65, 0xB7, 0x86, 0x3F, 0x1D, 0x3C, 0x6C, 0x5E, 0xC3, 0x4C, 0x02, 0x37, 0xB4, 0xBB, 0x96, 0x76, 0x50, 0x03, 0x95, 0x33, 0xF3, 0x0D, 0x88, 0xE7, 0xBA, 0x31, 0x99, 0x27, 0xF0, 0x8D, 0xE4, 0x2B, 0xCD, 0x73, 0x2C, 0x26, 0xF6, 0xAC, 0xA2, 0x1B, 0x1B, 0xB2, 0xC3, 0x48, 0xD2, 0x85, 0xFC, 0x58, 0xB9, 0x5F, 0xB0, 0x13, 0x76, 0xB5, 0xB9, 0xC9, 0xDC, 0x86, 0x1C, 0xCC, 0xD6, 0xD2, 0x67, 0xC1, 0xAE, 0xB6, 0xFB, 0xC5, 0x5A, 0xE9, 0x8E, 0x8A, 0xA0, 0x5C, 0x44, 0xB4, 0x31, 0x5D, 0x96, 0xF1, 0x9D, 0x65, 0xC8, 0x6A, 0x8D, 0x31, 0xFD, 0x25, 0x76, 0x93, 0x22, 0x90, 0x62, 0xB6, 0xED, 0x93, 0xEC, 0x21, 0x42, 0x56, 0xD8, 0x08, 0xE6, 0x21, 0x8F, 0xAD, 0xAB, 0x98, 0x3C, 0xE8, 0x8B, 0xE9, 0x6C, 0x5A, 0x09, 0x59, 0xB6, 0xFE, 0x57, 0x3C, 0x46, 0x2B, 0x2C, 0xDF, 0xA0, 0x7F, 0xA2, 0x8A, 0x4E, 0x3F, 0xA2, 0x7B, 0x2A, 0x13, 0x90, 0xC9, 0xEA, 0x6D, 0xA2, 0xBF, 0x87, 0x9A, 0xE5, 0x9D, 0xEC, 0xBD, 0xAD, 0xDB, 0xC4, 0xBF, 0x68, 0x74, 0x79, 0x36, 0x7B, 0x07, 0xCB, 0xB5, 0x1E, 0xCF, 0x40, 0x70, 0x8D, 0x49, 0x04, 0xCD, 0x83, 0x0E, 0xB5, 0xC6, 0x14, 0xBD, 0xCF, 0x33, 0x2C, 0xF3, 0xD1, 0x37, 0x66, 0x4D, 0xD7, 0xC8, 0x74, 0x49, 0xE9, 0x76, 0x84, 0xB1, 0xAA, 0x59, 0x39, 0x35, 0x66, 0xA7, 0xEC, 0xAB, 0xE4, 0x65, 0x80, 0x44, 0xCC, 0xB2, 0x6F, 0x96, 0x9B, 0xB3, 0x75, 0x44, 0x88, 0x55, 0x1B, 0xC3, 0x43, 0x56, 0x99, 0x58, 0xD2, 0x42, 0x08, 0x68, 0xC3, 0x8A, 0xB6, 0x95, 0x3D, 0x2B, 0xAB, 0xD7, 0x2F, 0x2C, 0x0C, 0x53, 0x9D, 0xD3, 0x4D, 0xCC, 0x09, 0xC3, 0xAE, 0xA9, 0x22, 0x75, 0x87, 0x63, 0x8C, 0x65, 0x69, 0x2A, 0x2B, 0xFF, 0x07, 0xE2, 0xE9, 0xE2, 0x2C, 0xE7, 0x58, 0x96, 0xA5, 0x86, 0x59, 0x69, 0x18, 0x35, 0x52, 0x65, 0x12, 0x40, 0x9F, 0x85, 0x76, 0x36, 0x6F, 0x2F, 0xCA, 0x6F, 0xB4, 0x2F, 0x45, 0x73, 0x2A, 0xAB, 0x4F, 0x2A, 0x3F, 0x68, 0x73, 0x4A, 0xC4, 0x68, 0x8B, 0x6A, 0x77, 0xEE, 0xB1, 0xE8, 0x62, 0x59, 0x64, 0xC6, 0xD2, 0x00, 0x85, 0xE8, 0x8F, 0xFC, 0x96, 0xB3, 0x98, 0x4D, 0xA0, 0x2F, 0x59, 0xBD, 0x64, 0xEA, 0x50, 0x13, 0x93, 0xC7, 0xCC, 0x7C, 0xC8, 0xB6, 0x29, 0xB4, 0xC8, 0xA0, 0xAB, 0xBA, 0x64, 0x68, 0xCE, 0xAB, 0x16, 0x27, 0x65, 0x9C, 0xF6, 0x4C, 0xCD, 0x6C, 0x64, 0xA3, 0x6A, 0x5D, 0xC9, 0x96, 0x28, 0xA9, 0x0C, 0xD0, 0xFB, 0x04, 0xC4, 0x88, 0x87, 0xA8, 0xA3, 0x96, 0x47, 0xB2, 0x3B, 0xF9, 0x51, 0xD6, 0x35, 0x8C, 0x10, 0xBD, 0x64, 0xCA, 0xA1, 0x2F, 0x41, 0x9A, 0xE6, 0xBA, 0x22, 0xAB, 0xE3, 0x5D, 0x45, 0xC7, 0x72, 0x9E, 0x1C, 0xB9, 0xA0, 0xC8, 0xD5, 0x96, 0x36, 0xFD, 0x43, 0x76, 0x28, 0xFF, 0x56, 0x59, 0x47, 0x1E, 0x90, 0x2D, 0x2E, 0x68, 0xF1, 0xFB, 0x23, 0x2A, 0x49, 0x2F, 0x5F, 0x21, 0x65, 0x27, 0xB0, 0x3A, 0x9B, 0xE3, 0x4C, 0x38, 0x06, 0x9B, 0x85, 0xD1, 0x95, 0xF0, 0x98, 0x9A, 0xC1, 0x06, 0x2B, 0x70, 0x5B, 0xDE, 0xC3, 0x8A, 0x1C, 0xD0, 0x5D, 0x7C, 0xB7, 0x40, 0x02, 0xBE, 0x02, 0xB8, 0xD9, 0xBD, 0xE0, 0xFE, 0x88, 0x7E, 0x2D, 0x1F, 0x34, 0xF1, 0x1B, 0x54, 0xEE, 0x04, 0x8D, 0x9C, 0xB3, 0xC5, 0x4B, 0x81, 0x07, 0xB6, 0x14, 0xDB, 0x0B, 0xC4, 0x9A, 0x17, 0xF3, 0x1D, 0x81, 0x43, 0xD5, 0x7B, 0xEA, 0xDD, 0x88, 0x8E, 0xDC, 0xB6, 0xF2, 0x1A, 0x7C, 0x9E, 0x78, 0x69, 0xC1, 0x2E, 0xCC, 0x8F, 0x77, 0x3C, 0x3B, 0x10, 0x8D, 0x8C, 0x58, 0xA3, 0x1D, 0x87, 0xC8, 0xFC, 0x06, 0x94, 0x43, 0xE1, 0x2E, 0x67, 0x77, 0xD1, 0x5B, 0x68, 0xBF, 0x75, 0x08, 0xBB, 0x0D, 0x4C, 0x36, 0xC5, 0x98, 0x93, 0xE0, 0xA4, 0xAA, 0xFA, 0xBA, 0x60, 0xD1, 0x73, 0xBD, 0x47, 0x59, 0x38, 0xFB, 0x49, 0x34, 0x3E, 0x9F, 0x64, 0xBC, 0x00, 0xE3, 0xAC, 0x9B, 0xD4, 0xD0, 0x88, 0x8B, 0xE9, 0xF9, 0xC4, 0xDE, 0x2D, 0xBF, 0x15, 0x1C, 0xAC, 0xDF, 0x29, 0x5F, 0x44, 0x23, 0xD3, 0xAC, 0x0C, 0xF8, 0x3F, 0xA0, 0xAD, 0xC6, 0xDF, 0x99, 0x34, 0x50, 0x56, 0x35, 0xB9, 0x36, 0x45, 0x3D, 0x90, 0xFD, 0xB8, 0x6C, 0x94, 0xBC, 0x57, 0xF8, 0x36, 0xEF, 0x9E, 0xB8, 0x13, 0x98, 0x9B, 0xB5, 0x41, 0x00, 0x45, 0xB8, 0xA5, 0x4F, 0x63, 0x8A, 0xB6, 0xF4, 0x2A, 0x8C, 0xA9, 0xB1, 0x4E, 0xDB, 0x44, 0xDE, 0xE8, 0x35, 0x4B, 0x98, 0x7F, 0x12, 0x1E, 0x6D, 0xBC, 0x88, 0xF1, 0x05, 0x2F, 0x55, 0x1C, 0xAA, 0xB9, 0x9D, 0x7D, 0x2C, 0xF3, 0x48, 0xE9, 0x49, 0x9D, 0xA7, 0xE0, 0x7B, 0xDE, 0x7A, 0xD5, 0x39, 0xEE, 0xBA, 0xCC, 0x46, 0x59, 0xFD, 0x81, 0xF5, 0x9A, 0x14, 0x11, 0x6F, 0x73, 0xB3, 0xFC, 0x34, 0x3F, 0xD2, 0x69, 0x8A, 0xC8, 0x1E, 0x27, 0x2D, 0x5D, 0xF9, 0x47, 0x60, 0x89, 0xD1, 0x8F, 0xFF, 0xA7, 0xEE, 0x54, 0x6C, 0xAD, 0xBE, 0x54, 0x6C, 0x9B, 0xF9, 0xB5, 0x74, 0x78, 0xDE, 0x18, 0xF6, 0x59, 0x6E, 0x67, 0x26, 0xC6, 0x99, 0x98, 0xE9, 0xAB, 0x49, 0xDC, 0xFF, 0x52, 0xB3, 0x50, 0x2E, 0xDE, 0xD4, 0x21, 0x5F, 0x2F, 0x6C, 0x5D, 0x66, 0x23, 0x7C, 0x46, 0xDC, 0xB1, 0x5C, 0xCC, 0xEF, 0x87, 0x07, 0x8D, 0x57, 0x30, 0x09, 0xE0, 0xB1, 0xB2, 0x71, 0x35, 0x5B, 0x6B, 0x5A, 0x33, 0xF3, 0x4A, 0xBE, 0x96, 0xEF, 0x61, 0x3D, 0x72, 0x93, 0x0B, 0xAE, 0xA4, 0x39, 0x64, 0x7C, 0xC9, 0x0E, 0xDB, 0x1F, 0xAD, 0x19, 0x92, 0xBE, 0xCF, 0xF7, 0x8A, 0xDC, 0x53, 0x5A, 0xBF, 0x8C, 0x12, 0xDE, 0xA6, 0x92, 0x2C, 0x4B, 0xF8, 0x37, 0x10, 0x7F, 0xE3, 0xD3, 0x8C, 0x16, 0xAC, 0x29, 0x51, 0x55, 0x7F, 0x6C, 0x9D, 0x99, 0x11, 0x55, 0xF2, 0xBB, 0x7E, 0x0B, 0x3F, 0x3D, 0x17, 0x2B, 0xBF, 0x97, 0x32, 0x90, 0xF1, 0xB4, 0x80, 0x0D, 0x73, 0xD4, 0xCC, 0xCE, 0x7C, 0xEA, 0x9B, 0x28, 0x77, 0x57, 0x14, 0x38, 0x4D, 0x15, 0xDE, 0xA6, 0xBB, 0xAC, 0xF6, 0xF2, 0x6F, 0x23, 0x97, 0x4C, 0x84, 0xFF, 0x4F, 0x3D, 0x2C, 0x9D, 0x5E, 0xA3, 0x3D, 0xEA, 0x9B, 0xD1, 0x53, 0x92, 0xD3, 0x96, 0xCD, 0xBF, 0x9A, 0xBB, 0xB0, 0x6E, 0x4C, 0xF2, 0x7F, 0x19, 0x1D, 0xA5, 0xFD, 0x61, 0x76, 0x9A, 0x39, 0xFA, 0x12, 0x1F, 0xB9, 0xAC, 0x5D, 0x35, 0xD5, 0x49, 0x20, 0xEC, 0x62, 0x30, 0xAB, 0x1F, 0xFC, 0x41, 0x74, 0x93, 0xA9, 0x3F, 0x53, 0x00, 0x2D, 0xD1, 0x6F, 0xED, 0xFA, 0x01, 0x89, 0x15, 0x50, 0xD3, 0x29, 0x70, 0x3B, 0x62, 0x52, 0xB5, 0x1A, 0x28, 0x4D, 0x98, 0x50, 0xF4, 0x96, 0x97, 0x17, 0x7A, 0x48, 0xBF, 0x86, 0xA7, 0xDF, 0x78, 0x46, 0x7B, 0x1E, 0xB0, 0x5C, 0x12, 0x27, 0xCB, 0x01, 0x0C, 0xAD, 0x20, 0x61, 0x0C, 0xEF, 0x81, 0x69, 0x2F, 0x6B, 0xC7, 0xBB, 0x90, 0xD3, 0xDF, 0x79, 0x9A, 0x58, 0x22, 0xBF, 0xD6, 0x34, 0x13, 0x9B, 0x80, 0x54, 0x54, 0x36, 0xA1, 0xC3, 0xE2, 0x87, 0x17, 0x29, 0xE1, 0xFE, 0x90, 0x21, 0x39, 0xCF, 0xA1, 0x6B, 0x1B, 0x53, 0xB4, 0x6B, 0xA1, 0xD4, 0x25, 0x6A, 0xD9, 0x04, 0x90, 0xB5, 0x34, 0x15, 0x7C, 0x02, 0x8E, 0x18, 0x3F, 0xE3, 0x9F, 0x02, 0x0E, 0x64, 0x1F, 0xED, 0x74, 0x13, 0xD4, 0xC8, 0xEE, 0x34, 0xBC, 0x60, 0xAE, 0xC1, 0x49, 0x15, 0xEF, 0xA9, 0xF0, 0xB8, 0xA1, 0x45, 0xDE, 0x44, 0x44, 0x70, 0x62, 0xCE, 0x7E, 0xAC, 0x63, 0x3D, 0x3F, 0xDD, 0x00, 0xB5, 0x58, 0x62, 0x2D, 0xF5, 0x82, 0x27, 0x59, 0x4C, 0x13, 0x20, 0xA0, 0xC4, 0x28, 0x89, 0x9F, 0x02, 0x3C, 0xCE, 0x1E, 0xD6, 0x39, 0x44, 0x21, 0x95, 0x75, 0x36, 0x34, 0x4B, 0x8A, 0xA1, 0xAA, 0x8A, 0x24, 0x21, 0x7B, 0xF8, 0x56, 0x61, 0x0B, 0x3B, 0x6C, 0x8F, 0x38, 0xFB, 0x14, 0xED, 0xB8, 0x61, 0xB9, 0xA6, 0x88, 0xD8, 0xB9, 0xF8, 0x8F, 0xE4, 0x02, 0x52, 0x6E, 0xCE, 0x13, 0x2C, 0x86, 0x9C, 0x0C, 0xAB, 0xF9, 0x2B, 0x41, 0xD3, 0xAC, 0xC8, 0x8E, 0xC5, 0x19, 0xDE, 0x92, 0xB3, 0xF5, 0x6F, 0x35, 0x93, 0xA1, 0xCD, 0xE5, 0xA7, 0x14, 0xA3, 0x0E, 0x09, 0x0A, 0x1D, 0x25, 0x87, 0x83, 0x74, 0xD9, 0x53, 0x05, 0xEA, 0xF5, 0xCF, 0x35, 0x4B, 0x69, 0xD7, 0xC5, 0x83, 0x92, 0x0C, 0xCC, 0xC6, 0x7C, 0x9B, 0x60, 0x3C, 0x54, 0x6F, 0xC8, 0xF2, 0x17, 0x80, 0x8B, 0xB2, 0xD2, 0xDB, 0x5E, 0xE5, 0xBD, 0x13, 0x17, 0xD4, 0xDD, 0xCC, 0x76, 0x07, 0x17, 0x96, 0x2F, 0xD6, 0xC6, 0xC7, 0xB4, 0x14, 0x34, 0x2A, 0xBB, 0x83, 0xC6, 0x66, 0xFD, 0x91, 0x9C, 0x5E, 0xB7, 0x5E, 0xFD, 0x92, 0x75, 0x5B, 0x9C, 0x28, 0x09, 0xC5, 0x0F, 0x9B, 0x23, 0xEC, 0x77, 0x78, 0xA2, 0xE1, 0x33, 0xFE, 0x1C, 0xD0, 0x3A, 0x43, 0xDF, 0x3E, 0x50, 0x11, 0x24, 0x2A, 0xAB, 0xDF, 0x56, 0x24, 0x04, 0xE8, 0xB2, 0x97, 0xFA, 0x8E, 0x18, 0xB3, 0x82, 0x25, 0x19, 0x36, 0x41, 0xAB, 0xB3, 0xAA, 0x95, 0x6F, 0xD7, 0xC7, 0x68, 0x46, 0x8A, 0x87, 0x2E, 0x59, 0x28, 0x49, 0x23, 0x1E, 0x5A, 0x38, 0x0A, 0xC6, 0xC2, 0x09, 0x46, 0x45, 0x7C, 0x3B, 0xD0, 0x48, 0xF7, 0xAF, 0xED, 0x46, 0xFD, 0x17, 0xD1, 0xB9, 0xFA, 0x29, 0x55, 0x26, 0x40, 0x59, 0xD9, 0xF6, 0xE2, 0xB5, 0xD1, 0xBA, 0xFC, 0x2E, 0x3D, 0xB8, 0xFB, 0x61, 0x16, 0xA2, 0x5D, 0xB0, 0x7E, 0x8C, 0xFA, 0xB5, 0x54, 0xB8, 0xE4, 0xA8, 0xA4, 0x9A, 0x9A, 0x6C, 0x39, 0x5D, 0xE0, 0x05, 0x3F, 0x34, 0xAE, 0xE4, 0xEF, 0x05, 0xDD, 0x75, 0xD2, 0x76, 0xAA, 0x7D, 0xA9, 0xA8, 0xB2, 0xEE, 0x75, 0xC3, 0x79, 0x5E, 0x59, 0x59, 0x78, 0x45, 0x60, 0x54, 0x6B, 0xBE, 0xBE, 0xE0, 0xEB, 0xAE, 0x71, 0x59, 0xD7, 0x33, 0xC3, 0xD6, 0x04, 0xA8, 0xB9, 0x32, 0xC1, 0xD2, 0xD9, 0xD2, 0xB9, 0xF4, 0x58, 0xCB, 0x4F, 0x02, 0x35, 0xB2, 0xCB, 0xA4, 0x93, 0x9F, 0x03, 0x72, 0x64, 0xE4, 0xC9, 0x8D, 0x70, 0x0C, 0x91, 0x7C, 0x34, 0x08, 0xEC, 0x4A, 0x28, 0x6F, 0xB5, 0x07, 0x0E, 0xEC, 0xB7, 0xA9, 0x11, 0xF1, 0xDC, 0xB7, 0x43, 0xC5, 0x3F, 0xB9, 0xB7, 0xBC, 0x37, 0xE6, 0x24, 0xF2, 0x96, 0x2D, 0xF4, 0x56, 0x6A, 0x79, 0x21, 0xE6, 0xA9, 0xA2, 0x9F, 0xBC, 0x0D, 0x46, 0xEF, 0x05, 0x76, 0xBC, 0xE5, 0xB2, 0xE9, 0x27, 0xBA, 0x09, 0x86, 0xE8, 0xED, 0xAE, 0x40, 0x1F, 0x25, 0x6D, 0x6E, 0x7E, 0x06, 0x37, 0x87, 0x67, 0x57, 0xAB, 0xA0, 0x3D, 0xDB, 0xAB, 0x8A, 0x65, 0xE0, 0x4E, 0xEF, 0x51, 0xD9, 0x1F, 0x40, 0x77, 0x47, 0x85, 0xD2, 0x11, 0x50, 0x9A, 0x39, 0x8A, 0x6A, 0x79, 0x6F, 0x0D, 0xC3, 0xD9, 0xD7, 0xBC, 0x42, 0xA9, 0xD1, 0x89, 0x4C, 0xC1, 0x10, 0xD2, 0xE5, 0xC8, 0x6D, 0x3A, 0x21, 0xB1, 0xA6, 0xD9, 0x84, 0xA8, 0xD8, 0xFF, 0xAE, 0xEA, 0x07, 0x76, 0x67, 0xDB, 0xF2, 0xA2, 0x1F, 0xE8, 0x86, 0xD5, 0x73, 0xB2, 0x87, 0xC3, 0x37, 0x1D, 0xEE, 0x28, 0x30, 0x70, 0xD0, 0x74, 0xAA, 0xC8, 0x0F, 0xD0, 0x19, 0x4C, 0x60, 0x2B, 0x81, 0x11, 0xD2, 0xA8, 0xE3, 0xA0, 0x2C, 0x9B, 0xF0, 0x3B, 0xB2, 0x4C, 0x74, 0x2E, 0xE1, 0x7D, 0xD3, 0x22, 0xB6, 0x28, 0x2C, 0xBD, 0x6A, 0x23, 0x63, 0x13, 0xF0, 0xB5, 0x68, 0x07, 0xC9, 0x5D, 0xD5, 0x98, 0xE5, 0x8C, 0xD5, 0x39, 0x64, 0xC8, 0xBF, 0xC2, 0x3E, 0x26, 0x52, 0xE1, 0x37, 0xD0, 0x6A, 0x41, 0x04, 0x1B, 0x05, 0xAC, 0x94, 0x64, 0x1C, 0x7B, 0x93, 0xDE, 0x87, 0x2F, 0xEB, 0x6A, 0x51, 0xC6, 0x24, 0xEC, 0x6F, 0x14, 0x49, 0x83, 0xF6, 0x9D, 0xAB, 0x94, 0x08, 0xB5, 0x01, 0xFA, 0xC2, 0x08, 0xFE, 0xFA, 0x55, 0x75, 0x99, 0x32, 0x32, 0xD4, 0xA1, 0x5F, 0x2E, 0x40, 0x54, 0x26, 0x25, 0xC2, 0x0A, 0x50, 0xBD, 0x20, 0x99, 0xB5, 0x01, 0x36, 0x48, 0x0A, 0x8F, 0xCD, 0xCF, 0xF9, 0x0F, 0xDB, 0xDD, 0x35, 0x42, 0xF7, 0x31, 0xFE, 0x68, 0xE3, 0x02, 0xD5, 0xA7, 0x7D, 0xF3, 0x2A, 0xCD, 0x64, 0x7B, 0xFD, 0x07, 0x0B, 0x97, 0x89, 0x26, 0xAE, 0x82, 0x32, 0xB7, 0x30, 0xE6, 0x8E, 0xE6, 0x72, 0x33, 0xF4, 0x9C, 0xA9, 0x93, 0x30, 0x0A, 0x7C, 0x67, 0x30, 0x85, 0xFF, 0x1B, 0x58, 0x27, 0x51, 0xF5, 0xD7, 0x15, 0xFF, 0x45, 0xBF, 0x76, 0x3E, 0xCB, 0xFD, 0x1B, 0x3F, 0xA6, 0xE1, 0x56, 0xE6, 0xD6, 0xD0, 0x95, 0x15, 0x6F, 0x34, 0x8E, 0x01, 0xB9, 0x05, 0xE7, 0x64, 0x27, 0x56, 0xBD, 0xCE, 0x9C, 0x2C, 0xF0, 0x73, 0x3C, 0x26, 0xFB, 0x87, 0x1B, 0x98, 0x2D, 0x15, 0xEE, 0x83, 0x76, 0x19, 0x7A, 0xB0, 0x43, 0x01, 0x7F, 0xC9, 0xF8, 0xBE, 0xD6, 0xEA, 0x8D, 0x28, 0xD4, 0x89, 0x96, 0x8E, 0x88, 0x73, 0x6C, 0xA8, 0xCC, 0xF3, 0x09, 0x19, 0x5A, 0x39, 0x22, 0xE3, 0x8B, 0xFF, 0xC9, 0x02, 0x40, 0x15, 0xB5, 0xCA, 0x2F, 0xE3, 0xA1, 0x48, 0xB4, 0xD0, 0x53, 0x1E, 0x42, 0x78, 0x98, 0xC7, 0x09, 0x3B, 0xA0, 0x1B, 0x46, 0x67, 0xD8, 0x00, 0x40, 0x2C, 0x0E, 0xEE, 0x5F, 0xD1, 0x64, 0x8A, 0x2C, 0xEF, 0x0C, 0xA8, 0x6E, 0x3A, 0xFC, 0xBB, 0x81, 0x2E, 0xAE, 0xDD, 0xD7, 0x5D, 0xB1, 0x5D, 0x5F, 0xEC, 0x27, 0x2E, 0x10, 0xA4, 0x07, 0x7B, 0x28, 0x32, 0x9A, 0xC5, 0x89, 0x0B, 0x8B, 0x15, 0x87, 0x48, 0x57, 0x8B, 0x63, 0xA2, 0x20, 0xF8, 0xB0, 0x09, 0x87, 0x3D, 0x02, 0xBC, 0xE0, 0x33, 0x17, 0x56, 0x43, 0x6F, 0x79, 0x7D, 0x27, 0x7E, 0x00, 0xBF, 0xA2, 0x7D, 0xBB, 0x27, 0xF3, 0xD0, 0x60, 0xB8, 0x99, 0xE0, 0xBA, 0xF8, 0x6E, 0xAD, 0x3C, 0xC3, 0x4D, 0x72, 0x9B, 0x95, 0xDF, 0xCB, 0xA5, 0xED, 0x4F, 0xAA, 0x1F, 0x73, 0x73, 0x4D, 0xD3, 0x25, 0x46, 0xDC, 0x22, 0x83, 0x53, 0xC2, 0xA5, 0xDC, 0x44, 0x66, 0xE0, 0xDC, 0x2F, 0xBC, 0x88, 0xFB, 0xF4, 0xC4, 0x2C, 0x34, 0x34, 0xEA, 0xEC, 0x91, 0xBD, 0xB0, 0x73, 0x30, 0xDE, 0xB4, 0x14, 0x3C, 0xBC, 0x99, 0x57, 0x39, 0x0B, 0x28, 0x70, 0x3B, 0x9E, 0x2F, 0x00, 0x7C, 0x6C, 0x2B, 0xD4, 0x8F, 0x78, 0x39, 0xC6, 0x1B, 0x25, 0x3E, 0xBC, 0x59, 0xF3, 0x6F, 0x0A, 0x67, 0x70, 0xAF, 0xD1, 0xD2, 0x73, 0x5E, 0xFC, 0x4B, 0x5C, 0xE7, 0xE3, 0x9E, 0xD4, 0x89, 0xA8, 0x9B, 0x5D, 0x10, 0x31, 0x36, 0x78, 0x43, 0xE3, 0x5E, 0xB4, 0xC9, 0xF7, 0x6E, 0x45, 0x0C, 0x32, 0xC1, 0x6D, 0x4B, 0xDE, 0x6F, 0xA8, 0xD9, 0x26, 0x4C, 0xDD, 0x06, 0x5C, 0x35, 0xEC, 0x91, 0x2C, 0xE3, 0xE5, 0xCF, 0x5B, 0x27, 0xF8, 0xC6, 0x5B, 0x40, 0xEF, 0x3A, 0xFB, 0x51, 0x36, 0x91, 0xFB, 0xE7, 0x18, 0x2C, 0x3C, 0x17, 0x73, 0xBB, 0xD3, 0x82, 0x6F, 0x16, 0xEC, 0xD6, 0xA0, 0xA0, 0xD6, 0x6C, 0xFA, 0xAF, 0xFC, 0x18, 0x7E, 0xD9, 0xF5, 0x53, 0xEE, 0x5F, 0x74, 0xA3, 0x8D, 0x9F, 0x9A, 0x80, 0x2C, 0x0C, 0x43, 0xC4, 0xBF, 0x00, 0xA3, 0xB9, 0x2D, 0x82, 0x56, 0x9E, 0x27, 0xB9, 0xFA, 0x6C, 0xBA, 0xC6, 0x2A, 0xED, 0xD4, 0xB1, 0xB9, 0x0A, 0xC7, 0xA8, 0xA7, 0x1D, 0x5C, 0xF1, 0xB9, 0x3D, 0x87, 0xEB, 0xBF, 0xB2, 0x1F, 0x7C, 0x63, 0xCB, 0x09, 0xDA, 0xCE, 0xDD, 0x52, 0x5F, 0x88, 0x1F, 0xB6, 0xF5, 0x53, 0xCF, 0x84, 0xF7, 0x1A, 0x3E, 0x13, 0xAB, 0x00, 0x7C, 0xDE, 0x68, 0x41, 0x20, 0x6F, 0x1D, 0xF9, 0xF5, 0x0C, 0x92, 0xBD, 0x2A, 0x55, 0xD9, 0x5F, 0xA4, 0x75, 0x8F, 0x74, 0x69, 0xFF, 0xA2, 0x5C, 0x10, 0x14, 0x51, 0x1F, 0x2D, 0xC9, 0xF1, 0xDD, 0x5B, 0x6E, 0xCC, 0xBE, 0x71, 0x77, 0xD4, 0x57, 0x50, 0x36, 0x76, 0xB4, 0xB2, 0x03, 0xD9, 0x6A, 0x3C, 0x5C, 0xF4, 0x0A, 0x18, 0x98, 0x3F, 0x4E, 0x30, 0x82, 0xB7, 0x96, 0x9A, 0x7A, 0xEA, 0x4E, 0x61, 0x5A, 0x9A, 0xB2, 0x2F, 0x40, 0x6F, 0x17, 0x79, 0xB5, 0x7D, 0x89, 0xCE, 0x2C, 0x68, 0x75, 0xDD, 0x75, 0x65, 0xC5, 0xA6, 0x93, 0x65, 0x93, 0x24, 0x0B, 0xDD, 0x74, 0xFA, 0xA9, 0x7C, 0x13, 0xFB, 0x29, 0x4A, 0x7B, 0x14, 0x34, 0xD9, 0x27, 0xAA, 0x04, 0x17, 0x2F, 0xE8, 0x65, 0xDF, 0xF2, 0x0E, 0x90, 0x4B, 0x4E, 0x95, 0x57, 0x18, 0xA7, 0x65, 0xF6, 0x85, 0x15, 0x6D, 0x8F, 0x24, 0xDB, 0xF9, 0x39, 0x48, 0xE0, 0x83, 0xBA, 0x5F, 0xDA, 0xE1, 0x9B, 0xBE, 0x97, 0x5E, 0x93, 0x27, 0xBB, 0x1D, 0xCD, 0x79, 0x2B, 0x98, 0x6F, 0xEF, 0xA6, 0x94, 0x61, 0x0A, 0xD3, 0x17, 0xE2, 0xA9, 0xE0, 0x1D, 0xC3, 0x8F, 0x02, 0x3F, 0xDE, 0x03, 0x92, 0x3C, 0x75, 0xB5, 0x7E, 0x6D, 0xDA, 0xB5, 0xBE, 0x39, 0x15, 0xB5, 0x11, 0xF7, 0xDA, 0x2F, 0x17, 0x48, 0x02, 0xC5, 0xF5, 0xDB, 0x32, 0xFF, 0xFA, 0xF6, 0x94, 0x5E, 0x56, 0x85, 0xB9, 0x1D, 0xCE, 0x19, 0x21, 0x8C, 0xB2, 0xBF, 0xA0, 0x32, 0xC5, 0x45, 0xE6, 0x9F, 0xC5, 0xDD, 0xD0, 0x09, 0x93, 0x34, 0xC1, 0x07, 0xA0, 0xE8, 0xED, 0x26, 0x70, 0x26, 0x97, 0x77, 0xED, 0x3C, 0xD4, 0x06, 0xB0, 0x5D, 0x00, 0xFC, 0x02, 0xE8, 0x2F, 0xBC, 0x85, 0xF8, 0x42, 0x8E, 0x82, 0xE1, 0xC8, 0x37, 0xD8, 0x37, 0xD2, 0x07, 0x1D, 0x40, 0xC6, 0xAF, 0xE6, 0xE3, 0x23, 0x60, 0x13, 0xC7, 0xD9, 0x84, 0x03, 0xE4, 0x69, 0xA1, 0x26, 0xBA, 0xC0, 0xAB, 0x6F, 0xFA, 0xB8, 0x37, 0x19, 0xFA, 0xDA, 0x14, 0x80, 0x4F, 0x17, 0x74, 0xFD, 0x82, 0x96, 0x90, 0x11, 0x45, 0xD1, 0xF0, 0x14, 0xA2, 0x8F, 0xED, 0x83, 0x7F, 0xE3, 0x3D, 0x91, 0xD6, 0xA8, 0x03, 0x76, 0x66, 0xD5, 0x33, 0xAC, 0x14, 0xF9, 0xCF, 0x01, 0xC1, 0x2B, 0x61, 0xCA, 0xFC, 0x1D, 0x61, 0x04, 0x0D, 0xBE, 0x68, 0xE7, 0x18, 0xA5, 0x87, 0x5C, 0xB2, 0xE6, 0xBE, 0x97, 0xBF, 0xEC, 0x38, 0x02, 0x08, 0xC4, 0x99, 0x05, 0x4F, 0xC0, 0x5F, 0x42, 0x47, 0xE6, 0x1C, 0xBC, 0x8E, 0x2F, 0x89, 0x18, 0x8D, 0x64, 0x50, 0x85, 0xAB, 0x84, 0xD8, 0x22, 0x7C, 0x9C, 0x83, 0x17, 0x6E, 0x85, 0xDC, 0x37, 0xAF, 0xC1, 0x15, 0xF0, 0xFB, 0x17, 0x6C, 0xAA, 0xB4, 0x70, 0xEB, 0x65, 0x17, 0x4E, 0x4E, 0xB6, 0x5B, 0xBB, 0x2F, 0xEF, 0xA0, 0xE6, 0x64, 0xDE, 0x7F, 0xE0, 0x42, 0x05, 0x4B, 0x0F, 0x40, 0x59, 0x12, 0xF1, 0xC1, 0x0C, 0xF8, 0x33, 0x7B, 0x7F, 0xF5, 0x0A, 0xB4, 0x95, 0x0C, 0x71, 0xA8, 0xC6, 0x7A, 0xB1, 0xF9, 0xE6, 0x83, 0xF8, 0x62, 0xA4, 0xF9, 0xD9, 0x8B, 0x54, 0xA4, 0x76, 0xEA, 0x45, 0x0E, 0x67, 0x58, 0xC9, 0xF1, 0xD6, 0x59, 0x5C, 0x9D, 0xFE, 0x85, 0xFE, 0x26, 0x70, 0x50, 0x97, 0x47, 0xB9, 0x82, 0x8F, 0x55, 0x2B, 0x23, 0x0E, 0xC3, 0x3B, 0x24, 0x4E, 0xDE, 0x3F, 0xD1, 0x00, 0xBA, 0xD5, 0x31, 0x0A, 0x43, 0x70, 0x4B, 0x0B, 0x17, 0xEC, 0x0F, 0xBA, 0xEC, 0xC9, 0xE3, 0x54, 0xE7, 0x0E, 0xA3, 0x73, 0xAA, 0xB4, 0x07, 0xF5, 0x93, 0x5A, 0xA6, 0x72, 0x93, 0xCA, 0x56, 0xEA, 0x03, 0x79, 0xE7, 0xF3, 0x2A, 0x28, 0x4F, 0x70, 0x51, 0x46, 0x6B, 0x44, 0x10, 0x74, 0x59, 0x71, 0xCE, 0x5B, 0x8E, 0x8E, 0xE2, 0x3F, 0x74, 0x94, 0x62, 0x7B, 0x88, 0x61, 0x16, 0x52, 0xEC, 0x2D, 0x4A, 0x3C, 0x36, 0x49, 0xA9, 0x3D, 0xE1, 0x71, 0xF6, 0x6E, 0x5A, 0x5A, 0xD7, 0xFD, 0xE6, 0x4A, 0xCE, 0xC9, 0x46, 0xE3, 0x1C, 0x84, 0xB7, 0xB3, 0x62, 0x29, 0xB5, 0x02, 0x48, 0xCF, 0xDF, 0x70, 0x70, 0x0A, 0x14, 0x9F, 0xFE, 0x79, 0xB5, 0x29, 0xF2, 0x44, 0xE8, 0xE4, 0xE8, 0x89, 0x45, 0x10, 0x57, 0x2D, 0xCE, 0xE2, 0x13, 0xD1, 0x86, 0x47, 0xEE, 0xA9, 0xB6, 0x17, 0x99, 0xB3, 0xF5, 0x69, 0xD8, 0xC9, 0x65, 0x4D, 0x10, 0xA7, 0xA0, 0xF3, 0x65, 0xB6, 0x19, 0x77, 0xB0, 0xBE, 0x06, 0x3F, 0x0B, 0xEC, 0x28, 0xDD, 0x10, 0x2E, 0x82, 0x96, 0x66, 0xED, 0x5E, 0x65, 0x88, 0x3C, 0x17, 0x07, 0x3B, 0x4E, 0xC5, 0x0A, 0x49, 0x89, 0xE5, 0x78, 0x3C, 0x1C, 0x3D, 0xFB, 0x68, 0x6F, 0xEA, 0xC8, 0xDB, 0xEE, 0x67, 0x9A, 0xD3, 0xD2, 0x2E, 0x00, 0x8D, 0x1E, 0x1C, 0xBC, 0x7F, 0x51, 0xD6, 0x6A, 0x6E, 0x5B, 0xDB, 0x22, 0xEC, 0x2D, 0xB0, 0xA9, 0xEA, 0x56, 0xD8, 0x6D, 0x68, 0x9E, 0xFE, 0xA7, 0xE7, 0x4F, 0x74, 0xAC, 0x74, 0xB1, 0xE3, 0x64, 0xEC, 0x07, 0x65, 0x6F, 0x99, 0x84, 0x5F, 0x45, 0xEF, 0xDD, 0xB3, 0xA5, 0xBD, 0xB9, 0xC0, 0xD9, 0x9F, 0x94, 0x13, 0xF7, 0x6F, 0xE3, 0x1F, 0xB2, 0x1E, 0xA8, 0xCB, 0x5E, 0x4F, 0xFC, 0x04, 0xEB, 0x08, 0x2B, 0x62, 0x27, 0xC4, 0x0F, 0xEF, 0x27, 0xE6, 0xC0, 0x98, 0xD7, 0x1D, 0x22, 0x01, 0x1E, 0xE1, 0x30, 0x9B, 0xF8, 0x00, 0xB9, 0x98, 0x9F, 0x27, 0x1D, 0xC1, 0xFB, 0xB7, 0x8E, 0x92, 0x79, 0xE4, 0x8D, 0xD3, 0xA7, 0x89, 0x08, 0xA2, 0xBE, 0xB1, 0x19, 0x7F, 0x49, 0xF8, 0x65, 0x5D, 0xC7, 0xAB, 0xF1, 0x93, 0xC4, 0x77, 0x9C, 0x8B, 0xBD, 0x0E, 0x7F, 0x85, 0x97, 0x62, 0x36, 0x5E, 0x3B, 0x09, 0x0B, 0x84, 0xB0, 0x2F, 0x20, 0xE4, 0xB0, 0x87, 0x79, 0x20, 0xD1, 0x0B, 0x55, 0xDF, 0x0E, 0xC4, 0x65, 0x8A, 0x9D, 0x27, 0x4F, 0xE2, 0x26, 0x92, 0x63, 0x75, 0x27, 0xB1, 0x76, 0x61, 0x73, 0xE6, 0x0E, 0xAC, 0x95, 0x3D, 0x8E, 0x8F, 0xC4, 0x5E, 0x32, 0x8D, 0xE1, 0xA3, 0x70, 0x2B, 0xF2, 0x93, 0xD7, 0x7C, 0xFC, 0x28, 0x06, 0xD8, 0x1F, 0x24, 0xEC, 0x91, 0x7D, 0xE6, 0xD3, 0x89, 0x3D, 0x30, 0xF7, 0x76, 0x38, 0xB6, 0x32, 0x87, 0x3E, 0x71, 0x15, 0x7D, 0xA4, 0x13, 0xD6, 0x55, 0xA1, 0x22, 0xD5, 0xC2, 0x8C, 0x11, 0xE8, 0x07, 0xD9, 0x00, 0x7A, 0x10, 0x5B, 0x26, 0xCE, 0x0B, 0x7B, 0x83, 0xC9, 0xD9, 0x19, 0x9E, 0x7F, 0xF1, 0x10, 0xA2, 0xD8, 0x3E, 0x19, 0x7F, 0x80, 0x26, 0x9A, 0x5B, 0x10, 0xB3, 0x90, 0x69, 0x37, 0x54, 0x68, 0x7E, 0x99, 0xF4, 0x78, 0x14, 0x6A, 0x53, 0x00, 0xD5, 0x76, 0x21, 0xEF, 0xB3, 0xDE, 0x69, 0x65, 0xA8, 0x5F, 0xFA, 0x63, 0xA4, 0x0D, 0x8D, 0x55, 0x9C, 0x0B, 0x6B, 0xC4, 0x46, 0x88, 0x0D, 0xBC, 0x9C, 0xF1, 0x69, 0xD4, 0x80, 0x7D, 0x05, 0x5E, 0x87, 0x05, 0x99, 0xEF, 0xC0, 0x3F, 0x21, 0xA9, 0x57, 0x3B, 0xD0, 0xF0, 0xC6, 0x8C, 0xFE, 0x8B, 0xC8, 0xED, 0xAA, 0x9E, 0x1A, 0x1C, 0x29, 0x2C, 0x3E, 0xA4, 0xBD, 0x8E, 0x08, 0xF4, 0x08, 0xFC, 0x19, 0xB9, 0xA8, 0x6D, 0xDD, 0xD7, 0x8E, 0x2A, 0xE4, 0xFE, 0x9E, 0x8F, 0xB1, 0x8B, 0xCC, 0x15, 0xFB, 0x56, 0x3C, 0x1D, 0x37, 0x31, 0x17, 0xE2, 0xAF, 0x90, 0x86, 0x2B, 0xA7, 0x51, 0xF7, 0xA3, 0x97, 0xFA, 0x76, 0x20, 0x25, 0x6D, 0x23, 0xAA, 0xF4, 0xC8, 0xE6, 0xDA, 0x25, 0xDA, 0x45, 0xC8, 0x98, 0xD2, 0xD1, 0x50, 0x2E, 0x12, 0xA2, 0xAF, 0x09, 0x1D, 0x89, 0x3A, 0x6B, 0x2C, 0x3C, 0x9E, 0x62, 0x65, 0x82, 0x71, 0xF6, 0x52, 0x5C, 0x8B, 0x0F, 0x9A, 0xF7, 0xE3, 0xFF, 0x90, 0x07, 0x57, 0x38, 0xC8, 0x87, 0x53, 0x58, 0x6F, 0x3A, 0xB2, 0xAB, 0x37, 0xA2, 0x92, 0x85, 0x9F, 0xB6, 0x6A, 0xD5, 0xAF, 0xE0, 0xB3, 0x35, 0x07, 0x41, 0x3B, 0x64, 0x4E, 0x51, 0x7B, 0x48, 0x04, 0xF2, 0x2D, 0x03, 0xF5, 0x88, 0xC2, 0x32, 0x44, 0x16, 0xF6, 0x0A, 0xBC, 0x81, 0x28, 0xB3, 0x18, 0x4F, 0x38, 0xA0, 0xE3, 0xAE, 0x24, 0xA0, 0x0B, 0x2E, 0x9F, 0xE8, 0xE9, 0x41, 0xCC, 0x4F, 0x9D, 0xAE, 0x90, 0xC1, 0xEA, 0xA3, 0x26, 0xEA, 0x36, 0x38, 0xAC, 0x79, 0x31, 0x80, 0xC3, 0xD7, 0x2B, 0x26, 0xEC, 0x85, 0x90, 0x0B, 0x39, 0xF3, 0x3D, 0x0C, 0xB1, 0x74, 0xC9, 0x68, 0xFB, 0xE3, 0xF8, 0x0D, 0x32, 0xD8, 0x22, 0x89, 0x88, 0x40, 0x97, 0x9F, 0xFD, 0x29, 0xAB, 0xE0, 0x7C, 0xEA, 0xB6, 0x15, 0x77, 0xF0, 0xE2, 0xCA, 0xA7, 0x0A, 0x17, 0x00, 0x99, 0xAA, 0x19, 0xEC, 0x6E, 0xD0, 0x09, 0x30, 0x62, 0xD4, 0xE0, 0xC3, 0x90, 0x62, 0xDA, 0x02, 0x6A, 0xF2, 0x90, 0x51, 0x9E, 0x90, 0xDC, 0x7E, 0x24, 0xF9, 0x16, 0x1A, 0x6D, 0xBE, 0x90, 0x3C, 0x0F, 0x9E, 0x38, 0xD3, 0x26, 0xB5, 0xC2, 0x83, 0x8F, 0x18, 0x8B, 0x38, 0xB8, 0x4B, 0xD9, 0x6D, 0xF6, 0x0C, 0xF6, 0x50, 0x99, 0xCA, 0x37, 0xC1, 0x10, 0xC0, 0x9C, 0x3E, 0x87, 0x99, 0x87, 0x1C, 0xA6, 0x4E, 0xA2, 0x09, 0x1E, 0xE3, 0xC8, 0xBF, 0xF0, 0x57, 0x3B, 0x2D, 0x59, 0x0E, 0xDD, 0x34, 0x1B, 0x20, 0x59, 0x28, 0xF0, 0xD4, 0x65, 0xB1, 0x5C, 0x7C, 0xB6, 0x6B, 0x97, 0x70, 0x82, 0x68, 0x42, 0xE9, 0x2C, 0xFE, 0x55, 0xB6, 0x44, 0xC1, 0x63, 0xD6, 0xF1, 0x87, 0xF3, 0x6E, 0xD2, 0x2B, 0xE9, 0xC8, 0x10, 0x4B, 0x6A, 0x13, 0x39, 0xDA, 0xBD, 0x83, 0x2C, 0x43, 0x8F, 0xDB, 0x79, 0x90, 0x61, 0xF0, 0x49, 0xB3, 0x58, 0x72, 0x2D, 0xF4, 0x7A, 0xC0, 0x5D, 0x74, 0x5B, 0xB7, 0xA7, 0x03, 0x63, 0xBF, 0xA9, 0x1F, 0x15, 0x6B, 0x99, 0xAF, 0x72, 0xB5, 0x7C, 0x1E, 0xAD, 0x96, 0x94, 0x70, 0xC7, 0x52, 0x98, 0xF0, 0x65, 0xF0, 0x4D, 0xB2, 0x87, 0x3F, 0xCC, 0xDD, 0x95, 0x0C, 0xC4, 0x8F, 0xDB, 0x8D, 0x25, 0x1D, 0x90, 0x4A, 0x33, 0x3F, 0x72, 0x3E, 0x1C, 0x78, 0xF2, 0xA8, 0xF0, 0x75, 0x41, 0x67, 0xDB, 0x2D, 0xD6, 0x57, 0x1F, 0x5E, 0x74, 0x86, 0xF1, 0xCA, 0x18, 0x21, 0x7D, 0x46, 0xBD, 0x53, 0xA7, 0x72, 0x30, 0xF2, 0xB8, 0x7C, 0x56, 0xF0, 0x6C, 0x72, 0x8B, 0xF0, 0x95, 0xDB, 0x20, 0xB9, 0x80, 0xEC, 0xB3, 0x7D, 0x4F, 0x4E, 0x41, 0x13, 0xCD, 0xB6, 0x92, 0x13, 0xE0, 0xCC, 0xE3, 0xA7, 0x84, 0x9C, 0xAA, 0xD7, 0xAD, 0x03, 0xFC, 0xAB, 0xA5, 0x17, 0x0B, 0xB3, 0xE8, 0x53, 0xF9, 0xF5, 0xD2, 0x78, 0x6A, 0x63, 0x56, 0x65, 0x5A, 0x2C, 0xE9, 0xA3, 0xC9, 0xDB, 0x63, 0x40, 0xBC, 0x96, 0x0E, 0xB8, 0xAD, 0x21, 0xDE, 0xD0, 0xF9, 0xB6, 0x67, 0xC8, 0xE1, 0x98, 0x81, 0x59, 0x24, 0x39, 0x09, 0xEE, 0x3D, 0x91, 0x20, 0x78, 0xD1, 0x1E, 0xD2, 0x72, 0x81, 0x0F, 0x35, 0x44, 0xE4, 0xDF, 0xA2, 0x73, 0x2A, 0x18, 0xC9, 0x2A, 0x6A, 0x4C, 0xA1, 0x24, 0xE5, 0x37, 0xF1, 0x2B, 0xDB, 0x32, 0x70, 0x90, 0xC8, 0x50, 0xAD, 0x75, 0x95, 0x11, 0xC7, 0xF8, 0xD5, 0xB6, 0xF5, 0xC4, 0x1F, 0xEC, 0xB2, 0x59, 0x3A, 0x39, 0x07, 0x7E, 0x76, 0xEC, 0xB5, 0x60, 0x4F, 0xDF, 0xAA, 0xE6, 0x41, 0xBE, 0x53, 0xE7, 0xB6, 0x7C, 0x3B, 0x7A, 0x73, 0x43, 0x96, 0xE8, 0x11, 0xD9, 0x5C, 0xA1, 0x4F, 0xBE, 0x4A, 0xD4, 0xE4, 0x9F, 0x0B, 0xB4, 0x23, 0xF6, 0x68, 0xD7, 0xBA, 0xA6, 0x10, 0xC5, 0x82, 0x2A, 0xDB, 0x41, 0xE2, 0x3B, 0xAE, 0x36, 0x7B, 0x47, 0x1A, 0x21, 0x46, 0xC7, 0x36, 0x08, 0x9C, 0x4E, 0x87, 0xB6, 0x8C, 0x62, 0xAE, 0xF6, 0x43, 0x79, 0xD5, 0xD4, 0xC7, 0x8E, 0xED, 0xE2, 0x1C, 0x72, 0x41, 0x7D, 0x62, 0xB2, 0x07, 0xB1, 0xB1, 0xA4, 0x63, 0x17, 0x9F, 0xB0, 0xCE, 0x8C, 0x73, 0x95, 0x12, 0x02, 0x11, 0x6E, 0xB7, 0x87, 0xF8, 0x4C, 0xEC, 0x34, 0x4F, 0x20, 0x2D, 0x91, 0x03, 0x47, 0x37, 0x64, 0x18, 0x72, 0x37, 0x36, 0x8C, 0x53, 0x0F, 0x72, 0xAF, 0xE7, 0x4E, 0x96, 0xDF, 0x01, 0xE6, 0x08, 0x27, 0x48, 0xDE, 0x01, 0xFA, 0xA4, 0xEB, 0x22, 0x27, 0x70, 0x67, 0xD0, 0x2C, 0x36, 0x1D, 0xBC, 0xE0, 0xE6, 0xC4, 0x6C, 0x01, 0x6F, 0xD8, 0x4D, 0xA2, 0x0D, 0x40, 0x8D, 0xD9, 0x05, 0x2A, 0x07, 0x4C, 0x3A, 0xBA, 0x58, 0xBB, 0x1F, 0xED, 0xAE, 0xAB, 0x53, 0x3D, 0x44, 0x5B, 0xB3, 0xDF, 0xCA, 0x6E, 0xA3, 0xFD, 0x6C, 0x9E, 0x64, 0x14, 0xEA, 0x9F, 0x64, 0x21, 0xCC, 0x46, 0x0D, 0x77, 0x5F, 0x63, 0x03, 0x10, 0xA5, 0xAB, 0x0F, 0x33, 0x1D, 0xF6, 0xB6, 0x3D, 0x44, 0x3D, 0x86, 0x02, 0xCC, 0xD6, 0x52, 0xE1, 0xE0, 0xB3, 0x23, 0x8B, 0xD2, 0x8D, 0x05, 0xB7, 0x6A, 0x77, 0x28, 0x83, 0xD8, 0xEF, 0xD9, 0x4B, 0xA5, 0xCD, 0xFC, 0xB9, 0xFC, 0x66, 0xB1, 0x2D, 0xBD, 0x3F, 0x31, 0x55, 0xF0, 0x92, 0xBC, 0xB5, 0xDB, 0x80, 0x7F, 0x03, 0xFF, 0xE0, 0x52, 0x45, 0x9F, 0x42, 0xBE, 0xDA, 0x3C, 0xA2, 0xCA, 0x60, 0x53, 0xD3, 0x3E, 0xCA, 0x11, 0x0A, 0xEC, 0xBC, 0xAA, 0xE1, 0xAB, 0x7D, 0xAA, 0x8B, 0x14, 0x32, 0xE5, 0xA8, 0x4C, 0x6F, 0xE9, 0x6C, 0xE9, 0x31, 0xA6, 0x5C, 0x14, 0x26, 0x6A, 0x8B, 0x7F, 0x2C, 0x58, 0x24, 0x98, 0xB0, 0xF3, 0x23, 0xDF, 0x87, 0xAE, 0x70, 0xD9, 0x4D, 0x13, 0xD8, 0x39, 0x1B, 0x1D, 0x45, 0xC0, 0x4F, 0x4D, 0x79, 0xD4, 0x4C, 0xA8, 0xB4, 0xA3, 0x4B, 0xFD, 0x4E, 0xBF, 0xB3, 0xAA, 0x49, 0x7E, 0x3F, 0x53, 0x96, 0x51, 0x27, 0xD9, 0x9F, 0x3E, 0x94, 0xBE, 0x24, 0xEC, 0x55, 0x0E, 0x8B, 0x9F, 0xCF, 0xCA, 0xA4, 0x1E, 0x3B, 0xDD, 0x99, 0x37, 0x82, 0xBD, 0x2B, 0x4F, 0xD2, 0xDB, 0x89, 0x2C, 0x9B, 0x60, 0x2A, 0x05, 0x11, 0x98, 0xEE, 0xA7, 0x66, 0x41, 0x67, 0xDA, 0x25, 0x6A, 0xCF, 0xD2, 0xC6, 0xCA, 0xB3, 0xF2, 0xFD, 0x05, 0x32, 0xDD, 0x4A, 0xF1, 0x8D, 0x9C, 0x53, 0x54, 0x94, 0xD0, 0x4F, 0xD7, 0x1F, 0x67, 0xCC, 0x2E, 0x56, 0xA5, 0xEE, 0xD8, 0xCE, 0xE4, 0x4B, 0x66, 0xAC, 0xF8, 0x47, 0x2F, 0xA2, 0x82, 0x6C, 0xE6, 0x53, 0x49, 0xE8, 0x1C, 0xD3, 0x83, 0x94, 0x39, 0x74, 0xB3, 0x8D, 0xA3, 0x3A, 0xD6, 0xF0, 0xBE, 0x02, 0x97, 0x7D, 0xAF, 0x7A, 0x90, 0x9E, 0x25, 0x2E, 0x2C, 0xE1, 0x90, 0x8B, 0x84, 0x13, 0xF2, 0x36, 0xC5, 0xDA, 0xF3, 0xBF, 0x65, 0xC4, 0x6F, 0x6F, 0x65, 0x42, 0x14, 0xEE, 0x2B, 0x24, 0xF4, 0x68, 0xC6, 0xDB, 0x66, 0x0C, 0x15, 0x83, 0xB6, 0x9A, 0xD2, 0x94, 0x03, 0xF4, 0xB2, 0xF5, 0x95, 0x2A, 0xA0, 0x6B, 0x47, 0xF9, 0x75, 0xD9, 0xDD, 0xE6, 0x93, 0xE9, 0x7B, 0xC4, 0x71, 0x35, 0xF3, 0x88, 0x70, 0x41, 0x47, 0xC9, 0xA3, 0xC3, 0x4E, 0xFC, 0x5A, 0x7D, 0xD3, 0xF6, 0xD9, 0x8C, 0xA5, 0xFA, 0xBF, 0x15, 0x35, 0xD4, 0x23, 0x76, 0xB2, 0xCD, 0x2E, 0x2A, 0x00, 0x8B, 0x36, 0x7D, 0x40, 0xCD, 0x85, 0x2D, 0xDB, 0xC2, 0x94, 0xD5, 0xC7, 0x06, 0xCA, 0x67, 0xC9, 0xF4, 0x47, 0xF8, 0x9A, 0x95, 0xE2, 0xED, 0xCD, 0x2E, 0xB8, 0x42, 0x00, 0x56, 0x9D, 0x89, 0xB9, 0xCE, 0x0F, 0x2D, 0xF8, 0xB7, 0x35, 0x95, 0x7E, 0xA3, 0xAD, 0x5B, 0xF1, 0x9D, 0xEA, 0x12, 0x14, 0xDB, 0xBC, 0xA2, 0x56, 0xE0, 0x06, 0x66, 0x09, 0xD4, 0x30, 0x38, 0xB9, 0x61, 0x65, 0x7E, 0x16, 0xE7, 0x73, 0xC9, 0xB8, 0xEC, 0x54, 0xEE, 0x7C, 0xB5, 0x8D, 0xD6, 0x82, 0x47, 0x61, 0x47, 0x54, 0xFE, 0xC0, 0xB4, 0x43, 0xA4, 0xAC, 0x01, 0xA8, 0xDF, 0xBE, 0x47, 0x3C, 0x1C, 0xF8, 0xB8, 0xF2, 0x00, 0x1B, 0x0D, 0x9A, 0xD8, 0x4E, 0x60, 0xF6, 0x80, 0x63, 0xCC, 0x84, 0x34, 0x00, 0xFC, 0x6C, 0x58, 0x94, 0xFB, 0x11, 0x1D, 0x5E, 0xB4, 0x33, 0x2B, 0x0C, 0xE9, 0x53, 0x7C, 0x48, 0xAF, 0x40, 0x74, 0xE8, 0x2A, 0xE5, 0x20, 0x72, 0x38, 0x46, 0x2A, 0x23, 0x10, 0x8F, 0x6D, 0x61, 0xA2, 0x97, 0x70, 0xED, 0x0A, 0x86, 0x5D, 0x0A, 0x09, 0x6D, 0x96, 0x31, 0xF3, 0xC1, 0x5E, 0xD3, 0x66, 0x7A, 0x39, 0x18, 0x55, 0xA7, 0xD1, 0x1F, 0x65, 0x27, 0x15, 0xCE, 0xCA, 0x9C, 0xCE, 0xDC, 0x55, 0xD8, 0x69, 0x8A, 0x69, 0x5F, 0x24, 0x56, 0x39, 0x95, 0xFC, 0x14, 0x5D, 0x22, 0xBD, 0x4C, 0xA4, 0x6F, 0x3D, 0x21, 0xA2, 0xB1, 0xC1, 0x15, 0xB6, 0xFC, 0x37, 0xC8, 0x12, 0xEB, 0x74, 0xFA, 0x3E, 0xC4, 0x37, 0xF9, 0x4E, 0xFD, 0x05, 0x2F, 0xD6, 0x62, 0xFA, 0x85, 0x8A, 0xE8, 0x82, 0xE8, 0x8C, 0x34, 0xD9, 0x70, 0xF9, 0x3E, 0x75, 0x87, 0x38, 0x02, 0xBE, 0xA6, 0x58, 0x2A, 0x38, 0x1A, 0xF5, 0x4D, 0x3A, 0x97, 0xEF, 0xB5, 0x6D, 0xAD, 0xF0, 0x0F, 0xB5, 0x67, 0x45, 0x36, 0x3F, 0x07, 0xFD, 0x69, 0xBD, 0x8D, 0x6E, 0x83, 0x5D, 0x4C, 0xF8, 0xD4, 0x33, 0x68, 0x72, 0xB5, 0x3E, 0xA7, 0x29, 0xB3, 0x25, 0x1F, 0xD0, 0xD5, 0x6B, 0x97, 0xC9, 0xA6, 0xAA, 0x2D, 0x55, 0x1E, 0xD0, 0x6D, 0x79, 0xB6, 0x4C, 0x17, 0x35, 0x52, 0xC2, 0x13, 0x9B, 0x06, 0x14, 0x0A, 0x4B, 0xF9, 0x7D, 0xCB, 0x63, 0xF8, 0x10, 0xAE, 0xB1, 0xFA, 0x45, 0xD7, 0xC2, 0xC7, 0x4D, 0x12, 0xA9, 0x17, 0x90, 0x59, 0x35, 0x27, 0x67, 0x4C, 0xA1, 0x2E, 0x2F, 0x5D, 0xB7, 0x48, 0x7F, 0x5B, 0xF2, 0x46, 0x55, 0x96, 0xB9, 0x0D, 0x5C, 0x26, 0xF7, 0x4A, 0x1F, 0x1A, 0x71, 0x45, 0x62, 0xA2, 0x58, 0xE5, 0x1F, 0x22, 0x0C, 0x11, 0x85, 0x3A, 0xC7, 0xF1, 0x03, 0xC9, 0xC5, 0x56, 0x8D, 0x74, 0x0D, 0xE2, 0x6E, 0x92, 0x46, 0xFD, 0x82, 0x0C, 0xAB, 0x52, 0xB2, 0xC1, 0x1A, 0xB7, 0x5C, 0x9E, 0xF6, 0x73, 0x99, 0x5E, 0x7C, 0x50, 0xB5, 0xBB, 0xE0, 0x16, 0xEF, 0xAF, 0xEC, 0x69, 0x8E, 0x6B, 0x84, 0xAD, 0xF8, 0x71, 0xFA, 0x17, 0xFF, 0x20, 0xE1, 0x74, 0x59, 0x90, 0xF3, 0x3A, 0xBE, 0x0D, 0xF5, 0xD3, 0xAA, 0x96, 0x2E, 0x41, 0x8E, 0x99, 0xA8, 0xE8, 0xD1, 0x90, 0x41, 0xE5, 0x96, 0xEC, 0x83, 0x2D, 0xF7, 0xF5, 0xD5, 0xDA, 0x8B, 0xF5, 0x8B, 0xC4, 0xE1, 0xAA, 0xB1, 0x15, 0x1B, 0x78, 0xB0, 0x4C, 0x59, 0x98, 0x76, 0xD0, 0x4D, 0x5C, 0x95, 0x75, 0xDE, 0x4F, 0x2E, 0x78, 0xAB, 0xCC, 0x74, 0xDE, 0xC0, 0x9F, 0xC0, 0xA0, 0x56, 0x9F, 0x69, 0x31, 0xBA, 0xDB, 0xE4, 0x05, 0xF5, 0x06, 0xDA, 0x5C, 0x71, 0x37, 0xEB, 0xBF, 0xEE, 0x5B, 0x59, 0xF1, 0xDA, 0x2B, 0x6D, 0xDE, 0xC2, 0x1E, 0x95, 0x73, 0xDD, 0x27, 0xEE, 0x6D, 0x59, 0x5A, 0xD9, 0x8B, 0x03, 0x66, 0xE2, 0xB8, 0xDC, 0x93, 0x5B, 0xD6, 0x0A, 0x3A, 0x34, 0x86, 0xCE, 0xDB, 0x99, 0x97, 0xFC, 0x2E, 0xEB, 0xFD, 0x74, 0x22, 0xFA, 0x9F, 0xE9, 0x61, 0xEA, 0x0A, 0x24, 0x2D, 0xDE, 0x51, 0x91, 0xC4, 0x9D, 0x92, 0xD1, 0x5A, 0x3C, 0x9F, 0x93, 0xC0, 0xB6, 0xE8, 0xB9, 0xDC, 0x5F, 0x69, 0x0E, 0x19, 0x7D, 0xBC, 0xE5, 0xE1, 0xC6, 0x9A, 0x71, 0xBC, 0xE6, 0x4D, 0x55, 0xB2, 0xA7, 0x80, 0xB5, 0x13, 0x26, 0x7C, 0x0C, 0xC4, 0x5A, 0x2B, 0xF8, 0xFD, 0x40, 0xB4, 0xE9, 0x07, 0xE6, 0x00, 0x10, 0x5D, 0x34, 0xB1, 0x7C, 0x3F, 0x42, 0xE9, 0x32, 0x0A, 0x6F, 0xC2, 0x19, 0xFC, 0xFB, 0xFA, 0x55, 0xF0, 0xFE, 0xD4, 0xA0, 0x8C, 0x3D, 0x70, 0xE8, 0xFE, 0x5D, 0xEA, 0x76, 0x78, 0xCE, 0x66, 0x6B, 0xF9, 0x30, 0xA8, 0xC4, 0x69, 0x97, 0xB0, 0x10, 0x3C, 0x6A, 0x95, 0xCF, 0x4F, 0x06, 0x8D, 0x4D, 0xCE, 0x31, 0x33, 0x81, 0x3B, 0x85, 0xBD, 0x65, 0x28, 0x53, 0xAA, 0xBD, 0x58, 0xD0, 0x4A, 0x55, 0xF1, 0xBF, 0xE7, 0xEC, 0x27, 0x3E, 0xA5, 0x12, 0xBA, 0x46, 0x62, 0x7E, 0xD8, 0x7E, 0xF5, 0x62, 0x7C, 0x9E, 0x6F, 0x8D, 0xAC, 0x00, 0x2D, 0x75, 0x4A, 0x15, 0x06, 0xC3, 0x6B, 0xAD, 0x86, 0xF0, 0x6D, 0xC1, 0x7B, 0xC6, 0x0F, 0xE9, 0x8B, 0xA0, 0x57, 0xE1, 0xDA, 0xD2, 0x67, 0xD2, 0x4A, 0x8D, 0xAA, 0x60, 0xBD, 0xD8, 0x94, 0xD6, 0x64, 0x8B, 0x04, 0x0D, 0x29, 0x67, 0xB5, 0x3F, 0xF8, 0xB2, 0xB0, 0x3C, 0x55, 0x31, 0xBD, 0x7E, 0xF3, 0x3A, 0xD9, 0x6A, 0xA2, 0xD5, 0x69, 0xB9, 0x70, 0x3C, 0xF2, 0xD2, 0x52, 0xCB, 0xFC, 0x80, 0x48, 0xE3, 0x03, 0x74, 0x25, 0xC8, 0xCB, 0x9F, 0x54, 0x7A, 0x30, 0xFD, 0x98, 0x8A, 0x9F, 0xDF, 0xA6, 0x62, 0x48, 0x5E, 0xF6, 0x74, 0x39, 0x91, 0x6C, 0xAE, 0x15, 0x4A, 0xBC, 0xF7, 0x75, 0xA8, 0x0C, 0x05, 0xDD, 0xBE, 0x1E, 0xD2, 0xDB, 0xF4, 0x93, 0x65, 0x01, 0x82, 0x4B, 0x58, 0xAA, 0xE5, 0x6A, 0xE6, 0x09, 0x3C, 0xC2, 0x78, 0x2D, 0x5D, 0x08, 0xB2, 0x05, 0xF3, 0x4B, 0xA2, 0x73, 0x2D, 0x54, 0x05, 0xF9, 0x53, 0xB2, 0xD2, 0xF0, 0x7B, 0x59, 0xA0, 0x36, 0x25, 0xD1, 0x55, 0x3B, 0x51, 0xE5, 0x14, 0x5A, 0xA3, 0xEC, 0x90, 0x96, 0x6D, 0x4A, 0x96, 0xA6, 0x09, 0xFC, 0x97, 0x76, 0x08, 0xB2, 0xF0, 0x4F, 0x96, 0x73, 0x99, 0x1B, 0x70, 0x9C, 0x71, 0xC0, 0xFF, 0xB7, 0x90, 0xDC, 0x67, 0xC5, 0x8F, 0xCB, 0x97, 0xAA, 0x9E, 0xE7, 0xFD, 0x29, 0xBA, 0x83, 0xA7, 0x66, 0x4D, 0xCA, 0x65, 0x12, 0xA6, 0xA4, 0x6B, 0x32, 0x27, 0x84, 0x06, 0x29, 0x03, 0xD5, 0x6E, 0xBE, 0x8E, 0xD2, 0xE9, 0x92, 0xE5, 0x4B, 0x7F, 0x09, 0x22, 0x49, 0x9D, 0xA5, 0x27, 0x73, 0x1E, 0x7E, 0x68, 0x8C, 0xD1, 0x4D, 0x60, 0x52, 0x8E, 0x5F, 0xC9, 0xEC, 0xBA, 0xCF, 0x2A, 0xAF, 0x3C, 0x41, 0xD5, 0x35, 0xA2, 0x2A, 0x33, 0xAB, 0xA4, 0x3B, 0x61, 0x46, 0xBA, 0x6B, 0xEE, 0xEF, 0xBD, 0x2F, 0x95, 0xCE, 0xBA, 0x5C, 0x9F, 0x93, 0xD2, 0x49, 0xF2, 0x11, 0x4B, 0x2F, 0x0A, 0xC2, 0xA9, 0xBB, 0x96, 0x62, 0x66, 0x00, 0x09, 0x30, 0x7E, 0x4F, 0xD7, 0x82, 0xC2, 0x9C, 0xC2, 0xE2, 0xEC, 0xB6, 0xEB, 0x8A, 0x92, 0xBC, 0xB5, 0x8D, 0xB7, 0x70, 0xAB, 0xCC, 0xFA, 0xAA, 0x8A, 0x04, 0xC3, 0xF4, 0xB1, 0x45, 0x6F, 0xF7, 0x2E, 0x53, 0x8E, 0xCB, 0xF6, 0xDD, 0x68, 0x25, 0x79, 0xA9, 0x34, 0x58, 0x2A, 0x10, 0x84, 0xD2, 0x17, 0x2C, 0xEF, 0x33, 0x27, 0x91, 0x56, 0x13, 0x1E, 0x5D, 0x05, 0x36, 0x69, 0xCD, 0x9A, 0x97, 0x71, 0xB6, 0x08, 0x33, 0x6A, 0x57, 0x71, 0x16, 0x03, 0x76, 0x65, 0x46, 0x9C, 0x1B, 0x31, 0xD2, 0xFC, 0xE7, 0x9C, 0x73, 0x41, 0xC3, 0xB3, 0xDE, 0x70, 0xC5, 0x6B, 0xE7, 0x6A, 0xD2, 0x78, 0xFB, 0x16, 0x0F, 0x97, 0x3C, 0xE7, 0x95, 0x59, 0x8E, 0x13, 0xAC, 0xE7, 0x9D, 0x36, 0xD9, 0xCA, 0xDF, 0xC4, 0xBB, 0xAD, 0x69, 0x6E, 0x6A, 0x85, 0x4F, 0x09, 0x87, 0xD6, 0x1C, 0x80, 0xEE, 0x02, 0x8A, 0xD2, 0x08, 0xC8, 0x2B, 0xA6, 0x23, 0xDF, 0x14, 0xBC, 0x1E, 0xB4, 0x38, 0x6B, 0x11, 0x98, 0xBF, 0x6E, 0x50, 0x33, 0x16, 0x4C, 0x5A, 0x0C, 0x48, 0x38, 0xC0, 0x7D, 0x8B, 0xED, 0xEC, 0x7B, 0x20, 0xDE, 0xD8, 0x91, 0x3F, 0x14, 0xF0, 0x50, 0xDF, 0x6B, 0x6C, 0xA3, 0xC7, 0xB2, 0xF7, 0xAA, 0xC7, 0x90, 0x0B, 0x79, 0x61, 0x25, 0x5B, 0xF0, 0x75, 0x31, 0xFC, 0xBC, 0x44, 0xCC, 0x2F, 0xD0, 0x38, 0xB3, 0x0D, 0x8D, 0x5C, 0x77, 0x4C, 0xCD, 0x47, 0x0C, 0x16, 0x67, 0x49, 0xC6, 0x40, 0x5E, 0xE6, 0x6D, 0x6C, 0x26, 0x38, 0xD7, 0xC8, 0x83, 0x69, 0x07, 0x74, 0xAA, 0x77, 0x8D, 0xE3, 0xC5, 0xE6, 0x8C, 0x57, 0x95, 0x5A, 0xF0, 0x9C, 0x73, 0xB9, 0x38, 0x8F, 0x1F, 0x16, 0x33, 0x2B, 0xF7, 0x3E, 0x1D, 0xB1, 0xBB, 0x3D, 0xD3, 0x8A, 0x8C, 0x5A, 0x97, 0xA8, 0x1E, 0x81, 0xFD, 0x5B, 0x3C, 0x5F, 0x5C, 0x04, 0xB7, 0x99, 0x7B, 0xB2, 0xBB, 0xC1, 0x6A, 0xC3, 0x3E, 0x86, 0x0F, 0x9C, 0x56, 0xFC, 0x6B, 0x38, 0xAC, 0x12, 0xD1, 0x03, 0x95, 0x6F, 0xE4, 0x9A, 0xB4, 0x8B, 0xC5, 0x5B, 0x24, 0xA2, 0xA8, 0xB9, 0xB9, 0x72, 0xE1, 0xC9, 0xDD, 0x43, 0x32, 0x44, 0xFC, 0x84, 0xB5, 0xD7, 0x55, 0x28, 0x79, 0x65, 0x91, 0x40, 0xBC, 0x03, 0x35, 0x34, 0x1F, 0xCA, 0x3A, 0x40, 0xE6, 0x86, 0x65, 0x4C, 0x0C, 0x70, 0x4B, 0x79, 0xB5, 0x3E, 0x20, 0x6B, 0x3C, 0xB3, 0xAC, 0xD2, 0x5D, 0xFB, 0x22, 0x6D, 0x6A, 0x51, 0xAF, 0x7A, 0x7A, 0xC4, 0x40, 0xEE, 0x50, 0xB9, 0xF5, 0xAE, 0x55, 0x19, 0xF3, 0x45, 0xAD, 0x6B, 0xD7, 0xAB, 0x0C, 0x99, 0x9B, 0x8B, 0xFC, 0xC4, 0x73, 0x31, 0xAE, 0xF9, 0x04, 0x76, 0x1A, 0x44, 0x1B, 0x5E, 0x62, 0xF6, 0x02, 0x97, 0x15, 0xAE, 0xF5, 0x96, 0x85, 0x97, 0xE8, 0x43, 0x15, 0xD7, 0xF2, 0xE8, 0x54, 0xF7, 0xA2, 0x85, 0x59, 0x29, 0x07, 0x39, 0x7A, 0x61, 0x7A, 0xE4, 0xCE, 0x3A, 0x5D, 0xAF, 0xBC, 0x67, 0x6D, 0x83, 0xF2, 0xBA, 0x30, 0x68, 0x51, 0xB3, 0xE8, 0x1B, 0xFE, 0xCE, 0x3C, 0x91, 0x1D, 0x07, 0xBD, 0x30, 0x72, 0x67, 0xF6, 0x01, 0xC7, 0x65, 0x09, 0xF5, 0x16, 0x95, 0xED, 0x54, 0x7D, 0xC5, 0x91, 0xD2, 0xE3, 0xA9, 0x5E, 0x85, 0x48, 0xC1, 0xF4, 0x83, 0xBB, 0x72, 0x7E, 0x64, 0x5D, 0xDF, 0xD1, 0xA4, 0x63, 0xD5, 0xDF, 0xD7, 0x7C, 0x53, 0x76, 0x48, 0xC6, 0x2F, 0xBA, 0x2D, 0x1E, 0x46, 0xCE, 0x33, 0xFF, 0xCD, 0x2E, 0x80, 0x37, 0x1A, 0xBD, 0x65, 0x52, 0x80, 0x8B, 0x32, 0x41, 0xDD, 0xEB, 0xC6, 0x03, 0xC4, 0xCB, 0x8A, 0x4F, 0x35, 0xF6, 0x29, 0x49, 0x85, 0x95, 0xA5, 0xC4, 0xC1, 0x15, 0x39, 0xC7, 0xF3, 0x12, 0xB6, 0x8B, 0x75, 0x98, 0xEE, 0xA0, 0xF7, 0x12, 0x65, 0x81, 0xF4, 0xF1, 0xA2, 0x2A, 0xB1, 0x25, 0xF9, 0xDB, 0x82, 0x62, 0x3D, 0xE0, 0x7C, 0xE3, 0x56, 0x46, 0x0E, 0xBC, 0x62, 0xBE, 0xF6, 0xEC, 0xE6, 0x34, 0x02, 0x67, 0xDB, 0x6F, 0x72, 0xDA, 0x0F, 0xBF, 0x6A, 0x30, 0xE2, 0x08, 0x42, 0xBB, 0x2A, 0xBA, 0xD2, 0x9E, 0xF8, 0x67, 0x15, 0xF6, 0x70, 0x36, 0x7B, 0x3E, 0xCC, 0x92, 0x73, 0xAD, 0x1C, 0x02, 0x15, 0x43, 0xB9, 0xBD, 0x66, 0x23, 0x85, 0x4F, 0x78, 0x33, 0x0D, 0x2B, 0x58, 0x5F, 0xDE, 0x0A, 0xFE, 0xB8, 0xA3, 0x32, 0xD8, 0x0B, 0xB4, 0x6F, 0x0F, 0x80, 0x16, 0x1E, 0x7E, 0x5C, 0x1F, 0x09, 0xFC, 0x0B, 0x05, 0xCA, 0x3F, 0x02, 0x9B, 0xFD, 0xAF, 0x16, 0x54, 0x01, 0x93, 0xBC, 0x82, 0x33, 0x9B, 0x80, 0xE9, 0x0E, 0xF3, 0xE5, 0x3A, 0xDE, 0x0D, 0xD3, 0x15, 0xC2, 0x02, 0x5E, 0xA6, 0x41, 0x2E, 0x3B, 0x87, 0x87, 0xD0, 0xBD, 0xDD, 0xE7, 0xC9, 0x01, 0x60, 0x63, 0x5B, 0x24, 0x7E, 0xF5, 0x10, 0x5B, 0x77, 0x08, 0xBD, 0x19, 0x82, 0x95, 0x9B, 0x23, 0x65, 0x7E, 0xD7, 0x0B, 0x86, 0xC3, 0x95, 0x9E, 0xB7, 0x33, 0x47, 0x43, 0x3A, 0xFB, 0x1A, 0xB9, 0x21, 0x38, 0xCF, 0x04, 0x10, 0x6E, 0x07, 0xAC, 0x17, 0xB4, 0xF0, 0xEF, 0xF3, 0xBA, 0xA9, 0x57, 0x47, 0x4E, 0x0B, 0x19, 0xDE, 0x9E, 0x56, 0x5F, 0xFE, 0xBB, 0x98, 0xB7, 0xB5, 0x42, 0x3A, 0x62, 0x6F, 0x55, 0x19, 0x8F, 0x04, 0xB7, 0xFC, 0xCB, 0x0F, 0xC6, 0x31, 0xCF, 0xE5, 0x19, 0x61, 0xE8, 0x2A, 0x7B, 0x2F, 0x59, 0x15, 0x14, 0x6E, 0x32, 0x4E, 0x38, 0x16, 0x28, 0x5A, 0xB0, 0x8A, 0x5F, 0xC4, 0x7B, 0x42, 0x66, 0x1C, 0xC9, 0x55, 0xD8, 0x71, 0xAF, 0xB7, 0x54, 0x4B, 0x8D, 0x63, 0xBE, 0xD5, 0xFC, 0x14, 0x0D, 0xDF, 0x3B, 0xBB, 0x6C, 0x38, 0xEB, 0xBF, 0xA5, 0x25, 0xAF, 0x88, 0xB6, 0xF7, 0xB8, 0xAA, 0x1B, 0xC0, 0xFB, 0xEC, 0x27, 0xCA, 0x7C, 0x60, 0x8D, 0xC9, 0x10, 0xC1, 0x49, 0x70, 0xF4, 0x82, 0x0D, 0xFC, 0x78, 0xDE, 0x1B, 0xF2, 0x6E, 0x57, 0xA7, 0x6E, 0x0A, 0xB7, 0xBB, 0x25, 0x42, 0x9D, 0x10, 0xA3, 0xA9, 0xB9, 0x26, 0x4F, 0x09, 0xD6, 0x97, 0xA6, 0x49, 0x46, 0x6D, 0x49, 0xCC, 0x33, 0x66, 0xBF, 0x78, 0x68, 0x74, 0xE1, 0xD4, 0x01, 0xFB, 0x85, 0xD2, 0x6F, 0xC8, 0x31, 0x93, 0x40, 0x81, 0x1C, 0x0C, 0xF9, 0xFF, 0xC3, 0xF5, 0xBC, 0x17, 0xE4, 0xA5, 0x2E, 0xEB, 0xBC, 0xE9, 0x5C, 0xA7, 0xE6, 0xBC, 0xAC, 0x9F, 0xD1, 0x9C, 0xEA, 0xBF, 0xE9, 0xBF, 0xF6, 0x18, 0x96, 0xCE, 0x53, 0xA2, 0x5B, 0x9C, 0x72, 0x3B, 0x25, 0x7B, 0x3D, 0xCD, 0x74, 0x43, 0xF9, 0x90, 0xFD, 0x59, 0x69, 0x2F, 0x36, 0xC3, 0x74, 0xBE, 0x80, 0x0B, 0x76, 0x1B, 0xC8, 0xF8, 0xEE, 0xBC, 0x67, 0x64, 0x40, 0x67, 0x43, 0xA9, 0x84, 0x73, 0xBC, 0x79, 0x4E, 0xC1, 0xBD, 0xA8, 0x6B, 0xD5, 0x29, 0xD9, 0x9F, 0x82, 0x6E, 0x94, 0xD4, 0x69, 0xD7, 0x6D, 0xAE, 0xCA, 0x4D, 0x53, 0x18, 0x7B, 0x7C, 0xD1, 0x9E, 0x17, 0x7C, 0x73, 0xF0, 0x93, 0x5E, 0xC4, 0x97, 0x98, 0x4D, 0x13, 0x68, 0x21, 0x73, 0xC3, 0x36, 0x7E, 0x28, 0x30, 0x84, 0x38, 0xD7, 0x79, 0xBF, 0x66, 0x2D, 0xE7, 0x7D, 0xD3, 0xE7, 0xF2, 0x49, 0x51, 0x6C, 0x75, 0x60, 0xC1, 0xA6, 0x3D, 0x63, 0x4B, 0x0E, 0x64, 0x65, 0xFB, 0x9E, 0xCF, 0x8D, 0x51, 0x6F, 0x70, 0x3F, 0xA6, 0xED, 0x15, 0xF5, 0x3A, 0x88, 0x64, 0xB3, 0x88, 0x39, 0xE6, 0x13, 0x04, 0xD7, 0x21, 0x91, 0xD1, 0x2F, 0xBE, 0x06, 0x70, 0x84, 0xEE, 0x0C, 0x5C, 0xE6, 0x5A, 0x24, 0xFF, 0xE9, 0x43, 0xD2, 0xD2, 0xC2, 0x6F, 0x77, 0x6C, 0x4A, 0x9B, 0xBD, 0x4B, 0xD9, 0x70, 0x20, 0xB5, 0x71, 0xE3, 0xDB, 0xF2, 0xF6, 0xB4, 0x59, 0x2E, 0x8F, 0x72, 0x9F, 0xA5, 0xDD, 0xB1, 0x9D, 0xA6, 0xD2, 0x70, 0x2E, 0x19, 0xAF, 0x17, 0x87, 0x70, 0x77, 0x2C, 0x98, 0x26, 0xD8, 0xC9, 0x65, 0xC0, 0x63, 0x03, 0x23, 0xA1, 0x81, 0xC4, 0xA5, 0xBD, 0x39, 0x60, 0x72, 0x38, 0xB7, 0x9D, 0x0F, 0x98, 0xEC, 0xFC, 0x50, 0x0F, 0xF2, 0xE6, 0x6E, 0xDC, 0x55, 0x3E, 0x92, 0xDB, 0xE5, 0x12, 0x94, 0xAB, 0xE6, 0x9E, 0xB6, 0x7E, 0xAB, 0x4A, 0xE5, 0x9E, 0x33, 0x1A, 0x23, 0xDE, 0xC8, 0x3D, 0x32, 0xEF, 0x86, 0xC0, 0x9D, 0xDB, 0x04, 0xCC, 0x3A, 0xC1, 0x23, 0xE2, 0xE3, 0x95, 0x3D, 0x53, 0xB1, 0xD3, 0xE1, 0x53, 0xDA, 0x6C, 0x51, 0x93, 0x9D, 0x59, 0x75, 0x87, 0xE1, 0x65, 0x1B, 0xF4, 0x65, 0xCE, 0xD0, 0xF8, 0x95, 0xE2, 0xDC, 0x11, 0xE0, 0x12, 0xEB, 0xA1, 0xAA, 0x45, 0xBC, 0x1F, 0x86, 0xC3, 0xC4, 0x46, 0xBC, 0x45, 0x73, 0x07, 0x04, 0x73, 0xB9, 0xB7, 0xC1, 0x57, 0xC7, 0x3F, 0xB0, 0x39, 0xF1, 0x57, 0x8F, 0x4E, 0x66, 0x0E, 0xEC, 0x1F, 0x6C, 0xB5, 0x24, 0xEF, 0xEF, 0x34, 0xAC, 0x3D, 0x84, 0xA7, 0xAE, 0x7F, 0x55, 0x1A, 0x8E, 0x6A, 0x57, 0x8E, 0xD5, 0x7B, 0xC1, 0x4D, 0x56, 0x8D, 0xCA, 0xB3, 0xA0, 0xB5, 0x41, 0x9E, 0xE8, 0x2E, 0x4F, 0x3B, 0x77, 0x17, 0xFB, 0x88, 0xFB, 0x0A, 0xEC, 0x39, 0x7E, 0x59, 0xDA, 0x1D, 0xF7, 0xA8, 0xBB, 0x50, 0xBC, 0x68, 0xFF, 0xD4, 0x16, 0x40, 0x60, 0xBD, 0x43, 0x5A, 0x73, 0x91, 0x99, 0xB2, 0xFE, 0x74, 0xC9, 0x0D, 0xD2, 0x66, 0xE5, 0xA2, 0x1C, 0x01, 0x36, 0xD2, 0xEA, 0xAB, 0x32, 0x00, 0x5A, 0x61, 0x70, 0x4F, 0x44, 0xF2, 0x9E, 0xCF, 0x95, 0xB1, 0x3A, 0xEE, 0x0B, 0x5E, 0xF9, 0xB1, 0xD7, 0x9A, 0xBC, 0x38, 0x61, 0xF7, 0x42, 0xE5, 0xEA, 0xB0, 0x84, 0x96, 0x09, 0x52, 0x76, 0x47, 0x52, 0x4D, 0x9A, 0x68, 0xFA, 0x86, 0xE1, 0x25, 0xA9, 0xFC, 0xF1, 0x2B, 0x7D, 0x72, 0x0C, 0x09, 0xDC, 0x1A, 0x56, 0x74, 0xC1, 0xAE, 0x86, 0x1A, 0x91, 0x11, 0xE0, 0x30, 0x2F, 0x90, 0xF5, 0xE7, 0x3E, 0xE2, 0xBD, 0xEC, 0x5F, 0x92, 0xFD, 0x27, 0xEE, 0x6C, 0xD7, 0x95, 0x8C, 0xE1, 0x61, 0xE7, 0x9B, 0x5D, 0xD5, 0x2E, 0x3B, 0x9A, 0xAA, 0x9F, 0xCA, 0x5E, 0x6C, 0x58, 0x53, 0x7C, 0x53, 0xF8, 0x62, 0x25, 0x99, 0x5D, 0x4C, 0x3B, 0xDA, 0x2C, 0x52, 0x04, 0x22, 0xFB, 0x8C, 0xBA, 0x85, 0xCF, 0x01, 0xF1, 0xFC, 0x76, 0xD6, 0x91, 0xFB, 0x8E, 0xFB, 0xA3, 0x7F, 0x57, 0xE1, 0x9B, 0x38, 0xAF, 0xAE, 0xAB, 0xB9, 0x01, 0x61, 0x4C, 0xF3, 0xD4, 0x0C, 0xE1, 0x0E, 0xC7, 0x6A, 0x5C, 0xF5, 0x64, 0xC3, 0xDA, 0xE2, 0x00, 0xC9, 0x1B, 0x97, 0x61, 0xD9, 0x6B, 0xF8, 0x1B, 0x6C, 0xFE, 0x29, 0xB6, 0xA1, 0x87, 0x4D, 0xAC, 0x44, 0xC3, 0xC0, 0xB1, 0x06, 0xF1, 0xEC, 0x76, 0xDE, 0x62, 0x8E, 0xCF, 0xB1, 0xCC, 0x8A, 0xC3, 0xB1, 0x0F, 0x8F, 0x38, 0x17, 0x6F, 0x0F, 0x9B, 0xD6, 0xD4, 0xA3, 0xBF, 0xB8, 0xBD, 0xA4, 0xDA, 0x4D, 0x7B, 0x65, 0x83, 0x4F, 0xD1, 0x0B, 0x79, 0x97, 0xCB, 0xEA, 0xAC, 0xF3, 0xEC, 0x17, 0xDB, 0x1B, 0x8A, 0x58, 0x2C, 0xC0, 0xB4, 0x5A, 0xB4, 0x16, 0xD4, 0x18, 0xAD, 0x62, 0xF3, 0x79, 0x9A, 0xFB, 0xB2, 0xD4, 0xE3, 0x71, 0x83, 0xA7, 0x58, 0xAE, 0x65, 0xD2, 0xAF, 0xC6, 0x6A, 0xDE, 0xE3, 0xD4, 0x80, 0x2C, 0x37, 0x70, 0x16, 0xE7, 0x0B, 0x39, 0x06, 0xC2, 0x78, 0xF7, 0x0F, 0x1E, 0x81, 0x9F, 0x83, 0x3E, 0xAB, 0xBC, 0xD1, 0xDB, 0x60, 0xA3, 0xFD, 0x67, 0x7C, 0x26, 0x98, 0x6B, 0x1E, 0x89, 0x67, 0x83, 0x8A, 0xDB, 0xBB, 0x92, 0x57, 0xC2, 0x3E, 0x27, 0xE3, 0x53, 0x8F, 0x22, 0xA3, 0x1A, 0x82, 0xB9, 0x8B, 0xE0, 0xDF, 0x59, 0xC1, 0xBC, 0xC7, 0xC8, 0x41, 0x7C, 0x1F, 0x98, 0x8F, 0xB0, 0xE1, 0x6E, 0x70, 0x04, 0xB2, 0xDA, 0x6B, 0x1E, 0x9A, 0x02, 0x6F, 0xB7, 0x17, 0x60, 0x1D, 0x50, 0xBE, 0xB9, 0x1F, 0xBE, 0x01, 0x0A, 0xB8, 0x11, 0x93, 0x38, 0x5F, 0x24, 0x38, 0xF6, 0x3A, 0xB9, 0x53, 0x30, 0xBE, 0x6E, 0x72, 0x5A, 0x1C, 0xDF, 0x2A, 0xA3, 0x94, 0xAB, 0xA7, 0xDF, 0xA2, 0x86, 0x40, 0x2F, 0xE5, 0xB8, 0x6F, 0x33, 0x74, 0x89, 0x98, 0xE8, 0x69, 0x8D, 0xFC, 0x45, 0x03, 0xED, 0x83, 0xB0, 0xDD, 0xF0, 0x80, 0xF9, 0x1E, 0xEC, 0x2D, 0x6C, 0x70, 0xED, 0x75, 0xBC, 0x40, 0xF7, 0xF8, 0x98, 0x2E, 0x29, 0x42, 0x3D, 0xB2, 0x26, 0x24, 0x35, 0x51, 0xBE, 0x4E, 0x37, 0x9E, 0x73, 0x47, 0x62, 0x00, 0xCB, 0x78, 0x9F, 0x04, 0x3F, 0x43, 0xBD, 0xA0, 0x49, 0x4C, 0x90, 0xE7, 0x29, 0x84, 0x8F, 0xB7, 0xD8, 0x9F, 0xC4, 0x46, 0x22, 0x1F, 0xCD, 0x65, 0x58, 0x05, 0x7C, 0xFC, 0x7A, 0x5C, 0x9C, 0x7B, 0xE1, 0xBD, 0x7E, 0xD7, 0xC4, 0x83, 0xFA, 0xA8, 0xEA, 0xB7, 0x29, 0x5B, 0x33, 0x5C, 0xD2, 0xC7, 0xA4, 0xFD, 0x55, 0x8F, 0x04, 0x0B, 0x78, 0xCE, 0xB2, 0xCE, 0x7D, 0x47, 0xC0, 0x7D, 0xC2, 0xD3, 0xAB, 0xB3, 0x11, 0x53, 0x6A, 0xA1, 0x83, 0x16, 0xBD, 0x80, 0xFE, 0x36, 0xEF, 0xC0, 0x68, 0xC4, 0xF9, 0x6A, 0x79, 0x6C, 0x5C, 0x4D, 0x5E, 0xAF, 0x20, 0xE1, 0x7C, 0xD9, 0xFD, 0xAA, 0xD0, 0xE4, 0x93, 0xF9, 0x2F, 0x35, 0x01, 0x69, 0xAE, 0x59, 0x47, 0xA0, 0x11, 0xDC, 0xC3, 0xE9, 0x63, 0xF7, 0xCD, 0x02, 0xDE, 0xC8, 0xAC, 0x57, 0x4D, 0x82, 0x5F, 0x32, 0x2B, 0x1D, 0x70, 0xB4, 0x15, 0xBB, 0x62, 0x31, 0x15, 0x83, 0x11, 0xFA, 0xA2, 0x6D, 0xEC, 0xC4, 0x0E, 0xB0, 0x67, 0x53, 0x82, 0x5B, 0xE3, 0xBF, 0x2A, 0x6D, 0xD2, 0xD1, 0xAA, 0x3D, 0xEA, 0x67, 0xA9, 0xD2, 0xA2, 0x7F, 0x10, 0x97, 0x53, 0x99, 0x73, 0x20, 0x74, 0x24, 0x80, 0xA9, 0x17, 0x7B, 0xE6, 0xC1, 0x7D, 0x2C, 0xE5, 0xB0, 0x04, 0xED, 0xC2, 0x2B, 0x2D, 0xFC, 0x30, 0x2D, 0xD2, 0x77, 0xA1, 0x39, 0xD6, 0xE3, 0xB8, 0xE5, 0xD1, 0xD2, 0x84, 0xD1, 0x47, 0xDE, 0x54, 0xF4, 0x25, 0x15, 0x35, 0x3D, 0x53, 0xE5, 0xA7, 0x0E, 0xA9, 0xF2, 0x01, 0x58, 0x4E, 0x70, 0xE1, 0xF2, 0x10, 0x10, 0x98, 0xA3, 0x8B, 0xF5, 0xE8, 0x84, 0xCB, 0x85, 0xB9, 0x0E, 0xE3, 0xD1, 0x7B, 0x04, 0x6A, 0x91, 0x8E, 0x5D, 0x42, 0xC7, 0x5E, 0xF0, 0x8D, 0x9D, 0x7C, 0x5E, 0xDC, 0x3D, 0x3B, 0x61, 0xEC, 0x89, 0x83, 0x65, 0x27, 0x93, 0x24, 0x5D, 0xEE, 0x0A, 0xFF, 0x14, 0x59, 0xC3, 0x68, 0xEE, 0x1D, 0x8E, 0x73, 0xD9, 0xA2, 0xE0, 0x1E, 0xDE, 0x9B, 0x2C, 0x9E, 0xFB, 0x27, 0xB8, 0x50, 0x1C, 0xE2, 0x30, 0x1F, 0x9B, 0x46, 0x06, 0x58, 0x8E, 0xC0, 0xE7, 0xA0, 0xFB, 0xCF, 0x7F, 0x43, 0x67, 0x27, 0xAC, 0x3B, 0xBA, 0x19, 0x35, 0x49, 0x76, 0xAC, 0x9C, 0x83, 0x46, 0xA7, 0x3E, 0x54, 0x5B, 0xA2, 0x03, 0x9C, 0x13, 0x30, 0x1F, 0xBD, 0xC5, 0x8B, 0x0B, 0xED, 0xC3, 0x96, 0x82, 0x8B, 0x3C, 0x5A, 0x71, 0x4F, 0x50, 0x62, 0x3F, 0x9D, 0x98, 0x00, 0x6E, 0x35, 0x5F, 0x4C, 0x44, 0x82, 0x8B, 0x4E, 0xBB, 0x42, 0x1F, 0xA0, 0xCD, 0xDD, 0x6A, 0x78, 0x1E, 0x64, 0x5B, 0x91, 0x0A, 0xB7, 0xC0, 0x1B, 0xD5, 0x5E, 0xC8, 0x6A, 0xB8, 0x0B, 0x0A, 0x47, 0x1E, 0xC2, 0xCF, 0x42, 0x1F, 0xA3, 0x2D, 0xF0, 0x33, 0x8F, 0xFD, 0xD8, 0x0B, 0x78, 0x8E, 0xDD, 0x11, 0xBC, 0x11, 0xDA, 0x69, 0xF6, 0xEC, 0xFF, 0xD9, 0x3F, 0xA7, 0x93, 0x81, 0x3F, 0x2C, 0xD5, 0x35, 0x1D, 0xCC, 0x64, 0xDE, 0x94, 0x6D, 0x85, 0xF6, 0xD1, 0x2F, 0x95, 0x79, 0xF0, 0x0C, 0xEA, 0x15, 0xB0, 0x0C, 0x99, 0x42, 0x12, 0x21, 0x61, 0xA8, 0x2D, 0x2E, 0x77, 0x3F, 0x8F, 0x51, 0xE8, 0x48, 0x3B, 0x1C, 0x0F, 0x84, 0x13, 0xCC, 0x4E, 0xE2, 0x2D, 0x50, 0xEF, 0xE9, 0xCF, 0x3C, 0x37, 0xF5, 0xEC, 0xCE, 0x24, 0x60, 0x98, 0x22, 0xB0, 0x34, 0x1C, 0xB4, 0x91, 0xAE, 0x50, 0x4C, 0x81, 0xFC, 0x44, 0xAD, 0xDC, 0x4F, 0x70, 0x8C, 0x60, 0xE4, 0xDE, 0x6D, 0x88, 0x82, 0x2E, 0x77, 0x2F, 0xC7, 0x0C, 0x71, 0x2B, 0x3B, 0x19, 0x3E, 0x03, 0x49, 0x33, 0x7B, 0x80, 0x23, 0xB0, 0xDF, 0xA9, 0xDD, 0xDC, 0x29, 0xB9, 0xF3, 0xDB, 0xCF, 0xF0, 0xC6, 0x64, 0x76, 0x95, 0x04, 0x02, 0x96, 0xE9, 0x73, 0x65, 0xEB, 0x40, 0x91, 0x32, 0x86, 0x93, 0x01, 0x55, 0x49, 0xE1, 0xBD, 0xB3, 0xE1, 0x3F, 0x82, 0x2E, 0x8F, 0x11, 0xE8, 0x59, 0xD2, 0xD3, 0xEE, 0x24, 0xF6, 0x02, 0xDD, 0x61, 0x3E, 0x12, 0x3F, 0x00, 0x97, 0x9F, 0x78, 0xCC, 0xC1, 0x2B, 0x26, 0xB7, 0xFE, 0xE1, 0x46, 0x15, 0xFD, 0x2B, 0x82, 0x79, 0x48, 0xEE, 0x58, 0xE9, 0x2B, 0xA0, 0x3D, 0xE3, 0x45, 0xDA, 0x09, 0xF0, 0x87, 0xFA, 0x40, 0xF0, 0x01, 0x98, 0x94, 0xBC, 0x75, 0x2F, 0x46, 0xD5, 0xF4, 0x7A, 0xBB, 0xF3, 0xD8, 0x35, 0x6C, 0x9E, 0xB9, 0x13, 0x1E, 0x02, 0x3F, 0x3D, 0x9E, 0x9C, 0xF6, 0xAD, 0x65, 0x76, 0x4B, 0x3C, 0xE7, 0x75, 0xDD, 0xD4, 0x02, 0x77, 0xEE, 0xEF, 0xB2, 0x46, 0xE9, 0x28, 0xC0, 0xA8, 0x60, 0x6B, 0x2A, 0x0D, 0xC6, 0x66, 0x2D, 0xD9, 0x33, 0x05, 0x9E, 0xA5, 0xEC, 0x70, 0xFB, 0x8B, 0x1E, 0xE4, 0x53, 0x76, 0x1D, 0xD8, 0x45, 0x6C, 0xD0, 0xFC, 0x20, 0x7E, 0x08, 0x99, 0x7B, 0x7C, 0x42, 0x5A, 0x4B, 0xCF, 0x94, 0xE6, 0x5A, 0x0E, 0xBF, 0xDD, 0x23, 0xFF, 0x1E, 0x37, 0xA7, 0x7E, 0xB9, 0x18, 0xE1, 0xF5, 0x95, 0x0B, 0x52, 0xFC, 0xC0, 0x49, 0xF9, 0x93, 0x82, 0x1C, 0xA0, 0x9E, 0xF4, 0x41, 0x37, 0x10, 0xF5, 0x16, 0x64, 0xD9, 0xD5, 0x63, 0x37, 0xF0, 0x26, 0x73, 0x1D, 0xCE, 0x20, 0x3B, 0xFA, 0x17, 0xA7, 0x3D, 0x1B, 0x88, 0x68, 0x3A, 0xCA, 0x61, 0x7A, 0xB7, 0xE6, 0xE7, 0x73, 0x77, 0xB5, 0x0D, 0x8A, 0x7E, 0xF0, 0x0E, 0xD4, 0xD9, 0x25, 0x9F, 0x02, 0x4E, 0x96, 0x38, 0x06, 0x16, 0x40, 0x54, 0x66, 0xBC, 0x9B, 0x39, 0x6A, 0x27, 0x02, 0xED, 0xBA, 0xB1, 0x67, 0x04, 0xC7, 0xFC, 0x3A, 0x5E, 0x82, 0x64, 0xF4, 0x6C, 0x64, 0xBF, 0x24, 0xFC, 0x6B, 0xF0, 0xE1, 0xEF, 0x4A, 0x6E, 0xCE, 0xFB, 0x4A, 0x37, 0xA4, 0x6E, 0x16, 0x4B, 0xA9, 0x2E, 0xCE, 0x82, 0x54, 0x39, 0x39, 0xC8, 0x9B, 0x1E, 0x18, 0x49, 0x9A, 0x01, 0x7F, 0x5D, 0x8F, 0x12, 0x7F, 0xC1, 0x8D, 0xB6, 0x5F, 0x48, 0x47, 0xE0, 0xBB, 0xD9, 0x65, 0x72, 0x03, 0x70, 0xA1, 0xBB, 0x9B, 0x79, 0xCA, 0x7B, 0xD2, 0x30, 0x91, 0xBE, 0x06, 0x16, 0xE7, 0x36, 0x51, 0xAE, 0x50, 0x97, 0x68, 0x3D, 0xB9, 0x07, 0x3A, 0x96, 0xBA, 0x91, 0x18, 0x84, 0x2D, 0xF6, 0x98, 0x11, 0x65, 0xF0, 0x21, 0xB7, 0x85, 0x44, 0x1D, 0x74, 0xC4, 0xF6, 0x28, 0x71, 0x1D, 0xFC, 0x69, 0x76, 0x90, 0x78, 0x01, 0xE6, 0x76, 0x79, 0x50, 0xDF, 0xE9, 0x29, 0xF5, 0x63, 0xC8, 0x77, 0xD4, 0x37, 0x7D, 0x0E, 0x39, 0x8A, 0x6A, 0x11, 0xCE, 0x22, 0x22, 0xC9, 0xB2, 0x94, 0x19, 0x84, 0x2D, 0xB1, 0x23, 0x68, 0x11, 0x61, 0x8A, 0xDD, 0x71, 0xBD, 0x46, 0xEC, 0x42, 0xE4, 0xB6, 0x38, 0xC1, 0xC0, 0x43, 0xCD, 0x1C, 0x88, 0x2C, 0x68, 0x6B, 0xF7, 0x3C, 0xD2, 0x4C, 0x76, 0xB7, 0xF6, 0x3E, 0x11, 0x20, 0x5D, 0x9F, 0x33, 0x9A, 0x18, 0x29, 0xBA, 0x2F, 0x58, 0x80, 0xB7, 0x08, 0xAE, 0x26, 0x9D, 0xC5, 0x45, 0xFC, 0xE6, 0xDD, 0x03, 0x78, 0x36, 0x75, 0xCE, 0x75, 0x21, 0x31, 0x0A, 0xC3, 0x6C, 0x77, 0x12, 0x01, 0xF0, 0x23, 0xB3, 0x25, 0x44, 0x12, 0xD4, 0xD7, 0x79, 0x85, 0x10, 0x67, 0x9A, 0x55, 0x3B, 0xE1, 0xB7, 0xB5, 0xBA, 0xAC, 0xDB, 0xF8, 0x5C, 0x55, 0x0B, 0x23, 0xC1, 0xDE, 0xC9, 0xAD, 0x13, 0x83, 0xB1, 0xDB, 0x92, 0x91, 0xBB, 0x1D, 0x71, 0x23, 0xB6, 0xCA, 0xA5, 0x0D, 0x3F, 0x49, 0x04, 0xDA, 0x7A, 0x12, 0xCB, 0x90, 0x0C, 0xB3, 0xF5, 0x44, 0x38, 0x3C, 0xA4, 0xED, 0x10, 0xB1, 0xAA, 0x28, 0xA0, 0x2A, 0x11, 0xB7, 0xCD, 0xBB, 0x9E, 0xE9, 0x8A, 0x69, 0xB2, 0x27, 0x33, 0x33, 0xB0, 0x55, 0xDA, 0x90, 0xF8, 0x1B, 0xD8, 0x3A, 0x65, 0xEA, 0xAE, 0x25, 0x58, 0x93, 0x18, 0x75, 0x49, 0xC3, 0xD5, 0xD4, 0x0A, 0xDB, 0x15, 0x84, 0x09, 0xBA, 0xD6, 0x6C, 0x37, 0x11, 0x02, 0xDB, 0xB4, 0xAD, 0xC6, 0x2B, 0xEA, 0x94, 0x95, 0xF3, 0xB0, 0xB6, 0x4A, 0x53, 0x5D, 0x2A, 0xE6, 0x54, 0xD4, 0x41, 0xAF, 0x40, 0xAF, 0xE7, 0x2E, 0x8E, 0x5B, 0x87, 0x3E, 0xD5, 0xDD, 0xDF, 0x71, 0x0F, 0xDB, 0x25, 0xFF, 0xEE, 0x62, 0x80, 0x87, 0x31, 0xFE, 0xB6, 0x0E, 0xC4, 0x14, 0x6C, 0x98, 0x59, 0x34, 0x11, 0x0C, 0x6F, 0x6D, 0x53, 0xE2, 0x43, 0x3A, 0x0C, 0x2B, 0xE2, 0xB0, 0x35, 0x4D, 0x36, 0xBA, 0x69, 0xE8, 0x91, 0xEA, 0xC9, 0xD4, 0x4A, 0x34, 0xB2, 0xC4, 0x39, 0x56, 0x8F, 0xF2, 0xF4, 0xB1, 0x3B, 0xB6, 0x62, 0xC3, 0xD4, 0xCF, 0x57, 0xDE, 0xC6, 0x97, 0xB0, 0x5B, 0x6C, 0x2D, 0x88, 0x21, 0x58, 0xB7, 0x19, 0x40, 0x04, 0xC1, 0x64, 0x8B, 0x13, 0x1E, 0xD4, 0xDB, 0x53, 0x11, 0x89, 0x3E, 0xE8, 0x9A, 0xA4, 0xDD, 0x86, 0x4A, 0x9B, 0x3A, 0xC9, 0xB7, 0xA8, 0x6D, 0xD5, 0x97, 0x58, 0x2B, 0x74, 0x6D, 0x61, 0xF4, 0xF6, 0x57, 0x68, 0xBF, 0x2E, 0x66, 0xE5, 0x63, 0x7C, 0x82, 0xD0, 0xCB, 0xD6, 0x09, 0xFF, 0x88, 0x73, 0xCD, 0x14, 0xC4, 0x6E, 0xB8, 0xB5, 0xF1, 0x8A, 0xE2, 0x74, 0x62, 0x69, 0x19, 0x24, 0xBD, 0x98, 0x74, 0x5E, 0x7B, 0x53, 0xEC, 0x90, 0x72, 0x98, 0x5E, 0x2D, 0xF8, 0x9C, 0x96, 0x10, 0xBF, 0x87, 0x0D, 0xE4, 0x76, 0xEE, 0xD8, 0xC3, 0x70, 0x81, 0xD8, 0x95, 0x34, 0xF5, 0x15, 0x38, 0x63, 0x73, 0x8E, 0xDA, 0x0A, 0xD4, 0x99, 0x99, 0x51, 0x93, 0x81, 0xBC, 0xA6, 0xA5, 0x32, 0x80, 0x7B, 0xB9, 0x74, 0x92, 0x44, 0x0F, 0x58, 0xAB, 0x8F, 0x8A, 0x0C, 0x40, 0x1F, 0xFC, 0x1E, 0xFB, 0x1E, 0x6C, 0x8E, 0x15, 0xF2, 0x53, 0xA0, 0xFD, 0x3B, 0xCE, 0x30, 0xA3, 0xA1, 0xAE, 0x95, 0x99, 0x54, 0x35, 0xB4, 0xC4, 0x46, 0x4E, 0x0D, 0x07, 0x55, 0xA6, 0x27, 0xC9, 0x6E, 0x70, 0x63, 0xDD, 0x4B, 0xE9, 0x04, 0xE2, 0x52, 0x91, 0x46, 0xD4, 0x44, 0x2E, 0x54, 0x35, 0x09, 0x8A, 0x89, 0xBB, 0x98, 0x84, 0x9D, 0x47, 0xCC, 0x38, 0x1C, 0xC1, 0x1C, 0xC3, 0x4D, 0x76, 0x8C, 0xA7, 0x85, 0xD8, 0x90, 0x95, 0x87, 0xA8, 0x3D, 0xF0, 0x3B, 0x9B, 0x10, 0xF2, 0x08, 0x04, 0x99, 0x4A, 0x49, 0x08, 0xBC, 0x55, 0x5B, 0x26, 0x59, 0x28, 0xB1, 0x2B, 0x58, 0x27, 0x3C, 0x2F, 0xBA, 0xA5, 0x34, 0x64, 0xAB, 0x85, 0xA6, 0xD8, 0x70, 0xBE, 0x13, 0x6B, 0x7E, 0x48, 0xCA, 0xCC, 0x60, 0x56, 0x6F, 0x9F, 0x4A, 0x8F, 0x24, 0x4F, 0xAE, 0xB4, 0xA1, 0x66, 0xA2, 0x47, 0x6D, 0x36, 0x93, 0xE9, 0xB0, 0xBB, 0xA9, 0x88, 0xDC, 0x07, 0xD9, 0xD5, 0x38, 0x8A, 0x17, 0xA6, 0x67, 0xE7, 0xC7, 0x08, 0x5D, 0xD4, 0xFB, 0x14, 0x9B, 0xD9, 0x51, 0x0A, 0x17, 0xA4, 0x91, 0xC9, 0x90, 0xFA, 0xC6, 0x78, 0xD3, 0x07, 0x44, 0xA9, 0xDB, 0x46, 0x53, 0x4A, 0x7E, 0xC2, 0x0A, 0x15, 0xF9, 0x0A, 0x3F, 0x64, 0xB3, 0x92, 0x14, 0xC0, 0x57, 0x4D, 0xF3, 0xC9, 0x20, 0xC8, 0xBF, 0xCA, 0x47, 0x24, 0xCE, 0x4D, 0xCC, 0xCB, 0x17, 0x80, 0xD9, 0x35, 0xB2, 0x7A, 0x3E, 0x95, 0x31, 0x14, 0xB6, 0x64, 0x2C, 0xD4, 0x77, 0xA3, 0x70, 0x7A, 0x9C, 0x1C, 0x0F, 0xB8, 0x4A, 0xAD, 0x17, 0x0D, 0x5D, 0xFE, 0x85, 0xEC, 0x26, 0x0D, 0x6C, 0x86, 0x90, 0xA9, 0x48, 0xA4, 0xA9, 0x96, 0xDC, 0x06, 0x45, 0x55, 0xFC, 0x11, 0xED, 0xAA, 0xF0, 0xCD, 0x0D, 0x14, 0xCC, 0x28, 0xD9, 0x26, 0x1B, 0xC1, 0xBC, 0xCB, 0x0F, 0x81, 0x2E, 0xD1, 0x92, 0xEC, 0x25, 0x91, 0xBE, 0x54, 0x49, 0xBA, 0xAF, 0xFF, 0x5B, 0xF2, 0x9B, 0xF4, 0xDB, 0xF2, 0x14, 0x92, 0xA4, 0x87, 0x5B, 0xB7, 0x90, 0xDB, 0xD1, 0xC9, 0xA6, 0xF1, 0xA4, 0x17, 0x44, 0x57, 0x4E, 0x14, 0x3E, 0x6D, 0xFC, 0xAA, 0x7F, 0xC9, 0xDE, 0xA9, 0xF5, 0x96, 0xC6, 0x31, 0xD9, 0xE5, 0x13, 0xA1, 0x00, 0x7A, 0x58, 0xC1, 0xC9, 0x88, 0x7F, 0x94, 0x63, 0x56, 0x96, 0xBF, 0x8C, 0xD4, 0x2B, 0xB3, 0x96, 0x5B, 0x90, 0x5B, 0x98, 0x3E, 0x6B, 0x31, 0xE9, 0x8C, 0xD6, 0x98, 0x06, 0x92, 0x8E, 0x50, 0x59, 0xC5, 0x4A, 0xE1, 0xE1, 0xAE, 0x75, 0xFA, 0xD3, 0x6C, 0x5C, 0xCB, 0x7D, 0xB1, 0x90, 0xC9, 0xAF, 0x1B, 0x0B, 0xE4, 0xD3, 0xA3, 0xCA, 0xEA, 0x0F, 0xDE, 0xA3, 0xC6, 0xE5, 0xF6, 0xF9, 0xDD, 0x23, 0x43, 0x34, 0xCA, 0xE5, 0x93, 0x49, 0x53, 0x76, 0xB7, 0x35, 0x4B, 0x2E, 0xC0, 0xD6, 0x9A, 0xEE, 0x26, 0x0D, 0xA0, 0x8B, 0x25, 0x05, 0x19, 0x64, 0x62, 0x67, 0x36, 0xA9, 0xF9, 0x90, 0xD4, 0x2D, 0xE2, 0x2B, 0x65, 0x29, 0xA7, 0xC1, 0x65, 0xB2, 0x2D, 0x69, 0x4C, 0xE4, 0x21, 0x31, 0xC5, 0x8D, 0x08, 0x48, 0x12, 0xB4, 0xF1, 0x90, 0xE5, 0x9F, 0xF9, 0xA3, 0x01, 0x2F, 0xEB, 0x36, 0x3A, 0x06, 0x48, 0x30, 0xF5, 0xA1, 0xDA, 0x01, 0xB4, 0x24, 0x42, 0xFB, 0x98, 0xFB, 0x3C, 0xB3, 0x58, 0x7D, 0x89, 0x17, 0x2D, 0x88, 0x53, 0x94, 0x02, 0x86, 0xDC, 0x66, 0x69, 0x17, 0x68, 0x7F, 0xF0, 0x9C, 0xD8, 0x08, 0xEC, 0xF5, 0x8F, 0x11, 0x24, 0x81, 0xEF, 0x97, 0x8F, 0x65, 0x1A, 0x41, 0xA5, 0xF5, 0x26, 0xDA, 0x04, 0xB4, 0x36, 0x1D, 0x4D, 0xA5, 0x01, 0x5F, 0x8B, 0x8E, 0xA7, 0xB7, 0xE1, 0x50, 0x86, 0x4E, 0xB5, 0x05, 0x47, 0xD8, 0x62, 0x79, 0x0C, 0xF6, 0x8E, 0x53, 0x2D, 0x79, 0x82, 0xBD, 0x3F, 0xF0, 0x44, 0x84, 0x63, 0xF3, 0xFC, 0x7E, 0x0B, 0x26, 0xA3, 0x53, 0x9C, 0xDF, 0x32, 0xE1, 0xB0, 0xA3, 0xB5, 0x01, 0xF5, 0x08, 0x7C, 0x63, 0x72, 0x9E, 0xF2, 0x00, 0xF7, 0x17, 0xC4, 0x68, 0xFE, 0x08, 0x93, 0xB5, 0x27, 0x95, 0x8C, 0x20, 0x86, 0xFF, 0x57, 0xE6, 0xC2, 0xFF, 0x99, 0xF6, 0x5E, 0xFC, 0x84, 0xD1, 0x1F, 0xD8, 0x24, 0x3C, 0x4B, 0xDD, 0xF5, 0x0F, 0x65, 0xA5, 0x04, 0xBB, 0x9C, 0x64, 0x0C, 0x91, 0xC7, 0xD6, 0x4E, 0x54, 0x37, 0x94, 0x6E, 0x72, 0x94, 0xB2, 0x00, 0xF5, 0xF9, 0xD6, 0x9A, 0x29, 0x2A, 0xF7, 0x74, 0x56, 0xF1, 0x55, 0x31, 0x9F, 0xB9, 0x2E, 0x3D, 0x23, 0x6D, 0x4E, 0x53, 0x8B, 0xBD, 0xC5, 0xD3, 0xC3, 0xD3, 0x85, 0xD6, 0x02, 0xFE, 0x96, 0x8B, 0xAC, 0x13, 0xFD, 0xDC, 0xB9, 0x96, 0x19, 0x86, 0x45, 0x59, 0x2F, 0xA2, 0xDA, 0xE1, 0x59, 0x26, 0x77, 0x28, 0x13, 0xB0, 0x29, 0x6F, 0x99, 0xDA, 0x3F, 0xEB, 0xB5, 0x26, 0x49, 0xE1, 0x9D, 0x61, 0x4B, 0xDB, 0x4B, 0x69, 0xCD, 0x9B, 0x94, 0x53, 0xE2, 0x99, 0xCA, 0x94, 0xFD, 0xE3, 0x04, 0x3F, 0xA5, 0xA2, 0xCD, 0xB1, 0xFC, 0x5F, 0x82, 0x54, 0xA7, 0x76, 0xFA, 0x12, 0xFE, 0xCF, 0xEA, 0x02, 0x95, 0x0B, 0xEB, 0xFE, 0xBF, 0x35, 0x13, 0xEC, 0xCE, 0x1D, 0xA9, 0x7A, 0x5D, 0xB2, 0x42, 0x7D, 0x47, 0x5E, 0x5F, 0x60, 0x49, 0x99, 0x4B, 0x44, 0x7A, 0xF7, 0xE4, 0xAB, 0xA2, 0x43, 0x19, 0xC7, 0xC3, 0x0C, 0x05, 0x62, 0xF5, 0xB8, 0xCD, 0xE3, 0xF9, 0x2A, 0x89, 0xAD, 0x93, 0x39, 0xCD, 0x90, 0x3D, 0x56, 0x5B, 0xA8, 0x44, 0xC4, 0xCE, 0x24, 0x8E, 0xFC, 0x0D, 0x9E, 0xD3, 0x8B, 0x54, 0x6D, 0x35, 0x17, 0xD5, 0x9D, 0xF2, 0xD8, 0x0A, 0x3D, 0xD5, 0x22, 0x99, 0x52, 0x4C, 0x24, 0x1F, 0x11, 0x76, 0xE4, 0xF6, 0xED, 0xCB, 0x65, 0xFF, 0xEA, 0x6E, 0xF9, 0x46, 0xF3, 0x3D, 0xE5, 0x3B, 0x97, 0x95, 0xD2, 0x7B, 0xE9, 0x95, 0x56, 0x13, 0xA8, 0x9D, 0x48, 0xB9, 0x89, 0x0F, 0xF9, 0x1C, 0xBC, 0xAF, 0xEF, 0x57, 0x36, 0xB4, 0xF4, 0x2B, 0x4B, 0x65, 0x5F, 0x1A, 0xC6, 0x13, 0xAF, 0x24, 0x8B, 0xAA, 0xE6, 0x26, 0x39, 0x0A, 0x8F, 0x14, 0x8F, 0x09, 0x2D, 0x60, 0x5B, 0xB3, 0x75, 0x9B, 0xF6, 0xF2, 0xC7, 0x2A, 0x6F, 0x2C, 0x73, 0xA3, 0xD7, 0x32, 0xF1, 0x96, 0xEF, 0xA9, 0xD5, 0xE8, 0x9C, 0xFF, 0xA7, 0xAE, 0x82, 0x5F, 0xB3, 0xC6, 0xE5, 0xFF, 0x4C, 0xBC, 0x2B, 0x13, 0xE9, 0x47, 0x24, 0x0F, 0xC1, 0x96, 0x64, 0x94, 0xA6, 0xDC, 0x4A, 0x58, 0xA9, 0x51, 0xA5, 0xED, 0x0E, 0xF1, 0x55, 0xD4, 0x71, 0x6A, 0x7D, 0x40, 0x49, 0x11, 0xF7, 0x84, 0x53, 0x84, 0x20, 0x8A, 0xD7, 0x62, 0x65, 0xCF, 0x64, 0x03, 0xB3, 0x4C, 0x9C, 0xE8, 0x68, 0xC0, 0x33, 0x63, 0x6E, 0xDE, 0x09, 0x4E, 0x8B, 0x74, 0x4E, 0xCE, 0x08, 0xEE, 0x13, 0x74, 0xB5, 0xEE, 0x2D, 0x2F, 0x35, 0xEE, 0x9B, 0x66, 0x3E, 0xB0, 0x77, 0x2F, 0xAA, 0xD8, 0x0B, 0xDC, 0xF4, 0xF1, 0x95, 0x1C, 0x06, 0x87, 0x2F, 0xFD, 0xCA, 0xFE, 0x06, 0x6E, 0x5A, 0x16, 0x33, 0xDB, 0x81, 0x52, 0xE3, 0x2F, 0xF4, 0x62, 0x40, 0x91, 0x61, 0x9E, 0x7B, 0x1B, 0x3D, 0x28, 0x6D, 0xCA, 0xEA, 0x40, 0x53, 0x50, 0x33, 0xED, 0x55, 0xD4, 0x29, 0x6E, 0xAA, 0x7A, 0x0F, 0xCA, 0x0D, 0x0E, 0x95, 0xBF, 0x44, 0xEE, 0x6F, 0x3C, 0x29, 0x31, 0x82, 0x07, 0x97, 0x5E, 0x60, 0x6B, 0xA1, 0xB5, 0x96, 0x49, 0xCC, 0x2C, 0x70, 0xA3, 0x71, 0x2B, 0xF5, 0x0B, 0xB8, 0xAF, 0xAD, 0xCB, 0xB5, 0xE3, 0xBF, 0x91, 0xD0, 0x99, 0xF7, 0x18, 0x1D, 0x52, 0x92, 0x5E, 0x4A, 0xCB, 0x62, 0x1F, 0xA8, 0xE2, 0xA8, 0xAB, 0xC1, 0xED, 0x72, 0x37, 0xE2, 0xBA, 0xCF, 0x68, 0x71, 0x3F, 0x76, 0x77, 0xE9, 0x2B, 0x36, 0x09, 0xEE, 0xB7, 0x8C, 0xA2, 0xDF, 0x80, 0xF7, 0x8C, 0x73, 0xA9, 0x3B, 0xE0, 0x44, 0x8D, 0x44, 0x8F, 0xC8, 0x8D, 0x44, 0x9E, 0x99, 0xEE, 0x92, 0xFB, 0xD0, 0xE3, 0xF4, 0x7D, 0xE2, 0xB1, 0xB1, 0x94, 0xF2, 0x8F, 0xA0, 0x3E, 0x78, 0x93, 0xAC, 0x8E, 0xF9, 0xB1, 0x71, 0xBC, 0x38, 0x94, 0x7C, 0xB9, 0xD4, 0x97, 0x75, 0x43, 0x9D, 0x2D, 0xDD, 0xE8, 0x2B, 0xD0, 0x2E, 0x63, 0x3D, 0x75, 0x06, 0x34, 0xD0, 0x7C, 0xC8, 0x29, 0xD4, 0xAD, 0x16, 0x5E, 0xCF, 0x28, 0xD0, 0x74, 0xF2, 0x7E, 0x68, 0xAE, 0xAA, 0xE6, 0xC7, 0xFC, 0x54, 0xD6, 0xCB, 0xF2, 0x83, 0xBE, 0xC8, 0x22, 0x44, 0x77, 0x36, 0x24, 0x8A, 0x7E, 0xF3, 0x37, 0x2E, 0x69, 0xE4, 0xFF, 0xC0, 0x3A, 0x2D, 0x3E, 0xD0, 0x4D, 0xD0, 0x29, 0x63, 0x90, 0x3A, 0x02, 0xCE, 0x57, 0xFD, 0xCB, 0x59, 0x59, 0x30, 0x5C, 0x70, 0x34, 0x63, 0xA5, 0xFE, 0x2C, 0x57, 0xA9, 0xB1, 0xCD, 0x1A, 0x11, 0xBD, 0x43, 0x39, 0x23, 0x3D, 0x33, 0xC8, 0x4A, 0xFA, 0x45, 0xE1, 0xB2, 0xE1, 0x84, 0x88, 0x27, 0x7C, 0xBF, 0x44, 0xC0, 0x2F, 0x25, 0x82, 0x2C, 0xCA, 0x68, 0x19, 0xEC, 0x69, 0xEC, 0x46, 0x55, 0x82, 0x33, 0x95, 0x63, 0x73, 0x3C, 0xCA, 0x07, 0x04, 0xF7, 0x74, 0x8F, 0x4A, 0x30, 0xDE, 0x47, 0x75, 0x4F, 0x81, 0x65, 0x74, 0xBF, 0x82, 0xCA, 0x66, 0x03, 0x23, 0xA4, 0xA4, 0xA6, 0x6E, 0x7D, 0x9D, 0xC8, 0x57, 0x32, 0xB0, 0xF8, 0x13, 0x5F, 0x4D, 0x6A, 0x2D, 0x78, 0x34, 0x04, 0xEB, 0x8D, 0x9D, 0xA8, 0x4C, 0x70, 0xA6, 0x3C, 0x39, 0x3B, 0xBA, 0xDE, 0x91, 0x9F, 0xAD, 0xDB, 0x5A, 0x2D, 0x02, 0x16, 0xAA, 0x89, 0xB2, 0x45, 0x31, 0x65, 0x0A, 0xEF, 0xFC, 0xF5, 0xBB, 0x07, 0xA5, 0x4B, 0x32, 0x62, 0xD7, 0x59, 0x8A, 0x5C, 0xE5, 0xA3, 0x17, 0x2F, 0xE1, 0xEB, 0x29, 0xB1, 0x45, 0x30, 0x9D, 0x06, 0xBF, 0x32, 0xDE, 0x49, 0x89, 0xC0, 0x05, 0xA2, 0x98, 0xEA, 0xA5, 0x89, 0x1F, 0xB1, 0xE9, 0x65, 0xFB, 0x93, 0xA8, 0x64, 0x97, 0x82, 0xD6, 0x94, 0x95, 0x07, 0xBE, 0xE4, 0x80, 0xA9, 0xFE, 0xDB, 0x4F, 0xEB, 0xC8, 0x34, 0xCE, 0xEA, 0x3A, 0xE5, 0x31, 0xCE, 0xC9, 0x85, 0x3F, 0x45, 0xDF, 0xB9, 0xFF, 0x99, 0xEB, 0xF8, 0xAF, 0x79, 0x42, 0xA3, 0x3A, 0x66, 0x31, 0xEF, 0xB2, 0x30, 0xA9, 0x2A, 0x94, 0xB3, 0x00, 0x0B, 0x2B, 0x4D, 0xE3, 0x1A, 0x26, 0x6F, 0xC8, 0xBF, 0xCF, 0x8D, 0x3F, 0xF0, 0x2A, 0xBB, 0x8D, 0xFB, 0x79, 0x87, 0xB3, 0xF6, 0x28, 0x8F, 0xF0, 0xBE, 0xA7, 0x0C, 0xE0, 0x5D, 0x5B, 0xF8, 0x49, 0x94, 0xC9, 0xFB, 0x6C, 0xEE, 0xC3, 0xAF, 0x02, 0x86, 0x1B, 0xF9, 0x31, 0x43, 0x80, 0xB1, 0x82, 0xAE, 0xCA, 0x43, 0xF0, 0x0D, 0xCC, 0xBC, 0x64, 0x0E, 0x7C, 0x2B, 0x69, 0x30, 0x4F, 0x07, 0xC7, 0x1F, 0xA8, 0xC9, 0xFA, 0x0F, 0x8E, 0xD8, 0xEE, 0xAA, 0xDD, 0x0B, 0xBB, 0x7B, 0x77, 0x2A, 0xFE, 0x41, 0xC0, 0xC2, 0x0F, 0xA2, 0x0D, 0xA0, 0x87, 0xF9, 0x0C, 0x7E, 0x2C, 0x20, 0x34, 0x1A, 0x4A, 0x9F, 0x05, 0x3C, 0xD8, 0x95, 0x15, 0x33, 0xE9, 0x3C, 0x64, 0x4A, 0xB1, 0x23, 0x95, 0x97, 0xB4, 0x34, 0xB7, 0x85, 0xDC, 0x7B, 0xE0, 0x78, 0x96, 0x1D, 0x61, 0xB8, 0xDD, 0x28, 0xBD, 0x19, 0x7B, 0xE4, 0x3D, 0x56, 0x21, 0x45, 0x6D, 0x16, 0xCA, 0x85, 0xFF, 0x20, 0xB5, 0xD9, 0x23, 0xBE, 0x0B, 0x38, 0xD6, 0xF0, 0x3E, 0x5D, 0x08, 0xEC, 0xE3, 0x7B, 0x94, 0x1B, 0x49, 0x56, 0xC1, 0xCB, 0x8A, 0xB6, 0x8A, 0x96, 0x24, 0x38, 0xE7, 0x86, 0x08, 0x9C, 0xC3, 0x47, 0x67, 0x1E, 0xE7, 0x2F, 0xD8, 0x36, 0xA8, 0xF9, 0x45, 0xD1, 0xAB, 0xD7, 0x2A, 0x26, 0xE1, 0x67, 0x1D, 0xFF, 0x08, 0xDB, 0xE0, 0x87, 0x66, 0x15, 0xFC, 0xA9, 0x60, 0x9A, 0xE1, 0x45, 0x9A, 0x01, 0x62, 0xF9, 0x39, 0x65, 0x5E, 0xEA, 0x64, 0x78, 0x73, 0x61, 0xB7, 0x72, 0x75, 0xDC, 0x45, 0xFD, 0x5D, 0x19, 0x2F, 0xEC, 0x72, 0xE6, 0x76, 0xB1, 0xE7, 0x36, 0x0F, 0x0D, 0xCA, 0x66, 0xAE, 0x2A, 0x93, 0xD7, 0x52, 0xCD, 0x8E, 0x95, 0xC2, 0x24, 0x74, 0xA5, 0x19, 0x9F, 0x79, 0x05, 0xDE, 0x32, 0x3C, 0x4E, 0x27, 0x00, 0x11, 0x74, 0x4D, 0xD9, 0xC4, 0x1C, 0x4B, 0x70, 0x77, 0xE1, 0xFA, 0xCC, 0x5F, 0xB1, 0x09, 0xFA, 0xC0, 0xF4, 0xBA, 0x7D, 0x61, 0x19, 0xF7, 0x95, 0xC0, 0xD6, 0x78, 0x8D, 0xA1, 0xE4, 0xF8, 0x6A, 0x4C, 0x3E, 0x9F, 0xB5, 0x70, 0xBC, 0x2E, 0xB4, 0xC2, 0x2A, 0xCD, 0xC4, 0xCC, 0x69, 0x68, 0x85, 0xE1, 0x09, 0x3A, 0x14, 0xD8, 0x46, 0xCD, 0x2E, 0x9B, 0x58, 0x74, 0x0E, 0x34, 0x2C, 0x5C, 0x94, 0x7F, 0x36, 0x76, 0x5F, 0xCE, 0xC7, 0x9C, 0x25, 0xA1, 0x68, 0x46, 0xA0, 0x6E, 0x74, 0x40, 0xA2, 0xFA, 0xBC, 0x72, 0xC2, 0xAA, 0xCB, 0xB2, 0xE7, 0xC2, 0x07, 0x8E, 0xAD, 0xC2, 0xFF, 0xFF, 0x34, 0xAB, 0x67, 0x3A, 0x21, 0xCA, 0x68, 0x24, 0xBD, 0x1D, 0x58, 0x47, 0x94, 0x96, 0x36, 0x57, 0x36, 0xF1, 0x26, 0x16, 0x2E, 0x2C, 0x7D, 0x1D, 0x7B, 0x20, 0x27, 0xBB, 0xE0, 0x75, 0xE8, 0xBB, 0x8C, 0xD1, 0xD9, 0xF5, 0xFE, 0x26, 0xEA, 0x47, 0x9A, 0x02, 0xCF, 0x1C, 0xD9, 0x7B, 0x71, 0x97, 0xE3, 0x56, 0xE1, 0x1C, 0xA2, 0xC0, 0xEC, 0x09, 0xD3, 0x0E, 0xF5, 0x1A, 0xC5, 0xD0, 0xBE, 0xC0, 0x6A, 0x20, 0xB4, 0xED, 0x4C, 0xA2, 0x6D, 0xFC, 0xB5, 0xC6, 0xDC, 0xA4, 0xA9, 0x11, 0x5E, 0x55, 0xBC, 0xE4, 0xFC, 0x3D, 0x75, 0xC5, 0xEF, 0x92, 0x29, 0x5F, 0x6D, 0x9E, 0x6D, 0x4A, 0x96, 0x5B, 0x97, 0xAE, 0x24, 0x6D, 0x8B, 0xDD, 0x0A, 0xD9, 0x08, 0xCE, 0x3D, 0x93, 0x9D, 0x02, 0x92, 0x7B, 0xC6, 0xC0, 0x8A, 0xBF, 0x90, 0xB7, 0x04, 0x70, 0x6B, 0x3D, 0x93, 0x96, 0x91, 0xC8, 0x6D, 0xF8, 0x90, 0x76, 0xFD, 0xE0, 0x9D, 0xAA, 0xB9, 0x69, 0x0F, 0x03, 0x7F, 0x16, 0x0B, 0x39, 0x8B, 0x7C, 0x5D, 0x73, 0x8D, 0x39, 0xBD, 0xEE, 0xC6, 0xDA, 0x47, 0xDC, 0x2D, 0x76, 0x1B, 0xA4, 0x65, 0xDC, 0xDB, 0x26, 0x53, 0x05, 0x9B, 0x79, 0x0E, 0x0B, 0x8E, 0xF0, 0xC7, 0xF0, 0xFC, 0xB9, 0xAF, 0x5B, 0xAA, 0xE1, 0x79, 0x09, 0x65, 0xF5, 0x6F, 0x20, 0xE4, 0x00, 0x5E, 0x69, 0x05, 0xD6, 0xEE, 0x2E, 0x2C, 0xBA, 0x08, 0x26, 0x6E, 0x1A, 0xAE, 0x97, 0x83, 0xFE, 0x6E, 0x35, 0xDA, 0xDD, 0xC0, 0x55, 0xBB, 0x79, 0xD2, 0xF5, 0xC0, 0x04, 0xE3, 0x3E, 0xC1, 0x14, 0x5E, 0xE6, 0x82, 0x60, 0xE6, 0x0E, 0xEF, 0x10, 0xF7, 0x5E, 0xF3, 0x2C, 0xF2, 0x57, 0x3C, 0x59, 0xE7, 0x45, 0xE8, 0xC3, 0x81, 0x0A, 0x0B, 0xDC, 0x75, 0x17, 0x5A, 0x64, 0x8E, 0x8D, 0xF6, 0xD9, 0x9A, 0xF3, 0x00, 0x79, 0xE4, 0xFA, 0x38, 0xBD, 0x1F, 0xDE, 0x6E, 0xAB, 0x95, 0xBC, 0x04, 0xDD, 0x8D, 0x39, 0xEC, 0x35, 0x60, 0xD8, 0x02, 0x2B, 0xA6, 0x96, 0x07, 0x72, 0x7E, 0x35, 0x95, 0x0B, 0xFD, 0xE2, 0x92, 0x6A, 0x13, 0x58, 0x41, 0xF8, 0x8E, 0xF2, 0x55, 0x4C, 0xC7, 0x2E, 0xB0, 0x30, 0x95, 0xBA, 0xE7, 0xB3, 0x2F, 0x67, 0x3C, 0xB1, 0xC5, 0xE5, 0x4C, 0xFA, 0x5A, 0x54, 0x64, 0x3B, 0x4A, 0xA2, 0x87, 0x76, 0x18, 0xFB, 0xB3, 0x79, 0x40, 0xD0, 0x02, 0x3B, 0x86, 0xE2, 0xA1, 0x5C, 0x7E, 0xE3, 0x6B, 0xC5, 0xB4, 0xF8, 0xB5, 0x35, 0x27, 0x64, 0x46, 0xE1, 0x6E, 0x65, 0x62, 0xF1, 0xE1, 0x5D, 0x19, 0x05, 0xE5, 0x82, 0x68, 0x9F, 0x3D, 0xD9, 0xFB, 0xE9, 0xEB, 0x2B, 0xF5, 0x9A, 0x3F, 0xF8, 0x1D, 0x9B, 0x33, 0x92, 0x10, 0x38, 0xC9, 0xF8, 0x10, 0x9B, 0x00, 0x54, 0x2E, 0xD8, 0xCF, 0x04, 0xF3, 0x38, 0x9C, 0x59, 0x4D, 0x16, 0x19, 0xA3, 0x62, 0x2F, 0xD5, 0xDC, 0x4E, 0x4F, 0xD9, 0x3F, 0xB2, 0xCC, 0x5C, 0x49, 0xEF, 0x14, 0x14, 0x38, 0x49, 0xCB, 0x7C, 0x4C, 0xB2, 0x5E, 0x09, 0xBD, 0x5C, 0xF7, 0x6B, 0xB6, 0xD2, 0x96, 0xB6, 0xB1, 0x92, 0x29, 0x48, 0xAF, 0xF1, 0x2D, 0x76, 0x3D, 0xF0, 0x77, 0xC1, 0x59, 0xC6, 0x8B, 0x17, 0x9E, 0x76, 0xBE, 0x71, 0x5F, 0x5E, 0x60, 0xEC, 0xFE, 0x1A, 0xDB, 0xEC, 0xB7, 0xFB, 0x7E, 0x95, 0x0E, 0xEA, 0xA6, 0xEC, 0xC8, 0xC8, 0xBF, 0xAE, 0x0A, 0xDA, 0x28, 0xCA, 0x6A, 0x90, 0x4E, 0x76, 0x2D, 0xD7, 0x8C, 0xE2, 0x77, 0xDA, 0xFE, 0x16, 0xDF, 0x47, 0xAF, 0x98, 0xA0, 0xAC, 0x23, 0xB8, 0xDE, 0x00, 0x62, 0x96, 0xF0, 0x82, 0xD2, 0x66, 0x35, 0xCA, 0x4A, 0x6A, 0x62, 0x2D, 0xAB, 0x2B, 0x0A, 0xD4, 0xA1, 0xB7, 0x4A, 0x2F, 0x64, 0xDF, 0xDD, 0xBE, 0x38, 0xFF, 0x85, 0x76, 0xDD, 0x06, 0xF7, 0xEC, 0x29, 0x8A, 0xDD, 0x2E, 0xAC, 0x66, 0xAA, 0xA0, 0xDA, 0xCE, 0x55, 0xDC, 0x8D, 0xE5, 0x9B, 0x3A, 0xB2, 0x86, 0x20, 0x65, 0xB8, 0x99, 0xB1, 0xE7, 0xED, 0x49, 0xA8, 0xEB, 0x9D, 0x91, 0x34, 0x29, 0xEA, 0x67, 0x57, 0x74, 0xE2, 0xD3, 0xE0, 0xC9, 0xCD, 0x13, 0x93, 0x46, 0x05, 0x94, 0xD7, 0xCC, 0x4A, 0xB2, 0x5B, 0xFB, 0xBD, 0x24, 0x26, 0x79, 0xDB, 0x0A, 0xC7, 0xEC, 0x4B, 0x29, 0xB7, 0xAD, 0x96, 0x2A, 0x4E, 0xA5, 0x1D, 0x37, 0x1C, 0x27, 0xB2, 0xE1, 0xFC, 0x9E, 0xE7, 0xC9, 0xFA, 0x72, 0xA9, 0x04, 0xDB, 0x9E, 0xDA, 0xB4, 0xD4, 0xA8, 0xD8, 0x4E, 0x36, 0x6D, 0x69, 0xB0, 0x4B, 0x93, 0x30, 0xF5, 0x82, 0x7F, 0x47, 0xB5, 0x24, 0xB5, 0x76, 0x8D, 0xB8, 0xF8, 0x7E, 0xDA, 0xAC, 0xE5, 0x66, 0xD9, 0x77, 0xD2, 0xCE, 0x5B, 0x5E, 0x53, 0x68, 0x39, 0x1D, 0x06, 0x15, 0xC2, 0x1F, 0x5C, 0x9F, 0xB9, 0x17, 0x59, 0x6B, 0x2E, 0x1B, 0xD7, 0xD1, 0xFD, 0x19, 0x3C, 0x1D, 0x31, 0xD8, 0x7E, 0x1C, 0x9C, 0x12, 0x3C, 0xAD, 0x71, 0x1E, 0x40, 0xFA, 0xDF, 0xAA, 0x8A, 0xE5, 0xE9, 0xBC, 0x6F, 0x17, 0xFD, 0xE1, 0x05, 0x3A, 0xAF, 0xC8, 0x5E, 0xCB, 0x73, 0xB6, 0xF4, 0x53, 0xAC, 0xE0, 0xDE, 0x34, 0x70, 0x14, 0xF6, 0x73, 0xF3, 0xE6, 0x06, 0xB0, 0x23, 0xB8, 0x82, 0x84, 0xD5, 0x47, 0x8E, 0xE2, 0x67, 0x23, 0x6D, 0xDA, 0xFC, 0xB1, 0x94, 0x3D, 0x82, 0x86, 0x19, 0xA8, 0x8B, 0xDF, 0xEF, 0xCA, 0x30, 0xF8, 0xB6, 0xF7, 0xDA, 0xC2, 0x7F, 0xD0, 0x39, 0xA7, 0x9A, 0xAC, 0xFD, 0x60, 0xA9, 0xC5, 0x25, 0x79, 0x1F, 0xEF, 0xE3, 0x82, 0x8B, 0x42, 0x8A, 0xFB, 0x61, 0xEE, 0x50, 0xFE, 0x1D, 0x2E, 0x91, 0x58, 0x7A, 0x64, 0x06, 0xFF, 0x63, 0xE4, 0xC7, 0xD6, 0xBD, 0xCC, 0xAC, 0x3D, 0x97, 0xEB, 0x27, 0x91, 0xEF, 0xFD, 0xA6, 0x54, 0x64, 0x11, 0x9E, 0xAB, 0x13, 0x0B, 0x43, 0xB0, 0x60, 0xA7, 0x85, 0x99, 0xF7, 0xE0, 0x77, 0x16, 0x98, 0x3C, 0x02, 0x78, 0xBF, 0xE0, 0x8C, 0xD0, 0x9B, 0xB7, 0x74, 0xAE, 0x29, 0xBF, 0x84, 0x9B, 0x16, 0xCF, 0xEF, 0x0A, 0x95, 0x5E, 0x88, 0xAC, 0x6A, 0x39, 0x25, 0xC6, 0x03, 0x5F, 0xD5, 0xFE, 0x11, 0xB4, 0x6C, 0x11, 0x97, 0xDF, 0x61, 0x7E, 0xAE, 0x76, 0x2D, 0xB8, 0x42, 0x7E, 0x59, 0x96, 0x9D, 0xA9, 0xC2, 0xB6, 0x58, 0x48, 0xE4, 0x56, 0xE0, 0x6B, 0x83, 0xC5, 0xC2, 0x51, 0xBC, 0xE4, 0xB9, 0x55, 0xFC, 0x68, 0x6E, 0x54, 0xAC, 0x4F, 0x67, 0xBA, 0xE6, 0xD7, 0xC1, 0x6D, 0x2D, 0xCE, 0x2A, 0x93, 0xA0, 0x90, 0xDA, 0x4D, 0xB2, 0x34, 0xBF, 0x8E, 0x72, 0x63, 0x51, 0xBD, 0x37, 0x53, 0x60, 0xCE, 0x57, 0x3A, 0xCD, 0xCE, 0xB4, 0x25, 0x6E, 0x59, 0xAE, 0x90, 0x3D, 0x82, 0x47, 0x1A, 0x4E, 0x12, 0x9C, 0xE1, 0xF5, 0xCE, 0xCB, 0xE3, 0x3B, 0x71, 0xC3, 0x0E, 0x4F, 0xE9, 0x3C, 0x9D, 0x1D, 0x1F, 0xFE, 0xBC, 0x65, 0x63, 0xC6, 0xF4, 0x20, 0xCB, 0xDA, 0x43, 0x6A, 0xCA, 0x6F, 0xA0, 0xAC, 0x47, 0x36, 0xB0, 0xC6, 0x3E, 0x3F, 0x5F, 0xA8, 0x73, 0x0E, 0xC8, 0x68, 0xA7, 0xEE, 0x58, 0x6D, 0x97, 0x69, 0xE0, 0xDF, 0x46, 0x4E, 0x82, 0x7C, 0x60, 0xFA, 0xFC, 0x0B, 0xFC, 0x79, 0xDC, 0xC3, 0x31, 0x3E, 0x47, 0xEC, 0x0B, 0xC4, 0xE1, 0xD1, 0x2D, 0x1B, 0xF5, 0x9D, 0xBB, 0xF3, 0x6B, 0xFD, 0x32, 0xBC, 0xB6, 0xC4, 0x96, 0x1D, 0x52, 0x65, 0x7B, 0xB3, 0xF9, 0xE3, 0x24, 0x1C, 0xE7, 0xF2, 0x0C, 0x1F, 0x06, 0xB4, 0xDE, 0x2B, 0xDB, 0x82, 0x1C, 0x33, 0xDE, 0x2F, 0x20, 0x81, 0x10, 0x83, 0x31, 0xFC, 0x49, 0x5C, 0xE2, 0x4C, 0x57, 0x62, 0x74, 0xA4, 0xEA, 0x88, 0x59, 0x72, 0xDE, 0xA1, 0xD9, 0xE5, 0x6B, 0x52, 0x5B, 0xE3, 0xD7, 0x29, 0x1E, 0x72, 0xC4, 0xC9, 0x29, 0xBC, 0x7F, 0x3C, 0x65, 0xEA, 0x8D, 0x90, 0xFB, 0x60, 0x37, 0x77, 0xBA, 0xC7, 0x3B, 0x24, 0x9C, 0x77, 0xC1, 0xDE, 0x0F, 0xFD, 0x0D, 0x48, 0xCC, 0xF7, 0x63, 0x55, 0xC0, 0xAD, 0xD3, 0xD3, 0x63, 0xDF, 0x27, 0x9F, 0xEE, 0x18, 0x9F, 0xF0, 0x33, 0xF5, 0x6A, 0x71, 0x5F, 0xF2, 0x69, 0xEE, 0x28, 0x79, 0x51, 0xDA, 0x2E, 0x1E, 0xC9, 0xD5, 0x72, 0x5B, 0x01, 0x79, 0x70, 0x03, 0x68, 0x0E, 0xAE, 0x76, 0xCF, 0x82, 0xBF, 0x83, 0x69, 0x76, 0x47, 0xD1, 0x36, 0x10, 0x31, 0xB7, 0xC5, 0x78, 0x20, 0x76, 0x2A, 0x26, 0xA6, 0x1D, 0x8F, 0x6D, 0xF3, 0x8E, 0x8B, 0xC7, 0x5E, 0x16, 0x85, 0x24, 0x9E, 0xC7, 0x4E, 0xCB, 0x3A, 0x52, 0x3A, 0xB1, 0x75, 0x69, 0xD1, 0x9C, 0x22, 0x6C, 0x42, 0x60, 0x21, 0x80, 0x20, 0x3F, 0xDC, 0x6E, 0xC3, 0x5C, 0x78, 0x93, 0x5D, 0x34, 0x7A, 0x08, 0x12, 0x98, 0x0F, 0xC1, 0x56, 0x43, 0x4E, 0x27, 0x6C, 0xA2, 0xFD, 0xA4, 0xC9, 0xAD, 0x53, 0x63, 0x87, 0x8B, 0x9D, 0x0A, 0x7E, 0x26, 0xEC, 0x13, 0x44, 0x4A, 0x43, 0x92, 0x55, 0x7C, 0x38, 0xA5, 0x29, 0x8D, 0xA1, 0x23, 0x03, 0x8B, 0x79, 0x39, 0xC4, 0x45, 0x37, 0x09, 0x3C, 0x05, 0x4D, 0xB2, 0x0B, 0x44, 0x17, 0xC1, 0xE9, 0x66, 0x3F, 0xB0, 0xB9, 0xD0, 0xC9, 0xFE, 0xAF, 0x91, 0x37, 0x32, 0xD0, 0x16, 0xF3, 0x43, 0x07, 0xD2, 0xCD, 0xF2, 0x9E, 0xC7, 0x27, 0x2B, 0x0D, 0xC5, 0x0F, 0x93, 0x34, 0x52, 0x5D, 0x72, 0x42, 0x6A, 0x99, 0xC8, 0x2C, 0x68, 0x06, 0xF7, 0x13, 0x7F, 0x88, 0xFB, 0x52, 0xE8, 0x14, 0xDE, 0x67, 0x97, 0x8B, 0x4E, 0x40, 0x04, 0xE6, 0x13, 0xB1, 0x11, 0xB0, 0x65, 0x9F, 0x6B, 0xE4, 0xFC, 0xA2, 0x99, 0x4D, 0xA3, 0x63, 0x6A, 0x73, 0xCF, 0xE4, 0x89, 0xE3, 0x76, 0x67, 0xE6, 0x88, 0xCE, 0x25, 0xEA, 0xD3, 0x27, 0x24, 0x95, 0xA4, 0x7C, 0x50, 0xC8, 0x76, 0x45, 0x72, 0x51, 0xD1, 0x01, 0x77, 0x04, 0x12, 0x92, 0x5F, 0xEC, 0x1E, 0x21, 0x3F, 0xD1, 0x7D, 0xE6, 0x1E, 0xD8, 0x48, 0x38, 0xB2, 0xEF, 0xF3, 0x41, 0x4D, 0xED, 0xD1, 0xC6, 0xD0, 0xE8, 0xC1, 0x8A, 0x23, 0xB9, 0xBE, 0xB1, 0x8A, 0x22, 0x4A, 0x70, 0x30, 0xE1, 0x5F, 0xEE, 0x88, 0xA4, 0x09, 0x29, 0xCE, 0xBA, 0x1B, 0x3B, 0xEF, 0x71, 0xBE, 0xC8, 0x0B, 0xDD, 0xED, 0x21, 0x5F, 0xE6, 0x80, 0xDD, 0x73, 0xE4, 0x1B, 0xB6, 0xCA, 0x1C, 0xC1, 0x0C, 0xE0, 0xA2, 0x5E, 0xCF, 0x83, 0x40, 0xC7, 0xC6, 0x86, 0x6D, 0xD1, 0xD6, 0x4D, 0x71, 0xFA, 0x96, 0xC3, 0xEF, 0xAB, 0x17, 0x0B, 0x76, 0x24, 0x6C, 0x28, 0xF1, 0x4E, 0x1A, 0x99, 0x9C, 0xA7, 0xCF, 0xD8, 0xBD, 0x94, 0x13, 0xAC, 0x19, 0xE3, 0x36, 0x06, 0x9A, 0xC6, 0x92, 0x76, 0x0F, 0xD1, 0x91, 0xF8, 0x02, 0x8B, 0x61, 0xD8, 0x46, 0xF8, 0x4B, 0xCF, 0x90, 0x83, 0x23, 0xFB, 0xF3, 0x1A, 0x12, 0xA3, 0x36, 0x1C, 0x61, 0x72, 0xC3, 0x0E, 0xFB, 0x37, 0xFB, 0xB0, 0x50, 0xFC, 0xF1, 0x2A, 0x5D, 0xE2, 0xF5, 0xE4, 0x35, 0x85, 0xA5, 0xBB, 0x8C, 0x39, 0x93, 0x75, 0x80, 0x6B, 0x23, 0xD8, 0x25, 0x3C, 0x6C, 0x9F, 0x80, 0x1A, 0xE1, 0x1F, 0x2C, 0x2E, 0x63, 0x0C, 0xB2, 0xB5, 0x6F, 0x3F, 0x6F, 0x66, 0xE4, 0xB4, 0xA6, 0xC9, 0xBC, 0xAB, 0x87, 0x76, 0xE4, 0x55, 0x00, 0xA7, 0xE2, 0x9F, 0x8B, 0x56, 0x82, 0x0D, 0xC9, 0x3B, 0x53, 0x35, 0x50, 0x71, 0xEA, 0xC5, 0xC0, 0xCF, 0xF0, 0x75, 0xAE, 0x9F, 0xDB, 0x23, 0xF4, 0x08, 0xAF, 0xC1, 0x8E, 0xC5, 0xA7, 0x00, 0x06, 0xE6, 0x73, 0xF0, 0x22, 0x60, 0x5D, 0x8F, 0x6F, 0x9A, 0x7B, 0x72, 0x4C, 0x7D, 0x1A, 0xA7, 0x37, 0x75, 0x5C, 0x6E, 0x05, 0x6F, 0x02, 0xC7, 0x45, 0xF4, 0x11, 0xB0, 0xE7, 0x9E, 0x4E, 0x79, 0x0A, 0x6A, 0x81, 0x59, 0x41, 0xB3, 0xE1, 0x75, 0xE0, 0x4C, 0xB7, 0x19, 0xE8, 0x01, 0x30, 0xD4, 0xF6, 0x23, 0xD6, 0x0E, 0x7A, 0x98, 0xD5, 0xE2, 0x9B, 0x41, 0xDB, 0x23, 0x17, 0x52, 0x86, 0x63, 0x63, 0x6A, 0xF7, 0xA7, 0x3E, 0x40, 0x0F, 0xE8, 0x6D, 0x38, 0xFE, 0xE8, 0x75, 0xC1, 0x5B, 0xEE, 0x65, 0xF4, 0x59, 0x52, 0x1D, 0x40, 0xA1, 0x59, 0xBB, 0x67, 0x40, 0x65, 0x48, 0xA6, 0xAB, 0x17, 0xF2, 0x07, 0x5E, 0x6F, 0xAB, 0xC0, 0xA2, 0xA1, 0x60, 0x33, 0x0E, 0x3E, 0x0A, 0xFC, 0xDC, 0xC9, 0x4D, 0xF2, 0x17, 0x7E, 0xAB, 0x91, 0xA5, 0xCC, 0x10, 0xF8, 0x66, 0xFB, 0xA5, 0xBE, 0x62, 0xCD, 0xF9, 0x01, 0x9C, 0x7B, 0x4C, 0x7F, 0x42, 0x06, 0xEF, 0x32, 0x75, 0x76, 0xD7, 0x4C, 0x68, 0x28, 0x91, 0xEA, 0xF2, 0x02, 0xC9, 0x46, 0xD7, 0xDA, 0xA6, 0x62, 0x8B, 0xE0, 0x00, 0xB3, 0x58, 0xEC, 0x3E, 0x04, 0xB4, 0x4F, 0x4B, 0x48, 0x48, 0x1F, 0x5A, 0x75, 0x23, 0x89, 0xA7, 0xE4, 0x67, 0x7C, 0x49, 0x39, 0x2E, 0xAB, 0xA2, 0xBB, 0xD2, 0x3E, 0x48, 0xD6, 0xC5, 0xD7, 0xF2, 0x46, 0x0A, 0x5D, 0x76, 0xCD, 0x03, 0xF7, 0x33, 0x09, 0x2E, 0xAF, 0x11, 0x3F, 0x7C, 0x8D, 0x2D, 0x80, 0x4D, 0x46, 0x8C, 0xCD, 0x38, 0xD8, 0x05, 0x68, 0xA0, 0x75, 0x71, 0xFC, 0xCD, 0xBC, 0xC3, 0x15, 0x4B, 0x12, 0xF3, 0xB2, 0x7D, 0xB5, 0xEF, 0x92, 0xFB, 0x74, 0x43, 0xA9, 0x82, 0xB4, 0xA9, 0xEA, 0xE4, 0xB8, 0x57, 0x5C, 0x4F, 0xB9, 0xD7, 0x4E, 0x5B, 0xE0, 0x86, 0xB0, 0xC9, 0xA5, 0x06, 0x99, 0x4E, 0xFA, 0xDA, 0x62, 0xE8, 0x1F, 0xE4, 0xBE, 0x99, 0xFA, 0xFF, 0xA9, 0x1F, 0x2D, 0xA7, 0xE3, 0x6E, 0x57, 0x8D, 0x2F, 0x5F, 0x95, 0x38, 0xAF, 0xB4, 0x24, 0xFD, 0x4F, 0xB2, 0x7D, 0x81, 0x11, 0x79, 0x24, 0x35, 0x2C, 0xBB, 0x2F, 0xF6, 0x0F, 0x27, 0x4F, 0x3B, 0x77, 0xC7, 0x66, 0x20, 0x40, 0xA6, 0x72, 0x09, 0x86, 0x6F, 0xD2, 0x2A, 0x5B, 0x3E, 0xFA, 0x09, 0xAD, 0x32, 0xEB, 0xC3, 0x6E, 0xC1, 0xB6, 0x2D, 0x2F, 0xE3, 0xD2, 0x5A, 0xDC, 0xCB, 0x3E, 0x26, 0xEC, 0xAE, 0x3B, 0x9E, 0x5E, 0x95, 0x54, 0x58, 0xE1, 0x4E, 0xDC, 0x49, 0xB9, 0x5D, 0xF8, 0xE0, 0xF0, 0x6F, 0x8E, 0x55, 0x76, 0xDD, 0x8E, 0x11, 0xBC, 0xC7, 0xAA, 0xEA, 0x95, 0xFF, 0x60, 0x3D, 0xBF, 0xD8, 0x56, 0x8D, 0xBE, 0xC6, 0x38, 0xE6, 0x63, 0xB1, 0x17, 0x70, 0x64, 0xD3, 0xB3, 0xB8, 0x94, 0xA3, 0x13, 0xCB, 0x5E, 0xC5, 0x3F, 0x69, 0xA7, 0xB4, 0xB6, 0x89, 0xA7, 0xEA, 0x6F, 0xE3, 0x59, 0x29, 0x3B, 0xCB, 0x7F, 0x1F, 0x4E, 0x4C, 0xEB, 0xCB, 0xCF, 0xDB, 0x9E, 0xC1, 0xE3, 0x6B, 0x97, 0xAF, 0xBC, 0x07, 0x47, 0x0A, 0xF8, 0xB6, 0x17, 0xD0, 0x41, 0x7C, 0x85, 0x79, 0x2C, 0xF6, 0x07, 0xAE, 0x68, 0x1E, 0x8B, 0x9F, 0x8A, 0x32, 0x28, 0x0B, 0xC0, 0x37, 0x1C, 0x36, 0x4D, 0xDF, 0x82, 0x3D, 0x4C, 0x30, 0x26, 0x6E, 0x63, 0x64, 0xD2, 0x85, 0xD8, 0x91, 0x58, 0x52, 0xAA, 0x6C, 0xFB, 0x04, 0x4C, 0xC5, 0x0D, 0x74, 0x99, 0x82, 0xC7, 0xF1, 0x24, 0xB6, 0xE1, 0x44, 0x10, 0x4F, 0x67, 0x96, 0x41, 0x74, 0xF2, 0x8A, 0x1B, 0xEA, 0xD1, 0xAC, 0xA4, 0xB0, 0xE2, 0xFB, 0x28, 0x9B, 0xD2, 0xA7, 0xAE, 0x45, 0x11, 0xCE, 0x50, 0xA2, 0x1D, 0x8D, 0xE1, 0x26, 0xC4, 0xBD, 0x41, 0x23, 0x79, 0xD4, 0x4E, 0x63, 0x6C, 0x04, 0x70, 0xC5, 0xC5, 0x15, 0x9F, 0x0B, 0xBA, 0xD8, 0xBC, 0xC0, 0x1F, 0x00, 0x5F, 0xCC, 0xC6, 0x12, 0xCE, 0xC0, 0xE5, 0xAA, 0x0C, 0xF8, 0x3D, 0x62, 0x5F, 0x74, 0x13, 0x6E, 0x45, 0xA2, 0x55, 0xCF, 0xE1, 0xD3, 0xC8, 0x73, 0xEC, 0x04, 0x32, 0x03, 0x75, 0x88, 0xFD, 0x89, 0x1C, 0x40, 0xE2, 0xB7, 0x4F, 0x44, 0x13, 0x10, 0xF3, 0x95, 0x47, 0xB1, 0x6E, 0x78, 0xBE, 0x4D, 0x09, 0x2E, 0x82, 0xE6, 0x98, 0xDE, 0xC0, 0x9F, 0x80, 0x25, 0xD5, 0x15, 0xD0, 0x02, 0xFE, 0xED, 0xFC, 0x93, 0x50, 0x18, 0x7F, 0x86, 0xE2, 0x0D, 0x14, 0xC7, 0xEC, 0x40, 0x4F, 0xC1, 0x23, 0xE8, 0x6D, 0x87, 0x3A, 0xE1, 0x73, 0x64, 0xF5, 0xD6, 0x43, 0xC8, 0x33, 0xFC, 0xF2, 0x8A, 0x37, 0x58, 0x0C, 0xF2, 0xC0, 0x86, 0xC0, 0x83, 0xA0, 0xF7, 0xA6, 0xFF, 0xE1, 0xBD, 0xD0, 0xDC, 0xEA, 0x6F, 0x40, 0x97, 0xC2, 0x27, 0xDF, 0x14, 0x34, 0x93, 0x71, 0xE5, 0xC9, 0x60, 0xAC, 0x24, 0x09, 0x59, 0x03, 0x2D, 0x15, 0x71, 0x63, 0x2E, 0xC1, 0xB3, 0xD9, 0xA7, 0xDB, 0x26, 0x21, 0x41, 0xB4, 0x7C, 0x45, 0x16, 0x66, 0x85, 0x15, 0xDA, 0x44, 0xE2, 0x5E, 0x70, 0x8E, 0xE9, 0x5B, 0xBC, 0x15, 0xDA, 0x5A, 0x79, 0x8B, 0x57, 0x95, 0x75, 0x3F, 0x2F, 0x11, 0x58, 0xA0, 0xCB, 0x93, 0x3E, 0x05, 0x64, 0x9A, 0x60, 0x28, 0x01, 0xDC, 0xA7, 0x5C, 0x10, 0x55, 0x09, 0xED, 0x92, 0x6E, 0x09, 0x28, 0x86, 0x1F, 0x0A, 0x42, 0x56, 0x38, 0xA2, 0xEF, 0x09, 0x9E, 0x8D, 0x1F, 0xEE, 0x80, 0x78, 0x9B, 0x7E, 0xC5, 0x1B, 0xA1, 0xB4, 0x4A, 0x82, 0x1B, 0x5B, 0xDA, 0xA8, 0xCF, 0xE7, 0xE9, 0x0A, 0xF3, 0x25, 0xE9, 0xC0, 0x12, 0x7D, 0x1C, 0xE4, 0x09, 0xDC, 0xC8, 0x1C, 0x11, 0x19, 0x0A, 0x3E, 0x57, 0x7F, 0xF3, 0xDF, 0x0D, 0xC7, 0x48, 0x06, 0x57, 0x4C, 0x44, 0xDB, 0xA9, 0x74, 0x9B, 0xAD, 0xF8, 0x6C, 0xE4, 0x8F, 0xE9, 0x77, 0xBC, 0x0A, 0xD2, 0x55, 0xD6, 0x70, 0x7E, 0xD6, 0xAF, 0xD4, 0xBB, 0x71, 0x2B, 0xAB, 0xA2, 0x24, 0x06, 0x3C, 0x7E, 0x49, 0x36, 0x38, 0x19, 0xD8, 0x98, 0xF7, 0x2B, 0xE2, 0x0A, 0x18, 0x99, 0x79, 0xC0, 0x3F, 0x06, 0xFA, 0xA9, 0xB8, 0xB2, 0xFC, 0x18, 0x9A, 0xCA, 0xF0, 0x6D, 0x16, 0x63, 0xBF, 0xD1, 0x6A, 0xD3, 0xCF, 0x78, 0x11, 0xD4, 0x5D, 0xB6, 0x93, 0xCB, 0x6F, 0x87, 0xB2, 0xCD, 0xB9, 0x89, 0x4D, 0x1B, 0x44, 0x6A, 0x9E, 0x51, 0x75, 0x0B, 0x8F, 0xE1, 0x7D, 0x2B, 0x79, 0x1E, 0xE1, 0x03, 0x5A, 0xE7, 0x5A, 0xFA, 0x03, 0x10, 0xAA, 0xD9, 0xB5, 0xC2, 0x1A, 0x75, 0x61, 0x85, 0x36, 0x3E, 0xD8, 0x7F, 0x58, 0xE8, 0xFF, 0x1F, 0x66, 0x43, 0xFF, 0x95, 0x1E, 0x11, 0xC6, 0x47, 0x7F, 0xCC, 0x31, 0x64, 0xAF, 0x1D, 0x56, 0x4A, 0xA6, 0xF0, 0x77, 0xC5, 0xFF, 0x07, 0x56, 0xD2, 0x57, 0x92, 0x02, 0x22, 0x9F, 0x50, 0x77, 0x52, 0xDE, 0xFA, 0x7F, 0x21, 0x07, 0x38, 0x0D, 0xCB, 0x7D, 0x48, 0x7F, 0xDE, 0x46, 0xEB, 0x7A, 0x32, 0x8C, 0x97, 0x6E, 0x9A, 0x4A, 0x46, 0xF1, 0x9A, 0x8B, 0xA7, 0xB1, 0x9B, 0x92, 0x26, 0x66, 0x8E, 0xE3, 0x9B, 0xA4, 0xA4, 0x08, 0x63, 0xE9, 0xF7, 0x69, 0x73, 0x78, 0xB7, 0xA9, 0x6E, 0x4E, 0x53, 0xE4, 0x10, 0xF2, 0x22, 0x6F, 0xB8, 0x7F, 0x1B, 0xE9, 0x02, 0xAC, 0x5D, 0xBE, 0x82, 0x1C, 0x02, 0x9C, 0xB0, 0xE6, 0x11, 0x7F, 0x80, 0x5A, 0x53, 0x67, 0xE2, 0x1F, 0xA0, 0x2F, 0x58, 0xC7, 0x78, 0x83, 0xCD, 0xBA, 0xF3, 0x74, 0x00, 0xEC, 0x28, 0x98, 0x45, 0xC1, 0x30, 0xC1, 0x19, 0x24, 0x33, 0xE1, 0x3B, 0x11, 0x26, 0xC4, 0x47, 0x38, 0xC7, 0x6F, 0x29, 0xD1, 0x04, 0x63, 0xCE, 0x0F, 0x88, 0x1A, 0x88, 0xB4, 0x8E, 0x24, 0x9A, 0xC0, 0x2A, 0x53, 0x27, 0xA2, 0x0D, 0xF4, 0xC9, 0x5F, 0x45, 0xDB, 0xD1, 0x0A, 0x6D, 0x10, 0x65, 0x4B, 0x07, 0xF3, 0xB5, 0xA4, 0x39, 0x6D, 0xCE, 0x99, 0x4A, 0x88, 0xC8, 0xAE, 0x83, 0x59, 0xC4, 0x16, 0x22, 0x74, 0x8B, 0x33, 0xE1, 0x8C, 0x8F, 0x73, 0xCE, 0x22, 0xA2, 0x11, 0x77, 0x6B, 0x90, 0x90, 0x42, 0x87, 0x4C, 0xC3, 0x89, 0x1C, 0xB0, 0xB0, 0x60, 0x32, 0xF9, 0x5E, 0x6A, 0x90, 0x1E, 0x48, 0xAE, 0x90, 0x58, 0x32, 0xAB, 0x09, 0x17, 0x91, 0x3A, 0xCD, 0x00, 0xBF, 0x29, 0xE8, 0x08, 0x47, 0xF0, 0x4A, 0x3E, 0xB6, 0xF9, 0x08, 0x5E, 0x4E, 0x65, 0x38, 0x83, 0xC4, 0x32, 0xF4, 0xAE, 0x75, 0x3A, 0x81, 0x41, 0x7F, 0x4C, 0x19, 0x22, 0x03, 0x1C, 0xC8, 0x9B, 0x49, 0x5C, 0xD0, 0x6E, 0x51, 0xF3, 0xF0, 0x7F, 0x1A, 0x09, 0x1D, 0x87, 0xAF, 0x56, 0x7E, 0x49, 0xA9, 0xC0, 0xCD, 0x64, 0xDF, 0xC3, 0x1C, 0xF0, 0x19, 0xE2, 0x28, 0xDF, 0xED, 0xF8, 0x06, 0xFE, 0x77, 0xE7, 0xA9, 0xF8, 0x2F, 0x9C, 0xFE, 0xFF, 0xC3, 0x08, 0x58, 0x6A, 0x1A, 0x4F, 0x48, 0xC0, 0x07, 0xB9, 0xAB, 0x88, 0x89, 0x05, 0x22, 0xF5, 0x6A, 0x7C, 0x43, 0xEE, 0x5F, 0xEA, 0x1F, 0x56, 0x95, 0x75, 0x22, 0xB9, 0x1F, 0x93, 0x6A, 0x63, 0x42, 0x5F, 0x63, 0x02, 0x65, 0xF8, 0x26, 0x47, 0xEC, 0xB1, 0xE8, 0xAA, 0x53, 0x0D, 0xDE, 0x4E, 0x46, 0x59, 0x4F, 0x24, 0xDC, 0x91, 0x25, 0xA6, 0x46, 0x44, 0x2A, 0xF8, 0x45, 0x5F, 0x84, 0xE7, 0x56, 0xBE, 0x52, 0x56, 0xE2, 0x53, 0xCB, 0x2C, 0x89, 0x07, 0x58, 0x62, 0xE1, 0xB2, 0xA4, 0x3C, 0xF4, 0x62, 0xCE, 0xBF, 0x7D, 0x59, 0xE8, 0x27, 0xED, 0xF7, 0x4D, 0x97, 0xB0, 0x78, 0x59, 0xB9, 0x93, 0x1F, 0x9E, 0x42, 0xCF, 0xB5, 0x2A, 0x27, 0xE6, 0x20, 0xDD, 0x26, 0x67, 0x88, 0x50, 0x68, 0x64, 0xB6, 0x14, 0xB7, 0x6D, 0xBC, 0x2F, 0xFF, 0x89, 0xD5, 0xD6, 0xC6, 0x12, 0x19, 0x98, 0x61, 0x85, 0x65, 0xB2, 0x10, 0xA5, 0x0B, 0xFF, 0xEE, 0x3B, 0x80, 0x3E, 0xCD, 0xFA, 0xE3, 0x6B, 0x88, 0x7E, 0x53, 0xAA, 0x9D, 0x0D, 0xF0, 0xC5, 0xCC, 0x51, 0xAB, 0x72, 0xFC, 0x07, 0xBA, 0xC1, 0x84, 0x24, 0x36, 0x43, 0xB3, 0x32, 0x1B, 0x95, 0xAE, 0x87, 0x66, 0x29, 0xE5, 0xB2, 0xE3, 0x87, 0xB5, 0xA4, 0x9B, 0x84, 0x17, 0x0F, 0x26, 0xAD, 0x17, 0x2D, 0x4A, 0x5A, 0xBA, 0x6F, 0xB6, 0x60, 0x61, 0x4A, 0x95, 0x6F, 0x0E, 0x7F, 0x3C, 0xC7, 0xCA, 0xC9, 0x96, 0x5E, 0xC7, 0x1D, 0xB4, 0xB2, 0xA2, 0x7C, 0x78, 0x05, 0x26, 0x8E, 0xE4, 0x3D, 0xDE, 0x5B, 0x5D, 0x88, 0x7C, 0x52, 0x52, 0x81, 0xF4, 0xAF, 0xD4, 0x37, 0xB9, 0x0B, 0xBB, 0x25, 0x5E, 0x9F, 0x6A, 0x95, 0x68, 0x29, 0x1C, 0xC5, 0x99, 0x11, 0x8A, 0xB0, 0xAB, 0xB8, 0xBC, 0x4D, 0x45, 0x8C, 0x88, 0x97, 0xBB, 0x8C, 0x4F, 0xBD, 0x01, 0x56, 0x59, 0x0D, 0xA3, 0x86, 0x01, 0x51, 0x26, 0x9E, 0xA4, 0x1E, 0x48, 0xD5, 0xE9, 0xA5, 0xDB, 0x81, 0x4B, 0x92, 0x8F, 0xE2, 0x4B, 0x60, 0x33, 0x72, 0x53, 0x64, 0x0C, 0x19, 0xC4, 0x47, 0x0B, 0xA6, 0x42, 0x4D, 0xA1, 0xE3, 0xF9, 0x02, 0xE8, 0x84, 0xCF, 0x59, 0xC6, 0x18, 0xEA, 0x5E, 0xB6, 0x89, 0xCA, 0x03, 0xAF, 0x5A, 0x4D, 0x27, 0x8F, 0x83, 0x8B, 0x4D, 0x62, 0xC9, 0x68, 0xE0, 0x45, 0xFA, 0x45, 0xC9, 0x4E, 0xD2, 0x44, 0x1C, 0x21, 0x52, 0x92, 0x2C, 0xEC, 0x2D, 0x90, 0x90, 0x66, 0x71, 0x87, 0xD8, 0xF9, 0xC4, 0xEE, 0x90, 0x65, 0xCC, 0x0B, 0x7C, 0xB7, 0xCF, 0x68, 0xBA, 0x0B, 0x1B, 0xBF, 0x8C, 0xA5, 0x62, 0xE1, 0x08, 0xAB, 0x03, 0x64, 0x29, 0x78, 0xC5, 0xA4, 0x89, 0xDC, 0x0A, 0xDA, 0x68, 0x26, 0x89, 0x3D, 0x45, 0xB8, 0x68, 0xA1, 0xF0, 0x92, 0xB0, 0x1B, 0x4C, 0x62, 0xCF, 0x0B, 0xDC, 0xE2, 0x0C, 0xF8, 0x3B, 0xF9, 0x4D, 0xC1, 0xFF, 0x98, 0xED, 0xF4, 0xE0, 0xC6, 0x6C, 0xDA, 0x9B, 0x5C, 0xBF, 0xAC, 0x98, 0x5A, 0x8B, 0x3C, 0xB5, 0x6A, 0x23, 0x0B, 0x21, 0x3F, 0x93, 0xE7, 0xE4, 0x66, 0xD0, 0x53, 0x75, 0x50, 0x84, 0xA8, 0xE3, 0xFF, 0xEF, 0x7E, 0xAC, 0x8C, 0x01, 0x39, 0xAC, 0xB1, 0x7C, 0x41, 0xEC, 0x09, 0xE6, 0x9D, 0xE4, 0x58, 0xB0, 0x2D, 0xFD, 0x54, 0x98, 0xBD, 0xE1, 0x03, 0x75, 0x89, 0xC9, 0x5F, 0x36, 0x83, 0xFC, 0x89, 0x21, 0x56, 0xC1, 0x24, 0x02, 0x5D, 0x32, 0x69, 0x20, 0xDD, 0xC0, 0x8D, 0x8A, 0x76, 0x91, 0x89, 0x5E, 0xC4, 0x2F, 0x13, 0x8C, 0xC9, 0xEA, 0x01, 0xE7, 0xF2, 0x3D, 0x75, 0x5D, 0x87, 0x0F, 0x31, 0x61, 0xEA, 0xBB, 0x7B, 0xE6, 0xD2, 0xDB, 0xE5, 0x4B, 0x37, 0xC4, 0x51, 0x61, 0xC2, 0xF5, 0x4B, 0x97, 0x91, 0x85, 0xC4, 0x22, 0x4B, 0x19, 0xB9, 0x06, 0xDE, 0x6B, 0x62, 0x4C, 0xCE, 0x07, 0xFD, 0x14, 0x7D, 0x42, 0xAA, 0xE4, 0x17, 0xBB, 0x84, 0x6D, 0x2A, 0x1C, 0xE0, 0x7D, 0x60, 0x7E, 0xE5, 0x76, 0xC4, 0xC4, 0xD2, 0x99, 0x99, 0x37, 0x82, 0x4A, 0xA9, 0x26, 0xCD, 0xE6, 0x0D, 0x1E, 0xD4, 0x70, 0x89, 0x68, 0x49, 0x36, 0x99, 0x40, 0x6A, 0x2D, 0x87, 0x90, 0xA6, 0xF0, 0x49, 0xE3, 0x02, 0x72, 0x28, 0xB8, 0x45, 0x15, 0x2F, 0xD8, 0x51, 0x3B, 0x97, 0xAF, 0x65, 0xA7, 0x57, 0x5A, 0xF3, 0x56, 0x31, 0x17, 0x4A, 0xFC, 0x63, 0x70, 0x7A, 0x6D, 0x1E, 0x14, 0x98, 0x4A, 0xA1, 0x19, 0xD6, 0xEB, 0x63, 0xC9, 0x26, 0x59, 0xD1, 0x92, 0x4A, 0xD2, 0x97, 0xAA, 0xB3, 0x38, 0x4A, 0x4E, 0x40, 0x4C, 0x8C, 0xD7, 0x12, 0x6F, 0x41, 0x3F, 0x59, 0x50, 0xE6, 0x94, 0x98, 0x7A, 0x0A, 0xD1, 0xEE, 0x8D, 0xDD, 0xC9, 0x71, 0x56, 0x6F, 0x88, 0xCF, 0x8D, 0x2A, 0x54, 0xCC, 0x4B, 0x9A, 0xB3, 0x7B, 0xAB, 0xD4, 0x2C, 0x25, 0x78, 0xED, 0x2B, 0xD1, 0xC4, 0xB4, 0xD2, 0x25, 0x20, 0xBF, 0x9C, 0xBB, 0xD5, 0x22, 0x8D, 0x0E, 0xE4, 0x25, 0x1B, 0xDD, 0xA5, 0xF6, 0xF1, 0x5E, 0x89, 0x4E, 0xEA, 0x52, 0x13, 0x97, 0x10, 0x9D, 0xE9, 0x66, 0x49, 0xAF, 0x38, 0x02, 0xD5, 0xE8, 0x94, 0xA1, 0x51, 0x88, 0xDC, 0x30, 0x6D, 0xDE, 0x6E, 0x4F, 0x49, 0x2A, 0x27, 0x7F, 0x1D, 0x24, 0xC4, 0xB8, 0x3D, 0x8B, 0xF5, 0xFC, 0x79, 0xBC, 0x2C, 0x8B, 0x2D, 0xF4, 0x2C, 0x60, 0xB4, 0xF1, 0x04, 0xCA, 0x05, 0x58, 0x2A, 0x5A, 0xA5, 0x75, 0xE5, 0x3E, 0x23, 0x66, 0xA9, 0x5F, 0x00, 0x33, 0x53, 0x3D, 0x94, 0xB3, 0x01, 0x36, 0x62, 0x97, 0x2C, 0x18, 0x0C, 0xDE, 0x55, 0x27, 0x7E, 0x08, 0x2A, 0xD7, 0x2D, 0x11, 0xCE, 0x07, 0x99, 0xC5, 0x2C, 0x33, 0x00, 0xFC, 0xB1, 0x48, 0xA6, 0x1E, 0x02, 0xF9, 0xC6, 0xBE, 0xD4, 0x54, 0x80, 0x27, 0xDC, 0x95, 0xBE, 0x19, 0xBB, 0x83, 0x7F, 0x57, 0xF5, 0xE3, 0xDE, 0xC9, 0xB4, 0xFC, 0x2C, 0x3E, 0xE6, 0xA0, 0x52, 0x8A, 0x63, 0xCD, 0x3B, 0xC5, 0x62, 0x4F, 0xB4, 0x7B, 0xAD, 0xAB, 0x60, 0x00, 0x49, 0x5C, 0x62, 0xC8, 0x94, 0x42, 0x9B, 0x2C, 0x2E, 0x51, 0xBD, 0xA0, 0x85, 0xB1, 0x9C, 0xFC, 0x0A, 0x14, 0xB3, 0x89, 0x1A, 0x3F, 0x81, 0x17, 0xFA, 0x45, 0xF9, 0x9B, 0x0D, 0x49, 0x0A, 0x96, 0xCF, 0x67, 0xFE, 0x3B, 0x98, 0x28, 0xB9, 0x48, 0x2B, 0x77, 0x54, 0x8B, 0xCA, 0xC9, 0x7F, 0x6B, 0x52, 0x05, 0x21, 0x38, 0xB9, 0x64, 0x34, 0x93, 0x02, 0xD7, 0x5B, 0x3C, 0xA5, 0xCA, 0x40, 0x9D, 0x71, 0x05, 0xF9, 0x0C, 0x68, 0xE0, 0xCF, 0x54, 0x1F, 0x51, 0x38, 0x23, 0x03, 0xCA, 0xB9, 0xB2, 0xD5, 0x89, 0x0D, 0xB2, 0x08, 0x49, 0xE8, 0x81, 0x74, 0x49, 0xA2, 0xC8, 0x79, 0xC7, 0x48, 0xD1, 0x32, 0x36, 0x77, 0xCD, 0x78, 0xF6, 0x0C, 0x75, 0x7F, 0xF1, 0x34, 0x66, 0x06, 0xBA, 0xD1, 0x82, 0x43, 0x61, 0xD0, 0x78, 0xE3, 0x04, 0xF2, 0x0A, 0x50, 0x4D, 0xED, 0x56, 0xCF, 0xCE, 0x78, 0x0C, 0x9B, 0x2B, 0x82, 0xB5, 0x5F, 0x13, 0xDA, 0xA4, 0x27, 0x35, 0x1B, 0xC2, 0x8B, 0xC5, 0xA7, 0x14, 0xAF, 0xB7, 0xD7, 0x08, 0xCB, 0x24, 0xBD, 0x6B, 0x46, 0xB0, 0xEB, 0x58, 0xEF, 0x45, 0x3E, 0x74, 0x07, 0x76, 0xCE, 0x7C, 0x80, 0xF2, 0x87, 0x52, 0x8D, 0x1E, 0x93, 0x6D, 0x80, 0x9E, 0x12, 0xA8, 0x1E, 0xE4, 0xDF, 0x85, 0x7B, 0xE5, 0x3F, 0x73, 0x37, 0x25, 0x74, 0x4B, 0xA3, 0xB3, 0xDE, 0xED, 0xFF, 0x26, 0x5E, 0xA2, 0x95, 0x6C, 0x37, 0x16, 0x2E, 0x54, 0x4E, 0xF3, 0x0E, 0x63, 0xA7, 0x09, 0xBF, 0x2F, 0x04, 0x69, 0x3D, 0xFE, 0xD9, 0xDC, 0x89, 0x72, 0x86, 0x7A, 0x8C, 0x12, 0xC8, 0x5C, 0x40, 0x44, 0xE7, 0xAA, 0xF6, 0x55, 0xCC, 0x87, 0xDE, 0xCA, 0xB7, 0x96, 0x64, 0x25, 0x99, 0x49, 0x2E, 0x14, 0x18, 0x86, 0xFF, 0x15, 0x9D, 0xC9, 0x8E, 0xD9, 0xD6, 0x29, 0x78, 0xA5, 0xB9, 0xB2, 0xDA, 0x88, 0x9D, 0x29, 0xFE, 0xEC, 0xB8, 0x9E, 0xEE, 0x23, 0xCE, 0x9A, 0xB5, 0x51, 0x8B, 0xA0, 0xEF, 0x46, 0x0E, 0x24, 0x0B, 0x80, 0x28, 0xB7, 0xA8, 0x2A, 0xE6, 0x76, 0xAA, 0x4F, 0xFE, 0x9A, 0xC3, 0xFF, 0x45, 0xDF, 0xC9, 0x7E, 0x13, 0x9F, 0x1C, 0xF2, 0x5C, 0xA7, 0x4A, 0x64, 0xFC, 0x4F, 0xA9, 0x0F, 0x25, 0xEF, 0xF4, 0x3C, 0x2E, 0x6B, 0x4F, 0xCD, 0x75, 0x34, 0x17, 0xFC, 0xE5, 0x34, 0x9B, 0x4D, 0x62, 0x68, 0xDE, 0x24, 0x43, 0x6F, 0x7A, 0x02, 0xAF, 0x00, 0x96, 0x16, 0xA6, 0x24, 0x08, 0x52, 0x3E, 0xE5, 0xBE, 0x4B, 0xB2, 0x88, 0xD1, 0x67, 0xB5, 0x26, 0xC7, 0x86, 0x54, 0x6A, 0x7B, 0x52, 0xDE, 0xF8, 0x1F, 0x52, 0x1D, 0x4D, 0x0B, 0xF6, 0xC2, 0x64, 0x4B, 0x38, 0x84, 0xC3, 0x6B, 0x81, 0x8A, 0x7B, 0xD4, 0x6C, 0x2A, 0xE3, 0xCF, 0xE3, 0x19, 0xC6, 0x51, 0xEF, 0x78, 0x27, 0xC0, 0xF7, 0x05, 0x72, 0x8E, 0x5B, 0x8A, 0x8D, 0xFE, 0x3D, 0x97, 0x1B, 0xB3, 0x28, 0x93, 0xE6, 0x7E, 0xD9, 0x7B, 0x31, 0xFD, 0x31, 0x0F, 0xF0, 0xCB, 0x53, 0xAD, 0x00, 0xC6, 0x7A, 0x01, 0xD2, 0x6A, 0xC0, 0xCA, 0x71, 0x88, 0xC0, 0x15, 0x18, 0x69, 0xE6, 0xC6, 0x18, 0xF2, 0x3E, 0x18, 0x96, 0x50, 0xE7, 0x79, 0x83, 0xBC, 0x97, 0xF9, 0x22, 0x24, 0x27, 0xB9, 0x4D, 0x3F, 0x05, 0x39, 0x15, 0x65, 0x95, 0xF1, 0x17, 0xC9, 0x0B, 0xB6, 0x49, 0x5F, 0x85, 0x24, 0x6F, 0xF1, 0x52, 0x52, 0xF0, 0x63, 0x8F, 0x57, 0xD2, 0x35, 0xD0, 0x5D, 0x87, 0x5F, 0x82, 0x61, 0xE0, 0x1A, 0xB3, 0x18, 0xFA, 0x1B, 0xB0, 0xCF, 0xF0, 0x1E, 0x55, 0xCB, 0xFB, 0xC7, 0x7B, 0x95, 0xE7, 0x4E, 0x3F, 0x4B, 0x94, 0xE7, 0x0C, 0xA5, 0x5D, 0x23, 0xF6, 0x67, 0x2C, 0xA2, 0xC2, 0xF7, 0x68, 0x35, 0x72, 0x72, 0xDB, 0xE6, 0x52, 0xC5, 0x0D, 0xBC, 0xDB, 0xFD, 0xB4, 0xE4, 0x39, 0xAA, 0x74, 0x50, 0xB0, 0x03, 0x10, 0x6D, 0xB6, 0x8D, 0xBE, 0x02, 0x1C, 0x33, 0x7C, 0x4E, 0xA9, 0x81, 0x11, 0x3C, 0x59, 0xEE, 0x62, 0xF1, 0xEF, 0xC4, 0xAA, 0xEC, 0xE9, 0xA2, 0xFF, 0x0E, 0xA2, 0xBA, 0xC3, 0x42, 0xFF, 0xA0, 0x56, 0xCD, 0x52, 0xD6, 0x6B, 0xF3, 0x18, 0x85, 0x84, 0xBE, 0xEC, 0x0E, 0x48, 0xA4, 0x44, 0x92, 0xFD, 0x77, 0x16, 0x84, 0x6F, 0x98, 0xFE, 0xA3, 0xCB, 0x41, 0x23, 0xC3, 0x26, 0x0A, 0xE4, 0x7D, 0x4B, 0xCB, 0xD7, 0xAF, 0xD7, 0xAC, 0x8F, 0xDF, 0x93, 0x15, 0xA0, 0xFA, 0x1C, 0xDE, 0xAB, 0x9B, 0xA0, 0x70, 0x0B, 0x5A, 0xA3, 0xD6, 0x49, 0xED, 0x36, 0x2B, 0xE5, 0xAF, 0x84, 0x90, 0x07, 0x57, 0xFC, 0x90, 0xCE, 0xB0, 0x2F, 0x67, 0xCD, 0x51, 0x07, 0x53, 0x2D, 0x0D, 0xFF, 0x8F, 0x41, 0xB2, 0x70, 0x68, 0x72, 0xD1, 0xC3, 0xB0, 0x7A, 0xEC, 0xF6, 0x98, 0x08, 0x0B, 0x46, 0x4B, 0x77, 0x37, 0x48, 0x77, 0x77, 0x6E, 0x63, 0xDD, 0xFB, 0x72, 0xFB, 0x62, 0xC5, 0x18, 0xDD, 0x21, 0x20, 0x82, 0x28, 0x76, 0x77, 0xC7, 0xB5, 0x8E, 0xDD, 0xDD, 0x79, 0xEC, 0x6E, 0xEF, 0xF9, 0x03, 0x9E, 0x5F, 0x3C, 0xEF, 0x8B, 0x88, 0xA8, 0x59, 0xDA, 0x52, 0xE8, 0xBA, 0x72, 0x45, 0xDF, 0xE6, 0xDE, 0x85, 0xE2, 0x85, 0x3D, 0x96, 0xDD, 0x6B, 0x2B, 0x77, 0x77, 0xD4, 0x74, 0x24, 0xE6, 0x35, 0xB6, 0xBC, 0x6E, 0xC9, 0x48, 0x5C, 0xDF, 0x08, 0xD4, 0x4B, 0x83, 0x77, 0xD7, 0x2E, 0xAF, 0x5E, 0xE8, 0x94, 0x59, 0x3D, 0x16, 0xF7, 0x64, 0x14, 0xE8, 0xCA, 0x90, 0x15, 0x54, 0xBA, 0x36, 0x0A, 0xDA, 0xA9, 0x64, 0xF4, 0xCD, 0x1D, 0x62, 0x88, 0x4B, 0xBB, 0xBD, 0x07, 0xA6, 0x33, 0xC7, 0xB5, 0x3F, 0x59, 0xF2, 0x30, 0xCF, 0xAF, 0xE5, 0x54, 0xC7, 0x9B, 0x84, 0x9E, 0xC6, 0x55, 0xCD, 0x94, 0x40, 0x55, 0xED, 0x5B, 0xE3, 0x43, 0xA7, 0xD0, 0x6A, 0x07, 0x62, 0x14, 0x23, 0x55, 0x97, 0x85, 0x9C, 0xA3, 0xFE, 0xAD, 0xB5, 0x83, 0x7A, 0x45, 0x57, 0x36, 0xBC, 0xE4, 0xAE, 0x65, 0xFD, 0x5C, 0xD3, 0xC9, 0x7B, 0x50, 0x44, 0x1B, 0x3E, 0x25, 0x34, 0xCF, 0xF8, 0x31, 0x50, 0x29, 0x3A, 0x10, 0xD3, 0xDD, 0xF3, 0x4E, 0xD2, 0xE2, 0xBF, 0xB4, 0xCD, 0x41, 0xF6, 0xD9, 0xC1, 0xAB, 0xF6, 0xAE, 0x72, 0x27, 0xED, 0x6A, 0xF5, 0x44, 0xB0, 0xDC, 0xFC, 0xAE, 0xEE, 0x1B, 0x64, 0x26, 0xB4, 0x5B, 0x8F, 0x89, 0xB4, 0xAC, 0x6F, 0xAB, 0xF9, 0x62, 0xA8, 0x68, 0xFE, 0xB0, 0x9D, 0xE4, 0x63, 0xC6, 0xD8, 0xA5, 0x97, 0x65, 0x99, 0x31, 0x4E, 0x3D, 0x96, 0xF2, 0x65, 0xFE, 0xCB, 0x5A, 0xFB, 0x14, 0x4F, 0x1D, 0xF2, 0x6A, 0x0D, 0xC0, 0x52, 0xFA, 0x78, 0xC3, 0x2D, 0x70, 0xAD, 0xC5, 0x4C, 0xDD, 0x03, 0x88, 0xCA, 0xBB, 0xBB, 0x2E, 0x4B, 0xD1, 0xCF, 0x3C, 0xBF, 0x2A, 0x4E, 0x99, 0x54, 0xE0, 0xBC, 0xBC, 0x4B, 0x79, 0x28, 0x4D, 0xB5, 0x34, 0x0A, 0x90, 0x2F, 0xF6, 0xEC, 0x06, 0x40, 0xAA, 0xFF, 0x50, 0xCB, 0x4B, 0x10, 0x72, 0x10, 0xD6, 0x32, 0xC0, 0xB3, 0x74, 0x6B, 0xC3, 0x1A, 0x68, 0x82, 0x85, 0x9F, 0xEE, 0x04, 0x44, 0xE3, 0x2F, 0x5A, 0x4B, 0x45, 0x1B, 0x2B, 0xCF, 0x8F, 0x70, 0x50, 0x55, 0x7E, 0xE0, 0xD0, 0x46, 0x34, 0x2D, 0xD5, 0xB9, 0xBF, 0x12, 0xF9, 0x19, 0xAD, 0xEF, 0xEA, 0x44, 0x56, 0xFA, 0xDD, 0x6A, 0x09, 0x87, 0x7F, 0x3A, 0x4C, 0x36, 0x9D, 0x82, 0xBE, 0xD3, 0xE7, 0x18, 0x70, 0xA8, 0xC4, 0x22, 0x59, 0xB7, 0x0E, 0xA2, 0xF2, 0x1B, 0x56, 0x7F, 0x23, 0x1F, 0x54, 0x4C, 0x59, 0x39, 0x40, 0x96, 0xE6, 0x8F, 0x19, 0xCC, 0x23, 0x0E, 0xA5, 0xB6, 0xF6, 0x45, 0xE3, 0x23, 0xD1, 0x1E, 0x9D, 0x17, 0x31, 0x2B, 0x5F, 0x69, 0xF3, 0x03, 0x55, 0xB8, 0xBD, 0xC8, 0x64, 0x42, 0xA6, 0xD1, 0x5E, 0x1B, 0x32, 0xA0, 0x0D, 0x16, 0x99, 0xBA, 0x1A, 0x68, 0x21, 0x7F, 0xCB, 0xAA, 0x1F, 0xC6, 0x88, 0x4A, 0xFE, 0x8A, 0x90, 0xEA, 0xA1, 0xFC, 0x9C, 0x65, 0xD1, 0x86, 0xE2, 0xD4, 0xEC, 0xDE, 0x21, 0x5D, 0x60, 0xD4, 0xE6, 0xCE, 0x12, 0x72, 0xA7, 0x8F, 0x5D, 0xF3, 0x36, 0xAC, 0xCD, 0x7E, 0xB2, 0x29, 0x0D, 0xA5, 0xD2, 0x2E, 0x18, 0xAC, 0xA0, 0xAF, 0xFF, 0xED, 0x2A, 0x85, 0x26, 0x73, 0x45, 0xAB, 0x86, 0x9A, 0xE8, 0xE5, 0xC7, 0x57, 0x94, 0x34, 0xEC, 0xCF, 0x9B, 0xB8, 0xCC, 0xAA, 0xCE, 0x2E, 0xE5, 0x4C, 0xAF, 0x47, 0x4D, 0x6C, 0xD4, 0xC7, 0x8E, 0xFF, 0xE9, 0x6F, 0xF9, 0x76, 0x36, 0xCF, 0x22, 0x57, 0xDA, 0x27, 0x9B, 0x46, 0xA9, 0xD2, 0x69, 0xD7, 0xF5, 0xAF, 0x60, 0x7F, 0x8B, 0x04, 0x9D, 0x17, 0xF8, 0x8C, 0x53, 0xBF, 0x8A, 0xD5, 0xC9, 0x2D, 0x67, 0x0C, 0xFF, 0x68, 0xA7, 0xE4, 0x34, 0x2E, 0x5B, 0xDC, 0x1C, 0x94, 0x32, 0x69, 0xC9, 0xCA, 0xFA, 0xF5, 0x51, 0x70, 0x07, 0xAB, 0xA6, 0xC0, 0xB7, 0xB3, 0x69, 0x93, 0xF6, 0x99, 0xFD, 0xCE, 0x9A, 0xDD, 0xEA, 0x30, 0xBA, 0x9D, 0x7E, 0x37, 0x5C, 0x65, 0xA1, 0xD1, 0x4D, 0x02, 0x8F, 0x71, 0x0E, 0x8F, 0xAC, 0xEC, 0xEB, 0x2F, 0xD7, 0x2F, 0xAF, 0xED, 0xE9, 0xCF, 0xFE, 0x3E, 0xB0, 0xB2, 0x1D, 0x49, 0x3A, 0xBB, 0x44, 0xD9, 0xEC, 0x10, 0xF1, 0xA9, 0xE3, 0x69, 0x9D, 0xA7, 0xF7, 0xB5, 0x26, 0xA5, 0x7E, 0xA6, 0x43, 0x45, 0x8D, 0x4A, 0x7D, 0x9F, 0xBE, 0x41, 0x5F, 0x0B, 0x9B, 0x2C, 0xEE, 0x6A, 0x1F, 0x80, 0xEB, 0x2A, 0x07, 0x77, 0xAA, 0xB8, 0xBD, 0x45, 0x47, 0xB7, 0xA6, 0xF2, 0xDA, 0x32, 0xF1, 0xF5, 0x3C, 0x81, 0x43, 0xC2, 0x84, 0x91, 0x12, 0xE1, 0x94, 0x50, 0xE6, 0xB2, 0x5D, 0x62, 0x99, 0x57, 0x52, 0x57, 0x9A, 0xB4, 0xC5, 0xBA, 0xA0, 0xE1, 0x5F, 0x85, 0xD6, 0xA2, 0xD4, 0xB8, 0x1B, 0x68, 0x35, 0x9B, 0x6B, 0x98, 0x0C, 0x22, 0x95, 0x2F, 0x76, 0x9C, 0x11, 0x99, 0x17, 0xE1, 0x5B, 0x92, 0x44, 0x3D, 0x19, 0xF9, 0xEB, 0x3E, 0x8A, 0x6B, 0xE2, 0x8C, 0x23, 0xE3, 0x24, 0x1D, 0xA1, 0x63, 0x96, 0x4D, 0x96, 0x3E, 0xF3, 0x14, 0x74, 0xAD, 0x95, 0xF3, 0xAD, 0xCF, 0x34, 0x60, 0x4A, 0xD4, 0x62, 0xAF, 0x91, 0x00, 0x4E, 0x9B, 0x95, 0xE8, 0x3F, 0x80, 0xA5, 0x4C, 0x70, 0x7B, 0x9C, 0xDC, 0x50, 0x74, 0x73, 0xF3, 0x58, 0xB9, 0x3C, 0xBD, 0x65, 0x5D, 0x90, 0xFC, 0x7A, 0x5C, 0xF1, 0x4A, 0x4B, 0x85, 0x2E, 0x74, 0xDA, 0xC0, 0x38, 0xE5, 0x04, 0x4F, 0xDB, 0xCE, 0xFB, 0xCA, 0xCD, 0xD6, 0xDD, 0x0D, 0x93, 0x00, 0xE3, 0x7F, 0x54, 0x3A, 0x38, 0xD1, 0x0C, 0xD5, 0x3F, 0x06, 0x43, 0x2B, 0xCC, 0xB7, 0xFE, 0x81, 0xF7, 0x17, 0x4D, 0xDF, 0x78, 0x09, 0x9E, 0x92, 0x7E, 0x6B, 0xCD, 0x3F, 0x70, 0x70, 0x1C, 0x38, 0x7C, 0x1F, 0x3A, 0x13, 0x5A, 0xD7, 0xBF, 0x0B, 0xCA, 0xF2, 0xCC, 0xEF, 0x48, 0x80, 0xC6, 0x5A, 0xDD, 0xAD, 0x6F, 0x03, 0xBB, 0xFF, 0xBB, 0xD0, 0x09, 0x8C, 0x32, 0x2B, 0xD0, 0x5F, 0x01, 0x2D, 0x2B, 0xCC, 0xB7, 0x7C, 0xC2, 0x6F, 0x16, 0x9C, 0xD8, 0x38, 0x1E, 0xEB, 0x4B, 0x7F, 0xB1, 0x1A, 0x51, 0x6F, 0x8E, 0x95, 0x2C, 0x7F, 0xAC, 0xFA, 0x12, 0x32, 0xBD, 0xDF, 0x16, 0x7D, 0xE6, 0xD1, 0xD1, 0xBE, 0x07, 0x29, 0xB0, 0x12, 0xD5, 0xC7, 0x41, 0xAB, 0x2C, 0x92, 0xAA, 0x3F, 0x81, 0x26, 0x33, 0xAE, 0x7E, 0x15, 0xF8, 0x77, 0x05, 0xB8, 0xB9, 0xDB, 0xF0, 0xBA, 0x90, 0xB1, 0xBE, 0x47, 0x77, 0x37, 0xBD, 0x63, 0x95, 0x97, 0xA6, 0x25, 0x76, 0xFC, 0xD0, 0x73, 0xD2, 0x2B, 0xD8, 0xA7, 0xAF, 0x1E, 0x2F, 0x75, 0xB7, 0xED, 0x98, 0xA9, 0xFA, 0x9F, 0x55, 0x77, 0xFD, 0x24, 0xB8, 0xC3, 0xC2, 0x54, 0xBD, 0x11, 0x3C, 0x66, 0xB6, 0x4C, 0x5F, 0x05, 0x8E, 0x2D, 0x8B, 0xD9, 0x74, 0xA3, 0xFE, 0x59, 0xFE, 0xD5, 0xF5, 0x39, 0xB5, 0x07, 0xD2, 0xFD, 0x46, 0x3A, 0x8C, 0x6F, 0x63, 0xDF, 0x0F, 0x7E, 0x33, 0xCC, 0x0B, 0x59, 0xD5, 0xDB, 0xA1, 0x79, 0xE5, 0x3E, 0xB5, 0xFD, 0x34, 0x1E, 0x63, 0x3D, 0xA5, 0xEE, 0x04, 0xD2, 0x4B, 0x99, 0x5C, 0xCD, 0x86, 0xFE, 0x5A, 0x68, 0xA1, 0xB7, 0x00, 0xFE, 0x2D, 0xB9, 0xB5, 0xE9, 0x77, 0x6B, 0x4D, 0x9E, 0x60, 0x7D, 0x44, 0x33, 0x2B, 0xAD, 0x72, 0x64, 0x45, 0xFD, 0x97, 0xD8, 0x0F, 0x83, 0xED, 0x26, 0xB7, 0x90, 0x8F, 0xBD, 0x29, 0xFA, 0x23, 0x1E, 0xA3, 0xDA, 0x25, 0xE4, 0x6C, 0xEB, 0x4F, 0x75, 0x1C, 0x94, 0xA4, 0x9C, 0xAE, 0x5E, 0x00, 0xF9, 0x2D, 0x3C, 0xA9, 0xBB, 0x0C, 0x5C, 0x2C, 0x39, 0xB8, 0x39, 0xB7, 0x3B, 0x2B, 0xAF, 0x7C, 0x5D, 0x68, 0x87, 0x21, 0x25, 0x6D, 0xC4, 0xD4, 0x7C, 0x67, 0xF1, 0xB1, 0xC1, 0xBA, 0xFA, 0xE5, 0x41, 0xB2, 0x5E, 0x81, 0x71, 0xB6, 0x7B, 0x79, 0xDB, 0x7B, 0xCD, 0x04, 0x9B, 0xE7, 0xB5, 0xEF, 0x54, 0x5E, 0xD4, 0x75, 0x86, 0xE3, 0x10, 0xD3, 0xBC, 0x41, 0xD7, 0x0E, 0x1C, 0x3C, 0xE0, 0xC6, 0x5F, 0x5D, 0x12, 0xB4, 0xB1, 0x40, 0x64, 0x55, 0x09, 0xF4, 0x51, 0x24, 0x6D, 0x9C, 0xEA, 0xEA, 0x3A, 0xD9, 0x73, 0xE1, 0x3C, 0xA9, 0x5C, 0xB9, 0x58, 0x42, 0xE6, 0x9E, 0x83, 0xC2, 0x14, 0x73, 0x83, 0x12, 0xD0, 0xAB, 0xC0, 0x65, 0xC7, 0xBD, 0xD8, 0x54, 0x28, 0xD6, 0x7A, 0x00, 0xFB, 0x05, 0xFD, 0xBB, 0xFB, 0x4F, 0xD5, 0x4A, 0xFE, 0xAC, 0x75, 0x9F, 0xF9, 0xB6, 0x22, 0xC7, 0x25, 0xAB, 0x44, 0xE5, 0x12, 0xAE, 0xFE, 0x82, 0x94, 0x90, 0x5B, 0x88, 0x9B, 0x14, 0xA1, 0x4A, 0xB3, 0xEC, 0x5E, 0xD0, 0x00, 0xA6, 0x05, 0x9C, 0x42, 0xF9, 0xD0, 0x86, 0x45, 0x37, 0xD5, 0xE7, 0xE0, 0x42, 0xEB, 0x99, 0xD8, 0x35, 0x78, 0x78, 0xD7, 0x68, 0xA6, 0x25, 0x74, 0x7B, 0xAD, 0x84, 0xB3, 0x18, 0x96, 0x74, 0x9D, 0x14, 0x10, 0xF0, 0x1F, 0x9D, 0xB3, 0xF8, 0x05, 0x12, 0x2A, 0x8C, 0x90, 0xBB, 0x22, 0x87, 0x33, 0x3A, 0x81, 0x3B, 0xA8, 0xB9, 0xFF, 0x01, 0xE4, 0x2B, 0x32, 0xB2, 0x28, 0x50, 0xDD, 0x82, 0x48, 0xAD, 0x1A, 0xB0, 0xAD, 0x48, 0xC1, 0x8E, 0x84, 0x8A, 0x05, 0x3A, 0xCD, 0xC8, 0x25, 0xB6, 0xB9, 0x76, 0x4F, 0x47, 0x34, 0x8F, 0xD0, 0xD4, 0x6A, 0x1E, 0x8A, 0x28, 0xA4, 0x46, 0x00, 0x4B, 0x3F, 0x12, 0x11, 0x99, 0x42, 0x60, 0x2E, 0x36, 0xE0, 0x0F, 0x22, 0xFD, 0xAA, 0x25, 0x0E, 0xD7, 0xD4, 0x5C, 0xB4, 0xD4, 0xCA, 0x11, 0x5B, 0x8A, 0x5C, 0xDB, 0x36, 0x54, 0x86, 0x36, 0x7A, 0x8E, 0xD8, 0x30, 0x85, 0xF5, 0xF3, 0xDA, 0xAD, 0xB8, 0x0E, 0xA6, 0x16, 0x4D, 0xAE, 0xE0, 0x94, 0xD1, 0x9A, 0x3F, 0x41, 0xF2, 0x48, 0x7F, 0x22, 0x7D, 0x99, 0x12, 0xD2, 0xF0, 0xFD, 0xA3, 0x91, 0x7C, 0xAC, 0xD3, 0x61, 0xAB, 0x3A, 0x5D, 0x65, 0xCB, 0xF8, 0x83, 0x75, 0xA3, 0x66, 0x5B, 0x73, 0x4B, 0xDB, 0x7B, 0x66, 0xAC, 0xFC, 0x58, 0x19, 0xD8, 0x39, 0xAD, 0x63, 0x72, 0x95, 0xA1, 0xD5, 0x59, 0x63, 0xCB, 0x1F, 0x6C, 0x8C, 0xE5, 0x15, 0x48, 0xFE, 0xAA, 0x73, 0x48, 0xB3, 0x56, 0x0C, 0x18, 0x7E, 0xF8, 0x97, 0x23, 0x93, 0x88, 0xED, 0x0E, 0xFB, 0xD5, 0x51, 0xAA, 0xC7, 0x56, 0x63, 0xB0, 0x15, 0xE8, 0xE2, 0x2D, 0xE2, 0x12, 0xAB, 0xE1, 0x03, 0xCB, 0xEB, 0x2B, 0x8C, 0x83, 0xF3, 0x5A, 0xC3, 0xD8, 0x9B, 0x7A, 0x5F, 0x10, 0x41, 0xBC, 0x53, 0x5D, 0x49, 0xBC, 0x4E, 0xF1, 0xD8, 0xD6, 0xDC, 0x74, 0xAA, 0x7C, 0x7F, 0x5D, 0x90, 0x7F, 0x3E, 0xBC, 0x4D, 0x6B, 0xE3, 0x70, 0x5D, 0x1D, 0xA1, 0x3E, 0x66, 0x15, 0x86, 0x1D, 0x45, 0xC9, 0x4D, 0x77, 0x8A, 0x8D, 0x1B, 0xFE, 0x0C, 0x25, 0x97, 0xEB, 0xD7, 0xCC, 0x6B, 0x7A, 0xCD, 0xBA, 0x36, 0xCC, 0xC1, 0xAE, 0xF0, 0x26, 0x2E, 0x5D, 0xC7, 0x25, 0x44, 0x05, 0xDD, 0x16, 0xE9, 0x15, 0xF2, 0x88, 0x26, 0xA1, 0xDF, 0x2E, 0x58, 0xA2, 0x77, 0x5E, 0xB4, 0x50, 0x1D, 0x83, 0xB5, 0x5A, 0xDD, 0xC3, 0x5E, 0xA1, 0xC7, 0x36, 0xE9, 0x8B, 0x05, 0xBB, 0xE7, 0x0F, 0x8D, 0x2D, 0x3B, 0xBB, 0x35, 0xB2, 0xD9, 0x81, 0x35, 0xBC, 0xCE, 0x02, 0xCF, 0xE5, 0x6E, 0x5A, 0xC1, 0xE7, 0x70, 0x45, 0x66, 0xFD, 0xC1, 0xA9, 0x53, 0xE5, 0x21, 0xAD, 0x45, 0x7E, 0x23, 0x30, 0xD5, 0xB0, 0x62, 0xD1, 0x5B, 0x75, 0x06, 0xEE, 0x6F, 0x7D, 0x11, 0xA7, 0xA9, 0x26, 0xED, 0x48, 0x90, 0x5D, 0x2E, 0x79, 0x3C, 0x02, 0xC9, 0x1F, 0x55, 0xBE, 0x6E, 0xCF, 0x51, 0x7A, 0x70, 0x99, 0xC4, 0x0F, 0x60, 0x93, 0xB0, 0x47, 0x20, 0x81, 0x52, 0xA5, 0x11, 0x59, 0x62, 0xA4, 0x58, 0xE1, 0x1F, 0x78, 0x52, 0x4D, 0x01, 0x8E, 0x39, 0x4E, 0xC4, 0xA7, 0x42, 0xE3, 0xAD, 0x6E, 0xE0, 0x77, 0xA0, 0xD6, 0xCD, 0xF1, 0xE2, 0x4E, 0xFE, 0xB2, 0xE5, 0x6F, 0xA5, 0x98, 0x88, 0xD2, 0xFA, 0x4E, 0x2E, 0x96, 0xEC, 0x20, 0x8C, 0xCA, 0x4C, 0xF9, 0x7C, 0xBE, 0x15, 0x18, 0xA4, 0x5C, 0x9C, 0xF1, 0x0E, 0x5E, 0x07, 0xBA, 0xF9, 0x8B, 0x54, 0xFF, 0x40, 0x5D, 0x0E, 0x5F, 0xB0, 0x63, 0xB0, 0xBB, 0x55, 0x3E, 0xBE, 0x0C, 0x16, 0x6E, 0xEC, 0x13, 0x94, 0x80, 0xE0, 0x10, 0x5F, 0xF4, 0x09, 0xFC, 0xD9, 0x7C, 0x49, 0xDA, 0x0C, 0xC7, 0xE1, 0x33, 0xE5, 0x0F, 0x11, 0x33, 0xEE, 0x7A, 0x60, 0x3C, 0xC2, 0x4C, 0xD3, 0xC1, 0x63, 0x90, 0xD5, 0x7E, 0x22, 0x55, 0x31, 0x62, 0x72, 0xE0, 0x61, 0x3A, 0x24, 0x99, 0xF1, 0x11, 0x97, 0x23, 0xEE, 0xEB, 0x30, 0xDE, 0x56, 0x4D, 0xE2, 0xB2, 0x72, 0x41, 0x2B, 0xD9, 0xDB, 0x38, 0x2C, 0xEE, 0x20, 0x33, 0x54, 0xCF, 0x65, 0xF9, 0xC4, 0x6E, 0x0E, 0x4D, 0x39, 0x0E, 0xDF, 0x93, 0x56, 0x0B, 0x05, 0x61, 0x59, 0x7E, 0x6D, 0xAA, 0xF1, 0x2A, 0x9E, 0x43, 0x28, 0x56, 0x84, 0x7A, 0x32, 0xD6, 0xE3, 0x25, 0xC8, 0x9A, 0xB5, 0x1B, 0x39, 0x9C, 0xDA, 0x13, 0xFD, 0x23, 0x7C, 0x57, 0xD3, 0x81, 0xFA, 0xF9, 0xA2, 0xA2, 0x1A, 0x47, 0x74, 0xB5, 0x94, 0x51, 0x1D, 0x54, 0xB5, 0x59, 0xFE, 0x47, 0x3F, 0x35, 0x4D, 0x02, 0x12, 0x1A, 0x7B, 0x3F, 0x4F, 0xF4, 0x00, 0x16, 0xEF, 0x30, 0x1E, 0x8B, 0x41, 0x5F, 0x33, 0x6A, 0xF0, 0x22, 0xE4, 0xDF, 0x35, 0xDD, 0x55, 0xE5, 0x1D, 0xEE, 0x7D, 0x6A, 0xDE, 0x9C, 0x36, 0x41, 0xDD, 0x6D, 0xA1, 0x63, 0x33, 0x84, 0x32, 0x24, 0xB3, 0x1A, 0x4A, 0xAA, 0x16, 0xC9, 0x27, 0xD4, 0xBA, 0xA6, 0xD6, 0x01, 0xA7, 0x0D, 0x90, 0xAF, 0x08, 0x55, 0x13, 0x91, 0xF6, 0xC7, 0xB0, 0x00, 0xD5, 0x12, 0x86, 0x16, 0x67, 0xA2, 0x33, 0x46, 0xC6, 0xB1, 0x33, 0x07, 0x13, 0x7A, 0x17, 0x71, 0xCD, 0x96, 0x5A, 0xD6, 0x5D, 0x16, 0x4C, 0x5A, 0xF2, 0x17, 0xB2, 0x5F, 0xFC, 0x57, 0x87, 0x8A, 0x1D, 0x2E, 0xF3, 0x6F, 0x99, 0x95, 0xEA, 0x02, 0xD8, 0xD4, 0x96, 0xF8, 0xFE, 0x8D, 0xFA, 0x68, 0x54, 0xF6, 0x7B, 0x31, 0x57, 0x75, 0x09, 0x63, 0x18, 0x97, 0xA1, 0xDE, 0x2B, 0x09, 0x56, 0xD1, 0xDA, 0x80, 0x9E, 0x27, 0x9C, 0xC4, 0x91, 0x39, 0xA6, 0x93, 0x7C, 0xC5, 0xE0, 0x6F, 0xD8, 0x46, 0x04, 0xF7, 0x0D, 0xB1, 0xE6, 0x49, 0x0F, 0x77, 0x0A, 0x52, 0x8E, 0x29, 0x77, 0x35, 0x86, 0xFB, 0xBC, 0x47, 0x3E, 0xE8, 0x64, 0x0E, 0xA3, 0x31, 0x06, 0x66, 0x66, 0x45, 0xC1, 0x71, 0x94, 0xBD, 0x62, 0x13, 0x73, 0xC3, 0x36, 0xCF, 0x9E, 0xA9, 0x55, 0xCB, 0x37, 0xF2, 0x4C, 0x01, 0xFC, 0xF9, 0xAB, 0x0F, 0x41, 0xAB, 0x44, 0xF4, 0xE5, 0x36, 0xCC, 0xBB, 0xD2, 0xB4, 0xDE, 0xD2, 0xE4, 0x57, 0x4A, 0x51, 0x8B, 0xDE, 0xE7, 0x23, 0xB2, 0xD5, 0xB0, 0xC0, 0xA1, 0x16, 0x9B, 0x8F, 0xED, 0xB7, 0xBA, 0x83, 0xD7, 0xA3, 0x4B, 0x56, 0x05, 0x23, 0x2F, 0xCB, 0x4E, 0xF7, 0xCD, 0x47, 0x3E, 0x33, 0xAF, 0xD5, 0x8D, 0x41, 0x1E, 0xF2, 0x04, 0xB0, 0x00, 0x4D, 0x15, 0xBE, 0x67, 0x19, 0xD1, 0x5F, 0xD2, 0xCC, 0xD4, 0x4E, 0xF5, 0x54, 0x85, 0x8B, 0x3F, 0x80, 0x6D, 0x01, 0x4E, 0x38, 0x68, 0x08, 0x27, 0xF0, 0x16, 0xE3, 0x28, 0x71, 0x06, 0x4A, 0x5E, 0xE1, 0x0C, 0x45, 0xF1, 0x4F, 0xF7, 0xD4, 0x41, 0xF7, 0x85, 0xAB, 0x6A, 0x23, 0x61, 0xAE, 0xC4, 0x03, 0x3E, 0x8D, 0x38, 0xC8, 0x8E, 0xB2, 0x92, 0x91, 0x0F, 0x4A, 0xBB, 0x94, 0x27, 0x2A, 0x0E, 0x38, 0xCF, 0x37, 0x13, 0x03, 0x21, 0xC8, 0x7E, 0x0B, 0x7E, 0x1F, 0xFE, 0x8B, 0x21, 0x23, 0x30, 0xD8, 0x7F, 0x88, 0xA3, 0x7C, 0x00, 0x84, 0x76, 0xDD, 0x02, 0x8E, 0x01, 0x67, 0xAB, 0x6F, 0x83, 0x7D, 0x50, 0x04, 0xB8, 0x05, 0x3A, 0x05, 0x87, 0x33, 0x7D, 0xE0, 0x67, 0xF0, 0x9F, 0xA4, 0x0B, 0xE8, 0x45, 0x04, 0xF4, 0x59, 0x8D, 0x2D, 0x40, 0x32, 0xED, 0xAB, 0xF0, 0x3E, 0x64, 0x01, 0x23, 0x82, 0x88, 0x83, 0x7F, 0x2C, 0x0B, 0x55, 0xFC, 0x45, 0x04, 0x76, 0x20, 0x8A, 0xA3, 0xC4, 0x68, 0xFD, 0x05, 0xE5, 0x6D, 0xFC, 0x9D, 0x72, 0x27, 0x28, 0xC7, 0xC1, 0xCA, 0xB9, 0xD0, 0x47, 0xEC, 0x55, 0xD2, 0x3B, 0x74, 0xB2, 0xFA, 0x96, 0x2F, 0xA2, 0xDE, 0xA3, 0x9A, 0x6B, 0x8F, 0xE2, 0x00, 0xF2, 0x86, 0x61, 0x4B, 0x78, 0x23, 0xA2, 0x81, 0x0A, 0x99, 0xB9, 0xF1, 0x5E, 0xEB, 0x2D, 0x79, 0xA6, 0x11, 0xD5, 0xEE, 0x57, 0x5C, 0xAF, 0x8E, 0x53, 0x78, 0x03, 0x2C, 0xFD, 0x40, 0xC5, 0x59, 0xF0, 0xBB, 0xF6, 0xDF, 0x64, 0x1B, 0xA4, 0x80, 0x94, 0xFA, 0xBC, 0x54, 0x43, 0xEA, 0x4B, 0xF6, 0x51, 0x78, 0x05, 0xDA, 0xC3, 0x98, 0x43, 0x78, 0x21, 0xC3, 0xFD, 0xF6, 0x92, 0xCD, 0x2D, 0xEB, 0x5A, 0x0D, 0xD2, 0x0F, 0xCD, 0x73, 0xB5, 0x17, 0xE5, 0x17, 0x1A, 0x43, 0xE5, 0x61, 0x4A, 0xBC, 0x6E, 0x45, 0x85, 0x25, 0xB8, 0xA0, 0x86, 0x95, 0x64, 0x0B, 0x9F, 0xD4, 0x87, 0x78, 0xF7, 0xA8, 0x23, 0xF1, 0x21, 0xBB, 0xBB, 0x78, 0xA6, 0xCA, 0x8F, 0xF1, 0x17, 0xE1, 0x83, 0x1C, 0xE8, 0x55, 0x8B, 0x35, 0xFD, 0x41, 0xAD, 0x5B, 0xA4, 0xA3, 0x97, 0xC8, 0x74, 0xB6, 0xB2, 0xB5, 0x5D, 0x53, 0xE4, 0x98, 0x22, 0xA3, 0xCD, 0xAF, 0xAC, 0x13, 0x00, 0x1A, 0xCF, 0x24, 0xDE, 0x86, 0x43, 0x6A, 0x6E, 0x79, 0xDB, 0xA9, 0x47, 0x91, 0x6B, 0xEC, 0xD6, 0xE3, 0xA1, 0xAA, 0xDB, 0x96, 0x5F, 0xFF, 0xDB, 0x75, 0xA1, 0xD7, 0x20, 0xE2, 0xAE, 0x1C, 0x6E, 0x3E, 0x22, 0x09, 0x5A, 0x9E, 0xA8, 0xF1, 0x90, 0x51, 0x97, 0x5E, 0x96, 0xF6, 0xCB, 0x6F, 0xF5, 0xFC, 0x28, 0xCD, 0x52, 0xFE, 0x69, 0x77, 0x48, 0x8C, 0x84, 0x4E, 0xD5, 0x77, 0x7B, 0xCF, 0x55, 0xED, 0xD6, 0x22, 0x76, 0x67, 0x70, 0x2B, 0x35, 0xC2, 0x70, 0x26, 0x1C, 0x91, 0x57, 0x3D, 0xE7, 0x85, 0xAF, 0x36, 0xDA, 0x36, 0x4D, 0x14, 0xF3, 0xD7, 0x56, 0x91, 0xDE, 0xD2, 0x95, 0x2B, 0xA3, 0x24, 0x3D, 0xF2, 0xBA, 0x65, 0x7F, 0x95, 0x7C, 0x51, 0x1A, 0xBB, 0xFF, 0x4D, 0x58, 0x0E, 0xB1, 0x9A, 0x76, 0x7A, 0xB3, 0x54, 0x6A, 0xFD, 0x02, 0x7B, 0x3F, 0x7C, 0x22, 0x36, 0x93, 0xD1, 0x47, 0xD0, 0xD1, 0xE9, 0xBD, 0xC1, 0xDA, 0xA9, 0x15, 0x51, 0x2D, 0x54, 0x8D, 0x2B, 0xDB, 0x46, 0x53, 0x42, 0xDA, 0xF0, 0x96, 0xCA, 0xA6, 0x11, 0x4A, 0xE1, 0xA7, 0xD2, 0x09, 0x44, 0x9C, 0xE4, 0x79, 0xA2, 0x1B, 0x41, 0x93, 0xDF, 0xF6, 0xB6, 0x23, 0xBA, 0x81, 0x7E, 0xBB, 0x34, 0xD2, 0x0F, 0xBC, 0x65, 0xC9, 0x26, 0x09, 0xA8, 0xB0, 0xCB, 0x93, 0xB8, 0xC2, 0x7F, 0xD3, 0x40, 0x12, 0xA1, 0xC2, 0xAD, 0x64, 0x06, 0xDE, 0x20, 0x7E, 0x2E, 0xDD, 0x8F, 0xB3, 0x64, 0x2D, 0x25, 0x9B, 0x71, 0x47, 0xC5, 0xDA, 0x84, 0x74, 0x5C, 0x01, 0xB4, 0x79, 0x71, 0x88, 0x34, 0xC8, 0xC1, 0x6E, 0x36, 0xF1, 0x05, 0xBA, 0x62, 0x59, 0x49, 0x86, 0xC1, 0x0B, 0x3B, 0x93, 0x31, 0x91, 0xA2, 0xB0, 0x1E, 0xC6, 0xBC, 0x94, 0x43, 0xD8, 0x20, 0x36, 0x19, 0x74, 0x16, 0xEB, 0x30, 0x0F, 0xC8, 0x58, 0xFC, 0x0D, 0xA3, 0xC2, 0x36, 0xF1, 0x96, 0xD8, 0x65, 0x78, 0xBF, 0xD7, 0x5F, 0xF8, 0x6F, 0xF8, 0xBE, 0xDD, 0x2C, 0x62, 0x1F, 0x7C, 0xD2, 0x52, 0x47, 0xCE, 0x82, 0xF7, 0xB4, 0x42, 0xAA, 0x66, 0xF5, 0xE5, 0xBA, 0x10, 0x15, 0x80, 0x79, 0x60, 0x33, 0x54, 0x3B, 0xB0, 0x62, 0x51, 0x86, 0xDA, 0x05, 0x4B, 0x28, 0xBA, 0xAB, 0x2E, 0x57, 0xDF, 0x8F, 0x93, 0x61, 0x91, 0x6A, 0x0B, 0x2F, 0x7B, 0x7C, 0x13, 0xDA, 0x6A, 0x17, 0x46, 0x74, 0x23, 0xF5, 0x96, 0x1B, 0x88, 0xDF, 0x88, 0x45, 0xFB, 0x7C, 0xB4, 0xD1, 0xB0, 0xDE, 0x34, 0x09, 0x4D, 0x37, 0x44, 0xA0, 0xC1, 0xE8, 0x12, 0xFD, 0x14, 0x01, 0x45, 0x65, 0xA9, 0x9B, 0x55, 0x70, 0x4B, 0x75, 0x58, 0x73, 0x2A, 0x4E, 0xAF, 0x3E, 0x40, 0xE8, 0xBC, 0x02, 0x70, 0x89, 0xDA, 0xCF, 0x2E, 0x86, 0xD0, 0xA1, 0xF6, 0x96, 0x9B, 0x89, 0x1F, 0x48, 0x74, 0x73, 0x15, 0x7C, 0xB8, 0x71, 0x45, 0xF5, 0x65, 0xF8, 0x61, 0x43, 0x28, 0xFC, 0x15, 0xE1, 0xD6, 0x45, 0xF1, 0x21, 0x74, 0xB6, 0x49, 0x5B, 0x38, 0x0A, 0xFD, 0x54, 0xBD, 0x32, 0x2E, 0x40, 0x1D, 0xA4, 0xFD, 0xE2, 0xF9, 0x1E, 0x77, 0xC6, 0x1E, 0xD9, 0x4D, 0x26, 0x44, 0xE8, 0x26, 0x4B, 0x92, 0xF8, 0x82, 0x64, 0x36, 0x9F, 0x82, 0x64, 0x3D, 0x13, 0x8D, 0x2C, 0xE8, 0xDF, 0xCE, 0x9F, 0x70, 0x29, 0xDC, 0xDA, 0xEE, 0xC5, 0x1B, 0x83, 0x24, 0x34, 0xDF, 0xCF, 0x5F, 0x81, 0x7A, 0xD7, 0x73, 0x63, 0xAF, 0xA8, 0x46, 0x8C, 0x63, 0x3D, 0x99, 0xD8, 0x53, 0x62, 0x9D, 0xED, 0x10, 0x91, 0xAA, 0x0A, 0xB4, 0xF4, 0x22, 0x5E, 0x20, 0x59, 0x4D, 0x4B, 0xA0, 0xF1, 0x43, 0x0B, 0x0D, 0xAB, 0x21, 0xE1, 0x40, 0x36, 0xE4, 0x07, 0xCF, 0xE9, 0x15, 0x72, 0xFE, 0xC0, 0xBB, 0x3B, 0xBF, 0xE7, 0x4F, 0x47, 0xF6, 0xB4, 0x2C, 0x8B, 0x4D, 0x55, 0x85, 0xD4, 0xB6, 0x7B, 0xCE, 0xC0, 0x56, 0x68, 0x22, 0x6C, 0x85, 0x84, 0xAB, 0x6A, 0xAB, 0xE5, 0x14, 0xE2, 0x2A, 0x92, 0xD3, 0xD0, 0x00, 0x76, 0xAD, 0x19, 0xAD, 0x3B, 0x02, 0xEE, 0x5B, 0xF9, 0x07, 0xEA, 0x80, 0xB8, 0x43, 0x22, 0x2E, 0x03, 0xF6, 0xEF, 0x3B, 0x98, 0xF7, 0x1E, 0xC9, 0xEE, 0xF4, 0x8C, 0x8D, 0x43, 0x6F, 0x35, 0xF0, 0xBD, 0x7C, 0x30, 0xA6, 0xF6, 0xB0, 0xED, 0x3A, 0x62, 0x9A, 0xDA, 0x99, 0xFE, 0x8B, 0x38, 0x82, 0x14, 0x37, 0x5C, 0x32, 0xE5, 0x56, 0xFA, 0x1A, 0x3E, 0x19, 0x37, 0xB1, 0x4F, 0x40, 0x4F, 0xAA, 0xE7, 0xF1, 0xF6, 0x72, 0xB3, 0xF5, 0xBD, 0xC2, 0x1F, 0x79, 0xAB, 0x74, 0x75, 0x92, 0xA6, 0x98, 0x37, 0xDA, 0x68, 0x39, 0xE6, 0xE1, 0xAB, 0x51, 0x02, 0xF9, 0x36, 0x0A, 0x8D, 0x15, 0x78, 0x9B, 0x3E, 0x41, 0x33, 0x06, 0x52, 0xD7, 0x6A, 0x8D, 0x99, 0xBC, 0xDB, 0xDA, 0x44, 0xC3, 0x4F, 0xC1, 0x19, 0xB0, 0x41, 0x2F, 0x17, 0x57, 0x70, 0x0B, 0x75, 0x90, 0xF4, 0x75, 0x5E, 0xB1, 0xB6, 0x5A, 0x31, 0x75, 0xF1, 0x51, 0xCD, 0x3A, 0xE5, 0x6F, 0xF7, 0x8D, 0x1A, 0x7B, 0xF0, 0x90, 0x0D, 0x4E, 0xBE, 0x81, 0x06, 0xE9, 0x69, 0xE4, 0x55, 0x78, 0x54, 0x1D, 0x66, 0xC8, 0x91, 0x7D, 0x26, 0x9F, 0xEB, 0x43, 0xE5, 0xBF, 0x15, 0x8F, 0x75, 0x4E, 0xCA, 0x65, 0x55, 0x1A, 0xAD, 0x14, 0xF4, 0xCA, 0xBD, 0xA2, 0xE9, 0x80, 0xEC, 0xA3, 0x35, 0x1A, 0x7B, 0xE8, 0x8B, 0xBB, 0x90, 0xBC, 0x0D, 0x67, 0xD9, 0xEC, 0x20, 0xF7, 0xC1, 0x42, 0xFA, 0x56, 0x72, 0x13, 0xAC, 0xAC, 0x59, 0xAF, 0xAB, 0x47, 0xB3, 0x48, 0x1B, 0xED, 0x1A, 0x95, 0xA3, 0x62, 0xA9, 0x76, 0xAC, 0x4A, 0xCD, 0xAE, 0xD0, 0xEC, 0x57, 0x3B, 0xE6, 0x74, 0x91, 0x3F, 0x55, 0xBB, 0xA3, 0x1A, 0xC8, 0x3D, 0x2A, 0x6F, 0xF7, 0x9D, 0xE4, 0x52, 0xE4, 0x99, 0xAD, 0x39, 0xD9, 0x8F, 0xCC, 0xB7, 0x9C, 0x41, 0xF6, 0xC3, 0xFB, 0xAA, 0x57, 0x6A, 0x37, 0x69, 0x77, 0x62, 0x1D, 0x9A, 0xCD, 0xDA, 0x43, 0xB2, 0x6C, 0xF2, 0x87, 0xA6, 0x8F, 0x79, 0x8F, 0xEC, 0xD0, 0x70, 0xB3, 0x03, 0xC9, 0x4A, 0x32, 0x28, 0x1A, 0x24, 0x83, 0x71, 0xA6, 0x47, 0x28, 0x59, 0xA6, 0x92, 0xDA, 0xA6, 0x92, 0xD5, 0xC8, 0x52, 0x4B, 0x06, 0xD9, 0x05, 0x5F, 0xD7, 0x7F, 0xD7, 0x18, 0xEA, 0x70, 0x35, 0x85, 0x5C, 0x5F, 0xAB, 0x92, 0x1C, 0x25, 0xDE, 0xD6, 0xDC, 0x60, 0x7E, 0x26, 0x10, 0x63, 0x7A, 0x76, 0x3C, 0xD1, 0xAB, 0xDF, 0x19, 0x7D, 0x85, 0x58, 0xAE, 0xD9, 0xE6, 0x11, 0x45, 0x4E, 0xC7, 0x26, 0xD9, 0xCE, 0x26, 0xF9, 0xA8, 0x19, 0xFD, 0x26, 0xD9, 0xFC, 0x1F, 0xB5, 0x99, 0xDC, 0xDC, 0x51, 0xA0, 0xBA, 0x44, 0xEC, 0x6B, 0xBB, 0x2D, 0x19, 0x43, 0x84, 0xB7, 0x24, 0x55, 0x22, 0xF8, 0xF7, 0xC6, 0x09, 0x59, 0x0D, 0xF8, 0xE3, 0x5A, 0x9F, 0x68, 0x47, 0x62, 0xAE, 0x21, 0xDB, 0x3D, 0x9B, 0x38, 0x82, 0xB7, 0xD9, 0x54, 0x92, 0x71, 0xA8, 0x96, 0x9E, 0x4E, 0x92, 0xF0, 0x49, 0xED, 0x15, 0x72, 0x7A, 0xFF, 0x7B, 0x94, 0x4B, 0xE4, 0xF6, 0xB2, 0xC4, 0x7E, 0xF8, 0xD7, 0xAE, 0x57, 0xE5, 0x56, 0xF8, 0x92, 0xB6, 0xED, 0x99, 0x3A, 0x5C, 0xDB, 0xE4, 0x1A, 0x15, 0x86, 0xEF, 0xAF, 0x31, 0xB9, 0x95, 0x10, 0x6D, 0xC4, 0x7D, 0xEB, 0x13, 0xA4, 0x13, 0x7A, 0x9D, 0x76, 0x9B, 0x14, 0xC0, 0xDB, 0xB5, 0x39, 0x04, 0x7B, 0xE5, 0x28, 0x24, 0x11, 0x3F, 0x3C, 0xB4, 0x57, 0x32, 0x1B, 0xF7, 0x5F, 0x9A, 0x53, 0x21, 0xC4, 0x69, 0x3D, 0x85, 0x19, 0x2B, 0xF1, 0xBC, 0x36, 0x41, 0xE4, 0x69, 0x1C, 0xAE, 0xB3, 0x76, 0xAB, 0x25, 0x38, 0x1A, 0x0B, 0xEB, 0x7A, 0x72, 0x96, 0xCA, 0x89, 0x86, 0x93, 0xF9, 0xF0, 0x4A, 0x82, 0xD3, 0x52, 0x52, 0xB9, 0x1A, 0xD2, 0x34, 0x39, 0x54, 0xB9, 0x08, 0xBF, 0xD7, 0x1F, 0xE7, 0x3D, 0x2C, 0xAB, 0xAF, 0x55, 0x0A, 0xC1, 0x0C, 0x6A, 0x4D, 0xB9, 0xC4, 0x3A, 0x92, 0x62, 0xF8, 0x24, 0xA7, 0xB8, 0xEA, 0x74, 0xDD, 0xCA, 0x1F, 0x56, 0x5B, 0xB4, 0x96, 0xE0, 0x3E, 0xEA, 0x88, 0x86, 0x80, 0x30, 0x7C, 0x79, 0xD3, 0x0A, 0xDE, 0x4C, 0xE8, 0x5E, 0xC3, 0x66, 0x81, 0x8D, 0xF0, 0x72, 0x9D, 0x44, 0x64, 0x2A, 0xFB, 0x65, 0xEA, 0x90, 0x8E, 0x49, 0xFF, 0x64, 0xEC, 0x97, 0x3B, 0x45, 0x64, 0x19, 0xD4, 0xCA, 0x00, 0x97, 0x1F, 0x3A, 0x1F, 0x30, 0xD4, 0xEA, 0x9A, 0xE6, 0x2D, 0x94, 0x47, 0xA3, 0x68, 0x58, 0xD0, 0x39, 0x3C, 0xB3, 0xE1, 0x8B, 0x54, 0x05, 0x4E, 0xA8, 0xF7, 0x91, 0xDB, 0xF1, 0x56, 0xD7, 0xE6, 0x2A, 0xA2, 0x4A, 0x03, 0x6A, 0x6A, 0x94, 0x07, 0xD3, 0x37, 0x56, 0x5F, 0x02, 0x47, 0x87, 0xB7, 0xE8, 0x7F, 0x82, 0xEF, 0x5D, 0x3E, 0x68, 0x9F, 0x41, 0xC3, 0xD6, 0x3E, 0x9A, 0xC3, 0xD0, 0x0F, 0xDA, 0xA0, 0x26, 0x0E, 0xA6, 0xE0, 0x81, 0xF5, 0x1A, 0x38, 0x15, 0x70, 0xAF, 0xBD, 0x8F, 0xAC, 0xE1, 0x06, 0x99, 0x42, 0x90, 0xAB, 0xC5, 0x3B, 0x8C, 0x5B, 0xD1, 0xB2, 0xB4, 0xF9, 0xD5, 0xFE, 0x68, 0x79, 0xF8, 0x74, 0x7D, 0x3B, 0xF2, 0xD6, 0x75, 0xBF, 0x76, 0x1B, 0x32, 0xD6, 0xFA, 0x88, 0x66, 0x08, 0xD6, 0xD3, 0xA7, 0x69, 0x3C, 0xE1, 0x64, 0x74, 0x7F, 0x9D, 0x9E, 0x34, 0x28, 0x30, 0xD3, 0x6F, 0x72, 0x23, 0x77, 0x65, 0x4D, 0x2C, 0x71, 0xB5, 0xE8, 0x75, 0xF5, 0x09, 0x62, 0x20, 0xA5, 0xE9, 0xBF, 0x18, 0x6B, 0xC3, 0xFE, 0xE8, 0x19, 0xEA, 0xCF, 0x6E, 0x0E, 0x5A, 0x04, 0xE5, 0x5B, 0x7F, 0xD7, 0xD4, 0xC0, 0xDF, 0xE9, 0x0E, 0x1A, 0x3B, 0x38, 0x1F, 0xA1, 0xD4, 0x2E, 0xAF, 0xC9, 0x90, 0x1D, 0x34, 0x51, 0x8D, 0x75, 0x9C, 0x22, 0x63, 0x71, 0x35, 0xA7, 0x28, 0xC6, 0x70, 0x58, 0xFF, 0x3D, 0xC5, 0x4E, 0x7F, 0x58, 0xBB, 0x29, 0x6C, 0x83, 0xAE, 0x8E, 0x9C, 0xEF, 0x5A, 0xAA, 0x75, 0x54, 0x3D, 0xB0, 0x6E, 0xD4, 0xF0, 0x91, 0x22, 0xDA, 0x23, 0x0D, 0x05, 0x4E, 0x84, 0x6E, 0x9B, 0xAE, 0xB6, 0xB8, 0x4B, 0xCD, 0x6B, 0x5C, 0x9B, 0x69, 0xAC, 0x4F, 0xD5, 0x23, 0x8D, 0xF3, 0x0B, 0xCF, 0x1A, 0x7C, 0xEA, 0x38, 0x29, 0x97, 0x74, 0xBF, 0x6B, 0xC6, 0x84, 0xFE, 0xD0, 0x7E, 0xD6, 0x85, 0xBB, 0xD8, 0x69, 0xEE, 0x62, 0xEE, 0x56, 0xDB, 0x35, 0x89, 0xC8, 0x6A, 0x5A, 0x98, 0x66, 0x06, 0xEC, 0x04, 0xEE, 0x35, 0xB1, 0x7B, 0x46, 0x8B, 0xCF, 0x19, 0x0F, 0x77, 0xDE, 0x61, 0x6D, 0xAF, 0x8E, 0x6C, 0x9F, 0x5C, 0xF0, 0x40, 0x7F, 0xB6, 0x79, 0x67, 0xF2, 0x4B, 0xDD, 0x9A, 0xFA, 0x9C, 0x90, 0x5D, 0xDA, 0x75, 0x86, 0xC7, 0x4E, 0x4F, 0x35, 0xBB, 0xF0, 0x60, 0xC6, 0x53, 0x8D, 0x17, 0xF2, 0x80, 0x3A, 0x44, 0xFE, 0x82, 0x27, 0x80, 0xAC, 0x9A, 0xF5, 0xCB, 0x7E, 0x0A, 0xDF, 0x55, 0xBF, 0xEC, 0xAF, 0x61, 0x2E, 0x33, 0x1C, 0xEF, 0x49, 0x29, 0xE8, 0xD6, 0x2F, 0xEF, 0xB0, 0x4E, 0xBC, 0xAF, 0x43, 0x9B, 0xCE, 0x06, 0xAF, 0xD2, 0x6E, 0xA8, 0xE1, 0x3B, 0x1E, 0xD5, 0x1C, 0x26, 0xA2, 0x18, 0x51, 0x1A, 0x5B, 0x74, 0x2E, 0xD5, 0x99, 0x7C, 0x0A, 0x3D, 0x92, 0x8D, 0xEA, 0xF5, 0x64, 0x2E, 0xE5, 0x4F, 0xEA, 0xBE, 0xCF, 0x46, 0xCB, 0x4B, 0x3A, 0xBC, 0xB8, 0x0F, 0x73, 0x69, 0x2D, 0x4F, 0x04, 0x40, 0xA2, 0x7F, 0x63, 0x9D, 0xD8, 0x2A, 0x78, 0x65, 0x6D, 0x8D, 0x2C, 0xC8, 0x69, 0x81, 0xE1, 0xAD, 0x92, 0xB4, 0xEC, 0xD3, 0x85, 0x80, 0x4A, 0x8A, 0x8D, 0xD6, 0x0C, 0x4A, 0x96, 0x2E, 0xE9, 0xF9, 0xC1, 0xAD, 0xE6, 0xA5, 0x75, 0x29, 0xF8, 0xF5, 0xE5, 0xC1, 0xED, 0xEE, 0xC2, 0xFD, 0xB9, 0x7F, 0xB5, 0xD8, 0x8A, 0x47, 0x12, 0xE4, 0x0D, 0xFF, 0x93, 0xBE, 0x0C, 0xB6, 0x32, 0xFD, 0x54, 0x38, 0x3A, 0xDE, 0x34, 0xB4, 0x00, 0xF5, 0x96, 0x0F, 0x75, 0x73, 0xC1, 0xA7, 0x94, 0x11, 0xED, 0x04, 0x08, 0x96, 0xB8, 0x75, 0x1F, 0x13, 0xFF, 0xC3, 0x31, 0x74, 0x5A, 0x49, 0x4F, 0x94, 0x2D, 0x6B, 0x7D, 0x29, 0xFB, 0x95, 0x93, 0xD2, 0xBC, 0x50, 0x61, 0x96, 0x60, 0xD7, 0xF0, 0xB7, 0xB2, 0x36, 0xE8, 0xA6, 0xA9, 0x04, 0xD8, 0xE9, 0xF8, 0xD9, 0x10, 0x08, 0x9E, 0x61, 0xA4, 0x6A, 0xFF, 0x85, 0x2A, 0xA9, 0xFE, 0x9A, 0x77, 0xD0, 0xA0, 0xD8, 0xBB, 0x4B, 0x04, 0x7C, 0xAF, 0xFA, 0xD4, 0x31, 0x1A, 0x9A, 0x5D, 0xD2, 0xD6, 0x6A, 0x01, 0x1D, 0xCA, 0x52, 0x37, 0x05, 0xC0, 0x79, 0x71, 0x65, 0xF5, 0x39, 0xF0, 0xBA, 0xC0, 0xDB, 0x35, 0x4F, 0x61, 0xAD, 0x53, 0xBC, 0xFE, 0x3B, 0x3C, 0x87, 0x71, 0x58, 0x7B, 0x0C, 0xBA, 0xF2, 0x5F, 0x0F, 0x6F, 0x42, 0xBB, 0x84, 0xEB, 0x3B, 0x19, 0x18, 0x8F, 0x7D, 0xBC, 0x7D, 0x11, 0xD6, 0x55, 0x5C, 0xD2, 0x92, 0x83, 0x25, 0x67, 0xDB, 0x35, 0xFE, 0xAD, 0xBE, 0x17, 0x7B, 0xBF, 0x0E, 0x50, 0x6B, 0x02, 0x27, 0xD5, 0x40, 0xAA, 0x28, 0x27, 0x4F, 0xFD, 0x01, 0x24, 0x83, 0x71, 0x55, 0xBB, 0x12, 0xF6, 0xA2, 0x9E, 0xD0, 0x1C, 0x83, 0x76, 0x09, 0xAC, 0x3A, 0xC2, 0xF4, 0x6C, 0xF6, 0xB4, 0x36, 0x1F, 0xFD, 0xEC, 0x22, 0x4E, 0xB3, 0x5A, 0xE7, 0x93, 0x39, 0xA9, 0x61, 0x40, 0x4B, 0x8F, 0x5D, 0x55, 0xFB, 0x9E, 0xAC, 0x0D, 0x9C, 0x5C, 0x33, 0x1D, 0xFF, 0xDB, 0xB1, 0x5D, 0x8F, 0xA1, 0x75, 0x0C, 0x91, 0xB6, 0x1A, 0xC6, 0xA9, 0x1A, 0xCD, 0x56, 0x68, 0x19, 0x37, 0xA0, 0x3D, 0xA2, 0xDE, 0xBB, 0xE2, 0x47, 0xEB, 0xB4, 0xBA, 0x84, 0x82, 0xDD, 0x4D, 0x03, 0xB5, 0xB3, 0x32, 0x0E, 0x35, 0x8C, 0xAB, 0x59, 0x10, 0x47, 0xAF, 0x4D, 0x34, 0xCC, 0x0D, 0xD8, 0x6D, 0x24, 0xC8, 0xFB, 0x8B, 0xD6, 0xEB, 0xFD, 0x55, 0x1B, 0x2C, 0xB7, 0x6A, 0x59, 0xF0, 0x76, 0xCA, 0x33, 0xCD, 0x20, 0xA4, 0xE0, 0xBE, 0x6A, 0x9F, 0xDE, 0x76, 0xB0, 0x72, 0x42, 0xCB, 0xD9, 0x96, 0x07, 0x05, 0xCF, 0x9B, 0xEC, 0x9B, 0x9A, 0x32, 0x16, 0xD7, 0x67, 0xD6, 0x6F, 0x8A, 0xD9, 0x68, 0xBA, 0x51, 0xB3, 0xCE, 0x3F, 0xD7, 0x18, 0xAC, 0xB3, 0x72, 0x78, 0xA8, 0x9F, 0xAB, 0x6E, 0xB3, 0xA4, 0x68, 0x13, 0xE1, 0x1B, 0x94, 0x12, 0x4D, 0x2D, 0x14, 0xC5, 0x93, 0xB5, 0x6E, 0x5A, 0x72, 0xA7, 0x82, 0xD1, 0x62, 0xD5, 0xED, 0x92, 0x9F, 0xD7, 0x78, 0xB9, 0xBD, 0x22, 0xCD, 0xBF, 0x3E, 0xBD, 0xF9, 0x64, 0xCC, 0x74, 0xD3, 0xED, 0xBA, 0xFB, 0xBE, 0x25, 0x46, 0xD8, 0x60, 0xE1, 0xB0, 0x57, 0x4F, 0xC1, 0x4A, 0xE8, 0xA7, 0xB4, 0x01, 0xF0, 0x27, 0x8B, 0xAF, 0x1A, 0x09, 0x34, 0x9F, 0x69, 0x3D, 0x32, 0x9A, 0x99, 0x52, 0x3C, 0x65, 0xF9, 0x61, 0x96, 0x30, 0x6B, 0xF4, 0x80, 0x19, 0x67, 0x54, 0xE2, 0x86, 0xDE, 0x69, 0xBC, 0x07, 0x11, 0x33, 0x3A, 0xE7, 0x0A, 0xF5, 0xDE, 0xDB, 0x9A, 0xC7, 0x48, 0x0E, 0xDA, 0x09, 0x6A, 0xCE, 0x2A, 0xBA, 0xA8, 0x67, 0xF4, 0x2B, 0x81, 0x17, 0xE6, 0x0B, 0xB5, 0x8F, 0xC1, 0x67, 0x95, 0x3B, 0x56, 0xDC, 0xE1, 0x8C, 0x2B, 0xCA, 0x1B, 0x3A, 0xC9, 0xBD, 0x97, 0xB9, 0x7E, 0xE9, 0x51, 0x81, 0x6B, 0xC2, 0xAE, 0x25, 0x3C, 0x51, 0x52, 0xF8, 0xA3, 0x0E, 0x3B, 0x49, 0x9E, 0x4F, 0x62, 0x53, 0xBE, 0x6C, 0xB5, 0xDD, 0xD6, 0x1A, 0x85, 0xD2, 0x40, 0x4B, 0xD1, 0x57, 0x83, 0x3E, 0xE6, 0x87, 0xB4, 0x77, 0xC1, 0x57, 0x15, 0xBE, 0xC3, 0xD7, 0x84, 0xBC, 0x82, 0x97, 0x83, 0x3B, 0xC4, 0x71, 0x99, 0x8B, 0xFA, 0xD7, 0x49, 0x06, 0x13, 0x18, 0x3D, 0xC9, 0xB2, 0xD0, 0x70, 0xB4, 0xBD, 0x58, 0xBE, 0xDE, 0x87, 0xD9, 0xD8, 0xAD, 0x9C, 0x6F, 0x77, 0xA5, 0x66, 0x36, 0xB0, 0x9C, 0x76, 0x52, 0xCF, 0x04, 0x4D, 0x16, 0x12, 0xED, 0x55, 0xF0, 0x75, 0x19, 0x65, 0xF9, 0x05, 0x85, 0x32, 0x3F, 0x76, 0xD9, 0x2F, 0x65, 0x60, 0x46, 0x5C, 0x1F, 0xA2, 0x1C, 0x89, 0x57, 0x75, 0xD3, 0x81, 0xA1, 0xB0, 0x3B, 0x6D, 0x99, 0x60, 0x9A, 0xF7, 0x3F, 0x0D, 0x77, 0xC1, 0x55, 0x76, 0x23, 0xC6, 0x5D, 0xE0, 0x19, 0xFA, 0x38, 0x7D, 0x18, 0x78, 0xCF, 0xE2, 0x9E, 0xF6, 0x18, 0xF8, 0xBC, 0xEC, 0xD3, 0x90, 0x02, 0x1D, 0x9B, 0xB7, 0x69, 0x40, 0x82, 0x0A, 0x53, 0x7F, 0xF4, 0x1E, 0x41, 0x43, 0xE2, 0x9E, 0x77, 0x05, 0xA1, 0x93, 0xC3, 0xC0, 0x56, 0x0D, 0x72, 0xD6, 0x7B, 0x76, 0x43, 0x2E, 0x42, 0xB5, 0x93, 0x18, 0x79, 0xD0, 0x6B, 0xDA, 0x2F, 0xFD, 0x6C, 0xC8, 0xCD, 0xE2, 0x81, 0x76, 0x15, 0x78, 0xAF, 0xAC, 0x70, 0x30, 0x97, 0xDC, 0x9F, 0xF7, 0x70, 0xA9, 0x2F, 0x29, 0x4E, 0xBD, 0xB4, 0xE4, 0x06, 0xB1, 0x34, 0xB6, 0xB0, 0xF3, 0x39, 0xBE, 0x3E, 0x14, 0x69, 0x5D, 0x84, 0x41, 0x5E, 0x78, 0xFD, 0x1F, 0x55, 0x8B, 0x9D, 0x93, 0xD1, 0x1A, 0xFE, 0x49, 0xDB, 0xAB, 0x7B, 0x00, 0x49, 0x2C, 0xFA, 0xB4, 0x1A, 0xF0, 0x78, 0xF1, 0x93, 0x65, 0x48, 0x8D, 0x45, 0xEE, 0xC1, 0xFE, 0x72, 0x23, 0x2F, 0xAD, 0xB1, 0xC7, 0x64, 0x68, 0x8F, 0xA5, 0x77, 0x3A, 0xEA, 0xEE, 0x87, 0x5C, 0x6A, 0x19, 0xD6, 0x48, 0xBC, 0xAC, 0xEA, 0xFB, 0x70, 0x67, 0xDB, 0xB3, 0xD5, 0x4F, 0xD0, 0xBF, 0x68, 0x65, 0xBA, 0x8D, 0x50, 0x9F, 0x45, 0xB8, 0x36, 0x07, 0xEC, 0x2E, 0x1E, 0x37, 0xB0, 0xB9, 0x89, 0x96, 0x8B, 0xF6, 0xFB, 0x35, 0x6C, 0x4B, 0x15, 0xF4, 0xA4, 0xD6, 0x5E, 0x88, 0x5D, 0xD5, 0x31, 0xAD, 0xC6, 0x3E, 0xE4, 0x52, 0xF3, 0x27, 0xFD, 0x72, 0x4F, 0x6E, 0x7D, 0x16, 0x69, 0x67, 0x7B, 0xAC, 0x7A, 0x07, 0x7A, 0x82, 0x16, 0xA1, 0xD3, 0x41, 0x5B, 0x2D, 0xA6, 0x6A, 0x1D, 0x41, 0x76, 0xF1, 0xF5, 0xA5, 0x7E, 0x1D, 0x13, 0x72, 0x75, 0x7D, 0x0B, 0xDB, 0x22, 0x52, 0x57, 0x77, 0xCB, 0x9B, 0x36, 0xC6, 0x06, 0xB5, 0x0F, 0xD4, 0x1D, 0x0D, 0x69, 0x68, 0x49, 0x35, 0x96, 0xBB, 0xDF, 0xAC, 0x9F, 0xAD, 0x89, 0xB7, 0xB7, 0xAE, 0x36, 0xA8, 0xD2, 0x69, 0x2D, 0xBA, 0x02, 0xE8, 0x90, 0xF9, 0x5B, 0xED, 0x68, 0x30, 0x20, 0x7F, 0xD2, 0xA6, 0x95, 0x95, 0xEE, 0x19, 0x03, 0xEB, 0x5E, 0x30, 0xDB, 0x12, 0x9E, 0x8D, 0x7C, 0xAF, 0xA2, 0x44, 0xE2, 0xCB, 0x47, 0x71, 0xC9, 0x00, 0x8F, 0xBE, 0xAF, 0xFC, 0x37, 0x6E, 0xB3, 0x3A, 0xB2, 0x45, 0xA7, 0x19, 0x4D, 0xF5, 0xB3, 0xE5, 0x79, 0xE6, 0x43, 0xD5, 0xC1, 0x80, 0xDF, 0x82, 0x8D, 0xBA, 0xA3, 0xA0, 0x24, 0x3F, 0x6C, 0xA3, 0xA1, 0x0A, 0xC9, 0xC8, 0x5F, 0xFB, 0x84, 0x73, 0x2F, 0xFE, 0xD7, 0x88, 0x92, 0xD7, 0x1D, 0xA1, 0x18, 0x8A, 0x14, 0xE8, 0xFD, 0x7B, 0xFB, 0xA6, 0x88, 0x5A, 0x5D, 0x77, 0xB4, 0x0F, 0x4A, 0xC7, 0x59, 0xC5, 0xD7, 0xC9, 0x14, 0x05, 0x16, 0xD5, 0xD5, 0xF3, 0x00, 0x8E, 0xD9, 0x76, 0xDD, 0x59, 0x30, 0xBE, 0xA0, 0x78, 0xFD, 0x31, 0xC1, 0xA9, 0x8C, 0x13, 0x6B, 0x98, 0xC2, 0x7B, 0xF1, 0x0F, 0x57, 0xCA, 0x45, 0x97, 0x22, 0xC2, 0x07, 0x1D, 0x24, 0x5E, 0xFE, 0x97, 0x7A, 0xC7, 0x4A, 0x5B, 0x5D, 0x6B, 0xDB, 0x36, 0xCA, 0xD3, 0x18, 0x3F, 0xEA, 0xC6, 0x2A, 0x33, 0x28, 0xD3, 0xAB, 0xC7, 0x00, 0x0D, 0x0B, 0x4F, 0xEB, 0xEE, 0x81, 0xE6, 0x79, 0xB1, 0xEB, 0xCE, 0xC8, 0x2C, 0xD3, 0x35, 0xAB, 0x05, 0xB2, 0x93, 0xF1, 0xFE, 0xC3, 0x17, 0xE4, 0x07, 0x22, 0xFA, 0x07, 0x6E, 0x28, 0x52, 0x02, 0xFE, 0xD7, 0xB3, 0x4A, 0x71, 0xC5, 0x75, 0xB0, 0xB5, 0x42, 0xB9, 0xD1, 0xF2, 0x48, 0xED, 0x7A, 0x20, 0xC8, 0x62, 0x97, 0xE1, 0x07, 0x30, 0x6C, 0xCE, 0xD2, 0x3D, 0x01, 0xDE, 0xE5, 0x46, 0xAE, 0x7D, 0x01, 0xBE, 0x4C, 0x7D, 0x39, 0xF2, 0x2F, 0x64, 0x17, 0xBB, 0x6B, 0x79, 0x23, 0xB4, 0x32, 0xBC, 0x7D, 0xE9, 0x7B, 0xC8, 0x14, 0x90, 0xD9, 0x33, 0x13, 0xF2, 0x71, 0x1B, 0xDB, 0xB2, 0x04, 0xFC, 0xC3, 0xC8, 0xAE, 0xB5, 0x07, 0x51, 0x8B, 0x0F, 0x86, 0x15, 0xE0, 0x4C, 0xF3, 0x51, 0xBA, 0xED, 0xC0, 0xF3, 0xDC, 0xF9, 0xAB, 0x3F, 0xE0, 0xF4, 0x54, 0xE1, 0x4A, 0x36, 0xE6, 0x14, 0x1B, 0x3A, 0xF4, 0x3F, 0xB5, 0x36, 0xEC, 0xDD, 0xD2, 0x99, 0xAA, 0xC7, 0xFE, 0xF2, 0xEE, 0x3C, 0x74, 0xBF, 0x6B, 0x71, 0x8B, 0x10, 0x89, 0x65, 0xFC, 0x32, 0x6D, 0x83, 0x94, 0x94, 0x31, 0x86, 0x24, 0x30, 0x7F, 0x61, 0x97, 0x4E, 0x00, 0xDC, 0xCF, 0xA9, 0x58, 0x55, 0x66, 0xD8, 0x9C, 0x16, 0xBD, 0xE2, 0x8F, 0x7E, 0x63, 0x9C, 0x71, 0x70, 0x93, 0x76, 0x59, 0xB8, 0x73, 0xDF, 0x59, 0x72, 0xBD, 0x1F, 0xB5, 0xCB, 0x15, 0x87, 0x5D, 0xC6, 0xB7, 0xF8, 0xAA, 0xFA, 0xAD, 0xA6, 0x9B, 0x70, 0xB8, 0x94, 0x32, 0x5B, 0xFF, 0x07, 0xAC, 0x5E, 0xD8, 0xA4, 0x9B, 0x07, 0x1C, 0xC8, 0x96, 0xAC, 0x5A, 0x58, 0xB7, 0x25, 0x35, 0x7B, 0xC5, 0xAE, 0x5A, 0x87, 0xD8, 0xFB, 0x83, 0x7E, 0xC6, 0xD2, 0xB0, 0x17, 0x7D, 0x9E, 0x7A, 0xC4, 0x57, 0xD6, 0xB5, 0x48, 0x63, 0xE3, 0xAC, 0x6D, 0xF1, 0xC1, 0xA4, 0x56, 0x71, 0xA6, 0x78, 0xC4, 0x9E, 0x92, 0xA5, 0xDF, 0x06, 0x0E, 0x2C, 0x3C, 0xA5, 0x3D, 0x0A, 0x34, 0xE4, 0x94, 0x8E, 0xB4, 0x34, 0xBF, 0x48, 0xB5, 0x1F, 0x3E, 0xD2, 0x28, 0x8B, 0x9D, 0xB5, 0x6C, 0x4B, 0x9D, 0x7B, 0x98, 0xA2, 0xF7, 0x7F, 0x35, 0x76, 0x3E, 0x19, 0x5D, 0x7F, 0x74, 0x3B, 0x9C, 0x3D, 0x5B, 0xA2, 0xF1, 0xAB, 0x56, 0xE7, 0x6A, 0xFE, 0x20, 0x27, 0x28, 0xBB, 0xF4, 0x02, 0x70, 0x83, 0xF9, 0x3C, 0x2D, 0x06, 0x94, 0x6C, 0xDE, 0x57, 0x15, 0x9E, 0x2F, 0x1B, 0xBE, 0xCD, 0x6D, 0x2E, 0xDE, 0xD2, 0xB2, 0x45, 0xC0, 0xAE, 0x04, 0xF1, 0x2A, 0xB1, 0x3F, 0xA7, 0x97, 0xBB, 0x48, 0x16, 0x2C, 0x4C, 0x4C, 0xCF, 0x56, 0xEE, 0x93, 0xC2, 0x7E, 0xEF, 0x91, 0x58, 0xE5, 0x5F, 0x8B, 0x08, 0xB5, 0x1F, 0xE8, 0x60, 0x1D, 0x86, 0x81, 0x90, 0xD5, 0xC6, 0x81, 0x8A, 0x3F, 0xCC, 0xAC, 0xA1, 0x48, 0x76, 0x06, 0x67, 0x72, 0xB3, 0x0D, 0x8F, 0xCE, 0x3F, 0xA4, 0x3E, 0x26, 0xD4, 0x89, 0x0C, 0x55, 0xD9, 0x92, 0x0B, 0x52, 0x28, 0xF5, 0x86, 0xE2, 0xB5, 0x82, 0xF0, 0xFD, 0x05, 0x3F, 0x05, 0x47, 0x39, 0x0C, 0xAB, 0xC7, 0x43, 0xD9, 0x56, 0x3A, 0xAC, 0x04, 0x7A, 0xB6, 0xFE, 0xAF, 0x92, 0x2B, 0xD2, 0xB0, 0x01, 0xBC, 0xE2, 0xAD, 0xEC, 0x5B, 0xC3, 0x9E, 0xAA, 0x5D, 0xCA, 0x45, 0x48, 0x0C, 0xBF, 0x5A, 0x29, 0x62, 0x41, 0xE2, 0x4A, 0x00, 0x4C, 0x71, 0x94, 0x7F, 0x82, 0x26, 0xFA, 0xEA, 0xE0, 0x62, 0x78, 0xAA, 0xC3, 0x54, 0xD5, 0x25, 0x58, 0xCE, 0xB8, 0x82, 0xA5, 0xC2, 0x3D, 0x6B, 0x4E, 0x15, 0x39, 0xAB, 0xF6, 0xF4, 0x9F, 0x2D, 0xF3, 0x57, 0xB5, 0xD4, 0x61, 0x2C, 0x50, 0xED, 0x04, 0x1D, 0xE5, 0x76, 0xA9, 0x9E, 0xB2, 0x0E, 0x8A, 0x16, 0xAA, 0x3C, 0x53, 0xAB, 0xE4, 0x66, 0x68, 0xB7, 0x6F, 0x31, 0x3C, 0x1D, 0xF9, 0x60, 0x5F, 0xAF, 0xDA, 0x85, 0xA4, 0x30, 0x82, 0xB0, 0x14, 0x64, 0xDC, 0xAA, 0x13, 0x05, 0x33, 0x8D, 0x63, 0x7A, 0x25, 0x25, 0x14, 0x43, 0x83, 0x69, 0x62, 0xA5, 0x9F, 0xAE, 0x1B, 0xF6, 0xE4, 0x8C, 0xD2, 0xA6, 0xB2, 0x50, 0xC1, 0x71, 0xCD, 0x84, 0xE4, 0x15, 0xB2, 0x52, 0x9C, 0xE7, 0x9B, 0x0F, 0x9D, 0x52, 0x5D, 0xB3, 0x5F, 0xA8, 0x1A, 0x41, 0x1E, 0x5B, 0x1E, 0xC1, 0xF2, 0x10, 0xFB, 0x11, 0x51, 0xDE, 0x81, 0x96, 0x33, 0x4B, 0x0A, 0x8A, 0x6D, 0x9A, 0xAA, 0x4D, 0x66, 0xE5, 0x6F, 0xEA, 0x3B, 0x20, 0x13, 0x7B, 0x8B, 0xE9, 0x41, 0xE5, 0x2A, 0xFE, 0xE6, 0xEA, 0xAF, 0x89, 0xD9, 0x52, 0x5C, 0xBB, 0xCF, 0x7B, 0x1F, 0x24, 0xC5, 0x56, 0xD8, 0x35, 0xA9, 0x06, 0x50, 0xD4, 0x72, 0x10, 0x93, 0x20, 0xD1, 0xC3, 0xD5, 0x39, 0xBF, 0xFA, 0x23, 0xBA, 0xE2, 0x0B, 0x03, 0x7B, 0x8E, 0x18, 0xDD, 0xCA, 0x8C, 0x1D, 0x8F, 0x80, 0x4F, 0xAC, 0xA2, 0x56, 0x76, 0xE5, 0x64, 0x1E, 0xD1, 0xF0, 0x24, 0x51, 0x22, 0xE9, 0x36, 0x9E, 0xF2, 0xFA, 0x0E, 0x39, 0x11, 0x5F, 0xEC, 0x6A, 0x55, 0x6B, 0x54, 0x02, 0xCB, 0x4B, 0x58, 0x17, 0xA2, 0x59, 0x0E, 0x67, 0x6F, 0x58, 0xF9, 0xBF, 0x0E, 0xB8, 0x80, 0x36, 0xD4, 0xAB, 0xF7, 0x2B, 0xE5, 0x2E, 0x5D, 0xAC, 0x2C, 0x66, 0xC2, 0x3D, 0x0D, 0x15, 0xAE, 0xDC, 0x93, 0x6D, 0x97, 0x13, 0x2F, 0x48, 0xA6, 0xD5, 0x3D, 0xF3, 0x4E, 0x06, 0xEF, 0x6A, 0xC7, 0xDA, 0xDD, 0x56, 0x6D, 0x54, 0xBB, 0x30, 0x9C, 0xB0, 0x23, 0xC8, 0xE6, 0x21, 0x61, 0xB6, 0x71, 0x93, 0xAE, 0x7D, 0x4F, 0x7E, 0xFB, 0xDA, 0x72, 0xDD, 0x97, 0xD2, 0xBF, 0x56, 0xAC, 0x53, 0x5C, 0x61, 0x52, 0x07, 0x2E, 0x97, 0xC7, 0x70, 0x6B, 0xBB, 0xAB, 0x13, 0x26, 0x48, 0x68, 0x8D, 0x0D, 0x3E, 0x9F, 0xC0, 0x12, 0xDD, 0x65, 0x7B, 0xB6, 0x6A, 0xBD, 0x7A, 0x07, 0x83, 0xC0, 0x3E, 0x20, 0xC7, 0x56, 0x3D, 0x13, 0x9E, 0x2D, 0xA4, 0xF5, 0xCD, 0x14, 0x7D, 0x29, 0xF3, 0x31, 0x21, 0x92, 0xD5, 0xCC, 0xD5, 0x50, 0x9A, 0xAC, 0x89, 0xEB, 0xC0, 0xBC, 0xAD, 0x1C, 0x2F, 0x5C, 0x99, 0xAC, 0x07, 0xBF, 0x4A, 0xB5, 0xBE, 0x55, 0xE8, 0x7E, 0xA5, 0x85, 0x83, 0x10, 0x73, 0x03, 0xCD, 0xAD, 0x82, 0x70, 0x7F, 0x68, 0xD2, 0x0A, 0x33, 0x9E, 0x82, 0x65, 0xDB, 0x93, 0x2D, 0x88, 0xE3, 0xAC, 0xAE, 0x79, 0x25, 0xDA, 0x21, 0x70, 0x07, 0x77, 0x49, 0x27, 0x8A, 0xDE, 0x57, 0xD6, 0xCA, 0xB7, 0x4A, 0x37, 0x25, 0xAF, 0x02, 0x27, 0x28, 0x8A, 0x7D, 0x74, 0x68, 0x1C, 0xF0, 0xC6, 0xBE, 0x49, 0xFD, 0x19, 0x0A, 0x63, 0x74, 0xE3, 0x14, 0xE8, 0xCC, 0xB0, 0x80, 0xED, 0x2A, 0xFE, 0xDC, 0xFD, 0x9E, 0x9B, 0x2B, 0xBD, 0x55, 0xFD, 0x59, 0xA0, 0x53, 0x14, 0x28, 0x57, 0x89, 0x4B, 0x95, 0x60, 0x85, 0x8F, 0xAC, 0x18, 0x68, 0x4A, 0x0E, 0x01, 0xFE, 0x02, 0xCF, 0xFB, 0x94, 0x23, 0x5B, 0xA1, 0xA7, 0xF6, 0x96, 0xEA, 0x83, 0x70, 0x06, 0x63, 0x2E, 0x3E, 0x15, 0x56, 0x0F, 0x88, 0x2B, 0x57, 0xA2, 0x93, 0x3A, 0x3C, 0xD9, 0x67, 0xD1, 0xA5, 0x06, 0x35, 0x2F, 0x17, 0x7D, 0xA7, 0x48, 0x15, 0xF6, 0xA9, 0x46, 0x95, 0x57, 0x48, 0xA7, 0xA2, 0x17, 0x92, 0xFA, 0x94, 0x1E, 0xA8, 0xC4, 0xC7, 0x16, 0x91, 0x21, 0xBB, 0xEC, 0xAE, 0xAA, 0x57, 0x21, 0xCE, 0x96, 0xBB, 0xF0, 0x29, 0xF0, 0xAB, 0x81, 0x33, 0xE5, 0x0A, 0xDD, 0xB5, 0x36, 0x0A, 0x73, 0xBD, 0xEE, 0xB0, 0xCE, 0x87, 0xD3, 0xAA, 0x6D, 0x91, 0xEB, 0x05, 0x36, 0x1A, 0xA8, 0xEC, 0x88, 0xF8, 0x21, 0xB9, 0x20, 0x11, 0x53, 0x88, 0x70, 0x57, 0xEF, 0x0A, 0xC4, 0x53, 0xA5, 0xB7, 0xE3, 0xA9, 0x97, 0x22, 0x57, 0x2D, 0x65, 0xF8, 0x7C, 0x84, 0x3E, 0xE0, 0x5B, 0x7A, 0xA9, 0xE1, 0x68, 0x6B, 0x64, 0x65, 0x44, 0xFD, 0x61, 0xED, 0xC3, 0x2A, 0xA7, 0x5A, 0x93, 0x7C, 0x3C, 0xEF, 0x4E, 0x0D, 0x5E, 0xFA, 0x50, 0x74, 0xCF, 0x70, 0x39, 0xA1, 0x48, 0xBE, 0x4B, 0x1B, 0xE8, 0x15, 0x06, 0xBF, 0xC3, 0x8A, 0x6D, 0xDF, 0xA8, 0xBB, 0x51, 0x85, 0xE5, 0x62, 0x7C, 0x11, 0x12, 0xB0, 0x24, 0xB6, 0x24, 0xB1, 0x67, 0x59, 0x73, 0x4E, 0xF9, 0x86, 0xCE, 0xBB, 0xDA, 0x6A, 0x16, 0xAB, 0xED, 0x87, 0x2C, 0x88, 0xDB, 0xDF, 0x3C, 0x5C, 0x3A, 0x59, 0xF8, 0xBC, 0x5E, 0x18, 0x7F, 0x4F, 0x3E, 0xA1, 0xFA, 0x8A, 0xE7, 0x30, 0xBC, 0x8A, 0x50, 0xD8, 0x1E, 0x50, 0xB7, 0xA9, 0x16, 0x59, 0x26, 0xE3, 0xE1, 0x48, 0x6E, 0xCF, 0xF6, 0xE2, 0xCC, 0xE5, 0xAC, 0xC6, 0xFA, 0xB2, 0x9D, 0x03, 0xF7, 0x89, 0x21, 0xE6, 0xBE, 0xDE, 0x17, 0x92, 0xA5, 0x9C, 0xF3, 0x5D, 0xCB, 0x4B, 0xF2, 0x84, 0x5E, 0xAD, 0xC5, 0xF1, 0x19, 0x32, 0x53, 0xED, 0x09, 0xCF, 0xA5, 0x30, 0x53, 0x93, 0x62, 0xF7, 0xB7, 0xDA, 0xA4, 0x3A, 0x6B, 0x79, 0x12, 0xCF, 0x40, 0xA0, 0xEE, 0x84, 0xA2, 0x83, 0xEB, 0x86, 0xEA, 0x6F, 0x96, 0xD9, 0xAE, 0xF2, 0xC6, 0x77, 0x32, 0xDD, 0x96, 0xF3, 0x24, 0x61, 0x9C, 0xFC, 0xA5, 0x6E, 0xC5, 0xCD, 0x82, 0x47, 0x5D, 0x69, 0x71, 0xB1, 0xB2, 0xF4, 0x86, 0x2F, 0x9E, 0x1F, 0x61, 0xBA, 0xF6, 0x8E, 0xDD, 0x71, 0xB5, 0x4A, 0x5D, 0xC4, 0x38, 0x87, 0x97, 0x23, 0xBD, 0xBD, 0x27, 0x95, 0xEB, 0x8B, 0x80, 0x26, 0x1B, 0xE5, 0xA3, 0xB2, 0x35, 0x64, 0x35, 0x80, 0xB3, 0xB6, 0xCB, 0xC6, 0x83, 0x5E, 0xDC, 0xCB, 0xA5, 0xE1, 0x50, 0x9B, 0xF0, 0x7E, 0x3C, 0x0D, 0xE9, 0x93, 0xF6, 0x7A, 0x6D, 0x52, 0xE7, 0x2A, 0xB3, 0xEC, 0x4C, 0xB8, 0x2F, 0xE8, 0x6D, 0x79, 0x9E, 0x98, 0x00, 0x8D, 0xED, 0xA9, 0x92, 0x19, 0x99, 0x97, 0x1A, 0x1B, 0xE5, 0xF9, 0x9C, 0x22, 0x32, 0x5D, 0x21, 0x13, 0x58, 0x49, 0xE9, 0xCA, 0x13, 0xA2, 0x93, 0x25, 0xA5, 0x20, 0x5F, 0x3A, 0x90, 0xB0, 0x08, 0xDE, 0xA3, 0x08, 0xF3, 0x4A, 0x53, 0x7D, 0x06, 0x2E, 0xDB, 0x51, 0xF1, 0x89, 0x90, 0x83, 0x25, 0x86, 0xBF, 0x82, 0xB6, 0x75, 0xDD, 0x13, 0x53, 0x44, 0x2D, 0x0D, 0x27, 0x24, 0xC7, 0x25, 0x77, 0xB1, 0xCB, 0x32, 0xA9, 0x9C, 0x23, 0x2E, 0x52, 0xA4, 0x28, 0x8E, 0x17, 0xD7, 0x02, 0x5E, 0x40, 0x59, 0x42, 0x2E, 0x74, 0x0F, 0xD4, 0x7B, 0xB1, 0x55, 0x30, 0xB4, 0xCC, 0xF6, 0x33, 0x76, 0x0D, 0xB6, 0xB5, 0x8C, 0xC6, 0x6F, 0xC2, 0x85, 0xED, 0x01, 0x82, 0x61, 0xD8, 0xBD, 0x16, 0x14, 0x35, 0x21, 0x3A, 0xB5, 0x87, 0xE4, 0x10, 0xB2, 0x54, 0x28, 0x93, 0xDD, 0x43, 0x1D, 0x8A, 0x9A, 0x14, 0xEF, 0x51, 0x55, 0xFC, 0x38, 0x68, 0x1A, 0x3A, 0xCE, 0x6B, 0x48, 0xE5, 0x82, 0x30, 0x6D, 0xDF, 0x63, 0x07, 0xE1, 0xEF, 0x96, 0xB6, 0xF8, 0x0D, 0xF8, 0x44, 0x9B, 0x2D, 0x6F, 0xBB, 0xE6, 0xA0, 0x89, 0x2D, 0x08, 0xD2, 0xDC, 0x41, 0x2B, 0xC5, 0x0B, 0xC8, 0x0F, 0x02, 0x5F, 0xA9, 0x8C, 0x5C, 0x5C, 0x98, 0x25, 0xFF, 0x4A, 0x58, 0xC6, 0x1E, 0x01, 0x59, 0x98, 0xC9, 0x73, 0x07, 0xFA, 0x41, 0x65, 0x65, 0xBB, 0x04, 0xDB, 0x8E, 0x2C, 0xB7, 0x1C, 0x8B, 0x3F, 0x86, 0xFF, 0xB4, 0x58, 0x70, 0x1A, 0x6A, 0x2F, 0x99, 0x9C, 0x79, 0xC3, 0xB5, 0x63, 0x90, 0x73, 0xC2, 0xD6, 0x9A, 0x9D, 0xFC, 0x73, 0x12, 0x27, 0xE3, 0xB4, 0x42, 0x1B, 0xD9, 0x67, 0xBD, 0x2A, 0x56, 0x08, 0xEC, 0xD3, 0x64, 0x78, 0xB4, 0xA3, 0xBB, 0xD5, 0x4F, 0x6D, 0x2D, 0xB1, 0xF5, 0xA8, 0x3F, 0xFD, 0x02, 0xFE, 0x0E, 0xF9, 0xBB, 0x51, 0x56, 0x95, 0xD0, 0xF1, 0xA4, 0xBA, 0x96, 0x6B, 0x68, 0xBB, 0x0F, 0x8B, 0x04, 0xF2, 0x96, 0x56, 0xBE, 0x83, 0x78, 0x54, 0xE3, 0xB7, 0x82, 0x2C, 0xD9, 0xBC, 0xDA, 0x91, 0x58, 0x2F, 0x60, 0x81, 0xC1, 0xE8, 0xB1, 0x00, 0x95, 0xE2, 0xC7, 0x6C, 0xEE, 0x60, 0xFD, 0xE8, 0x49, 0xFA, 0x2E, 0xFC, 0x3B, 0x62, 0xD6, 0xB8, 0x9A, 0x1D, 0x30, 0xB0, 0xC0, 0x90, 0xCB, 0xA9, 0xEB, 0xEB, 0x85, 0x34, 0xFC, 0x92, 0x9E, 0xA9, 0xDC, 0x62, 0x91, 0x73, 0xC7, 0xF8, 0xBC, 0x65, 0x52, 0xBC, 0xE9, 0xF9, 0xE2, 0x53, 0xCA, 0x21, 0x93, 0xB5, 0xFB, 0x35, 0xD4, 0x91, 0xE4, 0xD8, 0x5A, 0x60, 0x06, 0x55, 0x9A, 0xA5, 0x1D, 0xFE, 0x15, 0xB1, 0x6B, 0xF8, 0xCC, 0x9A, 0x3F, 0xF2, 0x4E, 0xCF, 0xA9, 0xE2, 0x0C, 0xAF, 0x81, 0xFE, 0xF0, 0x72, 0x96, 0xA5, 0x71, 0xCE, 0x09, 0x95, 0x4B, 0x1E, 0xE6, 0x16, 0x48, 0xE9, 0xED, 0xCB, 0xA2, 0xB3, 0x94, 0xE2, 0x7A, 0x6B, 0x8F, 0xE9, 0xC8, 0x0B, 0xCD, 0x29, 0xDB, 0xB3, 0x18, 0x57, 0x75, 0x96, 0x61, 0x83, 0xBF, 0x47, 0xA2, 0x9A, 0x33, 0xD5, 0x93, 0x8B, 0x8C, 0x86, 0x42, 0x55, 0x7F, 0x79, 0x01, 0x34, 0x5D, 0x95, 0xCE, 0xEA, 0xE1, 0xED, 0x56, 0xC5, 0x73, 0x1F, 0xE6, 0x07, 0xA9, 0x36, 0x0A, 0x1F, 0xC6, 0xD8, 0xAA, 0x11, 0x69, 0x81, 0xFB, 0x6B, 0x7C, 0x8E, 0x72, 0x81, 0x8D, 0x81, 0x08, 0x06, 0x5D, 0xE8, 0xA1, 0xC4, 0x7E, 0x68, 0x5A, 0xA3, 0x19, 0xC2, 0x64, 0x8D, 0xD7, 0x41, 0x88, 0x9C, 0x23, 0x02, 0x73, 0x90, 0x5E, 0xFE, 0x79, 0xAE, 0x1A, 0xA5, 0x89, 0xEA, 0xF2, 0x98, 0x68, 0xB7, 0x34, 0x76, 0xF1, 0x5E, 0xD5, 0x11, 0xF9, 0x13, 0xF7, 0x2E, 0xEC, 0x18, 0xD0, 0x6E, 0x83, 0x12, 0x0B, 0xA0, 0x89, 0xF4, 0x1C, 0x62, 0x04, 0x1A, 0xAC, 0x43, 0xC1, 0x3D, 0xA2, 0x50, 0xED, 0x49, 0x88, 0x2A, 0x99, 0xA7, 0x8C, 0x84, 0x5E, 0xCA, 0x38, 0x55, 0x57, 0xE1, 0xD5, 0x8A, 0xA0, 0xDC, 0x61, 0x04, 0x55, 0xEE, 0x5C, 0x3C, 0x46, 0x35, 0x06, 0x78, 0xEC, 0x0E, 0x62, 0x7C, 0x28, 0xC2, 0xA6, 0x19, 0x7F, 0x07, 0xBD, 0xA6, 0x13, 0x44, 0x17, 0xEC, 0x55, 0xF3, 0x52, 0xE9, 0x0A, 0x46, 0x6B, 0x6C, 0x94, 0xFF, 0x42, 0xCE, 0xCA, 0x29, 0x60, 0x28, 0xF4, 0xAB, 0x6A, 0x3A, 0x84, 0xC1, 0xDF, 0x73, 0xCE, 0xC2, 0x5A, 0x64, 0x79, 0xD4, 0x53, 0x34, 0x0D, 0x09, 0x70, 0xD7, 0x61, 0x14, 0xF8, 0xB3, 0xCD, 0x4E, 0xFC, 0x1A, 0xBC, 0x85, 0x3E, 0x44, 0xB4, 0xC1, 0x6D, 0xD5, 0x67, 0xE4, 0x06, 0x62, 0x16, 0xF1, 0x4D, 0xF1, 0x37, 0x91, 0x24, 0x8F, 0x56, 0x1E, 0xC0, 0xFF, 0x65, 0x36, 0x83, 0x0E, 0xB8, 0x2E, 0xEB, 0x19, 0xB4, 0x09, 0xFB, 0x16, 0x3D, 0x19, 0x39, 0xA3, 0x5E, 0xE1, 0x0E, 0xA8, 0xEF, 0xA2, 0xCB, 0x6C, 0x86, 0xF1, 0xE3, 0x48, 0x06, 0xBD, 0x99, 0xE8, 0x81, 0x0F, 0xEA, 0xFD, 0xA4, 0x49, 0xC6, 0x27, 0xD8, 0x0E, 0x19, 0x61, 0x6C, 0x95, 0x6E, 0x54, 0xF0, 0xAA, 0x85, 0x95, 0xF6, 0xCA, 0xFD, 0xFA, 0xF5, 0xD9, 0x6B, 0xC0, 0x95, 0xDA, 0x5B, 0xD1, 0xC7, 0x11, 0x37, 0x32, 0xD8, 0x3D, 0x56, 0xDD, 0xA7, 0x8E, 0xB7, 0x29, 0xC4, 0xF7, 0x20, 0x97, 0xE9, 0xA9, 0xC4, 0x20, 0x7C, 0x5C, 0xBF, 0x4E, 0xB2, 0xB0, 0x95, 0xA7, 0x5E, 0x25, 0xAD, 0x69, 0x09, 0x96, 0xE4, 0xCA, 0x4B, 0x9A, 0x66, 0x55, 0x60, 0x8A, 0x27, 0xF5, 0xBE, 0x59, 0x9B, 0x81, 0x73, 0x35, 0x4B, 0xA2, 0x1D, 0x60, 0x83, 0x7E, 0x8E, 0xDB, 0x46, 0x75, 0x36, 0xF6, 0xDE, 0xFA, 0x17, 0xBE, 0x12, 0x8D, 0xA3, 0xCF, 0x24, 0x86, 0xE1, 0xDD, 0x3A, 0x40, 0xBC, 0x75, 0xC9, 0x06, 0x55, 0xA4, 0x74, 0x5C, 0x4F, 0xA3, 0x98, 0x2D, 0x2B, 0xEB, 0x1C, 0x55, 0xBE, 0x40, 0x61, 0xDF, 0x3A, 0x26, 0xA3, 0x03, 0xC8, 0x68, 0x90, 0x44, 0x86, 0xC3, 0xF3, 0x8D, 0x09, 0x6E, 0xE6, 0xEA, 0x69, 0x44, 0xBE, 0xF5, 0x4B, 0xBC, 0x06, 0xDD, 0x40, 0xB7, 0x27, 0x7A, 0xE1, 0xCD, 0x1A, 0x0F, 0xD1, 0xFD, 0xA1, 0xD7, 0xE8, 0x67, 0xF1, 0xF5, 0x65, 0xEF, 0xC4, 0x22, 0x69, 0x57, 0x5F, 0x6F, 0x69, 0x9E, 0x1C, 0xEC, 0xF2, 0x4B, 0xDB, 0xAC, 0x5C, 0xD9, 0xD2, 0x19, 0x3E, 0x08, 0x1D, 0x35, 0xAD, 0x75, 0x6B, 0x55, 0xED, 0x24, 0x5B, 0x6D, 0x32, 0x70, 0xA6, 0x6A, 0x2E, 0x5D, 0x4E, 0x34, 0xC2, 0xDB, 0xF4, 0xE1, 0x3A, 0xEB, 0xA2, 0x2F, 0x2A, 0x91, 0x66, 0x6F, 0xF9, 0x31, 0xB1, 0x2F, 0x79, 0x8D, 0xED, 0x5F, 0x31, 0x85, 0x2C, 0xE5, 0xB6, 0x66, 0xF4, 0x13, 0xEF, 0x85, 0x25, 0x91, 0x0A, 0x02, 0x96, 0xFC, 0x76, 0x85, 0x88, 0x93, 0x8A, 0xE3, 0x56, 0xE7, 0x48, 0x7B, 0x70, 0x01, 0xF5, 0x21, 0x99, 0x0A, 0xFD, 0xAD, 0x79, 0x48, 0xBE, 0x66, 0x2E, 0x87, 0x51, 0xD2, 0xA2, 0x6A, 0xB3, 0x28, 0x98, 0x10, 0xF3, 0x7E, 0x54, 0x84, 0x11, 0x7E, 0xC2, 0x03, 0x19, 0x4C, 0xFC, 0x81, 0x64, 0x63, 0x84, 0x33, 0xFE, 0xAF, 0xBC, 0xCA, 0xE5, 0x33, 0xD1, 0x00, 0x44, 0x5A, 0x7D, 0x21, 0x27, 0x81, 0x77, 0x69, 0x89, 0x64, 0x08, 0x54, 0x4B, 0x6C, 0xC0, 0xB7, 0x0A, 0x07, 0xC0, 0x4D, 0xF8, 0x68, 0xD1, 0x09, 0xC1, 0x36, 0xEC, 0x9E, 0xD4, 0xAE, 0xEC, 0x2E, 0xF6, 0x43, 0x6E, 0x97, 0xBE, 0x17, 0x7B, 0xA1, 0x38, 0x16, 0x76, 0x0B, 0x8F, 0x00, 0x3C, 0x5D, 0x4E, 0x11, 0x61, 0xE0, 0x35, 0xEB, 0x48, 0xE2, 0x09, 0xB4, 0x8E, 0x76, 0x80, 0x74, 0x81, 0xC7, 0xE1, 0x6B, 0xD5, 0x99, 0xCA, 0x70, 0x70, 0x99, 0xDA, 0x16, 0xB0, 0x13, 0x04, 0xAA, 0x61, 0xF0, 0x74, 0xE9, 0x0A, 0xF5, 0x2F, 0x68, 0x67, 0xDA, 0x31, 0xCC, 0x17, 0x0E, 0x0A, 0xD3, 0x62, 0xEB, 0xE1, 0x52, 0xD7, 0x24, 0xFC, 0x03, 0xAC, 0xB4, 0x5E, 0x45, 0x9C, 0x84, 0xCB, 0xE8, 0x33, 0x49, 0x3B, 0x38, 0x13, 0xB9, 0xA7, 0x72, 0x53, 0x1B, 0x95, 0x29, 0xE8, 0x5A, 0xF5, 0x6E, 0x5E, 0xA0, 0xCA, 0x52, 0xFD, 0xB1, 0xB8, 0x55, 0xB5, 0x16, 0x1B, 0x9D, 0x8A, 0xA8, 0x45, 0x6A, 0x45, 0xF8, 0x26, 0xCC, 0x47, 0xB5, 0xD4, 0x6D, 0x34, 0xBE, 0x11, 0x9D, 0x64, 0x7D, 0x95, 0xD8, 0x06, 0xBF, 0xA6, 0x4F, 0x23, 0xED, 0x61, 0x29, 0x9A, 0x83, 0x34, 0x18, 0x72, 0xE5, 0x96, 0x48, 0x81, 0xFE, 0x22, 0x27, 0x1A, 0x79, 0xA1, 0x3B, 0x5C, 0x54, 0x80, 0x86, 0x68, 0x37, 0xA4, 0x42, 0x2A, 0x84, 0xBC, 0x1D, 0x51, 0xA6, 0x1E, 0xC4, 0x9F, 0xB9, 0xFE, 0xC2, 0x45, 0xAA, 0x7A, 0xEB, 0x76, 0x62, 0x25, 0x52, 0x40, 0x3B, 0xFC, 0xDF, 0x85, 0x5C, 0xB4, 0x12, 0xF6, 0x6E, 0x4A, 0x91, 0xD5, 0xC1, 0xFC, 0x86, 0x93, 0x55, 0xA1, 0xF0, 0xED, 0xBA, 0xC3, 0x05, 0x6B, 0x91, 0xA5, 0x26, 0x65, 0xCA, 0x0A, 0xB4, 0xA5, 0xBA, 0x21, 0x7C, 0xA5, 0xEA, 0x87, 0x96, 0x74, 0x9D, 0x82, 0xBB, 0xA8, 0x7F, 0x5A, 0x7D, 0x23, 0x3A, 0x91, 0xF5, 0xB4, 0x34, 0xD2, 0x03, 0x8E, 0x87, 0xE8, 0x50, 0x67, 0x57, 0x90, 0xF4, 0x07, 0xF4, 0xB8, 0xC3, 0xBA, 0x4A, 0x0D, 0x2F, 0x6A, 0x45, 0x0B, 0x9E, 0x23, 0x94, 0xA6, 0xF8, 0xE4, 0x4E, 0x34, 0xA9, 0x4E, 0x10, 0x7A, 0x4D, 0xD5, 0x6C, 0x30, 0x38, 0xDF, 0xC4, 0x3E, 0xE0, 0xAE, 0x56, 0x32, 0x02, 0x43, 0x3E, 0xD3, 0x26, 0x90, 0x8E, 0xB0, 0x13, 0xB0, 0x16, 0xBC, 0x3C, 0x30, 0x55, 0xF2, 0x16, 0xFC, 0xD4, 0xB7, 0x9F, 0x8D, 0x41, 0xCD, 0xDD, 0xC3, 0xF9, 0x8F, 0x61, 0x6D, 0xDB, 0xD7, 0xA4, 0x14, 0x64, 0x63, 0xE3, 0xF3, 0x90, 0x70, 0x15, 0xC3, 0x78, 0xDE, 0x59, 0x81, 0xAD, 0x21, 0xD2, 0xAC, 0xC2, 0x89, 0x32, 0x34, 0x9C, 0x7A, 0x9B, 0xA4, 0xC1, 0xF3, 0x40, 0xA7, 0x3A, 0xA0, 0x98, 0x2A, 0x5E, 0x6B, 0xA2, 0x94, 0x0F, 0xB0, 0x96, 0x19, 0xF5, 0xEC, 0xD4, 0x7C, 0xA4, 0xDA, 0x9F, 0x0B, 0x24, 0x32, 0xF5, 0xFB, 0x05, 0x44, 0x28, 0x43, 0x67, 0x2B, 0xC1, 0x9D, 0x5E, 0x6B, 0xCE, 0x28, 0xF4, 0x0C, 0x67, 0x0D, 0x15, 0xF8, 0x41, 0x19, 0x20, 0x2F, 0x41, 0x13, 0x94, 0x27, 0x4C, 0x91, 0xCC, 0x60, 0xD1, 0x61, 0xE3, 0x65, 0xF6, 0x3A, 0x66, 0x71, 0x75, 0x1C, 0xCF, 0x39, 0x7F, 0xB7, 0xC1, 0x4B, 0xE8, 0x9B, 0xF8, 0x44, 0x77, 0x4D, 0x7C, 0x3D, 0x78, 0x99, 0xB6, 0x43, 0xB6, 0xC5, 0xA9, 0x58, 0x63, 0x50, 0xDE, 0x62, 0x48, 0xC8, 0xDF, 0xE0, 0x72, 0xAA, 0x1F, 0x79, 0x14, 0x62, 0x2B, 0x00, 0xA3, 0xAB, 0x60, 0xB2, 0xE0, 0x7E, 0xF5, 0x28, 0xE1, 0xA5, 0xCA, 0x21, 0xFD, 0x05, 0xF1, 0xFD, 0xFC, 0x02, 0xDD, 0x5D, 0xE9, 0x70, 0xD2, 0x78, 0xED, 0x37, 0x79, 0x5F, 0xD0, 0x28, 0xCD, 0x67, 0x65, 0x81, 0x53, 0xA6, 0xC6, 0x07, 0xCC, 0x60, 0x3C, 0x27, 0x6F, 0x40, 0xB9, 0xD4, 0xEB, 0xE4, 0x56, 0xE8, 0x88, 0x9C, 0x61, 0xF0, 0x94, 0x8B, 0xF9, 0x8F, 0xF4, 0x3C, 0xC5, 0x83, 0x0A, 0xBA, 0xAE, 0x0E, 0x40, 0x73, 0x2F, 0x69, 0xEF, 0x82, 0x81, 0x89, 0x06, 0x6D, 0x36, 0x34, 0x36, 0x68, 0xA7, 0x46, 0x0E, 0x29, 0x9C, 0x1B, 0xC9, 0xC7, 0xD0, 0x15, 0xAB, 0x7A, 0x72, 0x17, 0xF4, 0x81, 0x16, 0x49, 0x8E, 0x40, 0xBF, 0x45, 0xD7, 0x75, 0xD7, 0xD0, 0x31, 0xBC, 0x64, 0x5D, 0x08, 0xDA, 0x5E, 0xB6, 0x5F, 0xCB, 0x57, 0xC5, 0x64, 0x2F, 0xD7, 0x9C, 0x51, 0x29, 0xE3, 0x9E, 0x68, 0x0C, 0xE8, 0xD3, 0xE0, 0xEB, 0xE4, 0x67, 0x54, 0xEA, 0xB2, 0x85, 0xEC, 0x47, 0x62, 0xAC, 0x1E, 0x90, 0x83, 0x30, 0x8F, 0x96, 0x4B, 0x0E, 0xC3, 0xD3, 0xC4, 0x8D, 0x5A, 0x42, 0xF3, 0x0F, 0xB7, 0x51, 0xF3, 0x4B, 0xF3, 0xB3, 0x64, 0xA9, 0xC6, 0x5A, 0x93, 0x9E, 0xF9, 0x81, 0x84, 0xC8, 0xAA, 0x38, 0x11, 0xB9, 0x19, 0x3F, 0x11, 0x5C, 0x47, 0xB6, 0x62, 0x39, 0xCE, 0x26, 0x12, 0x41, 0x6B, 0xAC, 0xA4, 0x64, 0x27, 0xBC, 0x97, 0x66, 0x41, 0xAE, 0x84, 0xBE, 0x88, 0xCD, 0x35, 0x15, 0xB5, 0xC7, 0xAA, 0x04, 0xE4, 0xA1, 0xDA, 0xB1, 0xC5, 0xE3, 0xC9, 0xC0, 0x1A, 0x2C, 0xD3, 0x9E, 0xF8, 0xA7, 0x7A, 0x43, 0xDC, 0x2B, 0x62, 0x48, 0x5F, 0x1A, 0x34, 0x42, 0x3C, 0x22, 0x49, 0x27, 0x07, 0x32, 0x4A, 0xB5, 0x83, 0x61, 0x22, 0x1B, 0xE0, 0x77, 0x54, 0x25, 0xB9, 0x11, 0x3A, 0x22, 0x3C, 0x42, 0x1E, 0x6C, 0x7D, 0xCB, 0x7A, 0x41, 0x06, 0x36, 0x1F, 0x2A, 0x4E, 0x24, 0x2E, 0x34, 0x76, 0x66, 0x9E, 0x27, 0x84, 0xF5, 0xB3, 0xE3, 0xF2, 0x08, 0xBF, 0x9A, 0x96, 0xC0, 0x59, 0x04, 0x57, 0x67, 0xB7, 0x68, 0x17, 0x39, 0x53, 0xBD, 0xDB, 0x72, 0x05, 0x49, 0x20, 0x0B, 0x29, 0x17, 0xC9, 0x0D, 0x50, 0x03, 0xFF, 0x5F, 0xE2, 0xD2, 0x92, 0x09, 0xAC, 0x0C, 0x82, 0xDE, 0xD5, 0x59, 0x64, 0x41, 0x94, 0xB5, 0x73, 0x33, 0xB3, 0x89, 0xB1, 0xCD, 0x05, 0xB1, 0x1E, 0xF8, 0xCD, 0xBA, 0xA3, 0xFE, 0xBB, 0x09, 0x33, 0x03, 0xEA, 0xB0, 0x84, 0xB8, 0x8D, 0xFD, 0x63, 0x39, 0x91, 0xAC, 0x42, 0x52, 0x28, 0x6C, 0x72, 0x08, 0x62, 0x73, 0xDA, 0x3B, 0xDC, 0x8A, 0xDF, 0x57, 0xAC, 0x6F, 0x7D, 0x53, 0x1E, 0x55, 0xA0, 0x6E, 0x4E, 0x65, 0x31, 0x52, 0x57, 0x35, 0x1C, 0xE7, 0xAC, 0x89, 0x5E, 0x50, 0x7B, 0x81, 0xFF, 0x35, 0x60, 0x9A, 0x71, 0x44, 0xF2, 0xD7, 0x22, 0x33, 0xBD, 0xBD, 0x22, 0x96, 0xCE, 0xD4, 0x7A, 0x00, 0xFF, 0x58, 0x24, 0x6A, 0x4A, 0xC1, 0x87, 0x55, 0x3F, 0xDB, 0xB2, 0x2B, 0x0F, 0x96, 0x5F, 0x6B, 0x11, 0xB3, 0xEE, 0xE6, 0x8D, 0x6B, 0xFC, 0xC4, 0xB9, 0x96, 0xFC, 0xA3, 0x7E, 0x88, 0x6F, 0x8C, 0x0E, 0x30, 0xDD, 0x15, 0x0D, 0xFA, 0x7D, 0xAB, 0xFE, 0x2E, 0xBD, 0xE4, 0x30, 0xA2, 0x3B, 0xAF, 0xCC, 0xA4, 0x1F, 0xD7, 0xCE, 0x02, 0x53, 0x28, 0x7F, 0x69, 0xB2, 0x20, 0xDB, 0xAA, 0xD2, 0x96, 0x4B, 0xBC, 0xE6, 0xB2, 0x67, 0x4D, 0x77, 0x05, 0xB1, 0xB9, 0x60, 0xC3, 0x80, 0xC8, 0x3E, 0xF9, 0x4F, 0x1D, 0x53, 0xFC, 0x2B, 0x5A, 0x69, 0x9A, 0x2B, 0x73, 0xF3, 0xAB, 0xA8, 0x2E, 0x50, 0xA4, 0x38, 0x1C, 0xD6, 0x81, 0x40, 0x9F, 0x65, 0xAE, 0xE6, 0x25, 0x78, 0x97, 0x72, 0x50, 0xB3, 0x18, 0x62, 0xB2, 0x63, 0x9B, 0xEE, 0x48, 0xC7, 0x95, 0xBA, 0x37, 0x2E, 0x96, 0xC9, 0x72, 0x2A, 0xEB, 0x8B, 0x14, 0x76, 0xC9, 0xD2, 0xDA, 0x52, 0x65, 0x64, 0x14, 0xA5, 0x46, 0x05, 0xE8, 0x7D, 0xDF, 0x1B, 0xAE, 0x82, 0x8B, 0x16, 0x15, 0xE8, 0xEC, 0xC0, 0xCF, 0x96, 0xEF, 0x35, 0xC7, 0xA0, 0x12, 0x6A, 0x82, 0xC6, 0x07, 0x32, 0x56, 0xDE, 0x6E, 0x14, 0x41, 0x51, 0x25, 0x73, 0xEA, 0xFF, 0x40, 0xFF, 0x64, 0x1F, 0xAB, 0x0B, 0x81, 0x17, 0x25, 0x3B, 0x98, 0x82, 0xE1, 0xBD, 0x91, 0x2C, 0x23, 0x82, 0x58, 0xF9, 0x0E, 0x1B, 0xE2, 0xE0, 0x0B, 0x8B, 0x06, 0xB4, 0x4F, 0x61, 0x1F, 0x86, 0x87, 0x66, 0x0D, 0xB4, 0x9F, 0x6A, 0xD0, 0x38, 0x42, 0x35, 0x95, 0xCD, 0x0D, 0x7C, 0x7C, 0x59, 0x71, 0x71, 0x7D, 0x28, 0x2E, 0xCA, 0xAA, 0xAA, 0x8D, 0xC0, 0x4E, 0x24, 0x26, 0xD7, 0x54, 0x60, 0xD5, 0x91, 0xBA, 0xEA, 0x83, 0xD8, 0x14, 0xBF, 0xF9, 0xFA, 0x5F, 0xAA, 0xE5, 0x8B, 0x2C, 0xB5, 0xDB, 0x91, 0x3C, 0xCB, 0x4B, 0x9A, 0x6E, 0xE8, 0x17, 0x35, 0x5A, 0x63, 0x07, 0x71, 0xCB, 0xB0, 0x7A, 0xF3, 0xEA, 0xF4, 0x42, 0xCF, 0xDA, 0x17, 0x86, 0xEE, 0x4C, 0x5F, 0x13, 0x5B, 0x7F, 0x35, 0xA1, 0xC3, 0x48, 0xEA, 0x12, 0x23, 0x4A, 0x0D, 0x5F, 0x34, 0x31, 0xBE, 0x14, 0x7D, 0x11, 0x9E, 0x64, 0xFF, 0x4B, 0xAB, 0x47, 0x0B, 0xE9, 0xCF, 0x35, 0xCD, 0xB0, 0x39, 0x85, 0xD4, 0x38, 0x41, 0xF6, 0x65, 0x36, 0x75, 0x29, 0x0D, 0x59, 0xF9, 0x4D, 0xB5, 0x51, 0x75, 0xE7, 0x32, 0xEA, 0x6A, 0x2E, 0xD4, 0xFA, 0x26, 0xAC, 0xA8, 0xBE, 0x56, 0x33, 0x2A, 0xFC, 0xA6, 0x21, 0x55, 0x7F, 0xC5, 0xFB, 0x8A, 0xEE, 0x25, 0xA9, 0xB6, 0xDB, 0xA6, 0x65, 0xAB, 0x9C, 0x68, 0x2F, 0x34, 0x75, 0xB0, 0x9D, 0xC5, 0x36, 0x8D, 0x33, 0xF8, 0xA8, 0x0C, 0xAF, 0xB5, 0x6C, 0x0F, 0x2A, 0xE0, 0x98, 0x2E, 0xB4, 0xD6, 0xA4, 0x37, 0xD5, 0xA8, 0x9A, 0x96, 0x25, 0xCC, 0xAB, 0x1E, 0xA9, 0xB7, 0x8D, 0x18, 0x6D, 0xF0, 0x34, 0xDE, 0xF6, 0xDE, 0xA9, 0x7B, 0xA9, 0x55, 0xD9, 0x7E, 0xD0, 0x26, 0xAA, 0xC7, 0xD0, 0x2A, 0x35, 0x52, 0x38, 0xD6, 0x22, 0x5C, 0xB3, 0x00, 0xDC, 0x92, 0x7F, 0x71, 0x99, 0x6F, 0x49, 0x70, 0xE6, 0xE9, 0xFE, 0x1B, 0x65, 0xA9, 0x29, 0x7B, 0x97, 0x14, 0x57, 0x06, 0x45, 0xDF, 0xEA, 0x3C, 0x59, 0x85, 0x06, 0x56, 0xB4, 0x86, 0xF0, 0x6E, 0xB9, 0xDF, 0xAF, 0xFF, 0x57, 0xB4, 0xDD, 0xE6, 0x46, 0xF5, 0x5D, 0xB9, 0x9E, 0x3A, 0x59, 0x87, 0x00, 0xEC, 0x85, 0x43, 0xDA, 0x69, 0xE0, 0x60, 0x81, 0xD5, 0xD2, 0x8B, 0x15, 0x51, 0x99, 0x37, 0xFA, 0x1A, 0x98, 0x03, 0x49, 0x81, 0x3D, 0xDE, 0x55, 0xC9, 0x51, 0x1B, 0x3A, 0x70, 0xDE, 0xE4, 0x20, 0xA0, 0x85, 0x2E, 0xB4, 0xF4, 0x18, 0xAE, 0x8F, 0x96, 0xA8, 0x6C, 0x27, 0x54, 0x77, 0x2A, 0x00, 0xEA, 0x0E, 0x1D, 0x0B, 0x38, 0x62, 0xBE, 0xF4, 0x3F, 0x6A, 0x6F, 0x7E, 0x5C, 0x7F, 0x7D, 0x55, 0x4B, 0xC6, 0x99, 0xDE, 0xCB, 0xDC, 0x7F, 0x13, 0x7B, 0xBA, 0xFF, 0xE2, 0x3F, 0x8F, 0x2A, 0x6F, 0x0F, 0x16, 0x4D, 0x0E, 0x3A, 0xDD, 0x9C, 0x2A, 0x89, 0xF7, 0x38, 0x52, 0xD7, 0x20, 0xFB, 0xC7, 0xD6, 0xBD, 0x3A, 0x58, 0xD9, 0x41, 0x53, 0xEB, 0xE2, 0x40, 0x07, 0x8B, 0x7D, 0xDA, 0xC9, 0xE0, 0xA5, 0x5C, 0x51, 0xDF, 0x28, 0xD1, 0xFD, 0x74, 0x62, 0x89, 0xB5, 0xC4, 0x33, 0x31, 0xBE, 0xB3, 0x57, 0xF2, 0x3C, 0xB2, 0xB1, 0x2D, 0x41, 0x56, 0x18, 0xB8, 0xAE, 0x29, 0x4E, 0x31, 0xDE, 0x23, 0xAA, 0xF6, 0xA0, 0x92, 0x63, 0x9B, 0x66, 0xB8, 0x0A, 0x1C, 0xA3, 0xCF, 0xD6, 0x31, 0x40, 0x23, 0xA5, 0x59, 0xF3, 0x1B, 0xBC, 0x9D, 0xFD, 0x72, 0xC9, 0x15, 0xC5, 0xBD, 0x34, 0xDF, 0xEE, 0x14, 0x65, 0x43, 0xDC, 0x8F, 0x8E, 0x26, 0xE5, 0xEE, 0x88, 0xDD, 0xAD, 0x22, 0xA0, 0x30, 0x90, 0xD6, 0x98, 0x07, 0x72, 0xDD, 0x7F, 0xD5, 0x8E, 0x05, 0x5F, 0xD8, 0xE2, 0x06, 0x31, 0xF8, 0x86, 0xEE, 0xA3, 0x7D, 0x0F, 0xDE, 0xA1, 0x74, 0x6B, 0x9E, 0x80, 0x57, 0xB2, 0x97, 0xF5, 0x9C, 0x45, 0xFB, 0xD3, 0x8A, 0xBA, 0xEC, 0xD0, 0x96, 0xD8, 0x9F, 0xED, 0x9D, 0xC8, 0xBB, 0xB0, 0x8E, 0x96, 0x33, 0xC8, 0x4E, 0xFF, 0xF6, 0x86, 0x7F, 0x90, 0x57, 0xEE, 0x8D, 0x26, 0x0D, 0x92, 0x69, 0x2B, 0x34, 0xD0, 0xA1, 0xAF, 0xB4, 0xCF, 0xDA, 0xFF, 0x41, 0x66, 0x94, 0x00, 0xCD, 0x09, 0x70, 0x67, 0xB6, 0xB6, 0x9B, 0xA1, 0x39, 0x91, 0x96, 0xD7, 0x71, 0x47, 0x13, 0x92, 0xE0, 0xD3, 0xFA, 0x88, 0x54, 0x46, 0xCC, 0x6D, 0x9E, 0x43, 0x64, 0xF9, 0xF1, 0x1B, 0xA8, 0xD8, 0x3F, 0x6E, 0x5A, 0x93, 0xA7, 0x6A, 0xB3, 0xCD, 0x61, 0xFD, 0x27, 0xF8, 0x2E, 0x2D, 0x5F, 0x3B, 0x0C, 0x79, 0x59, 0x0C, 0x68, 0xD6, 0x81, 0xEA, 0x8C, 0x1D, 0x5D, 0x36, 0x35, 0x4E, 0x29, 0xFB, 0x3A, 0xFC, 0x8C, 0x7E, 0xF1, 0x09, 0xAD, 0x12, 0xC3, 0xD6, 0x88, 0xDE, 0xA6, 0x0C, 0xDD, 0x76, 0xFF, 0x71, 0xF5, 0xA5, 0xE4, 0x57, 0xD7, 0x26, 0xD3, 0x38, 0xAC, 0xD7, 0xFA, 0x93, 0xFE, 0x39, 0x52, 0x43, 0xDD, 0xAB, 0x6D, 0x85, 0xBC, 0x2D, 0x16, 0x68, 0x3A, 0x40, 0xFF, 0xB4, 0x53, 0x9D, 0xC5, 0x0D, 0xD2, 0x94, 0x5F, 0xED, 0x37, 0x1B, 0x62, 0xE3, 0x5A, 0x5A, 0xC7, 0xD6, 0x0E, 0x46, 0x44, 0x37, 0xB9, 0x19, 0x15, 0xBE, 0x5F, 0xEA, 0x61, 0x5D, 0xBF, 0xF3, 0x90, 0xC9, 0x93, 0x98, 0x6B, 0x9D, 0xAE, 0x7F, 0x8B, 0xCE, 0xA2, 0xB2, 0xB4, 0x6A, 0xC8, 0xC7, 0xFC, 0x88, 0x06, 0x02, 0x47, 0xA5, 0x52, 0xD6, 0x08, 0x8B, 0x53, 0x12, 0xCC, 0x47, 0x72, 0x4B, 0x9F, 0x45, 0xD5, 0x0F, 0x3D, 0xA8, 0x30, 0x0B, 0x31, 0x5B, 0xBA, 0x88, 0x95, 0xEF, 0xD5, 0xDB, 0xBD, 0x8D, 0x6B, 0xE5, 0x34, 0xDC, 0xF2, 0xAF, 0x30, 0x99, 0x91, 0x6D, 0x02, 0x64, 0x0D, 0xE6, 0xCD, 0xFA, 0x23, 0xCA, 0xA7, 0x0B, 0x86, 0xB4, 0x47, 0xC0, 0xEC, 0x14, 0xF5, 0xAA, 0x93, 0xE5, 0xE2, 0xF8, 0x31, 0x2B, 0x2E, 0x56, 0xB6, 0x45, 0x9A, 0x06, 0x0F, 0xB3, 0x2E, 0x07, 0x95, 0xF4, 0xCF, 0xE0, 0xC8, 0xBC, 0x36, 0x76, 0x9D, 0xE6, 0x8B, 0x9D, 0xA2, 0x5A, 0x94, 0xA2, 0xCF, 0x0C, 0x2B, 0x13, 0x4F, 0x2E, 0xB3, 0xE8, 0xD0, 0x9F, 0x02, 0x68, 0x0B, 0xA3, 0xB4, 0x57, 0xC0, 0xC8, 0x14, 0x9F, 0x95, 0x27, 0xD8, 0x95, 0x71, 0xCD, 0xCB, 0xBF, 0x72, 0xC0, 0x28, 0xC6, 0xC0, 0xEB, 0xFF, 0x5A, 0xE1, 0xD0, 0xDB, 0x2A, 0x58, 0xE8, 0x3D, 0xBA, 0xF3, 0xBC, 0x28, 0xD3, 0xF1, 0x6C, 0xF3, 0x72, 0xA9, 0x9D, 0xE5, 0x1A, 0x93, 0x95, 0xA2, 0x8C, 0x72, 0x54, 0x7F, 0x02, 0x48, 0xB3, 0x68, 0xD3, 0xBE, 0x06, 0x9D, 0x52, 0x96, 0xAE, 0x40, 0xF9, 0x6B, 0xE2, 0x2A, 0x87, 0xEE, 0x0A, 0x27, 0x47, 0x6A, 0x97, 0x6A, 0x45, 0x03, 0x41, 0x76, 0x4B, 0xF6, 0x48, 0xC6, 0x79, 0x5D, 0xE8, 0x68, 0x96, 0x1E, 0x76, 0x4C, 0x69, 0x92, 0xC8, 0x77, 0xD1, 0xEF, 0xD5, 0xAC, 0x57, 0x26, 0x52, 0xD9, 0xFA, 0xED, 0x80, 0x9C, 0x16, 0xA1, 0xFD, 0x04, 0x52, 0x52, 0x42, 0x86, 0x95, 0xD2, 0xA0, 0x58, 0xCD, 0x60, 0x92, 0x2C, 0x3C, 0x3C, 0xA4, 0x9F, 0x23, 0x6F, 0x0F, 0xF8, 0xDA, 0xF3, 0x51, 0x61, 0xE9, 0xF5, 0xAD, 0xBD, 0x49, 0xF1, 0xCD, 0xE9, 0x4F, 0xC3, 0x2B, 0x80, 0xC1, 0x28, 0x31, 0xDE, 0x05, 0x3A, 0xA8, 0x4A, 0x7D, 0x3A, 0xF0, 0x90, 0x12, 0xAF, 0x3D, 0x0E, 0x4E, 0x4B, 0xDA, 0x33, 0x74, 0x0C, 0x7C, 0x13, 0xF3, 0xBF, 0x81, 0xAB, 0x90, 0x4B, 0x58, 0x7A, 0x9F, 0x01, 0x62, 0x06, 0x04, 0xF6, 0x4C, 0x85, 0x2A, 0x3C, 0x6F, 0xB5, 0xDD, 0x85, 0xBC, 0x9C, 0xDE, 0x36, 0xB8, 0x40, 0x51, 0x56, 0xCE, 0xC6, 0x2C, 0x70, 0x19, 0xD5, 0x4F, 0xF7, 0x09, 0xF4, 0xB0, 0x70, 0xD5, 0x92, 0xE0, 0xE8, 0x64, 0xCF, 0x65, 0x13, 0x70, 0xFB, 0xD8, 0x47, 0x4B, 0xE7, 0xE3, 0x79, 0xE1, 0x9B, 0x7A, 0xED, 0x30, 0x6E, 0xC0, 0xBC, 0x2E, 0x85, 0xDA, 0xC2, 0xFD, 0x6E, 0xEB, 0x59, 0xB4, 0x77, 0xD1, 0xEE, 0x06, 0x2D, 0xE2, 0xC8, 0x38, 0x6D, 0x0C, 0x83, 0x04, 0x94, 0x0F, 0xBA, 0x4D, 0x60, 0x96, 0xF9, 0x35, 0xAD, 0x07, 0x70, 0x2B, 0xC9, 0x7C, 0x60, 0xBF, 0xFE, 0x59, 0x0C, 0xD2, 0xFF, 0x4D, 0x3F, 0x25, 0x3C, 0x78, 0x09, 0x47, 0xEB, 0xEB, 0x7F, 0xBC, 0x53, 0x42, 0x7C, 0x75, 0x0F, 0x6E, 0x1D, 0xC0, 0x70, 0x87, 0x94, 0x86, 0xE7, 0xE8, 0x1D, 0x46, 0x88, 0x31, 0x09, 0xFA, 0x43, 0xD9, 0xAE, 0xAB, 0x01, 0xD3, 0xCD, 0x77, 0x69, 0x3E, 0x01, 0x4B, 0x92, 0xD6, 0x0E, 0x04, 0xD4, 0x1E, 0x8D, 0x5E, 0xDE, 0x0F, 0x1B, 0xAF, 0x84, 0xE5, 0x2F, 0xF1, 0x37, 0x2C, 0xF6, 0xFF, 0xD8, 0xB1, 0x5E, 0x47, 0x71, 0xEF, 0x6D, 0xBD, 0x47, 0x52, 0x1D, 0xBE, 0x36, 0xBC, 0x51, 0x57, 0x30, 0xE6, 0x19, 0xA3, 0x61, 0x31, 0x45, 0xAB, 0xE3, 0x81, 0xE1, 0xE6, 0x0D, 0x9A, 0x13, 0x40, 0xD6, 0xF2, 0xEE, 0x8A, 0x8C, 0x8C, 0xF7, 0x5D, 0xB3, 0x99, 0x7B, 0xF2, 0xA6, 0x1B, 0xD6, 0x54, 0x8D, 0x94, 0xC4, 0xCA, 0x4F, 0xF0, 0x56, 0x56, 0x3E, 0x29, 0x33, 0x88, 0x62, 0xB8, 0x59, 0x89, 0x4D, 0xB2, 0x0D, 0xA2, 0x34, 0xEF, 0x40, 0x68, 0x44, 0x5E, 0x6E, 0x9F, 0xA9, 0x12, 0x02, 0xB1, 0x8C, 0x5B, 0xD8, 0x64, 0x50, 0x3B, 0xEC, 0x5F, 0xAC, 0x2F, 0x2E, 0xED, 0x78, 0x52, 0x36, 0x52, 0x9E, 0xA7, 0x5B, 0xC3, 0xBC, 0xC1, 0x8E, 0x52, 0x5C, 0xE3, 0x6C, 0xE4, 0xEE, 0x2D, 0xDD, 0x22, 0x38, 0x26, 0xDC, 0x9A, 0x70, 0x42, 0x66, 0x29, 0xCD, 0xF3, 0x9E, 0x0E, 0x15, 0x28, 0x43, 0xED, 0x5E, 0xA9, 0x62, 0xC0, 0x34, 0x46, 0x96, 0xFA, 0x3B, 0xE4, 0x3A, 0x50, 0x92, 0xD7, 0xCD, 0x5D, 0xDA, 0x7A, 0xB9, 0xC8, 0xC8, 0xEF, 0xD6, 0x5A, 0x97, 0x0F, 0x88, 0xFE, 0x95, 0x05, 0xB3, 0xE3, 0x24, 0x23, 0x25, 0x22, 0xBE, 0xB3, 0x8C, 0x95, 0xE0, 0x21, 0xF9, 0xAC, 0x38, 0xE7, 0x4D, 0x07, 0x8F, 0x82, 0x91, 0x76, 0x2D, 0x2A, 0x2A, 0x54, 0x62, 0x79, 0x42, 0xFD, 0x13, 0x3A, 0xDB, 0x3F, 0x3F, 0xFB, 0x91, 0x72, 0x57, 0x4B, 0x64, 0xFE, 0x3F, 0xCA, 0x3A, 0x72, 0x4F, 0xA9, 0x1F, 0x38, 0x57, 0xDC, 0xC3, 0x8C, 0x01, 0x9F, 0x14, 0x1B, 0xB8, 0x4D, 0xE0, 0xB5, 0xF8, 0x7B, 0xE2, 0x25, 0x50, 0xBF, 0xD7, 0x0D, 0xB0, 0x08, 0xF6, 0xB6, 0xB3, 0x55, 0xCD, 0x82, 0xFD, 0x2C, 0xC3, 0xB1, 0xB9, 0xB0, 0x47, 0xAF, 0x5F, 0xC6, 0x66, 0x22, 0xB9, 0x69, 0x6D, 0xAE, 0x27, 0x1E, 0x83, 0x47, 0x15, 0x5D, 0xC7, 0x1E, 0x8A, 0x36, 0x54, 0x84, 0x63, 0x9E, 0xC5, 0x33, 0x38, 0x93, 0xD4, 0x1B, 0xE2, 0xE3, 0x45, 0x35, 0x2A, 0xC2, 0xEB, 0x18, 0xF0, 0x0B, 0x9D, 0x6E, 0xBB, 0x56, 0x35, 0x13, 0xBE, 0x49, 0xDF, 0x85, 0x05, 0xC1, 0x05, 0x3D, 0x59, 0xA9, 0xF7, 0x4C, 0x50, 0xC3, 0xEC, 0xEC, 0x6A, 0xE3, 0xA0, 0xBA, 0xB9, 0xB0, 0xC4, 0x70, 0x45, 0x58, 0x58, 0xD6, 0xAE, 0x8F, 0x29, 0x24, 0xD9, 0xDB, 0xB5, 0x78, 0xCC, 0x46, 0xE1, 0x51, 0x82, 0xE7, 0xF1, 0x06, 0xE8, 0x57, 0xED, 0xB0, 0x79, 0xAF, 0x9A, 0x87, 0x88, 0xE8, 0x1C, 0x8C, 0x03, 0x83, 0xDD, 0x91, 0xC9, 0x45, 0xED, 0x44, 0x6D, 0x7B, 0x26, 0xA3, 0xE5, 0xAD, 0x4A, 0x99, 0xFF, 0xBF, 0xA6, 0x78, 0x41, 0x58, 0xA9, 0x53, 0xFD, 0x9B, 0x82, 0x02, 0x96, 0xC4, 0x94, 0xBF, 0xB8, 0x5A, 0x68, 0xAB, 0xCF, 0x73, 0xEF, 0x06, 0x6A, 0xB1, 0xB7, 0x36, 0x42, 0x95, 0x2B, 0xEA, 0x45, 0xF7, 0xC7, 0x3A, 0xE1, 0xBE, 0xAE, 0xFC, 0xC4, 0xB7, 0x4B, 0xD5, 0xA6, 0xEA, 0x74, 0x4D, 0x2F, 0x0D, 0xB9, 0x9B, 0x37, 0xBD, 0x6B, 0x1F, 0xBF, 0xB9, 0xF8, 0x53, 0xFB, 0x82, 0xFC, 0x1F, 0xCC, 0xE1, 0xA6, 0x09, 0x31, 0x16, 0x02, 0xA8, 0x26, 0xD6, 0x7D, 0x27, 0x10, 0x49, 0x3C, 0xB0, 0x49, 0x56, 0x79, 0xA3, 0xB7, 0xE8, 0x53, 0xB0, 0x83, 0xF0, 0x8E, 0xB6, 0xD6, 0xC4, 0x8D, 0x23, 0x62, 0x63, 0x76, 0x5A, 0xDB, 0xF2, 0x70, 0xF8, 0x9F, 0x9C, 0x5B, 0x4B, 0xF7, 0x70, 0x7F, 0x15, 0xBD, 0xE9, 0xC1, 0xF2, 0x36, 0x31, 0xED, 0xDB, 0x3C, 0xA3, 0xEA, 0x05, 0x61, 0xB5, 0xD5, 0x1E, 0xBB, 0x94, 0xEB, 0x35, 0xD5, 0x36, 0x56, 0x2A, 0x77, 0x55, 0x34, 0x6D, 0x17, 0xF6, 0x12, 0xDE, 0xDA, 0x7B, 0x8D, 0x53, 0x95, 0x25, 0x6E, 0xAA, 0xE0, 0xFE, 0x2F, 0x7F, 0x0F, 0xDE, 0xC9, 0x6F, 0x29, 0x4D, 0x12, 0xDB, 0x08, 0x9F, 0x33, 0x25, 0x45, 0x9F, 0xA4, 0x33, 0xB9, 0xF5, 0x31, 0x43, 0xCA, 0x19, 0xA2, 0x36, 0xCF, 0x71, 0x48, 0x80, 0xBC, 0xC9, 0xEE, 0x2F, 0x75, 0x29, 0x90, 0x61, 0x79, 0x15, 0xDB, 0x09, 0xE2, 0x3D, 0x37, 0x98, 0x85, 0xC5, 0x7F, 0x1A, 0x3E, 0xB3, 0x8B, 0x2A, 0x62, 0xB0, 0xCF, 0xDC, 0x24, 0xF6, 0x11, 0xD1, 0x1E, 0x41, 0x28, 0x2F, 0xA9, 0x48, 0x28, 0x3E, 0x2A, 0xBC, 0x1C, 0xD7, 0xA1, 0xB0, 0x97, 0x96, 0x7A, 0xE6, 0xC3, 0xA7, 0x94, 0x7E, 0xB6, 0x3B, 0xD4, 0x01, 0x60, 0xAC, 0x65, 0x11, 0xB6, 0x19, 0xB2, 0xEE, 0xDC, 0x50, 0x7A, 0x8F, 0x1B, 0x5B, 0xBF, 0xAE, 0x62, 0x27, 0xBF, 0x54, 0xDD, 0xCD, 0xAE, 0x15, 0xE5, 0x08, 0x84, 0xBC, 0xBF, 0x25, 0x60, 0x21, 0x43, 0xE4, 0x22, 0xEB, 0x8A, 0xBB, 0x2D, 0x9F, 0xA6, 0x38, 0xE2, 0xA9, 0x83, 0x63, 0xC0, 0x85, 0xB6, 0x88, 0x7A, 0x1E, 0xB4, 0x98, 0xFE, 0x1E, 0xDB, 0x09, 0x1D, 0x68, 0x73, 0x2D, 0x52, 0x29, 0x66, 0x98, 0x1A, 0x4A, 0x2F, 0x2A, 0xD3, 0x54, 0x73, 0x98, 0x53, 0x81, 0xB9, 0xFC, 0x50, 0xCE, 0x74, 0xE0, 0x6B, 0xC1, 0x1C, 0x81, 0x11, 0x3C, 0x1C, 0x7B, 0x5A, 0xFA, 0x08, 0x52, 0x79, 0x2E, 0x80, 0xEE, 0x43, 0x3F, 0x6D, 0xED, 0xD5, 0x93, 0x61, 0x0A, 0x7D, 0x29, 0x76, 0x1E, 0xB6, 0x6B, 0xF9, 0x3B, 0x7F, 0x10, 0x5B, 0x60, 0x0C, 0x2A, 0x8E, 0xC1, 0x62, 0xE1, 0x91, 0xF2, 0x67, 0xD8, 0x02, 0x9E, 0x81, 0x5D, 0xA2, 0xE6, 0xE7, 0x33, 0xF9, 0x8E, 0xAA, 0x3F, 0x31, 0x42, 0xC9, 0x43, 0x55, 0xA2, 0x47, 0x22, 0xD4, 0x84, 0x1C, 0xB3, 0xD9, 0xA4, 0x9E, 0x0A, 0x1F, 0xA3, 0x27, 0x63, 0x1F, 0xE1, 0xDC, 0xE6, 0x80, 0xDC, 0x42, 0xE3, 0x5F, 0x86, 0xEF, 0x85, 0x09, 0x86, 0x0F, 0x10, 0x5A, 0x36, 0x5E, 0xBF, 0x89, 0x7B, 0x95, 0x79, 0x58, 0xFB, 0x30, 0x6F, 0x09, 0x6F, 0x81, 0xA6, 0x64, 0x71, 0xA5, 0x24, 0x9E, 0x98, 0xE9, 0x1E, 0x09, 0xA5, 0xAB, 0xAA, 0x6D, 0x6C, 0xD4, 0xB3, 0x91, 0x22, 0xDA, 0x1F, 0xDC, 0x0C, 0x96, 0x34, 0x51, 0xB2, 0x2E, 0xB4, 0xC8, 0xF5, 0x21, 0xF9, 0x86, 0xA6, 0x16, 0x30, 0xA7, 0xA4, 0xA4, 0xE1, 0x0C, 0x47, 0x59, 0xC9, 0xAF, 0x0B, 0xC8, 0xAD, 0xE3, 0x4E, 0x36, 0xDE, 0x8C, 0xAE, 0x13, 0x2F, 0xD3, 0x31, 0xDD, 0x00, 0x68, 0x21, 0x86, 0x58, 0x1F, 0x50, 0x5B, 0x20, 0xBF, 0x69, 0x67, 0xF1, 0x10, 0x58, 0xD3, 0xB0, 0x2F, 0xB3, 0xA1, 0x17, 0xD3, 0xAE, 0xC9, 0x5B, 0xD0, 0x3D, 0xA0, 0x7C, 0x5D, 0x3C, 0xAB, 0x83, 0xA8, 0xAA, 0xAC, 0x88, 0x6F, 0xB5, 0xC8, 0x79, 0xCC, 0xB1, 0x6E, 0x58, 0x19, 0xB5, 0x4B, 0x3C, 0xDB, 0xE8, 0xEA, 0xE6, 0x01, 0xDE, 0x20, 0x3C, 0xAC, 0x8F, 0xA8, 0xCD, 0xD0, 0x3A, 0xDA, 0x5B, 0x3C, 0x07, 0x6E, 0xAD, 0x3B, 0x93, 0x39, 0x75, 0xC5, 0x02, 0x0D, 0x98, 0xB3, 0x71, 0xD9, 0x4D, 0x45, 0x5D, 0xE1, 0xF5, 0xBE, 0x6C, 0xF6, 0xBC, 0xF2, 0xAC, 0xAE, 0xFB, 0x39, 0xE3, 0xAA, 0xB4, 0xAD, 0xD1, 0x91, 0x2F, 0x44, 0x5B, 0x6B, 0xFD, 0xDD, 0xC4, 0x60, 0x13, 0xB9, 0xDA, 0x66, 0x9E, 0x7A, 0x9A, 0x6A, 0x3C, 0x3D, 0x1D, 0xE7, 0xC0, 0x03, 0xCD, 0xAD, 0x62, 0x51, 0xF6, 0x3E, 0xDD, 0x11, 0xF1, 0xB9, 0x82, 0xD3, 0x20, 0x2C, 0x9D, 0x5D, 0xA6, 0xE2, 0x21, 0x32, 0x13, 0x6B, 0x42, 0x9E, 0x49, 0x71, 0x92, 0xFB, 0x34, 0xAA, 0x0E, 0x7C, 0x26, 0xDA, 0xE5, 0xB6, 0x0D, 0x7D, 0x27, 0x5F, 0x6D, 0x53, 0x80, 0xF1, 0x80, 0x62, 0xBA, 0x0A, 0x47, 0x41, 0xA2, 0x71, 0x17, 0xFF, 0x66, 0x89, 0xAB, 0x76, 0xAF, 0xE0, 0x67, 0xC5, 0x39, 0x00, 0x13, 0xDD, 0x67, 0xFF, 0xE1, 0x04, 0x49, 0x3E, 0xF1, 0x9C, 0x73, 0x77, 0xCB, 0xF5, 0xC2, 0x5D, 0x8B, 0x11, 0xE0, 0x91, 0x34, 0xD6, 0x3D, 0x18, 0xC5, 0x95, 0xD6, 0x36, 0x31, 0x58, 0x22, 0x18, 0x40, 0x0F, 0xC4, 0x31, 0xC8, 0xAC, 0x6E, 0x72, 0xD5, 0x4B, 0x0E, 0x4B, 0x9B, 0xC8, 0xBD, 0xC4, 0x27, 0x95, 0x37, 0x04, 0xA8, 0xF0, 0x10, 0xBB, 0x5C, 0x3C, 0x43, 0xF2, 0x77, 0x4E, 0x9B, 0xF4, 0x87, 0x2C, 0x27, 0x26, 0x4B, 0x79, 0x57, 0x21, 0x72, 0xC7, 0xD1, 0xC9, 0xC0, 0x3D, 0x1B, 0x6F, 0xCC, 0x0D, 0xB2, 0xA7, 0x4F, 0xC6, 0x8D, 0xD0, 0xFA, 0x9A, 0x14, 0x66, 0xA3, 0xCC, 0x89, 0x68, 0x60, 0x5F, 0x55, 0xC4, 0x2B, 0x78, 0xDC, 0x4F, 0x4A, 0x2A, 0xAB, 0x46, 0x38, 0x13, 0x08, 0xC8, 0xF6, 0x96, 0xA4, 0x80, 0x79, 0xD1, 0x22, 0xC5, 0x31, 0x68, 0x86, 0xFB, 0x54, 0x64, 0x2D, 0xB4, 0xDE, 0x66, 0x1A, 0x66, 0x03, 0x7D, 0xA7, 0xBD, 0xC7, 0xFB, 0xE1, 0xF9, 0x86, 0x67, 0x15, 0x81, 0xE8, 0x1F, 0x7C, 0x36, 0x93, 0xAF, 0x8A, 0x93, 0x6D, 0xAA, 0x3A, 0xAB, 0x8A, 0x67, 0x6E, 0xE7, 0xF3, 0x54, 0x69, 0x59, 0x17, 0xC5, 0x81, 0x2A, 0x6A, 0xE4, 0x15, 0xC5, 0x64, 0x74, 0xC0, 0xCD, 0x1A, 0xE1, 0x23, 0x02, 0xEB, 0x4D, 0x98, 0x2D, 0xBC, 0x8C, 0x76, 0x12, 0xDF, 0x0D, 0xC7, 0xEB, 0xEF, 0x95, 0x4D, 0xD5, 0xA7, 0x62, 0x36, 0x15, 0xAD, 0xBA, 0x26, 0x49, 0x2C, 0x9B, 0xA1, 0x3D, 0x57, 0xD9, 0xC5, 0xFD, 0xAA, 0xD9, 0x9F, 0x15, 0x23, 0x8A, 0x26, 0x33, 0x23, 0xE3, 0xE5, 0x4A, 0x3C, 0xCA, 0x55, 0x8A, 0xF8, 0xA8, 0x68, 0xD6, 0xB1, 0x98, 0x23, 0xE2, 0x4A, 0x33, 0xE2, 0xD7, 0xE1, 0x7C, 0xDD, 0xE5, 0xE2, 0x9D, 0x8D, 0xD1, 0xE8, 0x9A, 0xB2, 0x1B, 0x0D, 0x0B, 0x45, 0x3A, 0x66, 0x6F, 0x5D, 0x5D, 0x45, 0x30, 0x67, 0x8D, 0xA9, 0x3C, 0xD3, 0x43, 0x98, 0x5C, 0x9D, 0x16, 0xB1, 0x56, 0x76, 0x52, 0xEB, 0xE2, 0xF2, 0x10, 0xFE, 0xA0, 0xBE, 0x6A, 0xF5, 0x15, 0x73, 0x40, 0x36, 0xD2, 0x4A, 0xF0, 0x0F, 0x70, 0x9E, 0xB6, 0xB4, 0x28, 0xAE, 0x6B, 0x08, 0xF9, 0x5D, 0x6A, 0xEA, 0x58, 0x29, 0x9E, 0x59, 0x99, 0xDE, 0xDA, 0x5A, 0x9E, 0x5B, 0xD5, 0xD8, 0x94, 0x96, 0xBE, 0x59, 0x20, 0xA9, 0xCB, 0x0A, 0x63, 0xC8, 0x42, 0x0C, 0x02, 0x17, 0x6F, 0x78, 0x35, 0x9E, 0x6C, 0x3D, 0x05, 0x33, 0x47, 0x6D, 0x68, 0xCB, 0x89, 0xD1, 0x70, 0xA1, 0xB6, 0xA1, 0xE0, 0xE7, 0xB2, 0xBB, 0x68, 0x48, 0xF1, 0xE7, 0x7E, 0xAD, 0x70, 0x7F, 0xC5, 0xF8, 0x9E, 0xF2, 0xD2, 0xC5, 0x6C, 0xA4, 0xFD, 0x62, 0xBA, 0x1D, 0xDF, 0xD8, 0x3C, 0x2A, 0x4C, 0x20, 0x3D, 0x5C, 0xD3, 0xE6, 0x6A, 0x01, 0xA7, 0x11, 0xFB, 0xAC, 0x07, 0xB1, 0xBF, 0xD0, 0x76, 0xBA, 0x13, 0x31, 0x11, 0xAE, 0x34, 0x24, 0x02, 0xC9, 0x39, 0x6F, 0x11, 0x47, 0x20, 0xAF, 0x28, 0x4E, 0x18, 0x09, 0xAC, 0x2F, 0x9F, 0x53, 0x7E, 0x14, 0xE4, 0xB3, 0x72, 0x33, 0x0E, 0x41, 0xCF, 0x78, 0x8E, 0x11, 0xD6, 0xC8, 0x4D, 0xD1, 0x6A, 0x97, 0x3E, 0xF5, 0x7A, 0xB9, 0xD1, 0x6A, 0x35, 0x2E, 0x05, 0x52, 0x68, 0x93, 0x09, 0x4F, 0x50, 0xA5, 0x1B, 0x23, 0x8F, 0x28, 0xE9, 0x06, 0x87, 0xE5, 0x6B, 0x2A, 0x06, 0x04, 0x0F, 0x14, 0x37, 0xD8, 0x7B, 0xCA, 0xBE, 0x00, 0x93, 0xB8, 0x4F, 0xD3, 0x7F, 0x80, 0x43, 0x42, 0x30, 0xC2, 0x1A, 0xFE, 0x28, 0x9D, 0xE5, 0xB2, 0x47, 0x9D, 0xA6, 0xF8, 0x64, 0x75, 0x08, 0x2F, 0x00, 0x2D, 0x69, 0x74, 0x22, 0x00, 0x9A, 0x82, 0xB7, 0x4A, 0x16, 0x54, 0xE9, 0xC0, 0x65, 0xD2, 0x99, 0xBC, 0x41, 0x81, 0x99, 0xEC, 0xB4, 0x90, 0x5E, 0x1A, 0xAA, 0x48, 0x12, 0x8F, 0xA4, 0x9D, 0x03, 0x62, 0xA5, 0x6B, 0x22, 0xCC, 0xE1, 0x89, 0xF2, 0xE7, 0x2E, 0x97, 0x54, 0x2F, 0x81, 0x0E, 0xAB, 0x7B, 0x78, 0x14, 0x34, 0x96, 0x16, 0x46, 0x44, 0x41, 0x3D, 0xD8, 0x0C, 0xE1, 0x28, 0x49, 0x13, 0x70, 0x5E, 0xA4, 0x96, 0xFD, 0xCD, 0xBF, 0x27, 0x11, 0xC9, 0xB7, 0x95, 0xBC, 0x90, 0x11, 0xCA, 0xF0, 0xB4, 0x79, 0x8A, 0x6F, 0x40, 0x71, 0xF8, 0x3C, 0xC8, 0x09, 0x8C, 0x72, 0x59, 0xAB, 0xEA, 0x82, 0x52, 0xAC, 0xDE, 0xE0, 0xBE, 0xD0, 0x3F, 0xB4, 0x7C, 0x22, 0x13, 0xFA, 0x8D, 0x26, 0xF0, 0x0E, 0xC1, 0x4C, 0xC5, 0x6B, 0x41, 0x39, 0xBC, 0x81, 0x07, 0x8B, 0x96, 0x20, 0x85, 0xC5, 0x27, 0x24, 0x3F, 0x90, 0x13, 0xA9, 0xC5, 0xF2, 0xBB, 0xC8, 0xCB, 0x30, 0x03, 0x68, 0x44, 0x36, 0xBA, 0x14, 0xAA, 0x8A, 0xE0, 0x2F, 0x56, 0xA7, 0x71, 0x2F, 0x98, 0x43, 0x8B, 0x27, 0x38, 0xB0, 0x03, 0xFC, 0x88, 0x53, 0x4D, 0xBE, 0x97, 0x2D, 0xE7, 0x2D, 0x27, 0x2F, 0x72, 0x68, 0x42, 0x57, 0x12, 0x28, 0x8A, 0x10, 0xAF, 0x22, 0xE7, 0xA4, 0x0C, 0xC8, 0xEE, 0xE1, 0xDF, 0xC3, 0xD2, 0x80, 0xD7, 0x98, 0x97, 0xCB, 0x18, 0x95, 0x3D, 0x5A, 0x63, 0xA5, 0xC3, 0x7D, 0xE0, 0x07, 0xB4, 0x59, 0x04, 0x09, 0x3B, 0x21, 0xF9, 0x6C, 0x69, 0x9D, 0x9D, 0xF4, 0x27, 0xE7, 0x74, 0xED, 0x16, 0x76, 0x39, 0x5F, 0x6A, 0xF2, 0x2E, 0xC8, 0x10, 0xE5, 0x19, 0x9D, 0x92, 0x35, 0xD2, 0xAF, 0xFA, 0x25, 0xA1, 0x20, 0x10, 0x45, 0xDE, 0x72, 0x2E, 0x40, 0x1F, 0xAB, 0x67, 0x5B, 0x39, 0xE1, 0xEE, 0x48, 0x2C, 0xF5, 0x0E, 0xD1, 0x09, 0xCF, 0x07, 0x8F, 0xB1, 0xA0, 0xB6, 0x65, 0xD2, 0xE3, 0x55, 0x8F, 0x5B, 0xF7, 0xB3, 0x6D, 0x79, 0x79, 0x4D, 0xEF, 0xF2, 0xAE, 0x09, 0xB1, 0x7A, 0x45, 0xE2, 0x61, 0xE9, 0xA2, 0x9A, 0x17, 0x41, 0xBB, 0x94, 0x23, 0xBA, 0x4D, 0x4E, 0x5B, 0xD0, 0x1A, 0xAC, 0xDC, 0xCA, 0x1A, 0xB7, 0x40, 0x06, 0xA9, 0x5F, 0x89, 0x41, 0x78, 0x3C, 0x50, 0xC9, 0x8C, 0xEF, 0x1D, 0x96, 0xCE, 0x67, 0x5F, 0xE8, 0x59, 0xC1, 0xEC, 0xE4, 0x6A, 0x3B, 0x9D, 0x73, 0xD3, 0x04, 0xCA, 0x16, 0x2C, 0x61, 0xA6, 0xF8, 0x41, 0xFD, 0x3F, 0xC1, 0xAE, 0x8A, 0x3B, 0xD5, 0x4C, 0xD7, 0x71, 0xC8, 0x15, 0xFC, 0x96, 0xD5, 0x11, 0xEC, 0x03, 0x3A, 0x9E, 0x36, 0x9F, 0x58, 0x0B, 0x7D, 0x43, 0x8B, 0xD4, 0x9E, 0xB9, 0x56, 0xD2, 0x12, 0x55, 0x5B, 0x51, 0x2F, 0xAB, 0x47, 0xE5, 0x59, 0x9E, 0x99, 0xBF, 0x42, 0x05, 0xB2, 0x8A, 0x92, 0x2C, 0xD4, 0x54, 0xDE, 0xE8, 0x90, 0x58, 0xF5, 0x6D, 0x51, 0x99, 0x13, 0x13, 0x2F, 0x91, 0x87, 0x32, 0xEC, 0x89, 0x02, 0xC0, 0x83, 0x72, 0x89, 0x38, 0x0E, 0x2A, 0xA0, 0x1A, 0xE4, 0x7C, 0x89, 0x5E, 0xF4, 0x19, 0x71, 0xAF, 0xF8, 0x8B, 0x95, 0x8E, 0x8C, 0xB0, 0xCE, 0xE6, 0x5F, 0x41, 0xA7, 0x73, 0x89, 0xC4, 0x47, 0xE8, 0x75, 0xA1, 0x75, 0xB0, 0x40, 0xBD, 0x40, 0xB2, 0xC3, 0xC9, 0x1F, 0xFF, 0x5B, 0xB1, 0x89, 0x51, 0x42, 0xC4, 0x80, 0xA3, 0xA8, 0xEE, 0xC4, 0x29, 0xF0, 0xBB, 0xE2, 0x34, 0x64, 0xCB, 0xFE, 0x9F, 0xB0, 0x18, 0x9A, 0xC6, 0x9D, 0xC6, 0x14, 0x40, 0x67, 0xF9, 0xBF, 0xF3, 0x6A, 0xE1, 0x0A, 0xD1, 0x95, 0x84, 0xAF, 0x48, 0xBF, 0x74, 0x46, 0xD0, 0x65, 0x55, 0xB2, 0x9C, 0xE5, 0x14, 0x86, 0xED, 0x02, 0xE2, 0x18, 0xAB, 0x09, 0x37, 0xF0, 0x3A, 0xB5, 0x9D, 0x38, 0x0B, 0xE1, 0x72, 0x9E, 0xE2, 0xBB, 0x78, 0x8C, 0xA0, 0x5A, 0x79, 0x4A, 0xB2, 0xAE, 0x62, 0x00, 0x38, 0x22, 0xFB, 0x9E, 0xFB, 0x07, 0x1A, 0xA3, 0x98, 0x95, 0xA0, 0x84, 0x07, 0x95, 0x61, 0x41, 0xDB, 0xD1, 0x4E, 0x00, 0x77, 0xEA, 0xC5, 0x78, 0xE0, 0x73, 0xC6, 0x4F, 0x82, 0x0A, 0xB5, 0x51, 0x6F, 0x10, 0xD7, 0xA0, 0xEB, 0xD2, 0x71, 0xF2, 0x30, 0xD0, 0x9F, 0xF7, 0x49, 0xFE, 0x19, 0x9A, 0x56, 0x1E, 0xAF, 0x9C, 0x07, 0x3D, 0xCF, 0x69, 0x04, 0x1A, 0xE1, 0xF0, 0x78, 0x16, 0x64, 0x84, 0x9B, 0x83, 0xC7, 0x22, 0xDF, 0xE1, 0x9D, 0x4E, 0xAF, 0x31, 0x17, 0x58, 0x66, 0x35, 0x9F, 0x58, 0x00, 0x5B, 0x52, 0xEF, 0x12, 0xCF, 0xA0, 0xEF, 0xE2, 0xF7, 0x52, 0x6F, 0x7C, 0x88, 0x73, 0x4B, 0x56, 0x89, 0xDF, 0x28, 0x8D, 0x91, 0x37, 0xE1, 0xD1, 0x59, 0x4C, 0xA5, 0x0F, 0x6E, 0x16, 0x97, 0x03, 0x56, 0x63, 0xEE, 0xC1, 0xB3, 0x90, 0x72, 0xD5, 0x17, 0xA7, 0x8D, 0xEA, 0x1F, 0xC8, 0x5D, 0xC6, 0x0D, 0xC2, 0x0C, 0xD6, 0x52, 0x57, 0x12, 0x7F, 0xA0, 0xD7, 0x12, 0x47, 0x71, 0x45, 0x4D, 0x07, 0xFB, 0xB4, 0xE4, 0xA9, 0x31, 0xB3, 0xB8, 0x57, 0x16, 0x64, 0x78, 0x9A, 0xA1, 0x53, 0xB8, 0xE8, 0x97, 0xC4, 0x5E, 0x03, 0x86, 0xB4, 0x35, 0x41, 0xFF, 0x83, 0xD7, 0x10, 0x90, 0xE3, 0x07, 0xF5, 0x1E, 0x55, 0x38, 0x23, 0xF7, 0xBF, 0x5D, 0x67, 0xA8, 0x09, 0xE4, 0x02, 0xE8, 0x88, 0x88, 0x2E, 0x5A, 0xD8, 0x3C, 0x86, 0xE3, 0x2B, 0x5E, 0xDE, 0x68, 0x28, 0x71, 0x97, 0x66, 0xD4, 0x6F, 0xC9, 0xE8, 0x91, 0xAB, 0x6B, 0x27, 0xC7, 0x5C, 0x54, 0xFE, 0xAA, 0xDE, 0x19, 0xB0, 0x0F, 0xB6, 0xD2, 0x7A, 0x39, 0xD2, 0xD5, 0x22, 0xB5, 0xD8, 0xF2, 0x37, 0x31, 0x11, 0x99, 0x4E, 0x9D, 0x4B, 0xDA, 0x40, 0xBD, 0xFC, 0x2D, 0x42, 0x63, 0x57, 0x02, 0xFB, 0x82, 0xE8, 0x64, 0x07, 0x58, 0xA4, 0x91, 0x74, 0xB7, 0xC6, 0xA7, 0x77, 0xCB, 0x6A, 0x1A, 0xC5, 0x8B, 0xCB, 0x15, 0x0F, 0x4D, 0xD7, 0xFD, 0xF3, 0xA0, 0x26, 0x7D, 0x82, 0xA3, 0x99, 0x7A, 0x0A, 0x56, 0x67, 0xF9, 0x01, 0x7F, 0x85, 0x64, 0x50, 0xBE, 0x93, 0x8E, 0x10, 0x21, 0x18, 0xD4, 0x1B, 0x72, 0x7F, 0xB2, 0x1A, 0xB5, 0xBB, 0x8B, 0x38, 0x45, 0xAB, 0x34, 0xBF, 0xCA, 0xE9, 0x19, 0x0B, 0x34, 0x02, 0x56, 0xC4, 0xE2, 0xA5, 0xE4, 0x45, 0xAE, 0xB5, 0x7F, 0x20, 0x59, 0x26, 0xDC, 0xE3, 0xF0, 0x84, 0x0C, 0x93, 0x5D, 0xA7, 0xAF, 0x24, 0x63, 0x81, 0x59, 0x16, 0xDB, 0xC8, 0x44, 0x90, 0xCF, 0xAF, 0xD3, 0xCE, 0x2C, 0x29, 0x60, 0x4A, 0xC8, 0xBD, 0xE5, 0xC1, 0x85, 0xBF, 0x49, 0x80, 0xF9, 0x2A, 0x3D, 0x93, 0x1C, 0xC7, 0x39, 0xB6, 0x98, 0x45, 0xEC, 0x13, 0x08, 0xFD, 0x4C, 0xC4, 0x1A, 0xC9, 0x02, 0x87, 0xF5, 0xC4, 0x0F, 0x45, 0x01, 0xFD, 0x0F, 0xE9, 0x0E, 0x5C, 0xA6, 0xC4, 0x91, 0xB1, 0xE0, 0x03, 0xCE, 0x13, 0x42, 0xC3, 0x1E, 0x5D, 0xE1, 0x4B, 0x4C, 0xE0, 0x8C, 0x2B, 0x78, 0x82, 0x9F, 0xE6, 0x9D, 0x4A, 0x97, 0xE3, 0x9D, 0xC2, 0xA4, 0xC5, 0x56, 0xF8, 0x76, 0xF1, 0x6F, 0x5F, 0x1D, 0xFE, 0x59, 0xB6, 0xDE, 0xE1, 0x24, 0x31, 0xAC, 0x7C, 0x64, 0x89, 0x92, 0x73, 0xC1, 0x7E, 0xCA, 0x63, 0x32, 0x0A, 0xCA, 0xAD, 0x9A, 0xA1, 0x56, 0x08, 0xC3, 0xCB, 0xD4, 0xEA, 0xB7, 0xA2, 0x7D, 0x79, 0x2D, 0xEA, 0x6F, 0x52, 0x59, 0x5A, 0x0D, 0x16, 0x26, 0x13, 0x47, 0x8B, 0xB0, 0x33, 0x8A, 0xD1, 0x7E, 0x7E, 0x78, 0x81, 0x72, 0x68, 0xD1, 0x52, 0x22, 0x13, 0xE4, 0x32, 0x26, 0x11, 0x3F, 0xA1, 0x38, 0x6A, 0xD6, 0x7F, 0xD4, 0x10, 0x1B, 0x44, 0xEF, 0x2B, 0x6C, 0xCB, 0xBE, 0xA9, 0x82, 0x95, 0xAA, 0xDC, 0xAD, 0x2A, 0x2D, 0x38, 0x3B, 0x65, 0x8B, 0xEA, 0x13, 0xA8, 0x8C, 0xFC, 0xAD, 0x3E, 0x07, 0x4D, 0xF3, 0x7B, 0x8C, 0x1D, 0x83, 0xBA, 0x1C, 0x13, 0x89, 0x39, 0xD0, 0x39, 0x46, 0x1A, 0xF1, 0x16, 0x3A, 0x44, 0x85, 0xC9, 0x64, 0x68, 0x47, 0xF9, 0x44, 0x04, 0x45, 0x77, 0x95, 0xBE, 0x42, 0x36, 0xAB, 0x8E, 0xE5, 0x6C, 0x44, 0xFD, 0x55, 0xB7, 0x92, 0x50, 0xF4, 0x8D, 0xEA, 0x70, 0xE4, 0x54, 0xD5, 0x27, 0x95, 0x97, 0xDF, 0x61, 0x2C, 0x0C, 0x25, 0x16, 0xED, 0xC7, 0x5F, 0x20, 0x53, 0x18, 0x13, 0x89, 0x77, 0xF0, 0x34, 0x6A, 0x3C, 0x59, 0x01, 0xF5, 0x57, 0x78, 0xC3, 0xA3, 0xF5, 0xE3, 0x8A, 0x52, 0x60, 0x44, 0x47, 0x66, 0x55, 0x23, 0xA3, 0xB5, 0x4B, 0x13, 0xEE, 0x23, 0x67, 0x35, 0xEB, 0x23, 0x47, 0xA3, 0x7F, 0x48, 0xAA, 0xDF, 0x88, 0xDA, 0x88, 0x6D, 0x70, 0xF8, 0x07, 0xDF, 0x89, 0x06, 0x58, 0x46, 0x13, 0x3F, 0x60, 0x5F, 0xCA, 0x46, 0x52, 0x03, 0x15, 0x57, 0x6C, 0x02, 0x4F, 0xD6, 0xED, 0x2D, 0xB4, 0x80, 0xF2, 0x6B, 0xA3, 0x33, 0x7F, 0xC2, 0x8E, 0x35, 0x67, 0x13, 0xEB, 0x91, 0x79, 0xD5, 0x6F, 0x22, 0xF8, 0x68, 0x8A, 0x7E, 0x81, 0xEF, 0x54, 0xF5, 0x24, 0x32, 0xD8, 0xBE, 0x0B, 0xD7, 0xAA, 0x02, 0xE9, 0x4A, 0xE2, 0x27, 0x9C, 0x49, 0x31, 0x27, 0x3B, 0x21, 0x5A, 0xF9, 0x6A, 0xA0, 0xBF, 0xF5, 0x65, 0x51, 0x2F, 0x68, 0xDE, 0x32, 0x2D, 0x73, 0x17, 0xF8, 0xB4, 0x31, 0x3D, 0xF1, 0x09, 0x3C, 0xAE, 0x2E, 0x30, 0x7C, 0x1D, 0x42, 0x1A, 0x51, 0xEF, 0xD9, 0xAA, 0x41, 0x6D, 0xAA, 0x5D, 0x19, 0xEE, 0xA9, 0x0E, 0xA0, 0x4F, 0x21, 0xEE, 0xC1, 0x35, 0x16, 0x77, 0xC8, 0x0E, 0xF0, 0x6B, 0x09, 0xAF, 0xB1, 0x3C, 0x2F, 0x36, 0xCF, 0xBF, 0x3E, 0xB8, 0xC8, 0x35, 0x23, 0xBB, 0xF6, 0x68, 0xE9, 0xCA, 0x04, 0x53, 0xCD, 0xE3, 0xCA, 0xEF, 0xA1, 0x0E, 0xD5, 0x4D, 0x9C, 0x4A, 0xAF, 0x78, 0xFD, 0x52, 0x61, 0x80, 0x9D, 0xB5, 0x56, 0x2D, 0xDB, 0x48, 0x9B, 0xA8, 0x49, 0x52, 0x7E, 0x36, 0xAF, 0x27, 0xFF, 0x01, 0x0B, 0x8A, 0xE9, 0xF5, 0x21, 0x25, 0x0B, 0xF2, 0xC6, 0xD5, 0xB6, 0x96, 0xD5, 0xA4, 0xD1, 0x4D, 0x2E, 0x95, 0xFB, 0x63, 0x5B, 0x8C, 0xEB, 0xAB, 0xBC, 0x43, 0x33, 0x0D, 0x3B, 0xF9, 0x51, 0x5E, 0x0C, 0xDD, 0x17, 0x71, 0x8A, 0x1D, 0x43, 0xEB, 0x22, 0x7F, 0x47, 0xAB, 0xD7, 0xB8, 0x02, 0x3D, 0x16, 0x59, 0xE4, 0x61, 0x70, 0x6F, 0x91, 0x79, 0xAD, 0x37, 0xF3, 0x57, 0x8E, 0xA6, 0xE6, 0x0D, 0xBB, 0x3D, 0x75, 0x8A, 0xB1, 0x8F, 0x3B, 0x27, 0xE6, 0x65, 0x75, 0x28, 0xBF, 0x2D, 0x54, 0xA7, 0x3F, 0x25, 0x6A, 0xF7, 0xFC, 0xA1, 0x4B, 0x93, 0xEE, 0xB3, 0xE3, 0x69, 0xAE, 0x28, 0xD3, 0xE9, 0x01, 0x9A, 0x29, 0x60, 0x1C, 0xC5, 0x91, 0xDC, 0x0E, 0x59, 0x14, 0x5E, 0x33, 0x6E, 0xE3, 0x7B, 0x66, 0x5B, 0x57, 0xDF, 0x15, 0x74, 0x26, 0x73, 0x0C, 0xF7, 0x44, 0x07, 0x16, 0xDF, 0xD0, 0xDF, 0x93, 0x80, 0x21, 0x7E, 0xBA, 0xFB, 0x32, 0x85, 0xE7, 0x7D, 0xED, 0x26, 0x85, 0xC2, 0x7E, 0x8C, 0x46, 0x0D, 0x6C, 0xA2, 0x3F, 0x26, 0x5F, 0x80, 0xB7, 0x29, 0x57, 0xC8, 0xB5, 0x50, 0x6E, 0x7E, 0x9B, 0xE1, 0x9B, 0xB4, 0x27, 0x9B, 0xAD, 0xBF, 0x2D, 0x1B, 0x49, 0x9E, 0xA7, 0x8F, 0x51, 0x4C, 0x8E, 0x7E, 0xA3, 0x5B, 0xAB, 0xF4, 0x0D, 0x1E, 0xAD, 0x1B, 0x0B, 0xF8, 0x78, 0xF6, 0x6A, 0xCD, 0x41, 0x9A, 0x7D, 0x96, 0xC6, 0x1B, 0x7C, 0x67, 0x19, 0x46, 0x5E, 0x84, 0xA2, 0xA8, 0x2E, 0xE4, 0x1A, 0xA8, 0x22, 0x73, 0xB7, 0xC1, 0x0E, 0xE2, 0x66, 0x8D, 0xD5, 0x8F, 0x87, 0x13, 0x92, 0x8E, 0xEA, 0xE2, 0xE1, 0xC6, 0xA8, 0x2D, 0xDA, 0x0F, 0xF0, 0xCF, 0xC0, 0xF3, 0xDA, 0x7C, 0xF8, 0x97, 0x67, 0x9C, 0xA6, 0x0B, 0x3E, 0x69, 0x3F, 0x89, 0xFC, 0x03, 0x4F, 0xB5, 0x9C, 0x46, 0x9E, 0x82, 0x30, 0xEA, 0x44, 0x72, 0x27, 0x14, 0x96, 0xB9, 0x53, 0x27, 0x27, 0xF8, 0x19, 0x66, 0x5A, 0x92, 0x90, 0x25, 0x66, 0x6B, 0x27, 0x13, 0x41, 0x91, 0xF1, 0x9A, 0x33, 0x78, 0x62, 0x20, 0x4D, 0x53, 0x89, 0x51, 0x3C, 0x8E, 0x90, 0x1F, 0x54, 0x7A, 0xBB, 0x49, 0xE4, 0x2D, 0x64, 0x02, 0x7D, 0x21, 0x79, 0x07, 0xAA, 0xA1, 0x44, 0x90, 0x37, 0xC0, 0xD7, 0xD9, 0x97, 0xB5, 0xCE, 0xD5, 0xE2, 0x94, 0xB3, 0x9A, 0x2E, 0x43, 0x7E, 0x5C, 0x82, 0xC6, 0x5D, 0xCF, 0x8C, 0xA4, 0x91, 0xAB, 0xB5, 0x37, 0x03, 0xAD, 0x49, 0x90, 0x5C, 0xE6, 0x31, 0x8B, 0x54, 0x62, 0xFF, 0xB3, 0x31, 0x90, 0x57, 0x90, 0x7D, 0x54, 0x93, 0x66, 0x06, 0xC4, 0xB6, 0x48, 0x26, 0x7F, 0x80, 0x6D, 0x59, 0xFF, 0x6A, 0x94, 0xF5, 0xEA, 0xB4, 0x42, 0x4D, 0x4C, 0xDD, 0xC5, 0xB8, 0x23, 0xA4, 0xD4, 0xD4, 0x1E, 0x79, 0x8A, 0xA4, 0x56, 0xBF, 0x0D, 0x60, 0x90, 0x14, 0xDD, 0x7E, 0x77, 0x09, 0xE9, 0x49, 0x34, 0xD9, 0x30, 0x48, 0x2D, 0xBA, 0x9C, 0xBA, 0x87, 0x3C, 0x03, 0x6D, 0xB4, 0xA0, 0x90, 0xFF, 0x82, 0xD2, 0xD4, 0x3B, 0x3D, 0xBB, 0x73, 0xCB, 0x13, 0x67, 0x75, 0xCD, 0x2A, 0x74, 0x89, 0xB1, 0x68, 0x3F, 0x5C, 0xD2, 0x1D, 0xFA, 0xAD, 0xE5, 0x6C, 0xC5, 0xB0, 0xCF, 0xE5, 0x06, 0x53, 0x95, 0xC6, 0x25, 0xDA, 0xB4, 0x41, 0x90, 0x67, 0x75, 0xC8, 0x30, 0x4B, 0x96, 0x40, 0xB1, 0xD0, 0x2A, 0x95, 0x47, 0x17, 0x06, 0x68, 0x0A, 0xC1, 0xF0, 0xD4, 0xC7, 0x5D, 0x27, 0x8B, 0x5A, 0x13, 0x7A, 0x3A, 0xFE, 0x94, 0xFA, 0x47, 0x23, 0x6D, 0xEC, 0x0A, 0xFF, 0xD0, 0x89, 0xCD, 0x00, 0xAB, 0xD7, 0xB7, 0xB4, 0xFE, 0x06, 0xF7, 0xB0, 0x4B, 0xBB, 0xC9, 0x56, 0x64, 0x65, 0xF5, 0x49, 0x7F, 0x51, 0x9E, 0x48, 0x79, 0xA9, 0x2D, 0x06, 0xC2, 0xCD, 0x4B, 0x35, 0x99, 0x20, 0x99, 0xF2, 0xA9, 0xE3, 0x42, 0x45, 0x44, 0xC2, 0xF8, 0xF6, 0x64, 0xA6, 0x3A, 0x7A, 0x6E, 0x8B, 0x9C, 0x7D, 0x28, 0x24, 0xBC, 0xF1, 0x32, 0xB7, 0xD3, 0xB7, 0xB3, 0xEE, 0xAA, 0xE0, 0x82, 0x4B, 0x5F, 0x8D, 0x44, 0x52, 0x6E, 0x1D, 0xAD, 0x07, 0x15, 0x28, 0xF5, 0x89, 0x36, 0x00, 0x38, 0x61, 0xB1, 0x51, 0x13, 0x0B, 0x1E, 0x4C, 0xFE, 0xDE, 0x76, 0x8B, 0xB3, 0x29, 0x2E, 0xAD, 0x35, 0x85, 0x27, 0x88, 0xAC, 0x68, 0xB6, 0xE4, 0xEF, 0x0C, 0x5A, 0xDB, 0xD0, 0x2D, 0x3C, 0xE4, 0x93, 0x55, 0x7B, 0x50, 0x92, 0xEB, 0xE2, 0x6C, 0x6C, 0x94, 0xBD, 0xB4, 0xDE, 0xA1, 0x1F, 0xA5, 0xDC, 0x4D, 0x3B, 0xAA, 0x9D, 0x0C, 0x46, 0x52, 0xF6, 0x6B, 0x7C, 0xC1, 0xA7, 0x89, 0xCB, 0x5B, 0x59, 0xA2, 0xEA, 0xD8, 0x19, 0xCD, 0x1A, 0x71, 0x6E, 0x44, 0x60, 0xE3, 0xA0, 0x64, 0x71, 0x60, 0x6F, 0x7D, 0xB7, 0xF4, 0x82, 0xB7, 0xB5, 0xE9, 0xBA, 0x7C, 0x8B, 0xF3, 0xA7, 0xEA, 0xAD, 0x4A, 0xA6, 0x4D, 0x80, 0x4E, 0x0F, 0x3C, 0xA5, 0xFB, 0x6B, 0xAE, 0x81, 0x03, 0x54, 0x73, 0x8D, 0x0D, 0xF8, 0x32, 0x61, 0x7D, 0x4B, 0xA7, 0xB2, 0x2A, 0xE6, 0x62, 0xD3, 0x7E, 0xE5, 0x8A, 0x70, 0xA0, 0x61, 0xBD, 0xB2, 0x3E, 0xC0, 0xB2, 0xEE, 0x3E, 0xE0, 0xE6, 0x59, 0x6D, 0xB2, 0x03, 0x67, 0x3A, 0x0F, 0x54, 0xCF, 0x02, 0x8F, 0xDA, 0x30, 0x75, 0x8E, 0xE0, 0x1B, 0xBA, 0x87, 0x66, 0x0B, 0x78, 0x93, 0xF2, 0x51, 0xB3, 0x00, 0x3C, 0x93, 0x38, 0xAE, 0xE9, 0x8B, 0xAA, 0x35, 0x06, 0x68, 0x4C, 0x51, 0x85, 0x86, 0xDF, 0xAC, 0xAF, 0x41, 0xB7, 0x07, 0xA8, 0x6A, 0x97, 0xA0, 0x15, 0x9E, 0x66, 0x35, 0xFE, 0xC8, 0x6B, 0xA7, 0x0B, 0x86, 0x3E, 0xC4, 0xDA, 0x7A, 0xA7, 0x6E, 0x3C, 0x74, 0x92, 0xD6, 0xA3, 0x59, 0x05, 0x3E, 0xA7, 0x54, 0x69, 0xCC, 0x40, 0x63, 0x5C, 0x76, 0x63, 0xB2, 0xC6, 0x2C, 0xEA, 0x79, 0x03, 0x8D, 0xAC, 0x08, 0x4B, 0xAE, 0xDB, 0x46, 0x6C, 0x0A, 0x68, 0x31, 0xB5, 0xE0, 0x6B, 0x3D, 0x73, 0x8D, 0x62, 0x6C, 0xAE, 0x53, 0x8A, 0x21, 0x57, 0x35, 0xC9, 0x6A, 0xAF, 0x6E, 0x22, 0xCC, 0xA4, 0x1E, 0xD5, 0x6C, 0x03, 0x6F, 0x5A, 0x1C, 0xD4, 0x58, 0x82, 0xFE, 0x31, 0x2F, 0xEA, 0x3F, 0x56, 0x2B, 0xA3, 0x32, 0xEB, 0x0F, 0x1B, 0x86, 0x42, 0x93, 0xEA, 0x3E, 0xE8, 0xCE, 0xF8, 0xAB, 0x4D, 0xE7, 0x34, 0xAF, 0x3D, 0xCA, 0x8C, 0x3E, 0x04, 0xCF, 0xA9, 0xC7, 0x60, 0xAE, 0x66, 0x5A, 0x45, 0x69, 0x7F, 0xC3, 0xEF, 0xA8, 0x45, 0x9A, 0xF5, 0xE0, 0x5D, 0x8B, 0x3C, 0x0D, 0x05, 0xF8, 0x19, 0x33, 0xB0, 0xFC, 0x7A, 0xCE, 0xAF, 0xC8, 0xB7, 0x83, 0x13, 0xF2, 0xEF, 0x05, 0x3D, 0xEE, 0xB7, 0x2D, 0xE6, 0x79, 0xBF, 0xE9, 0x86, 0xCB, 0x47, 0x39, 0xBF, 0x6F, 0x8F, 0x65, 0xDD, 0xB3, 0xBF, 0xD9, 0x28, 0xE7, 0x17, 0x5A, 0xE6, 0x1B, 0x93, 0xA5, 0xFF, 0x98, 0x97, 0xEB, 0x6A, 0x94, 0x86, 0x05, 0xFF, 0x68, 0xDE, 0x81, 0xB4, 0xE8, 0x8D, 0x83, 0xBF, 0x0B, 0xE5, 0xE1, 0x45, 0x03, 0xC7, 0x8A, 0x8F, 0x06, 0x7E, 0xEA, 0x73, 0x2D, 0x5B, 0xE3, 0x53, 0xD1, 0x75, 0x9E, 0x39, 0xCF, 0x75, 0xA4, 0x2D, 0x80, 0xE3, 0x68, 0x0F, 0x35, 0xCE, 0x17, 0x5C, 0xA6, 0x77, 0x1B, 0xC5, 0x32, 0x93, 0x45, 0xA1, 0xAE, 0x55, 0x79, 0x75, 0x61, 0xE7, 0x7F, 0x54, 0x70, 0x54, 0xF6, 0x80, 0x67, 0x59, 0x7F, 0x58, 0x6B, 0xFF, 0xB1, 0x8A, 0x8E, 0x20, 0x8F, 0x25, 0x29, 0xCC, 0xB5, 0xBE, 0x23, 0x1D, 0x9F, 0xAA, 0x5A, 0xDC, 0xEE, 0xB6, 0xEC, 0xE7, 0x8F, 0xB3, 0xBB, 0xD7, 0xE0, 0x21, 0x7A, 0x47, 0x2F, 0x35, 0xDA, 0xCA, 0x6B, 0x28, 0x87, 0x74, 0x18, 0xE0, 0x65, 0xF1, 0x48, 0xF3, 0x06, 0xCC, 0x89, 0x92, 0xF5, 0xAF, 0x67, 0x5B, 0x84, 0x65, 0xF6, 0x0E, 0x55, 0x21, 0x81, 0xC2, 0x6E, 0x90, 0x9B, 0xE4, 0x63, 0x6A, 0x3F, 0xCF, 0xD7, 0xBA, 0xA3, 0xCD, 0x0A, 0x51, 0xA8, 0x9D, 0x57, 0xDD, 0x05, 0x29, 0x42, 0xBF, 0x50, 0xAD, 0x50, 0x6C, 0xA6, 0x2D, 0xD4, 0x85, 0x01, 0x6D, 0xD4, 0xA7, 0x9A, 0x3B, 0x20, 0x27, 0x2A, 0xA4, 0x2F, 0x89, 0xBF, 0x2A, 0xF4, 0xE8, 0x92, 0x19, 0x82, 0x1E, 0xFF, 0xCB, 0x5D, 0x76, 0x22, 0x27, 0xAF, 0xDA, 0xB6, 0x57, 0xE2, 0x66, 0x37, 0xB0, 0xA9, 0x56, 0xAA, 0x72, 0x38, 0x5E, 0x9B, 0x2C, 0xFF, 0xCA, 0xE8, 0x31, 0x74, 0x2B, 0x5F, 0xD2, 0x96, 0x6A, 0xEF, 0x03, 0x5F, 0xA8, 0xF5, 0xFF, 0x99, 0xE4, 0x44, 0x9E, 0x5F, 0x32, 0x2C, 0xDD, 0x12, 0xCA, 0xEA, 0x36, 0xCA, 0x68, 0x7E, 0xF7, 0x3B, 0x7C, 0x64, 0x97, 0x3D, 0xCD, 0x5A, 0xDF, 0xC9, 0xFB, 0x5C, 0xE2, 0x1B, 0xB7, 0x2B, 0x06, 0x16, 0xD5, 0x9A, 0xF2, 0x00, 0x7B, 0xAB, 0x77, 0xFA, 0xDF, 0xC0, 0x77, 0xDA, 0x71, 0x6D, 0x03, 0x18, 0x46, 0x1D, 0xAB, 0xD1, 0x82, 0xF9, 0x51, 0x61, 0x5D, 0x47, 0xC0, 0x0B, 0xA1, 0xFC, 0xCE, 0xF7, 0xB0, 0x8F, 0xBF, 0xA9, 0xBD, 0x1B, 0xBA, 0xEC, 0x39, 0xAB, 0xE5, 0x24, 0x14, 0xE3, 0xD4, 0xDE, 0x70, 0x13, 0x7C, 0x6A, 0x1F, 0x61, 0x6A, 0x04, 0x9F, 0x58, 0x25, 0xEA, 0x5F, 0x83, 0x6B, 0x68, 0xB8, 0xB6, 0x12, 0xCC, 0xA5, 0x9C, 0xD0, 0x64, 0x80, 0x6E, 0x11, 0xA2, 0xCE, 0x0F, 0xD8, 0xFC, 0xE0, 0x5B, 0x1D, 0x57, 0x30, 0xAB, 0x00, 0xAF, 0xB6, 0x0C, 0xF5, 0x53, 0x4F, 0x5D, 0x33, 0xA1, 0x42, 0x9C, 0x8A, 0x1A, 0x58, 0xC8, 0x35, 0xDB, 0x5E, 0xD3, 0x19, 0xB8, 0x8C, 0x31, 0xDA, 0x60, 0x09, 0x4D, 0xA7, 0xBE, 0xD5, 0x32, 0xC1, 0x08, 0x4A, 0x9D, 0x26, 0x18, 0x78, 0x1E, 0x7E, 0xAF, 0xF3, 0xBC, 0x4E, 0x1C, 0xE8, 0xDD, 0x31, 0x48, 0xEE, 0xF6, 0x75, 0x6B, 0x0B, 0x21, 0xD8, 0x9E, 0x41, 0x4D, 0x4B, 0x70, 0xCC, 0x65, 0x76, 0x7D, 0x87, 0x3A, 0xCA, 0x3E, 0xC3, 0xA4, 0x41, 0xD6, 0x59, 0xE2, 0x86, 0x38, 0xA8, 0x88, 0x5A, 0xA8, 0x05, 0x41, 0x2A, 0xC5, 0x4C, 0x13, 0x02, 0x74, 0x76, 0x8F, 0x14, 0x43, 0x49, 0x6F, 0xEA, 0x94, 0xA5, 0xCB, 0x32, 0xCE, 0xA9, 0x7B, 0x2A, 0x76, 0xE4, 0xB7, 0x0B, 0x1E, 0xB2, 0xC7, 0x94, 0x36, 0x16, 0xE6, 0xF2, 0x28, 0xAC, 0xC5, 0xB1, 0xCD, 0xE2, 0x25, 0xFC, 0x40, 0x8F, 0x14, 0x30, 0x50, 0xBA, 0xDE, 0xE6, 0x09, 0x7A, 0x52, 0x99, 0x40, 0x5F, 0xA3, 0xDE, 0x05, 0x9C, 0xEF, 0x76, 0xCE, 0x5B, 0x94, 0x1B, 0x5B, 0xA3, 0x2E, 0x78, 0x55, 0xD8, 0x88, 0x2E, 0x2C, 0x75, 0x2B, 0x7B, 0x26, 0x38, 0x5B, 0xB9, 0x85, 0xC5, 0xC8, 0x6F, 0xE1, 0x40, 0xDC, 0x17, 0x31, 0xEB, 0x44, 0xFB, 0x45, 0x05, 0x1E, 0x5E, 0xC0, 0x16, 0x79, 0x9E, 0xCD, 0x39, 0xD4, 0x04, 0xD8, 0xD2, 0x6B, 0xD5, 0xFD, 0x60, 0x66, 0xDB, 0xA9, 0x8C, 0x13, 0x95, 0x15, 0xD5, 0x44, 0x0E, 0x9F, 0x4D, 0x85, 0x76, 0x14, 0xAA, 0xB9, 0x72, 0xEE, 0xA6, 0xB2, 0xD3, 0xFC, 0xC7, 0xB9, 0x3D, 0xEC, 0x56, 0xD1, 0xFF, 0x16, 0x67, 0x08, 0x1B, 0xA4, 0x2F, 0xDC, 0x2F, 0x03, 0x96, 0xCA, 0x64, 0x9B, 0x3E, 0xB4, 0x04, 0x5C, 0x40, 0x2F, 0x53, 0x0F, 0x80, 0x57, 0x9A, 0xFF, 0x4A, 0xC1, 0x44, 0xEF, 0x75, 0xEF, 0x32, 0xDE, 0x88, 0x2B, 0x01, 0x87, 0xBC, 0xCD, 0xD2, 0x63, 0x6C, 0x46, 0x49, 0x8C, 0xEC, 0x7E, 0xF6, 0x11, 0xE6, 0x88, 0xFC, 0x4E, 0xF4, 0x02, 0x81, 0x9B, 0x72, 0xBB, 0x7B, 0x95, 0x72, 0x18, 0x4C, 0xB7, 0xC9, 0x40, 0xCB, 0xC0, 0x4F, 0x74, 0x73, 0xF5, 0x15, 0xC8, 0xB3, 0xF1, 0x45, 0x42, 0x24, 0x14, 0xA1, 0xEB, 0x48, 0xAD, 0x86, 0xA6, 0x2A, 0xFA, 0xB2, 0xDF, 0xC1, 0x55, 0xAC, 0x71, 0x85, 0xDF, 0x60, 0xD7, 0xAC, 0x5B, 0x15, 0xCF, 0xE1, 0x94, 0xA8, 0x75, 0xBC, 0x67, 0x70, 0xB7, 0xDB, 0x4F, 0x65, 0x04, 0xEC, 0x6B, 0xFD, 0x18, 0xD5, 0x42, 0xEB, 0x69, 0xEB, 0x30, 0x17, 0x48, 0xD0, 0xF8, 0x21, 0xE6, 0xB4, 0x26, 0x5D, 0x7B, 0x23, 0x49, 0x4A, 0x8E, 0xC8, 0x37, 0x66, 0xA6, 0x93, 0x13, 0x2A, 0x1F, 0xE7, 0x9F, 0xC3, 0x5F, 0x66, 0xFE, 0x29, 0x0F, 0xC7, 0x5D, 0x22, 0xAF, 0x71, 0x1F, 0xA8, 0x07, 0xDC, 0x46, 0x29, 0x27, 0xA0, 0x13, 0xAD, 0xDD, 0xD0, 0x0D, 0x70, 0x36, 0xCD, 0x12, 0xD3, 0x41, 0x5D, 0xB5, 0xB7, 0xA2, 0x79, 0x0D, 0x97, 0x71, 0xC7, 0x04, 0xAB, 0xFA, 0x04, 0x99, 0x79, 0xFA, 0x1C, 0xD3, 0xAA, 0xCA, 0x75, 0x79, 0xA3, 0x8D, 0xE9, 0x99, 0xF2, 0xD2, 0xA3, 0xFA, 0x13, 0x91, 0x7F, 0x73, 0xCD, 0x34, 0xCE, 0x2E, 0xCF, 0x14, 0xF7, 0xD5, 0xD3, 0xAC, 0x92, 0xD0, 0x33, 0xC8, 0x58, 0x6A, 0x09, 0x76, 0x10, 0xDA, 0x69, 0xDA, 0x12, 0x29, 0xE9, 0xFA, 0x47, 0x7D, 0x21, 0x6E, 0x6A, 0xC7, 0x02, 0x49, 0x51, 0xAA, 0x43, 0xCB, 0xB5, 0x4A, 0x6A, 0x8E, 0xB2, 0xB1, 0x25, 0x73, 0x46, 0xC9, 0xA9, 0x5A, 0x87, 0x88, 0x1A, 0x0E, 0x5F, 0x7F, 0xDC, 0xA5, 0x48, 0x51, 0x8F, 0x9D, 0x65, 0xB4, 0xA1, 0x47, 0x90, 0x1E, 0x4A, 0x13, 0x76, 0x0D, 0x3A, 0x63, 0x34, 0x46, 0xE8, 0x97, 0x85, 0xAB, 0xB6, 0xC4, 0xA4, 0xF7, 0xD5, 0x48, 0xA7, 0x27, 0x67, 0x77, 0xEF, 0xAA, 0xD8, 0x90, 0xF5, 0xA8, 0x5D, 0x98, 0x7E, 0xAA, 0x78, 0x4B, 0x23, 0x1E, 0x36, 0xA9, 0xEA, 0xA2, 0x71, 0xBA, 0xF3, 0x17, 0xC5, 0x42, 0xC2, 0x8F, 0x31, 0x1A, 0x5D, 0x86, 0x2E, 0xB0, 0x38, 0x8D, 0xDD, 0x81, 0x6E, 0xB7, 0xFC, 0x5D, 0xF1, 0x36, 0x25, 0x5F, 0xFF, 0x89, 0x99, 0x93, 0xF9, 0x07, 0x94, 0xB2, 0x3B, 0x0A, 0xD8, 0x55, 0xDF, 0xB9, 0x81, 0x65, 0xB4, 0xDC, 0x38, 0xC1, 0x59, 0x16, 0x1C, 0xF9, 0x46, 0xBA, 0x9F, 0xDF, 0xE1, 0xFA, 0x03, 0xDA, 0x20, 0xBD, 0x64, 0xBD, 0x57, 0xB5, 0x51, 0x19, 0x41, 0xFB, 0x86, 0x55, 0x00, 0x5B, 0x1A, 0x1F, 0x94, 0x44, 0xE5, 0x4A, 0xB5, 0xFE, 0x65, 0xB1, 0x45, 0x15, 0x8A, 0x93, 0x95, 0x86, 0xF2, 0x02, 0x76, 0x45, 0x55, 0x2C, 0xAB, 0x35, 0xFB, 0x25, 0xBF, 0x9B, 0x7B, 0x2F, 0xEA, 0xA5, 0x74, 0xB4, 0x28, 0xDF, 0xAD, 0x12, 0x72, 0x97, 0xE7, 0x59, 0x6F, 0x50, 0x69, 0x01, 0x1A, 0x6D, 0x2F, 0x56, 0x04, 0xC6, 0xD5, 0x6E, 0xCD, 0x5F, 0x58, 0x69, 0x4B, 0xBC, 0x2C, 0xFA, 0x9B, 0xF5, 0x3F, 0x39, 0xB5, 0x2C, 0x91, 0x73, 0x9D, 0x59, 0xC1, 0x3C, 0xC9, 0xDF, 0x97, 0x85, 0x72, 0x0F, 0x89, 0x56, 0x44, 0xB5, 0x88, 0x4F, 0x49, 0x37, 0xBB, 0xC5, 0x82, 0xAB, 0x95, 0x2E, 0xD6, 0x46, 0x15, 0x0B, 0xFC, 0x9B, 0x56, 0x8B, 0xF1, 0xC1, 0x9B, 0xC6, 0x19, 0x59, 0x7B, 0x84, 0xFB, 0x31, 0xBF, 0xBC, 0x7E, 0x71, 0xBE, 0xE4, 0x5E, 0xB1, 0x4A, 0x72, 0xBD, 0xA2, 0xB1, 0xA2, 0x40, 0x16, 0x9A, 0xE9, 0x57, 0x75, 0x4A, 0xBE, 0x3E, 0xD2, 0x20, 0x52, 0x29, 0x4B, 0x5D, 0x4F, 0x83, 0x7E, 0xA0, 0x99, 0x75, 0x8C, 0xAA, 0x0A, 0x7C, 0x49, 0x2B, 0xC6, 0x7A, 0xA1, 0x70, 0x1D, 0x27, 0xED, 0x34, 0xB8, 0x40, 0xE5, 0x95, 0xCD, 0x05, 0xAF, 0x8B, 0x2B, 0x0A, 0xAE, 0x40, 0x9A, 0x72, 0x5D, 0x99, 0x2B, 0xB4, 0x34, 0xC3, 0x8D, 0xED, 0x03, 0xDD, 0x8D, 0xA8, 0x15, 0x72, 0x61, 0x6B, 0xD7, 0x60, 0xE0, 0x31, 0xF4, 0xD2, 0xEA, 0xA5, 0x0A, 0x87, 0xFA, 0x68, 0xF3, 0xB1, 0x07, 0x10, 0xA4, 0x3D, 0x91, 0xFC, 0x9E, 0xF4, 0x40, 0xBA, 0x32, 0x3A, 0x89, 0x15, 0x22, 0xDB, 0x3C, 0x3B, 0x82, 0x52, 0x06, 0x96, 0x98, 0xE3, 0x16, 0xE9, 0xB9, 0xCC, 0x6B, 0x58, 0x58, 0xF8, 0x45, 0xC1, 0xB0, 0xEA, 0x8B, 0x4B, 0x1D, 0xB0, 0x01, 0xD9, 0x68, 0xC5, 0x55, 0x0D, 0xC0, 0x7E, 0xD4, 0xB5, 0xB8, 0x3D, 0xD4, 0xA6, 0x63, 0x24, 0x48, 0xEA, 0xC6, 0xC1, 0xCE, 0x69, 0x41, 0xA6, 0xE5, 0x82, 0x88, 0xEC, 0x83, 0x35, 0x2E, 0xA5, 0xB1, 0x45, 0x79, 0x86, 0x7B, 0x69, 0xED, 0x95, 0xD5, 0xBA, 0x8A, 0x70, 0x1A, 0xFF, 0x09, 0xE9, 0xE8, 0x7C, 0x14, 0x20, 0x55, 0x4D, 0x8C, 0xA3, 0xAA, 0xBD, 0xF0, 0x19, 0x2A, 0x05, 0xAF, 0x80, 0x06, 0x34, 0x1B, 0xE3, 0x83, 0xDB, 0x2F, 0x80, 0x3B, 0x52, 0x6A, 0x5A, 0x85, 0xFC, 0x05, 0x59, 0xBC, 0xA6, 0x81, 0x12, 0x56, 0xC1, 0xC3, 0xFA, 0xD6, 0xD4, 0xF7, 0x15, 0x95, 0x35, 0xC7, 0xC3, 0x24, 0xFC, 0x00, 0xDD, 0x6E, 0xE7, 0x60, 0x20, 0x0E, 0x73, 0x64, 0x84, 0xAB, 0x0E, 0x23, 0x49, 0x94, 0x2E, 0x5C, 0x0B, 0xAD, 0x24, 0xC4, 0x71, 0xBE, 0xFD, 0xC3, 0xC0, 0xB8, 0xA4, 0x3D, 0x4B, 0x16, 0x72, 0x98, 0x19, 0xC6, 0x8E, 0x3B, 0x45, 0x9B, 0xF2, 0xAB, 0x5A, 0xC7, 0xA5, 0x06, 0x94, 0xB3, 0x1A, 0x82, 0x42, 0xFF, 0xE1, 0x1D, 0xAA, 0xAE, 0x71, 0xFA, 0x0D, 0x4C, 0xC3, 0x71, 0xCB, 0xA7, 0xAA, 0x5D, 0xC8, 0x4E, 0x8A, 0x03, 0xDE, 0x0A, 0xAD, 0x33, 0x6C, 0xE7, 0x2E, 0x4E, 0x93, 0xA3, 0xDB, 0x79, 0x63, 0xB3, 0xEB, 0x44, 0xDB, 0xF9, 0x64, 0xE1, 0xC2, 0x8A, 0x05, 0xC2, 0x75, 0x65, 0xF1, 0x19, 0xDE, 0x92, 0x83, 0xAC, 0x37, 0x61, 0xDB, 0x14, 0xD7, 0xF8, 0xFB, 0x9D, 0xF7, 0x21, 0x42, 0xE9, 0x5D, 0x2B, 0x96, 0x7A, 0x8F, 0xD2, 0x83, 0x36, 0x0D, 0xB7, 0x01, 0xDA, 0x74, 0x16, 0xAC, 0xB9, 0x79, 0xBD, 0x70, 0x18, 0x9B, 0x53, 0xFC, 0x97, 0x70, 0x34, 0xE7, 0x55, 0xB9, 0xB2, 0xF4, 0x3E, 0xFF, 0x22, 0x4B, 0x93, 0xF6, 0x5B, 0x9C, 0xC7, 0xDD, 0x1B, 0x5E, 0x25, 0xBF, 0x2E, 0x0A, 0x73, 0xB1, 0x85, 0xBF, 0xCB, 0x53, 0xAD, 0x0A, 0xD4, 0x03, 0xC0, 0x5C, 0xEA, 0x39, 0xDC, 0x0D, 0x0C, 0x26, 0xEA, 0xCA, 0x72, 0x2B, 0x2D, 0xC0, 0xBA, 0x0A, 0x94, 0x55, 0x28, 0xF0, 0x61, 0x4F, 0xAA, 0xFA, 0x51, 0xB2, 0x80, 0x5B, 0xC3, 0xF7, 0x4F, 0x5D, 0x2B, 0x14, 0x8B, 0xAC, 0xC2, 0x93, 0x65, 0x2D, 0xD2, 0x14, 0x17, 0x37, 0x18, 0x57, 0x4E, 0xB0, 0x8A, 0x56, 0x37, 0x80, 0x93, 0xA8, 0x23, 0x78, 0x2C, 0x78, 0x17, 0x63, 0x15, 0x99, 0x04, 0xE9, 0xCA, 0x7D, 0xA5, 0x19, 0x22, 0x3F, 0xEE, 0xA6, 0x4A, 0xBA, 0x78, 0x4F, 0xD1, 0x89, 0xAA, 0xBF, 0xA5, 0x99, 0xA9, 0x73, 0xF9, 0xC5, 0xB2, 0xEB, 0x61, 0x80, 0xB4, 0x42, 0x71, 0xC6, 0xF9, 0x12, 0x6C, 0x06, 0x5C, 0xB6, 0x62, 0xFC, 0x47, 0xDD, 0xA1, 0x76, 0xE2, 0x72, 0x28, 0x01, 0x59, 0x99, 0xF7, 0x4C, 0xC9, 0x95, 0xFB, 0x17, 0x85, 0x01, 0xD6, 0x1C, 0x55, 0x99, 0x14, 0x78, 0x5A, 0x64, 0xC3, 0xFC, 0x04, 0x66, 0xA7, 0x38, 0xF0, 0x1C, 0xC1, 0xFB, 0xA1, 0x0D, 0x92, 0x7A, 0x88, 0xE3, 0xCC, 0x85, 0xCE, 0x42, 0xF5, 0x8C, 0xD7, 0xEA, 0x3E, 0x48, 0x47, 0x05, 0xF1, 0x95, 0x90, 0x1A, 0x2E, 0xCF, 0xC9, 0xC7, 0xE7, 0x49, 0x0B, 0xF3, 0x0F, 0x63, 0x4B, 0xD8, 0x01, 0x25, 0x66, 0x58, 0x76, 0x41, 0x66, 0xE5, 0x24, 0x35, 0x9A, 0x3C, 0x95, 0x3B, 0x4A, 0xF5, 0x35, 0xE4, 0x89, 0xF8, 0x9E, 0x6A, 0xAA, 0xD3, 0x77, 0xA8, 0x1B, 0xF1, 0x67, 0x2C, 0x51, 0x6F, 0x85, 0xA7, 0x52, 0xBD, 0xF0, 0x7B, 0x50, 0x2D, 0x32, 0x2D, 0xE3, 0xAE, 0xF1, 0xB5, 0xE4, 0x66, 0xEE, 0x62, 0x23, 0x9D, 0x35, 0xA7, 0x68, 0x8A, 0xE1, 0x56, 0xFE, 0xBC, 0xF2, 0x66, 0xDD, 0xC3, 0xC4, 0x1F, 0x55, 0x17, 0x35, 0x27, 0x82, 0x7F, 0x88, 0x19, 0xF8, 0x47, 0xA7, 0x04, 0x88, 0x83, 0xBE, 0x61, 0xD8, 0xA8, 0xCF, 0xC2, 0x46, 0xCA, 0x55, 0xC2, 0x0C, 0xD2, 0x40, 0xDC, 0xF4, 0xD8, 0x96, 0x0C, 0x71, 0x73, 0x76, 0x6B, 0x13, 0xC1, 0xAC, 0x2D, 0x68, 0xA8, 0x7F, 0x9D, 0x77, 0xBD, 0xCC, 0xA1, 0x96, 0x92, 0xC8, 0x67, 0x6F, 0xAD, 0xBE, 0x1A, 0x3C, 0x47, 0x54, 0xA7, 0x0D, 0x71, 0x3C, 0x08, 0x85, 0xAB, 0x4B, 0x2D, 0x4F, 0xAA, 0xEF, 0xC0, 0x6F, 0x28, 0x35, 0x44, 0x28, 0x04, 0x02, 0x35, 0xA9, 0x0F, 0x7A, 0x3E, 0x09, 0x65, 0x99, 0xAF, 0x3A, 0x2F, 0x95, 0xDD, 0xCB, 0xFB, 0xD3, 0x36, 0x3D, 0xB7, 0xAA, 0xE4, 0x62, 0x53, 0x48, 0xE2, 0x0D, 0xD6, 0x50, 0x1D, 0x2D, 0x18, 0x17, 0xA5, 0xEB, 0x4F, 0x38, 0x9E, 0x83, 0xE8, 0x58, 0xBB, 0xE5, 0x80, 0xFA, 0x21, 0x12, 0x47, 0x89, 0x27, 0x72, 0x21, 0x09, 0x9C, 0x2C, 0x7E, 0x9D, 0xF1, 0x46, 0x72, 0x56, 0x92, 0x9A, 0x4B, 0x67, 0xAD, 0x91, 0xBA, 0x17, 0xFE, 0x2C, 0xF0, 0x91, 0x2D, 0x2D, 0xDB, 0x9A, 0x84, 0x29, 0xDE, 0xB1, 0xCD, 0x82, 0x8B, 0xA1, 0x19, 0xFC, 0x11, 0xC7, 0xA3, 0xAA, 0x60, 0xE9, 0x21, 0xC6, 0x74, 0xEC, 0x98, 0xD2, 0x9C, 0xF2, 0x05, 0xBF, 0x0B, 0x90, 0x20, 0x20, 0x48, 0xCD, 0xEF, 0x11, 0xBD, 0x16, 0xCE, 0x2C, 0x7A, 0xCF, 0x3C, 0x2A, 0x7A, 0xF0, 0x9F, 0x9C, 0x6C, 0xC9, 0x01, 0x96, 0x4B, 0xA2, 0x46, 0xCE, 0xE1, 0x56, 0x05, 0xDB, 0x83, 0x13, 0x45, 0xE3, 0x1D, 0x77, 0xA3, 0xB7, 0xE5, 0xAE, 0x96, 0xBF, 0xB1, 0xED, 0xC0, 0x58, 0xCA, 0x43, 0xFC, 0x15, 0xE8, 0xA5, 0x18, 0xE0, 0x94, 0x55, 0x78, 0x08, 0x5E, 0x73, 0x37, 0x32, 0xAB, 0x2B, 0x39, 0x02, 0xAF, 0xAA, 0x55, 0xB9, 0x0B, 0x45, 0x2B, 0x78, 0x8D, 0xF1, 0xBB, 0xA4, 0x4B, 0x84, 0x65, 0x41, 0x9B, 0x94, 0xA7, 0x25, 0xA7, 0x1D, 0xB7, 0xA3, 0x52, 0xC5, 0x65, 0xC6, 0x28, 0x6C, 0x15, 0xF0, 0x8D, 0xF2, 0x88, 0x18, 0x0F, 0xDE, 0x96, 0x1D, 0x63, 0x76, 0xF0, 0x3E, 0xF2, 0x37, 0xB1, 0x3B, 0x04, 0x87, 0xCA, 0x27, 0x70, 0xDD, 0x44, 0xB5, 0xD9, 0x42, 0x81, 0x8F, 0xC4, 0x21, 0x9E, 0x26, 0xFE, 0x22, 0x7D, 0x15, 0x14, 0xAB, 0xB8, 0xA0, 0x58, 0xE8, 0xB8, 0x09, 0x9D, 0x03, 0x18, 0x18, 0x33, 0xB0, 0x15, 0xE0, 0x31, 0xCA, 0x67, 0xC2, 0x01, 0x4A, 0x10, 0x5F, 0x2B, 0xA7, 0xC9, 0xA9, 0x5C, 0x76, 0xE5, 0x4A, 0xC5, 0xB4, 0xB2, 0x29, 0xEC, 0xDD, 0x4A, 0x8F, 0x9C, 0x29, 0x3C, 0x6B, 0x65, 0x4D, 0x3C, 0x5D, 0x34, 0x08, 0x10, 0x81, 0x8F, 0x14, 0x73, 0x40, 0xC2, 0x71, 0x05, 0x72, 0x16, 0xA2, 0x31, 0xA6, 0x61, 0x1B, 0xA0, 0x62, 0xCA, 0x47, 0x22, 0x13, 0x02, 0xC5, 0xDF, 0x4B, 0x8E, 0xA9, 0xA6, 0x71, 0xEC, 0xCA, 0x3B, 0xD1, 0xAF, 0xC5, 0x7B, 0x99, 0xB7, 0xD1, 0x63, 0x99, 0x8F, 0x39, 0xBD, 0x68, 0x61, 0xAC, 0x51, 0x58, 0x87, 0xF2, 0x03, 0x63, 0xE4, 0x85, 0xC8, 0xBF, 0x8E, 0x85, 0x48, 0x07, 0x3C, 0x64, 0x79, 0x1B, 0x3B, 0x08, 0x9D, 0xA7, 0x9C, 0x21, 0xB4, 0x10, 0x20, 0xCE, 0x28, 0x3C, 0xA1, 0xFF, 0xC0, 0x46, 0x4B, 0x7E, 0xE8, 0x65, 0x45, 0x6F, 0x2B, 0x06, 0x75, 0xAE, 0x19, 0xA2, 0xAA, 0x20, 0xCD, 0xFE, 0x98, 0x99, 0x02, 0x0D, 0x39, 0xDE, 0xFF, 0x85, 0xAC, 0x0B, 0xAB, 0x5B, 0xD4, 0x84, 0x54, 0xA2, 0xEE, 0x96, 0x72, 0xEC, 0x1A, 0xEC, 0x49, 0xA9, 0x23, 0x76, 0x42, 0xF9, 0x82, 0xF2, 0xFC, 0x0D, 0x0D, 0x7A, 0xD6, 0xB2, 0xA2, 0x5F, 0xF5, 0x51, 0x45, 0xBE, 0xE5, 0x13, 0x6B, 0xC3, 0xD2, 0xCF, 0xB1, 0xDE, 0x1B, 0x9B, 0x16, 0xAF, 0xE3, 0xCB, 0xF4, 0x7A, 0x7F, 0x86, 0x6C, 0x0A, 0x59, 0xBF, 0xC8, 0x0C, 0xF1, 0x55, 0x69, 0x2C, 0xAD, 0xB0, 0x27, 0xB0, 0x86, 0x12, 0x4B, 0xDC, 0x87, 0x82, 0xB8, 0x21, 0x79, 0xBE, 0x1D, 0x21, 0x95, 0x0E, 0x85, 0x9D, 0xAD, 0x87, 0xF2, 0x93, 0x4A, 0x0F, 0x37, 0xBD, 0x4E, 0x3B, 0xC5, 0xEC, 0xA9, 0x4F, 0x5F, 0xFC, 0x9E, 0x37, 0xAE, 0xE6, 0x6F, 0xFF, 0x00, 0x69, 0x8D, 0xF6, 0x9F, 0x45, 0xF9, 0xF0, 0x1F, 0xF5, 0x52, 0xCB, 0x89, 0xD8, 0x33, 0xF8, 0x14, 0x65, 0x0C, 0xF1, 0x1B, 0xB2, 0x16, 0x6D, 0x07, 0x34, 0x99, 0x29, 0x55, 0x1B, 0x00, 0x20, 0xB7, 0xB2, 0x98, 0x00, 0x6E, 0x15, 0x71, 0x33, 0x7A, 0xC1, 0x95, 0xE5, 0x36, 0x31, 0x61, 0xB0, 0x3D, 0xDB, 0xDA, 0xBF, 0x0A, 0xF5, 0xE1, 0xCB, 0x1D, 0x4E, 0xAA, 0xBF, 0x48, 0x4D, 0xF4, 0xDD, 0xF8, 0x46, 0xE5, 0x78, 0x8B, 0x07, 0x84, 0x08, 0x20, 0x84, 0x66, 0xF2, 0xA1, 0xFC, 0x04, 0x76, 0x93, 0x5C, 0x59, 0xE4, 0x5B, 0x2C, 0x56, 0x1C, 0x29, 0x83, 0x32, 0x20, 0xE5, 0x39, 0xE6, 0x9F, 0xC5, 0xA7, 0xC0, 0xAD, 0xDC, 0x20, 0xBF, 0xCB, 0x48, 0xAC, 0x70, 0xAF, 0x83, 0x54, 0xBD, 0x5C, 0xF6, 0x9D, 0xBE, 0x0F, 0x1F, 0x50, 0xBE, 0xA1, 0x4C, 0x27, 0x20, 0xD0, 0x85, 0x73, 0x43, 0x22, 0x29, 0xFB, 0x56, 0xB1, 0x56, 0xB2, 0xB2, 0xD2, 0xAA, 0x28, 0x48, 0x56, 0xC0, 0x56, 0xA6, 0xA7, 0xCB, 0x5F, 0x70, 0x2F, 0x46, 0x43, 0x80, 0x8B, 0xE0, 0x87, 0x5F, 0x1A, 0x1C, 0x25, 0x91, 0x3A, 0x54, 0xA9, 0x17, 0x2B, 0x3A, 0xE8, 0x4F, 0xF0, 0x26, 0xE0, 0xFE, 0x7F, 0x3D, 0xAC, 0x01, 0xAF, 0x70, 0xBC, 0x05, 0xA5, 0xDC, 0xF0, 0x8A, 0x7C, 0xE1, 0x53, 0xBE, 0x65, 0xFE, 0x69, 0xF1, 0x6A, 0x61, 0x7E, 0x6A, 0xB2, 0xF4, 0xA2, 0xE8, 0x57, 0xD4, 0x7C, 0xC5, 0x5A, 0xC9, 0x17, 0x3F, 0x17, 0xA8, 0x40, 0x0E, 0x3A, 0xAC, 0x56, 0xBD, 0x05, 0x3C, 0x2D, 0x6D, 0x70, 0x13, 0x38, 0x4C, 0xD1, 0x10, 0x43, 0x50, 0x58, 0xD5, 0x6B, 0x6E, 0xB0, 0x64, 0x5D, 0xF9, 0x68, 0x7E, 0x8A, 0xAC, 0x2A, 0xF7, 0xA0, 0xB0, 0x44, 0xBE, 0x24, 0x45, 0x2B, 0xFE, 0xAA, 0x88, 0x8A, 0x3C, 0x2C, 0xCF, 0x55, 0xC6, 0xFA, 0xCD, 0x06, 0x3B, 0x80, 0x4E, 0x87, 0xB3, 0xAA, 0x0D, 0xE0, 0x1A, 0xCB, 0x68, 0xBC, 0x09, 0x72, 0xA3, 0xF4, 0x11, 0xC7, 0x21, 0x16, 0x7B, 0x09, 0x7B, 0x0B, 0x1C, 0x50, 0x3A, 0x9F, 0x6B, 0x09, 0x7F, 0xCF, 0x09, 0xE3, 0x0F, 0xC3, 0xF7, 0x92, 0x4B, 0x45, 0xDD, 0xC8, 0x8C, 0x48, 0x6B, 0x59, 0x34, 0xFC, 0xDE, 0xB7, 0x16, 0xB8, 0x03, 0x1F, 0x70, 0xD0, 0xA8, 0x60, 0x78, 0xB2, 0x25, 0x03, 0x1F, 0x80, 0x1A, 0x28, 0x26, 0xE2, 0x23, 0x94, 0xCF, 0xEC, 0x67, 0x56, 0x69, 0x03, 0x8A, 0xB2, 0xD8, 0x03, 0x9A, 0xF9, 0x59, 0x17, 0xB9, 0x32, 0x32, 0x3C, 0x71, 0x97, 0x70, 0x36, 0xA1, 0x8E, 0x98, 0x2F, 0x0D, 0xC4, 0xE7, 0xFB, 0xB8, 0x03, 0xB3, 0xD5, 0x74, 0xFB, 0xA3, 0xAA, 0x30, 0x44, 0xFC, 0x9F, 0xC3, 0xCD, 0xD0, 0x75, 0x4A, 0x1C, 0x69, 0x0B, 0x39, 0x55, 0x2C, 0xA9, 0x70, 0x34, 0x3D, 0x2C, 0x4A, 0x66, 0xDE, 0xAC, 0x69, 0xCF, 0x72, 0xE3, 0x58, 0x19, 0xC7, 0x27, 0xDC, 0xE3, 0xFF, 0xD1, 0xBF, 0x08, 0xF7, 0x96, 0x24, 0x6A, 0xC3, 0xBD, 0x3B, 0x94, 0x38, 0xFE, 0xCC, 0x3E, 0x43, 0x35, 0x11, 0xED, 0xA3, 0x17, 0xE2, 0x7B, 0xE0, 0x59, 0x16, 0x6F, 0xC9, 0x44, 0xF0, 0x47, 0xD9, 0x95, 0xB2, 0x0B, 0xCD, 0x4F, 0x0B, 0x57, 0x56, 0x6E, 0x6E, 0x9A, 0x9E, 0xF1, 0x57, 0x15, 0x5C, 0xEF, 0x10, 0xC7, 0xE6, 0x8F, 0x37, 0x8D, 0x09, 0x1D, 0x11, 0xFD, 0x30, 0xF0, 0xBD, 0x20, 0xC5, 0x31, 0xF2, 0x89, 0x7D, 0x22, 0x7A, 0x52, 0xD5, 0x42, 0xB7, 0xC3, 0xF7, 0xC2, 0x91, 0x16, 0x5D, 0x24, 0x1B, 0xBC, 0x5C, 0xCE, 0xC5, 0x12, 0x32, 0xBD, 0x8A, 0x47, 0xAB, 0x5B, 0x73, 0x9E, 0x64, 0x29, 0xD5, 0xFC, 0xA2, 0xF9, 0x89, 0xE6, 0x6A, 0xA2, 0xFC, 0xEF, 0x70, 0xBA, 0xFA, 0x07, 0x6B, 0x9F, 0xD7, 0x49, 0xEC, 0x30, 0x7F, 0xA6, 0xDD, 0x3C, 0xFC, 0xAE, 0x34, 0x9E, 0x66, 0x47, 0x74, 0x28, 0xBE, 0x9A, 0x1F, 0x23, 0x9E, 0x00, 0xA6, 0x72, 0x23, 0x7A, 0x3B, 0xEF, 0x44, 0xE1, 0x1B, 0x34, 0xAE, 0xB0, 0x33, 0x6B, 0x14, 0x3A, 0x5C, 0x7A, 0x35, 0x81, 0x81, 0x9E, 0x67, 0xD6, 0x86, 0x89, 0x55, 0x9B, 0x39, 0xBB, 0xBD, 0x4A, 0xD5, 0x2F, 0x84, 0xE1, 0x76, 0x93, 0x70, 0xA3, 0x6C, 0x0B, 0x4D, 0x4E, 0xA8, 0x95, 0xD7, 0x2C, 0x82, 0x89, 0x27, 0xA0, 0x4B, 0x49, 0x3A, 0x74, 0xA4, 0x6C, 0x46, 0x9E, 0x3F, 0xF4, 0xB8, 0x22, 0x23, 0xA3, 0x00, 0x6E, 0x65, 0x35, 0xC4, 0xAB, 0x11, 0x0B, 0xCE, 0xF5, 0xD0, 0x1E, 0xD4, 0x57, 0xB0, 0xC0, 0x6B, 0x8E, 0x7A, 0xB4, 0xF8, 0x92, 0x9D, 0x1F, 0xEE, 0xA4, 0x88, 0xA6, 0xDD, 0x23, 0x98, 0xC0, 0x01, 0x8B, 0x83, 0xC4, 0x73, 0xF0, 0x54, 0xF1, 0x80, 0xD2, 0xBA, 0x4A, 0x9F, 0xDB, 0x0C, 0x14, 0x72, 0x1D, 0xD3, 0xFA, 0xC0, 0x6C, 0xFE, 0xF6, 0x38, 0x77, 0x48, 0x24, 0x1C, 0x0C, 0x59, 0x0B, 0x7F, 0x11, 0x3F, 0xF2, 0x9A, 0xA1, 0xF2, 0x94, 0xAD, 0xB1, 0xEB, 0xC5, 0x6E, 0x28, 0x4F, 0xD1, 0xD3, 0x88, 0x1C, 0x10, 0xA6, 0x78, 0x11, 0x5F, 0x21, 0x97, 0xE2, 0x21, 0x19, 0x24, 0x92, 0xE5, 0xC6, 0xC8, 0xBF, 0x88, 0x3F, 0xA6, 0xFC, 0x52, 0x66, 0x49, 0x85, 0x31, 0xC7, 0x80, 0xFB, 0xB2, 0x9E, 0xE0, 0x2B, 0xD0, 0x5D, 0xF9, 0x07, 0xCF, 0xFB, 0x28, 0xA1, 0x6C, 0xB6, 0x3B, 0x82, 0xF5, 0x82, 0x36, 0xF4, 0x3A, 0x22, 0x17, 0xFC, 0x4C, 0x01, 0xC8, 0xBF, 0xA1, 0xA4, 0xFC, 0xE3, 0xE2, 0xDB, 0x40, 0x5A, 0x76, 0xA9, 0x54, 0x0B, 0xBC, 0x49, 0xAE, 0x94, 0x0F, 0x80, 0x9E, 0x8B, 0xD9, 0xCA, 0x3A, 0xF0, 0x59, 0xD0, 0x07, 0xF0, 0x0C, 0x64, 0xE7, 0x99, 0x82, 0x9C, 0x87, 0x64, 0x76, 0x32, 0x8C, 0x0B, 0x15, 0xD3, 0xE5, 0x44, 0x25, 0x14, 0xF9, 0x1F, 0xE5, 0x0F, 0xF9, 0xE6, 0x85, 0x88, 0xE6, 0xE0, 0x61, 0x19, 0xD5, 0xE2, 0x42, 0x2C, 0x34, 0xB1, 0x4E, 0x4A, 0x60, 0xE3, 0x23, 0xF3, 0xE4, 0x3B, 0xD5, 0xFD, 0x41, 0x54, 0x60, 0x97, 0xEA, 0xAC, 0xC7, 0x2E, 0xC4, 0x02, 0x6D, 0xB4, 0xBD, 0x8A, 0xB9, 0xC0, 0xDD, 0xF4, 0x49, 0x84, 0x1C, 0x52, 0x50, 0xEC, 0x48, 0x0E, 0xF8, 0x2D, 0xF7, 0x25, 0xFF, 0x8F, 0x61, 0x79, 0xC6, 0x28, 0x11, 0x43, 0x0F, 0x27, 0x7C, 0x93, 0x08, 0x74, 0xB1, 0x51, 0x76, 0xB2, 0xF7, 0x9A, 0x7F, 0x02, 0x15, 0xCA, 0x3B, 0xC4, 0x1E, 0x0F, 0x2B, 0x58, 0x8E, 0x2D, 0xB0, 0x45, 0xD4, 0xEF, 0x90, 0x3E, 0x5A, 0x2F, 0xA1, 0x82, 0xDA, 0x2C, 0xB6, 0x91, 0x0D, 0xE0, 0xCE, 0x9C, 0xDF, 0xBC, 0xD6, 0x7A, 0x5D, 0xFA, 0x15, 0xC1, 0x48, 0xAD, 0x29, 0x1E, 0x16, 0xFB, 0xD6, 0x8C, 0x8B, 0x7C, 0x21, 0x9B, 0x5C, 0x3D, 0x2B, 0xE0, 0xBE, 0xE2, 0xA2, 0xCE, 0xC9, 0x63, 0x01, 0x74, 0x83, 0x98, 0x6C, 0x7B, 0x41, 0xBD, 0x17, 0x15, 0xD1, 0xA4, 0x04, 0x0C, 0x6D, 0xB5, 0xC8, 0x21, 0x87, 0x40, 0x63, 0xB6, 0x8F, 0x51, 0x9D, 0x71, 0x25, 0xAD, 0xD2, 0x70, 0x20, 0x47, 0x97, 0x30, 0x49, 0xBF, 0xA5, 0x60, 0x65, 0xD4, 0x79, 0xDD, 0xEB, 0xD2, 0x83, 0x01, 0xF5, 0xDA, 0x7B, 0xCC, 0x6F, 0xAE, 0x46, 0xCD, 0x5B, 0x5E, 0x8D, 0xD5, 0x13, 0xCD, 0x68, 0xE9, 0x3C, 0x8A, 0x80, 0xD4, 0x28, 0xBE, 0x2C, 0xDC, 0x40, 0x26, 0x03, 0xFD, 0x99, 0x67, 0x0D, 0x13, 0xF3, 0xA8, 0xA9, 0x33, 0xF5, 0xB4, 0x42, 0x9B, 0xB8, 0x6D, 0xBA, 0xC2, 0xD2, 0x49, 0x11, 0x4B, 0xB5, 0xA6, 0x4A, 0x1F, 0xFF, 0x73, 0x9A, 0x03, 0x55, 0x1B, 0x5C, 0x77, 0x6B, 0x9C, 0x04, 0xB5, 0xD6, 0x5C, 0x72, 0x58, 0x56, 0x46, 0xA5, 0x90, 0xC5, 0xCA, 0x83, 0xE6, 0x4A, 0x32, 0x0C, 0x74, 0x4B, 0x3F, 0xAA, 0x8D, 0x2A, 0x19, 0x49, 0xBA, 0xAB, 0xD9, 0x57, 0x3E, 0x3A, 0x36, 0x5D, 0xA3, 0x64, 0xDA, 0x87, 0xDB, 0x90, 0x57, 0xAA, 0x72, 0xFC, 0xAE, 0x90, 0x09, 0xBC, 0x83, 0xAE, 0x9B, 0xC9, 0x3C, 0xD1, 0x2B, 0xEB, 0xF7, 0x64, 0xB4, 0xFC, 0x12, 0xF5, 0x11, 0xE9, 0x07, 0xB4, 0xFE, 0x77, 0xA1, 0x27, 0xB8, 0x27, 0xBD, 0x93, 0x18, 0x61, 0x25, 0x24, 0x7E, 0x22, 0xE2, 0xD8, 0xBF, 0x17, 0x6B, 0x89, 0x08, 0xAE, 0x2A, 0xB4, 0x9D, 0xF0, 0xE5, 0x5F, 0xF2, 0xDD, 0x47, 0xD8, 0x8B, 0x2A, 0x5C, 0x79, 0x44, 0xBB, 0xB4, 0xDD, 0x86, 0x49, 0xFC, 0xAB, 0x0C, 0xA5, 0xB5, 0x93, 0xE6, 0x60, 0x28, 0x85, 0x4A, 0xBA, 0x41, 0xF3, 0xD2, 0x7B, 0xB0, 0x6C, 0xFE, 0xD3, 0xC4, 0x40, 0xF5, 0x25, 0xC1, 0x9E, 0xE8, 0x52, 0x2C, 0x52, 0x64, 0x0A, 0x69, 0xC6, 0xAE, 0x4B, 0xA4, 0x3E, 0x1D, 0x78, 0x9A, 0xCC, 0xC3, 0x65, 0x1F, 0x7E, 0x47, 0x11, 0x6A, 0x53, 0x4D, 0x2C, 0x01, 0xD4, 0xB4, 0x3F, 0xE4, 0x54, 0x70, 0x03, 0xA5, 0x9F, 0x0C, 0x82, 0xDC, 0x52, 0x66, 0xA9, 0xE8, 0xB2, 0x77, 0x09, 0x1C, 0xF4, 0x89, 0x3C, 0x37, 0xD2, 0xA0, 0xBA, 0x2F, 0x7F, 0x1F, 0x1C, 0xA9, 0xDE, 0xA2, 0x74, 0xF3, 0x9E, 0x82, 0x15, 0x00, 0x63, 0x9C, 0x7F, 0xE1, 0x34, 0xE0, 0x89, 0x4D, 0x12, 0x91, 0x07, 0x76, 0xD1, 0x27, 0xFC, 0x47, 0xBD, 0xA3, 0x1C, 0x26, 0x73, 0xA1, 0xB9, 0x49, 0xEB, 0xE1, 0x9B, 0x48, 0x53, 0xFC, 0x0A, 0xC4, 0x0B, 0x21, 0x23, 0x93, 0xD0, 0x3C, 0xA4, 0x3C, 0xB0, 0x57, 0x15, 0x81, 0x24, 0x78, 0xF1, 0xD5, 0x16, 0xC8, 0xDF, 0xCE, 0x2B, 0xB0, 0x52, 0x78, 0x9D, 0xF5, 0x6D, 0x82, 0x06, 0xAD, 0xA6, 0xAD, 0x22, 0xCD, 0xA1, 0xE9, 0x14, 0x90, 0xD4, 0x82, 0x67, 0x12, 0x4F, 0x43, 0x16, 0xA4, 0x75, 0xEC, 0x54, 0x38, 0x80, 0x18, 0x09, 0x1F, 0x41, 0x22, 0xF1, 0x07, 0x81, 0x24, 0xEA, 0x88, 0xBD, 0xF3, 0x6A, 0x56, 0x25, 0xA8, 0x6B, 0x9C, 0x77, 0xAB, 0xCF, 0xA1, 0x0F, 0xAC, 0xDB, 0xF0, 0x77, 0x30, 0x49, 0xF3, 0x21, 0x1D, 0xA1, 0xF9, 0x94, 0xD1, 0xE4, 0x6A, 0x90, 0x48, 0xD8, 0x09, 0xA6, 0x55, 0x6B, 0x17, 0x6F, 0x03, 0x3F, 0x19, 0xDC, 0xC3, 0x3B, 0x21, 0xA6, 0x6E, 0x7B, 0x60, 0x34, 0xE2, 0xAB, 0xB9, 0xE7, 0x89, 0xA0, 0xA7, 0x09, 0xB6, 0xF3, 0x56, 0x75, 0x90, 0x3A, 0xCF, 0xFA, 0x12, 0xBE, 0x1D, 0xF1, 0xA7, 0xB9, 0x92, 0x56, 0x90, 0xBB, 0xC5, 0x51, 0x72, 0x0F, 0x98, 0x12, 0x23, 0x6D, 0x9F, 0x94, 0x6E, 0x13, 0x29, 0x6F, 0xE9, 0xC9, 0xF6, 0x0B, 0xFE, 0xD2, 0xE4, 0x91, 0xDF, 0xEF, 0x3F, 0xB5, 0xFE, 0x43, 0x49, 0x9A, 0xFB, 0x1B, 0xD3, 0x81, 0xCA, 0xA7, 0x0E, 0x03, 0xD5, 0x27, 0xB9, 0x57, 0xE8, 0xC7, 0x75, 0x52, 0xC9, 0x4D, 0xF3, 0x33, 0x9A, 0x06, 0xC5, 0x47, 0xB3, 0x4D, 0xE4, 0x61, 0x60, 0x73, 0x4C, 0x7D, 0xF3, 0xC7, 0x9C, 0x47, 0x91, 0x73, 0x9A, 0x9A, 0xF3, 0x8F, 0x05, 0x3F, 0x6E, 0xD8, 0x55, 0x1C, 0xEC, 0x77, 0xB0, 0x0E, 0x2E, 0x67, 0xBB, 0x7F, 0xA8, 0x39, 0xCF, 0x8E, 0x5E, 0x34, 0xB6, 0xDA, 0x93, 0xDF, 0x64, 0x59, 0xA8, 0xB3, 0x94, 0xBE, 0xB3, 0x38, 0xAC, 0x29, 0x55, 0xF6, 0x2F, 0xBC, 0x4E, 0x2E, 0x03, 0x5D, 0x17, 0x3B, 0x37, 0x4A, 0x8B, 0x6E, 0x46, 0xD8, 0x35, 0x78, 0x94, 0x4E, 0x08, 0xF6, 0xAA, 0x3B, 0x58, 0xBE, 0xDC, 0xF7, 0xA8, 0xE9, 0x04, 0x2B, 0xD8, 0x7D, 0xBE, 0x71, 0x0B, 0xD7, 0xCB, 0x61, 0xA3, 0x01, 0x17, 0x6E, 0xB6, 0x7C, 0xA7, 0xDD, 0x29, 0xF7, 0xA6, 0x3C, 0xD2, 0xD8, 0x01, 0xD9, 0x16, 0xBE, 0xA4, 0x1A, 0x5C, 0x11, 0xC5, 0xAD, 0x67, 0x55, 0x94, 0x87, 0xAE, 0xAB, 0xBD, 0xCB, 0x14, 0x07, 0xBC, 0x33, 0x1D, 0xAC, 0x9A, 0xEC, 0x63, 0x53, 0x63, 0xC7, 0x6D, 0x71, 0x5D, 0x51, 0x8D, 0x09, 0x0C, 0x0E, 0x33, 0xF5, 0x8D, 0x12, 0x06, 0xA3, 0x53, 0xEB, 0xA3, 0xD0, 0x52, 0x7F, 0x91, 0xAF, 0x80, 0x77, 0x14, 0x80, 0xAC, 0x00, 0x3F, 0x45, 0x3D, 0xAE, 0xF5, 0xE5, 0xB0, 0x43, 0x2C, 0x6A, 0x38, 0xDC, 0xC5, 0xFE, 0x67, 0x8D, 0x1B, 0xF9, 0x26, 0xAF, 0x3B, 0xD5, 0x7B, 0x85, 0x43, 0x2E, 0x81, 0x86, 0x32, 0xF1, 0x71, 0xFB, 0xBD, 0x3A, 0x48, 0xD6, 0x60, 0x95, 0xA5, 0x59, 0xA3, 0xDC, 0x41, 0x3B, 0xFB, 0x9F, 0x87, 0x12, 0xEA, 0xE2, 0xFF, 0xF2, 0x9A, 0x1E, 0xE9, 0x5E, 0xB3, 0x43, 0x6C, 0x13, 0xDC, 0x60, 0x5C, 0x25, 0x96, 0xF8, 0xCF, 0xAF, 0x66, 0x4B, 0xB4, 0x5E, 0x53, 0x0C, 0x2A, 0xE9, 0x43, 0xE7, 0x5A, 0x7D, 0x8E, 0x3C, 0xC0, 0xC1, 0x47, 0xDB, 0xAF, 0x9C, 0x6C, 0x75, 0x5B, 0x13, 0x02, 0x9C, 0xA4, 0xFB, 0x93, 0x7D, 0xE0, 0x52, 0xEA, 0x52, 0xB2, 0x18, 0xFC, 0x1A, 0x0E, 0x1B, 0x7E, 0x28, 0x2F, 0x86, 0xCC, 0xAB, 0x9E, 0x06, 0xF8, 0xFB, 0x7D, 0x31, 0x00, 0xC0, 0x4C, 0xCF, 0x3A, 0x3D, 0x17, 0x40, 0x9D, 0x37, 0xE8, 0xE6, 0x83, 0xB3, 0xEC, 0x3F, 0x69, 0x9E, 0x82, 0x6A, 0xAB, 0x6E, 0xCD, 0x5F, 0xE0, 0x46, 0xBA, 0x25, 0xD9, 0x0F, 0x6E, 0xA7, 0xF6, 0x92, 0x00, 0xB8, 0x23, 0xF4, 0x7F, 0xBA, 0x07, 0x68, 0x7E, 0x50, 0xA2, 0x1E, 0x42, 0xC5, 0xBE, 0xE1, 0x7A, 0x03, 0x72, 0xCB, 0xE3, 0xA1, 0x2E, 0x19, 0xE9, 0x77, 0x06, 0xB4, 0x59, 0x88, 0x87, 0x7D, 0xAD, 0xA6, 0x05, 0xAE, 0xB2, 0x72, 0x25, 0x7F, 0x43, 0x45, 0xB4, 0xCB, 0xE4, 0x36, 0x70, 0x2B, 0xB5, 0x92, 0xEC, 0x00, 0x05, 0x61, 0x9B, 0xB5, 0xFF, 0x90, 0x73, 0x02, 0x63, 0xB5, 0x1B, 0xF1, 0x37, 0x7E, 0xCF, 0xB4, 0x6B, 0xF0, 0x74, 0xF7, 0x24, 0x6D, 0x8D, 0xBA, 0xD9, 0xC9, 0x52, 0x3B, 0x59, 0xB5, 0xD6, 0xFE, 0x95, 0x86, 0x8F, 0xBC, 0xB2, 0x52, 0x6A, 0x46, 0x43, 0xBF, 0x69, 0xFB, 0xC9, 0x93, 0xE0, 0x2E, 0xAA, 0x13, 0xB9, 0x09, 0x74, 0x0E, 0x71, 0xED, 0xFF, 0x90, 0xA6, 0x0C, 0xA4, 0x2E, 0x59, 0x95, 0x59, 0xE2, 0xF5, 0xA7, 0x6B, 0x51, 0x5E, 0xB1, 0xCB, 0xC3, 0xB6, 0xE3, 0x45, 0x6F, 0xEC, 0x33, 0x9A, 0xE7, 0x57, 0xE4, 0x33, 0xF6, 0xD7, 0xC9, 0x39, 0x67, 0xA8, 0x3E, 0x86, 0x7F, 0x24, 0xD8, 0xC2, 0x01, 0xED, 0x12, 0xC5, 0xA3, 0x05, 0xBF, 0x34, 0x91, 0xC0, 0xC1, 0x60, 0x5A, 0xEF, 0x40, 0xF6, 0x3A, 0xFF, 0xCD, 0x3D, 0xB1, 0xB9, 0x7F, 0xBC, 0x0C, 0x9D, 0xA2, 0x42, 0x95, 0xEB, 0x81, 0xD6, 0xA7, 0xA5, 0xBB, 0x17, 0xE5, 0x37, 0x5E, 0x60, 0xEE, 0xB5, 0x7A, 0x57, 0x7B, 0x89, 0xA7, 0xA4, 0xC6, 0x1A, 0x9A, 0xA5, 0x42, 0xF3, 0x2E, 0x6D, 0x95, 0x52, 0xB6, 0x90, 0xD0, 0x4C, 0x07, 0xED, 0x83, 0xA6, 0x77, 0xBF, 0x28, 0x24, 0xFC, 0xF3, 0x3A, 0xF7, 0x15, 0x8F, 0xF7, 0x2A, 0x6A, 0x57, 0x94, 0xA6, 0xBB, 0xC9, 0x5A, 0xA6, 0x54, 0xCE, 0x58, 0x74, 0xB5, 0x81, 0x56, 0xA5, 0xB6, 0xB2, 0x36, 0x3D, 0x15, 0x28, 0xA9, 0x6A, 0x03, 0x5D, 0x56, 0x67, 0xF1, 0x5D, 0x4B, 0x03, 0x66, 0x5A, 0x08, 0xC8, 0x4B, 0x60, 0x9D, 0x7F, 0x57, 0x27, 0x52, 0x16, 0xE1, 0xD3, 0xD1, 0xCE, 0x2B, 0xBF, 0xE2, 0x59, 0xD9, 0xEA, 0x5C, 0xF9, 0xC6, 0x95, 0xD7, 0x14, 0x5A, 0x35, 0xC1, 0xFE, 0x57, 0xFD, 0x42, 0xDE, 0x36, 0xCB, 0xCE, 0x9A, 0x35, 0xA2, 0x87, 0x34, 0x83, 0xBE, 0x48, 0x7E, 0x96, 0xDA, 0xAB, 0xD9, 0x07, 0x0C, 0x50, 0x7D, 0xFE, 0x33, 0x79, 0xC1, 0xFF, 0x65, 0xDB, 0x77, 0x96, 0xC0, 0x67, 0x5D, 0xCB, 0xF3, 0xAA, 0xD1, 0x1E, 0x40, 0x73, 0x0B, 0xD7, 0xDB, 0xB9, 0xB3, 0xE1, 0x2E, 0xDF, 0xDF, 0xFE, 0x7C, 0xED, 0x25, 0xE1, 0x17, 0xEB, 0xDF, 0xC6, 0x2C, 0x69, 0x36, 0x63, 0x9A, 0x0E, 0x51, 0xCE, 0xA7, 0xCF, 0xD1, 0x14, 0x82, 0x73, 0x69, 0xFE, 0x24, 0x00, 0xBE, 0xF0, 0x3F, 0xDF, 0x6A, 0xC6, 0xA7, 0xF8, 0x58, 0x35, 0x3F, 0x16, 0x8C, 0x77, 0x0F, 0x69, 0xDC, 0x20, 0x6C, 0x77, 0xD2, 0xD7, 0x0F, 0x8B, 0x23, 0xED, 0x47, 0x4C, 0x46, 0xA9, 0xBF, 0x7D, 0x46, 0xF5, 0x68, 0xF9, 0x0D, 0x9B, 0x79, 0xDA, 0x55, 0x40, 0x81, 0x65, 0x80, 0x66, 0x16, 0xC8, 0xA6, 0x6D, 0x26, 0xCB, 0xC0, 0x5B, 0xFE, 0x5D, 0x4D, 0x47, 0xA4, 0xAE, 0xDE, 0x57, 0x1A, 0x2F, 0xC9, 0x6A, 0xDD, 0x59, 0x0D, 0x76, 0xF2, 0xB9, 0x4E, 0x9B, 0xEB, 0x94, 0xF2, 0xE3, 0x76, 0xB7, 0x6A, 0x84, 0x0A, 0xB5, 0xED, 0xDF, 0x06, 0x42, 0xB9, 0xDC, 0xDA, 0x57, 0xAB, 0x03, 0x7E, 0x5A, 0x96, 0xFC, 0x97, 0x35, 0xF2, 0x5F, 0xD6, 0x25, 0xE0, 0x7A, 0xBF, 0x57, 0x0D, 0xFF, 0x82, 0xFE, 0xDE, 0xDB, 0xEA, 0x77, 0x81, 0x67, 0x3D, 0x0C, 0x75, 0x1C, 0x28, 0xD4, 0xD9, 0xB3, 0x96, 0x06, 0xDE, 0xB2, 0xDD, 0x66, 0xFC, 0x03, 0xBA, 0x59, 0x9E, 0x30, 0x2C, 0x03, 0x4E, 0x30, 0xA6, 0x68, 0xAF, 0x82, 0x61, 0xF4, 0x97, 0x1A, 0x57, 0xB0, 0x82, 0x1E, 0x4B, 0xC2, 0xA0, 0xC0, 0xDF, 0xB3, 0xFE, 0x8E, 0x3A, 0xC6, 0x6B, 0x57, 0xFD, 0x54, 0xD5, 0x58, 0xF7, 0x8C, 0xBA, 0x51, 0xE8, 0x0E, 0xE7, 0x6F, 0x35, 0x7F, 0x50, 0xAA, 0x83, 0xC2, 0x38, 0x17, 0xBE, 0x60, 0xBD, 0xCB, 0xD0, 0x09, 0x09, 0x2C, 0x9F, 0xE9, 0x1C, 0xC1, 0x75, 0xF4, 0x3A, 0x0D, 0x1F, 0x8C, 0xA3, 0x8F, 0x26, 0x97, 0x83, 0xD4, 0x96, 0x96, 0xFC, 0xE6, 0x38, 0x5B, 0xDD, 0xD3, 0xC2, 0x79, 0x69, 0xF3, 0x00, 0x4A, 0x49, 0x4E, 0xF6, 0x43, 0xB6, 0x4F, 0x79, 0x57, 0xE1, 0xD7, 0x9C, 0x35, 0x6C, 0x69, 0xF9, 0x8B, 0xE8, 0x3E, 0xE1, 0x6C, 0x4E, 0x9D, 0x9B, 0x13, 0x30, 0x5F, 0x7C, 0xDB, 0xAA, 0x15, 0x2D, 0x56, 0xD8, 0x53, 0xC3, 0xD4, 0x35, 0xC0, 0xE8, 0x66, 0xD7, 0xCC, 0xE2, 0x0C, 0x9A, 0x26, 0x2E, 0x27, 0x2F, 0xCF, 0x4C, 0x5E, 0x55, 0x40, 0x16, 0xCF, 0x64, 0xCF, 0x2B, 0x9D, 0x5D, 0x9E, 0x99, 0xBD, 0x8F, 0xB9, 0x8A, 0x9D, 0x18, 0x55, 0xC9, 0xBF, 0xCC, 0x6F, 0x77, 0xFB, 0x4B, 0xF1, 0x51, 0x9A, 0x61, 0xB5, 0x1B, 0xF9, 0x47, 0x71, 0x97, 0x5A, 0xAD, 0x4E, 0x02, 0x2A, 0x4C, 0xEA, 0xE4, 0xD8, 0xD2, 0x79, 0xF8, 0x8B, 0xF4, 0xAC, 0x8A, 0x2C, 0xF9, 0xD4, 0x9C, 0x02, 0xE6, 0xA1, 0xCA, 0xB0, 0xC2, 0xBD, 0x55, 0xAC, 0x8C, 0xDB, 0x15, 0xC1, 0xFC, 0x2B, 0x11, 0x1E, 0xBC, 0x7A, 0x71, 0xB9, 0x4B, 0xBF, 0x22, 0x54, 0x9E, 0x62, 0x65, 0x44, 0x74, 0xCA, 0x9D, 0xD4, 0x53, 0xEA, 0x60, 0xE0, 0x50, 0xF5, 0xFA, 0xD8, 0x95, 0x3C, 0x27, 0xEC, 0x73, 0xD2, 0x5A, 0xDE, 0x27, 0xD1, 0xB8, 0x8C, 0x83, 0xC2, 0xCC, 0xD2, 0x0D, 0x79, 0x2F, 0x44, 0xEC, 0xB4, 0xAF, 0x65, 0x89, 0x92, 0x67, 0x61, 0x3C, 0xAE, 0x4C, 0x1E, 0xED, 0xE2, 0x2B, 0x7F, 0xA1, 0xC4, 0xAD, 0x04, 0x48, 0x3F, 0xD0, 0xFE, 0x1F, 0xA5, 0x07, 0x27, 0x1B, 0xBF, 0x44, 0x5E, 0x57, 0xFC, 0xAD, 0xDA, 0x18, 0xC7, 0x96, 0x03, 0xC2, 0x29, 0xA9, 0xB0, 0xB2, 0xA4, 0xDC, 0x3D, 0xA7, 0x4E, 0x79, 0x29, 0xB5, 0xAB, 0x84, 0x07, 0x50, 0x42, 0x1E, 0x57, 0x71, 0x80, 0xB7, 0x2E, 0xA4, 0x5C, 0x01, 0xF6, 0x5A, 0x65, 0xA2, 0x73, 0x40, 0x0E, 0x15, 0xC1, 0xE8, 0x60, 0x8C, 0xE1, 0xEF, 0x30, 0xB6, 0x7A, 0x1D, 0xF4, 0x73, 0xF1, 0x5C, 0xF5, 0x54, 0xDE, 0xB1, 0x24, 0xB5, 0xEA, 0x4F, 0xC9, 0x98, 0xCC, 0xDF, 0xAA, 0xDC, 0x54, 0xAB, 0x22, 0x73, 0x74, 0x49, 0xE8, 0x42, 0x76, 0x18, 0x72, 0xD1, 0xB9, 0x4E, 0x4E, 0xC2, 0x22, 0x46, 0x3B, 0x8A, 0x40, 0xBE, 0x94, 0x2B, 0xD8, 0x01, 0x70, 0x88, 0xCC, 0x0F, 0xFE, 0xBB, 0x66, 0x23, 0xE8, 0x14, 0x39, 0xDD, 0xC8, 0xE1, 0x37, 0xC6, 0x2B, 0x0D, 0x39, 0xC5, 0x16, 0xE9, 0x33, 0x74, 0x41, 0xA9, 0xEB, 0x0A, 0x3C, 0x35, 0x49, 0xA1, 0x6A, 0xD6, 0x36, 0x9C, 0xE1, 0x14, 0x2D, 0xAF, 0x42, 0x03, 0x2D, 0x03, 0xD0, 0x6A, 0xE8, 0xB6, 0x85, 0x01, 0xFB, 0x03, 0x5E, 0xC3, 0x57, 0x04, 0x04, 0xB4, 0x4E, 0x51, 0xDA, 0x84, 0x09, 0x9A, 0x4E, 0x70, 0xCF, 0xC7, 0x3A, 0xD5, 0x1F, 0x2D, 0xBA, 0x91, 0x1A, 0x60, 0xDA, 0x9C, 0x9A, 0x92, 0x77, 0xAF, 0x9A, 0x15, 0xDA, 0xCB, 0xAC, 0xD7, 0x3C, 0x75, 0x1C, 0x94, 0x5D, 0x55, 0x7D, 0xA3, 0x3D, 0x45, 0xB3, 0x60, 0xD1, 0xC2, 0x7F, 0xB1, 0xAF, 0xE0, 0x4B, 0x9C, 0xEE, 0x57, 0xBB, 0xE4, 0xA7, 0xFC, 0x58, 0xC8, 0xDC, 0xAE, 0x42, 0x76, 0x57, 0xF4, 0xB7, 0xB6, 0xBE, 0x02, 0x76, 0xD2, 0xFD, 0xE6, 0xD9, 0xC9, 0xB3, 0x72, 0x9E, 0xD4, 0xE1, 0x21, 0x5B, 0x2B, 0x57, 0x18, 0xC2, 0x1C, 0xAF, 0x4B, 0xDF, 0x61, 0x1B, 0xA9, 0x6B, 0x91, 0xD7, 0xF0, 0x77, 0xB3, 0x20, 0xEC, 0x3C, 0xF8, 0xCD, 0xF4, 0xBC, 0x24, 0x2E, 0x5E, 0xA4, 0x66, 0x94, 0x82, 0xA9, 0x3B, 0x85, 0x1F, 0xCB, 0x6F, 0xE7, 0xB4, 0x94, 0x5E, 0x63, 0x5E, 0x2C, 0xBA, 0x91, 0xCE, 0xE5, 0x0E, 0x57, 0xEC, 0x0E, 0x3B, 0x27, 0x7E, 0xCC, 0xAD, 0x73, 0x7E, 0x00, 0x72, 0x25, 0x73, 0x18, 0x67, 0x54, 0x54, 0xF9, 0x6F, 0x2A, 0x1D, 0xB3, 0x51, 0xAE, 0x32, 0x68, 0xF3, 0x6E, 0x66, 0x62, 0x08, 0x50, 0x38, 0x3D, 0xF7, 0xBD, 0xA0, 0xA6, 0x24, 0xB7, 0xE8, 0x6E, 0xA9, 0x5D, 0x45, 0x63, 0xB9, 0x3E, 0x2D, 0xA7, 0x6A, 0x0F, 0x9B, 0x17, 0xF6, 0x45, 0x64, 0xCB, 0xEF, 0x73, 0x11, 0x03, 0xB5, 0xD2, 0x42, 0xC6, 0x2D, 0xF4, 0x82, 0xE2, 0x0A, 0x75, 0x3C, 0x36, 0x1B, 0x48, 0x26, 0x7F, 0x67, 0xDC, 0x2C, 0x79, 0x0D, 0xB9, 0xE4, 0xC4, 0x96, 0xB3, 0xF8, 0x44, 0xC1, 0x66, 0x66, 0x64, 0xF1, 0xA5, 0xD2, 0x43, 0x55, 0xFC, 0x94, 0x23, 0x2C, 0x35, 0x7F, 0x7E, 0xE8, 0x16, 0x41, 0xBF, 0xE8, 0x86, 0x73, 0xB4, 0xF2, 0x87, 0x3C, 0x8C, 0xD1, 0x89, 0xAE, 0x53, 0x9E, 0xA6, 0xCE, 0xC4, 0xE8, 0xC0, 0x7D, 0xEC, 0x43, 0xB2, 0x92, 0xEB, 0x06, 0x44, 0x65, 0x78, 0xF2, 0xA6, 0x71, 0x4F, 0xE7, 0x6A, 0xF9, 0x9F, 0x8B, 0xA2, 0x8B, 0x3E, 0x0B, 0x5F, 0x26, 0x17, 0x57, 0x46, 0x4B, 0x66, 0x84, 0x48, 0xF8, 0x51, 0x32, 0x95, 0xD3, 0x0A, 0x65, 0xB3, 0x32, 0x88, 0x21, 0x44, 0x0F, 0x01, 0xEB, 0xA8, 0xB3, 0x31, 0x36, 0x18, 0xA3, 0xD6, 0xC6, 0xA7, 0xC9, 0x9E, 0x2B, 0xF2, 0x52, 0x24, 0xB2, 0x38, 0xCE, 0xA5, 0xAC, 0x7C, 0xB9, 0xA8, 0x30, 0xA7, 0x80, 0xA5, 0x40, 0x92, 0xA6, 0x97, 0xC3, 0xCA, 0x90, 0xE0, 0x0E, 0xDE, 0x5C, 0xC0, 0xD7, 0x09, 0x57, 0x46, 0x83, 0x54, 0x46, 0x02, 0xFA, 0x0B, 0xE4, 0x51, 0x9E, 0x61, 0x57, 0x41, 0x3D, 0xBA, 0x65, 0xF1, 0x15, 0xF4, 0xB3, 0x6C, 0x4B, 0xC2, 0x5B, 0x14, 0xA8, 0x9A, 0x99, 0xEE, 0x8C, 0xA6, 0xE5, 0xFB, 0xE7, 0x3E, 0x40, 0x3E, 0x27, 0x3A, 0x95, 0x1E, 0x41, 0x5A, 0x83, 0x0B, 0xB8, 0x69, 0x88, 0x87, 0x93, 0xB5, 0xD2, 0x01, 0x7A, 0x63, 0x79, 0x45, 0x15, 0x01, 0xCD, 0xA4, 0x70, 0xF0, 0x58, 0x70, 0x1D, 0x12, 0x13, 0x19, 0x6D, 0x58, 0x25, 0x95, 0xC7, 0x0E, 0xEA, 0x2F, 0x33, 0x0F, 0xA4, 0xB0, 0x75, 0x66, 0x79, 0x1E, 0xD9, 0x2D, 0x9A, 0x80, 0x44, 0xA7, 0x92, 0xD1, 0x44, 0x7D, 0x70, 0x21, 0x47, 0x8B, 0x89, 0x1D, 0x79, 0xCA, 0x29, 0xC8, 0x71, 0xFA, 0x23, 0x95, 0x0C, 0x1A, 0xB2, 0x60, 0xE3, 0x4B, 0xC0, 0x3D, 0xD0, 0xEC, 0xB0, 0x91, 0x26, 0x6B, 0x11, 0x75, 0xB1, 0xAC, 0x21, 0xB4, 0x62, 0x45, 0x52, 0x64, 0x6D, 0x5F, 0x2E, 0x2D, 0x53, 0x6F, 0xFC, 0x37, 0x61, 0xB8, 0x48, 0xA8, 0x7F, 0x12, 0x3C, 0xBB, 0x4A, 0x42, 0x1E, 0x5D, 0xB4, 0x5B, 0x71, 0x5A, 0x95, 0x42, 0x3B, 0xA3, 0xC2, 0x60, 0x73, 0x73, 0x06, 0x7E, 0x18, 0xDC, 0x0F, 0x58, 0x84, 0x88, 0xBB, 0xAA, 0x84, 0x39, 0x91, 0xAD, 0xED, 0x7B, 0x4B, 0xFF, 0x89, 0x77, 0x6C, 0xFE, 0x90, 0xC5, 0x4A, 0x8F, 0x6C, 0x50, 0xC5, 0xDB, 0x15, 0x4E, 0x37, 0x31, 0x83, 0x10, 0xF6, 0x03, 0x1D, 0xB2, 0x28, 0x40, 0x51, 0xA7, 0x6E, 0xA2, 0x1E, 0x53, 0x49, 0x60, 0xCC, 0xEC, 0x26, 0x7E, 0x1A, 0x3C, 0x88, 0xA5, 0x33, 0xC7, 0x25, 0x31, 0xE5, 0x06, 0xE6, 0xC7, 0x74, 0x47, 0xF6, 0xF4, 0xAA, 0x29, 0xB9, 0x21, 0xF9, 0x59, 0xDC, 0xE1, 0xE2, 0xBF, 0x93, 0xB6, 0x08, 0xD9, 0x15, 0xA7, 0x82, 0xD6, 0xCA, 0x34, 0xDC, 0x02, 0xC7, 0x10, 0x78, 0x86, 0x84, 0x6A, 0x79, 0x55, 0x6D, 0x2F, 0x3F, 0x49, 0xF9, 0x84, 0x7D, 0x51, 0x46, 0xA1, 0xAC, 0xD2, 0x0D, 0x59, 0x2F, 0xA4, 0xE5, 0xE5, 0xBE, 0x79, 0xE9, 0x2C, 0xB3, 0x4A, 0x7D, 0xD1, 0xD5, 0xBC, 0xDD, 0x55, 0x96, 0xE5, 0x60, 0xC2, 0x39, 0x7E, 0x35, 0x3B, 0x33, 0x48, 0x27, 0x9D, 0xC3, 0xAF, 0x77, 0x2C, 0x86, 0xB4, 0x52, 0xCC, 0xB2, 0x4B, 0x3D, 0x56, 0x71, 0x81, 0x82, 0x60, 0xEF, 0x00, 0x1F, 0x48, 0x98, 0xFF, 0xA8, 0x74, 0xA6, 0xB8, 0xB4, 0xC8, 0x50, 0x3E, 0x99, 0xE9, 0x59, 0x66, 0x57, 0xB9, 0x37, 0xCF, 0x93, 0xB9, 0xB5, 0xCA, 0x3E, 0x5E, 0xCF, 0xE5, 0xF1, 0x36, 0x05, 0xEE, 0x10, 0x0F, 0x8A, 0x5A, 0x17, 0x7D, 0x82, 0xC6, 0xC9, 0x83, 0x2C, 0x0B, 0x55, 0x1F, 0x95, 0x77, 0x29, 0xF1, 0xF8, 0x34, 0xE0, 0xA7, 0xE2, 0x79, 0xD6, 0x49, 0xCE, 0x04, 0x61, 0x6F, 0xDE, 0x43, 0xEE, 0xAE, 0x8A, 0xC9, 0xC5, 0xA9, 0x7C, 0x9B, 0x1C, 0xB7, 0xF2, 0x8B, 0x42, 0x8F, 0xB8, 0xEB, 0xEC, 0x1B, 0x62, 0xB3, 0xC0, 0x69, 0x22, 0x3F, 0xE9, 0xED, 0x45, 0x67, 0xC1, 0x26, 0xC5, 0x6F, 0xCB, 0x5C, 0xD5, 0x1F, 0x60, 0x17, 0x25, 0x19, 0x4F, 0x02, 0x15, 0xF2, 0x05, 0xE9, 0xB3, 0xA4, 0x2C, 0xFE, 0xEA, 0xEC, 0x1C, 0xA9, 0x7F, 0xD9, 0xF7, 0x82, 0x60, 0x99, 0x79, 0x56, 0x7E, 0xA9, 0x9F, 0x3C, 0x33, 0x96, 0xCA, 0x02, 0x14, 0xFE, 0x01, 0xFD, 0xC2, 0x24, 0x25, 0xCB, 0xD1, 0x06, 0x0C, 0x06, 0x86, 0x2D, 0x25, 0x6A, 0x73, 0xB0, 0x84, 0x12, 0xF1, 0x9F, 0xF9, 0x35, 0xD2, 0x15, 0xC9, 0x6B, 0xE1, 0xC3, 0x3C, 0x4E, 0xFA, 0x73, 0x58, 0x55, 0xB6, 0x38, 0x67, 0x07, 0x2C, 0xCC, 0xF0, 0x29, 0xAA, 0x87, 0xD3, 0x63, 0xA2, 0x2B, 0xEF, 0xC2, 0x36, 0x01, 0x87, 0x04, 0x08, 0x3C, 0xCF, 0xD1, 0x15, 0x9C, 0x00, 0xE5, 0x58, 0x86, 0xAA, 0x63, 0xC1, 0xC7, 0x16, 0x9F, 0xF1, 0x0F, 0xE0, 0x36, 0x69, 0x62, 0xC2, 0x68, 0xED, 0x2E, 0xCE, 0x83, 0x94, 0x04, 0x2D, 0xAF, 0x18, 0xCA, 0x8A, 0x21, 0x77, 0x64, 0xAC, 0x2F, 0x38, 0x81, 0x7F, 0x8C, 0x39, 0x5C, 0xFE, 0x11, 0xDB, 0x19, 0xB0, 0x98, 0x5F, 0xAB, 0x5E, 0xB4, 0x28, 0x09, 0xF8, 0x84, 0x2C, 0xA2, 0x93, 0xEA, 0x6A, 0xA8, 0xC2, 0x22, 0x9E, 0x48, 0x03, 0x87, 0x24, 0x99, 0xB1, 0x79, 0xF5, 0xA3, 0xD8, 0x7B, 0x92, 0x72, 0x6B, 0x5B, 0x8B, 0x9A, 0x32, 0xF0, 0x9A, 0xD4, 0x8C, 0xD9, 0x79, 0xC7, 0x0C, 0x4F, 0x16, 0x7F, 0x2F, 0x1B, 0xD4, 0xB1, 0xFD, 0x1F, 0xF3, 0x7E, 0x10, 0x7C, 0x87, 0xED, 0xE0, 0x44, 0xB4, 0x83, 0xD6, 0xAF, 0x3E, 0x00, 0x1D, 0x34, 0x4F, 0x22, 0xDA, 0xC0, 0x3A, 0x71, 0x56, 0x74, 0x5B, 0xFB, 0x3C, 0xD6, 0x9A, 0x78, 0x5E, 0xCB, 0xA6, 0x82, 0xF1, 0xA9, 0x0D, 0x8D, 0xA6, 0x14, 0x20, 0x67, 0xB8, 0xEE, 0xAF, 0xE8, 0xFA, 0xD2, 0x5D, 0x46, 0x8E, 0xBF, 0x9C, 0x1F, 0xA6, 0x09, 0xB5, 0xBF, 0x0C, 0x7A, 0xAA, 0x30, 0xEA, 0xB0, 0xFA, 0x05, 0x3C, 0x66, 0x61, 0x2C, 0x71, 0x08, 0xC4, 0xC5, 0x77, 0xB9, 0xDF, 0x53, 0x97, 0xF1, 0x52, 0x78, 0x87, 0x33, 0x29, 0xA5, 0xCE, 0x82, 0xE1, 0xDC, 0x67, 0xE9, 0xEF, 0x45, 0x78, 0xD1, 0xCB, 0x58, 0xB5, 0x74, 0x46, 0x45, 0xA4, 0xEF, 0x17, 0x65, 0x02, 0xE7, 0xA2, 0x43, 0x1E, 0xF2, 0x8F, 0xF8, 0x3B, 0xFD, 0x29, 0x16, 0x28, 0x5F, 0x4D, 0xC9, 0xC4, 0xF7, 0x2B, 0x2D, 0xC5, 0x1F, 0xD9, 0x45, 0xD9, 0x47, 0x39, 0x13, 0xAA, 0x56, 0xE7, 0xAD, 0x2E, 0x99, 0xCC, 0xDD, 0x5A, 0x74, 0x23, 0xA3, 0x43, 0xE0, 0x54, 0x6E, 0xBF, 0x78, 0x86, 0x78, 0x25, 0xEB, 0xA7, 0xEF, 0x0A, 0x05, 0x8B, 0x9F, 0x63, 0xBF, 0x1B, 0xD1, 0x49, 0x65, 0xF4, 0x42, 0xCC, 0x41, 0x71, 0xD2, 0xE2, 0x1C, 0xBE, 0x1D, 0x70, 0x15, 0xFB, 0x96, 0xAF, 0x29, 0xA1, 0xB3, 0x64, 0x95, 0x03, 0x65, 0x53, 0x8B, 0x28, 0x6C, 0x43, 0xA5, 0x53, 0xFA, 0x66, 0xEE, 0x61, 0xB6, 0x32, 0x4A, 0x2B, 0xBC, 0xC8, 0xF3, 0xF7, 0xB9, 0x29, 0x17, 0x89, 0x48, 0xFB, 0x3C, 0xC4, 0x5D, 0xEE, 0x43, 0xB7, 0xC0, 0xE8, 0xCA, 0x47, 0x16, 0xDD, 0xF8, 0x59, 0x70, 0x32, 0xCF, 0x58, 0x1C, 0xC0, 0xFA, 0x53, 0x39, 0xAF, 0xF4, 0x14, 0xC7, 0x22, 0xAF, 0xA7, 0xD2, 0x87, 0x67, 0x95, 0xD2, 0x5A, 0x35, 0x51, 0x90, 0x14, 0xC9, 0xE7, 0xEF, 0x13, 0x91, 0x3E, 0x88, 0x6C, 0x94, 0x54, 0x68, 0xFF, 0x3F, 0x78, 0xBD, 0xE2, 0x18, 0x3D, 0x05, 0x63, 0x00, 0x3B, 0x2C, 0x56, 0x12, 0xE3, 0xC1, 0x5A, 0xEE, 0x94, 0xFC, 0x2C, 0xE1, 0xAF, 0x8A, 0x83, 0x45, 0x3E, 0xE2, 0x86, 0xDC, 0xA3, 0x65, 0x69, 0x92, 0x43, 0x49, 0x5F, 0x99, 0xCB, 0xA5, 0xF7, 0x22, 0x6C, 0x79, 0x21, 0x72, 0x86, 0x4F, 0x8A, 0x74, 0x9C, 0xA2, 0x77, 0x91, 0x05, 0x1C, 0x05, 0x78, 0xD0, 0xB7, 0x63, 0x6E, 0x60, 0x8C, 0xC5, 0x26, 0x22, 0x16, 0xDC, 0xC7, 0xD9, 0x99, 0xDD, 0x07, 0x5A, 0x95, 0xBD, 0xCD, 0x9F, 0x0F, 0x0A, 0xB3, 0xD7, 0x14, 0x67, 0x81, 0x7D, 0x89, 0x2F, 0x2A, 0x62, 0x40, 0x45, 0x44, 0x3C, 0x47, 0x01, 0xEA, 0x7D, 0x1B, 0xC5, 0x67, 0xC0, 0xAD, 0x8B, 0x04, 0xD0, 0x4F, 0x70, 0x15, 0x7D, 0x3D, 0x96, 0x09, 0x6E, 0xB7, 0x68, 0xFF, 0xCF, 0xFC, 0x1E, 0xB6, 0x7B, 0x86, 0x81, 0x78, 0x55, 0x32, 0x3B, 0xFB, 0x34, 0x21, 0xCC, 0x66, 0x17, 0xE8, 0xF1, 0xEC, 0xA4, 0xC3, 0x65, 0xCE, 0xEA, 0x37, 0x11, 0xA9, 0xEC, 0x06, 0xD5, 0x01, 0xEF, 0x3E, 0xD1, 0x05, 0x54, 0x61, 0x5F, 0x07, 0x7D, 0x80, 0xD9, 0xB4, 0xEF, 0x58, 0x33, 0x44, 0xB7, 0x08, 0x22, 0x5E, 0x83, 0x6D, 0xAC, 0x1F, 0xA9, 0x5F, 0x6A, 0xD6, 0x96, 0x4C, 0xCC, 0x4C, 0x30, 0x6E, 0xCF, 0x7E, 0x9E, 0x67, 0x34, 0xAC, 0x49, 0x2A, 0x28, 0xC1, 0x75, 0x16, 0x61, 0x9B, 0x58, 0x47, 0xC9, 0x73, 0xDE, 0x3B, 0x44, 0x47, 0xB1, 0x97, 0xF6, 0x15, 0xB0, 0x3D, 0xF2, 0x88, 0x16, 0x82, 0x9D, 0x83, 0xB8, 0xE6, 0x4C, 0xD2, 0x0B, 0xAC, 0x64, 0x25, 0x25, 0xF5, 0x37, 0x47, 0x16, 0x0A, 0xD3, 0xEE, 0x35, 0xFE, 0x95, 0xB9, 0x20, 0x47, 0x52, 0x27, 0x89, 0xDB, 0x52, 0x74, 0xD0, 0xF8, 0x3C, 0x74, 0x25, 0xF3, 0xBE, 0xBE, 0xCA, 0x5B, 0x23, 0x7A, 0x4D, 0xEC, 0xB1, 0xF3, 0x80, 0x63, 0xD1, 0x11, 0x6A, 0x08, 0xF6, 0x1B, 0x6A, 0x5A, 0x08, 0x91, 0x1C, 0x30, 0x8C, 0xCD, 0x96, 0x18, 0xD3, 0xCC, 0xCB, 0x36, 0x48, 0x0E, 0x64, 0x6E, 0xC9, 0x5E, 0x2F, 0x9B, 0x90, 0xF7, 0x20, 0x11, 0x97, 0x8F, 0x2D, 0xCE, 0x0D, 0x7F, 0xA5, 0x1C, 0x53, 0x01, 0x78, 0x5E, 0x82, 0x96, 0x73, 0x1E, 0xDA, 0xDF, 0x56, 0x55, 0x89, 0x0F, 0xD3, 0x9E, 0xE0, 0x76, 0xF2, 0x01, 0x0B, 0x0A, 0x11, 0xA3, 0x8C, 0x67, 0x55, 0x0B, 0xEB, 0xB3, 0x97, 0x96, 0x7A, 0x88, 0x26, 0xE5, 0x99, 0xB2, 0x6F, 0x8A, 0xF3, 0x8B, 0x8E, 0x24, 0x96, 0x49, 0x5D, 0xCB, 0xC7, 0x86, 0x79, 0xCB, 0x5F, 0xB1, 0xD6, 0x7B, 0xFA, 0x82, 0xFB, 0xF9, 0xA3, 0x6C, 0x0F, 0xAA, 0x72, 0xA4, 0x21, 0xB4, 0x08, 0x7C, 0x81, 0xE2, 0x80, 0xC5, 0x24, 0x22, 0x1C, 0x08, 0x61, 0x4E, 0xE2, 0xA6, 0x17, 0xCF, 0x2B, 0x62, 0xF1, 0x34, 0xA5, 0xAE, 0x99, 0xCF, 0x04, 0xBC, 0x8A, 0xE6, 0x84, 0x58, 0xD1, 0x23, 0xD6, 0xA5, 0xD0, 0xE9, 0x32, 0x3F, 0x2E, 0xE1, 0x61, 0x00, 0xB6, 0x0A, 0x8F, 0xD9, 0x06, 0xA0, 0xBF, 0x65, 0x6F, 0x68, 0x66, 0xF8, 0x04, 0xE5, 0x4D, 0x8B, 0x69, 0x44, 0x2A, 0xB8, 0xA0, 0x7C, 0x3A, 0x6B, 0x1A, 0x73, 0x6F, 0xC1, 0x0F, 0xF6, 0xAB, 0x2A, 0x46, 0xC6, 0x75, 0x2E, 0xC9, 0x75, 0x88, 0x73, 0x11, 0x68, 0xF9, 0xE9, 0x21, 0x33, 0x24, 0x2C, 0x61, 0x8D, 0xA7, 0x9B, 0x52, 0x26, 0xD9, 0x64, 0xBB, 0x1F, 0x6D, 0x56, 0x60, 0xB4, 0x12, 0x7C, 0x3C, 0xB0, 0xD6, 0xC2, 0x97, 0x40, 0xC0, 0xAE, 0xD2, 0x57, 0xE5, 0x73, 0xF8, 0x83, 0xF9, 0xA6, 0xCA, 0x49, 0xA2, 0x29, 0x69, 0xDF, 0xD9, 0xDB, 0xC5, 0x19, 0x31, 0xE7, 0x78, 0x3C, 0x09, 0x18, 0x7C, 0x4A, 0x74, 0x57, 0x7A, 0xD8, 0x93, 0x54, 0x40, 0xF2, 0xB5, 0x76, 0x39, 0x68, 0xB8, 0xF2, 0x26, 0x6D, 0x23, 0x3E, 0x0F, 0xF4, 0xB4, 0x60, 0x11, 0x9B, 0xC1, 0x63, 0xA5, 0xB4, 0xE2, 0x46, 0x45, 0x7A, 0xEE, 0x8E, 0x32, 0x77, 0x65, 0x6C, 0xCA, 0x1F, 0x66, 0xB0, 0x12, 0x8C, 0x21, 0x39, 0x89, 0xCA, 0x23, 0x21, 0xA1, 0x42, 0x37, 0x80, 0xEE, 0x39, 0x41, 0x8E, 0x00, 0xDD, 0x76, 0x96, 0xE8, 0x24, 0x70, 0x11, 0x6D, 0x13, 0xEE, 0x03, 0x36, 0x59, 0xA8, 0x88, 0x2F, 0xE0, 0xFE, 0xA2, 0x6F, 0x05, 0xBF, 0xD4, 0x5F, 0x72, 0x9D, 0x8B, 0x0B, 0xD4, 0x4E, 0x29, 0xDB, 0xCA, 0x43, 0x55, 0x8D, 0x31, 0x38, 0xEB, 0x0D, 0x7A, 0x27, 0x38, 0x91, 0x8F, 0x21, 0x3F, 0xDD, 0x82, 0x65, 0xF5, 0xF0, 0x4B, 0x9B, 0x77, 0xC8, 0x1D, 0x68, 0x05, 0x2D, 0x16, 0x2F, 0x05, 0x1F, 0x58, 0xE4, 0x92, 0x91, 0x60, 0x43, 0xC1, 0x8F, 0x3C, 0x4F, 0xFD, 0x9E, 0x6C, 0xA0, 0xA0, 0x57, 0x77, 0x31, 0xF9, 0x4A, 0xA9, 0xBF, 0xB6, 0x70, 0xB1, 0x91, 0x69, 0x24, 0x8B, 0x03, 0x0D, 0xBC, 0x4D, 0x78, 0xBE, 0xDB, 0x17, 0x19, 0x45, 0xF5, 0xC7, 0x66, 0x39, 0x72, 0x14, 0x7E, 0x42, 0x5D, 0x83, 0x6B, 0xA1, 0x39, 0xE6, 0xEB, 0x48, 0x02, 0x4C, 0xCD, 0xFB, 0x91, 0x75, 0xB6, 0x4E, 0x99, 0x55, 0x92, 0xB7, 0xAA, 0x16, 0x4E, 0xB2, 0x2E, 0x5E, 0x6F, 0xFC, 0x15, 0x19, 0x58, 0x19, 0xA6, 0xFF, 0x5F, 0x00, 0xC1, 0x3D, 0xAC, 0xB9, 0xE0, 0x91, 0x2F, 0x3D, 0x84, 0xFB, 0xD9, 0x78, 0x20, 0x23, 0xC8, 0x16, 0xCA, 0x09, 0xBC, 0x1B, 0x72, 0x58, 0x78, 0x88, 0xDC, 0x08, 0x2E, 0x28, 0x1C, 0x84, 0x2E, 0xA7, 0xBA, 0xE5, 0xA4, 0x43, 0xCC, 0x4C, 0x46, 0xD2, 0x07, 0x48, 0x98, 0x87, 0x2E, 0xFE, 0x0B, 0x5A, 0x51, 0x1C, 0x18, 0xD8, 0x82, 0xD8, 0x55, 0x64, 0xBA, 0x77, 0xAB, 0x98, 0x9C, 0xB7, 0x36, 0x33, 0xB0, 0x7E, 0x71, 0x03, 0xE5, 0x09, 0x31, 0x47, 0xBE, 0x6A, 0xE1, 0x6D, 0x62, 0xB9, 0x52, 0x95, 0xBF, 0x4C, 0xB9, 0x3E, 0x3B, 0x20, 0xAB, 0x41, 0x79, 0x24, 0x6F, 0x52, 0x52, 0x04, 0x10, 0x50, 0x94, 0x1D, 0xB5, 0x04, 0xF4, 0x2A, 0x1B, 0x0E, 0xB8, 0x0F, 0xBD, 0x65, 0xF9, 0xB8, 0x59, 0xA3, 0xF9, 0xBC, 0x3A, 0x6B, 0x14, 0x0B, 0x96, 0xFC, 0xA6, 0x7C, 0xC6, 0x5F, 0x28, 0xF6, 0x9B, 0x7B, 0x12, 0xDD, 0x40, 0x61, 0x2E, 0x57, 0xBA, 0xA2, 0x88, 0x92, 0x29, 0x94, 0x7D, 0x2B, 0x71, 0x4C, 0x9C, 0x2D, 0x3F, 0x51, 0x3E, 0x1C, 0x29, 0x50, 0x5A, 0xB2, 0xC6, 0x05, 0xD0, 0x41, 0x67, 0xCE, 0x12, 0xD7, 0x03, 0x48, 0x88, 0x70, 0xAC, 0x35, 0xAA, 0x3E, 0x23, 0xEB, 0xA7, 0x06, 0xE2, 0xC7, 0x95, 0x17, 0xCC, 0x3B, 0x89, 0x5E, 0xD0, 0x29, 0xA7, 0x49, 0x78, 0xA6, 0x72, 0x5C, 0xFA, 0x39, 0xB1, 0x9A, 0xD9, 0x9D, 0xD8, 0x22, 0xCD, 0xAB, 0xB2, 0x8E, 0xD0, 0xC8, 0xED, 0xB9, 0x47, 0xFC, 0x7D, 0x95, 0xAB, 0x04, 0x79, 0xAE, 0xDF, 0xE0, 0x64, 0xF1, 0x5B, 0xEB, 0xEB, 0x6A, 0x50, 0xE1, 0x4C, 0x5D, 0x8A, 0x1F, 0x04, 0xFA, 0x2D, 0xC6, 0x10, 0xDB, 0xC0, 0x91, 0xEC, 0x54, 0x1E, 0xCA, 0x55, 0xA5, 0xBC, 0x12, 0x4C, 0xE7, 0x97, 0xC4, 0xB9, 0x8B, 0x86, 0x84, 0xF3, 0xC3, 0xC7, 0x4B, 0x93, 0x44, 0x97, 0xFC, 0x43, 0x15, 0x1C, 0x09, 0xDB, 0x2D, 0x1A, 0xEA, 0x97, 0x7D, 0xB5, 0x7E, 0xA5, 0x4E, 0x50, 0xA2, 0xD4, 0x87, 0xF8, 0x79, 0x90, 0x6A, 0x51, 0x42, 0xDC, 0x07, 0x2F, 0x66, 0xFE, 0xAC, 0xA2, 0x4B, 0xBD, 0x93, 0xDB, 0xB9, 0x16, 0xB2, 0xFC, 0x98, 0x50, 0x01, 0x53, 0x3E, 0x2E, 0xCC, 0x20, 0x96, 0xC9, 0x9F, 0xF9, 0x93, 0xB2, 0x03, 0x8A, 0xE5, 0x2E, 0x37, 0xC1, 0xA3, 0xCA, 0x1A, 0x6B, 0xAE, 0x7A, 0x11, 0xD0, 0x43, 0xFD, 0x88, 0xBF, 0x04, 0x85, 0x16, 0x23, 0xE4, 0x3C, 0xF0, 0x44, 0xA6, 0x1D, 0x73, 0x39, 0xB2, 0x38, 0xF9, 0x33, 0xBB, 0x11, 0xFE, 0xB1, 0x98, 0xCF, 0xC5, 0xE1, 0x9D, 0x21, 0x37, 0x04, 0xA7, 0x60, 0xD0, 0xAF, 0x4D, 0x1A, 0x08, 0xBB, 0x39, 0x9D, 0x02, 0xCB, 0xA0, 0x11, 0xAB, 0x83, 0xAA, 0xCB, 0xE0, 0x27, 0xEA, 0x0D, 0xFC, 0x27, 0xB8, 0xDE, 0xE2, 0x00, 0x99, 0x01, 0xB6, 0xA6, 0x75, 0x94, 0xBF, 0x24, 0xBB, 0x93, 0x48, 0xA6, 0x82, 0xB8, 0x1D, 0xFD, 0xA1, 0xEA, 0x3B, 0x7E, 0x39, 0x64, 0x01, 0xFF, 0x1E, 0xC6, 0xF1, 0x4E, 0x97, 0x08, 0xD5, 0x0C, 0xE7, 0x45, 0x80, 0x1D, 0x1A, 0x6F, 0x3D, 0x43, 0x05, 0xC1, 0x63, 0xA9, 0x6B, 0x89, 0x89, 0xE0, 0x39, 0x8B, 0x72, 0xD2, 0x08, 0xA6, 0xA5, 0x58, 0x94, 0x8E, 0x37, 0x06, 0x26, 0x1E, 0xAF, 0xD8, 0x5F, 0x2D, 0x5C, 0x7C, 0xBB, 0x2A, 0x53, 0x2F, 0x0D, 0xB1, 0xE2, 0xC7, 0x6B, 0x8E, 0x78, 0x87, 0x88, 0xE5, 0x84, 0xC4, 0x4D, 0xA1, 0x94, 0xA8, 0x99, 0x36, 0x7D, 0xAA, 0x64, 0xF8, 0x20, 0x55, 0x4C, 0xFC, 0x0D, 0xDE, 0x30, 0x5F, 0xF9, 0x5F, 0xCA, 0x33, 0x93, 0x56, 0x6A, 0xE7, 0xA7, 0x9C, 0x4B, 0xA0, 0x93, 0xB7, 0x32, 0xA8, 0x51, 0xFF, 0x10, 0x6B, 0x72, 0xDE, 0x84, 0xB4, 0x12, 0x83, 0x45, 0xBE, 0xDE, 0xDB, 0x89, 0xE1, 0xF2, 0xC1, 0x45, 0x76, 0xC4, 0x29, 0x8E, 0x3B, 0x3D, 0x9C, 0x38, 0x20, 0x2E, 0x34, 0xDF, 0x42, 0x5C, 0x91, 0x5F, 0x37, 0x3B, 0x4E, 0x3C, 0x50, 0xFE, 0x2F, 0x29, 0x0F, 0xFF, 0x27, 0x2B, 0x3A, 0xCE, 0x0A, 0x8F, 0xCE, 0x1D, 0x1B, 0xF1, 0x0A, 0xBB, 0x5F, 0xB8, 0x28, 0x08, 0xC5, 0xEE, 0x96, 0xB6, 0x7A, 0xD3, 0xF1, 0xC5, 0xCC, 0x02, 0xC7, 0x41, 0x7C, 0x13, 0xF7, 0x91, 0xE5, 0x10, 0x11, 0x21, 0x39, 0x6A, 0xD1, 0x46, 0x0C, 0x28, 0x2E, 0x2E, 0xC4, 0x89, 0x93, 0x40, 0x7D, 0xC2, 0x4A, 0x55, 0x59, 0x41, 0x65, 0xAC, 0xB3, 0xCA, 0xBD, 0xE8, 0x77, 0xF8, 0xBF, 0x2A, 0x7D, 0x59, 0x46, 0xC0, 0x51, 0xD5, 0xBB, 0xCA, 0x2B, 0x5E, 0x0C, 0xF5, 0xCE, 0x2A, 0xCC, 0xF1, 0x06, 0xB6, 0x4B, 0xE0, 0xCD, 0x80, 0xF0, 0x33, 0xB2, 0x04, 0x8A, 0x82, 0x90, 0x28, 0xCF, 0x99, 0x97, 0x12, 0xDB, 0xC1, 0xE4, 0xF8, 0x1E, 0x38, 0xB2, 0x8C, 0x1F, 0x03, 0xC2, 0x6B, 0x2A, 0xA6, 0x47, 0x44, 0x22, 0xDD, 0xCC, 0x1B, 0x01, 0x72, 0xD4, 0xB7, 0xEA, 0xAB, 0xC7, 0x38, 0xD5, 0x22, 0xFE, 0x7C, 0xC7, 0x2C, 0xF5, 0x47, 0xF1, 0x3C, 0xC6, 0x63, 0x1C, 0x92, 0x9F, 0xA2, 0xBA, 0x12, 0xB9, 0x40, 0x9B, 0x85, 0x1F, 0xB1, 0x03, 0x3C, 0x1A, 0x97, 0x07, 0xC4, 0x56, 0x85, 0x47, 0x57, 0x81, 0xD6, 0x1C, 0x8B, 0xD0, 0x6C, 0x28, 0x83, 0x37, 0xC7, 0xFF, 0x2E, 0xCC, 0x12, 0xB4, 0xBB, 0x1F, 0x43, 0xC7, 0x88, 0x6E, 0x38, 0x16, 0xAA, 0xC3, 0xA4, 0xCF, 0x19, 0x5F, 0x70, 0x3F, 0xE5, 0x4C, 0xEA, 0x4A, 0x22, 0x1B, 0x9C, 0x65, 0xF1, 0x88, 0x38, 0x0F, 0xBE, 0x8D, 0xD7, 0xC9, 0x6D, 0x45, 0x5E, 0x51, 0x21, 0x8A, 0xF1, 0xA2, 0x67, 0xC1, 0x7C, 0x20, 0x52, 0xBC, 0xCD, 0xF7, 0x3A, 0x34, 0x59, 0xEA, 0xED, 0xB6, 0x1F, 0xE6, 0xC8, 0x36, 0x3A, 0x9C, 0x54, 0x8D, 0x52, 0x24, 0x32, 0x86, 0xB0, 0x37, 0x00, 0x95, 0xFA, 0x89, 0x28, 0x05, 0x0B, 0x29, 0x62, 0xE2, 0x3B, 0xF8, 0x24, 0xEE, 0x84, 0xC4, 0x5B, 0xB9, 0x35, 0xEA, 0x93, 0x74, 0x3F, 0x60, 0x16, 0xB4, 0x53, 0xFE, 0x18, 0xE0, 0x79, 0x7F, 0x55, 0x9E, 0x06, 0xAA, 0x5C, 0x4B, 0xC1, 0xF7, 0xC0, 0x3E, 0xFB, 0xD5, 0x68, 0x20, 0x38, 0x89, 0xA1, 0xC7, 0x6A, 0xC0, 0x38, 0x9A, 0x0F, 0x51, 0x01, 0x36, 0x52, 0xCE, 0x93, 0x4E, 0xE0, 0xA6, 0xC5, 0xCB, 0x45, 0xF3, 0x55, 0xC3, 0x91, 0x7B, 0x25, 0x01, 0xAA, 0xA0, 0xA0, 0x05, 0x32, 0x35, 0xDA, 0xE4, 0xFD, 0xAF, 0xE2, 0x24, 0x72, 0xDC, 0xE5, 0x2D, 0x58, 0x81, 0x30, 0x1C, 0xC2, 0x11, 0x04, 0x8E, 0xB1, 0x0A, 0xC6, 0x7C, 0xA1, 0x00, 0x9A, 0x9E, 0xE0, 0x80, 0x6B, 0x28, 0x4F, 0xC8, 0x7C, 0x50, 0x12, 0x9D, 0x2E, 0x18, 0xD0, 0xFA, 0x86, 0xFD, 0x23, 0x92, 0x91, 0x0F, 0x03, 0xD7, 0x48, 0xAB, 0x08, 0x0F, 0x1F, 0x99, 0x42, 0x8F, 0x35, 0xBA, 0x3E, 0x04, 0x9E, 0xA8, 0x43, 0x16, 0x1D, 0x82, 0x3F, 0xA0, 0x14, 0xEB, 0x4E, 0x6C, 0x0A, 0xF4, 0x89, 0x76, 0x87, 0x00, 0xC0, 0x1D, 0x94, 0xA3, 0x24, 0x01, 0xBA, 0x87, 0x1B, 0x1B, 0x28, 0x29, 0xEC, 0xA0, 0xD5, 0xF5, 0xBF, 0xD2, 0x21, 0x1F, 0xAC, 0x6E, 0x62, 0xF6, 0x7D, 0x8F, 0xD2, 0x9A, 0xD7, 0x85, 0x2E, 0x4E, 0x60, 0xB5, 0xAA, 0xEC, 0xB9, 0xD5, 0x4D, 0x7D, 0x56, 0xD5, 0x39, 0x4A, 0x89, 0x76, 0x92, 0xB8, 0x62, 0x61, 0x26, 0x79, 0x54, 0x31, 0xD1, 0x6C, 0x2E, 0x19, 0x04, 0x4C, 0x0E, 0xD5, 0xD4, 0x9E, 0xCF, 0x10, 0x05, 0x5C, 0xAC, 0x4D, 0xCB, 0xF6, 0xF4, 0x79, 0x53, 0x73, 0x22, 0x7F, 0x8E, 0xC7, 0x21, 0xE3, 0xFC, 0xE2, 0x3D, 0x4E, 0x5F, 0x0D, 0x44, 0xE5, 0x04, 0x1B, 0x85, 0x6E, 0x0D, 0x77, 0x3E, 0xB5, 0x4D, 0xD3, 0x2A, 0x31, 0x9A, 0xF3, 0x49, 0x89, 0xE2, 0xE5, 0x42, 0x7B, 0xE2, 0x0B, 0x70, 0x2A, 0x78, 0x75, 0xCD, 0xC9, 0xDC, 0xE3, 0xFE, 0xA5, 0x35, 0xF1, 0x05, 0xC9, 0xBE, 0xE1, 0xD5, 0x8F, 0x8A, 0xB7, 0xBB, 0xBF, 0x32, 0xD4, 0x97, 0xEF, 0x77, 0xE4, 0xEA, 0xFB, 0x59, 0xF7, 0x6D, 0xA6, 0xEB, 0x16, 0xF2, 0x47, 0xD1, 0x0C, 0x9A, 0x85, 0xD2, 0xDB, 0x16, 0x9B, 0x49, 0x73, 0xE5, 0x15, 0xF3, 0x6A, 0x62, 0x33, 0xA8, 0x0B, 0x72, 0xAF, 0xD6, 0x14, 0xCF, 0xF2, 0xFF, 0xA1, 0xFF, 0x55, 0x1A, 0xEA, 0x33, 0x53, 0x9F, 0x51, 0xF1, 0xCC, 0xAD, 0x5A, 0x77, 0x81, 0xF5, 0xC7, 0x21, 0x5C, 0xB7, 0x80, 0xBB, 0xD0, 0x5A, 0xAC, 0xB5, 0x12, 0x02, 0xF4, 0x7C, 0xB2, 0x5D, 0x1E, 0x42, 0xF9, 0x49, 0x5C, 0x05, 0x5A, 0x2D, 0xBE, 0x12, 0x26, 0xF0, 0x57, 0x90, 0xBD, 0x2E, 0xA0, 0x72, 0x91, 0xEF, 0x2D, 0xED, 0x57, 0xA6, 0xC8, 0x63, 0xAC, 0x36, 0xB0, 0x2A, 0xD4, 0x65, 0xBD, 0x66, 0x80, 0xBB, 0xDA, 0xFE, 0x99, 0x46, 0x24, 0xC8, 0xB0, 0x7E, 0x47, 0x5E, 0x90, 0x4C, 0xB0, 0x74, 0x23, 0xC7, 0x2B, 0xD4, 0xB4, 0xF9, 0xC4, 0x1A, 0x70, 0x36, 0xD5, 0x83, 0xA8, 0x86, 0x9C, 0x82, 0x42, 0xC8, 0x7F, 0x79, 0xE3, 0x7C, 0x7B, 0x49, 0x31, 0x3F, 0xCC, 0xB3, 0x8A, 0xF8, 0x21, 0x80, 0x5C, 0x53, 0x88, 0x56, 0xD1, 0x34, 0x87, 0x39, 0x84, 0x51, 0xFC, 0xCC, 0x66, 0x02, 0x51, 0x25, 0x93, 0x5A, 0x1E, 0x21, 0xD4, 0xCA, 0x46, 0xDA, 0x07, 0xA2, 0x1D, 0x2C, 0xA1, 0x39, 0x13, 0x03, 0x90, 0x75, 0xA0, 0x01, 0x3B, 0x2B, 0x59, 0xE5, 0xFB, 0x10, 0x2B, 0x96, 0xCD, 0xF3, 0x1C, 0xC4, 0x58, 0xB2, 0xEB, 0x2E, 0x0D, 0xD8, 0x27, 0xD9, 0x1B, 0xFB, 0x3A, 0xDC, 0x5A, 0xBE, 0xCC, 0xFA, 0x7F, 0x38, 0x47, 0x71, 0x9F, 0x31, 0x8B, 0xA0, 0x01, 0x26, 0x7A, 0x3B, 0xD1, 0x0D, 0x56, 0xD3, 0xDE, 0x13, 0x67, 0xC1, 0x0F, 0xBE, 0x6B, 0xD5, 0xAF, 0x01, 0x8D, 0xCF, 0x24, 0xF5, 0x1A, 0x30, 0xCA, 0x23, 0x4A, 0xDD, 0x0D, 0x06, 0x3B, 0x97, 0x61, 0x74, 0x60, 0xB7, 0xDD, 0x25, 0xEC, 0x3D, 0xB0, 0xC2, 0x7A, 0x35, 0x1E, 0x02, 0xDC, 0x67, 0xAC, 0x23, 0x66, 0x82, 0x65, 0x96, 0xD6, 0xFF, 0xB5, 0xBD, 0x97, 0xCE, 0x27, 0x47, 0x83, 0x5B, 0xFD, 0x7C, 0x54, 0x04, 0xFA, 0xC0, 0xDB, 0x0F, 0x79, 0x8B, 0xEE, 0x76, 0xE7, 0xA2, 0x7F, 0x23, 0x6F, 0x9C, 0xA7, 0xA9, 0xEA, 0xE1, 0xEF, 0x0E, 0xAB, 0xB1, 0x5B, 0x30, 0x66, 0xFD, 0x12, 0x3F, 0x02, 0xE9, 0xAC, 0x9D, 0x09, 0x3F, 0x28, 0xC8, 0xF2, 0x3C, 0x71, 0x07, 0xDC, 0x42, 0xDF, 0x44, 0xBA, 0x82, 0x4A, 0xEF, 0x87, 0xDD, 0x9E, 0x49, 0x11, 0x1E, 0xEA, 0x8E, 0x6D, 0xA9, 0xEB, 0x5D, 0x16, 0xB7, 0x4D, 0xCE, 0xEA, 0x70, 0xEC, 0x6E, 0x7A, 0x94, 0xBF, 0xC5, 0xEE, 0x5B, 0xBD, 0x63, 0xE9, 0x4E, 0xCB, 0x44, 0xE3, 0xB5, 0xAA, 0x7B, 0xE6, 0xFF, 0xD3, 0x4B, 0x44, 0x9F, 0xCC, 0x5E, 0x69, 0x1E, 0x2A, 0xC6, 0x9B, 0x4D, 0x20, 0xF7, 0x03, 0x81, 0xDE, 0x33, 0x3B, 0x90, 0x34, 0x0F, 0xF7, 0x25, 0x6D, 0xAA, 0x8C, 0x0B, 0xCE, 0x8B, 0x5B, 0x72, 0x72, 0x7E, 0x39, 0x70, 0x1A, 0x8F, 0x14, 0xBE, 0xB2, 0xBE, 0x55, 0x37, 0x58, 0x3E, 0x48, 0xDB, 0x57, 0x33, 0x83, 0x93, 0x6D, 0xFE, 0x42, 0x77, 0x53, 0x12, 0xB0, 0x70, 0x50, 0x93, 0xAC, 0xF8, 0xBA, 0x70, 0x11, 0xE9, 0x0D, 0x8E, 0xF2, 0x0A, 0x68, 0x3D, 0x9B, 0xED, 0xEF, 0x76, 0xAB, 0x79, 0x47, 0xAE, 0x8D, 0xD3, 0x8E, 0xC6, 0xEF, 0x05, 0xEF, 0xEC, 0x89, 0xFA, 0x37, 0xA5, 0xC5, 0x0C, 0x53, 0xED, 0x6A, 0xA6, 0x15, 0x75, 0xA6, 0x71, 0x25, 0xF7, 0x8C, 0x45, 0xA5, 0x6E, 0xB1, 0x54, 0x6E, 0xFE, 0x9B, 0xDC, 0xAF, 0xBC, 0x6F, 0x7E, 0x9B, 0x58, 0x07, 0x1E, 0x74, 0x5B, 0xDB, 0x52, 0x58, 0xB0, 0xC8, 0x65, 0x67, 0xE3, 0x9D, 0xA2, 0x41, 0xA7, 0xB4, 0x7A, 0xA0, 0xCC, 0xD3, 0xFE, 0x52, 0xAD, 0x77, 0xE5, 0x15, 0xCB, 0xE1, 0x9A, 0x5D, 0x55, 0xB9, 0x94, 0x93, 0xD5, 0x65, 0x82, 0xF1, 0x94, 0xC3, 0x5A, 0x9D, 0x6C, 0x3B, 0xE5, 0x3E, 0xB9, 0x18, 0xE8, 0xA1, 0x3C, 0x24, 0x32, 0xA1, 0x50, 0xB7, 0xE9, 0x8D, 0x75, 0xA5, 0x6E, 0x2E, 0x44, 0xFD, 0x95, 0x0A, 0x33, 0xC7, 0x27, 0xB5, 0x06, 0x16, 0xCD, 0xCE, 0xB6, 0x46, 0x5A, 0xB5, 0xDA, 0x32, 0xA5, 0xBA, 0x91, 0xB7, 0x84, 0xD6, 0xAA, 0x5F, 0x2A, 0xC2, 0xE9, 0x63, 0x34, 0x43, 0xF2, 0xCF, 0xB4, 0x17, 0xC4, 0x73, 0x90, 0x4A, 0x3B, 0x43, 0xB8, 0x40, 0x32, 0xD7, 0xD9, 0xF5, 0xA3, 0x99, 0x8F, 0x9D, 0x0F, 0xD6, 0xB6, 0x57, 0x45, 0x38, 0x96, 0x98, 0x06, 0xB9, 0xD1, 0x76, 0xD3, 0x8C, 0x32, 0x7E, 0x0D, 0xC3, 0xC2, 0x30, 0x55, 0x78, 0xCF, 0xB2, 0x4F, 0x67, 0x2E, 0x79, 0xCE, 0xB0, 0x25, 0x6F, 0x28, 0xE7, 0x58, 0x2E, 0x23, 0xD6, 0x83, 0x62, 0xCB, 0x22, 0xC2, 0x03, 0x12, 0xB9, 0x38, 0x98, 0xDC, 0xF8, 0x57, 0x9D, 0x77, 0x56, 0x1F, 0x10, 0x2E, 0x71, 0x8C, 0xAA, 0xCE, 0x16, 0xDD, 0xB3, 0x9F, 0x6F, 0xE0, 0x4A, 0x6A, 0x19, 0xAF, 0x74, 0xDF, 0xA4, 0xD1, 0x96, 0xAE, 0x5A, 0x7F, 0xD9, 0x67, 0x86, 0x88, 0xD4, 0x28, 0x1F, 0x30, 0x7A, 0x89, 0x2D, 0x60, 0x03, 0xA3, 0x9F, 0x28, 0x81, 0xA2, 0x5C, 0xC4, 0xD5, 0xD1, 0xB2, 0x69, 0x4E, 0xFB, 0x0C, 0x15, 0xB2, 0xC1, 0x45, 0x27, 0xF4, 0x5D, 0xF2, 0x0A, 0xBB, 0x5F, 0xBA, 0x1B, 0xF2, 0x47, 0x56, 0xB3, 0x74, 0x0B, 0xE4, 0xBF, 0x69, 0x6A, 0xED, 0x4C, 0x45, 0xFB, 0x7F, 0xBB, 0xF6, 0x02, 0x3A, 0xAB, 0x59, 0xC4, 0x77, 0xB0, 0xDD, 0x2A, 0x9B, 0x58, 0x09, 0x8D, 0x77, 0x29, 0xD2, 0xBF, 0x00, 0xAC, 0x9C, 0x87, 0x75, 0x7B, 0x40, 0x2B, 0x47, 0x40, 0x47, 0x05, 0x5B, 0x17, 0x5D, 0xD3, 0x9C, 0x02, 0x99, 0x76, 0xDE, 0xDA, 0x29, 0xC0, 0x25, 0xC6, 0x90, 0x36, 0x09, 0x30, 0x59, 0x35, 0x69, 0x5C, 0xC1, 0x42, 0xAB, 0x56, 0x32, 0x1B, 0x5C, 0x6E, 0xD5, 0x46, 0x7C, 0x01, 0xFF, 0x4F, 0x98, 0x3F, 0x00, 0x67, 0xD6, 0x86, 0x6D, 0xB0, 0x68, 0x6C, 0xDB, 0xB6, 0x6D, 0xDB, 0xB6, 0x6D, 0xDB, 0xB6, 0x6D, 0xDB, 0x76, 0x32, 0xB1, 0x35, 0xB1, 0x3D, 0xB1, 0x35, 0xC9, 0xC4, 0xE7, 0xFD, 0xBF, 0x3A, 0xDB, 0x7A, 0x56, 0x69, 0x95, 0xDD, 0x7D, 0xF7, 0x35, 0x0C, 0x04, 0x04, 0xC4, 0x03, 0xE4, 0x06, 0xD4, 0x00, 0x74, 0x0E, 0x4C, 0x02, 0xAC, 0x07, 0x9C, 0x01, 0xBC, 0x00, 0x02, 0x0B, 0x22, 0x0E, 0x12, 0x08, 0xD2, 0x0D, 0xF2, 0x0C, 0xCA, 0x00, 0x6A, 0x05, 0x5A, 0x0A, 0xBA, 0x0B, 0x86, 0x05, 0xA6, 0x02, 0x16, 0x0F, 0x36, 0x09, 0x0E, 0x02, 0xCE, 0x0F, 0xEE, 0x05, 0xDE, 0x02, 0x7E, 0x03, 0x41, 0x05, 0x61, 0x0A, 0x51, 0x00, 0xB1, 0x09, 0x89, 0x06, 0xA9, 0x08, 0x19, 0x03, 0x39, 0x06, 0x05, 0x04, 0xC5, 0x0B, 0xE5, 0x01, 0xD5, 0x0C, 0x75, 0x03, 0x4D, 0x05, 0x6D, 0x0A, 0x5D, 0x08, 0xBD, 0x05, 0x83, 0x0E, 0xA3, 0x0C, 0x13, 0x07, 0x33, 0x09, 0x0B, 0x0A, 0x2B, 0x08, 0xEB, 0x0B, 0xDB, 0x01, 0xFB, 0x08, 0xC7, 0x00, 0x67, 0x03, 0x57, 0x0E, 0x77, 0x08, 0x8F, 0x0F, 0xAF, 0x0D, 0x9F, 0x0E, 0xBF, 0x88, 0x00, 0x8F, 0x20, 0x8D, 0x10, 0x8E, 0x30, 0x84, 0xF0, 0x8D, 0xC8, 0x83, 0xE8, 0x81, 0xD8, 0x82, 0x78, 0x87, 0x44, 0x8B, 0x64, 0x89, 0x54, 0x86, 0x74, 0x80, 0x8C, 0x8F, 0xAC, 0x8D, 0x9C, 0x81, 0xBC, 0x84, 0x82, 0x88, 0x22, 0x87, 0x12, 0x85, 0x32, 0x86, 0x0A, 0x82, 0x2A, 0x88, 0xEA, 0x87, 0xDA, 0x8D, 0xFA, 0x82, 0xC6, 0x82, 0xE6, 0x88, 0x56, 0x87, 0x76, 0x89, 0x4E, 0x89, 0x6E, 0x86, 0x5E, 0x8C, 0xBE, 0x87, 0x81, 0x8B, 0xA1, 0x8D, 0x91, 0x81, 0xB1, 0x8C, 0x89, 0x8C, 0xA9, 0x80, 0x19, 0x87, 0x39, 0x85, 0x05, 0x89, 0x25, 0x86, 0x15, 0x82, 0x35, 0x80, 0xF5, 0x85, 0xCD, 0x8B, 0xED, 0x85, 0xDD, 0x81, 0xFD, 0x8C, 0xC3, 0x82, 0xE3, 0x84, 0xD3, 0x80, 0x73, 0x8D, 0x4B, 0x83, 0x6B, 0x85, 0x5B, 0x81, 0x7B, 0x8C, 0x47, 0x82, 0x67, 0x84, 0x57, 0x80, 0xB7, 0x8B, 0x8F, 0x8B, 0xAF, 0x8D, 0x9F, 0x85, 0xBF, 0x46, 0x80, 0x46, 0xA0, 0x4A, 0x90, 0x4C, 0xB0, 0x40, 0x88, 0x48, 0x28, 0x4F, 0x18, 0x47, 0x38, 0x43, 0x04, 0x43, 0x24, 0x45, 0x14, 0x49, 0x34, 0x4E, 0x0C, 0x4E, 0x2C, 0x46, 0x1C, 0x4A, 0x3C, 0x4C, 0x02, 0x4C, 0x22, 0x44, 0x12, 0x44, 0x32, 0x40, 0xF2, 0x4D, 0xCA, 0x4F, 0xEA, 0x4F, 0xDA, 0x47, 0xFA, 0x49, 0xC6, 0x4B, 0xE6, 0x4B, 0xD6, 0x43, 0xF6, 0x4E, 0xCE, 0x43, 0xEE, 0x4D, 0xDE, 0x4D, 0xFE, 0x46, 0xC1, 0x4D, 0xE1, 0x4D, 0xD1, 0x4D, 0xF1, 0x46, 0xC9, 0x4D, 0xE9, 0x4D, 0xD9, 0x4D, 0xF9, 0x46, 0xC5, 0x43, 0xE5, 0x43, 0xD5, 0x43, 0xF5, 0x41, 0xCD, 0x4B, 0xED, 0x47, 0xDD, 0x47, 0xFD, 0x45, 0xC3, 0x4F, 0x13, 0x40, 0x33, 0x40, 0x0B, 0x44, 0x2B, 0x4C, 0x1B, 0x4C, 0x3B, 0x4C, 0x07, 0x4A, 0x27, 0x46, 0x17, 0x4E, 0x37, 0x4E, 0x0F, 0x45, 0x2F, 0x4D, 0x1F, 0x43, 0x3F, 0xC3, 0x00, 0xC7, 0xA0, 0xC0, 0x90, 0xC8, 0xB0, 0xC8, 0x88, 0xC2, 0xA8, 0xCA, 0x98, 0xCE, 0xB8, 0xCE, 0x84, 0xC5, 0xA4, 0xC3, 0x94, 0xC7, 0xB4, 0xCB, 0x4C, 0xC8, 0x6C, 0xCC, 0x5C, 0xCA, 0x7C, 0xC2, 0x42, 0xC9, 0x62, 0xC5, 0x52, 0xC3, 0x72, 0xC3, 0xCA, 0xC8, 0xEA, 0xCC, 0xDA, 0xCA, 0xFA, 0x97, 0x8D, 0x8B, 0xCD, 0x87, 0xAD, 0x8F, 0xED, 0x87, 0x5D, 0x84, 0x3D, 0x8C, 0x7D, 0x82, 0x03, 0x86, 0x43, 0x8E, 0x23, 0x91, 0x63, 0x89, 0x13, 0x9D, 0x53, 0x8B, 0x33, 0x97, 0x73, 0x9F, 0x8B, 0x84, 0xCB, 0x9C, 0xAB, 0x8A, 0xEB, 0x9A, 0x9B, 0x91, 0xDB, 0x95, 0xBB, 0x83, 0xFB, 0x9D, 0x47, 0x80, 0x27, 0x98, 0x67, 0x8C, 0x17, 0x9A, 0x57, 0x9E, 0x37, 0x99, 0x77, 0x95, 0x0F, 0x9B, 0x4F, 0x9F, 0xAF, 0x98, 0xEF, 0x94, 0x9F, 0x86, 0xDF, 0x81, 0xBF, 0x95, 0xFF, 0x55, 0x80, 0x4F, 0x20, 0x48, 0x60, 0x4C, 0x10, 0x46, 0x50, 0x51, 0x30, 0x55, 0x70, 0x43, 0x08, 0x5F, 0xC8, 0x44, 0xA8, 0x52, 0xE8, 0x4A, 0x98, 0x49, 0xD8, 0x4D, 0xB8, 0x5B, 0xF8, 0x4B, 0x44, 0x44, 0x24, 0x42, 0x64, 0x46, 0x14, 0x51, 0x54, 0x55, 0x34, 0x53, 0x74, 0x5B, 0x8C, 0x50, 0xCC, 0x54, 0xAC, 0x52, 0xEC, 0x4A, 0x9C, 0x51, 0xDC, 0x55, 0xBC, 0x53, 0xFC, 0x43, 0x42, 0x40, 0x22, 0x44, 0x62, 0x5C, 0x12, 0x5A, 0x52, 0x5E, 0x32, 0x49, 0x72, 0x59, 0x0A, 0x53, 0x4A, 0x47, 0x2A, 0x5F, 0xEA, 0x50, 0x9A, 0x4C, 0xDA, 0x52, 0xBA, 0x46, 0xFA, 0x46, 0x86, 0x49, 0xC6, 0x55, 0xA6, 0x5D, 0xE6, 0x9F, 0x2C, 0xAF, 0x6C, 0x80, 0xEC, 0xA0, 0x1C, 0xA8, 0x9C, 0xB8, 0x5C, 0x94, 0xDC, 0xB4, 0x3C, 0xBC, 0xBC, 0xA2, 0x7C, 0xB2, 0xFC, 0xB2, 0x02, 0x86, 0x82, 0x96, 0x42, 0x8E, 0xC2, 0x8E, 0x22, 0x81, 0xA2, 0x91, 0x62, 0x89, 0xE2, 0x1F, 0x25, 0x72, 0x25, 0x4B, 0xA5, 0x2A, 0xA5, 0x4B, 0x65, 0x3A, 0x65, 0x7B, 0xE5, 0x46, 0xE5, 0x7B, 0x15, 0x66, 0x15, 0x57, 0x95, 0x36, 0x95, 0xBF, 0xAA, 0x1C, 0xAA, 0x9E, 0xAA, 0x5D, 0xAA, 0x6F, 0x6A, 0x3C, 0x6A, 0xBE, 0x6A, 0x7D, 0x6A, 0x5F, 0xEA, 0x02, 0xEA, 0x01, 0xEA, 0x03, 0x1A, 0x40, 0x1A, 0x42, 0x1A, 0xC1, 0x1A, 0xC3, 0x9A, 0x20, 0x9A, 0xA2, 0x9A, 0xA1, 0x9A, 0x23, 0x5A, 0x60, 0x5A, 0x62, 0x5A, 0xE1, 0x5A, 0x63, 0xDA, 0xE0, 0xDA, 0x12, 0xDA, 0x11, 0xDA, 0xE3, 0x3A, 0x10, 0x3A, 0x12, 0x3A, 0x11, 0x3A, 0x13, 0xBA, 0x90, 0xBA, 0x92, 0xBA, 0x91, 0xBA, 0x13, 0x7A, 0x90, 0x7A, 0x92, 0x7A, 0x91, 0x7A, 0xE3, 0xFA, 0x10, 0xFA, 0x12, 0xFA, 0x11, 0xFA, 0xE3, 0x06, 0x10, 0x06, 0xE2, 0x06, 0xE1, 0x06, 0x63, 0x86, 0x60, 0x86, 0x62, 0x86, 0xA1, 0x86, 0x23, 0x46, 0xA0, 0x46, 0x22, 0x46, 0x21, 0x46, 0x43, 0xC6, 0x40, 0xC6, 0x42, 0xC6, 0x81, 0xC6, 0x03, 0xC6, 0xDF, 0x26, 0xFC, 0x26, 0x7E, 0x26, 0x7D, 0x26, 0x1F, 0xA6, 0x3C, 0xA6, 0xDE, 0xA6, 0x5D, 0xA6, 0xAF, 0x66, 0x9C, 0x66, 0x1E, 0x66, 0xED, 0x66, 0xCF, 0xE6, 0xAC, 0xE6, 0xCE, 0xE6, 0x4D, 0xE6, 0x77, 0x16, 0x0C, 0x16, 0xF6, 0x16, 0x75, 0x16, 0x97, 0x96, 0xD4, 0x96, 0x56, 0x96, 0x15, 0x96, 0x27, 0x56, 0xA4, 0x56, 0x26, 0x56, 0x45, 0x56, 0xFB, 0xD6, 0xF8, 0xD6, 0xBA, 0xD6, 0xD9, 0xD6, 0x1B, 0x36, 0x18, 0x36, 0x6A, 0x36, 0x29, 0x36, 0x0B, 0xB6, 0x08, 0xB6, 0x72, 0xB6, 0x31, 0xB6, 0x13, 0x76, 0xE0, 0x76, 0xA2, 0x76, 0xC1, 0x76, 0xFD, 0x76, 0x9F, 0xF6, 0xDC, 0xF6, 0x9E, 0xF6, 0x6D, 0xF6, 0x8F, 0x0E, 0x8C, 0x0E, 0xF6, 0x0E, 0x35, 0x0E, 0x67, 0x8E, 0x64, 0x8E, 0x26, 0x8E, 0x85, 0x8E, 0x3B, 0x4E, 0xD8, 0x4E, 0x1A, 0x4E, 0xA9, 0x4E, 0x0B, 0xCE, 0xF0, 0xCE, 0x32, 0xCE, 0x91, 0xCE, 0xA3, 0x2E, 0x40, 0x2E, 0xFC, 0x2E, 0x3E, 0x2E, 0x1D, 0x2E, 0x4F, 0xAE, 0x8C, 0xAE, 0x76, 0xAE, 0x55, 0xAE, 0x27, 0x6E, 0xC4, 0x6E, 0x06, 0x6E, 0x39, 0x6E, 0x6B, 0xEE, 0x28, 0xEE, 0x8A, 0xEE, 0xB1, 0xEE, 0x13, 0x1E, 0xA0, 0x1E, 0x82, 0x1E, 0xBE, 0x1E, 0x9D, 0x1E, 0x4F, 0x9E, 0x8C, 0x9E, 0x36, 0x9E, 0x15, 0x9E, 0x47, 0x5E, 0x04, 0x5E, 0xDA, 0x5E, 0xE9, 0x5E, 0x0B, 0xDE, 0x70, 0xDE, 0x92, 0xDE, 0xA1, 0xDE, 0xFD, 0xDE, 0xEF, 0x3E, 0xEC, 0x3E, 0x4E, 0x3E, 0xB5, 0x3E, 0x67, 0xBE, 0x24, 0xBE, 0xFA, 0xBE, 0x59, 0xBE, 0xCB, 0x7E, 0x08, 0x7E, 0xD2, 0x7E, 0x61, 0x7E, 0x03, 0x7E, 0xEF, 0xFE, 0xEC, 0xFE, 0x8E, 0xFE, 0x35, 0xFE, 0x27, 0x01, 0x84, 0x01, 0x3A, 0x01, 0xE9, 0x01, 0xBF, 0x03, 0x61, 0x02, 0xC5, 0x02, 0x03, 0x02, 0xBB, 0x03, 0x9F, 0x82, 0x18, 0x82, 0xAC, 0x82, 0x4A, 0x83, 0x76, 0x83, 0xB1, 0x82, 0x55, 0x82, 0xE3, 0x83, 0x27, 0x43, 0x40, 0x42, 0xF8, 0x43, 0xBC, 0x42, 0x5A, 0x43, 0x6E, 0x43, 0xA9, 0x43, 0xCD, 0x42, 0x0B, 0x43, 0xB7, 0xC2, 0xD0, 0xC3, 0x94, 0xC2, 0x62, 0xC3, 0xC6, 0xC3, 0x81, 0xC3, 0xF9, 0xC3, 0xBD, 0xC2, 0x5B, 0xC3, 0xEF, 0x22, 0x68, 0x22, 0x2C, 0x22, 0x8A, 0x23, 0x76, 0x23, 0xB1, 0x22, 0xD5, 0x22, 0x93, 0x22, 0x67, 0xA2, 0x20, 0xA3, 0x44, 0xA3, 0x02, 0xA3, 0x7A, 0xA2, 0x5E, 0xA2, 0x59, 0xA2, 0x1D, 0xA2, 0x6B, 0xA2, 0x4F, 0x63, 0x48, 0x62, 0x0C, 0x63, 0x72, 0x63, 0xD6, 0x63, 0x51, 0x63, 0x95, 0x62, 0xE3, 0x62, 0x27, 0xE3, 0xC0, 0xE3, 0x84, 0xE3, 0x02, 0xE2, 0x7A, 0xE2, 0x5E, 0xE3, 0x59, 0xE3, 0x9D, 0xE2, 0xEB, 0xE3, 0x2F, 0x12, 0x28, 0x12, 0x4C, 0x13, 0x8A, 0x12, 0x76, 0x13, 0x71, 0x12, 0x35, 0x13, 0xD3, 0x12, 0x17, 0x93, 0x10, 0x92, 0x64, 0x93, 0xA2, 0x92, 0xC6, 0x93, 0x41, 0x93, 0x85, 0x92, 0x03, 0x92, 0x7B, 0x93, 0xFF, 0xA5, 0x70, 0xA4, 0xB8, 0xA6, 0x34, 0xA7, 0xDC, 0xA5, 0xD2, 0xA5, 0xDA, 0xA4, 0x56, 0xA5, 0x9E, 0xA6, 0x91, 0xA6, 0x19, 0xA7, 0x15, 0xA6, 0xED, 0xA6, 0xE3, 0xA6, 0x6B, 0xA7, 0x67, 0xA6, 0xAF, 0x66, 0xA0, 0x66, 0x28, 0x67, 0x24, 0x65, 0xCC, 0x67, 0xC2, 0x65, 0xCA, 0x66, 0x46, 0x67, 0x4E, 0x64, 0x41, 0x64, 0x89, 0x65, 0x85, 0x66, 0x0D, 0x65, 0x03, 0x65, 0x0B, 0x66, 0xFB, 0x67, 0xF7, 0x65, 0x7F, 0xE4, 0xF0, 0xE4, 0x78, 0xE7, 0x74, 0xE5, 0xBC, 0xE6, 0x72, 0xE4, 0xBA, 0xE7, 0xB6, 0xE5, 0x3E, 0xE7, 0xB1, 0xE6, 0xB9, 0xE4, 0xB5, 0xE4, 0x3D, 0xE4, 0x33, 0xE7, 0x3B, 0xE7, 0x37, 0xE5, 0xDF, 0x17, 0x30, 0x15, 0x38, 0x15, 0x34, 0x15, 0xDC, 0x15, 0x32, 0x15, 0x3A, 0x15, 0x36, 0x15, 0xDE, 0x17, 0x31, 0x15, 0x39, 0x17, 0x35, 0x17, 0x3D, 0x14, 0xB3, 0x14, 0xBB, 0x16, 0xB7, 0x16, 0x3F, 0x97, 0xB0, 0x97, 0xB8, 0x97, 0x74, 0x94, 0xBC, 0x96, 0x72, 0x95, 0x7A, 0x97, 0xF6, 0x94, 0x7E, 0x96, 0xF1, 0x97, 0x05, 0x94, 0x0D, 0x96, 0x03, 0x97, 0x8B, 0x94, 0x87, 0x95, 0x8F, 0x57, 0x40, 0x56, 0x48, 0x57, 0xC4, 0x56, 0xCC, 0x55, 0x22, 0x56, 0x2A, 0x57, 0xA6, 0x56, 0xAE, 0x56, 0x61, 0x56, 0x69, 0x57, 0xE5, 0x56, 0xED, 0x55, 0x13, 0x55, 0x9B, 0x56, 0x97, 0x57, 0x9F, 0xD7, 0xD0, 0xD4, 0xD8, 0xD7, 0x34, 0xD5, 0x3C, 0xD6, 0xB2, 0xD7, 0x7A, 0xD5, 0xF6, 0xD6, 0x7E, 0xD7, 0x09, 0xD7, 0x85, 0xD7, 0x4D, 0xD6, 0xC3, 0xD6, 0x2B, 0xD4, 0xA7, 0xD4, 0xAF, 0x36, 0x60, 0x37, 0xE8, 0x35, 0x14, 0x35, 0x1C, 0x37, 0x52, 0x35, 0xDA, 0x36, 0x36, 0x36, 0x3E, 0x35, 0x71, 0x36, 0xF9, 0x36, 0x0D, 0x36, 0x83, 0x35, 0x4B, 0x35, 0xC7, 0x35, 0x2F, 0xB6, 0xA0, 0xB7, 0xE8, 0xB4, 0x14, 0xB4, 0xFC, 0x69, 0xA5, 0x6A, 0xB5, 0x6F, 0x6D, 0x6E, 0x7D, 0x69, 0xE3, 0x6D, 0x0B, 0x6A, 0x1B, 0x6B, 0x87, 0x6D, 0x57, 0x6A, 0x4F, 0x6F, 0xDF, 0xEE, 0x20, 0xEA, 0x30, 0xEF, 0xA8, 0xED, 0x78, 0xE8, 0xE4, 0xE8, 0xF4, 0xEB, 0x1C, 0xEE, 0x82, 0xEA, 0x52, 0xE8, 0x4A, 0xEB, 0xDA, 0xEA, 0x26, 0xEA, 0xB6, 0xEC, 0xAE, 0xEF, 0x7E, 0xEE, 0xE1, 0xE9, 0x09, 0xEE, 0x99, 0xE8, 0x45, 0xE8, 0x55, 0xEF, 0xCD, 0xEB, 0xFD, 0xD3, 0x47, 0xD3, 0xE7, 0xDC, 0xD7, 0xD5, 0xF7, 0xF3, 0x4B, 0xF2, 0x57, 0xC2, 0xAF, 0xD5, 0x7E, 0xFC, 0x7E, 0xF3, 0xFE, 0xBA, 0xFE, 0xE7, 0x01, 0xBE, 0x81, 0xB0, 0x81, 0xD9, 0x41, 0xD4, 0x41, 0xDD, 0xC1, 0xD2, 0xC1, 0xCB, 0x21, 0x96, 0x21, 0xEF, 0xA1, 0xA1, 0x61, 0xA8, 0x61, 0xC5, 0xE1, 0xCC, 0xE1, 0xBD, 0x11, 0xF2, 0x11, 0xBB, 0x91, 0xB6, 0x91, 0x8F, 0x51, 0x91, 0xD1, 0xE8, 0xD1, 0x85, 0x31, 0xCC, 0x31, 0x83, 0xB1, 0xF2, 0xB1, 0xEB, 0x71, 0x96, 0x71, 0xEF, 0xF1, 0xC1, 0x09, 0x88, 0x09, 0xF9, 0x89, 0xB4, 0x89, 0xAD, 0x49, 0xE2, 0x49, 0xCB, 0xC9, 0x86, 0xC9, 0xE7, 0x29, 0xDE, 0xA9, 0xE0, 0xA9, 0x89, 0x69, 0x84, 0x69, 0xB5, 0xE9, 0x9C, 0xE9, 0x83, 0x19, 0xCA, 0x19, 0xFB, 0x99, 0xD6, 0x99, 0xB7, 0x59, 0xC1, 0xD9, 0xF0, 0xD9, 0x99, 0x39, 0xA4, 0x39, 0x8D, 0xB9, 0xBC, 0xB9, 0xC3, 0x79, 0xCA, 0x79, 0xFB, 0xF9, 0x96, 0xF9, 0xD7, 0xDF, 0xFC, 0xBF, 0x43, 0x7E, 0x4F, 0x2C, 0xC0, 0x2D, 0xA8, 0x2C, 0x64, 0x2E, 0xEC, 0x2C, 0x12, 0x2F, 0x9A, 0x2F, 0xD6, 0x2C, 0xDE, 0x2D, 0xB1, 0x2D, 0x79, 0x2D, 0xFD, 0x5A, 0x06, 0x5E, 0x96, 0x58, 0x8E, 0x59, 0xFE, 0xBD, 0x82, 0xBA, 0xA2, 0xB9, 0x92, 0xBB, 0x72, 0xB0, 0x4A, 0xB6, 0x6A, 0xB5, 0x5A, 0xB7, 0x7A, 0xB7, 0xC6, 0xBA, 0xE6, 0xB9, 0xD6, 0xBB, 0xF6, 0xBD, 0x2E, 0xB2, 0x1E, 0xBE, 0x3E, 0xB5, 0x01, 0xB7, 0xA1, 0xB8, 0x91, 0xB2, 0xB1, 0xBA, 0x89, 0xB5, 0xA9, 0xBB, 0x59, 0xB0, 0x79, 0xB8, 0x45, 0xB6, 0x65, 0xB9, 0x55, 0xBD, 0x75, 0xBD, 0xCD, 0xB8, 0xED, 0xBC, 0xDD, 0xBA, 0xFD, 0xB2, 0xC3, 0xB5, 0xE3, 0xB3, 0xD3, 0xB7, 0xF3, 0xBD, 0x2B, 0xB4, 0x1B, 0xB2, 0x3B, 0xBA, 0x07, 0xB1, 0x27, 0xB9, 0x17, 0xBD, 0x37, 0xB3, 0x0F, 0xB7, 0xAF, 0xB0, 0x9F, 0xB8, 0xBF, 0x70, 0x80, 0x7C, 0xA0, 0x72, 0x90, 0x76, 0xB0, 0x7A, 0x88, 0x7E, 0xA8, 0x71, 0x98, 0x79, 0xB8, 0x71, 0x84, 0x7D, 0xA4, 0x7D, 0x94, 0x73, 0xB4, 0xF5, 0x07, 0xF7, 0x8F, 0xEE, 0x9F, 0xDC, 0x3F, 0xDB, 0xC7, 0xB8, 0xC7, 0xBA, 0xC7, 0xB9, 0xC7, 0xDB, 0x27, 0xB8, 0x27, 0xBA, 0x27, 0xB9, 0x27, 0x5B, 0xA7, 0x38, 0xA7, 0xDA, 0xA7, 0xD9, 0xA7, 0x1B, 0x67, 0x98, 0x67, 0x9A, 0x67, 0x19, 0x67, 0xAB, 0xE7, 0x68, 0xE7, 0xAA, 0xE7, 0x29, 0xE7, 0x8B, 0x17, 0x88, 0x17, 0x0A, 0x17, 0xF1, 0x17, 0x33, 0x97, 0x30, 0x97, 0x52, 0x97, 0x91, 0x97, 0x63, 0x57, 0xA0, 0x57, 0xC2, 0x57, 0x81, 0x57, 0xBF, 0xAE, 0x3E, 0xAE, 0xB9, 0xAF, 0x3D, 0xAF, 0xDB, 0xAF, 0x9F, 0x6E, 0x98, 0x6E, 0x1C, 0x6E, 0x6A, 0x6F, 0x2E, 0x6E, 0x29, 0x6E, 0x4D, 0x6F, 0x8B, 0x6F, 0xF7, 0xEE, 0x70, 0xEF, 0xB4, 0xEE, 0xD2, 0xEF, 0x96, 0xEE, 0x11, 0xEF, 0xE5, 0xEE, 0xA3, 0xEE, 0xC7, 0x1E, 0x40, 0x1E, 0x04, 0x1E, 0x7C, 0x1F, 0x3A, 0x1F, 0x9E, 0x1F, 0x99, 0x1E, 0xED, 0x1E, 0xAB, 0x1E, 0x8F, 0x9F, 0x88, 0x9F, 0xF4, 0x9F, 0xB2, 0x9E, 0x56, 0x9E, 0x91, 0x9E, 0xE5, 0x9E, 0xA3, 0x9E, 0x47, 0x9E, 0x7F, 0xFE, 0xF2, 0xFC, 0xF5, 0xF8, 0xDB, 0xFC, 0xF7, 0xFA, 0x85, 0xEA, 0xC5, 0xF4, 0xA5, 0xE0, 0x65, 0xF3, 0x15, 0xED, 0x55, 0xF1, 0x35, 0xE6, 0x75, 0xEC, 0xF5, 0xE7, 0x1F, 0xCF, 0x3F, 0xF7, 0x7F, 0x8D, 0xFF, 0x2E, 0xDF, 0xC8, 0xDE, 0x0C, 0xDF, 0xB2, 0xDF, 0x56, 0xDE, 0x11, 0xDE, 0xA5, 0xDE, 0x43, 0xDE, 0xFB, 0xDE, 0x5F, 0x3E, 0x98, 0x3E, 0x6C, 0x3E, 0xCA, 0x3E, 0x76, 0x3F, 0x31, 0x3F, 0x95, 0x3F, 0x63, 0x3E, 0x47, 0x3F, 0xBF, 0xBE, 0x38, 0xBF, 0x9C, 0xBE, 0xAA, 0xBF, 0xFE, 0x7C, 0xE3, 0x7D, 0xAB, 0x7F, 0x27, 0x7C, 0x4F, 0xFC, 0x00, 0x01, 0x9E, 0x08, 0x50, 0x18, 0xD0, 0x38, 0x30, 0x14, 0xB0, 0x34, 0x70, 0x2C, 0xF0, 0x1C, 0x08, 0x22, 0x88, 0x32, 0x48, 0x2A, 0xC8, 0x2A, 0x28, 0x06, 0xA8, 0x16, 0x68, 0x0E, 0xE8, 0x0E, 0x18, 0x01, 0x98, 0x11, 0x58, 0x31, 0xD8, 0x1F, 0x70, 0x72, 0x70, 0x4B, 0xF0, 0x6A, 0xF0, 0x2B, 0x08, 0x3A, 0x08, 0x07, 0x88, 0x26, 0x88, 0x47, 0x48, 0x36, 0x48, 0x0F, 0xC8, 0x4E, 0xC8, 0x37, 0x00, 0xF7, 0xFD, 0xA1, 0x06, 0xA0, 0x81, 0xA0, 0x45, 0xA0, 0xC3, 0xA0, 0xC7, 0x61, 0xA0, 0x60, 0xA4, 0x61, 0x62, 0x61, 0xE6, 0x60, 0x11, 0x61, 0x95, 0x61, 0x53, 0x60, 0x57, 0xE0, 0x30, 0xE0, 0xB4, 0xE0, 0xB2, 0xE1, 0xB6, 0x01, 0xCC, 0x37, 0x84, 0x2F, 0x82, 0x3F, 0x42, 0x20, 0x43, 0xB0, 0x40, 0xA8, 0x44, 0xB8, 0x40, 0xA4, 0x45, 0xB4, 0x47, 0x6C, 0x40, 0xBC, 0x47, 0x62, 0x41, 0x72, 0x43, 0x6A, 0x47, 0x7A, 0x45, 0xE6, 0x46, 0xF6, 0x41, 0xEE, 0x43, 0xFE, 0x46, 0x11, 0x42, 0x09, 0x46, 0x19, 0x41, 0x05, 0x47, 0x95, 0x40, 0x8D, 0x42, 0x9D, 0x46, 0x83, 0x45, 0x93, 0x47, 0x4B, 0x44, 0x5B, 0x40, 0x47, 0x41, 0x57, 0x43, 0x4F, 0x47, 0x5F, 0xC7, 0xC0, 0xC2, 0xD0, 0xC1, 0xC8, 0xC3, 0xD8, 0xC5, 0x24, 0xC4, 0x34, 0xC2, 0x2C, 0xC1, 0xFC, 0x83, 0x45, 0x8E, 0x65, 0x89, 0x55, 0x85, 0x75, 0x89, 0x4D, 0x8B, 0x6D, 0x8F, 0xDD, 0x80, 0x7D, 0x8F, 0xC3, 0x8C, 0xE3, 0x8A, 0xD3, 0x86, 0xF3, 0x82, 0xCB, 0x89, 0xEB, 0x8D, 0xDB, 0x83, 0xFB, 0x89, 0xC7, 0x8F, 0x17, 0x88, 0x37, 0x88, 0x0F, 0x82, 0x2F, 0x8A, 0x1F, 0x8E, 0x3F, 0x4E, 0x00, 0x45, 0x20, 0x4D, 0x10, 0x4B, 0x30, 0x4B, 0x08, 0x4F, 0xA8, 0x48, 0x98, 0x44, 0xB8, 0x44, 0x84, 0x4A, 0xA4, 0x46, 0x94, 0x41, 0xB4, 0x4E, 0x8C, 0x4D, 0xAC, 0x43, 0x9C, 0x4B, 0xBC, 0x4B, 0x42, 0x40, 0x62, 0x48, 0x52, 0x4C, 0x72, 0x44, 0x4A, 0x4A, 0x6A, 0x46, 0x5A, 0x41, 0x7A, 0x46, 0x46, 0x45, 0x66, 0x4D, 0x56, 0x4B, 0x76, 0x4D, 0x4E, 0x4F, 0xEE, 0x40, 0xDE, 0x48, 0xFE, 0x40, 0xC1, 0x42, 0xE1, 0x4A, 0xD1, 0x46, 0xF1, 0x42, 0xC9, 0x49, 0xE9, 0x45, 0xD9, 0x43, 0xF9, 0x41, 0xC5, 0x47, 0xE5, 0x4F, 0x35, 0x40, 0x0D, 0x44, 0x2D, 0x4C, 0x1D, 0x4A, 0x3D, 0x4A, 0x03, 0x41, 0x23, 0x49, 0x13, 0x45, 0x33, 0x4D, 0x0B, 0x4B, 0x2B, 0x47, 0x9B, 0x40, 0xFB, 0x9B, 0x0E, 0x99, 0x4E, 0x85, 0x2E, 0x95, 0x6E, 0x95, 0x1E, 0x83, 0x5E, 0x8B, 0x3E, 0x9B, 0x7E, 0x8B, 0x01, 0x8F, 0x41, 0x9F, 0xA1, 0x90, 0xE1, 0x80, 0x91, 0x98, 0xD1, 0x94, 0xB1, 0x8C, 0xF1, 0x84, 0x89, 0x92, 0xC9, 0x8A, 0xA9, 0x9A, 0xE9, 0x92, 0x99, 0x8E, 0xD9, 0x9E, 0xB9, 0x81, 0xF9, 0x9E, 0x85, 0x99, 0xC5, 0x85, 0xA5, 0x95, 0xE5, 0x99, 0x95, 0x83, 0xD5, 0x93, 0xB5, 0x8B, 0xF5, 0x8D, 0x8D, 0x87, 0xCD, 0x17, 0xC0, 0xF9, 0x2F, 0x76, 0x01, 0xF6, 0x00, 0xF6, 0x01, 0x0E, 0x20, 0x0E, 0x61, 0x8E, 0x60, 0x8E, 0x61, 0x4E, 0x10, 0x4E, 0x51, 0xCE, 0x50, 0xCE, 0x51, 0x2E, 0x30, 0x2E, 0x31, 0xAE, 0x30, 0xAE, 0x31, 0x6E, 0x70, 0x6E, 0x71, 0xEE, 0x70, 0xEE, 0x31, 0x1E, 0x70, 0x1E, 0x71, 0x9E, 0x70, 0x00, 0xE9, 0xC1, 0x79, 0xC5, 0x78, 0xC3, 0x78, 0x47, 0xF9, 0xC0, 0xF8, 0x44, 0xF9, 0x42, 0xF9, 0x46, 0xF8, 0x41, 0xF8, 0x45, 0xF8, 0x83, 0xF9, 0x87, 0x04, 0x80, 0x04, 0x04, 0x05, 0x02, 0x05, 0xFA, 0x05, 0xBE, 0x04, 0xF9, 0x04, 0xFD, 0x04, 0x7B, 0x05, 0xDF, 0x85, 0xB8, 0x85, 0xBC, 0x84, 0x3A, 0x85, 0x5E, 0x84, 0xD9, 0x01, 0xB4, 0x6F, 0x15, 0x7E, 0x14, 0x61, 0x16, 0x71, 0x12, 0x69, 0x14, 0xB9, 0x15, 0xA5, 0x17, 0xB5, 0x13, 0xAD, 0x15, 0xBD, 0x14, 0xA3, 0x16, 0xB3, 0x02, 0xF0, 0xFE, 0x54, 0x9C, 0x42, 0xDC, 0x5C, 0xBC, 0x4C, 0xFC, 0x8F, 0x04, 0x89, 0x84, 0xB1, 0x44, 0x91, 0xC4, 0xBE, 0x24, 0x81, 0xA4, 0xBE, 0x64, 0x9E, 0xE4, 0xB6, 0x14, 0x8E, 0x94, 0xB6, 0x54, 0x96, 0xD4, 0xBA, 0x34, 0xA6, 0xB4, 0x86, 0x74, 0xBA, 0xF4, 0x8A, 0x0C, 0xAA, 0x8C, 0x8A, 0x4C, 0xB2, 0xCC, 0x82, 0x2C, 0xA2, 0xAC, 0x82, 0x6C, 0xBC, 0xEC, 0xAC, 0x1C, 0xAC, 0x9C, 0x8C, 0x5C, 0xB4, 0xDC, 0xA4, 0x3C, 0x84, 0xBC, 0xB8, 0x7C, 0x98, 0xFC, 0x88, 0x02, 0x88, 0x82, 0xB0, 0x42, 0x90, 0x42, 0xBF, 0xC2, 0x97, 0x22, 0x9F, 0xA2, 0xAF, 0x62, 0x8F, 0xE2, 0x9B, 0x12, 0xA7, 0x92, 0x87, 0x52, 0xBB, 0xD2, 0xB3, 0x32, 0xAB, 0xB2, 0xB3, 0x72, 0x93, 0xF2, 0x9D, 0x0A, 0x83, 0x8A, 0x9D, 0x4A, 0xAD, 0xCA, 0xA5, 0x2A, 0xB5, 0xAA, 0xA5, 0x6A, 0x85, 0xEA, 0x89, 0x1A, 0x99, 0x9A, 0x89, 0x5A, 0xB1, 0xDA, 0x81, 0x3A, 0x81, 0xBA, 0xBE, 0x7A, 0x9E, 0xFA, 0x96, 0x06, 0xB6, 0x86, 0x96, 0x46, 0x86, 0xC6, 0xAA, 0x26, 0x9A, 0xA6, 0x8A, 0x66, 0xB2, 0xE6, 0x82, 0x16, 0x82, 0x96, 0xBC, 0x56, 0xAC, 0xD6, 0xB4, 0x36, 0xB4, 0xB6, 0x24, 0x80, 0xFB, 0xA3, 0x3A, 0xA0, 0x3A, 0xC2, 0x3A, 0x41, 0x3A, 0x03, 0x3A, 0x5F, 0xBA, 0x7C, 0xBA, 0x3E, 0xBA, 0xDD, 0xBA, 0xAF, 0x7A, 0x1C, 0x7A, 0x6E, 0x7A, 0xAD, 0x7A, 0x0F, 0xFA, 0x4C, 0xFA, 0x0E, 0xFA, 0xF5, 0xFA, 0x57, 0x06, 0x34, 0x06, 0x56, 0x06, 0x95, 0x06, 0x27, 0x86, 0x64, 0x86, 0x26, 0x86, 0x45, 0x86, 0xFB, 0x46, 0xF8, 0x46, 0x7A, 0x46, 0x39, 0x46, 0x1B, 0xC6, 0x98, 0xC6, 0xEA, 0xC6, 0xA9, 0xC6, 0x4B, 0x26, 0x48, 0x26, 0x0A, 0x26, 0xF1, 0x26, 0x33, 0xA6, 0xD0, 0xA6, 0x52, 0xA6, 0x11, 0xA6, 0xA3, 0x66, 0x20, 0x66, 0x42, 0x66, 0x81, 0x66, 0xBF, 0xCC, 0x3E, 0xCC, 0xB9, 0xCD, 0x3D, 0xCD, 0xDB, 0xCD, 0x9F, 0x2D, 0x58, 0x2C, 0x9C, 0x2C, 0x1A, 0x2C, 0xAE, 0x2D, 0x69, 0xFE, 0x57, 0xF2, 0x1B, 0x5B, 0x15, 0x5A, 0xED, 0x5A, 0xE3, 0x59, 0xEB, 0x58, 0x67, 0x59, 0xAF, 0xD9, 0xA0, 0xDB, 0xA8, 0xDA, 0x24, 0xDB, 0xFC, 0xFE, 0xFF, 0x93, 0x7F, 0xCA, 0x0E, 0xD2, 0x4E, 0xC2, 0x2E, 0xCC, 0x6E, 0xD8, 0x1E, 0xD8, 0x5E, 0xD0, 0xDE, 0xDF, 0xBE, 0xCF, 0xFE, 0xDD, 0x81, 0xDB, 0xC1, 0xD3, 0xA1, 0xC3, 0xE1, 0xD9, 0x91, 0xD5, 0xD1, 0xD9, 0xB1, 0xC9, 0xF1, 0xD6, 0x89, 0xDE, 0xC9, 0xCE, 0xA9, 0xC6, 0xE9, 0xC2, 0x99, 0xCA, 0xD9, 0xD2, 0xB9, 0xDC, 0xF9, 0xD8, 0x85, 0xD4, 0xC5, 0xC4, 0xA5, 0xD8, 0xE5, 0xC0, 0x95, 0xD0, 0x55, 0xDF, 0x35, 0xCF, 0x75, 0xC7, 0x0D, 0xD7, 0x4D, 0xC7, 0x2D, 0xDB, 0x6D, 0xC3, 0x1D, 0xD3, 0x5D, 0xC3, 0x3D, 0xC3, 0x7D, 0xD5, 0x03, 0xCD, 0x43, 0xCD, 0x23, 0xD5, 0x63, 0xD9, 0x13, 0xC5, 0x53, 0xC5, 0x33, 0xD9, 0x73, 0xD1, 0x0B, 0xD9, 0x4B, 0xD9, 0x2B, 0x09, 0x40, 0x7D, 0x24, 0x6F, 0x25, 0xEF, 0x24, 0xEF, 0x05, 0x1F, 0x24, 0x1F, 0x25, 0x9F, 0x24, 0x9F, 0x45, 0x5F, 0x64, 0x5F, 0x65, 0xDF, 0x14, 0xDF, 0x25, 0x3F, 0x14, 0x3F, 0x55, 0xBF, 0x54, 0xBF, 0x15, 0x7F, 0x74, 0x7F, 0x75, 0xFF, 0x0C, 0xFF, 0xF5, 0x00, 0xAC, 0x00, 0xED, 0x80, 0x9C, 0x80, 0xED, 0x40, 0xBC, 0x40, 0xFD, 0xC0, 0x82, 0xC0, 0xFD, 0x20, 0xA2, 0x20, 0xE3, 0xA0, 0x92, 0xA0, 0xE3, 0x60, 0xF2, 0x60, 0x8B, 0xE0, 0xCA, 0xE0, 0x8B, 0x10, 0x9A, 0x10, 0xDB, 0x90, 0x7A, 0x00, 0xED, 0x19, 0x43, 0x9D, 0x43, 0x5B, 0x42, 0x9F, 0xC2, 0xD8, 0xC3, 0x3C, 0xC2, 0xBA, 0xC2, 0xDE, 0xC2, 0x79, 0xC3, 0xFD, 0xC2, 0xFB, 0xC3, 0x7F, 0x22, 0x84, 0x23, 0x42, 0x23, 0x46, 0x23, 0x21, 0x22, 0x25, 0x23, 0xA3, 0x01, 0xA4, 0x87, 0x8B, 0x52, 0x88, 0x4A, 0x8A, 0x5A, 0x8A, 0x46, 0x8D, 0x56, 0x8F, 0xCE, 0x8C, 0xDE, 0x8C, 0xC1, 0x8D, 0xD1, 0x8B, 0x29, 0x88, 0x39, 0x88, 0x25, 0x89, 0x35, 0x8B, 0xAD, 0x88, 0x3D, 0x8F, 0xA3, 0x8E, 0xB3, 0x8D, 0xAB, 0x8F, 0xBB, 0x8B, 0x67, 0x8E, 0x77, 0x8D, 0x6F, 0x8F, 0x7F, 0x4D, 0xE0, 0x4A, 0xF0, 0x49, 0xE8, 0x4B, 0xF8, 0x4E, 0x14, 0x4A, 0x0C, 0x49, 0x1C, 0x4D, 0x82, 0x48, 0x92, 0x4C, 0x8A, 0x4E, 0x9A, 0x49, 0x86, 0x4F, 0x56, 0x4C, 0x4E, 0x4E, 0x5E, 0x4A, 0x41, 0x4B, 0xD1, 0x48, 0xC9, 0x4A, 0xD9, 0x4C, 0xC5, 0x4D, 0xD5, 0x4F, 0x2D, 0x48, 0x3D, 0x48, 0x23, 0x49, 0x33, 0x4D, 0x2B, 0x4F, 0x3B, 0x4D, 0xA7, 0x4A, 0xB7, 0x4E, 0xAF, 0x4D, 0xBF, 0xCE, 0xA0, 0xCF, 0x70, 0xCC, 0x68, 0xCA, 0x78, 0xC8, 0x64, 0xCD, 0x74, 0xCB, 0x6C, 0xCF, 0x7C, 0xC9, 0xE2, 0xCC, 0xF2, 0xCE, 0xEA, 0xC9, 0xFA, 0xC8, 0xE6, 0x03, 0xF0, 0xBD, 0x3F, 0xFB, 0x27, 0x47, 0x28, 0x27, 0x38, 0x67, 0x28, 0x17, 0x24, 0x57, 0x34, 0x37, 0x34, 0x77, 0x34, 0x0F, 0x2C, 0x4F, 0x3C, 0x2F, 0x3C, 0x6F, 0x2C, 0x1F, 0x3C, 0x5F, 0x3C, 0x3F, 0x3C, 0x7F, 0xAC, 0x00, 0xBC, 0x40, 0xBC, 0x20, 0xBC, 0x60, 0xAC, 0x10, 0xBC, 0x50, 0xAC, 0x30, 0xAC, 0x70, 0xA4, 0x08, 0xB4, 0x48, 0xA4, 0x28, 0xA4, 0x68, 0xA8, 0x18, 0xA8, 0x58, 0xB0, 0x38, 0xB0, 0xB8, 0xBF, 0xF8, 0xAB, 0x84, 0xAF, 0xC4, 0xB7, 0xA4, 0xBB, 0xE4, 0x5F, 0x29, 0x67, 0xA9, 0x47, 0x69, 0x5B, 0xE9, 0x53, 0x19, 0x73, 0x99, 0x53, 0x59, 0x43, 0xD9, 0x4D, 0x39, 0x6D, 0xB9, 0x75, 0x79, 0x55, 0xF9, 0x69, 0x05, 0x59, 0x85, 0x49, 0x45, 0x51, 0xC5, 0x5E, 0x25, 0x5E, 0xA5, 0x4E, 0x65, 0x56, 0xE5, 0x5A, 0x15, 0x6A, 0x95, 0x72, 0x55, 0x62, 0xD5, 0x6C, 0x35, 0x4C, 0xB5, 0x64, 0x75, 0x78, 0xF5, 0x70, 0xF5, 0x4F, 0x0D, 0x5F, 0x8D, 0x4F, 0x4D, 0x67, 0xCD, 0x73, 0x2D, 0x73, 0xAD, 0x43, 0x6D, 0x6D, 0xED, 0x79, 0x1D, 0x79, 0x9D, 0x49, 0x5D, 0x61, 0xDD, 0x4E, 0x3D, 0x76, 0xBD, 0x46, 0x7D, 0x6A, 0xFD, 0x42, 0x03, 0x7C, 0x83, 0x4C, 0x43, 0x44, 0xC3, 0x48, 0x23, 0x50, 0x23, 0x7F, 0xA3, 0x4F, 0x63, 0x07, 0x80, 0xF3, 0x4C, 0x4D, 0xF6, 0x4D, 0xD5, 0x4D, 0xA7, 0xCD, 0xA4, 0xCD, 0x86, 0xCD, 0x79, 0xCD, 0x1B, 0x00, 0xD2, 0xAB, 0xB4, 0x24, 0xB4, 0xCC, 0xB4, 0x42, 0xB6, 0x8A, 0xB5, 0x06, 0xB5, 0xF6, 0xB5, 0xBE, 0xB5, 0xB1, 0xB7, 0xB9, 0xB4, 0x35, 0xB4, 0x5D, 0xB6, 0x53, 0xB6, 0x9B, 0xB6, 0x17, 0x02, 0x68, 0x8F, 0xD5, 0xA1, 0xD6, 0x91, 0xD4, 0x31, 0xDB, 0x09, 0xDD, 0x29, 0xDE, 0x19, 0xDC, 0xF9, 0xAB, 0xF3, 0xAD, 0x8B, 0xA3, 0xCB, 0xA5, 0xAB, 0xA1, 0xEB, 0xB2, 0x9B, 0xA2, 0xDB, 0xA4, 0xBB, 0xB0, 0x7B, 0xBB, 0x07, 0xB3, 0x47, 0xB5, 0x27, 0xB1, 0x67, 0xA6, 0x17, 0xAA, 0x57, 0xAC, 0x37, 0xA8, 0xB7, 0xAF, 0xF7, 0x5F, 0x1F, 0x5B, 0x9F, 0x53, 0x5F, 0x5D, 0xDF, 0xC5, 0x2F, 0xF2, 0x5F, 0xC6, 0xBF, 0xF2, 0x7F, 0x6D, 0xF6, 0xA3, 0xF7, 0x2B, 0xF7, 0xC7, 0xF7, 0x4F, 0x0D, 0x80, 0x0F, 0x08, 0x0F, 0xF8, 0x0F, 0x74, 0x0F, 0xFC, 0x1D, 0x64, 0x1E, 0xB4, 0x1F, 0xAC, 0x1E, 0x3C, 0x19, 0x22, 0x19, 0x32, 0x18, 0xCA, 0x19, 0x5A, 0x1B, 0x46, 0x01, 0xD0, 0x3F, 0x76, 0x78, 0x62, 0x04, 0x6C, 0x44, 0x68, 0xC4, 0x7F, 0xA4, 0x7B, 0xE4, 0x65, 0x94, 0x65, 0xD4, 0x71, 0xB4, 0x76, 0xF4, 0x7C, 0x8C, 0x7C, 0xCC, 0x78, 0xAC, 0x60, 0x6C, 0x7B, 0x1C, 0x6B, 0x5C, 0x7D, 0x3C, 0x65, 0x7C, 0x7E, 0x02, 0x76, 0x42, 0x6A, 0x22, 0x7C, 0x62, 0x78, 0xE2, 0x67, 0x92, 0x7F, 0xD2, 0x67, 0xB2, 0x13, 0x60, 0x01, 0xCC, 0x53, 0x0E, 0x53, 0x75, 0x53, 0x17, 0xD3, 0x14, 0xD3, 0xA6, 0xD3, 0xC5, 0xD3, 0x7B, 0x33, 0x78, 0x33, 0xDA, 0x33, 0x19, 0x33, 0x2B, 0xB3, 0xC8, 0xB3, 0x8A, 0xB3, 0xF1, 0xB3, 0xD3, 0x73, 0x50, 0x73, 0xE2, 0x73, 0xA1, 0x73, 0x43, 0x73, 0x3F, 0xF3, 0xFC, 0xF3, 0xBE, 0xF3, 0xDD, 0x00, 0x17, 0x60, 0xFF, 0xED, 0xFA, 0xBB, 0xF9, 0xF7, 0xFD, 0x02, 0xC3, 0x82, 0xDD, 0x42, 0xED, 0xC2, 0xC5, 0x22, 0xD5, 0xA2, 0xE5, 0x62, 0xF9, 0xE2, 0xF1, 0x12, 0xE9, 0x92, 0xC9, 0x52, 0xD1, 0xD2, 0xFE, 0x32, 0xC1, 0xB2, 0xFE, 0x72, 0xFE, 0xF2, 0xCE, 0x0A, 0xEE, 0x8A, 0xCE, 0x4A, 0xCE, 0xCA, 0xE6, 0x2A, 0xF6, 0xAA, 0xD6, 0x6A, 0xD6, 0xEA, 0xC6, 0x1A, 0xE6, 0x9A, 0xE6, 0x5A, 0xE6, 0xDA, 0xFA, 0x3A, 0xE6, 0xBA, 0xE6, 0x7A, 0xE6, 0xFA, 0xFA, 0x06, 0xE6, 0x86, 0xE6, 0x46, 0xE6, 0xC6, 0x06, 0xC0, 0x08, 0xB4, 0x36, 0xB3, 0x37, 0x37, 0xB7, 0x70, 0xB6, 0x74, 0xB6, 0x72, 0xB7, 0x76, 0xB6, 0xF1, 0xB6, 0xF5, 0xB7, 0x0B, 0xB6, 0xF7, 0x77, 0x88, 0x76, 0x8C, 0x77, 0x8A, 0x77, 0x8E, 0x76, 0x49, 0x77, 0xCD, 0x76, 0xCB, 0x77, 0xCF, 0xF6, 0xA8, 0xF6, 0xAC, 0xF7, 0x6A, 0xF6, 0xAE, 0xF6, 0xE9, 0xF6, 0x1D, 0xF6, 0x1B, 0xF7, 0xEF, 0x0F, 0x58, 0x0E, 0x5C, 0x0F, 0xDA, 0x0E, 0x5E, 0x0E, 0x39, 0x0F, 0xBD, 0x0F, 0x7B, 0x0E, 0x3F, 0x8F, 0x04, 0x8E, 0x02, 0x8F, 0x86, 0xFE, 0x80, 0xFE, 0x11, 0xFB, 0x13, 0xF1, 0x67, 0xF2, 0x18, 0xE6, 0x58, 0xEE, 0x38, 0xE1, 0x78, 0xE1, 0x04, 0xE5, 0x44, 0xED, 0x24, 0xE3, 0x64, 0x03, 0x60, 0x04, 0x7A, 0xA7, 0x05, 0xA7, 0x87, 0x67, 0xA4, 0x67, 0x16, 0x67, 0x55, 0x67, 0x97, 0xE7, 0xF4, 0xE7, 0x4E, 0xE7, 0x2D, 0xE7, 0x7F, 0x2F, 0xB8, 0x2E, 0x7C, 0x2E, 0x7E, 0x5D, 0x02, 0x5D, 0x8A, 0x5E, 0x46, 0x5C, 0x4E, 0x5D, 0xC1, 0x5D, 0x29, 0x5E, 0xA5, 0x5C, 0xAD, 0x5E, 0x63, 0x5D, 0xEB, 0x5E, 0x17, 0x5E, 0x1F, 0xDD, 0x90, 0xDF, 0x58, 0xDF, 0xD4, 0xDD, 0xDC, 0xDF, 0xB2, 0xDE, 0x7A, 0xDE, 0xF6, 0xDC, 0x7E, 0xDF, 0x89, 0xDC, 0x85, 0xDF, 0x4D, 0xDD, 0xC3, 0xDF, 0x2B, 0xDF, 0xA7, 0xDF, 0x6F, 0x3E, 0xE0, 0x3F, 0x18, 0x3F, 0x94, 0x3F, 0x5C, 0x3C, 0xD2, 0x3F, 0x3A, 0x3F, 0xB6, 0x3F, 0xBE, 0x3F, 0x09, 0x3C, 0x85, 0x3E, 0x4D, 0x3C, 0xC3, 0x3E, 0x2B, 0x3D, 0xA7, 0x3F, 0x6F, 0xFE, 0x25, 0xF8, 0x6B, 0xFA, 0xB7, 0x12, 0x60, 0x01, 0xCC, 0x2F, 0x1E, 0x2F, 0xBD, 0xAF, 0x40, 0xAF, 0xE2, 0x00, 0x07, 0xF8, 0xFD, 0x0F, 0xED, 0x9F, 0xCE, 0xBF, 0xC2, 0x7F, 0xC7, 0x6F, 0x34, 0x6F, 0x8E, 0x6F, 0x6D, 0x6F, 0xEF, 0xEF, 0x82, 0xEF, 0xE1, 0xEF, 0x33, 0x1F, 0x48, 0x1F, 0x1A, 0x1F, 0x79, 0x1F, 0x47, 0x9F, 0x54, 0x9F, 0x0E, 0x9F, 0x6D, 0x9F, 0xEF, 0x5F, 0x42, 0x5F, 0x11, 0x5F, 0xB3, 0xDF, 0x28, 0xDF, 0x5A, 0xDF, 0x85, 0xDF, 0x27, 0x3F, 0x74, 0x3F, 0x2E, 0x3F, 0x5D, 0x3F, 0xFF, 0x23, 0x00, 0x62, 0x40, 0x91, 0x40, 0x33, 0xC0, 0x88, 0xC0, 0x2A, 0x80, 0xEB, 0x7F, 0x0B, 0x04, 0x1F, 0xC4, 0x18, 0xA4, 0x1C, 0xE4, 0x1C, 0x94, 0x0E, 0xD4, 0x11, 0xB4, 0x15, 0xF4, 0x15, 0x8C, 0x07, 0x2C, 0x00, 0x6C, 0x08, 0x1C, 0x1C, 0x5C, 0x0A, 0x3C, 0x0E, 0xFC, 0x37, 0x04, 0x2A, 0x84, 0x06, 0x44, 0x0E, 0xC4, 0x2E, 0x24, 0x31, 0xA4, 0x19, 0x64, 0x25, 0xE4, 0x15, 0x14, 0x03, 0x94, 0x0B, 0x54, 0x3B, 0xD4, 0x3F, 0x68, 0x3E, 0xE8, 0x40, 0xE8, 0x61, 0x18, 0x08, 0x00, 0xFD, 0xE3, 0x60, 0x16, 0x60, 0x51, 0x61, 0x35, 0x60, 0xB3, 0x61, 0x77, 0xE1, 0x88, 0xE0, 0x4C, 0xE1, 0x2A, 0xE0, 0x2E, 0xE0, 0xE9, 0xE1, 0x9D, 0xE0, 0x5B, 0xE1, 0x5F, 0x10, 0xB8, 0x11, 0xFC, 0x10, 0x06, 0x11, 0x41, 0x11, 0x25, 0x10, 0xA3, 0x11, 0x67, 0x91, 0x10, 0x91, 0x54, 0x90, 0xD2, 0x91, 0x36, 0x90, 0x71, 0x91, 0x0D, 0x90, 0x8B, 0x91, 0x8F, 0x51, 0x28, 0x51, 0x6C, 0x50, 0xEA, 0x51, 0xEE, 0x51, 0x59, 0x51, 0x3D, 0x00, 0xB7, 0xFE, 0x07, 0x9A, 0x00, 0x5A, 0x30, 0xDA, 0x28, 0x3A, 0x24, 0xBA, 0x0C, 0x7A, 0x3C, 0xFA, 0x6F, 0x0C, 0x14, 0x0C, 0x75, 0x8C, 0x2C, 0x8C, 0x2D, 0x4C, 0xFC, 0xFF, 0xD8, 0x7F, 0x82, 0x45, 0x85, 0x65, 0x83, 0x55, 0x8F, 0x75, 0x87, 0xCD, 0x82, 0xED, 0x8E, 0xDD, 0x89, 0xFD, 0x8E, 0xC3, 0x87, 0x13, 0x88, 0x33, 0x84, 0x0B, 0x86, 0x2B, 0x81, 0x1B, 0x85, 0x3B, 0x83, 0x07, 0x8F, 0xA7, 0x84, 0x97, 0x82, 0xB7, 0x82, 0x8F, 0x09, 0xB8, 0xF2, 0x73, 0xF1, 0x77, 0x09, 0x88, 0x08, 0x4C, 0x08, 0xCA, 0x08, 0x4E, 0x09, 0xA9, 0x08, 0x6D, 0x09, 0xEB, 0x09, 0xEF, 0x88, 0x98, 0x89, 0x5C, 0x89, 0xDA, 0x89, 0x5E, 0x89, 0xB9, 0x89, 0x7D, 0x89, 0x7F, 0x11, 0xFF, 0x90, 0x08, 0x93, 0x84, 0x92, 0x8C, 0x91, 0x42, 0x92, 0x4A, 0x93, 0xC6, 0x92, 0xCE, 0x91, 0x21, 0x92, 0x29, 0x93, 0xA5, 0x92, 0xAD, 0x92, 0x63, 0x92, 0x6B, 0x93, 0xE7, 0x92, 0xEF, 0x52, 0x10, 0x52, 0x18, 0x53, 0x94, 0x52, 0x9C, 0x50, 0x52, 0x52, 0x5A, 0x53, 0xD6, 0x50, 0x5E, 0x53, 0x31, 0x50, 0x39, 0x51, 0xB5, 0x50, 0x3D, 0x53, 0x73, 0x50, 0x7B, 0x51, 0xF7, 0x50, 0x7F, 0xD2, 0x08, 0xD0, 0x04, 0xD2, 0x0C, 0xD1, 0x82, 0xD2, 0x8A, 0xD3, 0x46, 0xD2, 0x4E, 0xD1, 0xC1, 0xD0, 0xC9, 0xD1, 0x25, 0xD0, 0x2D, 0xD0, 0x23, 0xD3, 0xAB, 0xD2, 0xA7, 0xD3, 0xAF, 0x31, 0x60, 0x31, 0x68, 0x33, 0xE4, 0x32, 0xEC, 0x32, 0x12, 0x30, 0x1A, 0x31, 0x16, 0x33, 0x1E, 0x31, 0x91, 0x31, 0x99, 0x33, 0x55, 0x32, 0x9D, 0x33, 0x53, 0x33, 0xDB, 0x30, 0xD7, 0x31, 0xDF, 0xB0, 0x30, 0xB0, 0x38, 0xB2, 0x34, 0xB1, 0x3C, 0xB0, 0xB2, 0xB0, 0xBA, 0xB2, 0xB6, 0x01, 0x2E, 0x7C, 0x0E, 0x36, 0x4F, 0xB6, 0x2E, 0xB6, 0x37, 0x76, 0x1E, 0x76, 0x5F, 0xF6, 0x3E, 0xF6, 0x2F, 0x0E, 0x7E, 0x8E, 0x00, 0x8E, 0x01, 0x4E, 0x20, 0x4E, 0x21, 0xCE, 0x60, 0xCE, 0x61, 0x2E, 0x10, 0x2E, 0x51, 0xAE, 0x50, 0xAE, 0xD1, 0xFF, 0xC8, 0x1F, 0xC1, 0x3D, 0xCE, 0x03, 0xC9, 0x23, 0xC9, 0x13, 0xC5, 0x33, 0x09, 0xB8, 0xF1, 0xA5, 0x79, 0x63, 0x78, 0xA7, 0xF9, 0x60, 0xF8, 0x64, 0xF9, 0x62, 0xF9, 0x66, 0xF9, 0xE1, 0xF8, 0xE5, 0xF8, 0xE3, 0xF9, 0xE7, 0x04, 0xE0, 0x05, 0xE4, 0x05, 0x12, 0x04, 0xE6, 0x05, 0x11, 0x04, 0x15, 0x04, 0x13, 0x05, 0x7F, 0x0B, 0x21, 0x0A, 0x29, 0x0A, 0x25, 0x0A, 0xFD, 0x16, 0x46, 0x14, 0x56, 0x14, 0x4E, 0x14, 0xFE, 0x2D, 0x82, 0x28, 0xA2, 0x28, 0x92, 0x28, 0xF2, 0x1B, 0x70, 0xE7, 0x2B, 0x88, 0x26, 0x88, 0xCE, 0x8B, 0xC1, 0x8B, 0xC9, 0x8B, 0xC5, 0x89, 0xCD, 0x8A, 0xC3, 0x8A, 0xCB, 0x8A, 0xC7, 0x88, 0x4F, 0x4B, 0x40, 0x4B, 0x48, 0x49, 0x44, 0x4A, 0x4C, 0x48, 0x42, 0x48, 0x8A, 0x4B, 0x86, 0x49, 0x8E, 0x48, 0x81, 0x48, 0x09, 0x4B, 0x05, 0x49, 0x0D, 0x48, 0x7D, 0x4B, 0xF3, 0x4B, 0xFB, 0x49, 0xF7, 0x4A, 0xBF, 0xC9, 0x70, 0xC9, 0x78, 0x02, 0x6E, 0xFD, 0x67, 0x59, 0x16, 0x59, 0x67, 0xD9, 0x46, 0xD9, 0x5B, 0x39, 0x3A, 0x39, 0x1B, 0xB9, 0x6A, 0xB9, 0x33, 0x79, 0x72, 0x79, 0x53, 0xF9, 0x62, 0xF9, 0x7D, 0x05, 0x7C, 0x05, 0x5D, 0x85, 0x6C, 0x85, 0x75, 0x45, 0x74, 0x45, 0x55, 0xC5, 0x24, 0xC5, 0x79, 0x25, 0x38, 0x25, 0x69, 0xA5, 0x48, 0xA5, 0x31, 0x65, 0x10, 0x65, 0x21, 0x65, 0x7F, 0xE5, 0x1E, 0xE5, 0x7F, 0x2A, 0xEC, 0x2A, 0x2E, 0x2A, 0x8D, 0x2A, 0x37, 0xAA, 0x34, 0x00, 0xF2, 0x97, 0xA9, 0x1E, 0xAA, 0x11, 0xA8, 0xE9, 0xAA, 0x65, 0xAA, 0xAD, 0xA8, 0x23, 0xAB, 0x2B, 0xA8, 0xC7, 0xA8, 0x4F, 0x68, 0x80, 0x69, 0x08, 0x6B, 0xF8, 0x6B, 0xF4, 0x68, 0xBC, 0x6A, 0xB2, 0x69, 0x3A, 0x69, 0xD6, 0x6B, 0x5E, 0x6A, 0x51, 0x6A, 0x99, 0x6A, 0x15, 0x69, 0xED, 0x6A, 0xE3, 0x68, 0x6B, 0x6A, 0xA7, 0x69, 0x2F, 0xE8, 0xC0, 0xEB, 0xC8, 0xE8, 0x44, 0xEA, 0x8C, 0xEA, 0x02, 0xEB, 0x0A, 0xE8, 0xFA, 0xEA, 0x76, 0xEA, 0x3E, 0xEB, 0x31, 0xEB, 0x39, 0xE8, 0xD5, 0xEA, 0x9D, 0xEB, 0x93, 0xEB, 0x9B, 0xE8, 0x17, 0xEA, 0xEF, 0x18, 0x60, 0x1B, 0x68, 0x18, 0xA4, 0x19, 0x2C, 0x1A, 0x22, 0x18, 0xCA, 0x1A, 0x46, 0x19, 0x8E, 0x19, 0x81, 0x18, 0x09, 0x1A, 0xF9, 0x1B, 0xF5, 0x18, 0xBD, 0x1A, 0xB3, 0x19, 0x3B, 0x1B, 0x37, 0x1A, 0x5F, 0x9B, 0x50, 0x9B, 0x58, 0x9A, 0x94, 0x99, 0x1C, 0x99, 0x12, 0x9A, 0xEA, 0x9B, 0xE6, 0x98, 0x6E, 0x98, 0xA1, 0x9B, 0xA9, 0x9A, 0x25, 0x99, 0xCD, 0x9B, 0xC3, 0x9A, 0x4B, 0x9B, 0x47, 0x9A, 0x8F, 0x5A, 0x80, 0x58, 0x08, 0x59, 0xF8, 0x5B, 0xF4, 0x5A, 0xBC, 0x59, 0x72, 0x5A, 0xBA, 0x5B, 0xB6, 0x58, 0xDE, 0x5B, 0x31, 0x58, 0xD9, 0x59, 0xD5, 0x58, 0x9D, 0x5B, 0x53, 0x58, 0x9B, 0x5A, 0x17, 0x5B, 0xEF, 0xDB, 0xE0, 0xDB, 0xE8, 0xDA, 0x64, 0xDB, 0xAC, 0xDB, 0xA2, 0xDB, 0xAA, 0xDA, 0x26, 0xDB, 0xFE, 0xB6, 0x83, 0xB7, 0x93, 0xB3, 0x8B, 0xB1, 0x9B, 0xB4, 0x87, 0xB0, 0x17, 0xB3, 0x0F, 0xB1, 0x1F, 0xB4, 0xFF, 0x76, 0xE0, 0x73, 0xF0, 0x75, 0xE8, 0x76, 0x78, 0x75, 0x64, 0x77, 0x74, 0x75, 0x6C, 0x76, 0xBC, 0x77, 0x62, 0xF8, 0xFF, 0xD3, 0x9F, 0xD2, 0xD9, 0xDC, 0xB9, 0xCC, 0xF9, 0xC8, 0x85, 0xC8, 0xC5, 0xC0, 0x25, 0xDF, 0x65, 0xDB, 0x15, 0xC7, 0x55, 0xCB, 0x35, 0xC3, 0x75, 0xD5, 0x0D, 0xD5, 0x4D, 0xC5, 0x2D, 0xC9, 0x6D, 0xDE, 0x1D, 0xDE, 0x5D, 0xD6, 0x3D, 0xC6, 0x7D, 0xCA, 0x03, 0xD2, 0x43, 0xC2, 0x23, 0xCC, 0x63, 0xC4, 0x13, 0xC4, 0x53, 0xC8, 0x33, 0xD0, 0xB3, 0xDF, 0xF3, 0xD3, 0x8B, 0xD7, 0xCB, 0xC7, 0xAB, 0xDB, 0xEB, 0xD5, 0x9B, 0xC3, 0xDB, 0xDD, 0xBB, 0x0D, 0xB0, 0xE3, 0xB2, 0xF8, 0x38, 0xFB, 0x34, 0xF9, 0xDC, 0xF9, 0x32, 0xF8, 0xDA, 0xFB, 0xD6, 0xF9, 0x5E, 0xF9, 0xD1, 0xF8, 0x59, 0xFB, 0x55, 0xF9, 0x9D, 0xFB, 0x53, 0xFA, 0x5B, 0xF8, 0x97, 0x03, 0x2E, 0x7E, 0xB2, 0x00, 0xD3, 0x80, 0xD2, 0x80, 0xA3, 0x40, 0xE2, 0x40, 0xE3, 0xC0, 0xA2, 0xC0, 0x83, 0x20, 0xC2, 0x20, 0xC3, 0xA0, 0x82, 0xA0, 0xBD, 0x60, 0x82, 0x60, 0xFD, 0xE0, 0xFC, 0xE0, 0x9D, 0x10, 0xBC, 0x10, 0xBD, 0x90, 0xBC, 0x90, 0xED, 0x50, 0xDC, 0x50, 0xDD, 0xD0, 0x1C, 0xC0, 0xB5, 0x8F, 0x13, 0xA6, 0x13, 0x96, 0x13, 0xB6, 0x15, 0x8E, 0x1D, 0xAE, 0x1D, 0x9E, 0x1D, 0xBE, 0x19, 0x81, 0x1D, 0xA1, 0x1D, 0x91, 0x1D, 0xB1, 0x19, 0x89, 0x1D, 0xA9, 0x1D, 0x99, 0x1D, 0xB9, 0x19, 0x85, 0x1D, 0xA5, 0x1D, 0x95, 0x13, 0xB5, 0x15, 0x8D, 0x13, 0xAD, 0x13, 0x9D, 0x13, 0xBD, 0x05, 0x30, 0x00, 0x5D, 0xC0, 0xA5, 0xBF, 0x1D, 0x8B, 0x1B, 0xAB, 0x17, 0x9B, 0x17, 0xBB, 0x13, 0x87, 0x1F, 0xA7, 0x1F, 0x97, 0x1F, 0xB7, 0x1B, 0x4F, 0x10, 0x6F, 0x10, 0x5F, 0x10, 0xBF, 0x9F, 0x40, 0x98, 0x60, 0x08, 0xB8, 0xF3, 0x0F, 0x12, 0x89, 0x13, 0x8D, 0x13, 0x8B, 0x13, 0x8F, 0x92, 0x48, 0x92, 0x4C, 0x92, 0x4A, 0x93, 0xFE, 0x24, 0x93, 0x25, 0x9B, 0x25, 0x97, 0x25, 0x9F, 0xA4, 0x90, 0xA7, 0x98, 0xA7, 0x54, 0xA4, 0x9C, 0xA6, 0x52, 0xA4, 0x5A, 0xA6, 0x56, 0xA6, 0x9E, 0xA5, 0x51, 0xA5, 0x59, 0xA5, 0x55, 0xA5, 0x5D, 0xA4, 0x53, 0x03, 0x1C, 0xA0, 0x3A, 0xFD, 0x32, 0x83, 0x26, 0xC3, 0x26, 0xA3, 0x26, 0xE3, 0x32, 0x93, 0x36, 0xD3, 0x36, 0xB3, 0x36, 0xF3, 0x2A, 0x8B, 0x36, 0xCB, 0x36, 0xAB, 0x36, 0xEB, 0x2A, 0x9B, 0x36, 0xDB, 0x36, 0xBB, 0x36, 0xFB, 0x2A, 0x87, 0x36, 0xC7, 0x36, 0xA7, 0x36, 0xE7, 0x2A, 0x97, 0x36, 0xD7, 0x36, 0xB7, 0x36, 0xF7, 0x2A, 0x8F, 0x36, 0xCF, 0x36, 0xAF, 0x36, 0xEF, 0x2A, 0x9F, 0x36, 0xDF, 0x36, 0xBF, 0x26, 0xFF, 0xB2, 0x80, 0xA6, 0xC0, 0xA6, 0xA0, 0xA6, 0xE0, 0xB2, 0x90, 0xA6, 0xD0, 0xA6, 0xB0, 0xBA, 0xF0, 0xA2, 0x88, 0xBA, 0xC8, 0xBA, 0xA8, 0xBA, 0xE8, 0xA2, 0x98, 0xBA, 0xD8, 0xAA, 0xB8, 0xAA, 0xF8, 0xBC, 0x84, 0xAA, 0xC4, 0xAA, 0xA4, 0xAA, 0xE4, 0xBC, 0x94, 0xAA, 0xD4, 0xAA, 0xB4, 0xAA, 0xF4, 0xBC, 0x8C, 0xAA, 0xCC, 0xAA, 0xAC, 0xAA, 0xEC, 0xBC, 0x9C, 0xAA, 0xDC, 0x0A, 0xE0, 0x00, 0xE7, 0x15, 0x54, 0x15, 0xD6, 0x15, 0xD5, 0x15, 0x17, 0x95, 0xD4, 0x95, 0xD6, 0x95, 0x35, 0x95, 0x97, 0x55, 0x34, 0x55, 0x36, 0x55, 0xB5, 0x55, 0x57, 0xD5, 0xB4, 0xD5, 0xB6, 0xD5, 0x75, 0xD5, 0xD7, 0x35, 0x74, 0x80, 0x2B, 0xBF, 0xBE, 0xE6, 0xB6, 0x96, 0x01, 0x60, 0x00, 0x8D, 0xB5, 0x77, 0x75, 0x4C, 0x75, 0x4E, 0x75, 0xCD, 0x75, 0x0F, 0xF5, 0x2C, 0xF5, 0xAE, 0xF5, 0xAD, 0xF5, 0xCF, 0x0D, 0xEC, 0x0D, 0xEE, 0x0D, 0x1D, 0x0D, 0xAF, 0x8D, 0x9C, 0x8D, 0x5E, 0x8D, 0xDD, 0x8D, 0xEF, 0x4D, 0xBC, 0x80, 0x3B, 0xBF, 0xAF, 0xE9, 0xAB, 0x59, 0xA0, 0x39, 0xB0, 0x79, 0xB0, 0x05, 0xB8, 0x45, 0xA4, 0x25, 0xB4, 0x65, 0xB4, 0x15, 0xBC, 0x55, 0xA2, 0x35, 0xB2, 0x75, 0xB2, 0x0D, 0xBA, 0x4D, 0xA6, 0x2D, 0xB6, 0x6D, 0xB6, 0x1D, 0xBE, 0x5D, 0xB1, 0x3D, 0xA9, 0x7D, 0xB1, 0x03, 0xA5, 0x43, 0xB5, 0x23, 0xAD, 0x63, 0xAD, 0x13, 0xB3, 0x53, 0xAB, 0x33, 0xA7, 0x73, 0xBB, 0x0B, 0xAF, 0xCB, 0xA0, 0xAB, 0xB0, 0xEB, 0xA0, 0x9B, 0xA4, 0xDB, 0xB4, 0xBB, 0xBC, 0xFB, 0xB4, 0x87, 0xAA, 0xC7, 0xBA, 0xA7, 0xB6, 0xE7, 0xBA, 0x97, 0xA1, 0xD7, 0xB1, 0xB7, 0xB9, 0xF7, 0x11, 0xC0, 0x7D, 0x8F, 0xBE, 0xCE, 0xBE, 0xB7, 0x5F, 0xBC, 0xBF, 0xFC, 0x7E, 0xF5, 0xF7, 0x03, 0xF5, 0x8B, 0xF4, 0x87, 0xF6, 0x8F, 0x0D, 0x40, 0x0E, 0x48, 0x0F, 0xC4, 0x0E, 0xCC, 0x0D, 0x22, 0x0E, 0x2A, 0x0D, 0xA6, 0x0C, 0xAE, 0x0C, 0x61, 0x0C, 0x69, 0x01, 0x98, 0xBF, 0x33, 0x4C, 0x30, 0x6C, 0x38, 0x5C, 0x3C, 0xFC, 0x07, 0x70, 0xF1, 0x5B, 0x8E, 0x54, 0x8F, 0x5C, 0x8E, 0xD2, 0x8D, 0x3A, 0x8C, 0x36, 0x8D, 0x3E, 0x8E, 0xB1, 0x8E, 0xB9, 0x8F, 0x75, 0x8E, 0xBD, 0x8D, 0xF3, 0x8E, 0xFB, 0x8D, 0xF7, 0x4F, 0x00, 0x4D, 0x88, 0x4C, 0x84, 0x4E, 0x8C, 0x4D, 0x42, 0x4E, 0x4A, 0x4F, 0xC6, 0x4C, 0xCE, 0x4E, 0x21, 0x4C, 0x29, 0x4E, 0x25, 0x4F, 0x2D, 0x4F, 0xA3, 0x4F, 0x6B, 0x4C, 0x67, 0x4D, 0x6F, 0xCD, 0xE0, 0xCE, 0xE8, 0xCF, 0x14, 0xCE, 0x1C, 0xCC, 0x92, 0xCC, 0x9A, 0xCD, 0x96, 0xCF, 0x9E, 0xCD, 0x51, 0xCD, 0xD9, 0xCC, 0xD5, 0xCD, 0xDD, 0xCC, 0x33, 0xCE, 0x3B, 0x01, 0xEE, 0xFE, 0x27, 0x00, 0xEB, 0x3D, 0x7F, 0x77, 0xFD, 0x7E, 0x5F, 0xE0, 0x5D, 0xF0, 0x5B, 0xE8, 0x5F, 0xF8, 0x59, 0x14, 0x5E, 0x0C, 0x59, 0x1C, 0x5D, 0x02, 0x5F, 0x92, 0x58, 0x8A, 0x5A, 0x9A, 0x5A, 0x86, 0x5D, 0x96, 0x5B, 0x8E, 0x07, 0x5C, 0xFE, 0x48, 0x2B, 0xCA, 0x2B, 0xA9, 0x2B, 0x2B, 0xAB, 0xE8, 0xAB, 0x1A, 0x00, 0xD2, 0x6F, 0xAE, 0xE1, 0xAC, 0xE9, 0xAE, 0xE5, 0xAD, 0xED, 0xAE, 0x13, 0xAE, 0x1B, 0xAD, 0x17, 0xAF, 0x1F, 0x6D, 0x90, 0x6E, 0x98, 0x6D, 0x94, 0x6D, 0x9C, 0x6C, 0x52, 0x6C, 0x5A, 0x6E, 0x56, 0x6D, 0x9E, 0x6F, 0x51, 0x6F, 0xD9, 0x6C, 0xD5, 0x6C, 0x5D, 0x6D, 0xD3, 0x6D, 0xDB, 0x6D, 0xD7, 0x6F, 0xDF, 0xEC, 0x30, 0xEC, 0x38, 0xEC, 0x34, 0xEC, 0xDC, 0xED, 0x32, 0xEE, 0x3A, 0xEE, 0x36, 0xEE, 0xDE, 0xED, 0x31, 0xEE, 0x39, 0xEE, 0x35, 0xEE, 0xDD, 0xED, 0x33, 0xEE, 0x3B, 0x02, 0x48, 0x7F, 0x77, 0xC0, 0x78, 0xE0, 0x70, 0xD0, 0x70, 0x70, 0x7B, 0x48, 0x7F, 0x68, 0x7F, 0x58, 0x7F, 0x78, 0x7D, 0x44, 0x77, 0x64, 0x7B, 0x54, 0x7B, 0x74, 0xF9, 0x87, 0xE6, 0x8F, 0xF5, 0x9F, 0xAA, 0x3F, 0xE7, 0xC7, 0x94, 0xC7, 0x16, 0xC7, 0x15, 0xC7, 0x27, 0x27, 0x64, 0x27, 0xA6, 0x27, 0xA5, 0x27, 0x47, 0xA7, 0xC4, 0xA7, 0x46, 0xA7, 0x85, 0xA7, 0x7B, 0x67, 0xF8, 0x67, 0x7A, 0x67, 0xB9, 0x67, 0x5B, 0xE7, 0xD8, 0xE7, 0x5A, 0xE7, 0x99, 0xE7, 0x6B, 0x17, 0xE8, 0x17, 0x6A, 0x17, 0xA9, 0x17, 0x4B, 0x97, 0x48, 0x97, 0x8A, 0x97, 0x09, 0x97, 0x73, 0x57, 0xB0, 0x57, 0x32, 0x57, 0xD1, 0x57, 0x13, 0xD7, 0x10, 0xD7, 0x62, 0xD7, 0xA1, 0xD7, 0xC3, 0x37, 0x40, 0x37, 0x02, 0x37, 0xFE, 0x37, 0xBD, 0x37, 0xEF, 0xB7, 0x5C, 0xB7, 0x1E, 0xB7, 0xED, 0xB7, 0x4F, 0x77, 0xCC, 0x77, 0x4E, 0x77, 0x0D, 0x77, 0xD7, 0xF7, 0x34, 0xF7, 0x56, 0xF7, 0x15, 0xF7, 0x27, 0x0F, 0xA4, 0x00, 0xE2, 0x17, 0x3E, 0xEC, 0x3E, 0xE2, 0x3E, 0x6A, 0x3F, 0x66, 0x3E, 0xAE, 0x3E, 0xA1, 0x3C, 0x29, 0x3D, 0x25, 0x3C, 0xCD, 0x3E, 0xC3, 0x3C, 0x4B, 0x3D, 0x87, 0x3F, 0x8F, 0xFC, 0x05, 0xFE, 0x2B, 0xF8, 0xD7, 0xEF, 0x6F, 0xCF, 0xDF, 0xD7, 0x17, 0xF6, 0x17, 0xD7, 0x97, 0xA6, 0x97, 0xDB, 0x57, 0xDA, 0x57, 0xEB, 0xD7, 0x8A, 0xD7, 0xE3, 0x7F, 0xC4, 0xFF, 0x0C, 0xFE, 0xE5, 0xFD, 0xDB, 0x7C, 0xC3, 0x7C, 0x53, 0x7B, 0x4B, 0x7E, 0x9B, 0x7F, 0x87, 0x7B, 0x97, 0x7E, 0x8F, 0x78, 0x1F, 0xF9, 0x00, 0xFA, 0xE0, 0xFF, 0xF0, 0xF9, 0xE8, 0xFA, 0xF8, 0xFB, 0xC9, 0xF2, 0xE9, 0xF8, 0x59, 0xF7, 0x79, 0xF1, 0x45, 0xF1, 0x65, 0xF2, 0x55, 0xF8, 0xB5, 0xF3, 0x8D, 0xFD, 0xAD, 0xF1, 0x9D, 0xFA, 0xFD, 0xFB, 0x07, 0xEE, 0x47, 0xFA, 0x27, 0xE2, 0x67, 0xF8, 0x7F, 0xF8, 0x6F, 0x6F, 0xE1, 0xC6, 0x02, 0x04, 0x78, 0xA0, 0x60, 0xC8, 0x40, 0x40, 0xC0, 0x40, 0xFF, 0x87, 0xF7, 0x7F, 0xF7, 0x0F, 0x06, 0xF8, 0x00, 0x4F, 0x08, 0x28, 0x18, 0x68, 0x08, 0x18, 0x18, 0x58, 0x04, 0x38, 0x04, 0x78, 0x18, 0x04, 0x04, 0x44, 0x14, 0x24, 0x14, 0x64, 0x04, 0x14, 0x0C, 0x54, 0x0C, 0x34, 0x0C, 0x74, 0x0C, 0x0C, 0x1C, 0x4C, 0x1C, 0x2C, 0x02, 0x6C, 0x1C, 0x1C, 0x02, 0x5C, 0x12, 0x3C, 0x12, 0x7C, 0x02, 0x02, 0x12, 0x42, 0x0A, 0x22, 0x0A, 0x62, 0x12, 0x12, 0x1A, 0x52, 0x1A, 0x32, 0x1A, 0x72, 0x1A, 0x0A, 0x06, 0x4A, 0x06, 0x2A, 0x16, 0x6A, 0x06, 0x1A, 0x16, 0x5A, 0x0E, 0x3A, 0x0E, 0x7A, 0x16, 0x06, 0x0E, 0x46, 0x1E, 0x26, 0x1E, 0xD0, 0x0D, 0x10, 0x60, 0x15, 0x60, 0x13, 0x60, 0x7F, 0xC3, 0x21, 0xC2, 0x29, 0xC2, 0x25, 0xC1, 0x2D, 0xC0, 0x23, 0xC1, 0x2B, 0xC3, 0x27, 0x03, 0xB6, 0x02, 0x64, 0x04, 0x15, 0x84, 0x14, 0x84, 0x25, 0x44, 0x54, 0x44, 0x55, 0xC4, 0x54, 0xC4, 0x15, 0x24, 0x34, 0x24, 0x35, 0x80, 0x3B, 0xAC, 0x22, 0xA3, 0x23, 0x6B, 0x00, 0x96, 0x82, 0x35, 0x14, 0x0C, 0x14, 0x4D, 0x94, 0x4C, 0x94, 0x75, 0x54, 0x2C, 0x54, 0x2D, 0xD4, 0x2C, 0xD4, 0x4D, 0x34, 0x6C, 0x34, 0x6D, 0xB4, 0x1C, 0xB4, 0x2D, 0x74, 0x1C, 0x74, 0x5D, 0xF4, 0x5C, 0xF4, 0x6D, 0xC0, 0x4E, 0xA0, 0x07, 0x28, 0x07, 0x3B, 0x00, 0x7B, 0xD0, 0xC7, 0xCC, 0xC7, 0xDC, 0xC3, 0x22, 0xC0, 0x32, 0xC0, 0x2A, 0xC4, 0xDA, 0xC7, 0x26, 0xC4, 0x36, 0xC4, 0x2E, 0xC2, 0x3E, 0xC0, 0x21, 0xC2, 0x31, 0xC6, 0x29, 0xC6, 0x39, 0xC4, 0x25, 0xC1, 0x35, 0xC1, 0x2D, 0xC1, 0xFD, 0x83, 0x47, 0x8A, 0x67, 0x8A, 0x57, 0x86, 0x77, 0x8C, 0x4F, 0x86, 0x6F, 0x86, 0x5F, 0x8E, 0x7F, 0x42, 0x40, 0x4E, 0x60, 0x41, 0x50, 0x01, 0xF0, 0x07, 0x4A, 0x42, 0x4B, 0xC2, 0x4A, 0xC2, 0x73, 0x22, 0x2A, 0x22, 0x2B, 0xA2, 0x6A, 0xA2, 0x0B, 0x62, 0x6A, 0x62, 0x6B, 0xE2, 0x1A, 0xE2, 0x4B, 0x12, 0x1A, 0x12, 0x5B, 0x92, 0x5A, 0x92, 0x2B, 0x52, 0x3A, 0x52, 0x3B, 0xD2, 0x3A, 0xD2, 0x1B, 0x32, 0x7A, 0x32, 0x7B, 0xB2, 0x06, 0xB2, 0x5B, 0x72, 0x86, 0xFF, 0xDA, 0xC1, 0x1D, 0x05, 0x23, 0x85, 0x13, 0x45, 0x13, 0xC5, 0x3D, 0x25, 0x33, 0xA5, 0x33, 0x65, 0x33, 0xE5, 0x23, 0x15, 0x0B, 0x95, 0x0B, 0x55, 0x2B, 0xD5, 0x13, 0x35, 0x2B, 0xB5, 0x2B, 0x75, 0x1B, 0xF5, 0x33, 0x0D, 0x1B, 0x8D, 0x3B, 0x4D, 0x3B, 0xCD, 0x5F, 0x5A, 0x0E, 0x5A, 0x0F, 0xDA, 0x0E, 0xDA, 0x57, 0x3A, 0x4E, 0x3A, 0x4F, 0xBA, 0x2E, 0xBA, 0x7F, 0xF4, 0x5C, 0xF4, 0x5E, 0xF4, 0xDD, 0xF4, 0x6F, 0x0C, 0xDC, 0x0C, 0x3E, 0x0C, 0x3D, 0x0C, 0xEF, 0x8C, 0xBC, 0x8C, 0xBE, 0x8C, 0xBD, 0x8C, 0x9F, 0x4C, 0x7C, 0x4C, 0x7E, 0x4C, 0x7D, 0x4C, 0x5F, 0xCC, 0xFC, 0xCC, 0xFE, 0xCC, 0xFD, 0xCC, 0xDF, 0x2C, 0x02, 0x2C, 0x81, 0x2C, 0x03, 0x2C, 0x3F, 0xAC, 0x42, 0xAC, 0x41, 0xAC, 0x83, 0x6C, 0xC0, 0x6C, 0xC2, 0x6C, 0xC1, 0x6C, 0x43, 0xEC, 0x20, 0x80, 0x95, 0x20, 0x84, 0x7D, 0x84, 0x03, 0x94, 0x43, 0x94, 0x23, 0x8C, 0x63, 0x94, 0x13, 0x8C, 0x53, 0x9C, 0x33, 0x9C, 0x73, 0x8C, 0x0B, 0x82, 0x4B, 0x82, 0x2B, 0x82, 0x6B, 0x9C, 0x1B, 0x92, 0x5B, 0x92, 0x3B, 0x92, 0x7B, 0x92, 0x07, 0x8A, 0x47, 0x8A, 0x27, 0x9A, 0x67, 0x0A, 0xE0, 0x10, 0x32, 0xFF, 0x39, 0x04, 0xEC, 0x7F, 0x0E, 0x31, 0xF3, 0x9F, 0x43, 0xC4, 0xFD, 0x1F, 0x1C, 0x42, 0xF1, 0x3F, 0x87, 0x40, 0x12, 0x52, 0x12, 0x4A, 0x12, 0x5A, 0x10, 0x46, 0x16, 0x56, 0x16, 0x4E, 0x16, 0x5E, 0x12, 0x41, 0x11, 0x51, 0x11, 0x49, 0x15, 0x59, 0x16, 0x45, 0x15, 0x55, 0x13, 0x4D, 0x13, 0x5D, 0x11, 0x43, 0x17, 0x53, 0x17, 0x4B, 0x17, 0x5B, 0x15, 0xC7, 0x10, 0xD7, 0x10, 0xCF, 0x10, 0x5F, 0x97, 0xC0, 0x94, 0xD0, 0x94, 0xC8, 0x92, 0xD8, 0x90, 0xC4, 0x92, 0xD4, 0x96, 0xCC, 0x96, 0xDC, 0x94, 0xC2, 0x06, 0xAC, 0x05, 0x39, 0x52, 0x5B, 0xD2, 0xB8, 0xD2, 0xBA, 0xD2, 0xB9, 0xD2, 0x3B, 0x32, 0x78, 0x32, 0x7A, 0x32, 0xF9, 0x32, 0xBB, 0xB2, 0xF8, 0xB2, 0x06, 0xB2, 0x05, 0xB2, 0x7B, 0x72, 0x04, 0x72, 0x86, 0x72, 0x85, 0x72, 0xFB, 0xF2, 0x44, 0xF2, 0x46, 0xF2, 0x45, 0xF2, 0x87, 0x0A, 0xC4, 0x0A, 0xC6, 0x0A, 0x25, 0x0A, 0x47, 0x8A, 0x24, 0x8A, 0xA6, 0x8A, 0xA5, 0x80, 0xBD, 0x80, 0x54, 0xC9, 0x4C, 0xA9, 0x4C, 0xE9, 0x58, 0x99, 0x5C, 0xD9, 0x5C, 0xB9, 0x5C, 0xF9, 0x54, 0x85, 0x42, 0xC5, 0x42, 0xA5, 0x52, 0xE5, 0x4C, 0x95, 0x52, 0xD5, 0x4A, 0xB5, 0x4A, 0xF5, 0x5C, 0x8D, 0x4A, 0xCD, 0x5A, 0xAD, 0x5A, 0xED, 0x42, 0x9D, 0x46, 0xDD, 0x46, 0xBD, 0x46, 0xFD, 0x4A, 0x83, 0x56, 0xC3, 0x56, 0xA3, 0x4E, 0xE3, 0x5A, 0x93, 0x4E, 0xD3, 0x1E, 0x60, 0x0F, 0x37, 0x5A, 0xF4, 0x5A, 0x0E, 0x5A, 0x0D, 0x5A, 0xB7, 0xDA, 0x8C, 0xDA, 0x8E, 0xDA, 0x8D, 0xDA, 0xF7, 0x3A, 0x4C, 0x3A, 0x4E, 0x3A, 0xCD, 0x3A, 0x0F, 0xBA, 0xCC, 0xBA, 0x2E, 0xBA, 0x2D, 0xBA, 0x8F, 0x7A, 0x2C, 0x7A, 0xAE, 0x80, 0x6E, 0xF0, 0xA4, 0xCF, 0xA6, 0xEF, 0xA6, 0xDF, 0xA6, 0xFF, 0xD7, 0x80, 0xDD, 0xC0, 0xDD, 0xA0, 0xC3, 0xE0, 0xC5, 0x90, 0xC3, 0xD0, 0xC3, 0xB0, 0xD3, 0xF0, 0xD5, 0x88, 0xD3, 0xC8, 0xCB, 0xA8, 0xCB, 0xE8, 0x9F, 0x31, 0xB7, 0xB1, 0xB7, 0x71, 0xB7, 0xF1, 0xBB, 0x09, 0x8F, 0x89, 0x8F, 0x49, 0x2F, 0x60, 0x2F, 0xE0, 0x35, 0xF5, 0x35, 0xED, 0x33, 0xFD, 0x34, 0xE3, 0x33, 0xF3, 0x07, 0x54, 0x83, 0x2F, 0x73, 0x01, 0xF3, 0x00, 0xF3, 0x7E, 0xF3, 0x1F, 0x0B, 0x41, 0x8B, 0x40, 0x8B, 0x41, 0x4B, 0x20, 0x4B, 0x21, 0xCB, 0x20, 0xCB, 0x21, 0x2B, 0x60, 0x2B, 0x61, 0xAB, 0x10, 0xAB, 0x61, 0x6B, 0x10, 0x6B, 0x51, 0xEB, 0x50, 0xEB, 0x11, 0x1B, 0x30, 0x1B, 0x31, 0x9B, 0x30, 0x9B, 0x31, 0x5B, 0x70, 0x5B, 0x71, 0xDB, 0x70, 0xDB, 0x71, 0x3B, 0x08, 0x40, 0x33, 0x88, 0xB4, 0x9B, 0xB0, 0x87, 0xB4, 0x97, 0xB2, 0x8F, 0xB2, 0x9F, 0x74, 0x80, 0x76, 0x90, 0x76, 0x88, 0x76, 0x98, 0x76, 0x84, 0x71, 0x94, 0x71, 0x8C, 0x71, 0x9C, 0x71, 0x82, 0x75, 0x92, 0x75, 0x8A, 0x73, 0x9A, 0x75, 0x86, 0x73, 0x96, 0x77, 0x8E, 0x77, 0x9E, 0x73, 0x41, 0x70, 0x51, 0x70, 0x49, 0x70, 0xF9, 0xED, 0x8A, 0xE8, 0xAA, 0xE8, 0x9A, 0xE8, 0xBA, 0xE0, 0x86, 0xE4, 0xA6, 0xE4, 0x96, 0xEC, 0xB6, 0xE8, 0x8E, 0xEC, 0xAE, 0xE2, 0x9E, 0xE2, 0xBE, 0xE4, 0x81, 0xEA, 0xA1, 0xFA, 0x5F, 0x31, 0x40, 0xF3, 0x54, 0xF3, 0x4C, 0xF3, 0x5C, 0xF5, 0x42, 0xF7, 0x52, 0xF7, 0xCA, 0xF0, 0x5A, 0xF3, 0xC6, 0xF0, 0xD6, 0xF4, 0xCE, 0xF4, 0x5E, 0xF7, 0xC1, 0xF2, 0xD1, 0xF2, 0xC9, 0xF2, 0xD9, 0xF0, 0xC5, 0xF6, 0xD5, 0xF6, 0xCD, 0xF6, 0xDD, 0xF2, 0xC3, 0xF1, 0xD3, 0xF1, 0xCB, 0xF5, 0xDB, 0xF6, 0xC7, 0xF5, 0xD7, 0xF3, 0xCF, 0xF3, 0xDF, 0x09, 0xC0, 0x0F, 0xD0, 0x0F, 0xC8, 0x0F, 0xD8, 0x0D, 0x24, 0x08, 0x34, 0xF8, 0xAF, 0x18, 0xFC, 0x8F, 0x31, 0x14, 0x05, 0x1D, 0x04, 0x13, 0x05, 0x1B, 0x07, 0x17, 0x07, 0x1F, 0x86, 0x90, 0x84, 0x98, 0x84, 0x94, 0x84, 0x1C, 0x85, 0x92, 0x86, 0x9A, 0x86, 0x96, 0x86, 0x1E, 0x87, 0x91, 0x85, 0x99, 0x85, 0x95, 0x87, 0x9D, 0x84, 0x93, 0x87, 0x5B, 0x84, 0x57, 0x84, 0x9F, 0x46, 0x50, 0x46, 0x58, 0x46, 0x54, 0x46, 0x9C, 0x45, 0x52, 0x45, 0x5A, 0x45, 0x56, 0x45, 0x5E, 0x44, 0x51, 0x47, 0x59, 0x47, 0xD5, 0x44, 0x5D, 0x46, 0xD3, 0x44, 0xDB, 0x46, 0xD7, 0x46, 0x5F, 0xC5, 0xD0, 0xC5, 0xD8, 0xC5, 0xD4, 0xC5, 0x5C, 0xC7, 0xD2, 0xC7, 0xDA, 0xC7, 0xD6, 0xC7, 0xDE, 0xC6, 0x31, 0xC4, 0x39, 0xC4, 0x35, 0x02, 0x9A, 0x01, 0x23, 0x60, 0x19, 0x68, 0x8A, 0xBF, 0x4F, 0x60, 0x4A, 0x70, 0x4E, 0x68, 0x4E, 0x78, 0x48, 0x64, 0x49, 0x74, 0x49, 0x6C, 0x49, 0x7C, 0x4A, 0x62, 0x4D, 0x72, 0x4D, 0x6A, 0x4B, 0x7A, 0x4E, 0x66, 0x4B, 0x76, 0x4F, 0x6E, 0x4F, 0xFE, 0x9B, 0xC2, 0x9E, 0xE2, 0x91, 0xD2, 0x91, 0xF2, 0x92, 0xCA, 0x99, 0xEA, 0x99, 0xDA, 0x99, 0xFA, 0x2F, 0x8D, 0x2B, 0xCD, 0x2B, 0xAD, 0x3B, 0xED, 0x2D, 0x9D, 0x3B, 0xDD, 0x27, 0xBD, 0x27, 0xFD, 0x3D, 0x83, 0x27, 0xC3, 0x37, 0xA3, 0x37, 0xE3, 0x23, 0x93, 0x2F, 0xD3, 0x2F, 0xB3, 0x2F, 0xF3, 0x2B, 0x8B, 0x3F, 0xCB, 0x3F, 0xAB, 0x3F, 0xEB, 0x3B, 0x5B, 0x20, 0x3B, 0x30, 0x7B, 0x00, 0x50, 0x0D, 0x04, 0x73, 0x82, 0x72, 0x06, 0x73, 0x81, 0x72, 0x85, 0x73, 0x83, 0x73, 0x87, 0xF2, 0x40, 0xF2, 0x44, 0xF2, 0x42, 0xF2, 0x46, 0xF2, 0x41, 0xF3, 0x45, 0xF3, 0xC3, 0xF2, 0x47, 0x0B, 0xC0, 0x0A, 0xC4, 0xFE, 0xFF, 0xD5, 0x40, 0xA2, 0x30, 0xA2, 0x70, 0xBC, 0x08, 0xB2, 0x48, 0xB2, 0x28, 0xB2, 0x68, 0xB2, 0x18, 0xAA, 0x58, 0xAA, 0x38, 0xBA, 0x78, 0xAA, 0x04, 0xBA, 0x44, 0xBA, 0x24, 0xA6, 0x64, 0xBA, 0x14, 0xA6, 0x54, 0xB6, 0x34, 0xB6, 0x74, 0xA6, 0x0C, 0xAE, 0x4C, 0xAE, 0x2C, 0xAE, 0x6C, 0xAE, 0x1C, 0xBE, 0x5C, 0xBE, 0x3C, 0xBE, 0x7C, 0xBE, 0x02, 0xA1, 0x42, 0xA1, 0x22, 0xB1, 0xE2, 0x37, 0x60, 0x15, 0x50, 0xAA, 0x4C, 0xAA, 0x5C, 0xA8, 0x42, 0x06, 0x34, 0x83, 0xE4, 0xAA, 0xA5, 0x6A, 0x94, 0x6A, 0x95, 0xEA, 0x94, 0xEA, 0xE5, 0x1A, 0xD4, 0x1A, 0xD5, 0x9A, 0xB4, 0x9A, 0x95, 0x5A, 0xB4, 0x5A, 0xF5, 0xDA, 0xF4, 0xDA, 0xD5, 0x3A, 0x8C, 0x3A, 0x8D, 0xBA, 0x8C, 0xBA, 0xF5, 0x7A, 0xCC, 0x7A, 0xCD, 0xFA, 0xCC, 0xFA, 0x8D, 0x06, 0xAC, 0x06, 0xAD, 0x86, 0xEC, 0x86, 0xCD, 0x46, 0xEC, 0x46, 0x9D, 0xC6, 0x9C, 0xC6, 0xAD, 0x26, 0xDC, 0x26, 0xDD, 0xA6, 0xDC, 0xA6, 0x9D, 0x66, 0xBC, 0x66, 0x3D, 0x40, 0x2F, 0xD8, 0x6D, 0xC1, 0x6F, 0xD1, 0x07, 0x2C, 0x03, 0x7B, 0xAD, 0x04, 0xAD, 0x86, 0xAD, 0x85, 0xAD, 0xFB, 0x6D, 0x44, 0x6D, 0x46, 0x6D, 0x45, 0x6D, 0x87, 0xED, 0xC4, 0xED, 0xC6, 0xED, 0xC5, 0xED, 0x47, 0x1D, 0x24, 0x1D, 0x26, 0x1D, 0xA5, 0x1D, 0x7F, 0x3A, 0x49, 0x3B, 0xCD, 0x3A, 0xCB, 0x3A, 0x8F, 0xBB, 0xC8, 0xBB, 0xCC, 0xBB, 0xCA, 0xBB, 0x4E, 0x01, 0xAD, 0xC0, 0xA2, 0xBB, 0xA2, 0xFB, 0xAC, 0x87, 0xB2, 0xC7, 0xB2, 0xA7, 0xAA, 0xE7, 0xBC, 0x97, 0xAA, 0xD7, 0xBA, 0xB7, 0xBA, 0xF7, 0x02, 0xB0, 0x0F, 0xD8, 0xF4, 0xD5, 0xF4, 0x5D, 0xFE, 0xA2, 0xFD, 0x65, 0xFB, 0xAB, 0xF6, 0xD7, 0x75, 0x3F, 0x5D, 0xBF, 0x5D, 0x7F, 0x7D, 0xFF, 0xCD, 0x00, 0xFD, 0x80, 0xC3, 0x40, 0xC3, 0xC0, 0xED, 0x20, 0xE3, 0xA0, 0xE3, 0x60, 0xE3, 0xE0, 0xDD, 0x10, 0xD3, 0x90, 0xD3, 0x50, 0xD3, 0xD0, 0xC3, 0x30, 0xF3, 0xB0, 0xF3, 0x70, 0xCB, 0xF0, 0xE3, 0x08, 0xCB, 0x88, 0xEB, 0x48, 0xEB, 0xC8, 0xD3, 0x28, 0xDB, 0xA8, 0xDB, 0x68, 0xDB, 0xE8, 0xF3, 0x18, 0x3B, 0xC0, 0x19, 0xDA, 0xC7, 0x5E, 0xC6, 0x39, 0xC6, 0x3D, 0xC6, 0x3B, 0xC7, 0x5F, 0x27, 0x38, 0x27, 0xBC, 0x26, 0xBA, 0x26, 0xFE, 0x4D, 0x72, 0x4F, 0x7A, 0x4F, 0x76, 0x4F, 0xBE, 0x4D, 0xF1, 0x4C, 0xF9, 0x4C, 0xF5, 0x4C, 0x7D, 0x4C, 0xF3, 0x4E, 0xFB, 0x4E, 0xF7, 0x4D, 0x7F, 0xCE, 0xF0, 0xCD, 0xF8, 0xCF, 0xFC, 0x9A, 0xF9, 0x9A, 0x15, 0x98, 0x0D, 0x98, 0xED, 0x9F, 0xFD, 0x9E, 0x13, 0x9C, 0x0B, 0x9C, 0x1B, 0x98, 0x07, 0x9A, 0x17, 0x9A, 0x0F, 0x9A, 0x1F, 0xFA, 0x0D, 0xFC, 0x5B, 0x18, 0xB0, 0x16, 0x0C, 0x2F, 0x80, 0x2C, 0x88, 0x2E, 0x84, 0x2E, 0x8C, 0x2C, 0x82, 0x2E, 0x8A, 0x2D, 0x86, 0xFD, 0x67, 0x0D, 0xE2, 0x4B, 0xE1, 0x4B, 0xE3, 0xCB, 0x10, 0x80, 0xBD, 0x20, 0x72, 0x79, 0x62, 0x05, 0x72, 0x45, 0x72, 0x25, 0x6A, 0x65, 0x72, 0x15, 0x6A, 0x55, 0x7A, 0x35, 0x7A, 0x75, 0x6A, 0x0D, 0x66, 0x4D, 0x66, 0x2D, 0x66, 0x6D, 0x66, 0x1D, 0x76, 0x5D, 0x76, 0x3D, 0x6E, 0x7D, 0x16, 0xB0, 0x18, 0xC8, 0x6D, 0xC4, 0x6F, 0xCC, 0x6D, 0xC2, 0x6F, 0x2A, 0x6C, 0x26, 0x6C, 0xCE, 0x6F, 0x21, 0x6E, 0x29, 0x6E, 0x25, 0x6E, 0x2D, 0x6C, 0x23, 0x6D, 0x2B, 0x6D, 0x27, 0x6F, 0x2F, 0xEE, 0x20, 0xEF, 0x28, 0xEF, 0xA4, 0xEC, 0x2C, 0xED, 0xA2, 0xEC, 0xAA, 0xEE, 0xA6, 0xEE, 0x2E, 0xEF, 0xA1, 0xED, 0xA9, 0xED, 0xA5, 0xED, 0xAD, 0xEE, 0xA3, 0xEF, 0xAB, 0xEF, 0x67, 0xEC, 0xAF, 0x1D, 0x60, 0x1C, 0x68, 0x1C, 0x64, 0x1E, 0xAC, 0x1F, 0x62, 0x1E, 0x6A, 0x1D, 0x66, 0xFD, 0xFF, 0x37, 0x83, 0x6C, 0xC0, 0x66, 0x80, 0xF3, 0x47, 0xE7, 0x7F, 0xDD, 0x0C, 0xF2, 0x8E, 0x77, 0x4E, 0xF0, 0x4E, 0xF4, 0x4F, 0xF2, 0x4F, 0x76, 0x4F, 0x09, 0x4E, 0x0D, 0x00, 0x85, 0x60, 0xFF, 0x8C, 0xF0, 0xCC, 0xF0, 0xAC, 0xE8, 0xEC, 0xE0, 0x9C, 0xE8, 0xDC, 0xE8, 0xBC, 0xF8, 0xFC, 0xF0, 0x82, 0xF8, 0xC2, 0xE4, 0xA2, 0xE4, 0xE2, 0xE8, 0x92, 0xF4, 0xD2, 0xF4, 0xB2, 0xF4, 0xF2, 0xF8, 0x8A, 0xEC, 0xCA, 0xEC, 0xAA, 0xEC, 0xEA, 0xE4, 0x9A, 0xFC, 0xDA, 0xFC, 0xBA, 0xE2, 0xFA, 0xF4, 0x86, 0xE2, 0xC6, 0xF2, 0xA6, 0xF2, 0xE6, 0xEC, 0x96, 0xEA, 0xD6, 0xEA, 0xB6, 0xEA, 0xF6, 0xE2, 0x8E, 0xFA, 0xCE, 0xFA, 0xAE, 0xFA, 0xEE, 0x12, 0xE0, 0x0C, 0x36, 0xF7, 0xB5, 0xF7, 0x57, 0x0F, 0xB4, 0x0F, 0x76, 0x0F, 0x75, 0x0F, 0xD7, 0x80, 0x4A, 0x60, 0xFF, 0x58, 0xFF, 0x78, 0xFB, 0xC4, 0xF0, 0xE4, 0xF0, 0xD4, 0xF0, 0x74, 0xF7, 0xCC, 0xF8, 0xEC, 0xF8, 0xDC, 0xF4, 0x7C, 0xFF, 0x97, 0xE9, 0xAF, 0x33, 0x60, 0x2D, 0x78, 0x78, 0x61, 0x79, 0x71, 0x79, 0x69, 0x79, 0x79, 0x7A, 0x65, 0x7D, 0x75, 0x7D, 0x6D, 0x7D, 0x7D, 0xFE, 0xC7, 0xF6, 0xCF, 0xED, 0x5F, 0xFB, 0xBF, 0xBF, 0x6F, 0xEC, 0x6F, 0x1E, 0x6F, 0x1D, 0x6F, 0x2F, 0xEF, 0x9C, 0xEF, 0x9E, 0xEF, 0x9D, 0xEF, 0xFF, 0x3E, 0xB8, 0x3E, 0xBC, 0x00, 0xBE, 0xF0, 0xF6, 0xC9, 0xFD, 0xE9, 0xFD, 0xD9, 0x03, 0x68, 0x05, 0x3C, 0x5F, 0xBE, 0x5F, 0xBD, 0x5F, 0x1F, 0xDF, 0x7C, 0xDF, 0x7E, 0xDF, 0x7D, 0xDF, 0x5F, 0x3F, 0xFC, 0x3F, 0xFE, 0x3F, 0xBF, 0x7E, 0xBE, 0x7F, 0xFE, 0xFF, 0x0F, 0xC0, 0x7F, 0x41, 0xA0, 0x40, 0xA0, 0x01, 0xA0, 0x1F, 0x60, 0x41, 0xE0, 0x40, 0xE0, 0x01, 0x10, 0x20, 0x10, 0x21, 0x90, 0x20, 0x90, 0x41, 0x50, 0x20, 0x50, 0x21, 0xD0, 0x20, 0xD0, 0x41, 0x80, 0x23, 0x08, 0x81, 0x05, 0x81, 0x0D, 0x82, 0x03, 0x81, 0x0B, 0x81, 0x07, 0x81, 0x0F, 0x42, 0x00, 0x43, 0x08, 0x43, 0x04, 0x43, 0x0C, 0x41, 0x02, 0x43, 0x0A, 0x43, 0x06, 0x43, 0x0E, 0x41, 0x01, 0x43, 0x09, 0x43, 0x05, 0x43, 0x0D, 0x41, 0x03, 0x43, 0x0B, 0x43, 0x07, 0x43, 0x0F, 0xC1, 0x80, 0xC0, 0x88, 0xC0, 0x84, 0xC0, 0x0C, 0xC3, 0x82, 0xC0, 0x8A, 0xC0, 0x86, 0xC0, 0x0E, 0xC3, 0x81, 0xC0, 0x89, 0xC0, 0x85, 0xC0, 0x0D, 0xC3, 0x83, 0xC0, 0x8B, 0xC0, 0x87, 0xC0, 0x0F, 0x23, 0x80, 0x22, 0x88, 0x22, 0x84, 0x22, 0x8C, 0x00, 0xDA, 0x81, 0x28, 0x62, 0x28, 0xE2, 0x08, 0x12, 0x28, 0x92, 0x28, 0x52, 0x28, 0xD2, 0x08, 0x32, 0x28, 0xB2, 0x28, 0x72, 0x28, 0xF2, 0x08, 0x0A, 0x18, 0x8A, 0x18, 0x4A, 0x18, 0xCA, 0x28, 0x2A, 0x18, 0xAA, 0x18, 0x6A, 0x18, 0xEA, 0x28, 0x1A, 0x18, 0x9A, 0x18, 0x5A, 0x18, 0xA0, 0x1E, 0x80, 0xA1, 0x8B, 0xA1, 0x87, 0xA1, 0x8F, 0x62, 0x80, 0x63, 0x88, 0x63, 0x84, 0x63, 0x8C, 0x61, 0x82, 0x63, 0x8A, 0x63, 0x86, 0x63, 0x8E, 0x61, 0x81, 0x63, 0x89, 0x63, 0x85, 0x63, 0x8D, 0x61, 0x83, 0x63, 0x8B, 0x63, 0x87, 0x63, 0x8F, 0xE1, 0x40, 0xE0, 0x48, 0xE0, 0x44, 0xE0, 0x8C, 0xE3, 0x42, 0x00, 0xFA, 0x41, 0x04, 0xEE, 0x38, 0x1E, 0x04, 0x9E, 0x04, 0x5E, 0x04, 0xDE, 0x38, 0x3E, 0x04, 0xBE, 0x04, 0x7E, 0x04, 0x60, 0x3B, 0x80, 0x24, 0x90, 0x24, 0x88, 0x24, 0x98, 0x20, 0x84, 0x24, 0x94, 0x24, 0x8C, 0x24, 0x9C, 0x20, 0x82, 0x24, 0x92, 0x24, 0x8A, 0x24, 0x9A, 0x20, 0x86, 0x24, 0x96, 0x24, 0x8E, 0x24, 0x9E, 0x20, 0x81, 0x22, 0x91, 0x22, 0x89, 0x22, 0x99, 0x24, 0x85, 0x22, 0x95, 0x22, 0x8D, 0x22, 0x9D, 0x24, 0x83, 0x22, 0x93, 0x22, 0x8B, 0x22, 0x9B, 0x24, 0x87, 0x22, 0x97, 0x22, 0x8F, 0x22, 0x9F, 0xA4, 0x80, 0xA6, 0x90, 0xA6, 0x88, 0xA6, 0x98, 0xA2, 0x84, 0xA6, 0x94, 0xA6, 0x8C, 0xA6, 0x9C, 0xA2, 0x82, 0xA6, 0x92, 0xA6, 0x8A, 0xA6, 0x9A, 0xA2, 0x86, 0xA6, 0x96, 0xA6, 0x8E, 0xA6, 0x9E, 0xA2, 0x81, 0xA1, 0x91, 0xA1, 0x89, 0x01, 0xAC, 0x07, 0x30, 0xB4, 0x32, 0xB4, 0x31, 0xB4, 0xD3, 0x80, 0x86, 0x20, 0x43, 0x17, 0x43, 0x37, 0x4D, 0x0F, 0x43, 0x2F, 0x43, 0x1F, 0x43, 0x3F, 0xCD, 0x00, 0xCB, 0x20, 0xCB, 0x10, 0xCB, 0x30, 0xC3, 0x08, 0xCB, 0x28, 0xCB, 0x18, 0xCB, 0x38, 0xC3, 0x04, 0xCB, 0x24, 0xCB, 0x14, 0xCB, 0x34, 0xC3, 0x0C, 0xCB, 0x2C, 0xCB, 0x1C, 0xCB, 0x3C, 0xC3, 0x02, 0xC7, 0x22, 0xC7, 0x12, 0xC7, 0x32, 0xCB, 0x0A, 0xC7, 0x2A, 0xC7, 0x1A, 0xC7, 0x3A, 0xCB, 0x06, 0xC7, 0x26, 0xC7, 0x16, 0xC7, 0x36, 0xCB, 0x0E, 0xC7, 0x2E, 0xC7, 0x1E, 0xC7, 0x3E, 0xCB, 0x01, 0xCF, 0x21, 0xCF, 0x11, 0xCF, 0x31, 0xC7, 0x09, 0xCF, 0x29, 0xCF, 0x19, 0xCF, 0x39, 0xC7, 0x05, 0xCF, 0x25, 0xCF, 0x15, 0xCF, 0x35, 0xC7, 0x0D, 0xCF, 0x2D, 0xCF, 0x1D, 0xCF, 0x3D, 0xC7, 0x83, 0xC0, 0xA3, 0xC0, 0x93, 0xC0, 0x33, 0xCF, 0x8B, 0xC0, 0xAB, 0xC0, 0x9B, 0xC0, 0x3B, 0xCF, 0x87, 0xC0, 0xA7, 0xC0, 0x97, 0xC0, 0x37, 0xCF, 0x8F, 0xC0, 0xAF, 0xC0, 0x9F, 0xC0, 0x3F, 0x2F, 0x80, 0x28, 0xA0, 0x28, 0x90, 0x28, 0xF0, 0x5B, 0x10, 0x51, 0x50, 0xF1, 0xFF, 0xB6, 0x22, 0x20, 0x89, 0x28, 0x89, 0x24, 0x89, 0x2C, 0x88, 0x22, 0x89, 0x2A, 0x89, 0x26, 0x89, 0x2E, 0x88, 0x21, 0x89, 0x29, 0x89, 0x25, 0x89, 0x2D, 0x88, 0x23, 0x89, 0x2B, 0x89, 0x27, 0x89, 0x2F, 0x48, 0x20, 0x4B, 0x28, 0x4B, 0x24, 0x4B, 0x2C, 0x4A, 0x22, 0x4B, 0x2A, 0x4B, 0x26, 0x4B, 0x2E, 0x4A, 0x21, 0x4B, 0x29, 0x4B, 0x25, 0x4B, 0x2D, 0x4A, 0x23, 0x4B, 0x2B, 0x4B, 0x27, 0x4B, 0x2F, 0xCA, 0xA0, 0x00, 0xD6, 0x83, 0x14, 0x99, 0x25, 0x59, 0x14, 0x59, 0x15, 0xD9, 0x14, 0xD9, 0x25, 0x39, 0x14, 0x39, 0x15, 0xB9, 0x14, 0xB9, 0x25, 0x79, 0x14, 0x79, 0x15, 0xF9, 0x14, 0xF9, 0x25, 0x05, 0x54, 0x05, 0x55, 0x85, 0x54, 0x85, 0x65, 0x45, 0x54, 0x40, 0x43, 0x48, 0x55, 0x5C, 0x56, 0x42, 0x55, 0x52, 0x55, 0x4A, 0x55, 0x5A, 0x56, 0x46, 0x55, 0x56, 0x55, 0x4E, 0x55, 0x5E, 0x56, 0x41, 0x53, 0x51, 0x53, 0x49, 0x53, 0x59, 0x51, 0x45, 0x53, 0x55, 0x53, 0x4D, 0x53, 0x5D, 0x51, 0x43, 0x53, 0x53, 0x53, 0x4B, 0x03, 0x14, 0x04, 0x34, 0x75, 0x35, 0xF5, 0x34, 0xF5, 0x15, 0x0D, 0x74, 0x0D, 0x75, 0x8D, 0x74, 0xC0, 0x76, 0x80, 0xAE, 0xA9, 0xAE, 0x99, 0xAE, 0xB9, 0xAA, 0x85, 0xAE, 0xA5, 0xAE, 0x95, 0xAE, 0xB5, 0xAA, 0x8D, 0xAE, 0xAD, 0xAE, 0x9D, 0xAE, 0xBD, 0xAA, 0x83, 0xA1, 0xA3, 0xA1, 0x93, 0xA1, 0xB3, 0xA6, 0x8B, 0xA1, 0xAB, 0xA1, 0x9B, 0xA1, 0xBB, 0xA6, 0x87, 0xA1, 0xA7, 0xA1, 0x97, 0xA1, 0xB7, 0xA6, 0x8F, 0xA1, 0xAF, 0xA1, 0x9F, 0xA1, 0xBF, 0x66, 0x80, 0x69, 0xA0, 0x69, 0x90, 0x69, 0xB0, 0x6E, 0x88, 0x69, 0xA8, 0x69, 0x98, 0x69, 0xB8, 0x6E, 0x84, 0x69, 0xA4, 0x69, 0x94, 0x69, 0xB4, 0x0E, 0x58, 0x0E, 0x34, 0x8D, 0x33, 0x8D, 0xD7, 0x4D, 0xB0, 0x4C, 0xB4, 0x4C, 0xB2, 0x4C, 0x36, 0x4C, 0xB1, 0x4C, 0xB5, 0x4C, 0xB3, 0x00, 0xED, 0x00, 0xCB, 0x4C, 0xCB, 0x2C, 0xCB, 0x6C, 0xC3, 0x1C, 0xCB, 0x5C, 0xCB, 0x3C, 0xCB, 0x7C, 0xC3, 0x02, 0xDB, 0x42, 0xDB, 0x22, 0xDB, 0x62, 0xD3, 0x12, 0xDB, 0x52, 0xDB, 0x32, 0xDB, 0x72, 0xD3, 0x0A, 0xDB, 0x4A, 0xDB, 0x2A, 0xDB, 0x6A, 0xD3, 0x1A, 0xDB, 0x5A, 0xDB, 0x3A, 0xDB, 0x7A, 0xD3, 0x06, 0xC7, 0x46, 0xC7, 0x26, 0xC7, 0x66, 0xCB, 0x16, 0xC7, 0x56, 0xC7, 0x36, 0xC7, 0x76, 0xCB, 0x0E, 0xC7, 0x4E, 0xC7, 0x2E, 0xC7, 0x6E, 0xCB, 0x1E, 0xC7, 0x5E, 0xC7, 0x3E, 0xC7, 0x7E, 0xCB, 0x01, 0xD7, 0x41, 0xD7, 0x21, 0xD7, 0x61, 0xDB, 0x11, 0xD7, 0x51, 0xD7, 0x31, 0xD7, 0x71, 0xDB, 0x09, 0xD7, 0x49, 0xD7, 0x29, 0xD7, 0x69, 0xDB, 0x19, 0xD7, 0x59, 0xD7, 0x39, 0xD7, 0x79, 0xDB, 0x05, 0xCF, 0x45, 0xCF, 0x25, 0xCF, 0x65, 0xC7, 0x15, 0xCF, 0x55, 0xEF, 0xBF, 0xD5, 0x00, 0xCF, 0x4D, 0xCF, 0x2D, 0xCF, 0x6D, 0xC7, 0x1D, 0xCF, 0x5D, 0xCF, 0x3D, 0xCF, 0x7D, 0xC7, 0x03, 0xDF, 0x43, 0xDF, 0x23, 0xDF, 0x63, 0xD7, 0x13, 0xDF, 0x53, 0xDF, 0x33, 0xDF, 0x73, 0xD7, 0x0B, 0xDF, 0x4B, 0xDF, 0x2B, 0xDF, 0x6B, 0xD7, 0x1B, 0xDF, 0x5B, 0xDF, 0x3B, 0xDF, 0x7B, 0xD7, 0x87, 0xC0, 0xC7, 0xC0, 0xA7, 0xC0, 0x67, 0xCF, 0x97, 0xC0, 0xD7, 0xC0, 0xB7, 0xC0, 0x77, 0xCF, 0x8F, 0xC0, 0xCF, 0xC0, 0xAF, 0xC0, 0x6F, 0xCF, 0x9F, 0xC0, 0xDF, 0xC0, 0xBF, 0xC0, 0x7F, 0x2F, 0x80, 0x30, 0xC0, 0x30, 0xA0, 0x30, 0x60, 0x3F, 0x90, 0x30, 0xD0, 0x30, 0xB0, 0xF0, 0xFF, 0xEF, 0x00, 0x85, 0x41, 0xFB, 0xC1, 0x84, 0xC1, 0x86, 0xC1, 0x85, 0xC1, 0xFB, 0x21, 0x44, 0x21, 0x46, 0x21, 0x45, 0x21, 0x07, 0xA1, 0x44, 0xA1, 0x46, 0xA1, 0x45, 0xA1, 0x07, 0x61, 0x44, 0x61, 0x46, 0x61, 0x45, 0x61, 0x07, 0xE1, 0x44, 0xE1, 0x46, 0xE1, 0x45, 0xE1, 0x07, 0x11, 0xC4, 0x11, 0xC6, 0x11, 0xC5, 0x11, 0x87, 0x91, 0xC4, 0x91, 0xC6, 0x91, 0xC5, 0x91, 0x87, 0x51, 0xC4, 0x51, 0xC6, 0x51, 0xC5, 0x51, 0x87, 0xD1, 0xC4, 0xD1, 0xC6, 0xD1, 0xC5, 0xD1, 0x87, 0x31, 0x24, 0x31, 0x26, 0x31, 0x25, 0x31, 0x47, 0x80, 0xDD, 0xC0, 0x24, 0xB6, 0x24, 0xF6, 0x28, 0x8E, 0x24, 0xCE, 0x24, 0xAE, 0x24, 0xEE, 0x28, 0x9E, 0x24, 0xDE, 0x24, 0xBE, 0x24, 0xFE, 0x28, 0x81, 0x34, 0xC1, 0x34, 0xA1, 0x34, 0xE1, 0x4F, 0x22, 0x69, 0xA2, 0x69, 0x62, 0x69, 0xE2, 0x9F, 0x24, 0xD2, 0x24, 0xD3, 0xFF, 0xAA, 0x01, 0x69, 0xB2, 0x69, 0x72, 0x69, 0xF2, 0x9F, 0x14, 0xB2, 0x14, 0xB3, 0x94, 0xB2, 0x94, 0xE3, 0x54, 0xB2, 0x54, 0xB3, 0xD4, 0xB2, 0xD4, 0xE3, 0x34, 0xB2, 0x34, 0xB3, 0xB4, 0xB2, 0xB4, 0xE3, 0x74, 0xB2, 0x74, 0xB3, 0xF4, 0xB2, 0xF4, 0xE3, 0x0C, 0xF2, 0x0C, 0xF3, 0x8C, 0xF2, 0x8C, 0x93, 0x4C, 0xF2, 0x4C, 0xF3, 0xCC, 0xF2, 0xCC, 0x93, 0x2C, 0xF2, 0x2C, 0xF3, 0xAC, 0xF2, 0xAC, 0x93, 0x6C, 0xF2, 0x6C, 0xF3, 0xEC, 0xF2, 0xEC, 0x93, 0x1C, 0x8A, 0x1C, 0x8B, 0x9C, 0x8A, 0x9C, 0xD3, 0x5C, 0x8A, 0x5C, 0x8B, 0xDC, 0x8A, 0xDC, 0xD3, 0x3C, 0x8A, 0x3C, 0x8B, 0xBC, 0x8A, 0xBC, 0xD3, 0x7C, 0x8A, 0x7C, 0x8B, 0xFC, 0x8A, 0xFC, 0xD3, 0x02, 0xCA, 0x02, 0xCB, 0x82, 0xCA, 0x82, 0xB3, 0x42, 0xCA, 0x42, 0xCB, 0xC2, 0xCA, 0xC2, 0xB3, 0x22, 0xCA, 0x22, 0xCB, 0xA2, 0xCA, 0xA2, 0xB3, 0x62, 0xCA, 0x62, 0xCB, 0xE2, 0xCA, 0xE2, 0xB3, 0xFF, 0xCF, 0x6A, 0x40, 0xFD, 0xBF, 0xAB, 0x06, 0xD5, 0x95, 0x17, 0x55, 0xD4, 0x55, 0xD6, 0x55, 0xD5, 0x55, 0x17, 0xD5, 0xD4, 0xD5, 0xD6, 0xD5, 0xD5, 0xD5, 0x17, 0x35, 0x34, 0x35, 0x36, 0x35, 0x35, 0x35, 0x97, 0xB5, 0x34, 0xB5, 0x36, 0xB5, 0x35, 0xB5, 0x97, 0x75, 0x34, 0x75, 0x36, 0x75, 0x35, 0x75, 0x97, 0xF5, 0x34, 0xF5, 0x36, 0xF5, 0x35, 0xF5, 0x97, 0x0D, 0xB4, 0x0D, 0xB6, 0x0D, 0xB5, 0x0D, 0x57, 0x8D, 0xB4, 0x8D, 0xB6, 0x8D, 0xB5, 0x8D, 0x57, 0x4D, 0xB4, 0x4D, 0xB6, 0x4D, 0xB5, 0x4D, 0x57, 0xCD, 0xB4, 0xCD, 0xB6, 0xCD, 0xB5, 0xCD, 0x57, 0x2D, 0x74, 0x2D, 0x76, 0x2D, 0x75, 0x2D, 0xD7, 0xAD, 0x74, 0xAD, 0x76, 0xAD, 0x75, 0xAD, 0xD7, 0x6D, 0x74, 0x6D, 0x76, 0x6D, 0x75, 0x6D, 0xD7, 0xED, 0x74, 0xED, 0x76, 0xED, 0x75, 0xED, 0xD7, 0x1D, 0xF4, 0x1D, 0xF6, 0x1D, 0xF5, 0x1D, 0x37, 0x9D, 0xF4, 0x9D, 0xF6, 0x9D, 0xF5, 0x9D, 0x37, 0x5D, 0xF4, 0x5D, 0xF6, 0x5D, 0xF5, 0x5D, 0x37, 0xDD, 0xF4, 0xDD, 0xF6, 0xDD, 0xF5, 0xDD, 0x37, 0x3D, 0x0C, 0x3D, 0x0E, 0x3D, 0x0D, 0x3D, 0xB7, 0x80, 0x6E, 0xE0, 0xD0, 0xDB, 0xD0, 0x7B, 0xDB, 0xC7, 0xD0, 0xE7, 0xD0, 0xD7, 0xD0, 0x77, 0xFB, 0x8B, 0xE1, 0x97, 0xC3, 0xAF, 0x86, 0x5F, 0xB7, 0xFD, 0x8C, 0xFD, 0x8E, 0xFD, 0x8D, 0xFD, 0x77, 0x03, 0x8C, 0x03, 0x8E, 0x03, 0x8D, 0x03, 0x77, 0xFF, 0xAB, 0x05, 0x30, 0x0E, 0x39, 0x0E, 0x35, 0x0E, 0xDD, 0x0D, 0x33, 0x0D, 0x3B, 0x0D, 0x37, 0x0D, 0xDF, 0x8F, 0x30, 0x8D, 0x38, 0x8D, 0x34, 0x8D, 0xDC, 0x8F, 0x32, 0x8D, 0x3A, 0x01, 0xCA, 0xC1, 0xFD, 0x18, 0xD3, 0x98, 0xD3, 0x58, 0xD3, 0xD8, 0xFD, 0x38, 0xF3, 0xB8, 0xF3, 0x78, 0xF3, 0xF8, 0xC3, 0x04, 0xF3, 0x84, 0xF3, 0x44, 0xF3, 0xC4, 0xC3, 0x24, 0xF3, 0xA4, 0xF3, 0x64, 0xF3, 0xE4, 0x03, 0x60, 0x29, 0x70, 0x9E, 0x6A, 0x9E, 0x7A, 0x98, 0x66, 0x99, 0x76, 0x99, 0x6E, 0x99, 0x7E, 0x9C, 0x61, 0x99, 0x71, 0x99, 0x69, 0x99, 0x79, 0x9C, 0x65, 0x99, 0x75, 0x99, 0x6D, 0x99, 0x7D, 0x9C, 0x63, 0x99, 0x73, 0x99, 0x6B, 0x99, 0x7B, 0x9C, 0x67, 0x9D, 0x77, 0x9D, 0x6F, 0x05, 0xB4, 0x03, 0x56, 0xC0, 0x4E, 0xD0, 0xFA, 0xFB, 0x69, 0x81, 0x75, 0xC1, 0x75, 0xA1, 0x75, 0xE1, 0x69, 0x91, 0x75, 0xD1, 0x75, 0xB1, 0x75, 0xF1, 0x69, 0x89, 0x6D, 0xC9, 0x6D, 0xA9, 0x6D, 0xE9, 0x79, 0x99, 0x6D, 0xD9, 0x6D, 0xB9, 0x6D, 0xF9, 0x79, 0x85, 0x6D, 0xC5, 0x6D, 0xA5, 0x6D, 0xE5, 0x79, 0x95, 0x6D, 0xD5, 0x6D, 0xB5, 0x6D, 0xF5, 0x79, 0x8D, 0x7D, 0xCD, 0x7D, 0xAD, 0x7D, 0xED, 0xEF, 0x3A, 0xFB, 0xBA, 0xFB, 0x7A, 0xFB, 0xFA, 0xDF, 0x0D, 0xF6, 0x0D, 0xF7, 0x8D, 0xF6, 0x8D, 0xBF, 0x9B, 0xEC, 0x9B, 0xEE, 0x9B, 0xED, 0x9B, 0x7F, 0xB7, 0x38, 0xB6, 0x3C, 0xB6, 0x3A, 0xB6, 0x5E, 0xB6, 0x39, 0xB6, 0x3D, 0xB6, 0x3B, 0xB6, 0x5F, 0x76, 0x38, 0xFE, 0x7F, 0xEC, 0xD5, 0x85, 0x61, 0xA3, 0x50, 0x00, 0x00, 0xD0, 0xAD, 0x2E, 0x9E, 0x6E, 0xD5, 0x18, 0xD0, 0xAD, 0x8A, 0x93, 0x45, 0x82, 0xBB, 0x3B, 0xDF, 0x3F, 0x37, 0x48, 0x79, 0x4B, 0xBC, 0xCF, 0xF7, 0xE7, 0xF7, 0xB3, 0xD8, 0xFF, 0xEC, 0x6F, 0xFB, 0xD7, 0x5E, 0x9C, 0x9D, 0x73, 0x73, 0x64, 0x07, 0xB8, 0x3B, 0xF7, 0xE6, 0xCA, 0x2E, 0xF0, 0x76, 0xDE, 0xCD, 0x93, 0x3D, 0xE0, 0xEF, 0xFC, 0x9B, 0x2F, 0xFB, 0x20, 0xD8, 0x07, 0xF7, 0x40, 0x09, 0x60, 0xB8, 0x0F, 0xEF, 0xA1, 0x12, 0xC2, 0x68, 0x1F, 0xDD, 0x23, 0x25, 0x82, 0xF1, 0x3E, 0xBE, 0xC7, 0x4A, 0x0C, 0x93, 0x43, 0xF2, 0x48, 0xD4, 0x04, 0xA5, 0x87, 0xF4, 0x91, 0xAA, 0x29, 0xCA, 0x0E, 0xD9, 0x23, 0x53, 0x33, 0x94, 0x1F, 0xF2, 0x47, 0xAE, 0xE6, 0xA8, 0x38, 0x16, 0xCF, 0x42, 0x2B, 0x70, 0x79, 0x2C, 0x9F, 0xA5, 0x56, 0xE2, 0xEA, 0x58, 0x3D, 0x2B, 0xAD, 0xC2, 0xF5, 0xB1, 0x7E, 0xD6, 0x5A, 0x8D, 0x9B, 0x53, 0xF3, 0x6A, 0xF4, 0x86, 0xB4, 0xA7, 0xF6, 0xD5, 0xEA, 0x2D, 0xE9, 0x4E, 0xDD, 0xAB, 0xD3, 0x3B, 0xD2, 0x9F, 0xFA, 0x57, 0xAF, 0xF7, 0x64, 0x38, 0x0F, 0xC2, 0x60, 0x0C, 0x74, 0x3C, 0x8F, 0xC2, 0x68, 0x8C, 0x74, 0x3A, 0x4F, 0xC2, 0x64, 0x4C, 0x74, 0x3E, 0xCF, 0xC2, 0x6C, 0xCC, 0x74, 0xB9, 0x2C, 0xE2, 0x62, 0x2E, 0x0C, 0x5C, 0x80, 0x08, 0x4C, 0xC0, 0xE0, 0x05, 0x8A, 0xD0, 0x84, 0x0C, 0x5D, 0x90, 0x88, 0x4C, 0xC4, 0xF0, 0x15, 0x4B, 0xD8, 0xC2, 0x9C, 0x5C, 0x89, 0x44, 0x2C, 0xC2, 0xE9, 0x95, 0x4A, 0xD4, 0xA2, 0x9C, 0x5D, 0x99, 0xC4, 0x2C, 0xC6, 0xF9, 0x17, 0xFF, 0xE1, 0x6F, 0xBE, 0xAE, 0x5F, 0xEB, 0xCF, 0xFA, 0xDE, 0xFE, 0xDF, 0xFE, 0xDF, 0xFE, 0xDF, 0xFE, 0xDF, 0xFE, 0xDF, 0xFE, 0xDF, 0xFE, 0xFF, 0x8B, 0xFF, 0xAF, 0xFF, 0x19, 0xAD, 0xEB, 0xB8, 0xAA, 0xEF, 0xFE, 0x8D, 0xE3, 0x97, 0xB3, 0xC5, 0xD6, 0x85, 0x79, 0x63, 0x63, 0x77, 0xA1, 0x6C, 0x60, 0x3B, 0xEC, 0x46, 0x41, 0x8E, 0x08, 0x43, 0xA4, 0xDB, 0xE6, 0x10, 0x02, 0x82, 0x88, 0x5D, 0x48, 0x89, 0x8D, 0xDD, 0x84, 0x1C, 0xD2, 0x0E, 0x7E, 0xF6, 0xC2, 0x5C, 0x27, 0x76, 0xEB, 0xF5, 0x3B, 0xEF, 0xC7, 0xFB, 0x8F, 0xB9, 0xDD, 0x7D, 0x6F, 0x7B, 0x72, 0xEA, 0xFB, 0xBA, 0xC8, 0xF3, 0xA1, 0x01, 0x00, 0x40, 0xDA, 0x02, 0xE8, 0x56, 0x9E, 0xB4, 0x34, 0x3B, 0x3A, 0x81, 0x34, 0x03, 0xD7, 0xCF, 0x45, 0x5B, 0x18, 0x20, 0x1A, 0x30, 0x62, 0xB8, 0xB8, 0x72, 0x63, 0xC7, 0x5F, 0xC4, 0x54, 0x5A, 0x42, 0x3C, 0xD1, 0x15, 0xE2, 0x7B, 0xFF, 0xD6, 0x1B, 0xAF, 0xF6, 0xEA, 0xA2, 0x0E, 0xED, 0xF1, 0x6B, 0x89, 0x38, 0xA5, 0xDF, 0xA5, 0x76, 0xA2, 0x01, 0x26, 0xAA, 0x39, 0x8D, 0x54, 0xF2, 0x0B, 0xEB, 0x3F, 0x77, 0xF4, 0xC8, 0xD6, 0x1D, 0xE3, 0x07, 0xEB, 0x0E, 0x8F, 0x1C, 0xEA, 0x8E, 0x15, 0xBA, 0xC3, 0xE1, 0x43, 0x31, 0xEE, 0x76, 0xFF, 0x9A, 0xBA, 0xA3, 0xC5, 0x35, 0x31, 0xCF, 0xE3, 0xEF, 0x3B, 0xDA, 0x4C, 0x52, 0x87, 0x3C, 0x60, 0x2D, 0x71, 0xCA, 0xBA, 0x1B, 0xDA, 0xD3, 0x3E, 0xDD, 0x3E, 0xCA, 0x1D, 0x29, 0x7E, 0xF1, 0x49, 0x86, 0xAB, 0xE8, 0x13, 0x49, 0xFA, 0xF8, 0xE8, 0x8E, 0x50, 0x77, 0x75, 0xC8, 0x14, 0x60, 0xC8, 0x14, 0xDD, 0x63, 0xF8, 0x8D, 0x04, 0x6A, 0x05, 0x06, 0x15, 0xEB, 0x0E, 0x03, 0xC4, 0xE8, 0xE9, 0x43, 0x9C, 0x75, 0x47, 0xB7, 0x49, 0xE2, 0xFE, 0xEF, 0x2C, 0xFF, 0xB6, 0xC3, 0x56, 0xA5, 0xE3, 0x9C, 0x3B, 0xDA, 0xFD, 0x4E, 0xFB, 0x5E, 0x3B, 0x4E, 0x18, 0x45, 0xEF, 0xF1, 0xE9, 0x99, 0x62, 0xF0, 0x86, 0x54, 0x8A, 0x81, 0x3F, 0x92, 0x21, 0x67, 0xB5, 0x1F, 0x59, 0x53, 0xFD, 0xBC, 0x18, 0xF8, 0xDC, 0xDC, 0xED, 0xDA, 0x1E, 0xDA, 0x05, 0x10, 0x66, 0x12, 0x1D, 0xC6, 0x79, 0x44, 0x8A, 0x2E, 0xF6, 0x2E, 0xF6, 0xBA, 0x43, 0x7B, 0x07, 0xA8, 0x3B, 0x68, 0x56, 0x9D, 0xD6, 0xFE, 0x99, 0x95, 0xE8, 0x91, 0x51, 0x6C, 0x21, 0x06, 0x5B, 0xE4, 0xDD, 0x80, 0x58, 0xAC, 0xDD, 0x85, 0xC7, 0x57, 0x38, 0x8A, 0x46, 0x44, 0x0E, 0x50, 0xC9, 0xC5, 0x6E, 0xDA, 0x4F, 0xF8, 0x44, 0x35, 0x02, 0x68, 0x77, 0x81, 0x74, 0x18, 0x64, 0x2E, 0x0F, 0xD2, 0x1D, 0x91, 0x57, 0x45, 0x5B, 0x2C, 0x3A, 0x24, 0x7A, 0x6D, 0xF0, 0xDA, 0xA0, 0x3B, 0xC6, 0xD7, 0x11, 0x77, 0x7F, 0xD6, 0x57, 0x7C, 0xEF, 0xEB, 0xE0, 0xE3, 0x73, 0x3E, 0x4A, 0x5C, 0x14, 0x7E, 0xBC, 0x8E, 0x5E, 0x53, 0xFB, 0xE1, 0xE1, 0x6B, 0xB5, 0x1F, 0x68, 0x84, 0x18, 0xD9, 0x56, 0x35, 0x3A, 0x91, 0x09, 0x89, 0xDA, 0x5F, 0x67, 0x50, 0x93, 0x96, 0x03, 0xD5, 0x5B, 0x92, 0xCE, 0x81, 0x80, 0x73, 0xA0, 0xD9, 0x9D, 0x55, 0x9E, 0xCF, 0x7A, 0x4E, 0x02, 0x75, 0x72, 0x56, 0x64, 0x8B, 0x2E, 0x03, 0x23, 0x06, 0xEA, 0x0E, 0x9F, 0xF2, 0xE2, 0xBE, 0xAD, 0xA3, 0xB7, 0x6A, 0xDF, 0x7D, 0xEA, 0x37, 0x29, 0x62, 0x44, 0xFF, 0x9C, 0x2D, 0x62, 0xCC, 0x63, 0xED, 0xC7, 0x9D, 0xD3, 0x5E, 0xC2, 0x19, 0x35, 0xAE, 0x9E, 0x1A, 0x9D, 0xA2, 0x46, 0x7A, 0x93, 0x6B, 0x6E, 0x6B, 0x3F, 0x95, 0xEA, 0xD6, 0x32, 0x55, 0x9E, 0x31, 0x61, 0x18, 0xE9, 0xD7, 0x06, 0xF0, 0x6B, 0xA3, 0x5F, 0x97, 0xD4, 0xF2, 0xA2, 0x2D, 0x36, 0x56, 0x12, 0x8D, 0x58, 0xD2, 0x45, 0xCC, 0x8B, 0x31, 0x80, 0xDA, 0x4B, 0xCE, 0x3D, 0x23, 0xAE, 0x29, 0xD3, 0xEB, 0x6F, 0x0A, 0x51, 0xD7, 0xF5, 0x55, 0x57, 0x4E, 0x9F, 0xBE, 0x45, 0x5C, 0xBB, 0x63, 0x42, 0xA9, 0xB8, 0xBA, 0x54, 0x5B, 0xC9, 0xAF, 0xC9, 0x94, 0xB1, 0xFA, 0x71, 0xC6, 0x26, 0x75, 0xDF, 0x23, 0x75, 0xBB, 0x0B, 0xD0, 0xCF, 0x9E, 0x5C, 0xD3, 0x0D, 0x98, 0xB5, 0x4D, 0x77, 0x2D, 0xF9, 0x90, 0xB4, 0xFF, 0xD8, 0x12, 0xA9, 0xD4, 0x1D, 0x9B, 0xDF, 0x88, 0x25, 0x09, 0xEB, 0xF6, 0x98, 0xAA, 0xB7, 0xB6, 0x27, 0x53, 0x69, 0x44, 0x85, 0xDD, 0xE4, 0x96, 0xDD, 0x73, 0x6E, 0xE8, 0xE7, 0x66, 0x80, 0x5A, 0x31, 0x4C, 0xDC, 0x1A, 0x56, 0x6E, 0x97, 0x98, 0xBE, 0xF3, 0xBD, 0xCF, 0x5D, 0x9C, 0xF3, 0xE7, 0xC7, 0x99, 0x73, 0xD5, 0x6C, 0x1B, 0xD5, 0x44, 0xC0, 0xAA, 0x8D, 0x58, 0xC5, 0x69, 0x98, 0x13, 0x79, 0x60, 0x10, 0x10, 0xF5, 0x0F, 0x32, 0xAF, 0x3A, 0x90, 0x52, 0x9D, 0x3C, 0x71, 0x0B, 0x38, 0x79, 0xD7, 0x12, 0x90, 0x55, 0x6C, 0x6E, 0x0D, 0x90, 0x85, 0xD6, 0x0D, 0x1B, 0x8B, 0xD9, 0x8D, 0xEA, 0xFA, 0x88, 0x07, 0xBD, 0xAB, 0x07, 0x8B, 0xBB, 0x83, 0x2A, 0x27, 0x8A, 0xDB, 0x13, 0xCB, 0x7B, 0x89, 0x19, 0x9E, 0x7F, 0xDB, 0x41, 0x32, 0xA3, 0x44, 0x3F, 0x3E, 0xB4, 0x48, 0x35, 0x51, 0x3D, 0xB7, 0x06, 0xB0, 0x58, 0x43, 0x7E, 0x55, 0x13, 0xB0, 0x05, 0xF9, 0x70, 0x6D, 0x9D, 0x75, 0x53, 0x5C, 0x49, 0xD2, 0x16, 0x89, 0x47, 0x8C, 0x20, 0x81, 0x6C, 0x3B, 0xFD, 0xAB, 0x70, 0xF8, 0x98, 0x3E, 0x47, 0x5E, 0x6B, 0x29, 0x3B, 0xC6, 0xD4, 0x7E, 0x2C, 0xEE, 0x7F, 0x54, 0x2D, 0x46, 0xDC, 0x15, 0x5D, 0xA1, 0x54, 0xDC, 0x72, 0x09, 0xD5, 0xC4, 0xB4, 0xAA, 0x40, 0x8D, 0x79, 0x7F, 0xDD, 0xB1, 0xAB, 0x81, 0x7E, 0x9C, 0xB3, 0x55, 0x3D, 0x39, 0x4D, 0xBD, 0xDD, 0x5A, 0x7D, 0xD7, 0x56, 0xAF, 0x4D, 0x7E, 0x94, 0x31, 0x29, 0xC3, 0x64, 0xB6, 0x4A, 0x4E, 0x6C, 0x76, 0xF9, 0x42, 0xB2, 0x7C, 0x61, 0x46, 0x41, 0x83, 0xAB, 0xE4, 0xB0, 0x71, 0x0E, 0x57, 0x7A, 0xAF, 0x3C, 0xEF, 0x25, 0xD7, 0xAB, 0x36, 0x6F, 0x61, 0x20, 0xB9, 0x6B, 0x9E, 0xEE, 0xCA, 0xCC, 0xD2, 0xD7, 0xEE, 0x3A, 0xAE, 0x6E, 0x9D, 0xAF, 0xA6, 0xBD, 0x55, 0x65, 0x47, 0xCD, 0x27, 0x22, 0x79, 0xC0, 0xEE, 0xAF, 0x5F, 0x87, 0x2B, 0x8F, 0xD5, 0xC7, 0xBB, 0x54, 0x12, 0xB0, 0x68, 0x72, 0xA3, 0x9E, 0xE8, 0xDA, 0x3A, 0xAA, 0xBB, 0x68, 0x04, 0x20, 0x86, 0xEC, 0x14, 0x2D, 0xD1, 0x67, 0x09, 0xF0, 0xF6, 0x0F, 0x72, 0xDD, 0x18, 0x60, 0x6F, 0x2D, 0xBD, 0xBE, 0x11, 0xEA, 0xF8, 0x64, 0xD5, 0x16, 0x6A, 0xC7, 0xA9, 0xAA, 0xEE, 0x50, 0x53, 0xFC, 0xC9, 0xEC, 0xD3, 0xDA, 0x3B, 0x6B, 0xA5, 0xFE, 0x74, 0x5A, 0x25, 0xC5, 0xDF, 0xFA, 0x88, 0xD5, 0xFB, 0x1E, 0x74, 0x15, 0x1D, 0x27, 0xB8, 0xF4, 0x27, 0x1B, 0x1D, 0x9F, 0x76, 0xBC, 0xBC, 0xAF, 0xDC, 0x1E, 0xE8, 0x5B, 0xD3, 0x81, 0xB4, 0x45, 0x25, 0xE7, 0x5A, 0xED, 0x49, 0xD2, 0xB7, 0x3D, 0x70, 0x67, 0x38, 0x99, 0xD8, 0xA5, 0x76, 0x98, 0x29, 0x96, 0x5C, 0x1E, 0xA6, 0x7B, 0xD6, 0xBB, 0xAB, 0xAB, 0x07, 0x03, 0xB6, 0x31, 0x64, 0xF2, 0x53, 0xDD, 0xB5, 0x71, 0x35, 0xD0, 0xEA, 0x0A, 0xB9, 0xC9, 0x85, 0xCC, 0xBF, 0xAC, 0xDD, 0xAF, 0xEF, 0xA9, 0xDA, 0x7F, 0x5A, 0xAA, 0x96, 0xFE, 0x4C, 0x56, 0xF1, 0xAF, 0xE2, 0xAF, 0x3F, 0x0F, 0x93, 0x33, 0x7B, 0x9E, 0x12, 0x6D, 0x01, 0x88, 0x56, 0x09, 0x2A, 0x60, 0x77, 0x9A, 0x24, 0xCB, 0x9D, 0xAE, 0x5F, 0x43, 0x0C, 0xAA, 0x0E, 0x5C, 0xCF, 0x20, 0x23, 0xAE, 0x54, 0xB4, 0x32, 0x91, 0x5C, 0x6C, 0x05, 0x6C, 0x48, 0x22, 0xE3, 0x62, 0x75, 0x4F, 0xBC, 0x93, 0x1A, 0x3B, 0x0E, 0x08, 0x7D, 0x4D, 0xC6, 0x54, 0x24, 0x2F, 0x5B, 0x69, 0xFF, 0xE5, 0x64, 0x91, 0x16, 0xA4, 0x78, 0xEB, 0xA0, 0xBA, 0x2B, 0x44, 0x6C, 0x17, 0xEA, 0x35, 0x8C, 0xAC, 0xE8, 0xD6, 0xCA, 0x4D, 0xBB, 0xBD, 0x6B, 0xAB, 0x80, 0xAA, 0x1A, 0x55, 0x92, 0x53, 0x1A, 0xAA, 0xFE, 0x9B, 0x81, 0x5B, 0xB3, 0xC8, 0x79, 0xB3, 0x01, 0xD9, 0xB3, 0xE0, 0x67, 0xE0, 0xD0, 0x51, 0x32, 0xCC, 0x7C, 0x7B, 0x4D, 0x82, 0xBE, 0x62, 0xF1, 0x2E, 0x91, 0xFC, 0x63, 0xEC, 0xFB, 0x5F, 0x87, 0x3B, 0x54, 0x4D, 0x54, 0xA3, 0xBF, 0x13, 0x1B, 0xF5, 0x1C, 0xBD, 0x45, 0x04, 0xAA, 0x34, 0x56, 0xFF, 0xDD, 0x8E, 0xDE, 0x06, 0xEA, 0x2B, 0x21, 0x8E, 0xAB, 0xA2, 0xBA, 0xAE, 0xD5, 0x2B, 0x7B, 0xAD, 0x01, 0xCE, 0xAD, 0x26, 0x7D, 0x9D, 0xB4, 0xE0, 0xF7, 0x19, 0x70, 0xA4, 0x3B, 0xE9, 0x7F, 0x91, 0xD4, 0x57, 0xFD, 0xE8, 0xA9, 0x9E, 0xEB, 0xA6, 0xA6, 0x52, 0x75, 0x9B, 0xA6, 0x36, 0xF7, 0x53, 0x81, 0xFF, 0xB4, 0x43, 0x4D, 0x79, 0x05, 0xF4, 0x5C, 0xF1, 0xFE, 0x9E, 0xC1, 0x81, 0xEA, 0xA4, 0x26, 0xC0, 0xAF, 0xE6, 0x82, 0xE3, 0x68, 0xE0, 0x66, 0x3C, 0x39, 0x23, 0x07, 0x38, 0xD3, 0x98, 0x74, 0x99, 0x4D, 0x4E, 0x9A, 0xA9, 0xCF, 0x36, 0x40, 0xED, 0x64, 0x03, 0x7C, 0x56, 0xAC, 0xD7, 0x30, 0x40, 0xAC, 0xD8, 0xC2, 0xAD, 0x85, 0x38, 0xFD, 0xD9, 0xD8, 0x9D, 0xA2, 0x11, 0xBD, 0x37, 0xBE, 0x7F, 0x0E, 0xCA, 0xFD, 0xE1, 0xEF, 0xE7, 0x8F, 0x5A, 0x2F, 0xD5, 0xEE, 0x7B, 0xD5, 0x41, 0x45, 0xBF, 0xEE, 0x14, 0x27, 0xF5, 0xBA, 0xD4, 0x54, 0x9C, 0xDE, 0xC7, 0x44, 0x6D, 0x66, 0xBD, 0x52, 0xC9, 0xA9, 0x95, 0xB4, 0xEF, 0x55, 0xA2, 0xDA, 0x56, 0x05, 0x6C, 0xEA, 0x90, 0xCD, 0xBF, 0x00, 0x26, 0xAF, 0xD6, 0x3D, 0xBE, 0xFD, 0xC5, 0xF1, 0x49, 0x33, 0xFC, 0x45, 0xDF, 0x93, 0x36, 0x15, 0xC4, 0x8C, 0xBE, 0xCD, 0x2C, 0xC4, 0x13, 0x83, 0xFF, 0xBE, 0xA3, 0x55, 0x96, 0x3A, 0xB8, 0xA2, 0x3A, 0x29, 0xED, 0xDA, 0x3B, 0xD1, 0xF9, 0x55, 0x5E, 0x03, 0x71, 0xE6, 0x90, 0xBC, 0x23, 0x10, 0x93, 0x33, 0x06, 0x89, 0xDE, 0xF5, 0x49, 0xD7, 0xC7, 0xDA, 0x0F, 0x6C, 0xAD, 0xF6, 0x36, 0x02, 0x83, 0x63, 0xC8, 0x46, 0xFD, 0x81, 0xE9, 0x69, 0xBA, 0x23, 0x64, 0xB6, 0x68, 0x17, 0xEB, 0xFE, 0x40, 0x9C, 0x32, 0xC1, 0xD0, 0x4F, 0xDC, 0xE6, 0xD2, 0xF9, 0x43, 0x8A, 0xF5, 0x1B, 0xD7, 0xFE, 0xEB, 0x8E, 0x01, 0x47, 0x54, 0xC7, 0x4F, 0x6E, 0x5F, 0x13, 0x5D, 0x4B, 0x72, 0xB3, 0x44, 0xCF, 0xDC, 0xFC, 0x50, 0x71, 0xF6, 0xBD, 0x94, 0x31, 0x62, 0xF0, 0x82, 0x54, 0x8A, 0x01, 0x21, 0xA4, 0xD7, 0x70, 0xED, 0xCF, 0x49, 0x54, 0x13, 0xFE, 0x50, 0xC7, 0x9C, 0x05, 0x46, 0xF9, 0xEA, 0x8E, 0xB0, 0x8F, 0xC5, 0x21, 0xAF, 0xFC, 0xCB, 0x8B, 0x06, 0x2B, 0xE7, 0x50, 0x71, 0x7B, 0x97, 0xBE, 0xFD, 0xC5, 0x34, 0x3B, 0x9B, 0x31, 0xDA, 0xAD, 0xBF, 0x4F, 0x9D, 0xF6, 0xE6, 0x55, 0x1B, 0xD1, 0x3D, 0x26, 0x7F, 0xBF, 0x18, 0xF8, 0xAE, 0x28, 0x45, 0x0C, 0x38, 0x95, 0x7C, 0x5F, 0x5C, 0x38, 0x6F, 0x69, 0xB0, 0x18, 0x31, 0x30, 0x7C, 0x82, 0x68, 0x94, 0xE7, 0x9C, 0xD0, 0x6E, 0xEC, 0x48, 0x75, 0x95, 0x9D, 0x3A, 0xAC, 0x08, 0x70, 0xBC, 0x43, 0x3A, 0xB6, 0x02, 0xA6, 0xB5, 0xD4, 0x3D, 0x71, 0x71, 0xA2, 0xDB, 0xB7, 0xDE, 0x47, 0xC4, 0x1D, 0x6B, 0xBC, 0x13, 0xC5, 0xE3, 0xA7, 0xDD, 0x1D, 0xB5, 0xDF, 0xE7, 0x73, 0xD5, 0xFB, 0xCE, 0xA9, 0x5F, 0xC5, 0xB0, 0xC6, 0xC7, 0x66, 0x88, 0x46, 0x63, 0xC6, 0x46, 0x71, 0xD1, 0x97, 0xEB, 0xED, 0x20, 0xAE, 0x5C, 0x38, 0x4C, 0x8C, 0x68, 0x6D, 0x84, 0x59, 0x3D, 0x8F, 0x55, 0xD0, 0xEE, 0x72, 0x5B, 0x35, 0xA9, 0xB3, 0xBA, 0x78, 0x27, 0xD0, 0x7B, 0x1C, 0x39, 0x33, 0x01, 0x70, 0x1E, 0xA3, 0x3B, 0xD6, 0x9C, 0x14, 0x07, 0x35, 0x4F, 0x7C, 0x27, 0x86, 0xDD, 0x4B, 0xE8, 0x23, 0xEE, 0xB9, 0xB0, 0xFC, 0xB4, 0xF6, 0x5D, 0x92, 0xBE, 0x79, 0x20, 0x86, 0xC7, 0xE5, 0x3C, 0x15, 0xA3, 0x97, 0xA4, 0x25, 0x89, 0x4B, 0x4E, 0xCF, 0xBB, 0x2A, 0x26, 0xBC, 0x5C, 0x24, 0x72, 0xC9, 0xB8, 0xA8, 0x49, 0x62, 0x94, 0xAB, 0xEE, 0x88, 0x98, 0x4C, 0x2E, 0x1D, 0xAA, 0xDD, 0x0D, 0xD6, 0x6A, 0xEA, 0x0D, 0x35, 0xE3, 0x34, 0xD0, 0xF2, 0x3E, 0x19, 0xB2, 0x06, 0x70, 0xDD, 0x4A, 0xCE, 0xB6, 0x04, 0x22, 0xDE, 0x90, 0x55, 0x27, 0x77, 0x31, 0x6C, 0x0E, 0x94, 0x6E, 0x74, 0x6E, 0xDA, 0x03, 0xF1, 0xF2, 0xEE, 0xCC, 0x5D, 0x22, 0x19, 0x13, 0x58, 0x30, 0x5D, 0x5C, 0x5D, 0x16, 0x72, 0x52, 0x4C, 0x3E, 0x12, 0x31, 0x56, 0x5C, 0x13, 0x19, 0x9B, 0x25, 0x26, 0x76, 0x71, 0x71, 0x15, 0xD7, 0x46, 0xB8, 0x64, 0x89, 0x2B, 0xDF, 0x68, 0x2B, 0xB9, 0x0B, 0xB9, 0x6A, 0xAB, 0x7E, 0x9C, 0x5E, 0x55, 0xDD, 0xB6, 0x4F, 0x3D, 0xD6, 0x5E, 0x4D, 0x6F, 0x0B, 0xD8, 0x37, 0x20, 0xE3, 0xBD, 0x00, 0x63, 0x22, 0x39, 0xDB, 0x05, 0x48, 0xCD, 0x94, 0x6E, 0x07, 0xDF, 0xA2, 0x52, 0xED, 0x17, 0x7E, 0x5F, 0x1C, 0xFE, 0xC1, 0x23, 0x72, 0xD3, 0xCD, 0x78, 0x8F, 0x8A, 0x17, 0xC9, 0xB4, 0xE2, 0xC4, 0x3D, 0x90, 0xAF, 0xED, 0x6F, 0x81, 0xBB, 0xC5, 0xE4, 0xD5, 0xD0, 0x6B, 0xA7, 0xAB, 0xE9, 0x1B, 0xD5, 0xB4, 0x5A, 0x6A, 0xCA, 0x5E, 0x32, 0xA9, 0x29, 0xF4, 0x3E, 0x0B, 0x75, 0xDF, 0x79, 0xB5, 0xE0, 0x3B, 0xB5, 0xF0, 0x77, 0xC0, 0xA6, 0x07, 0xB9, 0xBD, 0x3B, 0x10, 0x63, 0x4D, 0x96, 0xEC, 0x06, 0xD6, 0x6D, 0x27, 0x8F, 0x16, 0x00, 0x17, 0x56, 0xEA, 0x39, 0x88, 0xAC, 0xDD, 0x19, 0x20, 0xF3, 0x2E, 0xD7, 0xE9, 0x2E, 0x66, 0x4F, 0xAE, 0xB3, 0x57, 0x3C, 0xB0, 0xC7, 0xE2, 0xA0, 0x98, 0x79, 0xA0, 0xD2, 0x59, 0x71, 0xDB, 0x99, 0x0F, 0x0E, 0x89, 0x9B, 0x0F, 0x02, 0x62, 0xEA, 0x97, 0x50, 0xF9, 0xE7, 0x59, 0x64, 0x7B, 0x9C, 0x9A, 0xB5, 0x4B, 0x35, 0x2D, 0x55, 0x4B, 0x3F, 0x05, 0x7A, 0x16, 0x91, 0x5F, 0x99, 0x4B, 0x41, 0xC9, 0x24, 0xD9, 0xF2, 0xD6, 0xD2, 0xEF, 0xD2, 0x5B, 0x92, 0x40, 0xA1, 0xD4, 0x68, 0xC4, 0x37, 0x71, 0x40, 0xC7, 0x39, 0xA4, 0xA9, 0x10, 0x68, 0x3C, 0x99, 0xCC, 0x69, 0x5C, 0xCF, 0xD0, 0x52, 0x3E, 0xA7, 0x1F, 0x2C, 0xFE, 0xD1, 0xDA, 0xEC, 0xCE, 0x29, 0xE5, 0x37, 0x58, 0x49, 0xFF, 0x1D, 0xD0, 0xFA, 0x2A, 0x99, 0x72, 0x0F, 0xA8, 0xBA, 0x8D, 0x4C, 0xBD, 0xF3, 0xE7, 0x8E, 0xB4, 0x22, 0xFD, 0xF8, 0x40, 0xB2, 0x9A, 0xA7, 0xF2, 0x72, 0x84, 0xFA, 0xFB, 0x72, 0xA0, 0xF1, 0x38, 0xE9, 0x37, 0x3C, 0x3E, 0x31, 0xEE, 0xDC, 0x28, 0xE9, 0xC7, 0x45, 0xB4, 0xBD, 0x25, 0xE6, 0xB6, 0xD0, 0x53, 0xC5, 0x96, 0x60, 0xE0, 0xFB, 0x7E, 0x64, 0xAA, 0x6B, 0xE5, 0x8B, 0x8B, 0x26, 0x93, 0xDB, 0xB7, 0x02, 0xDD, 0x4E, 0x91, 0xBB, 0x03, 0x80, 0x4F, 0x97, 0x91, 0x19, 0xAE, 0x40, 0x9F, 0x2C, 0x32, 0xB5, 0x12, 0xD0, 0xF8, 0xB0, 0xD9, 0x53, 0x40, 0x33, 0x6B, 0x32, 0xCD, 0x0A, 0xA8, 0x5B, 0x87, 0x7A, 0x1E, 0xF3, 0x87, 0xF6, 0x0F, 0xA9, 0xE7, 0xE7, 0xA8, 0x65, 0xB6, 0xAA, 0xF4, 0x6A, 0xA5, 0x7C, 0xE9, 0x25, 0x3A, 0xF6, 0x8F, 0xCF, 0x16, 0x17, 0x17, 0x02, 0xE2, 0xA6, 0xB6, 0xE2, 0x54, 0xA7, 0xF5, 0xB3, 0x1A, 0x54, 0x20, 0xC9, 0xB9, 0x77, 0x81, 0x4B, 0x81, 0xE4, 0x5A, 0x23, 0x90, 0xD6, 0x81, 0x4C, 0xEA, 0x04, 0x18, 0xCF, 0x90, 0x1B, 0xE5, 0xBD, 0xC2, 0x9E, 0xCC, 0x38, 0x09, 0xF4, 0xBB, 0x45, 0xA6, 0x1E, 0x03, 0x9A, 0x7C, 0x48, 0xA6, 0x6F, 0xD6, 0x73, 0xD0, 0xA6, 0xFF, 0x23, 0x8F, 0x9E, 0xD1, 0x5E, 0x49, 0x96, 0xFA, 0x8B, 0xB5, 0x4A, 0x8A, 0x3F, 0xC4, 0x8A, 0x55, 0xF2, 0x0F, 0xDA, 0x8B, 0xC3, 0x42, 0x83, 0xBE, 0x22, 0x9B, 0xD7, 0x9B, 0xF2, 0x54, 0x77, 0xCC, 0x0F, 0xB1, 0xE8, 0x47, 0x76, 0xB8, 0x3A, 0x71, 0xD5, 0xC0, 0x38, 0x92, 0x2C, 0x1F, 0xDF, 0xC0, 0x4D, 0x9C, 0xB7, 0x0D, 0xB8, 0x7E, 0x90, 0x8C, 0xBC, 0x50, 0x69, 0x6E, 0xD1, 0x79, 0x32, 0xEA, 0x14, 0xB0, 0xB6, 0x2E, 0x19, 0x77, 0x1C, 0x30, 0x2E, 0x34, 0x3B, 0x1A, 0x88, 0x6E, 0x4B, 0x2E, 0x7E, 0x05, 0x04, 0x2F, 0x24, 0xA3, 0x0F, 0x90, 0x05, 0x6D, 0xB5, 0x7B, 0xBF, 0x9F, 0xAA, 0xFD, 0xDF, 0x6A, 0xAB, 0xA7, 0x46, 0x93, 0xB5, 0x3D, 0xAA, 0x55, 0x8A, 0xBD, 0x2A, 0xB7, 0xFB, 0x54, 0xEC, 0xBE, 0x42, 0x1C, 0x3A, 0x05, 0x10, 0x7B, 0x8D, 0x17, 0x6D, 0x6E, 0x01, 0xA2, 0x7B, 0xA2, 0x4A, 0xBA, 0x4C, 0x54, 0x83, 0x7E, 0x04, 0xEE, 0x37, 0x21, 0xE7, 0x05, 0x00, 0xA6, 0x3E, 0xE4, 0xFC, 0xB9, 0xC0, 0x71, 0x7B, 0x72, 0xE1, 0x33, 0x60, 0x65, 0x28, 0x19, 0xF1, 0x89, 0x9E, 0x2C, 0x8C, 0x20, 0xAF, 0xF7, 0x78, 0xBF, 0xFF, 0xE8, 0x47, 0xF5, 0xB2, 0x93, 0xBA, 0x75, 0x82, 0xEA, 0xBE, 0x58, 0xB4, 0xB8, 0xD9, 0xD4, 0xF1, 0xDF, 0xBF, 0xEF, 0x2F, 0xF2, 0x07, 0x7A, 0x74, 0x7A, 0xFF, 0xFD, 0x7E, 0x92, 0x85, 0xEA, 0x3A, 0x19, 0xF8, 0x66, 0x1D, 0xE9, 0xD1, 0x0D, 0xB8, 0x1C, 0x4B, 0x7A, 0x76, 0x05, 0xF2, 0x4A, 0x48, 0x6F, 0xF3, 0xED, 0x2C, 0x83, 0xD9, 0x5D, 0xE4, 0xCB, 0x91, 0x00, 0xF0, 0xFA, 0x73, 0x52, 0xBC, 0x15, 0xAE, 0x1E, 0x7A, 0xA9, 0x86, 0xDF, 0x56, 0xAD, 0xA3, 0x55, 0xE0, 0xDF, 0xBB, 0xF6, 0x9E, 0x6A, 0x34, 0xDB, 0xA1, 0xFD, 0xFB, 0x7B, 0xEC, 0xBD, 0xD4, 0x71, 0x57, 0x81, 0x67, 0x3F, 0x92, 0x53, 0xBF, 0xF8, 0xE4, 0xE3, 0xBB, 0x7D, 0xC8, 0x51, 0x6F, 0x81, 0x52, 0x2B, 0xD2, 0x00, 0x96, 0xFD, 0xED, 0x1C, 0x76, 0x4E, 0x5D, 0xD5, 0x57, 0x9D, 0xE8, 0xA6, 0x56, 0x39, 0xF1, 0xBF, 0x9D, 0x83, 0x54, 0xF5, 0x99, 0x0D, 0x60, 0x09, 0xDD, 0xD3, 0x2D, 0x41, 0x05, 0x44, 0x9B, 0xA3, 0xEA, 0x60, 0x5F, 0xE0, 0x57, 0x77, 0x72, 0x58, 0x39, 0xD2, 0xBE, 0xBA, 0x3E, 0x3A, 0x79, 0x82, 0x6A, 0x0B, 0xC0, 0xAA, 0x0A, 0x69, 0x69, 0x76, 0xC8, 0xBB, 0xF7, 0xCF, 0x43, 0xFD, 0x4C, 0xD3, 0x4C, 0xA2, 0x01, 0x83, 0xCA, 0xC4, 0x8D, 0x79, 0xDD, 0x4A, 0xC5, 0x43, 0xB7, 0x2D, 0xCB, 0x89, 0xEF, 0xC6, 0x35, 0x1D, 0x27, 0x92, 0x16, 0xC3, 0xD4, 0x4E, 0x31, 0xAA, 0x2D, 0x1E, 0xED, 0x14, 0x47, 0xFE, 0x5C, 0xFA, 0x93, 0xE8, 0x50, 0x66, 0xA2, 0xE8, 0xF8, 0x63, 0x76, 0x1B, 0x71, 0xFA, 0x0C, 0x72, 0x54, 0x6F, 0xED, 0x4F, 0xFB, 0x5A, 0xF5, 0x69, 0xA1, 0x5A, 0x77, 0x04, 0x6C, 0xF6, 0x91, 0x55, 0xEA, 0x03, 0x33, 0x9E, 0x92, 0xC0, 0x90, 0xE6, 0x4E, 0x49, 0xE2, 0xF4, 0x43, 0x86, 0x70, 0x71, 0xC3, 0xBB, 0xC1, 0xCD, 0xC4, 0x2D, 0x7B, 0x46, 0xED, 0x23, 0xCB, 0x5F, 0x23, 0x7B, 0xD4, 0xD1, 0x6E, 0xA3, 0x18, 0xD5, 0xCE, 0x51, 0x1D, 0x73, 0xE3, 0x9A, 0x8F, 0xE8, 0x92, 0x69, 0xDA, 0x20, 0x1A, 0x5A, 0x9A, 0x66, 0x8A, 0xCE, 0x4F, 0xF7, 0xAF, 0x16, 0x67, 0xA6, 0x93, 0x63, 0xBD, 0xB5, 0xEB, 0xB6, 0x5D, 0x0D, 0x6D, 0xA0, 0x0E, 0xFC, 0x02, 0xB0, 0xAB, 0x4B, 0xB6, 0xF8, 0x05, 0x70, 0xF6, 0x24, 0x81, 0x0A, 0x1F, 0x05, 0x6C, 0x12, 0x5D, 0xC6, 0x1A, 0xE2, 0xC4, 0xF4, 0xDA, 0x53, 0x6C, 0xC5, 0xFD, 0x99, 0x2E, 0x95, 0xC9, 0x26, 0x6B, 0xCC, 0x5D, 0x7F, 0xED, 0xF6, 0xF9, 0x58, 0x9D, 0x78, 0xED, 0xC7, 0xAA, 0xA2, 0xE1, 0x65, 0xF6, 0x5D, 0x71, 0x96, 0x75, 0x41, 0x05, 0xD1, 0x7D, 0x68, 0x6A, 0xB6, 0x18, 0xF0, 0x7F, 0xA9, 0x14, 0x7D, 0x03, 0xC8, 0x09, 0x7B, 0xB5, 0xEB, 0x3D, 0x4F, 0x9D, 0xBF, 0x5F, 0xED, 0xEF, 0x07, 0x8C, 0xEE, 0x42, 0x36, 0x9F, 0x02, 0x18, 0x4E, 0x93, 0x00, 0x10, 0x35, 0x54, 0x1C, 0x39, 0x68, 0x6E, 0x91, 0xE8, 0xFB, 0xD5, 0xBC, 0xCB, 0xE2, 0xD1, 0x2C, 0xFF, 0x11, 0xE4, 0x07, 0xEB, 0x48, 0xD7, 0xC5, 0xDA, 0x1F, 0x53, 0xF0, 0xEA, 0x95, 0xE8, 0xD2, 0xAC, 0xE0, 0x7B, 0xD1, 0xCF, 0x50, 0xB4, 0x50, 0xF4, 0x1D, 0x91, 0xB2, 0x43, 0x9C, 0x37, 0x3F, 0xA3, 0x8A, 0x18, 0x32, 0x36, 0xA2, 0x4C, 0x5C, 0xF8, 0x84, 0x9C, 0xFC, 0x4A, 0xBB, 0xC1, 0x05, 0x6A, 0xF4, 0x0B, 0x75, 0x55, 0x1D, 0xD5, 0xA9, 0x16, 0x30, 0x5A, 0x4F, 0xED, 0x88, 0xFF, 0x5D, 0xB4, 0xDB, 0x1D, 0xB5, 0x5C, 0x9C, 0x3F, 0x2F, 0x66, 0x98, 0xB8, 0xFB, 0x61, 0xCC, 0x2F, 0xDA, 0x37, 0x6E, 0x54, 0x67, 0x66, 0x9D, 0x2D, 0x12, 0xE7, 0x2D, 0x2F, 0x3C, 0x0B, 0xD1, 0x3D, 0x35, 0x5C, 0x0C, 0x77, 0x5A, 0x35, 0x4E, 0x34, 0x1E, 0x8D, 0x98, 0x02, 0x71, 0xD6, 0x9F, 0xE7, 0x20, 0xAF, 0x00, 0xED, 0x2D, 0x69, 0xA2, 0x26, 0x52, 0x4D, 0x7F, 0xAC, 0x8E, 0xF7, 0x00, 0x9C, 0xCD, 0x7D, 0x4B, 0x27, 0x20, 0x6E, 0x8A, 0x74, 0x6A, 0x1D, 0xD9, 0x98, 0x27, 0xCE, 0xED, 0xBC, 0xBE, 0x81, 0x58, 0xD0, 0x3A, 0xB9, 0x9B, 0xF6, 0x57, 0x7D, 0x72, 0x3F, 0x5D, 0x0C, 0x3B, 0x9E, 0x6F, 0x14, 0x23, 0x1A, 0x24, 0xE7, 0x88, 0x31, 0x43, 0x42, 0x43, 0xC5, 0xA5, 0x58, 0xF0, 0xB3, 0x18, 0xD3, 0x37, 0xFC, 0xB8, 0x18, 0x91, 0xA1, 0x3B, 0x8C, 0x95, 0xC8, 0xC0, 0x36, 0xDA, 0x5B, 0xF6, 0x42, 0xDD, 0xF0, 0x93, 0x9A, 0xD1, 0x5D, 0x5D, 0xF8, 0x1D, 0x30, 0x36, 0x8B, 0x8C, 0x6C, 0x0F, 0xF8, 0x46, 0xE8, 0xD7, 0x65, 0x7B, 0x99, 0xE8, 0x74, 0x77, 0x7B, 0xBE, 0x78, 0xFF, 0xC5, 0xDE, 0x4D, 0x3F, 0x5D, 0x85, 0xBC, 0x26, 0xB9, 0xA8, 0x9E, 0x98, 0xB0, 0x2F, 0xF4, 0x86, 0x98, 0x64, 0xB9, 0xB0, 0x86, 0xB8, 0x7A, 0x40, 0xC4, 0x5D, 0x71, 0x59, 0xEF, 0xA5, 0x59, 0x62, 0xAC, 0x8D, 0xD3, 0x5B, 0x71, 0x45, 0xEB, 0x31, 0x7F, 0x88, 0xCB, 0x7E, 0x20, 0x63, 0xAC, 0xB5, 0xB7, 0x76, 0x86, 0x9A, 0x76, 0x41, 0xDD, 0xF1, 0x42, 0x4D, 0x5F, 0x0A, 0xD8, 0x98, 0x7B, 0x8B, 0x5B, 0x03, 0x21, 0xB7, 0xC8, 0xE9, 0xE7, 0x80, 0x94, 0xBA, 0xD2, 0x6F, 0xB7, 0x3F, 0xFF, 0x33, 0x91, 0xCC, 0x4F, 0x3D, 0xF7, 0x59, 0xA3, 0xA5, 0xE4, 0xC1, 0x47, 0x11, 0x97, 0x30, 0x9B, 0xDC, 0x74, 0x6C, 0x41, 0x12, 0x40, 0xA6, 0x2E, 0xF7, 0xDC, 0x27, 0xA6, 0x39, 0x79, 0xED, 0x14, 0x93, 0xDA, 0x02, 0xE2, 0x66, 0x2F, 0xA8, 0x3D, 0xD4, 0x64, 0x4B, 0x32, 0x71, 0x38, 0xB4, 0x7F, 0x53, 0xDD, 0x32, 0x57, 0x3D, 0x5C, 0xA2, 0xE6, 0xCF, 0x07, 0x3A, 0x5D, 0x27, 0x0F, 0x24, 0x00, 0x1E, 0xD1, 0xE4, 0xA1, 0xA6, 0xC0, 0x8A, 0x6A, 0x64, 0x4E, 0x02, 0x90, 0x17, 0xA5, 0xE7, 0x20, 0xB2, 0xDD, 0x43, 0x80, 0xBC, 0xD5, 0xC6, 0xA2, 0xB7, 0x98, 0xE5, 0x56, 0xB1, 0x8D, 0x78, 0x30, 0xAC, 0x62, 0x86, 0x98, 0x99, 0x51, 0xA9, 0x85, 0xB8, 0xAD, 0x79, 0xB9, 0x15, 0x62, 0xFA, 0x72, 0x68, 0xD3, 0x52, 0x4D, 0xF9, 0x8D, 0xDC, 0xF0, 0xBB, 0x7E, 0x9C, 0x5A, 0x41, 0x3D, 0xB0, 0x5A, 0x35, 0x8D, 0x57, 0x2F, 0x4D, 0xAD, 0x7C, 0xB8, 0x6A, 0xB1, 0xB9, 0xF1, 0x1D, 0x30, 0xE8, 0x26, 0x49, 0xB6, 0x4F, 0x09, 0xE8, 0x79, 0xBA, 0x33, 0xF9, 0xF1, 0x07, 0x7B, 0x16, 0x0C, 0x6E, 0xF2, 0x76, 0x24, 0x69, 0xA2, 0x65, 0xC3, 0xBC, 0xA6, 0x64, 0xCE, 0x1C, 0xA0, 0x6F, 0x2D, 0xF2, 0xD0, 0x76, 0xE0, 0xA3, 0x3D, 0xE4, 0x81, 0xF1, 0x40, 0x63, 0xB3, 0x3B, 0xBF, 0x2B, 0x9F, 0xD5, 0xEC, 0x0C, 0x99, 0xD1, 0x15, 0x68, 0xF9, 0x84, 0x4C, 0x4D, 0x04, 0x6A, 0xFF, 0x42, 0xA6, 0x59, 0xFF, 0xF3, 0x79, 0x6C, 0xB7, 0xA3, 0x9A, 0xDF, 0x52, 0x2D, 0xB5, 0x52, 0x1F, 0x75, 0x05, 0xCA, 0x79, 0x4B, 0x1F, 0xF8, 0x6C, 0x93, 0xE9, 0xAC, 0x18, 0xB2, 0x31, 0x30, 0x96, 0x6C, 0x61, 0xB5, 0xE9, 0xC8, 0xA7, 0xBE, 0x64, 0x8A, 0x8F, 0xFE, 0x15, 0x20, 0xB7, 0x3C, 0x69, 0xD4, 0xEA, 0xE4, 0x7C, 0x72, 0x65, 0x14, 0xB0, 0xE8, 0x0A, 0x99, 0x36, 0x1E, 0x98, 0x50, 0x9E, 0xDC, 0xBC, 0x0A, 0xB0, 0xFE, 0xC4, 0xAC, 0x13, 0xD0, 0x62, 0xA0, 0xD9, 0x2B, 0xE6, 0x9D, 0xBD, 0xC9, 0xF4, 0x02, 0xFD, 0xCB, 0x9F, 0x74, 0x8B, 0xDC, 0x6E, 0xD4, 0x5E, 0xEE, 0x8F, 0xEA, 0xC5, 0x8E, 0xEA, 0xC3, 0x2E, 0x2A, 0x29, 0x9E, 0x7F, 0x21, 0xDA, 0xBA, 0x27, 0xD6, 0x15, 0x67, 0x1B, 0x01, 0x71, 0xB5, 0xBB, 0xF8, 0x85, 0x45, 0x5C, 0xA6, 0xF8, 0x83, 0xBD, 0x71, 0x06, 0xF0, 0xD2, 0x8F, 0x8C, 0xE8, 0x0A, 0x5C, 0x6C, 0x6A, 0xB6, 0xB4, 0x52, 0x41, 0x41, 0x3C, 0x19, 0x79, 0x1F, 0x58, 0x65, 0x43, 0x2E, 0x59, 0x09, 0x44, 0xD6, 0x21, 0x63, 0x53, 0x81, 0xD8, 0x03, 0x64, 0x54, 0x2B, 0x7D, 0xCF, 0x88, 0x2F, 0x4F, 0x1E, 0x3D, 0xAC, 0xBD, 0x33, 0x57, 0xD4, 0xB2, 0xBD, 0xAA, 0xF6, 0xBF, 0xDE, 0xAF, 0xEE, 0x7C, 0x23, 0x76, 0xFC, 0x31, 0x3C, 0x92, 0x6C, 0xF1, 0xAE, 0x5B, 0x8E, 0xEE, 0x08, 0x9A, 0x5A, 0x67, 0x22, 0x39, 0x34, 0x7E, 0xE4, 0xCF, 0x72, 0x7B, 0x95, 0xCB, 0xC0, 0xC3, 0x22, 0x39, 0x25, 0x49, 0xF5, 0xBF, 0x08, 0xDC, 0xFF, 0x84, 0x0C, 0xAD, 0x01, 0xE4, 0xAF, 0x20, 0xE7, 0x56, 0x05, 0xB2, 0x1E, 0x92, 0xF3, 0xB3, 0x81, 0x5D, 0xCD, 0xCD, 0x3E, 0x06, 0xA2, 0xD3, 0xF5, 0xEF, 0x47, 0xC9, 0x0F, 0xDA, 0xFD, 0x7D, 0x96, 0xAA, 0xDD, 0x7B, 0xCD, 0xD4, 0xEC, 0xDB, 0x6A, 0x84, 0xA7, 0xD8, 0xE0, 0x48, 0xEB, 0x9F, 0xC5, 0x11, 0x1F, 0x00, 0xE2, 0x67, 0xD3, 0xC4, 0x7E, 0xAB, 0x3F, 0x76, 0x11, 0x83, 0x13, 0x81, 0x76, 0x3F, 0xBF, 0xFF, 0xBE, 0x3A, 0x72, 0xA6, 0xEA, 0x98, 0x08, 0xFC, 0xF6, 0x80, 0x34, 0x78, 0x01, 0xD7, 0x6B, 0x90, 0xEE, 0x25, 0x40, 0xBE, 0x2B, 0x39, 0x6B, 0x3D, 0x90, 0xBB, 0x8C, 0xF4, 0x18, 0x4C, 0xFE, 0x50, 0xE9, 0xFD, 0xFE, 0x6D, 0xA3, 0x5A, 0xD8, 0x5B, 0x5D, 0xFF, 0x50, 0x35, 0x5C, 0x53, 0xDB, 0xFC, 0x87, 0x73, 0x50, 0xCC, 0x7A, 0x75, 0x81, 0x0D, 0xD0, 0x7C, 0x9C, 0x5E, 0x71, 0x8C, 0x85, 0xAA, 0x85, 0xA1, 0x19, 0xEA, 0xB8, 0xC8, 0xDA, 0x43, 0x6F, 0x5D, 0x24, 0x87, 0x2F, 0xAE, 0xED, 0x71, 0x6B, 0x24, 0x39, 0xC6, 0x83, 0xD4, 0x67, 0x7D, 0x1B, 0xAC, 0x9E, 0x2B, 0x54, 0xD3, 0x13, 0x54, 0xEF, 0x26, 0x6A, 0x9B, 0x0A, 0x2A, 0xF0, 0xEF, 0x5D, 0x5F, 0x45, 0x0D, 0x59, 0xAB, 0x92, 0x40, 0xD3, 0xB1, 0x6A, 0xA7, 0x0E, 0x2A, 0x20, 0xF6, 0xB7, 0x55, 0x07, 0xEE, 0x03, 0x1E, 0x17, 0x91, 0x76, 0xAD, 0x7E, 0xBD, 0xAF, 0x8F, 0x5E, 0x7D, 0xA1, 0xEE, 0x09, 0x56, 0x17, 0x7D, 0xAC, 0xF6, 0x5F, 0xA3, 0x02, 0xFF, 0xBB, 0xC6, 0xBF, 0xA8, 0xFD, 0xF2, 0x25, 0x6A, 0x83, 0xB3, 0xAA, 0xE5, 0x15, 0xB5, 0xA3, 0x9F, 0x4A, 0xF6, 0xF5, 0x07, 0xC4, 0xA1, 0x93, 0xD5, 0xFE, 0x53, 0x80, 0xC6, 0x0E, 0x7A, 0x0E, 0xEA, 0xDB, 0x43, 0xAF, 0x3E, 0xB9, 0xAE, 0xD8, 0xFB, 0xC6, 0xE4, 0x1B, 0xA2, 0x01, 0x63, 0xBD, 0xC5, 0xA5, 0x5F, 0x0C, 0xA9, 0x21, 0xEE, 0xDF, 0x36, 0x7C, 0x33, 0x59, 0xBF, 0x32, 0xD9, 0xA3, 0xB2, 0x5E, 0xB3, 0x49, 0xAE, 0x6A, 0x09, 0xB5, 0x6B, 0xDC, 0x8B, 0x03, 0xA2, 0x75, 0xC3, 0xAF, 0xDA, 0x88, 0x9F, 0xD7, 0x2F, 0x29, 0x13, 0xC7, 0x74, 0x35, 0x51, 0x1C, 0x9B, 0x68, 0xEE, 0x26, 0x69, 0xDF, 0xDE, 0x59, 0x75, 0xEE, 0xAA, 0xB6, 0x5D, 0x6A, 0x2E, 0xDF, 0x21, 0xAD, 0x00, 0x0C, 0xD9, 0x45, 0x02, 0x9F, 0x76, 0x71, 0xDA, 0x20, 0x3A, 0xDE, 0x9C, 0xD1, 0x53, 0xDC, 0xB0, 0x60, 0x54, 0xBC, 0x98, 0x79, 0xC2, 0xE9, 0x15, 0xD9, 0xCA, 0x99, 0xB4, 0xAB, 0xA0, 0x5D, 0xAB, 0x3C, 0xB5, 0xDB, 0x14, 0xD5, 0xAE, 0xDC, 0xDD, 0x27, 0xE2, 0xD8, 0x21, 0xA7, 0xAB, 0x89, 0x93, 0x1F, 0x9A, 0xBE, 0x13, 0xA7, 0x9C, 0x3C, 0xBA, 0x5D, 0x9C, 0xEA, 0x4D, 0xDA, 0x35, 0xD1, 0xEE, 0xA8, 0x18, 0xD5, 0x79, 0xA2, 0x6A, 0x97, 0x00, 0x74, 0x6E, 0x46, 0x36, 0xBF, 0x0E, 0x8C, 0x99, 0xA8, 0x5F, 0x97, 0xE0, 0x28, 0xD1, 0x61, 0x8D, 0xF3, 0x79, 0xD1, 0xB5, 0xA9, 0x5F, 0x80, 0x78, 0x60, 0x82, 0xDB, 0x61, 0xB2, 0xCD, 0x00, 0xF2, 0xF3, 0x0C, 0xED, 0x7E, 0xBA, 0x43, 0xB5, 0x0D, 0xF8, 0x63, 0x9D, 0x38, 0x69, 0xD0, 0x85, 0x6E, 0xE2, 0xF4, 0x77, 0x79, 0x5B, 0x44, 0x43, 0xCA, 0xB1, 0x67, 0x10, 0xAF, 0xEF, 0x7E, 0x01, 0x11, 0xE4, 0xC0, 0xDF, 0xB4, 0x3B, 0xD6, 0x43, 0x35, 0x50, 0x0D, 0x5A, 0xA0, 0x36, 0x5C, 0x08, 0x4C, 0x9D, 0xA4, 0x3B, 0xE6, 0xFB, 0x89, 0x9F, 0x1A, 0x83, 0xCE, 0x8B, 0x3E, 0xAF, 0x43, 0x7E, 0x13, 0x0F, 0x9D, 0x09, 0x9D, 0x44, 0xB6, 0xBD, 0x49, 0x3A, 0x15, 0x68, 0x7F, 0x4C, 0xA9, 0x3A, 0x01, 0x57, 0xDF, 0x8A, 0x2E, 0x1F, 0x9C, 0x28, 0x83, 0xD8, 0x29, 0xB7, 0x87, 0x38, 0x13, 0x9B, 0x32, 0x45, 0x1F, 0xAB, 0x54, 0x8A, 0xB3, 0x53, 0xC9, 0x21, 0xC5, 0xDA, 0x9B, 0x30, 0x59, 0x9D, 0x3D, 0x57, 0x35, 0x5E, 0x55, 0xC7, 0x77, 0x02, 0x86, 0xDC, 0xD1, 0x1D, 0xE1, 0x13, 0xC4, 0x3E, 0x30, 0xBE, 0x14, 0x7D, 0xEB, 0x45, 0x56, 0x13, 0x33, 0xDF, 0x44, 0xF7, 0xD7, 0x6E, 0x54, 0x23, 0xD5, 0x79, 0xEC, 0xCF, 0xB1, 0x10, 0x13, 0x73, 0xAB, 0x8B, 0x9E, 0x7D, 0xF3, 0x2E, 0x8A, 0xB3, 0x8B, 0x93, 0x6B, 0x8B, 0xC1, 0xF3, 0x33, 0xF4, 0x9C, 0xF6, 0x38, 0xBC, 0x82, 0x38, 0xF7, 0x27, 0x72, 0xF8, 0x56, 0xED, 0x4D, 0x2C, 0x51, 0x03, 0x3B, 0xAB, 0x4B, 0x4E, 0xA8, 0xF6, 0x07, 0x81, 0xC9, 0xA1, 0x64, 0x93, 0x95, 0x40, 0xE8, 0x3F, 0xA4, 0x53, 0xE9, 0x5C, 0xE2, 0x37, 0xA2, 0xEF, 0xA0, 0x84, 0xEF, 0xC5, 0xA3, 0x43, 0x56, 0x0D, 0xD4, 0xFE, 0x32, 0x37, 0x35, 0x88, 0xA6, 0x6E, 0x62, 0x70, 0xEC, 0xBE, 0x31, 0xE2, 0x42, 0x87, 0xD4, 0x8F, 0x21, 0x3E, 0x8F, 0x96, 0x3E, 0x23, 0x2B, 0xCC, 0x0F, 0x12, 0x23, 0x2E, 0x2F, 0xFC, 0x52, 0x5C, 0xF8, 0x25, 0x39, 0xE2, 0x81, 0xF6, 0x7C, 0x66, 0xA8, 0x31, 0x55, 0xD5, 0xC4, 0x4F, 0xD4, 0xC8, 0x2A, 0x40, 0xBF, 0x4F, 0x48, 0xEF, 0xF5, 0x80, 0x63, 0x6B, 0xFD, 0xBA, 0x24, 0x7F, 0x25, 0x4E, 0x9C, 0x98, 0x32, 0x44, 0x3C, 0xB5, 0x66, 0x73, 0x44, 0x59, 0x6F, 0x80, 0x4C, 0xB9, 0x93, 0xDB, 0x58, 0x8C, 0xAD, 0x70, 0x74, 0x98, 0x18, 0x66, 0xCC, 0x30, 0x89, 0xE1, 0xB5, 0xE6, 0xD9, 0x8A, 0xD1, 0x97, 0x8D, 0x7D, 0xC5, 0xF0, 0x43, 0x8B, 0x4D, 0xE2, 0xA2, 0x11, 0x73, 0x1D, 0x44, 0x23, 0xC8, 0xB1, 0xE3, 0xB5, 0x17, 0x7A, 0x5F, 0x5D, 0x99, 0xAE, 0xA6, 0xED, 0x55, 0xB7, 0xDE, 0x03, 0xDA, 0x05, 0x92, 0x61, 0x6E, 0x80, 0x21, 0x8A, 0x74, 0xEA, 0x04, 0x2C, 0xB7, 0x96, 0x7E, 0x87, 0xB2, 0x63, 0x63, 0xC4, 0xA7, 0xE5, 0x8E, 0x85, 0x14, 0x79, 0xD4, 0x8A, 0x25, 0x33, 0xCF, 0xC6, 0x3E, 0x82, 0xBC, 0xB6, 0xBD, 0xB1, 0x9A, 0xB8, 0x76, 0xCD, 0x4A, 0x2B, 0x71, 0xD9, 0x10, 0xEF, 0xEB, 0xE2, 0xEA, 0xD5, 0xCE, 0x14, 0xE5, 0xFD, 0x58, 0xDC, 0x64, 0xA1, 0x6E, 0x70, 0x20, 0xFD, 0x75, 0x07, 0x57, 0xDF, 0x57, 0xD3, 0x9B, 0xA9, 0x3B, 0x47, 0xAB, 0xF9, 0x2B, 0x55, 0x53, 0x4C, 0xB9, 0x51, 0x36, 0x3F, 0x91, 0xC7, 0xA7, 0x03, 0x61, 0x25, 0xDF, 0x24, 0x6D, 0x3E, 0x05, 0xEC, 0x7D, 0xDE, 0x2B, 0x0B, 0x70, 0x36, 0xDE, 0x4C, 0x6A, 0xFD, 0x1A, 0x20, 0xCF, 0xCD, 0xAF, 0x5A, 0x59, 0xCC, 0xE9, 0x0D, 0x88, 0xFB, 0x32, 0xD5, 0x1D, 0xFB, 0x3F, 0x08, 0x16, 0x37, 0xEB, 0xCF, 0xFE, 0x9F, 0xE7, 0x0E, 0x5F, 0x35, 0xE9, 0x25, 0xB9, 0xDC, 0x1F, 0xDA, 0xAF, 0xAE, 0xEE, 0x38, 0xA8, 0xE6, 0xE6, 0xA9, 0xE7, 0x3B, 0xA9, 0x5F, 0x9B, 0x8B, 0x9D, 0x6E, 0x3D, 0x6A, 0xF5, 0xC4, 0x1E, 0xF0, 0xFC, 0x68, 0x87, 0xFF, 0x8F, 0xB1, 0x40, 0x5A, 0x04, 0x70, 0x75, 0xDD, 0x92, 0x58, 0x53, 0x81, 0x83, 0x63, 0x69, 0x31, 0x99, 0xF1, 0xAE, 0xE2, 0xD7, 0xF1, 0xCE, 0xE4, 0x96, 0x75, 0x80, 0x75, 0x25, 0xB3, 0x93, 0x80, 0x1E, 0xF6, 0x64, 0xDA, 0x76, 0xA0, 0x81, 0x25, 0x99, 0x5E, 0x0F, 0x68, 0x3E, 0x92, 0x4C, 0x33, 0xAF, 0xB6, 0x48, 0x24, 0xD3, 0x3D, 0x00, 0x14, 0x90, 0x29, 0x2F, 0xFF, 0x3C, 0x07, 0x6D, 0xDB, 0xA0, 0xE6, 0xFC, 0xAE, 0x5E, 0xA8, 0xAC, 0xFE, 0x11, 0x21, 0x3E, 0x5D, 0x4F, 0x02, 0x16, 0x3E, 0x79, 0x77, 0x44, 0x87, 0x8E, 0xF3, 0x76, 0x90, 0x35, 0xF6, 0x27, 0x86, 0xB5, 0xCD, 0x20, 0xE3, 0xE3, 0x52, 0xF5, 0xFD, 0x82, 0x69, 0x04, 0xBE, 0xBE, 0x46, 0xC6, 0x37, 0xAD, 0xFE, 0x43, 0xC1, 0x8F, 0x64, 0x8C, 0x2D, 0xB0, 0xA0, 0x88, 0x5C, 0x3E, 0x1E, 0x88, 0xEB, 0x43, 0x2E, 0x59, 0x01, 0xB8, 0xD6, 0x27, 0x97, 0xBD, 0x05, 0x3C, 0xB2, 0xC8, 0xB8, 0x0A, 0x80, 0xCD, 0x57, 0xE4, 0x8A, 0x9B, 0xE4, 0x96, 0xE1, 0xDA, 0xCB, 0xBE, 0xA0, 0x9E, 0x0F, 0x55, 0x1F, 0x5E, 0x13, 0x1F, 0x36, 0x23, 0xC5, 0xF3, 0xAD, 0xC8, 0x4A, 0x01, 0xC0, 0xFA, 0x9E, 0x64, 0x85, 0x39, 0x03, 0x0F, 0x59, 0x5D, 0x25, 0x81, 0xC5, 0xCF, 0xCA, 0xBF, 0x22, 0x67, 0x95, 0x0B, 0x37, 0x00, 0xE4, 0xC9, 0xCA, 0x8B, 0xFA, 0xD7, 0xB0, 0x21, 0x49, 0xB7, 0x30, 0xE0, 0xCE, 0x39, 0x32, 0x38, 0x0F, 0x28, 0xB9, 0x4D, 0xCE, 0xED, 0x02, 0xE4, 0xAF, 0x37, 0x6B, 0x02, 0x32, 0xFB, 0x93, 0x0B, 0x06, 0x03, 0xE1, 0x4F, 0xC9, 0x88, 0x5E, 0x80, 0x11, 0xA4, 0xFC, 0x7B, 0xD4, 0x51, 0xBB, 0xE7, 0xAC, 0xD4, 0x47, 0x9F, 0x8A, 0x0F, 0x2F, 0x69, 0xFF, 0xE2, 0x40, 0x75, 0xEB, 0x1B, 0xF5, 0xFF, 0x89, 0xB9, 0x0F, 0x78, 0x2C, 0xF7, 0xF7, 0x0F, 0xE0, 0x9F, 0xD3, 0x1E, 0x1A, 0x52, 0x49, 0x49, 0x45, 0x59, 0xA5, 0x24, 0x15, 0x5A, 0x88, 0x8C, 0xB2, 0x52, 0x68, 0x52, 0xCA, 0x2A, 0xDA, 0x56, 0x44, 0x93, 0x6C, 0x8A, 0x22, 0x29, 0x12, 0x92, 0x3D, 0xD2, 0xA4, 0x5D, 0x4A, 0x3B, 0x4D, 0x15, 0x2D, 0xED, 0xA1, 0x3D, 0xFD, 0xBF, 0xD7, 0xFF, 0x3A, 0xBF, 0x7D, 0xFA, 0x1D, 0xFE, 0xF3, 0xF7, 0x7A, 0xF9, 0xBD, 0xCF, 0xCD, 0x73, 0xEE, 0xEB, 0xBA, 0xEF, 0xE7, 0x7E, 0x7C, 0x3F, 0xCF, 0x75, 0x7B, 0x8E, 0xB7, 0xE8, 0xBC, 0x6D, 0x69, 0xBF, 0xBB, 0x5D, 0xCB, 0x69, 0xDB, 0x7E, 0x4B, 0x07, 0x0B, 0xB1, 0x32, 0x4D, 0x30, 0x1B, 0xF6, 0xDB, 0x76, 0x71, 0xB5, 0xD5, 0x19, 0xDE, 0xD7, 0xC5, 0xDF, 0xAF, 0xAB, 0xD6, 0x9B, 0x81, 0x9F, 0xE2, 0xBC, 0xDB, 0x37, 0xED, 0xE5, 0x54, 0xFD, 0x56, 0x6C, 0xBB, 0x03, 0x67, 0xB2, 0x45, 0x9F, 0xD9, 0xC0, 0x91, 0xFD, 0x22, 0xC9, 0xA5, 0x01, 0x45, 0x8F, 0xC4, 0x91, 0xC8, 0x88, 0xFB, 0x72, 0x9D, 0xC0, 0xC7, 0x3F, 0x8B, 0x7C, 0xC7, 0xEB, 0x3D, 0xAE, 0x7E, 0x65, 0x77, 0xCB, 0xB0, 0x81, 0x51, 0xEC, 0x0C, 0x2B, 0x16, 0x20, 0xF5, 0xE2, 0xC9, 0x61, 0x69, 0x4A, 0x19, 0x64, 0x48, 0x52, 0xB3, 0xFD, 0xDD, 0x78, 0x3D, 0x85, 0x5A, 0x0C, 0x0B, 0x90, 0xBA, 0x35, 0xAC, 0xE9, 0x01, 0xA0, 0x4E, 0xAC, 0x39, 0x16, 0x92, 0xED, 0x63, 0xAB, 0x5B, 0x8B, 0xDF, 0x5D, 0xF3, 0x80, 0x8B, 0x87, 0xC5, 0xFB, 0x7F, 0xF1, 0xCF, 0xCF, 0xB7, 0x01, 0x40, 0x5D, 0xEC, 0x57, 0x3B, 0xB2, 0x8A, 0xE7, 0x1F, 0x28, 0x6E, 0xC1, 0xAE, 0x89, 0x65, 0xED, 0x9A, 0xB0, 0xCA, 0xBD, 0xFE, 0xCD, 0x7A, 0x2F, 0xC9, 0x7A, 0x74, 0x22, 0xB9, 0x8F, 0x5E, 0x87, 0x59, 0x35, 0x03, 0x16, 0x20, 0xB5, 0xEF, 0xB1, 0xBA, 0x23, 0x81, 0x37, 0x17, 0x84, 0xA8, 0xF3, 0x7C, 0xB7, 0x06, 0x00, 0xEE, 0xF3, 0x3C, 0x08, 0x65, 0xB7, 0xD9, 0xA8, 0x32, 0xD6, 0x61, 0x14, 0xDB, 0x27, 0x9B, 0x05, 0x7E, 0x6D, 0x94, 0x24, 0xBB, 0xA2, 0x13, 0xBB, 0x66, 0x16, 0xCB, 0x8F, 0x60, 0xBB, 0xBA, 0xB1, 0x4A, 0xF7, 0x7F, 0xF7, 0x05, 0xCB, 0x73, 0x20, 0xE0, 0xB8, 0x2F, 0xBB, 0x55, 0x93, 0x75, 0x29, 0x63, 0xD5, 0xC2, 0xFE, 0x27, 0x72, 0xD0, 0xAF, 0x6D, 0xF9, 0x91, 0x15, 0xE9, 0x7B, 0x22, 0x40, 0x0E, 0x2C, 0x65, 0xFB, 0x5B, 0x03, 0x92, 0xCD, 0x39, 0x07, 0xF5, 0x13, 0x57, 0xA5, 0xDC, 0x16, 0x60, 0x34, 0xCD, 0x5F, 0xD0, 0x7F, 0xF4, 0xF8, 0xD1, 0xE4, 0xF4, 0x9A, 0x71, 0x4D, 0xC9, 0x35, 0x7B, 0xF4, 0xBA, 0x93, 0x39, 0x27, 0xC7, 0xC9, 0x89, 0x1C, 0x74, 0x5D, 0xE4, 0xA0, 0xEB, 0xBC, 0x4F, 0xD5, 0x40, 0xB6, 0x69, 0x3E, 0x2B, 0xF5, 0xE5, 0xFB, 0x41, 0xB2, 0x8F, 0xC9, 0x53, 0x7B, 0x52, 0xC5, 0xA1, 0x6A, 0x05, 0xA9, 0xFE, 0xF3, 0xC4, 0x35, 0x72, 0xB4, 0xB8, 0xEA, 0x14, 0x7F, 0x4F, 0x95, 0x1A, 0x8A, 0xAC, 0xB6, 0x0E, 0xD0, 0x42, 0xAC, 0x3B, 0x3D, 0xAF, 0x00, 0x2A, 0x8E, 0x22, 0x57, 0x9C, 0x00, 0x46, 0xA5, 0xD1, 0xFE, 0x34, 0x37, 0x98, 0xDC, 0x22, 0xA7, 0xBD, 0xB3, 0x9C, 0x49, 0x86, 0xEB, 0x1B, 0xBE, 0x27, 0xD3, 0x1F, 0x4D, 0xCE, 0x12, 0xFB, 0xF1, 0x10, 0x79, 0xEB, 0x15, 0xD7, 0x1D, 0xA5, 0xC5, 0x76, 0x88, 0x67, 0xFB, 0x5A, 0xBD, 0xB4, 0x22, 0xD5, 0x9B, 0xD4, 0x9C, 0x27, 0x35, 0x13, 0x4F, 0xCB, 0x91, 0x7A, 0x77, 0x39, 0x8F, 0x8D, 0x2D, 0x11, 0xD9, 0xE9, 0x14, 0xD7, 0x1F, 0x5A, 0xC1, 0x1A, 0xDF, 0x65, 0x07, 0x14, 0x02, 0x8A, 0x0B, 0xC4, 0xFE, 0x6B, 0x01, 0x7D, 0x75, 0x3E, 0x97, 0x8E, 0xE9, 0xA4, 0xB1, 0xC2, 0xEC, 0xDE, 0xE4, 0x6C, 0x8D, 0x39, 0x03, 0xC9, 0x7C, 0xF5, 0xE9, 0x7D, 0xC5, 0x79, 0xD4, 0x17, 0xC7, 0x25, 0xC1, 0x75, 0x8D, 0x26, 0xB2, 0xBD, 0xE6, 0x7D, 0x5B, 0x46, 0x0E, 0x0E, 0x7C, 0xD2, 0x84, 0xD4, 0x0A, 0xAC, 0x78, 0x49, 0x8E, 0x93, 0x29, 0xF5, 0x22, 0x4D, 0xAE, 0xEE, 0xCB, 0x26, 0xC7, 0x8B, 0xF3, 0xDD, 0x3F, 0x02, 0x7C, 0x1E, 0xD4, 0x59, 0xE3, 0x5A, 0x56, 0xF7, 0x27, 0xD0, 0x7B, 0x95, 0x78, 0x7E, 0xC4, 0xB6, 0x89, 0x0A, 0xF7, 0x31, 0x37, 0x9A, 0x34, 0x96, 0xB5, 0xFF, 0x49, 0xDA, 0x57, 0xCE, 0x8B, 0x26, 0xF3, 0xE5, 0xE7, 0x8A, 0x5C, 0xD7, 0x52, 0xBC, 0x1E, 0x67, 0x55, 0x70, 0x7D, 0x9B, 0xE9, 0xAC, 0xDA, 0x9B, 0x77, 0x3D, 0x48, 0x9D, 0x23, 0x97, 0x63, 0xC8, 0xF1, 0x1A, 0x87, 0xF4, 0x49, 0xCB, 0x31, 0x07, 0xEE, 0x92, 0x56, 0xC6, 0x79, 0xAB, 0x48, 0x6B, 0xB1, 0x6E, 0x0D, 0x5C, 0x03, 0xCE, 0xC7, 0xFB, 0xD9, 0xF1, 0xDD, 0x59, 0xD7, 0x65, 0xAC, 0xCC, 0x29, 0xC0, 0x62, 0x2B, 0xF7, 0xE1, 0x96, 0x45, 0x1A, 0x96, 0xBB, 0xF4, 0x21, 0xDD, 0x0C, 0x16, 0xCC, 0x23, 0x0B, 0x5A, 0x2F, 0x89, 0x13, 0xD7, 0xC4, 0x63, 0x31, 0xEB, 0x8B, 0xE2, 0xFA, 0xB3, 0xC7, 0xB0, 0x5A, 0x4E, 0x37, 0xBD, 0x49, 0x2B, 0x94, 0xDE, 0x24, 0x6D, 0x35, 0x0E, 0x66, 0x90, 0x76, 0x23, 0xF2, 0x76, 0x92, 0xD3, 0x86, 0xA4, 0x06, 0x93, 0x33, 0x7C, 0xC5, 0x75, 0xE1, 0x02, 0x9E, 0xCB, 0x69, 0xB1, 0x16, 0x25, 0xAC, 0xCB, 0x06, 0x76, 0xB4, 0x36, 0x60, 0xB4, 0x5E, 0xE4, 0xD4, 0x75, 0x80, 0x3D, 0x5D, 0x9F, 0xE8, 0xAA, 0xBC, 0x22, 0x82, 0x74, 0x72, 0xF4, 0x9B, 0x41, 0x66, 0xDD, 0x59, 0xF5, 0x8A, 0xEB, 0xAE, 0xAC, 0x65, 0x97, 0xA8, 0xDE, 0xE8, 0x48, 0x4E, 0xD3, 0x28, 0xAD, 0x20, 0x1D, 0x2E, 0x1F, 0x5C, 0x4D, 0xDA, 0x2B, 0xE6, 0xF5, 0x01, 0x99, 0x99, 0xFC, 0x93, 0x9C, 0xBB, 0x94, 0x73, 0xE1, 0x1C, 0xF1, 0xBC, 0x0E, 0xF7, 0xE3, 0x7A, 0x46, 0xD3, 0xD9, 0x49, 0x77, 0xD9, 0x65, 0xE7, 0xD8, 0xA1, 0x62, 0x7B, 0xCA, 0x3B, 0x91, 0xA9, 0xAF, 0x03, 0x13, 0x77, 0xF1, 0x79, 0x89, 0x0C, 0x20, 0xED, 0x1E, 0x87, 0x5F, 0x25, 0xF7, 0x17, 0x6E, 0x7C, 0xF8, 0xE4, 0x08, 0x68, 0xBE, 0x33, 0xFA, 0xDC, 0x3A, 0x72, 0xCD, 0xEB, 0x63, 0xC1, 0xA4, 0xCB, 0xA5, 0x94, 0xB6, 0xA4, 0xA7, 0xC4, 0x4E, 0x27, 0x72, 0x71, 0x7B, 0xDF, 0x0F, 0xE4, 0x8A, 0xAE, 0xFE, 0x31, 0xA4, 0xAF, 0x85, 0xF7, 0x40, 0xD2, 0x5B, 0x5C, 0x67, 0xA3, 0x3E, 0x81, 0x9F, 0x8F, 0x6B, 0xEC, 0x12, 0x3F, 0x36, 0xB2, 0x05, 0xBB, 0xBD, 0x9C, 0x0D, 0xEC, 0x08, 0x98, 0x14, 0x8B, 0x5C, 0xF6, 0x05, 0x58, 0x2E, 0xF7, 0xB9, 0x27, 0xD0, 0x57, 0x2D, 0xAB, 0xEF, 0xC5, 0xCF, 0xC0, 0xAE, 0xC0, 0x0C, 0x94, 0xED, 0x51, 0x0F, 0x11, 0x73, 0x9D, 0x09, 0xEB, 0xF6, 0x83, 0x32, 0x04, 0x02, 0xE6, 0x91, 0x41, 0x2F, 0xA2, 0x3B, 0x93, 0xAB, 0xA4, 0x02, 0x41, 0xAE, 0xDC, 0xE0, 0xA3, 0x42, 0x06, 0x22, 0x48, 0x9A, 0x5C, 0xAE, 0x61, 0xDE, 0x8D, 0x5C, 0xF3, 0x4D, 0x5C, 0xBB, 0x2D, 0xC1, 0xF9, 0x7C, 0x13, 0x1B, 0x7B, 0x8C, 0xDD, 0x96, 0xC6, 0xE6, 0x6E, 0x66, 0xF7, 0xCB, 0x00, 0x03, 0xA6, 0x8A, 0x5C, 0x62, 0x06, 0xCC, 0x35, 0xDE, 0xF7, 0x25, 0xF4, 0x02, 0x90, 0x34, 0x5A, 0x39, 0x0D, 0xB5, 0x1A, 0xCD, 0x8F, 0x8D, 0xE0, 0xC7, 0x9C, 0x1C, 0xD3, 0x52, 0x89, 0xDC, 0x7F, 0x0A, 0x20, 0xD3, 0xD2, 0xD8, 0x64, 0x2D, 0xB0, 0x6D, 0xD9, 0xC4, 0x7A, 0x36, 0xBE, 0x94, 0x8D, 0x13, 0xAB, 0x99, 0x79, 0x31, 0xF8, 0x67, 0xF1, 0x6C, 0x92, 0x2D, 0x5B, 0x58, 0xC8, 0x1E, 0x97, 0x62, 0x1F, 0x7E, 0x26, 0xAF, 0x7D, 0xB9, 0xB9, 0x0B, 0xB0, 0x2E, 0xD9, 0xE4, 0x77, 0xD9, 0x0A, 0x08, 0xDF, 0x0B, 0xE4, 0x9D, 0x1B, 0xEF, 0x5C, 0xA0, 0x6B, 0x1E, 0x72, 0xFC, 0x8B, 0xC8, 0x55, 0xD1, 0x40, 0xE4, 0x48, 0xAE, 0xA7, 0x51, 0x22, 0x72, 0xD1, 0x25, 0xA0, 0xD3, 0x31, 0x91, 0x2D, 0x87, 0x00, 0x9D, 0x23, 0xC4, 0xB9, 0x15, 0xDB, 0x3D, 0x9E, 0x8B, 0xC7, 0x25, 0x03, 0xBD, 0xC4, 0x7B, 0x9E, 0x4D, 0xDB, 0x79, 0x0E, 0xB3, 0x41, 0xDC, 0xAB, 0x49, 0xD0, 0x02, 0xD7, 0xB7, 0x67, 0x0B, 0xE3, 0xD9, 0x33, 0x01, 0xE4, 0xE7, 0xC0, 0x9A, 0x5A, 0xB2, 0x26, 0xEF, 0x73, 0x13, 0xF2, 0xE0, 0x95, 0x1F, 0xF7, 0x80, 0x11, 0xDA, 0x8B, 0xF5, 0x3E, 0x07, 0x03, 0x2B, 0xDD, 0x80, 0x8F, 0x9D, 0x67, 0x3E, 0xDC, 0x5A, 0x05, 0x7C, 0x7F, 0x23, 0x8E, 0x2B, 0x15, 0xB8, 0xFE, 0x42, 0xE4, 0xE4, 0x1F, 0xC0, 0x81, 0x3B, 0x22, 0xD3, 0x7A, 0x00, 0x31, 0xB7, 0x28, 0x27, 0x03, 0x01, 0x22, 0x83, 0x06, 0xAA, 0x02, 0xEB, 0xBE, 0x89, 0xEF, 0xDB, 0xD2, 0x73, 0x2B, 0xAE, 0x93, 0xCB, 0x80, 0xF3, 0x7B, 0xCE, 0x1F, 0x9C, 0xC7, 0x44, 0x7D, 0x03, 0xF6, 0xEC, 0x76, 0xF2, 0xC5, 0xB0, 0xAA, 0x1B, 0x64, 0x4D, 0xDD, 0x37, 0x79, 0xF2, 0xC8, 0x96, 0xDF, 0xE7, 0x10, 0xF3, 0x48, 0xA5, 0x3E, 0x4E, 0x3F, 0xC4, 0x6F, 0xB8, 0xBB, 0xB6, 0xD2, 0xA0, 0xAB, 0x3F, 0xD1, 0x3F, 0x92, 0x3C, 0xF4, 0x71, 0x59, 0x45, 0xBB, 0x34, 0x5A, 0x2F, 0x5C, 0x15, 0x81, 0x97, 0x1B, 0xC4, 0xEB, 0xF1, 0x06, 0x70, 0x45, 0x99, 0x67, 0xE6, 0x65, 0x59, 0x62, 0xEE, 0xD1, 0x1C, 0x38, 0x50, 0x25, 0x9C, 0x0E, 0xE4, 0x89, 0x15, 0xDC, 0x45, 0x82, 0xA7, 0x7C, 0x6E, 0x22, 0xCD, 0x14, 0xEC, 0x00, 0xD7, 0xD7, 0x26, 0x1F, 0x99, 0xDD, 0xFC, 0x4E, 0xD6, 0xBC, 0xF8, 0x92, 0x4F, 0x1E, 0x2D, 0xE0, 0xFA, 0x89, 0xD9, 0xEC, 0xD2, 0x65, 0xA4, 0xA4, 0xA7, 0xAC, 0x0D, 0x39, 0x69, 0x7B, 0x1B, 0xF1, 0x8E, 0x53, 0xFF, 0x37, 0xD3, 0xA1, 0xA0, 0xB4, 0x1B, 0x64, 0xD0, 0x46, 0x7F, 0x10, 0xF5, 0xD1, 0x44, 0x1D, 0x20, 0xC7, 0x54, 0xB3, 0xC6, 0x21, 0xC0, 0x63, 0xF1, 0xDA, 0x36, 0x29, 0x6E, 0x5F, 0x56, 0xB3, 0x47, 0x6C, 0x5F, 0x06, 0xCE, 0x88, 0xAC, 0x6F, 0xF7, 0x8E, 0xFF, 0x1E, 0xC5, 0x56, 0x9C, 0xAB, 0x72, 0x39, 0x50, 0xDD, 0x89, 0xD7, 0x9D, 0x41, 0xAA, 0x7D, 0x90, 0x27, 0x4F, 0x1D, 0xE0, 0xBA, 0x49, 0x56, 0xEC, 0x12, 0x3B, 0x76, 0xB2, 0x35, 0x0B, 0x90, 0x63, 0x2A, 0x49, 0xCD, 0xF6, 0x4A, 0xEB, 0xC8, 0x98, 0x14, 0x09, 0x69, 0x32, 0xC8, 0xAD, 0xCD, 0xCF, 0xAE, 0x53, 0x79, 0x1D, 0x55, 0xED, 0xC5, 0x02, 0xA4, 0x66, 0x22, 0x3B, 0x3A, 0x07, 0x78, 0xF3, 0x4E, 0xAC, 0x2F, 0x23, 0x79, 0xC5, 0x1F, 0x13, 0xFA, 0xD0, 0xF3, 0xFA, 0x59, 0x00, 0xA8, 0x56, 0x7C, 0x6D, 0x4D, 0x9E, 0x3F, 0xF6, 0x7B, 0x0E, 0x0C, 0x62, 0x97, 0x7D, 0x63, 0xCD, 0x42, 0x58, 0xF9, 0x72, 0x16, 0x60, 0xC9, 0xD1, 0x29, 0x6C, 0xE0, 0x27, 0x76, 0xD9, 0x68, 0x96, 0x1F, 0xC1, 0xB6, 0xC8, 0x65, 0x65, 0x8F, 0xB3, 0x2A, 0x47, 0x58, 0x80, 0x54, 0x2A, 0xBC, 0x57, 0xFF, 0xF4, 0x0E, 0x00, 0x5C, 0x53, 0xE2, 0xEF, 0xE6, 0xCA, 0xB1, 0xFE, 0xA9, 0xAC, 0x55, 0x0A, 0xDB, 0x43, 0x8A, 0x05, 0x7E, 0xED, 0x7A, 0x67, 0x36, 0x60, 0x34, 0x1B, 0x92, 0xD3, 0x80, 0xFC, 0x71, 0x99, 0xBD, 0x5D, 0xCA, 0xDF, 0x2D, 0x99, 0xC5, 0x06, 0x95, 0xB0, 0x53, 0xE4, 0xD8, 0xDE, 0x93, 0x1A, 0x93, 0x7F, 0x1A, 0x9F, 0x83, 0x58, 0xFA, 0xFF, 0x66, 0x9B, 0x01, 0xB2, 0x5D, 0x1D, 0xDB, 0x66, 0x15, 0xD0, 0x46, 0xAC, 0xB3, 0x32, 0x49, 0x80, 0x4C, 0x12, 0x3D, 0xA6, 0xE9, 0xAD, 0x61, 0xDD, 0xC9, 0x7E, 0x21, 0xC3, 0x26, 0x93, 0x93, 0x16, 0x6A, 0x2E, 0x24, 0xD7, 0xB4, 0x1F, 0x3C, 0x9F, 0xCC, 0xBA, 0x34, 0x58, 0xBC, 0x8A, 0x5A, 0x8F, 0xFC, 0xDC, 0x49, 0x65, 0xE4, 0xDF, 0xCD, 0x81, 0xFE, 0xF0, 0xEB, 0x7B, 0x08, 0x5B, 0x93, 0x43, 0x76, 0x7C, 0x5C, 0x35, 0x8F, 0x94, 0x1E, 0x26, 0xEE, 0x7B, 0x3D, 0xE4, 0xFA, 0x52, 0x5E, 0xAC, 0xC4, 0x0E, 0xA0, 0xED, 0x76, 0x91, 0xC3, 0xBA, 0x03, 0x3D, 0xF2, 0xC4, 0xF7, 0x0F, 0x00, 0x43, 0x68, 0xBE, 0x02, 0x59, 0x95, 0x51, 0x3D, 0xC9, 0xA9, 0x17, 0x86, 0x5C, 0x24, 0x03, 0x63, 0xB5, 0x3E, 0x92, 0x69, 0xC5, 0x23, 0x5E, 0x89, 0x7D, 0x89, 0x1E, 0xD4, 0x84, 0xB4, 0x0F, 0xA5, 0xAE, 0x6C, 0xCB, 0x47, 0xFF, 0xDC, 0xC7, 0xE3, 0x30, 0xB2, 0x93, 0x6C, 0xB5, 0x16, 0xD9, 0x7D, 0xDC, 0x15, 0x0B, 0x80, 0xFB, 0x6E, 0x67, 0x0C, 0x9E, 0xB7, 0xA8, 0xB2, 0x4A, 0xAB, 0xD9, 0x5E, 0x49, 0x80, 0x9C, 0x98, 0x47, 0x75, 0x2D, 0x06, 0x34, 0x97, 0xD3, 0x3E, 0x7A, 0x77, 0x1F, 0xA3, 0x46, 0xDA, 0x6A, 0x8C, 0x98, 0x4D, 0x7A, 0x66, 0x8D, 0x31, 0x24, 0xD3, 0xFD, 0x0C, 0xBE, 0x88, 0x7D, 0x5D, 0x12, 0x79, 0xE7, 0x35, 0xD7, 0x53, 0xFF, 0xCA, 0x76, 0x31, 0x60, 0x81, 0xEF, 0x79, 0x64, 0xF3, 0xEB, 0x77, 0xE5, 0xC8, 0x5E, 0x7A, 0x37, 0x0A, 0x48, 0xB9, 0x07, 0xC7, 0x9E, 0x90, 0x6A, 0x6D, 0x45, 0x6F, 0x67, 0xB8, 0x6E, 0x9F, 0x2B, 0xAC, 0xDA, 0x19, 0x56, 0xCE, 0x10, 0x90, 0xFF, 0x4D, 0xCC, 0xBD, 0xB2, 0x01, 0xF5, 0x1A, 0x71, 0x9E, 0xFA, 0x2A, 0xE8, 0x8D, 0x12, 0xB9, 0x15, 0x18, 0x17, 0x6D, 0x21, 0xB6, 0x5B, 0x19, 0x2D, 0x2D, 0xD2, 0xBF, 0x47, 0xDB, 0x99, 0x3B, 0xCC, 0x6B, 0x45, 0x7E, 0xBB, 0x26, 0xD6, 0xEE, 0x6C, 0xAE, 0x3B, 0x2A, 0x95, 0xED, 0x3B, 0x85, 0x6D, 0xAD, 0x79, 0x77, 0x08, 0xD9, 0x3B, 0xE6, 0xF6, 0x49, 0xB2, 0x8F, 0xE5, 0xD1, 0x38, 0x72, 0xC8, 0x1D, 0xCE, 0x85, 0x9A, 0x97, 0xC5, 0x79, 0x68, 0x0B, 0x3E, 0x7E, 0x77, 0x56, 0x23, 0x9D, 0x55, 0xCA, 0x03, 0xFA, 0x96, 0x89, 0xEF, 0x6B, 0x01, 0xC3, 0x78, 0xAA, 0x89, 0xE9, 0x97, 0xC8, 0xE1, 0xDF, 0xA6, 0x6F, 0x24, 0xED, 0xBF, 0xCF, 0xAC, 0x27, 0x73, 0x52, 0xA7, 0xCF, 0x11, 0xFD, 0x8B, 0xC9, 0xAB, 0x41, 0x22, 0xD7, 0x35, 0x6B, 0xF6, 0xED, 0x12, 0x39, 0x2C, 0xF3, 0xF1, 0x4B, 0x52, 0x41, 0xF5, 0xF6, 0x4F, 0x72, 0xC0, 0x80, 0x32, 0x3D, 0x72, 0xE4, 0xAD, 0x83, 0x4D, 0x48, 0x3D, 0x85, 0x82, 0xC7, 0xA4, 0x6E, 0x08, 0xE7, 0x72, 0x50, 0xEF, 0xFE, 0xEC, 0x08, 0x39, 0xD6, 0xF6, 0x23, 0xAB, 0xE4, 0x01, 0xE8, 0x6C, 0xFB, 0x3D, 0x9F, 0xEE, 0x20, 0x87, 0x1D, 0x72, 0x54, 0x24, 0x9D, 0x56, 0xB9, 0x8C, 0x24, 0x73, 0x57, 0x7B, 0xC8, 0x71, 0xFD, 0xC5, 0xC3, 0xDF, 0x2A, 0x93, 0xB3, 0x76, 0x56, 0x5D, 0x21, 0xAD, 0xFB, 0x9C, 0xFA, 0x46, 0xEA, 0xDB, 0x1E, 0x49, 0x21, 0xC7, 0xF5, 0x2E, 0xCA, 0x21, 0x4D, 0x6F, 0x64, 0x8E, 0x21, 0xCD, 0x16, 0x6C, 0x4F, 0x22, 0x2D, 0x47, 0xFD, 0xAD, 0x0F, 0xB5, 0x54, 0x76, 0xDC, 0x6E, 0x76, 0x46, 0x3A, 0xEB, 0xFE, 0x95, 0x35, 0x19, 0x0A, 0x18, 0xBA, 0x70, 0x3F, 0xAB, 0xD4, 0x48, 0xBB, 0x51, 0x01, 0xAD, 0xBF, 0x2C, 0x00, 0xB2, 0xAB, 0x57, 0x7F, 0x78, 0xE0, 0x04, 0x9A, 0x1D, 0xBD, 0x38, 0xEA, 0x46, 0xFA, 0xA4, 0x1F, 0xCD, 0x22, 0xE7, 0xAE, 0xCC, 0x7B, 0x41, 0x4E, 0xD7, 0xD8, 0xE1, 0x40, 0x3A, 0x74, 0xD8, 0x99, 0x41, 0xCE, 0x78, 0xB8, 0xAD, 0x2D, 0x39, 0x33, 0x2C, 0xBA, 0x3B, 0xE9, 0x20, 0xAE, 0x23, 0xC5, 0x4A, 0xAE, 0xA3, 0x63, 0xCB, 0x5A, 0x38, 0xB0, 0x4B, 0xAB, 0xD8, 0xE0, 0xDF, 0x5D, 0x3D, 0x08, 0x50, 0x93, 0x11, 0xFB, 0xDE, 0x02, 0xB8, 0xE4, 0x9E, 0xFF, 0x00, 0xC8, 0x74, 0xD9, 0xD2, 0xAE, 0xF8, 0x0E, 0xB0, 0x3E, 0x31, 0x61, 0xEC, 0xCE, 0xAF, 0xC0, 0xDB, 0x71, 0x5B, 0x3A, 0x04, 0xC6, 0x81, 0x66, 0x3A, 0xEB, 0x57, 0x29, 0x92, 0x6B, 0x75, 0xD6, 0xD9, 0x92, 0xCB, 0xBD, 0x43, 0x86, 0xF3, 0xBD, 0xE1, 0x55, 0x27, 0xC8, 0x65, 0x53, 0x7C, 0xFC, 0xC8, 0xA5, 0xA9, 0x46, 0x4F, 0xC8, 0x15, 0x17, 0xC5, 0xB5, 0xED, 0xCB, 0x75, 0x0C, 0x8D, 0x58, 0x6F, 0x15, 0x36, 0x36, 0x99, 0x4D, 0xEE, 0xCA, 0xEE, 0x5D, 0x41, 0x56, 0xBF, 0xC9, 0x7C, 0x0E, 0x98, 0xC7, 0xA5, 0xEE, 0xF2, 0x7D, 0x02, 0x84, 0x9D, 0x57, 0x5D, 0x2F, 0xE1, 0xDD, 0xDF, 0xB0, 0xD8, 0xAF, 0xD5, 0xF2, 0x4E, 0x46, 0x47, 0x8E, 0x15, 0x85, 0x00, 0x9D, 0xCC, 0xEB, 0xEB, 0x73, 0xA6, 0x81, 0x67, 0x5A, 0x67, 0xD9, 0xAD, 0x27, 0xD9, 0xF8, 0x95, 0x6C, 0x5C, 0x7F, 0x76, 0xC3, 0x3A, 0x36, 0xF2, 0xA6, 0xB8, 0xB6, 0x9B, 0x83, 0x7F, 0x36, 0x9C, 0x4D, 0x76, 0x62, 0xD3, 0x5B, 0xB2, 0x07, 0x12, 0xC9, 0x87, 0xD1, 0x15, 0xBD, 0xC8, 0x63, 0x3F, 0xCE, 0xDC, 0x07, 0xB4, 0x9F, 0xAD, 0x5B, 0x57, 0xBA, 0x0A, 0xF0, 0xBD, 0x00, 0x44, 0xBD, 0x1C, 0x90, 0xB7, 0xF3, 0x10, 0x90, 0xB4, 0xF1, 0xE8, 0xA4, 0xA4, 0xDE, 0x40, 0xD0, 0x21, 0xB1, 0xAF, 0x07, 0xC0, 0xEC, 0x53, 0x62, 0xE5, 0x1B, 0x03, 0x68, 0xB6, 0x15, 0xF5, 0x2C, 0x01, 0xC9, 0x4D, 0x22, 0xF7, 0xC8, 0x01, 0x5D, 0x77, 0x8B, 0xED, 0xA1, 0x40, 0x37, 0x6D, 0xF1, 0x8E, 0xD8, 0x86, 0x73, 0x50, 0xA8, 0xB7, 0xB8, 0x66, 0x3E, 0x81, 0x7B, 0x77, 0x64, 0x77, 0x4B, 0x90, 0xEF, 0xAD, 0xCA, 0xB6, 0x91, 0xD5, 0x51, 0x17, 0xAD, 0xC9, 0x72, 0xF5, 0xDB, 0xC5, 0x64, 0xF6, 0xD7, 0xC7, 0x05, 0x80, 0xEC, 0xAA, 0x79, 0x57, 0xAB, 0xEB, 0x00, 0xD7, 0xE1, 0x40, 0xE5, 0x21, 0x93, 0xE4, 0xF0, 0xC9, 0xC0, 0xAD, 0xE2, 0xF3, 0xDA, 0x41, 0xE7, 0x81, 0xD3, 0xB7, 0xC5, 0x79, 0xAE, 0x03, 0x0E, 0x27, 0x89, 0xEB, 0x56, 0x98, 0x2E, 0x72, 0x98, 0xFB, 0x5B, 0xC0, 0xAF, 0x8C, 0xE7, 0x30, 0xFE, 0x41, 0xE2, 0xF9, 0x91, 0x07, 0x96, 0x27, 0xD1, 0xE7, 0x1D, 0x00, 0x0F, 0x33, 0xE1, 0xDB, 0xBF, 0xFB, 0xFB, 0xF5, 0x0E, 0xE4, 0x8B, 0x80, 0xC3, 0xB9, 0xE4, 0xFD, 0xE6, 0x57, 0x1F, 0x93, 0x67, 0xAF, 0x3C, 0x98, 0x4D, 0x96, 0x0C, 0xAA, 0xD7, 0x25, 0x13, 0xDC, 0x7F, 0x9F, 0x03, 0x88, 0x9C, 0x21, 0xE9, 0x37, 0x3E, 0x0C, 0xF4, 0xEE, 0x44, 0x7D, 0xC9, 0x15, 0x72, 0xEF, 0xF3, 0xF9, 0x77, 0x49, 0xFA, 0xBB, 0x42, 0xE0, 0x99, 0x82, 0xC8, 0xFE, 0x5B, 0x3B, 0x5C, 0xBD, 0x2D, 0xF2, 0x98, 0xD1, 0x5E, 0xE0, 0x88, 0xB8, 0xC6, 0x6D, 0xBE, 0x0A, 0xE7, 0x8B, 0xDC, 0xA1, 0x05, 0x14, 0x88, 0xFE, 0x66, 0x18, 0x03, 0x69, 0x4B, 0x84, 0x39, 0xA2, 0x7E, 0x24, 0x00, 0x3C, 0xD3, 0x3D, 0xBC, 0x96, 0xBC, 0xDF, 0xE7, 0xDA, 0x61, 0xF2, 0x42, 0x69, 0xED, 0x4F, 0x72, 0x5F, 0x16, 0xD7, 0x8D, 0x28, 0x63, 0x17, 0x4A, 0xB3, 0x0A, 0x7B, 0xC9, 0x71, 0xFB, 0x7E, 0x13, 0x13, 0xCC, 0xA1, 0xA5, 0xE3, 0x26, 0x74, 0xBB, 0x2C, 0x8E, 0xA8, 0x52, 0xE3, 0x80, 0xEE, 0x63, 0xEA, 0x03, 0xB5, 0xE3, 0x0F, 0xFF, 0xC3, 0xBC, 0x63, 0x33, 0xF0, 0xB2, 0x87, 0xB8, 0x06, 0x14, 0x81, 0xBB, 0x9F, 0xC4, 0xEF, 0x8F, 0x4F, 0xC0, 0x75, 0xF1, 0x9A, 0xA7, 0xFC, 0x52, 0xA1, 0x4C, 0xF3, 0x8F, 0x67, 0xAF, 0xCB, 0xF8, 0x3E, 0x98, 0xEB, 0xB5, 0x7D, 0x64, 0x65, 0xBB, 0x67, 0x47, 0xC8, 0x43, 0xF2, 0xBC, 0x97, 0xF0, 0x54, 0xD6, 0xA9, 0x8C, 0x35, 0x9D, 0xCC, 0x02, 0xA4, 0xF6, 0x76, 0x72, 0xF0, 0x98, 0x3E, 0x2F, 0xC9, 0xF0, 0x11, 0x12, 0xC7, 0xC9, 0x0D, 0xF5, 0x6D, 0x17, 0xB7, 0xAB, 0xE4, 0x3E, 0xDA, 0xB9, 0xB3, 0x0A, 0x71, 0x2C, 0x40, 0xCA, 0x5B, 0xB1, 0xFD, 0xB7, 0x03, 0x4F, 0x44, 0xE2, 0x1C, 0x10, 0x74, 0xAF, 0xFE, 0x6A, 0x0C, 0x00, 0x54, 0x0D, 0x7D, 0x99, 0x41, 0x1E, 0x1B, 0xC1, 0x8F, 0x8E, 0x3E, 0xCD, 0x3A, 0x45, 0xB1, 0x06, 0x2D, 0xD9, 0x9E, 0xB7, 0x59, 0x80, 0x25, 0xB5, 0x53, 0xD9, 0xB5, 0xDD, 0x58, 0x2F, 0x99, 0x3F, 0x5F, 0xE7, 0x9B, 0x7E, 0x65, 0xDB, 0x0F, 0x62, 0xEF, 0xD5, 0xBF, 0x3C, 0x06, 0x00, 0xA7, 0x8E, 0xFF, 0x9E, 0x83, 0xF7, 0xB1, 0xF3, 0x36, 0xB3, 0x86, 0x76, 0x6C, 0x87, 0x8E, 0x2C, 0xF0, 0x6B, 0xD7, 0xA8, 0xB1, 0x01, 0x32, 0xEC, 0xDA, 0xEB, 0x0D, 0xCF, 0x1F, 0x15, 0xC9, 0xBC, 0x95, 0xDE, 0x95, 0x5D, 0x72, 0x9C, 0x35, 0x2E, 0x64, 0x3B, 0x66, 0xFC, 0x5F, 0xE5, 0xA0, 0x5F, 0xED, 0xB5, 0xAD, 0x06, 0xD0, 0x56, 0x83, 0xB6, 0xBB, 0xAA, 0x77, 0x55, 0x17, 0xB3, 0x1D, 0x5F, 0x5D, 0x34, 0xF5, 0x15, 0xEB, 0xEC, 0x3B, 0x7B, 0x39, 0x7E, 0xDC, 0xEA, 0xCD, 0xB2, 0x67, 0xC9, 0xDD, 0xE7, 0x64, 0x66, 0x92, 0x4F, 0x8F, 0x4B, 0xD4, 0x92, 0xE2, 0xB1, 0x55, 0xEC, 0xAF, 0xBF, 0xEA, 0xA6, 0xB2, 0x8F, 0xF6, 0xB0, 0xBF, 0xEE, 0xA3, 0x7D, 0x06, 0x20, 0x41, 0x29, 0x19, 0xD2, 0x5B, 0xBA, 0x3E, 0x26, 0x15, 0x27, 0xF4, 0x15, 0xEF, 0x22, 0x64, 0x5F, 0xCE, 0xD6, 0xE2, 0xC7, 0xAD, 0xC9, 0xEE, 0xE3, 0x4C, 0x66, 0xC4, 0x2B, 0x0C, 0x21, 0x5F, 0xEA, 0x49, 0x7F, 0xE4, 0x7D, 0x4A, 0xA8, 0xFD, 0xAA, 0xFE, 0x17, 0x4B, 0xF6, 0xD9, 0x35, 0xF6, 0x5E, 0xFD, 0x9F, 0xF5, 0xD1, 0xF1, 0x37, 0xA0, 0x03, 0xE5, 0x3F, 0xB4, 0x74, 0xEE, 0x3D, 0x80, 0xEC, 0x17, 0xA1, 0x60, 0x48, 0x9A, 0x9B, 0xF6, 0x5F, 0x4B, 0x06, 0x56, 0x28, 0x65, 0x93, 0xBB, 0xC2, 0xFB, 0x5C, 0x17, 0xE7, 0xE0, 0xC1, 0xAB, 0x65, 0xF2, 0x2F, 0x78, 0x9F, 0x32, 0x37, 0xFE, 0xB9, 0xFE, 0x4F, 0x0D, 0xF6, 0x65, 0x31, 0x5B, 0xBD, 0x85, 0xBD, 0xB9, 0xEB, 0x57, 0x7D, 0x48, 0xEC, 0x60, 0x25, 0x53, 0x80, 0x4E, 0xD3, 0xC4, 0x67, 0x16, 0x7E, 0x02, 0x4A, 0x77, 0xE8, 0xE7, 0xBD, 0xEE, 0x0F, 0x58, 0x46, 0x9A, 0x87, 0xAA, 0x8D, 0x21, 0x57, 0xA8, 0x0F, 0x76, 0x22, 0xD3, 0x57, 0x0D, 0xE9, 0x27, 0x1E, 0xBF, 0xA0, 0x2E, 0x4A, 0xE5, 0xF7, 0x3C, 0xA8, 0x68, 0xCA, 0x4A, 0xE4, 0xB0, 0xC0, 0x2B, 0x17, 0xB6, 0xFA, 0x2E, 0x7B, 0xD3, 0x83, 0x6C, 0xD2, 0xEC, 0xAC, 0x21, 0xD9, 0x31, 0xFA, 0x5F, 0xFB, 0x90, 0x93, 0x62, 0x25, 0xCB, 0x01, 0xE9, 0x37, 0x22, 0x8F, 0x99, 0x02, 0xB2, 0x0F, 0xE8, 0xE7, 0x5D, 0xAC, 0xB4, 0xA7, 0x91, 0x23, 0x8C, 0x0C, 0x32, 0xC8, 0xF9, 0x93, 0x74, 0xF5, 0xC8, 0xF4, 0x00, 0xFD, 0x1F, 0xE2, 0xDF, 0x2B, 0xFD, 0x2E, 0x37, 0x64, 0x29, 0xD7, 0x1D, 0x7E, 0xF2, 0xF5, 0x24, 0x52, 0x79, 0xD4, 0x73, 0x53, 0x12, 0xB8, 0xE3, 0x41, 0xB6, 0x19, 0x72, 0xEE, 0x0A, 0x29, 0xFD, 0xEA, 0x68, 0x0C, 0xD9, 0x4B, 0xF6, 0xD0, 0x46, 0x52, 0xDE, 0xF7, 0xEF, 0x9E, 0x07, 0x59, 0x56, 0xD1, 0x8A, 0x1D, 0x72, 0x0C, 0x68, 0x2E, 0xEA, 0xCB, 0x5E, 0x03, 0x94, 0x5E, 0x8A, 0xB9, 0xA4, 0x0A, 0xA0, 0x4B, 0x77, 0x9D, 0xA1, 0xBE, 0xD5, 0xF2, 0x24, 0x39, 0x7B, 0x9D, 0x75, 0x11, 0x99, 0x35, 0xD4, 0xA6, 0x59, 0xFD, 0x00, 0xE0, 0xBD, 0xFE, 0xB4, 0x9C, 0x07, 0x86, 0xA0, 0x59, 0x8E, 0xFB, 0x65, 0x3B, 0xD2, 0xE0, 0xC5, 0xF9, 0x9F, 0xA4, 0xCC, 0xC4, 0xC3, 0x99, 0x64, 0xFF, 0x73, 0x07, 0x1D, 0xC8, 0x41, 0x55, 0xBB, 0xBE, 0x93, 0x23, 0x64, 0x53, 0x8E, 0xF1, 0x3D, 0x63, 0x91, 0xA9, 0x97, 0x82, 0xF3, 0xE9, 0x7C, 0x56, 0x23, 0x8A, 0x35, 0xB8, 0xC9, 0x4E, 0x55, 0x66, 0x07, 0xEA, 0x00, 0xA3, 0x29, 0xFF, 0xA2, 0x65, 0xC2, 0xFC, 0x11, 0x1F, 0xF6, 0x01, 0x36, 0x3F, 0x5C, 0x8F, 0xDD, 0x1A, 0x0C, 0x24, 0x6C, 0x73, 0x6F, 0x79, 0xF9, 0x1A, 0x70, 0xA7, 0xE7, 0xC2, 0x4D, 0x87, 0xFB, 0x83, 0x66, 0x6B, 0x9E, 0x85, 0x29, 0xA4, 0xBD, 0x6B, 0xC6, 0x19, 0x52, 0xBF, 0x3C, 0xC9, 0x94, 0x34, 0x96, 0xDF, 0x51, 0x40, 0x1A, 0xFC, 0xC8, 0xB0, 0x24, 0xF5, 0xA7, 0xC4, 0xE7, 0x90, 0xC6, 0x62, 0x4E, 0xD7, 0xC3, 0x19, 0x7C, 0x1E, 0x96, 0xB2, 0x7A, 0xE6, 0xAC, 0x79, 0x29, 0x3B, 0xAF, 0x8A, 0x0D, 0xDA, 0x44, 0x3E, 0xED, 0x62, 0x63, 0x0A, 0x4C, 0xB9, 0x5D, 0x94, 0x00, 0x74, 0x29, 0x59, 0x1F, 0xB7, 0x43, 0x0A, 0xF0, 0xAC, 0x5F, 0xDF, 0x77, 0x43, 0x04, 0x50, 0xBA, 0x2B, 0xE4, 0xF5, 0xAA, 0x38, 0x50, 0x76, 0x92, 0x5C, 0xF9, 0x9D, 0xF4, 0x2F, 0x5D, 0x7A, 0x84, 0x9C, 0xEF, 0xE1, 0x11, 0x4C, 0xBA, 0x47, 0x2D, 0xF2, 0x23, 0x5D, 0x67, 0x2E, 0xBD, 0x4D, 0xCE, 0x75, 0x9D, 0xB3, 0x85, 0x74, 0xDE, 0xF4, 0xB7, 0x5C, 0x38, 0x74, 0x2B, 0x3B, 0x21, 0x81, 0xF5, 0x52, 0x60, 0xE3, 0xAE, 0x90, 0xAF, 0x7E, 0xEE, 0xF0, 0x24, 0xCF, 0xA9, 0x26, 0xBC, 0x01, 0xB4, 0x6C, 0x62, 0xC2, 0x5C, 0xEA, 0x80, 0xE5, 0x63, 0xFB, 0x5F, 0xEF, 0x32, 0x4A, 0x3E, 0x23, 0x6D, 0x71, 0xA7, 0x74, 0xD9, 0xEA, 0x84, 0x4D, 0xA9, 0x95, 0x80, 0x54, 0xB0, 0xC8, 0x10, 0xF2, 0xE0, 0x2C, 0xB3, 0x8F, 0x8D, 0xD1, 0x66, 0xA3, 0xB4, 0xD8, 0x70, 0x69, 0x36, 0x64, 0x19, 0xBB, 0x6E, 0x97, 0x78, 0xCE, 0x0E, 0x80, 0xE7, 0xA5, 0x46, 0xEC, 0xA6, 0x73, 0x20, 0x6D, 0xB6, 0x65, 0x91, 0x77, 0x8A, 0xD2, 0x9E, 0x92, 0xE7, 0x3E, 0x15, 0x77, 0x21, 0x8B, 0x9C, 0x0F, 0xE9, 0x00, 0x3D, 0xF2, 0x7D, 0x7C, 0xB3, 0xB2, 0x00, 0xC7, 0x7A, 0xC0, 0x7F, 0xAD, 0x5C, 0xDF, 0xD8, 0x02, 0x20, 0xBC, 0x72, 0xAB, 0x7B, 0x88, 0x99, 0x70, 0x85, 0x38, 0x77, 0x83, 0x01, 0xBF, 0x87, 0x22, 0x87, 0xF4, 0x07, 0xCC, 0xC4, 0xC4, 0x20, 0xD0, 0x1C, 0x50, 0x16, 0x2B, 0xC3, 0xDA, 0x3C, 0xA0, 0x33, 0xFD, 0x3D, 0x8C, 0x2C, 0xD0, 0x65, 0xA5, 0xD8, 0xFE, 0xC0, 0x39, 0x68, 0x65, 0x1B, 0x71, 0x8D, 0xA8, 0x72, 0xFD, 0x54, 0x09, 0x76, 0x6B, 0x08, 0x79, 0xED, 0x7E, 0x56, 0x0C, 0x79, 0x52, 0xAF, 0x78, 0x06, 0x59, 0x94, 0x50, 0xBE, 0x8F, 0x4C, 0x59, 0x7D, 0xE3, 0x3B, 0x39, 0xC7, 0xFA, 0x92, 0x3C, 0x60, 0x7E, 0x1C, 0x38, 0x32, 0x57, 0x7B, 0x82, 0x5F, 0x13, 0xE0, 0xD8, 0x83, 0x1D, 0x86, 0x8B, 0x9F, 0x00, 0x47, 0xC5, 0xFA, 0xE9, 0xD1, 0x16, 0x28, 0x39, 0x28, 0xE6, 0x91, 0x2B, 0x81, 0x64, 0x27, 0x91, 0x2F, 0x06, 0x00, 0x71, 0x22, 0x09, 0xD0, 0x6F, 0xE2, 0x08, 0x6B, 0x91, 0x8F, 0x5D, 0x01, 0xFF, 0x79, 0xE2, 0x79, 0x19, 0x07, 0x2C, 0xF5, 0x13, 0x16, 0x89, 0xCC, 0x78, 0x15, 0x00, 0xBE, 0xFF, 0x4C, 0xCE, 0x24, 0xAF, 0x78, 0xE4, 0xCD, 0x26, 0x8F, 0x1C, 0x2F, 0xDA, 0x4D, 0x16, 0xAA, 0x9D, 0x6B, 0x4E, 0x26, 0xAD, 0x79, 0x90, 0x40, 0xAE, 0x8B, 0x7D, 0x37, 0x96, 0x9C, 0xDA, 0x8C, 0xEE, 0x5B, 0x0D, 0x1D, 0x0F, 0xBC, 0xED, 0x36, 0xE6, 0x86, 0xE3, 0x70, 0xE0, 0xBD, 0x4D, 0x9A, 0xF9, 0xB4, 0x62, 0xB1, 0x2D, 0xF2, 0xA0, 0xDD, 0xED, 0xD6, 0x29, 0xF7, 0x44, 0xFE, 0x31, 0xD8, 0x04, 0x5C, 0xF0, 0x12, 0xC7, 0xBA, 0x19, 0x38, 0x21, 0x56, 0xF0, 0xD1, 0xF3, 0x80, 0x43, 0x6F, 0xC4, 0xAC, 0xB6, 0x0A, 0xD8, 0xE3, 0x20, 0xF2, 0x91, 0x16, 0x90, 0xF1, 0x52, 0x5C, 0x0B, 0xE3, 0x3E, 0x79, 0x6E, 0xA5, 0xE3, 0xC5, 0x45, 0xB3, 0x82, 0x8D, 0x64, 0xD9, 0xAE, 0xC2, 0x49, 0x64, 0xE1, 0xC7, 0xF3, 0xE6, 0x64, 0x5A, 0xE6, 0xBB, 0x7C, 0x72, 0x35, 0x7F, 0x1E, 0x09, 0x8E, 0x07, 0x59, 0x63, 0x1F, 0xB2, 0xE7, 0x25, 0xD0, 0xAB, 0xB0, 0xA5, 0xBE, 0x99, 0xE4, 0x0F, 0x71, 0x44, 0x6F, 0x07, 0x6E, 0xFA, 0xC7, 0xFB, 0x62, 0x9A, 0x57, 0xD8, 0xBE, 0x81, 0xC0, 0xB3, 0x09, 0xE2, 0xB5, 0xB0, 0x1A, 0xB8, 0xBB, 0x58, 0xCC, 0x9E, 0xAF, 0x00, 0xD7, 0x4A, 0xC4, 0x6B, 0xB0, 0x1D, 0x70, 0xAE, 0x8B, 0x48, 0x30, 0xB2, 0x17, 0xAB, 0xF3, 0x6C, 0x00, 0xA0, 0xF4, 0x50, 0xBE, 0x0B, 0xB9, 0xE7, 0xD0, 0xF9, 0x77, 0x64, 0xCE, 0xC2, 0x9F, 0xC9, 0xA4, 0x7F, 0x00, 0xEF, 0x75, 0xDA, 0x5B, 0x76, 0x54, 0x39, 0x3B, 0xF0, 0x10, 0x4B, 0x2B, 0x8C, 0x71, 0x2A, 0x40, 0x9F, 0x26, 0x58, 0x53, 0xD7, 0xA4, 0x2D, 0xE8, 0x6A, 0x5C, 0xD2, 0xCC, 0xA7, 0xD5, 0xE2, 0x7F, 0xB7, 0xBE, 0x36, 0xBB, 0xCB, 0x76, 0xBC, 0x0A, 0xBC, 0x11, 0x93, 0x1F, 0x19, 0xCF, 0xA3, 0x93, 0x0B, 0x6E, 0x02, 0xC0, 0x7E, 0x9C, 0xEF, 0x49, 0xEE, 0x79, 0xCF, 0x8F, 0x0E, 0x3C, 0xCF, 0x4E, 0x6D, 0xCE, 0x0E, 0x19, 0xCC, 0x4A, 0x7E, 0x63, 0x81, 0x7F, 0x35, 0x44, 0x82, 0xF5, 0xDC, 0x0D, 0x70, 0x9D, 0x86, 0x5B, 0x5A, 0x7C, 0xFE, 0x38, 0x00, 0x94, 0x65, 0xF2, 0x77, 0xD7, 0x5E, 0x64, 0xA7, 0xAF, 0x60, 0x07, 0x9E, 0x60, 0x7F, 0x53, 0x62, 0x81, 0x5F, 0x1B, 0xDC, 0x8C, 0xF5, 0x8F, 0x62, 0xC3, 0xD9, 0x06, 0xF5, 0x51, 0x56, 0xFF, 0x79, 0x08, 0x00, 0x84, 0x73, 0xFE, 0x83, 0x43, 0x2E, 0xAB, 0xAE, 0xCC, 0xA2, 0xEC, 0xFF, 0x37, 0x07, 0xB1, 0xAC, 0xDC, 0x43, 0x56, 0xC7, 0x8E, 0x9D, 0xB2, 0x8D, 0xF5, 0x4F, 0x64, 0x77, 0x47, 0xB3, 0x77, 0xBB, 0xB3, 0x0D, 0xF9, 0x7A, 0xDF, 0x9C, 0x7D, 0xE2, 0xC6, 0x36, 0xA4, 0x8F, 0x9E, 0x52, 0xAC, 0x4E, 0x18, 0x6B, 0x77, 0x9D, 0xF5, 0xF5, 0x60, 0xB3, 0x16, 0xB3, 0x55, 0x65, 0x7F, 0x5E, 0xFF, 0xE3, 0x04, 0xF6, 0xE9, 0x19, 0xB6, 0x6A, 0x45, 0xC3, 0xFB, 0xE8, 0xB4, 0xB1, 0xD9, 0x48, 0x52, 0xC7, 0x1A, 0x20, 0x6D, 0xB4, 0x58, 0xEF, 0x0D, 0x12, 0x13, 0xC9, 0xAC, 0xA7, 0x00, 0x79, 0x6B, 0xFC, 0xAF, 0xEB, 0x7F, 0xE8, 0xCC, 0xD6, 0x5E, 0x64, 0x6F, 0x7D, 0x64, 0xAF, 0x7C, 0x69, 0x78, 0x1F, 0x6D, 0xE6, 0xB5, 0xA9, 0x25, 0xE5, 0x27, 0x4B, 0xDF, 0x16, 0x79, 0x51, 0x6D, 0x92, 0x05, 0x7F, 0xDF, 0x2B, 0xAE, 0xC7, 0x26, 0x32, 0x7D, 0xB1, 0xCC, 0x72, 0xF2, 0xF6, 0xA1, 0x8E, 0x47, 0x79, 0x9F, 0x6D, 0x22, 0x59, 0xE0, 0x7D, 0x0A, 0x5B, 0x13, 0xC4, 0x5E, 0x3F, 0xCA, 0x5E, 0x4C, 0x65, 0xCB, 0xAF, 0xFC, 0x69, 0x1F, 0xB3, 0x81, 0x26, 0x83, 0x44, 0x5D, 0x15, 0xA0, 0x7D, 0x38, 0x7D, 0x5F, 0xCE, 0x57, 0xEE, 0x27, 0xA9, 0xE7, 0xAB, 0xD8, 0x96, 0xF4, 0xDC, 0xA4, 0xF2, 0x81, 0xCC, 0xF8, 0xA8, 0xD4, 0x85, 0xBC, 0x5B, 0xAD, 0xDC, 0xE7, 0xCB, 0x02, 0xD0, 0xFC, 0x47, 0xE3, 0xA1, 0x3C, 0x29, 0x79, 0xA4, 0x3A, 0x9C, 0x04, 0x2E, 0xB9, 0xB2, 0x67, 0xD2, 0xD9, 0xE3, 0x66, 0x6C, 0xD9, 0x2F, 0xF3, 0x69, 0x0B, 0x27, 0x56, 0xA6, 0x98, 0x95, 0x0A, 0x05, 0x3A, 0xD3, 0xBB, 0x1A, 0x34, 0x71, 0xD5, 0x18, 0x42, 0x6A, 0xDA, 0x6B, 0xDF, 0x24, 0x5D, 0x26, 0xEB, 0xA4, 0x7D, 0x32, 0x04, 0x76, 0x6C, 0x1C, 0x99, 0x55, 0x7B, 0x16, 0xA8, 0xB4, 0xD1, 0x9D, 0x7E, 0xA3, 0x16, 0x94, 0x1D, 0xCE, 0x9F, 0xF2, 0x27, 0x35, 0x3E, 0x1C, 0xCD, 0x20, 0x7B, 0x46, 0x1F, 0xBD, 0x40, 0x36, 0xFB, 0x5E, 0x7A, 0x89, 0x94, 0xA8, 0xCD, 0xFA, 0x4E, 0xF6, 0x96, 0xCA, 0x58, 0x02, 0xF2, 0x0F, 0xFA, 0xE8, 0x75, 0x8B, 0x55, 0x96, 0x63, 0xC7, 0x58, 0xB3, 0x4A, 0x7A, 0xC0, 0x80, 0x8A, 0x9F, 0xCD, 0x01, 0xE9, 0xD1, 0xD6, 0x5B, 0x6F, 0x27, 0x00, 0xE6, 0xC1, 0xD6, 0x9D, 0xCB, 0x3B, 0x03, 0xA1, 0x2A, 0x76, 0x01, 0x65, 0x27, 0x81, 0xC3, 0x7A, 0x53, 0x75, 0xF7, 0xF0, 0x67, 0x03, 0xEE, 0x65, 0xC4, 0x91, 0xE6, 0xDE, 0x49, 0xC3, 0x48, 0xDD, 0xDB, 0xDB, 0xE7, 0x90, 0x83, 0x33, 0xB6, 0xF1, 0x7C, 0xAE, 0x20, 0x21, 0x8B, 0x1C, 0x76, 0x3C, 0x76, 0x1A, 0x39, 0x3C, 0xE4, 0x6F, 0xF5, 0x7B, 0xDE, 0x66, 0xFB, 0x5D, 0x63, 0xB5, 0x06, 0xB3, 0xE3, 0xF3, 0xC8, 0x1F, 0xA3, 0x3C, 0x3C, 0xC8, 0xCB, 0xC3, 0x8D, 0x8C, 0x00, 0xA3, 0x09, 0xA9, 0x86, 0x80, 0x74, 0x99, 0x77, 0xD7, 0x18, 0x3B, 0x60, 0x8E, 0xB9, 0x97, 0xC9, 0x2A, 0x69, 0x20, 0x33, 0xCC, 0xC7, 0xD7, 0x67, 0x16, 0xF0, 0x75, 0xE7, 0xF2, 0xD6, 0xCB, 0x8C, 0x41, 0x7F, 0x97, 0xB5, 0xD5, 0x45, 0x9E, 0x74, 0xF6, 0x9E, 0xD9, 0x85, 0x9C, 0xB5, 0xCC, 0xBE, 0x15, 0xE9, 0x30, 0x60, 0x9A, 0x03, 0x69, 0x5F, 0x6F, 0xB5, 0x15, 0x64, 0x95, 0xC8, 0x9D, 0x73, 0xB9, 0x5E, 0xEF, 0xF3, 0xEC, 0xB0, 0xE6, 0xEC, 0x38, 0x5B, 0xF2, 0xB1, 0xE7, 0x92, 0xF3, 0xE4, 0x15, 0xB3, 0x10, 0x19, 0xF2, 0xA0, 0x5D, 0xA8, 0x15, 0xA0, 0x60, 0x1F, 0x78, 0x72, 0xEA, 0x47, 0xC0, 0xB5, 0x50, 0x7E, 0x60, 0xC7, 0x4E, 0xDD, 0xB6, 0xC6, 0xCF, 0x6F, 0xB5, 0xAE, 0xB3, 0x5A, 0x80, 0xD7, 0xA6, 0x4C, 0xA0, 0x8B, 0xD6, 0xAD, 0x94, 0x4D, 0x36, 0x40, 0xDB, 0xF6, 0x22, 0xFF, 0x44, 0xF0, 0xBE, 0xC2, 0xAC, 0xD8, 0x35, 0x03, 0xD9, 0xD5, 0x6E, 0x6C, 0x60, 0x35, 0xEB, 0xF7, 0xE8, 0x6F, 0x79, 0x6C, 0xB0, 0x26, 0x3B, 0xA6, 0x98, 0xBC, 0xBA, 0x20, 0xC0, 0x8F, 0x3C, 0x59, 0x1B, 0x3A, 0x83, 0x2C, 0xC9, 0x4C, 0x5A, 0x44, 0xA6, 0x46, 0xE4, 0x04, 0x03, 0xCD, 0x42, 0xDC, 0x27, 0x6F, 0xA9, 0x03, 0xAC, 0x14, 0x01, 0x8F, 0xD8, 0x2E, 0xEE, 0x6B, 0x8F, 0x03, 0xFE, 0xBE, 0x6B, 0xCD, 0x7C, 0x26, 0x0B, 0xF5, 0xAB, 0x9A, 0x52, 0x96, 0x5B, 0x3A, 0x43, 0xCC, 0x61, 0x8A, 0x01, 0x67, 0x71, 0xAC, 0xF3, 0x6D, 0x80, 0x2E, 0xCB, 0x45, 0x2E, 0x1A, 0x0D, 0x48, 0x89, 0x99, 0xAB, 0xFF, 0x26, 0xB1, 0x1D, 0x2F, 0xE6, 0x66, 0x9F, 0x39, 0x07, 0x79, 0xBA, 0x88, 0x35, 0x58, 0x9A, 0xEB, 0x8F, 0xEC, 0x4B, 0x9E, 0x79, 0xBC, 0x7A, 0x0B, 0x79, 0xE8, 0x72, 0x98, 0x31, 0x99, 0xD7, 0x36, 0xE5, 0x32, 0xB9, 0x3D, 0x21, 0x3F, 0x83, 0x0C, 0xED, 0x77, 0x2C, 0x97, 0xB4, 0x57, 0x38, 0x3C, 0x12, 0xD0, 0x5C, 0x01, 0xE4, 0x25, 0xAB, 0x3E, 0x77, 0x4D, 0x00, 0x0A, 0x57, 0x84, 0xC2, 0x61, 0x25, 0x50, 0x6C, 0x7F, 0xE7, 0xCD, 0xF4, 0xE1, 0x40, 0xB6, 0x98, 0xE1, 0xDA, 0xA6, 0x02, 0x89, 0x2D, 0xC4, 0xA4, 0xE6, 0x13, 0x10, 0xB6, 0x5F, 0xE4, 0x8C, 0x72, 0x60, 0xAD, 0xA2, 0xB8, 0x6E, 0x36, 0x03, 0xAB, 0xD3, 0x85, 0xC5, 0xC0, 0xF2, 0xF6, 0xE2, 0xE7, 0x94, 0x51, 0x1E, 0x03, 0xC0, 0xD1, 0x79, 0x21, 0x89, 0xE4, 0x11, 0xAF, 0x48, 0x6D, 0x72, 0xB7, 0x53, 0x6A, 0x00, 0x99, 0x32, 0xA7, 0x30, 0x8E, 0x0C, 0x92, 0x3A, 0xAF, 0x42, 0xBA, 0x77, 0xBA, 0x39, 0x9D, 0xB4, 0x56, 0xB8, 0x6D, 0x07, 0x48, 0xFF, 0x00, 0xAE, 0xD9, 0x0E, 0x96, 0x34, 0xDB, 0x0E, 0xDC, 0x68, 0x13, 0x2A, 0x63, 0x40, 0xF7, 0xE7, 0xDE, 0x56, 0x2D, 0xD4, 0xF3, 0x00, 0x2E, 0x8B, 0x7B, 0xB2, 0x23, 0x46, 0x00, 0xA7, 0x5B, 0x89, 0xD7, 0xCD, 0x62, 0xA0, 0x74, 0x9D, 0x98, 0x8D, 0x46, 0x02, 0xFB, 0x44, 0x1E, 0x53, 0xCF, 0x00, 0xF2, 0x56, 0x89, 0x4C, 0xEC, 0xC9, 0x9F, 0x0D, 0xD0, 0xD2, 0x3F, 0x96, 0xB5, 0x3A, 0x0B, 0xD4, 0x87, 0x7F, 0xE4, 0x4B, 0x72, 0x57, 0xCB, 0xD4, 0x3A, 0x32, 0x65, 0x72, 0xC1, 0x78, 0x32, 0x38, 0xBC, 0xB2, 0x39, 0xE9, 0x56, 0xF3, 0x22, 0x8E, 0x9C, 0x54, 0xF5, 0xF9, 0x1C, 0x69, 0xA6, 0xF9, 0xB7, 0x2B, 0x5C, 0xD5, 0x7F, 0xD8, 0xD7, 0xD6, 0x1F, 0x44, 0x2A, 0x5D, 0xA7, 0x7C, 0x93, 0xB6, 0x2B, 0xAD, 0xFB, 0x7F, 0x24, 0xC5, 0x6B, 0xEE, 0x24, 0xF0, 0x56, 0xE4, 0x42, 0x99, 0x2C, 0xE0, 0x8E, 0xB8, 0x4F, 0x29, 0xF9, 0x00, 0xA8, 0x14, 0x73, 0x3A, 0xE9, 0xB7, 0xC0, 0x05, 0xF1, 0x9E, 0x55, 0x56, 0x09, 0x28, 0x17, 0xF3, 0x2B, 0xB9, 0x57, 0x65, 0xF5, 0x91, 0x7B, 0x01, 0x20, 0x43, 0x27, 0x75, 0x35, 0x99, 0xEC, 0x9F, 0xF3, 0x9D, 0x0C, 0xAD, 0xBB, 0x39, 0x95, 0x9C, 0xB7, 0xE1, 0x53, 0x2E, 0x69, 0x69, 0xC3, 0x75, 0x07, 0x5F, 0x63, 0x7B, 0x4B, 0xB2, 0x54, 0xAF, 0xF3, 0xD0, 0xB6, 0x77, 0x78, 0xC2, 0x0A, 0x90, 0x71, 0xE1, 0x8D, 0xC9, 0x1F, 0xAF, 0xB4, 0xC8, 0xCC, 0x80, 0x94, 0x51, 0x00, 0xB0, 0x5D, 0x7A, 0xD7, 0x23, 0x32, 0x3E, 0xF0, 0xB5, 0x14, 0xB9, 0xA0, 0x09, 0x3F, 0xCA, 0x6C, 0x12, 0xDB, 0xEF, 0x2D, 0xDB, 0xA4, 0xF6, 0xDF, 0xCC, 0x61, 0x36, 0xB0, 0x2B, 0x03, 0x1B, 0x9F, 0x83, 0xB6, 0xD5, 0x67, 0x3A, 0x01, 0x40, 0x7A, 0xDC, 0xF9, 0x09, 0xE4, 0x92, 0x99, 0xFC, 0x53, 0xF3, 0x1B, 0x6C, 0x8F, 0x02, 0x16, 0xF8, 0x73, 0x83, 0x02, 0x58, 0xBF, 0x30, 0x36, 0x8C, 0x6D, 0x60, 0x1F, 0x67, 0xDD, 0x00, 0xC0, 0xCB, 0x84, 0xBF, 0x6B, 0x71, 0x98, 0xED, 0x61, 0xCA, 0x02, 0x0D, 0xD7, 0xE7, 0x1A, 0x1B, 0x08, 0x36, 0xA8, 0xCB, 0xFF, 0x6C, 0x0E, 0x92, 0xF9, 0xC8, 0xAA, 0x57, 0xB3, 0xD6, 0x99, 0xEC, 0x0A, 0x6F, 0x36, 0xD5, 0x8E, 0xBD, 0xD5, 0xEA, 0xCF, 0xF3, 0xC7, 0x57, 0x39, 0xF6, 0x55, 0x25, 0xFB, 0x70, 0x4F, 0xC3, 0xD7, 0xFD, 0xAE, 0xAB, 0xD8, 0x81, 0x87, 0x59, 0xAB, 0x1C, 0xD6, 0xDF, 0x86, 0xDD, 0x69, 0xC2, 0xDE, 0xEC, 0xF5, 0xEB, 0xFA, 0x5F, 0xBC, 0xD9, 0x17, 0x5F, 0xD8, 0x9B, 0xB2, 0xEC, 0xD5, 0x81, 0x0D, 0xEF, 0xA3, 0xFD, 0x65, 0x76, 0x40, 0x08, 0x6B, 0xFE, 0x98, 0xF5, 0x79, 0xC3, 0xEE, 0x3C, 0xC8, 0x5E, 0xBB, 0xF5, 0xAF, 0xF5, 0x3F, 0x8D, 0x66, 0x1F, 0x97, 0xB1, 0x95, 0xA5, 0xEC, 0x85, 0x1A, 0xB6, 0x7C, 0x6F, 0xC3, 0xFB, 0x68, 0x21, 0xC3, 0xAA, 0x1E, 0x67, 0xC7, 0x4B, 0xB0, 0xCB, 0x82, 0xD9, 0x34, 0x3F, 0xF6, 0xAA, 0x32, 0x4B, 0x5F, 0xEF, 0x6E, 0xB0, 0x77, 0xC6, 0xB0, 0x17, 0xDA, 0xB1, 0xE5, 0x1D, 0xD9, 0x63, 0x26, 0xEC, 0xA1, 0xA1, 0x6C, 0x63, 0xAE, 0x46, 0xD5, 0x93, 0xAC, 0x91, 0x09, 0xBB, 0x68, 0x6C, 0x8B, 0xCF, 0x64, 0x5A, 0x51, 0x8B, 0x85, 0xDF, 0xE5, 0x81, 0x8B, 0x8A, 0x4D, 0x27, 0xD5, 0xA9, 0x80, 0xEE, 0x07, 0x0E, 0xBB, 0xB3, 0x93, 0x04, 0xCE, 0x1F, 0x65, 0x0F, 0x15, 0xB0, 0xFB, 0x73, 0xD9, 0x92, 0x8D, 0x6C, 0xD1, 0xA4, 0x86, 0xF6, 0xF1, 0x5B, 0x3F, 0xE0, 0xB7, 0x14, 0xDA, 0xEE, 0x94, 0x2C, 0x25, 0x72, 0x82, 0xA4, 0x86, 0x5E, 0x6C, 0xCB, 0x84, 0x8F, 0x45, 0x80, 0x4B, 0x9C, 0x7C, 0x49, 0xCD, 0x56, 0x20, 0xA1, 0xB5, 0x92, 0x42, 0xE5, 0x29, 0xE0, 0x70, 0x40, 0xBF, 0xD7, 0x17, 0xFE, 0x33, 0x53, 0xAB, 0x06, 0x1F, 0x8E, 0x25, 0x65, 0x87, 0x1F, 0xB6, 0x21, 0x9B, 0x86, 0x17, 0x7D, 0x23, 0x81, 0xFC, 0xE3, 0x6C, 0xCE, 0x33, 0x36, 0x33, 0xE8, 0xCF, 0xFA, 0x68, 0x16, 0xC0, 0xCA, 0xEB, 0xB0, 0x72, 0x29, 0x40, 0xB7, 0xC0, 0xBB, 0x66, 0x40, 0xF7, 0x37, 0x5A, 0xF9, 0x67, 0xAE, 0x03, 0x46, 0x4A, 0xA3, 0x46, 0xEC, 0xAF, 0x02, 0xFC, 0x2A, 0xF5, 0xB6, 0x14, 0x34, 0x05, 0x0A, 0x14, 0x0C, 0xCE, 0xA4, 0xD7, 0x01, 0xCF, 0xF6, 0x1B, 0xD8, 0x26, 0xAF, 0x03, 0xDD, 0xB7, 0xB4, 0xDC, 0x3A, 0x9C, 0x54, 0x5F, 0xB4, 0x39, 0x8C, 0x94, 0x8B, 0x8A, 0xED, 0x42, 0xF6, 0xAE, 0x88, 0xB2, 0x24, 0x15, 0x2E, 0x86, 0xBE, 0x25, 0x15, 0x95, 0xFE, 0x60, 0x7E, 0x3B, 0x85, 0xED, 0x55, 0xC1, 0x6A, 0xB6, 0x26, 0xAB, 0x7B, 0x5B, 0x5E, 0x27, 0x4B, 0x6D, 0x86, 0x5B, 0x03, 0xC3, 0x2C, 0x36, 0xBE, 0x03, 0xBA, 0xFE, 0x98, 0x9B, 0xBC, 0x7A, 0x02, 0x60, 0xE7, 0xE0, 0xB8, 0x66, 0xD9, 0x44, 0x20, 0xC1, 0xD6, 0x39, 0xDE, 0x5D, 0x11, 0xB8, 0xFC, 0xD6, 0xB9, 0x97, 0xF3, 0x7F, 0xBE, 0x2F, 0x71, 0x3C, 0x34, 0x5D, 0x9F, 0x9C, 0xD1, 0xDD, 0x26, 0x8E, 0xB4, 0x78, 0x32, 0x51, 0x85, 0x9C, 0xB8, 0xC2, 0xFC, 0x19, 0x69, 0xBD, 0xC5, 0xE2, 0x21, 0x69, 0xF1, 0xF0, 0x6F, 0xF5, 0x3B, 0x2D, 0x64, 0x7B, 0xAD, 0x66, 0x07, 0x59, 0x93, 0x37, 0x02, 0x26, 0x14, 0x93, 0x65, 0x73, 0x17, 0x47, 0x91, 0x59, 0x53, 0xE8, 0x5D, 0x4B, 0x07, 0xE9, 0x25, 0x59, 0xE6, 0x41, 0x80, 0xAD, 0x65, 0xDB, 0x9B, 0xF0, 0x69, 0xF9, 0x24, 0xA2, 0x23, 0xD0, 0xAA, 0x8F, 0xD3, 0xD5, 0x30, 0x03, 0xA0, 0xCB, 0xCB, 0x12, 0x8D, 0xA0, 0xF5, 0x80, 0xF4, 0xDD, 0xFA, 0xFA, 0x55, 0x77, 0xC1, 0xB9, 0x47, 0x97, 0x5D, 0x72, 0x99, 0x5D, 0x5C, 0xC0, 0x2E, 0x5A, 0xC5, 0x7A, 0xCC, 0x13, 0xCF, 0xB7, 0x39, 0xF8, 0xBC, 0x27, 0xB2, 0x2A, 0xF7, 0xC8, 0xD2, 0xC7, 0x33, 0xF4, 0xC8, 0x03, 0xEF, 0xFC, 0xDB, 0x93, 0x29, 0x0E, 0x41, 0x6B, 0xC9, 0xE8, 0x85, 0xF1, 0x9B, 0x48, 0x87, 0xE4, 0x90, 0x69, 0x80, 0xAE, 0x3A, 0xE0, 0x10, 0x2E, 0x79, 0x7E, 0x89, 0x32, 0xB0, 0xD0, 0x64, 0xC9, 0x09, 0x97, 0xDF, 0x84, 0x8E, 0xFB, 0xF5, 0xE7, 0xEC, 0x10, 0x8A, 0xC9, 0xC0, 0xEC, 0xE9, 0xC0, 0xEC, 0x15, 0xE2, 0x7E, 0x65, 0x95, 0x7C, 0xA5, 0xDE, 0x17, 0x71, 0xFC, 0xFE, 0x80, 0xB4, 0x83, 0xC8, 0x45, 0xA9, 0x40, 0xB7, 0x77, 0x62, 0xF6, 0x56, 0xC0, 0x39, 0xC8, 0xD9, 0x81, 0xF3, 0x18, 0xF0, 0xE0, 0xA4, 0x8E, 0x3B, 0x79, 0xE0, 0xEA, 0xA2, 0x77, 0xE4, 0x9E, 0x0B, 0x01, 0x57, 0xC9, 0x6D, 0x7B, 0x22, 0x74, 0xC8, 0xB0, 0x89, 0x09, 0x7A, 0xE4, 0x92, 0xBD, 0x59, 0x6B, 0x49, 0x9B, 0x92, 0x02, 0x47, 0x40, 0x6E, 0x29, 0xB0, 0x3D, 0x5F, 0xEE, 0xE3, 0xE4, 0x63, 0x40, 0x5A, 0x0B, 0xEF, 0xF1, 0x13, 0x4A, 0x81, 0xF4, 0xE6, 0x07, 0xCD, 0x8C, 0xC3, 0x80, 0x34, 0x53, 0x91, 0x2D, 0x3F, 0x03, 0x1B, 0x9C, 0x44, 0x7E, 0x37, 0x06, 0x56, 0x64, 0x8B, 0xAC, 0x33, 0x18, 0x58, 0x2E, 0xEA, 0xEB, 0x5E, 0x04, 0x7C, 0x06, 0x88, 0xEC, 0xE7, 0x04, 0x2C, 0x59, 0x2A, 0xB6, 0x71, 0xAF, 0x7E, 0xC4, 0x63, 0x00, 0x38, 0x64, 0xE1, 0x7D, 0x8F, 0x2C, 0xB8, 0x17, 0x38, 0x86, 0xDC, 0x9E, 0x1D, 0xF3, 0x99, 0x0C, 0x7D, 0x9F, 0xF0, 0x85, 0x74, 0x53, 0x2E, 0x7C, 0x41, 0x4E, 0x53, 0x2E, 0x9F, 0x44, 0x5A, 0xBD, 0xBE, 0x10, 0x47, 0x02, 0x27, 0x22, 0xFA, 0x0D, 0xD5, 0x09, 0x07, 0x4E, 0xBB, 0x7A, 0xED, 0xD4, 0x18, 0x01, 0x9C, 0xBA, 0x76, 0xA0, 0xA7, 0xDA, 0x3B, 0x61, 0xB5, 0xC8, 0x3D, 0x6D, 0x80, 0xD2, 0xBE, 0x62, 0x0E, 0xE3, 0x03, 0xE4, 0xCF, 0x17, 0xE7, 0x7C, 0x03, 0x90, 0x9D, 0x20, 0x8E, 0xBD, 0x25, 0x90, 0xA9, 0x26, 0x66, 0xA5, 0xE7, 0x80, 0xED, 0x22, 0x8B, 0x29, 0xE6, 0x94, 0xD5, 0x7B, 0xF5, 0x00, 0x80, 0xBC, 0xA1, 0x01, 0x6A, 0xE4, 0xF6, 0xE2, 0xD8, 0x81, 0x64, 0xCC, 0xB0, 0x1D, 0x25, 0xE4, 0x9C, 0x4F, 0x7B, 0xB2, 0xC9, 0x29, 0x23, 0x2B, 0x65, 0xC8, 0x11, 0xA3, 0x6E, 0x7D, 0x27, 0xD5, 0xDB, 0x3F, 0xDE, 0x45, 0x02, 0xB5, 0xF6, 0x3D, 0x4D, 0x15, 0xFA, 0x00, 0xCF, 0x5A, 0x2E, 0xDE, 0x2D, 0x53, 0x05, 0xBC, 0x88, 0xD8, 0xDF, 0xB5, 0xCB, 0x7E, 0xE0, 0x79, 0x85, 0x78, 0xEF, 0x13, 0x0E, 0xDC, 0x8E, 0x11, 0xBF, 0x4F, 0xFA, 0x01, 0x17, 0x26, 0xF0, 0xB5, 0x78, 0xFA, 0x2C, 0x7B, 0xB4, 0x4C, 0xCC, 0xB5, 0x23, 0x00, 0x41, 0x7D, 0x6B, 0xB9, 0x5C, 0xDB, 0x40, 0x80, 0xEA, 0xB7, 0x8F, 0x35, 0x24, 0x37, 0x39, 0xEE, 0x94, 0x20, 0x9D, 0xFD, 0x4F, 0xEF, 0x25, 0x27, 0xC9, 0x54, 0xF7, 0x26, 0xB5, 0xAA, 0xDF, 0xDC, 0x27, 0xFB, 0xBD, 0xE2, 0xBD, 0x48, 0x74, 0x65, 0x41, 0xEF, 0x22, 0x0B, 0x59, 0xB7, 0xA9, 0xEC, 0x56, 0x8D, 0x86, 0xAC, 0xB3, 0x1F, 0x0D, 0xD9, 0x5A, 0x2B, 0x5E, 0xF7, 0x63, 0xEA, 0x00, 0x20, 0x49, 0x73, 0xE7, 0x26, 0x72, 0x4E, 0xE5, 0x85, 0x64, 0xD2, 0xA6, 0xE0, 0xF9, 0x52, 0x52, 0x33, 0x92, 0x1F, 0x2D, 0x79, 0x98, 0x05, 0x7E, 0xED, 0x82, 0x10, 0x76, 0xBD, 0x45, 0xE3, 0x73, 0x50, 0x52, 0x4A, 0x6A, 0x31, 0x00, 0xB8, 0xAD, 0xAA, 0x58, 0x48, 0x4E, 0xAD, 0xA9, 0x0B, 0x24, 0x07, 0x1B, 0xF1, 0xA3, 0x5A, 0xC4, 0xB0, 0xC0, 0x9F, 0xEB, 0xB5, 0x9F, 0x5D, 0x7E, 0x83, 0x0D, 0x65, 0x1B, 0xD4, 0x87, 0x97, 0x7A, 0x66, 0x28, 0x00, 0xCC, 0x98, 0xF7, 0xD6, 0x81, 0x1C, 0x1C, 0xF1, 0x7B, 0x7D, 0x5B, 0x16, 0x68, 0xB8, 0x2E, 0xB7, 0xD8, 0x40, 0xB0, 0x31, 0xAD, 0xFF, 0x67, 0x73, 0x50, 0x67, 0x4B, 0x56, 0xF1, 0x3E, 0x6B, 0xA6, 0xCA, 0x06, 0x34, 0x65, 0x93, 0x96, 0xB0, 0x95, 0xDE, 0xFF, 0x26, 0x7F, 0x14, 0xB1, 0x2F, 0xAE, 0xB0, 0xD7, 0xB3, 0xD8, 0x4B, 0x29, 0x8D, 0xC8, 0x1F, 0x9E, 0xAC, 0x7C, 0x0A, 0x6B, 0x3A, 0x95, 0x0D, 0x9C, 0xCE, 0x6E, 0x7B, 0xCE, 0x5E, 0xB5, 0xFE, 0x83, 0xFA, 0xC3, 0xD9, 0xE7, 0xCE, 0xEC, 0xA5, 0x2D, 0xEC, 0x39, 0x2D, 0xF6, 0xE4, 0x8F, 0x86, 0xF7, 0xD1, 0x3C, 0x8B, 0xED, 0x1D, 0xC0, 0x1A, 0x5D, 0x67, 0xFD, 0xC7, 0xB0, 0xDB, 0x6E, 0xB1, 0x97, 0xE5, 0xFF, 0x2E, 0xFF, 0xDC, 0x63, 0x1F, 0x3D, 0x67, 0x2F, 0x64, 0xB0, 0x27, 0xB5, 0xD8, 0x92, 0x43, 0x6C, 0x71, 0x59, 0xE3, 0xF3, 0x47, 0x2F, 0x16, 0x63, 0xBF, 0xB0, 0xDE, 0x39, 0xEC, 0xF6, 0xDE, 0xC0, 0xB7, 0x1F, 0xC0, 0x39, 0x77, 0xE0, 0xEB, 0x25, 0x70, 0x56, 0xBD, 0xCB, 0x9E, 0xDB, 0xCC, 0xEE, 0x4B, 0x62, 0xF3, 0xBD, 0xD9, 0x5C, 0x3B, 0x36, 0x6B, 0x7B, 0xE3, 0xFB, 0x90, 0xEF, 0xC6, 0x8E, 0xE8, 0xC1, 0x2E, 0xB9, 0x0D, 0xBC, 0x9E, 0x0B, 0x24, 0x79, 0x01, 0xF7, 0x54, 0x80, 0xFD, 0x97, 0x80, 0x9B, 0x07, 0x80, 0x77, 0xD7, 0x81, 0x8A, 0x36, 0xE0, 0xDC, 0x73, 0x9A, 0xCD, 0xBD, 0xCA, 0xA6, 0x37, 0x63, 0x53, 0xBF, 0xB3, 0x29, 0x41, 0x8D, 0xEF, 0xA3, 0x9B, 0x19, 0xF0, 0x51, 0x17, 0xD0, 0xBE, 0x05, 0xD4, 0x7C, 0x01, 0x1C, 0x22, 0x80, 0x2B, 0x2B, 0x80, 0xB0, 0xA4, 0x16, 0xC1, 0xA7, 0x0B, 0x80, 0xC2, 0x8C, 0xD6, 0x03, 0x8F, 0xEC, 0x07, 0x1E, 0xF7, 0x6F, 0xE7, 0x78, 0xE0, 0x2C, 0xE8, 0x3E, 0x60, 0x9F, 0xFC, 0x00, 0x70, 0xDD, 0xE6, 0x6C, 0x92, 0x09, 0xBB, 0x55, 0x81, 0x4D, 0xB8, 0xDD, 0xB8, 0x3E, 0x9E, 0xBE, 0x96, 0xF0, 0x01, 0x9A, 0x9F, 0xA8, 0xE8, 0x0B, 0xF4, 0xB4, 0x90, 0x8F, 0xDE, 0x7F, 0x01, 0x30, 0x78, 0xAD, 0x7C, 0x25, 0xBB, 0x02, 0x58, 0xEC, 0xAE, 0x76, 0x6F, 0xE7, 0x31, 0x20, 0xE5, 0xCE, 0xA0, 0xF9, 0x09, 0x62, 0xFB, 0x62, 0xC2, 0x40, 0x8F, 0x38, 0x4F, 0x50, 0x76, 0x78, 0x1F, 0x79, 0x83, 0x54, 0xA8, 0x08, 0x29, 0x21, 0xA5, 0x7D, 0x36, 0x9D, 0x25, 0x81, 0xD5, 0xAF, 0x48, 0xC9, 0x96, 0x2B, 0x25, 0xC8, 0xCE, 0x1D, 0xFE, 0xAC, 0xFE, 0xEB, 0x90, 0x3E, 0x4B, 0xC8, 0xB3, 0x2F, 0xB5, 0x0D, 0xC8, 0x5C, 0x95, 0x81, 0xAD, 0x81, 0xBE, 0x6E, 0xEB, 0xE2, 0x81, 0x6E, 0xB2, 0x56, 0x16, 0x9E, 0x65, 0x80, 0xF9, 0x69, 0x8B, 0xF3, 0x6E, 0x2D, 0x81, 0xA0, 0x90, 0x89, 0xCF, 0x66, 0xC5, 0x01, 0xFB, 0x9F, 0x4C, 0x4C, 0x9E, 0x6E, 0x4D, 0xFB, 0xB0, 0x91, 0xB3, 0x1E, 0x48, 0x5A, 0x7C, 0x35, 0x77, 0x25, 0x0D, 0xAF, 0x99, 0x3C, 0x22, 0x75, 0x2D, 0x0D, 0xC3, 0x48, 0xFD, 0x30, 0xC3, 0x50, 0x52, 0xF7, 0x8F, 0xEA, 0x2B, 0x92, 0x2F, 0x3F, 0xC8, 0x6D, 0x20, 0x8F, 0x38, 0x8F, 0xE9, 0x46, 0x66, 0xBF, 0xB5, 0xAD, 0x23, 0x13, 0x67, 0xBB, 0x9E, 0x24, 0x9D, 0x14, 0xF4, 0xEE, 0x01, 0x86, 0x32, 0x00, 0x00, 0x04, 0xBE, 0x03, 0x9A, 0xC5, 0x4E, 0x7C, 0xB9, 0x7C, 0x17, 0xD0, 0x39, 0x7F, 0x47, 0xF5, 0x52, 0x1B, 0x40, 0xA6, 0xCD, 0x13, 0xE3, 0x05, 0x05, 0x40, 0x13, 0x19, 0x91, 0x77, 0xBC, 0x78, 0xDF, 0xCE, 0xB5, 0xEC, 0xEC, 0xE3, 0xAC, 0x63, 0x13, 0xD6, 0xBE, 0xF6, 0x6F, 0xF5, 0x9B, 0xDB, 0x92, 0x2F, 0x76, 0xC9, 0x36, 0x23, 0xCB, 0x32, 0x4C, 0x64, 0xC9, 0xD4, 0x81, 0x8E, 0x1E, 0x64, 0xE4, 0xD9, 0x45, 0x8B, 0x49, 0x3F, 0x77, 0xFF, 0x91, 0xA4, 0x9D, 0x89, 0xDF, 0x09, 0x60, 0x80, 0x1B, 0x30, 0x39, 0xB3, 0xC3, 0x10, 0x9A, 0xBF, 0xCC, 0x36, 0x9A, 0x5D, 0x3B, 0x39, 0x00, 0x70, 0x0C, 0x4E, 0x2F, 0xB6, 0x5C, 0x2C, 0xAC, 0x7F, 0xEE, 0x65, 0x1E, 0x00, 0x4C, 0xBD, 0x27, 0x66, 0x6C, 0x97, 0x3A, 0x74, 0xD0, 0x17, 0xEB, 0xBD, 0xD1, 0x67, 0x40, 0xE6, 0x8D, 0x98, 0xCF, 0x5C, 0x01, 0x7A, 0xAC, 0x15, 0xEE, 0xE4, 0x1C, 0x34, 0x59, 0x4A, 0xCC, 0x10, 0x35, 0x40, 0xF5, 0x17, 0xC9, 0x2C, 0x23, 0x8F, 0xFC, 0x30, 0x9F, 0x42, 0x6E, 0x5B, 0xE3, 0x64, 0x4A, 0x86, 0x0F, 0x5F, 0xB8, 0x95, 0xF4, 0xB1, 0x59, 0xF5, 0x82, 0x74, 0xA8, 0x49, 0x18, 0x4F, 0x5A, 0x2F, 0x4C, 0x1F, 0x44, 0x02, 0x51, 0x7E, 0xD2, 0xE5, 0xFA, 0x6B, 0x80, 0x4D, 0xDD, 0x9C, 0x5D, 0xB4, 0x3B, 0x02, 0x9B, 0x15, 0x77, 0xFB, 0x0E, 0xCD, 0x13, 0xDB, 0x2E, 0xCF, 0xB3, 0x87, 0x7C, 0x00, 0x42, 0x17, 0x88, 0x99, 0x57, 0x00, 0xB0, 0x6A, 0x99, 0xC8, 0xF1, 0x19, 0x80, 0x9F, 0xC8, 0x1B, 0x2A, 0xAE, 0x80, 0x2F, 0xDD, 0xCF, 0x3D, 0x02, 0x38, 0x05, 0x8B, 0xF9, 0xE1, 0xCF, 0xC7, 0x2F, 0x38, 0x8F, 0x1D, 0x51, 0xB5, 0x9C, 0x47, 0x26, 0xF5, 0x9C, 0xD7, 0x83, 0x0C, 0xE9, 0xBE, 0x28, 0x83, 0xF4, 0x3E, 0xB6, 0xAE, 0x25, 0x69, 0x9F, 0xBD, 0xD3, 0x93, 0x34, 0x0E, 0x2C, 0x72, 0x23, 0xB5, 0xB5, 0x0F, 0xCD, 0x23, 0x81, 0x3D, 0xB3, 0x7B, 0x6E, 0x56, 0x69, 0x0B, 0xEC, 0x7D, 0xE0, 0x5C, 0xD1, 0xFB, 0x30, 0xB0, 0x6F, 0x69, 0xFA, 0x6B, 0x99, 0x1C, 0xB1, 0xDD, 0xB4, 0xB6, 0x6F, 0x37, 0x7F, 0x80, 0xFE, 0xCB, 0x87, 0x5D, 0x34, 0x80, 0x74, 0x3F, 0x71, 0xCC, 0x69, 0x40, 0xF2, 0x05, 0x91, 0x37, 0x7C, 0x80, 0xED, 0x49, 0xF5, 0xF5, 0xED, 0x56, 0x01, 0x09, 0xBE, 0x22, 0x1B, 0x97, 0xE7, 0xFB, 0xCC, 0x3A, 0x06, 0x00, 0x5B, 0x3D, 0xDC, 0x1D, 0xC9, 0xF5, 0x91, 0x8B, 0x4E, 0x93, 0x3E, 0x3F, 0x82, 0x5E, 0x93, 0x0E, 0xBF, 0xED, 0xB6, 0x22, 0x87, 0x8F, 0x3B, 0x39, 0x81, 0x54, 0xA9, 0xA8, 0x98, 0x4C, 0x4A, 0xCF, 0xBA, 0xE4, 0x48, 0x02, 0x97, 0xBB, 0x74, 0xAC, 0x6F, 0xD9, 0x0C, 0xB8, 0xD2, 0xD7, 0xDE, 0x1E, 0x00, 0x2A, 0x1F, 0xA6, 0xC6, 0x91, 0xD7, 0x16, 0xD7, 0xF6, 0x21, 0xCF, 0xBF, 0xE0, 0xE7, 0xFE, 0xC4, 0x5C, 0xF6, 0xC0, 0x5B, 0x76, 0xEF, 0x70, 0xB6, 0x58, 0x87, 0xDC, 0x1A, 0xED, 0x31, 0x00, 0x00, 0x42, 0x8E, 0x2C, 0x6A, 0x47, 0xFA, 0x55, 0x06, 0xBB, 0x90, 0xB3, 0x22, 0x73, 0x03, 0x49, 0xF5, 0x01, 0x17, 0xD7, 0x93, 0xF2, 0xB1, 0xD7, 0x7A, 0x92, 0xAD, 0xF0, 0xF6, 0x33, 0x09, 0x7C, 0x9B, 0xC3, 0xF2, 0xDE, 0x48, 0x47, 0x4B, 0x36, 0x25, 0xFD, 0xDF, 0xAD, 0xAF, 0x75, 0x0B, 0xD9, 0x47, 0xC1, 0xEC, 0x8D, 0x19, 0x64, 0x84, 0xE4, 0xE2, 0x08, 0x00, 0x08, 0xFC, 0x1A, 0xB4, 0x86, 0x9C, 0xF5, 0x2C, 0xEF, 0x05, 0xA9, 0x2E, 0x77, 0xF9, 0x27, 0xD9, 0x47, 0xE6, 0xCD, 0xCD, 0x86, 0xFE, 0xA6, 0x73, 0xDB, 0xC3, 0x86, 0x0F, 0x6D, 0x7C, 0x0E, 0x5A, 0xF3, 0x32, 0x98, 0x8E, 0x0B, 0x0E, 0xB1, 0xB9, 0xAE, 0xA4, 0xC6, 0xD3, 0xAB, 0x7B, 0x48, 0xE9, 0x05, 0x8D, 0xCF, 0x1F, 0x0B, 0xEA, 0xD9, 0xE5, 0x63, 0xD8, 0xD0, 0xD1, 0x0D, 0xEF, 0xC3, 0x01, 0x59, 0xA5, 0x00, 0x30, 0xFC, 0xE1, 0xF5, 0x07, 0xA4, 0xB4, 0x46, 0xE3, 0xEA, 0xB3, 0xAC, 0x03, 0xD8, 0x40, 0xB0, 0x9B, 0xBF, 0xFF, 0xCF, 0xE6, 0xA0, 0x76, 0x3F, 0xD9, 0xDE, 0x60, 0xC7, 0xF5, 0x63, 0x03, 0x4C, 0xD8, 0xD8, 0x50, 0xF6, 0xE2, 0x1F, 0xE4, 0xA0, 0xCF, 0x1A, 0xEC, 0xD3, 0x76, 0xEC, 0xB9, 0x48, 0x76, 0x6F, 0x7F, 0xB6, 0x28, 0xA1, 0xE1, 0xEB, 0x4B, 0xB3, 0x6F, 0xAC, 0xDC, 0x75, 0x56, 0x33, 0x81, 0x5D, 0xFD, 0x92, 0x8D, 0x7D, 0xC1, 0x5E, 0x48, 0x63, 0xE9, 0xEB, 0xEB, 0x4E, 0xF6, 0xBA, 0x0B, 0x7B, 0x3E, 0x8A, 0xCD, 0xEF, 0xC2, 0xE6, 0x2A, 0xB2, 0x59, 0x0E, 0x8D, 0x5F, 0x6F, 0xFB, 0xB4, 0x60, 0x87, 0xB8, 0xB0, 0x81, 0x4E, 0x6C, 0x6C, 0x39, 0xF0, 0x22, 0x1D, 0xC8, 0x19, 0x09, 0xFC, 0xEC, 0x2B, 0xBE, 0x0A, 0x81, 0x1B, 0xF7, 0xC1, 0xC7, 0xDF, 0x9B, 0x2D, 0xCC, 0x60, 0x77, 0xA5, 0xB3, 0xE9, 0xAF, 0xD8, 0x1D, 0x3D, 0x1B, 0xDF, 0x87, 0x42, 0x22, 0x3B, 0x38, 0x9E, 0xF5, 0xEF, 0x0A, 0x3C, 0x2D, 0x01, 0x12, 0xB3, 0x81, 0xEA, 0x95, 0x40, 0xEE, 0x68, 0xE0, 0x72, 0x04, 0xF0, 0xB4, 0x06, 0xA8, 0x50, 0x00, 0x9F, 0xF7, 0x52, 0x36, 0xF3, 0x35, 0xBB, 0x79, 0x06, 0x1B, 0x97, 0xCB, 0xC6, 0x6A, 0x34, 0xBE, 0x8F, 0x1E, 0xBE, 0xC0, 0xD3, 0x34, 0x40, 0xFD, 0x03, 0x70, 0x65, 0x2D, 0x30, 0xB1, 0x02, 0xB8, 0x76, 0x0A, 0x88, 0x74, 0x06, 0x4E, 0x6D, 0x02, 0xF2, 0xE4, 0x81, 0x63, 0x41, 0xC0, 0x7D, 0x45, 0xA0, 0xF8, 0x23, 0xB8, 0x7E, 0x04, 0xBB, 0xE5, 0x22, 0x1B, 0x39, 0x88, 0x8D, 0xE8, 0xCF, 0x86, 0xF5, 0x68, 0x5C, 0x1F, 0xEF, 0x96, 0x02, 0xAD, 0x17, 0x00, 0x95, 0x96, 0x40, 0x7F, 0x55, 0xE0, 0xA4, 0x23, 0x60, 0xDE, 0x11, 0x38, 0xD8, 0x0D, 0xF0, 0x0A, 0x07, 0x4A, 0x16, 0x00, 0x69, 0xB5, 0x40, 0x01, 0x4D, 0xF8, 0xAF, 0x00, 0x59, 0x7D, 0xC0, 0x79, 0x27, 0x93, 0x8D, 0xBE, 0xC5, 0xAE, 0x79, 0x05, 0xD6, 0x88, 0x5D, 0x35, 0xBB, 0x61, 0x7D, 0x7C, 0xF1, 0x62, 0x2F, 0x16, 0xB3, 0x47, 0x9A, 0x00, 0x7D, 0x86, 0xB7, 0x48, 0xC8, 0x19, 0x01, 0xE8, 0x76, 0xEE, 0x20, 0x97, 0x5C, 0x0A, 0xB8, 0xAA, 0x75, 0x35, 0xDF, 0x5C, 0x0D, 0x6C, 0xCC, 0xE9, 0x56, 0x11, 0x59, 0x08, 0x1C, 0x3A, 0x2C, 0xD3, 0x2B, 0xA4, 0x27, 0xF0, 0xE1, 0x48, 0xF7, 0xB2, 0x35, 0x6B, 0x41, 0xF7, 0xF8, 0xB6, 0x84, 0x5A, 0x90, 0x80, 0x58, 0xA5, 0xD9, 0xF6, 0xAC, 0xCF, 0x9F, 0xDC, 0xBF, 0xFD, 0x19, 0xC5, 0x5E, 0xDA, 0xC0, 0xEE, 0x6F, 0x2F, 0xBB, 0x9E, 0xDC, 0xFE, 0xA3, 0x6F, 0x01, 0x20, 0xB9, 0xC3, 0x47, 0x6C, 0x75, 0x5B, 0x35, 0x2A, 0xD4, 0xAD, 0x0E, 0x30, 0x28, 0x1B, 0xE9, 0xEA, 0x60, 0x02, 0x78, 0x0D, 0x18, 0x2D, 0x67, 0xE7, 0x0F, 0xEC, 0x2E, 0xD5, 0x6B, 0x62, 0x1D, 0x0B, 0xDC, 0x2B, 0xD3, 0x3F, 0x30, 0xC1, 0x1D, 0x94, 0x73, 0xE6, 0x18, 0xDE, 0x24, 0xB5, 0x9D, 0x26, 0xAF, 0x22, 0xE5, 0x0F, 0x58, 0xAF, 0x24, 0xFB, 0xEE, 0xD6, 0x7D, 0x4A, 0xAA, 0xFD, 0xF6, 0xAB, 0x3E, 0x2E, 0x8E, 0xF9, 0xED, 0x16, 0x59, 0xFC, 0x51, 0xD9, 0x80, 0x8C, 0x3D, 0xAB, 0x63, 0x41, 0x06, 0xCD, 0xB0, 0xEE, 0x49, 0x4E, 0x75, 0xD0, 0xCE, 0x02, 0x34, 0x27, 0xF2, 0xA3, 0x17, 0x7C, 0x07, 0x9A, 0x2C, 0x32, 0x72, 0x77, 0xDD, 0x03, 0x74, 0x1A, 0x11, 0xBD, 0x6E, 0xD6, 0x1B, 0x40, 0xBA, 0xED, 0xA9, 0xA3, 0xD3, 0x37, 0x00, 0x32, 0x39, 0xF5, 0xF5, 0x53, 0x0F, 0xF2, 0xBE, 0x67, 0x84, 0xB0, 0x13, 0xE5, 0xC1, 0x2A, 0xB2, 0xE6, 0x5D, 0xFF, 0xB9, 0xFE, 0xD9, 0x08, 0xA9, 0xA1, 0x64, 0x41, 0x4F, 0x8D, 0x56, 0x64, 0x70, 0x84, 0x45, 0x27, 0xD2, 0xAF, 0x85, 0xED, 0x09, 0xD2, 0x75, 0xCA, 0xDC, 0x44, 0x72, 0x62, 0xFC, 0x82, 0x6A, 0x40, 0x4A, 0x1F, 0x98, 0x30, 0x57, 0x22, 0xC3, 0x6C, 0x2F, 0x60, 0xFB, 0xCD, 0x2E, 0x48, 0xBF, 0x1A, 0x98, 0xD2, 0x3E, 0xF6, 0xF0, 0xA8, 0xEE, 0xC2, 0x41, 0x67, 0x12, 0x74, 0x42, 0x00, 0xDB, 0x45, 0xE2, 0x3C, 0xEC, 0x05, 0x0C, 0xAF, 0x0B, 0xF5, 0x01, 0xB9, 0xBD, 0x62, 0x2E, 0x13, 0x25, 0x9C, 0x2E, 0x5C, 0x0B, 0xF4, 0x5E, 0xFD, 0x9F, 0xB9, 0x70, 0x14, 0xD7, 0x2F, 0xBF, 0xDC, 0xC3, 0x94, 0xCC, 0x3D, 0x3C, 0xF4, 0x07, 0x19, 0x3A, 0xD1, 0x6C, 0x08, 0xE9, 0xAB, 0x35, 0x25, 0x90, 0x74, 0x92, 0x9A, 0x9B, 0x4D, 0x5A, 0xE6, 0x2E, 0x9F, 0x4B, 0xEA, 0xF9, 0xC6, 0x74, 0x20, 0x81, 0x40, 0xD3, 0x4E, 0xA6, 0x1A, 0x31, 0x40, 0xF0, 0x4C, 0x3B, 0x57, 0xA5, 0xE1, 0xC2, 0x33, 0x09, 0x67, 0xFA, 0x7E, 0x10, 0x8E, 0x3F, 0x17, 0x20, 0xBF, 0x12, 0x58, 0xB3, 0x41, 0xCC, 0xDC, 0xCE, 0x01, 0xCB, 0xC5, 0xFA, 0xDA, 0x63, 0x3C, 0xE0, 0x2E, 0xFA, 0xE9, 0x16, 0x0F, 0xCC, 0x13, 0x73, 0xA2, 0xEE, 0xAF, 0x01, 0x3B, 0x4F, 0x91, 0xA3, 0x8B, 0xCA, 0x75, 0x7A, 0x0D, 0x00, 0x80, 0xF0, 0xB8, 0x21, 0x0F, 0xC9, 0x75, 0x81, 0x96, 0x3D, 0x48, 0xEF, 0x9B, 0x53, 0xA3, 0xC8, 0x39, 0xD7, 0x9D, 0xCC, 0x48, 0x8B, 0x9C, 0xA8, 0x50, 0x52, 0x23, 0x35, 0xE5, 0x05, 0xD9, 0xB3, 0x36, 0xF3, 0x26, 0x09, 0xA4, 0x5F, 0x97, 0x8E, 0x90, 0x2A, 0x00, 0x32, 0xE5, 0x6C, 0x0F, 0xB7, 0xB9, 0x2D, 0x7C, 0x11, 0x3B, 0xB7, 0xE9, 0x2D, 0x20, 0xFD, 0x44, 0xF9, 0x46, 0x0C, 0x02, 0xD2, 0xE6, 0xF0, 0xB9, 0xDE, 0xAA, 0xC1, 0x46, 0x2F, 0x63, 0xA3, 0x3A, 0xB3, 0x61, 0x3A, 0x64, 0xC4, 0x72, 0xF3, 0xE5, 0x00, 0xB0, 0xE6, 0xAB, 0x65, 0x19, 0xE9, 0x5D, 0x3C, 0xAD, 0x33, 0x39, 0xD7, 0xC8, 0x69, 0x2C, 0x69, 0x69, 0x12, 0x7F, 0x91, 0x94, 0x72, 0x2B, 0xDE, 0x49, 0x4A, 0xBA, 0x14, 0xAD, 0x25, 0x81, 0x7D, 0xE5, 0xEC, 0xB1, 0xFD, 0xEC, 0x09, 0x8B, 0xC9, 0x4B, 0xC8, 0xD3, 0x33, 0x37, 0xF6, 0x23, 0x4F, 0xE6, 0x9C, 0x32, 0x20, 0x8F, 0xD5, 0x71, 0xBD, 0x3D, 0x0B, 0xD9, 0xAC, 0xA5, 0xEC, 0xAE, 0x34, 0x36, 0x2D, 0x89, 0x5C, 0x1B, 0x65, 0xB5, 0x10, 0x00, 0x7C, 0x55, 0xA7, 0x1E, 0x25, 0x9D, 0x57, 0xCE, 0x95, 0x23, 0xAD, 0x2C, 0x92, 0x8F, 0x91, 0x92, 0xA3, 0x4B, 0x8A, 0xC9, 0x16, 0xF6, 0x27, 0x76, 0x91, 0x40, 0xC5, 0x5A, 0xF6, 0x85, 0x03, 0xFB, 0xBE, 0x25, 0x5B, 0xE7, 0x6D, 0x67, 0x4B, 0x7E, 0x28, 0xDD, 0x5E, 0x41, 0x7E, 0xBB, 0xF8, 0x63, 0x13, 0xF9, 0x61, 0x31, 0xD7, 0x7B, 0x26, 0xCD, 0x5E, 0x89, 0x64, 0xCF, 0x9F, 0x65, 0xCF, 0x46, 0x91, 0xCB, 0xCD, 0xA7, 0x99, 0x03, 0xC0, 0x3C, 0x25, 0xC7, 0xE6, 0xE4, 0xA4, 0x91, 0x3B, 0xBD, 0x49, 0xA9, 0x41, 0x45, 0x2E, 0x64, 0x93, 0x31, 0x67, 0x3C, 0x1B, 0xFA, 0x1B, 0x77, 0xD1, 0x53, 0x36, 0xE6, 0x52, 0xE3, 0x73, 0x90, 0x9B, 0x87, 0x9B, 0x07, 0x00, 0x4C, 0xF3, 0xDA, 0xB9, 0x8D, 0xEC, 0x3C, 0x28, 0x3F, 0xF6, 0xBF, 0x9A, 0x3F, 0x96, 0x82, 0x5D, 0x51, 0xC1, 0x86, 0xB0, 0x0D, 0xEA, 0xC3, 0x76, 0x5D, 0xCA, 0x39, 0x00, 0x50, 0xA8, 0x39, 0xDB, 0x96, 0x04, 0xFE, 0xE7, 0x72, 0xD0, 0x56, 0xD7, 0xFF, 0xD9, 0x1C, 0xD4, 0xB2, 0x1D, 0xDB, 0x1B, 0xEC, 0xA0, 0x48, 0x36, 0xC0, 0x9A, 0x0D, 0x1B, 0x04, 0xBC, 0x8F, 0x06, 0x72, 0xDE, 0xFE, 0xDD, 0xFC, 0x65, 0x01, 0x7B, 0xED, 0x18, 0x5B, 0x52, 0xC2, 0x66, 0xB7, 0x62, 0xE3, 0x3D, 0xD8, 0xB8, 0x13, 0xFF, 0x85, 0xB9, 0x83, 0x1D, 0xAB, 0xFC, 0x88, 0x0D, 0x5A, 0xC3, 0xAE, 0xB7, 0x01, 0x6A, 0x66, 0x03, 0xDB, 0xC2, 0x81, 0xEF, 0xE7, 0x81, 0x6F, 0x4F, 0x81, 0x4A, 0xBE, 0x97, 0x87, 0xB3, 0x69, 0x6C, 0x4E, 0x15, 0xBB, 0x29, 0x87, 0x8D, 0x4E, 0x64, 0x23, 0xA5, 0x1A, 0xDF, 0x47, 0xDF, 0x68, 0x56, 0x69, 0x12, 0xBB, 0xEE, 0x21, 0xF0, 0x40, 0x06, 0x48, 0x68, 0x07, 0xDC, 0x0B, 0xA0, 0x7B, 0xF0, 0xC0, 0x99, 0x6F, 0x40, 0xB5, 0x0E, 0x70, 0xB6, 0x12, 0x9C, 0xBB, 0x7A, 0xB1, 0x9B, 0x8B, 0xD8, 0xA8, 0xFD, 0x6C, 0xA8, 0x39, 0xBB, 0x2E, 0xB2, 0xF1, 0x7D, 0xF4, 0xBC, 0x0E, 0xDC, 0x90, 0x02, 0x94, 0x87, 0x01, 0xE5, 0x6D, 0x00, 0xE3, 0xA1, 0xC0, 0xF5, 0x1A, 0x20, 0xEA, 0x0A, 0x50, 0x91, 0x02, 0x24, 0x66, 0x01, 0x87, 0xE3, 0x81, 0x1A, 0x37, 0x20, 0xF7, 0x2F, 0xF7, 0xEE, 0x3E, 0xB1, 0xD1, 0x5E, 0x6C, 0x50, 0x11, 0xBB, 0x74, 0x29, 0xBB, 0xCC, 0xA0, 0x71, 0x7D, 0xBC, 0xCF, 0x01, 0x24, 0xF2, 0x81, 0xB3, 0x57, 0x01, 0xF9, 0x74, 0xBA, 0x0F, 0x00, 0x8C, 0x09, 0x05, 0x72, 0xED, 0x01, 0xB7, 0x18, 0x20, 0x67, 0x35, 0x10, 0xFD, 0x0D, 0x28, 0xB8, 0x04, 0xDC, 0xC8, 0x07, 0xD2, 0x38, 0x8F, 0x21, 0x66, 0x1A, 0x1B, 0x3C, 0x94, 0x5D, 0xD6, 0x8C, 0xF5, 0x90, 0x67, 0xDD, 0xAF, 0x34, 0xAC, 0x8F, 0xEF, 0x67, 0xD8, 0x8A, 0xA5, 0x6C, 0x59, 0x57, 0xA0, 0xB7, 0x2D, 0x90, 0x25, 0x0F, 0x8C, 0x09, 0x03, 0x76, 0x5C, 0x06, 0x1C, 0x4B, 0x81, 0xC4, 0x1A, 0x20, 0x4C, 0x11, 0xD8, 0x30, 0x05, 0x38, 0x54, 0x08, 0x44, 0x2B, 0x00, 0x6F, 0xB7, 0x03, 0xC1, 0xAA, 0xE0, 0x9C, 0xA1, 0xC8, 0xBA, 0xC7, 0xB3, 0x4E, 0x57, 0xD9, 0xB9, 0x0D, 0x9C, 0x17, 0x9E, 0x7F, 0xC7, 0x16, 0x5D, 0x64, 0x77, 0xBF, 0x07, 0xA4, 0x3E, 0x01, 0x49, 0x8B, 0x00, 0xED, 0x99, 0x40, 0xDC, 0x32, 0xC0, 0x61, 0x01, 0x10, 0xF6, 0x11, 0x08, 0x0E, 0x04, 0xD6, 0xDD, 0x05, 0xF2, 0x57, 0x01, 0x2B, 0x3D, 0x80, 0xAA, 0xA3, 0x42, 0xCE, 0x5B, 0x58, 0x52, 0xC3, 0xCE, 0x0D, 0x64, 0xA7, 0x1B, 0x80, 0x7D, 0xFE, 0xEF, 0xFB, 0xB8, 0xA0, 0xCA, 0x16, 0xCD, 0x60, 0xD3, 0x15, 0xD8, 0x88, 0x75, 0xDD, 0x7E, 0x00, 0xCD, 0x5E, 0x7A, 0x24, 0x03, 0x9D, 0xAB, 0x55, 0x9E, 0xDB, 0xBF, 0x06, 0x46, 0xBD, 0x52, 0x8D, 0xB4, 0x7D, 0x04, 0xB8, 0xA6, 0xA9, 0x2D, 0xB5, 0xEA, 0x0C, 0xC4, 0x9F, 0x1B, 0x94, 0x39, 0x3E, 0x1E, 0x38, 0x25, 0xA7, 0xFE, 0xD8, 0x44, 0x28, 0xE6, 0x53, 0x69, 0x7A, 0xF6, 0xA4, 0x6A, 0x6F, 0xDD, 0x75, 0x64, 0x6F, 0xDB, 0x31, 0xA9, 0xA4, 0x8C, 0x8B, 0x2E, 0xC8, 0x6E, 0xA6, 0xFF, 0x72, 0xFC, 0xF7, 0xD8, 0x22, 0x65, 0x36, 0xEC, 0x61, 0x9F, 0x95, 0x64, 0xA0, 0x7F, 0xFF, 0x8F, 0xE4, 0xE2, 0xB0, 0x91, 0x57, 0x49, 0xAB, 0xE3, 0x1A, 0x97, 0x01, 0xF9, 0x69, 0xFC, 0xA8, 0xE9, 0x2A, 0x40, 0xF3, 0xC5, 0xA3, 0x92, 0x27, 0x6B, 0x02, 0x1D, 0x8F, 0x06, 0x38, 0x9B, 0x6F, 0x00, 0xA4, 0x9A, 0x15, 0xD9, 0x99, 0x76, 0x07, 0xBA, 0xC6, 0xBD, 0x71, 0x1A, 0x37, 0x13, 0x68, 0x3B, 0x4F, 0xCC, 0xA5, 0xCE, 0x70, 0xAD, 0x71, 0xA3, 0xDB, 0xE5, 0x91, 0xDA, 0x79, 0x1D, 0x5E, 0x93, 0xC3, 0x12, 0xFF, 0x5A, 0xFF, 0x2C, 0x5B, 0x14, 0xC8, 0xAE, 0x92, 0xEA, 0x77, 0x81, 0x0C, 0x74, 0x50, 0x7F, 0x42, 0x3A, 0xC5, 0x1B, 0x18, 0x92, 0x53, 0x92, 0x2C, 0x7C, 0xC9, 0x09, 0x5B, 0x67, 0x3F, 0x22, 0x81, 0xB1, 0xBD, 0x5A, 0x0F, 0x1E, 0xD5, 0x0F, 0x30, 0x37, 0xB4, 0x88, 0xD6, 0x90, 0x14, 0xAE, 0x5F, 0xBD, 0x7C, 0x80, 0x0A, 0x60, 0x71, 0xB7, 0xA4, 0x58, 0xB5, 0x1B, 0x60, 0x79, 0xEB, 0x83, 0xBE, 0xF2, 0x2B, 0x40, 0xBF, 0xA0, 0xBE, 0x5E, 0xF9, 0x0C, 0xD0, 0xEF, 0x8E, 0x98, 0xCB, 0xF8, 0x02, 0xB2, 0xC7, 0xC4, 0x7D, 0xCC, 0x07, 0x3C, 0x0F, 0x1A, 0x78, 0xF6, 0x12, 0xF8, 0x7F, 0x85, 0x9A, 0x6C, 0xE0, 0x6C, 0xC5, 0xB1, 0xE4, 0xAA, 0xAA, 0xA1, 0xAA, 0xE4, 0x5C, 0xCD, 0x71, 0xCE, 0xA4, 0xED, 0xA7, 0x49, 0xA6, 0xE4, 0x58, 0x8B, 0x39, 0x69, 0xA4, 0x1A, 0x7C, 0xF8, 0x08, 0xB0, 0xE8, 0x4D, 0xBB, 0xB5, 0xBD, 0xEF, 0x01, 0x3E, 0x75, 0xE3, 0xB3, 0xA5, 0x52, 0x00, 0x6F, 0xBF, 0xB5, 0x2F, 0x3B, 0x8E, 0x12, 0xDB, 0x61, 0xFB, 0x82, 0x24, 0x1E, 0x0A, 0x9B, 0xD7, 0xF5, 0x69, 0x9D, 0x02, 0x2C, 0x99, 0x2C, 0xE6, 0x2F, 0x1D, 0x01, 0x97, 0x8B, 0xE2, 0x9E, 0xEC, 0x21, 0xDA, 0xA3, 0xF8, 0x0C, 0xCB, 0x46, 0x60, 0x52, 0x57, 0xFA, 0x1C, 0x44, 0xDE, 0xE9, 0x56, 0x91, 0x00, 0xE0, 0x73, 0x5C, 0x45, 0x91, 0xF4, 0xDA, 0xA0, 0xBF, 0x82, 0x74, 0x1C, 0x6A, 0xBC, 0x9B, 0x9C, 0x32, 0x6E, 0xF2, 0x13, 0x72, 0x74, 0x8F, 0xF9, 0x4D, 0x49, 0x49, 0x8F, 0x30, 0x5F, 0xB2, 0xE9, 0xFC, 0xD8, 0x44, 0x12, 0xD8, 0x7C, 0xA7, 0x53, 0x17, 0x32, 0x3E, 0xD3, 0xA4, 0x84, 0x8C, 0x3B, 0x1C, 0x18, 0x4F, 0x6E, 0xFC, 0x5A, 0xB8, 0x10, 0xE4, 0xA1, 0x9F, 0xD7, 0xC9, 0x30, 0x5F, 0x3E, 0xF7, 0x2B, 0xFD, 0x58, 0xEF, 0xE1, 0xAC, 0xA7, 0x1E, 0x19, 0x08, 0x95, 0x68, 0xD0, 0xD6, 0x06, 0xFD, 0x56, 0xA4, 0xA3, 0x83, 0xC9, 0x36, 0x72, 0x46, 0x07, 0x9B, 0x62, 0x52, 0x7D, 0xF0, 0x1A, 0xAE, 0x87, 0xC4, 0xC5, 0x6C, 0xCA, 0x0E, 0x76, 0xD7, 0x73, 0x36, 0xB7, 0x39, 0x9B, 0x53, 0x6B, 0x36, 0x81, 0xCC, 0x9F, 0xEF, 0xF1, 0x85, 0x2C, 0xDC, 0x51, 0x18, 0x0B, 0x92, 0x73, 0x17, 0x32, 0x4D, 0xD8, 0x38, 0x2B, 0x36, 0xBA, 0x1D, 0x1B, 0x19, 0x4D, 0x7A, 0x6E, 0xD6, 0x57, 0x01, 0x80, 0x39, 0x65, 0xA6, 0x9D, 0x49, 0x87, 0x35, 0x36, 0xD7, 0xC9, 0xDF, 0x24, 0xE3, 0x5C, 0x49, 0x20, 0xF5, 0x20, 0xBB, 0xFB, 0x01, 0x5B, 0x58, 0xC2, 0x9E, 0x6E, 0xC7, 0x56, 0x78, 0xB0, 0x97, 0x8F, 0x4E, 0xF0, 0x25, 0xAF, 0x5D, 0x0A, 0xFF, 0x48, 0xDE, 0x4A, 0x3C, 0x30, 0x0A, 0x24, 0xB8, 0xDE, 0xA5, 0x2C, 0xF6, 0xF4, 0x07, 0xB6, 0x68, 0x36, 0x5B, 0x58, 0x4B, 0x3A, 0x7F, 0x33, 0xDD, 0x07, 0x00, 0x8E, 0x7E, 0xB6, 0x5C, 0x0F, 0x89, 0xF7, 0x41, 0x7D, 0xD8, 0xA4, 0x0E, 0x25, 0x81, 0x6C, 0x47, 0xF6, 0x6C, 0xED, 0x9F, 0xFD, 0xE6, 0x75, 0xDF, 0xC8, 0xC6, 0xF9, 0x37, 0x26, 0x07, 0xBD, 0xD7, 0x23, 0x67, 0xBE, 0x9F, 0x5E, 0xCA, 0xFB, 0xC9, 0x0F, 0x60, 0x53, 0x13, 0xD8, 0x53, 0x67, 0x1A, 0x9B, 0x3F, 0x3C, 0xF5, 0xD9, 0xC5, 0xA9, 0x6C, 0x48, 0x50, 0xC3, 0xFB, 0x69, 0xB1, 0x2B, 0x2D, 0x03, 0x00, 0x9A, 0xF4, 0xD8, 0xF5, 0x18, 0xBC, 0xBF, 0xB9, 0xFF, 0xDD, 0x3C, 0x14, 0x08, 0x76, 0x5B, 0x83, 0x73, 0x61, 0xE3, 0xAA, 0xF4, 0x66, 0xA1, 0x70, 0x85, 0x0D, 0x50, 0x65, 0x57, 0xD9, 0x03, 0xF7, 0x84, 0x54, 0xF7, 0xDD, 0x14, 0xFE, 0xBA, 0x9A, 0x0D, 0xFC, 0x98, 0x0A, 0x14, 0x8C, 0x00, 0xE7, 0x8E, 0x47, 0x6C, 0xB8, 0x3B, 0xBB, 0x38, 0x99, 0x5D, 0x68, 0xF7, 0x5F, 0xC8, 0x1F, 0x67, 0x84, 0x25, 0x40, 0x0F, 0x49, 0xE0, 0x44, 0x36, 0x30, 0xD2, 0x0A, 0x3C, 0x8F, 0xE9, 0x0F, 0x54, 0x87, 0x00, 0x09, 0x9A, 0xC0, 0x89, 0x15, 0xC0, 0xC3, 0x7E, 0x40, 0x1E, 0xEF, 0x1F, 0x99, 0xA5, 0x6C, 0x54, 0x20, 0xBB, 0xF4, 0x28, 0xEB, 0x1A, 0x0C, 0xF6, 0xBF, 0x90, 0xC7, 0xE4, 0xC6, 0x01, 0x67, 0xDD, 0x85, 0x9E, 0xC0, 0x1E, 0x29, 0x60, 0x74, 0x31, 0x90, 0xDE, 0x0E, 0x98, 0x64, 0x02, 0xE4, 0x2D, 0x05, 0x22, 0x52, 0x80, 0x13, 0xAB, 0x81, 0x07, 0x5D, 0x81, 0xDD, 0xB6, 0xE0, 0xFA, 0xDB, 0xD9, 0xE0, 0x99, 0xAC, 0xC7, 0x19, 0xD6, 0xB1, 0x92, 0x9D, 0x9D, 0xD0, 0xB8, 0x3E, 0xDE, 0xDE, 0x07, 0xDA, 0x9D, 0x05, 0x0E, 0xD7, 0x01, 0x72, 0xF6, 0x40, 0xAE, 0x24, 0x30, 0xFA, 0x11, 0xB0, 0xDD, 0x1A, 0x98, 0xFC, 0x06, 0x48, 0xBB, 0x07, 0xAC, 0xFD, 0x09, 0x14, 0xEF, 0x06, 0xEE, 0xDC, 0x00, 0x62, 0x72, 0xC1, 0xF5, 0x75, 0xD8, 0x45, 0x71, 0xAC, 0x73, 0x39, 0x6B, 0xFB, 0x9E, 0xB5, 0x2B, 0x6F, 0x58, 0x1F, 0x3F, 0x86, 0xB0, 0x85, 0xA6, 0xEC, 0xDE, 0xD3, 0x40, 0xF7, 0x62, 0x20, 0xC5, 0x09, 0xD0, 0x92, 0x03, 0xE2, 0x94, 0x01, 0x6B, 0x33, 0x20, 0xBA, 0x1B, 0xB0, 0x6C, 0x17, 0x10, 0xDC, 0x06, 0x38, 0xF0, 0x06, 0x58, 0x67, 0x03, 0x7C, 0xEA, 0x0C, 0xF0, 0xE7, 0x8F, 0x00, 0xB7, 0x50, 0x76, 0xFA, 0x2B, 0x76, 0xE2, 0x04, 0xB0, 0x9B, 0x1B, 0xD6, 0x47, 0x85, 0x24, 0x9B, 0xB5, 0x95, 0x8D, 0x9F, 0x05, 0x48, 0x7C, 0x00, 0xA2, 0x67, 0x00, 0xEA, 0xE5, 0x40, 0xD0, 0x6E, 0x60, 0xBC, 0x23, 0xE0, 0x17, 0x0A, 0x2C, 0xFC, 0x00, 0xF8, 0x8C, 0x07, 0x72, 0x4B, 0x80, 0x45, 0x1D, 0x80, 0xCA, 0x32, 0xC0, 0xDD, 0x8C, 0xF7, 0x35, 0xEB, 0x03, 0x6B, 0x73, 0x8B, 0x9D, 0x20, 0x05, 0xB6, 0x17, 0xFB, 0xCB, 0xFA, 0xBB, 0xD9, 0xEC, 0x87, 0x6C, 0xBC, 0x05, 0x1B, 0x1A, 0x0E, 0x34, 0xEB, 0x00, 0x2C, 0xBF, 0x04, 0x28, 0x76, 0x02, 0x3C, 0x6D, 0x00, 0xA3, 0x64, 0x60, 0x51, 0x29, 0xB0, 0x60, 0x0F, 0x30, 0xAF, 0x39, 0x90, 0xE8, 0x05, 0xB8, 0x9A, 0x00, 0xA7, 0x63, 0x80, 0xB9, 0x03, 0x81, 0x9F, 0x83, 0x80, 0xA9, 0x3C, 0x0F, 0x82, 0xE5, 0x70, 0xD6, 0xE0, 0x2D, 0x6B, 0xE8, 0xFE, 0xC7, 0x7D, 0x9C, 0x63, 0x91, 0xE3, 0xCE, 0xC6, 0x75, 0x65, 0x83, 0x59, 0xF8, 0x8D, 0x6F, 0x26, 0x43, 0xCE, 0xED, 0x01, 0x74, 0xF1, 0x94, 0x34, 0xB6, 0xFB, 0x08, 0x68, 0x77, 0xE9, 0xD6, 0xCB, 0x72, 0x01, 0x30, 0xE3, 0x9A, 0xEC, 0x08, 0xE3, 0xBB, 0x40, 0x48, 0xCF, 0x5E, 0x03, 0x0D, 0xE2, 0x80, 0xA2, 0x7D, 0x72, 0x55, 0xFA, 0x27, 0x81, 0x87, 0x81, 0x3D, 0xEF, 0x8F, 0x8D, 0xA6, 0x1A, 0x5D, 0x4C, 0x0D, 0xFA, 0x91, 0xAD, 0x3A, 0x1A, 0xD4, 0x90, 0x80, 0x2E, 0xC8, 0xBF, 0xCB, 0x3F, 0xB1, 0x6C, 0x8E, 0x15, 0x1B, 0xF3, 0x9E, 0xF5, 0x7B, 0xDB, 0xAA, 0x2D, 0xE9, 0x1D, 0xAC, 0x70, 0x8A, 0xB4, 0x8F, 0x54, 0xF6, 0x22, 0x4D, 0x13, 0x06, 0x2A, 0x03, 0x6D, 0x0B, 0xF9, 0x51, 0xC6, 0x1F, 0x80, 0x66, 0x3F, 0xB5, 0x7C, 0xC6, 0x5A, 0x03, 0xED, 0x77, 0x2C, 0xD8, 0x37, 0x5A, 0x02, 0xE8, 0x94, 0xBE, 0xE3, 0x8B, 0xD6, 0x3D, 0xA0, 0x73, 0x93, 0x2B, 0x3E, 0xC3, 0xC6, 0x00, 0x92, 0xAD, 0x44, 0xDE, 0x91, 0xE3, 0x63, 0xD6, 0x56, 0x6D, 0x52, 0x4B, 0x0E, 0x18, 0xD7, 0x6A, 0x00, 0xA9, 0x3C, 0xE0, 0xE2, 0x5E, 0x70, 0x7D, 0x29, 0x36, 0xE2, 0x12, 0xBB, 0xE2, 0x4D, 0x8F, 0x14, 0x72, 0xD9, 0x62, 0xB9, 0x56, 0xE4, 0x74, 0x1B, 0x8D, 0x3D, 0xA4, 0xE9, 0xE8, 0x91, 0xF3, 0x48, 0x6D, 0xA5, 0xF1, 0xFC, 0x48, 0xE8, 0x5C, 0x6D, 0xF1, 0x44, 0xED, 0x0A, 0x60, 0xB0, 0x71, 0xDC, 0x2C, 0xF9, 0x23, 0xC0, 0xD8, 0x9C, 0x65, 0xC9, 0xB2, 0xEA, 0x80, 0x61, 0x6C, 0x46, 0xAE, 0x4C, 0x3F, 0x60, 0xDC, 0xA5, 0x9B, 0xED, 0xA4, 0xDF, 0x00, 0xBA, 0xFB, 0xC4, 0xF9, 0x18, 0x08, 0x0C, 0x48, 0xAE, 0xAF, 0xEF, 0x79, 0x02, 0x90, 0x0D, 0x15, 0xF9, 0x30, 0x0B, 0x90, 0x13, 0xEB, 0xBF, 0xDC, 0xF0, 0xEC, 0x03, 0xE0, 0xE7, 0xDD, 0x82, 0x0D, 0xA8, 0x52, 0xF0, 0x26, 0x17, 0xAB, 0xCA, 0x9F, 0x26, 0xA7, 0x3C, 0x1E, 0xF1, 0x8C, 0x34, 0x9E, 0x38, 0x46, 0x85, 0xD4, 0x30, 0xB7, 0x9E, 0x4F, 0x76, 0x91, 0x99, 0xFB, 0x80, 0x04, 0xE6, 0xEE, 0x94, 0xF0, 0x68, 0xB3, 0x0B, 0x70, 0xB7, 0xD7, 0x7D, 0x04, 0x00, 0xAE, 0x5D, 0x96, 0x9A, 0x92, 0x2E, 0x41, 0x19, 0xDF, 0x48, 0x27, 0xF3, 0xEB, 0x63, 0x48, 0x67, 0x5E, 0xEF, 0x61, 0xD3, 0x81, 0x1D, 0x7B, 0x81, 0xD5, 0x5F, 0x47, 0x06, 0xA2, 0xDB, 0x68, 0x40, 0x78, 0xB8, 0x8F, 0x3C, 0x39, 0xCB, 0x7A, 0xB0, 0x3D, 0x39, 0x63, 0xF6, 0x68, 0x02, 0xA6, 0x33, 0xF5, 0xB3, 0xC8, 0x41, 0x31, 0x53, 0xCA, 0x48, 0xC0, 0xFF, 0x2D, 0x1B, 0xB0, 0x80, 0x5D, 0xF5, 0x80, 0x5D, 0xB3, 0x4A, 0x73, 0x20, 0xB9, 0x1C, 0x4B, 0x2A, 0xC9, 0xD5, 0xBD, 0x93, 0x47, 0x90, 0xDE, 0x5F, 0x2E, 0xED, 0x20, 0x7D, 0x8A, 0xB9, 0xAE, 0x7B, 0x15, 0x6B, 0x1B, 0xCB, 0xDA, 0x8D, 0xE5, 0x3E, 0xF8, 0xFE, 0x9C, 0xFD, 0x79, 0xCD, 0x1A, 0x90, 0x1B, 0x75, 0x5F, 0x92, 0xE6, 0x87, 0xC6, 0x8E, 0x00, 0xD7, 0x49, 0x61, 0xD7, 0xC6, 0xB2, 0xE1, 0xCD, 0xD9, 0x18, 0x67, 0x36, 0xD6, 0x91, 0xDD, 0xD2, 0x47, 0xA7, 0x1F, 0x99, 0xB2, 0x71, 0xEA, 0x0B, 0x72, 0x43, 0x4D, 0x46, 0x53, 0x32, 0x41, 0x95, 0xEB, 0x45, 0x15, 0xB3, 0x41, 0x35, 0xAC, 0x97, 0x23, 0xEB, 0x69, 0x4E, 0x3A, 0xAA, 0x0C, 0xEB, 0x08, 0x00, 0xB3, 0x0E, 0xEA, 0x8E, 0x24, 0xAD, 0x62, 0x0C, 0xE6, 0x83, 0x8F, 0xCF, 0x81, 0x8D, 0x70, 0x61, 0xE3, 0x8B, 0xD9, 0xB4, 0xB6, 0x6C, 0x96, 0x33, 0x9B, 0x27, 0xC1, 0xE6, 0xEA, 0x0C, 0xBB, 0x4A, 0x9E, 0xDE, 0x31, 0xFF, 0x0B, 0x79, 0x69, 0x72, 0xE9, 0x23, 0x90, 0xAF, 0xB8, 0x5E, 0xD1, 0x1B, 0x36, 0x27, 0x82, 0x8D, 0x6A, 0xC3, 0x6E, 0xB8, 0x4F, 0x3A, 0x40, 0x17, 0x00, 0x60, 0x7D, 0x70, 0x9C, 0x27, 0x09, 0xAC, 0xDF, 0xC7, 0xC6, 0x69, 0xB2, 0x29, 0x23, 0xD8, 0xB4, 0x27, 0x0D, 0xCD, 0x25, 0x56, 0x6E, 0x6C, 0x52, 0xFE, 0x1F, 0xAD, 0xF3, 0x9F, 0x87, 0xB3, 0xD7, 0xC0, 0x5E, 0xA9, 0x25, 0x2D, 0x74, 0xCC, 0xF8, 0x3C, 0x23, 0xFC, 0x27, 0x9B, 0x38, 0x9C, 0x4D, 0xB5, 0xFE, 0xAF, 0xE6, 0x8F, 0x89, 0x8E, 0x6C, 0x08, 0xDB, 0xC0, 0x5C, 0x16, 0xF2, 0x0C, 0x00, 0x80, 0x6D, 0x43, 0xD8, 0xBC, 0x2D, 0xFF, 0x53, 0x73, 0xA1, 0xFF, 0xCD, 0x1C, 0x74, 0x69, 0x35, 0x7B, 0x74, 0x33, 0xA0, 0x55, 0x09, 0x64, 0x15, 0x01, 0x96, 0x6F, 0x80, 0x2A, 0x21, 0xD5, 0x2D, 0x13, 0x5F, 0x37, 0xE3, 0x81, 0x6C, 0x4B, 0xF0, 0xFD, 0x0D, 0x17, 0x76, 0x49, 0x27, 0xD6, 0x65, 0x09, 0x3B, 0xA5, 0x82, 0x9D, 0xA4, 0xFD, 0x5F, 0xC8, 0x1F, 0xBE, 0xC0, 0x11, 0x3B, 0xA0, 0x57, 0x0B, 0x20, 0x73, 0x0D, 0x30, 0xBC, 0x10, 0x88, 0x6F, 0x0F, 0x18, 0x6A, 0x01, 0xDB, 0x37, 0x02, 0xAE, 0xFE, 0x40, 0xB9, 0x33, 0xF0, 0x48, 0x0F, 0x88, 0x58, 0x01, 0xAE, 0x3F, 0x92, 0x9D, 0x67, 0xCA, 0x4E, 0x5F, 0xCC, 0x5A, 0xBB, 0xB1, 0xE6, 0xBB, 0x1B, 0xD7, 0x47, 0x85, 0x36, 0xD0, 0x3C, 0x14, 0x38, 0xF8, 0x06, 0x90, 0xDD, 0x03, 0xA4, 0xAA, 0x00, 0x43, 0x6F, 0x00, 0x9B, 0x0E, 0x00, 0x26, 0x4E, 0xC0, 0x86, 0x17, 0x80, 0xCB, 0x75, 0x20, 0x38, 0x11, 0x38, 0xD6, 0x0B, 0x08, 0x69, 0x0F, 0x9E, 0x33, 0x14, 0xB2, 0x73, 0x34, 0x59, 0xDB, 0xE6, 0xAC, 0x59, 0x25, 0x6B, 0xDC, 0xC0, 0x3E, 0xBE, 0x0F, 0x65, 0x33, 0xC6, 0xB1, 0x79, 0x65, 0x80, 0xD4, 0x52, 0x20, 0xCE, 0x10, 0x18, 0x74, 0x9B, 0xD6, 0x34, 0x60, 0x6C, 0x1E, 0xB0, 0x44, 0x07, 0xB0, 0x74, 0x02, 0x16, 0x2F, 0x02, 0x2E, 0x48, 0x00, 0x0B, 0x9C, 0x80, 0x97, 0xB7, 0x01, 0x27, 0xEE, 0x07, 0x53, 0xEE, 0xB0, 0x56, 0xD3, 0x58, 0xA3, 0x53, 0xAC, 0x7E, 0x03, 0xE7, 0x41, 0xD9, 0xDA, 0xEC, 0x66, 0x43, 0x36, 0x44, 0x11, 0x68, 0x1D, 0x04, 0xAC, 0xFB, 0x01, 0x28, 0x7D, 0x01, 0x16, 0x7B, 0x02, 0xBA, 0x7D, 0x01, 0x0F, 0x7F, 0x60, 0xC2, 0x49, 0xC0, 0xF5, 0x0B, 0x70, 0xC2, 0x16, 0x70, 0x9C, 0x01, 0x9C, 0x93, 0x04, 0xA6, 0x73, 0x0E, 0x84, 0x75, 0x32, 0x6B, 0x7A, 0x9D, 0x1D, 0xF5, 0x84, 0xD5, 0x49, 0xFC, 0xF7, 0x7D, 0x64, 0xFD, 0x60, 0xD3, 0x66, 0xB1, 0x61, 0x61, 0x6C, 0xC0, 0x1D, 0x76, 0x41, 0x2E, 0xD0, 0xC7, 0x18, 0x70, 0x6B, 0x07, 0x8C, 0xD1, 0x04, 0xE6, 0xA8, 0x00, 0x96, 0xE1, 0x80, 0x8D, 0x2C, 0x10, 0xA2, 0x0F, 0x4C, 0x1D, 0x05, 0x1C, 0xBE, 0x20, 0xB6, 0x9B, 0x80, 0xF3, 0xCE, 0x25, 0x76, 0x6C, 0x14, 0xAB, 0x2D, 0xC9, 0x0E, 0xF5, 0xFC, 0xE3, 0x3E, 0x32, 0xF7, 0xB3, 0x69, 0xCF, 0xD8, 0x50, 0x3F, 0x76, 0x45, 0x6B, 0xD6, 0xAB, 0x3B, 0x3B, 0xE7, 0x33, 0xD0, 0xBD, 0x08, 0x98, 0x69, 0x08, 0xE8, 0x9C, 0x04, 0xEC, 0x2E, 0x00, 0xD6, 0x83, 0x00, 0xCB, 0xF7, 0xC0, 0x3A, 0x69, 0xA1, 0x0E, 0x90, 0xDF, 0x0E, 0x18, 0xFF, 0x1F, 0xCC, 0xDD, 0x05, 0x58, 0x57, 0xD9, 0xBE, 0xC6, 0xF1, 0xAF, 0xD8, 0x4A, 0xA7, 0x82, 0x41, 0x97, 0x45, 0xB7, 0x23, 0x16, 0x60, 0xD0, 0x18, 0x83, 0x38, 0x7A, 0xEC, 0x56, 0xCE, 0x98, 0x80, 0x48, 0xD9, 0x89, 0xDD, 0xDD, 0xED, 0xB4, 0x63, 0x77, 0xE7, 0x74, 0x77, 0x77, 0xDA, 0x72, 0x59, 0xCF, 0x7B, 0x63, 0x98, 0x9E, 0xA7, 0xEE, 0xD9, 0xC6, 0xC7, 0x80, 0xF5, 0xBE, 0x3C, 0x7B, 0xED, 0xFF, 0xFE, 0xD1, 0x2E, 0xF0, 0x61, 0x29, 0x74, 0xD4, 0x79, 0x20, 0x2E, 0x4A, 0x86, 0xBE, 0x27, 0x83, 0xFC, 0xAA, 0xF6, 0xB8, 0xB4, 0x42, 0x6E, 0x7B, 0x4F, 0xCE, 0x8C, 0xAC, 0x9A, 0x3F, 0xF9, 0x49, 0x39, 0xF8, 0x6B, 0x99, 0xD3, 0x14, 0xEC, 0xDF, 0x83, 0x8C, 0xCF, 0x20, 0x2C, 0xA0, 0xDA, 0xA0, 0x2E, 0xA9, 0x90, 0xD9, 0xAF, 0x46, 0x68, 0xFB, 0x32, 0xC8, 0xF7, 0xAE, 0x17, 0xD8, 0x26, 0x1F, 0xB6, 0xBC, 0x56, 0x2F, 0x21, 0x6E, 0x35, 0x5C, 0x2E, 0xAF, 0xF5, 0x7D, 0xEB, 0x6A, 0x26, 0xAB, 0x66, 0x56, 0xDC, 0x7E, 0x23, 0x04, 0xB7, 0x94, 0x81, 0xCF, 0xC8, 0xAB, 0x6B, 0xD0, 0x3E, 0xEC, 0x29, 0xA7, 0x0D, 0x93, 0x85, 0xB9, 0xB2, 0xF8, 0x81, 0x7C, 0x74, 0xA1, 0x65, 0x6F, 0x63, 0xC6, 0x7D, 0x67, 0x5B, 0x63, 0xFC, 0x41, 0xEF, 0x4E, 0x46, 0x1D, 0xD1, 0xCB, 0xA0, 0xD6, 0xA7, 0x41, 0x03, 0x42, 0xDF, 0x04, 0x4B, 0xFF, 0x3E, 0xE3, 0x5B, 0x1E, 0x06, 0x5B, 0xDB, 0x25, 0xB7, 0x02, 0x3F, 0x04, 0x9B, 0x1F, 0x8F, 0x25, 0xF8, 0x39, 0x81, 0xF5, 0x07, 0x3F, 0xD9, 0xFB, 0x98, 0x35, 0x3C, 0x2A, 0x2A, 0xFC, 0xEE, 0xE9, 0x1C, 0x78, 0xC5, 0x4A, 0xD7, 0xC7, 0x96, 0xE9, 0x7A, 0xA0, 0xF4, 0x49, 0x59, 0xF8, 0xB6, 0x2C, 0x9B, 0x2A, 0x7B, 0x64, 0x35, 0x2A, 0x30, 0xA6, 0x04, 0xBA, 0x0F, 0x34, 0xC6, 0x38, 0x37, 0x0B, 0x34, 0xFA, 0x6F, 0x8D, 0x0A, 0x33, 0x42, 0x64, 0xEF, 0x5A, 0xA5, 0x8D, 0xBE, 0x82, 0xB8, 0xC9, 0x71, 0xED, 0x6C, 0x86, 0x42, 0xEB, 0xA3, 0xC3, 0xA2, 0xEA, 0x8E, 0xAF, 0xF4, 0xCB, 0xA5, 0xC3, 0xAA, 0xDB, 0x42, 0x9B, 0xF2, 0x53, 0x1F, 0x5B, 0xA4, 0xC1, 0x23, 0x4D, 0x6E, 0xDF, 0x04, 0x08, 0x8D, 0xA9, 0xA8, 0xB0, 0xA8, 0x0E, 0x4D, 0xB7, 0x56, 0x54, 0xD4, 0xCB, 0x04, 0x17, 0x97, 0x8A, 0x0A, 0xEB, 0xE1, 0x65, 0x0F, 0xD0, 0xFE, 0x8B, 0x90, 0x53, 0x17, 0x59, 0xE5, 0x19, 0x7B, 0x8D, 0x6D, 0x7C, 0xD8, 0xD8, 0x25, 0x3F, 0x70, 0x95, 0x31, 0x6A, 0x77, 0xF0, 0x45, 0xA3, 0xCB, 0xFB, 0x1D, 0xBA, 0x18, 0xA1, 0xFB, 0x30, 0xA4, 0xA5, 0xC5, 0xE7, 0xC6, 0x8C, 0x81, 0xE1, 0xE3, 0x8C, 0x29, 0xDB, 0x07, 0x6F, 0x32, 0x26, 0xF7, 0x5D, 0x3A, 0xC8, 0xD8, 0x79, 0xF3, 0xB1, 0x97, 0x8C, 0x29, 0xF5, 0x6F, 0xD7, 0x37, 0xC6, 0x06, 0x69, 0x2F, 0x04, 0xC7, 0xC8, 0x16, 0xDE, 0xC6, 0x22, 0x2C, 0xCC, 0xBA, 0x4C, 0xBA, 0xEE, 0xBD, 0xD1, 0xF8, 0xD8, 0xF6, 0x26, 0x63, 0x8D, 0x29, 0x25, 0x2D, 0x36, 0x18, 0x63, 0x1D, 0xC2, 0x5C, 0x8C, 0xD0, 0xCB, 0x59, 0x0E, 0x68, 0x27, 0x07, 0xB5, 0x46, 0x9E, 0x95, 0x7D, 0xD6, 0x78, 0xAD, 0x32, 0x3E, 0x1A, 0x9E, 0x71, 0xDC, 0x38, 0xE4, 0xCC, 0xE2, 0xBE, 0xC6, 0xCC, 0xFB, 0x47, 0x1D, 0x8D, 0x43, 0x17, 0x29, 0x37, 0xF3, 0xA8, 0x8C, 0x5A, 0x52, 0x21, 0xFD, 0x8D, 0x13, 0xDF, 0x74, 0xD7, 0x2A, 0xAF, 0x7A, 0x7D, 0x64, 0x4C, 0xF3, 0x09, 0x4E, 0x35, 0x46, 0xDF, 0x8C, 0x5A, 0x6C, 0x84, 0x61, 0x5F, 0xCB, 0x5C, 0x5B, 0x39, 0x61, 0x84, 0xCC, 0x6B, 0x2D, 0xF3, 0x43, 0xE5, 0xC4, 0x10, 0xAE, 0x18, 0x17, 0x56, 0xEF, 0x39, 0xC8, 0x58, 0x72, 0x7C, 0xDB, 0x12, 0x63, 0xDE, 0xD6, 0xED, 0x03, 0x8C, 0x93, 0x47, 0x2B, 0x37, 0x77, 0x86, 0xEC, 0xB1, 0x55, 0x66, 0xB6, 0x37, 0xF6, 0xC5, 0x6F, 0x33, 0x40, 0x46, 0x42, 0xE8, 0x3D, 0x63, 0x4C, 0x52, 0xCC, 0x70, 0x23, 0x8C, 0xAB, 0x29, 0x0B, 0xBE, 0x96, 0x25, 0x43, 0xE5, 0xCC, 0x0A, 0x39, 0xDF, 0x4D, 0x2E, 0x4C, 0x96, 0x0B, 0x9A, 0x59, 0x9D, 0x34, 0x6E, 0x6F, 0x9B, 0xE5, 0x69, 0xDC, 0xE3, 0x5E, 0x7E, 0xE3, 0x97, 0xF3, 0xCF, 0xCE, 0x57, 0xE5, 0xAC, 0x13, 0xB2, 0x34, 0x53, 0x4E, 0x78, 0xC4, 0x98, 0xF9, 0x5A, 0x78, 0x30, 0x40, 0x5C, 0x4E, 0xCC, 0x1E, 0x94, 0x7B, 0x4C, 0x16, 0xF5, 0x96, 0xF3, 0xEC, 0xE4, 0xA2, 0x30, 0xB9, 0xF1, 0x09, 0xB9, 0x35, 0x4C, 0x9E, 0xDB, 0x29, 0xAF, 0xDD, 0xA8, 0x53, 0xDB, 0x78, 0xEB, 0x5E, 0xF6, 0x60, 0xE3, 0xFB, 0xAE, 0x27, 0x2A, 0x8C, 0x77, 0xB2, 0x95, 0xF7, 0xD5, 0x45, 0xF9, 0xC2, 0x24, 0xB9, 0xE7, 0x0D, 0xB9, 0xCF, 0xDE, 0x18, 0x7B, 0x27, 0x1E, 0x1D, 0xA5, 0xC5, 0x72, 0x7A, 0x1F, 0xB9, 0x30, 0x45, 0xAE, 0x3D, 0xFA, 0x4F, 0xE7, 0x8F, 0x6E, 0x5F, 0xCA, 0x45, 0xE5, 0xFF, 0x64, 0x0E, 0x2A, 0x42, 0xC7, 0x9C, 0x4B, 0x72, 0xC3, 0x8B, 0xFF, 0xC9, 0x73, 0xD0, 0xED, 0x6C, 0x70, 0x39, 0x0B, 0x47, 0x52, 0xA1, 0x71, 0x1A, 0x6C, 0xCE, 0x82, 0x56, 0x0D, 0x60, 0xE9, 0x30, 0x88, 0x07, 0xCC, 0x5E, 0xC8, 0x7E, 0x00, 0x7B, 0x57, 0xEB, 0xD7, 0xE3, 0xCE, 0x50, 0xB1, 0x0F, 0x06, 0x8F, 0xD3, 0x1A, 0xD9, 0x2E, 0x32, 0xDD, 0x4E, 0x26, 0xDE, 0x95, 0xD1, 0x33, 0xE5, 0xDF, 0xED, 0xB1, 0xAD, 0x01, 0xD4, 0x3E, 0x09, 0xCF, 0x25, 0x82, 0x53, 0x16, 0x2C, 0x1B, 0x00, 0xCD, 0xBE, 0x83, 0x79, 0xCF, 0x40, 0xFC, 0x30, 0x18, 0xEA, 0x09, 0x49, 0xB3, 0x2B, 0x7D, 0x0A, 0x5E, 0x9E, 0x02, 0x43, 0x12, 0xE1, 0x41, 0x1C, 0xE4, 0xF4, 0x41, 0x73, 0x97, 0x8B, 0xEC, 0xDA, 0x5C, 0xC6, 0x7A, 0xC9, 0xB0, 0xFB, 0x7F, 0xAF, 0xC7, 0xE6, 0x0C, 0x59, 0xFE, 0xA5, 0x2C, 0xBB, 0x02, 0x75, 0x27, 0xC2, 0xE3, 0x83, 0xC0, 0x7D, 0x2E, 0x8C, 0xEA, 0x08, 0xB1, 0x65, 0x30, 0xE0, 0x16, 0x74, 0x9C, 0x0D, 0x83, 0x5E, 0xD7, 0x6C, 0xD8, 0xF7, 0x53, 0xB8, 0x12, 0x0F, 0xDD, 0x35, 0x97, 0x91, 0xD2, 0x4C, 0x76, 0x3C, 0x26, 0x23, 0x5E, 0x97, 0x41, 0x8D, 0xFF, 0x5E, 0x8F, 0x2D, 0x7D, 0xE4, 0xCC, 0xD3, 0xB2, 0x30, 0x45, 0x8E, 0x1A, 0x04, 0xDE, 0x8D, 0x61, 0xF0, 0x3C, 0x88, 0xFE, 0x16, 0xCC, 0x77, 0xD4, 0x8D, 0xBD, 0x08, 0xC9, 0x89, 0x50, 0xD4, 0x19, 0xBA, 0x77, 0x86, 0x5D, 0x73, 0x21, 0xDD, 0x02, 0x9D, 0x87, 0xF1, 0x32, 0xDA, 0x53, 0x86, 0xF4, 0x94, 0x81, 0xDF, 0xFE, 0x79, 0x8F, 0xED, 0xDD, 0xE4, 0x1C, 0x07, 0x59, 0xB0, 0x4D, 0x16, 0x5A, 0xCA, 0x81, 0xA7, 0xA0, 0x49, 0x28, 0xF4, 0xDA, 0x04, 0xE1, 0xDD, 0x20, 0xA7, 0x0D, 0x44, 0xAD, 0x81, 0x4E, 0xB3, 0x20, 0x3F, 0x15, 0x92, 0x57, 0xC3, 0xF6, 0x7B, 0xD0, 0x59, 0xFB, 0x81, 0x98, 0xD7, 0x64, 0x58, 0xAC, 0x6C, 0x61, 0x25, 0x7D, 0x0A, 0xE5, 0x6F, 0xF6, 0xC1, 0x05, 0x39, 0xEB, 0x73, 0x59, 0xF0, 0x8A, 0x2C, 0xB9, 0x2C, 0xFF, 0x7D, 0x44, 0xA6, 0xB7, 0x00, 0xC7, 0xA6, 0x95, 0x7E, 0x00, 0x41, 0x75, 0x21, 0xAD, 0x1C, 0xA2, 0x1B, 0x43, 0x87, 0x32, 0x28, 0xEC, 0x00, 0xED, 0x87, 0xC2, 0xE6, 0x1A, 0x10, 0xE3, 0x07, 0x9F, 0x4C, 0x83, 0xF0, 0x2F, 0x94, 0xD1, 0xF2, 0x86, 0xF4, 0x7B, 0x44, 0xBA, 0x53, 0xB5, 0xC7, 0xC6, 0x1F, 0xE4, 0x8C, 0x06, 0xB2, 0xC0, 0x4A, 0x16, 0xF5, 0x97, 0x93, 0x2E, 0xCA, 0x8C, 0x09, 0xB2, 0x4B, 0x24, 0x58, 0x96, 0x42, 0xE2, 0x08, 0xF0, 0x5F, 0x02, 0xAD, 0x0B, 0xA0, 0xE3, 0x22, 0x88, 0xDD, 0x0E, 0x93, 0x0F, 0x42, 0xD4, 0x32, 0x58, 0x5B, 0x0C, 0x41, 0xED, 0xE1, 0xC2, 0x11, 0x08, 0x8E, 0x50, 0x56, 0x80, 0xC4, 0x63, 0x86, 0x74, 0x7B, 0x20, 0xF7, 0x97, 0xA3, 0xB9, 0xE3, 0x79, 0x99, 0x3F, 0x47, 0x16, 0xD5, 0x90, 0x85, 0xD9, 0x32, 0xA3, 0x9A, 0xEC, 0xDA, 0x42, 0x76, 0xF8, 0x14, 0x2C, 0x6A, 0x43, 0xEB, 0xE7, 0xC0, 0xAB, 0x33, 0x44, 0x6D, 0x84, 0xF6, 0x8B, 0x2A, 0x8D, 0x86, 0xE1, 0xB5, 0x20, 0x6C, 0x1D, 0x2C, 0x76, 0x84, 0xE6, 0xBB, 0xE1, 0xD9, 0xB7, 0x21, 0xF0, 0x65, 0xF8, 0x2C, 0x1A, 0x7C, 0x9E, 0x50, 0x6E, 0xE3, 0x11, 0xD2, 0xF1, 0x03, 0x39, 0xF7, 0x19, 0x94, 0x7F, 0x50, 0x4E, 0xF9, 0x42, 0x96, 0xEC, 0x90, 0x19, 0x6E, 0xB2, 0x6B, 0x1D, 0xD9, 0x71, 0xBD, 0xC5, 0x5B, 0xC6, 0xE0, 0x2D, 0x0E, 0x36, 0x46, 0x1D, 0x66, 0xAE, 0xA9, 0xD1, 0x36, 0x20, 0xC8, 0xDB, 0x02, 0xEA, 0xB5, 0xCE, 0x3A, 0xD7, 0x78, 0x18, 0xD8, 0xC6, 0x94, 0x5E, 0x6F, 0xB8, 0x14, 0xEC, 0xDE, 0xDA, 0xBF, 0xC5, 0x69, 0x0C, 0xD8, 0xBC, 0xF1, 0x46, 0x33, 0xFB, 0x97, 0xA1, 0x6E, 0xF3, 0x8A, 0x0A, 0xC7, 0x31, 0xDA, 0x0B, 0x0E, 0xCB, 0xAD, 0xE6, 0x1B, 0xA1, 0x08, 0x94, 0xFF, 0x8A, 0x9C, 0x5A, 0x4B, 0xA6, 0x07, 0xC9, 0xCE, 0x57, 0x2C, 0x07, 0x1B, 0xDB, 0x9E, 0xB3, 0x2A, 0x32, 0x36, 0x9F, 0xDF, 0xC4, 0xD1, 0xE8, 0xB8, 0xB8, 0x59, 0x84, 0x11, 0x42, 0x13, 0x6A, 0x17, 0xD6, 0xEA, 0x0E, 0x21, 0x83, 0x82, 0xCF, 0x42, 0xA5, 0xB5, 0x7B, 0x2D, 0x36, 0x36, 0x1B, 0x56, 0x1C, 0x8C, 0x71, 0xD7, 0xBE, 0x57, 0x8D, 0x01, 0x99, 0x2F, 0x6E, 0x35, 0x7A, 0x7B, 0x68, 0x2F, 0xB8, 0xCE, 0x97, 0xD6, 0xEB, 0x7E, 0xD9, 0xA3, 0x6C, 0xB9, 0xEC, 0x54, 0xEE, 0xD2, 0xC1, 0x98, 0x32, 0xC1, 0xFA, 0xB2, 0xB1, 0x5D, 0x8C, 0x53, 0x3F, 0x63, 0x73, 0x2F, 0xCF, 0x8E, 0xC6, 0xEA, 0xB3, 0x63, 0xDA, 0x18, 0xE1, 0x91, 0x1C, 0x64, 0xA4, 0x8C, 0xAA, 0xE9, 0xDF, 0xC3, 0x18, 0x39, 0xA4, 0x87, 0xB7, 0x31, 0xF8, 0x99, 0xB1, 0x89, 0xC6, 0x90, 0xDD, 0x7B, 0x87, 0x18, 0x5B, 0x6D, 0x3D, 0xBF, 0xD9, 0xD8, 0xBC, 0x4C, 0xF9, 0x9E, 0xC1, 0xB2, 0x41, 0xCE, 0x2F, 0x7B, 0x24, 0xD7, 0x68, 0x30, 0xDA, 0x98, 0xFE, 0xA2, 0xCD, 0x6D, 0x63, 0xCC, 0xBC, 0xA6, 0x2F, 0x19, 0x5B, 0xE4, 0xF9, 0x06, 0x1B, 0x21, 0xF1, 0x9E, 0xEC, 0x9C, 0x2E, 0xBB, 0xD6, 0x47, 0xA6, 0xCB, 0x2E, 0x3B, 0xEB, 0x4E, 0x37, 0xB6, 0xDF, 0x91, 0x35, 0xCE, 0x98, 0x94, 0xD3, 0xBF, 0xCC, 0x18, 0x9B, 0x7A, 0xA0, 0xB3, 0x31, 0x7C, 0xD3, 0xC1, 0x89, 0xC6, 0xB0, 0x77, 0x94, 0xDF, 0xDC, 0x47, 0x7A, 0x3D, 0x62, 0xEC, 0x7E, 0xCB, 0xF9, 0x16, 0x40, 0x37, 0x2B, 0xBB, 0x9A, 0xC6, 0xD8, 0x82, 0xA6, 0x4B, 0x8C, 0x75, 0x9A, 0xC7, 0x45, 0x18, 0x21, 0xE5, 0x71, 0x99, 0xFE, 0x9E, 0xEC, 0x96, 0x23, 0xBB, 0xFF, 0x28, 0x7B, 0xAC, 0x47, 0x3E, 0x94, 0x59, 0x53, 0xDA, 0x36, 0x34, 0xA6, 0x6D, 0x1E, 0xFD, 0x0A, 0xC6, 0xA7, 0x56, 0x64, 0x1B, 0x3B, 0xF7, 0x3D, 0xD3, 0xD6, 0x98, 0x35, 0x4E, 0xF9, 0x21, 0x9F, 0xC9, 0x56, 0xF5, 0x8D, 0xDD, 0x5E, 0x76, 0x7A, 0x19, 0x20, 0xEE, 0x80, 0xE7, 0x38, 0x23, 0xA4, 0x7E, 0x29, 0x33, 0xF3, 0x65, 0xCF, 0x1A, 0x72, 0xD4, 0x72, 0xF9, 0x78, 0xBC, 0x1C, 0xDF, 0x5A, 0x4E, 0x18, 0x83, 0x1C, 0x29, 0x73, 0xAD, 0x65, 0xBE, 0xC7, 0xEE, 0xAF, 0x8C, 0xC5, 0x2B, 0x96, 0xBC, 0x6D, 0x9C, 0xBE, 0x56, 0xB9, 0x63, 0xFD, 0xE4, 0x88, 0x7B, 0x32, 0x35, 0xDB, 0xD8, 0xE1, 0x92, 0xEF, 0x2E, 0x94, 0xFB, 0xBA, 0xEC, 0x1E, 0x25, 0xC7, 0x54, 0xBD, 0x92, 0x28, 0xF6, 0x92, 0xD3, 0x1B, 0x21, 0x67, 0xC8, 0x69, 0xDB, 0xE5, 0xCC, 0x0B, 0x72, 0x47, 0x8F, 0xB4, 0x0C, 0xE3, 0xB6, 0x45, 0x39, 0x75, 0x8D, 0x37, 0x3F, 0x7D, 0xEA, 0x0D, 0x8C, 0xFD, 0x94, 0xBB, 0xDB, 0x45, 0x4E, 0x1D, 0x26, 0x27, 0xA5, 0xCA, 0xB4, 0xA7, 0x01, 0x60, 0xE4, 0x4C, 0x39, 0xC9, 0x4F, 0x16, 0xAD, 0x91, 0x33, 0xBC, 0xE4, 0x74, 0x1B, 0xB9, 0xA6, 0xF6, 0x5F, 0xDD, 0xA1, 0x87, 0xEE, 0x91, 0x5B, 0x96, 0xFF, 0x9D, 0xF9, 0xE3, 0xAB, 0x74, 0x39, 0x52, 0xF3, 0x27, 0x85, 0xC3, 0xE4, 0xCC, 0xB3, 0x72, 0xF9, 0x8C, 0xFF, 0xA4, 0x39, 0x68, 0x5F, 0xB8, 0x5C, 0x14, 0x24, 0xA7, 0x2D, 0x80, 0x5A, 0xE5, 0x30, 0xF5, 0x16, 0x38, 0x87, 0xC0, 0xF0, 0x25, 0x10, 0x9A, 0x03, 0xFD, 0xBA, 0x69, 0x1E, 0xCA, 0x7A, 0x16, 0x9E, 0x7A, 0x16, 0xB2, 0x63, 0xE0, 0xEB, 0x4E, 0x90, 0xD6, 0x51, 0x6B, 0x25, 0x7C, 0x25, 0x23, 0x03, 0x65, 0xAB, 0xDB, 0xD2, 0x3F, 0x59, 0xFE, 0x55, 0x8F, 0x39, 0x45, 0x72, 0x5A, 0xA1, 0x9C, 0xF2, 0x96, 0x1C, 0xE9, 0x00, 0x5E, 0x2F, 0x43, 0xBF, 0xEB, 0x10, 0xD2, 0x04, 0xFA, 0x3E, 0x06, 0x6D, 0x1B, 0x40, 0xF2, 0x27, 0xB0, 0xE7, 0x63, 0xC8, 0x78, 0x17, 0xD6, 0x8F, 0x83, 0x2E, 0x13, 0x50, 0xFE, 0x0F, 0x32, 0xF8, 0xA6, 0x0C, 0xBC, 0x2B, 0xBD, 0x52, 0xFF, 0xBC, 0xC7, 0x86, 0x7E, 0x72, 0xEA, 0xA3, 0x72, 0xF2, 0x3C, 0x59, 0xBA, 0x52, 0xA6, 0xCC, 0x04, 0x97, 0x8F, 0xA0, 0xC7, 0x03, 0x68, 0xE1, 0x0D, 0xBD, 0x0E, 0x42, 0x78, 0x73, 0x68, 0xFB, 0x1D, 0x94, 0x7C, 0x0A, 0x9D, 0x37, 0xC0, 0x9A, 0x0A, 0x88, 0x99, 0xAC, 0x35, 0x43, 0x1F, 0x95, 0xCD, 0xBF, 0x97, 0x3E, 0x65, 0xD2, 0x1D, 0xF9, 0x9B, 0xFC, 0xA9, 0x72, 0xBA, 0x8F, 0x2C, 0x70, 0x97, 0x25, 0xFB, 0xE4, 0xC4, 0x1F, 0x64, 0xE7, 0x73, 0x60, 0x97, 0x09, 0xA9, 0xFD, 0x20, 0x20, 0x17, 0xB2, 0x0E, 0x54, 0x7A, 0x1C, 0x62, 0x77, 0x41, 0xC1, 0xBB, 0x95, 0x5E, 0x83, 0x95, 0x0F, 0x21, 0x7C, 0x2F, 0xBA, 0xDF, 0x07, 0x49, 0xBF, 0x64, 0xE9, 0x5E, 0x5D, 0xBA, 0x3E, 0xF7, 0xFB, 0x3D, 0x66, 0x1C, 0x91, 0x85, 0x01, 0x72, 0xCA, 0x2A, 0x59, 0x52, 0x5F, 0x76, 0x49, 0x90, 0x09, 0x7D, 0xA1, 0xCE, 0x17, 0xD0, 0xAE, 0x2B, 0xB8, 0x3E, 0x0F, 0x49, 0x9B, 0xC0, 0xAF, 0x3B, 0x84, 0x1F, 0x83, 0xB1, 0xAE, 0x10, 0xB6, 0x1A, 0x56, 0x4D, 0x84, 0xC0, 0x3B, 0x70, 0xBD, 0x10, 0xFC, 0xDF, 0x51, 0x86, 0xC7, 0x72, 0xD9, 0x28, 0x50, 0x3A, 0x5C, 0xAC, 0xDA, 0xA3, 0xEC, 0x9C, 0x9C, 0xE2, 0x24, 0x0B, 0x1F, 0xCA, 0xB2, 0xB6, 0xB2, 0x6B, 0x90, 0x4C, 0x78, 0x43, 0xC6, 0xAF, 0x92, 0xB1, 0xB5, 0xA1, 0xC1, 0x3E, 0x08, 0x7B, 0x06, 0xBC, 0xF7, 0x40, 0xCB, 0x49, 0x30, 0xA2, 0x08, 0x9A, 0xCD, 0x80, 0xA5, 0xD5, 0xC0, 0xF3, 0x30, 0x9C, 0xDC, 0x08, 0x5E, 0x4B, 0x94, 0xE5, 0x76, 0x5B, 0x3A, 0x6E, 0x94, 0x96, 0x73, 0x64, 0xB9, 0x1E, 0x3D, 0xC8, 0x2B, 0x93, 0x85, 0x47, 0x65, 0x69, 0x82, 0xEC, 0xFA, 0xB4, 0x4C, 0x72, 0x95, 0x6D, 0x7E, 0x90, 0x71, 0x61, 0x32, 0xE8, 0x27, 0x70, 0x29, 0x80, 0x80, 0x03, 0x10, 0x34, 0x02, 0x7C, 0x2E, 0xC3, 0x40, 0x1B, 0x70, 0xDB, 0x08, 0xB3, 0xDE, 0x02, 0x97, 0x7E, 0xF0, 0x5C, 0x2C, 0x34, 0xAC, 0x0D, 0xDF, 0x3E, 0x00, 0xC7, 0x05, 0x28, 0xFF, 0x79, 0x59, 0xB3, 0x8E, 0x2C, 0x79, 0x07, 0xE5, 0xBF, 0x28, 0x4B, 0xEE, 0x21, 0xFB, 0xC9, 0x24, 0x2B, 0x19, 0x1F, 0x25, 0xDB, 0xCE, 0x90, 0xC1, 0xB3, 0xA4, 0x9F, 0x03, 0x38, 0xCE, 0x07, 0xF7, 0x62, 0x08, 0x0E, 0x80, 0x46, 0xDF, 0x41, 0x76, 0x22, 0xB8, 0x5C, 0x87, 0xE2, 0x36, 0x60, 0xEB, 0x0F, 0xDB, 0x5F, 0x04, 0xAB, 0xCF, 0xE0, 0xDA, 0x06, 0xB0, 0xD4, 0x3E, 0xA5, 0xFA, 0x0D, 0x09, 0xB2, 0x08, 0x94, 0xFB, 0xB3, 0x9C, 0xFE, 0x94, 0x4C, 0x7A, 0x4E, 0xC6, 0x4F, 0x43, 0xDE, 0x91, 0xE1, 0xCB, 0xA5, 0x4F, 0x4F, 0xA9, 0xC3, 0x39, 0x0F, 0x6A, 0x7F, 0xEF, 0x1F, 0x60, 0xB7, 0x1D, 0x2C, 0x9F, 0xEE, 0x9A, 0x5B, 0x27, 0x19, 0xAC, 0x9D, 0x73, 0x8F, 0x57, 0x1B, 0x03, 0x56, 0xEB, 0x56, 0x9F, 0x04, 0xA8, 0x57, 0xEB, 0xF4, 0x24, 0x63, 0x2D, 0xA7, 0x5B, 0xF5, 0x8D, 0xBF, 0xDF, 0x63, 0xFA, 0x1A, 0xD9, 0x29, 0x52, 0xC6, 0x27, 0x21, 0x37, 0xC8, 0xA8, 0x86, 0xD2, 0xED, 0x2B, 0x1B, 0x3D, 0x25, 0x1E, 0xAF, 0x4B, 0xCF, 0xF1, 0xB2, 0xC1, 0x7A, 0xEF, 0x3D, 0x18, 0x5F, 0x4C, 0x9A, 0x6A, 0x74, 0x9A, 0x3B, 0x78, 0xA2, 0xD1, 0xFE, 0xBD, 0xF2, 0x21, 0x46, 0x87, 0x4F, 0x8E, 0xBF, 0x68, 0xB4, 0x5A, 0xFE, 0x7D, 0x85, 0xB1, 0x8E, 0xC3, 0xEF, 0xF5, 0x48, 0x8C, 0x95, 0x6D, 0x8E, 0xD5, 0x68, 0x62, 0x8C, 0xD7, 0x7E, 0x21, 0xE2, 0xA9, 0x5A, 0xAB, 0x8D, 0xF5, 0xFA, 0x7A, 0x68, 0xA7, 0x10, 0x10, 0x21, 0x03, 0x8D, 0x46, 0x0F, 0xE9, 0x1B, 0x66, 0xE5, 0x69, 0xF4, 0x9C, 0x9B, 0xF8, 0xAE, 0xB1, 0xA9, 0xCF, 0xBF, 0x16, 0x1B, 0x5D, 0x16, 0xCF, 0x3B, 0x6B, 0x6C, 0xB2, 0xE2, 0xA4, 0x9D, 0xD1, 0xA5, 0xE6, 0x0F, 0xFA, 0x48, 0xDF, 0xF3, 0xEA, 0x51, 0xEB, 0x6B, 0x63, 0x5A, 0x9E, 0x56, 0x69, 0x9F, 0x59, 0x7B, 0xA8, 0x31, 0xC1, 0x5D, 0x7F, 0x6F, 0xB5, 0xC3, 0xF1, 0x23, 0x63, 0x1D, 0x2B, 0xAF, 0x2B, 0xE8, 0x5F, 0x5E, 0x92, 0xC1, 0x6B, 0x64, 0xC8, 0x5E, 0xE4, 0x7C, 0x19, 0xBC, 0x96, 0xAB, 0xC6, 0x66, 0xDF, 0xB5, 0xCB, 0x35, 0x06, 0xDE, 0xED, 0x7D, 0xDE, 0xE8, 0xB3, 0x7A, 0xC1, 0x6D, 0xA3, 0xDF, 0xEE, 0xD3, 0xBB, 0x8C, 0xEE, 0xDB, 0x4E, 0x77, 0x33, 0xBA, 0xBE, 0xA1, 0x1E, 0xB6, 0xCF, 0x1B, 0x3B, 0x79, 0xD4, 0xF5, 0x80, 0x4A, 0xF3, 0xAA, 0xED, 0x36, 0x06, 0x8F, 0x73, 0xB5, 0x32, 0x42, 0xD0, 0x13, 0x32, 0x6C, 0xAC, 0x8C, 0xDC, 0x20, 0xA3, 0x57, 0xC8, 0x98, 0x6D, 0xC8, 0x77, 0x91, 0xE7, 0x65, 0x78, 0xCF, 0xA4, 0x0F, 0x8D, 0xA1, 0xDD, 0xFA, 0xBE, 0x6D, 0x6C, 0xF1, 0xF1, 0xC2, 0x77, 0x8C, 0xAD, 0xDA, 0x9C, 0x18, 0x6F, 0xF4, 0xBD, 0x7F, 0x78, 0x19, 0xC6, 0x3C, 0xF5, 0x70, 0xFD, 0xDC, 0x98, 0x18, 0x5F, 0xA7, 0x0C, 0x20, 0x64, 0x6C, 0x53, 0x2F, 0x94, 0x9B, 0x29, 0xA3, 0x86, 0xC8, 0xA4, 0xC6, 0xB2, 0xCB, 0x4D, 0x99, 0x12, 0x2D, 0xD3, 0x2C, 0x91, 0x2F, 0x23, 0xBF, 0x90, 0xC9, 0xB7, 0x64, 0xFB, 0x51, 0x63, 0xAA, 0x19, 0x53, 0x86, 0xF4, 0x1E, 0x67, 0x0C, 0x19, 0x7C, 0xB4, 0xA5, 0xB1, 0xC7, 0x0C, 0xE5, 0xB7, 0xF8, 0x5A, 0xFA, 0xEF, 0x34, 0xB6, 0xF2, 0x77, 0x47, 0x47, 0x64, 0x1B, 0x99, 0x90, 0x22, 0x93, 0x9D, 0x65, 0xC6, 0xC7, 0x72, 0x64, 0xA6, 0x1C, 0x53, 0x2E, 0xFF, 0x5D, 0x2A, 0xC7, 0xD6, 0x43, 0x0E, 0x95, 0x63, 0x12, 0xE4, 0x36, 0xB7, 0x5E, 0xEB, 0x8C, 0x05, 0xFD, 0x56, 0x8D, 0x36, 0xCE, 0x19, 0xA3, 0xDC, 0x09, 0x5F, 0xCB, 0xDC, 0x1C, 0x99, 0x3A, 0x44, 0x46, 0xBB, 0xA2, 0x97, 0xD7, 0x49, 0xA6, 0x27, 0xCA, 0x31, 0x6F, 0xCB, 0x49, 0x1F, 0xC8, 0xFC, 0x64, 0xE4, 0xAB, 0xB2, 0xE8, 0xA2, 0x9C, 0xDA, 0x43, 0x16, 0xEF, 0x94, 0x77, 0x7D, 0xFB, 0x8C, 0xD1, 0x55, 0xB0, 0x7F, 0x3F, 0xC6, 0xE7, 0xAB, 0xCE, 0x1B, 0x0F, 0x3D, 0xE4, 0xEB, 0x2F, 0xCA, 0x99, 0xD1, 0x32, 0xF9, 0x32, 0x9A, 0x43, 0x63, 0xE4, 0x84, 0x1C, 0x59, 0xBC, 0x44, 0xCE, 0x6D, 0xFD, 0xFF, 0x39, 0x07, 0x2D, 0xB9, 0x2A, 0xA7, 0x8F, 0x94, 0x45, 0x82, 0xC2, 0x93, 0x32, 0xC5, 0x0E, 0xAC, 0xED, 0x20, 0xB5, 0x1B, 0x38, 0xDF, 0x83, 0xCC, 0x48, 0x08, 0x8D, 0x82, 0xB8, 0x24, 0x28, 0x48, 0x32, 0xD7, 0x1F, 0x6C, 0xCA, 0x80, 0xD0, 0x13, 0xE8, 0x7E, 0xDF, 0x5A, 0xFA, 0x58, 0x4B, 0x77, 0x64, 0xC3, 0x76, 0xF0, 0x67, 0x3D, 0x66, 0x0F, 0x94, 0x45, 0x54, 0x35, 0xF5, 0xA0, 0x4C, 0x7A, 0x03, 0xEA, 0xBC, 0x51, 0x69, 0x13, 0x70, 0x5C, 0x0C, 0x5D, 0xDD, 0xA0, 0xB9, 0x1B, 0x44, 0xF8, 0xC2, 0x78, 0xDF, 0x4A, 0xAB, 0xE9, 0xFD, 0x75, 0x2D, 0xB3, 0xB5, 0xA6, 0xEF, 0x1B, 0x55, 0xF3, 0x5D, 0x5D, 0xA5, 0x43, 0xCD, 0xDF, 0xEF, 0x31, 0x6F, 0x94, 0x2C, 0xAA, 0x85, 0x14, 0x14, 0xEE, 0x94, 0x9D, 0x5E, 0x93, 0xED, 0x7D, 0xA1, 0xBA, 0x1F, 0xC4, 0xC7, 0x81, 0xDD, 0x77, 0x10, 0x6D, 0xAF, 0x8C, 0x56, 0xA3, 0x61, 0xF4, 0x68, 0xCD, 0x1B, 0xAB, 0x47, 0x81, 0xDF, 0x73, 0x70, 0x37, 0x13, 0x3C, 0x1A, 0xA0, 0xFC, 0x11, 0xD2, 0x21, 0x4F, 0x5A, 0xF6, 0xAE, 0xDA, 0x63, 0xC1, 0x12, 0x59, 0x32, 0x5E, 0x16, 0x51, 0xD5, 0xE4, 0x7B, 0xB2, 0x7D, 0x9E, 0x8C, 0x17, 0xC4, 0x44, 0x82, 0xAD, 0x05, 0x04, 0x6F, 0x56, 0x0F, 0x7F, 0x17, 0x18, 0xE2, 0x02, 0x0D, 0x81, 0x45, 0x6F, 0x81, 0xEB, 0x3C, 0xB8, 0x6A, 0x5B, 0xE9, 0x38, 0x94, 0x3F, 0x40, 0x5A, 0x8E, 0x97, 0x35, 0x33, 0x64, 0xB9, 0xD6, 0xA7, 0xCC, 0xF6, 0xF7, 0xF3, 0xF3, 0x77, 0xC9, 0xC4, 0x4E, 0x55, 0xF3, 0xE3, 0x2E, 0xC9, 0xA0, 0x14, 0xB0, 0xBC, 0x02, 0x01, 0xD3, 0xD5, 0xA3, 0x69, 0x1A, 0xF4, 0x49, 0x03, 0xFB, 0xD9, 0x30, 0x67, 0x3F, 0xD8, 0xCD, 0x80, 0xC3, 0x7B, 0xC0, 0xBE, 0x02, 0xE5, 0x5B, 0xC8, 0x9A, 0x0D, 0x24, 0xC8, 0xB2, 0xFB, 0xBF, 0x9F, 0x9F, 0x35, 0x4D, 0x76, 0xFE, 0xB7, 0x8C, 0xA7, 0xAA, 0xA1, 0xB3, 0xA5, 0xCF, 0x55, 0xA8, 0xBF, 0x09, 0xDC, 0x16, 0x82, 0xEF, 0x14, 0xDD, 0x79, 0xBB, 0x4F, 0x82, 0xFA, 0xC7, 0xA0, 0xF4, 0x5B, 0xA8, 0xB3, 0x03, 0x0E, 0x1C, 0xAC, 0xF4, 0x3C, 0xFC, 0xB0, 0x11, 0x6A, 0x74, 0x53, 0xEE, 0x1F, 0xDD, 0x6F, 0xFB, 0x0A, 0xBA, 0xBF, 0x2F, 0xBB, 0x7E, 0x28, 0xDB, 0xCD, 0xAB, 0x9A, 0x1F, 0xFD, 0x8D, 0x0C, 0x28, 0x92, 0xAE, 0x26, 0xEB, 0x31, 0xB0, 0xDB, 0x05, 0xBE, 0x25, 0x60, 0x59, 0x06, 0xC9, 0x11, 0x50, 0xE3, 0xC8, 0xFF, 0xAD, 0xBD, 0xC5, 0x5F, 0x5E, 0x49, 0x96, 0x7F, 0xD6, 0xA3, 0xE7, 0x45, 0x99, 0x72, 0x46, 0x76, 0xF8, 0x57, 0xD5, 0xFC, 0x47, 0x96, 0xCA, 0x56, 0x35, 0xA5, 0xDB, 0x15, 0x69, 0xBD, 0x09, 0x6A, 0xAC, 0xD5, 0xD7, 0x80, 0xF0, 0x4F, 0x00, 0x4E, 0x42, 0xC7, 0x0E, 0xE8, 0x11, 0x36, 0x47, 0x2E, 0x88, 0x94, 0xC7, 0x2A, 0xE4, 0x83, 0xF0, 0x3F, 0xEE, 0x91, 0xD6, 0x59, 0x76, 0x3C, 0x2C, 0xE3, 0xA9, 0x6A, 0xF0, 0x3B, 0xB2, 0xD1, 0x2E, 0x69, 0x13, 0xCE, 0x6F, 0x0E, 0xF7, 0x46, 0xB2, 0x75, 0x96, 0x1C, 0x74, 0x4E, 0x96, 0x26, 0xC9, 0x67, 0x56, 0xC8, 0xAF, 0x76, 0xFE, 0x71, 0x8F, 0x84, 0x0F, 0xFF, 0x7C, 0x1F, 0xB8, 0x7D, 0x2E, 0x2D, 0xD3, 0x6B, 0x5C, 0x47, 0x4D, 0x06, 0x4A, 0xCB, 0x5E, 0xB2, 0xE6, 0x8E, 0x26, 0xF5, 0x8D, 0xD5, 0x53, 0x22, 0x57, 0x1A, 0xA1, 0x7B, 0x03, 0x59, 0x24, 0xD8, 0xF5, 0xBD, 0xBC, 0x7C, 0xF9, 0xB7, 0x3D, 0x92, 0x2C, 0x7E, 0x3F, 0x3F, 0xBC, 0x91, 0x74, 0xDD, 0x62, 0xB1, 0x1B, 0xFD, 0x49, 0xE0, 0x36, 0x40, 0xBA, 0x8E, 0x92, 0x2E, 0x0B, 0x64, 0xFD, 0x8F, 0x1B, 0x2D, 0x37, 0xD6, 0xDB, 0x17, 0x56, 0xDB, 0x58, 0x67, 0x78, 0xE6, 0x00, 0x63, 0x8D, 0xD7, 0xD4, 0xA3, 0x5A, 0xDC, 0xE2, 0xAC, 0x2A, 0xE7, 0x67, 0xEF, 0x2F, 0x7A, 0xFC, 0x26, 0x3F, 0xE2, 0x67, 0x59, 0xB3, 0x49, 0xA3, 0x5C, 0x23, 0xB8, 0xF3, 0xF7, 0x6C, 0x7A, 0x4F, 0xDA, 0xBB, 0x86, 0xB8, 0x62, 0x6C, 0x94, 0xE1, 0x66, 0xAC, 0xBF, 0x77, 0xCA, 0x7D, 0x63, 0xBD, 0x26, 0xB3, 0xD5, 0xF3, 0xB8, 0x7A, 0xD4, 0xBD, 0x50, 0xD1, 0xDF, 0xC8, 0xFA, 0x5F, 0xF6, 0x88, 0xF6, 0x90, 0x16, 0x9B, 0x7F, 0xBD, 0xBE, 0x87, 0xA7, 0xF4, 0x9E, 0x2B, 0x7D, 0x57, 0x4B, 0xBF, 0x7C, 0xE4, 0x14, 0x64, 0x4D, 0xE9, 0xD3, 0xAA, 0xEE, 0x41, 0x63, 0xC3, 0xEB, 0x3D, 0x8B, 0x8D, 0xCE, 0x76, 0x03, 0x8F, 0x18, 0x6D, 0xAF, 0x2F, 0xB8, 0x66, 0x74, 0x6E, 0xA9, 0x1E, 0x0E, 0x7D, 0x2A, 0xA6, 0x19, 0xEB, 0x95, 0x9B, 0x1E, 0xB1, 0x2B, 0x50, 0xFE, 0x81, 0xFF, 0xCD, 0x1F, 0x20, 0x7D, 0xDE, 0x93, 0x81, 0x5D, 0x65, 0x8B, 0x99, 0xB2, 0xD5, 0x26, 0x19, 0x74, 0x51, 0x06, 0xC7, 0x20, 0x9B, 0xC9, 0xA0, 0xB3, 0x32, 0xD0, 0x22, 0xFB, 0x73, 0xA3, 0xAF, 0x57, 0x5F, 0x30, 0x6E, 0x3B, 0x7C, 0xCD, 0xE8, 0xBE, 0x51, 0x3D, 0x1A, 0x9B, 0x7C, 0xC0, 0xF1, 0x96, 0xB1, 0x7A, 0x7D, 0xE5, 0x83, 0xD7, 0x28, 0x19, 0xB0, 0x5D, 0xB6, 0xB2, 0x90, 0xA1, 0x3D, 0x64, 0xC4, 0x46, 0x19, 0x75, 0x4B, 0xC6, 0xE4, 0xC9, 0xC4, 0xC5, 0x32, 0xA9, 0x8E, 0x4C, 0xFC, 0x51, 0x46, 0x38, 0x27, 0x27, 0x1A, 0x83, 0x77, 0xAA, 0x47, 0xC8, 0x4A, 0xE5, 0x37, 0x77, 0x95, 0xCD, 0x2F, 0xA8, 0x87, 0xD7, 0x14, 0xE9, 0xB3, 0x1E, 0x00, 0x9A, 0x97, 0xCA, 0x90, 0x83, 0x32, 0xCA, 0x49, 0x76, 0x7A, 0x5F, 0xA6, 0xEC, 0x92, 0x19, 0x6D, 0x65, 0xD6, 0x0D, 0xD9, 0x7D, 0xBE, 0x1C, 0xFE, 0x8E, 0x1C, 0x11, 0x21, 0x87, 0xDF, 0x94, 0x85, 0x76, 0x6B, 0xED, 0x30, 0xDE, 0xD4, 0x3C, 0x32, 0xAD, 0xA5, 0x72, 0x73, 0x93, 0x65, 0xB0, 0xB5, 0x6C, 0xA9, 0x7C, 0xC2, 0xF3, 0x65, 0xA7, 0x5C, 0x99, 0x6E, 0x21, 0x47, 0x85, 0xC8, 0x71, 0xFB, 0x64, 0x7E, 0x9E, 0x2C, 0x1D, 0x29, 0xA7, 0x9F, 0xFB, 0xAB, 0x79, 0xE8, 0xBF, 0xF8, 0xAC, 0x67, 0x28, 0xB1, 0x02, 0x00, 0x00, 0x60, 0xDF, 0xB6, 0xCD, 0xDA, 0xB6, 0x6D, 0xDB, 0xB6, 0x6D, 0xDB, 0x36, 0x96, 0xDA, 0xB6, 0x6D, 0xDB, 0xB6, 0x6D, 0x77, 0xBE, 0xFD, 0x65, 0x4F, 0xC2, 0x0F, 0xFA, 0xDA, 0xFA, 0xBF, 0x48, 0x03, 0xD4, 0x04, 0x86, 0x03, 0x1B, 0x81, 0xFB, 0xA0, 0x04, 0xE6, 0x03, 0xDB, 0x80, 0x33, 0xC1, 0xC3, 0xE0, 0x47, 0x28, 0x31, 0x54, 0x01, 0xEA, 0x07, 0xAD, 0x80, 0xAE, 0xC1, 0x24, 0x9C, 0x15, 0x6E, 0x0C, 0x4F, 0x84, 0x77, 0xC3, 0x2F, 0x10, 0x07, 0x29, 0x81, 0x74, 0x43, 0x16, 0x20, 0xE7, 0x50, 0x10, 0x4D, 0x8B, 0xD6, 0x46, 0x47, 0xA2, 0x9B, 0xD1, 0x87, 0x98, 0x82, 0x15, 0xC0, 0xDA, 0x61, 0x73, 0xB0, 0x63, 0xD8, 0x17, 0x3C, 0x19, 0x5E, 0x05, 0x1F, 0x88, 0xAF, 0xC6, 0x6F, 0x12, 0x2C, 0x91, 0x93, 0x68, 0x4E, 0x4C, 0x25, 0xF6, 0x13, 0x6F, 0xC9, 0x90, 0x2C, 0x4B, 0xF6, 0x26, 0x97, 0x92, 0x97, 0x29, 0x9C, 0xCA, 0x4C, 0x35, 0xA4, 0xC6, 0x53, 0x3B, 0xA9, 0xE7, 0xB4, 0x4D, 0x17, 0xA7, 0xBB, 0xD2, 0xF3, 0xE9, 0xB3, 0x0C, 0xC8, 0xA4, 0x65, 0x6A, 0x33, 0x23, 0x99, 0xCD, 0xCC, 0x43, 0x56, 0x65, 0x0B, 0xB2, 0xED, 0xD9, 0xB9, 0xEC, 0x71, 0xF6, 0x2B, 0x97, 0x9C, 0xAB, 0xC6, 0x0D, 0xE1, 0xD6, 0x71, 0x77, 0x78, 0x81, 0xCF, 0xC3, 0xB7, 0xE2, 0x67, 0xF0, 0x87, 0xF8, 0x8F, 0x42, 0x62, 0xA1, 0xA2, 0xD0, 0x5F, 0x58, 0x29, 0x5C, 0x17, 0x19, 0x31, 0x87, 0xD8, 0x4C, 0x9C, 0x22, 0xEE, 0x13, 0xDF, 0x48, 0xA1, 0x54, 0x56, 0xEA, 0x2D, 0x2D, 0x95, 0x2E, 0xCB, 0x84, 0x9C, 0x45, 0x6E, 0x24, 0x4F, 0x90, 0x77, 0xC9, 0x2F, 0x15, 0x57, 0x29, 0xA9, 0x74, 0x57, 0x16, 0x29, 0x17, 0x54, 0x44, 0xCD, 0xA0, 0xD6, 0x57, 0xC7, 0xAA, 0xDB, 0xD5, 0xA7, 0x9A, 0xA5, 0x15, 0xD3, 0xBA, 0x68, 0xF3, 0xB5, 0xB3, 0x3A, 0xA2, 0xE7, 0xD7, 0xFB, 0xE9, 0x3B, 0xF4, 0xEF, 0x46, 0x4E, 0xA3, 0xBB, 0xB1, 0xC9, 0xF8, 0x60, 0x66, 0x32, 0x3B, 0x9A, 0xAB, 0xCD, 0x57, 0x56, 0x1A, 0xAB, 0xB5, 0xB5, 0xD4, 0x7A, 0x62, 0x27, 0xB3, 0x9B, 0xDA, 0xF3, 0xED, 0x7B, 0x4E, 0xE4, 0xD4, 0x77, 0xE6, 0x3A, 0x37, 0x5C, 0xC7, 0xAD, 0xE9, 0x4E, 0x77, 0x2F, 0x79, 0x9A, 0x57, 0xD9, 0x9B, 0xE8, 0x9D, 0xF1, 0x45, 0xBF, 0xAC, 0x3F, 0xC6, 0x3F, 0x1E, 0xD0, 0x41, 0x89, 0x60, 0x78, 0x70, 0x30, 0xC4, 0xC2, 0xC2, 0xE1, 0xA0, 0x70, 0x4F, 0x04, 0x46, 0xF9, 0xA2, 0xBE, 0xD1, 0x8E, 0xE8, 0x5B, 0x9C, 0x33, 0xEE, 0x11, 0x6F, 0x8E, 0x7F, 0xB1, 0x69, 0x0E, 0xC0, 0x61, 0x84, 0x61, 0xBB, 0x8D, 0xDD, 0x26, 0x69, 0xEC, 0x34, 0xB6, 0x9D, 0xC6, 0xB6, 0x6D, 0xDB, 0x36, 0x1B, 0xDB, 0x6C, 0xDC, 0xD8, 0xB6, 0xED, 0xA4, 0xB1, 0x6D, 0xDB, 0x77, 0xE7, 0xFA, 0xC7, 0xB7, 0xA3, 0x1D, 0xFB, 0x9C, 0xE7, 0xCC, 0xFB, 0x4C, 0xC2, 0x4E, 0xE2, 0x4A, 0xD2, 0x48, 0x72, 0x4F, 0xCA, 0x4C, 0xEA, 0x48, 0x5A, 0x4B, 0x7A, 0x4D, 0x46, 0x4F, 0x66, 0x4B, 0x56, 0x49, 0x76, 0x4E, 0x4E, 0x4D, 0x6E, 0x49, 0x5E, 0x4A, 0x7E, 0x4C, 0x41, 0x41, 0x61, 0x46, 0xF1, 0x97, 0xE2, 0x80, 0x92, 0x84, 0xD2, 0x98, 0xB2, 0x80, 0x72, 0x97, 0x8A, 0x88, 0xCA, 0x80, 0x2A, 0x97, 0x6A, 0x9B, 0x9A, 0x80, 0x5A, 0x97, 0xFA, 0x0F, 0xF5, 0x06, 0x0D, 0x1E, 0x8D, 0x36, 0x4D, 0x16, 0xCD, 0x1A, 0x2D, 0x0E, 0xAD, 0x16, 0x6D, 0x06, 0xED, 0x2A, 0x1D, 0x16, 0x9D, 0x06, 0x5D, 0x3A, 0xDD, 0x32, 0x3D, 0x26, 0xBD, 0x3A, 0x7D, 0x1A, 0xFD, 0x12, 0x03, 0x06, 0x83, 0x1A, 0x43, 0x2A, 0xC3, 0x12, 0x23, 0x3A, 0xA3, 0x2A, 0x63, 0x0A, 0xE3, 0x22, 0x13, 0x3A, 0x93, 0x2A, 0x53, 0x0A, 0xD3, 0x22, 0x33, 0x3A, 0xB3, 0x2A, 0x73, 0x0A, 0xF3, 0x12, 0x0B, 0x06, 0x8B, 0x1A, 0x4B, 0x2A, 0xCB, 0x12, 0x2B, 0x26, 0xAB, 0x3A, 0x6B, 0x1A, 0xEB, 0x32, 0x1B, 0x16, 0x9B, 0x06, 0x5B, 0x26, 0xDB, 0x2E, 0x3B, 0x25, 0xBB, 0x3D, 0x7B, 0x33, 0xFB, 0x27, 0x87, 0x08, 0x47, 0x14, 0xC7, 0x3C, 0x27, 0x36, 0xA7, 0x01, 0x67, 0x09, 0xE7, 0x15, 0x17, 0x3B, 0x97, 0x2F, 0xD7, 0x20, 0xF7, 0x37, 0x6E, 0x65, 0xEE, 0x4C, 0xEE, 0xBD, 0x5F, 0x54, 0xBF, 0x1C, 0x7F, 0xB5, 0xF1, 0x80, 0xF2, 0x48, 0xF0, 0xC4, 0xF1, 0x2C, 0xF3, 0x12, 0xF2, 0x9A, 0xF3, 0x56, 0xF3, 0x3E, 0xF1, 0xF1, 0xF1, 0x85, 0xF2, 0x4D, 0xF3, 0x63, 0xF0, 0xEB, 0xF1, 0x17, 0xF3, 0x5F, 0x09, 0x70, 0x08, 0xF8, 0x0B, 0x8C, 0x08, 0x22, 0x09, 0x6A, 0x08, 0xE6, 0x09, 0x9E, 0x08, 0x31, 0x09, 0x79, 0x0A, 0xF5, 0x0B, 0xC3, 0x0B, 0x2B, 0x0B, 0x67, 0x0B, 0x1F, 0x88, 0xD0, 0x89, 0xB8, 0x89, 0x74, 0x8B, 0xC2, 0x88, 0x2A, 0x88, 0x66, 0x88, 0xEE, 0x89, 0xD1, 0x88, 0xB9, 0x88, 0x75, 0x89, 0x43, 0x8B, 0xCB, 0x8B, 0xA7, 0x8B, 0xEF, 0x49, 0xD0, 0x48, 0xB8, 0x48, 0x74, 0x49, 0xC2, 0x48, 0x2A, 0x48, 0x66, 0x4A, 0xEE, 0x4B, 0xD1, 0x4A, 0xB9, 0x49, 0xF5, 0x4A, 0xC3, 0x49, 0x2B, 0x4B, 0x67, 0x4B, 0x1F, 0xC9, 0x30, 0xCA, 0x78, 0xC9, 0x0C, 0xCA, 0x7E, 0x97, 0x55, 0x97, 0xCD, 0x97, 0x3D, 0x97, 0x63, 0x93, 0xF3, 0x97, 0x1B, 0x93, 0x47, 0x93, 0xD7, 0x93, 0x2F, 0x95, 0xBF, 0x53, 0xE0, 0x55, 0x08, 0x53, 0x98, 0x53, 0xC4, 0x53, 0x34, 0x53, 0xAC, 0x53, 0x7C, 0x57, 0x12, 0x53, 0x8A, 0x57, 0x5A, 0x57, 0x26, 0x53, 0x76, 0x50, 0xEE, 0x50, 0x81, 0x52, 0x51, 0x50, 0xC9, 0x52, 0x39, 0x54, 0x65, 0x54, 0xF5, 0x52, 0x1D, 0x52, 0x43, 0x56, 0xD3, 0x52, 0xFB, 0xAB, 0x76, 0xA3, 0xCE, 0xAD, 0x1E, 0xA2, 0x3E, 0xAB, 0x81, 0xA3, 0x61, 0xAA, 0x51, 0xAB, 0xF1, 0xA6, 0x29, 0xAA, 0x19, 0xAF, 0xB9, 0xA6, 0x45, 0xA2, 0x65, 0xA6, 0x55, 0xAE, 0x75, 0xA5, 0xCD, 0xAC, 0xED, 0xA6, 0xDD, 0xAE, 0xFD, 0xA5, 0x23, 0xA4, 0x13, 0xAA, 0x33, 0xAE, 0x8B, 0xA8, 0xAB, 0xA4, 0x9B, 0xAA, 0xBB, 0xA6, 0x47, 0xA0, 0x67, 0xA4, 0x57, 0xAC, 0x77, 0xA6, 0x4F, 0xAF, 0xEF, 0xA4, 0xDF, 0xAC, 0xFF, 0x66, 0xC0, 0x67, 0x10, 0x6C, 0x30, 0x62, 0x88, 0x60, 0x28, 0x6F, 0x98, 0x64, 0xB8, 0x6C, 0x84, 0x6B, 0x64, 0x60, 0x54, 0x64, 0x74, 0x62, 0x4C, 0x6B, 0xEC, 0x60, 0xDC, 0x64, 0xFC, 0x6A, 0xC2, 0x6B, 0x12, 0x68, 0x32, 0x6C, 0x0A, 0x6F, 0x2A, 0x67, 0x9A, 0x68, 0xBA, 0x6C, 0x86, 0x6B, 0xA6, 0x6F, 0x56, 0x64, 0x76, 0x62, 0x4E, 0x6B, 0xEE, 0x60, 0xDE, 0x64, 0xFE, 0x6A, 0xC1, 0x6B, 0x11, 0x68, 0x31, 0x6C, 0x09, 0x6F, 0x29, 0x67, 0x99, 0x68, 0xB9, 0x6C, 0x85, 0x6B, 0xA5, 0x6F, 0x55, 0x68, 0x75, 0x6C, 0x4D, 0x6B, 0xED, 0x60, 0xDD, 0x68, 0xFD, 0x62, 0xC3, 0x6B, 0x13, 0x68, 0x33, 0x64, 0x0B, 0x67, 0x2B, 0x67, 0x9B, 0x68, 0xBB, 0x64, 0x87, 0x63, 0xA7, 0x67, 0x57, 0x68, 0x77, 0x6C, 0x4F, 0x63, 0x6F, 0x6F, 0xDF, 0x68, 0xFF, 0xE2, 0xC0, 0xE3, 0x10, 0xE0, 0x30, 0xE8, 0x08, 0xE7, 0x28, 0xEB, 0x98, 0xE0, 0xB8, 0xE8, 0x84, 0xE3, 0xA4, 0xE7, 0x54, 0xE0, 0x74, 0xE4, 0x4C, 0xE3, 0x6C, 0xEF, 0xDC, 0xE0, 0xFC, 0xE2, 0xC2, 0xE3, 0x12, 0xE0, 0x32, 0xE8, 0x0A, 0xE7, 0x2A, 0xEB, 0x9A, 0xE0, 0xBA, 0xE4, 0x86, 0xE3, 0xA6, 0xE7, 0x56, 0xE0, 0x76, 0xEC, 0x4E, 0xE3, 0x6E, 0xEF, 0xDE, 0xE8, 0xFE, 0xE2, 0xC1, 0xE3, 0x11, 0xE0, 0x31, 0xE4, 0x09, 0xE7, 0x29, 0xEB, 0x99, 0xE8, 0xB9, 0xE4, 0x85, 0xE3, 0xA5, 0xEF, 0x55, 0xE8, 0x75, 0xEC, 0x4D, 0xEB, 0xED, 0xE0, 0xDD, 0xE8, 0xFD, 0xEA, 0xC3, 0xE3, 0x13, 0xE0, 0x33, 0xE0, 0x0B, 0xED, 0x2B, 0xE5, 0x1B, 0xE3, 0x3B, 0xEB, 0x87, 0xEA, 0xA7, 0xEE, 0x97, 0xE9, 0xB7, 0xE9, 0x4F, 0xE4, 0x6F, 0xE2, 0x5F, 0xE2, 0x7F, 0x16, 0x40, 0x17, 0xE0, 0x18, 0xD0, 0x18, 0xF0, 0x1C, 0xC8, 0x1D, 0xE8, 0x1B, 0xD8, 0x1B, 0x04, 0x11, 0x24, 0x16, 0x14, 0x11, 0x34, 0x19, 0x8C, 0x18, 0xAC, 0x18, 0x9C, 0x1C, 0xBC, 0xFC, 0x1B, 0xE7, 0xB7, 0xEE, 0xEF, 0xDC, 0xDF, 0x7B, 0x21, 0x64, 0x21, 0xE6, 0x21, 0xE5, 0x21, 0x97, 0xA1, 0x0C, 0xA1, 0x4E, 0xA1, 0x8D, 0xA1, 0xCF, 0x61, 0x5C, 0x61, 0x3E, 0x61, 0xDD, 0xE1, 0x60, 0xE1, 0xC2, 0xE1, 0x21, 0xE1, 0xA3, 0x11, 0xF0, 0x11, 0x32, 0x11, 0xB1, 0x11, 0x73, 0x91, 0xA8, 0x91, 0xAA, 0x91, 0x69, 0x91, 0xAB, 0x51, 0xB8, 0x51, 0x7A, 0x51, 0x79, 0x51, 0x7B, 0xD1, 0xA4, 0xD1, 0x66, 0xD1, 0xA5, 0xD1, 0x67, 0x31, 0xB4, 0x31, 0xB6, 0x31, 0x35, 0x31, 0xB7, 0xB1, 0x2C, 0xB1, 0xAE, 0xB1, 0x2D, 0xB1, 0x2F, 0x71, 0xDC, 0x71, 0x3E, 0x71, 0x5D, 0xF1, 0x20, 0xF1, 0x82, 0xF1, 0x41, 0xF1, 0x83, 0x09, 0x50, 0x09, 0xE2, 0x09, 0xE1, 0x09, 0xE3, 0x89, 0x08, 0x89, 0x32, 0x89, 0xB1, 0x89, 0x33, 0x49, 0xC8, 0x49, 0x4A, 0x49, 0x49, 0x49, 0x0B, 0xC9, 0xE8, 0xC9, 0xEA, 0xC9, 0xE9, 0xC9, 0xAB, 0x29, 0x38, 0x29, 0xDA, 0x29, 0xD9, 0x29, 0x9B, 0xA9, 0x04, 0xA9, 0xFA, 0xA9, 0x79, 0xA9, 0xBB, 0x69, 0x44, 0x69, 0x46, 0x69, 0x85, 0x69, 0x07, 0xE9, 0x64, 0xE9, 0xA6, 0xE9, 0xC5, 0xE9, 0xC7, 0x19, 0x14, 0x19, 0x16, 0x19, 0xA5, 0x19, 0xA7, 0x99, 0x54, 0x99, 0x56, 0x99, 0xE5, 0x99, 0xE7, 0x59, 0x34, 0x59, 0x36, 0x59, 0x95, 0x59, 0x17, 0xD9, 0x74, 0xD9, 0xB6, 0xD9, 0x55, 0xD9, 0x57, 0x7F, 0x98, 0xFE, 0xB8, 0xFF, 0xE9, 0xCC, 0x01, 0xCF, 0x91, 0xC8, 0x89, 0xC9, 0x99, 0xCF, 0xC5, 0xCA, 0xD5, 0xCD, 0x2D, 0xCC, 0x3D, 0xC9, 0xA3, 0xCB, 0x73, 0xCE, 0x6B, 0xCD, 0xFB, 0xCC, 0x17, 0xCE, 0x0F, 0xCF, 0x9F, 0x2A, 0x40, 0x29, 0x50, 0x2F, 0xF8, 0x53, 0xB0, 0x57, 0x48, 0x51, 0x68, 0x53, 0x58, 0x57, 0xF8, 0x54, 0xF4, 0xAB, 0x28, 0xA0, 0x68, 0xE8, 0x2F, 0xFC, 0x5F, 0xF9, 0xBF, 0xC9, 0x7F, 0x57, 0x8B, 0xF1, 0x8B, 0x8D, 0x8A, 0x4B, 0x8A, 0x2F, 0x4A, 0x98, 0x4A, 0x5C, 0x4B, 0xDA, 0x4B, 0x41, 0x4A, 0x85, 0x4B, 0xC3, 0x4B, 0xA7, 0xCA, 0x7E, 0x94, 0xA9, 0x95, 0x65, 0x96, 0x6D, 0x97, 0x93, 0x94, 0x5B, 0x94, 0x57, 0x96, 0xDF, 0x56, 0xB0, 0x55, 0x78, 0x55, 0x74, 0x57, 0x42, 0x54, 0x8A, 0x57, 0x46, 0x57, 0xCE, 0x56, 0xA1, 0x57, 0x69, 0x56, 0xE5, 0x54, 0xED, 0x55, 0x53, 0x54, 0x5B, 0x57, 0xD7, 0x56, 0x3F, 0xD4, 0x70, 0xD5, 0xF8, 0xD6, 0xF4, 0xD7, 0x42, 0xD7, 0x4A, 0xD7, 0xC6, 0xD5, 0x2E, 0xD4, 0x61, 0xD5, 0xE9, 0xD6, 0xE5, 0xD7, 0x1D, 0xD5, 0xD3, 0xD4, 0xDB, 0xD7, 0x37, 0xD6, 0xBF, 0x34, 0xF0, 0x36, 0x04, 0x36, 0x0C, 0x37, 0xC2, 0x37, 0xCA, 0x37, 0x26, 0x35, 0xAE, 0x34, 0xE1, 0x37, 0x19, 0x36, 0x15, 0x37, 0x9D, 0x35, 0x33, 0x34, 0xBB, 0x34, 0xB7, 0x36, 0x7F, 0xB6, 0x08, 0xB6, 0x84, 0xB6, 0x4C, 0xB4, 0x22, 0xB5, 0xAA, 0xB4, 0x66, 0xB4, 0x6E, 0xB5, 0x11, 0xB7, 0x99, 0xB7, 0x55, 0xB6, 0xDD, 0xB4, 0xB3, 0xB5, 0x7B, 0xB5, 0xF7, 0x74, 0x40, 0x76, 0x48, 0x74, 0xC4, 0x74, 0xCC, 0x77, 0x62, 0x76, 0xEA, 0x74, 0xE6, 0x75, 0x1E, 0x76, 0x51, 0x77, 0xD9, 0x77, 0x35, 0x76, 0xBD, 0x76, 0xF3, 0x75, 0x07, 0x77, 0x8F, 0xF6, 0x7C, 0xEB, 0x51, 0xEA, 0xC9, 0xE8, 0xD9, 0xEB, 0xA5, 0xE9, 0x75, 0xE9, 0xED, 0xEA, 0x83, 0xEA, 0x93, 0xEB, 0x4B, 0xEB, 0xDB, 0xE9, 0xA7, 0xEA, 0x77, 0xEA, 0xEF, 0x18, 0x80, 0x1C, 0x90, 0x1D, 0x48, 0x1D, 0xD8, 0x1E, 0xA4, 0x1C, 0x74, 0x1C, 0x6C, 0x1F, 0x82, 0x18, 0x92, 0x19, 0x4A, 0x19, 0xDA, 0x1A, 0xA6, 0x18, 0x76, 0x18, 0x6E, 0x1B, 0x01, 0x1F, 0x91, 0x19, 0x49, 0x19, 0xD9, 0x1A, 0xA5, 0x18, 0x75, 0x18, 0x6D, 0x1B, 0x83, 0x18, 0x93, 0x19, 0x4B, 0x19, 0xDB, 0x1A, 0xA7, 0x18, 0x77, 0x1C, 0x6F, 0x9F, 0x80, 0x98, 0x90, 0x99, 0x48, 0x9D, 0xD8, 0x9E, 0xA4, 0x9C, 0x74, 0x9C, 0xEC, 0x98, 0x82, 0x9C, 0x92, 0x9D, 0x4A, 0x9D, 0xDA, 0x99, 0xA6, 0x9A, 0x76, 0x9A, 0xEE, 0x98, 0x81, 0x9A, 0x91, 0x9B, 0x49, 0x9B, 0xD9, 0x99, 0xA5, 0x9A, 0x75, 0x9E, 0xED, 0x9C, 0x83, 0x9A, 0x93, 0x9B, 0x4B, 0x9B, 0xDB, 0x99, 0xA7, 0x9E, 0x77, 0x9E, 0xEF, 0xFC, 0x07, 0xF5, 0x4F, 0xEE, 0x5F, 0xDA, 0xBF, 0x9D, 0x05, 0xEA, 0x05, 0xE7, 0x85, 0xCE, 0x45, 0xA8, 0x45, 0xB9, 0xC5, 0xB4, 0xC5, 0x9D, 0x25, 0xAA, 0x25, 0xA7, 0xA5, 0x8E, 0x65, 0xA8, 0x65, 0xB9, 0xE5, 0xB4, 0xE5, 0x9D, 0x15, 0xAA, 0x15, 0xA7, 0x95, 0x8E, 0x55, 0xC8, 0x55, 0xD9, 0xD5, 0xB4, 0xD5, 0x9D, 0x35, 0xAA, 0x35, 0xA7, 0xB5, 0x8E, 0x75, 0xC8, 0x75, 0xD9, 0xF5, 0xD4, 0xF5, 0xED, 0x0D, 0xAA, 0x0D, 0xA7, 0x8D, 0x8E, 0x4D, 0xC8, 0x4D, 0xD9, 0xCD, 0xD4, 0xCD, 0xED, 0x2D, 0xCA, 0x2D, 0xC7, 0xAD, 0xF6, 0x6D, 0xC8, 0x6D, 0xD9, 0xED, 0xD4, 0xED, 0xED, 0x1D, 0xCA, 0x1D, 0xC7, 0x9D, 0xF6, 0x5D, 0x88, 0x5D, 0x99, 0xDD, 0x94, 0xDD, 0xED, 0x3D, 0xCA, 0x3D, 0xC7, 0xBD, 0xF6, 0x7D, 0x88, 0x7D, 0x99, 0xFD, 0x94, 0xFD, 0xF5, 0x03, 0xCC, 0x03, 0xD9, 0x83, 0xE0, 0x83, 0xB6, 0x83, 0xAB, 0x43, 0xD2, 0x43, 0xAD, 0xC3, 0xF8, 0xC3, 0xE1, 0xC3, 0x8F, 0x23, 0xE6, 0x23, 0x8B, 0xA3, 0x9C, 0xA3, 0x85, 0x63, 0xF8, 0x63, 0x81, 0x63, 0xB7, 0xE3, 0xCA, 0xE3, 0xBD, 0x13, 0xCC, 0x13, 0xD9, 0x93, 0xE0, 0x93, 0xB6, 0x93, 0xEB, 0x53, 0xB2, 0x53, 0xED, 0xD3, 0xC4, 0xD3, 0xD1, 0xD3, 0xAF, 0x33, 0xD6, 0x33, 0xAB, 0xB3, 0xBC, 0xB3, 0xA5, 0xF3, 0x6F, 0xE7, 0x42, 0xE7, 0x1E, 0xE7, 0xD5, 0xE7, 0x07, 0x17, 0x38, 0x17, 0x0A, 0x17, 0xA1, 0x17, 0x5D, 0x17, 0xF7, 0x97, 0x54, 0x97, 0xFA, 0x97, 0x29, 0x97, 0x13, 0x57, 0x60, 0x57, 0x1C, 0x57, 0x76, 0x57, 0x45, 0x57, 0x6B, 0xD7, 0xC8, 0xD7, 0x62, 0xD7, 0x3E, 0xD7, 0xF5, 0xD7, 0xA7, 0x37, 0x84, 0x37, 0xAA, 0x37, 0x51, 0x37, 0x7D, 0x37, 0x2F, 0xB7, 0xF4, 0xB7, 0x26, 0xB7, 0x99, 0xB7, 0x73, 0x77, 0x30, 0x77, 0xBC, 0x77, 0xCE, 0x77, 0xE5, 0x77, 0x3B, 0xF7, 0x18, 0xF7, 0x32, 0xF7, 0xC1, 0xF7, 0x6D, 0xF7, 0xD7, 0x0F, 0x64, 0x0F, 0x3A, 0x0F, 0x89, 0x0F, 0xA3, 0x8F, 0x20, 0x8F, 0x6C, 0x8F, 0xD6, 0x8F, 0x05, 0x8F, 0x2B, 0x4F, 0x88, 0x4F, 0xA2, 0x4F, 0xDE, 0x4F, 0x75, 0x4F, 0x27, 0xCF, 0x04, 0xCF, 0xAA, 0xCF, 0x51, 0xCF, 0x7D, 0xCF, 0x2F, 0x2F, 0xF4, 0x2F, 0xA6, 0x2F, 0x59, 0x2F, 0x73, 0xAF, 0xB0, 0xAF, 0x7C, 0xAF, 0xAE, 0xAF, 0x15, 0xAF, 0x7B, 0x6F, 0x58, 0x6F, 0x72, 0x6F, 0x21, 0x6F, 0x1D, 0x6F, 0x77, 0xEF, 0x94, 0xEF, 0xFA, 0xEF, 0x29, 0xEF, 0x93, 0x1F, 0xE0, 0x1F, 0x5C, 0x1F, 0xF6, 0x1F, 0xC5, 0x1F, 0x1B, 0x9F, 0xA8, 0x9F, 0x92, 0x9F, 0x01, 0x9F, 0x2D, 0x9F, 0x97, 0x5F, 0xA4, 0x5F, 0x5A, 0x5F, 0x09, 0x5F, 0xFF, 0xAB, 0x20, 0xB2, 0x80, 0x98, 0x83, 0x64, 0x83, 0xCC, 0x82, 0x42, 0x82, 0x72, 0x82, 0xDA, 0x80, 0xE6, 0x83, 0x2E, 0x82, 0xC1, 0x81, 0xF1, 0x82, 0x39, 0x82, 0x15, 0x83, 0xAD, 0x81, 0x23, 0x82, 0x0B, 0x81, 0xBB, 0x83, 0x57, 0x80, 0x6F, 0x43, 0xA0, 0x41, 0x48, 0x40, 0xF8, 0x40, 0xD4, 0x42, 0x1C, 0x42, 0x62, 0x43, 0xCA, 0x42, 0x06, 0x41, 0x36, 0x43, 0x9E, 0x41, 0x11, 0x42, 0x29, 0x43, 0x85, 0x41, 0x75, 0x42, 0xDD, 0x40, 0x93, 0x41, 0x6B, 0x42, 0xC7, 0x40, 0xF7, 0x43, 0x3F, 0xC1, 0xD0, 0xC0, 0xE8, 0xC3, 0x24, 0xC1, 0x8C, 0xC2, 0x7C, 0xC0, 0x32, 0xC1, 0x9A, 0xC2, 0x66, 0xC2, 0x4E, 0xC3, 0x41, 0xC0, 0x71, 0xC0, 0x59, 0xC3, 0xE5, 0xC1, 0x2D, 0xC0, 0xC3, 0xC1, 0xF3, 0xC2, 0x3B, 0xC1, 0x17, 0xC3, 0xAF, 0x23, 0x20, 0x23, 0x88, 0x20, 0x78, 0x22, 0x54, 0x21, 0xEC, 0x7D, 0xC3, 0xF8, 0x26, 0xFD, 0xCD, 0xFF, 0x5B, 0xE3, 0xB7, 0xD3, 0xEF, 0xF8, 0xDF, 0x95, 0xBE, 0x87, 0x7E, 0xEF, 0xF8, 0x7E, 0x83, 0x48, 0x8A, 0xA8, 0x89, 0x18, 0x8B, 0xD8, 0x8F, 0xF8, 0x8C, 0x44, 0x83, 0x64, 0x80, 0x94, 0x82, 0x34, 0x86, 0xF4, 0x85, 0xCC, 0x82, 0x6C, 0x81, 0x9C, 0x8D, 0x3C, 0xF7, 0x03, 0xFA, 0x07, 0xF7, 0x0F, 0xFB, 0x1F, 0x45, 0x00, 0xE5, 0xBF, 0xA3, 0x08, 0xA1, 0xB8, 0xA3, 0x54, 0xA0, 0xEC, 0xA0, 0xA2, 0x03, 0x8C, 0xF7, 0x47, 0x6D, 0x40, 0x3D, 0x41, 0xC3, 0x47, 0x53, 0x42, 0x0B, 0x45, 0xEB, 0x40, 0xBB, 0x41, 0x27, 0x43, 0xD7, 0x42, 0x8F, 0x43, 0x1F, 0x40, 0x7F, 0xC1, 0xA0, 0xC3, 0x30, 0xC2, 0x48, 0xC3, 0x98, 0xC4, 0x04, 0xC3, 0x64, 0xC7, 0xB4, 0xC2, 0xCC, 0xC5, 0x5C, 0xC0, 0x82, 0xC3, 0xE2, 0xC3, 0x72, 0xC6, 0x2A, 0xC5, 0xDA, 0xC4, 0x46, 0xC1, 0x96, 0xC0, 0x0E, 0xC5, 0x1E, 0xC0, 0x01, 0xC3, 0xE1, 0xC7, 0xF1, 0xC5, 0x69, 0xC7, 0x79, 0xC1, 0x65, 0xC7, 0x75, 0xC1, 0xAD, 0xC3, 0xBD, 0xC6, 0xA3, 0xC3, 0xB3, 0xC6, 0x2B, 0xC3, 0x3B, 0xC6, 0x27, 0xC5, 0x37, 0xC2, 0xCF, 0xC3, 0xDF, 0x22, 0xC0, 0x23, 0xD0, 0x22, 0x48, 0x27, 0x58, 0x22, 0x44, 0x23, 0x54, 0x24, 0x8C, 0x23, 0x9C, 0xFA, 0x89, 0xF0, 0x53, 0xF2, 0x67, 0xD8, 0xCF, 0x21, 0x22, 0x48, 0x22, 0x21, 0xA2, 0x00, 0xA2, 0x6E, 0xA2, 0x0F, 0x80, 0xF2, 0x1E, 0xC4, 0xCD, 0xC4, 0x8F, 0x24, 0x2C, 0x24, 0x8E, 0x24, 0x35, 0x24, 0x97, 0xA4, 0xB4, 0xA4, 0x56, 0xA4, 0xA5, 0xA4, 0xC7, 0x64, 0x64, 0x64, 0xC6, 0x64, 0x05, 0x64, 0x3B, 0xE4, 0x04, 0xE4, 0xBA, 0xE4, 0x59, 0xE4, 0x6B, 0x14, 0x58, 0x14, 0x6A, 0x14, 0x29, 0x14, 0xFF, 0x28, 0x51, 0x28, 0x15, 0x28, 0xE3, 0x28, 0xA7, 0xA8, 0xBE, 0x51, 0x49, 0x51, 0x45, 0x50, 0x8D, 0x50, 0x43, 0x53, 0x8B, 0x52, 0x07, 0x53, 0xF7, 0xD3, 0x80, 0xD2, 0xF0, 0xD3, 0xF8, 0xD1, 0x74, 0xD2, 0xBC, 0xD3, 0x72, 0xD3, 0x7A, 0xD0, 0xB6, 0xD0, 0x3E, 0xD1, 0xB1, 0xD1, 0x39, 0xD3, 0xD5, 0xD3, 0xDD, 0xD2, 0x33, 0xD2, 0xDB, 0xD1, 0x57, 0xD1, 0x5F, 0x30, 0xD0, 0x30, 0x58, 0x31, 0x94, 0x31, 0x1C, 0x33, 0x92, 0x33, 0x9A, 0x32, 0x16, 0x31, 0xEE, 0x33, 0x11, 0x33, 0x19, 0x32, 0xE5, 0x31, 0x6D, 0x33, 0x13, 0x30, 0xEB, 0x32, 0x67, 0x33, 0xAF, 0xB3, 0xE0, 0xB0, 0x68, 0xB2, 0xA4, 0xB3, 0x2C, 0xB3, 0x62, 0xB0, 0xAA, 0xB2, 0x26, 0xB3, 0x2E, 0xB0, 0xA1, 0xB2, 0x29, 0xB1, 0x25, 0xB0, 0xCD, 0xB2, 0x23, 0xB3, 0xCB, 0xB3, 0xC7, 0xB2, 0x4F, 0x71, 0x7C, 0xE7, 0x90, 0x01, 0x48, 0x3F, 0xCE, 0x09, 0xCF, 0x29, 0xC9, 0x19, 0xCE, 0x39, 0xCC, 0x05, 0xC9, 0x25, 0xC4, 0x15, 0xC0, 0xD5, 0xCD, 0xF5, 0xCE, 0xCD, 0xC5, 0xED, 0xCE, 0xDD, 0xC4, 0x7D, 0xFF, 0x8B, 0xE9, 0x97, 0xFD, 0xAF, 0xAA, 0x5F, 0xE7, 0x3C, 0x54, 0x3C, 0xE6, 0x3C, 0x7F, 0x79, 0xF6, 0x79, 0x89, 0x78, 0x0D, 0x78, 0x73, 0x78, 0x37, 0xF8, 0x70, 0xF8, 0x34, 0xF8, 0x52, 0xF9, 0x16, 0xF8, 0x51, 0xF9, 0x15, 0xF9, 0xE3, 0xF8, 0xA7, 0x04, 0x10, 0x04, 0xA4, 0x04, 0xC2, 0x05, 0x86, 0x05, 0x21, 0x05, 0x85, 0x05, 0x03, 0x05, 0x7B, 0x04, 0xBF, 0x84, 0x78, 0x84, 0xBC, 0x84, 0xDA, 0x84, 0x9E, 0x85, 0xD9, 0x84, 0x5D, 0x84, 0xEB, 0x85, 0x6F, 0x45, 0x18, 0x44, 0xEC, 0x44, 0x2A, 0x45, 0xCE, 0x45, 0xA9, 0x44, 0x2D, 0x44, 0x8B, 0x45, 0x0F, 0xC5, 0x48, 0xC4, 0x8C, 0xC4, 0xF2, 0xC4, 0xB6, 0xC5, 0x09, 0xC4, 0x75, 0xC4, 0xB3, 0xC4, 0x57, 0x25, 0xB0, 0x24, 0xD4, 0x25, 0x52, 0x24, 0x16, 0x24, 0x51, 0x25, 0x15, 0x25, 0xE3, 0x25, 0x67, 0xA4, 0x10, 0xA5, 0x64, 0xA4, 0xA2, 0xA4, 0xC6, 0x01, 0xFE, 0x8B, 0x4B, 0x87, 0x4A, 0x0F, 0xC9, 0x40, 0xCA, 0x08, 0xCB, 0x04, 0xC9, 0xF4, 0xC9, 0x82, 0xCA, 0xF2, 0xC9, 0xFA, 0xCA, 0x76, 0xCA, 0xBE, 0xCB, 0x71, 0xCB, 0x79, 0xCA, 0xB5, 0xCA, 0x3D, 0xCB, 0x73, 0xC8, 0xBB, 0xC9, 0x37, 0xC9, 0x3F, 0x28, 0xB0, 0x28, 0x38, 0x29, 0xD4, 0x29, 0xDC, 0x28, 0x32, 0x2A, 0xDA, 0x2B, 0x56, 0x2B, 0x5E, 0x2A, 0xD1, 0x2A, 0xD9, 0x28, 0x55, 0x28, 0x9D, 0x29, 0x53, 0x29, 0x5B, 0x2A, 0x97, 0x2A, 0x1F, 0xAB, 0x50, 0xA8, 0x98, 0xA9, 0x14, 0x03, 0x2E, 0x40, 0xAA, 0x6A, 0xA2, 0x5A, 0xA8, 0xBA, 0xAF, 0x46, 0xAC, 0x66, 0xA4, 0x96, 0xAF, 0xB6, 0xAB, 0xFE, 0x53, 0xDD, 0x40, 0x3D, 0x57, 0x7D, 0x13, 0xF0, 0x01, 0x35, 0x8D, 0x44, 0x8D, 0x69, 0x4D, 0x04, 0x4D, 0x71, 0xCD, 0x60, 0xCD, 0x1E, 0xCD, 0x77, 0x2D, 0x0E, 0x2D, 0x67, 0xAD, 0x1A, 0xAD, 0x73, 0x6D, 0x0A, 0x6D, 0x63, 0xED, 0x5C, 0xED, 0x75, 0x1D, 0x4C, 0x1D, 0x65, 0x9D, 0x38, 0x9D, 0x09, 0x5D, 0x68, 0x5D, 0x21, 0x5D, 0x3F, 0xDD, 0x76, 0xDD, 0x47, 0x3D, 0x26, 0x3D, 0x5B, 0xBD, 0x52, 0xBD, 0x03, 0x7D, 0x42, 0x7D, 0x6D, 0xFD, 0x34, 0xFD, 0x79, 0x03, 0x44, 0x03, 0x49, 0x83, 0xDF, 0x06, 0xBD, 0x06, 0xEF, 0x86, 0x1C, 0x86, 0x4E, 0x86, 0x55, 0x86, 0xA7, 0x46, 0xA4, 0x46, 0xFA, 0x46, 0x59, 0x46, 0x4B, 0xC6, 0x3F, 0x8C, 0x65, 0x8C, 0xC3, 0x8C, 0x07, 0x8C, 0xBF, 0x4C, 0xB8, 0x4C, 0x5C, 0x4C, 0x6A, 0x4C, 0xCE, 0x4C, 0xC9, 0x4C, 0x0D, 0x4D, 0xB3, 0x01, 0x3F, 0x40, 0x31, 0x93, 0x35, 0x0B, 0x37, 0x1B, 0x30, 0xFB, 0x32, 0xE7, 0x34, 0x77, 0x36, 0xAF, 0x36, 0x3F, 0xB5, 0x20, 0xB5, 0xD0, 0xB7, 0xC8, 0xB4, 0x58, 0xB4, 0x44, 0xB2, 0x94, 0xB2, 0x0C, 0xB1, 0xEC, 0xB5, 0x7C, 0xB3, 0x62, 0xB3, 0x72, 0xB0, 0xAA, 0xB0, 0x3A, 0xB4, 0xFE, 0x69, 0xAD, 0x6D, 0x9D, 0x62, 0x3D, 0x6B, 0x03, 0x6F, 0x23, 0x6A, 0xE3, 0x6F, 0xD3, 0x6E, 0xF3, 0x60, 0xCB, 0x60, 0x6B, 0x69, 0x5B, 0x64, 0xBB, 0x65, 0x87, 0x6D, 0xA7, 0x6C, 0x17, 0x63, 0x37, 0x6A, 0x0F, 0x6E, 0xCF, 0x6B, 0xEF, 0x6E, 0x5F, 0x67, 0x7F, 0xE1, 0x40, 0xEE, 0x60, 0xE0, 0x90, 0xE9, 0xB0, 0xE8, 0x88, 0xE4, 0x28, 0xE9, 0x18, 0xEC, 0xD8, 0xE5, 0xF8, 0xEC, 0xC4, 0xEC, 0x64, 0xE3, 0x54, 0xEC, 0xB4, 0xE3, 0x8C, 0xE3, 0xAC, 0xE2, 0x1C, 0xEB, 0x3C, 0xEA, 0x02, 0x0E, 0x18, 0x83, 0x9B, 0x4B, 0xAD, 0xCB, 0xA9, 0x2B, 0xA9, 0xAB, 0x81, 0x6B, 0x9E, 0xEB, 0x8E, 0xDB, 0x4F, 0x37, 0x03, 0xB7, 0x5C, 0xB7, 0x6D, 0x77, 0x42, 0x77, 0x3D, 0xF7, 0x1C, 0xF7, 0x2D, 0x0F, 0x7C, 0x0F, 0x5D, 0x8F, 0x3F, 0x1E, 0x1B, 0x9E, 0x78, 0x9E, 0xDA, 0x9E, 0x59, 0x9E, 0x6B, 0x5E, 0xD8, 0x5E, 0x9A, 0x5E, 0xE9, 0x5E, 0xCB, 0xDE, 0x98, 0xDE, 0x6A, 0xDE, 0x29, 0xDE, 0x0B, 0x3E, 0x68, 0x3E, 0xCA, 0x3E, 0x89, 0x3E, 0x73, 0xBE, 0xC8, 0xBE, 0xF2, 0xBE, 0xB1, 0xBE, 0x53, 0x7E, 0xDF, 0xFC, 0xA4, 0xFD, 0x22, 0xFD, 0xC6, 0xFC, 0x61, 0xFD, 0xC5, 0xFD, 0x43, 0xFD, 0x87, 0x02, 0x20, 0x02, 0x84, 0x02, 0x02, 0x03, 0x7A, 0x03, 0xBE, 0x02, 0x79, 0x03, 0x7D, 0x02, 0xDB, 0x03, 0x5F, 0x83, 0x38, 0x83, 0xDC, 0x82, 0x9A, 0x82, 0xEE, 0x83, 0x99, 0x83, 0x1D, 0x82, 0xAB, 0x83, 0x2F, 0x7F, 0xD3, 0xFC, 0xB6, 0xFC, 0x5D, 0xFA, 0xFB, 0x28, 0x84, 0x34, 0xC4, 0x28, 0x24, 0x3F, 0x64, 0x3B, 0x14, 0x3F, 0x54, 0x3B, 0x34, 0x23, 0x74, 0x39, 0x0C, 0x3D, 0x4C, 0x39, 0x2C, 0x21, 0x6C, 0x3A, 0xFC, 0x5B, 0xB8, 0x54, 0x78, 0x78, 0xF8, 0x50, 0x04, 0x44, 0x84, 0x60, 0x84, 0x5F, 0x44, 0x67, 0xC4, 0x5B, 0x24, 0x47, 0xA4, 0x6B, 0x64, 0x7D, 0xE4, 0x75, 0x14, 0x5D, 0x94, 0x55, 0x54, 0x69, 0xD4, 0x61, 0x34, 0x71, 0xB4, 0x7E, 0x74, 0x76, 0xF4, 0x5A, 0x0C, 0x66, 0x8C, 0x4A, 0x4C, 0x42, 0xCC, 0x74, 0x2C, 0x42, 0xAC, 0x44, 0x6C, 0x48, 0x6C, 0x7F, 0x1C, 0x48, 0xDC, 0xAF, 0x38, 0x8F, 0xB8, 0xA6, 0xB8, 0xBB, 0x78, 0x86, 0x78, 0xEB, 0xF8, 0xD2, 0xF8, 0x83, 0x04, 0xA2, 0x04, 0xBD, 0x84, 0xCC, 0x84, 0xE5, 0x44, 0xD4, 0x44, 0x85, 0xC4, 0xE8, 0xC4, 0xD1, 0x24, 0xA8, 0x24, 0xC1, 0x24, 0xDF, 0xA4, 0xF6, 0xA4, 0xA7, 0x64, 0x96, 0x64, 0xB7, 0xE4, 0xEE, 0x14, 0x98, 0x14, 0xF9, 0x94, 0xB4, 0x94, 0xED, 0x54, 0xCA, 0x54, 0x87, 0xD4, 0xD6, 0x34, 0xD0, 0x34, 0x89, 0xB4, 0xF8, 0xB4, 0x95, 0xF4, 0x9F, 0xE9, 0x16, 0xE9, 0xB5, 0xE9, 0x2F, 0x19, 0xFC, 0x19, 0x61, 0x19, 0x33, 0x99, 0x98, 0x99, 0x7A, 0x99, 0xC5, 0x99, 0x57, 0x59, 0x6C, 0x59, 0xBE, 0x59, 0x43, 0xD9, 0xDF, 0xB2, 0x55, 0xB2, 0xB3, 0xB2, 0xF7, 0xFE, 0x50, 0xFF, 0x71, 0xFC, 0xD3, 0x96, 0x03, 0x9A, 0x23, 0x9E, 0x13, 0x97, 0xB3, 0x94, 0x8B, 0x9F, 0x6B, 0x92, 0x5B, 0x91, 0x7B, 0x9F, 0xC7, 0x9D, 0x17, 0x98, 0x37, 0x9A, 0x8F, 0x94, 0xAF, 0x96, 0xFF, 0x27, 0xFF, 0xA0, 0x80, 0xA6, 0xC0, 0xA9, 0xA0, 0xAD, 0x10, 0xB4, 0x50, 0xBC, 0x30, 0xB6, 0x70, 0xA1, 0x08, 0xB7, 0xC8, 0xA8, 0xA8, 0xAC, 0xE8, 0xE6, 0x2F, 0xC7, 0x5F, 0xDF, 0xBF, 0x83, 0xC5, 0x08, 0xC5, 0x4A, 0xC5, 0xE9, 0xC5, 0xDB, 0x25, 0xE4, 0x25, 0x36, 0x25, 0x0D, 0x25, 0xAF, 0xA5, 0x02, 0xA5, 0x61, 0x80, 0x3B, 0xA0, 0x95, 0x69, 0x95, 0xE5, 0x97, 0x1D, 0x97, 0xD3, 0x97, 0xBB, 0x94, 0xB7, 0x57, 0x80, 0x55, 0x88, 0x57, 0xC4, 0x54, 0x2C, 0x54, 0xE2, 0x54, 0x1A, 0x56, 0x96, 0x54, 0x5E, 0x56, 0xB1, 0x56, 0x79, 0x55, 0xF5, 0x55, 0xC3, 0x56, 0xCB, 0x55, 0xA7, 0x54, 0xAF, 0xD7, 0x10, 0xD7, 0x58, 0xD6, 0xD4, 0xD4, 0x3C, 0xD5, 0xF2, 0xD6, 0xFE, 0xAE, 0x1D, 0xAF, 0xFB, 0x51, 0xA7, 0x51, 0x97, 0x0B, 0x98, 0x03, 0x5D, 0xBD, 0x4B, 0x7D, 0x47, 0x03, 0x78, 0x83, 0x64, 0x43, 0x7C, 0xC3, 0x72, 0x23, 0x41, 0xA3, 0x69, 0x63, 0x65, 0xE3, 0x7D, 0x13, 0x77, 0x53, 0x50, 0xD3, 0x58, 0x33, 0x72, 0xB3, 0x7A, 0x73, 0x6E, 0xF3, 0x51, 0x0B, 0x5D, 0x8B, 0x6B, 0x4B, 0x57, 0x2B, 0x42, 0xAB, 0x4E, 0x6B, 0x75, 0x1B, 0x48, 0x9B, 0x42, 0x5B, 0x41, 0xDB, 0x7D, 0xBB, 0x68, 0x7B, 0x6A, 0xFB, 0x49, 0x07, 0x57, 0x47, 0x54, 0xC7, 0x46, 0x27, 0x7D, 0x67, 0x40, 0xE7, 0x5C, 0x17, 0x49, 0x97, 0x6B, 0xD7, 0x70, 0x37, 0x56, 0xB7, 0x55, 0x77, 0x67, 0x0F, 0x62, 0x8F, 0x41, 0x4F, 0x7D, 0x2F, 0x44, 0xAF, 0x6A, 0x6F, 0x49, 0xEF, 0x6B, 0x9F, 0x4C, 0x5F, 0x4E, 0xDF, 0x4D, 0xBF, 0x50, 0x7F, 0x72, 0xFF, 0xD1, 0x00, 0xE7, 0x40, 0xD4, 0xC0, 0xE6, 0x20, 0xC3, 0x60, 0xD0, 0xE0, 0xC2, 0x10, 0xF9, 0x90, 0xE7, 0xD0, 0xC4, 0x30, 0x01, 0x60, 0x0A, 0x03, 0x23, 0xE8, 0x23, 0x16, 0x23, 0xED, 0xA3, 0xDF, 0x47, 0x0D, 0x46, 0xEB, 0xC7, 0xA0, 0xC6, 0x34, 0xC6, 0x2A, 0xC6, 0x3E, 0xC7, 0x15, 0xC6, 0x0B, 0xC7, 0x9F, 0x26, 0x24, 0x27, 0xB2, 0x27, 0xAE, 0x27, 0x85, 0x26, 0x53, 0x26, 0x4F, 0xA6, 0x7E, 0x4D, 0xC5, 0x4D, 0xED, 0x4D, 0xB3, 0x4D, 0x87, 0x4F, 0x6F, 0xCC, 0x30, 0xCC, 0x04, 0xCD, 0x2C, 0x02, 0x86, 0xE0, 0x33, 0x3B, 0x3B, 0x47, 0x32, 0xE7, 0x3E, 0x37, 0x3E, 0x4F, 0x30, 0xEF, 0x38, 0x3F, 0xF4, 0x0F, 0xEB, 0x9F, 0xCD, 0xBF, 0xDE, 0x05, 0xD4, 0x05, 0xF3, 0x85, 0x8E, 0x45, 0xC4, 0x45, 0xA3, 0xC5, 0xE6, 0x25, 0xF8, 0x25, 0xBD, 0xA5, 0x7A, 0xC0, 0x0D, 0x34, 0x97, 0xAB, 0x56, 0xC0, 0x56, 0x54, 0x57, 0xCA, 0x56, 0x3E, 0x57, 0x15, 0x57, 0xFF, 0xAE, 0xBE, 0xAE, 0xC9, 0xAE, 0x15, 0xAC, 0x3D, 0xAD, 0x4B, 0xAD, 0xE7, 0xAC, 0xDF, 0x6D, 0x88, 0x6F, 0x64, 0x6D, 0x5C, 0x6F, 0x8A, 0x6C, 0xA6, 0x6F, 0x5E, 0x6C, 0x09, 0x6E, 0xA5, 0x6C, 0x9D, 0x6D, 0xF3, 0x6D, 0x27, 0x6D, 0x9F, 0xEC, 0xF0, 0xEC, 0x24, 0xEC, 0x1C, 0xED, 0x72, 0xEF, 0x7A, 0xEC, 0xD6, 0xEF, 0x5E, 0xEE, 0x51, 0xEC, 0x19, 0xEE, 0x65, 0xED, 0x2D, 0xED, 0x23, 0xEF, 0x4B, 0xED, 0x87, 0xEC, 0xF7, 0xEC, 0xBF, 0x1D, 0xB0, 0x1E, 0xD8, 0x1D, 0x94, 0x1D, 0xEC, 0x1F, 0x12, 0x1C, 0x6A, 0x1C, 0x26, 0x1D, 0x4E, 0x1D, 0xC1, 0x1E, 0x09, 0x1D, 0xF9, 0x1E, 0xB5, 0x1E, 0xDD, 0x1D, 0xD3, 0x1D, 0x5B, 0x1C, 0x17, 0x1C, 0x6F, 0x9E, 0x60, 0x9D, 0x28, 0x9D, 0xC4, 0x9C, 0x8C, 0x9E, 0x42, 0x9C, 0xF2, 0x9D, 0x7A, 0x9C, 0x36, 0x9C, 0x5E, 0x9D, 0x51, 0x9D, 0x99, 0x9C, 0xE5, 0x9E, 0xAD, 0x9D, 0xA3, 0x9F, 0x2B, 0x9C, 0x47, 0x9D, 0x0F, 0x5F, 0x80, 0x5D, 0xF0, 0x5C, 0xB8, 0x5F, 0x34, 0x5C, 0x5C, 0x01, 0x3E, 0x60, 0x72, 0x99, 0x7B, 0xB9, 0x7E, 0x85, 0x71, 0xA5, 0x78, 0x15, 0x73, 0x35, 0x7A, 0x0D, 0x71, 0xCD, 0x7F, 0xED, 0x75, 0xDD, 0x7C, 0x7D, 0x7B, 0x43, 0x77, 0x63, 0x71, 0x53, 0x74, 0xB3, 0x7D, 0x8B, 0x7B, 0xAB, 0x76, 0x9B, 0x78, 0x3B, 0x7D, 0x07, 0x77, 0x27, 0x7A, 0x17, 0x78, 0xD7, 0x75, 0xF7, 0x72, 0xCF, 0x7A, 0xEF, 0x70, 0x5F, 0x79, 0x7F, 0xF2, 0x40, 0xF2, 0xA0, 0xFF, 0x90, 0xF5, 0xB0, 0xFC, 0x88, 0xFA, 0x28, 0xFF, 0x18, 0xF5, 0x38, 0xF2, 0x04, 0xF1, 0xC4, 0x0F, 0x78, 0x40, 0xEB, 0xD3, 0xC3, 0x33, 0xE3, 0xB3, 0xCD, 0x73, 0xE9, 0xF3, 0xC1, 0x0B, 0xD1, 0x8B, 0xEE, 0x4B, 0xC6, 0xCB, 0xD2, 0x2B, 0xCA, 0xAB, 0xDC, 0x6B, 0xD4, 0xEB, 0xC8, 0x1B, 0xE4, 0x9B, 0xC0, 0x9B, 0xEF, 0x5B, 0xDB, 0xDB, 0xD3, 0x3B, 0xF3, 0xBB, 0xFD, 0x7B, 0xC5, 0xFB, 0xC9, 0x07, 0xD9, 0x87, 0xE1, 0x47, 0xCE, 0xC7, 0xFA, 0x27, 0xE6, 0xA7, 0xCA, 0x67, 0xC2, 0xE7, 0xF4, 0x17, 0xFC, 0x97, 0xF8, 0xD7, 0xEF, 0xAF, 0xBE, 0xFF, 0xC9, 0x7F, 0x1E, 0x10, 0x4F, 0x90, 0x26, 0x90, 0x3B, 0x50, 0x06, 0x80, 0xFE, 0xA5, 0xA0, 0x87, 0x60, 0xC4, 0x60, 0xFA, 0x60, 0xD9, 0x60, 0x2B, 0xE0, 0xE8, 0xE0, 0x4A, 0xE0, 0x71, 0xE0, 0x93, 0x10, 0x70, 0x10, 0x62, 0x10, 0x41, 0x10, 0x3D, 0x10, 0x1F, 0x90, 0x5C, 0x90, 0x6E, 0x90, 0x0D, 0x90, 0x37, 0x50, 0x74, 0x50, 0x56, 0x50, 0x25, 0x50, 0x07, 0xD0, 0x44, 0xD0, 0xBA, 0xD0, 0x99, 0xD0, 0xCB, 0x30, 0x68, 0x30, 0x8A, 0x30, 0xB1, 0x30, 0x13, 0xB0, 0xB0, 0xB0, 0xA2, 0xB0, 0x41, 0xB0, 0x3D, 0xB0, 0x9F, 0x70, 0xDC, 0x70, 0xEE, 0x70, 0x8D, 0x70, 0xB7, 0xF0, 0xF4, 0xF0, 0xD6, 0xF0, 0xA5, 0xF0, 0x87, 0x08, 0xC4, 0x08, 0xFA, 0x08, 0xD9, 0x08, 0x6B, 0xDF, 0x30, 0xBF, 0xA9, 0x7C, 0x4B, 0xF8, 0x36, 0xFD, 0x1D, 0xE1, 0xBB, 0x04, 0xC0, 0xFA, 0x01, 0x44, 0x50, 0x60, 0xD5, 0x7B, 0x21, 0xB6, 0x22, 0x3E, 0x22, 0x31, 0x23, 0xD9, 0x23, 0x55, 0x22, 0x9D, 0x21, 0x53, 0x20, 0x9B, 0x20, 0xE7, 0x23, 0x6F, 0xFF, 0xC0, 0xFB, 0xA1, 0xF9, 0x23, 0xF5, 0xC7, 0x02, 0xCA, 0x0F, 0x14, 0x39, 0x94, 0x68, 0x94, 0x31, 0x54, 0x68, 0x54, 0x61, 0xD4, 0x40, 0xD4, 0x6E, 0xD4, 0x77, 0x34, 0x2E, 0x34, 0x37, 0xB4, 0x06, 0xB4, 0x5B, 0x74, 0x7A, 0x74, 0x6B, 0xF4, 0x32, 0xF4, 0x23, 0x0C, 0x52, 0x0C, 0x43, 0x8C, 0x1C, 0x8C, 0x0D, 0x4C, 0x6C, 0x4C, 0x75, 0xCC, 0x64, 0xCC, 0x39, 0x2C, 0x24, 0x2C, 0x19, 0xAC, 0x48, 0xAC, 0x11, 0x6C, 0x28, 0x6C, 0x21, 0x6C, 0x7F, 0xEC, 0x2E, 0xEC, 0x37, 0x1C, 0x4E, 0x1C, 0x57, 0x9C, 0x06, 0x9C, 0x1B, 0x5C, 0x7A, 0x5C, 0x6B, 0xDC, 0x32, 0xDC, 0x23, 0x3C, 0x52, 0x3C, 0x43, 0xBC, 0x5C, 0xBC, 0x4D, 0x7C, 0x1C, 0x7C, 0x0D, 0xFC, 0x34, 0xFC, 0x75, 0x02, 0x22, 0x02, 0x33, 0x82, 0x0A, 0x82, 0x5B, 0x42, 0x76, 0x42, 0x6F, 0xC2, 0xDE, 0x9F, 0xD0, 0x3F, 0xA5, 0x7F, 0xC6, 0xFF, 0x5C, 0x22, 0xC2, 0x25, 0x32, 0x20, 0x2A, 0x26, 0x3A, 0x27, 0x66, 0x22, 0x76, 0x23, 0xEE, 0x20, 0x01, 0x23, 0x11, 0x23, 0x89, 0x26, 0x99, 0x23, 0xC5, 0x24, 0xD5, 0x21, 0x2D, 0x00, 0xA8, 0x4E, 0x47, 0xE6, 0x44, 0xD6, 0x4A, 0xF6, 0x49, 0x2E, 0x4C, 0x1E, 0x4E, 0x3E, 0x4D, 0x81, 0x4A, 0xA1, 0x49, 0x91, 0x0B, 0x2C, 0x77, 0x6A, 0x4A, 0x07, 0xCA, 0x26, 0xCA, 0x77, 0x2A, 0x41, 0xAA, 0x50, 0xAA, 0x49, 0x6A, 0x14, 0x6A, 0x75, 0x60, 0xB7, 0xEF, 0xD3, 0x50, 0xD1, 0xD8, 0xD1, 0x34, 0xD2, 0xBC, 0xD1, 0x0A, 0xD0, 0x86, 0xD0, 0x4E, 0xD0, 0xFD, 0xA0, 0x53, 0xA7, 0xCB, 0xA6, 0xDB, 0xA3, 0xA7, 0x04, 0x68, 0xDE, 0x40, 0xFF, 0xCA, 0xC0, 0xCF, 0x10, 0xC2, 0x30, 0xCE, 0x88, 0xCC, 0xA8, 0xC6, 0x98, 0xC5, 0xB8, 0xCB, 0x44, 0xC1, 0x64, 0xCB, 0x54, 0xCF, 0xF4, 0xC2, 0xCC, 0xC7, 0x1C, 0xCC, 0x3C, 0xC6, 0x82, 0xC4, 0xA2, 0xC2, 0x92, 0xC9, 0xB2, 0xC3, 0x4A, 0xC6, 0x6A, 0xCD, 0x5A, 0xC7, 0xFA, 0xCC, 0xC6, 0xC3, 0x16, 0xC4, 0x36, 0xCA, 0xFE, 0x9D, 0x5D, 0x99, 0x3D, 0x83, 0x7D, 0x9B, 0x83, 0x94, 0xC3, 0x8A, 0xA3, 0x96, 0xE3, 0x89, 0x93, 0x87, 0x33, 0x90, 0x73, 0x84, 0xEB, 0x3B, 0x97, 0x32, 0x57, 0x06, 0xD7, 0x16, 0x37, 0x29, 0xB7, 0x15, 0x77, 0x2D, 0xF7, 0xD3, 0x2F, 0x9E, 0x5F, 0x41, 0xBF, 0x46, 0x78, 0xBE, 0xF3, 0x28, 0xF3, 0x64, 0xF0, 0x6C, 0xF3, 0x92, 0xF1, 0x5A, 0xF3, 0xD6, 0xF1, 0x3E, 0xF3, 0xF1, 0xF2, 0x05, 0xF3, 0x8D, 0xF1, 0x23, 0xF1, 0xAB, 0xF2, 0x67, 0xF1, 0xEF, 0x0A, 0x50, 0x0A, 0xD8, 0x0A, 0xD4, 0x09, 0x3C, 0x08, 0x72, 0x0A, 0x7A, 0x0B, 0xF6, 0x08, 0x81, 0x0B, 0x89, 0x09, 0x45, 0x0A, 0x4D, 0x09, 0xFF, 0x10, 0x56, 0x15, 0x4E, 0x17, 0xDE, 0x10, 0xF9, 0x29, 0x62, 0x22, 0x52, 0x02, 0xB0, 0x9B, 0x41, 0xD4, 0x59, 0xB4, 0x45, 0xF4, 0x5D, 0x8C, 0x5F, 0x2C, 0x58, 0x6C, 0x44, 0x1C, 0x01, 0x58, 0xED, 0x49, 0xE2, 0xCB, 0x12, 0xB8, 0x12, 0xFA, 0x12, 0x85, 0x12, 0xC7, 0x92, 0x34, 0x92, 0xF6, 0x92, 0x0D, 0x92, 0xCF, 0x52, 0x3C, 0x52, 0x01, 0x52, 0x83, 0xD2, 0xB0, 0xD2, 0xB2, 0xD2, 0x09, 0xD2, 0x8B, 0x32, 0x38, 0x32, 0x7A, 0x32, 0x05, 0x32, 0xC7, 0xB2, 0x34, 0xB2, 0x0E, 0xB2, 0x8D, 0xB2, 0xAF, 0x72, 0xBC, 0x72, 0x41, 0x72, 0xC3, 0xF2, 0x08, 0xF2, 0xF2, 0xF2, 0xC9, 0xF2, 0xAB, 0x0A, 0xF8, 0x0A, 0x46, 0x0A, 0x25, 0x0A, 0xE7, 0x00, 0xB3, 0x5D, 0x15, 0xDB, 0x15, 0xBF, 0x94, 0x84, 0x95, 0xC2, 0x95, 0xA6, 0x94, 0x51, 0x94, 0xD5, 0x95, 0xB3, 0x95, 0x77, 0x55, 0xC8, 0x55, 0xAC, 0x55, 0x6A, 0x55, 0x1E, 0x55, 0xB9, 0x55, 0xFD, 0x55, 0x07, 0xD5, 0xE0, 0xD4, 0xE4, 0xD4, 0x92, 0xD4, 0x56, 0xD4, 0xF1, 0xD5, 0x8D, 0xD5, 0x4B, 0xD5, 0x2F, 0x35, 0x98, 0x35, 0xDC, 0x35, 0xBA, 0x34, 0xC1, 0x01, 0x5A, 0x47, 0x6B, 0xCE, 0x69, 0x61, 0x68, 0x69, 0x6B, 0xE5, 0x69, 0x1D, 0x6A, 0x53, 0x6B, 0xDB, 0x6B, 0x37, 0x68, 0xBF, 0xE8, 0xF0, 0xEA, 0x04, 0xE9, 0x8C, 0xE8, 0x22, 0xE8, 0x2A, 0xE8, 0xA6, 0xFC, 0xCF, 0xFD, 0x6E, 0xAC, 0x57, 0xA2, 0x77, 0xA1, 0xCF, 0xA4, 0xEF, 0xAA, 0xDF, 0xAE, 0xFF, 0x65, 0x20, 0x6C, 0x10, 0x66, 0x30, 0x61, 0x88, 0x6C, 0xA8, 0x62, 0x98, 0x61, 0xB8, 0x69, 0x44, 0x64, 0x64, 0x6A, 0x54, 0x66, 0x74, 0x66, 0x4C, 0x63, 0x6C, 0x63, 0x5C, 0x65, 0x7C, 0x65, 0xC2, 0x60, 0xE2, 0x60, 0x52, 0x67, 0x72, 0x67, 0xCA, 0x62, 0xEA, 0x62, 0xDA, 0x64, 0xFA, 0x64, 0xC6, 0x61, 0xE6, 0x6E, 0xD6, 0x6A, 0xF6, 0x6A, 0xCE, 0x6D, 0xEE, 0x6D, 0xDE, 0x61, 0xFE, 0x01, 0x2C, 0x78, 0x3F, 0x8B, 0x6E, 0x4B, 0x10, 0x4B, 0x01, 0xCB, 0x00, 0xCB, 0x3E, 0x2B, 0x70, 0x2B, 0x21, 0xAB, 0x60, 0xAB, 0x01, 0x6B, 0x48, 0x6B, 0x11, 0xEB, 0xDF, 0xD6, 0x43, 0x36, 0x50, 0x00, 0x9B, 0x43, 0x6D, 0x86, 0x6D, 0xA1, 0x6D, 0xC5, 0x6C, 0xC3, 0x6C, 0x47, 0xEC, 0x60, 0xEC, 0xC4, 0xED, 0xC2, 0xEC, 0x46, 0xEC, 0x61, 0xEC, 0xC5, 0xED, 0xC3, 0xEC, 0x47, 0x1C, 0x60, 0x1C, 0xC4, 0x1C, 0x42, 0x1D, 0x86, 0x1D, 0xA1, 0x1D, 0x45, 0x1D, 0x43, 0x1C, 0x87, 0x9C, 0x20, 0x9D, 0x44, 0x9C, 0x7E, 0x3B, 0x0D, 0x38, 0x43, 0x38, 0x0B, 0x39, 0x07, 0x3A, 0xF7, 0xB9, 0x80, 0xBA, 0x08, 0xB8, 0xF8, 0xBB, 0x74, 0xBB, 0x7C, 0xBA, 0xF2, 0xBA, 0xFA, 0xB8, 0x76, 0xB8, 0xBE, 0xB9, 0x71, 0xB9, 0x79, 0xB8, 0xB5, 0xB8, 0x3D, 0xB9, 0xB3, 0xB9, 0xBB, 0xB8, 0x37, 0xB8, 0xDF, 0x79, 0x30, 0x79, 0x38, 0x78, 0xD4, 0x78, 0x5C, 0x79, 0xD2, 0x7A, 0x5A, 0x7B, 0x96, 0x7B, 0x9E, 0x7A, 0x51, 0x78, 0x99, 0x79, 0xFD, 0xF5, 0xDA, 0xF7, 0x26, 0xF6, 0x36, 0xF0, 0xCE, 0xF5, 0xDE, 0xF4, 0xC1, 0xF3, 0xD1, 0xF2, 0xC9, 0xF0, 0x59, 0xF6, 0xC5, 0xF0, 0x55, 0xF1, 0x4D, 0xF4, 0x9D, 0xF3, 0x43, 0xF2, 0x93, 0xF5, 0x8B, 0xF2, 0x1B, 0x07, 0xA8, 0x2C, 0xE6, 0xFF, 0xDB, 0x7F, 0x20, 0x00, 0x2C, 0x80, 0x3F, 0xC0, 0x37, 0xA0, 0x23, 0xE0, 0x35, 0x90, 0x23, 0xD0, 0x35, 0xB0, 0x21, 0xF0, 0x36, 0x88, 0x21, 0xC8, 0x3E, 0xA8, 0x0E, 0xA0, 0x32, 0x5B, 0xB0, 0x7B, 0x70, 0x5B, 0xF0, 0xFB, 0x6F, 0xDE, 0xDF, 0xFE, 0xBF, 0xFB, 0x42, 0x20, 0x42, 0x44, 0x43, 0xC2, 0x42, 0x46, 0x43, 0xE1, 0x43, 0x65, 0x42, 0x63, 0x42, 0x67, 0xC2, 0x90, 0xC3, 0x94, 0xC2, 0x92, 0xC2, 0x16, 0xC3, 0x31, 0xC2, 0x35, 0xC2, 0x33, 0xC2, 0xD7, 0x22, 0x70, 0x23, 0x74, 0x22, 0x72, 0x22, 0xB6, 0x23, 0x7F, 0x46, 0x1A, 0x46, 0x16, 0x44, 0xEE, 0x47, 0x91, 0x46, 0x99, 0x44, 0xFD, 0x8D, 0x3A, 0x8A, 0xA6, 0x88, 0x36, 0x07, 0x16, 0xFD, 0x69, 0x0C, 0x55, 0x8C, 0x55, 0x4C, 0x79, 0xCC, 0x79, 0x2C, 0x4D, 0xAC, 0x75, 0x6C, 0x65, 0xEC, 0x45, 0x1C, 0x6D, 0x9C, 0x4D, 0x5C, 0x55, 0xDC, 0x65, 0x3C, 0x5D, 0xBC, 0x6D, 0x7C, 0x55, 0xFC, 0x65, 0x02, 0x5D, 0x82, 0x4D, 0x42, 0x65, 0xC2, 0x45, 0x22, 0x6D, 0xA2, 0x75, 0x62, 0x45, 0xE2, 0x59, 0x12, 0x75, 0x92, 0x65, 0x52, 0x59, 0xD2, 0x49, 0x32, 0x65, 0xB2, 0x79, 0x72, 0x71, 0xF2, 0x61, 0x0A, 0x69, 0x8A, 0x71, 0x4A, 0x61, 0xCA, 0x6E, 0xEA, 0x4F, 0x60, 0xD3, 0xE7, 0xA4, 0x6E, 0xA6, 0xE1, 0xA5, 0x69, 0xA5, 0x65, 0x00, 0x44, 0xC6, 0x48, 0x57, 0x4D, 0x4F, 0x4A, 0x9F, 0xCF, 0x40, 0xCE, 0x90, 0xCF, 0x88, 0xC9, 0x98, 0xC8, 0x84, 0xCB, 0x94, 0xC8, 0x0C, 0xCD, 0x1C, 0xCC, 0x02, 0xCF, 0x12, 0xC8, 0xF2, 0xCB, 0xEA, 0xCC, 0x7A, 0xCB, 0xE6, 0xC8, 0x76, 0xCD, 0x6E, 0xC8, 0xBE, 0xFD, 0x43, 0xFF, 0xC7, 0xE6, 0x4F, 0xF9, 0x9F, 0xE3, 0x1C, 0xB2, 0x1C, 0xA3, 0x9C, 0xBC, 0x9C, 0xCD, 0x5C, 0xDC, 0x5C, 0x8D, 0xDC, 0x94, 0xDC, 0x7F, 0x79, 0xC8, 0x79, 0xB2, 0x79, 0x91, 0x00, 0x9B, 0xA1, 0xF2, 0x85, 0xF2, 0xFD, 0xF3, 0x3B, 0xF3, 0x5F, 0x0B, 0xB8, 0x0A, 0xBC, 0x0B, 0xBA, 0x0A, 0x41, 0x0A, 0x05, 0x0B, 0x83, 0x0B, 0x87, 0x8A, 0xA0, 0x8B, 0x24, 0x8A, 0x22, 0x8B, 0x26, 0xFF, 0x7E, 0x07, 0xB6, 0x7D, 0xFC, 0xDF, 0xF9, 0x62, 0xB4, 0x62, 0xD5, 0xE2, 0xB4, 0xE2, 0x95, 0x12, 0xEC, 0x12, 0xED, 0x92, 0xEC, 0x92, 0xCD, 0x52, 0xC2, 0x52, 0x83, 0xD2, 0xFC, 0xD2, 0xBD, 0x32, 0x92, 0x32, 0xD3, 0xB2, 0x62, 0x80, 0xD0, 0x94, 0xE5, 0x96, 0xE5, 0xE5, 0xE5, 0xE7, 0x15, 0x34, 0x15, 0x36, 0x15, 0x55, 0x15, 0x57, 0x95, 0x0C, 0x95, 0xF6, 0x95, 0xB5, 0x95, 0xB7, 0x55, 0xCC, 0x55, 0xCE, 0x55, 0x8D, 0x55, 0x8F, 0xD5, 0xEC, 0xD5, 0xEE, 0xD5, 0xAD, 0xD5, 0xAF, 0x35, 0xDC, 0x35, 0x3E, 0x35, 0x5D, 0x35, 0x5F, 0xB5, 0xFC, 0xB5, 0x81, 0xB5, 0xFD, 0x75, 0x10, 0x75, 0xA2, 0x75, 0xA1, 0x75, 0xA3, 0xF5, 0x70, 0xF5, 0xD2, 0xF5, 0xD1, 0xF5, 0xD3, 0x0D, 0x48, 0x0D, 0x8A, 0x0D, 0x49, 0x0D, 0x8B, 0x8D, 0x18, 0x8D, 0x1A, 0x8D, 0x99, 0x8D, 0x1B, 0x4D, 0x04, 0x4D, 0x06, 0x4D, 0x05, 0x4D, 0x07, 0xCD, 0xE4, 0xCD, 0x16, 0xCD, 0xE5, 0xCD, 0x17, 0x2D, 0xF4, 0x2D, 0x0E, 0x2D, 0x0D, 0x2D, 0x8F, 0xAD, 0x1C, 0xAD, 0x9E, 0xAD, 0x9D, 0xAD, 0x5F, 0x6D, 0x82, 0x6D, 0xC1, 0x6D, 0xC3, 0xED, 0xB0, 0xED, 0xD2, 0xED, 0xB1, 0xED, 0xB3, 0x1D, 0xA8, 0x1D, 0x6A, 0x1D, 0xE9, 0x1D, 0xEB, 0x9D, 0x04, 0x9D, 0x86, 0x9D, 0x45, 0x9D, 0xC7, 0xC0, 0xC6, 0xB7, 0xED, 0xAA, 0xED, 0xBA, 0xEF, 0x66, 0xEF, 0xF6, 0x04, 0x98, 0x0D, 0xD2, 0x23, 0xDC, 0x13, 0xDA, 0x33, 0xD6, 0xFB, 0xBD, 0x57, 0xA1, 0x37, 0xB9, 0x77, 0xB9, 0x0F, 0xB7, 0x4F, 0xAF, 0xAF, 0xA0, 0xEF, 0x10, 0x58, 0xF9, 0xB6, 0xFD, 0x75, 0xFD, 0x0F, 0x03, 0x2C, 0x03, 0x0E, 0x03, 0x55, 0x03, 0xA7, 0x83, 0xE4, 0x83, 0xC6, 0x83, 0x79, 0x83, 0x9B, 0x43, 0x38, 0x43, 0xEA, 0x43, 0xC9, 0x43, 0x73, 0xC3, 0x88, 0xC3, 0x32, 0xC3, 0x11, 0xC3, 0xC3, 0x23, 0x10, 0x23, 0x82, 0x23, 0x7E, 0x23, 0x1D, 0x23, 0xAF, 0xA3, 0xEC, 0xA3, 0xCE, 0xA3, 0x75, 0xA3, 0x57, 0x63, 0xB4, 0x63, 0x56, 0x63, 0x25, 0x63, 0x87, 0xE3, 0xC4, 0xE3, 0x06, 0xE3, 0x39, 0xE3, 0x1B, 0x13, 0xD8, 0x13, 0xEA, 0x13, 0x29, 0x13, 0xFF, 0x26, 0x7F, 0x4C, 0xCA, 0x4F, 0xC6, 0x4C, 0x4E, 0x4C, 0xC1, 0x4D, 0x89, 0x4F, 0x85, 0x4C, 0x0D, 0x4C, 0x83, 0x4D, 0xF3, 0x4F, 0xFB, 0x4E, 0x77, 0x4C, 0xBF, 0xCE, 0x70, 0xCC, 0xB8, 0xCE, 0x34, 0xCE, 0xDC, 0xCD, 0x32, 0xCE, 0xDA, 0xCD, 0x56, 0xCD, 0x9E, 0xCF, 0x51, 0xCD, 0x59, 0xCC, 0x15, 0xCF, 0x1D, 0xCC, 0x93, 0xCC, 0x1B, 0xCE, 0xE7, 0xCD, 0x6F, 0xFD, 0xC3, 0xFF, 0xA7, 0xFD, 0x2F, 0xF3, 0xDF, 0xCA, 0x02, 0xE6, 0x82, 0xEA, 0x42, 0xF2, 0xC2, 0xBF, 0xC5, 0x1F, 0x8B, 0x0A, 0x8B, 0x71, 0x8B, 0x53, 0x4B, 0xDF, 0x96, 0xA4, 0x97, 0x22, 0x96, 0x46, 0x97, 0x61, 0x96, 0xC5, 0x96, 0x43, 0x96, 0x07, 0x56, 0xC0, 0x57, 0x04, 0x57, 0x02, 0x56, 0x7A, 0x56, 0xBE, 0x56, 0x79, 0x56, 0xBD, 0x57, 0xDB, 0x01, 0xD2, 0x73, 0xAE, 0xB9, 0xAF, 0x35, 0xAF, 0x3D, 0xAE, 0xB3, 0xAE, 0x3B, 0xAF, 0xD7, 0xAF, 0xDF, 0x6E, 0x30, 0x6E, 0xD8, 0x6F, 0x54, 0x6F, 0x5C, 0x6D, 0xD2, 0x6D, 0xDA, 0x6C, 0x56, 0x6C, 0x9E, 0x6D, 0x51, 0x6D, 0x59, 0x6C, 0x95, 0x6E, 0x1D, 0x6F, 0x93, 0x6F, 0x9B, 0x6E, 0xFF, 0xDD, 0x3E, 0xD8, 0x21, 0xD9, 0x31, 0xDE, 0x29, 0xD8, 0xD9, 0xDB, 0x25, 0xDA, 0x35, 0xD8, 0xCD, 0x03, 0x5A, 0x00, 0xC1, 0x9E, 0xC6, 0x5E, 0xC2, 0xDE, 0xF8, 0x3E, 0xF8, 0xFE, 0xAF, 0x7D, 0x97, 0xFD, 0xCA, 0xFD, 0xC3, 0x03, 0x82, 0x03, 0xF5, 0x83, 0xF8, 0x83, 0xD1, 0x43, 0xB0, 0x43, 0xEE, 0x43, 0xE7, 0xC3, 0xCA, 0xC3, 0xC3, 0x23, 0x82, 0x23, 0xF5, 0xA3, 0xF8, 0xA3, 0xB1, 0x63, 0xF0, 0xE3, 0x5F, 0xC7, 0x2E, 0xC7, 0x55, 0xC7, 0x47, 0x27, 0x84, 0x27, 0x1A, 0x27, 0x09, 0x27, 0xE3, 0x00, 0xF9, 0x79, 0x4F, 0xDD, 0x4E, 0x6B, 0x4E, 0x4F, 0xCE, 0x88, 0xCF, 0xB4, 0xCF, 0x92, 0xCF, 0xA6, 0xCE, 0x61, 0xCE, 0x05, 0xCE, 0x3D, 0xCF, 0x1B, 0xCE, 0x2F, 0x2E, 0xC8, 0x2F, 0xF4, 0x2F, 0xD2, 0x2F, 0xE6, 0x2F, 0x11, 0x2E, 0x45, 0x2F, 0xFD, 0x2E, 0x5B, 0x2F, 0x6F, 0xAF, 0x68, 0xAE, 0x4C, 0xAE, 0x72, 0xAE, 0x56, 0xAE, 0x7F, 0x5C, 0x4B, 0x5F, 0x87, 0x5C, 0x77, 0x5F, 0xBF, 0xDC, 0x30, 0xDF, 0x58, 0xDF, 0xFC, 0x05, 0xD8, 0x8F, 0x7D, 0xAB, 0x74, 0x1B, 0x7D, 0x3B, 0x7C, 0x07, 0x7A, 0xC7, 0x7D, 0xE7, 0x72, 0x57, 0x75, 0x77, 0x7C, 0x4F, 0x74, 0xAF, 0x7D, 0x9F, 0x72, 0x3F, 0xF3, 0x00, 0xF7, 0x20, 0xFC, 0xE0, 0xFB, 0xD0, 0xF2, 0x70, 0xFB, 0x48, 0xF3, 0x68, 0xF6, 0x98, 0xF7, 0xB8, 0xF6, 0x84, 0xF6, 0x24, 0xF7, 0x14, 0xFE, 0x34, 0xF0, 0xF4, 0xF9, 0xCC, 0xF1, 0xEC, 0xF8, 0x5C, 0xF9, 0x7C, 0xF4, 0xF2, 0xF3, 0x45, 0xFB, 0x25, 0xE5, 0x65, 0xE6, 0x15, 0xFE, 0x55, 0xE4, 0xD5, 0xEF, 0xB5, 0xED, 0xF5, 0xFE, 0x8D, 0xFE, 0xCD, 0xE2, 0xAD, 0xF0, 0x6D, 0xF3, 0x1D, 0xEB, 0x5D, 0xF9, 0x3D, 0xE6, 0x7D, 0x14, 0x28, 0x00, 0xBC, 0x1F, 0x1E, 0x1F, 0xF5, 0x1F, 0x97, 0x9F, 0x94, 0x9F, 0x46, 0x9F, 0x7F, 0x3E, 0x57, 0xBE, 0x50, 0xBF, 0x64, 0xBF, 0xC2, 0xBF, 0x06, 0xFE, 0x27, 0xFF, 0xB9, 0x40, 0x9C, 0x41, 0xAA, 0x41, 0x4E, 0x40, 0x89, 0x41, 0x75, 0x40, 0x53, 0x41, 0xE7, 0xC0, 0x10, 0xC0, 0x44, 0xC1, 0x02, 0xC0, 0xDA, 0xC1, 0x1E, 0xC0, 0xE9, 0xC1, 0x2D, 0xC1, 0x0B, 0xC1, 0xB7, 0x20, 0xB0, 0x20, 0x94, 0x20, 0x62, 0x20, 0x46, 0x20, 0xC1, 0x21, 0x79, 0x20, 0xDD, 0x21, 0xEB, 0x20, 0xCF, 0xA1, 0xC8, 0xA1, 0x0C, 0xA0, 0xB2, 0xA0, 0x96, 0xA0, 0x91, 0xA1, 0xA5, 0xA1, 0x43, 0xA0, 0x7B, 0xA1, 0xDF, 0x60, 0xD8, 0x60, 0x1C, 0x60, 0xCA, 0x61, 0x0E, 0x81, 0xD2, 0xAF, 0x05, 0x9B, 0x02, 0x3B, 0x0B, 0x07, 0x0F, 0x27, 0x0A, 0x17, 0x00, 0xD7, 0x01, 0xF7, 0x08, 0xCF, 0x08, 0x38, 0x40, 0x31, 0xFC, 0x2E, 0x02, 0x2E, 0x82, 0x1A, 0x42, 0x02, 0xC2, 0xE4, 0x37, 0x18, 0xA0, 0xEF, 0xFB, 0x7E, 0x6B, 0xFD, 0x76, 0xFF, 0x9D, 0xEE, 0xBB, 0xC5, 0xF7, 0xC2, 0xEF, 0x5B, 0x88, 0xD8, 0x88, 0x2A, 0x88, 0x71, 0x88, 0xE3, 0x48, 0xD0, 0x48, 0x82, 0x48, 0x3E, 0x48, 0x2D, 0x48, 0x77, 0xC8, 0x74, 0xC0, 0xDA, 0x2F, 0x44, 0xDE, 0xFA, 0x81, 0xF3, 0x43, 0xF5, 0x47, 0xFC, 0x8F, 0x09, 0x14, 0x68, 0x60, 0xEB, 0xFB, 0xA2, 0xB4, 0xA2, 0xDC, 0xA3, 0x32, 0xA0, 0x5A, 0xA1, 0xFE, 0x45, 0xDD, 0x41, 0xC3, 0x43, 0x53, 0x47, 0x4B, 0x44, 0x9B, 0x46, 0x87, 0x43, 0x17, 0x41, 0x0F, 0x40, 0xEF, 0x40, 0x7F, 0xC6, 0x60, 0xC6, 0xB0, 0xC5, 0x28, 0xC3, 0x38, 0xC0, 0xFC, 0x89, 0xA9, 0x8D, 0x99, 0x86, 0x39, 0x8F, 0x85, 0x88, 0x25, 0x89, 0x15, 0x82, 0xD5, 0x8B, 0xF5, 0x81, 0xCD, 0x81, 0xED, 0x8C, 0x5D, 0x83, 0x7D, 0x86, 0x43, 0x8E, 0x63, 0x88, 0xF3, 0x07, 0x67, 0x15, 0x17, 0x0D, 0x57, 0x01, 0x37, 0x1A, 0x77, 0x04, 0x0F, 0x02, 0x8F, 0x1F, 0xCF, 0x0F, 0x6F, 0x18, 0x1F, 0x19, 0x5F, 0x0B, 0xBF, 0x08, 0xFF, 0x8A, 0x80, 0x83, 0x20, 0x90, 0x60, 0x82, 0x10, 0x9D, 0x50, 0x9F, 0xB0, 0x8C, 0xF0, 0xFE, 0x27, 0x2F, 0xB0, 0xEF, 0xE7, 0x00, 0x0B, 0x30, 0x25, 0xAA, 0x21, 0x7A, 0x23, 0x16, 0x21, 0x8E, 0x25, 0x5E, 0x21, 0x21, 0x26, 0xB1, 0x21, 0x69, 0x21, 0x05, 0x23, 0x95, 0x26, 0x4D, 0x21, 0xDD, 0x21, 0xA3, 0x26, 0x73, 0x21, 0xEB, 0x21, 0x87, 0x23, 0x57, 0x21, 0xCF, 0x21, 0x3F, 0xA1, 0x60, 0xA1, 0xF0, 0xA5, 0x18, 0x05, 0x56, 0xBD, 0x2E, 0x65, 0x09, 0xE5, 0x1D, 0x15, 0x0F, 0x55, 0x18, 0xD5, 0x1C, 0x35, 0x1E, 0xB5, 0x39, 0x75, 0x1D, 0xF5, 0x07, 0x8D, 0x18, 0x4D, 0x02, 0xCD, 0x06, 0x2D, 0x39, 0xAD, 0x23, 0x6D, 0x27, 0x1D, 0x0C, 0x9D, 0x22, 0xC0, 0xFF, 0x63, 0x7A, 0x66, 0x7A, 0x5F, 0xFA, 0x11, 0x06, 0x14, 0x06, 0x5D, 0x86, 0x52, 0x86, 0x7B, 0x46, 0x3E, 0xC6, 0x08, 0xC6, 0x05, 0x26, 0x42, 0x26, 0x2B, 0xA6, 0x26, 0x66, 0x50, 0x66, 0x69, 0xE6, 0x54, 0xE6, 0x5D, 0x16, 0x5A, 0x16, 0x0F, 0x96, 0x01, 0x56, 0x44, 0x56, 0x4D, 0xD6, 0x22, 0xD6, 0x1B, 0xB6, 0x5F, 0x6C, 0xA1, 0x6C, 0x73, 0xEC, 0x78, 0xEC, 0xE6, 0xEC, 0xF5, 0x40, 0xAB, 0x97, 0xE0, 0x48, 0xE2, 0xD8, 0xE2, 0xA4, 0xE2, 0x74, 0xE1, 0xEC, 0xE6, 0x82, 0xE3, 0x52, 0xE1, 0xCA, 0xE1, 0x3A, 0xE5, 0x66, 0xE5, 0xF6, 0xE3, 0x1E, 0xFB, 0x85, 0xFA, 0x4B, 0xEF, 0x57, 0xE9, 0xAF, 0x7B, 0x1E, 0x5E, 0x9E, 0x70, 0x9E, 0x79, 0x5E, 0x3C, 0x5E, 0x73, 0x80, 0xFB, 0xEF, 0x7C, 0x62, 0x7C, 0xF1, 0x7C, 0x6B, 0xFC, 0xA4, 0xFC, 0x76, 0xFC, 0xAD, 0x02, 0xE0, 0x02, 0x32, 0x02, 0xA9, 0x02, 0x3B, 0x82, 0xD4, 0x82, 0x2E, 0x82, 0xDD, 0x42, 0xB0, 0x42, 0x4A, 0x42, 0xD9, 0x42, 0x47, 0xC2, 0x4C, 0xC2, 0xDE, 0xC2, 0x43, 0x22, 0x48, 0x22, 0x9A, 0x22, 0x85, 0x22, 0x97, 0xA2, 0x9C, 0xA2, 0x41, 0xA2, 0x93, 0x62, 0x18, 0x62, 0x86, 0x62, 0x15, 0x62, 0x8F, 0xE2, 0xFC, 0xE2, 0x91, 0xE2, 0x0B, 0x12, 0x04, 0x12, 0x96, 0x12, 0x0D, 0x12, 0x5F, 0x92, 0x12, 0x92, 0x89, 0x92, 0x9B, 0x52, 0x14, 0x52, 0x4E, 0x52, 0x9D, 0xD2, 0x30, 0xD2, 0x8A, 0xFF, 0xB3, 0xD3, 0x33, 0xC9, 0xF8, 0xC8, 0x0C, 0xCB, 0xFE, 0x90, 0xD5, 0x91, 0x2D, 0x96, 0xBD, 0x95, 0xE3, 0x91, 0x0B, 0x95, 0x9B, 0x93, 0xC7, 0x93, 0x37, 0x97, 0xAF, 0x97, 0xFF, 0x50, 0x10, 0x57, 0x48, 0x54, 0xD8, 0x54, 0xA4, 0x54, 0x74, 0x56, 0xEC, 0x56, 0x82, 0x53, 0x52, 0x51, 0xCA, 0x05, 0xD6, 0x39, 0x9B, 0x72, 0x80, 0xF2, 0x84, 0x0A, 0xA6, 0x8A, 0x91, 0x4A, 0x95, 0xCA, 0x8B, 0xAA, 0xB0, 0x6A, 0x9C, 0xEA, 0x9A, 0x1A, 0x99, 0x9A, 0xA3, 0x5A, 0xA7, 0x3A, 0x8C, 0xBA, 0xB2, 0x7A, 0x8E, 0xFA, 0x99, 0x06, 0x9B, 0x46, 0xA0, 0xC6, 0xA4, 0x26, 0x96, 0xA6, 0xB1, 0x66, 0xB5, 0xE6, 0x9B, 0x96, 0xA8, 0x56, 0xBC, 0xD6, 0xBA, 0x36, 0xB9, 0xB6, 0xA3, 0x76, 0x87, 0x0E, 0xB4, 0x8E, 0xA2, 0x4E, 0x96, 0xCE, 0xA1, 0x2E, 0xA3, 0xAE, 0x97, 0xEE, 0xA0, 0x1E, 0xA2, 0x9E, 0x86, 0x5E, 0x01, 0xC0, 0x78, 0x76, 0xFD, 0x00, 0xFD, 0x31, 0x03, 0x54, 0x03, 0x1D, 0x83, 0x62, 0x83, 0x6B, 0x43, 0x4E, 0xC3, 0x40, 0xC3, 0x71, 0x23, 0x54, 0x23, 0x1D, 0xA3, 0xBF, 0x46, 0x57, 0xC6, 0x1C, 0xC6, 0xFE, 0xC6, 0xA3, 0x26, 0xC8, 0x26, 0x9A, 0x26, 0xF9, 0x26, 0xA7, 0xA6, 0xCC, 0xA6, 0x5E, 0xA6, 0xFD, 0x66, 0xF0, 0x66, 0x4A, 0x66, 0x99, 0x66, 0x07, 0xE6, 0xCC, 0xE6, 0x81, 0xE6, 0x33, 0x16, 0x04, 0x16, 0x36, 0x16, 0xED, 0x96, 0xB0, 0x96, 0x6A, 0x96, 0x45, 0x96, 0x77, 0x56, 0x02, 0x56, 0x31, 0x56, 0xEB, 0xD6, 0x54, 0xD6, 0x6E, 0xD6, 0x83, 0x36, 0x28, 0x36, 0xFA, 0x36, 0x55, 0x36, 0x6F, 0xB6, 0xE2, 0xB6, 0x29, 0xB6, 0x7B, 0x76, 0x8C, 0x76, 0xBE, 0x76, 0xE3, 0xF6, 0x98, 0xF6, 0xA6, 0xF6, 0xF5, 0x0E, 0x20, 0x0E, 0x32, 0x0E, 0x19, 0x0E, 0x47, 0x8E, 0x2C, 0x8E, 0x01, 0x8E, 0x53, 0x40, 0x95, 0x37, 0x77, 0x6A, 0x74, 0x06, 0x73, 0x96, 0x73, 0xCE, 0x74, 0x3E, 0x76, 0x61, 0x75, 0x09, 0x74, 0x99, 0x72, 0xC5, 0x71, 0x35, 0x73, 0x6D, 0x70, 0x03, 0x71, 0x93, 0x71, 0x4B, 0x77, 0x3B, 0x70, 0x67, 0x72, 0xF7, 0x75, 0x1F, 0xF3, 0x40, 0xF7, 0x30, 0xF2, 0xA8, 0xF6, 0x78, 0xF3, 0x14, 0x03, 0x7A, 0xFC, 0x96, 0x17, 0xB5, 0x97, 0x9B, 0x57, 0xBF, 0x37, 0xA2, 0xB7, 0x96, 0x77, 0xB1, 0xF7, 0xAD, 0x0F, 0xAF, 0x4F, 0x84, 0xCF, 0xA2, 0xEF, 0x4F, 0x5F, 0x1B, 0xDF, 0x16, 0x3F, 0x08, 0x3F, 0x79, 0xA0, 0xC5, 0x1F, 0xFA, 0x33, 0xF9, 0xFB, 0xF8, 0x8F, 0x06, 0xA0, 0x06, 0xE8, 0x05, 0x94, 0x05, 0x3C, 0x06, 0x0A, 0x04, 0x46, 0x05, 0x2E, 0x05, 0x11, 0x05, 0xD9, 0x04, 0xB5, 0x06, 0x43, 0x04, 0xCB, 0x05, 0x67, 0x04, 0x1F, 0xFC, 0x66, 0xF8, 0xED, 0xF5, 0x7B, 0x28, 0x04, 0x39, 0x44, 0x3B, 0xA4, 0x38, 0xE4, 0x36, 0x94, 0x27, 0x34, 0x2C, 0x74, 0x3E, 0x0C, 0x3F, 0xCC, 0x3C, 0xAC, 0x3E, 0xEC, 0x33, 0x5C, 0x3C, 0x3C, 0x31, 0x7C, 0x23, 0x82, 0x22, 0xC2, 0x31, 0xA2, 0x33, 0x12, 0x3A, 0x52, 0x21, 0x32, 0x2B, 0xF2, 0x30, 0x8A, 0x21, 0xCA, 0x33, 0x6A, 0x30, 0x1A, 0x31, 0x5A, 0x23, 0xBA, 0x20, 0xFA, 0x29, 0x46, 0x39, 0xA6, 0x2E, 0x16, 0x11, 0x20, 0xF5, 0x68, 0x1C, 0x79, 0x5C, 0x70, 0xDC, 0x4E, 0x3C, 0x6F, 0x7C, 0x66, 0xFC, 0x73, 0x82, 0x4A, 0x42, 0x6D, 0xE2, 0xF7, 0x44, 0xAB, 0xC4, 0xE1, 0x24, 0x92, 0x24, 0xFF, 0xA4, 0x8D, 0x64, 0xCE, 0xE4, 0xE4, 0xE4, 0xDB, 0x14, 0xD9, 0x94, 0xB2, 0x54, 0xA8, 0x54, 0xC3, 0xD4, 0xAE, 0x34, 0xAC, 0x34, 0x97, 0xB4, 0xD9, 0x74, 0xDA, 0xF4, 0xB0, 0xF4, 0x7D, 0x60, 0x21, 0x67, 0x66, 0x3C, 0x66, 0x2A, 0x66, 0x56, 0x66, 0xC1, 0x64, 0x19, 0x67, 0x75, 0x67, 0x63, 0x67, 0xBB, 0x64, 0xCF, 0xFC, 0xA1, 0xFA, 0xF3, 0xFB, 0xCF, 0x56, 0x0E, 0x57, 0x4E, 0x52, 0xCE, 0x65, 0xAE, 0x78, 0x6E, 0x5E, 0xEE, 0x5B, 0x9E, 0x72, 0x5E, 0x55, 0x3E, 0x74, 0xBE, 0x7E, 0x7E, 0x6B, 0xC1, 0x8F, 0x02, 0xCB, 0x82, 0xFE, 0x42, 0x9C, 0x42, 0xE7, 0xC2, 0x89, 0x22, 0x92, 0x22, 0xEF, 0xA2, 0xF9, 0xBF, 0xD4, 0x7F, 0x83, 0x80, 0x96, 0xCE, 0x58, 0x1C, 0x0E, 0xAC, 0x61, 0xB6, 0x92, 0xE8, 0x92, 0xFD, 0x52, 0xAE, 0xD2, 0xF8, 0xD2, 0xA3, 0x32, 0x9E, 0xB2, 0xC4, 0xB2, 0x93, 0x72, 0xBE, 0xF2, 0xE4, 0xF2, 0xB3, 0x0A, 0xFE, 0x8A, 0x94, 0x8A, 0xF3, 0x4A, 0x81, 0xCA, 0xD4, 0xCA, 0x8B, 0x2A, 0xA1, 0xAA, 0xB4, 0xAA, 0xCB, 0x6A, 0xE1, 0xEA, 0x8C, 0xEA, 0xEB, 0x1A, 0xD1, 0x9A, 0xAC, 0x9A, 0xDB, 0x5A, 0xF1, 0xDA, 0x3F, 0xB5, 0xF7, 0x75, 0x92, 0xC0, 0xFE, 0x7D, 0x04, 0xB8, 0x9A, 0x5F, 0xFF, 0xDC, 0x20, 0xDB, 0x50, 0xD8, 0xF0, 0xD6, 0xA8, 0xD0, 0x58, 0xDC, 0xF8, 0xD1, 0xA4, 0xD4, 0x54, 0xD6, 0x0C, 0xD2, 0xAC, 0xDA, 0x5C, 0xD9, 0x02, 0xDE, 0xA2, 0xD1, 0x52, 0xD3, 0x0A, 0x05, 0xEC, 0xDE, 0xFA, 0x36, 0xD8, 0x36, 0xAD, 0xB6, 0xD2, 0xB6, 0xA7, 0x76, 0x91, 0xF6, 0xC4, 0xF6, 0x9D, 0x0E, 0xFA, 0x0E, 0xDF, 0x8E, 0x89, 0x4E, 0xEC, 0x4E, 0xF3, 0xCE, 0xA6, 0x2E, 0xC8, 0x2E, 0xA5, 0xAE, 0xBC, 0xAE, 0xAB, 0x6E, 0xDE, 0xEE, 0xA8, 0xEE, 0xB5, 0x1E, 0xCA, 0x1E, 0xF7, 0x9E, 0xA1, 0x5E, 0xB4, 0x5E, 0xE3, 0xDE, 0xFA, 0x3E, 0xB0, 0x3E, 0x85, 0xBE, 0xDC, 0xBE, 0xAB, 0x7E, 0xDE, 0xFE, 0xE8, 0xFE, 0x8D, 0x01, 0x9A, 0x01, 0xAF, 0x81, 0xF1, 0x41, 0x9C, 0x41, 0xCB, 0xC1, 0xB6, 0x21, 0xB8, 0x21, 0xCD, 0xA1, 0xD2, 0xA1, 0x97, 0x61, 0x89, 0xE1, 0x8C, 0xE1, 0xD3, 0x11, 0xAE, 0x91, 0x88, 0x91, 0xB5, 0x51, 0xEA, 0x51, 0xAF, 0xD1, 0x89, 0x31, 0xDC, 0x31, 0x9B, 0xB1, 0xAE, 0x71, 0xC4, 0x71, 0xFD, 0xF1, 0xDA, 0x09, 0xB0, 0x09, 0xA5, 0x89, 0xA2, 0x89, 0xA7, 0x49, 0xF1, 0xC9, 0x8C, 0xC9, 0xF3, 0x29, 0xDE, 0xA9, 0xF8, 0xFF, 0xB9, 0x7D, 0xC3, 0xA6, 0xD7, 0x66, 0xE8, 0x66, 0x02, 0x66, 0xFE, 0xCD, 0x92, 0xCF, 0x7A, 0xCD, 0x4E, 0xCD, 0x11, 0xCD, 0xB9, 0xCE, 0x8D, 0xCD, 0xE3, 0x03, 0xDB, 0x77, 0xF8, 0x1F, 0xCE, 0x3F, 0xFB, 0x7F, 0x03, 0x0B, 0x58, 0x0B, 0xB6, 0x0B, 0x03, 0x8B, 0x58, 0x8B, 0x76, 0x8B, 0x03, 0x4B, 0xD8, 0x4B, 0xF6, 0x4B, 0x43, 0xCB, 0xB8, 0xCB, 0x8E, 0xCB, 0xA3, 0x2B, 0x84, 0x2B, 0xAE, 0x2B, 0x93, 0xAB, 0x24, 0x00, 0x11, 0xE7, 0xD7, 0xA8, 0xD7, 0x02, 0xD7, 0x56, 0xD7, 0x99, 0xD6, 0x23, 0xD6, 0xF7, 0x36, 0xB8, 0x37, 0x92, 0x36, 0x2E, 0x36, 0x45, 0x37, 0x73, 0x36, 0x9F, 0xB7, 0x14, 0xB7, 0xCA, 0x81, 0x1A, 0xAE, 0xB7, 0xDD, 0xBA, 0x83, 0xB2, 0x63, 0xBB, 0x33, 0xB2, 0x4B, 0xBC, 0xEB, 0xBB, 0xBB, 0xB2, 0xC7, 0xBA, 0x17, 0xB6, 0xD7, 0xBD, 0xB7, 0xB5, 0xF7, 0xB5, 0x4F, 0xB0, 0xCF, 0xB7, 0xAF, 0xB7, 0xEF, 0xB7, 0x9F, 0xB3, 0xDF, 0xBD, 0xBF, 0xB5, 0xFF, 0x05, 0x50, 0x90, 0xFF, 0x40, 0xFF, 0xC0, 0xFF, 0x20, 0xF7, 0xA0, 0xE7, 0x60, 0xE7, 0x10, 0xF4, 0xF0, 0xE7, 0xA1, 0xE0, 0xA1, 0xE1, 0x61, 0xE0, 0x61, 0xC1, 0x61, 0xFF, 0xE1, 0xFE, 0x11, 0xC4, 0x11, 0xE9, 0x91, 0xC8, 0x91, 0xE9, 0x51, 0xC8, 0x51, 0xF1, 0xD1, 0xC8, 0xD1, 0xF1, 0x31, 0xEC, 0x31, 0xE5, 0xB1, 0xE4, 0xB1, 0xD5, 0x71, 0xD4, 0x71, 0xC5, 0xF1, 0xE4, 0xF1, 0xE5, 0x09, 0xE2, 0x09, 0xC3, 0x89, 0xC2, 0x89, 0x03, 0xC0, 0xC8, 0xFA, 0x93, 0x7F, 0x27, 0x0F, 0xA7, 0xE8, 0xA7, 0xEC, 0xA7, 0xEA, 0xA7, 0x9E, 0xA7, 0x99, 0xA7, 0x1D, 0xA7, 0x1B, 0xA7, 0x9F, 0x67, 0x04, 0x67, 0x02, 0x67, 0x86, 0x67, 0x41, 0x67, 0x85, 0x67, 0x43, 0x67, 0x47, 0xE7, 0xB0, 0xE7, 0x54, 0xE7, 0x52, 0xE7, 0x36, 0xE7, 0x31, 0xE7, 0x35, 0xE7, 0xB3, 0xE7, 0x77, 0x17, 0xA8, 0x17, 0x6C, 0x17, 0xEA, 0x17, 0x1E, 0x17, 0x99, 0x17, 0x9D, 0x17, 0x9B, 0x97, 0x20, 0x97, 0x44, 0x97, 0xC2, 0xC0, 0x7A, 0x0E, 0xBD, 0x2C, 0xBD, 0x1C, 0xBF, 0xBC, 0xB8, 0x42, 0xBC, 0x62, 0xBC, 0x52, 0xBA, 0x72, 0xB9, 0x4A, 0xBD, 0x6A, 0xBD, 0x5A, 0xBB, 0xFA, 0xB8, 0x26, 0xB8, 0x16, 0xB8, 0x36, 0x06, 0x78, 0x5A, 0x72, 0x3D, 0x76, 0x7D, 0x71, 0x83, 0x78, 0xC3, 0x78, 0xA3, 0x7C, 0xE3, 0x7A, 0x93, 0x76, 0xD3, 0x7E, 0xB3, 0x71, 0x0B, 0x72, 0x4B, 0x74, 0x2B, 0x72, 0x6B, 0x76, 0x1B, 0x71, 0x5B, 0x71, 0x3B, 0x7D, 0x7B, 0x7B, 0x87, 0x7A, 0xC7, 0x7E, 0xA7, 0x79, 0xE7, 0x73, 0x97, 0x73, 0xD7, 0x77, 0x77, 0x70, 0x0F, 0x73, 0x4F, 0x7D, 0x2F, 0x71, 0x6F, 0x74, 0xEF, 0x73, 0x9F, 0x78, 0x5F, 0x76, 0xDF, 0x7B, 0xBF, 0x74, 0x7F, 0xF9, 0x00, 0xF9, 0x80, 0xFB, 0xC0, 0xF4, 0x20, 0x01, 0x2C, 0x6E, 0xB7, 0x87, 0x98, 0x87, 0xC2, 0x87, 0xF6, 0x87, 0xB9, 0x87, 0x13, 0xA0, 0xC1, 0x63, 0x3C, 0xD2, 0x3D, 0x0A, 0x3F, 0x6A, 0x3D, 0x3A, 0x3E, 0x86, 0x3F, 0xE6, 0x3E, 0x36, 0x3F, 0x4E, 0x3D, 0x1E, 0x3C, 0xBE, 0x3F, 0xA1, 0x3C, 0x51, 0x3D, 0x09, 0x3C, 0xA9, 0x3F, 0xD9, 0x3D, 0x85, 0x3C, 0x65, 0x3F, 0x35, 0x3C, 0x8D, 0x3F, 0xED, 0x3E, 0xBD, 0x3C, 0x23, 0x3F, 0x53, 0x3C, 0xF3, 0x3D, 0xAB, 0x02, 0xDB, 0x3C, 0xF8, 0x39, 0xF3, 0xB9, 0xFE, 0x79, 0xEC, 0x79, 0xE7, 0xF9, 0xF9, 0x05, 0xE9, 0x85, 0xFC, 0x85, 0xF7, 0x45, 0xE5, 0xC5, 0xE6, 0x25, 0xF8, 0x25, 0xF3, 0xA5, 0xFE, 0x65, 0xEC, 0x65, 0xE7, 0xE5, 0xE5, 0x15, 0xE9, 0x95, 0x1C, 0x28, 0xF7, 0xAA, 0xAF, 0x36, 0xAF, 0xBF, 0x5F, 0xB3, 0x5E, 0x1B, 0x5E, 0xC7, 0x5F, 0xF7, 0x5E, 0x5F, 0xDF, 0x7E, 0xBC, 0x51, 0x02, 0x0B, 0x5E, 0xFD, 0xCD, 0xFE, 0x2D, 0xF4, 0x2D, 0xE7, 0xAD, 0xE9, 0x6D, 0xEA, 0xED, 0xF0, 0xED, 0xE3, 0x1D, 0xED, 0x9D, 0xE6, 0x5D, 0xF8, 0x5D, 0xFB, 0xDD, 0xE9, 0x3D, 0xF2, 0xBD, 0xE0, 0xBD, 0xED, 0x7D, 0xEE, 0xFD, 0xF4, 0x03, 0xF4, 0x03, 0xEB, 0x83, 0xF1, 0x43, 0xE2, 0xC3, 0xE0, 0xC3, 0xFD, 0x23, 0xEE, 0xA3, 0xE4, 0xA3, 0xE7, 0x63, 0xF9, 0xE3, 0xEA, 0x13, 0xFA, 0x93, 0xE0, 0x93, 0xFD, 0x53, 0xEE, 0xD3, 0xEC, 0xD3, 0xEF, 0x33, 0xF5, 0xB3, 0xFA, 0x73, 0xF8, 0x73, 0xEB, 0xF3, 0xE9, 0xEB, 0xFB, 0x17, 0xD9, 0x17, 0xEF, 0x97, 0xDA, 0x97, 0xDD, 0x57, 0xE8, 0x57, 0xCE, 0x57, 0xF3, 0xD7, 0xF4, 0xD7, 0xD1, 0xD7, 0x97, 0x8D, 0xA9, 0x33, 0xD3, 0xFF, 0xBC, 0xFA, 0x81, 0x40, 0x06, 0x01, 0x01, 0x05, 0xF9, 0x8F, 0xEF, 0xBF, 0xF9, 0x87, 0x00, 0xBE, 0xFF, 0x79, 0x5E, 0x13, 0x00, 0xD2, 0x0B, 0x0A, 0x0A, 0x2A, 0x08, 0x1A, 0x08, 0xDA, 0x07, 0x06, 0x06, 0x26, 0x04, 0x16, 0x04, 0xD6, 0x0F, 0x0E, 0x01, 0x2E, 0x0C, 0x1E, 0x0C, 0x3E, 0x08, 0x01, 0x09, 0x21, 0x02, 0x11, 0x02, 0x31, 0x04, 0x09, 0x05, 0x29, 0x06, 0x19, 0x0A, 0x39, 0x0C, 0x05, 0x0D, 0x25, 0x0E, 0x15, 0x06, 0x35, 0x02, 0x0D, 0x0B, 0x2D, 0x01, 0x1D, 0x0E, 0x3D, 0x06, 0x03, 0x07, 0x23, 0x09, 0x13, 0x09, 0x33, 0x0E, 0x0B, 0x0F, 0x2B, 0x0D, 0x1B, 0x05, 0x3B, 0x01, 0x87, 0x00, 0x27, 0x03, 0x17, 0x0D, 0x37, 0x09, 0xFF, 0x1D, 0x5E, 0x16, 0x3E, 0x06, 0x7E, 0x1A, 0x01, 0x11, 0x41, 0x0E, 0x21, 0x0E, 0x61, 0xE6, 0x1B, 0xD2, 0x37, 0x85, 0x6F, 0xF1, 0xDF, 0x66, 0xBF, 0x23, 0x7F, 0x57, 0xFC, 0x9E, 0xF0, 0x7D, 0x0E, 0x11, 0x05, 0x51, 0x09, 0x31, 0x11, 0xF1, 0x1F, 0x12, 0x2A, 0x92, 0x32, 0x52, 0x32, 0xD2, 0x02, 0x32, 0x1A, 0xB2, 0x2A, 0x72, 0x0A, 0xF2, 0xE2, 0x0F, 0xF4, 0x1F, 0x6A, 0x40, 0x2B, 0x58, 0x42, 0xC1, 0x44, 0x51, 0x47, 0x49, 0x43, 0x59, 0x41, 0xC5, 0x42, 0xD5, 0x40, 0xCD, 0x40, 0x5D, 0x45, 0xC3, 0x46, 0xD3, 0x42, 0xCB, 0x44, 0x5B, 0x43, 0xC7, 0x41, 0xD7, 0x46, 0xCF, 0x42, 0x5F, 0xC7, 0xC0, 0xC3, 0xD0, 0xC1, 0xC8, 0xC6, 0xD8, 0xC4, 0xC4, 0xC7, 0xD4, 0xC5, 0xCC, 0xC1, 0xDC, 0xC2, 0x22, 0xC0, 0xD2, 0xC3, 0xCA, 0xC5, 0xDA, 0xC6, 0x26, 0xC4, 0x36, 0xC0, 0xCE, 0xC3, 0xDE, 0xC1, 0x21, 0x02, 0xFC, 0x20, 0x1F, 0x67, 0x0F, 0x97, 0x18, 0xD7, 0x08, 0xB7, 0x10, 0x77, 0x1F, 0x8F, 0x04, 0xCF, 0x18, 0xAF, 0x08, 0xEF, 0x00, 0x9F, 0x14, 0xDF, 0x14, 0xFF, 0x2F, 0xFE, 0x21, 0x01, 0x39, 0xD0, 0x09, 0x8A, 0x09, 0x8E, 0x09, 0x29, 0x08, 0xCD, 0x09, 0x4B, 0x09, 0x4F, 0x7E, 0x52, 0xFE, 0xB4, 0xF8, 0x59, 0xF6, 0xF3, 0x94, 0x88, 0x8A, 0xC8, 0x8A, 0xA8, 0x9C, 0xE8, 0x8C, 0x98, 0x86, 0xD8, 0x9A, 0xB8, 0x82, 0xF8, 0x82, 0x84, 0x16, 0xB0, 0x84, 0x2A, 0x92, 0x4B, 0x52, 0x3A, 0x52, 0x5B, 0xD2, 0x6A, 0xD2, 0x2B, 0x32, 0x7A, 0x32, 0x7B, 0xB2, 0x1A, 0xB2, 0x6B, 0x72, 0x46, 0x72, 0x07, 0xF2, 0x5A, 0xF2, 0x5B, 0x0A, 0x26, 0x0A, 0x47, 0x8A, 0x7A, 0x8A, 0x3B, 0x4A, 0x66, 0x4A, 0x27, 0xCA, 0x06, 0xCA, 0x7B, 0x2A, 0x16, 0x2A, 0x17, 0xAA, 0x46, 0xAA, 0x07, 0x6A, 0x36, 0x6A, 0x57, 0xEA, 0x26, 0xEA, 0x27, 0x1A, 0x76, 0x1A, 0x37, 0x9A, 0x16, 0x9A, 0x67, 0x5A, 0x0E, 0x5A, 0x77, 0xDA, 0x56, 0xDA, 0x17, 0x3A, 0x4E, 0x3A, 0x4F, 0xBA, 0x36, 0xBA, 0x57, 0x7A, 0x6E, 0x7A, 0x2F, 0xFA, 0x76, 0xFA, 0x77, 0x86, 0x5F, 0x0C, 0xDE, 0x0C, 0x1D, 0x0C, 0x1F, 0x8C, 0x3C, 0x8C, 0x3E, 0x8C, 0x5D, 0x8C, 0x9F, 0x4C, 0xBC, 0x4C, 0x7E, 0x4C, 0xDD, 0x4C, 0x5F, 0xCC, 0xFC, 0xCC, 0xFE, 0xCC, 0x3D, 0x2C, 0xA0, 0x2C, 0x02, 0x2C, 0x01, 0x2C, 0xBD, 0xAC, 0x60, 0xAC, 0x82, 0xAC, 0x81, 0xAC, 0xFD, 0x6C, 0xE0, 0x6C, 0x42, 0x6C, 0xC1, 0x6C, 0x03, 0xEC, 0x10, 0xEC, 0x22, 0xEC, 0xBF, 0xD9, 0x07, 0x39, 0xA0, 0x38, 0x44, 0x39, 0x42, 0x38, 0x86, 0x38, 0xA1, 0x39, 0xC5, 0x38, 0x43, 0x81, 0x6E, 0x00, 0xC3, 0x25, 0xCE, 0x15, 0xCE, 0x35, 0xCA, 0x0D, 0xCB, 0x2D, 0xC9, 0x1D, 0x01, 0xF8, 0x03, 0xFC, 0x2F, 0xA9, 0x5F, 0x91, 0xBF, 0xC6, 0x79, 0x10, 0x78, 0xA4, 0x79, 0xA2, 0x78, 0x26, 0x79, 0xBF, 0xF1, 0xCA, 0xF0, 0xC6, 0xF0, 0x4E, 0xF1, 0x7D, 0xE7, 0x93, 0xE3, 0x8B, 0xE5, 0x9B, 0x06, 0xDA, 0x81, 0x3C, 0xD0, 0xFE, 0x67, 0x04, 0x90, 0x05, 0x14, 0x04, 0xE2, 0x05, 0xE6, 0x04, 0x7F, 0x08, 0x2A, 0x0A, 0x26, 0x0A, 0xCE, 0x0B, 0xA1, 0x08, 0x29, 0x0B, 0x25, 0x09, 0xFD, 0x13, 0x46, 0x13, 0x56, 0x11, 0x4E, 0x16, 0x5E, 0x10, 0x41, 0x17, 0x51, 0x15, 0x49, 0x11, 0x59, 0x12, 0xC5, 0x10, 0x55, 0x13, 0x4D, 0x13, 0x5D, 0x16, 0xC3, 0x14, 0xD3, 0x10, 0x4B, 0x17, 0x5B, 0x11, 0xC7, 0x12, 0xD7, 0x14, 0xCF, 0x00, 0xCA, 0x3F, 0x8E, 0x84, 0x96, 0x44, 0xA6, 0xC4, 0xBA, 0x24, 0xAE, 0xA4, 0xB6, 0x64, 0xB6, 0xE4, 0x86, 0x14, 0x9E, 0x94, 0xAE, 0xD4, 0x1F, 0xA9, 0x4D, 0x69, 0x7C, 0x69, 0x3D, 0xE9, 0x1C, 0xE9, 0x2D, 0x19, 0x42, 0x19, 0x7D, 0x99, 0x5C, 0x99, 0x1D, 0xD9, 0x9F, 0xB2, 0x06, 0xB2, 0xF9, 0xB2, 0xBB, 0x72, 0x44, 0x72, 0x46, 0x72, 0x05, 0x72, 0x7B, 0xF2, 0xC4, 0xF2, 0xC6, 0xF2, 0x85, 0xF2, 0xFB, 0x0A, 0xA4, 0x0A, 0x26, 0x0A, 0x45, 0x0A, 0x87, 0x8A, 0x64, 0x8A, 0xA6, 0x8A, 0xC5, 0x8A, 0x47, 0x4A, 0xE4, 0x4A, 0xE6, 0x4A, 0x25, 0x4A, 0xC7, 0xCA, 0x14, 0xCA, 0x16, 0x40, 0xF7, 0x3F, 0x51, 0xA1, 0x52, 0xB1, 0x54, 0x29, 0x53, 0x39, 0x53, 0xA5, 0x56, 0xB5, 0x52, 0xAD, 0x50, 0x3D, 0x57, 0xA3, 0x51, 0xB3, 0x51, 0xAB, 0x54, 0xBB, 0x50, 0xA7, 0x55, 0xB7, 0x55, 0xAF, 0x02, 0x3A, 0x02, 0xBD, 0x86, 0x9D, 0x46, 0xB5, 0xC6, 0xB5, 0x26, 0x83, 0xA6, 0xBD, 0x66, 0xAD, 0xE6, 0x8D, 0x16, 0xA3, 0x96, 0xA3, 0x56, 0x9D, 0xD6, 0xAD, 0x36, 0x93, 0xB6, 0x93, 0x76, 0xBD, 0xF6, 0x9D, 0x0E, 0x8B, 0x8E, 0xB3, 0x4E, 0x83, 0xCE, 0x83, 0x2E, 0xAB, 0xAE, 0x8B, 0x6E, 0x13, 0xD0, 0xFC, 0xD9, 0xF4, 0x5C, 0xF5, 0x9A, 0xF5, 0x9E, 0x00, 0xCF, 0x70, 0xD7, 0x6F, 0xD1, 0x7F, 0x36, 0xE0, 0x34, 0xF0, 0x30, 0x68, 0x35, 0x78, 0x35, 0xE4, 0x32, 0xF4, 0x34, 0x6C, 0x37, 0x7C, 0x33, 0xE2, 0x36, 0xF2, 0x32, 0xEA, 0x30, 0x7A, 0x37, 0xFE, 0x65, 0xEC, 0x63, 0xDC, 0x69, 0xFC, 0x61, 0xC2, 0x6B, 0xE2, 0x6B, 0xD2, 0x65, 0xF2, 0x65, 0xCA, 0x67, 0xEA, 0x67, 0xDA, 0x63, 0x06, 0x62, 0xC6, 0x6F, 0xE6, 0x6F, 0xD6, 0x6B, 0x0E, 0x6A, 0x2E, 0x00, 0xF8, 0x46, 0x9F, 0x05, 0x98, 0x85, 0x90, 0x45, 0x90, 0x45, 0xBF, 0x25, 0x84, 0xA5, 0xB0, 0x65, 0xB0, 0xE5, 0xA0, 0x15, 0xA4, 0x95, 0x88, 0xD5, 0x6F, 0xAB, 0x21, 0x6B, 0x28, 0x6B, 0x51, 0xEB, 0x50, 0xEB, 0x61, 0x1B, 0x68, 0x1B, 0x71, 0x9B, 0x30, 0x9B, 0x11, 0x5B, 0x58, 0x5B, 0x09, 0xDB, 0x70, 0xDB, 0x31, 0x3B, 0x38, 0x3B, 0x49, 0xBB, 0x08, 0xC0, 0x3C, 0xE0, 0xED, 0xA5, 0xEC, 0xA3, 0xEC, 0x27, 0x1C, 0x10, 0x00, 0xF7, 0x88, 0x76, 0x98, 0x74, 0xFC, 0xEE, 0x28, 0xEB, 0x18, 0xE3, 0x38, 0xED, 0x84, 0xE8, 0x24, 0xE7, 0x14, 0xEB, 0x34, 0xE3, 0x8C, 0xE4, 0x2C, 0xEF, 0x1C, 0xEF, 0x3C, 0xEB, 0x82, 0xEC, 0xA2, 0xE8, 0x92, 0xE0, 0x32, 0xE7, 0x8A, 0xE2, 0xAA, 0xE4, 0x9A, 0xE8, 0x3A, 0xEF, 0x86, 0xEA, 0xA6, 0xEC, 0x96, 0xE4, 0xB6, 0xE0, 0x8E, 0xE6, 0xAE, 0xE2, 0x9E, 0xE2, 0xBE, 0x08, 0x58, 0x88, 0x9A, 0x47, 0xAA, 0xC7, 0x92, 0x27, 0xA6, 0xA7, 0xBA, 0x67, 0x9A, 0xE7, 0xB2, 0x17, 0x96, 0x97, 0x06, 0x50, 0xF8, 0x57, 0xBD, 0xB1, 0xBD, 0x35, 0xBD, 0x33, 0xBD, 0xD7, 0x7C, 0x70, 0x7C, 0xB4, 0x7D, 0xB2, 0x7C, 0xD6, 0x7D, 0xF1, 0x7C, 0x75, 0x7C, 0xB3, 0x7D, 0x37, 0xFC, 0xF0, 0xFD, 0x74, 0xFD, 0xFE, 0xF8, 0x6D, 0xF9, 0x13, 0xF8, 0xEB, 0xF9, 0xE7, 0xFA, 0x6F, 0x07, 0x10, 0x06, 0x18, 0x04, 0xE4, 0x05, 0xEC, 0x04, 0x12, 0x05, 0x1A, 0x06, 0xE6, 0x07, 0xEE, 0x06, 0x11, 0x07, 0x19, 0x05, 0x15, 0x04, 0xED, 0x07, 0x93, 0x04, 0x1B, 0x07, 0x17, 0x01, 0x4E, 0x42, 0xFA, 0xDB, 0xF4, 0xF7, 0xDF, 0xDF, 0x87, 0x21, 0xE4, 0x21, 0x66, 0x80, 0x95, 0x1C, 0x85, 0x52, 0x84, 0x9A, 0x87, 0x96, 0x84, 0x9E, 0x84, 0x51, 0x86, 0x59, 0x84, 0x95, 0x85, 0x9D, 0x86, 0x53, 0x85, 0x5B, 0x85, 0x97, 0x87, 0x9F, 0x45, 0xD0, 0x44, 0x58, 0x47, 0x54, 0x44, 0x9C, 0x47, 0xD2, 0x46, 0xDA, 0x44, 0x56, 0x46, 0x5E, 0x02, 0x75, 0xDF, 0x36, 0xAA, 0x3A, 0xEA, 0x2A, 0x9A, 0x3E, 0xDA, 0x3E, 0xBA, 0x26, 0xFA, 0x3A, 0x86, 0x21, 0xC6, 0x21, 0xA6, 0x36, 0xE6, 0x26, 0x96, 0x29, 0xD6, 0x31, 0xB6, 0x2E, 0xF6, 0x2E, 0x8E, 0x39, 0xCE, 0x29, 0xAE, 0x21, 0xEE, 0x3E, 0x9E, 0x25, 0xDE, 0x25, 0xBE, 0x31, 0xFE, 0x21, 0x81, 0x35, 0xC1, 0x35, 0xA1, 0x29, 0xE1, 0x31, 0x91, 0x3D, 0xD1, 0x2D, 0xB1, 0x39, 0xF1, 0x39, 0x89, 0x23, 0xC9, 0x3D, 0xA9, 0x35, 0xE9, 0x05, 0xF0, 0x15, 0xCF, 0xE4, 0xB6, 0xE4, 0xD7, 0x14, 0xAE, 0x14, 0xAF, 0x94, 0xF6, 0x94, 0xB7, 0xD4, 0x5F, 0xA9, 0xDE, 0xA9, 0x1D, 0xA9, 0x1F, 0x69, 0x3C, 0x69, 0x3E, 0x69, 0x5D, 0x69, 0x9F, 0xE9, 0xBC, 0xE9, 0x7E, 0xE9, 0xDD, 0xE9, 0x5F, 0x19, 0x7C, 0x19, 0xFE, 0x19, 0x3D, 0x99, 0x20, 0x99, 0x02, 0x99, 0x01, 0x99, 0xBD, 0x59, 0x60, 0x59, 0x82, 0x59, 0x81, 0x59, 0xFD, 0xD9, 0xE0, 0xD9, 0x42, 0xD9, 0xC1, 0xD9, 0x03, 0x7F, 0x20, 0xFE, 0x08, 0x03, 0x16, 0x33, 0x98, 0x03, 0x99, 0x23, 0x9A, 0x13, 0x92, 0x33, 0x94, 0x0B, 0x9D, 0x2B, 0x96, 0x1B, 0x9A, 0x3B, 0x92, 0x07, 0x93, 0x27, 0x9E, 0x17, 0x0E, 0x74, 0x04, 0xD8, 0x7C, 0x89, 0xFC, 0x88, 0xFC, 0xB1, 0x02, 0xB8, 0x02, 0xA9, 0x82, 0xC8, 0x82, 0xF1, 0x42, 0x84, 0x42, 0xE9, 0xC2, 0xA8, 0xC2, 0xC9, 0xA2, 0x6F, 0x45, 0x32, 0x45, 0xD1, 0x45, 0x53, 0x40, 0x47, 0x90, 0xFD, 0x1B, 0xFB, 0x77, 0xBA, 0x18, 0xB1, 0x58, 0xBE, 0x38, 0xAE, 0x78, 0xA6, 0x04, 0xB9, 0x44, 0xA1, 0x24, 0xBE, 0x64, 0xAE, 0xF4, 0x47, 0xA9, 0x62, 0x69, 0x42, 0xE9, 0x7C, 0x19, 0x4A, 0x99, 0x52, 0x59, 0x52, 0xD9, 0xBF, 0x72, 0xD4, 0x72, 0x15, 0xC0, 0x70, 0x16, 0x2A, 0xD0, 0x2B, 0x54, 0x01, 0xC7, 0x59, 0xAA, 0xC4, 0xA8, 0x54, 0x03, 0x2C, 0x67, 0xB9, 0x0A, 0xB3, 0x4A, 0xBD, 0x2A, 0xBD, 0x6A, 0xA5, 0x1A, 0xAB, 0x5A, 0x13, 0x30, 0x9D, 0xD5, 0x1A, 0x9C, 0x1A, 0xAD, 0x9A, 0xCC, 0x9A, 0xF5, 0x5A, 0xDC, 0x5A, 0xED, 0xDA, 0xAC, 0xDA, 0x8D, 0x3A, 0xBC, 0x3A, 0x9D, 0xBA, 0x3F, 0x75, 0x9B, 0xF5, 0xF8, 0xF5, 0x7A, 0xF5, 0x39, 0xF5, 0x5B, 0x0D, 0x84, 0x0D, 0xFA, 0x0D, 0xB9, 0x0D, 0x3B, 0x8D, 0x3F, 0x1B, 0x0D, 0x1A, 0xF3, 0x1A, 0x77, 0x9B, 0x88, 0x9A, 0x0C, 0x81, 0x92, 0xB0, 0xD7, 0x4C, 0xDC, 0x6C, 0xDC, 0x5C, 0xD8, 0xBC, 0xDF, 0x42, 0xDA, 0x62, 0xD2, 0x52, 0xD4, 0x72, 0xD8, 0x4A, 0xD6, 0x6A, 0xDA, 0xFA, 0xB7, 0xF5, 0xA8, 0x8D, 0xBC, 0xCD, 0xAC, 0xAD, 0xA4, 0xED, 0xB8, 0x9D, 0xA2, 0xDD, 0xA2, 0xBD, 0x14, 0x28, 0xFF, 0x54, 0x1D, 0x96, 0x1D, 0x65, 0x1D, 0xA7, 0x9D, 0xD4, 0x9D, 0x56, 0x9D, 0xE5, 0x9D, 0xE7, 0x5D, 0x34, 0x5D, 0xD6, 0x5D, 0x95, 0x5D, 0x17, 0xDD, 0xB4, 0xDD, 0xB6, 0xDD, 0x55, 0xDD, 0x97, 0x3D, 0xF4, 0x3D, 0x76, 0x3D, 0xD5, 0x3D, 0x57, 0xBD, 0x0C, 0xBD, 0xF6, 0xBD, 0x35, 0xBD, 0x37, 0x7D, 0x8C, 0x7D, 0x0E, 0x7D, 0x75, 0x7D, 0xB7, 0xFD, 0x4C, 0xFD, 0x4E, 0xFD, 0xF5, 0xFD, 0x77, 0x40, 0x4D, 0x70, 0x1E, 0x68, 0x18, 0xB8, 0x1F, 0x64, 0x1D, 0x74, 0x19, 0x6C, 0x1C, 0x7C, 0x1C, 0x62, 0x1B, 0x72, 0x1D, 0x6A, 0x1E, 0x7A, 0x1A, 0x66, 0x1F, 0x76, 0x1F, 0x6E, 0x19, 0x7E, 0x1E, 0xE1, 0x1C, 0xF1, 0x18, 0x69, 0x1D, 0x79, 0x19, 0xE5, 0x1A, 0xF5, 0x1C, 0x6D, 0x1B, 0x7D, 0x1B, 0xE3, 0x1E, 0xF3, 0x1A, 0xEB, 0x18, 0x7B, 0x1F, 0xFF, 0x35, 0xEE, 0x33, 0xDE, 0x39, 0xFE, 0x31, 0xC1, 0x3B, 0xE1, 0x3B, 0xD1, 0x35, 0xF1, 0x39, 0xC9, 0x37, 0xE9, 0x37, 0xD9, 0x3D, 0x05, 0x32, 0xC5, 0x3F, 0xE5, 0x3F, 0xD5, 0x3B, 0x0D, 0x3A, 0x2D, 0x30, 0x1D, 0x38, 0xDD, 0x37, 0x03, 0x36, 0x23, 0x34, 0x13, 0x34, 0xD3, 0x3F, 0x0B, 0x3E, 0x2B, 0x3C, 0x1B, 0x3C, 0x3B, 0x30, 0x07, 0x39, 0x27, 0x32, 0xF7, 0x7B, 0x6E, 0x68, 0x1E, 0x6A, 0x5E, 0x74, 0x3E, 0x14, 0xF0, 0x24, 0xE8, 0x7F, 0x62, 0xFF, 0xC2, 0xFE, 0x8D, 0x2C, 0xC0, 0x2C, 0x48, 0x2C, 0x84, 0x2F, 0x8C, 0x2E, 0xC2, 0x2D, 0x4A, 0x2E, 0x46, 0x2C, 0x8E, 0x2F, 0xC1, 0x2F, 0x49, 0x2D, 0x45, 0x2D, 0x4D, 0x2C, 0x23, 0x2C, 0x4B, 0x2F, 0x47, 0x2F, 0x4F, 0xAE, 0x7C, 0x5B, 0x91, 0x5D, 0x89, 0x59, 0x99, 0x5A, 0x45, 0x5C, 0x95, 0x5B, 0x8D, 0x5D, 0x9D, 0x59, 0x43, 0x5A, 0x93, 0x5F, 0x8B, 0x5F, 0x9B, 0x5D, 0x47, 0x5E, 0x57, 0x58, 0x4F, 0x58, 0x9F, 0xDB, 0xF8, 0xB1, 0xA1, 0xB4, 0x91, 0xB8, 0x31, 0xBF, 0x89, 0xBA, 0xA9, 0xBC, 0x99, 0xB4, 0xB9, 0xB0, 0x85, 0xB6, 0xA5, 0xB2, 0x95, 0xB2, 0xB5, 0xB8, 0x8D, 0xBE, 0xAD, 0xBA, 0x9D, 0xBA, 0xBD, 0xB4, 0x83, 0xB1, 0xA3, 0xBE, 0x93, 0xB6, 0xB3, 0xBC, 0x8B, 0xB5, 0xAB, 0xB1, 0x9B, 0xBE, 0xBB, 0xBA, 0x87, 0xBD, 0xA7, 0xB9, 0x97, 0xB9, 0xB7, 0xB6, 0x8F, 0xB3, 0xAF, 0xB5, 0x9F, 0xB5, 0xBF, 0x7E, 0x80, 0x7B, 0xA0, 0x73, 0x90, 0x7D, 0xB0, 0x71, 0x88, 0x7F, 0xA8, 0x7B, 0xF8, 0xE7, 0x70, 0x0B, 0x28, 0x08, 0x7A, 0x47, 0xB9, 0x47, 0xDB, 0xC7, 0x84, 0xC7, 0xFA, 0xC7, 0x79, 0xC7, 0x3B, 0x27, 0x3F, 0x4F, 0x0C, 0x4F, 0xF2, 0x4F, 0x76, 0x4F, 0x89, 0x4F, 0x8D, 0x4E, 0x0B, 0x4E, 0xF7, 0xCF, 0x48, 0xCE, 0x8C, 0x01, 0x17, 0x3A, 0x38, 0x27, 0x3D, 0x37, 0x39, 0xFF, 0x7B, 0x7E, 0x78, 0x41, 0x76, 0x61, 0x76, 0x51, 0x7C, 0x71, 0x74, 0x49, 0x71, 0x69, 0x7E, 0x59, 0x72, 0x79, 0x72, 0x45, 0x79, 0x65, 0x71, 0x55, 0x7A, 0x75, 0x7A, 0x4D, 0x75, 0x6D, 0x79, 0x5D, 0x7E, 0x7D, 0x76, 0x43, 0x0D, 0x74, 0x83, 0x8A, 0x9B, 0xF3, 0x5B, 0xDA, 0x5B, 0x9B, 0xDB, 0xCA, 0xDB, 0xCB, 0x3B, 0xBA, 0x3B, 0x5B, 0xA0, 0x1A, 0x5C, 0xDD, 0xD3, 0xDF, 0xDB, 0xDD, 0xD7, 0xDC, 0x5F, 0x3F, 0x30, 0x3C, 0x38, 0x3C, 0xD4, 0x3E, 0xDC, 0x3C, 0x32, 0x01, 0xBE, 0x52, 0xF7, 0x78, 0xF7, 0xC4, 0xFC, 0xE4, 0xF4, 0x54, 0xFF, 0x74, 0xFF, 0xCC, 0xF2, 0xEC, 0xFC, 0xDC, 0xF8, 0xFC, 0xF0, 0xC2, 0xFA, 0xE2, 0xFA, 0xD2, 0xF4, 0xF2, 0xF8, 0xCA, 0xFE, 0xEA, 0xF6, 0xDA, 0xFC, 0xFA, 0xFC, 0xC6, 0xF1, 0xE6, 0xFE, 0xD6, 0xF2, 0xF6, 0xF2, 0xCE, 0xF9, 0xEE, 0x01, 0x78, 0xC5, 0xEB, 0x07, 0xD7, 0x87, 0xD7, 0x47, 0xFB, 0xC7, 0xDB, 0xE7, 0xAF, 0x4F, 0xEF, 0xCF, 0x8E, 0xCF, 0x8F, 0x2F, 0x9E, 0x2F, 0x9F, 0xAF, 0xCE, 0xAF, 0xCF, 0xAF, 0xFF, 0xFD, 0x00, 0xFE, 0xF3, 0x81, 0xF8, 0x81, 0x74, 0x83, 0x7C, 0x81, 0xF2, 0x81, 0xFA, 0x81, 0x76, 0xFF, 0x0F, 0x16, 0xED, 0x01, 0xC1, 0x91, 0x34, 0x0C, 0xC0, 0x70, 0xC7, 0x29, 0xAB, 0x6D, 0xDB, 0x76, 0x97, 0x5D, 0xD1, 0x89, 0x3A, 0x36, 0x4F, 0x14, 0xDB, 0x27, 0xDA, 0x7F, 0x67, 0xE6, 0x14, 0x1F, 0x9E, 0xD7, 0xBE, 0x60, 0x67, 0x41, 0x2B, 0x58, 0x75, 0x2C, 0x38, 0x58, 0xC7, 0xAF, 0xA3, 0x0A, 0x76, 0x04, 0xD6, 0xF9, 0xEB, 0xAC, 0xBA, 0x16, 0x5C, 0xAC, 0xEB, 0xD7, 0x55, 0x75, 0xDB, 0xDC, 0x9C, 0x3B, 0xEC, 0xAE, 0x79, 0x6C, 0x1E, 0xCE, 0x13, 0xF6, 0xD4, 0xBC, 0x36, 0x2F, 0xE7, 0x0D, 0x7B, 0x6B, 0x90, 0x0D, 0xE2, 0xA0, 0x30, 0x54, 0x83, 0xED, 0x30, 0x0F, 0x47, 0xE0, 0x3A, 0x62, 0x47, 0x78, 0x24, 0x82, 0xD4, 0x51, 0x3B, 0xCA, 0xA3, 0x11, 0xB4, 0x8E, 0xD9, 0x31, 0x1E, 0x8B, 0x60, 0x75, 0xDC, 0x81, 0x0B, 0x78, 0x14, 0x6F, 0x10, 0x0E, 0x42, 0x20, 0xA2, 0x44, 0x83, 0x74, 0x90, 0x02, 0x19, 0x25, 0x1B, 0x94, 0x83, 0x12, 0xA8, 0x28, 0xD5, 0xA0, 0x9D, 0xB4, 0x48, 0xC7, 0xE8, 0x26, 0xE3, 0x64, 0x44, 0x26, 0xC6, 0x34, 0x17, 0x9D, 0xC0, 0x0A, 0x62, 0x8B, 0x4D, 0x50, 0xFC, 0x89, 0x4B, 0xB1, 0xA5, 0xE6, 0xB2, 0x0B, 0xFC, 0x08, 0xE2, 0xCB, 0xAD, 0x15, 0xD7, 0x8A, 0xB4, 0x12, 0x5F, 0x69, 0xAD, 0xBA, 0x56, 0xA5, 0xD5, 0xF8, 0x6A, 0x6B, 0xCD, 0xB5, 0x26, 0xAD, 0xC5, 0xD7, 0x5A, 0x40, 0x0A, 0xE4, 0xF5, 0xC4, 0x7A, 0x7B, 0xC3, 0xBD, 0x21, 0x6F, 0x24, 0x36, 0xDA, 0x9B, 0xEE, 0x4D, 0x79, 0x33, 0xB1, 0xD9, 0xDE, 0x72, 0x6F, 0xC9, 0x5B, 0x89, 0xAD, 0xF6, 0xB6, 0x67, 0x5B, 0xD9, 0x4E, 0x6E, 0x77, 0x76, 0x3C, 0x3B, 0xCA, 0x4E, 0x72, 0xA7, 0xB3, 0xEB, 0xD9, 0x55, 0x76, 0x93, 0xBB, 0x1D, 0x20, 0x05, 0xCA, 0x5E, 0x72, 0xAF, 0xB3, 0xEF, 0xDD, 0x57, 0xF7, 0x53, 0xFB, 0xDD, 0x03, 0xEF, 0x81, 0x7A, 0x90, 0x3A, 0xE8, 0x1E, 0x7A, 0x0F, 0xD5, 0xC3, 0xD4, 0x61, 0xF7, 0xC8, 0x7B, 0xA4, 0x1E, 0xA5, 0x8E, 0xBA, 0xC7, 0xD0, 0xB1, 0x76, 0x9C, 0x3E, 0xEE, 0x9D, 0x40, 0x27, 0x1A, 0xD0, 0x82, 0xDE, 0x29, 0x74, 0xAA, 0x9D, 0xA6, 0xC1, 0xAF, 0x00, 0x3A, 0xD3, 0xCE, 0xD2, 0x67, 0xBD, 0x73, 0xF8, 0x5C, 0x07, 0x05, 0x40, 0xFF, 0x02, 0xBE, 0xD0, 0x2F, 0x32, 0x17, 0xFD, 0x4B, 0xF8, 0x52, 0xBF, 0xCC, 0x5C, 0xF6, 0xAF, 0xE0, 0x2B, 0xFD, 0x2A, 0x73, 0xD5, 0xBF, 0x46, 0xAE, 0x8D, 0xEB, 0xEC, 0xF5, 0xE0, 0x06, 0xB9, 0x31, 0x6E, 0xB2, 0x37, 0x83, 0x5B, 0xE4, 0xD6, 0xB8, 0xCD, 0x02, 0x33, 0x40, 0xEE, 0x8C, 0xBB, 0xEC, 0xDD, 0xE0, 0x1E, 0xBD, 0x37, 0xEF, 0x73, 0xF7, 0xC3, 0x07, 0x14, 0xFC, 0x0D, 0x72, 0x0F, 0xC3, 0x47, 0xF4, 0xD1, 0x7C, 0xCC, 0x3D, 0x0E, 0x9F, 0xD0, 0x27, 0xF3, 0x29, 0xF7, 0x34, 0x7C, 0xC6, 0x9E, 0xAD, 0xE7, 0xFC, 0xF3, 0xE8, 0x05, 0x7B, 0xB1, 0x5E, 0xF2, 0x2F, 0xA3, 0x57, 0x0C, 0xF8, 0x7F, 0xFE, 0x75, 0xF4, 0x86, 0xBD, 0x59, 0x6F, 0xF9, 0xB7, 0x11, 0x90, 0x03, 0xDF, 0x7B, 0xE1, 0x7D, 0xFC, 0x81, 0x7F, 0xF8, 0x3E, 0x0A, 0x1F, 0xE3, 0x4F, 0xFC, 0xD3, 0xF7, 0x59, 0xF8, 0x1C, 0x03, 0x3B, 0xF0, 0x7D, 0x15, 0xBE, 0xC6, 0xDF, 0xC4, 0xB7, 0xFF, 0xBB, 0xF8, 0x3D, 0xF9, 0x21, 0xFE, 0x6D, 0x00, 0x04, 0xEB, 0x67, 0x8B, 0xEC, 0x84, 0x23, 0x38, 0x3F, 0x57, 0xE4, 0x26, 0x3C, 0xC9, 0x07, 0xF8, 0x12, 0x3F, 0x15, 0x48, 0x21, 0x20, 0x94, 0x84, 0xA9, 0x48, 0x8A, 0x01, 0xB1, 0x24, 0x4E, 0x25, 0x52, 0x0A, 0x48, 0x25, 0x69, 0x2A, 0x53, 0x72, 0x50, 0x2E, 0xCB, 0x33, 0x85, 0x52, 0x82, 0x4A, 0x59, 0x99, 0xA9, 0x94, 0x1A, 0x54, 0xCB, 0xEA, 0x4C, 0xA3, 0xB4, 0xA0, 0x56, 0xD6, 0x66, 0x3A, 0x0D, 0xEC, 0xBF, 0xA2, 0xCF, 0x0D, 0xDA, 0x08, 0x19, 0x15, 0x63, 0x6E, 0xD2, 0x66, 0x08, 0x18, 0xC2, 0xDC, 0xA2, 0xAD, 0x90, 0x55, 0xB1, 0xE6, 0xFF, 0xB1, 0x64, 0x0E, 0x06, 0x8C, 0x44, 0x01, 0x14, 0x2C, 0x22, 0x76, 0x52, 0x50, 0xB8, 0xFC, 0x5A, 0xC4, 0xB6, 0xED, 0x06, 0x62, 0xE7, 0x6A, 0x8A, 0x9D, 0x4E, 0xCE, 0x55, 0xBC, 0x37, 0x33, 0x0E, 0x85, 0x83, 0x72, 0x8C, 0x1C, 0x07, 0xA7, 0xC2, 0x49, 0x39, 0x47, 0xCE, 0x83, 0x4B, 0xE1, 0xA2, 0x5C, 0x23, 0xD7, 0xC1, 0xAD, 0x70, 0x53, 0xEE, 0x91, 0xFB, 0xE0, 0x51, 0x7A, 0x68, 0xCF, 0xD8, 0x73, 0xA4, 0x94, 0x14, 0x4D, 0x8D, 0xA9, 0x23, 0xAD, 0xA4, 0x69, 0x7A, 0x4C, 0x1F, 0x19, 0x25, 0x43, 0x33, 0x63, 0xE6, 0xC8, 0xAA, 0x58, 0x86, 0x9D, 0xB0, 0x27, 0x4E, 0xC5, 0x31, 0xDC, 0x84, 0x3B, 0xF1, 0x2A, 0x9E, 0xE1, 0x27, 0xFC, 0x09, 0xA8, 0x00, 0x03, 0x26, 0xE0, 0x04, 0xD5, 0x90, 0x85, 0x53, 0x78, 0x46, 0x6A, 0xC4, 0xA2, 0x29, 0x3A, 0x63, 0x35, 0x66, 0xF1, 0x14, 0x9F, 0x89, 0x9A, 0xB0, 0x64, 0x4A, 0xCE, 0x82, 0x46, 0xE0, 0x84, 0x99, 0x70, 0x11, 0x35, 0x22, 0x27, 0xCE, 0xC4, 0x8B, 0xA4, 0x91, 0x38, 0x69, 0x26, 0x5D, 0x64, 0x8D, 0xCC, 0xC9, 0x33, 0xF9, 0xE2, 0xD5, 0x7A, 0x79, 0xEF, 0xDC, 0x7B, 0xF5, 0x69, 0x7D, 0xBC, 0x6F, 0xEE, 0xBB, 0xFA, 0xB5, 0x7E, 0xDE, 0x3F, 0xF7, 0x5F, 0x03, 0xDA, 0x00, 0x1F, 0x98, 0x07, 0xAE, 0x41, 0x5D, 0x10, 0x04, 0x17, 0xC1, 0x5B, 0x48, 0x17, 0x02, 0xA1, 0x45, 0xE8, 0x16, 0xD6, 0x85, 0x41, 0x78, 0x11, 0xBE, 0x45, 0x74, 0x11, 0x10, 0x59, 0x44, 0x6E, 0x51, 0x7D, 0x14, 0x46, 0x97, 0xD1, 0x7B, 0x4C, 0x1F, 0x83, 0xB1, 0x65, 0xEC, 0x1E, 0xD7, 0xC7, 0x61, 0x7C, 0x19, 0xBF, 0x27, 0xF4, 0x09, 0x98, 0x58, 0x26, 0xEE, 0x49, 0x43, 0x12, 0x25, 0x57, 0xC9, 0x47, 0xCA, 0x90, 0x42, 0xA9, 0x55, 0xEA, 0x91, 0x36, 0xA4, 0x51, 0x7A, 0x95, 0x7E, 0x64, 0x0C, 0x19, 0x94, 0x59, 0x65, 0x1E, 0x59, 0x63, 0x16, 0x67, 0xD7, 0xD9, 0x67, 0xCE, 0x98, 0xC3, 0xB9, 0x75, 0xEE, 0x99, 0x37, 0xE6, 0x71, 0x7E, 0x9D, 0x7F, 0x16, 0x8C, 0x05, 0x5C, 0x58, 0x17, 0x9E, 0x45, 0x53, 0x91, 0x14, 0x37, 0xC5, 0x57, 0xC9, 0x54, 0x22, 0xA5, 0x4D, 0xE9, 0x55, 0x36, 0x95, 0x49, 0x79, 0x53, 0x7E, 0x55, 0x4C, 0x15, 0x52, 0xD9, 0x54, 0x5E, 0x55, 0x73, 0x55, 0xA8, 0x6E, 0xAB, 0xEF, 0x9A, 0xB9, 0x26, 0xD4, 0xB6, 0xB5, 0x77, 0xDD, 0x5C, 0x17, 0xEA, 0xDB, 0xDF, 0x3D, 0xC1, 0xDC, 0x10, 0x1A, 0xDB, 0xC6, 0xBB, 0x69, 0x69, 0x8A, 0xCD, 0x5D, 0xF3, 0xD3, 0xB2, 0xB4, 0xC4, 0xD6, 0xEE, 0xFF, 0x07, 0xD8, 0xB5, 0x3F, 0x1D, 0x4B, 0x47, 0xEC, 0xEC, 0x3A, 0x9F, 0xAE, 0xB5, 0x2B, 0x75, 0xF7, 0xDD, 0x6F, 0xCF, 0xDA, 0x93, 0x7A, 0xFB, 0xDE, 0xB7, 0x6F, 0xED, 0x4B, 0xFD, 0x7D, 0xFF, 0x3B, 0xB0, 0x0E, 0xA4, 0xC1, 0x7E, 0xF0, 0x1D, 0xDA, 0x86, 0xF2, 0xF0, 0xC7, 0xF0, 0x17, 0x4F, 0xE6, 0x60, 0xF6, 0x48, 0x00, 0x40, 0xC1, 0x56, 0xFE, 0xD8, 0x68, 0x29, 0x36, 0xAA, 0x88, 0x6D, 0x27, 0x6B, 0xC7, 0x36, 0x0B, 0x89, 0x8D, 0x12, 0x6E, 0x3F, 0x5D, 0x15, 0xEF, 0xCD, 0xCC, 0xDE, 0xCB, 0xF1, 0x6A, 0xBC, 0x80, 0x77, 0xEF, 0xE3, 0xF8, 0x34, 0x3E, 0xC0, 0xB7, 0xF7, 0x73, 0xFC, 0x1A, 0x3F, 0xE0, 0xDF, 0x07, 0xB8, 0x01, 0x6D, 0x00, 0x0C, 0x1C, 0x82, 0x5C, 0xB6, 0x27, 0x80, 0xC1, 0x43, 0x88, 0x1B, 0xD2, 0x86, 0xC0, 0xD0, 0x21, 0xCC, 0x0D, 0x6B, 0xC3, 0x60, 0xF8, 0x10, 0xE1, 0x45, 0x74, 0x11, 0x28, 0x72, 0x8C, 0xF2, 0xA2, 0xBA, 0x28, 0x14, 0x3D, 0xC6, 0x78, 0x31, 0x5D, 0x0C, 0x8A, 0x1D, 0xE3, 0xBC, 0xB8, 0x2E, 0x0E, 0xC5, 0x8F, 0x09, 0x7E, 0x42, 0x9F, 0x80, 0x13, 0xA7, 0x24, 0x3F, 0xA9, 0x4F, 0xC2, 0xC9, 0x13, 0x6B, 0x2C, 0xF4, 0x29, 0x38, 0x75, 0x4A, 0xF3, 0xD3, 0xFA, 0x34, 0x9C, 0x3E, 0xB1, 0x3D, 0xC1, 0x90, 0x41, 0x32, 0xE7, 0xAC, 0x20, 0x6B, 0xC8, 0x22, 0xD9, 0x73, 0x4E, 0x90, 0x33, 0xE4, 0x90, 0xDC, 0x39, 0x2F, 0xC8, 0x1B, 0xF2, 0x48, 0xFE, 0x5C, 0x10, 0x16, 0x8C, 0x05, 0xB4, 0x70, 0x29, 0x0A, 0x8B, 0xC6, 0x22, 0x5A, 0xBC, 0x94, 0x84, 0x25, 0x63, 0x09, 0x2D, 0x5D, 0xCA, 0xC2, 0xB2, 0xB1, 0x8C, 0x96, 0x2F, 0x15, 0x51, 0xC5, 0x54, 0xC1, 0x2A, 0xD7, 0xAA, 0xA8, 0x6A, 0xAA, 0x62, 0xD5, 0x6B, 0x4D, 0x54, 0x33, 0xD5, 0xB0, 0xDA, 0x15, 0x10, 0x01, 0x26, 0x00, 0x03, 0xAE, 0xA0, 0x18, 0x34, 0x83, 0x38, 0x78, 0x83, 0xC4, 0x90, 0x19, 0xC2, 0xA1, 0x1B, 0x2C, 0x86, 0xCD, 0x30, 0x0E, 0xDF, 0x10, 0x31, 0x62, 0x46, 0x70, 0xE4, 0x86, 0x4A, 0x50, 0x0B, 0x4A, 0xA0, 0x77, 0x4C, 0x82, 0x59, 0x30, 0x02, 0xBB, 0xE3, 0x12, 0xDC, 0x82, 0x13, 0xF8, 0x9D, 0x90, 0x10, 0x16, 0x82, 0x20, 0xEE, 0xA4, 0x94, 0xB4, 0x92, 0x24, 0xF9, 0xA0, 0xA4, 0x94, 0x95, 0x22, 0xA9, 0x07, 0x2D, 0xA5, 0xAD, 0x34, 0x49, 0x3F, 0x18, 0x29, 0x63, 0x65, 0x48, 0xE6, 0x51, 0x97, 0xD5, 0x6D, 0x75, 0xAA, 0xFE, 0x6C, 0xC8, 0x1A, 0xB6, 0x06, 0xD5, 0x78, 0x36, 0x65, 0x4D, 0x5B, 0x93, 0x6A, 0x3E, 0x5B, 0xB2, 0x96, 0xAD, 0x45, 0xB5, 0x9E, 0x6D, 0x79, 0xDB, 0xDE, 0xA6, 0xDB, 0xAF, 0x8E, 0xBC, 0x63, 0xEF, 0xD0, 0x9D, 0x57, 0x57, 0xDE, 0xB5, 0x77, 0xE9, 0xEE, 0xAB, 0x27, 0xEF, 0xD9, 0x7B, 0x74, 0xEF, 0xD5, 0x57, 0xF4, 0x1D, 0x7D, 0xA6, 0xFF, 0x1E, 0x28, 0x06, 0x8E, 0x01, 0xC3, 0xF6, 0x04, 0xC5, 0xD0, 0x31, 0x64, 0x86, 0xEF, 0x91, 0x62, 0xE4, 0x18, 0x31, 0xA3, 0xF7, 0x58, 0x39, 0x76, 0x8E, 0xEB, 0xE3, 0xCF, 0x44, 0x39, 0x71, 0x4E, 0xEA, 0x93, 0xCF, 0x54, 0x39, 0x75, 0x4E, 0xEB, 0xD3, 0xCF, 0x4C, 0x39, 0x73, 0xCE, 0xEA, 0xB3, 0xCF, 0x5C, 0x35, 0x77, 0xCD, 0x1B, 0xAC, 0x0B, 0x51, 0x2D, 0x5C, 0x8B, 0xC6, 0xE2, 0xFB, 0xFF, 0x05, 0xA8, 0x56, 0xAE, 0x55, 0x63, 0xF5, 0x5D, 0xAB, 0xD7, 0xEE, 0x75, 0x73, 0xFD, 0xDB, 0xA8, 0x37, 0xEE, 0x4D, 0x73, 0xF3, 0xDB, 0xAA, 0xB7, 0xEE, 0x6D, 0x73, 0xFB, 0xDB, 0xA9, 0x77, 0xEE, 0x5D, 0x73, 0xF7, 0xFB, 0x47, 0x10, 0x3C, 0x60, 0x29, 0x14, 0x05, 0x00, 0x00, 0x5D, 0x53, 0x76, 0xB3, 0xA6, 0xEC, 0xF6, 0x94, 0xDD, 0x71, 0xB6, 0x6D, 0xFB, 0xF3, 0xF9, 0x9F, 0xB9, 0xB7, 0xA2, 0xAA, 0x38, 0x2A, 0xB1, 0x0A, 0x57, 0x55, 0x55, 0x1D, 0xD5, 0x58, 0x95, 0xAB, 0xA9, 0x6A, 0x8E, 0x5A, 0xAC, 0xC6, 0xD5, 0x55, 0x75, 0x47, 0x3D, 0x56, 0xE7, 0x1A, 0xEA, 0x86, 0xB3, 0x11, 0x6F, 0xF0, 0x4D, 0x75, 0xD3, 0xD9, 0x8C, 0x37, 0xF9, 0x96, 0xBA, 0xE5, 0x6C, 0xC5, 0x5B, 0x7C, 0x5B, 0xDD, 0x76, 0xB6, 0xE3, 0x6D, 0xBE, 0xA3, 0xE9, 0xB8, 0x3A, 0x89, 0x8E, 0xD0, 0xD5, 0x74, 0x5D, 0xDD, 0x44, 0x57, 0xE8, 0x69, 0x7A, 0xAE, 0x5E, 0xA2, 0x27, 0xF4, 0x35, 0x7D, 0x57, 0x3F, 0xD1, 0x17, 0x06, 0xDA, 0x81, 0x7B, 0x90, 0x1C, 0x88, 0x43, 0xED, 0xD0, 0x3D, 0x4C, 0x0E, 0xC5, 0x91, 0x76, 0xE4, 0x1E, 0x25, 0x47, 0xE2, 0x58, 0x3B, 0x76, 0x8F, 0x93, 0x63, 0x71, 0xA2, 0x9B, 0x78, 0x26, 0xA9, 0x89, 0x34, 0xD5, 0x4D, 0x3D, 0xD3, 0xD4, 0x54, 0x9A, 0xE9, 0x66, 0x9E, 0x59, 0x6A, 0x26, 0xCD, 0x75, 0x73, 0xCF, 0x3C, 0x35, 0x97, 0x16, 0xFA, 0x85, 0x77, 0x91, 0x5E, 0xC8, 0x4B, 0xFD, 0xD2, 0xBB, 0x4C, 0x2F, 0xE5, 0x95, 0x7E, 0xE5, 0x5D, 0xA5, 0x57, 0xF2, 0x5A, 0xBF, 0xF6, 0xAE, 0xD3, 0x6B, 0x79, 0x63, 0xD8, 0xF8, 0x36, 0x99, 0x0D, 0xD8, 0x1A, 0xB6, 0xBE, 0x6D, 0x66, 0x0B, 0x76, 0x86, 0x9D, 0x6F, 0x97, 0xD9, 0x81, 0xBD, 0x61, 0xEF, 0xDB, 0x67, 0xF6, 0xE0, 0x60, 0x3C, 0xF8, 0x0F, 0xD9, 0x03, 0x3C, 0x1A, 0x8F, 0xFE, 0x63, 0xF6, 0x08, 0x4F, 0xC6, 0x93, 0xFF, 0x94, 0x3D, 0xC1, 0xB3, 0xF1, 0xEC, 0x3F, 0x67, 0xCF, 0xF0, 0x62, 0xBA, 0x04, 0x2E, 0xB9, 0x0B, 0xBA, 0x9A, 0xAE, 0x81, 0x6B, 0xEE, 0x8A, 0x6E, 0xA6, 0x5B, 0xE0, 0x96, 0xBB, 0xA1, 0xBB, 0xE9, 0x1E, 0xB8, 0xE7, 0xEE, 0xE8, 0x61, 0x7E, 0x04, 0x1F, 0xF9, 0x07, 0x7E, 0x9A, 0x9F, 0xC1, 0x67, 0xFE, 0x89, 0x5F, 0xE6, 0x57, 0xF0, 0x95, 0x7F, 0xE1, 0xB7, 0xF9, 0x1D, 0x7C, 0xE7, 0xDF, 0xF8, 0x63, 0xF9, 0x84, 0x3E, 0x85, 0x0F, 0xF9, 0x5A, 0xBE, 0xA1, 0x6F, 0xE1, 0x4B, 0x7E, 0x96, 0x5F, 0xE8, 0x57, 0xF8, 0x11, 0xCE, 0xC2, 0x85, 0xB8, 0x02, 0x47, 0x78, 0x2B, 0x1F, 0xE6, 0x8B, 0x3C, 0x15, 0xAC, 0x42, 0x58, 0x28, 0x0A, 0x54, 0xB4, 0x8A, 0x61, 0xB1, 0x28, 0x52, 0xC9, 0x2A, 0x85, 0xA5, 0xA2, 0x44, 0x65, 0x9B, 0x1C, 0x91, 0x4B, 0x32, 0x03, 0x36, 0x10, 0x01, 0x25, 0xC0, 0xA0, 0x0D, 0x46, 0x60, 0x09, 0x32, 0x64, 0x43, 0x11, 0x54, 0x42, 0x0C, 0xDB, 0x71, 0x14, 0x97, 0xB1, 0x42, 0xEC, 0x24, 0x4A, 0xCA, 0x44, 0xA1, 0x76, 0x1A, 0xA5, 0x65, 0xAA, 0x30, 0x3B, 0x8B, 0xB2, 0x32, 0x53, 0x94, 0x3F, 0xE5, 0x9F, 0x5D, 0xFB, 0x70, 0xCB, 0xF1, 0xFF, 0xDF, 0x07, 0x7E, 0x96, 0x06, 0xED, 0x90, 0xCC, 0x94, 0x32, 0x52, 0x08, 0xD1, 0x9E, 0x54, 0x46, 0x66, 0x46, 0x99, 0x45, 0x76, 0xC8, 0xC8, 0xC8, 0x5B, 0xDB, 0x4E, 0x49, 0x46, 0x1A, 0x1A, 0xCA, 0xCA, 0xAA, 0xEC, 0x55, 0x08, 0x65, 0xEF, 0x91, 0xEC, 0x4D, 0x56, 0xB2, 0xAB, 0xF3, 0xD7, 0xF3, 0xB8, 0x8F, 0xDF, 0x5F, 0xF1, 0xFD, 0x58, 0x8F, 0xEB, 0xBC, 0xD7, 0xF9, 0xD2, 0x7A, 0x5E, 0xD7, 0xEB, 0xB8, 0xC3, 0x6B, 0x0B, 0x6B, 0x49, 0x17, 0x86, 0xB3, 0xF0, 0x7F, 0xF3, 0xFF, 0x7F, 0xF3, 0xFF, 0x7F, 0xF3, 0xFF, 0x7F, 0xF3, 0xFF, 0x7F, 0xF3, 0xFF, 0x7F, 0xF3, 0xFF, 0x7F, 0xF3, 0xFF, 0xFF, 0xE2, 0xFC, 0x27, 0x87, 0xA4, 0x03, 0x1E, 0xFF, 0x91, 0xDD, 0x4C, 0x81, 0xD1, 0x15, 0x24, 0x00, 0xCC, 0x6F, 0x2D, 0xDA, 0x7D, 0x9B, 0x1A, 0x28, 0xFA, 0x66, 0x8F, 0x8D, 0x15, 0xA7, 0x77, 0xF7, 0x9B, 0x23, 0x26, 0x24, 0x0E, 0x49, 0x14, 0x53, 0xCB, 0x87, 0xDC, 0x14, 0xB3, 0x47, 0x0E, 0x3A, 0x25, 0x16, 0xBC, 0xED, 0x77, 0x86, 0x6C, 0x6C, 0x54, 0xD5, 0xCA, 0xD9, 0xAA, 0xDA, 0x0E, 0x20, 0xFB, 0x64, 0x3D, 0x7A, 0x22, 0x06, 0x9E, 0x3E, 0xFF, 0x4D, 0x9C, 0xF3, 0xF9, 0x70, 0x4B, 0xF1, 0xBF, 0x8E, 0x3B, 0x2F, 0x89, 0x51, 0xD9, 0xA9, 0xBB, 0xC5, 0xE5, 0xD5, 0xE4, 0xF4, 0x46, 0x80, 0xED, 0x67, 0xB2, 0x9F, 0x27, 0x30, 0x2C, 0x8B, 0x04, 0x80, 0x45, 0x3B, 0xC5, 0x8E, 0xAE, 0xF3, 0x0C, 0xC4, 0x61, 0x3E, 0x13, 0x29, 0x06, 0xAA, 0x8F, 0x8A, 0x15, 0xE3, 0x7B, 0xF9, 0xCC, 0x12, 0x53, 0xAE, 0xFA, 0x54, 0x88, 0xD9, 0x29, 0x43, 0x52, 0xC4, 0xD3, 0x16, 0xDE, 0x9E, 0x64, 0xF3, 0xD4, 0xBF, 0x95, 0xF6, 0xA9, 0x9F, 0x0C, 0x01, 0xD2, 0xDF, 0xF4, 0xBA, 0x9B, 0x38, 0xB7, 0xE6, 0x78, 0xB4, 0x18, 0x96, 0x99, 0xAB, 0x29, 0x2E, 0xFB, 0x9E, 0xA6, 0x22, 0xAE, 0x5E, 0x9D, 0x50, 0x23, 0xAE, 0xFD, 0x48, 0x2E, 0xBA, 0x05, 0x74, 0x5D, 0x48, 0x0E, 0x9B, 0x02, 0x0C, 0x9B, 0x42, 0x1A, 0x03, 0x98, 0x53, 0x4A, 0x02, 0xFA, 0xDF, 0xC2, 0xEE, 0x8B, 0xBD, 0x2F, 0xCD, 0xB5, 0x11, 0x03, 0x1E, 0x05, 0x3C, 0x22, 0xF5, 0xDC, 0x57, 0x7F, 0x1C, 0xEC, 0x2E, 0x39, 0x79, 0xC4, 0x88, 0x71, 0x62, 0xF6, 0x33, 0x9F, 0xC3, 0xE2, 0x55, 0xBD, 0xC1, 0xCB, 0xC8, 0x16, 0x7B, 0x48, 0x57, 0x94, 0x3B, 0x41, 0xFA, 0xBD, 0x8B, 0xC6, 0x8B, 0x11, 0xCF, 0xF6, 0xEE, 0x17, 0x57, 0x85, 0xA7, 0xC5, 0x88, 0x71, 0x1B, 0xE3, 0xBB, 0x89, 0xEB, 0x67, 0x47, 0x8D, 0x15, 0x37, 0x4C, 0x23, 0x23, 0x6D, 0x81, 0x2E, 0x4E, 0xA4, 0x5F, 0x2D, 0x30, 0x62, 0x1B, 0xE9, 0x3D, 0x5A, 0x65, 0x71, 0xE0, 0x62, 0x12, 0x50, 0xBD, 0xB1, 0xEC, 0x86, 0x68, 0xB7, 0x28, 0xAC, 0xB7, 0xE8, 0x8F, 0x99, 0x09, 0xE2, 0xFC, 0xB1, 0xFE, 0xBD, 0xC4, 0xA4, 0xBB, 0xBE, 0xF7, 0xC4, 0x1C, 0xCB, 0x11, 0xED, 0xC4, 0xC7, 0x4B, 0x87, 0x36, 0xFF, 0x91, 0x02, 0x90, 0x33, 0xED, 0x2F, 0xAB, 0x8B, 0xD1, 0x26, 0x79, 0xA7, 0xC5, 0xB5, 0x1B, 0xD2, 0xFE, 0x13, 0x13, 0xDD, 0x62, 0xC7, 0x8B, 0x9B, 0x35, 0xC3, 0xAB, 0xC4, 0xA4, 0x8C, 0x90, 0x4F, 0x62, 0xF2, 0x75, 0x32, 0xB6, 0x18, 0xB0, 0xB0, 0x24, 0x17, 0xAA, 0x00, 0x7D, 0xB3, 0x49, 0x7F, 0x28, 0xF5, 0x09, 0xE8, 0x43, 0x36, 0x2F, 0x00, 0x62, 0x56, 0x93, 0xC6, 0xE8, 0x36, 0x3B, 0x02, 0x24, 0xE0, 0xD3, 0x20, 0x7C, 0xAD, 0x38, 0x3B, 0x7A, 0x96, 0xB5, 0x98, 0xF4, 0xD5, 0xEF, 0x89, 0x98, 0xB3, 0xCC, 0xB7, 0x56, 0x1E, 0xF7, 0x6B, 0x92, 0x5B, 0x93, 0x47, 0x5D, 0x20, 0xFD, 0x53, 0x0F, 0x07, 0x89, 0xEB, 0x9B, 0xA6, 0x29, 0xFA, 0x4E, 0xAF, 0xFC, 0x23, 0xA6, 0xDA, 0x2E, 0xB1, 0x11, 0xB7, 0x3A, 0xCE, 0x5E, 0x24, 0xA6, 0xBF, 0x9E, 0x32, 0x1B, 0xF3, 0xC8, 0x8C, 0x79, 0xE4, 0xC6, 0xEE, 0x40, 0x87, 0x0D, 0xE4, 0xCA, 0xD6, 0x80, 0xAB, 0x29, 0x39, 0xEB, 0x2A, 0xE0, 0xBF, 0x99, 0x1C, 0x7B, 0x42, 0xBF, 0xC9, 0x9C, 0x26, 0x24, 0xD0, 0xA0, 0xD7, 0xA6, 0x6C, 0xD1, 0x15, 0x71, 0x19, 0x62, 0xD0, 0xC7, 0x88, 0xE3, 0xE2, 0x7A, 0xFB, 0xA9, 0xFE, 0x62, 0xCE, 0xE7, 0x31, 0xB3, 0x45, 0x72, 0x71, 0xE1, 0xE9, 0xBB, 0xE2, 0xA6, 0xB0, 0xD4, 0x16, 0x62, 0x7A, 0xCE, 0x8A, 0x24, 0xB5, 0xD1, 0x64, 0xE6, 0x89, 0x85, 0x6A, 0xF5, 0x9E, 0x91, 0xDB, 0x9E, 0x06, 0x99, 0xA9, 0x3C, 0x21, 0xB3, 0x9F, 0xF8, 0x03, 0x20, 0x73, 0xEE, 0xFA, 0x43, 0xD7, 0x95, 0xCC, 0xCA, 0x21, 0xD3, 0x4E, 0x00, 0xED, 0x0C, 0xC8, 0x0D, 0xF5, 0x01, 0xE7, 0xB6, 0x64, 0x04, 0x80, 0xF1, 0x36, 0xE4, 0xBC, 0xB1, 0xC0, 0x7C, 0x6F, 0xB2, 0xBB, 0x15, 0x90, 0x68, 0x45, 0xA2, 0x83, 0x59, 0x5C, 0x3A, 0x49, 0x60, 0x4C, 0xF0, 0xC6, 0x64, 0x31, 0x02, 0x31, 0xDE, 0xE2, 0xF6, 0xD1, 0xFE, 0xB8, 0x2F, 0xFD, 0x4C, 0x1E, 0xBA, 0x7B, 0x9E, 0xE5, 0x30, 0x32, 0x63, 0x78, 0x78, 0x6D, 0x03, 0x92, 0xBB, 0x6A, 0xE7, 0x6C, 0xD0, 0xAC, 0x47, 0xE6, 0xD6, 0xF3, 0x87, 0xD2, 0xEB, 0x3A, 0x2B, 0xFC, 0xD1, 0x38, 0x95, 0xDC, 0x91, 0x34, 0xDE, 0xCA, 0x18, 0x64, 0xB6, 0xBD, 0x3F, 0x3A, 0x6E, 0x20, 0x33, 0x9C, 0xC9, 0x6D, 0x1D, 0x80, 0x76, 0x7D, 0xC9, 0x74, 0x02, 0xF6, 0xE9, 0x64, 0xAA, 0x35, 0x30, 0xF4, 0x29, 0xB9, 0xAA, 0x04, 0x98, 0x33, 0x5E, 0xB1, 0xAE, 0x65, 0xD9, 0x64, 0xBF, 0xFE, 0x80, 0x62, 0x1D, 0xDD, 0x3E, 0xEC, 0xDB, 0x28, 0x2E, 0xEA, 0xB6, 0x6D, 0x84, 0x98, 0x13, 0xB8, 0xE1, 0x7D, 0x3A, 0x0D, 0xE2, 0xC9, 0xFC, 0x2F, 0xD3, 0x01, 0x90, 0x47, 0x0A, 0xFD, 0xA1, 0x71, 0x84, 0x2C, 0x38, 0xDF, 0x5F, 0x15, 0x10, 0xDD, 0xC6, 0x8A, 0x79, 0x19, 0x8E, 0x6D, 0xC5, 0xFD, 0xEC, 0xE9, 0x2A, 0xEE, 0xAB, 0xEC, 0x3A, 0x4C, 0xDC, 0xFB, 0x89, 0xDC, 0x7D, 0x13, 0x30, 0x5D, 0x4E, 0xEE, 0x5A, 0x0C, 0xD8, 0x19, 0x93, 0x39, 0xA7, 0x80, 0xA1, 0x6B, 0xC8, 0x2C, 0x13, 0x20, 0x48, 0x3E, 0x77, 0xDF, 0x81, 0x88, 0xEF, 0xE4, 0x36, 0x77, 0xBD, 0xA1, 0xEB, 0x86, 0x90, 0x09, 0x0F, 0x80, 0xDD, 0xE3, 0xC9, 0x44, 0x9F, 0x56, 0xC6, 0xA7, 0x5A, 0x3B, 0x1C, 0x02, 0xAE, 0x75, 0xFE, 0xBB, 0xC3, 0xD1, 0x1D, 0x20, 0x2F, 0xF5, 0xB6, 0x3A, 0x2C, 0x16, 0x8E, 0xEA, 0x38, 0x40, 0x3C, 0x31, 0xC3, 0x34, 0x56, 0x3C, 0x3A, 0xDB, 0xA8, 0xBD, 0x78, 0x58, 0xBD, 0x79, 0x43, 0xB1, 0xE0, 0xB7, 0xC1, 0x1F, 0x31, 0xBF, 0x47, 0xC3, 0x51, 0xE2, 0x81, 0x2C, 0x32, 0x2F, 0x1E, 0x30, 0xE9, 0x4A, 0x16, 0xDC, 0x02, 0x6C, 0x1E, 0x90, 0xC7, 0x83, 0x55, 0x27, 0x78, 0x04, 0xD4, 0x99, 0x07, 0x04, 0xDE, 0x26, 0xCF, 0xBF, 0x00, 0x16, 0x4C, 0x20, 0x1F, 0xEF, 0x03, 0x22, 0x8A, 0xFF, 0x5C, 0x24, 0xCD, 0x56, 0xAD, 0xBB, 0xBC, 0xDA, 0x85, 0x04, 0x0A, 0xC6, 0x02, 0xE4, 0xA4, 0xEB, 0x87, 0xFF, 0x02, 0xAE, 0x20, 0xCF, 0xB9, 0x2B, 0xFF, 0x35, 0x3A, 0x40, 0x16, 0x7E, 0x85, 0xB5, 0xE6, 0x69, 0xF2, 0xF4, 0x46, 0x40, 0x6D, 0x27, 0x79, 0xE2, 0x38, 0xA0, 0x32, 0x9A, 0x3C, 0x66, 0x04, 0xD4, 0x6B, 0x4B, 0x1E, 0xBE, 0x59, 0x67, 0x6B, 0xF2, 0xE0, 0x89, 0x3A, 0xD7, 0x92, 0xF9, 0x37, 0xC9, 0xA3, 0xDB, 0x80, 0x56, 0xAF, 0xC8, 0xD3, 0x06, 0x40, 0x77, 0x13, 0xF2, 0xBC, 0x35, 0xD0, 0x5B, 0x93, 0xBC, 0x1E, 0x06, 0x8C, 0x5C, 0x4B, 0x3E, 0xEF, 0xA7, 0xD4, 0x3F, 0x30, 0xF6, 0x77, 0x2B, 0xB2, 0xA9, 0xD1, 0xBC, 0x82, 0xE3, 0x97, 0x49, 0xC3, 0x8E, 0x9B, 0xCD, 0xBD, 0xCD, 0x48, 0xA3, 0xB3, 0x5B, 0xCF, 0xB6, 0x48, 0x22, 0xBD, 0x83, 0x46, 0x27, 0xE9, 0xAE, 0xD9, 0x74, 0x9E, 0xDC, 0xBF, 0x1A, 0x18, 0x74, 0x8D, 0x3C, 0xBA, 0x44, 0xBD, 0x56, 0xD6, 0x75, 0xB8, 0x15, 0x60, 0x69, 0x5D, 0xE7, 0x06, 0xA0, 0x4D, 0x07, 0xF2, 0x50, 0x0F, 0xC0, 0x18, 0x64, 0x81, 0x63, 0xBD, 0xA5, 0xE2, 0x81, 0x6A, 0xF5, 0xD0, 0xD6, 0x7F, 0xC9, 0x7D, 0x79, 0x64, 0x21, 0x81, 0x26, 0x3A, 0x64, 0xF1, 0x5F, 0xC0, 0xEA, 0x2C, 0x79, 0x7D, 0x95, 0xE2, 0xFF, 0xF6, 0x94, 0x40, 0x9F, 0x3C, 0x92, 0xD4, 0xBB, 0x3E, 0xF8, 0xDA, 0x8D, 0x18, 0x12, 0x58, 0xBA, 0xF5, 0xBF, 0x97, 0xE2, 0x46, 0x1F, 0x40, 0x8C, 0xBE, 0xA7, 0x1F, 0x4B, 0xBA, 0xDB, 0x0E, 0x89, 0x05, 0x4A, 0xED, 0xC8, 0x94, 0x73, 0x1A, 0x49, 0x51, 0x55, 0xE4, 0xEE, 0x24, 0xED, 0x0F, 0xFE, 0x59, 0xE4, 0xDE, 0xF7, 0xDA, 0x7F, 0x7D, 0x62, 0xEB, 0x54, 0x7C, 0xBC, 0xB8, 0x5F, 0x47, 0x6B, 0xBA, 0x4B, 0x02, 0xB9, 0x67, 0x9A, 0xE6, 0x55, 0x7B, 0x25, 0x32, 0xF7, 0xAA, 0xA6, 0x67, 0x8F, 0x90, 0x3A, 0x3D, 0xC8, 0x0B, 0xCF, 0xD5, 0x5E, 0x68, 0xF6, 0x26, 0xAF, 0x5B, 0x00, 0x96, 0x65, 0xE4, 0xE3, 0x17, 0x40, 0x8F, 0x4E, 0x24, 0xBB, 0x00, 0xF6, 0xAF, 0x9E, 0x92, 0x04, 0x46, 0x99, 0xED, 0x7A, 0x29, 0x86, 0x67, 0xFB, 0x78, 0x8A, 0x61, 0x27, 0x01, 0x71, 0xE2, 0x2F, 0xED, 0x93, 0xA4, 0xD3, 0x9C, 0x01, 0x75, 0xF9, 0xEF, 0xCE, 0xD7, 0xB9, 0xE1, 0x73, 0x80, 0x7D, 0x9F, 0xC8, 0x2D, 0x47, 0x94, 0xC7, 0x2E, 0x4F, 0x25, 0xB3, 0xC6, 0xA8, 0x6E, 0x0D, 0xEE, 0x49, 0xE6, 0xA4, 0xA9, 0x1D, 0x1E, 0xDF, 0x81, 0xDC, 0x7E, 0x48, 0xED, 0xF1, 0xF0, 0x79, 0x75, 0x96, 0xAB, 0x9D, 0x1B, 0xF0, 0xBE, 0xCE, 0xB3, 0x80, 0xFB, 0x7E, 0x72, 0xC7, 0x64, 0xF2, 0xFA, 0x28, 0xBC, 0xD6, 0x1D, 0x4D, 0x96, 0xEB, 0x03, 0xA6, 0xFD, 0xC9, 0x5F, 0x65, 0x40, 0xDB, 0x8E, 0x9F, 0x32, 0x49, 0xC0, 0xC6, 0xE2, 0xCC, 0x53, 0x71, 0x6C, 0x7C, 0x04, 0xC4, 0x05, 0x9F, 0x8D, 0x21, 0x4E, 0xFD, 0xA0, 0x4F, 0xD2, 0x18, 0x43, 0xA8, 0xA1, 0x47, 0xDA, 0xAF, 0xEA, 0xA7, 0x07, 0x90, 0x99, 0xBB, 0x5D, 0xC2, 0x80, 0x7B, 0xE3, 0x7E, 0x47, 0x47, 0x1D, 0x6F, 0x9E, 0x5D, 0xB0, 0x8A, 0x5C, 0x73, 0x0B, 0x58, 0x67, 0x4D, 0x26, 0x25, 0x02, 0x4B, 0x6A, 0xC9, 0xD4, 0xCF, 0xC0, 0xCC, 0xAD, 0xE4, 0xD6, 0xF3, 0xC0, 0x84, 0x3B, 0x64, 0xFA, 0x47, 0x60, 0xF4, 0xE0, 0x3A, 0x49, 0x3E, 0x7A, 0x0A, 0x68, 0x3F, 0x24, 0x2B, 0x7F, 0x01, 0x8D, 0x4F, 0xFE, 0xA8, 0x24, 0x81, 0x96, 0x47, 0xEF, 0x7C, 0x13, 0x1D, 0x2B, 0x32, 0xBB, 0x88, 0x93, 0x62, 0x02, 0xBE, 0x92, 0x4D, 0xDF, 0xFA, 0xBE, 0x05, 0x24, 0x8F, 0xF7, 0xD1, 0x0A, 0x26, 0xDB, 0x2C, 0xF4, 0x0E, 0x56, 0x73, 0x25, 0x6D, 0x26, 0x79, 0xBA, 0x36, 0x36, 0x25, 0x57, 0x77, 0xB6, 0x36, 0x05, 0xFE, 0x9D, 0x7E, 0xB9, 0xC9, 0xDF, 0x01, 0xB8, 0xBE, 0xFE, 0xDF, 0x90, 0xC5, 0xA7, 0x54, 0x93, 0x0B, 0x0C, 0xC9, 0x65, 0x5B, 0x80, 0xD4, 0xEE, 0xE4, 0xDA, 0x64, 0x60, 0x4D, 0x67, 0x32, 0xA1, 0x04, 0x08, 0x1B, 0x40, 0x6E, 0x58, 0x0C, 0xCC, 0x37, 0x25, 0x37, 0x3D, 0x22, 0x3F, 0x15, 0x01, 0x9A, 0xFD, 0x6A, 0x2C, 0x49, 0x40, 0xAB, 0xE6, 0xE9, 0x6B, 0xD1, 0xB4, 0xE6, 0x44, 0x86, 0xE8, 0x76, 0x20, 0x5C, 0x47, 0xF4, 0xCD, 0x34, 0xAB, 0x11, 0x47, 0xEC, 0x04, 0xC4, 0xE1, 0x05, 0xEA, 0x83, 0x48, 0x33, 0x5B, 0xAF, 0x81, 0xCA, 0x09, 0xA4, 0xB5, 0xAD, 0x7B, 0x82, 0x31, 0xC8, 0x20, 0xB6, 0x8D, 0x05, 0xC8, 0x7D, 0x59, 0x3D, 0x96, 0x03, 0x5F, 0xF8, 0xF9, 0xC2, 0xA8, 0x34, 0xE0, 0xD6, 0x95, 0xEA, 0x83, 0x33, 0x87, 0x01, 0xC7, 0x03, 0xC9, 0x45, 0x5B, 0x94, 0x74, 0x76, 0x0E, 0x27, 0x23, 0x75, 0x80, 0x2D, 0x86, 0xE4, 0xF2, 0xA9, 0xC0, 0xDA, 0x44, 0x72, 0xD5, 0x26, 0xB2, 0x26, 0x17, 0xA8, 0x17, 0xF3, 0x79, 0x0F, 0x65, 0x1D, 0xEB, 0xAF, 0xF8, 0x89, 0xE6, 0xFD, 0xB6, 0x36, 0x23, 0x55, 0x5A, 0xF7, 0x6E, 0xED, 0xF7, 0x93, 0x54, 0x5F, 0xE1, 0xB5, 0xA2, 0x51, 0x14, 0x09, 0xF8, 0x44, 0xD5, 0x3F, 0x4A, 0x36, 0x55, 0xEF, 0x73, 0x54, 0xF9, 0x32, 0x69, 0x5A, 0xCF, 0xFD, 0x32, 0x40, 0x76, 0x75, 0x70, 0x85, 0xE8, 0x0A, 0xDB, 0x41, 0xDA, 0xAF, 0xC9, 0xE4, 0x56, 0x9D, 0x5E, 0x4B, 0xBE, 0xE2, 0xD0, 0xA5, 0x14, 0xF8, 0x5A, 0x50, 0x15, 0x3D, 0xB0, 0x1A, 0x78, 0x30, 0xA2, 0xA6, 0x70, 0xFC, 0x5E, 0xE0, 0xBC, 0x01, 0x7F, 0x4E, 0x2D, 0x02, 0x0E, 0xFE, 0x25, 0xE7, 0xCC, 0x04, 0x76, 0xF8, 0x93, 0x8B, 0xF2, 0xC9, 0xF9, 0x65, 0x80, 0xE9, 0x4D, 0xB2, 0x5F, 0x4F, 0xA0, 0x5F, 0x4F, 0xC5, 0xDC, 0x9F, 0xD8, 0x9B, 0x04, 0xF4, 0x3F, 0x05, 0x07, 0x8B, 0x5E, 0x0F, 0x02, 0xBA, 0x88, 0xFE, 0x18, 0xA1, 0x4A, 0x6A, 0x2B, 0xAD, 0x9C, 0x3A, 0x00, 0x92, 0x93, 0xBB, 0x0F, 0xC9, 0x15, 0xB3, 0x7B, 0x0D, 0x72, 0x14, 0x0B, 0x4A, 0xFB, 0xF5, 0x22, 0x1B, 0x55, 0x7D, 0xFF, 0xEE, 0x94, 0x53, 0x3D, 0x1C, 0x20, 0x3D, 0x9B, 0x3D, 0x7A, 0x2C, 0x4E, 0xD4, 0x3C, 0x7F, 0x53, 0x0C, 0x9E, 0x76, 0x78, 0x80, 0x18, 0x7A, 0x67, 0x67, 0xAC, 0x18, 0x19, 0x9F, 0x7A, 0x48, 0x5C, 0xAE, 0x4C, 0xCA, 0xD7, 0x78, 0xCB, 0x4D, 0xE4, 0x80, 0xD7, 0xC0, 0xC0, 0xF6, 0x64, 0xCF, 0x16, 0xC0, 0xF8, 0x44, 0x12, 0x00, 0xFE, 0xB3, 0x17, 0x7B, 0x05, 0xCE, 0xE8, 0x21, 0x4E, 0xE8, 0x3D, 0xFA, 0x34, 0x69, 0xA0, 0xBD, 0xD2, 0xAB, 0xDF, 0x6E, 0xC9, 0x5B, 0xEC, 0x86, 0xAD, 0x16, 0xB7, 0x19, 0x0F, 0xFE, 0x2E, 0x1E, 0xB9, 0xEF, 0x6D, 0x43, 0x9A, 0x5E, 0xAF, 0x2D, 0xE8, 0xF6, 0xEC, 0x93, 0x09, 0x40, 0xFA, 0xFB, 0x5D, 0xCB, 0x12, 0xE7, 0x3C, 0x3A, 0x3E, 0x5B, 0x5C, 0x5A, 0x98, 0xAB, 0x23, 0x2E, 0xEB, 0x98, 0xBA, 0x57, 0x5C, 0x55, 0x98, 0x50, 0x22, 0xAE, 0x55, 0x23, 0x97, 0xBB, 0x02, 0xCD, 0xEB, 0x93, 0x41, 0xE7, 0x00, 0xE7, 0x96, 0xE4, 0xE0, 0x1D, 0x80, 0xEF, 0x62, 0x12, 0x00, 0xA2, 0x7D, 0xC5, 0xAE, 0xDB, 0x17, 0xBE, 0x10, 0x03, 0x9A, 0x06, 0x0E, 0x17, 0xA7, 0xBF, 0x1B, 0x67, 0x27, 0x26, 0x4D, 0x1B, 0x21, 0x19, 0x59, 0x5F, 0x86, 0x9E, 0x13, 0x4B, 0xE7, 0xFB, 0xE4, 0x91, 0x2D, 0x5B, 0x90, 0x36, 0xBE, 0x65, 0x7F, 0x20, 0xFD, 0x77, 0x8B, 0x20, 0x46, 0x74, 0xDA, 0xFB, 0x9F, 0xB8, 0xF2, 0x7E, 0xDA, 0x12, 0x71, 0x6D, 0x49, 0xBC, 0xA9, 0x98, 0xF0, 0x29, 0xAA, 0xBB, 0x98, 0x98, 0x4D, 0xAE, 0xF5, 0x00, 0x0C, 0xA7, 0x90, 0x61, 0x15, 0x80, 0xB5, 0x0B, 0xE9, 0xF7, 0x0D, 0xF0, 0x9B, 0x40, 0xB6, 0x8C, 0x03, 0x42, 0x77, 0x91, 0x40, 0xE3, 0xF4, 0x65, 0xDE, 0xE2, 0x40, 0xF3, 0x85, 0x5A, 0xE2, 0x24, 0x8D, 0x89, 0x4B, 0xC4, 0x94, 0x7A, 0x3E, 0xBD, 0xC4, 0x9C, 0xC9, 0xC3, 0x17, 0x8B, 0x4F, 0x5D, 0x06, 0x4F, 0xFA, 0x53, 0x1F, 0x20, 0x67, 0x55, 0x5C, 0x6A, 0x2E, 0x46, 0x1D, 0xCC, 0x4B, 0x16, 0x63, 0x7F, 0xA4, 0x85, 0x88, 0xEB, 0xD3, 0xD6, 0x9C, 0x17, 0x37, 0xAD, 0x0F, 0x7F, 0x2A, 0x6E, 0x3E, 0x17, 0xF2, 0x4C, 0x4C, 0x96, 0x79, 0xBF, 0x07, 0x68, 0x74, 0x9B, 0x5C, 0x9E, 0x04, 0x74, 0xB7, 0x27, 0xC7, 0xE5, 0x02, 0x63, 0x9B, 0x93, 0x63, 0x77, 0x68, 0xEC, 0x0A, 0xBC, 0x44, 0x02, 0x30, 0x4F, 0xB0, 0x11, 0xDD, 0xF5, 0xA3, 0xFE, 0x8A, 0x33, 0xBD, 0x67, 0x7F, 0x13, 0x13, 0x5F, 0x4E, 0xFF, 0x2D, 0xEE, 0xC0, 0x68, 0x67, 0xB2, 0xCB, 0x4E, 0xD2, 0xA2, 0x51, 0x99, 0x0A, 0x40, 0xC6, 0xCC, 0x3F, 0x6C, 0x22, 0x26, 0x1C, 0xD8, 0x6A, 0x27, 0x26, 0x75, 0x59, 0xD9, 0x4D, 0x4C, 0x39, 0x1A, 0xFA, 0x44, 0x4C, 0x3B, 0x36, 0xB3, 0x44, 0x4C, 0x7F, 0x34, 0x39, 0x1F, 0xE2, 0x6F, 0x32, 0xC5, 0x05, 0xD0, 0xBF, 0x4C, 0xAE, 0x3F, 0x0A, 0x74, 0x71, 0x20, 0x23, 0x47, 0x03, 0xDE, 0x0D, 0xC9, 0x19, 0x46, 0xC0, 0x14, 0x5B, 0xD2, 0xF4, 0x23, 0x10, 0x3B, 0x83, 0x04, 0xCC, 0xFF, 0x26, 0xA6, 0x88, 0xFE, 0x4B, 0xE3, 0x76, 0x89, 0x61, 0xB5, 0xB1, 0x4D, 0xC5, 0xF4, 0x8E, 0x6B, 0x5D, 0x44, 0x72, 0x9E, 0xE6, 0xC9, 0x62, 0x71, 0xD3, 0x89, 0x14, 0x57, 0x31, 0xFD, 0xC4, 0x8A, 0x43, 0xEA, 0x77, 0xC9, 0x8C, 0xA3, 0x0B, 0x5B, 0xAB, 0x98, 0x91, 0xDB, 0x5C, 0x83, 0xA2, 0x54, 0xDE, 0x92, 0xD9, 0x33, 0xC7, 0xE6, 0x00, 0xE4, 0x76, 0x17, 0x7F, 0xE8, 0xE6, 0x90, 0x99, 0xDF, 0xC8, 0x74, 0x02, 0xFA, 0x67, 0xC9, 0x94, 0x4B, 0x80, 0xE5, 0x28, 0x32, 0xB1, 0x2D, 0xD0, 0x4B, 0x85, 0x8C, 0x74, 0x00, 0x26, 0x14, 0x93, 0x93, 0x76, 0x01, 0xD1, 0x8D, 0x48, 0x00, 0xD8, 0x7E, 0x9D, 0xD4, 0x79, 0xD0, 0xDF, 0x31, 0xD3, 0x59, 0x72, 0xD4, 0xE5, 0xAC, 0x79, 0xE2, 0x8E, 0xDB, 0xB9, 0xCB, 0xEF, 0x1F, 0x03, 0xC8, 0x2D, 0xCB, 0xF7, 0x94, 0xF4, 0x74, 0x20, 0xB7, 0x3E, 0x8E, 0x50, 0xD3, 0x58, 0x4A, 0xEE, 0x9A, 0x31, 0x4F, 0x4B, 0x2B, 0x8B, 0xDC, 0xBD, 0x62, 0xAC, 0x1F, 0x40, 0xEE, 0x09, 0xF5, 0x3F, 0xD9, 0xC4, 0x89, 0xDC, 0x7E, 0x2D, 0x60, 0x80, 0x59, 0x32, 0x99, 0xF5, 0x64, 0xFC, 0x30, 0xF3, 0xA1, 0xB2, 0x06, 0x32, 0x27, 0x0D, 0xD0, 0x2D, 0x24, 0x33, 0x77, 0x02, 0x16, 0x4F, 0xEA, 0xFC, 0x09, 0x38, 0x3B, 0x90, 0x89, 0x83, 0x00, 0xFF, 0x54, 0x32, 0x92, 0xC0, 0x52, 0x2B, 0xD2, 0x3F, 0x17, 0x48, 0xEE, 0x41, 0x02, 0x9A, 0x38, 0xFE, 0x4F, 0xF4, 0x5D, 0x73, 0xF2, 0x97, 0xF8, 0xBC, 0xA6, 0xF0, 0x48, 0xBA, 0x4A, 0x33, 0x0D, 0x32, 0xEF, 0xFD, 0x24, 0x2B, 0x80, 0x3C, 0xB6, 0x60, 0xA2, 0xB5, 0xEE, 0x62, 0x32, 0xFF, 0x61, 0x5F, 0x48, 0x2E, 0xF8, 0xE0, 0x58, 0x21, 0xE6, 0xDB, 0xDA, 0x24, 0x89, 0x79, 0xEA, 0xDD, 0x26, 0x8A, 0x07, 0x0C, 0xAD, 0x8E, 0x88, 0x7B, 0x97, 0x92, 0xB9, 0xE3, 0x00, 0xED, 0xB7, 0x75, 0x0E, 0x02, 0xCC, 0xAB, 0xC9, 0x5D, 0x00, 0x5C, 0x9E, 0x91, 0xD9, 0xBD, 0x81, 0x31, 0xE3, 0xC9, 0x8C, 0xFF, 0x80, 0x10, 0xDD, 0xBA, 0x1C, 0xD0, 0x68, 0x41, 0xAC, 0x03, 0x99, 0x12, 0x01, 0xEC, 0xB8, 0xF9, 0x72, 0x78, 0xEA, 0x60, 0xE0, 0xE4, 0x39, 0xAB, 0xDB, 0x80, 0xCF, 0xAB, 0x07, 0xA5, 0xB6, 0xF2, 0xBA, 0xBC, 0x12, 0xD7, 0xC9, 0x57, 0x2C, 0xF4, 0xEC, 0x90, 0x23, 0x9E, 0xB0, 0x36, 0x2E, 0x13, 0x8F, 0x76, 0x6E, 0xE1, 0x2D, 0x1E, 0xCA, 0x33, 0xDC, 0x26, 0x16, 0xAC, 0x6F, 0x14, 0x28, 0xE6, 0xDD, 0xD2, 0xF7, 0x13, 0x0F, 0xF4, 0x24, 0xF3, 0x76, 0x01, 0x6A, 0xD3, 0xC8, 0xFC, 0xE1, 0x40, 0xFB, 0x95, 0xE4, 0xC1, 0x9D, 0x80, 0xF3, 0x4B, 0xB2, 0x30, 0x4B, 0xFB, 0x9D, 0xA7, 0x32, 0x79, 0xF2, 0x15, 0x30, 0xEB, 0x08, 0x59, 0x32, 0x08, 0x58, 0xF1, 0xF3, 0x6F, 0xFC, 0xFB, 0x2F, 0x40, 0x6C, 0xEF, 0x1D, 0x95, 0x95, 0x7D, 0x81, 0x7D, 0xFF, 0x80, 0x3B, 0xF9, 0x73, 0x7F, 0x95, 0xEE, 0x56, 0x69, 0x67, 0x1F, 0x4A, 0x16, 0x5D, 0x04, 0x9A, 0x3D, 0xA9, 0xF3, 0x29, 0xD0, 0x60, 0x0E, 0x59, 0x18, 0x04, 0xD4, 0x7B, 0x4D, 0x9E, 0x8C, 0x05, 0x94, 0x5E, 0x91, 0xC7, 0xF2, 0x01, 0x84, 0x90, 0x47, 0x26, 0x00, 0xC8, 0x23, 0x0F, 0xD9, 0x01, 0x6A, 0x1A, 0x64, 0x7E, 0x6B, 0xF2, 0xE8, 0x64, 0x40, 0x59, 0x89, 0x3C, 0xF9, 0x00, 0x30, 0x9B, 0x44, 0x9E, 0xE9, 0x04, 0xD8, 0x27, 0x90, 0x57, 0x43, 0x01, 0xCF, 0x86, 0xE4, 0xDD, 0xFB, 0xC0, 0xC4, 0x77, 0x24, 0x09, 0x2C, 0x1C, 0x79, 0xFE, 0x58, 0xED, 0x5B, 0x20, 0xCE, 0xCF, 0xEF, 0x91, 0xE4, 0x7D, 0x25, 0x00, 0x39, 0xD3, 0xE9, 0x58, 0xF7, 0x0E, 0xAF, 0xF7, 0xFD, 0x22, 0x33, 0xE7, 0x1B, 0xEC, 0x9F, 0xFA, 0x8A, 0xCC, 0x3F, 0x03, 0xB8, 0xB7, 0x20, 0x0F, 0x7D, 0xD0, 0x58, 0xE1, 0x6A, 0x45, 0xE6, 0x3D, 0x6D, 0xBC, 0xC6, 0xE1, 0x1F, 0xB9, 0xFF, 0x0B, 0x60, 0x7A, 0x88, 0x2C, 0x30, 0x00, 0x8C, 0x46, 0x91, 0x79, 0x33, 0x01, 0x63, 0x90, 0xFB, 0x8A, 0xC9, 0x42, 0x02, 0x00, 0x79, 0x31, 0x54, 0xE3, 0x89, 0x4E, 0x26, 0x79, 0xA3, 0x01, 0xD0, 0xF5, 0x0F, 0xF9, 0xF8, 0x01, 0xE0, 0xB8, 0x94, 0x24, 0x1B, 0x6A, 0xF4, 0x0B, 0xB9, 0x75, 0x83, 0x04, 0xE6, 0x2F, 0x8E, 0x5E, 0x22, 0x6E, 0x2A, 0x06, 0xC4, 0xDC, 0x61, 0xE2, 0x70, 0xFF, 0xF4, 0x22, 0xE0, 0xB7, 0x1A, 0xB9, 0x7A, 0x36, 0x90, 0x61, 0x44, 0x66, 0xBC, 0x52, 0x1D, 0x1B, 0x3A, 0x96, 0xDC, 0xFE, 0xB4, 0x41, 0xC1, 0xB4, 0x19, 0xE4, 0xCE, 0x98, 0x06, 0xFE, 0x23, 0xF3, 0xEA, 0xBC, 0xDB, 0x40, 0x69, 0x90, 0x4F, 0x9D, 0xA9, 0x80, 0x6B, 0x53, 0x72, 0x57, 0x62, 0x9D, 0x20, 0x77, 0x1C, 0x25, 0x4B, 0xC6, 0x00, 0x2A, 0x9F, 0xC8, 0x9B, 0xAF, 0x95, 0xE7, 0x34, 0x34, 0x23, 0x9F, 0xD4, 0xE5, 0xB6, 0x6F, 0x49, 0x12, 0xE8, 0xD8, 0xE3, 0xF1, 0x53, 0xD1, 0x37, 0x7B, 0xD7, 0x38, 0x71, 0xD1, 0xA9, 0xF1, 0x06, 0x62, 0xD4, 0x74, 0x40, 0x8C, 0xCE, 0x6D, 0xB2, 0x86, 0x1C, 0xD8, 0x6C, 0x48, 0x98, 0xE4, 0xED, 0x83, 0xAC, 0x5A, 0x00, 0xB7, 0x67, 0xD6, 0x26, 0xAE, 0x28, 0x02, 0x76, 0x1F, 0x20, 0x37, 0x34, 0x02, 0x62, 0x97, 0x91, 0xC9, 0xD1, 0xC0, 0xA2, 0xA5, 0xE4, 0xD6, 0x24, 0x60, 0x7A, 0x2A, 0x99, 0x7E, 0x0A, 0xF0, 0x8F, 0x22, 0x33, 0x36, 0x02, 0x7E, 0xC9, 0x75, 0x99, 0xE4, 0xDD, 0xA6, 0x40, 0xBD, 0x32, 0xF2, 0x15, 0x00, 0xAD, 0x40, 0x45, 0xBF, 0x6E, 0xC6, 0x9B, 0xAE, 0xA2, 0x8D, 0xEA, 0xE9, 0x61, 0xE2, 0x98, 0x25, 0x11, 0xFF, 0x89, 0xD3, 0x87, 0x1B, 0xFE, 0x14, 0x67, 0xF4, 0x6A, 0x1C, 0x4B, 0x9A, 0xA5, 0x7B, 0xCF, 0xAD, 0x5F, 0x9F, 0x74, 0xAC, 0xE7, 0x35, 0xB4, 0xC5, 0x5D, 0x32, 0x76, 0x57, 0xC7, 0x63, 0x00, 0xF9, 0xD1, 0x69, 0x9C, 0x33, 0x70, 0x7B, 0x6A, 0xED, 0xE8, 0xC5, 0x4D, 0x95, 0xFE, 0x16, 0x2C, 0x26, 0x97, 0xC5, 0x01, 0x69, 0x03, 0xC8, 0xB5, 0xA7, 0x81, 0xB5, 0x55, 0xE4, 0xBA, 0xE7, 0x40, 0xF8, 0x20, 0x32, 0xD1, 0x13, 0x58, 0xB8, 0x89, 0xDC, 0x50, 0x4C, 0xBE, 0xEA, 0x02, 0xA8, 0x58, 0x91, 0x7F, 0x35, 0x80, 0xFA, 0x4F, 0xBE, 0x14, 0x91, 0x40, 0x93, 0x99, 0x57, 0x0F, 0x88, 0xF6, 0x5F, 0xB3, 0x3C, 0x49, 0xED, 0x84, 0x41, 0x4F, 0x7C, 0xD5, 0x48, 0xDD, 0x7A, 0xDE, 0xB6, 0x00, 0x65, 0x5D, 0xCB, 0xEB, 0x4F, 0x21, 0xDB, 0x74, 0xF4, 0x38, 0x81, 0x72, 0xB2, 0xDB, 0x12, 0x37, 0x27, 0x80, 0xEC, 0x5C, 0x6A, 0xF7, 0x49, 0xCC, 0xBE, 0xD2, 0x6D, 0x2A, 0x50, 0x33, 0xF6, 0x47, 0xE8, 0xB0, 0xDE, 0xC0, 0x03, 0x4B, 0x2E, 0x9D, 0xDE, 0x19, 0x38, 0xDD, 0x95, 0x9C, 0x6F, 0x0E, 0xEC, 0x09, 0x20, 0x97, 0x26, 0x00, 0x69, 0xE3, 0xC9, 0x98, 0xA9, 0x40, 0xC2, 0x39, 0x72, 0xB9, 0x36, 0xF9, 0x3D, 0x02, 0x50, 0x0F, 0xFE, 0x93, 0x4A, 0x02, 0x6A, 0xD9, 0x8F, 0xCF, 0x93, 0x06, 0xB6, 0x9A, 0xAD, 0x0E, 0xD5, 0x93, 0x6C, 0x5F, 0x1E, 0xBD, 0x8C, 0x6C, 0x76, 0xC3, 0xB6, 0x5F, 0xCB, 0x27, 0x92, 0x87, 0x47, 0x00, 0xE2, 0xE0, 0x6A, 0xA5, 0x51, 0xA4, 0x71, 0x9C, 0xDB, 0x5E, 0xC9, 0x5D, 0x1C, 0x9D, 0x6B, 0x44, 0xEB, 0xED, 0xF6, 0x7A, 0xDA, 0xFB, 0xC9, 0x0D, 0x27, 0x2D, 0x57, 0x49, 0xCE, 0x8B, 0xB7, 0xFC, 0x05, 0xD4, 0xDC, 0xFE, 0xBE, 0xD4, 0x6B, 0x2C, 0xF0, 0xE4, 0x2A, 0x33, 0x47, 0x1A, 0x01, 0x57, 0xB4, 0xC8, 0x09, 0x33, 0x80, 0xE3, 0x24, 0xA7, 0x27, 0x01, 0xFB, 0xA6, 0x92, 0x73, 0x46, 0xD5, 0xFC, 0x21, 0x01, 0xE5, 0x55, 0x2F, 0xA7, 0x8A, 0x5A, 0x2E, 0x17, 0x83, 0x48, 0xFD, 0x8D, 0xFA, 0x1B, 0x13, 0x0F, 0x4B, 0xB6, 0xCD, 0xEE, 0x3F, 0x5F, 0x74, 0x85, 0x7E, 0xB4, 0x38, 0xD0, 0xAD, 0x5E, 0x05, 0xA9, 0xBF, 0xAB, 0x57, 0x05, 0x40, 0x1A, 0xC3, 0x79, 0x90, 0xD8, 0x39, 0xDA, 0x6E, 0x8C, 0xE8, 0x8A, 0xEE, 0xD9, 0xCD, 0x8B, 0xC8, 0x85, 0xB3, 0x9B, 0x17, 0xA9, 0xDD, 0x26, 0xD3, 0x69, 0x2E, 0x8F, 0x63, 0x89, 0x7A, 0x47, 0x3D, 0x80, 0x79, 0x9F, 0xA7, 0x5B, 0x57, 0x01, 0x6F, 0xF2, 0xFF, 0xF4, 0x77, 0x9F, 0xDF, 0x80, 0xF7, 0xFB, 0x91, 0x7D, 0x6B, 0x81, 0x92, 0xDB, 0xE4, 0xC8, 0xF6, 0x64, 0xC4, 0x5B, 0x40, 0x65, 0x20, 0x39, 0x69, 0x2A, 0xD0, 0xE5, 0x1B, 0xE9, 0xB6, 0x01, 0x18, 0x30, 0x8B, 0x04, 0x80, 0x59, 0x11, 0x62, 0x8F, 0xB4, 0xC0, 0x64, 0xD1, 0x6F, 0xC6, 0x88, 0x5B, 0x62, 0xD0, 0x19, 0xDF, 0xA1, 0x62, 0xA2, 0xFE, 0xD0, 0x14, 0x71, 0x87, 0xD2, 0x10, 0x25, 0xF1, 0xD8, 0x8A, 0x21, 0xDD, 0xC9, 0xC6, 0x37, 0xAB, 0x6E, 0x38, 0x84, 0x55, 0x3B, 0x03, 0xA4, 0x5B, 0xF3, 0xF2, 0xC5, 0xE2, 0xF8, 0xF0, 0x0B, 0x0F, 0xC5, 0xA0, 0xE2, 0xA3, 0x31, 0xE2, 0xC2, 0xFA, 0xBB, 0xBA, 0x8B, 0x61, 0x15, 0x69, 0xB5, 0x62, 0x74, 0x24, 0xB9, 0xFC, 0x1D, 0xA0, 0xE4, 0x4F, 0x2E, 0x38, 0x0B, 0x74, 0xD8, 0x4B, 0x0E, 0xBA, 0x09, 0xF4, 0x2F, 0x25, 0x4D, 0x75, 0x80, 0xC9, 0x77, 0x48, 0xA0, 0x7D, 0xD7, 0xE0, 0xB9, 0xA2, 0x4F, 0xC2, 0xB8, 0x45, 0xA2, 0x7F, 0xE0, 0x98, 0x6A, 0x71, 0xC3, 0xE6, 0x21, 0x83, 0xC5, 0x1D, 0x4B, 0x87, 0xFE, 0x15, 0x8F, 0x9C, 0x1E, 0xD1, 0x85, 0x34, 0x73, 0x26, 0xBB, 0xBA, 0x7E, 0x0A, 0x00, 0xC8, 0xD1, 0x23, 0xAE, 0xDF, 0x11, 0x67, 0xB9, 0x9D, 0x9C, 0x29, 0x86, 0x36, 0xCC, 0x4D, 0x17, 0xA3, 0xF6, 0x6E, 0x75, 0x15, 0x57, 0xAC, 0x48, 0xD4, 0x17, 0x57, 0xA7, 0x92, 0xB1, 0xCE, 0x00, 0x40, 0x46, 0x06, 0x03, 0x66, 0x5D, 0xC8, 0xFE, 0x95, 0x80, 0xCF, 0x0A, 0xD2, 0x7A, 0x25, 0x10, 0xF8, 0x90, 0x04, 0xEA, 0x6F, 0x5C, 0xAA, 0x24, 0xF6, 0x5E, 0x13, 0xF4, 0x4D, 0x9C, 0x1A, 0x3A, 0xED, 0xAA, 0x18, 0xFF, 0x77, 0x62, 0x95, 0xB8, 0xE3, 0xD8, 0x68, 0x2F, 0xF1, 0x4C, 0x93, 0x91, 0x59, 0xA4, 0xFE, 0x21, 0xB2, 0xC7, 0xFD, 0x47, 0x1B, 0x21, 0xFD, 0x23, 0x8B, 0xE2, 0xC5, 0xFF, 0x62, 0xF7, 0x1D, 0x15, 0x97, 0xF7, 0xDC, 0x5A, 0x24, 0xAE, 0x99, 0xBD, 0x3E, 0x5F, 0x8C, 0xEF, 0x1D, 0xB3, 0x44, 0x4C, 0x08, 0x21, 0x13, 0x86, 0x01, 0x90, 0xB5, 0xC5, 0x03, 0xA6, 0xA5, 0xE4, 0xF8, 0x95, 0xC0, 0x80, 0x62, 0x72, 0xA8, 0x12, 0x30, 0x76, 0x2B, 0x09, 0x00, 0xCB, 0x76, 0x8A, 0x0E, 0xA9, 0x4B, 0xA7, 0x8A, 0xE3, 0xDF, 0x87, 0xAE, 0x14, 0xA3, 0x3B, 0x2D, 0xF9, 0x23, 0x66, 0x7D, 0x58, 0xBC, 0x54, 0xBC, 0xD4, 0x7C, 0x86, 0xDF, 0x6F, 0x17, 0x80, 0x9C, 0x64, 0x74, 0x69, 0xB7, 0x18, 0xBE, 0x36, 0x7F, 0x81, 0xB8, 0x5A, 0x39, 0x3D, 0x58, 0x5C, 0xA7, 0x15, 0xB7, 0x43, 0xDC, 0xF0, 0x5F, 0xF8, 0x4F, 0x71, 0x93, 0x67, 0x68, 0x23, 0x71, 0xF3, 0x40, 0x72, 0xD3, 0x5C, 0x00, 0xF2, 0x98, 0xD1, 0x80, 0x51, 0x1B, 0x32, 0x72, 0x37, 0x60, 0xF3, 0x9B, 0x0C, 0x48, 0x01, 0x46, 0xFF, 0x24, 0x9B, 0x1C, 0x01, 0xA2, 0xF6, 0x92, 0x56, 0x70, 0x74, 0x5E, 0x3A, 0x81, 0x04, 0x46, 0xD4, 0xAC, 0xBC, 0x20, 0x86, 0x7D, 0x5B, 0x6D, 0x23, 0x66, 0xB7, 0x5B, 0x7B, 0x50, 0xBC, 0x6F, 0xB2, 0x6A, 0x75, 0x59, 0x31, 0x40, 0xFE, 0x77, 0xE1, 0x68, 0x98, 0x18, 0xE7, 0x91, 0xDE, 0x51, 0xDC, 0xB8, 0x79, 0xCD, 0x68, 0x71, 0x4B, 0x76, 0xD8, 0x41, 0x31, 0x45, 0x79, 0x8E, 0xB6, 0x98, 0x56, 0x34, 0xD5, 0x43, 0xDC, 0x1A, 0x40, 0xA6, 0xA4, 0x00, 0x90, 0x35, 0xFD, 0x03, 0x9A, 0xC7, 0x90, 0xAB, 0xAE, 0x02, 0x36, 0x8D, 0xC8, 0x09, 0xEF, 0x80, 0x09, 0xC1, 0xE4, 0xD4, 0x7D, 0x0D, 0xFB, 0x4C, 0x4E, 0x26, 0x01, 0x9D, 0x35, 0x29, 0x7F, 0x45, 0x77, 0xAB, 0xCD, 0x22, 0x42, 0x8D, 0x93, 0xDF, 0x8A, 0x3B, 0xF2, 0x33, 0x07, 0x8B, 0x3F, 0x6C, 0x32, 0xED, 0x4E, 0x55, 0x03, 0xE4, 0xBA, 0x36, 0xE9, 0x46, 0x62, 0xEA, 0xF2, 0x15, 0x06, 0x62, 0xFA, 0xF9, 0x45, 0x06, 0x78, 0x4B, 0x66, 0xCE, 0x0C, 0x7A, 0xAD, 0xEC, 0x49, 0x66, 0x1D, 0x1C, 0x13, 0x02, 0x90, 0xD9, 0xCF, 0xFD, 0xA1, 0x31, 0x9F, 0xCC, 0x34, 0x25, 0xD3, 0x09, 0x00, 0x75, 0xEE, 0x05, 0x0C, 0xDB, 0x91, 0x9B, 0xA7, 0x03, 0xDD, 0x6D, 0xC8, 0x88, 0x89, 0xC0, 0x08, 0x77, 0x32, 0x24, 0x1F, 0x98, 0xE5, 0x46, 0x02, 0x40, 0xCE, 0x5B, 0xB2, 0xBD, 0x93, 0x5D, 0xF5, 0xD6, 0xCF, 0x92, 0x67, 0x69, 0xEF, 0xAC, 0x15, 0x4F, 0xB6, 0xDA, 0xBF, 0xA4, 0x3C, 0x0B, 0xF8, 0xED, 0xBA, 0xFF, 0xDA, 0xF6, 0x1E, 0x06, 0x41, 0x64, 0xFA, 0xF3, 0x70, 0x7D, 0x80, 0xDC, 0x79, 0x28, 0xA4, 0x4D, 0x83, 0xDD, 0x75, 0x76, 0x19, 0x5D, 0x26, 0x39, 0xB7, 0xEF, 0xB8, 0x6A, 0x9D, 0x62, 0x72, 0xFB, 0x47, 0x7F, 0xF3, 0x56, 0x99, 0x64, 0xD6, 0x9D, 0x71, 0x36, 0xB2, 0xF7, 0x92, 0x4E, 0x72, 0xDB, 0x6F, 0x00, 0xA8, 0x33, 0x1A, 0x30, 0x7C, 0x40, 0x66, 0x3C, 0x02, 0xAC, 0x06, 0x93, 0xA9, 0x17, 0x00, 0xCF, 0xE7, 0x64, 0x64, 0x3F, 0x60, 0x4E, 0x28, 0xE9, 0x5F, 0x0C, 0x6C, 0x98, 0x4E, 0x8E, 0xEB, 0xDE, 0xAE, 0x53, 0x9A, 0x1F, 0x09, 0x38, 0x18, 0x9C, 0x2A, 0xB8, 0xEB, 0x02, 0x1C, 0xFE, 0x7D, 0x7C, 0x44, 0xEA, 0x7D, 0xA0, 0x7C, 0xDC, 0xC9, 0x4B, 0xE1, 0xFF, 0xE9, 0x3F, 0x23, 0x0F, 0xE8, 0x8D, 0xAB, 0x04, 0xC8, 0x82, 0xA5, 0x93, 0xCF, 0x1A, 0xAF, 0x21, 0x73, 0xA7, 0x4F, 0x8A, 0xB6, 0xEC, 0x49, 0x6E, 0xFF, 0xE1, 0xB8, 0x12, 0x20, 0xF7, 0xDD, 0xB7, 0xDE, 0x0E, 0xB1, 0xC0, 0x5A, 0x47, 0xCC, 0xBD, 0x47, 0xEE, 0xFC, 0x06, 0x40, 0x8E, 0xA7, 0x00, 0x8D, 0x65, 0x5F, 0xE8, 0x18, 0xD0, 0x55, 0x8D, 0xDC, 0xBB, 0x53, 0xB9, 0x9E, 0x63, 0x2C, 0x99, 0x61, 0x06, 0x04, 0xAD, 0xAB, 0x73, 0xA4, 0x7A, 0xE9, 0x32, 0x75, 0x32, 0x5F, 0xBB, 0x55, 0xFE, 0xFA, 0xD3, 0x0F, 0x7B, 0x64, 0xD4, 0x00, 0x07, 0x82, 0x3A, 0xBB, 0x03, 0x2E, 0x73, 0xAF, 0x94, 0xE8, 0x3F, 0x52, 0xAE, 0x79, 0x14, 0x76, 0x73, 0x5B, 0xA7, 0x51, 0x00, 0x79, 0xBA, 0xAC, 0xDD, 0x59, 0xF1, 0xF8, 0x4D, 0x63, 0x7F, 0xF1, 0xC8, 0xCA, 0xE6, 0x87, 0xC4, 0x43, 0x4D, 0x9B, 0x58, 0x8A, 0xF9, 0x7F, 0x1A, 0x42, 0xCC, 0xEB, 0xA4, 0xD7, 0x40, 0xDC, 0xBF, 0x81, 0xDC, 0x3F, 0x1D, 0x00, 0xC8, 0xC3, 0x73, 0x80, 0x06, 0x0D, 0xC8, 0xA3, 0xBF, 0x80, 0x8E, 0xEF, 0xC9, 0x33, 0x81, 0x80, 0x93, 0x1B, 0x79, 0xF2, 0x0D, 0x30, 0x2D, 0x89, 0xBC, 0x71, 0x13, 0x98, 0x9B, 0xF8, 0x6E, 0xD3, 0xAB, 0x45, 0xC0, 0x12, 0xEB, 0x6D, 0x8B, 0x5E, 0x3C, 0x06, 0xB2, 0x06, 0x02, 0x17, 0xE3, 0xFC, 0x4B, 0x4E, 0xAB, 0x00, 0x51, 0xCE, 0x17, 0x4F, 0x1C, 0x7D, 0x0E, 0x38, 0x7D, 0x24, 0x8F, 0xBF, 0x00, 0x3A, 0x78, 0xD7, 0xD9, 0x19, 0x30, 0x7A, 0x42, 0x1E, 0xD5, 0x53, 0x5D, 0xD7, 0x66, 0x02, 0x79, 0x70, 0x91, 0x7E, 0xA4, 0x69, 0x14, 0x79, 0xE0, 0x45, 0x23, 0x3F, 0xD3, 0x1A, 0x72, 0x9F, 0xAD, 0xD6, 0x1E, 0xA3, 0x72, 0x72, 0x6F, 0x1B, 0xF2, 0x48, 0x06, 0x00, 0x90, 0x45, 0xBD, 0x80, 0x7A, 0xD6, 0xE4, 0x05, 0x6F, 0xA0, 0xBD, 0x3D, 0x79, 0xCD, 0x0F, 0x70, 0x36, 0x25, 0x1F, 0xBD, 0x07, 0x7C, 0xDA, 0x55, 0x2E, 0x91, 0x1D, 0xF3, 0x91, 0x38, 0x79, 0xF1, 0xE7, 0x6A, 0x60, 0xF1, 0x2F, 0xFF, 0x88, 0x6A, 0x07, 0x20, 0x6B, 0x23, 0xF0, 0x77, 0x59, 0x80, 0xCE, 0xBE, 0x0B, 0xC0, 0xEB, 0xA0, 0xA7, 0xE1, 0xBB, 0x36, 0x2B, 0x47, 0xC5, 0x1F, 0x27, 0xB7, 0xFD, 0x68, 0x50, 0x3A, 0xB7, 0x11, 0xB9, 0x6B, 0xB6, 0xE6, 0xAD, 0x31, 0xC5, 0xE4, 0x6E, 0x5D, 0xED, 0x11, 0x3E, 0xE1, 0x75, 0xF9, 0x0C, 0xE0, 0x32, 0x90, 0xCC, 0x75, 0xAD, 0xB7, 0xC7, 0xCD, 0x8F, 0xDC, 0xF9, 0x5E, 0xBD, 0xDC, 0x71, 0x11, 0xB9, 0xA3, 0x9C, 0x3C, 0x63, 0x02, 0x00, 0xE4, 0x25, 0x6F, 0xA0, 0x7E, 0x1C, 0x79, 0x2F, 0x45, 0xA5, 0xA8, 0xD1, 0x72, 0xF2, 0xA5, 0x16, 0xD0, 0x75, 0xF6, 0xCF, 0x15, 0x24, 0xE0, 0xE1, 0x53, 0xA2, 0x2E, 0x06, 0xF4, 0x5A, 0xD5, 0x59, 0x8C, 0x7E, 0xA6, 0x7F, 0x4A, 0xCC, 0x8C, 0x68, 0xA3, 0x46, 0x4E, 0xFC, 0x18, 0x9B, 0x66, 0x01, 0x72, 0x7F, 0xE7, 0x88, 0x65, 0xC0, 0x95, 0x22, 0x72, 0x59, 0x14, 0x90, 0xD3, 0x83, 0xDC, 0xD0, 0x1B, 0x58, 0x19, 0x45, 0x26, 0x1F, 0x01, 0x42, 0x2E, 0x91, 0x5B, 0x17, 0x02, 0x72, 0xBE, 0x96, 0x1E, 0x0A, 0xF8, 0xAF, 0xAF, 0xF3, 0x1F, 0x30, 0xA2, 0xB2, 0x4E, 0x92, 0x57, 0x1F, 0x01, 0x00, 0x59, 0x36, 0x0A, 0x50, 0x7D, 0x43, 0x7E, 0x6E, 0x09, 0xE8, 0x39, 0xFE, 0x39, 0x4A, 0x02, 0x26, 0x01, 0xB7, 0xCB, 0xC5, 0xBE, 0x23, 0x32, 0xE6, 0x8A, 0xD3, 0xF4, 0x87, 0x67, 0x89, 0xA1, 0x36, 0x80, 0x18, 0xED, 0x60, 0x62, 0x47, 0xFA, 0xD5, 0x1F, 0x9E, 0x61, 0x69, 0x4A, 0x2E, 0xBF, 0xDE, 0xB5, 0x01, 0x40, 0x7E, 0xBA, 0xE7, 0xA7, 0x03, 0xDC, 0x19, 0x59, 0x33, 0x32, 0xA4, 0x23, 0x70, 0xD0, 0x8B, 0x8C, 0x6E, 0x0C, 0xA4, 0x1B, 0x91, 0x6B, 0x7C, 0x80, 0x75, 0x01, 0x64, 0x5C, 0x28, 0x10, 0xD1, 0x90, 0x4C, 0xB0, 0x06, 0x16, 0x05, 0x91, 0xEB, 0x7F, 0x92, 0x8F, 0x4E, 0x03, 0x00, 0xF9, 0x79, 0x37, 0xA0, 0x76, 0xF8, 0x4F, 0xFB, 0xEA, 0x3D, 0x80, 0x56, 0xFD, 0x17, 0x8B, 0xC8, 0x36, 0x39, 0xBA, 0x1E, 0x87, 0x87, 0x90, 0x80, 0x57, 0xFF, 0xD0, 0xCD, 0xA2, 0x9F, 0x5E, 0x1B, 0x1F, 0x71, 0x62, 0x85, 0x5E, 0x7F, 0xD2, 0x2C, 0xB5, 0x9F, 0xAA, 0xDA, 0x72, 0xD2, 0x63, 0xA1, 0xC7, 0x25, 0x4B, 0x63, 0x72, 0x49, 0xEB, 0x0E, 0xBD, 0x01, 0x72, 0x5B, 0x57, 0x2B, 0x1D, 0xF1, 0xDB, 0xD0, 0x81, 0xB9, 0x40, 0xF9, 0xFC, 0x9A, 0x9D, 0x93, 0x97, 0x02, 0xC5, 0xED, 0xC9, 0x99, 0x2B, 0x80, 0xFC, 0xE6, 0xE4, 0xC2, 0x45, 0xC0, 0x36, 0x2F, 0x32, 0x3C, 0x1B, 0xD8, 0xE8, 0x4D, 0x46, 0xCD, 0x21, 0x3F, 0x2C, 0x06, 0x54, 0x2A, 0x6A, 0x2B, 0xAB, 0xDD, 0x80, 0x7A, 0xD9, 0x2F, 0x6B, 0x48, 0x40, 0x27, 0xB8, 0xB8, 0x89, 0xD8, 0x4D, 0x23, 0xF1, 0xA5, 0xE8, 0x8E, 0xC1, 0x4E, 0xA4, 0xAA, 0x96, 0xC7, 0x57, 0xF5, 0x27, 0x92, 0x87, 0xFE, 0x52, 0x1B, 0x49, 0x9A, 0xCE, 0xEB, 0x55, 0x05, 0x90, 0xDD, 0xF5, 0x5C, 0x5C, 0x45, 0xEB, 0x19, 0xB6, 0xA3, 0xB4, 0x3A, 0x91, 0x09, 0x8D, 0x2D, 0xEC, 0x25, 0xE7, 0x9E, 0xB3, 0x2C, 0x13, 0xBF, 0x4C, 0x73, 0x54, 0x03, 0x5E, 0x16, 0x56, 0xDB, 0xF4, 0xFF, 0x03, 0xDC, 0xFA, 0x4A, 0xFA, 0xBD, 0x02, 0xCE, 0xA6, 0x90, 0x01, 0x07, 0x81, 0x82, 0x32, 0x72, 0xDA, 0xD9, 0xDA, 0x17, 0xBF, 0x9E, 0x02, 0x2A, 0x47, 0x3E, 0xBD, 0xE6, 0x6C, 0x40, 0xCD, 0xE2, 0xB6, 0x09, 0xA9, 0x55, 0x5A, 0xBF, 0x4B, 0xEE, 0x2A, 0x12, 0xB0, 0xFA, 0x6F, 0xB1, 0x06, 0xD9, 0x28, 0xD5, 0xC2, 0xD7, 0xCA, 0x9B, 0xC4, 0x48, 0xB7, 0x0C, 0x80, 0x04, 0xFA, 0x8A, 0x34, 0xC9, 0x75, 0x4A, 0x15, 0x2D, 0x3B, 0xF6, 0xCC, 0x13, 0x9D, 0x6D, 0xBA, 0x2D, 0x34, 0x31, 0x20, 0x43, 0xBA, 0xE8, 0xDF, 0xAA, 0xFF, 0x95, 0x4C, 0xCB, 0x6F, 0x5F, 0xA3, 0xD8, 0xA5, 0x6D, 0x67, 0x6C, 0xE5, 0x41, 0x7E, 0x6F, 0x05, 0x00, 0x95, 0xAE, 0xD5, 0xCB, 0xED, 0xC7, 0x01, 0x8F, 0x12, 0x6A, 0x9E, 0x7A, 0xD8, 0x35, 0x58, 0x79, 0xC3, 0x89, 0xEC, 0xBB, 0xB2, 0xAA, 0x59, 0xB5, 0x23, 0xA0, 0xEA, 0x55, 0xD6, 0x86, 0x19, 0x40, 0x03, 0xBD, 0x53, 0xD6, 0xA4, 0x96, 0x87, 0x96, 0xC7, 0x2A, 0x7B, 0x12, 0xB0, 0x38, 0xDC, 0x4B, 0x4F, 0x74, 0xD9, 0xD9, 0xE8, 0x9E, 0xE8, 0x71, 0x0F, 0x20, 0x1B, 0xA4, 0xBA, 0x42, 0x34, 0x86, 0x8D, 0xAF, 0x68, 0x31, 0xA1, 0xEB, 0x41, 0xD1, 0xA1, 0xB8, 0x93, 0x9E, 0xE8, 0x8A, 0xF6, 0x3B, 0x54, 0x26, 0x91, 0x11, 0x30, 0x9B, 0xA4, 0xE2, 0x43, 0xA6, 0xD3, 0xCC, 0x07, 0x20, 0x0B, 0xA6, 0x9A, 0xDE, 0x36, 0x3F, 0x45, 0x7E, 0x74, 0x00, 0x00, 0x36, 0xFF, 0xF1, 0xC1, 0xBC, 0x03, 0xF0, 0x81, 0x35, 0x65, 0xDD, 0x5E, 0x93, 0x8B, 0xAD, 0x01, 0x80, 0x0C, 0xFE, 0x09, 0xE8, 0xFD, 0x24, 0xDD, 0x82, 0x00, 0xB7, 0x20, 0x52, 0xAB, 0x2D, 0xE0, 0x0F, 0x12, 0xE8, 0xF0, 0x60, 0x5C, 0x82, 0x38, 0x20, 0x59, 0x91, 0xFD, 0xA3, 0xFD, 0x9E, 0x88, 0xF1, 0xC3, 0x06, 0x1D, 0x11, 0x77, 0xDA, 0x0D, 0x32, 0x15, 0xCF, 0xAA, 0x0F, 0x76, 0x20, 0x1B, 0xFF, 0xA9, 0xFA, 0x6D, 0x1B, 0xFA, 0xB7, 0x12, 0x20, 0x6D, 0x63, 0x9E, 0x14, 0x8A, 0x43, 0xBA, 0x5C, 0xDA, 0x2C, 0xFA, 0x87, 0x9F, 0x54, 0x12, 0xA7, 0x9F, 0xDA, 0x7F, 0x4C, 0x9C, 0xF7, 0x3C, 0xBB, 0x9E, 0x18, 0x3A, 0x99, 0x0C, 0x53, 0xAC, 0x83, 0x4B, 0x4C, 0x00, 0xCD, 0x39, 0xA4, 0xFB, 0x46, 0xC0, 0x6B, 0x2B, 0xD9, 0xFA, 0x1E, 0x30, 0xA6, 0x92, 0x04, 0x34, 0xD3, 0xA6, 0x5F, 0x17, 0x7B, 0x7F, 0x98, 0x21, 0x19, 0x01, 0x53, 0x27, 0x7A, 0x90, 0x6D, 0x1A, 0x24, 0x64, 0xFB, 0x0C, 0x92, 0xBC, 0x63, 0x76, 0xC0, 0x48, 0xB1, 0xF8, 0xED, 0x68, 0x7F, 0xD2, 0xD4, 0x8A, 0x46, 0x9D, 0x4F, 0x7F, 0x99, 0x0D, 0x90, 0x7D, 0x1F, 0xDC, 0x6E, 0x22, 0x06, 0x1C, 0x2A, 0x9C, 0x28, 0x06, 0x15, 0x16, 0x38, 0x8B, 0x0B, 0x7B, 0x65, 0x7F, 0x11, 0xC3, 0xFC, 0x93, 0x0B, 0xC4, 0xA8, 0x26, 0x64, 0x4C, 0x47, 0x00, 0x72, 0x7C, 0x1D, 0x50, 0x1B, 0x4D, 0x0E, 0x3F, 0x03, 0xB8, 0x6E, 0x23, 0xBB, 0x7B, 0x01, 0xBE, 0x71, 0x24, 0x00, 0x2C, 0x50, 0x17, 0x5D, 0xDF, 0xCF, 0xEB, 0x2F, 0x8E, 0xCF, 0x0D, 0x3A, 0x2E, 0x2E, 0x38, 0x36, 0x3F, 0x42, 0xCC, 0x6A, 0x37, 0xAF, 0x9B, 0x58, 0x5A, 0x11, 0xB4, 0x91, 0x6C, 0x7E, 0x80, 0xEC, 0x91, 0xF3, 0xD4, 0x11, 0x20, 0xFD, 0xB7, 0x5D, 0x6C, 0x23, 0xCE, 0x8A, 0x3C, 0x62, 0x27, 0x86, 0x36, 0xDD, 0xB1, 0x56, 0x8C, 0x1C, 0x97, 0xFC, 0x52, 0x5C, 0xF6, 0x61, 0x9D, 0xBB, 0xB8, 0xB2, 0x8A, 0x5C, 0x99, 0x0C, 0x00, 0xE4, 0xAA, 0x61, 0x80, 0xB2, 0x3D, 0x19, 0xD2, 0x16, 0xE8, 0x64, 0x4E, 0x0E, 0xA9, 0x02, 0x06, 0x8C, 0x21, 0x01, 0x20, 0x62, 0x9A, 0x68, 0x5D, 0xB3, 0x34, 0x5F, 0x1C, 0xD7, 0x7F, 0x51, 0xB4, 0x18, 0x3A, 0x2F, 0xCC, 0x57, 0xCC, 0xD6, 0x8D, 0xFC, 0x24, 0x5E, 0xAF, 0x8A, 0x28, 0xAD, 0x35, 0x82, 0xF4, 0x27, 0xDC, 0x7C, 0x28, 0xCE, 0xF6, 0x3C, 0xD9, 0x47, 0xFC, 0x6F, 0xE2, 0x6E, 0x5F, 0x71, 0x59, 0xB3, 0x14, 0x73, 0x71, 0xD5, 0xDD, 0xF8, 0x72, 0x71, 0xAD, 0x67, 0xE4, 0x77, 0x31, 0x7E, 0x11, 0xB9, 0xB6, 0x05, 0x00, 0x39, 0xAE, 0xAF, 0x30, 0x52, 0x0B, 0xE8, 0xA0, 0x4C, 0x0E, 0x4D, 0x07, 0x86, 0x5E, 0x25, 0x01, 0x60, 0xB9, 0x0B, 0xD9, 0x2A, 0xA1, 0xEB, 0xF5, 0xA5, 0x85, 0x92, 0x07, 0x44, 0xC6, 0xDC, 0x17, 0x17, 0xB7, 0x5B, 0x35, 0x4C, 0xDC, 0x1E, 0xBA, 0x36, 0x55, 0x2C, 0xFF, 0x1A, 0xB7, 0xFB, 0xCD, 0x2F, 0x80, 0x9C, 0x7F, 0xF7, 0xCC, 0x2A, 0x31, 0xDC, 0x67, 0x6F, 0x3F, 0x71, 0x55, 0xCB, 0x94, 0xA3, 0x62, 0xDC, 0xB8, 0x35, 0x7B, 0xC4, 0xF5, 0xB3, 0xC2, 0x9D, 0xC4, 0xC4, 0xF2, 0x45, 0x59, 0xE2, 0xC6, 0xEE, 0x64, 0xC2, 0x71, 0x45, 0xFF, 0x86, 0xFD, 0x0A, 0x97, 0x6B, 0x03, 0xE6, 0xCB, 0x49, 0xDF, 0x8B, 0xC0, 0xF0, 0xEE, 0x64, 0x97, 0x6E, 0x40, 0xE8, 0x3E, 0x12, 0xD0, 0x8C, 0x5E, 0xAF, 0x27, 0x3A, 0xAD, 0x58, 0x17, 0x26, 0xCE, 0xFB, 0xB7, 0x21, 0x41, 0xDC, 0xA9, 0x93, 0x9C, 0x2B, 0x7E, 0x3D, 0x9E, 0x16, 0x75, 0x93, 0x90, 0xD7, 0x18, 0x95, 0xBF, 0x58, 0x5C, 0xEB, 0x9B, 0xDA, 0x57, 0x4C, 0x9C, 0xB9, 0x72, 0xA5, 0xB8, 0xD9, 0x33, 0xAC, 0x99, 0x98, 0x94, 0x15, 0xBC, 0x44, 0x4C, 0x99, 0x30, 0x65, 0x92, 0x98, 0x6A, 0x49, 0x6E, 0xFA, 0x0C, 0x40, 0x6E, 0x9B, 0xAA, 0x30, 0x61, 0x1A, 0x60, 0xF6, 0x88, 0x0C, 0xF7, 0x04, 0x5C, 0xCF, 0x91, 0x53, 0xFB, 0x6B, 0xCF, 0x9A, 0x6C, 0x49, 0x02, 0x40, 0x9A, 0xA7, 0x68, 0xB9, 0x3E, 0xAD, 0x4A, 0x9C, 0xDC, 0x2A, 0xFD, 0xB1, 0x78, 0x58, 0x7F, 0x87, 0xCD, 0x93, 0x21, 0xC0, 0xAB, 0x88, 0x1D, 0xA6, 0x87, 0xC7, 0x40, 0x7A, 0xAE, 0x6C, 0xCE, 0x53, 0xBC, 0x66, 0x94, 0xB6, 0x98, 0xB6, 0x63, 0xDE, 0x6A, 0x31, 0xA3, 0xC3, 0x54, 0x4B, 0x31, 0x33, 0x6C, 0xEC, 0x4A, 0x31, 0xAB, 0x64, 0xCC, 0x1C, 0xF5, 0xAE, 0x8A, 0xF9, 0x92, 0xF6, 0x1D, 0x80, 0xDC, 0x36, 0x52, 0x61, 0xC6, 0x7D, 0xA0, 0xE5, 0x0B, 0x32, 0xE1, 0x17, 0xE0, 0xA4, 0x41, 0x2E, 0xC8, 0x06, 0x66, 0x5E, 0x24, 0xC7, 0xA4, 0x03, 0xAB, 0xE7, 0x92, 0x5D, 0x0B, 0xD5, 0xAF, 0x64, 0x3A, 0xFF, 0x68, 0x03, 0xD8, 0x38, 0x1E, 0xEC, 0x5D, 0xEA, 0x05, 0x64, 0x9F, 0xCF, 0x6F, 0x98, 0xB2, 0x06, 0xB8, 0xB7, 0x3F, 0xDF, 0x66, 0x85, 0x57, 0x83, 0xD3, 0xE4, 0xDE, 0xCE, 0xF3, 0xAF, 0xD5, 0xBF, 0x47, 0xEE, 0x76, 0x09, 0x70, 0x03, 0xC8, 0xDC, 0xFC, 0x29, 0x21, 0x46, 0x9B, 0xC8, 0xEC, 0xD4, 0x29, 0xF1, 0x9D, 0xAC, 0xC9, 0x8C, 0x3E, 0x53, 0x42, 0x7A, 0x18, 0x92, 0xA9, 0x39, 0xC3, 0x6D, 0xDB, 0xFC, 0x52, 0xAC, 0x23, 0xBB, 0xB1, 0xA2, 0x7F, 0xB7, 0x85, 0xC2, 0xDC, 0xF5, 0x40, 0x73, 0x23, 0x32, 0x3B, 0x12, 0x70, 0x94, 0x19, 0x99, 0x03, 0x4C, 0xBA, 0x5E, 0xE7, 0x29, 0x20, 0x74, 0x49, 0x55, 0x6D, 0xCE, 0x0D, 0x60, 0xD5, 0xB9, 0xE2, 0x03, 0xC9, 0x93, 0x80, 0x6C, 0x63, 0x8B, 0x46, 0xCA, 0x57, 0xBA, 0xEB, 0x9D, 0x99, 0xD2, 0x46, 0xA9, 0x99, 0xE5, 0xF9, 0x1F, 0x45, 0xDE, 0x6D, 0x4C, 0x00, 0xB2, 0x28, 0xB9, 0xE5, 0x75, 0xF1, 0x58, 0x85, 0xA1, 0x99, 0x78, 0xF8, 0x71, 0xA3, 0xEE, 0xE2, 0x41, 0x73, 0x9D, 0xC1, 0x62, 0xBE, 0x91, 0x46, 0xBE, 0x78, 0x60, 0xB0, 0x8E, 0xBB, 0xB8, 0xB7, 0x9A, 0xDC, 0x53, 0x04, 0x40, 0x1E, 0x33, 0x41, 0xE1, 0xA9, 0x36, 0x80, 0x66, 0x21, 0x79, 0xA2, 0x01, 0xE0, 0x74, 0x92, 0x2C, 0xEA, 0xA4, 0xDC, 0x7F, 0x74, 0x5A, 0x95, 0xDF, 0xE5, 0x42, 0x60, 0x9C, 0xEE, 0x93, 0x5D, 0xCF, 0xFA, 0x02, 0x81, 0xAD, 0xB6, 0x36, 0x78, 0x94, 0x02, 0x6C, 0x50, 0x02, 0x4E, 0xA7, 0x8C, 0xFC, 0x76, 0xE8, 0x2E, 0x90, 0x54, 0xFF, 0xDC, 0xC9, 0x03, 0x2F, 0x9A, 0x26, 0x4D, 0x98, 0x4A, 0x1E, 0xF8, 0x00, 0xB8, 0x19, 0x92, 0xF9, 0x6B, 0x1B, 0x99, 0xB8, 0xED, 0x27, 0xF7, 0x6D, 0x03, 0x64, 0x22, 0xE7, 0x55, 0x00, 0x66, 0x63, 0xC9, 0x03, 0x49, 0x40, 0xEB, 0x5B, 0xE4, 0x7E, 0x75, 0xC0, 0xD8, 0x90, 0xCC, 0xA5, 0x9C, 0xB3, 0x29, 0xFA, 0x0B, 0xBF, 0x2B, 0x2C, 0x6D, 0xA8, 0x55, 0xA2, 0x5C, 0x43, 0x5E, 0xEF, 0x06, 0x58, 0x1F, 0xFB, 0x31, 0xE0, 0xC1, 0x0D, 0xC0, 0xF9, 0xF4, 0xD3, 0xF0, 0xAF, 0x37, 0x01, 0x97, 0xDF, 0x87, 0x0F, 0x57, 0x6A, 0x00, 0x93, 0x66, 0x4E, 0x6A, 0xF6, 0xEB, 0x3A, 0xB0, 0xFE, 0x21, 0xF0, 0x7D, 0x82, 0x9F, 0x47, 0x4E, 0x28, 0xF0, 0x7C, 0xF1, 0xD5, 0xC5, 0x99, 0xF3, 0x80, 0x3D, 0xDD, 0xC9, 0xCD, 0x19, 0x40, 0x74, 0x30, 0x99, 0x76, 0x07, 0x08, 0x76, 0x26, 0x33, 0xF6, 0xE1, 0x4B, 0xA0, 0x13, 0x99, 0x79, 0x18, 0xCF, 0xFD, 0x34, 0xC9, 0xAC, 0x06, 0x4A, 0xA6, 0x43, 0x86, 0xD7, 0x69, 0xA1, 0xB4, 0xA6, 0xFF, 0x2E, 0x32, 0x73, 0x0D, 0x79, 0x2E, 0x57, 0xD1, 0x7F, 0xC3, 0x5B, 0xE1, 0xBD, 0x67, 0x40, 0x23, 0xAB, 0xEA, 0x2B, 0xAF, 0xA7, 0x00, 0xC6, 0x53, 0x3E, 0xBC, 0x24, 0x81, 0x4E, 0xF6, 0xE7, 0xC7, 0x88, 0xFD, 0xE6, 0xAC, 0x35, 0xA0, 0x0F, 0x30, 0xDB, 0x7F, 0x48, 0x2C, 0xD9, 0xCE, 0x28, 0xAA, 0xA5, 0xB9, 0x2A, 0x19, 0x58, 0x16, 0xF3, 0x5F, 0x23, 0xD9, 0x75, 0xC2, 0xB2, 0x53, 0xC0, 0xAB, 0xD6, 0x5F, 0x9B, 0x84, 0x74, 0x05, 0x4E, 0xAC, 0x27, 0xC3, 0x67, 0x74, 0xC8, 0xDB, 0x3B, 0x9F, 0x0C, 0xF3, 0x00, 0x12, 0x8A, 0xC9, 0xB8, 0xD1, 0x40, 0xA4, 0x25, 0xB9, 0xEE, 0x0D, 0xB0, 0x78, 0x0B, 0x99, 0xE8, 0x05, 0xCC, 0xFC, 0x4B, 0x6E, 0x28, 0x23, 0x6F, 0xFE, 0xA7, 0xE8, 0x7F, 0x7A, 0x47, 0xFC, 0x37, 0xE6, 0x63, 0x19, 0x50, 0xFF, 0xED, 0xBB, 0x7D, 0xFF, 0xC2, 0x81, 0xA6, 0xBD, 0xAE, 0xEE, 0x22, 0x81, 0x6E, 0xD9, 0xE9, 0x05, 0xA4, 0x8A, 0xCE, 0x80, 0xE0, 0xD9, 0x57, 0x49, 0xE3, 0xD6, 0xBE, 0x06, 0x00, 0x09, 0x44, 0xAC, 0x36, 0x1E, 0x25, 0x53, 0xDC, 0x77, 0x89, 0xC5, 0x7B, 0x72, 0x9D, 0xA1, 0x4B, 0x7D, 0x80, 0x3C, 0xDC, 0xD5, 0x76, 0x19, 0xF0, 0x51, 0xA3, 0xFA, 0xD0, 0xC8, 0x85, 0xC0, 0x75, 0x77, 0xCE, 0x9D, 0xBC, 0x05, 0x38, 0x36, 0x81, 0x0C, 0xBE, 0x00, 0xEC, 0x8A, 0x26, 0x43, 0x55, 0x80, 0xE4, 0x33, 0x64, 0xC4, 0x6B, 0x20, 0x5E, 0x9B, 0x8C, 0x4A, 0x24, 0x9F, 0xA6, 0x02, 0x00, 0xF9, 0x65, 0x1D, 0xA0, 0x7C, 0xF5, 0x9D, 0x57, 0xE5, 0x09, 0x40, 0x63, 0xCA, 0xC3, 0x08, 0x52, 0x9F, 0xEA, 0x11, 0x79, 0x39, 0x24, 0x60, 0x35, 0x3D, 0xAA, 0x80, 0x34, 0x0C, 0xB4, 0x55, 0x76, 0x7F, 0x4B, 0x6A, 0xD9, 0xF5, 0xA9, 0x68, 0xD0, 0x9C, 0x6C, 0xF5, 0xD3, 0x73, 0x82, 0x52, 0x2B, 0xD2, 0x3D, 0xD6, 0xF5, 0x87, 0x85, 0x3A, 0x19, 0xB9, 0xAA, 0xCD, 0x02, 0x2D, 0xD9, 0x85, 0x52, 0xE9, 0x58, 0x0E, 0x90, 0x57, 0x0F, 0xB4, 0xDF, 0x0B, 0xFC, 0x3C, 0xFB, 0xE3, 0x88, 0xFB, 0x3B, 0xA0, 0xDC, 0xAA, 0x36, 0x78, 0xD0, 0x21, 0xE0, 0xCA, 0x18, 0xD2, 0x77, 0x23, 0x70, 0xCA, 0x96, 0xF4, 0xDF, 0x01, 0x1C, 0x68, 0x23, 0xD7, 0x6A, 0xB5, 0xAB, 0x2B, 0xD2, 0x01, 0x15, 0x8B, 0xCF, 0x2F, 0x2B, 0x8D, 0x81, 0xFA, 0xD6, 0xF7, 0x8E, 0xFC, 0x6D, 0x0A, 0x68, 0xED, 0x3F, 0xEB, 0x4D, 0x36, 0x9C, 0xDB, 0x40, 0x23, 0x36, 0x88, 0x04, 0xBA, 0x5D, 0xED, 0x1B, 0x28, 0xBA, 0xEB, 0xA8, 0xBE, 0x12, 0x07, 0xCD, 0x56, 0x7E, 0x4F, 0xB6, 0xB9, 0xEC, 0x96, 0x02, 0x90, 0x76, 0x37, 0x1C, 0xAF, 0x8B, 0x3D, 0x8B, 0x6D, 0xB5, 0xD4, 0x27, 0x92, 0xE1, 0xD5, 0xE6, 0xA3, 0x24, 0xA7, 0xC6, 0x77, 0x7C, 0x26, 0x5E, 0x7C, 0x66, 0xAE, 0xEB, 0xFE, 0x86, 0xE4, 0x3C, 0x00, 0xF8, 0xF8, 0xBB, 0xFA, 0x8B, 0xDD, 0x19, 0xC8, 0x3E, 0x91, 0xBD, 0x6B, 0x91, 0x5A, 0xF5, 0xD5, 0x6D, 0xA4, 0x67, 0x75, 0x55, 0xAE, 0xF4, 0x37, 0xD0, 0x2E, 0x9F, 0xFF, 0x63, 0x40, 0x9D, 0x9D, 0xCE, 0xCF, 0xAD, 0x6E, 0x0F, 0xE8, 0xAE, 0xCC, 0x79, 0x4F, 0x2A, 0x37, 0x32, 0x0C, 0x99, 0x05, 0x52, 0xB3, 0x4D, 0xFB, 0x68, 0x73, 0x7B, 0xCA, 0x3A, 0x2C, 0x01, 0xD1, 0xF3, 0x90, 0x68, 0xD2, 0xCB, 0x3E, 0x50, 0xEC, 0xBC, 0xA8, 0x2B, 0x45, 0xE7, 0xB1, 0x16, 0x67, 0x5B, 0x6C, 0x20, 0x03, 0x4D, 0xF4, 0x9A, 0x2B, 0x75, 0x23, 0x57, 0xD5, 0x33, 0xCB, 0x02, 0xC8, 0xF4, 0x60, 0xD3, 0x53, 0xE2, 0xC1, 0x03, 0x6D, 0x34, 0xBB, 0xE7, 0x93, 0x55, 0xC3, 0x01, 0xC9, 0x7F, 0x0F, 0x76, 0x38, 0x0D, 0x7C, 0x18, 0xC5, 0xF0, 0xCE, 0x39, 0xEF, 0x1E, 0xFE, 0x38, 0x0C, 0xA8, 0xCF, 0xBB, 0x52, 0xF1, 0x33, 0xA7, 0xCE, 0xD2, 0x03, 0x9F, 0xAA, 0xFF, 0x00, 0xBA, 0x4E, 0x11, 0x20, 0x01, 0x93, 0x81, 0x6E, 0x39, 0xA2, 0xDD, 0xFB, 0x86, 0xEF, 0x45, 0x57, 0x00, 0xA4, 0xCA, 0x06, 0x7B, 0x1D, 0xB1, 0x65, 0x7F, 0xAB, 0x7E, 0xA2, 0xE5, 0x6A, 0xF3, 0x0C, 0xD1, 0x6E, 0xA3, 0xD9, 0x3D, 0xD1, 0x15, 0xC6, 0xB7, 0xF5, 0x0B, 0xC8, 0xF9, 0x17, 0xF4, 0x0B, 0x24, 0xAF, 0xDE, 0xD5, 0xFA, 0x84, 0x98, 0x7E, 0xB9, 0xF5, 0x15, 0x31, 0x7F, 0xBE, 0x91, 0xA7, 0x78, 0x53, 0xB5, 0x25, 0x4D, 0x5E, 0x93, 0xDF, 0xA7, 0x48, 0x9A, 0x96, 0x0A, 0x88, 0x53, 0xF4, 0x15, 0x4A, 0x97, 0xD5, 0x3C, 0xD2, 0x18, 0x80, 0x57, 0x47, 0x12, 0xE8, 0x38, 0xCB, 0xF7, 0x93, 0xD8, 0x67, 0xD4, 0x28, 0x47, 0xD1, 0x1F, 0x23, 0xD4, 0x48, 0xED, 0x5D, 0xAB, 0x5F, 0x0D, 0xD8, 0x29, 0x79, 0x87, 0xEF, 0x30, 0x35, 0xF1, 0x42, 0x8B, 0xC1, 0x0B, 0x48, 0x3D, 0xDB, 0xAF, 0xB6, 0x36, 0x66, 0xBF, 0x1D, 0x01, 0xB2, 0xEB, 0xDF, 0x67, 0x2F, 0x45, 0x1B, 0xF3, 0x1B, 0x73, 0xC5, 0xBE, 0x3D, 0xCF, 0x24, 0x8B, 0xC3, 0x9B, 0x1C, 0xE9, 0x29, 0x8E, 0xBF, 0xBD, 0x6F, 0x96, 0x38, 0xA5, 0x1F, 0x39, 0xF3, 0x29, 0x00, 0xD4, 0x59, 0xA6, 0xB0, 0xD7, 0x19, 0xA0, 0xC7, 0x75, 0xD2, 0xE4, 0x01, 0xD0, 0xEF, 0x00, 0x09, 0x34, 0x4E, 0x98, 0xBC, 0x59, 0xEC, 0xF5, 0xDA, 0xFF, 0x81, 0xE8, 0xAF, 0x36, 0x6E, 0x05, 0x69, 0x3C, 0x6B, 0xED, 0xA3, 0x21, 0x7A, 0x92, 0xB7, 0xC7, 0x06, 0xF8, 0x88, 0x25, 0x23, 0xC7, 0x87, 0x93, 0xAD, 0x83, 0x7E, 0xE9, 0x39, 0xF5, 0xFE, 0x6C, 0x09, 0x90, 0x16, 0xF7, 0xEE, 0x7F, 0x13, 0xBD, 0x4E, 0x5C, 0x9C, 0x23, 0x8E, 0xA8, 0x77, 0xFC, 0xAD, 0x18, 0xA0, 0x9F, 0xE7, 0x21, 0x4E, 0xCB, 0xDC, 0x1E, 0x2F, 0x06, 0xB7, 0x25, 0xE7, 0xF6, 0x00, 0x80, 0x3A, 0x37, 0x2A, 0x1C, 0x58, 0x0A, 0x74, 0xBB, 0x49, 0x9A, 0x4E, 0x04, 0x06, 0x99, 0x90, 0x80, 0x46, 0xFB, 0x59, 0x96, 0xA2, 0x6B, 0xB3, 0x49, 0xAF, 0xC4, 0x80, 0xE9, 0x13, 0xD4, 0xC4, 0x90, 0xD0, 0x99, 0x79, 0x62, 0x56, 0xFD, 0xA0, 0x43, 0xE2, 0x15, 0xED, 0x69, 0xB6, 0xA4, 0xE5, 0xB5, 0xBF, 0x95, 0x9E, 0x07, 0x5F, 0xC4, 0x02, 0xA4, 0x4B, 0xE8, 0x75, 0x91, 0x23, 0xF4, 0x0B, 0xBB, 0x88, 0x01, 0x1D, 0x0F, 0x7A, 0x89, 0x33, 0x3C, 0x77, 0x8E, 0x14, 0xE7, 0xF9, 0xA5, 0x27, 0x89, 0x0B, 0xEF, 0x92, 0x0B, 0xCE, 0x03, 0x90, 0xE3, 0x2C, 0x85, 0x21, 0x95, 0x80, 0x66, 0x18, 0x69, 0xFB, 0x13, 0xE8, 0x67, 0x4E, 0x02, 0x98, 0xB5, 0x60, 0x83, 0xE8, 0x38, 0x34, 0xE8, 0x9A, 0x38, 0x2E, 0x7E, 0x86, 0xA3, 0x38, 0xDF, 0x24, 0x64, 0xB1, 0xB8, 0x4D, 0x63, 0x61, 0x37, 0xF1, 0xE6, 0xFB, 0x85, 0xF3, 0xC4, 0xBF, 0x1A, 0xB3, 0x07, 0x3F, 0xB0, 0x04, 0xC8, 0x41, 0x4F, 0x8B, 0xEF, 0x8B, 0x13, 0x94, 0x8F, 0x1C, 0x17, 0x83, 0x32, 0x76, 0xAF, 0x10, 0x43, 0x2E, 0x67, 0x2C, 0x15, 0x97, 0xDC, 0xDB, 0x90, 0x23, 0x46, 0xC8, 0xF1, 0x1E, 0x45, 0xFF, 0xD2, 0x86, 0x0A, 0x17, 0xBB, 0x03, 0xDA, 0x77, 0xC8, 0xFE, 0x19, 0x80, 0xC7, 0x67, 0x12, 0x00, 0xC2, 0xBA, 0x89, 0x5D, 0x94, 0x17, 0xAC, 0x12, 0x87, 0xAE, 0x58, 0xB8, 0x47, 0x0C, 0xBD, 0x10, 0x7A, 0x51, 0xCC, 0xB6, 0x8B, 0x98, 0x23, 0x3E, 0xF0, 0x8B, 0x2E, 0xFA, 0x9E, 0x0A, 0xFC, 0xE9, 0x17, 0xFA, 0xEE, 0xCA, 0x50, 0x80, 0x1C, 0x6F, 0x75, 0xD2, 0x44, 0x9C, 0x35, 0x79, 0x4F, 0x99, 0xB8, 0x68, 0x6B, 0x46, 0x95, 0x18, 0xBE, 0x71, 0xC3, 0x19, 0x31, 0x7A, 0xD7, 0xEA, 0x8F, 0xE2, 0xF2, 0x30, 0x32, 0x46, 0xF1, 0xF1, 0xE0, 0xB2, 0x04, 0x85, 0x31, 0x2A, 0x80, 0x5A, 0x05, 0xD9, 0xD7, 0x18, 0x18, 0xDC, 0x86, 0x34, 0x9E, 0x0E, 0xCC, 0xDD, 0x4B, 0x02, 0x4D, 0x7A, 0x45, 0xE5, 0x88, 0xEE, 0x35, 0xD1, 0x5E, 0xE2, 0x5C, 0x87, 0x15, 0xE1, 0xE2, 0x0E, 0x8F, 0xD8, 0x12, 0xF1, 0x5D, 0xD2, 0xBA, 0xD1, 0x0F, 0xAB, 0x81, 0x9F, 0x5B, 0x56, 0x9C, 0x3D, 0x75, 0x14, 0x20, 0xE7, 0x5E, 0xC8, 0x8D, 0x15, 0x23, 0x02, 0xD2, 0x76, 0x2B, 0x3A, 0x12, 0x26, 0x89, 0xAB, 0xB2, 0xA2, 0x1E, 0x8A, 0xB1, 0x87, 0x97, 0x50, 0x8C, 0x5B, 0x44, 0xC6, 0xB6, 0x54, 0xF4, 0xAF, 0xCD, 0x51, 0x18, 0xDF, 0x0F, 0x50, 0x2A, 0x25, 0xC7, 0x9D, 0x01, 0x06, 0xA6, 0x91, 0xC3, 0x42, 0xD5, 0xAE, 0x4F, 0x5C, 0x4A, 0x02, 0x40, 0xC2, 0x71, 0xB1, 0x87, 0x47, 0xC2, 0x1C, 0x71, 0x52, 0xC4, 0xC6, 0xF8, 0xDF, 0xC7, 0x80, 0xEC, 0xDA, 0xD4, 0x29, 0x65, 0x45, 0xC0, 0x93, 0xE8, 0x94, 0x2F, 0x47, 0x3B, 0x00, 0x5F, 0xED, 0x93, 0x5E, 0x64, 0x9D, 0x04, 0xC8, 0xD5, 0x57, 0x12, 0xF2, 0xC4, 0x84, 0x7D, 0x11, 0xCB, 0xC5, 0xC4, 0x92, 0xD0, 0xF5, 0xE2, 0x46, 0xFF, 0xA0, 0x48, 0x31, 0x69, 0xC8, 0xC4, 0xB1, 0xE2, 0x96, 0xB9, 0xE4, 0xC6, 0x1B, 0x00, 0xE4, 0xB6, 0x4F, 0x0A, 0x53, 0x96, 0x00, 0xAA, 0x55, 0x8A, 0xF3, 0x43, 0x87, 0x28, 0x72, 0xA6, 0x26, 0x30, 0x21, 0x92, 0x9C, 0xDC, 0x57, 0xFF, 0x5A, 0x48, 0x5D, 0xB6, 0xEE, 0xA3, 0xD3, 0x37, 0x49, 0xE9, 0x71, 0x5B, 0xA0, 0xF3, 0xAE, 0xDD, 0xA5, 0x27, 0x87, 0x03, 0x89, 0xC7, 0x76, 0x6E, 0xD9, 0xEC, 0x07, 0xDC, 0x78, 0xBA, 0xE3, 0xD7, 0x12, 0x65, 0xE0, 0xB3, 0xE5, 0x3E, 0x8F, 0x79, 0x5E, 0x00, 0x99, 0x59, 0x3B, 0x79, 0x98, 0x98, 0xBD, 0x23, 0xE0, 0xBA, 0x46, 0x7D, 0x32, 0xAB, 0x83, 0xBF, 0x57, 0x63, 0x13, 0x32, 0x7D, 0x94, 0xDF, 0xAA, 0x46, 0xB3, 0xEA, 0x54, 0xF2, 0xBE, 0xAC, 0x23, 0x52, 0xFE, 0x2A, 0xFA, 0xB7, 0xFD, 0x52, 0xB8, 0xA3, 0x05, 0xA0, 0x3D, 0x81, 0xCC, 0x68, 0x0F, 0xF4, 0x74, 0x26, 0xD3, 0xE7, 0x01, 0x83, 0x7B, 0x92, 0xD9, 0x7D, 0x81, 0xA9, 0x6B, 0x5E, 0xE8, 0x67, 0x6E, 0x07, 0x16, 0xA9, 0x1F, 0x0D, 0x8B, 0x77, 0x00, 0x36, 0x8D, 0xB4, 0x08, 0x50, 0x6F, 0x69, 0x99, 0x7A, 0xAC, 0x46, 0xAF, 0xBF, 0xE1, 0xD8, 0x33, 0x83, 0x8F, 0xF9, 0xB5, 0x4C, 0x69, 0xBC, 0xF2, 0x4B, 0xEB, 0xE3, 0xE6, 0x7A, 0x8E, 0x00, 0x79, 0x04, 0xF5, 0xB3, 0xC4, 0x43, 0x7D, 0x54, 0xEE, 0x89, 0xF9, 0xEF, 0xEB, 0xB5, 0x11, 0x0F, 0x54, 0x28, 0xDC, 0x77, 0x41, 0xB3, 0xBF, 0x98, 0xDB, 0x8F, 0x94, 0xAF, 0x60, 0x80, 0xCC, 0x0B, 0x52, 0x78, 0x98, 0x40, 0x83, 0xFD, 0xE4, 0xD1, 0xF1, 0x40, 0xF7, 0xD1, 0x64, 0x71, 0x26, 0x5E, 0xBA, 0x3F, 0x78, 0x59, 0x5C, 0x32, 0x07, 0xF0, 0x7A, 0x76, 0x13, 0xF7, 0x2E, 0x03, 0x83, 0x06, 0x6C, 0xD2, 0xBC, 0x3E, 0x0E, 0x88, 0xDA, 0x07, 0x1C, 0xD0, 0xF0, 0xBC, 0xB6, 0x67, 0x2C, 0xB0, 0xB9, 0xFF, 0xC9, 0x6B, 0xDB, 0x83, 0x80, 0xB9, 0xDD, 0x7E, 0x98, 0xEF, 0x76, 0xD1, 0x32, 0x19, 0x72, 0x8D, 0xDC, 0xD5, 0x1A, 0x70, 0x59, 0x4E, 0xEE, 0x76, 0xAD, 0x6F, 0xE1, 0x6E, 0x4D, 0xEE, 0x08, 0x50, 0xCF, 0x70, 0x6C, 0x5F, 0xA7, 0xB3, 0x5A, 0x85, 0xCD, 0x3E, 0x72, 0xFB, 0x25, 0xD5, 0xF0, 0x6E, 0xB7, 0xC8, 0x9C, 0x30, 0xF2, 0xF0, 0x3D, 0x45, 0x7F, 0xE1, 0x6F, 0x85, 0x17, 0x94, 0x55, 0xDB, 0x2B, 0xDF, 0x25, 0xAF, 0x07, 0x03, 0xED, 0xF4, 0x3E, 0xD8, 0xDE, 0x33, 0xA9, 0xB3, 0xF5, 0x9D, 0xC2, 0x37, 0x23, 0x80, 0xF6, 0x8B, 0xF3, 0xDC, 0x3E, 0xBB, 0x03, 0x03, 0xAC, 0x82, 0xD6, 0x57, 0x98, 0x03, 0x61, 0xBB, 0x80, 0x0F, 0x1D, 0x7C, 0xBE, 0x6E, 0x59, 0x00, 0x3C, 0xD5, 0xBC, 0xBC, 0x65, 0x43, 0x29, 0x70, 0xDC, 0xFA, 0x63, 0x0F, 0xD9, 0x1B, 0x8E, 0x0F, 0x20, 0xD7, 0x6D, 0x06, 0xC2, 0xFE, 0x91, 0x1B, 0x82, 0x81, 0xB9, 0x8E, 0xE4, 0xE6, 0x3A, 0x27, 0x17, 0x93, 0x49, 0x25, 0x80, 0x7F, 0x2E, 0xB9, 0xA5, 0x25, 0x30, 0x46, 0xA9, 0xCE, 0x5E, 0x5C, 0x5A, 0xBC, 0x56, 0xD1, 0x7F, 0x7D, 0x9C, 0x58, 0x3D, 0xE6, 0x5E, 0x17, 0x40, 0xDD, 0xAE, 0xA2, 0x53, 0xF9, 0x3D, 0x40, 0x2F, 0xAA, 0x4C, 0xAF, 0x72, 0x3C, 0x60, 0x70, 0xFE, 0xD4, 0xBC, 0x3F, 0x71, 0x40, 0xF7, 0x76, 0xAB, 0x77, 0xFE, 0x33, 0x07, 0xFC, 0x94, 0xED, 0x14, 0xFB, 0x42, 0x7F, 0x01, 0xB2, 0xFF, 0xAC, 0x95, 0x57, 0x00, 0x8E, 0xCF, 0x35, 0x88, 0x76, 0x06, 0x3E, 0x69, 0x3E, 0xB7, 0x5D, 0x54, 0x0C, 0x9C, 0xBB, 0x45, 0x4E, 0x8D, 0x01, 0x0E, 0x2C, 0x23, 0x17, 0x98, 0x01, 0x19, 0xAF, 0xC8, 0xB0, 0x04, 0x20, 0x61, 0x07, 0x19, 0x35, 0x05, 0x58, 0xA9, 0x4D, 0xC6, 0x14, 0x01, 0xE1, 0x66, 0xE4, 0xF2, 0xF5, 0xF4, 0xBE, 0xE5, 0x0B, 0x00, 0x5C, 0xFF, 0xD4, 0x49, 0x7C, 0x7F, 0xF6, 0xF1, 0x14, 0xA0, 0xBE, 0xD9, 0x7D, 0x97, 0x8F, 0x87, 0x00, 0xD5, 0x61, 0xE7, 0xCF, 0xD4, 0x78, 0x03, 0xCD, 0x36, 0x6E, 0x1D, 0x41, 0x02, 0xD6, 0xCB, 0x43, 0x5F, 0x91, 0x16, 0x0B, 0x1C, 0x76, 0x01, 0x92, 0x43, 0x5B, 0x34, 0x1D, 0x48, 0x0E, 0x7D, 0xE2, 0x1B, 0xD9, 0x41, 0xAE, 0x84, 0x36, 0xB8, 0x1D, 0x06, 0xC8, 0xBD, 0x7B, 0xFB, 0xB5, 0x01, 0xBE, 0xAE, 0xAA, 0xF9, 0xEE, 0xB0, 0x12, 0x78, 0x70, 0x9C, 0xF4, 0xFE, 0x0A, 0x94, 0xB8, 0x93, 0x23, 0xA7, 0x01, 0xC7, 0x66, 0x91, 0xFE, 0x63, 0x80, 0xBD, 0x87, 0xC9, 0x69, 0xCD, 0x81, 0xCC, 0xBF, 0xE4, 0xAC, 0xA0, 0xEA, 0xF7, 0x4F, 0x56, 0x00, 0xC0, 0xD7, 0x92, 0x97, 0xBE, 0x40, 0xFD, 0xA5, 0xF7, 0xE7, 0xBC, 0x55, 0x06, 0x54, 0x8C, 0x8A, 0xAB, 0x2A, 0x23, 0x00, 0x0D, 0xA7, 0xDC, 0xAB, 0xB5, 0xD3, 0x80, 0x66, 0x3F, 0xC2, 0xC2, 0x48, 0xDD, 0x47, 0x1D, 0xD7, 0xB9, 0x97, 0x90, 0xCA, 0x11, 0xEE, 0x36, 0x2A, 0xA7, 0xC9, 0xC6, 0x46, 0x1E, 0xDE, 0x00, 0xE9, 0x1E, 0xE6, 0xE8, 0x66, 0xEE, 0x49, 0x46, 0xFB, 0x36, 0xB3, 0x52, 0x3F, 0x4C, 0xAE, 0xFB, 0x64, 0x6E, 0x02, 0x90, 0x57, 0xDE, 0x98, 0x0C, 0x72, 0xF6, 0x27, 0xB9, 0x19, 0x00, 0x2A, 0x3A, 0xD6, 0x06, 0xDA, 0xB8, 0x00, 0xF7, 0xCF, 0x92, 0x0E, 0xC3, 0x55, 0xFE, 0x5E, 0x79, 0x4A, 0xBA, 0xCF, 0x02, 0x8A, 0x96, 0x93, 0x03, 0x3A, 0x55, 0x7D, 0x7C, 0x3D, 0x0D, 0xA8, 0x3F, 0xEA, 0x71, 0xE9, 0x3B, 0x37, 0x40, 0xE3, 0x7C, 0x89, 0x6E, 0x45, 0x29, 0xA0, 0x92, 0x9A, 0xB7, 0xEC, 0xC7, 0x77, 0x40, 0x47, 0x79, 0xD5, 0x47, 0x12, 0x68, 0x7D, 0xA7, 0xCF, 0x16, 0xD1, 0x31, 0x46, 0xE7, 0x92, 0xD8, 0x6B, 0x0A, 0x40, 0xB6, 0xB0, 0x74, 0x7E, 0x2F, 0xBA, 0x5D, 0xED, 0x61, 0x6C, 0xD6, 0x44, 0xA6, 0x55, 0x93, 0x67, 0xAD, 0x66, 0x91, 0x61, 0x7B, 0x0D, 0xBA, 0x02, 0x64, 0xFA, 0x20, 0x93, 0xB1, 0x62, 0xFE, 0x13, 0xD3, 0x5F, 0x5D, 0x9E, 0x93, 0xDF, 0x2E, 0x03, 0x46, 0x9B, 0x49, 0xDE, 0x56, 0xD7, 0x00, 0xBE, 0x2C, 0x20, 0x2D, 0x4E, 0x00, 0xE5, 0xA9, 0x64, 0xE7, 0xB4, 0xF7, 0xD1, 0x1F, 0x56, 0x01, 0x9A, 0x9B, 0xAF, 0xDF, 0xFB, 0xD8, 0x17, 0x50, 0xF3, 0x3B, 0x72, 0xE7, 0xCB, 0x5E, 0x40, 0xFD, 0x54, 0xCA, 0xDB, 0x7F, 0x9F, 0x00, 0x6D, 0xC3, 0x49, 0x3E, 0xA4, 0xEA, 0x34, 0xB3, 0x22, 0x23, 0x55, 0x12, 0xF0, 0x70, 0x02, 0x44, 0xB7, 0x93, 0xA2, 0xD1, 0xDE, 0x1E, 0xAD, 0x45, 0xDB, 0x0B, 0x96, 0xAF, 0x45, 0xBB, 0x78, 0xF3, 0x6B, 0x4D, 0x55, 0xC9, 0xA0, 0x5B, 0x8D, 0xD4, 0x24, 0x2F, 0x4F, 0x69, 0x55, 0x23, 0xA6, 0x9E, 0x6A, 0xD5, 0x47, 0xDC, 0xBD, 0xBD, 0xD5, 0x23, 0xB1, 0xF4, 0x75, 0x6B, 0xFD, 0x0E, 0xD9, 0x64, 0xE5, 0x57, 0xA0, 0xD9, 0x48, 0xB2, 0x26, 0xAE, 0xDE, 0xBB, 0xB2, 0x73, 0x15, 0xE5, 0x40, 0x03, 0xF7, 0xC2, 0xB1, 0x15, 0x56, 0x80, 0xCA, 0xB7, 0xEC, 0xF4, 0xAA, 0x31, 0x80, 0x7A, 0xFC, 0xA2, 0xD7, 0x24, 0xD0, 0xA2, 0x9D, 0x5B, 0x90, 0xD8, 0xAD, 0x4A, 0x3B, 0x5E, 0x74, 0xD6, 0x05, 0xC4, 0x9E, 0x8D, 0xC5, 0xE6, 0x37, 0x2D, 0xD5, 0xC5, 0x4E, 0xC7, 0xCC, 0xC2, 0x45, 0x57, 0x18, 0x39, 0x89, 0x9E, 0xD1, 0xCD, 0x22, 0xB5, 0x9D, 0xC8, 0xE0, 0xA7, 0xDA, 0x92, 0x19, 0xED, 0x61, 0x78, 0x44, 0x4C, 0x5A, 0xD4, 0x74, 0xB1, 0x98, 0xB3, 0xB4, 0xE9, 0x6E, 0xF1, 0xA8, 0x91, 0xE1, 0x24, 0xF1, 0xA6, 0x4B, 0x93, 0x62, 0x72, 0x48, 0x09, 0x00, 0xD4, 0x79, 0x59, 0x61, 0xCF, 0xE1, 0x80, 0xC9, 0x16, 0x52, 0x92, 0xB7, 0x93, 0x68, 0x11, 0xD2, 0x3F, 0x44, 0xEC, 0xEB, 0xD8, 0x5F, 0x59, 0xF4, 0x47, 0x1F, 0x4F, 0x71, 0x85, 0xB5, 0x97, 0xB5, 0xB8, 0x1D, 0x7D, 0x1E, 0x88, 0xC5, 0x31, 0x7D, 0x0C, 0x49, 0x1D, 0xB7, 0xCF, 0xAE, 0x9D, 0xDD, 0x6A, 0x47, 0x03, 0xA4, 0xA5, 0xD5, 0x0B, 0x2B, 0xD1, 0x34, 0xF8, 0x8E, 0x9D, 0xD8, 0xAE, 0x57, 0x89, 0x86, 0xD8, 0xE3, 0x52, 0xA1, 0x48, 0xD7, 0xE0, 0xC3, 0xD3, 0xC4, 0x7E, 0x4B, 0xC9, 0x61, 0x51, 0x00, 0x50, 0x67, 0xA0, 0x42, 0x17, 0x2D, 0xA0, 0xCD, 0x20, 0x52, 0xD2, 0x88, 0xBE, 0x62, 0xE7, 0x75, 0x03, 0x3E, 0x89, 0xBD, 0x5D, 0x87, 0x3C, 0x12, 0xC7, 0x4F, 0x1A, 0x68, 0x49, 0xEA, 0x5E, 0x5E, 0x39, 0xA3, 0xCF, 0x64, 0xC9, 0xDB, 0xB5, 0x86, 0x4C, 0x11, 0x2F, 0xEC, 0x1A, 0xEA, 0x47, 0x36, 0x79, 0xFF, 0xFD, 0x51, 0x0F, 0xBF, 0xBF, 0xD1, 0x00, 0x69, 0x61, 0x52, 0x56, 0x26, 0x1A, 0x35, 0xBB, 0xFA, 0x53, 0xB4, 0x36, 0x3B, 0x1B, 0x29, 0xBA, 0x86, 0x1F, 0x13, 0xD9, 0x6F, 0x4C, 0xDE, 0x3A, 0xD1, 0x67, 0x1A, 0x39, 0xF2, 0xB4, 0xA2, 0x7F, 0x44, 0xB8, 0x42, 0xD7, 0x51, 0x40, 0x5B, 0x2D, 0xB2, 0xF5, 0x1B, 0xC0, 0xF3, 0x08, 0x09, 0xB4, 0xF3, 0x1A, 0xA1, 0x2B, 0x3A, 0xD9, 0xFB, 0x56, 0x89, 0x01, 0x3D, 0x7D, 0x6A, 0xC9, 0xA6, 0xE1, 0x2B, 0x2A, 0xBD, 0x8B, 0x25, 0xE7, 0x0C, 0x1F, 0x15, 0x22, 0x96, 0xDC, 0x19, 0x1D, 0x4B, 0x1A, 0xF7, 0xF9, 0x39, 0xDF, 0x61, 0xE2, 0x37, 0xE9, 0x61, 0x57, 0xA3, 0x7B, 0x23, 0xC4, 0xCE, 0x56, 0x25, 0x0D, 0x44, 0x97, 0x21, 0xA7, 0x96, 0x8B, 0x7D, 0xE7, 0x1C, 0x9C, 0x25, 0xFA, 0x3C, 0xC9, 0x8D, 0x16, 0xC7, 0x4C, 0x24, 0x47, 0x17, 0x2A, 0xFA, 0xFD, 0xCC, 0x15, 0xF6, 0xEF, 0x0A, 0xB4, 0x71, 0x27, 0xE5, 0x9C, 0xB6, 0x5F, 0x36, 0x09, 0x68, 0xC4, 0x06, 0x2A, 0x8B, 0x8E, 0x89, 0x63, 0x17, 0x88, 0xFE, 0xE1, 0x63, 0x46, 0x8A, 0xF3, 0xAA, 0x26, 0xAD, 0x14, 0x73, 0xB6, 0x4E, 0x54, 0x12, 0xAF, 0xB8, 0x06, 0x16, 0x88, 0x3F, 0xC2, 0x46, 0xBF, 0x7C, 0x1D, 0x03, 0x90, 0xBD, 0x6B, 0xAE, 0xC4, 0x8B, 0x2E, 0x2B, 0x8B, 0x22, 0xC4, 0xFE, 0xDD, 0x0F, 0x7B, 0x89, 0x23, 0x96, 0xED, 0x59, 0x25, 0x8E, 0xFF, 0x96, 0xAD, 0x2D, 0x4E, 0xDE, 0x4F, 0x4E, 0xEF, 0xA9, 0xE8, 0x9F, 0xB4, 0x45, 0xE1, 0xCC, 0x9D, 0x0A, 0xDB, 0x07, 0x01, 0x03, 0x74, 0x49, 0x40, 0xC9, 0x61, 0x5A, 0xBA, 0x68, 0x3B, 0x2F, 0xB0, 0x9D, 0xE8, 0xB7, 0x2E, 0x30, 0x53, 0x9C, 0x9B, 0x3B, 0xAB, 0xBD, 0x98, 0xB5, 0x30, 0xB8, 0x52, 0xBC, 0xFB, 0x62, 0xDE, 0xF4, 0x2F, 0xDB, 0x80, 0xEF, 0x4B, 0x67, 0xB8, 0xDD, 0xAB, 0x02, 0x48, 0xDF, 0x96, 0x45, 0xCD, 0xC4, 0x21, 0x29, 0x07, 0x6B, 0xC5, 0x71, 0x11, 0x7B, 0x42, 0xC4, 0xC9, 0xDD, 0x32, 0xA7, 0x8B, 0x33, 0xDB, 0x27, 0xAB, 0x89, 0x73, 0xF3, 0xC9, 0x79, 0x61, 0x8A, 0xDE, 0x59, 0x27, 0x15, 0x2E, 0xB0, 0x53, 0xE8, 0xF1, 0x0E, 0xF0, 0xA8, 0x47, 0x1A, 0x3F, 0xC3, 0xA7, 0x80, 0x3E, 0x24, 0xD0, 0x76, 0xEC, 0x9C, 0x14, 0xB1, 0x4F, 0x8B, 0x10, 0x7B, 0x71, 0xDE, 0x95, 0x45, 0x07, 0xC5, 0xEC, 0x0D, 0x11, 0x3B, 0xFE, 0x2E, 0x06, 0x1E, 0xAD, 0x8B, 0x9A, 0x7A, 0x6F, 0x09, 0x50, 0x39, 0x7F, 0x89, 0xD2, 0x19, 0x55, 0x80, 0x0C, 0x5A, 0x94, 0x17, 0x2C, 0x4E, 0x9F, 0x96, 0xDD, 0x42, 0x9C, 0xFB, 0x29, 0x4D, 0x55, 0x5C, 0x74, 0x28, 0xBE, 0xBF, 0x18, 0xA6, 0xB7, 0x3C, 0x5E, 0x8C, 0x08, 0x23, 0xA3, 0xD2, 0x14, 0xBD, 0xA1, 0xA7, 0x14, 0xC6, 0x74, 0x56, 0x38, 0xA8, 0x0F, 0xD0, 0x3F, 0x8E, 0xB4, 0x7B, 0x02, 0x8C, 0xBF, 0x41, 0x02, 0xC0, 0xB2, 0x57, 0x62, 0x8F, 0x86, 0xCB, 0x42, 0x6A, 0x5F, 0x02, 0x13, 0x96, 0xAD, 0x72, 0x7F, 0xDB, 0x03, 0x48, 0x0A, 0x5C, 0xEB, 0x7B, 0xAF, 0x0F, 0x70, 0xBF, 0x4D, 0xEC, 0xB9, 0x82, 0x49, 0xC0, 0x17, 0xA3, 0xB5, 0xF7, 0x73, 0xB2, 0x00, 0x72, 0xE5, 0xE5, 0x0D, 0xF9, 0x62, 0x8C, 0xFB, 0x6A, 0x03, 0x71, 0xC5, 0xEF, 0x88, 0x18, 0x71, 0x55, 0xF9, 0xA2, 0xA7, 0x62, 0xAC, 0x73, 0xB0, 0x81, 0x18, 0xE7, 0x40, 0xC6, 0xB5, 0x57, 0xF4, 0xAE, 0xBD, 0xA8, 0x30, 0xA1, 0x9F, 0xC2, 0xF0, 0x43, 0x80, 0x75, 0x38, 0x39, 0xE1, 0x0A, 0x30, 0xD2, 0x83, 0x1C, 0x37, 0x5D, 0xA7, 0x7C, 0x5A, 0xBB, 0x4F, 0x61, 0x06, 0xC9, 0xC0, 0x86, 0x19, 0xA5, 0x6D, 0x80, 0xF6, 0x86, 0x5B, 0xA7, 0xEF, 0xDF, 0x06, 0x44, 0x36, 0x4C, 0xDD, 0x98, 0xF8, 0x0D, 0x28, 0xB1, 0x4E, 0x3E, 0xBE, 0x70, 0x13, 0xF0, 0x26, 0x7E, 0xDB, 0xB2, 0xA0, 0xE7, 0x40, 0xED, 0x99, 0x6D, 0x6A, 0x01, 0x71, 0x00, 0x99, 0xB6, 0x65, 0xF4, 0x07, 0x88, 0x9F, 0x87, 0x4D, 0x85, 0x78, 0x61, 0x50, 0x33, 0x88, 0xAE, 0x5E, 0x5F, 0xC4, 0xD4, 0xAB, 0xB5, 0x6B, 0x14, 0xFB, 0x62, 0xE4, 0xD6, 0x72, 0x85, 0x99, 0x2D, 0x81, 0x7A, 0x15, 0x64, 0x4A, 0x2A, 0x60, 0xE1, 0x43, 0xA6, 0xED, 0x03, 0xEC, 0x6A, 0x7F, 0xEF, 0x4A, 0x7F, 0x07, 0xF8, 0x9C, 0xBA, 0x33, 0x21, 0xE5, 0x11, 0x10, 0x70, 0x77, 0x47, 0x78, 0xE4, 0x42, 0x60, 0xC5, 0x3D, 0xCB, 0xCE, 0x9A, 0xF7, 0xDA, 0x5E, 0x39, 0xD0, 0x4A, 0x75, 0x7F, 0x33, 0xD5, 0x43, 0x9D, 0xF7, 0x67, 0x6A, 0x96, 0x1A, 0x6E, 0x7F, 0xE3, 0x7C, 0x20, 0x49, 0xF3, 0x8D, 0xFA, 0x60, 0xB2, 0x60, 0x2F, 0x00, 0x90, 0x07, 0x52, 0x14, 0xEE, 0xDB, 0xA3, 0x70, 0x4F, 0x8D, 0xC2, 0x5C, 0x9F, 0x7A, 0x9E, 0x28, 0x23, 0x77, 0x3C, 0xAA, 0x4D, 0xDA, 0xFE, 0x0E, 0x8A, 0xDB, 0x96, 0x28, 0xCC, 0x2B, 0x56, 0x78, 0xB8, 0x05, 0xD0, 0xFA, 0xF8, 0xAF, 0x59, 0xA7, 0x6E, 0x03, 0xE6, 0x71, 0x0F, 0x26, 0x9D, 0xDD, 0x0D, 0x74, 0xEC, 0x58, 0xD4, 0xA2, 0xC4, 0x0A, 0x70, 0x1A, 0x19, 0x6B, 0x7E, 0xCE, 0x05, 0x98, 0x3D, 0x12, 0xD8, 0x1A, 0xDF, 0x73, 0x53, 0x66, 0x20, 0x90, 0xA4, 0x71, 0xB8, 0x7C, 0x8B, 0x37, 0x30, 0xBF, 0xC5, 0x1B, 0xBF, 0xB4, 0x58, 0x0C, 0x1A, 0x93, 0x48, 0x66, 0xF6, 0x03, 0xFA, 0x97, 0x93, 0x19, 0x27, 0x00, 0x4F, 0xCB, 0x3A, 0x97, 0x02, 0xAE, 0x59, 0x75, 0x86, 0x02, 0x8E, 0xEE, 0x8A, 0x6C, 0xBB, 0x8A, 0x4C, 0x8F, 0xFC, 0xD7, 0x2D, 0xDF, 0x13, 0x00, 0xAA, 0x03, 0x8F, 0x75, 0x16, 0x7F, 0x16, 0x9D, 0x9E, 0x03, 0x28, 0xC7, 0x7D, 0x2B, 0xB8, 0x70, 0x19, 0xD0, 0xF5, 0x2E, 0x6B, 0x77, 0xB5, 0xB6, 0xCE, 0x87, 0xE7, 0x7F, 0x3C, 0x0C, 0x01, 0x1A, 0xF6, 0xD8, 0xB9, 0xE4, 0x69, 0x6F, 0xA0, 0xAB, 0xD1, 0xAC, 0xB6, 0x2F, 0x65, 0xDF, 0x6C, 0x29, 0x50, 0xBE, 0xAC, 0x7F, 0xF9, 0x1A, 0x37, 0xE0, 0x7E, 0x52, 0x61, 0x8B, 0x65, 0x7B, 0x80, 0x23, 0x97, 0xDF, 0x14, 0xC7, 0x14, 0x00, 0x5B, 0xAE, 0x93, 0x2B, 0x42, 0x80, 0xA8, 0xB6, 0x75, 0xEE, 0x07, 0x42, 0x63, 0xC8, 0xD5, 0x13, 0x80, 0xF9, 0xD6, 0x64, 0xEC, 0x58, 0x60, 0x7A, 0x17, 0x32, 0xEE, 0x18, 0x30, 0xB1, 0x27, 0x19, 0xAF, 0xFE, 0x5B, 0xEB, 0xF4, 0x47, 0x00, 0xF8, 0x1D, 0x53, 0x92, 0x2C, 0x7E, 0xC8, 0xBA, 0xBC, 0x10, 0x50, 0xDB, 0xF6, 0xD0, 0xEC, 0xD6, 0x60, 0x40, 0x69, 0xCE, 0xC5, 0x19, 0x8F, 0x2B, 0x01, 0xA0, 0xE0, 0x65, 0xC5, 0x76, 0xA0, 0x89, 0xC5, 0xAA, 0xA9, 0x55, 0xEB, 0x00, 0xDB, 0x31, 0x7D, 0x75, 0xFF, 0x5D, 0x01, 0x26, 0x2B, 0x03, 0xFF, 0xD4, 0x7A, 0xED, 0x5A, 0x58, 0x03, 0xFC, 0x89, 0xDB, 0xD5, 0x6D, 0xAE, 0x05, 0xF0, 0x2C, 0xF5, 0xC9, 0xB6, 0xE9, 0x5D, 0x80, 0xCB, 0x05, 0x3F, 0x73, 0x26, 0x18, 0x00, 0xF9, 0xF3, 0xC9, 0x09, 0x5B, 0x80, 0x1D, 0x86, 0xE4, 0x8C, 0xCE, 0x40, 0x6A, 0x2B, 0x72, 0x4E, 0x1E, 0xB0, 0xAE, 0x90, 0x5C, 0x68, 0x03, 0xAC, 0x78, 0x4B, 0x2E, 0xBA, 0xF0, 0x6B, 0xFC, 0x95, 0x57, 0x00, 0xF0, 0x75, 0xCB, 0xED, 0x4B, 0x80, 0xEA, 0xF3, 0x07, 0x9F, 0xEE, 0xB4, 0x03, 0xEA, 0xBD, 0x3B, 0xBF, 0xAB, 0xEC, 0x13, 0x00, 0x1C, 0x1C, 0xF2, 0xCE, 0x56, 0x4C, 0xB9, 0xF0, 0x67, 0x13, 0x60, 0x10, 0xBF, 0xC0, 0x9A, 0x6C, 0x76, 0xAF, 0xCB, 0x28, 0xBD, 0x22, 0x12, 0x98, 0xF2, 0x5A, 0x3F, 0x87, 0xEC, 0xBB, 0xD7, 0xC7, 0xB4, 0xDD, 0x0D, 0x32, 0xEE, 0xAD, 0x43, 0x1A, 0x40, 0x9E, 0x38, 0x28, 0x5F, 0x7D, 0xBF, 0xEE, 0x56, 0xDE, 0x77, 0x3C, 0x04, 0xDC, 0xFB, 0x45, 0xF6, 0x3C, 0x89, 0x1F, 0x97, 0x2A, 0x49, 0x97, 0x11, 0x40, 0x61, 0x11, 0xD9, 0xB7, 0x2F, 0x70, 0xF8, 0x02, 0xE9, 0xD3, 0x11, 0xD8, 0xD3, 0x9A, 0xF4, 0xFB, 0xEF, 0xBB, 0xD3, 0xFD, 0xB6, 0x80, 0x4A, 0xE3, 0xA7, 0x61, 0x0F, 0xDB, 0x00, 0x1A, 0x5A, 0xA5, 0x0E, 0x72, 0x25, 0x02, 0x1C, 0xB2, 0x7A, 0x76, 0x43, 0xDC, 0x6A, 0xF4, 0xB9, 0x00, 0x50, 0x6D, 0xB6, 0xA8, 0x07, 0x09, 0x4F, 0x93, 0x8D, 0xEE, 0x53, 0x48, 0xC0, 0xC1, 0x0C, 0x20, 0xD5, 0x54, 0x7A, 0x6F, 0x11, 0xDD, 0x16, 0x77, 0xBB, 0x69, 0x94, 0x4A, 0x46, 0xCF, 0x6F, 0xB4, 0x59, 0xF2, 0x26, 0xF7, 0x36, 0x3E, 0x62, 0xDE, 0xA5, 0x16, 0x9F, 0x2D, 0x57, 0x90, 0x24, 0x00, 0xFC, 0x4C, 0x26, 0xCD, 0xA2, 0x81, 0xC7, 0xD3, 0xC8, 0xF6, 0xC9, 0xC0, 0xED, 0x50, 0xB2, 0x8B, 0x1A, 0x50, 0xBA, 0x92, 0xEC, 0x79, 0xFC, 0x43, 0x44, 0xF9, 0x6C, 0x40, 0xF3, 0xC2, 0xCD, 0x7E, 0xE5, 0x6B, 0x01, 0x95, 0x59, 0xC7, 0xFE, 0x3E, 0xA9, 0x13, 0xC8, 0xD6, 0x7A, 0x1B, 0x02, 0x28, 0x0D, 0x8C, 0xAE, 0xAE, 0x8E, 0x00, 0xF4, 0x6D, 0x47, 0xFE, 0x21, 0xD5, 0x6F, 0x9A, 0xCE, 0x41, 0x0C, 0x09, 0xF4, 0xF2, 0x05, 0x48, 0x83, 0xD8, 0x9E, 0xDD, 0x45, 0xE7, 0xBD, 0x16, 0x95, 0x2D, 0x37, 0x91, 0x41, 0x93, 0x1A, 0xC6, 0x6B, 0x79, 0x93, 0xE1, 0xAA, 0x86, 0xE3, 0x00, 0x32, 0xA9, 0xBC, 0x65, 0x6B, 0xF1, 0x98, 0x6F, 0xF3, 0xAE, 0x62, 0xD9, 0xE8, 0xE6, 0x5E, 0x66, 0x41, 0xE4, 0xBF, 0xE6, 0x80, 0x64, 0xB2, 0xE9, 0x50, 0xE0, 0x43, 0x1A, 0xD9, 0xE2, 0xCD, 0xE3, 0xE1, 0xCF, 0xCE, 0x01, 0x1A, 0xB3, 0xCE, 0xB4, 0x78, 0xFC, 0x16, 0x50, 0x0A, 0xCE, 0x5D, 0xF2, 0xD2, 0x1B, 0xC0, 0xC9, 0x84, 0xC5, 0x55, 0x2D, 0x01, 0xB5, 0x2E, 0xE3, 0xB6, 0x92, 0x80, 0xC9, 0xA3, 0xD6, 0x13, 0x45, 0xE7, 0xCE, 0x80, 0x68, 0x57, 0x2B, 0x36, 0x9B, 0xD1, 0x69, 0xA0, 0xD8, 0xD3, 0xAC, 0x6D, 0x7D, 0xB1, 0xF7, 0x0A, 0x93, 0xED, 0xFA, 0x2E, 0x64, 0x48, 0xAE, 0xAE, 0xB2, 0xE4, 0xC8, 0x46, 0x86, 0x7F, 0xC5, 0xB4, 0xB5, 0x06, 0x93, 0xC5, 0x3D, 0x63, 0x1A, 0x67, 0x88, 0x17, 0xD4, 0x9A, 0x2C, 0x11, 0x1F, 0xFA, 0x37, 0xF5, 0x35, 0xCC, 0x22, 0xBF, 0xEF, 0x04, 0xAE, 0x2E, 0x7D, 0x76, 0x1E, 0x50, 0x35, 0xC9, 0xBF, 0xF4, 0xDC, 0x15, 0x50, 0x9A, 0xB2, 0xE5, 0xEB, 0xA7, 0x66, 0x80, 0x72, 0xF4, 0xDC, 0x40, 0x12, 0x68, 0x72, 0xDA, 0x2D, 0x4E, 0xB4, 0x98, 0xD1, 0x78, 0xB7, 0x68, 0xBD, 0x1B, 0x10, 0xBB, 0x4C, 0x16, 0x0D, 0xF3, 0xDA, 0x8E, 0x15, 0x3B, 0x7B, 0xB7, 0x4A, 0x12, 0x5D, 0x61, 0xB8, 0x46, 0x4B, 0x95, 0x1C, 0xD5, 0x52, 0x4B, 0x55, 0x23, 0x9A, 0x9C, 0x43, 0x8D, 0x68, 0x80, 0x5C, 0x7E, 0x4D, 0xAF, 0x83, 0xB8, 0xA1, 0x91, 0xFE, 0x6C, 0x31, 0x2B, 0x4B, 0x7F, 0xB7, 0x98, 0xDF, 0x5F, 0x5F, 0x5D, 0xBC, 0x10, 0xA2, 0x37, 0x92, 0x74, 0x2B, 0x04, 0x24, 0xD9, 0xBE, 0x56, 0x68, 0x0C, 0xA0, 0x4D, 0x43, 0x12, 0x68, 0x38, 0xDA, 0x2E, 0x46, 0xEC, 0x74, 0xC4, 0xD6, 0x4B, 0x1C, 0x30, 0xBB, 0x7B, 0xBE, 0x18, 0xF0, 0xD3, 0xF6, 0x80, 0x18, 0xB3, 0xDB, 0x76, 0xBF, 0x98, 0xF1, 0xC8, 0x76, 0x9B, 0x78, 0xD6, 0xCE, 0xBA, 0x2B, 0xA9, 0x36, 0xF9, 0xCD, 0xA4, 0xF6, 0x33, 0x49, 0xE5, 0x3E, 0x35, 0xA3, 0xDB, 0xF4, 0x79, 0x31, 0x10, 0x20, 0x9B, 0x3D, 0xBF, 0x7F, 0x56, 0x6C, 0x62, 0x76, 0xB5, 0xB9, 0xD8, 0xF0, 0xC3, 0xB9, 0x74, 0xB1, 0x59, 0xC8, 0xC9, 0x8B, 0x62, 0xDB, 0xAD, 0x64, 0xEF, 0x67, 0x8A, 0x7E, 0x87, 0x69, 0x0A, 0x8D, 0xDE, 0x03, 0x1D, 0x14, 0xEF, 0xEF, 0xEC, 0xD7, 0xCB, 0x4C, 0x6C, 0x7F, 0xCF, 0x49, 0x4F, 0xEC, 0xDF, 0xCA, 0xF6, 0x88, 0x38, 0x4E, 0xC7, 0xE9, 0x98, 0x18, 0xD9, 0xD2, 0x79, 0x81, 0x98, 0xDE, 0xD7, 0x39, 0x54, 0x2C, 0xBE, 0xEF, 0x78, 0x95, 0xD4, 0x5A, 0xF3, 0xB1, 0x61, 0xBB, 0xC3, 0xB5, 0x57, 0x00, 0xD2, 0xF4, 0xD1, 0xA3, 0xB7, 0xA2, 0x61, 0xF5, 0x2D, 0x57, 0xB1, 0xD1, 0xC9, 0x8B, 0x3D, 0xC4, 0xC6, 0xCA, 0x85, 0xAB, 0x44, 0xD3, 0xD4, 0xA3, 0x3F, 0xC5, 0x2E, 0x67, 0xC8, 0x3E, 0xBF, 0x14, 0xFD, 0x2E, 0x37, 0x14, 0x5A, 0x4E, 0x06, 0xCC, 0xB6, 0x92, 0x92, 0x06, 0xAE, 0x11, 0x4D, 0xD6, 0xF5, 0x9E, 0x2C, 0x7A, 0x5C, 0xED, 0x95, 0x26, 0xFA, 0x7B, 0xBA, 0x4E, 0x17, 0x63, 0x06, 0xBA, 0xF5, 0x16, 0xB3, 0x0D, 0x7A, 0x6F, 0x17, 0xCF, 0xEB, 0xF7, 0xD9, 0x46, 0x36, 0x3E, 0xF8, 0xF5, 0x71, 0x67, 0x9F, 0xAA, 0x64, 0x80, 0xEC, 0xA0, 0x7E, 0xA7, 0x95, 0x68, 0x90, 0x5C, 0xBA, 0x16, 0xE2, 0xEE, 0x22, 0x5D, 0xB1, 0xED, 0xDA, 0xE3, 0xFB, 0xC5, 0x6E, 0x73, 0xF3, 0xEB, 0x8B, 0x8E, 0x83, 0xC9, 0x81, 0x8A, 0xF9, 0x4A, 0x8F, 0xED, 0x0A, 0xED, 0x2C, 0x80, 0x36, 0x77, 0x49, 0x49, 0x43, 0x9B, 0x89, 0x66, 0x53, 0x3C, 0x4B, 0x44, 0xFB, 0x83, 0x03, 0x32, 0xC4, 0xF1, 0x11, 0x7D, 0x27, 0x90, 0xBA, 0x46, 0x61, 0xE9, 0x5E, 0xA6, 0x92, 0xB7, 0x4D, 0x19, 0x9C, 0x22, 0x96, 0xE6, 0x0E, 0x9B, 0x2E, 0x56, 0xAA, 0xF6, 0xB5, 0x7B, 0xA3, 0x05, 0x90, 0x0E, 0x65, 0x25, 0xC3, 0xC4, 0xE6, 0x2C, 0xF2, 0x16, 0x2D, 0x5B, 0x1F, 0x2D, 0x16, 0xED, 0x4E, 0xE6, 0xF5, 0x12, 0xDD, 0x3E, 0xEF, 0xEE, 0x27, 0xF6, 0x0B, 0x22, 0x87, 0xE5, 0x28, 0xFA, 0x07, 0xDC, 0x50, 0xD8, 0x5B, 0x0B, 0x30, 0x89, 0x22, 0x8D, 0x2B, 0x00, 0x77, 0x15, 0xD2, 0x72, 0x7F, 0xBB, 0x5E, 0x76, 0x93, 0x49, 0xA0, 0x47, 0xF5, 0xF0, 0x3E, 0xA2, 0x6F, 0x47, 0x5F, 0x15, 0x71, 0xCE, 0x18, 0x7F, 0x5F, 0x31, 0x6B, 0x90, 0xBF, 0xA6, 0x78, 0x63, 0x6F, 0xC0, 0x9F, 0x0F, 0x91, 0xC0, 0xE7, 0x3D, 0xA3, 0x06, 0xDC, 0xFD, 0x09, 0x90, 0x83, 0xA6, 0x9F, 0x6A, 0x2E, 0xF6, 0x88, 0x38, 0x78, 0x4D, 0xEC, 0xDD, 0x6B, 0xEF, 0x70, 0x71, 0x40, 0x5C, 0xCE, 0x5B, 0x71, 0x44, 0x8B, 0x74, 0x8A, 0x63, 0x0E, 0xD6, 0x1C, 0x0E, 0x3C, 0x0F, 0x40, 0x6E, 0x1B, 0xA1, 0x70, 0x9A, 0x81, 0xC2, 0xEE, 0x87, 0x00, 0xE7, 0x6A, 0x52, 0xD2, 0xC4, 0x4A, 0xB1, 0xE3, 0xE3, 0x09, 0x16, 0xE2, 0x80, 0x4B, 0x81, 0xF9, 0x62, 0xF0, 0xC2, 0xE9, 0x17, 0xC4, 0xAC, 0x67, 0xB3, 0xD7, 0x54, 0xFE, 0x02, 0x6E, 0xDF, 0x09, 0x8E, 0xBA, 0xA3, 0x0D, 0x7C, 0xFB, 0x1E, 0x94, 0x7A, 0xCA, 0x04, 0xA8, 0xB9, 0x39, 0x69, 0x6F, 0x6E, 0x1C, 0x40, 0x0E, 0x0F, 0xC8, 0x5E, 0x27, 0xFA, 0x37, 0xD8, 0x1A, 0x20, 0x4E, 0x8E, 0xDA, 0x94, 0x23, 0x06, 0xAD, 0x58, 0x33, 0x46, 0x9C, 0x53, 0xF5, 0xEF, 0xCD, 0x9C, 0x9D, 0x00, 0xE4, 0xB6, 0xB9, 0x0A, 0x17, 0x9A, 0x29, 0x1C, 0x68, 0x00, 0xD8, 0xFB, 0x91, 0x56, 0x13, 0x80, 0x61, 0x23, 0x49, 0x40, 0x55, 0x37, 0xE4, 0xA5, 0x68, 0xB3, 0x6F, 0x61, 0xD0, 0x07, 0x27, 0x60, 0xCC, 0xFD, 0xC5, 0xA3, 0xEF, 0xFB, 0x02, 0xAB, 0x73, 0x97, 0x4E, 0xBF, 0x74, 0x1F, 0x28, 0x69, 0xBB, 0xF8, 0xE7, 0x81, 0x3C, 0xA0, 0x22, 0x2C, 0xD2, 0x31, 0x6D, 0x23, 0xF0, 0xF3, 0x64, 0xB4, 0x47, 0xFC, 0x59, 0xC8, 0x6B, 0x4E, 0x58, 0x66, 0x20, 0x2E, 0x55, 0x89, 0x98, 0x2D, 0x86, 0x7B, 0x84, 0xAE, 0x16, 0x23, 0xA3, 0xE6, 0x5C, 0x15, 0x63, 0x1A, 0xFE, 0x1D, 0x1A, 0x6D, 0x0F, 0x00, 0x7C, 0x14, 0x15, 0x0F, 0x91, 0xCB, 0xEF, 0x28, 0x0C, 0xBD, 0x02, 0x98, 0x2D, 0x24, 0x27, 0x3F, 0x01, 0xDC, 0xFA, 0xFD, 0xCE, 0xF3, 0xFE, 0x0E, 0x04, 0x7E, 0xBA, 0x5D, 0xD6, 0xC8, 0x16, 0x58, 0xF1, 0xF4, 0xC8, 0x7F, 0x80, 0xE9, 0xA5, 0xF8, 0x98, 0xEC, 0xEE, 0x40, 0x88, 0x43, 0xEC, 0x89, 0xF8, 0xCF, 0x40, 0xA1, 0xC7, 0x9A, 0x01, 0x0B, 0x7B, 0x02, 0xEF, 0xCE, 0x6C, 0x78, 0x37, 0xB1, 0x00, 0xF8, 0x1D, 0x99, 0x76, 0x38, 0x60, 0x08, 0x40, 0x26, 0xB6, 0x1E, 0xDD, 0x56, 0xDC, 0xA8, 0x3B, 0x32, 0x1F, 0xA2, 0xE9, 0x90, 0x09, 0x10, 0xFD, 0xBC, 0xD6, 0x41, 0xBC, 0xFB, 0xEB, 0xE9, 0xBA, 0xB5, 0x00, 0x50, 0xAD, 0xBE, 0xBE, 0x5C, 0x24, 0x93, 0xFB, 0x43, 0x7C, 0xB5, 0x79, 0x01, 0x60, 0x30, 0xFF, 0x8F, 0xFF, 0xC6, 0xEF, 0x40, 0x87, 0x5B, 0x6F, 0xA7, 0x6E, 0xFC, 0x05, 0x38, 0xF8, 0x17, 0xEB, 0xAF, 0x07, 0xD0, 0x77, 0xEE, 0xA6, 0x9B, 0xC1, 0x47, 0x80, 0x45, 0x17, 0x2D, 0xEF, 0xE9, 0xA7, 0xB4, 0x3C, 0x96, 0x9D, 0xA9, 0x9A, 0xD4, 0xF2, 0x46, 0x46, 0xEE, 0xB6, 0x74, 0xA0, 0xF9, 0xC6, 0x87, 0x79, 0xD9, 0x3F, 0x54, 0x9B, 0x18, 0xE8, 0xFD, 0x1C, 0xB7, 0xEB, 0x21, 0x00, 0x90, 0xBB, 0x37, 0x02, 0x4A, 0x95, 0xE4, 0x8E, 0x7A, 0x40, 0xBD, 0x71, 0x64, 0xCE, 0x1C, 0xB9, 0x76, 0x24, 0xB7, 0xFD, 0x51, 0xD2, 0xD0, 0x78, 0x40, 0x66, 0x36, 0xFB, 0xB9, 0x3C, 0xB5, 0x0A, 0x00, 0x7E, 0x3D, 0xCB, 0x2C, 0x15, 0xAB, 0x1A, 0x6F, 0xCF, 0x11, 0x2B, 0x3E, 0xEC, 0x3C, 0x0A, 0x68, 0x9C, 0x7D, 0x1A, 0xB0, 0xFF, 0x0D, 0xA0, 0xAD, 0x51, 0x3A, 0xE6, 0x50, 0x67, 0xA0, 0xB1, 0xC6, 0xBE, 0x2F, 0x47, 0x36, 0x00, 0x5D, 0x0E, 0x85, 0xF7, 0xCF, 0x3F, 0x0D, 0x8C, 0x59, 0x00, 0xAC, 0x3B, 0xD8, 0xE9, 0x47, 0x62, 0x13, 0x20, 0xD1, 0x2A, 0xD7, 0x74, 0x95, 0x11, 0xB0, 0xF8, 0xD5, 0xF3, 0xC0, 0xD8, 0x3F, 0xC0, 0xC4, 0xA1, 0x64, 0xE2, 0x4B, 0xA0, 0xDF, 0x0F, 0x72, 0x8B, 0x29, 0xE0, 0x75, 0x9E, 0x4C, 0x7A, 0x0E, 0xF4, 0xFA, 0xAF, 0xCE, 0x32, 0xC0, 0xE5, 0x44, 0x9D, 0x47, 0xEB, 0x0C, 0x25, 0x37, 0x0F, 0xAD, 0x9C, 0xB5, 0x2B, 0x11, 0x00, 0xBE, 0x8C, 0xDC, 0x77, 0x4C, 0x7C, 0x6D, 0x97, 0x6F, 0x21, 0x96, 0xFD, 0x39, 0x7A, 0x06, 0x50, 0xFA, 0x59, 0x3A, 0xAC, 0x28, 0x5E, 0xF2, 0xA1, 0x9E, 0xA5, 0x87, 0x01, 0xE5, 0xAB, 0xC9, 0xDA, 0xD7, 0x7E, 0x03, 0x46, 0xB5, 0x53, 0x1E, 0xDE, 0x5D, 0x08, 0xF4, 0x5F, 0x02, 0x5C, 0xFD, 0xEA, 0xB2, 0x62, 0x89, 0x0A, 0x70, 0x99, 0xFB, 0x2D, 0xE6, 0x56, 0x00, 0xC7, 0x8C, 0x5E, 0x44, 0xCF, 0x77, 0x07, 0x52, 0x1D, 0x6A, 0xF5, 0x42, 0x97, 0x03, 0xE1, 0x3B, 0xC9, 0x25, 0x36, 0xC0, 0x92, 0xB5, 0x64, 0x98, 0x26, 0x30, 0xFF, 0x8D, 0xE2, 0xBD, 0x69, 0xC1, 0x5B, 0xC9, 0xC8, 0x05, 0xC0, 0x8C, 0x20, 0x32, 0xEA, 0xFE, 0x97, 0x8E, 0x47, 0xAC, 0x01, 0xE0, 0x43, 0xD1, 0xE9, 0x6F, 0xE2, 0x43, 0xE7, 0xC2, 0x6A, 0x40, 0x29, 0xEB, 0xE2, 0xF7, 0xE2, 0x38, 0xC9, 0x05, 0x6A, 0x97, 0x97, 0x8B, 0xDB, 0x9E, 0x96, 0x75, 0x13, 0x97, 0xFD, 0x7C, 0xD3, 0x17, 0x68, 0x7C, 0xDE, 0x37, 0xEB, 0xEB, 0x6B, 0xC0, 0xD1, 0x12, 0xF8, 0x3A, 0xDC, 0xC1, 0x2B, 0xD0, 0xBA, 0x4E, 0xE5, 0x2C, 0xDD, 0x31, 0x35, 0x40, 0x79, 0xFF, 0xC7, 0xB7, 0x7D, 0xEB, 0xBC, 0x64, 0xF3, 0x63, 0xDF, 0xC8, 0x7A, 0xC0, 0xFE, 0xF1, 0xE4, 0xD0, 0x00, 0x60, 0x7B, 0x6F, 0xD2, 0xEF, 0x1A, 0xB0, 0xB5, 0x33, 0x39, 0xEE, 0x31, 0xB0, 0xC9, 0x98, 0x0C, 0xEC, 0x09, 0xC4, 0xAB, 0x91, 0x53, 0x3B, 0x7E, 0x6E, 0x7D, 0x41, 0x19, 0x00, 0x9E, 0x04, 0x96, 0x98, 0x02, 0xAA, 0xEF, 0x2F, 0x1F, 0x2B, 0x1D, 0x2B, 0xF9, 0xE0, 0xD7, 0x2B, 0xD3, 0xC5, 0xCC, 0xE0, 0x3B, 0x46, 0x62, 0xFC, 0x94, 0xF7, 0x06, 0xE2, 0xB4, 0xCD, 0xFF, 0x4E, 0x02, 0x6D, 0x4D, 0x2D, 0x16, 0x90, 0x40, 0xBF, 0x77, 0x00, 0x69, 0xFB, 0x62, 0xC0, 0xDA, 0xD6, 0xDD, 0xC8, 0x55, 0xA5, 0xD6, 0x9E, 0x92, 0xCF, 0xDF, 0x75, 0x39, 0x00, 0x54, 0xAE, 0xFE, 0xA9, 0x67, 0xB3, 0x15, 0xB8, 0x19, 0x4D, 0xB6, 0x7B, 0x04, 0x94, 0x24, 0x92, 0x56, 0x8D, 0x81, 0xC2, 0x60, 0xB2, 0x67, 0x34, 0x70, 0x64, 0x00, 0xE9, 0xDC, 0x04, 0xD8, 0xFF, 0x9C, 0xF4, 0x88, 0x7E, 0x17, 0x78, 0xED, 0x2A, 0xA0, 0x76, 0xE8, 0x56, 0xB3, 0xAB, 0x6F, 0xEB, 0xEC, 0x7B, 0x72, 0xCD, 0x8D, 0xC9, 0x00, 0xB0, 0xC3, 0xFB, 0xF6, 0x03, 0x71, 0xDD, 0xA9, 0x27, 0xB5, 0xE2, 0xDC, 0x35, 0x3F, 0xEE, 0x03, 0x7A, 0x43, 0xBC, 0x7C, 0x49, 0xA0, 0x93, 0x01, 0x20, 0xBA, 0xED, 0x15, 0x1D, 0xCA, 0x2C, 0x6D, 0x0D, 0x5F, 0xC8, 0x6E, 0xB9, 0xF6, 0x10, 0xC9, 0x9B, 0xCB, 0x0C, 0xA7, 0x89, 0x47, 0x2E, 0xEB, 0xCF, 0x6C, 0x74, 0x9C, 0x24, 0x01, 0xA0, 0xAA, 0x2D, 0xD9, 0x78, 0x20, 0xF0, 0xF8, 0x37, 0x69, 0x38, 0x1B, 0xB8, 0x73, 0x93, 0x34, 0x32, 0x01, 0xAE, 0x9C, 0x22, 0xCD, 0x36, 0x3F, 0xD9, 0x78, 0xD7, 0x1F, 0xD0, 0x28, 0x3B, 0x77, 0xF5, 0xE6, 0x35, 0x40, 0xD9, 0x68, 0x9F, 0xD7, 0x1D, 0x7D, 0x40, 0x69, 0xD5, 0xE6, 0x6D, 0x8F, 0xB6, 0x01, 0xC0, 0x7F, 0x86, 0xDF, 0xE2, 0x01, 0xF5, 0x15, 0x43, 0x16, 0x93, 0x80, 0xF1, 0x03, 0xD5, 0x53, 0xA2, 0xFD, 0x75, 0x80, 0xD4, 0x71, 0xB0, 0xB4, 0x12, 0xED, 0x5A, 0x9B, 0xF8, 0x37, 0x9E, 0x4F, 0x4E, 0x32, 0xD4, 0xB6, 0x51, 0x39, 0x42, 0x86, 0x9D, 0x69, 0xD8, 0x0C, 0x20, 0x53, 0xA2, 0x1B, 0x15, 0x8B, 0xB7, 0xE2, 0xF4, 0x4F, 0x35, 0x3B, 0x43, 0x7E, 0xD1, 0x04, 0x9A, 0xCD, 0x21, 0xFF, 0xFD, 0x04, 0x00, 0x92, 0xD4, 0x71, 0x06, 0x2A, 0x23, 0x48, 0xED, 0x88, 0x1B, 0xBD, 0xEF, 0xCD, 0x01, 0xEA, 0xDB, 0x1F, 0x8A, 0xBB, 0xD3, 0x03, 0xA8, 0x77, 0x32, 0xC3, 0xE5, 0x61, 0x22, 0x00, 0xAC, 0x28, 0xAC, 0x98, 0x00, 0xE0, 0xC2, 0xD8, 0x4E, 0x24, 0xD0, 0xB4, 0xA9, 0xDB, 0x56, 0x8A, 0x2F, 0x01, 0xB1, 0x7B, 0x8C, 0xD8, 0xF0, 0x87, 0x59, 0x03, 0xB1, 0x6B, 0x4D, 0xF3, 0x87, 0x3A, 0xCE, 0xA4, 0xCF, 0x57, 0x0D, 0x37, 0xCD, 0x9D, 0xE4, 0xFC, 0x91, 0x0D, 0x82, 0x01, 0x72, 0xA5, 0x8E, 0xAE, 0xAE, 0xB8, 0xA3, 0x40, 0xDB, 0x4B, 0x3C, 0xB8, 0x59, 0x6B, 0xA9, 0x78, 0x79, 0xA4, 0x4E, 0xB8, 0x58, 0xA6, 0xA4, 0x67, 0xAE, 0x37, 0x88, 0xFC, 0xDA, 0x02, 0x28, 0x5A, 0x76, 0xDF, 0x1A, 0xA8, 0xF7, 0x60, 0xE7, 0x8C, 0x07, 0xDF, 0x01, 0x6C, 0x5A, 0x37, 0xFC, 0x4D, 0x09, 0x00, 0x04, 0x5D, 0x26, 0x81, 0x86, 0xBA, 0x9E, 0x2E, 0x62, 0xAB, 0x09, 0xDD, 0x87, 0x90, 0xAA, 0x3D, 0x1A, 0x0D, 0x01, 0x24, 0xB7, 0x1F, 0xAF, 0x96, 0x44, 0x1A, 0xA6, 0x18, 0xA6, 0x18, 0xDC, 0x21, 0xED, 0xEC, 0x01, 0x80, 0x74, 0x85, 0x4E, 0x0F, 0x75, 0x0F, 0x72, 0x8C, 0x91, 0xBA, 0x87, 0xDA, 0x40, 0x72, 0xC1, 0x6A, 0xB5, 0x81, 0x00, 0x19, 0xAB, 0xD5, 0x60, 0x80, 0x98, 0xE2, 0xA8, 0xA1, 0x2C, 0xEE, 0x18, 0xA5, 0xE1, 0x24, 0x1E, 0x6C, 0xD9, 0xA0, 0x54, 0x3C, 0xBF, 0xBD, 0xC1, 0x77, 0x39, 0x9B, 0x02, 0x80, 0x3A, 0xD3, 0x14, 0xAA, 0xF7, 0x02, 0xCC, 0xF6, 0x90, 0x80, 0xD1, 0xE7, 0xF6, 0x33, 0xC5, 0x1E, 0xBB, 0x3A, 0xD4, 0x88, 0x03, 0x56, 0x77, 0x1C, 0x2C, 0x4E, 0xF2, 0xE9, 0x14, 0x27, 0x2E, 0x4F, 0xB7, 0x38, 0x21, 0xA6, 0xD3, 0xBC, 0x5A, 0x3C, 0x51, 0xBF, 0xED, 0x4D, 0xF1, 0x61, 0x5A, 0xEB, 0xF2, 0x9A, 0xBE, 0x40, 0xD5, 0x0B, 0xC3, 0x07, 0x6F, 0xD5, 0x00, 0x52, 0x4F, 0xF7, 0xFE, 0x6D, 0x51, 0xE3, 0xCC, 0xF5, 0x5A, 0xB1, 0x7E, 0x72, 0x49, 0x57, 0x51, 0x2D, 0xA5, 0xC8, 0x49, 0x54, 0x49, 0x26, 0xBB, 0x7D, 0x53, 0xF4, 0x77, 0x31, 0x57, 0x68, 0x38, 0x1F, 0x30, 0xB2, 0x20, 0x81, 0xA6, 0x09, 0x1D, 0x06, 0x89, 0x56, 0x23, 0x3A, 0x1C, 0x15, 0xFB, 0xA6, 0x76, 0x88, 0x13, 0xC7, 0x47, 0x76, 0x4E, 0x15, 0xA3, 0x2B, 0x3A, 0x5D, 0x12, 0xD3, 0x0D, 0x2D, 0x37, 0x8B, 0x27, 0xAE, 0xB7, 0xFF, 0x2C, 0x3E, 0xDE, 0x6B, 0x74, 0xE8, 0xAF, 0x25, 0xF0, 0xF7, 0x61, 0xD3, 0x49, 0x4F, 0xF7, 0x03, 0xA4, 0xF6, 0xCD, 0x9B, 0xB1, 0x62, 0x83, 0xE4, 0xD2, 0xD1, 0xA2, 0x7A, 0xF7, 0xA2, 0x89, 0x62, 0xBD, 0xE6, 0xC7, 0xCB, 0xC4, 0xFA, 0xBE, 0xA4, 0xED, 0x51, 0x45, 0x7F, 0xB7, 0xBE, 0x0A, 0x5B, 0x67, 0x02, 0xC6, 0xAF, 0x49, 0x40, 0x57, 0xA9, 0xEB, 0x1A, 0xD1, 0x7C, 0x80, 0x55, 0x77, 0xD1, 0xEB, 0x53, 0xA7, 0x99, 0xE2, 0xF8, 0x87, 0xDD, 0x83, 0xC5, 0x88, 0x7A, 0x3D, 0x94, 0xC5, 0xF4, 0xE9, 0xD6, 0x13, 0xC5, 0x33, 0xDE, 0xDD, 0xA3, 0xC9, 0xFA, 0x5B, 0xDE, 0xEA, 0x99, 0xB9, 0x7D, 0xAB, 0xAF, 0x38, 0xEF, 0xBB, 0xFF, 0x45, 0xD4, 0x9C, 0x73, 0x71, 0xAD, 0xA8, 0x7E, 0xA4, 0xB0, 0x42, 0x54, 0x4A, 0x39, 0xDE, 0x5B, 0xD4, 0x59, 0x9D, 0x1F, 0x28, 0xB6, 0x2A, 0x26, 0x5D, 0xFE, 0xFF, 0xF9, 0x4F, 0x8E, 0x42, 0xB3, 0x96, 0x80, 0x59, 0x4F, 0x12, 0xC0, 0x2F, 0xA7, 0x86, 0xA2, 0x71, 0x23, 0x9B, 0x07, 0xA2, 0xB3, 0x89, 0x7D, 0x86, 0x38, 0x2A, 0xDC, 0xAE, 0x44, 0x5C, 0xD4, 0xC2, 0xE5, 0x91, 0x98, 0xFE, 0xCC, 0xE9, 0x99, 0x78, 0xA1, 0x85, 0x5B, 0x50, 0x75, 0x24, 0xF0, 0x71, 0xBF, 0xCD, 0xFB, 0x67, 0x31, 0x00, 0x69, 0x79, 0xE5, 0xB2, 0x91, 0xD8, 0xB0, 0xE4, 0x64, 0x5D, 0xFE, 0x7F, 0x5C, 0xDD, 0x77, 0x5C, 0x8F, 0xEF, 0x1B, 0xC7, 0xFD, 0x57, 0x7B, 0x2A, 0x91, 0x22, 0xAB, 0x88, 0xA8, 0x64, 0x67, 0x53, 0x29, 0x14, 0x15, 0xCA, 0xCC, 0xC8, 0xAE, 0x88, 0xCC, 0xC8, 0x56, 0xF6, 0x48, 0x44, 0xC8, 0x96, 0x15, 0xDA, 0x94, 0x99, 0xBD, 0xF7, 0x2C, 0xD9, 0x7C, 0xED, 0x4D, 0x64, 0xDF, 0xD7, 0xF1, 0x3B, 0xEF, 0xFD, 0xC7, 0xC7, 0xF3, 0xD1, 0x7C, 0x5F, 0x9F, 0x75, 0x9E, 0xC7, 0x75, 0x1C, 0xD7, 0x23, 0xDA, 0xF1, 0x9C, 0xCA, 0xE9, 0x28, 0x56, 0x69, 0x99, 0xE1, 0x2F, 0xD6, 0x36, 0xDA, 0x19, 0x2A, 0x36, 0xD0, 0xD1, 0xBA, 0x8C, 0x4F, 0x54, 0xBE, 0x57, 0xA4, 0xB2, 0xD9, 0x09, 0xA8, 0xAC, 0x3D, 0x0E, 0x36, 0xE1, 0xE0, 0x3E, 0x40, 0x3B, 0xF6, 0x33, 0xE5, 0x3F, 0xB7, 0x91, 0xC7, 0x81, 0x06, 0xFF, 0xF9, 0xEC, 0x13, 0xBB, 0xBB, 0xFB, 0x34, 0xD7, 0xEE, 0xDB, 0x90, 0x09, 0x13, 0xBD, 0xB7, 0xCA, 0xC7, 0x1B, 0x1D, 0xFD, 0xDE, 0x8B, 0x97, 0xDB, 0x04, 0x86, 0x3C, 0xFF, 0x0A, 0x6F, 0x7E, 0x75, 0x08, 0xBE, 0x6A, 0x8B, 0xBC, 0x72, 0xC7, 0x1F, 0x2E, 0x2D, 0xD6, 0xDD, 0x95, 0x96, 0x82, 0xF8, 0x6A, 0x47, 0x43, 0xB1, 0xE9, 0xBF, 0xCD, 0xFE, 0xAA, 0x5F, 0xB5, 0x61, 0xBB, 0xD8, 0x2E, 0xF2, 0xEF, 0xAB, 0xC0, 0x29, 0x2A, 0xBF, 0xD3, 0x54, 0x65, 0xDF, 0x4C, 0xA5, 0xCB, 0x31, 0x68, 0xD8, 0x56, 0xAD, 0x41, 0xC1, 0x43, 0x45, 0xE7, 0xFE, 0x9D, 0x3B, 0x8B, 0x1D, 0x6F, 0x76, 0xAB, 0x26, 0x46, 0x15, 0xF6, 0x6C, 0xF5, 0x25, 0x0C, 0x92, 0xFE, 0xF4, 0xE9, 0xF5, 0xAC, 0x33, 0x9C, 0x1C, 0x19, 0xB2, 0xFA, 0x5A, 0x2D, 0xF8, 0x50, 0xD0, 0xA7, 0x74, 0x6E, 0x28, 0xFC, 0x48, 0xEF, 0x36, 0x26, 0xB5, 0x23, 0x52, 0x97, 0x95, 0xD9, 0xD8, 0x57, 0xEC, 0xD4, 0x2A, 0xD9, 0x44, 0xEC, 0x16, 0xB0, 0xEC, 0x97, 0xD8, 0x77, 0xC1, 0xA2, 0x08, 0x71, 0xA0, 0x63, 0x71, 0x6C, 0xC8, 0x47, 0x54, 0x3D, 0xF6, 0x47, 0x39, 0xC4, 0x4A, 0xE9, 0xFF, 0x19, 0x9C, 0x5E, 0x69, 0x8F, 0xED, 0x30, 0xF0, 0x9E, 0xF7, 0x7B, 0x09, 0x18, 0x79, 0x0E, 0x1D, 0xF1, 0xF9, 0x27, 0x34, 0x7A, 0x36, 0xF4, 0x73, 0x61, 0x21, 0x04, 0x97, 0x0C, 0xDD, 0x72, 0xE1, 0x16, 0xCC, 0xD4, 0x8D, 0xD8, 0x9F, 0xFF, 0x01, 0x0E, 0x8E, 0x1B, 0x32, 0x2A, 0xED, 0x07, 0x7C, 0x78, 0x3A, 0x7C, 0xD8, 0xEA, 0x7A, 0xF0, 0xDD, 0x6C, 0xC2, 0xC1, 0x85, 0xFB, 0x90, 0xF9, 0xE8, 0xA5, 0xE9, 0x97, 0xC5, 0xA8, 0x4D, 0x93, 0x5E, 0x88, 0xE3, 0xA2, 0x27, 0x1C, 0x10, 0x27, 0x3C, 0x1E, 0xB9, 0x40, 0x8C, 0x31, 0xF9, 0xFC, 0x38, 0x6A, 0x31, 0xC0, 0x77, 0xAB, 0xA8, 0xD6, 0xE2, 0x6F, 0x8B, 0x71, 0x85, 0xE2, 0xDF, 0xD9, 0xE3, 0x2B, 0x80, 0x49, 0xE9, 0x92, 0x19, 0xA1, 0x1B, 0xC1, 0x2D, 0xEB, 0x65, 0xDB, 0xF6, 0x01, 0xD0, 0xF5, 0xDA, 0x31, 0x1D, 0xB3, 0xD6, 0x10, 0xDD, 0x73, 0xAB, 0x07, 0x54, 0xC9, 0x98, 0xDE, 0x77, 0x65, 0x28, 0x0C, 0x9E, 0x3B, 0xA5, 0x5D, 0x9C, 0x2F, 0x64, 0x37, 0x8E, 0xE9, 0x15, 0x55, 0x0F, 0x9E, 0xB4, 0x8A, 0xCD, 0xEB, 0x5F, 0x17, 0x4A, 0x5A, 0x2E, 0xCB, 0xEC, 0x65, 0x81, 0xF4, 0x98, 0x96, 0x74, 0x33, 0x14, 0x17, 0x79, 0x06, 0xEF, 0x42, 0xCC, 0x0C, 0x78, 0x21, 0x2E, 0x9E, 0xEA, 0x35, 0x50, 0x5C, 0x92, 0xF5, 0xE1, 0x6E, 0xEC, 0x11, 0x80, 0xCF, 0x63, 0xE7, 0x38, 0x8A, 0x9F, 0xB2, 0xE6, 0x9E, 0x16, 0xDF, 0xEF, 0x5F, 0x60, 0x02, 0xFA, 0x75, 0xFF, 0x1B, 0x37, 0x37, 0x01, 0xCA, 0x5D, 0xBE, 0x35, 0x7C, 0xDE, 0x03, 0xA8, 0x9E, 0x98, 0x1D, 0x37, 0x6B, 0x00, 0x34, 0x32, 0x8A, 0x9B, 0x11, 0x1A, 0x0D, 0x61, 0x7B, 0x1C, 0x5B, 0x9B, 0xE7, 0x94, 0x75, 0x5D, 0x9D, 0x04, 0x65, 0xAE, 0x25, 0xD4, 0x5A, 0x55, 0x06, 0x2A, 0x59, 0xDD, 0xD9, 0x90, 0x54, 0x13, 0x2A, 0x84, 0xBE, 0x5F, 0xB7, 0x6E, 0x00, 0xC8, 0x15, 0x92, 0x1B, 0xBE, 0xC9, 0x9A, 0xAD, 0xF5, 0x9C, 0xD6, 0x83, 0x89, 0xF6, 0xDA, 0x5E, 0xA7, 0x69, 0xA6, 0xD5, 0x27, 0x6B, 0xF3, 0xC0, 0xF2, 0x82, 0x56, 0x7B, 0x8D, 0x7E, 0xEF, 0x9F, 0x10, 0x0F, 0xF0, 0x36, 0x3E, 0x31, 0x53, 0x7C, 0xBC, 0x63, 0x85, 0xB7, 0x58, 0xD0, 0x6C, 0x75, 0x14, 0xE8, 0x16, 0x5D, 0x2C, 0xBD, 0x6E, 0x9A, 0xA6, 0xEB, 0x3E, 0xAB, 0xCD, 0x61, 0x60, 0x78, 0x22, 0xF9, 0xF9, 0xD6, 0xFF, 0xA0, 0x9A, 0xC5, 0xE8, 0xA0, 0x0D, 0xB3, 0xC1, 0x7F, 0x0C, 0x4C, 0xB3, 0xA9, 0x6A, 0x1B, 0x1B, 0x0E, 0x73, 0x8B, 0x92, 0xAD, 0xA2, 0x97, 0x43, 0xCC, 0x85, 0x82, 0x67, 0x93, 0x36, 0xC0, 0xB0, 0x1F, 0x3F, 0xEB, 0xCC, 0xEA, 0x02, 0xBD, 0x16, 0x68, 0xD7, 0xE1, 0x56, 0x86, 0xAE, 0x5F, 0xB5, 0xFB, 0xEF, 0x06, 0xED, 0x6D, 0xB4, 0xBE, 0xCB, 0x5A, 0x68, 0xBB, 0x4A, 0xF3, 0x15, 0x78, 0xE6, 0x6B, 0x8F, 0xC7, 0xA6, 0x97, 0x15, 0x36, 0x2C, 0x06, 0x78, 0x98, 0xB6, 0xC5, 0x54, 0xBC, 0xED, 0xB7, 0x75, 0x8E, 0x78, 0x26, 0x78, 0x7B, 0x2D, 0x20, 0x3B, 0x3B, 0x61, 0xD7, 0x2D, 0x80, 0x4D, 0x29, 0x7B, 0xD3, 0xC4, 0x85, 0xD3, 0x8E, 0xF8, 0x82, 0xF9, 0x8F, 0xD0, 0x57, 0xC7, 0x9E, 0x83, 0xFB, 0x55, 0x38, 0x34, 0xB5, 0x61, 0x5A, 0x58, 0x0A, 0x1C, 0x5E, 0xB4, 0xC6, 0xB9, 0xDF, 0x4E, 0xC8, 0x69, 0x51, 0xF8, 0xA9, 0xBF, 0xE6, 0xDA, 0x9B, 0x3F, 0xC6, 0x0C, 0x8D, 0x81, 0x39, 0xB5, 0xB4, 0x1A, 0xFC, 0x25, 0x4C, 0xD2, 0xCE, 0x71, 0x46, 0xA5, 0xC0, 0xF8, 0xF7, 0x5A, 0xFF, 0x72, 0x02, 0x8C, 0x6E, 0xAB, 0xBD, 0x4E, 0xDE, 0x81, 0xCC, 0xC8, 0x27, 0x34, 0x7F, 0x76, 0x21, 0xCD, 0x02, 0xA0, 0xA8, 0x7C, 0xE6, 0x63, 0xF1, 0xFC, 0xBA, 0x4C, 0x5F, 0xD0, 0x9D, 0xB3, 0xB7, 0x63, 0xB6, 0x26, 0x6C, 0xD8, 0x92, 0x1B, 0x27, 0x2E, 0xEE, 0x75, 0xE2, 0x93, 0x38, 0x25, 0xE3, 0x96, 0x3A, 0xC3, 0xB2, 0xB9, 0x7B, 0x1E, 0x6A, 0xE8, 0xC0, 0xFD, 0xAE, 0x75, 0x5F, 0x06, 0xE6, 0xC2, 0xC3, 0x0F, 0xCB, 0xBE, 0xB5, 0xCB, 0x80, 0x82, 0x32, 0x77, 0x0E, 0xFB, 0xF4, 0x84, 0xD3, 0x4F, 0xBF, 0x45, 0xF8, 0xF8, 0x40, 0xA6, 0xD6, 0x93, 0xF6, 0x7E, 0x0B, 0x9B, 0xB4, 0x79, 0x58, 0x87, 0xB5, 0xB0, 0x46, 0xAB, 0x0F, 0x03, 0x2C, 0x21, 0x31, 0x47, 0xAB, 0x8F, 0x9E, 0x42, 0xBC, 0x56, 0x0F, 0x74, 0x7F, 0xFA, 0xE4, 0xEC, 0xA1, 0xB3, 0x00, 0xD7, 0x2D, 0x0F, 0x39, 0x81, 0xCE, 0x99, 0x43, 0xA3, 0x0E, 0x7A, 0x01, 0x6C, 0xE3, 0x70, 0xA2, 0xB8, 0xB4, 0xF6, 0x89, 0x30, 0x31, 0x26, 0xF4, 0x46, 0xA8, 0x38, 0xB8, 0xFC, 0xAB, 0x23, 0x60, 0x50, 0xBF, 0x79, 0xD0, 0xB7, 0xA9, 0xE0, 0xF4, 0x0B, 0x4A, 0x46, 0xBB, 0x3C, 0x6D, 0xEA, 0x08, 0x7F, 0xFA, 0x4C, 0xDE, 0x57, 0xFF, 0x7F, 0xF3, 0xB2, 0xB3, 0x3F, 0xEB, 0x79, 0xC1, 0xDB, 0xF6, 0x25, 0x0B, 0x9D, 0x43, 0xE1, 0x46, 0xE4, 0xBF, 0xE7, 0x55, 0x9F, 0xC1, 0xB1, 0x78, 0xB9, 0x82, 0x17, 0x0E, 0x68, 0x3B, 0x63, 0xAD, 0x16, 0x90, 0x93, 0xA8, 0xED, 0x69, 0xB5, 0x21, 0xAD, 0xB7, 0xD6, 0xFF, 0xDF, 0x7C, 0x9F, 0xD3, 0x5B, 0x40, 0x5F, 0xEF, 0xD4, 0xE6, 0xE3, 0x83, 0x40, 0xB7, 0x56, 0xFA, 0x90, 0x13, 0x15, 0x00, 0x56, 0xFF, 0x38, 0x53, 0x4F, 0x9C, 0x59, 0xFE, 0xCA, 0x36, 0x31, 0xE2, 0xF2, 0x33, 0x2F, 0xC0, 0x26, 0x50, 0xDB, 0x4F, 0xA1, 0xD4, 0x2B, 0x4E, 0x8B, 0x8D, 0x5B, 0x4B, 0x6E, 0xC3, 0x69, 0xF6, 0x9D, 0xCA, 0x14, 0x6B, 0x8F, 0xF6, 0x73, 0x13, 0x23, 0xF9, 0x78, 0xC5, 0x34, 0xAB, 0x7C, 0xF1, 0x82, 0x6E, 0x29, 0x33, 0x13, 0x6D, 0xA5, 0xFD, 0xDB, 0xC4, 0x20, 0x0F, 0x5E, 0x65, 0x68, 0x3B, 0x76, 0x2E, 0x14, 0x7E, 0xD4, 0xF6, 0x3B, 0x67, 0xB8, 0x56, 0x4E, 0x3B, 0x37, 0x5D, 0x00, 0xE7, 0x23, 0xB4, 0xF3, 0xDE, 0x51, 0xD7, 0x86, 0x9C, 0x77, 0x00, 0xC3, 0x6D, 0x79, 0x0D, 0x4E, 0xCF, 0x05, 0xDD, 0x96, 0x9B, 0xFB, 0x9E, 0x0D, 0x02, 0x9D, 0x81, 0x0B, 0xCB, 0x5C, 0xD3, 0x01, 0x18, 0x1B, 0xF3, 0x6C, 0x0A, 0xE8, 0x44, 0x04, 0x7D, 0x91, 0x5C, 0xF3, 0x5C, 0xDD, 0x08, 0xD1, 0xFD, 0x8C, 0xE4, 0x18, 0xE8, 0x39, 0xD6, 0x70, 0xF8, 0xA5, 0xAD, 0x86, 0x51, 0x60, 0xA6, 0xAD, 0x6C, 0xBD, 0xDF, 0x1B, 0x59, 0x22, 0x5D, 0x6A, 0x57, 0xF3, 0xC6, 0xE2, 0x26, 0x3F, 0xD3, 0x11, 0xE2, 0x85, 0xDF, 0x26, 0xAE, 0x16, 0xDA, 0x74, 0xB2, 0x78, 0x31, 0x18, 0xF6, 0x96, 0xFA, 0xC7, 0xA0, 0x26, 0xFC, 0xF9, 0xAB, 0x99, 0x0D, 0x9F, 0xB5, 0xBE, 0xA2, 0xCE, 0x8C, 0xE3, 0x63, 0x2E, 0xB4, 0x01, 0xFD, 0x4E, 0xA9, 0x2F, 0xCF, 0x3B, 0x69, 0xB6, 0x4A, 0xFC, 0x71, 0xAD, 0x13, 0xC0, 0xD4, 0x43, 0xCF, 0xBA, 0x89, 0xBD, 0xEF, 0x48, 0xAE, 0x65, 0x43, 0xF7, 0x0F, 0x62, 0x85, 0x0E, 0x20, 0xBA, 0xC4, 0x95, 0xD2, 0x8E, 0xAB, 0xDC, 0x53, 0xCB, 0x83, 0x36, 0xA7, 0xB4, 0xBA, 0xF0, 0x0F, 0x18, 0x68, 0x3B, 0x8E, 0xFF, 0x29, 0xFD, 0x0D, 0xFA, 0xDA, 0x3C, 0x6F, 0xB4, 0xBE, 0xDE, 0x5D, 0xA4, 0x7B, 0xBD, 0xD5, 0x30, 0x5D, 0xDC, 0xFA, 0xDA, 0x10, 0xF1, 0xFC, 0x68, 0xFD, 0x55, 0xE2, 0xAD, 0x81, 0x86, 0x63, 0x4C, 0xB4, 0x67, 0xE9, 0x95, 0x37, 0xC8, 0x4E, 0xFB, 0xE1, 0x36, 0xEC, 0xB5, 0xB8, 0x14, 0x0B, 0x7A, 0x77, 0xD6, 0xF7, 0xBA, 0xE6, 0x0D, 0x30, 0xE7, 0xE9, 0x63, 0x33, 0x31, 0x5C, 0xEA, 0x40, 0x4C, 0x1E, 0xB7, 0xEB, 0x2F, 0x96, 0x76, 0x74, 0x6B, 0x29, 0x5A, 0xB4, 0xB4, 0xBB, 0xA7, 0x3D, 0xAA, 0x51, 0xA6, 0x51, 0x3A, 0x0B, 0xB5, 0xAA, 0x22, 0xB5, 0x74, 0xAA, 0xC9, 0x25, 0xAD, 0xFA, 0x1D, 0x8F, 0xAA, 0x83, 0xD0, 0xDB, 0xAF, 0xA3, 0x75, 0x26, 0x42, 0xB2, 0x75, 0xD6, 0xE9, 0x68, 0x8F, 0xFA, 0x24, 0x53, 0x9D, 0x72, 0xC8, 0x6A, 0x75, 0x5F, 0xA7, 0x40, 0xDC, 0x16, 0xA8, 0xF3, 0x57, 0xCC, 0xAC, 0xA1, 0xEB, 0x2A, 0x1E, 0x9C, 0xA0, 0xDB, 0x5E, 0xBC, 0x50, 0x5B, 0x57, 0x7B, 0x8C, 0x1C, 0x42, 0x40, 0x3E, 0xB2, 0xEA, 0x0E, 0x56, 0xDD, 0x25, 0xCD, 0x6C, 0x7A, 0x95, 0x10, 0xB1, 0x7A, 0xD3, 0xAA, 0x9B, 0xB5, 0xDA, 0x61, 0x95, 0x07, 0xA5, 0x3B, 0x69, 0x7B, 0xF8, 0xE1, 0x5E, 0x87, 0x75, 0xDF, 0x69, 0xE9, 0x4F, 0x47, 0x76, 0xB2, 0xD0, 0x3E, 0x86, 0xD9, 0x5B, 0x1C, 0x66, 0xAB, 0x3A, 0xC8, 0x1E, 0x31, 0xB7, 0x6E, 0x65, 0x6F, 0xF1, 0xC6, 0xDC, 0x32, 0xB1, 0xDF, 0xDE, 0xC1, 0xEB, 0x2D, 0xE6, 0x75, 0x9E, 0x7E, 0x84, 0x5F, 0xF6, 0x06, 0x5B, 0xAE, 0x5F, 0x95, 0x0C, 0xB8, 0xE8, 0xAE, 0x3C, 0x75, 0x53, 0x99, 0x9F, 0xA1, 0x54, 0x7D, 0x28, 0xD1, 0xA9, 0x13, 0xE8, 0xAC, 0x94, 0xCF, 0x41, 0xB5, 0x24, 0xB1, 0xEA, 0xA5, 0x2A, 0xEB, 0xC5, 0x06, 0x4B, 0x1D, 0x1A, 0x68, 0x3D, 0xBD, 0x9D, 0x3D, 0x7E, 0xEA, 0x9C, 0xD2, 0x7C, 0x3B, 0x22, 0x5A, 0xDF, 0x5E, 0x3E, 0x1F, 0x5B, 0x54, 0xDD, 0x40, 0xDC, 0x38, 0xA0, 0xEA, 0x58, 0x31, 0x2F, 0xA6, 0xCA, 0x20, 0xB1, 0xA0, 0xBB, 0xD5, 0xEC, 0xCF, 0xB7, 0xE0, 0x63, 0x1D, 0xF3, 0xA8, 0x07, 0x4E, 0xF2, 0xBB, 0x75, 0x1F, 0x9E, 0x6F, 0x2F, 0xC2, 0xC9, 0x36, 0xCA, 0x23, 0x15, 0x94, 0x79, 0x3D, 0x44, 0xB9, 0xD5, 0xDC, 0x0E, 0x88, 0x9D, 0x95, 0x96, 0x4E, 0x50, 0xFE, 0xAD, 0x7C, 0xAD, 0x9C, 0x7B, 0x95, 0x8E, 0xA2, 0x8B, 0x9E, 0x7D, 0xBC, 0xE8, 0xF9, 0xB9, 0xE6, 0x0C, 0xB1, 0x5F, 0xE7, 0xDA, 0xCF, 0xC5, 0x19, 0x06, 0x4E, 0xA5, 0xC5, 0x8D, 0xB3, 0xAB, 0x77, 0x13, 0x0F, 0xC4, 0x3B, 0x38, 0x8A, 0x0F, 0xFD, 0x6C, 0xEE, 0xBC, 0x79, 0x09, 0xDF, 0x97, 0x99, 0x76, 0xBC, 0xF5, 0x05, 0x95, 0xFB, 0x4E, 0x79, 0xA0, 0x96, 0x32, 0xC7, 0x5B, 0x99, 0xD6, 0x53, 0x94, 0x9B, 0xDB, 0x1E, 0x10, 0xEB, 0x64, 0x28, 0x6D, 0x2E, 0x43, 0x25, 0x53, 0xF9, 0x9A, 0x89, 0x6F, 0x6D, 0x07, 0xD1, 0xD1, 0xA7, 0x76, 0x90, 0xD8, 0xCA, 0xD4, 0xC5, 0x45, 0xEC, 0x6D, 0xE2, 0x9A, 0x20, 0x4E, 0x39, 0xED, 0xFA, 0x44, 0xDC, 0xD0, 0xD6, 0x65, 0x94, 0x78, 0x64, 0xB4, 0xCB, 0xEA, 0x2F, 0x49, 0xF0, 0x38, 0xB6, 0x66, 0x9F, 0xBB, 0xF6, 0xF0, 0xE3, 0x66, 0xE5, 0x8D, 0x67, 0x1B, 0x22, 0x75, 0x69, 0x6A, 0x66, 0xA8, 0x08, 0x19, 0x2D, 0x94, 0xA9, 0xF1, 0xA2, 0x85, 0xEB, 0x56, 0x47, 0xD1, 0x2E, 0x55, 0xAB, 0x49, 0xCC, 0x55, 0x7E, 0x93, 0x10, 0x65, 0xBD, 0x76, 0x60, 0xA5, 0xD5, 0x85, 0xC6, 0xFD, 0xA1, 0x8E, 0xE4, 0x51, 0xA9, 0x72, 0xDD, 0x7F, 0xA2, 0x7B, 0x78, 0xC3, 0x60, 0xB1, 0x6B, 0x5C, 0xFD, 0x89, 0xE2, 0xD8, 0x6F, 0xEE, 0x07, 0xC4, 0x75, 0xE9, 0x8D, 0xF7, 0x7C, 0x3F, 0x02, 0xF9, 0x7E, 0xCD, 0xDA, 0x3E, 0xBA, 0x0E, 0xCF, 0x87, 0x35, 0xBA, 0x7C, 0xA1, 0x31, 0xFC, 0xE9, 0x59, 0xB7, 0x51, 0x9E, 0x03, 0xF2, 0x9C, 0x6F, 0xDF, 0x92, 0x26, 0x56, 0x0C, 0xDF, 0xB0, 0x5A, 0xAC, 0xB9, 0x6B, 0x7D, 0x3D, 0xD1, 0xCD, 0x65, 0x75, 0x92, 0xE8, 0x5E, 0xE9, 0xE7, 0x73, 0xAF, 0x1E, 0xA8, 0x7A, 0xEC, 0x9E, 0xD2, 0xAF, 0x97, 0xB2, 0xE6, 0x7E, 0xA8, 0x29, 0xCF, 0x0F, 0x06, 0x85, 0x1E, 0xE5, 0x45, 0xA7, 0x41, 0xAD, 0x1A, 0x8A, 0x1D, 0xFE, 0x79, 0xB6, 0xFF, 0xEC, 0x0B, 0x43, 0x7B, 0x7B, 0x7C, 0x7D, 0xB2, 0x13, 0x16, 0xCF, 0xF7, 0x39, 0x52, 0xB8, 0x00, 0xF6, 0xA7, 0xFA, 0x34, 0xBE, 0xB8, 0x02, 0xDE, 0x85, 0x7B, 0x8F, 0xCE, 0xBA, 0x00, 0x25, 0xA6, 0x5E, 0x1B, 0x53, 0x7C, 0x91, 0x6B, 0xD2, 0x66, 0x27, 0x26, 0x8A, 0xAD, 0x4E, 0x24, 0x5C, 0x10, 0xDB, 0x75, 0x5D, 0xF8, 0x5A, 0x0C, 0xB8, 0x37, 0xA7, 0xAC, 0x18, 0xBC, 0xB4, 0xB8, 0x92, 0xFF, 0x60, 0x80, 0x9F, 0x55, 0x02, 0x3A, 0x8A, 0xBF, 0xFB, 0x75, 0x59, 0x8F, 0xB8, 0xA4, 0x63, 0x14, 0x94, 0xCD, 0xFE, 0x3A, 0xA4, 0x46, 0x00, 0x34, 0x59, 0xFB, 0x2E, 0x0C, 0x4C, 0xD6, 0x06, 0xCD, 0x7D, 0x78, 0x15, 0xEA, 0x5D, 0xEC, 0x3C, 0xEF, 0xA2, 0xA6, 0xFF, 0xBC, 0xAE, 0x43, 0x0E, 0x1F, 0x86, 0xE8, 0xEB, 0xDD, 0x87, 0xED, 0x1D, 0x01, 0x99, 0xC7, 0x3B, 0x8F, 0xDC, 0xDA, 0x08, 0x1E, 0x5F, 0xE8, 0xFC, 0x6A, 0x85, 0x0E, 0x14, 0x3F, 0x1F, 0x12, 0x11, 0x37, 0x53, 0x72, 0x86, 0x2F, 0x19, 0x1B, 0x28, 0x0E, 0x73, 0x1F, 0xD5, 0x43, 0x1C, 0x5E, 0x79, 0xE4, 0x29, 0x71, 0xC4, 0xD3, 0x61, 0xE3, 0xC4, 0xA8, 0x88, 0xD7, 0x47, 0xFB, 0x0C, 0x03, 0x78, 0x97, 0xD2, 0x67, 0xAE, 0xF8, 0x7E, 0xEB, 0x00, 0x23, 0xF1, 0x43, 0xD3, 0x21, 0xA3, 0xC5, 0x17, 0xA6, 0xDD, 0xFF, 0x83, 0xCA, 0xE6, 0x05, 0xAE, 0x5E, 0x07, 0xA1, 0x59, 0x74, 0xD6, 0x14, 0xEB, 0x09, 0xD0, 0xDF, 0x61, 0xA5, 0x2D, 0x54, 0x4C, 0x19, 0x71, 0x65, 0xDE, 0x64, 0xE8, 0xB5, 0x31, 0x6C, 0xCA, 0xA4, 0x30, 0xD8, 0xDE, 0x6F, 0xD8, 0xD8, 0x70, 0x5B, 0xB8, 0xFD, 0x62, 0xC4, 0x97, 0x5E, 0x4B, 0xE0, 0xCB, 0xFB, 0x59, 0xB3, 0x03, 0x37, 0x4A, 0xCE, 0x82, 0xFE, 0x1D, 0x0F, 0x8A, 0xB1, 0xAB, 0xDA, 0xBD, 0x14, 0x67, 0xD7, 0xF3, 0x2A, 0x11, 0xE7, 0xE4, 0x35, 0xB1, 0x12, 0xE7, 0x2D, 0x7A, 0xDE, 0x63, 0xCC, 0x49, 0x80, 0xE7, 0xF5, 0xC7, 0xB9, 0x89, 0x8F, 0xEF, 0x8D, 0x5B, 0x2B, 0x16, 0x5D, 0x98, 0x98, 0x28, 0x5E, 0xAF, 0x36, 0x61, 0x00, 0x98, 0x86, 0xE7, 0xBF, 0x19, 0xEF, 0x06, 0xA5, 0x5D, 0x37, 0xFD, 0x8C, 0x94, 0xF3, 0x7D, 0x9F, 0x71, 0xE1, 0x5D, 0xE6, 0x40, 0x8F, 0xC0, 0x32, 0xAD, 0xC0, 0xA0, 0x7B, 0x3C, 0x60, 0xFC, 0x6C, 0xD2, 0x80, 0x85, 0x6F, 0xA1, 0xD2, 0xDF, 0xD3, 0x15, 0xE6, 0x7A, 0x42, 0xD5, 0xB6, 0x1F, 0xE6, 0x2F, 0x38, 0x0A, 0x0E, 0x73, 0xB4, 0x7A, 0x2C, 0x0E, 0xEC, 0xCE, 0x68, 0x2E, 0x82, 0x8A, 0x4B, 0x35, 0xA5, 0x5E, 0xAA, 0xA4, 0x5D, 0xA1, 0x91, 0x0B, 0x15, 0x03, 0x34, 0x75, 0x9E, 0x5D, 0x9D, 0xDD, 0x1F, 0xE0, 0xBE, 0xD5, 0x1C, 0x7B, 0xF1, 0xB6, 0xC9, 0xBC, 0x11, 0xE2, 0x99, 0x65, 0xF3, 0xBE, 0x80, 0xE1, 0xCC, 0xBD, 0x97, 0xE7, 0x99, 0x83, 0xEE, 0x8F, 0x8D, 0x0F, 0x17, 0xAE, 0xD2, 0xBC, 0x3B, 0xFF, 0xBF, 0xA5, 0xC5, 0x60, 0xF3, 0x2C, 0xD4, 0x77, 0xBE, 0x23, 0x78, 0x3D, 0x85, 0xC8, 0x31, 0x76, 0x53, 0x46, 0x87, 0xC1, 0xE4, 0xA6, 0x0B, 0x2A, 0x0E, 0xF9, 0x0F, 0xC6, 0x4D, 0x3C, 0x3F, 0x6C, 0xF0, 0x6F, 0x08, 0xFB, 0x52, 0x5C, 0x7D, 0xF8, 0x7E, 0xE8, 0xAB, 0xBD, 0xE7, 0x65, 0x3A, 0xD9, 0x39, 0x54, 0xEB, 0xBB, 0x64, 0x41, 0x97, 0x43, 0x9A, 0x65, 0x21, 0xB0, 0x40, 0xEB, 0xBF, 0x54, 0x81, 0x8E, 0x45, 0x9A, 0x46, 0xF7, 0xAE, 0x2C, 0xCF, 0x46, 0xF2, 0xB7, 0x25, 0xCD, 0x12, 0xCF, 0x75, 0x4F, 0x5A, 0x2B, 0x66, 0x0F, 0x5D, 0x76, 0x02, 0x74, 0xD2, 0xD7, 0xBB, 0xAD, 0x88, 0x04, 0x98, 0xBF, 0x78, 0x9D, 0xA1, 0x38, 0xF1, 0x5E, 0x6A, 0x22, 0xE8, 0xFD, 0xEC, 0x76, 0x30, 0x7D, 0x09, 0xB8, 0x9C, 0x86, 0x9D, 0xDF, 0x9D, 0x56, 0x76, 0x9B, 0x00, 0x19, 0xA3, 0xE7, 0x1C, 0xF3, 0xD3, 0x83, 0xDD, 0x0F, 0xCF, 0x15, 0xFA, 0x4A, 0x1D, 0xD4, 0xF4, 0xEB, 0x89, 0xC0, 0xE9, 0x30, 0xE7, 0x9B, 0x36, 0xBB, 0x9F, 0x09, 0xE3, 0xF7, 0x68, 0xF3, 0xEB, 0x75, 0x30, 0x56, 0xBB, 0xFF, 0x03, 0x27, 0x43, 0x94, 0x8D, 0x56, 0x93, 0xF7, 0x80, 0x48, 0x6D, 0x8D, 0x1C, 0x56, 0xE9, 0xEE, 0x8A, 0x2D, 0x2B, 0x00, 0xAE, 0x86, 0x6C, 0x4D, 0x15, 0x0F, 0x5C, 0xDB, 0xF4, 0x0B, 0x68, 0xB3, 0x69, 0xBB, 0xBC, 0xC3, 0x60, 0xA1, 0xE3, 0xE6, 0x2C, 0x71, 0xA2, 0xCB, 0x9E, 0xDA, 0xE2, 0x90, 0xCB, 0x47, 0x0D, 0xC4, 0x0E, 0x3B, 0xCF, 0x3D, 0x00, 0xEB, 0xF5, 0x70, 0xC9, 0xC2, 0x71, 0x73, 0x8B, 0x34, 0xB8, 0x31, 0x6E, 0xDA, 0xE9, 0xFA, 0x8B, 0xE1, 0x72, 0xFE, 0x99, 0x9A, 0xF5, 0xEA, 0xC0, 0xD1, 0xF7, 0xC5, 0x95, 0xEA, 0xF7, 0x87, 0xB4, 0x8E, 0x5A, 0x7D, 0xF1, 0x12, 0x56, 0x6B, 0x3B, 0x65, 0x93, 0x1D, 0x90, 0x18, 0xAD, 0xBD, 0x6F, 0xCA, 0x43, 0xFC, 0x5C, 0xAD, 0x9F, 0xEC, 0x0C, 0x0B, 0xB5, 0x7A, 0xC0, 0x67, 0x52, 0x81, 0x4B, 0xE6, 0x5E, 0x80, 0xD3, 0x9D, 0xD3, 0xEB, 0x88, 0xBB, 0x8B, 0x52, 0x77, 0x82, 0x5E, 0xDD, 0x95, 0x7A, 0xBB, 0xFD, 0x01, 0xA6, 0x4D, 0xCE, 0x18, 0x28, 0x86, 0x25, 0x1E, 0x6B, 0x2E, 0x06, 0xB7, 0xBD, 0xF9, 0x55, 0x6C, 0xE6, 0xF2, 0x64, 0x2C, 0xE8, 0x2D, 0x87, 0x37, 0xF3, 0xAA, 0x0C, 0xAB, 0x2E, 0xAB, 0xB8, 0xF5, 0xE8, 0x1E, 0x15, 0x8B, 0xE1, 0xF3, 0xB1, 0xFC, 0xED, 0x15, 0x26, 0xC2, 0xB3, 0xE1, 0x5F, 0xEF, 0xDB, 0xB6, 0x85, 0x8B, 0x5F, 0xFE, 0xE8, 0x96, 0xE9, 0x0C, 0xB9, 0xDA, 0x0E, 0x68, 0xDD, 0x09, 0xB2, 0xDB, 0x69, 0xEB, 0x48, 0x1A, 0xA4, 0x55, 0xD7, 0xF6, 0x94, 0x05, 0xB0, 0x53, 0x7B, 0x5E, 0x6A, 0x44, 0x5F, 0xCF, 0x38, 0x14, 0x01, 0x90, 0x77, 0x2D, 0x67, 0x01, 0xE8, 0xE9, 0x6E, 0xCC, 0xCE, 0x2A, 0x01, 0xFD, 0x98, 0x85, 0x5F, 0xF6, 0x57, 0x04, 0x18, 0x9B, 0x75, 0xA2, 0x93, 0xD8, 0xAF, 0xC5, 0xAD, 0x62, 0xB1, 0xED, 0xE9, 0x0F, 0x75, 0xC4, 0x2A, 0xB7, 0xFF, 0xB7, 0x0F, 0xEF, 0x47, 0x56, 0x29, 0xDB, 0xD2, 0x03, 0x4D, 0xB4, 0x33, 0xBE, 0x41, 0x2B, 0xF4, 0x9D, 0xE5, 0xE3, 0x75, 0x97, 0x8D, 0xBB, 0x8B, 0x37, 0xA2, 0x0D, 0xB7, 0xC2, 0x8F, 0x97, 0xDF, 0x6F, 0x1A, 0x99, 0x41, 0x91, 0x9C, 0x8B, 0x02, 0xD7, 0x83, 0x94, 0xE7, 0x37, 0x68, 0xE7, 0xD9, 0x83, 0xE1, 0xA4, 0x76, 0x8E, 0x64, 0xA2, 0x7F, 0x7A, 0xD0, 0x51, 0x07, 0xD0, 0x09, 0xDA, 0xDD, 0xEB, 0x80, 0x11, 0xE8, 0xF5, 0x5C, 0x71, 0xED, 0x50, 0x06, 0xC0, 0x34, 0x9F, 0xD3, 0xEB, 0xC5, 0xB0, 0x23, 0x85, 0x0B, 0xC5, 0xC0, 0xC5, 0xBF, 0xDB, 0x83, 0x8E, 0xBB, 0xB3, 0xFF, 0xFF, 0xEA, 0xA1, 0xA6, 0xE6, 0xDA, 0xBD, 0x33, 0x8F, 0xB1, 0x70, 0x35, 0xBB, 0xAB, 0xAD, 0x86, 0x13, 0x40, 0x67, 0xA6, 0xB6, 0x1A, 0xC5, 0xE2, 0x8B, 0xD4, 0x41, 0x59, 0x38, 0x8A, 0xDB, 0x2B, 0x82, 0x78, 0xBD, 0x13, 0xE2, 0xDD, 0x7F, 0xF3, 0xD9, 0x0F, 0xBF, 0x64, 0x2F, 0x02, 0xBE, 0x8F, 0x53, 0x7E, 0xD8, 0x25, 0xE6, 0x5D, 0x3C, 0x1E, 0x0E, 0xBA, 0x95, 0x36, 0x7C, 0x3A, 0xAA, 0x0F, 0x7A, 0x2D, 0xE6, 0x9B, 0x9F, 0xDD, 0x00, 0x30, 0xB6, 0x7A, 0xD1, 0x65, 0xB1, 0xD7, 0x0A, 0xF9, 0x2E, 0xFD, 0x00, 0xF7, 0xDB, 0xA2, 0x49, 0x68, 0x75, 0xED, 0xE8, 0x8D, 0x83, 0x74, 0xEE, 0xEB, 0x5E, 0xD5, 0x8E, 0xC3, 0xDA, 0xDC, 0x45, 0x5F, 0xDB, 0xE9, 0xEA, 0x76, 0x54, 0x79, 0x1D, 0xCD, 0x94, 0x23, 0xB7, 0x28, 0xE3, 0xCF, 0x29, 0xF7, 0x2C, 0x55, 0xDE, 0x71, 0x54, 0x3E, 0x79, 0xA6, 0x7C, 0x6B, 0x81, 0x78, 0xAE, 0x78, 0x0C, 0xEC, 0xEA, 0x70, 0x4A, 0x7A, 0xBC, 0xA6, 0x89, 0x66, 0xE7, 0xFE, 0x00, 0x4C, 0xAD, 0x50, 0x74, 0x54, 0x1C, 0xD8, 0xE6, 0xA7, 0x3B, 0xE8, 0x17, 0xB5, 0xAB, 0x2B, 0xF9, 0xBA, 0xF3, 0x9C, 0xB3, 0x45, 0xC3, 0xC7, 0xE5, 0x96, 0x69, 0xD5, 0xDC, 0x40, 0x83, 0x81, 0xA0, 0x1D, 0x47, 0x7D, 0xE3, 0x64, 0xD1, 0xF9, 0x32, 0x88, 0x3E, 0xAF, 0x94, 0xA1, 0x28, 0x67, 0xA0, 0x4C, 0x4A, 0x55, 0x66, 0xF4, 0x54, 0x1E, 0x1E, 0xA4, 0xBC, 0x68, 0xA7, 0xBC, 0x79, 0x5D, 0xFE, 0x2D, 0x7F, 0x1F, 0x44, 0xBD, 0xA5, 0xEA, 0xEF, 0xB3, 0x80, 0xAD, 0x53, 0xD9, 0x24, 0xD1, 0xF9, 0xB6, 0x75, 0x90, 0xF6, 0xF9, 0x10, 0x0F, 0xCC, 0xB4, 0xEA, 0xCD, 0x72, 0x7E, 0xF7, 0xC7, 0x48, 0xEF, 0x26, 0x78, 0xB8, 0xBB, 0x99, 0xF4, 0x25, 0x98, 0x79, 0xB3, 0xBC, 0xA1, 0xB8, 0x36, 0xD0, 0x7A, 0xB6, 0x98, 0x33, 0xC9, 0xE2, 0xC8, 0xBF, 0x58, 0xB8, 0xB8, 0xD0, 0xD0, 0xFF, 0x9D, 0x13, 0x3C, 0xC8, 0xD4, 0xCD, 0xBB, 0x37, 0x1C, 0x3E, 0x87, 0xC1, 0xF9, 0xFD, 0x6A, 0x9F, 0x3D, 0x36, 0x41, 0x79, 0xA8, 0xAD, 0x32, 0xAF, 0xA1, 0x28, 0x37, 0xDB, 0x57, 0x20, 0x4A, 0xCF, 0xAA, 0x94, 0xC9, 0xFF, 0xAA, 0xD1, 0xDF, 0x65, 0xDB, 0x8A, 0xD5, 0xFB, 0xD8, 0x94, 0xD6, 0x3E, 0x7F, 0xB9, 0x4D, 0x7F, 0x83, 0xDA, 0xDA, 0x4C, 0x2B, 0x30, 0xE8, 0x02, 0xD2, 0xD3, 0xF9, 0x3C, 0xAC, 0xA1, 0xE1, 0x2C, 0xF9, 0xFA, 0x34, 0x57, 0xBB, 0x3B, 0xE2, 0xBA, 0x56, 0xD6, 0xF7, 0xC4, 0x7D, 0xF7, 0x2D, 0x7C, 0xFF, 0x9E, 0x86, 0x6B, 0xC1, 0x06, 0x7B, 0x5F, 0x01, 0xCF, 0x66, 0xEA, 0x2C, 0xBC, 0x63, 0x08, 0x3F, 0x4A, 0xE0, 0x58, 0x14, 0x2A, 0xF7, 0x97, 0x32, 0xE7, 0xA0, 0x32, 0xA3, 0xAE, 0x28, 0x37, 0x9B, 0x67, 0x20, 0x56, 0x2D, 0xA3, 0x04, 0xB0, 0x6D, 0x24, 0x56, 0x5C, 0x68, 0xBD, 0x5F, 0x7B, 0xF4, 0x0F, 0x37, 0xCD, 0x35, 0x3C, 0xA7, 0xB9, 0xBA, 0xD3, 0x5D, 0xDD, 0x48, 0xAD, 0xA7, 0x52, 0x65, 0xE0, 0x45, 0xF5, 0x7D, 0x93, 0xCF, 0xD9, 0xB9, 0x8A, 0x6B, 0x8F, 0x94, 0xFB, 0x4F, 0xCC, 0x7B, 0x67, 0xB9, 0xA4, 0x78, 0x18, 0xDC, 0x2C, 0x30, 0xFE, 0xF1, 0xA4, 0x10, 0xDE, 0x95, 0x83, 0x4B, 0x25, 0xF0, 0xBF, 0x63, 0x5C, 0xA6, 0x4C, 0x7B, 0xAD, 0x4C, 0xF5, 0x55, 0x6E, 0x6D, 0xFB, 0xFF, 0xAF, 0x0B, 0x1D, 0x6A, 0x2B, 0x4B, 0x01, 0x96, 0xAF, 0xFE, 0xF7, 0xB8, 0xBC, 0xB1, 0x3D, 0x24, 0xD6, 0x78, 0x5F, 0x31, 0x50, 0x6C, 0x7D, 0xD2, 0x46, 0x9B, 0xBF, 0x54, 0xFB, 0x36, 0xC0, 0x10, 0x75, 0x1C, 0x11, 0x76, 0x5D, 0xC5, 0xE4, 0x93, 0xE5, 0xF5, 0x7F, 0xB4, 0x81, 0xBC, 0x28, 0xDB, 0x6B, 0xCF, 0x6B, 0xC2, 0x1D, 0xCB, 0x32, 0x79, 0x37, 0x36, 0xC3, 0x97, 0x45, 0x16, 0x87, 0x4F, 0x54, 0x53, 0xDF, 0xBB, 0xBD, 0x99, 0x72, 0x7D, 0x63, 0x94, 0xAB, 0x95, 0x6A, 0x1E, 0xA5, 0xD3, 0x4B, 0xEB, 0x0D, 0x55, 0x52, 0xF9, 0xCE, 0x96, 0x4A, 0xD7, 0x73, 0x20, 0x9F, 0x07, 0x70, 0xAC, 0x2E, 0x56, 0x4A, 0xB3, 0x4F, 0x16, 0x1B, 0xD5, 0x74, 0x28, 0xAB, 0xF5, 0xAD, 0x9C, 0xFA, 0x0C, 0x82, 0x3F, 0x7E, 0x30, 0xD6, 0xB9, 0xBA, 0xD3, 0xFB, 0x6B, 0xB0, 0xBC, 0x66, 0xF5, 0x2A, 0x4F, 0x7E, 0x42, 0x76, 0x13, 0xFB, 0xF4, 0x3B, 0x96, 0x50, 0x74, 0xA6, 0xCA, 0x83, 0x13, 0x5B, 0xA1, 0xE4, 0x7D, 0xE5, 0xEA, 0x59, 0xFF, 0xDB, 0xF7, 0x2B, 0xD9, 0x6E, 0x98, 0x2D, 0x96, 0x0D, 0x59, 0xFD, 0x5B, 0xB4, 0x36, 0x59, 0xB6, 0x5B, 0xAC, 0xBA, 0x79, 0xE9, 0x10, 0xD1, 0xC9, 0xF8, 0xE7, 0xB6, 0x46, 0x5B, 0x01, 0xFE, 0x3A, 0x34, 0xDA, 0x2D, 0xFE, 0x89, 0x69, 0xBA, 0x52, 0xFC, 0xDE, 0xC9, 0x3E, 0x17, 0xEC, 0x5C, 0x8B, 0xF7, 0x82, 0x49, 0x8E, 0x9B, 0xDD, 0x97, 0x62, 0x70, 0x5A, 0xE2, 0x7C, 0xEF, 0xBD, 0x33, 0x78, 0xDE, 0x70, 0x89, 0x79, 0x90, 0x09, 0xA1, 0xE3, 0x6A, 0xAF, 0xBD, 0xF9, 0x1B, 0x66, 0xBD, 0xA9, 0x7B, 0xF7, 0x92, 0x2E, 0xA4, 0xAD, 0x70, 0xBD, 0x7C, 0xDC, 0x17, 0x1E, 0xBD, 0xAE, 0x5D, 0x2D, 0xA3, 0x2B, 0xFC, 0x6C, 0xE7, 0xB6, 0x6B, 0xBD, 0xBD, 0xE4, 0x34, 0x2E, 0xBD, 0xF8, 0xBC, 0xD8, 0xCC, 0x29, 0x2E, 0x4E, 0x6C, 0xD1, 0x7C, 0x66, 0x35, 0xD1, 0x63, 0xDD, 0xD4, 0xAF, 0x62, 0xFB, 0x41, 0xEF, 0x7F, 0x78, 0x2E, 0x05, 0xF8, 0xB4, 0xCE, 0xB3, 0x1A, 0x62, 0x80, 0x57, 0xAE, 0xF8, 0xFE, 0x95, 0x97, 0x29, 0xE8, 0xDF, 0x7E, 0xB6, 0xDD, 0xC1, 0x10, 0x6A, 0xB5, 0x2A, 0x72, 0x03, 0xA3, 0xA1, 0x2D, 0x87, 0x5C, 0xED, 0x0C, 0xB5, 0xBA, 0x35, 0xCB, 0xC8, 0xAF, 0x01, 0x3E, 0xE3, 0x5B, 0x06, 0xA4, 0xAF, 0x82, 0xE1, 0xCE, 0xAD, 0x6F, 0xED, 0xB0, 0x87, 0x14, 0x9A, 0x59, 0x25, 0x8F, 0x81, 0x9B, 0x59, 0x8D, 0x9D, 0xE3, 0x57, 0xC2, 0xD7, 0x0E, 0xBE, 0x61, 0x33, 0x16, 0x48, 0x4E, 0x7F, 0xFF, 0x08, 0x07, 0x71, 0xC0, 0x86, 0x41, 0xF1, 0x88, 0x05, 0xFD, 0xC6, 0x8B, 0x83, 0xEF, 0xF5, 0xAA, 0x24, 0x86, 0xB5, 0x7A, 0x1A, 0xD8, 0xA5, 0x01, 0xC0, 0x93, 0x27, 0x9D, 0xD7, 0x89, 0x8F, 0x87, 0x77, 0xFE, 0x2D, 0x3E, 0x18, 0xDA, 0x25, 0x46, 0xBC, 0x95, 0xE9, 0x9B, 0x00, 0xA5, 0x1A, 0x9E, 0x3E, 0xD5, 0xFC, 0x04, 0x54, 0xDD, 0x99, 0x92, 0x5A, 0xD9, 0x06, 0x5A, 0xCD, 0x9B, 0xDD, 0x01, 0xCA, 0xF7, 0xEB, 0x71, 0x62, 0xD2, 0x66, 0x08, 0x08, 0x09, 0x2A, 0x19, 0xE9, 0x07, 0x2B, 0xB2, 0xBA, 0x1C, 0x18, 0x30, 0x03, 0x4E, 0xA5, 0x06, 0x1F, 0xEC, 0x76, 0x11, 0x3E, 0x1C, 0x19, 0xE6, 0xD1, 0xDE, 0x46, 0x72, 0xA6, 0x66, 0xBA, 0x8F, 0x17, 0x67, 0xF6, 0xAA, 0xB3, 0x0F, 0x71, 0x43, 0xD5, 0x5A, 0xE2, 0xEC, 0x19, 0xF6, 0x88, 0xB1, 0xA9, 0xF7, 0xBF, 0x0C, 0x69, 0x04, 0x50, 0xF4, 0x72, 0xA8, 0x95, 0x78, 0xBB, 0xF7, 0x90, 0x40, 0xF1, 0xC2, 0xB1, 0xC1, 0xB3, 0xC4, 0x43, 0x13, 0x42, 0xB7, 0x83, 0xDE, 0xE9, 0x9D, 0xEB, 0xFB, 0x7A, 0x83, 0xEE, 0xA9, 0x25, 0x4D, 0x7A, 0xDB, 0x83, 0xDD, 0xC1, 0x21, 0x55, 0xBC, 0xB2, 0xC1, 0xC7, 0x18, 0x00, 0x66, 0xFE, 0x01, 0xA3, 0xA7, 0x43, 0xDE, 0xC4, 0x24, 0x42, 0xF9, 0x13, 0x39, 0xCF, 0xC6, 0x4E, 0x85, 0x2A, 0xFB, 0x9E, 0x4D, 0x1E, 0x7B, 0x11, 0x9C, 0xBA, 0xFE, 0x7B, 0x38, 0xDD, 0x08, 0xAA, 0x2E, 0xD6, 0x72, 0xE7, 0x82, 0xFD, 0x51, 0x2D, 0xB7, 0x40, 0xF3, 0x85, 0xE6, 0x59, 0x4D, 0x34, 0xB3, 0x0A, 0x97, 0x46, 0xFF, 0x01, 0xB8, 0x99, 0x11, 0x73, 0x55, 0x3C, 0x5F, 0x2F, 0xA6, 0x91, 0x98, 0x3B, 0x73, 0xC2, 0x15, 0x71, 0xC3, 0xE6, 0xC8, 0x93, 0xA0, 0xAB, 0xB3, 0x60, 0xEE, 0x98, 0x63, 0x00, 0x13, 0xF5, 0x26, 0x7D, 0x03, 0xF3, 0x25, 0xDD, 0x42, 0xC6, 0x97, 0x82, 0xC6, 0xAB, 0xA1, 0xF7, 0x3E, 0xEB, 0x17, 0xFD, 0x67, 0x43, 0x44, 0xC9, 0x84, 0xA8, 0xAE, 0xC5, 0x10, 0x76, 0x62, 0xDF, 0xD2, 0x80, 0x93, 0x30, 0xE0, 0xCE, 0xF3, 0x0E, 0x41, 0x1E, 0xFA, 0x0B, 0xFA, 0x69, 0x3D, 0xD7, 0x7E, 0x79, 0xD0, 0x43, 0xDB, 0x57, 0x22, 0x93, 0xA1, 0xFB, 0x18, 0xED, 0x0C, 0xF8, 0x0E, 0x04, 0xA6, 0x6B, 0x7D, 0x98, 0x37, 0xD0, 0xA9, 0xAB, 0x66, 0xF8, 0xCD, 0x5F, 0xF3, 0x66, 0x01, 0x5C, 0xAA, 0xB5, 0x68, 0xAC, 0x78, 0xD8, 0x6C, 0xDE, 0x73, 0x71, 0xB3, 0xFF, 0x74, 0x0F, 0xD0, 0xB1, 0x9D, 0x5F, 0x6B, 0xCA, 0x0A, 0x80, 0xF1, 0x1F, 0x66, 0x4D, 0x16, 0xC3, 0x6C, 0x97, 0x8F, 0x10, 0x7D, 0x7F, 0x26, 0x7F, 0x83, 0x2A, 0x65, 0x60, 0x45, 0x8B, 0x8A, 0x8F, 0xBD, 0x66, 0xC2, 0x86, 0x29, 0x63, 0xDA, 0xB9, 0xEB, 0xC0, 0xFA, 0x17, 0xB9, 0xBD, 0x1B, 0x19, 0xC1, 0xCA, 0x6B, 0x2F, 0x17, 0x37, 0xF9, 0x0C, 0x73, 0x74, 0xFE, 0xF5, 0x6D, 0xD3, 0x01, 0x26, 0x68, 0xFB, 0x59, 0x87, 0x20, 0x88, 0xD2, 0xF6, 0xB7, 0x80, 0xD3, 0x30, 0x7C, 0x9A, 0xD6, 0x87, 0x59, 0x0B, 0xE1, 0x45, 0x32, 0xCB, 0xBE, 0x7A, 0x7E, 0x65, 0x11, 0xC0, 0xA9, 0x46, 0xAB, 0x1C, 0xC5, 0x3D, 0xF5, 0x13, 0x5C, 0xC4, 0x04, 0xAB, 0x05, 0xD5, 0x01, 0xC7, 0x49, 0x23, 0x16, 0xCC, 0x02, 0x18, 0xE6, 0x9E, 0x54, 0x4A, 0x0C, 0x1E, 0x98, 0xEA, 0x2D, 0x7A, 0x3E, 0xCB, 0xBB, 0x2E, 0xC2, 0x81, 0xE9, 0x15, 0xDF, 0xD4, 0x76, 0x83, 0xA3, 0x4B, 0x22, 0x7E, 0x56, 0x71, 0x85, 0xFC, 0x84, 0x8C, 0x3B, 0x15, 0x0C, 0x21, 0xEF, 0xFC, 0xF3, 0x7A, 0x95, 0x0A, 0x60, 0xE7, 0xB7, 0xBF, 0x46, 0x0E, 0xD7, 0x21, 0x69, 0x91, 0xF6, 0xFE, 0x6C, 0x01, 0x8B, 0xB4, 0x1D, 0xDA, 0xB5, 0x11, 0xCC, 0x9D, 0xAC, 0xED, 0x90, 0xB7, 0x21, 0xEE, 0x92, 0xD6, 0x41, 0x69, 0x78, 0xD1, 0x2B, 0xA5, 0x2E, 0xC0, 0x81, 0x34, 0x55, 0x77, 0xAD, 0xD7, 0x5D, 0xDD, 0x16, 0xF4, 0x0D, 0xE3, 0x72, 0x93, 0xD2, 0x01, 0xA2, 0x56, 0x6C, 0x3C, 0x24, 0x86, 0x58, 0xA6, 0x2F, 0x14, 0x3D, 0xFF, 0x1D, 0xBB, 0x2E, 0x3A, 0xFD, 0x52, 0xFD, 0x09, 0xB8, 0x75, 0xCB, 0x26, 0xCE, 0xFC, 0x16, 0xDC, 0x5D, 0x1D, 0xFA, 0xD5, 0xA0, 0x04, 0xEE, 0x59, 0xEF, 0x5A, 0xAA, 0x77, 0x14, 0x0A, 0x0D, 0x9E, 0x56, 0xD4, 0x3D, 0x0F, 0xA7, 0xB3, 0x4B, 0x52, 0xF5, 0x2F, 0x41, 0x8E, 0xB6, 0x26, 0x1B, 0x3D, 0x81, 0x1D, 0x5A, 0x7D, 0x68, 0x5E, 0x15, 0xB6, 0x9A, 0xC9, 0xDF, 0xB8, 0x85, 0x4D, 0x07, 0xB5, 0x0E, 0x46, 0xE0, 0xE9, 0xE4, 0xF4, 0x46, 0x00, 0x7B, 0x8C, 0xB6, 0x17, 0x83, 0xEE, 0xCF, 0x65, 0x2D, 0xB6, 0x5C, 0x01, 0x3D, 0xE7, 0x29, 0xD3, 0x76, 0x6C, 0x03, 0x18, 0xF6, 0x37, 0xAF, 0x9C, 0xD8, 0xF9, 0xCB, 0x79, 0x37, 0xB1, 0x81, 0xDF, 0xBD, 0x67, 0xA2, 0xF5, 0xB4, 0x37, 0x7F, 0x45, 0xF8, 0x6A, 0x54, 0x79, 0x8C, 0xF8, 0x63, 0x71, 0xC8, 0x13, 0xF1, 0xE7, 0x80, 0x75, 0x43, 0x10, 0x2B, 0x5C, 0x3B, 0x2A, 0x7E, 0x70, 0xFA, 0xD2, 0x4F, 0x2C, 0xD8, 0xA9, 0xD6, 0xC6, 0x73, 0x71, 0xCA, 0xE3, 0xEF, 0x95, 0x87, 0xAF, 0x8A, 0x87, 0x02, 0xF6, 0xAE, 0x01, 0xD8, 0x58, 0x75, 0xCF, 0x5C, 0x30, 0x2C, 0x37, 0x6F, 0x6F, 0xFA, 0x2D, 0x80, 0x31, 0x59, 0x87, 0x9D, 0xC4, 0x3E, 0xB1, 0x6A, 0x5E, 0xE7, 0x1D, 0xF6, 0xEE, 0x87, 0xE8, 0xAC, 0xAF, 0x7E, 0x1A, 0xAD, 0x0E, 0x30, 0xFC, 0x6E, 0xD6, 0x0D, 0x39, 0x3B, 0xFC, 0x0B, 0x62, 0xCF, 0xD3, 0xCA, 0xB8, 0xE7, 0xCA, 0xD4, 0x1A, 0xCA, 0xBB, 0xFE, 0xCA, 0xFF, 0x73, 0x4E, 0x77, 0x5C, 0xF9, 0xB9, 0x8E, 0xF2, 0xF5, 0x1B, 0x31, 0x6D, 0x40, 0x9E, 0xF4, 0xE7, 0x36, 0x26, 0xA6, 0xEC, 0xDD, 0xA9, 0x59, 0x67, 0xCA, 0x8C, 0xFC, 0x2A, 0xEA, 0x71, 0xB8, 0xF9, 0x58, 0xEC, 0x12, 0xF0, 0xF3, 0xA0, 0xD8, 0x58, 0x3A, 0xEC, 0x40, 0xC5, 0xCF, 0xDA, 0x6E, 0xB0, 0x0A, 0x3D, 0x64, 0x87, 0x36, 0x30, 0x6C, 0x27, 0xD6, 0xB9, 0x02, 0x62, 0x97, 0x39, 0xCA, 0x51, 0x9D, 0x94, 0x49, 0xAD, 0x94, 0x99, 0x05, 0xCA, 0x22, 0x4B, 0x65, 0x49, 0x7D, 0xA5, 0xFA, 0x8D, 0xBF, 0x0F, 0x89, 0x9B, 0x1A, 0x1D, 0x6A, 0x06, 0xBA, 0x1B, 0xE6, 0xF7, 0x3D, 0x61, 0x0F, 0x30, 0x76, 0xEC, 0xED, 0x8D, 0x62, 0xAF, 0x2F, 0x9F, 0x3A, 0x03, 0x3D, 0x3C, 0xDC, 0xFF, 0x44, 0x82, 0xEA, 0xB4, 0x8B, 0x16, 0xCF, 0xB5, 0x0A, 0xC4, 0x56, 0xDF, 0x16, 0x99, 0x66, 0xFC, 0xD3, 0xB1, 0x14, 0xEB, 0xFC, 0x01, 0xB1, 0x53, 0x3D, 0x65, 0x28, 0xCA, 0xD8, 0x3D, 0xCA, 0x0D, 0xE7, 0x94, 0x39, 0x25, 0xCA, 0x6B, 0x27, 0x95, 0x85, 0xEF, 0x95, 0xFF, 0x99, 0x20, 0x55, 0x55, 0x23, 0x10, 0xC1, 0xF4, 0x9B, 0x71, 0x0F, 0xB1, 0x4A, 0xB8, 0x49, 0x05, 0xAD, 0x77, 0xF2, 0xA9, 0xFE, 0x52, 0xDD, 0x4F, 0xDA, 0xBD, 0x0F, 0xF6, 0x0C, 0x02, 0xCD, 0xEB, 0x41, 0x26, 0x22, 0x0C, 0x59, 0xA3, 0xDF, 0x4C, 0x9C, 0xEA, 0x62, 0xDA, 0x41, 0x4C, 0x0A, 0x33, 0x1E, 0xF2, 0x07, 0x48, 0x3B, 0xA0, 0x3F, 0xF1, 0xFD, 0x7F, 0x70, 0xB4, 0x32, 0xD1, 0x0F, 0x9F, 0xC3, 0x2D, 0x13, 0xB8, 0x56, 0x07, 0x5E, 0x56, 0x83, 0x63, 0xDB, 0xE1, 0x7B, 0x10, 0xEC, 0x55, 0x13, 0x57, 0x32, 0xD7, 0x2A, 0xD3, 0xDA, 0x89, 0x72, 0x33, 0x2B, 0x0B, 0x22, 0x80, 0xA9, 0xB7, 0x68, 0x33, 0xCB, 0x44, 0xAB, 0xB3, 0x0C, 0xFC, 0x5C, 0xF3, 0xF5, 0x1A, 0x68, 0x1F, 0xDF, 0x6B, 0x39, 0x82, 0x22, 0xED, 0x38, 0x76, 0x06, 0xA8, 0xDA, 0x81, 0x81, 0xB1, 0xBA, 0xFD, 0xC4, 0xC9, 0xF5, 0xCC, 0xAA, 0x89, 0xAB, 0xC2, 0x8C, 0x23, 0xFF, 0x5E, 0x81, 0xCC, 0x05, 0x7A, 0x2B, 0xDF, 0x2E, 0x81, 0x93, 0xB5, 0xA1, 0xA8, 0x00, 0xEE, 0xC6, 0xC2, 0x85, 0x77, 0xF0, 0x61, 0x18, 0xEC, 0x2F, 0x54, 0x3F, 0xBB, 0x7B, 0xBC, 0x72, 0xE7, 0x12, 0xE5, 0xD6, 0x4D, 0xA2, 0xDC, 0x4C, 0xEE, 0x80, 0x68, 0x69, 0xA4, 0x04, 0x33, 0x4F, 0x93, 0xA5, 0xA2, 0x7D, 0x25, 0x53, 0x6D, 0xED, 0xD5, 0xEB, 0xDC, 0xF8, 0x93, 0xCE, 0x49, 0xED, 0xF1, 0x59, 0xD5, 0x21, 0x11, 0xB4, 0x8F, 0xFD, 0xFB, 0xAD, 0x17, 0x61, 0xE2, 0x27, 0xD3, 0x41, 0xE2, 0xAA, 0x97, 0x06, 0xE5, 0xBF, 0x7E, 0x80, 0x8C, 0x02, 0xFD, 0xF8, 0xFF, 0xFA, 0xC2, 0xD9, 0xEE, 0x70, 0x3B, 0x1E, 0x9E, 0xEE, 0x86, 0xE3, 0x0B, 0xE1, 0x87, 0x15, 0xA4, 0x9F, 0x53, 0x3F, 0xB3, 0x29, 0x51, 0xB9, 0xF6, 0xB9, 0x72, 0xB5, 0xA5, 0x28, 0x37, 0xF3, 0xA7, 0x20, 0x9A, 0x78, 0x2B, 0x0D, 0x5B, 0x80, 0xFC, 0x35, 0x04, 0x28, 0xFB, 0xD2, 0xA4, 0x50, 0xAB, 0xCE, 0x2B, 0xBA, 0xC5, 0xE9, 0x0D, 0x97, 0x8F, 0xDB, 0x7C, 0xD4, 0x1B, 0xAC, 0x7D, 0x7D, 0x59, 0xAF, 0x2C, 0xF8, 0x79, 0x0E, 0xC6, 0x9A, 0x19, 0xDB, 0xBF, 0x79, 0x0E, 0xF1, 0xD6, 0x86, 0x53, 0x1E, 0x95, 0x86, 0xDD, 0x91, 0x46, 0x65, 0x6F, 0xBB, 0xC3, 0xD9, 0x10, 0xBD, 0x68, 0x39, 0xDB, 0x7B, 0x15, 0xA9, 0xD7, 0x6B, 0x7F, 0xB2, 0xCA, 0xD9, 0x88, 0x72, 0xD9, 0x3D, 0x65, 0x52, 0x63, 0xE5, 0xAA, 0x68, 0xE5, 0xCF, 0x15, 0x55, 0x17, 0x00, 0xFC, 0x2D, 0x6B, 0x77, 0x5C, 0xFC, 0xBD, 0xB3, 0x5A, 0x96, 0xF8, 0xBD, 0x25, 0xE8, 0xAC, 0xB3, 0xA9, 0xF9, 0x5D, 0xA6, 0xB7, 0x73, 0xAC, 0xFE, 0x7E, 0x6F, 0x05, 0x8D, 0x86, 0x59, 0x35, 0xFE, 0x64, 0x00, 0xFE, 0xEF, 0x2D, 0x6F, 0x3F, 0x5D, 0x09, 0x43, 0xE7, 0x19, 0x77, 0x29, 0x30, 0x85, 0xD8, 0x64, 0xB3, 0xC6, 0x57, 0x0C, 0x61, 0xCB, 0x59, 0x93, 0xF2, 0x67, 0x5A, 0xC1, 0x85, 0x35, 0xC6, 0x6D, 0x0F, 0xFC, 0x86, 0x8F, 0xB9, 0xE6, 0xB7, 0xD4, 0xDF, 0x93, 0x34, 0xDF, 0xBC, 0x3E, 0x57, 0x2C, 0xB5, 0x79, 0xF1, 0x6C, 0xB1, 0xFC, 0xB3, 0x79, 0xF7, 0x44, 0xFB, 0xAE, 0xF3, 0xCA, 0x8B, 0xD5, 0xF2, 0xBF, 0xDC, 0xA8, 0xF9, 0x19, 0xA0, 0x58, 0xD7, 0x31, 0x4B, 0xFC, 0x5C, 0xC9, 0xE9, 0xB1, 0xF8, 0xAA, 0xD8, 0x2E, 0x00, 0x4A, 0x35, 0x79, 0x9C, 0x0C, 0x26, 0x03, 0xAB, 0xEA, 0x3C, 0xF0, 0x82, 0xEA, 0xDD, 0xCA, 0x9B, 0x14, 0x66, 0x42, 0x8B, 0xD8, 0x72, 0xA1, 0x97, 0x8E, 0x42, 0xCF, 0xF1, 0x65, 0xFC, 0x4E, 0x24, 0x43, 0xB4, 0x8D, 0x75, 0xF2, 0x81, 0x15, 0x52, 0xA7, 0x5A, 0x76, 0xCE, 0x76, 0x86, 0x73, 0x11, 0x66, 0x23, 0xB7, 0x5F, 0x81, 0xCF, 0x13, 0xCA, 0xBD, 0x48, 0xCA, 0x81, 0x7F, 0x26, 0x4E, 0xE5, 0xD4, 0xDF, 0x73, 0x6C, 0xB0, 0x7C, 0x5A, 0x1B, 0xB1, 0x69, 0xE5, 0x89, 0xDB, 0xC4, 0xD6, 0x9E, 0xE3, 0x8E, 0x89, 0x9E, 0xAB, 0x9F, 0xFF, 0x6B, 0xB2, 0x09, 0xE0, 0x79, 0xA7, 0xC6, 0x2F, 0xC4, 0xA7, 0xDE, 0x8D, 0x6B, 0x8A, 0x8F, 0x7C, 0x9A, 0x58, 0x89, 0xB7, 0x66, 0x54, 0x4A, 0x02, 0x9B, 0x69, 0xE7, 0x3C, 0xC1, 0xF0, 0x8A, 0x53, 0xF6, 0xB1, 0x8A, 0xE0, 0x18, 0xEA, 0xA8, 0x97, 0x56, 0x02, 0xAD, 0x0F, 0x38, 0x7E, 0xDA, 0xF0, 0x0E, 0x06, 0x9A, 0x3B, 0x6D, 0x58, 0x79, 0x0A, 0x12, 0xCC, 0x1C, 0xE7, 0xC4, 0xBB, 0xC0, 0xD1, 0x66, 0x55, 0x4B, 0xE6, 0x6C, 0x83, 0x77, 0x8F, 0x6B, 0xFF, 0x8C, 0x59, 0x0A, 0xFF, 0x8E, 0x74, 0x9A, 0x38, 0x70, 0xAB, 0xE4, 0xF5, 0x5A, 0xD8, 0xF9, 0xA2, 0xD8, 0x6F, 0x7C, 0x80, 0x91, 0xD8, 0xFF, 0x64, 0xA7, 0x2C, 0x31, 0xD4, 0xFD, 0xE1, 0x22, 0x9F, 0x83, 0x00, 0xF7, 0x07, 0x78, 0x9F, 0x16, 0x0B, 0xE2, 0xBC, 0x4B, 0x8B, 0x57, 0x03, 0x3C, 0xFB, 0x88, 0xA7, 0x0C, 0x5B, 0xBB, 0x8A, 0xFB, 0xDC, 0x1B, 0x34, 0x01, 0xA3, 0x7D, 0xAB, 0x23, 0x2B, 0xE5, 0x40, 0xB5, 0xFD, 0xE3, 0xFF, 0x42, 0xD9, 0x21, 0x5E, 0xBB, 0x23, 0x66, 0x83, 0xE7, 0x5F, 0x8F, 0xDE, 0x03, 0x67, 0xC0, 0xF4, 0xE8, 0x96, 0x63, 0x7B, 0xB9, 0xC2, 0xBE, 0xD5, 0x6D, 0xFE, 0x75, 0xF9, 0x0C, 0x8F, 0x1D, 0xFD, 0xBC, 0x5A, 0xFF, 0x82, 0x3F, 0x0F, 0x87, 0x9E, 0xAC, 0xD1, 0x48, 0xF2, 0x62, 0x6A, 0x81, 0x18, 0x67, 0xA6, 0x8C, 0x3D, 0xA1, 0x9C, 0xF6, 0xA8, 0xD0, 0x3A, 0x38, 0x14, 0xE0, 0x7A, 0x93, 0x9E, 0x7E, 0xE2, 0xB9, 0xB0, 0xEE, 0x1D, 0xC5, 0xC3, 0xD9, 0x41, 0x46, 0xE2, 0x2E, 0x0B, 0xFF, 0x5A, 0xE2, 0x72, 0x4F, 0xBF, 0x1E, 0x62, 0x4C, 0x6D, 0xDF, 0x16, 0x60, 0x71, 0xA1, 0x57, 0x64, 0xF3, 0x46, 0x32, 0xCF, 0x04, 0x80, 0x51, 0xDB, 0x40, 0x2F, 0x2F, 0xB8, 0x62, 0xB8, 0x11, 0x58, 0xB7, 0xDE, 0xD4, 0xB0, 0xFF, 0x1C, 0xB0, 0x5B, 0x79, 0xE3, 0x4A, 0x5F, 0x3D, 0xA8, 0x39, 0xEA, 0xB7, 0xE5, 0xD0, 0xD2, 0xE0, 0xA8, 0xF5, 0x7A, 0xC7, 0x6E, 0x82, 0xCA, 0x49, 0x5A, 0xC7, 0xBB, 0x9F, 0x66, 0x8C, 0xA6, 0xAD, 0xAA, 0x83, 0x26, 0xA4, 0x5E, 0x7D, 0x1D, 0x61, 0x0A, 0x70, 0x3E, 0x27, 0x72, 0x98, 0x78, 0x24, 0x22, 0x7C, 0x91, 0xB8, 0x63, 0x48, 0x68, 0x77, 0x71, 0xD1, 0xA5, 0xDE, 0xCD, 0xC5, 0xF1, 0x4B, 0x7A, 0xDB, 0x8A, 0x43, 0xB6, 0x87, 0x26, 0x82, 0x41, 0xE9, 0x8E, 0x19, 0x03, 0x4E, 0x43, 0xCD, 0x59, 0xE0, 0xDF, 0xDC, 0x22, 0xC2, 0x7F, 0x0F, 0x84, 0x04, 0x0C, 0x38, 0x26, 0x33, 0xE9, 0x3E, 0x97, 0xB7, 0x7C, 0x6E, 0x76, 0x0B, 0x42, 0x66, 0xDD, 0x29, 0x6A, 0xD1, 0x0B, 0xBA, 0x0F, 0xFF, 0xF9, 0xC6, 0x67, 0x2E, 0x04, 0xE5, 0x6A, 0x75, 0xC6, 0x47, 0x08, 0xB6, 0xD3, 0xEA, 0xD3, 0x5A, 0x10, 0x34, 0x56, 0xF3, 0x19, 0x74, 0xF6, 0xD6, 0x9E, 0x97, 0x31, 0x17, 0xDE, 0x4D, 0x4E, 0x02, 0x38, 0x31, 0x7D, 0x7A, 0xAE, 0x98, 0xD1, 0x32, 0xBA, 0x95, 0x98, 0xE8, 0x36, 0x22, 0x55, 0x9C, 0x58, 0x71, 0xC8, 0x57, 0x71, 0x70, 0xFD, 0xB0, 0xB5, 0x62, 0x77, 0x9F, 0x09, 0x51, 0xA2, 0x47, 0xC2, 0x9C, 0x23, 0x60, 0x9A, 0x07, 0x33, 0x12, 0xCB, 0x44, 0x36, 0xD8, 0x02, 0x8B, 0xC2, 0x42, 0x0A, 0x1C, 0x6B, 0xC2, 0x92, 0x72, 0x29, 0x2B, 0x1D, 0xCE, 0xC0, 0x82, 0xFC, 0x5B, 0xC9, 0xD5, 0xB6, 0xC3, 0x8C, 0x86, 0x25, 0xBD, 0x9C, 0x66, 0xC1, 0x04, 0x6D, 0x8D, 0xAE, 0xDF, 0x00, 0x86, 0x6A, 0x3D, 0xE9, 0x96, 0x93, 0x60, 0x48, 0x94, 0xD6, 0x8F, 0x49, 0x01, 0xF9, 0xDB, 0xA6, 0x6D, 0xA6, 0x9E, 0x7E, 0xBC, 0xA0, 0x34, 0xC0, 0xC1, 0x35, 0x0B, 0xEB, 0x8A, 0x1B, 0xE3, 0x67, 0x06, 0x89, 0xB1, 0x36, 0xD1, 0x1D, 0xC5, 0xE1, 0x1D, 0xC6, 0xFE, 0x14, 0x7B, 0xF6, 0x8F, 0xA9, 0x2A, 0x7A, 0xDD, 0x88, 0xFF, 0x29, 0xBA, 0x55, 0x4A, 0x19, 0x2A, 0xCA, 0x23, 0x67, 0xD3, 0xC2, 0x3A, 0x0F, 0xF6, 0x58, 0x75, 0x3B, 0x6D, 0x9A, 0xAE, 0x79, 0x6B, 0x55, 0x5D, 0xFD, 0x4F, 0x90, 0x3A, 0xE9, 0xAA, 0xAB, 0xFE, 0x4B, 0xD8, 0x3C, 0xF9, 0x7B, 0x59, 0xE3, 0x17, 0xB0, 0xE2, 0x97, 0x9C, 0xBF, 0xC0, 0x8C, 0x2A, 0x5A, 0x1F, 0xE6, 0x15, 0x4C, 0x7B, 0xAD, 0xCD, 0xF5, 0xB7, 0x6B, 0x6A, 0x73, 0x21, 0x7B, 0x9B, 0xA3, 0xBB, 0x56, 0x5C, 0x07, 0x48, 0xEF, 0x91, 0xD8, 0x53, 0x4C, 0x78, 0x3D, 0x7F, 0x16, 0x10, 0x36, 0x51, 0x2F, 0x6E, 0x22, 0xC0, 0xA0, 0xD9, 0xF3, 0x13, 0x44, 0xFF, 0xAA, 0xEB, 0x3A, 0x88, 0xF5, 0xBA, 0xA4, 0x2D, 0x16, 0x4B, 0xFD, 0x38, 0xE0, 0x26, 0xC2, 0xB1, 0x0F, 0x36, 0x7F, 0xC4, 0x33, 0x43, 0x7A, 0x38, 0x88, 0xE7, 0x3B, 0xAC, 0x68, 0x28, 0x9E, 0xCA, 0x3C, 0x59, 0x57, 0x3C, 0xD2, 0xF6, 0xD3, 0x72, 0x31, 0x5D, 0x3A, 0x18, 0xC0, 0xBA, 0x3B, 0xCA, 0xB5, 0x06, 0xCA, 0xD5, 0x7D, 0xB4, 0x9D, 0x73, 0xD1, 0xFE, 0x84, 0x4D, 0x66, 0x00, 0x9B, 0xA6, 0xAF, 0x29, 0x02, 0x1D, 0xBF, 0xD9, 0x11, 0x89, 0xA5, 0x81, 0xD2, 0xA3, 0xE6, 0xAC, 0xF6, 0x01, 0xE8, 0x9D, 0x95, 0xDA, 0x43, 0xF4, 0x5C, 0x7C, 0xE8, 0x97, 0xE8, 0xF8, 0xDF, 0xD5, 0x6F, 0x22, 0xDC, 0xFA, 0xA3, 0xBC, 0x5F, 0xD9, 0xE1, 0x88, 0xF8, 0xAA, 0x45, 0xC8, 0x7D, 0xF1, 0xCD, 0xC3, 0x95, 0x0B, 0xC4, 0xD7, 0x8E, 0xA7, 0x87, 0x8A, 0xCF, 0x7C, 0x3E, 0xFD, 0x11, 0x6F, 0x2C, 0x55, 0xB9, 0x47, 0x47, 0x29, 0xF3, 0xF2, 0x94, 0x7B, 0xF3, 0xC5, 0xCC, 0xA2, 0x54, 0xF9, 0x88, 0xC4, 0x06, 0x9B, 0xCB, 0x80, 0xCE, 0x89, 0xC9, 0x51, 0x5B, 0x36, 0x00, 0x0C, 0xBD, 0x94, 0x55, 0x28, 0x76, 0xB6, 0x3B, 0x33, 0x49, 0x6C, 0x54, 0x7C, 0xBF, 0x91, 0x68, 0x1F, 0xF0, 0xA3, 0x8B, 0x88, 0xAC, 0x92, 0x2D, 0x0C, 0x42, 0xC4, 0x86, 0xAD, 0x40, 0x1C, 0xE0, 0xAC, 0x5C, 0x64, 0xAA, 0xDC, 0x35, 0x4A, 0xF9, 0xC2, 0x0C, 0xB1, 0xBF, 0xCA, 0xFD, 0x30, 0x49, 0xF9, 0x6E, 0xA2, 0xF2, 0xB9, 0xA5, 0x98, 0x62, 0x91, 0xD6, 0x07, 0x74, 0x3C, 0xE6, 0x07, 0xED, 0x36, 0x00, 0x18, 0xB3, 0x34, 0xAF, 0xB5, 0xD8, 0x27, 0xE1, 0xB2, 0x85, 0xD8, 0xCE, 0xF1, 0x5D, 0x7B, 0xB1, 0x8E, 0xC5, 0xAF, 0xB9, 0xA2, 0x99, 0xF3, 0x1F, 0x07, 0x30, 0x19, 0x86, 0x74, 0x2C, 0x0C, 0x40, 0x6C, 0x30, 0x55, 0xD9, 0x6B, 0xBD, 0x72, 0x54, 0x65, 0xE5, 0xBA, 0x50, 0x65, 0xF6, 0x3C, 0xE5, 0x2B, 0x4B, 0xF1, 0x8F, 0xAA, 0x0F, 0xF9, 0x79, 0x54, 0xF9, 0x3D, 0x5F, 0x4C, 0x2A, 0x93, 0xFD, 0x17, 0x78, 0x35, 0xAD, 0xE2, 0xC1, 0x52, 0x00, 0xE1, 0xF6, 0x57, 0x6F, 0x89, 0x81, 0x87, 0x9E, 0xE7, 0x8B, 0x8D, 0xA7, 0x7D, 0x4A, 0x12, 0xAB, 0x14, 0x7E, 0x7B, 0x2A, 0x42, 0x89, 0xA7, 0x5E, 0xA8, 0xD1, 0x73, 0xF8, 0xD3, 0xB2, 0x6A, 0x69, 0xF5, 0xFB, 0x1B, 0x5D, 0x57, 0x06, 0xDD, 0x53, 0x0E, 0xEE, 0xA4, 0x5C, 0x50, 0xA0, 0xDC, 0xF0, 0x4F, 0xB9, 0x7F, 0xBA, 0xF2, 0xD9, 0x3D, 0xE5, 0xFB, 0xD2, 0xCA, 0xAF, 0xFA, 0x50, 0x1C, 0xC6, 0x17, 0xD0, 0x2C, 0x06, 0xCB, 0x68, 0xF8, 0x7E, 0x0A, 0x1C, 0x1A, 0xC0, 0xB7, 0x68, 0x70, 0xB3, 0x85, 0x2F, 0x3B, 0xA0, 0xA5, 0x05, 0x7C, 0x76, 0x83, 0x4E, 0x7B, 0xE1, 0xE3, 0x36, 0xE8, 0x0B, 0x7C, 0xAA, 0x03, 0x63, 0x7F, 0xC3, 0xEB, 0x1B, 0xB0, 0xB0, 0x33, 0x3C, 0x3D, 0x0C, 0x9B, 0x7F, 0xE9, 0xD6, 0x2F, 0x8A, 0x85, 0xBD, 0x31, 0x70, 0xAD, 0x09, 0x9C, 0xD7, 0x87, 0x53, 0x35, 0xE0, 0x41, 0x65, 0xC8, 0x0D, 0x87, 0xB7, 0xF2, 0x2E, 0xB2, 0x82, 0xBF, 0x95, 0x61, 0xEB, 0x5F, 0xB5, 0xCF, 0x6E, 0xA9, 0xAF, 0xFC, 0x16, 0x01, 0x00, 0xC5, 0x85, 0x60, 0x78, 0x18, 0xBE, 0x7B, 0x40, 0x85, 0x8F, 0x50, 0xB2, 0x06, 0x6A, 0x2F, 0x81, 0xAF, 0x59, 0xE0, 0x7E, 0x05, 0xBE, 0x2C, 0x81, 0x0E, 0x09, 0xF0, 0xE9, 0x01, 0xF4, 0xFA, 0x07, 0x5F, 0x66, 0xC1, 0x98, 0x73, 0xF0, 0x66, 0x1C, 0x2C, 0x2A, 0x0F, 0x4F, 0xCB, 0xC2, 0xD6, 0xDF, 0xBA, 0x1D, 0x0A, 0x7F, 0x41, 0xDE, 0x5C, 0xB8, 0x74, 0x07, 0xAE, 0xA6, 0x40, 0x7E, 0x04, 0x3C, 0xCB, 0x84, 0xF4, 0x2F, 0x50, 0x32, 0x18, 0x36, 0x75, 0x54, 0xB9, 0xC9, 0xE1, 0xCA, 0x55, 0x03, 0x95, 0xDF, 0x6F, 0xA2, 0x8E, 0xC3, 0x41, 0xF9, 0xAD, 0x29, 0x58, 0xAC, 0x83, 0x1F, 0x9D, 0xA0, 0xDA, 0x0D, 0xF8, 0x7E, 0x1D, 0xEA, 0x2D, 0x80, 0xAF, 0xD9, 0xE0, 0xD5, 0x48, 0x33, 0x13, 0xBA, 0x9F, 0x87, 0x6F, 0xDF, 0x61, 0x74, 0x2E, 0xBC, 0x32, 0x80, 0x85, 0x85, 0x70, 0x7F, 0x1E, 0x6C, 0xBD, 0xCF, 0xBE, 0x9B, 0x76, 0x70, 0xF0, 0x2F, 0x9C, 0x6B, 0x08, 0x77, 0xDF, 0xC1, 0xBE, 0xCF, 0xF0, 0xBE, 0x0D, 0x6C, 0x57, 0x75, 0x07, 0xCB, 0x1B, 0x2A, 0x97, 0x74, 0x57, 0x2E, 0x7C, 0xA6, 0xFC, 0x31, 0x1C, 0x00, 0xBE, 0xAF, 0x54, 0x16, 0x5B, 0x2B, 0x7F, 0x0C, 0x06, 0xEB, 0x61, 0xF0, 0xFD, 0x0F, 0xD4, 0x6E, 0x00, 0x1F, 0xD7, 0x42, 0xF3, 0xA5, 0xF0, 0xCA, 0x02, 0x02, 0x47, 0xC1, 0xBD, 0x76, 0x30, 0xE8, 0x1E, 0xDC, 0xE8, 0x0E, 0x53, 0xA3, 0xE0, 0xDC, 0x12, 0x58, 0x65, 0x04, 0x47, 0x2B, 0xC1, 0xBE, 0x4A, 0x70, 0xB0, 0x03, 0xDC, 0xFD, 0x06, 0x7B, 0x3C, 0xE0, 0xDB, 0x36, 0x58, 0xDD, 0x49, 0xE5, 0x2D, 0x28, 0x50, 0xC6, 0x6F, 0x43, 0x69, 0xA0, 0xFC, 0xAA, 0x6F, 0xF2, 0x08, 0x34, 0xCD, 0xF5, 0xAC, 0xC4, 0xF7, 0xBB, 0x4D, 0x5D, 0xC4, 0xE7, 0xB3, 0x41, 0xFF, 0x3F, 0xE3, 0x49, 0xCF, 0xCB, 0x41, 0x45, 0x0C, 0x77, 0x3D, 0x6A, 0x04, 0xF5, 0x5C, 0xF5, 0xCE, 0xDE, 0x49, 0x05, 0x6F, 0x7F, 0xB8, 0x58, 0x02, 0x3D, 0x9F, 0xC2, 0x91, 0x87, 0x30, 0xB2, 0x39, 0x64, 0xDF, 0x86, 0xF9, 0xFB, 0x21, 0x6D, 0x13, 0xA4, 0x07, 0xC1, 0xEE, 0xFB, 0x50, 0xB4, 0x00, 0xB6, 0xDA, 0xC0, 0x8F, 0x03, 0x2C, 0x4B, 0x5A, 0x26, 0x79, 0x46, 0xFF, 0xE2, 0x26, 0x88, 0xD6, 0x81, 0xD3, 0x5D, 0xC5, 0x4A, 0x4B, 0xA6, 0xCF, 0x11, 0xAB, 0x0C, 0x78, 0x33, 0xB2, 0xB2, 0xAA, 0x7B, 0xEE, 0x56, 0x88, 0x14, 0x9F, 0x5E, 0xAE, 0xE0, 0x29, 0x16, 0xDD, 0xB0, 0x95, 0x8F, 0x3B, 0x5E, 0xAF, 0x00, 0x46, 0x7F, 0x4B, 0xC7, 0x5E, 0x29, 0x05, 0x95, 0x5F, 0x9B, 0x19, 0x9F, 0x36, 0x81, 0x46, 0x8B, 0x0D, 0xDE, 0xE7, 0xBE, 0x82, 0x4E, 0x76, 0x90, 0xBA, 0x11, 0x06, 0x3D, 0x85, 0x4D, 0xFB, 0x60, 0x56, 0x4B, 0x58, 0xBF, 0x14, 0xD2, 0xFC, 0x61, 0x75, 0x57, 0x28, 0x2A, 0xAF, 0x7B, 0x20, 0xFE, 0x0F, 0x94, 0x38, 0x96, 0xBF, 0x3D, 0xE3, 0x9F, 0xE4, 0x39, 0x5D, 0x1C, 0x9D, 0x2D, 0x36, 0x5E, 0x32, 0xB2, 0xA3, 0xD8, 0x6C, 0x6D, 0xF8, 0x4F, 0xB1, 0xC5, 0xC9, 0x87, 0xFF, 0x9C, 0xFB, 0x02, 0x3C, 0x8C, 0xA8, 0x65, 0x28, 0x16, 0x86, 0x39, 0x55, 0x14, 0xAF, 0x45, 0xD7, 0xE8, 0x20, 0x9E, 0xDA, 0x65, 0x67, 0x0F, 0xFA, 0x76, 0x79, 0xC1, 0xA0, 0x37, 0xA9, 0xEC, 0xCE, 0x74, 0x67, 0x99, 0x4E, 0x99, 0x8C, 0x5C, 0xD3, 0x07, 0x9A, 0xF4, 0x35, 0xA9, 0x30, 0xBF, 0x09, 0x04, 0x4D, 0xB7, 0x58, 0x35, 0xE3, 0x20, 0xC4, 0xCC, 0xB1, 0x36, 0x9D, 0xBE, 0x11, 0x76, 0x75, 0x2F, 0x7D, 0x2E, 0x66, 0x36, 0x14, 0x5E, 0xB0, 0x5A, 0x3B, 0x76, 0x35, 0x94, 0xF8, 0x34, 0x3C, 0xDD, 0xEF, 0xB6, 0xE4, 0x75, 0x72, 0xF1, 0x35, 0x16, 0x83, 0x8D, 0xDA, 0x8D, 0x17, 0xBB, 0x19, 0x78, 0x0E, 0x11, 0xBB, 0xE7, 0xDF, 0xF9, 0xD3, 0xF2, 0x14, 0xC0, 0xCD, 0xFF, 0x5A, 0xBA, 0x88, 0x17, 0x4D, 0x9B, 0xE6, 0x89, 0x47, 0xCB, 0xD4, 0x7F, 0x2D, 0xE6, 0x54, 0x71, 0xF5, 0x17, 0x53, 0x9E, 0x57, 0x1F, 0x28, 0xC6, 0x3E, 0x2B, 0xD3, 0x1C, 0x4A, 0xBF, 0x0A, 0x7B, 0x0A, 0xA5, 0x67, 0xB9, 0xF8, 0xF6, 0x09, 0x80, 0xA6, 0xDB, 0xDC, 0xCC, 0xBA, 0xDF, 0x81, 0x88, 0xBD, 0x6E, 0xB7, 0x3A, 0xF7, 0x83, 0x8D, 0x0D, 0xEB, 0x76, 0xF1, 0x6B, 0x06, 0x97, 0x73, 0x1A, 0x1C, 0x6F, 0x73, 0x18, 0xBE, 0x05, 0x79, 0xB7, 0xA8, 0x3A, 0x4E, 0xF2, 0x86, 0xD6, 0x04, 0x71, 0xDC, 0x6B, 0x94, 0x65, 0x94, 0xA3, 0x1E, 0x5F, 0x7D, 0xD7, 0x61, 0x21, 0xC0, 0xA5, 0xC1, 0x1D, 0x4E, 0x88, 0x47, 0xAB, 0x77, 0x58, 0x22, 0xA6, 0x37, 0xF0, 0x30, 0x10, 0x57, 0x6D, 0x68, 0x6E, 0x2B, 0x4E, 0x1B, 0xD5, 0x7C, 0xBE, 0x18, 0xD6, 0xBE, 0xD9, 0x56, 0xD0, 0xF7, 0x0B, 0xAC, 0x58, 0xBF, 0x21, 0x54, 0x5B, 0x09, 0x00, 0xBD, 0xEB, 0x82, 0x51, 0xB3, 0xF6, 0xFA, 0x41, 0x5D, 0xC1, 0x2A, 0x63, 0x71, 0x61, 0xC7, 0x42, 0xB0, 0x76, 0x38, 0x5C, 0xAD, 0xFD, 0x51, 0xA8, 0xFC, 0xE6, 0x7D, 0x19, 0xDF, 0x52, 0x50, 0xD3, 0x5E, 0xBB, 0xDF, 0xB7, 0x75, 0x87, 0xD6, 0xD4, 0x7A, 0x91, 0x03, 0x03, 0xA1, 0x72, 0xB1, 0x76, 0x5C, 0xBD, 0x54, 0x1D, 0x34, 0x28, 0xE6, 0xCC, 0xB5, 0xDE, 0xBF, 0x00, 0x8E, 0x57, 0xE9, 0xE7, 0x26, 0x66, 0x55, 0xEB, 0x99, 0x27, 0xAE, 0x1E, 0x1C, 0x78, 0x45, 0x9C, 0x1A, 0xE9, 0x17, 0x20, 0x0E, 0xEC, 0xD5, 0xAE, 0xB7, 0x18, 0xF4, 0xBD, 0xE3, 0x7C, 0x60, 0xAC, 0x47, 0x4C, 0x97, 0x78, 0xB0, 0xBE, 0x03, 0x9E, 0x91, 0xC6, 0x16, 0x2D, 0x8F, 0x43, 0xE0, 0x98, 0x20, 0xFD, 0xBA, 0x15, 0x34, 0x33, 0x16, 0x9F, 0xAA, 0xD5, 0x0A, 0xBA, 0xDA, 0x1C, 0x3B, 0x53, 0xCB, 0x1C, 0x3A, 0xDF, 0xFD, 0xE8, 0xE9, 0x3A, 0x08, 0xFC, 0x1D, 0xB4, 0x39, 0x50, 0xAC, 0xE6, 0x6D, 0xAD, 0x13, 0xBF, 0x0B, 0x3A, 0x6A, 0x7D, 0xA0, 0x8E, 0x1D, 0xC1, 0x57, 0xEB, 0xC9, 0xFA, 0x3E, 0x3D, 0xF6, 0x31, 0xD2, 0x01, 0xE0, 0xD0, 0xD2, 0xD1, 0x87, 0xC5, 0x2D, 0xB9, 0x83, 0x17, 0x8B, 0x73, 0x5E, 0x85, 0xE8, 0x89, 0x11, 0xE3, 0x82, 0xCF, 0x88, 0xDD, 0x1E, 0x76, 0xBD, 0xA2, 0xF6, 0x9B, 0x3E, 0x5F, 0x45, 0xF7, 0xE4, 0x31, 0xCD, 0x45, 0x18, 0x15, 0x60, 0xB6, 0xD7, 0xFE, 0x14, 0xC4, 0x0C, 0xF4, 0x5D, 0x60, 0x55, 0x05, 0x26, 0x15, 0xCC, 0xCB, 0x2D, 0xF5, 0x05, 0x62, 0xAE, 0x1F, 0x7E, 0x60, 0xDE, 0x04, 0x26, 0x36, 0x7E, 0x93, 0x57, 0x6A, 0x30, 0x8C, 0xAE, 0xA8, 0xED, 0x48, 0xB7, 0x60, 0xA8, 0x76, 0x3D, 0x6E, 0xF5, 0x86, 0x10, 0x12, 0xAB, 0xF5, 0x63, 0xAA, 0x69, 0xDE, 0xD4, 0x3C, 0x75, 0x38, 0x61, 0x6A, 0x1F, 0x80, 0xCC, 0x73, 0x53, 0x3F, 0x8A, 0x89, 0x0F, 0xA3, 0x4A, 0xC4, 0xE8, 0xB7, 0x43, 0xB7, 0x88, 0xFD, 0xCA, 0x87, 0x0E, 0x04, 0xDD, 0x14, 0xFF, 0x84, 0x21, 0xAF, 0x01, 0x1A, 0x8E, 0x8C, 0xBE, 0x2F, 0x96, 0x7B, 0xBD, 0xA0, 0xB2, 0x08, 0xCB, 0x5F, 0x56, 0x58, 0xAB, 0x33, 0x18, 0xD6, 0x04, 0x74, 0xAC, 0x0C, 0x90, 0x14, 0x3C, 0xED, 0xA3, 0xB8, 0x32, 0x3F, 0xA7, 0xB5, 0xB8, 0xFC, 0xEE, 0x7F, 0x5F, 0xC4, 0x78, 0xED, 0xF1, 0x10, 0x67, 0x18, 0x6B, 0xE7, 0x84, 0xBF, 0x60, 0xE2, 0x5E, 0xED, 0x9C, 0x36, 0x05, 0xA2, 0x4D, 0xB5, 0xF9, 0xFA, 0xC9, 0x7D, 0x13, 0xE7, 0x35, 0x01, 0x48, 0xA9, 0x36, 0xC7, 0x42, 0x9C, 0x73, 0x75, 0x72, 0x39, 0x71, 0xC4, 0x9E, 0x71, 0xED, 0xC5, 0x9E, 0xCE, 0xD1, 0xF6, 0xA2, 0x47, 0xFE, 0xDC, 0x64, 0xB1, 0xDA, 0xC0, 0xB5, 0xA6, 0x22, 0x6C, 0xEB, 0xA3, 0xDC, 0xB5, 0xAF, 0xFA, 0x74, 0x31, 0xF3, 0x72, 0xD7, 0x77, 0xE2, 0x5E, 0xC3, 0x98, 0xD5, 0x62, 0xCE, 0x96, 0x9C, 0x18, 0x31, 0xAB, 0xE6, 0x9D, 0x48, 0x71, 0xA7, 0xDA, 0x67, 0x59, 0x39, 0x48, 0xB9, 0x64, 0x91, 0x72, 0xB1, 0xA7, 0x98, 0xD6, 0x68, 0xF9, 0x30, 0x80, 0xA4, 0x71, 0x4B, 0x32, 0xC4, 0x98, 0xCB, 0x73, 0x36, 0x89, 0x83, 0x7D, 0x17, 0x44, 0x8B, 0x01, 0x56, 0x6B, 0xDF, 0x8B, 0x0D, 0x6E, 0xA5, 0x37, 0x15, 0xCB, 0x7E, 0xCC, 0xD7, 0x15, 0xE1, 0xF4, 0x52, 0xBD, 0xEB, 0xE2, 0xE5, 0x4F, 0xF5, 0x2C, 0xC5, 0x5B, 0xFE, 0x21, 0x77, 0xC4, 0x3B, 0x47, 0x16, 0x2E, 0x14, 0x0B, 0xEF, 0x1D, 0x2A, 0x10, 0x0B, 0x36, 0xBE, 0x36, 0x17, 0x2F, 0x57, 0x50, 0xB9, 0x07, 0x02, 0x94, 0x7B, 0x5E, 0x2B, 0x77, 0x35, 0x11, 0xB7, 0x7E, 0x5E, 0x7F, 0x01, 0x60, 0xFE, 0xDE, 0x95, 0x57, 0xC5, 0xA8, 0x17, 0xAB, 0xE7, 0x8B, 0x21, 0x65, 0x76, 0xFA, 0x88, 0x5E, 0xBF, 0x0E, 0xD5, 0x11, 0x6B, 0x0F, 0xBF, 0xB6, 0x53, 0xB4, 0xA8, 0xF8, 0xB8, 0xBB, 0x08, 0xDF, 0x7F, 0x57, 0x28, 0x40, 0xCD, 0x7F, 0x96, 0x29, 0x43, 0xDF, 0x2A, 0x97, 0xCF, 0x50, 0xA6, 0x55, 0x52, 0xBE, 0x6F, 0x8F, 0xA8, 0xEA, 0x40, 0x3E, 0xDF, 0x55, 0xDE, 0x1B, 0xAE, 0xBC, 0xB5, 0x4F, 0x5C, 0xBD, 0x31, 0xA5, 0x04, 0x60, 0x6A, 0xD9, 0xCD, 0x55, 0xC5, 0x61, 0xB9, 0x19, 0x67, 0xC5, 0x2E, 0xF5, 0x4E, 0x7D, 0x16, 0x9B, 0x47, 0x3F, 0x3C, 0x2A, 0x56, 0xCB, 0x78, 0xFB, 0x51, 0x84, 0xB7, 0xDE, 0x74, 0x35, 0xD6, 0x83, 0xAF, 0x73, 0x1C, 0x4E, 0x02, 0x94, 0x8C, 0xF6, 0x7E, 0x2E, 0xFE, 0x7E, 0xDF, 0xD7, 0x5A, 0xFC, 0xE3, 0x14, 0xA5, 0xF2, 0x27, 0x6C, 0x08, 0x46, 0xF5, 0x5F, 0x3E, 0x28, 0xD5, 0xF1, 0xFC, 0x0A, 0x57, 0xF9, 0x5F, 0xEF, 0x28, 0xBF, 0xD4, 0x11, 0x17, 0x9D, 0xDB, 0xDD, 0x1A, 0x60, 0xDC, 0x94, 0xBD, 0x71, 0x62, 0xBF, 0xD1, 0xE7, 0x7B, 0x89, 0x3E, 0xA5, 0x8B, 0x0A, 0x45, 0xE7, 0x6E, 0x4F, 0xE7, 0x8A, 0x16, 0xC7, 0x5F, 0xB4, 0x03, 0xFD, 0x66, 0xF0, 0x3A, 0xBD, 0x74, 0x4B, 0x80, 0x4F, 0x27, 0x9C, 0xBC, 0xC5, 0xAF, 0xCF, 0xBD, 0xCF, 0x88, 0x25, 0xE7, 0x7B, 0x5E, 0x10, 0x7F, 0xD5, 0x1E, 0x76, 0x08, 0xB1, 0x72, 0xFC, 0x33, 0xF1, 0x8F, 0xDD, 0xA6, 0x6C, 0xC4, 0xA4, 0xE3, 0x4F, 0xC4, 0xBF, 0x11, 0x6F, 0x2C, 0xC4, 0xDF, 0x93, 0x7F, 0x4F, 0x46, 0x5C, 0xFF, 0xE7, 0x25, 0x3C, 0xF9, 0x03, 0x00, 0x8F, 0x57, 0x81, 0xE9, 0x6D, 0xCD, 0x95, 0x60, 0xB7, 0x1B, 0x1E, 0x74, 0x03, 0xA7, 0x7E, 0x50, 0x14, 0x08, 0x8D, 0x96, 0xC3, 0x9D, 0xDF, 0xE0, 0x59, 0x0C, 0x37, 0xD7, 0x40, 0xE7, 0x6B, 0x70, 0x3D, 0x1F, 0x06, 0xBA, 0xC3, 0x95, 0xD1, 0x10, 0x1D, 0x0F, 0x17, 0x27, 0x43, 0x7C, 0x3A, 0x9C, 0xDE, 0x0D, 0x5B, 0x0B, 0xE0, 0xE8, 0x24, 0x38, 0x9C, 0x06, 0xB9, 0xC5, 0x70, 0xFD, 0x3C, 0xEC, 0x5E, 0x05, 0x4F, 0xE6, 0xC3, 0xC6, 0x74, 0xF8, 0xBC, 0x18, 0x92, 0xA2, 0xE1, 0xF7, 0x54, 0x58, 0x11, 0x01, 0x7F, 0xE3, 0xE1, 0xBF, 0x4C, 0x00, 0x78, 0x34, 0x4D, 0xA6, 0xA2, 0xF0, 0x58, 0x0F, 0xCA, 0x0C, 0x80, 0x07, 0xCB, 0xC1, 0x61, 0x07, 0xDC, 0xEB, 0x0B, 0x75, 0x0F, 0x43, 0xC1, 0x59, 0x68, 0x5D, 0x1D, 0x6E, 0x75, 0x81, 0x80, 0x5A, 0x70, 0x3D, 0x03, 0xFA, 0xD9, 0xC1, 0x95, 0x5D, 0x10, 0xBD, 0x00, 0x2E, 0x4E, 0x85, 0x65, 0xEB, 0xE1, 0x94, 0x0F, 0xEC, 0xAA, 0x0C, 0x47, 0x82, 0xE0, 0x54, 0x2F, 0xC8, 0xBE, 0x0C, 0xF7, 0x02, 0x60, 0x6B, 0x4B, 0x78, 0x7B, 0x1B, 0x92, 0x4A, 0xE0, 0xF7, 0x77, 0x58, 0x52, 0x0B, 0x55, 0x7F, 0x6C, 0x51, 0xBE, 0xDC, 0x04, 0x00, 0x4F, 0x63, 0x95, 0x8F, 0xBA, 0x82, 0x91, 0x31, 0x3C, 0x8E, 0x07, 0xBB, 0x32, 0x70, 0xFF, 0x10, 0xD4, 0x2A, 0x82, 0xBB, 0xA9, 0xD0, 0x6C, 0x1A, 0xDC, 0x89, 0x02, 0xBF, 0x1D, 0x70, 0xAB, 0x19, 0xF4, 0xED, 0x0A, 0x57, 0x1B, 0xC1, 0xC4, 0x4A, 0x70, 0xD6, 0x1D, 0x96, 0x35, 0x86, 0xA3, 0x1F, 0x20, 0xFD, 0x14, 0x1C, 0x78, 0x09, 0x57, 0x6D, 0x61, 0xD7, 0x2C, 0x78, 0x56, 0x17, 0x92, 0x5B, 0xC3, 0xF7, 0xA6, 0xB0, 0xF0, 0x9B, 0xCA, 0x9D, 0x5E, 0x55, 0x39, 0x73, 0xAB, 0xF2, 0xED, 0x32, 0x00, 0x78, 0x19, 0xAC, 0x7C, 0xB2, 0x0E, 0x65, 0x16, 0x98, 0x8D, 0x83, 0x47, 0x4D, 0xC0, 0xDE, 0x16, 0x0A, 0x06, 0x42, 0xFD, 0xB1, 0x20, 0x55, 0xBC, 0x57, 0x17, 0x38, 0x31, 0x01, 0x82, 0xEB, 0x42, 0xEE, 0x3E, 0x08, 0x33, 0x02, 0xE9, 0xBA, 0xCE, 0xB0, 0x84, 0xDD, 0x6E, 0xB0, 0x79, 0x20, 0xEC, 0xB8, 0x04, 0xA7, 0xD3, 0x61, 0xE3, 0x31, 0x78, 0xB9, 0x0E, 0x96, 0x0D, 0x55, 0x79, 0x33, 0xAC, 0x94, 0xB3, 0xE7, 0x2A, 0xE3, 0x02, 0x94, 0xAF, 0x1D, 0x00, 0xE0, 0xD5, 0x4D, 0xE5, 0x03, 0x3B, 0x65, 0xC1, 0x28, 0xD0, 0x5D, 0x0A, 0x37, 0x36, 0x82, 0x4D, 0x00, 0x5C, 0xFC, 0x06, 0xB5, 0x06, 0xC3, 0x91, 0xC6, 0xD0, 0xE4, 0x32, 0x64, 0x34, 0x03, 0xDF, 0xE9, 0xB0, 0xE9, 0x36, 0x84, 0x14, 0xC1, 0xAA, 0xF6, 0x30, 0x7A, 0x3D, 0x24, 0xC6, 0x41, 0xE2, 0x36, 0x48, 0x9C, 0x07, 0xF9, 0x17, 0x61, 0xE5, 0x1B, 0x78, 0xF5, 0x03, 0x16, 0xFD, 0x90, 0x3C, 0x03, 0xB3, 0xE9, 0x53, 0x44, 0xA3, 0xDD, 0xD1, 0x9E, 0xA2, 0xCD, 0x96, 0xF1, 0x09, 0x62, 0x85, 0xAA, 0x8F, 0xC2, 0xCD, 0x8F, 0x01, 0xDC, 0x3F, 0x6F, 0x38, 0x44, 0xBC, 0xFD, 0xCF, 0x64, 0xA5, 0x78, 0xF1, 0xB8, 0x49, 0x8A, 0x78, 0xCC, 0x14, 0x0C, 0xC2, 0x0D, 0x06, 0x1D, 0x5C, 0x0C, 0xE5, 0x5D, 0x74, 0xDB, 0xA5, 0x37, 0x00, 0x17, 0x6B, 0x48, 0xEE, 0x0A, 0xAD, 0x06, 0x80, 0xAC, 0xC6, 0xFE, 0x69, 0x30, 0xF3, 0x39, 0x84, 0x8D, 0x87, 0x69, 0x87, 0x20, 0x61, 0x15, 0xC4, 0xF9, 0x40, 0xFE, 0x6E, 0x88, 0x6D, 0x08, 0x2F, 0xC7, 0x98, 0xD5, 0x9C, 0x68, 0x2E, 0x79, 0xF6, 0xED, 0x22, 0xCB, 0x8B, 0x35, 0xD7, 0x0E, 0x9A, 0x26, 0xD6, 0xFD, 0xD5, 0xDF, 0x41, 0xAC, 0x7F, 0xBB, 0x70, 0x99, 0x3D, 0x00, 0x77, 0xD6, 0x57, 0x6D, 0x2C, 0x5E, 0x6A, 0x54, 0xC9, 0x49, 0x3C, 0xEA, 0x59, 0x2E, 0x4D, 0xCC, 0xB9, 0x57, 0xA6, 0xB1, 0xB8, 0xB5, 0x37, 0x80, 0xF1, 0x8F, 0x55, 0xBA, 0x60, 0x73, 0x13, 0xA6, 0xBB, 0x80, 0xCB, 0x2F, 0x99, 0xBF, 0x43, 0xDB, 0x8B, 0x06, 0x7D, 0x46, 0x9A, 0xC1, 0x80, 0xE3, 0x46, 0xB7, 0x46, 0xB8, 0xC2, 0x52, 0x7D, 0xC3, 0xDC, 0x88, 0x7F, 0x70, 0x38, 0xDF, 0xA0, 0xCB, 0x30, 0x47, 0x78, 0xF1, 0xD1, 0xC6, 0x2F, 0x64, 0x35, 0x52, 0x7F, 0x65, 0x7A, 0xFD, 0x14, 0xBD, 0x6E, 0xB7, 0x0D, 0x13, 0xDB, 0x86, 0xB7, 0x31, 0x11, 0x7D, 0x3C, 0xAE, 0xA7, 0xD4, 0xF9, 0x04, 0x70, 0xB1, 0x5C, 0x3D, 0x2B, 0x31, 0x7F, 0x9D, 0xF3, 0x37, 0x31, 0x7B, 0x71, 0x4D, 0x7B, 0x71, 0x4B, 0xB7, 0xCA, 0xE1, 0xE2, 0x62, 0x5B, 0xDB, 0x73, 0xE2, 0xB8, 0xC5, 0xA5, 0x6C, 0x40, 0xB7, 0x49, 0x9F, 0x5E, 0x60, 0x11, 0x5D, 0xDE, 0xAC, 0x73, 0x01, 0xD4, 0x1D, 0x58, 0x65, 0x89, 0x5F, 0x23, 0xE8, 0xE1, 0xEF, 0xF0, 0xC3, 0xBB, 0x08, 0xE6, 0x3E, 0xAD, 0xEE, 0xEC, 0xD5, 0x06, 0xF6, 0x9E, 0xB5, 0x2F, 0x68, 0xED, 0x09, 0x4F, 0x92, 0x6B, 0x24, 0xD8, 0x77, 0x95, 0xBC, 0xF6, 0x9F, 0x40, 0x1C, 0x30, 0x49, 0x19, 0x1A, 0xA8, 0xEC, 0x53, 0xF3, 0xEC, 0xAA, 0x36, 0x41, 0x00, 0x27, 0x1D, 0x3D, 0x7A, 0x88, 0x7B, 0xF7, 0x37, 0xFF, 0x20, 0x6E, 0x5E, 0x5D, 0xFF, 0x81, 0x38, 0x2F, 0xA5, 0xEE, 0x2F, 0x71, 0xD4, 0x48, 0xD7, 0xF7, 0x62, 0xAF, 0x03, 0x6E, 0x7A, 0xA2, 0xF7, 0xBF, 0x5A, 0x79, 0x60, 0xF9, 0x11, 0x00, 0x7C, 0x0A, 0xC0, 0xE8, 0xBF, 0xE6, 0x21, 0x1E, 0x67, 0xC0, 0xEA, 0xD3, 0x84, 0x8E, 0x2D, 0xEA, 0x40, 0xD9, 0xDF, 0xBB, 0x22, 0xDD, 0x0D, 0xC1, 0x76, 0x77, 0xA1, 0x5F, 0xC3, 0x11, 0x50, 0x5D, 0xEB, 0x37, 0xB8, 0xD7, 0xD7, 0xFD, 0x53, 0xCB, 0x4D, 0xEB, 0xCB, 0xFD, 0x02, 0x87, 0x40, 0x6D, 0x2E, 0x34, 0x11, 0xEC, 0xD1, 0x9C, 0x9B, 0xFF, 0x2F, 0x60, 0x16, 0xC0, 0x11, 0xFF, 0xAE, 0xBE, 0xE2, 0xF6, 0xEA, 0xBE, 0x77, 0xC4, 0x85, 0x8F, 0xBC, 0x4E, 0x88, 0x51, 0x27, 0x5B, 0x46, 0x8B, 0x3D, 0x7A, 0x37, 0x73, 0x15, 0x7D, 0xF2, 0x9A, 0x1E, 0x11, 0xDD, 0x07, 0x78, 0xC8, 0xFA, 0x3A, 0x03, 0x9A, 0x35, 0xD3, 0x5F, 0xE7, 0x5A, 0x0E, 0xBC, 0xAF, 0xF8, 0x8C, 0xAF, 0x9A, 0x08, 0x3E, 0xFA, 0x93, 0x86, 0x94, 0xB7, 0x87, 0xF6, 0xF1, 0x69, 0x75, 0xCA, 0xCD, 0x85, 0x0E, 0x63, 0xEE, 0xDD, 0xB3, 0x19, 0x01, 0xED, 0xD3, 0xB4, 0xEB, 0xE6, 0x0A, 0xA0, 0xAD, 0xCC, 0x83, 0x62, 0xA1, 0xB5, 0x56, 0x97, 0x35, 0xB8, 0x05, 0xAD, 0xBA, 0x69, 0x96, 0x3B, 0x70, 0xBA, 0xBF, 0x19, 0x40, 0x76, 0xC0, 0xC0, 0x2D, 0x62, 0xD2, 0xC9, 0x1E, 0xBF, 0xC4, 0xC9, 0x2B, 0x02, 0xBA, 0x8A, 0xFD, 0xFE, 0x6B, 0x3F, 0x49, 0xF4, 0x0B, 0xF1, 0xB2, 0x12, 0x9B, 0x1E, 0xF2, 0x0D, 0x15, 0xAB, 0xC7, 0xF5, 0x3E, 0x2B, 0xC2, 0x80, 0x3A, 0xA5, 0x6E, 0x9A, 0x47, 0xC2, 0xF0, 0x7B, 0xAD, 0xD3, 0x39, 0x05, 0x61, 0x75, 0xA2, 0x82, 0x01, 0xC2, 0x33, 0xB7, 0x8F, 0x17, 0xC3, 0xF4, 0x6E, 0xB9, 0x8A, 0x23, 0xAC, 0xD4, 0x7E, 0xD2, 0x3F, 0x47, 0x7B, 0xDF, 0x24, 0x43, 0x17, 0x5D, 0x6D, 0xFE, 0xF3, 0x4D, 0x53, 0xEA, 0x23, 0xB3, 0xEC, 0xA3, 0x91, 0xB7, 0x00, 0xB6, 0xBF, 0x1F, 0xF9, 0x5A, 0x5C, 0x50, 0x73, 0x60, 0x05, 0x31, 0xF2, 0x46, 0xAF, 0x4D, 0x62, 0xB7, 0x1E, 0x41, 0xBD, 0x45, 0xAF, 0x91, 0xDD, 0x9C, 0x80, 0xD1, 0xCE, 0x2F, 0x07, 0xE7, 0x03, 0x40, 0xD4, 0x0F, 0x30, 0xF4, 0x81, 0x18, 0x67, 0xBB, 0x7C, 0x80, 0xD9, 0xB7, 0xBC, 0x7D, 0xC4, 0xD8, 0x2E, 0xA3, 0x9F, 0x8A, 0x71, 0xF5, 0xB6, 0xE4, 0x8B, 0x53, 0x07, 0x9E, 0xD9, 0x28, 0xCE, 0xB2, 0x53, 0xC7, 0x31, 0xAE, 0xAF, 0x72, 0x78, 0xB8, 0x32, 0xC2, 0x49, 0xDC, 0x5D, 0x3A, 0x26, 0x0A, 0x60, 0x8D, 0xCD, 0xA4, 0xEE, 0xE2, 0x14, 0x8F, 0x11, 0x2F, 0xC4, 0x81, 0xE1, 0xC3, 0xBA, 0x8A, 0x01, 0x11, 0x11, 0xA1, 0x62, 0xA3, 0xC2, 0x89, 0x5D, 0x45, 0x9B, 0x9D, 0xF3, 0xD3, 0x44, 0x58, 0x56, 0xCE, 0x22, 0x4B, 0x5C, 0x95, 0x5E, 0x3B, 0x49, 0xDC, 0x14, 0xE7, 0x3B, 0x43, 0x4C, 0x79, 0x1D, 0x31, 0x4E, 0xDC, 0x7E, 0x79, 0x67, 0x9E, 0x98, 0xD2, 0xE3, 0xD8, 0x45, 0x71, 0x8D, 0x87, 0xCA, 0x5D, 0xF2, 0x44, 0x39, 0x7D, 0x82, 0x72, 0xCA, 0x0F, 0x71, 0x4B, 0xE8, 0x9C, 0xF1, 0x00, 0x8B, 0xBA, 0xCE, 0x9C, 0x21, 0x46, 0xBD, 0x8C, 0xB1, 0x13, 0x7B, 0xB9, 0x4E, 0xFE, 0x23, 0x7A, 0x4E, 0x59, 0xD4, 0x46, 0xAC, 0x59, 0x79, 0xA3, 0x99, 0x08, 0xBB, 0x0A, 0xC1, 0x38, 0x0E, 0xF6, 0xF6, 0x2E, 0x37, 0x1C, 0x60, 0x7F, 0x44, 0xA3, 0x6C, 0xF1, 0x74, 0x8B, 0x3E, 0x7D, 0xC4, 0xF3, 0x56, 0xB3, 0x3B, 0x8A, 0x57, 0xFC, 0x32, 0xBD, 0xC5, 0xF3, 0xBB, 0x4E, 0xDF, 0x17, 0xCF, 0xCC, 0x54, 0xB9, 0xFB, 0xFC, 0x95, 0xAB, 0x4C, 0x95, 0xAB, 0x7D, 0xC4, 0xE4, 0xF8, 0x65, 0x27, 0x01, 0xA6, 0xC5, 0x2D, 0xE8, 0x2E, 0x0E, 0x5D, 0xB0, 0x78, 0x86, 0x18, 0xE8, 0xB3, 0xC1, 0x55, 0x74, 0xCF, 0xCC, 0xD8, 0x21, 0x56, 0x69, 0x7F, 0xE2, 0x87, 0x08, 0x57, 0x26, 0xEA, 0x25, 0xE9, 0x36, 0x81, 0x87, 0x7E, 0x4E, 0x7E, 0x00, 0x9F, 0x96, 0x04, 0x1A, 0x8B, 0xBF, 0x3D, 0xFA, 0xF5, 0x40, 0xAC, 0xBB, 0x6A, 0x21, 0xEA, 0x7A, 0x1C, 0xF5, 0xF1, 0xAB, 0x3B, 0x4B, 0xC4, 0x7F, 0x92, 0x07, 0x14, 0x3F, 0x54, 0x9E, 0xFF, 0xA5, 0x3C, 0x73, 0x49, 0x5C, 0xF2, 0x37, 0xB9, 0x3D, 0xC0, 0xD8, 0xB9, 0x6B, 0x5A, 0x89, 0x7D, 0x8A, 0x77, 0x36, 0x12, 0xDB, 0x25, 0x1F, 0x9A, 0x2E, 0xD6, 0xEB, 0x70, 0xF3, 0x84, 0x68, 0xE9, 0x53, 0xF4, 0x07, 0x0C, 0x23, 0xE1, 0xBE, 0xAD, 0xD5, 0x29, 0x80, 0x67, 0x59, 0x6E, 0x47, 0xC4, 0xD7, 0xD7, 0x55, 0x7D, 0xFC, 0xB9, 0x55, 0xBF, 0x4F, 0xE2, 0xA7, 0xA3, 0x73, 0x27, 0x88, 0xDF, 0xFD, 0x37, 0x5A, 0x88, 0xDF, 0x9E, 0xE4, 0xF7, 0x16, 0x7F, 0x85, 0x7D, 0xAA, 0x27, 0xFE, 0x50, 0xC7, 0xC3, 0xE7, 0x44, 0xE5, 0xC7, 0x66, 0xE2, 0xCC, 0x99, 0x29, 0xD6, 0x00, 0x11, 0xB1, 0x19, 0x46, 0x62, 0xF0, 0xDC, 0x13, 0xD9, 0x62, 0xF3, 0x1D, 0xD7, 0xED, 0xC5, 0x4A, 0x89, 0xB7, 0xCF, 0x82, 0xFE, 0x1A, 0x28, 0x98, 0x6C, 0x70, 0xD8, 0x68, 0x09, 0xDC, 0x6B, 0x50, 0xA9, 0x31, 0xC0, 0xE3, 0xED, 0x8D, 0x74, 0xC5, 0x97, 0x4D, 0x7C, 0xBF, 0x8B, 0xEF, 0x7D, 0x42, 0x41, 0x4C, 0x18, 0xAF, 0x23, 0x7E, 0x31, 0x59, 0x6E, 0x22, 0x16, 0xCF, 0xD8, 0x74, 0x0F, 0xF1, 0xD8, 0xF1, 0xC7, 0xE2, 0x4F, 0xC3, 0xF7, 0x59, 0x62, 0xC9, 0x7D, 0xC9, 0x97, 0x8E, 0x82, 0x78, 0x6D, 0x19, 0x00, 0x5C, 0x2E, 0x05, 0x06, 0x69, 0x70, 0xE1, 0x23, 0x94, 0x5D, 0x09, 0xE7, 0xFE, 0x82, 0x3D, 0x70, 0xCA, 0x0F, 0x5C, 0x5C, 0x20, 0x7F, 0x0C, 0xB8, 0xAF, 0x84, 0x03, 0x29, 0xE0, 0x75, 0x05, 0xF2, 0x8C, 0xA1, 0x4B, 0x26, 0xEC, 0x0D, 0x86, 0x41, 0x2F, 0x20, 0xEB, 0x07, 0xC4, 0x54, 0x83, 0x4C, 0x17, 0x48, 0x1C, 0x08, 0xE9, 0x11, 0x90, 0x6E, 0x05, 0x3B, 0x9E, 0xC2, 0xC9, 0x89, 0xB0, 0xA1, 0x2A, 0x14, 0x98, 0xC3, 0x8A, 0x00, 0x78, 0xB1, 0x1E, 0x16, 0x84, 0x4B, 0x2F, 0x0A, 0xE6, 0xDE, 0x83, 0xEF, 0x1F, 0xE1, 0xC6, 0x0E, 0x00, 0xB8, 0x62, 0xA5, 0xBC, 0x98, 0x03, 0x66, 0x11, 0x70, 0xC1, 0x0B, 0x2A, 0xFA, 0x81, 0xCC, 0x53, 0x9C, 0x5C, 0xE1, 0x68, 0x01, 0x34, 0xF8, 0x02, 0x07, 0x22, 0xA0, 0xCD, 0x01, 0xC8, 0xBD, 0x08, 0x81, 0x59, 0x90, 0x53, 0x00, 0x83, 0xDA, 0x42, 0xD6, 0x18, 0x98, 0x5C, 0x04, 0x19, 0xD7, 0x61, 0x8D, 0x2B, 0xEC, 0xC9, 0x86, 0x7D, 0x81, 0xB0, 0xB5, 0x0D, 0x5C, 0x8E, 0x86, 0xD5, 0xD6, 0xF0, 0x78, 0x1A, 0xC8, 0xFC, 0xE5, 0x53, 0x0B, 0x98, 0xD9, 0x16, 0xFE, 0x45, 0xC0, 0xD4, 0xFF, 0x34, 0x7F, 0xC1, 0xED, 0x11, 0x00, 0x70, 0xBD, 0xA5, 0xF2, 0xD2, 0x5C, 0xA0, 0x07, 0x5C, 0xD8, 0x02, 0x56, 0x97, 0xE1, 0xDC, 0x0D, 0xB0, 0xCF, 0x83, 0x13, 0x83, 0xC1, 0xAD, 0x07, 0x1C, 0x4C, 0x80, 0x56, 0x5E, 0xB0, 0x3F, 0x1A, 0x02, 0x82, 0x21, 0xD7, 0x03, 0x06, 0xFF, 0x85, 0x8C, 0x07, 0x30, 0xAD, 0x3D, 0xA4, 0xAD, 0x85, 0x0D, 0xAF, 0x20, 0xB5, 0x19, 0xE4, 0xBF, 0x83, 0x75, 0x49, 0x50, 0x34, 0x07, 0xE2, 0xDF, 0xC0, 0xDB, 0x3C, 0x98, 0x75, 0x07, 0x7E, 0xC7, 0xC1, 0xF8, 0xFF, 0xD5, 0x01, 0x10, 0x7D, 0x5B, 0x59, 0x58, 0x02, 0x00, 0xB7, 0x76, 0x29, 0xAF, 0x2D, 0x57, 0x5E, 0x7A, 0x06, 0x7A, 0x6D, 0x34, 0xFD, 0xC1, 0x76, 0x29, 0x1C, 0x3F, 0x00, 0x4E, 0x3D, 0x20, 0x67, 0x33, 0xB8, 0x4F, 0x82, 0xD4, 0x72, 0xE0, 0x73, 0x0C, 0xD6, 0xCF, 0x82, 0x9E, 0x0E, 0x90, 0xB4, 0x14, 0x22, 0x67, 0x69, 0x1A, 0xC3, 0x12, 0x6F, 0x58, 0x71, 0x18, 0xF6, 0xDE, 0x81, 0x65, 0x5D, 0xE1, 0xBE, 0x15, 0xCC, 0x0E, 0x81, 0xE2, 0x2E, 0x30, 0xAE, 0x50, 0xE5, 0x4E, 0x7C, 0x8B, 0xD2, 0x4F, 0xA4, 0x6A, 0x51, 0x6D, 0x00, 0x28, 0xBC, 0xAC, 0xBC, 0xF6, 0x4C, 0x79, 0x7A, 0x83, 0xF2, 0xD0, 0x6A, 0x30, 0x1B, 0x05, 0x7B, 0x4D, 0xA1, 0x72, 0x5B, 0xD8, 0x66, 0x01, 0x2E, 0x3F, 0x61, 0x45, 0x67, 0x68, 0xB1, 0x01, 0xE2, 0xAC, 0xC1, 0xB7, 0x09, 0x4C, 0xFD, 0x04, 0x7D, 0xDB, 0x6A, 0x96, 0xC0, 0x8C, 0xE9, 0x30, 0xA3, 0x00, 0xD2, 0x76, 0xC1, 0x6C, 0xA0, 0xC8, 0x0D, 0xA6, 0x7D, 0x85, 0xEF, 0xF3, 0x60, 0xFC, 0x72, 0xC9, 0xD5, 0x19, 0x38, 0xE2, 0x8D, 0x68, 0xF9, 0x35, 0xE2, 0xAF, 0x68, 0xE5, 0x77, 0xC7, 0x09, 0x00, 0x6E, 0x76, 0x56, 0x9E, 0xBB, 0xAD, 0x3C, 0xF8, 0x55, 0x99, 0x71, 0x07, 0x48, 0x82, 0xAD, 0xB2, 0xCF, 0x2F, 0x84, 0xC4, 0xA1, 0x50, 0xF5, 0x1A, 0x4C, 0x5D, 0x0A, 0x75, 0x37, 0x42, 0x94, 0x35, 0xB4, 0x31, 0x83, 0xE1, 0x5D, 0x20, 0xF8, 0x87, 0x34, 0xE6, 0x21, 0xBA, 0x31, 0x84, 0x47, 0xC1, 0xF6, 0xB6, 0x10, 0xD5, 0x1C, 0x6E, 0xE6, 0xEA, 0xEB, 0x0C, 0x7F, 0x26, 0x79, 0x65, 0x07, 0x0D, 0xEC, 0x2F, 0xDA, 0x0D, 0xEC, 0xB5, 0x45, 0xAC, 0x36, 0xAB, 0xC7, 0x06, 0xB1, 0x7A, 0xD3, 0xAB, 0xDB, 0xAD, 0x03, 0x01, 0x2E, 0x9D, 0xB6, 0x3A, 0x2B, 0x1E, 0xB9, 0x63, 0xE1, 0x24, 0x66, 0x55, 0x2C, 0xB5, 0x4F, 0xDC, 0x62, 0x6E, 0xB4, 0x55, 0x5C, 0xBC, 0x0B, 0xC0, 0x60, 0xF7, 0x94, 0xB3, 0x60, 0xF1, 0x19, 0xA7, 0x70, 0x03, 0x70, 0x98, 0x0B, 0x7D, 0x83, 0xC1, 0x7D, 0x8D, 0x6E, 0x64, 0xEF, 0x99, 0xD0, 0xF9, 0x07, 0x77, 0x7A, 0xF9, 0xC2, 0x04, 0x7B, 0xE8, 0xF9, 0x0D, 0xB6, 0xD5, 0x82, 0x1E, 0x46, 0x70, 0xF5, 0xB7, 0xFE, 0x8D, 0xCE, 0xE1, 0x48, 0x5E, 0x0F, 0x8F, 0xE5, 0x62, 0x9D, 0x6C, 0xEF, 0xDE, 0xA2, 0x6B, 0xAA, 0x07, 0xA2, 0x5B, 0x9B, 0xF3, 0xFD, 0xAA, 0x0D, 0x04, 0x38, 0x13, 0x6E, 0x3F, 0x44, 0xDC, 0xF7, 0xD1, 0xA1, 0xA6, 0xB8, 0xF5, 0x95, 0x5D, 0xAC, 0xB8, 0xF8, 0x6C, 0x85, 0x10, 0x31, 0xA6, 0xB0, 0x4C, 0xB8, 0x38, 0x68, 0x8C, 0xF1, 0x48, 0x31, 0xF0, 0x1B, 0x98, 0x75, 0x33, 0xEB, 0xEB, 0x73, 0x1A, 0x6A, 0xB5, 0xB6, 0xB0, 0x6E, 0x53, 0x1D, 0xDA, 0x8F, 0x28, 0x43, 0x8B, 0x39, 0x30, 0xBA, 0xB6, 0x8D, 0x6F, 0xF3, 0x89, 0xB0, 0x7E, 0x79, 0x99, 0x30, 0xF7, 0xCA, 0x70, 0x6E, 0x65, 0xD9, 0xBA, 0xF6, 0xF1, 0xF0, 0xD7, 0xCC, 0x39, 0xCF, 0xB0, 0x0B, 0x52, 0x8F, 0xB5, 0x33, 0xB7, 0x12, 0x3D, 0x52, 0xCD, 0x63, 0xC4, 0x36, 0x03, 0xF2, 0xFF, 0x35, 0x1C, 0x03, 0x70, 0xE4, 0x41, 0xE3, 0xA9, 0xE2, 0xAE, 0x82, 0x7A, 0xB5, 0xC4, 0x84, 0x13, 0x2E, 0x2F, 0xC4, 0x29, 0xD4, 0x4C, 0x12, 0x43, 0x71, 0xD8, 0x2D, 0xFA, 0x1F, 0x75, 0x88, 0x11, 0x9B, 0xFB, 0x55, 0x8D, 0x05, 0xDD, 0x12, 0x00, 0x68, 0x78, 0x1E, 0x4C, 0x87, 0xD4, 0x3D, 0x5F, 0xF7, 0x2F, 0x58, 0x8E, 0x1C, 0xD0, 0xBF, 0x76, 0x09, 0x58, 0xB7, 0x49, 0x36, 0xAA, 0x99, 0x01, 0xE5, 0xBC, 0x4F, 0x3B, 0x56, 0x5B, 0x07, 0x15, 0x7D, 0x4A, 0xAA, 0x4A, 0x7D, 0x62, 0xAF, 0xF5, 0xF5, 0x6B, 0x7C, 0x86, 0x4A, 0x23, 0xB4, 0xC7, 0xE5, 0x8B, 0xFA, 0x7F, 0xC0, 0xEA, 0x26, 0x1E, 0x38, 0xE5, 0x55, 0x06, 0x60, 0xDF, 0x12, 0x9F, 0xC9, 0x62, 0x72, 0xAD, 0x16, 0x35, 0xC4, 0x19, 0x76, 0x4D, 0x2B, 0x88, 0x43, 0x72, 0xEA, 0xEF, 0x16, 0x03, 0x16, 0xBA, 0xD5, 0x10, 0x9B, 0xFD, 0x72, 0x59, 0x2C, 0x3A, 0x17, 0x35, 0x72, 0x11, 0xC1, 0xBD, 0x40, 0xFF, 0x4F, 0x85, 0x9B, 0xD0, 0x72, 0x52, 0xB3, 0xDB, 0xE6, 0x65, 0xA1, 0x75, 0xEE, 0x70, 0x0F, 0xC3, 0x2D, 0xE0, 0xA1, 0x9B, 0xBC, 0x5B, 0xA7, 0x0C, 0x78, 0x95, 0x3B, 0xF7, 0x09, 0xC0, 0xC3, 0xF1, 0xFB, 0x7C, 0xB1, 0xF9, 0x34, 0x6D, 0x36, 0x5D, 0x17, 0xEA, 0x3B, 0x6A, 0xAF, 0x93, 0x48, 0x70, 0xFB, 0xAE, 0xCD, 0x85, 0x96, 0x65, 0xC7, 0xCB, 0x59, 0x22, 0xEC, 0xD2, 0xED, 0x3E, 0x41, 0x5C, 0xF4, 0xCC, 0xFF, 0x9C, 0x38, 0xBA, 0x6D, 0x5B, 0x6F, 0xB1, 0x7B, 0x71, 0xCB, 0x31, 0xA2, 0xE7, 0x76, 0xF7, 0x0F, 0xA2, 0x5B, 0x5A, 0xF3, 0xED, 0xA2, 0x55, 0x9E, 0xDF, 0x75, 0x11, 0x82, 0xAF, 0x94, 0x69, 0x26, 0xF6, 0xA8, 0xD4, 0xEC, 0xB0, 0xD8, 0x35, 0x2C, 0x2C, 0x48, 0xEC, 0xE2, 0x96, 0xA4, 0xEE, 0x41, 0xC1, 0xB1, 0x16, 0x62, 0x50, 0x42, 0x71, 0x63, 0xD1, 0x57, 0x5D, 0x7F, 0x82, 0xB7, 0x9E, 0xD2, 0xEB, 0x9C, 0x98, 0x3A, 0xAE, 0x7F, 0x2C, 0xC0, 0xFA, 0x9C, 0x01, 0x1E, 0xE2, 0xF4, 0xB4, 0xEE, 0x51, 0xE2, 0xA0, 0x0A, 0x01, 0xC3, 0x44, 0x7F, 0xD7, 0x0E, 0x6F, 0xC5, 0xA6, 0xF3, 0x3A, 0x4E, 0x14, 0xED, 0xB7, 0x74, 0xEF, 0x29, 0x42, 0xE8, 0x31, 0xA3, 0xE1, 0xE2, 0xC0, 0x89, 0xE5, 0x2B, 0x8A, 0x61, 0xFB, 0x9B, 0xAE, 0x46, 0x74, 0x8A, 0xE8, 0x28, 0x46, 0x8E, 0x4D, 0x2C, 0x10, 0x87, 0x7D, 0xCC, 0xDD, 0x20, 0x46, 0xAE, 0xF9, 0x79, 0x59, 0x1C, 0xDC, 0x41, 0xE5, 0x77, 0xEE, 0xA1, 0x0C, 0xC8, 0x11, 0x37, 0x77, 0x1C, 0x91, 0x05, 0xB0, 0x74, 0x67, 0xE4, 0x42, 0x71, 0x6C, 0xC4, 0x80, 0x86, 0x62, 0xAF, 0x3E, 0x21, 0xAF, 0x44, 0xEF, 0x86, 0x7D, 0xE7, 0x8B, 0xCE, 0x2B, 0x23, 0x7E, 0x8B, 0x3A, 0x35, 0xC6, 0x87, 0x81, 0x69, 0x5D, 0x98, 0xBA, 0xD6, 0xE2, 0xFF, 0xEC, 0x20, 0x39, 0x1E, 0x16, 0xE3, 0xDD, 0x3A, 0xB8, 0x88, 0x09, 0x69, 0x7D, 0xB3, 0xC4, 0xC5, 0x2B, 0x52, 0x1E, 0x8B, 0x0B, 0x6E, 0xA6, 0xFD, 0x12, 0x97, 0xFC, 0x50, 0xB9, 0xB3, 0x1D, 0x94, 0x23, 0xDF, 0x2B, 0xC3, 0xEE, 0x8A, 0x6B, 0x1C, 0x63, 0xB6, 0x02, 0xCC, 0x32, 0x1E, 0x1F, 0x24, 0x0E, 0xF3, 0x1C, 0x65, 0x21, 0x76, 0xDE, 0x33, 0xFA, 0x8C, 0xD8, 0xB8, 0xFF, 0xB4, 0x83, 0x62, 0xA5, 0x4A, 0x4B, 0xE3, 0x44, 0x58, 0x5F, 0xC3, 0x7C, 0xBD, 0xB8, 0xD5, 0xAA, 0xC6, 0x2E, 0x31, 0x75, 0x61, 0xB3, 0x15, 0x62, 0xDA, 0xDD, 0xAE, 0x8B, 0xC5, 0xCC, 0x8D, 0x51, 0xCB, 0xC4, 0xDC, 0x83, 0xA9, 0x93, 0xC4, 0x7D, 0x9D, 0x72, 0x3F, 0x21, 0x7E, 0x50, 0xB9, 0xE9, 0x49, 0xCA, 0xF8, 0x23, 0xCA, 0xF9, 0xC6, 0x62, 0x42, 0xDC, 0xDC, 0x57, 0x00, 0xE3, 0x9F, 0xCC, 0x78, 0x20, 0xF6, 0xD9, 0x3D, 0xEB, 0xB9, 0xE8, 0x53, 0x69, 0x59, 0x96, 0xE8, 0x3A, 0x64, 0xEB, 0x20, 0xD1, 0x68, 0x57, 0x96, 0x3D, 0x98, 0xDC, 0x87, 0x63, 0x73, 0xCB, 0x9E, 0x03, 0xB8, 0xEA, 0x5F, 0x6F, 0xB5, 0x58, 0xD4, 0xA7, 0x8B, 0xB3, 0xF8, 0x24, 0x2A, 0x72, 0x9A, 0xF8, 0x29, 0x2A, 0xC9, 0x12, 0xF1, 0xE6, 0xA1, 0xEA, 0xE2, 0x97, 0x41, 0x17, 0x56, 0x8A, 0xDF, 0x1B, 0xA9, 0xDC, 0x77, 0x45, 0xCA, 0xB3, 0xFF, 0x29, 0xB3, 0xAE, 0x8B, 0xB3, 0x8D, 0x12, 0xE6, 0x02, 0x44, 0x44, 0x25, 0x9C, 0x15, 0xBB, 0x3E, 0xDA, 0xF4, 0x5C, 0x6C, 0x65, 0x92, 0x6D, 0x23, 0x56, 0x7B, 0x79, 0xAE, 0x17, 0x48, 0x7D, 0x7D, 0xA5, 0xA1, 0xE1, 0xE3, 0x52, 0xDB, 0xE0, 0x7A, 0x54, 0x8D, 0x0A, 0x00, 0xB7, 0x6B, 0x36, 0x19, 0x24, 0xDE, 0xED, 0xD2, 0xB5, 0xBD, 0xF8, 0xE4, 0x63, 0x98, 0xAF, 0xF8, 0x32, 0x67, 0x7E, 0xB4, 0xF8, 0x6E, 0xD3, 0xFA, 0xAF, 0x88, 0x19, 0x47, 0x63, 0xC5, 0x6F, 0x8F, 0x8B, 0x7B, 0x8A, 0xDF, 0xBB, 0xA8, 0xFC, 0x6F, 0xF9, 0xCA, 0xD7, 0x41, 0x62, 0xF4, 0xBB, 0xF5, 0x35, 0x01, 0x42, 0xFB, 0xA4, 0x8A, 0xF8, 0x7D, 0x3B, 0xE4, 0x27, 0xBA, 0x4D, 0x3D, 0xF3, 0x05, 0xF4, 0x83, 0x4C, 0x22, 0xCF, 0x9E, 0x86, 0x52, 0x7D, 0xE0, 0x62, 0x91, 0xCD, 0x2E, 0x9D, 0x71, 0x70, 0x35, 0xB7, 0x4E, 0x0A, 0xC0, 0xCD, 0x2B, 0x2D, 0xBB, 0x89, 0x85, 0x8E, 0x41, 0x75, 0xC5, 0x7B, 0xE1, 0x83, 0xBB, 0x89, 0x4F, 0xE7, 0x4D, 0xDA, 0x29, 0xBE, 0xDA, 0x91, 0x78, 0x47, 0x7C, 0x67, 0xBB, 0xB9, 0x1E, 0x62, 0xDF, 0xE3, 0x9B, 0xC4, 0xE2, 0xB6, 0x9F, 0x3C, 0xC5, 0x6F, 0xBB, 0x25, 0x1F, 0x8A, 0x5B, 0x8B, 0x87, 0xD7, 0x02, 0xC0, 0xFE, 0xBA, 0x40, 0x7B, 0x59, 0x47, 0xC0, 0x2C, 0x0D, 0x72, 0x7A, 0x82, 0x4D, 0x1C, 0xA4, 0xEB, 0x80, 0xFD, 0x67, 0xD8, 0x31, 0x0C, 0x5C, 0xC2, 0x61, 0xCB, 0x34, 0x70, 0xEF, 0x04, 0x1B, 0x0C, 0xC1, 0xAB, 0x18, 0xD6, 0xBA, 0x41, 0xB0, 0x01, 0xAC, 0xFE, 0x01, 0xC3, 0x2E, 0xC2, 0x9A, 0x5E, 0x30, 0xB3, 0x2C, 0x24, 0x5F, 0x82, 0xF5, 0x86, 0x90, 0x74, 0x1A, 0xF6, 0x1E, 0x81, 0x65, 0xDE, 0x70, 0xD1, 0x06, 0xE6, 0x67, 0xC3, 0xBD, 0xDD, 0x30, 0x63, 0x3D, 0xBC, 0x3E, 0x2C, 0xEB, 0x34, 0x7C, 0xBA, 0x0E, 0x27, 0x4C, 0x00, 0xE0, 0x40, 0x9C, 0x72, 0xDF, 0x3F, 0xD0, 0xFB, 0x0E, 0x39, 0x67, 0xA1, 0x8C, 0x2E, 0x64, 0xD6, 0x87, 0xCA, 0xE5, 0x60, 0x67, 0x36, 0x38, 0xE5, 0x40, 0x4A, 0x79, 0x68, 0xB8, 0x09, 0xD6, 0x5F, 0x04, 0x8F, 0xDB, 0x90, 0xBC, 0x09, 0x82, 0x8E, 0xC3, 0xEA, 0x0A, 0x10, 0x1E, 0x0E, 0x6B, 0xA2, 0x61, 0xCE, 0x23, 0x48, 0xAE, 0x04, 0xDB, 0x0A, 0x61, 0x85, 0x3F, 0xE4, 0x67, 0xC2, 0xA2, 0x7D, 0x70, 0x7B, 0x1D, 0xCC, 0xEA, 0x0D, 0xCF, 0x73, 0x60, 0x62, 0x0C, 0x7C, 0x99, 0x0B, 0x63, 0xE6, 0xC2, 0xAF, 0x56, 0x52, 0xCD, 0x03, 0xC0, 0xE1, 0x7E, 0xCA, 0xBC, 0x67, 0xCA, 0xBD, 0xD9, 0x60, 0x7C, 0x12, 0xB2, 0xC3, 0xC0, 0xC6, 0x09, 0x76, 0x07, 0x43, 0x75, 0x0F, 0xD8, 0x5A, 0x0D, 0xEA, 0x8D, 0x86, 0x0D, 0x97, 0xA1, 0x4D, 0x28, 0xAC, 0x7D, 0x02, 0xC1, 0x5B, 0x60, 0x95, 0x39, 0x8C, 0xF0, 0xD7, 0xEC, 0x07, 0x8B, 0xD7, 0x6B, 0x96, 0x82, 0xCC, 0x4F, 0x90, 0xE0, 0x02, 0x57, 0x83, 0x21, 0xB6, 0x04, 0x9E, 0xEC, 0x87, 0x89, 0xC9, 0xF0, 0xE9, 0x27, 0x8C, 0xEA, 0x07, 0x7F, 0xBF, 0xC0, 0xC8, 0xA3, 0xAA, 0x0E, 0xB9, 0xE4, 0x00, 0x00, 0x67, 0x02, 0x95, 0x87, 0x0E, 0x2A, 0xF3, 0xEA, 0x2A, 0xF7, 0xD9, 0x40, 0xA9, 0xE1, 0xB0, 0xFB, 0x0D, 0x54, 0xBA, 0x0E, 0xEB, 0xAB, 0x40, 0xED, 0xA7, 0x10, 0x5F, 0x13, 0x9A, 0xD4, 0x81, 0x59, 0xEF, 0xC1, 0xE7, 0x08, 0x4C, 0x8D, 0x87, 0xDE, 0xAB, 0x61, 0x5A, 0x55, 0x98, 0x3C, 0x09, 0x66, 0x75, 0x85, 0x1D, 0x27, 0x61, 0x46, 0x21, 0x5C, 0x2D, 0x81, 0xE8, 0xC3, 0xF0, 0x6A, 0x1E, 0x44, 0x5E, 0x50, 0xB9, 0x23, 0x22, 0x95, 0xC3, 0x0D, 0x95, 0xD7, 0xDA, 0x02, 0xC0, 0xD5, 0x89, 0xCA, 0x93, 0xB5, 0x94, 0x39, 0xDF, 0x94, 0x3B, 0xE3, 0x40, 0x6F, 0x1E, 0x24, 0x7B, 0x82, 0x55, 0x3C, 0xCC, 0x1F, 0x09, 0x55, 0x2B, 0xC0, 0xA4, 0x51, 0x50, 0x67, 0x1B, 0x44, 0x5E, 0x82, 0x16, 0x59, 0x10, 0xB6, 0x0F, 0xFC, 0x63, 0xE9, 0x12, 0xDE, 0x17, 0x86, 0x37, 0x84, 0xF0, 0x2B, 0x90, 0x5C, 0x0D, 0x46, 0xB9, 0xC1, 0x85, 0x40, 0x88, 0x1C, 0x05, 0x6F, 0xAB, 0x43, 0x78, 0x57, 0x95, 0x3B, 0xF8, 0x95, 0xA8, 0xD7, 0x34, 0x34, 0x41, 0x34, 0xFC, 0x75, 0xA9, 0x15, 0x00, 0x9C, 0x0F, 0x55, 0x1E, 0xE8, 0xAD, 0xDC, 0xD3, 0x58, 0xB9, 0xAE, 0xB6, 0x72, 0x61, 0x26, 0x98, 0xE4, 0x43, 0xF4, 0x78, 0x28, 0x3B, 0x0B, 0x86, 0xBA, 0x81, 0x63, 0x04, 0xAB, 0x7A, 0x77, 0x85, 0x06, 0x3B, 0x59, 0xD9, 0xBD, 0x36, 0xB4, 0x75, 0x82, 0x6E, 0x2E, 0x10, 0xDA, 0x55, 0xBD, 0x76, 0x97, 0x5C, 0x85, 0xDE, 0x65, 0xE0, 0xC8, 0x22, 0xE8, 0xFB, 0x04, 0x3E, 0xB9, 0x1B, 0xB4, 0x0F, 0xE9, 0x25, 0xB9, 0x26, 0xC1, 0xDD, 0xAE, 0x8B, 0x96, 0x76, 0x81, 0x11, 0x62, 0xD9, 0xC7, 0x67, 0x22, 0x8D, 0x17, 0x02, 0x9C, 0xDC, 0xAA, 0x3F, 0x4D, 0xCC, 0x19, 0x69, 0xD8, 0x55, 0x4C, 0x99, 0xA1, 0xFF, 0x40, 0x5C, 0x72, 0x5E, 0xBF, 0xAC, 0x38, 0xE9, 0xB7, 0xDE, 0x51, 0x71, 0xF0, 0x3E, 0x30, 0x70, 0x84, 0xE0, 0x16, 0x60, 0x1B, 0xCA, 0x48, 0xDF, 0x70, 0xA8, 0x55, 0x1B, 0x7C, 0xC2, 0xA0, 0x95, 0x01, 0x78, 0x8D, 0x85, 0xDE, 0x3D, 0xC1, 0x3B, 0x03, 0x16, 0xB5, 0x82, 0xB6, 0xEB, 0x20, 0x6F, 0x37, 0x78, 0x6F, 0x87, 0x0F, 0x9F, 0x4D, 0x0C, 0xBC, 0xDA, 0x49, 0x6E, 0x99, 0x3E, 0x1E, 0xE9, 0x62, 0xD9, 0x3F, 0x2D, 0xC6, 0x8A, 0xE5, 0x5D, 0x8E, 0x4D, 0xA9, 0xD0, 0x1E, 0xE0, 0x48, 0xE7, 0x0A, 0x03, 0xC4, 0xDD, 0xF7, 0x6D, 0xE6, 0x8B, 0xCB, 0x66, 0xDB, 0x7E, 0x17, 0x67, 0x8C, 0x28, 0x73, 0x57, 0x0C, 0xF3, 0x34, 0xCB, 0x12, 0xBB, 0xEE, 0x33, 0x16, 0x69, 0x63, 0x09, 0x7A, 0x2B, 0xF4, 0xED, 0x9A, 0x4E, 0x80, 0x2A, 0xB3, 0x75, 0x37, 0x34, 0xBA, 0x0C, 0xCD, 0xC7, 0xE8, 0x5D, 0xAF, 0x3F, 0x06, 0xFA, 0xA4, 0x19, 0xD9, 0xD5, 0x4D, 0x86, 0x85, 0xD6, 0x86, 0x0B, 0x9D, 0x75, 0x61, 0x9F, 0xB5, 0xD1, 0x8E, 0xCA, 0x47, 0xE0, 0xF9, 0x18, 0xAB, 0x24, 0x8B, 0x04, 0xA4, 0x1E, 0xDC, 0x6A, 0xB5, 0x42, 0xAC, 0x7E, 0xB1, 0xEC, 0x47, 0xC4, 0x75, 0x07, 0xFE, 0xD6, 0x9E, 0x0C, 0x90, 0xFB, 0xD2, 0x55, 0x5F, 0x5C, 0xBB, 0xAC, 0xE6, 0x6A, 0x31, 0xEE, 0x6D, 0xCD, 0x72, 0xE2, 0x48, 0x37, 0xFB, 0x3C, 0xB1, 0x7B, 0x6C, 0x85, 0xDE, 0xA2, 0xE7, 0x4A, 0xEB, 0xDF, 0xA2, 0xDB, 0x52, 0x9B, 0x81, 0x22, 0x00, 0x38, 0x2C, 0x03, 0x13, 0xD3, 0xDA, 0x01, 0x55, 0x5B, 0x82, 0x95, 0x5B, 0x8F, 0x68, 0xDB, 0xF6, 0x50, 0xBE, 0x79, 0x7C, 0x3F, 0xEB, 0x03, 0x9A, 0x07, 0x0E, 0x1B, 0x58, 0xD5, 0x00, 0x3B, 0xCB, 0x57, 0xB1, 0xA6, 0x8D, 0xA1, 0x7C, 0x27, 0xED, 0x3A, 0xB2, 0x4A, 0x60, 0xBD, 0x54, 0xEB, 0x7F, 0x18, 0x82, 0x45, 0xA2, 0x56, 0x87, 0x74, 0xC9, 0x3E, 0xDE, 0x14, 0x80, 0xF4, 0x2E, 0xCD, 0x4F, 0x89, 0x09, 0x4B, 0x1B, 0xFD, 0x10, 0x27, 0xDE, 0xAD, 0x3B, 0x43, 0xED, 0x37, 0xB5, 0xFC, 0x45, 0x9F, 0x63, 0xD5, 0x87, 0x8B, 0xF5, 0xD6, 0x3B, 0xB4, 0x13, 0x2B, 0x37, 0xA9, 0x71, 0x57, 0x84, 0xFA, 0x3D, 0x4C, 0x12, 0x0C, 0x8A, 0x35, 0x03, 0xEB, 0x27, 0x01, 0x34, 0x48, 0x0E, 0x3D, 0x2B, 0xBA, 0x8D, 0x5E, 0xD2, 0x53, 0xAC, 0x7F, 0xEE, 0xE8, 0x22, 0xD1, 0x75, 0xE5, 0xEB, 0xD3, 0x62, 0x2D, 0xD5, 0x6F, 0xC0, 0x69, 0xA9, 0xB2, 0x86, 0x76, 0x5D, 0xAE, 0xAE, 0xFB, 0xAE, 0xC3, 0xDE, 0x4F, 0x00, 0x36, 0x3F, 0xF1, 0x4B, 0x15, 0x67, 0xDD, 0xF6, 0x16, 0x18, 0x36, 0xAD, 0x79, 0x2F, 0x31, 0x30, 0xAD, 0xE1, 0x23, 0xB1, 0xD9, 0x3A, 0xB7, 0xCD, 0xA2, 0xE3, 0xF5, 0xFA, 0x96, 0xA2, 0x5E, 0x42, 0x8B, 0x68, 0xD0, 0xFF, 0x02, 0x2D, 0x6F, 0x94, 0x7E, 0x00, 0x9A, 0x63, 0x1B, 0xB7, 0x10, 0x5B, 0x3C, 0x1A, 0x90, 0x2B, 0xBA, 0xAF, 0x98, 0x1F, 0x21, 0x36, 0x9B, 0x72, 0xA0, 0xB6, 0xE8, 0x5E, 0xF3, 0x86, 0x9D, 0x58, 0x7F, 0xB4, 0xCA, 0x77, 0xFE, 0xA8, 0xAC, 0x9D, 0x2C, 0x6E, 0xB6, 0x0C, 0x76, 0x00, 0x58, 0x69, 0xD0, 0x53, 0x24, 0x5A, 0xCF, 0xFF, 0xAE, 0x18, 0x82, 0xF7, 0x17, 0xD1, 0x7B, 0x68, 0xEB, 0x9A, 0xA2, 0x9B, 0xBE, 0xC7, 0x35, 0xD1, 0x3A, 0xBA, 0xE3, 0x3F, 0x11, 0xBA, 0x2C, 0x34, 0x7D, 0x25, 0x06, 0x6E, 0xB5, 0x75, 0x14, 0x3B, 0x2F, 0x52, 0x13, 0x58, 0x7F, 0x9F, 0xA1, 0x29, 0x62, 0xC0, 0xD0, 0x71, 0x9D, 0xC5, 0x8E, 0xA7, 0xF7, 0x5F, 0x13, 0xFD, 0x3B, 0x5C, 0x8C, 0x12, 0x3B, 0x75, 0x53, 0xF9, 0xEE, 0xC1, 0xCA, 0x86, 0x4D, 0xC4, 0xD5, 0xC7, 0x06, 0x64, 0x00, 0xCC, 0x9D, 0x3C, 0xD0, 0x57, 0x8C, 0xA8, 0xDA, 0xB3, 0xA9, 0xD8, 0x25, 0xA7, 0x6B, 0xAA, 0xD8, 0xC2, 0x2E, 0xB8, 0xBC, 0x58, 0xED, 0x50, 0xDF, 0x61, 0x22, 0x0C, 0x4B, 0xD1, 0xBB, 0xA7, 0xBF, 0x08, 0x22, 0x16, 0x59, 0x7D, 0x00, 0x18, 0xDE, 0xB3, 0xFA, 0x04, 0x71, 0x14, 0x3E, 0x15, 0xC5, 0xA8, 0x16, 0xA3, 0x2A, 0x8B, 0x13, 0x7F, 0x27, 0x9B, 0x8B, 0xD1, 0xD9, 0x3B, 0xD6, 0x8A, 0x93, 0x54, 0xBD, 0xC1, 0xF8, 0x56, 0xCA, 0xC1, 0x37, 0x94, 0x9D, 0xF2, 0xC5, 0xA5, 0x85, 0x51, 0x77, 0xD5, 0x77, 0x0D, 0xCF, 0x14, 0xFB, 0xB5, 0x1C, 0x7C, 0x44, 0xEC, 0xD0, 0x76, 0x58, 0xA4, 0x58, 0xA7, 0xF9, 0x38, 0x17, 0xB1, 0x8C, 0xFF, 0xCC, 0x5F, 0x22, 0x2C, 0xD6, 0x2D, 0xBD, 0x42, 0x4C, 0x34, 0xA9, 0x35, 0x58, 0x4C, 0x3E, 0xD5, 0x7C, 0x9E, 0xB8, 0xC5, 0xAC, 0x5B, 0x05, 0x71, 0x5B, 0x4A, 0x68, 0x7B, 0x31, 0x35, 0x2B, 0x31, 0x5A, 0xDC, 0x93, 0xBB, 0x37, 0x43, 0x4C, 0x7F, 0xAB, 0x72, 0x77, 0xC6, 0x2A, 0x17, 0x0E, 0x55, 0x8E, 0xF9, 0x26, 0xCE, 0xBD, 0x3A, 0x75, 0x1D, 0x40, 0x64, 0xDD, 0xE8, 0x7B, 0x62, 0xB0, 0xF3, 0x24, 0x5F, 0xB1, 0xF9, 0xF4, 0xB9, 0xAD, 0x45, 0xC7, 0xF0, 0x55, 0x3B, 0x45, 0xD8, 0xDA, 0xC7, 0xD8, 0xD5, 0x34, 0x05, 0x32, 0x7B, 0x57, 0xEB, 0x02, 0xB0, 0xFF, 0x7D, 0x73, 0x73, 0xF1, 0xC2, 0xAF, 0x9E, 0xB7, 0xC5, 0x1B, 0x76, 0xA3, 0x13, 0xC4, 0xBB, 0x3A, 0x89, 0xE3, 0xC5, 0x47, 0x23, 0xF2, 0xF6, 0x88, 0x8F, 0x3D, 0xF2, 0x67, 0x8B, 0x6F, 0x55, 0x5F, 0x8A, 0x07, 0x1D, 0x94, 0xE7, 0x7D, 0x94, 0xAB, 0xEB, 0x8B, 0x93, 0xEF, 0xCC, 0xAF, 0x03, 0x30, 0xA0, 0xF1, 0xFC, 0x0F, 0xA2, 0xEF, 0xF6, 0x55, 0x0F, 0xC5, 0x46, 0x47, 0x52, 0x7D, 0x44, 0xB3, 0xA5, 0x79, 0x97, 0xA1, 0xCC, 0x0B, 0x38, 0x19, 0x5B, 0xDE, 0x5F, 0xBF, 0x2B, 0x9C, 0x39, 0xEC, 0x76, 0x0F, 0xC9, 0x4F, 0xF1, 0x29, 0x11, 0xAF, 0x76, 0x0F, 0xF9, 0x2D, 0xDE, 0xAC, 0x3C, 0x72, 0xB7, 0x58, 0x70, 0x79, 0xFE, 0x58, 0xF1, 0x41, 0xF6, 0xCE, 0xB6, 0xE2, 0xB3, 0xF7, 0xC7, 0x76, 0x88, 0x9F, 0xA7, 0xFE, 0x18, 0x20, 0x16, 0x3F, 0x57, 0xF9, 0x3F, 0x3F, 0x2A, 0x6F, 0x1C, 0x13, 0x47, 0xD9, 0xAE, 0x6A, 0x00, 0xD0, 0xC3, 0x37, 0x65, 0xBD, 0xE8, 0x55, 0x3F, 0xA7, 0x40, 0xAC, 0xDA, 0xFD, 0xB0, 0x0D, 0x98, 0x8F, 0x82, 0xC3, 0x91, 0xE6, 0xEB, 0x4A, 0x3D, 0x81, 0xE3, 0xB6, 0x8E, 0xDE, 0x00, 0xA7, 0x47, 0x36, 0xEE, 0x28, 0x9E, 0x7F, 0xE2, 0x7B, 0x5F, 0xBC, 0x9C, 0x1B, 0x12, 0x21, 0x5E, 0xAF, 0x13, 0xF1, 0x41, 0xBC, 0xED, 0x39, 0xE9, 0x8B, 0x58, 0x64, 0xBE, 0x52, 0x57, 0x7C, 0x94, 0x93, 0x71, 0x40, 0xFC, 0x6F, 0xDC, 0xF1, 0x21, 0xE2, 0xA7, 0x90, 0x4F, 0x21, 0x62, 0xB1, 0x5C, 0xBF, 0x25, 0xAE, 0x14, 0xD3, 0x8A, 0x00, 0x60, 0x67, 0x19, 0x65, 0x4A, 0x6B, 0xD0, 0x6F, 0x0D, 0xEB, 0x2C, 0xC0, 0xBC, 0x14, 0x24, 0x55, 0x05, 0x5B, 0x7B, 0x88, 0xBF, 0x06, 0x55, 0x47, 0xC0, 0x7C, 0x1B, 0xA8, 0x9D, 0x07, 0x71, 0xFD, 0xA0, 0x51, 0x3A, 0x4C, 0x07, 0x3C, 0xC6, 0xEA, 0x7E, 0x9A, 0x7A, 0x0E, 0x82, 0x36, 0xE9, 0x1D, 0x9C, 0xFE, 0x08, 0x46, 0x94, 0xE8, 0xB6, 0x8E, 0x6D, 0x0D, 0x0B, 0x66, 0x50, 0x2F, 0xAE, 0x07, 0x6C, 0x93, 0xBA, 0x23, 0x02, 0x0E, 0xBB, 0xC3, 0xD4, 0x51, 0x70, 0x75, 0x1E, 0x44, 0x37, 0x80, 0x87, 0x19, 0x30, 0xA6, 0x19, 0xBC, 0xAF, 0x0F, 0x59, 0xA6, 0x00, 0xB0, 0xDB, 0x49, 0xB9, 0xF5, 0x92, 0x72, 0xD3, 0x54, 0x30, 0x38, 0x04, 0xAB, 0xFC, 0xA0, 0x4C, 0x25, 0x48, 0xB0, 0x85, 0x8A, 0xDF, 0x61, 0x5E, 0x1E, 0xD4, 0xFC, 0x07, 0xB1, 0x09, 0xD0, 0xE0, 0x1D, 0x4C, 0xAD, 0x0C, 0xAD, 0xEF, 0xEA, 0xB5, 0x98, 0x62, 0x00, 0xC1, 0x87, 0xF4, 0x0A, 0xA6, 0x97, 0x81, 0x31, 0x83, 0x74, 0x56, 0xC4, 0x76, 0x86, 0xC4, 0x89, 0x30, 0xEB, 0x0B, 0x64, 0x3E, 0x86, 0x69, 0x19, 0x70, 0xCE, 0x15, 0xA2, 0xEF, 0x40, 0xD1, 0x66, 0x90, 0xA9, 0xFC, 0x9B, 0x13, 0x30, 0x7C, 0x34, 0x94, 0x24, 0xC3, 0xBE, 0xE1, 0x00, 0x90, 0x31, 0x50, 0x99, 0x6A, 0xA4, 0xDC, 0xD2, 0x1A, 0x38, 0x0C, 0x6B, 0x2E, 0x80, 0xE9, 0x7D, 0x58, 0x7E, 0x14, 0xCA, 0x97, 0x83, 0xF9, 0x73, 0xA1, 0xFA, 0x22, 0x88, 0x7D, 0x00, 0xF5, 0x5B, 0xC0, 0xD4, 0x24, 0x68, 0xD3, 0x4E, 0xEF, 0xDB, 0xE4, 0xCF, 0xD0, 0x33, 0x44, 0x3F, 0x49, 0xEA, 0x8F, 0x49, 0xF1, 0x14, 0xCE, 0x6A, 0x09, 0x9B, 0xB6, 0xC1, 0x4C, 0x4F, 0x38, 0xE6, 0xA8, 0xEA, 0xAF, 0x3B, 0x0F, 0x61, 0xF4, 0x3A, 0x78, 0x5D, 0x04, 0x11, 0xCE, 0xF0, 0x63, 0x0F, 0x0C, 0x3E, 0x0E, 0xFF, 0xEA, 0x81, 0xAA, 0xED, 0x61, 0xEF, 0x29, 0x65, 0xFA, 0x32, 0xE5, 0x8E, 0x43, 0xCA, 0x2D, 0x4B, 0x41, 0x27, 0x04, 0x12, 0xCF, 0x40, 0xD9, 0xCA, 0x30, 0xB3, 0x18, 0x2A, 0x15, 0xC3, 0x84, 0x3D, 0xE0, 0xBC, 0x0F, 0x86, 0x67, 0x43, 0x93, 0x35, 0x7A, 0x47, 0x87, 0x79, 0x42, 0xC7, 0xC9, 0xFA, 0xBA, 0xE1, 0x3D, 0x20, 0x2C, 0x19, 0xC2, 0x33, 0x60, 0x99, 0x07, 0x44, 0xA6, 0xC3, 0xE1, 0xCF, 0x10, 0x71, 0x09, 0x1E, 0x24, 0x41, 0x98, 0x25, 0xFC, 0xFE, 0x06, 0xA1, 0x67, 0x55, 0x1D, 0xD2, 0xE7, 0xA2, 0xF2, 0x4C, 0x1D, 0x00, 0x38, 0x35, 0x53, 0x99, 0x93, 0xA4, 0xDC, 0xB6, 0x4B, 0xB9, 0xA2, 0xAD, 0x32, 0xAE, 0x2C, 0x98, 0xDA, 0xC2, 0xE8, 0xC6, 0x50, 0xF6, 0x81, 0xEA, 0x11, 0x56, 0x9B, 0x0F, 0x3D, 0x57, 0x81, 0xDB, 0x7E, 0xDD, 0xE8, 0xE0, 0x13, 0xD0, 0x7A, 0x97, 0xCE, 0xD4, 0x6E, 0xB2, 0xEF, 0x9F, 0x83, 0x6E, 0x6D, 0x60, 0x4E, 0x01, 0xC8, 0xAA, 0x98, 0x3B, 0x0B, 0x7A, 0x07, 0xC3, 0x43, 0x7B, 0xE8, 0x13, 0xA2, 0x72, 0x7B, 0xCC, 0x57, 0x06, 0x3D, 0x52, 0x9E, 0xA8, 0x05, 0x00, 0x87, 0x1A, 0x2A, 0xD3, 0xDE, 0x28, 0xD7, 0x5A, 0x2B, 0xE7, 0xED, 0x52, 0x8E, 0x5B, 0x0A, 0x94, 0x81, 0xD0, 0x41, 0x60, 0xFC, 0x00, 0xBA, 0x9A, 0x43, 0xF9, 0x30, 0x9D, 0xAA, 0xED, 0xAB, 0x83, 0xE3, 0x2E, 0x1A, 0x79, 0x4D, 0x83, 0x46, 0x9B, 0xC1, 0xA3, 0x00, 0x02, 0xEE, 0x41, 0xDB, 0x64, 0x98, 0xB2, 0x0B, 0xBC, 0x7E, 0x40, 0x6A, 0x35, 0xF0, 0x2D, 0x07, 0x45, 0x01, 0x10, 0x50, 0x53, 0xE5, 0xFA, 0x25, 0x2A, 0xDB, 0x87, 0x28, 0x0F, 0xAB, 0x5C, 0x0E, 0xD6, 0x57, 0xA6, 0x96, 0x55, 0x2E, 0x77, 0x65, 0x84, 0x38, 0xCD, 0x55, 0xB7, 0xA7, 0x38, 0xF4, 0x06, 0x00, 0x74, 0xF9, 0x82, 0x2A, 0x47, 0xAA, 0x40, 0xA9, 0x45, 0x3C, 0x6A, 0x1C, 0x01, 0x15, 0x9F, 0x40, 0x83, 0x5D, 0x50, 0xC7, 0x16, 0xEA, 0x6F, 0x81, 0x76, 0x43, 0xA0, 0xC1, 0x21, 0x88, 0x5E, 0x08, 0x75, 0x63, 0x61, 0x27, 0xD0, 0x70, 0x10, 0x14, 0xCE, 0x86, 0x66, 0x4B, 0x55, 0x6E, 0xD3, 0x51, 0xCA, 0x46, 0xA5, 0x44, 0xDD, 0x16, 0xFB, 0x37, 0x94, 0xAE, 0x06, 0x90, 0xEB, 0x57, 0xFA, 0xBC, 0xB8, 0x39, 0xA4, 0x54, 0x7F, 0x31, 0xF6, 0x52, 0x99, 0x23, 0xE2, 0x18, 0x1D, 0x33, 0x0F, 0xB1, 0xFB, 0x5F, 0xE3, 0x58, 0xD1, 0xFB, 0x84, 0xC1, 0x7D, 0x51, 0xAD, 0x65, 0xBA, 0x56, 0x4E, 0xDD, 0xC0, 0x5A, 0x17, 0x6A, 0x9E, 0x05, 0x97, 0xE5, 0xE0, 0x38, 0x13, 0xFC, 0xC3, 0xC1, 0x61, 0x0A, 0xC4, 0x9A, 0x40, 0x85, 0x97, 0x90, 0x75, 0x4E, 0xF7, 0xAC, 0x4D, 0x14, 0xDC, 0xCD, 0xD3, 0x9F, 0x68, 0xD5, 0x1E, 0xA9, 0x0B, 0xBF, 0x96, 0x73, 0x17, 0x8D, 0x07, 0xD8, 0x56, 0x13, 0x4D, 0x52, 0x72, 0x46, 0xD8, 0x5F, 0x00, 0xC8, 0xFC, 0x53, 0xBD, 0x8B, 0xB8, 0x2C, 0xDF, 0xE1, 0xBB, 0x38, 0x75, 0xA5, 0x43, 0x7B, 0x31, 0x74, 0x5D, 0xB9, 0xF7, 0x62, 0xA7, 0x52, 0x56, 0xF1, 0xA2, 0xFB, 0x01, 0xF3, 0x2A, 0xA2, 0x43, 0xB6, 0x49, 0x53, 0x11, 0x00, 0xAC, 0xCA, 0x82, 0xD9, 0xA5, 0xDA, 0xB6, 0xA5, 0xC2, 0xA0, 0x74, 0x48, 0xF0, 0x61, 0xFD, 0xF3, 0x50, 0xCE, 0x6F, 0x5E, 0x2B, 0x80, 0xF2, 0x99, 0x87, 0x4C, 0xC4, 0xB2, 0xF5, 0x9E, 0x56, 0x14, 0x4B, 0xAF, 0x51, 0xEB, 0x97, 0xE5, 0x61, 0xA5, 0x49, 0x9C, 0x56, 0x27, 0xDF, 0xDE, 0xD3, 0xAC, 0xEE, 0x66, 0x80, 0x9D, 0x43, 0x1B, 0xB4, 0x12, 0xE7, 0xD9, 0xBA, 0x7D, 0x10, 0x47, 0x5E, 0x71, 0x5A, 0x26, 0x06, 0x1F, 0xB1, 0xF7, 0x13, 0x5B, 0xE5, 0xD9, 0x35, 0x14, 0x9D, 0x5E, 0xD9, 0xDE, 0x12, 0x2D, 0x47, 0x56, 0x7C, 0x27, 0x82, 0xBD, 0xA1, 0x71, 0x45, 0xB1, 0xFC, 0x3D, 0x17, 0x0F, 0xB1, 0x62, 0x9D, 0x9E, 0xA5, 0x44, 0xDB, 0x81, 0x33, 0x67, 0x89, 0x15, 0x47, 0xE5, 0x35, 0x16, 0x6D, 0x5E, 0x5D, 0xCF, 0x16, 0xAD, 0xEF, 0xAA, 0x7C, 0xCB, 0xC6, 0xA2, 0x66, 0x84, 0x98, 0x92, 0xDF, 0xC2, 0x0D, 0x60, 0xB5, 0x89, 0xD7, 0x6A, 0x71, 0xEA, 0xDA, 0xE6, 0x41, 0x62, 0xFF, 0xC1, 0x0D, 0x9A, 0x8A, 0x1D, 0xEA, 0xB8, 0x84, 0x89, 0xF5, 0xF3, 0x6A, 0xEE, 0x11, 0xED, 0x7A, 0xD6, 0x4A, 0x12, 0xA1, 0xC1, 0x08, 0x9D, 0xAE, 0xE8, 0x82, 0x8B, 0x5D, 0xE9, 0x2F, 0x00, 0x4E, 0x15, 0x1B, 0xDF, 0x17, 0x6B, 0x0D, 0xEF, 0xBB, 0x5E, 0xAC, 0x3E, 0x3F, 0xBA, 0xA7, 0x58, 0x33, 0x3C, 0x67, 0x8E, 0xE8, 0x18, 0x75, 0xE2, 0x8F, 0xE8, 0xB0, 0x5F, 0xE5, 0x97, 0x5F, 0xA0, 0x2C, 0x67, 0x27, 0xAE, 0xFA, 0xDB, 0xF1, 0x27, 0xC0, 0xE2, 0x8F, 0x9D, 0x7D, 0xC4, 0x91, 0x96, 0x3E, 0xB1, 0x62, 0x70, 0xE5, 0x56, 0x86, 0x62, 0xCB, 0x8B, 0xEE, 0xFB, 0xC4, 0x1A, 0xC5, 0x4D, 0x3B, 0x8B, 0xC6, 0x97, 0x3C, 0xA3, 0x44, 0xF0, 0x9C, 0x6B, 0xF2, 0x56, 0x6C, 0x1E, 0x50, 0x3E, 0x5C, 0x6C, 0xD6, 0xDD, 0xD3, 0x59, 0x6C, 0xDA, 0x69, 0xE0, 0x59, 0xB1, 0xC1, 0xEB, 0xB1, 0x5B, 0x45, 0xF7, 0x0A, 0x69, 0x2F, 0xC5, 0x86, 0x6D, 0x0F, 0x3E, 0x43, 0x34, 0x52, 0xF9, 0xB5, 0x6F, 0x2A, 0x1D, 0x4A, 0x89, 0x09, 0x9B, 0x7A, 0x35, 0x06, 0x98, 0xF6, 0xBD, 0x57, 0x3F, 0x31, 0x34, 0x21, 0xF0, 0xA6, 0xE8, 0xFB, 0xC6, 0xB7, 0xB9, 0xD8, 0x60, 0x4B, 0xC7, 0x0C, 0xB1, 0x7C, 0x7A, 0xB7, 0x8E, 0x22, 0x84, 0x54, 0x31, 0x78, 0x2B, 0xF6, 0x3C, 0x57, 0x36, 0x16, 0xB1, 0xBD, 0x53, 0x9A, 0xD8, 0x23, 0xD0, 0xB3, 0xB3, 0xD8, 0xA5, 0x71, 0x44, 0xA8, 0x18, 0xDC, 0x31, 0x72, 0x08, 0x62, 0xEA, 0xA6, 0xFA, 0x62, 0xE7, 0x2F, 0xD7, 0x5C, 0xC5, 0x70, 0x3B, 0x95, 0x1F, 0x68, 0xA9, 0x6C, 0x58, 0x59, 0x9C, 0x37, 0x75, 0xD8, 0x1F, 0x80, 0xD1, 0x29, 0x03, 0xFF, 0x8A, 0xDD, 0x77, 0xF4, 0xC9, 0x14, 0xDB, 0xDC, 0xE8, 0x73, 0x40, 0xAC, 0xF1, 0x22, 0xBC, 0x9B, 0xA8, 0xE3, 0x31, 0x66, 0x3B, 0x18, 0xDF, 0x83, 0x98, 0x04, 0xCB, 0xC1, 0x00, 0xB3, 0x1D, 0xAB, 0x9D, 0x13, 0x17, 0xAF, 0x6B, 0xEC, 0x20, 0x26, 0xBE, 0xEA, 0xFE, 0x52, 0x5C, 0x39, 0xAB, 0x6F, 0x94, 0xB8, 0xE8, 0xE6, 0x96, 0x0F, 0xE2, 0xC2, 0xB7, 0x7B, 0x06, 0x88, 0x2B, 0x17, 0xAB, 0xDC, 0x84, 0x28, 0xE5, 0xEC, 0xAD, 0xCA, 0x90, 0x6F, 0xE2, 0xF4, 0x36, 0xE3, 0x6B, 0x00, 0x0C, 0xD6, 0x1D, 0x79, 0x4F, 0xEC, 0x64, 0x16, 0xF5, 0x48, 0xAC, 0x5F, 0x65, 0xCA, 0x65, 0xB1, 0x92, 0xE9, 0xA2, 0x8E, 0x22, 0xAC, 0xEA, 0x59, 0xA6, 0xA3, 0xEE, 0x18, 0xD8, 0xB2, 0xA5, 0x76, 0x2C, 0xC0, 0xAE, 0x8F, 0xAD, 0xA6, 0x88, 0xD9, 0x63, 0x82, 0x4A, 0x8B, 0x79, 0x9F, 0xC3, 0xE3, 0xC5, 0x4B, 0x83, 0x17, 0x7D, 0x14, 0x6F, 0xDD, 0xDA, 0x17, 0x21, 0xDE, 0x1E, 0x7E, 0xB4, 0x50, 0xBC, 0xA7, 0xEA, 0x63, 0x0A, 0x3C, 0x94, 0xE7, 0x26, 0x28, 0x17, 0x3F, 0x15, 0xC7, 0x26, 0xCC, 0xF2, 0x07, 0xE8, 0x71, 0x72, 0xE6, 0x57, 0xD1, 0xC3, 0x6A, 0x49, 0x2B, 0xD1, 0x75, 0xC2, 0xC6, 0x1C, 0x11, 0x76, 0x3D, 0x31, 0x6C, 0x6A, 0xB3, 0x11, 0xF6, 0x9F, 0xA9, 0xE9, 0x0D, 0x9A, 0x55, 0x9A, 0xE5, 0x88, 0x07, 0xEA, 0x06, 0x4C, 0x17, 0x4F, 0x37, 0x0D, 0x4D, 0x12, 0x2F, 0xB4, 0x18, 0x35, 0x5C, 0xBC, 0x66, 0xBB, 0x64, 0x98, 0x58, 0x58, 0x7E, 0xB7, 0x93, 0xAA, 0xBF, 0xF2, 0x9B, 0x89, 0xCF, 0x17, 0x9E, 0xEE, 0x2A, 0x16, 0x7B, 0xA9, 0xFC, 0xBF, 0x0F, 0x95, 0x97, 0xFA, 0x8A, 0x43, 0x1B, 0x2F, 0xBB, 0x05, 0x10, 0xA0, 0xB7, 0x3E, 0x47, 0x6C, 0xA6, 0xBF, 0xA7, 0xB2, 0x68, 0x3A, 0x36, 0x63, 0x19, 0xD8, 0xCC, 0x85, 0xEC, 0xA9, 0x76, 0xF1, 0xC6, 0x77, 0x61, 0x5F, 0x33, 0xB7, 0x69, 0x00, 0x79, 0x23, 0x5A, 0xAD, 0x17, 0x0F, 0x6C, 0xEF, 0x52, 0x51, 0x3C, 0x69, 0x16, 0x2A, 0x70, 0xCE, 0x68, 0xC4, 0x1B, 0xF1, 0xF2, 0xF0, 0xD9, 0xB3, 0xC5, 0x1B, 0x1F, 0x96, 0x7F, 0x10, 0xEF, 0x4E, 0xCB, 0xFA, 0x28, 0x3E, 0xDC, 0x9E, 0xFF, 0x4F, 0x7C, 0xBF, 0xE8, 0xFD, 0x22, 0xF1, 0x6B, 0x90, 0xE4, 0x43, 0x89, 0x9D, 0xB8, 0x6E, 0x35, 0x00, 0xAC, 0x4C, 0x55, 0xC6, 0xCF, 0x54, 0xCE, 0x6B, 0x0A, 0x86, 0xC7, 0x61, 0x86, 0x07, 0x98, 0xE7, 0xC2, 0xC4, 0x0C, 0xB0, 0xF6, 0x87, 0x31, 0x2F, 0xA0, 0xCA, 0x56, 0x18, 0xBE, 0x4F, 0xCE, 0x84, 0x0C, 0x4A, 0x0F, 0xBD, 0x21, 0x75, 0x88, 0x49, 0xC4, 0xE0, 0x9F, 0xE0, 0xE5, 0x6F, 0x66, 0x1A, 0x16, 0x21, 0xAF, 0x5C, 0xC3, 0xD7, 0x23, 0xBA, 0xC2, 0x38, 0x77, 0xDD, 0x2B, 0xA3, 0x2E, 0x40, 0xC2, 0x7E, 0x88, 0x2A, 0x80, 0xDD, 0x36, 0x30, 0xBA, 0x05, 0x1C, 0xFB, 0x0C, 0x23, 0xF7, 0xC2, 0x2D, 0x2F, 0x18, 0xB1, 0x03, 0x5E, 0x5C, 0x84, 0x2D, 0x9B, 0x00, 0x60, 0xCD, 0x20, 0xE5, 0xB2, 0xAB, 0xCA, 0x05, 0x05, 0xA0, 0xB3, 0x02, 0x66, 0xAD, 0x00, 0x93, 0x3A, 0x30, 0xE9, 0x01, 0x58, 0x99, 0xC2, 0x58, 0x23, 0xA8, 0xF8, 0x10, 0x22, 0xBE, 0x41, 0x8D, 0x0F, 0xFA, 0xAF, 0x86, 0x98, 0x42, 0x03, 0x5F, 0x93, 0x65, 0x83, 0xFC, 0xA0, 0x6D, 0xA1, 0x99, 0xE9, 0xB0, 0x17, 0xD0, 0x27, 0xC7, 0xE0, 0xDE, 0xF0, 0x5C, 0x98, 0xF2, 0x56, 0x67, 0xDF, 0xC8, 0xE3, 0xB0, 0xDE, 0x0A, 0xA2, 0xF4, 0x61, 0x7F, 0x17, 0x18, 0x39, 0x1E, 0xAE, 0x8E, 0x80, 0xE1, 0x2F, 0xE1, 0xD9, 0x78, 0x18, 0xA6, 0x07, 0xC5, 0x16, 0xB0, 0xB3, 0x1C, 0x00, 0x6C, 0x5A, 0xA9, 0x4C, 0x9A, 0xAA, 0x5C, 0x72, 0x4A, 0x39, 0x3B, 0x11, 0x0C, 0x96, 0xC1, 0xE4, 0x02, 0x28, 0x65, 0x04, 0x63, 0x5B, 0x43, 0xF9, 0xFA, 0x10, 0x31, 0x00, 0xAA, 0xDF, 0xD6, 0x5F, 0x3E, 0xA8, 0x32, 0xD4, 0xDF, 0x60, 0x72, 0x60, 0xC0, 0x66, 0x68, 0x67, 0x64, 0xFA, 0x76, 0xC8, 0x14, 0x18, 0x90, 0xA2, 0x1F, 0x15, 0x9E, 0x06, 0x73, 0xDD, 0x20, 0xB2, 0x19, 0xEC, 0x19, 0x06, 0x23, 0x4B, 0xC3, 0x85, 0x0A, 0x30, 0xBC, 0x0C, 0x3C, 0x9D, 0x06, 0x43, 0x4C, 0xA0, 0x38, 0x10, 0x42, 0x42, 0xE0, 0xD7, 0x76, 0xC8, 0x38, 0x06, 0x00, 0x3B, 0xAB, 0x2B, 0xD7, 0x4F, 0x54, 0xAE, 0xD0, 0x51, 0x2E, 0x88, 0x55, 0x4E, 0x39, 0x08, 0x46, 0x47, 0x20, 0xD2, 0x19, 0xAC, 0xDE, 0x43, 0xFF, 0x69, 0x50, 0x39, 0x4F, 0xCF, 0xB2, 0x9B, 0x3F, 0x38, 0x57, 0x31, 0x6A, 0xD7, 0xD5, 0x0D, 0x5A, 0xE4, 0x18, 0xF6, 0xED, 0x66, 0x05, 0x3D, 0x2B, 0x61, 0xDC, 0xDD, 0x5E, 0xF6, 0x6A, 0xE8, 0xE9, 0x08, 0x3B, 0x1D, 0xA1, 0x4F, 0x1C, 0x5C, 0xD9, 0x06, 0xA1, 0x46, 0xF0, 0x6D, 0x21, 0x74, 0x1F, 0x05, 0x7F, 0x42, 0x21, 0x70, 0xB1, 0xDA, 0x77, 0xF7, 0x77, 0x06, 0x80, 0xEC, 0x2D, 0xCA, 0xED, 0xF5, 0x95, 0xCB, 0xDF, 0x28, 0x67, 0x7C, 0x51, 0x8E, 0xBC, 0x0F, 0xC4, 0x40, 0xDF, 0xB1, 0x60, 0x92, 0x02, 0x81, 0x9F, 0xA0, 0xDC, 0x40, 0xBD, 0xE1, 0x3E, 0x31, 0x60, 0x6F, 0xA0, 0xBF, 0xC6, 0xEB, 0x1E, 0x34, 0x78, 0xA8, 0x53, 0xD6, 0x33, 0x12, 0xFC, 0x97, 0x43, 0x5B, 0x3B, 0x18, 0x7F, 0x10, 0x7C, 0x5C, 0x20, 0xE5, 0xBE, 0x66, 0x11, 0x5C, 0xAA, 0x09, 0xFE, 0x65, 0xE1, 0xAF, 0x2B, 0xB4, 0xB3, 0x57, 0xF9, 0x1E, 0xF7, 0x94, 0xB9, 0x0B, 0x51, 0xC7, 0x51, 0x41, 0xB9, 0xB9, 0xBD, 0x72, 0x61, 0x92, 0x72, 0x62, 0xBC, 0x72, 0xC0, 0x7C, 0x65, 0xE7, 0x2A, 0xA0, 0xB7, 0x11, 0xDA, 0x9C, 0x07, 0xF3, 0x8B, 0xBA, 0xF1, 0x8D, 0xEB, 0x82, 0x6D, 0x91, 0x6E, 0xA3, 0x06, 0x3F, 0xC1, 0x65, 0x1F, 0xD4, 0x5D, 0x06, 0x3E, 0x9B, 0xA0, 0xBE, 0x2F, 0x8C, 0xB6, 0x87, 0x7A, 0x0D, 0x61, 0x83, 0x99, 0xE6, 0x34, 0xB8, 0xD0, 0x0C, 0xDC, 0x35, 0x25, 0xB7, 0x41, 0x9E, 0xB2, 0x5E, 0x8C, 0x72, 0x6F, 0x0E, 0x00, 0x64, 0xAE, 0x53, 0x26, 0x8F, 0x53, 0xC6, 0x0E, 0x51, 0x8E, 0x74, 0x52, 0x76, 0x9B, 0xA5, 0xF4, 0x2A, 0xAF, 0xF3, 0x5A, 0xAC, 0x57, 0x1F, 0xF4, 0x6B, 0xB1, 0xB8, 0xC6, 0x33, 0x28, 0xFD, 0x0C, 0xAA, 0xCD, 0x06, 0xC7, 0x8D, 0x50, 0xE5, 0x2C, 0x78, 0x5D, 0xD5, 0x8C, 0x81, 0xD1, 0x3F, 0xC1, 0x6E, 0x2C, 0x6C, 0xD9, 0xA6, 0xF9, 0x06, 0x2E, 0x0F, 0x81, 0x2A, 0x32, 0x87, 0x2A, 0x0D, 0x95, 0x6E, 0xAA, 0xFC, 0xCA, 0x76, 0xCA, 0xAC, 0x54, 0xE3, 0xA9, 0x00, 0x69, 0x2B, 0x8C, 0xDF, 0x8B, 0x89, 0x6B, 0x4C, 0x86, 0x88, 0x53, 0xAD, 0x4C, 0xF7, 0x8B, 0x03, 0x4E, 0x18, 0xCC, 0x17, 0xFD, 0x82, 0x8C, 0xEA, 0x88, 0xEE, 0x5F, 0xD8, 0x2C, 0x3A, 0x5C, 0x05, 0x00, 0xEB, 0xE6, 0x60, 0x7C, 0x07, 0x4A, 0x6B, 0x56, 0xDB, 0x0D, 0xE6, 0x29, 0xE0, 0x1B, 0x08, 0x66, 0xA6, 0x30, 0xE5, 0x10, 0x18, 0x1E, 0x82, 0x3D, 0xFB, 0x41, 0xFF, 0x2F, 0xDC, 0xAE, 0xA8, 0xD9, 0x12, 0x7E, 0x16, 0x69, 0xE6, 0xAB, 0x7C, 0xA3, 0x71, 0xCA, 0x3D, 0xCF, 0xCA, 0x9B, 0x03, 0xEC, 0xF8, 0x52, 0xE1, 0xBA, 0x38, 0x7F, 0x70, 0x65, 0x77, 0x71, 0xF4, 0x6B, 0xDB, 0xDF, 0x62, 0xB7, 0xAC, 0xB2, 0xD5, 0x45, 0x8F, 0xB7, 0x26, 0x7F, 0x44, 0x97, 0x21, 0x06, 0xD5, 0xC4, 0x72, 0xB6, 0x3A, 0x87, 0x44, 0x00, 0x00, 0xD0, 0x31, 0x75, 0x6C, 0x21, 0x82, 0xEF, 0x37, 0xE4, 0xE3, 0x8E, 0x53, 0x9C, 0x45, 0x5E, 0xEC, 0x69, 0x23, 0xC0, 0x8D, 0xDF, 0xCA, 0x7F, 0xE6, 0x28, 0xFF, 0x29, 0xC5, 0xED, 0x53, 0x6B, 0x1D, 0x01, 0x58, 0xDB, 0xC2, 0xE5, 0x95, 0x38, 0x63, 0x76, 0x6D, 0x6B, 0x71, 0xA8, 0x91, 0xFD, 0x5F, 0xD1, 0x7F, 0xB6, 0x9D, 0x85, 0xE8, 0xEE, 0x6F, 0xDD, 0x44, 0xAC, 0x32, 0xD3, 0xF2, 0x93, 0x68, 0xD0, 0xC1, 0xEA, 0xA9, 0x08, 0xC6, 0xFD, 0x2C, 0xC6, 0x88, 0x06, 0x27, 0x6B, 0x07, 0x89, 0xFA, 0xC3, 0xFD, 0x9A, 0x21, 0xF6, 0x9E, 0x68, 0x2A, 0x1A, 0xBC, 0xDA, 0x16, 0x27, 0xEA, 0xAD, 0x38, 0x3F, 0x4B, 0x34, 0x18, 0xA1, 0xF2, 0x41, 0xA9, 0x4C, 0x1E, 0xD1, 0xC4, 0x00, 0x60, 0xD9, 0xCE, 0xE6, 0x2F, 0xC4, 0x09, 0xD7, 0x1A, 0x7D, 0x15, 0x7B, 0x0F, 0x72, 0xBD, 0x2F, 0x7A, 0xBE, 0xAD, 0x61, 0x2A, 0x3A, 0xE7, 0xD9, 0x6F, 0x15, 0xAD, 0x36, 0x54, 0x5B, 0x26, 0x42, 0xF5, 0x71, 0xBA, 0x47, 0x45, 0xBB, 0xA5, 0x56, 0xF3, 0xC4, 0xB2, 0x3D, 0x1B, 0xF6, 0x14, 0xAD, 0x2E, 0x77, 0xB9, 0x24, 0x5A, 0xE8, 0x4F, 0x14, 0xB0, 0xAC, 0x92, 0xF8, 0x4C, 0xB4, 0x2A, 0x93, 0xFF, 0x0F, 0x31, 0xFD, 0x5F, 0x05, 0xD1, 0x54, 0xD5, 0x85, 0x18, 0x1C, 0x17, 0x97, 0x5F, 0x69, 0x7F, 0x19, 0x60, 0xAE, 0x91, 0x5F, 0x3F, 0x31, 0xCC, 0xC5, 0xA3, 0xBB, 0x18, 0x18, 0xD4, 0x74, 0x8C, 0xD8, 0x64, 0x73, 0x43, 0x33, 0xB1, 0xCA, 0xA9, 0x86, 0xAF, 0x45, 0xBD, 0x93, 0xCD, 0xA3, 0x44, 0x68, 0x1C, 0x63, 0xF6, 0x43, 0x74, 0x2B, 0xB4, 0x33, 0x12, 0x9D, 0xB7, 0x78, 0x08, 0xD4, 0x2A, 0xE9, 0xDF, 0x51, 0x74, 0x74, 0x1D, 0x9D, 0x8C, 0x78, 0x35, 0xD5, 0x1E, 0xF1, 0x97, 0x3A, 0x8E, 0x1A, 0xAB, 0xFF, 0x64, 0x8B, 0x95, 0x32, 0x25, 0x1F, 0xCA, 0x9A, 0x89, 0x8B, 0x3E, 0x75, 0xCB, 0x06, 0x98, 0xF4, 0xA7, 0xDB, 0x23, 0xB1, 0x6F, 0x8D, 0x4E, 0xD5, 0x44, 0x9F, 0xB2, 0xAA, 0xBB, 0x53, 0xA7, 0x42, 0xFB, 0x2E, 0x62, 0x99, 0x79, 0x81, 0x4B, 0x44, 0xE8, 0x1A, 0x61, 0x64, 0x29, 0x06, 0x96, 0x94, 0xBD, 0x2E, 0xFA, 0xB7, 0xA9, 0x3D, 0x49, 0xF4, 0xF3, 0x6E, 0x7B, 0x43, 0x6C, 0x5F, 0x6D, 0x58, 0x35, 0xB1, 0xC3, 0xE8, 0x28, 0x33, 0x35, 0x59, 0x4B, 0xEB, 0x2C, 0xFA, 0x5C, 0x3A, 0x75, 0x51, 0x0C, 0x6C, 0xFE, 0xE7, 0xAB, 0xD8, 0xE4, 0xFF, 0xEA, 0xD7, 0x35, 0x16, 0xE3, 0x0E, 0xAB, 0xFE, 0x4F, 0xE4, 0x92, 0xD0, 0x26, 0x62, 0x90, 0x53, 0xEF, 0xB1, 0x62, 0x0B, 0x9B, 0x90, 0x23, 0xA2, 0xC3, 0xD2, 0xC1, 0xFD, 0x44, 0x18, 0xD1, 0x84, 0x6F, 0x86, 0x26, 0x30, 0xDA, 0xBC, 0xCC, 0x41, 0x80, 0x31, 0x9B, 0xAA, 0x99, 0x8A, 0xE3, 0xFD, 0x1A, 0x3C, 0x10, 0x27, 0xF4, 0xEA, 0x2A, 0x30, 0xF1, 0xC6, 0xC4, 0x1B, 0xE2, 0xCC, 0x15, 0x1B, 0xFE, 0x89, 0x71, 0xB5, 0x53, 0x6A, 0x8B, 0x0B, 0x1D, 0x7E, 0x6C, 0x12, 0xE7, 0x8F, 0x54, 0xF9, 0x13, 0xAF, 0x29, 0x03, 0xB3, 0xC5, 0x29, 0xF6, 0x63, 0x8F, 0x01, 0x0C, 0xA8, 0x3E, 0xD2, 0x58, 0xEC, 0x50, 0x38, 0xAA, 0x58, 0xAC, 0x6B, 0x18, 0x33, 0x57, 0x2C, 0x97, 0x35, 0x67, 0x06, 0xE8, 0xC4, 0x41, 0x42, 0x86, 0xF5, 0x0F, 0xFC, 0x61, 0x4D, 0x81, 0xF3, 0x10, 0x80, 0x2D, 0xD1, 0x6D, 0xA3, 0xC5, 0xD4, 0x40, 0x35, 0x07, 0x4A, 0x8F, 0x0E, 0x4F, 0x14, 0x73, 0x76, 0x8F, 0xDB, 0x2D, 0x9E, 0xA9, 0x95, 0xBA, 0x53, 0x3C, 0x17, 0xA3, 0x9E, 0x8F, 0xAB, 0xF7, 0x7E, 0x3D, 0x41, 0xFC, 0xA1, 0xF2, 0xF3, 0xBC, 0x94, 0xF3, 0xAA, 0x8B, 0x51, 0xCF, 0x67, 0xBE, 0x04, 0xE8, 0x5E, 0x25, 0xD6, 0x5F, 0x6C, 0x75, 0x6E, 0x89, 0x8D, 0xE8, 0x54, 0xBC, 0xCE, 0x4D, 0x84, 0xED, 0xF6, 0x66, 0x17, 0x4B, 0x87, 0x40, 0xF6, 0x0A, 0xA7, 0x33, 0x00, 0x7B, 0xFD, 0x9A, 0x3F, 0x15, 0x73, 0x43, 0xBB, 0x54, 0x15, 0x0F, 0x96, 0xEF, 0x33, 0x49, 0x3C, 0xBD, 0x6A, 0xCC, 0x15, 0xF1, 0x92, 0xF3, 0x62, 0x67, 0xF1, 0x56, 0xCD, 0xDD, 0xA9, 0x62, 0xD1, 0x9B, 0x43, 0x45, 0xE2, 0xB3, 0x43, 0x17, 0x3C, 0xC5, 0xAF, 0xC3, 0x54, 0xFE, 0xAF, 0x76, 0xCA, 0x8B, 0x0D, 0xC4, 0xC1, 0x53, 0x13, 0xBD, 0x00, 0x3A, 0x2D, 0xDD, 0x30, 0x4C, 0x6C, 0x12, 0xBF, 0x7B, 0xA2, 0x68, 0xE4, 0x29, 0x1D, 0x1A, 0xDB, 0x43, 0x90, 0xB9, 0xAF, 0x52, 0x2D, 0x63, 0x6F, 0xC8, 0x31, 0xA8, 0x37, 0x16, 0x60, 0x6F, 0x89, 0x97, 0x91, 0x98, 0x9B, 0x1C, 0x34, 0x5D, 0x3C, 0xF0, 0x3B, 0xE4, 0xBB, 0x78, 0x6A, 0xC3, 0xA8, 0xE6, 0xE2, 0xF9, 0x77, 0xF3, 0xBC, 0xC5, 0xAB, 0x97, 0x57, 0x34, 0x15, 0xEF, 0x8C, 0xDF, 0x6B, 0x25, 0xDE, 0x7B, 0xA5, 0x1E, 0x97, 0x77, 0x3E, 0xEF, 0x7C, 0xC4, 0xAF, 0xEA, 0x38, 0xF8, 0x39, 0x47, 0x89, 0x1B, 0x21, 0xCC, 0x27, 0x97, 0xFF, 0x74, 0xFE, 0x0F, 0x82, 0xE0, 0x01, 0x58, 0xA8, 0x00, 0x00, 0x00, 0xD8, 0x3D, 0xDB, 0xB6, 0xB3, 0x6D, 0xDB, 0xB6, 0x6D, 0xDB, 0xB6, 0xED, 0x0E, 0xD9, 0xB6, 0x6D, 0xDB, 0xB6, 0xED, 0xFE, 0x26, 0x02, 0x45, 0x80, 0x4E, 0xC0, 0x7C, 0xE0, 0x24, 0xF0, 0x1D, 0x4C, 0xC0, 0x6A, 0xE0, 0x10, 0x70, 0x1D, 0x78, 0x07, 0x22, 0xA0, 0xDC, 0x50, 0x4B, 0x68, 0x3A, 0x74, 0x10, 0x7A, 0x07, 0xDB, 0x70, 0x39, 0xB8, 0x0F, 0xBC, 0x0C, 0xBE, 0x82, 0x00, 0x48, 0x66, 0xA4, 0x21, 0x32, 0x1E, 0xD9, 0x89, 0x3C, 0x47, 0x65, 0xB4, 0x18, 0xDA, 0x05, 0x5D, 0x84, 0x9E, 0x41, 0x7F, 0x61, 0x69, 0xB0, 0x5A, 0xD8, 0x70, 0x6C, 0x23, 0x76, 0x1F, 0x67, 0xF0, 0xFC, 0x78, 0x5B, 0x7C, 0x36, 0x7E, 0x14, 0xFF, 0x4C, 0x04, 0x44, 0x65, 0x62, 0x20, 0xB1, 0x9A, 0xB8, 0x49, 0x62, 0x64, 0x4E, 0xB2, 0x39, 0x39, 0x95, 0xDC, 0x4F, 0xBE, 0xA5, 0x2C, 0xAA, 0x2C, 0xD5, 0x9B, 0x5A, 0x4A, 0x5D, 0xA6, 0x01, 0x3A, 0x33, 0xDD, 0x90, 0x1E, 0x4F, 0xEF, 0xA4, 0x9F, 0x33, 0x0A, 0x53, 0x9C, 0xE9, 0xCA, 0x2C, 0x66, 0xCE, 0x32, 0xBF, 0xD9, 0xB4, 0x6C, 0x1D, 0x76, 0x14, 0xBB, 0x85, 0x7D, 0xC4, 0xF1, 0x5C, 0x21, 0xAE, 0x03, 0x37, 0x8F, 0x3B, 0xC1, 0x7D, 0xE7, 0x13, 0xBE, 0x3A, 0x3F, 0x94, 0x5F, 0xCF, 0xDF, 0x15, 0x68, 0x21, 0x9F, 0xD0, 0x46, 0x98, 0x25, 0x1C, 0x11, 0x3E, 0x89, 0x81, 0x58, 0x59, 0x1C, 0x28, 0xAE, 0x16, 0x6F, 0x4A, 0xB8, 0x94, 0x4B, 0x6A, 0x21, 0x4D, 0x93, 0x0E, 0x48, 0xEF, 0x65, 0x47, 0x2E, 0x2F, 0xF7, 0x95, 0x57, 0xC8, 0xD7, 0x14, 0x58, 0xC9, 0xA6, 0x34, 0x55, 0x26, 0x2B, 0x7B, 0x95, 0xD7, 0xAA, 0xA9, 0x96, 0x51, 0x7B, 0xA9, 0x4B, 0xD5, 0xCB, 0x1A, 0xAC, 0x15, 0xD5, 0x86, 0x68, 0xFB, 0xB4, 0xBF, 0x7A, 0x7E, 0xBD, 0xAF, 0xBE, 0x43, 0xFF, 0x66, 0xE4, 0x30, 0xBA, 0x1B, 0x1B, 0x8D, 0x0F, 0x66, 0x26, 0xB3, 0xA3, 0xB9, 0xDA, 0x7C, 0x65, 0xA5, 0xB1, 0x5A, 0x5B, 0x4B, 0xAD, 0x27, 0x76, 0x68, 0x37, 0xB5, 0x17, 0xDB, 0xF7, 0x1C, 0xDB, 0xA9, 0xEF, 0xCC, 0x75, 0x6E, 0xB8, 0xAA, 0x5B, 0xD3, 0x9D, 0xEE, 0x5E, 0xF2, 0x04, 0xAF, 0xB2, 0x37, 0xC9, 0x3B, 0xEB, 0x53, 0x7E, 0x39, 0x7F, 0xAC, 0x7F, 0x3C, 0x40, 0x83, 0x92, 0xC1, 0x88, 0xE0, 0x50, 0x08, 0x84, 0x45, 0xC2, 0xC1, 0xE1, 0xBE, 0xF0, 0x4F, 0x94, 0x3F, 0xEA, 0x17, 0xED, 0x8C, 0x7E, 0xC4, 0xB9, 0xE3, 0x5E, 0xF1, 0xD6, 0xF8, 0x4B, 0x92, 0x3D, 0xE9, 0x96, 0x6C, 0x4C, 0x52, 0xD8, 0x3A, 0x07, 0xE8, 0xBA, 0xFA, 0x00, 0x4E, 0x36, 0x66, 0x1B, 0x9B, 0x8D, 0x6D, 0xA7, 0xB1, 0x6D, 0xDB, 0xB6, 0xCD, 0xC6, 0x36, 0x1B, 0x37, 0xB6, 0x6D, 0x3B, 0x69, 0x6C, 0xDB, 0xF6, 0xDE, 0xFD, 0xF6, 0x60, 0xF5, 0x7F, 0x47, 0xEF, 0xD8, 0x33, 0xBF, 0xB9, 0xBA, 0x26, 0xA3, 0x27, 0xB3, 0x25, 0xAB, 0x24, 0x3B, 0x27, 0xA7, 0x26, 0xB7, 0x24, 0x2F, 0x25, 0x3F, 0xA6, 0xA0, 0xA0, 0x30, 0xA3, 0xF8, 0x4B, 0x71, 0x40, 0x49, 0x42, 0x69, 0x4C, 0x59, 0x40, 0xB9, 0x4B, 0x45, 0x44, 0x65, 0x40, 0x95, 0x4B, 0xB5, 0x4D, 0x4D, 0x40, 0xAD, 0x4B, 0xFD, 0x87, 0x7A, 0x83, 0x06, 0x8F, 0x46, 0x9B, 0x26, 0x8B, 0x66, 0x8D, 0x16, 0x87, 0x56, 0x8B, 0x36, 0x83, 0x76, 0x95, 0x0E, 0x8B, 0x4E, 0x83, 0x2E, 0x9D, 0x6E, 0x99, 0x1E, 0x93, 0x5E, 0x9D, 0x3E, 0x8D, 0x7E, 0x89, 0x01, 0x83, 0x41, 0x8D, 0x21, 0x95, 0x61, 0x89, 0x11, 0x9D, 0x51, 0x95, 0x31, 0x85, 0x71, 0x91, 0x09, 0x9D, 0x49, 0x95, 0x29, 0x85, 0x69, 0x91, 0x19, 0x9D, 0x59, 0x95, 0x39, 0x85, 0x79, 0x89, 0x05, 0x83, 0x45, 0x8D, 0x25, 0x95, 0x65, 0x89, 0x15, 0x93, 0x55, 0x9D, 0x35, 0x8D, 0x75, 0x99, 0x0D, 0x8B, 0x4D, 0x83, 0x2D, 0x93, 0x6D, 0x97, 0x9D, 0x92, 0xDD, 0x9E, 0xBD, 0x99, 0xFD, 0x93, 0x43, 0x84, 0x23, 0x8A, 0x63, 0x9E, 0x13, 0x9B, 0xD3, 0x80, 0xB3, 0x84, 0xF3, 0x8A, 0x8B, 0x9D, 0xCB, 0x97, 0x6B, 0x90, 0xFB, 0x3B, 0xB7, 0x32, 0x77, 0x26, 0xF7, 0xDE, 0x2F, 0xAA, 0x5F, 0x8E, 0xBF, 0xDA, 0x78, 0x40, 0x78, 0x24, 0x78, 0xE2, 0x78, 0x96, 0x79, 0x09, 0x79, 0xCD, 0x79, 0xAB, 0x79, 0x9F, 0xF8, 0xF8, 0xF8, 0x42, 0xF9, 0xA6, 0xF9, 0x31, 0xF8, 0xF5, 0xF8, 0x8B, 0xF9, 0xAF, 0x04, 0x38, 0x04, 0xFC, 0x05, 0x46, 0x04, 0x11, 0x05, 0x35, 0x04, 0xF3, 0x04, 0x4F, 0x84, 0x98, 0x84, 0x3C, 0x85, 0xFA, 0x85, 0xE1, 0x84, 0x95, 0x85, 0xB3, 0x85, 0x0F, 0x44, 0xE8, 0x44, 0xDC, 0x44, 0xBA, 0x45, 0xA1, 0x45, 0x15, 0x44, 0x33, 0x44, 0xF7, 0xC4, 0x68, 0xC4, 0x5C, 0xC4, 0xBA, 0xC4, 0xA1, 0xC4, 0xE5, 0xC5, 0xD3, 0xC5, 0xF7, 0x24, 0x68, 0x24, 0x5C, 0x24, 0xBA, 0x24, 0xA1, 0x25, 0x15, 0x24, 0x33, 0x25, 0xF7, 0xA5, 0x68, 0xA5, 0xDC, 0xA4, 0x7A, 0xA5, 0x61, 0xA5, 0x95, 0xA5, 0xB3, 0xA5, 0x8F, 0x64, 0x18, 0x65, 0xBC, 0x64, 0x06, 0x65, 0x7F, 0xC8, 0xAA, 0xCB, 0xE6, 0xCB, 0x9E, 0xCB, 0xB1, 0xC9, 0xF9, 0xCB, 0x8D, 0xC9, 0xA3, 0xC9, 0xEB, 0xC9, 0x97, 0xCA, 0xDF, 0x29, 0xF0, 0x2A, 0x84, 0x29, 0xCC, 0x29, 0xE2, 0x29, 0x9A, 0x29, 0xD6, 0x29, 0xBE, 0x2B, 0x89, 0x29, 0xC5, 0x2B, 0xAD, 0x2B, 0x93, 0x29, 0x3B, 0x28, 0x77, 0xA8, 0x40, 0xAA, 0x28, 0xA8, 0x64, 0xA9, 0x1C, 0xAA, 0x32, 0xAA, 0x7A, 0xA9, 0x0E, 0xA9, 0x21, 0xA9, 0x69, 0xA9, 0xFD, 0x55, 0xBB, 0x51, 0xE7, 0x56, 0x0F, 0x51, 0x9F, 0xD5, 0xC0, 0xD1, 0x30, 0xD5, 0xA8, 0xD5, 0x78, 0xD3, 0x14, 0xD5, 0x8C, 0xD7, 0x5C, 0xD3, 0x22, 0xD1, 0x32, 0xD3, 0x2A, 0xD7, 0xBA, 0xD2, 0x66, 0xD6, 0x76, 0xD3, 0x6E, 0xD7, 0xFE, 0xD2, 0x11, 0xD2, 0x09, 0xD5, 0x19, 0xD7, 0x45, 0xD0, 0x55, 0xD2, 0x4D, 0xD5, 0x5D, 0xD3, 0x23, 0xD0, 0x33, 0xD2, 0x2B, 0xD6, 0x3B, 0xD3, 0xA7, 0xD7, 0x77, 0xD2, 0x6F, 0xD6, 0x7F, 0x33, 0xE0, 0x33, 0x08, 0x36, 0x18, 0x31, 0x84, 0x37, 0x94, 0x37, 0x4C, 0x32, 0x5C, 0x36, 0xC2, 0x35, 0x32, 0x30, 0x2A, 0x32, 0x3A, 0x31, 0xA6, 0x35, 0x76, 0x30, 0x6E, 0x32, 0x7E, 0x35, 0xE1, 0x35, 0x09, 0x34, 0x19, 0x36, 0x85, 0x33, 0x95, 0x33, 0x4D, 0x34, 0x5D, 0x36, 0xC3, 0x35, 0xD3, 0x37, 0x2B, 0x32, 0x3B, 0x31, 0xA7, 0x35, 0x77, 0x30, 0x6F, 0x32, 0x7F, 0xB5, 0xE0, 0xB5, 0x08, 0xB4, 0x18, 0xB6, 0x84, 0xB3, 0x94, 0xB3, 0x4C, 0xB4, 0x5C, 0xB6, 0xC2, 0xB5, 0xD2, 0xB7, 0x2A, 0xB4, 0x3A, 0xB6, 0xA6, 0xB5, 0x76, 0xB0, 0x6E, 0xB4, 0x7E, 0xB1, 0xE1, 0xB5, 0x09, 0xB4, 0x19, 0xB2, 0x85, 0xB5, 0x95, 0xB3, 0x4D, 0xB4, 0x5D, 0xB2, 0xC3, 0xB1, 0xD3, 0xB3, 0x2B, 0xB4, 0x3B, 0xB6, 0xA7, 0xB1, 0xB7, 0xB7, 0x6F, 0xB4, 0x7F, 0x71, 0xE0, 0x71, 0x08, 0x70, 0x18, 0x74, 0x84, 0x75, 0x94, 0x75, 0x4C, 0x70, 0x5C, 0x74, 0xC2, 0x71, 0xD2, 0x73, 0x2A, 0x70, 0x3A, 0x72, 0xA6, 0x71, 0xB6, 0x77, 0x6E, 0x70, 0x7E, 0x71, 0xE1, 0x71, 0x09, 0x70, 0x19, 0x74, 0x85, 0x75, 0x95, 0x75, 0x4D, 0x70, 0x5D, 0x72, 0xC3, 0x71, 0xD3, 0x73, 0x2B, 0x70, 0x3B, 0x76, 0xA7, 0x71, 0xB7, 0x77, 0x6F, 0x74, 0x7F, 0xF1, 0xE0, 0xF1, 0x08, 0xF0, 0x18, 0xF2, 0x84, 0xF5, 0x94, 0xF5, 0x4C, 0xF4, 0x5C, 0xF2, 0xC2, 0xF1, 0xD2, 0xF7, 0x2A, 0xF4, 0x3A, 0xF6, 0xA6, 0xF5, 0x76, 0xF0, 0x6E, 0xF4, 0x7E, 0xF5, 0xE1, 0xF1, 0x09, 0xF0, 0x19, 0xF0, 0x85, 0xF2, 0x95, 0xF2, 0x8D, 0xF1, 0x9D, 0xF5, 0x43, 0xF5, 0x53, 0xF7, 0xCB, 0xF4, 0xDB, 0xF4, 0x27, 0xF2, 0x37, 0xF1, 0x2F, 0xF1, 0x3F, 0x0B, 0xA0, 0x0B, 0x70, 0x0C, 0x68, 0x0C, 0x78, 0x0E, 0xE4, 0x0E, 0xF4, 0x0D, 0xEC, 0x0D, 0x02, 0x0F, 0x12, 0x0B, 0x8A, 0x08, 0x9A, 0x0C, 0x46, 0x08, 0x56, 0x0C, 0x4E, 0x0E, 0x5E, 0xFE, 0x8D, 0xF3, 0x5B, 0xF7, 0x77, 0xEE, 0xEF, 0xBD, 0x10, 0xB2, 0x10, 0xF3, 0x90, 0xF2, 0x90, 0xCB, 0x50, 0x86, 0x50, 0xA7, 0xD0, 0xC6, 0xD0, 0xE7, 0x30, 0xAE, 0x30, 0x9F, 0xB0, 0xEE, 0x70, 0xD0, 0x70, 0xE1, 0xF0, 0x90, 0xF0, 0xD1, 0x08, 0xB8, 0x08, 0x99, 0x88, 0xD8, 0x88, 0xB9, 0x48, 0xD4, 0x48, 0xD5, 0xC8, 0xB4, 0xC8, 0xD5, 0x28, 0xDC, 0x28, 0xBD, 0xA8, 0xBC, 0xA8, 0xBD, 0x68, 0xD2, 0x68, 0xB3, 0xE8, 0xD2, 0xE8, 0xB3, 0x18, 0xDA, 0x18, 0xDB, 0x98, 0x9A, 0x98, 0xDB, 0x58, 0x96, 0x58, 0xD7, 0xD8, 0x96, 0xD8, 0x97, 0x38, 0xEE, 0x38, 0x9F, 0xB8, 0xAE, 0xF8, 0x6F, 0xF1, 0x82, 0xF1, 0x41, 0xF1, 0x83, 0x09, 0x90, 0x09, 0xE2, 0x09, 0xE1, 0x09, 0xE3, 0x89, 0xF0, 0x89, 0x32, 0x89, 0xB1, 0x89, 0x33, 0x49, 0x48, 0x49, 0x4A, 0x49, 0x49, 0x49, 0x0B, 0xC9, 0xE8, 0xC9, 0xEA, 0xC9, 0xE9, 0xC9, 0xAB, 0x29, 0x38, 0x29, 0xDA, 0x29, 0xD9, 0x29, 0x9B, 0xA9, 0x04, 0xA9, 0xFA, 0xA9, 0x79, 0xA9, 0xBB, 0x69, 0x44, 0x69, 0x46, 0x69, 0x85, 0x69, 0x07, 0xE9, 0x64, 0xE9, 0xA6, 0xE9, 0xC5, 0xE9, 0xC7, 0x19, 0x14, 0x19, 0x16, 0x19, 0xA5, 0x19, 0xA7, 0x99, 0x54, 0x99, 0x56, 0x99, 0xE5, 0x99, 0xE7, 0x59, 0x34, 0x59, 0x36, 0x59, 0x95, 0x59, 0x17, 0xD9, 0x74, 0xD9, 0xB6, 0xD9, 0x55, 0xD9, 0x57, 0x7F, 0x98, 0xFE, 0xB8, 0xFF, 0xE9, 0xCC, 0x01, 0xCB, 0x91, 0xC8, 0x89, 0xC9, 0x99, 0xCF, 0xC5, 0xCA, 0xD5, 0xCD, 0x2D, 0xCC, 0x3D, 0xC9, 0xA3, 0xCB, 0x73, 0xCE, 0x6B, 0xCD, 0xFB, 0xCC, 0x17, 0xCE, 0x0F, 0xCF, 0x9F, 0x2A, 0x40, 0x29, 0x50, 0x2F, 0xF8, 0x53, 0xB0, 0x57, 0x48, 0x51, 0x68, 0x53, 0x58, 0x57, 0xF8, 0x54, 0xF4, 0xAB, 0x28, 0xA0, 0x68, 0xE8, 0x2F, 0xDC, 0x5F, 0xF9, 0xBF, 0xC9, 0x7F, 0x57, 0x8B, 0xF1, 0x8B, 0x8D, 0x8A, 0x4B, 0x8A, 0x2F, 0x4A, 0x98, 0x4A, 0x5C, 0x4B, 0xDA, 0x4B, 0xBF, 0x95, 0x0A, 0x97, 0x86, 0x97, 0x4E, 0x95, 0x21, 0x97, 0xA9, 0x95, 0x65, 0x96, 0x6D, 0x97, 0x93, 0x94, 0x5B, 0x94, 0x57, 0x96, 0xDF, 0x56, 0xB0, 0x55, 0x78, 0x55, 0x74, 0x57, 0x82, 0x57, 0x8A, 0x57, 0x46, 0x57, 0xCE, 0x56, 0xA1, 0x57, 0x69, 0x56, 0xE5, 0x54, 0xED, 0x55, 0x53, 0x54, 0x5B, 0x57, 0xD7, 0x56, 0x3F, 0xD4, 0x70, 0xD5, 0xF8, 0xD6, 0xF4, 0xD7, 0x42, 0xD5, 0x4A, 0xD7, 0xC6, 0xD5, 0x2E, 0xD4, 0x61, 0xD5, 0xE9, 0xD6, 0xE5, 0xD7, 0x1D, 0xD5, 0xD3, 0xD4, 0xDB, 0xD7, 0x37, 0xD6, 0xBF, 0x34, 0xF0, 0x36, 0x04, 0x36, 0x0C, 0x37, 0xC2, 0x35, 0xCA, 0x37, 0x26, 0x35, 0xAE, 0x34, 0xE1, 0x37, 0x19, 0x36, 0x15, 0x37, 0x9D, 0x35, 0x33, 0x34, 0xBB, 0x34, 0xB7, 0x36, 0x7F, 0xB6, 0x08, 0xB6, 0x84, 0xB6, 0x4C, 0xB4, 0x22, 0xB6, 0xAA, 0xB4, 0x66, 0xB4, 0x6E, 0xB5, 0x11, 0xB7, 0x99, 0xB7, 0x55, 0xB6, 0xDD, 0xB4, 0xB3, 0xB5, 0x7B, 0xB5, 0xF7, 0x74, 0x40, 0x74, 0x48, 0x74, 0xC4, 0x74, 0xCC, 0x77, 0x62, 0x76, 0xEA, 0x74, 0xE6, 0x75, 0x1E, 0x76, 0x51, 0x77, 0xD9, 0x77, 0x35, 0x76, 0xBD, 0x76, 0xF3, 0x75, 0x07, 0x77, 0x8F, 0xF6, 0x7C, 0xEF, 0x51, 0xEA, 0xC9, 0xE8, 0xD9, 0xEB, 0xA5, 0xE9, 0x75, 0xE9, 0xED, 0xEA, 0x83, 0xEC, 0x93, 0xEB, 0x4B, 0xEB, 0xDB, 0xE9, 0xA7, 0xEA, 0x77, 0xEA, 0xEF, 0x18, 0x80, 0x18, 0x90, 0x1D, 0x48, 0x1D, 0xD8, 0x1E, 0xA4, 0x1C, 0x74, 0x1C, 0x6C, 0x1F, 0x02, 0x1F, 0x92, 0x19, 0x4A, 0x19, 0xDA, 0x1A, 0xA6, 0x18, 0x76, 0x18, 0x6E, 0x1B, 0x01, 0x1B, 0x91, 0x19, 0x49, 0x19, 0xD9, 0x1A, 0xA5, 0x18, 0x75, 0x18, 0x6D, 0x1B, 0x03, 0x1F, 0x93, 0x19, 0x4B, 0x19, 0xDB, 0x1A, 0xA7, 0x18, 0x77, 0x1C, 0x6F, 0x9F, 0x00, 0x9F, 0x90, 0x99, 0x48, 0x9D, 0xD8, 0x9E, 0xA4, 0x9C, 0x74, 0x9C, 0xEC, 0x98, 0x82, 0x98, 0x92, 0x9D, 0x4A, 0x9D, 0xDA, 0x99, 0xA6, 0x9A, 0x76, 0x9A, 0xEE, 0x98, 0x81, 0x9C, 0x91, 0x9B, 0x49, 0x9B, 0xD9, 0x99, 0xA5, 0x9A, 0x75, 0x9E, 0xED, 0x9C, 0x83, 0x9C, 0x93, 0x9B, 0x4B, 0x9B, 0xDB, 0x99, 0xA7, 0x9E, 0x77, 0x9E, 0xEF, 0xFC, 0x07, 0xF9, 0x4F, 0xEE, 0x5F, 0xDA, 0xBF, 0x9D, 0x05, 0xEA, 0x05, 0xE7, 0x85, 0xCE, 0x45, 0xC8, 0x45, 0xB9, 0xC5, 0xB4, 0xC5, 0x9D, 0x25, 0xAA, 0x25, 0xA7, 0xA5, 0x8E, 0x65, 0xC8, 0x65, 0xB9, 0xE5, 0xB4, 0xE5, 0x9D, 0x15, 0xAA, 0x15, 0xA7, 0x95, 0x8E, 0x55, 0x88, 0x55, 0xD9, 0xD5, 0xB4, 0xD5, 0x9D, 0x35, 0xAA, 0x35, 0xA7, 0xB5, 0x8E, 0x75, 0x88, 0x75, 0xD9, 0xF5, 0xD4, 0xF5, 0xED, 0x0D, 0xAA, 0x0D, 0xA7, 0x8D, 0x8E, 0x4D, 0x88, 0x4D, 0xD9, 0xCD, 0xD4, 0xCD, 0xED, 0x2D, 0xCA, 0x2D, 0xC7, 0xAD, 0xF6, 0x6D, 0x88, 0x6D, 0xD9, 0xED, 0xD4, 0xED, 0xED, 0x1D, 0xCA, 0x1D, 0xC7, 0x9D, 0xF6, 0x5D, 0xF0, 0x5D, 0x99, 0xDD, 0x94, 0xDD, 0xED, 0x3D, 0xCA, 0x3D, 0xC7, 0xBD, 0xF6, 0x7D, 0xF0, 0x7D, 0x99, 0xFD, 0x94, 0xFD, 0xF5, 0x03, 0xCC, 0x03, 0xD9, 0x83, 0xE0, 0x83, 0xB6, 0x83, 0xAB, 0x43, 0xD2, 0x43, 0xAD, 0xC3, 0xF8, 0xC3, 0xE1, 0xC3, 0x8F, 0x23, 0xE6, 0x23, 0x8B, 0xA3, 0x9C, 0xA3, 0x85, 0x63, 0xB8, 0x63, 0x81, 0x63, 0xB7, 0xE3, 0xCA, 0xE3, 0xBD, 0x13, 0xCC, 0x13, 0xD9, 0x93, 0xE0, 0x93, 0xB6, 0x93, 0xEB, 0x53, 0xB2, 0x53, 0xED, 0xD3, 0xC4, 0xD3, 0xD1, 0xD3, 0xAF, 0x33, 0xD6, 0x33, 0xAB, 0xB3, 0xBC, 0xB3, 0xA5, 0xF3, 0xEF, 0xE7, 0x42, 0xE7, 0x1E, 0xE7, 0xD5, 0xE7, 0x07, 0x17, 0x38, 0x17, 0x0A, 0x17, 0xA1, 0x17, 0x5D, 0x17, 0xF7, 0x97, 0x54, 0x97, 0xFA, 0x97, 0x29, 0x97, 0x13, 0x57, 0xA0, 0x57, 0x1C, 0x57, 0x76, 0x57, 0x45, 0x57, 0x6B, 0xD7, 0x48, 0xD7, 0x62, 0xD7, 0x3E, 0xD7, 0xF5, 0xD7, 0xA7, 0x37, 0x84, 0x37, 0xAA, 0x37, 0x51, 0x37, 0x7D, 0x37, 0x2F, 0xB7, 0xF4, 0xB7, 0x26, 0xB7, 0x99, 0xB7, 0x73, 0x77, 0xD0, 0x77, 0xBC, 0x77, 0xCE, 0x77, 0xE5, 0x77, 0x3B, 0xF7, 0x18, 0xF7, 0x32, 0xF7, 0xC1, 0xF7, 0x6D, 0xF7, 0xD7, 0x0F, 0x64, 0x0F, 0x3A, 0x0F, 0x89, 0x0F, 0xA3, 0x8F, 0xDF, 0x1E, 0xD9, 0x1E, 0xAD, 0x1F, 0x0B, 0x1E, 0x57, 0x9E, 0x10, 0x9E, 0x44, 0x9F, 0xBC, 0x9F, 0xEA, 0x9E, 0x4E, 0x9E, 0x09, 0x9E, 0x55, 0x9F, 0xA3, 0x9E, 0xFB, 0x9E, 0x5F, 0x5E, 0xE8, 0x5F, 0x4C, 0x5F, 0xB2, 0x5E, 0xE6, 0x5E, 0x61, 0x5E, 0xF9, 0x5E, 0x5D, 0x5F, 0x2B, 0x5E, 0xF7, 0xDE, 0xB0, 0xDE, 0xE4, 0xDE, 0x42, 0xDE, 0x3A, 0xDE, 0xEE, 0xDE, 0x29, 0xDF, 0xF5, 0xDF, 0x53, 0xDE, 0x27, 0x3F, 0xC0, 0x3E, 0xB8, 0x3E, 0xEC, 0x3F, 0x8A, 0x3F, 0x36, 0x3E, 0x51, 0x3F, 0x25, 0x3F, 0x03, 0x3E, 0x5B, 0x3E, 0x2F, 0xBF, 0x48, 0xBF, 0xB4, 0xBE, 0x12, 0xBE, 0xFE, 0xD7, 0x1B, 0x1F, 0x59, 0xBE, 0x99, 0x7F, 0xCB, 0xFE, 0x36, 0x0B, 0x02, 0x01, 0xC2, 0x09, 0x62, 0x03, 0x92, 0x0F, 0xB2, 0x08, 0x0A, 0x0B, 0xCA, 0x0B, 0xEA, 0x08, 0x5A, 0x0C, 0xBA, 0x06, 0x86, 0x00, 0x26, 0x04, 0xE6, 0x0E, 0x56, 0x01, 0xB6, 0x0D, 0x8E, 0x06, 0x2E, 0x01, 0xEE, 0x03, 0x5E, 0x0B, 0x7E, 0x08, 0x81, 0x0D, 0x21, 0x0B, 0x11, 0x04, 0xD1, 0x0C, 0x71, 0x06, 0x49, 0x08, 0xA9, 0x0C, 0x19, 0x06, 0xD9, 0x09, 0x79, 0x03, 0x45, 0x06, 0xA5, 0x09, 0x15, 0x03, 0xD5, 0x0F, 0xF5, 0x04, 0x4D, 0x03, 0xAD, 0x0F, 0x9D, 0x04, 0x3D, 0x0A, 0xFD, 0x01, 0xC3, 0x04, 0x63, 0x0A, 0x93, 0x09, 0x33, 0x0D, 0x0B, 0x0E, 0xCB, 0x01, 0x6B, 0x0D, 0x9B, 0x07, 0xBB, 0x00, 0x07, 0x0B, 0xC7, 0x0B, 0xE7, 0x04, 0x57, 0x0C, 0xB7, 0x0E, 0x8F, 0x04, 0x2F, 0x02, 0xEF, 0x09, 0x5F, 0x05, 0xBF, 0xF7, 0x1D, 0xE3, 0xBB, 0xF4, 0x77, 0xFF, 0xEF, 0x8D, 0xDF, 0x4F, 0x7F, 0xE0, 0xFF, 0x50, 0xFA, 0x11, 0xFA, 0xA3, 0xE3, 0xC7, 0x0D, 0x02, 0x29, 0x82, 0x26, 0x42, 0x2C, 0x42, 0x3F, 0xC2, 0x33, 0x22, 0x0D, 0xA2, 0x01, 0x62, 0x0A, 0xE2, 0x18, 0xE2, 0x17, 0x12, 0x0B, 0x92, 0x05, 0x52, 0x36, 0xD2, 0x1C, 0x32, 0x14, 0x32, 0x37, 0xB2, 0x3D, 0x72, 0x11, 0x40, 0xF9, 0x1F, 0x28, 0x42, 0x28, 0xEE, 0x28, 0x15, 0x28, 0x3B, 0xA8, 0xE8, 0x00, 0xE3, 0xFD, 0x51, 0x1B, 0x50, 0x4F, 0xD0, 0xF0, 0xD1, 0x94, 0xD0, 0x42, 0xD1, 0x3A, 0xD0, 0x6E, 0xD0, 0xC9, 0xD0, 0xB5, 0xD0, 0xE3, 0xD0, 0x07, 0xD0, 0x5F, 0x30, 0xE8, 0x30, 0x8C, 0x30, 0xD2, 0x30, 0x26, 0x31, 0x41, 0x31, 0xD9, 0x31, 0xAD, 0x30, 0x73, 0x31, 0x17, 0xB0, 0x60, 0xB1, 0xF8, 0xB0, 0x9C, 0xB1, 0x4A, 0xB1, 0x36, 0xB1, 0x51, 0xB0, 0x25, 0xB0, 0x43, 0xB1, 0x07, 0x70, 0x40, 0x71, 0xF8, 0x71, 0x7C, 0x71, 0xDA, 0x71, 0x5E, 0x70, 0xD9, 0x71, 0x5D, 0x70, 0xEB, 0x70, 0xAF, 0xF1, 0xE8, 0xF0, 0xAC, 0xF1, 0xCA, 0xF0, 0x8E, 0xF1, 0x49, 0xF1, 0x8D, 0xF0, 0xF3, 0xF0, 0xB7, 0x08, 0xF0, 0x08, 0xB4, 0x08, 0xD2, 0x09, 0x96, 0x08, 0xD1, 0x08, 0x15, 0x09, 0xE3, 0x08, 0xA7, 0x7E, 0xC2, 0xFF, 0x94, 0xFC, 0x19, 0xF6, 0x73, 0x88, 0x08, 0x82, 0x48, 0x88, 0x28, 0x80, 0xA8, 0x9B, 0xE8, 0x03, 0xA0, 0xBC, 0x07, 0x71, 0x33, 0xF1, 0x23, 0x09, 0x0B, 0x89, 0x23, 0x49, 0x0D, 0xC9, 0x25, 0x29, 0x2D, 0xA9, 0x15, 0x69, 0x29, 0xE9, 0x31, 0x19, 0x19, 0x99, 0x31, 0x59, 0x01, 0xD9, 0x0E, 0x39, 0x01, 0xB9, 0x2E, 0x79, 0x16, 0xF9, 0x1A, 0x05, 0x16, 0x85, 0x1A, 0x45, 0x0A, 0xC5, 0x3F, 0x4A, 0x14, 0x4A, 0x05, 0xCA, 0x38, 0xCA, 0x29, 0xAA, 0xEF, 0x54, 0x52, 0x54, 0x11, 0x54, 0x23, 0xD4, 0x50, 0xD4, 0xA2, 0xD4, 0xC1, 0xD4, 0xFD, 0x34, 0x20, 0x34, 0xFC, 0x34, 0x7E, 0x34, 0x9D, 0x34, 0xEF, 0xB4, 0xDC, 0xB4, 0x1E, 0xB4, 0x2D, 0xB4, 0x4F, 0x74, 0x6C, 0x74, 0xCE, 0x74, 0xF5, 0x74, 0xB7, 0xF4, 0x8C, 0xF4, 0x76, 0xF4, 0x55, 0xF4, 0x17, 0x0C, 0x34, 0x0C, 0x56, 0x0C, 0x65, 0x0C, 0xC7, 0x8C, 0xE4, 0x8C, 0xA6, 0x8C, 0x45, 0x8C, 0xFB, 0x4C, 0xC4, 0x4C, 0x86, 0x4C, 0x79, 0x4C, 0xDB, 0xCC, 0x04, 0xCC, 0xBA, 0xCC, 0xD9, 0xCC, 0xEB, 0x2C, 0x38, 0x2C, 0x9A, 0x2C, 0xE9, 0x2C, 0xCB, 0xAC, 0x18, 0xAC, 0xAA, 0xAC, 0xC9, 0xAC, 0x0B, 0x6C, 0xA8, 0x6C, 0x4A, 0x6C, 0x09, 0x6C, 0xB3, 0xEC, 0x48, 0xEC, 0xF2, 0xEC, 0xB1, 0xEC, 0x53, 0x1C, 0x3F, 0x38, 0x64, 0x00, 0xD2, 0x8F, 0x73, 0xC2, 0x71, 0x4A, 0x72, 0x86, 0x73, 0x0E, 0x73, 0x41, 0x70, 0x09, 0x71, 0x05, 0x70, 0x75, 0x73, 0xBD, 0x73, 0x73, 0x71, 0xBB, 0x73, 0x37, 0x71, 0xDF, 0xFF, 0x62, 0xFA, 0x65, 0xFF, 0xAB, 0xEA, 0xD7, 0x39, 0x0F, 0x15, 0x8F, 0x39, 0xCF, 0x5F, 0x9E, 0x7D, 0x5E, 0x22, 0x5E, 0x03, 0xDE, 0x1C, 0xDE, 0x0D, 0x3E, 0x1C, 0x3E, 0x0D, 0xBE, 0x54, 0xBE, 0x05, 0x7E, 0x54, 0x7E, 0x45, 0xFE, 0x38, 0xFE, 0x29, 0x01, 0x78, 0x01, 0x29, 0x81, 0x70, 0x81, 0x61, 0x41, 0x08, 0x41, 0x61, 0xC1, 0x40, 0xC1, 0x1E, 0xC1, 0x2F, 0x21, 0x1E, 0x21, 0x2F, 0xA1, 0x36, 0xA1, 0x67, 0x61, 0x36, 0x61, 0x17, 0xE1, 0x7A, 0xE1, 0x5B, 0x11, 0x06, 0x11, 0x3B, 0x91, 0x4A, 0x91, 0x73, 0x51, 0x2A, 0x51, 0x0B, 0xD1, 0x62, 0xD1, 0x43, 0x31, 0x12, 0x31, 0x23, 0xB1, 0x3C, 0xB1, 0x6D, 0x71, 0x02, 0x71, 0x1D, 0xF1, 0x2C, 0xF1, 0x55, 0x09, 0x2C, 0x09, 0x75, 0x89, 0x14, 0x89, 0x05, 0x49, 0x54, 0x49, 0x45, 0xC9, 0x78, 0xC9, 0x19, 0x29, 0x04, 0x29, 0x19, 0xA9, 0x28, 0xA9, 0x71, 0x80, 0xFF, 0xE2, 0xD2, 0xA1, 0xD2, 0x43, 0x32, 0x10, 0x32, 0xC2, 0x32, 0x41, 0x32, 0x7D, 0xB2, 0x20, 0xB2, 0x7C, 0xB2, 0xBE, 0xB2, 0x9D, 0xB2, 0xEF, 0x72, 0xDC, 0x72, 0x9E, 0x72, 0xAD, 0x72, 0xCF, 0xF2, 0x1C, 0xF2, 0x6E, 0xF2, 0x4D, 0xF2, 0x0F, 0x0A, 0x2C, 0x0A, 0x4E, 0x0A, 0x75, 0x0A, 0x37, 0x8A, 0x8C, 0x8A, 0xF6, 0x8A, 0xD5, 0x8A, 0x97, 0x4A, 0xB4, 0x4A, 0x36, 0x4A, 0x15, 0x4A, 0x67, 0xCA, 0x54, 0xCA, 0x96, 0xCA, 0xA5, 0xCA, 0xC7, 0x2A, 0x14, 0x2A, 0x66, 0x2A, 0xC5, 0x80, 0x0B, 0x90, 0xAA, 0x9A, 0xA8, 0x16, 0xAA, 0xEE, 0xAB, 0x11, 0xAB, 0x19, 0xA9, 0xE5, 0xAB, 0xED, 0xAA, 0xFF, 0x54, 0x37, 0x50, 0xCF, 0x55, 0xDF, 0x04, 0x7C, 0x40, 0x4D, 0x23, 0x51, 0x63, 0x5A, 0x13, 0x5E, 0x53, 0x5C, 0x33, 0x58, 0xB3, 0x47, 0xF3, 0x5D, 0x8B, 0x43, 0xCB, 0x59, 0xAB, 0x46, 0xEB, 0x5C, 0x9B, 0x42, 0xDB, 0x58, 0x3B, 0x57, 0x7B, 0x5D, 0x07, 0x53, 0x47, 0x59, 0x27, 0x4E, 0x67, 0x42, 0x17, 0x4A, 0x57, 0x48, 0xD7, 0x4F, 0xB7, 0x5D, 0xF7, 0x51, 0x8F, 0x49, 0xCF, 0x56, 0xAF, 0x54, 0xEF, 0x40, 0x9F, 0x50, 0x5F, 0x5B, 0x3F, 0x4D, 0x7F, 0xDE, 0x00, 0xC1, 0x40, 0xD2, 0xE0, 0xB7, 0x41, 0xAF, 0xC1, 0xBB, 0x21, 0x87, 0xA1, 0x93, 0x61, 0x95, 0xE1, 0xA9, 0x11, 0xA9, 0x91, 0xBE, 0x51, 0x96, 0xD1, 0x92, 0x31, 0xB2, 0xB1, 0x8C, 0x71, 0x98, 0xF1, 0x80, 0xF1, 0x97, 0x09, 0x97, 0x89, 0x8B, 0x49, 0x8D, 0xC9, 0x99, 0x29, 0x99, 0xA9, 0xA1, 0x69, 0x36, 0xE0, 0x07, 0x28, 0x66, 0xB2, 0x66, 0xE1, 0x66, 0x03, 0x66, 0x5F, 0xE6, 0x9C, 0xE6, 0xCE, 0xE6, 0xD5, 0xE6, 0xA7, 0x16, 0xA4, 0x16, 0xFA, 0x16, 0x99, 0x16, 0x8B, 0x96, 0x88, 0x96, 0x52, 0x96, 0x21, 0x96, 0xBD, 0x96, 0x6F, 0x56, 0x6C, 0x56, 0x0E, 0x56, 0x15, 0x56, 0x87, 0xD6, 0x3F, 0xAD, 0xB5, 0xAD, 0x53, 0xAC, 0x67, 0x6D, 0xE0, 0x6C, 0x44, 0x6D, 0xFC, 0x6D, 0xDA, 0x6D, 0x1E, 0x6C, 0x19, 0x6C, 0x2D, 0x6D, 0x8B, 0x6C, 0xB7, 0xEC, 0xB0, 0xED, 0x94, 0xED, 0x62, 0xEC, 0x46, 0xED, 0xC1, 0xEC, 0x79, 0xED, 0xDD, 0xED, 0xEB, 0xEC, 0x2F, 0x1C, 0xC8, 0x1D, 0x0C, 0x1C, 0x32, 0x1D, 0x16, 0x1D, 0x11, 0x1D, 0x25, 0x1D, 0x83, 0x1D, 0xBB, 0x1C, 0x9F, 0x9D, 0x98, 0x9D, 0x6C, 0x9C, 0x8A, 0x9D, 0x76, 0x9C, 0x71, 0x9C, 0x55, 0x9C, 0x63, 0x9D, 0x47, 0x5D, 0xC0, 0x00, 0x63, 0x70, 0x73, 0xA9, 0x75, 0x39, 0x75, 0x25, 0x75, 0x35, 0x70, 0xCD, 0x73, 0xDD, 0x71, 0xFB, 0xE9, 0x66, 0xE0, 0x96, 0xEB, 0xB6, 0xED, 0x4E, 0xE8, 0xAE, 0xE7, 0x9E, 0xE3, 0xBE, 0xE5, 0x81, 0xEF, 0xA1, 0xEB, 0xF1, 0xC7, 0x63, 0xC3, 0x13, 0xCF, 0x53, 0xDB, 0x33, 0xCB, 0x73, 0xCD, 0x0B, 0xDB, 0x4B, 0xD3, 0x2B, 0xDD, 0x6B, 0xD9, 0x1B, 0xD3, 0x5B, 0xCD, 0x3B, 0xC5, 0x7B, 0xC1, 0x07, 0xCD, 0x47, 0xD9, 0x27, 0xD1, 0x67, 0xCE, 0x17, 0xC9, 0x57, 0xDE, 0x37, 0xD6, 0x77, 0xCA, 0xEF, 0xBB, 0x9F, 0xB4, 0x5F, 0xA4, 0xDF, 0x98, 0x3F, 0x8C, 0xBF, 0xB8, 0x7F, 0xA8, 0xFF, 0x50, 0x00, 0x78, 0x80, 0x50, 0x40, 0x60, 0x40, 0x6F, 0xC0, 0x57, 0x20, 0x6F, 0xA0, 0x4F, 0x60, 0x7B, 0xE0, 0x6B, 0x10, 0x67, 0x90, 0x5B, 0x50, 0x53, 0xD0, 0x7D, 0x30, 0x73, 0xB0, 0x43, 0x70, 0x75, 0xF0, 0xE5, 0x6F, 0x9A, 0xDF, 0x96, 0xBF, 0x4B, 0x7F, 0x1F, 0x85, 0x90, 0x86, 0x18, 0x85, 0xE4, 0x87, 0x6C, 0x87, 0xE2, 0x87, 0x6A, 0x87, 0x66, 0x84, 0x2E, 0x87, 0xA1, 0x87, 0x29, 0x87, 0x25, 0x84, 0x4D, 0x87, 0x7F, 0x0F, 0x97, 0x0A, 0x0F, 0x0F, 0x1F, 0x8A, 0x00, 0x8F, 0x10, 0x8C, 0xF0, 0x8B, 0xE8, 0x8C, 0x78, 0x8B, 0xE4, 0x88, 0x74, 0x8D, 0xAC, 0x8F, 0xBC, 0x8E, 0xA2, 0x8B, 0xB2, 0x8A, 0x2A, 0x8D, 0x3A, 0x8C, 0x26, 0x8E, 0xD6, 0x8F, 0xCE, 0x8E, 0x5E, 0x8B, 0xC1, 0x8C, 0x51, 0x89, 0x49, 0x88, 0x99, 0x8E, 0x85, 0x8F, 0x95, 0x88, 0x0D, 0x89, 0xED, 0x8F, 0xFB, 0x16, 0xF7, 0x2B, 0xCE, 0x23, 0xAE, 0x29, 0xEE, 0x2E, 0x9E, 0x21, 0xDE, 0x3A, 0xBE, 0x34, 0xFE, 0x20, 0x81, 0x28, 0x41, 0x2F, 0x21, 0x33, 0x61, 0x39, 0x11, 0x35, 0x51, 0x21, 0x31, 0x3A, 0x71, 0x34, 0x09, 0x32, 0x49, 0x30, 0xC9, 0x37, 0xA9, 0x3D, 0xE9, 0x29, 0x99, 0x25, 0xD9, 0x2D, 0xB9, 0x3B, 0x05, 0x3A, 0x45, 0x3E, 0x25, 0x2D, 0x65, 0x3B, 0x95, 0x32, 0xD5, 0x21, 0xB5, 0x35, 0x0D, 0x24, 0x4D, 0x22, 0x2D, 0x3E, 0x6D, 0x25, 0xFD, 0x67, 0xBA, 0x45, 0x7A, 0x6D, 0xFA, 0x4B, 0x06, 0x7F, 0x46, 0x58, 0xC6, 0x4C, 0x26, 0x66, 0xA6, 0x5E, 0x66, 0x71, 0xE6, 0x55, 0x16, 0x5B, 0x96, 0x6F, 0xD6, 0x50, 0xF6, 0xF7, 0x6C, 0x95, 0xEC, 0xAC, 0xEC, 0xBD, 0x3F, 0xD4, 0x7F, 0x1C, 0xFF, 0xB4, 0xE5, 0x80, 0xE4, 0x88, 0xE7, 0xC4, 0xE5, 0x2C, 0xE5, 0xE2, 0xE7, 0x9A, 0xE4, 0x56, 0xE4, 0xDE, 0xE7, 0x71, 0xE7, 0x05, 0xE6, 0x8D, 0xE6, 0x23, 0xE6, 0xAB, 0xE5, 0xFF, 0xC9, 0x3F, 0x28, 0xA0, 0x29, 0x70, 0x2A, 0x68, 0x2B, 0x04, 0x29, 0x14, 0x2F, 0x8C, 0x2D, 0x5C, 0x28, 0xC2, 0x2D, 0x32, 0x2A, 0x2A, 0x2B, 0xBA, 0xF9, 0xCB, 0xF1, 0xD7, 0xF7, 0xEF, 0x60, 0x31, 0x7C, 0xB1, 0x52, 0x71, 0x7A, 0xF1, 0x76, 0x09, 0x79, 0x89, 0x4D, 0x49, 0x43, 0xC9, 0x6B, 0xA9, 0x40, 0x69, 0x18, 0xE0, 0x0E, 0x68, 0x65, 0x5A, 0x65, 0xF9, 0x65, 0xC7, 0xE5, 0xF4, 0xE5, 0x2E, 0xE5, 0xED, 0x15, 0xA0, 0x15, 0xE2, 0x15, 0x31, 0x15, 0x0B, 0x95, 0x38, 0x95, 0x86, 0x95, 0x25, 0x95, 0x97, 0x55, 0xAC, 0x55, 0x5E, 0x55, 0x7D, 0xD5, 0x30, 0xD5, 0x72, 0xD5, 0x29, 0xD5, 0xEB, 0x35, 0xC4, 0x35, 0x96, 0x35, 0x35, 0x35, 0x4F, 0xB5, 0xBC, 0xB5, 0xBF, 0x6B, 0xC7, 0xEB, 0x90, 0xEB, 0x34, 0xEA, 0x72, 0x01, 0x73, 0xA0, 0xAB, 0x77, 0xA9, 0xEF, 0x68, 0x00, 0x6B, 0x90, 0x6C, 0x88, 0x6F, 0x58, 0x6E, 0x24, 0x68, 0x34, 0x6D, 0xAC, 0x6C, 0xBC, 0x6F, 0xE2, 0x6E, 0x0A, 0x6A, 0x1A, 0x6B, 0x46, 0x6A, 0x56, 0x6F, 0xCE, 0x6D, 0x3E, 0x6A, 0xA1, 0x6B, 0x71, 0x6D, 0xE9, 0x6A, 0x85, 0x6F, 0xD5, 0x69, 0xAD, 0x6E, 0xFB, 0xD6, 0xA6, 0xD0, 0x56, 0xD0, 0x76, 0xDF, 0x2E, 0xDA, 0x9E, 0xDA, 0x7E, 0xD2, 0xC1, 0xD5, 0x11, 0xD5, 0xB1, 0xD1, 0x49, 0xDF, 0x19, 0xD0, 0x39, 0xD7, 0x45, 0xD2, 0xE5, 0xDA, 0x35, 0xDC, 0x8D, 0xD5, 0x6D, 0xD5, 0xDD, 0xD9, 0x83, 0xD0, 0x63, 0xD0, 0x53, 0xDF, 0x0B, 0xDE, 0xAB, 0xDA, 0x5B, 0xD2, 0xFB, 0xDA, 0x27, 0xD3, 0x97, 0xD3, 0x77, 0xD3, 0x2F, 0xD4, 0x9F, 0xDC, 0x7F, 0x34, 0xC0, 0x39, 0x10, 0x35, 0xB0, 0x39, 0xC8, 0x30, 0x18, 0x34, 0xB8, 0x30, 0x44, 0x3E, 0xE4, 0x39, 0x34, 0x31, 0x4C, 0x00, 0x98, 0xC2, 0xC0, 0x08, 0xFA, 0x88, 0xC5, 0x48, 0xFB, 0xE8, 0x8F, 0x51, 0x83, 0xD1, 0xFA, 0x31, 0xC8, 0x31, 0x8D, 0xB1, 0x8A, 0xB1, 0xCF, 0x71, 0x85, 0xF1, 0xC2, 0xF1, 0xA7, 0x09, 0xC9, 0x89, 0xEC, 0x89, 0xEB, 0x49, 0xA1, 0xC9, 0x94, 0xC9, 0x93, 0xA9, 0x5F, 0x53, 0x71, 0x53, 0x7B, 0xD3, 0x6C, 0xD3, 0xE1, 0xD3, 0x1B, 0x33, 0x0C, 0x33, 0x41, 0x33, 0x8B, 0x80, 0x21, 0xF8, 0xCC, 0xCE, 0xCE, 0x91, 0xCC, 0xB9, 0xCF, 0x8D, 0xCF, 0x13, 0xCC, 0x3B, 0xCE, 0x0F, 0xFD, 0xC3, 0xFA, 0x67, 0xF3, 0xAF, 0x77, 0x01, 0x75, 0xC1, 0x7C, 0xA1, 0x63, 0x11, 0x61, 0xD1, 0x68, 0xB1, 0x79, 0x09, 0x6E, 0x49, 0x6F, 0xA9, 0x1E, 0x70, 0x03, 0xCD, 0xE5, 0xAA, 0x15, 0xD0, 0x15, 0xD5, 0x95, 0xB2, 0x95, 0xCF, 0x55, 0xC5, 0xD5, 0xBF, 0xAB, 0xAF, 0x6B, 0xB2, 0x6B, 0x05, 0x6B, 0x4F, 0xEB, 0x52, 0xEB, 0x39, 0xEB, 0x77, 0x1B, 0xE2, 0x1B, 0x59, 0x1B, 0xD7, 0x9B, 0x22, 0x9B, 0xE9, 0x9B, 0x17, 0x5B, 0x82, 0x5B, 0x29, 0x5B, 0x67, 0xDB, 0x7C, 0xDB, 0x49, 0xDB, 0x27, 0x3B, 0x3C, 0x3B, 0x09, 0x3B, 0x47, 0xBB, 0xDC, 0xBB, 0x1E, 0xBB, 0xF5, 0xBB, 0x97, 0x7B, 0x14, 0x7B, 0x86, 0x7B, 0x59, 0x7B, 0x4B, 0xFB, 0x48, 0xFB, 0x52, 0xFB, 0x21, 0xFB, 0x3D, 0xFB, 0x6F, 0x07, 0xAC, 0x07, 0x76, 0x07, 0x65, 0x07, 0xFB, 0x87, 0x04, 0x87, 0x1A, 0x87, 0x49, 0x87, 0x53, 0x47, 0x30, 0x47, 0x42, 0x47, 0xBE, 0x47, 0xAD, 0x47, 0x77, 0xC7, 0x74, 0xC7, 0x16, 0xC7, 0x05, 0xC7, 0x9B, 0x27, 0x58, 0x27, 0x4A, 0x27, 0x31, 0x27, 0xA3, 0xA7, 0xE0, 0xA7, 0x7C, 0xA7, 0x1E, 0xA7, 0x0D, 0xA7, 0x57, 0x67, 0x54, 0x67, 0x26, 0x67, 0xB9, 0x67, 0x6B, 0xE7, 0xE8, 0xE7, 0x0A, 0xE7, 0x51, 0xE7, 0xC3, 0x17, 0xA0, 0x17, 0x3C, 0x17, 0xEE, 0x17, 0x0D, 0x17, 0x57, 0x80, 0x0F, 0x98, 0x5C, 0xE6, 0x5E, 0xAE, 0x5F, 0x61, 0x5C, 0x29, 0x5E, 0xC5, 0x5C, 0x8D, 0x5E, 0x83, 0x5F, 0xF3, 0x5F, 0x7B, 0x5D, 0x37, 0x5F, 0xDF, 0xDE, 0xD0, 0xDD, 0x58, 0xDC, 0x14, 0xDD, 0x6C, 0xDF, 0xE2, 0xDE, 0xAA, 0xDD, 0x26, 0xDE, 0x4E, 0xDF, 0xC1, 0xDE, 0x89, 0xDE, 0x05, 0xDE, 0x75, 0xDD, 0xBD, 0xDC, 0xB3, 0xDE, 0x3B, 0xDC, 0x57, 0xDE, 0x9F, 0x3C, 0x90, 0x3C, 0xE8, 0x3F, 0x64, 0x3D, 0x2C, 0x3F, 0xA2, 0x3E, 0xCA, 0x3F, 0x46, 0x3D, 0x8E, 0x3C, 0x81, 0x3F, 0xF1, 0x03, 0x1E, 0xD0, 0xFA, 0xF4, 0xF0, 0xCC, 0xF8, 0x6C, 0xF3, 0x5C, 0xFA, 0x7C, 0xF0, 0x42, 0xF4, 0xA2, 0xFB, 0x92, 0xF1, 0xB2, 0xF4, 0x8A, 0xF2, 0x2A, 0xF7, 0x1A, 0xF5, 0x3A, 0xF2, 0x06, 0xF1, 0x26, 0xF0, 0xE6, 0xFB, 0xD6, 0xF6, 0xF6, 0xF4, 0xCE, 0xFC, 0x6E, 0xFF, 0x5E, 0xF1, 0x7E, 0xF2, 0x41, 0xF6, 0x61, 0xF8, 0x91, 0xF3, 0xB1, 0xFE, 0x89, 0xF9, 0xA9, 0xF2, 0x99, 0xF0, 0x39, 0xFD, 0x05, 0xF7, 0x25, 0xFE, 0xF5, 0xFB, 0xAB, 0xEF, 0x3F, 0xFE, 0xF3, 0x00, 0xFD, 0xBA, 0xE9, 0xDB, 0x1D, 0x08, 0x03, 0x40, 0xFF, 0x52, 0x90, 0x43, 0x50, 0x62, 0x50, 0x7D, 0xD0, 0x6C, 0xD0, 0x15, 0x30, 0x74, 0x30, 0x25, 0xB0, 0x38, 0xB0, 0x49, 0x70, 0x58, 0x70, 0x31, 0xF0, 0x20, 0xF0, 0x1E, 0xF0, 0x0F, 0x08, 0x2E, 0x08, 0x37, 0x88, 0x06, 0x88, 0x1B, 0x48, 0x3A, 0x48, 0x2B, 0xC8, 0x12, 0xC8, 0x03, 0x28, 0x22, 0x28, 0x5D, 0xA8, 0x4C, 0xA8, 0x65, 0x68, 0x34, 0x68, 0x45, 0xE8, 0x58, 0xE8, 0x09, 0x18, 0x18, 0x18, 0x51, 0x98, 0x20, 0x98, 0x1E, 0x98, 0x4F, 0x58, 0x6E, 0x58, 0x77, 0xD8, 0x46, 0xD8, 0x5B, 0x38, 0x7A, 0x38, 0x6B, 0xB8, 0x52, 0xB8, 0x43, 0x78, 0x62, 0x78, 0x7D, 0xF8, 0x6C, 0xF8, 0xB5, 0xEF, 0x98, 0xDF, 0x55, 0xBE, 0x27, 0x7C, 0x9F, 0xFE, 0x01, 0xFF, 0x43, 0x02, 0x60, 0xFD, 0x00, 0x02, 0x08, 0xB0, 0xEA, 0xBD, 0x10, 0x5A, 0x11, 0x1E, 0x11, 0x99, 0x11, 0xED, 0x11, 0x2B, 0x11, 0xCF, 0x90, 0x28, 0x90, 0x4C, 0x90, 0xF2, 0x91, 0xB6, 0x91, 0xF1, 0x90, 0x35, 0x91, 0x53, 0x91, 0x17, 0x50, 0x90, 0x51, 0xE4, 0x50, 0xA2, 0x51, 0xC6, 0x50, 0xA1, 0x50, 0x85, 0x51, 0x03, 0x51, 0xBB, 0x51, 0xDF, 0xD1, 0xB8, 0xD0, 0xDC, 0xD0, 0x1A, 0xD0, 0x6E, 0xD1, 0xE9, 0xD1, 0xAD, 0xD1, 0xCB, 0xD0, 0x8F, 0x30, 0x48, 0x31, 0x0C, 0x31, 0x72, 0x30, 0x36, 0x30, 0xB1, 0x31, 0xD5, 0x31, 0x93, 0x31, 0xE7, 0xB0, 0x10, 0xB1, 0x64, 0xB0, 0x22, 0xB1, 0x46, 0xB0, 0x21, 0xB1, 0x85, 0xB0, 0xFD, 0xB1, 0xBB, 0xB0, 0xDF, 0x70, 0x38, 0x71, 0x5C, 0x71, 0x1A, 0x70, 0x6E, 0x70, 0xE9, 0x71, 0xAD, 0x71, 0xCB, 0x70, 0x8F, 0xF0, 0x48, 0xF1, 0x0C, 0xF1, 0x72, 0xF1, 0x36, 0xF1, 0x71, 0xF0, 0x35, 0xF0, 0xD3, 0xF0, 0xD7, 0x09, 0x88, 0x08, 0xCC, 0x08, 0x2A, 0x08, 0x6E, 0x09, 0xD9, 0x09, 0xBD, 0x09, 0x7B, 0x7F, 0x42, 0xFD, 0x94, 0xFE, 0x19, 0xFF, 0x73, 0x89, 0x08, 0x97, 0xC8, 0x80, 0xA8, 0x98, 0xE8, 0x9C, 0x98, 0x89, 0xD8, 0x8D, 0xB8, 0x83, 0x04, 0x94, 0x44, 0x8C, 0x24, 0x9A, 0x64, 0x8E, 0x14, 0x93, 0x54, 0x87, 0xB4, 0x00, 0xA0, 0x3A, 0x1D, 0x99, 0x13, 0x59, 0x2B, 0xD9, 0x27, 0xB9, 0x30, 0x79, 0x38, 0xF9, 0x34, 0x05, 0x2A, 0x85, 0x26, 0x45, 0x2E, 0xB0, 0xDC, 0xA9, 0x29, 0x1D, 0x28, 0x9B, 0x28, 0xDF, 0xA9, 0x04, 0xA9, 0x42, 0xA9, 0x26, 0xA9, 0x51, 0xA8, 0xD5, 0x81, 0xDD, 0xBE, 0x4F, 0x43, 0x45, 0x63, 0x47, 0xD3, 0x48, 0xF3, 0x46, 0x2B, 0x40, 0x1B, 0x42, 0x3B, 0x41, 0x87, 0x4C, 0xA7, 0x4E, 0x97, 0x4D, 0xB7, 0x47, 0x4F, 0x09, 0xD0, 0xBC, 0x81, 0xFE, 0x95, 0x81, 0x9F, 0x21, 0x84, 0x61, 0x9C, 0x11, 0x89, 0x51, 0x8D, 0x31, 0x8B, 0x71, 0x97, 0x89, 0x82, 0xC9, 0x96, 0xA9, 0x9E, 0xE9, 0x85, 0x99, 0x8F, 0x39, 0x98, 0x79, 0x8C, 0x05, 0x91, 0x45, 0x85, 0x25, 0x93, 0x65, 0x87, 0x95, 0x8C, 0xD5, 0x9A, 0xB5, 0x8E, 0xF5, 0x99, 0x8D, 0x87, 0x2D, 0x88, 0x6D, 0x94, 0xFD, 0x07, 0xBB, 0x32, 0x7B, 0x06, 0xFB, 0x36, 0x07, 0x29, 0x87, 0x15, 0x47, 0x2D, 0xC7, 0x13, 0x27, 0x0F, 0x67, 0x20, 0xE7, 0x08, 0xD7, 0x0F, 0x2E, 0x65, 0xAE, 0x0C, 0xAE, 0x2D, 0x6E, 0x52, 0x6E, 0x2B, 0xEE, 0x5A, 0xEE, 0xA7, 0x5F, 0x3C, 0xBF, 0x82, 0x7E, 0x8D, 0xF0, 0xFC, 0xE0, 0x51, 0xE6, 0xC9, 0xE0, 0xD9, 0xE6, 0x25, 0xE3, 0xB5, 0xE6, 0xAD, 0xE3, 0x7D, 0xE6, 0xE3, 0xE5, 0x0B, 0xE6, 0x1B, 0xE3, 0x47, 0xE4, 0x57, 0xE5, 0xCF, 0xE2, 0xDF, 0x15, 0xA0, 0x14, 0xB0, 0x15, 0xA8, 0x13, 0x78, 0x10, 0xE4, 0x14, 0xF4, 0x16, 0xEC, 0x11, 0x02, 0x13, 0x12, 0x13, 0x8A, 0x14, 0x9A, 0x12, 0x46, 0x16, 0x56, 0x15, 0x4E, 0x17, 0xDE, 0x10, 0xF9, 0x29, 0x62, 0x22, 0x52, 0x02, 0xB0, 0x9B, 0x41, 0xD4, 0x59, 0xB4, 0x45, 0xF4, 0x5D, 0x8C, 0x5F, 0x2C, 0x58, 0x6C, 0x44, 0x1C, 0x1E, 0x58, 0xED, 0x49, 0xE2, 0xCB, 0x12, 0xB8, 0x12, 0xFA, 0x12, 0x85, 0x12, 0xC7, 0x92, 0x34, 0x92, 0xF6, 0x92, 0x0D, 0x92, 0xCF, 0x52, 0x3C, 0x52, 0x01, 0x52, 0x83, 0xD2, 0x30, 0xD2, 0xB2, 0xD2, 0x09, 0xD2, 0x8B, 0x32, 0x38, 0x32, 0x7A, 0x32, 0x05, 0x32, 0xC7, 0xB2, 0x34, 0xB2, 0x0E, 0xB2, 0x8D, 0xB2, 0xAF, 0x72, 0xBC, 0x72, 0x41, 0x72, 0xC3, 0xF2, 0xF0, 0xF2, 0xF2, 0xF2, 0xC9, 0xF2, 0xAB, 0x0A, 0xF8, 0x0A, 0x46, 0x0A, 0x25, 0x0A, 0xE7, 0x00, 0xB3, 0x5D, 0x15, 0xDB, 0x15, 0xBF, 0x94, 0x84, 0x95, 0xC2, 0x95, 0xA6, 0x94, 0x51, 0x94, 0xD5, 0x95, 0xB3, 0x95, 0x77, 0x55, 0xC8, 0x55, 0xAC, 0x55, 0x6A, 0x55, 0x1E, 0x55, 0xB9, 0x55, 0xFD, 0x55, 0x07, 0xD5, 0x60, 0xD5, 0xE4, 0xD4, 0x92, 0xD4, 0x56, 0xD4, 0xF1, 0xD5, 0x8D, 0xD5, 0x4B, 0xD5, 0x2F, 0x35, 0x98, 0x35, 0xDC, 0x35, 0xBA, 0x34, 0xC1, 0x00, 0x5A, 0x47, 0x6B, 0xCE, 0x69, 0x61, 0x68, 0x69, 0x6B, 0xE5, 0x69, 0x1D, 0x6A, 0x53, 0x6B, 0xDB, 0x6B, 0x37, 0x68, 0xBF, 0xE8, 0xF0, 0xEA, 0x04, 0xE9, 0x8C, 0xE8, 0xC2, 0xEB, 0x2A, 0xE8, 0xA6, 0xFC, 0xB7, 0xDF, 0x8D, 0xF5, 0x4A, 0xF4, 0x2E, 0xF4, 0x99, 0xF4, 0x5D, 0xF5, 0xDB, 0xF5, 0xBF, 0x0C, 0x84, 0x0D, 0xC2, 0x0C, 0x26, 0x0C, 0x91, 0x0C, 0x55, 0x0C, 0x33, 0x0C, 0x37, 0x8D, 0x88, 0x8C, 0x4C, 0x8D, 0xCA, 0x8C, 0xCE, 0x8C, 0x69, 0x8C, 0x6D, 0x8C, 0xAB, 0x8C, 0xAF, 0x4C, 0x18, 0x4C, 0x1C, 0x4C, 0xEA, 0x4C, 0xEE, 0x4C, 0x59, 0x4C, 0x5D, 0x4C, 0x9B, 0x4C, 0x9F, 0xCC, 0x38, 0xCC, 0xDC, 0xCD, 0x5A, 0xCD, 0x5E, 0xCD, 0xB9, 0xCD, 0xBD, 0xCD, 0x3B, 0xCC, 0x3F, 0x80, 0x05, 0xEF, 0x67, 0xD1, 0x6D, 0xF9, 0xCD, 0x52, 0xC0, 0x32, 0xC0, 0xB2, 0xCF, 0x0A, 0xCC, 0x4A, 0xC8, 0x2A, 0xD8, 0x6A, 0xC0, 0x1A, 0xC2, 0x5A, 0xC4, 0xFA, 0xB7, 0xF5, 0x90, 0x0D, 0x24, 0xC0, 0xE6, 0x50, 0x9B, 0x61, 0x5B, 0x28, 0x5B, 0x31, 0xDB, 0x30, 0xDB, 0x11, 0x3B, 0x68, 0x3B, 0x71, 0xBB, 0x30, 0xBB, 0x11, 0x7B, 0x68, 0x7B, 0x71, 0xFB, 0x30, 0xFB, 0x11, 0x07, 0x68, 0x07, 0x31, 0x87, 0x50, 0x87, 0x61, 0x47, 0x28, 0x47, 0x51, 0xC7, 0x10, 0xC7, 0x21, 0x27, 0x08, 0x27, 0x11, 0xA7, 0xDF, 0x4E, 0x03, 0xCE, 0xE0, 0xCE, 0x42, 0xCE, 0x81, 0xCE, 0x7D, 0x2E, 0x20, 0x2E, 0x02, 0x2E, 0xFE, 0x2E, 0xDD, 0x2E, 0x9F, 0xAE, 0xBC, 0xAE, 0x3E, 0xAE, 0x1D, 0xAE, 0x6F, 0x6E, 0x5C, 0x6E, 0x1E, 0x6E, 0x2D, 0x6E, 0x4F, 0xEE, 0x6C, 0xEE, 0x2E, 0xEE, 0x0D, 0xEE, 0x77, 0x1E, 0x4C, 0x1E, 0x0E, 0x1E, 0x35, 0x1E, 0x57, 0x9E, 0xB4, 0x9E, 0xD6, 0x9E, 0xE5, 0x9E, 0xA7, 0x5E, 0x14, 0x5E, 0x66, 0x5E, 0x7F, 0xBD, 0xF6, 0xBD, 0x89, 0xBD, 0x0D, 0xBC, 0x73, 0xBD, 0x37, 0x7D, 0xF0, 0x7C, 0xB4, 0x7C, 0x32, 0x7C, 0x96, 0x7D, 0x31, 0x7C, 0x55, 0x7C, 0x13, 0x7D, 0xE7, 0xFC, 0x10, 0xFD, 0x64, 0xFD, 0xA2, 0xFC, 0xC6, 0x01, 0x2A, 0x8B, 0xF9, 0xFF, 0xF6, 0x1F, 0x08, 0x00, 0x0D, 0xE0, 0x0F, 0xF0, 0x0D, 0xE8, 0x08, 0x78, 0x0D, 0xE4, 0x08, 0x74, 0x0D, 0x6C, 0x08, 0xBC, 0x0D, 0x62, 0x08, 0xB2, 0x0F, 0xAA, 0x03, 0xA8, 0xCC, 0x16, 0xEC, 0x1E, 0xDC, 0x16, 0xFC, 0xFE, 0x9B, 0xF7, 0xB7, 0xFF, 0xEF, 0xBE, 0x10, 0xF0, 0x10, 0xD1, 0x90, 0xB0, 0x90, 0xD1, 0x50, 0xB8, 0x50, 0x99, 0xD0, 0x98, 0xD0, 0x99, 0x30, 0xA4, 0x30, 0xA5, 0xB0, 0xA4, 0xB0, 0xC5, 0x70, 0x8C, 0x70, 0x8D, 0xF0, 0x8C, 0xF0, 0xB5, 0x08, 0xDC, 0x08, 0x9D, 0x88, 0x9C, 0x88, 0xED, 0xC8, 0x9F, 0x91, 0x86, 0x91, 0x05, 0x91, 0xFB, 0x51, 0xA4, 0x51, 0x26, 0x51, 0x7F, 0xA3, 0x8E, 0xA2, 0x29, 0xA2, 0xCD, 0x81, 0x45, 0x7F, 0x1A, 0x43, 0x15, 0x63, 0x15, 0x53, 0x1E, 0x73, 0x1E, 0x4B, 0x13, 0x6B, 0x1D, 0x5B, 0x19, 0x7B, 0x11, 0x47, 0x1B, 0x67, 0x13, 0x57, 0x15, 0x77, 0x19, 0x4F, 0x17, 0x6F, 0x1B, 0x5F, 0x15, 0x7F, 0x99, 0x40, 0x97, 0x60, 0x93, 0x50, 0x99, 0x70, 0x91, 0x48, 0x9B, 0x68, 0x9D, 0x58, 0x91, 0x78, 0x96, 0x44, 0x9D, 0x64, 0x99, 0x54, 0x96, 0x74, 0x92, 0x4C, 0x99, 0x6C, 0x9E, 0x5C, 0x9C, 0x7C, 0x98, 0x42, 0x9A, 0x62, 0x9C, 0x52, 0x98, 0xB2, 0x9B, 0xFA, 0x13, 0xD8, 0xF4, 0x39, 0xA9, 0x9B, 0x69, 0x78, 0x69, 0x5A, 0x69, 0x19, 0x00, 0x91, 0x31, 0xD2, 0x55, 0xD3, 0x93, 0xD2, 0xE7, 0x33, 0x90, 0x32, 0xE4, 0x33, 0x62, 0x32, 0x26, 0x32, 0x61, 0x33, 0x25, 0x32, 0x43, 0x33, 0x07, 0xB3, 0xC0, 0xB2, 0x04, 0xB2, 0xFC, 0xB2, 0x3A, 0xB3, 0xDE, 0xB2, 0x39, 0xB2, 0x5D, 0xB3, 0x1B, 0xB2, 0x6F, 0xFF, 0xD0, 0xFF, 0xB1, 0xF9, 0x53, 0xFE, 0xE7, 0x38, 0x87, 0x2C, 0xC7, 0x28, 0x27, 0x2F, 0x67, 0x33, 0x17, 0x37, 0x57, 0x23, 0x37, 0x25, 0xF7, 0x5F, 0x1E, 0x52, 0x9E, 0x6C, 0x5E, 0x24, 0xC0, 0x66, 0xC8, 0x7C, 0xA1, 0x7C, 0xFF, 0xFC, 0xCE, 0xFC, 0xD7, 0x02, 0xAE, 0x02, 0xEF, 0x82, 0xAE, 0xC2, 0x6F, 0x85, 0x82, 0x85, 0xC1, 0x85, 0x43, 0x45, 0x50, 0x45, 0x12, 0x45, 0x91, 0x45, 0x93, 0x7F, 0x7F, 0x00, 0xDB, 0x3E, 0xFE, 0xEF, 0x7C, 0x31, 0x5A, 0xB1, 0x6A, 0x71, 0x5A, 0xF1, 0x4A, 0x09, 0x76, 0x89, 0x76, 0x49, 0x76, 0xC9, 0x66, 0x29, 0x61, 0xA9, 0x41, 0x69, 0x7E, 0xE9, 0x5E, 0x19, 0x49, 0x99, 0x69, 0x59, 0x31, 0x40, 0x68, 0xCA, 0x72, 0xCB, 0xF2, 0xF2, 0xF2, 0xF3, 0x0A, 0x9A, 0x0A, 0x9B, 0x8A, 0xAA, 0x8A, 0xAB, 0x4A, 0x86, 0x4A, 0xFB, 0xCA, 0xDA, 0xCA, 0xDB, 0x2A, 0xE6, 0x2A, 0xE7, 0xAA, 0xC6, 0xAA, 0xC7, 0x6A, 0xF6, 0x6A, 0xF7, 0xEA, 0xD6, 0xEA, 0xD7, 0x1A, 0xEE, 0x1A, 0x9F, 0x9A, 0xAE, 0x9A, 0xAF, 0x5A, 0xFE, 0xDA, 0xC0, 0xDA, 0xFE, 0x3A, 0xF0, 0x3A, 0xD1, 0xBA, 0xD0, 0xBA, 0xD1, 0x7A, 0xD8, 0x7A, 0xE9, 0xFA, 0xE8, 0xFA, 0xE9, 0x06, 0xC4, 0x06, 0xC5, 0x86, 0xA4, 0x86, 0xC5, 0x46, 0x8C, 0x46, 0x8D, 0xC6, 0xCC, 0xC6, 0x8D, 0x26, 0x82, 0x26, 0x83, 0xA6, 0x82, 0xA6, 0x83, 0x66, 0xF2, 0x66, 0x8B, 0xE6, 0xF2, 0xE6, 0x8B, 0x16, 0xFA, 0x16, 0x87, 0x96, 0x86, 0x96, 0xC7, 0x56, 0x8E, 0x56, 0xCF, 0xD6, 0xCE, 0xD6, 0xAF, 0x36, 0xC1, 0xB6, 0xE0, 0xB6, 0xE1, 0x76, 0x98, 0x76, 0xE9, 0xF6, 0xD8, 0xF6, 0xD9, 0x0E, 0xD4, 0x0E, 0xB5, 0x8E, 0xF4, 0x8E, 0xF5, 0x4E, 0x82, 0x4E, 0xC3, 0xCE, 0xA2, 0xCE, 0x63, 0x60, 0xE3, 0xDB, 0x76, 0xD5, 0x76, 0xDD, 0x77, 0xB3, 0x77, 0x7B, 0x02, 0xCC, 0xFE, 0xD6, 0x23, 0xDC, 0x13, 0xDA, 0x33, 0xD6, 0xFB, 0xA3, 0x57, 0xA1, 0x37, 0xB9, 0x77, 0xB9, 0x0F, 0xB7, 0x4F, 0xAF, 0xAF, 0xA0, 0xEF, 0x10, 0x58, 0xF9, 0xB6, 0xFD, 0x75, 0xFD, 0x0F, 0x03, 0x2C, 0x03, 0x0E, 0x03, 0x55, 0x03, 0xA7, 0x83, 0xE4, 0x83, 0xC6, 0x83, 0x79, 0x83, 0x9B, 0x43, 0x38, 0x43, 0xEA, 0x43, 0xC9, 0x43, 0x73, 0xC3, 0x08, 0xC3, 0x32, 0xC3, 0x11, 0xC3, 0xC3, 0x23, 0xE0, 0x23, 0x82, 0x23, 0x7E, 0x23, 0x1D, 0x23, 0xAF, 0xA3, 0xEC, 0xA3, 0xCE, 0xA3, 0x75, 0xA3, 0x57, 0x63, 0xB4, 0x63, 0x56, 0x63, 0x25, 0x63, 0x87, 0xE3, 0xC4, 0xE3, 0x06, 0xE3, 0x39, 0xE3, 0x1B, 0x13, 0xD8, 0x13, 0xEA, 0x13, 0x29, 0x13, 0xFF, 0x26, 0x91, 0x27, 0xE5, 0x27, 0x63, 0x26, 0x27, 0xA6, 0x60, 0xA7, 0xC4, 0xA7, 0x42, 0xA6, 0x06, 0xA6, 0x41, 0xA7, 0xF9, 0xA7, 0x7D, 0xA7, 0x3B, 0xA6, 0x5F, 0x67, 0x38, 0x66, 0x5C, 0x67, 0x1A, 0x67, 0xEE, 0x66, 0x19, 0x67, 0xED, 0x66, 0xAB, 0x66, 0xCF, 0xE7, 0xA8, 0xE6, 0x2C, 0xE6, 0x8A, 0xE7, 0x0E, 0xE6, 0x49, 0xE6, 0x0D, 0xE7, 0xF3, 0xE6, 0xB7, 0xFE, 0xE1, 0xFF, 0xD3, 0xFE, 0x97, 0xF9, 0x6F, 0x65, 0x01, 0x73, 0x41, 0x75, 0x21, 0x79, 0xE1, 0xDF, 0x22, 0xF2, 0xA2, 0xC2, 0x62, 0xDC, 0xE2, 0xD4, 0xD2, 0xF7, 0x25, 0xE9, 0xA5, 0x88, 0xA5, 0xD1, 0x65, 0xE8, 0x65, 0xB1, 0xE5, 0x90, 0xE5, 0x81, 0x15, 0xB0, 0x15, 0xC1, 0x95, 0x80, 0x95, 0x9E, 0x95, 0xAF, 0x55, 0x9E, 0x55, 0xEF, 0xD5, 0x76, 0x80, 0xF4, 0x9C, 0x6B, 0xEE, 0x6B, 0xCD, 0x6B, 0x8F, 0xEB, 0xAC, 0xEB, 0xCE, 0xEB, 0xF5, 0xEB, 0xB7, 0x1B, 0x8C, 0x1B, 0xF6, 0x1B, 0xD5, 0x1B, 0x57, 0x9B, 0x74, 0x9B, 0x36, 0x9B, 0x15, 0x9B, 0x67, 0x5B, 0x54, 0x5B, 0x16, 0x5B, 0xA5, 0x5B, 0xC7, 0xDB, 0xE4, 0xDB, 0xA6, 0xDB, 0x7F, 0xB7, 0x0F, 0x76, 0x48, 0x76, 0x8C, 0x77, 0x0A, 0x76, 0xF6, 0x76, 0x89, 0x76, 0x0D, 0x76, 0xF3, 0x80, 0x16, 0x40, 0xB0, 0xA7, 0xB1, 0x97, 0xB0, 0x37, 0xBE, 0x0F, 0xB6, 0xFF, 0x6B, 0xDF, 0x65, 0xBF, 0x72, 0xFF, 0xF0, 0x80, 0xE0, 0x40, 0xFD, 0x20, 0xFE, 0x60, 0xF4, 0x10, 0xF4, 0x90, 0xFB, 0xD0, 0xF9, 0xB0, 0xF2, 0xF0, 0xF0, 0x88, 0xE0, 0x48, 0xFD, 0x28, 0xFE, 0x68, 0xEC, 0x18, 0xEC, 0xF8, 0xD7, 0xB1, 0xCB, 0x71, 0xD5, 0xF1, 0xD1, 0x09, 0xE1, 0x89, 0xC6, 0x49, 0xC2, 0xC9, 0x38, 0x40, 0x7E, 0xDE, 0x53, 0xB7, 0xD3, 0x9A, 0xD3, 0x93, 0x33, 0xE2, 0x33, 0xED, 0xB3, 0xE4, 0xB3, 0xA9, 0x73, 0xE8, 0x73, 0x81, 0x73, 0xCF, 0xF3, 0x86, 0xF3, 0x8B, 0x0B, 0xF2, 0x0B, 0xFD, 0x8B, 0xF4, 0x8B, 0xF9, 0x4B, 0xF8, 0x4B, 0xD1, 0x4B, 0xBF, 0xCB, 0xD6, 0xCB, 0xDB, 0x2B, 0x9A, 0x2B, 0x93, 0xAB, 0x9C, 0xAB, 0x95, 0x6B, 0xE4, 0x6B, 0xE9, 0xEB, 0x90, 0xEB, 0xEE, 0xEB, 0x97, 0x1B, 0xE6, 0x1B, 0xEB, 0x9B, 0xBF, 0x00, 0xFB, 0xB1, 0x6F, 0x95, 0x6E, 0xA3, 0x6F, 0x87, 0xEF, 0x40, 0xEE, 0xB8, 0xEF, 0x5C, 0xEE, 0xAA, 0xEE, 0x8E, 0xEF, 0x89, 0xEE, 0xB5, 0xEF, 0x53, 0xEE, 0x67, 0x1E, 0x60, 0x1F, 0x84, 0x1F, 0x7C, 0x1F, 0x5A, 0x1E, 0x6E, 0x1F, 0x69, 0x1E, 0xCD, 0x1E, 0xF3, 0x1E, 0xD7, 0x9E, 0xD0, 0x9E, 0xE4, 0x9E, 0xC2, 0x9F, 0x06, 0x9E, 0x3E, 0x9F, 0x39, 0x9E, 0x1D, 0x9F, 0x2B, 0x9F, 0x8F, 0x5E, 0x7E, 0xBE, 0x68, 0xBF, 0xA4, 0xBC, 0xCC, 0xBC, 0xC2, 0xBD, 0x8A, 0xBC, 0xFA, 0xBD, 0xB6, 0xBD, 0xDE, 0xBF, 0xD1, 0xBF, 0x59, 0xBC, 0x15, 0xBE, 0x6D, 0xBE, 0x63, 0xBD, 0x2B, 0xBF, 0xC7, 0xBC, 0x8F, 0x02, 0x05, 0x80, 0xF7, 0xC3, 0xE3, 0xA3, 0xFE, 0xE3, 0xF2, 0x93, 0xF2, 0xD3, 0xE8, 0xF3, 0xCF, 0xE7, 0xCA, 0x17, 0xEA, 0x97, 0xEC, 0x57, 0xF8, 0xD7, 0xC0, 0x7F, 0xFC, 0xE7, 0xFA, 0xE6, 0xFC, 0xAD, 0xFA, 0xDB, 0x09, 0x08, 0x31, 0x88, 0x0E, 0x48, 0x2A, 0xC8, 0x1C, 0x28, 0x3C, 0xA8, 0x28, 0x68, 0x00, 0x68, 0x3B, 0xE8, 0x03, 0x18, 0x3D, 0x98, 0x25, 0x58, 0x21, 0xD8, 0x16, 0x38, 0x16, 0xB8, 0x12, 0x78, 0x0C, 0xF8, 0x08, 0x04, 0x18, 0x04, 0x0F, 0x84, 0x3B, 0x44, 0x1D, 0xC4, 0x39, 0x24, 0x39, 0xA4, 0x01, 0x64, 0x16, 0xE4, 0x12, 0x14, 0x12, 0x94, 0x34, 0x54, 0x08, 0x54, 0x2F, 0xD4, 0x1B, 0x34, 0x1B, 0xB4, 0x03, 0x74, 0x39, 0xF4, 0x21, 0x50, 0xFA, 0xB5, 0x60, 0x52, 0x60, 0x66, 0x61, 0xE1, 0x60, 0x45, 0x61, 0x03, 0x60, 0x3B, 0x60, 0x1F, 0xE1, 0x18, 0xE1, 0xAC, 0x81, 0xCD, 0xBF, 0x0B, 0x8F, 0x0B, 0xAF, 0x06, 0x9F, 0x00, 0x3F, 0xF9, 0x1D, 0x1A, 0xE8, 0xFB, 0xBE, 0xDF, 0x5B, 0xBF, 0xDF, 0xFF, 0xA0, 0xFB, 0x61, 0xF1, 0xA3, 0xF0, 0xC7, 0x16, 0x02, 0x36, 0x82, 0x0A, 0x42, 0x1C, 0xC2, 0x38, 0x22, 0x14, 0xA2, 0x20, 0xA2, 0x0F, 0x62, 0x0B, 0xE2, 0x1D, 0x12, 0x1D, 0xB0, 0xF6, 0x0B, 0x91, 0xB6, 0x90, 0x71, 0x90, 0x55, 0x91, 0xE3, 0x91, 0x27, 0x50, 0xA0, 0x80, 0xAD, 0xEF, 0x8B, 0xD2, 0x8A, 0x72, 0x8F, 0xCA, 0x80, 0x6A, 0x85, 0xFA, 0x17, 0x75, 0x07, 0x0D, 0x0F, 0x4D, 0x1D, 0x2D, 0x11, 0x6D, 0x1A, 0x1D, 0x16, 0x5D, 0x04, 0x3D, 0x00, 0xBD, 0x03, 0xFD, 0x19, 0x83, 0x19, 0xC3, 0x16, 0xA3, 0x0C, 0xE3, 0x00, 0xF3, 0x27, 0xA6, 0x36, 0x66, 0x1A, 0xE6, 0x3C, 0x16, 0x02, 0x96, 0x24, 0x56, 0x08, 0x56, 0x2F, 0xD6, 0x07, 0x36, 0x07, 0xB6, 0x33, 0x76, 0x0D, 0xF6, 0x19, 0x0E, 0x39, 0x8E, 0x21, 0xCE, 0x1F, 0x9C, 0x55, 0x5C, 0x34, 0x5C, 0x05, 0xDC, 0x68, 0xDC, 0x11, 0x3C, 0x70, 0x3C, 0x7E, 0x3C, 0x3F, 0xBC, 0x61, 0x7C, 0x24, 0x7C, 0x2D, 0xFC, 0x22, 0xFC, 0x2B, 0x02, 0x0E, 0x82, 0x40, 0x82, 0x09, 0x42, 0x74, 0x42, 0x7D, 0xC2, 0x32, 0xC2, 0xFB, 0x9F, 0xBC, 0xC0, 0xBE, 0x9F, 0x03, 0x2C, 0xC0, 0x94, 0xA8, 0x86, 0xE8, 0x8D, 0x58, 0x84, 0x38, 0x96, 0x78, 0x85, 0x84, 0x98, 0xC4, 0x86, 0xA4, 0x85, 0x14, 0x94, 0x54, 0x9A, 0x34, 0x85, 0x74, 0x87, 0x8C, 0x9A, 0xCC, 0x85, 0xAC, 0x87, 0x1C, 0x96, 0x5C, 0x85, 0x3C, 0x87, 0xFC, 0x84, 0x82, 0x85, 0xC2, 0x97, 0x62, 0x14, 0x58, 0xF5, 0xBA, 0x94, 0x25, 0x94, 0x77, 0x54, 0x3C, 0x54, 0x61, 0x54, 0x73, 0xD4, 0x78, 0xD4, 0xE6, 0xD4, 0x75, 0xD4, 0x1F, 0x34, 0x62, 0x34, 0x09, 0x34, 0x1B, 0xB4, 0xE4, 0xB4, 0x8E, 0xB4, 0x9D, 0x74, 0xD0, 0x74, 0x8A, 0x00, 0xFF, 0x8F, 0xE9, 0x99, 0xE9, 0x7D, 0xE9, 0x47, 0x18, 0x50, 0x18, 0x74, 0x19, 0x4A, 0x19, 0xEE, 0x19, 0xF9, 0x18, 0x23, 0x18, 0x17, 0x98, 0x08, 0x99, 0xAC, 0x98, 0x9A, 0x98, 0x41, 0x98, 0xA5, 0x99, 0x53, 0x99, 0x77, 0x59, 0x68, 0x59, 0x3C, 0x58, 0x06, 0x58, 0x11, 0x58, 0x35, 0x59, 0x8B, 0x58, 0x6F, 0xD8, 0x7E, 0xB1, 0x85, 0xB2, 0xCD, 0xB1, 0xE3, 0xB1, 0x9B, 0xB3, 0xD7, 0x03, 0xAD, 0x5E, 0x82, 0x23, 0x89, 0x63, 0x8B, 0x93, 0x8A, 0xD3, 0x85, 0xB3, 0x9B, 0x0B, 0x96, 0x4B, 0x85, 0x2B, 0x87, 0xEB, 0x94, 0x9B, 0x95, 0xDB, 0x8F, 0x7B, 0xEC, 0x17, 0xEA, 0x2F, 0xBD, 0x5F, 0xA5, 0xBF, 0xEE, 0x79, 0x78, 0x79, 0xC2, 0x79, 0xE6, 0x79, 0xF1, 0x78, 0xCD, 0x01, 0xEE, 0xBF, 0xF3, 0x89, 0xF1, 0xC5, 0xF3, 0xAD, 0xF1, 0x93, 0xF2, 0xDB, 0xF1, 0xB7, 0x0A, 0x80, 0x09, 0xC8, 0x08, 0xA4, 0x0A, 0xEC, 0x08, 0x52, 0x0B, 0xBA, 0x08, 0x76, 0x0B, 0xC1, 0x08, 0x29, 0x09, 0x65, 0x0B, 0x1D, 0x09, 0x33, 0x09, 0x7B, 0x0B, 0x0F, 0x89, 0x20, 0x8A, 0x68, 0x8A, 0x14, 0x8A, 0x5C, 0x8A, 0x72, 0x8A, 0x06, 0x89, 0x4E, 0x8A, 0x61, 0x88, 0x19, 0x8A, 0x55, 0x88, 0x3D, 0x8A, 0xF3, 0x8B, 0x47, 0x8A, 0x2F, 0x48, 0x10, 0x48, 0x58, 0x4A, 0x34, 0x48, 0x7C, 0x49, 0x4A, 0x48, 0x26, 0x4A, 0x6E, 0x4A, 0x51, 0x48, 0x39, 0x49, 0x75, 0x4A, 0x43, 0x4B, 0x2B, 0xFE, 0xD7, 0xE9, 0x99, 0x64, 0x7C, 0x64, 0x86, 0x65, 0x91, 0x65, 0x75, 0x64, 0x8B, 0x65, 0x6F, 0xE5, 0x78, 0xE4, 0x42, 0xE5, 0xE6, 0xE4, 0xF1, 0xE4, 0xCD, 0xE5, 0xEB, 0xE5, 0x3F, 0x14, 0xC4, 0x15, 0x12, 0x15, 0x36, 0x15, 0x29, 0x15, 0x9D, 0x15, 0xBB, 0x95, 0x60, 0x95, 0x54, 0x94, 0x72, 0x81, 0x75, 0xCE, 0xA6, 0x1C, 0xA0, 0x3C, 0xA1, 0x82, 0xA9, 0x62, 0xA4, 0x52, 0xA5, 0xF2, 0xA2, 0x2A, 0xAC, 0x1A, 0xA7, 0xBA, 0xA6, 0x46, 0xA6, 0xE6, 0xA8, 0xD6, 0xA9, 0x0E, 0xAD, 0xAE, 0xAC, 0x9E, 0xA3, 0x7E, 0xA6, 0xC1, 0xA6, 0x11, 0xA8, 0x31, 0xA9, 0x89, 0xA5, 0x69, 0xAC, 0x59, 0xAD, 0xF9, 0xA6, 0x25, 0xAA, 0x15, 0xAF, 0xB5, 0xAE, 0x4D, 0xAE, 0xED, 0xA8, 0xDD, 0xA1, 0x03, 0xA5, 0xA3, 0xA8, 0x93, 0xA5, 0x73, 0xA8, 0xCB, 0xA8, 0xEB, 0xA5, 0x3B, 0xA8, 0x87, 0xA0, 0xA7, 0xA1, 0x57, 0x00, 0x30, 0x9E, 0x5D, 0x3F, 0x40, 0x7F, 0xCC, 0x00, 0xD5, 0x40, 0xC7, 0xA0, 0xD8, 0xE0, 0xDA, 0x90, 0xD3, 0x30, 0xD0, 0x70, 0xDC, 0x08, 0xD5, 0x48, 0xC7, 0xE8, 0xAF, 0xD1, 0x95, 0x31, 0x87, 0xB1, 0xBF, 0xF1, 0xA8, 0x09, 0x92, 0x89, 0xA6, 0x49, 0xBE, 0xC9, 0xA9, 0x29, 0xB3, 0xA9, 0x97, 0x69, 0xBF, 0x19, 0x9C, 0x99, 0x92, 0x59, 0xA6, 0xD9, 0x81, 0x39, 0xB3, 0x79, 0xA0, 0xF9, 0x8C, 0x05, 0x81, 0x85, 0x8D, 0x45, 0xBB, 0x25, 0x8C, 0xA5, 0x9A, 0x65, 0x91, 0xE5, 0x9D, 0x95, 0x80, 0x55, 0x8C, 0xD5, 0xBA, 0x35, 0x95, 0xB5, 0x9B, 0xF5, 0xA0, 0x0D, 0x8A, 0x8D, 0xBE, 0x4D, 0x95, 0xCD, 0x9B, 0xAD, 0xB8, 0x6D, 0x8A, 0xED, 0x9E, 0x1D, 0xA3, 0x9D, 0xAF, 0xDD, 0xB8, 0x3D, 0xA6, 0xBD, 0xA9, 0x7D, 0xBD, 0xC3, 0x37, 0x07, 0x19, 0x87, 0x0C, 0x87, 0x23, 0x47, 0x16, 0xC7, 0x00, 0xC7, 0x29, 0xA0, 0xCA, 0x9B, 0x3B, 0x35, 0x3A, 0x83, 0x3A, 0xCB, 0x39, 0x67, 0x3A, 0x1F, 0xBB, 0xB0, 0xBA, 0x04, 0xBA, 0x4C, 0xB9, 0xE2, 0xB8, 0x9A, 0xB9, 0x36, 0xB8, 0x7D, 0x73, 0x93, 0x71, 0x4B, 0x77, 0x3B, 0x70, 0x67, 0x72, 0xF7, 0x75, 0x1F, 0xF3, 0x40, 0xF7, 0x30, 0xF2, 0xA8, 0xF6, 0x78, 0xF3, 0x14, 0x03, 0x7A, 0xFC, 0x96, 0x17, 0xB5, 0x97, 0x9B, 0x57, 0xBF, 0x37, 0x82, 0xB7, 0x96, 0x77, 0xB1, 0xF7, 0xAD, 0x0F, 0xAF, 0x4F, 0x84, 0xCF, 0xA2, 0xEF, 0x4F, 0x5F, 0x1B, 0xDF, 0x16, 0x3F, 0x70, 0x3F, 0x79, 0xA0, 0xC5, 0x1F, 0xFA, 0x33, 0xF9, 0xFB, 0xF8, 0x8F, 0x06, 0xA0, 0x06, 0xE8, 0x05, 0x94, 0x05, 0x3C, 0x06, 0x0A, 0x04, 0x46, 0x05, 0x2E, 0x05, 0x11, 0x05, 0xD9, 0x04, 0xB5, 0x06, 0x83, 0x07, 0xCB, 0x05, 0x67, 0x04, 0x1F, 0xFC, 0x66, 0xF8, 0xED, 0xF5, 0x7B, 0x28, 0x04, 0x29, 0x44, 0x3B, 0xA4, 0x38, 0xE4, 0x36, 0x94, 0x27, 0x34, 0x2C, 0x74, 0x3E, 0x0C, 0x3F, 0xCC, 0x3C, 0xAC, 0x3E, 0xEC, 0x33, 0x5C, 0x3C, 0x3C, 0x31, 0x7C, 0x23, 0x82, 0x22, 0xC2, 0x31, 0xA2, 0x33, 0x12, 0x2A, 0x52, 0x21, 0x32, 0x2B, 0xF2, 0x30, 0x8A, 0x21, 0xCA, 0x33, 0x6A, 0x30, 0x1A, 0x21, 0x5A, 0x23, 0xBA, 0x20, 0xFA, 0x29, 0x46, 0x39, 0xA6, 0x2E, 0x16, 0x01, 0x20, 0xF5, 0x68, 0x1C, 0x79, 0x5C, 0x70, 0xDC, 0x4E, 0x3C, 0x6F, 0x7C, 0x66, 0xFC, 0x73, 0x82, 0x4A, 0x42, 0x6D, 0xE2, 0x8F, 0x44, 0xAB, 0xC4, 0xE1, 0x24, 0x92, 0x24, 0xFF, 0xA4, 0x8D, 0x64, 0xCE, 0xE4, 0xE4, 0xE4, 0xDB, 0x14, 0xD9, 0x94, 0xB2, 0x54, 0xC8, 0x54, 0xC3, 0xD4, 0xAE, 0x34, 0xAC, 0x34, 0x97, 0xB4, 0xD9, 0x74, 0xDA, 0xF4, 0xB0, 0xF4, 0x7D, 0x60, 0x21, 0x67, 0x66, 0x3C, 0x66, 0x2A, 0x66, 0x56, 0x66, 0x41, 0x67, 0x19, 0x67, 0x75, 0x67, 0x63, 0x67, 0xBB, 0x64, 0xCF, 0xFC, 0xA1, 0xFA, 0xF3, 0xFB, 0xCF, 0x56, 0x0E, 0x57, 0x4E, 0x52, 0xCE, 0x65, 0xAE, 0x78, 0x6E, 0x5E, 0xEE, 0x5B, 0x9E, 0x72, 0x5E, 0x55, 0x3E, 0x54, 0xBE, 0x7E, 0x7E, 0x6B, 0x01, 0x72, 0x81, 0x65, 0x41, 0x7F, 0x21, 0x4E, 0xA1, 0x73, 0xE1, 0x44, 0x11, 0x49, 0x91, 0x77, 0xD1, 0xFC, 0x5F, 0xEA, 0xBF, 0x41, 0x40, 0x4B, 0x67, 0x2C, 0x0E, 0x07, 0xD6, 0x30, 0x5B, 0x49, 0x74, 0xC9, 0x7E, 0x29, 0x57, 0x69, 0x7C, 0xE9, 0x51, 0x19, 0x4F, 0x59, 0x62, 0xD9, 0x49, 0x39, 0x5F, 0x79, 0x72, 0xF9, 0x59, 0x05, 0x7F, 0x45, 0x4A, 0xC5, 0x79, 0xA5, 0x40, 0x65, 0x6A, 0xE5, 0x45, 0x95, 0x50, 0x55, 0x5A, 0xD5, 0x65, 0xB5, 0x70, 0x75, 0x46, 0xF5, 0x75, 0x8D, 0x68, 0x4D, 0x56, 0xCD, 0x6D, 0xAD, 0x78, 0xED, 0x9F, 0xDA, 0xFB, 0x3A, 0x49, 0x60, 0xFF, 0x3E, 0x02, 0x5C, 0xCD, 0xAF, 0x7F, 0x6E, 0x90, 0x6D, 0x28, 0x6C, 0x78, 0x6B, 0x54, 0x68, 0x2C, 0x6E, 0xFC, 0x68, 0x52, 0x6A, 0x2A, 0x6B, 0xFE, 0xD6, 0xAC, 0xDA, 0x5C, 0xD9, 0x02, 0xD6, 0xA2, 0xD1, 0x52, 0xD3, 0x0A, 0x09, 0xEC, 0xDE, 0xFA, 0x36, 0x98, 0x36, 0xAD, 0xB6, 0xD2, 0xB6, 0xA7, 0x76, 0x91, 0xF6, 0xC4, 0xF6, 0x9D, 0x0E, 0xFA, 0x0E, 0xDF, 0x8E, 0x89, 0x4E, 0xEC, 0x4E, 0xF3, 0xCE, 0xA6, 0x2E, 0x88, 0x2E, 0xA5, 0xAE, 0xBC, 0xAE, 0xAB, 0x6E, 0xDE, 0xEE, 0xA8, 0xEE, 0xB5, 0x1E, 0xCA, 0x1E, 0xF7, 0x9E, 0xA1, 0x5E, 0xB4, 0x5E, 0xE3, 0xDE, 0xFA, 0x3E, 0xD0, 0x3E, 0x85, 0xBE, 0xDC, 0xBE, 0xAB, 0x7E, 0xDE, 0xFE, 0xE8, 0xFE, 0x8D, 0x01, 0x9A, 0x01, 0xAF, 0x81, 0xF1, 0x41, 0x9C, 0x41, 0xCB, 0xC1, 0xB6, 0x21, 0xD8, 0x21, 0xCD, 0xA1, 0xD2, 0xA1, 0x97, 0x61, 0x89, 0xE1, 0x8C, 0xE1, 0xD3, 0x11, 0xAE, 0x91, 0x88, 0x91, 0xB5, 0x51, 0xEA, 0x51, 0xAF, 0xD1, 0x89, 0x31, 0xDC, 0x31, 0x9B, 0xB1, 0xAE, 0x71, 0x84, 0x71, 0xFD, 0xF1, 0xDA, 0x09, 0xD0, 0x09, 0xA5, 0x89, 0xA2, 0x89, 0xA7, 0x49, 0xF1, 0xC9, 0x8C, 0xC9, 0xF3, 0x29, 0xDE, 0xA9, 0xF8, 0xFF, 0xB6, 0x6F, 0xD8, 0xF4, 0xDA, 0x0C, 0xDD, 0x4C, 0xC0, 0xCC, 0xBF, 0x59, 0xF2, 0x59, 0xAF, 0xD9, 0xA9, 0x39, 0xA2, 0x39, 0xD7, 0xB9, 0xB1, 0x79, 0x7C, 0x60, 0xFB, 0x0E, 0xFF, 0xC3, 0xF9, 0x67, 0xFF, 0x6F, 0x60, 0x01, 0x6B, 0xC1, 0x76, 0x61, 0x60, 0x11, 0x6B, 0xD1, 0x6E, 0x71, 0x60, 0x09, 0x7B, 0xC9, 0x7E, 0x69, 0x68, 0x19, 0x77, 0xD9, 0x71, 0x79, 0x74, 0x85, 0x70, 0xC5, 0x75, 0x65, 0x72, 0x95, 0x04, 0x20, 0xE2, 0xFC, 0x1A, 0xF5, 0x5A, 0xE0, 0xDA, 0xEA, 0x3A, 0xD3, 0x7A, 0xC4, 0xFA, 0xDE, 0x06, 0xF7, 0x46, 0xD2, 0xC6, 0xC5, 0xA6, 0xE8, 0x66, 0xCE, 0xE6, 0xF3, 0x96, 0xE2, 0x56, 0x39, 0x50, 0xC3, 0xF5, 0xB6, 0x5B, 0x77, 0x50, 0x76, 0x6C, 0x77, 0x46, 0x76, 0x89, 0x77, 0x7D, 0x77, 0x57, 0xF6, 0x58, 0xF7, 0xC2, 0xF6, 0xBA, 0xF7, 0xB6, 0xF6, 0xBE, 0xF6, 0x09, 0xF6, 0xF9, 0xF6, 0xF5, 0xF6, 0xFD, 0xF6, 0x73, 0xF6, 0xBB, 0xF7, 0xB7, 0xF6, 0xBF, 0x00, 0x0A, 0xF2, 0x1F, 0xE8, 0x1F, 0xF8, 0x1F, 0xE4, 0x1E, 0xF4, 0x1C, 0xEC, 0x1C, 0x82, 0x1C, 0xFE, 0x3C, 0x14, 0x3C, 0x34, 0x3C, 0x0C, 0x3C, 0x2C, 0x38, 0xEC, 0x3F, 0xDC, 0x3F, 0x02, 0x3F, 0x22, 0x3D, 0x12, 0x39, 0x32, 0x3D, 0x0A, 0x39, 0x2A, 0x3E, 0x1A, 0x39, 0x3A, 0x3E, 0x86, 0x39, 0xA6, 0x3C, 0x96, 0x3C, 0xB6, 0x3A, 0x8E, 0x3A, 0xAE, 0x38, 0x9E, 0x3C, 0xBE, 0x3C, 0x41, 0x38, 0x61, 0x38, 0x51, 0x38, 0x71, 0x00, 0x18, 0x59, 0x7F, 0xF2, 0xEF, 0xE4, 0xE1, 0x14, 0xFD, 0x94, 0xFD, 0x54, 0xFD, 0xD4, 0xF3, 0x34, 0xF3, 0xB4, 0xE3, 0x74, 0xE3, 0xF4, 0xF3, 0x8C, 0xE0, 0x4C, 0xE0, 0xCC, 0xF0, 0x2C, 0xE8, 0xAC, 0xF0, 0x6C, 0xE8, 0xEC, 0xE8, 0x1C, 0xE6, 0x9C, 0xEA, 0x5C, 0xEA, 0xDC, 0xE6, 0x3C, 0xE6, 0xBC, 0xE6, 0x7C, 0xF6, 0xFC, 0xEE, 0x02, 0xF5, 0x82, 0xED, 0x42, 0xFD, 0xC2, 0xE3, 0x22, 0xF3, 0xA2, 0xF3, 0x62, 0xF3, 0xF2, 0xDB, 0x25, 0xD1, 0xA5, 0x30, 0xB0, 0x9E, 0x43, 0x2F, 0x4B, 0x2F, 0xC7, 0x2F, 0x2F, 0xAE, 0x10, 0xAE, 0x18, 0xAF, 0x94, 0xAE, 0x5C, 0xAE, 0x52, 0xAF, 0x5A, 0xAF, 0xD6, 0xAE, 0x3E, 0xAE, 0x09, 0xAE, 0x05, 0xAE, 0x8D, 0x01, 0x9E, 0x96, 0x5C, 0x8F, 0x5D, 0x5F, 0xDC, 0x20, 0xDC, 0x30, 0xDE, 0x28, 0xDF, 0xB8, 0xDE, 0xA4, 0xDD, 0xB4, 0xDF, 0x6C, 0xDC, 0x7E, 0xBB, 0x25, 0xBA, 0x15, 0xB9, 0x35, 0xBB, 0x8D, 0xB8, 0xAD, 0xB8, 0x9D, 0xBE, 0xBD, 0xBD, 0x43, 0xBD, 0x63, 0xBF, 0xD3, 0xBC, 0xF3, 0xB9, 0xCB, 0xB9, 0xEB, 0xBB, 0x3B, 0xB8, 0x87, 0xBE, 0xA7, 0xBE, 0x97, 0xB8, 0x37, 0xBA, 0xF7, 0xB9, 0x4F, 0xBC, 0x2F, 0xBB, 0xEF, 0xBD, 0x5F, 0xBA, 0xBF, 0x7C, 0x80, 0x78, 0xC0, 0x7D, 0x60, 0x7A, 0x90, 0x00, 0x16, 0xB7, 0xDB, 0x43, 0xCC, 0x43, 0xE1, 0x43, 0xFB, 0xC3, 0xDC, 0xC3, 0x09, 0xD0, 0xE0, 0x31, 0x1E, 0xE9, 0x1E, 0x85, 0x1F, 0xB5, 0x1E, 0x1D, 0x1F, 0xC3, 0x1F, 0x73, 0x1F, 0x9B, 0x1F, 0xA7, 0x1E, 0x0F, 0x1E, 0xDF, 0x9F, 0x50, 0x9E, 0xA8, 0x9E, 0x04, 0x9E, 0xD4, 0x9F, 0xEC, 0x9E, 0x42, 0x9E, 0xB2, 0x9F, 0x1A, 0x9E, 0xC6, 0x9F, 0x76, 0x9F, 0x5E, 0x9E, 0x91, 0x9E, 0x29, 0x9E, 0xF9, 0x9E, 0x55, 0x81, 0x6D, 0x1E, 0xFC, 0x9C, 0xF9, 0x5C, 0xFF, 0x3C, 0xF6, 0xBC, 0xF3, 0xFC, 0xFC, 0x82, 0xF8, 0x42, 0xFE, 0xC2, 0xFB, 0xA2, 0xF2, 0x62, 0xF3, 0x12, 0xFC, 0x92, 0xF9, 0x52, 0xFF, 0x32, 0xF6, 0xB2, 0xF3, 0xF2, 0xF2, 0x8A, 0xF8, 0x4A, 0x0E, 0x94, 0x7B, 0xD5, 0x57, 0x9B, 0xD7, 0xDF, 0xAF, 0x59, 0xAF, 0x0D, 0xAF, 0xE3, 0xAF, 0x7B, 0xAF, 0xAF, 0x6F, 0xC8, 0x6F, 0x94, 0xC0, 0x82, 0x57, 0x7F, 0xB3, 0x7F, 0x0B, 0x7D, 0xCB, 0x79, 0x6B, 0x7A, 0x9B, 0x7A, 0x3B, 0x7C, 0xFB, 0x78, 0x47, 0x7B, 0xA7, 0x79, 0x17, 0x7E, 0xD7, 0x7E, 0x77, 0x7A, 0x8F, 0x7C, 0x2F, 0x78, 0x6F, 0x7B, 0x9F, 0x7B, 0x3F, 0xFD, 0x00, 0xF9, 0xC0, 0xFA, 0x60, 0xFC, 0x90, 0xF8, 0x30, 0xF8, 0x70, 0xFF, 0x88, 0xFB, 0x28, 0xF9, 0xE8, 0xF9, 0x58, 0xFE, 0xB8, 0xFA, 0x84, 0xFA, 0x24, 0xF8, 0x64, 0xFF, 0x94, 0xFB, 0x34, 0xFB, 0xF4, 0xFB, 0x4C, 0xFD, 0xAC, 0xFE, 0x1C, 0xFE, 0xDC, 0xFA, 0x7C, 0xFA, 0xFA, 0xF1, 0x45, 0xF6, 0xC5, 0xFB, 0xA5, 0xF6, 0x65, 0xF7, 0x15, 0xFA, 0x95, 0xF3, 0xD5, 0xFC, 0x35, 0xFD, 0x75, 0xF4, 0xF5, 0x65, 0x63, 0xEA, 0xCC, 0xF4, 0xDF, 0x7D, 0x30, 0xE0, 0xFF, 0xF3, 0xF3, 0xDE, 0xDF, 0xFE, 0xCF, 0xF3, 0xFF, 0xF9, 0x0F, 0x0E, 0xFC, 0x80, 0xC3, 0xFF, 0x2D, 0xE0, 0x5B, 0x2F, 0x08, 0x08, 0x88, 0x20, 0x48, 0x20, 0x48, 0x1F, 0x28, 0x28, 0xA8, 0x10, 0x68, 0x10, 0x68, 0x3F, 0x18, 0x38, 0x98, 0x30, 0x58, 0x30, 0xD8, 0x20, 0x38, 0x04, 0xB8, 0x08, 0x78, 0x08, 0xF8, 0x10, 0x04, 0x24, 0x84, 0x18, 0x44, 0x28, 0xC4, 0x30, 0x24, 0x14, 0xA4, 0x38, 0x64, 0x18, 0xE4, 0x08, 0x14, 0x0C, 0x94, 0x04, 0x54, 0x38, 0xD4, 0x18, 0x34, 0x2C, 0xB4, 0x24, 0x74, 0x24, 0xF4, 0x38, 0x0C, 0x1C, 0x8C, 0x34, 0x4C, 0x14, 0xCC, 0x04, 0x2C, 0x3C, 0xAC, 0x0C, 0x6C, 0x34, 0xEC, 0x24, 0xDC, 0x0F, 0x38, 0x59, 0xB8, 0x18, 0xB8, 0x69, 0x78, 0x04, 0x78, 0x39, 0xF8, 0x38, 0xF8, 0x99, 0xEF, 0x88, 0xDF, 0x15, 0xBE, 0xC7, 0x7F, 0x9F, 0xFD, 0x81, 0xF4, 0x43, 0xF1, 0x47, 0xC2, 0x8F, 0x39, 0x04, 0x14, 0x04, 0x25, 0x84, 0x44, 0x84, 0x7F, 0x88, 0xA8, 0x88, 0xCA, 0x88, 0xC9, 0x88, 0x0B, 0x48, 0x68, 0x48, 0xAA, 0x48, 0x29, 0x48, 0x8B, 0xC8, 0xE8, 0xC8, 0x6A, 0x40, 0x2B, 0x58, 0x42, 0xC1, 0x44, 0x51, 0x47, 0x49, 0x43, 0x59, 0x41, 0xC5, 0x42, 0xD5, 0x40, 0xCD, 0x40, 0x5D, 0x45, 0xC3, 0x46, 0xD3, 0x42, 0xCB, 0x44, 0x5B, 0x43, 0xC7, 0x41, 0xD7, 0x46, 0xCF, 0x42, 0x5F, 0xC7, 0xC0, 0xC3, 0xD0, 0xC1, 0xC8, 0xC6, 0xD8, 0xC4, 0xC4, 0xC7, 0xD4, 0xC5, 0xCC, 0xC1, 0xDC, 0xC2, 0x22, 0xC0, 0xD2, 0xC3, 0xCA, 0xC5, 0xDA, 0xC6, 0x26, 0xC4, 0x36, 0xC0, 0xCE, 0xC3, 0xDE, 0xC1, 0x21, 0x02, 0xFC, 0x20, 0x1F, 0x67, 0x0F, 0x97, 0x18, 0xD7, 0x08, 0xB7, 0x10, 0x77, 0x1F, 0x8F, 0x04, 0xCF, 0x18, 0xAF, 0x08, 0xEF, 0x00, 0x9F, 0x14, 0xDF, 0x14, 0xFF, 0x2F, 0xFE, 0x21, 0x01, 0x39, 0xD0, 0x09, 0x8A, 0x09, 0x8E, 0x09, 0x29, 0x08, 0xCD, 0x09, 0x4B, 0x09, 0x4F, 0x7E, 0x52, 0xFE, 0xB4, 0xF8, 0x59, 0xF6, 0xF3, 0x94, 0x88, 0x8A, 0xC8, 0x8A, 0xA8, 0x9C, 0xE8, 0x8C, 0x98, 0x86, 0xD8, 0x9A, 0xB8, 0x82, 0xF8, 0x82, 0x84, 0x16, 0xB0, 0x84, 0x2A, 0x92, 0x4B, 0x52, 0x3A, 0x52, 0x5B, 0xD2, 0x6A, 0xD2, 0x2B, 0x32, 0x7A, 0x32, 0x7B, 0xB2, 0x1A, 0xB2, 0x6B, 0x72, 0x46, 0x72, 0x07, 0xF2, 0x5A, 0xF2, 0x5B, 0x0A, 0x26, 0x0A, 0x47, 0x8A, 0x7A, 0x8A, 0x3B, 0x4A, 0x66, 0x4A, 0x27, 0xCA, 0x06, 0xCA, 0x7B, 0x2A, 0x16, 0x2A, 0x17, 0xAA, 0x46, 0xAA, 0x07, 0x6A, 0x36, 0x6A, 0x57, 0xEA, 0x26, 0xEA, 0x27, 0x1A, 0x76, 0x1A, 0x37, 0x9A, 0x16, 0x9A, 0x67, 0x5A, 0x0E, 0x5A, 0x77, 0xDA, 0x56, 0xDA, 0x17, 0x3A, 0x4E, 0x3A, 0x4F, 0xBA, 0x36, 0xBA, 0x57, 0x7A, 0x6E, 0x7A, 0x2F, 0xFA, 0x76, 0xFA, 0x77, 0x86, 0x5F, 0x0C, 0xDE, 0x0C, 0x1D, 0x0C, 0x1F, 0x8C, 0x3C, 0x8C, 0x3E, 0x8C, 0x5D, 0x8C, 0x9F, 0x4C, 0xBC, 0x4C, 0x7E, 0x4C, 0xDD, 0x4C, 0x5F, 0xCC, 0xFC, 0xCC, 0xFE, 0xCC, 0x3D, 0x2C, 0x20, 0x2C, 0x02, 0x2C, 0x01, 0x2C, 0xBD, 0xAC, 0xA0, 0xAC, 0x82, 0xAC, 0x81, 0xAC, 0xFD, 0x6C, 0x60, 0x6C, 0x42, 0x6C, 0xC1, 0x6C, 0x03, 0xEC, 0xE0, 0xEC, 0x22, 0xEC, 0xBF, 0xD9, 0x07, 0x39, 0x20, 0x39, 0x44, 0x39, 0x42, 0x38, 0x86, 0x38, 0xA1, 0x38, 0xC5, 0x38, 0x43, 0x81, 0x6E, 0x00, 0xCD, 0x25, 0xCE, 0x15, 0xCE, 0x35, 0xCA, 0x0D, 0xC3, 0x2D, 0xC9, 0x1D, 0x01, 0xF8, 0x03, 0xDC, 0x2F, 0xA9, 0x5F, 0x91, 0xBF, 0xC6, 0x79, 0xE0, 0x79, 0xA4, 0x79, 0xA2, 0x78, 0x26, 0x79, 0xBF, 0xF3, 0xCA, 0xF0, 0xC6, 0xF0, 0x4E, 0xF1, 0xFD, 0xE0, 0x93, 0xE3, 0x8B, 0xE5, 0x9B, 0x06, 0xDA, 0x81, 0x3C, 0xD0, 0xFE, 0x67, 0x04, 0x90, 0x04, 0x14, 0x04, 0xE2, 0x05, 0xE6, 0x04, 0x91, 0x05, 0x15, 0x05, 0x13, 0x05, 0xE7, 0x85, 0x50, 0x84, 0x94, 0x85, 0x92, 0x84, 0xFE, 0x09, 0xA3, 0x09, 0xAB, 0x08, 0x27, 0x0B, 0x2F, 0x88, 0xA0, 0x8B, 0xA8, 0x8A, 0xA4, 0x88, 0x2C, 0x89, 0x62, 0x88, 0xAA, 0x89, 0xA6, 0x89, 0x2E, 0x8B, 0x61, 0x8A, 0x69, 0x88, 0xA5, 0x8B, 0xAD, 0x88, 0x63, 0x89, 0x6B, 0x8A, 0x67, 0x00, 0xE5, 0x1F, 0x47, 0x42, 0x4B, 0x22, 0x53, 0x62, 0x5D, 0x12, 0x57, 0x52, 0x5B, 0x32, 0x5B, 0x72, 0x43, 0x0A, 0x4F, 0x4A, 0x57, 0xEA, 0x8F, 0xD4, 0xA6, 0x34, 0xBE, 0xB4, 0x9E, 0x74, 0x8E, 0xF4, 0x96, 0x0C, 0xA1, 0x8C, 0xBE, 0x4C, 0xAE, 0xCC, 0x8E, 0xEC, 0x4F, 0x59, 0x03, 0xD9, 0x7C, 0xD9, 0x5D, 0x39, 0x22, 0x39, 0x23, 0xB9, 0x02, 0xB9, 0x3D, 0x79, 0x62, 0x79, 0x63, 0xF9, 0x42, 0xF9, 0x7D, 0x05, 0x52, 0x05, 0x13, 0x85, 0x22, 0x85, 0x43, 0x45, 0x32, 0x45, 0x53, 0xC5, 0x62, 0xC5, 0x23, 0x25, 0x72, 0x25, 0x73, 0xA5, 0x12, 0xA5, 0x63, 0x65, 0x0A, 0x65, 0x0B, 0xA0, 0xFB, 0x9F, 0xA8, 0x50, 0xA9, 0x58, 0xAA, 0x94, 0xA9, 0x9C, 0xA9, 0x52, 0xAB, 0x5A, 0xA9, 0x56, 0xA8, 0x9E, 0xAB, 0xD1, 0xA8, 0xD9, 0xA8, 0x55, 0xAA, 0x5D, 0xA8, 0xD3, 0xAA, 0xDB, 0xAA, 0x57, 0x01, 0x1D, 0x81, 0x5E, 0xC3, 0x4E, 0xA3, 0x5A, 0xE3, 0x5A, 0x93, 0x41, 0xD3, 0x5E, 0xB3, 0x56, 0xF3, 0x46, 0x8B, 0x51, 0xCB, 0x51, 0xAB, 0x4E, 0xEB, 0x56, 0x9B, 0x49, 0xDB, 0x49, 0xBB, 0x5E, 0xFB, 0x4E, 0x87, 0x45, 0xC7, 0x59, 0xA7, 0x41, 0xE7, 0x41, 0x97, 0x55, 0xD7, 0x45, 0xB7, 0x09, 0x68, 0xFE, 0x6C, 0x7A, 0xAE, 0x7A, 0xCD, 0x7A, 0x4F, 0x80, 0x67, 0xB8, 0xEB, 0xB7, 0xE8, 0x3F, 0x1B, 0x70, 0x1A, 0x78, 0x18, 0xB4, 0x1A, 0xBC, 0x1A, 0x72, 0x19, 0x7A, 0x1A, 0xB6, 0x1B, 0xBE, 0x19, 0x71, 0x1B, 0x79, 0x19, 0x75, 0x18, 0xBD, 0x1B, 0xFF, 0x32, 0xF6, 0x31, 0xEE, 0x34, 0xFE, 0x30, 0xE1, 0x35, 0xF1, 0x35, 0xE9, 0x32, 0xF9, 0x32, 0xE5, 0x33, 0xF5, 0x33, 0xED, 0x31, 0xFB, 0x66, 0xC6, 0x6F, 0xE6, 0x6F, 0xD6, 0x6B, 0x0E, 0x62, 0x2E, 0x00, 0xF8, 0x46, 0x9F, 0x05, 0xA8, 0x85, 0x90, 0x45, 0x90, 0x45, 0xBF, 0x25, 0xB8, 0xA5, 0xB0, 0x65, 0xB0, 0xE5, 0xA0, 0x15, 0x84, 0x95, 0x88, 0xD5, 0x6F, 0xAB, 0x21, 0x6B, 0x48, 0x6B, 0x51, 0xEB, 0x50, 0xEB, 0x61, 0x1B, 0x28, 0x1B, 0x71, 0x9B, 0x30, 0x9B, 0x11, 0x5B, 0x18, 0x5B, 0x09, 0xDB, 0x70, 0xDB, 0x31, 0x3B, 0x58, 0x3B, 0x49, 0xBB, 0x08, 0xC0, 0x3C, 0xE0, 0xEC, 0xA5, 0xEC, 0xA3, 0xEC, 0x27, 0x1C, 0xE0, 0x01, 0xF7, 0x88, 0x76, 0x98, 0x74, 0xFC, 0xE1, 0x28, 0xEB, 0x18, 0xE3, 0x38, 0xED, 0x84, 0xE0, 0x24, 0xE7, 0x14, 0xEB, 0x34, 0xE3, 0x8C, 0xE8, 0x2C, 0xEF, 0x1C, 0xEF, 0x3C, 0xEB, 0x82, 0xE4, 0xA2, 0xE8, 0x92, 0xE0, 0x32, 0xE7, 0x8A, 0xE2, 0xAA, 0xE4, 0x9A, 0xE8, 0x3A, 0xEF, 0x86, 0xEA, 0xA6, 0xEC, 0x96, 0xE4, 0xB6, 0xE0, 0x8E, 0xE6, 0xAE, 0xE2, 0x9E, 0xE2, 0xBE, 0x08, 0x58, 0x88, 0x9A, 0x47, 0xAA, 0xC7, 0x92, 0x27, 0xA6, 0xA7, 0xBA, 0x67, 0x9A, 0xE7, 0xB2, 0x17, 0x96, 0x97, 0x06, 0x50, 0xF8, 0x57, 0xBD, 0xB1, 0xBD, 0x35, 0xBD, 0x33, 0xBD, 0xD7, 0x7C, 0x70, 0x7C, 0xB4, 0x7D, 0xB2, 0x7C, 0xD6, 0x7D, 0xF1, 0x7C, 0x75, 0x7C, 0xB3, 0x7D, 0x37, 0xFC, 0xF0, 0xFD, 0x74, 0xFD, 0xFE, 0xF8, 0x6D, 0xF9, 0x13, 0xF8, 0xEB, 0xF9, 0xE7, 0xFA, 0x6F, 0x07, 0x10, 0x06, 0x18, 0x04, 0xE4, 0x05, 0xEC, 0x04, 0x12, 0x05, 0x1A, 0x06, 0xE6, 0x07, 0xEE, 0x06, 0x11, 0x07, 0x19, 0x05, 0x15, 0x04, 0xED, 0x07, 0x93, 0x04, 0x1B, 0x07, 0x17, 0x01, 0x4E, 0x42, 0xFA, 0xDB, 0xF4, 0xF7, 0xDF, 0xDF, 0x87, 0x21, 0xE4, 0x21, 0x66, 0x80, 0x95, 0x1C, 0x85, 0x52, 0x84, 0x9A, 0x87, 0x96, 0x84, 0x9E, 0x84, 0x51, 0x86, 0x59, 0x84, 0x95, 0x85, 0x9D, 0x86, 0x53, 0x85, 0x5B, 0x85, 0x97, 0x87, 0x9F, 0x45, 0xD0, 0x44, 0x58, 0x47, 0x54, 0x44, 0x9C, 0x47, 0xD2, 0x46, 0xDA, 0x44, 0x56, 0x46, 0x5E, 0x02, 0x75, 0xDF, 0x36, 0xAA, 0x3A, 0xEA, 0x2A, 0x9A, 0x3E, 0xDA, 0x3E, 0xBA, 0x26, 0xFA, 0x3A, 0x86, 0x21, 0xC6, 0x21, 0xA6, 0x36, 0xE6, 0x26, 0x96, 0x29, 0xD6, 0x31, 0xB6, 0x2E, 0xF6, 0x2E, 0x8E, 0x39, 0xCE, 0x29, 0xAE, 0x21, 0xEE, 0x3E, 0x9E, 0x25, 0xDE, 0x25, 0xBE, 0x31, 0xFE, 0x21, 0x81, 0x35, 0xC1, 0x35, 0xA1, 0x29, 0xE1, 0x31, 0x91, 0x3D, 0xD1, 0x2D, 0xB1, 0x39, 0xF1, 0x39, 0x89, 0x23, 0xC9, 0x3D, 0xA9, 0x35, 0xE9, 0x05, 0xF0, 0x15, 0xCF, 0xE4, 0xB6, 0xE4, 0xD7, 0x14, 0xAE, 0x14, 0xAF, 0x94, 0xF6, 0x94, 0xB7, 0xD4, 0x5F, 0xA9, 0xDE, 0xA9, 0x1D, 0xA9, 0x1F, 0x69, 0x3C, 0x69, 0x3E, 0x69, 0x5D, 0x69, 0x9F, 0xE9, 0xBC, 0xE9, 0x7E, 0xE9, 0xDD, 0xE9, 0x5F, 0x19, 0x7C, 0x19, 0xFE, 0x19, 0x3D, 0x99, 0xDF, 0x32, 0x05, 0x32, 0x03, 0x32, 0x7B, 0xB3, 0x40, 0xB3, 0x04, 0xB3, 0x02, 0xB3, 0xFA, 0xB3, 0xC1, 0xB2, 0x85, 0xB2, 0x83, 0xB3, 0x07, 0xFE, 0x80, 0xFF, 0x11, 0x06, 0x2C, 0x66, 0x30, 0x07, 0x22, 0x47, 0x34, 0x27, 0x24, 0x67, 0x28, 0x17, 0x2A, 0x57, 0x2C, 0x37, 0x34, 0x77, 0x24, 0x0F, 0x3A, 0x4F, 0x3C, 0x2F, 0x1C, 0xE8, 0x08, 0x30, 0xF9, 0x12, 0xF9, 0x11, 0xF9, 0x63, 0x05, 0xB0, 0x05, 0x52, 0x05, 0x91, 0x05, 0xE3, 0x85, 0xF0, 0x85, 0xD2, 0x85, 0x51, 0x85, 0x93, 0x45, 0xDF, 0x8B, 0x64, 0x8A, 0xA2, 0x8B, 0xA6, 0x80, 0x8E, 0x20, 0xFB, 0x37, 0xF6, 0xEF, 0x74, 0x31, 0x42, 0xB1, 0x7C, 0x71, 0x5C, 0xF1, 0x4C, 0x09, 0x52, 0x89, 0x42, 0x49, 0x7C, 0xC9, 0x5C, 0x29, 0x72, 0xA9, 0x62, 0x69, 0x42, 0xE9, 0x7C, 0x19, 0x4A, 0x99, 0x52, 0x59, 0x52, 0xD9, 0xBF, 0x72, 0xD4, 0x72, 0x15, 0xC0, 0x70, 0x16, 0x2A, 0xD0, 0x2B, 0x54, 0x01, 0xC7, 0x59, 0xAA, 0xC4, 0xA8, 0x54, 0x03, 0x2C, 0x67, 0xB9, 0x0A, 0xB3, 0x4A, 0xBD, 0x2A, 0xBD, 0x6A, 0xA5, 0x1A, 0xAB, 0x5A, 0x13, 0x30, 0x9D, 0xD5, 0x1A, 0x9C, 0x1A, 0xAD, 0x9A, 0xCC, 0x9A, 0xF5, 0x5A, 0xDC, 0x5A, 0xED, 0xDA, 0xAC, 0xDA, 0x8D, 0x3A, 0xBC, 0x3A, 0x9D, 0xBA, 0x3F, 0x75, 0x9B, 0xF5, 0xF8, 0xF5, 0x7A, 0xF5, 0x39, 0xF5, 0x5B, 0x0D, 0x84, 0x0D, 0xFA, 0x0D, 0xB9, 0x0D, 0x3B, 0x8D, 0x3F, 0x1B, 0x0D, 0x1A, 0xF3, 0x1A, 0x77, 0x9B, 0x88, 0x9A, 0x0C, 0x81, 0x92, 0xB0, 0xD7, 0x4C, 0xDC, 0x6C, 0xDC, 0x5C, 0xD8, 0xBC, 0xDF, 0x42, 0xDA, 0x62, 0xD2, 0x52, 0xD4, 0x72, 0xD8, 0x4A, 0xD6, 0x6A, 0xDA, 0xFA, 0xB7, 0xF5, 0xA8, 0x8D, 0xBC, 0xCD, 0xAC, 0xAD, 0xA4, 0xED, 0xB8, 0x9D, 0xA2, 0xDD, 0xA2, 0xBD, 0x14, 0x28, 0xFF, 0x54, 0x1D, 0x96, 0x1D, 0x65, 0x1D, 0xA7, 0x9D, 0xD4, 0x9D, 0x56, 0x9D, 0xE5, 0x9D, 0xE7, 0x5D, 0x34, 0x5D, 0xD6, 0x5D, 0x95, 0x5D, 0x17, 0xDD, 0xB4, 0xDD, 0xB6, 0xDD, 0x55, 0xDD, 0x97, 0x3D, 0xF4, 0x3D, 0x76, 0x3D, 0xD5, 0x3D, 0x57, 0xBD, 0x0C, 0xBD, 0xF6, 0xBD, 0x35, 0xBD, 0x37, 0x7D, 0x8C, 0x7D, 0x0E, 0x7D, 0x75, 0x7D, 0xB7, 0xFD, 0x4C, 0xFD, 0x4E, 0xFD, 0xF5, 0xFD, 0x77, 0x40, 0x4D, 0x70, 0x1E, 0x68, 0x18, 0xB8, 0x1F, 0x64, 0x1D, 0x74, 0x19, 0x6C, 0x1C, 0x7C, 0x1C, 0x62, 0x1B, 0x72, 0x1D, 0x6A, 0x1E, 0x7A, 0x1A, 0x66, 0x1F, 0x76, 0x1F, 0x6E, 0x19, 0x7E, 0x1E, 0xE1, 0x1C, 0xF1, 0x18, 0x69, 0x1D, 0x79, 0x19, 0xE5, 0x1A, 0xF5, 0x1C, 0x6D, 0x1B, 0x7D, 0x1B, 0xE3, 0x1E, 0xF3, 0x1A, 0xEB, 0x18, 0x7B, 0x1F, 0xFF, 0x35, 0xEE, 0x33, 0xDE, 0x39, 0xFE, 0x31, 0xC1, 0x3B, 0xE1, 0x3B, 0xD1, 0x35, 0xF1, 0x39, 0xC9, 0x37, 0xE9, 0x37, 0xD9, 0x3D, 0xF5, 0x6D, 0x8A, 0x7F, 0xCA, 0x7F, 0xAA, 0x77, 0x1A, 0x64, 0x5A, 0x60, 0x3A, 0x70, 0xBA, 0x6F, 0x06, 0x74, 0x46, 0x68, 0x26, 0x68, 0xA6, 0x7F, 0x16, 0x6C, 0x56, 0x78, 0x36, 0x78, 0x76, 0x60, 0x0E, 0x62, 0x4E, 0x64, 0xEE, 0xF7, 0xDC, 0xD0, 0x3C, 0xE4, 0xBC, 0xE8, 0x7C, 0x28, 0xE0, 0x49, 0x50, 0xFF, 0xC4, 0xFE, 0x85, 0xFD, 0x1B, 0x59, 0x80, 0x5E, 0x90, 0x58, 0x08, 0x5F, 0x18, 0x5D, 0x84, 0x5D, 0x94, 0x5C, 0x8C, 0x58, 0x1C, 0x5F, 0x82, 0x5B, 0x92, 0x5A, 0x8A, 0x5A, 0x9A, 0x58, 0x86, 0x5F, 0x96, 0x5E, 0x8E, 0x5E, 0x9E, 0x5C, 0xF9, 0xBE, 0x22, 0xBB, 0x12, 0xB3, 0x32, 0xB5, 0x8A, 0xB0, 0x2A, 0xB7, 0x1A, 0xBB, 0x3A, 0xB3, 0x86, 0xB8, 0x26, 0xBF, 0x16, 0xBF, 0x36, 0xBB, 0x8E, 0xB4, 0xAE, 0xB0, 0x9E, 0xB0, 0x3E, 0xB7, 0x81, 0xBC, 0xA1, 0xB4, 0x91, 0xB8, 0x31, 0xBF, 0x89, 0xBA, 0xA9, 0xBC, 0x99, 0xB4, 0xB9, 0xB0, 0x85, 0xB6, 0xA5, 0xB2, 0x95, 0xB2, 0xB5, 0xB8, 0x8D, 0xBE, 0xAD, 0xBA, 0x9D, 0xBA, 0xBD, 0xB4, 0x83, 0xB1, 0xA3, 0xBE, 0x93, 0xB6, 0xB3, 0xBC, 0x8B, 0xB5, 0xAB, 0xB1, 0x9B, 0xBE, 0xBB, 0xBA, 0x87, 0xBD, 0xA7, 0xB9, 0x97, 0xB9, 0xB7, 0xB6, 0x8F, 0xB3, 0xAF, 0xB5, 0x9F, 0xB5, 0xBF, 0x7E, 0x80, 0x7B, 0xA0, 0x73, 0x90, 0x7D, 0xB0, 0x71, 0x88, 0x7F, 0xA8, 0x7B, 0xF8, 0xE7, 0x70, 0x0B, 0x28, 0x08, 0x7A, 0x47, 0xB9, 0x47, 0xDB, 0xC7, 0x84, 0xC7, 0xFA, 0xC7, 0x79, 0xC7, 0x3B, 0x27, 0x3F, 0x4F, 0x0C, 0x4F, 0xF2, 0x4F, 0x76, 0x4F, 0x89, 0x4F, 0x8D, 0x4E, 0x0B, 0x4E, 0xF7, 0xCF, 0x48, 0xCE, 0x8C, 0x01, 0x17, 0x3A, 0x38, 0x27, 0x3D, 0x37, 0x39, 0xFF, 0x7B, 0x7E, 0x78, 0x41, 0x76, 0x61, 0x76, 0x51, 0x7C, 0x71, 0x74, 0x49, 0x71, 0x69, 0x7E, 0x59, 0x72, 0x79, 0x72, 0x45, 0x79, 0x65, 0x71, 0x55, 0x7A, 0x75, 0x7A, 0x4D, 0x75, 0x6D, 0x79, 0x5D, 0x7E, 0x7D, 0x76, 0x43, 0x0D, 0x74, 0x83, 0x8A, 0x9B, 0xF3, 0x5B, 0xDA, 0x5B, 0x9B, 0xDB, 0xCA, 0xDB, 0xCB, 0x3B, 0xBA, 0x3B, 0x5B, 0xA0, 0x1A, 0x5C, 0xDD, 0xD3, 0xDF, 0xDB, 0xDD, 0xD7, 0xDC, 0x5F, 0x3F, 0x30, 0x3C, 0x38, 0x3C, 0xD4, 0x3E, 0xDC, 0x3C, 0x32, 0x01, 0xBE, 0x52, 0xF7, 0x78, 0xF7, 0xC4, 0xFC, 0xE4, 0xF4, 0x54, 0xFF, 0x74, 0xFF, 0xCC, 0xF2, 0xEC, 0xFC, 0xDC, 0xF8, 0xFC, 0xF0, 0xC2, 0xFA, 0xE2, 0xFA, 0xD2, 0xF4, 0xF2, 0xF8, 0xCA, 0xFE, 0xEA, 0xF6, 0xDA, 0xFC, 0xFA, 0xFC, 0xC6, 0xF1, 0xE6, 0xFE, 0xD6, 0xF2, 0xF6, 0xF2, 0xCE, 0xF9, 0xEE, 0x01, 0x78, 0xC5, 0xEB, 0x07, 0xD7, 0x87, 0xD7, 0x47, 0xFB, 0xC7, 0xDB, 0xE7, 0xAF, 0x4F, 0xEF, 0xCF, 0x8E, 0xCF, 0x8F, 0x2F, 0x9E, 0x2F, 0x9F, 0xAF, 0xCE, 0xAF, 0xCF, 0xAF, 0xFF, 0xC1, 0xB2, 0x3D, 0x18, 0x48, 0x60, 0x05, 0x61, 0x00, 0xBE, 0xB5, 0x8D, 0xB3, 0x6D, 0x63, 0x6D, 0xDB, 0x4E, 0x2B, 0x59, 0xDB, 0x6A, 0xE7, 0xD6, 0xB6, 0xDA, 0x49, 0x5E, 0x30, 0x4D, 0x0C, 0xBE, 0xF9, 0xFF, 0xAF, 0x7F, 0x62, 0x34, 0x20, 0x08, 0xFA, 0xBB, 0xF5, 0x17, 0x44, 0x00, 0xF9, 0x13, 0xF2, 0x0B, 0xDD, 0x82, 0x0A, 0xA1, 0x7E, 0x68, 0x0D, 0xB6, 0x05, 0x13, 0xC2, 0xFC, 0xB0, 0x1A, 0x98, 0x11, 0x84, 0x70, 0x3F, 0xBC, 0x86, 0xD8, 0x42, 0x08, 0x11, 0x7E, 0x44, 0x0D, 0x09, 0x41, 0x8A, 0x90, 0x01, 0x64, 0x1D, 0x05, 0x41, 0x89, 0x50, 0x01, 0x54, 0x1D, 0x0D, 0x41, 0x8B, 0xD0, 0x01, 0x74, 0x1D, 0x03, 0xC1, 0x88, 0x30, 0x01, 0x4C, 0x1D, 0x0B, 0xC5, 0x8A, 0xB1, 0x41, 0x6C, 0x03, 0x07, 0xC5, 0x89, 0x71, 0x41, 0x5C, 0x03, 0x0F, 0xC5, 0x8B, 0xF1, 0x41, 0x7C, 0x83, 0x00, 0x25, 0x88, 0x09, 0x41, 0x42, 0x83, 0x08, 0x23, 0x4A, 0x88, 0x21, 0x62, 0x93, 0x04, 0x23, 0x49, 0x48, 0x21, 0x52, 0x93, 0x0C, 0x23, 0x4B, 0xC8, 0x21, 0x72, 0x93, 0x02, 0xA3, 0x48, 0x28, 0x21, 0x4A, 0x93, 0x0A, 0xA7, 0x4A, 0xA9, 0x61, 0x6A, 0x8B, 0x06, 0xA7, 0x49, 0x69, 0x61, 0x5A, 0x8B, 0x0E, 0x07, 0x56, 0x10, 0xA6, 0xB7, 0x18, 0x70, 0x86, 0x94, 0x11, 0x66, 0xB4, 0x98, 0x08, 0x70, 0x23, 0x88, 0x30, 0xDB, 0xDB, 0x88, 0x6D, 0xD9, 0x76, 0x64, 0xBB, 0xBD, 0x83, 0xD8, 0x91, 0xED, 0x44, 0x76, 0xDA, 0xBB, 0x88, 0x5D, 0xD9, 0x6E, 0x64, 0xB7, 0x0D, 0xA4, 0x40, 0xBE, 0x17, 0xDD, 0xEB, 0xEC, 0x23, 0xF7, 0xE5, 0xFB, 0xD1, 0xFD, 0xCE, 0x01, 0xF2, 0x40, 0x7E, 0x10, 0x3D, 0xE8, 0x1C, 0x22, 0x0F, 0xE5, 0x87, 0xD1, 0xC3, 0xCE, 0x11, 0xEA, 0x48, 0x71, 0x14, 0x3B, 0xEA, 0x1E, 0xA3, 0x8E, 0x15, 0xC7, 0xB1, 0xE3, 0xEE, 0x09, 0xEA, 0x44, 0x71, 0x12, 0x3B, 0xE9, 0x02, 0x29, 0x50, 0x9C, 0xC6, 0x4E, 0xBB, 0x67, 0xE8, 0x33, 0xE5, 0x59, 0xFC, 0xAC, 0x77, 0x8E, 0x3E, 0x57, 0x9E, 0xC7, 0xCF, 0x7B, 0x17, 0xE8, 0x0B, 0xE5, 0x45, 0xFC, 0xA2, 0x77, 0x89, 0xBE, 0x54, 0x5E, 0xC6, 0x2F, 0x7B, 0x57, 0x98, 0x2B, 0xD5, 0x55, 0xE2, 0xAA, 0x7F, 0x8D, 0xB9, 0x56, 0x01, 0x2D, 0xE8, 0xDF, 0x60, 0x6E, 0x54, 0x37, 0x09, 0x70, 0x2B, 0xC0, 0xDC, 0xAA, 0x6E, 0x13, 0xB7, 0xFD, 0x3B, 0xEC, 0x9D, 0x1A, 0x7C, 0x00, 0x0C, 0xEE, 0xB1, 0xF7, 0xEA, 0xFB, 0xE4, 0xFD, 0xE0, 0x01, 0xFB, 0xA0, 0x7E, 0x48, 0x3E, 0x0C, 0x1E, 0xB1, 0x8F, 0xEA, 0xC7, 0xE4, 0xE3, 0xE0, 0x09, 0xF7, 0xA4, 0x79, 0x4A, 0x3D, 0x0D, 0x9F, 0x71, 0xCF, 0x9A, 0xE7, 0xD4, 0xF3, 0xF0, 0x05, 0xF7, 0xA2, 0x79, 0x49, 0x01, 0x33, 0xC0, 0xBD, 0x6A, 0x5E, 0x53, 0xAF, 0xC3, 0x37, 0xFC, 0x9B, 0xF6, 0x2D, 0xFD, 0x36, 0x7A, 0xC7, 0x83, 0xBB, 0x41, 0xFA, 0x7D, 0xF4, 0x81, 0xFF, 0xD0, 0x7E, 0xA4, 0x3F, 0x46, 0x9F, 0xF8, 0x4F, 0xED, 0x67, 0xFA, 0x73, 0xF4, 0x45, 0xF8, 0xD2, 0x7D, 0x65, 0xBE, 0xC6, 0xDF, 0x84, 0x6F, 0xDD, 0x77, 0xE6, 0x7B, 0xFC, 0x43, 0x00, 0xFE, 0x9F, 0xF9, 0x19, 0xB3, 0x08, 0x2C, 0x1D, 0x2B, 0xC3, 0x1A, 0x03, 0x39, 0xD0, 0xB3, 0xB3, 0xEC, 0x09, 0x87, 0xC8, 0xD1, 0x73, 0xB2, 0x9C, 0x09, 0x97, 0xC8, 0xD5, 0x73, 0xB3, 0xDC, 0x09, 0xB0, 0x03, 0x3D, 0x2F, 0xCB, 0x9B, 0xF0, 0x49, 0x7C, 0x03, 0x3F, 0xC7, 0x9F, 0x0A, 0x48, 0xFF, 0x4F, 0x00, 0x24, 0xA1, 0x41, 0x98, 0x13, 0x4E, 0x45, 0x24, 0x91, 0x41, 0x94, 0x13, 0x4D, 0xC5, 0x64, 0xB1, 0x51, 0x9C, 0x17, 0xCF, 0x24, 0x64, 0x89, 0x51, 0x92, 0x97, 0xCC, 0xA4, 0x64, 0xA9, 0x51, 0x9A, 0x97, 0xCE, 0xC0, 0x2D, 0xC1, 0x28, 0xCB, 0xCB, 0x66, 0x72, 0x0A, 0xF8, 0xFA, 0x2B, 0xC8, 0xE7, 0x0A, 0x8A, 0xC2, 0xA4, 0x28, 0x28, 0xE6, 0x4A, 0x8A, 0xD2, 0xA4, 0x2C, 0x28, 0xE7, 0x2A, 0x8A, 0xCA, 0xA4, 0x2A, 0xA8, 0xE6, 0x6A, 0x2A, 0xB0, 0xFF, 0xA2, 0x7A, 0xA1, 0xA1, 0x6A, 0xCC, 0x9A, 0xA2, 0x66, 0xA1, 0xA5, 0x6A, 0xCD, 0xC0, 0x10, 0x16, 0x3A, 0xAA, 0xCE, 0xAC, 0x2B, 0xEA, 0x16, 0x7A, 0x9A, 0xDE, 0xA2, 0x2F, 0xE9, 0x97, 0x06, 0x9A, 0xC1, 0x62, 0x28, 0x19, 0x96, 0x46, 0x9A, 0xD1, 0x62, 0x2C, 0x19, 0x97, 0x26, 0x9A, 0xC9, 0x02, 0x2E, 0x0B, 0x4B, 0x33, 0xDD, 0x6C, 0x35, 0x97, 0xCD, 0x2B, 0x0B, 0xDD, 0x62, 0xB5, 0x94, 0x2D, 0x2B, 0x2B, 0xDD, 0x6A, 0xB5, 0x96, 0xAD, 0x2B, 0x1B, 0xDD, 0x66, 0xB5, 0x95, 0x6D, 0x2B, 0x3B, 0xC3, 0x6E, 0xB3, 0x57, 0xEC, 0x6B, 0x07, 0xC3, 0x61, 0x73, 0x54, 0x1C, 0x6B, 0x27, 0xC3, 0x69, 0x73, 0x56, 0x9C, 0x6B, 0x17, 0xC3, 0x65, 0x73, 0x55, 0x5C, 0x6B, 0x37, 0xD3, 0x6D, 0x77, 0x57, 0xDD, 0x1B, 0x0F, 0xD3, 0x63, 0xF7, 0x54, 0x3D, 0x1B, 0x2F, 0xD3, 0x6B, 0xF7, 0x56, 0xBD, 0x1B, 0x1F, 0xD3, 0x67, 0xF7, 0x55, 0x7D, 0x9B, 0x3F, 0xFE, 0x66, 0xD1, 0x1C, 0x10, 0x53, 0x0F, 0x00, 0x38, 0x7C, 0x8C, 0x6C, 0x77, 0xA1, 0x6C, 0xDB, 0x35, 0x23, 0xD7, 0xCB, 0x43, 0x7F, 0x9B, 0xED, 0x3E, 0xB3, 0xBD, 0x9D, 0xE2, 0x4D, 0xA7, 0xF8, 0xE1, 0xFB, 0x24, 0x7E, 0xC7, 0x97, 0x0D, 0x78, 0x16, 0x90, 0x04, 0x1C, 0x81, 0x65, 0xE0, 0x2C, 0x28, 0x09, 0x3A, 0x82, 0xCB, 0xE0, 0x59, 0x48, 0x12, 0x72, 0x84, 0x96, 0xA1, 0xB3, 0xB0, 0x34, 0xEC, 0x0C, 0x03, 0x5F, 0x3E, 0xA0, 0x34, 0xE2, 0x8C, 0x00, 0x91, 0xF3, 0xA8, 0x34, 0xEA, 0x8C, 0x02, 0xD1, 0xF3, 0x98, 0x34, 0xE6, 0x8C, 0x01, 0xB1, 0xF3, 0xB8, 0x2C, 0xEE, 0x8A, 0x83, 0xF1, 0x8B, 0x84, 0x2C, 0xE1, 0x4A, 0x80, 0x89, 0x8B, 0xA4, 0x2C, 0xE9, 0x4A, 0x82, 0xC9, 0x8B, 0x94, 0x2C, 0xE5, 0x4A, 0x81, 0xA9, 0x8B, 0xB4, 0x3C, 0xED, 0x4E, 0x43, 0xE9, 0xCB, 0x8C, 0x3C, 0xE3, 0xCE, 0x40, 0x99, 0xCB, 0xAC, 0x3C, 0xEB, 0xCE, 0x42, 0xD9, 0xCB, 0x9C, 0x3C, 0xE7, 0xCE, 0x41, 0xB9, 0xCB, 0xBC, 0x22, 0xEF, 0xC9, 0xC3, 0xF9, 0xAB, 0x82, 0xA2, 0xE0, 0x29, 0xC0, 0x85, 0xAB, 0xA2, 0xA2, 0xE8, 0x29, 0xC2, 0xC5, 0xAB, 0x92, 0xA2, 0xE4, 0x29, 0xC1, 0xA5, 0xAB, 0xB2, 0xB2, 0xEC, 0x2D, 0x23, 0xE5, 0xEB, 0x8A, 0xB2, 0xE2, 0xAD, 0x20, 0x95, 0xEB, 0xAA, 0xB2, 0xEA, 0xAD, 0x22, 0xD5, 0xEB, 0x9A, 0xB2, 0xE6, 0xAD, 0x21, 0xB5, 0xEB, 0xBA, 0xAA, 0xEE, 0xAB, 0xA3, 0xF5, 0x9B, 0x86, 0xAA, 0xE1, 0x6B, 0xA0, 0x8D, 0x9B, 0x35, 0xD5, 0x9A, 0x6F, 0x0D, 0x5D, 0xBB, 0x59, 0x57, 0xAD, 0xFB, 0xD6, 0xD1, 0x2F, 0xCA, 0xAF, 0xDE, 0xF0, 0x6F, 0x60, 0x1B, 0xB7, 0x9B, 0xEA, 0x4D, 0xFF, 0x26, 0xB6, 0x79, 0xBB, 0xA5, 0xDE, 0xF2, 0x6F, 0x61, 0x5F, 0x3C, 0x41, 0xBD, 0xED, 0xDF, 0xC6, 0xB6, 0x6F, 0x77, 0x34, 0x3B, 0x81, 0x1D, 0x7C, 0xE7, 0x6E, 0x57, 0xB3, 0x1B, 0xD8, 0xC5, 0xFF, 0x3A, 0x00, 0xBE, 0x77, 0xB7, 0xAF, 0xF9, 0xFA, 0x24, 0xF0, 0xFD, 0xBB, 0xA6, 0xB6, 0x19, 0x6C, 0x12, 0xCD, 0xFB, 0x96, 0xB6, 0x15, 0x6C, 0x11, 0xAD, 0xFB, 0xB6, 0xB6, 0x1D, 0x6C, 0x13, 0xED, 0xFB, 0x8E, 0xB6, 0x13, 0xEC, 0x10, 0x9D, 0xFB, 0xAE, 0xAE, 0x1B, 0xEA, 0x92, 0xDD, 0x87, 0x9E, 0xAE, 0x17, 0xEA, 0x91, 0xBD, 0x87, 0xBE, 0xAE, 0x1F, 0xEA, 0x93, 0xFD, 0x87, 0x81, 0x6E, 0x10, 0x1A, 0x90, 0x83, 0x87, 0xA1, 0x7E, 0x18, 0x1E, 0x52, 0xC3, 0xC7, 0x7F, 0xFA, 0x2F, 0x9E, 0x40, 0xFD, 0x7B, 0x1C, 0xE9, 0x47, 0xE1, 0x11, 0x35, 0x7A, 0x1C, 0xEB, 0xC7, 0xE1, 0x31, 0x35, 0x7E, 0x9C, 0x18, 0x26, 0x91, 0x09, 0x3D, 0x79, 0x9A, 0x1A, 0xA6, 0x91, 0x29, 0x3D, 0x7D, 0x9A, 0x19, 0x66, 0x91, 0x19, 0x3D, 0x7B, 0x9A, 0x1B, 0xE6, 0x91, 0x39, 0x3D, 0x7F, 0x5A, 0x18, 0x17, 0xD1, 0x05, 0xB3, 0x78, 0x3E, 0x30, 0x1E, 0x44, 0x0F, 0x98, 0x83, 0xE7, 0xAF, 0xC7, 0x22, 0x7A, 0xC8, 0x1C, 0x3E, 0x1F, 0x19, 0x8F, 0xA2, 0x47, 0xCC, 0xD1, 0xF3, 0x17, 0x4F, 0x88, 0x1D, 0xB3, 0xC7, 0x2F, 0x4B, 0xD3, 0x32, 0xB6, 0x64, 0x97, 0x2F, 0x80, 0x09, 0x88, 0x01, 0xEC, 0x97, 0x23, 0x68, 0x02, 0x63, 0x20, 0x0B, 0xBE, 0x40, 0x66, 0x28, 0x0E, 0x71, 0xD0, 0x2B, 0x6C, 0x86, 0xE3, 0x30, 0x07, 0xBF, 0x22, 0x66, 0x24, 0x8E, 0x70, 0xC8, 0x2B, 0x6A, 0x46, 0xE3, 0x28, 0x87, 0xBE, 0x62, 0x16, 0x2C, 0x81, 0xF1, 0xD8, 0x1B, 0x6E, 0xC1, 0x13, 0x38, 0x8F, 0xBF, 0x11, 0x16, 0x22, 0x41, 0xF0, 0xC4, 0x1B, 0x69, 0x21, 0x13, 0x24, 0x4F, 0xBE, 0x51, 0x56, 0x2A, 0x49, 0x09, 0xD4, 0x3B, 0x6D, 0xA5, 0x93, 0xB4, 0x40, 0xBF, 0x33, 0x56, 0x26, 0xC9, 0x08, 0xCC, 0x3B, 0x6B, 0x65, 0x93, 0xAC, 0xC0, 0xBE, 0x73, 0x36, 0x2E, 0xC5, 0x89, 0xDC, 0x07, 0x6F, 0xE3, 0x53, 0xBC, 0xC8, 0x7F, 0x08, 0x36, 0x21, 0x25, 0x88, 0xC2, 0x87, 0x68, 0x13, 0x53, 0xA2, 0x28, 0x7E, 0xAC, 0xEC, 0xAB, 0xF4, 0x6A, 0xB5, 0xFA, 0x3C, 0xB1, 0x9F, 0xFC, 0xE7, 0xD1, 0x1E, 0xF0, 0x5B, 0x0B, 0xA3, 0x20, 0x80, 0xAF, 0xA7, 0x6E, 0x8C, 0xAE, 0xA8, 0xB6, 0x77, 0xD4, 0x6B, 0x2B, 0xA8, 0x11, 0xDB, 0x76, 0x72, 0x15, 0xF3, 0xE9, 0xFB, 0xE9, 0xAD, 0xE2, 0x9C, 0x99, 0xF9, 0x1F, 0x40, 0x4F, 0x50, 0x0F, 0x5E, 0x87, 0x0F, 0xE0, 0x27, 0xB8, 0x87, 0xAC, 0x23, 0x07, 0xC8, 0x13, 0xD2, 0x43, 0x37, 0xD0, 0x43, 0x14, 0x42, 0x65, 0x6C, 0x03, 0x3B, 0xC4, 0x20, 0x4C, 0xC6, 0x37, 0xF0, 0x43, 0x1C, 0xC2, 0x65, 0x62, 0x83, 0x38, 0x24, 0x20, 0x42, 0x26, 0x37, 0xC9, 0x23, 0x12, 0x26, 0x15, 0xE0, 0x05, 0x8F, 0x28, 0x98, 0x52, 0xE8, 0x4D, 0xFA, 0x88, 0x86, 0x69, 0x85, 0xD9, 0x64, 0x8E, 0x18, 0x98, 0x51, 0xD8, 0x2D, 0xF6, 0x98, 0x45, 0x58, 0x95, 0xDB, 0xE2, 0x8E, 0x39, 0x84, 0x53, 0xF9, 0x2D, 0xFE, 0x98, 0x47, 0x78, 0x55, 0xD8, 0x12, 0x8E, 0x05, 0x44, 0x50, 0xC5, 0x6D, 0xF1, 0x44, 0x44, 0x45, 0x4D, 0xDA, 0x96, 0x4E, 0x24, 0x54, 0xD2, 0x5C, 0xDB, 0xAE, 0x13, 0x17, 0xEA, 0xD2, 0xDC, 0xDB, 0xEE, 0x13, 0x37, 0xEA, 0xD6, 0x3C, 0x3B, 0x9E, 0x53, 0x0F, 0x06, 0xBA, 0x90, 0x1D, 0xEF, 0xA9, 0x17, 0xF3, 0xEA, 0xFF, 0xBF, 0x80, 0x9D, 0x97, 0xD3, 0x17, 0xEC, 0x45, 0x7F, 0xDD, 0x7D, 0x3D, 0x7B, 0xC5, 0x5F, 0xFB, 0x6F, 0xBB, 0x6F, 0x67, 0x6F, 0xF8, 0x5B, 0xFF, 0x7D, 0xF7, 0xFD, 0xEC, 0x1D, 0x7F, 0xEF, 0x03, 0x0F, 0x70, 0xF6, 0x81, 0x7F, 0xF4, 0x3F, 0x0D, 0x9F, 0xE7, 0x9F, 0xC4, 0xE7, 0xE0, 0xCB, 0x00, 0x4C, 0x00, 0xF1, 0x35, 0xF8, 0x36, 0x7C, 0x9F, 0x7F, 0x13, 0xDF, 0x83, 0x1F, 0x03, 0xF0, 0x83, 0xC4, 0xCF, 0xC0, 0x67, 0xF4, 0x5D, 0xF8, 0x48, 0xDF, 0xD0, 0x6F, 0x04, 0x82, 0x90, 0xF4, 0x0F, 0x03, 0xC6, 0xC0, 0x45, 0x80, 0x0C, 0x0C, 0x83, 0x46, 0x60, 0x08, 0xC9, 0xE0, 0x30, 0x64, 0x0A, 0x5D, 0x86, 0xA8, 0xD0, 0x28, 0x6C, 0x02, 0x8A, 0x90, 0x0A, 0x8F, 0x22, 0xA6, 0xC8, 0x65, 0x84, 0x02, 0x7B, 0x82, 0x29, 0x7A, 0x19, 0xA5, 0xA2, 0xA3, 0x98, 0x39, 0x76, 0x15, 0xA3, 0x63, 0xE3, 0xB8, 0x19, 0x48, 0x42, 0x3A, 0x3E, 0x4E, 0x98, 0x13, 0x57, 0x09, 0x3A, 0x31, 0x4E, 0x9A, 0x81, 0x25, 0xA4, 0x93, 0xE3, 0x94, 0x25, 0x75, 0x9D, 0x62, 0x52, 0x93, 0xB4, 0x25, 0x7D, 0x9D, 0x66, 0xD2, 0x93, 0x8C, 0x25, 0x73, 0x9D, 0x61, 0x32, 0x93, 0xAC, 0x25, 0x7B, 0x9D, 0x65, 0xB2, 0x93, 0x9C, 0x35, 0x77, 0x93, 0x63, 0x73, 0xD3, 0xBC, 0x35, 0x7F, 0x93, 0x67, 0xC1, 0x9A, 0x60, 0x2D, 0xDC, 0x14, 0xD8, 0xC2, 0xB4, 0x68, 0x2D, 0xDE, 0x14, 0xD9, 0xE2, 0xB4, 0x64, 0x2B, 0xDD, 0x96, 0xB8, 0xD2, 0xAC, 0x6C, 0x2B, 0xDF, 0x96, 0xB9, 0xF2, 0xAC, 0x62, 0xAB, 0xDC, 0x56, 0xB8, 0xCA, 0xAC, 0x6A, 0xAB, 0xDE, 0x56, 0xB9, 0xEA, 0xAC, 0x66, 0xAF, 0xDD, 0xD5, 0xF8, 0xDA, 0xBC, 0x6E, 0xAF, 0xDF, 0xD5, 0xF9, 0xFA, 0xBC, 0x61, 0x6F, 0xDC, 0x35, 0xF8, 0xC6, 0xBC, 0x69, 0x6F, 0xDE, 0x35, 0xF9, 0xE6, 0xBC, 0xE5, 0x68, 0xDD, 0xB7, 0x84, 0xD6, 0xA2, 0xED, 0x68, 0xDF, 0x03, 0x41, 0xB0, 0xE8, 0x38, 0x3A, 0xF7, 0x1D, 0xA1, 0xB3, 0xE8, 0x3A, 0xBA, 0xF7, 0x5D, 0xA1, 0xBB, 0xE8, 0x39, 0x41, 0x37, 0x22, 0xF6, 0x96, 0xB2, 0x53, 0x7E, 0x90, 0x45, 0x79, 0xA9, 0x38, 0xC1, 0x86, 0x20, 0x2A, 0x4B, 0xD5, 0xA9, 0x3E, 0xA8, 0xA2, 0xBA, 0xD4, 0xF6, 0xB4, 0x47, 0x4D, 0xD2, 0x56, 0xFA, 0x9E, 0xFE, 0xA8, 0x4B, 0xFA, 0x3F, 0xF6, 0xEE, 0xC2, 0xAB, 0xEA, 0xED, 0x51, 0x02, 0xF8, 0xD0, 0x88, 0x60, 0x00, 0xB6, 0xA8, 0xD7, 0x16, 0xBB, 0x03, 0x04, 0xEC, 0x6E, 0x6C, 0x41, 0x50, 0x30, 0x29, 0xA5, 0xBB, 0x15, 0x10, 0x24, 0x04, 0x11, 0x41, 0x3A, 0x4C, 0x6C, 0x41, 0x45, 0xB1, 0xAE, 0xDD, 0x71, 0x11, 0xBB, 0x13, 0x91, 0xCE, 0x03, 0xF3, 0xCE, 0x5E, 0xDF, 0x3F, 0xE3, 0xFD, 0x56, 0x7D, 0xD6, 0xAC, 0x9A, 0x39, 0xB9, 0xB7, 0x49, 0x63, 0x99, 0x41, 0x99, 0x67, 0xD9, 0xC5, 0xB2, 0xC6, 0x72, 0x83, 0x72, 0xCF, 0xF2, 0x8B, 0xE5, 0x8D, 0x15, 0x86, 0x15, 0x5E, 0x15, 0x05, 0x15, 0xB2, 0x4A, 0xC3, 0x4A, 0xAF, 0xCA, 0x82, 0x4A, 0x59, 0x95, 0x61, 0x95, 0x57, 0x55, 0x41, 0x95, 0xAC, 0xDA, 0xB0, 0xDA, 0xAB, 0xBA, 0xA0, 0x5A, 0x56, 0x33, 0xB1, 0xC6, 0xBB, 0xE6, 0x52, 0x4D, 0x53, 0xED, 0xC4, 0x5A, 0xEF, 0xDA, 0x4B, 0xB5, 0x4D, 0x75, 0x13, 0xEB, 0xBC, 0xEB, 0x2E, 0xD5, 0x35, 0xD5, 0x4F, 0xAC, 0xF7, 0xAE, 0xBF, 0x54, 0xDF, 0xD4, 0x60, 0xD4, 0xE0, 0xD3, 0x70, 0xB9, 0xA1, 0xB9, 0xD1, 0xA8, 0xD1, 0xA7, 0xF1, 0x72, 0x63, 0xB3, 0xCC, 0x48, 0xE6, 0x23, 0xBB, 0x2C, 0x6B, 0x6E, 0x32, 0x6A, 0xF2, 0x69, 0xBA, 0xDC, 0xD4, 0xDC, 0x6C, 0xDC, 0xEC, 0xDB, 0x5C, 0xD8, 0x4C, 0x1A, 0xD3, 0x97, 0x85, 0xFF, 0x3B, 0xFF, 0xFF, 0x77, 0xFE, 0xFF, 0xEF, 0xFC, 0xFF, 0xDF, 0xF9, 0xFF, 0xBF, 0xF3, 0xFF, 0x7F, 0xE7, 0xFF, 0xFF, 0xCE, 0xFF, 0xFF, 0x8F, 0xE7, 0x3F, 0x19, 0x33, 0x1D, 0x98, 0xE8, 0x49, 0x6E, 0x5F, 0x08, 0x58, 0x80, 0xDC, 0x1C, 0x04, 0x6C, 0x0E, 0x22, 0xFB, 0x26, 0x02, 0x3B, 0x12, 0x49, 0x00, 0x88, 0x1A, 0x27, 0xD4, 0xFE, 0x2F, 0xE6, 0x85, 0xD0, 0x04, 0x91, 0xC6, 0xC2, 0xD9, 0xDD, 0xA3, 0x9F, 0x0B, 0xB7, 0xC4, 0x47, 0x9E, 0x13, 0x6E, 0x97, 0x7F, 0xD1, 0x0B, 0x53, 0xE8, 0xAD, 0x2B, 0xBC, 0xBD, 0x68, 0x43, 0x1B, 0xB2, 0x07, 0xAA, 0x7E, 0x59, 0x40, 0xE4, 0xE6, 0x8F, 0x0E, 0xAF, 0x3E, 0x5C, 0x02, 0x64, 0xF7, 0x1D, 0x46, 0xDF, 0x7F, 0x07, 0xD4, 0xEF, 0xB7, 0xFF, 0x54, 0xA0, 0x04, 0xD4, 0x39, 0x3B, 0xF4, 0x23, 0x13, 0x09, 0x8C, 0x1B, 0x49, 0xFA, 0x01, 0x58, 0xD5, 0x44, 0xDA, 0x44, 0x03, 0x36, 0xD1, 0xA4, 0x05, 0x5A, 0x67, 0x39, 0xA6, 0x4A, 0x3B, 0x62, 0x9B, 0x84, 0x6D, 0x53, 0xA2, 0x93, 0xA5, 0x1D, 0xBB, 0x43, 0x85, 0xB3, 0x3E, 0x45, 0xBE, 0x17, 0xDA, 0x14, 0x47, 0x0C, 0x12, 0xBA, 0x39, 0x86, 0xD4, 0x0B, 0x73, 0x56, 0xBB, 0x94, 0x0A, 0x8B, 0xAA, 0xEC, 0x9F, 0x92, 0x43, 0x8C, 0x9A, 0x16, 0x5A, 0xE0, 0x7B, 0x31, 0x20, 0x8B, 0x75, 0x5E, 0xF4, 0x70, 0x3A, 0x50, 0xAF, 0xEF, 0x64, 0x7D, 0xF1, 0x31, 0x50, 0x4B, 0x27, 0x87, 0x63, 0xEF, 0x81, 0xBA, 0xB6, 0xCE, 0x36, 0x64, 0x0A, 0x81, 0x31, 0xDF, 0xC8, 0xA0, 0x05, 0xC0, 0xAA, 0x7C, 0xD2, 0x63, 0x3E, 0xB0, 0xD9, 0x9B, 0x5C, 0xF7, 0x0E, 0xF0, 0x5E, 0x20, 0xED, 0xD8, 0xAF, 0x24, 0xD4, 0x4D, 0x8A, 0x4D, 0xA4, 0xB4, 0x63, 0x85, 0x70, 0xE6, 0xB6, 0xC8, 0x10, 0xE1, 0x56, 0xBF, 0x5D, 0x7E, 0x42, 0x3F, 0xEC, 0x38, 0x26, 0x2C, 0xA4, 0x7D, 0x3B, 0x61, 0xD9, 0x53, 0x8F, 0x16, 0xE5, 0x7B, 0x00, 0x99, 0xAE, 0x67, 0xFC, 0xE3, 0x63, 0x40, 0xFD, 0x68, 0xF7, 0xB0, 0x8B, 0x6E, 0x40, 0xCD, 0x67, 0xF7, 0xCD, 0x87, 0xED, 0xE5, 0x2E, 0xF5, 0x70, 0x3D, 0x30, 0x41, 0xEE, 0x04, 0x4F, 0x0D, 0x32, 0xCD, 0x08, 0x18, 0xFB, 0x87, 0x4C, 0xEE, 0x0D, 0xCC, 0xDC, 0x2E, 0x3D, 0x2F, 0x9B, 0x3F, 0x91, 0x2E, 0x65, 0x80, 0x7B, 0x3F, 0x72, 0xC4, 0x2D, 0x20, 0xE6, 0x16, 0x09, 0xA8, 0xAD, 0x3E, 0xB0, 0x4A, 0x38, 0x3E, 0x39, 0x72, 0x82, 0x70, 0xDA, 0xF9, 0xA8, 0x39, 0xC2, 0xAD, 0xC5, 0xBB, 0x8A, 0x85, 0xFB, 0x5A, 0xF8, 0x6B, 0x09, 0x1F, 0xAD, 0xF7, 0xDA, 0x22, 0x6C, 0x4C, 0x09, 0xF0, 0x78, 0xF6, 0x12, 0xA8, 0xE9, 0xE9, 0xD7, 0xFE, 0x7C, 0x16, 0x50, 0x65, 0xE5, 0x1B, 0x97, 0x9D, 0x0A, 0x54, 0xCE, 0xF6, 0x5B, 0xB6, 0x77, 0x3B, 0x50, 0x91, 0xE4, 0xE7, 0x19, 0xF2, 0x9F, 0xDC, 0x09, 0x7E, 0xE6, 0x64, 0x76, 0x33, 0x30, 0xFA, 0x93, 0xF4, 0xBC, 0xCC, 0x6A, 0x4B, 0x46, 0x1C, 0x02, 0x36, 0x74, 0x25, 0xBD, 0x9C, 0x00, 0x2F, 0x27, 0x72, 0xF9, 0x5A, 0x20, 0x2A, 0x94, 0xD4, 0x74, 0xD7, 0x74, 0x4F, 0x21, 0x09, 0x0C, 0x9E, 0xBF, 0xDF, 0x5D, 0x38, 0x69, 0x45, 0xF4, 0x48, 0xA1, 0x8D, 0x65, 0xB8, 0xA5, 0x30, 0x85, 0x3E, 0x4E, 0xC2, 0x72, 0xFF, 0x9D, 0xD9, 0xC5, 0x17, 0x81, 0xDA, 0x9E, 0x3B, 0x66, 0xE5, 0x8F, 0x07, 0x2A, 0x5C, 0x82, 0xCF, 0xA5, 0x65, 0xCA, 0xBD, 0xBE, 0x43, 0x33, 0x72, 0x37, 0x50, 0x39, 0x34, 0xF8, 0x8E, 0x9F, 0xA1, 0x3C, 0xCF, 0x09, 0x9E, 0xE6, 0x94, 0x23, 0x57, 0x39, 0xE8, 0x3E, 0x79, 0xF4, 0x02, 0x30, 0xAA, 0x17, 0x79, 0x38, 0x0B, 0x30, 0x01, 0x79, 0xC0, 0x01, 0xB0, 0xD8, 0x4D, 0x06, 0x76, 0x07, 0xBC, 0xDF, 0x93, 0x16, 0x00, 0xF6, 0x64, 0x91, 0xA3, 0x6B, 0x55, 0xBE, 0x88, 0x1D, 0x3A, 0xF2, 0xAF, 0x1A, 0x21, 0x60, 0x82, 0xBD, 0xEA, 0x42, 0x5B, 0x95, 0x08, 0x15, 0x61, 0xC1, 0x8A, 0x10, 0xFC, 0xDC, 0x09, 0x34, 0xE8, 0x44, 0xBA, 0x9E, 0x6D, 0x00, 0x2A, 0x74, 0x22, 0x26, 0x27, 0xBC, 0x01, 0x2A, 0x67, 0x85, 0x57, 0x04, 0xF7, 0x96, 0xDB, 0x62, 0x57, 0xA5, 0x73, 0x27, 0xA0, 0x62, 0xD8, 0xAE, 0xB6, 0x9B, 0x0F, 0xCB, 0xBD, 0x18, 0xE6, 0x66, 0xF6, 0x4B, 0xEE, 0x81, 0xB0, 0xA9, 0xE4, 0xE9, 0xF7, 0xC0, 0xD0, 0xD3, 0xE4, 0x89, 0x9B, 0xD2, 0x8E, 0x4C, 0x43, 0xC0, 0xFC, 0x3A, 0x99, 0xF0, 0x1A, 0x70, 0x31, 0x95, 0x5E, 0xA7, 0x88, 0x5B, 0xD2, 0x1E, 0xA9, 0xBF, 0xFD, 0xAA, 0x93, 0x9D, 0xA4, 0x1D, 0x99, 0xA6, 0x42, 0xDB, 0x87, 0x11, 0x0F, 0x84, 0xE5, 0x4F, 0x12, 0x37, 0x9D, 0x5E, 0x0D, 0x54, 0x74, 0x88, 0x1F, 0x1A, 0x5E, 0x01, 0x54, 0x66, 0xC5, 0x15, 0x38, 0x4F, 0x92, 0x67, 0xDD, 0x58, 0xC5, 0xF5, 0xF3, 0xE5, 0xE6, 0xEF, 0x19, 0xBF, 0xFC, 0x90, 0x5C, 0xFF, 0x18, 0xED, 0xF9, 0x1B, 0xE4, 0x4E, 0x8E, 0x7A, 0x32, 0xCD, 0x5A, 0xEE, 0x82, 0x48, 0x47, 0x32, 0xFF, 0x05, 0x30, 0x28, 0x81, 0xCC, 0x5B, 0x20, 0xED, 0x38, 0xBF, 0x4E, 0xA3, 0xE3, 0xEC, 0x8E, 0x64, 0xD6, 0x14, 0xC0, 0xF1, 0x1B, 0x99, 0xF1, 0x05, 0x08, 0xFC, 0x42, 0x7A, 0x1D, 0x95, 0x76, 0x98, 0x00, 0x38, 0x1D, 0x49, 0x02, 0x13, 0x13, 0xCF, 0x17, 0x08, 0xFD, 0x90, 0x73, 0xE2, 0x98, 0x25, 0x50, 0xAE, 0x96, 0x6D, 0xB4, 0xDD, 0x0F, 0xF8, 0x73, 0x32, 0xFD, 0xDB, 0x72, 0x4D, 0xE0, 0xD7, 0x8C, 0x54, 0xAF, 0x19, 0xAA, 0x72, 0x83, 0x0F, 0xDC, 0x37, 0xF4, 0x01, 0x7E, 0xC7, 0x26, 0x8E, 0x1E, 0x39, 0x12, 0x28, 0x39, 0x94, 0xA0, 0x33, 0x50, 0x05, 0xF8, 0xD3, 0x36, 0x7E, 0x78, 0xEF, 0x10, 0xB9, 0x0A, 0x71, 0xAE, 0xE4, 0xA5, 0xA7, 0x80, 0xFE, 0x58, 0xB2, 0x90, 0x80, 0x41, 0x2F, 0xA1, 0xFA, 0xFC, 0x99, 0xF3, 0xC9, 0x8B, 0xA7, 0x80, 0x4D, 0x85, 0x64, 0x7E, 0x2F, 0xC0, 0x2F, 0x85, 0x3C, 0xF7, 0x17, 0xD8, 0xFB, 0x97, 0xCC, 0x9B, 0x01, 0x1C, 0xF1, 0x24, 0x13, 0x7E, 0x00, 0xB7, 0xD3, 0x0C, 0xCE, 0x02, 0x0F, 0x87, 0x34, 0xE4, 0x0C, 0xD8, 0xA6, 0x33, 0xAF, 0x72, 0xFF, 0x99, 0x0B, 0xFF, 0xFC, 0xD4, 0x99, 0xFD, 0xE7, 0xD8, 0x11, 0x33, 0xBD, 0x2B, 0x3A, 0xE6, 0x3F, 0x23, 0xB2, 0xBA, 0x76, 0x36, 0xD3, 0xF9, 0xFB, 0xED, 0x5B, 0xAA, 0x79, 0x7B, 0x75, 0x9D, 0x31, 0xDF, 0x2D, 0x93, 0x3E, 0x6B, 0xFB, 0x6B, 0x8F, 0xFF, 0x71, 0x60, 0x7F, 0xCB, 0x56, 0x3F, 0xDB, 0x06, 0xFE, 0x44, 0x7C, 0x68, 0x4B, 0xEF, 0x36, 0xE5, 0x3F, 0xBB, 0xC7, 0x2D, 0x91, 0xFA, 0xF5, 0xB5, 0xC9, 0x6B, 0x45, 0xC0, 0x84, 0x81, 0xE4, 0x9D, 0x95, 0xC0, 0xD4, 0x15, 0xE4, 0x83, 0xF3, 0xC0, 0xAA, 0x25, 0x64, 0xD1, 0x66, 0xC0, 0x2E, 0x9C, 0xFC, 0xB3, 0x5D, 0xCB, 0xD1, 0x0F, 0x2F, 0x63, 0x9A, 0x27, 0x00, 0x69, 0xED, 0xFA, 0x8C, 0xE2, 0x5A, 0xE0, 0xBC, 0x6F, 0xFF, 0x7A, 0xF2, 0x7C, 0xD7, 0xA8, 0x1B, 0x80, 0xFB, 0x88, 0xDA, 0xEB, 0x39, 0x77, 0x80, 0x85, 0xB2, 0xCA, 0xAC, 0xCC, 0x4F, 0x80, 0xF1, 0xED, 0x92, 0x16, 0xA9, 0xAB, 0x81, 0xD1, 0x6F, 0x7F, 0x4D, 0x49, 0xBA, 0x0A, 0x0C, 0xEB, 0xF6, 0xBB, 0x4D, 0x42, 0x7F, 0x60, 0x10, 0x4A, 0x4E, 0xEF, 0xED, 0x0C, 0xF4, 0xFF, 0xF8, 0x27, 0x7A, 0x8F, 0x17, 0xD0, 0xD7, 0xE1, 0x4F, 0x44, 0xF4, 0x30, 0xF2, 0x7A, 0x03, 0xD0, 0x7F, 0x8E, 0xBC, 0x7F, 0x3A, 0x30, 0xEA, 0x17, 0xF9, 0xB8, 0x5E, 0x7A, 0x7D, 0xDE, 0xF4, 0x03, 0xE6, 0xCE, 0x27, 0x6B, 0x62, 0x74, 0xC3, 0x4C, 0xC3, 0x8A, 0xD4, 0x48, 0xC0, 0xF7, 0x97, 0xED, 0x6F, 0x52, 0x6F, 0x4F, 0xCA, 0xF7, 0x2E, 0x77, 0x49, 0x0B, 0x04, 0x9C, 0x01, 0xC8, 0xC0, 0xB7, 0xDD, 0x74, 0x81, 0xFC, 0x3E, 0x35, 0xB2, 0x98, 0x85, 0x80, 0xEF, 0xAD, 0xAA, 0x8E, 0xFB, 0xFE, 0x00, 0x1B, 0x56, 0xD6, 0x44, 0xC7, 0xC7, 0x01, 0x2B, 0x2A, 0x6B, 0xCF, 0xC6, 0x39, 0x03, 0xF3, 0xAF, 0xD5, 0xEC, 0xDB, 0xB3, 0x0A, 0x98, 0x3E, 0xB1, 0xF2, 0x4A, 0xF4, 0x10, 0xC0, 0x38, 0xAF, 0x22, 0x23, 0xB2, 0x0B, 0x60, 0x70, 0xA6, 0xA2, 0x57, 0x44, 0x0F, 0xF2, 0xF6, 0x38, 0xA0, 0xFF, 0x78, 0x79, 0xBF, 0x31, 0x30, 0xCC, 0x98, 0x7C, 0xB5, 0x11, 0x18, 0xFF, 0x95, 0x2C, 0x77, 0xC3, 0x56, 0x13, 0xBD, 0x8F, 0x9F, 0x49, 0x60, 0x45, 0x62, 0x0A, 0xE5, 0xCE, 0x0D, 0x74, 0x01, 0x48, 0xE5, 0x5B, 0x7B, 0x43, 0x7A, 0xC8, 0xDD, 0xEA, 0x33, 0x3C, 0x40, 0x7D, 0x1A, 0xE9, 0x87, 0x16, 0x67, 0x80, 0xF7, 0x3D, 0xAB, 0x76, 0x7A, 0xBC, 0x03, 0x0E, 0xCD, 0xA8, 0x33, 0xDD, 0xD5, 0x17, 0x08, 0x51, 0xAD, 0x6E, 0x8C, 0x70, 0x07, 0x9C, 0x56, 0xD7, 0x6E, 0x8D, 0x58, 0x02, 0x6C, 0xFC, 0x5C, 0xE7, 0x18, 0xDE, 0x16, 0x30, 0x6B, 0x57, 0xBB, 0x2D, 0xEC, 0x10, 0xB0, 0x4C, 0xA3, 0x56, 0x2D, 0x34, 0x15, 0x58, 0x38, 0xAB, 0x26, 0x21, 0x24, 0x44, 0xDE, 0x1F, 0xA0, 0xD1, 0xBF, 0x4D, 0x20, 0x59, 0xDC, 0x01, 0x18, 0x70, 0x8E, 0x2C, 0x79, 0x00, 0x0C, 0x79, 0x54, 0x5A, 0x42, 0x02, 0x46, 0x8F, 0x2E, 0x3A, 0x09, 0xD7, 0xEA, 0x99, 0x37, 0x92, 0xEA, 0x81, 0x7E, 0xE8, 0xAC, 0x40, 0x4E, 0x0B, 0x58, 0x85, 0x96, 0xD5, 0xE4, 0x86, 0x3F, 0x2D, 0xAB, 0xD5, 0xD2, 0xC5, 0x0E, 0xB5, 0x74, 0x80, 0x3D, 0x7F, 0xBA, 0x2C, 0x56, 0x05, 0xEE, 0xC6, 0xD7, 0x1A, 0xB8, 0x9E, 0x02, 0x0E, 0xC6, 0x57, 0x1F, 0xF7, 0x8B, 0x07, 0xA2, 0x65, 0xB5, 0xA1, 0x81, 0xFD, 0x01, 0xFF, 0x13, 0xD5, 0x91, 0x01, 0x45, 0x80, 0xF3, 0xBC, 0xDA, 0xE9, 0x01, 0xBB, 0x80, 0xAD, 0xAC, 0xF5, 0x0C, 0x50, 0x03, 0xAC, 0xA2, 0x6A, 0x76, 0xFA, 0xCF, 0x21, 0x8B, 0x08, 0x74, 0xB8, 0x40, 0xFE, 0xEA, 0x09, 0x74, 0x0B, 0xAA, 0x5D, 0x4B, 0x02, 0xFA, 0x43, 0x1E, 0xBA, 0x0B, 0x4D, 0x10, 0x1E, 0x27, 0x5C, 0x07, 0xC5, 0xE7, 0x42, 0xCF, 0x58, 0x80, 0x34, 0x81, 0xBE, 0x81, 0x7A, 0x33, 0x69, 0xFB, 0x51, 0xBD, 0x59, 0x55, 0x8F, 0xF4, 0x3D, 0xA1, 0xAA, 0x07, 0x90, 0x79, 0xEF, 0xD4, 0xBF, 0x02, 0xBF, 0x82, 0x6A, 0xAF, 0x9A, 0xAF, 0x00, 0x6E, 0x3F, 0xA8, 0xBD, 0x6D, 0x73, 0x19, 0x38, 0x2E, 0xAB, 0x1F, 0xE5, 0x98, 0x0B, 0x24, 0xB7, 0x6E, 0x9C, 0xE9, 0x9A, 0x01, 0x44, 0x16, 0x34, 0x76, 0x70, 0x2B, 0x00, 0x02, 0xCF, 0xD7, 0x5F, 0x74, 0xF3, 0x00, 0x3C, 0xFE, 0xAB, 0x6B, 0x70, 0x9B, 0x4E, 0xFE, 0x28, 0x01, 0xDA, 0x2C, 0x6B, 0x6E, 0x4F, 0x02, 0xBA, 0x1F, 0x5F, 0x99, 0x0B, 0x87, 0x46, 0x1F, 0x2E, 0x15, 0x4E, 0xCE, 0xB3, 0x54, 0x22, 0x3B, 0x15, 0xAF, 0x2C, 0x56, 0xF5, 0x24, 0x07, 0x58, 0x4E, 0xF7, 0xD4, 0x18, 0x44, 0xAE, 0xDC, 0xA6, 0x31, 0x48, 0x35, 0x8B, 0xB4, 0xFB, 0xA1, 0x9A, 0xA5, 0x5C, 0x48, 0x7A, 0x25, 0x2B, 0x17, 0x02, 0x64, 0x9A, 0xA9, 0x5A, 0x0B, 0x23, 0x5F, 0xB2, 0x66, 0x39, 0x00, 0x7C, 0x6D, 0xD5, 0xB8, 0x67, 0x99, 0x15, 0x70, 0x7F, 0x7A, 0xBD, 0x91, 0xC5, 0xBF, 0x40, 0xFE, 0xA6, 0x7A, 0x0D, 0xEB, 0x1A, 0xE0, 0x50, 0x53, 0x7D, 0xD5, 0x16, 0x55, 0xE0, 0xC0, 0xB0, 0xC6, 0x1F, 0x36, 0x37, 0x81, 0x3D, 0x1E, 0x4D, 0x29, 0x76, 0x71, 0x64, 0x53, 0x06, 0xA0, 0xF1, 0xF4, 0xF3, 0x02, 0x12, 0xE8, 0x93, 0x56, 0x38, 0x4C, 0x38, 0xC4, 0xDF, 0xA7, 0x8F, 0x70, 0x46, 0x8A, 0xAE, 0xA9, 0x70, 0xCD, 0x3F, 0xD2, 0xF3, 0xD0, 0x4E, 0x47, 0x6D, 0x20, 0x69, 0x66, 0xA8, 0x36, 0x50, 0xF9, 0x0A, 0x69, 0xB7, 0x4A, 0xF9, 0x8A, 0xD2, 0x7A, 0xD2, 0x7D, 0x83, 0xD2, 0x7A, 0x80, 0x0C, 0x99, 0xA4, 0x34, 0x58, 0x78, 0xEB, 0x93, 0x4A, 0x26, 0xD0, 0x3C, 0xAA, 0xEA, 0xFC, 0x98, 0x1E, 0xC0, 0x97, 0x3B, 0x8D, 0x53, 0x66, 0x2D, 0x06, 0x9E, 0x3D, 0x6B, 0xF6, 0x34, 0x1D, 0x0E, 0x5C, 0xD3, 0x6D, 0xF8, 0xB9, 0xC2, 0x10, 0x38, 0xF3, 0xA3, 0xE1, 0xEB, 0x1A, 0x27, 0xE0, 0x50, 0x52, 0xC3, 0x92, 0xB5, 0xA9, 0x7F, 0x07, 0x91, 0x80, 0x76, 0xC1, 0xFD, 0x7B, 0xC2, 0x9E, 0xD1, 0x49, 0xFA, 0xC2, 0xA1, 0x5B, 0x17, 0xCC, 0x23, 0xD5, 0x6E, 0xCC, 0xB8, 0x0E, 0x90, 0x3D, 0x30, 0x62, 0xBA, 0xFA, 0x48, 0x72, 0xC1, 0x34, 0xF5, 0x91, 0xCA, 0xD7, 0x49, 0xF3, 0x48, 0xE5, 0xEB, 0x4A, 0xED, 0x48, 0x9B, 0x7A, 0xA5, 0x76, 0x8A, 0xE3, 0x48, 0xE7, 0x3A, 0xC5, 0x71, 0x00, 0xE9, 0xFF, 0x46, 0xE1, 0x8D, 0xF0, 0xE8, 0x62, 0x65, 0x25, 0xE1, 0x8B, 0x4D, 0xCA, 0xDD, 0x81, 0x66, 0x59, 0x4D, 0xF2, 0x60, 0x3F, 0xE0, 0xA7, 0x95, 0x2C, 0xC7, 0xD0, 0x15, 0x78, 0x79, 0x45, 0xD6, 0x30, 0x4D, 0x1D, 0x78, 0x30, 0x80, 0x51, 0x73, 0x8E, 0x01, 0x85, 0x45, 0x4D, 0xAD, 0xE6, 0xE7, 0x90, 0x07, 0x16, 0x01, 0xFA, 0x72, 0x23, 0xB5, 0x00, 0x13, 0x90, 0x0E, 0x79, 0x80, 0x85, 0x5C, 0x0B, 0x00, 0x76, 0xB7, 0x49, 0x40, 0xBC, 0xA6, 0xC2, 0x56, 0x13, 0x76, 0x8F, 0x17, 0x4E, 0x3C, 0x1F, 0x61, 0x2F, 0x9C, 0xB6, 0x26, 0xE6, 0x94, 0x70, 0x0B, 0xA2, 0x36, 0x08, 0x1D, 0xD5, 0xF6, 0xA8, 0x51, 0xBA, 0x07, 0x41, 0x78, 0xEB, 0xA5, 0x55, 0x32, 0xA9, 0x77, 0xB7, 0x7A, 0xB0, 0x05, 0x48, 0x9D, 0x3B, 0x7C, 0xB4, 0xE1, 0xC2, 0xC7, 0x19, 0x80, 0x4C, 0x66, 0xAF, 0xF7, 0x60, 0x1C, 0x50, 0xFF, 0xC7, 0xEE, 0x60, 0x41, 0x1F, 0xA0, 0xCE, 0xC7, 0x5E, 0x43, 0x3A, 0x67, 0x07, 0xFC, 0x26, 0xE3, 0x95, 0x80, 0x89, 0x95, 0xA4, 0xDB, 0x26, 0xC0, 0xD2, 0x97, 0xDC, 0x76, 0x06, 0xB0, 0x19, 0x42, 0xF6, 0x4F, 0x07, 0x76, 0xF5, 0x20, 0x01, 0xC5, 0xD7, 0xD1, 0x51, 0x42, 0xE3, 0x31, 0x11, 0x93, 0x84, 0x93, 0x43, 0xA3, 0xD7, 0x08, 0xB7, 0xEF, 0x8D, 0x18, 0x4F, 0x61, 0xC7, 0xD0, 0x67, 0xC2, 0xF4, 0x77, 0xAE, 0x73, 0xC9, 0xBE, 0xBD, 0xCB, 0xF4, 0xCD, 0x3A, 0x91, 0xC3, 0x4B, 0xA8, 0x6E, 0xD6, 0xE3, 0xC7, 0x50, 0x40, 0x76, 0xD3, 0xC5, 0xF1, 0xA1, 0x09, 0x50, 0xF7, 0xD6, 0x71, 0xC8, 0x45, 0x2F, 0xA0, 0xB6, 0xD1, 0x71, 0x78, 0x6E, 0x5F, 0x79, 0x9E, 0xE3, 0xB4, 0x88, 0x4C, 0x53, 0x02, 0x06, 0x1A, 0x90, 0x49, 0x4D, 0xD2, 0xCF, 0x8D, 0xF2, 0xAE, 0x03, 0xD6, 0xA5, 0x90, 0x0E, 0xD3, 0x80, 0x6D, 0x1B, 0xC8, 0xBE, 0x29, 0x40, 0xD4, 0x46, 0x12, 0x00, 0x12, 0xCA, 0x84, 0xE3, 0xAA, 0x23, 0xBA, 0x0B, 0x8D, 0x8B, 0xA2, 0xE2, 0x85, 0xDB, 0x11, 0xB6, 0x5F, 0xE8, 0xD5, 0x7E, 0xA7, 0xB9, 0xF0, 0x4A, 0xD1, 0xC6, 0x5F, 0xC2, 0xAA, 0x69, 0x5E, 0x2A, 0x55, 0xA3, 0x80, 0xA6, 0x09, 0xDE, 0x41, 0x8F, 0xB5, 0x81, 0xFA, 0xCD, 0x6E, 0xFA, 0x17, 0xD7, 0x03, 0xB5, 0x2E, 0x6E, 0xED, 0x0E, 0x3B, 0xC8, 0xED, 0xEA, 0xBE, 0xE6, 0xC0, 0x6A, 0xA0, 0xA6, 0xD6, 0xBD, 0x82, 0xCC, 0xCA, 0x00, 0xF4, 0x37, 0x91, 0x69, 0x83, 0x00, 0x83, 0xD9, 0x64, 0xD0, 0x32, 0x60, 0xFD, 0x08, 0xD2, 0x2B, 0x1F, 0xB0, 0x9F, 0x45, 0x6E, 0xF1, 0x03, 0x82, 0x3C, 0xA4, 0x1D, 0x69, 0x89, 0xC2, 0xB6, 0xC7, 0xF7, 0xE6, 0x0A, 0x27, 0x8E, 0x8C, 0xB4, 0x12, 0x6E, 0xDF, 0x1C, 0xDA, 0x28, 0x4C, 0x54, 0xF0, 0x1D, 0x26, 0x7C, 0x98, 0xE1, 0xA1, 0x26, 0x6C, 0xCE, 0x0D, 0x18, 0xFA, 0x54, 0xDC, 0x83, 0xB6, 0xFA, 0x9C, 0x38, 0x1F, 0x00, 0x54, 0xFD, 0xEB, 0xB3, 0x3C, 0x3B, 0x03, 0xA8, 0x0C, 0xF7, 0xDD, 0xB9, 0xD7, 0x07, 0xA8, 0xC8, 0xF6, 0x3D, 0x17, 0x52, 0x2F, 0xF7, 0xBC, 0xAF, 0x1D, 0x79, 0x24, 0x0F, 0xE8, 0xDB, 0x8A, 0xCC, 0xD4, 0x03, 0x0C, 0xE2, 0xC8, 0x8C, 0x6F, 0xC0, 0x9C, 0x37, 0xA4, 0xEF, 0x0B, 0x60, 0xDB, 0x3D, 0x32, 0x78, 0x04, 0xE0, 0x3D, 0x5B, 0xDA, 0x91, 0x61, 0x23, 0xD4, 0x4D, 0x4B, 0x0B, 0x10, 0x1A, 0x2E, 0x4B, 0x58, 0x28, 0x74, 0xAA, 0x08, 0x2F, 0x17, 0x26, 0xC7, 0xBB, 0xF9, 0x0B, 0xEB, 0x12, 0x43, 0x14, 0x8A, 0xB3, 0x80, 0xDA, 0xC2, 0xE0, 0xAE, 0x79, 0xCD, 0x40, 0x79, 0x75, 0x50, 0x7A, 0xDA, 0x1E, 0xA0, 0x22, 0x25, 0x78, 0x5E, 0xE4, 0x4A, 0xA0, 0x72, 0x78, 0xB0, 0xB2, 0x5F, 0x07, 0x79, 0xF6, 0x0C, 0xF2, 0x76, 0xDA, 0x2F, 0x57, 0x2F, 0x48, 0x95, 0x3C, 0x7E, 0x1B, 0xE8, 0x3D, 0x98, 0x3C, 0x9C, 0x0A, 0x8C, 0x3F, 0x4D, 0x26, 0x3F, 0x01, 0x16, 0x2B, 0x92, 0xB1, 0x0D, 0xC0, 0x96, 0x11, 0x64, 0xD0, 0x12, 0xC0, 0x2F, 0x99, 0x5C, 0x3D, 0x1C, 0x88, 0xCF, 0x21, 0xA7, 0x9D, 0x1D, 0x39, 0x3B, 0x45, 0x9F, 0x04, 0x0C, 0x7C, 0x8E, 0x5C, 0x15, 0x06, 0x6F, 0x48, 0xEF, 0x23, 0xBC, 0x10, 0xE5, 0x3F, 0xF9, 0x4F, 0x08, 0x40, 0xA5, 0x48, 0xC5, 0xB3, 0x3D, 0x81, 0xB2, 0x6F, 0xE1, 0xB3, 0x12, 0x4A, 0x81, 0x8A, 0xEF, 0xE1, 0xC3, 0x83, 0x5E, 0x02, 0x95, 0x3D, 0x77, 0xF5, 0x72, 0xBA, 0x02, 0x94, 0x67, 0x86, 0x0D, 0xD8, 0x32, 0x17, 0xA8, 0x78, 0x1C, 0xBA, 0xD3, 0xEC, 0x99, 0xDC, 0x7D, 0xA1, 0x7E, 0xE4, 0xE9, 0x2F, 0x40, 0xCF, 0x59, 0xE4, 0x09, 0xB9, 0xE3, 0xA6, 0xCA, 0x73, 0x98, 0xE2, 0xF2, 0x89, 0x47, 0xC8, 0xD4, 0x96, 0xC0, 0xA6, 0xCE, 0xE4, 0x9E, 0x5D, 0x80, 0xEF, 0x7B, 0x72, 0xA5, 0x25, 0x90, 0x3A, 0x8E, 0x04, 0x5A, 0xAE, 0x29, 0x88, 0x13, 0x1A, 0x6D, 0xBB, 0xF0, 0x43, 0xE8, 0x35, 0xF4, 0x7C, 0x91, 0xB0, 0x79, 0xD9, 0xBE, 0x0F, 0x27, 0x57, 0x00, 0xE5, 0x66, 0x71, 0xCF, 0x22, 0x36, 0x01, 0x55, 0xB5, 0xB1, 0x57, 0x9C, 0x87, 0x01, 0x15, 0xE9, 0x31, 0x9F, 0xD6, 0x5D, 0x06, 0x2A, 0x8B, 0x62, 0x3C, 0x97, 0x27, 0xC9, 0xD5, 0x8C, 0xF6, 0x5F, 0xD0, 0x0F, 0xA8, 0x98, 0x1D, 0xD5, 0x6B, 0xDA, 0x74, 0xB9, 0x8B, 0x77, 0x17, 0x90, 0x17, 0x87, 0x01, 0xBA, 0x2D, 0xC9, 0xFC, 0x52, 0x60, 0x78, 0x0C, 0x79, 0xA1, 0x1B, 0x60, 0xB4, 0x99, 0x3C, 0xF6, 0x0D, 0xB0, 0x3C, 0x41, 0xA6, 0xB4, 0x03, 0x7C, 0xAE, 0x90, 0x1E, 0xB5, 0x40, 0xCA, 0x68, 0xD2, 0xFA, 0x12, 0x70, 0xD2, 0x9A, 0x04, 0x0C, 0x34, 0x6F, 0xBC, 0x16, 0x3E, 0x3F, 0x7F, 0x63, 0xD1, 0xF1, 0x4F, 0x40, 0x55, 0x69, 0xBA, 0xF9, 0xF6, 0x21, 0x40, 0x89, 0x61, 0xFA, 0xC8, 0xE5, 0xDD, 0x81, 0x1F, 0x99, 0xA9, 0x5D, 0x67, 0xE8, 0x00, 0xBF, 0xB4, 0x0F, 0x58, 0x1A, 0xCE, 0x00, 0x7E, 0x97, 0xEC, 0xFF, 0x3A, 0x22, 0x10, 0xF8, 0xD3, 0x63, 0xDF, 0xD7, 0x01, 0xC9, 0x72, 0x0D, 0xE2, 0xFB, 0xF6, 0x36, 0x91, 0xBB, 0x31, 0xF6, 0x26, 0x79, 0xF9, 0x01, 0xD0, 0x66, 0xB9, 0xDC, 0x3D, 0xC0, 0x50, 0x65, 0xF2, 0xCA, 0x6C, 0xC0, 0xC4, 0x51, 0x6E, 0xA9, 0xCE, 0xF2, 0x59, 0x5E, 0x64, 0xC1, 0x00, 0xC0, 0x21, 0x9F, 0x3C, 0xBD, 0x04, 0x88, 0x33, 0x22, 0xF3, 0x4C, 0x81, 0x43, 0xBF, 0xAB, 0xE7, 0x1D, 0x6A, 0x02, 0x2E, 0x5D, 0x1E, 0x65, 0x01, 0x98, 0xBA, 0xBE, 0xCC, 0xEA, 0xBE, 0x55, 0x6D, 0x42, 0xCD, 0x8A, 0x33, 0xE7, 0xBA, 0x1B, 0xB7, 0x3E, 0x5D, 0x12, 0x79, 0xE4, 0x6A, 0xB7, 0x76, 0xDA, 0x17, 0x7F, 0x94, 0x64, 0xDE, 0xED, 0xB2, 0x52, 0x77, 0xEB, 0xB7, 0xED, 0x29, 0x97, 0xDB, 0xCF, 0xD3, 0xD1, 0xFF, 0xBE, 0x25, 0xC9, 0x46, 0xDB, 0x52, 0xBB, 0xF5, 0x8F, 0xFB, 0x09, 0x19, 0x5A, 0x65, 0x6D, 0x97, 0xFF, 0x48, 0x88, 0xEF, 0xAB, 0x11, 0xDB, 0xE6, 0xEA, 0xCF, 0x39, 0xB1, 0x97, 0xA4, 0x7B, 0x90, 0xB6, 0xB2, 0xDC, 0x1B, 0xC0, 0xD0, 0x52, 0xF2, 0xFA, 0x3B, 0xC0, 0x78, 0x0F, 0x79, 0x5F, 0x03, 0x98, 0x79, 0x95, 0x7C, 0xA4, 0x0B, 0x58, 0xC7, 0x92, 0x2F, 0xF6, 0x03, 0x3B, 0x3E, 0x91, 0x75, 0x9B, 0x80, 0x60, 0x95, 0x08, 0xCF, 0x8A, 0x78, 0xE0, 0xB4, 0x2F, 0x50, 0xFD, 0xE7, 0xFA, 0xDE, 0x1B, 0x7E, 0x80, 0xEB, 0xD4, 0x06, 0xF5, 0xAC, 0x05, 0xC0, 0xA2, 0x88, 0xAA, 0xDE, 0x99, 0xB9, 0x80, 0xC9, 0xA5, 0x92, 0x29, 0x29, 0xCF, 0x80, 0xB1, 0xD3, 0x7E, 0x59, 0x25, 0xCD, 0x06, 0x86, 0x2F, 0xF9, 0x1D, 0xBF, 0x6F, 0x3B, 0x30, 0x78, 0xCC, 0x9F, 0x1F, 0x71, 0x83, 0x01, 0x7D, 0xD5, 0xD2, 0x33, 0x31, 0xDE, 0x40, 0x7F, 0xBD, 0xD2, 0xE0, 0x28, 0x7D, 0xF2, 0x46, 0x4B, 0xE5, 0x96, 0x2D, 0xF7, 0x92, 0xB7, 0xE6, 0x00, 0x03, 0xB5, 0xC8, 0x07, 0xB7, 0x80, 0x31, 0x41, 0x64, 0x51, 0x6F, 0xC0, 0x38, 0x91, 0xFC, 0xF6, 0x5B, 0x23, 0x73, 0x41, 0x76, 0x6D, 0x11, 0x09, 0x38, 0xEE, 0xCE, 0xAE, 0xA8, 0xF9, 0x02, 0x44, 0x95, 0x02, 0x75, 0x99, 0x5A, 0x46, 0xA7, 0x67, 0x29, 0x2F, 0x25, 0xD3, 0x03, 0x73, 0xDE, 0x02, 0xB7, 0x76, 0x34, 0x9A, 0x85, 0x54, 0x02, 0x91, 0xC5, 0x75, 0x3D, 0x62, 0x3D, 0x00, 0xC7, 0x36, 0x75, 0xB9, 0xB1, 0x53, 0x01, 0x8B, 0x07, 0x75, 0x6D, 0x62, 0x86, 0x01, 0xCB, 0x8D, 0xEA, 0x4E, 0x44, 0x6D, 0x04, 0x16, 0x2A, 0xD6, 0x45, 0x46, 0x0E, 0x04, 0x66, 0xFE, 0xA8, 0xD9, 0x16, 0x11, 0x05, 0x4C, 0x89, 0xAE, 0xFC, 0xB6, 0xAB, 0x0D, 0x79, 0x27, 0x5D, 0x6D, 0x40, 0x8B, 0x0C, 0xF2, 0xE1, 0x01, 0x40, 0xFF, 0x23, 0xF9, 0xF2, 0x0C, 0x30, 0x38, 0x80, 0x2C, 0x3F, 0x02, 0x8C, 0x9A, 0x51, 0xA9, 0x45, 0xB6, 0x5E, 0x30, 0x53, 0xF5, 0xD4, 0xA2, 0x3A, 0x1F, 0xC0, 0x65, 0x4D, 0x57, 0x5D, 0x12, 0x48, 0xDE, 0x01, 0x90, 0x96, 0xAB, 0x76, 0x9A, 0xEA, 0x77, 0x27, 0x53, 0x8A, 0xD6, 0x77, 0x02, 0x9A, 0x4A, 0x64, 0x09, 0x16, 0x5D, 0x80, 0x42, 0xE5, 0xAA, 0x2D, 0xBE, 0x79, 0x40, 0x8A, 0x7E, 0xAD, 0x63, 0x70, 0x3E, 0x10, 0xE2, 0x54, 0x3D, 0x6D, 0x47, 0x6F, 0xC0, 0xCD, 0xBD, 0xE6, 0x49, 0xF0, 0x6C, 0xC0, 0x36, 0xAF, 0xD6, 0x23, 0xE8, 0x0C, 0x60, 0x3D, 0xB7, 0x76, 0x50, 0xE0, 0x17, 0xC0, 0x7C, 0x53, 0x8D, 0x52, 0x80, 0x23, 0xF9, 0xA4, 0x2D, 0xD0, 0x56, 0x9B, 0x2C, 0xFE, 0x0B, 0x74, 0xDE, 0x4C, 0x56, 0xAD, 0x00, 0xF4, 0x02, 0xFE, 0x4E, 0x22, 0x81, 0x51, 0x37, 0x0A, 0xBE, 0x0A, 0x57, 0xEF, 0x30, 0x33, 0x12, 0xFA, 0x3C, 0xEF, 0x3E, 0x80, 0x34, 0x2A, 0xDB, 0x94, 0xDA, 0xBF, 0x17, 0xE9, 0x31, 0xAA, 0xCF, 0x74, 0x80, 0xF4, 0xAF, 0x6C, 0x97, 0x2E, 0xCC, 0x1F, 0x04, 0x00, 0x3F, 0xC3, 0x65, 0xB6, 0x56, 0x5F, 0x80, 0x7F, 0x2F, 0xD4, 0x3C, 0xB1, 0xB3, 0x06, 0x8E, 0x6D, 0xAC, 0x8F, 0x72, 0x6A, 0x06, 0x12, 0x1F, 0xCA, 0xCE, 0xBA, 0x7D, 0x01, 0x22, 0x2C, 0x1A, 0x13, 0xDC, 0xAD, 0x00, 0xFF, 0xDE, 0xF5, 0x69, 0x6E, 0x07, 0x01, 0xF7, 0xF1, 0xF5, 0xCA, 0xAE, 0x15, 0xE4, 0xDB, 0xDB, 0x80, 0x66, 0x19, 0x59, 0x75, 0x08, 0xD0, 0x4A, 0x2E, 0x6F, 0x22, 0x81, 0xDE, 0xB1, 0x77, 0x87, 0x08, 0x4D, 0x36, 0xEC, 0xF8, 0x2C, 0x5C, 0xFF, 0x4D, 0x35, 0x50, 0xE8, 0x9A, 0x03, 0x90, 0xC6, 0x11, 0x03, 0xC2, 0xD4, 0x9E, 0x93, 0x0E, 0x66, 0x2A, 0xCF, 0x55, 0x41, 0xFA, 0x41, 0x39, 0x14, 0x72, 0x0F, 0x4C, 0x54, 0xB4, 0x1B, 0xA7, 0x42, 0x56, 0x06, 0x03, 0xC0, 0xF7, 0xF9, 0x4D, 0x15, 0x4B, 0xCB, 0x80, 0x87, 0xB3, 0x1A, 0xB6, 0xAC, 0x0D, 0x02, 0xCE, 0xFF, 0xA9, 0xFD, 0xB8, 0xFE, 0x25, 0x70, 0x64, 0x4C, 0x7D, 0xCF, 0x4D, 0xD3, 0x80, 0xE4, 0xE2, 0xC6, 0xA2, 0xAD, 0xEB, 0x80, 0xD8, 0xDF, 0x4D, 0xF3, 0x6C, 0x56, 0x92, 0xE5, 0x87, 0x00, 0x8D, 0x33, 0xF5, 0xED, 0x48, 0x40, 0x67, 0xDE, 0xF3, 0x8B, 0xC2, 0xA1, 0x91, 0x69, 0x3D, 0x85, 0x93, 0x3E, 0xAD, 0xD6, 0x21, 0xB5, 0xF5, 0x16, 0xFB, 0x01, 0x64, 0xCF, 0xC1, 0x63, 0xA7, 0xB6, 0x28, 0x21, 0x57, 0x8E, 0x57, 0x9A, 0xA7, 0xBC, 0x96, 0xB4, 0x79, 0xA4, 0xBC, 0x56, 0xA9, 0x3D, 0xE9, 0x36, 0x51, 0xF1, 0x22, 0x40, 0xFA, 0xF8, 0x2B, 0xBA, 0x0A, 0xF3, 0xBF, 0x62, 0xFF, 0xCC, 0x2F, 0x24, 0x09, 0x00, 0x3F, 0x7F, 0x35, 0x69, 0x4D, 0x5B, 0x0F, 0xFC, 0xF7, 0xBB, 0xD9, 0x6C, 0x41, 0x08, 0x70, 0xF3, 0xA6, 0xEC, 0xB6, 0xE9, 0x15, 0xE0, 0xFC, 0xB6, 0xC6, 0xA8, 0x15, 0x91, 0xC0, 0xB1, 0x8B, 0x8D, 0x59, 0xAB, 0x63, 0x1B, 0x23, 0x49, 0xA0, 0x65, 0xC1, 0xC7, 0x24, 0x52, 0x37, 0x5E, 0x73, 0xF8, 0xD9, 0x1E, 0x22, 0x0F, 0xCB, 0xF0, 0xD3, 0x27, 0x3B, 0xCF, 0x1C, 0x36, 0x04, 0x10, 0x79, 0xE9, 0x5D, 0xE1, 0xE4, 0x95, 0xAD, 0x77, 0xAB, 0xCC, 0x27, 0x57, 0x75, 0x54, 0xF6, 0x50, 0xCC, 0x23, 0xB7, 0xFE, 0xA3, 0x98, 0xA7, 0x50, 0x44, 0x3A, 0xC5, 0x28, 0x14, 0xE1, 0x2D, 0xE9, 0x6D, 0x88, 0xF5, 0x00, 0x99, 0x33, 0x5C, 0xB9, 0xB5, 0xF0, 0xD1, 0x0A, 0x6C, 0x99, 0x70, 0x99, 0x6C, 0x8E, 0x06, 0x80, 0xCA, 0x79, 0xE4, 0xF8, 0x4A, 0xE0, 0xCD, 0x72, 0xD9, 0x53, 0xE3, 0x4B, 0xC0, 0xE3, 0x9A, 0xE6, 0xD7, 0x53, 0xFF, 0x02, 0x37, 0x57, 0xD2, 0x67, 0x96, 0xEF, 0xA7, 0x7C, 0x12, 0xE8, 0x78, 0xF9, 0x8A, 0x8D, 0xB0, 0x77, 0x4C, 0xD8, 0x72, 0xE1, 0x20, 0x9A, 0x40, 0x38, 0x51, 0x19, 0x72, 0xFB, 0x8C, 0xEF, 0x3C, 0x5D, 0xA5, 0x9C, 0x9C, 0x63, 0xAA, 0x52, 0xAE, 0x78, 0x97, 0x5C, 0xB9, 0x4F, 0xF1, 0xAE, 0xC2, 0x6A, 0x72, 0xE3, 0x0F, 0x85, 0xD5, 0xC8, 0x24, 0x1D, 0xD2, 0x90, 0x09, 0x90, 0x1E, 0x07, 0x00, 0x61, 0xB4, 0x19, 0x56, 0x0B, 0x4F, 0x8F, 0x56, 0x78, 0x25, 0x7C, 0x96, 0xA1, 0xD8, 0xBF, 0x43, 0x1F, 0xB2, 0xCA, 0x16, 0x00, 0x1A, 0x7B, 0x37, 0x4D, 0xE8, 0x3F, 0x06, 0xF8, 0x69, 0xC7, 0xB8, 0xE1, 0xED, 0x80, 0xD7, 0x63, 0x39, 0x6F, 0xCC, 0x79, 0x32, 0x45, 0xEC, 0x38, 0x4C, 0xC6, 0xDF, 0x04, 0x86, 0xFD, 0x20, 0xFD, 0x00, 0x2C, 0x90, 0x91, 0xD6, 0xEB, 0x00, 0xEB, 0x75, 0xE4, 0xEA, 0x10, 0x4D, 0x7B, 0x1B, 0x3B, 0x12, 0x00, 0xC2, 0x5F, 0x0B, 0x75, 0x06, 0xEC, 0x19, 0x20, 0x34, 0x41, 0xF4, 0x4A, 0xA1, 0xAD, 0x55, 0x84, 0x74, 0xEE, 0xFE, 0xDC, 0x15, 0x24, 0x4C, 0xA1, 0x97, 0xAA, 0xF0, 0xD6, 0x48, 0xCB, 0x33, 0x64, 0x07, 0xA5, 0xAA, 0x32, 0x0B, 0x90, 0x7A, 0x15, 0xE2, 0x26, 0xF7, 0xB5, 0x2F, 0xD0, 0x14, 0x6D, 0xDB, 0xE7, 0x51, 0x22, 0xD0, 0x70, 0xDF, 0x66, 0xC1, 0x65, 0x7D, 0xA0, 0xBE, 0x95, 0x8D, 0x27, 0x99, 0x5E, 0x05, 0x74, 0xE8, 0x46, 0xA6, 0x6C, 0x04, 0x06, 0x97, 0x92, 0x3E, 0x7D, 0x01, 0xD3, 0x24, 0xD2, 0x5E, 0x1B, 0xB0, 0x8A, 0x27, 0xED, 0xBA, 0xB7, 0x76, 0xDA, 0x22, 0xFA, 0x00, 0xEC, 0xB9, 0x2F, 0xD4, 0x9C, 0xB0, 0xA7, 0x8D, 0xD0, 0xE8, 0x5A, 0xC4, 0x4F, 0xE1, 0xF6, 0x2F, 0xA1, 0x07, 0x85, 0x6E, 0x93, 0x77, 0xF5, 0x15, 0x66, 0x2E, 0x75, 0x89, 0x21, 0x7B, 0xBF, 0x2C, 0x3F, 0x66, 0x76, 0x85, 0xD4, 0x77, 0x68, 0xBA, 0x6B, 0x56, 0x50, 0xB2, 0x1A, 0x68, 0x32, 0x75, 0x0A, 0x7F, 0x5C, 0x04, 0xD4, 0xBF, 0x72, 0xF8, 0xAF, 0x40, 0x06, 0xD4, 0xFE, 0x70, 0x28, 0x3A, 0x29, 0xEE, 0x63, 0x97, 0xB6, 0x3D, 0x22, 0xB3, 0x37, 0x00, 0xBA, 0xCD, 0x64, 0x6A, 0x1C, 0x30, 0xC4, 0x89, 0x4C, 0x6C, 0x01, 0x4C, 0xFC, 0x4A, 0x06, 0x4C, 0x03, 0xCC, 0xAD, 0x48, 0xBB, 0x97, 0x80, 0x53, 0x4F, 0x69, 0xC7, 0xFE, 0xC7, 0xC2, 0x4E, 0x21, 0x89, 0x4B, 0x84, 0xC6, 0x29, 0xB1, 0x3F, 0x85, 0x2E, 0x4E, 0xE1, 0x79, 0x42, 0xCF, 0xE0, 0x90, 0x20, 0xE1, 0x55, 0x7D, 0xEB, 0x36, 0xE4, 0xF8, 0xED, 0xF5, 0x93, 0x57, 0x15, 0xD7, 0xB7, 0x05, 0x9A, 0x57, 0x79, 0xD6, 0x3E, 0x6B, 0x0F, 0xD4, 0x1F, 0x72, 0x2E, 0xBA, 0x24, 0xB7, 0x76, 0x9F, 0x73, 0xFC, 0x31, 0x27, 0xB9, 0x35, 0x2E, 0xDF, 0x53, 0xA7, 0x01, 0x75, 0xED, 0x5C, 0x67, 0x91, 0x87, 0x6E, 0x02, 0x3A, 0x77, 0xC8, 0xB4, 0x4D, 0xC0, 0xB0, 0x31, 0x72, 0xCB, 0x01, 0xC3, 0x58, 0xD2, 0xDF, 0x16, 0x58, 0x37, 0x8E, 0xF4, 0xD4, 0x02, 0xC4, 0xDE, 0xD1, 0x5B, 0x81, 0x98, 0xBE, 0xA4, 0xDA, 0x93, 0x76, 0x4D, 0x69, 0x9D, 0x49, 0xC0, 0x28, 0x31, 0x5D, 0x4D, 0xE8, 0xF7, 0x29, 0x49, 0xBA, 0x8F, 0x9D, 0x8D, 0xBB, 0x2C, 0x7C, 0x3C, 0xD7, 0xE9, 0xAA, 0xB0, 0x29, 0x20, 0xA0, 0xED, 0x7F, 0xFE, 0x40, 0xBD, 0x85, 0x57, 0x71, 0xC1, 0x4F, 0xA0, 0xFA, 0x95, 0xE7, 0xE2, 0x43, 0x1B, 0xE5, 0x8E, 0xF6, 0x2A, 0xDA, 0x7F, 0x0A, 0xA8, 0x7A, 0xED, 0xBD, 0x36, 0xA2, 0xAB, 0xDC, 0x33, 0x5E, 0x3F, 0xC8, 0xE3, 0x37, 0x00, 0x35, 0x92, 0x39, 0x53, 0x80, 0x21, 0xD1, 0x64, 0xDA, 0x2C, 0xC0, 0xE8, 0x31, 0x19, 0x1E, 0x01, 0x58, 0xBE, 0x22, 0x3D, 0x22, 0x01, 0x57, 0x23, 0x72, 0x8D, 0x17, 0xB0, 0xA7, 0x35, 0x39, 0xB2, 0xDF, 0x3F, 0xBB, 0x52, 0x3B, 0x90, 0x80, 0x81, 0xDF, 0xD1, 0x7E, 0xC2, 0xD0, 0x3E, 0x99, 0x42, 0x44, 0x1F, 0xCC, 0xEA, 0x22, 0xAC, 0xCB, 0xF7, 0x4F, 0x7A, 0x17, 0x01, 0xD4, 0x0F, 0x0A, 0xA8, 0xB8, 0x28, 0xEE, 0x5D, 0x61, 0x01, 0x83, 0xB2, 0xFC, 0xE4, 0xCE, 0x08, 0xEC, 0x1E, 0xF3, 0x8F, 0xDC, 0xA9, 0x81, 0x83, 0x02, 0x9B, 0xE4, 0x0E, 0x0D, 0xB8, 0xEC, 0xE6, 0x2F, 0xD7, 0xDE, 0xBF, 0x91, 0x3C, 0x75, 0x05, 0x50, 0x99, 0x4E, 0xE6, 0xEE, 0x01, 0x06, 0x94, 0x92, 0x39, 0x1D, 0x00, 0xA3, 0xCB, 0x64, 0xC6, 0x31, 0xC0, 0xD4, 0x97, 0x0C, 0xB8, 0x08, 0xB8, 0x4E, 0x21, 0xCD, 0x9F, 0x02, 0x09, 0x21, 0xE4, 0x12, 0x83, 0x5E, 0x65, 0x07, 0x3E, 0x91, 0x80, 0xE1, 0xAD, 0xB3, 0x4A, 0x42, 0xFF, 0xFF, 0x4E, 0x0E, 0x12, 0xE6, 0x14, 0x1C, 0x52, 0xAE, 0x36, 0x04, 0xC8, 0xB0, 0x25, 0xF9, 0x8E, 0x40, 0xF9, 0xF0, 0xD0, 0x35, 0xC9, 0x2E, 0x72, 0xCF, 0x86, 0xDE, 0x0C, 0x7B, 0x01, 0x54, 0xB5, 0x0B, 0x1D, 0xE5, 0xB6, 0x4C, 0x9E, 0x1D, 0x42, 0xA6, 0xD8, 0x3C, 0x96, 0x7B, 0x67, 0x67, 0xFC, 0xFA, 0x56, 0xE2, 0x7E, 0xB8, 0xB3, 0x15, 0x79, 0xF6, 0x1E, 0xA0, 0xE4, 0x28, 0xDF, 0x13, 0x01, 0xF4, 0x2F, 0x24, 0x73, 0xFB, 0x03, 0x13, 0xDB, 0x93, 0xE9, 0xE1, 0xC0, 0x72, 0x07, 0x72, 0xDF, 0x0E, 0x60, 0xFB, 0x54, 0xD2, 0x74, 0x29, 0x90, 0x76, 0x84, 0x74, 0x1E, 0xDF, 0xC6, 0x28, 0x39, 0x83, 0x04, 0x0C, 0xEE, 0x15, 0xA4, 0x09, 0x13, 0xB6, 0xE4, 0x87, 0x08, 0x9B, 0xFD, 0x4E, 0x6F, 0xCC, 0xEB, 0x0C, 0x54, 0x6A, 0x45, 0xF5, 0x8D, 0xBB, 0x05, 0xD4, 0x68, 0xC6, 0x8C, 0xF1, 0x98, 0x08, 0x54, 0x8C, 0x8F, 0xF2, 0xDC, 0xF2, 0x19, 0xA8, 0xCC, 0x8B, 0xF4, 0x58, 0x9D, 0x2D, 0x77, 0x45, 0xE4, 0xD4, 0xC5, 0x85, 0x72, 0x7B, 0xEC, 0xDE, 0x34, 0xE7, 0x03, 0x50, 0x31, 0x33, 0x3C, 0x81, 0xCC, 0xFF, 0x05, 0xA0, 0x8C, 0x3C, 0x97, 0x02, 0xF4, 0xFB, 0x40, 0x9E, 0x29, 0x02, 0x0C, 0xF2, 0xC8, 0x0B, 0xD3, 0xD4, 0x7A, 0x19, 0x2B, 0x93, 0xC9, 0xA6, 0x80, 0xD3, 0x07, 0xD2, 0xED, 0x1E, 0x90, 0x50, 0x4D, 0x7A, 0x39, 0xAA, 0x75, 0xCF, 0xFA, 0x42, 0x02, 0x6A, 0x23, 0xFE, 0xED, 0x20, 0xBC, 0x37, 0xE9, 0x92, 0xD6, 0x31, 0x00, 0xEF, 0xC7, 0x9D, 0xB9, 0xE6, 0xEF, 0x01, 0xFC, 0x49, 0x4D, 0x9A, 0xB9, 0x7E, 0x3F, 0x50, 0x92, 0x93, 0xD4, 0x6D, 0x89, 0xB2, 0xDC, 0xF3, 0xFB, 0x27, 0x4D, 0xBB, 0x07, 0x94, 0x9E, 0x8E, 0x7F, 0x69, 0xB8, 0x10, 0x28, 0x1B, 0x17, 0x77, 0x61, 0xB4, 0x22, 0x50, 0xAE, 0x1A, 0x3B, 0x78, 0xD0, 0x05, 0x79, 0x76, 0x8A, 0x99, 0x4F, 0x16, 0x5C, 0x01, 0x00, 0xF2, 0x8A, 0x27, 0xA0, 0x6B, 0x49, 0x16, 0x06, 0x00, 0x23, 0x7E, 0x92, 0x57, 0x77, 0x2A, 0x39, 0x19, 0x1D, 0x21, 0xF3, 0x2E, 0x4B, 0x3F, 0x7F, 0xF5, 0x44, 0x3E, 0x10, 0xF6, 0x98, 0x3C, 0x9F, 0x08, 0x24, 0x8D, 0xFC, 0xA6, 0x77, 0xEA, 0x04, 0x70, 0x78, 0xEF, 0xF0, 0x46, 0x60, 0xB2, 0xF9, 0x83, 0xEE, 0xDA, 0x03, 0x74, 0x1B, 0xFF, 0x04, 0x5F, 0x4B, 0xED, 0xBA, 0x4D, 0x53, 0xE7, 0xD7, 0x9D, 0xC3, 0xED, 0x3B, 0xD7, 0xB4, 0xD9, 0xFC, 0xFD, 0x6A, 0xA6, 0x4F, 0x87, 0x6B, 0xDA, 0xB3, 0xBE, 0xA9, 0xA5, 0xF8, 0xE9, 0x78, 0xB4, 0x0D, 0xFC, 0xF6, 0x39, 0x49, 0xAF, 0x75, 0x6C, 0x9B, 0x7F, 0xBF, 0x7F, 0x49, 0x30, 0x6C, 0x39, 0xA3, 0xCD, 0xFC, 0xEF, 0x37, 0xF6, 0x9E, 0x6C, 0xD1, 0xA5, 0x8D, 0xF5, 0xCF, 0x57, 0x7B, 0xDE, 0x4B, 0xF7, 0x20, 0x40, 0xDE, 0x5B, 0xA3, 0xB8, 0x41, 0xA7, 0x84, 0xBC, 0x11, 0x0E, 0x0C, 0x57, 0x26, 0xEF, 0x86, 0x02, 0xC6, 0x5B, 0xC9, 0x87, 0x8D, 0xC0, 0x9A, 0x0D, 0x64, 0x71, 0x19, 0xB0, 0x4E, 0xA1, 0x3E, 0xBF, 0x76, 0x22, 0xB0, 0xF9, 0x59, 0x76, 0x5C, 0x69, 0x4F, 0x20, 0x6D, 0x30, 0xF0, 0xF3, 0x6A, 0x94, 0xD7, 0x65, 0x00, 0xC7, 0x57, 0x94, 0x7C, 0x3C, 0x1E, 0x0A, 0xD8, 0x2A, 0x56, 0x57, 0x25, 0x76, 0x03, 0x56, 0xC7, 0xD5, 0xAF, 0x4E, 0xB8, 0x06, 0xCC, 0x5B, 0x54, 0xEB, 0xB3, 0x37, 0x15, 0x98, 0x7C, 0xA1, 0x3C, 0x35, 0xB6, 0x35, 0x60, 0x78, 0xA4, 0xC2, 0x29, 0x7A, 0x19, 0x30, 0xEE, 0x70, 0x45, 0x8F, 0xDD, 0x3F, 0x80, 0x51, 0xB9, 0xE5, 0xAE, 0xE1, 0x97, 0xC8, 0xEB, 0x97, 0x14, 0x7C, 0x95, 0xE4, 0xDE, 0x9D, 0xA6, 0x75, 0x53, 0xE5, 0x1B, 0xF9, 0xE8, 0x08, 0x30, 0x70, 0x00, 0xF9, 0xD2, 0x09, 0x18, 0x1B, 0x44, 0xFE, 0x2C, 0x04, 0x8C, 0xB4, 0xCB, 0x9E, 0x90, 0x72, 0x1B, 0xB3, 0xAF, 0x96, 0x6D, 0x04, 0xDC, 0xF6, 0xB6, 0xDB, 0x5D, 0xF5, 0x02, 0x38, 0xE8, 0x0F, 0x90, 0x31, 0xD1, 0x69, 0x69, 0x80, 0xAC, 0x77, 0xED, 0xBC, 0xB8, 0x74, 0xE0, 0xA4, 0x43, 0xF5, 0x1F, 0xFF, 0x5F, 0xC0, 0x9E, 0xE7, 0xB5, 0x39, 0x21, 0x26, 0x80, 0xF7, 0xE9, 0x2A, 0xFD, 0x9D, 0xA7, 0x01, 0x87, 0x87, 0x75, 0xE3, 0x77, 0x34, 0x02, 0x1B, 0x1D, 0xEA, 0xB6, 0xED, 0x50, 0x04, 0xCC, 0xF2, 0x6B, 0xAC, 0x83, 0x08, 0x2C, 0x1F, 0x5D, 0xA3, 0x1E, 0x78, 0x81, 0xBC, 0x67, 0x01, 0xA8, 0xBF, 0x20, 0x9F, 0x26, 0x01, 0xBA, 0x9D, 0xC9, 0xF7, 0x73, 0x80, 0xCE, 0x6D, 0xC8, 0x9A, 0x66, 0xA0, 0x8F, 0xD3, 0x87, 0x5D, 0xCD, 0xE1, 0xC0, 0xC4, 0xBC, 0x8C, 0x45, 0xB5, 0xEF, 0x00, 0x6B, 0xDF, 0xD9, 0xB9, 0x64, 0x97, 0x52, 0xDF, 0x29, 0x00, 0x39, 0x3F, 0x21, 0x50, 0x43, 0xBF, 0x3D, 0x79, 0xA0, 0x85, 0x79, 0xBA, 0xC8, 0x85, 0xB5, 0x16, 0xF6, 0xC0, 0x97, 0x49, 0xB2, 0xC4, 0x75, 0x01, 0xC0, 0x95, 0x07, 0x35, 0x1A, 0x76, 0x5D, 0x80, 0xC3, 0x81, 0x0D, 0x7A, 0xCE, 0xAD, 0x80, 0x84, 0x9F, 0x4D, 0x21, 0x6E, 0x37, 0x80, 0xB0, 0xB7, 0x8D, 0x13, 0xDC, 0x62, 0x00, 0xDF, 0xC9, 0xF5, 0xDA, 0xAE, 0x8F, 0x00, 0x97, 0x8C, 0xFA, 0x1E, 0xAE, 0x81, 0x64, 0xD1, 0x24, 0x40, 0x7D, 0x1F, 0xF9, 0xB5, 0x02, 0xD0, 0x78, 0x49, 0x92, 0x80, 0xD6, 0xD5, 0x0F, 0x42, 0x0C, 0xB7, 0x3C, 0xD9, 0x59, 0x38, 0xC7, 0xD6, 0xBE, 0x86, 0xD4, 0x3B, 0xB2, 0x22, 0xA4, 0x53, 0x20, 0x39, 0xD4, 0xC6, 0xDC, 0xAF, 0xAF, 0x2A, 0xB9, 0x2D, 0x57, 0x5F, 0x4D, 0xD1, 0x86, 0xDC, 0xD1, 0xD8, 0xFB, 0x09, 0x40, 0x26, 0xB4, 0x6D, 0xA9, 0x37, 0x2E, 0x8E, 0xAC, 0x5E, 0x08, 0x00, 0xDF, 0xC7, 0xCB, 0x02, 0x97, 0xE8, 0x00, 0x8F, 0x8E, 0x34, 0x7E, 0x5D, 0xB3, 0x1A, 0xB8, 0x68, 0x53, 0xFB, 0xC4, 0xE2, 0x5F, 0xE0, 0xE8, 0xF6, 0x7A, 0x65, 0xEB, 0x0D, 0x40, 0xEA, 0xEE, 0xC6, 0x9C, 0x4D, 0x7B, 0x81, 0xB8, 0x80, 0x26, 0xED, 0x2D, 0x0A, 0xE4, 0x0F, 0x43, 0x40, 0xBD, 0x50, 0xEA, 0x57, 0xFE, 0xF1, 0x35, 0x42, 0xD8, 0xBF, 0xBE, 0x50, 0x41, 0x38, 0x7A, 0x89, 0xE7, 0x5D, 0xE1, 0x3C, 0x9D, 0x36, 0x4F, 0x84, 0xEB, 0x34, 0x00, 0x72, 0x5A, 0xD7, 0xFE, 0x3D, 0xD5, 0xD6, 0x93, 0xB6, 0x4D, 0x8A, 0x03, 0x55, 0x46, 0x90, 0x7E, 0x15, 0x4A, 0x0F, 0x01, 0x72, 0xD7, 0x55, 0xD5, 0x97, 0xC2, 0xFC, 0x18, 0x60, 0x8A, 0x1A, 0xD9, 0xE4, 0x0B, 0x00, 0x7F, 0xFE, 0x36, 0x75, 0x35, 0x2E, 0x04, 0x8A, 0x7B, 0x34, 0x39, 0xCF, 0x5A, 0x0C, 0xDC, 0x5B, 0xD5, 0xFC, 0x6B, 0xE1, 0x20, 0xA0, 0x20, 0x49, 0x66, 0xB9, 0x64, 0x37, 0x70, 0x72, 0x91, 0x2C, 0x7D, 0xF9, 0x2E, 0xB2, 0x31, 0x1A, 0x50, 0x7F, 0x5E, 0x12, 0x42, 0x02, 0xED, 0x87, 0xDC, 0xFA, 0x2E, 0x1C, 0xBC, 0x3F, 0x66, 0x95, 0x70, 0xDC, 0x94, 0x19, 0x16, 0xA4, 0xC2, 0x9F, 0xA9, 0x4D, 0x00, 0xD9, 0xE3, 0xC2, 0xC0, 0xED, 0xEA, 0x79, 0xA4, 0x69, 0xB2, 0xA2, 0xA6, 0x52, 0x12, 0xB9, 0x65, 0x9C, 0x52, 0x92, 0x02, 0x49, 0x17, 0x99, 0xC2, 0x15, 0x80, 0xF4, 0x99, 0x89, 0xF7, 0xC2, 0x6C, 0x43, 0xC5, 0x58, 0xE1, 0xBD, 0x32, 0x40, 0x3F, 0x8F, 0xAC, 0x73, 0x07, 0x80, 0x86, 0xE9, 0xBC, 0x3A, 0xFC, 0x03, 0xF0, 0x69, 0x73, 0xB3, 0xF5, 0xF8, 0x53, 0xC0, 0xF3, 0xBF, 0xCD, 0xC7, 0x8C, 0xB4, 0x80, 0xBB, 0x4E, 0x2C, 0x9E, 0x92, 0x59, 0x96, 0x4B, 0x02, 0x6D, 0xFB, 0xFD, 0xD7, 0x8B, 0xD4, 0xAE, 0xD4, 0x2C, 0xCD, 0x12, 0x19, 0xFD, 0x96, 0x6C, 0xEB, 0x49, 0xEA, 0xDC, 0x1C, 0x38, 0x0A, 0x10, 0xD9, 0xA4, 0x51, 0xDD, 0x8F, 0x9C, 0x6A, 0xAB, 0x3C, 0x50, 0x69, 0x37, 0x69, 0x5A, 0xAF, 0xD8, 0x01, 0x25, 0xA4, 0x55, 0x3B, 0x94, 0x00, 0xA4, 0xDD, 0x0C, 0x40, 0xE8, 0x56, 0x20, 0xB9, 0xEB, 0x92, 0x64, 0xEE, 0x2E, 0x85, 0x96, 0xC2, 0x07, 0x77, 0x01, 0xB5, 0x52, 0xF2, 0xBB, 0x12, 0xD0, 0x79, 0x1A, 0x49, 0xB6, 0x52, 0x00, 0x2A, 0xE3, 0xC9, 0x41, 0xDF, 0x81, 0x0F, 0xA9, 0xFC, 0x3E, 0x6C, 0xD0, 0xEB, 0x9F, 0xA4, 0x96, 0x99, 0x96, 0xD9, 0x39, 0x1F, 0xB2, 0xB5, 0x51, 0x6B, 0x23, 0xCF, 0x3E, 0xA4, 0xD2, 0xC6, 0x5E, 0x1B, 0xFB, 0x14, 0x92, 0xC0, 0xF8, 0x61, 0x00, 0xD9, 0xF7, 0x89, 0xF6, 0x5B, 0xA1, 0x09, 0x54, 0xE7, 0xE2, 0x29, 0xB9, 0xC4, 0x05, 0x4F, 0x45, 0x36, 0x73, 0x02, 0x84, 0x5B, 0x7E, 0x4A, 0x6E, 0xFF, 0x24, 0xE9, 0x7B, 0x52, 0xF2, 0x40, 0xB6, 0xE4, 0x19, 0x0D, 0xA8, 0x0B, 0x1F, 0x2A, 0xA0, 0x97, 0xE2, 0x21, 0xF2, 0xD3, 0x41, 0xA0, 0x55, 0x05, 0x59, 0xAD, 0x08, 0x00, 0xCD, 0x51, 0xCD, 0xC7, 0xBA, 0xDC, 0x94, 0xEE, 0x41, 0xCA, 0x99, 0xE4, 0x3E, 0x2F, 0xA0, 0xA7, 0x3D, 0x19, 0x74, 0x01, 0x30, 0x6C, 0x24, 0xD7, 0xDE, 0x02, 0xD6, 0xDE, 0x22, 0xCD, 0xD3, 0x14, 0x87, 0xAD, 0x1B, 0x46, 0x02, 0x40, 0x54, 0x47, 0xA1, 0xB6, 0x5E, 0x8C, 0x9E, 0xD0, 0x04, 0x51, 0xEF, 0x85, 0xF6, 0xDD, 0x22, 0xBB, 0x09, 0xBD, 0xF5, 0x42, 0x0A, 0x85, 0x29, 0xF4, 0xA8, 0x13, 0xDE, 0x0A, 0xB2, 0x00, 0xA9, 0x5C, 0x51, 0x76, 0x4F, 0xD8, 0x03, 0xE4, 0x92, 0x55, 0xE5, 0xE1, 0x90, 0x6B, 0x6D, 0x57, 0xFC, 0x1B, 0x68, 0x2A, 0xB5, 0x8E, 0xB9, 0x33, 0x1A, 0x68, 0xF8, 0x65, 0xED, 0x45, 0x66, 0x44, 0x48, 0xAB, 0xD3, 0x95, 0x80, 0x8E, 0x37, 0xC8, 0xDD, 0x0B, 0x81, 0x71, 0x9F, 0x49, 0x8B, 0x56, 0xC0, 0xFA, 0x23, 0xE4, 0x86, 0x07, 0x72, 0xED, 0xA4, 0x1D, 0x49, 0xDA, 0x42, 0xED, 0x75, 0xF1, 0xBF, 0x85, 0x53, 0x5D, 0xE3, 0x5E, 0x09, 0xBD, 0x36, 0x44, 0xAB, 0x0A, 0xBD, 0x1F, 0x44, 0xB4, 0x17, 0xA6, 0xA6, 0xBB, 0xB6, 0x13, 0x3E, 0xF9, 0x68, 0x71, 0x88, 0x6C, 0x53, 0x52, 0xF7, 0xC5, 0xD2, 0x58, 0x16, 0x08, 0x90, 0xB6, 0x8B, 0xDF, 0xD8, 0x02, 0x4D, 0x9F, 0x36, 0xFF, 0xBE, 0x43, 0xA0, 0xC1, 0x77, 0x73, 0xCF, 0x0B, 0x79, 0x40, 0xFD, 0xE4, 0xCD, 0x8F, 0xC8, 0xAC, 0xA7, 0xD2, 0x8E, 0xD4, 0x91, 0x80, 0x9E, 0x11, 0x19, 0x67, 0x02, 0x8C, 0x5D, 0x4B, 0x6E, 0x1A, 0x0F, 0x58, 0x65, 0x92, 0x36, 0xC3, 0x81, 0x4D, 0x57, 0xA5, 0x1D, 0xE9, 0x16, 0x42, 0x05, 0xB5, 0xD4, 0x4E, 0xC2, 0x29, 0x4F, 0x93, 0x17, 0x09, 0x7D, 0x7D, 0xF7, 0x4F, 0x16, 0x7A, 0x4C, 0x89, 0xCF, 0x13, 0x5E, 0x7C, 0x6D, 0xB3, 0x8A, 0xEC, 0x12, 0x54, 0xB3, 0x6A, 0x6D, 0x0A, 0xD9, 0x6F, 0x0B, 0xB9, 0x66, 0xC8, 0xC7, 0x42, 0xA0, 0x69, 0x9E, 0xFD, 0xCA, 0xFB, 0x3D, 0x80, 0xFA, 0xE7, 0xB6, 0x53, 0xCE, 0x27, 0x00, 0x75, 0xFB, 0x6C, 0x65, 0xB9, 0xA3, 0xE5, 0xAE, 0xB5, 0x6F, 0x4B, 0x1E, 0xD4, 0x91, 0x76, 0x64, 0x8C, 0x00, 0xBA, 0x9C, 0x23, 0x53, 0xBA, 0x02, 0xC3, 0xFD, 0x48, 0x9F, 0x67, 0xC0, 0x8A, 0x6F, 0xA4, 0xC3, 0x72, 0xC0, 0x6E, 0x22, 0x39, 0xAC, 0x02, 0xD8, 0x33, 0x83, 0xD4, 0x3C, 0xAB, 0xAA, 0x97, 0x6A, 0x44, 0xB6, 0x55, 0x37, 0xBE, 0x9B, 0x42, 0x12, 0xF0, 0xFF, 0x9B, 0xBA, 0x4E, 0x18, 0x66, 0x98, 0xBA, 0x43, 0x78, 0x43, 0xDB, 0xCD, 0x82, 0x1C, 0x2E, 0x6B, 0xEA, 0xBC, 0xFA, 0xD8, 0xAF, 0x49, 0x40, 0x53, 0x7B, 0xE7, 0x53, 0x0F, 0x8C, 0x80, 0xBA, 0xA7, 0xDB, 0x27, 0x9D, 0xDF, 0x22, 0x77, 0xD4, 0xF6, 0x80, 0x23, 0x7E, 0x72, 0xEF, 0x38, 0x3E, 0x4A, 0x1E, 0x27, 0x77, 0xAE, 0x93, 0x15, 0x79, 0x78, 0x95, 0xB4, 0x23, 0x27, 0x12, 0xE8, 0x38, 0x98, 0x4C, 0xBD, 0x02, 0x0C, 0xFF, 0x4B, 0xFA, 0x7D, 0x00, 0x56, 0x6D, 0x21, 0x1D, 0xBB, 0x01, 0x8E, 0xCD, 0xE4, 0xFA, 0xE1, 0x40, 0xB8, 0x36, 0x09, 0x00, 0x87, 0x0B, 0x85, 0x86, 0xC5, 0x47, 0x52, 0x84, 0x3B, 0x13, 0xB2, 0x35, 0x84, 0xA9, 0x5B, 0xD2, 0x8E, 0x09, 0xDF, 0x24, 0x05, 0xAC, 0xA9, 0x37, 0x06, 0x9A, 0x1D, 0xBC, 0x55, 0x1F, 0xF5, 0x01, 0xEA, 0xCD, 0x5C, 0x1F, 0x9C, 0x1F, 0x05, 0xD4, 0x36, 0xB9, 0x16, 0xE7, 0x18, 0xC9, 0x3D, 0xEC, 0x3E, 0x29, 0xA1, 0x16, 0xA8, 0x5B, 0xE6, 0x5E, 0x13, 0x3E, 0x11, 0xA8, 0x49, 0x70, 0x3F, 0x42, 0x1E, 0xBD, 0x21, 0xED, 0x38, 0xA2, 0x05, 0x74, 0x98, 0x42, 0xA6, 0xFD, 0x0B, 0x8C, 0x94, 0xEF, 0xC8, 0x20, 0x60, 0xF4, 0x8B, 0xF4, 0xD9, 0x04, 0x38, 0x3E, 0x26, 0xCD, 0xA7, 0x03, 0x51, 0x17, 0x48, 0x83, 0x13, 0xAA, 0xD7, 0x53, 0xC3, 0x49, 0x60, 0x5C, 0xDD, 0xC9, 0x07, 0xC2, 0x00, 0xFD, 0x63, 0x51, 0xC2, 0xA3, 0xBB, 0x73, 0xA6, 0x0A, 0x9B, 0x37, 0x87, 0xD5, 0x3C, 0x0B, 0x00, 0x6A, 0x26, 0xF8, 0xCD, 0xCE, 0x53, 0x00, 0xAA, 0x66, 0xFB, 0x5C, 0xCD, 0x18, 0x0A, 0x54, 0xA4, 0xF9, 0xFE, 0x88, 0xB6, 0x92, 0xBB, 0xC9, 0x4F, 0x33, 0xB0, 0x3F, 0x50, 0x7E, 0xD3, 0xF7, 0xAC, 0xDB, 0x12, 0xA0, 0x72, 0x9C, 0x6F, 0x7B, 0x52, 0x9C, 0x91, 0x00, 0x79, 0xAA, 0x1A, 0x50, 0xB5, 0x22, 0x0F, 0x8D, 0x02, 0x86, 0xCF, 0x20, 0x53, 0x67, 0x02, 0x53, 0x97, 0x93, 0xA1, 0xB3, 0x01, 0xC7, 0x7B, 0xE4, 0xCE, 0xC1, 0x40, 0xD0, 0x07, 0x72, 0xED, 0x03, 0x20, 0xA5, 0x1D, 0x09, 0x8C, 0xD4, 0xC8, 0xBF, 0x2F, 0x8C, 0xD1, 0x3A, 0xF9, 0x42, 0xF8, 0xFB, 0x9F, 0x5C, 0xB5, 0x97, 0x9E, 0x40, 0x75, 0x53, 0x44, 0xD8, 0xA9, 0x05, 0x40, 0xF9, 0xA1, 0x1D, 0xE1, 0x09, 0x17, 0x81, 0xCA, 0x16, 0x3B, 0x5E, 0xED, 0x7C, 0x02, 0x54, 0x94, 0xEE, 0xE8, 0xEF, 0xAA, 0x03, 0x94, 0x2F, 0x0F, 0xDE, 0xB8, 0xF5, 0xB3, 0x3C, 0x4F, 0x0B, 0x56, 0xB4, 0xB8, 0x06, 0x54, 0x4E, 0x0D, 0x7A, 0x45, 0x9E, 0x9E, 0x25, 0xED, 0xC8, 0x73, 0x06, 0x94, 0xFA, 0xC8, 0xB3, 0x17, 0x30, 0x70, 0x28, 0x79, 0x72, 0x31, 0x60, 0xE0, 0x41, 0xA6, 0x1E, 0x05, 0x6C, 0xFB, 0x90, 0x49, 0x6A, 0x0A, 0x26, 0xBE, 0x43, 0x49, 0x3B, 0x0D, 0x20, 0xBD, 0x17, 0x09, 0x00, 0x57, 0x5B, 0x7E, 0x3D, 0x05, 0x1C, 0x5B, 0x9E, 0xFB, 0xF9, 0xA4, 0x3D, 0x50, 0x7A, 0xE6, 0x58, 0xBB, 0x3D, 0x47, 0x80, 0x8A, 0x87, 0x89, 0x1D, 0x3C, 0x43, 0x81, 0xCA, 0xBD, 0xD1, 0xFB, 0x36, 0xB5, 0x00, 0xAA, 0xD6, 0x45, 0xEB, 0xAE, 0x32, 0x97, 0xE7, 0xF7, 0x51, 0x6B, 0x17, 0x0D, 0x93, 0xDB, 0x72, 0x77, 0xF5, 0xF4, 0xE7, 0x72, 0xFB, 0x46, 0xD8, 0x1A, 0xE6, 0x03, 0x15, 0x2B, 0xC2, 0xBD, 0xC8, 0xFC, 0x55, 0xD2, 0x8E, 0x4B, 0xA5, 0x90, 0x3C, 0x04, 0xF4, 0x5D, 0x2C, 0xD7, 0x1F, 0x30, 0x7A, 0x41, 0x9E, 0x39, 0x08, 0x58, 0x5F, 0x21, 0x4F, 0x3D, 0x02, 0xBC, 0x46, 0xD6, 0x98, 0x9C, 0x51, 0x00, 0x76, 0x6D, 0x7B, 0xD7, 0xE2, 0xE4, 0x46, 0x20, 0xEE, 0x85, 0x51, 0xBC, 0x76, 0xE2, 0xA4, 0x4D, 0x97, 0x7E, 0x68, 0x3D, 0x6A, 0x7B, 0xF7, 0xF7, 0xCB, 0xC2, 0x79, 0x9A, 0x9B, 0xDB, 0xCC, 0xFD, 0xBD, 0xF3, 0x48, 0x8C, 0xCE, 0xC6, 0x56, 0xFD, 0x3F, 0xFB, 0xA5, 0xF7, 0x6F, 0x1D, 0xD1, 0x2A, 0xEE, 0xCB, 0xFB, 0x64, 0x65, 0xCD, 0x76, 0xAD, 0x0C, 0xBE, 0x0D, 0xDB, 0x7F, 0x56, 0xAD, 0xB4, 0x55, 0x9F, 0x6F, 0xED, 0xE2, 0xEF, 0x2B, 0xEB, 0x6A, 0x1D, 0xFD, 0x3E, 0x2B, 0x6E, 0xAD, 0xCA, 0xC2, 0xD6, 0x66, 0xBF, 0x4A, 0xA2, 0xDF, 0x90, 0x85, 0x5D, 0xA5, 0xFE, 0xAB, 0xB9, 0x0A, 0xEF, 0x30, 0x81, 0xBC, 0x11, 0x02, 0xF4, 0xFB, 0x46, 0xDE, 0xCA, 0x01, 0x0C, 0xA2, 0xC9, 0x47, 0x77, 0x80, 0x39, 0xB2, 0x06, 0xEF, 0xA2, 0xB9, 0xC0, 0xF8, 0x6B, 0x15, 0xD5, 0xE5, 0xF2, 0x3C, 0xC4, 0xE5, 0xDC, 0xD4, 0xAF, 0x9F, 0x81, 0xA0, 0x36, 0xC0, 0xDB, 0xE2, 0xED, 0xC6, 0xE7, 0x55, 0x80, 0x53, 0x0E, 0xF5, 0x93, 0x8F, 0xDA, 0x00, 0x7E, 0x9F, 0xCA, 0xC7, 0xC5, 0x77, 0x05, 0xB6, 0x04, 0x34, 0xEC, 0x8C, 0x72, 0x06, 0xCC, 0xDA, 0x36, 0xE8, 0xEE, 0xF6, 0x07, 0x4C, 0x83, 0xEA, 0xBD, 0x22, 0x2C, 0x80, 0x79, 0x6F, 0xEA, 0x7A, 0x85, 0xEB, 0x01, 0xD3, 0xF3, 0xAA, 0x97, 0x87, 0x99, 0x03, 0x26, 0x63, 0x2B, 0xB5, 0x77, 0x26, 0xCB, 0x7B, 0x03, 0x00, 0xDC, 0x23, 0xEF, 0x14, 0x01, 0x1A, 0xAF, 0xC9, 0xA7, 0x5A, 0x2D, 0x75, 0x5A, 0x4D, 0x25, 0x5F, 0xEE, 0x05, 0x06, 0x8F, 0x6E, 0xFE, 0xE7, 0x77, 0x05, 0xD0, 0xF1, 0xF0, 0x87, 0xB7, 0xB2, 0xAD, 0x40, 0xEF, 0xAA, 0x63, 0x2B, 0x2A, 0xBB, 0x00, 0x6B, 0xA6, 0xCF, 0xB4, 0x6A, 0xBC, 0x05, 0xC4, 0xD9, 0x01, 0xE4, 0xF6, 0x19, 0x29, 0xDD, 0x80, 0x86, 0x1E, 0xD5, 0x7A, 0x71, 0xBD, 0x81, 0x5B, 0x3D, 0xAB, 0x7A, 0xB9, 0x35, 0x03, 0x39, 0x63, 0x1A, 0xE7, 0xBA, 0x3F, 0x01, 0xF6, 0x4C, 0x68, 0xEC, 0xE8, 0xA5, 0x0B, 0x04, 0xDE, 0xAB, 0x6B, 0xE5, 0x39, 0x1A, 0x70, 0x1F, 0x54, 0xFB, 0xD7, 0xE3, 0x01, 0x60, 0xBF, 0xBE, 0x6E, 0x96, 0x87, 0x33, 0xB0, 0xF1, 0x72, 0x5D, 0x4B, 0xF7, 0xE7, 0xE4, 0xC3, 0x68, 0x40, 0x75, 0x9E, 0xBC, 0x37, 0x17, 0x50, 0x9F, 0x45, 0x7E, 0x1A, 0x01, 0x68, 0xDB, 0xD7, 0x35, 0x57, 0x0D, 0x01, 0x3A, 0x2C, 0x2E, 0x1E, 0xD0, 0x6C, 0x0D, 0x0C, 0x98, 0x9B, 0xB2, 0xAF, 0x61, 0x23, 0x30, 0xDB, 0x7E, 0xDA, 0x31, 0x12, 0x70, 0xB3, 0xED, 0x56, 0x22, 0xEE, 0x41, 0xDB, 0x06, 0x03, 0x64, 0xD8, 0x4A, 0x07, 0x6B, 0x61, 0xC1, 0x59, 0xEB, 0x06, 0xA0, 0x61, 0x5C, 0x73, 0x7B, 0xD3, 0x25, 0xC0, 0x7F, 0xC1, 0xCD, 0xAA, 0xAB, 0xAA, 0x80, 0xCB, 0x35, 0x35, 0x79, 0x6B, 0x67, 0x02, 0xB9, 0xF3, 0xEB, 0x3E, 0x58, 0xE5, 0x01, 0x69, 0xC1, 0x8D, 0xF6, 0x9B, 0xC6, 0x01, 0x7B, 0x87, 0x35, 0x1D, 0xDF, 0x12, 0x00, 0x84, 0x3B, 0x35, 0x77, 0xDC, 0xBA, 0x95, 0x7C, 0xED, 0x0E, 0xA8, 0x57, 0x91, 0x25, 0x39, 0x72, 0x6D, 0x9A, 0xD4, 0x9A, 0xF6, 0x00, 0x9A, 0x16, 0xEF, 0x9B, 0xC9, 0x2E, 0x79, 0x9A, 0x0B, 0x0F, 0xDF, 0x27, 0x81, 0x11, 0xAE, 0x2E, 0x81, 0x64, 0xFF, 0xD6, 0xE3, 0x8F, 0xB6, 0x8D, 0x20, 0xBB, 0xFC, 0x59, 0x75, 0x1F, 0x20, 0x67, 0x07, 0x4C, 0xBF, 0xA7, 0xFE, 0x94, 0x0C, 0x5E, 0x3A, 0x70, 0xBC, 0xC8, 0x69, 0x9D, 0xFE, 0x39, 0x2E, 0x7C, 0xD8, 0xAB, 0xB5, 0x1E, 0xD0, 0xD4, 0xA5, 0x79, 0xCC, 0xF8, 0x9F, 0xC0, 0xBB, 0xBC, 0x86, 0xAA, 0xC9, 0xBF, 0xC4, 0xB7, 0x3C, 0xDF, 0xCD, 0xB1, 0x02, 0xAE, 0x29, 0xCB, 0x3E, 0x2F, 0x18, 0x0B, 0x9C, 0xFB, 0xD9, 0xA4, 0x6E, 0xDA, 0x03, 0x38, 0x32, 0x5A, 0xF6, 0x67, 0xF9, 0x14, 0xB2, 0x34, 0x13, 0xD0, 0xC8, 0x21, 0x49, 0x40, 0xC9, 0xF1, 0xE3, 0x6A, 0x52, 0xA7, 0x40, 0xEB, 0xF0, 0x99, 0x7F, 0x44, 0x1E, 0xF8, 0x8F, 0xF7, 0x4C, 0x79, 0x7E, 0x36, 0xE8, 0x61, 0xBB, 0x08, 0x91, 0x17, 0xD6, 0x00, 0xA4, 0xE1, 0xC3, 0xFE, 0xEB, 0x54, 0xC2, 0xC9, 0xF5, 0x1F, 0x01, 0x45, 0x19, 0xE9, 0x6F, 0xA0, 0x60, 0x06, 0x90, 0x91, 0x15, 0xCA, 0xB9, 0xC2, 0x23, 0xAD, 0x95, 0x06, 0x0B, 0x8B, 0xAE, 0x02, 0x03, 0x0A, 0x48, 0xEA, 0x29, 0x2E, 0x00, 0xCA, 0x1D, 0xC8, 0x11, 0xF3, 0x80, 0x37, 0x1B, 0x9B, 0x0F, 0x8D, 0x9D, 0x00, 0x3C, 0x99, 0xC2, 0x5B, 0x86, 0x65, 0x68, 0xBA, 0xE9, 0x43, 0x9A, 0xC8, 0x9A, 0xBE, 0x92, 0x80, 0xEA, 0x82, 0xCF, 0x79, 0xA4, 0xD6, 0x9B, 0x96, 0x87, 0xAE, 0x2D, 0x26, 0xDB, 0xF5, 0xD2, 0xFA, 0x15, 0x94, 0x41, 0x02, 0x83, 0x37, 0x4E, 0x2A, 0x14, 0x8E, 0x19, 0x06, 0x90, 0xDD, 0xBF, 0xF5, 0x2A, 0x54, 0xF9, 0x43, 0xCE, 0xD7, 0xC1, 0x73, 0xC5, 0x9F, 0xE4, 0x86, 0x2C, 0xC5, 0x9F, 0x0A, 0x07, 0x49, 0xF7, 0x72, 0x85, 0xC9, 0x00, 0x19, 0xF0, 0x41, 0xE1, 0xA6, 0x70, 0xFF, 0x1B, 0x85, 0x55, 0xC2, 0x73, 0x63, 0x31, 0x51, 0xF8, 0xE2, 0x1C, 0xD0, 0xB6, 0x84, 0x2C, 0xF3, 0x06, 0x44, 0xA6, 0x4F, 0x4F, 0x55, 0xE0, 0xAF, 0x11, 0x39, 0x20, 0x1A, 0x78, 0x97, 0x48, 0x0E, 0xCE, 0xFD, 0x5A, 0x40, 0x02, 0x1D, 0x56, 0xDE, 0xBE, 0x47, 0xB6, 0x09, 0xD5, 0x4C, 0x8A, 0x6F, 0x23, 0x72, 0xCF, 0x9E, 0x6B, 0x77, 0x91, 0xEA, 0x8F, 0x7B, 0x3D, 0x00, 0x44, 0x1E, 0x3A, 0xA3, 0xD5, 0x42, 0x72, 0xF2, 0x7B, 0x40, 0x21, 0x8F, 0x5C, 0x30, 0x47, 0xC1, 0x18, 0x9D, 0xC8, 0xD5, 0xCF, 0xD1, 0x09, 0x20, 0x6D, 0xD3, 0x01, 0xA1, 0xC7, 0x40, 0x49, 0xFF, 0x34, 0xC9, 0xAC, 0xF6, 0x92, 0x79, 0x0A, 0x92, 0x4F, 0x2E, 0x02, 0x0A, 0x03, 0xC9, 0x2F, 0xAA, 0x40, 0xDB, 0x43, 0x64, 0xDD, 0x33, 0x00, 0x68, 0xEE, 0xC3, 0xAF, 0x1D, 0xF3, 0x9E, 0x18, 0x91, 0x5A, 0xCA, 0x5A, 0xCA, 0x59, 0xE3, 0x49, 0x95, 0xF1, 0xDA, 0x69, 0x5B, 0xA7, 0x91, 0x30, 0xEE, 0x61, 0xA4, 0x73, 0x8D, 0xA2, 0xBF, 0x33, 0x40, 0xF6, 0x5E, 0xA5, 0x75, 0x00, 0x13, 0x48, 0x13, 0x28, 0xDE, 0x15, 0x79, 0xDE, 0x6D, 0x40, 0xB8, 0x22, 0x41, 0xD2, 0xEA, 0x3F, 0x49, 0xBB, 0x00, 0x49, 0xB7, 0x27, 0x92, 0x51, 0xBB, 0x24, 0x73, 0x52, 0x25, 0xF3, 0xCD, 0x24, 0x1F, 0x6E, 0x94, 0x7C, 0x1B, 0x00, 0x28, 0x2A, 0x91, 0xBF, 0xBB, 0x8A, 0x94, 0x30, 0x04, 0x10, 0xEE, 0xCD, 0x04, 0xD4, 0xDA, 0x93, 0xFE, 0x47, 0x81, 0xC1, 0x1F, 0xC8, 0xA5, 0xCF, 0x80, 0xA5, 0xCF, 0xC8, 0x35, 0x63, 0xF0, 0xCB, 0xE2, 0x27, 0x09, 0x00, 0xBB, 0x8A, 0x85, 0x6D, 0xBE, 0x45, 0x7D, 0x15, 0x1A, 0xE7, 0xC5, 0x8E, 0x17, 0xDA, 0x7F, 0x8B, 0x4E, 0x14, 0xFA, 0x21, 0xF4, 0x9B, 0x30, 0x85, 0x5E, 0x33, 0x85, 0xB7, 0x55, 0xA4, 0xFB, 0x4F, 0xFD, 0x2D, 0x13, 0x08, 0xC9, 0x49, 0xC6, 0x24, 0xE4, 0x9A, 0xFA, 0x96, 0xF6, 0x15, 0x2E, 0x8F, 0x7E, 0x33, 0x40, 0xB8, 0x82, 0x64, 0xE2, 0x75, 0x00, 0x90, 0xFB, 0x11, 0x50, 0xEC, 0x45, 0xEE, 0xFC, 0x0F, 0x18, 0x1C, 0x43, 0xCE, 0xF7, 0x03, 0xD6, 0x2E, 0x22, 0x6D, 0x96, 0x2A, 0xA5, 0x9A, 0xEB, 0x4B, 0x3B, 0xF6, 0xF4, 0x10, 0xB6, 0x28, 0x89, 0xBB, 0x2F, 0x9C, 0x31, 0x33, 0x6E, 0xB4, 0xD0, 0xFB, 0xB3, 0x74, 0x3F, 0xF3, 0xAA, 0x8A, 0xD6, 0x15, 0xEE, 0x1F, 0x1E, 0xF8, 0x50, 0x58, 0x6A, 0xBD, 0x7C, 0x29, 0xD9, 0x3B, 0xB4, 0xF9, 0xCB, 0x24, 0x7B, 0xB2, 0x6F, 0x01, 0x39, 0x79, 0x59, 0xD5, 0x35, 0x80, 0x5C, 0xA3, 0xF1, 0x6E, 0xA8, 0xD0, 0x4C, 0xEF, 0xE1, 0x29, 0xA0, 0xB9, 0x93, 0x59, 0x17, 0x32, 0xD9, 0x4A, 0xDA, 0x91, 0xE2, 0x02, 0x60, 0x21, 0x19, 0x3D, 0x1B, 0xE8, 0xF7, 0x98, 0x5C, 0x68, 0x0D, 0xAC, 0x4F, 0x26, 0x37, 0xBF, 0x03, 0xAC, 0x53, 0xC9, 0x7E, 0x67, 0x81, 0x50, 0xB1, 0x03, 0x40, 0xE2, 0x01, 0xE1, 0x94, 0xF0, 0x44, 0x63, 0xA1, 0x77, 0xE6, 0xBE, 0x56, 0x42, 0x8F, 0x36, 0xF1, 0x4A, 0xC2, 0xB4, 0xA6, 0xC0, 0x70, 0x72, 0xC0, 0x24, 0xD2, 0x78, 0x3E, 0xD9, 0xBB, 0x35, 0x39, 0xF3, 0x60, 0xB3, 0x2E, 0x40, 0x5A, 0x9A, 0x7F, 0xB2, 0x85, 0x50, 0xEB, 0xD1, 0x4C, 0xA0, 0x49, 0xC9, 0xD2, 0xF0, 0x6A, 0x21, 0xD0, 0xF0, 0xD7, 0x22, 0x8C, 0x4C, 0xA1, 0xB4, 0x23, 0xAD, 0x2D, 0xA0, 0x30, 0x87, 0xDC, 0x1B, 0x04, 0xF4, 0xF1, 0x22, 0x2D, 0x3E, 0x02, 0x16, 0xBB, 0xC8, 0xAD, 0xB9, 0xC0, 0xE6, 0xBB, 0xF2, 0x1D, 0xD9, 0x40, 0x78, 0x95, 0xB4, 0x23, 0x75, 0xBA, 0xD0, 0xE0, 0x46, 0xEA, 0x41, 0xA1, 0xD7, 0xE9, 0x64, 0x67, 0x61, 0x58, 0x8F, 0xC4, 0x26, 0xE1, 0x09, 0xED, 0x90, 0x07, 0x64, 0xBF, 0x3D, 0xE4, 0x0C, 0xB1, 0x17, 0xE4, 0xFA, 0xF2, 0x9F, 0x76, 0x42, 0xEB, 0xFC, 0xA7, 0x0A, 0x80, 0xEC, 0x8B, 0x95, 0xE9, 0xD5, 0x57, 0x40, 0xBD, 0xDD, 0xFA, 0xA2, 0xB3, 0x9D, 0xE4, 0x46, 0x59, 0xFB, 0x91, 0x69, 0x4B, 0xA5, 0x1D, 0x19, 0xB9, 0x92, 0x89, 0xB7, 0x81, 0x5E, 0xAB, 0x48, 0xDF, 0x59, 0xC0, 0xFC, 0x50, 0xD2, 0xE6, 0x2C, 0x60, 0x17, 0x42, 0xDA, 0x2F, 0xEF, 0x64, 0xEB, 0xF4, 0x57, 0xDA, 0x91, 0xA1, 0x46, 0xB6, 0xB3, 0x9A, 0x7C, 0x30, 0x65, 0xA7, 0xC8, 0x01, 0xF3, 0x53, 0xA6, 0x0B, 0x13, 0xCA, 0xD3, 0x3A, 0x08, 0xAF, 0x8F, 0xD9, 0xFD, 0x2F, 0x39, 0x20, 0x9E, 0x9C, 0x7F, 0xB0, 0x3C, 0x0D, 0x20, 0x37, 0xF3, 0x85, 0xE8, 0x2F, 0xDC, 0xF8, 0xEB, 0x9A, 0x12, 0x50, 0xDF, 0x6B, 0xA3, 0xF7, 0x99, 0x0D, 0x40, 0xDD, 0xAD, 0xCD, 0x36, 0x07, 0xB3, 0xE5, 0xCE, 0xD9, 0x52, 0x40, 0x66, 0x1A, 0x49, 0xFD, 0xD9, 0x15, 0x92, 0xA9, 0xF9, 0x40, 0xCF, 0x7F, 0x49, 0xCF, 0x6F, 0xC0, 0xB2, 0xEE, 0xA4, 0xD3, 0x5B, 0xC0, 0x6E, 0x2A, 0x69, 0x79, 0x0B, 0x08, 0xFE, 0x41, 0xAA, 0x8C, 0x04, 0x32, 0x8C, 0xC9, 0x31, 0x98, 0xD2, 0x78, 0xE0, 0x15, 0x09, 0x04, 0xAD, 0xCB, 0xEE, 0x20, 0xCC, 0x92, 0xA5, 0x06, 0x09, 0xBF, 0xDE, 0xD8, 0x53, 0x52, 0x79, 0x19, 0x20, 0xED, 0xA6, 0x3C, 0xED, 0x03, 0x34, 0x24, 0xDB, 0x5E, 0x29, 0x38, 0x0E, 0xD4, 0x39, 0xDA, 0x7E, 0x38, 0xDE, 0x45, 0x6E, 0xB0, 0xFD, 0x81, 0xD4, 0x5B, 0x40, 0xED, 0x77, 0x87, 0xC7, 0xB1, 0x19, 0xF2, 0x7C, 0x61, 0x5B, 0x3D, 0x79, 0x70, 0x8E, 0xD4, 0x7F, 0x64, 0xB4, 0x64, 0x8E, 0x0B, 0xD0, 0xF9, 0x04, 0x99, 0x96, 0x02, 0x4C, 0xEC, 0x40, 0xFA, 0xDE, 0x04, 0x6C, 0x6A, 0xC9, 0xA0, 0x39, 0x80, 0x97, 0x1A, 0x39, 0xAF, 0x1F, 0x90, 0x24, 0x17, 0x18, 0xD8, 0xF5, 0xF4, 0x76, 0x61, 0xF8, 0xAC, 0xA3, 0xCE, 0xC2, 0xEF, 0xA3, 0xB3, 0x7D, 0x5E, 0x77, 0x01, 0x2A, 0x9E, 0xC5, 0xB8, 0x5F, 0xDB, 0x08, 0xD4, 0x36, 0x3A, 0xA5, 0x1C, 0xB3, 0x94, 0x3B, 0xD0, 0x5D, 0xF7, 0x40, 0x84, 0xDC, 0xD7, 0x1E, 0xAD, 0x23, 0x9C, 0x80, 0x9A, 0x7A, 0x8F, 0x51, 0x7E, 0x0B, 0x80, 0x6A, 0x25, 0x8F, 0x8E, 0xCE, 0x93, 0x81, 0xAA, 0x67, 0x1E, 0x4E, 0x64, 0xAE, 0xA2, 0xD4, 0x7F, 0x22, 0x5B, 0xF2, 0xF8, 0x71, 0x40, 0x6F, 0x12, 0x99, 0xFD, 0x1E, 0x30, 0xDE, 0x4F, 0xA6, 0xDC, 0x05, 0x2C, 0x8A, 0xC9, 0xDD, 0x37, 0x01, 0xCF, 0x73, 0xA4, 0xFF, 0x17, 0x20, 0x26, 0x96, 0x54, 0x56, 0x07, 0x2E, 0xF4, 0x7B, 0xE4, 0x02, 0xEC, 0xEB, 0x98, 0x76, 0xE7, 0x60, 0x01, 0x50, 0x71, 0x2F, 0xDD, 0x3A, 0x24, 0x04, 0xA8, 0xD9, 0x91, 0x62, 0x1E, 0x9C, 0x20, 0xCF, 0x33, 0x76, 0x4C, 0x74, 0x0C, 0x05, 0xCA, 0x35, 0x77, 0x7A, 0x6C, 0x58, 0x29, 0xCF, 0xEB, 0x76, 0xAE, 0x5E, 0xDD, 0x02, 0xA8, 0x5C, 0xB2, 0x73, 0xC6, 0xE2, 0x52, 0xB9, 0x57, 0x76, 0x1C, 0x9E, 0x65, 0x04, 0x54, 0xBC, 0x0E, 0xBE, 0x4C, 0x9E, 0x1D, 0x29, 0xF5, 0xE7, 0x4F, 0x93, 0x2C, 0xA8, 0x06, 0x74, 0xA6, 0x90, 0xE7, 0x4C, 0x00, 0xE3, 0x6C, 0x79, 0x3E, 0xD2, 0x72, 0xC8, 0xD4, 0x1C, 0x32, 0x2F, 0x17, 0xD8, 0xB8, 0xE5, 0xEF, 0xB6, 0xB3, 0xDF, 0x01, 0x5B, 0x97, 0xC7, 0x69, 0x47, 0x87, 0x02, 0xBE, 0xDF, 0xFA, 0x1C, 0x04, 0xFA, 0xFC, 0xBA, 0x38, 0x57, 0xF9, 0x80, 0xF6, 0xCC, 0xD2, 0xB5, 0x17, 0x3B, 0x00, 0xED, 0xDB, 0x94, 0x5A, 0xE4, 0x26, 0xAA, 0xFF, 0x69, 0x91, 0xFC, 0xF9, 0x50, 0x52, 0xA0, 0xD2, 0x0F, 0x8D, 0xF0, 0x2F, 0xB7, 0xF7, 0xEF, 0x00, 0x34, 0x0E, 0x7C, 0x75, 0x8E, 0x0F, 0x06, 0x5A, 0xBC, 0xFB, 0x6E, 0x1C, 0xD7, 0x1A, 0x50, 0x6F, 0xFE, 0xF1, 0x36, 0x46, 0x06, 0xB4, 0x4A, 0x2A, 0xB9, 0xB6, 0x7B, 0x14, 0x79, 0x59, 0x5D, 0xEA, 0x2F, 0x8C, 0x90, 0xBC, 0xF6, 0x55, 0x69, 0xB7, 0x6E, 0x16, 0xF9, 0xAF, 0x29, 0x30, 0xAA, 0x99, 0x7C, 0xF8, 0x1C, 0x18, 0x93, 0x5A, 0xF1, 0xE9, 0x85, 0x2E, 0xA0, 0x9B, 0xF7, 0xF9, 0xE6, 0x67, 0x07, 0xA0, 0xC5, 0x89, 0x8B, 0x51, 0x1F, 0x3E, 0x00, 0x9B, 0x72, 0x81, 0x6B, 0x9F, 0x66, 0x04, 0x9E, 0x52, 0x01, 0x72, 0xBB, 0x56, 0xC7, 0x66, 0x6D, 0x02, 0xC2, 0x6D, 0xAB, 0x3E, 0xEE, 0xDB, 0x01, 0x38, 0x2C, 0xA8, 0x7B, 0x15, 0xF8, 0x06, 0xD8, 0x70, 0xB2, 0x6E, 0x6B, 0x50, 0x2C, 0xB0, 0xE6, 0x49, 0x8D, 0x45, 0xA0, 0x3B, 0xB0, 0x4C, 0xB3, 0xBA, 0x24, 0x60, 0x3F, 0xB0, 0x70, 0x59, 0xF5, 0x2A, 0xFF, 0x8F, 0xC0, 0xEC, 0xE5, 0x55, 0x37, 0xFD, 0x16, 0x90, 0x37, 0x1E, 0x03, 0x8A, 0x5D, 0xC9, 0xBB, 0x39, 0x80, 0xAA, 0x81, 0xBC, 0xB7, 0x5A, 0x65, 0x46, 0xEB, 0x17, 0xE4, 0xCB, 0x0A, 0xA0, 0x53, 0xFA, 0xDF, 0xA5, 0x9F, 0x66, 0x02, 0x2A, 0x5D, 0x9F, 0xB7, 0xFE, 0x7B, 0x0E, 0x50, 0xCD, 0xBD, 0xB0, 0xA2, 0x6E, 0x25, 0x30, 0x70, 0xA7, 0x4D, 0x7E, 0xCD, 0x67, 0xC0, 0x43, 0x11, 0x90, 0xED, 0x5A, 0xF4, 0x21, 0x69, 0x20, 0x50, 0x5B, 0x48, 0x46, 0xBB, 0x01, 0x0F, 0x3B, 0x54, 0xF7, 0xF6, 0x7D, 0x03, 0x1C, 0xAD, 0xA9, 0x7F, 0xB2, 0xC1, 0x14, 0x48, 0x1E, 0x21, 0xFB, 0x63, 0x73, 0x01, 0x88, 0xD9, 0xC6, 0x54, 0xFB, 0x7F, 0x80, 0x1D, 0xED, 0x64, 0xA9, 0xF6, 0xAA, 0x80, 0xD7, 0xE4, 0x86, 0xFD, 0x76, 0x49, 0x80, 0xD3, 0x8F, 0x86, 0x61, 0x76, 0x76, 0xE4, 0x63, 0x7B, 0x40, 0xED, 0x15, 0x59, 0x54, 0x0C, 0x68, 0xDC, 0x20, 0xBF, 0x55, 0x02, 0xCA, 0x9D, 0xFF, 0x96, 0x95, 0x59, 0x01, 0x6A, 0x6D, 0x1F, 0x95, 0x35, 0xBC, 0x03, 0x5A, 0x4D, 0x49, 0x6B, 0x55, 0xBF, 0x04, 0xD0, 0x8F, 0x5C, 0xA9, 0xDC, 0xB4, 0x17, 0x30, 0x3B, 0x02, 0xC8, 0x9E, 0x75, 0x78, 0xEE, 0xF5, 0x18, 0x68, 0x5A, 0xEC, 0x7A, 0xC7, 0xD6, 0x02, 0x68, 0xEE, 0x72, 0xDE, 0xDE, 0xEA, 0x3D, 0x20, 0xB3, 0xAE, 0xFC, 0x77, 0xED, 0x56, 0xA0, 0xE8, 0x4D, 0xF3, 0x9E, 0x29, 0x87, 0x81, 0x3B, 0x59, 0xB4, 0x9C, 0x77, 0x04, 0xB8, 0x30, 0x4A, 0x56, 0xBA, 0xA8, 0x0A, 0xC8, 0x3D, 0x24, 0xAB, 0x59, 0x16, 0x09, 0x64, 0x76, 0x96, 0xFD, 0xB7, 0x52, 0x11, 0xD8, 0xBF, 0x4F, 0xF6, 0x63, 0x55, 0x26, 0xF9, 0xCE, 0x14, 0x68, 0x91, 0x4D, 0xFE, 0x69, 0x00, 0x54, 0x1C, 0xAB, 0x77, 0xCA, 0x7A, 0x00, 0xCA, 0x65, 0xFF, 0x81, 0xD4, 0x54, 0x54, 0x59, 0x92, 0x1D, 0x46, 0x2A, 0xFC, 0xD3, 0xA9, 0xC2, 0xC1, 0x97, 0xD4, 0xAD, 0x1F, 0x34, 0x06, 0x20, 0x01, 0x73, 0x5F, 0xE1, 0x14, 0xE3, 0xA9, 0x4A, 0xAD, 0xC6, 0x90, 0xFE, 0x9D, 0x07, 0xB9, 0x8A, 0x9C, 0xDD, 0x53, 0xDF, 0x5B, 0x78, 0x73, 0x59, 0x6F, 0xF7, 0xAE, 0x37, 0x49, 0xB2, 0x4D, 0x17, 0xA0, 0xE4, 0x20, 0x39, 0x72, 0x00, 0x50, 0x7C, 0x95, 0x36, 0x63, 0xD2, 0x81, 0x87, 0x23, 0x48, 0x83, 0xAF, 0x50, 0xBA, 0xBE, 0x86, 0x34, 0x9E, 0x08, 0x9C, 0xDF, 0x48, 0x4E, 0x55, 0x23, 0x2B, 0xE6, 0x00, 0x1A, 0x67, 0xEA, 0xEA, 0x48, 0x40, 0xA5, 0x57, 0x91, 0x35, 0xD9, 0x32, 0xB8, 0xA5, 0x72, 0xEE, 0x3F, 0x64, 0xAB, 0x8B, 0x5A, 0xE3, 0xB6, 0xAB, 0x90, 0x6A, 0x85, 0x7D, 0xE2, 0x3A, 0x7A, 0x93, 0xC0, 0x54, 0x3B, 0x80, 0x1C, 0xB6, 0xA2, 0xFF, 0x62, 0x35, 0x3B, 0x72, 0x4D, 0x96, 0x42, 0x2F, 0x8C, 0x24, 0x7D, 0xCA, 0x00, 0x80, 0x8C, 0xBE, 0x80, 0x30, 0x61, 0x4E, 0x7B, 0x44, 0x09, 0x8B, 0x37, 0x01, 0x2D, 0xB3, 0xC8, 0x32, 0x5F, 0x40, 0x64, 0xB2, 0xDB, 0x62, 0xA0, 0xF4, 0x1A, 0xD9, 0xB7, 0x2B, 0xF0, 0xD6, 0x8B, 0xD4, 0x0F, 0x05, 0x9E, 0xBB, 0x90, 0x43, 0x77, 0xD5, 0xA6, 0x91, 0x80, 0x66, 0xDC, 0xEB, 0x5E, 0xF2, 0xFE, 0x2C, 0x8D, 0x55, 0x67, 0x2B, 0x49, 0xAD, 0x75, 0x2D, 0xEE, 0xBA, 0x7F, 0x26, 0x81, 0x9E, 0xC6, 0x46, 0x6B, 0x84, 0x03, 0xD2, 0x01, 0xB2, 0xAB, 0x79, 0xD7, 0x2E, 0x42, 0x13, 0x35, 0x85, 0x04, 0x3C, 0x23, 0x57, 0x65, 0xE1, 0x99, 0xC8, 0xAE, 0x0A, 0x80, 0x30, 0xD8, 0x51, 0x32, 0x61, 0x1B, 0x74, 0x84, 0xF9, 0xF9, 0x80, 0xF0, 0xA9, 0x3E, 0xA0, 0x60, 0x40, 0x7E, 0xD6, 0x04, 0x5A, 0xE4, 0x93, 0xD5, 0x6F, 0x00, 0xC5, 0xE1, 0x24, 0xD9, 0xF6, 0x03, 0x50, 0xD9, 0x9E, 0xEC, 0x5C, 0xF0, 0x9E, 0xA4, 0x96, 0x81, 0x96, 0xC1, 0xA5, 0xDB, 0xA4, 0xE6, 0x96, 0x16, 0xC5, 0x3B, 0xAB, 0x49, 0xA0, 0xAB, 0xDF, 0x82, 0x8F, 0x72, 0x67, 0xF6, 0x68, 0xAD, 0xF5, 0x8A, 0x6C, 0xBD, 0x46, 0xE7, 0x1F, 0xB5, 0x8D, 0xE4, 0xB8, 0x89, 0x00, 0x40, 0xCE, 0x30, 0x90, 0x5C, 0x39, 0x58, 0xD2, 0xEE, 0xB0, 0xA4, 0xBF, 0x9B, 0x64, 0x98, 0x87, 0x64, 0xD6, 0x23, 0xC9, 0xB3, 0x1D, 0x24, 0xEF, 0x77, 0x93, 0x7C, 0x75, 0x18, 0xC0, 0x03, 0xF2, 0xFB, 0x73, 0x40, 0x71, 0x23, 0x59, 0xDD, 0x11, 0xB8, 0xF1, 0x8E, 0xD4, 0x0C, 0xD0, 0x0C, 0x88, 0x77, 0x21, 0x81, 0xD6, 0xE7, 0xCC, 0xB3, 0x84, 0xED, 0xEC, 0x7A, 0x77, 0x23, 0x35, 0xCB, 0x34, 0xCB, 0x00, 0xB2, 0x6B, 0xA1, 0xFA, 0x56, 0xE1, 0xF8, 0x79, 0x80, 0x70, 0xD6, 0x30, 0xC9, 0x65, 0x66, 0x92, 0x56, 0xFD, 0x24, 0x1D, 0x1E, 0x4B, 0xFA, 0x41, 0x32, 0xB2, 0x54, 0x32, 0x23, 0x4D, 0xF2, 0x94, 0x94, 0xF9, 0xEF, 0x01, 0xC9, 0xA7, 0x9F, 0x25, 0xDF, 0x77, 0x06, 0xC8, 0x5D, 0xEE, 0x80, 0x30, 0x74, 0xA5, 0xA4, 0x6F, 0x12, 0xA0, 0xD3, 0x97, 0x5C, 0x78, 0x08, 0x58, 0x78, 0x88, 0x9C, 0x6B, 0x06, 0x58, 0x80, 0x04, 0x80, 0xA0, 0x0E, 0x42, 0x4D, 0x95, 0x70, 0x65, 0xA1, 0xC1, 0xDE, 0x78, 0x3D, 0xE1, 0x52, 0xA3, 0xA4, 0x5C, 0xA1, 0xD7, 0x8A, 0x90, 0xBB, 0xC2, 0x14, 0xBA, 0x87, 0x08, 0x0B, 0x63, 0x2D, 0x40, 0x76, 0xB8, 0x5F, 0x7B, 0xCF, 0xF0, 0x33, 0xA9, 0x73, 0xB2, 0x21, 0x77, 0xE4, 0x49, 0xB9, 0xDB, 0xC9, 0x51, 0xFE, 0x24, 0x40, 0x1A, 0x07, 0x56, 0x8D, 0x13, 0x4E, 0xCE, 0x21, 0x77, 0x43, 0xEA, 0x0F, 0x0F, 0x93, 0x0C, 0xDD, 0x0F, 0x68, 0x5A, 0x90, 0xF3, 0xAA, 0x80, 0xE5, 0xC3, 0x48, 0xF3, 0x39, 0xC0, 0xEA, 0x97, 0xD2, 0x8E, 0x10, 0x21, 0x5A, 0x9A, 0x47, 0xE4, 0x09, 0xA7, 0x16, 0x46, 0x1B, 0x0B, 0xDD, 0xBB, 0x84, 0x1B, 0x08, 0x7D, 0x96, 0x87, 0xEF, 0x16, 0x26, 0xEF, 0xF6, 0x5D, 0x25, 0x2C, 0xF0, 0xB7, 0x4E, 0x22, 0x75, 0xA3, 0xAA, 0x0A, 0x46, 0xC6, 0x90, 0x1D, 0xED, 0x18, 0x32, 0x2A, 0x94, 0x54, 0x7C, 0x42, 0x9A, 0xCC, 0x6A, 0x4C, 0x07, 0xC8, 0x29, 0xB7, 0x7E, 0x78, 0x0B, 0x67, 0x56, 0x93, 0x51, 0x45, 0x52, 0xFF, 0xEE, 0xD7, 0x92, 0x11, 0x89, 0x80, 0x96, 0x0F, 0xB9, 0xA0, 0x0C, 0x58, 0x59, 0x46, 0x5A, 0xE4, 0x01, 0x66, 0xAE, 0xD2, 0x8E, 0xDD, 0xBD, 0x85, 0xB8, 0x1E, 0x13, 0x29, 0x9C, 0xB2, 0x3E, 0x26, 0x5C, 0xE8, 0x71, 0x35, 0x6A, 0xB6, 0xD0, 0x6B, 0x70, 0xB4, 0x8B, 0xF0, 0xC0, 0x87, 0x80, 0x47, 0xC2, 0xDB, 0xF1, 0xD6, 0x7F, 0xC8, 0x0E, 0x7B, 0xEB, 0x72, 0xC6, 0x54, 0x90, 0xED, 0xA7, 0x93, 0xE3, 0x53, 0x49, 0x80, 0x9C, 0x66, 0xF2, 0xA7, 0x5E, 0x38, 0xA7, 0xFD, 0x9B, 0xC5, 0xC2, 0xB9, 0x9F, 0xC8, 0xD8, 0x95, 0x52, 0x7F, 0xF4, 0x37, 0xC9, 0xA8, 0xE1, 0x40, 0x1B, 0x07, 0x72, 0xC1, 0x6B, 0x60, 0xAD, 0x32, 0x69, 0x29, 0x9C, 0x41, 0x76, 0xFD, 0x04, 0x04, 0xBF, 0x90, 0xF6, 0xEC, 0x2D, 0x16, 0x9A, 0x44, 0xC7, 0x2F, 0x16, 0x7A, 0xEA, 0xC5, 0x99, 0x09, 0xBD, 0xD6, 0xEF, 0x6D, 0x2D, 0x3C, 0x72, 0xCC, 0x5F, 0x4B, 0x58, 0xB2, 0xD4, 0x2A, 0x82, 0xEC, 0x6E, 0x28, 0xEF, 0xEF, 0x4A, 0x42, 0xF4, 0x6E, 0x29, 0x8B, 0x12, 0xCE, 0x7F, 0xFB, 0xA6, 0x5C, 0xB8, 0xD0, 0xFA, 0x91, 0x83, 0x70, 0x51, 0x1E, 0x99, 0xA0, 0x27, 0xF5, 0xEF, 0xD5, 0x97, 0x8C, 0x1D, 0x0B, 0xE8, 0x5C, 0x20, 0x17, 0x3C, 0x00, 0xAC, 0x2D, 0xC9, 0x75, 0xDA, 0x80, 0x65, 0x14, 0xD9, 0xB9, 0x10, 0x08, 0xCB, 0x95, 0x76, 0x24, 0xED, 0x10, 0x8E, 0xF8, 0x9C, 0xB2, 0x48, 0xE8, 0x39, 0x33, 0xF1, 0xAD, 0x30, 0xA5, 0xEB, 0x3E, 0x57, 0xE1, 0x95, 0xD4, 0x60, 0x5D, 0x52, 0xFB, 0x4B, 0xCD, 0x9B, 0xB5, 0x26, 0x24, 0x44, 0x4F, 0xA7, 0xDF, 0x96, 0x42, 0xD3, 0x97, 0xC5, 0xFD, 0x84, 0xCB, 0xDA, 0xDF, 0xF9, 0x28, 0xF7, 0xCB, 0xB2, 0xF2, 0x82, 0x85, 0x40, 0xD3, 0xAA, 0x15, 0x6A, 0x64, 0x4A, 0x5B, 0xA9, 0x3F, 0xA9, 0x37, 0x24, 0x2F, 0x01, 0x3A, 0x5E, 0xA4, 0xFF, 0x00, 0x60, 0x0E, 0xC8, 0xCD, 0x4E, 0xC0, 0xFA, 0x2F, 0xA4, 0x55, 0xBE, 0xA2, 0xAE, 0xCB, 0x05, 0x69, 0x47, 0x66, 0x0F, 0x52, 0xF3, 0xDE, 0xB8, 0x1D, 0x29, 0xE7, 0x45, 0xF6, 0x36, 0x4C, 0x5D, 0x2C, 0xCC, 0xDA, 0x2D, 0xDD, 0x4B, 0x7E, 0x54, 0x84, 0x9D, 0x6F, 0x5A, 0x04, 0x34, 0x4D, 0xB4, 0xAB, 0x79, 0xFB, 0x12, 0x20, 0xCD, 0x1E, 0xDC, 0xB5, 0x94, 0x67, 0x67, 0x73, 0xAD, 0x8B, 0xA1, 0x40, 0x43, 0xA9, 0xF9, 0xE3, 0x13, 0x8E, 0x40, 0xFD, 0x5D, 0xCB, 0x71, 0xD9, 0x03, 0xE5, 0x96, 0xAD, 0x3B, 0x45, 0x66, 0x74, 0x96, 0xFA, 0x53, 0x13, 0x21, 0x69, 0x01, 0x74, 0xD9, 0x49, 0xC6, 0xFD, 0x0B, 0x18, 0xEB, 0x91, 0x7E, 0x1E, 0x80, 0x85, 0x13, 0xE9, 0x12, 0x01, 0x38, 0xDD, 0x21, 0x97, 0x5C, 0x01, 0xA2, 0x5F, 0x92, 0xC3, 0xFA, 0x8E, 0x9D, 0x95, 0x32, 0x80, 0x04, 0x82, 0x67, 0x64, 0x05, 0x0B, 0x3F, 0xE5, 0xED, 0xEF, 0xFC, 0x6C, 0x3D, 0x50, 0xDE, 0x23, 0xA4, 0xFA, 0x46, 0x18, 0x50, 0x3B, 0xDA, 0xE5, 0xE0, 0x99, 0xE5, 0x40, 0xDD, 0x99, 0xCD, 0x1B, 0xB3, 0x2F, 0xC8, 0x73, 0xAF, 0xAD, 0xB9, 0x09, 0xE5, 0xF2, 0x3C, 0xDC, 0xB6, 0x43, 0xD4, 0x06, 0xA0, 0xFE, 0x88, 0x5D, 0x46, 0xE0, 0x00, 0x79, 0xD6, 0xB4, 0x7B, 0x42, 0x1E, 0xD6, 0x95, 0xFA, 0x0F, 0x75, 0x93, 0x3C, 0x18, 0x0F, 0xE8, 0x55, 0x91, 0xC9, 0xE1, 0x80, 0x71, 0x03, 0x99, 0x1E, 0x00, 0xCC, 0x1D, 0x42, 0xEE, 0x5E, 0x09, 0xD8, 0x56, 0x48, 0x7F, 0xAE, 0xBB, 0xE3, 0xDE, 0x8F, 0xCB, 0xFD, 0x6B, 0x80, 0x9C, 0xC6, 0xCB, 0x63, 0x80, 0x9D, 0xEB, 0xE2, 0x1E, 0x64, 0x28, 0x89, 0x13, 0x37, 0xD6, 0xCD, 0xEF, 0x0C, 0x20, 0x6B, 0x8A, 0xAD, 0xF4, 0xD6, 0x07, 0x2A, 0x27, 0x84, 0xF5, 0x77, 0x71, 0x07, 0x2A, 0xB2, 0xBD, 0xA7, 0x6E, 0x39, 0x2D, 0xCF, 0x67, 0xBD, 0x6F, 0x59, 0x66, 0x02, 0x55, 0xD7, 0xBD, 0x0B, 0x56, 0xCE, 0x05, 0xAA, 0x3B, 0x7A, 0xFF, 0x58, 0x90, 0x20, 0xCF, 0xFB, 0xBD, 0xBD, 0xA4, 0x3F, 0x1F, 0x04, 0xC8, 0xD3, 0x26, 0x92, 0x67, 0x3A, 0x02, 0x7A, 0xD7, 0xC8, 0x53, 0xBB, 0x81, 0xB1, 0xA6, 0xE4, 0xD9, 0x78, 0xC0, 0x24, 0x8C, 0xBC, 0x9C, 0xAA, 0x5C, 0x3F, 0x7D, 0xEF, 0xF7, 0xC7, 0x67, 0xAF, 0x02, 0x33, 0x62, 0x6E, 0x24, 0x67, 0xB8, 0x01, 0x5B, 0x6F, 0xF7, 0xFD, 0xA0, 0x7C, 0xA4, 0x47, 0xEC, 0xC9, 0xFD, 0x80, 0xF6, 0xBE, 0x37, 0xEB, 0x4E, 0x8F, 0x03, 0x3A, 0xE4, 0xFF, 0xF5, 0x3D, 0xB8, 0x02, 0x68, 0xFB, 0xE5, 0x5B, 0xCF, 0x24, 0x73, 0x40, 0x65, 0xE8, 0xF7, 0x5B, 0xB1, 0x8F, 0x01, 0xD5, 0xBD, 0x3F, 0xFF, 0x8D, 0xB1, 0x00, 0xD4, 0xCF, 0xFC, 0x6A, 0x13, 0x39, 0x0B, 0xD0, 0xF0, 0xF9, 0x95, 0x10, 0xBE, 0x1F, 0x68, 0xDB, 0xF2, 0xCF, 0xCD, 0x9D, 0xCE, 0x64, 0xC1, 0x69, 0xA9, 0xBF, 0xF0, 0x3E, 0x24, 0x2D, 0x01, 0xDD, 0xB9, 0xE4, 0xF5, 0xA5, 0xC0, 0x80, 0x59, 0xE4, 0xC3, 0x57, 0x40, 0x3B, 0xDD, 0xCF, 0xFF, 0x3D, 0xEC, 0x07, 0x00, 0x4F, 0xBA, 0x3F, 0xA9, 0x16, 0x9E, 0xE9, 0x59, 0xF4, 0x00, 0x58, 0x18, 0x0C, 0x1C, 0x55, 0xEF, 0x67, 0x7A, 0xD8, 0x0C, 0x38, 0xAC, 0xF5, 0x75, 0x67, 0xD2, 0x1E, 0x60, 0x57, 0x79, 0x43, 0x70, 0xE4, 0x69, 0xC0, 0xF9, 0x4F, 0xED, 0x8B, 0x80, 0xCF, 0xC0, 0xC6, 0xC1, 0x75, 0xF1, 0xAE, 0x2B, 0x01, 0x8B, 0xB5, 0x75, 0xFB, 0x5D, 0xC7, 0x02, 0xAB, 0x23, 0xEB, 0x66, 0xBB, 0xDC, 0x01, 0x96, 0x47, 0xD5, 0x0D, 0x73, 0x31, 0x05, 0x16, 0x6D, 0xAC, 0xB5, 0x73, 0xDE, 0x23, 0xEF, 0x6B, 0x06, 0x14, 0x4F, 0x91, 0xB7, 0x8C, 0x81, 0x16, 0x2A, 0xE4, 0xBD, 0x9F, 0x40, 0x9B, 0x35, 0xE4, 0xAB, 0x5D, 0x80, 0x62, 0xEE, 0xFB, 0x0E, 0xC5, 0x77, 0x00, 0xE0, 0xEA, 0xFD, 0x37, 0x1B, 0x85, 0x67, 0xAD, 0xCA, 0xEB, 0x01, 0xA5, 0x1D, 0x7E, 0x25, 0x15, 0x57, 0x81, 0x65, 0xCF, 0x80, 0xF2, 0x6F, 0x06, 0x8A, 0xB1, 0xED, 0x80, 0xBF, 0xBB, 0x4A, 0x3A, 0x85, 0x66, 0x02, 0xB7, 0x5E, 0x35, 0x46, 0xB8, 0x1A, 0x02, 0xA7, 0xC2, 0x6B, 0xFC, 0xAC, 0x76, 0x03, 0xA9, 0x46, 0xB2, 0x92, 0xD5, 0x05, 0x40, 0xDC, 0x44, 0x99, 0xBF, 0xB9, 0x33, 0x10, 0x3E, 0x5F, 0xE6, 0x64, 0x31, 0x18, 0x08, 0xCA, 0x94, 0x1D, 0xB0, 0x74, 0x04, 0xBC, 0xBE, 0x36, 0xDE, 0xB4, 0xDC, 0x41, 0x3E, 0xFA, 0x08, 0xA8, 0x97, 0x90, 0x45, 0xA3, 0x81, 0x16, 0x9A, 0x4D, 0xA9, 0x9F, 0xAA, 0x00, 0xE0, 0x6B, 0xDF, 0x5F, 0x77, 0x85, 0xD7, 0x9B, 0xCB, 0x0D, 0x85, 0xA9, 0x05, 0xB5, 0x3D, 0x01, 0xE5, 0xF7, 0x5B, 0x6F, 0x34, 0x28, 0x03, 0x63, 0x95, 0x55, 0xD6, 0xD7, 0x84, 0x01, 0xF6, 0x81, 0x40, 0xF3, 0x9C, 0x35, 0x1E, 0x5B, 0x4C, 0xE4, 0x5E, 0x3C, 0xDB, 0x72, 0xFD, 0x3E, 0xA0, 0x66, 0x59, 0x75, 0xE1, 0xCA, 0x7F, 0x81, 0x37, 0x2D, 0x6B, 0x1F, 0x4D, 0x55, 0x06, 0x6E, 0x2B, 0x93, 0x06, 0x91, 0xC0, 0xA5, 0x11, 0xA4, 0xB1, 0x0C, 0x38, 0x5D, 0x49, 0x4E, 0xBD, 0x0A, 0x1C, 0xF5, 0x27, 0x67, 0xA6, 0x00, 0x19, 0x26, 0xE4, 0xEC, 0x46, 0xF2, 0xDD, 0x3B, 0x40, 0xE3, 0x0D, 0x59, 0xFA, 0x7F, 0x7C, 0xDC, 0x07, 0x38, 0x97, 0xDF, 0x1F, 0x3F, 0xFE, 0xA7, 0x95, 0xDD, 0xB0, 0x4A, 0x09, 0x91, 0x99, 0x51, 0xCA, 0x96, 0x16, 0x6D, 0x33, 0x84, 0x52, 0x42, 0x29, 0xED, 0x34, 0xA4, 0x4D, 0xDA, 0x9B, 0x52, 0x69, 0xA0, 0x41, 0x43, 0x2A, 0xDA, 0x5B, 0x88, 0xA6, 0xF6, 0x90, 0x0A, 0xA5, 0xA5, 0x90, 0x86, 0xDD, 0xFF, 0xBC, 0x7E, 0x2F, 0xFF, 0xEB, 0xF3, 0x1D, 0xBF, 0xDF, 0xF7, 0x73, 0x5D, 0xB7, 0xC7, 0x45, 0x1F, 0xEF, 0xD7, 0xF1, 0xBE, 0xCF, 0x7D, 0xCE, 0xF3, 0x3E, 0xF7, 0xE1, 0x03, 0x00, 0x7C, 0xA9, 0xAA, 0x53, 0x23, 0x0B, 0x2F, 0xB5, 0xCC, 0x05, 0xA4, 0xCE, 0xEE, 0xAB, 0xF9, 0xBB, 0x1B, 0x90, 0xB7, 0x9C, 0x2C, 0xEE, 0xBC, 0x01, 0xFD, 0x65, 0xBA, 0x71, 0xA4, 0x8B, 0x3F, 0x9D, 0x41, 0xDB, 0xB4, 0xFE, 0x71, 0xE6, 0x62, 0x24, 0x5F, 0x15, 0xD9, 0xF1, 0x1D, 0x68, 0x7E, 0x4D, 0x30, 0x57, 0x22, 0x1F, 0x8C, 0x33, 0x9D, 0xAA, 0x2D, 0x56, 0xDC, 0x1B, 0x94, 0x3A, 0xB4, 0x05, 0xBE, 0x8B, 0x6B, 0x41, 0xBF, 0x08, 0x78, 0x2D, 0xD6, 0x40, 0x8D, 0x8E, 0x01, 0x8F, 0xC5, 0x35, 0x68, 0xF6, 0x05, 0x28, 0x14, 0x7D, 0xAE, 0xE7, 0x02, 0xE0, 0xBA, 0xB0, 0x77, 0x9A, 0x98, 0x75, 0xCB, 0x00, 0x85, 0x9C, 0x9A, 0x1E, 0xF4, 0xFA, 0xD2, 0x05, 0xF7, 0xC4, 0xFA, 0x8E, 0x54, 0xB1, 0x54, 0x8F, 0x14, 0x27, 0xFA, 0x5C, 0xC9, 0x33, 0x7C, 0x32, 0xD9, 0xAD, 0xA3, 0xF8, 0x66, 0xA1, 0xDD, 0x6F, 0xAA, 0xA3, 0x5D, 0x6F, 0x64, 0x48, 0xFB, 0x73, 0x7C, 0x3D, 0xA5, 0x41, 0x9F, 0x2F, 0xDC, 0x0E, 0x90, 0x5B, 0x7D, 0xD9, 0x0C, 0x15, 0xB6, 0xE8, 0x35, 0x20, 0x11, 0x29, 0x92, 0x56, 0x2F, 0x40, 0xA3, 0x1F, 0xAF, 0x38, 0x01, 0x75, 0x67, 0xC5, 0x18, 0x9F, 0x09, 0x7C, 0x52, 0x15, 0x2B, 0x5C, 0x69, 0xC0, 0x6B, 0xB1, 0x36, 0xAE, 0x3B, 0xAD, 0x66, 0x04, 0xFD, 0x6B, 0x87, 0xC4, 0x47, 0x62, 0x24, 0x96, 0x7B, 0x22, 0x1B, 0x79, 0xA4, 0x59, 0xE4, 0xAF, 0x12, 0x19, 0xD9, 0x59, 0x62, 0xA4, 0xA2, 0x75, 0x42, 0xA7, 0x4C, 0xB2, 0xCB, 0x30, 0x40, 0xCC, 0x58, 0x13, 0x35, 0xFC, 0x61, 0x2C, 0x66, 0x29, 0x13, 0xAE, 0xE3, 0xF3, 0x9C, 0x9D, 0x5D, 0xC9, 0xAE, 0x72, 0x64, 0x93, 0x25, 0xD9, 0xAC, 0x14, 0xF6, 0xF9, 0x68, 0xB6, 0xEC, 0x93, 0x40, 0xDC, 0xA9, 0xD4, 0xC8, 0x02, 0xB4, 0xCF, 0xE9, 0x6F, 0x31, 0x00, 0xB4, 0x88, 0xA4, 0xA1, 0x78, 0xE5, 0xB9, 0x48, 0xD9, 0x4A, 0x1F, 0x95, 0x3E, 0x9E, 0x3A, 0x26, 0xEA, 0xE7, 0xCB, 0x7C, 0x59, 0x74, 0x9D, 0xEA, 0x76, 0x38, 0xE9, 0x7A, 0x99, 0x54, 0x1B, 0x27, 0xD7, 0x20, 0xFE, 0xBD, 0x49, 0x71, 0x0C, 0xC4, 0xBB, 0x6A, 0xDE, 0x7A, 0xC7, 0x37, 0x60, 0x35, 0xEB, 0x93, 0xC8, 0x46, 0x78, 0xB2, 0x2B, 0x7A, 0xB3, 0x5B, 0x02, 0xD9, 0xD4, 0x15, 0xEC, 0x85, 0x56, 0xEF, 0x36, 0xB1, 0x2F, 0x97, 0xB2, 0xE5, 0x0F, 0x04, 0x22, 0x11, 0x54, 0x75, 0x01, 0x2E, 0x88, 0x3B, 0x36, 0xF9, 0xDD, 0xF2, 0xBB, 0xD7, 0x7C, 0xA1, 0xBA, 0xCA, 0xF7, 0xBD, 0xA7, 0x93, 0x8A, 0x7B, 0x34, 0x44, 0x7B, 0x65, 0x57, 0xC9, 0xAE, 0x02, 0xC4, 0xBB, 0xF8, 0x4C, 0xCA, 0x9E, 0xEC, 0x19, 0x02, 0x90, 0x03, 0x7F, 0xB0, 0xDE, 0xF6, 0x6C, 0x30, 0xD8, 0xC8, 0x03, 0x6C, 0x8C, 0x3A, 0xBB, 0x2D, 0x90, 0x3D, 0x9C, 0xC5, 0x66, 0x9D, 0x66, 0x6F, 0x9E, 0x62, 0x1F, 0x04, 0xB2, 0xAF, 0xA4, 0xE9, 0x63, 0xF4, 0x5D, 0x80, 0x9C, 0xA3, 0xC2, 0xCE, 0x6A, 0x06, 0xDA, 0xB7, 0x88, 0xD4, 0x95, 0x03, 0x0C, 0x13, 0xE3, 0x99, 0x89, 0xF1, 0x3F, 0x39, 0x68, 0xF1, 0x3E, 0x52, 0x21, 0x65, 0x5D, 0x32, 0x69, 0xB9, 0x77, 0xFF, 0xDF, 0x7F, 0x5A, 0x01, 0x44, 0x97, 0xED, 0x2E, 0xE3, 0x1C, 0x14, 0xE5, 0x4D, 0x9E, 0x0D, 0xA5, 0xEF, 0x53, 0x9D, 0x51, 0x3B, 0xDD, 0x79, 0xBD, 0xC8, 0xA2, 0x49, 0x3F, 0x97, 0xF7, 0x4A, 0x12, 0x67, 0x5F, 0xCC, 0xD5, 0xC6, 0xE2, 0x00, 0x44, 0xBF, 0x55, 0x69, 0xF5, 0x87, 0x48, 0xDB, 0xCA, 0xE0, 0x9F, 0xA6, 0xD5, 0x25, 0x87, 0x01, 0xC5, 0xAF, 0x62, 0x6E, 0xCE, 0x05, 0x46, 0xC4, 0x89, 0xB3, 0xF1, 0x05, 0x08, 0x0E, 0xE4, 0x76, 0xC4, 0x44, 0x93, 0xF2, 0x27, 0x39, 0x0F, 0xD9, 0x9E, 0x38, 0xEC, 0x44, 0x06, 0x2D, 0x39, 0xBB, 0x8E, 0x5C, 0x64, 0x1A, 0xEF, 0x45, 0x1E, 0xE8, 0x1B, 0x75, 0x9B, 0xBC, 0xF0, 0x2A, 0x58, 0xBC, 0xDB, 0x9A, 0x53, 0x1B, 0xED, 0xAC, 0xC2, 0xC4, 0xD9, 0xCD, 0x6B, 0x9C, 0x60, 0xD6, 0xBD, 0xB5, 0xEE, 0x74, 0xD6, 0xF8, 0x3D, 0xDB, 0x43, 0x8C, 0x5B, 0x2B, 0x93, 0xB9, 0xFE, 0x82, 0xCD, 0xEC, 0x4A, 0x55, 0x40, 0xA1, 0x42, 0xB4, 0xE3, 0x14, 0xE0, 0x2E, 0xEE, 0xF3, 0xAD, 0x57, 0x00, 0x13, 0xDC, 0x5A, 0x73, 0xA1, 0x07, 0x29, 0xE3, 0xB5, 0xC6, 0x94, 0xEC, 0xAF, 0xBF, 0x65, 0x0A, 0x39, 0x67, 0xF2, 0x86, 0xB9, 0xE4, 0x52, 0xF3, 0xB5, 0x24, 0xF6, 0x0E, 0x5D, 0x42, 0xE2, 0x52, 0xE9, 0xA4, 0x51, 0xE2, 0x1E, 0xE6, 0x58, 0xBD, 0xBD, 0x99, 0xF8, 0xF9, 0xE5, 0xC4, 0xCF, 0x6E, 0xB0, 0x89, 0xEB, 0x9A, 0x8D, 0x64, 0xCD, 0x57, 0xFF, 0xD8, 0x43, 0xF6, 0x14, 0x75, 0xD6, 0x7A, 0x81, 0x7B, 0xD9, 0x02, 0x76, 0xAD, 0x04, 0xA0, 0xA4, 0x2E, 0xDA, 0x91, 0x0C, 0x8C, 0x12, 0xE7, 0xC5, 0xEB, 0x28, 0x30, 0xA6, 0x1B, 0xB7, 0x23, 0x4E, 0x81, 0xDD, 0xE4, 0x40, 0xF6, 0xD3, 0xDC, 0x74, 0x8B, 0x8C, 0xDA, 0xB7, 0x61, 0x03, 0xB9, 0x78, 0xC8, 0x66, 0x12, 0x87, 0x3C, 0x56, 0x48, 0x91, 0xF7, 0xB6, 0x4D, 0x7A, 0x28, 0x7A, 0x9F, 0xF8, 0x99, 0x0C, 0x9F, 0x73, 0xDD, 0x5E, 0x19, 0xAD, 0x2E, 0xAE, 0x72, 0x27, 0x6D, 0x52, 0xDF, 0xC6, 0x92, 0x8E, 0x83, 0x45, 0xAA, 0x6E, 0x4D, 0xDB, 0x6B, 0xD4, 0xD8, 0xF5, 0x6F, 0x80, 0xF6, 0xB2, 0x22, 0xAB, 0x75, 0x03, 0xC6, 0x88, 0xF6, 0x8C, 0x7D, 0x04, 0x04, 0x8A, 0xF7, 0x43, 0x7D, 0x2D, 0x10, 0xB3, 0x91, 0xDB, 0x11, 0x7F, 0x9F, 0xB4, 0x8E, 0xDD, 0x7E, 0x83, 0x8C, 0xF6, 0xD8, 0x66, 0x40, 0xEE, 0xF6, 0xD9, 0x6A, 0x46, 0x5E, 0xBC, 0x1D, 0x23, 0xAE, 0xBE, 0x36, 0x2B, 0x6B, 0x2E, 0x84, 0x6E, 0xE4, 0xBA, 0x7D, 0xE4, 0x7E, 0x49, 0x93, 0x0E, 0x8F, 0xCA, 0xDC, 0xC8, 0x01, 0x9D, 0x9E, 0xE6, 0x91, 0x83, 0x12, 0x6F, 0x3B, 0x90, 0x2E, 0x3B, 0x45, 0x0E, 0x9B, 0x01, 0xBE, 0xDA, 0x32, 0xD8, 0x6D, 0x1B, 0xE8, 0xC9, 0xA8, 0x58, 0x0F, 0x3A, 0x06, 0x0C, 0x10, 0xEB, 0x3B, 0xE3, 0xC3, 0x80, 0xF1, 0xA2, 0xDF, 0x85, 0xFB, 0x2B, 0x8C, 0x09, 0xA3, 0x3A, 0x00, 0x92, 0x0A, 0x49, 0xD3, 0x9F, 0x49, 0xA5, 0xE4, 0xC2, 0xFC, 0x9D, 0xDE, 0x64, 0xFA, 0xC6, 0x6D, 0x43, 0xC8, 0xEA, 0x3D, 0x71, 0xBB, 0x7F, 0x77, 0x00, 0xEA, 0x54, 0x23, 0x1A, 0x4A, 0xCE, 0x80, 0xF2, 0x68, 0x69, 0x51, 0x21, 0x39, 0x7C, 0xD7, 0xCD, 0x4B, 0xE4, 0x88, 0x37, 0x17, 0xFC, 0x85, 0xA5, 0xEE, 0x91, 0x99, 0xFB, 0x81, 0xE6, 0xD1, 0x5E, 0xED, 0x44, 0x1E, 0xEB, 0xCB, 0xF5, 0x93, 0x16, 0xB1, 0x7B, 0xA7, 0x00, 0x1D, 0xA2, 0x44, 0x7E, 0x7F, 0x05, 0xD8, 0x89, 0xFC, 0x3F, 0xF1, 0x32, 0x10, 0x26, 0xF2, 0x6E, 0xC4, 0x60, 0x60, 0x5A, 0xB9, 0xC8, 0x94, 0xCB, 0x81, 0x35, 0xD4, 0xDF, 0xD1, 0xC9, 0xE1, 0x80, 0x04, 0xB9, 0x62, 0x5A, 0x52, 0xD0, 0xE7, 0x68, 0xE0, 0x85, 0xDA, 0xCA, 0x80, 0xC2, 0x30, 0xE0, 0xD7, 0xA7, 0xC5, 0x5E, 0x97, 0xDF, 0x03, 0xBF, 0xBB, 0xCC, 0xB9, 0x9B, 0xA5, 0x07, 0x34, 0x2D, 0x1E, 0x8D, 0x74, 0x7A, 0x32, 0x72, 0x71, 0x6C, 0xFA, 0xBE, 0x4B, 0x40, 0xFD, 0xD5, 0x71, 0xE7, 0x13, 0xFC, 0x84, 0x37, 0x26, 0x68, 0xAC, 0x4B, 0x01, 0x1A, 0x4C, 0x42, 0xC4, 0xFB, 0x76, 0x88, 0x47, 0x9F, 0x7F, 0x9E, 0x27, 0x0F, 0x02, 0x34, 0xC5, 0xA8, 0x99, 0x22, 0x09, 0x58, 0x88, 0xFD, 0x63, 0x94, 0x21, 0xFA, 0xE9, 0x88, 0x7E, 0x53, 0x06, 0x84, 0x8A, 0xF5, 0xB1, 0xD5, 0xEB, 0x81, 0x48, 0xC3, 0x57, 0xEF, 0xAC, 0x2A, 0x81, 0x1D, 0xD3, 0xB3, 0x3D, 0x80, 0x68, 0xFF, 0x0D, 0xFA, 0x7B, 0x3E, 0x03, 0x1F, 0xBE, 0xAC, 0xD6, 0x5F, 0xE4, 0x04, 0xEA, 0x63, 0x29, 0x33, 0x24, 0x80, 0x3F, 0xB9, 0xAB, 0xEB, 0xE7, 0xCF, 0x16, 0xF6, 0x9A, 0xD1, 0x12, 0x11, 0x0C, 0xD4, 0x99, 0xCC, 0x91, 0x9D, 0x50, 0x28, 0x3C, 0x35, 0x27, 0x7A, 0x4C, 0x81, 0x30, 0x62, 0xCE, 0xDF, 0x51, 0x6D, 0x81, 0x3F, 0xA6, 0x91, 0xE2, 0x7A, 0x3C, 0x31, 0x1A, 0x00, 0x84, 0x97, 0xC0, 0x7E, 0x04, 0x34, 0x45, 0xDF, 0xCE, 0x0C, 0x06, 0x8C, 0xF4, 0x44, 0x2E, 0xAA, 0x07, 0xCC, 0x44, 0xFF, 0xBC, 0x74, 0x14, 0xB0, 0x1C, 0xFC, 0xEA, 0x46, 0x66, 0x07, 0xC0, 0xF0, 0xC9, 0xF9, 0x2B, 0x89, 0xCA, 0x80, 0xFF, 0x08, 0xA3, 0xDD, 0x8A, 0xF7, 0x3B, 0xFD, 0x39, 0xF4, 0x18, 0x68, 0x37, 0xF4, 0x62, 0x54, 0xDA, 0x7D, 0x40, 0x2B, 0xA4, 0xC6, 0x3E, 0x79, 0x13, 0xD0, 0xB9, 0xB1, 0x66, 0x45, 0xFC, 0x62, 0x40, 0xFE, 0xD9, 0x97, 0x13, 0x6B, 0x92, 0x00, 0xC5, 0xFA, 0xAF, 0x8D, 0xAB, 0x4B, 0x01, 0xE5, 0x83, 0x95, 0x77, 0xE2, 0x92, 0x80, 0x76, 0x46, 0xDF, 0x9C, 0x62, 0x63, 0x01, 0xB5, 0xE6, 0xAA, 0x63, 0x4B, 0x3D, 0xC5, 0xA8, 0xAB, 0xC3, 0xF5, 0x2F, 0xBD, 0x61, 0xAF, 0x4E, 0x01, 0xE4, 0x66, 0x8B, 0xE7, 0x64, 0x17, 0x24, 0x3B, 0xC9, 0x77, 0xFA, 0xF5, 0xFD, 0xD6, 0x6C, 0x00, 0x78, 0xA0, 0x75, 0x69, 0x17, 0x79, 0xFE, 0xDD, 0x95, 0x44, 0xF2, 0xA0, 0xE9, 0xAD, 0x3B, 0x80, 0xDD, 0x3D, 0x20, 0x51, 0x5F, 0xBD, 0x68, 0xEF, 0x69, 0xE0, 0x40, 0xC4, 0xFD, 0xE0, 0x4D, 0x0A, 0xC0, 0xBA, 0x7B, 0x4D, 0xFE, 0xAB, 0x06, 0x00, 0xF3, 0x1E, 0x35, 0x6A, 0x88, 0x13, 0x82, 0x89, 0x31, 0xF5, 0xEA, 0xE1, 0x1F, 0x81, 0x60, 0xAF, 0xBA, 0xAF, 0x53, 0x56, 0x03, 0x63, 0x95, 0xEB, 0x8E, 0x4F, 0xB9, 0x02, 0xF8, 0xCF, 0xAC, 0x8B, 0x9F, 0x52, 0x09, 0xF8, 0xB8, 0xD4, 0x2D, 0x9E, 0xB2, 0x5D, 0xD4, 0xFB, 0x09, 0x48, 0x88, 0x3C, 0x9A, 0xD7, 0x06, 0x90, 0x55, 0x13, 0x39, 0x68, 0x2C, 0xD0, 0x46, 0xA1, 0xB6, 0xE5, 0xF1, 0x7A, 0x00, 0x28, 0xB2, 0xBD, 0x3F, 0x8B, 0x3C, 0x75, 0xF1, 0xC1, 0x52, 0x32, 0xD9, 0xFC, 0x95, 0x11, 0xB9, 0x48, 0xFB, 0x7D, 0x7F, 0xC0, 0x66, 0x0A, 0x50, 0xD2, 0xD1, 0x7C, 0xF8, 0xAA, 0x05, 0xC0, 0xBB, 0xE8, 0xBB, 0x31, 0xD1, 0x76, 0x40, 0x4E, 0x69, 0xE3, 0x88, 0xE9, 0x11, 0x40, 0x66, 0x74, 0x9D, 0x6A, 0xD0, 0x37, 0x60, 0x4F, 0x2F, 0xD1, 0x3F, 0x97, 0x01, 0x09, 0xAE, 0xCD, 0x15, 0x6E, 0x5F, 0x80, 0x0D, 0xBB, 0x9A, 0xEA, 0x3D, 0x7C, 0x80, 0xB8, 0xAF, 0x4D, 0x0D, 0x5E, 0xF2, 0xC0, 0xB2, 0xD5, 0x4D, 0xD7, 0xBD, 0x45, 0x36, 0x79, 0x40, 0xF9, 0xE7, 0xBD, 0x98, 0x15, 0x13, 0x81, 0x36, 0x53, 0x6B, 0x8C, 0x5F, 0xED, 0x03, 0x80, 0x67, 0xEB, 0xDE, 0xA6, 0x93, 0xD9, 0x4F, 0xCB, 0x8B, 0xC9, 0x84, 0xBB, 0x5F, 0xAF, 0x92, 0xB3, 0x2F, 0xD1, 0xDD, 0x79, 0xFB, 0xCD, 0x56, 0x1A, 0xBF, 0x74, 0x80, 0x11, 0x9E, 0x40, 0xA3, 0xAE, 0x6B, 0xD7, 0x90, 0x8B, 0x40, 0xB3, 0xCA, 0x71, 0xCF, 0xB1, 0x46, 0x40, 0x55, 0x42, 0xF5, 0x44, 0x0F, 0x65, 0xE0, 0x59, 0xCD, 0xCF, 0x66, 0xE7, 0x93, 0x40, 0xCE, 0x04, 0x31, 0x6E, 0x3D, 0x06, 0x2E, 0x8A, 0x79, 0xB5, 0x57, 0x3D, 0x90, 0x25, 0x66, 0x72, 0xEB, 0x2C, 0xE0, 0xB8, 0xD0, 0x6E, 0x21, 0x70, 0x48, 0x64, 0x3F, 0x47, 0x71, 0xDD, 0xBF, 0x9B, 0x04, 0x28, 0x75, 0x6A, 0x90, 0xA3, 0x3B, 0x1D, 0x0C, 0x7F, 0x93, 0xF4, 0xC3, 0x57, 0x88, 0x2B, 0x0A, 0x94, 0xB7, 0x80, 0x1D, 0x2B, 0x1B, 0x2F, 0x91, 0x93, 0xAD, 0x9A, 0x57, 0x02, 0x8A, 0x6B, 0xFA, 0x74, 0x6C, 0x39, 0x02, 0x58, 0x0C, 0x01, 0x1A, 0x9D, 0x75, 0x7F, 0x3A, 0x66, 0x2B, 0x88, 0x91, 0x6C, 0x5A, 0x7F, 0x33, 0xDA, 0x55, 0x59, 0x98, 0xBC, 0xC0, 0x6C, 0x07, 0xE8, 0x39, 0xCB, 0x3E, 0xD3, 0x2A, 0xE1, 0xFB, 0xDF, 0x01, 0x06, 0x3F, 0x81, 0x4F, 0x09, 0x62, 0xA6, 0x74, 0x02, 0x5E, 0x89, 0xC4, 0xA2, 0x25, 0xA4, 0x1C, 0xD4, 0xCD, 0x99, 0x76, 0xBF, 0x89, 0xB5, 0xF7, 0x05, 0xC0, 0x4D, 0x5F, 0x31, 0xCE, 0x1D, 0x14, 0xA9, 0x69, 0x22, 0x20, 0xFF, 0xBD, 0xEC, 0x7A, 0xC3, 0x4D, 0x40, 0x76, 0xFA, 0xCD, 0x4F, 0x7F, 0xA7, 0x01, 0xC0, 0x2E, 0xF1, 0xC4, 0x98, 0x0C, 0x2D, 0x24, 0x3B, 0xF4, 0xB3, 0x13, 0xDF, 0x25, 0xE1, 0xDA, 0x71, 0x3B, 0x40, 0xEB, 0x21, 0x06, 0xBA, 0xE4, 0x80, 0x43, 0x8A, 0x2F, 0x24, 0xD7, 0x89, 0x99, 0x71, 0x05, 0x78, 0x04, 0x8A, 0x61, 0x4F, 0xD6, 0xB1, 0xCF, 0xC6, 0x00, 0x12, 0x62, 0xA6, 0x69, 0xB1, 0x05, 0x14, 0xEA, 0x39, 0x07, 0x01, 0x0D, 0x62, 0xEE, 0x52, 0xDC, 0x0F, 0x54, 0x4E, 0x16, 0xAF, 0xF4, 0x0C, 0xA0, 0x15, 0x18, 0x95, 0xA7, 0x9F, 0x68, 0x86, 0x82, 0x86, 0x41, 0x81, 0x98, 0xF7, 0xA5, 0x1D, 0x24, 0x27, 0xEF, 0xB3, 0xA2, 0xCF, 0x25, 0x2D, 0x27, 0xCF, 0x27, 0x95, 0xCD, 0xFB, 0xDC, 0x25, 0x55, 0xED, 0x41, 0xEB, 0x65, 0xEB, 0xDA, 0xED, 0x22, 0xAD, 0xAB, 0x01, 0xD2, 0xFD, 0x25, 0x1B, 0x11, 0xCB, 0xC6, 0x2D, 0x67, 0x53, 0x74, 0xD9, 0xF3, 0x05, 0x6C, 0x59, 0x38, 0xFB, 0x45, 0x4F, 0xB0, 0x5E, 0x24, 0xC0, 0x5D, 0x80, 0xA4, 0x02, 0xB7, 0x4B, 0x7A, 0x0B, 0x7B, 0x4F, 0xEC, 0x3B, 0x56, 0xF0, 0x55, 0xF0, 0x3D, 0xAC, 0x27, 0xF2, 0x60, 0x96, 0xE4, 0xC6, 0x59, 0xA1, 0xF4, 0x55, 0x85, 0xD5, 0xCE, 0x43, 0xC9, 0x36, 0x67, 0x24, 0xA2, 0x45, 0x0E, 0x31, 0x91, 0x95, 0x07, 0x3D, 0x97, 0x5A, 0x0D, 0x90, 0xB6, 0x1A, 0xAC, 0xDB, 0x37, 0x36, 0xE8, 0x29, 0x1B, 0xE3, 0xC4, 0xC6, 0x8F, 0x64, 0xD3, 0x3C, 0xD8, 0xC2, 0x99, 0xEC, 0xE3, 0x4E, 0x6C, 0xC9, 0x1F, 0xB6, 0x62, 0x86, 0x20, 0x40, 0xE4, 0xA0, 0x08, 0x20, 0x63, 0x91, 0x98, 0x09, 0x22, 0xDA, 0x44, 0x2C, 0xD2, 0xF9, 0x3F, 0x75, 0xBF, 0x0E, 0x51, 0x20, 0xA5, 0xDA, 0x00, 0xA4, 0x92, 0x3A, 0xD9, 0x6E, 0x2D, 0x40, 0x1A, 0x3E, 0x62, 0xED, 0x7C, 0xD9, 0x11, 0xCF, 0xD8, 0x60, 0xB0, 0x73, 0x14, 0xD9, 0x38, 0x1B, 0x36, 0xF1, 0x1B, 0x9B, 0x51, 0xC0, 0x5E, 0xF0, 0x63, 0x6F, 0x75, 0x62, 0x1F, 0xB6, 0x67, 0x5F, 0xCD, 0xA6, 0x8F, 0x53, 0xE4, 0x00, 0x32, 0x7C, 0x0A, 0xDB, 0x1F, 0x80, 0xCD, 0x12, 0x71, 0xF6, 0xBF, 0x03, 0x03, 0xBE, 0xD3, 0xF3, 0xAC, 0x7F, 0x72, 0x50, 0x54, 0x31, 0xA9, 0x14, 0xB1, 0xF1, 0x28, 0x57, 0x07, 0xFE, 0x5B, 0x60, 0x7D, 0xE5, 0x62, 0x23, 0x32, 0x53, 0x2B, 0x18, 0xE4, 0x93, 0xB0, 0x11, 0xA2, 0x77, 0xB4, 0x9F, 0x5B, 0x1D, 0xD9, 0x53, 0xE4, 0x01, 0xF9, 0xC7, 0x75, 0xCD, 0x26, 0x62, 0x95, 0x4F, 0x52, 0xAC, 0x50, 0xEA, 0xFD, 0xE1, 0x79, 0xB0, 0xB3, 0x78, 0x17, 0xA6, 0xCF, 0xE2, 0xEF, 0x9F, 0xB8, 0x9F, 0x75, 0x94, 0x04, 0xFA, 0x8A, 0x7C, 0x33, 0xB8, 0xBF, 0xF0, 0x95, 0xE8, 0xE3, 0x3B, 0x81, 0x71, 0x99, 0xDC, 0x8E, 0xF9, 0x6B, 0x49, 0xB9, 0x13, 0x6B, 0x6F, 0x53, 0xFB, 0x7A, 0x25, 0x52, 0x1E, 0x9B, 0x06, 0x80, 0xEB, 0x2F, 0x07, 0x7D, 0x0E, 0xA4, 0x8D, 0x98, 0xB3, 0x83, 0x3C, 0x1F, 0x38, 0x46, 0xAC, 0xD7, 0x74, 0xB4, 0x6E, 0xF2, 0xB1, 0xD5, 0x16, 0x7D, 0xD3, 0xF4, 0xCF, 0xB6, 0x1E, 0x22, 0xB7, 0x48, 0xED, 0x15, 0x67, 0x58, 0x9A, 0xEB, 0x6B, 0x9E, 0x66, 0xDB, 0x89, 0xB4, 0x3E, 0xE7, 0x23, 0xB8, 0xB7, 0x45, 0xB1, 0x51, 0x79, 0x80, 0x8C, 0x78, 0x41, 0x57, 0x0B, 0x60, 0x90, 0xB3, 0x58, 0x4F, 0x92, 0x02, 0x42, 0x0B, 0x44, 0x76, 0x02, 0x30, 0x91, 0xE6, 0x77, 0x48, 0xFA, 0xAD, 0x72, 0x27, 0x7B, 0x9E, 0x3D, 0x24, 0x49, 0xBA, 0x7D, 0x38, 0xAB, 0x49, 0x2E, 0x36, 0x59, 0x7F, 0x87, 0x4C, 0x59, 0xBB, 0x20, 0x9E, 0xCC, 0x9E, 0x43, 0xFB, 0xAC, 0xD5, 0x0E, 0xD5, 0x34, 0x99, 0x8B, 0xAF, 0x4B, 0x5C, 0x11, 0x3F, 0x7F, 0x6B, 0x5D, 0xB5, 0x74, 0xB6, 0xC3, 0x09, 0x56, 0x75, 0x97, 0xB8, 0xFB, 0xD8, 0x06, 0x3E, 0xBB, 0xD2, 0xEC, 0xB2, 0xB6, 0x80, 0x5C, 0xB1, 0x78, 0x3F, 0x86, 0x03, 0x43, 0xD6, 0x89, 0x0C, 0xB7, 0x1B, 0x98, 0x30, 0x5B, 0xFC, 0x0C, 0x19, 0xBC, 0x0F, 0x15, 0x00, 0x56, 0x16, 0x90, 0x0E, 0xCD, 0xAB, 0xFD, 0xC8, 0x99, 0x27, 0x56, 0x1E, 0x26, 0x97, 0x2E, 0x5F, 0x1D, 0x43, 0xEE, 0xCF, 0x5B, 0x64, 0x49, 0xDE, 0xDD, 0x1E, 0x22, 0xBE, 0x5F, 0xE1, 0x7B, 0x8B, 0x8D, 0xE9, 0xE0, 0xD6, 0xFA, 0x33, 0x59, 0xF5, 0x92, 0xDF, 0xB7, 0xC9, 0xAE, 0x6E, 0x1F, 0x35, 0x48, 0xDD, 0xF3, 0x22, 0x07, 0xF6, 0xE4, 0xFA, 0x8B, 0x22, 0xD9, 0xB8, 0x28, 0x40, 0xFE, 0xAA, 0xC8, 0x26, 0x00, 0x3C, 0x45, 0xDE, 0xF0, 0x3D, 0x2E, 0x14, 0xEB, 0x70, 0x5D, 0xF2, 0x81, 0xC8, 0x52, 0x6E, 0xC7, 0xBA, 0x0E, 0xA4, 0xED, 0xC7, 0xF5, 0x0F, 0xC8, 0xD9, 0x81, 0x6B, 0x07, 0x90, 0xDB, 0x33, 0x79, 0xFF, 0xD8, 0x95, 0x02, 0xFA, 0xBD, 0x35, 0x93, 0x3F, 0x0D, 0x35, 0x83, 0x8A, 0xB8, 0xAE, 0x4D, 0x58, 0xCD, 0x67, 0x52, 0xF7, 0x4C, 0xD9, 0x33, 0xD2, 0xF0, 0xD2, 0x8B, 0x62, 0xB2, 0x47, 0xD0, 0x83, 0x89, 0x7C, 0x27, 0x20, 0x72, 0xC6, 0x60, 0x70, 0x1E, 0x33, 0x67, 0xD7, 0xBE, 0x05, 0x94, 0x7F, 0x89, 0xF7, 0xC5, 0x03, 0x30, 0x17, 0xEB, 0x01, 0x7E, 0xE7, 0x01, 0x3F, 0x91, 0x03, 0xC2, 0xFC, 0x80, 0xB1, 0x03, 0xB9, 0x1D, 0x5B, 0xEB, 0xC8, 0x1E, 0xB6, 0x9C, 0x4F, 0x67, 0x9E, 0xDD, 0x78, 0x95, 0xCC, 0x18, 0xB6, 0x5A, 0x8E, 0xFC, 0x5D, 0xBE, 0x28, 0xEC, 0x6B, 0x25, 0x50, 0x97, 0x1B, 0x34, 0xF2, 0xD5, 0x23, 0x50, 0x0E, 0x3A, 0x78, 0xF7, 0x18, 0x69, 0xBD, 0x2B, 0xE7, 0x39, 0x69, 0x67, 0x70, 0x69, 0x12, 0xE9, 0xE4, 0x72, 0xDA, 0x89, 0xEC, 0xE7, 0x2B, 0xF2, 0x58, 0x3B, 0xF0, 0x55, 0x3F, 0x88, 0xDD, 0xFE, 0x1C, 0x90, 0xFB, 0x22, 0x72, 0xC6, 0x17, 0xC0, 0x5C, 0xB4, 0x73, 0x54, 0x3A, 0x10, 0x2C, 0x72, 0xD6, 0x78, 0x25, 0x20, 0x24, 0x5B, 0x5C, 0x5F, 0xB3, 0x54, 0x6B, 0x22, 0x82, 0xA9, 0x5E, 0xFB, 0xF7, 0x89, 0xE1, 0xE4, 0x12, 0xC5, 0xF5, 0x3D, 0x8A, 0x3F, 0x03, 0x8F, 0x52, 0x67, 0x9C, 0x39, 0x4B, 0xEB, 0x4E, 0xE3, 0x43, 0x6A, 0xB3, 0x16, 0x01, 0x7F, 0xB4, 0x22, 0xDC, 0x8E, 0x9F, 0x05, 0x1A, 0xF2, 0x46, 0xEF, 0x39, 0xB8, 0x01, 0x68, 0x91, 0x1D, 0xBE, 0x66, 0x8F, 0x2B, 0xD0, 0x6C, 0xE0, 0x1E, 0xBE, 0x3D, 0x04, 0x68, 0x7A, 0xEA, 0xB5, 0x66, 0x7D, 0xA5, 0xF0, 0xB0, 0x8F, 0xD4, 0x3F, 0xCF, 0x4D, 0x93, 0xDB, 0x82, 0xDD, 0x05, 0xC8, 0x95, 0x89, 0x7C, 0x76, 0x05, 0xD0, 0x17, 0xEF, 0xFB, 0xAE, 0x1B, 0x40, 0xCF, 0x78, 0xD1, 0xDE, 0xF3, 0xC0, 0x00, 0x3D, 0x91, 0x5F, 0x5D, 0x81, 0xD1, 0x45, 0x8F, 0x64, 0x7B, 0x15, 0x01, 0xB1, 0x1B, 0x0F, 0xD5, 0x00, 0x93, 0xB5, 0x56, 0x1C, 0xDC, 0x56, 0x0B, 0x3C, 0x5E, 0xBF, 0xA0, 0x65, 0x6E, 0x12, 0xF0, 0xD7, 0x79, 0xF1, 0xBE, 0xE0, 0x05, 0x40, 0x4B, 0xC2, 0x32, 0xC5, 0x30, 0x61, 0xFD, 0xC9, 0x39, 0xEA, 0xA1, 0xCD, 0xC0, 0x9F, 0x9A, 0x89, 0x56, 0x41, 0x36, 0xC2, 0x9D, 0x93, 0x4A, 0x47, 0x5F, 0x16, 0x86, 0x87, 0x5F, 0xF3, 0x78, 0x2A, 0x1C, 0x3A, 0xF9, 0xA4, 0x58, 0x8F, 0xBA, 0xCA, 0xF5, 0x8F, 0x2E, 0x67, 0x8F, 0x57, 0xB0, 0xC7, 0x7A, 0x02, 0x1A, 0xA2, 0xBF, 0x9E, 0x96, 0x05, 0x54, 0xA5, 0xAA, 0x77, 0x9F, 0x04, 0xA0, 0x38, 0xA1, 0xE0, 0xF5, 0x1E, 0x7A, 0x96, 0xB5, 0x38, 0x5D, 0x6D, 0x55, 0x77, 0xC0, 0xD5, 0x5E, 0x27, 0x46, 0x6E, 0x7E, 0xFB, 0xC5, 0xBB, 0xAF, 0x02, 0xCA, 0x69, 0x47, 0x5C, 0x92, 0x6A, 0x81, 0xAE, 0xD7, 0x6A, 0x4D, 0x77, 0xDC, 0x04, 0x74, 0xEA, 0x7F, 0x6F, 0x5F, 0xF3, 0x1B, 0xE8, 0xDA, 0xA9, 0x7A, 0xEC, 0x52, 0x5F, 0x40, 0x5D, 0xFF, 0xFB, 0xFB, 0x05, 0xD5, 0x80, 0x86, 0x62, 0xD5, 0xAC, 0xF9, 0x59, 0xC2, 0xDB, 0x55, 0x7F, 0xE6, 0x99, 0x03, 0x9A, 0xF7, 0x7F, 0x4C, 0xA0, 0xDF, 0x17, 0x38, 0x2B, 0x03, 0x9E, 0x0D, 0xFA, 0xB0, 0x17, 0xD5, 0xD9, 0x6B, 0x3A, 0xE4, 0xBB, 0x45, 0xE7, 0x66, 0x92, 0x97, 0xFA, 0xA6, 0xCF, 0x27, 0x53, 0xBB, 0x1F, 0x69, 0x24, 0x37, 0x7A, 0x65, 0x03, 0x30, 0x30, 0x01, 0x56, 0x44, 0xC9, 0x87, 0x6F, 0x18, 0x0A, 0x6C, 0x5F, 0x9E, 0x7D, 0x62, 0xF1, 0x43, 0x20, 0x2E, 0xB3, 0xFE, 0xE6, 0xC2, 0x5E, 0xC0, 0x3C, 0xF9, 0x96, 0x37, 0xB3, 0x5E, 0x02, 0x93, 0x36, 0x89, 0xFC, 0x39, 0x1F, 0x18, 0x97, 0xD2, 0xF0, 0x36, 0x60, 0x04, 0xE5, 0xA0, 0x86, 0x05, 0xB4, 0x7B, 0x2A, 0xC0, 0xBE, 0xC1, 0x63, 0x4C, 0x3F, 0xC0, 0x77, 0x61, 0xC3, 0xAC, 0x31, 0xE2, 0x59, 0xEF, 0xF5, 0x5B, 0x00, 0xC4, 0xEC, 0x9D, 0x53, 0x0B, 0xC8, 0x8C, 0x17, 0x77, 0xC3, 0x2A, 0xA0, 0xFA, 0x96, 0xF9, 0x87, 0xC8, 0xEB, 0x6E, 0x37, 0x8C, 0xC9, 0x94, 0x4E, 0xD7, 0x8F, 0x92, 0x6B, 0x2D, 0xF2, 0x8D, 0xC8, 0x19, 0x0A, 0x8F, 0x1E, 0x01, 0xDA, 0xB7, 0x81, 0xDB, 0x5F, 0xF4, 0x65, 0x66, 0x9B, 0x02, 0xF7, 0x90, 0x11, 0x1F, 0x76, 0x11, 0xB8, 0xF2, 0xB3, 0x26, 0x66, 0xFC, 0x04, 0xE0, 0xF8, 0xCC, 0xBF, 0x83, 0x47, 0x25, 0x03, 0x7B, 0xDD, 0x45, 0x3F, 0xBD, 0x07, 0x6C, 0x2A, 0x15, 0xFD, 0x72, 0x25, 0xB0, 0x56, 0xAC, 0xFD, 0x38, 0xEF, 0x07, 0x56, 0x06, 0xFF, 0x35, 0xEC, 0xDF, 0x03, 0x58, 0x26, 0xDF, 0x32, 0x69, 0xC0, 0x5F, 0x91, 0x83, 0x26, 0x03, 0x0A, 0x62, 0x5C, 0x79, 0x69, 0x05, 0x60, 0xEB, 0xFB, 0xC4, 0x27, 0x32, 0x80, 0x84, 0x4C, 0xE1, 0xBA, 0x17, 0x13, 0x00, 0xE0, 0xF0, 0x81, 0xE7, 0xAF, 0xC9, 0xB8, 0x11, 0xAF, 0x3F, 0x93, 0x53, 0x4D, 0xCB, 0x1E, 0x91, 0xFD, 0xC6, 0x7D, 0xCE, 0x07, 0x8C, 0xFC, 0x80, 0xEF, 0xBA, 0xF6, 0xBA, 0xB4, 0x16, 0x5F, 0x15, 0x92, 0xD4, 0x69, 0x70, 0x3B, 0xA0, 0x3C, 0xA7, 0xD4, 0xDB, 0xE9, 0x00, 0x50, 0xA4, 0xF9, 0xFB, 0x48, 0x9F, 0x26, 0x20, 0x47, 0xF4, 0xF1, 0x1E, 0x06, 0x40, 0xB6, 0xC8, 0xC2, 0x06, 0x51, 0xC0, 0x09, 0x91, 0xFD, 0x8D, 0x73, 0x81, 0x23, 0x4B, 0xC4, 0xD7, 0x3B, 0x01, 0x07, 0xC4, 0xDA, 0x3B, 0x5D, 0x0F, 0xE5, 0x91, 0x80, 0xB2, 0xF6, 0x8F, 0x1E, 0x9F, 0x4E, 0x00, 0x92, 0x2A, 0x0F, 0x3F, 0x7F, 0xB1, 0x04, 0x80, 0x13, 0xAF, 0x2B, 0xFB, 0x92, 0x6B, 0x96, 0xFD, 0x98, 0x4E, 0x86, 0xBC, 0xF8, 0xFD, 0x90, 0xEC, 0xEF, 0xD2, 0x30, 0x1E, 0x50, 0xB2, 0xA0, 0x55, 0x4F, 0xF9, 0x6B, 0x56, 0x2B, 0x81, 0xE6, 0x27, 0x01, 0x03, 0x4D, 0x0C, 0x80, 0xC6, 0x15, 0xDB, 0x2F, 0x18, 0x50, 0x1E, 0x32, 0xBE, 0xBB, 0x4E, 0xAF, 0x12, 0x68, 0x5C, 0x5B, 0x1F, 0xA1, 0xE5, 0x03, 0x54, 0xFC, 0x16, 0xE3, 0xD7, 0x64, 0xE0, 0xA9, 0x9B, 0x18, 0x3F, 0x8D, 0x80, 0xFB, 0x33, 0xC4, 0x38, 0x26, 0x01, 0xDC, 0x12, 0x33, 0x7E, 0xC7, 0x91, 0xC0, 0x8D, 0x65, 0x62, 0x7E, 0xD9, 0xDB, 0x62, 0xD3, 0xF4, 0x18, 0x50, 0xFC, 0xF0, 0xE2, 0xCA, 0xEF, 0xA7, 0x80, 0xEC, 0xBA, 0x73, 0x43, 0xEA, 0xDE, 0x00, 0xC0, 0x86, 0x21, 0x8D, 0x8A, 0x64, 0xB0, 0xC2, 0xDF, 0xA1, 0x82, 0x06, 0xBB, 0x3D, 0x74, 0x85, 0x4A, 0x25, 0x03, 0xC2, 0x05, 0x5A, 0x15, 0x2A, 0xD7, 0xC5, 0xBB, 0xBB, 0x0A, 0x90, 0x16, 0xF9, 0x24, 0xC4, 0x1F, 0x52, 0xA0, 0x27, 0x05, 0x5D, 0x60, 0x4B, 0x66, 0x37, 0x01, 0xE4, 0xEB, 0x78, 0x40, 0x5A, 0xCC, 0xE7, 0x8D, 0xCE, 0xFC, 0xB9, 0x98, 0xDB, 0xC2, 0x80, 0x3A, 0x71, 0xEE, 0x65, 0xF6, 0x01, 0x5F, 0xE7, 0x89, 0x44, 0xF1, 0x9D, 0x73, 0x90, 0x82, 0x5F, 0x99, 0x18, 0xA1, 0xE4, 0x86, 0xCB, 0x0D, 0xBF, 0x9A, 0xF0, 0x77, 0x1B, 0x20, 0x7D, 0x68, 0xDB, 0xC8, 0x96, 0x28, 0x00, 0x98, 0x70, 0x9B, 0xEA, 0x22, 0xB9, 0x77, 0x5F, 0x12, 0x37, 0x25, 0xC5, 0x59, 0x96, 0xAE, 0x96, 0x2B, 0x03, 0x8D, 0x82, 0xA7, 0x01, 0x72, 0x88, 0x2D, 0x3B, 0x6E, 0x20, 0x1B, 0x6B, 0xCF, 0xA6, 0x66, 0xB0, 0xB9, 0x7D, 0xD8, 0x37, 0x5F, 0x04, 0xCF, 0x45, 0xFE, 0xF9, 0x0C, 0x48, 0x88, 0x76, 0xB7, 0x7C, 0x14, 0xDA, 0x71, 0xFE, 0xC1, 0x62, 0x36, 0x57, 0x53, 0xB4, 0xCA, 0x41, 0xD6, 0x81, 0x7E, 0x83, 0x02, 0x80, 0xC1, 0xC4, 0xC3, 0xA4, 0x64, 0xB4, 0x75, 0x17, 0x92, 0x5F, 0x47, 0x22, 0x43, 0xD2, 0x8D, 0x54, 0xB1, 0x00, 0x48, 0xB3, 0x8B, 0xEC, 0xE0, 0x31, 0xEC, 0x84, 0x9E, 0xEC, 0xC2, 0xAB, 0x6C, 0xFC, 0x23, 0xF6, 0xB8, 0x0C, 0x9B, 0x6F, 0xCE, 0x96, 0x54, 0xB1, 0xEF, 0xBF, 0xB2, 0x95, 0x97, 0x04, 0xE2, 0x4E, 0xBE, 0xF6, 0x15, 0x90, 0x62, 0x2B, 0xEA, 0xD8, 0x49, 0x47, 0xCF, 0x70, 0xA6, 0xBA, 0x92, 0x9D, 0x1D, 0xE2, 0x48, 0x40, 0x7A, 0xA6, 0xF0, 0x14, 0x4E, 0x01, 0xA2, 0x9D, 0xAD, 0xF5, 0x3A, 0xEE, 0x64, 0x2D, 0xD6, 0xB2, 0xAE, 0xD2, 0xAC, 0xFF, 0x4D, 0x76, 0x46, 0x06, 0x1B, 0x77, 0x99, 0x4D, 0x3A, 0xCE, 0x9E, 0x18, 0xCA, 0xE6, 0xD6, 0xB3, 0xF7, 0xFB, 0xB2, 0xCF, 0x0E, 0xB1, 0x6F, 0xD2, 0xE9, 0x63, 0xE0, 0xFA, 0x7F, 0xCF, 0x31, 0xFD, 0x01, 0xF4, 0xF6, 0xE6, 0xFC, 0xE3, 0xB6, 0x8C, 0x0D, 0xDC, 0xD1, 0x9A, 0x3F, 0x4A, 0x48, 0xE9, 0x1B, 0x5B, 0x0C, 0xFE, 0x57, 0x0E, 0x9A, 0x3F, 0x7B, 0xFE, 0x6C, 0xF2, 0x48, 0x97, 0xA0, 0x46, 0x32, 0xF7, 0xC4, 0xC8, 0x5A, 0x91, 0x6E, 0x2D, 0xBF, 0x7F, 0x30, 0xB3, 0x14, 0xE9, 0xAF, 0xE1, 0x77, 0x81, 0x61, 0x83, 0xE8, 0x2B, 0x1D, 0x5A, 0x22, 0xF4, 0x3A, 0xF0, 0x3C, 0xA8, 0x25, 0x32, 0xBD, 0xFF, 0x35, 0xFE, 0xFE, 0x90, 0x09, 0xAC, 0xC3, 0x29, 0xC0, 0x46, 0xCC, 0x9B, 0x76, 0x45, 0x40, 0xDF, 0x72, 0xD1, 0x0E, 0x77, 0x60, 0xF4, 0x6A, 0x71, 0xAD, 0xC5, 0x03, 0x41, 0x59, 0xF4, 0x7D, 0x12, 0x59, 0xEB, 0x65, 0xFF, 0x57, 0x3B, 0xA6, 0xCE, 0x9D, 0x9F, 0x49, 0x66, 0x45, 0xFB, 0x89, 0xDE, 0xDC, 0xA1, 0x4B, 0x5D, 0x7B, 0xDB, 0x73, 0xB4, 0x6F, 0xBB, 0x7E, 0x8A, 0xC1, 0x30, 0xAE, 0xDB, 0x6D, 0x0E, 0xAB, 0xD9, 0x91, 0x55, 0x14, 0xBD, 0x30, 0xA8, 0x35, 0xFD, 0x8E, 0xF9, 0xCD, 0xDA, 0xCA, 0x03, 0xB6, 0x62, 0xFD, 0xC8, 0x3E, 0x0D, 0x70, 0x52, 0x16, 0x6D, 0x0D, 0x04, 0x7C, 0x2D, 0x38, 0x07, 0x05, 0x6E, 0x6B, 0x5D, 0x9F, 0xFA, 0x49, 0x76, 0x5B, 0x75, 0xA6, 0x88, 0xEC, 0x8F, 0x83, 0x39, 0x64, 0x74, 0xE4, 0xDE, 0xDB, 0xE4, 0x21, 0x99, 0x99, 0x7A, 0xE4, 0xA9, 0x9E, 0xFE, 0x6A, 0xA2, 0x1D, 0xD1, 0x55, 0x43, 0x7B, 0xB8, 0x70, 0xBD, 0xAE, 0x16, 0x6C, 0x5B, 0x43, 0xF2, 0xDF, 0x8F, 0x88, 0xB9, 0x00, 0x19, 0x2E, 0xC9, 0x46, 0x9E, 0x63, 0xFB, 0xED, 0x01, 0x9C, 0xC4, 0xFC, 0xA6, 0xB3, 0x06, 0xF0, 0x1F, 0x24, 0xC6, 0x20, 0x17, 0x60, 0xDC, 0x23, 0x6E, 0xC7, 0xF2, 0x05, 0x64, 0x9F, 0xD2, 0x98, 0xA7, 0xA4, 0xF7, 0x9D, 0xA5, 0x69, 0xE4, 0xD2, 0x83, 0x4B, 0xEE, 0x90, 0x7B, 0x1F, 0xCD, 0x89, 0x21, 0x9F, 0xBE, 0xF2, 0x53, 0x16, 0xBD, 0xAB, 0xA2, 0x31, 0xD4, 0xB8, 0xF2, 0x3F, 0xEB, 0xFE, 0xF9, 0xC1, 0x7E, 0x1D, 0x45, 0x4A, 0x1D, 0x13, 0x75, 0xCB, 0xB9, 0xEE, 0xEC, 0xD5, 0xEC, 0x62, 0x33, 0xD6, 0xFE, 0x3E, 0x30, 0x54, 0x9C, 0x4F, 0xB7, 0x0C, 0x60, 0xB0, 0xD8, 0x87, 0x6A, 0x95, 0x00, 0x04, 0xA5, 0xB4, 0xBE, 0x1F, 0x5D, 0x49, 0xAB, 0xEA, 0x98, 0x75, 0xE4, 0xF8, 0xA5, 0xCB, 0xD6, 0x92, 0x5B, 0x73, 0x62, 0x8C, 0xC8, 0x2B, 0x63, 0x67, 0x7E, 0x17, 0xF9, 0xED, 0x6B, 0x93, 0xAA, 0xA3, 0x1D, 0xD7, 0xB5, 0x48, 0xFD, 0xBA, 0x9D, 0x04, 0xDE, 0xDC, 0x21, 0x15, 0x16, 0x3F, 0xDB, 0x4B, 0xAA, 0xE6, 0xDF, 0xBB, 0x4D, 0x6A, 0x8A, 0xFE, 0x11, 0xD3, 0x8F, 0xEB, 0x2E, 0xB9, 0xC0, 0xC6, 0xF8, 0x82, 0x5D, 0x07, 0xA8, 0x88, 0xF7, 0x7D, 0xB8, 0x37, 0xE0, 0xFE, 0x4C, 0xAC, 0x93, 0xE5, 0x00, 0xFE, 0x9F, 0xB8, 0x1D, 0xAB, 0x15, 0xC9, 0x1E, 0xCF, 0x62, 0xB3, 0xC8, 0x30, 0xBF, 0x65, 0xD5, 0x64, 0x46, 0x61, 0xF4, 0x64, 0xF2, 0xD7, 0xF0, 0x70, 0x8D, 0x52, 0xDA, 0x11, 0x51, 0xE6, 0xF1, 0xE8, 0x61, 0x0E, 0x28, 0x7B, 0xBF, 0xB8, 0xF9, 0x85, 0xEC, 0xFA, 0xFE, 0x8A, 0x35, 0x69, 0x90, 0x71, 0xCE, 0x8B, 0xEC, 0xA1, 0x77, 0xF2, 0x03, 0x69, 0x29, 0x9E, 0x8F, 0x6E, 0x8C, 0xE0, 0xBA, 0x1B, 0x66, 0x83, 0xAD, 0x67, 0xD7, 0x9C, 0x00, 0xD4, 0xC5, 0xBA, 0xE3, 0x3C, 0x1F, 0xC0, 0x4E, 0xBC, 0xDF, 0x3E, 0xCA, 0xC0, 0xD8, 0x19, 0xA2, 0x1F, 0xED, 0x97, 0x69, 0x3F, 0x81, 0x72, 0x32, 0x54, 0x9A, 0xD7, 0xBC, 0xA9, 0x6C, 0x04, 0xE6, 0x6C, 0x99, 0x9B, 0x7A, 0xEF, 0x09, 0x70, 0x43, 0x7E, 0xCC, 0xC7, 0x23, 0x86, 0x40, 0xFD, 0x03, 0x97, 0xB9, 0x69, 0xAE, 0x40, 0xE3, 0x6D, 0xFF, 0x03, 0xA9, 0xC5, 0x40, 0xFD, 0x73, 0x2F, 0x8B, 0xA4, 0x7C, 0xD0, 0x7B, 0x9C, 0x9D, 0xB0, 0x8D, 0x74, 0x6E, 0xD8, 0x54, 0x4B, 0x0E, 0x3C, 0xB9, 0x66, 0x28, 0x39, 0x58, 0x8C, 0xF9, 0xBB, 0xCF, 0x00, 0x80, 0xF0, 0x1C, 0xD8, 0xB5, 0x6C, 0xE2, 0x05, 0x40, 0x31, 0x57, 0xAC, 0x97, 0x0D, 0x01, 0x44, 0xB7, 0x15, 0xBF, 0x1C, 0xCA, 0x39, 0x31, 0xEE, 0x19, 0x60, 0xDF, 0xF6, 0xDA, 0x1F, 0x83, 0x17, 0xC0, 0xAC, 0x84, 0xC4, 0x50, 0x20, 0xE0, 0xDA, 0xEC, 0xA8, 0xD5, 0x5A, 0xC0, 0xF5, 0xE0, 0x49, 0xCB, 0x66, 0xEE, 0x07, 0xEA, 0x25, 0x22, 0x22, 0x47, 0x7F, 0x03, 0x8D, 0x28, 0xB1, 0x3E, 0x9B, 0x81, 0x86, 0x8D, 0x53, 0xCF, 0x05, 0xE6, 0x02, 0x8D, 0xA7, 0xFD, 0x23, 0x7D, 0x36, 0x09, 0x35, 0xC7, 0x74, 0xF1, 0x78, 0x03, 0x34, 0xAC, 0x19, 0x6B, 0x36, 0x74, 0x3C, 0x50, 0x5F, 0x1E, 0x24, 0x46, 0xD1, 0x43, 0xC5, 0x00, 0x20, 0xAC, 0x66, 0x0F, 0xBF, 0x63, 0xD3, 0x8A, 0x01, 0x89, 0x35, 0x22, 0x1F, 0x69, 0x03, 0xC0, 0x0B, 0x87, 0xDD, 0xF7, 0xC9, 0xD3, 0xEE, 0xB1, 0xCB, 0x00, 0x29, 0xCB, 0xF8, 0x51, 0x33, 0x85, 0x36, 0x47, 0x95, 0x73, 0x01, 0xA9, 0x21, 0x5B, 0x3A, 0xD0, 0x4E, 0x86, 0xED, 0x47, 0x37, 0xC5, 0x01, 0x3A, 0x7A, 0x9F, 0x26, 0xAE, 0x3D, 0x0A, 0xE8, 0x8E, 0x6C, 0x38, 0xB1, 0xE4, 0x37, 0xD0, 0xFD, 0xC7, 0xEF, 0x9F, 0x33, 0x25, 0x00, 0x6D, 0xE9, 0xDA, 0x92, 0x49, 0x51, 0xC2, 0xD0, 0xDA, 0xDF, 0xE1, 0x36, 0xC2, 0x17, 0x3F, 0xB5, 0x26, 0xA5, 0x03, 0x3A, 0xFD, 0x7E, 0xA5, 0x85, 0x89, 0xF5, 0xCE, 0xAC, 0x43, 0x5C, 0x37, 0xFB, 0x09, 0x7B, 0x76, 0x32, 0xF9, 0xF3, 0x74, 0x96, 0x1C, 0x79, 0xFF, 0xE5, 0x61, 0x57, 0x32, 0x3D, 0x8F, 0x32, 0x16, 0xB0, 0xA1, 0x68, 0x7B, 0x0F, 0x72, 0x41, 0xED, 0xBE, 0x54, 0x40, 0x7D, 0x22, 0x30, 0x5D, 0x4A, 0xD6, 0x69, 0x41, 0x37, 0x60, 0x65, 0xFD, 0xBE, 0xCD, 0x53, 0xBA, 0x03, 0xCB, 0xB4, 0xBE, 0xD5, 0x84, 0xE7, 0x02, 0x73, 0xC4, 0x7C, 0x1F, 0x6A, 0x06, 0x84, 0xE8, 0x35, 0x5C, 0xF4, 0x79, 0x01, 0x04, 0x34, 0x35, 0x1F, 0x77, 0x4D, 0x01, 0xFC, 0xA7, 0x35, 0x1B, 0x0E, 0xED, 0x0F, 0xF8, 0xAD, 0x69, 0xDA, 0x39, 0xEC, 0x38, 0xE0, 0xE3, 0xD8, 0xB4, 0x6D, 0x78, 0xA5, 0xC8, 0x41, 0xAD, 0xFD, 0xF4, 0x66, 0x32, 0x20, 0xA1, 0xDA, 0x10, 0x79, 0x6B, 0x15, 0x00, 0x3C, 0x34, 0xBF, 0x38, 0x8A, 0x3C, 0x69, 0x97, 0x3D, 0x87, 0xDC, 0x72, 0xF2, 0xB4, 0x33, 0x19, 0x39, 0xEE, 0x8C, 0x29, 0x39, 0x61, 0xD6, 0xF5, 0x3C, 0x40, 0xEA, 0x02, 0x90, 0x5D, 0xA7, 0xB1, 0xD2, 0x5F, 0x06, 0xB8, 0x70, 0x72, 0xAB, 0xC2, 0xC8, 0x10, 0xE0, 0xAC, 0xFF, 0x5B, 0xE3, 0xE1, 0x33, 0x81, 0x74, 0x43, 0x71, 0xDE, 0x13, 0x80, 0xC4, 0x42, 0x31, 0x36, 0xEA, 0x00, 0x71, 0xE2, 0xDA, 0x32, 0xFD, 0x03, 0xAC, 0x10, 0x33, 0x9E, 0xF9, 0x66, 0x60, 0xE9, 0x11, 0xD1, 0x3F, 0xF7, 0x00, 0x8B, 0x44, 0x7B, 0xAD, 0xC4, 0x6C, 0x5B, 0xB4, 0x12, 0x50, 0x10, 0xFD, 0xA4, 0x64, 0x2C, 0x00, 0x14, 0xDB, 0x17, 0x0D, 0x03, 0xA4, 0xC6, 0x5E, 0x5E, 0x51, 0x74, 0x01, 0x00, 0x76, 0x8F, 0x2D, 0xF2, 0x24, 0xE7, 0x65, 0x3C, 0xDA, 0x4E, 0x06, 0x94, 0x3E, 0x56, 0x23, 0x9D, 0x1F, 0xBE, 0xDA, 0x05, 0xC8, 0xBB, 0x03, 0x2F, 0x2B, 0x7B, 0xEE, 0xB0, 0x3E, 0x07, 0x14, 0x3F, 0x5B, 0xAB, 0x67, 0x71, 0x09, 0x78, 0xD1, 0xFD, 0x89, 0xBB, 0xC9, 0x75, 0xA0, 0x70, 0xDF, 0x4F, 0x4B, 0xA3, 0xE7, 0xC0, 0xE5, 0xB6, 0xE2, 0x79, 0x54, 0x33, 0x70, 0xAC, 0x9B, 0x98, 0xA1, 0xF2, 0x81, 0x34, 0x4F, 0x91, 0x37, 0x7E, 0x00, 0x07, 0x06, 0x8B, 0xEB, 0x47, 0x1F, 0xD8, 0x27, 0x32, 0xA1, 0x8E, 0xB8, 0x0E, 0x3E, 0x4E, 0x04, 0x94, 0x2C, 0xBF, 0x5C, 0xAE, 0x58, 0x05, 0xC8, 0x5C, 0xC8, 0x9B, 0x58, 0xFA, 0x18, 0x00, 0x92, 0xA7, 0x94, 0xB6, 0x27, 0x17, 0x4E, 0xAA, 0x50, 0x25, 0x7D, 0x24, 0x3F, 0x6D, 0x22, 0xED, 0x23, 0xBE, 0xCF, 0x27, 0x69, 0x1F, 0x0B, 0x60, 0x10, 0x08, 0xFC, 0x5A, 0x37, 0x5C, 0x49, 0xB3, 0x11, 0xF8, 0x3D, 0x62, 0x8D, 0xAF, 0x7A, 0x0C, 0xD0, 0xB0, 0xE2, 0xE6, 0x1B, 0x15, 0x79, 0xE0, 0x57, 0x4A, 0x83, 0x8D, 0xF2, 0x10, 0xA0, 0x64, 0x52, 0x73, 0x37, 0xA5, 0x1C, 0xE0, 0x9E, 0xAD, 0x48, 0x18, 0xD7, 0x80, 0x5B, 0x5A, 0x62, 0xFC, 0xA8, 0x06, 0xAE, 0x8B, 0x5C, 0xA6, 0xF8, 0x1B, 0xB8, 0x2C, 0xD6, 0x4E, 0xDB, 0x0D, 0xFD, 0x33, 0xBC, 0x71, 0x0C, 0xA0, 0xFC, 0xEA, 0xFE, 0xD9, 0x9A, 0x28, 0x40, 0x66, 0xD1, 0x91, 0x4F, 0xD5, 0x1F, 0x01, 0x60, 0xE9, 0xC8, 0x5A, 0x65, 0x72, 0x54, 0xC6, 0xAF, 0x8F, 0xA4, 0xC5, 0xA9, 0xC6, 0x33, 0xA4, 0xEC, 0xF8, 0xBF, 0xA1, 0x40, 0xFB, 0x71, 0xC0, 0xDF, 0x39, 0x86, 0x43, 0x65, 0x6C, 0x85, 0xF5, 0x3E, 0x59, 0x92, 0xB9, 0xC2, 0x36, 0x6B, 0x2C, 0x51, 0x05, 0xEA, 0x61, 0x67, 0xE1, 0x28, 0x34, 0x2C, 0x6D, 0x5D, 0x09, 0x6D, 0x6A, 0x27, 0x99, 0x2D, 0x9C, 0x22, 0x66, 0xF6, 0x3B, 0x40, 0xCD, 0x57, 0x31, 0xC7, 0x7D, 0x07, 0x3E, 0x88, 0xBE, 0x29, 0xF5, 0x10, 0x28, 0x11, 0x73, 0x8E, 0xCC, 0xC8, 0x57, 0x94, 0x8E, 0xE6, 0x2B, 0x98, 0x9C, 0x56, 0xAA, 0x8B, 0x07, 0xA0, 0x1A, 0x7B, 0xBC, 0x3E, 0x57, 0x08, 0xDF, 0x41, 0x4D, 0xFE, 0xA4, 0xD1, 0xC6, 0xA6, 0x72, 0x52, 0x42, 0xBB, 0x39, 0x03, 0x90, 0x88, 0x00, 0x8D, 0x7E, 0x4E, 0x00, 0xE9, 0x60, 0xC7, 0x86, 0x84, 0xB1, 0xCB, 0x97, 0xB3, 0xA9, 0x73, 0xD9, 0x5B, 0xBE, 0xEC, 0x7B, 0x65, 0x40, 0xD2, 0x97, 0xF3, 0x8E, 0xC4, 0x48, 0x16, 0x1A, 0x2C, 0xC0, 0x5E, 0x2C, 0x10, 0xAD, 0x9A, 0x2D, 0x35, 0x7B, 0xC3, 0xDB, 0x96, 0xA3, 0x00, 0x10, 0xC8, 0xF9, 0x03, 0xC6, 0x07, 0x58, 0x80, 0x25, 0xE5, 0xD7, 0xB1, 0xDA, 0x09, 0xAC, 0xA3, 0x04, 0xEB, 0x3F, 0x99, 0x9D, 0x77, 0x8F, 0xDD, 0xD6, 0x6A, 0x46, 0x1A, 0x7B, 0x57, 0x8E, 0xFD, 0x50, 0x27, 0x10, 0x4F, 0xC8, 0xBF, 0x3D, 0x02, 0x24, 0xC4, 0x7A, 0xCF, 0xCF, 0x81, 0x42, 0x31, 0x92, 0x36, 0xA8, 0x00, 0xDB, 0xBD, 0xA9, 0x0E, 0x16, 0x4E, 0x30, 0x26, 0x01, 0x0B, 0x7B, 0x16, 0xF8, 0x6F, 0xDB, 0x9D, 0x66, 0x8D, 0x8E, 0xB2, 0x4E, 0x57, 0x59, 0x5F, 0x2D, 0x76, 0x9A, 0x3E, 0x1B, 0x17, 0xC9, 0xEE, 0xFF, 0xCB, 0x9E, 0x7A, 0xC1, 0xDE, 0x95, 0x60, 0x9F, 0xB7, 0x61, 0xDF, 0xD8, 0xB1, 0xE5, 0xF5, 0xF4, 0xD1, 0x6F, 0xDC, 0x3F, 0xF9, 0x47, 0x4F, 0xCC, 0x9B, 0x7D, 0x6C, 0x81, 0x3E, 0xB6, 0x9C, 0x7F, 0x06, 0xF7, 0x64, 0xBD, 0x0F, 0xB3, 0x21, 0xFA, 0xD4, 0x2A, 0xC9, 0xEE, 0xEB, 0x9C, 0xFE, 0x57, 0xFE, 0x98, 0x95, 0x3F, 0x2B, 0x9F, 0x3C, 0xD8, 0x30, 0xDA, 0x8D, 0xBC, 0x1C, 0x33, 0xE4, 0xA6, 0xE8, 0xA3, 0x19, 0x95, 0xFE, 0xC6, 0x19, 0xA2, 0x8F, 0xE4, 0xFD, 0x79, 0xD5, 0x2D, 0x8F, 0xBE, 0xDE, 0x3C, 0xB8, 0xEB, 0x10, 0x21, 0x25, 0xBD, 0x6C, 0x31, 0x6F, 0x5C, 0x03, 0xBF, 0x4E, 0x37, 0x76, 0xC0, 0x63, 0xC0, 0xC4, 0x41, 0xAC, 0x0D, 0x74, 0x01, 0xFA, 0x0B, 0x75, 0xE3, 0x01, 0xF7, 0x4A, 0xCE, 0x41, 0x63, 0x87, 0xB7, 0xAE, 0x7F, 0xB4, 0xFC, 0xAF, 0x76, 0x84, 0x75, 0x9F, 0xB3, 0x91, 0xCC, 0x0C, 0xF7, 0x68, 0x20, 0x9F, 0x78, 0x3A, 0xDE, 0x16, 0x66, 0xD4, 0x19, 0xE9, 0x45, 0x73, 0xDD, 0xCE, 0x8D, 0x6C, 0x3B, 0x2B, 0x56, 0x46, 0x3C, 0x5F, 0xF1, 0x6E, 0x4D, 0xAF, 0x01, 0xE7, 0x58, 0xC7, 0xAB, 0x80, 0xC9, 0x3D, 0x31, 0xD6, 0x2C, 0x01, 0x1C, 0x6C, 0x44, 0x6F, 0x38, 0x0D, 0x0C, 0x4F, 0x14, 0x29, 0x59, 0x15, 0x18, 0x9F, 0xC4, 0xED, 0x58, 0x21, 0x4D, 0x6A, 0x19, 0x9F, 0x1E, 0x4C, 0x8E, 0x74, 0x99, 0xF9, 0x9D, 0x8C, 0xBC, 0xBE, 0x63, 0x26, 0x99, 0xB6, 0x69, 0xA2, 0x36, 0x99, 0x31, 0xC4, 0x6B, 0x9C, 0xC8, 0x83, 0xDF, 0xBF, 0xC6, 0x19, 0xCF, 0xE4, 0x7A, 0x6A, 0x4D, 0xEC, 0x3F, 0x47, 0x73, 0x10, 0x49, 0x87, 0xFF, 0x7A, 0x80, 0x0C, 0x1C, 0xCD, 0x86, 0xCB, 0xB1, 0x83, 0x9C, 0x00, 0xB3, 0x43, 0x62, 0xAC, 0x9B, 0x06, 0xF4, 0x13, 0xF9, 0x47, 0xDF, 0x04, 0x08, 0x78, 0xDB, 0x9A, 0x53, 0xDB, 0x93, 0x12, 0xB5, 0x31, 0x52, 0xE4, 0xD0, 0x25, 0xD1, 0x17, 0xC9, 0x48, 0xBD, 0xF9, 0xDD, 0xC9, 0x0C, 0xD9, 0xF1, 0x9E, 0xE4, 0xD3, 0xB5, 0xC3, 0xCE, 0x8A, 0x6B, 0x34, 0xA1, 0xFE, 0x4A, 0xF7, 0xD7, 0x5C, 0x0B, 0xA8, 0x3E, 0xC8, 0xBE, 0x77, 0x67, 0x4B, 0xB2, 0x48, 0x3A, 0x26, 0x95, 0x03, 0xE4, 0xC4, 0xFE, 0xEC, 0x94, 0xA9, 0xAC, 0x23, 0xE5, 0xC3, 0x67, 0xA2, 0xDF, 0x78, 0x01, 0xCE, 0x61, 0x22, 0x1F, 0x5A, 0x03, 0xE3, 0x9E, 0x72, 0x3B, 0x16, 0xDC, 0x20, 0xA5, 0x8E, 0xC6, 0x4A, 0x91, 0xA1, 0x27, 0x66, 0xC5, 0x90, 0x7B, 0xFD, 0x66, 0x25, 0x90, 0x37, 0x52, 0x42, 0x45, 0xBB, 0xBB, 0xC8, 0xD6, 0x07, 0xF6, 0x7A, 0xDC, 0x2C, 0x49, 0xAF, 0xA5, 0x67, 0x5B, 0xAE, 0x47, 0x02, 0x8F, 0x4D, 0xD8, 0x07, 0x9A, 0x6C, 0x81, 0x35, 0x29, 0x23, 0x5E, 0x27, 0x32, 0x05, 0x9C, 0xC7, 0x26, 0x83, 0xBD, 0xC7, 0x46, 0x4A, 0x01, 0xB2, 0x8E, 0xE2, 0xAA, 0x30, 0x00, 0x86, 0x88, 0x7E, 0xE1, 0xB9, 0x57, 0x38, 0x51, 0xBC, 0x2F, 0xD7, 0x80, 0x70, 0x91, 0xCF, 0x00, 0x35, 0xFB, 0x45, 0xA1, 0xE4, 0x54, 0xEF, 0x29, 0x24, 0x4E, 0x7A, 0x85, 0xBC, 0xFC, 0xDE, 0x0C, 0x54, 0x84, 0x0E, 0xB5, 0x79, 0x42, 0xEB, 0x20, 0x9B, 0x1C, 0x2D, 0x6E, 0xBD, 0x02, 0x5A, 0x1A, 0xCD, 0x4C, 0x2E, 0x3D, 0x05, 0x44, 0xDB, 0x5A, 0xB2, 0x2D, 0xC9, 0x4E, 0x7A, 0x27, 0x46, 0x92, 0x5A, 0xE7, 0xD3, 0x8B, 0xC8, 0x6E, 0x1A, 0xE2, 0x2A, 0x8B, 0xE6, 0xBA, 0xB1, 0xAD, 0xC6, 0xC8, 0xB3, 0x2B, 0xF6, 0xB2, 0xCB, 0xF6, 0x03, 0x6A, 0xE2, 0x39, 0x9E, 0x6B, 0x3C, 0xE0, 0x95, 0x2F, 0xB2, 0x8C, 0x2A, 0x10, 0x2C, 0xCE, 0x8B, 0xC9, 0x65, 0xCB, 0xF1, 0xE3, 0x0A, 0x9E, 0x9D, 0x02, 0xC2, 0x7D, 0xFC, 0xA7, 0xDE, 0xA8, 0x01, 0xCE, 0x0E, 0x1F, 0x68, 0x7B, 0xA0, 0x17, 0xF0, 0xC3, 0xCF, 0xFC, 0xD4, 0xF6, 0x1B, 0x40, 0x8B, 0x91, 0xC3, 0xA8, 0xC4, 0x5A, 0xA0, 0x61, 0xC0, 0xE0, 0xBE, 0x9B, 0xEF, 0x82, 0xD6, 0xA3, 0xA4, 0xD6, 0xE6, 0x92, 0x7D, 0x56, 0xAC, 0xDC, 0x4B, 0xDA, 0xAC, 0x59, 0x9A, 0x45, 0xDA, 0x8B, 0x7E, 0x9B, 0x10, 0x0B, 0x1E, 0x7D, 0xEC, 0xD8, 0x2D, 0xC7, 0xD9, 0x4D, 0x15, 0xEC, 0x7A, 0x0D, 0x40, 0xC1, 0x4E, 0x7C, 0x5E, 0x09, 0xB4, 0xD3, 0xFB, 0x72, 0x74, 0xE6, 0x7A, 0x40, 0xE7, 0xD0, 0xD1, 0x89, 0x6D, 0x57, 0x03, 0xC1, 0x0E, 0xAB, 0x5D, 0x00, 0xB7, 0xB3, 0x81, 0x36, 0xD1, 0xD1, 0x40, 0xE6, 0x18, 0xEF, 0x94, 0xC9, 0x4B, 0x81, 0x6F, 0xF9, 0xBE, 0xEB, 0x7C, 0x35, 0x41, 0x7D, 0xEE, 0x99, 0x4B, 0x2A, 0xD0, 0xBC, 0x77, 0x9C, 0xDF, 0xB0, 0xE5, 0x40, 0x53, 0xB9, 0xCF, 0x93, 0xA1, 0x57, 0x80, 0xE6, 0xFD, 0x1E, 0x97, 0x5C, 0x92, 0x85, 0xEE, 0x9E, 0x97, 0x9C, 0x1E, 0x01, 0x8D, 0xDF, 0xBD, 0x3F, 0x8B, 0x51, 0x38, 0x11, 0x00, 0x84, 0x5D, 0xD9, 0x94, 0x55, 0x60, 0xC3, 0xC8, 0x2A, 0xCB, 0xC4, 0x05, 0x64, 0xEE, 0x82, 0xD8, 0x39, 0x64, 0x92, 0x7C, 0x78, 0x22, 0xB9, 0x28, 0x29, 0xE0, 0x15, 0x60, 0xDA, 0x1E, 0x00, 0x80, 0x58, 0x27, 0x40, 0xFE, 0xF3, 0x72, 0xAB, 0x25, 0xF6, 0x40, 0xE7, 0xD7, 0xCF, 0x74, 0x17, 0x7C, 0x05, 0x74, 0x67, 0x37, 0xF4, 0x9B, 0xAD, 0x00, 0x18, 0xB9, 0x34, 0x3B, 0x8C, 0xAB, 0x05, 0x7A, 0x48, 0x36, 0x75, 0xF2, 0x75, 0x04, 0x8C, 0x7E, 0x35, 0x4C, 0xF3, 0xBE, 0x0C, 0x18, 0x2B, 0x36, 0x84, 0x7B, 0x27, 0x01, 0x06, 0x83, 0x1A, 0xE6, 0x7A, 0x8B, 0xEB, 0xF0, 0xD4, 0x03, 0xAE, 0x9B, 0xA5, 0x0D, 0x76, 0x1F, 0xF9, 0xFE, 0x69, 0xFA, 0x0C, 0xF2, 0xDA, 0xF8, 0x1D, 0xB7, 0xC9, 0x9D, 0x63, 0xE2, 0x3C, 0xC9, 0xE8, 0x5E, 0xCB, 0xCD, 0xC8, 0x30, 0xC3, 0xD5, 0x67, 0x01, 0xE5, 0x11, 0x40, 0x60, 0xB4, 0xB4, 0xF1, 0x04, 0x1D, 0xBA, 0x5A, 0x56, 0x76, 0xF4, 0x99, 0x2C, 0x3C, 0xF8, 0x78, 0x89, 0xD7, 0x34, 0x20, 0xE2, 0x71, 0x63, 0x9C, 0xD7, 0x67, 0x20, 0xE8, 0x49, 0xA3, 0xA3, 0x4B, 0x18, 0xE0, 0xAF, 0x22, 0xCE, 0x8B, 0x1D, 0xE0, 0xEB, 0x25, 0xD6, 0x0D, 0x73, 0x00, 0x1F, 0x3A, 0x2F, 0xF9, 0x80, 0xB7, 0x84, 0xF8, 0xBA, 0xBA, 0xC8, 0x41, 0xB2, 0x5C, 0x3F, 0xCF, 0x88, 0xAC, 0xAE, 0xBF, 0x19, 0x4C, 0xE6, 0x1D, 0x38, 0xD9, 0x44, 0xA6, 0xF6, 0x3F, 0xFA, 0x95, 0x5C, 0x52, 0x71, 0x68, 0x21, 0x39, 0xA1, 0x26, 0xED, 0x22, 0x39, 0xAA, 0xF4, 0xE8, 0x2E, 0x12, 0xD8, 0xDF, 0x4B, 0xD9, 0xBE, 0xDF, 0x6E, 0xE0, 0xD0, 0xAF, 0xF9, 0xAF, 0xFB, 0x0C, 0x07, 0xD2, 0x9D, 0x0A, 0x0C, 0xAC, 0x7C, 0x81, 0x7D, 0x97, 0xEB, 0x96, 0xF7, 0x2E, 0x01, 0xB6, 0x44, 0xB5, 0x4C, 0x35, 0x37, 0x06, 0x56, 0xB4, 0x13, 0xFD, 0x71, 0x06, 0xB0, 0xF0, 0xAA, 0xC8, 0x1D, 0x6A, 0xC0, 0x02, 0x37, 0x91, 0x3B, 0x06, 0x02, 0x73, 0xAF, 0x88, 0xAF, 0x8F, 0x11, 0xBB, 0x40, 0x43, 0x80, 0x36, 0x62, 0x7C, 0x79, 0x5B, 0x02, 0x00, 0x8F, 0x32, 0xEE, 0xF8, 0x02, 0x52, 0x07, 0x33, 0x57, 0xDE, 0x3A, 0x03, 0x00, 0xEB, 0x3B, 0xDF, 0x9A, 0x43, 0x4E, 0x94, 0xB8, 0xF5, 0x9E, 0x1C, 0xBA, 0x27, 0xEF, 0x01, 0x69, 0xAD, 0x5D, 0xA8, 0x46, 0x02, 0x85, 0xA6, 0xC6, 0x92, 0xBA, 0xDE, 0x40, 0xC1, 0xBC, 0x79, 0x4E, 0x1D, 0x3B, 0x01, 0xF9, 0x93, 0x2F, 0x35, 0x75, 0x08, 0x07, 0xAE, 0x0D, 0xAE, 0x92, 0xEC, 0xE0, 0x0D, 0x64, 0xE9, 0x37, 0xEF, 0x52, 0xEF, 0x06, 0xA4, 0xC9, 0x8A, 0x7B, 0x3B, 0x47, 0x60, 0xAF, 0xB8, 0x07, 0x50, 0x56, 0x06, 0x76, 0x8B, 0x7B, 0xA7, 0xB6, 0xD5, 0xC0, 0x8E, 0x3A, 0xF1, 0x75, 0xB1, 0x30, 0xF5, 0xE5, 0x24, 0x20, 0xEF, 0xF0, 0x6E, 0x56, 0x69, 0x36, 0x20, 0xBB, 0xE6, 0x7C, 0xEC, 0xCB, 0xF6, 0x00, 0xB0, 0xF5, 0xF7, 0x4B, 0x63, 0x32, 0x42, 0xE2, 0x95, 0x3A, 0xE9, 0x62, 0x5E, 0x9C, 0x42, 0x1A, 0x5E, 0x2E, 0x31, 0x26, 0x71, 0xF4, 0xA3, 0x0A, 0xA0, 0xF0, 0x02, 0x78, 0x9F, 0xDE, 0xF7, 0xA6, 0x8C, 0x3D, 0x50, 0xF1, 0x79, 0x71, 0x92, 0xE4, 0x37, 0xE1, 0xFA, 0x33, 0x19, 0x12, 0x9E, 0x40, 0xF9, 0x8B, 0x8F, 0x26, 0x00, 0xF0, 0xDC, 0xBF, 0xE1, 0x94, 0x54, 0x57, 0xA0, 0x50, 0xCC, 0x25, 0x32, 0xED, 0x80, 0x2B, 0x62, 0x8E, 0x91, 0x9C, 0x0B, 0x5C, 0x58, 0x24, 0x66, 0xFA, 0x52, 0xE0, 0x8C, 0x18, 0xEB, 0xDB, 0xA8, 0x56, 0xBD, 0xAB, 0xB7, 0x05, 0xE4, 0x6F, 0xE5, 0x8E, 0xFB, 0x1A, 0x00, 0x48, 0xF6, 0x4C, 0x92, 0xAC, 0x48, 0x07, 0x80, 0x99, 0xBB, 0x3F, 0x87, 0x92, 0xAE, 0x2A, 0xDF, 0xFA, 0x91, 0x3A, 0x7D, 0xAA, 0xCA, 0x48, 0xD9, 0x43, 0xBF, 0x1D, 0x49, 0xA0, 0xA1, 0xA9, 0x73, 0x2E, 0xD9, 0xD8, 0xDF, 0x7D, 0x29, 0xD9, 0x64, 0x14, 0x93, 0x03, 0xDE, 0x77, 0xFB, 0x92, 0x6C, 0xD6, 0x29, 0x35, 0x22, 0x9B, 0xAE, 0xD5, 0x17, 0x91, 0x3F, 0x77, 0x88, 0xFA, 0x0B, 0x81, 0x8A, 0x2C, 0x1E, 0x0B, 0x5F, 0xCF, 0x12, 0x4E, 0x03, 0x5E, 0xB4, 0x17, 0x73, 0xDF, 0xA0, 0xA2, 0xB5, 0x4D, 0xE7, 0x01, 0xE5, 0x09, 0x87, 0xCE, 0xFD, 0xF8, 0x00, 0x00, 0xF3, 0xE6, 0xFE, 0xD8, 0x42, 0x0E, 0xD9, 0xF7, 0xCB, 0x89, 0xD4, 0x0C, 0xFF, 0xF5, 0x8A, 0x04, 0x7E, 0x0F, 0x05, 0xB8, 0x4E, 0xFB, 0x7D, 0x6C, 0x9F, 0xA7, 0xAC, 0x7F, 0x34, 0x1B, 0x93, 0xC2, 0xEE, 0xFF, 0xC5, 0x16, 0xA4, 0xB0, 0x1F, 0x0A, 0x01, 0x49, 0x1B, 0x11, 0x77, 0x6C, 0x01, 0xC4, 0xFE, 0x93, 0x7F, 0x58, 0x36, 0xB3, 0xBC, 0x79, 0x02, 0x20, 0x31, 0x7A, 0xC9, 0x95, 0xFA, 0x03, 0x00, 0xE0, 0x36, 0xA2, 0xF1, 0x32, 0xA9, 0x9D, 0xF9, 0xDF, 0xF9, 0x43, 0xA6, 0x0F, 0xAB, 0x79, 0x94, 0xB5, 0x0D, 0x67, 0xFD, 0x1E, 0xB2, 0x91, 0x77, 0xD9, 0xAD, 0x7E, 0xEC, 0xB1, 0xAF, 0xEC, 0xBD, 0x5A, 0xF6, 0x83, 0x9D, 0x20, 0x4A, 0xE4, 0x9F, 0x27, 0x80, 0xC4, 0x5A, 0x91, 0x7F, 0xB6, 0x08, 0xC5, 0xCA, 0x48, 0x4B, 0x3F, 0x60, 0xCD, 0x11, 0xAE, 0xE3, 0xAB, 0xC3, 0x76, 0x37, 0xFE, 0xEF, 0xFA, 0xF0, 0x61, 0xDB, 0x66, 0xB1, 0x46, 0x47, 0x58, 0x27, 0x5F, 0xD6, 0x57, 0x9A, 0x9D, 0x5A, 0xC0, 0xC6, 0x75, 0xFA, 0x8F, 0x1C, 0x74, 0x82, 0xBD, 0xDB, 0xC0, 0x96, 0xD4, 0xB3, 0xE5, 0xB7, 0xD9, 0x4F, 0x2F, 0xE9, 0xA3, 0xA7, 0xEC, 0x3F, 0xF3, 0xBD, 0xAE, 0xD0, 0xC4, 0x02, 0xE8, 0x75, 0x8A, 0x73, 0x4F, 0xBF, 0x2B, 0xEC, 0x30, 0x07, 0x71, 0x36, 0x32, 0xFF, 0x79, 0x3E, 0xB6, 0x34, 0x9C, 0x6C, 0xB7, 0x66, 0xD7, 0xE9, 0x7F, 0xCD, 0x1D, 0xE1, 0x47, 0x56, 0x1F, 0x21, 0x23, 0xB4, 0x23, 0xB4, 0xC9, 0x03, 0x65, 0x6E, 0xD9, 0x64, 0xDE, 0x0B, 0x27, 0x91, 0xFA, 0x64, 0xB6, 0x7E, 0x92, 0x34, 0xA0, 0x79, 0x09, 0xF5, 0x7B, 0x35, 0xF7, 0x91, 0xCD, 0xDB, 0xD5, 0xFD, 0x49, 0x7E, 0x1E, 0xE5, 0xBE, 0x01, 0xDC, 0x8E, 0x3C, 0x40, 0x47, 0xA4, 0x66, 0xDB, 0xB6, 0x80, 0xA1, 0x9D, 0xB8, 0xC6, 0x9B, 0x01, 0xA7, 0x67, 0xDC, 0x0E, 0x57, 0xBA, 0xBF, 0xD7, 0x02, 0x42, 0xF6, 0x0A, 0x01, 0x2C, 0xD2, 0x23, 0xD5, 0x3E, 0x9F, 0x58, 0xF9, 0xAF, 0xED, 0x98, 0x2B, 0xB1, 0x67, 0x1F, 0x99, 0x2A, 0xE7, 0x53, 0x41, 0xA6, 0x07, 0x0F, 0xBF, 0x40, 0x3E, 0xFE, 0xD3, 0x2B, 0x99, 0xFC, 0x39, 0x5D, 0x77, 0x24, 0xD7, 0x55, 0x9C, 0xCC, 0x4A, 0x59, 0xB3, 0x74, 0x8C, 0x6C, 0x06, 0xC8, 0x51, 0xC7, 0x59, 0xC7, 0x33, 0x80, 0x9E, 0xAE, 0x58, 0xBF, 0x58, 0x0A, 0x58, 0x2F, 0x13, 0x63, 0xCD, 0x73, 0xA0, 0x5F, 0xB1, 0xC8, 0x67, 0xED, 0x81, 0x11, 0x0D, 0xAD, 0xF9, 0x23, 0x8B, 0x54, 0xEC, 0xB3, 0xE7, 0x03, 0x39, 0x58, 0xE5, 0xE0, 0x5E, 0x72, 0xDA, 0xEB, 0x69, 0xF7, 0xC8, 0xE4, 0x61, 0xFE, 0xE9, 0xE4, 0xF1, 0xAC, 0xA1, 0x22, 0x4F, 0xCA, 0x7A, 0x7C, 0x8A, 0x36, 0x30, 0xE2, 0x5A, 0x1D, 0x52, 0xD8, 0x7F, 0x8E, 0xDA, 0x7D, 0x24, 0x1D, 0xEE, 0x92, 0x00, 0xE9, 0xD6, 0x86, 0x1D, 0xFD, 0x92, 0xED, 0xBB, 0x1D, 0xD0, 0xF3, 0x11, 0xEF, 0x8B, 0x36, 0xD0, 0xDF, 0x91, 0x73, 0xD0, 0x70, 0xB1, 0x4E, 0xA7, 0xD1, 0x1E, 0x18, 0x7B, 0xBD, 0xB5, 0x3D, 0x2E, 0x64, 0xC0, 0xDC, 0x30, 0x53, 0x32, 0xF8, 0xD0, 0xF4, 0x70, 0xF2, 0xB8, 0x9A, 0xF7, 0x1A, 0xF2, 0x99, 0x8C, 0xBD, 0x12, 0x59, 0x1F, 0xDC, 0x75, 0x1B, 0x49, 0xC7, 0xDB, 0x32, 0xF6, 0x65, 0x32, 0xFB, 0xCC, 0x89, 0xA4, 0xC3, 0xAF, 0x10, 0x20, 0x7D, 0xFB, 0xB2, 0x63, 0xEF, 0xB1, 0x7D, 0xE3, 0x00, 0x63, 0x91, 0xA7, 0xAC, 0xEE, 0x02, 0x76, 0xF6, 0xA2, 0x3D, 0x6F, 0x80, 0x91, 0x62, 0xDC, 0x55, 0x6D, 0x0F, 0x04, 0xD3, 0xF9, 0x47, 0x9B, 0xB8, 0xD9, 0xA5, 0x64, 0xC8, 0xC9, 0x71, 0x9F, 0xC8, 0xDD, 0x6B, 0xFC, 0x8E, 0x90, 0x39, 0xB3, 0x3C, 0x45, 0xBF, 0x52, 0xF2, 0xA9, 0xB7, 0x31, 0xCE, 0xA9, 0x56, 0x06, 0x5D, 0xE9, 0x5F, 0x8A, 0x6F, 0x90, 0x18, 0x70, 0xEB, 0x3A, 0x09, 0xE4, 0x1A, 0xB1, 0x57, 0xDF, 0x93, 0xD2, 0xA2, 0x1F, 0x4D, 0xDE, 0xCD, 0x75, 0xC3, 0x2C, 0xD8, 0xD0, 0x9E, 0x6C, 0xF8, 0x76, 0xD6, 0xC9, 0x1B, 0xB0, 0x11, 0xEF, 0x87, 0xDD, 0x53, 0xBA, 0xAB, 0x15, 0x6B, 0x39, 0x41, 0x80, 0x3F, 0xAD, 0xB7, 0xC1, 0xB2, 0x63, 0xC8, 0x50, 0x32, 0x44, 0xC7, 0xD7, 0x83, 0x3C, 0xFE, 0xC1, 0x45, 0xB7, 0xB4, 0x0E, 0x28, 0x79, 0xD2, 0x6D, 0x41, 0xAE, 0x3E, 0xD0, 0x22, 0xA9, 0x7E, 0xED, 0x72, 0x1D, 0xD0, 0x7C, 0xA4, 0x73, 0x73, 0x96, 0x1A, 0x28, 0x1F, 0x9F, 0x3F, 0x6C, 0x4A, 0x6A, 0x9E, 0x49, 0xB5, 0x22, 0xB5, 0x9C, 0xF7, 0x6E, 0x20, 0x75, 0x82, 0xC4, 0x2A, 0x70, 0x2A, 0xD7, 0x9B, 0xE7, 0xCA, 0x46, 0xDE, 0x60, 0xE7, 0xC8, 0xB1, 0xB3, 0xF7, 0xB1, 0xFD, 0xCC, 0x80, 0xBE, 0xFD, 0x79, 0x1D, 0x71, 0xE8, 0xCF, 0xAA, 0x20, 0xC0, 0x34, 0xD6, 0xBD, 0xF4, 0x56, 0x09, 0x10, 0x36, 0xA1, 0xCF, 0xCB, 0xAC, 0xCD, 0x40, 0x9A, 0xBA, 0x41, 0xCE, 0x5E, 0x77, 0xA0, 0x4C, 0x57, 0xA3, 0x78, 0x55, 0x37, 0xA0, 0xF9, 0x83, 0x56, 0xF1, 0xBA, 0x60, 0x61, 0x9C, 0xF5, 0xB1, 0x18, 0x2B, 0xD0, 0xC8, 0x67, 0x15, 0xAD, 0x4B, 0xF6, 0x7A, 0x3D, 0xAF, 0x8A, 0xB4, 0xEE, 0x37, 0x33, 0x8F, 0xB4, 0x29, 0x12, 0xF9, 0x66, 0x17, 0x38, 0xEF, 0x54, 0xB2, 0x6B, 0x65, 0xD8, 0xD8, 0x4C, 0x76, 0xD1, 0x36, 0xB2, 0xF1, 0xD2, 0xBC, 0xC3, 0xE4, 0x83, 0x00, 0xF7, 0xBB, 0x40, 0x87, 0xCA, 0x8D, 0x0A, 0x80, 0x44, 0xC8, 0xF0, 0xD8, 0xF9, 0x7F, 0x00, 0xD7, 0xA6, 0xBE, 0xCD, 0x53, 0x4B, 0x80, 0x5D, 0x3F, 0x1D, 0x97, 0x05, 0x6B, 0x03, 0x2F, 0x57, 0x3A, 0xAF, 0x1F, 0x55, 0x06, 0x34, 0x9D, 0x77, 0x6D, 0x70, 0xA2, 0x1D, 0xA9, 0x1D, 0x87, 0xFF, 0xA4, 0x1D, 0x2B, 0xCD, 0x1B, 0xDD, 0xDF, 0x5B, 0x0F, 0xA5, 0xD7, 0x1C, 0xD6, 0x62, 0x35, 0x5A, 0xF8, 0x6E, 0x84, 0x99, 0xD9, 0x1B, 0xA0, 0xE5, 0xFA, 0x88, 0xB0, 0x7F, 0x79, 0x3E, 0x37, 0x9D, 0xDD, 0xD7, 0x83, 0x4D, 0x7C, 0x4C, 0x96, 0x28, 0xC7, 0xFE, 0x20, 0xB3, 0x3D, 0xA7, 0xAA, 0x91, 0x2B, 0xA5, 0x3C, 0x13, 0xC8, 0x49, 0x31, 0x83, 0x4B, 0x81, 0x2E, 0xE3, 0x00, 0x00, 0x98, 0x5D, 0x0D, 0xC8, 0x48, 0x4F, 0x7E, 0x17, 0xB1, 0x10, 0xD0, 0x98, 0x74, 0xA9, 0x24, 0x34, 0x1C, 0xD0, 0xF6, 0xA9, 0x76, 0x1D, 0x3F, 0x0D, 0xE8, 0xEE, 0xDA, 0xD2, 0xD1, 0x7D, 0x89, 0x44, 0x1A, 0xAD, 0x69, 0xF5, 0x73, 0x00, 0xCC, 0x8C, 0x45, 0xDF, 0x33, 0x15, 0x76, 0x10, 0xCE, 0x00, 0x8C, 0x8F, 0x8A, 0xAF, 0x8B, 0xEB, 0x33, 0xB3, 0xB5, 0x1D, 0xA7, 0xEE, 0x80, 0xED, 0x43, 0xBE, 0x08, 0xDA, 0x67, 0x4F, 0x66, 0xB5, 0x5B, 0x5B, 0x2E, 0xA8, 0x58, 0x6D, 0x3D, 0x77, 0x82, 0x10, 0x11, 0x8A, 0xD3, 0xA3, 0x48, 0xFF, 0xBD, 0x91, 0x2F, 0x48, 0xC0, 0xFD, 0x90, 0x44, 0x9F, 0x91, 0x29, 0x40, 0xF0, 0xD4, 0x88, 0x67, 0xCE, 0x53, 0x81, 0xD0, 0x84, 0x73, 0x9D, 0xEC, 0xA7, 0x01, 0x21, 0x3B, 0xAA, 0xF6, 0x3B, 0xEA, 0x01, 0x81, 0xBD, 0x1B, 0xDD, 0xAC, 0x43, 0x00, 0x6F, 0x7A, 0x1E, 0x14, 0x09, 0xB8, 0x8B, 0x6B, 0x59, 0x7F, 0x83, 0x50, 0x64, 0xEF, 0xEE, 0x57, 0x81, 0x91, 0x62, 0x06, 0x31, 0x94, 0xFD, 0xE7, 0xEF, 0x18, 0xE5, 0x87, 0x91, 0x1F, 0x0A, 0xAE, 0x46, 0x92, 0x97, 0x1E, 0x1E, 0xED, 0x00, 0x48, 0x18, 0x26, 0xE8, 0x24, 0xD7, 0x09, 0x3B, 0xCF, 0x31, 0x4C, 0xCE, 0x01, 0x80, 0x51, 0x51, 0xBB, 0xBD, 0x49, 0x67, 0xB9, 0xAD, 0x9B, 0x49, 0x60, 0xDD, 0xD1, 0x36, 0x51, 0x66, 0xBB, 0x81, 0xF8, 0xAE, 0xC1, 0x7E, 0x5D, 0xD3, 0x81, 0x1D, 0x7E, 0xA7, 0x2D, 0xBB, 0x9C, 0x06, 0xB6, 0xDE, 0xAA, 0xD0, 0xEF, 0xE2, 0x07, 0xAC, 0xDE, 0xD0, 0xF0, 0x48, 0xCB, 0x1E, 0x58, 0x3C, 0x91, 0xF7, 0xC5, 0xCC, 0x14, 0xF3, 0xAC, 0xD2, 0x0C, 0xA1, 0xA4, 0xC8, 0x21, 0x5B, 0x80, 0x69, 0xA2, 0x8F, 0xB7, 0x13, 0x77, 0xF7, 0x4F, 0x4E, 0x00, 0x40, 0xE3, 0xCF, 0xD7, 0xD7, 0xC9, 0xC2, 0x98, 0xBC, 0x3F, 0x80, 0xE4, 0x88, 0xE4, 0x92, 0xCB, 0x03, 0x01, 0x6C, 0x8E, 0xEE, 0x7B, 0x65, 0xBF, 0x10, 0xBE, 0xDF, 0x2E, 0x8F, 0x24, 0x7B, 0x7F, 0x3C, 0xEF, 0x4A, 0x6A, 0xCD, 0xCD, 0x0E, 0x20, 0x81, 0xB3, 0x36, 0xBA, 0x2F, 0xE5, 0x7A, 0x00, 0x67, 0x7A, 0x86, 0x2C, 0x90, 0x52, 0x00, 0x4E, 0x6F, 0x4A, 0x95, 0x00, 0x80, 0xCC, 0xA2, 0x12, 0x6D, 0xF2, 0xC8, 0xF8, 0x66, 0x25, 0xA9, 0x5A, 0x60, 0x7F, 0xA9, 0xC8, 0x19, 0x53, 0x80, 0xAD, 0x34, 0xC6, 0x15, 0x01, 0x9B, 0xC5, 0xB5, 0x2D, 0x91, 0x0F, 0x6C, 0xD8, 0x26, 0xAE, 0x5B, 0x29, 0xB1, 0x0A, 0xA0, 0x05, 0x00, 0xCF, 0xB7, 0xBD, 0x4E, 0x02, 0x64, 0xC2, 0x8F, 0xEF, 0x7A, 0x68, 0x01, 0x00, 0x31, 0xFD, 0x1E, 0x24, 0x93, 0x63, 0x94, 0x1F, 0x1E, 0x22, 0x7B, 0x2F, 0x7E, 0x34, 0x96, 0xEC, 0xD0, 0xAB, 0x68, 0x1A, 0x09, 0x3C, 0x19, 0x89, 0x58, 0xF2, 0xE1, 0x77, 0xC7, 0x29, 0x64, 0xD1, 0xDA, 0x59, 0x29, 0x20, 0xBF, 0xA7, 0xC6, 0x93, 0xB7, 0xD5, 0xAF, 0xC9, 0x90, 0x77, 0x0C, 0xAA, 0x6C, 0xC9, 0x1B, 0xBC, 0xB2, 0x80, 0xAC, 0xFE, 0x6C, 0x66, 0x3D, 0x7B, 0xBC, 0x3F, 0xF9, 0x61, 0xFA, 0x4F, 0x19, 0xA0, 0x8D, 0xDD, 0x85, 0x8D, 0xE5, 0xEF, 0x00, 0x60, 0x7D, 0x75, 0x89, 0x3E, 0x39, 0xFE, 0xF5, 0x9B, 0x49, 0xA4, 0xF5, 0xCC, 0xF2, 0x47, 0xA4, 0x8A, 0xC5, 0x57, 0x4B, 0x12, 0xF8, 0x12, 0xC4, 0xD6, 0x2C, 0xEC, 0x3A, 0x91, 0xFC, 0x3E, 0xC5, 0x6D, 0x14, 0x59, 0x6D, 0xB6, 0xE8, 0x06, 0x59, 0xDB, 0x33, 0xAD, 0x33, 0x59, 0x13, 0xFE, 0xE0, 0x0C, 0x59, 0xDD, 0x5C, 0x5D, 0x4A, 0x7E, 0x7C, 0xCF, 0x75, 0x5F, 0xC5, 0xB3, 0x4F, 0x35, 0xD8, 0xA2, 0x73, 0x64, 0x81, 0x43, 0xFD, 0x44, 0x40, 0xFA, 0x7E, 0xE2, 0xA8, 0x2F, 0x37, 0x01, 0x20, 0xBC, 0xDF, 0x97, 0x36, 0xA4, 0x83, 0xEB, 0xB7, 0x58, 0xB2, 0x7D, 0xEA, 0x0F, 0x59, 0x12, 0xA8, 0xD3, 0x64, 0xC5, 0x2C, 0xE1, 0xC2, 0xDA, 0xE4, 0xB1, 0x81, 0x59, 0x6C, 0xEC, 0x0D, 0x36, 0x45, 0x82, 0xCD, 0x1F, 0xCD, 0xBE, 0xEF, 0x04, 0x48, 0x88, 0x55, 0xA9, 0xA6, 0x40, 0x00, 0x87, 0xFE, 0xEF, 0x39, 0xE8, 0xA0, 0x54, 0xDD, 0x21, 0x00, 0x98, 0xD5, 0xBE, 0xF6, 0x26, 0x39, 0x20, 0xE9, 0x77, 0x0A, 0xA9, 0x31, 0xAC, 0xE5, 0xC1, 0x7F, 0xE6, 0x10, 0xB9, 0x9D, 0x6C, 0x57, 0x57, 0xD6, 0x51, 0x85, 0x0D, 0x28, 0x60, 0xE7, 0x5E, 0x65, 0xB7, 0x38, 0xB1, 0x69, 0x7F, 0xD9, 0x3B, 0xEE, 0x6C, 0xF9, 0x69, 0x81, 0x98, 0x11, 0xEA, 0x1C, 0x00, 0x89, 0x2F, 0x22, 0xFF, 0xB4, 0x00, 0x92, 0xDC, 0x0E, 0x44, 0x97, 0x50, 0x2E, 0x04, 0x86, 0xED, 0x69, 0xE9, 0x4F, 0x76, 0x89, 0xFC, 0xEF, 0x1C, 0x24, 0x95, 0xCF, 0xAA, 0x26, 0xB1, 0xE6, 0xD3, 0x58, 0x57, 0x5B, 0xD6, 0xBF, 0x82, 0x9D, 0x1E, 0xC2, 0xC6, 0x0D, 0xF9, 0xF7, 0x1C, 0x94, 0xE9, 0xCB, 0xDE, 0xA9, 0x65, 0xDF, 0x95, 0xB1, 0x15, 0x3F, 0xD9, 0x2F, 0xD5, 0xF4, 0x71, 0x68, 0x1F, 0x80, 0xB4, 0xD8, 0xC4, 0x39, 0x48, 0x17, 0x80, 0xF9, 0x7E, 0xD6, 0xE6, 0x2C, 0xDB, 0x9F, 0x5B, 0x85, 0xA0, 0x9F, 0x6C, 0xC4, 0x42, 0x52, 0xF2, 0xE4, 0x72, 0x90, 0xFD, 0xB1, 0x24, 0x93, 0x0C, 0x46, 0x30, 0xC8, 0xCD, 0xF9, 0x1E, 0xB7, 0xC8, 0x03, 0x93, 0x06, 0x85, 0x93, 0x79, 0x15, 0xBD, 0x52, 0x84, 0xDF, 0x3F, 0x40, 0xF7, 0xBB, 0x10, 0x0D, 0x55, 0x2A, 0x06, 0xAD, 0x39, 0xE4, 0x03, 0xDB, 0x46, 0xCC, 0xDF, 0x83, 0x5F, 0x71, 0x3B, 0xAC, 0x0D, 0x80, 0xCE, 0x4B, 0xC4, 0x4F, 0x3B, 0x0E, 0xD0, 0x13, 0xF9, 0x42, 0xA7, 0x3F, 0xD0, 0x5B, 0x89, 0xDB, 0xE1, 0x4C, 0x7F, 0xCF, 0x79, 0x14, 0xE0, 0x32, 0x8D, 0xDB, 0x31, 0x69, 0x23, 0x1B, 0xEB, 0x4A, 0xF6, 0x5F, 0xB0, 0xC2, 0x88, 0x0C, 0x51, 0x0D, 0xFC, 0x4B, 0xEE, 0x34, 0xF2, 0xD0, 0x26, 0x0F, 0x8E, 0x73, 0x59, 0x43, 0x3E, 0x9E, 0x6C, 0x34, 0x85, 0xAC, 0xBD, 0xDB, 0xC9, 0x86, 0xA4, 0x67, 0x73, 0xE4, 0xBF, 0x1F, 0xAE, 0xD1, 0x00, 0x39, 0x22, 0x8E, 0x35, 0x9B, 0x02, 0xE8, 0x45, 0x88, 0x5E, 0x30, 0x06, 0xB0, 0xB4, 0xE2, 0x76, 0xD8, 0xB7, 0x15, 0xF3, 0xEC, 0x72, 0xA0, 0x7F, 0x1C, 0xD7, 0x0F, 0xB5, 0x63, 0xE3, 0xAE, 0x91, 0x4E, 0x13, 0xE6, 0x96, 0x93, 0x81, 0x99, 0xC1, 0x1F, 0xC8, 0xE4, 0x03, 0x43, 0x56, 0x91, 0x67, 0x6B, 0x6C, 0xDB, 0x09, 0x47, 0x54, 0x34, 0x76, 0xB3, 0xE4, 0x5A, 0xCA, 0x05, 0x2D, 0x6B, 0x49, 0xA0, 0x66, 0x3F, 0xFB, 0x79, 0x00, 0x49, 0x87, 0x8B, 0x3A, 0x40, 0x0E, 0xD6, 0x66, 0x1D, 0x3E, 0x00, 0x1D, 0x24, 0xC5, 0x9C, 0x68, 0x0B, 0x68, 0x7B, 0x8B, 0xF6, 0x54, 0x01, 0x7D, 0x3A, 0x8B, 0xB5, 0x14, 0x00, 0xCE, 0x19, 0xAD, 0xED, 0x88, 0x61, 0x27, 0x39, 0x90, 0xC3, 0xF3, 0x43, 0xC4, 0xDA, 0xAC, 0xC2, 0x90, 0xA8, 0xA1, 0x2E, 0x74, 0x4D, 0xE2, 0x40, 0x3B, 0xA7, 0xDD, 0xE4, 0x93, 0x2F, 0x7A, 0x9B, 0xC9, 0x3F, 0xBD, 0xD5, 0xF4, 0x85, 0x9C, 0x7B, 0xBE, 0xB1, 0x8F, 0xE4, 0xD9, 0x7B, 0x8B, 0x49, 0x3A, 0xDC, 0x2C, 0x00, 0x72, 0xF8, 0x60, 0xD6, 0xD3, 0x81, 0x75, 0xA4, 0xF5, 0x05, 0x91, 0x5F, 0x2D, 0x7C, 0x81, 0x1E, 0x3F, 0xC4, 0x3A, 0x99, 0x0F, 0xD0, 0xF7, 0x2E, 0x3F, 0x2F, 0x1C, 0x94, 0xCA, 0xED, 0x08, 0x8B, 0x22, 0xC7, 0xAC, 0x73, 0x73, 0x26, 0xE3, 0x87, 0x38, 0x2C, 0x25, 0xAF, 0xF6, 0xD7, 0xAB, 0x25, 0xAB, 0x25, 0xDA, 0xEA, 0x95, 0xF5, 0x06, 0x5A, 0xBE, 0x49, 0xC9, 0x3F, 0x9C, 0x02, 0xCE, 0x3D, 0xB3, 0xD9, 0xF3, 0x51, 0xA4, 0xD4, 0x87, 0xAC, 0x9D, 0xA4, 0xDC, 0x40, 0x71, 0xD5, 0xB5, 0xB6, 0xC3, 0xE7, 0x2F, 0x3B, 0x5A, 0x93, 0x0D, 0xFC, 0xCC, 0xF6, 0x1B, 0x0F, 0xE8, 0x89, 0x7E, 0xD1, 0xE3, 0x0C, 0xD0, 0xAB, 0x4C, 0xF4, 0x93, 0xCD, 0x80, 0xB3, 0x68, 0x1F, 0x60, 0xBA, 0x7B, 0xF8, 0x5A, 0x72, 0x6A, 0x5E, 0x4F, 0x1F, 0xCA, 0x23, 0x69, 0x66, 0x5D, 0x76, 0x3D, 0xDE, 0x09, 0xDC, 0xDD, 0x22, 0x79, 0xE4, 0xF2, 0x2D, 0xE0, 0xC7, 0x0F, 0x20, 0xBB, 0x0C, 0x68, 0x36, 0x91, 0xCD, 0x48, 0xDF, 0x07, 0x5A, 0xA7, 0x93, 0x4C, 0x32, 0x27, 0x3B, 0x86, 0x6E, 0x2B, 0x25, 0xB5, 0x1A, 0x36, 0x36, 0x93, 0xDA, 0x9D, 0xE9, 0xEF, 0xAD, 0x73, 0xBD, 0xA9, 0xCD, 0xEC, 0xE4, 0x64, 0x76, 0xC2, 0x1F, 0x36, 0xA8, 0x81, 0xED, 0x9B, 0x0E, 0xE8, 0x89, 0x7E, 0x69, 0x7A, 0x0B, 0xB0, 0x8A, 0x78, 0xBC, 0x00, 0xB0, 0x72, 0xE9, 0xDA, 0x92, 0xF6, 0x08, 0x18, 0x37, 0xB7, 0xCD, 0x9E, 0xFD, 0x07, 0x81, 0xAD, 0xEB, 0xA4, 0xF7, 0x25, 0x8C, 0x00, 0x0A, 0xB2, 0x81, 0x38, 0x4D, 0xA0, 0xFE, 0x22, 0xB0, 0x98, 0x72, 0xC6, 0x05, 0x2D, 0xE5, 0xF9, 0x1E, 0xA0, 0x2B, 0x5E, 0x6F, 0xE2, 0x15, 0xB2, 0xE7, 0xC1, 0xE0, 0x3F, 0xA4, 0x55, 0x9F, 0xA0, 0x4E, 0x20, 0x45, 0x3F, 0x5C, 0xF3, 0x9C, 0xEB, 0xAC, 0xCA, 0x67, 0x97, 0x7C, 0x64, 0xE7, 0x9A, 0xB0, 0x13, 0x27, 0x93, 0x6F, 0xD2, 0xDD, 0xBF, 0x90, 0x67, 0x22, 0xAC, 0x14, 0x01, 0x99, 0xE6, 0xB9, 0xF9, 0x40, 0xBB, 0xBF, 0xFA, 0x06, 0x13, 0x55, 0x80, 0x01, 0x99, 0xDD, 0xC2, 0xC6, 0x0D, 0x02, 0x62, 0x0A, 0x0C, 0xAE, 0x8C, 0x9E, 0x08, 0x5C, 0x93, 0x35, 0x0E, 0xF7, 0x54, 0x07, 0xAA, 0xDD, 0x2D, 0x76, 0x3A, 0xE9, 0x03, 0x7F, 0x37, 0x5A, 0x7D, 0xE2, 0xBF, 0x60, 0x37, 0xC0, 0xAE, 0xCB, 0x47, 0xD2, 0x65, 0x56, 0x97, 0x7D, 0x20, 0xCF, 0x74, 0xDE, 0x43, 0x0E, 0x14, 0xA3, 0xD6, 0xDE, 0xE3, 0xE0, 0x51, 0x47, 0x8A, 0xDD, 0xD9, 0x93, 0xAC, 0xBD, 0xB0, 0x2E, 0x95, 0x2C, 0x9A, 0x36, 0x77, 0x18, 0x99, 0x7E, 0x3A, 0x20, 0x9E, 0x8C, 0x1C, 0x34, 0x40, 0x89, 0x1C, 0xBD, 0xDB, 0xE1, 0x09, 0x20, 0x67, 0x0A, 0x00, 0x40, 0xD0, 0x55, 0x40, 0xEE, 0xA3, 0x9F, 0xDC, 0x28, 0xA1, 0xDA, 0xC8, 0xC3, 0xD1, 0x23, 0xE6, 0x02, 0x9D, 0x8F, 0xBE, 0xDC, 0xE9, 0x7A, 0x10, 0xE8, 0x66, 0x5D, 0x5F, 0xE6, 0xD8, 0x13, 0x30, 0xA8, 0x10, 0x7D, 0xAD, 0x01, 0x30, 0xBA, 0x21, 0xAE, 0xC9, 0x6D, 0x40, 0x77, 0x31, 0x36, 0x58, 0xFA, 0x01, 0xFA, 0xE7, 0x85, 0x62, 0x7D, 0x31, 0xA3, 0x06, 0x9C, 0x7F, 0x82, 0xC9, 0xBA, 0xB8, 0xA3, 0xDD, 0xC8, 0x07, 0xC9, 0x3B, 0xF6, 0x92, 0xE9, 0x6A, 0xCB, 0xAE, 0x03, 0x92, 0x7E, 0x51, 0x11, 0x13, 0xF3, 0x01, 0x20, 0xB0, 0x31, 0x68, 0x3D, 0x39, 0xA4, 0x65, 0xDC, 0x43, 0x12, 0x70, 0xBD, 0x03, 0x38, 0x4C, 0x06, 0x46, 0x2D, 0xF3, 0xB7, 0x32, 0xAD, 0x07, 0xFC, 0x92, 0x53, 0x96, 0x1B, 0x3C, 0x02, 0x02, 0xA7, 0x16, 0x9F, 0x37, 0x38, 0x0C, 0xF8, 0x5E, 0xF9, 0xF3, 0x50, 0x7F, 0x3D, 0x30, 0x52, 0x4F, 0xAC, 0x17, 0xCE, 0x01, 0x06, 0x09, 0xDB, 0xDD, 0x03, 0xFA, 0x8B, 0xBE, 0xAD, 0xBE, 0x43, 0x28, 0x27, 0x72, 0xC9, 0xD2, 0x7F, 0x72, 0x50, 0x81, 0x22, 0x59, 0xDC, 0xFD, 0x7C, 0x2F, 0xF2, 0x94, 0xFE, 0x01, 0x39, 0x40, 0xCA, 0x62, 0xE5, 0xD2, 0x6D, 0x34, 0x1B, 0x84, 0x4D, 0xAC, 0xDA, 0xFE, 0x14, 0x00, 0x5C, 0x3A, 0xAC, 0xAF, 0x25, 0x4D, 0xE4, 0x96, 0x4C, 0x22, 0x81, 0xA8, 0x9F, 0x92, 0xC7, 0x35, 0xD6, 0x02, 0x2B, 0x06, 0xBA, 0x65, 0xCA, 0xFC, 0x05, 0x56, 0xDE, 0x4E, 0x6A, 0x2F, 0x73, 0x13, 0x58, 0x31, 0xAE, 0xE8, 0xA7, 0xF4, 0x24, 0x60, 0xE9, 0xF3, 0xBA, 0x3F, 0x72, 0xF6, 0xC0, 0x7C, 0x79, 0xF1, 0xC4, 0xE2, 0x32, 0x30, 0xE9, 0x12, 0x5F, 0x6B, 0xE3, 0xEF, 0x0B, 0x25, 0x80, 0x20, 0x91, 0x3F, 0x24, 0x07, 0x8B, 0x1C, 0xB4, 0x13, 0x00, 0x6A, 0x14, 0x9E, 0x27, 0x90, 0xD7, 0xFA, 0x5C, 0x6F, 0x4B, 0x6E, 0xCD, 0x3A, 0x59, 0x29, 0x50, 0x9F, 0xEA, 0x9B, 0x95, 0x29, 0xC4, 0xE0, 0x73, 0xA7, 0x4D, 0x48, 0xDD, 0xC4, 0x63, 0x5F, 0x48, 0xC9, 0x1D, 0x87, 0x32, 0x49, 0xE0, 0xE0, 0x60, 0xC3, 0x1D, 0x20, 0x2F, 0xF9, 0x4F, 0x22, 0x93, 0x1E, 0xAC, 0x70, 0x21, 0x77, 0x47, 0x9F, 0x91, 0x22, 0x93, 0xCC, 0x2A, 0x73, 0xC9, 0x44, 0x3F, 0xAE, 0xBF, 0xC6, 0x8E, 0x5D, 0xFA, 0x8B, 0x5D, 0x1C, 0x4D, 0xFE, 0x4A, 0xAF, 0xB0, 0x04, 0x80, 0xFB, 0xA3, 0x9E, 0xBF, 0x01, 0x24, 0xFB, 0x24, 0x9F, 0x29, 0x1C, 0x08, 0x00, 0x73, 0xDC, 0xF2, 0x9D, 0xC9, 0x11, 0x77, 0x0B, 0xA6, 0x90, 0xDD, 0x6B, 0x0A, 0xAB, 0x49, 0xE0, 0xC6, 0x49, 0xF6, 0xE6, 0x54, 0xC5, 0x42, 0x32, 0x27, 0xCD, 0x29, 0x83, 0xBC, 0xFE, 0x62, 0x62, 0x2C, 0x79, 0x65, 0xD9, 0xDA, 0x26, 0xF2, 0xE2, 0xF2, 0x93, 0xED, 0x41, 0xAE, 0x7E, 0x62, 0x47, 0x9E, 0x9B, 0xDC, 0x9A, 0x7B, 0xD2, 0xD8, 0xD4, 0xAE, 0xEC, 0xDE, 0x95, 0xE4, 0xCB, 0xB4, 0xCA, 0x22, 0x40, 0xEA, 0x5A, 0xC6, 0xD7, 0xD7, 0x13, 0x41, 0xAD, 0x2B, 0x7F, 0xAA, 0x48, 0x7A, 0x87, 0x3C, 0x3B, 0x4D, 0x9A, 0x0C, 0x2C, 0x6E, 0x4F, 0x4A, 0xDD, 0x79, 0x33, 0x8B, 0x04, 0x4A, 0x6B, 0xA4, 0x64, 0xC9, 0xB2, 0x1A, 0x23, 0x17, 0xF2, 0x7D, 0xA0, 0x9B, 0x2D, 0x59, 0x1E, 0x39, 0xAF, 0x23, 0xC8, 0xC2, 0xBD, 0xE7, 0xC8, 0x77, 0x03, 0xAF, 0x1A, 0x81, 0xEC, 0x55, 0x6C, 0x40, 0x16, 0x27, 0x72, 0xDD, 0x27, 0xED, 0xD8, 0xFC, 0x70, 0x36, 0xE7, 0x0E, 0x79, 0x65, 0x6F, 0xED, 0x24, 0x00, 0x58, 0x5B, 0x5C, 0x1E, 0x4A, 0x06, 0x74, 0x2E, 0xB5, 0x25, 0x2D, 0x03, 0x2A, 0x7E, 0x90, 0x0A, 0xCB, 0xBF, 0xFD, 0x25, 0x81, 0xFA, 0x54, 0x09, 0x03, 0x52, 0xDC, 0x95, 0xB5, 0xB0, 0x4E, 0x39, 0x6C, 0xE8, 0x6B, 0x36, 0xF6, 0x3D, 0x9B, 0xFA, 0x80, 0x3D, 0x5B, 0xC7, 0xBE, 0x05, 0xFB, 0x47, 0x0E, 0x90, 0xC8, 0xE6, 0xBC, 0x01, 0x34, 0xFF, 0x66, 0x6B, 0xBA, 0x92, 0x89, 0x21, 0xDC, 0x8E, 0x90, 0xD0, 0x6F, 0x97, 0x48, 0x9B, 0x8B, 0x3F, 0x26, 0x93, 0xED, 0xAE, 0x34, 0xF9, 0xFD, 0x67, 0x0E, 0x69, 0x7F, 0x9D, 0xB5, 0xA8, 0x60, 0x87, 0x49, 0xB2, 0x21, 0xA9, 0xEC, 0xFC, 0x4C, 0x76, 0xF3, 0x0F, 0xF6, 0xE0, 0x06, 0x36, 0x3F, 0x8B, 0x2D, 0xF9, 0xC4, 0xD6, 0x3E, 0x00, 0x24, 0xEF, 0x71, 0x7B, 0x24, 0xDE, 0xB2, 0xD3, 0x8B, 0xEA, 0xCD, 0x01, 0xC0, 0xB9, 0xAC, 0xD1, 0x8A, 0x54, 0x1B, 0xF7, 0xDF, 0x39, 0x48, 0x51, 0x8F, 0xD5, 0x7A, 0xCC, 0xDA, 0x04, 0xB0, 0x23, 0x0F, 0xB1, 0xC1, 0x60, 0x67, 0x0D, 0x61, 0x57, 0x49, 0xFD, 0x7B, 0x0E, 0x3A, 0x3E, 0x97, 0x2D, 0x18, 0xC2, 0xBE, 0x9E, 0xC3, 0x7E, 0xF6, 0x63, 0x2B, 0xDF, 0xD1, 0xC7, 0x5E, 0xCA, 0x40, 0x7B, 0x31, 0x5F, 0xE8, 0x86, 0xFD, 0x93, 0x83, 0xBA, 0xBB, 0xB0, 0x66, 0x49, 0xAC, 0xAD, 0x0E, 0xDB, 0x5F, 0x92, 0x5B, 0x37, 0xEE, 0x35, 0x29, 0xD5, 0x18, 0xDA, 0x48, 0x0E, 0x5C, 0x12, 0x0C, 0x32, 0x18, 0x01, 0x8D, 0xE4, 0xBA, 0x25, 0x2E, 0x45, 0xE4, 0x01, 0x3B, 0xDB, 0x5B, 0x64, 0xC1, 0x64, 0xFD, 0x77, 0x64, 0xF9, 0xEF, 0x8E, 0x0A, 0xE4, 0x9F, 0xB7, 0xCA, 0x92, 0xA4, 0x98, 0xE7, 0xAE, 0xB1, 0xF4, 0xD7, 0x0E, 0xFA, 0x76, 0xE0, 0x56, 0x99, 0x26, 0x00, 0x1D, 0x4D, 0xC4, 0xDA, 0xEE, 0x76, 0x40, 0x47, 0x64, 0x6B, 0x9D, 0xAF, 0x80, 0xF1, 0x34, 0xAE, 0x6F, 0xD5, 0x42, 0x7F, 0x7F, 0x07, 0x70, 0xF6, 0x6F, 0x6D, 0xC7, 0x15, 0x36, 0x74, 0x27, 0xE9, 0x1C, 0x3D, 0x61, 0x32, 0x19, 0x64, 0x34, 0xE6, 0x23, 0x99, 0xF8, 0xD7, 0xB9, 0x94, 0x3C, 0x3E, 0xDE, 0xDA, 0x84, 0x7C, 0x52, 0xA7, 0x7D, 0x89, 0xAC, 0x59, 0xD6, 0x7E, 0xDA, 0xBF, 0xD7, 0x07, 0xEA, 0x77, 0x91, 0x74, 0x38, 0x4D, 0x06, 0x48, 0x9B, 0x3A, 0x40, 0xCE, 0x45, 0xB4, 0x23, 0x0F, 0xA0, 0xDF, 0xD2, 0xD4, 0x49, 0x07, 0xF4, 0x77, 0xB4, 0xE6, 0xC4, 0x53, 0x22, 0x7F, 0xB4, 0x03, 0x1C, 0x56, 0xB7, 0xE6, 0xC3, 0xF6, 0x6C, 0x98, 0x03, 0xE9, 0xEC, 0x1E, 0x16, 0x41, 0x8E, 0xAE, 0xF1, 0xD7, 0x20, 0x53, 0xE3, 0x1D, 0x7F, 0x90, 0x17, 0xA3, 0x8D, 0x3E, 0x93, 0x1F, 0x0B, 0xD5, 0x0D, 0xB8, 0x96, 0xFC, 0xB4, 0x16, 0x6B, 0x12, 0xF8, 0x50, 0xC7, 0xBE, 0x6D, 0xCB, 0x8A, 0x76, 0x0C, 0x07, 0xC8, 0xBE, 0x23, 0xD9, 0xDE, 0x9A, 0x80, 0x72, 0x0C, 0xAF, 0xBB, 0x74, 0x5B, 0x21, 0xDA, 0x33, 0x00, 0x30, 0x0A, 0xE2, 0xF6, 0xF4, 0x7E, 0xC1, 0xF9, 0xC3, 0x69, 0x3B, 0xB7, 0x23, 0x64, 0x3D, 0xE9, 0x19, 0x3B, 0x7C, 0x2F, 0xB9, 0xFC, 0xBD, 0xF5, 0x15, 0xF2, 0xE8, 0xD1, 0x6E, 0xC6, 0xE4, 0x13, 0x69, 0xC5, 0xF5, 0xE4, 0x9F, 0x05, 0x6D, 0xD0, 0x30, 0x89, 0xEB, 0xBD, 0xB4, 0x61, 0xF3, 0xCA, 0xD8, 0x1C, 0x3B, 0x92, 0x0E, 0x97, 0x31, 0x00, 0xD9, 0xEF, 0x0D, 0xEB, 0x92, 0xC3, 0xF6, 0x31, 0x07, 0x34, 0xC4, 0xFB, 0x62, 0xF4, 0x06, 0xD0, 0x39, 0x20, 0xDA, 0xB3, 0x02, 0xE8, 0xE1, 0x21, 0x7A, 0x6B, 0x35, 0x60, 0x7D, 0x90, 0xBE, 0x57, 0x27, 0xAE, 0x5F, 0x28, 0xE9, 0x7B, 0xDB, 0x42, 0x97, 0xDC, 0x16, 0xDF, 0xDE, 0xBF, 0xBA, 0x1C, 0x38, 0x5B, 0x06, 0xBC, 0x5C, 0x0E, 0x3C, 0x6D, 0x10, 0x07, 0xED, 0x4B, 0x39, 0x05, 0xE4, 0xEB, 0x80, 0xEA, 0x9D, 0x3E, 0x77, 0x13, 0xE4, 0xCD, 0xF4, 0x1A, 0x52, 0xF6, 0xD2, 0xC1, 0xB6, 0xA4, 0x82, 0xAA, 0xD8, 0xF7, 0xB3, 0x91, 0xEB, 0xBA, 0x29, 0x82, 0x4D, 0x02, 0x6B, 0xC7, 0xDA, 0x95, 0x02, 0x6A, 0xC7, 0x44, 0x3B, 0x02, 0x01, 0x3D, 0x91, 0xA3, 0xB5, 0x2D, 0x01, 0x03, 0x3A, 0xEF, 0xE8, 0x71, 0x55, 0xAF, 0x47, 0xC5, 0x79, 0x20, 0xA4, 0x06, 0xC8, 0xD5, 0x02, 0x56, 0xB9, 0x02, 0xA7, 0x3C, 0x80, 0x13, 0x0D, 0x40, 0x9A, 0x29, 0x50, 0x3C, 0x0C, 0x38, 0xAC, 0x0D, 0xFC, 0xCA, 0x03, 0xF6, 0xF6, 0xE0, 0x7D, 0x62, 0xEB, 0xA7, 0x90, 0xAA, 0x5B, 0x96, 0xB7, 0x25, 0x35, 0x06, 0x2E, 0x7A, 0x4D, 0x76, 0xD2, 0x11, 0xB9, 0x67, 0x04, 0xC0, 0xCF, 0x8E, 0xD8, 0x00, 0x55, 0xD6, 0x47, 0x99, 0x1D, 0xD1, 0x9F, 0x75, 0xBE, 0x48, 0x36, 0x2F, 0xD7, 0x3C, 0x0C, 0x28, 0x29, 0x9C, 0x6B, 0x00, 0x7A, 0xEE, 0x00, 0xD6, 0x2A, 0x03, 0xC3, 0xAA, 0x81, 0x68, 0x0B, 0x60, 0xB6, 0x16, 0x10, 0xD5, 0x02, 0xA4, 0xBF, 0x05, 0x22, 0x7B, 0x02, 0x2F, 0xCB, 0x85, 0x3F, 0xE9, 0x7B, 0x00, 0x7A, 0x0A, 0x29, 0xCE, 0x75, 0x7F, 0x2F, 0x53, 0xD2, 0xD0, 0xD7, 0xCD, 0x9C, 0x34, 0x9A, 0x36, 0xFC, 0x16, 0x48, 0xD1, 0xCF, 0x63, 0x7B, 0x72, 0x9D, 0xC5, 0xCA, 0xEC, 0xDC, 0xBF, 0xEC, 0xE4, 0x52, 0xF2, 0xDB, 0x56, 0xEF, 0x0C, 0xF2, 0xDE, 0xE8, 0xBE, 0xBC, 0x1F, 0x23, 0x52, 0x6F, 0x16, 0x39, 0xEE, 0x27, 0xA0, 0x3A, 0x42, 0x72, 0x67, 0x40, 0x47, 0xC0, 0xA9, 0x52, 0xDE, 0xC2, 0x67, 0x39, 0x30, 0x7D, 0x40, 0xFB, 0x09, 0x6E, 0x1D, 0x81, 0xC3, 0xCB, 0xD4, 0x9F, 0x0D, 0xED, 0x00, 0xBC, 0x54, 0xE9, 0x38, 0xDB, 0xF9, 0x32, 0xD0, 0x70, 0xBD, 0xB3, 0xAC, 0x8E, 0x33, 0xE8, 0x9A, 0xAC, 0x06, 0x48, 0x87, 0xF6, 0x6D, 0xAE, 0x92, 0x76, 0x8D, 0x0A, 0x7E, 0x64, 0x9F, 0x1C, 0xB1, 0x1F, 0x5B, 0x0B, 0xBC, 0x2B, 0x51, 0x82, 0xE5, 0xFD, 0xE3, 0xE5, 0x6E, 0x8B, 0x12, 0xC8, 0x9B, 0x4B, 0xC2, 0xDF, 0x90, 0x7B, 0xBE, 0xBB, 0x9D, 0x20, 0x27, 0xA5, 0xD8, 0x98, 0x93, 0xC3, 0xF5, 0x2C, 0x0A, 0x48, 0x00, 0xF4, 0xD9, 0x18, 0x40, 0xFE, 0xF7, 0x10, 0xF4, 0x33, 0x02, 0xD4, 0x4F, 0x6C, 0x76, 0xB0, 0xB5, 0x04, 0x34, 0xAF, 0xDF, 0xFC, 0xD2, 0x2B, 0x12, 0xE8, 0x6A, 0xF4, 0xFD, 0xB6, 0x49, 0x2C, 0xA0, 0x6B, 0x2B, 0xFA, 0xD6, 0x3C, 0x61, 0xB3, 0xC8, 0x1D, 0xB4, 0x3F, 0x68, 0xB0, 0xF8, 0xFC, 0x0C, 0xD0, 0x35, 0x51, 0xF8, 0x49, 0xAC, 0xC6, 0x5B, 0x71, 0xFD, 0xCC, 0x0A, 0xF2, 0xEB, 0xE0, 0xD4, 0x14, 0x32, 0x7F, 0xD4, 0xA6, 0x67, 0xE4, 0x9E, 0x1B, 0xF3, 0x1C, 0x04, 0xC7, 0xA7, 0xDD, 0x0C, 0x0C, 0x01, 0x24, 0x16, 0x8F, 0xCC, 0xF3, 0x58, 0x00, 0x00, 0xD6, 0xBF, 0x47, 0x6E, 0x21, 0x01, 0xE7, 0x29, 0x80, 0x51, 0x32, 0x30, 0x4C, 0x61, 0x78, 0x15, 0xED, 0xC8, 0x1C, 0xBE, 0x67, 0xF5, 0xB7, 0xF6, 0xA3, 0x00, 0xCF, 0x9A, 0x9C, 0x9D, 0xED, 0x54, 0x00, 0x8F, 0xA2, 0xEA, 0x75, 0x4A, 0x1F, 0x81, 0x41, 0x9E, 0xA2, 0x3F, 0x5A, 0x00, 0xF6, 0x79, 0x7C, 0xAD, 0x59, 0x9F, 0x11, 0xEB, 0x1E, 0x8E, 0x40, 0x9F, 0xD1, 0xE2, 0x7E, 0x4E, 0xB4, 0xE9, 0x6A, 0x31, 0xB7, 0x23, 0xAF, 0x81, 0x7C, 0x38, 0x94, 0x9F, 0x87, 0x1D, 0x4A, 0xD9, 0x75, 0x17, 0x90, 0xBC, 0xBC, 0xE0, 0x43, 0xDC, 0x09, 0x00, 0xF0, 0xD5, 0x8C, 0x89, 0x20, 0xAD, 0x22, 0x96, 0x59, 0x92, 0xAA, 0x3F, 0x66, 0xED, 0x27, 0x81, 0xC9, 0x7A, 0x32, 0xEA, 0x12, 0x26, 0xC0, 0x8C, 0x76, 0xFD, 0xC2, 0x00, 0x20, 0x22, 0x6F, 0xCE, 0x24, 0x72, 0xBA, 0xD6, 0x89, 0x43, 0xE4, 0xCC, 0xEE, 0x15, 0x03, 0xC9, 0x69, 0xDD, 0xB8, 0xFE, 0xA8, 0x1F, 0xEC, 0x20, 0x19, 0xD6, 0xC5, 0x95, 0x6C, 0x51, 0x7E, 0x2C, 0x0D, 0x00, 0xE5, 0xBB, 0x8B, 0xF6, 0x91, 0xD9, 0x2E, 0xE7, 0x07, 0x93, 0x31, 0x8F, 0x0E, 0x6B, 0x90, 0x63, 0xAE, 0x1D, 0x7E, 0x45, 0x5A, 0xBF, 0x4E, 0x1F, 0x4C, 0x2A, 0xE6, 0xA5, 0xBC, 0x24, 0x81, 0xC4, 0x2B, 0x72, 0x93, 0xC9, 0x04, 0x1B, 0xF3, 0xC7, 0x20, 0xDF, 0x7A, 0xA9, 0x90, 0x1B, 0x13, 0x22, 0x07, 0x82, 0x34, 0x4C, 0xAE, 0x24, 0xD7, 0x98, 0xDD, 0x2D, 0x27, 0xD7, 0x75, 0xE1, 0xBA, 0x8B, 0x16, 0xB2, 0xE1, 0x63, 0xD9, 0x49, 0x6D, 0xC9, 0x4F, 0x93, 0x4A, 0x0E, 0x00, 0x40, 0xEE, 0xCA, 0xC7, 0x46, 0xE4, 0x36, 0x8F, 0x6B, 0xBF, 0xC9, 0xD0, 0x41, 0x97, 0xB2, 0xC8, 0xBE, 0xEE, 0x97, 0x73, 0x49, 0xB5, 0x5E, 0xD7, 0xE6, 0x93, 0xC0, 0x45, 0x53, 0xF6, 0x4C, 0x9F, 0xCE, 0xD3, 0xC8, 0xAC, 0x4D, 0x83, 0x3A, 0x93, 0xA7, 0xFB, 0x8D, 0x4D, 0x20, 0x4F, 0x4A, 0x2F, 0x78, 0xCE, 0xEB, 0x3D, 0x69, 0xD3, 0xC8, 0xE3, 0x8B, 0x73, 0x36, 0x83, 0x9C, 0xC3, 0x75, 0x0F, 0x94, 0xB2, 0xEB, 0xDF, 0xB2, 0xEB, 0x0E, 0x92, 0xF7, 0x2F, 0x7F, 0x08, 0x01, 0x80, 0x54, 0xF3, 0xA7, 0xED, 0xC8, 0x99, 0x3B, 0xEF, 0xB5, 0x90, 0xAE, 0x53, 0xEE, 0x47, 0x90, 0x3A, 0x0F, 0x1E, 0xA5, 0x92, 0xC0, 0xE3, 0x4A, 0xF6, 0xC9, 0xD5, 0x8E, 0x1B, 0xC8, 0xA7, 0xE3, 0xAD, 0xAB, 0xC8, 0xE7, 0xAB, 0x3C, 0xBF, 0x90, 0xCF, 0xAE, 0xCD, 0x3C, 0x08, 0x72, 0xCA, 0xB6, 0x3F, 0x20, 0x27, 0x64, 0x37, 0x91, 0x8F, 0x27, 0xDD, 0x59, 0x4B, 0x3E, 0x7C, 0xD5, 0x3C, 0x86, 0xBC, 0xD3, 0xC0, 0xF5, 0x4F, 0xBD, 0x62, 0x4F, 0x6E, 0x24, 0x4F, 0x77, 0xAC, 0xBC, 0x06, 0x00, 0x8B, 0xCA, 0x5E, 0xF7, 0x27, 0xDD, 0xDC, 0x8B, 0xF5, 0x48, 0x03, 0xDB, 0x37, 0x5B, 0x48, 0x89, 0xCA, 0x8A, 0x8F, 0x24, 0xF0, 0x3B, 0x5B, 0xAE, 0x75, 0x26, 0x32, 0x59, 0xC8, 0x8E, 0x08, 0x67, 0x27, 0xB8, 0xB2, 0xB1, 0xCB, 0xD9, 0x83, 0x89, 0x6C, 0x56, 0x21, 0xFB, 0x52, 0x9F, 0xFD, 0xA1, 0xC5, 0x8A, 0x5C, 0xDC, 0x0D, 0x28, 0xBE, 0xC1, 0xED, 0x78, 0xF1, 0x97, 0x5C, 0x6F, 0x58, 0x75, 0x00, 0x00, 0xFC, 0x86, 0x7C, 0x1A, 0x4A, 0x9A, 0x5F, 0xFE, 0x9E, 0x42, 0x2A, 0xFA, 0xD7, 0x97, 0x08, 0x78, 0x1D, 0xC8, 0x93, 0xED, 0x32, 0x93, 0xB5, 0x2D, 0x67, 0x3D, 0x9F, 0xB0, 0xE3, 0xEE, 0xB1, 0x0B, 0xCA, 0xD8, 0x2D, 0x36, 0x6C, 0xAA, 0x12, 0x7B, 0x5E, 0x8E, 0x7D, 0xA1, 0xC7, 0x7E, 0xA7, 0xCC, 0x20, 0xE4, 0x76, 0x90, 0x12, 0x29, 0x13, 0xD2, 0x7E, 0x5D, 0x03, 0x00, 0xEB, 0x93, 0xF5, 0xFE, 0x64, 0xBB, 0xB4, 0x7F, 0xF2, 0x8F, 0x74, 0x3C, 0xAB, 0x3E, 0x9C, 0xB5, 0x94, 0x65, 0x5D, 0x8D, 0x58, 0x9F, 0x24, 0x36, 0x18, 0x6C, 0xE4, 0x36, 0x76, 0x8D, 0x1C, 0x9B, 0xD4, 0x85, 0x3D, 0x3A, 0x90, 0xBD, 0x79, 0x89, 0x7D, 0x9E, 0xCB, 0x7E, 0xDD, 0xCE, 0x56, 0x45, 0x83, 0xC6, 0xB8, 0x40, 0x40, 0x71, 0x86, 0x78, 0x06, 0xE0, 0x0A, 0x68, 0x8A, 0x6B, 0x48, 0x6B, 0x19, 0xA0, 0xC5, 0xFB, 0xA3, 0xC5, 0x7C, 0xCB, 0xF6, 0x30, 0x16, 0xFF, 0x6E, 0x03, 0xD8, 0xDB, 0x70, 0x2B, 0xBD, 0x75, 0xD9, 0xF1, 0x36, 0xA4, 0xE3, 0x15, 0xBF, 0xD5, 0x64, 0x30, 0x86, 0xAC, 0x23, 0x37, 0x6F, 0xB5, 0xB5, 0x21, 0x8F, 0x15, 0x1A, 0xEC, 0x21, 0x6F, 0x2B, 0x76, 0xCC, 0x25, 0xCB, 0x83, 0x95, 0xD2, 0xC9, 0x5F, 0x77, 0x65, 0x17, 0xB4, 0xE6, 0x9F, 0xD3, 0x7F, 0xEF, 0x91, 0x74, 0x58, 0x8D, 0x03, 0xF0, 0x4C, 0xE4, 0x8E, 0x53, 0x80, 0xCA, 0x72, 0x51, 0xEF, 0x04, 0xD0, 0x59, 0xF4, 0x21, 0x9D, 0x48, 0x40, 0x7B, 0xBA, 0x68, 0xC7, 0x04, 0xC0, 0xF0, 0xA8, 0xF8, 0xF7, 0x7D, 0x80, 0x55, 0x3C, 0xD7, 0xF7, 0xF1, 0x64, 0xC3, 0xEE, 0x90, 0x36, 0x87, 0x02, 0x9F, 0x92, 0xFE, 0xCB, 0x87, 0x4D, 0x20, 0x93, 0xE2, 0x7B, 0x07, 0x93, 0x59, 0x4B, 0x75, 0x6C, 0xC8, 0x67, 0xE6, 0xED, 0xE3, 0xC9, 0x6F, 0x3F, 0x14, 0x46, 0x73, 0x4D, 0xA9, 0x94, 0x9F, 0xB3, 0x48, 0xA0, 0xEA, 0x3B, 0x2B, 0xF2, 0x86, 0x3B, 0x40, 0x9A, 0x5F, 0x06, 0xDA, 0x88, 0xFC, 0xD6, 0xF1, 0x1E, 0xD0, 0x29, 0x4B, 0xF4, 0x86, 0x42, 0xA0, 0xCB, 0x3C, 0xD1, 0x8E, 0x12, 0xA0, 0x9B, 0xAB, 0x68, 0x87, 0x3B, 0x60, 0x9E, 0xCD, 0xF5, 0x3D, 0x35, 0xD9, 0xD0, 0x5C, 0xD2, 0x76, 0x6F, 0x90, 0x39, 0x39, 0xF1, 0xC5, 0x20, 0x5F, 0x32, 0xF9, 0x59, 0x8F, 0xA7, 0x64, 0x5E, 0xB1, 0xA6, 0x0D, 0xF9, 0xC9, 0x44, 0x81, 0xC4, 0xDF, 0xC6, 0x36, 0x5B, 0x1B, 0x34, 0xC0, 0x39, 0x24, 0x96, 0x7D, 0x22, 0x47, 0xD2, 0xD1, 0xE7, 0x2E, 0x40, 0xF6, 0x3E, 0xCF, 0xF6, 0x88, 0x06, 0xE4, 0x45, 0x9E, 0x51, 0x6F, 0x00, 0x3A, 0xB7, 0x15, 0xF3, 0xBC, 0x16, 0xD0, 0xD5, 0x52, 0xB4, 0x43, 0x07, 0x30, 0xB8, 0x29, 0xDE, 0x2F, 0x59, 0xC0, 0x7A, 0x10, 0x7D, 0xAF, 0xEE, 0x76, 0xE7, 0xBE, 0xA4, 0x77, 0xB1, 0xE5, 0x52, 0x32, 0x56, 0x5A, 0xFF, 0x3E, 0x79, 0xC2, 0x4D, 0xA5, 0x03, 0xF9, 0xB8, 0x1E, 0xA0, 0xA7, 0xC3, 0xB5, 0xCB, 0x81, 0xAF, 0x29, 0x5C, 0xEF, 0x45, 0x07, 0xF6, 0x7C, 0x17, 0x36, 0x3B, 0x81, 0x94, 0xD8, 0x28, 0xF2, 0x58, 0x28, 0xD7, 0xB7, 0x9E, 0xCB, 0xDA, 0x3E, 0x63, 0xCD, 0xD7, 0x03, 0xCA, 0xCD, 0xE2, 0xFD, 0xD9, 0x0B, 0x68, 0x89, 0xF3, 0xA9, 0x75, 0x45, 0x28, 0x2D, 0xE6, 0x02, 0x5B, 0x80, 0x7E, 0x1F, 0x0F, 0xE8, 0x96, 0x62, 0xDC, 0x51, 0x64, 0x89, 0xAF, 0xC1, 0x41, 0xC0, 0xB7, 0x1D, 0xC0, 0xEA, 0xED, 0xC0, 0xE3, 0x60, 0xE0, 0x68, 0x21, 0x70, 0x2B, 0x1B, 0xB8, 0xAB, 0x0B, 0xE4, 0xE6, 0x02, 0xDF, 0xD4, 0x81, 0x8B, 0xA3, 0xB9, 0x6E, 0xC6, 0x31, 0x52, 0x72, 0x54, 0xA2, 0x02, 0xD9, 0xE6, 0xCE, 0xD6, 0x3F, 0xA4, 0x6C, 0x1F, 0xB1, 0x1E, 0xB5, 0x1F, 0x7C, 0x15, 0x0C, 0x62, 0x5D, 0x46, 0xB3, 0xFD, 0x4A, 0x59, 0x07, 0x35, 0x56, 0x53, 0xD8, 0x8E, 0x9F, 0x72, 0x43, 0x3D, 0xA6, 0x26, 0x08, 0xE8, 0x79, 0x1B, 0xB8, 0x6C, 0x02, 0xB8, 0x2D, 0x02, 0x0E, 0x24, 0x03, 0xD3, 0x5C, 0x81, 0x7D, 0x51, 0xC0, 0xCE, 0x58, 0x20, 0x51, 0x0E, 0xB8, 0xE5, 0x09, 0x6C, 0x37, 0x00, 0xBE, 0xC6, 0x01, 0x9B, 0x22, 0x41, 0xFD, 0x22, 0x3E, 0x7A, 0x06, 0xA9, 0xB8, 0x7E, 0x72, 0x19, 0xD9, 0x6E, 0x5D, 0xD8, 0x5F, 0xB2, 0xFD, 0x27, 0x91, 0x7F, 0xFA, 0x81, 0xAF, 0xC2, 0x13, 0xAC, 0xD7, 0x54, 0x76, 0x98, 0x39, 0xEB, 0x90, 0x49, 0xFE, 0xA9, 0xD7, 0x2B, 0x21, 0x73, 0xAF, 0x01, 0x00, 0x90, 0x94, 0x00, 0x68, 0x4F, 0x01, 0x22, 0x8F, 0x02, 0x76, 0x39, 0xC0, 0x94, 0x3C, 0x20, 0xE0, 0x28, 0x30, 0x51, 0x0D, 0xD8, 0xB0, 0x14, 0x98, 0xB4, 0x0E, 0xB8, 0x7E, 0x1D, 0x08, 0x2E, 0x00, 0x2A, 0x03, 0x01, 0xBF, 0x65, 0xA0, 0x9F, 0x5B, 0xAA, 0x6F, 0x1D, 0xA9, 0xDE, 0xD3, 0xF1, 0x2B, 0xA9, 0x51, 0x60, 0x1F, 0x44, 0x76, 0x12, 0xF9, 0x3A, 0x2A, 0x81, 0xEB, 0xCD, 0x3B, 0xC6, 0x4E, 0xBB, 0x46, 0xB6, 0x98, 0xF8, 0x04, 0x90, 0x25, 0xEF, 0x06, 0xEB, 0x90, 0x57, 0x76, 0x5B, 0xC6, 0x91, 0xF1, 0x86, 0xDA, 0xAF, 0x48, 0xAF, 0x66, 0x40, 0x21, 0x0B, 0xF0, 0x1C, 0x06, 0xF4, 0x8E, 0x03, 0x86, 0x3D, 0x07, 0x46, 0x77, 0x03, 0x06, 0x52, 0x46, 0x4B, 0x96, 0x99, 0xD6, 0xF7, 0x20, 0x70, 0x65, 0xA4, 0x6C, 0x9E, 0xA3, 0x3E, 0xF0, 0xDD, 0x53, 0xF6, 0xA8, 0x01, 0xED, 0x1F, 0x7F, 0xD8, 0xF6, 0x07, 0xD7, 0xE8, 0x5E, 0xCA, 0x1A, 0xDA, 0x4A, 0x8C, 0x25, 0xBB, 0x89, 0xBC, 0x9F, 0x20, 0xC9, 0x5F, 0xDB, 0xF1, 0x9A, 0x6C, 0x88, 0x5C, 0x6F, 0x4F, 0x3E, 0xD7, 0x9F, 0x3D, 0x93, 0x3C, 0x2F, 0x37, 0x26, 0x9F, 0xDC, 0x14, 0xEC, 0x12, 0x4F, 0x8E, 0xDB, 0x6C, 0x79, 0x14, 0x26, 0x80, 0x23, 0x74, 0x78, 0xBE, 0x03, 0x00, 0xD8, 0x1D, 0x03, 0xE4, 0x3F, 0xD9, 0x4E, 0x30, 0xCB, 0x06, 0x54, 0x1C, 0x17, 0x98, 0x74, 0x37, 0x04, 0xBA, 0xE8, 0x9C, 0xB9, 0xA2, 0xB3, 0x1C, 0xD0, 0xB2, 0x28, 0xFB, 0xA6, 0x79, 0x0C, 0xE8, 0x74, 0xAE, 0xB1, 0x47, 0xBB, 0x61, 0x80, 0xE6, 0x08, 0x3E, 0xB7, 0x1A, 0xDF, 0x45, 0xFF, 0x90, 0x01, 0xD4, 0xC7, 0x88, 0x11, 0xFB, 0x8F, 0x58, 0x8D, 0x7F, 0xC8, 0xED, 0x38, 0x21, 0x4B, 0xBE, 0x7A, 0xB2, 0x33, 0x99, 0xBC, 0x54, 0x17, 0xF7, 0x8D, 0xDC, 0x6A, 0x36, 0x75, 0x24, 0x19, 0x7C, 0xCA, 0x2B, 0x08, 0x90, 0x54, 0x75, 0x76, 0xE9, 0xBF, 0x1C, 0x00, 0xF4, 0x3F, 0xF4, 0xED, 0x48, 0x02, 0x0E, 0x79, 0x40, 0x87, 0xD5, 0x80, 0xB3, 0x8E, 0x53, 0xA2, 0x4C, 0x1A, 0xD0, 0xCF, 0x72, 0x96, 0xBA, 0x44, 0x03, 0xE0, 0xA2, 0x72, 0xB4, 0x37, 0x40, 0x7B, 0xCF, 0xDE, 0x1D, 0x20, 0xED, 0x4D, 0xFF, 0x7C, 0x20, 0x0D, 0x2F, 0x70, 0x3B, 0x74, 0x47, 0xB7, 0x6A, 0xCE, 0xD7, 0xED, 0xA5, 0xFB, 0x00, 0xF0, 0xD3, 0xF9, 0x7A, 0x38, 0x99, 0x1F, 0x94, 0x56, 0x47, 0xEE, 0x2A, 0xDF, 0xE2, 0x45, 0x4E, 0xBD, 0xBD, 0xB0, 0x2F, 0xE9, 0x7A, 0x7A, 0xC6, 0x05, 0xB2, 0x5B, 0xFA, 0x0C, 0x57, 0x12, 0x4F, 0xC2, 0x86, 0x10, 0xC0, 0x98, 0xAE, 0x2A, 0x66, 0x64, 0x60, 0x91, 0xED, 0x38, 0xD2, 0xE7, 0x4C, 0x68, 0x29, 0xE9, 0xB7, 0x62, 0x77, 0x28, 0xE9, 0xAB, 0x54, 0x28, 0x4D, 0xFA, 0xD4, 0xD5, 0x2F, 0x24, 0x1D, 0x7B, 0x73, 0x7D, 0x0B, 0x0D, 0xD6, 0x7C, 0x05, 0x59, 0x73, 0xFB, 0x6E, 0x10, 0x00, 0xBC, 0xEC, 0x76, 0x5B, 0x92, 0x4C, 0x4F, 0x3B, 0xA9, 0x4B, 0xCE, 0x5B, 0xB1, 0x67, 0x24, 0x39, 0xB2, 0x29, 0x71, 0x12, 0x69, 0x78, 0x73, 0x87, 0x27, 0x09, 0xEC, 0x38, 0xCD, 0xAE, 0x7B, 0xA0, 0x6C, 0x41, 0xAE, 0xBA, 0x61, 0xF2, 0x99, 0x5C, 0xD9, 0x7B, 0x68, 0x2A, 0xB9, 0x60, 0xEC, 0xB4, 0x1F, 0xE4, 0xC2, 0xB3, 0xBB, 0x2E, 0x92, 0x73, 0x06, 0x5D, 0x8A, 0x20, 0xE7, 0x3D, 0x6D, 0x1C, 0x45, 0x46, 0xE4, 0x73, 0x7D, 0x77, 0x0F, 0x76, 0xE8, 0x33, 0xB2, 0xB8, 0xE1, 0x59, 0x18, 0x00, 0x5C, 0x78, 0x70, 0xB7, 0x96, 0x5C, 0x79, 0xE6, 0x6C, 0x77, 0x72, 0x74, 0xF5, 0xE9, 0x68, 0xD2, 0x72, 0xEC, 0xE9, 0x31, 0x64, 0x9B, 0x65, 0x59, 0x6F, 0x49, 0x20, 0x73, 0xB3, 0xD2, 0x62, 0xF2, 0xD8, 0xA2, 0x1E, 0xED, 0xC9, 0xF4, 0xB7, 0x83, 0x67, 0x93, 0x87, 0xDF, 0xFB, 0x07, 0x90, 0x07, 0xC3, 0xA6, 0x6D, 0x27, 0x0F, 0xAC, 0xDB, 0x79, 0x8B, 0x4C, 0x9C, 0x7F, 0xE6, 0x1E, 0xB9, 0xD3, 0xB5, 0x65, 0x3A, 0xB9, 0x6D, 0x55, 0x6B, 0x2E, 0xDB, 0xC5, 0xCE, 0x19, 0x43, 0xE6, 0x54, 0x94, 0x7C, 0xE2, 0x9F, 0xF2, 0x41, 0x47, 0x32, 0x64, 0x2C, 0xEF, 0x2A, 0xB6, 0xFB, 0x96, 0x9F, 0x41, 0xAA, 0x6A, 0x17, 0x6C, 0x26, 0x81, 0x3B, 0x66, 0x58, 0x4A, 0x3E, 0xE8, 0x4B, 0x69, 0x18, 0x28, 0xEA, 0x64, 0x33, 0x09, 0xE4, 0x22, 0xBF, 0x83, 0xE4, 0xFD, 0xC9, 0x33, 0x74, 0xC9, 0x7B, 0xB7, 0x37, 0x3E, 0x20, 0xEF, 0x9B, 0x64, 0x96, 0x93, 0xB7, 0x9E, 0x5E, 0x0B, 0x06, 0xD9, 0xF8, 0xEB, 0x3B, 0x79, 0x85, 0x73, 0x07, 0xD2, 0x47, 0xB0, 0xBB, 0xA6, 0x90, 0x87, 0xEA, 0x3E, 0x0C, 0x00, 0x80, 0x59, 0x6D, 0x5E, 0x8C, 0x25, 0x07, 0x29, 0x3F, 0xBD, 0x4F, 0x76, 0x7D, 0xFF, 0x72, 0x2E, 0x09, 0x94, 0xEE, 0x61, 0xAB, 0xFC, 0x34, 0x07, 0x93, 0xCD, 0x15, 0x3D, 0x5B, 0xE7, 0x7F, 0x6F, 0x4D, 0x76, 0xFC, 0x75, 0x76, 0x69, 0x18, 0xBB, 0xAF, 0x1D, 0x7B, 0x3A, 0x94, 0x7D, 0x34, 0x9B, 0xAD, 0xBC, 0x41, 0x36, 0x1C, 0xE4, 0xFA, 0x8F, 0xDF, 0xB1, 0x79, 0x72, 0xE4, 0xD2, 0xE5, 0xB4, 0x4F, 0x0A, 0x18, 0xE1, 0x5D, 0xF6, 0x94, 0x34, 0x88, 0xFF, 0xBC, 0x81, 0x6C, 0xB3, 0xEA, 0x8F, 0x90, 0xBF, 0x5F, 0xC5, 0x85, 0xED, 0x65, 0xCF, 0x0E, 0x0D, 0x63, 0xFD, 0x0F, 0xB3, 0x63, 0xDB, 0xB0, 0x0B, 0xBF, 0xB3, 0x5B, 0xB5, 0xD8, 0x94, 0x2E, 0xEC, 0x99, 0x7A, 0xF6, 0xD1, 0x25, 0xF6, 0xF3, 0x3D, 0x01, 0xE7, 0xB2, 0x55, 0xC0, 0x6F, 0x5A, 0x3B, 0x80, 0xDF, 0x98, 0x1F, 0x4B, 0x01, 0xC0, 0x7C, 0xE1, 0xEF, 0x7D, 0xA4, 0x92, 0xD9, 0x3F, 0x39, 0x48, 0xA9, 0x9A, 0xD5, 0x05, 0x6B, 0x17, 0xC9, 0xBA, 0x29, 0xB1, 0xC1, 0xF8, 0x77, 0xE7, 0x5F, 0x66, 0xD7, 0x8D, 0x64, 0x93, 0x0E, 0xB3, 0x47, 0xBA, 0xB0, 0x17, 0x9F, 0xB3, 0x8F, 0x2D, 0xD9, 0x4F, 0x2A, 0xEC, 0x8F, 0xE7, 0xA0, 0xB1, 0xCC, 0x1C, 0x90, 0xEB, 0x2C, 0x7E, 0x6A, 0x2F, 0x40, 0xC5, 0x4B, 0x3C, 0x13, 0x88, 0x07, 0xD4, 0x44, 0x5E, 0xE8, 0xB4, 0x19, 0xE8, 0xB4, 0x59, 0xCC, 0xB7, 0x6A, 0x80, 0xB6, 0x1A, 0xFD, 0xD5, 0x4D, 0xC0, 0x82, 0xD6, 0x53, 0xD0, 0x2E, 0xDF, 0xE1, 0x3A, 0xA9, 0x5B, 0xDA, 0xBF, 0x94, 0x74, 0xB3, 0xB4, 0x7B, 0x4E, 0x86, 0x59, 0xD9, 0x65, 0x90, 0xF1, 0x71, 0xC6, 0x72, 0x64, 0xC6, 0x74, 0x1D, 0x7B, 0xF2, 0xF6, 0x36, 0x25, 0x03, 0xB2, 0xB4, 0x5E, 0xC6, 0x97, 0xFC, 0x19, 0x20, 0x95, 0xD5, 0x14, 0x02, 0x9A, 0x6F, 0x2A, 0x7F, 0x58, 0x90, 0x32, 0xC1, 0x22, 0xF5, 0xB6, 0xB6, 0xB6, 0x63, 0x12, 0xA0, 0x7C, 0x58, 0xB4, 0xA7, 0x07, 0xA0, 0xD2, 0xC8, 0xF3, 0xBE, 0x7A, 0x83, 0x98, 0x67, 0x25, 0x81, 0xCE, 0xA2, 0x9E, 0xF2, 0x77, 0xC0, 0x4C, 0x99, 0x5E, 0x47, 0xF6, 0x88, 0xD3, 0x03, 0x52, 0x2B, 0xA0, 0x5F, 0x3A, 0xE9, 0x59, 0x64, 0xA3, 0x41, 0x4E, 0x3C, 0x60, 0xBF, 0x9A, 0xDC, 0xBB, 0x5C, 0xDF, 0x8A, 0xBC, 0xD8, 0x45, 0x4D, 0x9A, 0x7C, 0xDA, 0xDC, 0xE6, 0x16, 0xF9, 0x2D, 0x58, 0x5A, 0x89, 0x14, 0xE7, 0x23, 0xB9, 0x2A, 0x90, 0x6C, 0xE3, 0x5C, 0x26, 0x47, 0xCA, 0xC7, 0x89, 0x5C, 0xE8, 0x05, 0x1E, 0xEB, 0xBB, 0x02, 0x52, 0xA7, 0xC4, 0x1C, 0xB8, 0x1F, 0x50, 0x51, 0x14, 0xF3, 0xF9, 0x48, 0x40, 0x75, 0xA4, 0x78, 0x5F, 0xD4, 0x81, 0x8E, 0xC5, 0x22, 0x9F, 0x9D, 0x03, 0x74, 0xF9, 0xF9, 0x1C, 0xFA, 0x76, 0x21, 0xBB, 0xC6, 0x3B, 0x77, 0x23, 0x3D, 0xAF, 0xDA, 0x7D, 0x26, 0x17, 0xC5, 0xF7, 0xDC, 0x4F, 0x26, 0x7F, 0xD7, 0x9B, 0x49, 0xE6, 0x2F, 0x53, 0xF4, 0x20, 0x2B, 0x94, 0xA4, 0xBF, 0x90, 0x7F, 0x67, 0x4B, 0x19, 0x57, 0xDF, 0x04, 0xD5, 0x4F, 0x7A, 0xA1, 0x4D, 0xCA, 0xE5, 0xE4, 0xAC, 0x27, 0xA5, 0x44, 0xEE, 0x33, 0x57, 0x05, 0xAF, 0x8F, 0x19, 0xB3, 0x86, 0x9A, 0x80, 0xD4, 0x6C, 0x71, 0x1E, 0x36, 0x01, 0x2A, 0x89, 0xE2, 0x3C, 0x05, 0x01, 0x6A, 0x41, 0x62, 0xCD, 0x40, 0x19, 0xE8, 0xF4, 0x81, 0xDB, 0xD1, 0xFB, 0x20, 0xA9, 0x75, 0x98, 0xCF, 0x93, 0xFB, 0x20, 0xA3, 0x21, 0x64, 0x4C, 0x42, 0xA7, 0x7C, 0xF2, 0x94, 0x2F, 0x8E, 0xFE, 0xC8, 0x05, 0xEE, 0x17, 0x03, 0x1F, 0xAF, 0x02, 0x9F, 0x9F, 0x00, 0xAF, 0x5D, 0x38, 0x7F, 0x14, 0x9D, 0x27, 0x65, 0xFB, 0x9F, 0xF4, 0x22, 0x51, 0x9A, 0x6A, 0x00, 0x72, 0xAA, 0xC8, 0x63, 0xE9, 0x5C, 0xDF, 0xEC, 0x07, 0x6B, 0x6E, 0xC1, 0x9A, 0x3A, 0x01, 0x92, 0x8B, 0xC5, 0xF9, 0xD8, 0x09, 0xA8, 0xD6, 0x88, 0xA7, 0xD8, 0xD9, 0x40, 0x87, 0xF3, 0xF4, 0x5A, 0x52, 0x81, 0x5D, 0xC6, 0x90, 0x3D, 0xCE, 0xA8, 0xB6, 0x69, 0xAA, 0x03, 0x02, 0x57, 0x02, 0x4F, 0xAD, 0x81, 0x45, 0xAA, 0xC0, 0xED, 0x3D, 0xC0, 0xC1, 0xA9, 0xC0, 0x0D, 0x2D, 0x20, 0xDF, 0x11, 0xB8, 0xD4, 0x03, 0x78, 0x7F, 0x13, 0x38, 0x31, 0x18, 0x68, 0xF1, 0x07, 0x92, 0x39, 0x97, 0x61, 0x75, 0x25, 0xC8, 0xD5, 0xD1, 0x37, 0x49, 0xC9, 0xF6, 0x22, 0xF7, 0x38, 0x73, 0x5D, 0x67, 0x0B, 0xD6, 0x61, 0x0B, 0xDB, 0x5B, 0x97, 0x35, 0x6D, 0x66, 0xBB, 0x0E, 0x21, 0x9B, 0x07, 0x03, 0x0A, 0x03, 0x81, 0x67, 0xA9, 0x80, 0xF1, 0x64, 0x20, 0xEB, 0x03, 0x30, 0x34, 0x08, 0x48, 0x39, 0x0B, 0x84, 0x47, 0x00, 0x49, 0xDB, 0x81, 0x2D, 0x1D, 0x80, 0x6D, 0xA7, 0x80, 0xF3, 0x15, 0xC0, 0xBA, 0x44, 0xA0, 0xEC, 0x38, 0xB0, 0xC4, 0x1B, 0x68, 0x39, 0x06, 0x84, 0xCE, 0xE3, 0xE7, 0x72, 0xBE, 0xEE, 0xA4, 0xCC, 0x3B, 0x8F, 0xD1, 0xA4, 0xEC, 0x28, 0x91, 0x7F, 0x1C, 0xB8, 0x8E, 0xC7, 0x0B, 0x76, 0xD8, 0x65, 0xD6, 0xB9, 0x80, 0x35, 0x0B, 0x23, 0x5F, 0x64, 0xAA, 0x8D, 0x21, 0xCF, 0x9C, 0x01, 0x00, 0x60, 0x57, 0x15, 0xA0, 0x99, 0x09, 0xCC, 0x1E, 0x09, 0x58, 0x2D, 0x01, 0x42, 0x67, 0x03, 0xEE, 0xEF, 0x80, 0xC0, 0x03, 0xC0, 0xBC, 0x51, 0x40, 0xC0, 0x49, 0xE0, 0x44, 0x2E, 0xE0, 0xBD, 0x17, 0x78, 0xF1, 0x00, 0x70, 0xF1, 0x04, 0x1A, 0x25, 0x00, 0x8B, 0x7B, 0xA0, 0xBA, 0xC3, 0x7A, 0xD4, 0x93, 0x72, 0x1B, 0x8D, 0x1B, 0x49, 0x85, 0x30, 0xB1, 0x0F, 0xA9, 0x07, 0xD7, 0x9B, 0xD9, 0xC8, 0xFA, 0xAF, 0x23, 0x3F, 0x16, 0xBB, 0x77, 0x26, 0xEF, 0x55, 0xF2, 0x3A, 0x62, 0xA6, 0x8A, 0xE1, 0x15, 0x72, 0xD5, 0xFC, 0x4E, 0x87, 0x49, 0x5F, 0x17, 0x00, 0xD7, 0x00, 0xDA, 0x55, 0xAE, 0x63, 0x47, 0xEB, 0xE1, 0xC0, 0x40, 0x59, 0xC0, 0xB6, 0x19, 0x98, 0xF5, 0x06, 0xB0, 0x6C, 0x00, 0xD2, 0xAB, 0x25, 0x27, 0x98, 0x64, 0x01, 0x25, 0xBD, 0x64, 0x1F, 0x6B, 0x77, 0x00, 0xEA, 0x06, 0x49, 0x76, 0xE3, 0x1A, 0x6D, 0x3D, 0xC0, 0x0E, 0x64, 0x95, 0x45, 0xBF, 0xDE, 0xE4, 0x09, 0xDE, 0xAF, 0xBD, 0x96, 0xFC, 0x72, 0x69, 0x71, 0x34, 0x79, 0x67, 0x74, 0x78, 0x2E, 0x79, 0x74, 0x87, 0x47, 0x1C, 0xB9, 0xCC, 0xD9, 0xF1, 0x35, 0x39, 0x5A, 0x3C, 0x7B, 0x23, 0x2D, 0xED, 0xD5, 0x76, 0x92, 0xFC, 0x9F, 0x81, 0x35, 0x20, 0x3F, 0xD3, 0xCA, 0x4B, 0xAB, 0x02, 0x50, 0xA9, 0x9C, 0x58, 0xD7, 0x61, 0x1D, 0xD0, 0x65, 0xC4, 0xA1, 0x95, 0x0A, 0x1B, 0x01, 0x1D, 0xCD, 0xD7, 0xE7, 0xDB, 0x00, 0xE8, 0xD8, 0xBB, 0x2E, 0x0E, 0x03, 0x01, 0x39, 0x7E, 0x16, 0x0E, 0x99, 0xB7, 0xEC, 0xFF, 0x7F, 0x4F, 0x75, 0xA0, 0x18, 0x20, 0x8F, 0xAA, 0x91, 0x0F, 0x63, 0xB7, 0x49, 0x90, 0x99, 0xC5, 0xD1, 0x69, 0x64, 0xEC, 0xB4, 0x71, 0x53, 0xC8, 0xD1, 0xAF, 0x87, 0xC5, 0x92, 0xBD, 0xB5, 0x6C, 0xDF, 0x90, 0x2A, 0x8D, 0xD6, 0x7F, 0x48, 0xA0, 0x8F, 0x69, 0x9B, 0x95, 0xA4, 0xE5, 0x2D, 0xCB, 0x3F, 0xA4, 0x95, 0xEE, 0xF8, 0x14, 0xD2, 0xA2, 0x7C, 0x5B, 0x16, 0xD9, 0x4B, 0x84, 0x43, 0xD2, 0x28, 0xB4, 0x36, 0x99, 0xEC, 0xB8, 0x8D, 0xEB, 0x2B, 0x7F, 0x67, 0x95, 0x0E, 0x93, 0xBF, 0x77, 0x9C, 0xB1, 0x05, 0x80, 0x8A, 0x99, 0x17, 0xFA, 0x90, 0x17, 0xF7, 0xEC, 0xAB, 0x20, 0x37, 0x5A, 0xAD, 0x2C, 0x21, 0xC7, 0x1F, 0x9F, 0xBA, 0x8B, 0xB4, 0xDF, 0x3E, 0x2E, 0x94, 0xEC, 0xD0, 0x21, 0xA8, 0x13, 0x09, 0xF8, 0x1A, 0x4B, 0x0D, 0x23, 0x47, 0xF8, 0xAB, 0x39, 0x92, 0x2E, 0x77, 0x6C, 0x3D, 0xC8, 0x01, 0x75, 0xA1, 0xE7, 0x49, 0x87, 0x63, 0x1B, 0x4C, 0xC9, 0xBE, 0x4F, 0x73, 0x08, 0xD8, 0x6D, 0xFC, 0x36, 0x85, 0x34, 0x7F, 0xC2, 0xF5, 0x75, 0x47, 0xB1, 0x9D, 0x57, 0x93, 0xE5, 0x4D, 0xB9, 0x65, 0x00, 0x70, 0x7F, 0x71, 0xCE, 0x07, 0x72, 0xCF, 0x46, 0xDE, 0xCD, 0x12, 0xF1, 0x67, 0xEB, 0x14, 0x72, 0x40, 0xBB, 0xD5, 0x61, 0x64, 0x47, 0xFF, 0x38, 0x0B, 0x12, 0x88, 0x19, 0x2F, 0x91, 0x43, 0xCE, 0xEF, 0xAD, 0x9C, 0x4C, 0x4E, 0x8D, 0xD1, 0xB7, 0x20, 0xC3, 0xD5, 0x07, 0xED, 0x25, 0xFD, 0xDB, 0x4D, 0xFA, 0x40, 0x06, 0x5C, 0x5A, 0x63, 0x49, 0xFA, 0xAD, 0x3C, 0xA9, 0x49, 0x06, 0xFA, 0x56, 0x6E, 0x27, 0x47, 0xD9, 0x70, 0x7D, 0xBB, 0x19, 0x6C, 0xCF, 0x21, 0x64, 0xD1, 0xE1, 0x07, 0x23, 0x00, 0xE0, 0xC4, 0xC3, 0x7C, 0x45, 0x32, 0x6A, 0xC3, 0x89, 0x5A, 0xD2, 0xCD, 0xF1, 0xC8, 0x5A, 0x52, 0xFF, 0x70, 0x9A, 0x0B, 0x09, 0xA4, 0x39, 0xB3, 0x07, 0xF7, 0xB4, 0x5F, 0x45, 0xA6, 0xFA, 0x98, 0x5D, 0x20, 0xF7, 0xF6, 0x77, 0xBC, 0x4C, 0xEE, 0x6E, 0xF0, 0xDB, 0x4C, 0x26, 0xD4, 0x87, 0xE9, 0x91, 0x1B, 0x0A, 0x0F, 0xFA, 0x93, 0x6B, 0x3E, 0x67, 0x54, 0x91, 0x6B, 0x4B, 0xEA, 0xCC, 0xC8, 0x38, 0x5F, 0xAE, 0x3F, 0x6B, 0x10, 0xEB, 0x93, 0x4F, 0x9E, 0x5B, 0xFB, 0x9C, 0xEA, 0x61, 0x1D, 0xE7, 0x42, 0x8C, 0xAE, 0xB8, 0x11, 0x47, 0x5A, 0x8C, 0xBE, 0x16, 0x4D, 0xCA, 0x4A, 0x5F, 0x4D, 0x20, 0x81, 0x5C, 0x1B, 0xA9, 0xF7, 0x64, 0xC1, 0x2E, 0xE3, 0x1C, 0xF2, 0x76, 0x3B, 0x87, 0x78, 0xB2, 0xA0, 0xCC, 0xBF, 0x91, 0xCC, 0x8F, 0x9B, 0xF2, 0x85, 0xCC, 0x1B, 0x1F, 0x57, 0x43, 0xE6, 0x7B, 0xA5, 0xAB, 0x92, 0x17, 0xA2, 0xCE, 0x7F, 0x06, 0x79, 0xBD, 0x4A, 0x9D, 0xCC, 0xBA, 0xCD, 0xF5, 0x93, 0xDE, 0xB2, 0xB1, 0xEB, 0xC9, 0xDD, 0x5D, 0xDF, 0x6E, 0x02, 0x80, 0x89, 0x0A, 0x4F, 0x42, 0x48, 0xBB, 0xA4, 0xA2, 0x32, 0x52, 0xBD, 0xE3, 0xE3, 0xAD, 0x24, 0xF0, 0x5A, 0x9B, 0xFD, 0xD8, 0x41, 0x77, 0x3E, 0xF9, 0xE3, 0x92, 0xE3, 0x4F, 0xB2, 0xE1, 0xA6, 0xBF, 0x0E, 0xF8, 0x79, 0x94, 0x39, 0xD9, 0x92, 0xB3, 0x8A, 0xF7, 0xED, 0x54, 0xEC, 0x79, 0x40, 0xB6, 0x14, 0x65, 0x6C, 0x23, 0xEB, 0xC7, 0x17, 0x84, 0x92, 0x3F, 0x9F, 0x55, 0x2C, 0x20, 0x2B, 0x75, 0xB9, 0xFE, 0x83, 0x42, 0xF6, 0xC4, 0x2D, 0x32, 0x32, 0xE2, 0xE3, 0x17, 0x00, 0x18, 0x70, 0xB6, 0xE4, 0x01, 0xA9, 0xE3, 0xFD, 0x3E, 0x9C, 0x94, 0x58, 0xFE, 0xCB, 0x84, 0xA4, 0x3A, 0x5A, 0xD1, 0xAC, 0xBD, 0x21, 0xEB, 0xE1, 0xC5, 0x86, 0x44, 0xB3, 0x53, 0x07, 0xB2, 0x8B, 0x37, 0xB1, 0xF1, 0xD6, 0x6C, 0x8A, 0x0F, 0x9B, 0x9D, 0xC3, 0xDE, 0x3B, 0x0A, 0x72, 0xC6, 0xFB, 0x7C, 0xFE, 0xBC, 0xA9, 0x56, 0xC2, 0x0F, 0x28, 0x9E, 0x4A, 0xED, 0x18, 0x19, 0x55, 0x35, 0x0E, 0x00, 0x0C, 0x17, 0xD4, 0xE6, 0x92, 0x72, 0xE2, 0x0E, 0x5E, 0x62, 0xA1, 0xC4, 0x42, 0x80, 0x67, 0x7E, 0xD2, 0x72, 0x15, 0xEB, 0x72, 0x91, 0x1D, 0x35, 0x9F, 0x0D, 0x06, 0x1B, 0x91, 0xCB, 0x46, 0x8F, 0x64, 0x37, 0xF6, 0x60, 0xF7, 0xE4, 0xB0, 0x47, 0x0C, 0xD9, 0x0B, 0x89, 0xEC, 0x03, 0x0D, 0x90, 0x28, 0xDF, 0x47, 0x36, 0x87, 0xFC, 0x7A, 0x0D, 0xCA, 0x1D, 0xAE, 0x80, 0xB4, 0xB8, 0x7F, 0x56, 0x3C, 0x0B, 0x28, 0x9E, 0x15, 0x63, 0x9B, 0x16, 0xA0, 0xAC, 0x25, 0xE6, 0xFF, 0x4F, 0x40, 0xBB, 0x4F, 0x62, 0x7E, 0x7B, 0x03, 0xA8, 0x0F, 0xA0, 0x36, 0x4B, 0x86, 0x1A, 0x0C, 0x23, 0xBB, 0x1E, 0x33, 0x70, 0x22, 0xCD, 0x57, 0xF6, 0x90, 0x26, 0x87, 0x57, 0x99, 0x56, 0x91, 0x73, 0x26, 0x19, 0x2C, 0x24, 0xE3, 0xCF, 0xE8, 0x82, 0x3C, 0x61, 0xA5, 0xB1, 0x9A, 0x2C, 0x88, 0x97, 0x4B, 0x20, 0xDF, 0x5C, 0x91, 0xE9, 0xF7, 0x37, 0x1A, 0xA8, 0xDD, 0x2F, 0xFD, 0xAE, 0xE6, 0x1D, 0x68, 0x3C, 0xEF, 0x54, 0xE6, 0x43, 0x2A, 0xD5, 0xFC, 0x93, 0xFA, 0xDA, 0xCD, 0x07, 0xE4, 0x9C, 0x44, 0x7B, 0xB4, 0x01, 0xC5, 0x6C, 0xD1, 0x9E, 0x54, 0x40, 0x39, 0x55, 0xE4, 0x90, 0x25, 0x40, 0x7B, 0x1E, 0x73, 0xD0, 0x5D, 0x95, 0xD4, 0x2C, 0xD7, 0xDF, 0x44, 0x1A, 0x06, 0x98, 0x1F, 0x21, 0x87, 0x5E, 0xB4, 0x6C, 0x4F, 0x46, 0xD9, 0x18, 0x9E, 0x24, 0xF7, 0xB4, 0xED, 0xBA, 0x99, 0x3C, 0xDF, 0xAC, 0xAC, 0x47, 0x3E, 0x71, 0x94, 0xD9, 0x40, 0x56, 0x26, 0x4B, 0x9E, 0xFC, 0x69, 0x0B, 0xB4, 0x48, 0x2B, 0x44, 0x94, 0x4F, 0x06, 0x44, 0x8D, 0x87, 0x8F, 0x3A, 0x82, 0x14, 0xAF, 0xD7, 0xAD, 0x1E, 0x9C, 0x42, 0x4F, 0xB0, 0x72, 0x8F, 0x00, 0xC5, 0xE9, 0xA2, 0x3D, 0xD9, 0xDC, 0x9E, 0x76, 0x61, 0x40, 0xDB, 0x33, 0xE2, 0xF3, 0x0D, 0x40, 0xA7, 0x37, 0xF4, 0x7A, 0x1D, 0xFE, 0xE8, 0x7D, 0x20, 0xBB, 0x3D, 0x31, 0x9F, 0x4F, 0x0E, 0x1D, 0xDF, 0x6B, 0x06, 0xB9, 0xB4, 0xCA, 0x68, 0x3F, 0x99, 0xDA, 0xBB, 0x73, 0x17, 0x32, 0x77, 0x51, 0x9B, 0xAF, 0xE4, 0xFB, 0xFA, 0x36, 0xB2, 0x75, 0xB3, 0x81, 0x26, 0x19, 0x85, 0xD5, 0x65, 0xCF, 0x41, 0xF3, 0x4A, 0xF5, 0x83, 0x36, 0x20, 0x0D, 0x4E, 0xDE, 0x22, 0x25, 0xC4, 0x1E, 0x48, 0x83, 0xB7, 0x5C, 0xBF, 0xDB, 0x19, 0x56, 0xE7, 0x1B, 0x2B, 0x27, 0x01, 0x28, 0x8A, 0xFC, 0xA5, 0x64, 0x02, 0x28, 0x99, 0x88, 0x3C, 0xD4, 0x19, 0x68, 0x47, 0xEB, 0x2F, 0x68, 0x3B, 0xB4, 0x73, 0x15, 0x69, 0xE0, 0xA5, 0x7B, 0x41, 0xAC, 0x1D, 0x78, 0x04, 0x44, 0x71, 0xA6, 0x88, 0xE9, 0xAB, 0xFC, 0xAD, 0x61, 0x13, 0x70, 0xAC, 0x0C, 0x28, 0xEF, 0x05, 0xE4, 0x26, 0x02, 0x2F, 0xAE, 0x01, 0xA5, 0x65, 0xC0, 0x7D, 0xDA, 0x9F, 0xAB, 0x05, 0xE4, 0xBA, 0x81, 0x5E, 0x3B, 0xEF, 0xC0, 0x43, 0x12, 0x58, 0xF7, 0x8E, 0xA4, 0xC3, 0x3C, 0x1F, 0x20, 0x0D, 0x75, 0xD9, 0xEE, 0x16, 0xAC, 0xDE, 0x73, 0x56, 0x71, 0x16, 0x20, 0x27, 0xCE, 0xB3, 0xFC, 0x60, 0x80, 0xEE, 0xCB, 0x81, 0x76, 0xDB, 0x15, 0xFA, 0x0A, 0x7D, 0x7A, 0xBF, 0x01, 0x2A, 0x5C, 0x00, 0xEF, 0x69, 0xC0, 0x83, 0xFB, 0xC0, 0x3C, 0xE1, 0x8D, 0x6C, 0x60, 0x57, 0x7B, 0xE0, 0x42, 0x67, 0xE0, 0x92, 0x26, 0x90, 0x61, 0x09, 0xBC, 0xAA, 0x05, 0x76, 0xCF, 0x07, 0x6A, 0x43, 0x80, 0x8D, 0x4F, 0xB8, 0xEE, 0x6C, 0x43, 0x76, 0xFC, 0x1D, 0x92, 0x0E, 0xE7, 0x9E, 0x00, 0x69, 0xEB, 0xC0, 0xF6, 0xFA, 0xC6, 0x1A, 0xAF, 0x67, 0xB5, 0x7F, 0x91, 0xCD, 0x55, 0xF2, 0xD7, 0xC8, 0xE2, 0x63, 0x80, 0x4C, 0x14, 0x50, 0x38, 0x1A, 0xE8, 0x5E, 0x08, 0x64, 0xEB, 0x01, 0xAE, 0x16, 0xC0, 0xBE, 0x70, 0x20, 0x38, 0x06, 0xD8, 0x16, 0x07, 0xAC, 0xFC, 0x04, 0xAC, 0xD2, 0x07, 0x4E, 0xEC, 0x05, 0xA2, 0x43, 0x80, 0xE7, 0x4D, 0x40, 0x98, 0x39, 0xF0, 0xE3, 0x13, 0xE0, 0x1E, 0xC9, 0x75, 0x07, 0xB0, 0x70, 0x8C, 0x22, 0xE9, 0x70, 0x8F, 0x06, 0xC8, 0xE1, 0xF3, 0xD8, 0x81, 0x1D, 0xD8, 0x3E, 0x76, 0x64, 0xC5, 0x17, 0x5D, 0x0B, 0x32, 0x6F, 0xAD, 0x52, 0x38, 0x79, 0x6C, 0x19, 0x00, 0x00, 0x09, 0x74, 0x77, 0x71, 0x05, 0x98, 0x79, 0x0A, 0x30, 0x3F, 0x0C, 0x8C, 0x4D, 0x07, 0x06, 0xF6, 0x06, 0xBC, 0x85, 0x61, 0x8B, 0x81, 0x11, 0x1F, 0x81, 0x94, 0x49, 0x40, 0xDF, 0x1C, 0xE0, 0x56, 0x18, 0x60, 0x25, 0x05, 0x7C, 0xED, 0x0D, 0xE8, 0xED, 0xE3, 0xBA, 0x5D, 0xBF, 0xB3, 0x5A, 0x87, 0x48, 0x3A, 0xA6, 0xEC, 0x00, 0x40, 0x5A, 0x91, 0x4D, 0x4D, 0x5E, 0x63, 0xC9, 0x92, 0x24, 0xD7, 0x44, 0xF2, 0xBA, 0xBD, 0x55, 0x28, 0xB9, 0xA7, 0x40, 0xF7, 0x1C, 0xB9, 0xD8, 0x56, 0x75, 0x15, 0xE9, 0x4B, 0x5F, 0x05, 0x60, 0x45, 0xCF, 0xC7, 0xF6, 0x03, 0xA6, 0x83, 0x01, 0xCB, 0xD5, 0x80, 0xA1, 0x2F, 0x30, 0xFE, 0x20, 0xD0, 0xB5, 0x0F, 0x90, 0xB2, 0x0F, 0x50, 0x99, 0x00, 0xBC, 0xB8, 0x29, 0x3D, 0x5F, 0x41, 0x19, 0xF8, 0xED, 0x25, 0xBD, 0x94, 0x6B, 0x49, 0xF9, 0xB0, 0x00, 0x2B, 0xE1, 0x29, 0x56, 0xA1, 0x5B, 0xF7, 0xCF, 0x6F, 0x32, 0x22, 0x4B, 0x06, 0xCF, 0xFE, 0x48, 0x5E, 0x8F, 0x19, 0x7B, 0x9D, 0x4C, 0x92, 0x72, 0x99, 0x4B, 0xCE, 0xF5, 0xEC, 0xFD, 0x89, 0x74, 0xDB, 0xA6, 0xB3, 0x9F, 0x34, 0xBE, 0xD8, 0x36, 0x80, 0xE4, 0xFF, 0x54, 0xD6, 0x00, 0x8A, 0x1E, 0x96, 0x4A, 0x0A, 0x85, 0x40, 0x87, 0xFC, 0x31, 0x19, 0x80, 0x70, 0x76, 0xC2, 0x1F, 0x90, 0x87, 0x6F, 0x4D, 0x24, 0x15, 0x03, 0x7E, 0xFA, 0x93, 0x54, 0xEB, 0xBF, 0x6D, 0x1E, 0xBC, 0xCF, 0x14, 0x00, 0x7E, 0xCA, 0xA5, 0x9C, 0x27, 0x0B, 0xD6, 0xAF, 0xCD, 0x22, 0x0F, 0xF4, 0x9D, 0x3E, 0x96, 0x9C, 0xFF, 0xD4, 0xF7, 0x10, 0xE9, 0x3E, 0xCB, 0x79, 0x12, 0x69, 0xBA, 0xDD, 0x22, 0x95, 0x94, 0x7A, 0x6E, 0x5E, 0x4D, 0x02, 0x7A, 0xBA, 0xB2, 0x33, 0x49, 0xCD, 0x94, 0x1E, 0x17, 0xC8, 0x2E, 0xC5, 0x63, 0x3E, 0x92, 0x1A, 0x73, 0x57, 0xC7, 0x91, 0x9D, 0xBF, 0x5F, 0x5D, 0x46, 0xAA, 0xCE, 0xF9, 0x16, 0x45, 0xD2, 0xDF, 0x34, 0x25, 0x25, 0x2D, 0x59, 0x78, 0x91, 0x9F, 0xA7, 0x67, 0xE4, 0x03, 0x40, 0xF1, 0xD5, 0xD3, 0xAA, 0x64, 0xE6, 0xBB, 0x1D, 0x04, 0x96, 0x8F, 0x8F, 0x5A, 0x48, 0xFA, 0xAD, 0x0D, 0x9E, 0x45, 0xF6, 0xB4, 0x19, 0x35, 0x81, 0x94, 0x0E, 0xF5, 0x1A, 0x4D, 0x02, 0x2E, 0xD3, 0xA5, 0xC6, 0x91, 0xD6, 0x63, 0xD4, 0xF2, 0x49, 0x8B, 0x7D, 0x8E, 0xED, 0x49, 0x73, 0xB7, 0x09, 0x77, 0x49, 0xC3, 0xDF, 0xAB, 0x3E, 0x91, 0xA6, 0xA6, 0x97, 0xAD, 0x48, 0x83, 0x63, 0xF7, 0xFF, 0x90, 0xBA, 0x43, 0xB9, 0xBE, 0x5A, 0x04, 0xAB, 0xD4, 0x48, 0xBE, 0x0C, 0xBA, 0x5C, 0x05, 0x00, 0x39, 0xAF, 0x2E, 0xE4, 0x91, 0x9B, 0xB3, 0xF7, 0x4E, 0x25, 0x83, 0x53, 0x56, 0x2D, 0x21, 0xAD, 0x8F, 0x46, 0x17, 0x93, 0x0A, 0x37, 0x17, 0x38, 0x93, 0xC0, 0x0C, 0x13, 0x76, 0xC2, 0xFA, 0xB6, 0xFB, 0x48, 0xDF, 0xDF, 0xDD, 0x2F, 0x92, 0x1E, 0x5D, 0xFA, 0x4D, 0x25, 0x87, 0x74, 0x9C, 0x7A, 0x82, 0x74, 0x79, 0x17, 0x69, 0xCB, 0xF9, 0xEC, 0xAC, 0x3F, 0x39, 0x70, 0x7B, 0x41, 0x31, 0x69, 0xCB, 0xF3, 0x3E, 0xCC, 0x37, 0xB1, 0xBA, 0x73, 0xC8, 0xBC, 0x8B, 0x05, 0x93, 0x00, 0xE0, 0x80, 0xE3, 0x95, 0x12, 0x72, 0xC6, 0xDC, 0x23, 0x16, 0xE4, 0x20, 0xFF, 0xE4, 0x44, 0x52, 0xE3, 0x6E, 0x92, 0x1E, 0x09, 0xEC, 0x1A, 0xC3, 0x6E, 0x7B, 0xA6, 0xBA, 0x85, 0xDC, 0xBA, 0xDE, 0x7C, 0x37, 0xB9, 0xE5, 0x5B, 0xEF, 0x97, 0xE4, 0xA6, 0x5E, 0x3E, 0x5D, 0xC8, 0xA8, 0x5B, 0x51, 0x69, 0xE4, 0xA2, 0xED, 0xFB, 0xBF, 0x90, 0xF3, 0x0B, 0xD3, 0x07, 0x90, 0x73, 0xF3, 0xAA, 0x62, 0x40, 0x6E, 0xE6, 0xFA, 0x41, 0x03, 0x59, 0x87, 0x58, 0x32, 0x23, 0xF8, 0x91, 0x13, 0x00, 0x2C, 0xD1, 0xCB, 0x75, 0x26, 0xDD, 0x67, 0x5E, 0x3C, 0x43, 0x1A, 0xCC, 0x39, 0x77, 0x9E, 0x04, 0xCE, 0x6E, 0x64, 0xCF, 0x1D, 0x52, 0xBA, 0x49, 0x9E, 0xFF, 0x6C, 0x7A, 0x19, 0xE4, 0xF3, 0x41, 0x2F, 0xC9, 0xB3, 0x2E, 0x01, 0xB9, 0xBC, 0xD3, 0x6E, 0xE2, 0x5A, 0x32, 0xEB, 0xE1, 0xAC, 0x32, 0x90, 0x95, 0xBB, 0x2E, 0x90, 0xA7, 0x56, 0x65, 0x3D, 0x25, 0x33, 0x36, 0xDE, 0x1B, 0x4C, 0x1E, 0x9D, 0xC7, 0xF5, 0xE3, 0xD3, 0xD9, 0x99, 0xAF, 0xC8, 0xCD, 0x51, 0xAF, 0x97, 0x02, 0xC0, 0x98, 0xC4, 0xA2, 0x58, 0xD2, 0xF2, 0xCE, 0x5D, 0x1F, 0x52, 0xC9, 0xFF, 0x5E, 0x30, 0x09, 0x3C, 0x59, 0x27, 0xAB, 0x4D, 0xBE, 0xD2, 0x33, 0x36, 0x25, 0x3F, 0x2E, 0x73, 0x1D, 0x4E, 0xFE, 0x18, 0x38, 0xFA, 0x35, 0xF9, 0x5B, 0x35, 0x6C, 0x0F, 0x59, 0xFB, 0x6C, 0x95, 0x0F, 0xC8, 0x59, 0x3B, 0xB7, 0x91, 0xD5, 0xDD, 0xD3, 0xC3, 0xC9, 0x4F, 0xC7, 0x6E, 0xEC, 0x27, 0xDF, 0x4B, 0x3D, 0xF9, 0x42, 0x96, 0x84, 0x37, 0x68, 0x90, 0xB7, 0x97, 0x73, 0x3B, 0xF6, 0x86, 0x93, 0x53, 0x3C, 0x3F, 0xF4, 0x00, 0x00, 0xBB, 0x31, 0xAF, 0xC6, 0x93, 0x1A, 0x13, 0x4A, 0xBC, 0x48, 0xDA, 0x3F, 0xC4, 0x8A, 0xA7, 0xEF, 0x19, 0xEC, 0x40, 0x3F, 0xD6, 0xE7, 0x0C, 0x1B, 0xDC, 0x96, 0x9D, 0xF9, 0x9B, 0x8D, 0x3B, 0xCE, 0x6E, 0x5F, 0x04, 0xF2, 0x42, 0x6A, 0xEB, 0xF7, 0x65, 0x9F, 0x26, 0x9B, 0x9F, 0x14, 0x3A, 0x90, 0x0D, 0x75, 0xC5, 0x59, 0xFC, 0xF5, 0xBA, 0xFE, 0x64, 0x51, 0x25, 0xB5, 0x63, 0xD0, 0x9B, 0xCA, 0x42, 0x00, 0xD0, 0x95, 0xAB, 0x4E, 0x21, 0x21, 0xAE, 0x26, 0xC9, 0x82, 0x36, 0x1A, 0xF4, 0xFF, 0xE9, 0xAF, 0x04, 0x48, 0x9B, 0x30, 0x76, 0x58, 0x23, 0xEB, 0x9F, 0xC8, 0x06, 0x83, 0x9D, 0xE9, 0xC9, 0x2E, 0xD1, 0x65, 0x37, 0x5F, 0x03, 0x59, 0xB8, 0xAF, 0x0F, 0xC8, 0x21, 0x22, 0x71, 0x93, 0x53, 0x2F, 0xA8, 0x91, 0xCD, 0x03, 0x6E, 0x7F, 0x20, 0x1B, 0xDB, 0xBC, 0x06, 0x48, 0xAF, 0xDA, 0x43, 0xA0, 0xB9, 0xB7, 0x11, 0x80, 0x98, 0x4F, 0xA5, 0x9B, 0x00, 0xE9, 0x26, 0x71, 0xEF, 0xBB, 0x10, 0x90, 0x11, 0x79, 0x46, 0x76, 0x38, 0x20, 0x3B, 0x9C, 0xDA, 0x2A, 0x95, 0xDB, 0x56, 0x82, 0xEC, 0x90, 0xD0, 0x21, 0x81, 0xD4, 0x45, 0x27, 0x2B, 0x31, 0xEF, 0x4D, 0xEC, 0xD7, 0x53, 0x9E, 0x7E, 0x67, 0xE1, 0x86, 0x7F, 0x14, 0x68, 0x4C, 0xD4, 0x9A, 0x37, 0x50, 0x9D, 0x32, 0x38, 0xB6, 0x85, 0x75, 0xF1, 0x23, 0x8F, 0x8F, 0xD6, 0x38, 0x45, 0xE6, 0x2E, 0x53, 0x3E, 0x47, 0xBE, 0x4E, 0x92, 0x5F, 0xF3, 0x47, 0x17, 0xF8, 0xA1, 0x24, 0x5F, 0xF4, 0x61, 0x07, 0xD0, 0xF4, 0xB1, 0xED, 0xCF, 0xE7, 0xE1, 0x80, 0xC8, 0x5A, 0xE2, 0xDA, 0x55, 0x89, 0xE2, 0x9F, 0x42, 0x7E, 0x34, 0x20, 0xA9, 0x25, 0xDA, 0x13, 0x01, 0x48, 0x47, 0x88, 0xF6, 0xCC, 0x06, 0x64, 0x66, 0x8B, 0xD7, 0x7F, 0x03, 0x28, 0xEA, 0xD0, 0xEB, 0xB4, 0xDD, 0xDB, 0x76, 0x2F, 0xD9, 0x75, 0xA9, 0xFA, 0x6B, 0x31, 0x77, 0x7F, 0xED, 0x3B, 0x54, 0x4E, 0xE4, 0x0B, 0xF5, 0x64, 0x7F, 0x9E, 0x33, 0xB1, 0xA0, 0xA1, 0x63, 0x03, 0xB9, 0x6B, 0xA6, 0xE6, 0x2C, 0xF2, 0xCC, 0x5F, 0x95, 0x85, 0x64, 0xD1, 0x13, 0xE5, 0xAE, 0x75, 0xB7, 0x81, 0x2F, 0x1B, 0x15, 0x8E, 0x7C, 0x4C, 0x04, 0x1A, 0xC6, 0xB7, 0x5D, 0xFD, 0x9C, 0xFF, 0x52, 0xD4, 0xF4, 0xBC, 0xF1, 0x64, 0x5B, 0xB1, 0x8E, 0xD1, 0xA9, 0xF5, 0xDD, 0x6F, 0x9F, 0xC4, 0xCA, 0x48, 0x00, 0x52, 0x4B, 0xC5, 0x1C, 0xD0, 0x22, 0x6C, 0x11, 0x9F, 0xD7, 0x02, 0x32, 0xB4, 0xCF, 0x17, 0xF2, 0x57, 0x14, 0xB7, 0x91, 0x9D, 0xF2, 0x55, 0x17, 0x8A, 0x76, 0xCC, 0x71, 0xB8, 0x2C, 0x37, 0x47, 0xE4, 0x92, 0x8C, 0x80, 0xBE, 0xDC, 0x8E, 0x45, 0x5D, 0xBA, 0x74, 0x21, 0x93, 0xDF, 0xA9, 0x1F, 0x27, 0xAF, 0x4D, 0x51, 0xF2, 0x68, 0x2A, 0x05, 0xDE, 0x5E, 0x52, 0x7C, 0xF2, 0xC5, 0x11, 0xF8, 0x53, 0xAA, 0xFC, 0xE8, 0xE9, 0x1E, 0x40, 0x64, 0x3C, 0xE5, 0x6B, 0x3F, 0x49, 0x85, 0x77, 0x07, 0xE2, 0x48, 0x3A, 0x74, 0x6D, 0x01, 0xB2, 0x53, 0x3D, 0xDB, 0x2E, 0x9B, 0x95, 0x9A, 0x0E, 0x48, 0x4D, 0x17, 0xDE, 0x14, 0xDE, 0xFC, 0x3F, 0xF9, 0x74, 0xBC, 0xBC, 0x1A, 0xA9, 0x61, 0xA2, 0xB4, 0x48, 0xF4, 0xA2, 0x4A, 0x9B, 0x5B, 0x92, 0x95, 0xE2, 0xDF, 0x3B, 0xFB, 0xFE, 0x05, 0x1A, 0x3F, 0x01, 0x4B, 0x82, 0x64, 0xE4, 0x3E, 0xCC, 0x02, 0x92, 0xCD, 0xA4, 0x36, 0x3C, 0xF3, 0x00, 0x2E, 0x0C, 0x00, 0x0A, 0xE5, 0x80, 0xE7, 0xA1, 0xC0, 0xE5, 0x25, 0x40, 0xAD, 0x15, 0x90, 0xF5, 0x1E, 0xF4, 0xB3, 0xEE, 0x8F, 0xEF, 0x44, 0x02, 0x51, 0xDD, 0x49, 0x3A, 0x4C, 0x87, 0x03, 0xA4, 0x5E, 0x2D, 0xDB, 0x55, 0x8A, 0xED, 0x90, 0xCA, 0xCA, 0x26, 0xB0, 0x80, 0xC4, 0x50, 0xC9, 0xAE, 0x64, 0xC7, 0xFB, 0xC0, 0x67, 0x2B, 0xC0, 0x3C, 0x13, 0x78, 0xB2, 0x91, 0xF6, 0x82, 0x00, 0x37, 0x23, 0x81, 0xC9, 0x3B, 0x81, 0x93, 0xFE, 0xC0, 0xAA, 0x2F, 0xC0, 0x41, 0x45, 0xDA, 0x3B, 0x0B, 0x6C, 0xF3, 0x07, 0x0A, 0x1B, 0x80, 0x58, 0x29, 0xE0, 0x4B, 0x01, 0x30, 0x7F, 0x38, 0xBF, 0x56, 0xD0, 0x16, 0xD6, 0xFD, 0x0C, 0x49, 0x87, 0xBD, 0x05, 0x40, 0x5A, 0x1D, 0x62, 0x4D, 0x3E, 0xB3, 0xBA, 0x04, 0x9A, 0x2F, 0xB6, 0xFD, 0x40, 0xBE, 0xE1, 0x69, 0x07, 0x85, 0x9A, 0x40, 0x1B, 0x33, 0xE0, 0xBC, 0x1B, 0xA0, 0xDB, 0x13, 0x48, 0x3D, 0x01, 0xD8, 0x0D, 0x03, 0xD6, 0x6E, 0x06, 0x3C, 0xA7, 0x00, 0xF3, 0xED, 0x80, 0x19, 0x9B, 0x81, 0xF0, 0x2C, 0x60, 0xD7, 0x2C, 0x60, 0xEC, 0x28, 0xE0, 0xA6, 0x1C, 0xE0, 0x36, 0x13, 0x78, 0xBF, 0x1F, 0x70, 0xBE, 0xC2, 0x75, 0x7B, 0xEF, 0x64, 0xCD, 0x1E, 0x91, 0x74, 0x0C, 0x7D, 0x0D, 0x90, 0x2E, 0x17, 0x58, 0xFB, 0xC7, 0xE4, 0x8F, 0x5A, 0xD3, 0x79, 0xE4, 0x93, 0xD7, 0x5A, 0x9D, 0xC8, 0x73, 0x4F, 0x15, 0x7A, 0x93, 0x7B, 0x3F, 0x48, 0xDC, 0x21, 0x57, 0x54, 0x02, 0x6D, 0x9D, 0x80, 0x49, 0x2A, 0x80, 0xDE, 0x6D, 0xC0, 0xF3, 0x26, 0x60, 0xB7, 0x06, 0xE8, 0x97, 0x09, 0x04, 0x96, 0x00, 0xD6, 0xE5, 0x40, 0x82, 0x25, 0x60, 0x62, 0x0B, 0x5C, 0xEE, 0x08, 0x74, 0x1B, 0x0D, 0x94, 0x2E, 0x01, 0x3A, 0x65, 0x03, 0x7C, 0xED, 0xB1, 0xED, 0xBB, 0x93, 0x74, 0x04, 0xCA, 0x02, 0xA4, 0xBF, 0x36, 0xF9, 0xF9, 0xBD, 0x5B, 0x1A, 0xF9, 0xD0, 0xB5, 0xDF, 0x50, 0x32, 0xEB, 0xB1, 0x99, 0x11, 0xB9, 0x79, 0x87, 0x4E, 0x37, 0x72, 0xE6, 0xD9, 0xB6, 0x8B, 0x49, 0x77, 0x7B, 0xE9, 0x4B, 0x64, 0xAF, 0x41, 0x40, 0x5B, 0x19, 0x40, 0x47, 0x1A, 0x30, 0x5D, 0x01, 0x74, 0x78, 0x05, 0x04, 0xCC, 0x00, 0xE4, 0x2C, 0x81, 0xCD, 0xB9, 0x00, 0x5E, 0x00, 0xD7, 0x27, 0x0B, 0x01, 0x54, 0x7F, 0xFB, 0x7F, 0xE7, 0x8F, 0xA6, 0xE5, 0x4B, 0xD4, 0x01, 0xE0, 0x57, 0x97, 0x25, 0x4B, 0xC8, 0x27, 0xF3, 0x26, 0xE7, 0x92, 0x67, 0x1D, 0xBD, 0x87, 0x93, 0x1B, 0x1F, 0x3B, 0xE9, 0x90, 0xE1, 0xA3, 0x7A, 0xDC, 0x23, 0x5D, 0xBD, 0x34, 0x2D, 0x48, 0xFD, 0xEE, 0x0A, 0xE3, 0xF1, 0x1F, 0xFF, 0xF1, 0x19, 0x05, 0x46, 0x5D, 0x63, 0x57, 0x36, 0xB3, 0x57, 0x35, 0xD9, 0xAA, 0xC2, 0xFF, 0x77, 0x3B, 0x6A, 0x77, 0xEF, 0x90, 0x06, 0x80, 0x0F, 0x0F, 0x76, 0xC4, 0x93, 0xD7, 0xFE, 0xAE, 0xB0, 0x26, 0x13, 0xDF, 0x85, 0x1E, 0x23, 0xA7, 0x45, 0x8E, 0x8C, 0x24, 0x07, 0xBF, 0xB0, 0x79, 0x4F, 0xEA, 0x7B, 0x1B, 0x39, 0x90, 0x40, 0xB7, 0x30, 0x56, 0xE1, 0xA3, 0xEA, 0x54, 0x52, 0x7A, 0xB3, 0x79, 0x4F, 0x12, 0x35, 0x1E, 0xFA, 0x84, 0x44, 0xDA, 0x72, 0x02, 0x92, 0x52, 0x27, 0x57, 0x90, 0xC0, 0xB3, 0xDB, 0xA0, 0xCF, 0xDB, 0xFF, 0xDF, 0xDA, 0xF1, 0xD6, 0x25, 0x2D, 0x1B, 0x00, 0x1E, 0x1A, 0x1D, 0xF1, 0x27, 0x0F, 0xAB, 0x6C, 0xAC, 0x27, 0xA3, 0x22, 0x78, 0xD6, 0xF4, 0x48, 0x08, 0xF0, 0x27, 0x8D, 0xAF, 0x8F, 0xB0, 0x27, 0x01, 0xD7, 0x97, 0x6C, 0x9F, 0xB1, 0xD2, 0xDB, 0x49, 0x03, 0x23, 0xB5, 0x18, 0xB2, 0x53, 0x95, 0x5D, 0x15, 0xA9, 0x21, 0xE9, 0x57, 0x4F, 0x76, 0xF0, 0xE6, 0x76, 0xA8, 0xF5, 0x3C, 0x99, 0x45, 0xAA, 0xE4, 0x14, 0x76, 0x23, 0x55, 0xFB, 0x72, 0x7D, 0xC5, 0x63, 0xAC, 0xF4, 0x22, 0xF2, 0xE1, 0xDD, 0xF3, 0x46, 0x00, 0x70, 0x21, 0x34, 0xEB, 0x37, 0xB9, 0x7A, 0x7D, 0x62, 0x0A, 0x19, 0xD8, 0x7B, 0x79, 0x33, 0xD9, 0xD3, 0x3F, 0xF2, 0x37, 0x29, 0x6B, 0x3C, 0xED, 0x29, 0x09, 0x8C, 0x4B, 0x41, 0x12, 0x39, 0x4A, 0xBF, 0x1D, 0x89, 0xC1, 0x16, 0x3D, 0xDE, 0x90, 0x8E, 0x53, 0x86, 0x78, 0x92, 0xD6, 0x07, 0x82, 0x09, 0x58, 0x3C, 0x8E, 0x7A, 0x4A, 0x5A, 0xCE, 0xC9, 0xB0, 0x21, 0x2D, 0xF4, 0xF2, 0xC6, 0x93, 0xE6, 0x77, 0xB9, 0x7E, 0xF7, 0x48, 0x56, 0x23, 0x95, 0xBC, 0x7A, 0x2C, 0x4F, 0x19, 0x00, 0xF6, 0xE8, 0x5F, 0x52, 0x21, 0x27, 0xCF, 0x3B, 0xFC, 0x9D, 0x74, 0x32, 0x49, 0x1A, 0x42, 0xAA, 0xBC, 0x4F, 0xD8, 0x48, 0x02, 0x9B, 0x17, 0x4B, 0x06, 0x90, 0xEB, 0x3E, 0x29, 0x65, 0x92, 0xAB, 0x66, 0x18, 0xCE, 0x24, 0xA3, 0x9C, 0x2D, 0xE7, 0x90, 0xB3, 0xB7, 0x7A, 0x04, 0x90, 0x53, 0x9D, 0xE6, 0xE4, 0x92, 0x11, 0x3F, 0x37, 0x45, 0x92, 0x61, 0x96, 0x47, 0x09, 0xF8, 0xDF, 0x7B, 0xF0, 0x86, 0x0C, 0xBB, 0xC9, 0xF5, 0x3D, 0x8A, 0xD9, 0x9E, 0xB7, 0xC9, 0xB4, 0x65, 0x45, 0xD3, 0x01, 0x20, 0x4A, 0x27, 0xB7, 0x0F, 0x39, 0xEC, 0xCF, 0xF9, 0x07, 0x64, 0x37, 0xCF, 0xEC, 0x68, 0x12, 0xC8, 0x92, 0x07, 0x3B, 0x43, 0x65, 0x13, 0x99, 0xAD, 0x6C, 0x76, 0x17, 0x64, 0x1B, 0x17, 0x7D, 0xF2, 0x74, 0x8C, 0x77, 0x0C, 0x99, 0xD9, 0x3C, 0x31, 0x95, 0xCC, 0x50, 0x89, 0x74, 0x27, 0x8F, 0x66, 0x27, 0xDE, 0x20, 0xD3, 0x72, 0x4E, 0xA5, 0x90, 0xBB, 0x8F, 0x17, 0xB6, 0x05, 0xC9, 0x79, 0x0C, 0xEB, 0x4F, 0xB2, 0x13, 0x63, 0xC8, 0xB5, 0xD5, 0xAF, 0x7B, 0x83, 0x5A, 0xDB, 0xA6, 0xE8, 0x04, 0x69, 0x6E, 0x7A, 0xA7, 0x8C, 0x54, 0x34, 0xBD, 0x7B, 0x98, 0x04, 0x1E, 0x5D, 0x56, 0x7A, 0x43, 0xBE, 0xB4, 0x37, 0x5D, 0x48, 0x96, 0x79, 0x0D, 0xF4, 0x22, 0x3F, 0x4F, 0xF2, 0x4F, 0x22, 0xBF, 0x3C, 0x9F, 0x64, 0x47, 0x7E, 0xBA, 0x19, 0x6B, 0x41, 0x7E, 0x74, 0xD9, 0xBE, 0x9C, 0x2C, 0xBD, 0x7A, 0xF4, 0x16, 0x59, 0x72, 0xF2, 0xCA, 0x49, 0xF2, 0xE5, 0x94, 0x07, 0xDA, 0xE4, 0xD3, 0x9D, 0x3F, 0x12, 0xC9, 0x5C, 0x3D, 0x6E, 0x47, 0x62, 0x0F, 0x32, 0xEC, 0xD8, 0xFB, 0x0C, 0x00, 0xB0, 0xF9, 0xF0, 0x3A, 0x98, 0x54, 0x1F, 0xFB, 0xF6, 0x18, 0x09, 0x54, 0xCD, 0x96, 0x89, 0x26, 0x5B, 0xFC, 0x0C, 0x5B, 0xF7, 0xF1, 0x0C, 0xCA, 0x64, 0x7D, 0x0D, 0xD8, 0x60, 0xB0, 0xB3, 0x83, 0xD8, 0x55, 0xD3, 0x40, 0xCA, 0xEC, 0x70, 0x23, 0x9B, 0xB3, 0x0F, 0x6C, 0x00, 0x19, 0x98, 0xBD, 0x89, 0x6C, 0x68, 0xB9, 0xD5, 0x86, 0xAC, 0xD3, 0x7E, 0x71, 0x01, 0x64, 0x7C, 0x4D, 0x04, 0x79, 0x37, 0x8A, 0xDA, 0xD1, 0x3F, 0x8D, 0x76, 0x4C, 0x00, 0xDA, 0xBE, 0x35, 0x77, 0x04, 0x9C, 0x44, 0x96, 0xCB, 0x14, 0x82, 0xEE, 0xB8, 0x97, 0x01, 0xA4, 0x6D, 0x30, 0x3B, 0x3C, 0x97, 0x0D, 0xC8, 0xF8, 0x8F, 0xFD, 0xD1, 0xCF, 0xD9, 0xD8, 0x05, 0x20, 0x67, 0x6F, 0x25, 0xD0, 0x32, 0x7D, 0xDF, 0x0C, 0xB2, 0x79, 0xD3, 0x91, 0x27, 0x20, 0x47, 0x9C, 0x4F, 0x23, 0x1B, 0x4E, 0x14, 0x64, 0x93, 0x75, 0xDD, 0x5F, 0x78, 0x81, 0x9C, 0xF7, 0x7D, 0x3D, 0x09, 0x0B, 0x8C, 0xC1, 0x5A, 0x9C, 0xC3, 0xFF, 0x47, 0x10, 0x3C, 0x00, 0x0B, 0x15, 0x00, 0x00, 0x00, 0xBB, 0x67, 0xDB, 0x76, 0xB6, 0x6D, 0xDB, 0xB6, 0x6D, 0xDB, 0xB6, 0xDD, 0x21, 0xDB, 0xB6, 0x6D, 0xDB, 0xB6, 0xDD, 0xDF, 0x9E, 0x02, 0x22, 0x50, 0x04, 0xE8, 0x04, 0xCC, 0x07, 0x4E, 0x02, 0xDF, 0xC1, 0x04, 0xAC, 0x06, 0x0E, 0x01, 0xD7, 0x81, 0x77, 0x20, 0x02, 0xCA, 0x0D, 0xB5, 0x84, 0xA6, 0x43, 0x07, 0xA1, 0x77, 0xB0, 0x0D, 0x97, 0x83, 0xFB, 0xC0, 0xCB, 0xE0, 0x2B, 0x08, 0x80, 0x64, 0x46, 0x1A, 0x22, 0xE3, 0x91, 0x9D, 0xC8, 0x73, 0x54, 0x46, 0x8B, 0xA1, 0x5D, 0xD0, 0x45, 0xE8, 0x19, 0xF4, 0x17, 0x96, 0x06, 0xAB, 0x85, 0x0D, 0xC7, 0x36, 0x62, 0xF7, 0x71, 0x06, 0xCF, 0x8F, 0xB7, 0xC5, 0x67, 0xE3, 0x47, 0xF1, 0xCF, 0x44, 0x40, 0x54, 0x26, 0x06, 0x12, 0xAB, 0x89, 0x9B, 0x24, 0x46, 0xE6, 0x24, 0x9B, 0x93, 0x53, 0xC9, 0xFD, 0xE4, 0x5B, 0xCA, 0xA2, 0xCA, 0x52, 0xBD, 0xA9, 0xA5, 0xD4, 0x65, 0x1A, 0xA0, 0x33, 0xD3, 0x0D, 0xE9, 0xF1, 0xF4, 0x4E, 0xFA, 0x39, 0xA3, 0x30, 0xC5, 0x99, 0xAE, 0xCC, 0x62, 0xE6, 0x2C, 0xF3, 0x9B, 0x4D, 0xCB, 0xD6, 0x61, 0x47, 0xB1, 0x5B, 0xD8, 0x47, 0x1C, 0xCF, 0x15, 0xE2, 0x3A, 0x70, 0xF3, 0xB8, 0x13, 0xDC, 0x77, 0x3E, 0xE1, 0xAB, 0xF3, 0x43, 0xF9, 0xF5, 0xFC, 0x5D, 0x81, 0x16, 0xF2, 0x09, 0x6D, 0x84, 0x59, 0xC2, 0x11, 0xE1, 0x93, 0x18, 0x88, 0x95, 0xC5, 0x81, 0xE2, 0x6A, 0xF1, 0xA6, 0x84, 0x4B, 0xB9, 0xA4, 0x16, 0xD2, 0x34, 0xE9, 0x80, 0xF4, 0x5E, 0x76, 0xE4, 0xF2, 0x72, 0x5F, 0x79, 0x85, 0x7C, 0x4D, 0x81, 0x95, 0x6C, 0x4A, 0x53, 0x65, 0xB2, 0xB2, 0x57, 0x79, 0xAD, 0x9A, 0x6A, 0x19, 0xB5, 0x97, 0xBA, 0x54, 0xBD, 0xAC, 0xC1, 0x5A, 0x51, 0x6D, 0x88, 0xB6, 0x4F, 0xFB, 0xAB, 0xE7, 0xD7, 0xFB, 0xEA, 0x3B, 0xF4, 0x6F, 0x46, 0x0E, 0xA3, 0xBB, 0xB1, 0xD1, 0xF8, 0x60, 0x66, 0x32, 0x3B, 0x9A, 0xAB, 0xCD, 0x57, 0x56, 0x1A, 0xAB, 0xB5, 0xB5, 0xD4, 0x7A, 0x62, 0x87, 0x76, 0x53, 0x7B, 0xB1, 0x7D, 0xCF, 0xB1, 0x9D, 0xFA, 0xCE, 0x5C, 0xE7, 0x86, 0xAB, 0xBA, 0x35, 0xDD, 0xE9, 0xEE, 0x25, 0x4F, 0xF0, 0x2A, 0x7B, 0x93, 0xBC, 0xB3, 0x3E, 0xE5, 0x97, 0xF3, 0xC7, 0xFA, 0xC7, 0x03, 0x34, 0x28, 0x19, 0x8C, 0x08, 0x0E, 0x85, 0x40, 0x58, 0x24, 0x1C, 0x1C, 0xEE, 0x0B, 0xFF, 0x44, 0xF9, 0xA3, 0x7E, 0xD1, 0xCE, 0xE8, 0x47, 0x9C, 0x3B, 0xEE, 0x15, 0x6F, 0x8D, 0xBF, 0x24, 0xD9, 0x93, 0x6E, 0x49, 0x0A, 0x1B, 0xE7, 0x00, 0x1E, 0x07, 0x00, 0xA0, 0xD9, 0xC6, 0x6C, 0x6C, 0x37, 0xB6, 0x6D, 0xDB, 0xB6, 0x6D, 0xDB, 0xB6, 0x8D, 0xC6, 0xB6, 0x6D, 0xDB, 0x6A, 0x6C, 0xDB, 0xBE, 0x39, 0xDF, 0xED, 0x6E, 0x30, 0xF8, 0x3C, 0x7C, 0xFF, 0x7B, 0x83, 0x7A, 0x92, 0x5B, 0x52, 0x3A, 0x52, 0x5B, 0xD2, 0x6A, 0xD2, 0x4B, 0x32, 0x2A, 0x32, 0x4B, 0xB2, 0x72, 0xB2, 0x53, 0x72, 0x72, 0x72, 0x33, 0xF2, 0x12, 0xF2, 0x23, 0x0A, 0x62, 0x0A, 0x63, 0x8A, 0x42, 0x8A, 0x7D, 0x4A, 0x42, 0x4A, 0x03, 0xCA, 0x3C, 0xCA, 0x5D, 0x2A, 0x7C, 0x2A, 0x5D, 0xAA, 0xBF, 0x54, 0x5B, 0xD4, 0xB8, 0xD4, 0xDA, 0xD4, 0xD9, 0xD4, 0x1B, 0x34, 0xD8, 0x34, 0x5A, 0x34, 0x99, 0x34, 0xFF, 0x68, 0x31, 0x69, 0x35, 0x68, 0x33, 0x68, 0xD7, 0xE8, 0x30, 0xE8, 0xD4, 0xE9, 0xD2, 0xE9, 0x56, 0xE9, 0xD1, 0xE9, 0xD5, 0xE8, 0xD3, 0xE8, 0x57, 0x19, 0xD0, 0x18, 0x54, 0x19, 0x52, 0x19, 0x56, 0x18, 0xD1, 0x18, 0x55, 0x19, 0x53, 0x19, 0x57, 0x98, 0xD0, 0x98, 0x54, 0x99, 0x52, 0x99, 0x56, 0x99, 0xD1, 0x99, 0xD5, 0x98, 0xD3, 0x98, 0x57, 0x59, 0x30, 0x58, 0xD4, 0x59, 0xD2, 0x59, 0xD6, 0x58, 0x31, 0x59, 0x35, 0x58, 0xB3, 0x58, 0xF7, 0xD9, 0x28, 0xD8, 0xEC, 0xD9, 0x5A, 0xD9, 0xBE, 0xD9, 0x45, 0xD8, 0xA3, 0xD9, 0x17, 0x39, 0xB0, 0x38, 0x0C, 0x38, 0xCA, 0x38, 0x6E, 0x38, 0xD9, 0x38, 0x7D, 0x39, 0x87, 0xB9, 0x7E, 0x73, 0x29, 0x73, 0x65, 0x71, 0x1D, 0x70, 0x53, 0x72, 0x3B, 0x72, 0x77, 0xF0, 0x00, 0xF1, 0x48, 0xF0, 0xC4, 0xF3, 0xAC, 0xF1, 0x12, 0xF0, 0x9A, 0xF3, 0xD6, 0xF2, 0xBE, 0xF0, 0xF1, 0xF1, 0x85, 0xF1, 0xCD, 0xF2, 0xA3, 0xF3, 0xEB, 0xF1, 0x97, 0xF2, 0xDF, 0x08, 0xB0, 0x0B, 0xF8, 0x0B, 0x8C, 0x09, 0x22, 0x08, 0x6A, 0x08, 0xE6, 0x0B, 0x9E, 0x09, 0x31, 0x0A, 0x79, 0x0A, 0x0D, 0x0A, 0xC3, 0x08, 0x2B, 0x0B, 0xE7, 0x08, 0x1F, 0x89, 0xD0, 0x8A, 0xB8, 0x89, 0xF4, 0x8A, 0x42, 0x8A, 0x2A, 0x88, 0x66, 0x8A, 0x1E, 0x88, 0x51, 0x8B, 0xB9, 0x88, 0xF5, 0x88, 0x43, 0x88, 0xCB, 0x8B, 0x67, 0x88, 0x1F, 0x48, 0x50, 0x4B, 0xB8, 0x48, 0xF4, 0x48, 0x42, 0x4A, 0x2A, 0x48, 0x66, 0x49, 0x1E, 0x4A, 0xD1, 0x48, 0xB9, 0x49, 0xF5, 0x4B, 0x43, 0x4B, 0x2B, 0x4B, 0xE7, 0x48, 0x9F, 0xC8, 0x30, 0xC8, 0x78, 0xC9, 0x0C, 0xCB, 0xC2, 0xC9, 0xAA, 0xCB, 0x16, 0xC8, 0x5E, 0xCA, 0xB1, 0xCA, 0xF9, 0xCB, 0x4D, 0xC8, 0xA3, 0xCA, 0xEB, 0xC9, 0x97, 0xCB, 0x3F, 0x28, 0xF0, 0x2A, 0x84, 0x2B, 0x2C, 0x28, 0xE2, 0x2A, 0x9A, 0x29, 0x36, 0x28, 0x7E, 0x2A, 0x89, 0x29, 0x25, 0x28, 0x6D, 0x2A, 0x93, 0x2A, 0x3B, 0x28, 0x77, 0xA9, 0x80, 0xAB, 0x28, 0xA8, 0x64, 0xAB, 0x1C, 0xAB, 0x32, 0xA8, 0x7A, 0xA9, 0x8E, 0xA8, 0x21, 0xAA, 0x69, 0xA9, 0x95, 0xA8, 0xDD, 0xA9, 0x73, 0xA9, 0x87, 0xAA, 0xCF, 0x6B, 0x60, 0x6B, 0x98, 0x6A, 0xD4, 0x6B, 0x7C, 0x68, 0x8A, 0x6A, 0x26, 0x68, 0x6E, 0x68, 0x11, 0x6B, 0x99, 0x69, 0x55, 0x6A, 0xDD, 0x68, 0x33, 0x69, 0xBB, 0x69, 0x77, 0x6A, 0xFF, 0xE8, 0x08, 0xE9, 0x84, 0xE9, 0x4C, 0xEA, 0xC2, 0xEB, 0x2A, 0xE9, 0xA6, 0xE9, 0x6E, 0xE8, 0xE1, 0xEB, 0x19, 0xE9, 0x95, 0xEA, 0x5D, 0xE8, 0xD3, 0xE9, 0x3B, 0xE9, 0xB7, 0xEA, 0x7F, 0x18, 0xF0, 0x19, 0x04, 0x1B, 0x8C, 0x19, 0xC2, 0x1A, 0xCA, 0x1B, 0x26, 0x1B, 0xAE, 0x19, 0xE1, 0x18, 0x19, 0x18, 0x15, 0x1B, 0x9D, 0x19, 0xD3, 0x18, 0x3B, 0x18, 0xB7, 0x18, 0xBF, 0x9B, 0xF0, 0x9A, 0x04, 0x9A, 0x8C, 0x9A, 0xC2, 0x98, 0xCA, 0x99, 0x26, 0x99, 0xAE, 0x99, 0xE1, 0x98, 0xE9, 0x9B, 0x15, 0x9B, 0x9D, 0x99, 0xD3, 0x98, 0x3B, 0x98, 0xB7, 0x98, 0xBF, 0x5B, 0xF0, 0x5A, 0x04, 0x5A, 0x8C, 0x5A, 0xC2, 0x58, 0xCA, 0x59, 0x26, 0x59, 0xAE, 0x59, 0xE1, 0x58, 0xE9, 0x5B, 0x15, 0x59, 0x9D, 0x5A, 0xD3, 0x58, 0x3B, 0x58, 0x37, 0x5B, 0xBF, 0xD9, 0xF0, 0xDA, 0x04, 0xDA, 0x8C, 0xD8, 0x42, 0xDB, 0xCA, 0xD9, 0x26, 0xD9, 0xAE, 0xDA, 0x61, 0xDB, 0xE9, 0xD9, 0x15, 0xD9, 0x9D, 0xDA, 0x53, 0xDB, 0xDB, 0xDB, 0x37, 0xDB, 0xBF, 0x39, 0xF0, 0x38, 0x04, 0x38, 0x0C, 0x3B, 0x42, 0x3B, 0xCA, 0x3A, 0x26, 0x3A, 0xAE, 0x38, 0x61, 0x3B, 0xE9, 0x39, 0x15, 0x3A, 0x9D, 0x38, 0x53, 0x3B, 0xDB, 0x3B, 0x37, 0x39, 0xBF, 0xB9, 0xF0, 0xB8, 0x04, 0xB8, 0x0C, 0xBB, 0x42, 0xBB, 0xCA, 0xBA, 0x26, 0xBA, 0xAE, 0xBA, 0x61, 0xBB, 0xE9, 0xB9, 0x15, 0xBA, 0x9D, 0xBA, 0x53, 0xBB, 0xDB, 0xBB, 0x37, 0xBB, 0xBF, 0x79, 0xF0, 0x78, 0x04, 0x78, 0x8C, 0x78, 0x42, 0x7B, 0xCA, 0x7A, 0x26, 0x79, 0xAE, 0x7A, 0x61, 0x7B, 0xE9, 0x7B, 0x15, 0x79, 0x9D, 0x7A, 0xD3, 0x78, 0x3B, 0x78, 0x37, 0x7B, 0xBF, 0xFB, 0xF0, 0xF8, 0x04, 0xF8, 0x0C, 0xF9, 0x42, 0xF8, 0x4A, 0xF9, 0xC6, 0xFA, 0xCE, 0xFB, 0xA1, 0xF8, 0xA9, 0xFB, 0x65, 0xF9, 0x6D, 0xFB, 0x13, 0xFA, 0x9B, 0xF8, 0x97, 0xF9, 0x5F, 0x04, 0xD0, 0x06, 0x38, 0x06, 0x34, 0x07, 0xBC, 0x06, 0x72, 0x05, 0xFA, 0x06, 0xF6, 0x07, 0x81, 0x06, 0x89, 0x05, 0x45, 0x06, 0x4D, 0x07, 0xC3, 0x07, 0x2B, 0x06, 0xA7, 0x04, 0xAF, 0x85, 0x60, 0x87, 0xE8, 0x86, 0xE4, 0x85, 0x1C, 0x84, 0x92, 0x86, 0x9A, 0x87, 0x56, 0x86, 0x5E, 0x87, 0xD1, 0x87, 0x39, 0x85, 0x35, 0x87, 0xBD, 0x86, 0x73, 0x86, 0xFB, 0x84, 0xF7, 0x46, 0x00, 0x47, 0x08, 0x47, 0x84, 0x46, 0x8C, 0x47, 0xC2, 0x44, 0xCA, 0x44, 0xC6, 0x45, 0x2E, 0x44, 0xA1, 0x44, 0xA9, 0x46, 0xA5, 0x47, 0xFD, 0x8B, 0xC6, 0x89, 0xD6, 0x8B, 0xCE, 0x8F, 0x3E, 0x88, 0x21, 0x89, 0x31, 0x8B, 0x29, 0x8F, 0xB9, 0x88, 0xA5, 0x89, 0xB5, 0x8D, 0xAD, 0x8B, 0xBD, 0x8F, 0x63, 0x8E, 0x73, 0x8D, 0x6B, 0x8B, 0x7B, 0x8B, 0xE7, 0x8A, 0xF7, 0x89, 0xEF, 0x49, 0xF8, 0x95, 0x20, 0x98, 0x10, 0x94, 0x30, 0x9C, 0x08, 0x9E, 0x28, 0x9E, 0x18, 0x91, 0x38, 0x99, 0x04, 0x9B, 0x24, 0x93, 0x14, 0x97, 0x34, 0x07, 0x50, 0x31, 0xA5, 0xE4, 0xE4, 0xE4, 0xE5, 0x14, 0xB4, 0x14, 0xF5, 0x94, 0x8C, 0x94, 0x7F, 0xA9, 0xD8, 0xA9, 0xDA, 0xA9, 0x39, 0xA9, 0xDB, 0x69, 0xF8, 0x69, 0xFA, 0x69, 0xF9, 0x69, 0xFB, 0xE9, 0x84, 0xE9, 0x46, 0xE9, 0x45, 0xE9, 0x47, 0x19, 0xA4, 0x19, 0xA6, 0x19, 0xA5, 0x19, 0xA7, 0x99, 0xE4, 0x99, 0x16, 0x99, 0xE5, 0x99, 0xE7, 0x59, 0x94, 0x59, 0x56, 0x59, 0x95, 0x59, 0x97, 0xD9, 0xD4, 0xD9, 0x36, 0xD9, 0xD5, 0xD9, 0x57, 0x39, 0xB4, 0x39, 0xB6, 0x39, 0x35, 0x39, 0x37, 0x7F, 0x19, 0xFF, 0xBA, 0xFF, 0xED, 0xCE, 0x05, 0xC9, 0x95, 0xC8, 0x8D, 0xCD, 0x5D, 0xCC, 0xC3, 0xCC, 0xD3, 0xCD, 0x2B, 0xCA, 0x3B, 0xCB, 0xA7, 0xCD, 0x77, 0xCE, 0x6F, 0xCF, 0xFF, 0x2E, 0x10, 0x2E, 0x88, 0x28, 0x98, 0x29, 0x44, 0x2E, 0x54, 0x2F, 0xFC, 0x5B, 0x78, 0x50, 0x44, 0x5E, 0x64, 0x53, 0xD4, 0x50, 0xF4, 0x52, 0xCC, 0x5D, 0x1C, 0x50, 0x3C, 0x52, 0x02, 0x53, 0x22, 0x5F, 0x92, 0x52, 0xF2, 0xAF, 0x14, 0xAF, 0xD4, 0xA8, 0xB4, 0xAC, 0xF4, 0xAA, 0x8C, 0xB1, 0xCC, 0xB5, 0xAC, 0xB3, 0xFC, 0x57, 0xB9, 0x70, 0x79, 0x44, 0xF9, 0x4C, 0x05, 0x52, 0x85, 0x5A, 0x45, 0x56, 0xC5, 0x6E, 0x25, 0x71, 0xA5, 0x45, 0x65, 0x75, 0xE5, 0x7D, 0x15, 0x6B, 0x95, 0x57, 0x55, 0x6F, 0x35, 0x68, 0xB5, 0x78, 0x75, 0x4C, 0xF5, 0x7C, 0x0D, 0x5A, 0x8D, 0x66, 0x4D, 0x6E, 0xCD, 0x41, 0x2D, 0x79, 0xAD, 0x75, 0x6D, 0x7D, 0xED, 0x53, 0x1D, 0x67, 0x9D, 0x6F, 0xDD, 0x60, 0x3D, 0x44, 0xBD, 0x74, 0x7D, 0x7C, 0xFD, 0x72, 0x03, 0x66, 0x83, 0x6E, 0x43, 0x41, 0xC3, 0x49, 0x23, 0x75, 0xA3, 0x7D, 0x63, 0x73, 0xE3, 0x5B, 0x13, 0x6F, 0x53, 0x60, 0xD3, 0x68, 0x33, 0x4C, 0xB3, 0x7C, 0x73, 0x72, 0xF3, 0x7A, 0x0B, 0x5E, 0x8B, 0x61, 0x4B, 0x69, 0xCB, 0x45, 0x2B, 0x7D, 0xAB, 0x4B, 0x6B, 0x7B, 0xEB, 0x77, 0x9B, 0x60, 0x5B, 0x58, 0xDB, 0x54, 0x3B, 0x42, 0xBB, 0x4A, 0x7B, 0x66, 0xFB, 0x4E, 0x07, 0x51, 0x87, 0x79, 0x47, 0x75, 0xC7, 0x5D, 0x27, 0x6B, 0xA7, 0x57, 0x67, 0x5F, 0x17, 0x58, 0x97, 0x44, 0x57, 0x6C, 0xD7, 0x62, 0x37, 0x46, 0xB7, 0x4E, 0x77, 0x7E, 0xF7, 0x71, 0x0F, 0x55, 0x8F, 0x7D, 0x4F, 0x73, 0xCF, 0x7B, 0x2F, 0x5F, 0x6F, 0x70, 0xEF, 0x78, 0xDF, 0xEF, 0x3E, 0xA5, 0xBE, 0xCC, 0xBE, 0x83, 0x7E, 0xEA, 0x7E, 0x97, 0xFE, 0x9E, 0x01, 0xF0, 0x01, 0xB9, 0x81, 0xF4, 0x81, 0xBD, 0x41, 0xCA, 0x41, 0xA7, 0xC1, 0xAE, 0x21, 0xB0, 0x21, 0xD9, 0xA1, 0xB4, 0xA1, 0xDD, 0x61, 0x8A, 0x61, 0xC7, 0xE1, 0xCE, 0x11, 0xD0, 0x11, 0x99, 0x91, 0xD4, 0x91, 0x9D, 0x51, 0xF2, 0x51, 0x87, 0xD1, 0x8E, 0x31, 0x90, 0x31, 0x99, 0xB1, 0xD4, 0xB1, 0x9D, 0x71, 0xF2, 0x71, 0x87, 0xF1, 0x8E, 0x09, 0xD0, 0x09, 0x99, 0x89, 0xD4, 0x89, 0x9D, 0x49, 0xF2, 0x49, 0xC7, 0xC9, 0xCE, 0x29, 0xD0, 0x29, 0x99, 0xA9, 0xB4, 0xA9, 0xDD, 0x69, 0x8A, 0x69, 0xC7, 0xE9, 0xAE, 0x19, 0xB0, 0x19, 0xD9, 0x99, 0xB4, 0x99, 0xBD, 0x59, 0xCA, 0x59, 0xA7, 0xD9, 0xAE, 0x39, 0xF0, 0x39, 0xB9, 0xB9, 0xF4, 0xB9, 0xBD, 0x79, 0xCA, 0x79, 0xE7, 0xF9, 0xEE, 0x05, 0xF0, 0x05, 0xB9, 0x85, 0xF4, 0x85, 0xBD, 0x45, 0xAA, 0x45, 0xE7, 0xC5, 0xEE, 0x25, 0xF0, 0x25, 0xB9, 0xA5, 0xF4, 0xA5, 0xBD, 0x65, 0xAA, 0x65, 0xE7, 0xE5, 0xEE, 0x15, 0xF0, 0x15, 0xB9, 0x95, 0xF4, 0x95, 0xBD, 0x55, 0xCA, 0x55, 0xA7, 0xD5, 0xAE, 0x35, 0xF0, 0x35, 0xB9, 0xB5, 0xF4, 0xB5, 0xBD, 0x75, 0xCA, 0x75, 0xA7, 0xF5, 0xAE, 0x7F, 0x60, 0xFF, 0x64, 0xFF, 0xA5, 0xFF, 0xDB, 0xDB, 0xA0, 0xDC, 0x70, 0xDA, 0xE8, 0xDA, 0x04, 0xDB, 0x94, 0xDD, 0x4C, 0xDB, 0xDC, 0xDD, 0xA2, 0xDC, 0x72, 0xDA, 0xEA, 0xDA, 0x06, 0xDB, 0x96, 0xDD, 0x4E, 0xDB, 0xDE, 0xDD, 0xA1, 0xD8, 0x71, 0xDC, 0xE9, 0xDC, 0x05, 0xDB, 0x95, 0xDD, 0x4D, 0xDB, 0xDD, 0xDD, 0xA3, 0xD8, 0x73, 0xDC, 0xEB, 0xDC, 0x07, 0xDD, 0x97, 0xD9, 0x4F, 0xDD, 0xDF, 0x3D, 0xA0, 0x38, 0x70, 0x3C, 0xE8, 0x3C, 0x04, 0x3D, 0x94, 0x39, 0x4C, 0x3D, 0xDC, 0x3C, 0xC2, 0x38, 0x92, 0x3D, 0x0A, 0x3E, 0xEA, 0x38, 0xBA, 0x39, 0x26, 0x39, 0xD6, 0x3A, 0x4E, 0x38, 0x1E, 0x3D, 0xFE, 0x3A, 0x61, 0x3A, 0xB1, 0x38, 0xC9, 0x3D, 0x59, 0x3E, 0x85, 0x39, 0x15, 0x38, 0x75, 0x3B, 0xAD, 0x3E, 0x3D, 0x38, 0xC3, 0x38, 0x93, 0x3D, 0x0B, 0x3E, 0xEB, 0x38, 0xBB, 0x3D, 0x27, 0x3D, 0xD7, 0x3E, 0x4F, 0x3A, 0x1F, 0x3F, 0xFF, 0xB9, 0x60, 0xB9, 0xB0, 0xBA, 0xC8, 0xBF, 0x58, 0xBD, 0xFC, 0x7D, 0x29, 0x74, 0xE9, 0x71, 0x59, 0x7B, 0x79, 0x74, 0x85, 0x7D, 0xA5, 0x70, 0x15, 0x76, 0xD5, 0x73, 0xF5, 0x78, 0x4D, 0x79, 0xAD, 0x7F, 0x9D, 0x7A, 0x3D, 0x75, 0x03, 0x0C, 0x18, 0xB3, 0x76, 0x37, 0xC5, 0x37, 0x1B, 0xB7, 0x88, 0xB7, 0x62, 0xB7, 0x3E, 0xB7, 0x8D, 0xB7, 0xE7, 0x77, 0x04, 0x77, 0xAA, 0x77, 0xD1, 0x77, 0x03, 0x77, 0x6F, 0xF7, 0x74, 0xF7, 0x26, 0xF7, 0x59, 0xF7, 0x0B, 0x0F, 0x90, 0x0F, 0xBC, 0x0F, 0xCE, 0x0F, 0x95, 0x0F, 0x7B, 0x8F, 0xE8, 0x8F, 0x32, 0x8F, 0xC1, 0x8F, 0x1D, 0x8F, 0xB7, 0x4F, 0xA4, 0x4F, 0x3A, 0x4F, 0x49, 0x4F, 0xE3, 0xCF, 0xBF, 0x9E, 0x59, 0x9F, 0xAD, 0x9F, 0x0B, 0x9F, 0xD7, 0x5F, 0xE0, 0x5F, 0x44, 0x5F, 0xBC, 0x5F, 0x1A, 0x5E, 0xCE, 0x5E, 0xF1, 0x5F, 0x55, 0x5F, 0xA3, 0x5F, 0x07, 0x5E, 0xDF, 0xDE, 0xE8, 0xDE, 0x4C, 0xDF, 0xB2, 0xDF, 0x16, 0xDE, 0xA1, 0xDE, 0xF9, 0xDE, 0x5D, 0xDF, 0xAB, 0xDE, 0x0F, 0x3E, 0x30, 0x3F, 0xE4, 0x3E, 0x42, 0x3F, 0xBA, 0x3E, 0x1E, 0x3E, 0x29, 0x3E, 0xF5, 0x3F, 0x53, 0x3F, 0xA7, 0xBF, 0x40, 0xBE, 0x38, 0xBF, 0xEC, 0xBF, 0x4A, 0xBF, 0xB6, 0xBE, 0x51, 0xBE, 0x25, 0xBF, 0x03, 0xBE, 0xDB, 0xBE, 0xAF, 0x7F, 0x48, 0x7E, 0xB4, 0x7E, 0x12, 0x7F, 0xC6, 0xFE, 0xC7, 0x32, 0x62, 0xFE, 0x65, 0xFE, 0x2B, 0xE7, 0xD7, 0x3C, 0x10, 0x18, 0x10, 0x07, 0x90, 0x0D, 0x50, 0x01, 0xD0, 0x0A, 0x30, 0x34, 0x30, 0x2F, 0xB0, 0x23, 0x70, 0x29, 0xF0, 0x06, 0x08, 0x3C, 0x88, 0x10, 0x88, 0x3B, 0x48, 0x15, 0xC8, 0x2E, 0x28, 0x2A, 0xA8, 0x04, 0xA8, 0x0F, 0x68, 0x3D, 0xE8, 0x31, 0x18, 0x16, 0x98, 0x2C, 0x58, 0x10, 0x58, 0x2B, 0xD8, 0x05, 0x38, 0x01, 0xB8, 0x32, 0x78, 0x38, 0x78, 0x37, 0xF8, 0x1D, 0x04, 0x29, 0x84, 0x26, 0x44, 0x2C, 0xC4, 0x20, 0xC4, 0x0B, 0x24, 0x35, 0xA4, 0x3E, 0x64, 0x32, 0xE4, 0x38, 0xE4, 0x17, 0x14, 0x23, 0x94, 0x29, 0x54, 0x16, 0xD4, 0x2C, 0x34, 0x28, 0x34, 0x3B, 0xB4, 0x35, 0x74, 0x3E, 0xF4, 0x32, 0x0C, 0x34, 0x0C, 0x2F, 0x8C, 0x13, 0x4C, 0x29, 0xCC, 0x26, 0x2C, 0x22, 0xAC, 0x08, 0xAC, 0x27, 0x6C, 0x0D, 0xEC, 0xC1, 0x6F, 0xF4, 0xDF, 0xD2, 0xBF, 0xFD, 0x7F, 0x37, 0xFF, 0x3E, 0x87, 0xC3, 0x83, 0x53, 0x82, 0x0B, 0x83, 0xEB, 0x82, 0xBB, 0x83, 0x27, 0x81, 0xD7, 0x84, 0x8F, 0x83, 0x1F, 0x84, 0x7F, 0x45, 0xA0, 0x46, 0x30, 0x40, 0x48, 0x45, 0x98, 0x40, 0xF8, 0x41, 0x64, 0x46, 0xB4, 0x40, 0xCC, 0x41, 0x5C, 0x40, 0x82, 0x40, 0xE2, 0x42, 0xB2, 0x47, 0x2A, 0x06, 0x50, 0x1E, 0x0E, 0x59, 0x08, 0xD9, 0x1D, 0xB9, 0x0A, 0x79, 0x0F, 0x05, 0x0D, 0xC0, 0x78, 0x7F, 0x94, 0x26, 0x94, 0x33, 0x54, 0x3C, 0x54, 0x25, 0xD4, 0x30, 0xD4, 0x2E, 0xD4, 0x3B, 0x34, 0x52, 0x34, 0x2D, 0xB4, 0x78, 0xB4, 0x21, 0xB4, 0x37, 0x74, 0x5A, 0x74, 0x23, 0xF4, 0x74, 0xF4, 0x69, 0x0C, 0x60, 0x0C, 0x36, 0x0C, 0x2B, 0x8C, 0x3C, 0x8C, 0x65, 0x4C, 0x68, 0x4C, 0x3E, 0x4C, 0x67, 0xCC, 0x72, 0xCC, 0x6D, 0x2C, 0x64, 0x2C, 0x09, 0xAC, 0x30, 0xAC, 0x21, 0x6C, 0x60, 0x6C, 0x7E, 0x6C, 0x5F, 0xEC, 0x4E, 0xEC, 0x37, 0x1C, 0x36, 0x1C, 0x17, 0x9C, 0x06, 0x9C, 0x5B, 0x5C, 0x5A, 0x5C, 0x6B, 0xDC, 0x0A, 0xDC, 0x53, 0x3C, 0x12, 0x3C, 0x23, 0xBC, 0x7C, 0xBC, 0x1D, 0x7C, 0x5C, 0x7C, 0x2D, 0xFC, 0x0C, 0xFC, 0x55, 0x02, 0x54, 0x02, 0x45, 0x82, 0x78, 0x82, 0x99, 0x3F, 0xB0, 0x7F, 0x24, 0xFF, 0x84, 0xFF, 0x19, 0x21, 0x04, 0x23, 0x14, 0x22, 0x0C, 0x20, 0xEC, 0x25, 0xFC, 0x02, 0x50, 0xDE, 0x83, 0xA8, 0x95, 0xE8, 0x99, 0x98, 0x99, 0xD8, 0x91, 0xB8, 0x8E, 0xF8, 0x9A, 0x84, 0x86, 0xC4, 0x8A, 0xA4, 0x9C, 0xE4, 0x94, 0x94, 0x94, 0xD4, 0x98, 0xB4, 0x90, 0x74, 0x8F, 0x0C, 0x9F, 0x4C, 0x97, 0x2C, 0x9B, 0x6C, 0x83, 0x1C, 0x93, 0x5C, 0x8D, 0x3C, 0x95, 0x7C, 0x89, 0x02, 0x99, 0x42, 0x81, 0x22, 0x9E, 0x62, 0x86, 0xF2, 0x37, 0xA5, 0x14, 0x65, 0x24, 0xE5, 0x18, 0x15, 0x04, 0x95, 0x28, 0x55, 0x30, 0xD5, 0x20, 0x35, 0x10, 0x35, 0x3F, 0xB5, 0x1F, 0x75, 0x37, 0xF5, 0x27, 0x0D, 0x17, 0x8D, 0x07, 0x4D, 0x1B, 0xCD, 0x0B, 0x2D, 0x2B, 0xAD, 0x33, 0x6D, 0x23, 0xED, 0x3D, 0x1D, 0x03, 0x9D, 0x1D, 0x5D, 0x0D, 0xDD, 0x15, 0x3D, 0x35, 0xBD, 0x15, 0x7D, 0x05, 0xFD, 0x29, 0x03, 0x19, 0x83, 0x29, 0x43, 0x31, 0xC3, 0x21, 0x23, 0x11, 0xA3, 0x21, 0x63, 0x3E, 0xE3, 0x2E, 0x13, 0x3E, 0x93, 0x2E, 0x53, 0x0E, 0xD3, 0x26, 0x33, 0x36, 0xB3, 0x26, 0x73, 0x06, 0xF3, 0x1A, 0x0B, 0x3A, 0x8B, 0x2A, 0x4B, 0x0A, 0xCB, 0x32, 0x2B, 0x0A, 0xAB, 0x12, 0x6B, 0x22, 0xEB, 0x3C, 0x1B, 0x22, 0x9B, 0x3C, 0x5B, 0x1C, 0xDB, 0x0C, 0x3B, 0x1C, 0xBB, 0x0C, 0x80, 0xF4, 0x93, 0x1C, 0x30, 0x1C, 0x92, 0x1C, 0x11, 0x1C, 0xA3, 0x9C, 0x60, 0x9C, 0x42, 0x9C, 0x01, 0x9C, 0xBD, 0x9C, 0x9F, 0x5C, 0x9C, 0x5C, 0xEE, 0x5C, 0x2D, 0x5C, 0x8F, 0xDC, 0x8C, 0xDC, 0xF6, 0xDC, 0x35, 0xDC, 0x97, 0x3C, 0x94, 0x3C, 0xE6, 0x3C, 0x25, 0x3C, 0x87, 0xBC, 0x84, 0xBC, 0x06, 0xBC, 0xB9, 0xBC, 0x5B, 0x7C, 0xD8, 0x7C, 0x1A, 0x7C, 0x69, 0x7C, 0xCB, 0xFC, 0x28, 0xFC, 0x8A, 0xFC, 0xF1, 0xFC, 0x33, 0x02, 0xB0, 0x02, 0x52, 0x02, 0x11, 0x02, 0xA3, 0x82, 0x60, 0x82, 0xC2, 0x82, 0x81, 0x82, 0x7D, 0x82, 0x3F, 0x42, 0x3C, 0x42, 0x5E, 0x42, 0x1D, 0x42, 0xAF, 0xC2, 0xAC, 0xC2, 0x2E, 0xC2, 0x8D, 0xC2, 0xF7, 0x22, 0xF4, 0x22, 0x76, 0x22, 0xD5, 0x22, 0x97, 0xA2, 0x94, 0xA2, 0x16, 0xA2, 0xA5, 0xA2, 0xC7, 0x62, 0xC4, 0x62, 0x46, 0x62, 0xF9, 0x62, 0xBB, 0xE2, 0xF8, 0xE2, 0x3A, 0xE2, 0xD9, 0xE2, 0xFF, 0x24, 0x30, 0x25, 0xD4, 0x25, 0x52, 0x25, 0x96, 0x25, 0x51, 0x24, 0x15, 0x25, 0x13, 0x24, 0xE7, 0xA4, 0xE0, 0xA5, 0x64, 0xA4, 0xA2, 0xA5, 0x26, 0x01, 0xFC, 0x17, 0x97, 0x0E, 0x93, 0x1E, 0x91, 0x01, 0x93, 0x11, 0x96, 0x09, 0x92, 0x19, 0x90, 0x05, 0x92, 0xE5, 0x93, 0xF5, 0x95, 0xED, 0x96, 0xFD, 0x94, 0xE3, 0x92, 0xF3, 0x94, 0x6B, 0x97, 0x7B, 0x95, 0x67, 0x97, 0x77, 0x93, 0x6F, 0x91, 0x7F, 0x52, 0x60, 0x56, 0x70, 0x52, 0x68, 0x50, 0xB8, 0x53, 0x64, 0x50, 0xB4, 0x57, 0xAC, 0x55, 0xBC, 0x56, 0xA2, 0x51, 0xB2, 0x51, 0xAA, 0x52, 0xBA, 0x50, 0xA6, 0x54, 0xB6, 0x54, 0x2E, 0x57, 0x3E, 0x55, 0x21, 0x57, 0x31, 0x53, 0x29, 0x05, 0x6C, 0x01, 0x12, 0x55, 0x13, 0xD5, 0x22, 0xD5, 0x43, 0x35, 0x22, 0x35, 0x23, 0xB5, 0x02, 0xB5, 0x7D, 0xF5, 0x3F, 0xEA, 0x06, 0xEA, 0x79, 0xEA, 0xDB, 0x80, 0x3D, 0xA0, 0xA6, 0x91, 0xA4, 0x31, 0xAB, 0x09, 0xAB, 0x29, 0xAE, 0x19, 0xAC, 0xD9, 0xA7, 0xF9, 0xA9, 0xC5, 0xAE, 0xE5, 0xAC, 0x55, 0xA7, 0x75, 0xA9, 0x4D, 0xAE, 0x6D, 0xAC, 0x9D, 0xA7, 0xBD, 0xA9, 0x83, 0xA1, 0xA3, 0xAC, 0x13, 0xAF, 0x33, 0xA5, 0x0B, 0xA1, 0x2B, 0xA4, 0xEB, 0xA7, 0xDB, 0xA9, 0xFB, 0xAC, 0xC7, 0xA8, 0x67, 0xAB, 0x57, 0xAE, 0x77, 0xA4, 0x4F, 0xA0, 0xAF, 0xAD, 0x9F, 0xAE, 0xBF, 0x68, 0x00, 0x6F, 0x20, 0x69, 0x10, 0x62, 0xD0, 0x6F, 0xF0, 0x69, 0xC8, 0x6E, 0xE8, 0x64, 0x58, 0x63, 0x78, 0x6E, 0x44, 0x62, 0xA4, 0x6F, 0x94, 0x6D, 0xB4, 0x6A, 0x8C, 0x64, 0x2C, 0x63, 0x1C, 0x6E, 0x3C, 0x64, 0xFC, 0x63, 0xC2, 0x69, 0xE2, 0x62, 0x52, 0x67, 0x72, 0x61, 0x4A, 0x6A, 0x6A, 0x68, 0x9A, 0x03, 0xD8, 0x07, 0xC8, 0x66, 0xB2, 0x66, 0x11, 0x66, 0x43, 0x66, 0x3F, 0xE6, 0x1C, 0xE6, 0xCE, 0xE6, 0xB5, 0xE6, 0xE7, 0x16, 0x24, 0x16, 0xFA, 0x16, 0x59, 0x16, 0x2B, 0x96, 0x08, 0x96, 0x52, 0x96, 0xA1, 0x96, 0xFD, 0x96, 0x1F, 0x56, 0xAC, 0x56, 0x0E, 0x56, 0x55, 0x56, 0xC7, 0xD6, 0x7F, 0xAC, 0xB5, 0xAD, 0x53, 0xAD, 0xE7, 0x6D, 0x60, 0x6C, 0x44, 0x6D, 0xFC, 0x6D, 0x3A, 0x6D, 0x9E, 0x6C, 0xE9, 0x6D, 0x2D, 0x6D, 0x8B, 0x6D, 0x77, 0xEC, 0xB0, 0xEC, 0x94, 0xED, 0x62, 0xED, 0xC6, 0xED, 0x41, 0xEC, 0x79, 0xED, 0xDD, 0xED, 0x1B, 0xEC, 0xAF, 0x1C, 0xC8, 0x1C, 0x0C, 0x1C, 0xB2, 0x1C, 0x56, 0x1C, 0x11, 0x1C, 0x25, 0x1D, 0x83, 0x1D, 0x7B, 0x1C, 0x5F, 0x9D, 0x98, 0x9C, 0x6C, 0x9C, 0x4A, 0x9D, 0xF6, 0x9C, 0xB1, 0x9D, 0x55, 0x9C, 0xE3, 0x9C, 0xC7, 0x5D, 0x40, 0x00, 0x8B, 0xC1, 0xCD, 0xA5, 0xDE, 0xE5, 0xDC, 0x95, 0xC4, 0xD5, 0xC0, 0x35, 0xDF, 0x75, 0xCF, 0xED, 0x8F, 0x9B, 0x81, 0x5B, 0x9E, 0xDB, 0xAE, 0x3B, 0x81, 0xBB, 0x9E, 0x7B, 0xAE, 0xFB, 0x8E, 0x07, 0x9E, 0x87, 0xAE, 0xC7, 0x5F, 0x8F, 0x2D, 0x4F, 0x5C, 0x4F, 0x6D, 0xCF, 0x6C, 0xCF, 0x0D, 0x2F, 0x2C, 0x2F, 0x4D, 0xAF, 0x0C, 0xAF, 0x35, 0x6F, 0x0C, 0x6F, 0x35, 0xEF, 0x54, 0xEF, 0x65, 0x1F, 0x54, 0x1F, 0x65, 0x9F, 0x24, 0x9F, 0x05, 0x5F, 0x44, 0x5F, 0x79, 0xDF, 0x38, 0xDF, 0x19, 0xBF, 0xDF, 0x7E, 0xD2, 0x7E, 0x51, 0x7E, 0x13, 0xFE, 0x50, 0xFE, 0xE2, 0xFE, 0x61, 0xFE, 0x23, 0x01, 0xA0, 0x01, 0x42, 0x01, 0x81, 0x01, 0xFD, 0x01, 0x3F, 0x81, 0xBC, 0x81, 0x3E, 0x81, 0x9D, 0x81, 0xEF, 0x41, 0x1C, 0x41, 0x6E, 0x41, 0x2D, 0x41, 0x8F, 0xC1, 0x4C, 0xC1, 0x0E, 0xC1, 0xB5, 0xC1, 0xD7, 0x21, 0xD4, 0x21, 0x96, 0x21, 0xE5, 0x21, 0x27, 0xA1, 0x24, 0xA1, 0x46, 0xA1, 0x05, 0xA1, 0xBB, 0x61, 0x78, 0x61, 0xDA, 0x61, 0x99, 0x61, 0x6B, 0xE1, 0x68, 0xE1, 0xCA, 0xE1, 0x89, 0xE1, 0xB3, 0x11, 0xBF, 0x23, 0xA4, 0x22, 0x22, 0x22, 0x46, 0x22, 0x41, 0x23, 0x05, 0x23, 0xFD, 0x22, 0xBB, 0x23, 0x3F, 0xA2, 0xD8, 0xA3, 0x5C, 0xA3, 0x1A, 0xA3, 0x6E, 0xA3, 0x69, 0xA3, 0xAD, 0xA2, 0xCB, 0xA3, 0x8F, 0x63, 0x88, 0x62, 0xF4, 0x63, 0x72, 0x62, 0x36, 0x62, 0x31, 0x62, 0x55, 0x62, 0x13, 0x63, 0x67, 0xE3, 0x60, 0xE3, 0x24, 0xE2, 0x42, 0xE3, 0x06, 0xE3, 0x7F, 0xC5, 0x73, 0xC7, 0x7B, 0xC4, 0xB7, 0xC4, 0x3F, 0x24, 0xD0, 0x27, 0x58, 0x27, 0x94, 0x27, 0x1C, 0x25, 0x12, 0x26, 0xEA, 0x25, 0x66, 0x25, 0xAE, 0x25, 0xA1, 0x24, 0x29, 0x24, 0xC5, 0x24, 0x8D, 0x27, 0x83, 0x27, 0x0B, 0x26, 0xFB, 0x26, 0x77, 0x26, 0xBF, 0xA4, 0x30, 0xA7, 0xB8, 0xA5, 0xF4, 0xA6, 0x42, 0xA6, 0xCA, 0xA7, 0xA6, 0xA7, 0xEE, 0xA6, 0x51, 0xA4, 0x39, 0xA4, 0xB5, 0xA7, 0x03, 0xA5, 0x4B, 0xA4, 0x27, 0xA4, 0xAF, 0x67, 0xFC, 0xC9, 0xB0, 0xC8, 0xA8, 0xCF, 0x78, 0xCB, 0xE4, 0xCF, 0x0C, 0xCF, 0x9C, 0xCB, 0xC2, 0xC8, 0xD2, 0xCB, 0x2A, 0xCD, 0xBA, 0xC9, 0x66, 0xCD, 0xF6, 0xCD, 0x1E, 0xC9, 0xF9, 0x9D, 0xA3, 0x92, 0x93, 0x9D, 0x73, 0xF0, 0x97, 0xEA, 0xAF, 0xE3, 0xDF, 0x8E, 0x5C, 0xA0, 0x5C, 0xF1, 0xDC, 0xF8, 0xDC, 0xD5, 0x3C, 0xBC, 0x3C, 0x93, 0xBC, 0xAA, 0xBC, 0xC7, 0x7C, 0xAE, 0xFC, 0xC0, 0xFC, 0xF1, 0x02, 0x84, 0x02, 0xB5, 0x82, 0xBF, 0x05, 0x47, 0x85, 0xD4, 0x85, 0x4E, 0x85, 0x1D, 0x45, 0x40, 0x45, 0xE2, 0x45, 0x71, 0x45, 0xCB, 0xC5, 0x38, 0xC5, 0x46, 0xC5, 0x15, 0xC5, 0x77, 0x25, 0xEC, 0x25, 0xBE, 0x25, 0xC3, 0xA5, 0xB0, 0xA5, 0x4A, 0xA5, 0x19, 0xA5, 0xBB, 0x65, 0x64, 0x65, 0x36, 0x65, 0x4D, 0x65, 0xEF, 0xE5, 0x02, 0xE5, 0xE1, 0x80, 0xED, 0x80, 0x5A, 0xA1, 0x55, 0x51, 0x50, 0x71, 0x5A, 0x49, 0x57, 0xE9, 0x52, 0xD9, 0x59, 0x05, 0x5C, 0x25, 0x5E, 0x15, 0x5B, 0xB5, 0x5C, 0x8D, 0x5D, 0x6D, 0x58, 0x5D, 0x56, 0x7D, 0x5D, 0xC3, 0x52, 0xE3, 0x55, 0x33, 0x50, 0x0B, 0x55, 0x2B, 0x57, 0x9B, 0x5A, 0xBB, 0x59, 0x47, 0x54, 0x67, 0x59, 0x57, 0x57, 0xF7, 0x52, 0xCF, 0x5B, 0x1F, 0x52, 0x3F, 0xD9, 0x80, 0xD4, 0xA0, 0xD1, 0x90, 0x07, 0x58, 0x0E, 0xB4, 0x8D, 0x2E, 0x8D, 0x5D, 0x4D, 0x20, 0x4D, 0x92, 0x4D, 0x09, 0x4D, 0x6B, 0xCD, 0xF8, 0xCD, 0xA6, 0xCD, 0xD5, 0xCD, 0x8F, 0x2D, 0x5C, 0x2D, 0x41, 0x2D, 0x13, 0xAD, 0x88, 0xAD, 0xEA, 0xAD, 0x79, 0xAD, 0x27, 0x6D, 0xB4, 0x6D, 0xAE, 0x6D, 0x3D, 0xED, 0xB0, 0xED, 0x3A, 0xED, 0xB5, 0x1D, 0xBF, 0x3A, 0x14, 0x3A, 0x0A, 0x3B, 0x1E, 0x3B, 0x45, 0x3B, 0xD3, 0x3A, 0xCF, 0xBA, 0x38, 0xBB, 0xA2, 0xBB, 0xB6, 0xBA, 0xE9, 0xBA, 0x03, 0xBA, 0x17, 0x7A, 0x88, 0x7B, 0x5C, 0x7B, 0x46, 0x7B, 0x31, 0x7B, 0xAD, 0x7A, 0xBB, 0xFB, 0xE0, 0xFB, 0x0C, 0xFA, 0x1A, 0xFB, 0x41, 0xFB, 0x55, 0xFB, 0xCB, 0xFA, 0xDF, 0x07, 0x64, 0x06, 0x72, 0x07, 0xEE, 0x06, 0x85, 0x06, 0x53, 0x06, 0x4F, 0x86, 0x38, 0x86, 0xA2, 0x87, 0xB6, 0x87, 0xE9, 0x87, 0x83, 0x86, 0x97, 0x47, 0xC8, 0x46, 0x3C, 0x47, 0xA6, 0x46, 0xF1, 0x01, 0x4B, 0x61, 0x68, 0x0C, 0x6D, 0xCC, 0x62, 0xAC, 0x73, 0x1C, 0x6E, 0xDC, 0x60, 0xBC, 0x71, 0x02, 0x7C, 0x42, 0x63, 0xA2, 0x6A, 0xE2, 0x7B, 0x52, 0x61, 0xB2, 0x68, 0xF2, 0x65, 0x4A, 0x72, 0x2A, 0x67, 0xEA, 0x76, 0x5A, 0x68, 0x3A, 0x75, 0xFA, 0x6C, 0x86, 0x7B, 0x26, 0x7E, 0xE6, 0x60, 0x96, 0x75, 0x36, 0x62, 0x76, 0x6B, 0x8E, 0x7E, 0x2E, 0x68, 0x6E, 0x05, 0xB0, 0x10, 0x7C, 0xE6, 0xE7, 0x17, 0x88, 0x17, 0xDC, 0x17, 0x26, 0x17, 0xF1, 0x17, 0x1D, 0x17, 0x47, 0x96, 0x30, 0x97, 0x6C, 0x96, 0xFA, 0x97, 0x51, 0x96, 0xCD, 0x97, 0xBB, 0x56, 0xE0, 0x57, 0x8C, 0x56, 0x5A, 0x57, 0x61, 0x56, 0xF5, 0x56, 0x1B, 0x01, 0xDB, 0x40, 0x73, 0xAD, 0x66, 0x1D, 0x78, 0x5D, 0x75, 0xBD, 0x62, 0xFD, 0xFB, 0x9F, 0xE2, 0xBF, 0x92, 0x7F, 0xEF, 0x1B, 0xB2, 0x1B, 0x85, 0x1B, 0x2F, 0x9B, 0x52, 0x9B, 0xB9, 0x9B, 0x0F, 0x5B, 0xE2, 0x5B, 0xD9, 0x5B, 0xB7, 0xDB, 0x22, 0xDB, 0x19, 0xDB, 0x57, 0x3B, 0x82, 0x3B, 0xA9, 0x3B, 0x17, 0xBB, 0x7C, 0xBB, 0xC9, 0xBB, 0x67, 0x7B, 0x3C, 0x7B, 0x89, 0x7B, 0x27, 0xFB, 0x5C, 0xFB, 0x1E, 0xFB, 0x8D, 0xFB, 0xD7, 0x07, 0xE4, 0x07, 0x86, 0x07, 0xD9, 0x07, 0xAB, 0x87, 0x88, 0x87, 0x52, 0x87, 0xA1, 0x87, 0x7D, 0x87, 0x1F, 0x47, 0x2C, 0x47, 0x76, 0x47, 0x15, 0x47, 0x87, 0xC7, 0xF8, 0xC7, 0x1A, 0xC7, 0xC9, 0xC7, 0x33, 0x27, 0x50, 0x27, 0x42, 0x27, 0xBE, 0x27, 0xED, 0x27, 0x0F, 0xA7, 0xB4, 0xA7, 0x16, 0xA7, 0x85, 0xA7, 0xDB, 0x67, 0x98, 0x67, 0x4A, 0x67, 0xB1, 0x67, 0xE3, 0xE7, 0xA0, 0xE7, 0x7C, 0xE7, 0x1E, 0xE7, 0x4D, 0xE7, 0x37, 0x17, 0x94, 0x17, 0x26, 0x17, 0x79, 0x17, 0x1B, 0x97, 0x68, 0x97, 0x0A, 0x97, 0xD1, 0x97, 0xA3, 0x57, 0xC0, 0x57, 0x3C, 0x57, 0xEE, 0x57, 0x4D, 0x57, 0x37, 0x80, 0x3D, 0x60, 0x72, 0x9D, 0x77, 0xBD, 0x79, 0x83, 0x7E, 0xA3, 0x78, 0x13, 0x7B, 0x33, 0x7E, 0x0B, 0x7A, 0xCB, 0x7F, 0xEB, 0x75, 0xDB, 0x7A, 0x7B, 0x7F, 0x47, 0x7B, 0x67, 0x71, 0x57, 0x7C, 0xB7, 0x7B, 0x8F, 0x73, 0xAF, 0x76, 0x9F, 0x74, 0x3F, 0xFB, 0x00, 0xFD, 0x20, 0xFA, 0x10, 0xF8, 0xD0, 0xF3, 0xF0, 0xF6, 0xC8, 0xF2, 0xE8, 0xF0, 0x58, 0xFD, 0x78, 0xF6, 0x44, 0xFC, 0xA4, 0xFF, 0x94, 0xFD, 0xB4, 0xF6, 0x8C, 0xF2, 0x2C, 0xFF, 0x1C, 0xFD, 0x3C, 0xF6, 0x02, 0xFA, 0xC2, 0x0F, 0xD8, 0x01, 0xED, 0x2F, 0x4F, 0xAF, 0x0C, 0xAF, 0x36, 0xAF, 0xE5, 0xAF, 0x47, 0x6F, 0x84, 0x6F, 0xBA, 0x6F, 0x99, 0x6F, 0xAB, 0xEF, 0xC8, 0xEF, 0x72, 0xEF, 0xD1, 0xEF, 0x63, 0x1F, 0x60, 0x1F, 0x02, 0x1F, 0xBE, 0x1F, 0x1D, 0x1F, 0x2F, 0x9F, 0x4C, 0x9F, 0xF6, 0x9F, 0x55, 0x9F, 0x67, 0x5F, 0xA4, 0x5F, 0x86, 0x5F, 0xB9, 0x5F, 0x9B, 0xDF, 0x18, 0xDF, 0x2A, 0xDF, 0x89, 0xDF, 0xB3, 0x3F, 0x30, 0x3F, 0xE2, 0x3F, 0x21, 0x3F, 0x03, 0xFF, 0x83, 0xFF, 0x3C, 0xBF, 0x3C, 0x7F, 0xB5, 0xFC, 0x7A, 0x00, 0xA2, 0x07, 0xD0, 0xBF, 0x1C, 0xE8, 0x18, 0x98, 0x08, 0x58, 0x1F, 0x38, 0x07, 0x78, 0x1D, 0x04, 0x0D, 0x44, 0x09, 0x24, 0x1E, 0x64, 0x1A, 0x14, 0x1A, 0x54, 0x0C, 0x34, 0x08, 0xB4, 0x0F, 0xF4, 0x0B, 0x8C, 0x13, 0xCC, 0x0D, 0xAC, 0x09, 0xEC, 0x0E, 0x9C, 0x16, 0xDC, 0x0A, 0xBC, 0x0C, 0xFC, 0x08, 0x82, 0x10, 0x42, 0x17, 0x22, 0x0B, 0x62, 0x0D, 0x12, 0x15, 0x52, 0x11, 0x32, 0x0E, 0x72, 0x0A, 0x0A, 0x0A, 0x4A, 0x14, 0x2A, 0x08, 0xAA, 0x0F, 0xEA, 0x1B, 0x9A, 0x0B, 0xDA, 0x1D, 0xBA, 0x19, 0xFA, 0x1E, 0x86, 0x0E, 0xC6, 0x1A, 0xA6, 0x1C, 0xE6, 0x18, 0x96, 0x08, 0x56, 0x1F, 0x36, 0x07, 0x76, 0xE3, 0x37, 0xC6, 0x6F, 0x95, 0xDF, 0x89, 0xBF, 0x67, 0xE1, 0x60, 0xE1, 0x24, 0x00, 0xAC, 0x1F, 0x82, 0x07, 0x02, 0x58, 0xBD, 0x17, 0x7C, 0x3B, 0xFC, 0x33, 0x02, 0x13, 0x82, 0x3D, 0x42, 0x35, 0xC2, 0x05, 0x22, 0x39, 0xA2, 0x09, 0x62, 0x01, 0xE2, 0x2E, 0x12, 0x2E, 0x92, 0x26, 0x52, 0x1A, 0xD2, 0x32, 0x32, 0x12, 0xB2, 0x1C, 0x72, 0x0C, 0xF2, 0x04, 0x0A, 0x04, 0x8A, 0x30, 0x4A, 0x20, 0x4A, 0x2F, 0xCA, 0x27, 0x2A, 0x27, 0xAA, 0x1B, 0x6A, 0x13, 0xEA, 0x3D, 0x1A, 0x1D, 0x9A, 0x35, 0x5A, 0x05, 0xDA, 0x09, 0x3A, 0x09, 0xBA, 0x21, 0x7A, 0x2E, 0xFA, 0x16, 0x06, 0x16, 0x86, 0x3A, 0x46, 0x0A, 0xC6, 0x02, 0x26, 0x02, 0xA6, 0x0C, 0x66, 0x14, 0xE6, 0x18, 0x16, 0x38, 0x96, 0x10, 0x96, 0x3F, 0x56, 0x0F, 0xD6, 0x07, 0x36, 0x07, 0xB6, 0x2B, 0x76, 0x13, 0xF6, 0x1D, 0x0E, 0x1D, 0x8E, 0x35, 0x4E, 0x05, 0xCE, 0x09, 0x2E, 0x09, 0xAE, 0x21, 0x6E, 0x1E, 0xEE, 0x36, 0x1E, 0x36, 0x9E, 0x06, 0x5E, 0x3A, 0xDE, 0x26, 0x3E, 0x21, 0xBE, 0x19, 0x7E, 0x15, 0xFE, 0x3D, 0x01, 0x1B, 0x81, 0x37, 0x41, 0xFF, 0x1F, 0x88, 0x3F, 0xD2, 0x7F, 0x12, 0xFE, 0xAC, 0x12, 0xE2, 0x10, 0x1A, 0x10, 0x96, 0x12, 0x5E, 0x12, 0x31, 0x12, 0xB9, 0x11, 0x75, 0x11, 0x03, 0x13, 0x8B, 0x11, 0xC7, 0x10, 0x2F, 0x90, 0x60, 0x90, 0xE8, 0x90, 0x14, 0x02, 0xA8, 0x4E, 0x4B, 0xEA, 0x44, 0xDA, 0x4E, 0xFA, 0x4D, 0x26, 0x4C, 0x16, 0x41, 0x36, 0x4B, 0x8E, 0x42, 0xAE, 0x49, 0x9E, 0x07, 0x30, 0x77, 0x2A, 0x0A, 0x07, 0x8A, 0x16, 0x8A, 0x4F, 0x4A, 0x41, 0xCA, 0x30, 0xCA, 0x69, 0x2A, 0x64, 0x2A, 0x75, 0x80, 0xB7, 0x1F, 0x52, 0x53, 0x52, 0xDB, 0x51, 0x37, 0x53, 0x7F, 0xD0, 0x08, 0xD0, 0x84, 0xD2, 0x4C, 0xD1, 0x22, 0xD1, 0xAA, 0xD3, 0xE6, 0xD0, 0x1E, 0xD0, 0x51, 0x00, 0x68, 0xDE, 0x44, 0xF7, 0x4E, 0xCF, 0x4F, 0x1F, 0x4A, 0x3F, 0xC9, 0x80, 0xC8, 0xA0, 0xC6, 0x90, 0xCD, 0xB0, 0xCF, 0x48, 0xCE, 0x68, 0xCB, 0xD8, 0xC8, 0xF8, 0xC6, 0xC4, 0xC7, 0x14, 0xCC, 0x34, 0xC1, 0x8C, 0xC0, 0xAC, 0xC2, 0x9C, 0xC5, 0xBC, 0xC7, 0x42, 0xCA, 0x62, 0xCD, 0xD2, 0xC0, 0xF2, 0xCA, 0xCA, 0xC3, 0x1A, 0xC4, 0x3A, 0xCE, 0x06, 0xC7, 0xA6, 0xCC, 0x96, 0xC9, 0xB6, 0xCB, 0x4E, 0xC2, 0x6E, 0xC5, 0x5E, 0xCF, 0xFE, 0xC2, 0xC1, 0xC3, 0x11, 0xC8, 0x31, 0xC6, 0x09, 0xC7, 0xA9, 0xCC, 0x99, 0xC9, 0xB9, 0xC3, 0x45, 0xC2, 0x65, 0xC5, 0x55, 0xCF, 0xF5, 0xC2, 0xCD, 0xC3, 0x1D, 0xC4, 0x3D, 0xC6, 0x03, 0xC7, 0xA3, 0xCC, 0x93, 0xC9, 0xB3, 0xCB, 0x4B, 0xCA, 0x6B, 0xCD, 0xDB, 0xC0, 0xFB, 0xCA, 0xC7, 0xCB, 0x17, 0xCC, 0x37, 0xC1, 0x8F, 0xC0, 0xAF, 0xCA, 0x9F, 0xCD, 0xBF, 0x2F, 0x40, 0x21, 0x60, 0x2B, 0xD0, 0x20, 0xF0, 0x24, 0xC8, 0x21, 0xE8, 0x2D, 0xD8, 0x27, 0x04, 0x22, 0x24, 0x26, 0x14, 0x25, 0x34, 0x23, 0x8C, 0x24, 0xAC, 0x2A, 0x9C, 0x21, 0xBC, 0x25, 0xF2, 0x47, 0xC4, 0x44, 0xA4, 0x0C, 0xC0, 0x6E, 0x7A, 0x51, 0x67, 0xD1, 0x36, 0xD1, 0x4F, 0x31, 0x7E, 0xB1, 0x60, 0xB1, 0x31, 0x71, 0x58, 0x80, 0xB5, 0x27, 0x8B, 0xAF, 0x49, 0xE0, 0x48, 0xE8, 0x4B, 0x14, 0x49, 0x9C, 0x4A, 0x52, 0x4B, 0xDA, 0x4B, 0x36, 0x49, 0xBE, 0x4A, 0xF1, 0x48, 0x05, 0x48, 0x0D, 0x4B, 0x43, 0x49, 0xCB, 0x4A, 0x27, 0x4A, 0xAF, 0xC8, 0x60, 0xCB, 0xE8, 0xC9, 0x14, 0xCA, 0x9C, 0xCA, 0x52, 0xCB, 0x3A, 0xC8, 0x36, 0xCB, 0xBE, 0xCB, 0xF1, 0xCA, 0x05, 0xC9, 0x8D, 0xCA, 0xC3, 0xCA, 0xCB, 0xCB, 0xA7, 0xC8, 0xFF, 0x53, 0xC0, 0x53, 0x30, 0x52, 0x28, 0x53, 0xB8, 0x04, 0x30, 0xDB, 0x55, 0xB1, 0x53, 0xF1, 0x47, 0x49, 0x58, 0x29, 0x42, 0x69, 0x46, 0x19, 0x59, 0x59, 0x5D, 0x39, 0x47, 0x79, 0x5F, 0x85, 0x4C, 0xC5, 0x5A, 0xA5, 0x5E, 0xE5, 0x59, 0x95, 0x4B, 0xD5, 0x5F, 0x75, 0x58, 0x0D, 0x5A, 0x4D, 0x4E, 0x2D, 0x59, 0x6D, 0x5D, 0x1D, 0x4F, 0xDD, 0x58, 0xBD, 0x5C, 0xFD, 0x5A, 0x83, 0x49, 0xC3, 0x5D, 0xA3, 0x47, 0x13, 0x04, 0x40, 0xEB, 0x18, 0xCD, 0x05, 0x2D, 0x74, 0x2D, 0x6D, 0xAD, 0x7C, 0xAD, 0x63, 0x6D, 0x2A, 0x6D, 0x7B, 0xED, 0x26, 0xED, 0x37, 0x1D, 0x5E, 0x9D, 0x20, 0x9D, 0x31, 0x5D, 0x58, 0x5D, 0x05, 0xDD, 0xD4, 0xFF, 0xE1, 0xEF, 0xC6, 0x7A, 0x65, 0x7A, 0x57, 0xFA, 0x8C, 0xFA, 0xAE, 0xFA, 0x9D, 0xFA, 0x3F, 0x06, 0xC2, 0x06, 0xE1, 0x06, 0x53, 0x86, 0x88, 0x86, 0x2A, 0x86, 0x99, 0x86, 0xDB, 0x46, 0x84, 0x46, 0xA6, 0x46, 0x15, 0x46, 0x17, 0xC6, 0xD4, 0xC6, 0x36, 0xC6, 0x35, 0xC6, 0x37, 0x26, 0xF4, 0x26, 0x0E, 0x26, 0x0D, 0x26, 0x0F, 0xA6, 0xCC, 0xA6, 0x2E, 0xA6, 0x2D, 0xA6, 0x2F, 0x66, 0xEC, 0x66, 0xEE, 0x66, 0xED, 0x66, 0xEF, 0xE6, 0x5C, 0xE6, 0xDE, 0xE6, 0x5D, 0xE6, 0x5F, 0x00, 0x83, 0xF7, 0xB3, 0xE8, 0xB5, 0xFC, 0x65, 0x29, 0x60, 0x19, 0x60, 0x39, 0x60, 0x05, 0x62, 0x25, 0x64, 0x15, 0x6C, 0x35, 0x64, 0x0D, 0x66, 0x2D, 0x62, 0x1D, 0x62, 0x3D, 0x62, 0x03, 0x0E, 0x60, 0x73, 0x98, 0xCD, 0xA8, 0x2D, 0x84, 0xAD, 0x98, 0x6D, 0xB8, 0xED, 0x98, 0x1D, 0xA4, 0x9D, 0xB8, 0x5D, 0xB8, 0xDD, 0x98, 0x3D, 0xA4, 0xBD, 0xB8, 0x7D, 0xB8, 0xFD, 0x98, 0x03, 0xA4, 0x83, 0x98, 0x43, 0x98, 0xC3, 0xA8, 0x23, 0x84, 0xA3, 0xA8, 0x63, 0xA8, 0xE3, 0x88, 0x13, 0x98, 0x93, 0x88, 0x53, 0x88, 0xD3, 0x90, 0x33, 0xA8, 0xB3, 0x90, 0x73, 0xA0, 0xF3, 0x80, 0x0B, 0x90, 0x8B, 0x80, 0x8B, 0xBF, 0x4B, 0xAF, 0xCB, 0xB7, 0x2B, 0xAF, 0xAB, 0x8F, 0x6B, 0x97, 0xEB, 0x87, 0x1B, 0xA7, 0x9B, 0x87, 0x5B, 0x9B, 0xDB, 0x8B, 0x3B, 0xAB, 0xBB, 0x8B, 0x7B, 0x93, 0xFB, 0x83, 0x07, 0xA3, 0x87, 0x83, 0x47, 0x9D, 0xC7, 0x8D, 0x27, 0x8D, 0xA7, 0xB5, 0x67, 0xA5, 0xE7, 0xB9, 0x17, 0xB9, 0x97, 0x99, 0x57, 0x89, 0xD7, 0xA1, 0x37, 0x91, 0xB7, 0x81, 0x77, 0x9E, 0xF7, 0xB6, 0x0F, 0xAE, 0x8F, 0x96, 0x4F, 0xA6, 0xCF, 0x9A, 0x2F, 0xBA, 0xAF, 0x8A, 0x6F, 0x92, 0xEF, 0x82, 0x1F, 0x82, 0x9F, 0xAC, 0x5F, 0xB4, 0xDF, 0x24, 0x80, 0xCA, 0x62, 0xFE, 0x21, 0xFE, 0x43, 0x01, 0xC0, 0x01, 0xFC, 0x01, 0xBE, 0x01, 0x5D, 0x01, 0xEF, 0x81, 0xEC, 0x81, 0xAE, 0x81, 0x4D, 0x81, 0xF7, 0x41, 0xF4, 0x41, 0xF6, 0x41, 0x0D, 0x00, 0x2A, 0xB3, 0x06, 0xBB, 0x07, 0x77, 0x04, 0x7F, 0x86, 0xF0, 0x86, 0xF8, 0x87, 0x0C, 0x84, 0x82, 0x86, 0x8A, 0x86, 0x86, 0x87, 0x8E, 0x87, 0xC1, 0x84, 0xC9, 0x84, 0xC5, 0x86, 0xCD, 0x85, 0x23, 0x86, 0x2B, 0x85, 0x27, 0x87, 0xAF, 0x44, 0xA0, 0x47, 0x68, 0x44, 0x64, 0x46, 0x6C, 0x44, 0xE2, 0x44, 0xEA, 0x44, 0xE6, 0x46, 0xEE, 0x46, 0xFD, 0x89, 0x32, 0x8C, 0x2A, 0x8C, 0x3A, 0x8C, 0x26, 0x89, 0x36, 0x89, 0x2E, 0x89, 0x3E, 0x89, 0x21, 0x8F, 0x31, 0x07, 0x18, 0xFD, 0x79, 0x2C, 0x65, 0xAC, 0x55, 0x6C, 0x65, 0xEC, 0x65, 0x1C, 0x75, 0x9C, 0x75, 0x5C, 0x75, 0xDC, 0x55, 0x3C, 0x4D, 0xBC, 0x4D, 0x7C, 0x4D, 0xFC, 0x75, 0x02, 0x6D, 0x82, 0x6D, 0x42, 0x4D, 0xC2, 0x75, 0x22, 0x6D, 0xA2, 0x4D, 0x62, 0x75, 0xE2, 0x55, 0x12, 0x4D, 0x92, 0x75, 0x52, 0x55, 0xD2, 0x45, 0x32, 0x55, 0xB2, 0x65, 0x72, 0x45, 0xF2, 0x59, 0x0A, 0x45, 0x8A, 0x79, 0x4A, 0x69, 0xCA, 0x71, 0x2A, 0x49, 0xAA, 0x71, 0x6A, 0x51, 0xEA, 0x7E, 0xDA, 0x1F, 0x80, 0xD3, 0xE7, 0xA6, 0x6D, 0xA7, 0xE3, 0xA6, 0x6B, 0xA5, 0x67, 0x02, 0x88, 0x8C, 0x9E, 0xA1, 0x9A, 0x91, 0x9C, 0xB1, 0x98, 0x89, 0x98, 0x29, 0x9F, 0x19, 0x9B, 0x39, 0x95, 0x05, 0x9D, 0x25, 0x91, 0x15, 0x96, 0x35, 0x9C, 0x0D, 0x92, 0x2D, 0x90, 0xED, 0x97, 0xDD, 0x9D, 0xFD, 0x91, 0xC3, 0x9E, 0xE3, 0x9A, 0xD3, 0x94, 0x73, 0xFF, 0x97, 0xEE, 0xAF, 0xCD, 0xDF, 0xCA, 0xBF, 0xA7, 0xB9, 0xA4, 0xB9, 0x46, 0xB9, 0xF9, 0xB9, 0xDB, 0x79, 0x38, 0x79, 0x1A, 0x79, 0xA9, 0x79, 0x4B, 0xF9, 0x88, 0xF9, 0xB2, 0xF9, 0x51, 0x00, 0x36, 0x83, 0x17, 0x08, 0x15, 0xF8, 0x17, 0x74, 0x17, 0xBC, 0x17, 0x72, 0x16, 0x7A, 0x17, 0xF6, 0x14, 0xFD, 0x2A, 0x12, 0x2C, 0x0A, 0x2E, 0x1A, 0x29, 0x86, 0x28, 0x96, 0x28, 0x8E, 0x2A, 0x9E, 0x2E, 0x81, 0x03, 0xB8, 0x7D, 0x42, 0xC9, 0x62, 0x29, 0x6A, 0xA9, 0x6A, 0x69, 0x7A, 0xE9, 0x7A, 0x19, 0x56, 0x99, 0x76, 0x59, 0x4E, 0xD9, 0x76, 0x39, 0x41, 0xB9, 0x41, 0x79, 0x41, 0xF9, 0x41, 0x05, 0x71, 0x85, 0x69, 0x45, 0x29, 0x80, 0xD0, 0x14, 0x95, 0x96, 0x95, 0x95, 0x95, 0x97, 0x55, 0xD4, 0x55, 0x36, 0x55, 0x35, 0x55, 0x37, 0xD5, 0xF4, 0xD5, 0xF6, 0xD5, 0xF5, 0xD5, 0xF7, 0x35, 0x4C, 0x35, 0xCE, 0x35, 0xCD, 0x35, 0xCF, 0xB5, 0x6C, 0xB5, 0xEE, 0xB5, 0xED, 0xB5, 0xEF, 0x75, 0x5C, 0x75, 0x3E, 0x75, 0x3D, 0x75, 0x3F, 0xF5, 0xFC, 0xF5, 0x81, 0xF5, 0x83, 0x0D, 0xA0, 0x0D, 0xA2, 0x0D, 0x61, 0x0D, 0xE3, 0x8D, 0xD0, 0x8D, 0xD2, 0x8D, 0x31, 0x8D, 0xB3, 0x4D, 0x08, 0x4D, 0x8A, 0x4D, 0xC9, 0x4D, 0x2B, 0xCD, 0xE8, 0xCD, 0x1A, 0xCD, 0x59, 0xCD, 0x5B, 0x2D, 0xF8, 0x2D, 0x06, 0x2D, 0x85, 0x2D, 0x47, 0xAD, 0x64, 0xAD, 0x16, 0xAD, 0x95, 0xAD, 0x57, 0x6D, 0x74, 0x6D, 0x0E, 0x6D, 0x4D, 0x6D, 0xCF, 0xED, 0xEC, 0xED, 0x9E, 0xED, 0xDD, 0xED, 0x3F, 0x1D, 0x82, 0x1D, 0xC1, 0x1D, 0xA3, 0x9D, 0x50, 0x9D, 0xD2, 0x9D, 0x71, 0x9D, 0xF3, 0x5D, 0x28, 0x5D, 0x6A, 0x5D, 0x19, 0x5D, 0x9B, 0xDD, 0xF8, 0xDD, 0x86, 0xDD, 0xC5, 0xDD, 0xA7, 0x00, 0xC7, 0xB7, 0xED, 0xA9, 0xEF, 0x79, 0xEC, 0x65, 0xEB, 0xF5, 0x04, 0x30, 0xFB, 0x57, 0x9F, 0x70, 0x5F, 0x58, 0xDF, 0x44, 0x3F, 0x5C, 0xBF, 0x42, 0x7F, 0x4A, 0xFF, 0xDA, 0x00, 0xCE, 0x80, 0xDE, 0x40, 0xE1, 0xC0, 0x31, 0xC0, 0xF2, 0x6D, 0x07, 0x1B, 0x06, 0x9F, 0x86, 0x98, 0x87, 0x1C, 0x86, 0x6A, 0x86, 0xCE, 0x87, 0xC9, 0x86, 0x8D, 0x87, 0xF3, 0x87, 0xB7, 0x47, 0xB0, 0x47, 0xD4, 0x47, 0x52, 0x46, 0x16, 0x46, 0xE1, 0x47, 0x65, 0x46, 0x23, 0x47, 0x47, 0xC7, 0x40, 0xC7, 0x04, 0xC7, 0xFC, 0xC6, 0xBA, 0xC6, 0xDE, 0xC7, 0xD9, 0xC6, 0x9D, 0xC7, 0x1B, 0xC6, 0x6F, 0x26, 0x68, 0x26, 0xAC, 0x26, 0xCA, 0x26, 0x8E, 0x27, 0x89, 0x26, 0x0D, 0x26, 0x73, 0x27, 0xB7, 0xA6, 0xB0, 0xA6, 0xD4, 0xA7, 0x52, 0xA7, 0x96, 0xA6, 0x91, 0xA6, 0xE5, 0xA7, 0x63, 0xA7, 0xA7, 0x66, 0xA0, 0x67, 0xC4, 0x67, 0x42, 0x67, 0x86, 0x66, 0x81, 0x67, 0xF9, 0x67, 0x7D, 0x67, 0xBB, 0x66, 0xDF, 0xE7, 0xD8, 0xE7, 0x5C, 0xE7, 0x9A, 0xE7, 0x1E, 0xE6, 0x19, 0xE6, 0xED, 0xE6, 0x6B, 0xE6, 0x2F, 0x17, 0x28, 0x17, 0x2C, 0x16, 0x4A, 0x17, 0x8E, 0x16, 0x89, 0x17, 0x0D, 0x17, 0xF3, 0x17, 0x77, 0x96, 0xF0, 0x96, 0xB4, 0x97, 0xB2, 0x96, 0xD6, 0x97, 0x31, 0x96, 0x55, 0x97, 0x53, 0x96, 0x97, 0x56, 0x90, 0x56, 0x14, 0x56, 0xE2, 0x57, 0x66, 0x56, 0x7F, 0xAF, 0x4A, 0xAF, 0x46, 0xAE, 0x8E, 0xAF, 0x41, 0xAE, 0x89, 0xAD, 0x85, 0xAE, 0x0D, 0xAD, 0x83, 0xAC, 0x0B, 0xAE, 0x07, 0xAC, 0xF7, 0xAD, 0xFF, 0xFC, 0xE3, 0xF9, 0xE7, 0xFD, 0xAF, 0x13, 0x40, 0x7A, 0x8E, 0x0D, 0xF7, 0x8D, 0xD6, 0x8D, 0xE7, 0x4D, 0x96, 0x4D, 0xE7, 0xCD, 0xC6, 0xCD, 0xFB, 0x2D, 0x86, 0x2D, 0xFB, 0xAD, 0xDA, 0xAD, 0x9B, 0x6D, 0xDA, 0x6D, 0x9B, 0xED, 0xAA, 0xED, 0x8B, 0x1D, 0xCA, 0x1D, 0x8B, 0x9D, 0xF2, 0x9D, 0xD3, 0x5D, 0xB2, 0x5D, 0xD3, 0xDD, 0x92, 0xDD, 0xA3, 0x3D, 0xE2, 0x3D, 0xE3, 0xBD, 0xC2, 0xBD, 0x83, 0x7D, 0xC2, 0x7D, 0x83, 0xFD, 0x7C, 0x40, 0x0B, 0xC0, 0x3F, 0xD0, 0x38, 0x48, 0x3C, 0x98, 0x3C, 0x04, 0x39, 0xE4, 0x3E, 0x74, 0x39, 0xAC, 0x3E, 0x3C, 0x3E, 0xC2, 0x3F, 0x52, 0x3F, 0x4A, 0x38, 0x1A, 0x3F, 0x06, 0x3E, 0xE6, 0x3A, 0x76, 0x3E, 0xAE, 0x3E, 0x3E, 0x3E, 0xC1, 0x3F, 0x51, 0x3F, 0x49, 0x38, 0x99, 0x38, 0x05, 0x39, 0xE5, 0x3E, 0x75, 0x39, 0xAD, 0x39, 0x3D, 0x39, 0x23, 0x38, 0xD3, 0x38, 0x4B, 0x3C, 0x9B, 0x04, 0x90, 0x9F, 0xF7, 0xDC, 0xED, 0xBC, 0xEE, 0xFC, 0xEC, 0x82, 0xE8, 0x42, 0xFB, 0x22, 0xE5, 0x62, 0xE6, 0x12, 0xF2, 0x52, 0xE0, 0xD2, 0xF3, 0xB2, 0xE9, 0xF2, 0xEA, 0x8A, 0xEC, 0x4A, 0xFF, 0x2A, 0xE3, 0x6A, 0xF1, 0x1A, 0xF6, 0x5A, 0xF4, 0xDA, 0xEF, 0xBA, 0xFD, 0xFA, 0xFE, 0x86, 0xFA, 0xC6, 0xE4, 0x26, 0xF7, 0x66, 0xFD, 0x16, 0xE9, 0x56, 0xFA, 0x36, 0xF4, 0xB6, 0xF7, 0xF6, 0xED, 0x8E, 0xE9, 0xCE, 0xFA, 0xAE, 0x04, 0xC0, 0x7E, 0xAC, 0x7B, 0xA5, 0xFB, 0x98, 0xFB, 0xD1, 0x07, 0xA0, 0x07, 0xAE, 0x07, 0x97, 0x87, 0x9A, 0x87, 0xD3, 0x47, 0xC2, 0x47, 0xED, 0xC7, 0xD4, 0xC7, 0xB9, 0x27, 0xE8, 0x27, 0xE1, 0x27, 0xDF, 0xA7, 0xB6, 0xA7, 0xFB, 0x67, 0xEA, 0x67, 0xB3, 0xE7, 0xFC, 0xE7, 0x8D, 0x17, 0xD4, 0x17, 0xB9, 0x97, 0x88, 0x97, 0xA1, 0x97, 0xEF, 0x57, 0xF6, 0x57, 0xC7, 0xD7, 0xEA, 0xD7, 0x93, 0xB7, 0x3F, 0x6F, 0xDA, 0x6F, 0xA9, 0x6F, 0x73, 0xEF, 0x30, 0xEF, 0x22, 0xEF, 0x7E, 0xEF, 0x1D, 0xEF, 0x8F, 0x1F, 0x74, 0x1F, 0x16, 0x1F, 0x45, 0x1F, 0xDB, 0x9F, 0x98, 0x9F, 0xCA, 0x9F, 0xB1, 0x9F, 0xE3, 0x80, 0x02, 0xC0, 0xFB, 0xE5, 0xF1, 0xD5, 0xF8, 0x75, 0xFD, 0x4D, 0xF1, 0x6D, 0xF4, 0xFD, 0xF7, 0x7B, 0xFD, 0x07, 0xE5, 0x47, 0xF6, 0x27, 0xE2, 0x67, 0xE8, 0x7F, 0xF0, 0x9F, 0xF3, 0x97, 0xF3, 0xAF, 0xDA, 0x5F, 0x67, 0x40, 0x44, 0x40, 0x3A, 0x40, 0x69, 0x40, 0x0B, 0xC0, 0xB0, 0xC0, 0xA2, 0xC0, 0x01, 0xC0, 0x9D, 0xC0, 0x4F, 0x20, 0x74, 0x20, 0x96, 0x20, 0x45, 0x20, 0x3B, 0xA0, 0x98, 0xA0, 0x4A, 0xA0, 0xB1, 0xA0, 0x63, 0x60, 0x20, 0x60, 0x3C, 0x60, 0xEE, 0x60, 0x0D, 0x60, 0x97, 0xE0, 0x64, 0xE0, 0x06, 0xE0, 0xD9, 0xE0, 0xAB, 0x10, 0x88, 0x10, 0xD2, 0x10, 0xA1, 0x10, 0xFD, 0x10, 0x1F, 0x90, 0xAC, 0x90, 0x0E, 0x90, 0x95, 0x90, 0xC7, 0x80, 0xD2, 0xAF, 0x05, 0x95, 0x0A, 0x35, 0x0F, 0x0D, 0x03, 0x2D, 0x0A, 0x1D, 0x00, 0xDD, 0x05, 0xFD, 0x0C, 0xC3, 0x00, 0x63, 0x0D, 0x70, 0xFE, 0x7D, 0x58, 0x1C, 0x58, 0x35, 0xD8, 0x44, 0xD8, 0xE9, 0xDF, 0x90, 0x80, 0xBE, 0xEF, 0xFB, 0xBB, 0xFD, 0xF7, 0x23, 0x1C, 0x2D, 0x9C, 0x05, 0x5C, 0x11, 0xDC, 0x0E, 0x3C, 0x16, 0xBC, 0x0A, 0x7C, 0x3C, 0xFC, 0x24, 0x02, 0x04, 0x82, 0x20, 0x82, 0x0F, 0x42, 0x1B, 0xC2, 0x03, 0x22, 0x2D, 0xC0, 0xF6, 0x8B, 0x10, 0x77, 0x90, 0xB0, 0x91, 0x54, 0x91, 0x12, 0x90, 0xA6, 0x90, 0x21, 0x00, 0xAE, 0xEF, 0x8B, 0xDC, 0x8E, 0xFC, 0x88, 0x42, 0x8F, 0x62, 0x85, 0x52, 0x82, 0xB2, 0x87, 0x8A, 0x8B, 0xAA, 0x8E, 0x9A, 0x84, 0x3A, 0x8B, 0x06, 0x8D, 0x26, 0x82, 0x16, 0x80, 0xD6, 0x85, 0xF6, 0x8A, 0xCE, 0x84, 0x6E, 0x8B, 0x5E, 0x81, 0x7E, 0x84, 0xF1, 0x07, 0x43, 0x1B, 0x23, 0x1D, 0x63, 0x11, 0x13, 0x1E, 0x53, 0x12, 0x33, 0x14, 0xB3, 0x1F, 0xF3, 0x0B, 0x8B, 0x1D, 0xCB, 0x19, 0xAB, 0x0E, 0xEB, 0x02, 0x9B, 0x0C, 0xDB, 0x10, 0xFB, 0x2F, 0xF6, 0x3F, 0x1C, 0x54, 0x1C, 0x05, 0x9C, 0x18, 0x9C, 0x31, 0x5C, 0x50, 0x5C, 0x7E, 0x5C, 0x3F, 0xDC, 0x51, 0x3C, 0x44, 0x3C, 0x2D, 0xBC, 0x62, 0xBC, 0x1B, 0x7C, 0x76, 0xFC, 0x40, 0xFC, 0x29, 0x02, 0x34, 0x02, 0x7D, 0x82, 0x0A, 0x82, 0xC7, 0x3F, 0xBC, 0x00, 0xBF, 0x5F, 0x00, 0xAC, 0x00, 0x53, 0xC2, 0x3A, 0xC2, 0x0F, 0x22, 0x11, 0xA2, 0x38, 0xA2, 0x75, 0x62, 0x22, 0x62, 0x1B, 0xE2, 0x36, 0x12, 0x60, 0x12, 0x69, 0x92, 0x54, 0x92, 0x3D, 0x52, 0x2A, 0x52, 0x17, 0xD2, 0x3E, 0x32, 0x68, 0x32, 0x15, 0xB2, 0x5C, 0xB2, 0x33, 0x72, 0x66, 0x72, 0x5F, 0xF2, 0x71, 0x80, 0xD5, 0xEB, 0x52, 0x94, 0x51, 0x3C, 0x50, 0xF2, 0x50, 0x86, 0x53, 0x2E, 0x50, 0xE1, 0x52, 0x99, 0x53, 0x35, 0x50, 0x7D, 0x51, 0x8B, 0x51, 0x27, 0x52, 0x6F, 0xD1, 0x90, 0xD1, 0x38, 0xD2, 0x74, 0xD3, 0x42, 0xD2, 0x2A, 0x02, 0xF8, 0x7F, 0x4A, 0xC7, 0x44, 0xE7, 0x4B, 0x37, 0x46, 0x8F, 0x4C, 0xAF, 0x4B, 0x5F, 0x4E, 0xFF, 0xC8, 0xC0, 0xC7, 0x10, 0xC9, 0xB0, 0xCC, 0x48, 0xC0, 0x68, 0xC5, 0xD8, 0xC2, 0x04, 0xC4, 0x24, 0xCD, 0x94, 0xC6, 0xB4, 0xCF, 0x4C, 0xC3, 0xEC, 0xC1, 0x3C, 0xC4, 0x02, 0xCF, 0xA2, 0xC9, 0x52, 0xCC, 0x72, 0xC7, 0xCA, 0xCD, 0x1A, 0xC6, 0xBA, 0xC0, 0x86, 0xCB, 0x66, 0xCE, 0xD6, 0x08, 0x68, 0xF5, 0x12, 0xEC, 0xC9, 0xEC, 0x3B, 0x1C, 0x94, 0x1C, 0x2E, 0x1C, 0xBD, 0x9C, 0xD0, 0x9C, 0x2A, 0x9C, 0xB9, 0x9C, 0xE7, 0x5C, 0x2C, 0x5C, 0x7E, 0x5C, 0x13, 0xDC, 0x28, 0xDC, 0x7A, 0xDC, 0xE5, 0xDC, 0x8F, 0x3C, 0xBC, 0x3C, 0x11, 0x3C, 0x8B, 0xBC, 0xB8, 0xBC, 0xE6, 0x00, 0xEE, 0x7F, 0xF2, 0x89, 0xF1, 0x25, 0xF0, 0x6D, 0xF0, 0x93, 0xF0, 0xDB, 0xF1, 0xB7, 0x0B, 0x80, 0x08, 0xC8, 0x08, 0xA4, 0x09, 0xEC, 0x09, 0x52, 0x09, 0xBA, 0x08, 0xF6, 0x0A, 0x41, 0x09, 0x29, 0x09, 0xE5, 0x08, 0x9D, 0x08, 0x33, 0x0A, 0x7B, 0x0B, 0x8F, 0x88, 0x20, 0x88, 0x68, 0x8A, 0x14, 0x89, 0x5C, 0x8B, 0x72, 0x88, 0x06, 0x89, 0x4E, 0x8B, 0xA1, 0x8B, 0x19, 0x8A, 0x55, 0x89, 0x3D, 0x8B, 0xF3, 0x8B, 0x47, 0x89, 0x2F, 0x4B, 0xE0, 0x4B, 0x58, 0x4A, 0x34, 0x49, 0xFC, 0x48, 0x4A, 0x48, 0x26, 0x49, 0x6E, 0x4B, 0x91, 0x4B, 0x39, 0x49, 0x75, 0x4B, 0x43, 0x4A, 0x2B, 0xFE, 0x8F, 0x4E, 0xCF, 0x28, 0xE3, 0x23, 0x33, 0x2A, 0x8B, 0x24, 0xAB, 0x23, 0x5B, 0x2A, 0x7B, 0x2F, 0xC7, 0x23, 0x17, 0x26, 0xB7, 0x20, 0x8F, 0x2B, 0x6F, 0x2E, 0xDF, 0x28, 0xFF, 0xA5, 0x20, 0xAE, 0x90, 0xA4, 0xB0, 0xAD, 0x48, 0xA1, 0xE8, 0xAC, 0xD8, 0xAB, 0x04, 0xAD, 0xA4, 0xA2, 0x94, 0x07, 0xB0, 0x73, 0x56, 0xE5, 0x00, 0xE5, 0x29, 0x15, 0x0C, 0x15, 0x23, 0x95, 0x1A, 0x95, 0x37, 0x55, 0x61, 0xD5, 0x78, 0xD5, 0x0D, 0x35, 0x52, 0x35, 0x47, 0xB5, 0x6E, 0x75, 0x48, 0x75, 0x65, 0xF5, 0x5C, 0xF5, 0x0B, 0x0D, 0x56, 0x8D, 0x40, 0x8D, 0x69, 0x4D, 0x4C, 0x4D, 0x63, 0xCD, 0x5A, 0xCD, 0x0F, 0x2D, 0x51, 0xAD, 0x04, 0xAD, 0x4D, 0x6D, 0x32, 0x6D, 0x47, 0xED, 0x2E, 0x1D, 0x08, 0x1D, 0x45, 0x9D, 0x6C, 0x9D, 0x63, 0x5D, 0x06, 0x5D, 0x2F, 0xDD, 0x61, 0x3D, 0x78, 0x3D, 0x0D, 0xBD, 0x42, 0x00, 0xE3, 0xD9, 0xF4, 0x03, 0xF4, 0x27, 0x0C, 0x50, 0x0C, 0x74, 0x0C, 0x4A, 0x0D, 0x6E, 0x0D, 0x39, 0x0C, 0x03, 0x0D, 0x27, 0x8D, 0x50, 0x8C, 0x74, 0x8C, 0x4A, 0x8C, 0x6E, 0x8C, 0xD9, 0x8D, 0xFD, 0x8D, 0xC7, 0x4D, 0x10, 0x4D, 0x34, 0x4D, 0x0A, 0x4C, 0xCE, 0x4D, 0x99, 0x4C, 0xBD, 0x4C, 0x07, 0xCD, 0x60, 0xCC, 0x94, 0xCC, 0xB2, 0xCC, 0x8E, 0xCC, 0x99, 0xCC, 0x03, 0xCD, 0xE7, 0x2C, 0xF0, 0x2D, 0x6C, 0x2C, 0x3A, 0x2D, 0xA1, 0x2C, 0xD5, 0x2C, 0x8B, 0x2D, 0x1F, 0xAC, 0x04, 0xAC, 0x62, 0xAD, 0x36, 0xAD, 0x29, 0xAD, 0xDD, 0xAC, 0x87, 0x6D, 0x90, 0x6D, 0xF4, 0x6D, 0x6A, 0x6C, 0x3E, 0x6C, 0xC5, 0x6D, 0x53, 0x6D, 0x0F, 0xEC, 0x18, 0xEC, 0x7C, 0xED, 0x26, 0xED, 0x31, 0xEC, 0x4D, 0xED, 0x1B, 0x1D, 0x7E, 0x39, 0xC8, 0x38, 0x64, 0x3A, 0x9C, 0x38, 0x32, 0x3B, 0x06, 0x38, 0xCE, 0x00, 0xAA, 0xBC, 0xB9, 0x53, 0xB3, 0x33, 0xB0, 0xB3, 0x9C, 0x73, 0x96, 0xF3, 0xA9, 0x0B, 0x8B, 0x4B, 0xA0, 0xCB, 0x8C, 0x2B, 0xB6, 0xAB, 0x99, 0x6B, 0x93, 0xDB, 0x2F, 0x37, 0x19, 0xB7, 0x0C, 0xB7, 0x23, 0x77, 0x46, 0x77, 0x5F, 0xF7, 0x09, 0x0F, 0x34, 0x0F, 0x23, 0x8F, 0x5A, 0x8F, 0x0F, 0x4F, 0x31, 0x40, 0x8F, 0xDF, 0xF1, 0xA2, 0xF2, 0x72, 0xF3, 0x1A, 0xF4, 0x86, 0xF7, 0xD6, 0xF2, 0x2E, 0xF5, 0xBE, 0xF7, 0xE1, 0xF5, 0x89, 0xF4, 0x59, 0xF1, 0xFD, 0xE3, 0x6B, 0xE3, 0xDB, 0xE6, 0x07, 0xEA, 0x27, 0x0F, 0x68, 0xF1, 0xC7, 0xFE, 0x8C, 0xFE, 0x3E, 0xFE, 0xE3, 0x01, 0x28, 0x01, 0x7A, 0x01, 0x15, 0x01, 0xCF, 0x81, 0x02, 0x81, 0xD1, 0x81, 0xAB, 0x41, 0x84, 0x41, 0x36, 0x41, 0xED, 0xC1, 0xA0, 0xC1, 0x72, 0xC1, 0x99, 0xC1, 0x47, 0x21, 0xF4, 0x21, 0x5E, 0x21, 0x23, 0xA1, 0x88, 0xA1, 0xDA, 0xA1, 0xA5, 0xA1, 0xF7, 0x61, 0x3C, 0x61, 0xE1, 0x61, 0x8B, 0xE1, 0x78, 0xE1, 0xE6, 0xE1, 0x8D, 0xE1, 0xDF, 0x11, 0xE2, 0x11, 0x49, 0x11, 0x5B, 0x91, 0xE4, 0x91, 0x8E, 0x91, 0xDD, 0x51, 0x10, 0x51, 0x0A, 0x51, 0xD9, 0x51, 0xC7, 0xD1, 0xF4, 0xD1, 0x9E, 0xD1, 0xC3, 0x31, 0xF0, 0x31, 0x1A, 0x31, 0x85, 0x31, 0x2F, 0xB1, 0xCA, 0xB1, 0x0D, 0x71, 0xF0, 0x00, 0x52, 0x8F, 0xC7, 0x93, 0xC5, 0x07, 0xC7, 0xEF, 0x25, 0xF0, 0x26, 0x64, 0x25, 0xBC, 0x26, 0xAA, 0x24, 0xD6, 0x27, 0xC1, 0x25, 0x59, 0x25, 0x8D, 0x26, 0x13, 0x27, 0xFB, 0x27, 0x6F, 0xA5, 0x70, 0xA4, 0xA4, 0xA4, 0xDC, 0xA7, 0xCA, 0xA6, 0x56, 0xA4, 0x81, 0xA7, 0x19, 0xA6, 0xF5, 0xA4, 0x63, 0xA6, 0xBB, 0xA4, 0xCF, 0x67, 0xD0, 0x64, 0x84, 0x67, 0x1C, 0x02, 0x0C, 0x39, 0x2B, 0xF3, 0x39, 0x4B, 0x31, 0xAB, 0x3A, 0x1B, 0x32, 0xDB, 0x38, 0xBB, 0x37, 0x07, 0x2B, 0xC7, 0x25, 0x67, 0xEE, 0x2F, 0xE5, 0xDF, 0x90, 0xBF, 0x3B, 0xB9, 0x9C, 0xB9, 0xC9, 0xB9, 0xD7, 0x79, 0xE2, 0x79, 0xF9, 0x79, 0x1F, 0xF9, 0xCA, 0xF9, 0x35, 0x05, 0x10, 0x05, 0xFA, 0x05, 0xED, 0x85, 0x48, 0x85, 0x96, 0x85, 0x83, 0x45, 0xD8, 0x45, 0xCE, 0x45, 0x53, 0xC5, 0xC4, 0xC5, 0xDE, 0xC5, 0x8B, 0x25, 0x54, 0x25, 0x41, 0x80, 0x96, 0xCE, 0x50, 0x1A, 0x01, 0xB0, 0x61, 0xD6, 0xB2, 0x98, 0xB2, 0xC3, 0x72, 0xCE, 0xF2, 0x84, 0xF2, 0x93, 0x0A, 0x9E, 0x8A, 0xA4, 0x8A, 0xB3, 0x4A, 0xBE, 0xCA, 0x94, 0xCA, 0x8B, 0x2A, 0xFE, 0xAA, 0xD4, 0xAA, 0xCB, 0x6A, 0x81, 0xEA, 0xB4, 0xEA, 0xAB, 0x1A, 0xA1, 0x9A, 0xF4, 0x9A, 0xEB, 0x5A, 0xE1, 0xDA, 0xCC, 0xDA, 0xDB, 0x3A, 0xD1, 0xBA, 0xEC, 0xBA, 0xFB, 0x7A, 0xF1, 0xFA, 0xBF, 0xF5, 0x8F, 0x0D, 0x92, 0x00, 0xFF, 0x7D, 0x06, 0x70, 0xB5, 0xA0, 0xF1, 0xB5, 0x49, 0xB6, 0xA9, 0xA8, 0xE9, 0xA3, 0x59, 0xA1, 0xB9, 0xB4, 0xF9, 0xAB, 0x45, 0xA9, 0xA5, 0xA2, 0xF5, 0x57, 0xAB, 0x6A, 0x6B, 0x75, 0x1B, 0x48, 0x9B, 0x46, 0x5B, 0x5D, 0x3B, 0x38, 0xC0, 0x7B, 0x1B, 0x3B, 0xA0, 0x3A, 0xB4, 0x3A, 0xCA, 0x3B, 0x5E, 0x3A, 0x45, 0x3A, 0x93, 0x3A, 0xF7, 0xBA, 0xE8, 0xBA, 0x7C, 0xBB, 0xA6, 0xBA, 0xB1, 0xBA, 0xCD, 0xBB, 0x5B, 0x7A, 0xC0, 0x7A, 0x94, 0x7A, 0xF2, 0x7B, 0x6E, 0x7A, 0x79, 0x7B, 0xA3, 0x7B, 0x37, 0xFA, 0x28, 0xFA, 0xDC, 0xFB, 0x46, 0xFA, 0x51, 0xFB, 0x8D, 0xFB, 0x1B, 0x07, 0x80, 0x07, 0x14, 0x06, 0xF2, 0x06, 0x6E, 0x06, 0x79, 0x07, 0x63, 0x06, 0xB7, 0x86, 0xA8, 0x87, 0xBC, 0x86, 0x26, 0x87, 0xB1, 0x87, 0x2D, 0x87, 0x3B, 0x46, 0xA0, 0x47, 0x34, 0x47, 0xCA, 0x47, 0xDE, 0x46, 0x25, 0x46, 0x33, 0x47, 0xCF, 0xC7, 0x38, 0xC7, 0x22, 0xC7, 0x36, 0xC6, 0xA9, 0xC6, 0xBD, 0xC6, 0xA7, 0x26, 0x70, 0x26, 0x6C, 0x26, 0x7A, 0x26, 0xE1, 0x27, 0xF5, 0x27, 0xEB, 0xA7, 0x80, 0xA7, 0x94, 0xA6, 0x8A, 0xA7, 0x5E, 0xA6, 0xC5, 0xA7, 0x33, 0xA7, 0x2F, 0x67, 0x78, 0x67, 0x12, 0xFE, 0x87, 0xFB, 0x86, 0xCF, 0x6E, 0xCC, 0xD1, 0xCE, 0x05, 0xCC, 0x2D, 0xCD, 0x93, 0xCD, 0x7B, 0xCD, 0xCF, 0x2C, 0x10, 0x2E, 0xB8, 0x2E, 0x4C, 0x2C, 0xE2, 0x01, 0xDC, 0x77, 0x74, 0x09, 0x7B, 0xC9, 0x7E, 0x69, 0x68, 0x19, 0x73, 0xD9, 0x76, 0x79, 0x68, 0x05, 0x73, 0xC5, 0x6E, 0x65, 0x68, 0x15, 0x6B, 0xD5, 0x7E, 0x75, 0x64, 0x0D, 0x67, 0xCD, 0x71, 0x6D, 0x7C, 0x9D, 0x60, 0xDD, 0x75, 0x7D, 0xFA, 0x1F, 0x31, 0x80, 0x88, 0x8B, 0x1B, 0x54, 0x1B, 0x81, 0x1B, 0xFF, 0x36, 0x19, 0x37, 0x23, 0x37, 0x0F, 0xB6, 0xB8, 0xB6, 0x92, 0xB7, 0xAE, 0xB6, 0x45, 0xB7, 0x73, 0xB7, 0x5F, 0x77, 0x14, 0x77, 0x2A, 0x01, 0x35, 0x5C, 0x6F, 0xB7, 0x7D, 0x0F, 0x79, 0xCF, 0x76, 0x6F, 0x6C, 0x9F, 0x68, 0xDF, 0x77, 0x7F, 0xFD, 0x80, 0xE5, 0x20, 0xFC, 0xA0, 0xF7, 0x60, 0xE7, 0xE0, 0xE7, 0x10, 0xFF, 0x90, 0xEF, 0x50, 0xEF, 0xD0, 0xEF, 0x30, 0xF7, 0xB0, 0xF7, 0x70, 0xE7, 0xF0, 0x07, 0x40, 0x41, 0xFE, 0x23, 0xFD, 0x23, 0xFF, 0xA3, 0xBC, 0xA3, 0xBE, 0xA3, 0xBD, 0x63, 0xA0, 0xE3, 0x3F, 0xC7, 0x82, 0xC7, 0x86, 0xC7, 0x81, 0xC7, 0x85, 0xC7, 0x83, 0xC7, 0x87, 0x27, 0xA0, 0x27, 0x24, 0x27, 0x22, 0x27, 0xA6, 0x27, 0xA1, 0x27, 0xA5, 0x27, 0x63, 0x27, 0xA7, 0xA7, 0x50, 0xA7, 0x14, 0xA7, 0x92, 0xA7, 0x56, 0xA7, 0xD1, 0xA7, 0x55, 0xA7, 0xD3, 0xA7, 0xD7, 0x67, 0xF0, 0x67, 0xF4, 0x67, 0x0A, 0x67, 0x0E, 0x00, 0x46, 0x36, 0x9E, 0x2D, 0x9D, 0x3D, 0x9D, 0xA3, 0x9D, 0xB3, 0x9D, 0xAB, 0x9F, 0x7B, 0x9E, 0x67, 0x9D, 0x77, 0x9D, 0x6F, 0x9D, 0x7F, 0x5F, 0xE0, 0x5F, 0x08, 0x5C, 0x18, 0x5E, 0x04, 0x5D, 0x14, 0x5D, 0x8C, 0x5C, 0x9C, 0x5C, 0x42, 0x5D, 0x52, 0x5E, 0x4A, 0x5D, 0xDA, 0x5C, 0xC6, 0x5E, 0xD6, 0x5D, 0xCE, 0x5F, 0x3E, 0x5C, 0xA1, 0x5C, 0xB1, 0x5E, 0xA9, 0x5F, 0x79, 0x5C, 0x65, 0x5D, 0x75, 0x5F, 0x6D, 0x5F, 0xFF, 0xBA, 0x26, 0xBC, 0x16, 0x06, 0xD8, 0x73, 0xD8, 0x75, 0xF9, 0xF5, 0xE4, 0xF5, 0xD5, 0x0D, 0xFC, 0x0D, 0xC3, 0x8D, 0xD2, 0x8D, 0xCB, 0x4D, 0xDA, 0x4D, 0xFB, 0xCD, 0xC6, 0xCD, 0xD7, 0x2D, 0xFE, 0xAD, 0xC0, 0xAD, 0x31, 0x80, 0xA7, 0x65, 0xB7, 0x13, 0xB7, 0x57, 0x77, 0xF0, 0x77, 0x0C, 0x77, 0xCA, 0x77, 0xAE, 0x77, 0xE9, 0x77, 0x9D, 0x77, 0x5B, 0xF7, 0xBF, 0xEE, 0x09, 0xEF, 0x45, 0xEE, 0xCD, 0xEE, 0x23, 0xEF, 0xAB, 0xEE, 0x67, 0xEF, 0xEF, 0x1F, 0x50, 0x1E, 0xD8, 0x1E, 0x34, 0x1F, 0x7C, 0x1E, 0x72, 0x1F, 0x06, 0x1E, 0x8E, 0x1E, 0x21, 0x1F, 0xA9, 0x1E, 0x25, 0x1E, 0x8D, 0x1E, 0x7D, 0x1E, 0x93, 0x1E, 0x2B, 0x1E, 0xFB, 0x1F, 0x57, 0x1F, 0xAF, 0x9F, 0xC0, 0x9E, 0x70, 0x9E, 0x18, 0x9F, 0x24, 0x00, 0xC6, 0xED, 0xF6, 0x14, 0xFB, 0x54, 0xF4, 0xD4, 0xF9, 0xB4, 0xF0, 0x74, 0x06, 0x68, 0xF0, 0xE8, 0xCF, 0xB4, 0xCF, 0xC2, 0xCF, 0x5A, 0xCF, 0x8E, 0xCF, 0x11, 0xCF, 0x79, 0xCF, 0xAD, 0xCF, 0x33, 0xCF, 0x47, 0xCF, 0x9F, 0x2F, 0xC8, 0x2F, 0x94, 0x2F, 0x02, 0x2F, 0xEA, 0x2F, 0x76, 0x2F, 0xA1, 0x2F, 0x39, 0x2F, 0x4D, 0x2F, 0x93, 0x2F, 0xFB, 0x2F, 0x6F, 0xAF, 0x88, 0xAF, 0xE4, 0xAF, 0x7C, 0xAF, 0xAA, 0x00, 0x37, 0x0F, 0x7E, 0xCD, 0x7A, 0x6D, 0x7C, 0x9D, 0x78, 0xDD, 0x7B, 0x7D, 0x7D, 0x43, 0x78, 0x23, 0x7B, 0xE3, 0x7D, 0x53, 0x79, 0xB3, 0x79, 0x0B, 0x7E, 0xCB, 0x7A, 0x6B, 0x7C, 0x9B, 0x78, 0xDB, 0x7B, 0x7B, 0x7B, 0x47, 0x78, 0x27, 0x03, 0x94, 0x7B, 0xD5, 0x77, 0x9B, 0xF7, 0x90, 0xF7, 0xEC, 0xF7, 0xA6, 0xF7, 0xC9, 0xF7, 0x83, 0xF7, 0xF7, 0x0F, 0xA4, 0x0F, 0x0A, 0x80, 0xC1, 0xAB, 0x7F, 0xD8, 0x7F, 0x84, 0x7D, 0xE4, 0x7E, 0xB4, 0x7C, 0xCC, 0x7C, 0x1C, 0x7F, 0x7C, 0x7D, 0xA2, 0x7E, 0x52, 0x7F, 0x0A, 0x7F, 0x6A, 0x7F, 0x3A, 0x7D, 0x46, 0x7D, 0x16, 0x7E, 0x76, 0x7C, 0x2E, 0x7C, 0x9E, 0x7F, 0x01, 0x7D, 0x61, 0x7E, 0x31, 0x7C, 0x49, 0x7C, 0x19, 0x7C, 0xB9, 0x7F, 0xC5, 0x7F, 0x95, 0x7D, 0xF5, 0x7D, 0xAD, 0x7D, 0xDD, 0x7C, 0x43, 0x7C, 0xE3, 0x7F, 0xB3, 0x7D, 0xCB, 0x7D, 0x9B, 0x7D, 0xFB, 0x7D, 0xA7, 0x7D, 0xD7, 0x7E, 0x8F, 0x7E, 0xEF, 0x7C, 0xBF, 0xFC, 0xC0, 0xFD, 0x90, 0xFE, 0xF0, 0xFE, 0xA8, 0xFD, 0xD8, 0xFD, 0x84, 0xFD, 0xE4, 0xFE, 0xB4, 0xFE, 0xCC, 0xFE, 0x9C, 0xFC, 0xFC, 0xD8, 0x98, 0x3A, 0xFF, 0x8F, 0x77, 0x17, 0x83, 0x00, 0xFD, 0xF7, 0xAF, 0x75, 0xFE, 0xF5, 0xFF, 0xFE, 0xFC, 0x97, 0xE7, 0x81, 0x00, 0xBF, 0x80, 0x43, 0x5C, 0x60, 0x0E, 0x10, 0x15, 0x50, 0x7B, 0xB0, 0x48, 0xF0, 0x42, 0x88, 0x2E, 0xC8, 0x25, 0xA8, 0x0B, 0x18, 0x20, 0x58, 0xF4, 0xDF, 0xD4, 0x70, 0xFC, 0xF0, 0xCA, 0x08, 0x66, 0x88, 0x1E, 0x48, 0x51, 0xC8, 0x59, 0x28, 0x55, 0xA8, 0x9D, 0x68, 0x13, 0xE8, 0x6B, 0x18, 0x47, 0x98, 0xF7, 0x58, 0x3F, 0x38, 0xD0, 0xB8, 0xA8, 0x78, 0xF8, 0xF8, 0x14, 0x04, 0x8C, 0x7F, 0x38, 0x09, 0x05, 0x88, 0xC4, 0x89, 0x65, 0x49, 0x94, 0x49, 0xD5, 0xC9, 0xB4, 0xC9, 0xF5, 0x28, 0x0C, 0x29, 0x8D, 0xA8, 0x00, 0x0A, 0x46, 0x63, 0x44, 0x6B, 0x48, 0xA7, 0x4F, 0xAF, 0xC3, 0xA0, 0xC9, 0xA8, 0xCA, 0xA4, 0xC0, 0x2C, 0xCD, 0x22, 0xCA, 0xCA, 0xCF, 0xC6, 0xCE, 0x4E, 0xCF, 0x41, 0xC6, 0x89, 0xCB, 0x85, 0xCC, 0x0D, 0xC1, 0xFD, 0xC1, 0x73, 0xCD, 0xBB, 0xCB, 0x37, 0xCF, 0x3F, 0x20, 0xD0, 0x20, 0x58, 0x28, 0x94, 0x2C, 0x1C, 0x2A, 0xE2, 0x21, 0x6A, 0x2D, 0xA6, 0x2F, 0xAE, 0x22, 0x21, 0x29, 0xC9, 0x2F, 0xC5, 0x2A, 0x4D, 0x2B, 0x43, 0x2A, 0x8B, 0x2F, 0x87, 0x29, 0x8F, 0xAC, 0x00, 0xA7, 0x08, 0xAD, 0x04, 0xA1, 0x0C, 0xA6, 0x02, 0xA2, 0x0A, 0xAC, 0x06, 0xA4, 0x0E, 0xAC, 0x01, 0xAC, 0x09, 0xA2, 0x05, 0xA6, 0x0D, 0xAE, 0x03, 0xA5, 0x0B, 0xAB, 0x07, 0xAF, 0x8F, 0x6C, 0x80, 0x6E, 0x88, 0x6D, 0x44, 0x60, 0x4C, 0x6A, 0x42, 0x6D, 0xCA, 0x68, 0xC6, 0x61, 0x2E, 0x60, 0x21, 0x61, 0xA9, 0x68, 0xA5, 0x6D, 0x6D, 0x66, 0xE3, 0x68, 0xEB, 0x67, 0x17, 0x6D, 0x9F, 0xE9, 0x50, 0xE6, 0xD8, 0xE6, 0x34, 0xE6, 0xBC, 0x06, 0xE8, 0xA3, 0x5F, 0xEE, 0x08, 0x1E, 0xC4, 0x9E, 0x1C, 0x5E, 0xB2, 0xDE, 0x26, 0x3E, 0xDE, 0xBE, 0xC9, 0x7E, 0xD5, 0xFE, 0xA3, 0x01, 0xFB, 0x81, 0x5F, 0xC1, 0xE8, 0x21, 0xF4, 0xA1, 0x12, 0x61, 0x06, 0xE1, 0x6E, 0x11, 0xB1, 0x91, 0x85, 0x51, 0x6D, 0xD1, 0x93, 0x31, 0xDB, 0xB1, 0x77, 0xF1, 0xC0, 0x09, 0xC8, 0x89, 0x44, 0x49, 0x8C, 0xC9, 0xFC, 0x29, 0xB2, 0xA9, 0x9A, 0x69, 0xA6, 0xE9, 0x8E, 0x19, 0xDE, 0x99, 0xA1, 0x59, 0x71, 0xD9, 0xE9, 0x39, 0x79, 0x7F, 0x4B, 0x73, 0xAB, 0xF3, 0xEA, 0xF3, 0x9B, 0x0B, 0xDA, 0x00, 0x2D, 0xB0, 0xAB, 0xB8, 0xAB, 0xA4, 0xB3, 0xB4, 0xBD, 0xAC, 0xA5, 0xBC, 0xB1, 0xA2, 0xA6, 0xB2, 0xBC, 0xAA, 0xA0, 0x3A, 0xAB, 0x26, 0xA9, 0x36, 0xB2, 0x2E, 0xA0, 0xDE, 0xB5, 0xC1, 0xAA, 0x51, 0xB7, 0x49, 0xA1, 0x59, 0xA8, 0x85, 0xB9, 0x95, 0xA4, 0x0D, 0xA5, 0x1D, 0xA4, 0xFD, 0xAE, 0x63, 0xBB, 0x73, 0xA2, 0xAB, 0xB9, 0x3B, 0xB7, 0x27, 0xA2, 0xD7, 0xA1, 0x4F, 0xA3, 0x9F, 0x7F, 0x80, 0x74, 0x10, 0x76, 0xF0, 0x71, 0x68, 0x63, 0x78, 0x70, 0xA4, 0x6A, 0x34, 0x65, 0xCC, 0x77, 0xDC, 0x7C, 0x42, 0x69, 0x92, 0x77, 0x8A, 0x62, 0x1A, 0x75, 0x06, 0x68, 0xE6, 0x7A, 0x76, 0x73, 0x6E, 0x62, 0xBE, 0x63, 0xA1, 0x62, 0x31, 0x73, 0x29, 0x7A, 0xD9, 0x77, 0xC5, 0x61, 0xD5, 0x64, 0x4D, 0x73, 0x5D, 0xFE, 0x9F, 0xD8, 0x06, 0xDF, 0x26, 0xFB, 0x16, 0xC3, 0x36, 0xF5, 0x0E, 0xF9, 0x2E, 0xC9, 0x1E, 0xD1, 0x3E, 0xE1, 0x01, 0xE1, 0x21, 0xD1, 0x11, 0xC9, 0x31, 0xF9, 0x09, 0xCD, 0x29, 0xD3, 0x19, 0xC7, 0xB9, 0xC0, 0x85, 0xE4, 0xA5, 0xF2, 0x95, 0xFE, 0xB5, 0xF5, 0x8D, 0xE7, 0x6D, 0xC4, 0x5D, 0xC6, 0x7D, 0xC5, 0x43, 0xF7, 0xE3, 0xFC, 0xD3, 0xF1, 0xF3, 0xE7, 0x2B, 0xF2, 0x1B, 0xF5, 0xBB, 0xE8, 0x87, 0xC1, 0xA7, 0xEF, 0x57, 0xF6, 0x77, 0xE7, 0xCF, 0xC6, 0xFF, 0xFA, 0x96, 0x9B, 0x37, 0xA0, 0x07, 0xE0, 0x2B, 0x90, 0x13, 0xD0, 0x3D, 0xB0, 0x0D, 0xF0, 0x65, 0x88, 0x59, 0xC8, 0x09, 0xA8, 0x21, 0xE8, 0x1E, 0x98, 0x36, 0xD8, 0xC6, 0xDF, 0xD5, 0x70, 0xA5, 0xF0, 0x05, 0x08, 0xD9, 0x88, 0x69, 0x48, 0x89, 0xC8, 0xD1, 0x28, 0x61, 0xA8, 0x81, 0x68, 0x3E, 0xE8, 0xEE, 0x18, 0x4E, 0x98, 0x76, 0x58, 0x96, 0xD8, 0x26, 0x38, 0x06, 0xB8, 0xDA, 0x78, 0xEA, 0xF8, 0x4A, 0x04, 0x72, 0x7F, 0xA4, 0x08, 0xC5, 0x88, 0x84, 0x89, 0xF9, 0x49, 0x78, 0x48, 0x39, 0xC8, 0x58, 0xC8, 0x19, 0x28, 0x68, 0x28, 0x29, 0xA8, 0x48, 0xA8, 0x09, 0x68, 0x70, 0x68, 0x31, 0xE8, 0x50, 0xE8, 0x11, 0x18, 0x60, 0x19, 0xA1, 0x98, 0xC0, 0x99, 0x41, 0x58, 0x80, 0x59, 0x81, 0xD8, 0x80, 0xD8, 0x81, 0x38, 0x80, 0x39, 0x41, 0xB9, 0xC0, 0xB9, 0xA1, 0x78, 0x7E, 0xF3, 0x22, 0xF2, 0xA1, 0xF1, 0x63, 0x0B, 0xFC, 0x11, 0x24, 0x15, 0xA2, 0x12, 0xA6, 0x17, 0x61, 0x11, 0xE5, 0x14, 0xE3, 0x13, 0x17, 0x96, 0x90, 0x90, 0x94, 0x93, 0x52, 0x96, 0xD6, 0x94, 0xD1, 0x97, 0x35, 0x95, 0xB3, 0x96, 0x77, 0x54, 0x70, 0x57, 0xF4, 0x53, 0x0A, 0x51, 0x8E, 0x56, 0x49, 0x52, 0xCD, 0x50, 0xCB, 0x53, 0x2F, 0xD5, 0xA8, 0xD5, 0x6C, 0xD1, 0xEA, 0xD6, 0x1E, 0x02, 0x54, 0xFC, 0x25, 0xBD, 0x4D, 0xFD, 0x43, 0x83, 0x4B, 0xC3, 0x47, 0xA3, 0x2F, 0x13, 0x30, 0x53, 0x38, 0x33, 0x74, 0x73, 0x02, 0x0B, 0x0A, 0x4B, 0x06, 0x2B, 0x4E, 0x6B, 0x41, 0x1B, 0x09, 0x5B, 0x05, 0x3B, 0x75, 0x7B, 0x3D, 0x07, 0x53, 0x47, 0x6B, 0x27, 0x47, 0x67, 0x37, 0x17, 0x2F, 0x57, 0x3F, 0xB7, 0x40, 0xF7, 0x10, 0x8F, 0x50, 0xCF, 0x30, 0xAF, 0x30, 0xEF, 0x30, 0x9F, 0x50, 0xDF, 0x20, 0xBF, 0x00, 0x7F, 0x9F, 0x00, 0xCF, 0x40, 0xD7, 0x20, 0xC7, 0x60, 0xDB, 0x10, 0x8B, 0x50, 0xE3, 0x30, 0xBD, 0x70, 0x8D, 0x08, 0xE5, 0x48, 0xD9, 0x28, 0xF1, 0x68, 0xC1, 0x18, 0xEE, 0x58, 0xD6, 0x38, 0xFA, 0x78, 0xCA, 0x04, 0xE2, 0x44, 0xBC, 0x24, 0xCC, 0x64, 0x94, 0x14, 0xF8, 0x54, 0x98, 0x34, 0x88, 0x74, 0xD0, 0x0C, 0xA0, 0x8C, 0x9F, 0xCC, 0xAF, 0x2C, 0xC0, 0x55, 0x98, 0xF3, 0x93, 0x0B, 0x9C, 0x07, 0x9E, 0x0F, 0x5D, 0x80, 0x50, 0x88, 0x56, 0x84, 0x5B, 0x4C, 0x5A, 0x42, 0x57, 0xCA, 0x51, 0x26, 0x5C, 0x2E, 0x57, 0xA1, 0x5D, 0x69, 0x59, 0xE5, 0x5E, 0x1D, 0x5A, 0x93, 0x5C, 0x5B, 0x58, 0xD7, 0x50, 0x3F, 0xD0, 0xB0, 0xD0, 0xB8, 0xDF, 0xF4, 0xD0, 0x02, 0xDA, 0x8A, 0xDA, 0x46, 0xDA, 0xCE, 0xDE, 0x21, 0xD9, 0xA9, 0xD5, 0x65, 0xD3, 0xED, 0xD7, 0x93, 0xD0, 0x5B, 0xD8, 0xD7, 0xDC, 0x3F, 0x36, 0xB0, 0x3E, 0x78, 0x3E, 0xF4, 0x31, 0x02, 0x3D, 0x8A, 0x35, 0x46, 0x3E, 0xCE, 0x3A, 0x21, 0x3C, 0xA9, 0x30, 0xA5, 0x33, 0x6D, 0x31, 0xE3, 0x32, 0xEB, 0x37, 0x17, 0x31, 0x9F, 0xB8, 0x90, 0xB9, 0x98, 0xBF, 0x54, 0xBA, 0x5C, 0xB9, 0x52, 0xBB, 0xDA, 0xB0, 0xD6, 0xB4, 0xDE, 0xF2, 0xAF, 0x65, 0xA3, 0x65, 0xB3, 0x79, 0xAB, 0x71, 0xBB, 0x6E, 0xA7, 0x66, 0xB7, 0x62, 0xAF, 0x74, 0xBF, 0xE0, 0xE0, 0xEF, 0x61, 0xFA, 0x51, 0xD2, 0x71, 0xF4, 0x49, 0xE8, 0xA9, 0xEF, 0x99, 0xEB, 0xB9, 0xCD, 0x85, 0xF1, 0xA5, 0xE6, 0x95, 0xDC, 0xB5, 0xF0, 0x0D, 0xFB, 0x2D, 0xF5, 0x1D, 0xFE, 0x3D, 0xD2, 0x03, 0xC8, 0xC3, 0xD3, 0xE3, 0xD1, 0xD3, 0xF2, 0xF3, 0xF0, 0x4B, 0xD3, 0x6B, 0xC1, 0x5B, 0xFC, 0xBB, 0xCF, 0x87, 0xC5, 0xA7, 0xCA, 0x17, 0xFF, 0x37, 0xD5, 0xCF, 0xFF, 0xFC, 0x14, 0xC4, 0x3D, 0xA0, 0x13, 0xAE, 0x03, 0xDA, 0x60, 0x1F, 0x58, 0x13, 0x78, 0x19, 0x44, 0x0E, 0x64, 0x02, 0x54, 0x28, 0xB4, 0x27, 0x8C, 0x1D, 0xAC, 0xF1, 0x6F, 0x0D, 0x38, 0x59, 0x78, 0x61, 0x04, 0x0E, 0x44, 0x3A, 0x24, 0x12, 0x64, 0x6C, 0x14, 0x24, 0x54, 0x48, 0xD4, 0x1F, 0xB4, 0x67, 0xF4, 0x2B, 0x8C, 0x43, 0xCC, 0x4D, 0xAC, 0x25, 0xEC, 0x29, 0x9C, 0x61, 0xDC, 0x6E, 0xBC, 0x16, 0xFC, 0x3A, 0x82, 0xF2, 0x3F, 0x05, 0x84, 0xD9, 0x44, 0x29, 0xC4, 0x71, 0x24, 0x11, 0xA4, 0x41, 0x64, 0xDE, 0xE4, 0xAE, 0x14, 0xF6, 0x94, 0x96, 0x54, 0x26, 0xD4, 0xFA, 0x34, 0x5A, 0xB4, 0xAA, 0x74, 0x4A, 0xF4, 0x72, 0x0C, 0xD2, 0x8C, 0x12, 0x4C, 0x62, 0xCC, 0x22, 0x2C, 0x42, 0xAC, 0x82, 0x6C, 0x02, 0xEC, 0xFC, 0x1C, 0x7C, 0x9C, 0x7C, 0x5C, 0x7C, 0xDC, 0x7C, 0x3C, 0x80, 0x84, 0xC5, 0xC7, 0xCF, 0x2F, 0x28, 0x20, 0x2C, 0x28, 0x26, 0x24, 0x29, 0x2C, 0x2B, 0xA2, 0x28, 0xAA, 0x26, 0xA6, 0x23, 0x6E, 0x24, 0x61, 0x25, 0xE9, 0x28, 0xE5, 0x25, 0x1D, 0x2C, 0x13, 0x27, 0x9B, 0x21, 0x57, 0x2C, 0xDF, 0xA0, 0xD0, 0xAB, 0x38, 0xAD, 0xB4, 0xA9, 0x7C, 0xA1, 0xF2, 0xAE, 0x06, 0xA5, 0x8E, 0xAE, 0x41, 0xAA, 0xC9, 0xAC, 0x25, 0xA4, 0xAD, 0xA0, 0xA3, 0xAB, 0x6B, 0xAD, 0xE7, 0xA1, 0x1F, 0x6A, 0x90, 0x68, 0xF8, 0xD7, 0xA8, 0xC2, 0xB8, 0xD9, 0xA4, 0xCF, 0x74, 0xD2, 0x6C, 0xD9, 0x7C, 0xC7, 0xE2, 0xCC, 0xF2, 0xDE, 0xEA, 0xC3, 0x06, 0xCC, 0x16, 0xCE, 0x0E, 0xCD, 0x1E, 0xDF, 0x81, 0xCC, 0x91, 0xDE, 0x89, 0xDD, 0x99, 0xCF, 0x45, 0xCC, 0x55, 0xD6, 0x4D, 0xC5, 0x5D, 0xCB, 0xC3, 0xC0, 0xD3, 0xCC, 0xCB, 0xDA, 0xDB, 0xC1, 0xC7, 0xD5, 0xD7, 0xD3, 0xCF, 0xC7, 0x3F, 0x20, 0x20, 0x28, 0x30, 0x34, 0x28, 0x3C, 0x38, 0x32, 0x24, 0x3A, 0x34, 0x36, 0x2C, 0x2E, 0x3C, 0x3E, 0x22, 0x3E, 0x32, 0x21, 0x2A, 0x21, 0x3A, 0x21, 0x26, 0x21, 0x36, 0x21, 0x2E, 0x21, 0x3E, 0x3E, 0x21, 0x3E, 0x31, 0x3E, 0x29, 0x3E, 0x39, 0x3E, 0x25, 0x3E, 0x35, 0x21, 0x2D, 0x21, 0x3D, 0x31, 0x23, 0x29, 0x33, 0x39, 0x2B, 0x35, 0x3B, 0x2D, 0x27, 0xE3, 0x6F, 0x56, 0x2E, 0xE0, 0xC9, 0x20, 0x3F, 0xAF, 0xA0, 0xA0, 0xB0, 0xB0, 0xA8, 0xA8, 0xB8, 0xB8, 0xA4, 0xA4, 0xB4, 0xA4, 0xAC, 0xB4, 0xBC, 0xB4, 0xA2, 0xA4, 0xB2, 0xA4, 0xAA, 0xB8, 0xBA, 0xA8, 0xA6, 0xB0, 0x36, 0xBF, 0x2E, 0xB7, 0x3E, 0xA7, 0x21, 0xB3, 0x31, 0xAD, 0x29, 0xB9, 0x39, 0xA1, 0x25, 0xB6, 0x35, 0xB2, 0x2D, 0xB4, 0x3D, 0xA0, 0xC3, 0xA7, 0xD3, 0xBD, 0xCB, 0xA9, 0xDB, 0xA6, 0xC7, 0xBC, 0xD7, 0xB0, 0x4F, 0xAB, 0x5F, 0x65, 0x40, 0x6E, 0x50, 0x72, 0x48, 0x78, 0x98, 0x77, 0x84, 0x7D, 0x94, 0x69, 0x8C, 0x66, 0x9C, 0x7C, 0x82, 0x70, 0x12, 0x77, 0x0A, 0x63, 0x1A, 0x79, 0x06, 0x6E, 0x16, 0x6A, 0x0E, 0x6C, 0xFE, 0xD7, 0xFC, 0xE7, 0xC2, 0xEB, 0xE2, 0xE3, 0xD2, 0xED, 0xF2, 0xD5, 0xCA, 0xF9, 0xEA, 0xE9, 0xDA, 0xF1, 0xFA, 0xD1, 0xBF, 0xC3, 0x8D, 0x83, 0xCD, 0xC3, 0xAD, 0xA3, 0xED, 0x93, 0x9D, 0xB3, 0xDD, 0xCB, 0xBD, 0x9B, 0xFD, 0x87, 0x83, 0x97, 0xC3, 0xCF, 0xE3, 0x5F, 0x27, 0xE0, 0xA7, 0x30, 0x67, 0x88, 0xE7, 0xE8, 0x17, 0x78, 0x97, 0xA4, 0x57, 0x34, 0xD7, 0x2C, 0x37, 0xBC, 0xB7, 0x62, 0x77, 0xF2, 0xF7, 0x9A, 0x0F, 0xC6, 0x8F, 0x76, 0xFF, 0x8D, 0x7D, 0xBB, 0x8E, 0x4B, 0x73, 0x7D, 0xF8, 0x38, 0x7E, 0xAF, 0xBB, 0xBB, 0xCD, 0x75, 0xDB, 0xAD, 0x87, 0xB9, 0xEE, 0x19, 0xEB, 0xBD, 0xAC, 0xB1, 0x30, 0xB1, 0xD6, 0x65, 0x0F, 0xDB, 0x95, 0x38, 0x1F, 0x87, 0x85, 0x31, 0xC5, 0x8E, 0x83, 0x1E, 0xC5, 0xEE, 0x0E, 0x0C, 0xEC, 0xEE, 0x56, 0x24, 0xAE, 0xE5, 0xF3, 0x2B, 0xAE, 0xFB, 0x74, 0x1F, 0xDE, 0xFF, 0x7E, 0x3F, 0x4A, 0x37, 0x8C, 0xDE, 0x1B, 0xB3, 0x1A, 0x77, 0x99, 0xF0, 0x64, 0x04, 0x4D, 0xC6, 0x32, 0xD3, 0x59, 0xA5, 0xEC, 0x46, 0xCE, 0x00, 0xF8, 0x47, 0x63, 0x4E, 0xEB, 0x5B, 0xF9, 0xBD, 0x41, 0x5B, 0x01, 0xA8, 0xEE, 0xFB, 0xBE, 0xA0, 0xA9, 0xA4, 0x54, 0xAA, 0x55, 0x08, 0xFC, 0x4D, 0xF1, 0x8C, 0x4F, 0xFF, 0xBE, 0x95, 0x5D, 0x5A, 0x71, 0x27, 0x55, 0x8E, 0x59, 0x82, 0x5E, 0xD4, 0x2C, 0x22, 0x9D, 0x25, 0xBF, 0xE8, 0x3C, 0x89, 0xFA, 0x1F, 0x38, 0x71, 0x13, 0x81, 0x27, 0x29, 0xC7, 0x86, 0xDC, 0xD1, 0x8A, 0xC9, 0xC8, 0xD6, 0xB6, 0xDA, 0x05, 0xD5, 0x1B, 0x00, 0xCF, 0x5F, 0x50, 0x27, 0xA3, 0xEC, 0x5D, 0x5F, 0x0D, 0xFA, 0xDE, 0xA0, 0x16, 0xB5, 0xC5, 0x43, 0xA8, 0x32, 0x08, 0x6D, 0xE7, 0xDC, 0x8D, 0x7D, 0x6F, 0x81, 0xB5, 0xEA, 0x4B, 0x6B, 0x44, 0x2B, 0xCA, 0x35, 0x1C, 0x99, 0xCF, 0x88, 0x2E, 0xDB, 0x0A, 0x96, 0xA2, 0x15, 0x05, 0x9A, 0xA9, 0x6F, 0xA2, 0x87, 0x23, 0xDB, 0x6B, 0x94, 0xC0, 0xF7, 0x18, 0x5E, 0x35, 0x44, 0x66, 0x27, 0x01, 0x9E, 0xDF, 0x19, 0x33, 0xA0, 0x7F, 0x3D, 0xFA, 0x3A, 0xEA, 0x9B, 0x77, 0x38, 0x46, 0x34, 0x4F, 0x1A, 0xBD, 0x48, 0x11, 0x70, 0x6B, 0xB8, 0xBB, 0x23, 0x9A, 0x6F, 0xE4, 0x2E, 0x7C, 0xA7, 0xCB, 0x12, 0xD6, 0x5F, 0x15, 0xBE, 0x3A, 0xCD, 0x4F, 0xA0, 0x8D, 0x0D, 0x2F, 0xC2, 0x64, 0xB4, 0xDC, 0x2E, 0x7B, 0xE8, 0xAC, 0x0C, 0x3E, 0xDE, 0xF3, 0x16, 0x5E, 0x78, 0xCD, 0x23, 0x48, 0x38, 0xC7, 0x39, 0x17, 0x47, 0xB8, 0x30, 0xA9, 0xF0, 0x62, 0x30, 0x87, 0xEE, 0x50, 0x74, 0xA9, 0xE4, 0x09, 0xFD, 0x1D, 0xE0, 0xF9, 0x5D, 0x8D, 0x25, 0x57, 0xE7, 0xE7, 0x60, 0xD1, 0xF7, 0xEA, 0xD5, 0xE4, 0x9B, 0x1E, 0x32, 0x81, 0x36, 0x43, 0xA7, 0xE1, 0x7B, 0xF7, 0x4C, 0x9F, 0x62, 0x93, 0x8E, 0x0B, 0x4B, 0x5C, 0x59, 0x34, 0x6D, 0x78, 0x41, 0x21, 0xDE, 0x9B, 0x23, 0xA7, 0x20, 0x51, 0x6B, 0xBB, 0x21, 0x6B, 0x3D, 0xBC, 0x20, 0x44, 0x88, 0x9C, 0x12, 0x71, 0x55, 0x3A, 0x6C, 0x4B, 0x2F, 0xC4, 0xC3, 0x8B, 0xA4, 0xB5, 0x06, 0xC4, 0xDB, 0x6F, 0x0C, 0xE8, 0xF6, 0xD7, 0xAB, 0xB5, 0x01, 0x8A, 0x38, 0x12, 0x39, 0x3E, 0xE2, 0xE4, 0xB7, 0xE9, 0x5D, 0x7B, 0x01, 0x3A, 0x25, 0xC0, 0xF3, 0x93, 0x31, 0xC2, 0xBE, 0x6F, 0xAD, 0xA3, 0x24, 0x46, 0xFA, 0x5C, 0x63, 0x1C, 0x42, 0xF9, 0xDB, 0xF8, 0xA4, 0x33, 0xAE, 0xBA, 0x26, 0x8E, 0x16, 0xC7, 0xCB, 0x50, 0x2E, 0x97, 0xCC, 0x3A, 0x8B, 0x28, 0x35, 0x7E, 0xC9, 0x93, 0x38, 0xEB, 0x84, 0xB9, 0xF0, 0xE2, 0x55, 0x87, 0x8A, 0xE6, 0x5A, 0xDA, 0x92, 0x62, 0xDD, 0x03, 0x81, 0x0B, 0x06, 0xCF, 0xC1, 0x8A, 0x84, 0x33, 0xF3, 0x76, 0xCE, 0xCE, 0x5C, 0x1B, 0xAD, 0x2D, 0x15, 0x1E, 0x04, 0xA0, 0x9A, 0xCE, 0x28, 0x7B, 0x61, 0x96, 0x1F, 0x5F, 0x77, 0xD1, 0x2B, 0x66, 0x19, 0x40, 0xE1, 0x42, 0xC0, 0xDF, 0x72, 0x4A, 0x78, 0xB9, 0x3A, 0xD9, 0x1A, 0xAD, 0x68, 0x77, 0xA2, 0x8F, 0xD7, 0xDF, 0x6D, 0x2D, 0x19, 0x70, 0x02, 0x3C, 0x3F, 0x5A, 0x9F, 0x44, 0xE9, 0x53, 0x96, 0x18, 0xDA, 0x3A, 0x3E, 0x9B, 0xAA, 0xF0, 0x66, 0x97, 0xA9, 0x62, 0x45, 0x0D, 0x7C, 0xAF, 0xF1, 0x22, 0xDA, 0x99, 0x9C, 0x3B, 0x41, 0x39, 0xBD, 0x3E, 0xBA, 0x00, 0x5E, 0x04, 0x74, 0x68, 0xBC, 0xD8, 0x2F, 0xBA, 0x46, 0xFB, 0xC4, 0x85, 0xB7, 0x41, 0xBD, 0xCE, 0xB0, 0x82, 0x8C, 0xFD, 0xF2, 0x3B, 0xAA, 0x43, 0x35, 0x16, 0xB1, 0x65, 0x99, 0xB0, 0xA2, 0xFC, 0xCD, 0x89, 0x2B, 0x9F, 0x0A, 0xC9, 0x2D, 0x4E, 0x7B, 0x1A, 0x33, 0x60, 0x05, 0x27, 0xC6, 0x9A, 0xB0, 0xC4, 0x62, 0x53, 0xF6, 0xBA, 0xE7, 0xF8, 0xF2, 0x81, 0x3A, 0x00, 0x45, 0x9D, 0x77, 0x6D, 0x8A, 0xF6, 0xDC, 0x1B, 0x26, 0x78, 0xDC, 0xE4, 0x2B, 0x80, 0x22, 0x2A, 0x2E, 0xD6, 0x33, 0xF1, 0x64, 0xFA, 0x5A, 0xF0, 0x1F, 0x78, 0xC6, 0x1F, 0xA2, 0x6F, 0x3D, 0xC1, 0x59, 0xB5, 0x7E, 0xFB, 0x73, 0xAB, 0x00, 0x9C, 0x6D, 0xC9, 0x6C, 0x8F, 0x72, 0xDD, 0xFD, 0x32, 0xC9, 0x41, 0x91, 0xF0, 0x20, 0x9E, 0x64, 0x3A, 0x74, 0x64, 0xE3, 0xAA, 0xE7, 0x0B, 0x5A, 0x1C, 0x96, 0x74, 0x4E, 0x81, 0x15, 0x24, 0xB6, 0xB8, 0xE3, 0x8C, 0x59, 0x08, 0xB2, 0x5E, 0xD5, 0xCC, 0x2F, 0xEF, 0x14, 0xAC, 0x48, 0xED, 0x38, 0xA1, 0x82, 0x7C, 0xB4, 0x7C, 0xFA, 0xA5, 0xBC, 0x48, 0x1B, 0x58, 0xD1, 0x9A, 0x74, 0x4F, 0x10, 0xF9, 0x4C, 0xBB, 0x8F, 0xC2, 0x01, 0x50, 0xA1, 0xCE, 0xEB, 0xA6, 0x7E, 0x2A, 0xCE, 0xF0, 0x65, 0x62, 0xE1, 0x45, 0x4B, 0xCE, 0xB9, 0xCD, 0xDB, 0x4C, 0x76, 0x2C, 0x97, 0x7A, 0x90, 0x5D, 0x0E, 0x50, 0x10, 0x37, 0x58, 0x29, 0xDB, 0x3D, 0x73, 0x3C, 0x95, 0xEF, 0x80, 0x56, 0x8C, 0x60, 0x5B, 0x07, 0xBB, 0x75, 0xC7, 0xAA, 0xC1, 0x3F, 0x46, 0xAB, 0x44, 0x6D, 0x34, 0xDA, 0x36, 0xEE, 0x93, 0x9E, 0xE5, 0x3E, 0xEF, 0x3E, 0xB0, 0x0D, 0x82, 0xEF, 0xF4, 0x5E, 0xA2, 0x93, 0x36, 0x69, 0x77, 0xFB, 0xFC, 0x9B, 0xBA, 0x51, 0x1D, 0x66, 0xB0, 0xC2, 0xC1, 0x50, 0xB9, 0x66, 0x76, 0x26, 0xF2, 0xD1, 0xB9, 0xEE, 0xD4, 0x99, 0xB0, 0x22, 0x6E, 0xA6, 0xA0, 0x0F, 0xF2, 0x99, 0xBC, 0x1F, 0x91, 0x09, 0x2B, 0x2A, 0xE4, 0x6E, 0xC7, 0x4C, 0xF7, 0xFC, 0x54, 0x6C, 0x9A, 0x6F, 0x33, 0xD2, 0x1B, 0xCB, 0x5D, 0x4C, 0x64, 0xBD, 0x9E, 0x94, 0xF0, 0xFF, 0x54, 0xAC, 0xBD, 0xE0, 0xB8, 0x69, 0x14, 0x7A, 0x38, 0x99, 0x34, 0xD5, 0x4E, 0xE4, 0x33, 0x27, 0x26, 0x80, 0xE2, 0xAC, 0xB4, 0xDB, 0xF9, 0xA5, 0xB0, 0x36, 0x03, 0x28, 0xF2, 0x05, 0xE5, 0xD3, 0x30, 0xA7, 0x0F, 0x29, 0x9B, 0xB9, 0x02, 0x54, 0xEF, 0x57, 0x86, 0x67, 0x52, 0x90, 0x74, 0x71, 0xC0, 0x03, 0x98, 0xD5, 0xF4, 0x2B, 0xF9, 0xB3, 0x72, 0xD7, 0xA5, 0x77, 0xD2, 0x6F, 0x73, 0xAF, 0xAC, 0x96, 0x84, 0x17, 0xBE, 0xBB, 0x9D, 0xFC, 0xEF, 0xC5, 0x1B, 0xF6, 0x1B, 0xBD, 0x8A, 0xC2, 0x01, 0x88, 0x47, 0x75, 0x98, 0x7B, 0xB2, 0x92, 0x62, 0x07, 0x57, 0x27, 0xCC, 0xDB, 0xED, 0xBC, 0x1F, 0x56, 0x14, 0x3C, 0x3B, 0xA4, 0x89, 0x7C, 0xA5, 0x3F, 0x4A, 0x3F, 0xCC, 0x5D, 0x74, 0xCA, 0x58, 0x79, 0x6D, 0x7B, 0xFB, 0xA5, 0x38, 0x2A, 0x99, 0x92, 0x0A, 0x20, 0xC8, 0x53, 0x2F, 0x1E, 0xFB, 0x52, 0x1C, 0xA1, 0x67, 0x40, 0x0F, 0xA7, 0xB6, 0xFB, 0x21, 0xE9, 0x4B, 0xA1, 0x90, 0x96, 0x3F, 0x0E, 0xA0, 0xC2, 0x45, 0x84, 0xD6, 0xEE, 0x5E, 0xBD, 0xAF, 0x67, 0x9F, 0x49, 0xC9, 0x6A, 0x78, 0x31, 0xBC, 0xD8, 0xBC, 0xD2, 0xD2, 0xE1, 0xC5, 0x77, 0x5E, 0x5B, 0x8B, 0xAD, 0x00, 0x8A, 0x92, 0x96, 0x86, 0x33, 0x43, 0x9B, 0xC0, 0x7F, 0xE0, 0xE1, 0xEC, 0x04, 0x50, 0x7D, 0xAE, 0x25, 0xD6, 0xC9, 0xA4, 0x88, 0x07, 0x21, 0x18, 0xF2, 0x70, 0xDC, 0x5E, 0x96, 0x23, 0x77, 0x11, 0x12, 0xFB, 0x28, 0xD1, 0x50, 0x1F, 0x6B, 0x71, 0x2D, 0x4A, 0xA5, 0xE6, 0x68, 0x5C, 0x99, 0x1C, 0xEC, 0xDD, 0xE4, 0x5B, 0x87, 0xB7, 0xEE, 0xD8, 0x7A, 0x67, 0xEE, 0x18, 0x82, 0x6C, 0x6C, 0x08, 0xAA, 0xE1, 0x2E, 0x98, 0x47, 0x09, 0xD1, 0x8A, 0xE2, 0xC8, 0x57, 0xF8, 0xCB, 0x00, 0x22, 0xD5, 0x04, 0xF7, 0xF4, 0x5F, 0xC5, 0x56, 0x58, 0x31, 0x38, 0x9D, 0x50, 0x22, 0x80, 0xD9, 0xDE, 0xC6, 0x2F, 0xB9, 0x54, 0xD6, 0xDE, 0x04, 0x40, 0xE5, 0xB7, 0x68, 0x06, 0xEA, 0x9E, 0x34, 0xA7, 0x3E, 0xDC, 0x62, 0xF9, 0x0C, 0xA0, 0x08, 0x3F, 0x4B, 0xD9, 0x9F, 0x5B, 0x44, 0x3F, 0xD4, 0x2F, 0x06, 0x78, 0x7E, 0x05, 0x63, 0xFB, 0x1A, 0xB4, 0xCB, 0xDC, 0xCA, 0x8E, 0xD7, 0xBA, 0xB4, 0x17, 0x31, 0xEA, 0x20, 0xF7, 0x30, 0x0D, 0x01, 0x6F, 0x5E, 0x84, 0xE2, 0x65, 0xAD, 0x5C, 0x6D, 0xCC, 0x2D, 0x59, 0x04, 0x3F, 0xC8, 0x7F, 0xB8, 0xF8, 0x90, 0x75, 0x9C, 0xF1, 0xCD, 0x43, 0xD1, 0xEB, 0xF3, 0x4B, 0x11, 0x04, 0x3B, 0x77, 0x38, 0x02, 0x72, 0x0F, 0xB3, 0x40, 0x3D, 0x19, 0xF9, 0x4A, 0x26, 0xA3, 0x7A, 0x14, 0xF2, 0x48, 0xE7, 0x6C, 0x23, 0xBB, 0x66, 0xC5, 0xBA, 0x91, 0xD9, 0x23, 0x1F, 0x8B, 0x15, 0xD5, 0x1A, 0x00, 0x22, 0x82, 0xAA, 0x22, 0x79, 0x89, 0x72, 0x69, 0xF4, 0xD2, 0xB9, 0xF3, 0x2B, 0x1B, 0x82, 0x60, 0x45, 0xC7, 0x7D, 0x87, 0x31, 0x0F, 0x8B, 0xC0, 0xD5, 0x51, 0xA9, 0x69, 0x4A, 0x4D, 0xBA, 0x00, 0xAA, 0x7A, 0xAC, 0x35, 0x74, 0x2C, 0x01, 0xF0, 0xFC, 0x6A, 0x58, 0x53, 0x06, 0x3D, 0x87, 0xBC, 0x59, 0x2F, 0xE1, 0x6B, 0xAF, 0x6F, 0x8E, 0x4A, 0x24, 0x31, 0x70, 0x9F, 0xDF, 0xCA, 0x60, 0x93, 0x88, 0xB5, 0x51, 0x13, 0xC3, 0xDF, 0x70, 0x37, 0x04, 0x8F, 0x5B, 0x6D, 0x97, 0x9F, 0xAA, 0x3C, 0x97, 0x89, 0xDD, 0x9D, 0x23, 0x38, 0x3B, 0xC1, 0x11, 0x72, 0x0F, 0x23, 0x62, 0x20, 0x82, 0xFC, 0x8B, 0xFB, 0x4A, 0xC8, 0x23, 0x5D, 0xFA, 0x5B, 0x45, 0x89, 0x6D, 0x8A, 0x4B, 0x15, 0x84, 0x45, 0x42, 0xB6, 0x89, 0x11, 0x1E, 0x00, 0x88, 0x2C, 0x4F, 0xE3, 0xEA, 0x47, 0x64, 0x9B, 0x2B, 0xCE, 0xF9, 0x6F, 0xEE, 0x7A, 0x2B, 0x01, 0x98, 0xA8, 0x08, 0x11, 0xEA, 0xFB, 0xA2, 0x6F, 0x1B, 0x98, 0x63, 0xAE, 0x00, 0x05, 0xEB, 0x14, 0xE0, 0xF9, 0x5D, 0x75, 0xDC, 0x2B, 0xCC, 0xA4, 0xD2, 0x52, 0x6C, 0x72, 0x1A, 0x69, 0x6D, 0x75, 0x32, 0x43, 0xBE, 0xDC, 0x45, 0x4C, 0x86, 0x55, 0x8C, 0x39, 0xC9, 0x58, 0x5D, 0x5B, 0x45, 0xC3, 0x51, 0x63, 0x17, 0x6E, 0x0B, 0x77, 0x41, 0x0B, 0xB4, 0xA9, 0x9C, 0x8D, 0x5F, 0xEC, 0x3B, 0x63, 0x3D, 0xF2, 0x91, 0xFC, 0x36, 0xB6, 0x1A, 0xD7, 0xE3, 0xEC, 0x94, 0x88, 0x4C, 0x15, 0x47, 0x0D, 0xC3, 0xEB, 0x57, 0xF4, 0xA6, 0xEB, 0xF5, 0xE1, 0xAC, 0xE1, 0xEF, 0x5C, 0x39, 0x46, 0xFD, 0xDF, 0x94, 0xE0, 0xF6, 0x84, 0x85, 0x79, 0x78, 0xBA, 0x13, 0x80, 0xAA, 0xF0, 0x6E, 0x78, 0x3A, 0xB4, 0x1E, 0xF0, 0xFC, 0xA9, 0x74, 0x1F, 0xAD, 0x3D, 0x50, 0xEF, 0xDF, 0x65, 0x30, 0xF9, 0x14, 0xBE, 0x97, 0xED, 0x24, 0x0A, 0xBF, 0x7C, 0xE8, 0x36, 0xCB, 0x9E, 0xE6, 0xF8, 0xF2, 0x55, 0xF1, 0xBB, 0x1D, 0x55, 0xB2, 0xFF, 0x5B, 0x0C, 0xDD, 0xF4, 0x39, 0xB2, 0xDB, 0x56, 0x2A, 0x4F, 0xCE, 0x50, 0x76, 0x42, 0x02, 0xD9, 0x1D, 0x4F, 0xA6, 0x01, 0x2E, 0xB9, 0x34, 0xE3, 0x38, 0x0B, 0x11, 0xFB, 0x6B, 0x5E, 0x6B, 0x02, 0x17, 0xC4, 0x68, 0xA6, 0x1B, 0x71, 0x17, 0xE3, 0x53, 0x43, 0xA5, 0x13, 0x6B, 0xF2, 0xFB, 0x9B, 0x2F, 0x30, 0x0D, 0x01, 0x8A, 0x91, 0x3C, 0xCE, 0x2D, 0xC0, 0xF3, 0xA7, 0xC3, 0x68, 0x64, 0x0F, 0xA3, 0xAF, 0x43, 0x7D, 0x49, 0x8D, 0x31, 0xA6, 0x51, 0x72, 0x51, 0x95, 0xF1, 0xC5, 0x59, 0x39, 0xB4, 0xEE, 0x1E, 0x1F, 0xEE, 0x86, 0xEA, 0xA1, 0xBE, 0x40, 0x2B, 0xD4, 0x60, 0x9F, 0xD9, 0x7A, 0xCB, 0xD7, 0xB6, 0xC6, 0x4E, 0x4B, 0x20, 0xF7, 0x75, 0xE2, 0x2F, 0x73, 0xFD, 0xFB, 0xA2, 0xCE, 0x64, 0x37, 0xD6, 0x1F, 0x1F, 0x36, 0x00, 0x50, 0x85, 0x0A, 0xF5, 0xDB, 0x07, 0xE2, 0xC1, 0xDF, 0x0E, 0x4F, 0xF3, 0x0C, 0x5A, 0x55, 0x65, 0x2C, 0x3D, 0xB2, 0xF9, 0x29, 0x63, 0x05, 0x4A, 0xF1, 0xDD, 0xB3, 0x27, 0xCE, 0xB3, 0xDF, 0x05, 0x85, 0x8B, 0xA6, 0x16, 0x57, 0x04, 0xB5, 0xCD, 0x63, 0x2C, 0xE1, 0x6E, 0x28, 0x84, 0x7C, 0x1C, 0xFD, 0xC9, 0x70, 0x1B, 0x40, 0x35, 0x8C, 0x80, 0xBF, 0x31, 0xE4, 0x1F, 0x6E, 0xCA, 0x94, 0x69, 0xD3, 0x66, 0xCC, 0x98, 0x35, 0x6B, 0xCE, 0x9C, 0x79, 0xF3, 0x16, 0x2C, 0x58, 0xB4, 0x68, 0xC9, 0x92, 0x65, 0xCB, 0x56, 0xAC, 0x58, 0xB5, 0x6A, 0xCD, 0x9A, 0x75, 0xEB, 0x36, 0x6C, 0xD8, 0xB4, 0x89, 0x9F, 0x5F, 0x50, 0x50, 0x58, 0x78, 0xCB, 0x96, 0x6D, 0xDB, 0x76, 0xEC, 0xD8, 0xB5, 0x6B, 0xCF, 0x9E, 0x7D, 0xFB, 0x44, 0x44, 0xC4, 0xC4, 0x24, 0x24, 0xA4, 0xA4, 0x64, 0x64, 0xE4, 0xE4, 0x14, 0x14, 0x94, 0x94, 0x30, 0x18, 0x65, 0xE5, 0x43, 0x87, 0x8E, 0x1C, 0x39, 0x76, 0xEC, 0xC4, 0x89, 0x53, 0xA7, 0xCE, 0x9C, 0x39, 0x77, 0x4E, 0x55, 0x55, 0x5D, 0xFD, 0xC2, 0x85, 0x4B, 0x97, 0xAE, 0x5C, 0xB9, 0x76, 0x4D, 0x43, 0x43, 0x4B, 0x4B, 0x47, 0x07, 0x8B, 0xBD, 0x79, 0xF3, 0xF6, 0x6D, 0x3D, 0x3D, 0x03, 0x03, 0x23, 0x23, 0x63, 0x63, 0x53, 0x53, 0x73, 0xF3, 0xBB, 0x77, 0xEF, 0xDF, 0x7F, 0xF8, 0xF0, 0xF1, 0xE3, 0xA7, 0x4F, 0x2D, 0x2C, 0xAC, 0xAC, 0x6C, 0x6C, 0xEC, 0xEC, 0xF0, 0x78, 0x07, 0x07, 0x27, 0x27, 0x17, 0x17, 0x37, 0xB7, 0x97, 0x2F, 0x5F, 0xBF, 0x76, 0x77, 0xF7, 0xF0, 0xF0, 0xF4, 0xF4, 0xF2, 0x22, 0x12, 0x7D, 0x7C, 0xFC, 0xFC, 0x48, 0xA4, 0xC0, 0xC0, 0xE0, 0xE0, 0x90, 0x10, 0x32, 0x39, 0x3C, 0x3C, 0x32, 0x32, 0x3A, 0x3A, 0x36, 0x36, 0x3E, 0x9E, 0x42, 0x49, 0x4C, 0x4C, 0x4A, 0xA2, 0x52, 0x53, 0x53, 0xD3, 0xD3, 0x33, 0x33, 0xB3, 0xB3, 0x73, 0x73, 0xF3, 0xF3, 0x0B, 0x0B, 0x8B, 0x8B, 0x4B, 0x4B, 0xCB, 0xCB, 0x2B, 0x2B, 0xAB, 0xAA, 0x6A, 0x6A, 0xE8, 0xF4, 0xFA, 0xFA, 0xC6, 0xC6, 0xE6, 0xE6, 0xD6, 0xD6, 0xF6, 0xF6, 0xCE, 0xCE, 0xEE, 0xEE, 0xDE, 0xDE, 0xFE, 0xFE, 0xC1, 0xC1, 0xE1, 0xE1, 0xD1, 0xD1, 0xF1, 0x71, 0x06, 0x83, 0xC9, 0x64, 0xB3, 0x3F, 0x5D, 0xFE, 0x26, 0x3A, 0x77, 0x4C, 0x90, 0x8F, 0x30, 0x2A, 0x47, 0x44, 0x16, 0xCC, 0x5D, 0x30, 0xF7, 0x80, 0xF2, 0x39, 0xCC, 0xD9, 0x23, 0xA7, 0x55, 0x4E, 0x9D, 0xE5, 0x13, 0x50, 0xC2, 0x61, 0xEF, 0xEA, 0xEA, 0xF2, 0x61, 0x34, 0x74, 0x6F, 0x6A, 0xE2, 0x34, 0x4C, 0x6E, 0x1A, 0xE8, 0xF3, 0xA9, 0x68, 0xE0, 0xB0, 0x3A, 0x26, 0x7C, 0x5A, 0x37, 0x34, 0x70, 0x26, 0x7C, 0x37, 0xF5, 0xAF, 0x1B, 0xE0, 0xF4, 0xBE, 0x0C, 0x22, 0x3B, 0xF9, 0x76, 0xF0, 0x61, 0x71, 0x3A, 0x77, 0xF9, 0xCC, 0x75, 0xB4, 0xB1, 0x3A, 0x7C, 0x1F, 0xFF, 0x2D, 0xEE, 0x03, 0xDB, 0x64, 0x95, 0xEC, 0x36, 0x0C, 0x05, 0xD0, 0xEF, 0xD2, 0x1E, 0x34, 0x5E, 0x40, 0x47, 0x64, 0xE8, 0xFB, 0xD3, 0xB3, 0x95, 0xD4, 0x24, 0x7B, 0x24, 0xA5, 0xDC, 0xEA, 0x31, 0x33, 0xEC, 0xBF, 0x86, 0xB9, 0x1D, 0xA7, 0xB9, 0xC1, 0xE3, 0x73, 0x61, 0x84, 0x87, 0xCF, 0xD1, 0x87, 0xB7, 0x9D, 0x2D, 0xD7, 0xA5, 0x51, 0xCB, 0x86, 0x0F, 0x4F, 0x97, 0x77, 0x2F, 0x4F, 0xA7, 0x87, 0x27, 0x43, 0x38, 0xB7, 0x5A, 0x79, 0x5D, 0x90, 0xC8, 0x5F, 0xBC, 0x92, 0xEA, 0xF5, 0x86, 0x50, 0x41, 0x58, 0xB2, 0xC7, 0xF8, 0x9E, 0x64, 0x84, 0x53, 0x2A, 0x86, 0x9C, 0x5A, 0x7F, 0xFF, 0xDA, 0xD9, 0x21, 0xA7, 0xD0, 0x5F, 0xCA, 0x5C, 0x87, 0xBC, 0x51, 0xCE, 0x0D, 0x7E, 0xF9, 0x48, 0xA2, 0x6E, 0xE3, 0xFB, 0x8D, 0x5F, 0xA6, 0x7B, 0x65, 0xD7, 0xDA, 0x87, 0xD2, 0x38, 0x6F, 0x37, 0xAD, 0x36, 0x63, 0x70, 0xC7, 0x91, 0x68, 0xFD, 0x74, 0xFA, 0x72, 0x78, 0xDE, 0x1E, 0x1E, 0x1F, 0x9D, 0xBE, 0x5C, 0x10, 0xF7, 0x70, 0x7A, 0xFC, 0xF2, 0x74, 0xEF, 0x8E, 0x0F, 0xEF, 0x96, 0xBD, 0x56, 0x9B, 0xA6, 0x09, 0xAE, 0x1F, 0x46, 0x5B, 0x84, 0x5E, 0xF9, 0xFC, 0xB3, 0x1E, 0x47, 0x80, 0x58, 0x12, 0x71, 0x21, 0x93, 0xAD, 0x61, 0x74, 0x5E, 0x35, 0xA1, 0x34, 0x75, 0x68, 0xCA, 0xB6, 0x9C, 0x06, 0xB1, 0x6D, 0x48, 0x24, 0x19, 0xFD, 0x48, 0x97, 0x35, 0x79, 0xD7, 0x74, 0x36, 0x58, 0xDD, 0x0F, 0xF2, 0x1F, 0x0F, 0xBA, 0xFD, 0x5E, 0x87, 0x6F, 0xDF, 0x7F, 0x2C, 0x53, 0x5D, 0xAF, 0x73, 0x6F, 0x87, 0x7E, 0xFB, 0xCA, 0x14, 0xE3, 0xA0, 0xB6, 0x05, 0x89, 0x44, 0x82, 0xA6, 0x3B, 0xAF, 0xAC, 0x0F, 0xA6, 0x85, 0x8A, 0xA5, 0x1B, 0x8A, 0xB2, 0x61, 0x44, 0xD3, 0x0B, 0x2D, 0xD6, 0xA6, 0x80, 0xD2, 0x2D, 0x43, 0xA2, 0x54, 0x2C, 0x0A, 0xFF, 0x2B, 0x0D, 0x43, 0xD7, 0x68, 0xC7, 0x7D, 0xDA, 0x75, 0x92, 0x22, 0x8E, 0x21, 0x8E, 0x23, 0x4E, 0x20, 0x4E, 0x22, 0x2E, 0x46, 0x5C, 0x82, 0xB8, 0x14, 0x71, 0x19, 0xE2, 0x90, 0x79, 0xC4, 0x14, 0x71, 0x0C, 0x71, 0x1C, 0x71, 0x02, 0x71, 0x12, 0x71, 0x31, 0xE2, 0x12, 0xC4, 0xA5, 0x88, 0xCB, 0x10, 0x87, 0xCC, 0x23, 0xA1, 0x88, 0x63, 0x88, 0xE3, 0x88, 0x13, 0x88, 0x93, 0x88, 0x8B, 0x11, 0x97, 0x20, 0x2E, 0x45, 0x5C, 0x86, 0x38, 0x64, 0x1E, 0x29, 0x45, 0x1C, 0x43, 0x1C, 0x47, 0x9C, 0x18, 0x9D, 0xD9, 0xB4, 0xFB, 0xDA, 0x86, 0x6E, 0x15, 0x56, 0xA5, 0x6E, 0x0A, 0x47, 0xA4, 0xFC, 0xF0, 0x76, 0x5F, 0xAF, 0x4B, 0x13, 0x0A, 0xE5, 0x55, 0x58, 0x75, 0xB6, 0x55, 0x7E, 0xB8, 0x17, 0xAA, 0xED, 0x1B, 0x1D, 0xCA, 0x82, 0x4C, 0x77, 0x36, 0x9F, 0xFF, 0xDA, 0xF9, 0xEF, 0xFB, 0xFC, 0x57, 0x93, 0xE1, 0x2A, 0x87, 0x6F, 0xD3, 0xEF, 0xF7, 0xE9, 0xF7, 0x07, 0x81, 0x6B, 0x42, 0xE0, 0x6E, 0xCC, 0x20, 0x29, 0x00, 0x03, 0xE0, 0x00, 0x02, 0x40, 0x02, 0xC4, 0x00, 0x09, 0x40, 0x0A, 0x90, 0x01, 0x40, 0xE7, 0x98, 0x02, 0x30, 0x00, 0x0E, 0x20, 0x00, 0x24, 0x40, 0x0C, 0x90, 0x00, 0xA4, 0x00, 0x19, 0x00, 0x74, 0x4E, 0x28, 0x00, 0x03, 0xE0, 0x00, 0x02, 0x40, 0x02, 0xC4, 0x00, 0x09, 0x40, 0x0A, 0x90, 0x01, 0x40, 0xE7, 0x94, 0x02, 0x30, 0x00, 0x0E, 0x30, 0x74, 0xFE, 0xF0, 0x56, 0x9B, 0x62, 0x7B, 0x3B, 0x96, 0x1B, 0xE7, 0xB4, 0x77, 0x84, 0x8B, 0xF4, 0x2F, 0x21, 0xF5, 0x75, 0xC5, 0xB8, 0xAD, 0x45, 0x61, 0xF8, 0xF9, 0x06, 0xF7, 0xA0, 0x0A, 0xB0, 0x4E, 0x0E, 0xFD, 0x37, 0x66, 0x62, 0x6F, 0x79, 0xD6, 0x70, 0x9C, 0x9E, 0x3E, 0x65, 0x02, 0x3F, 0x0E, 0x55, 0x3F, 0x1F, 0xDC, 0x6F, 0xFF, 0xD5, 0x0F, 0xFF, 0xB8, 0xFE, 0x9A, 0x99, 0x73, 0x37, 0xBF, 0x7A, 0x72, 0xF3, 0xD3, 0x75, 0x7C, 0xFD, 0xE3, 0x67, 0x6F, 0x3E, 0x3B, 0x26, 0xA0, 0xFD, 0x41, 0xE3, 0x78, 0xCB, 0x27, 0xED, 0xD4, 0xE2, 0x7B, 0xEA, 0xF2, 0xD9, 0x3D, 0xAA, 0xA0, 0xE2, 0xA1, 0xCF, 0xF6, 0x43, 0x9E, 0xAD, 0x87, 0x38, 0x26, 0x0F, 0x76, 0xA6, 0x70, 0x85, 0x25, 0xDE, 0xC0, 0xFC, 0x41, 0xCE, 0x1A, 0xE1, 0x7B, 0xF2, 0x7D, 0x36, 0x78, 0x16, 0x42, 0x0A, 0x14, 0xE9, 0xC5, 0x6F, 0x4A, 0x01, 0x77, 0xB2, 0xA0, 0xE5, 0xC1, 0x8F, 0x14, 0x70, 0x12, 0x4E, 0x06, 0x64, 0x83, 0x1E, 0x2C, 0x50, 0x0A, 0x98, 0x81, 0xEC, 0x1B, 0xD9, 0xFE, 0x2D, 0x98, 0x8F, 0x73, 0x75, 0x75, 0x83, 0x59, 0xD7, 0x0D, 0xE6, 0x28, 0xA5, 0xA4, 0xBE, 0xC1, 0xC2, 0x10, 0xAC, 0xF9, 0x3D, 0x94, 0x9A, 0xB3, 0x8B, 0x60, 0xD1, 0x08, 0x36, 0xF2, 0x90, 0xDC, 0x55, 0x70, 0xFF, 0xF6, 0x63, 0xAB, 0x0D, 0x74, 0x81, 0x04, 0xDA, 0xB4, 0x91, 0x02, 0xF3, 0x7D, 0xC6, 0x60, 0x26, 0xA4, 0x40, 0x0C, 0x28, 0x03, 0x33, 0xF8, 0x69, 0x4D, 0x60, 0x0E, 0x92, 0xAC, 0x21, 0x8A, 0x09, 0x69, 0xE0, 0x02, 0xC2, 0x40, 0x91, 0x0D, 0xAC, 0x53, 0x15, 0x44, 0xDC, 0x60, 0xFE, 0xCF, 0xC1, 0xF6, 0x84, 0x0F, 0x2F, 0x16, 0x9F, 0x9E, 0x13, 0xA6, 0x9F, 0x38, 0xA6, 0x28, 0xE5, 0x02, 0x5A, 0x19, 0x2C, 0x6F, 0x30, 0xE7, 0xF9, 0x73, 0xC7, 0x2A, 0x76, 0x3C, 0x40, 0xE9, 0x83, 0x9C, 0xCC, 0x5B, 0x11, 0x47, 0x56, 0x47, 0x1B, 0x0B, 0x29, 0xE5, 0xE1, 0x2A, 0xC7, 0xA0, 0x40, 0x2C, 0x10, 0xCE, 0xF7, 0x2E, 0x49, 0x30, 0xC1, 0x1A, 0x43, 0x1A, 0x78, 0x80, 0x20, 0x65, 0x60, 0x82, 0x0C, 0x47, 0x6B, 0x41, 0x28, 0xA8, 0x24, 0x45, 0x16, 0xF4, 0xAB, 0x94, 0x39, 0x70, 0x05, 0xA5, 0x37, 0x58, 0xFC, 0xEB, 0x84, 0x85, 0xE2, 0x4E, 0xA9, 0xC6, 0x84, 0xAD, 0x3C, 0xC1, 0x24, 0x50, 0x4A, 0x06, 0xD4, 0x32, 0x58, 0x08, 0x27, 0xAC, 0x38, 0x61, 0x85, 0xD1, 0x12, 0x03, 0x29, 0x9C, 0x30, 0x7B, 0x4D, 0x18, 0x13, 0x15, 0x33, 0x74, 0x00, 0x6D, 0x80, 0xF7, 0xE4, 0xD4, 0x82, 0x0E, 0x30, 0x02, 0xDA, 0xF9, 0x49, 0x62, 0x24, 0x02, 0xE4, 0x80, 0x11, 0xF6, 0x6E, 0xA0, 0x05, 0xA2, 0xC1, 0x70, 0xA6, 0xB4, 0x80, 0x39, 0x19, 0xE0, 0x05, 0x72, 0xC0, 0x70, 0x9D, 0x2A, 0x20, 0xFC, 0x06, 0x4B, 0x1C, 0xFC, 0xDD, 0xEA, 0xDD, 0xC0, 0xBD, 0xDF, 0xCC, 0xDA, 0x70, 0x1E, 0xD3, 0x1F, 0x3D, 0x36, 0x56, 0x0F, 0xAE, 0x5B, 0x9F, 0x7B, 0xE5, 0xB1, 0x27, 0xA6, 0x2E, 0xA3, 0xA6, 0x5C, 0xF5, 0xC8, 0xD7, 0x2D, 0x14, 0x1C, 0x7B, 0xF0, 0xA3, 0x0A, 0x64, 0xF9, 0x22, 0xA9, 0x00, 0xA1, 0x40, 0x17, 0x48, 0xF2, 0xEB, 0x0A, 0x7A, 0x41, 0x35, 0x48, 0x03, 0x21, 0xC0, 0x1A, 0x68, 0x00, 0x69, 0x92, 0xA4, 0xDE, 0xFC, 0xC3, 0x7B, 0x0B, 0xD4, 0x49, 0xBD, 0x48, 0xE2, 0x24, 0x48, 0x02, 0x2B, 0xB9, 0xCD, 0xEA, 0x93, 0x73, 0x34, 0xE7, 0x53, 0x67, 0x4D, 0x6F, 0x90, 0xB0, 0x98, 0xC4, 0xE1, 0x7B, 0xF1, 0xCF, 0xFD, 0xE2, 0x65, 0xFD, 0xB0, 0x11, 0x75, 0x3F, 0x33, 0x8C, 0x16, 0xF5, 0x73, 0xB4, 0x6F, 0x03, 0x3F, 0x61, 0x60, 0x2F, 0x71, 0x44, 0xF0, 0x6C, 0x02, 0x94, 0x80, 0x30, 0x60, 0x09, 0x34, 0x80, 0x5C, 0xEC, 0x47, 0x7A, 0xD2, 0x0E, 0xB2, 0x81, 0x13, 0x1D, 0x20, 0x49, 0x84, 0xCD, 0x9B, 0x14, 0x49, 0xD2, 0x64, 0xBE, 0x9F, 0x24, 0x01, 0x54, 0x48, 0xBC, 0xC8, 0x17, 0x45, 0x06, 0xB8, 0x22, 0x5A, 0x73, 0xD0, 0x7E, 0xBD, 0x25, 0xF7, 0x66, 0x9A, 0x7B, 0xCE, 0x2E, 0xFA, 0x30, 0xAA, 0x71, 0xF7, 0xE1, 0xA3, 0xB7, 0x55, 0xF2, 0xA3, 0xE9, 0xDF, 0x66, 0xDF, 0x0B, 0x7C, 0x43, 0x90, 0x5A, 0x30, 0x06, 0x5A, 0x40, 0x2A, 0x70, 0x03, 0x3A, 0x40, 0xE6, 0xAF, 0x5A, 0x29, 0x88, 0x05, 0xC6, 0x0B, 0x4D, 0x81, 0x74, 0xE0, 0x0A, 0x8C, 0x68, 0x12, 0x01, 0xB2, 0x64, 0x5E, 0x2C, 0x50, 0x25, 0x45, 0xE6, 0xC5, 0x92, 0x24, 0x05, 0xCC, 0x08, 0xE7, 0x6C, 0x7E, 0x49, 0x16, 0x7B, 0xA4, 0xE2, 0xB3, 0x7D, 0x5C, 0x83, 0x3F, 0xA1, 0x0F, 0x6E, 0x26, 0x0F, 0xAD, 0xDB, 0x37, 0x95, 0x7E, 0x93, 0x09, 0xDD, 0xFD, 0xEE, 0xC8, 0x78, 0x1A, 0x09, 0x62, 0x48, 0x00, 0x73, 0x20, 0xC6, 0x4F, 0x26, 0x68, 0x07, 0x35, 0xA0, 0x8D, 0x0C, 0x69, 0x50, 0xFD, 0xAA, 0x54, 0xC0, 0xE4, 0x95, 0x27, 0x88, 0x91, 0x5F, 0x16, 0x25, 0x4A, 0xE4, 0xFD, 0xD4, 0x48, 0x92, 0x26, 0xF9, 0xA2, 0x08, 0x51, 0x21, 0x81, 0x6C, 0xFB, 0x47, 0x36, 0xDB, 0xA3, 0xB2, 0xDF, 0x7A, 0x7C, 0x91, 0xA7, 0x12, 0x76, 0xF1, 0x51, 0xEC, 0xAF, 0xF2, 0x23, 0x58, 0xFC, 0x2B, 0x5B, 0x5F, 0xB1, 0x61, 0x64, 0x0B, 0x10, 0x4D, 0x1C, 0x98, 0x01, 0x51, 0x66, 0x7B, 0xF5, 0xCA, 0x02, 0xE8, 0xFC, 0x3B, 0xE1, 0x76, 0x82, 0xEB, 0x38, 0xAF, 0x2B, 0x01, 0x78, 0x2B, 0x59, 0x81, 0x21, 0xCE, 0xE4, 0xFE, 0x37, 0xF6, 0x3A, 0x55, 0x36, 0x8E, 0xF9, 0x23, 0xB8, 0x0F, 0xD3, 0x07, 0xF7, 0x94, 0xE3, 0x8A, 0x28, 0x51, 0xB2, 0xFB, 0x1F, 0x02, 0x2C, 0x80, 0xF6, 0x0A, 0x4A, 0xC1, 0xF1, 0x27, 0x19, 0x5A, 0xB7, 0xB9, 0x9D, 0xD8, 0x4E, 0x6D, 0xA7, 0xCF, 0x8E, 0xD4, 0x88, 0x2E, 0x36, 0x41, 0x06, 0xE9, 0xC9, 0x9D, 0x14, 0x59, 0x85, 0x9A, 0xE6, 0x88, 0xCF, 0x14, 0x1F, 0x90, 0xF1, 0x8F, 0x3E, 0xD2, 0xDF, 0x15, 0x21, 0xF9, 0xF1, 0xD6, 0x74, 0x64, 0x8D, 0xBA, 0x24, 0x6D, 0xA0, 0x88, 0x27, 0x10, 0x26, 0xD5, 0x0D, 0xD2, 0x80, 0xFB, 0x9A, 0xEE, 0x13, 0x1C, 0xDF, 0x51, 0xE8, 0xED, 0xA1, 0x3D, 0xDB, 0xD1, 0x1D, 0xD5, 0xCC, 0x8A, 0x06, 0x42, 0x59, 0x38, 0x69, 0x20, 0x4A, 0x64, 0xD5, 0xFA, 0x2E, 0xF2, 0x03, 0x54, 0x19, 0x9F, 0x7C, 0x22, 0xAE, 0x6C, 0x7D, 0xE2, 0xB3, 0xB9, 0x9C, 0xAD, 0xA0, 0xFA, 0x37, 0x30, 0x8F, 0x29, 0xCC, 0x02, 0xAD, 0xA8, 0xA0, 0xF8, 0x0E, 0x50, 0xBD, 0x6F, 0xC9, 0x75, 0xC7, 0xD7, 0x1C, 0x7D, 0x61, 0x20, 0x03, 0x04, 0xB9, 0xB3, 0x19, 0x52, 0x0A, 0xE2, 0xAC, 0x81, 0xE6, 0x6B, 0xB5, 0xF4, 0x1D, 0x87, 0x6E, 0x47, 0x6E, 0xFD, 0xBC, 0x6B, 0xCB, 0x04, 0x84, 0x83, 0x1C, 0x50, 0x05, 0xDA, 0x48, 0x82, 0x51, 0x52, 0xAC, 0x0A, 0x23, 0xFE, 0xEB, 0x2A, 0xC9, 0x00, 0x15, 0x26, 0xA7, 0x9F, 0xB4, 0xCB, 0xCF, 0x5F, 0x72, 0x7D, 0xD9, 0x69, 0x5E, 0xDD, 0xF3, 0x4B, 0xE0, 0xA6, 0xD2, 0x39, 0x50, 0xE2, 0x9B, 0x98, 0xF3, 0xA7, 0xAE, 0x3A, 0xEF, 0x7B, 0x9D, 0x7C, 0xB7, 0x19, 0x71, 0x80, 0x0D, 0x90, 0xDD, 0x6D, 0x18, 0x88, 0x00, 0x6E, 0xC0, 0x88, 0x16, 0xD9, 0xD3, 0xB8, 0x13, 0x5D, 0x38, 0x29, 0xA0, 0x09, 0xCC, 0xC9, 0x00, 0x37, 0x12, 0xA4, 0x40, 0x08, 0x09, 0xD2, 0x8B, 0x01, 0x79, 0x88, 0xBE, 0xA9, 0x64, 0x66, 0xF6, 0xA9, 0xB8, 0xA4, 0xE3, 0x53, 0x76, 0x1D, 0xF3, 0x4F, 0xF7, 0xA5, 0x39, 0xDC, 0x94, 0x29, 0xD6, 0x06, 0x99, 0x7F, 0x28, 0x07, 0x5D, 0x9C, 0xAA, 0x6F, 0x91, 0x2A, 0x33, 0x73, 0xA1, 0x13, 0x6B, 0xAE, 0xD3, 0x04, 0x66, 0x40, 0x65, 0x0D, 0xB3, 0x58, 0xB3, 0x9B, 0xAE, 0xFB, 0x0C, 0x52, 0x2B, 0xC2, 0x58, 0x73, 0x5D, 0x11, 0x23, 0x4A, 0x12, 0x68, 0x00, 0xD3, 0x1F, 0xFF, 0x98, 0x1F, 0xA2, 0x24, 0x41, 0x1C, 0xE2, 0x24, 0xD6, 0x95, 0xAD, 0xAB, 0x06, 0xD9, 0x0C, 0xCD, 0xF7, 0x92, 0xB0, 0xAF, 0xF0, 0x4D, 0x49, 0xE3, 0x3B, 0x55, 0xFD, 0x5E, 0x4D, 0xF6, 0xBB, 0x44, 0xDF, 0xB3, 0x0C, 0x26, 0xC0, 0x15, 0xDA, 0xBC, 0xAF, 0x8E, 0xBC, 0x17, 0xCD, 0xBD, 0x4C, 0xCA, 0x80, 0x73, 0x23, 0xBB, 0x36, 0x0F, 0xED, 0xFA, 0x6D, 0xEF, 0xF5, 0x53, 0x03, 0x84, 0x81, 0x12, 0xD0, 0xFE, 0xAB, 0x2A, 0x77, 0x13, 0x67, 0xA4, 0x81, 0xDA, 0xBA, 0x13, 0x25, 0x0D, 0xDC, 0x19, 0x5D, 0xFC, 0x8C, 0x0E, 0xE3, 0xAD, 0x1C, 0xFD, 0x20, 0x16, 0x87, 0x28, 0xF4, 0x74, 0xE3, 0x95, 0xDF, 0xF1, 0xE6, 0x77, 0x74, 0xCF, 0xDA, 0xF4, 0xB4, 0x1B, 0x60, 0xE4, 0x6E, 0x67, 0x79, 0xD5, 0x20, 0x1D, 0xD8, 0x3D, 0xF8, 0x66, 0x95, 0xAA, 0x03, 0x6B, 0xA0, 0x01, 0x84, 0x9C, 0x1B, 0x5D, 0x18, 0x19, 0x60, 0x01, 0x46, 0xDE, 0x8B, 0x50, 0x07, 0x1B, 0xC4, 0x02, 0x32, 0x40, 0x0B, 0x58, 0x00, 0x37, 0xD2, 0x20, 0x84, 0x24, 0x48, 0x21, 0x05, 0x4A, 0x41, 0x2B, 0x33, 0xCB, 0x8F, 0x1B, 0x6A, 0x74, 0x47, 0x37, 0x71, 0xE5, 0x24, 0x66, 0xD1, 0xBA, 0x7B, 0x6F, 0x47, 0x69, 0x95, 0xBE, 0xDB, 0x38, 0x59, 0xB3, 0x71, 0x33, 0x33, 0x2D, 0x60, 0x0A, 0x74, 0xA7, 0x54, 0x20, 0x65, 0x15, 0x89, 0x82, 0x4A, 0x26, 0x4F, 0x64, 0x48, 0x13, 0x79, 0x37, 0x81, 0x63, 0xA0, 0x8B, 0xF8, 0x22, 0x16, 0x45, 0x06, 0x8C, 0x90, 0x78, 0x7F, 0xC5, 0x27, 0xD6, 0xC7, 0x1E, 0x70, 0x7A, 0x8D, 0xC1, 0x00, 0x9A, 0xCC, 0xAC, 0xBE, 0x6B, 0x81, 0x58, 0x3D, 0x99, 0x45, 0x5F, 0x3D, 0xF6, 0x19, 0xBF, 0x2A, 0x04, 0x77, 0xE7, 0x86, 0xCA, 0x92, 0x41, 0x2A, 0xA6, 0x5C, 0x3D, 0xF7, 0xBC, 0x56, 0xAB, 0x44, 0x3D, 0x40, 0x1E, 0x10, 0xAB, 0x1F, 0x96, 0x57, 0x95, 0xAC, 0x1B, 0x44, 0x15, 0xAF, 0x2A, 0x51, 0x20, 0xB1, 0x5A, 0xE6, 0x04, 0x39, 0x20, 0x9A, 0x18, 0x39, 0xC0, 0x87, 0x34, 0x99, 0xFD, 0xED, 0x90, 0x04, 0x29, 0x24, 0x48, 0xAE, 0xAB, 0x22, 0x09, 0xCA, 0x49, 0x33, 0xB4, 0xFE, 0x86, 0x36, 0xDE, 0x1F, 0x89, 0x6B, 0x24, 0x76, 0x1F, 0x87, 0x91, 0x9F, 0xF6, 0xA5, 0xEE, 0xC5, 0xA0, 0xFD, 0xB5, 0xC5, 0x4A, 0x3D, 0xEF, 0x9A, 0xE9, 0xB5, 0x33, 0xB0, 0x03, 0x24, 0xD7, 0x5A, 0xE0, 0x20, 0x6A, 0xAD, 0x9C, 0x05, 0x5C, 0xD7, 0xFD, 0xD9, 0x8A, 0x60, 0xD5, 0xAF, 0x29, 0xD0, 0x5E, 0x0C, 0xB0, 0x43, 0x84, 0xD8, 0x22, 0x49, 0x03, 0x17, 0x12, 0xC4, 0xD7, 0x55, 0x93, 0xDA, 0x59, 0x33, 0xB3, 0xB5, 0x3D, 0x00, 0x60, 0xF2, 0x3A, 0x56, 0xA8, 0x83, 0x1C, 0x86, 0xA5, 0xBC, 0x11, 0x7B, 0xAD, 0x01, 0x59, 0x6B, 0x0F, 0x38, 0x77, 0x58, 0x37, 0x05, 0x74, 0x0D, 0x94, 0x5A, 0x4B, 0xBB, 0xDB, 0x8A, 0xA0, 0xC8, 0x6A, 0x25, 0xCE, 0x90, 0x5A, 0xAC, 0xE6, 0xD4, 0x0C, 0xD4, 0xBC, 0x3F, 0x2F, 0x0A, 0x54, 0x82, 0x26, 0xE3, 0x9C, 0xE5, 0x94, 0x34, 0x10, 0x23, 0x05, 0x54, 0x49, 0x03, 0x13, 0xD2, 0xC0, 0x39, 0xCE, 0xF4, 0x7C, 0xAC, 0x2E, 0x75, 0xFD, 0x68, 0x5C, 0xE3, 0xFE, 0x24, 0x38, 0x75, 0xF9, 0xF9, 0x4E, 0xFB, 0xC5, 0xA3, 0xA3, 0x8C, 0x70, 0x9C, 0x22, 0xD8, 0xF7, 0x8F, 0xA8, 0x30, 0x33, 0x3F, 0x74, 0xA0, 0x5C, 0xBD, 0x7A, 0xDB, 0x2E, 0x62, 0x20, 0xE5, 0x9D, 0xA4, 0xD4, 0x9A, 0xA0, 0x0E, 0x68, 0x01, 0x95, 0xE4, 0x80, 0x5C, 0x85, 0x14, 0x45, 0x94, 0xEC, 0x7E, 0xF6, 0x90, 0x00, 0x75, 0x88, 0x93, 0x04, 0x7D, 0x48, 0x80, 0x39, 0xC4, 0xFF, 0xC7, 0x41, 0x89, 0x92, 0x01, 0x92, 0x0C, 0x4D, 0x9E, 0x98, 0x62, 0xAE, 0x33, 0x6C, 0x6B, 0xB9, 0x72, 0x5A, 0x0D, 0xE6, 0xF2, 0x1A, 0x4C, 0xE2, 0x2A, 0xFC, 0xF1, 0x86, 0xBB, 0xD1, 0x3D, 0xD0, 0x02, 0xDC, 0x5F, 0xA7, 0x0E, 0x30, 0xFF, 0xB9, 0x0A, 0xAC, 0x81, 0x96, 0xC4, 0x40, 0xD8, 0xAF, 0x29, 0xC5, 0x88, 0xAE, 0xAB, 0x04, 0x25, 0x6B, 0x7C, 0x2B, 0xA8, 0x03, 0x26, 0xDF, 0xA3, 0x48, 0x85, 0x0C, 0xB0, 0x02, 0xEE, 0xA4, 0x41, 0x28, 0xC8, 0x43, 0x8C, 0x0C, 0xA8, 0x06, 0x1D, 0xCC, 0x4C, 0x9F, 0xCC, 0xDC, 0x2E, 0xB7, 0xF8, 0x94, 0x5F, 0x3E, 0xCE, 0xE8, 0xF8, 0x95, 0xA6, 0x62, 0x2A, 0x08, 0xC3, 0x1C, 0x80, 0xEE, 0x56, 0xFF, 0xCE, 0xD9, 0x60, 0x37, 0xB3, 0xCB, 0xE7, 0xFB, 0x00, 0x2A, 0x40, 0xCE, 0x7B, 0x0D, 0xCB, 0x35, 0x6F, 0xD8, 0x01, 0xAA, 0x64, 0x5F, 0x19, 0x91, 0x85, 0x2E, 0xD6, 0x26, 0xC0, 0xD7, 0xAA, 0x5C, 0x87, 0x34, 0x68, 0x23, 0x0D, 0x46, 0xC9, 0xAC, 0xC1, 0x54, 0x40, 0x94, 0x24, 0x59, 0xCD, 0xA6, 0x39, 0x43, 0xB3, 0x27, 0xB4, 0xC4, 0x41, 0x2D, 0xAF, 0xD0, 0x6E, 0x78, 0x0E, 0xEE, 0xBC, 0x12, 0x9F, 0x56, 0xFC, 0x17, 0xFD, 0x5D, 0x95, 0x29, 0xCF, 0x40, 0x5B, 0x2D, 0x5A, 0xBF, 0xA7, 0x88, 0x7B, 0xFD, 0x6E, 0x5F, 0xEB, 0xE8, 0x01, 0x27, 0xD7, 0xDE, 0xAA, 0x41, 0x0E, 0x51, 0x10, 0xF9, 0xB3, 0x6D, 0x5F, 0xF1, 0xD4, 0xBB, 0x51, 0x70, 0x01, 0x79, 0x40, 0x05, 0x68, 0x21, 0x03, 0xE6, 0x6E, 0xDF, 0x8C, 0x04, 0x90, 0x43, 0x9C, 0x0C, 0xD0, 0x24, 0x05, 0xDC, 0x98, 0x99, 0x7F, 0x74, 0xAE, 0x61, 0xA7, 0x56, 0xA5, 0x9F, 0xC8, 0x2B, 0x34, 0x79, 0x9E, 0x1E, 0x58, 0xFB, 0xFB, 0xCB, 0xC9, 0x69, 0x7C, 0x43, 0xDE, 0x5C, 0x05, 0x76, 0x66, 0x05, 0xC6, 0xDF, 0x13, 0x5A, 0x35, 0x51, 0x10, 0x02, 0x34, 0x57, 0x58, 0xFB, 0xEB, 0x97, 0xF5, 0xBD, 0xCB, 0x3A, 0x9E, 0x35, 0x22, 0xAB, 0xE3, 0x3A, 0x64, 0x98, 0xD9, 0xEA, 0x0C, 0xDD, 0x40, 0x1C, 0x12, 0xA4, 0xD7, 0x0F, 0x28, 0x24, 0xC8, 0x80, 0x3E, 0x24, 0x16, 0xC3, 0x74, 0x95, 0x99, 0xB1, 0x9F, 0xDD, 0xDB, 0x27, 0xAE, 0x02, 0xAA, 0x8A, 0xAD, 0x86, 0xE5, 0x17, 0xA9, 0x40, 0x4D, 0x61, 0xEF, 0xA0, 0xB3, 0x57, 0x81, 0xB9, 0x8B, 0xAC, 0xE2, 0xDD, 0x0C, 0xEA, 0xF9, 0x1F, 0xC5, 0xB9, 0xF7, 0xD6, 0x24, 0x04, 0x54, 0xAD, 0x0A, 0xCA, 0x35, 0x2B, 0x0B, 0x31, 0x52, 0xBF, 0xF6, 0x41, 0x05, 0xF4, 0x90, 0xF8, 0x31, 0xC9, 0xFA, 0x21, 0xB9, 0x72, 0x55, 0x52, 0x20, 0x8D, 0x14, 0x28, 0x07, 0x6D, 0x0C, 0x2D, 0x3F, 0x5A, 0x97, 0xE5, 0xEC, 0xD0, 0xF8, 0x44, 0xB2, 0x71, 0x50, 0x26, 0xC2, 0xD1, 0x3D, 0x98, 0xBD, 0x25, 0x5F, 0x61, 0xB9, 0xD2, 0x39, 0x2B, 0x34, 0x15, 0x32, 0xAB, 0x47, 0x0B, 0x50, 0xB1, 0x4A, 0xCF, 0x41, 0xAD, 0x87, 0x2F, 0x75, 0x7F, 0xAD, 0x45, 0x86, 0xF0, 0x26, 0x86, 0xB4, 0x83, 0x1A, 0x52, 0xA4, 0xDF, 0xF4, 0x21, 0x4E, 0x0A, 0xCC, 0x21, 0xB5, 0xAA, 0x73, 0x80, 0x08, 0x71, 0x92, 0xA4, 0xD7, 0xC6, 0xCB, 0x19, 0x5A, 0x3D, 0x69, 0x99, 0x5F, 0xA7, 0xFF, 0x96, 0x4E, 0xBD, 0xE4, 0x14, 0xC6, 0x27, 0xAA, 0x33, 0xC3, 0x13, 0xA1, 0x85, 0x7F, 0x97, 0xCE, 0x3B, 0xAC, 0xC8, 0x75, 0x1E, 0xDD, 0xCF, 0xC6, 0x72, 0x2F, 0x9D, 0xEB, 0x20, 0xF7, 0x80, 0xF4, 0x1F, 0x8D, 0x42, 0xF7, 0x6A, 0x8B, 0xFB, 0x8D, 0x1F, 0xA2, 0x64, 0x4D, 0x8F, 0x75, 0x78, 0xEF, 0x02, 0xEC, 0x00, 0x1F, 0x90, 0x4A, 0x06, 0x54, 0x82, 0x76, 0x30, 0x42, 0x92, 0x4F, 0x85, 0x84, 0x04, 0x10, 0x21, 0x05, 0xD4, 0x81, 0x05, 0x33, 0xEB, 0x27, 0x25, 0xB1, 0x4B, 0x43, 0x9F, 0x04, 0x4B, 0xAE, 0x09, 0xE5, 0xB2, 0xCD, 0xB7, 0x11, 0x64, 0x3E, 0x75, 0xA9, 0x8F, 0xBD, 0xF7, 0x02, 0x76, 0x67, 0x16, 0x7F, 0x8B, 0x7A, 0xF2, 0xF8, 0xA4, 0x39, 0xB0, 0xE7, 0xB2, 0x01, 0xA1, 0x40, 0x13, 0xBF, 0x37, 0x0D, 0x4A, 0x80, 0x3B, 0xC0, 0xA2, 0x55, 0x57, 0x0E, 0xC0, 0xF7, 0x90, 0xAC, 0xAE, 0xB8, 0xF4, 0xBE, 0x23, 0x7F, 0x0F, 0x37, 0xF5, 0xF7, 0xC4, 0x56, 0x6B, 0x69, 0x08, 0xE2, 0x4D, 0x8A, 0x34, 0x88, 0xDC, 0x8B, 0xEB, 0xAF, 0xCE, 0x70, 0xEF, 0xB4, 0x1C, 0x3C, 0xED, 0xC6, 0x3C, 0x99, 0xD5, 0xC1, 0x83, 0xF5, 0x27, 0xB3, 0xBE, 0xC6, 0x1A, 0x4D, 0x51, 0x1F, 0x12, 0x1F, 0xBB, 0xC2, 0x27, 0xDF, 0x87, 0x69, 0x6B, 0x46, 0x53, 0xE6, 0xE3, 0xAC, 0xCA, 0xB8, 0xE4, 0x90, 0xC6, 0x2F, 0xCE, 0x01, 0x7E, 0x7F, 0xB9, 0x0E, 0xC2, 0x80, 0xDE, 0x85, 0xD4, 0x20, 0x05, 0x68, 0xAF, 0xA2, 0x3E, 0xC0, 0x13, 0x28, 0x11, 0x27, 0x46, 0xF6, 0x23, 0x86, 0xDE, 0xBF, 0xB8, 0x08, 0x60, 0xC4, 0x05, 0xD8, 0x90, 0x24, 0xB2, 0x36, 0x65, 0x01, 0x82, 0xC5, 0x69, 0xBF, 0x1F, 0x17, 0xA0, 0x55, 0x7B, 0xBE, 0x37, 0xE5, 0x26, 0x45, 0xD1, 0x18, 0x8E, 0xBF, 0x43, 0xAB, 0xD7, 0xD2, 0xA9, 0x97, 0x33, 0x33, 0x7F, 0xC6, 0x06, 0x10, 0x8E, 0xFD, 0x3A, 0xE0, 0xB0, 0x3C, 0x5C, 0xDE, 0xFB, 0x1A, 0x37, 0x70, 0xE2, 0x3D, 0x60, 0xDC, 0xD6, 0x3E, 0xEA, 0x26, 0x89, 0xBE, 0x11, 0x59, 0x0D, 0x9B, 0x91, 0x58, 0x24, 0xD9, 0x7D, 0x74, 0x80, 0x74, 0xA2, 0x6B, 0x3B, 0x3C, 0x24, 0x41, 0x28, 0xC8, 0x61, 0x66, 0x82, 0xB0, 0x38, 0xA1, 0xA9, 0xD6, 0x27, 0xFA, 0x8A, 0x8E, 0x4F, 0xCB, 0xE5, 0xEC, 0xCD, 0xCA, 0x0B, 0xF3, 0x8A, 0x1B, 0xAA, 0xA2, 0xE4, 0x3B, 0x91, 0x3D, 0xC5, 0xC9, 0xD9, 0xFF, 0x99, 0xBE, 0xCD, 0xDE, 0x5B, 0xB4, 0x4E, 0x32, 0xA0, 0x14, 0x84, 0x01, 0x73, 0xA0, 0xFA, 0xBE, 0xCA, 0x02, 0xD3, 0xA0, 0x07, 0xF8, 0x5A, 0x04, 0xEE, 0x5B, 0x99, 0x06, 0x59, 0x20, 0x82, 0x9C, 0x55, 0x87, 0x4A, 0xE4, 0xD7, 0x55, 0x81, 0xF8, 0xB5, 0xDB, 0xF8, 0xBD, 0x43, 0x0B, 0x50, 0xCA, 0xCC, 0xF4, 0x3F, 0x03, 0x2C, 0xE2, 0x12, 0x53, 0xBE, 0xBD, 0x94, 0xF8, 0xF7, 0x51, 0x9C, 0xAD, 0x1A, 0x58, 0xCA, 0x1B, 0xFB, 0x27, 0xBF, 0x33, 0x83, 0xD8, 0x38, 0xBF, 0x7A, 0xA5, 0x52, 0x30, 0x4E, 0x0C, 0x54, 0x81, 0x20, 0x6E, 0xC0, 0x82, 0x34, 0x08, 0x52, 0x37, 0x03, 0x82, 0xE8, 0xBC, 0x3B, 0xB5, 0x18, 0x60, 0x44, 0x9B, 0x28, 0x90, 0x22, 0xB9, 0xD8, 0xCC, 0xDE, 0x50, 0x2C, 0x9C, 0x18, 0xD1, 0x3D, 0x84, 0x99, 0x99, 0xFD, 0x27, 0x33, 0x95, 0x6F, 0x30, 0xDF, 0x09, 0x2D, 0x02, 0x7B, 0xCE, 0xCA, 0xC2, 0x01, 0x67, 0xC9, 0xB7, 0xD0, 0xDC, 0xE2, 0xB5, 0xE7, 0xA4, 0xCC, 0xEC, 0x09, 0xC4, 0xD9, 0x5B, 0xE5, 0x75, 0x1A, 0x84, 0x92, 0x01, 0x9E, 0xC0, 0x0C, 0xA8, 0x92, 0x00, 0x7E, 0x88, 0x01, 0x4C, 0x56, 0xC1, 0x79, 0xDB, 0x39, 0xC9, 0xD9, 0x13, 0x79, 0x9E, 0x5F, 0xC3, 0xED, 0x00, 0x6B, 0x72, 0x80, 0xD6, 0x0F, 0xCC, 0x80, 0xC7, 0x8F, 0x21, 0xE5, 0x49, 0x64, 0x15, 0xF3, 0x01, 0x29, 0xCC, 0xCC, 0xBF, 0xB3, 0xFF, 0xD1, 0x7E, 0x32, 0xD3, 0xBA, 0x62, 0x12, 0x8B, 0x00, 0x5E, 0x8F, 0x89, 0x98, 0xC4, 0xDC, 0xED, 0x5F, 0xA6, 0xF0, 0xFE, 0x87, 0xD6, 0xD9, 0xEF, 0x29, 0x24, 0x6F, 0xA5, 0x99, 0x59, 0x32, 0x33, 0x01, 0x66, 0x44, 0x80, 0x18, 0x38, 0x5C, 0x1F, 0xE6, 0xBE, 0x22, 0x16, 0x20, 0x0D, 0x04, 0x39, 0xC3, 0xE8, 0x82, 0xD1, 0xB1, 0x6E, 0x47, 0x81, 0x3B, 0x90, 0x02, 0x7B, 0x51, 0xED, 0x24, 0x4E, 0xF2, 0xCD, 0xEC, 0xD3, 0xEF, 0x8D, 0x81, 0x53, 0x24, 0x48, 0x03, 0x6D, 0x66, 0x16, 0xFF, 0x19, 0x67, 0x8E, 0x91, 0xFF, 0xA9, 0x6F, 0x02, 0x82, 0x8D, 0x47, 0x2B, 0x9A, 0x19, 0xD5, 0x4F, 0x5C, 0x47, 0xF8, 0x54, 0x60, 0x8D, 0x33, 0x3E, 0xB9, 0xC6, 0x40, 0x73, 0xCE, 0xF7, 0x86, 0xFB, 0xEC, 0x78, 0x0F, 0x26, 0x3B, 0x40, 0x1A, 0x9C, 0x9B, 0x02, 0x18, 0x1B, 0x75, 0x1D, 0x92, 0x24, 0x1C, 0xBF, 0x57, 0x5F, 0x82, 0xD3, 0x8D, 0x3F, 0xED, 0xD7, 0xC9, 0xF7, 0xDA, 0xDA, 0x7B, 0xBC, 0xED, 0x75, 0xB0, 0x88, 0xAF, 0x71, 0xA3, 0x6B, 0x42, 0xCB, 0x5F, 0x8B, 0xC0, 0x8D, 0x81, 0x10, 0x90, 0x77, 0x68, 0xF9, 0x5A, 0x04, 0xD2, 0xF5, 0x3B, 0xD0, 0xD4, 0xFB, 0x53, 0x71, 0x59, 0x08, 0xF6, 0x26, 0x86, 0x1D, 0x41, 0x65, 0x7D, 0xFC, 0xD2, 0xF2, 0x55, 0x9C, 0xB3, 0xF6, 0xE9, 0xC1, 0xD1, 0x10, 0x72, 0x8F, 0x0D, 0x90, 0x0D, 0x82, 0x98, 0x82, 0xC3, 0x74, 0x3B, 0x40, 0x35, 0x68, 0x27, 0x09, 0xA2, 0xC0, 0x91, 0xF7, 0x4A, 0x5B, 0x06, 0x4E, 0xAD, 0x97, 0x1C, 0xF4, 0x77, 0x59, 0x01, 0x5F, 0x04, 0x70, 0x59, 0xCB, 0xE1, 0x01, 0x51, 0xC4, 0x81, 0x37, 0x59, 0x85, 0x5B, 0x87, 0x99, 0xD5, 0x93, 0x59, 0x5E, 0xDD, 0x78, 0x36, 0x7C, 0x75, 0xEA, 0xA7, 0xF3, 0x0A, 0x19, 0x9E, 0xD6, 0x3A, 0xB6, 0x67, 0x98, 0xD7, 0xC6, 0xE4, 0xF0, 0xD5, 0x8E, 0x5D, 0x9C, 0xAF, 0x27, 0x5B, 0x7E, 0x9D, 0x01, 0xC3, 0x78, 0xC4, 0xC9, 0xE1, 0x2F, 0x0A, 0x28, 0x03, 0xD1, 0xC0, 0x6F, 0x04, 0x18, 0x39, 0xFD, 0x5E, 0x4D, 0x25, 0x9F, 0x29, 0x93, 0xAB, 0x0D, 0x48, 0x01, 0xBE, 0x72, 0xD1, 0xFA, 0xFF, 0x8F, 0x93, 0xF6, 0x73, 0xD1, 0x22, 0x49, 0x94, 0xEC, 0x56, 0xCE, 0x81, 0x07, 0x33, 0xEB, 0x27, 0xB3, 0xCA, 0x4B, 0x26, 0x3F, 0x5E, 0x18, 0x60, 0xA5, 0xD7, 0x8C, 0xA2, 0x4F, 0xCE, 0xC6, 0xC6, 0x68, 0x58, 0xE7, 0x68, 0x7C, 0x53, 0xEF, 0xCC, 0xE2, 0xF5, 0x58, 0x5D, 0x9F, 0x37, 0xD0, 0xBA, 0x18, 0x41, 0x02, 0x1B, 0x70, 0x4F, 0x14, 0xE5, 0xC0, 0xF2, 0x5D, 0x63, 0x73, 0x40, 0x0F, 0x71, 0x10, 0x09, 0x64, 0x1D, 0x7B, 0xE5, 0xEA, 0x9B, 0x2C, 0xC8, 0x6E, 0xF3, 0x75, 0x3F, 0x42, 0x59, 0x08, 0x69, 0x50, 0x6B, 0x43, 0x57, 0x45, 0xF6, 0xE9, 0xA7, 0xAE, 0x3F, 0x99, 0xCC, 0x6C, 0x9E, 0xCC, 0x3C, 0xAF, 0xF0, 0x7A, 0xE6, 0xB5, 0x8E, 0x6B, 0x2C, 0xB1, 0xAD, 0xF6, 0x46, 0x3F, 0x6E, 0xC2, 0x67, 0x81, 0x8D, 0xF1, 0xF5, 0xDE, 0xA6, 0x73, 0xF7, 0xC4, 0x6D, 0x21, 0x3B, 0x2C, 0x8E, 0xA5, 0x04, 0xED, 0xA0, 0x04, 0x58, 0xBE, 0x7B, 0xDB, 0x3E, 0x20, 0x12, 0x58, 0x00, 0x59, 0x1B, 0xEB, 0x48, 0xA0, 0xF6, 0xDE, 0x28, 0x45, 0xAF, 0x11, 0x72, 0xDE, 0x68, 0x91, 0x24, 0x41, 0x6C, 0x0D, 0x9B, 0xB3, 0x5B, 0x5C, 0x72, 0xF6, 0x04, 0xB8, 0xAE, 0x02, 0x04, 0x6B, 0xD3, 0xCF, 0x93, 0x59, 0xEA, 0x95, 0x13, 0x9F, 0xFC, 0x66, 0x3C, 0x9F, 0xD6, 0xEB, 0xB4, 0xA3, 0xBE, 0xFD, 0x4B, 0x9D, 0x34, 0x6C, 0xC0, 0xEB, 0x9B, 0x99, 0x3D, 0x0B, 0x67, 0xAF, 0x8D, 0x80, 0x08, 0x98, 0xB9, 0x97, 0x19, 0xA2, 0xEF, 0x65, 0xAD, 0x12, 0x84, 0x01, 0x4B, 0xE2, 0xC0, 0xE3, 0x9D, 0x92, 0x2B, 0x90, 0xB5, 0xAB, 0xCC, 0x04, 0xEE, 0x2B, 0xA5, 0x06, 0x66, 0xC4, 0x89, 0x10, 0x5D, 0x18, 0x99, 0xD5, 0xDB, 0xDA, 0x1A, 0x9F, 0x45, 0x9C, 0x18, 0x69, 0x90, 0xCA, 0xCC, 0xE4, 0xCE, 0x8C, 0xEF, 0xBE, 0xFF, 0x55, 0xAA, 0x5F, 0x62, 0x85, 0x3F, 0xAE, 0x8E, 0x88, 0x71, 0xD5, 0x27, 0xD6, 0x46, 0xE0, 0xF9, 0xA9, 0x19, 0xD6, 0x99, 0x1F, 0xC7, 0x4F, 0x11, 0xC0, 0x74, 0x1D, 0xA8, 0x0D, 0xA8, 0x7C, 0x33, 0xFC, 0x23, 0xC7, 0xD6, 0x03, 0x4D, 0x5D, 0xD5, 0xD8, 0x6B, 0x2C, 0x39, 0x19, 0xE0, 0x42, 0xF2, 0x17, 0xBB, 0x7C, 0x1D, 0x64, 0x81, 0x72, 0x22, 0x20, 0x8B, 0x9C, 0x1F, 0x7B, 0x85, 0xBE, 0x33, 0xD3, 0x27, 0x25, 0x37, 0x3C, 0x13, 0x7E, 0x36, 0x9C, 0x75, 0xD5, 0x24, 0x1A, 0xC7, 0x2A, 0x34, 0xE2, 0xED, 0x1F, 0xBF, 0xE2, 0xF0, 0x05, 0xAB, 0x67, 0xC3, 0xD9, 0xFB, 0xE5, 0xDB, 0xB8, 0x17, 0x40, 0xCE, 0xFE, 0x53, 0x6C, 0x2F, 0x06, 0x9C, 0xB5, 0x8C, 0xEA, 0xBD, 0x4E, 0x38, 0xC8, 0x5C, 0x85, 0x5B, 0xEF, 0x13, 0x1C, 0x95, 0xF7, 0xC9, 0x9F, 0xCA, 0xDA, 0x94, 0xC6, 0x1A, 0x5A, 0x06, 0x74, 0x76, 0x71, 0x2E, 0xD6, 0x44, 0xEF, 0x42, 0x86, 0x14, 0x59, 0x63, 0xD1, 0xD6, 0x62, 0x9C, 0x87, 0xA1, 0xD9, 0xB7, 0x2A, 0xA5, 0xE4, 0x1B, 0x5A, 0x4A, 0x3F, 0xA1, 0xF5, 0xC1, 0x1B, 0xA5, 0x76, 0x29, 0x67, 0x7F, 0x9D, 0xA9, 0x6F, 0x68, 0x19, 0xF2, 0xEA, 0x6A, 0xDD, 0x76, 0x87, 0x56, 0x87, 0x8B, 0xA4, 0xAC, 0xD6, 0xCC, 0xC0, 0xE9, 0x15, 0x5A, 0x31, 0x34, 0x03, 0xE9, 0x6B, 0xBD, 0xE8, 0xF7, 0x09, 0x57, 0x2A, 0xB0, 0x06, 0xA2, 0xEB, 0x0D, 0x5D, 0x25, 0x06, 0xBA, 0xD6, 0xA1, 0xA2, 0xFC, 0xE8, 0x4B, 0x45, 0x48, 0xEF, 0x87, 0x51, 0x0B, 0x23, 0x4A, 0x0E, 0x29, 0x10, 0xCA, 0xD0, 0xFC, 0x93, 0xE7, 0xEA, 0x8A, 0x8F, 0x7E, 0xEF, 0x7D, 0x5E, 0x23, 0x2D, 0x8F, 0xE1, 0x25, 0xED, 0x99, 0x7F, 0xF8, 0x69, 0xFB, 0xC4, 0x55, 0xC1, 0xED, 0x93, 0xEC, 0xC7, 0x4F, 0x33, 0xAF, 0xA3, 0xBF, 0x60, 0x14, 0x75, 0x59, 0x80, 0x74, 0x10, 0x44, 0x19, 0x68, 0x0F, 0x48, 0x01, 0x36, 0x40, 0x8A, 0x7F, 0x3D, 0x40, 0x26, 0xD0, 0x7B, 0xF4, 0x16, 0x78, 0x16, 0x1A, 0x05, 0x69, 0x20, 0x84, 0x1C, 0xE0, 0x43, 0x92, 0x14, 0x99, 0x1F, 0xCF, 0xE5, 0xCA, 0x40, 0x0B, 0x39, 0xA0, 0x9A, 0x38, 0x51, 0x92, 0x60, 0x8A, 0xA1, 0xC5, 0x27, 0xFD, 0x32, 0x95, 0x8F, 0xE3, 0xB5, 0xF8, 0x8F, 0xD9, 0x55, 0xE1, 0x38, 0x78, 0x3C, 0x81, 0x23, 0x06, 0x64, 0x27, 0x83, 0xEC, 0x32, 0xE6, 0xFD, 0xE6, 0x46, 0xD4, 0xDA, 0x3F, 0x15, 0x6F, 0xF3, 0xD4, 0xBB, 0xDD, 0xD7, 0x00, 0x87, 0xFB, 0x83, 0x52, 0xE0, 0x02, 0xA4, 0x49, 0x00, 0x4B, 0x10, 0x0E, 0xEC, 0xD9, 0x8C, 0x81, 0x70, 0x70, 0x78, 0xEF, 0xE9, 0xC0, 0x0F, 0xB0, 0x01, 0xB1, 0xAA, 0xBA, 0x02, 0xF4, 0x21, 0x4A, 0x02, 0x4C, 0x70, 0x44, 0x2B, 0x50, 0x23, 0x07, 0x48, 0x81, 0x33, 0x24, 0x81, 0x28, 0x30, 0x63, 0x66, 0xF9, 0xF1, 0xB9, 0xC2, 0xCF, 0x47, 0xEA, 0x8A, 0xA3, 0xEF, 0x76, 0xC3, 0xBF, 0xD5, 0x19, 0x6D, 0x89, 0xCF, 0xD6, 0x46, 0x97, 0x8F, 0xCC, 0x6C, 0xF6, 0x79, 0x90, 0x30, 0xB3, 0xE4, 0x07, 0x71, 0xA0, 0x80, 0xBF, 0xA9, 0xAC, 0x07, 0xE4, 0x01, 0x66, 0xAB, 0xD7, 0x55, 0x50, 0x05, 0xD2, 0x80, 0x37, 0xD0, 0x04, 0x87, 0x29, 0x55, 0x81, 0x10, 0x60, 0xB1, 0x8A, 0x4C, 0xC8, 0x59, 0x57, 0x4A, 0x9C, 0x14, 0x70, 0x05, 0x71, 0x53, 0x64, 0x48, 0x93, 0x22, 0x0E, 0x32, 0x40, 0x15, 0x33, 0xAB, 0x4F, 0xCE, 0x95, 0xFA, 0xFA, 0x1F, 0x52, 0x16, 0x9E, 0x38, 0x44, 0x13, 0x11, 0x0C, 0xF2, 0x56, 0xB4, 0xA5, 0x56, 0xA8, 0x18, 0xB1, 0xF7, 0x7F, 0xC2, 0x98, 0xD5, 0x6F, 0xB4, 0x73, 0xA4, 0x70, 0x7B, 0x39, 0xC2, 0x1A, 0x55, 0xE2, 0x40, 0x8C, 0xBF, 0x47, 0xAA, 0x40, 0x2A, 0xF0, 0x00, 0x7A, 0x67, 0x9E, 0x20, 0xE4, 0xBD, 0x60, 0x68, 0xBC, 0x6F, 0x50, 0x72, 0x6D, 0xCD, 0x05, 0x94, 0x82, 0x4C, 0x12, 0x8B, 0xFD, 0x34, 0x29, 0xC0, 0xE8, 0x9B, 0x1E, 0xE2, 0xE4, 0x10, 0x26, 0x79, 0x8C, 0xA1, 0xF5, 0x27, 0xFB, 0xD2, 0xBF, 0xC3, 0xDA, 0xE8, 0x4B, 0xDB, 0x3E, 0xA5, 0x57, 0x29, 0x36, 0xEA, 0xAE, 0x85, 0x1D, 0x4B, 0x0D, 0x7A, 0xAB, 0x98, 0x57, 0xBF, 0x51, 0xBE, 0xFA, 0x0D, 0x97, 0xF7, 0xB7, 0xD3, 0x05, 0x2A, 0x81, 0xDB, 0xBB, 0x55, 0xCB, 0x06, 0x56, 0x40, 0x86, 0x9C, 0xFD, 0x6A, 0xDF, 0x6A, 0x34, 0x6A, 0xB1, 0xF6, 0x8E, 0xE5, 0xEF, 0x7F, 0xEC, 0x9E, 0xEC, 0xD4, 0x80, 0x1F, 0x52, 0x6B, 0x42, 0x73, 0x50, 0x03, 0xE6, 0x80, 0x1E, 0xF0, 0x7F, 0x84, 0xDD, 0x09, 0xB2, 0x1D, 0x39, 0x88, 0x05, 0xD0, 0xAD, 0xE4, 0x0A, 0x32, 0xC4, 0x0C, 0xFB, 0xDF, 0x58, 0x97, 0xEF, 0xCD, 0x70, 0x89, 0xA8, 0xD7, 0xDD, 0x31, 0x9D, 0x1A, 0x3C, 0x7C, 0xF3, 0x5F, 0xA6, 0x24, 0x04, 0xB8, 0x9D, 0xEC, 0x77, 0x9E, 0x82, 0x19, 0xC6, 0x6C, 0x9E, 0xF4, 0x37, 0xA2, 0x76, 0x8E, 0xE3, 0xE9, 0x7A, 0xA5, 0x0C, 0xBB, 0xB2, 0x69, 0x7C, 0x79, 0x5D, 0xF8, 0xBA, 0xF4, 0xF0, 0xE1, 0xDC, 0x49, 0x34, 0xC6, 0x4C, 0x77, 0xB2, 0xF6, 0x80, 0x4C, 0xA0, 0xBD, 0x53, 0xDA, 0x6B, 0xC7, 0xA6, 0x20, 0xD6, 0x5E, 0x4B, 0x0D, 0x9C, 0x21, 0xBE, 0x50, 0xB2, 0x72, 0x85, 0x51, 0xA0, 0x7B, 0x55, 0xE3, 0x11, 0x15, 0x12, 0xC0, 0x04, 0xF8, 0x47, 0x91, 0x24, 0x45, 0x82, 0x18, 0x19, 0x90, 0xFC, 0x9C, 0xC5, 0xF9, 0x7D, 0x29, 0xD0, 0xF6, 0xA6, 0x1B, 0xF6, 0xD4, 0xD5, 0x48, 0xBC, 0x4F, 0xE1, 0x8E, 0x4C, 0xE6, 0xFF, 0xD8, 0x6E, 0xE8, 0xEA, 0xE8, 0x99, 0x26, 0x0A, 0x22, 0xC0, 0xE9, 0x95, 0x83, 0x95, 0x95, 0xD1, 0x39, 0xC0, 0x89, 0xFC, 0xAE, 0xB7, 0xD5, 0x4F, 0xD9, 0x4E, 0xAD, 0xEA, 0x4B, 0xD1, 0x85, 0x11, 0x5F, 0xF4, 0xAF, 0x93, 0x84, 0xEC, 0xC3, 0xFE, 0xA2, 0x80, 0x1F, 0x46, 0x4E, 0xD0, 0x11, 0xF8, 0x6F, 0xD9, 0x7B, 0xF6, 0x7B, 0x32, 0x9E, 0x9A, 0x37, 0x45, 0x50, 0x2B, 0xE2, 0xCE, 0xE3, 0x4B, 0xA2, 0x90, 0x60, 0xFE, 0x44, 0x2E, 0xBF, 0xBD, 0x46, 0x43, 0xF9, 0xFB, 0xED, 0x3B, 0xEB, 0xE1, 0x58, 0xAF, 0xE6, 0xA3, 0xDF, 0x6A, 0xB1, 0x8E, 0x48, 0x03, 0x8E, 0xDF, 0x8F, 0xE6, 0x18, 0xA8, 0x03, 0x82, 0xB8, 0x92, 0x03, 0x6C, 0x6E, 0x42, 0x41, 0x91, 0xDE, 0xA5, 0x0B, 0x49, 0x7A, 0xDD, 0xC9, 0x17, 0x10, 0xA2, 0x41, 0x8C, 0x08, 0x10, 0x27, 0x0A, 0xF4, 0x00, 0x4B, 0xC6, 0x4C, 0x1F, 0xEB, 0x57, 0xD5, 0xB0, 0x5D, 0x93, 0x7F, 0x97, 0xCF, 0x7C, 0x55, 0x9A, 0xAF, 0x21, 0x66, 0xD2, 0x1C, 0x57, 0x50, 0xA5, 0x75, 0x75, 0xAA, 0x44, 0xAC, 0x27, 0xD4, 0xBF, 0x55, 0x7B, 0x40, 0x9F, 0x75, 0x4C, 0xEF, 0xBB, 0x37, 0x2F, 0x89, 0xF6, 0xFD, 0xAA, 0x6B, 0x5D, 0xA7, 0xAF, 0xB3, 0x6E, 0x99, 0x8B, 0xF8, 0x7E, 0xE0, 0x56, 0x19, 0x72, 0xDE, 0x55, 0x54, 0x6E, 0xAB, 0xC6, 0xD8, 0x48, 0xAF, 0xED, 0x48, 0x81, 0xF1, 0x45, 0x2E, 0xBE, 0x0D, 0x88, 0x01, 0x35, 0xC6, 0xCC, 0x9E, 0x12, 0xB4, 0xAA, 0xA6, 0xBC, 0xD6, 0x71, 0xC5, 0x2C, 0xA7, 0xF1, 0x3D, 0xE9, 0xF8, 0xC3, 0x31, 0xAE, 0x1F, 0x38, 0x68, 0x99, 0x31, 0x66, 0xEE, 0x74, 0xF2, 0x7B, 0x42, 0xBF, 0xD7, 0xA8, 0xAE, 0xCC, 0x58, 0xDE, 0x3B, 0xAC, 0x32, 0x60, 0x05, 0xCE, 0x2E, 0xF3, 0xD3, 0x3B, 0x06, 0x4A, 0x4E, 0xDD, 0x57, 0x9E, 0xBD, 0x8F, 0x89, 0x09, 0x6A, 0xBD, 0x1C, 0x47, 0x88, 0x93, 0x02, 0xBF, 0xAB, 0xA8, 0x76, 0xDD, 0xC4, 0x59, 0xCB, 0x52, 0xFD, 0x78, 0x2B, 0x9A, 0x32, 0x68, 0xFE, 0xA4, 0xBD, 0xD1, 0xF3, 0xE4, 0xBC, 0x75, 0x1D, 0x3D, 0xF3, 0x8D, 0x19, 0xB6, 0xCE, 0x06, 0x4E, 0x28, 0x63, 0xD8, 0xDD, 0x71, 0xF9, 0x3C, 0xBB, 0x10, 0xE1, 0x5C, 0x55, 0x14, 0xF1, 0xDA, 0x4A, 0xF5, 0xDB, 0x77, 0x48, 0x20, 0x96, 0x77, 0x92, 0xD6, 0x74, 0xDD, 0x16, 0x0F, 0x30, 0x05, 0xE7, 0xDC, 0x4F, 0x73, 0x28, 0xF0, 0xF3, 0xE3, 0x63, 0xE7, 0x01, 0xBA, 0xEE, 0x0F, 0x9A, 0x0D, 0x88, 0x43, 0x9C, 0xCC, 0x8F, 0xEE, 0xCA, 0xF9, 0x10, 0xD0, 0x45, 0x14, 0xD4, 0x80, 0x8E, 0x6F, 0xB3, 0xC8, 0x98, 0x05, 0x66, 0x17, 0x44, 0x73, 0x7A, 0x00, 0x8B, 0xF7, 0xB8, 0xB7, 0xED, 0xE2, 0xDB, 0xA2, 0x0B, 0x47, 0x5A, 0xBE, 0xDE, 0xC4, 0x0C, 0xF7, 0x75, 0x8C, 0x59, 0x1B, 0x63, 0x66, 0xAB, 0xB1, 0x34, 0x3F, 0x1A, 0x44, 0xFF, 0x2A, 0xE4, 0x36, 0x50, 0x43, 0x94, 0x38, 0xB1, 0x95, 0x8F, 0x2D, 0x22, 0xC0, 0x9A, 0xE4, 0x8D, 0x1F, 0x92, 0xBF, 0x6A, 0xB6, 0x6D, 0xE1, 0x64, 0x7E, 0x54, 0x95, 0x66, 0x93, 0x24, 0x46, 0x82, 0x0C, 0x68, 0x63, 0xCC, 0xF2, 0xB1, 0x7A, 0x4B, 0xFD, 0x71, 0x7F, 0xC5, 0xF5, 0xFE, 0x9C, 0x59, 0xE2, 0x40, 0x34, 0x8D, 0xB7, 0x93, 0x16, 0xCE, 0x37, 0x15, 0xAC, 0x7A, 0xDF, 0x29, 0xDB, 0xEF, 0x10, 0xFC, 0x5D, 0xC3, 0x7D, 0xD7, 0x22, 0x01, 0xEA, 0x80, 0xEF, 0xC3, 0xD7, 0x05, 0x6C, 0xF8, 0xE1, 0x23, 0x99, 0xC0, 0xE6, 0xBE, 0x84, 0x9F, 0xB3, 0x4E, 0x07, 0x01, 0x4C, 0x80, 0x04, 0x51, 0x60, 0x7E, 0x27, 0x56, 0x94, 0x78, 0x80, 0x3C, 0xA4, 0x40, 0x05, 0x68, 0x07, 0xF3, 0xE5, 0x5E, 0x8A, 0xE4, 0xAF, 0x7F, 0x0B, 0x52, 0xC0, 0x0E, 0x63, 0x56, 0x8F, 0xCD, 0x6B, 0x36, 0x38, 0x7E, 0x5E, 0x75, 0x08, 0x38, 0x77, 0xE2, 0xD6, 0x29, 0x70, 0x8F, 0xA2, 0x35, 0x4F, 0xBC, 0x9A, 0xCD, 0x17, 0xD9, 0x4A, 0x0B, 0xAD, 0x12, 0xA5, 0x7C, 0xED, 0x0B, 0x56, 0x82, 0x24, 0xC2, 0x98, 0xC5, 0xF9, 0xBE, 0xEA, 0x75, 0x10, 0x0F, 0xE0, 0x09, 0x24, 0xEF, 0x23, 0xB4, 0x0F, 0xB0, 0x20, 0x07, 0xA8, 0x03, 0xBB, 0x1E, 0x20, 0x7F, 0xEB, 0x30, 0x58, 0x09, 0xBE, 0xCB, 0x43, 0x3D, 0xC0, 0x02, 0xB8, 0x83, 0x68, 0x50, 0x01, 0x3A, 0x49, 0x91, 0x26, 0x4E, 0xE4, 0x3E, 0xD9, 0x88, 0x33, 0x66, 0x8D, 0xCE, 0x94, 0xCA, 0xFF, 0x6E, 0xD3, 0xA4, 0xF8, 0x46, 0xD6, 0xC2, 0x5B, 0x37, 0xB9, 0xA8, 0xD5, 0x79, 0xCE, 0xAB, 0xB1, 0x1B, 0xA1, 0xC6, 0xAF, 0x7A, 0x39, 0xFB, 0x1B, 0x83, 0x03, 0xF4, 0xDC, 0xAB, 0xD5, 0xB7, 0xA6, 0xD7, 0x2E, 0x6A, 0x49, 0x90, 0xC4, 0x03, 0xA8, 0xAD, 0x96, 0xC5, 0xFE, 0xDD, 0xC1, 0x79, 0x12, 0xB8, 0xDE, 0x55, 0x7C, 0x2D, 0x77, 0x68, 0xBD, 0x41, 0x1E, 0x52, 0xA0, 0x48, 0xF7, 0x5E, 0x27, 0x49, 0x92, 0x20, 0xDF, 0x92, 0xEF, 0x40, 0x82, 0x71, 0x9B, 0xC7, 0xEC, 0xB5, 0xF4, 0xFF, 0xD6, 0xBC, 0xA8, 0x0C, 0x7E, 0x8D, 0x12, 0xDC, 0x64, 0xC7, 0x60, 0x9B, 0xBF, 0xEB, 0x37, 0x72, 0x5D, 0xA9, 0xCC, 0xF7, 0x68, 0x7C, 0x59, 0x34, 0x72, 0xBE, 0x94, 0x85, 0xDF, 0xF7, 0xE3, 0x1D, 0x2B, 0xBD, 0x68, 0xC0, 0xF6, 0x6D, 0xB9, 0xAE, 0xCB, 0xA5, 0x8F, 0x22, 0x73, 0x07, 0xEB, 0x5C, 0x99, 0x20, 0xFF, 0x12, 0x2D, 0x6F, 0xCA, 0xFD, 0x64, 0x29, 0xF1, 0x03, 0xC2, 0x41, 0x09, 0x19, 0xD0, 0xBA, 0x38, 0x44, 0xC8, 0xF0, 0x3E, 0x36, 0x11, 0xB3, 0x3C, 0x5C, 0x34, 0x75, 0xC5, 0x0C, 0xC9, 0xB4, 0x19, 0x1E, 0x39, 0x3C, 0xF0, 0xAA, 0xEE, 0xC0, 0x1F, 0x72, 0xE6, 0xEE, 0x82, 0xF2, 0x95, 0x17, 0x8A, 0x2F, 0xE1, 0xE5, 0x77, 0xD2, 0xE7, 0xDB, 0xE0, 0x7C, 0xAB, 0xD7, 0x18, 0xB0, 0x73, 0x9F, 0x86, 0x6D, 0xEE, 0x1C, 0x77, 0xAD, 0xEC, 0xB4, 0x1A, 0x90, 0x20, 0xBE, 0x68, 0xE0, 0x01, 0x66, 0x5D, 0x2B, 0x64, 0x83, 0x56, 0xD2, 0xF7, 0xB1, 0xF4, 0x10, 0x09, 0xA0, 0x46, 0x9C, 0x08, 0x10, 0xFB, 0x91, 0xB1, 0x34, 0x63, 0xCC, 0xE4, 0xB1, 0x40, 0x47, 0x6C, 0xCB, 0x7B, 0x42, 0x1E, 0x91, 0x37, 0xDB, 0x9F, 0xCA, 0xB7, 0x78, 0xA1, 0xEE, 0x25, 0xF8, 0x6D, 0xA6, 0xF0, 0x90, 0x69, 0x5C, 0x89, 0xC7, 0x94, 0x75, 0x0D, 0xF5, 0x5D, 0x3C, 0x7D, 0x6F, 0xF7, 0x3E, 0x20, 0x15, 0x88, 0x30, 0x74, 0xC5, 0xD0, 0xAD, 0x7C, 0xA0, 0xF4, 0x1A, 0xDF, 0xB1, 0x4A, 0x1D, 0xC5, 0xC1, 0xC9, 0x45, 0x00, 0x21, 0x3C, 0xDC, 0x12, 0x7F, 0x23, 0xF8, 0xFB, 0x29, 0x70, 0x03, 0x51, 0x20, 0x49, 0xEF, 0x4A, 0x88, 0x0F, 0x5F, 0x04, 0xF1, 0x9D, 0x16, 0x64, 0xCC, 0xF4, 0x99, 0x78, 0xDB, 0xEB, 0xD1, 0x7C, 0xAB, 0xFF, 0x3E, 0xA2, 0xA5, 0xAF, 0xB7, 0x61, 0x1F, 0xA4, 0xCA, 0xF0, 0x37, 0x36, 0x47, 0x82, 0xCF, 0xD9, 0x30, 0x66, 0x15, 0xEB, 0x00, 0x25, 0x09, 0xDA, 0x56, 0x9E, 0x45, 0xD6, 0xA6, 0x75, 0x97, 0x80, 0x3A, 0x98, 0x6F, 0x01, 0xF8, 0x9E, 0xE2, 0x59, 0xB1, 0xFE, 0xD6, 0x4E, 0x46, 0x37, 0x56, 0x0D, 0x91, 0x1D, 0x70, 0x7A, 0xD5, 0x7E, 0x2B, 0xE8, 0x20, 0x46, 0x74, 0x37, 0xA5, 0xAC, 0x13, 0xBD, 0x13, 0x59, 0x45, 0xE6, 0xF5, 0xA3, 0x26, 0x5A, 0x0F, 0x63, 0xB6, 0xEB, 0x84, 0x30, 0x0B, 0x46, 0xCA, 0x90, 0x4A, 0x4B, 0xE3, 0xB5, 0x7A, 0x22, 0xED, 0x54, 0xC5, 0xEA, 0x5C, 0x5C, 0xDD, 0xC9, 0xEF, 0xFA, 0x0D, 0x89, 0x35, 0xCF, 0xA4, 0xEE, 0x5A, 0xD5, 0x13, 0xF7, 0x2E, 0xB2, 0xED, 0x83, 0x3F, 0xE4, 0x3A, 0x6B, 0xC5, 0xAB, 0xEB, 0x02, 0xA1, 0xC8, 0xF1, 0x3B, 0x7B, 0x66, 0x5F, 0x28, 0x64, 0x95, 0x0F, 0x1C, 0xA0, 0x43, 0x94, 0x9C, 0x85, 0x90, 0xBD, 0xC7, 0xD3, 0x1B, 0x2B, 0xA2, 0x3F, 0x6E, 0x46, 0x43, 0x18, 0x34, 0xFF, 0xDD, 0x3E, 0xDC, 0xFA, 0x7A, 0x63, 0xD5, 0xAC, 0x09, 0xAC, 0x9A, 0xAD, 0x08, 0xBC, 0xAC, 0x6E, 0x3B, 0x88, 0x4D, 0xDA, 0x75, 0x1E, 0xF6, 0x01, 0xB1, 0x66, 0x74, 0x28, 0x11, 0x05, 0xC7, 0x48, 0x82, 0x6F, 0x75, 0x0B, 0x86, 0x2E, 0x06, 0x34, 0x89, 0x2F, 0xC8, 0xEB, 0xC4, 0x65, 0xBB, 0x5F, 0x71, 0x77, 0x28, 0x0A, 0xB0, 0x20, 0x4E, 0x6C, 0xF1, 0xAB, 0xAA, 0x31, 0xF6, 0xA5, 0x94, 0x13, 0x25, 0x73, 0x5F, 0x43, 0x65, 0xFC, 0xAD, 0x79, 0xB1, 0x37, 0x4E, 0x61, 0x6A, 0xD4, 0x11, 0x64, 0x37, 0xDA, 0x10, 0xB3, 0xFE, 0xF6, 0xF2, 0x89, 0xE7, 0x40, 0xE2, 0xAA, 0xE4, 0xAE, 0x6F, 0xE1, 0xD4, 0x35, 0xAE, 0xA9, 0x0C, 0xF4, 0xF9, 0xD1, 0x67, 0x61, 0xB1, 0x5A, 0x36, 0x1B, 0x78, 0xDC, 0x6F, 0xDC, 0x1A, 0xD0, 0x0D, 0xC2, 0xC0, 0x17, 0xDD, 0x88, 0xB5, 0x5C, 0xE8, 0xAA, 0x43, 0x4E, 0x62, 0xBF, 0xCB, 0x91, 0xC1, 0xAC, 0x6E, 0x2B, 0xFB, 0x75, 0x18, 0x08, 0x72, 0x16, 0x71, 0xB7, 0xF8, 0x67, 0xFE, 0xFE, 0x9C, 0xF5, 0xBC, 0x51, 0x86, 0x6F, 0x4D, 0x3A, 0x5E, 0x0C, 0x19, 0xF8, 0x35, 0xCA, 0x59, 0x5C, 0xB5, 0x4F, 0xEA, 0xBE, 0x5B, 0x06, 0x0E, 0x71, 0x20, 0x6B, 0x23, 0x56, 0xEB, 0x4B, 0x8B, 0x06, 0x35, 0x77, 0x40, 0xC7, 0xEF, 0x46, 0xA0, 0x21, 0x61, 0xE0, 0xAC, 0x39, 0x1E, 0x16, 0x6B, 0x82, 0x82, 0x81, 0x53, 0xC4, 0x17, 0x9B, 0xDA, 0xD5, 0xCC, 0xA4, 0x48, 0x10, 0x23, 0x42, 0x6A, 0x4D, 0x68, 0xAA, 0xA7, 0xE2, 0x4D, 0x9D, 0x47, 0xFB, 0xB5, 0x6C, 0x7C, 0xD0, 0x1A, 0xC3, 0x12, 0x4A, 0x98, 0xE8, 0x9E, 0x61, 0x53, 0x50, 0x60, 0xC9, 0xB2, 0xBA, 0x9B, 0x53, 0x3E, 0x27, 0xCE, 0xFD, 0xB6, 0x8C, 0x04, 0xD9, 0x64, 0x95, 0xF9, 0xEB, 0x7E, 0xF5, 0x16, 0x88, 0xEF, 0x4D, 0x58, 0xF7, 0x69, 0x29, 0x67, 0x5D, 0xD6, 0x25, 0xF0, 0x64, 0x24, 0x03, 0xA4, 0x83, 0x50, 0x72, 0x80, 0x17, 0x71, 0x12, 0x8B, 0x75, 0xD9, 0x9F, 0xBB, 0x4D, 0x23, 0x89, 0x80, 0x0C, 0x62, 0xA0, 0x14, 0x74, 0x31, 0x68, 0x8D, 0x12, 0x21, 0xEF, 0xAB, 0x81, 0x4C, 0x13, 0xE5, 0xA2, 0x72, 0x12, 0x57, 0x98, 0x28, 0x45, 0x3B, 0xEA, 0xCA, 0x67, 0x25, 0xAF, 0x59, 0x60, 0x5E, 0x7B, 0x19, 0xD0, 0xFE, 0xD2, 0x55, 0xDF, 0xF5, 0x07, 0xB0, 0x21, 0x02, 0x64, 0xC0, 0x21, 0x62, 0x77, 0x0D, 0x9B, 0xF5, 0xAE, 0x1E, 0xFD, 0xEE, 0xE7, 0x81, 0xF6, 0xBD, 0x84, 0xA6, 0xAC, 0x94, 0xD2, 0x59, 0xA3, 0x52, 0x1C, 0x78, 0xFD, 0xFF, 0x41, 0xDB, 0x35, 0xBD, 0x41, 0x7C, 0x07, 0x8D, 0x14, 0xE8, 0x61, 0xD0, 0xE6, 0x09, 0x7F, 0x5B, 0xFB, 0x5A, 0x3B, 0x2B, 0xE3, 0x29, 0xCE, 0xBC, 0x8B, 0xF7, 0x1C, 0xC5, 0xFD, 0xAD, 0xE2, 0xDA, 0x33, 0x42, 0xF4, 0xDE, 0xA3, 0xD9, 0x9A, 0x88, 0x10, 0x8C, 0xC4, 0x77, 0x3E, 0x76, 0x12, 0x4D, 0xFC, 0xFE, 0x8F, 0x16, 0xC0, 0xAF, 0x7C, 0x51, 0x71, 0xC3, 0xD0, 0xAF, 0x04, 0x70, 0x72, 0x78, 0x6C, 0x75, 0x41, 0x20, 0xBF, 0x5F, 0xAC, 0x88, 0x26, 0x38, 0xE7, 0x2E, 0xFF, 0x2B, 0x07, 0xD9, 0x24, 0x49, 0x83, 0x3A, 0xA0, 0x05, 0x7C, 0xDF, 0x8E, 0x93, 0x24, 0xC8, 0xF7, 0xFF, 0x82, 0xC8, 0xBD, 0xEB, 0x94, 0x46, 0xCC, 0xEA, 0xDF, 0xFB, 0x27, 0xC5, 0x91, 0x7D, 0xFA, 0x8D, 0xEC, 0x67, 0xCE, 0xCB, 0x96, 0x61, 0x6D, 0x53, 0x2E, 0x48, 0x8D, 0x57, 0x5A, 0xC4, 0xB5, 0x47, 0x8B, 0xDE, 0x87, 0xC0, 0x8E, 0x3B, 0xC9, 0x6A, 0x0D, 0x74, 0xEE, 0x24, 0x62, 0xEB, 0x2E, 0x5D, 0xBF, 0x29, 0x05, 0x3D, 0xA4, 0x57, 0x6B, 0x7B, 0x03, 0x5F, 0x99, 0x7A, 0x69, 0x92, 0xA4, 0x48, 0x2E, 0x8A, 0xC4, 0xAF, 0xB6, 0x8B, 0xD8, 0x75, 0x59, 0xBF, 0x30, 0xD2, 0xC0, 0x82, 0x41, 0x93, 0xC7, 0xF2, 0xAD, 0xB0, 0x47, 0xFB, 0x95, 0xF2, 0xA7, 0xEA, 0xD5, 0x2E, 0x06, 0x8D, 0xAF, 0x34, 0xA9, 0x3F, 0x74, 0x35, 0xFE, 0x3C, 0x79, 0xAE, 0xFB, 0xCE, 0xD0, 0x5F, 0x9D, 0xEA, 0x41, 0xB2, 0xC8, 0xB9, 0x23, 0x28, 0xE4, 0xE8, 0xFD, 0x13, 0x8E, 0xDC, 0xD1, 0x4D, 0x07, 0xF5, 0x71, 0x40, 0xEA, 0xDA, 0xC3, 0x24, 0x71, 0x32, 0xAB, 0x93, 0x53, 0xC9, 0xCA, 0x05, 0xFF, 0xEE, 0x1C, 0x73, 0x32, 0x40, 0x94, 0x18, 0xC9, 0x1B, 0xD5, 0xBB, 0x73, 0xAC, 0xF4, 0xA9, 0xF3, 0x4A, 0xDB, 0x7F, 0xDB, 0xED, 0x4E, 0x28, 0xF6, 0x41, 0x16, 0x48, 0xF3, 0x4A, 0x61, 0x51, 0x6E, 0x65, 0xB3, 0xF5, 0xAE, 0xB1, 0xAD, 0xD5, 0x39, 0x16, 0x64, 0x80, 0x92, 0x2F, 0xAC, 0x4D, 0xF6, 0xE4, 0xB4, 0x3D, 0xB2, 0xA3, 0xE5, 0x4E, 0xD8, 0x0E, 0xC9, 0x01, 0x7E, 0x56, 0x0A, 0x73, 0x0F, 0xDB, 0x38, 0xA0, 0x92, 0xC4, 0x22, 0x49, 0x83, 0x56, 0x52, 0x60, 0x74, 0x61, 0x44, 0x7E, 0x8D, 0x86, 0x69, 0xC6, 0x0C, 0xD7, 0xC1, 0x47, 0xEC, 0x49, 0x79, 0x55, 0xFE, 0xAD, 0x50, 0xF3, 0xD7, 0xCD, 0x10, 0xB3, 0xE2, 0x99, 0x23, 0x87, 0x7B, 0x16, 0x74, 0xB6, 0xE7, 0xF9, 0xDD, 0xDE, 0x5F, 0xF1, 0xAB, 0x55, 0xDD, 0xD7, 0xF0, 0x0C, 0x59, 0x1B, 0x0E, 0x92, 0x76, 0x7F, 0xEE, 0xF4, 0xC3, 0xD7, 0xD5, 0x80, 0xAD, 0x87, 0x7B, 0x88, 0xAE, 0xAB, 0x81, 0x7D, 0xDD, 0xE4, 0xA4, 0xC8, 0x00, 0x11, 0xD2, 0xEB, 0xEB, 0x0C, 0xE2, 0x37, 0x3A, 0xA4, 0x56, 0xA9, 0xE1, 0x17, 0x35, 0x7F, 0xC2, 0xDE, 0xD4, 0x7E, 0xF4, 0xBC, 0xC1, 0x46, 0xE2, 0xAE, 0xC1, 0x3C, 0xA6, 0xE1, 0xF7, 0xBD, 0x03, 0x9F, 0xE4, 0x29, 0xA4, 0x09, 0xD2, 0xEE, 0xB2, 0x97, 0xB9, 0x4E, 0x03, 0xFA, 0xEA, 0xAA, 0x46, 0xE9, 0x22, 0x09, 0xB2, 0x80, 0x27, 0xD0, 0xFE, 0xD1, 0x3D, 0x69, 0x03, 0xF2, 0x10, 0x05, 0xDE, 0xC0, 0xF6, 0x4C, 0xCE, 0xBD, 0xDA, 0x09, 0xB1, 0x45, 0x90, 0x22, 0x0D, 0x5A, 0x48, 0xAD, 0xEE, 0x81, 0xB3, 0x3E, 0xD9, 0xB3, 0xB9, 0x8B, 0xB5, 0xC4, 0x19, 0x33, 0x5C, 0x0D, 0x9C, 0x14, 0x8E, 0xD3, 0xCC, 0xBF, 0x47, 0xF5, 0x79, 0x3D, 0x1B, 0x1F, 0x68, 0x13, 0x7C, 0x30, 0x83, 0x93, 0x11, 0x70, 0x54, 0xCF, 0xC3, 0x98, 0x55, 0xEF, 0xA3, 0xFA, 0x80, 0x3A, 0xA4, 0xD7, 0x73, 0xD5, 0x40, 0x0B, 0xC8, 0x1E, 0x67, 0x59, 0x20, 0x65, 0xB5, 0xA8, 0xAE, 0x82, 0x0C, 0x37, 0x20, 0xB6, 0xC6, 0xFC, 0x25, 0xD9, 0xFF, 0x56, 0x24, 0x88, 0x93, 0xBC, 0x29, 0x05, 0xFD, 0x31, 0x24, 0x89, 0xFF, 0x6A, 0x5C, 0x1C, 0x30, 0xC5, 0x98, 0xE5, 0x53, 0xFE, 0x66, 0x0F, 0x7B, 0x61, 0xF3, 0x3A, 0x75, 0x96, 0x16, 0x3E, 0x96, 0xC6, 0x5D, 0x5F, 0x18, 0x1E, 0x52, 0x5D, 0x57, 0x03, 0xB5, 0x3E, 0x67, 0x67, 0x6D, 0x30, 0x53, 0xD7, 0x1C, 0xCC, 0x59, 0xEF, 0xA2, 0x26, 0x7E, 0x9F, 0x1E, 0xFA, 0xCB, 0x13, 0x91, 0x6A, 0x10, 0x09, 0xB4, 0xEE, 0x94, 0x49, 0x0C, 0xB0, 0x26, 0x4A, 0x8C, 0x38, 0x91, 0x5F, 0xFF, 0x2F, 0xD6, 0x14, 0x37, 0x25, 0x43, 0x9A, 0x04, 0x11, 0xE0, 0x7B, 0x5E, 0x5E, 0x33, 0x66, 0xF5, 0x54, 0x61, 0xAE, 0x72, 0xC8, 0xDB, 0xFF, 0xC6, 0xAC, 0xE4, 0x6D, 0x71, 0x6C, 0xEC, 0x93, 0xD5, 0x38, 0x2A, 0x88, 0x59, 0x05, 0xC7, 0x48, 0xEC, 0x01, 0x4C, 0xF6, 0x6B, 0xE5, 0x3C, 0x20, 0x88, 0xEE, 0xCA, 0x96, 0x5C, 0x31, 0xFB, 0x1E, 0x12, 0xD2, 0x64, 0x0A, 0x64, 0x02, 0x53, 0xC6, 0x6C, 0x9F, 0x2F, 0x3E, 0x02, 0xE4, 0x21, 0xF5, 0xEB, 0x81, 0x0D, 0xD2, 0xAB, 0xF0, 0x27, 0x80, 0x7C, 0x38, 0xD9, 0x4F, 0x6A, 0xDE, 0x3F, 0x52, 0x93, 0x31, 0xEB, 0x27, 0x02, 0x33, 0xA3, 0xDD, 0x50, 0xCD, 0x97, 0xF3, 0xAA, 0xE6, 0x53, 0xF3, 0x4E, 0x73, 0x85, 0xF5, 0xC2, 0x6B, 0x65, 0x1C, 0x3B, 0xE4, 0x40, 0x4A, 0xC8, 0x76, 0xBA, 0xF6, 0xCB, 0x59, 0xEC, 0x99, 0x32, 0x79, 0x40, 0x28, 0xB0, 0x7D, 0x94, 0x5C, 0x29, 0xB6, 0x2F, 0x3C, 0xBE, 0x8A, 0xEC, 0x8E, 0x32, 0x82, 0x24, 0xD7, 0x05, 0xA6, 0x34, 0x38, 0x44, 0x6A, 0x5D, 0x6E, 0x06, 0x48, 0x52, 0x87, 0x38, 0x59, 0xAF, 0xD8, 0xF9, 0x8E, 0x25, 0x45, 0x9A, 0x04, 0x39, 0xEB, 0x4E, 0x5D, 0xEE, 0x3B, 0xF5, 0x9A, 0x27, 0xEB, 0x2E, 0x40, 0x08, 0x6C, 0xCA, 0x9E, 0xCE, 0xB7, 0xB3, 0xF0, 0x2D, 0x55, 0x1C, 0x3A, 0x7D, 0x0C, 0x7F, 0xD6, 0x92, 0xFB, 0x73, 0x66, 0x7B, 0x0D, 0x38, 0x8C, 0xD9, 0x2E, 0x3E, 0x14, 0x90, 0xFE, 0xFB, 0x46, 0xE9, 0x0A, 0xD6, 0xB7, 0x97, 0xD7, 0x06, 0x56, 0x40, 0x56, 0xB5, 0xD3, 0x75, 0x96, 0xBF, 0xCE, 0x9C, 0x02, 0x7C, 0x57, 0xD5, 0x0B, 0x31, 0xA2, 0x3F, 0xF6, 0x41, 0x4E, 0xC2, 0x88, 0x2E, 0xCE, 0xFA, 0x21, 0x0A, 0xB2, 0x10, 0xB3, 0xC6, 0x3C, 0x9C, 0x29, 0xC7, 0x88, 0x72, 0xE9, 0x47, 0xE3, 0xAD, 0x40, 0x15, 0x5F, 0xB6, 0xE1, 0xF0, 0x2C, 0x08, 0xB8, 0x87, 0xA2, 0xC9, 0x3D, 0xED, 0x9E, 0x25, 0xD4, 0xFB, 0x0A, 0xEA, 0xAB, 0x3C, 0xF0, 0xBE, 0xF3, 0xAE, 0x11, 0xC0, 0x1D, 0xA8, 0xDE, 0xA7, 0x94, 0x9E, 0x0F, 0xFE, 0xC7, 0x06, 0x1A, 0x40, 0x18, 0xB4, 0x26, 0x71, 0xC0, 0x59, 0x03, 0x99, 0x4D, 0x80, 0x1E, 0x20, 0x49, 0x82, 0xD8, 0xC2, 0x49, 0x02, 0x8D, 0x3D, 0x1E, 0x67, 0xB1, 0x0A, 0xA1, 0xF7, 0xEC, 0xB9, 0x34, 0x06, 0x0D, 0x47, 0x81, 0x38, 0xF2, 0xA8, 0xBE, 0x6A, 0xF3, 0xE8, 0xC1, 0xA4, 0xCC, 0x96, 0x57, 0x2D, 0x91, 0x08, 0xAC, 0x3F, 0x94, 0x07, 0xCE, 0x9C, 0x9C, 0x8E, 0x66, 0xF1, 0xA3, 0x30, 0x19, 0xDF, 0xF9, 0x55, 0x30, 0xAA, 0x77, 0x75, 0x6D, 0x93, 0x08, 0xA0, 0x0D, 0xE4, 0x80, 0x63, 0x40, 0x04, 0xE8, 0x01, 0xB2, 0x4F, 0x94, 0x06, 0x32, 0x81, 0x17, 0xB0, 0x01, 0x2E, 0x20, 0x0C, 0xE4, 0x47, 0x81, 0x72, 0xD2, 0xA0, 0xED, 0xEE, 0xD0, 0x3A, 0x44, 0x84, 0x18, 0x71, 0x62, 0x37, 0x2A, 0xC0, 0x92, 0x41, 0xD3, 0xFF, 0x75, 0x26, 0xFC, 0x48, 0x21, 0x9D, 0x80, 0xD8, 0xB9, 0x1F, 0x65, 0xB9, 0x4C, 0xDF, 0x79, 0xB4, 0xA1, 0x23, 0x0C, 0x9A, 0xD7, 0x4A, 0x56, 0x04, 0x69, 0xA0, 0xE7, 0x2E, 0xFC, 0x2C, 0x01, 0x91, 0xC0, 0x0D, 0x58, 0x10, 0x5D, 0x18, 0x71, 0x92, 0xA4, 0x81, 0x1B, 0x71, 0xD2, 0x20, 0x94, 0x14, 0x48, 0x5D, 0x21, 0x54, 0x32, 0xA0, 0x13, 0x8C, 0x12, 0x67, 0x24, 0x0F, 0x09, 0x20, 0xEB, 0x1B, 0xA8, 0xCD, 0xA0, 0xD9, 0xB3, 0xA3, 0x25, 0xFD, 0x6A, 0x30, 0x4F, 0xD4, 0xFD, 0xF4, 0x1B, 0xD3, 0xFE, 0x0F, 0xAD, 0x93, 0x68, 0x51, 0xB5, 0xC2, 0x76, 0x76, 0x57, 0x26, 0x9F, 0x6B, 0xAA, 0x47, 0xF2, 0xD5, 0xDB, 0xAF, 0x3A, 0x70, 0x01, 0xCA, 0x5A, 0xDB, 0x19, 0x50, 0x1F, 0x87, 0x14, 0xD3, 0x1A, 0x07, 0x78, 0x82, 0x2C, 0x50, 0x46, 0x0A, 0xF4, 0x21, 0x0E, 0xC6, 0x08, 0xE7, 0x55, 0x1C, 0x27, 0x0D, 0x24, 0x80, 0x1A, 0x19, 0x60, 0x05, 0x9C, 0x04, 0x49, 0x25, 0x0D, 0xCA, 0x41, 0x2B, 0x98, 0x43, 0x0A, 0x47, 0xCB, 0x57, 0x14, 0x31, 0xF3, 0xC7, 0xE4, 0xD5, 0xF3, 0x37, 0x23, 0x64, 0xB8, 0xFB, 0x41, 0xCC, 0x8A, 0x59, 0x2C, 0x61, 0x7D, 0xBF, 0x06, 0xE2, 0x8E, 0xA5, 0x53, 0x9D, 0x31, 0xF3, 0xD8, 0x4F, 0x27, 0x6F, 0xC5, 0x56, 0x15, 0x47, 0xBE, 0x4E, 0x2C, 0x80, 0x1E, 0x70, 0x8A, 0x18, 0xD0, 0x04, 0x5D, 0x08, 0x61, 0x1C, 0x50, 0x24, 0x0C, 0xA8, 0xF3, 0x87, 0x18, 0x70, 0x07, 0x2A, 0xE0, 0xF4, 0xFD, 0x1A, 0x98, 0x21, 0xDF, 0x7F, 0x3C, 0xC4, 0xC8, 0x00, 0x29, 0x60, 0x87, 0x34, 0x19, 0xE0, 0xFA, 0x8B, 0x02, 0xF9, 0x3D, 0x9D, 0x81, 0x1D, 0xC6, 0xA9, 0x47, 0xE3, 0x0D, 0x9D, 0x27, 0xFA, 0x3D, 0x85, 0x2C, 0xAE, 0x8F, 0xE1, 0x4A, 0xB4, 0xFF, 0x30, 0xA9, 0x7C, 0x1F, 0xA6, 0x5C, 0x67, 0x01, 0x8F, 0x95, 0x46, 0xD3, 0xFE, 0x16, 0xCD, 0xFB, 0x41, 0x72, 0x05, 0xDA, 0x77, 0x55, 0xDA, 0x18, 0xE8, 0xBA, 0x33, 0x90, 0xC5, 0x90, 0xFB, 0x21, 0x09, 0x64, 0x65, 0xC5, 0x64, 0x95, 0xE4, 0xD9, 0x01, 0x52, 0x24, 0x89, 0x93, 0xB3, 0x50, 0x12, 0xBF, 0xAA, 0x96, 0x87, 0x14, 0x71, 0x60, 0x49, 0x94, 0xCC, 0x5A, 0x06, 0xF2, 0x31, 0x7C, 0xDB, 0xFF, 0x7E, 0xD0, 0xF4, 0x55, 0xAF, 0xA7, 0xED, 0x35, 0x57, 0xA4, 0x59, 0x5D, 0x78, 0xB9, 0x1F, 0x28, 0x5E, 0xB0, 0xB9, 0x87, 0x09, 0x09, 0x9D, 0x5C, 0xF3, 0x4A, 0x5C, 0xF9, 0xFC, 0x3B, 0xB0, 0xBA, 0xFF, 0xED, 0xC4, 0x5A, 0x34, 0x05, 0x0C, 0xC3, 0xA4, 0x6B, 0xA5, 0x48, 0x05, 0x5E, 0x40, 0xF5, 0x2E, 0x1E, 0x8A, 0xB5, 0x0C, 0xE8, 0x87, 0x13, 0xF9, 0x85, 0xFF, 0xD8, 0xCB, 0x78, 0x80, 0x30, 0xE2, 0x8B, 0x20, 0x09, 0xD2, 0x40, 0x35, 0x83, 0x56, 0x8F, 0xC7, 0x3B, 0x56, 0x8F, 0xE4, 0x2B, 0xDA, 0x18, 0x12, 0x2F, 0xF6, 0x94, 0xBD, 0x35, 0xF5, 0x04, 0xAB, 0xF6, 0xE2, 0xED, 0x10, 0x43, 0xC5, 0x52, 0xE4, 0x73, 0xDE, 0xFA, 0x82, 0x16, 0xBD, 0xEE, 0xD4, 0xBF, 0x3A, 0xBD, 0xFC, 0x9E, 0x35, 0xFF, 0x0A, 0x1E, 0x56, 0xA3, 0xC0, 0x01, 0x5E, 0xC0, 0x1C, 0xB8, 0x82, 0xFA, 0x2A, 0x8A, 0x0E, 0xF8, 0x9E, 0xDF, 0x22, 0x5F, 0xE4, 0x67, 0x75, 0x74, 0x4B, 0x91, 0x43, 0x92, 0x0C, 0x50, 0x25, 0x49, 0x06, 0x98, 0x01, 0x27, 0x31, 0x20, 0x93, 0x34, 0x29, 0xA2, 0x8B, 0x04, 0x23, 0x8C, 0x59, 0x63, 0x50, 0x49, 0xD8, 0x53, 0xE7, 0x1F, 0xFA, 0x3A, 0xA8, 0xD7, 0x08, 0x1E, 0xCE, 0x4A, 0xA6, 0xF0, 0x92, 0x45, 0x9A, 0x7A, 0x5D, 0x3D, 0xC5, 0xD9, 0xB3, 0x37, 0x56, 0x12, 0x3E, 0x0E, 0xB0, 0x04, 0x12, 0xBF, 0x66, 0x57, 0xD5, 0x1A, 0x5D, 0xDB, 0xC0, 0xE5, 0x46, 0x8B, 0x9C, 0x1F, 0x75, 0x9D, 0x46, 0xEA, 0x7B, 0xC8, 0xD6, 0xE8, 0xA4, 0xB0, 0xD5, 0x93, 0xDB, 0x2B, 0xAB, 0xDD, 0x40, 0x65, 0xC5, 0x53, 0x89, 0x2D, 0x9C, 0x0C, 0x88, 0x62, 0xCC, 0xE6, 0xD1, 0x7A, 0x27, 0xE4, 0x0F, 0x55, 0x7E, 0xFD, 0x9D, 0x3D, 0x63, 0x8D, 0x1C, 0xC3, 0x37, 0xDC, 0x25, 0x0B, 0x6F, 0x84, 0xEE, 0x7B, 0x52, 0xF2, 0xA1, 0xA3, 0xD7, 0x74, 0x69, 0x7B, 0x7B, 0xD5, 0x21, 0x5B, 0x02, 0x59, 0x47, 0xCA, 0x18, 0x60, 0x0D, 0x74, 0x55, 0x97, 0x9C, 0x35, 0xEF, 0xA4, 0x8B, 0x28, 0xA8, 0x26, 0x7E, 0xD3, 0x67, 0x55, 0xB3, 0x18, 0x90, 0x43, 0x1A, 0xA8, 0x92, 0x04, 0x26, 0xC0, 0x0F, 0x09, 0xD2, 0xE4, 0x67, 0x91, 0x69, 0x81, 0x52, 0x04, 0x6D, 0xCE, 0xE3, 0xF5, 0xCE, 0xC9, 0xA7, 0xED, 0x8D, 0x89, 0xAB, 0x3B, 0xD6, 0xA3, 0x99, 0xAC, 0x1B, 0xE6, 0x60, 0x12, 0x09, 0xD6, 0x3C, 0xD7, 0xFD, 0x70, 0x43, 0x79, 0x75, 0xDD, 0x94, 0x7B, 0xAF, 0x1B, 0xE1, 0xF9, 0x75, 0xE3, 0xB9, 0xD3, 0x36, 0xB2, 0xF3, 0x35, 0x2B, 0x39, 0xE9, 0x3F, 0x47, 0xFA, 0xAE, 0xB2, 0xF7, 0x55, 0xD3, 0x6E, 0x03, 0x52, 0x40, 0x29, 0x99, 0x55, 0x56, 0x72, 0x56, 0x8A, 0x2C, 0x48, 0x92, 0x21, 0x7D, 0x23, 0x01, 0xD4, 0x19, 0x33, 0x41, 0xB9, 0x86, 0x21, 0x5F, 0x3B, 0xD3, 0x4F, 0xC7, 0x5B, 0x82, 0x39, 0x12, 0x1A, 0x83, 0xCF, 0xC0, 0x24, 0x7E, 0xB2, 0x23, 0x82, 0x61, 0x72, 0x9D, 0xD4, 0x0B, 0xCA, 0x2B, 0xAB, 0xA0, 0xA7, 0x6B, 0x7D, 0x5E, 0x0C, 0xD4, 0x59, 0x55, 0xDA, 0xBD, 0xC6, 0x0D, 0x1A, 0xA8, 0x58, 0x43, 0x40, 0xED, 0x4E, 0x33, 0xF4, 0xBE, 0x52, 0x3B, 0x20, 0x06, 0xF4, 0x2E, 0x83, 0x34, 0x30, 0x7E, 0x1F, 0xC3, 0x25, 0xC8, 0xBA, 0x40, 0xF4, 0x04, 0x61, 0x3F, 0xF0, 0xBC, 0x09, 0x05, 0x39, 0x8C, 0x99, 0x3E, 0x31, 0xAF, 0x0A, 0x72, 0x40, 0xDE, 0xF2, 0x78, 0xBF, 0xC6, 0x3E, 0xA8, 0x54, 0xC7, 0xFE, 0x22, 0xF0, 0x8C, 0x56, 0x25, 0x8E, 0x6B, 0x79, 0xDF, 0xA5, 0x47, 0xAF, 0x02, 0xBE, 0x90, 0xB5, 0x79, 0x58, 0x15, 0xB2, 0x66, 0x77, 0xB9, 0x74, 0x38, 0xD0, 0x5F, 0x37, 0x16, 0x3A, 0x77, 0x62, 0xB6, 0x48, 0x3A, 0x08, 0xE2, 0x8B, 0xDA, 0x31, 0x5B, 0xED, 0x85, 0x7A, 0x48, 0x03, 0x5B, 0x67, 0x87, 0x3C, 0xA0, 0x74, 0x7D, 0xB9, 0x43, 0xD6, 0x0A, 0x9D, 0x0E, 0x3A, 0x19, 0xB3, 0xEF, 0x42, 0x20, 0xD1, 0x23, 0xA0, 0x76, 0x4D, 0x95, 0xB0, 0x63, 0xEC, 0x7C, 0x6A, 0xB6, 0x5F, 0x33, 0x31, 0x1A, 0x71, 0x15, 0x09, 0x79, 0xEE, 0x86, 0x9A, 0xDE, 0xAF, 0xF1, 0x06, 0x66, 0xEB, 0x32, 0xA5, 0x41, 0x92, 0x48, 0x52, 0x7B, 0xD0, 0xE3, 0xAA, 0x00, 0x9A, 0x5F, 0x0F, 0x67, 0x80, 0x10, 0xD0, 0x72, 0x27, 0x22, 0x7B, 0x65, 0xC5, 0x74, 0x80, 0xAD, 0x0E, 0xB6, 0xD8, 0x4D, 0x17, 0x43, 0x9A, 0x24, 0x91, 0x1F, 0x7D, 0x19, 0xF3, 0x05, 0xCD, 0x1F, 0x97, 0xF7, 0xF8, 0xA0, 0xCD, 0x22, 0xE7, 0xAA, 0x7E, 0x37, 0x51, 0x7C, 0x78, 0x7C, 0x90, 0x39, 0x1C, 0xC1, 0x7D, 0xA3, 0xAD, 0xBF, 0x6A, 0x20, 0xF7, 0xB4, 0xFF, 0xFA, 0x75, 0x47, 0xA1, 0x0E, 0xCE, 0x59, 0xC5, 0x1B, 0x06, 0x42, 0x49, 0x81, 0xB6, 0x55, 0xA3, 0xD0, 0xE0, 0x14, 0x51, 0x72, 0xD6, 0x7D, 0x89, 0x02, 0x25, 0xB9, 0x16, 0x03, 0x59, 0xCF, 0xB8, 0x1D, 0x12, 0x3B, 0x76, 0x64, 0x57, 0xE0, 0xCA, 0x6A, 0x2E, 0x50, 0x52, 0xA0, 0x0F, 0x83, 0x16, 0xE8, 0x1D, 0x66, 0x01, 0xC2, 0xD1, 0x7C, 0x3C, 0xDE, 0x74, 0x4C, 0x92, 0x60, 0xD9, 0xA3, 0x45, 0x2A, 0xD7, 0x23, 0x45, 0x1A, 0x7A, 0x04, 0x67, 0x80, 0x9F, 0xA5, 0xA2, 0xDF, 0x8A, 0xF4, 0x7D, 0xCE, 0x65, 0xED, 0xFE, 0x5B, 0x80, 0x37, 0x90, 0x5A, 0x29, 0xC8, 0x00, 0x23, 0x64, 0x40, 0x93, 0x52, 0x90, 0x06, 0x62, 0x88, 0x91, 0xFA, 0xF5, 0x46, 0xFB, 0x55, 0x0B, 0x27, 0x6B, 0xE7, 0x6B, 0x0A, 0xDC, 0xC9, 0x80, 0x10, 0xA2, 0xE4, 0x2C, 0x0A, 0x94, 0x33, 0x66, 0x89, 0x2E, 0x45, 0x8D, 0x27, 0xEA, 0xD5, 0x51, 0xAC, 0xA3, 0xE6, 0x4F, 0x9F, 0xD7, 0x8B, 0x7F, 0x10, 0xE5, 0x9F, 0xA0, 0x1D, 0xA1, 0x0B, 0xDC, 0x74, 0x7E, 0x31, 0xAB, 0x7B, 0x4E, 0xA0, 0xBE, 0x7E, 0xEE, 0xF3, 0x93, 0x3A, 0x59, 0xC3, 0x0A, 0x33, 0x80, 0xED, 0x23, 0xCF, 0xDE, 0x0B, 0xCC, 0xAF, 0xFE, 0xA8, 0x00, 0x75, 0x40, 0xC8, 0x8F, 0x71, 0x1D, 0xBD, 0xD7, 0xC3, 0xFE, 0x75, 0xD9, 0xBB, 0x7E, 0x69, 0x3F, 0x20, 0x88, 0x37, 0x49, 0x22, 0xC0, 0xFA, 0x47, 0x1A, 0x6D, 0xEA, 0x3A, 0x38, 0x95, 0xD7, 0x1F, 0xDC, 0xED, 0xE9, 0x79, 0xED, 0x08, 0x7E, 0xA9, 0xC6, 0x02, 0xFA, 0xB7, 0x74, 0x46, 0xEF, 0x7C, 0xED, 0xA1, 0x53, 0xD7, 0xD2, 0x69, 0xAF, 0xAD, 0x16, 0xF9, 0xEC, 0x35, 0x97, 0x6B, 0xB5, 0xED, 0x56, 0x91, 0x43, 0x0A, 0xF4, 0xC7, 0x90, 0x58, 0xEC, 0xAB, 0xF1, 0x95, 0xE4, 0x0E, 0x07, 0xBD, 0x9A, 0xCD, 0xD5, 0x80, 0x29, 0x19, 0xE0, 0xB5, 0x0E, 0x47, 0x87, 0x38, 0x19, 0x50, 0x41, 0x66, 0x6D, 0x8B, 0x9B, 0x41, 0xEB, 0x2B, 0x15, 0x64, 0xC7, 0x51, 0x8D, 0x90, 0xFD, 0xB4, 0xBE, 0x5A, 0x86, 0x26, 0x0D, 0x0B, 0xB4, 0x9A, 0x0F, 0x4F, 0x6B, 0x9E, 0x57, 0x71, 0x50, 0xEA, 0x9A, 0x29, 0xF7, 0xE5, 0xAA, 0xBE, 0x86, 0xE9, 0x1A, 0xD2, 0x20, 0x0A, 0xE8, 0xAC, 0xB1, 0x55, 0x03, 0xBE, 0x53, 0x91, 0xC4, 0x3A, 0xDD, 0x38, 0x89, 0x45, 0x83, 0x14, 0x50, 0x0A, 0xC6, 0xEE, 0x5C, 0x45, 0x06, 0xE8, 0xE6, 0x29, 0x2C, 0x80, 0x28, 0x50, 0x62, 0x02, 0xFC, 0x90, 0x04, 0xA1, 0x24, 0x41, 0x1E, 0xD2, 0xA0, 0x0A, 0xF4, 0x17, 0xB3, 0x79, 0xC4, 0x30, 0x9D, 0xC4, 0x51, 0x39, 0x8F, 0x35, 0xA1, 0xFD, 0xA9, 0x79, 0x4D, 0x1B, 0x73, 0xF0, 0xB4, 0x90, 0x97, 0x0B, 0xC7, 0x67, 0xA7, 0xEB, 0xC7, 0x98, 0x17, 0x31, 0xC6, 0x6C, 0x95, 0x49, 0xE9, 0xB9, 0xB3, 0x13, 0xAD, 0xC0, 0xF7, 0x80, 0x8D, 0x5A, 0x33, 0x0A, 0x0A, 0xB8, 0xDD, 0x68, 0x13, 0x27, 0x71, 0x63, 0x05, 0x5A, 0x18, 0xC8, 0xD5, 0xA6, 0x50, 0x3B, 0x66, 0x09, 0xB4, 0x80, 0x11, 0x6F, 0x10, 0x4E, 0x0A, 0xA4, 0x10, 0x27, 0x05, 0x2A, 0xC1, 0xB7, 0xDD, 0xF8, 0xCA, 0x95, 0x30, 0x67, 0xC9, 0x5F, 0xB7, 0xC4, 0xC7, 0x8E, 0x87, 0x4E, 0x15, 0x7B, 0x92, 0x13, 0x6C, 0xD1, 0xF5, 0x92, 0xFF, 0xA0, 0xA6, 0x83, 0xAE, 0xCE, 0x9F, 0x0D, 0x3D, 0x12, 0xFC, 0x56, 0x3B, 0x33, 0x89, 0x0D, 0x74, 0xC0, 0xD9, 0x2D, 0x51, 0xBD, 0xBA, 0xFD, 0x1D, 0xF4, 0x01, 0x25, 0x20, 0x03, 0x44, 0x91, 0x20, 0x49, 0x02, 0xA4, 0x80, 0x0A, 0xC6, 0xC7, 0x81, 0x36, 0xF0, 0x00, 0xD1, 0x77, 0x0C, 0xCA, 0x40, 0x2B, 0x98, 0x8F, 0xEF, 0x0B, 0x34, 0xD2, 0x40, 0x84, 0x34, 0xD0, 0x02, 0x56, 0x5F, 0xD0, 0xE4, 0x1A, 0x95, 0x6C, 0x76, 0x77, 0xF4, 0xA8, 0x24, 0x9E, 0x87, 0x28, 0x94, 0x6C, 0xC5, 0x20, 0x27, 0xE2, 0xAB, 0x48, 0xA8, 0x56, 0x2B, 0x6C, 0x5F, 0xE5, 0xF9, 0xF9, 0xE6, 0x87, 0x82, 0x2F, 0x23, 0xD4, 0x01, 0xBC, 0x81, 0xAC, 0x69, 0x2F, 0xB5, 0x76, 0x91, 0xA1, 0xC0, 0x85, 0x1C, 0x62, 0x24, 0x41, 0xD4, 0x9D, 0xE7, 0x0F, 0x86, 0x5E, 0x14, 0x84, 0x80, 0x5A, 0x2D, 0x4E, 0x93, 0x0C, 0x6F, 0x01, 0x09, 0xA0, 0x46, 0x1A, 0x98, 0x93, 0x5E, 0x4F, 0x6E, 0x81, 0x3A, 0x5F, 0xD0, 0xF4, 0x11, 0x7F, 0xCD, 0xFB, 0xB1, 0x7E, 0xC7, 0xE2, 0x0B, 0x1A, 0x52, 0x42, 0x1E, 0xF8, 0xF1, 0x91, 0xF8, 0x30, 0xA8, 0xFF, 0x21, 0x02, 0xB9, 0x47, 0xDD, 0xED, 0x3C, 0xAA, 0xDF, 0xC6, 0x86, 0xDF, 0xC8, 0xB3, 0x92, 0xC7, 0x44, 0x98, 0xBA, 0x8E, 0x06, 0xE7, 0x4B, 0xC6, 0x06, 0x90, 0xBE, 0xBB, 0xB6, 0xB2, 0xD6, 0xB4, 0xCC, 0x21, 0x4A, 0x56, 0xBA, 0x57, 0xC8, 0xF7, 0x44, 0x7D, 0xC9, 0x71, 0x15, 0x90, 0x0D, 0x26, 0x56, 0xE6, 0x7B, 0x80, 0x1D, 0xE0, 0x06, 0x42, 0x88, 0x92, 0x26, 0x05, 0x52, 0x40, 0x91, 0xB6, 0x2F, 0x68, 0xF6, 0xB8, 0xBF, 0x15, 0xF1, 0x87, 0x31, 0xD4, 0x23, 0xE4, 0x19, 0xF4, 0x59, 0x64, 0xE1, 0xD8, 0xE0, 0x89, 0xB5, 0xC4, 0x94, 0x97, 0x2B, 0xC2, 0x0A, 0xDB, 0xBD, 0x49, 0xAB, 0x7B, 0xA0, 0xD0, 0x39, 0x2B, 0xCD, 0xCC, 0xCF, 0x41, 0x19, 0xB0, 0xBA, 0xD7, 0x81, 0x1A, 0x12, 0x60, 0x56, 0x76, 0xEC, 0xD4, 0xFD, 0x43, 0xA2, 0x76, 0xAE, 0x04, 0x9C, 0x02, 0x76, 0x40, 0xCD, 0xFD, 0xD3, 0x5D, 0x57, 0x22, 0xD3, 0x40, 0x1D, 0xB0, 0xC7, 0x44, 0x9D, 0x24, 0xB5, 0x50, 0x22, 0xA4, 0x81, 0xD6, 0x17, 0x34, 0x7F, 0xF4, 0xBC, 0x95, 0xFA, 0x44, 0xBE, 0x52, 0x7A, 0x8D, 0x61, 0x6A, 0x7E, 0x29, 0xE6, 0x81, 0x63, 0x5C, 0x36, 0x9E, 0x12, 0xDB, 0xF3, 0x0B, 0xF7, 0xD5, 0x40, 0x37, 0xBF, 0xE0, 0x9D, 0x72, 0xFF, 0xBE, 0xD2, 0x02, 0x36, 0x2B, 0xF3, 0x2A, 0x6B, 0x27, 0x17, 0xA0, 0x48, 0x10, 0x4B, 0x72, 0x7E, 0x31, 0x77, 0x12, 0x2A, 0xF2, 0xCE, 0xFB, 0x66, 0xAF, 0xDB, 0xC3, 0x00, 0x42, 0xB4, 0xD6, 0x65, 0x40, 0x92, 0x01, 0xE1, 0x24, 0xC8, 0x80, 0x0C, 0x50, 0xF3, 0x45, 0xED, 0xEF, 0x13, 0x19, 0xF2, 0x46, 0xCF, 0x95, 0x4A, 0x2B, 0x2D, 0x5C, 0x99, 0x2A, 0x2F, 0xD4, 0x83, 0x55, 0xCA, 0x11, 0x57, 0x0A, 0x2D, 0x6C, 0xD7, 0x25, 0x7F, 0x5B, 0xF2, 0xEE, 0x75, 0x1F, 0x27, 0xE0, 0x9C, 0xB5, 0xB9, 0xD5, 0xBB, 0x19, 0xA0, 0x57, 0x71, 0x75, 0x10, 0x6F, 0x72, 0x80, 0x25, 0x19, 0xE0, 0x87, 0x0C, 0xA8, 0x55, 0x7F, 0xD5, 0xDF, 0x71, 0xC4, 0xF7, 0x01, 0x7D, 0xA5, 0x2A, 0xC8, 0xEF, 0x2D, 0x59, 0x80, 0x39, 0x24, 0xD7, 0xC5, 0xA8, 0x7D, 0x51, 0x4B, 0xEC, 0x82, 0xA3, 0x9E, 0x92, 0x57, 0x23, 0xAF, 0xA1, 0x42, 0xBC, 0x59, 0x2F, 0x09, 0xC1, 0x49, 0x45, 0x0A, 0xE7, 0xB9, 0xAA, 0x2B, 0x6A, 0x36, 0x74, 0xEC, 0xDC, 0x63, 0x11, 0x54, 0x41, 0x93, 0x24, 0xCA, 0x38, 0x55, 0xAD, 0x2A, 0x96, 0xFC, 0x95, 0x34, 0x1A, 0x20, 0xB2, 0x0A, 0x64, 0x94, 0x38, 0x59, 0xC5, 0x79, 0xF1, 0xED, 0xE2, 0xFB, 0xBE, 0x19, 0x1D, 0xBF, 0x33, 0xDD, 0x7B, 0xF7, 0x97, 0x01, 0x8A, 0xF4, 0x21, 0x09, 0xC6, 0xC1, 0x9E, 0xC6, 0x2B, 0x07, 0xA8, 0x7C, 0x51, 0xAB, 0x5D, 0x2A, 0xFA, 0xF8, 0xBC, 0x15, 0xF2, 0x34, 0xBA, 0x39, 0x11, 0x35, 0x31, 0xC4, 0x43, 0x0A, 0xE5, 0x51, 0xE5, 0xD7, 0x14, 0x43, 0xAF, 0x7D, 0xA7, 0xB2, 0x0B, 0x51, 0x3C, 0x81, 0xE6, 0x9A, 0xE4, 0xA8, 0x40, 0xE2, 0x6F, 0xCE, 0xE3, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x8C, 0xFD, 0x6D, 0x92, 0x25, 0x3B, 0xCA, 0xB4, 0x8D, 0x4E, 0xA5, 0x46, 0x70, 0x4C, 0x7C, 0xC3, 0xFC, 0x27, 0x76, 0x3A, 0x1C, 0xA9, 0x13, 0xEC, 0x5E, 0xD6, 0xCF, 0xFB, 0xEB, 0xB2, 0x95, 0x3B, 0x77, 0x65, 0x25, 0xA5, 0x50, 0x48, 0xE0, 0x38, 0x63, 0x8E, 0x58, 0x00, 0xDA, 0xE0, 0xFC, 0x65, 0xF7, 0x12, 0xCB, 0xC1, 0xDC, 0x80, 0x7A, 0x57, 0x91, 0x79, 0x72, 0xCB, 0xD5, 0x40, 0xEC, 0x0C, 0x44, 0x02, 0x25, 0xF3, 0x9C, 0x42, 0xDC, 0x48, 0x80, 0x15, 0x10, 0x6E, 0x14, 0xA0, 0x0D, 0x7B, 0xFB, 0x5A, 0x8E, 0x76, 0x6B, 0x3F, 0xF6, 0x85, 0xCB, 0x0C, 0x1E, 0x39, 0x2E, 0x82, 0x7B, 0xA2, 0xB5, 0x03, 0x07, 0x4B, 0xFB, 0x18, 0x2E, 0x07, 0x8E, 0xB3, 0x46, 0x05, 0x97, 0xFE, 0xD0, 0xE5, 0x5B, 0xEC, 0x0C, 0xD1, 0x1A, 0x10, 0x60, 0x0D, 0x5D, 0xEE, 0x36, 0xB2, 0x7A, 0xE8, 0x1A, 0x19, 0xF3, 0x53, 0xC9, 0xEC, 0x57, 0xB4, 0x67, 0x01, 0x37, 0x2F, 0xE7, 0xA1, 0x53, 0xE1, 0xCE, 0x2B, 0xFB, 0xAF, 0x0A, 0xD8, 0xAE, 0xAD, 0xF0, 0xAF, 0xD6, 0x76, 0x5E, 0xCB, 0x30, 0x6F, 0xD0, 0xF6, 0x10, 0x10, 0xF4, 0xC7, 0x0A, 0x2B, 0xB6, 0x35, 0x3C, 0x99, 0x2E, 0x61, 0xD0, 0x08, 0x12, 0x23, 0x11, 0xDD, 0x15, 0x02, 0xFE, 0x3D, 0x74, 0xC6, 0x97, 0xB2, 0x9A, 0x00, 0x73, 0x40, 0xCE, 0xAF, 0xE9, 0x16, 0x0D, 0xAD, 0x1F, 0x6D, 0x6F, 0xBC, 0x27, 0xA1, 0x53, 0x83, 0x1B, 0xCB, 0x76, 0xDC, 0x87, 0x42, 0x12, 0x2B, 0x7B, 0xD8, 0x80, 0x90, 0xAF, 0x54, 0x6D, 0xC3, 0x1A, 0x7E, 0xFE, 0x87, 0x56, 0x81, 0x1B, 0xB9, 0xB4, 0x0A, 0xD6, 0x41, 0x23, 0x5C, 0x9E, 0x4A, 0x6B, 0x0C, 0x6A, 0x8B, 0xB2, 0xEF, 0x0D, 0x1A, 0x9D, 0x50, 0x93, 0x68, 0x45, 0x25, 0x13, 0xFE, 0x7E, 0x95, 0x3F, 0xF4, 0x8F, 0x7B, 0x8C, 0x96, 0xFA, 0xAF, 0x21, 0xB1, 0x3A, 0x05, 0x9A, 0x9E, 0x3F, 0xBA, 0xBD, 0xB6, 0xE5, 0xAC, 0x28, 0x40, 0xF1, 0x2B, 0x68, 0x02, 0xF0, 0x01, 0xDE, 0xBB, 0x63, 0xB5, 0xFC, 0x7A, 0xAC, 0x41, 0x1F, 0x39, 0x43, 0xC8, 0xB1, 0x0E, 0xCD, 0xB5, 0xD2, 0x40, 0xDC, 0xA0, 0xF5, 0x45, 0x03, 0x42, 0x6E, 0xD0, 0x50, 0x84, 0xFA, 0xB6, 0xAA, 0x74, 0x74, 0x74, 0x3A, 0xA1, 0xFB, 0x2E, 0x20, 0xE3, 0xEB, 0x9F, 0xA3, 0x7F, 0xB2, 0x57, 0x4D, 0xAD, 0x95, 0x85, 0x5C, 0xB6, 0xC9, 0xBC, 0xC6, 0x60, 0xE6, 0x4E, 0x07, 0xD1, 0x92, 0x94, 0x9D, 0x3D, 0x47, 0xB6, 0xA1, 0x7B, 0x02, 0xD2, 0x1A, 0xE2, 0xA6, 0x8D, 0x68, 0x2C, 0xCD, 0xA9, 0x0F, 0x53, 0x2E, 0x7B, 0x47, 0x0A, 0x92, 0x79, 0x6C, 0x48, 0x9E, 0xB7, 0x02, 0x22, 0x80, 0x73, 0xED, 0x5B, 0xD4, 0x90, 0x05, 0x03, 0x8C, 0x81, 0xE0, 0x1B, 0x34, 0xDE, 0x8F, 0xE7, 0x70, 0xC8, 0x11, 0xBD, 0x59, 0x48, 0x47, 0x76, 0x94, 0x0A, 0xD9, 0x21, 0xE1, 0x71, 0x69, 0x37, 0xDE, 0xD9, 0x21, 0xA9, 0x59, 0xD3, 0x50, 0x9A, 0x7A, 0x3C, 0xF7, 0x99, 0x7F, 0xF4, 0x58, 0xE6, 0x08, 0xB1, 0xCC, 0x97, 0x56, 0x3F, 0x2A, 0xE9, 0xAF, 0x59, 0xF3, 0x3A, 0x1E, 0xE1, 0x21, 0xA4, 0x1C, 0xD6, 0x1C, 0x45, 0xCB, 0x1D, 0xD1, 0xD6, 0x09, 0x97, 0x1A, 0x05, 0xD4, 0x3E, 0xD3, 0xFA, 0x0C, 0x3A, 0x53, 0x43, 0x01, 0xD1, 0x1B, 0x35, 0xF9, 0xA7, 0x0C, 0xDF, 0xC7, 0xF7, 0xFE, 0xFC, 0x2E, 0xD8, 0x8C, 0xA8, 0xE1, 0x15, 0x70, 0xD4, 0x18, 0x0F, 0x4D, 0x64, 0x3F, 0x81, 0x68, 0xBC, 0x93, 0xDF, 0xE3, 0xAF, 0x5F, 0xBE, 0x75, 0x8F, 0xED, 0x17, 0xC0, 0x1A, 0x7C, 0xE6, 0x96, 0xEE, 0xBE, 0xDD, 0xDB, 0x57, 0xB8, 0x0C, 0x38, 0xFC, 0xBF, 0xE7, 0xA6, 0x2F, 0x43, 0xE0, 0xF4, 0x59, 0x2F, 0x08, 0x59, 0xE5, 0x50, 0xFA, 0x55, 0x94, 0x6B, 0x08, 0x37, 0xA4, 0xA1, 0x0D, 0x5B, 0x9F, 0x0A, 0xB0, 0x17, 0x38, 0x1D, 0xE3, 0x66, 0x28, 0xE9, 0x13, 0x35, 0x39, 0x19, 0xC4, 0xF0, 0xED, 0x9A, 0x1F, 0x6E, 0xC8, 0x98, 0x47, 0x21, 0x9F, 0x1D, 0xD6, 0xA5, 0xA8, 0x7D, 0x9F, 0xA2, 0x1B, 0xB0, 0xA9, 0xEC, 0x4A, 0x02, 0x6C, 0x65, 0xD2, 0x34, 0x66, 0x65, 0x4A, 0x75, 0xD9, 0xAE, 0x2A, 0xE0, 0x0D, 0x49, 0x80, 0xBC, 0x41, 0x0D, 0x5F, 0x35, 0xF6, 0xF8, 0x8B, 0x81, 0x3E, 0xC9, 0x03, 0xDF, 0x07, 0xD0, 0x80, 0xE4, 0x29, 0xE2, 0xE2, 0x00, 0x54, 0x00, 0x33, 0xC0, 0xB9, 0x51, 0x40, 0x38, 0x90, 0x02, 0x94, 0x2E, 0x2D, 0x57, 0xDE, 0xA0, 0xD9, 0x77, 0x85, 0xA5, 0x53, 0xF0, 0x65, 0x22, 0xFA, 0xC4, 0x1C, 0xC9, 0xF5, 0x09, 0x21, 0xC5, 0x21, 0x84, 0x4C, 0xC5, 0xA1, 0x4D, 0x28, 0x5A, 0x43, 0xC4, 0xFD, 0x6C, 0xEE, 0x9E, 0xA8, 0x55, 0xC7, 0x93, 0x46, 0x29, 0x90, 0xEB, 0xED, 0x75, 0xB6, 0x57, 0xAD, 0x2C, 0xD9, 0x0F, 0x5D, 0x4C, 0x11, 0x77, 0xEE, 0x54, 0x6F, 0xCD, 0x2F, 0x96, 0xFD, 0x95, 0xC5, 0x15, 0xF8, 0xB3, 0x01, 0x39, 0x0A, 0x48, 0x02, 0xE6, 0x80, 0x07, 0x10, 0x09, 0x64, 0xAD, 0x1C, 0xC8, 0x69, 0x58, 0x23, 0x57, 0x46, 0x84, 0x00, 0x79, 0x2B, 0xCD, 0xFF, 0xD1, 0x77, 0x3E, 0x72, 0x58, 0x02, 0x57, 0x8D, 0x74, 0x47, 0x85, 0xE3, 0xEE, 0x98, 0x8A, 0xB7, 0xB2, 0x53, 0xAF, 0x97, 0x9A, 0xCA, 0x84, 0x65, 0xC1, 0x22, 0xEF, 0xDA, 0xCB, 0x3C, 0xF7, 0x50, 0x91, 0xF9, 0x37, 0xA5, 0xB5, 0xD1, 0x9C, 0xED, 0x05, 0x4C, 0xC0, 0xF1, 0xD5, 0x43, 0x20, 0x3F, 0xE4, 0x03, 0x46, 0xD3, 0x48, 0x42, 0xF8, 0xAE, 0xE9, 0x99, 0x87, 0xB4, 0x98, 0x69, 0x33, 0x3E, 0x80, 0x18, 0xA0, 0x35, 0xD7, 0x58, 0x9C, 0x86, 0x36, 0x12, 0x48, 0x69, 0x04, 0x50, 0xD2, 0x4B, 0x2D, 0x6E, 0xD4, 0x62, 0xBF, 0x0E, 0xC6, 0xD3, 0xCA, 0xC7, 0x5A, 0x44, 0xD2, 0x7A, 0x8E, 0x36, 0x1F, 0x3D, 0x9E, 0xE3, 0xEA, 0xAE, 0xBA, 0xDE, 0xA1, 0x5E, 0xF3, 0xC6, 0x16, 0x09, 0xA8, 0x4E, 0x31, 0xCA, 0xDD, 0x56, 0x64, 0x49, 0x05, 0xF4, 0xAC, 0x59, 0xB2, 0xB6, 0xE6, 0x1C, 0x79, 0xE3, 0xFC, 0x30, 0x2E, 0x79, 0xCD, 0x6A, 0xF9, 0x97, 0x02, 0xF6, 0x77, 0xDA, 0x17, 0x9D, 0xD9, 0x45, 0xA5, 0x15, 0xA6, 0x02, 0x8A, 0x3B, 0x14, 0x17, 0x5B, 0x41, 0xD9, 0x10, 0x01, 0xD4, 0x00, 0xA3, 0x1B, 0xB4, 0x5C, 0x41, 0xC3, 0x05, 0x9E, 0x0F, 0x54, 0x7D, 0xA4, 0x0E, 0x15, 0xAF, 0x4B, 0x1F, 0x1C, 0xB3, 0xDF, 0xA1, 0x3E, 0xDF, 0xA1, 0xB6, 0xF4, 0x1C, 0x7B, 0xF6, 0x00, 0x37, 0x8E, 0x2E, 0x5B, 0x55, 0x9B, 0xF5, 0x39, 0x59, 0x56, 0x6E, 0x47, 0xD6, 0x98, 0x01, 0x03, 0x24, 0x1B, 0xF4, 0xCB, 0x3A, 0xFB, 0x96, 0x7D, 0x46, 0x85, 0xDC, 0xDF, 0xAE, 0x44, 0x05, 0xD4, 0xCD, 0xA5, 0x29, 0x60, 0x06, 0x04, 0x03, 0xE9, 0x40, 0x71, 0x23, 0x5B, 0x22, 0x7A, 0x0C, 0x20, 0x01, 0x98, 0x00, 0x39, 0x80, 0x52, 0x07, 0xAD, 0xF6, 0x12, 0x1B, 0xA6, 0xF0, 0x22, 0x81, 0x57, 0x68, 0x15, 0xAE, 0x93, 0x9C, 0x38, 0xA8, 0x9A, 0x0E, 0xFD, 0xA8, 0x51, 0xB3, 0xEA, 0xAC, 0x7E, 0x95, 0x5F, 0xCD, 0x99, 0xB2, 0x0D, 0x09, 0x67, 0x7E, 0x64, 0x3C, 0xA6, 0xC3, 0x03, 0x28, 0x73, 0xBA, 0xD4, 0xC9, 0x3D, 0xE7, 0x9F, 0xF9, 0x76, 0x66, 0x5D, 0x33, 0x1B, 0x1B, 0x46, 0xBF, 0x3C, 0xD6, 0xA2, 0xB1, 0xEB, 0xF4, 0xF5, 0xD3, 0x1E, 0x01, 0xB0, 0xC6, 0x36, 0x9F, 0x88, 0xBB, 0xD4, 0x18, 0x56, 0x99, 0x92, 0xBE, 0xA2, 0x86, 0xB6, 0x45, 0x39, 0x77, 0x3A, 0xA0, 0xF4, 0xFD, 0xCE, 0xB1, 0x0C, 0xBA, 0xC6, 0xE2, 0x7B, 0x57, 0xDB, 0x23, 0x3C, 0x75, 0x75, 0x33, 0xE8, 0xEE, 0x5D, 0xAC, 0xED, 0x2F, 0x38, 0x8F, 0xF4, 0xBB, 0xD2, 0x96, 0xAB, 0x83, 0x9A, 0x97, 0x76, 0x80, 0x75, 0x56, 0x99, 0x43, 0x96, 0xEA, 0x23, 0x1A, 0xB4, 0x20, 0x8D, 0x75, 0xC2, 0x8E, 0x8B, 0x68, 0xD8, 0xAF, 0xAE, 0xDC, 0x5A, 0xBA, 0xAE, 0xBA, 0x41, 0x23, 0xAC, 0x2A, 0xA2, 0x15, 0x34, 0x68, 0x3A, 0xF2, 0x14, 0x4E, 0x02, 0xE5, 0x38, 0xB6, 0x56, 0x3F, 0x42, 0xF6, 0xB3, 0x33, 0x8A, 0x80, 0xA2, 0xDD, 0x56, 0xFF, 0xCB, 0x1E, 0x61, 0xCF, 0x81, 0x6F, 0xC4, 0x0D, 0x0C, 0xDF, 0xC3, 0xCA, 0x4C, 0x53, 0x1C, 0x9E, 0x46, 0x88, 0x46, 0xB3, 0x77, 0x87, 0x72, 0x96, 0x43, 0xC3, 0x57, 0xDF, 0xBF, 0x2F, 0xEC, 0xB9, 0xA7, 0x0E, 0x44, 0xAD, 0xC9, 0x24, 0xD9, 0xB0, 0x2D, 0x86, 0x5B, 0xEF, 0xEB, 0xBC, 0x41, 0x63, 0xCC, 0x1E, 0x53, 0xDE, 0x41, 0x43, 0x3F, 0xB6, 0x47, 0xA7, 0x16, 0x19, 0x49, 0x3A, 0x56, 0x08, 0x2C, 0x96, 0x0B, 0xA4, 0xC6, 0x0A, 0x5A, 0xD6, 0xBA, 0x82, 0x36, 0x74, 0xDD, 0xDB, 0xF7, 0x78, 0x7E, 0x66, 0x20, 0x9F, 0x6A, 0x60, 0x1E, 0xD0, 0xBD, 0x00, 0x5B, 0x1E, 0x62, 0x7A, 0x66, 0x35, 0x46, 0xD6, 0xC5, 0xF2, 0xF8, 0xB6, 0xD4, 0x6D, 0x50, 0x43, 0x1A, 0xBE, 0x0C, 0xD0, 0x12, 0x60, 0x5F, 0x10, 0x80, 0xAA, 0xB1, 0xBE, 0x28, 0x6F, 0xA5, 0xA1, 0x5C, 0xA0, 0x8E, 0x1A, 0x0B, 0x47, 0x8E, 0xBE, 0xC5, 0xC3, 0x8C, 0x13, 0xA8, 0x7D, 0xB0, 0x20, 0x41, 0x58, 0x7C, 0x8D, 0x6F, 0xF3, 0x2D, 0x21, 0xDD, 0x4F, 0x46, 0xCD, 0x4F, 0x9C, 0xEB, 0xF1, 0xB4, 0xF9, 0x3C, 0x53, 0x4D, 0x75, 0x9B, 0xCB, 0x1A, 0x95, 0xD7, 0x70, 0x07, 0x6C, 0x37, 0xE1, 0x08, 0xA0, 0xAB, 0xA6, 0x9F, 0xB1, 0x3A, 0xC1, 0xF4, 0x87, 0x95, 0x05, 0xF3, 0x4A, 0xEF, 0xD2, 0x0F, 0x48, 0x35, 0x72, 0x89, 0x9A, 0xDF, 0x4A, 0x6B, 0xF5, 0x90, 0xFC, 0x19, 0x40, 0x1E, 0x1C, 0x36, 0x32, 0xBE, 0x6D, 0x0F, 0x92, 0x25, 0x14, 0x8C, 0xBD, 0x2A, 0xF1, 0xE4, 0x45, 0x0D, 0xFB, 0x64, 0x3F, 0xCB, 0x6F, 0x94, 0x74, 0x76, 0xE9, 0xB2, 0x37, 0x0E, 0x70, 0xE4, 0xD7, 0xB8, 0x85, 0x03, 0x94, 0x4C, 0x8B, 0x21, 0xF2, 0xF5, 0xB7, 0xD7, 0xA9, 0x86, 0xAF, 0x95, 0x3D, 0xD7, 0x6A, 0x10, 0x20, 0xD1, 0xB0, 0x05, 0x9F, 0x51, 0xD6, 0xB3, 0x8E, 0x7B, 0xB6, 0x9B, 0x98, 0x17, 0x64, 0x22, 0xA8, 0xE1, 0x37, 0x68, 0xF6, 0x4F, 0xD0, 0x91, 0xF3, 0x4F, 0xCE, 0x7F, 0x80, 0xD4, 0x90, 0xBB, 0xA2, 0x30, 0xA5, 0x85, 0x9A, 0x88, 0x76, 0xA6, 0x4E, 0x7A, 0xC3, 0xB0, 0xCE, 0x7B, 0xFF, 0x6E, 0x8E, 0x22, 0x9A, 0x72, 0x4C, 0x89, 0x86, 0x02, 0xE4, 0xEB, 0xA8, 0xEF, 0x8D, 0xFA, 0x5B, 0x32, 0xFA, 0x34, 0xC1, 0xB6, 0x2A, 0x5A, 0xD5, 0x08, 0x5F, 0xE3, 0xB9, 0xAA, 0x61, 0x80, 0x1D, 0x20, 0x57, 0x0D, 0x94, 0x03, 0x90, 0x04, 0xD4, 0x01, 0x13, 0xC0, 0x15, 0x88, 0x02, 0xEA, 0x4C, 0x64, 0x35, 0x72, 0xA2, 0x5E, 0xB5, 0xF4, 0x46, 0xCD, 0x11, 0xAE, 0x8A, 0x7F, 0xFC, 0xFD, 0x0B, 0xFE, 0x3D, 0x9F, 0x5F, 0x32, 0xDA, 0x91, 0x3B, 0xC8, 0xEC, 0xB5, 0xCC, 0xC8, 0x2B, 0x58, 0x6C, 0x97, 0xA1, 0x3D, 0xD3, 0x7F, 0x65, 0x6B, 0x95, 0xD7, 0x76, 0xB6, 0x8C, 0xA0, 0x53, 0x1B, 0x36, 0x73, 0x4B, 0xC4, 0xB3, 0x58, 0x67, 0xD9, 0x08, 0x40, 0x57, 0x17, 0x00, 0x5F, 0xAC, 0xCE, 0x29, 0x93, 0x55, 0x39, 0x69, 0x64, 0x00, 0xC5, 0x3F, 0x9C, 0x4B, 0x28, 0x01, 0xF6, 0x46, 0x00, 0x72, 0x96, 0xF0, 0x9B, 0x96, 0x25, 0xCB, 0x8B, 0x5A, 0xA0, 0x21, 0x4A, 0xCE, 0x28, 0x50, 0xA5, 0x22, 0xFD, 0x4D, 0x56, 0x7D, 0xB4, 0x37, 0xDC, 0x8E, 0xA8, 0x6B, 0x4E, 0xEE, 0x2F, 0x0B, 0xF9, 0x31, 0x57, 0xC7, 0xE7, 0x9E, 0xB5, 0x90, 0x05, 0xD4, 0xBA, 0x14, 0xF8, 0x92, 0xBD, 0xAA, 0xCC, 0x1C, 0xB5, 0xE6, 0x54, 0x66, 0x78, 0x4D, 0x58, 0x02, 0xBA, 0x26, 0x32, 0x52, 0x34, 0xA4, 0xC1, 0x0B, 0xD2, 0xF0, 0x46, 0xAD, 0x54, 0x8F, 0x00, 0x7A, 0x91, 0x80, 0xD1, 0xAF, 0x72, 0x5E, 0x00, 0xEE, 0x40, 0xD8, 0x0D, 0x5A, 0x7E, 0x4E, 0xAD, 0x44, 0xF5, 0x82, 0xE6, 0xDF, 0xC3, 0xA8, 0x68, 0xF5, 0x11, 0xC6, 0xA3, 0x90, 0x8A, 0xBF, 0x26, 0x12, 0x1E, 0x96, 0x96, 0x63, 0x57, 0x33, 0xDA, 0xD9, 0xC8, 0xB8, 0x17, 0xC7, 0x1F, 0x4A, 0x27, 0xFE, 0x55, 0xF3, 0xED, 0x4F, 0xEF, 0x06, 0x96, 0x35, 0x6F, 0xC8, 0xC1, 0x80, 0xC5, 0xAC, 0xC8, 0x7B, 0x83, 0x62, 0xE6, 0xF0, 0x7D, 0x65, 0xFB, 0xCD, 0x1B, 0xD2, 0xD0, 0x5F, 0xCA, 0xA3, 0x46, 0x2A, 0x50, 0xD2, 0xE0, 0xF9, 0x29, 0x6B, 0xA2, 0xEE, 0x8F, 0xD5, 0x1B, 0xB4, 0xFA, 0xF2, 0x6A, 0x9E, 0xFB, 0xD0, 0xD1, 0x42, 0xD2, 0x43, 0x78, 0x15, 0x24, 0xA3, 0x38, 0xCB, 0x8E, 0xE7, 0xC9, 0xAD, 0xF3, 0x69, 0xBB, 0x58, 0xE0, 0x40, 0x9D, 0x79, 0xFC, 0x57, 0x5B, 0x2D, 0x18, 0xB1, 0xEA, 0x26, 0xA7, 0x41, 0xB3, 0x0B, 0x81, 0x96, 0x5A, 0xC8, 0xB3, 0x61, 0x80, 0x32, 0x40, 0xBC, 0xFA, 0x95, 0x05, 0x30, 0xFD, 0xDD, 0xE7, 0x04, 0xF8, 0xBE, 0xEB, 0x37, 0x6A, 0x99, 0xB6, 0xEA, 0x2F, 0x48, 0xC3, 0x80, 0x64, 0xE0, 0x9D, 0xD4, 0xE4, 0x7C, 0x6A, 0xC8, 0x74, 0xF9, 0x1A, 0xF2, 0xCE, 0x9F, 0xA7, 0x7E, 0xD8, 0xF5, 0xEB, 0xB6, 0x5B, 0x6E, 0x27, 0xC7, 0xBD, 0xEA, 0x70, 0x57, 0x58, 0xF6, 0xE3, 0xB9, 0x4F, 0xFA, 0xE6, 0x4B, 0xFB, 0xB9, 0x52, 0xDC, 0x64, 0x3F, 0x66, 0xCB, 0xBF, 0x01, 0x27, 0x7E, 0xA3, 0xF5, 0x63, 0x0A, 0xA3, 0x39, 0x40, 0xB9, 0x3A, 0xDB, 0x2F, 0x68, 0x8D, 0xA6, 0x38, 0x0D, 0x69, 0x24, 0x50, 0xB4, 0xF4, 0xF2, 0xB2, 0xA6, 0x82, 0xFB, 0x82, 0x02, 0x14, 0x3F, 0x4E, 0x6A, 0x7A, 0x6E, 0xD0, 0xDE, 0x65, 0x00, 0x62, 0x0F, 0x15, 0x3C, 0xAC, 0xEE, 0xDF, 0xFB, 0x33, 0x4D, 0x5A, 0x32, 0x52, 0xFF, 0x81, 0xA9, 0x21, 0x59, 0x24, 0x64, 0xAD, 0x24, 0xDD, 0xA6, 0xA3, 0x34, 0x8D, 0x94, 0x89, 0xA6, 0x18, 0x47, 0x1B, 0x7C, 0xD3, 0xF5, 0x09, 0x24, 0x03, 0xB1, 0x24, 0x3D, 0xD9, 0xD7, 0xEC, 0xE4, 0x95, 0x6A, 0x38, 0x0D, 0x69, 0x24, 0xA0, 0x04, 0x98, 0x02, 0xF1, 0x1A, 0x32, 0x15, 0xD0, 0x86, 0x1B, 0x90, 0xD4, 0x28, 0xA0, 0xF2, 0x7C, 0xB6, 0xAA, 0xA7, 0x41, 0x01, 0xB0, 0x34, 0x12, 0x10, 0x05, 0x94, 0x1B, 0x05, 0x98, 0x03, 0x9E, 0x1D, 0x34, 0x86, 0x2F, 0x61, 0xEE, 0x7C, 0x07, 0x1A, 0x57, 0x32, 0xB0, 0xC4, 0x38, 0x15, 0x91, 0x0F, 0xC6, 0xB5, 0xD8, 0x63, 0x8A, 0xE3, 0x65, 0xA7, 0xBD, 0x43, 0xD6, 0xBD, 0x3C, 0x57, 0xA2, 0x3B, 0x96, 0x67, 0x4E, 0x35, 0x1C, 0x98, 0x35, 0x77, 0x1C, 0x9D, 0xC6, 0xBE, 0xC7, 0xD4, 0xF0, 0x46, 0x01, 0x42, 0x8D, 0xFA, 0xA5, 0x3D, 0xD6, 0x55, 0xA9, 0xF3, 0x55, 0xA9, 0x5B, 0x37, 0xDB, 0xB2, 0xD5, 0x4E, 0xAC, 0x00, 0x71, 0xC3, 0x00, 0x96, 0xF5, 0x32, 0x7D, 0xCF, 0xA7, 0x74, 0xB8, 0x90, 0x03, 0x16, 0xCB, 0xEF, 0xF5, 0x79, 0x94, 0xBE, 0x0A, 0xE8, 0x91, 0xC0, 0xFD, 0x44, 0xBD, 0x11, 0xFD, 0xCC, 0xD1, 0x94, 0xF8, 0xF9, 0xEE, 0x91, 0xDA, 0xD3, 0x6B, 0xCD, 0x1B, 0xB4, 0x44, 0xC8, 0xB5, 0x24, 0xDE, 0x0A, 0x94, 0x2E, 0x77, 0x8A, 0x02, 0xB2, 0x7E, 0x5D, 0x82, 0x4E, 0x43, 0xD6, 0x59, 0x3F, 0xB7, 0x7E, 0x7B, 0x05, 0x8F, 0x76, 0x57, 0xFB, 0xEE, 0x9B, 0x6C, 0x68, 0x23, 0x67, 0xF0, 0x4E, 0xFD, 0x08, 0x9E, 0xF0, 0x8D, 0x9A, 0xBE, 0xA8, 0x89, 0x7F, 0x87, 0x59, 0xF8, 0x2A, 0x9F, 0xF8, 0x2E, 0xED, 0x5A, 0xF9, 0xBD, 0x38, 0x4B, 0x19, 0xC5, 0xE7, 0xB0, 0xCE, 0x0A, 0xC8, 0xCC, 0x0F, 0xF1, 0xB6, 0x4C, 0xE0, 0x95, 0xCB, 0x0E, 0x9A, 0xA7, 0x6E, 0x6D, 0x50, 0x4E, 0x53, 0x9C, 0x5A, 0x6D, 0x2B, 0x65, 0x73, 0x58, 0xEF, 0xB9, 0x38, 0x0D, 0x5A, 0x87, 0x2C, 0x02, 0xE4, 0xCC, 0x6B, 0x7E, 0x5C, 0x59, 0x68, 0x3F, 0xE7, 0xE4, 0x2B, 0x55, 0xAB, 0x2B, 0x07, 0x49, 0x2B, 0x07, 0x59, 0x2B, 0x07, 0x49, 0x6B, 0x63, 0xF0, 0x95, 0x8A, 0xB4, 0x1B, 0x35, 0xFB, 0xC2, 0xF5, 0xAD, 0x27, 0xFB, 0x2E, 0x51, 0xF3, 0x5D, 0x40, 0x92, 0x78, 0x73, 0xA9, 0xF5, 0x16, 0xA9, 0x78, 0xFF, 0x25, 0x8D, 0x5B, 0x7B, 0xD4, 0x73, 0x90, 0x9D, 0x77, 0x71, 0x5F, 0xE9, 0x46, 0x27, 0x40, 0x19, 0x60, 0x59, 0x66, 0x43, 0x05, 0xC8, 0x12, 0xB3, 0xD7, 0xDA, 0x8D, 0x8F, 0x2C, 0x6B, 0x5C, 0x5B, 0xC6, 0x24, 0xEB, 0x40, 0x1C, 0xEB, 0x9C, 0x6A, 0x8D, 0x68, 0x64, 0xA3, 0x64, 0x56, 0xEC, 0xF8, 0x34, 0x6A, 0xB5, 0x68, 0x13, 0xC0, 0x39, 0x21, 0x05, 0x98, 0xDF, 0xA0, 0xF9, 0xF7, 0xE6, 0xCC, 0xA3, 0xDF, 0xAD, 0xFD, 0x1C, 0xFD, 0x64, 0x6B, 0xE2, 0x3D, 0x3A, 0x24, 0x0D, 0x3F, 0x47, 0x3F, 0xA4, 0x99, 0xE3, 0x0A, 0x56, 0x3C, 0x6E, 0xED, 0x76, 0xB6, 0x69, 0x37, 0xCD, 0xAD, 0xA7, 0xBC, 0xB1, 0x4D, 0x31, 0x6D, 0x25, 0x14, 0x14, 0x90, 0xF5, 0x68, 0x84, 0x01, 0xA5, 0x40, 0xF8, 0x3A, 0x87, 0x1D, 0x40, 0x62, 0xC2, 0x63, 0x4E, 0x29, 0xF4, 0x5C, 0x35, 0x62, 0xFB, 0x21, 0x71, 0x51, 0x07, 0x9C, 0x81, 0x90, 0x86, 0x35, 0x7C, 0x7D, 0x51, 0x81, 0xEB, 0x3A, 0x70, 0xDE, 0xF3, 0xF9, 0xD7, 0x56, 0xF0, 0x9D, 0x1A, 0xBA, 0x51, 0xAA, 0x0B, 0xC7, 0xA7, 0x4D, 0x4C, 0x98, 0x14, 0x9B, 0x4A, 0x5B, 0xDE, 0x4A, 0xDC, 0x95, 0xB6, 0x2B, 0x79, 0xBC, 0x4C, 0xE7, 0x7C, 0xAD, 0xAD, 0x2D, 0xA3, 0xE2, 0x1F, 0xD3, 0x6D, 0xCB, 0xA6, 0x03, 0x29, 0x37, 0xCC, 0x1B, 0x09, 0x38, 0x35, 0xB4, 0x11, 0xAB, 0x8F, 0xAC, 0x61, 0x2B, 0xF4, 0x22, 0x80, 0x35, 0x5C, 0x81, 0xE0, 0xA5, 0x8C, 0x3C, 0x5B, 0x62, 0xD5, 0xD8, 0x17, 0x8D, 0x58, 0x97, 0xD9, 0xB7, 0xD2, 0xA6, 0x5B, 0x02, 0x2B, 0x7D, 0x89, 0x0F, 0x12, 0xFB, 0xD2, 0x93, 0xAA, 0xF9, 0xFD, 0x1B, 0x95, 0x10, 0x6A, 0x60, 0x24, 0xB8, 0xFA, 0xB8, 0x0E, 0xE1, 0xB2, 0xC7, 0x0D, 0x5A, 0xAC, 0xF2, 0x67, 0xAE, 0xD1, 0xEA, 0x0C, 0xB8, 0x00, 0x42, 0xC0, 0xE1, 0x39, 0x8D, 0xB7, 0x56, 0x5B, 0x6F, 0xE4, 0xFC, 0x95, 0x92, 0x1B, 0xB4, 0xA4, 0x3C, 0x4B, 0x8A, 0xEB, 0x34, 0x37, 0x33, 0xCD, 0x5B, 0x3F, 0x02, 0x94, 0x01, 0x3F, 0xAB, 0x44, 0x60, 0x40, 0xF9, 0xAD, 0x0D, 0x70, 0x23, 0x00, 0x52, 0x80, 0xA9, 0x91, 0x80, 0x04, 0x60, 0xD4, 0x41, 0xEB, 0xBE, 0x82, 0x8C, 0x2F, 0x21, 0xA9, 0x05, 0xA7, 0x56, 0x57, 0xED, 0x01, 0x95, 0x98, 0xE8, 0xDF, 0x32, 0x6F, 0xBD, 0x0E, 0xFB, 0x11, 0xBE, 0xC4, 0x30, 0x2B, 0x68, 0x14, 0xB3, 0xC9, 0x57, 0x08, 0xA0, 0x5A, 0x62, 0x3E, 0x5A, 0xA9, 0xDD, 0x86, 0x2F, 0x83, 0x9B, 0x38, 0xEB, 0xE0, 0x5F, 0x8D, 0x95, 0x38, 0x8B, 0xB3, 0xE6, 0x44, 0x74, 0x40, 0x55, 0xEF, 0x72, 0x98, 0x8F, 0x27, 0xD7, 0xD2, 0x67, 0x38, 0xE0, 0xB5, 0x94, 0xF2, 0xA7, 0xA1, 0x0D, 0x7F, 0x4F, 0x22, 0xA0, 0x00, 0x31, 0xF0, 0x34, 0xB8, 0x3A, 0xBD, 0x4C, 0x3C, 0xE9, 0xF3, 0xED, 0xB3, 0xB6, 0xD8, 0x37, 0x27, 0xAC, 0x53, 0x31, 0x24, 0x6B, 0x8C, 0x71, 0x23, 0xE1, 0x33, 0x14, 0x0A, 0x66, 0x5B, 0x4D, 0x2A, 0x67, 0x5A, 0x46, 0x99, 0x37, 0x18, 0x90, 0xC6, 0xC9, 0x65, 0x35, 0xE1, 0xF3, 0x54, 0xE6, 0xB5, 0xB6, 0xAA, 0x04, 0x82, 0x1A, 0xDC, 0xD8, 0xB6, 0xF8, 0x67, 0x3E, 0x44, 0xB6, 0x73, 0x39, 0x04, 0x88, 0x03, 0xDA, 0x30, 0x59, 0x73, 0x5F, 0xA4, 0x11, 0x33, 0x86, 0xE9, 0x2B, 0x86, 0x35, 0xEB, 0x81, 0x7C, 0x6E, 0xD4, 0x08, 0x51, 0x6B, 0x41, 0x24, 0xF3, 0xDC, 0xD4, 0xDC, 0xFB, 0x06, 0x4E, 0x28, 0xAF, 0x70, 0x8B, 0xD5, 0xA8, 0x6C, 0xB6, 0xFD, 0x3C, 0x3F, 0xB0, 0x46, 0xF1, 0x12, 0xC8, 0xEE, 0xFB, 0xA7, 0xFE, 0xDA, 0xD4, 0x08, 0xC8, 0xD5, 0xD8, 0xEF, 0xAB, 0x47, 0x3D, 0xBC, 0x61, 0xC0, 0xCF, 0x4A, 0xBB, 0xD0, 0x1C, 0xE9, 0xE1, 0xEB, 0x90, 0xC2, 0x0E, 0x48, 0x02, 0x5A, 0xEB, 0x0A, 0x1F, 0x40, 0x48, 0x23, 0x80, 0xD4, 0x75, 0x5B, 0xD7, 0x69, 0x89, 0x72, 0xC7, 0x84, 0x8C, 0x12, 0x41, 0x61, 0xEE, 0xC0, 0xB4, 0x88, 0x27, 0xC3, 0xCD, 0xCD, 0x12, 0x07, 0x76, 0x85, 0xFD, 0xA8, 0x3A, 0x8F, 0x9A, 0xB1, 0xCB, 0x96, 0x45, 0xD2, 0x6A, 0x02, 0x8E, 0x15, 0xB4, 0x35, 0x01, 0x2B, 0x18, 0xB0, 0x6A, 0x18, 0xE0, 0x8D, 0x90, 0xA5, 0xFE, 0x63, 0x40, 0xF2, 0xC7, 0x08, 0x67, 0xA7, 0xD5, 0x3F, 0xD9, 0xF1, 0xA1, 0x98, 0x79, 0xA1, 0x38, 0xEB, 0x65, 0xCA, 0xAB, 0xFD, 0x67, 0x37, 0xBB, 0x9C, 0x46, 0xFD, 0xEA, 0x79, 0x21, 0xA0, 0xE4, 0x06, 0x4D, 0x3A, 0x68, 0xB8, 0xBB, 0x57, 0xD8, 0x28, 0xAF, 0x50, 0x51, 0x5B, 0x72, 0x10, 0xA4, 0x6E, 0xA1, 0x48, 0x35, 0x96, 0x5E, 0x95, 0xF7, 0xCE, 0x74, 0x2C, 0xE7, 0xEE, 0xE5, 0xE3, 0xAC, 0xF9, 0xCB, 0xAD, 0xCF, 0x80, 0x7C, 0x5F, 0x04, 0x7C, 0x0D, 0xD9, 0xB2, 0x25, 0x83, 0x97, 0x00, 0x54, 0x1A, 0xCB, 0xED, 0x5A, 0xEE, 0x8A, 0xE1, 0x8E, 0x0F, 0x22, 0xF2, 0xE4, 0x05, 0x72, 0x00, 0x13, 0xC0, 0x0B, 0x48, 0x5E, 0x9A, 0x03, 0x6A, 0x04, 0x40, 0x02, 0xF0, 0x69, 0xE4, 0x3A, 0xE4, 0xBE, 0x4D, 0x4D, 0x5F, 0xD0, 0xFC, 0xFB, 0x1F, 0x66, 0xFA, 0x96, 0x0B, 0xA7, 0x5B, 0x15, 0x83, 0xA4, 0xA2, 0x0A, 0x42, 0x3B, 0x42, 0xB0, 0xCE, 0x9E, 0x4C, 0x46, 0x2B, 0x06, 0x5A, 0x33, 0x76, 0xCA, 0xDB, 0x38, 0x61, 0x99, 0xD2, 0x5E, 0xDC, 0xD8, 0x31, 0xA0, 0xD1, 0x28, 0x40, 0xBC, 0xC1, 0x2B, 0xF3, 0x34, 0x0C, 0x1D, 0xE5, 0xF5, 0x9B, 0xD9, 0x68, 0xFB, 0x40, 0x26, 0x71, 0xC8, 0x5B, 0x98, 0xE7, 0xDA, 0x32, 0x02, 0x9C, 0x1B, 0x05, 0x84, 0x01, 0x49, 0x8D, 0x5A, 0xEF, 0x85, 0x06, 0xF9, 0x0D, 0x9A, 0x8D, 0x9E, 0x32, 0x3D, 0x73, 0x54, 0xC8, 0xC9, 0x3E, 0x5D, 0x72, 0xA2, 0x9A, 0x93, 0x85, 0xDD, 0x27, 0x79, 0xF4, 0xFD, 0x58, 0xFD, 0xAF, 0x95, 0xC6, 0xBF, 0x6A, 0x52, 0x2F, 0xBC, 0x8D, 0x9D, 0x5A, 0xCB, 0x55, 0xBE, 0xAC, 0x19, 0x26, 0xA1, 0x46, 0x02, 0x3A, 0x3C, 0x9B, 0x7B, 0xC1, 0xBD, 0x95, 0x16, 0xAF, 0x47, 0x87, 0x0E, 0x90, 0x57, 0x73, 0xC0, 0x0C, 0xA8, 0x00, 0xCE, 0x40, 0x18, 0x90, 0x0A, 0x14, 0x35, 0xA2, 0x93, 0x21, 0x0D, 0x72, 0x80, 0x1B, 0xA2, 0x1D, 0x34, 0x7F, 0x41, 0x73, 0xE9, 0x46, 0x63, 0xB8, 0x61, 0xE1, 0xE8, 0x41, 0x78, 0x3C, 0x55, 0x0B, 0x2F, 0x3F, 0x93, 0x2E, 0x8E, 0xD8, 0x10, 0xC8, 0x8B, 0xEE, 0x3B, 0x3B, 0xDF, 0xFB, 0xCD, 0xEA, 0x83, 0xE0, 0x35, 0xA2, 0xD5, 0x14, 0xE0, 0xD5, 0x88, 0x5D, 0xAB, 0xE1, 0x58, 0x1A, 0x6C, 0xC0, 0xC9, 0x86, 0xEC, 0xFE, 0xE1, 0x59, 0x96, 0xB9, 0xC2, 0x38, 0xF5, 0x99, 0x73, 0xF2, 0x75, 0x5C, 0x90, 0x00, 0x8C, 0x01, 0xF7, 0xA5, 0x49, 0x53, 0xA0, 0x4E, 0xC3, 0xE7, 0xCD, 0x94, 0x4E, 0x23, 0x01, 0x7E, 0x4B, 0x6D, 0xA9, 0x87, 0x96, 0xA6, 0x23, 0x8F, 0xE2, 0xCA, 0x8C, 0x96, 0x76, 0x96, 0x3C, 0xFD, 0x7C, 0xE6, 0x50, 0x27, 0x7C, 0x98, 0xE9, 0xDB, 0x5C, 0x02, 0x79, 0xFD, 0x35, 0x3C, 0x91, 0x7F, 0x59, 0x23, 0x07, 0x10, 0x8D, 0x14, 0xC0, 0xF5, 0x7F, 0x08, 0x61, 0x18, 0xF0, 0x31, 0xA5, 0x51, 0x5F, 0x13, 0x64, 0x76, 0x60, 0xB8, 0xE6, 0x6F, 0xAD, 0x01, 0xC4, 0x5E, 0x7F, 0x87, 0x1B, 0x05, 0x90, 0x03, 0xAC, 0x80, 0x70, 0x23, 0x01, 0x0D, 0xC0, 0xB2, 0x83, 0x96, 0x2F, 0x68, 0x3B, 0x76, 0x29, 0x5F, 0x80, 0xF0, 0x2A, 0x96, 0x42, 0x93, 0x95, 0x11, 0x9E, 0xC0, 0xA0, 0x96, 0x72, 0xEC, 0xF4, 0xAD, 0x01, 0x25, 0x6B, 0xCB, 0xB1, 0x5F, 0x5E, 0x26, 0xB2, 0x8C, 0x81, 0xCF, 0xDC, 0x9C, 0xA2, 0x66, 0x2A, 0xA6, 0x6A, 0xDD, 0xAB, 0x57, 0xE5, 0x45, 0x14, 0xD0, 0x86, 0x9D, 0xA5, 0xE0, 0xA3, 0x55, 0x10, 0xE1, 0xA5, 0xE7, 0x13, 0xA0, 0xB8, 0x51, 0xBF, 0xF4, 0x7C, 0x0A, 0xF0, 0x69, 0x38, 0x20, 0xD2, 0xA8, 0xBB, 0xD2, 0x6A, 0x07, 0x6D, 0xBC, 0x3E, 0x55, 0x02, 0x93, 0xE7, 0x2D, 0xDB, 0x62, 0xCF, 0x91, 0x98, 0xF0, 0x9C, 0xAD, 0x18, 0xD2, 0x2C, 0x3B, 0xF3, 0xC4, 0xA5, 0xBB, 0x5D, 0x5F, 0x96, 0xA6, 0x63, 0x85, 0x8B, 0x05, 0x78, 0xD7, 0xFA, 0xFE, 0x65, 0x5E, 0x6F, 0x74, 0xFC, 0xDA, 0x8C, 0xA9, 0xE1, 0x00, 0xE7, 0x7C, 0xF8, 0xD4, 0xD7, 0x33, 0x78, 0x1A, 0x09, 0x84, 0x01, 0x29, 0xBF, 0x5E, 0x9C, 0x05, 0x90, 0x34, 0x0A, 0xE0, 0x00, 0x44, 0x57, 0xDF, 0xA3, 0x76, 0xD4, 0xEC, 0xC0, 0xA6, 0x89, 0x77, 0xD4, 0x90, 0x1D, 0x12, 0x0B, 0xD4, 0xC5, 0xFC, 0x43, 0x95, 0x71, 0x2F, 0x98, 0xF5, 0x7C, 0xCA, 0xEA, 0x6A, 0x3F, 0xF4, 0x6B, 0x5C, 0xC8, 0x3E, 0xB7, 0x59, 0x63, 0x58, 0x14, 0xC9, 0x3B, 0x83, 0xBE, 0x6E, 0x6A, 0x99, 0x82, 0x59, 0xF2, 0x8E, 0x1D, 0x01, 0xA6, 0xC0, 0x3D, 0x8D, 0x55, 0x23, 0xBD, 0x21, 0x40, 0x64, 0x23, 0x7E, 0x8D, 0x6B, 0x8B, 0x79, 0x2E, 0x39, 0x05, 0x90, 0x37, 0xA2, 0x51, 0x8D, 0x9C, 0x9F, 0xD8, 0xD6, 0x52, 0x33, 0xFA, 0x9A, 0x3E, 0x49, 0x77, 0xD0, 0xD0, 0xCD, 0x58, 0x07, 0xF7, 0xCE, 0x60, 0x45, 0x47, 0x1A, 0x25, 0x44, 0x18, 0xEE, 0xC3, 0xBB, 0x75, 0x8D, 0x0F, 0x1C, 0x99, 0x8E, 0xE5, 0xB9, 0x2D, 0xB1, 0xBC, 0x4A, 0x76, 0x8B, 0x98, 0xCE, 0x07, 0xF4, 0x8D, 0xD1, 0xBB, 0x29, 0x87, 0xBA, 0x98, 0x49, 0x31, 0x53, 0x80, 0x69, 0xCD, 0xA9, 0x60, 0x20, 0xAB, 0x61, 0x0B, 0xB1, 0x33, 0xB5, 0x2B, 0xBF, 0x6D, 0x00, 0x6B, 0xC3, 0x1B, 0xB6, 0x10, 0x2B, 0x6D, 0x72, 0x6E, 0xD4, 0xF8, 0x85, 0x0B, 0x3D, 0xD9, 0xFC, 0xF9, 0x76, 0x30, 0x63, 0x06, 0xD2, 0x49, 0x42, 0x6F, 0x95, 0x75, 0x56, 0xC9, 0x6F, 0x9D, 0x2B, 0xE6, 0xDC, 0x28, 0x5F, 0x35, 0x63, 0x7B, 0xEF, 0xB3, 0x1F, 0x23, 0x3B, 0xB4, 0x21, 0x04, 0xB0, 0x34, 0x1C, 0x78, 0x59, 0x1B, 0x99, 0xD5, 0x96, 0x38, 0x40, 0xEA, 0x3A, 0x3A, 0xC9, 0x7A, 0x68, 0x0D, 0x20, 0x5B, 0x4F, 0x6B, 0x43, 0x7D, 0x1D, 0x6C, 0xA9, 0x11, 0xEB, 0xC5, 0x69, 0x8D, 0x02, 0x8A, 0xA7, 0x88, 0xF2, 0x48, 0xA3, 0xD6, 0xFB, 0x33, 0x6E, 0xD0, 0x04, 0x47, 0x10, 0x37, 0xD8, 0x4D, 0xC8, 0xDF, 0xF3, 0x89, 0x94, 0x35, 0xF2, 0x42, 0x4E, 0xD8, 0x67, 0xCD, 0x51, 0xAB, 0x13, 0xC7, 0xA9, 0xE3, 0xB7, 0x26, 0x32, 0x63, 0xCB, 0xFB, 0xE6, 0x27, 0x66, 0xE0, 0x54, 0xE3, 0x34, 0x02, 0xB8, 0x79, 0x8C, 0xBA, 0xCB, 0x89, 0xD6, 0x4B, 0xC0, 0x1B, 0xB1, 0xB0, 0xEA, 0xEE, 0xF7, 0x4C, 0xAA, 0x35, 0xF7, 0x3F, 0x55, 0xC0, 0xFD, 0x57, 0xB2, 0x5B, 0x01, 0x0A, 0x80, 0x1D, 0x10, 0x6A, 0x18, 0xA0, 0xA7, 0xE1, 0x4B, 0x81, 0x4A, 0x37, 0x6A, 0xFA, 0x96, 0x9A, 0x7E, 0x6B, 0x84, 0xC7, 0x01, 0x37, 0x0E, 0xC3, 0x79, 0xD0, 0x19, 0x7F, 0x4D, 0x32, 0x3C, 0xA0, 0x3D, 0x73, 0xD1, 0x7F, 0x47, 0xAD, 0x68, 0x45, 0xAD, 0xA1, 0xDB, 0x84, 0x28, 0x7F, 0x4C, 0xF7, 0x7E, 0xD3, 0xF8, 0x6D, 0x9A, 0x6B, 0x32, 0x37, 0xCE, 0x42, 0x2C, 0x0D, 0x4C, 0xAE, 0x21, 0xAC, 0xDA, 0x21, 0x39, 0x40, 0xDE, 0x94, 0x99, 0x18, 0x60, 0x05, 0x84, 0x03, 0xC5, 0x7D, 0x8A, 0x55, 0x80, 0x04, 0xE0, 0xB3, 0x0E, 0xB3, 0x06, 0x68, 0x00, 0x66, 0x80, 0x57, 0x47, 0xCD, 0x5E, 0xD4, 0xB8, 0x90, 0x8A, 0xFC, 0xBB, 0x4B, 0x51, 0x0B, 0x88, 0x82, 0xBA, 0xC2, 0x15, 0xED, 0x45, 0xE7, 0x3E, 0xA2, 0xE5, 0xBA, 0xA3, 0x96, 0xF6, 0x63, 0x3E, 0xA0, 0xE8, 0xCA, 0x75, 0x24, 0x90, 0x71, 0xF1, 0x4B, 0x0A, 0x13, 0x80, 0x1B, 0x10, 0xA7, 0x21, 0xAB, 0x18, 0xC7, 0xB3, 0x19, 0x58, 0x64, 0xE6, 0x25, 0x34, 0x80, 0xB4, 0xE5, 0x97, 0x50, 0x80, 0x1C, 0x40, 0xA9, 0x51, 0x80, 0xD9, 0xBA, 0xAF, 0xC7, 0xF6, 0xA8, 0x68, 0xDC, 0x1D, 0xE1, 0x6D, 0x6B, 0x7B, 0x4C, 0x59, 0x7F, 0x07, 0xEB, 0x57, 0x6D, 0x89, 0xF6, 0x38, 0x09, 0x72, 0xEC, 0x19, 0x72, 0xFE, 0xD1, 0x67, 0x9A, 0xE8, 0xB8, 0xAE, 0x6F, 0x5F, 0x18, 0x1A, 0x79, 0x67, 0x34, 0x29, 0xFC, 0x07, 0xDE, 0xFF, 0xA0, 0xD8, 0x1A, 0xBE, 0xF6, 0xF9, 0x23, 0xF8, 0x54, 0x0A, 0x78, 0x01, 0xD2, 0x20, 0x47, 0x5A, 0xAF, 0x0E, 0xC0, 0xFD, 0xBF, 0xE3, 0xAA, 0xA3, 0x5D, 0x05, 0x26, 0xDC, 0x7F, 0xF2, 0x95, 0x0A, 0x7C, 0x95, 0xF9, 0xCE, 0xD2, 0x89, 0x32, 0xCF, 0x29, 0xF8, 0x79, 0x11, 0x8D, 0x65, 0x90, 0x25, 0xB4, 0x7C, 0xCE, 0x75, 0x7E, 0x91, 0x78, 0x3E, 0x0B, 0xD4, 0xB0, 0x17, 0xB4, 0x80, 0x80, 0x83, 0xF3, 0x56, 0x94, 0x5F, 0xEC, 0x1C, 0xE2, 0x1E, 0x5C, 0x86, 0x23, 0x90, 0x6E, 0x46, 0xA7, 0x4B, 0x1E, 0xD1, 0x51, 0xF8, 0x5C, 0xF5, 0x15, 0x79, 0x27, 0x22, 0xCF, 0x5E, 0xE9, 0x46, 0x08, 0xA1, 0x05, 0x90, 0x0A, 0x58, 0x01, 0xB7, 0xB0, 0x5D, 0x06, 0x38, 0x03, 0x88, 0xD6, 0x41, 0x40, 0xEB, 0xED, 0xCD, 0x79, 0xFE, 0x4C, 0x5C, 0xEC, 0x65, 0xCE, 0x6C, 0x4D, 0x22, 0x61, 0x01, 0xCE, 0xAA, 0xA9, 0x06, 0xAF, 0xB3, 0x4F, 0x34, 0x0A, 0xC8, 0x33, 0x85, 0x88, 0xF4, 0xD3, 0xA1, 0x92, 0x80, 0xB4, 0x55, 0xA0, 0x7D, 0xBB, 0x5A, 0x67, 0x37, 0xBA, 0xBE, 0x22, 0x5C, 0x63, 0xF0, 0x96, 0x88, 0xA0, 0x6E, 0x14, 0x82, 0xC6, 0x70, 0x27, 0x04, 0xE2, 0xD4, 0x1B, 0x1E, 0xF8, 0x91, 0x3E, 0xD2, 0x12, 0x46, 0xD0, 0x81, 0x57, 0x0A, 0x49, 0x5F, 0x80, 0xF1, 0x56, 0xFF, 0xA0, 0x82, 0x85, 0x93, 0x09, 0x50, 0xE0, 0x5B, 0x34, 0x3B, 0xA0, 0x06, 0x50, 0x87, 0x50, 0xF8, 0xBF, 0x77, 0x9B, 0x7C, 0x1E, 0x40, 0x67, 0x3C, 0x89, 0xF2, 0x22, 0x12, 0xCB, 0x43, 0x9F, 0x7C, 0x75, 0xE6, 0x46, 0x83, 0x1B, 0x67, 0x7E, 0xDA, 0x0A, 0x56, 0xF1, 0xC6, 0xF2, 0x3B, 0x3D, 0xEB, 0x3B, 0x87, 0x22, 0x1D, 0x41, 0xAB, 0x4F, 0x35, 0x4A, 0x4A, 0x70, 0x97, 0xC9, 0x17, 0x34, 0x14, 0xF4, 0x8C, 0x91, 0xCF, 0x54, 0x45, 0xFA, 0xA4, 0x04, 0xBF, 0x25, 0xA4, 0xA4, 0x49, 0xDB, 0x1F, 0x4C, 0xE8, 0xB5, 0x97, 0xF6, 0x6F, 0xFD, 0x01, 0xE7, 0xAA, 0x7F, 0x84, 0xFD, 0xE4, 0x43, 0x1C, 0x40, 0x05, 0xB8, 0x4F, 0xB0, 0x15, 0x40, 0xD2, 0xFF, 0x83, 0x23, 0xA0, 0xD1, 0x01, 0x75, 0xEA, 0xC5, 0x98, 0xAF, 0x41, 0xE2, 0x19, 0x27, 0x59, 0x43, 0x47, 0xEF, 0xE7, 0xF4, 0xD4, 0x62, 0x80, 0x15, 0xA0, 0x6C, 0x78, 0x23, 0x00, 0x21, 0xC0, 0x1C, 0x08, 0x9E, 0xFF, 0xBB, 0x35, 0x94, 0x97, 0x6F, 0x29, 0x2F, 0x29, 0xA9, 0x9F, 0xB7, 0xD2, 0xE4, 0x2B, 0x3F, 0xFC, 0x65, 0x3E, 0xBE, 0xF3, 0x41, 0xE2, 0xE7, 0x90, 0x74, 0x5B, 0x58, 0x62, 0x4F, 0x89, 0x56, 0x78, 0x6F, 0xA5, 0x1A, 0xF9, 0xDF, 0x1F, 0x9A, 0x77, 0xCF, 0x3F, 0xEF, 0xA1, 0x53, 0x69, 0xD0, 0x7D, 0x73, 0x01, 0xD2, 0x6F, 0x71, 0x03, 0xF8, 0x9E, 0x0C, 0x08, 0x78, 0x49, 0xD6, 0x5B, 0xB5, 0x1D, 0x5E, 0xF8, 0xF2, 0x9E, 0x9A, 0x48, 0x80, 0xCE, 0x6E, 0xAD, 0x5D, 0x36, 0xA6, 0xBF, 0xE6, 0x77, 0xDA, 0x4A, 0x08, 0xA4, 0x00, 0x95, 0x8D, 0xF5, 0xC5, 0x68, 0x78, 0x23, 0xEC, 0x2D, 0xB8, 0x0E, 0x1A, 0x7D, 0x93, 0xFE, 0x53, 0xFD, 0x1B, 0x86, 0x61, 0x16, 0x30, 0x43, 0x27, 0x0C, 0xC3, 0xF0, 0x63, 0xB8, 0x1B, 0x72, 0x4B, 0x8F, 0xD9, 0x50, 0x9D, 0x2B, 0x9E, 0xFA, 0xDB, 0x5C, 0x7B, 0x1A, 0xDD, 0x0B, 0xF3, 0xED, 0x1A, 0x34, 0x40, 0x13, 0xB8, 0x37, 0x15, 0x93, 0x39, 0x74, 0xFA, 0x1E, 0xBD, 0xAB, 0x91, 0x02, 0x78, 0x00, 0x87, 0xA7, 0xCC, 0xCA, 0x78, 0xEA, 0xFF, 0x79, 0xFD, 0x9E, 0x65, 0xAB, 0xC9, 0xF1, 0x42, 0x17, 0xAC, 0xB1, 0x8E, 0x92, 0x71, 0x80, 0xCC, 0xBD, 0x17, 0xAE, 0x03, 0x13, 0xCD, 0x4F, 0x75, 0x6E, 0xD0, 0xF8, 0xAD, 0x34, 0xFD, 0x8E, 0x63, 0x86, 0x17, 0x1C, 0x21, 0x84, 0xAC, 0x7D, 0x53, 0x44, 0xEC, 0x32, 0xA4, 0xEB, 0x45, 0x55, 0x43, 0x76, 0x2B, 0xB5, 0x34, 0x91, 0xCF, 0x40, 0x6D, 0xDD, 0xF2, 0xE4, 0x00, 0xE4, 0xF3, 0x76, 0x28, 0xDA, 0xD1, 0x4A, 0x20, 0x02, 0x70, 0x03, 0xAE, 0x1C, 0xB5, 0x0A, 0xE0, 0xEA, 0xA0, 0x2D, 0xCF, 0xE0, 0xB3, 0xD4, 0x47, 0xF6, 0xAB, 0x4B, 0x47, 0xAA, 0x91, 0x0B, 0x05, 0x68, 0xCC, 0x05, 0x17, 0x17, 0xF2, 0xCB, 0x6F, 0x97, 0x1B, 0x09, 0xE4, 0x5B, 0x69, 0xF2, 0x82, 0xE6, 0xDF, 0x6B, 0xEB, 0x1E, 0xDB, 0xD0, 0x07, 0xA4, 0x47, 0xFA, 0x5F, 0x85, 0x90, 0xB8, 0x72, 0x47, 0x59, 0x8D, 0x70, 0x50, 0x93, 0x5D, 0xFE, 0x64, 0x9A, 0x0E, 0x61, 0xAC, 0x7F, 0xE9, 0xE3, 0x7C, 0x57, 0xE3, 0xA4, 0xE9, 0x97, 0x6F, 0x31, 0xCB, 0xCA, 0x26, 0xC0, 0xF1, 0xE9, 0x88, 0x72, 0x62, 0x4D, 0xF5, 0x54, 0x40, 0x75, 0x4E, 0x2D, 0xF3, 0x86, 0x39, 0xE0, 0x3C, 0x61, 0xB1, 0xE0, 0xF3, 0x93, 0xDB, 0x7A, 0x2D, 0x5C, 0x1C, 0x20, 0x79, 0x85, 0x30, 0xA6, 0x98, 0xEC, 0xBC, 0x95, 0xA6, 0x2F, 0x68, 0xA6, 0xDF, 0xC3, 0xF7, 0x1D, 0x72, 0x95, 0x1C, 0xD2, 0x2B, 0x63, 0xC8, 0x7C, 0x80, 0xC8, 0x60, 0x24, 0x07, 0x38, 0x66, 0xCB, 0xAC, 0xAD, 0x89, 0x0E, 0x32, 0xFA, 0x4C, 0x71, 0xF8, 0x1A, 0x93, 0x12, 0x34, 0x67, 0xE3, 0xAE, 0xD0, 0x8C, 0xA4, 0x73, 0x43, 0x00, 0x1B, 0xF9, 0x0B, 0x7B, 0x52, 0xDE, 0x90, 0xBF, 0x7E, 0x0C, 0x7E, 0x38, 0xF6, 0xC3, 0xC6, 0x23, 0x7D, 0x95, 0x0A, 0xBD, 0xA1, 0x0D, 0x5F, 0x55, 0x9D, 0x95, 0x75, 0xE1, 0x58, 0x9E, 0xE3, 0xB5, 0x0E, 0x76, 0x07, 0x90, 0xF7, 0x22, 0xB0, 0x17, 0x34, 0xD8, 0x06, 0xBF, 0x6B, 0xD5, 0x37, 0xA4, 0x20, 0x93, 0x20, 0xB2, 0xA2, 0xF6, 0x58, 0x66, 0x87, 0x5D, 0xA0, 0xD2, 0x58, 0x69, 0x4B, 0xB2, 0x2C, 0xCF, 0x11, 0xCF, 0x3A, 0x4C, 0xA9, 0xE3, 0x00, 0xD2, 0xAF, 0xBF, 0x7A, 0x3D, 0x99, 0x6F, 0x6A, 0xC3, 0x88, 0xB2, 0xBF, 0x2C, 0x46, 0x35, 0xFA, 0x62, 0x30, 0xDE, 0x74, 0x63, 0x7C, 0x12, 0xAD, 0x51, 0xC3, 0x56, 0x80, 0xCB, 0xC4, 0x5E, 0x62, 0x66, 0x6B, 0xA5, 0xE5, 0x9A, 0x2D, 0x6E, 0x3F, 0x74, 0xC1, 0x11, 0xBF, 0xEB, 0x3F, 0x1D, 0xB4, 0x3B, 0x2D, 0xAA, 0xBE, 0x3D, 0x4D, 0x9D, 0x5E, 0xD0, 0x0C, 0x7B, 0x3F, 0x6E, 0x7D, 0xA6, 0x10, 0x92, 0xB8, 0xA2, 0x43, 0x32, 0x04, 0x37, 0x82, 0xAD, 0x83, 0x79, 0x3A, 0x56, 0x1E, 0x93, 0x36, 0xD0, 0x75, 0xFC, 0x21, 0x1C, 0xD0, 0x3E, 0xD5, 0x46, 0x1F, 0x24, 0x52, 0x80, 0xE3, 0x1D, 0xD7, 0x1C, 0xE6, 0x65, 0x4F, 0x11, 0x90, 0x73, 0x2F, 0x64, 0x99, 0x43, 0x65, 0xC5, 0xA7, 0x80, 0x21, 0x14, 0xA8, 0x9B, 0x66, 0xD1, 0x05, 0x6F, 0x2C, 0x6F, 0x05, 0x2E, 0xC0, 0x12, 0x88, 0x68, 0xF0, 0x52, 0xEF, 0xCB, 0x0F, 0xD3, 0xA7, 0x7C, 0x41, 0x8B, 0xCF, 0xD1, 0xC4, 0xE5, 0x6D, 0x6D, 0x43, 0x23, 0x2F, 0x5A, 0xBD, 0xF6, 0x3F, 0x28, 0x1B, 0xDD, 0x7B, 0xE1, 0x94, 0x2C, 0xF3, 0x7A, 0x11, 0xE4, 0x99, 0x2F, 0x82, 0x10, 0xC0, 0xCF, 0xDC, 0xBE, 0x28, 0x66, 0x57, 0xA2, 0xE9, 0x34, 0xFC, 0xD6, 0x33, 0x8F, 0x00, 0x46, 0xCB, 0x74, 0x82, 0x9E, 0x0C, 0xA2, 0x69, 0xDB, 0xDE, 0x99, 0x96, 0x9F, 0x8C, 0xC9, 0x5A, 0x57, 0xA7, 0x41, 0x8D, 0x75, 0xA4, 0x28, 0x5A, 0x83, 0x1A, 0x69, 0xCD, 0x79, 0x6C, 0x44, 0xCC, 0x7B, 0x35, 0xD1, 0x8D, 0xDB, 0x5F, 0xC9, 0xF3, 0x2B, 0x41, 0xDB, 0x78, 0x42, 0xA5, 0xC7, 0xFE, 0x1B, 0x55, 0xE7, 0x0E, 0x0D, 0x82, 0x31, 0x9D, 0x16, 0x9B, 0x1A, 0x43, 0x9F, 0x20, 0xAF, 0x41, 0x22, 0xF2, 0x47, 0x42, 0xEB, 0x7C, 0x88, 0x3D, 0x1F, 0xE5, 0x69, 0x40, 0x35, 0xE6, 0xDA, 0xE1, 0x98, 0x89, 0xDF, 0xB3, 0xB6, 0x27, 0x53, 0x40, 0x18, 0x60, 0x02, 0xE4, 0x00, 0x46, 0x33, 0x4C, 0x96, 0x8D, 0x9A, 0x70, 0x5A, 0x41, 0x93, 0xFB, 0x13, 0x56, 0x92, 0xB4, 0x11, 0xD5, 0xD0, 0x39, 0x8A, 0x94, 0xEC, 0x06, 0xAD, 0x5E, 0xD0, 0x22, 0xD1, 0x9B, 0xC7, 0xDF, 0x93, 0xAD, 0x5F, 0xE1, 0xDD, 0x35, 0xB1, 0x02, 0x58, 0x90, 0xAD, 0x4E, 0x47, 0xF3, 0x8B, 0xAE, 0xA6, 0x02, 0x10, 0x09, 0x96, 0x21, 0xF5, 0x96, 0xFB, 0x02, 0x4D, 0xA0, 0x64, 0x9E, 0xD1, 0x22, 0x66, 0xBF, 0x03, 0xC7, 0x72, 0x58, 0x38, 0xB3, 0x23, 0x51, 0x65, 0x1E, 0x65, 0x65, 0x5D, 0x93, 0xDC, 0x00, 0x5D, 0xCB, 0x32, 0x2E, 0xAA, 0x61, 0x0D, 0x5F, 0x88, 0xB9, 0x9F, 0x11, 0x03, 0x1C, 0x0D, 0x5D, 0x8A, 0xBA, 0x6C, 0x2C, 0x33, 0xEC, 0x67, 0x9F, 0x10, 0x07, 0x4F, 0xA8, 0xDA, 0x27, 0xEA, 0x88, 0x60, 0x4C, 0x5D, 0x91, 0x36, 0xF8, 0xCE, 0xC0, 0x3B, 0x99, 0x3F, 0xF8, 0x7B, 0x8F, 0x92, 0xCE, 0x27, 0x94, 0xB6, 0x43, 0x98, 0xCB, 0x54, 0x9E, 0xA5, 0x01, 0x51, 0xC0, 0xDD, 0x21, 0x3C, 0xD7, 0xA4, 0xF0, 0x35, 0xBB, 0xCF, 0x73, 0x3D, 0xA9, 0xFC, 0xC3, 0x2F, 0x8C, 0x0A, 0x38, 0xD9, 0x70, 0x80, 0x05, 0xB0, 0x55, 0x1F, 0x0C, 0x6E, 0xE8, 0x8A, 0x61, 0xAE, 0x37, 0x28, 0xAD, 0xA8, 0xC9, 0x4A, 0x63, 0x55, 0x63, 0x7C, 0xEA, 0x8B, 0x2E, 0xA2, 0x46, 0xA3, 0x3A, 0x60, 0x7F, 0xD6, 0x57, 0xFE, 0x5D, 0x39, 0x05, 0xFF, 0x1B, 0xD9, 0xBB, 0xAE, 0xC0, 0xB7, 0x43, 0x47, 0xD6, 0x5B, 0x86, 0x6F, 0xD3, 0x30, 0x26, 0x3D, 0xAB, 0x7E, 0xD6, 0x50, 0xE9, 0x10, 0xEA, 0x4C, 0xF2, 0x4B, 0x4E, 0x51, 0xAD, 0xC4, 0x14, 0xB5, 0x69, 0xAD, 0x21, 0xFF, 0x0A, 0x18, 0xAF, 0x10, 0xC6, 0x7A, 0x4C, 0xB5, 0x51, 0x0B, 0x39, 0xA1, 0xA7, 0x91, 0xBF, 0x0E, 0xB8, 0xFC, 0xEB, 0x26, 0x26, 0x8D, 0x02, 0xF2, 0xDC, 0xA0, 0x31, 0x9A, 0xA2, 0xB2, 0x3E, 0x44, 0xF1, 0xB8, 0xB4, 0xEB, 0x21, 0x5C, 0x3C, 0xF9, 0x6A, 0xD4, 0x0A, 0x95, 0x1F, 0xD2, 0x39, 0x27, 0xBB, 0xD6, 0xFD, 0xD3, 0x46, 0xBE, 0x0E, 0xB3, 0xAA, 0x00, 0xE6, 0xFF, 0x96, 0xC1, 0xF2, 0x2A, 0xEC, 0x5E, 0xB6, 0xD0, 0x56, 0x3F, 0x12, 0xDF, 0x3E, 0x80, 0xD5, 0x31, 0x2C, 0x3E, 0x17, 0x63, 0xC8, 0x8F, 0x1C, 0xA7, 0xF3, 0xCC, 0x12, 0x79, 0xAD, 0xF7, 0xA9, 0x03, 0x3B, 0xC7, 0x29, 0x02, 0x58, 0x01, 0xE1, 0x0D, 0x5E, 0x5E, 0xB2, 0x07, 0x90, 0x65, 0x92, 0x9E, 0xEF, 0xF9, 0x94, 0xEF, 0x3A, 0x10, 0xC7, 0xBF, 0xBD, 0xDF, 0x62, 0x1E, 0x3B, 0xBC, 0x18, 0x75, 0xDA, 0x14, 0x3C, 0x6B, 0x21, 0xA8, 0x37, 0xA4, 0x4D, 0x37, 0x57, 0x5B, 0x89, 0x48, 0xF2, 0x51, 0xC9, 0xC6, 0x6F, 0x88, 0xD3, 0x47, 0x7F, 0xD2, 0x77, 0x85, 0x1F, 0x07, 0x0D, 0xAD, 0xE9, 0x28, 0x72, 0x72, 0x06, 0x34, 0x64, 0xDE, 0x4D, 0xF5, 0xCC, 0xFA, 0x93, 0x36, 0xB8, 0x61, 0x31, 0x8B, 0x59, 0x74, 0x00, 0x4D, 0xC0, 0x6B, 0x55, 0xF4, 0xE2, 0xE6, 0x9A, 0x00, 0x51, 0xC0, 0xA4, 0x41, 0x80, 0x36, 0xD8, 0x7F, 0xB8, 0xFA, 0xB9, 0xDD, 0xA0, 0x29, 0x8C, 0x4C, 0x9C, 0xBE, 0x6D, 0x4C, 0x8B, 0x46, 0x4E, 0x8D, 0x2A, 0x70, 0xB1, 0x09, 0xEF, 0x7C, 0xA4, 0x42, 0xA1, 0x2F, 0x3E, 0x72, 0xDD, 0xA6, 0x23, 0x68, 0xF2, 0x0A, 0x3A, 0xFD, 0xC6, 0xA3, 0x4E, 0xBF, 0xF2, 0x6B, 0xAD, 0xF1, 0x40, 0xB4, 0x42, 0x71, 0x2C, 0xBB, 0x8E, 0x2B, 0x0E, 0xD0, 0x73, 0xE5, 0x9A, 0x9E, 0xCB, 0x57, 0x9F, 0x47, 0x4F, 0x59, 0x39, 0x45, 0xF2, 0x42, 0x3F, 0x32, 0x89, 0x7E, 0x80, 0x3A, 0xAB, 0x6F, 0x9D, 0x1A, 0x0E, 0x30, 0x01, 0xB2, 0x92, 0xEA, 0xA9, 0x8D, 0x03, 0x44, 0xC3, 0x08, 0x50, 0x5E, 0x2B, 0xAD, 0x6E, 0xD0, 0x6C, 0xAB, 0x39, 0xC6, 0xD8, 0xCF, 0x08, 0x86, 0xD8, 0x80, 0x3B, 0x05, 0x53, 0x8A, 0x5B, 0x76, 0xF0, 0x2C, 0xB5, 0xBF, 0x33, 0xC7, 0x98, 0x9B, 0x7B, 0x53, 0xED, 0xF5, 0x60, 0xB7, 0x7A, 0x76, 0xE6, 0x32, 0x22, 0x99, 0x2D, 0x64, 0x14, 0x73, 0x98, 0x67, 0xC8, 0xDC, 0xCC, 0xD4, 0x01, 0xB6, 0x86, 0x00, 0x64, 0x0D, 0x07, 0xC4, 0xF7, 0xB8, 0xEC, 0x46, 0x6C, 0xAC, 0x7B, 0xC0, 0xCA, 0x6E, 0x6B, 0x36, 0x64, 0xA5, 0xBC, 0x65, 0x66, 0x20, 0x47, 0x77, 0x2B, 0x82, 0xE6, 0xDF, 0xE3, 0x49, 0x51, 0x2B, 0x68, 0x78, 0x3C, 0xF5, 0x38, 0x4E, 0xC9, 0x4E, 0xC8, 0x8C, 0x68, 0x42, 0x76, 0x1D, 0xF7, 0x60, 0xBB, 0xAF, 0x52, 0xF6, 0x27, 0x2C, 0xCE, 0x57, 0x14, 0x8A, 0x00, 0xE4, 0xEA, 0xAF, 0x3B, 0x68, 0x34, 0xE4, 0x9A, 0xFA, 0xFA, 0x29, 0x8A, 0xA7, 0xE3, 0x9A, 0xE5, 0x7C, 0x7B, 0xCA, 0xDA, 0xEC, 0x59, 0x06, 0xD6, 0x68, 0x7C, 0x79, 0xC7, 0x6B, 0xDE, 0x46, 0xCC, 0x06, 0xA4, 0x2F, 0xDD, 0x9A, 0x00, 0xE6, 0x40, 0xE8, 0x84, 0x3B, 0x60, 0xBF, 0xCA, 0x30, 0xF9, 0x82, 0x16, 0xE8, 0x24, 0x3B, 0xF6, 0x82, 0xC6, 0x9F, 0xD2, 0x0C, 0xED, 0x18, 0xC5, 0x85, 0x74, 0x12, 0xA3, 0xEE, 0x79, 0xAC, 0x1B, 0xA0, 0x35, 0x91, 0x16, 0xDA, 0x41, 0xA3, 0x31, 0x82, 0x18, 0x49, 0x9F, 0x51, 0xD3, 0x7F, 0x7B, 0xCC, 0xEB, 0xA7, 0x58, 0x9B, 0xBD, 0x8C, 0x25, 0x36, 0x4C, 0x13, 0x87, 0x61, 0xA9, 0xD2, 0x5A, 0x69, 0x0C, 0x50, 0xCE, 0x4F, 0xB6, 0x8E, 0xF6, 0x2A, 0x80, 0xD5, 0xAF, 0x79, 0xC6, 0x36, 0x3B, 0xE9, 0x49, 0xD7, 0xA8, 0xD5, 0x00, 0x28, 0x56, 0x4B, 0x12, 0x2D, 0xE9, 0xBA, 0xDC, 0xA0, 0xE5, 0x97, 0x09, 0x72, 0x8F, 0x1B, 0xB4, 0x91, 0xBD, 0x8D, 0x12, 0xB4, 0x30, 0x09, 0xE1, 0x34, 0x6C, 0x8C, 0x23, 0x47, 0xC9, 0x08, 0x9A, 0x36, 0x11, 0xA6, 0x91, 0x89, 0xE4, 0x55, 0x18, 0x13, 0xFB, 0x93, 0x61, 0xDB, 0xDB, 0x48, 0x9E, 0xAF, 0x04, 0xAD, 0x35, 0xD6, 0x20, 0x9D, 0x97, 0x1E, 0x56, 0x80, 0x68, 0xE1, 0x34, 0x0A, 0xF0, 0x9C, 0x22, 0x7B, 0x0D, 0xA0, 0x76, 0xD7, 0xBB, 0xED, 0xF1, 0x3E, 0xAB, 0xA3, 0x21, 0x1B, 0xD1, 0x38, 0xEB, 0x56, 0x7A, 0x80, 0xBB, 0x8A, 0xCF, 0xDB, 0xD4, 0xEA, 0xCB, 0x71, 0x84, 0x25, 0x9C, 0x73, 0xFE, 0x72, 0xDE, 0xF6, 0x1D, 0xA6, 0x04, 0x3D, 0x5E, 0x4C, 0xA8, 0x36, 0xA1, 0x74, 0x6C, 0x54, 0x81, 0x06, 0x8C, 0x8E, 0x56, 0x4C, 0xCF, 0x09, 0x79, 0xEA, 0x56, 0xA6, 0x7B, 0xE6, 0x28, 0xE0, 0x60, 0xEF, 0xA7, 0xF1, 0x8A, 0xF4, 0x97, 0xF0, 0x2F, 0x9A, 0xB7, 0x52, 0xF5, 0xD9, 0xDF, 0xCA, 0x6B, 0x91, 0x68, 0x00, 0xF2, 0x6B, 0x26, 0x7F, 0xE7, 0x2C, 0x5F, 0xAB, 0x99, 0xAE, 0x06, 0x77, 0xCD, 0xE5, 0x97, 0x60, 0x4B, 0x40, 0xAF, 0x80, 0x72, 0xE3, 0x00, 0xC2, 0x00, 0x1F, 0x80, 0x04, 0x60, 0x06, 0x5E, 0x73, 0x59, 0xCE, 0x57, 0x00, 0xC2, 0xCA, 0x98, 0xEF, 0x63, 0x28, 0xF3, 0x63, 0xA3, 0x32, 0x47, 0x4F, 0x81, 0xF4, 0x26, 0xAF, 0xDC, 0x13, 0xEC, 0xB7, 0x0F, 0x40, 0xFE, 0xD5, 0xB9, 0xFC, 0xEE, 0xFD, 0xAF, 0xB2, 0xCF, 0x0A, 0x98, 0x34, 0x68, 0xC2, 0xB9, 0xC3, 0xDB, 0xB5, 0xED, 0x57, 0xE3, 0x0B, 0x05, 0xF4, 0xD6, 0xC4, 0xFD, 0xBF, 0xBA, 0x02, 0x7F, 0x67, 0xAB, 0x3D, 0xF7, 0xC6, 0x0E, 0x40, 0x2B, 0xB7, 0x16, 0x7B, 0xBC, 0xBD, 0x4D, 0x44, 0xCC, 0xEB, 0x11, 0x49, 0x63, 0x7B, 0xCD, 0x5A, 0x63, 0xCD, 0x7C, 0x62, 0xBA, 0x41, 0xA3, 0x15, 0x34, 0x28, 0xB0, 0xB2, 0x33, 0x91, 0x4E, 0x78, 0x22, 0x2D, 0x19, 0x5B, 0xA2, 0x5A, 0x17, 0xF2, 0xE3, 0x0B, 0x9A, 0x6D, 0xCD, 0xF2, 0xAD, 0x7D, 0x3C, 0x2D, 0xE6, 0x3D, 0xA8, 0x11, 0xE3, 0xA0, 0x66, 0x07, 0x85, 0xA6, 0x53, 0x00, 0x59, 0x83, 0x1B, 0x01, 0xB8, 0xA1, 0x24, 0xE5, 0x8C, 0x02, 0x15, 0xCB, 0x5F, 0xE1, 0x4F, 0x5E, 0x55, 0x26, 0x09, 0x57, 0xD9, 0xB1, 0xDB, 0x0B, 0x62, 0x30, 0x7C, 0xD9, 0x68, 0xDE, 0xF1, 0x73, 0xDD, 0x9C, 0xF6, 0x5D, 0xB4, 0x5E, 0x94, 0x01, 0xB9, 0x60, 0x80, 0x0A, 0x38, 0xCB, 0xFB, 0xF2, 0x10, 0x20, 0x75, 0x83, 0xC6, 0xDF, 0x05, 0x8A, 0xFF, 0x8E, 0xB5, 0xF2, 0xED, 0x82, 0xF9, 0x1D, 0xD4, 0x52, 0xD0, 0x91, 0x17, 0x91, 0x70, 0x56, 0x8C, 0xC0, 0xB3, 0x76, 0xE4, 0xB5, 0x2F, 0x7E, 0xA4, 0x35, 0xAB, 0xE0, 0x9E, 0x52, 0xF5, 0x1E, 0xD4, 0xB8, 0x63, 0xC7, 0x04, 0x98, 0x35, 0x18, 0xD0, 0x00, 0x8C, 0xFA, 0x00, 0xDC, 0x91, 0x64, 0x46, 0xB4, 0xB8, 0x03, 0x9A, 0x9D, 0x8C, 0x93, 0xAB, 0xB0, 0x90, 0x96, 0x6B, 0xCC, 0xA7, 0xDB, 0x96, 0xAC, 0xCA, 0x18, 0x60, 0x99, 0x46, 0x6E, 0x55, 0x8D, 0x68, 0x2C, 0x3B, 0x1D, 0x49, 0xC0, 0xAC, 0xC1, 0x80, 0x9E, 0xD5, 0x32, 0x68, 0x00, 0x37, 0xFC, 0xAD, 0x34, 0x79, 0x2B, 0x4D, 0xBE, 0xCB, 0x83, 0x7F, 0x9A, 0xE5, 0xE3, 0xF4, 0x2F, 0xF0, 0xEC, 0xE1, 0x15, 0x90, 0x82, 0x1B, 0x61, 0x2A, 0x2E, 0x37, 0xE5, 0x63, 0x5E, 0xB6, 0xF8, 0xB2, 0x89, 0x94, 0x67, 0xA2, 0x37, 0x3B, 0x5E, 0xF9, 0x00, 0x27, 0xA7, 0x75, 0xB1, 0xDB, 0xB2, 0x23, 0xC9, 0x39, 0x65, 0xC0, 0x46, 0x27, 0xB4, 0xFE, 0x37, 0xCD, 0x98, 0xD3, 0x85, 0x53, 0xEE, 0x33, 0xB4, 0xD3, 0x41, 0x0E, 0x68, 0xFE, 0xBF, 0xEF, 0xA0, 0x2B, 0xDB, 0x16, 0x0D, 0x5F, 0xF9, 0x23, 0xE3, 0x1F, 0x3E, 0xC6, 0xE1, 0x37, 0x68, 0x8A, 0x89, 0xC5, 0x6F, 0x1C, 0x46, 0x8B, 0x2D, 0x4E, 0x7C, 0x41, 0x73, 0x0B, 0xEC, 0xCE, 0x66, 0x68, 0xC8, 0xA4, 0x7E, 0x15, 0xDE, 0x59, 0x8C, 0x7B, 0xA5, 0xBD, 0xE3, 0x29, 0xCF, 0x8C, 0x9A, 0xC7, 0x9A, 0xBA, 0xDC, 0x60, 0x05, 0x4E, 0x2E, 0x51, 0xB5, 0xAC, 0x61, 0x15, 0x06, 0x3C, 0x85, 0xB6, 0xBE, 0xC2, 0x56, 0xB7, 0xBA, 0xCE, 0xD0, 0x93, 0x4C, 0xD7, 0x04, 0x23, 0x40, 0x1C, 0x60, 0x69, 0x50, 0xE3, 0x34, 0x18, 0x90, 0x86, 0x26, 0x60, 0x17, 0xD6, 0x58, 0x4D, 0xD1, 0xE2, 0xCB, 0x13, 0x4A, 0x6F, 0xD0, 0xFE, 0x4E, 0x68, 0xF9, 0x85, 0xE4, 0x1F, 0x6B, 0x9B, 0x6A, 0x7E, 0x1E, 0x08, 0xD9, 0xCD, 0x23, 0xDC, 0x49, 0x2F, 0x86, 0xAA, 0xD3, 0x72, 0x04, 0xCD, 0x73, 0x05, 0x4D, 0x3F, 0xC4, 0x7B, 0x03, 0xC4, 0xDD, 0xE5, 0x8D, 0x01, 0x37, 0x40, 0xEC, 0xBA, 0x0B, 0x8E, 0x2C, 0xB7, 0x17, 0x50, 0x72, 0xE5, 0xD7, 0x1D, 0x42, 0xFA, 0x6B, 0x8D, 0xF3, 0xB7, 0x26, 0x9F, 0xFB, 0xEB, 0xEA, 0x56, 0x20, 0x5E, 0x46, 0x03, 0xB2, 0xD6, 0xCF, 0x7E, 0x11, 0xEC, 0xC4, 0x5A, 0xAD, 0xD3, 0x7F, 0xAE, 0xB2, 0x8A, 0x2F, 0x4B, 0xE7, 0xB3, 0x5F, 0x04, 0xFE, 0xE9, 0xF8, 0xAC, 0xE2, 0xCB, 0x3F, 0x66, 0xA1, 0x05, 0xB4, 0xBA, 0xAA, 0x27, 0xDA, 0x13, 0x6E, 0xD1, 0xD7, 0x6E, 0xCC, 0xFD, 0x0A, 0x26, 0x9F, 0xD3, 0x18, 0x77, 0xEE, 0x56, 0xE8, 0xDD, 0x1E, 0x3B, 0xA3, 0x31, 0x85, 0x74, 0x40, 0xBE, 0xE2, 0x9E, 0x25, 0xA0, 0x01, 0x84, 0xBF, 0x17, 0xEC, 0x6C, 0xBB, 0x3C, 0x8C, 0x05, 0xA7, 0x7F, 0x8A, 0x3D, 0x7F, 0x9D, 0xA0, 0x4E, 0x6B, 0x33, 0x53, 0x40, 0x0D, 0x10, 0xDB, 0xAE, 0x1B, 0xEB, 0x53, 0xAE, 0xE3, 0x5A, 0x01, 0xE9, 0x0D, 0x06, 0x42, 0x01, 0xAB, 0x35, 0xEC, 0xBD, 0x51, 0x6F, 0xA5, 0xC5, 0xBF, 0xEA, 0x55, 0x20, 0xFD, 0x92, 0xE7, 0x82, 0x92, 0xC3, 0xF1, 0xE6, 0xC7, 0x72, 0x95, 0xC0, 0x5F, 0x8C, 0x04, 0x59, 0x03, 0x96, 0x79, 0xF9, 0xE4, 0x5D, 0x66, 0xD7, 0x5B, 0x5A, 0x9A, 0x73, 0x91, 0x22, 0x1A, 0x07, 0x90, 0x04, 0x0E, 0xED, 0x2B, 0xCC, 0xFD, 0x22, 0x40, 0xA3, 0x03, 0xC7, 0x5F, 0x83, 0x5C, 0x0E, 0xA7, 0x77, 0x79, 0xD2, 0xAA, 0xAC, 0xD5, 0x25, 0xA3, 0x3B, 0x6F, 0xD4, 0xE0, 0xC6, 0x59, 0xD7, 0x4D, 0x59, 0x7D, 0xF7, 0xD1, 0x58, 0x5F, 0xB4, 0x03, 0xA8, 0x34, 0x0A, 0x48, 0xBE, 0x41, 0xC3, 0x9C, 0xB2, 0xB0, 0x77, 0xE4, 0x80, 0x3A, 0x8C, 0xBA, 0x7D, 0xD6, 0x0A, 0x55, 0x35, 0x36, 0xCC, 0xA6, 0x57, 0x46, 0xB2, 0x82, 0x7C, 0x26, 0xD4, 0x72, 0xE5, 0x86, 0x4E, 0xBC, 0xA7, 0xAD, 0xDF, 0x89, 0x8A, 0xB7, 0xA0, 0x34, 0xF2, 0xE2, 0x00, 0xD1, 0x70, 0x06, 0x22, 0xF1, 0xDA, 0xA4, 0x86, 0x10, 0xBE, 0x68, 0x8E, 0x17, 0x6C, 0x45, 0x1F, 0xD7, 0xE4, 0xB9, 0xB0, 0xA2, 0x87, 0x60, 0x16, 0x19, 0xEC, 0x4C, 0xEF, 0xF0, 0x74, 0xC0, 0xA3, 0x41, 0x8D, 0xD3, 0x10, 0xE0, 0x1E, 0xF7, 0x0F, 0x6D, 0x97, 0xBE, 0xF9, 0xD6, 0xCD, 0x6A, 0x9C, 0xE5, 0xB0, 0xFA, 0x56, 0x5A, 0xBD, 0x3D, 0x4D, 0x18, 0x6E, 0x26, 0xD6, 0xAD, 0xD9, 0xFE, 0x49, 0xDC, 0x15, 0x02, 0xDA, 0x70, 0x94, 0x6A, 0xBD, 0xA7, 0x8D, 0x4B, 0x2E, 0x13, 0xD7, 0x25, 0x58, 0xF6, 0x9C, 0x9E, 0x55, 0x29, 0x6B, 0xD8, 0xBC, 0xCE, 0x16, 0x6B, 0x3F, 0x80, 0x11, 0x90, 0x37, 0x14, 0x31, 0x2B, 0xF1, 0x35, 0xDC, 0x65, 0xEC, 0xE5, 0x04, 0x32, 0x97, 0x0A, 0x86, 0xA7, 0xCD, 0x58, 0xD8, 0xFF, 0xC8, 0xBD, 0x2E, 0x78, 0x23, 0xCF, 0xAF, 0x32, 0xFB, 0x2A, 0x39, 0x78, 0x2C, 0x15, 0x8C, 0x74, 0xD0, 0x3E, 0x11, 0xDD, 0x37, 0xC8, 0x5E, 0x3E, 0x3F, 0xB5, 0x43, 0xF4, 0x4F, 0x12, 0x03, 0x0A, 0x0C, 0xAF, 0x7E, 0x9C, 0xBD, 0x94, 0x50, 0x9B, 0x0B, 0xEE, 0xC6, 0x2D, 0xFB, 0x65, 0x02, 0x30, 0x34, 0x4E, 0xFE, 0xDF, 0x39, 0x4E, 0x67, 0xCF, 0x63, 0x02, 0x5C, 0x01, 0x09, 0x80, 0x1B, 0x7E, 0x73, 0xBD, 0x7A, 0xCD, 0x6D, 0x12, 0x9F, 0xE2, 0xEF, 0x3B, 0xE3, 0x09, 0xC1, 0x6B, 0x4D, 0x72, 0x21, 0x9F, 0x7A, 0x3D, 0x6D, 0x70, 0x83, 0x14, 0x38, 0xD9, 0xF0, 0x46, 0x01, 0x7C, 0x00, 0x8D, 0xF5, 0x74, 0xC7, 0x0F, 0x4F, 0x4B, 0xBE, 0x28, 0xC0, 0xF9, 0x06, 0x8D, 0xBE, 0xBB, 0x67, 0xFA, 0x6B, 0x96, 0xC2, 0x65, 0x3A, 0xE3, 0x2B, 0x7E, 0x66, 0x32, 0x0C, 0xED, 0x48, 0xBF, 0xC7, 0x53, 0x3C, 0x5A, 0x27, 0xF5, 0xD3, 0x7A, 0x68, 0x0C, 0xF3, 0xC7, 0xE9, 0xA2, 0x4F, 0xB5, 0xAB, 0x70, 0xCC, 0x0A, 0x1C, 0x9F, 0xE2, 0x48, 0x67, 0xC0, 0x0E, 0x20, 0x39, 0x05, 0x7E, 0xAE, 0xFF, 0xBD, 0x0A, 0xD4, 0xDB, 0xF6, 0xF4, 0x66, 0x50, 0x7C, 0x5E, 0x2C, 0x8F, 0xCF, 0x4A, 0x8E, 0xC7, 0xFF, 0x30, 0x08, 0x0B, 0x20, 0xCE, 0x9E, 0x9C, 0x34, 0xEB, 0x8A, 0xB5, 0x6E, 0xC5, 0xC9, 0xF3, 0x3B, 0xF9, 0xDC, 0xA0, 0xF1, 0xBA, 0x46, 0x41, 0x22, 0xCB, 0x92, 0xFF, 0xFC, 0x2B, 0x08, 0x04, 0x7A, 0x3E, 0x93, 0x31, 0x22, 0x30, 0x03, 0x02, 0x32, 0xC3, 0x35, 0x4A, 0x77, 0xEB, 0x0A, 0x0F, 0x6F, 0xFA, 0xAE, 0x6E, 0xF6, 0x32, 0x9A, 0x6E, 0xC5, 0x4A, 0x80, 0x08, 0x40, 0x01, 0x9C, 0x06, 0x39, 0xA0, 0x0A, 0x98, 0x5C, 0x5F, 0x83, 0x97, 0x0B, 0x7F, 0x39, 0x30, 0x7B, 0x77, 0xFA, 0x5C, 0x93, 0xB0, 0xD9, 0xD7, 0x0C, 0xDB, 0x02, 0x5C, 0x7F, 0xD6, 0x41, 0x01, 0x4F, 0x20, 0xED, 0x97, 0x48, 0xCD, 0xD7, 0xB3, 0x5E, 0x6B, 0x7A, 0x3C, 0xDD, 0xA0, 0xC9, 0xBF, 0xE4, 0x21, 0x1E, 0x45, 0x23, 0x4B, 0x32, 0x84, 0xB7, 0x6C, 0x38, 0xDC, 0xA6, 0x20, 0xDD, 0xC3, 0x86, 0x59, 0x86, 0x1C, 0x2D, 0x4E, 0xDB, 0x2A, 0x18, 0x99, 0xA9, 0x21, 0xAD, 0xFB, 0xA2, 0x9C, 0xED, 0x80, 0xEC, 0x00, 0x65, 0x43, 0x1A, 0xB6, 0xCE, 0x1A, 0x92, 0x53, 0xB0, 0x90, 0x86, 0xC7, 0xFA, 0x9E, 0x71, 0x6F, 0xB2, 0x9F, 0x67, 0x5A, 0x64, 0x4F, 0x0C, 0xD1, 0x03, 0xD0, 0x1E, 0x1F, 0x4E, 0x8D, 0x5F, 0x52, 0x5B, 0x69, 0xA8, 0x37, 0x04, 0x10, 0xFF, 0xA1, 0xA6, 0xE4, 0x00, 0xCC, 0x6E, 0xD0, 0xF4, 0xEB, 0xF9, 0x0C, 0x9A, 0x2B, 0xCD, 0x34, 0xBF, 0x72, 0xB1, 0xAA, 0x75, 0xF2, 0x9A, 0xBF, 0x6D, 0xC7, 0x55, 0xB1, 0xDF, 0x9C, 0x1A, 0x6F, 0x4F, 0xCF, 0x21, 0x0D, 0xD0, 0x17, 0x1F, 0x97, 0x7E, 0xDA, 0xB2, 0x1F, 0xCF, 0xBC, 0x77, 0x73, 0x01, 0xCE, 0xFD, 0xA2, 0x02, 0x11, 0x40, 0x55, 0xBF, 0x2F, 0xF1, 0xF6, 0x7C, 0x6F, 0x5D, 0xFF, 0x20, 0x4F, 0xCF, 0x5F, 0xFC, 0xDF, 0x12, 0x57, 0xBE, 0x6C, 0x8E, 0xE8, 0x2C, 0x16, 0x6A, 0x00, 0x2C, 0xC0, 0xF1, 0x5F, 0xA3, 0xDB, 0x14, 0xE0, 0x03, 0xE8, 0x6A, 0xE0, 0xB3, 0x6A, 0x1C, 0x40, 0xBC, 0x71, 0x1A, 0x01, 0x84, 0xDE, 0xA0, 0xD9, 0x37, 0x8A, 0x37, 0x9E, 0x22, 0xA1, 0xDF, 0x6C, 0xCE, 0x5F, 0xBE, 0xBB, 0x84, 0xB0, 0xB5, 0x18, 0x21, 0x57, 0xD1, 0xD2, 0xE3, 0x24, 0x46, 0xD6, 0x71, 0xFB, 0x0E, 0x49, 0xDE, 0xC6, 0xA2, 0x8E, 0x88, 0x57, 0xBB, 0x57, 0x10, 0xFE, 0x0D, 0xA8, 0x21, 0x05, 0x50, 0x5F, 0xD5, 0x82, 0x01, 0x25, 0x80, 0x15, 0xA0, 0x0F, 0x89, 0x33, 0xF6, 0x93, 0xC7, 0x47, 0x87, 0x10, 0xDB, 0x11, 0x82, 0x1D, 0xBD, 0x5D, 0xC6, 0xD2, 0x84, 0x1B, 0x20, 0x8D, 0x7E, 0xF1, 0x94, 0x35, 0xCE, 0x82, 0xDE, 0x1D, 0x83, 0x00, 0x49, 0xC0, 0xAC, 0x21, 0x80, 0x36, 0xB8, 0x7E, 0x58, 0xA0, 0x7B, 0x75, 0xD0, 0x1C, 0x7B, 0xBE, 0x16, 0xF6, 0x2D, 0xCE, 0xE1, 0x08, 0xA0, 0x21, 0x90, 0x30, 0x3B, 0xA3, 0x3E, 0x92, 0x86, 0x7F, 0x77, 0xFF, 0xD5, 0x8E, 0xC7, 0x1F, 0x14, 0x5F, 0xEE, 0x38, 0x77, 0x80, 0x19, 0xBF, 0x35, 0x37, 0xCC, 0x00, 0xF6, 0x6E, 0x34, 0x38, 0x80, 0x35, 0x88, 0x3B, 0x35, 0x14, 0x00, 0x1E, 0x4F, 0x7D, 0x49, 0x92, 0x2B, 0x9D, 0x57, 0xED, 0xF7, 0xC1, 0xAC, 0x5F, 0x9D, 0x9A, 0x32, 0x41, 0xA1, 0x79, 0x46, 0x29, 0x6B, 0x70, 0x83, 0x1A, 0x7E, 0xBF, 0x65, 0xAE, 0x26, 0x93, 0xC6, 0x01, 0xB4, 0xC1, 0x0E, 0x50, 0x83, 0x1B, 0xFE, 0xF6, 0xB4, 0x18, 0x5D, 0xC5, 0x9C, 0xF4, 0x4F, 0x05, 0xC3, 0x30, 0x9C, 0x70, 0xC6, 0xC5, 0xE6, 0x57, 0x37, 0xDF, 0x8D, 0x8C, 0x99, 0xF2, 0xF0, 0x05, 0x53, 0x5B, 0x6E, 0x30, 0x96, 0xD3, 0x00, 0xC8, 0xA8, 0xE1, 0x00, 0xD7, 0x14, 0x6E, 0x88, 0xAE, 0x69, 0x82, 0xD9, 0x88, 0x06, 0x03, 0xBC, 0xCC, 0xC7, 0x85, 0xE6, 0x6E, 0x6D, 0x2B, 0x85, 0xA1, 0x04, 0x98, 0x36, 0x72, 0x8B, 0xD4, 0x16, 0x12, 0xF0, 0xDD, 0x8F, 0xB1, 0x3D, 0xF2, 0x0A, 0x08, 0x6F, 0xAC, 0x8E, 0xD6, 0xE3, 0x37, 0x68, 0xD9, 0x41, 0x43, 0x59, 0x40, 0xAA, 0x70, 0xB8, 0xF5, 0xFA, 0x2A, 0x07, 0x16, 0x0C, 0xDD, 0x9B, 0x19, 0xF2, 0x6F, 0xCA, 0xD8, 0x0A, 0xCB, 0x7F, 0xF9, 0x9A, 0x54, 0x07, 0x6D, 0x15, 0xB2, 0xD3, 0x56, 0x32, 0xA8, 0x21, 0x02, 0x1C, 0x5A, 0x13, 0xE4, 0x65, 0x55, 0xC5, 0x63, 0x46, 0x92, 0x75, 0x29, 0x61, 0x64, 0xB9, 0xEB, 0xF3, 0x0A, 0x85, 0x6C, 0xCF, 0xFC, 0xDF, 0xBA, 0x21, 0xA0, 0xD6, 0xDB, 0xD3, 0x1B, 0xBC, 0xDF, 0x9E, 0x0D, 0x69, 0xDC, 0xF0, 0xBE, 0x3D, 0xAD, 0xBE, 0xC3, 0x6D, 0x99, 0xC1, 0x54, 0x39, 0xF8, 0xCB, 0x09, 0x29, 0x69, 0xD7, 0xDD, 0x03, 0x2F, 0x64, 0x83, 0xE6, 0x4A, 0x2C, 0x20, 0x43, 0x83, 0x41, 0x2E, 0x51, 0x07, 0x4D, 0x72, 0x3B, 0xD0, 0x51, 0xCD, 0x69, 0x1F, 0x45, 0x40, 0x26, 0xE0, 0xEB, 0x95, 0x75, 0x74, 0x56, 0xA0, 0x6A, 0x8D, 0x20, 0x8F, 0x03, 0x28, 0xCF, 0x0B, 0xA6, 0x06, 0x70, 0x96, 0xBE, 0xC5, 0x2E, 0x7C, 0xFE, 0x86, 0x49, 0x8D, 0xD3, 0xA0, 0x05, 0x59, 0xA2, 0x70, 0x5B, 0x07, 0x59, 0x03, 0x68, 0x6B, 0xAF, 0xD6, 0xE1, 0xF8, 0xD6, 0xA3, 0x78, 0x99, 0xB6, 0x86, 0x61, 0x7E, 0xA5, 0x32, 0xFC, 0xE8, 0x84, 0xAA, 0xA3, 0x9C, 0x58, 0xB6, 0x81, 0x15, 0xC7, 0x35, 0xCD, 0xF6, 0x75, 0x3B, 0x27, 0xBC, 0x57, 0xF4, 0xC9, 0xF5, 0xFA, 0xB6, 0xE9, 0x48, 0x1D, 0xB4, 0xFC, 0x75, 0x56, 0x77, 0x52, 0x9D, 0xE9, 0xAA, 0x90, 0x0A, 0xB0, 0xCC, 0xE7, 0x66, 0x3B, 0x03, 0x70, 0xCC, 0x4F, 0xBB, 0x04, 0x10, 0x7B, 0xCD, 0xEC, 0x5C, 0xCF, 0xCA, 0x6D, 0x4B, 0x36, 0x64, 0xDE, 0x02, 0xCE, 0xD6, 0xFE, 0x39, 0xA0, 0x7C, 0xA3, 0x46, 0xFF, 0xAA, 0xDB, 0xBB, 0xFC, 0x5B, 0x9C, 0xF4, 0xBD, 0x4D, 0x0F, 0xD3, 0xF7, 0x2A, 0xE8, 0x27, 0x53, 0x7B, 0xFE, 0x56, 0x11, 0xD2, 0x1D, 0x21, 0xE1, 0x43, 0x38, 0x64, 0xB5, 0x3C, 0xD0, 0xEF, 0x09, 0x9A, 0xD6, 0xD6, 0xAC, 0x09, 0xF0, 0x32, 0xF8, 0xD5, 0x03, 0x9C, 0x5C, 0x59, 0x5E, 0x03, 0x74, 0x4E, 0x08, 0x1A, 0xC9, 0xBA, 0xE1, 0x46, 0x44, 0x3B, 0x14, 0xA7, 0x51, 0x0B, 0xDA, 0xA0, 0x1F, 0xDA, 0xAB, 0xD4, 0xA9, 0xE8, 0x63, 0x5A, 0x6B, 0x2C, 0x97, 0x28, 0x72, 0xB9, 0x1B, 0x70, 0xDC, 0xA0, 0xFD, 0x59, 0x0D, 0xA1, 0x2C, 0x3E, 0xF6, 0x38, 0x2E, 0xC2, 0x0E, 0x60, 0x86, 0xBF, 0x58, 0xF6, 0x7E, 0xE9, 0x67, 0xBC, 0x3F, 0xE3, 0x5D, 0xD9, 0x97, 0x36, 0x2E, 0xF6, 0x48, 0xFA, 0x03, 0x18, 0x2F, 0x83, 0x93, 0x9C, 0x0F, 0xCA, 0x59, 0x5A, 0x31, 0x35, 0x80, 0xF2, 0xD7, 0x10, 0xC2, 0x9D, 0xBF, 0x16, 0x40, 0x15, 0xF0, 0x46, 0xFC, 0x84, 0x37, 0xF6, 0x3B, 0xC0, 0x00, 0xCA, 0xC6, 0x88, 0xE4, 0xDA, 0xEA, 0xF0, 0xB6, 0xD8, 0x41, 0x93, 0xEF, 0xD0, 0xC1, 0xA7, 0xBE, 0xB5, 0x75, 0xC2, 0xFF, 0xA9, 0xE1, 0x78, 0xEB, 0x02, 0xBF, 0xC8, 0x7E, 0xD3, 0x7D, 0x10, 0x69, 0xFF, 0x21, 0x8B, 0xE9, 0x6C, 0x52, 0x53, 0x09, 0xCB, 0xEF, 0xE6, 0x77, 0xF6, 0xE8, 0xE6, 0xBB, 0xC6, 0x12, 0xD0, 0x5A, 0x45, 0x03, 0x6A, 0xAC, 0x85, 0x27, 0x06, 0x90, 0xCC, 0x82, 0x02, 0x2F, 0x43, 0x31, 0x0B, 0x40, 0x19, 0x70, 0x99, 0x15, 0x13, 0x3B, 0x2B, 0xC9, 0x48, 0x0D, 0x9B, 0x63, 0xB6, 0xCF, 0x1A, 0xB3, 0xAF, 0xD6, 0x50, 0x40, 0x62, 0x2E, 0x7B, 0xDA, 0xB6, 0x93, 0x76, 0xA3, 0xA6, 0xFF, 0xA2, 0x7B, 0x32, 0xF9, 0x6B, 0x83, 0x2F, 0x54, 0xF1, 0xDC, 0xE0, 0x43, 0x14, 0x84, 0x32, 0x73, 0x45, 0x1F, 0x21, 0x0C, 0xAD, 0xD0, 0x44, 0x2D, 0x49, 0xD8, 0x47, 0x35, 0x99, 0x89, 0x0E, 0x3D, 0xD3, 0xC6, 0x4D, 0x02, 0xE0, 0xEB, 0x1E, 0xD1, 0x70, 0x07, 0xD4, 0x1A, 0x01, 0x84, 0xCD, 0xC1, 0xDA, 0xA1, 0x00, 0xE9, 0xD4, 0x05, 0xDE, 0xF8, 0x64, 0x43, 0x14, 0xA0, 0x0B, 0x06, 0x4E, 0x35, 0x74, 0xC1, 0x1A, 0xBE, 0xA4, 0x6A, 0x0E, 0x68, 0x36, 0xBC, 0x71, 0x00, 0x69, 0xEC, 0x11, 0x10, 0xE6, 0x37, 0x68, 0x48, 0xA2, 0x79, 0x12, 0xB2, 0xB6, 0xC2, 0xDF, 0x69, 0x33, 0xB3, 0xCB, 0x04, 0x4C, 0x30, 0x89, 0x4A, 0x41, 0x87, 0x3C, 0x34, 0x6A, 0x19, 0xC6, 0xBD, 0x99, 0xED, 0x44, 0x87, 0xCD, 0x9B, 0x94, 0xDD, 0xBC, 0x85, 0x2E, 0x8D, 0x5A, 0x1A, 0x20, 0x39, 0xA5, 0xF1, 0xDA, 0x10, 0x9E, 0x9F, 0x0C, 0x78, 0xBA, 0xC0, 0x2E, 0xDF, 0x3D, 0xE9, 0xF3, 0xB2, 0x8B, 0x13, 0x6B, 0xE8, 0x32, 0xF5, 0x90, 0x5F, 0xFE, 0x00, 0xD4, 0x58, 0xFE, 0x00, 0xC1, 0x40, 0x66, 0x23, 0x1A, 0x04, 0x78, 0x6C, 0xA7, 0x8F, 0x39, 0x81, 0x8B, 0x0F, 0x3C, 0xA8, 0xA9, 0x18, 0x16, 0x91, 0x21, 0xDF, 0x4A, 0xA3, 0x54, 0xA8, 0x21, 0x2D, 0xBA, 0x61, 0x3C, 0xFE, 0x7D, 0x1F, 0x10, 0xC2, 0x73, 0xDC, 0xA6, 0x71, 0xC2, 0x59, 0x6A, 0x48, 0xBF, 0xFD, 0x28, 0x76, 0x6B, 0x24, 0x04, 0x18, 0x03, 0xDA, 0x38, 0x34, 0x2C, 0xA5, 0x99, 0x00, 0x2A, 0x40, 0x1B, 0xA1, 0xB3, 0xB6, 0xF2, 0xB4, 0x3B, 0xD6, 0x0B, 0x8E, 0xE6, 0x04, 0xEE, 0x48, 0xC0, 0x75, 0xB5, 0x6C, 0xCB, 0x42, 0x4C, 0x14, 0xAF, 0x7D, 0x40, 0x01, 0xA3, 0xB9, 0x71, 0x48, 0x02, 0x2C, 0x00, 0x35, 0xB8, 0x61, 0x79, 0x83, 0x16, 0xE8, 0xC0, 0xFE, 0x5E, 0x91, 0x82, 0xDD, 0x8C, 0x09, 0x2D, 0x19, 0x8E, 0xAA, 0x0A, 0x0A, 0x03, 0x15, 0x68, 0x59, 0x39, 0x1F, 0x54, 0xAB, 0xE6, 0xEB, 0x93, 0x97, 0xDC, 0xEA, 0x29, 0x22, 0x6E, 0xDD, 0x8E, 0x81, 0x38, 0x80, 0x15, 0xC0, 0x36, 0xAD, 0x1D, 0x3C, 0x1B, 0x35, 0xE7, 0xD0, 0x53, 0xF6, 0xA7, 0x9A, 0x49, 0xB4, 0x62, 0x80, 0x97, 0x3A, 0x83, 0x03, 0xA0, 0xFA, 0x35, 0x77, 0x20, 0x00, 0xE3, 0x1F, 0xFE, 0x3A, 0xE1, 0x53, 0xD5, 0x71, 0x6A, 0xE1, 0x2A, 0x3E, 0xBC, 0x21, 0x4B, 0xA6, 0x55, 0x37, 0x68, 0xF9, 0x3D, 0x97, 0x26, 0x7D, 0xC9, 0x3E, 0x3A, 0xC6, 0xAF, 0x58, 0x7C, 0x61, 0xF2, 0x14, 0xFE, 0x56, 0x4F, 0x30, 0x52, 0x6A, 0xED, 0x15, 0x1C, 0xDB, 0xAD, 0x69, 0xD5, 0x20, 0xB1, 0x7D, 0xCD, 0xB5, 0x15, 0x31, 0x17, 0x1C, 0xC9, 0x5C, 0x4D, 0x05, 0x90, 0x76, 0x98, 0x08, 0x88, 0x86, 0x26, 0x40, 0x35, 0x83, 0xE6, 0x06, 0x48, 0x63, 0x8F, 0x5D, 0x54, 0x07, 0x7C, 0x1B, 0xD6, 0x4A, 0xA3, 0x80, 0x8A, 0xDB, 0xEB, 0x06, 0xB0, 0x01, 0x72, 0x11, 0x8D, 0xDC, 0x5F, 0x5C, 0xCE, 0x15, 0x6F, 0xA5, 0xD5, 0x67, 0x0B, 0x6C, 0x82, 0x41, 0x05, 0x64, 0x86, 0xD2, 0x5A, 0x12, 0xA6, 0x72, 0x55, 0xA0, 0xE4, 0xC0, 0x1F, 0x34, 0x82, 0x90, 0x50, 0x81, 0x85, 0x0E, 0xDB, 0xD6, 0xA8, 0x75, 0x41, 0xE2, 0x65, 0x5D, 0x62, 0x35, 0x7C, 0x46, 0x01, 0x56, 0xB3, 0x13, 0xD6, 0x0F, 0x40, 0x4B, 0x04, 0xEE, 0x0C, 0x48, 0xCC, 0x56, 0x29, 0xC9, 0x59, 0x6A, 0x7B, 0xBE, 0x86, 0xB6, 0xB2, 0x60, 0x7B, 0xFC, 0x40, 0xFE, 0xA8, 0xA6, 0x6C, 0xBB, 0xDC, 0x3C, 0x4B, 0xA7, 0x70, 0x80, 0x53, 0xCB, 0xD0, 0x59, 0xD7, 0xB8, 0xA0, 0x7B, 0x45, 0xBC, 0x41, 0x23, 0x2C, 0x2A, 0x69, 0x57, 0x6A, 0x2B, 0x74, 0xE3, 0x65, 0xE5, 0x27, 0x1C, 0x0A, 0x75, 0x48, 0xB6, 0x2A, 0xE1, 0x36, 0xA3, 0x8E, 0x45, 0xCF, 0x36, 0x1D, 0x3A, 0xC6, 0x58, 0xA4, 0x51, 0xFA, 0x8C, 0x0E, 0xD3, 0xDA, 0x59, 0xCD, 0x80, 0x23, 0x53, 0x5E, 0x78, 0x72, 0x3D, 0x27, 0x0D, 0xD2, 0xD9, 0x2D, 0xF4, 0x9C, 0xD2, 0x64, 0x9E, 0x20, 0xA8, 0x66, 0xED, 0xA9, 0x6C, 0xBE, 0x4B, 0x5D, 0x80, 0xD8, 0x46, 0x3A, 0x35, 0x8D, 0xE2, 0x69, 0xD9, 0x34, 0x1B, 0x37, 0x0E, 0xA0, 0x04, 0x70, 0xAC, 0x23, 0x87, 0xAE, 0x3D, 0x8D, 0x08, 0x7B, 0xBE, 0xDA, 0xB7, 0x99, 0x91, 0xF9, 0xE8, 0x91, 0xE2, 0x36, 0x09, 0x26, 0x33, 0x24, 0xE6, 0x8B, 0xD0, 0x88, 0x18, 0x31, 0x15, 0xDE, 0x67, 0xD5, 0x8B, 0x4B, 0x9F, 0x81, 0x59, 0xBF, 0x21, 0x73, 0x8A, 0x5F, 0xB4, 0x71, 0xA8, 0xDF, 0x90, 0x0C, 0x5C, 0x1F, 0xB3, 0x20, 0x40, 0xF4, 0xE5, 0xBD, 0x9E, 0xCB, 0x6F, 0x3E, 0xA3, 0x8C, 0xAA, 0xD9, 0x66, 0x26, 0xFA, 0x63, 0x80, 0x48, 0x38, 0x90, 0x67, 0x41, 0x1A, 0x0E, 0xD4, 0x4E, 0x47, 0x0A, 0x20, 0xD1, 0x30, 0x80, 0xAB, 0x41, 0x00, 0xD9, 0xFC, 0x4E, 0xA3, 0x1B, 0x34, 0xFE, 0x2A, 0x02, 0x7A, 0xEC, 0x9F, 0x2A, 0x12, 0x1D, 0x2F, 0x68, 0x5F, 0x0A, 0x48, 0x5B, 0xBD, 0xE8, 0x28, 0x5C, 0x48, 0xEF, 0x37, 0xF1, 0x73, 0x54, 0xEA, 0xF8, 0x97, 0x6F, 0x91, 0x06, 0x02, 0x43, 0x40, 0x15, 0xE0, 0x0E, 0x5C, 0xD7, 0x37, 0xCE, 0x51, 0x9E, 0x22, 0x5A, 0x4F, 0xF0, 0x92, 0x35, 0x87, 0xCE, 0x44, 0x99, 0xAE, 0x37, 0xA4, 0xAE, 0x83, 0x56, 0x34, 0xAA, 0xE6, 0x01, 0x96, 0xB4, 0xB1, 0xDE, 0x89, 0x52, 0x80, 0xCB, 0x0C, 0x6F, 0x64, 0x83, 0x00, 0x53, 0x40, 0x13, 0xB0, 0x00, 0xEA, 0xDC, 0xA0, 0x09, 0xCC, 0x20, 0x8F, 0xFF, 0x23, 0xAC, 0xDE, 0xF1, 0x22, 0xF0, 0x83, 0xCD, 0x8C, 0x93, 0xE0, 0x66, 0x83, 0x97, 0xA8, 0xBB, 0x66, 0xD7, 0x89, 0x77, 0xC6, 0x7B, 0x24, 0xDC, 0xE3, 0xF9, 0xF7, 0xA8, 0x6C, 0x73, 0x3C, 0x1D, 0xBE, 0xD0, 0x12, 0xC0, 0x89, 0xD9, 0x4B, 0xA0, 0x05, 0xD0, 0x53, 0x0D, 0xCF, 0xE1, 0x19, 0x7C, 0x66, 0x62, 0x4E, 0x79, 0x95, 0x86, 0x69, 0xA9, 0x57, 0x08, 0x10, 0xFD, 0x39, 0xA6, 0x18, 0xD0, 0x86, 0x15, 0xE0, 0x17, 0xFB, 0x0F, 0x5B, 0x23, 0xBE, 0x2C, 0x81, 0x88, 0x1B, 0x34, 0x45, 0xDB, 0xC0, 0xCD, 0xA8, 0x72, 0x8E, 0x5E, 0x02, 0x77, 0x41, 0x59, 0x92, 0xB4, 0x9F, 0xA0, 0x40, 0x32, 0x1B, 0x55, 0x98, 0xD8, 0x55, 0xBC, 0xA7, 0xD1, 0xCF, 0x59, 0x8D, 0xC3, 0x0B, 0x1E, 0x1E, 0x13, 0x09, 0x24, 0x01, 0xD2, 0x3F, 0x2A, 0x0F, 0xC0, 0x71, 0xD3, 0xBC, 0xB3, 0xBA, 0x1E, 0x01, 0x1C, 0xFA, 0x3B, 0x1B, 0x23, 0xCF, 0xF1, 0x92, 0xDB, 0xF5, 0xDE, 0x66, 0x1E, 0x80, 0x14, 0xA0, 0x34, 0x3F, 0xED, 0x97, 0xA1, 0x52, 0xC3, 0x01, 0x37, 0xE0, 0xED, 0x26, 0xDC, 0x38, 0xC0, 0x59, 0x73, 0x65, 0xA3, 0x80, 0xBC, 0x87, 0xA8, 0xB7, 0xD2, 0x0C, 0x8A, 0xA1, 0x60, 0x7C, 0xA3, 0xF2, 0x90, 0xC5, 0x97, 0x66, 0x2B, 0x0A, 0xF8, 0xFB, 0x85, 0x42, 0xE4, 0xFB, 0x2D, 0x15, 0xCA, 0x84, 0x94, 0x2D, 0xBB, 0x15, 0xF9, 0x93, 0x6F, 0x93, 0xE2, 0x81, 0xE4, 0xCE, 0xAD, 0x33, 0x52, 0xAC, 0x00, 0xE3, 0x8B, 0xD1, 0xA0, 0xAE, 0x0F, 0x58, 0x01, 0xD4, 0x47, 0x9E, 0x50, 0x40, 0x78, 0x46, 0x99, 0x18, 0xE1, 0x15, 0x47, 0x5C, 0xCD, 0x3A, 0xAE, 0x0C, 0xB0, 0x01, 0xA4, 0x00, 0x07, 0x20, 0x05, 0xA8, 0x01, 0x26, 0x8D, 0x02, 0xDC, 0x80, 0xD4, 0x4E, 0xAD, 0x27, 0xC0, 0xDC, 0x38, 0x13, 0xC4, 0x0D, 0x9A, 0xDF, 0x62, 0xD2, 0x41, 0xF3, 0xCF, 0x98, 0xA3, 0x4A, 0x71, 0x90, 0x20, 0x99, 0xD6, 0xA4, 0xAA, 0x5D, 0x22, 0x66, 0xC3, 0x1D, 0xC7, 0x19, 0x15, 0x5E, 0xD1, 0xA9, 0xBB, 0x95, 0x59, 0x30, 0xC6, 0xC7, 0xFE, 0xDE, 0xFE, 0x51, 0xD5, 0xCB, 0x49, 0x01, 0xE9, 0x9F, 0x5F, 0x09, 0xB8, 0x02, 0xC2, 0xC0, 0xB1, 0xB9, 0xC6, 0xD4, 0xE6, 0x52, 0x13, 0x7F, 0xEF, 0x93, 0xD6, 0x93, 0xF4, 0x8A, 0x0B, 0xE0, 0x14, 0x9E, 0x79, 0x9F, 0xCE, 0xF0, 0xEA, 0x80, 0xD4, 0x84, 0x52, 0xC3, 0xE7, 0x49, 0x3B, 0x1A, 0xC5, 0x0D, 0x02, 0x32, 0x1B, 0x04, 0x44, 0x00, 0xEF, 0x92, 0x43, 0xDA, 0x51, 0x0B, 0xDC, 0xD1, 0x4B, 0xB1, 0x1A, 0x24, 0xC7, 0x9B, 0x20, 0xB2, 0xDA, 0x39, 0x4B, 0x3F, 0x90, 0xE2, 0x93, 0xA3, 0x76, 0x15, 0xB2, 0xE5, 0x56, 0xA4, 0xDB, 0x0A, 0x26, 0x7A, 0xC5, 0xDD, 0xD5, 0x41, 0x00, 0xDF, 0xE2, 0x9C, 0x03, 0xC7, 0x10, 0x11, 0x53, 0x80, 0x68, 0xAA, 0x94, 0xA5, 0xE6, 0x1B, 0x44, 0x03, 0x38, 0xDA, 0xD1, 0x3A, 0x00, 0xE9, 0x14, 0xB5, 0x11, 0x03, 0xDE, 0x71, 0x25, 0x06, 0x24, 0x01, 0x6B, 0x78, 0x00, 0xD1, 0xA8, 0xDB, 0x85, 0xE4, 0x80, 0x9C, 0x05, 0x02, 0xD8, 0x1A, 0x01, 0x88, 0x00, 0x7E, 0x97, 0x1A, 0x9A, 0x09, 0x98, 0xA0, 0x50, 0x88, 0xA3, 0xFF, 0x38, 0x21, 0x56, 0xF6, 0x6F, 0x27, 0x17, 0xEC, 0x9A, 0x51, 0x38, 0x41, 0x86, 0x23, 0x09, 0x50, 0xD6, 0xE9, 0x8D, 0x2D, 0x82, 0x91, 0x3F, 0xAF, 0x72, 0x2C, 0xED, 0xE1, 0x55, 0x48, 0xCB, 0xAB, 0x50, 0x65, 0x4E, 0xC9, 0x70, 0x5E, 0x9D, 0xE3, 0xD1, 0x30, 0xE0, 0xD8, 0xCA, 0x94, 0x33, 0x70, 0x64, 0x56, 0x5C, 0x9C, 0x80, 0xB0, 0x69, 0xB5, 0x24, 0xF1, 0xEB, 0xAC, 0xCB, 0x8D, 0x35, 0x8E, 0xBB, 0xD6, 0x00, 0xB5, 0xA3, 0x8D, 0x7B, 0x7C, 0x6A, 0xA4, 0x03, 0x23, 0x25, 0x8A, 0xA0, 0xD5, 0xA7, 0x51, 0x93, 0xA8, 0x2F, 0xE3, 0xCD, 0x47, 0x90, 0xF4, 0x10, 0xFD, 0xAA, 0xEC, 0x47, 0x04, 0x69, 0x52, 0xFD, 0x70, 0x8E, 0x05, 0x0E, 0xFD, 0x2E, 0x73, 0x7C, 0x88, 0xAE, 0xA0, 0xD9, 0x99, 0x9D, 0x5C, 0x11, 0x80, 0x37, 0xC4, 0xE6, 0x5F, 0x46, 0x0D, 0x38, 0xB1, 0x06, 0xBC, 0x46, 0x83, 0x00, 0xF5, 0x99, 0xAF, 0xCF, 0xDD, 0x58, 0x5C, 0x0D, 0x59, 0x9E, 0x23, 0xB9, 0x46, 0x7B, 0x49, 0x23, 0x96, 0x98, 0x45, 0x00, 0x51, 0xC0, 0x18, 0x70, 0xFB, 0xA5, 0x74, 0x93, 0x1F, 0xF3, 0xD7, 0x42, 0x3B, 0x68, 0x8C, 0xA9, 0x51, 0x7C, 0x6C, 0x78, 0x1C, 0xDA, 0x17, 0xBB, 0xEF, 0xCA, 0x83, 0xA0, 0x11, 0x21, 0x77, 0x2B, 0x9D, 0xFE, 0x2E, 0xD3, 0x51, 0x54, 0x71, 0x5E, 0x9D, 0xB2, 0xC2, 0xB3, 0xD6, 0x1F, 0xD5, 0x38, 0x80, 0x78, 0xC7, 0x67, 0x69, 0xF1, 0xA4, 0xC1, 0xD4, 0x60, 0x80, 0x56, 0x9A, 0x5F, 0x0C, 0x60, 0x6A, 0x1C, 0x80, 0xAC, 0x51, 0x80, 0x26, 0x50, 0x31, 0x23, 0xA2, 0xB5, 0xA6, 0xF0, 0x72, 0xC3, 0x97, 0x27, 0x18, 0x03, 0x14, 0x0D, 0x05, 0x8E, 0xFD, 0xEF, 0xA1, 0x4D, 0x08, 0x1A, 0x7D, 0xED, 0x2A, 0x9C, 0x01, 0xC7, 0x73, 0x41, 0x26, 0x57, 0x32, 0xBE, 0x7B, 0x02, 0x57, 0xE2, 0xE7, 0x08, 0xA3, 0x0B, 0x2D, 0x18, 0x8F, 0x40, 0xF8, 0x9C, 0x69, 0xCF, 0xBB, 0xB6, 0x22, 0x6B, 0xDD, 0x6B, 0x35, 0x7C, 0x29, 0x8B, 0x0D, 0x90, 0xC6, 0x89, 0x86, 0x02, 0xDC, 0x90, 0x9A, 0x3D, 0x4A, 0xB6, 0xBD, 0xBA, 0x76, 0xBB, 0xBA, 0xCC, 0x70, 0xE9, 0x32, 0xF1, 0xA8, 0xF5, 0x47, 0x6F, 0x37, 0x6B, 0x4E, 0xC0, 0xD6, 0xE8, 0x0D, 0x8F, 0x1F, 0x69, 0x61, 0x69, 0x28, 0xAD, 0x93, 0x1A, 0xF3, 0xD7, 0xCA, 0xCE, 0x52, 0x5F, 0xF0, 0xD2, 0x03, 0x16, 0x6A, 0x84, 0x1A, 0xA8, 0x46, 0x21, 0xF5, 0x9F, 0xDD, 0x21, 0x15, 0xFD, 0x90, 0xA7, 0xC2, 0xAA, 0xE9, 0xB7, 0xEB, 0x50, 0xC7, 0x27, 0x69, 0xAA, 0x9A, 0xDC, 0xE6, 0xC1, 0x34, 0x74, 0x4A, 0x17, 0x83, 0x00, 0xE3, 0x2D, 0xB2, 0x9E, 0x15, 0x2C, 0xD9, 0xBA, 0x20, 0xFB, 0x51, 0x2D, 0x30, 0x01, 0xF2, 0x3D, 0xD0, 0x3F, 0x64, 0x69, 0x74, 0x1A, 0x02, 0xC8, 0x01, 0x6C, 0xCF, 0x8B, 0xA0, 0xF9, 0x45, 0x5D, 0xEA, 0x34, 0x25, 0x20, 0x5E, 0xD0, 0xE4, 0xF3, 0xB7, 0x3A, 0x36, 0x4B, 0x2C, 0xC4, 0xFA, 0x75, 0xB2, 0xBB, 0x04, 0x74, 0xF4, 0xCE, 0xF0, 0x76, 0x50, 0x6A, 0x7B, 0xC8, 0x33, 0x9A, 0x09, 0x34, 0xF6, 0xFC, 0x90, 0xC3, 0x80, 0x2F, 0x5F, 0xA5, 0x58, 0x1A, 0x56, 0xB2, 0x65, 0xB9, 0x42, 0x80, 0xDB, 0xFA, 0xB4, 0xB6, 0x2C, 0x6A, 0x9C, 0x8B, 0x33, 0x7F, 0x22, 0x3E, 0x83, 0x14, 0xF3, 0xFF, 0x71, 0x6E, 0x24, 0x10, 0xB2, 0xCB, 0x2C, 0x2B, 0xC4, 0x0C, 0x90, 0x36, 0x18, 0x38, 0xBB, 0x94, 0x4C, 0x8D, 0x98, 0x32, 0x6F, 0x66, 0x0C, 0xA6, 0x29, 0xF3, 0xAF, 0x0C, 0xE5, 0x69, 0x68, 0xEB, 0x66, 0x74, 0x61, 0x50, 0xBB, 0xE7, 0x94, 0xD0, 0x07, 0xD6, 0xC0, 0x4D, 0xAE, 0x6A, 0x4E, 0x7B, 0x93, 0x66, 0xC5, 0xD8, 0xCF, 0x0D, 0x18, 0x93, 0x62, 0x08, 0x38, 0x31, 0x75, 0xB3, 0x99, 0x80, 0xC4, 0x1C, 0x38, 0x65, 0x05, 0xB0, 0xCE, 0x91, 0x8B, 0xA2, 0xCB, 0x5B, 0xA1, 0x00, 0x31, 0x80, 0x56, 0xA3, 0x99, 0x09, 0x10, 0xD4, 0x48, 0x20, 0xA5, 0xE1, 0x8D, 0x04, 0x2A, 0xE7, 0x5E, 0xC6, 0xD1, 0xD0, 0xC6, 0x01, 0xA8, 0x71, 0x68, 0x79, 0xDA, 0xFB, 0x8D, 0x9A, 0x7D, 0x7E, 0xE7, 0xF2, 0xD7, 0x58, 0x20, 0x5F, 0x5E, 0xCD, 0x20, 0xEF, 0x6B, 0xDB, 0xF3, 0x30, 0x43, 0x85, 0x9F, 0x14, 0x3F, 0x0E, 0xFA, 0x21, 0x8E, 0x59, 0x6B, 0xA7, 0xB7, 0x09, 0x29, 0xAD, 0x77, 0x28, 0xCF, 0x50, 0xD0, 0xAA, 0xB8, 0x9F, 0xB5, 0x4B, 0x0B, 0x01, 0xE7, 0x2D, 0x04, 0x40, 0x6B, 0xAE, 0xA3, 0xE3, 0x0D, 0x6B, 0x70, 0xC3, 0x01, 0xE1, 0xA9, 0x22, 0xA0, 0xFD, 0x56, 0x58, 0xB2, 0x6D, 0x13, 0x60, 0x77, 0x57, 0x95, 0x35, 0x64, 0xBE, 0xC8, 0x63, 0xD5, 0xB8, 0xF3, 0xE9, 0xDD, 0x6E, 0xD0, 0xFC, 0x5F, 0xC5, 0x77, 0x2B, 0xBF, 0x41, 0x43, 0xA3, 0xAC, 0x62, 0x63, 0x3B, 0x72, 0x5B, 0xB2, 0x3F, 0xD8, 0xC1, 0xA1, 0x8D, 0x92, 0x6A, 0x4E, 0x33, 0x3E, 0x3B, 0x68, 0x6B, 0x2E, 0x6F, 0x05, 0x90, 0x09, 0xE8, 0x1A, 0xC4, 0xC9, 0x35, 0xFF, 0xDA, 0x16, 0x7B, 0x1E, 0xDC, 0x7C, 0xB2, 0xD8, 0x80, 0x93, 0x2B, 0x68, 0xE7, 0xCC, 0xE0, 0x71, 0xC3, 0x6C, 0x3D, 0x8B, 0xD1, 0xA8, 0x25, 0x50, 0x60, 0xA0, 0x6C, 0x1E, 0x47, 0x24, 0xF6, 0x0B, 0x7D, 0xD7, 0x41, 0xA7, 0x88, 0x57, 0xF5, 0x46, 0x2D, 0xBE, 0xE3, 0xAC, 0x47, 0x7D, 0x5E, 0x00, 0x96, 0xF6, 0x8F, 0xBF, 0xCC, 0x42, 0x21, 0x78, 0x37, 0xC5, 0xA7, 0xFD, 0xA2, 0x21, 0x6A, 0x81, 0x36, 0x4F, 0x37, 0xD2, 0x5A, 0x5D, 0x8C, 0xC2, 0xB3, 0x0F, 0x43, 0xCE, 0xAC, 0xE1, 0x5D, 0x0B, 0x83, 0x52, 0xE0, 0xC4, 0xAA, 0xAA, 0x17, 0xE0, 0x3B, 0xBE, 0x05, 0xC8, 0xF2, 0x3E, 0xC9, 0x86, 0x37, 0x2C, 0xE6, 0xE3, 0x96, 0x36, 0xBB, 0x32, 0xEA, 0xB5, 0xB8, 0xFE, 0x98, 0xF6, 0xAC, 0xB2, 0xC6, 0x98, 0x55, 0xC3, 0x80, 0xB0, 0xA5, 0x44, 0xBF, 0x48, 0xA0, 0xEC, 0x06, 0x2D, 0x3F, 0x61, 0x02, 0xDD, 0xB1, 0x21, 0x54, 0x3D, 0xB8, 0x0C, 0xAD, 0x9F, 0x5C, 0x86, 0x82, 0xAE, 0x77, 0xCE, 0x94, 0x02, 0x07, 0x56, 0xAD, 0x29, 0xF4, 0x96, 0x35, 0x44, 0xA4, 0x6E, 0x4E, 0xAA, 0x96, 0x61, 0x53, 0x02, 0xBC, 0xE4, 0xC2, 0xC4, 0xCB, 0xA6, 0x40, 0x1A, 0x01, 0xB8, 0xCC, 0xBD, 0x2D, 0x1A, 0x6A, 0x7B, 0x10, 0x66, 0x23, 0x00, 0x8B, 0xE9, 0x3A, 0x21, 0x8D, 0xDC, 0xC3, 0xDB, 0x6A, 0x19, 0x5A, 0xE7, 0xAA, 0xB3, 0x68, 0x83, 0x81, 0x54, 0x20, 0xCE, 0xAA, 0xC8, 0x70, 0x6F, 0xCC, 0x2F, 0x68, 0xF5, 0xCF, 0xDA, 0x8C, 0xD6, 0x3A, 0xCD, 0xF0, 0xAE, 0xA0, 0xDF, 0x6D, 0x28, 0x90, 0xFE, 0xD3, 0xC4, 0x62, 0x48, 0x69, 0xDF, 0xE2, 0x40, 0x3E, 0x6D, 0x7B, 0xA0, 0xF3, 0x30, 0x7C, 0x88, 0x77, 0x1F, 0x8E, 0xD3, 0xC8, 0x59, 0x8E, 0x32, 0x1D, 0xD3, 0xFB, 0x86, 0xA9, 0xE4, 0x48, 0x38, 0x86, 0x00, 0xEC, 0xF3, 0x7A, 0xA1, 0x0D, 0xB6, 0xD5, 0x9B, 0xC8, 0x7B, 0x3F, 0x98, 0x69, 0xC4, 0x8C, 0x99, 0xAC, 0x25, 0x9E, 0xB1, 0x13, 0x5E, 0x03, 0xDB, 0xBD, 0x61, 0x8D, 0x03, 0x18, 0xCF, 0xF0, 0x9A, 0x01, 0xC9, 0x1D, 0x34, 0x39, 0xDF, 0xDA, 0xD2, 0xCA, 0x4F, 0xD8, 0x77, 0xA2, 0xBA, 0x9A, 0x84, 0x52, 0x5E, 0x5A, 0xE0, 0x59, 0x4B, 0x87, 0xF0, 0x90, 0x09, 0xAF, 0x44, 0x52, 0x04, 0x6B, 0xA7, 0x88, 0x28, 0x66, 0xFD, 0xB3, 0x3A, 0x5A, 0x79, 0xCE, 0x68, 0x77, 0x72, 0x3E, 0x1F, 0x9E, 0x41, 0x79, 0x07, 0xAD, 0x12, 0xF0, 0x86, 0x06, 0x20, 0x34, 0x07, 0x10, 0x98, 0x01, 0xBC, 0x6C, 0x4E, 0xDC, 0x01, 0x6B, 0xE4, 0xF3, 0xA3, 0x9E, 0x65, 0x37, 0x61, 0xC0, 0x4E, 0x23, 0x01, 0x8F, 0x35, 0x1C, 0xEA, 0xD5, 0x7C, 0x16, 0x0E, 0x70, 0xAC, 0x21, 0x8D, 0x02, 0xE4, 0x05, 0x0D, 0x8E, 0x26, 0xCE, 0x78, 0x20, 0x93, 0x30, 0x04, 0x54, 0xBE, 0xDB, 0x14, 0xCE, 0xEE, 0xF8, 0xDB, 0xC2, 0xFE, 0xB6, 0x4A, 0x0D, 0xCB, 0x95, 0xED, 0xC7, 0x8C, 0x9F, 0x29, 0x51, 0x8B, 0xB7, 0xA8, 0x6A, 0x68, 0xBA, 0xF3, 0x69, 0x40, 0x69, 0xB9, 0x39, 0x9C, 0xF1, 0x64, 0x20, 0x83, 0x36, 0x83, 0x76, 0x00, 0xCA, 0x19, 0x26, 0xA6, 0xD5, 0x00, 0xD6, 0xA8, 0xBB, 0xB6, 0xD6, 0x50, 0xF5, 0x5A, 0xE3, 0x1A, 0xD8, 0x01, 0x31, 0xC0, 0x14, 0xC8, 0x1B, 0x18, 0x6D, 0x9C, 0x59, 0x33, 0x8C, 0x25, 0xA3, 0x88, 0x7C, 0x65, 0xFB, 0x0E, 0x1A, 0x7F, 0x2A, 0x2B, 0x0D, 0x74, 0xAD, 0xB8, 0xF7, 0xEB, 0xB6, 0x0C, 0xBE, 0x60, 0x19, 0xD8, 0xC7, 0xAB, 0x3E, 0x30, 0x67, 0xB7, 0x02, 0xC4, 0x74, 0x83, 0xF1, 0x11, 0xB4, 0x2E, 0xB4, 0x75, 0x26, 0xAE, 0x25, 0xDA, 0x02, 0x64, 0x02, 0xB7, 0xBB, 0x38, 0x6A, 0xD6, 0x59, 0xEE, 0x90, 0xC3, 0x74, 0x40, 0xEA, 0xF6, 0x12, 0x7C, 0x90, 0xD7, 0x40, 0x3A, 0x0B, 0x08, 0xA6, 0x73, 0x15, 0xC6, 0x99, 0x31, 0x37, 0x9F, 0x4B, 0x45, 0xE9, 0xD7, 0x24, 0x91, 0x46, 0xE9, 0x1C, 0xB3, 0x25, 0xDA, 0x10, 0x80, 0x13, 0xA0, 0x6A, 0x30, 0xC0, 0x04, 0x98, 0xDC, 0xA0, 0xC9, 0x1B, 0x6B, 0x6F, 0x9F, 0x1A, 0x32, 0x86, 0x03, 0x1D, 0x1D, 0xFA, 0x7E, 0xB8, 0xA5, 0x20, 0xE4, 0xF0, 0xF2, 0x16, 0x2B, 0x9E, 0x19, 0x22, 0x59, 0x69, 0x35, 0x7E, 0x2E, 0x4D, 0xDE, 0x09, 0x6B, 0x02, 0xAE, 0xF6, 0xD8, 0x6E, 0x62, 0xAB, 0xBF, 0x25, 0xE4, 0x1A, 0x23, 0x0E, 0xE3, 0xC8, 0x08, 0x40, 0xCE, 0x1C, 0x6B, 0x4F, 0x32, 0xEB, 0x2C, 0xBA, 0xA4, 0xC4, 0xA7, 0x00, 0xB7, 0x39, 0xA9, 0xEC, 0x26, 0x13, 0x8D, 0x81, 0x8C, 0xBB, 0x47, 0x08, 0x40, 0x0E, 0x88, 0xCD, 0x1C, 0x5D, 0x58, 0x23, 0x1A, 0x04, 0xF8, 0xF6, 0xE8, 0x3F, 0x40, 0x65, 0x07, 0x4D, 0x91, 0xDE, 0x48, 0xC5, 0x85, 0x3D, 0x08, 0xC9, 0xC3, 0xE2, 0x2F, 0x17, 0x69, 0x3D, 0x37, 0x3B, 0xC2, 0x70, 0x00, 0xF0, 0xDE, 0xAB, 0x43, 0x3B, 0x33, 0xB4, 0xAB, 0x52, 0xB1, 0xEA, 0x9F, 0x39, 0xDB, 0x3B, 0x43, 0x00, 0x79, 0xA5, 0xF2, 0xF9, 0xEC, 0x09, 0xCD, 0x97, 0xBE, 0xC5, 0xBA, 0xAB, 0xDA, 0xBA, 0xEE, 0xF3, 0xB4, 0x40, 0xA9, 0xF8, 0x61, 0x64, 0x6E, 0x8D, 0x94, 0x59, 0x11, 0x3E, 0xF1, 0x3F, 0x1C, 0xAE, 0x12, 0x08, 0x6B, 0x10, 0xE0, 0x0D, 0xCD, 0xC6, 0x69, 0x38, 0x90, 0x79, 0x57, 0x1A, 0x4E, 0x66, 0xA7, 0x1C, 0x5D, 0xFF, 0xD0, 0x6D, 0x90, 0x88, 0x7D, 0x21, 0x54, 0x37, 0x74, 0x93, 0xA5, 0x62, 0x26, 0x86, 0x39, 0x5E, 0xBA, 0x42, 0x48, 0xDC, 0xEE, 0x0C, 0xD1, 0x3B, 0xEF, 0xDF, 0x4D, 0x22, 0x97, 0x10, 0xA6, 0x5F, 0x04, 0x7A, 0xA6, 0xFD, 0x50, 0x39, 0x20, 0xD1, 0x21, 0xB4, 0x5D, 0x69, 0x07, 0x0E, 0xCD, 0x7A, 0x9B, 0x3A, 0x20, 0xD5, 0x20, 0x40, 0xF9, 0xCF, 0xD3, 0x2A, 0x5E, 0xC1, 0xD4, 0xD7, 0xE4, 0xE6, 0x48, 0xA0, 0x62, 0x3B, 0x95, 0x25, 0xA0, 0x05, 0x38, 0x35, 0xB8, 0xA1, 0x8D, 0x3D, 0xE1, 0x4C, 0x80, 0x8A, 0x0E, 0x9A, 0x7F, 0x29, 0xDB, 0x60, 0xFA, 0xD4, 0x43, 0x27, 0x7C, 0x54, 0xA5, 0x4E, 0x16, 0x1E, 0xAB, 0xE4, 0xF6, 0x21, 0x97, 0xCE, 0x4F, 0x27, 0x26, 0xB2, 0xEF, 0x52, 0x9E, 0xC8, 0xDB, 0xA6, 0x3B, 0xBB, 0x1F, 0xB3, 0x89, 0xA0, 0x12, 0xC0, 0x17, 0xBD, 0x37, 0x3A, 0xFC, 0xBE, 0x5D, 0xF7, 0xE8, 0xE6, 0x15, 0x01, 0xA4, 0xB3, 0xDE, 0x29, 0x00, 0xEB, 0xF5, 0xED, 0x00, 0x48, 0xE6, 0x2C, 0x0B, 0x69, 0x70, 0x23, 0xB9, 0xF7, 0xC9, 0xDB, 0xBD, 0x56, 0x40, 0xF8, 0xB4, 0xB5, 0x90, 0x03, 0x28, 0x03, 0xDE, 0xC8, 0xDB, 0x2C, 0x23, 0x8D, 0xFE, 0x62, 0x55, 0x83, 0x81, 0x0C, 0xE0, 0x19, 0xE0, 0x57, 0x07, 0x2D, 0xE0, 0xFB, 0xE2, 0xFE, 0xAF, 0x08, 0xC3, 0xDE, 0xFE, 0xEA, 0x9F, 0xEC, 0x81, 0xB3, 0x57, 0x32, 0x12, 0xCC, 0x61, 0x9D, 0x86, 0xCD, 0xB6, 0xCE, 0xD9, 0x2B, 0xED, 0xB9, 0xB2, 0xCC, 0x23, 0x52, 0xFD, 0xAA, 0xFA, 0xCA, 0xF3, 0x77, 0x5B, 0x76, 0x7D, 0x6B, 0x18, 0x80, 0x2E, 0xA9, 0x69, 0x08, 0xE0, 0x34, 0x61, 0x09, 0xF8, 0x32, 0x6B, 0x7A, 0x0D, 0xAF, 0x0C, 0x58, 0x23, 0x0F, 0x50, 0x34, 0xC7, 0x96, 0x93, 0x00, 0xD2, 0x50, 0x6D, 0xC8, 0x5A, 0xCB, 0xB2, 0x86, 0x86, 0xDA, 0x92, 0x27, 0x48, 0xFE, 0xD3, 0xCF, 0x9D, 0xFC, 0xDE, 0xD8, 0xE7, 0x50, 0x87, 0x10, 0xFE, 0xC2, 0xD4, 0xEA, 0xF8, 0x08, 0x0F, 0x94, 0xB8, 0xE9, 0x8C, 0xA9, 0xBC, 0xAA, 0xAB, 0xB7, 0x8C, 0xE5, 0xBE, 0xD4, 0x66, 0xF1, 0x37, 0xFC, 0x6F, 0x17, 0xB3, 0x27, 0xAE, 0xC8, 0xE5, 0x21, 0x21, 0x34, 0x33, 0x49, 0x6C, 0x53, 0x64, 0x2C, 0x2B, 0x01, 0xC4, 0xA7, 0x41, 0x80, 0x74, 0x94, 0x5F, 0x8A, 0xEE, 0xD9, 0x9B, 0xCE, 0x06, 0x15, 0x4B, 0x20, 0xCF, 0x54, 0x50, 0x11, 0x01, 0x62, 0x80, 0xD6, 0x82, 0x01, 0xA2, 0x0D, 0x6E, 0x38, 0xE0, 0x7A, 0x83, 0xD6, 0xB6, 0x43, 0xF4, 0xE7, 0xD4, 0x51, 0xE8, 0x9E, 0xF5, 0x2F, 0x5B, 0xC1, 0x50, 0xE8, 0xB0, 0x23, 0x1B, 0xA3, 0x37, 0x53, 0x53, 0xD3, 0x38, 0xC1, 0x77, 0x93, 0xB1, 0x4F, 0xC7, 0x0D, 0xF1, 0xE9, 0x20, 0xE7, 0x8D, 0xE3, 0xB3, 0x5D, 0xA0, 0x1A, 0x96, 0x80, 0x6C, 0x77, 0xF3, 0x04, 0x84, 0x77, 0xB4, 0x1A, 0x0C, 0x48, 0x23, 0xDF, 0xA5, 0x6A, 0x25, 0x59, 0x96, 0xE6, 0x85, 0x7D, 0x49, 0x5F, 0x04, 0x08, 0x5F, 0x83, 0xA6, 0xAB, 0xE1, 0xEB, 0x0A, 0x5A, 0xC0, 0x6D, 0xAD, 0xA7, 0x1B, 0x34, 0x3D, 0xFF, 0x02, 0x25, 0xF6, 0x17, 0x34, 0xFD, 0x12, 0x22, 0xAD, 0x88, 0x3C, 0x85, 0x04, 0x93, 0x05, 0xD2, 0xA8, 0x46, 0x58, 0xFB, 0x6C, 0xE3, 0x1A, 0x95, 0xB7, 0xD2, 0xFE, 0x6E, 0xD5, 0x6B, 0x80, 0x96, 0x18, 0x40, 0x31, 0xFD, 0xC0, 0x6A, 0x1B, 0xE8, 0x3B, 0x40, 0x39, 0xD3, 0x5D, 0x7E, 0x66, 0x9E, 0xC1, 0xF6, 0x60, 0xD9, 0x65, 0xB0, 0xA6, 0x06, 0x8C, 0xB4, 0xFE, 0x5F, 0xD6, 0xBA, 0x96, 0xCC, 0x96, 0x0D, 0x10, 0x06, 0x6C, 0x99, 0x58, 0x95, 0x36, 0x08, 0xC8, 0xB3, 0x6C, 0x22, 0x1B, 0x2E, 0x40, 0xF9, 0x0D, 0x1A, 0x7A, 0x07, 0x70, 0x5C, 0x52, 0xB4, 0xAB, 0xB0, 0xC3, 0xD0, 0xC4, 0xD0, 0x6A, 0x86, 0xC3, 0xB7, 0x25, 0xA6, 0xB1, 0x49, 0xFF, 0xCE, 0x1C, 0xF3, 0xED, 0xA9, 0xCB, 0x76, 0x88, 0xEB, 0x3E, 0x12, 0x4B, 0x8F, 0xB7, 0xEE, 0xC3, 0x47, 0xA6, 0xCA, 0x5B, 0x5E, 0x06, 0x7E, 0x9D, 0x27, 0x12, 0xB8, 0x61, 0xCA, 0xF8, 0xE5, 0xD8, 0xE2, 0xC0, 0xCC, 0x79, 0xDC, 0x53, 0xA2, 0xFD, 0xD9, 0x04, 0x00, 0xA5, 0x6B, 0xB4, 0x7D, 0x00, 0xDA, 0x88, 0x02, 0x2A, 0x1A, 0x0A, 0x64, 0x00, 0x41, 0xEB, 0x46, 0xC0, 0xEF, 0x58, 0xD0, 0x41, 0xE3, 0xEF, 0x54, 0x5B, 0x85, 0xDB, 0x66, 0x78, 0x4D, 0x53, 0x4D, 0xF1, 0x36, 0xC4, 0xF2, 0xF6, 0x26, 0x0C, 0xA8, 0x87, 0xDC, 0xA6, 0x71, 0x82, 0x2D, 0xC1, 0x32, 0xEB, 0x38, 0x49, 0x7E, 0xB9, 0x6F, 0x20, 0x64, 0xF6, 0x6E, 0x66, 0xB4, 0x1E, 0x66, 0x4A, 0x26, 0xCE, 0xBA, 0x3F, 0xC5, 0x0A, 0xAF, 0xD8, 0xCC, 0xCE, 0xC5, 0x96, 0x0D, 0xD9, 0x2C, 0xB7, 0xDE, 0x50, 0x38, 0x4F, 0xAF, 0x0B, 0x6F, 0xA4, 0x01, 0x55, 0xEB, 0x80, 0xCF, 0x40, 0x5C, 0x10, 0xE0, 0x0C, 0x18, 0x01, 0xCA, 0x80, 0x09, 0x50, 0x72, 0x83, 0x26, 0xFF, 0x54, 0x21, 0x44, 0x70, 0x47, 0xF3, 0xFF, 0xB7, 0xD2, 0x44, 0x11, 0x34, 0x25, 0x2C, 0x94, 0x16, 0x2C, 0x6B, 0x38, 0xB4, 0x3C, 0x78, 0x11, 0x44, 0x6C, 0x27, 0x52, 0xF2, 0x69, 0xA5, 0x46, 0x72, 0x63, 0x17, 0xE3, 0x9C, 0xF6, 0x66, 0x95, 0xD6, 0x1C, 0xD3, 0x74, 0x72, 0x26, 0x91, 0xAC, 0x00, 0x6D, 0x9C, 0x33, 0x05, 0xC4, 0xC7, 0xE7, 0x33, 0x14, 0x17, 0xF7, 0x5E, 0x3A, 0x74, 0xB9, 0xF9, 0x7E, 0x79, 0x7B, 0x87, 0x45, 0x05, 0xB8, 0x21, 0x09, 0x38, 0x01, 0x75, 0xE6, 0x28, 0xD9, 0xE3, 0xFD, 0xC5, 0x04, 0xD2, 0x1B, 0xD4, 0xE8, 0x72, 0x3D, 0x6B, 0x07, 0x4D, 0xFF, 0x69, 0xC1, 0xDC, 0x30, 0x90, 0xBB, 0x1A, 0x92, 0x0E, 0xE1, 0x68, 0xDF, 0x15, 0xC5, 0xC3, 0x5D, 0x85, 0x6C, 0x8A, 0xD4, 0xCB, 0x6E, 0x80, 0xFB, 0x70, 0x8B, 0x50, 0xBC, 0x9B, 0x7A, 0xAE, 0xE1, 0xFB, 0xE7, 0x4C, 0x8B, 0xD6, 0xBB, 0x38, 0x44, 0x7E, 0x24, 0xD9, 0x3C, 0x66, 0xD9, 0xCA, 0x77, 0xDF, 0xB4, 0x02, 0x4C, 0x0D, 0x07, 0xD2, 0x6F, 0x5C, 0x67, 0x06, 0xCD, 0xAF, 0xE6, 0x92, 0xD7, 0xBD, 0xBD, 0xA1, 0x06, 0x6C, 0x9D, 0x7D, 0x12, 0x10, 0x2B, 0x1F, 0xE2, 0xB6, 0x1E, 0x4F, 0xBE, 0x2B, 0xCD, 0xFE, 0x49, 0x6B, 0x6F, 0xE3, 0x4B, 0xDD, 0xC7, 0x0B, 0x9A, 0xD3, 0x15, 0x2C, 0x53, 0x96, 0x43, 0x3F, 0x4E, 0x48, 0x14, 0x89, 0xD4, 0x92, 0xC6, 0x2F, 0x71, 0xDF, 0x70, 0x37, 0x18, 0x5D, 0xFF, 0x4C, 0x7D, 0x23, 0x98, 0x4A, 0x77, 0xB9, 0x79, 0xAA, 0x98, 0x4D, 0xAD, 0x22, 0x33, 0x41, 0x2E, 0x31, 0x2B, 0xF3, 0xB1, 0x6E, 0x53, 0xBE, 0x72, 0xB5, 0x31, 0x46, 0xDA, 0x23, 0x53, 0x3C, 0x04, 0x30, 0xF5, 0x26, 0x19, 0xDB, 0x9A, 0x64, 0xAC, 0x40, 0xDE, 0x25, 0xC6, 0x0D, 0x6D, 0x8C, 0x81, 0xC6, 0xC0, 0x58, 0x8C, 0xEF, 0xF1, 0xF4, 0x7F, 0xDA, 0x5D, 0xE5, 0x11, 0x38, 0x59, 0xCB, 0xF7, 0x6E, 0xC4, 0x4D, 0xD4, 0x5C, 0x71, 0xEC, 0x21, 0xC6, 0x8B, 0x9C, 0xEF, 0xDB, 0x24, 0x86, 0xDB, 0x44, 0xE4, 0x32, 0x4E, 0x38, 0xF7, 0x75, 0xBD, 0xC6, 0xAB, 0xB8, 0x4F, 0xC3, 0x56, 0xD3, 0xA9, 0x85, 0x55, 0x06, 0xE8, 0xCC, 0x5E, 0x9E, 0xE4, 0x25, 0x60, 0xF0, 0x35, 0x0C, 0x2B, 0x1B, 0x0C, 0x94, 0xCE, 0x76, 0x9F, 0xE2, 0xD9, 0xC7, 0x1E, 0x31, 0xDF, 0x00, 0xC2, 0x80, 0x0A, 0x60, 0xB5, 0x67, 0xAE, 0x37, 0xB4, 0xC1, 0x40, 0x6A, 0xE3, 0x00, 0x75, 0x4F, 0x9E, 0x75, 0x83, 0x16, 0xD0, 0x89, 0x55, 0x7E, 0x4F, 0x29, 0x19, 0x0D, 0x4B, 0x6A, 0x0E, 0x6D, 0xF9, 0x94, 0x40, 0x10, 0x2B, 0xD5, 0xB7, 0x36, 0x6A, 0x7B, 0xC8, 0x9D, 0x1A, 0x1A, 0xB2, 0x16, 0xA2, 0x77, 0x67, 0x51, 0x6A, 0x78, 0x5F, 0x6B, 0xAE, 0x40, 0x68, 0xA8, 0x78, 0xD0, 0x5D, 0xF5, 0x41, 0x64, 0xFA, 0xBD, 0xCA, 0x9C, 0x04, 0x2B, 0x06, 0x90, 0x02, 0xA7, 0x1A, 0x0C, 0xBC, 0xFC, 0x8D, 0xDF, 0xBD, 0xC9, 0xDE, 0x4F, 0xC0, 0xD5, 0xEC, 0xF9, 0xF0, 0x00, 0x69, 0xB7, 0xE9, 0x1B, 0xE0, 0x02, 0x4C, 0x00, 0x77, 0x20, 0x68, 0x81, 0x1B, 0x0E, 0xA4, 0x74, 0x07, 0xF9, 0x0D, 0x5A, 0x62, 0xA5, 0xD9, 0xAA, 0xE1, 0x1D, 0x6F, 0x39, 0x0C, 0xE1, 0x36, 0x8C, 0xDB, 0x54, 0x2A, 0x77, 0x58, 0x34, 0x46, 0x8D, 0xC0, 0x6B, 0x0D, 0xAA, 0xB9, 0x4D, 0x11, 0x7A, 0x73, 0x5F, 0xB1, 0x3C, 0x48, 0x62, 0x5A, 0x53, 0xC5, 0x59, 0xC6, 0xF1, 0x09, 0x10, 0xAD, 0x3E, 0xC5, 0x9C, 0x17, 0x27, 0xB5, 0x5F, 0x7E, 0x70, 0xF7, 0xF6, 0x36, 0x84, 0xE0, 0xBD, 0x7E, 0xFA, 0xC5, 0x33, 0xBD, 0x40, 0x4C, 0x81, 0xD0, 0xF9, 0x40, 0x8A, 0x02, 0x66, 0x0D, 0x01, 0x34, 0x01, 0x91, 0x3D, 0x61, 0x1C, 0x08, 0xEA, 0xA0, 0xD5, 0xB7, 0xD2, 0x72, 0x5B, 0x6B, 0xF6, 0x4A, 0xA3, 0x20, 0xEC, 0xEA, 0x6C, 0xD8, 0x9D, 0xA3, 0xCF, 0xC4, 0x2C, 0x9D, 0x4F, 0xDB, 0x5E, 0x4D, 0x63, 0x64, 0x27, 0xC6, 0xD9, 0xCD, 0xCC, 0xD4, 0x69, 0xA9, 0xF3, 0xBD, 0xB3, 0x0C, 0xBF, 0x69, 0xBC, 0x0C, 0xC7, 0x35, 0x41, 0xCE, 0x72, 0x57, 0xCE, 0xD9, 0xA4, 0xAE, 0xA7, 0xB1, 0xBE, 0x98, 0xD6, 0x31, 0xE7, 0x7B, 0xC9, 0x1D, 0x3E, 0x2A, 0xB8, 0xC2, 0x62, 0x81, 0x67, 0x5F, 0xD8, 0x1D, 0xF0, 0x02, 0xF6, 0x00, 0x3A, 0x29, 0x40, 0xB5, 0x11, 0xEB, 0x93, 0x01, 0xD6, 0xB8, 0xE7, 0xB4, 0x2B, 0xB1, 0x0B, 0x41, 0xD1, 0xD8, 0x64, 0xBC, 0x08, 0x82, 0x0B, 0xBD, 0x2A, 0x92, 0xC8, 0xC2, 0xF4, 0x54, 0xE3, 0x34, 0x1A, 0xFA, 0x17, 0xDB, 0xC3, 0xB7, 0xE2, 0xBC, 0x23, 0xD2, 0x90, 0x28, 0xFB, 0x99, 0x67, 0x8D, 0x5B, 0xCC, 0xD0, 0xA7, 0xE1, 0x9F, 0xA2, 0x6D, 0x5E, 0x3D, 0xEE, 0xBB, 0x8B, 0xD4, 0x03, 0x08, 0x6B, 0x5C, 0xA7, 0xDF, 0x91, 0xED, 0x8A, 0x77, 0x4A, 0x7C, 0xCB, 0xA8, 0x74, 0x66, 0x42, 0xED, 0x00, 0x79, 0xFD, 0x3D, 0x97, 0xEE, 0x54, 0xA9, 0x11, 0x80, 0x69, 0xC3, 0x00, 0x27, 0x20, 0x0E, 0x50, 0xD4, 0x41, 0xA3, 0x4F, 0x10, 0x69, 0x87, 0x60, 0xAD, 0x29, 0x7F, 0xDA, 0xDB, 0xAF, 0x50, 0xEA, 0x3D, 0x93, 0x36, 0xE0, 0xCC, 0x50, 0x86, 0x75, 0x17, 0xD6, 0x66, 0x30, 0xBB, 0x9F, 0x40, 0x57, 0xBA, 0x9B, 0x6F, 0x66, 0xFB, 0x4C, 0x3B, 0x0D, 0xE2, 0xCE, 0x6F, 0x4D, 0x83, 0x6A, 0x39, 0xAB, 0x3F, 0xD1, 0x80, 0x63, 0x53, 0xD7, 0x16, 0x0D, 0x73, 0xC0, 0x0F, 0x60, 0x39, 0xCF, 0x1A, 0x1C, 0xEB, 0x78, 0x98, 0x79, 0xD5, 0x95, 0x33, 0x43, 0xC4, 0x04, 0x68, 0x02, 0x77, 0xA7, 0x3A, 0x01, 0xF0, 0x45, 0xAD, 0x4F, 0xD4, 0x38, 0x8D, 0x02, 0x5C, 0x3B, 0x68, 0x0C, 0xED, 0xAD, 0xE4, 0x7E, 0x3C, 0x7B, 0x76, 0x08, 0x75, 0xDF, 0x82, 0x42, 0xD7, 0x13, 0xDD, 0xB2, 0x96, 0x32, 0xE4, 0x2F, 0x5A, 0x6B, 0xA5, 0x99, 0xBC, 0x53, 0xCD, 0x4B, 0x03, 0xBE, 0xCE, 0xA7, 0xB8, 0x63, 0xAD, 0xDF, 0x91, 0x4C, 0x97, 0x33, 0xB0, 0xD7, 0xBA, 0x3F, 0xD9, 0x6C, 0x89, 0x96, 0x06, 0x73, 0xC3, 0x1B, 0x05, 0xD8, 0x10, 0x9F, 0xD9, 0xAB, 0x8C, 0x74, 0x08, 0x5F, 0x1D, 0xD1, 0x69, 0x27, 0x21, 0x0B, 0x50, 0x05, 0xA2, 0x51, 0xDC, 0x90, 0xC6, 0x01, 0x52, 0x1A, 0x04, 0xD4, 0x07, 0xFC, 0x2D, 0x10, 0x34, 0xF9, 0xC7, 0x0C, 0xE3, 0x84, 0x1D, 0x34, 0xFF, 0x72, 0x25, 0x82, 0xCA, 0x6F, 0x08, 0x0E, 0x97, 0x52, 0xE8, 0xF7, 0x75, 0xE9, 0x3C, 0xDA, 0x96, 0xDE, 0xDA, 0x7C, 0x11, 0x04, 0xCD, 0x3B, 0xDD, 0x9E, 0xDD, 0xE0, 0x3C, 0xE7, 0x27, 0xA6, 0x00, 0x4C, 0x53, 0x63, 0xC1, 0x4B, 0xE3, 0xB3, 0x9B, 0xFD, 0x85, 0x1B, 0x0E, 0xD8, 0x98, 0x67, 0xA3, 0xCF, 0xBA, 0xED, 0x75, 0xF1, 0xD9, 0x72, 0x29, 0xAE, 0x79, 0xDE, 0xAE, 0x5A, 0x21, 0x14, 0x6A, 0x68, 0xC3, 0x17, 0x56, 0x94, 0xDD, 0x3A, 0x68, 0xFA, 0xA2, 0x45, 0x8A, 0x12, 0x5E, 0x10, 0xE4, 0xEF, 0x48, 0x42, 0x22, 0x27, 0x94, 0x61, 0xD8, 0xAE, 0x3A, 0x76, 0x24, 0x32, 0x3A, 0x8C, 0x4D, 0xB7, 0x20, 0xB2, 0x63, 0xE0, 0xBC, 0xC6, 0x02, 0x24, 0x70, 0xD6, 0xA0, 0x95, 0xAC, 0x2D, 0x02, 0xBC, 0x63, 0x45, 0x76, 0x67, 0xE1, 0x6C, 0x33, 0x13, 0x1F, 0xD9, 0x91, 0xF9, 0xF3, 0x86, 0x1F, 0xB2, 0x02, 0xB1, 0xBD, 0x39, 0xBC, 0x61, 0x13, 0xBE, 0x94, 0xA9, 0xD5, 0x48, 0xFF, 0xE5, 0x3F, 0xC7, 0xF7, 0xD3, 0xF4, 0x9F, 0xE3, 0xB7, 0xC4, 0xDA, 0x55, 0x39, 0xB2, 0xC7, 0x3B, 0xA0, 0x62, 0x20, 0xA5, 0x38, 0x47, 0x26, 0xE1, 0xB6, 0x97, 0xDC, 0x6A, 0x5E, 0xBC, 0x08, 0xE4, 0xA7, 0x6D, 0xC2, 0x9B, 0xCD, 0xD3, 0xF0, 0x46, 0x28, 0xE0, 0x01, 0x58, 0x35, 0x18, 0xF0, 0xBB, 0xFC, 0xE8, 0xB5, 0xE8, 0x8D, 0x46, 0x5A, 0x8F, 0xBF, 0xA1, 0xFE, 0xF1, 0x6E, 0xA2, 0xF2, 0x41, 0x5E, 0xBA, 0x32, 0x78, 0x39, 0xCE, 0xC9, 0x32, 0x75, 0xE1, 0x5F, 0x96, 0x13, 0xB1, 0x86, 0xD4, 0xE8, 0x72, 0xE8, 0xF8, 0x3D, 0x6B, 0x79, 0x0D, 0xA9, 0xF1, 0x1B, 0x34, 0xEF, 0xA0, 0xB5, 0xAB, 0xB2, 0xDA, 0x27, 0xF4, 0x23, 0x95, 0x4F, 0xAF, 0x76, 0xAD, 0x73, 0x0A, 0xE7, 0x34, 0x0D, 0x6E, 0x31, 0x29, 0xB7, 0x73, 0xCE, 0xCE, 0x72, 0x6C, 0x8D, 0x70, 0xFA, 0xB4, 0x2E, 0xA9, 0x9A, 0x87, 0x78, 0x5F, 0xD2, 0xDB, 0x27, 0xD4, 0xE8, 0x10, 0xD6, 0xD2, 0x00, 0x44, 0x0D, 0x87, 0xC4, 0xE1, 0xDA, 0x38, 0xE4, 0x46, 0x94, 0x6B, 0xA9, 0x2C, 0x05, 0x9F, 0x5F, 0x70, 0x83, 0xF6, 0xC2, 0x01, 0x6A, 0x7B, 0x71, 0xD4, 0xFA, 0xC3, 0xCE, 0x8C, 0x79, 0xEA, 0x1C, 0xF3, 0xC6, 0xB6, 0xFD, 0xF5, 0x51, 0x51, 0xA9, 0x14, 0x24, 0x8A, 0xA2, 0x67, 0xE3, 0xB1, 0x60, 0xD9, 0x18, 0xE3, 0xCD, 0x56, 0x31, 0x8E, 0x1C, 0x52, 0xCD, 0x02, 0xF9, 0x2D, 0x20, 0xE7, 0x5E, 0x40, 0x31, 0xEF, 0x35, 0x64, 0x0D, 0x6A, 0x30, 0xC0, 0x3A, 0x9B, 0x1E, 0x69, 0x36, 0x4C, 0x8C, 0xBE, 0x9D, 0x61, 0x42, 0x4D, 0x36, 0x47, 0xE5, 0x59, 0x2C, 0xE7, 0x6E, 0x5A, 0xC7, 0xE1, 0x6C, 0x48, 0x83, 0x1A, 0xBF, 0x26, 0x27, 0x25, 0x01, 0x11, 0xF3, 0x8B, 0x76, 0xB1, 0xFC, 0x78, 0xF2, 0x2D, 0xB5, 0xFD, 0xDE, 0x44, 0x7E, 0x83, 0x0E, 0x52, 0xB7, 0x87, 0x08, 0xCB, 0x80, 0xBA, 0x4E, 0x26, 0x3D, 0xAC, 0x86, 0xB9, 0xAB, 0xC4, 0xFB, 0x74, 0x6B, 0x7F, 0xCF, 0x8B, 0xBD, 0x44, 0x83, 0xAC, 0xB1, 0x48, 0x75, 0xE6, 0x14, 0xD0, 0x43, 0x80, 0x8C, 0x6B, 0xFC, 0xEB, 0x47, 0xE1, 0xEE, 0x87, 0x92, 0x77, 0x4B, 0xB6, 0xE8, 0x10, 0x76, 0xEC, 0x6A, 0x0E, 0x84, 0xE0, 0x5C, 0x73, 0xB2, 0x65, 0x6A, 0x3F, 0xB7, 0xE5, 0x89, 0xE7, 0x2F, 0xEF, 0x25, 0x01, 0xA8, 0x1A, 0xB6, 0x16, 0xDE, 0x9E, 0x7A, 0x4C, 0xAF, 0x7C, 0xD1, 0x41, 0xAB, 0x1D, 0x34, 0x9C, 0xD7, 0xAA, 0x07, 0xFD, 0x70, 0xA0, 0x5A, 0x12, 0xAD, 0xF8, 0x74, 0x5C, 0xDC, 0x23, 0x79, 0x6C, 0x6A, 0x21, 0xCB, 0xAC, 0x49, 0x73, 0xB6, 0x2C, 0x68, 0x00, 0x5E, 0x8D, 0x68, 0xE8, 0x4C, 0xE1, 0x1F, 0xEB, 0xF0, 0x8E, 0x51, 0x82, 0x44, 0xCF, 0x2F, 0x4D, 0x0B, 0x9F, 0x98, 0x3A, 0x71, 0xD8, 0x41, 0x5B, 0x93, 0x2C, 0x95, 0xD6, 0x00, 0xE8, 0x04, 0xE8, 0xE7, 0xFE, 0xBE, 0xAD, 0x5D, 0x96, 0x9F, 0x89, 0x18, 0xC0, 0xD9, 0x38, 0x4B, 0x7D, 0xFB, 0xD6, 0xF2, 0xDA, 0xD4, 0xFC, 0x7C, 0x56, 0x87, 0x19, 0x39, 0xC6, 0xD3, 0x68, 0xE9, 0x57, 0x6E, 0xA1, 0x14, 0x18, 0xB6, 0x72, 0x7D, 0x4B, 0x43, 0xC8, 0xB1, 0xE1, 0xF8, 0x74, 0xB8, 0x1A, 0x36, 0xFB, 0xE3, 0x16, 0x98, 0x3C, 0x55, 0xB7, 0x51, 0x3B, 0x99, 0x30, 0x0D, 0x21, 0xA8, 0x51, 0x4F, 0x20, 0xE0, 0x37, 0x5A, 0x80, 0xDB, 0xBB, 0x0C, 0xBE, 0x3E, 0xA8, 0x78, 0xC1, 0xAE, 0xF5, 0x92, 0xB9, 0xCF, 0x6C, 0x2A, 0x60, 0xB9, 0x5A, 0x19, 0xA3, 0x61, 0x8D, 0x9C, 0xC5, 0xF8, 0xD8, 0xF6, 0xB6, 0xEB, 0x34, 0xED, 0x0C, 0x58, 0xC3, 0x05, 0xA8, 0xB8, 0x41, 0xA3, 0xE1, 0x79, 0xEB, 0x0E, 0xE3, 0xC3, 0x32, 0xC2, 0xE5, 0xB3, 0x12, 0x8F, 0x5C, 0x09, 0xEC, 0x3D, 0x9C, 0xB0, 0x5E, 0xDC, 0xA7, 0x56, 0xF9, 0x8C, 0x1A, 0x1E, 0xBF, 0xC4, 0x8F, 0xF1, 0x54, 0x8A, 0x45, 0x34, 0x1C, 0x70, 0x02, 0x34, 0x00, 0xBB, 0xD2, 0xBB, 0x8E, 0xAB, 0xBC, 0x17, 0x26, 0x20, 0x4B, 0x79, 0x75, 0x86, 0x94, 0x40, 0x5E, 0xBB, 0x86, 0xEE, 0x55, 0xD1, 0x48, 0xFA, 0x7F, 0xFB, 0x78, 0xD7, 0x7A, 0x3C, 0xF3, 0xC7, 0xE3, 0x99, 0xD9, 0x38, 0xEB, 0xF1, 0x94, 0x1B, 0x34, 0xDE, 0x8F, 0x27, 0xCE, 0x1C, 0x02, 0xA9, 0x72, 0x19, 0xE1, 0xE8, 0x18, 0x85, 0x9E, 0x31, 0x29, 0xB4, 0x2D, 0x08, 0xCF, 0x71, 0x82, 0x36, 0xFC, 0x21, 0xF9, 0x25, 0x56, 0xB5, 0x66, 0xD9, 0xF6, 0x54, 0x23, 0x1B, 0xA7, 0x41, 0x00, 0x23, 0xBC, 0x2F, 0x68, 0xE7, 0x4C, 0x51, 0x8F, 0x74, 0xEC, 0xF4, 0xEE, 0x85, 0x1D, 0x73, 0xF6, 0x7D, 0xE6, 0x58, 0x9B, 0x59, 0xFC, 0x72, 0x22, 0xA5, 0xE5, 0xA5, 0x76, 0xFE, 0x87, 0x97, 0x9A, 0xAC, 0x4A, 0x8E, 0x35, 0xA8, 0x11, 0x73, 0x5C, 0x36, 0xAF, 0x21, 0xC6, 0x1C, 0xF9, 0x9D, 0x39, 0xEA, 0xB4, 0x5C, 0x4D, 0x15, 0x9B, 0x42, 0x45, 0x4F, 0xF8, 0x31, 0xE8, 0x78, 0xC3, 0x67, 0x3B, 0x41, 0x35, 0x4B, 0x56, 0x3B, 0x41, 0x18, 0x50, 0x0A, 0x64, 0xC3, 0xB7, 0x11, 0xAF, 0x34, 0x14, 0x88, 0x1B, 0x0B, 0x9B, 0x15, 0x33, 0xD3, 0x25, 0x6E, 0xF6, 0xDB, 0x4B, 0x36, 0x0F, 0x08, 0x7B, 0x8C, 0xAC, 0xFB, 0xC2, 0x0A, 0x97, 0xE5, 0x8C, 0x5A, 0xF0, 0xDA, 0xDB, 0x0E, 0x70, 0xFC, 0xD7, 0x41, 0x4F, 0x80, 0x77, 0xC8, 0x79, 0x4B, 0x4D, 0xBF, 0xCE, 0x15, 0x51, 0xFD, 0x12, 0x6B, 0x95, 0x89, 0xCE, 0x82, 0x43, 0xE8, 0xD1, 0x8B, 0xC4, 0x7A, 0x15, 0xF9, 0x53, 0x89, 0x7B, 0xA0, 0x9B, 0x9D, 0x6A, 0x37, 0x61, 0xD4, 0x5F, 0xB5, 0x72, 0x34, 0xD7, 0xE8, 0x16, 0xCC, 0x16, 0x70, 0x6A, 0x49, 0xD1, 0xAF, 0xAF, 0xE1, 0xAA, 0xF4, 0xD6, 0xF9, 0xE1, 0x2F, 0x71, 0x83, 0x5E, 0x0D, 0xCE, 0xB5, 0x2E, 0x78, 0xC2, 0xE3, 0x7F, 0x2C, 0xB2, 0xF5, 0xF0, 0x66, 0x02, 0x75, 0x11, 0x8D, 0xED, 0x31, 0xB6, 0x7D, 0xC4, 0xEC, 0x46, 0xCD, 0xE0, 0x39, 0x97, 0x0A, 0x0F, 0x00, 0x7E, 0x7B, 0x1C, 0x8A, 0xEC, 0x19, 0xD0, 0xAA, 0x67, 0xE1, 0xF7, 0xB2, 0x44, 0xB0, 0x51, 0x2F, 0xE6, 0xDA, 0xAF, 0x82, 0x43, 0xD3, 0x67, 0x6B, 0x67, 0x72, 0xBC, 0xA1, 0xFB, 0x04, 0x7E, 0x31, 0x9C, 0xC3, 0xF4, 0x1D, 0x65, 0x85, 0xD6, 0xB0, 0x71, 0x01, 0x38, 0xE6, 0x84, 0xF6, 0x6C, 0x48, 0x01, 0x9C, 0xEB, 0x8F, 0xCE, 0x86, 0x34, 0x78, 0x41, 0x01, 0xB1, 0x5F, 0xFD, 0x78, 0x04, 0x98, 0xFC, 0xEA, 0xC7, 0x73, 0x20, 0xDE, 0x52, 0xF3, 0xAF, 0x34, 0x2C, 0xD4, 0x8A, 0xA1, 0x9E, 0xEC, 0xC0, 0x5A, 0xF0, 0x00, 0x50, 0x6B, 0x79, 0x78, 0xE1, 0x1E, 0x2E, 0x81, 0x62, 0x48, 0xC5, 0xBC, 0x49, 0xC5, 0xB2, 0xE8, 0x38, 0xC3, 0x77, 0x36, 0x9E, 0xC9, 0x2F, 0x7B, 0x23, 0xE6, 0x1B, 0xF3, 0xF0, 0x34, 0x67, 0xE1, 0x03, 0x84, 0x4D, 0x7B, 0x6F, 0xEE, 0xEF, 0xDC, 0x09, 0x80, 0xB3, 0x0B, 0xF7, 0x07, 0xE0, 0x02, 0x48, 0x81, 0xC3, 0x33, 0xD8, 0x45, 0xEB, 0x93, 0x4F, 0xDB, 0x21, 0x36, 0x40, 0x7C, 0x81, 0x00, 0x96, 0xC6, 0x99, 0x5F, 0xB4, 0x17, 0xB4, 0x6B, 0xDA, 0x1D, 0x23, 0x97, 0x96, 0x47, 0xBF, 0x48, 0x56, 0x16, 0xEA, 0xC5, 0x50, 0x41, 0xBA, 0xA1, 0x7A, 0x6C, 0x9A, 0x3A, 0x7D, 0x4D, 0x6A, 0x05, 0x8D, 0x3B, 0x68, 0x9E, 0xB3, 0xFD, 0xBE, 0xE4, 0x8D, 0x0B, 0x01, 0x0A, 0x20, 0x5E, 0x69, 0x69, 0xB9, 0x66, 0x1E, 0x57, 0x0B, 0x75, 0x6D, 0xF7, 0x05, 0x9F, 0x88, 0xFE, 0x4E, 0x22, 0xF8, 0xC9, 0xD0, 0xF0, 0xCE, 0x79, 0xE4, 0xA5, 0x80, 0xCB, 0x12, 0x44, 0x78, 0x83, 0x1B, 0xD4, 0x70, 0x40, 0xD6, 0x80, 0xE5, 0x6C, 0x84, 0x01, 0xEE, 0xCB, 0x31, 0x38, 0xE7, 0xA7, 0x77, 0x27, 0xF0, 0xFC, 0x97, 0x5F, 0xE8, 0x05, 0x02, 0x8E, 0xA7, 0xEA, 0x40, 0x91, 0x3D, 0x4F, 0xA0, 0x20, 0x64, 0x1F, 0x22, 0x95, 0xF0, 0x3C, 0x71, 0x8D, 0x56, 0x1F, 0xCD, 0x6D, 0xAB, 0x79, 0xD6, 0x74, 0x84, 0x34, 0x20, 0x0A, 0xB0, 0x3D, 0xB6, 0x6F, 0x1C, 0x1B, 0xE4, 0xAD, 0x0E, 0xA5, 0x69, 0x96, 0x91, 0x31, 0xE5, 0xC9, 0x26, 0xF3, 0x3C, 0x45, 0xCB, 0xF9, 0x30, 0x79, 0xFA, 0x50, 0x53, 0x36, 0x6A, 0x55, 0x49, 0xA5, 0xB1, 0x3A, 0x14, 0xE3, 0x00, 0x19, 0x8D, 0x3D, 0xBF, 0xC5, 0x01, 0x6D, 0x58, 0xA3, 0x5E, 0xD4, 0xEA, 0x5F, 0xC0, 0xB8, 0x0A, 0x09, 0x4F, 0xA3, 0x6F, 0xA9, 0xB1, 0xF2, 0x97, 0x53, 0x3B, 0x92, 0xA8, 0xDB, 0xCA, 0x5D, 0x9A, 0xDC, 0x5A, 0x26, 0xCC, 0xC6, 0x93, 0xB3, 0xD3, 0x43, 0xFA, 0x37, 0x67, 0xCD, 0x9E, 0x05, 0x34, 0x09, 0xA0, 0x0C, 0x48, 0x2D, 0x0F, 0x5E, 0x6D, 0xF8, 0x14, 0xCE, 0xC6, 0x2D, 0x33, 0x2C, 0xEB, 0xA6, 0x67, 0xC8, 0xF4, 0xE6, 0x6E, 0x4F, 0x63, 0x1C, 0xA2, 0x95, 0xE0, 0x5D, 0x4E, 0xA8, 0xA2, 0x0D, 0x6A, 0x9C, 0x06, 0xAF, 0xB1, 0x33, 0x02, 0x84, 0x35, 0x56, 0xF3, 0xB6, 0x29, 0xA0, 0x01, 0x98, 0x01, 0x29, 0x1D, 0xB4, 0x38, 0x5F, 0xCB, 0xA7, 0xB6, 0x1A, 0xD2, 0x59, 0xBE, 0x9C, 0xDA, 0x29, 0xFE, 0xB2, 0xB7, 0x92, 0xB7, 0x39, 0xD3, 0x50, 0x58, 0x14, 0xC2, 0xB1, 0x98, 0xE6, 0xF9, 0xD6, 0x40, 0x7A, 0xEF, 0x6D, 0x5B, 0x63, 0x5C, 0xF3, 0x34, 0x7E, 0xF9, 0x9E, 0x19, 0x35, 0xAE, 0x22, 0xAB, 0x03, 0xEA, 0xB7, 0x10, 0x7F, 0x51, 0x33, 0x2B, 0x2E, 0xDC, 0xEB, 0x4E, 0xA7, 0xEF, 0x90, 0xED, 0x13, 0x7F, 0x34, 0xD6, 0xA2, 0x62, 0x5B, 0x28, 0x40, 0x57, 0x7C, 0x92, 0x81, 0x08, 0xC0, 0x1B, 0x26, 0x80, 0xAE, 0x10, 0x66, 0xDE, 0xA0, 0x41, 0x39, 0x74, 0xEA, 0x6F, 0xCA, 0xDB, 0x97, 0x53, 0x4F, 0x98, 0xC6, 0x0B, 0x14, 0x1C, 0x0C, 0x75, 0xBC, 0xA5, 0x12, 0x6A, 0xEE, 0x12, 0xA3, 0x22, 0xE5, 0x39, 0x5C, 0xA9, 0xE5, 0x2D, 0x23, 0xD7, 0x2B, 0x4F, 0x06, 0x22, 0x81, 0x34, 0x20, 0x14, 0xF0, 0x02, 0x5E, 0xB5, 0xB3, 0x6F, 0x52, 0xCF, 0x65, 0xA7, 0xE2, 0x4E, 0x37, 0xC0, 0x27, 0xBB, 0x25, 0x7B, 0xEF, 0x32, 0xE7, 0xBC, 0x8F, 0x91, 0x4F, 0xBD, 0xA5, 0x09, 0x20, 0x0A, 0xF0, 0xC5, 0x69, 0x50, 0x43, 0x97, 0x1D, 0x75, 0xAE, 0xAE, 0x9E, 0x6C, 0xAC, 0x3F, 0x4C, 0xA7, 0xEF, 0xF5, 0xDF, 0x4A, 0xC3, 0x93, 0x98, 0x9A, 0x50, 0xC8, 0xAA, 0xFC, 0x53, 0x6B, 0x1B, 0x85, 0xAF, 0xD3, 0xB1, 0x70, 0x4B, 0x96, 0x16, 0xE3, 0x67, 0x17, 0x57, 0x5C, 0x7A, 0x85, 0xED, 0xFE, 0xA8, 0xD5, 0x80, 0x21, 0x3E, 0x0D, 0xE8, 0xD2, 0x80, 0x62, 0x20, 0x1C, 0x70, 0x6E, 0xDC, 0x88, 0x48, 0xC7, 0x27, 0xBA, 0x07, 0x81, 0x4E, 0xE3, 0xAA, 0x69, 0x6B, 0xE8, 0xE8, 0x69, 0xA8, 0x2D, 0x10, 0xAD, 0x19, 0x26, 0x01, 0xAE, 0x94, 0xAF, 0xAA, 0x91, 0x17, 0xD3, 0x42, 0x9E, 0x09, 0x30, 0x06, 0x82, 0x66, 0xD0, 0xCC, 0xD7, 0x6E, 0x92, 0x80, 0x34, 0x92, 0x6E, 0xD0, 0xE4, 0xED, 0xFD, 0x66, 0xF0, 0x03, 0x0B, 0x46, 0x91, 0xD4, 0x18, 0xFD, 0xD9, 0xFC, 0x5D, 0xA1, 0x12, 0xCB, 0xB5, 0x0A, 0xEA, 0x81, 0xC8, 0x0E, 0xD6, 0xD6, 0xA8, 0xDD, 0x13, 0xBB, 0x4D, 0xD5, 0x79, 0xE5, 0x94, 0xA3, 0xD5, 0x01, 0xDC, 0x01, 0x5D, 0x66, 0x95, 0x79, 0xA6, 0x5E, 0x37, 0x19, 0xB0, 0x55, 0x61, 0x76, 0x9D, 0xC3, 0xF0, 0xE2, 0xAC, 0x7C, 0x6D, 0xFE, 0x1A, 0xE5, 0xCF, 0x40, 0x56, 0x23, 0x1A, 0xEB, 0xDE, 0x29, 0x07, 0x50, 0x6F, 0x10, 0x20, 0xE7, 0xD7, 0x64, 0xD9, 0x03, 0x18, 0xDF, 0xA0, 0x29, 0xC2, 0x64, 0x7F, 0xD6, 0x56, 0xD5, 0xE5, 0xF5, 0xCF, 0x8E, 0xB0, 0x70, 0xE4, 0x24, 0x88, 0x60, 0x4C, 0xA5, 0xDF, 0xA2, 0x35, 0x0D, 0xE8, 0x72, 0xF7, 0x17, 0x0B, 0xCF, 0x1B, 0x91, 0x38, 0xA0, 0xD5, 0x10, 0x40, 0xBC, 0xB1, 0x2A, 0x04, 0x8C, 0x38, 0xBD, 0xA3, 0x9D, 0x1D, 0xA0, 0x0C, 0x90, 0xDB, 0x3C, 0x45, 0xD3, 0xB4, 0xE9, 0xF8, 0x0D, 0xFA, 0xB2, 0x51, 0xF7, 0xF5, 0x42, 0x88, 0x86, 0x2D, 0xE4, 0xDC, 0x0C, 0xC3, 0x80, 0xF4, 0x85, 0x03, 0x04, 0x2D, 0x53, 0x0F, 0x5D, 0x99, 0x8E, 0xB0, 0xEF, 0x89, 0xF4, 0x22, 0x64, 0xE1, 0x2B, 0xBE, 0xAA, 0x5E, 0x1C, 0xFB, 0x8E, 0x20, 0x22, 0x8E, 0x19, 0xCD, 0x29, 0x6D, 0x13, 0x2A, 0xE8, 0x76, 0x82, 0xDB, 0x4E, 0x0E, 0xAB, 0xFD, 0x51, 0x66, 0x8F, 0xFB, 0x7B, 0x3E, 0x37, 0x7F, 0xED, 0xA4, 0x58, 0x02, 0xC2, 0x00, 0x2F, 0x61, 0x18, 0x31, 0x10, 0xAD, 0xF9, 0x60, 0x9C, 0xCD, 0x9E, 0xA4, 0xE2, 0xD0, 0x5F, 0x59, 0x57, 0xDE, 0xFF, 0x57, 0x7A, 0x2B, 0xF8, 0xA3, 0xEB, 0xC5, 0x97, 0xFC, 0x4E, 0x19, 0x10, 0x6B, 0x78, 0x23, 0x00, 0x15, 0xC0, 0x0F, 0x90, 0x7A, 0x86, 0xD1, 0x67, 0xE5, 0x01, 0x04, 0x48, 0x06, 0x22, 0x80, 0xBA, 0xC2, 0x81, 0xB7, 0xD4, 0xFC, 0x93, 0x78, 0xBB, 0xD8, 0xF7, 0x53, 0x9D, 0xE8, 0x1B, 0xF3, 0xE6, 0x19, 0x48, 0xAD, 0x69, 0xB6, 0x0A, 0x0E, 0x86, 0x43, 0x77, 0xDF, 0x49, 0x8E, 0xA9, 0xEC, 0x93, 0xA5, 0x82, 0x79, 0xCE, 0x90, 0x76, 0x75, 0x28, 0x57, 0x80, 0x52, 0x1D, 0x83, 0xD3, 0x11, 0x31, 0xC0, 0x08, 0xD0, 0x31, 0x55, 0x0A, 0xDD, 0xA2, 0x70, 0x28, 0x4A, 0xE0, 0x99, 0x28, 0x5D, 0xCF, 0x9D, 0x31, 0xD9, 0x06, 0x5A, 0xA5, 0x69, 0x6F, 0x6A, 0x5D, 0x9D, 0x5B, 0xC6, 0x41, 0xD2, 0xD0, 0xB5, 0xB3, 0xD2, 0x0D, 0x53, 0xAD, 0xA1, 0x0E, 0xDE, 0x30, 0x40, 0x03, 0x10, 0x01, 0xD8, 0x00, 0x09, 0x20, 0xB8, 0x83, 0x16, 0x78, 0x61, 0xFE, 0xB9, 0xA8, 0x31, 0x92, 0x94, 0xF0, 0x57, 0x26, 0x86, 0x33, 0x6C, 0x21, 0x76, 0x44, 0xDF, 0x4A, 0xD3, 0x90, 0x79, 0x27, 0x70, 0x5F, 0xB6, 0x7D, 0xF7, 0xF9, 0xF2, 0xE8, 0x00, 0x93, 0x03, 0x69, 0x40, 0x09, 0x90, 0x07, 0x70, 0x03, 0xAC, 0x80, 0xF4, 0xBF, 0x21, 0x3F, 0xB8, 0xF2, 0x03, 0x57, 0x98, 0xD1, 0xC5, 0xDA, 0x37, 0xAE, 0xA2, 0x57, 0xCC, 0x3D, 0xD2, 0x31, 0xA0, 0x01, 0x70, 0x2D, 0x91, 0x91, 0x35, 0x7C, 0x82, 0x04, 0xE0, 0x00, 0xB4, 0x00, 0x97, 0x09, 0x5B, 0x89, 0x3D, 0x4D, 0xC0, 0x0C, 0xC8, 0xBE, 0xB2, 0x23, 0x21, 0xF4, 0x3D, 0x6E, 0x09, 0x73, 0x4D, 0xFD, 0xBB, 0xB2, 0xA3, 0xCC, 0x8E, 0x5D, 0x93, 0x12, 0x97, 0x5D, 0x15, 0xA4, 0x65, 0x98, 0x87, 0x59, 0xBC, 0xEB, 0xCA, 0xA9, 0x9D, 0x02, 0xBC, 0x11, 0x0D, 0x4F, 0x40, 0x03, 0xE0, 0x9D, 0x91, 0x11, 0x80, 0x57, 0x81, 0x8A, 0x19, 0xA0, 0x95, 0x37, 0xD3, 0x06, 0xE9, 0xCC, 0x50, 0x84, 0x36, 0x6A, 0xBD, 0x10, 0xE2, 0x97, 0x37, 0x07, 0x37, 0x04, 0x60, 0x9D, 0x79, 0x4C, 0x23, 0x40, 0x6B, 0x8F, 0x1A, 0x5F, 0xD9, 0x80, 0x00, 0xEC, 0xED, 0x69, 0x85, 0xE9, 0x3E, 0x81, 0x63, 0xAD, 0xB0, 0x7C, 0xA6, 0x30, 0x91, 0xC8, 0xDE, 0xE6, 0x09, 0x14, 0xE5, 0x8A, 0x91, 0x95, 0x21, 0xE9, 0x08, 0xC8, 0x0C, 0x1A, 0xAF, 0xD7, 0xA7, 0xF0, 0x3C, 0x6D, 0xC6, 0x32, 0x03, 0x95, 0x00, 0x5E, 0xA9, 0x2F, 0x57, 0xF2, 0x6D, 0xF5, 0x56, 0x13, 0x4D, 0x1D, 0xA4, 0xE4, 0xB2, 0xDE, 0x09, 0x40, 0x74, 0x39, 0xE5, 0x3B, 0x10, 0x2F, 0x6F, 0xB0, 0xEE, 0x51, 0xDE, 0xA8, 0x35, 0xCF, 0x27, 0x81, 0x10, 0x20, 0xB3, 0xA1, 0x2B, 0xE5, 0x7D, 0x56, 0xCA, 0x5B, 0x81, 0xAA, 0x0E, 0xDA, 0x9F, 0xD0, 0x2A, 0x0C, 0xBE, 0xCA, 0xC3, 0x3A, 0xC1, 0x15, 0x09, 0x39, 0x46, 0x0D, 0xD4, 0x5D, 0x90, 0xFE, 0x29, 0xEE, 0x32, 0xFB, 0x1E, 0x1F, 0xB2, 0xC6, 0x83, 0x85, 0x03, 0xD9, 0x08, 0x05, 0x6C, 0xDD, 0x3A, 0xF7, 0x3C, 0xB1, 0x1B, 0xD0, 0xD3, 0xF0, 0x02, 0x34, 0x66, 0x78, 0xD5, 0x80, 0xB3, 0x6A, 0x6D, 0xBA, 0xCC, 0x60, 0x82, 0x1B, 0xD9, 0xB0, 0x5F, 0x70, 0x20, 0x73, 0x2E, 0x3F, 0xF6, 0x86, 0xAC, 0xDA, 0x4C, 0xAE, 0xA4, 0xDB, 0xCB, 0x42, 0xDD, 0xA0, 0xD1, 0x37, 0x6C, 0xA5, 0x88, 0xBE, 0x74, 0x87, 0x9B, 0xDF, 0xA0, 0x61, 0x8C, 0x19, 0x6E, 0x4E, 0xE4, 0x56, 0x7D, 0x6D, 0x2B, 0x9C, 0x82, 0x6A, 0x66, 0xD4, 0x54, 0x9A, 0xA5, 0x2B, 0x9F, 0xEE, 0x8D, 0x68, 0xF8, 0x4A, 0xEA, 0xF3, 0x7A, 0x92, 0xCF, 0x78, 0x76, 0xE5, 0x19, 0xDC, 0xB2, 0x35, 0xD6, 0x49, 0x42, 0x6A, 0xAA, 0x12, 0x62, 0x8D, 0x66, 0x8B, 0x9A, 0x57, 0x27, 0xA7, 0x75, 0xA0, 0xB8, 0x28, 0xA0, 0x74, 0xA6, 0xE1, 0x85, 0x01, 0xCD, 0xC6, 0x3A, 0x29, 0xB1, 0x00, 0xA4, 0x00, 0x13, 0x60, 0x7A, 0xA3, 0xC6, 0x2F, 0x4E, 0x4E, 0x10, 0x5C, 0xC5, 0x27, 0x12, 0xE0, 0xEF, 0xA4, 0x76, 0x58, 0xB1, 0x63, 0x44, 0x74, 0xE2, 0xB0, 0x2D, 0xAE, 0x64, 0xA5, 0xD4, 0x7C, 0x15, 0x3F, 0xA9, 0xA6, 0xAB, 0x99, 0x9E, 0xF5, 0x60, 0xDA, 0x54, 0xD0, 0x06, 0x03, 0x7E, 0x66, 0xCA, 0x9B, 0x1B, 0x71, 0x00, 0xF3, 0xE5, 0x7E, 0xA2, 0x00, 0x9F, 0xB9, 0x9C, 0x4C, 0x1B, 0xA7, 0x61, 0x0D, 0x6F, 0x70, 0x83, 0x1A, 0x3C, 0xE1, 0xB4, 0x32, 0xB3, 0xD6, 0x90, 0x55, 0x38, 0xBE, 0xD0, 0x55, 0x98, 0xE7, 0x1B, 0x34, 0xE8, 0x10, 0x34, 0xED, 0xF3, 0x08, 0x56, 0xE2, 0x7F, 0xE2, 0x68, 0xC8, 0xB0, 0x6F, 0x47, 0x66, 0x5C, 0x99, 0xAD, 0x8B, 0x1C, 0xA1, 0xE8, 0x91, 0xA7, 0xD5, 0x2A, 0x9B, 0xEB, 0x22, 0x65, 0xAF, 0x72, 0xB7, 0x4E, 0x37, 0xB2, 0x14, 0x3A, 0x87, 0xA7, 0xBD, 0xB7, 0x2C, 0x2B, 0xC1, 0xD0, 0xE9, 0xB4, 0xA7, 0xF2, 0x0E, 0x30, 0x4F, 0xFC, 0x93, 0xAF, 0x03, 0x5E, 0x69, 0x09, 0xA2, 0x79, 0xB5, 0x8E, 0x51, 0x43, 0x56, 0x85, 0xFA, 0x34, 0x1C, 0x60, 0x03, 0xCC, 0x81, 0xB0, 0x06, 0x01, 0x2E, 0xAB, 0xBB, 0xCC, 0x01, 0x55, 0x20, 0xFD, 0x06, 0x0D, 0x66, 0x73, 0x22, 0xF6, 0x9D, 0xD7, 0xEA, 0x60, 0x44, 0x4D, 0x1E, 0xFF, 0xEE, 0xF1, 0xE4, 0x82, 0xCC, 0x28, 0xF4, 0x90, 0xCE, 0xD6, 0x82, 0x2B, 0xCD, 0x39, 0xE7, 0xED, 0x2C, 0x45, 0xC7, 0xAD, 0xD5, 0xBD, 0x31, 0x61, 0xA7, 0x11, 0x33, 0x41, 0x66, 0xB1, 0xF2, 0xAD, 0x0E, 0xE8, 0xBD, 0xE3, 0xDD, 0x8B, 0x78, 0xCD, 0x86, 0x83, 0x5B, 0x14, 0x2C, 0x99, 0xFD, 0x8F, 0xD1, 0x50, 0x01, 0x9C, 0xE6, 0x1F, 0x66, 0x05, 0x44, 0x02, 0x45, 0x8D, 0x98, 0xC3, 0x03, 0x79, 0xF5, 0x03, 0x79, 0xAD, 0x04, 0x64, 0x00, 0x2A, 0x80, 0x30, 0xA0, 0x07, 0x88, 0xF7, 0x26, 0xB0, 0x4F, 0xFF, 0xE2, 0xB7, 0x35, 0x4A, 0xF3, 0xAB, 0x81, 0x4A, 0xDE, 0xC9, 0xCF, 0x82, 0x8C, 0x4D, 0x1A, 0x74, 0xE6, 0xAA, 0xF8, 0x1B, 0xF9, 0x94, 0xF6, 0xF9, 0x36, 0x9A, 0x38, 0xF7, 0x17, 0xD4, 0x39, 0x37, 0x5F, 0x1A, 0xA4, 0xEB, 0x6A, 0xB9, 0x12, 0xAD, 0xDA, 0x48, 0x5D, 0xFE, 0x06, 0x07, 0x78, 0x83, 0x78, 0xE9, 0xC7, 0xA0, 0x2D, 0x3E, 0x2B, 0x17, 0x1B, 0xAB, 0x27, 0x8A, 0x00, 0x56, 0x40, 0xCE, 0x5A, 0x38, 0xB9, 0xFA, 0x2B, 0xB4, 0xB1, 0xD7, 0x9D, 0xCE, 0x4F, 0x79, 0xF3, 0x55, 0x6F, 0x4F, 0x73, 0x2C, 0x31, 0xB3, 0x7F, 0xFA, 0x3D, 0x48, 0xF1, 0x05, 0xED, 0x1C, 0x85, 0x93, 0xB7, 0x69, 0xFB, 0x71, 0x08, 0x0C, 0xD9, 0x19, 0xF9, 0x6F, 0x82, 0x76, 0x28, 0xF8, 0x1C, 0x70, 0x8F, 0x61, 0xBC, 0xEB, 0xDD, 0x68, 0xE6, 0x39, 0x9C, 0xE6, 0xB0, 0x81, 0x5C, 0x0E, 0xB5, 0x74, 0xC1, 0x80, 0x11, 0x50, 0x8D, 0x38, 0x00, 0xF1, 0x14, 0x8C, 0x1F, 0x9A, 0x51, 0xA6, 0x02, 0xA4, 0xE6, 0x23, 0x68, 0x8D, 0x6C, 0x54, 0xAC, 0xD3, 0xAD, 0x02, 0x72, 0x00, 0xB3, 0xF9, 0x83, 0x7C, 0x9D, 0x75, 0x4D, 0xD6, 0xE9, 0x36, 0x80, 0x3A, 0x37, 0x68, 0x81, 0xC1, 0x8B, 0xC7, 0xBE, 0xE1, 0x21, 0x46, 0x8A, 0x59, 0xC6, 0x6A, 0x90, 0x2B, 0x47, 0xC2, 0x71, 0xC1, 0x02, 0xD2, 0x31, 0x31, 0xFC, 0x55, 0x2C, 0x66, 0xD7, 0xA7, 0x2C, 0x7F, 0x65, 0xD7, 0x3F, 0x57, 0xFB, 0x6A, 0xC0, 0xA7, 0x60, 0x24, 0x87, 0x6C, 0x4D, 0x63, 0x3C, 0xE7, 0x7E, 0x5A, 0x5B, 0x9B, 0x49, 0x23, 0xC7, 0xFF, 0x1E, 0xC3, 0x06, 0x22, 0x11, 0x91, 0x61, 0x30, 0x10, 0x73, 0xD0, 0xA3, 0xC7, 0xFA, 0xE9, 0xC7, 0x57, 0x0B, 0xFB, 0x01, 0xC4, 0x00, 0xF3, 0xE5, 0x92, 0x50, 0x0D, 0x07, 0x2C, 0x27, 0x5C, 0x81, 0xE2, 0x0E, 0x1A, 0x1C, 0x87, 0x94, 0x61, 0xE3, 0xCA, 0x5F, 0x9A, 0xF6, 0x7B, 0xC8, 0x03, 0x6F, 0x07, 0xA3, 0xEE, 0x5E, 0xAA, 0x4E, 0xD9, 0xC5, 0xF7, 0xA9, 0x3C, 0x47, 0x87, 0xD4, 0x6A, 0x95, 0x95, 0xD7, 0xB1, 0x9F, 0xBA, 0x1C, 0x4A, 0x12, 0xE0, 0xC6, 0xD1, 0xF9, 0xB4, 0xC5, 0x9B, 0x10, 0x0A, 0x94, 0x77, 0x44, 0x2E, 0x12, 0xE0, 0x9C, 0xB6, 0x1C, 0xDB, 0x59, 0x49, 0x0F, 0xC0, 0x09, 0xFC, 0xE9, 0xC6, 0x01, 0x6E, 0xAC, 0x8D, 0xCE, 0x15, 0x88, 0x95, 0x5F, 0x23, 0x6B, 0xC8, 0x1C, 0xB9, 0x5A, 0x17, 0xD4, 0xF8, 0xCB, 0xAF, 0x21, 0x68, 0x30, 0xB5, 0x52, 0xD2, 0xEF, 0x8E, 0x4E, 0x8C, 0x9E, 0x1F, 0x32, 0xF4, 0x17, 0x9B, 0x05, 0xCE, 0xF7, 0xD6, 0x07, 0x66, 0x16, 0xEC, 0x5A, 0xA6, 0xB3, 0x43, 0x4A, 0x56, 0x27, 0xBB, 0xAC, 0x64, 0x71, 0xD9, 0x6A, 0x71, 0x62, 0xC0, 0x1A, 0xD2, 0xE0, 0x04, 0x5C, 0x66, 0xA6, 0x48, 0x74, 0x76, 0x2E, 0xA6, 0x02, 0x62, 0xB3, 0xFE, 0x21, 0x04, 0x1C, 0x69, 0xD8, 0xAA, 0x9B, 0x9C, 0x86, 0x36, 0xA2, 0x51, 0x80, 0x09, 0xE0, 0xEB, 0x0C, 0x57, 0xD9, 0x30, 0x20, 0xF7, 0xA0, 0xBE, 0xB3, 0x46, 0x45, 0x7B, 0x07, 0xAD, 0xCE, 0x77, 0x73, 0x3A, 0x0E, 0xE3, 0x34, 0x4B, 0x47, 0x36, 0xF2, 0x18, 0xB4, 0x09, 0x45, 0x38, 0x2B, 0x92, 0xF7, 0x30, 0x69, 0xED, 0xF4, 0x61, 0x8D, 0x2B, 0xC1, 0xCA, 0xDD, 0xDE, 0xEC, 0xA0, 0xBE, 0x11, 0x5C, 0xB1, 0xDD, 0xF0, 0x7D, 0x46, 0xE4, 0x74, 0x98, 0xD2, 0xFB, 0x93, 0x01, 0x71, 0xE6, 0x48, 0x90, 0xE3, 0xD3, 0x33, 0x2C, 0x0C, 0x78, 0x49, 0x62, 0x01, 0x4E, 0xAC, 0xA0, 0xED, 0x62, 0x41, 0x01, 0x4A, 0x0D, 0x69, 0xD8, 0xD2, 0xD5, 0x33, 0x50, 0xD1, 0xD0, 0x55, 0x96, 0x5A, 0x17, 0xA8, 0xA0, 0xE7, 0xC3, 0xDB, 0x41, 0xC3, 0x50, 0x1F, 0xB6, 0xA7, 0xB7, 0x82, 0xCB, 0x72, 0xD8, 0x77, 0xB8, 0xF5, 0x53, 0xBD, 0x73, 0x17, 0x32, 0x4B, 0xCE, 0xDF, 0x16, 0xAA, 0xA4, 0x6D, 0x7B, 0xBE, 0x55, 0x30, 0x31, 0xBD, 0xAD, 0xAA, 0xD6, 0x58, 0x4D, 0x6F, 0xE8, 0x3A, 0xAE, 0x11, 0x03, 0x47, 0x00, 0x26, 0x20, 0x6E, 0xE2, 0x47, 0x00, 0xE1, 0xE9, 0xCC, 0x6F, 0x31, 0x92, 0x5F, 0x6A, 0xD3, 0xA0, 0xBF, 0x64, 0x3E, 0xD6, 0x51, 0x8D, 0x58, 0x35, 0x0A, 0x6E, 0xEC, 0xAD, 0xD4, 0x01, 0xBE, 0xC8, 0x46, 0x35, 0x56, 0xED, 0x5A, 0x1C, 0xB0, 0xBA, 0x41, 0xE3, 0xAF, 0x27, 0xEA, 0x74, 0xD7, 0x54, 0x29, 0x63, 0xB2, 0x83, 0xC2, 0xF4, 0x56, 0x8E, 0xE1, 0x37, 0x29, 0x6B, 0x53, 0x67, 0x6D, 0x59, 0xBD, 0x4E, 0xFB, 0xF3, 0xF8, 0x48, 0xEF, 0xF8, 0xF4, 0xCA, 0xBF, 0xAA, 0x7F, 0xBD, 0x22, 0xFA, 0x92, 0xFE, 0xE5, 0x80, 0x35, 0xC8, 0xAF, 0xF2, 0x11, 0xA8, 0xC0, 0x17, 0x55, 0x81, 0x62, 0x20, 0x12, 0xA0, 0x3B, 0x11, 0x42, 0x5F, 0x4E, 0x09, 0x22, 0x7F, 0x05, 0x24, 0x1B, 0xEB, 0x05, 0xE2, 0x09, 0x84, 0x03, 0xC9, 0x0D, 0x03, 0x8A, 0x3B, 0x6B, 0x75, 0x00, 0x21, 0x40, 0xBD, 0xA1, 0x80, 0x64, 0xE3, 0x00, 0x2C, 0xF3, 0x93, 0x6B, 0x07, 0x4D, 0xBA, 0x5B, 0x2F, 0x20, 0xB2, 0xCD, 0xD7, 0xB7, 0x82, 0xD9, 0x95, 0x77, 0x7E, 0x7D, 0x39, 0x2A, 0x1C, 0x8C, 0x10, 0xFA, 0x31, 0x04, 0x6B, 0xCB, 0x95, 0x79, 0x8C, 0xF1, 0x7C, 0x19, 0x3C, 0xEC, 0x58, 0x1F, 0x22, 0x66, 0xB4, 0xF8, 0xCC, 0x68, 0xB9, 0x02, 0x6A, 0x80, 0x30, 0xC0, 0x02, 0x50, 0x02, 0x27, 0xA6, 0xAD, 0x77, 0x36, 0xE2, 0x22, 0xE6, 0xA7, 0x3A, 0x0D, 0xEF, 0xFF, 0xCF, 0x00, 0x12, 0x80, 0x09, 0x90, 0x86, 0x0A, 0x60, 0xB5, 0x9B, 0xC7, 0x1B, 0x01, 0xA4, 0x02, 0x6F, 0x30, 0x7F, 0x83, 0xB2, 0x83, 0x86, 0xF5, 0xA3, 0x16, 0x50, 0xD6, 0x95, 0x77, 0xB7, 0x0C, 0xCE, 0x69, 0x66, 0xD5, 0x2D, 0x7C, 0x86, 0x44, 0xAA, 0x2B, 0xA6, 0x13, 0x1C, 0xB9, 0x53, 0xDD, 0xFE, 0xCE, 0x6B, 0xF4, 0xEA, 0x92, 0x47, 0x3A, 0x22, 0x45, 0x77, 0xE1, 0xB6, 0x1D, 0x4C, 0x01, 0x62, 0xFD, 0x45, 0x02, 0x34, 0x01, 0xAA, 0x86, 0x01, 0xCA, 0x40, 0x5C, 0x18, 0x60, 0x04, 0x70, 0x01, 0x77, 0x3A, 0x6F, 0x44, 0xE3, 0x00, 0xD9, 0xFF, 0x03, 0x09, 0x20, 0x01, 0x98, 0x03, 0x5E, 0x40, 0x04, 0x90, 0x79, 0x67, 0xFC, 0x02, 0x7C, 0x00, 0xA1, 0x86, 0x35, 0x12, 0xD0, 0xD3, 0x70, 0xC0, 0x0C, 0x88, 0xE8, 0xA0, 0xD9, 0x77, 0x32, 0x8B, 0x7E, 0x12, 0xE9, 0xF0, 0x77, 0x5C, 0x53, 0x83, 0x89, 0x5F, 0xA8, 0x23, 0xC8, 0xC6, 0xED, 0x3E, 0x93, 0xBD, 0xEE, 0x74, 0x04, 0xCD, 0xE3, 0xAE, 0xB4, 0xE1, 0xEE, 0x42, 0xE7, 0x3D, 0x58, 0x95, 0x37, 0x99, 0x3D, 0xA1, 0x01, 0xB0, 0x00, 0x64, 0x80, 0xD9, 0xCC, 0x77, 0x3B, 0x03, 0xE1, 0x00, 0x75, 0x7C, 0x24, 0x5F, 0x8B, 0x53, 0xF7, 0xC1, 0xCD, 0x29, 0xEF, 0xA5, 0x73, 0x02, 0x3C, 0x39, 0xC0, 0x0C, 0xC8, 0x69, 0x18, 0xA0, 0x0D, 0xD7, 0xD9, 0x18, 0x7A, 0xBC, 0x11, 0x8D, 0xFB, 0xDF, 0xA2, 0xC1, 0xF3, 0xBF, 0x29, 0x77, 0xD0, 0xFC, 0x3B, 0x72, 0x1C, 0x8B, 0x0F, 0x6C, 0x7F, 0x39, 0x8F, 0xAF, 0x6E, 0x91, 0x48, 0xE9, 0x94, 0x20, 0x11, 0xC6, 0x84, 0x7B, 0xBE, 0x12, 0x1E, 0xCB, 0x7D, 0x4E, 0xDB, 0xF9, 0x31, 0xCF, 0x5F, 0x6A, 0x2B, 0x5A, 0x62, 0x60, 0x5A, 0x33, 0x0E, 0x75, 0x79, 0x18, 0xEB, 0x76, 0x75, 0x5D, 0x19, 0xB8, 0x5D, 0x9A, 0xF3, 0x29, 0xF2, 0x52, 0x05, 0x82, 0x96, 0x05, 0x37, 0x35, 0xAC, 0x51, 0xD3, 0xCB, 0x96, 0x7D, 0xD7, 0xE6, 0x1B, 0x07, 0xE0, 0x06, 0x19, 0xC0, 0x0A, 0x68, 0xDE, 0x17, 0x41, 0x7C, 0x45, 0x3C, 0x49, 0x85, 0x91, 0x37, 0xC7, 0xD0, 0xC0, 0xB4, 0xA5, 0x89, 0x98, 0x7F, 0x38, 0x4C, 0x8A, 0x5F, 0x2F, 0x64, 0x1A, 0x79, 0xFB, 0xB2, 0xA4, 0x3E, 0x2B, 0xD1, 0x9D, 0x09, 0x44, 0xC3, 0x76, 0x0C, 0x56, 0xB4, 0xB8, 0x80, 0xD2, 0x99, 0x58, 0xE5, 0x98, 0x29, 0x4D, 0x3B, 0x2B, 0x67, 0xEB, 0x13, 0x4F, 0x9F, 0x2C, 0x73, 0x28, 0x94, 0xDA, 0x92, 0x94, 0x0B, 0x90, 0x67, 0x4E, 0xB2, 0x91, 0x03, 0x68, 0x35, 0x02, 0x10, 0x07, 0x78, 0x5B, 0x98, 0x36, 0xFC, 0xDC, 0xA0, 0x41, 0x38, 0x54, 0xAA, 0xFF, 0x32, 0xB1, 0x15, 0xBE, 0xA0, 0x7D, 0x0F, 0xBE, 0x22, 0xA3, 0xA9, 0x3D, 0xCB, 0x38, 0xAD, 0xCB, 0xAE, 0x39, 0x83, 0x66, 0x3B, 0x0B, 0x59, 0xB6, 0xBA, 0x52, 0x1A, 0x4E, 0x80, 0x04, 0x40, 0xBC, 0x06, 0xEE, 0xF3, 0x72, 0x7B, 0x5F, 0x2B, 0x75, 0xFC, 0x99, 0x43, 0xEA, 0x48, 0x80, 0x46, 0xC3, 0x80, 0x58, 0xAA, 0x3D, 0x3F, 0x73, 0xA1, 0xA7, 0x34, 0x72, 0xAA, 0x2F, 0xCF, 0x5A, 0x5C, 0x76, 0x00, 0x75, 0x40, 0x7C, 0x95, 0x2A, 0x1A, 0xAC, 0x80, 0xE9, 0x8D, 0x5A, 0xF5, 0xC0, 0xE2, 0xFA, 0x97, 0x5F, 0xD3, 0xC5, 0xD4, 0xE1, 0x66, 0x72, 0x9F, 0xE1, 0x05, 0xD9, 0x6B, 0x73, 0x3C, 0x11, 0x8A, 0x39, 0x23, 0x7C, 0xA3, 0x16, 0xBB, 0x5E, 0x7C, 0x1A, 0x96, 0x40, 0xC8, 0xFC, 0x24, 0x0A, 0xD0, 0x59, 0xE2, 0x60, 0x59, 0x51, 0xAB, 0x95, 0x22, 0xDF, 0x53, 0x85, 0x57, 0x22, 0x7A, 0x0F, 0x2F, 0x35, 0x9D, 0x55, 0x06, 0x8D, 0xB9, 0x9E, 0x38, 0xE6, 0x95, 0xCB, 0x08, 0xF0, 0x04, 0xEA, 0x5E, 0x9D, 0x6A, 0x41, 0xE6, 0x0D, 0x2A, 0x19, 0xA8, 0x0F, 0xFE, 0x44, 0xDE, 0x72, 0x70, 0x75, 0xE2, 0xF0, 0xCF, 0x3E, 0xC7, 0x99, 0x87, 0x86, 0xB4, 0x8B, 0x2A, 0xEA, 0x52, 0x63, 0x16, 0xAC, 0xC7, 0xED, 0xC6, 0xDB, 0x22, 0x98, 0xE5, 0x86, 0x1F, 0x6B, 0x52, 0x43, 0xF8, 0x7A, 0x40, 0x97, 0xA1, 0x50, 0x69, 0x23, 0x66, 0x7C, 0x64, 0xB5, 0x2E, 0x79, 0x00, 0x26, 0x8D, 0x03, 0xA8, 0xCF, 0x4F, 0x29, 0xB3, 0x92, 0x50, 0xCB, 0x8C, 0x5B, 0xB8, 0xB1, 0xB4, 0xC0, 0x16, 0x6B, 0x1E, 0x06, 0x03, 0x59, 0x0D, 0x5E, 0x45, 0x76, 0x59, 0x77, 0x82, 0x17, 0x34, 0xB8, 0x90, 0xE6, 0xC9, 0x6F, 0xF3, 0xE7, 0x53, 0x23, 0x68, 0xBD, 0xAB, 0xA5, 0x87, 0xE3, 0xFF, 0x2E, 0x43, 0xE5, 0x21, 0x74, 0xBC, 0x0A, 0x82, 0xD7, 0x20, 0x8C, 0x8B, 0x28, 0xA0, 0x56, 0x08, 0xAD, 0x21, 0xB9, 0xC6, 0x37, 0x24, 0xA0, 0x3E, 0x6B, 0x48, 0x99, 0x0D, 0x07, 0xB4, 0x00, 0xB6, 0x59, 0xDA, 0x2B, 0x5E, 0xA3, 0xA2, 0xAF, 0xF6, 0x7E, 0xED, 0x63, 0x95, 0x6B, 0x4E, 0x9B, 0x2D, 0x4D, 0xEF, 0x9A, 0x74, 0x96, 0xD2, 0xA0, 0x65, 0x6B, 0xD5, 0xB0, 0x04, 0x5C, 0x80, 0x8A, 0x1B, 0xB4, 0x77, 0xA0, 0xC5, 0xA0, 0x4F, 0xD7, 0xEE, 0x92, 0x87, 0xF0, 0xB6, 0x24, 0x90, 0x09, 0x63, 0x86, 0x72, 0x88, 0x09, 0x3D, 0x99, 0x7E, 0x7E, 0x4C, 0x96, 0x3D, 0x31, 0x87, 0x6F, 0x69, 0xCE, 0x0B, 0x8A, 0xF0, 0x54, 0x67, 0x98, 0xCC, 0x29, 0xFE, 0xD9, 0x08, 0x6A, 0x04, 0x50, 0x07, 0x48, 0x5F, 0xF9, 0x40, 0x01, 0xF2, 0x34, 0x96, 0x1B, 0xAD, 0xF9, 0xCB, 0x9E, 0xCF, 0x8B, 0x42, 0xC5, 0x74, 0x3F, 0xB0, 0x03, 0xB8, 0xAD, 0xF3, 0x30, 0x35, 0xEE, 0x39, 0xDA, 0x01, 0x62, 0x80, 0xA9, 0x51, 0x80, 0x34, 0xCC, 0x3A, 0x68, 0xF2, 0x9D, 0xCD, 0x24, 0xE5, 0xDB, 0xC6, 0x34, 0x30, 0xCB, 0x98, 0x09, 0xA5, 0x15, 0x49, 0x47, 0x77, 0x98, 0x59, 0xBF, 0x56, 0x08, 0x0B, 0x8E, 0x7C, 0x58, 0x4D, 0x68, 0xED, 0xC6, 0x95, 0x98, 0x52, 0xD0, 0x13, 0xCB, 0xA0, 0xDB, 0x01, 0xE1, 0x69, 0x8D, 0x1C, 0x31, 0x1D, 0x5D, 0xB8, 0xE1, 0xD1, 0x38, 0x80, 0x08, 0xC0, 0x07, 0xA0, 0x5C, 0x65, 0xA2, 0x9C, 0xEA, 0x4B, 0x1D, 0x86, 0x54, 0xA8, 0xBC, 0x0F, 0xD9, 0x2F, 0x29, 0xC0, 0x09, 0xA8, 0x03, 0xAE, 0x40, 0x58, 0x23, 0x81, 0xA4, 0x89, 0xD8, 0x05, 0x0F, 0xBA, 0x2B, 0x4D, 0xFF, 0x39, 0xE3, 0xF6, 0xE9, 0x89, 0xAB, 0x81, 0xB7, 0xAB, 0x9A, 0x7F, 0xBF, 0xAD, 0xC0, 0xC6, 0xD3, 0xFA, 0xD7, 0x63, 0xD4, 0xF4, 0xBA, 0xEF, 0x93, 0x63, 0x9F, 0xD4, 0x8E, 0xCD, 0x62, 0x5C, 0xE9, 0xAA, 0x8A, 0x15, 0x70, 0x56, 0xD2, 0x45, 0x57, 0x3E, 0x47, 0x0C, 0x88, 0x98, 0x81, 0x39, 0x34, 0x75, 0x40, 0xA2, 0xAB, 0xAA, 0x95, 0x8D, 0x27, 0x13, 0x9D, 0x86, 0xA3, 0x1E, 0xCB, 0xD1, 0x30, 0x01, 0x56, 0x40, 0x78, 0x3E, 0x9E, 0xB1, 0x67, 0x0E, 0x1E, 0x20, 0x14, 0xF0, 0x86, 0xF9, 0x7A, 0x3C, 0x5F, 0xD0, 0x90, 0xA6, 0xF5, 0x84, 0xE7, 0x90, 0xB9, 0x7D, 0x3A, 0x0E, 0x2B, 0xBE, 0xC3, 0x43, 0x20, 0x16, 0xD6, 0xEC, 0xBE, 0x4F, 0xC3, 0x6F, 0xC2, 0xD5, 0xF9, 0x8D, 0x5D, 0x25, 0x18, 0x07, 0x5A, 0x24, 0xC1, 0x46, 0x37, 0x94, 0x05, 0xC0, 0x6B, 0xF6, 0xA4, 0x24, 0x40, 0xA7, 0x51, 0xC0, 0x93, 0xED, 0xAE, 0xB9, 0x06, 0xB4, 0x66, 0x3B, 0xF8, 0xAF, 0x6E, 0xB1, 0x92, 0xE9, 0x0C, 0x46, 0x67, 0xD5, 0x0C, 0x6A, 0xA6, 0x44, 0x59, 0x00, 0x55, 0x20, 0x12, 0xA8, 0x0B, 0x5F, 0xBB, 0x02, 0x01, 0x56, 0xC0, 0x4B, 0xBE, 0x9F, 0x1B, 0x34, 0xFF, 0x4C, 0x4D, 0xE4, 0x08, 0x66, 0x18, 0xCB, 0xF0, 0x86, 0xC4, 0x17, 0xE9, 0xFB, 0x58, 0xD8, 0x99, 0x94, 0x91, 0x2C, 0x51, 0xE4, 0x6E, 0x6B, 0x4A, 0xBC, 0xE9, 0x4D, 0xF7, 0x66, 0x19, 0x8B, 0x19, 0x47, 0xD2, 0x71, 0x23, 0xA6, 0xDB, 0xC5, 0x29, 0x33, 0xEF, 0x70, 0x8B, 0x78, 0x01, 0xD8, 0x01, 0x98, 0x66, 0xEE, 0xD6, 0x6C, 0xCD, 0xDC, 0x4E, 0x80, 0xEE, 0x27, 0x9D, 0x06, 0x09, 0x29, 0xC3, 0xF3, 0xF7, 0x4B, 0x71, 0x01, 0x71, 0xA6, 0xCA, 0xE6, 0x1C, 0x80, 0x0A, 0x90, 0x04, 0xB4, 0x00, 0xD3, 0x86, 0x37, 0x0C, 0xF0, 0x03, 0x04, 0x01, 0xC5, 0x1D, 0x34, 0x88, 0xD2, 0x84, 0xF2, 0x7B, 0x2E, 0x25, 0xF9, 0x93, 0x11, 0x25, 0x29, 0xF4, 0x7D, 0xD4, 0xD7, 0x70, 0xA4, 0x21, 0x59, 0x5B, 0x1E, 0xCF, 0xAA, 0x63, 0x9A, 0x83, 0x9D, 0x7D, 0x50, 0x7B, 0x9D, 0xEA, 0xFB, 0x78, 0x9D, 0xD3, 0xE0, 0x50, 0x0B, 0x38, 0xB1, 0x15, 0xC2, 0xEB, 0x0C, 0x40, 0x40, 0x08, 0xA0, 0xBA, 0x2E, 0x38, 0xD1, 0x10, 0x40, 0x1A, 0x75, 0x8F, 0xFA, 0x31, 0x0F, 0x55, 0x46, 0xB3, 0xC8, 0x75, 0xCE, 0xAA, 0x52, 0xAD, 0x09, 0xE7, 0xE6, 0x8D, 0x5C, 0x9F, 0x6C, 0x7E, 0xF2, 0x03, 0xA4, 0xDE, 0xA5, 0x96, 0xFF, 0x44, 0x5B, 0x02, 0xFF, 0x6D, 0x43, 0xF2, 0x4F, 0xE0, 0x83, 0x0E, 0xA1, 0x42, 0x28, 0x4A, 0x50, 0xE6, 0x10, 0xEA, 0x86, 0xA2, 0x67, 0x36, 0x6C, 0x0A, 0x6F, 0xE7, 0x70, 0x1F, 0x79, 0x09, 0x77, 0xF5, 0xE9, 0x18, 0x58, 0x6B, 0xB6, 0x30, 0x9F, 0x39, 0x13, 0x40, 0x2F, 0x76, 0x19, 0x6E, 0xD5, 0xFB, 0xB4, 0xD6, 0x90, 0x67, 0xBA, 0x81, 0x99, 0xC7, 0x53, 0xF1, 0x59, 0x35, 0xAC, 0xFB, 0x26, 0x38, 0x80, 0xC7, 0x2C, 0xC6, 0x14, 0xCD, 0x76, 0x10, 0x6E, 0x28, 0x35, 0xB4, 0xC1, 0x80, 0xE4, 0x84, 0x1A, 0x10, 0x72, 0x83, 0xD6, 0xD3, 0x8B, 0x0F, 0xCA, 0xC6, 0xD1, 0xAD, 0x3F, 0x9A, 0x18, 0xFA, 0x76, 0x52, 0x50, 0x57, 0x54, 0x46, 0x49, 0xD7, 0x03, 0x5B, 0x4C, 0xEA, 0x50, 0x0E, 0x19, 0xAD, 0x0E, 0xA9, 0xD0, 0xD9, 0x52, 0x13, 0xD1, 0xE0, 0x69, 0x16, 0x51, 0x0D, 0x6B, 0x08, 0x35, 0x72, 0xEA, 0x6F, 0x59, 0xA6, 0x4C, 0xD4, 0x75, 0x29, 0x75, 0x69, 0xEE, 0x82, 0x3C, 0x36, 0x7D, 0x7F, 0x45, 0x1C, 0xEB, 0x30, 0x09, 0x01, 0xC1, 0x40, 0x9D, 0x8E, 0x96, 0x01, 0xDC, 0xD0, 0x02, 0xDC, 0x1B, 0xD1, 0x10, 0xC0, 0xB4, 0x21, 0xCB, 0x1B, 0xE5, 0x06, 0x8D, 0xCE, 0xB7, 0xB6, 0x0E, 0xC7, 0x57, 0x01, 0x0D, 0x43, 0xFE, 0xDB, 0xCB, 0x3E, 0x23, 0x00, 0x76, 0x86, 0xC6, 0xB0, 0x3E, 0xD0, 0x41, 0x21, 0x34, 0x53, 0x79, 0x0C, 0x26, 0x70, 0x5A, 0xCD, 0x3E, 0xA1, 0x4F, 0x14, 0x37, 0xCB, 0x62, 0x91, 0x80, 0xCC, 0xBF, 0xDA, 0xE1, 0x7B, 0xC4, 0x02, 0xD4, 0x80, 0x67, 0xEE, 0x47, 0x33, 0x65, 0x7D, 0x1F, 0xA5, 0x5A, 0x65, 0x5C, 0x3B, 0x8D, 0x21, 0x59, 0x85, 0xD4, 0xB1, 0x77, 0xB3, 0xB5, 0x71, 0x79, 0x02, 0xC5, 0x53, 0x33, 0x28, 0x07, 0xB0, 0x04, 0x42, 0x1A, 0xD6, 0x60, 0xC0, 0xA3, 0x61, 0x40, 0xDC, 0x64, 0xD6, 0x0D, 0x1A, 0x75, 0x97, 0x0F, 0x4E, 0x68, 0x29, 0xB8, 0x8B, 0x9A, 0x42, 0x6E, 0x65, 0x22, 0x90, 0x29, 0x27, 0x63, 0xA1, 0x08, 0xA1, 0x2E, 0x94, 0x32, 0x66, 0x6F, 0x19, 0xEF, 0x95, 0x76, 0xE6, 0xCC, 0xF8, 0xD4, 0x09, 0x4B, 0x80, 0x79, 0x76, 0x27, 0xFA, 0x98, 0x62, 0x63, 0xAF, 0x52, 0x47, 0x09, 0x9C, 0x35, 0x11, 0xF7, 0xAC, 0x43, 0x1C, 0x27, 0x40, 0x0E, 0xD8, 0xFD, 0xDF, 0xCF, 0x6C, 0x18, 0xF0, 0x04, 0x8A, 0x96, 0xDD, 0x21, 0x01, 0xD2, 0xB0, 0xFC, 0x51, 0x56, 0x77, 0x07, 0x8C, 0x01, 0x5D, 0x3B, 0x5C, 0xE6, 0x0D, 0x1A, 0x63, 0x17, 0x23, 0xFD, 0xC4, 0x2F, 0x44, 0xF6, 0xBD, 0x17, 0x54, 0xD1, 0x56, 0xC6, 0xC7, 0x86, 0xF7, 0xB7, 0x6A, 0x7D, 0x87, 0xF0, 0xF0, 0x9C, 0x2B, 0x8D, 0xD7, 0xDC, 0x90, 0xC4, 0x1A, 0xF9, 0xAB, 0x16, 0x18, 0xE0, 0x3C, 0xDF, 0x94, 0x06, 0x48, 0xAC, 0xEE, 0x32, 0x5E, 0x72, 0xD8, 0xA2, 0x06, 0x03, 0x2A, 0x73, 0x90, 0x86, 0xCD, 0xDB, 0x06, 0x35, 0xDC, 0x47, 0xFA, 0x93, 0x5E, 0xE6, 0x9A, 0x0B, 0x70, 0x06, 0xC2, 0x81, 0xCC, 0xB5, 0xE0, 0x08, 0xD0, 0x68, 0x78, 0x43, 0x00, 0x31, 0x80, 0x13, 0x10, 0x07, 0x3C, 0x3A, 0x68, 0x82, 0xDE, 0x17, 0x96, 0x6F, 0xA6, 0x2B, 0x0F, 0x73, 0x48, 0xE9, 0x04, 0x1B, 0x06, 0x6F, 0xE1, 0x87, 0x7B, 0x76, 0xE5, 0xC1, 0x86, 0x32, 0x61, 0xDD, 0xD8, 0xEF, 0x4E, 0xF5, 0x0C, 0xDC, 0xB0, 0x9C, 0xD0, 0x53, 0x57, 0xF8, 0x14, 0x02, 0xD0, 0xCB, 0xBE, 0xAE, 0x41, 0x9F, 0x06, 0xA8, 0x03, 0xDC, 0x38, 0x39, 0x0B, 0x03, 0xC9, 0x13, 0x51, 0x40, 0x75, 0x7C, 0xE4, 0x8A, 0xC0, 0x09, 0xA8, 0x58, 0x4E, 0x56, 0x35, 0x67, 0x8F, 0xD2, 0x01, 0xD8, 0x96, 0x83, 0x5A, 0x02, 0x26, 0x8D, 0x04, 0xDC, 0x80, 0xE0, 0x99, 0x53, 0x3F, 0x77, 0xA5, 0xE9, 0x0B, 0x93, 0x7C, 0x62, 0xDC, 0x44, 0x25, 0xB1, 0x04, 0x87, 0x5C, 0xA7, 0xD6, 0x1A, 0x4B, 0x6B, 0xA6, 0x1C, 0x63, 0x7C, 0xCD, 0xA7, 0x3F, 0x07, 0x8F, 0x22, 0xBB, 0xBE, 0x9E, 0x9D, 0x77, 0x71, 0x4B, 0x6E, 0x8C, 0xEA, 0x06, 0xBD, 0x62, 0x5E, 0x18, 0x40, 0x31, 0x6E, 0x32, 0xCA, 0x00, 0xD5, 0xDD, 0xBB, 0x01, 0x67, 0xC0, 0x0A, 0x70, 0xDF, 0xBB, 0x1F, 0x50, 0x7A, 0x3A, 0x92, 0xFA, 0xCA, 0x5A, 0xED, 0x44, 0xDF, 0xF1, 0x71, 0xC0, 0x0C, 0x88, 0x04, 0xEA, 0x16, 0x29, 0x14, 0x60, 0x01, 0xE4, 0x00, 0x4A, 0x80, 0x5D, 0x14, 0xE0, 0x09, 0xE4, 0x5D, 0x69, 0x76, 0x83, 0x06, 0x89, 0x5A, 0xF8, 0xB7, 0xE0, 0x3C, 0x20, 0xBA, 0x3A, 0xE6, 0x9D, 0x44, 0xBF, 0xD5, 0x02, 0xEA, 0xB3, 0x6E, 0xCE, 0x2A, 0x9E, 0xAF, 0x32, 0x81, 0xDE, 0xC7, 0x4C, 0x73, 0x2F, 0xED, 0x8E, 0x1D, 0xF0, 0x3A, 0x0B, 0xBC, 0x56, 0xAD, 0x6C, 0x95, 0xD3, 0xF2, 0xCC, 0xD5, 0x64, 0x17, 0x0A, 0x38, 0x37, 0xD6, 0x84, 0xD8, 0xE4, 0x97, 0xC4, 0x47, 0x44, 0xCE, 0x2D, 0xE2, 0xCC, 0xE2, 0x48, 0x10, 0x50, 0x1F, 0xBE, 0xB3, 0x3D, 0xC0, 0x0C, 0xC8, 0x45, 0x00, 0xEA, 0x80, 0x09, 0xE0, 0x0A, 0x04, 0x01, 0x2F, 0x68, 0xFE, 0x45, 0xAB, 0x34, 0xBF, 0xC6, 0x62, 0x93, 0xC0, 0xFF, 0xA6, 0xD9, 0xE6, 0x90, 0xD2, 0x65, 0xC9, 0x44, 0xD0, 0x8E, 0xF7, 0x03, 0x21, 0x5F, 0xD0, 0xB6, 0x70, 0xE8, 0x69, 0x31, 0xE3, 0x3E, 0x9E, 0xB1, 0xEC, 0xDC, 0xF2, 0xCC, 0x51, 0x04, 0x29, 0x00, 0xC5, 0xB5, 0xD9, 0x04, 0xFC, 0x00, 0x99, 0xF3, 0xBF, 0x15, 0x01, 0x5C, 0x73, 0x53, 0xE2, 0x1B, 0xB4, 0x04, 0xB4, 0x91, 0xF5, 0x62, 0xD7, 0x85, 0x93, 0x39, 0x91, 0x40, 0x09, 0x30, 0x05, 0x3C, 0x80, 0x8C, 0xDB, 0x8C, 0x0B, 0x70, 0x36, 0xA2, 0xA1, 0x00, 0x79, 0x83, 0x01, 0x16, 0xC0, 0x6E, 0xD0, 0xE2, 0x53, 0xBD, 0x58, 0xE6, 0x97, 0xBB, 0x65, 0xFE, 0x9B, 0x95, 0xFA, 0xA9, 0x6B, 0xB0, 0xDF, 0x79, 0x1A, 0xB2, 0xD7, 0xC8, 0x78, 0x47, 0xDA, 0x1D, 0x4C, 0xB0, 0xDF, 0x9E, 0xB6, 0x52, 0xA9, 0xBB, 0x35, 0xBC, 0xC1, 0xB9, 0x06, 0xC5, 0x36, 0xA2, 0x91, 0xAB, 0xD1, 0x56, 0x08, 0xA0, 0x5C, 0x8D, 0x4E, 0xD2, 0xD0, 0xF9, 0xA9, 0x74, 0x1A, 0xD0, 0xBC, 0x9E, 0x22, 0x9A, 0x09, 0x35, 0x2E, 0x40, 0x0D, 0xB0, 0x46, 0xAC, 0x79, 0x86, 0x55, 0x73, 0xE4, 0x46, 0x65, 0x43, 0x1B, 0xB2, 0xBA, 0xD1, 0xF4, 0xEE, 0x69, 0x18, 0x4C, 0x90, 0x63, 0x2A, 0xDE, 0xB7, 0x78, 0x71, 0xF2, 0x10, 0x0A, 0x54, 0xE6, 0xA8, 0x13, 0x0B, 0xC6, 0x38, 0xF3, 0x0B, 0x21, 0x58, 0x3F, 0x9D, 0x60, 0xAC, 0xE6, 0x84, 0x92, 0x2A, 0x20, 0xCF, 0x4C, 0x0A, 0x45, 0x01, 0xBC, 0x72, 0xF8, 0x56, 0xCB, 0x85, 0x82, 0xA7, 0xB8, 0x5A, 0x0D, 0x10, 0x6E, 0x68, 0xC3, 0x01, 0x1B, 0x2E, 0x00, 0x38, 0x80, 0x0C, 0x55, 0x50, 0xCA, 0x94, 0x2D, 0x39, 0xAF, 0x94, 0xDD, 0xD5, 0x24, 0x19, 0xA0, 0xDC, 0xA0, 0x75, 0xCB, 0xBD, 0x20, 0x40, 0x18, 0xF0, 0x77, 0x4E, 0xAB, 0xF6, 0x4C, 0xAB, 0x7F, 0x15, 0x2B, 0x76, 0xDF, 0xED, 0x44, 0xDB, 0xC8, 0x40, 0x71, 0xD8, 0x2F, 0xD4, 0x56, 0x08, 0x4E, 0x13, 0x4C, 0xBB, 0x4A, 0x50, 0x76, 0xA6, 0x7C, 0xDC, 0xE5, 0x87, 0x20, 0x59, 0x0C, 0x38, 0x35, 0x43, 0x12, 0xF2, 0xCB, 0x9A, 0xE5, 0x99, 0xC1, 0xCF, 0x00, 0x31, 0x35, 0x6C, 0x42, 0x87, 0x81, 0x92, 0xBC, 0xD5, 0xA1, 0x4B, 0x03, 0x5A, 0x36, 0x65, 0xA9, 0xA2, 0x80, 0x39, 0x90, 0x1D, 0xBC, 0xE3, 0x0B, 0x67, 0xD9, 0xC6, 0x27, 0x90, 0x2F, 0x86, 0x1D, 0x35, 0x86, 0xB4, 0x5B, 0xFF, 0xBC, 0xC1, 0xF2, 0x93, 0x02, 0x0B, 0x14, 0xDE, 0x19, 0x28, 0x25, 0x8A, 0xA3, 0x2E, 0xE4, 0x88, 0x5A, 0x60, 0x53, 0x63, 0xDF, 0x53, 0x2B, 0x0F, 0xCF, 0xDF, 0x3A, 0xFC, 0x47, 0xC2, 0x5B, 0xF3, 0xC7, 0x53, 0x17, 0xAB, 0x12, 0x10, 0x32, 0xA1, 0xB9, 0xA6, 0x56, 0x5E, 0xE4, 0xFC, 0x44, 0x0E, 0xB8, 0xEE, 0x6A, 0xDE, 0xB4, 0x03, 0x64, 0x59, 0x6D, 0x81, 0x3A, 0x33, 0x9C, 0xC9, 0x40, 0xE9, 0x44, 0xAE, 0x07, 0x24, 0x0C, 0xB8, 0x49, 0xB7, 0x97, 0x1C, 0xE2, 0x9E, 0xB7, 0x55, 0xF4, 0x82, 0xA6, 0x5F, 0xB1, 0x9B, 0xBE, 0x26, 0x16, 0x62, 0x54, 0x09, 0x24, 0x04, 0x3B, 0x94, 0x46, 0xA7, 0xE7, 0xB3, 0x15, 0xDE, 0xDB, 0xFA, 0xBC, 0x03, 0x63, 0x4B, 0x80, 0xEF, 0x01, 0xA8, 0xCD, 0xD9, 0xDD, 0x46, 0xC0, 0x39, 0xAB, 0xC2, 0xE7, 0xAB, 0xF4, 0xC4, 0xD3, 0x78, 0x44, 0x1B, 0x72, 0x21, 0x0D, 0x05, 0x74, 0xD8, 0x05, 0xE1, 0x8F, 0x1E, 0x57, 0x58, 0xBF, 0xDB, 0x51, 0x02, 0xC3, 0xC0, 0x78, 0x18, 0xDC, 0x09, 0x90, 0xD6, 0xF0, 0xF5, 0x89, 0x1A, 0xDC, 0xB0, 0x39, 0x4A, 0x50, 0x98, 0xDB, 0xF4, 0x85, 0x3E, 0x43, 0x18, 0x32, 0xFE, 0xB2, 0x42, 0xA1, 0x0C, 0x7B, 0xAB, 0x68, 0x2D, 0x3F, 0x19, 0xFC, 0x6E, 0x4A, 0x21, 0xE9, 0xAF, 0x1C, 0x35, 0xCF, 0xE5, 0x34, 0xC1, 0xAF, 0x6C, 0xE8, 0x37, 0x4C, 0x32, 0x53, 0x3D, 0xB6, 0xDC, 0x0E, 0x22, 0x01, 0x2D, 0x40, 0x62, 0x35, 0xAB, 0x16, 0x70, 0x96, 0x93, 0x8B, 0x6A, 0x83, 0x01, 0x49, 0x40, 0x63, 0x56, 0x5C, 0x5F, 0x4E, 0x49, 0x67, 0x86, 0x5C, 0x0D, 0x30, 0x07, 0x5C, 0x66, 0x5C, 0x8F, 0x03, 0xCC, 0x0D, 0x02, 0x48, 0xE6, 0x8E, 0x5C, 0xB4, 0x2A, 0xCC, 0x7C, 0x83, 0x26, 0x4F, 0x59, 0x95, 0x81, 0x32, 0x44, 0x20, 0x6F, 0xDD, 0x33, 0x30, 0x6E, 0x2A, 0x21, 0x90, 0xD0, 0x32, 0x6A, 0x71, 0x91, 0xCC, 0x8C, 0xDA, 0xB6, 0xD4, 0x7C, 0x89, 0x6B, 0x59, 0xDE, 0x4C, 0x34, 0x25, 0x72, 0x9C, 0x73, 0x82, 0xAB, 0x47, 0x23, 0x81, 0xD2, 0xD5, 0x43, 0xB5, 0xEB, 0xEA, 0xB6, 0xBA, 0x5D, 0x18, 0x20, 0x02, 0xF2, 0xCC, 0x37, 0x81, 0xAC, 0x39, 0x66, 0xEA, 0x80, 0xEB, 0x1A, 0x53, 0xB9, 0x5A, 0x0A, 0x54, 0x1B, 0x02, 0xC8, 0x92, 0xA7, 0x93, 0xCC, 0x4F, 0x16, 0x37, 0x68, 0xFA, 0x8F, 0x12, 0x4F, 0x62, 0x1E, 0x98, 0x68, 0x0A, 0x0A, 0x91, 0x28, 0xB4, 0x08, 0x23, 0xD7, 0x6B, 0x8A, 0x7A, 0x2B, 0xDE, 0x0B, 0x51, 0x6A, 0xA3, 0x88, 0xA7, 0x3E, 0x1A, 0xA4, 0xE4, 0xA5, 0x9C, 0xB9, 0xE6, 0x5F, 0x86, 0xEA, 0x66, 0x05, 0x67, 0x2E, 0xFE, 0xD8, 0xEC, 0xB2, 0x21, 0x5D, 0x1E, 0xA5, 0x06, 0x68, 0xE3, 0xE8, 0x2A, 0xDB, 0xD5, 0xD4, 0x3F, 0xCA, 0xDD, 0x07, 0xEE, 0xEF, 0x39, 0x2A, 0x25, 0x44, 0xEF, 0x52, 0xA6, 0x0C, 0xA4, 0xDD, 0x7B, 0xDB, 0xBA, 0x4B, 0x9E, 0x95, 0xDF, 0x28, 0x20, 0xB9, 0x61, 0x8D, 0x9A, 0xFD, 0xAB, 0xCC, 0x1D, 0x34, 0x6B, 0x79, 0x56, 0x62, 0x20, 0x2A, 0xDB, 0xD7, 0x29, 0x5B, 0xA7, 0xBE, 0x4C, 0x2E, 0x91, 0xE2, 0x8E, 0x8E, 0x2C, 0xA4, 0xB3, 0xF7, 0x70, 0x07, 0xD3, 0xCE, 0x42, 0xEE, 0xC9, 0x04, 0xBE, 0x8C, 0x60, 0xEE, 0x7B, 0x68, 0x65, 0x21, 0xF5, 0xCC, 0xE9, 0xA3, 0x2C, 0xB3, 0x4B, 0xC2, 0xBC, 0xA1, 0x8D, 0x00, 0xC4, 0x67, 0x78, 0x6B, 0x77, 0xC7, 0x9F, 0xD1, 0xCB, 0x3D, 0x8D, 0x14, 0xD0, 0x6C, 0xBC, 0x5A, 0x60, 0xC4, 0x00, 0x57, 0x20, 0x79, 0xE5, 0xBD, 0x73, 0x15, 0xEA, 0xAC, 0x11, 0x80, 0x52, 0xC3, 0x01, 0x6B, 0x84, 0x77, 0xD0, 0xFC, 0xDD, 0xA3, 0xFC, 0xA0, 0xB4, 0xC2, 0xD4, 0x7E, 0xF1, 0x09, 0x91, 0x07, 0x8C, 0x0C, 0x90, 0x50, 0x63, 0x4E, 0x64, 0xB2, 0xF0, 0x3F, 0x94, 0xEC, 0x7B, 0x94, 0x9C, 0x3F, 0xEB, 0xB4, 0x02, 0x90, 0xA7, 0x28, 0x20, 0x7C, 0x4C, 0x55, 0x24, 0x5E, 0xD3, 0x79, 0x05, 0xE0, 0x04, 0x68, 0x4F, 0x13, 0x51, 0x40, 0x0E, 0xC0, 0x0D, 0xA1, 0x46, 0x01, 0xE1, 0xEF, 0x18, 0xD5, 0xF1, 0xE9, 0xF3, 0xBE, 0xF0, 0x5F, 0x93, 0x72, 0xF4, 0x65, 0x17, 0x27, 0x89, 0x71, 0x65, 0x32, 0x05, 0x82, 0x81, 0xA4, 0x46, 0x00, 0xF5, 0xA1, 0xFE, 0x7F, 0xA7, 0x41, 0x0D, 0x6E, 0x28, 0x75, 0xD0, 0x02, 0xCE, 0x2F, 0xAF, 0x71, 0xB1, 0xF7, 0x34, 0xE9, 0xB9, 0x35, 0x21, 0xD8, 0x0A, 0x85, 0xDB, 0x23, 0xB2, 0xCF, 0x0F, 0x62, 0xED, 0xCF, 0xB4, 0x53, 0xB7, 0x35, 0xBD, 0x70, 0x32, 0x57, 0x9A, 0x75, 0xE5, 0xFC, 0xE5, 0xCC, 0x71, 0xD4, 0xB6, 0x84, 0x52, 0xBB, 0x65, 0xF5, 0x9C, 0x35, 0xB7, 0x5E, 0x1A, 0xDE, 0x88, 0xE9, 0xAD, 0x0C, 0xE8, 0x7B, 0x5F, 0x9A, 0xFC, 0xA5, 0xC9, 0x72, 0x8F, 0xBE, 0x7C, 0x99, 0x29, 0x5A, 0x19, 0x6E, 0xF7, 0x86, 0x01, 0x56, 0x80, 0x0A, 0x20, 0x06, 0xA8, 0x03, 0xF9, 0x5E, 0x04, 0x09, 0xE3, 0xEB, 0xB0, 0x6F, 0xA5, 0xB9, 0x2E, 0x37, 0xD2, 0xA4, 0xAE, 0xA9, 0x3A, 0xAA, 0x59, 0x4A, 0xF8, 0xAB, 0x10, 0xE1, 0xB1, 0xDC, 0xFD, 0x51, 0x24, 0x6F, 0xCF, 0x7F, 0xC9, 0x77, 0x5C, 0xB2, 0x19, 0x90, 0x3F, 0x31, 0x6E, 0xBD, 0xCE, 0x14, 0xF3, 0x69, 0x1C, 0xC9, 0x34, 0x1B, 0x95, 0xE4, 0xCC, 0x11, 0xCC, 0xDA, 0x10, 0x05, 0xF4, 0x34, 0x04, 0x88, 0x7B, 0x2E, 0x88, 0xBF, 0x92, 0x30, 0xD1, 0x13, 0xA2, 0x66, 0x6F, 0x58, 0x4E, 0x53, 0x64, 0xC8, 0xFC, 0x63, 0x38, 0x5E, 0x5C, 0x14, 0x90, 0xD2, 0x08, 0xA0, 0xB6, 0x49, 0xBA, 0x76, 0xD0, 0xEA, 0x1F, 0xA3, 0xA4, 0x02, 0x57, 0x48, 0x72, 0xEC, 0x69, 0x82, 0xCA, 0x67, 0x5E, 0xF5, 0xB5, 0xC4, 0xBF, 0xC4, 0xD0, 0x15, 0x54, 0x70, 0x8C, 0xE7, 0x30, 0x24, 0x5D, 0x33, 0x65, 0x4B, 0x9E, 0xAA, 0x7A, 0x26, 0xBA, 0x3D, 0x86, 0xBD, 0xC1, 0x6B, 0x25, 0xB7, 0x99, 0x3C, 0x65, 0x01, 0x68, 0x0D, 0x9A, 0xF5, 0x03, 0x1C, 0xEB, 0x10, 0x6E, 0x20, 0x5A, 0x6F, 0xD7, 0x94, 0xD9, 0xA7, 0x72, 0x47, 0x10, 0x22, 0x25, 0x8A, 0xC0, 0xDC, 0xDF, 0xBA, 0x21, 0x07, 0x30, 0x07, 0x32, 0x3B, 0x4D, 0x66, 0x8D, 0x02, 0xE8, 0xAC, 0x2F, 0x2A, 0x40, 0x0E, 0xDC, 0x73, 0x9A, 0x60, 0xBE, 0xCA, 0x39, 0xF4, 0xB5, 0x17, 0xF3, 0x71, 0x64, 0xD2, 0x8C, 0x51, 0x78, 0x77, 0x6B, 0x5F, 0x25, 0xC7, 0xE9, 0x59, 0x08, 0x5B, 0x7D, 0xD2, 0xE8, 0xC4, 0x53, 0x6D, 0x16, 0xC8, 0xEF, 0x54, 0x44, 0xBF, 0x4C, 0x86, 0x38, 0x3B, 0xB0, 0xEB, 0x90, 0xCB, 0xDA, 0xB0, 0x65, 0xEC, 0xB3, 0x34, 0x3B, 0x1C, 0x00, 0xFD, 0x72, 0xAE, 0xD2, 0xF3, 0xD7, 0x9D, 0xE1, 0xCF, 0xD1, 0x69, 0x5B, 0x90, 0xC5, 0x4B, 0x0B, 0x37, 0x28, 0x01, 0xA9, 0x35, 0x92, 0x32, 0x80, 0x24, 0x20, 0xAA, 0xE1, 0xEB, 0xBF, 0xD9, 0x33, 0x34, 0x40, 0xD4, 0xDE, 0x80, 0x15, 0x4C, 0x17, 0x4F, 0x45, 0x47, 0xDE, 0xA1, 0xEF, 0x90, 0x6B, 0xA7, 0x30, 0x70, 0xCF, 0x13, 0x93, 0x9C, 0xD2, 0x70, 0x4A, 0xB4, 0xD9, 0xF4, 0xE9, 0xBE, 0x1A, 0xA4, 0x8E, 0xCF, 0xE4, 0x40, 0x25, 0x10, 0x34, 0xCB, 0x6F, 0xEF, 0xDC, 0xBE, 0x72, 0x12, 0xC4, 0xAB, 0x7F, 0x64, 0x35, 0x3F, 0x08, 0xCF, 0xB8, 0x0A, 0x37, 0x02, 0x78, 0x5A, 0xC7, 0xDB, 0x46, 0x34, 0xB2, 0x98, 0x74, 0x5E, 0xCE, 0xCE, 0x08, 0xB8, 0xF3, 0x0A, 0x68, 0x29, 0x5B, 0x54, 0x01, 0xA3, 0xC6, 0x52, 0x9D, 0x87, 0x00, 0x79, 0x96, 0x73, 0x31, 0x77, 0xD0, 0x18, 0x5D, 0x0E, 0xC9, 0xDF, 0x52, 0x2B, 0xA3, 0xE1, 0x07, 0x43, 0x46, 0x68, 0x74, 0xC4, 0x0B, 0x21, 0x23, 0xBB, 0x01, 0xC7, 0x6F, 0x57, 0xD9, 0x3E, 0xA8, 0x8D, 0xE9, 0x93, 0xF1, 0x8A, 0x4D, 0xBA, 0x4D, 0xAA, 0x64, 0x9E, 0xD7, 0xE2, 0x00, 0x67, 0x8D, 0xA9, 0x3B, 0x32, 0x3B, 0xD9, 0x39, 0x97, 0x2F, 0xA7, 0x2D, 0x1D, 0xAD, 0x3F, 0x19, 0xDA, 0xBB, 0x60, 0xBE, 0xF6, 0xA5, 0x7C, 0x95, 0x7E, 0x7B, 0xBE, 0x76, 0x0D, 0x17, 0x20, 0xEF, 0xB8, 0x15, 0x01, 0x98, 0x00, 0xB9, 0x08, 0x40, 0xB5, 0x11, 0x80, 0xC9, 0x3A, 0xB2, 0xDC, 0xE7, 0x53, 0x7A, 0x96, 0x52, 0x7E, 0xB7, 0x4E, 0x31, 0xEA, 0xE2, 0x82, 0x7D, 0xAF, 0x4F, 0x0F, 0xC2, 0xAE, 0x60, 0x8A, 0x7F, 0x00, 0xA9, 0xFE, 0x71, 0x32, 0x4B, 0x2B, 0x32, 0x4A, 0x2B, 0x7D, 0x9A, 0x7A, 0x83, 0x4A, 0xF7, 0x70, 0x89, 0x67, 0x62, 0x22, 0xEF, 0xDF, 0xF3, 0xF9, 0x58, 0x31, 0x60, 0xB4, 0xAC, 0x62, 0x78, 0x75, 0x59, 0x38, 0x40, 0x05, 0xF0, 0x6A, 0xA9, 0xBB, 0x07, 0xD9, 0xD4, 0xDE, 0xDF, 0xE5, 0x4F, 0xFB, 0x8E, 0x97, 0x0D, 0x8E, 0x09, 0xF5, 0x01, 0xF5, 0x04, 0xFE, 0x12, 0x34, 0x80, 0x1D, 0x20, 0x02, 0xA8, 0xD3, 0xF8, 0x3E, 0x21, 0xA0, 0x80, 0x03, 0x44, 0x00, 0x33, 0xA0, 0xDA, 0x41, 0xD3, 0xB7, 0xB6, 0x54, 0xBE, 0x9D, 0xEB, 0x1F, 0xFF, 0x07, 0x0A, 0xFF, 0xBE, 0xA8, 0xC2, 0xFB, 0xA7, 0xBC, 0x65, 0x11, 0x82, 0x8E, 0x41, 0xEB, 0xD1, 0x51, 0xBF, 0x7D, 0x60, 0xE8, 0x8D, 0x94, 0xEB, 0x14, 0x6E, 0x36, 0x14, 0x20, 0xBA, 0xC9, 0xF0, 0xA1, 0x62, 0x12, 0x01, 0x98, 0x01, 0x5D, 0xEA, 0x27, 0x17, 0x40, 0x18, 0xE0, 0x6D, 0x82, 0x63, 0xC3, 0xFD, 0x86, 0x10, 0xC2, 0xD7, 0xE7, 0xE2, 0xFD, 0x26, 0xC0, 0xA9, 0x1A, 0xE7, 0x2E, 0x45, 0xD0, 0xA4, 0x00, 0x4F, 0xA0, 0x18, 0x61, 0x22, 0x01, 0x98, 0x01, 0x11, 0x40, 0x15, 0xB0, 0x86, 0x27, 0x90, 0x07, 0x28, 0xE9, 0xA0, 0xD9, 0x0D, 0xDA, 0x76, 0x0B, 0xC6, 0x95, 0xC0, 0x0A, 0xEF, 0xB4, 0x40, 0x57, 0x99, 0xE8, 0x07, 0x17, 0xBB, 0xD3, 0x90, 0xB6, 0xD1, 0xC4, 0xDD, 0xD7, 0xDF, 0x40, 0xE7, 0x79, 0x25, 0x30, 0xFE, 0x4B, 0x2D, 0xD8, 0xBB, 0x3A, 0xDB, 0x4D, 0x4A, 0x2E, 0xF7, 0x12, 0x5B, 0xC3, 0x01, 0xDC, 0x01, 0x4E, 0x80, 0x1A, 0xEC, 0x80, 0x30, 0xE0, 0xFC, 0xD7, 0x91, 0xE7, 0xAF, 0x80, 0x4E, 0x81, 0x48, 0xBE, 0x0B, 0x94, 0xD7, 0xAC, 0x58, 0xF8, 0x01, 0xEE, 0xD2, 0x3C, 0x04, 0x90, 0x02, 0x4C, 0x80, 0xEC, 0x44, 0xF9, 0x69, 0x24, 0x10, 0xDE, 0x41, 0xF3, 0x1D, 0xB4, 0xAF, 0x00, 0xAA, 0x01, 0x5F, 0xEA, 0x9E, 0x86, 0xE4, 0x15, 0x04, 0x6B, 0x46, 0x08, 0x49, 0xC3, 0x72, 0x0D, 0xF6, 0xF1, 0xD5, 0xC8, 0x9E, 0x35, 0xEB, 0xB6, 0xB2, 0x54, 0xBF, 0xFC, 0x7A, 0x14, 0xA7, 0x59, 0x14, 0xF9, 0x8F, 0x9C, 0x1B, 0x2F, 0x63, 0xE9, 0x9D, 0x1B, 0x92, 0x02, 0xD4, 0x81, 0x9B, 0x08, 0x16, 0x5F, 0xD3, 0x90, 0xD8, 0xDF, 0x16, 0x8E, 0x50, 0x18, 0x50, 0x67, 0xEE, 0x18, 0xA6, 0xAB, 0x42, 0xA7, 0x40, 0xE9, 0x3A, 0x65, 0x18, 0xC0, 0x0D, 0x11, 0x40, 0xA3, 0x83, 0x16, 0xFF, 0x04, 0x62, 0xD1, 0x17, 0x34, 0xFB, 0x8A, 0x93, 0x7D, 0x25, 0x38, 0xD2, 0x1A, 0xAF, 0xC4, 0x66, 0x1B, 0xDC, 0x62, 0x48, 0x99, 0x93, 0x78, 0xCF, 0x1E, 0x4D, 0x10, 0x71, 0xB3, 0x75, 0x33, 0x5C, 0xDE, 0x38, 0x3C, 0xA7, 0xDD, 0x79, 0x4E, 0x9D, 0x5E, 0x3A, 0xE0, 0x05, 0x98, 0x4C, 0x31, 0xB7, 0x06, 0x20, 0xD4, 0x58, 0x03, 0x07, 0xDE, 0x4A, 0x0D, 0x44, 0xED, 0x3D, 0xC2, 0xFD, 0xD0, 0x2E, 0x07, 0xF5, 0xEF, 0x94, 0x02, 0x68, 0x02, 0x37, 0xA2, 0x24, 0x80, 0x70, 0xC3, 0x26, 0x38, 0x1A, 0x02, 0x88, 0x02, 0x41, 0x1D, 0xB5, 0x7C, 0x4B, 0x2D, 0xED, 0x75, 0x70, 0xB9, 0x14, 0xBC, 0x5B, 0x25, 0x7B, 0x9A, 0x23, 0x1E, 0x53, 0x63, 0x45, 0x0C, 0x69, 0xCE, 0xFA, 0xCC, 0xF7, 0x26, 0x88, 0xA7, 0xD3, 0x7B, 0x97, 0x90, 0xF7, 0x06, 0x42, 0x37, 0xDC, 0x98, 0x04, 0xA2, 0x36, 0x6F, 0x01, 0x37, 0x99, 0xA5, 0x35, 0xFD, 0xE9, 0x74, 0x49, 0xF9, 0x38, 0x00, 0xA2, 0x25, 0xB3, 0xE2, 0xBF, 0x05, 0x6B, 0x8D, 0xEA, 0xD0, 0x3F, 0xB3, 0xD7, 0xE8, 0xA7, 0x0E, 0xF6, 0x9C, 0xD8, 0xCD, 0x7A, 0x57, 0x3A, 0x0C, 0x48, 0xC3, 0x08, 0xF0, 0x46, 0x9C, 0x46, 0x02, 0xD9, 0xA8, 0xEA, 0xF7, 0x42, 0x83, 0xEE, 0x52, 0xAB, 0x7E, 0xFF, 0x10, 0x5C, 0x12, 0x98, 0x90, 0xD4, 0x71, 0x68, 0x60, 0x54, 0xA2, 0x67, 0x5F, 0x32, 0xC6, 0x4D, 0xAA, 0xB5, 0xA2, 0xAE, 0xBA, 0x33, 0x6A, 0x1B, 0x6A, 0xF2, 0x72, 0x04, 0xA3, 0x33, 0x0F, 0x40, 0x34, 0x67, 0x48, 0xF5, 0xDC, 0x9D, 0x57, 0xF9, 0xC8, 0x02, 0x6E, 0xBE, 0xC2, 0x0D, 0xE0, 0x0E, 0x85, 0x07, 0x40, 0x3B, 0xC1, 0xE1, 0x00, 0x0D, 0xA5, 0x76, 0x5C, 0x01, 0xFD, 0x79, 0x2F, 0x04, 0xA1, 0xBF, 0x39, 0x63, 0xF8, 0x43, 0x11, 0xC2, 0x04, 0x8C, 0x80, 0xEC, 0x0B, 0xFC, 0x31, 0x80, 0xA9, 0xE1, 0x80, 0x48, 0x43, 0x01, 0xA5, 0x46, 0x01, 0xA1, 0x08, 0xDA, 0xDF, 0x7D, 0x33, 0x19, 0xAF, 0x4F, 0x91, 0xFF, 0x00, 0xA5, 0xCF, 0xD2, 0x44, 0x40, 0x45, 0xBF, 0xBD, 0x2D, 0xF5, 0xA0, 0x93, 0x1D, 0x96, 0x43, 0x32, 0x06, 0xA4, 0x0E, 0x85, 0xF7, 0x13, 0x95, 0xF0, 0xF2, 0x46, 0xF6, 0x17, 0x1F, 0xBC, 0x25, 0xD6, 0x14, 0x15, 0xE1, 0x79, 0xD6, 0xF5, 0x00, 0x8C, 0x81, 0xC3, 0xAB, 0x9B, 0x44, 0x00, 0x5D, 0x8E, 0x4E, 0xCF, 0x68, 0xB9, 0xC6, 0x0C, 0x0D, 0x7B, 0x75, 0xDF, 0x74, 0x2C, 0x15, 0x80, 0x7A, 0xFD, 0x7C, 0xC7, 0x5A, 0xC0, 0x1D, 0x28, 0x3A, 0xDF, 0x71, 0xE1, 0x38, 0x40, 0x09, 0xC8, 0x01, 0x54, 0x00, 0x0B, 0xC0, 0x13, 0xC8, 0x1B, 0x34, 0x42, 0x29, 0x99, 0x65, 0xCC, 0xAA, 0xB1, 0x20, 0xCC, 0x90, 0x3A, 0x85, 0xA6, 0x7A, 0x72, 0x1C, 0x5C, 0x2B, 0x3F, 0xC4, 0x41, 0xD0, 0xDE, 0xE9, 0xB6, 0xB6, 0x1A, 0x72, 0x0B, 0x81, 0x9C, 0x00, 0x39, 0x1D, 0x92, 0x04, 0xDE, 0x41, 0xB8, 0x7E, 0x8C, 0x61, 0xE7, 0xD5, 0x9A, 0xE2, 0x07, 0x60, 0x05, 0xC8, 0x00, 0x5E, 0x5F, 0xD4, 0x98, 0x96, 0xB1, 0xC9, 0x7F, 0x7E, 0x1E, 0xF9, 0x6C, 0xFC, 0x34, 0x80, 0xF4, 0xF7, 0x10, 0x00, 0xD2, 0x30, 0x02, 0x5C, 0x97, 0x3A, 0x4C, 0x17, 0xC6, 0x90, 0x59, 0xAC, 0x0E, 0x44, 0x8D, 0xBF, 0x2A, 0x7B, 0x1C, 0x19, 0xD9, 0xA1, 0x53, 0x10, 0x2D, 0x47, 0xB5, 0x76, 0xCA, 0x08, 0x79, 0xD9, 0x0A, 0x14, 0x73, 0x33, 0x47, 0xC6, 0x5B, 0x6A, 0x1B, 0xC6, 0xD3, 0x72, 0xDE, 0xF2, 0xD5, 0x7B, 0x4F, 0x3F, 0xE7, 0x7C, 0x9C, 0x65, 0x81, 0x76, 0x3F, 0x05, 0xE0, 0xF2, 0xEB, 0xD4, 0xC1, 0x0D, 0x9F, 0x51, 0xD3, 0xA7, 0x16, 0xEC, 0xC7, 0x9C, 0xFA, 0xCC, 0xD3, 0x88, 0xBC, 0xB9, 0x02, 0x40, 0x1A, 0xB6, 0xA4, 0xF0, 0x25, 0x0D, 0x6F, 0x64, 0xC3, 0x1A, 0xCF, 0x0A, 0xD1, 0x00, 0xCE, 0x8E, 0x9A, 0xFC, 0x3E, 0xAA, 0x99, 0x43, 0x48, 0xF4, 0x9D, 0x08, 0xDD, 0xB1, 0x5B, 0x73, 0xA2, 0x16, 0xAD, 0x67, 0x8D, 0xDE, 0x5A, 0xCA, 0xBE, 0xBB, 0x65, 0x3D, 0x37, 0x41, 0xFF, 0x3B, 0x84, 0x26, 0xBE, 0xF5, 0xBD, 0x03, 0xEC, 0x0D, 0x10, 0x0C, 0x9F, 0x17, 0x4E, 0x5A, 0xA5, 0xD3, 0xB3, 0xA6, 0x2E, 0x8A, 0x01, 0xDA, 0xB0, 0x46, 0x8D, 0xE1, 0x1F, 0xF7, 0xCA, 0x46, 0xFC, 0x24, 0x40, 0xF9, 0x21, 0x9E, 0x14, 0xC3, 0x6E, 0x7A, 0xD1, 0x00, 0x3D, 0x80, 0x0B, 0x10, 0x01, 0xD4, 0x7A, 0x5B, 0x50, 0x83, 0x15, 0x10, 0x07, 0x8C, 0x3A, 0x68, 0xBA, 0xA3, 0x35, 0xAB, 0xED, 0xDA, 0x85, 0x4C, 0x6D, 0xF3, 0x82, 0x30, 0x54, 0x42, 0xC3, 0x67, 0x99, 0x3D, 0xB6, 0x91, 0xDA, 0xB2, 0x56, 0xCD, 0x6C, 0xEC, 0xD6, 0xBC, 0x02, 0xC2, 0xFF, 0x0E, 0x1D, 0xFA, 0x02, 0xEA, 0xF7, 0x62, 0x74, 0x1C, 0x78, 0xC9, 0xDF, 0xC4, 0x8A, 0x79, 0xB5, 0x92, 0x79, 0x74, 0x39, 0x35, 0xF3, 0x98, 0xC4, 0xD3, 0xA7, 0xD5, 0xAB, 0x21, 0x0D, 0x9A, 0x9F, 0xA2, 0x51, 0xAB, 0x5B, 0xF5, 0xF7, 0x04, 0x12, 0x5B, 0xCE, 0x6B, 0x7A, 0x3A, 0x68, 0xF6, 0x35, 0x7C, 0x7A, 0xD2, 0x0E, 0x1A, 0x9A, 0xF1, 0x38, 0x50, 0x66, 0x37, 0xE8, 0x6F, 0x43, 0x04, 0xAB, 0xC0, 0x97, 0xA0, 0xC3, 0x77, 0x7A, 0xE8, 0x34, 0x5C, 0x80, 0xA8, 0xDD, 0x34, 0xDB, 0x38, 0x8D, 0x31, 0xAD, 0x4D, 0x9F, 0xDE, 0xF8, 0xCD, 0x70, 0xB4, 0x9B, 0xDB, 0xE7, 0x71, 0x68, 0x69, 0xD7, 0xA0, 0xD7, 0x9D, 0x19, 0x4B, 0x1D, 0x49, 0x34, 0x6D, 0x57, 0x2D, 0xB7, 0x23, 0x59, 0xC3, 0xE6, 0x27, 0x23, 0x20, 0x96, 0x83, 0x48, 0x3A, 0x10, 0x09, 0xF8, 0xB2, 0x40, 0x77, 0x9D, 0xDE, 0xE7, 0xA2, 0xFE, 0x0D, 0x74, 0xE0, 0xDA, 0x51, 0x6B, 0x77, 0x48, 0xB4, 0x18, 0x27, 0xE1, 0x80, 0x6B, 0x2E, 0x86, 0xF2, 0xA6, 0x6A, 0x1F, 0x70, 0xB7, 0x27, 0xD8, 0x72, 0xD5, 0xF5, 0x46, 0x08, 0xE0, 0xBE, 0x12, 0xDA, 0x17, 0x02, 0xF8, 0x18, 0xC7, 0x83, 0xC6, 0xC2, 0xA1, 0xB7, 0xF0, 0xC6, 0x79, 0xA5, 0xDB, 0x69, 0x75, 0x72, 0xCE, 0x3C, 0x1E, 0x07, 0x01, 0xBA, 0x7A, 0xF9, 0x28, 0x1B, 0xBA, 0x60, 0xCB, 0x1D, 0x72, 0x8F, 0x70, 0x88, 0x86, 0x00, 0xD2, 0xE0, 0x00, 0xC4, 0x01, 0xE7, 0x1B, 0xB4, 0xF8, 0x96, 0x1A, 0x1D, 0x7B, 0x41, 0x8B, 0xEF, 0xF5, 0xAB, 0x30, 0x1D, 0x2A, 0xC2, 0x24, 0x19, 0x62, 0x08, 0xA8, 0x89, 0xD0, 0x89, 0x63, 0xB7, 0xCC, 0xBE, 0x5B, 0xA4, 0xCE, 0x99, 0x95, 0x82, 0xDB, 0x39, 0xE0, 0x04, 0x44, 0x35, 0xA2, 0x61, 0x8D, 0x9C, 0x53, 0xC1, 0x89, 0x5E, 0x42, 0xA9, 0x17, 0xD7, 0x07, 0x7A, 0xC3, 0xB6, 0x0D, 0x4B, 0xED, 0xDC, 0x83, 0xF1, 0xB2, 0x5C, 0x36, 0x9F, 0xF5, 0xD5, 0x60, 0x40, 0x57, 0x7F, 0x10, 0x67, 0x23, 0x00, 0x39, 0x80, 0xCA, 0x2F, 0xF3, 0xF3, 0x6A, 0xEC, 0x05, 0x1B, 0xCB, 0x66, 0xFF, 0x45, 0x2D, 0x3F, 0xC7, 0x78, 0x39, 0xFE, 0xA2, 0x56, 0x5F, 0x81, 0x02, 0x76, 0x3A, 0xDE, 0xB9, 0xC7, 0x4E, 0x48, 0x1A, 0x1B, 0x23, 0x8D, 0xE5, 0xDF, 0x52, 0x8B, 0x1B, 0x35, 0x8F, 0xDD, 0xF7, 0xF9, 0x12, 0x92, 0x00, 0x2F, 0x50, 0xAD, 0x76, 0x4C, 0x01, 0x6E, 0xEC, 0x74, 0xE8, 0xD6, 0x49, 0xDE, 0x2D, 0x5A, 0xE5, 0xC9, 0xD4, 0x9E, 0xC9, 0x6D, 0xBE, 0xF1, 0x94, 0x4E, 0xD3, 0x3F, 0xDE, 0x78, 0x4D, 0x93, 0x6A, 0x78, 0xC3, 0xB2, 0x11, 0x8D, 0x02, 0x82, 0x6F, 0xB0, 0x01, 0xCA, 0xC6, 0x52, 0x07, 0xA4, 0x01, 0xE1, 0xB3, 0x60, 0xC4, 0x79, 0x83, 0x56, 0x48, 0x3A, 0x86, 0xBF, 0xA0, 0xC5, 0x17, 0x12, 0xC3, 0x3D, 0xB4, 0x12, 0x7F, 0xBF, 0xEC, 0x76, 0x9F, 0xC2, 0xAF, 0xA7, 0x08, 0x6F, 0x9C, 0xAD, 0x8C, 0x27, 0x5F, 0x3D, 0x52, 0x1F, 0x0C, 0x18, 0x83, 0x28, 0xEC, 0x47, 0x41, 0xCE, 0xE3, 0x2F, 0x29, 0xF2, 0xDC, 0x46, 0xD0, 0x5D, 0x80, 0x83, 0xEA, 0xB8, 0x1D, 0xF2, 0xF3, 0x82, 0xD1, 0x68, 0xFB, 0xB0, 0x5E, 0x77, 0xCB, 0xE4, 0x9D, 0x73, 0xBA, 0x9E, 0x27, 0x03, 0x61, 0x0B, 0x01, 0xD4, 0x32, 0x95, 0x57, 0x06, 0x24, 0x01, 0x6E, 0x10, 0x01, 0xE7, 0xCC, 0x4F, 0x1A, 0x1D, 0x34, 0x3B, 0xFF, 0xEA, 0x2B, 0x93, 0x16, 0x66, 0x13, 0xD8, 0xDF, 0xFB, 0x13, 0xF9, 0x04, 0x64, 0x23, 0x94, 0x71, 0x66, 0x0D, 0xC6, 0xAB, 0xB1, 0x6F, 0x05, 0xB9, 0x73, 0xDE, 0x54, 0x73, 0x0B, 0xE8, 0xDC, 0xF5, 0x48, 0x84, 0x0F, 0x39, 0x42, 0xD2, 0x1A, 0x5C, 0x31, 0x2C, 0x2E, 0x21, 0x52, 0x19, 0x2D, 0x4F, 0xCC, 0xF8, 0xC4, 0x37, 0x81, 0x2E, 0x73, 0x74, 0x0D, 0x9D, 0x39, 0x25, 0xA9, 0x6C, 0x59, 0x0E, 0x04, 0xE0, 0xDE, 0xA0, 0xC6, 0x59, 0xDB, 0x6D, 0xAC, 0x27, 0x42, 0x00, 0x8A, 0x69, 0xDA, 0x99, 0x4B, 0x79, 0x92, 0xF1, 0xEA, 0x1A, 0x1D, 0x34, 0xFA, 0xA7, 0x5F, 0x35, 0x40, 0xFF, 0x51, 0x1F, 0x4B, 0xE2, 0x7B, 0xDB, 0x43, 0x06, 0x13, 0x85, 0x7D, 0x99, 0x8C, 0xBE, 0xC3, 0x75, 0xF6, 0x08, 0xAE, 0xC3, 0xAB, 0x71, 0xC5, 0x76, 0xDF, 0x27, 0xDD, 0xB2, 0xE7, 0x9A, 0x05, 0x43, 0x00, 0x31, 0x70, 0x02, 0x20, 0x9A, 0xEA, 0x0B, 0xD5, 0x3F, 0x6B, 0x20, 0xA2, 0xE7, 0x0C, 0xA3, 0x07, 0x38, 0xF4, 0xF2, 0xD3, 0xF8, 0x2B, 0xCE, 0xDE, 0x33, 0x17, 0x40, 0xB2, 0xA1, 0x00, 0x57, 0xC3, 0x1A, 0xDE, 0x48, 0x40, 0x0C, 0x30, 0x02, 0xC2, 0x80, 0x5C, 0xFA, 0xE8, 0x54, 0x20, 0xAC, 0x41, 0x40, 0x9E, 0x57, 0x35, 0xED, 0xA0, 0x41, 0x2D, 0x94, 0xC7, 0xBE, 0x34, 0x11, 0x8B, 0x8D, 0xD7, 0x67, 0x25, 0x61, 0x0F, 0x74, 0x81, 0x11, 0xA3, 0x1A, 0x4E, 0x43, 0x26, 0xBF, 0xBA, 0x7D, 0x4E, 0xB3, 0x7C, 0xBE, 0x90, 0x7C, 0x7D, 0x52, 0x5A, 0xB3, 0x48, 0x63, 0xAD, 0xCD, 0x1B, 0x6D, 0x9F, 0x9D, 0x61, 0xE2, 0xC0, 0x15, 0x22, 0xA8, 0xCD, 0xD7, 0x0A, 0xC9, 0x32, 0xF5, 0x95, 0x46, 0x2E, 0x58, 0x63, 0xE5, 0xA3, 0x82, 0x80, 0xBC, 0x9B, 0x5A, 0x83, 0xB4, 0x21, 0xC0, 0x89, 0x55, 0xEA, 0xA1, 0x39, 0x67, 0x8D, 0xDF, 0xF3, 0x29, 0xFF, 0xA2, 0x9D, 0xBB, 0xF5, 0xA0, 0x67, 0x60, 0x18, 0x05, 0x73, 0x42, 0x23, 0x47, 0x8A, 0x7A, 0x7B, 0x25, 0x7E, 0x4B, 0xE6, 0xE9, 0x36, 0xC1, 0xCD, 0xAC, 0x75, 0x25, 0x72, 0x5D, 0x4F, 0x4A, 0xC3, 0x0E, 0x20, 0xDE, 0x60, 0xE0, 0x75, 0xCD, 0xCA, 0x4D, 0xBC, 0xCD, 0x6E, 0x13, 0x31, 0x7C, 0x8A, 0x00, 0xAE, 0xF5, 0x24, 0xE5, 0x3C, 0xE0, 0xD6, 0x99, 0x2D, 0xCA, 0xA7, 0x41, 0xD1, 0x48, 0x80, 0xA5, 0x61, 0x8D, 0x5A, 0x1A, 0xBF, 0x02, 0xD2, 0x1A, 0x0C, 0x84, 0x00, 0x96, 0x0D, 0x02, 0xBC, 0xF1, 0xDE, 0x9F, 0xA6, 0xF0, 0xA4, 0x96, 0xFC, 0xEE, 0xA1, 0x16, 0x3E, 0x1C, 0x70, 0x7B, 0x7C, 0xB1, 0x9A, 0xB5, 0x6C, 0x48, 0x0C, 0x0B, 0xC6, 0x6A, 0xCC, 0x79, 0x33, 0xDB, 0x46, 0xDE, 0x0E, 0x04, 0xFD, 0x98, 0xED, 0xE3, 0x02, 0xD8, 0xC5, 0x3A, 0xE6, 0x9A, 0xCC, 0x21, 0xFE, 0x6A, 0x40, 0x29, 0x20, 0x6F, 0xCA, 0xCD, 0x4C, 0x8E, 0x70, 0xCD, 0xE5, 0xA4, 0xBC, 0x8E, 0xB2, 0xBB, 0xB2, 0xCA, 0x0B, 0x06, 0x88, 0x03, 0x16, 0xCB, 0x36, 0xAD, 0x1A, 0x07, 0xD0, 0x6C, 0xD0, 0xFC, 0x14, 0x79, 0x83, 0x66, 0x18, 0x1E, 0x12, 0x68, 0x30, 0x23, 0x53, 0x2C, 0x3C, 0xAB, 0x6F, 0xA9, 0x79, 0x31, 0x2C, 0x03, 0x95, 0x7A, 0xC8, 0x92, 0x61, 0xC3, 0x62, 0xEA, 0x0A, 0xDE, 0x7E, 0x15, 0x8C, 0xED, 0x57, 0xDF, 0x2F, 0x48, 0xB6, 0x77, 0xB5, 0x9B, 0x1D, 0x03, 0x12, 0xE8, 0x4F, 0xF6, 0x84, 0xC4, 0xA6, 0xD3, 0xB8, 0x2C, 0x0E, 0x70, 0x6E, 0x7B, 0x2F, 0xCD, 0x79, 0xD0, 0x80, 0x0D, 0x9B, 0xBF, 0xE9, 0x71, 0x68, 0xBF, 0xB0, 0x86, 0x40, 0xC6, 0x1A, 0x7A, 0xCB, 0x02, 0x50, 0xCE, 0x3F, 0xBA, 0xF6, 0x70, 0xA6, 0xEA, 0xEF, 0xB4, 0x1B, 0x34, 0xFF, 0xEA, 0x9E, 0xDE, 0x19, 0x8F, 0x93, 0x34, 0x2C, 0x74, 0xB8, 0x14, 0x35, 0x82, 0xAC, 0x1E, 0xFE, 0x6F, 0x48, 0xC5, 0xC8, 0x5A, 0x69, 0xD4, 0xAC, 0x3C, 0xD3, 0x12, 0xC7, 0x13, 0xC8, 0x68, 0x30, 0xE0, 0xF1, 0xE3, 0x4D, 0x76, 0x83, 0x77, 0x5E, 0x87, 0xEB, 0xAD, 0xFA, 0x02, 0xE5, 0xF3, 0x3D, 0x7A, 0xCF, 0x2E, 0xAF, 0xE9, 0x9B, 0x67, 0xEC, 0x7D, 0x9D, 0xA7, 0x4D, 0x01, 0xF5, 0x86, 0xAD, 0x4F, 0xCB, 0x8F, 0xE0, 0x75, 0x74, 0x37, 0x4E, 0xFD, 0x50, 0xA7, 0xC7, 0xD2, 0xA6, 0xD2, 0x5B, 0x6A, 0x81, 0x7E, 0x45, 0x69, 0x89, 0xBB, 0xE5, 0x3F, 0x4F, 0x38, 0x05, 0xFB, 0xA7, 0x96, 0x2B, 0xC8, 0xF1, 0x82, 0x71, 0x2A, 0x0A, 0xC5, 0x7E, 0x59, 0x6B, 0x9E, 0xBD, 0xEE, 0xB4, 0x9A, 0xC4, 0x0D, 0xC2, 0xFA, 0x89, 0xB1, 0x35, 0xC0, 0x13, 0x88, 0x8C, 0x3D, 0x45, 0x8C, 0xD3, 0xB3, 0x2B, 0x7D, 0xB5, 0xCE, 0x67, 0x61, 0x90, 0xAF, 0x2F, 0xBD, 0x62, 0x56, 0xF1, 0xC5, 0xE7, 0x8E, 0x97, 0x0E, 0x84, 0x00, 0xBE, 0xA1, 0x8D, 0x04, 0x72, 0x99, 0x65, 0xEE, 0xA9, 0x66, 0x27, 0xD6, 0x9C, 0x1B, 0x9B, 0x2D, 0x05, 0x72, 0x6E, 0xD4, 0x12, 0x52, 0x84, 0x92, 0x7D, 0x01, 0x45, 0xF0, 0x2C, 0xF0, 0xB2, 0xC9, 0xB6, 0x59, 0x66, 0x81, 0xB1, 0x92, 0x38, 0x2E, 0x9E, 0x3B, 0xD7, 0xB1, 0xE7, 0xD7, 0x5A, 0xC3, 0xB3, 0xC1, 0x80, 0xDA, 0x7A, 0x15, 0x08, 0x60, 0x63, 0x3F, 0xC2, 0xED, 0x72, 0x36, 0xBC, 0x66, 0x87, 0xA9, 0xA6, 0xD3, 0xF0, 0xB1, 0x55, 0xAD, 0x59, 0xD7, 0xD1, 0x14, 0xC0, 0xF7, 0x3D, 0xC0, 0x17, 0x0A, 0xF0, 0x46, 0x3A, 0x50, 0xD1, 0xD8, 0x77, 0x78, 0x06, 0x22, 0x81, 0x31, 0xEC, 0x0B, 0x41, 0xAB, 0x4F, 0xF5, 0x52, 0xA5, 0xA8, 0x1F, 0x48, 0xFC, 0xAB, 0x42, 0xA2, 0xDB, 0xBF, 0x1B, 0x1C, 0xE1, 0xED, 0x62, 0x89, 0x87, 0xDD, 0xBB, 0xB1, 0x84, 0x7D, 0xEC, 0x6A, 0x6A, 0xCD, 0xAA, 0x65, 0x1A, 0x6F, 0xB6, 0x1F, 0xC9, 0x5F, 0x51, 0x1B, 0xE6, 0x42, 0xF2, 0x32, 0x18, 0xE6, 0x53, 0xBF, 0xEF, 0x0D, 0xFE, 0x10, 0x4F, 0x9B, 0xED, 0x6F, 0x6D, 0x02, 0x9C, 0x00, 0x9D, 0x86, 0xAC, 0x53, 0x61, 0x4D, 0x90, 0x34, 0x1C, 0xE0, 0x02, 0x8C, 0x01, 0xF7, 0x1F, 0x06, 0x30, 0x1A, 0x8D, 0xD3, 0x48, 0xE0, 0xBD, 0x0B, 0xFC, 0xEE, 0x60, 0x31, 0x93, 0x90, 0x06, 0x93, 0xAB, 0xCC, 0xF6, 0x58, 0xE8, 0xD3, 0x2F, 0x25, 0x6E, 0x56, 0x95, 0x31, 0x2A, 0x2C, 0xC1, 0x5B, 0x0A, 0x33, 0x46, 0x89, 0xC7, 0x4B, 0x96, 0xE5, 0x5A, 0x32, 0x65, 0xB3, 0xE9, 0x9C, 0xCF, 0x5F, 0x59, 0x81, 0xE8, 0x5D, 0x39, 0xE3, 0xF6, 0x21, 0x7A, 0x7F, 0x1A, 0x56, 0x06, 0x48, 0xE0, 0x41, 0x2D, 0x3A, 0xCF, 0x9F, 0xAC, 0xF3, 0x27, 0x44, 0x02, 0x6E, 0x0D, 0x6A, 0x68, 0x23, 0x80, 0x94, 0x7B, 0x85, 0x03, 0x58, 0x1A, 0x0C, 0x90, 0xAD, 0x41, 0x91, 0x36, 0xBF, 0x53, 0xEA, 0x06, 0x8D, 0xE0, 0xAB, 0x89, 0x9C, 0x76, 0x78, 0x40, 0xA7, 0x70, 0x42, 0xBF, 0x0A, 0x68, 0x64, 0x41, 0x8E, 0x2A, 0x81, 0x7B, 0x60, 0x24, 0xAC, 0x24, 0x88, 0xA6, 0xFC, 0x56, 0x57, 0xD0, 0xF0, 0xD5, 0x04, 0xDA, 0xBE, 0x66, 0x69, 0x5D, 0x1B, 0x87, 0xA6, 0x8F, 0x23, 0x75, 0x98, 0x68, 0xCC, 0xA4, 0x89, 0xD6, 0x63, 0xE0, 0x60, 0x8F, 0x4F, 0xD9, 0x15, 0x5B, 0x6B, 0xC9, 0x59, 0x4E, 0x7D, 0xF1, 0xE1, 0x29, 0xF9, 0x31, 0x02, 0x24, 0x96, 0xA8, 0xF6, 0x34, 0xA8, 0x91, 0x80, 0x05, 0x90, 0x0C, 0x54, 0x35, 0xB2, 0xC1, 0x40, 0x12, 0x10, 0x39, 0x25, 0xCF, 0x4C, 0x1D, 0x34, 0x46, 0x56, 0xE3, 0x4F, 0xA7, 0xE0, 0x81, 0x04, 0x91, 0x7D, 0xD7, 0xC2, 0xFC, 0xB6, 0x60, 0x4E, 0x46, 0x04, 0xA0, 0x59, 0xAE, 0x88, 0x6E, 0x25, 0xF8, 0xA9, 0x8E, 0xBF, 0xAF, 0x19, 0x91, 0xE9, 0xB7, 0x1D, 0x0E, 0x24, 0x37, 0x1C, 0xA8, 0x9C, 0xE3, 0x9E, 0xC3, 0xCF, 0xDF, 0x64, 0x24, 0x5B, 0x9A, 0x3A, 0x7B, 0x8D, 0xAF, 0xD4, 0x81, 0xD1, 0x5B, 0xF0, 0xA8, 0x56, 0xF4, 0xCD, 0x63, 0x0A, 0x9D, 0x65, 0xE4, 0x4A, 0x80, 0xC7, 0x44, 0xE8, 0x34, 0xD6, 0x61, 0x02, 0xA4, 0x1A, 0x09, 0x70, 0x83, 0x1C, 0x38, 0x05, 0xF0, 0x01, 0xEC, 0x3D, 0x9E, 0xF2, 0x1D, 0x65, 0xC9, 0x31, 0x90, 0x20, 0x52, 0x46, 0x47, 0x9E, 0x3A, 0xE1, 0x84, 0xE7, 0x89, 0xAD, 0x54, 0x18, 0x9D, 0x3A, 0x8C, 0x02, 0x0B, 0xCD, 0xF7, 0x27, 0x0D, 0x13, 0xC2, 0xA1, 0x9F, 0xB5, 0x0B, 0x02, 0xB8, 0x76, 0x45, 0xA5, 0x31, 0x7A, 0xF0, 0x64, 0x65, 0x68, 0x74, 0x09, 0x2D, 0xC7, 0x51, 0x16, 0x20, 0x03, 0x8E, 0x02, 0x4C, 0x80, 0x2F, 0xF1, 0xEF, 0x59, 0x17, 0x24, 0x0A, 0x80, 0x09, 0x10, 0x01, 0xEC, 0xAC, 0x33, 0xCB, 0x01, 0xCC, 0x01, 0xCD, 0x86, 0xCE, 0xEF, 0x0C, 0xBE, 0x41, 0xD3, 0x7F, 0xCA, 0xB0, 0xCB, 0xE1, 0x84, 0x79, 0x8E, 0x7F, 0x96, 0x09, 0x74, 0x1D, 0x5C, 0x71, 0x1B, 0x54, 0xC3, 0xE8, 0x00, 0x0A, 0xBC, 0x5C, 0xB4, 0xFA, 0x5C, 0xBB, 0x3B, 0x7E, 0x78, 0x8A, 0x87, 0x99, 0x7F, 0x8C, 0x75, 0x8D, 0x00, 0xAC, 0xA1, 0x34, 0xF1, 0xEC, 0x02, 0x72, 0xDA, 0xDE, 0xC8, 0x99, 0xD3, 0x64, 0x63, 0x4D, 0x63, 0x2C, 0x01, 0xC2, 0x80, 0xAB, 0xB8, 0xA7, 0x00, 0x94, 0x01, 0x0B, 0xC0, 0x1B, 0xA1, 0x6B, 0xEC, 0x03, 0x4F, 0xE5, 0x2A, 0x5F, 0x10, 0x40, 0xD5, 0xD0, 0x85, 0x04, 0x94, 0x6E, 0xD0, 0xEC, 0x9F, 0xE1, 0x05, 0x82, 0xE2, 0xFA, 0xA1, 0xCF, 0x88, 0xCE, 0x08, 0xD3, 0x31, 0xA2, 0xAA, 0x13, 0x43, 0x84, 0xCE, 0x2B, 0x67, 0x5C, 0x1B, 0x23, 0x5A, 0x49, 0xBA, 0xCF, 0x1C, 0xB5, 0x9A, 0x49, 0x64, 0xB6, 0x42, 0xED, 0x79, 0x21, 0x5B, 0xDA, 0xAD, 0x09, 0x54, 0x47, 0x92, 0xD6, 0x80, 0x5C, 0x3F, 0x00, 0xCB, 0xD4, 0x2E, 0x58, 0x01, 0xEC, 0x00, 0x19, 0xA0, 0x39, 0x5D, 0x1D, 0xE3, 0x9E, 0xDE, 0x02, 0x60, 0x03, 0x44, 0x01, 0xA5, 0x19, 0xD0, 0x24, 0xA0, 0xAC, 0xA1, 0x40, 0x26, 0x10, 0xD1, 0xA0, 0x46, 0xBD, 0x28, 0x77, 0xD0, 0xFC, 0x6B, 0x98, 0x4D, 0x0B, 0x14, 0x9B, 0xB9, 0x3D, 0x49, 0x33, 0x3F, 0x37, 0x18, 0xA5, 0xC2, 0x8F, 0x73, 0xEB, 0x58, 0xF7, 0xC3, 0x9A, 0x6B, 0x4F, 0x3B, 0xFB, 0x52, 0x70, 0x53, 0xB5, 0xCE, 0xB3, 0xE5, 0x87, 0x68, 0xB5, 0xA6, 0xC8, 0x8F, 0xBC, 0xA8, 0xD3, 0xCB, 0x4F, 0xE2, 0x05, 0xB6, 0xED, 0xF4, 0x19, 0x38, 0xE3, 0x6E, 0xEA, 0x6F, 0xF8, 0xA0, 0x69, 0x63, 0xED, 0x9E, 0xC5, 0x8D, 0xE7, 0x52, 0xDF, 0xC8, 0xB9, 0x72, 0xB8, 0x00, 0x6D, 0x38, 0x01, 0x56, 0x0D, 0x03, 0x34, 0x1B, 0xD2, 0x28, 0x20, 0xDE, 0xEB, 0x33, 0x30, 0x11, 0x35, 0x30, 0xA6, 0x80, 0xC9, 0xE1, 0x0A, 0x53, 0x18, 0xEF, 0xA3, 0x47, 0x91, 0xCF, 0x2C, 0xC2, 0x0F, 0xB7, 0x4E, 0x0E, 0x98, 0x8F, 0x68, 0xB9, 0x6C, 0x03, 0xF4, 0x8E, 0x41, 0xD6, 0x4C, 0x96, 0x66, 0x02, 0x41, 0x80, 0x31, 0x20, 0xD6, 0x08, 0xE0, 0x1E, 0x44, 0x44, 0xE6, 0xB8, 0x81, 0xD3, 0x21, 0x7C, 0x86, 0x3C, 0x04, 0xD0, 0x7D, 0x4C, 0x6D, 0x0D, 0x05, 0x39, 0x80, 0x04, 0xE0, 0xBC, 0xDA, 0xED, 0x2E, 0x02, 0x28, 0x99, 0x21, 0x14, 0x03, 0x8C, 0x56, 0x98, 0x08, 0xE0, 0x6C, 0x1C, 0x40, 0x08, 0xF0, 0xB7, 0xD4, 0x12, 0xD3, 0x64, 0xD3, 0xFE, 0xE9, 0xA7, 0xF1, 0xF9, 0xCB, 0xAA, 0xF1, 0xBD, 0x13, 0x04, 0x5B, 0xB5, 0x5D, 0x93, 0x23, 0x3F, 0x44, 0xCB, 0x3A, 0xA1, 0x56, 0xFE, 0x96, 0xE8, 0x47, 0xEF, 0x67, 0xAE, 0x0B, 0xA7, 0x2E, 0xCF, 0x43, 0x65, 0xA0, 0x3A, 0xD8, 0x4C, 0xF3, 0x2A, 0x1E, 0x07, 0x60, 0x9F, 0x7B, 0xE2, 0x1B, 0x00, 0xB4, 0xA7, 0x2A, 0x3A, 0x90, 0x31, 0x4D, 0xD5, 0x48, 0x1B, 0x05, 0x30, 0x37, 0x1C, 0xD0, 0xF5, 0x0A, 0x08, 0x6F, 0xE8, 0x92, 0x96, 0x18, 0xA0, 0xEB, 0x53, 0xBE, 0x37, 0x41, 0x61, 0x16, 0x92, 0xF9, 0x27, 0xBF, 0x4D, 0x92, 0x6F, 0xEA, 0x1B, 0x55, 0x40, 0x74, 0xD5, 0xB3, 0x19, 0x93, 0x19, 0x73, 0x66, 0x22, 0xBB, 0x16, 0x30, 0x2F, 0xED, 0x9A, 0x5B, 0xAA, 0x76, 0x0F, 0x6C, 0xA4, 0x80, 0x64, 0x83, 0xE7, 0x17, 0x0F, 0x75, 0x9C, 0xA4, 0x3F, 0x31, 0x10, 0x63, 0x0C, 0x4D, 0xBC, 0x47, 0x51, 0x72, 0xEE, 0x32, 0xA2, 0x1D, 0x4A, 0x9F, 0xB9, 0xB5, 0x3A, 0x33, 0x1B, 0xEC, 0x39, 0xED, 0xD4, 0x84, 0x01, 0x35, 0xC0, 0xA4, 0x51, 0x40, 0xAC, 0x67, 0x97, 0xA5, 0x71, 0x00, 0xA2, 0xA9, 0xD9, 0xA9, 0xD3, 0xF0, 0xB7, 0x36, 0x11, 0xB5, 0x40, 0x0E, 0x12, 0x15, 0xA7, 0x4F, 0xC5, 0x54, 0x18, 0x92, 0xE7, 0xFE, 0x5D, 0x0D, 0x4E, 0x24, 0x4E, 0xDA, 0x9A, 0x68, 0x46, 0x0A, 0xC3, 0x3F, 0x60, 0xC9, 0x4D, 0xA6, 0xED, 0xE3, 0xED, 0xEC, 0x68, 0x97, 0x58, 0x0A, 0xA9, 0x33, 0xDF, 0xA6, 0x61, 0xEB, 0x5F, 0xF9, 0x2E, 0xAE, 0x31, 0x5C, 0x26, 0xDF, 0xA4, 0x11, 0xA5, 0xE5, 0x51, 0xA4, 0x73, 0x6F, 0x33, 0x06, 0x84, 0x97, 0xBF, 0xA1, 0x4F, 0x63, 0x43, 0x13, 0x20, 0x1C, 0xC8, 0x04, 0xAA, 0x56, 0x6B, 0x81, 0x32, 0x60, 0xD5, 0xC8, 0x86, 0x02, 0x2A, 0x8D, 0x03, 0x58, 0x23, 0x6F, 0xD0, 0xE8, 0xDB, 0xCD, 0x34, 0xF2, 0x1D, 0x6F, 0xF5, 0xBB, 0x2F, 0x22, 0xD3, 0x66, 0x4A, 0x18, 0x56, 0x28, 0x0C, 0x79, 0x9E, 0x4A, 0xF7, 0xDB, 0x1A, 0x82, 0xB5, 0x0F, 0x1D, 0x6F, 0x96, 0x37, 0x4D, 0x2D, 0x0A, 0x09, 0xA0, 0xD1, 0xA0, 0xFF, 0x61, 0x22, 0x17, 0x57, 0x6F, 0xC2, 0x53, 0xAE, 0x1E, 0x0C, 0xE8, 0x32, 0xCB, 0x27, 0x41, 0x40, 0xA5, 0xC3, 0x5B, 0x40, 0x38, 0xE0, 0x0A, 0x58, 0x34, 0x4E, 0x83, 0x1A, 0xDC, 0x08, 0xC0, 0x6B, 0x1E, 0x84, 0xCB, 0x1A, 0xDE, 0xD0, 0x06, 0x03, 0x99, 0xC0, 0x48, 0x55, 0x21, 0x68, 0xFC, 0x5D, 0xCF, 0x35, 0x0D, 0x06, 0x4D, 0x07, 0xD6, 0xDE, 0x26, 0x70, 0x40, 0x37, 0x6F, 0x9F, 0x26, 0x0A, 0x64, 0xF4, 0xD8, 0x51, 0xF4, 0xEF, 0x43, 0x47, 0xFD, 0x14, 0x75, 0xA8, 0xCC, 0xB4, 0x80, 0x64, 0xC3, 0x00, 0x5A, 0x4D, 0xC7, 0xC1, 0x8D, 0xD7, 0x14, 0x30, 0xFB, 0xF7, 0xE3, 0x34, 0x12, 0x20, 0x9F, 0xE9, 0x1D, 0xD2, 0xB9, 0x50, 0x95, 0x80, 0xFB, 0x74, 0x1B, 0xCD, 0x6E, 0x6C, 0x29, 0xC0, 0x6C, 0x75, 0xCC, 0x2E, 0x6B, 0x00, 0x0E, 0x40, 0xAB, 0xE1, 0x80, 0x28, 0x40, 0x01, 0x1C, 0x07, 0xA8, 0x56, 0xC7, 0x6C, 0xC8, 0x3F, 0x61, 0xCC, 0x2F, 0xE6, 0xEF, 0x6C, 0x26, 0xB0, 0x9F, 0x50, 0x47, 0xC7, 0xAC, 0x25, 0x6C, 0xC5, 0xAA, 0xB0, 0x0A, 0xD2, 0xB1, 0x29, 0x90, 0xBE, 0xFE, 0xC5, 0x8F, 0xB4, 0x1A, 0xA5, 0xE4, 0xCC, 0x81, 0xD9, 0x74, 0x00, 0x21, 0x80, 0x6C, 0xDA, 0xB3, 0xC6, 0x99, 0x0F, 0x16, 0xE5, 0x53, 0x95, 0xCD, 0xFE, 0x1A, 0x96, 0xFE, 0x54, 0x80, 0xFA, 0x50, 0x44, 0x69, 0x83, 0x1B, 0xAA, 0x40, 0x3D, 0x07, 0x57, 0x05, 0x2C, 0x80, 0x10, 0x20, 0x09, 0xA8, 0x35, 0xD9, 0x96, 0x13, 0xD0, 0xD3, 0x20, 0x40, 0xAA, 0xA1, 0x0D, 0x9E, 0xFF, 0x2D, 0xA8, 0x83, 0xA6, 0x78, 0x05, 0x94, 0x43, 0x8A, 0x24, 0x81, 0xC9, 0x04, 0xED, 0x71, 0x65, 0x78, 0x2E, 0x4F, 0xF4, 0x0C, 0x03, 0x09, 0xC5, 0x81, 0x3B, 0x73, 0x2A, 0x49, 0x69, 0xBE, 0x09, 0xE4, 0x09, 0x30, 0x28, 0x66, 0xEF, 0x58, 0x0A, 0x10, 0x06, 0x38, 0xCF, 0x17, 0xBD, 0x8F, 0x41, 0xA7, 0x6F, 0x93, 0xE1, 0xA7, 0x2C, 0x3E, 0xDA, 0x9F, 0xFA, 0xB7, 0x78, 0xEA, 0x3B, 0x1E, 0x3D, 0x09, 0xAC, 0x00, 0x19, 0x20, 0x36, 0x23, 0x6A, 0xD2, 0x28, 0xC0, 0xA9, 0x11, 0x6B, 0xFA, 0x12, 0x31, 0xC0, 0xDE, 0x60, 0x80, 0x02, 0x38, 0x7A, 0x9B, 0xE2, 0xE6, 0xA0, 0x13, 0xC9, 0x8E, 0x9A, 0xA1, 0x3B, 0xC3, 0xFF, 0x36, 0xB5, 0x6F, 0x8D, 0xF8, 0x77, 0xBE, 0xB5, 0xF7, 0x67, 0x05, 0x62, 0x7E, 0x04, 0xAF, 0x21, 0xC6, 0xA6, 0xC6, 0x3F, 0xA7, 0xE3, 0xDD, 0x6C, 0x21, 0x2F, 0x43, 0xCF, 0x72, 0x20, 0x13, 0x88, 0x0B, 0x06, 0x9E, 0x8A, 0xED, 0xFD, 0x12, 0xBD, 0xC6, 0xAE, 0xE2, 0xCC, 0x1D, 0xB0, 0x00, 0xD8, 0x66, 0x77, 0x87, 0x30, 0x70, 0xBC, 0x17, 0x90, 0x00, 0x99, 0x0D, 0x6D, 0x70, 0x23, 0x80, 0x3A, 0x8D, 0x9A, 0xD3, 0x93, 0xB9, 0x00, 0xB9, 0x48, 0x40, 0xB9, 0x41, 0x0D, 0x01, 0x8C, 0x81, 0xF0, 0x0E, 0x9A, 0xDF, 0x68, 0x3D, 0xD0, 0xB5, 0x39, 0xFC, 0xFA, 0x9D, 0xBC, 0x9B, 0x7D, 0xAE, 0x5F, 0x53, 0xB6, 0x4F, 0xA0, 0x8F, 0x37, 0xC1, 0x6E, 0xCE, 0x7E, 0x42, 0xC2, 0x23, 0x67, 0xFE, 0xF8, 0x70, 0xC0, 0x0F, 0x20, 0x06, 0x50, 0xE3, 0x38, 0xC0, 0xB1, 0x06, 0xF3, 0x32, 0x90, 0x39, 0x27, 0xB2, 0x1C, 0x69, 0x04, 0x40, 0x0C, 0xB0, 0xFC, 0xF0, 0x3C, 0x53, 0x05, 0x8C, 0x01, 0xBF, 0x28, 0x20, 0x6A, 0x0D, 0x6B, 0x10, 0x80, 0xA8, 0xE1, 0x4B, 0x10, 0x7F, 0x00, 0x6D, 0x58, 0xC3, 0xA5, 0x83, 0x16, 0x28, 0x56, 0xB0, 0xF4, 0xDF, 0x96, 0xFE, 0xC9, 0x97, 0x19, 0x51, 0xB8, 0xF9, 0xA9, 0x77, 0xA7, 0x64, 0x7D, 0x48, 0xBA, 0x27, 0x00, 0x99, 0x3D, 0x3F, 0x34, 0x84, 0x30, 0xC8, 0x21, 0xCF, 0xEE, 0xCF, 0xBA, 0x11, 0x69, 0x9C, 0xD7, 0x11, 0xB8, 0xB4, 0xAE, 0x63, 0x23, 0xB9, 0xF1, 0xC1, 0xB9, 0x64, 0xDA, 0x9B, 0x59, 0x83, 0x01, 0xCD, 0x86, 0x00, 0x16, 0xDD, 0x3C, 0xC1, 0x40, 0xDC, 0x76, 0x6C, 0x01, 0x6E, 0xBF, 0x14, 0x19, 0x20, 0x04, 0x68, 0x00, 0xEE, 0x40, 0x2A, 0x50, 0xD6, 0x6B, 0x85, 0x1B, 0x01, 0x10, 0x03, 0xDC, 0x10, 0xE0, 0x69, 0x22, 0xDF, 0x61, 0xA3, 0x93, 0x2D, 0xCA, 0xD8, 0xE2, 0x32, 0xBE, 0x95, 0x76, 0xDB, 0xF5, 0xCA, 0xA2, 0x3D, 0x08, 0x14, 0x77, 0xD8, 0x9D, 0xE8, 0xE8, 0xA0, 0x2D, 0x1F, 0x7F, 0x7F, 0xAF, 0x74, 0x72, 0x40, 0x04, 0xA0, 0x04, 0xCE, 0x59, 0x19, 0xDD, 0xE1, 0x29, 0x89, 0x0C, 0xD9, 0x94, 0x27, 0xB0, 0x00, 0xCA, 0x8D, 0x02, 0x4C, 0x1A, 0x09, 0x04, 0x2F, 0x3B, 0xBE, 0x3D, 0x39, 0xC4, 0x01, 0x0D, 0xC0, 0x14, 0xF0, 0x46, 0x38, 0x90, 0x01, 0x94, 0x36, 0x72, 0x8E, 0x13, 0x21, 0x5D, 0xEB, 0x8E, 0x01, 0xBD, 0x8F, 0x67, 0x61, 0xC2, 0xDB, 0x17, 0x1F, 0xEB, 0xFB, 0x14, 0x41, 0xB3, 0x6C, 0xDF, 0xF2, 0x09, 0xFC, 0x59, 0x47, 0xBA, 0x67, 0x59, 0xA1, 0xF2, 0x4D, 0x9B, 0x0E, 0xCB, 0xB5, 0xEC, 0xD4, 0x8E, 0xFC, 0xED, 0xCF, 0x44, 0x2F, 0xFF, 0xC9, 0x0A, 0x10, 0xDD, 0x47, 0x10, 0x70, 0xF9, 0x03, 0xF7, 0x2F, 0xA8, 0xAF, 0x05, 0xBA, 0x6E, 0x83, 0xCD, 0xE8, 0xFB, 0x45, 0x6D, 0x73, 0x1A, 0x8B, 0xDD, 0xDF, 0xDA, 0xE6, 0xAF, 0xAB, 0x05, 0x64, 0x4D, 0x6B, 0x2F, 0x61, 0x40, 0x69, 0xAE, 0xD7, 0x20, 0xA0, 0x7A, 0xA1, 0x12, 0x37, 0xB4, 0x41, 0xAB, 0xCF, 0x98, 0xE6, 0xB7, 0x28, 0x23, 0x68, 0x79, 0xF6, 0x9E, 0x86, 0x65, 0x2E, 0x28, 0xEE, 0x11, 0x39, 0x44, 0xBB, 0x45, 0x28, 0xBC, 0xB0, 0xF4, 0x5F, 0xC5, 0xC6, 0xE3, 0xB9, 0xCE, 0x1C, 0xF7, 0xA6, 0xF8, 0xBA, 0xB6, 0x60, 0xB6, 0x87, 0xA5, 0x2D, 0x00, 0x9D, 0xE9, 0x57, 0x20, 0x01, 0xF0, 0xF0, 0x32, 0xC0, 0x8B, 0x0F, 0xC2, 0xE0, 0xDB, 0x42, 0x78, 0x1A, 0x09, 0xB0, 0x2C, 0x28, 0x20, 0x17, 0x05, 0xA8, 0x03, 0x46, 0x8D, 0x00, 0xDC, 0x80, 0x38, 0x40, 0x36, 0x4A, 0xD0, 0x53, 0x70, 0x2E, 0x12, 0x20, 0x6E, 0x14, 0xC0, 0x09, 0x88, 0x03, 0xCA, 0x80, 0x59, 0x07, 0x0D, 0x57, 0x82, 0x3A, 0xF2, 0x89, 0x88, 0x4E, 0xBC, 0xE4, 0x2D, 0x7C, 0xD0, 0xCB, 0xA0, 0xF7, 0xAA, 0x42, 0x0D, 0x51, 0x14, 0x8E, 0x67, 0xCC, 0xF7, 0xD6, 0xB9, 0xBB, 0xCB, 0x80, 0xF2, 0x55, 0xC6, 0x5B, 0x9F, 0xA4, 0xC1, 0x7B, 0xEA, 0x77, 0x02, 0x5E, 0xB7, 0x82, 0x36, 0x4D, 0x6D, 0xBC, 0xA1, 0x06, 0xF0, 0xCF, 0x5E, 0x16, 0x9E, 0xA7, 0x62, 0xB1, 0x99, 0x5D, 0x34, 0x03, 0x72, 0xD7, 0x48, 0x1A, 0x4C, 0x80, 0xEE, 0x5B, 0x83, 0xEE, 0xA9, 0x95, 0x8D, 0x02, 0xCC, 0x81, 0xBC, 0x79, 0x8E, 0x64, 0xFC, 0x4B, 0x67, 0x7D, 0x9B, 0x19, 0x09, 0x36, 0x33, 0x93, 0x1E, 0x38, 0x4B, 0xBD, 0x25, 0x45, 0xE7, 0x45, 0x88, 0xA0, 0xBE, 0xA1, 0x98, 0x2D, 0x79, 0xB9, 0xCA, 0x04, 0xA6, 0xD3, 0x5F, 0x35, 0xBD, 0x71, 0x00, 0x53, 0x40, 0x0E, 0x70, 0xB2, 0xC1, 0x80, 0xEA, 0x8D, 0xCF, 0xCC, 0x93, 0xA5, 0xED, 0x91, 0xAF, 0x0D, 0x6F, 0x30, 0x10, 0x43, 0xC6, 0x8C, 0x3B, 0xCF, 0x3C, 0x7D, 0x95, 0xCD, 0x57, 0xB8, 0x6F, 0x3F, 0xCE, 0x9C, 0xD6, 0x26, 0x42, 0x0D, 0x6D, 0x64, 0xA3, 0x00, 0x25, 0xC0, 0x1A, 0x71, 0x1F, 0x4F, 0xF9, 0x76, 0xB1, 0x0F, 0xD6, 0x8F, 0xAC, 0x17, 0x44, 0x31, 0xFE, 0x6D, 0x42, 0x85, 0xA2, 0xA7, 0x1A, 0x0A, 0x83, 0x21, 0x10, 0x90, 0xD4, 0x19, 0xC9, 0x21, 0xAD, 0x65, 0x0C, 0x26, 0x31, 0x3D, 0xB9, 0x4C, 0x00, 0x6D, 0x30, 0xAD, 0x6E, 0xF5, 0x02, 0x2C, 0xA7, 0x17, 0x77, 0xEC, 0xB1, 0x93, 0x05, 0xF0, 0x9E, 0x41, 0x18, 0x80, 0x17, 0x10, 0x7C, 0x2B, 0xA0, 0x73, 0xA5, 0xB1, 0xCF, 0x71, 0xB0, 0x44, 0x00, 0x3B, 0x20, 0xB9, 0x17, 0x0E, 0x50, 0xB6, 0xC0, 0x40, 0x5A, 0x43, 0xA7, 0x9B, 0x35, 0xBF, 0x95, 0x86, 0x32, 0xC1, 0xE9, 0x09, 0xD0, 0x65, 0x39, 0xA7, 0x8C, 0x47, 0x76, 0x56, 0xC8, 0x31, 0x7F, 0xC3, 0xB5, 0xE5, 0xD2, 0xFC, 0x4B, 0xDC, 0x17, 0xAB, 0xA3, 0x80, 0x81, 0x3C, 0xF3, 0x93, 0xD1, 0x92, 0x4F, 0x2F, 0xD1, 0x9A, 0xE7, 0x74, 0xA7, 0x4A, 0x01, 0x2A, 0x00, 0x67, 0x40, 0x0A, 0xE0, 0x00, 0x48, 0x00, 0x1E, 0x3A, 0x28, 0x7F, 0x77, 0x49, 0x95, 0x8E, 0xD6, 0x7A, 0xDA, 0xE2, 0x00, 0xB9, 0x4C, 0x4C, 0xD9, 0x01, 0xA5, 0x06, 0x03, 0x52, 0x00, 0x67, 0x63, 0x29, 0x73, 0x9C, 0x6F, 0xD0, 0xEC, 0x3B, 0x99, 0x55, 0x17, 0x3B, 0x49, 0xE4, 0xBB, 0x0A, 0x94, 0x04, 0x9A, 0xCB, 0xAA, 0xA0, 0x3A, 0xD4, 0x44, 0x65, 0x97, 0x61, 0x06, 0x40, 0x08, 0x5A, 0xEE, 0x99, 0x2B, 0x4F, 0x8F, 0xFE, 0x26, 0xEA, 0x5C, 0x9D, 0xC4, 0xC3, 0xF4, 0x5C, 0xF4, 0x86, 0x1E, 0x40, 0x80, 0x97, 0x98, 0x3D, 0x32, 0x25, 0x8D, 0x7A, 0x77, 0x23, 0x02, 0xAC, 0xC1, 0xCB, 0xBF, 0xA8, 0xFF, 0xBF, 0x17, 0x98, 0x77, 0xE5, 0x61, 0x9A, 0xA7, 0x44, 0x49, 0xC0, 0x1C, 0x08, 0x06, 0x6A, 0x8D, 0xE1, 0xDB, 0x0F, 0xA4, 0x28, 0xC0, 0x0C, 0x90, 0xCF, 0x4F, 0x2E, 0x1D, 0x34, 0xFF, 0x2A, 0xC4, 0xE5, 0xF6, 0x3D, 0x97, 0x6A, 0x35, 0x14, 0x91, 0x87, 0x0A, 0x63, 0x02, 0xAB, 0x90, 0x97, 0x20, 0xC5, 0xE4, 0x27, 0xCB, 0xE1, 0xDB, 0xA7, 0xBA, 0xB5, 0x7D, 0x19, 0xAB, 0x8C, 0xE7, 0x80, 0x1A, 0xC0, 0xB2, 0xA6, 0x8E, 0x45, 0x63, 0xC9, 0xDB, 0xEE, 0x8A, 0xE3, 0x02, 0xE4, 0x2C, 0x93, 0x2B, 0xFA, 0xA1, 0x47, 0x2A, 0x9E, 0x8E, 0x9A, 0xE6, 0x37, 0xF7, 0x3B, 0xD3, 0x1D, 0x7A, 0xE6, 0x46, 0xE9, 0x3E, 0xA3, 0x7D, 0x1A, 0xA4, 0x0D, 0x6F, 0x18, 0x70, 0xB2, 0x61, 0xF3, 0xBF, 0xBD, 0x2A, 0x7B, 0x06, 0x76, 0xB8, 0x53, 0x5F, 0xBA, 0xC3, 0x0B, 0x35, 0x77, 0x4A, 0x58, 0xED, 0x0B, 0x6E, 0x4E, 0x21, 0x1A, 0x58, 0xA8, 0x6C, 0xB0, 0x0F, 0xA9, 0xC4, 0x6B, 0xF3, 0xE7, 0xE5, 0x93, 0xE5, 0x6E, 0xD0, 0xF3, 0x09, 0xE1, 0x75, 0x9E, 0xD5, 0x02, 0x68, 0xF9, 0x9A, 0x91, 0x01, 0x51, 0xEB, 0x91, 0x5A, 0xB9, 0x30, 0x95, 0xC6, 0x01, 0xC4, 0x00, 0xBD, 0x05, 0x85, 0xD7, 0x73, 0xEA, 0xF3, 0x66, 0x19, 0x36, 0x8B, 0xFB, 0xEC, 0x80, 0x1E, 0xC0, 0x7C, 0x1D, 0x8E, 0x2F, 0x0C, 0xA8, 0xD3, 0xA0, 0x65, 0x9C, 0xDE, 0x60, 0xEB, 0xA0, 0xE5, 0x97, 0x3C, 0x53, 0x45, 0xB6, 0xD6, 0x88, 0x46, 0x8F, 0xB6, 0x2B, 0xEE, 0x58, 0x25, 0x86, 0x7D, 0x59, 0x13, 0x47, 0x06, 0x5F, 0xC6, 0x7D, 0xDC, 0xAC, 0xDC, 0xC6, 0x9A, 0x0E, 0x44, 0x35, 0x68, 0xC9, 0x48, 0x0D, 0xE0, 0x25, 0x21, 0xAA, 0x91, 0xBE, 0x87, 0xDB, 0xEF, 0x78, 0xB0, 0x43, 0x01, 0x31, 0xE0, 0x9C, 0xE9, 0xC0, 0x67, 0xF7, 0x8B, 0x3A, 0x17, 0x57, 0xE9, 0xAD, 0x5D, 0xED, 0xDC, 0xC0, 0xBC, 0x83, 0x90, 0x03, 0x2A, 0x80, 0x73, 0xE3, 0x00, 0xA6, 0x80, 0x54, 0x43, 0x00, 0x55, 0x20, 0xDE, 0x52, 0xAB, 0x91, 0xB5, 0xB5, 0x80, 0x9A, 0xD4, 0xCD, 0xFF, 0x79, 0x67, 0x25, 0x3F, 0x35, 0x73, 0x12, 0xFE, 0xFD, 0x4D, 0xD0, 0xEA, 0xCA, 0xD2, 0x57, 0xF5, 0x7D, 0x52, 0xE3, 0xE9, 0xA7, 0x96, 0x3A, 0x6D, 0x50, 0x69, 0x89, 0x53, 0x84, 0x57, 0x1D, 0xCE, 0x1B, 0x36, 0x6D, 0x57, 0x29, 0xF7, 0x6A, 0x6C, 0xF0, 0x7C, 0xA4, 0x4E, 0x01, 0xF2, 0x7E, 0xD0, 0x48, 0x67, 0xA3, 0x91, 0xAC, 0x1F, 0x9F, 0xBE, 0x4F, 0xAD, 0x9B, 0x7B, 0xCA, 0x72, 0x4D, 0x70, 0x80, 0xE3, 0x97, 0x6B, 0x42, 0xC3, 0x1B, 0xD1, 0xC8, 0x5E, 0x6A, 0x75, 0x86, 0x2F, 0xB5, 0xA4, 0x7F, 0xD5, 0x76, 0x3E, 0x58, 0x7F, 0x4E, 0x89, 0xC1, 0x98, 0x2E, 0x7D, 0x2D, 0xD6, 0xCE, 0x0A, 0x1A, 0xDA, 0x16, 0xB7, 0x9D, 0x1A, 0xBD, 0xA6, 0xD8, 0xBE, 0xA3, 0x2F, 0xDB, 0x82, 0x6B, 0x4F, 0x9E, 0x0E, 0x70, 0xDE, 0xDF, 0x08, 0x10, 0x03, 0xEC, 0x4D, 0x9A, 0x9C, 0xCE, 0x0F, 0x2A, 0x00, 0x1F, 0x80, 0x62, 0xFD, 0x99, 0x02, 0x78, 0x3C, 0x7B, 0x72, 0xF8, 0x72, 0xF4, 0xDD, 0x23, 0xD7, 0x1D, 0xA2, 0xA2, 0x8F, 0xF6, 0x04, 0x98, 0x02, 0x61, 0x40, 0x51, 0xA3, 0x56, 0xB7, 0xB1, 0x00, 0xDC, 0x10, 0x07, 0x94, 0x01, 0xF3, 0x8E, 0x19, 0x41, 0x80, 0x18, 0x8E, 0x9F, 0xCA, 0x70, 0xA7, 0x16, 0xE6, 0xAE, 0x87, 0x7A, 0xCF, 0xE2, 0x12, 0x80, 0xAF, 0x1B, 0x7E, 0xFE, 0xAA, 0x12, 0xDC, 0x33, 0xC0, 0x4D, 0xA2, 0xE6, 0x18, 0xEF, 0x82, 0xAC, 0x4E, 0x7F, 0x02, 0x44, 0xAE, 0x72, 0x08, 0x88, 0xBA, 0x06, 0xF1, 0x40, 0xE5, 0x5C, 0x06, 0xA2, 0x00, 0x25, 0x70, 0x3A, 0xF4, 0xD5, 0xC8, 0x46, 0x0D, 0x61, 0x16, 0xDE, 0xC9, 0xF0, 0x88, 0x20, 0x20, 0x1C, 0x91, 0x3C, 0x05, 0x70, 0x00, 0x2A, 0x80, 0x1F, 0x20, 0x0A, 0x28, 0x6A, 0xE8, 0x74, 0xAB, 0x3B, 0x02, 0x10, 0x01, 0x7C, 0x00, 0xBD, 0x0B, 0x8D, 0xDB, 0xD9, 0x26, 0xBF, 0x21, 0x5C, 0xF5, 0xBD, 0x30, 0x0B, 0x8D, 0x66, 0x8E, 0x11, 0x8C, 0x7D, 0xB4, 0xCE, 0x0F, 0x51, 0xD1, 0xDB, 0x06, 0x26, 0x61, 0x8C, 0x7B, 0xD4, 0x1C, 0xCD, 0xEE, 0xD3, 0x22, 0xD2, 0xD7, 0xA6, 0xA2, 0x05, 0xB0, 0xCC, 0x61, 0xFE, 0x15, 0xF3, 0x4C, 0xEF, 0x79, 0xF3, 0xA4, 0x0A, 0x18, 0xCD, 0x8A, 0x10, 0x57, 0xE3, 0x00, 0xB4, 0x8E, 0x17, 0x21, 0x7F, 0x93, 0x7C, 0xF8, 0x65, 0x34, 0xE8, 0x00, 0xAA, 0xCB, 0x0D, 0x52, 0x80, 0xBA, 0xAB, 0xB7, 0xC1, 0x17, 0xDE, 0x48, 0x40, 0xA8, 0xE1, 0x80, 0x2A, 0xE0, 0x37, 0x68, 0x78, 0xF4, 0x42, 0xF9, 0xAB, 0xE5, 0xA9, 0xF2, 0x27, 0x20, 0x92, 0xA4, 0xEF, 0x45, 0x10, 0x4C, 0xFD, 0x16, 0x0A, 0xC4, 0x4E, 0x0C, 0x5B, 0x5A, 0xFA, 0xC8, 0x0D, 0x99, 0xED, 0xB7, 0xE7, 0x79, 0x9D, 0x28, 0x88, 0x56, 0x23, 0x0F, 0x60, 0xC0, 0x3B, 0xBD, 0x65, 0x23, 0x6E, 0x24, 0x11, 0xB4, 0x97, 0xA9, 0xCE, 0x73, 0x03, 0xA3, 0xA3, 0xFC, 0x16, 0x07, 0xF0, 0x5D, 0xA1, 0x7B, 0x5E, 0x4C, 0xA3, 0xD7, 0x45, 0xFE, 0x6B, 0x1B, 0x77, 0x00, 0x0B, 0x20, 0x75, 0x26, 0x2F, 0x38, 0x00, 0x63, 0xC0, 0x1D, 0x08, 0x6A, 0x68, 0xC3, 0x1A, 0x3E, 0x27, 0xF9, 0x92, 0x74, 0xD0, 0xF4, 0x2B, 0x79, 0x96, 0xF1, 0xA7, 0x7E, 0x11, 0xE7, 0xD9, 0xF9, 0xA9, 0x8C, 0x5A, 0x27, 0x31, 0xAC, 0x5E, 0xF2, 0xDA, 0x52, 0xDB, 0xB8, 0xB1, 0xFB, 0xD9, 0x57, 0x82, 0x02, 0x7C, 0xDD, 0x0C, 0xCC, 0x7F, 0xB8, 0x52, 0xD7, 0x01, 0xC2, 0x1B, 0x09, 0x54, 0x4C, 0x45, 0x56, 0x3A, 0x60, 0x01, 0x68, 0x02, 0x76, 0x1A, 0x02, 0x78, 0x4D, 0x13, 0xB7, 0xB3, 0xCA, 0x52, 0x5A, 0x73, 0x6E, 0x08, 0x1B, 0xA0, 0x7B, 0xA6, 0x56, 0x02, 0xC5, 0x0D, 0x99, 0xC8, 0x6C, 0xD4, 0xBC, 0xF0, 0xD3, 0x7D, 0x79, 0x96, 0x7D, 0xBB, 0x58, 0x52, 0x62, 0xB8, 0xAC, 0xF1, 0x50, 0xC6, 0x07, 0x05, 0x34, 0x16, 0x1C, 0x78, 0xE3, 0xB3, 0xC1, 0x77, 0xBA, 0x83, 0xF6, 0x2E, 0x9F, 0xF6, 0x73, 0xE2, 0x67, 0x28, 0x90, 0xB2, 0xBA, 0x59, 0x57, 0xF7, 0x19, 0xD1, 0xBC, 0x79, 0x89, 0xCE, 0x56, 0xAF, 0x60, 0xC0, 0xCF, 0xEA, 0xF8, 0x92, 0x46, 0x02, 0x44, 0xC0, 0x18, 0x76, 0x8F, 0x90, 0xAC, 0x19, 0x0F, 0xAE, 0xB3, 0xC8, 0x50, 0xD7, 0x81, 0xC8, 0x01, 0x13, 0x20, 0xED, 0x4D, 0x2E, 0x06, 0x7C, 0xE1, 0xAE, 0xDB, 0xEA, 0x4F, 0x09, 0x28, 0x77, 0xD4, 0x1C, 0xEE, 0x13, 0x84, 0xC1, 0x9F, 0xA2, 0xD0, 0xF9, 0x59, 0x5F, 0xAB, 0x32, 0x0D, 0x53, 0xCA, 0x84, 0x70, 0x46, 0xB0, 0x2B, 0xCB, 0xA7, 0x79, 0x91, 0x7A, 0x7E, 0x30, 0x35, 0x3D, 0xE8, 0xFC, 0xCC, 0x64, 0x84, 0xF0, 0x9C, 0x41, 0x27, 0xAB, 0x87, 0x56, 0xA5, 0xA1, 0x4B, 0xB4, 0xEF, 0xF3, 0x12, 0x2A, 0xF4, 0x4B, 0x9E, 0x41, 0xC0, 0xFD, 0x09, 0x47, 0xDF, 0x21, 0xB7, 0x5F, 0x2B, 0xFB, 0x31, 0x15, 0x40, 0x0B, 0xB8, 0x4F, 0xDD, 0x11, 0x40, 0x1A, 0x46, 0x0D, 0x6E, 0xAC, 0x24, 0xA8, 0x26, 0x60, 0x31, 0x47, 0x61, 0x54, 0x7C, 0x56, 0x7D, 0x5C, 0x84, 0x06, 0x6D, 0x92, 0xD1, 0xEE, 0x53, 0x95, 0x50, 0x53, 0xBB, 0x23, 0x8D, 0xC3, 0x8C, 0x8B, 0x8F, 0x9E, 0xD9, 0x99, 0x7D, 0x59, 0xB1, 0x5B, 0xCB, 0x74, 0x75, 0x47, 0xD1, 0x8F, 0x01, 0xA9, 0x59, 0x40, 0x34, 0x8A, 0x67, 0xE7, 0x94, 0x1B, 0xA0, 0xF6, 0xCB, 0x92, 0xC2, 0x1A, 0x09, 0x4C, 0xC3, 0x13, 0x7B, 0xEF, 0x9C, 0x3A, 0xAF, 0xA6, 0x77, 0x2F, 0x0A, 0x80, 0x09, 0x10, 0x06, 0x54, 0xAE, 0x71, 0xF5, 0x05, 0x28, 0x2F, 0xD0, 0x84, 0x31, 0x10, 0xD5, 0x51, 0xCB, 0x21, 0xB9, 0x45, 0xA5, 0xCE, 0x31, 0xF8, 0xDF, 0xD1, 0xDF, 0x81, 0xCB, 0x4A, 0x06, 0x6E, 0x71, 0x66, 0xF0, 0x68, 0x34, 0x99, 0xD6, 0x09, 0xBC, 0xB2, 0x43, 0x4A, 0xB3, 0xC5, 0xCB, 0x02, 0x90, 0x04, 0x8E, 0xCE, 0x8E, 0x38, 0x6D, 0xF0, 0x6A, 0x6F, 0xDA, 0x1E, 0x88, 0x12, 0x00, 0x9D, 0xA5, 0x2C, 0x6D, 0xF0, 0x48, 0xD3, 0xD9, 0x6B, 0x43, 0xEC, 0x1D, 0x8F, 0xDE, 0x28, 0xFB, 0x94, 0x69, 0xB0, 0xC9, 0x01, 0x98, 0x02, 0x11, 0x40, 0x69, 0xAF, 0xC6, 0x06, 0x09, 0xC0, 0x04, 0xC8, 0xF9, 0x91, 0x29, 0x77, 0xED, 0xA0, 0x15, 0xB2, 0xB6, 0x4E, 0x9F, 0x2F, 0x75, 0x9D, 0x18, 0xD3, 0x9F, 0x39, 0xB5, 0xE5, 0x3C, 0x06, 0xA5, 0x92, 0x24, 0x92, 0xAE, 0x51, 0xD0, 0x59, 0xFD, 0x14, 0xA9, 0x91, 0xAD, 0x11, 0xDF, 0x09, 0xA4, 0xAC, 0xB1, 0xE1, 0xB5, 0x86, 0xCB, 0x3A, 0xA0, 0x1D, 0xBB, 0x53, 0x80, 0x07, 0x60, 0x0C, 0x9C, 0x5C, 0x57, 0xF6, 0xF5, 0x67, 0xD6, 0x0D, 0xF6, 0x7A, 0x07, 0x3C, 0x05, 0x3E, 0xCD, 0xFB, 0x90, 0x13, 0x10, 0xB6, 0xE4, 0x19, 0x0A, 0x28, 0x4D, 0x88, 0x01, 0xDC, 0xA0, 0x04, 0x38, 0x80, 0x3B, 0xD6, 0x41, 0x87, 0x97, 0xC9, 0xF7, 0x0F, 0x5F, 0xB0, 0xA7, 0x26, 0x46, 0x3A, 0xD2, 0x1D, 0x0D, 0x11, 0xAA, 0x48, 0x14, 0x14, 0xF5, 0xF6, 0x3C, 0x44, 0x6A, 0xDB, 0x84, 0x8E, 0xDF, 0x1E, 0x25, 0xBA, 0xBA, 0x8D, 0x1A, 0x66, 0x00, 0xEB, 0x14, 0x21, 0x47, 0xDE, 0x4F, 0x53, 0x0C, 0x7A, 0x02, 0x20, 0x9B, 0xAD, 0x68, 0xF5, 0xD2, 0x91, 0x00, 0x9D, 0xD9, 0x6E, 0x2B, 0xFC, 0x52, 0x8E, 0xB7, 0x3D, 0x68, 0x0E, 0x97, 0x75, 0x02, 0x8A, 0xD6, 0xE4, 0xD8, 0x02, 0x74, 0x95, 0x5A, 0xFD, 0x34, 0x12, 0x08, 0x03, 0xD2, 0x81, 0xBA, 0x85, 0xD7, 0xEA, 0xA0, 0xD1, 0x77, 0xE8, 0x08, 0x77, 0x8C, 0x93, 0x3D, 0x7F, 0xEF, 0xCF, 0x6F, 0xD3, 0x2E, 0x4C, 0x30, 0xA4, 0xE8, 0x8D, 0x3C, 0x7A, 0xA5, 0xF1, 0xC8, 0x78, 0xAB, 0xFF, 0x9E, 0x85, 0x11, 0x3F, 0x3C, 0x4D, 0x34, 0xD7, 0x4C, 0x95, 0x9A, 0x55, 0x03, 0x7F, 0x82, 0xBD, 0x99, 0x2A, 0x2F, 0x05, 0x4C, 0x00, 0x69, 0xF0, 0x7A, 0x15, 0xE8, 0x59, 0xCD, 0x8F, 0x7C, 0x57, 0xC7, 0x3A, 0x10, 0x67, 0xEF, 0x5F, 0xB4, 0xF4, 0x19, 0xA6, 0x40, 0xAE, 0x7E, 0x87, 0x73, 0xE3, 0x6B, 0x40, 0x56, 0x63, 0x27, 0xE1, 0xB8, 0xA3, 0xC6, 0xC3, 0xCD, 0xFB, 0xB0, 0x7D, 0xF3, 0x18, 0x23, 0x31, 0xFE, 0x2D, 0x29, 0xF0, 0x67, 0x85, 0x60, 0xFE, 0x5E, 0x22, 0x01, 0x6E, 0xB5, 0x2E, 0x05, 0xB9, 0x6A, 0x9F, 0x4F, 0x76, 0x73, 0xF5, 0x4F, 0x06, 0x68, 0xCC, 0x01, 0xA4, 0x1C, 0x33, 0xB7, 0xC5, 0xD1, 0x70, 0xC0, 0x73, 0xA9, 0x76, 0x64, 0x6A, 0x42, 0xAD, 0xE1, 0x02, 0xC4, 0xB0, 0xC2, 0x7F, 0x3D, 0x1F, 0x78, 0x4D, 0x60, 0x73, 0xEA, 0x4B, 0x93, 0xD8, 0x34, 0xD8, 0x3C, 0xB1, 0xBC, 0x22, 0x19, 0xC8, 0xD3, 0x70, 0xA0, 0xB4, 0x4D, 0x74, 0x6C, 0x99, 0xE8, 0x34, 0xE4, 0x00, 0x2A, 0x1D, 0x34, 0x19, 0xC6, 0xB7, 0x2E, 0x82, 0x36, 0x1F, 0x43, 0x5A, 0xB2, 0x2A, 0x71, 0xE7, 0x71, 0x81, 0x82, 0x1A, 0x92, 0x52, 0xB6, 0xE5, 0x1B, 0xDF, 0xA4, 0xE7, 0xF2, 0xF8, 0x9E, 0xC1, 0x46, 0x12, 0xE0, 0x07, 0xE0, 0x58, 0x4E, 0xFA, 0x01, 0x30, 0x01, 0xB4, 0x7A, 0x53, 0x5D, 0x01, 0x3B, 0x00, 0x2B, 0x40, 0xB1, 0xFA, 0x5D, 0x87, 0x91, 0x86, 0x3E, 0x81, 0x56, 0xF1, 0x30, 0xAD, 0x38, 0xEF, 0x8D, 0x27, 0x0D, 0xCF, 0x29, 0x15, 0x39, 0x05, 0xB0, 0x01, 0x22, 0xAB, 0x9C, 0x62, 0x80, 0x29, 0xE0, 0xD4, 0x28, 0x20, 0x6F, 0xD0, 0xF4, 0x2B, 0x18, 0x4B, 0xF0, 0xBF, 0xF8, 0x0E, 0x47, 0x34, 0xBA, 0xF1, 0xC2, 0x0A, 0x9B, 0x8A, 0x13, 0xC4, 0x65, 0xD1, 0x97, 0x02, 0x87, 0x88, 0x54, 0xF6, 0xA1, 0xA3, 0x76, 0x63, 0x99, 0xE6, 0x9A, 0xDB, 0x13, 0x00, 0x2B, 0x70, 0x64, 0x65, 0x6F, 0x69, 0x3E, 0xD7, 0x6F, 0xBA, 0x08, 0x37, 0xCE, 0x72, 0x95, 0xD1, 0x86, 0x4F, 0xE4, 0x38, 0x09, 0xDB, 0x93, 0x7F, 0x1A, 0x4F, 0x79, 0x76, 0xC9, 0x94, 0x12, 0x0A, 0x03, 0x5A, 0x4B, 0xE1, 0x77, 0x1A, 0xDA, 0xB0, 0x86, 0x34, 0x7C, 0xBE, 0x3B, 0x28, 0xEE, 0xAB, 0xC0, 0xC6, 0xAB, 0x80, 0x82, 0xD0, 0x5D, 0xA0, 0x82, 0xEC, 0x24, 0x73, 0x1B, 0x2A, 0x52, 0xCB, 0x6C, 0x02, 0x59, 0x41, 0xEE, 0xA9, 0x65, 0xDB, 0xD9, 0x84, 0x9E, 0x89, 0xC9, 0xB2, 0x6E, 0x0F, 0xC0, 0x1B, 0x4C, 0xB3, 0x0D, 0x42, 0x72, 0xF4, 0x4D, 0x0C, 0x71, 0xDD, 0xC8, 0xDE, 0x7A, 0x01, 0x12, 0x8D, 0x03, 0xA8, 0x00, 0xA6, 0xAF, 0x4A, 0x72, 0xCF, 0x5F, 0xD3, 0xE8, 0xB0, 0x9F, 0xC1, 0x67, 0x5F, 0x58, 0x39, 0xEB, 0xC7, 0xD5, 0xE9, 0x21, 0x66, 0x40, 0x05, 0x30, 0x05, 0xBC, 0x11, 0x02, 0xA4, 0x03, 0x15, 0x9D, 0x33, 0x3A, 0x00, 0x47, 0x07, 0xCD, 0x5F, 0xD0, 0xD4, 0xD0, 0xFF, 0xA9, 0x5F, 0x26, 0xA6, 0xA7, 0x8E, 0x13, 0xAC, 0xFB, 0x7A, 0x30, 0x5E, 0x90, 0xDC, 0x26, 0x91, 0xC4, 0x61, 0xE3, 0x97, 0x89, 0x8E, 0xBC, 0xEE, 0x66, 0xF3, 0x79, 0xB1, 0x4B, 0x05, 0x94, 0x81, 0xD7, 0x4F, 0x9C, 0x80, 0x28, 0xF0, 0x6E, 0xF4, 0x0C, 0x24, 0x01, 0x75, 0x00, 0xF7, 0x86, 0x00, 0xD1, 0x48, 0x7E, 0x0B, 0xE8, 0xB6, 0x37, 0xFD, 0x09, 0xD9, 0xE4, 0x89, 0x13, 0x94, 0xE7, 0x05, 0xDD, 0x1B, 0x25, 0x08, 0x2C, 0x39, 0x20, 0x0C, 0xE8, 0x45, 0x01, 0x7E, 0x1A, 0x05, 0xE4, 0x99, 0x33, 0xE2, 0xDE, 0x0B, 0x34, 0x76, 0x9F, 0xEC, 0xF7, 0x9C, 0xBA, 0x60, 0x1A, 0x86, 0x0A, 0xA3, 0x23, 0xAC, 0xAD, 0x6F, 0x93, 0x09, 0x37, 0x45, 0xF4, 0xB3, 0x87, 0x6D, 0xBD, 0xF2, 0x89, 0xD9, 0x84, 0x21, 0x05, 0xB8, 0x03, 0xEA, 0xCB, 0x84, 0xCE, 0x00, 0x5D, 0x47, 0xB5, 0xB3, 0x2E, 0xA5, 0xC4, 0xCB, 0xC5, 0xD5, 0x00, 0x71, 0x40, 0x15, 0x30, 0x02, 0x72, 0x9C, 0x92, 0xFD, 0x9D, 0xAE, 0xC4, 0x3B, 0x84, 0x56, 0xF3, 0x98, 0x2B, 0x05, 0x04, 0x01, 0x65, 0xD3, 0x8F, 0x94, 0x1B, 0x42, 0x5B, 0x62, 0xD5, 0x48, 0xC0, 0x0B, 0x78, 0xBB, 0x5A, 0xF6, 0xE8, 0xE2, 0x17, 0xB4, 0xEF, 0xF2, 0x6E, 0x0C, 0x69, 0x3C, 0x09, 0x5A, 0x57, 0x82, 0xFA, 0xA0, 0xEF, 0x82, 0x8D, 0x8A, 0xD7, 0x78, 0xD9, 0x5C, 0xFD, 0x04, 0xAA, 0xF3, 0xBA, 0x5D, 0x01, 0xC4, 0xDA, 0xE7, 0x4F, 0x4E, 0xCB, 0x35, 0xD5, 0xC6, 0x01, 0x8C, 0x1B, 0x3E, 0x63, 0xE7, 0xB2, 0x52, 0x1D, 0xD6, 0x28, 0xE0, 0xBE, 0x57, 0x5E, 0xA9, 0xF0, 0xB6, 0xDC, 0x6D, 0x7F, 0xB1, 0x8B, 0xCA, 0x29, 0xC9, 0xB1, 0x03, 0x44, 0x01, 0x15, 0x8D, 0xF5, 0x29, 0x73, 0x95, 0x5C, 0xF4, 0xE5, 0x9E, 0x11, 0xB4, 0x9A, 0x2B, 0x6D, 0xF9, 0xA9, 0x05, 0xAA, 0x9F, 0x4C, 0x82, 0x37, 0x42, 0x44, 0xE2, 0x82, 0xC9, 0x7A, 0x6F, 0x50, 0x5B, 0xA5, 0x36, 0xFD, 0xB7, 0xA2, 0x80, 0x6C, 0xC4, 0xBA, 0x85, 0x72, 0x2C, 0xC7, 0x37, 0x6A, 0xC4, 0xBC, 0x29, 0x48, 0x00, 0x47, 0x66, 0x7C, 0x34, 0x00, 0x4B, 0xC0, 0xED, 0xAF, 0x28, 0x28, 0x2F, 0x6D, 0xE7, 0xE7, 0x2E, 0xB1, 0x97, 0x43, 0x9C, 0x42, 0x24, 0xEF, 0xE7, 0xF2, 0x30, 0xC0, 0x09, 0x68, 0xC3, 0x1A, 0x1E, 0x40, 0x18, 0x90, 0xCB, 0xDF, 0xFA, 0x10, 0x40, 0x86, 0xA0, 0xD1, 0xBB, 0x14, 0x20, 0x3F, 0x54, 0xA8, 0xAA, 0x38, 0x05, 0x66, 0x49, 0x31, 0xE1, 0x12, 0x11, 0x85, 0x33, 0x55, 0x7B, 0x5C, 0x39, 0xD5, 0x8F, 0x93, 0xDA, 0xA9, 0x69, 0x71, 0x29, 0x5B, 0x48, 0xE0, 0xB3, 0xE7, 0x24, 0x75, 0xF7, 0x22, 0x36, 0x62, 0x3E, 0xC8, 0xB1, 0x0E, 0x1D, 0xA7, 0xE6, 0x68, 0x1F, 0x3A, 0x00, 0x03, 0x4F, 0xBF, 0x20, 0xA3, 0x88, 0x4E, 0xFC, 0xC6, 0x58, 0x5E, 0x21, 0x94, 0x76, 0x0C, 0xE8, 0xCC, 0x30, 0x45, 0x00, 0x65, 0x1D, 0x91, 0x02, 0x28, 0x01, 0x2E, 0x40, 0x1A, 0x46, 0x80, 0x1F, 0x20, 0xBC, 0x83, 0x46, 0xBF, 0x7C, 0x0E, 0x71, 0xBC, 0x75, 0x34, 0x15, 0x8B, 0x40, 0x9C, 0xA0, 0x26, 0x85, 0x13, 0x96, 0xD6, 0x2F, 0x3B, 0xEF, 0x7E, 0xA2, 0x9E, 0x47, 0x1A, 0xFD, 0x98, 0x95, 0x1D, 0x0A, 0x90, 0xAC, 0xE1, 0x65, 0xAB, 0x3F, 0xC8, 0x0D, 0x30, 0x5D, 0x2B, 0x6D, 0x8D, 0xDC, 0x32, 0x02, 0xFC, 0xE5, 0xF0, 0xA6, 0x35, 0x25, 0xD7, 0x7D, 0xE8, 0xC6, 0x8C, 0x0B, 0xBC, 0x4F, 0x7A, 0x6A, 0x67, 0xAB, 0xBE, 0x1C, 0xD0, 0x86, 0x07, 0x10, 0xB5, 0x4E, 0xB9, 0xB6, 0x4E, 0xB9, 0xB6, 0x4E, 0xB9, 0xDA, 0x41, 0xE3, 0x17, 0xB4, 0x50, 0x0C, 0xF3, 0x51, 0xC1, 0x74, 0x24, 0xF4, 0x30, 0xDA, 0x77, 0x46, 0x49, 0xF2, 0x6E, 0xA7, 0x34, 0x38, 0x5E, 0xD0, 0x34, 0x06, 0x33, 0xD9, 0x85, 0x82, 0xD5, 0x45, 0x18, 0x0C, 0xDC, 0x96, 0xA7, 0x6C, 0x88, 0xCC, 0x10, 0x8A, 0x00, 0xB4, 0x67, 0xD9, 0x31, 0x70, 0x96, 0x57, 0x90, 0x33, 0x10, 0x8D, 0x1C, 0x89, 0x36, 0x7B, 0x17, 0xF2, 0x7E, 0x74, 0x69, 0x49, 0x1F, 0xF5, 0x8D, 0x1C, 0x15, 0x05, 0xBC, 0x51, 0xA7, 0xE3, 0x9A, 0x00, 0x35, 0x38, 0x00, 0xC9, 0x95, 0x4C, 0x6B, 0xB8, 0x02, 0xC9, 0x1D, 0x34, 0x28, 0x93, 0x55, 0x1C, 0xF7, 0x92, 0xB0, 0x7F, 0xF5, 0xBD, 0xE8, 0xE8, 0x3B, 0xB6, 0x9D, 0x10, 0x58, 0x59, 0x4A, 0xB5, 0xE4, 0x96, 0x60, 0x83, 0xA7, 0x01, 0x0F, 0xD7, 0xDF, 0xCE, 0xB7, 0xC4, 0x1D, 0xBC, 0x00, 0xC4, 0x1B, 0xD9, 0xA0, 0x09, 0x35, 0x20, 0xAF, 0x3B, 0xC1, 0x48, 0x40, 0x10, 0x7F, 0xC4, 0xAE, 0x54, 0x7F, 0x65, 0x4B, 0xBC, 0x5B, 0x9F, 0x8A, 0x3D, 0xDF, 0x11, 0x56, 0x69, 0x56, 0x52, 0x9D, 0x01, 0x29, 0x80, 0x09, 0xA0, 0x98, 0x60, 0x02, 0xF4, 0x00, 0xD1, 0xA8, 0x46, 0x06, 0x10, 0x06, 0x58, 0x02, 0xEA, 0xF3, 0x53, 0xD9, 0xE9, 0xA8, 0xE9, 0x3F, 0x27, 0x1C, 0x68, 0x59, 0xF1, 0x44, 0xBE, 0xC7, 0x14, 0x1B, 0x3A, 0xBC, 0x3C, 0x24, 0x90, 0x39, 0xA7, 0x1E, 0x90, 0x97, 0xD3, 0x43, 0x47, 0x69, 0x77, 0x96, 0x9D, 0x75, 0x4D, 0xCF, 0x6A, 0x10, 0xE0, 0x7B, 0xB8, 0xE5, 0x68, 0x40, 0xD0, 0xA7, 0x92, 0x3A, 0xFA, 0x57, 0x58, 0x21, 0x7A, 0xB3, 0x1C, 0x5C, 0x86, 0x1D, 0xB8, 0x8D, 0xF9, 0x6C, 0x28, 0xCF, 0xCC, 0x4B, 0xE9, 0x45, 0x4C, 0xE4, 0x69, 0x48, 0xE3, 0x0A, 0x35, 0x02, 0x90, 0x04, 0x2C, 0x1A, 0x06, 0x28, 0xAF, 0x01, 0x57, 0x0D, 0x26, 0xC0, 0xF3, 0x46, 0xCD, 0x90, 0xAA, 0xDD, 0x06, 0xB8, 0xDD, 0xC4, 0xA8, 0x6E, 0xE8, 0x25, 0x2C, 0xC5, 0xB9, 0x32, 0x3B, 0x35, 0x56, 0x7A, 0xAF, 0x50, 0x3B, 0x3F, 0xB4, 0x3C, 0xAE, 0x6C, 0x46, 0x2B, 0x74, 0x46, 0xCB, 0x6A, 0xE6, 0x36, 0xAE, 0xD6, 0x40, 0x5E, 0xC1, 0x6A, 0x0D, 0xB9, 0x88, 0x02, 0x44, 0xFE, 0x5B, 0xB4, 0xCB, 0xF7, 0xAA, 0xD4, 0x98, 0xD1, 0xA2, 0xBC, 0xFD, 0xA3, 0x40, 0x38, 0xE0, 0x4B, 0xED, 0xE6, 0xA7, 0xA1, 0x73, 0x9C, 0xEA, 0x21, 0x80, 0xB4, 0x21, 0xC0, 0xF1, 0xF9, 0x87, 0x65, 0xDE, 0x4F, 0xD3, 0x0D, 0x46, 0x09, 0xDD, 0x8B, 0xCA, 0xFE, 0x7F, 0x83, 0xC6, 0xA7, 0x70, 0xBD, 0x21, 0xFF, 0x5E, 0xA3, 0x75, 0xE7, 0x58, 0x9E, 0x59, 0x94, 0x32, 0xDD, 0x49, 0xEF, 0x92, 0x69, 0x65, 0x12, 0xB6, 0x5C, 0xF4, 0xB3, 0xC1, 0x8D, 0x9A, 0x5A, 0x0E, 0xAE, 0xA7, 0x5C, 0xB8, 0x1D, 0x13, 0x6B, 0xF0, 0x78, 0x3C, 0xED, 0x77, 0x8F, 0x14, 0xC1, 0x19, 0x76, 0xD9, 0x22, 0xC8, 0xBA, 0x63, 0x1E, 0x5A, 0x45, 0x26, 0x9E, 0xD7, 0xD0, 0x73, 0x96, 0x00, 0xBD, 0x00, 0x93, 0x09, 0xCD, 0xA5, 0xB8, 0x71, 0x40, 0x0D, 0x08, 0xBD, 0x51, 0x8B, 0x7F, 0x8A, 0x3F, 0x73, 0x45, 0x0D, 0xCA, 0x48, 0xB7, 0x6C, 0x77, 0x14, 0xC5, 0xA3, 0x9F, 0x05, 0xFF, 0x83, 0xF8, 0x69, 0x07, 0xA3, 0x37, 0x6A, 0x67, 0xF9, 0x7E, 0x35, 0x2C, 0xD7, 0x7C, 0xCA, 0xD3, 0x20, 0xC0, 0x68, 0xE6, 0xFA, 0xFD, 0xFE, 0xF6, 0x36, 0xD3, 0xAB, 0xA7, 0xDE, 0x45, 0xBB, 0x1F, 0x91, 0x59, 0x3F, 0x55, 0x02, 0xC8, 0x80, 0xB3, 0x66, 0x49, 0xA4, 0x2D, 0xC4, 0x34, 0xB8, 0x3B, 0xB2, 0x1C, 0x2B, 0xB9, 0x21, 0x8D, 0x03, 0xB0, 0x37, 0xA8, 0x51, 0x80, 0xF1, 0x8D, 0x5A, 0x7E, 0x42, 0x52, 0xCB, 0x68, 0xB3, 0x34, 0xFB, 0x5C, 0x5C, 0xA3, 0x30, 0xAC, 0xB7, 0xCA, 0x7B, 0x50, 0x4C, 0x76, 0xCE, 0x33, 0x90, 0x39, 0xE5, 0xCE, 0x76, 0xEF, 0xC9, 0x65, 0x87, 0xA7, 0x35, 0x98, 0x2F, 0xE3, 0x2E, 0xCF, 0x85, 0x00, 0xC2, 0x47, 0x3F, 0xD5, 0xDF, 0x2C, 0xC0, 0x5A, 0x33, 0xC3, 0xE9, 0xAF, 0xEC, 0xAB, 0xAF, 0x56, 0x2E, 0x57, 0x69, 0x6F, 0x73, 0x20, 0xCF, 0xC9, 0x5E, 0xA2, 0x0A, 0x44, 0x01, 0xDE, 0x88, 0xD3, 0x10, 0x20, 0x57, 0xDF, 0x0F, 0xEB, 0xAA, 0xA8, 0xAC, 0xE6, 0x1A, 0x56, 0x80, 0x12, 0x60, 0x07, 0x5C, 0x3A, 0x68, 0xD5, 0x63, 0xB3, 0xA3, 0xDD, 0x4E, 0x7C, 0x58, 0x6B, 0x96, 0xE0, 0x80, 0x4B, 0xC4, 0xDD, 0xA1, 0x13, 0x48, 0xFF, 0xCB, 0x18, 0xED, 0xB0, 0x53, 0x91, 0xFC, 0x90, 0xBE, 0x4A, 0x96, 0x33, 0xC9, 0x0F, 0x60, 0x3B, 0x03, 0x74, 0x58, 0xF6, 0x75, 0x3E, 0xBF, 0xA5, 0x62, 0xF3, 0xCE, 0x27, 0x32, 0xC7, 0xBC, 0x93, 0x5C, 0x3D, 0x32, 0xC0, 0x01, 0x1C, 0x07, 0xA8, 0xC1, 0x67, 0x4D, 0x05, 0xD2, 0x86, 0x03, 0x22, 0x80, 0x35, 0x92, 0x3B, 0xE6, 0x2F, 0x92, 0x8D, 0x03, 0x44, 0x00, 0x9E, 0x40, 0x74, 0xEC, 0xA8, 0x83, 0xC6, 0xE7, 0xAB, 0x1A, 0x3B, 0xF1, 0xFF, 0x35, 0x59, 0x8E, 0x28, 0x34, 0x19, 0x53, 0x75, 0xAB, 0x68, 0x5F, 0xB6, 0x63, 0x5A, 0x53, 0x6B, 0xEE, 0x57, 0x01, 0x2F, 0xB7, 0x26, 0x6F, 0x1C, 0x40, 0xBD, 0x71, 0x1A, 0x63, 0x58, 0xAA, 0xBC, 0x77, 0x9D, 0x9C, 0x67, 0xEF, 0x3E, 0x57, 0x45, 0xAE, 0xDE, 0xDF, 0x43, 0xB3, 0x8B, 0x91, 0x80, 0x63, 0x0D, 0xDA, 0xD2, 0xE3, 0x99, 0x0E, 0x3B, 0xA7, 0x11, 0x00, 0x2D, 0x1B, 0x19, 0x8D, 0x46, 0x35, 0x72, 0xA1, 0x00, 0x4B, 0x20, 0xEE, 0xFB, 0xB3, 0xFB, 0xA2, 0x0E, 0xF3, 0xD7, 0x58, 0x60, 0x3A, 0x4C, 0xE8, 0x30, 0x91, 0x2B, 0xDF, 0xAC, 0x42, 0x22, 0x2A, 0xBC, 0x05, 0x99, 0xA6, 0x73, 0xC2, 0x16, 0xC7, 0x93, 0xAC, 0x92, 0x91, 0x35, 0x78, 0x9D, 0xFC, 0xA3, 0x51, 0x40, 0x8D, 0x81, 0x84, 0xFE, 0x5A, 0x38, 0xF9, 0x89, 0x3A, 0xA6, 0x4F, 0x8E, 0xEA, 0x6C, 0x01, 0xD6, 0x06, 0x07, 0xE0, 0xF7, 0x37, 0xBB, 0x6B, 0x44, 0x78, 0x2E, 0x8E, 0xC3, 0x00, 0x09, 0xC0, 0x06, 0x68, 0x23, 0x18, 0xC8, 0x5A, 0x10, 0x20, 0x14, 0xF0, 0x04, 0x22, 0x7A, 0x9D, 0xDF, 0xA0, 0x31, 0x04, 0x6A, 0x54, 0xE8, 0xF3, 0x10, 0xCC, 0x2F, 0x8B, 0x76, 0x36, 0x49, 0x62, 0x34, 0x33, 0x6B, 0xB4, 0xC9, 0x3F, 0x44, 0xB8, 0x62, 0x3A, 0x3C, 0xE8, 0x2C, 0x56, 0x7A, 0x48, 0x6A, 0x6A, 0xDD, 0xD5, 0x1A, 0xBA, 0x2A, 0xE6, 0xAB, 0xA8, 0xC9, 0xFE, 0x67, 0xF7, 0x1A, 0x6F, 0x39, 0x90, 0x9D, 0xB1, 0xA8, 0x32, 0x3A, 0x22, 0x0E, 0xD0, 0xCD, 0xB8, 0xAE, 0xD7, 0x67, 0xE6, 0x74, 0x0E, 0x8A, 0xDD, 0xAC, 0x49, 0x05, 0x70, 0x43, 0x62, 0x55, 0x90, 0x15, 0x48, 0x6B, 0x78, 0x23, 0x1A, 0xD2, 0x38, 0xAB, 0x48, 0x63, 0x1D, 0x34, 0xF9, 0x27, 0x5F, 0xBA, 0x4D, 0x61, 0x77, 0xE8, 0x33, 0xE9, 0x4D, 0x24, 0x28, 0xA8, 0xA0, 0x66, 0x6C, 0x14, 0x8E, 0x22, 0x92, 0xCE, 0x93, 0x9A, 0xC9, 0xB6, 0xA0, 0xF3, 0x75, 0x1A, 0x8B, 0xF9, 0x49, 0x79, 0xBE, 0x3D, 0xD9, 0x66, 0x0B, 0xC2, 0xB9, 0x19, 0x7F, 0x9A, 0x79, 0x4C, 0x0E, 0x80, 0x62, 0xDA, 0x95, 0x38, 0x01, 0xD2, 0xA0, 0x02, 0x44, 0xD7, 0x19, 0xBF, 0xA6, 0xC8, 0x98, 0x13, 0x90, 0x75, 0x76, 0x35, 0xDD, 0x12, 0xD3, 0x86, 0x4C, 0x44, 0x4D, 0xDC, 0xD4, 0xF7, 0x79, 0x8F, 0xA7, 0xFE, 0x33, 0x41, 0x89, 0x40, 0xBE, 0x36, 0xA3, 0x59, 0x33, 0xCE, 0x13, 0x48, 0xEF, 0x51, 0xE1, 0x54, 0x4C, 0x84, 0xBD, 0x88, 0x65, 0x2A, 0x61, 0xC0, 0x51, 0xC9, 0xB3, 0x5F, 0xE7, 0xDB, 0x86, 0x29, 0xA0, 0xD9, 0x18, 0x8F, 0xA9, 0xBC, 0x57, 0xEB, 0xAB, 0xF3, 0xE6, 0x34, 0x87, 0x4C, 0x05, 0xAE, 0xC2, 0xCD, 0x56, 0xEA, 0x5C, 0xA5, 0x11, 0x40, 0x9E, 0xE9, 0x56, 0x41, 0x0A, 0x30, 0x37, 0x62, 0x06, 0xCF, 0x78, 0x86, 0xA4, 0xBC, 0xA1, 0x6B, 0x9C, 0x7D, 0xC3, 0x13, 0x88, 0x7C, 0x46, 0x95, 0x1D, 0x35, 0x38, 0x77, 0x23, 0xDB, 0x68, 0xB0, 0x23, 0x7D, 0x51, 0xFB, 0x42, 0x11, 0x28, 0xAF, 0x09, 0x21, 0x1F, 0x9D, 0x85, 0x5F, 0x36, 0x6C, 0x3A, 0xDF, 0xFA, 0x2A, 0x1A, 0x1F, 0x03, 0x22, 0xE6, 0x6E, 0x96, 0x5B, 0xE1, 0x71, 0xC1, 0x40, 0x8C, 0xC1, 0x8B, 0xF6, 0x1A, 0x78, 0x4A, 0x96, 0xC1, 0x84, 0x5F, 0x75, 0xE0, 0x5C, 0x71, 0xC2, 0x4B, 0x00, 0x7F, 0x03, 0xA3, 0x40, 0xE6, 0x34, 0x96, 0x53, 0x03, 0xAC, 0xE1, 0x8D, 0xDC, 0x2F, 0x84, 0x8B, 0x00, 0xB8, 0x00, 0x12, 0xE0, 0x28, 0x40, 0x0E, 0x98, 0x20, 0x68, 0xEF, 0x36, 0xD0, 0xF1, 0x24, 0x8D, 0x7F, 0x81, 0x81, 0xBC, 0x80, 0xA2, 0xAD, 0x98, 0x4B, 0xBE, 0xEF, 0xE7, 0x1E, 0xC2, 0x65, 0x82, 0x9C, 0x37, 0xFF, 0x6C, 0x5E, 0x51, 0x9A, 0x76, 0x42, 0x2A, 0x80, 0x24, 0xC0, 0x0A, 0x10, 0x2F, 0x89, 0x46, 0x00, 0x6D, 0xB1, 0xF6, 0x7E, 0xC1, 0x3D, 0x15, 0x4F, 0x1B, 0x66, 0x80, 0x9F, 0x86, 0x01, 0x79, 0x76, 0xB3, 0xB9, 0x01, 0xAE, 0x73, 0x57, 0xAA, 0x98, 0xDD, 0xCC, 0x14, 0x00, 0x37, 0x24, 0x01, 0x95, 0x46, 0x02, 0x16, 0x80, 0x2B, 0x10, 0xD2, 0x28, 0xA0, 0x6E, 0xD0, 0x02, 0x43, 0x65, 0x6B, 0xA5, 0x89, 0xAC, 0xFE, 0x19, 0xD4, 0x56, 0xFD, 0x3A, 0xB1, 0x6E, 0x74, 0x86, 0xD5, 0xB2, 0x70, 0x7D, 0x41, 0x8B, 0xAD, 0xBE, 0x7D, 0x8D, 0x75, 0x1F, 0xF4, 0x5D, 0xF9, 0x94, 0x01, 0x23, 0x40, 0x6D, 0xC2, 0x04, 0xA8, 0xF3, 0x76, 0x9E, 0xB7, 0x4F, 0xB7, 0x38, 0xAC, 0x73, 0x39, 0x09, 0xC4, 0x01, 0x9E, 0x8E, 0xB9, 0xBF, 0x25, 0x1A, 0x7A, 0x00, 0x6E, 0x10, 0x4D, 0x33, 0xBF, 0xCA, 0xFE, 0x74, 0x1A, 0x4B, 0x5D, 0xCA, 0x0E, 0x68, 0xC3, 0x0A, 0xF0, 0xD3, 0x20, 0xC0, 0xBC, 0x11, 0x80, 0x1B, 0x50, 0xDC, 0x41, 0xCB, 0x6E, 0x60, 0xA7, 0x17, 0x34, 0x63, 0xD4, 0xDB, 0x0D, 0x55, 0xA0, 0x3E, 0x56, 0x7A, 0x27, 0xA7, 0x04, 0x05, 0x22, 0x9E, 0x92, 0x65, 0xA7, 0x35, 0xAD, 0x46, 0xF8, 0x2F, 0x61, 0x91, 0xCF, 0x88, 0x85, 0xB8, 0xB1, 0x8E, 0x4A, 0xA7, 0x00, 0xD1, 0x8E, 0x96, 0x5E, 0x55, 0xB3, 0x22, 0x3E, 0x42, 0x9D, 0xD6, 0xF2, 0x86, 0x00, 0x57, 0xE2, 0xA3, 0x8E, 0xD8, 0x15, 0x03, 0x2E, 0x80, 0x7A, 0x43, 0x00, 0x89, 0x09, 0x95, 0x46, 0x02, 0x16, 0x40, 0x18, 0x50, 0x36, 0x27, 0x15, 0x13, 0x35, 0xB4, 0xC1, 0xF3, 0x13, 0x33, 0x60, 0x37, 0x68, 0xD5, 0x1F, 0xA8, 0x65, 0x22, 0xF2, 0xB9, 0x54, 0x53, 0x61, 0x3C, 0x6F, 0x1C, 0xEE, 0x53, 0x74, 0x7D, 0xA8, 0xF2, 0x2F, 0xED, 0x6A, 0x72, 0x66, 0x43, 0x01, 0xEF, 0xA4, 0x1A, 0xF3, 0x1A, 0x91, 0xE5, 0x0D, 0x9D, 0xAD, 0x78, 0x69, 0xC0, 0xF4, 0x44, 0xB5, 0xD7, 0xBC, 0xA2, 0xBB, 0x09, 0x45, 0x19, 0x30, 0x03, 0x74, 0x1D, 0xB5, 0xCE, 0x85, 0xAF, 0x6B, 0x8E, 0x02, 0xF5, 0xEE, 0x5A, 0x80, 0xD0, 0xEA, 0x5A, 0x61, 0xC0, 0x03, 0x48, 0x05, 0xCA, 0xD6, 0xA2, 0xE4, 0x86, 0x36, 0x72, 0x8D, 0xD8, 0xEB, 0xA8, 0x49, 0x1F, 0x2F, 0x91, 0x02, 0x4A, 0xA6, 0xFA, 0xD6, 0x98, 0x12, 0xBC, 0x3A, 0xB2, 0x65, 0xF1, 0xC5, 0x8E, 0xC0, 0x5A, 0x21, 0x17, 0xD7, 0x85, 0x3C, 0xDF, 0x4B, 0x8D, 0x3A, 0x14, 0x1C, 0xAB, 0xE3, 0xA7, 0x00, 0xB1, 0xB9, 0x33, 0x13, 0x2D, 0x1F, 0xD0, 0xD8, 0x83, 0xB6, 0xFB, 0xEA, 0xF4, 0xFE, 0x5D, 0x09, 0x88, 0x0B, 0x01, 0xBC, 0x1A, 0x0A, 0x44, 0xF4, 0x32, 0x74, 0xC0, 0x74, 0x56, 0x38, 0xF9, 0x00, 0x92, 0x80, 0xE6, 0x92, 0xC5, 0xDB, 0x92, 0xC5, 0x67, 0x17, 0x0C, 0x74, 0xD5, 0x0D, 0x0C, 0x60, 0x5E, 0x1E, 0x02, 0xDA, 0x41, 0xA3, 0xEF, 0x88, 0x96, 0x9A, 0x43, 0xDA, 0x11, 0x0E, 0x91, 0x5F, 0x31, 0xA1, 0x79, 0xDF, 0x18, 0x67, 0x47, 0x92, 0x6F, 0xBD, 0x68, 0xAD, 0xC1, 0x48, 0xB9, 0x2A, 0x05, 0x52, 0xAB, 0xF7, 0x93, 0x1B, 0x05, 0x68, 0x36, 0xA4, 0x41, 0x80, 0xEB, 0xF4, 0xBB, 0x75, 0x5D, 0xFE, 0x43, 0x27, 0x1B, 0xDC, 0xFB, 0x3B, 0x01, 0x87, 0xC7, 0xB4, 0x54, 0xBA, 0x17, 0x85, 0x6C, 0xD0, 0x92, 0x17, 0xF0, 0xFA, 0x54, 0x40, 0xE9, 0xDC, 0x24, 0xD8, 0x00, 0xB9, 0xF0, 0x46, 0x34, 0x74, 0x42, 0x09, 0xF0, 0x9B, 0xBE, 0x85, 0x5B, 0x66, 0x10, 0xF9, 0x0B, 0x9A, 0x7C, 0x52, 0x2F, 0xFF, 0xF6, 0x36, 0x66, 0xEB, 0xB1, 0x53, 0x86, 0xFB, 0x82, 0xF7, 0x62, 0xC0, 0xFF, 0x70, 0x68, 0x7B, 0x00, 0xBC, 0xFE, 0xCC, 0x31, 0x38, 0x58, 0xFA, 0x19, 0xD0, 0x67, 0xA7, 0x51, 0x05, 0xA4, 0x03, 0x61, 0x40, 0x49, 0x6F, 0x2E, 0xF1, 0x16, 0xC5, 0x2B, 0x65, 0x74, 0x07, 0x3A, 0x9A, 0xCD, 0x15, 0x20, 0x6B, 0xAC, 0x4F, 0x72, 0x1A, 0x0E, 0x68, 0x02, 0x66, 0x80, 0x33, 0x10, 0x06, 0xE4, 0x01, 0x4A, 0xBA, 0x4D, 0xA5, 0x00, 0x96, 0x46, 0xFD, 0x6A, 0x53, 0x39, 0x80, 0x2B, 0x10, 0x02, 0xA4, 0x77, 0xCC, 0xE4, 0x05, 0x0B, 0x9E, 0x39, 0x78, 0x3A, 0x43, 0x71, 0x4E, 0x0B, 0x31, 0xD8, 0x52, 0x54, 0xB4, 0xE6, 0x08, 0xA5, 0x50, 0x95, 0x58, 0xAD, 0x9F, 0xAB, 0xA3, 0xC0, 0xF8, 0xA5, 0x7A, 0xC6, 0x6A, 0xF0, 0x6A, 0x28, 0x60, 0x09, 0x38, 0x01, 0x35, 0xCD, 0x4E, 0xF4, 0x89, 0x04, 0x2A, 0x5F, 0xA5, 0x08, 0x21, 0x3C, 0x80, 0x28, 0xA0, 0x02, 0x18, 0x03, 0xD9, 0xE1, 0xE5, 0x04, 0xCA, 0x3A, 0x76, 0x05, 0x64, 0xC7, 0x80, 0x74, 0x06, 0x46, 0x0D, 0xF0, 0x46, 0x12, 0x50, 0x17, 0x79, 0xBE, 0x93, 0xC4, 0x09, 0x80, 0x0F, 0x20, 0x0C, 0xA8, 0x01, 0x2E, 0x1D, 0x34, 0xBD, 0x41, 0xC3, 0xCC, 0x54, 0x2B, 0xE4, 0x1F, 0x89, 0x31, 0x0C, 0xC3, 0x0A, 0x23, 0x85, 0x9D, 0x3B, 0x95, 0x20, 0x28, 0x10, 0x85, 0x0C, 0xF1, 0x90, 0xFA, 0x76, 0x88, 0x7C, 0xD5, 0xA4, 0x02, 0x3C, 0x1B, 0x0E, 0xA8, 0xAC, 0xF3, 0xDA, 0x52, 0x6F, 0x7B, 0xDD, 0x14, 0xF4, 0x6C, 0x65, 0x39, 0x09, 0xD0, 0x69, 0x70, 0xA3, 0x00, 0x8E, 0xE9, 0xED, 0xC1, 0xEF, 0x25, 0x5C, 0x53, 0x15, 0xAF, 0x0C, 0x64, 0xAE, 0xC3, 0x46, 0x2C, 0xC3, 0x18, 0x07, 0xDC, 0x80, 0x38, 0x8D, 0xFC, 0xD1, 0x53, 0x74, 0x1C, 0xE0, 0x1B, 0x35, 0xFB, 0x7A, 0x3E, 0xBF, 0x58, 0xE8, 0xE9, 0xB6, 0xFF, 0x6F, 0x47, 0x44, 0xC9, 0x58, 0x2A, 0xF0, 0x77, 0x27, 0xFB, 0xC0, 0xA1, 0x48, 0x96, 0x91, 0x8D, 0x46, 0x59, 0x70, 0x0C, 0x93, 0x22, 0x5A, 0x25, 0x60, 0x6B, 0xAC, 0x39, 0xA7, 0xC4, 0xC0, 0x59, 0xF2, 0xB3, 0x92, 0xBF, 0x1C, 0x65, 0xBC, 0x76, 0x73, 0xA6, 0x65, 0x36, 0x6D, 0x80, 0x09, 0xC0, 0xCB, 0xE5, 0xF5, 0xC9, 0xA3, 0x62, 0xB5, 0xB4, 0xB0, 0xFF, 0xB2, 0xBA, 0x5A, 0x6F, 0x5F, 0x4E, 0x40, 0x6D, 0x61, 0x89, 0xBF, 0xC5, 0x01, 0x6D, 0x84, 0x76, 0xD4, 0x1C, 0x76, 0x64, 0x0A, 0xBD, 0x9A, 0x55, 0x8C, 0x94, 0x1A, 0xFB, 0x17, 0xAE, 0xEB, 0xDB, 0x17, 0x26, 0x2D, 0x2E, 0x60, 0x9A, 0x0D, 0xB3, 0x2F, 0x6A, 0x0A, 0x54, 0xAE, 0x3B, 0x7B, 0x36, 0xCE, 0xF2, 0x86, 0x94, 0x06, 0xFD, 0x9A, 0x20, 0xE2, 0x53, 0x51, 0x49, 0x02, 0xF0, 0x85, 0x36, 0xBC, 0x91, 0xB3, 0x47, 0xE8, 0x4C, 0xCF, 0x84, 0x37, 0x7E, 0xFD, 0xF5, 0x01, 0x1D, 0x5A, 0x2E, 0x09, 0x02, 0x68, 0xAC, 0x09, 0xF6, 0xDC, 0x48, 0x20, 0xB7, 0xED, 0x91, 0x4F, 0xDB, 0x23, 0xB6, 0x0E, 0x5A, 0xF4, 0x40, 0x87, 0x84, 0x40, 0x2D, 0xA7, 0xA4, 0xE3, 0x70, 0x57, 0x3C, 0x0A, 0x89, 0x8E, 0xE8, 0x69, 0x35, 0x99, 0xB1, 0x92, 0xB7, 0xEB, 0xF5, 0x79, 0x96, 0x02, 0x2F, 0x56, 0xEC, 0xB4, 0x56, 0xBF, 0x6C, 0x43, 0x0E, 0x90, 0x75, 0x25, 0xEF, 0x73, 0xA6, 0x40, 0x25, 0x10, 0x0C, 0x98, 0x02, 0xEA, 0x80, 0xC4, 0x9E, 0x35, 0xFD, 0x94, 0xDD, 0xB7, 0xF0, 0x32, 0x73, 0xB8, 0x5E, 0x40, 0xAD, 0x57, 0x32, 0x37, 0x8C, 0x01, 0x8F, 0x46, 0x2E, 0xF8, 0x44, 0x74, 0x94, 0x8F, 0x74, 0xD0, 0xB2, 0x47, 0xB9, 0xA3, 0xAB, 0x4C, 0x55, 0x46, 0x1E, 0x52, 0x12, 0xFD, 0xB2, 0xBD, 0xE0, 0xDC, 0x22, 0x3B, 0x79, 0x7B, 0x83, 0xB5, 0x27, 0xB4, 0x9F, 0xD9, 0x1D, 0x91, 0xBA, 0x66, 0x3C, 0xED, 0xC2, 0x94, 0x35, 0x86, 0x43, 0xA9, 0xBC, 0x91, 0x23, 0xA4, 0xB3, 0xB5, 0xC9, 0x72, 0x3E, 0x89, 0x44, 0xC0, 0x59, 0x56, 0xE0, 0x3C, 0x04, 0xF0, 0x74, 0x5E, 0x71, 0xD9, 0x5F, 0xCB, 0x0E, 0x10, 0x32, 0xCF, 0xFD, 0x72, 0x00, 0x33, 0x20, 0x79, 0x5A, 0xE9, 0x1C, 0x5A, 0xE8, 0xEF, 0xAC, 0xEA, 0x4F, 0x0D, 0xC9, 0x0E, 0x5A, 0x21, 0x5B, 0xEF, 0x81, 0x57, 0x65, 0xCF, 0x2B, 0x33, 0xA3, 0xAF, 0x4C, 0x40, 0x19, 0x2D, 0x72, 0xAB, 0x0F, 0x96, 0xDD, 0x9C, 0x8E, 0x8A, 0x54, 0xF2, 0xEE, 0xF8, 0xE1, 0x21, 0xAE, 0xCA, 0xE7, 0x3F, 0x54, 0x7C, 0xCF, 0x5D, 0x35, 0xF2, 0x89, 0x6E, 0x80, 0x16, 0xE0, 0x6F, 0x39, 0xDC, 0xF3, 0x37, 0xFD, 0x5D, 0x3B, 0xD1, 0xAB, 0x0C, 0xEC, 0x4F, 0x17, 0x7D, 0x2E, 0x3D, 0x01, 0xE4, 0x35, 0xEB, 0x69, 0xF9, 0x85, 0xDF, 0xB9, 0xFD, 0x31, 0x5F, 0xAA, 0xE4, 0x80, 0x08, 0x60, 0x0C, 0x78, 0x01, 0xE1, 0x40, 0x9E, 0x25, 0x85, 0x3C, 0x53, 0x11, 0x79, 0x18, 0xB8, 0xC9, 0x21, 0xFD, 0x6B, 0x32, 0x6E, 0xF3, 0x78, 0x83, 0x61, 0xF7, 0xF7, 0x78, 0x12, 0x53, 0x0F, 0xA8, 0x33, 0x3C, 0xE3, 0xC8, 0x4A, 0x32, 0x77, 0xC3, 0x2C, 0xEF, 0x2B, 0xFB, 0xB1, 0xD5, 0xC6, 0xB8, 0x8C, 0xFA, 0xF2, 0x00, 0xB6, 0x12, 0x82, 0xDB, 0x23, 0x3B, 0xEF, 0x83, 0x25, 0xCB, 0x8A, 0x30, 0x96, 0x3A, 0x3D, 0x15, 0xA8, 0x25, 0x67, 0xE7, 0xEC, 0x60, 0xDB, 0x53, 0xE5, 0x21, 0xE6, 0x7C, 0x55, 0x43, 0x40, 0x29, 0xE2, 0x4A, 0x01, 0x88, 0x01, 0xC6, 0x80, 0xE7, 0xD2, 0x58, 0x49, 0xA3, 0xE6, 0x3D, 0x81, 0x18, 0x60, 0x02, 0x44, 0x3A, 0x68, 0xEF, 0xAE, 0x0E, 0xFF, 0xA1, 0xA8, 0xAF, 0x85, 0x25, 0x08, 0x63, 0xCB, 0xBC, 0xB8, 0x4B, 0x40, 0x5D, 0x90, 0x52, 0xFE, 0xCE, 0x62, 0x1A, 0x31, 0x2A, 0xC5, 0x26, 0xFB, 0xD0, 0x21, 0x6F, 0xFE, 0xE6, 0xF4, 0xCB, 0xE1, 0x00, 0x8E, 0xAD, 0x4B, 0xA8, 0x00, 0xD7, 0xBE, 0xE4, 0x89, 0x0C, 0x7C, 0x4E, 0xD2, 0xF5, 0x68, 0x14, 0x10, 0x04, 0x64, 0xE3, 0xCD, 0xB0, 0x7D, 0x59, 0x9E, 0x27, 0xBD, 0x43, 0xD4, 0xDE, 0xB3, 0xD4, 0xE1, 0x3A, 0x0D, 0x59, 0x17, 0xA9, 0x64, 0xA0, 0xAA, 0xAF, 0x4E, 0x09, 0x90, 0x03, 0x6C, 0x6B, 0x6E, 0x76, 0x00, 0xD6, 0x08, 0xEE, 0xA8, 0x31, 0xCE, 0xC3, 0xC9, 0xFF, 0xE4, 0xD3, 0xFB, 0xD8, 0xBF, 0xF8, 0xB2, 0x58, 0x8E, 0x32, 0x5E, 0x64, 0xEF, 0x9A, 0xD9, 0x77, 0xF6, 0x80, 0xBA, 0xC9, 0xED, 0xD7, 0xEB, 0x93, 0xEF, 0x56, 0x35, 0xC5, 0x40, 0xE1, 0x13, 0x96, 0xAB, 0x6A, 0x10, 0xB3, 0xCF, 0xC9, 0xCE, 0x3C, 0x17, 0x57, 0xAD, 0x8A, 0x94, 0x15, 0x20, 0x0E, 0x90, 0x4F, 0x0B, 0xCD, 0x23, 0x40, 0xCA, 0x5F, 0x77, 0xBC, 0xBC, 0x4D, 0xCD, 0xCE, 0x6C, 0x9C, 0xE5, 0xE5, 0x0F, 0xE6, 0x7B, 0xFC, 0x7F, 0x01, 0x24, 0x0D, 0x02, 0xCE, 0xBA, 0xD8, 0xF2, 0x01, 0x54, 0x3B, 0x68, 0x02, 0x29, 0x85, 0xCA, 0xE7, 0x9C, 0xC0, 0x82, 0x81, 0xD9, 0x64, 0x8E, 0xC6, 0x9F, 0xF0, 0x36, 0xA1, 0xB5, 0x76, 0x9B, 0x0C, 0xDC, 0x1A, 0x4B, 0x67, 0x9B, 0x94, 0xAF, 0x3C, 0x64, 0x74, 0xD0, 0x32, 0xD6, 0x68, 0x1D, 0x06, 0xC4, 0x96, 0x73, 0x70, 0x23, 0xEB, 0xEF, 0xA5, 0xE8, 0xEF, 0xC0, 0x25, 0x0A, 0xDC, 0x4F, 0x9E, 0x0D, 0x6E, 0x04, 0x10, 0x04, 0xBC, 0xF0, 0x9E, 0xFC, 0xEB, 0x13, 0x90, 0xD7, 0x31, 0xC6, 0x07, 0xC8, 0x8E, 0x08, 0x33, 0xA0, 0x0A, 0xB8, 0xCD, 0x1D, 0xF2, 0xDE, 0xE3, 0x8E, 0x34, 0x0A, 0x20, 0x5D, 0x17, 0x7F, 0x01, 0xEC, 0x6E, 0x6A, 0x7D, 0x29, 0xE8, 0x1C, 0xF7, 0x91, 0xFC, 0xBA, 0x8D, 0xCB, 0x04, 0x0D, 0x79, 0x8C, 0xDE, 0x4F, 0x51, 0x46, 0xA2, 0x5C, 0xDB, 0xD4, 0x85, 0x7C, 0x56, 0xA4, 0x4E, 0xB3, 0x7C, 0x29, 0x3A, 0x82, 0xD7, 0xD8, 0xB2, 0x86, 0x35, 0xA4, 0x00, 0x6E, 0x88, 0x02, 0x75, 0xA6, 0x99, 0xB7, 0x5F, 0x5D, 0xCA, 0x59, 0xE3, 0x89, 0x62, 0x26, 0xB9, 0x29, 0x80, 0x6B, 0xAD, 0x13, 0xF3, 0xA1, 0xA5, 0x97, 0x81, 0xD4, 0xD5, 0xAE, 0x6E, 0x09, 0xA4, 0xCC, 0x8E, 0x50, 0x2A, 0x80, 0x1B, 0x92, 0x80, 0x06, 0x60, 0xBE, 0xB2, 0xA1, 0x8D, 0xBA, 0x4B, 0xED, 0x6F, 0x72, 0xC8, 0x77, 0x1B, 0x90, 0x0F, 0x5E, 0x78, 0x8D, 0x7A, 0x68, 0x9F, 0x55, 0xA4, 0x6B, 0xA0, 0x86, 0x76, 0x0C, 0x1F, 0x39, 0x35, 0x70, 0x1C, 0x3A, 0x42, 0xEF, 0x1E, 0x35, 0xD3, 0xB6, 0xC2, 0xAB, 0xEB, 0x29, 0x01, 0x5E, 0xCD, 0x89, 0x1C, 0xB3, 0x73, 0x2C, 0x0F, 0x10, 0x06, 0x88, 0x02, 0xDC, 0x10, 0x07, 0x34, 0x81, 0xD7, 0x48, 0xFD, 0x1A, 0x8B, 0x69, 0xCE, 0xB5, 0xBF, 0x8E, 0x8F, 0xD6, 0x17, 0x56, 0x2A, 0xC0, 0x1C, 0xC8, 0xF6, 0xAE, 0x3B, 0x0E, 0x50, 0x83, 0x0D, 0x10, 0x5D, 0x86, 0x76, 0x09, 0xB8, 0x01, 0xC9, 0x1D, 0x34, 0x7F, 0x41, 0xCB, 0xFF, 0x50, 0xFF, 0xAC, 0x87, 0x14, 0x2F, 0xCE, 0xF8, 0xEE, 0x9F, 0x04, 0x0F, 0xB8, 0x82, 0xF5, 0x90, 0x5A, 0xCE, 0x8E, 0x59, 0xD9, 0xCD, 0x2B, 0xB5, 0x0C, 0xAD, 0x5C, 0x00, 0x3B, 0x4B, 0xAB, 0x9C, 0xB3, 0x63, 0x36, 0x65, 0x9E, 0x8B, 0xED, 0x76, 0x2B, 0x5F, 0xF0, 0xAC, 0x68, 0xB9, 0x02, 0x31, 0xA6, 0x87, 0xCA, 0xEB, 0x48, 0x7E, 0x23, 0x06, 0xEE, 0x56, 0xA7, 0xCF, 0x2F, 0x77, 0x4A, 0x23, 0x29, 0x00, 0x2D, 0x20, 0x04, 0xA8, 0xBD, 0xF0, 0x18, 0xE0, 0x86, 0x08, 0xA0, 0x0D, 0x6B, 0x78, 0x75, 0xD4, 0xE2, 0x45, 0xCD, 0x71, 0x2E, 0x19, 0xE2, 0xA1, 0x13, 0x81, 0xB2, 0x58, 0x6B, 0x88, 0xD8, 0x18, 0xBF, 0x6C, 0x50, 0x97, 0xA4, 0xB6, 0x1F, 0xCC, 0xF9, 0xFF, 0xD0, 0xF2, 0xB3, 0x8D, 0x00, 0xBC, 0xD1, 0xB1, 0x60, 0x9D, 0x3A, 0x8F, 0xFC, 0x25, 0xAE, 0x0F, 0x05, 0x92, 0x1B, 0xF5, 0x57, 0x9D, 0xB1, 0xD7, 0xE5, 0xFF, 0xCA, 0x32, 0xEF, 0xB8, 0xAB, 0xF3, 0x1E, 0x19, 0xBA, 0x06, 0x0B, 0xE9, 0x1A, 0x02, 0x94, 0xAB, 0x43, 0x8A, 0x7F, 0x75, 0x48, 0x1D, 0xA0, 0xA8, 0xA3, 0xF6, 0xD7, 0x67, 0xFC, 0xE5, 0x9E, 0x63, 0x5C, 0xA5, 0x0A, 0x2E, 0x3A, 0x71, 0xC2, 0xD1, 0x76, 0x44, 0x6D, 0x50, 0xA8, 0xBD, 0xC6, 0x7E, 0x16, 0xDA, 0x8F, 0x02, 0xD1, 0xC8, 0x00, 0x62, 0x75, 0x6C, 0x4B, 0x02, 0xEC, 0x8D, 0x04, 0xC2, 0xFE, 0x44, 0xE0, 0xFA, 0x84, 0x75, 0xC4, 0x3F, 0x06, 0x4B, 0xA6, 0xCD, 0x6F, 0x91, 0x0F, 0xFE, 0xE7, 0x83, 0x5C, 0x7F, 0x69, 0x6A, 0x7B, 0x66, 0x98, 0xEC, 0x40, 0xE8, 0x52, 0xC7, 0x2B, 0xA0, 0x0C, 0xD8, 0x45, 0x01, 0x6E, 0x40, 0x30, 0x90, 0x32, 0x95, 0xCF, 0xE7, 0x06, 0xAD, 0x50, 0x61, 0x0C, 0x43, 0x3A, 0xAD, 0xF2, 0xAB, 0x49, 0x59, 0xAB, 0x4B, 0x8B, 0x90, 0xB7, 0x55, 0x67, 0x6C, 0xB7, 0xE9, 0x28, 0xA0, 0x10, 0x4F, 0xB3, 0x7D, 0x5A, 0xE2, 0xA1, 0x2B, 0x6F, 0xAF, 0x35, 0xD1, 0x4F, 0x1A, 0x27, 0x3A, 0x30, 0x04, 0x58, 0x35, 0x56, 0xE5, 0xEF, 0x4E, 0xB8, 0xCB, 0x37, 0x2A, 0x71, 0xED, 0x71, 0xDC, 0xC8, 0x35, 0x9E, 0xC6, 0xA7, 0x6B, 0x42, 0xE4, 0xF9, 0x9B, 0x87, 0x2F, 0xEF, 0x51, 0xE4, 0x86, 0x3B, 0x90, 0xD1, 0x01, 0x3D, 0x00, 0xC7, 0x7A, 0x07, 0x48, 0xA3, 0x00, 0x93, 0x46, 0x02, 0xAE, 0xC0, 0x4D, 0x45, 0xDA, 0x19, 0x1D, 0xED, 0xE6, 0x39, 0x87, 0x19, 0xB7, 0x21, 0x75, 0x42, 0x0E, 0x13, 0x87, 0xDA, 0xE5, 0x4A, 0x7C, 0x5A, 0xF7, 0xF1, 0x7E, 0x81, 0x56, 0xAE, 0x17, 0xA8, 0xCF, 0x4F, 0x3F, 0x97, 0x9A, 0x8C, 0xEF, 0x44, 0xAA, 0x6D, 0x5E, 0xC9, 0x0D, 0xA0, 0x04, 0x4E, 0xAD, 0x57, 0xC2, 0x88, 0x6F, 0xFC, 0xBD, 0x39, 0xE3, 0x4F, 0x17, 0x5F, 0x58, 0x16, 0x8C, 0x9B, 0xCB, 0xBC, 0x59, 0xF5, 0x25, 0x8A, 0x1D, 0xB0, 0x03, 0x38, 0xFF, 0x6A, 0x2B, 0xCB, 0x4E, 0x65, 0x32, 0xC0, 0x0A, 0x48, 0x76, 0xD4, 0x68, 0xB6, 0xE4, 0x9D, 0xFA, 0x84, 0x30, 0xD9, 0x26, 0xAE, 0x42, 0x89, 0xC7, 0x9A, 0x71, 0x56, 0x93, 0xE2, 0x76, 0x77, 0x8C, 0x29, 0xEE, 0x8B, 0xA5, 0x1E, 0xD2, 0x9A, 0x32, 0xF7, 0x28, 0xC0, 0x03, 0x50, 0x06, 0x28, 0xD7, 0xD8, 0xDB, 0xFE, 0x16, 0xBB, 0x8B, 0x6B, 0x39, 0x89, 0x56, 0x00, 0x21, 0x80, 0xE7, 0xB2, 0x17, 0xED, 0x93, 0x9B, 0xCC, 0xD1, 0x06, 0xF2, 0x4E, 0xA1, 0xDC, 0x87, 0x7C, 0xCD, 0xD9, 0x99, 0xC7, 0x0E, 0x58, 0x01, 0xE9, 0xFD, 0x02, 0x35, 0x80, 0x62, 0xBD, 0x40, 0x03, 0xD0, 0x58, 0x2F, 0xD0, 0x98, 0x2F, 0x50, 0xE3, 0xF1, 0x02, 0x35, 0x8A, 0x31, 0x97, 0x57, 0xD4, 0xA1, 0x75, 0x8A, 0xC4, 0xAC, 0xC8, 0x3B, 0x81, 0x4B, 0x68, 0x68, 0x39, 0x4C, 0xF7, 0x52, 0x2B, 0x9D, 0xCA, 0x51, 0xAF, 0x1F, 0x9E, 0x30, 0xA4, 0x6B, 0x04, 0xD7, 0x32, 0x73, 0x4D, 0x9F, 0x4F, 0xAD, 0xCA, 0x1C, 0x64, 0x5D, 0x36, 0x95, 0xF7, 0xD4, 0xB0, 0x5E, 0x86, 0x52, 0x4F, 0x76, 0x34, 0x2F, 0xFF, 0x39, 0xDA, 0x1A, 0x91, 0x07, 0x1E, 0xDD, 0x28, 0xC9, 0xBD, 0x1A, 0x05, 0x20, 0x03, 0x58, 0x01, 0x71, 0x40, 0x0D, 0xB0, 0x02, 0x3C, 0x80, 0xB4, 0x8E, 0x9A, 0xBC, 0xA8, 0x65, 0x42, 0x40, 0x1A, 0x89, 0xA2, 0x9D, 0x7D, 0x3B, 0xBA, 0xB6, 0xB5, 0x8F, 0x63, 0xCC, 0x42, 0x26, 0x9A, 0x54, 0xB3, 0xE6, 0x60, 0x07, 0xDB, 0x46, 0x00, 0xF7, 0xED, 0xE6, 0x73, 0xC5, 0x1D, 0x9D, 0xED, 0xC3, 0xCF, 0x50, 0x52, 0x81, 0x38, 0x8D, 0xEA, 0x50, 0x34, 0x4C, 0x00, 0xDE, 0x3A, 0xF1, 0xFB, 0xC9, 0x66, 0x78, 0x45, 0xEE, 0x04, 0x92, 0x61, 0x6C, 0xAD, 0xEF, 0xB2, 0xD8, 0xCF, 0xE7, 0x43, 0xDD, 0x04, 0x88, 0x00, 0x79, 0x6B, 0x37, 0x01, 0x30, 0x03, 0xA2, 0x80, 0x1A, 0x60, 0x09, 0x84, 0xCE, 0xC2, 0xC3, 0xF1, 0x0E, 0x9A, 0xFE, 0x93, 0x7E, 0x30, 0x3B, 0x76, 0x63, 0x57, 0x4B, 0x33, 0xBC, 0x99, 0x0F, 0xB7, 0x39, 0x98, 0xA2, 0xC0, 0x99, 0xCB, 0x72, 0xE2, 0x06, 0x8D, 0x68, 0xB6, 0xF5, 0xD7, 0x59, 0x23, 0xDA, 0xB3, 0x61, 0xF3, 0x13, 0x37, 0xDE, 0xF0, 0x79, 0x1D, 0xC5, 0x62, 0x28, 0xDA, 0x71, 0x7D, 0x16, 0x60, 0xDE, 0x66, 0xFC, 0x59, 0x53, 0x95, 0x01, 0x37, 0xD7, 0x51, 0x02, 0x84, 0x03, 0x7E, 0x00, 0xA3, 0x06, 0x2F, 0x14, 0x10, 0xB9, 0x8C, 0xE3, 0xAB, 0x91, 0x0D, 0xD9, 0x76, 0x3A, 0x8D, 0x00, 0xF4, 0xAE, 0x34, 0xDB, 0xCE, 0xD4, 0x43, 0xA8, 0x66, 0x42, 0x3D, 0xC3, 0x85, 0x70, 0xE2, 0xB9, 0x32, 0x50, 0x3D, 0xB3, 0x54, 0x60, 0xCD, 0xF4, 0xED, 0xAD, 0x69, 0x80, 0x6F, 0xB1, 0xD5, 0x01, 0x44, 0x1B, 0xB9, 0x84, 0xA4, 0xF9, 0x12, 0xB1, 0x4F, 0xFB, 0x82, 0xF4, 0xCA, 0x72, 0xFE, 0x8E, 0x5C, 0x89, 0x22, 0x9A, 0x56, 0x6C, 0x7C, 0x56, 0x51, 0xFD, 0xA2, 0x00, 0x6B, 0xB8, 0x03, 0xD1, 0xC8, 0xBA, 0x4F, 0xF2, 0xAA, 0xA6, 0x1B, 0xC0, 0xD4, 0x28, 0x40, 0x4F, 0xC3, 0x01, 0xD7, 0x8E, 0x1A, 0x14, 0x1B, 0x75, 0xF2, 0xFF, 0x2E, 0x35, 0x69, 0xED, 0x42, 0x38, 0x77, 0x0A, 0xCA, 0xD1, 0x96, 0x2F, 0x3E, 0x4D, 0xD0, 0x79, 0x6B, 0xAE, 0x02, 0xC8, 0xD5, 0x93, 0x5E, 0xD9, 0xE0, 0xD5, 0x5B, 0x97, 0x40, 0x0C, 0xD5, 0xF7, 0xCB, 0x67, 0xF8, 0xEB, 0x01, 0xE3, 0x02, 0x52, 0xE6, 0xEE, 0x72, 0xED, 0xE1, 0xAC, 0x21, 0x0A, 0x70, 0x34, 0xB2, 0x61, 0x0D, 0x07, 0x44, 0x1B, 0x05, 0x18, 0x03, 0xD1, 0x28, 0x7F, 0x4E, 0xE3, 0x80, 0x36, 0x6C, 0x82, 0x09, 0x10, 0x03, 0x2C, 0x3B, 0x68, 0xF1, 0x73, 0xA9, 0x41, 0x3E, 0x94, 0x84, 0x63, 0x8D, 0x79, 0xDB, 0x1B, 0x39, 0x36, 0x64, 0x3D, 0x43, 0x73, 0xE5, 0xFE, 0xD3, 0x7D, 0xC8, 0x6B, 0xD9, 0xB8, 0x28, 0x10, 0xD6, 0x18, 0x31, 0x94, 0x7B, 0x7A, 0x78, 0x6A, 0xE3, 0xE4, 0xA1, 0xE0, 0x81, 0x84, 0x79, 0xE4, 0x20, 0x98, 0x1A, 0x0A, 0xC8, 0x01, 0x8C, 0x00, 0x77, 0x20, 0x12, 0x48, 0x5F, 0x66, 0x7C, 0x06, 0x10, 0x2D, 0xB9, 0x81, 0x03, 0x5A, 0x80, 0x09, 0xE0, 0xA7, 0x11, 0x40, 0x18, 0x90, 0x09, 0x94, 0x74, 0x28, 0xA9, 0xA3, 0xF6, 0xD6, 0x18, 0xEA, 0xF5, 0x0A, 0x3F, 0x9D, 0xEF, 0x2C, 0x6B, 0x82, 0x7D, 0x0C, 0x67, 0x66, 0xC6, 0x4F, 0x15, 0xC6, 0xE5, 0x9B, 0x0C, 0x51, 0xDA, 0x19, 0x22, 0x96, 0x29, 0xBA, 0xBA, 0xA9, 0x21, 0x59, 0xDA, 0x2B, 0xB1, 0x06, 0x03, 0x4A, 0x73, 0xF4, 0xF3, 0x3D, 0x3D, 0xBC, 0x0B, 0xA1, 0x70, 0x47, 0x64, 0xBD, 0xF9, 0x98, 0x1B, 0x35, 0x7F, 0x6B, 0xCF, 0xF7, 0xE6, 0xC3, 0xAE, 0x9F, 0x40, 0xDC, 0x43, 0x04, 0x03, 0x26, 0x80, 0x3B, 0x90, 0x02, 0xD4, 0x35, 0x8B, 0x97, 0x46, 0x02, 0x2C, 0x80, 0x10, 0xA0, 0x17, 0x05, 0xF8, 0x01, 0xE2, 0x06, 0xAD, 0xFA, 0xC5, 0x65, 0xD3, 0xAF, 0x83, 0xB1, 0xD4, 0x24, 0xA4, 0x65, 0x4E, 0x85, 0x4C, 0x14, 0x25, 0x7E, 0x67, 0xA3, 0xE9, 0xB7, 0xBF, 0xE7, 0xDA, 0x67, 0x87, 0xE2, 0x28, 0x50, 0xB4, 0x86, 0x5A, 0x17, 0x50, 0xA7, 0x31, 0x2C, 0x70, 0x3A, 0xC3, 0xF3, 0x94, 0xC1, 0xEF, 0x4E, 0xED, 0xCF, 0xC5, 0x51, 0x4E, 0xA3, 0x1A, 0xDE, 0x50, 0x40, 0x1D, 0x30, 0x05, 0xFC, 0xA2, 0x80, 0x08, 0x20, 0x0D, 0x28, 0x5E, 0xEE, 0x8F, 0x09, 0x08, 0x37, 0x12, 0x50, 0x03, 0x8C, 0x1A, 0xB9, 0xD6, 0x9D, 0x02, 0x57, 0xA9, 0x76, 0x0F, 0x7A, 0xB4, 0x37, 0x35, 0xDC, 0x3F, 0x2D, 0xAB, 0xBB, 0x14, 0xAC, 0xE7, 0x50, 0x08, 0x84, 0xEF, 0x08, 0x9A, 0xC7, 0x9E, 0xEC, 0x70, 0x6A, 0x09, 0x49, 0xB7, 0xCB, 0x92, 0xAC, 0xC7, 0x93, 0xE7, 0x94, 0x4B, 0xE6, 0xBF, 0x52, 0x7B, 0x22, 0xD8, 0xB8, 0x52, 0xAF, 0xD7, 0x9A, 0xDE, 0x4F, 0x67, 0x3A, 0xC8, 0x9D, 0x33, 0x2D, 0x82, 0x9C, 0x01, 0xAB, 0x86, 0x34, 0xA8, 0xE1, 0x3F, 0xAC, 0x85, 0x92, 0xE7, 0x9B, 0x80, 0xB8, 0xA1, 0x0D, 0x69, 0x50, 0x43, 0x01, 0x6E, 0x68, 0x74, 0xD0, 0xA8, 0xAF, 0x65, 0xB0, 0x57, 0xD6, 0xCA, 0xA9, 0xBE, 0x65, 0xEA, 0x74, 0x00, 0x62, 0x67, 0x5E, 0x78, 0x00, 0x7B, 0xA5, 0xD1, 0x2E, 0xE5, 0x9D, 0x5C, 0xCD, 0x2B, 0xF7, 0x7C, 0xE1, 0x4B, 0x84, 0x7B, 0x80, 0xA0, 0x89, 0xBA, 0x65, 0x84, 0xD1, 0x8F, 0x58, 0x78, 0xDF, 0x8E, 0x5E, 0x1D, 0x27, 0x40, 0x0D, 0x10, 0x07, 0xB8, 0xF1, 0xB4, 0x9F, 0xD9, 0x7B, 0xE1, 0xBD, 0x32, 0xBE, 0xF9, 0x14, 0xF3, 0x62, 0x1E, 0x3A, 0xCB, 0x26, 0x4C, 0x80, 0x3A, 0xE0, 0xD4, 0x88, 0x46, 0x4D, 0xC4, 0x01, 0x92, 0xFA, 0x3D, 0x54, 0x1D, 0x34, 0x1E, 0xB3, 0x7D, 0x3C, 0xEB, 0xBB, 0xB4, 0x93, 0x15, 0xCC, 0x87, 0xC4, 0x5B, 0x15, 0x98, 0x1F, 0x0E, 0x33, 0xCC, 0x05, 0xD5, 0xF1, 0x78, 0xEE, 0x95, 0x46, 0x6B, 0x4F, 0x0B, 0x9E, 0x6D, 0x52, 0x76, 0x56, 0x4A, 0x31, 0x1A, 0x3E, 0xFD, 0xBC, 0x6E, 0x0D, 0x45, 0xCF, 0x33, 0x8E, 0x9E, 0x2E, 0x83, 0x42, 0x8D, 0x04, 0xD4, 0x01, 0x33, 0x20, 0xF3, 0x2F, 0xC9, 0x1A, 0xAF, 0x59, 0x9F, 0xEF, 0xA0, 0xA2, 0x86, 0x3A, 0xE0, 0x05, 0xA4, 0xF7, 0xEE, 0xA7, 0x00, 0x25, 0xC0, 0x06, 0x08, 0x01, 0xCA, 0x80, 0x1D, 0xC0, 0x1B, 0xD1, 0x48, 0xED, 0xA0, 0xC9, 0x0B, 0x1A, 0x7F, 0xD7, 0xE4, 0xD9, 0xBC, 0x42, 0x71, 0x4D, 0x02, 0xE5, 0x03, 0x4B, 0xE0, 0xF5, 0xC9, 0x36, 0xF2, 0xB7, 0xF1, 0x82, 0xA6, 0xD3, 0x3C, 0xA1, 0x78, 0x9D, 0x6B, 0xB7, 0x8B, 0x79, 0x4D, 0x2F, 0x34, 0xE1, 0x8E, 0x72, 0xDC, 0xC7, 0x73, 0xA5, 0x2A, 0xB2, 0xD6, 0xD8, 0x98, 0xF3, 0xC3, 0x4B, 0xE3, 0x55, 0x7D, 0x87, 0x58, 0x0F, 0xF1, 0xC1, 0x2F, 0x68, 0xF3, 0x45, 0x90, 0xDC, 0xB7, 0x80, 0x06, 0x2B, 0x20, 0x09, 0x68, 0x00, 0x46, 0x8D, 0x02, 0x3C, 0x81, 0x88, 0x75, 0x91, 0xBF, 0x2B, 0x4D, 0x5F, 0xD0, 0x70, 0xF7, 0x88, 0xE1, 0x78, 0x98, 0xE2, 0xAD, 0x2E, 0xB5, 0x46, 0xE2, 0xA8, 0xDA, 0x07, 0xB5, 0xDA, 0x63, 0x3F, 0x0F, 0x03, 0xB5, 0x5B, 0x89, 0xAB, 0x71, 0x00, 0xF3, 0x06, 0x35, 0x74, 0xA6, 0x61, 0x6B, 0x34, 0x44, 0x63, 0x7C, 0xE2, 0xD4, 0xA0, 0x78, 0x00, 0xD1, 0x48, 0x03, 0xCA, 0xA6, 0xEB, 0x46, 0xDE, 0xAB, 0x41, 0x07, 0x34, 0x6A, 0xD6, 0x9F, 0x22, 0x81, 0xF2, 0x39, 0x75, 0x86, 0x0B, 0x50, 0x05, 0x8C, 0x1B, 0x05, 0x78, 0x02, 0x61, 0x40, 0xDA, 0x2A, 0xC1, 0xDC, 0xA0, 0xD9, 0xA8, 0xAF, 0xD4, 0xE1, 0x61, 0x82, 0x1E, 0xDE, 0xED, 0x8B, 0x94, 0x5D, 0x94, 0x4A, 0x5C, 0xBC, 0x7D, 0xA6, 0x85, 0x8C, 0xB6, 0x10, 0x66, 0xB5, 0x42, 0x25, 0x01, 0x21, 0x80, 0x05, 0xA0, 0xDA, 0xA0, 0xBF, 0x48, 0xCA, 0xCB, 0x07, 0x51, 0x4D, 0x6F, 0xB0, 0x54, 0xC0, 0xB3, 0x61, 0x40, 0xD4, 0xCF, 0x44, 0xC7, 0xF9, 0x3B, 0xDA, 0xFB, 0x3A, 0x99, 0x7D, 0xC7, 0x4D, 0x20, 0x79, 0x7A, 0x21, 0xA8, 0x00, 0xCE, 0x40, 0x28, 0x90, 0x8D, 0x5A, 0x55, 0x04, 0x3E, 0x80, 0x08, 0xA0, 0xDE, 0x41, 0xF3, 0x0E, 0x53, 0x3F, 0xDC, 0xE9, 0x37, 0x84, 0x70, 0xA8, 0x4E, 0x82, 0x2D, 0xB2, 0x56, 0xEB, 0x4A, 0x02, 0x0B, 0x14, 0x63, 0x05, 0x4B, 0x76, 0x6F, 0x99, 0xD0, 0x5F, 0x77, 0x29, 0x45, 0x27, 0xA7, 0xAC, 0x1F, 0x90, 0xC2, 0xFE, 0x23, 0x07, 0x9F, 0xE4, 0xAA, 0xF5, 0xAA, 0x8F, 0x48, 0xF7, 0x5E, 0xED, 0x7D, 0x7C, 0xEA, 0x03, 0xDA, 0xD3, 0xE0, 0x9D, 0x77, 0x66, 0x90, 0x3F, 0x2F, 0x84, 0x7A, 0xD5, 0xE5, 0x37, 0xE6, 0xF1, 0x7A, 0x7E, 0x9C, 0x79, 0x05, 0x71, 0x5D, 0xD3, 0x71, 0x2E, 0xA4, 0x61, 0x80, 0xC6, 0xEC, 0xA8, 0xA4, 0x58, 0xCE, 0x8A, 0xAB, 0xD9, 0x57, 0x47, 0xC2, 0x40, 0x9E, 0xF7, 0xED, 0xEC, 0xF1, 0x49, 0x04, 0x66, 0x38, 0xA2, 0x7B, 0x4F, 0xCD, 0xEE, 0x42, 0x81, 0x87, 0xB5, 0x37, 0x65, 0x0F, 0x93, 0xDA, 0x29, 0x35, 0x1E, 0x47, 0xD6, 0xB7, 0x85, 0xD7, 0x53, 0x33, 0x9A, 0x03, 0xF7, 0x74, 0x9A, 0x1D, 0xD7, 0x73, 0x6F, 0xE7, 0xE3, 0xEA, 0xCD, 0xCF, 0xE4, 0xDB, 0xF3, 0x25, 0xCA, 0xA0, 0x22, 0xF9, 0x7B, 0x74, 0xED, 0x95, 0x12, 0xEC, 0xCC, 0xEB, 0xAD, 0x2C, 0x7D, 0x92, 0x1A, 0x20, 0x0C, 0x70, 0x4C, 0xC8, 0x01, 0x4C, 0x66, 0xC2, 0x89, 0x1B, 0x14, 0xFD, 0xC5, 0x86, 0xFB, 0x0C, 0xAF, 0xBF, 0x13, 0xD2, 0x0D, 0x5A, 0xBE, 0xA0, 0xD5, 0x27, 0x16, 0xFD, 0xD3, 0xE0, 0x7E, 0x8D, 0x37, 0x86, 0x7D, 0x3C, 0x05, 0x7F, 0x15, 0x61, 0xF4, 0x77, 0xFF, 0xEA, 0x2D, 0x9B, 0x3E, 0x1B, 0xF8, 0x75, 0x6D, 0x8E, 0xB6, 0x23, 0xC2, 0x27, 0xA0, 0x43, 0x98, 0xCF, 0xC8, 0x4A, 0x3B, 0x22, 0xBC, 0x46, 0xED, 0x4A, 0x07, 0x86, 0x3B, 0x14, 0xB2, 0xAA, 0x31, 0x41, 0x80, 0x32, 0x20, 0x04, 0x58, 0xE3, 0xF9, 0x37, 0x54, 0x23, 0x7F, 0x80, 0x08, 0x10, 0x5E, 0xD7, 0xBD, 0x5D, 0xD6, 0x58, 0xBD, 0xA9, 0xBC, 0xDA, 0xCA, 0xCB, 0x6E, 0xD0, 0xEA, 0x05, 0x2D, 0x3E, 0x51, 0x83, 0x8D, 0xA0, 0x85, 0x33, 0x32, 0xFA, 0xA9, 0x7D, 0x4B, 0x14, 0xCC, 0x73, 0x4C, 0xC6, 0xF9, 0x6C, 0x9F, 0xD3, 0x64, 0xCC, 0x59, 0x20, 0x7A, 0x2F, 0x3C, 0xA7, 0x3F, 0x89, 0x85, 0xBE, 0x5C, 0xC4, 0xD3, 0x8D, 0xE1, 0x69, 0x33, 0xFE, 0x93, 0xCF, 0xC7, 0x1B, 0x15, 0xB7, 0xE7, 0x46, 0x9D, 0x33, 0x33, 0x71, 0xD1, 0xA0, 0x33, 0x8D, 0x73, 0xD3, 0xA6, 0x1B, 0x2A, 0x6B, 0x83, 0x00, 0xCA, 0x09, 0xA6, 0x99, 0x72, 0x09, 0x5F, 0x99, 0x05, 0x01, 0x42, 0xD7, 0x18, 0x8A, 0x58, 0x73, 0xE4, 0xB3, 0x83, 0xF6, 0x2A, 0x77, 0x0F, 0x43, 0x8B, 0xAB, 0xE9, 0xC8, 0x96, 0x5A, 0xBB, 0xB7, 0x2A, 0xA1, 0x11, 0x34, 0x6D, 0xA8, 0x6E, 0x4D, 0xD6, 0xAC, 0xB7, 0x57, 0x7E, 0xCC, 0x75, 0xD0, 0x3A, 0x37, 0x5A, 0xF1, 0xDA, 0x2D, 0x31, 0x03, 0xE7, 0x6F, 0x70, 0x85, 0xAD, 0x71, 0xB1, 0xF2, 0x1E, 0x09, 0x3D, 0xD3, 0xD6, 0x8A, 0xB3, 0x21, 0x00, 0x69, 0xC3, 0x00, 0x6D, 0x94, 0x6E, 0xD3, 0xCE, 0x06, 0x2F, 0xAC, 0x87, 0x2E, 0x6B, 0xFA, 0x1F, 0x3D, 0x91, 0xDD, 0xD6, 0x71, 0x8E, 0xB7, 0x18, 0xAE, 0x07, 0x1D, 0x34, 0xEA, 0x68, 0xF5, 0xCE, 0xCD, 0xF4, 0xA9, 0x49, 0x5D, 0x61, 0x0C, 0x10, 0x65, 0x30, 0x88, 0x16, 0x83, 0xB6, 0x93, 0xB9, 0x25, 0x4F, 0x32, 0x5E, 0x04, 0x61, 0x6B, 0xB0, 0x83, 0xDC, 0xA0, 0x09, 0xF5, 0x41, 0x2B, 0xA7, 0x04, 0xC0, 0x14, 0xB8, 0xA5, 0xDB, 0x60, 0x40, 0x02, 0xB0, 0xBB, 0x26, 0x13, 0x90, 0x0E, 0xB6, 0xDC, 0x63, 0x45, 0x42, 0x79, 0x30, 0x06, 0x69, 0xDB, 0xEB, 0x94, 0x7F, 0xA6, 0x15, 0xB6, 0x1E, 0x2C, 0x9B, 0x61, 0xA2, 0x68, 0x48, 0xC3, 0xD6, 0xE3, 0xE9, 0x73, 0xEB, 0x4F, 0xD9, 0x9B, 0xD9, 0x7A, 0x3C, 0x0F, 0x50, 0x7C, 0x83, 0xC6, 0x7B, 0x89, 0xE1, 0x02, 0xDB, 0x83, 0xB4, 0x33, 0x08, 0x86, 0x33, 0x2D, 0x1E, 0x62, 0x21, 0xDC, 0x8D, 0xED, 0xCC, 0xA0, 0xF1, 0x78, 0x3C, 0xAF, 0x11, 0x37, 0xC9, 0xBB, 0x01, 0xE7, 0x9D, 0x5B, 0x97, 0x57, 0x04, 0xD7, 0x48, 0xC0, 0x14, 0xD0, 0x03, 0x5C, 0xDD, 0x3E, 0x5B, 0xE3, 0x95, 0x35, 0xFA, 0xAE, 0xD3, 0xE1, 0xB5, 0x7A, 0x52, 0xEE, 0x67, 0xEB, 0xA2, 0xAF, 0x71, 0xD4, 0x1A, 0x47, 0x66, 0x8D, 0x82, 0x6B, 0x3D, 0x9E, 0x36, 0x21, 0xBA, 0xF6, 0x34, 0xDE, 0xCA, 0xCD, 0x15, 0xFA, 0x9A, 0x0B, 0x2E, 0xDF, 0xE3, 0x29, 0x3B, 0x68, 0x10, 0xEF, 0xA8, 0x7F, 0xDD, 0xB3, 0x9C, 0x06, 0xE1, 0x9D, 0x6A, 0xA7, 0x47, 0x09, 0xFD, 0x08, 0xC7, 0x70, 0x98, 0x5D, 0x43, 0x05, 0x75, 0x4C, 0xE2, 0xBF, 0xD7, 0x3D, 0xB6, 0xBE, 0xAB, 0xF4, 0x75, 0x46, 0x3A, 0xED, 0x23, 0xB8, 0xDA, 0xE3, 0x93, 0x02, 0x7E, 0x00, 0x61, 0x7C, 0x67, 0xF5, 0x51, 0xC7, 0xAD, 0x97, 0x3D, 0x42, 0xF7, 0x52, 0x1E, 0x75, 0xF5, 0x41, 0xF6, 0x4E, 0x6B, 0xB0, 0x48, 0x9D, 0xD6, 0xC3, 0xEC, 0x73, 0x4F, 0xD2, 0x03, 0x70, 0x36, 0xF4, 0x7F, 0x3C, 0x9D, 0x01, 0x9C, 0xE5, 0x01, 0xE7, 0xB4, 0x8E, 0x93, 0xF7, 0x3B, 0x5F, 0xCC, 0xF4, 0x5F, 0x7E, 0x81, 0xA4, 0xBF, 0x98, 0x59, 0x15, 0x2C, 0x84, 0x5D, 0x09, 0x8F, 0x5A, 0x17, 0x09, 0x58, 0x12, 0xC7, 0x34, 0x4D, 0xCC, 0x15, 0x5F, 0xB9, 0x47, 0xD3, 0x3F, 0xF3, 0x8F, 0x9B, 0xA8, 0x61, 0xEB, 0x8B, 0x5D, 0xF6, 0x27, 0xD4, 0x3D, 0x80, 0x03, 0xA8, 0x01, 0x27, 0xF0, 0x2D, 0x49, 0x00, 0x96, 0x62, 0xF4, 0xE9, 0xCE, 0xDE, 0xFD, 0xE5, 0x69, 0xEB, 0xFE, 0xDC, 0xEE, 0xEF, 0x34, 0xE3, 0x1C, 0x5D, 0xB2, 0xA3, 0x67, 0x9B, 0x6E, 0xA2, 0x2E, 0x00, 0xB7, 0x06, 0x35, 0x04, 0xC8, 0x58, 0x5E, 0x25, 0x0E, 0x68, 0xCE, 0x2F, 0x1E, 0x9A, 0xC5, 0xEA, 0xD2, 0xA7, 0x54, 0xEA, 0x98, 0xD9, 0xBF, 0x72, 0x98, 0x78, 0x7F, 0x07, 0xA8, 0xBF, 0x7B, 0xA8, 0x7C, 0xB9, 0xCA, 0x42, 0xD5, 0xDF, 0xB5, 0x85, 0x60, 0x8A, 0x93, 0x34, 0xF2, 0x6E, 0x51, 0xDB, 0x20, 0x52, 0xC6, 0x5F, 0xF4, 0xB6, 0x82, 0xBD, 0x1B, 0x9D, 0x75, 0xF6, 0xEF, 0x6B, 0x32, 0x07, 0xA2, 0x21, 0xE7, 0xEF, 0xBF, 0x69, 0xAF, 0xB0, 0x1E, 0xBE, 0xF3, 0xE4, 0xB1, 0xE7, 0x59, 0x8B, 0x9E, 0x1A, 0x47, 0xDB, 0xCA, 0x3F, 0xCB, 0x31, 0x7D, 0x9E, 0x61, 0x21, 0x00, 0xDB, 0xDC, 0x99, 0xCC, 0x01, 0xBD, 0x90, 0x55, 0xBC, 0xB8, 0xEA, 0x11, 0x02, 0x38, 0x1A, 0x6B, 0xDC, 0x57, 0x04, 0xE0, 0x3C, 0xDF, 0xB2, 0x6C, 0x37, 0x68, 0xFE, 0x1E, 0x4E, 0xF9, 0x02, 0x24, 0xC8, 0x00, 0x88, 0x7D, 0x9F, 0xF8, 0x04, 0x2C, 0x0D, 0xCC, 0xD0, 0xCB, 0x49, 0xDE, 0xCD, 0xA3, 0xEB, 0xC0, 0xF1, 0x46, 0xD5, 0xD8, 0x6B, 0x13, 0x7B, 0xF7, 0x42, 0x5C, 0xEC, 0xAE, 0x60, 0xF3, 0x96, 0xD4, 0x3E, 0xC4, 0x9B, 0x27, 0xF3, 0x54, 0xD6, 0x0A, 0x18, 0x37, 0x46, 0x5F, 0x2C, 0x42, 0xF8, 0x6E, 0x9E, 0xF5, 0x9E, 0xFF, 0xAA, 0x8E, 0x96, 0xDD, 0x8B, 0xC0, 0x3A, 0x5F, 0x11, 0x60, 0x0D, 0xE1, 0xF5, 0x58, 0x72, 0x43, 0xD6, 0x06, 0xA5, 0x4B, 0xA8, 0x44, 0x2B, 0xE6, 0xAB, 0xFE, 0x63, 0x37, 0xA0, 0x72, 0x83, 0x16, 0x08, 0x5A, 0xAF, 0x2D, 0x7B, 0xF7, 0x01, 0xBC, 0x06, 0xA8, 0x02, 0xEF, 0x4E, 0x57, 0x18, 0x01, 0x48, 0x74, 0xD3, 0x69, 0xFD, 0xB8, 0xAE, 0x53, 0x3E, 0x81, 0xCA, 0x2B, 0xF9, 0x3C, 0x15, 0x09, 0xA6, 0x9F, 0x02, 0xFE, 0x21, 0x9F, 0xF1, 0xE2, 0xCB, 0xCD, 0x76, 0xB4, 0xE2, 0x8A, 0xA0, 0xF4, 0xAF, 0xCE, 0x86, 0x7C, 0xC4, 0x3B, 0x27, 0xE7, 0x7F, 0x73, 0xC1, 0x57, 0x1A, 0xC2, 0xF3, 0x70, 0xA0, 0xBC, 0x36, 0x7E, 0xD9, 0xE5, 0xE8, 0x06, 0x35, 0x64, 0x9E, 0x7E, 0x75, 0xB9, 0x10, 0xDB, 0xFE, 0xC3, 0x0E, 0x70, 0x1C, 0x60, 0x02, 0xDC, 0x6F, 0xD0, 0xF2, 0x05, 0x0D, 0xA5, 0x04, 0x79, 0x41, 0xD3, 0xAF, 0xC4, 0x9E, 0x3D, 0x81, 0x31, 0xA1, 0xCD, 0x26, 0xEF, 0xEE, 0xDF, 0x18, 0x56, 0xC1, 0x79, 0x57, 0xDA, 0x13, 0xEF, 0x51, 0x07, 0xCD, 0x6F, 0xB5, 0x43, 0x10, 0xAD, 0xE8, 0xA7, 0x4D, 0x3A, 0x76, 0x55, 0x80, 0xE8, 0x4C, 0xFB, 0x9D, 0xF3, 0xA7, 0xDB, 0xF4, 0x57, 0x8E, 0xD4, 0x0F, 0xDD, 0x71, 0x57, 0x4F, 0xB7, 0xC1, 0x1F, 0xF4, 0x55, 0x56, 0x75, 0xE5, 0x89, 0xB5, 0xC1, 0x0C, 0x1C, 0x5E, 0xAA, 0x2E, 0x69, 0xBC, 0x41, 0x11, 0x80, 0xD2, 0x72, 0x94, 0xB2, 0xF9, 0x45, 0x6E, 0x9C, 0x5A, 0x03, 0x23, 0xE3, 0x06, 0xAD, 0xFE, 0xA5, 0xA3, 0x58, 0x2C, 0xDF, 0x0F, 0x72, 0x5C, 0xF6, 0x83, 0xBF, 0xA0, 0x1D, 0x0C, 0x97, 0x75, 0xA7, 0xC4, 0x04, 0xC4, 0x16, 0xC4, 0xF0, 0x99, 0xC5, 0xE2, 0x26, 0xBD, 0xB1, 0x1E, 0xEC, 0xA3, 0xE8, 0x8B, 0x46, 0xE3, 0x39, 0xF5, 0x4B, 0x00, 0xBE, 0xB7, 0xEF, 0x04, 0xA8, 0x56, 0xA7, 0xB9, 0x37, 0x3A, 0xF4, 0xAF, 0xD3, 0x20, 0x9F, 0x39, 0xCE, 0x73, 0x8E, 0xB0, 0xE7, 0x24, 0x6F, 0x04, 0xD0, 0x59, 0x22, 0x72, 0x01, 0xF2, 0x00, 0x11, 0x0B, 0x35, 0x85, 0x4D, 0x5C, 0x80, 0xD1, 0x92, 0x39, 0x1D, 0x80, 0x3E, 0xC8, 0x4A, 0x2C, 0xEB, 0x7B, 0x11, 0x7C, 0x8F, 0x4E, 0x7E, 0x47, 0x84, 0xFC, 0x12, 0x43, 0xCE, 0xF2, 0xBD, 0xFF, 0x2D, 0x71, 0x36, 0xF0, 0x30, 0x98, 0xBB, 0x99, 0x40, 0x33, 0x67, 0xD9, 0x3D, 0xC0, 0x39, 0x1E, 0xCF, 0x7D, 0xB4, 0xC5, 0x97, 0x11, 0x59, 0x59, 0x59, 0xD5, 0x02, 0xDE, 0x30, 0x26, 0xEE, 0xA0, 0xC9, 0x2D, 0xDA, 0x02, 0xBE, 0xDB, 0x91, 0xD6, 0xE3, 0xC9, 0x89, 0x0B, 0x84, 0xFE, 0x4D, 0xA0, 0xB2, 0xD7, 0x6A, 0xAB, 0x05, 0x88, 0x02, 0xDE, 0x08, 0x6B, 0xD0, 0x2F, 0xBC, 0x11, 0x7B, 0x80, 0x2A, 0x10, 0x06, 0xB8, 0x03, 0xAA, 0x6B, 0xF4, 0xEF, 0x99, 0x85, 0x22, 0xB7, 0x1B, 0x34, 0xFA, 0x97, 0x9F, 0xFA, 0x22, 0x3F, 0x75, 0x82, 0xA7, 0x42, 0x46, 0x43, 0x85, 0x43, 0x93, 0x76, 0x2F, 0x9C, 0x55, 0x6F, 0x2D, 0xDA, 0x95, 0xA9, 0xC4, 0x91, 0x76, 0xF7, 0xAD, 0x00, 0x48, 0x61, 0x77, 0x44, 0xFA, 0xD9, 0xB3, 0xEB, 0xE6, 0xE9, 0x80, 0xD8, 0x7B, 0x58, 0xBB, 0xAA, 0x03, 0xB0, 0xAF, 0x22, 0x5D, 0x35, 0x6E, 0xDA, 0x6F, 0xCC, 0xA5, 0xEB, 0x1C, 0x6B, 0xF5, 0xF3, 0x15, 0xCF, 0xA8, 0x9F, 0xF3, 0x96, 0x01, 0x81, 0xA4, 0xD5, 0x52, 0x15, 0x0D, 0x6F, 0x18, 0xE0, 0x67, 0x1E, 0x39, 0xC4, 0x01, 0x8F, 0x65, 0x93, 0xBD, 0xF5, 0x71, 0x3C, 0x4D, 0xFB, 0x9C, 0x6F, 0xD0, 0xF8, 0x53, 0x20, 0x24, 0xC7, 0x9B, 0xF0, 0x06, 0x6D, 0x3E, 0xC1, 0x54, 0xA7, 0x14, 0xD1, 0xF2, 0xD6, 0x2C, 0x2B, 0x75, 0x56, 0x13, 0xD9, 0x34, 0xDE, 0x7B, 0x9A, 0xE4, 0xDF, 0x31, 0x08, 0xF5, 0x7A, 0x84, 0x49, 0x69, 0x96, 0x18, 0x8F, 0xE2, 0x93, 0x50, 0x87, 0xD0, 0x6F, 0xC5, 0x1A, 0xB8, 0x41, 0x4B, 0xE0, 0x89, 0xD0, 0xDB, 0xC5, 0x60, 0xC9, 0x03, 0x08, 0xA8, 0xDB, 0x19, 0xFA, 0xEA, 0x7F, 0xD5, 0x9F, 0x88, 0x1A, 0xD9, 0xB0, 0x46, 0x34, 0x0A, 0x60, 0x05, 0x34, 0x80, 0xE2, 0xE9, 0x6D, 0x42, 0x32, 0xBD, 0xA0, 0x3C, 0x00, 0x6D, 0xF8, 0x79, 0x5D, 0xE0, 0x1D, 0x34, 0xF9, 0x8A, 0xC3, 0x22, 0xD6, 0x02, 0x80, 0x1C, 0x43, 0x19, 0xC3, 0xE3, 0xFB, 0xDF, 0x1C, 0xBD, 0x66, 0xAF, 0x08, 0x7D, 0xB2, 0xBE, 0xFB, 0x80, 0xF4, 0x42, 0x8B, 0x8E, 0x99, 0xCA, 0xDF, 0xEA, 0xBD, 0xBF, 0x26, 0xD3, 0x4B, 0x28, 0x5A, 0x74, 0xE3, 0xEE, 0x68, 0x7A, 0xE6, 0xA7, 0xFB, 0x8A, 0x5E, 0x8B, 0xE5, 0xC0, 0xB9, 0x5A, 0x81, 0xA1, 0x78, 0xB1, 0x37, 0x00, 0xB6, 0x3E, 0x74, 0x45, 0x2A, 0x9F, 0xA1, 0x63, 0x10, 0xB0, 0x16, 0xC5, 0x90, 0x5F, 0x01, 0xD2, 0x38, 0xF3, 0x93, 0xE9, 0x9A, 0x91, 0x69, 0x4B, 0x85, 0xCF, 0x80, 0x27, 0x60, 0x02, 0x3C, 0x1B, 0xCA, 0xF7, 0x74, 0x2A, 0xB4, 0xDC, 0x91, 0xF8, 0xDB, 0x5A, 0xB4, 0x5B, 0x4A, 0xF4, 0xCE, 0x16, 0xB8, 0x45, 0x1A, 0xF5, 0x81, 0xCA, 0x90, 0x02, 0xAE, 0x44, 0x91, 0xB3, 0xD7, 0x19, 0x8D, 0x98, 0x75, 0xFD, 0xAD, 0xD5, 0x00, 0x88, 0x52, 0x1A, 0x8E, 0xF7, 0x74, 0x00, 0x33, 0xE0, 0x1C, 0x1C, 0x6D, 0xB9, 0xAF, 0x59, 0xA6, 0x00, 0x1B, 0x40, 0xD9, 0xFF, 0x5F, 0xC7, 0x5A, 0x3A, 0xF2, 0x9D, 0xB9, 0x7E, 0x27, 0xB8, 0xF0, 0x2B, 0xDF, 0x9B, 0xCA, 0x98, 0x73, 0x41, 0xB7, 0x53, 0x11, 0xC8, 0xD3, 0xE0, 0x86, 0x00, 0x6F, 0xCB, 0x05, 0xDE, 0x73, 0x7F, 0x18, 0x9F, 0x6A, 0x15, 0x22, 0xD4, 0x01, 0x56, 0x40, 0xE2, 0xE5, 0x03, 0x11, 0x33, 0xFB, 0xEA, 0xE9, 0x54, 0x18, 0x54, 0x3C, 0xD6, 0x99, 0xD0, 0x73, 0xB0, 0xA0, 0xCC, 0xB7, 0x95, 0xE1, 0xB7, 0x8C, 0xEF, 0x5D, 0x19, 0x6B, 0x72, 0xA5, 0x5E, 0x7F, 0x89, 0x3C, 0x7F, 0x2D, 0xE8, 0x09, 0x48, 0x17, 0xF5, 0xE5, 0x7B, 0x97, 0x01, 0x12, 0xF8, 0xA2, 0x7D, 0x5F, 0xEC, 0x4B, 0xA5, 0xB4, 0xE3, 0x19, 0x57, 0xAF, 0xC8, 0xE8, 0x55, 0x67, 0x6F, 0x54, 0x00, 0xD6, 0x77, 0x3D, 0x47, 0x13, 0xD1, 0x57, 0xAB, 0x42, 0xD6, 0x63, 0x59, 0xAB, 0x25, 0x70, 0x72, 0xB6, 0xB2, 0x05, 0x2D, 0xB7, 0x25, 0x9A, 0x0F, 0xB3, 0xAE, 0x09, 0xB6, 0xAE, 0x80, 0x3A, 0x40, 0x1F, 0xE2, 0x99, 0x31, 0x9C, 0x02, 0x42, 0xEE, 0x3A, 0xF3, 0xEF, 0xBC, 0x71, 0x82, 0xBF, 0x7F, 0x7D, 0x7B, 0xAA, 0x2B, 0xFC, 0x5E, 0x64, 0xE8, 0xF5, 0xAC, 0xF4, 0xFE, 0xE7, 0x93, 0xAE, 0x31, 0x10, 0x1A, 0x07, 0xB6, 0x4E, 0x59, 0xAA, 0x17, 0xEF, 0x73, 0xF5, 0xBF, 0xCB, 0xE7, 0x74, 0x0C, 0x10, 0xC2, 0x17, 0x11, 0xA7, 0xBE, 0x43, 0xE1, 0x5B, 0x9E, 0xA0, 0xB5, 0xE2, 0x2F, 0xCF, 0x41, 0xAF, 0x1A, 0x72, 0x3E, 0xF8, 0xEB, 0x79, 0x32, 0xFD, 0x6F, 0x5B, 0x67, 0x3C, 0xB1, 0x03, 0xEB, 0xDC, 0xE9, 0x45, 0x97, 0x28, 0xBC, 0x1A, 0x0C, 0xC4, 0xFD, 0xF4, 0xBA, 0x98, 0x01, 0x63, 0x20, 0x76, 0x43, 0xEE, 0x01, 0x78, 0x4D, 0xCD, 0xA7, 0x46, 0x9C, 0x1B, 0xB4, 0xF8, 0xA6, 0xBB, 0x69, 0xE9, 0x16, 0x0E, 0xC1, 0xCF, 0x55, 0xBD, 0x67, 0x67, 0xF4, 0x5B, 0x20, 0x09, 0xFB, 0x75, 0x48, 0xEF, 0xFE, 0xBB, 0xA6, 0x32, 0x5A, 0xC3, 0xBA, 0x9B, 0x01, 0x3B, 0x9A, 0xF7, 0x56, 0x96, 0x9D, 0xEF, 0x28, 0x7C, 0x2A, 0x07, 0x9C, 0x80, 0x36, 0x34, 0x78, 0xD2, 0x92, 0x94, 0x3F, 0x83, 0x89, 0xF3, 0x3A, 0xE8, 0x9E, 0x2C, 0xBB, 0x97, 0x58, 0xAC, 0x23, 0xDB, 0x7D, 0x05, 0xE6, 0xDC, 0x8B, 0xCC, 0xE6, 0x1E, 0xC6, 0xDC, 0x38, 0x0D, 0x59, 0xCA, 0x1B, 0x03, 0xCA, 0x1B, 0xEB, 0x96, 0x6F, 0x0D, 0x65, 0xC0, 0xFC, 0x29, 0x52, 0x3A, 0x68, 0xF9, 0xD9, 0xE4, 0x70, 0x32, 0xA2, 0xD5, 0xFF, 0x29, 0x42, 0xBF, 0x8B, 0xA7, 0x1C, 0x6F, 0x3B, 0x4B, 0xC1, 0xF5, 0x31, 0x9F, 0xEF, 0xC2, 0x9B, 0x14, 0x72, 0xF0, 0x73, 0x5E, 0xB6, 0xFE, 0xDD, 0xA1, 0xAF, 0xBF, 0x38, 0x23, 0x57, 0x88, 0x8D, 0xD1, 0xFB, 0x59, 0x27, 0x40, 0x6C, 0x66, 0x85, 0xD4, 0x01, 0xF2, 0xCE, 0x0A, 0x31, 0xC0, 0xD4, 0x5B, 0xA0, 0xFC, 0xED, 0x8B, 0xF4, 0x8E, 0x30, 0x34, 0xA6, 0x52, 0xCA, 0x1A, 0x60, 0x84, 0xE5, 0x3E, 0x76, 0x34, 0x6F, 0xD8, 0x01, 0x34, 0x00, 0x23, 0x20, 0xEE, 0x76, 0x45, 0x80, 0xD6, 0xF6, 0xE6, 0xB9, 0x03, 0xCA, 0x81, 0xC8, 0xD9, 0xCF, 0xAD, 0xD9, 0x31, 0xC3, 0x50, 0x54, 0xA9, 0x2D, 0x86, 0xEC, 0xCC, 0x8D, 0xB6, 0x9F, 0x49, 0x14, 0xBC, 0x2A, 0x2A, 0xF0, 0xC8, 0x8A, 0x7F, 0x0B, 0x2B, 0x10, 0xAB, 0x23, 0x80, 0xE7, 0xDF, 0x6C, 0x6C, 0x6E, 0x07, 0x24, 0x69, 0x1F, 0x1B, 0xED, 0x6D, 0x58, 0x7B, 0x03, 0x55, 0xFC, 0xEA, 0xF8, 0x62, 0x7E, 0xC0, 0x82, 0x94, 0x16, 0xD2, 0x49, 0x37, 0x33, 0x49, 0xCF, 0xF6, 0x13, 0xED, 0xAD, 0x8F, 0x00, 0x8E, 0xB7, 0x3C, 0x85, 0xFA, 0xCD, 0xA0, 0x7F, 0x8F, 0x6F, 0x8C, 0x37, 0xED, 0x68, 0xAD, 0x33, 0x06, 0x94, 0x96, 0x9B, 0xB9, 0x02, 0xB1, 0xAC, 0x75, 0x34, 0x1A, 0x04, 0xF0, 0x4D, 0xDC, 0x19, 0x10, 0x31, 0x67, 0x7D, 0x1A, 0x21, 0x64, 0xF5, 0x37, 0x2E, 0x24, 0xFA, 0x61, 0xEA, 0x9B, 0x81, 0x60, 0xF2, 0x27, 0x72, 0x25, 0x29, 0x1F, 0x9C, 0xAD, 0xFD, 0x88, 0xBE, 0xA8, 0x4A, 0xEC, 0x1E, 0x9F, 0x67, 0x15, 0x41, 0x6F, 0x5B, 0x9D, 0x76, 0x65, 0xFA, 0xE7, 0x86, 0x5A, 0xCF, 0xC7, 0xC6, 0xAF, 0xD4, 0xFD, 0x00, 0xB7, 0xB3, 0xCE, 0x15, 0xE0, 0xB5, 0xA5, 0xBC, 0xD9, 0x54, 0x39, 0x53, 0x8B, 0xD4, 0x37, 0xEF, 0x08, 0x20, 0x75, 0xA6, 0xB2, 0xB9, 0x41, 0xD9, 0x88, 0x85, 0x02, 0xA4, 0x11, 0x36, 0x3B, 0xB0, 0x4A, 0x80, 0xC8, 0x55, 0x50, 0xD1, 0x5F, 0x05, 0x95, 0xA2, 0xD1, 0x0A, 0x45, 0xFC, 0x97, 0xDF, 0xF8, 0x32, 0x69, 0x0C, 0x73, 0x77, 0x4F, 0xB8, 0x6B, 0x70, 0xE0, 0x24, 0xA8, 0x32, 0xBB, 0x55, 0x64, 0x68, 0x38, 0xF4, 0x99, 0xF8, 0x18, 0x3F, 0x0F, 0xA9, 0x29, 0x87, 0xD2, 0x9A, 0x4F, 0x10, 0xFD, 0x59, 0xE1, 0xE5, 0xB3, 0xB5, 0xE2, 0x91, 0x07, 0xB4, 0x77, 0x3B, 0xBA, 0x2E, 0x14, 0x7E, 0xFF, 0xDA, 0x0E, 0xB0, 0xBF, 0x68, 0x01, 0x0C, 0x54, 0xAD, 0x3B, 0x7A, 0x34, 0xB4, 0x21, 0x0D, 0xBF, 0x31, 0x5F, 0xC3, 0x4A, 0x6A, 0x5D, 0xD5, 0xCF, 0xCE, 0x6F, 0xCC, 0x4F, 0x4E, 0x37, 0x68, 0x8C, 0xAB, 0x7A, 0xC1, 0xBC, 0x55, 0x3C, 0x61, 0x47, 0x24, 0xF1, 0xBD, 0x05, 0x22, 0x04, 0xBE, 0xDF, 0xD1, 0xAE, 0x68, 0xEF, 0x1E, 0x23, 0x23, 0xBF, 0x11, 0x31, 0x5E, 0x9D, 0xDA, 0x0B, 0xE7, 0x59, 0x37, 0xD8, 0x1B, 0x9A, 0xE9, 0x0C, 0x8C, 0x99, 0xB8, 0x18, 0x7D, 0x08, 0x50, 0x4C, 0x29, 0x36, 0x49, 0x07, 0xFB, 0xCF, 0x5C, 0xA4, 0x9E, 0x73, 0xAD, 0x7E, 0xF0, 0xD7, 0x7E, 0x2B, 0x3A, 0x7D, 0x9E, 0x4E, 0x2D, 0x1B, 0x40, 0x9F, 0xBD, 0x68, 0xA5, 0x0B, 0x3E, 0x3B, 0x9F, 0x35, 0x01, 0xAF, 0x86, 0xCC, 0x2F, 0xB2, 0x01, 0x44, 0xF3, 0xD3, 0x7B, 0x75, 0xD6, 0xDF, 0x70, 0xCF, 0xCF, 0x47, 0x46, 0x47, 0xCE, 0xD6, 0xA8, 0x1B, 0x00, 0x4C, 0xD1, 0x6B, 0xA2, 0x81, 0x78, 0x38, 0xCD, 0x4C, 0xDA, 0x53, 0x40, 0xBE, 0x21, 0x17, 0xE3, 0xC0, 0x68, 0x6F, 0x00, 0x82, 0x35, 0x4E, 0xFC, 0xBD, 0x02, 0xFB, 0xD4, 0xFA, 0x74, 0x7B, 0x2D, 0x98, 0xA8, 0x77, 0x76, 0xAA, 0x61, 0x72, 0xE5, 0xF7, 0xDD, 0x37, 0x3A, 0xE0, 0x47, 0x8E, 0x90, 0x12, 0x38, 0x01, 0x30, 0x4F, 0x10, 0x01, 0x67, 0x7D, 0x0B, 0x2D, 0x0F, 0x71, 0x8F, 0x55, 0x24, 0xF6, 0x55, 0x50, 0x91, 0x55, 0x91, 0x2F, 0xA0, 0xE4, 0x06, 0x4D, 0x87, 0xE5, 0xA8, 0x75, 0x32, 0x9B, 0x5D, 0xBE, 0x33, 0x68, 0xF4, 0x08, 0x24, 0x51, 0x85, 0x86, 0xD8, 0xB9, 0x77, 0xA6, 0x68, 0x19, 0xC2, 0x76, 0xA2, 0x1E, 0x46, 0x5F, 0xCF, 0xBE, 0x59, 0x5F, 0xCD, 0xEE, 0xE0, 0xD3, 0x92, 0xF4, 0x40, 0xDB, 0x37, 0x3C, 0x79, 0xA5, 0x5F, 0x69, 0x59, 0x80, 0xF2, 0x9B, 0x08, 0xF8, 0x5C, 0x16, 0xFC, 0xE5, 0x1B, 0xFC, 0x9A, 0x02, 0xEE, 0xE9, 0xBE, 0x0D, 0xC9, 0x86, 0xAE, 0xAD, 0xAD, 0x1A, 0x39, 0x3F, 0xE9, 0xEA, 0xF6, 0x38, 0xD6, 0x38, 0x53, 0xAE, 0x63, 0x02, 0x88, 0x01, 0xFA, 0xBE, 0xF3, 0x06, 0xCD, 0xBE, 0x8A, 0x4A, 0x7D, 0x81, 0xB9, 0xFE, 0xA3, 0x8E, 0xF1, 0xE2, 0x52, 0xDF, 0x2B, 0x00, 0x59, 0x03, 0x47, 0x87, 0x0F, 0xDD, 0xF6, 0x7F, 0xD2, 0xD1, 0x39, 0xE0, 0x67, 0xAD, 0x34, 0x7D, 0x1D, 0xFB, 0xF4, 0x57, 0xCC, 0xEC, 0xD3, 0xEB, 0x1B, 0x49, 0x2A, 0xBD, 0xD2, 0xF8, 0x5D, 0x54, 0xEA, 0x00, 0x22, 0xD3, 0xB4, 0xDC, 0xF8, 0x5A, 0x77, 0x8C, 0x1B, 0xE6, 0x9B, 0x38, 0x50, 0xD3, 0xF5, 0xE9, 0xD0, 0x84, 0x1E, 0xC0, 0x0D, 0x88, 0xD3, 0xB0, 0x46, 0x02, 0xC9, 0x33, 0xC7, 0xA3, 0x02, 0x78, 0x34, 0x96, 0x7B, 0x25, 0x13, 0x70, 0x6C, 0x9E, 0xF1, 0xE2, 0xED, 0x69, 0xFE, 0xF7, 0x22, 0xC0, 0x25, 0x4B, 0xB5, 0x17, 0xDC, 0x97, 0x44, 0x50, 0xCC, 0x82, 0x52, 0x43, 0x0F, 0x98, 0x11, 0x8C, 0x72, 0x4B, 0xF1, 0x02, 0xD8, 0xBD, 0x2A, 0x6F, 0x62, 0x4F, 0x2D, 0x47, 0x96, 0xA0, 0xFB, 0xEC, 0x8D, 0x31, 0x16, 0xCF, 0x0C, 0x2E, 0x01, 0x2A, 0xE0, 0x1C, 0x80, 0x19, 0x98, 0x13, 0x0A, 0xEE, 0x81, 0x53, 0x5F, 0x36, 0x31, 0x69, 0x8E, 0xC3, 0x64, 0x6F, 0xD8, 0x1E, 0x77, 0xD0, 0x38, 0x80, 0xFA, 0x42, 0xCD, 0xE1, 0x1B, 0xA4, 0x80, 0x0A, 0x20, 0x0D, 0x92, 0xF9, 0x13, 0x5C, 0xE7, 0x9A, 0x14, 0xBF, 0x41, 0x8B, 0xAF, 0x33, 0x96, 0x03, 0x99, 0xB4, 0x13, 0x3A, 0xAE, 0x03, 0x44, 0xDA, 0x7D, 0xFF, 0xD6, 0x75, 0x28, 0x6E, 0x83, 0x38, 0xEA, 0x17, 0xC1, 0x96, 0xC2, 0x0F, 0xEF, 0x9F, 0x37, 0x79, 0x3A, 0xFB, 0x74, 0x7F, 0x5E, 0x53, 0x43, 0x29, 0x70, 0x85, 0xFC, 0x24, 0x7F, 0xED, 0x00, 0xFE, 0x5A, 0xED, 0xFD, 0x3E, 0xC8, 0xF6, 0x9C, 0xE9, 0x7A, 0x2A, 0xE2, 0xD8, 0xF6, 0xDC, 0x3A, 0xAE, 0x71, 0x87, 0xE8, 0x01, 0x72, 0x00, 0x2B, 0x20, 0x4F, 0x43, 0x81, 0xA2, 0x39, 0x1F, 0xFC, 0x30, 0xC0, 0x0A, 0x38, 0x03, 0xE9, 0x8D, 0x35, 0x8A, 0x4F, 0xF7, 0xE4, 0xC1, 0x03, 0x14, 0xDF, 0xA0, 0x25, 0xDA, 0x89, 0x35, 0x31, 0xF6, 0xDF, 0x18, 0x2E, 0xC6, 0x9E, 0xDF, 0x19, 0xF3, 0xA0, 0x01, 0xCF, 0x29, 0xF2, 0x43, 0x4A, 0xB5, 0xE3, 0x27, 0x4F, 0xDB, 0x39, 0x5A, 0x95, 0x75, 0x7D, 0xCD, 0x5C, 0x84, 0xF8, 0xE8, 0xCD, 0x3B, 0xCA, 0xBB, 0xC2, 0xBF, 0x9C, 0x24, 0xC5, 0xEB, 0x16, 0xAF, 0x00, 0x68, 0x3C, 0xCF, 0xF2, 0xFC, 0xA8, 0xD4, 0x3B, 0x5A, 0x78, 0x58, 0x9F, 0x61, 0xB7, 0x75, 0xB4, 0x72, 0xCE, 0x4D, 0x21, 0xE9, 0x88, 0x2C, 0x2B, 0x14, 0x52, 0x40, 0x0C, 0x50, 0x05, 0x8C, 0x97, 0x43, 0x2E, 0x1B, 0x60, 0x0D, 0x4D, 0x80, 0x0B, 0x38, 0x32, 0xBD, 0x53, 0xAE, 0x66, 0xDA, 0xA4, 0x83, 0x56, 0xDF, 0x9E, 0x76, 0xC8, 0x61, 0x94, 0x63, 0x6F, 0xA5, 0x21, 0x83, 0x1B, 0x8E, 0x3C, 0xA5, 0xF3, 0x07, 0xB1, 0x2E, 0xDE, 0x89, 0x8C, 0x17, 0x81, 0xD3, 0x28, 0xDE, 0xD9, 0x55, 0xA7, 0xC8, 0x2B, 0x39, 0x69, 0xC7, 0x4E, 0x1C, 0x9F, 0x82, 0xFE, 0xDA, 0x01, 0xEC, 0xD9, 0xAD, 0xF2, 0x3D, 0xCA, 0x21, 0x3E, 0xCF, 0x48, 0x3F, 0xFF, 0x8C, 0x1F, 0xAF, 0x7F, 0x9A, 0xBF, 0xDD, 0x28, 0x64, 0xEE, 0x5B, 0xA7, 0x41, 0x35, 0x87, 0x93, 0xF3, 0xEA, 0xB2, 0xD5, 0x86, 0x51, 0x23, 0x81, 0x94, 0x9B, 0xF2, 0x05, 0x2C, 0x00, 0x2D, 0x40, 0x68, 0x95, 0x89, 0x69, 0x95, 0x89, 0x3B, 0xFD, 0x68, 0xE7, 0x0C, 0x49, 0xF2, 0xC9, 0x79, 0xB8, 0x25, 0xA7, 0xEE, 0xB6, 0x77, 0xBC, 0x18, 0x35, 0xFA, 0x06, 0xB7, 0x9A, 0x16, 0x79, 0xA8, 0xBA, 0xF5, 0x2A, 0x20, 0xCF, 0xEB, 0xC9, 0xB2, 0x0F, 0xBA, 0xA6, 0xAD, 0xC9, 0x6B, 0xF0, 0x52, 0x7D, 0xA3, 0x9E, 0x9E, 0x84, 0xA8, 0xDE, 0x58, 0xF0, 0x73, 0xA3, 0x35, 0x46, 0xCA, 0xDA, 0x3B, 0x09, 0x92, 0xCC, 0x53, 0x02, 0x33, 0x70, 0x4E, 0x43, 0xE6, 0xA9, 0x36, 0xBD, 0x21, 0x0D, 0x6E, 0x28, 0x50, 0x6B, 0xA6, 0xBE, 0xC6, 0x2E, 0x01, 0x2E, 0x73, 0x82, 0x5C, 0xD5, 0xBE, 0xBA, 0x41, 0xA3, 0x7F, 0xD1, 0x3E, 0x02, 0xFA, 0x2D, 0x57, 0x19, 0x2B, 0xCD, 0x48, 0x60, 0xC7, 0x29, 0x57, 0xF8, 0x12, 0xB8, 0x7D, 0x21, 0x68, 0x45, 0x5B, 0x0A, 0xCF, 0x63, 0xAE, 0x56, 0x5B, 0xCD, 0x74, 0x8D, 0xBC, 0x93, 0x3E, 0x05, 0xE4, 0xF9, 0x6B, 0x94, 0xA1, 0xD7, 0xA8, 0x95, 0xA3, 0x01, 0x29, 0x96, 0xB5, 0x12, 0x32, 0x3B, 0x63, 0x15, 0x8E, 0xDE, 0x02, 0xF4, 0x16, 0x63, 0xF9, 0x19, 0xE0, 0xCB, 0x2D, 0x4C, 0xD6, 0x7E, 0x67, 0xD6, 0x48, 0xC0, 0x75, 0xCD, 0xD0, 0x36, 0xC0, 0x05, 0xB0, 0x00, 0xA4, 0x80, 0xB3, 0xA6, 0x6D, 0x1F, 0x01, 0x9C, 0x6F, 0xD0, 0x18, 0x3E, 0x39, 0xC7, 0x90, 0x5D, 0xE4, 0x98, 0xD7, 0x75, 0xCE, 0xB6, 0xB3, 0xA2, 0x2E, 0xC1, 0x75, 0x83, 0xE8, 0x09, 0xB4, 0xDB, 0xCD, 0x2D, 0x6D, 0xD9, 0xDB, 0xC3, 0x51, 0xAC, 0xC5, 0x18, 0x9D, 0xC6, 0x30, 0x02, 0xA0, 0xC9, 0xA8, 0x16, 0x03, 0xE7, 0xBB, 0x85, 0x23, 0x2D, 0x64, 0x1D, 0x56, 0x7D, 0x26, 0x9F, 0xCF, 0x4B, 0xA4, 0xC3, 0x8A, 0x98, 0xF9, 0x7D, 0x9C, 0x9F, 0x2F, 0xA1, 0xDF, 0x81, 0x21, 0x57, 0x05, 0x0E, 0x94, 0x3D, 0xF9, 0x65, 0x43, 0x1A, 0x05, 0x10, 0x35, 0x72, 0xF6, 0x6A, 0x9C, 0x71, 0xDE, 0xD9, 0xBE, 0xC3, 0x28, 0x1A, 0x8D, 0xD4, 0x88, 0xDF, 0x6F, 0xC9, 0x8E, 0x99, 0x40, 0xBF, 0x2D, 0xF1, 0xDD, 0xD0, 0xD3, 0x6B, 0x68, 0xF9, 0xD2, 0xAC, 0x83, 0x15, 0xBD, 0x55, 0x27, 0xF2, 0x5C, 0xAC, 0xED, 0xC1, 0xB1, 0xF3, 0x42, 0xEF, 0x2C, 0xD5, 0x41, 0xAB, 0x8E, 0x48, 0x75, 0xEC, 0xBD, 0x00, 0xEE, 0x48, 0xC6, 0x07, 0x54, 0x82, 0xBF, 0x30, 0x59, 0x87, 0x89, 0xF3, 0x4F, 0xDC, 0x7F, 0xDE, 0x1C, 0x66, 0x3E, 0x7F, 0xE6, 0x5D, 0xD6, 0x29, 0x35, 0x79, 0xE3, 0x24, 0x65, 0xCD, 0xE7, 0xB7, 0x6B, 0x5D, 0x92, 0xB3, 0x51, 0xD3, 0x12, 0x48, 0x6A, 0xD4, 0x6C, 0x76, 0x95, 0x46, 0xDE, 0xD4, 0x5F, 0x34, 0xE8, 0x7E, 0x71, 0xEE, 0x29, 0x5C, 0xD3, 0x64, 0xEC, 0x58, 0x07, 0xED, 0x5D, 0x08, 0x50, 0xC2, 0xAB, 0xF8, 0x8E, 0x69, 0xAA, 0x84, 0x21, 0x3F, 0x6C, 0x38, 0xEE, 0x70, 0xE2, 0x9C, 0x63, 0x85, 0xB4, 0x5E, 0x0F, 0x77, 0xAB, 0x3D, 0x50, 0xF6, 0x9D, 0xA9, 0xEB, 0x2A, 0x67, 0x57, 0x97, 0x3E, 0x01, 0x42, 0x73, 0x87, 0x8A, 0x04, 0x48, 0xD7, 0x68, 0x68, 0x07, 0xF4, 0x39, 0x97, 0x4C, 0xC9, 0x93, 0x34, 0xEE, 0x59, 0xDA, 0x19, 0xD0, 0x86, 0x19, 0x90, 0x3E, 0xBF, 0xA5, 0x72, 0x63, 0x6E, 0x7E, 0x94, 0x80, 0xC9, 0xAF, 0x11, 0x57, 0x0C, 0xC8, 0x12, 0x9D, 0x72, 0x00, 0x11, 0xF7, 0xE9, 0xB4, 0xA1, 0x4F, 0x66, 0xCA, 0x4F, 0x5B, 0xC5, 0x84, 0x99, 0x2B, 0x5A, 0x0C, 0x89, 0x1B, 0x3B, 0xB6, 0x40, 0x88, 0xE8, 0x6E, 0xD0, 0xEC, 0xEC, 0xB3, 0x2D, 0xDF, 0x06, 0x75, 0xB9, 0xD1, 0x5A, 0x3E, 0xF8, 0x37, 0x89, 0x4F, 0x1D, 0x42, 0xEF, 0xD8, 0xD5, 0xCC, 0x9B, 0xD2, 0x2A, 0xEC, 0xCA, 0x99, 0xB2, 0x16, 0x6B, 0x9C, 0x9C, 0x1B, 0xB9, 0x25, 0xA0, 0x01, 0x04, 0xCD, 0x36, 0x19, 0x91, 0x06, 0xFF, 0x82, 0x03, 0xD6, 0x28, 0x5B, 0xA3, 0xBA, 0xD7, 0x6C, 0x18, 0x5F, 0x09, 0x22, 0xF7, 0xA9, 0x4B, 0xB3, 0xE3, 0x2F, 0x68, 0xF9, 0xA5, 0xE2, 0x13, 0xB9, 0x86, 0xB0, 0x4F, 0x8F, 0xC0, 0x8E, 0xE8, 0x76, 0xEC, 0x54, 0xCB, 0xBE, 0x07, 0x90, 0xCA, 0xA6, 0xA8, 0x7B, 0xCF, 0x7B, 0x0E, 0xBE, 0x25, 0xC7, 0x61, 0xFE, 0xDE, 0x69, 0xDB, 0x7A, 0x23, 0x2C, 0x62, 0x8C, 0xB0, 0xF6, 0x37, 0x85, 0xDE, 0xCF, 0x4C, 0xE9, 0x73, 0x4E, 0x85, 0x86, 0x3B, 0xC0, 0x4F, 0xB8, 0x0D, 0x58, 0xAC, 0x95, 0xA6, 0x40, 0xCA, 0x36, 0xE3, 0x69, 0xC8, 0x82, 0xAE, 0xCC, 0xD0, 0x16, 0x71, 0x28, 0xA0, 0xB4, 0x6E, 0xFD, 0x67, 0x29, 0x5F, 0xE8, 0x06, 0x2D, 0xFE, 0xD5, 0x57, 0x1A, 0x93, 0x17, 0xBB, 0xA7, 0xB1, 0xE5, 0x9E, 0x57, 0xF3, 0xBD, 0x50, 0x05, 0xFA, 0x69, 0x21, 0xA4, 0x4F, 0xEC, 0x36, 0xAD, 0x6F, 0xCB, 0xB9, 0x98, 0x8F, 0xE7, 0x91, 0x39, 0xE0, 0x84, 0x69, 0xEA, 0xFF, 0x63, 0x3D, 0x90, 0xA7, 0x83, 0x6D, 0x0A, 0x50, 0xC7, 0x27, 0xD6, 0x3B, 0x5F, 0x6D, 0x09, 0x93, 0xAB, 0xC1, 0x0D, 0x01, 0x24, 0x81, 0xA8, 0x75, 0xFE, 0xE0, 0x86, 0x2E, 0xAC, 0x29, 0xE7, 0xB6, 0x7E, 0xDE, 0x6E, 0xA8, 0x11, 0x03, 0x78, 0xAD, 0xD0, 0x3C, 0x37, 0x68, 0xF9, 0xAF, 0x0C, 0xD6, 0x85, 0xF5, 0xE9, 0xF0, 0x5B, 0xE5, 0x28, 0xF9, 0xBD, 0xE0, 0x54, 0x1D, 0xE3, 0x35, 0xB1, 0xB5, 0x65, 0xA2, 0xC4, 0x22, 0x64, 0xD3, 0xE6, 0x56, 0xEF, 0x4A, 0x7B, 0xF3, 0x39, 0x6D, 0x1C, 0xD3, 0xB6, 0x65, 0x3D, 0xF5, 0xA7, 0x5E, 0x7E, 0xF9, 0x32, 0xB6, 0x3D, 0xF7, 0x63, 0xD5, 0x64, 0xF4, 0xB9, 0x31, 0x3D, 0xE9, 0xD3, 0x56, 0x4E, 0x1D, 0xC0, 0x05, 0x30, 0x5B, 0x53, 0xF8, 0x08, 0xA8, 0x5A, 0xD6, 0x1D, 0xD4, 0xE0, 0x86, 0x0F, 0xBB, 0xE2, 0xE1, 0xD9, 0x36, 0xB4, 0x2E, 0x99, 0x80, 0xD9, 0x1E, 0xAF, 0xF9, 0xF2, 0x76, 0x1D, 0xB4, 0xFA, 0x17, 0x8E, 0xF6, 0x13, 0x37, 0xD8, 0x48, 0xC0, 0x49, 0xB2, 0xBE, 0x43, 0x9B, 0x72, 0xE1, 0xF0, 0x9C, 0x86, 0x14, 0x80, 0x63, 0x6C, 0x48, 0xB8, 0x0C, 0x6F, 0x26, 0xF5, 0x95, 0xE4, 0xE0, 0x1A, 0x5E, 0xC6, 0xF2, 0xA6, 0x8B, 0xC5, 0x99, 0xAD, 0x17, 0x27, 0xAE, 0x58, 0x7E, 0x8C, 0x85, 0x62, 0xEB, 0x47, 0x17, 0x58, 0x23, 0x78, 0xFC, 0x15, 0x8F, 0x94, 0x3B, 0xA0, 0x3C, 0x7B, 0x0A, 0xDC, 0xA6, 0x2B, 0x7D, 0x74, 0xE8, 0x65, 0x9D, 0xFD, 0x43, 0x81, 0x5C, 0xEA, 0x0D, 0x22, 0xC0, 0x18, 0xD8, 0x93, 0x5C, 0x4D, 0x01, 0x61, 0x80, 0x1A, 0x1C, 0x40, 0x64, 0x07, 0x8D, 0x60, 0xFA, 0xE2, 0x24, 0x38, 0xE2, 0x52, 0x8D, 0x9A, 0xA7, 0x89, 0xE0, 0xB1, 0xAA, 0xCE, 0x35, 0xA4, 0x3C, 0x45, 0x0F, 0x0E, 0xF0, 0xAB, 0x50, 0x2C, 0xF6, 0xA4, 0x36, 0x7F, 0x66, 0x16, 0xF9, 0xFC, 0x0D, 0x84, 0xFE, 0xFC, 0x35, 0xFC, 0x6A, 0xB4, 0x9F, 0xF3, 0x56, 0xD0, 0xEB, 0xB3, 0x7B, 0x03, 0xDA, 0xF2, 0x39, 0xE5, 0xF8, 0xB9, 0x57, 0x9D, 0x79, 0x21, 0xF0, 0x57, 0x8B, 0x00, 0x6C, 0x79, 0x41, 0xD5, 0x32, 0x53, 0xAC, 0x57, 0x56, 0x03, 0x48, 0xD6, 0x64, 0xD4, 0x00, 0x4A, 0xE7, 0x44, 0x1B, 0xB2, 0xFB, 0x45, 0xC0, 0x1B, 0x4A, 0x80, 0xC5, 0xFB, 0x96, 0x0E, 0x1A, 0x7D, 0xA3, 0x07, 0xA8, 0xF4, 0xCB, 0x0C, 0x89, 0xC1, 0xD1, 0xF6, 0x1D, 0x43, 0x45, 0x30, 0x21, 0x48, 0xF0, 0x06, 0xE0, 0x8A, 0x1E, 0xF4, 0xE2, 0xBD, 0xD2, 0xF6, 0xD5, 0x73, 0xF8, 0x77, 0xA1, 0x1E, 0xFF, 0xE7, 0x58, 0xE3, 0xAF, 0xFB, 0x89, 0x86, 0xD5, 0x08, 0xBE, 0x65, 0x54, 0xC9, 0x48, 0x70, 0xDA, 0xBF, 0xA9, 0x04, 0x5B, 0xEF, 0xD9, 0x35, 0x38, 0x91, 0x63, 0xCA, 0xA9, 0x74, 0x0C, 0xCE, 0xF0, 0xB7, 0x50, 0x4F, 0x01, 0xB9, 0xA6, 0x37, 0x2A, 0x01, 0xE6, 0x40, 0xBE, 0xA1, 0x2E, 0xB5, 0x3A, 0x97, 0x05, 0x50, 0x03, 0x48, 0x97, 0x5F, 0xA7, 0x03, 0x9E, 0x1D, 0x34, 0xEE, 0x71, 0x64, 0x85, 0xA2, 0x80, 0xD3, 0x5B, 0x69, 0x5A, 0x50, 0x91, 0x7E, 0xE3, 0xB6, 0x03, 0x2E, 0x60, 0x12, 0x85, 0x44, 0xF6, 0xA9, 0xCE, 0x3D, 0x6E, 0x6F, 0xE0, 0x5C, 0xD9, 0xEE, 0x7B, 0x68, 0xB4, 0x40, 0xD0, 0x58, 0xA6, 0x36, 0x34, 0x57, 0xEC, 0xD2, 0x80, 0x93, 0x7F, 0xC6, 0xAB, 0x07, 0xC7, 0xFD, 0x7A, 0x31, 0x08, 0xB9, 0x21, 0x04, 0xCE, 0x18, 0x4F, 0x69, 0xEF, 0xE0, 0x92, 0x1D, 0x34, 0xF5, 0xB5, 0x7E, 0x0E, 0x20, 0x02, 0xE8, 0x69, 0x24, 0xE0, 0xB5, 0xF2, 0x44, 0x0D, 0xDA, 0x8A, 0x86, 0x02, 0x22, 0xE7, 0x5C, 0x25, 0x79, 0x2B, 0x4D, 0xBE, 0x5E, 0xA8, 0xAA, 0xFA, 0x06, 0x8B, 0xBB, 0x16, 0xA6, 0xAB, 0x7A, 0xA2, 0x16, 0x69, 0x8E, 0xE3, 0x6C, 0x39, 0x66, 0x30, 0x27, 0x7D, 0xFF, 0x62, 0x7C, 0x78, 0x4A, 0x20, 0xCF, 0x0D, 0xDA, 0xCD, 0x99, 0xF2, 0x6A, 0x89, 0x12, 0x99, 0x03, 0x88, 0xC5, 0x3A, 0xA0, 0xF7, 0x3E, 0x43, 0x23, 0x22, 0x71, 0xFE, 0xE4, 0x3F, 0xF6, 0xF6, 0xE7, 0xCC, 0xF9, 0x24, 0x4A, 0x01, 0xC7, 0x57, 0xBF, 0xED, 0x98, 0x36, 0xAE, 0x4F, 0x37, 0x70, 0xCE, 0xB2, 0x12, 0x6B, 0xB8, 0x02, 0x21, 0xCB, 0xA2, 0xA1, 0x00, 0x37, 0xC0, 0x0A, 0x90, 0x06, 0x2D, 0x45, 0xDA, 0x91, 0x95, 0xE4, 0x20, 0xFD, 0x6A, 0x03, 0x54, 0x05, 0xB3, 0x6E, 0x32, 0xE4, 0x8E, 0x94, 0xD0, 0x89, 0xA9, 0xD4, 0x83, 0x94, 0x0C, 0x0F, 0x52, 0x37, 0x63, 0x53, 0xC6, 0x74, 0xA1, 0xD6, 0xA5, 0xE6, 0xCB, 0x2B, 0x49, 0x90, 0x67, 0x59, 0x39, 0xA5, 0x68, 0x76, 0x1D, 0x55, 0xE2, 0xCF, 0xA3, 0xD7, 0xFB, 0x3A, 0x64, 0x6F, 0xA3, 0xF3, 0x04, 0xCE, 0xAA, 0x22, 0xDC, 0x67, 0x88, 0x73, 0x4C, 0x91, 0x05, 0xA2, 0x9F, 0x59, 0x14, 0x80, 0xFE, 0xEE, 0x97, 0x77, 0x00, 0x14, 0xD2, 0xB9, 0x73, 0x06, 0x4D, 0x4C, 0x81, 0xAA, 0x04, 0x70, 0xB3, 0x7F, 0x6C, 0x00, 0x05, 0x70, 0x2B, 0xF7, 0x41, 0x80, 0x35, 0xFC, 0x2D, 0x83, 0x0E, 0x9A, 0xF5, 0x9E, 0x86, 0xA0, 0xA5, 0xCE, 0xDE, 0x58, 0x25, 0xC6, 0x33, 0x7E, 0xFC, 0x03, 0x91, 0xA0, 0xEE, 0xEC, 0x36, 0x93, 0x1C, 0x71, 0x83, 0x16, 0xEF, 0x5F, 0x09, 0x11, 0x39, 0x7D, 0x95, 0x2C, 0x9F, 0x49, 0x8E, 0xE7, 0x29, 0x52, 0x88, 0x5D, 0xF0, 0x5F, 0xFE, 0xD6, 0x5F, 0x0B, 0xBA, 0xC9, 0xEC, 0x85, 0x4A, 0x7F, 0x22, 0xD4, 0xCE, 0x02, 0x8E, 0xA5, 0x69, 0x63, 0xAA, 0x75, 0x3C, 0xBB, 0x7D, 0xB5, 0x39, 0x24, 0x25, 0xE5, 0xCC, 0x0B, 0x3B, 0x0B, 0x20, 0x3A, 0xF3, 0xF0, 0xEC, 0x80, 0x55, 0x43, 0x00, 0xE1, 0x3B, 0xA5, 0x6B, 0x4D, 0x19, 0xBC, 0xDF, 0x62, 0x1D, 0x34, 0xFF, 0xA6, 0xC7, 0x12, 0xFB, 0x6E, 0xF2, 0x81, 0x62, 0xC0, 0xEE, 0x85, 0x90, 0x50, 0x5B, 0xA6, 0xEC, 0x57, 0xDA, 0x4A, 0xA7, 0xC5, 0x6E, 0xF3, 0xAC, 0xB7, 0x6D, 0x4E, 0xFF, 0x49, 0xC9, 0x67, 0x6A, 0xFF, 0x76, 0xE4, 0x78, 0xCF, 0x02, 0xF9, 0x6C, 0x0B, 0xAB, 0x9C, 0xE6, 0x5F, 0x77, 0xBB, 0xB4, 0x02, 0x24, 0x16, 0x18, 0xD0, 0x7B, 0xC0, 0x7F, 0x07, 0xBB, 0xE9, 0x8F, 0x68, 0x8D, 0xE2, 0xF5, 0x12, 0x2D, 0x40, 0x15, 0x48, 0x5B, 0xFE, 0xF3, 0x31, 0xA7, 0x8C, 0x7B, 0x00, 0x76, 0x3F, 0x9D, 0xFD, 0xF6, 0x8C, 0xCF, 0x31, 0xCD, 0x47, 0xF3, 0xC5, 0xB7, 0x79, 0x2A, 0xFA, 0xA5, 0x29, 0xE0, 0xE8, 0x66, 0xD2, 0x8D, 0xFE, 0xB7, 0x08, 0xA9, 0xC3, 0xAF, 0x55, 0x6B, 0x0D, 0x59, 0x71, 0x7D, 0xD3, 0x96, 0x6F, 0x5B, 0xC9, 0xA8, 0xA4, 0xDC, 0xFD, 0x39, 0xE8, 0x4F, 0xD2, 0x6A, 0x4F, 0x43, 0x6D, 0x35, 0x4F, 0x5F, 0x3A, 0xAE, 0xD3, 0x48, 0x02, 0xCD, 0x68, 0x29, 0xC0, 0x3E, 0x63, 0x97, 0xCB, 0xB6, 0xC8, 0x6D, 0x95, 0x85, 0xA9, 0xB1, 0x2A, 0xC0, 0x46, 0x73, 0xF7, 0xE3, 0x04, 0xA8, 0x80, 0x43, 0xCB, 0x59, 0xD0, 0xE7, 0xD0, 0x35, 0x7A, 0xE7, 0xB4, 0xFC, 0x5E, 0x04, 0xE9, 0xF6, 0x82, 0xC6, 0x89, 0xD6, 0x7E, 0xFD, 0xD2, 0x5A, 0x8E, 0xEA, 0x6C, 0xF4, 0x25, 0x23, 0x02, 0xD9, 0xDF, 0x94, 0xEE, 0xEB, 0xD9, 0x32, 0xAB, 0xFB, 0xF7, 0x8D, 0x79, 0x61, 0x17, 0x07, 0xF8, 0xCC, 0x6D, 0x88, 0x72, 0x76, 0x4F, 0x54, 0x00, 0x1C, 0xF7, 0x7F, 0x9F, 0xED, 0xD0, 0x92, 0x1D, 0xB4, 0x02, 0xD4, 0x1B, 0xD6, 0x38, 0x80, 0xAD, 0x21, 0x25, 0xBC, 0x6D, 0x15, 0x69, 0x5A, 0x94, 0x9E, 0x06, 0xC9, 0x7C, 0x49, 0xC4, 0xDD, 0xE5, 0xCF, 0x9A, 0x4A, 0x5E, 0x4B, 0xEF, 0x96, 0x73, 0x58, 0xC4, 0xA1, 0x1B, 0xB4, 0xFA, 0xD2, 0x1B, 0x79, 0xFE, 0xCF, 0xE3, 0x09, 0x19, 0x03, 0x2E, 0xFF, 0xD6, 0xD7, 0x18, 0x9C, 0x3C, 0xCE, 0x81, 0xE9, 0x89, 0xEC, 0x2E, 0xEC, 0x67, 0x2C, 0x57, 0xF5, 0x46, 0xB8, 0x4D, 0xF1, 0xE5, 0xF3, 0x6A, 0xD1, 0x37, 0x98, 0xBB, 0x15, 0x2F, 0xFD, 0xD7, 0x9E, 0x15, 0xE0, 0x38, 0x53, 0xAE, 0x31, 0x44, 0xA9, 0x78, 0x3F, 0x03, 0xE4, 0x0D, 0x9A, 0x9F, 0x4C, 0x67, 0x21, 0x2F, 0x18, 0xA8, 0x8E, 0xE4, 0xB9, 0x30, 0x80, 0x0E, 0x20, 0x0D, 0x8F, 0x65, 0x5B, 0xEF, 0x40, 0x1C, 0x40, 0x0D, 0xE0, 0x9C, 0xEF, 0xEE, 0xE2, 0x0E, 0x1A, 0x9F, 0xEF, 0x1A, 0x55, 0xE6, 0xE8, 0x23, 0xD0, 0x1A, 0xE7, 0xB4, 0x3C, 0x81, 0x85, 0x0D, 0xFD, 0x0B, 0x9B, 0x17, 0xC6, 0x08, 0x58, 0x4D, 0xE7, 0x6E, 0x1E, 0x05, 0x76, 0x79, 0xC7, 0x99, 0xA8, 0x0E, 0xDA, 0xA9, 0x86, 0xBD, 0x56, 0x8C, 0x57, 0x04, 0x8B, 0x57, 0xCB, 0x78, 0x55, 0x8F, 0x7B, 0xCC, 0x8B, 0x25, 0x13, 0xF2, 0x99, 0xA3, 0x11, 0x5F, 0xB2, 0x14, 0x9A, 0xA9, 0x7E, 0xD5, 0x5B, 0xB7, 0x9C, 0xBE, 0xD6, 0xBA, 0x9E, 0x7C, 0x6F, 0x84, 0x01, 0xB5, 0x4C, 0x68, 0xF4, 0x42, 0x00, 0xA1, 0xB9, 0x26, 0xCF, 0xFD, 0xD4, 0xD0, 0xBA, 0x41, 0x23, 0x04, 0x8D, 0xF6, 0x4A, 0xC3, 0x53, 0xCA, 0x22, 0x90, 0x9A, 0x70, 0xE2, 0x6F, 0x54, 0xDA, 0x93, 0x2B, 0x79, 0x3C, 0x9E, 0x46, 0xEB, 0x9C, 0x96, 0x7E, 0x9E, 0xE8, 0xB7, 0x15, 0xBA, 0xC0, 0x73, 0x54, 0xE2, 0xB7, 0xFC, 0xDE, 0x90, 0xE6, 0xB8, 0x3B, 0xF2, 0xFB, 0x3D, 0xE3, 0x83, 0xDC, 0xA4, 0xE0, 0x4B, 0x34, 0xC6, 0x01, 0x94, 0x1A, 0x07, 0x10, 0x01, 0x34, 0xFE, 0x02, 0xAA, 0x6F, 0xF5, 0x6A, 0xCD, 0x4A, 0x93, 0x37, 0xD2, 0xE7, 0x9C, 0x59, 0xA1, 0x39, 0x21, 0x96, 0x0F, 0x40, 0xAB, 0x4E, 0x6A, 0xB5, 0xC6, 0xA8, 0xDE, 0x6F, 0x91, 0x1B, 0x34, 0x8C, 0x6B, 0x38, 0xE2, 0x5F, 0xE6, 0x56, 0x57, 0xBF, 0x7F, 0x3A, 0x36, 0x28, 0x39, 0xD9, 0x82, 0x4C, 0xC6, 0x40, 0x05, 0xAB, 0x19, 0x34, 0x59, 0xC5, 0xA8, 0x78, 0x02, 0x8D, 0x98, 0x0E, 0xD8, 0xD7, 0x4A, 0x35, 0xB4, 0x03, 0x6A, 0xF3, 0x61, 0xBD, 0x43, 0xE9, 0xE5, 0xAF, 0xE3, 0xD2, 0xDE, 0x6E, 0x14, 0x6B, 0xE2, 0xA0, 0xFA, 0xAA, 0x82, 0xEB, 0xF4, 0xC2, 0xE2, 0x0E, 0x93, 0x76, 0x0C, 0xC4, 0x97, 0xBB, 0x13, 0x39, 0xA0, 0x0A, 0x38, 0x03, 0x65, 0x33, 0x5B, 0x1E, 0x0D, 0x0F, 0xC0, 0x18, 0xE0, 0x02, 0x68, 0x1D, 0x4E, 0xF2, 0x06, 0x4D, 0xBA, 0xC0, 0x2E, 0x9F, 0xA6, 0x8F, 0x8E, 0x20, 0x21, 0xDE, 0x92, 0x45, 0xAB, 0xC2, 0xFB, 0x32, 0x0C, 0xEA, 0x87, 0x0C, 0xA8, 0xA7, 0xD3, 0xE6, 0xE3, 0x99, 0x2B, 0x35, 0x74, 0x2F, 0x7A, 0x15, 0xB7, 0x0B, 0x4F, 0xFE, 0x40, 0x4F, 0x96, 0x7E, 0xDF, 0x0E, 0xB7, 0x43, 0xE2, 0xAC, 0x54, 0xB8, 0x00, 0x67, 0xD8, 0xC0, 0xE0, 0x3C, 0x39, 0x62, 0x67, 0x0A, 0xF0, 0x92, 0x15, 0xE4, 0x07, 0x7B, 0xB1, 0xB3, 0x7B, 0x3C, 0x28, 0xC0, 0x6C, 0x0F, 0x28, 0x9E, 0x03, 0xBC, 0x8C, 0x81, 0xA8, 0x86, 0x02, 0x96, 0x80, 0xF8, 0x1A, 0x82, 0xC8, 0x40, 0xBE, 0xC7, 0x53, 0xBF, 0xA0, 0x59, 0x60, 0x6B, 0xD3, 0xB2, 0x55, 0x58, 0x21, 0x54, 0xF0, 0x2B, 0x71, 0x83, 0xA0, 0xE8, 0xB9, 0x5F, 0x3C, 0x47, 0xC9, 0xD6, 0xEA, 0x8E, 0x35, 0x3B, 0xAF, 0x0C, 0x81, 0x2C, 0x87, 0x03, 0xD7, 0x9E, 0xE7, 0x59, 0x3A, 0xFB, 0xEC, 0x3C, 0x71, 0x1B, 0x8D, 0x4F, 0x95, 0xFD, 0x80, 0xAC, 0x8C, 0xB8, 0xDD, 0x5C, 0x00, 0x01, 0x76, 0xD6, 0xF8, 0xCB, 0x0F, 0xFA, 0xFC, 0xA8, 0x43, 0xE6, 0x4A, 0x63, 0x03, 0x42, 0x81, 0xD2, 0x75, 0xD4, 0x55, 0x06, 0x4A, 0xE6, 0x32, 0xA2, 0x9A, 0xC3, 0xEC, 0xE3, 0xAC, 0x15, 0x7A, 0x5B, 0x0F, 0xB4, 0x83, 0x66, 0xFF, 0x92, 0xD0, 0x5A, 0x51, 0xFF, 0x81, 0x6A, 0xD7, 0x30, 0xE4, 0x4B, 0x0D, 0xB9, 0xE5, 0xF7, 0xB7, 0x2D, 0x15, 0x24, 0xE5, 0xE2, 0x7B, 0x3C, 0x55, 0x44, 0xE6, 0x30, 0x02, 0xDB, 0x17, 0xF6, 0xFB, 0x06, 0x88, 0xBB, 0x99, 0x05, 0x70, 0xDE, 0x0C, 0x8F, 0x21, 0xCD, 0x8E, 0x5B, 0x4E, 0xBC, 0xBF, 0xAE, 0xFD, 0xC5, 0x5C, 0x9F, 0xCB, 0xCA, 0x93, 0xB3, 0xE4, 0x16, 0x26, 0xAE, 0x42, 0xF0, 0x98, 0x80, 0x2C, 0x4F, 0x18, 0x14, 0x36, 0x25, 0xDD, 0x9A, 0x80, 0x15, 0xE0, 0x31, 0x6F, 0x94, 0x4A, 0x40, 0x34, 0x9C, 0x01, 0x6D, 0x90, 0xF6, 0x77, 0xDE, 0xC5, 0xEF, 0x80, 0xFB, 0x5D, 0x69, 0xDE, 0x03, 0x2F, 0xD0, 0xB2, 0x92, 0x7F, 0x59, 0x0E, 0xF9, 0x52, 0x68, 0x82, 0x20, 0x97, 0xF5, 0x2A, 0x90, 0xAE, 0xDC, 0x1A, 0xB2, 0x1B, 0x5B, 0xD3, 0xC7, 0xB2, 0xF4, 0x2F, 0xAA, 0xBD, 0xC4, 0x86, 0x8D, 0xE7, 0x6D, 0xE6, 0xF4, 0x67, 0x1B, 0xF1, 0xA4, 0x8F, 0xB7, 0x8F, 0x22, 0xDF, 0x65, 0xE5, 0x4D, 0x58, 0xC9, 0x37, 0x9B, 0x37, 0x05, 0xE0, 0x7B, 0xA7, 0x0F, 0x40, 0x0E, 0xC0, 0x76, 0x55, 0xF1, 0xC3, 0x75, 0x8D, 0x9E, 0x57, 0xBE, 0xDE, 0xBC, 0x71, 0x01, 0xE2, 0x80, 0xF9, 0xBC, 0x74, 0x8A, 0x03, 0x6E, 0x8D, 0x35, 0x74, 0x96, 0x0D, 0x38, 0x05, 0xB0, 0x00, 0x51, 0x1D, 0xB4, 0xF8, 0xCC, 0xBE, 0x5C, 0x68, 0xBF, 0x3D, 0xA1, 0xE9, 0xD3, 0xBE, 0x6B, 0xA4, 0x42, 0x0E, 0xE0, 0x81, 0x9A, 0x12, 0xE5, 0xAC, 0x11, 0xC4, 0xCE, 0xA7, 0xD1, 0x7D, 0x7B, 0xE2, 0x49, 0x7C, 0x3F, 0xB7, 0xAF, 0xCC, 0x2F, 0x30, 0xD5, 0xE9, 0xEE, 0xB8, 0xA3, 0xB3, 0x66, 0xE1, 0xC0, 0x46, 0x4D, 0x8B, 0x5F, 0xC5, 0x29, 0x14, 0xD0, 0x02, 0x8C, 0x1B, 0x07, 0x78, 0x47, 0xB2, 0x21, 0xD7, 0xC0, 0xBE, 0x35, 0x27, 0x12, 0x9C, 0x65, 0xEC, 0x67, 0x8D, 0xBA, 0x57, 0xFB, 0x3D, 0xCD, 0xF9, 0x00, 0x46, 0x00, 0x37, 0x0E, 0x03, 0x64, 0x40, 0xDC, 0x95, 0x06, 0xB5, 0xD0, 0x30, 0x98, 0x18, 0x05, 0x76, 0x21, 0x68, 0x39, 0xD9, 0xA0, 0x6A, 0xEB, 0x74, 0xF7, 0x21, 0x9A, 0xFE, 0xB6, 0x33, 0x35, 0xD4, 0x76, 0x1C, 0x88, 0x4F, 0xFC, 0x2D, 0x2A, 0xEB, 0xA0, 0xC9, 0x4B, 0x5A, 0xB4, 0x4A, 0x4D, 0xD6, 0xC5, 0x9B, 0xCE, 0x92, 0xA0, 0x75, 0xD0, 0xE2, 0x06, 0x26, 0x57, 0xB4, 0x12, 0x98, 0x03, 0x5D, 0xE4, 0x15, 0x58, 0xE5, 0xB9, 0x70, 0xDE, 0x45, 0xBC, 0x5C, 0x52, 0xEA, 0x8E, 0xB4, 0x70, 0xC0, 0x6B, 0xBA, 0xA7, 0xB9, 0x4C, 0xA8, 0x01, 0x94, 0xC0, 0x21, 0x80, 0x14, 0x48, 0xED, 0xA0, 0x55, 0x47, 0xAB, 0x1B, 0x60, 0xC2, 0xFE, 0x69, 0xE0, 0xE4, 0x81, 0x9E, 0x25, 0xC3, 0x38, 0x98, 0xAA, 0x4E, 0x5A, 0x2A, 0x5E, 0x85, 0x30, 0xB3, 0xCA, 0xDA, 0x59, 0x0E, 0xB9, 0xEF, 0xFE, 0x18, 0x73, 0x89, 0xE4, 0x49, 0x32, 0xEA, 0xFE, 0x45, 0x19, 0x08, 0x07, 0x52, 0xFF, 0x06, 0x0B, 0x21, 0xD7, 0xF7, 0x7A, 0x7B, 0xB8, 0x73, 0x34, 0xDC, 0x9B, 0x20, 0xDF, 0xC4, 0x04, 0x02, 0xFB, 0x26, 0x7E, 0xC7, 0xB8, 0x0B, 0x4E, 0x17, 0xA2, 0x9A, 0x3E, 0x2E, 0xE6, 0xDB, 0xA6, 0x6D, 0xC2, 0xD7, 0xE4, 0x47, 0x61, 0x80, 0x15, 0x38, 0xB2, 0xA6, 0x4E, 0xE4, 0x9C, 0xB2, 0xCF, 0x77, 0xA5, 0xC9, 0xF6, 0x16, 0xBA, 0xDD, 0x5F, 0xF2, 0xED, 0x69, 0xC7, 0x09, 0x6D, 0x2D, 0xE1, 0x9D, 0x1A, 0xBE, 0xA3, 0x8B, 0x75, 0xA6, 0xBB, 0xCF, 0xCA, 0x72, 0x58, 0x8C, 0x17, 0xC1, 0x2D, 0x07, 0xE4, 0x6B, 0xE6, 0x74, 0x03, 0xA2, 0x80, 0xAB, 0xF7, 0x3B, 0x07, 0x28, 0xE9, 0x5C, 0x52, 0x07, 0xAD, 0x75, 0x33, 0x6F, 0xA2, 0x80, 0x9F, 0xE7, 0x79, 0xFB, 0x54, 0x58, 0xDE, 0x4B, 0x0C, 0x1B, 0x63, 0x9F, 0xE1, 0x56, 0xFF, 0xBF, 0x00, 0xA4, 0xC0, 0x91, 0xC6, 0x69, 0x10, 0x40, 0x05, 0x98, 0x02, 0x91, 0x0D, 0x5E, 0x23, 0x87, 0x56, 0x2D, 0x5E, 0x68, 0x1A, 0xBF, 0xD8, 0xDB, 0xCC, 0xAE, 0xDF, 0x3E, 0xFD, 0xD3, 0xAE, 0x82, 0x0A, 0x2A, 0x70, 0x78, 0x7B, 0x3A, 0xAC, 0xBF, 0x34, 0xB0, 0xE0, 0x2C, 0xF0, 0x22, 0x38, 0x7B, 0xA5, 0xF1, 0x50, 0xA1, 0xE7, 0x4D, 0xC1, 0xD3, 0x55, 0x32, 0xBE, 0x04, 0x37, 0x05, 0x70, 0xF2, 0xFF, 0x2F, 0x80, 0x00, 0x7C, 0xBD, 0x6B, 0x9A, 0x1D, 0x39, 0xCB, 0xB4, 0x3B, 0x15, 0x0F, 0x41, 0x9C, 0x61, 0xFE, 0x13, 0xDB, 0x3B, 0x03, 0xE4, 0x85, 0x9E, 0xF6, 0xF7, 0xFE, 0xBA, 0xAF, 0x55, 0x5D, 0x6D, 0x57, 0x61, 0xA5, 0x52, 0xE2, 0x10, 0x31, 0x83, 0x9B, 0xFD, 0x89, 0x46, 0xC1, 0xE9, 0x89, 0x32, 0xFD, 0xEC, 0xD5, 0xEC, 0x9A, 0x4B, 0x32, 0xCD, 0xDB, 0x61, 0x12, 0x3E, 0xFB, 0xC2, 0x75, 0x95, 0xAD, 0x01, 0x8F, 0xBD, 0xA8, 0x84, 0x1B, 0xA7, 0x41, 0x80, 0x35, 0x8A, 0xFE, 0xA5, 0x35, 0xC7, 0x80, 0xBF, 0x0A, 0x1E, 0x73, 0x2E, 0xB4, 0x09, 0x1A, 0x0A, 0x9E, 0x44, 0x85, 0xAD, 0xFF, 0x04, 0x06, 0x71, 0xBE, 0xA0, 0x7D, 0x59, 0x95, 0xC0, 0x39, 0x49, 0x02, 0x2F, 0xB1, 0x24, 0x9C, 0x5B, 0x68, 0x97, 0xF0, 0x8C, 0x9E, 0xE6, 0xEE, 0x33, 0x5E, 0xC9, 0x33, 0x7B, 0x31, 0xE3, 0xFC, 0x03, 0xA1, 0x3D, 0x89, 0x61, 0x09, 0xE8, 0xF9, 0x85, 0x50, 0xB7, 0x73, 0x07, 0x5E, 0x6A, 0x5B, 0x32, 0x4C, 0x73, 0x8E, 0xA5, 0x2B, 0x23, 0x6E, 0xF9, 0x9C, 0xDA, 0x04, 0x08, 0x07, 0x2C, 0x1A, 0xD4, 0x38, 0x0D, 0x01, 0xE6, 0x0A, 0x4A, 0xF1, 0x8C, 0xFA, 0x27, 0x70, 0xAF, 0xD1, 0x05, 0x04, 0x6F, 0x07, 0x74, 0x95, 0x09, 0x9A, 0x2C, 0x31, 0xAB, 0x90, 0xFA, 0xF6, 0x34, 0xCE, 0xFA, 0x52, 0x43, 0x9C, 0x04, 0xED, 0x0B, 0x17, 0x1C, 0x5F, 0xD4, 0xA0, 0x50, 0x13, 0xBC, 0x15, 0xC0, 0xE2, 0xB1, 0x14, 0xD7, 0xBA, 0x3D, 0x07, 0x63, 0x53, 0xBC, 0x4F, 0x92, 0x56, 0xFB, 0x13, 0x0F, 0x08, 0xC8, 0x09, 0xE1, 0x14, 0x5D, 0x0A, 0x90, 0xC9, 0x95, 0xE4, 0x9C, 0x55, 0xF1, 0x2E, 0xBF, 0xC3, 0xFD, 0xBB, 0x31, 0x3E, 0x1A, 0x9A, 0x00, 0xFB, 0x3E, 0xD1, 0x55, 0x0D, 0x9E, 0x06, 0x18, 0x7B, 0xD4, 0xF7, 0xAA, 0xA1, 0xCF, 0x9F, 0x12, 0xFB, 0x3B, 0xB9, 0x11, 0x34, 0x41, 0xD3, 0x25, 0x05, 0xE9, 0x85, 0xE7, 0x32, 0x9C, 0x3E, 0xB8, 0x45, 0xF7, 0x59, 0xC4, 0x4C, 0x2F, 0x8E, 0xE6, 0xFF, 0x16, 0x52, 0xD6, 0xD5, 0xA7, 0x3C, 0xE7, 0xCA, 0xDB, 0xFA, 0x64, 0x57, 0x97, 0x43, 0x18, 0x48, 0x05, 0x82, 0x00, 0x09, 0x80, 0x0A, 0x18, 0x01, 0xDE, 0x9A, 0x46, 0x3F, 0xC2, 0x27, 0x44, 0xD9, 0x6E, 0xC1, 0xCA, 0x19, 0xB1, 0x7B, 0x5E, 0xB7, 0x4C, 0x3B, 0x1F, 0x52, 0xF5, 0x2F, 0x29, 0xC8, 0x6C, 0x58, 0x23, 0x00, 0xAD, 0xC7, 0x30, 0x21, 0x1B, 0xF4, 0x48, 0x41, 0x32, 0xA0, 0xFC, 0x3C, 0x9E, 0x3C, 0x41, 0xB3, 0x3F, 0x21, 0x78, 0x27, 0x4E, 0x65, 0x5C, 0x10, 0x0A, 0xF4, 0x72, 0x1C, 0xFF, 0xEE, 0x62, 0x47, 0xDB, 0x10, 0x2F, 0xA9, 0x5F, 0xE4, 0x81, 0x60, 0xBD, 0x4E, 0x95, 0xFC, 0xBE, 0x08, 0x8E, 0x4F, 0xB5, 0xAE, 0xDF, 0x90, 0x04, 0x78, 0x43, 0x13, 0xE0, 0x81, 0x03, 0x73, 0xE1, 0x1A, 0x81, 0x50, 0x3B, 0xFB, 0xFA, 0x75, 0xF4, 0x77, 0xF4, 0x6C, 0xA7, 0xCA, 0xBA, 0x5D, 0x8E, 0x25, 0x00, 0xD5, 0x6E, 0x8B, 0x7C, 0x4B, 0xE4, 0x6C, 0x0D, 0x6D, 0x24, 0xA0, 0x01, 0xDC, 0xB2, 0x60, 0x36, 0x64, 0xEA, 0x0E, 0x80, 0xDB, 0x93, 0xEE, 0xE6, 0x69, 0x88, 0x9E, 0xA0, 0x21, 0x91, 0x56, 0x69, 0xCB, 0xB0, 0xF2, 0xBB, 0x9B, 0x2B, 0x42, 0x8F, 0xF4, 0xB8, 0x51, 0xF7, 0x67, 0x58, 0xEF, 0x45, 0xBC, 0xA4, 0xF4, 0x5D, 0x5E, 0x15, 0x13, 0x79, 0xBC, 0x9B, 0xAE, 0xAA, 0xA1, 0x01, 0x71, 0x80, 0xA4, 0x7D, 0xE4, 0x38, 0x0C, 0x8C, 0xD2, 0x44, 0x8C, 0xD2, 0xE6, 0x68, 0x1F, 0x2F, 0xD1, 0x51, 0xED, 0x2F, 0x9E, 0x49, 0xBD, 0xA4, 0xCC, 0x25, 0x67, 0xE7, 0x7F, 0xD5, 0x76, 0x53, 0x4D, 0x24, 0xE0, 0xD5, 0x08, 0x20, 0x0E, 0x90, 0xB5, 0x93, 0xDF, 0xEA, 0x8D, 0x03, 0xB0, 0x03, 0x67, 0x36, 0xB3, 0x9C, 0x4F, 0x80, 0xD1, 0x04, 0x2D, 0xBE, 0xF1, 0x75, 0x0E, 0x5F, 0x5A, 0x73, 0xE6, 0x89, 0x39, 0x4B, 0xB1, 0x7E, 0x6D, 0xC9, 0x88, 0xC3, 0xA3, 0x98, 0xA4, 0x32, 0x87, 0x59, 0x54, 0xF2, 0xDE, 0x49, 0x6C, 0x3A, 0xBD, 0xA6, 0xC6, 0xF4, 0x3C, 0x7A, 0xE8, 0xBA, 0xE7, 0x5D, 0xD5, 0x01, 0x0B, 0x40, 0xAB, 0x91, 0xAD, 0xD7, 0x3A, 0x93, 0xB1, 0x8D, 0x0C, 0x7C, 0x11, 0xFF, 0x83, 0x5D, 0x93, 0x75, 0xC9, 0xDF, 0xE3, 0x2C, 0x77, 0x98, 0x75, 0x2C, 0x6A, 0x9F, 0xB4, 0xBA, 0x07, 0x20, 0xF4, 0xE4, 0xCA, 0x7C, 0x7F, 0xD2, 0x04, 0x2A, 0xE6, 0xEA, 0xD0, 0x60, 0x60, 0x1C, 0x11, 0xE2, 0x00, 0x5A, 0x80, 0x73, 0x7F, 0x4B, 0x4E, 0xCC, 0x12, 0x26, 0xA8, 0x61, 0x2B, 0x66, 0xE1, 0x70, 0xAD, 0x34, 0x4B, 0x34, 0xE5, 0x67, 0x87, 0x2E, 0xA9, 0xFD, 0x58, 0x13, 0x2D, 0x1C, 0xAF, 0x3E, 0x1F, 0xEB, 0x2F, 0xBF, 0x79, 0xAF, 0xE6, 0x35, 0x0A, 0x1C, 0x1D, 0x0A, 0xBE, 0xE3, 0xD9, 0x15, 0x40, 0x14, 0xE0, 0x0A, 0x94, 0x5E, 0x91, 0xFF, 0x6B, 0xFB, 0xC2, 0x33, 0x00, 0x54, 0x1D, 0x2D, 0xBF, 0x55, 0xCC, 0x40, 0x98, 0x3C, 0x77, 0x91, 0xC6, 0x73, 0x5F, 0xB1, 0x83, 0x00, 0x3D, 0x80, 0x10, 0xC0, 0xD1, 0x28, 0x40, 0x1B, 0x6F, 0x37, 0xCC, 0x79, 0xDA, 0x1F, 0x5C, 0x00, 0x55, 0xC0, 0x72, 0x72, 0x56, 0x13, 0x34, 0x54, 0xD6, 0xAB, 0x74, 0x25, 0x1F, 0x99, 0xBD, 0x2F, 0x04, 0x88, 0xAE, 0x95, 0xE3, 0x05, 0xE0, 0xDE, 0x26, 0x8E, 0xA3, 0x9B, 0xF6, 0x06, 0xAD, 0x1E, 0x35, 0xAB, 0x31, 0x15, 0x9D, 0xAD, 0x49, 0xA8, 0xAF, 0xED, 0x0D, 0x61, 0x40, 0x1D, 0xC8, 0xD3, 0x71, 0x6D, 0x35, 0x0A, 0x1E, 0x81, 0x60, 0x05, 0xE6, 0x88, 0x3B, 0xCF, 0x2A, 0xCF, 0xED, 0x82, 0x6E, 0x39, 0xF0, 0xCE, 0xE2, 0xC6, 0x4D, 0xD5, 0xA6, 0x02, 0x77, 0x38, 0x28, 0x80, 0xB4, 0x06, 0x35, 0x6C, 0x87, 0xC9, 0x02, 0xC8, 0xC1, 0x01, 0x9C, 0x00, 0xBE, 0x61, 0x02, 0x58, 0x81, 0x9C, 0x63, 0x9A, 0x1E, 0x64, 0x86, 0x7A, 0x19, 0x85, 0xF8, 0x77, 0x13, 0xD0, 0xE0, 0xD6, 0x3F, 0xF6, 0x3F, 0x58, 0x76, 0xD2, 0x0F, 0xA9, 0xE2, 0x9A, 0x7F, 0x64, 0xA6, 0x3C, 0x9F, 0xE6, 0xEE, 0x49, 0xBD, 0xFB, 0x95, 0x54, 0xEA, 0xA0, 0x8D, 0x0A, 0x74, 0xC3, 0x19, 0x50, 0x07, 0x28, 0x1A, 0x04, 0xD4, 0xE8, 0x3E, 0xD3, 0xCF, 0x2A, 0x6C, 0xAC, 0x67, 0x6A, 0xBC, 0x4C, 0x6F, 0x29, 0x75, 0x99, 0x45, 0xC7, 0xFD, 0x3D, 0x2B, 0x00, 0x77, 0x40, 0x02, 0x20, 0x06, 0x8E, 0x37, 0xA4, 0x11, 0x80, 0x30, 0x10, 0xB9, 0xA7, 0x9A, 0xAB, 0x80, 0x68, 0xD8, 0x13, 0x3B, 0x9D, 0xCA, 0xA8, 0x4E, 0xD0, 0xE8, 0x4F, 0x7D, 0xE7, 0xDE, 0xEE, 0x7F, 0x49, 0xFD, 0x5E, 0x00, 0xC6, 0x8C, 0x7B, 0x41, 0x1A, 0x36, 0x52, 0x31, 0xDC, 0xA5, 0x53, 0xF0, 0xF7, 0xF4, 0xBC, 0x4A, 0xFE, 0xB3, 0x18, 0x35, 0x7F, 0x45, 0xC8, 0xB3, 0x73, 0x30, 0x90, 0x04, 0xE8, 0x28, 0xDC, 0xBC, 0xAD, 0xCC, 0xF6, 0xFC, 0x0F, 0x05, 0x68, 0xEC, 0xA4, 0x2E, 0xD1, 0xAC, 0xE5, 0xDD, 0xEF, 0x57, 0x04, 0xC4, 0x69, 0x08, 0xE0, 0xD5, 0x38, 0x80, 0x65, 0x23, 0x00, 0x3F, 0xCF, 0x14, 0x76, 0x83, 0x15, 0xA0, 0xA7, 0x59, 0x24, 0x1B, 0x61, 0x5B, 0x34, 0x52, 0xCE, 0x04, 0x8D, 0xBF, 0x97, 0xA7, 0xB0, 0x7E, 0x61, 0x52, 0x3B, 0x1F, 0x9C, 0x30, 0xED, 0x49, 0x1E, 0x18, 0xE4, 0x13, 0xC7, 0x10, 0x92, 0x08, 0x54, 0x3E, 0x42, 0x27, 0x8D, 0xF6, 0x24, 0x39, 0x26, 0x25, 0xBD, 0x66, 0xE9, 0x20, 0x52, 0xB0, 0x8B, 0x51, 0x45, 0x80, 0xCA, 0x38, 0xBE, 0x6E, 0x43, 0xF1, 0xC9, 0xBF, 0x30, 0xF5, 0x42, 0x95, 0x9D, 0xD4, 0x3D, 0x31, 0x01, 0x9D, 0x47, 0x70, 0x35, 0x5C, 0x89, 0x3E, 0x07, 0xFB, 0xD3, 0xA8, 0x86, 0xFC, 0x0B, 0x8F, 0x4D, 0x02, 0x3D, 0xFA, 0x55, 0xE2, 0xC0, 0xB4, 0x27, 0x66, 0x00, 0xDE, 0xC8, 0xDB, 0x53, 0x33, 0x41, 0xFB, 0xF5, 0xDA, 0x7E, 0x2F, 0x64, 0x42, 0xBD, 0xB3, 0x20, 0x60, 0x10, 0xD1, 0x8D, 0xE9, 0xCC, 0xF8, 0x23, 0xDD, 0x31, 0xFC, 0x56, 0xF1, 0x5D, 0x08, 0xDE, 0x95, 0x76, 0xDF, 0xF2, 0x93, 0x9D, 0x0F, 0x7B, 0x3C, 0x98, 0x63, 0xC0, 0x80, 0xD8, 0xEA, 0x80, 0x74, 0x06, 0xF2, 0x36, 0x88, 0x3D, 0x03, 0xB3, 0x16, 0xAB, 0xC3, 0x6F, 0x57, 0xDB, 0xE4, 0xEF, 0x15, 0xFB, 0xBD, 0x65, 0x1A, 0xC0, 0x02, 0x9C, 0x6C, 0x48, 0x83, 0x1A, 0xCF, 0x70, 0x90, 0xBD, 0x1A, 0xF6, 0x8F, 0x50, 0x9F, 0xD8, 0xA3, 0x13, 0xA0, 0x40, 0xF2, 0x04, 0x4D, 0x97, 0xEF, 0x00, 0x7D, 0xCF, 0x65, 0x21, 0xBB, 0x01, 0x81, 0x87, 0x44, 0xD9, 0x5A, 0x15, 0x27, 0x30, 0x92, 0x5E, 0x70, 0x0A, 0x3F, 0xD4, 0x37, 0x68, 0x73, 0x71, 0xD6, 0x67, 0x26, 0xAE, 0x66, 0x0A, 0x8E, 0x80, 0xD3, 0xCF, 0x9E, 0xC9, 0xEE, 0xFE, 0xD2, 0x86, 0x3D, 0xB3, 0x9F, 0xAE, 0xFD, 0x2D, 0x6B, 0xCA, 0xCB, 0xEE, 0xE9, 0xE9, 0xBD, 0x54, 0xB3, 0x01, 0x34, 0x9F, 0xAA, 0x91, 0x00, 0x55, 0xC3, 0x1E, 0x04, 0x20, 0x8D, 0x78, 0xBD, 0x25, 0x1C, 0x88, 0x7C, 0x14, 0x25, 0xFD, 0x99, 0x2B, 0x96, 0x09, 0x9A, 0xA1, 0x03, 0x92, 0x13, 0xAF, 0x2D, 0x0F, 0x08, 0xF5, 0x29, 0x46, 0x30, 0x0E, 0xCA, 0x4F, 0x64, 0xDA, 0x13, 0x7C, 0x31, 0x55, 0x87, 0xDA, 0x76, 0x51, 0xBB, 0xD3, 0x4A, 0x6F, 0x16, 0xF0, 0x3A, 0x7D, 0xB1, 0xEE, 0x84, 0xF1, 0xF8, 0xBB, 0x84, 0x3C, 0xB7, 0x77, 0x03, 0x64, 0xEE, 0xEB, 0xBE, 0xA7, 0xB7, 0x5D, 0xE6, 0x4F, 0x59, 0x3A, 0x9A, 0xA5, 0xBB, 0x2B, 0x97, 0x6B, 0x5E, 0x04, 0xFB, 0x60, 0x4F, 0x07, 0x38, 0xD6, 0xC8, 0x0D, 0x32, 0x40, 0x02, 0x08, 0x03, 0xAA, 0x1A, 0x0A, 0x44, 0x01, 0x16, 0x80, 0x12, 0x60, 0x53, 0xD1, 0xB8, 0x2B, 0xCD, 0xBF, 0xFE, 0x97, 0x2A, 0x98, 0xB0, 0xBB, 0xC3, 0x91, 0x8C, 0x03, 0x5A, 0x09, 0xC7, 0x02, 0x5B, 0x2F, 0x39, 0xDE, 0xC4, 0xEE, 0xDF, 0xCE, 0x4D, 0x7C, 0x95, 0xF9, 0xC0, 0xF3, 0xCC, 0x5E, 0x4C, 0xBE, 0x99, 0x9E, 0x79, 0x4B, 0x97, 0x06, 0x03, 0xA2, 0xFB, 0x08, 0x39, 0x53, 0x77, 0x3A, 0x8F, 0x67, 0x4E, 0x65, 0xD4, 0x3B, 0x4C, 0xD3, 0x23, 0xE5, 0x3D, 0xE6, 0xF9, 0x6B, 0xE9, 0xB1, 0xC9, 0xAE, 0x03, 0x38, 0xB5, 0x37, 0x04, 0x88, 0x86, 0x1F, 0xC0, 0xAC, 0x21, 0x0D, 0x07, 0x42, 0xB7, 0xC6, 0x82, 0xF0, 0xE3, 0x73, 0x98, 0x6F, 0x8F, 0x42, 0x63, 0xBE, 0xF3, 0x4C, 0xD0, 0xE2, 0x6B, 0x50, 0xB6, 0x43, 0x28, 0xA9, 0xB3, 0x7C, 0xE7, 0x34, 0x52, 0x82, 0xE4, 0xB1, 0x58, 0xE7, 0xD8, 0xA9, 0x45, 0x35, 0xB4, 0xA5, 0x20, 0xFC, 0xFA, 0xFB, 0x7F, 0x9C, 0x5C, 0xFD, 0xEC, 0xC1, 0x35, 0x69, 0x9F, 0xB9, 0x18, 0x90, 0xF5, 0xEC, 0x30, 0x03, 0x62, 0x5B, 0x57, 0x45, 0x19, 0xE0, 0x03, 0xDC, 0x1B, 0x3A, 0xED, 0x41, 0xE4, 0xF1, 0xC3, 0xD5, 0x9C, 0xCA, 0xD6, 0xCE, 0x13, 0xC9, 0xEC, 0x77, 0xF3, 0xC8, 0x03, 0xEE, 0x1B, 0x96, 0xFF, 0x80, 0x2B, 0x30, 0xAF, 0x21, 0x6D, 0x44, 0xC3, 0x1B, 0xCA, 0x7B, 0x37, 0x49, 0xED, 0x4F, 0x04, 0xF8, 0x0D, 0x5A, 0xFE, 0x71, 0x34, 0x77, 0xCF, 0xE1, 0x16, 0xC7, 0xA5, 0xA3, 0x5D, 0x8C, 0x32, 0x84, 0x89, 0xAD, 0x6F, 0x80, 0xD6, 0xEE, 0xDC, 0x08, 0x56, 0xFD, 0x53, 0xA1, 0x2F, 0x67, 0xEC, 0x2A, 0xE6, 0xA0, 0x65, 0xAD, 0xCD, 0xD4, 0x48, 0x02, 0xC2, 0x01, 0xAB, 0xC6, 0xD2, 0xB5, 0xC2, 0x5D, 0x1E, 0x37, 0x2D, 0xC5, 0xA7, 0x50, 0x7C, 0x8B, 0x4C, 0x3B, 0x25, 0xFF, 0x9C, 0x8B, 0xF4, 0x1A, 0x1C, 0x9C, 0xD8, 0x1D, 0xBB, 0xE6, 0x00, 0xD1, 0x2C, 0x5B, 0x20, 0xAC, 0xC1, 0x8D, 0xD8, 0xD5, 0x12, 0x0D, 0x20, 0x18, 0xF0, 0x04, 0xEC, 0x29, 0xA9, 0x9F, 0x02, 0x98, 0x80, 0xA4, 0x0E, 0x5A, 0x7D, 0xB2, 0x86, 0x8A, 0x73, 0xAC, 0xAA, 0x68, 0xFB, 0x05, 0xD8, 0xF7, 0x78, 0x66, 0x57, 0x52, 0x84, 0xA8, 0xC5, 0xCA, 0xAA, 0x6F, 0x04, 0x09, 0xF7, 0xD3, 0x77, 0xDA, 0x73, 0xB7, 0xAD, 0xD3, 0x1C, 0xE2, 0xE3, 0x76, 0xC4, 0x2B, 0x01, 0x75, 0x80, 0x20, 0x40, 0x0A, 0x20, 0x6B, 0x14, 0x60, 0xA7, 0x31, 0x32, 0xAE, 0xFA, 0x13, 0xF9, 0xD1, 0xDB, 0xD4, 0x20, 0xBE, 0x3B, 0x76, 0xCF, 0xDE, 0x94, 0xDC, 0x01, 0x49, 0x80, 0xA2, 0xC1, 0x0D, 0x6A, 0x38, 0x20, 0x8D, 0x50, 0xA0, 0xBC, 0xC1, 0x40, 0x24, 0x60, 0x06, 0x28, 0x01, 0xB3, 0x96, 0xEF, 0xE1, 0xD6, 0xE0, 0x43, 0x43, 0xB0, 0xC7, 0x66, 0x16, 0xD3, 0xD5, 0x6A, 0x65, 0x2C, 0xD8, 0x97, 0x3B, 0x04, 0x1E, 0x23, 0xFF, 0x16, 0x3F, 0xCD, 0xEE, 0x3C, 0xCF, 0x85, 0x5D, 0xAF, 0x98, 0x23, 0xFF, 0x86, 0x38, 0xE1, 0x60, 0x05, 0xCF, 0x11, 0x05, 0xA6, 0xB9, 0xC6, 0x46, 0x56, 0x2D, 0x00, 0xE5, 0xDF, 0xDA, 0x32, 0x04, 0x9B, 0xF5, 0x31, 0x22, 0x9A, 0xF2, 0x4A, 0xFC, 0xED, 0x33, 0xA5, 0xDF, 0xBC, 0x82, 0x5C, 0x8F, 0x91, 0x6C, 0x98, 0x01, 0xA2, 0x00, 0x57, 0x23, 0x01, 0x11, 0xC0, 0x7C, 0xA7, 0xDC, 0x49, 0x1B, 0x93, 0x44, 0x4E, 0x20, 0xCF, 0xD3, 0xB1, 0x4B, 0xF3, 0xC2, 0xEA, 0xA0, 0xD1, 0x37, 0xEE, 0x99, 0x93, 0xE4, 0x98, 0x9B, 0x60, 0x05, 0xF4, 0x6D, 0xA9, 0xB0, 0xC4, 0xFA, 0xFE, 0xE4, 0xCA, 0xBF, 0xBB, 0x67, 0xE9, 0xDB, 0x11, 0xCF, 0xF5, 0x5C, 0xD8, 0x8F, 0x6C, 0x51, 0x60, 0x4A, 0xC0, 0x0F, 0x60, 0x0D, 0x11, 0x80, 0x13, 0x08, 0xDE, 0x86, 0x7F, 0xCE, 0x00, 0xF7, 0x77, 0xFA, 0x98, 0x08, 0xFA, 0x96, 0xA6, 0x3E, 0xBA, 0x3D, 0x58, 0xCA, 0x00, 0x0B, 0x80, 0x1D, 0x38, 0xD6, 0x38, 0x0F, 0x0C, 0xE0, 0x86, 0x15, 0x90, 0x07, 0x88, 0x00, 0xDC, 0x00, 0x0D, 0x40, 0xE6, 0x53, 0x01, 0xA5, 0x1D, 0x34, 0xFE, 0x4E, 0x17, 0x7C, 0xBB, 0x85, 0xA6, 0xFE, 0xE7, 0x18, 0x08, 0x16, 0xC6, 0x63, 0x25, 0x86, 0x7A, 0x5A, 0xE5, 0x87, 0x3A, 0xF2, 0x6D, 0xFC, 0xF9, 0x78, 0x14, 0xDF, 0x9B, 0x6F, 0xFE, 0x02, 0xC2, 0xD1, 0x1B, 0x15, 0x9E, 0x47, 0x88, 0xE6, 0x17, 0xC0, 0xBD, 0xDE, 0xCA, 0x80, 0x19, 0x3D, 0x56, 0x86, 0xE4, 0x57, 0x75, 0x8D, 0x9A, 0xA6, 0x24, 0x36, 0x9E, 0x3F, 0xFD, 0x87, 0x8D, 0xC4, 0x98, 0x8C, 0xC9, 0x75, 0x75, 0xAC, 0x73, 0xB7, 0x8C, 0x48, 0xCC, 0xAE, 0x07, 0x04, 0x01, 0x6E, 0x1B, 0x31, 0x2A, 0xA0, 0x0C, 0x68, 0x02, 0x21, 0x8D, 0x03, 0x98, 0x01, 0x22, 0x00, 0x15, 0x20, 0x0C, 0x94, 0x75, 0xCC, 0x64, 0x0D, 0x2E, 0x96, 0xB6, 0x70, 0x82, 0x41, 0x5F, 0xC2, 0xD2, 0x70, 0x1C, 0x2C, 0x46, 0x15, 0x87, 0x14, 0x05, 0x1B, 0xC7, 0xD9, 0x76, 0x5E, 0x9E, 0x2A, 0xAF, 0x2B, 0x76, 0xEC, 0xBC, 0x9D, 0x0C, 0x18, 0x38, 0xB4, 0xFB, 0x61, 0xB9, 0x1E, 0x0F, 0xDE, 0x55, 0x10, 0xD1, 0xDB, 0x0B, 0x6A, 0xCF, 0xE5, 0x8F, 0x9F, 0x71, 0x44, 0x4B, 0x40, 0x05, 0x78, 0x8D, 0xCC, 0x49, 0x1A, 0xFC, 0x2F, 0x38, 0x20, 0x8F, 0x51, 0x72, 0x45, 0xE3, 0x00, 0xC1, 0x80, 0x3A, 0x20, 0x8F, 0x55, 0x48, 0xDD, 0x2D, 0x4D, 0xBF, 0x64, 0x37, 0x7F, 0x99, 0x5A, 0xF8, 0xCF, 0x60, 0x82, 0xDC, 0xF4, 0x7B, 0x3A, 0x0D, 0x55, 0x4F, 0x66, 0x4B, 0xDC, 0xFD, 0x2D, 0x71, 0xCA, 0x8A, 0x5C, 0x65, 0x15, 0xE7, 0x25, 0x9E, 0x36, 0xE9, 0xCD, 0x11, 0xC2, 0xC0, 0xE4, 0x18, 0xE0, 0x0A, 0xC8, 0xBC, 0xA9, 0x1C, 0x38, 0x4F, 0xC9, 0x85, 0xA9, 0xA1, 0x7F, 0x3F, 0xD5, 0xDD, 0x7B, 0x55, 0x76, 0xF3, 0x9F, 0x3E, 0xC3, 0x65, 0x69, 0x8D, 0xD7, 0x54, 0xEF, 0x34, 0x12, 0x70, 0x6B, 0x24, 0x10, 0xFA, 0xBA, 0x63, 0x02, 0xE6, 0x8D, 0xF3, 0xE4, 0x48, 0x0C, 0x38, 0x07, 0x20, 0x06, 0x2C, 0x26, 0x68, 0xF6, 0x27, 0x1D, 0x05, 0xBC, 0xF8, 0x72, 0xD8, 0xFA, 0x6D, 0x70, 0xC6, 0x28, 0xB3, 0x1F, 0x37, 0xD4, 0x97, 0x24, 0xFB, 0xA8, 0xD8, 0xAE, 0x81, 0xA5, 0x73, 0xF5, 0x7C, 0x7A, 0xBB, 0x97, 0x81, 0x84, 0xDD, 0x04, 0xBC, 0x19, 0xE0, 0x0D, 0xAE, 0x2D, 0x42, 0x3B, 0xF9, 0xB7, 0xE2, 0x06, 0x3D, 0xBF, 0x35, 0x03, 0x87, 0xF7, 0xF9, 0xD5, 0x0D, 0x20, 0x7F, 0x4A, 0x27, 0x05, 0x58, 0xEE, 0x51, 0x45, 0x49, 0x40, 0x0B, 0x30, 0x6B, 0x24, 0xE0, 0x02, 0x24, 0x6F, 0x39, 0x30, 0xC9, 0x86, 0x3C, 0x06, 0xF1, 0x01, 0xA4, 0x00, 0x35, 0xDF, 0x79, 0x83, 0xE6, 0x5F, 0x2F, 0x5F, 0x9C, 0xFC, 0xD4, 0x99, 0x2C, 0xFD, 0x3B, 0x6A, 0x38, 0x63, 0x82, 0x5D, 0x83, 0x31, 0x17, 0xC3, 0x85, 0xDF, 0x39, 0x15, 0xAF, 0x5E, 0x3F, 0x4B, 0xC9, 0x24, 0xDE, 0x24, 0xC7, 0x36, 0x5C, 0x2B, 0x00, 0xA7, 0x03, 0x1E, 0x7D, 0xBE, 0x0F, 0x72, 0xB6, 0x32, 0x0D, 0x37, 0x24, 0xFB, 0x04, 0xC9, 0x80, 0xF9, 0x7C, 0x9A, 0x4B, 0xEA, 0x6C, 0x97, 0xBB, 0xDC, 0x59, 0x0C, 0x48, 0x01, 0xF6, 0xE8, 0x6A, 0x4B, 0x3D, 0x72, 0xBE, 0xDC, 0x30, 0x20, 0x08, 0x28, 0xDE, 0x9D, 0x47, 0xA6, 0x8F, 0x92, 0x89, 0x00, 0xA7, 0xF6, 0x77, 0x9E, 0x57, 0xC9, 0xC4, 0x02, 0xD3, 0x9E, 0x4C, 0x9F, 0x78, 0x9A, 0x10, 0xEE, 0xEB, 0xD1, 0x43, 0x3E, 0x22, 0x8A, 0x69, 0x4B, 0x22, 0x3C, 0x17, 0x9A, 0x5F, 0xD0, 0x58, 0x15, 0xB3, 0x77, 0xEF, 0x4A, 0xA3, 0xF8, 0x95, 0x60, 0xF3, 0x5A, 0xF8, 0x96, 0x77, 0xD0, 0xF8, 0x19, 0xEC, 0xD4, 0x7D, 0x86, 0x3F, 0x4F, 0xB7, 0x61, 0xAD, 0xA0, 0xE5, 0xBD, 0xD2, 0x5B, 0xEE, 0xC6, 0x52, 0x7F, 0xBA, 0xDD, 0x59, 0x01, 0xA7, 0x9D, 0x92, 0xE6, 0x86, 0x15, 0x10, 0x01, 0xA4, 0x01, 0x35, 0x9D, 0x59, 0x8D, 0xFB, 0xE3, 0x7A, 0xE3, 0xEC, 0xAB, 0xA7, 0x06, 0xC0, 0x0A, 0xE8, 0x79, 0x8F, 0x69, 0xF9, 0x3D, 0x9E, 0xAC, 0x06, 0xEF, 0x70, 0xC2, 0x14, 0x76, 0x95, 0xFF, 0x11, 0xE4, 0x35, 0xE0, 0x9A, 0x45, 0x78, 0x2E, 0x89, 0xB4, 0xFF, 0xBA, 0x44, 0xB0, 0xDE, 0x61, 0x6C, 0x7E, 0xA6, 0x08, 0xE6, 0x92, 0x52, 0x72, 0xB6, 0x74, 0x86, 0x01, 0x87, 0xB6, 0x9A, 0xA1, 0xC9, 0xD3, 0x0C, 0xDC, 0xF0, 0xDC, 0x6B, 0x2B, 0x64, 0x6F, 0x5F, 0x67, 0x92, 0x81, 0x6F, 0x57, 0x01, 0xEF, 0x0B, 0x25, 0x35, 0x38, 0x00, 0xB1, 0x46, 0x01, 0x6A, 0x80, 0xCF, 0x01, 0x89, 0x01, 0xA9, 0x06, 0x6F, 0x55, 0xF8, 0x74, 0xC0, 0x1B, 0xA9, 0x53, 0x76, 0x98, 0xA0, 0xD5, 0x77, 0x8B, 0x2A, 0xF5, 0xCE, 0x41, 0x16, 0xAA, 0x9E, 0x26, 0x5F, 0x3A, 0x4D, 0xA5, 0x30, 0x12, 0x40, 0x81, 0x4A, 0xC1, 0x88, 0x80, 0x74, 0xE2, 0x76, 0x8D, 0x5E, 0x6C, 0xC5, 0xB9, 0x9B, 0x7C, 0xF4, 0x9F, 0xCA, 0x92, 0xDE, 0xA3, 0x63, 0xF0, 0x34, 0x61, 0x01, 0xA4, 0x7B, 0x1A, 0x49, 0x19, 0xC8, 0xB9, 0xB9, 0xDA, 0xD6, 0xD3, 0x11, 0x2C, 0x54, 0x59, 0xE2, 0x2C, 0x71, 0x3B, 0x18, 0x6B, 0x8D, 0xCA, 0xE7, 0x15, 0x62, 0x22, 0x07, 0xFC, 0x00, 0xE9, 0xCF, 0xAA, 0x3F, 0x01, 0x88, 0x00, 0xF7, 0xA5, 0x34, 0xAD, 0xA4, 0x05, 0xA4, 0x00, 0x96, 0x4F, 0x73, 0xC0, 0x14, 0xBF, 0x14, 0x41, 0xF3, 0x9F, 0x35, 0xF1, 0xF7, 0x8F, 0xCB, 0x7F, 0x5C, 0xA1, 0x03, 0xAF, 0xDD, 0xBA, 0x8E, 0x2A, 0xBB, 0x23, 0xD1, 0xAB, 0xF9, 0xAD, 0x3B, 0x57, 0xDA, 0x9D, 0x1C, 0xBA, 0x72, 0x90, 0xBC, 0x05, 0xDD, 0xB0, 0x2D, 0x00, 0x94, 0x5B, 0x75, 0xD7, 0x18, 0xA0, 0xB3, 0xFF, 0x05, 0x4F, 0x00, 0x51, 0x5B, 0x40, 0x61, 0xD6, 0xD6, 0xF6, 0xFD, 0x94, 0x9B, 0x16, 0x13, 0x7F, 0x2D, 0x40, 0xF0, 0x45, 0x1A, 0x38, 0x70, 0xB2, 0xE1, 0x0F, 0x5E, 0xB5, 0xB5, 0xFA, 0x57, 0x0E, 0xB2, 0x9E, 0xA9, 0x85, 0x27, 0xBD, 0x19, 0xD3, 0xA6, 0xEC, 0xF4, 0xA5, 0xD3, 0x8A, 0x30, 0xDF, 0xC9, 0x1C, 0x6D, 0x4E, 0x24, 0x38, 0xA7, 0x1D, 0x85, 0x0D, 0xD2, 0xA9, 0x3F, 0xC8, 0xE2, 0x3A, 0x8E, 0xE0, 0x14, 0xA3, 0x70, 0xFE, 0x66, 0xBB, 0x1F, 0x99, 0xBE, 0xE9, 0x66, 0x51, 0x9E, 0x33, 0xFC, 0xD6, 0xFA, 0x32, 0x1B, 0xCB, 0x32, 0x40, 0x05, 0x30, 0xEE, 0x35, 0xB9, 0x1A, 0x27, 0xE5, 0x5E, 0x67, 0xA6, 0x41, 0xFD, 0xB4, 0x63, 0xDE, 0x73, 0xD9, 0x24, 0x06, 0x8E, 0x02, 0x9A, 0x40, 0x38, 0x90, 0x8D, 0xD2, 0x47, 0x7D, 0xDB, 0x00, 0x11, 0x20, 0xCF, 0xE4, 0x33, 0x1A, 0xF3, 0x45, 0x7B, 0x64, 0x87, 0x12, 0xD0, 0xC9, 0x75, 0x9D, 0x09, 0x1A, 0x2F, 0xD7, 0x40, 0x56, 0x18, 0x15, 0x5B, 0x55, 0x7B, 0x38, 0x31, 0xDE, 0xE7, 0x59, 0xAD, 0x04, 0xFB, 0xA1, 0xAC, 0xBE, 0x95, 0x26, 0xD3, 0x68, 0x25, 0xD9, 0xAC, 0x38, 0x8F, 0xFB, 0xFA, 0xE4, 0xDE, 0xA5, 0xC1, 0x00, 0x3D, 0x83, 0xFB, 0x5C, 0xC0, 0x31, 0x40, 0x64, 0xE7, 0xEC, 0xF3, 0x00, 0xF7, 0xF0, 0x17, 0x4F, 0xAB, 0xCB, 0x01, 0xCE, 0x88, 0x98, 0x3C, 0xCA, 0x2F, 0x2C, 0x80, 0x78, 0x83, 0x1A, 0x07, 0xE0, 0xDA, 0x5F, 0x34, 0x01, 0x2A, 0x1E, 0x83, 0x4A, 0xFF, 0x3F, 0x0C, 0x2A, 0x79, 0xBB, 0x7A, 0x9A, 0xCB, 0xDF, 0xA8, 0x7D, 0xC7, 0x4A, 0xFB, 0x5E, 0x9F, 0x45, 0x8A, 0x86, 0xAB, 0x52, 0xF8, 0x03, 0xA5, 0xA0, 0x05, 0x4C, 0x12, 0xA7, 0xC4, 0x88, 0xFD, 0x26, 0x38, 0xCB, 0x13, 0x5B, 0xFE, 0x4E, 0xD7, 0xCF, 0x24, 0x73, 0x00, 0xA5, 0x80, 0x33, 0x70, 0x9E, 0x21, 0xBC, 0x3A, 0x4F, 0x39, 0xB2, 0x00, 0x5D, 0xCE, 0x15, 0x7A, 0x4F, 0x68, 0xC9, 0xC0, 0x59, 0x11, 0xC1, 0xF4, 0x1D, 0x50, 0xCF, 0xB1, 0x3F, 0x1A, 0x13, 0xDE, 0x7C, 0xF0, 0x64, 0xC4, 0x5D, 0x80, 0x8C, 0xC6, 0xEB, 0x81, 0xDA, 0x60, 0x06, 0xC4, 0x80, 0x8C, 0x09, 0x9A, 0x7E, 0xDA, 0xAC, 0x69, 0x0C, 0xED, 0x24, 0xB6, 0x35, 0x1A, 0x15, 0x3C, 0x07, 0x7B, 0xFE, 0xC0, 0x5E, 0x78, 0xE6, 0x6A, 0x2E, 0x9D, 0x4F, 0xDD, 0x93, 0xD7, 0x58, 0x11, 0xF4, 0x45, 0x77, 0x07, 0xA4, 0x3A, 0x40, 0x82, 0x2F, 0x8E, 0x59, 0xC1, 0x24, 0x21, 0x5D, 0x81, 0x73, 0x76, 0x5F, 0x5A, 0x3E, 0x29, 0x0C, 0xF2, 0x49, 0x5A, 0xCC, 0x38, 0xC9, 0x0C, 0xE0, 0x3F, 0x7E, 0xE2, 0xFA, 0x34, 0x13, 0xDB, 0x64, 0x42, 0x01, 0x61, 0x40, 0x15, 0xB0, 0x46, 0x8C, 0x89, 0x4B, 0x83, 0xA9, 0xC1, 0x00, 0x19, 0x70, 0x06, 0xA7, 0x91, 0x80, 0x56, 0x07, 0xAD, 0xFD, 0xB4, 0x24, 0xD1, 0xF2, 0xCA, 0x33, 0xD1, 0x8B, 0x0B, 0x7B, 0x99, 0x77, 0x1E, 0xAC, 0xDA, 0xC7, 0xD7, 0x21, 0x99, 0x2D, 0xB6, 0x32, 0x43, 0xB5, 0xDD, 0x1B, 0xE6, 0x69, 0xC9, 0x6B, 0xC7, 0x96, 0x67, 0xAE, 0xDA, 0x00, 0x77, 0x63, 0xC7, 0x64, 0x1D, 0x5D, 0xB6, 0x5A, 0x7C, 0x28, 0x50, 0xB1, 0x95, 0xE4, 0xA5, 0x33, 0x43, 0x99, 0x7D, 0x45, 0xD7, 0xBF, 0x72, 0x59, 0x94, 0x93, 0xD4, 0xBD, 0x17, 0xF6, 0xD1, 0x1F, 0x3B, 0x0C, 0x64, 0xBB, 0x83, 0xEB, 0x01, 0x42, 0x80, 0xBC, 0x56, 0x10, 0x80, 0x1E, 0x60, 0x8C, 0xAE, 0xC9, 0x1A, 0xB2, 0xBB, 0x27, 0xF2, 0x00, 0xF1, 0x7C, 0xA7, 0x46, 0xC7, 0xCC, 0xFF, 0xD8, 0x17, 0x33, 0xFF, 0xD2, 0x0B, 0x3A, 0x7B, 0x3E, 0x07, 0xC4, 0x95, 0x53, 0xFB, 0xB2, 0x28, 0x2D, 0xCF, 0x68, 0x93, 0x93, 0xDD, 0x6E, 0x6E, 0xB9, 0x9A, 0x47, 0xD1, 0xC5, 0xDD, 0xF9, 0x42, 0xDF, 0x5D, 0xB5, 0xE5, 0x40, 0xCC, 0x6F, 0xFD, 0xF8, 0xD1, 0xD0, 0x08, 0xE7, 0x13, 0xC0, 0xCB, 0x86, 0x1A, 0x4D, 0x15, 0x58, 0xDA, 0x1F, 0xE4, 0xEF, 0x2A, 0x9A, 0xC6, 0x40, 0x9F, 0x3C, 0x35, 0xE0, 0xE7, 0x1F, 0x53, 0x28, 0x94, 0x80, 0x38, 0xA0, 0x06, 0x58, 0x23, 0x79, 0x0F, 0xB9, 0x1B, 0x01, 0x1A, 0x80, 0x08, 0x30, 0x6D, 0xD1, 0xE5, 0x33, 0xCF, 0x05, 0xD8, 0x2C, 0xB4, 0x40, 0x0E, 0x32, 0x0B, 0x39, 0xC0, 0x1C, 0x5D, 0xC6, 0x40, 0x89, 0x20, 0x08, 0x89, 0x7E, 0xD2, 0x6E, 0xCC, 0x4B, 0xFC, 0x8B, 0x79, 0xDE, 0x3A, 0xCA, 0xB5, 0xA5, 0xA1, 0xC7, 0x78, 0xFE, 0xF6, 0x4B, 0x59, 0x07, 0x6B, 0x72, 0x97, 0x71, 0x3B, 0x88, 0x6E, 0x27, 0x50, 0x67, 0xC0, 0xB9, 0xBB, 0x8B, 0xA2, 0xE1, 0x0C, 0xC8, 0xFC, 0xFB, 0x07, 0x62, 0x3D, 0x42, 0x28, 0x1A, 0x3F, 0xAF, 0x6F, 0xBD, 0x4F, 0x57, 0x48, 0x83, 0x26, 0xBA, 0xBB, 0xAF, 0x4B, 0x1E, 0x9F, 0x38, 0x3F, 0x8D, 0x9A, 0xCD, 0x00, 0x50, 0x07, 0xA2, 0xE1, 0x09, 0x68, 0x01, 0xCC, 0xFF, 0xE8, 0x87, 0x0F, 0xEF, 0x98, 0x25, 0x54, 0x6D, 0x39, 0xDA, 0x0D, 0xBE, 0x1B, 0x0F, 0x0C, 0x85, 0x63, 0x61, 0xEB, 0xD9, 0x32, 0xC5, 0x3F, 0xBB, 0x67, 0xAF, 0x8C, 0xC2, 0x42, 0x7B, 0xAF, 0x9E, 0x42, 0x8F, 0x54, 0xC2, 0xF4, 0x05, 0x8D, 0x19, 0xA0, 0x35, 0x5C, 0x80, 0xD3, 0x8F, 0x82, 0xD4, 0x7E, 0x06, 0x54, 0x01, 0x9E, 0x95, 0x79, 0x80, 0x63, 0x93, 0xE5, 0x1A, 0x61, 0xD7, 0x11, 0x9E, 0xDB, 0xD5, 0x40, 0xE6, 0xED, 0x32, 0x45, 0x06, 0x08, 0x35, 0x02, 0x50, 0x03, 0xEC, 0x34, 0x12, 0x48, 0x19, 0xB9, 0x67, 0x40, 0x09, 0x90, 0x6A, 0x1C, 0x80, 0x04, 0x38, 0xB4, 0x3F, 0x39, 0x75, 0xD0, 0xEA, 0x8F, 0x39, 0x0A, 0x9C, 0xFC, 0x65, 0x27, 0x7C, 0x96, 0x06, 0xFC, 0x29, 0xDD, 0x7B, 0x45, 0x4A, 0x4F, 0xB9, 0x00, 0xD1, 0xFA, 0x12, 0xF1, 0x6A, 0xE6, 0x88, 0x3E, 0xCA, 0xA3, 0x4A, 0xDB, 0x75, 0xFF, 0x48, 0x63, 0xFA, 0xB6, 0xAF, 0x97, 0x20, 0xA0, 0x05, 0x84, 0x77, 0x7C, 0x26, 0xB3, 0x28, 0x00, 0xCB, 0xCF, 0xF2, 0x02, 0x37, 0xE7, 0x7E, 0x37, 0x4C, 0xEE, 0x7A, 0x64, 0x14, 0x80, 0x13, 0x80, 0x09, 0x90, 0x53, 0x6B, 0x61, 0x80, 0xB4, 0x91, 0x00, 0x17, 0x60, 0xF3, 0x1A, 0x20, 0x80, 0xB3, 0x21, 0xC0, 0x89, 0x27, 0xD9, 0xDD, 0x88, 0x7E, 0x45, 0x08, 0x23, 0x68, 0xD1, 0x8F, 0x87, 0x19, 0x34, 0x88, 0x94, 0x57, 0x81, 0xA0, 0x12, 0xCF, 0xE3, 0xD4, 0x82, 0x2C, 0x04, 0xBB, 0xA4, 0xEB, 0xEE, 0xE8, 0x7B, 0x5F, 0x03, 0xB7, 0x9F, 0x6C, 0xFA, 0xA5, 0xBC, 0x0B, 0x04, 0x03, 0x19, 0x1F, 0x06, 0x80, 0x05, 0xDF, 0x62, 0x09, 0x1C, 0x69, 0x4B, 0x1F, 0xDA, 0xEF, 0x06, 0xAE, 0x9F, 0x3A, 0x24, 0xDF, 0x9F, 0x82, 0xFB, 0x91, 0x65, 0xEA, 0x3C, 0xB8, 0x02, 0x76, 0x80, 0x68, 0x64, 0x00, 0xD5, 0xDF, 0x79, 0x0A, 0x20, 0x03, 0x38, 0x00, 0x23, 0x20, 0x19, 0xA8, 0x7A, 0xE0, 0x8D, 0x03, 0x8C, 0x1B, 0xEB, 0x39, 0x80, 0x64, 0xC7, 0x0C, 0x66, 0x5A, 0xE2, 0x50, 0x64, 0x0D, 0x93, 0x35, 0x4C, 0x96, 0x22, 0xF8, 0x0B, 0x38, 0xF1, 0x0A, 0x73, 0xFD, 0x7E, 0x3D, 0x62, 0xC6, 0x74, 0xCA, 0xF3, 0xEA, 0x34, 0xFB, 0xCD, 0xB9, 0xCE, 0x23, 0x27, 0x78, 0x6B, 0xE1, 0xDD, 0x62, 0x40, 0xCD, 0xA7, 0x0F, 0xDF, 0x8D, 0x05, 0xC0, 0x05, 0x89, 0xAE, 0x5B, 0x48, 0xE8, 0xEE, 0x82, 0x74, 0x43, 0x3C, 0x6B, 0x05, 0x92, 0xEF, 0x9B, 0x25, 0x69, 0xFB, 0x73, 0x9D, 0x79, 0x63, 0x0B, 0xE0, 0x09, 0x58, 0x34, 0x12, 0x70, 0x06, 0x82, 0xE6, 0x7F, 0x00, 0x94, 0x00, 0xF7, 0x0D, 0x13, 0x40, 0x1C, 0x60, 0xDB, 0x9F, 0x8A, 0x3A, 0x66, 0xDC, 0xD6, 0x2F, 0xB8, 0x83, 0x7B, 0x3D, 0xBA, 0xC0, 0x47, 0x05, 0xE5, 0x63, 0x67, 0x94, 0x0B, 0x82, 0x3E, 0xC4, 0x57, 0x09, 0xED, 0x97, 0x24, 0xE2, 0x0F, 0x5A, 0xFD, 0x3A, 0x05, 0xB8, 0xCD, 0x9C, 0xC5, 0x3B, 0x3E, 0xDF, 0x32, 0x00, 0xA2, 0x00, 0x22, 0x28, 0xF6, 0x8B, 0xA1, 0x77, 0xD0, 0x15, 0x18, 0x87, 0x10, 0xFD, 0x60, 0x1D, 0xD0, 0x9E, 0x64, 0x92, 0x6E, 0xA9, 0x14, 0x9C, 0xF5, 0x3B, 0x93, 0x80, 0xB8, 0x12, 0x23, 0xAE, 0xCC, 0xFD, 0xA2, 0x49, 0x40, 0x0D, 0x60, 0x01, 0x88, 0x1B, 0xD6, 0x08, 0x80, 0x0B, 0x30, 0x05, 0x6A, 0x84, 0x21, 0x68, 0xE3, 0xCC, 0x7F, 0xB3, 0x41, 0x7F, 0x51, 0x00, 0x73, 0x04, 0xED, 0x37, 0x44, 0x56, 0x5F, 0x21, 0x02, 0xC3, 0x8B, 0x92, 0x85, 0xF0, 0x28, 0x2A, 0x03, 0x2D, 0xD2, 0x57, 0x99, 0x86, 0x39, 0xBC, 0xC8, 0x75, 0x87, 0x32, 0x5A, 0x92, 0x1C, 0x7C, 0x6D, 0x74, 0x44, 0xDE, 0xD6, 0xEA, 0xAD, 0xFC, 0x78, 0x6E, 0x83, 0xD4, 0x33, 0x23, 0x71, 0x00, 0x55, 0xE0, 0xDA, 0x29, 0xCF, 0xD8, 0x58, 0x00, 0x52, 0x0D, 0x01, 0x98, 0x1B, 0x02, 0x98, 0xEC, 0x76, 0xA0, 0xF7, 0xB6, 0xF4, 0x6F, 0x39, 0xC8, 0xD8, 0xCA, 0x74, 0x9C, 0x8D, 0xB3, 0xB5, 0xF5, 0xA3, 0x61, 0x0C, 0x78, 0xDC, 0x2E, 0xB6, 0x0E, 0x9A, 0x7E, 0xD1, 0xF2, 0x5F, 0xE3, 0x50, 0x7D, 0xCA, 0x23, 0x89, 0xEC, 0x6D, 0x29, 0xB2, 0x02, 0x5A, 0x48, 0x23, 0x88, 0xA3, 0x07, 0x9F, 0x6D, 0x35, 0x76, 0xC7, 0x92, 0xE4, 0xC0, 0xBD, 0x63, 0x8F, 0xCC, 0x08, 0x01, 0x94, 0xBB, 0xF9, 0xCE, 0x5F, 0xE7, 0xCC, 0xD7, 0x9F, 0xBA, 0x11, 0x09, 0x70, 0x6E, 0x57, 0x7F, 0x3B, 0x80, 0xFA, 0x0E, 0xA1, 0x12, 0xE0, 0xF6, 0xC8, 0x16, 0xE6, 0x13, 0x26, 0x69, 0x58, 0x23, 0x00, 0x33, 0x20, 0xFD, 0x5F, 0x4E, 0x04, 0x8F, 0x0A, 0xA5, 0xE9, 0xE3, 0xD1, 0x6B, 0x13, 0x34, 0xBB, 0xD1, 0xCA, 0xEC, 0x44, 0xED, 0x87, 0x36, 0xD0, 0xC9, 0x42, 0x87, 0x91, 0x25, 0xFE, 0x6F, 0x2E, 0x08, 0x64, 0xBB, 0x7F, 0x2B, 0xCD, 0x5F, 0x91, 0xBE, 0x6B, 0x57, 0x3B, 0xBD, 0xCA, 0x8F, 0xF0, 0x75, 0x15, 0xE0, 0xB2, 0x13, 0x42, 0x26, 0x00, 0x69, 0x43, 0x00, 0x75, 0x60, 0x6E, 0xC6, 0x53, 0x1A, 0xAA, 0x27, 0xCA, 0x33, 0x82, 0xE2, 0x0D, 0x4D, 0xC0, 0xD7, 0xBD, 0x73, 0xDD, 0xD2, 0x37, 0xB8, 0x76, 0x08, 0xCD, 0xFF, 0xBD, 0xD2, 0xF6, 0xF4, 0x46, 0xC3, 0x0E, 0x70, 0x0B, 0x68, 0x3C, 0x41, 0xF3, 0xDF, 0x12, 0xC3, 0x23, 0x1B, 0xD6, 0x35, 0xCF, 0x2F, 0xE5, 0x8D, 0x95, 0x46, 0xB0, 0x0D, 0x8F, 0xBB, 0xA2, 0xED, 0x0B, 0x9A, 0x9E, 0x77, 0xE6, 0x9F, 0xEE, 0xBF, 0xCB, 0x16, 0xC5, 0x30, 0x03, 0x94, 0x81, 0x33, 0x35, 0x84, 0x47, 0x1A, 0x35, 0x0F, 0x10, 0xE7, 0xF9, 0x94, 0x00, 0xF9, 0x3C, 0x7B, 0x80, 0x1C, 0x80, 0x0D, 0xA0, 0x6C, 0x14, 0xA0, 0xAF, 0xC4, 0xED, 0x20, 0x37, 0xE8, 0xBC, 0x5D, 0x6C, 0xCF, 0x65, 0xDD, 0x1B, 0x07, 0xF0, 0x57, 0x7F, 0x34, 0x00, 0x7D, 0x07, 0xF0, 0x02, 0xC2, 0xA3, 0x9A, 0x31, 0xB1, 0x1B, 0xCC, 0xA8, 0x27, 0x7E, 0x76, 0x32, 0xEC, 0x69, 0x14, 0xFD, 0x20, 0x15, 0xF4, 0x4B, 0xDE, 0x3E, 0x0E, 0x9A, 0x3F, 0xFB, 0x7A, 0xA0, 0x03, 0x7A, 0x00, 0xCE, 0x9D, 0x6E, 0x09, 0x06, 0xD4, 0x00, 0x99, 0x4F, 0xFE, 0xA6, 0xAE, 0xF7, 0x9E, 0x16, 0x02, 0xA8, 0x35, 0x08, 0x90, 0x81, 0x00, 0xEE, 0x8F, 0x0B, 0x48, 0x02, 0x46, 0x0F, 0xA4, 0x61, 0x40, 0xC4, 0xD6, 0xB6, 0xD5, 0x6C, 0x10, 0xC0, 0xF4, 0xB4, 0xF2, 0x2A, 0x90, 0xD1, 0xDF, 0x22, 0x13, 0xB4, 0xFC, 0x6A, 0xC3, 0x91, 0xF5, 0xF5, 0x2A, 0x7B, 0x1A, 0x54, 0x4D, 0xB8, 0x5F, 0x97, 0xC8, 0x07, 0x45, 0x11, 0x92, 0x69, 0x1A, 0x82, 0x1E, 0xAF, 0xCC, 0xB5, 0xA7, 0xED, 0x2E, 0x48, 0xFC, 0x30, 0x5B, 0xC9, 0x88, 0x0F, 0xB0, 0x7D, 0x51, 0xF4, 0x26, 0xAE, 0x42, 0x77, 0x5C, 0x95, 0x81, 0x30, 0xA0, 0x0E, 0x30, 0x31, 0x90, 0xC7, 0xAB, 0x39, 0x1B, 0x41, 0x0D, 0x9F, 0x32, 0xDE, 0x16, 0xB4, 0xB2, 0x18, 0x91, 0x2C, 0x80, 0x1D, 0x10, 0x03, 0xB4, 0x11, 0xB2, 0xD3, 0x50, 0x76, 0x00, 0x65, 0x80, 0x65, 0x5B, 0xC3, 0x05, 0x30, 0x32, 0x28, 0xBF, 0xA0, 0xD5, 0x9F, 0xFC, 0x7A, 0x78, 0xFF, 0x3E, 0xA5, 0x81, 0x52, 0xFA, 0x1F, 0x85, 0x49, 0x14, 0xF6, 0x29, 0x75, 0xF4, 0x5E, 0xB2, 0x43, 0xB5, 0x07, 0x9E, 0x17, 0xAA, 0xEF, 0x9E, 0x36, 0x7B, 0xB0, 0xE5, 0x6E, 0x94, 0x73, 0x01, 0xEC, 0x11, 0x43, 0x75, 0x06, 0xE8, 0x75, 0x38, 0xD7, 0x46, 0x36, 0x04, 0x38, 0x33, 0xB7, 0xDE, 0xE0, 0x01, 0xEF, 0xC7, 0x93, 0x05, 0x08, 0xD9, 0x1B, 0x8F, 0xF8, 0x3B, 0xCC, 0x03, 0xD4, 0x1D, 0xAB, 0x04, 0xB8, 0xE1, 0x0A, 0x64, 0x34, 0xF8, 0x91, 0xC1, 0x56, 0x40, 0x0E, 0xA0, 0x8D, 0x2B, 0xC9, 0x91, 0xE7, 0x4F, 0x14, 0xBC, 0xE9, 0xF3, 0x3B, 0x12, 0xC7, 0x77, 0xA5, 0x2A, 0xC5, 0xB4, 0x8A, 0xB2, 0xB4, 0xA0, 0x15, 0xA1, 0xC1, 0xB1, 0xA4, 0xC7, 0x78, 0x11, 0x2C, 0x69, 0x3A, 0x3D, 0xFD, 0xB6, 0xB3, 0xF5, 0xDF, 0x12, 0xB1, 0x36, 0x78, 0xD7, 0x09, 0xBC, 0x43, 0x58, 0x09, 0x98, 0x00, 0xCA, 0x80, 0x1F, 0x20, 0x14, 0xA0, 0xD8, 0x42, 0xD4, 0x95, 0x80, 0x37, 0xDE, 0xE9, 0xBA, 0x89, 0x8F, 0xE5, 0xEE, 0x66, 0x34, 0x05, 0x82, 0x1A, 0xB5, 0x0B, 0xF1, 0x27, 0xF7, 0xBA, 0xF3, 0x6A, 0xC8, 0x63, 0xB6, 0x18, 0xC0, 0xA9, 0xBD, 0x5E, 0x43, 0x27, 0x68, 0x84, 0x9E, 0x04, 0x96, 0x6F, 0x89, 0x45, 0x32, 0xE4, 0xE2, 0xCB, 0x71, 0x4C, 0x87, 0x61, 0x7D, 0x96, 0x33, 0xA4, 0x2D, 0xB2, 0xC7, 0x68, 0xB2, 0x96, 0x6C, 0xB7, 0xD1, 0x33, 0x43, 0xA0, 0x4B, 0xF0, 0x14, 0x3D, 0x8D, 0x40, 0x01, 0x34, 0x53, 0xFE, 0xBC, 0x47, 0x43, 0x44, 0x1A, 0xB1, 0x7D, 0x3F, 0xA6, 0x80, 0xEB, 0xBE, 0xD5, 0xA9, 0x8B, 0x00, 0x89, 0x6D, 0x77, 0x6D, 0xF5, 0xF3, 0xBC, 0xB0, 0xD1, 0xD0, 0x04, 0x56, 0x7D, 0x53, 0x00, 0xF1, 0xA7, 0x86, 0x10, 0x73, 0x16, 0x07, 0xAC, 0x1A, 0x0C, 0x88, 0x00, 0x47, 0xB6, 0x55, 0x4B, 0xC9, 0x7C, 0xE7, 0x04, 0x8D, 0x21, 0xFE, 0xA2, 0xF6, 0x27, 0x3B, 0xE9, 0x63, 0x86, 0x69, 0x6B, 0xC5, 0x4C, 0x29, 0x66, 0x88, 0xA2, 0x7A, 0x4D, 0xD0, 0xD4, 0xB5, 0xF7, 0xF8, 0xFA, 0x36, 0x74, 0x93, 0xBF, 0x13, 0x22, 0x4F, 0xF7, 0xDC, 0x4C, 0x88, 0xF8, 0x73, 0x00, 0x91, 0x8E, 0x41, 0x0A, 0x10, 0x4F, 0x6B, 0xC2, 0xB1, 0x29, 0x9A, 0xEF, 0xDD, 0x4F, 0xFC, 0x49, 0xE2, 0x3F, 0x45, 0x4F, 0x5F, 0xDE, 0x9B, 0x10, 0x3A, 0x58, 0x0D, 0x7D, 0xE6, 0x40, 0xC8, 0x9E, 0xF0, 0x20, 0x01, 0x4C, 0x81, 0x3C, 0x40, 0x18, 0xE0, 0x04, 0x48, 0x02, 0x4C, 0x3B, 0x92, 0x69, 0x13, 0x34, 0xF9, 0x63, 0x2D, 0xAC, 0xE0, 0x8C, 0x9C, 0x23, 0xEE, 0x7E, 0x8A, 0xC4, 0x10, 0x09, 0x4A, 0x3A, 0x54, 0xE8, 0x89, 0x36, 0xC5, 0xFF, 0x2D, 0xBC, 0xE7, 0x63, 0xDF, 0x49, 0xEC, 0x69, 0x4B, 0xA5, 0x3B, 0x26, 0x9B, 0x40, 0x28, 0x40, 0xA3, 0x8D, 0xC1, 0xD3, 0xD5, 0xBA, 0xBC, 0x5B, 0xA5, 0x36, 0xB4, 0x63, 0x1E, 0x1D, 0x83, 0x22, 0x40, 0x68, 0x8F, 0x39, 0x49, 0x00, 0xCC, 0xC0, 0x32, 0xB3, 0xFF, 0xA9, 0x42, 0xD2, 0x63, 0x42, 0xE3, 0xF9, 0x78, 0xD1, 0x9C, 0x57, 0xB0, 0x29, 0x1A, 0x02, 0x58, 0x43, 0x9E, 0xBE, 0x1C, 0x51, 0x20, 0xAA, 0x83, 0xA6, 0x9F, 0xE7, 0x05, 0x2B, 0x74, 0xAD, 0xCA, 0xA5, 0x07, 0x0C, 0x21, 0xD2, 0x97, 0x5C, 0x50, 0x98, 0xE3, 0xC4, 0xF3, 0x24, 0x0E, 0xAF, 0x3F, 0x3A, 0x5B, 0x92, 0x23, 0x9F, 0xF9, 0xD8, 0x69, 0xE9, 0x8E, 0xE9, 0x55, 0x96, 0x04, 0x3C, 0xB6, 0x77, 0x1B, 0x4F, 0xAD, 0x76, 0xF7, 0x6C, 0xF0, 0x01, 0x88, 0x81, 0x33, 0xA5, 0x33, 0xD9, 0x23, 0x3E, 0x66, 0x1D, 0x9F, 0x04, 0xA8, 0xB6, 0xF2, 0x23, 0xE7, 0xDC, 0xD7, 0x76, 0x73, 0xBC, 0x28, 0x60, 0x0C, 0xF8, 0x69, 0xE4, 0x63, 0x14, 0xD2, 0x30, 0x6F, 0x1C, 0x40, 0x64, 0xAB, 0x46, 0xD5, 0x34, 0x23, 0x10, 0x60, 0x32, 0x2B, 0x0D, 0xCF, 0xA5, 0x57, 0xFC, 0x09, 0x2C, 0xF0, 0x2F, 0x5A, 0x15, 0xA8, 0xDF, 0xCD, 0x45, 0x92, 0xB5, 0x67, 0x50, 0xD5, 0xB0, 0x37, 0x70, 0xAE, 0x76, 0x78, 0xDF, 0xD2, 0x69, 0x72, 0xFF, 0x0A, 0xA1, 0x57, 0x55, 0x3F, 0x81, 0x43, 0x08, 0x4C, 0xFF, 0xF5, 0xAF, 0x13, 0xCA, 0x7C, 0x62, 0xDD, 0x7B, 0x9A, 0xDA, 0xA3, 0x18, 0x29, 0xDB, 0x02, 0x50, 0x1E, 0xE9, 0x3D, 0xA3, 0x7D, 0xD6, 0x10, 0x03, 0x42, 0x9E, 0xF6, 0x15, 0x02, 0xE8, 0x3C, 0x7B, 0xA8, 0xEF, 0x07, 0x79, 0xFE, 0x5B, 0x26, 0x60, 0xB5, 0xBF, 0xD3, 0x64, 0xBE, 0x65, 0x82, 0xE6, 0xDF, 0x12, 0x23, 0xE1, 0xAF, 0x35, 0x41, 0xD1, 0x96, 0xAC, 0xDE, 0x5A, 0xE7, 0x96, 0x8C, 0x27, 0x9E, 0x02, 0xB5, 0xD9, 0xB4, 0x1E, 0xC8, 0xB6, 0x1D, 0x34, 0x7E, 0x86, 0x8A, 0xF3, 0x03, 0xF1, 0xAD, 0x0D, 0x67, 0xFE, 0xD2, 0xC6, 0x76, 0xE5, 0x7B, 0xE4, 0xD7, 0xD5, 0x8A, 0xBE, 0x54, 0x80, 0x64, 0x1E, 0x97, 0x65, 0xFE, 0x99, 0xB5, 0xED, 0xB2, 0x88, 0xF7, 0x82, 0x2B, 0x01, 0x62, 0x1E, 0x5D, 0x9B, 0x12, 0xF1, 0xEE, 0x75, 0xB7, 0x00, 0xEA, 0x9F, 0xA2, 0xAD, 0xD6, 0xA8, 0xD1, 0x83, 0xE5, 0xC6, 0xD9, 0x56, 0x6A, 0x49, 0x80, 0xEB, 0xEE, 0x08, 0x9F, 0x14, 0x64, 0x06, 0x6C, 0x6F, 0x13, 0x72, 0x2F, 0x94, 0xD3, 0x76, 0x0B, 0xE9, 0xB4, 0x64, 0x43, 0x8D, 0x43, 0x00, 0x09, 0x43, 0xF5, 0xAD, 0x6A, 0xB7, 0xC3, 0xAF, 0x7B, 0xF4, 0x54, 0x2B, 0x91, 0x86, 0xED, 0xF4, 0x3F, 0x59, 0x57, 0x96, 0x02, 0x9F, 0xB4, 0xA7, 0x5F, 0x29, 0x3A, 0xE5, 0xF6, 0x01, 0xD1, 0x47, 0xDA, 0xD0, 0x81, 0xA3, 0x4F, 0x85, 0x4F, 0xC6, 0x04, 0x76, 0x5B, 0x4C, 0x15, 0x6D, 0x73, 0xCB, 0xCC, 0x5D, 0x1A, 0x18, 0x81, 0x5D, 0x0A, 0x60, 0x8A, 0x56, 0x52, 0x80, 0x35, 0xE6, 0xEF, 0x3B, 0x04, 0x88, 0x02, 0x36, 0x78, 0xA6, 0x50, 0x85, 0x01, 0x9E, 0x4F, 0x8D, 0x98, 0xA0, 0xE5, 0x97, 0xDD, 0x62, 0xC2, 0x50, 0x4F, 0xC9, 0xCE, 0x41, 0x1E, 0x61, 0x14, 0x9F, 0xA4, 0x0B, 0x05, 0xEE, 0xDD, 0xCD, 0x5A, 0x93, 0x47, 0x7B, 0x46, 0x7C, 0x56, 0x93, 0x22, 0x61, 0x0B, 0x40, 0x98, 0x0A, 0x41, 0x63, 0xC1, 0x27, 0x1E, 0xE3, 0xEB, 0xC9, 0x8B, 0x4E, 0xAB, 0xFC, 0xF4, 0xB3, 0xCA, 0x2E, 0x45, 0x49, 0x87, 0x89, 0x7C, 0x0A, 0xA8, 0xC0, 0x28, 0x2C, 0x73, 0x6C, 0x7B, 0x61, 0xD6, 0xFE, 0xE2, 0xE8, 0x53, 0xD9, 0x4F, 0x3C, 0x28, 0x3A, 0x06, 0xD8, 0x64, 0x56, 0x6F, 0xAD, 0xD7, 0xCE, 0xBF, 0x6B, 0x00, 0x61, 0x0D, 0x01, 0x9C, 0x00, 0x65, 0x80, 0x6B, 0x7F, 0x2A, 0xE9, 0xA0, 0xD5, 0x57, 0x8A, 0x62, 0xCE, 0x6F, 0x6D, 0x31, 0xE9, 0x3C, 0x48, 0x58, 0x77, 0xAC, 0xAD, 0xC8, 0x6C, 0x40, 0x17, 0xA6, 0x9C, 0xE7, 0x71, 0xDC, 0xA5, 0x28, 0x9D, 0x46, 0xCB, 0x1C, 0xC3, 0xA8, 0x3B, 0x66, 0x3D, 0x86, 0xFE, 0xC0, 0xB9, 0xC5, 0xC7, 0x5F, 0x9B, 0x77, 0x5E, 0x9C, 0xEA, 0xB5, 0xD1, 0xC8, 0xF8, 0x89, 0x27, 0xD8, 0x1D, 0xF9, 0x3F, 0xF2, 0xAB, 0xF0, 0xD2, 0xF5, 0x5E, 0xCB, 0xA5, 0x6C, 0xCA, 0x57, 0xC9, 0xA3, 0x74, 0x2A, 0x20, 0xC0, 0x75, 0x8C, 0x63, 0x80, 0x15, 0xB0, 0x1C, 0xE5, 0x22, 0x40, 0xA2, 0x41, 0x00, 0xC9, 0x68, 0x5A, 0x00, 0x1E, 0x40, 0xF4, 0xFF, 0x30, 0x67, 0xDB, 0x3A, 0x5F, 0x97, 0x28, 0x59, 0x7E, 0x9B, 0x58, 0x95, 0xAD, 0xA7, 0xB3, 0xDA, 0x30, 0xEA, 0xF4, 0x5E, 0x96, 0xE3, 0x81, 0x14, 0xF4, 0x2F, 0x13, 0x3C, 0xFA, 0x1D, 0x98, 0x49, 0x6F, 0xAE, 0xFD, 0x3C, 0x79, 0xF8, 0x69, 0x7C, 0xA7, 0x89, 0xCF, 0xCC, 0xFB, 0x10, 0x30, 0x7E, 0xF4, 0xB7, 0x34, 0xB4, 0x94, 0x9D, 0x78, 0x17, 0x2D, 0x21, 0xE7, 0xB8, 0x94, 0xF7, 0x84, 0x9F, 0x9A, 0xE7, 0xEC, 0x8F, 0xD9, 0x21, 0x54, 0x01, 0xC2, 0x80, 0xA2, 0x47, 0xB5, 0x9B, 0x00, 0xBF, 0x51, 0x6E, 0x08, 0x90, 0x04, 0xB8, 0x02, 0x26, 0x5B, 0xB5, 0x9B, 0xB4, 0x83, 0x46, 0xC8, 0x67, 0x28, 0x26, 0xEF, 0xD2, 0x78, 0x89, 0x80, 0xA5, 0x77, 0xC5, 0x5D, 0x1D, 0xC5, 0x95, 0x23, 0xA8, 0xBF, 0xF0, 0xB2, 0xF9, 0x2F, 0x5A, 0xF2, 0xBC, 0xD3, 0x9E, 0x37, 0xB5, 0x39, 0x21, 0x44, 0x49, 0xFA, 0x71, 0x9C, 0x61, 0x78, 0xAE, 0x3B, 0x8B, 0x41, 0x67, 0x97, 0xDA, 0x79, 0x6C, 0xDA, 0xA3, 0x2B, 0x7C, 0xDC, 0x75, 0x6D, 0xDA, 0x4A, 0x13, 0x34, 0x46, 0xE2, 0x8C, 0x90, 0x63, 0x65, 0xFA, 0x2D, 0xED, 0xD9, 0x2C, 0xDE, 0x5E, 0xDF, 0xB3, 0xB0, 0xE3, 0x83, 0xDC, 0x8D, 0xD4, 0x0B, 0xA8, 0xD3, 0x1B, 0x85, 0x02, 0x71, 0x80, 0xB2, 0x86, 0x00, 0x79, 0x00, 0x67, 0x40, 0x13, 0xB0, 0xAE, 0xD4, 0xDE, 0x98, 0x71, 0x57, 0x61, 0x19, 0xE5, 0x74, 0x89, 0x89, 0xD9, 0xD7, 0xD8, 0x4D, 0xA1, 0xAD, 0x14, 0xE1, 0x58, 0x04, 0x56, 0x1F, 0x3C, 0x0C, 0xDD, 0xEF, 0x4F, 0xF5, 0x4E, 0xE7, 0x8D, 0x36, 0x0F, 0x27, 0xE9, 0x18, 0xD6, 0x03, 0x61, 0xB3, 0xDC, 0x7A, 0xAF, 0x1D, 0xBD, 0x12, 0xFB, 0x49, 0x45, 0xF8, 0xAD, 0xE9, 0xFA, 0xD9, 0x6E, 0x57, 0x77, 0x31, 0x34, 0xF8, 0x31, 0x8B, 0x0E, 0x05, 0xD2, 0x7E, 0x2B, 0xC4, 0x3B, 0x9E, 0x09, 0xFC, 0xAC, 0x1E, 0x29, 0x01, 0x2D, 0x20, 0x04, 0xA8, 0x9C, 0xB2, 0x16, 0xA0, 0xDC, 0xD0, 0x86, 0x35, 0x0E, 0x20, 0x05, 0x68, 0x02, 0x39, 0x0F, 0x27, 0x9A, 0xD0, 0x44, 0xB1, 0xAF, 0x89, 0xD5, 0x8A, 0xD9, 0x61, 0x9D, 0xC6, 0xC4, 0xF6, 0x7A, 0x57, 0xFC, 0x98, 0xCA, 0xCB, 0x26, 0xC4, 0xEB, 0x69, 0x48, 0x60, 0x9D, 0x6A, 0xEC, 0xEC, 0x4C, 0x6B, 0xB8, 0x1F, 0x36, 0x0A, 0xCB, 0xB1, 0x38, 0x96, 0x40, 0x24, 0xF6, 0x22, 0x9C, 0x3E, 0x02, 0xE0, 0x69, 0x3A, 0x88, 0x35, 0x15, 0x77, 0x9E, 0xD9, 0x3A, 0x66, 0x80, 0xFC, 0xF6, 0x94, 0x6D, 0xA5, 0x22, 0xEB, 0xF0, 0x5A, 0xEC, 0x6E, 0x37, 0x3D, 0x80, 0x25, 0x90, 0xBE, 0x7B, 0xE6, 0xF4, 0x81, 0x18, 0xC0, 0x0D, 0x6A, 0x70, 0x02, 0xF3, 0xEA, 0x2C, 0xFD, 0xEE, 0x50, 0xE1, 0xD2, 0x37, 0xCE, 0x42, 0xD5, 0xE7, 0xE0, 0x10, 0xE2, 0x65, 0xD8, 0x43, 0x1C, 0x60, 0xE2, 0x96, 0xE6, 0xE4, 0xB9, 0x06, 0x3C, 0x1A, 0x43, 0xAB, 0x45, 0x95, 0xE8, 0xEF, 0xD9, 0x80, 0xF7, 0x3E, 0x3E, 0x3B, 0xC5, 0x9C, 0xE3, 0xB2, 0x76, 0x8F, 0xE8, 0x35, 0x69, 0x3B, 0x80, 0xCF, 0xCE, 0x14, 0x4B, 0xDB, 0xD5, 0xF9, 0xF1, 0xBF, 0x50, 0x40, 0xA3, 0x63, 0x37, 0xCE, 0xEE, 0xF9, 0x68, 0x41, 0x12, 0x01, 0xE6, 0x40, 0x04, 0x50, 0xB2, 0x2B, 0xC3, 0xF9, 0xD6, 0xD1, 0x6B, 0xBF, 0xAA, 0x9D, 0x01, 0x6D, 0xD8, 0xC8, 0xCF, 0xCC, 0xD3, 0x69, 0x3D, 0x06, 0x55, 0xD3, 0x81, 0xB2, 0x94, 0x94, 0xA5, 0x08, 0xB5, 0xAE, 0x13, 0x1F, 0x9C, 0xBC, 0xAB, 0xBE, 0xB6, 0xE6, 0x7B, 0x6E, 0xCD, 0x53, 0x7F, 0x2A, 0xB0, 0xDC, 0x2F, 0x28, 0x31, 0x3C, 0x03, 0xD2, 0x2F, 0x7C, 0xC1, 0xBC, 0x0D, 0xD6, 0x74, 0xD7, 0xE6, 0xF2, 0x03, 0x56, 0x03, 0xAC, 0x6F, 0x3A, 0x4F, 0x6C, 0x53, 0xA2, 0xEB, 0xBD, 0xCF, 0xB4, 0x4B, 0x74, 0x2D, 0x1C, 0x73, 0x72, 0x3B, 0x0C, 0xD6, 0x01, 0x74, 0x4E, 0x81, 0xDC, 0xDB, 0xE3, 0x54, 0xDC, 0xBA, 0xB4, 0x97, 0x33, 0xBF, 0x26, 0x80, 0x39, 0x10, 0x89, 0xBF, 0x81, 0x04, 0xB0, 0x00, 0x92, 0x1A, 0x0C, 0x44, 0x02, 0x5E, 0x0D, 0xFB, 0x7D, 0x91, 0xEE, 0x20, 0x59, 0xF9, 0xD7, 0xD6, 0xED, 0xBF, 0x31, 0x1F, 0x83, 0xF6, 0x68, 0xFF, 0x7A, 0x8C, 0x54, 0x61, 0x11, 0x4A, 0x15, 0x6C, 0x18, 0xB4, 0xEE, 0xD9, 0x75, 0x79, 0x9B, 0xF9, 0x66, 0xAC, 0xBE, 0x26, 0x93, 0xA3, 0xFF, 0x50, 0x40, 0x3D, 0xCF, 0x8D, 0x68, 0xD2, 0xCB, 0xA9, 0xC0, 0x7C, 0xE2, 0x47, 0x94, 0x6A, 0x52, 0x8E, 0x46, 0x00, 0x67, 0xC3, 0x01, 0xAA, 0xFD, 0x29, 0xCF, 0x4E, 0x60, 0xDB, 0x79, 0xE6, 0x25, 0xA6, 0xD5, 0x32, 0x00, 0xB2, 0x27, 0x9F, 0x38, 0x19, 0x95, 0x6A, 0x4C, 0x3A, 0xB2, 0x61, 0xF9, 0x8C, 0x28, 0xD8, 0xFD, 0x96, 0x0E, 0x5A, 0x7C, 0x55, 0xCE, 0x63, 0xBF, 0xB9, 0x7F, 0xC5, 0x1C, 0xAC, 0x7E, 0xCA, 0xC2, 0xDE, 0x17, 0xF0, 0x42, 0x1B, 0x6F, 0x28, 0xAA, 0x7E, 0xBE, 0x73, 0x69, 0x1A, 0x6F, 0xDF, 0xA8, 0x4D, 0xCA, 0x33, 0x76, 0x7D, 0xB3, 0x14, 0x98, 0x8A, 0x66, 0xBD, 0xAA, 0x5D, 0x02, 0x04, 0x3F, 0x35, 0x33, 0x03, 0xCE, 0xAB, 0x0E, 0xAF, 0x0D, 0xDB, 0xB8, 0x7D, 0x8A, 0xD2, 0x71, 0x8A, 0x5D, 0x72, 0xE5, 0x03, 0xB8, 0xEF, 0x3C, 0xDD, 0x61, 0x80, 0x03, 0x70, 0x03, 0xB2, 0x1A, 0x0E, 0x44, 0xC3, 0xF4, 0x1D, 0xF4, 0x04, 0xAA, 0x26, 0x6A, 0x09, 0x35, 0x09, 0x2B, 0xD8, 0x11, 0x48, 0x5E, 0x23, 0x4E, 0xC5, 0x92, 0x46, 0x5B, 0x7F, 0x37, 0x8C, 0xAA, 0x30, 0x0E, 0xAF, 0x19, 0xCB, 0x90, 0x46, 0xFD, 0x31, 0x6F, 0xB0, 0x49, 0x60, 0x75, 0xA6, 0x83, 0x03, 0x38, 0xF7, 0xD9, 0xDD, 0xD3, 0x4D, 0x26, 0x5B, 0xF4, 0x5F, 0x1C, 0x20, 0xDE, 0x51, 0x96, 0xDC, 0xAA, 0x54, 0x66, 0x0D, 0x06, 0xD4, 0x80, 0x6B, 0x1A, 0x1E, 0x13, 0x91, 0x9B, 0x28, 0x99, 0xF7, 0xC8, 0xBE, 0x4E, 0x1A, 0x03, 0x61, 0xBB, 0x2F, 0x46, 0x1C, 0xB0, 0x7C, 0x20, 0x80, 0x1E, 0x40, 0xE6, 0x93, 0x01, 0xA3, 0x3A, 0x8A, 0x8B, 0x39, 0xB6, 0x91, 0xF8, 0x4A, 0x1E, 0x82, 0xFD, 0xE3, 0x40, 0xCD, 0x2A, 0x5B, 0x67, 0x94, 0x46, 0x5B, 0x55, 0xA0, 0xA3, 0xD9, 0xCF, 0x67, 0xFA, 0xDB, 0x30, 0x74, 0x13, 0x8A, 0xB6, 0x7A, 0xE0, 0xEC, 0x9A, 0xF9, 0xDC, 0x23, 0xE3, 0x07, 0xBE, 0xBF, 0xCB, 0xF4, 0xF7, 0x07, 0x30, 0x2F, 0xC3, 0x3A, 0x80, 0xAF, 0x7F, 0x72, 0xBF, 0x15, 0x10, 0x0E, 0x80, 0xCE, 0xAE, 0x72, 0x9C, 0xF8, 0x65, 0x61, 0xEF, 0x8D, 0x4A, 0x6F, 0xC3, 0x99, 0xCD, 0xB4, 0xE2, 0xBC, 0xC2, 0x05, 0x50, 0x06, 0xF2, 0x11, 0x3C, 0xF2, 0x86, 0x15, 0xA0, 0x02, 0x50, 0x01, 0x87, 0x00, 0x72, 0x20, 0xD0, 0xC8, 0x81, 0xE7, 0x49, 0xD0, 0x93, 0x9C, 0x5F, 0x2D, 0x93, 0xD6, 0x91, 0x43, 0xCA, 0x31, 0x2B, 0x4F, 0x84, 0x4C, 0x55, 0xFB, 0x8A, 0x9B, 0xFA, 0xDC, 0x03, 0x9E, 0xBC, 0x90, 0xFF, 0x7C, 0xE2, 0x89, 0xAE, 0xB1, 0x8C, 0x05, 0xC0, 0xB1, 0x93, 0x1A, 0x8A, 0xF4, 0x50, 0xDC, 0x6C, 0xE1, 0xE3, 0xBD, 0x38, 0x83, 0x04, 0xF3, 0x58, 0x1F, 0x80, 0x7C, 0x9E, 0xBD, 0x06, 0x01, 0xD1, 0xB8, 0xA9, 0xB5, 0xF3, 0x7B, 0xA2, 0x0A, 0xDF, 0x82, 0x10, 0x4A, 0x2F, 0x2A, 0x02, 0xA4, 0x61, 0xB2, 0x27, 0x84, 0x29, 0x01, 0xF1, 0x46, 0x02, 0xEC, 0x00, 0x31, 0x70, 0x08, 0xA0, 0x86, 0x4D, 0xD0, 0x08, 0x83, 0x16, 0x25, 0x7F, 0x12, 0x26, 0x20, 0xDF, 0xAB, 0xCD, 0x03, 0x3D, 0x09, 0xA9, 0xD9, 0xA9, 0xD1, 0x80, 0x86, 0x2C, 0x15, 0x4A, 0x0F, 0x32, 0x3E, 0x04, 0xEF, 0x54, 0xD4, 0xAA, 0xC3, 0xC5, 0x4D, 0x21, 0xFA, 0x01, 0x74, 0x2D, 0x07, 0xBF, 0xBE, 0x09, 0xF5, 0x68, 0x93, 0xE4, 0x01, 0x8C, 0x00, 0xF6, 0xA9, 0x29, 0xEF, 0xF2, 0xFA, 0xBB, 0xDF, 0x49, 0x01, 0x1A, 0x5B, 0x59, 0xFF, 0xCE, 0x89, 0x3D, 0xFE, 0xC5, 0xA7, 0xC1, 0x0E, 0x48, 0x01, 0x6E, 0xDB, 0x80, 0x98, 0xA3, 0x21, 0x3B, 0xCD, 0x57, 0x8D, 0x58, 0xFB, 0x5D, 0xBB, 0xB0, 0x23, 0x68, 0x8C, 0xEE, 0xF7, 0x2F, 0x76, 0x79, 0xDB, 0x0E, 0x39, 0x21, 0x9B, 0xE3, 0x14, 0x48, 0x19, 0x66, 0x2B, 0x71, 0x98, 0xE3, 0xB8, 0x64, 0x39, 0x0D, 0x1C, 0x4F, 0x5B, 0x77, 0xFD, 0x66, 0xBA, 0x26, 0x49, 0x85, 0x7B, 0x7E, 0x63, 0xDA, 0xA5, 0x47, 0x97, 0x70, 0xBB, 0x8F, 0x5D, 0xAD, 0x87, 0x04, 0x8C, 0xB6, 0x8B, 0xC2, 0x4D, 0x9B, 0x4C, 0x94, 0x1D, 0xF0, 0x86, 0xC8, 0x0F, 0xDE, 0xC8, 0x9F, 0xD7, 0xE3, 0x38, 0x7D, 0x05, 0x10, 0xBA, 0x4F, 0x82, 0xA4, 0x80, 0x0A, 0x90, 0xF2, 0x74, 0x70, 0xF3, 0xDC, 0x51, 0x81, 0x60, 0xC0, 0x1C, 0xF0, 0x69, 0xF9, 0xD5, 0x0E, 0x9A, 0xA0, 0x62, 0x47, 0xE8, 0xE0, 0x48, 0x6D, 0x41, 0x0E, 0xB6, 0xE9, 0x6C, 0xC2, 0xEC, 0x97, 0x31, 0x84, 0xFC, 0x3D, 0xB0, 0x6C, 0x88, 0x96, 0xD0, 0xB9, 0xF3, 0xAA, 0xDF, 0xE9, 0x3D, 0xA1, 0x6B, 0x2D, 0x53, 0x4A, 0xBE, 0x42, 0x0E, 0xE2, 0xAB, 0xB9, 0x58, 0x3B, 0x5A, 0x9E, 0x80, 0x12, 0x60, 0xF2, 0xE8, 0xE5, 0xCC, 0x44, 0x99, 0x00, 0x3C, 0x05, 0x82, 0x57, 0x43, 0xCE, 0x7F, 0x03, 0x0B, 0x79, 0x67, 0xB2, 0xAE, 0x51, 0xB3, 0x28, 0x50, 0xBC, 0x9B, 0x20, 0xC5, 0x81, 0xE0, 0xFD, 0x24, 0x5A, 0x36, 0x1E, 0x03, 0xAE, 0x53, 0x73, 0x08, 0x9F, 0x80, 0x02, 0xEE, 0x1D, 0x34, 0xFD, 0xD4, 0x85, 0xBE, 0x12, 0x7A, 0x19, 0xF4, 0xD3, 0xF4, 0xFB, 0x91, 0xBC, 0xFB, 0xBA, 0x09, 0x55, 0x4A, 0x0B, 0xBC, 0xC4, 0xA8, 0x1B, 0x5B, 0x8C, 0x97, 0x9C, 0x95, 0xF2, 0xF3, 0x78, 0x5E, 0x27, 0x47, 0xDB, 0x39, 0xF6, 0x4C, 0x80, 0x74, 0x36, 0xF4, 0x3D, 0x1E, 0x6B, 0xBA, 0xC7, 0x51, 0x22, 0xB7, 0xF5, 0x51, 0xC8, 0x3E, 0x79, 0x84, 0x35, 0xBC, 0x71, 0x1E, 0xCF, 0xA3, 0x99, 0xAD, 0x9A, 0x02, 0x01, 0xEF, 0x59, 0x1E, 0x77, 0xA0, 0x64, 0x97, 0x20, 0x54, 0x80, 0x3A, 0xB3, 0x34, 0xB3, 0x61, 0xC0, 0x99, 0x4D, 0x77, 0x0F, 0xA4, 0xC5, 0x1D, 0x25, 0xAC, 0x0E, 0x5A, 0x97, 0xEA, 0x04, 0x2E, 0xEC, 0x2E, 0xBE, 0x1A, 0xFA, 0xB4, 0x35, 0x5F, 0x88, 0x05, 0xFA, 0x4A, 0xA5, 0x1D, 0x79, 0xDE, 0x19, 0xC8, 0x78, 0xDA, 0x6D, 0x8B, 0xCE, 0x18, 0x2B, 0xF6, 0xEB, 0xC8, 0x00, 0xF9, 0xD0, 0xED, 0x73, 0xB7, 0x53, 0x5A, 0x1B, 0xDC, 0x49, 0x55, 0x9A, 0x37, 0x74, 0xAD, 0xAB, 0x64, 0xDC, 0xD4, 0x7E, 0xD6, 0xD3, 0x31, 0xF0, 0x58, 0xD3, 0xCD, 0xFE, 0x73, 0x85, 0x74, 0x43, 0xB6, 0x6E, 0xE7, 0x34, 0x68, 0x1B, 0x03, 0x23, 0x61, 0xCA, 0x09, 0x78, 0xEC, 0x79, 0x7E, 0x3B, 0x80, 0x16, 0x20, 0x01, 0x90, 0x02, 0x87, 0x00, 0x32, 0x20, 0xA2, 0x83, 0xE6, 0xD0, 0xCB, 0xA9, 0xFA, 0xBC, 0x55, 0x5C, 0xFD, 0xCB, 0xDE, 0x86, 0x2B, 0x74, 0x95, 0x29, 0x31, 0xDD, 0x98, 0x8E, 0x12, 0x6D, 0x76, 0x47, 0x2E, 0x3C, 0xEB, 0x85, 0xDF, 0xF9, 0xBB, 0xE9, 0x07, 0x32, 0xDB, 0xAF, 0x31, 0xE1, 0xC1, 0x73, 0x90, 0x98, 0xEB, 0xC2, 0xBB, 0x53, 0x1D, 0xC0, 0x1A, 0xB2, 0xDA, 0x41, 0x50, 0xD1, 0x5C, 0x6D, 0x1D, 0x25, 0x80, 0xF3, 0x9E, 0xC0, 0x96, 0x99, 0x65, 0x9F, 0xF6, 0x2E, 0x7E, 0x5E, 0x04, 0x0A, 0xD0, 0xE3, 0x44, 0xE3, 0xB4, 0xCD, 0x2C, 0xF5, 0x00, 0x62, 0x7B, 0x06, 0x35, 0x1B, 0xEE, 0x40, 0xD4, 0xFB, 0x22, 0x88, 0x3F, 0xD1, 0x09, 0xA5, 0xFA, 0xD6, 0x24, 0x75, 0xD0, 0x0C, 0xA3, 0x2A, 0x54, 0x68, 0x6C, 0xA8, 0xC0, 0x75, 0x8A, 0x14, 0xBF, 0x97, 0x9F, 0x3D, 0x53, 0x4C, 0x8F, 0x92, 0xB2, 0xE9, 0xAE, 0x3E, 0x46, 0x01, 0xBE, 0x66, 0x75, 0xBD, 0x61, 0xBF, 0x63, 0x29, 0x40, 0x1D, 0x9F, 0x68, 0xCC, 0xAB, 0x71, 0x6A, 0x0F, 0x9E, 0x80, 0x4A, 0x83, 0x01, 0x49, 0xE0, 0x0A, 0x75, 0xD5, 0xE3, 0xE2, 0x93, 0xFB, 0x60, 0xE7, 0x06, 0xA4, 0xEC, 0xDA, 0x1E, 0x17, 0x90, 0xF7, 0xC5, 0x03, 0x9C, 0xD8, 0xBB, 0x89, 0x39, 0x20, 0x6F, 0x66, 0x40, 0x26, 0x68, 0xED, 0x46, 0x29, 0xF5, 0x6D, 0x6D, 0xC1, 0xD1, 0x76, 0xA0, 0x98, 0x5D, 0x1C, 0xD3, 0xFA, 0x60, 0xE9, 0xB9, 0x0E, 0x6E, 0x7D, 0x7C, 0xDD, 0x55, 0x95, 0x5B, 0x20, 0x98, 0xC3, 0xE6, 0x3C, 0x82, 0x63, 0xD5, 0xEF, 0x04, 0x8C, 0x6A, 0xAD, 0xD2, 0xAF, 0x5D, 0xD8, 0xFB, 0xA5, 0x66, 0x93, 0xDA, 0xBF, 0xCD, 0xFF, 0x33, 0xC0, 0xE4, 0xB6, 0xE7, 0x9F, 0x38, 0x56, 0x65, 0x69, 0x7E, 0x41, 0x1F, 0xC4, 0x6C, 0x35, 0x93, 0x91, 0x90, 0x9F, 0xFD, 0x01, 0x4E, 0x12, 0x2B, 0xC3, 0x1F, 0x0C, 0x54, 0x67, 0xD7, 0x24, 0xF7, 0xD4, 0x0F, 0x79, 0x43, 0x27, 0xD7, 0x06, 0x44, 0x00, 0xD6, 0xF0, 0x11, 0x8C, 0x9D, 0x73, 0x5A, 0x7D, 0x79, 0x02, 0x71, 0x41, 0xA5, 0x58, 0x7F, 0x87, 0x5B, 0x83, 0x16, 0x29, 0x31, 0x0C, 0x08, 0x50, 0x6E, 0xB6, 0xCE, 0xFA, 0xC8, 0xDC, 0x04, 0x9E, 0x99, 0xE2, 0x78, 0x46, 0x08, 0xC6, 0x61, 0xB7, 0x74, 0x67, 0xFA, 0xC3, 0x7E, 0xE3, 0x9F, 0x72, 0x5F, 0xA9, 0x59, 0xDB, 0xDA, 0x90, 0x1C, 0xF1, 0x19, 0x89, 0x59, 0x07, 0x8E, 0x6E, 0x1B, 0x1E, 0x57, 0xC0, 0x08, 0x08, 0x7E, 0x9C, 0xD0, 0x72, 0x6E, 0x04, 0x2B, 0xD3, 0x1F, 0x57, 0xED, 0xE7, 0x9D, 0x55, 0x38, 0x01, 0x28, 0x03, 0x4E, 0x0D, 0xDF, 0xB0, 0x68, 0x38, 0xE0, 0xD3, 0x43, 0x6E, 0x08, 0xDA, 0xF5, 0x11, 0xB6, 0xCF, 0xA2, 0xD2, 0xF2, 0xF1, 0x2A, 0xD6, 0x6A, 0x05, 0xED, 0x42, 0x81, 0x27, 0x18, 0x3F, 0x43, 0xF8, 0x5F, 0xED, 0x2F, 0x0C, 0x2D, 0xCF, 0x53, 0xF3, 0x8C, 0x92, 0x69, 0xE7, 0x8D, 0x95, 0x1B, 0xF5, 0x9B, 0x52, 0xA1, 0x69, 0x30, 0xDF, 0x9A, 0x41, 0x50, 0x1C, 0xDE, 0x16, 0x95, 0x93, 0xB8, 0x07, 0x90, 0xE2, 0xDF, 0x9A, 0x41, 0x8D, 0xE3, 0x80, 0xD2, 0xAF, 0xA4, 0x90, 0x7F, 0x55, 0x89, 0x7A, 0x20, 0x4D, 0x27, 0xA7, 0x24, 0x40, 0x68, 0x27, 0xD9, 0x1F, 0xDD, 0xA3, 0xE3, 0x80, 0x68, 0x23, 0x1F, 0x48, 0x83, 0x01, 0x55, 0xA0, 0xB4, 0x83, 0x46, 0x2D, 0x96, 0x49, 0x7F, 0x8C, 0x21, 0x3B, 0x8A, 0x1A, 0x19, 0x66, 0xF2, 0x5C, 0x12, 0xBF, 0x82, 0xE7, 0x3A, 0x08, 0x7A, 0x9E, 0x25, 0x32, 0xE4, 0xFE, 0xA8, 0x02, 0xC7, 0x59, 0xF9, 0x51, 0x9C, 0x59, 0x47, 0x6C, 0x75, 0x95, 0x32, 0xC7, 0x77, 0xC5, 0xAD, 0xBF, 0xB3, 0xE3, 0x93, 0x01, 0x48, 0x01, 0x47, 0x7E, 0xF5, 0x66, 0x44, 0xB9, 0x85, 0x22, 0x01, 0xE1, 0x39, 0x2C, 0x00, 0xB6, 0x2E, 0x9D, 0x72, 0x6B, 0x58, 0x57, 0x4C, 0x6B, 0xC6, 0x06, 0x66, 0x36, 0x2F, 0x01, 0x31, 0x20, 0x4E, 0xA7, 0xC2, 0x15, 0x50, 0xDE, 0x10, 0x01, 0xA8, 0x1A, 0x07, 0x60, 0x06, 0x62, 0x56, 0x1A, 0x7F, 0xA2, 0x7C, 0xC7, 0xE4, 0xF3, 0x0F, 0x3C, 0xA7, 0x10, 0xA6, 0x63, 0x9D, 0x21, 0x64, 0x48, 0x2F, 0x33, 0xA1, 0x92, 0x1D, 0xFE, 0x7D, 0x92, 0x92, 0x7F, 0xB8, 0xF8, 0xEC, 0x8B, 0x0C, 0xD2, 0xBB, 0x33, 0x49, 0x0D, 0x58, 0x74, 0x0C, 0x64, 0xAE, 0x02, 0x53, 0x03, 0x5F, 0x5D, 0x57, 0x46, 0x3F, 0xF5, 0x0C, 0x1D, 0x3F, 0x81, 0x8B, 0x63, 0xFB, 0xD4, 0x16, 0x04, 0xB8, 0x02, 0xB9, 0xB2, 0x5E, 0x93, 0x40, 0x19, 0xF3, 0x29, 0x24, 0x1A, 0xF6, 0x1D, 0xD2, 0x0C, 0x98, 0x27, 0x98, 0x19, 0x88, 0xAB, 0xA3, 0xD8, 0xF0, 0x5D, 0x8B, 0x76, 0x07, 0x34, 0x01, 0x9F, 0x2D, 0xD8, 0x3B, 0x68, 0xF2, 0x49, 0x71, 0x9C, 0x33, 0xF3, 0xD8, 0x5D, 0xC6, 0x91, 0x4E, 0x7D, 0x68, 0x20, 0x6D, 0x63, 0xF3, 0x4A, 0x2B, 0x28, 0xC7, 0x98, 0x6F, 0x67, 0x32, 0x7D, 0xFA, 0xAC, 0x62, 0x9A, 0x93, 0x96, 0x93, 0x5A, 0xDD, 0x77, 0x54, 0x9E, 0x1D, 0x26, 0x9A, 0xB4, 0xDE, 0xFC, 0xD6, 0x67, 0x77, 0x30, 0x9F, 0xD8, 0xBA, 0x42, 0x16, 0x80, 0x78, 0x23, 0x1A, 0x8F, 0xCD, 0xA2, 0x4D, 0x0F, 0xDF, 0x72, 0xC0, 0x47, 0x08, 0xF7, 0xFD, 0x32, 0x01, 0x15, 0xE0, 0xEE, 0x85, 0x06, 0xE8, 0x01, 0x24, 0xFE, 0xA1, 0xDD, 0x9D, 0xBA, 0xC5, 0x40, 0x55, 0x4F, 0x07, 0x4D, 0x61, 0x6A, 0xC2, 0x04, 0x91, 0x78, 0x96, 0xB5, 0xA7, 0x89, 0x61, 0xDD, 0x71, 0x06, 0xFA, 0x78, 0xD2, 0x5B, 0xAD, 0xD6, 0xA6, 0xEA, 0xF9, 0xD8, 0x84, 0xD8, 0x1C, 0x24, 0xE6, 0xF1, 0x9C, 0xE9, 0x61, 0xDD, 0xEA, 0x5D, 0xE3, 0x10, 0x75, 0x0B, 0xE3, 0x08, 0xE8, 0xE4, 0xC9, 0xE9, 0x2A, 0x61, 0x6E, 0x3B, 0xB7, 0xF3, 0x1A, 0xF0, 0x2B, 0x50, 0xFE, 0xA8, 0xB5, 0xCF, 0x41, 0xA2, 0x96, 0x83, 0x79, 0x74, 0x05, 0xAF, 0x5F, 0xBE, 0x2C, 0x57, 0x12, 0x30, 0x7A, 0xA3, 0x13, 0x05, 0xAE, 0xC2, 0xB5, 0x03, 0xDE, 0x08, 0x02, 0x3C, 0x1A, 0x02, 0x58, 0x00, 0x31, 0x23, 0xBE, 0xD4, 0x41, 0x33, 0xD4, 0xBE, 0x8F, 0x61, 0x88, 0xE0, 0xA7, 0xDD, 0xAD, 0x0A, 0xFD, 0x34, 0x28, 0x23, 0x74, 0xEE, 0x12, 0xD7, 0x77, 0x35, 0x42, 0xD0, 0xEA, 0xD5, 0x35, 0xE4, 0xD5, 0x19, 0x3C, 0xD3, 0xCE, 0x53, 0x9B, 0xC6, 0x29, 0x65, 0x1B, 0x58, 0xD8, 0x59, 0x37, 0x75, 0x9A, 0x84, 0xEA, 0xF5, 0x9E, 0x7E, 0x24, 0x7F, 0x73, 0x77, 0xE8, 0xEA, 0x69, 0x24, 0x60, 0x02, 0xD4, 0x3A, 0x22, 0x8F, 0x65, 0xFA, 0xED, 0xAF, 0x89, 0xDB, 0x8C, 0x10, 0x33, 0x0C, 0xDE, 0x48, 0xDF, 0x5B, 0x94, 0x25, 0x10, 0x0E, 0xE4, 0x01, 0x22, 0x1B, 0x04, 0xF8, 0x2A, 0xFD, 0x21, 0xD9, 0x8A, 0xA0, 0xA1, 0x5C, 0x12, 0x76, 0x3E, 0xB1, 0x21, 0x66, 0xDE, 0xC3, 0x64, 0xC7, 0x46, 0x96, 0x0E, 0x6B, 0xD8, 0x0B, 0x21, 0x64, 0x5B, 0x59, 0x0E, 0xB7, 0xA7, 0xBE, 0xEE, 0xF3, 0x22, 0x10, 0xDF, 0xED, 0x19, 0x39, 0x47, 0x80, 0xFC, 0x55, 0x33, 0x79, 0x0B, 0x89, 0xD4, 0x6D, 0xDB, 0xD4, 0x79, 0x82, 0xAF, 0x09, 0xC3, 0x76, 0x60, 0x93, 0x41, 0x36, 0x1C, 0x98, 0x73, 0x08, 0x40, 0xF4, 0x58, 0x1C, 0x60, 0x18, 0x6D, 0xC5, 0xA7, 0xA6, 0x14, 0xDB, 0x88, 0x2E, 0x27, 0x73, 0x00, 0x66, 0x80, 0x1F, 0xC0, 0x14, 0x50, 0x06, 0xC4, 0x80, 0x19, 0x57, 0x3D, 0xD2, 0x41, 0x83, 0x05, 0x8D, 0xD9, 0xEB, 0x4C, 0x86, 0x73, 0x9A, 0x6A, 0xC1, 0x07, 0x4B, 0x0B, 0xC5, 0x08, 0x0E, 0xC8, 0xB0, 0x6A, 0x2C, 0x55, 0x60, 0x8D, 0x35, 0x79, 0x31, 0xED, 0xB0, 0x10, 0x63, 0xDA, 0x17, 0xCB, 0x98, 0xF7, 0x9E, 0x4C, 0x87, 0xE6, 0xAC, 0xAD, 0x2D, 0x85, 0x90, 0x5B, 0x65, 0xF5, 0xCC, 0x78, 0xC4, 0x79, 0x26, 0x2F, 0xB4, 0x51, 0x80, 0x2A, 0x10, 0xD3, 0x27, 0x3E, 0x77, 0x00, 0xBE, 0x46, 0x8E, 0x5B, 0xCC, 0x5A, 0x1A, 0x51, 0xCF, 0xE4, 0x3E, 0x01, 0x39, 0xE3, 0xA3, 0xD9, 0xA8, 0xC6, 0xD9, 0x2F, 0xF4, 0x68, 0xE4, 0xCC, 0xCE, 0xCE, 0x91, 0x23, 0xFF, 0x58, 0x60, 0x9C, 0x7F, 0x82, 0xA6, 0x0E, 0x95, 0x21, 0xC6, 0xA5, 0x0A, 0xFD, 0x8F, 0x2C, 0x50, 0x41, 0x2A, 0x81, 0xBA, 0x06, 0xF9, 0x28, 0x71, 0x3C, 0xFA, 0xD3, 0xB1, 0x6B, 0x04, 0x73, 0xDB, 0x8C, 0xDC, 0x49, 0xC8, 0xA9, 0x4A, 0xDD, 0x06, 0x6A, 0xD9, 0xCD, 0xE7, 0xA4, 0x4F, 0x96, 0x63, 0x2E, 0x96, 0xFE, 0x4C, 0x5E, 0xBC, 0x06, 0x65, 0x04, 0x44, 0xFC, 0xBA, 0x70, 0xFD, 0xEE, 0xDD, 0x3E, 0xD5, 0x6D, 0xB9, 0x62, 0xD6, 0x40, 0x34, 0xCA, 0x77, 0x86, 0xE8, 0x0A, 0x7E, 0x5A, 0x83, 0x76, 0x5A, 0x2D, 0x0C, 0xB0, 0x46, 0xF4, 0x77, 0x4A, 0x74, 0xD0, 0x0A, 0x2D, 0x55, 0xAC, 0xEF, 0x4A, 0xC3, 0x39, 0xED, 0x48, 0xDF, 0x51, 0x12, 0x1D, 0xDE, 0x9D, 0x5D, 0x93, 0x7A, 0x3A, 0xFA, 0xF4, 0x79, 0x11, 0x9C, 0xD9, 0x91, 0x67, 0x0E, 0x78, 0x6A, 0xB1, 0xA5, 0xD3, 0x79, 0x32, 0x87, 0xFF, 0xF5, 0x2E, 0x9D, 0xF2, 0x59, 0xD4, 0xF6, 0xCC, 0x8A, 0xC7, 0xCE, 0x2D, 0x1D, 0x70, 0x01, 0x62, 0x10, 0xBF, 0x31, 0x20, 0x05, 0xE6, 0xD5, 0x88, 0x5F, 0x70, 0xBA, 0xD9, 0xFA, 0x0E, 0x20, 0x93, 0xAD, 0x68, 0xA8, 0x00, 0xA9, 0x33, 0xC8, 0x0B, 0x58, 0x3D, 0x38, 0xCF, 0xB0, 0x67, 0x43, 0x14, 0xC8, 0x7E, 0x3C, 0x47, 0xC5, 0xB3, 0xFC, 0xEB, 0xF0, 0x96, 0x53, 0xAB, 0x67, 0x28, 0x48, 0xBB, 0x4B, 0x08, 0xEF, 0x83, 0x49, 0x14, 0x49, 0xE5, 0x2A, 0xAC, 0xB8, 0x3E, 0x87, 0x5B, 0x9B, 0xE2, 0xFF, 0x5C, 0x41, 0xF2, 0x00, 0xAA, 0x3F, 0x39, 0x60, 0xBB, 0xC5, 0x6D, 0xBB, 0x73, 0xD2, 0xBB, 0xF5, 0x90, 0xCE, 0x52, 0x61, 0x32, 0xDE, 0x82, 0xAA, 0x5A, 0x80, 0x49, 0x43, 0x81, 0xDA, 0x79, 0x31, 0xF8, 0x2F, 0x4F, 0x0E, 0x6A, 0x76, 0x72, 0xEC, 0x5B, 0x09, 0xD4, 0x8C, 0x28, 0x37, 0x22, 0xBA, 0xE5, 0x50, 0x00, 0x51, 0x40, 0xCF, 0x86, 0x14, 0xA0, 0x0A, 0x98, 0x01, 0xC5, 0x1D, 0x34, 0xEA, 0x9D, 0xFB, 0x1F, 0xAE, 0xD8, 0x95, 0xD9, 0xDD, 0x01, 0x8C, 0xFA, 0xA1, 0x2A, 0xFA, 0xC3, 0xEB, 0x6C, 0xDB, 0xDD, 0x78, 0x5A, 0xBB, 0x6F, 0x4D, 0xA3, 0xCE, 0xEF, 0x7C, 0x28, 0xB7, 0xCB, 0x20, 0x02, 0xA7, 0xB6, 0xD5, 0x27, 0xEC, 0x77, 0x5F, 0xE7, 0x9B, 0xF8, 0xDD, 0x59, 0x0E, 0xAD, 0x9D, 0x7D, 0xB4, 0x86, 0xE7, 0x5E, 0x69, 0x5B, 0x39, 0xED, 0xF6, 0x5B, 0xD9, 0xAD, 0x23, 0xF1, 0xF9, 0xB5, 0xAE, 0xF0, 0xDF, 0xBB, 0x9C, 0x02, 0x6A, 0x40, 0xEA, 0x96, 0x2D, 0xA6, 0xD3, 0x90, 0x86, 0x35, 0x02, 0xE0, 0x86, 0x55, 0x07, 0x8D, 0xF1, 0x7A, 0x8E, 0x78, 0x82, 0x86, 0x5A, 0xFC, 0x21, 0xE4, 0x35, 0x3A, 0x5A, 0xC7, 0xB3, 0x5A, 0xF3, 0xD4, 0xE6, 0xA8, 0xF1, 0x9C, 0xD3, 0xF8, 0x0A, 0xBE, 0xCD, 0xA5, 0x7C, 0x77, 0xA0, 0x85, 0xF4, 0x17, 0x7F, 0xE6, 0xCF, 0x75, 0x33, 0x6F, 0x57, 0xF4, 0x90, 0x7E, 0xF5, 0x27, 0xB9, 0xA5, 0x94, 0x9C, 0x89, 0x28, 0x02, 0x3C, 0x80, 0x54, 0x60, 0xD2, 0x6A, 0x46, 0xF7, 0xCD, 0x3A, 0x2A, 0xDF, 0x73, 0xD5, 0xEE, 0x88, 0xF4, 0x41, 0x2B, 0xFB, 0xB6, 0x29, 0xA7, 0x6F, 0x9B, 0x06, 0x4C, 0xB7, 0x01, 0x25, 0x60, 0xDC, 0xC8, 0x46, 0x35, 0xA4, 0x61, 0x80, 0x4F, 0x93, 0xA3, 0x76, 0xD0, 0xE4, 0x89, 0x16, 0x06, 0xA3, 0x5C, 0xEB, 0x2B, 0xB1, 0x8B, 0xD3, 0xB7, 0xC3, 0x04, 0x0B, 0xCA, 0x39, 0x24, 0x78, 0x00, 0x2B, 0xD6, 0xE4, 0x85, 0xDA, 0x5B, 0x62, 0xF7, 0xB3, 0xEB, 0x42, 0x5E, 0x8F, 0x41, 0x09, 0x03, 0x22, 0x80, 0x11, 0x50, 0xB7, 0x70, 0xF5, 0x18, 0x82, 0x9A, 0xFD, 0x5A, 0xA7, 0xF4, 0x5A, 0x2D, 0x9B, 0x4E, 0x39, 0x61, 0x46, 0x85, 0x56, 0x61, 0xEF, 0x9C, 0x3D, 0xCE, 0x4A, 0xB1, 0x25, 0x4A, 0xD3, 0x1B, 0xDA, 0xB0, 0xED, 0x50, 0x26, 0x0D, 0x6B, 0xA8, 0xEE, 0x2F, 0x12, 0x01, 0xA7, 0x41, 0x02, 0x18, 0xF7, 0x95, 0xE0, 0x3F, 0xAF, 0x00, 0xEB, 0x37, 0xB2, 0x7E, 0xB5, 0x05, 0xC7, 0x55, 0x10, 0x33, 0x17, 0xD9, 0x1D, 0x88, 0x6A, 0x16, 0x48, 0xA4, 0xBD, 0x96, 0x34, 0xB4, 0x24, 0x2A, 0xE3, 0xEF, 0x0B, 0xEC, 0xD0, 0xF6, 0xA0, 0x96, 0x02, 0x34, 0x01, 0xBF, 0x65, 0xC9, 0x9D, 0x0A, 0x53, 0xFF, 0x8F, 0x64, 0xB0, 0xDF, 0x97, 0xBF, 0xFD, 0xFA, 0xBE, 0xFD, 0xF6, 0x5A, 0xBC, 0xE2, 0xEF, 0x87, 0x1E, 0xED, 0xB3, 0x03, 0x30, 0x01, 0x14, 0x1B, 0x62, 0x80, 0x17, 0x50, 0x04, 0xA4, 0x02, 0xEE, 0xEF, 0x64, 0x65, 0xA3, 0x80, 0xAC, 0x09, 0x9A, 0x7D, 0x15, 0xCF, 0x63, 0xD5, 0xA7, 0x6F, 0x43, 0x19, 0x74, 0xBA, 0x23, 0xAB, 0xCF, 0x9A, 0xA1, 0x5D, 0xF6, 0x0A, 0x04, 0xED, 0xA0, 0xC4, 0x9E, 0xEF, 0x8D, 0x7D, 0xA6, 0x08, 0xEC, 0x29, 0xDB, 0xC6, 0x39, 0x4F, 0xF7, 0xF9, 0xDC, 0xE6, 0xE9, 0x29, 0x16, 0x8D, 0xAD, 0xED, 0x38, 0xD3, 0x54, 0x6F, 0x32, 0x02, 0xC4, 0xF7, 0x89, 0xAF, 0x10, 0x02, 0xCD, 0xF9, 0x49, 0xC7, 0xEB, 0x60, 0xA5, 0x83, 0x5D, 0x81, 0xF1, 0xA3, 0xB5, 0x06, 0x0B, 0x40, 0x04, 0x9C, 0x68, 0x14, 0x20, 0x0A, 0x44, 0xEE, 0xE6, 0x9C, 0x72, 0x20, 0x0A, 0xD0, 0x06, 0x37, 0x94, 0xE7, 0xCE, 0x32, 0x41, 0x7B, 0x5F, 0x01, 0x68, 0x81, 0x51, 0xEA, 0xDE, 0xEE, 0x50, 0x78, 0x54, 0x1E, 0xFA, 0x2E, 0x3E, 0x51, 0xDE, 0xC9, 0xD2, 0xBC, 0x13, 0x51, 0x1F, 0xFD, 0x11, 0x1E, 0x95, 0x49, 0x2E, 0xCF, 0xC4, 0x11, 0xBF, 0x0E, 0x2A, 0x02, 0xB0, 0x02, 0x73, 0x07, 0x3D, 0xF5, 0xAB, 0x60, 0xC7, 0x6D, 0x3F, 0x8C, 0x18, 0xC9, 0xA4, 0x5E, 0x70, 0x2B, 0xC9, 0x7B, 0x10, 0xB4, 0xB8, 0x03, 0x88, 0x31, 0x0B, 0xDC, 0xF6, 0x4D, 0xDF, 0x09, 0x90, 0x06, 0x9F, 0x67, 0xA5, 0x3D, 0x23, 0x7C, 0x21, 0x40, 0x45, 0x83, 0x9E, 0x19, 0xDE, 0x7C, 0x67, 0x78, 0x67, 0x1F, 0x98, 0xA0, 0x05, 0xC6, 0xFE, 0x99, 0xF1, 0x82, 0x15, 0x38, 0x8B, 0x8F, 0xA4, 0x83, 0xB0, 0xB5, 0x52, 0x47, 0x0F, 0xA3, 0x99, 0xE3, 0xE0, 0x2A, 0xE7, 0x1F, 0x41, 0x23, 0xFA, 0x75, 0x4B, 0xF9, 0x1D, 0x78, 0xBB, 0x3E, 0x01, 0x06, 0x78, 0x34, 0x7C, 0xE3, 0x5E, 0x1B, 0x75, 0x1A, 0x23, 0xE7, 0xD5, 0x11, 0xC0, 0x1C, 0xD8, 0xED, 0x67, 0xE6, 0x90, 0xB7, 0x06, 0x93, 0xF4, 0x18, 0x7B, 0x26, 0x30, 0x82, 0x0D, 0xD1, 0x30, 0x03, 0x34, 0x1A, 0xDA, 0x30, 0xC0, 0x63, 0xA2, 0xFC, 0x2F, 0x0B, 0xD9, 0x09, 0x68, 0x02, 0xCE, 0xC0, 0x2D, 0x5F, 0xC8, 0x04, 0x2D, 0xBF, 0xAB, 0x3A, 0xDA, 0x95, 0x15, 0x79, 0x59, 0xFF, 0x5E, 0x63, 0x3D, 0x88, 0x41, 0xD2, 0x87, 0x77, 0x43, 0xE9, 0xC6, 0x18, 0x85, 0xFD, 0xBE, 0x12, 0xD4, 0x3F, 0xAF, 0x04, 0xB3, 0xCB, 0x07, 0xED, 0x32, 0x4F, 0x26, 0x50, 0x0E, 0x24, 0x03, 0x71, 0x80, 0x8C, 0x59, 0x85, 0xBE, 0x4F, 0xC5, 0x64, 0xDB, 0x83, 0xFC, 0x5A, 0x2D, 0x9F, 0x65, 0x7D, 0xA1, 0x3C, 0x4F, 0xDB, 0x9E, 0x12, 0x35, 0x7D, 0xCC, 0xEC, 0x18, 0xA0, 0x6C, 0x04, 0xC0, 0x07, 0x50, 0x7F, 0xE4, 0x88, 0x1F, 0xC5, 0xD1, 0x6A, 0x38, 0xED, 0x3F, 0x6C, 0x1E, 0x79, 0x9A, 0x3D, 0x6D, 0x99, 0x15, 0x7F, 0x43, 0x36, 0xFE, 0xED, 0x70, 0xE4, 0x02, 0x09, 0x12, 0x51, 0xAC, 0x9E, 0x52, 0x8C, 0x52, 0x4A, 0x17, 0x8E, 0xBA, 0x5A, 0x4C, 0x13, 0x34, 0x7F, 0x86, 0xB1, 0xCD, 0xA6, 0x79, 0xEE, 0x1D, 0x4B, 0x05, 0x22, 0x1B, 0x04, 0x78, 0x00, 0x53, 0xD5, 0xA4, 0x25, 0x16, 0xFC, 0x53, 0x0F, 0x1A, 0xC7, 0x9F, 0x49, 0x8C, 0x4D, 0x81, 0x4E, 0xE7, 0x97, 0xDF, 0x6B, 0xCB, 0x03, 0xB0, 0x02, 0x54, 0x00, 0x8E, 0xE7, 0xF1, 0xAC, 0xFD, 0x49, 0x12, 0x08, 0x05, 0xCA, 0x80, 0x2C, 0x20, 0xF4, 0x79, 0x3C, 0xE5, 0x19, 0xB1, 0x77, 0x04, 0xED, 0x0B, 0x45, 0x7E, 0x12, 0xC7, 0x58, 0x5B, 0x18, 0xB7, 0xFB, 0xA4, 0x04, 0x04, 0x76, 0x8B, 0xDA, 0xBF, 0x3A, 0x11, 0x0E, 0x07, 0x2C, 0xE8, 0x7C, 0xD2, 0x65, 0x8B, 0x0D, 0x2E, 0x89, 0xDB, 0x49, 0x8C, 0xB1, 0x6F, 0xD9, 0x5D, 0xA6, 0x06, 0x03, 0xF4, 0xCC, 0x9C, 0x9E, 0x95, 0xE4, 0xA3, 0x73, 0x3B, 0x2E, 0x8A, 0x81, 0xB4, 0x15, 0xBB, 0x79, 0xC7, 0x00, 0x76, 0x67, 0x63, 0x55, 0x1E, 0xB5, 0x68, 0x07, 0x82, 0x01, 0xF3, 0x06, 0x01, 0x5A, 0xFB, 0x53, 0x9C, 0x67, 0x34, 0xBB, 0x1A, 0xBA, 0xDD, 0x1A, 0x93, 0x01, 0x2F, 0x60, 0xB6, 0x03, 0xBE, 0x41, 0xA3, 0x6F, 0x6D, 0x55, 0xDE, 0x3A, 0x14, 0x24, 0xCF, 0xDB, 0x60, 0x9C, 0xC2, 0x71, 0xDA, 0x22, 0xE9, 0xA9, 0x32, 0x45, 0x97, 0xB5, 0xEA, 0x9A, 0xF6, 0xB4, 0x5A, 0x69, 0x0E, 0x1C, 0x0B, 0x56, 0x57, 0x5F, 0x4E, 0x28, 0xB6, 0xDB, 0x27, 0xB6, 0x3F, 0xC0, 0x01, 0xED, 0xF8, 0xD8, 0xD2, 0xA9, 0x43, 0xFD, 0x0A, 0x90, 0x5F, 0x87, 0x3C, 0xDF, 0x66, 0xEF, 0xB9, 0xB4, 0xEA, 0x4C, 0x53, 0xEF, 0x49, 0x74, 0xE6, 0x3D, 0xB3, 0xEE, 0x01, 0x58, 0x35, 0x12, 0xF0, 0xB3, 0x7D, 0x77, 0x8F, 0xBE, 0x0F, 0xF2, 0x13, 0xB4, 0x04, 0x22, 0x80, 0x9C, 0xF0, 0xE6, 0x04, 0x8D, 0xBF, 0x89, 0xC5, 0x23, 0xD6, 0x5D, 0x31, 0xD6, 0x2B, 0x8D, 0x31, 0x22, 0x9B, 0x81, 0xAA, 0x74, 0x46, 0xF7, 0x31, 0x04, 0x5E, 0xF2, 0xEE, 0xDB, 0xE1, 0x59, 0x96, 0x51, 0xC8, 0xDC, 0x80, 0xFC, 0xEE, 0x5B, 0x73, 0xF2, 0x20, 0x02, 0xD8, 0x1E, 0x24, 0xE0, 0x73, 0x2A, 0x99, 0x72, 0xC2, 0xF5, 0x3F, 0x65, 0x40, 0x0B, 0x41, 0x9B, 0xA6, 0xC0, 0xE0, 0x29, 0xA2, 0xCC, 0xD2, 0xDC, 0x93, 0xDD, 0x06, 0x58, 0x02, 0x72, 0x00, 0x6A, 0x1C, 0x69, 0x50, 0xC3, 0x00, 0x7E, 0x66, 0xEB, 0x53, 0x81, 0xC8, 0xFD, 0x45, 0x3D, 0x00, 0x1B, 0x20, 0x0E, 0xA4, 0x4C, 0xD0, 0xE4, 0xD3, 0x4A, 0xE0, 0x9F, 0x76, 0xA6, 0x7D, 0xFD, 0xF9, 0x8A, 0xB1, 0x7F, 0x0A, 0xEC, 0xB9, 0x52, 0x08, 0x9A, 0xB6, 0x91, 0x20, 0xC7, 0xEC, 0x65, 0xCF, 0x4A, 0x9B, 0xAC, 0xCE, 0x63, 0x7E, 0xC4, 0xFE, 0x2F, 0xB3, 0x7D, 0x4D, 0xC0, 0xF5, 0xA7, 0x7A, 0xC6, 0x57, 0x20, 0xEF, 0xF8, 0xCC, 0x98, 0x01, 0x33, 0x52, 0x17, 0xCB, 0x5D, 0xA5, 0x1F, 0xD6, 0xBC, 0x6F, 0x1C, 0x7D, 0x15, 0xE5, 0xE7, 0x2A, 0x6A, 0x80, 0x04, 0xC0, 0x83, 0xE7, 0x49, 0x54, 0x07, 0xF2, 0xEC, 0xE1, 0xEF, 0x4A, 0x20, 0x05, 0xB0, 0x02, 0x34, 0x01, 0xCB, 0xA9, 0x69, 0x4C, 0xD0, 0xF4, 0x53, 0x51, 0x36, 0x9F, 0x44, 0x37, 0x64, 0xA7, 0x5C, 0x14, 0x13, 0x79, 0x61, 0x5F, 0xD2, 0x21, 0xBB, 0x86, 0xE7, 0xA7, 0x3A, 0xFB, 0xCD, 0xFF, 0x4A, 0x73, 0x9C, 0x79, 0x47, 0x3D, 0x73, 0xC5, 0xA3, 0x3F, 0x98, 0xD3, 0x11, 0xD9, 0x10, 0x6E, 0x38, 0xE0, 0x32, 0x53, 0x0D, 0x9D, 0xC0, 0x99, 0x82, 0xD9, 0xA0, 0x76, 0x4D, 0x7E, 0xB2, 0x5E, 0x57, 0x25, 0x18, 0x1B, 0x9D, 0x3E, 0x96, 0x46, 0x4C, 0x7B, 0xC8, 0xC0, 0x0F, 0x60, 0xD2, 0xE0, 0x86, 0x03, 0x91, 0x7B, 0x90, 0x5D, 0xA2, 0x71, 0x80, 0x69, 0xFB, 0xA8, 0x46, 0xCA, 0xDE, 0x82, 0x55, 0x27, 0x68, 0x10, 0x39, 0x2F, 0xAB, 0x4E, 0xEE, 0x27, 0x9A, 0x88, 0x8C, 0x61, 0x51, 0x66, 0x3D, 0x6F, 0xA1, 0xDC, 0xF2, 0x7C, 0xDA, 0x75, 0x39, 0x43, 0xF9, 0xE9, 0x99, 0x58, 0x19, 0x0B, 0xBF, 0xDB, 0xFC, 0x1A, 0x4B, 0x85, 0xD0, 0xEF, 0x64, 0x9D, 0x18, 0xC0, 0x09, 0x10, 0x01, 0x1C, 0xBF, 0x32, 0x2F, 0x75, 0xC9, 0x11, 0x29, 0x54, 0xA0, 0xBF, 0x18, 0x93, 0x02, 0x9B, 0x7A, 0x29, 0xF5, 0xCA, 0x9C, 0x31, 0x56, 0x03, 0x8E, 0x4C, 0x3F, 0xD4, 0x07, 0x05, 0xD6, 0x7C, 0x37, 0x40, 0x0D, 0x03, 0x94, 0x81, 0xA2, 0xA9, 0xF9, 0x6D, 0xF1, 0xFF, 0xE2, 0xC7, 0x14, 0x2C, 0x00, 0x93, 0xF9, 0x16, 0x43, 0xCC, 0x7E, 0x12, 0x26, 0xDE, 0x13, 0x52, 0xF3, 0x49, 0xBF, 0xE3, 0x40, 0xA1, 0xDF, 0x3C, 0x14, 0xC7, 0xE5, 0x1C, 0xC5, 0x9D, 0xDC, 0xCE, 0x81, 0x20, 0xDD, 0xDB, 0x2D, 0xDF, 0x73, 0x33, 0x40, 0xF3, 0xC9, 0xFE, 0x2D, 0x15, 0x05, 0xCC, 0xB7, 0xE4, 0x6C, 0xB3, 0xD3, 0xDF, 0xB8, 0x8F, 0x4D, 0x3C, 0xFB, 0xF9, 0x73, 0x2C, 0x60, 0x79, 0x54, 0x81, 0x1F, 0xC9, 0x5F, 0x7A, 0x9D, 0x03, 0xA3, 0xE1, 0x8D, 0x04, 0x58, 0x1F, 0x05, 0x9D, 0xC1, 0x01, 0xEC, 0xF1, 0x12, 0xE1, 0x86, 0x38, 0x10, 0x31, 0x0B, 0x2D, 0x6E, 0x98, 0xCC, 0x31, 0xEE, 0xFF, 0xCB, 0x7A, 0x1B, 0x05, 0x02, 0xC1, 0x82, 0x43, 0x77, 0x20, 0x68, 0x62, 0x39, 0x92, 0x56, 0xCF, 0xD9, 0x56, 0xF6, 0x25, 0x25, 0x73, 0x47, 0xAB, 0x1C, 0x88, 0x86, 0x13, 0x60, 0xFC, 0x28, 0xB6, 0xAC, 0xA2, 0x1D, 0xF6, 0x73, 0x20, 0xB6, 0xF4, 0x89, 0x2F, 0x97, 0x36, 0x9C, 0xD3, 0xB7, 0xC7, 0x3A, 0xEF, 0xF6, 0xBF, 0x8A, 0x27, 0xA0, 0xDE, 0xD0, 0x46, 0xEC, 0xD4, 0x05, 0x27, 0xA0, 0x83, 0x47, 0x11, 0x8B, 0xE6, 0x0F, 0xAB, 0x27, 0xC9, 0x41, 0x13, 0xB4, 0xFC, 0x13, 0xF0, 0xEB, 0xC4, 0x31, 0xED, 0x38, 0x52, 0x43, 0x0E, 0x9B, 0x4F, 0x56, 0xFF, 0x8E, 0xCB, 0xE6, 0x02, 0xDD, 0x68, 0x91, 0xEF, 0x01, 0x94, 0x43, 0x73, 0x4F, 0x7F, 0x14, 0xE7, 0x26, 0x06, 0xB1, 0xED, 0x14, 0x94, 0x01, 0x6F, 0x98, 0x01, 0xDA, 0x90, 0x04, 0x10, 0x18, 0x07, 0xF0, 0x92, 0x99, 0xB3, 0x09, 0x30, 0x9A, 0x0E, 0x00, 0x14, 0x38, 0x57, 0xA5, 0x8A, 0x78, 0xF7, 0x39, 0x57, 0x3C, 0x60, 0x20, 0xFF, 0x89, 0x49, 0xCB, 0x37, 0x24, 0x00, 0xAB, 0x86, 0x01, 0x7A, 0x00, 0x6E, 0x9C, 0xDC, 0x9F, 0xDC, 0x26, 0x68, 0xF5, 0x77, 0xA5, 0x19, 0x12, 0x76, 0x71, 0xD0, 0x96, 0x80, 0x89, 0x25, 0x85, 0x3A, 0x49, 0x1A, 0x5E, 0x1F, 0xA5, 0xF8, 0x43, 0x64, 0x1E, 0xCF, 0xF7, 0xE5, 0x39, 0x8B, 0x6A, 0xFE, 0x42, 0x9E, 0x23, 0x2E, 0xA0, 0x0D, 0x2E, 0x60, 0x0E, 0x58, 0x61, 0x0D, 0xFA, 0xBD, 0xDE, 0xF3, 0x4E, 0x4F, 0x68, 0x00, 0xA7, 0x76, 0x9E, 0x72, 0x74, 0x05, 0x82, 0xE7, 0xB6, 0xF8, 0x18, 0x49, 0x9E, 0x46, 0x3D, 0x0F, 0xD6, 0x2B, 0xE1, 0xED, 0xFF, 0xBA, 0xAF, 0xC7, 0xCE, 0x28, 0xD5, 0xA3, 0x7D, 0x64, 0x07, 0x10, 0x03, 0x74, 0x9E, 0x9D, 0x79, 0x0F, 0xE8, 0x19, 0x87, 0xE7, 0x3B, 0x57, 0xEC, 0x9F, 0xB2, 0x03, 0x43, 0xAD, 0x15, 0xF5, 0xA7, 0x32, 0x4D, 0xBC, 0x6F, 0xD8, 0x70, 0x06, 0x2A, 0x7D, 0x9D, 0x08, 0xF6, 0x85, 0x80, 0xE7, 0x17, 0x1C, 0x7F, 0xC7, 0x27, 0xC9, 0xEF, 0x02, 0xA8, 0x01, 0x1C, 0x00, 0xF6, 0x8A, 0x04, 0x66, 0xE0, 0x6E, 0x7A, 0x6D, 0x80, 0x99, 0x55, 0xB7, 0xD5, 0xDC, 0x70, 0x62, 0x5F, 0x3D, 0x07, 0x4C, 0x80, 0x0E, 0xB2, 0xA1, 0x0D, 0xDF, 0x30, 0x06, 0xC2, 0x1F, 0x65, 0xF5, 0x6C, 0x30, 0xC0, 0x53, 0x80, 0x36, 0x20, 0x1A, 0x39, 0xDF, 0x19, 0x13, 0x34, 0xFA, 0xBA, 0xF9, 0x32, 0x14, 0xFD, 0xDC, 0xE9, 0xDF, 0x27, 0x2D, 0x88, 0x05, 0x8B, 0xE9, 0xF7, 0xCE, 0x65, 0x62, 0xB4, 0x38, 0x84, 0xC1, 0xE4, 0x84, 0x64, 0xFB, 0xEE, 0xFA, 0xD3, 0xCB, 0x71, 0x93, 0xB3, 0x2B, 0x5A, 0x79, 0x1D, 0x36, 0x2B, 0x80, 0x3C, 0x80, 0x33, 0x10, 0x4B, 0x8B, 0x88, 0xCE, 0x4D, 0x4C, 0xC6, 0x2B, 0x41, 0xD1, 0x2F, 0xCA, 0xC0, 0x53, 0x3A, 0x0A, 0x31, 0x27, 0x3B, 0xE6, 0x02, 0xB0, 0x03, 0xAE, 0xC0, 0x6D, 0x54, 0x6E, 0xD0, 0xE0, 0x99, 0x15, 0x50, 0xDF, 0xA9, 0xAB, 0x63, 0x8D, 0x9B, 0x42, 0x00, 0xDC, 0x9F, 0x0C, 0x8D, 0xCD, 0xAB, 0x78, 0x82, 0xC6, 0x6B, 0x94, 0xCC, 0x92, 0x96, 0xE2, 0x9C, 0x10, 0x23, 0xE7, 0x24, 0xDF, 0x8B, 0x20, 0x4D, 0x02, 0x09, 0x93, 0x0E, 0x5A, 0xBC, 0xF7, 0xF5, 0xBB, 0xEC, 0xBD, 0x63, 0x17, 0x80, 0x3A, 0x20, 0x0D, 0x6A, 0x9C, 0x47, 0x22, 0xE8, 0x08, 0x90, 0x53, 0xC9, 0x9B, 0xC5, 0xE8, 0xC0, 0x3C, 0xDD, 0x67, 0x0D, 0x4C, 0xC9, 0xDD, 0xF3, 0x8B, 0x00, 0x91, 0x06, 0x01, 0xA6, 0x8D, 0x00, 0x34, 0x1B, 0xDA, 0x90, 0x46, 0x3C, 0x99, 0xA1, 0x02, 0x24, 0x00, 0x7E, 0xF2, 0x4B, 0xAF, 0xC2, 0x7E, 0xCC, 0xAF, 0x42, 0x13, 0x34, 0xF9, 0x53, 0x8C, 0x99, 0x4E, 0xFB, 0xFA, 0x51, 0xF8, 0x4F, 0x38, 0x8A, 0x27, 0xF2, 0xD5, 0x52, 0x04, 0xD6, 0x1C, 0xC6, 0x30, 0x0C, 0xD3, 0xC0, 0x0F, 0xAD, 0x3B, 0xC9, 0xA1, 0xFA, 0x08, 0x42, 0xDA, 0x14, 0xDA, 0x67, 0x13, 0xA5, 0x86, 0x3C, 0x33, 0x81, 0xFE, 0x38, 0x90, 0x06, 0x90, 0xBE, 0xEF, 0xF9, 0xB6, 0x3C, 0x53, 0xFC, 0x5A, 0x3A, 0xD0, 0xD3, 0x0E, 0x73, 0xEA, 0x11, 0xDF, 0x3B, 0x8F, 0x85, 0xB5, 0x37, 0xE8, 0x01, 0x37, 0x74, 0xCB, 0xC6, 0xE8, 0x01, 0x5C, 0x01, 0x7B, 0xD5, 0xFA, 0x1A, 0x87, 0x81, 0x95, 0xCD, 0x47, 0xD0, 0xF4, 0xBB, 0x45, 0x15, 0xA1, 0x36, 0x10, 0x89, 0x2E, 0x52, 0x18, 0x3D, 0x7F, 0x3F, 0xB5, 0xF5, 0xA5, 0x36, 0x71, 0xB9, 0xE0, 0xC4, 0xFB, 0x4A, 0x62, 0x2E, 0x02, 0x6F, 0x53, 0xDF, 0x23, 0x9E, 0x36, 0x7D, 0x91, 0x07, 0xC8, 0xDA, 0x9F, 0x24, 0x80, 0x23, 0xAF, 0x6D, 0xC3, 0x1E, 0xC9, 0x29, 0x01, 0x7C, 0xE6, 0x45, 0x97, 0xC2, 0x19, 0xDE, 0xDE, 0xAB, 0xA5, 0x99, 0xA3, 0xA1, 0x80, 0x11, 0xE0, 0xD1, 0x28, 0x20, 0xA4, 0xA1, 0x8D, 0x04, 0xEA, 0xB9, 0x5A, 0x69, 0x34, 0x9E, 0x7F, 0x47, 0x3A, 0x4F, 0x97, 0x52, 0x01, 0x9A, 0x13, 0x34, 0x34, 0x3D, 0xA6, 0x4E, 0x8F, 0xD5, 0xF4, 0x66, 0x06, 0xF4, 0x5A, 0x83, 0xBB, 0xEB, 0x38, 0xBA, 0x30, 0x66, 0x1F, 0x28, 0xF5, 0x5B, 0x59, 0xFA, 0xF4, 0x29, 0xDF, 0x51, 0x9C, 0x91, 0x3A, 0xF7, 0x69, 0xFC, 0xED, 0x8A, 0xE3, 0x88, 0xBF, 0x93, 0xE0, 0x53, 0x29, 0xE0, 0x05, 0x98, 0x00, 0x71, 0xF0, 0x2D, 0xAC, 0x80, 0x0B, 0xC0, 0xCB, 0x1F, 0xE0, 0xDC, 0xCE, 0xFF, 0x7B, 0xBB, 0x88, 0x5F, 0x4B, 0xB2, 0xDD, 0xCB, 0x82, 0x19, 0x20, 0x0C, 0x50, 0x6C, 0xF0, 0x69, 0x14, 0x60, 0x07, 0x48, 0x1B, 0x75, 0x8B, 0xC1, 0xE8, 0xB4, 0x03, 0xA9, 0x40, 0x38, 0x90, 0xF3, 0xF7, 0x49, 0xC7, 0xCC, 0xBF, 0xA3, 0xC6, 0x89, 0x82, 0x92, 0x3B, 0x31, 0x12, 0x43, 0x46, 0x30, 0xFC, 0x67, 0xEE, 0xF6, 0x15, 0x1D, 0xAD, 0x8A, 0x91, 0xCC, 0x9A, 0xB9, 0x7F, 0x50, 0xF6, 0x08, 0x3B, 0x30, 0x6D, 0x54, 0xC8, 0xE5, 0xCC, 0x38, 0xDB, 0xA0, 0x46, 0xCB, 0x1D, 0x08, 0xDE, 0x6D, 0x29, 0xD3, 0x57, 0xC4, 0xFA, 0xEA, 0xDA, 0x8C, 0xD1, 0xE5, 0xE8, 0xE1, 0x6C, 0x41, 0x13, 0xD6, 0x47, 0xEA, 0xDC, 0x00, 0x55, 0x20, 0x18, 0x48, 0x03, 0x4A, 0x1F, 0xE1, 0xF3, 0x03, 0x48, 0xED, 0x59, 0xBC, 0x13, 0x0D, 0x9E, 0x77, 0x36, 0xE0, 0x0C, 0xE8, 0x7C, 0x9A, 0xAE, 0xCA, 0xE8, 0xA0, 0x05, 0x14, 0xBF, 0x8A, 0x57, 0x91, 0x98, 0xD4, 0x71, 0x21, 0x08, 0x46, 0x46, 0x26, 0x7B, 0xBD, 0x79, 0xF5, 0xA8, 0xBC, 0xFC, 0xC3, 0xD7, 0x13, 0x98, 0xDC, 0xEC, 0x6D, 0xD9, 0xB6, 0x8E, 0x88, 0xDF, 0x66, 0x01, 0xF2, 0xC6, 0x01, 0x0E, 0x01, 0xD4, 0x28, 0x1E, 0xED, 0x9A, 0x91, 0xD5, 0x00, 0xA6, 0x5D, 0xEC, 0xF6, 0x55, 0xCB, 0xEF, 0x7F, 0xB0, 0xBF, 0xCA, 0xF7, 0x1D, 0x73, 0x3F, 0x80, 0x34, 0x8E, 0x6E, 0x65, 0x81, 0xB4, 0x86, 0x03, 0xC5, 0xDB, 0xFE, 0x54, 0x1D, 0x70, 0x6B, 0x08, 0x60, 0x0A, 0x28, 0x03, 0xD2, 0x50, 0x03, 0x72, 0x82, 0x96, 0xDF, 0x5B, 0x93, 0x6B, 0x3C, 0x40, 0x18, 0xCE, 0xB1, 0x89, 0xD9, 0x82, 0x74, 0x14, 0xA1, 0x8C, 0x09, 0x81, 0x98, 0x76, 0xE1, 0xCC, 0x95, 0x4D, 0xB3, 0x78, 0x56, 0xDA, 0x5C, 0x87, 0x2D, 0x67, 0xA5, 0xC9, 0x16, 0xD4, 0x10, 0x01, 0xE8, 0x19, 0x75, 0x9B, 0x5F, 0x22, 0x46, 0xA0, 0xA6, 0x03, 0xA3, 0xDE, 0xE0, 0x3D, 0x16, 0xC4, 0xF2, 0x53, 0xD3, 0x3F, 0x33, 0x34, 0xCA, 0xBE, 0x0F, 0x09, 0x75, 0xF6, 0xA7, 0x28, 0x20, 0xA9, 0xC1, 0x8D, 0x7A, 0xC4, 0xE8, 0x1C, 0x48, 0x06, 0x22, 0x00, 0x27, 0x40, 0x02, 0xA0, 0x04, 0x84, 0x81, 0xBC, 0xC7, 0xB4, 0xFA, 0x63, 0x7F, 0x73, 0x06, 0x87, 0x1C, 0x82, 0x73, 0x5A, 0x10, 0x34, 0x68, 0x0B, 0x9A, 0x34, 0x42, 0x52, 0xEB, 0x64, 0x7B, 0x78, 0x04, 0xA6, 0xAF, 0x7B, 0xA1, 0xBD, 0x2D, 0x7D, 0xF6, 0xE1, 0xDA, 0xA8, 0x4F, 0x33, 0xF9, 0xB9, 0xE6, 0x28, 0xAC, 0xC0, 0x34, 0x4B, 0xA7, 0x37, 0xA8, 0x97, 0x96, 0xF5, 0x26, 0xD6, 0xC9, 0x8D, 0x0C, 0xC0, 0xC7, 0x5B, 0xC5, 0x7A, 0xBD, 0xE9, 0x6F, 0x98, 0xC9, 0xFE, 0x2A, 0x59, 0xE5, 0xF4, 0x8E, 0x01, 0x91, 0x80, 0x3B, 0x60, 0x2F, 0x62, 0xFF, 0xB7, 0xD2, 0xED, 0xD7, 0xE0, 0xD1, 0x60, 0x40, 0x0B, 0x60, 0x01, 0x4E, 0x00, 0x7C, 0x80, 0x48, 0xC4, 0xCC, 0x70, 0x7B, 0xE2, 0x38, 0x2B, 0x99, 0x86, 0x7B, 0xE8, 0x37, 0x5E, 0xE5, 0xED, 0x74, 0xE3, 0x28, 0xAA, 0x19, 0xF5, 0x92, 0xA8, 0xE5, 0x24, 0xEE, 0xF5, 0xF4, 0x76, 0xBB, 0xCE, 0x9D, 0x71, 0x4A, 0x4A, 0xA3, 0x68, 0x64, 0x40, 0x36, 0x8A, 0x1A, 0xF2, 0x33, 0xB2, 0xC8, 0x8E, 0x0F, 0x35, 0x30, 0x45, 0xD0, 0x02, 0x35, 0x88, 0xA4, 0xC4, 0xF4, 0x74, 0x8E, 0x67, 0xF4, 0x16, 0xBB, 0x32, 0xDE, 0xCE, 0xA1, 0x94, 0xD3, 0x42, 0xF8, 0x38, 0xC5, 0x45, 0xC3, 0x9E, 0x41, 0x76, 0xEF, 0xFF, 0xA1, 0xA1, 0x04, 0x88, 0x03, 0x3C, 0x2D, 0x3C, 0x05, 0xA4, 0xFE, 0x3E, 0x21, 0xCB, 0x80, 0xA0, 0x11, 0xCE, 0xB4, 0x64, 0x2D, 0x72, 0x45, 0x5F, 0x83, 0x1F, 0x1F, 0x81, 0x74, 0x5A, 0x5A, 0x7B, 0xE0, 0x71, 0xF7, 0x12, 0x28, 0x86, 0xF7, 0x33, 0x96, 0x94, 0x89, 0xC9, 0x5B, 0x20, 0x38, 0x73, 0x36, 0x7D, 0x72, 0x56, 0xB7, 0x43, 0x41, 0xF1, 0xC9, 0xDF, 0x99, 0xC1, 0x29, 0xB6, 0xD3, 0x6F, 0x01, 0xF8, 0xB5, 0xC8, 0xBD, 0xD2, 0x52, 0xE3, 0x0C, 0xC2, 0xF3, 0x7B, 0x2E, 0x61, 0x44, 0xB2, 0xD1, 0x37, 0x69, 0x30, 0xE0, 0x01, 0x58, 0x36, 0xA2, 0x51, 0x80, 0xDB, 0xB6, 0xCA, 0x97, 0x86, 0x79, 0x83, 0x00, 0x71, 0x80, 0x78, 0x37, 0x75, 0x9F, 0xD8, 0xF6, 0xEB, 0x6E, 0x8C, 0xA1, 0x58, 0xAA, 0xF5, 0x1E, 0x30, 0xCA, 0xEF, 0x8B, 0xE6, 0xD4, 0x7D, 0xBE, 0xDA, 0x5E, 0x17, 0xDC, 0x0E, 0xF2, 0x3E, 0x47, 0xD9, 0x7E, 0x1D, 0x20, 0x66, 0xC0, 0x0C, 0xFD, 0x92, 0xDE, 0xB6, 0xDF, 0x33, 0x9D, 0x4E, 0x8D, 0x78, 0xA6, 0xA5, 0xEC, 0x00, 0x2E, 0x3F, 0x21, 0x25, 0xF4, 0xD1, 0x42, 0xF6, 0xBF, 0xB6, 0x47, 0x86, 0x50, 0xFF, 0xB7, 0xB1, 0x66, 0x99, 0xE9, 0x25, 0xDA, 0x5A, 0x62, 0x59, 0x80, 0x31, 0xC0, 0xF3, 0x6A, 0xA9, 0x86, 0x35, 0x74, 0x7B, 0x14, 0x73, 0x02, 0xAE, 0x40, 0x66, 0xE3, 0x75, 0x2C, 0x76, 0x40, 0x0F, 0x30, 0x8A, 0x74, 0x37, 0x66, 0x02, 0x07, 0x0A, 0x66, 0xF4, 0xEB, 0x53, 0xE0, 0x8F, 0x64, 0x43, 0xEB, 0xF2, 0xD1, 0xEE, 0x69, 0xD3, 0xB6, 0xFC, 0xE6, 0xDE, 0x67, 0xAA, 0x67, 0x7A, 0x10, 0xB3, 0xB3, 0x9A, 0x62, 0xE7, 0x0A, 0xCE, 0xA7, 0x3B, 0x7B, 0x73, 0xBA, 0x98, 0xAE, 0x0E, 0xDB, 0x31, 0x7C, 0xAA, 0x03, 0x78, 0xFE, 0xD0, 0x2E, 0xF1, 0x22, 0xD7, 0xBD, 0x81, 0x09, 0x20, 0xE9, 0x2F, 0x2A, 0xBE, 0x85, 0x26, 0x90, 0xDD, 0x9E, 0x2E, 0xDC, 0x0D, 0x76, 0x0A, 0x50, 0x4D, 0x63, 0x15, 0x60, 0x0D, 0xD1, 0x86, 0x34, 0x0C, 0x50, 0x07, 0x22, 0xB7, 0xAE, 0x95, 0x71, 0xE3, 0xE9, 0xE4, 0x63, 0x02, 0x4E, 0xED, 0xEF, 0xCC, 0x79, 0x38, 0xF5, 0x8F, 0x42, 0xE0, 0x76, 0x0D, 0x0F, 0x78, 0x3B, 0xE0, 0x69, 0x30, 0x2A, 0x1C, 0x2A, 0xF8, 0x89, 0x58, 0xD0, 0x58, 0x19, 0x3A, 0x63, 0x83, 0x88, 0xD9, 0x2B, 0x68, 0x55, 0xE3, 0xE1, 0x33, 0x26, 0x55, 0xDC, 0xE7, 0xD4, 0x98, 0xBF, 0xF6, 0xC1, 0x01, 0xB4, 0x43, 0x30, 0xAA, 0x63, 0xDA, 0x7F, 0x7D, 0x79, 0x07, 0xEB, 0x03, 0xCD, 0x3F, 0x40, 0xC3, 0xEE, 0xDA, 0xAD, 0x51, 0xAB, 0xE2, 0x6D, 0x78, 0xE6, 0xBC, 0xB5, 0xA0, 0x32, 0x1B, 0x07, 0x88, 0xF9, 0xF4, 0x0C, 0xC6, 0x7A, 0x02, 0x15, 0x0D, 0x05, 0xC2, 0xF7, 0xA2, 0x95, 0xC6, 0x75, 0x56, 0xB3, 0x8E, 0x99, 0x2D, 0xD7, 0x40, 0x0F, 0xFE, 0xDA, 0x13, 0xD2, 0x04, 0x33, 0xFF, 0x9C, 0x9D, 0xBD, 0x24, 0x54, 0x97, 0xD5, 0x30, 0x61, 0x13, 0xF2, 0x07, 0x6A, 0x66, 0xAF, 0x8E, 0xC9, 0xED, 0xF5, 0x9A, 0x24, 0xEC, 0x73, 0x7B, 0x71, 0x03, 0x54, 0x00, 0x92, 0xC7, 0x80, 0xBA, 0xFA, 0x8B, 0x67, 0x17, 0x16, 0xB5, 0xF6, 0x7C, 0x36, 0xC7, 0x9E, 0xED, 0xE1, 0x99, 0xC8, 0xAE, 0xA7, 0x35, 0xB2, 0x31, 0x37, 0xF8, 0xC3, 0xFD, 0x29, 0x5E, 0xEC, 0x9E, 0x34, 0xB2, 0xE7, 0xEA, 0x9E, 0x0D, 0x06, 0xEC, 0x00, 0xEC, 0x00, 0xE9, 0xE3, 0x98, 0x57, 0xF3, 0x74, 0xFA, 0x37, 0xB8, 0x6E, 0x8C, 0x94, 0x1A, 0xD9, 0xCE, 0x70, 0x14, 0x3B, 0xDA, 0x45, 0x92, 0xBB, 0x17, 0x24, 0x90, 0x29, 0x10, 0xDF, 0xA9, 0xEE, 0xF3, 0x74, 0x24, 0xC8, 0x5C, 0x6D, 0x0D, 0xE0, 0x77, 0x1E, 0xD8, 0x81, 0x78, 0xB3, 0x11, 0x07, 0xA8, 0xA9, 0xDB, 0x1E, 0x20, 0x6D, 0x57, 0xCE, 0xB5, 0x76, 0x94, 0xD5, 0x76, 0x28, 0x62, 0x3E, 0x3D, 0x9A, 0x13, 0x2E, 0x0D, 0x6D, 0x78, 0x23, 0x1E, 0xEB, 0x70, 0xDA, 0x4D, 0x2F, 0x96, 0x8D, 0x03, 0x88, 0x00, 0xC7, 0x9F, 0xAC, 0xBD, 0x00, 0x4E, 0x13, 0xB4, 0xF8, 0x93, 0x85, 0xAD, 0x3E, 0xBF, 0x14, 0xF9, 0xAF, 0x2B, 0x1E, 0x56, 0x07, 0xA8, 0x3C, 0x68, 0x22, 0x3F, 0xE2, 0x8C, 0x76, 0x88, 0xD0, 0x59, 0x62, 0x8F, 0x41, 0xA5, 0x9F, 0x9D, 0x47, 0x7F, 0xE7, 0xC0, 0x8A, 0xF7, 0x0F, 0xAC, 0x01, 0x70, 0x35, 0x64, 0x17, 0x57, 0x44, 0x81, 0x7A, 0x45, 0x39, 0x9E, 0xFF, 0x8F, 0x9E, 0x16, 0xD2, 0xE0, 0x9D, 0xC5, 0x37, 0x05, 0xB2, 0x26, 0x73, 0xD0, 0x48, 0x80, 0xB8, 0xE1, 0x80, 0x18, 0x10, 0x0C, 0x94, 0x3D, 0xF5, 0x74, 0x7D, 0x62, 0x98, 0x80, 0x36, 0x6A, 0x96, 0x1A, 0xAC, 0x8A, 0xF1, 0xCC, 0xFB, 0x57, 0xF3, 0xE2, 0x89, 0x1A, 0x94, 0x3A, 0x7A, 0x8D, 0x15, 0xCF, 0xDF, 0x5A, 0xC8, 0x19, 0xBB, 0x7D, 0x0F, 0xE8, 0x16, 0x1A, 0x5A, 0xBD, 0xA3, 0x47, 0x81, 0x70, 0x20, 0xDF, 0xBE, 0xA7, 0x86, 0x24, 0xC0, 0xDA, 0x58, 0x65, 0x20, 0xF9, 0x79, 0x52, 0x02, 0xC6, 0xF3, 0xD4, 0x3E, 0x7A, 0x4E, 0x0C, 0xA8, 0x3D, 0x95, 0xA2, 0xDC, 0x4F, 0xFB, 0xD1, 0x27, 0x4E, 0xD1, 0x28, 0x80, 0xED, 0xB1, 0x3E, 0x20, 0xA0, 0x0E, 0x90, 0xF1, 0x44, 0xCD, 0x01, 0x35, 0xC0, 0xF8, 0x8D, 0x1A, 0xBC, 0x8A, 0x35, 0xEA, 0x8F, 0xE1, 0xAE, 0x88, 0x9E, 0x04, 0xD3, 0x16, 0x1E, 0x2D, 0x4C, 0x32, 0x44, 0xCF, 0x99, 0x58, 0xB6, 0x39, 0xB5, 0x2E, 0x07, 0x59, 0x7B, 0x27, 0xD8, 0x95, 0x76, 0x4F, 0x82, 0x04, 0x60, 0x02, 0xB0, 0xED, 0xD2, 0xAB, 0x12, 0x70, 0xBF, 0xB8, 0x8A, 0x91, 0x70, 0xFE, 0x03, 0xC2, 0x96, 0xD6, 0x9C, 0xC7, 0xD6, 0xF2, 0xCE, 0x00, 0x34, 0x27, 0xA1, 0xB4, 0x7B, 0x20, 0xE2, 0x03, 0x2E, 0x5A, 0x40, 0xE4, 0x6E, 0x60, 0x3D, 0x09, 0xE8, 0x01, 0xE6, 0x2A, 0xC7, 0xFC, 0xC8, 0xDF, 0x39, 0xE0, 0x09, 0xD8, 0x01, 0xFC, 0x3A, 0x0D, 0x22, 0x68, 0x7E, 0xF0, 0x64, 0xE6, 0xF9, 0xC4, 0xF5, 0x4B, 0xFC, 0x4F, 0x7D, 0x15, 0x10, 0xDC, 0xA2, 0xDA, 0xA4, 0x38, 0xA3, 0x0A, 0xEE, 0x28, 0x35, 0xFB, 0xA5, 0xA1, 0x32, 0xF0, 0x8E, 0xFD, 0xCF, 0x12, 0x63, 0xDD, 0xFF, 0xAC, 0x2A, 0x80, 0x30, 0x40, 0xE7, 0x69, 0x36, 0xF4, 0x46, 0xCE, 0x32, 0x9A, 0x25, 0xB6, 0xBB, 0x37, 0xED, 0x69, 0x31, 0x38, 0x67, 0x2B, 0x76, 0x94, 0x01, 0xC1, 0xFB, 0x19, 0x2C, 0x1A, 0x61, 0x79, 0x20, 0x1C, 0x28, 0x6A, 0xC4, 0x63, 0xD1, 0x7E, 0x80, 0x90, 0xC7, 0x3B, 0xC7, 0x80, 0xC8, 0x47, 0xB7, 0xA1, 0xA1, 0x7A, 0x73, 0xC8, 0x1D, 0x34, 0x42, 0xD0, 0xDC, 0xBF, 0x05, 0xE7, 0x8C, 0xB2, 0x8A, 0x1C, 0x0C, 0x1B, 0xA7, 0x39, 0x5A, 0x55, 0xB9, 0x50, 0x35, 0x72, 0xC5, 0xFF, 0xAD, 0xBA, 0xFD, 0x1B, 0xEC, 0x69, 0xE4, 0xA0, 0xF8, 0x89, 0xB4, 0xF8, 0x2D, 0xEB, 0x13, 0xED, 0xC5, 0x61, 0x0C, 0x90, 0x6C, 0x75, 0x0D, 0x9D, 0x29, 0xF5, 0x5E, 0x93, 0xD5, 0x30, 0xDB, 0xDA, 0x39, 0x42, 0xBF, 0x32, 0xB2, 0xDE, 0x5D, 0x29, 0x75, 0x8F, 0x31, 0xC6, 0xD9, 0x2D, 0xB6, 0xFC, 0x88, 0x78, 0xEB, 0x69, 0x04, 0x10, 0xF3, 0x43, 0x38, 0xA0, 0x06, 0x48, 0x6C, 0x9F, 0x89, 0x6C, 0x04, 0x6D, 0xEB, 0x69, 0xC9, 0x09, 0x1A, 0x7F, 0x4B, 0x8C, 0x04, 0xB9, 0x0E, 0x2A, 0xFE, 0xE3, 0xED, 0x8C, 0xAA, 0x88, 0x04, 0x0A, 0x3D, 0x26, 0x1F, 0x8A, 0x15, 0xCE, 0xE5, 0xCC, 0xBB, 0x80, 0xB7, 0xC6, 0xC9, 0x7E, 0x42, 0x7D, 0x53, 0xAB, 0x63, 0x6A, 0xF4, 0x17, 0x2B, 0x00, 0x3F, 0x00, 0x13, 0x70, 0x1A, 0xF2, 0xB8, 0xF5, 0xCE, 0xEF, 0x92, 0x8F, 0xCF, 0x09, 0xCB, 0x6E, 0xA9, 0x3A, 0xBC, 0xFB, 0xA5, 0x48, 0x77, 0x2D, 0x33, 0xE8, 0x51, 0x37, 0x4F, 0x80, 0xE3, 0xE9, 0xC6, 0x4F, 0xA0, 0x72, 0x5B, 0x3C, 0x50, 0x6C, 0x5B, 0xE0, 0x08, 0xC0, 0x0F, 0x10, 0xA7, 0xBF, 0xF3, 0xAE, 0x34, 0xF9, 0xEA, 0x9C, 0x87, 0xE3, 0x93, 0x35, 0x2C, 0x85, 0x47, 0x76, 0x28, 0x0A, 0x78, 0xC9, 0xDA, 0x7F, 0x2B, 0x43, 0x4D, 0x83, 0xA3, 0xBB, 0x35, 0x73, 0xFB, 0xAF, 0xF3, 0x63, 0xE4, 0x53, 0xF2, 0x1B, 0x2B, 0xF4, 0x0B, 0x0D, 0x80, 0x13, 0x38, 0x67, 0x7B, 0xBD, 0xB8, 0x6F, 0xB1, 0xF2, 0x9A, 0xC4, 0xD2, 0x01, 0xAE, 0x3F, 0xC1, 0x88, 0x35, 0xCD, 0x72, 0x98, 0x56, 0x6B, 0x99, 0x5A, 0x4B, 0x07, 0xF4, 0xD5, 0x30, 0x69, 0xD4, 0xB4, 0xB1, 0x39, 0x40, 0x0A, 0x30, 0x03, 0x5A, 0xBB, 0xA7, 0x85, 0xAA, 0xA1, 0xBB, 0xED, 0x25, 0x0E, 0x60, 0x0A, 0xCC, 0x7D, 0x96, 0x7D, 0x82, 0xA6, 0x3D, 0x8C, 0xED, 0x7F, 0xD4, 0xB0, 0xD2, 0xD4, 0x30, 0xC6, 0xA8, 0x8E, 0xA0, 0x21, 0x0F, 0xC1, 0x28, 0xB5, 0x05, 0xA1, 0x4B, 0x59, 0x9F, 0x0B, 0x7B, 0x2D, 0xFF, 0xF5, 0xDE, 0xC5, 0x66, 0x0E, 0x1A, 0x3A, 0x3B, 0x80, 0x33, 0x30, 0xE5, 0xE0, 0x7A, 0xDF, 0x0E, 0x0E, 0xEC, 0xBB, 0x32, 0x9A, 0x4C, 0x90, 0xBB, 0xAA, 0x5D, 0x57, 0x23, 0xDF, 0xC6, 0x04, 0x6A, 0xC0, 0x39, 0x00, 0x15, 0x90, 0xF3, 0x2D, 0x01, 0xB8, 0x00, 0x91, 0xAF, 0xB1, 0xF8, 0x2E, 0xE7, 0x99, 0x02, 0x11, 0x0D, 0x01, 0x9C, 0x01, 0x25, 0x80, 0x1D, 0x90, 0x02, 0x32, 0x26, 0x68, 0xF6, 0x27, 0x71, 0xDD, 0x80, 0x8D, 0xC3, 0xAF, 0xFD, 0x45, 0xBE, 0xD1, 0x7C, 0xC1, 0x01, 0xBF, 0x0A, 0x95, 0x88, 0x28, 0x9C, 0x47, 0x35, 0xF6, 0x99, 0xC3, 0x9A, 0x95, 0x73, 0x52, 0xCB, 0x7D, 0x48, 0xE2, 0xE7, 0x15, 0x90, 0x05, 0x04, 0x03, 0x56, 0x80, 0xFB, 0x7E, 0x13, 0xD4, 0x94, 0x5E, 0x14, 0xA0, 0x67, 0x6C, 0x4A, 0x1F, 0xE3, 0xBC, 0x23, 0xFB, 0x38, 0x9F, 0xB1, 0xCB, 0x48, 0x21, 0x40, 0x52, 0xC3, 0x1A, 0x01, 0x14, 0xEF, 0x96, 0x60, 0x53, 0x20, 0x0F, 0x10, 0x0C, 0x98, 0x3D, 0x5E, 0xE7, 0x0D, 0x4A, 0xC0, 0x6B, 0xA2, 0xE6, 0x9F, 0x6A, 0x8E, 0x33, 0xCA, 0x4F, 0x5A, 0xF2, 0xC7, 0x0B, 0x66, 0x51, 0xFA, 0x2D, 0x58, 0xC3, 0xFB, 0xC7, 0x1C, 0x6F, 0x15, 0xB3, 0x3E, 0xA9, 0x3F, 0xA2, 0x56, 0xFE, 0x58, 0xFD, 0xCF, 0xAB, 0xCE, 0x63, 0x57, 0xBA, 0xAD, 0x00, 0x15, 0x80, 0x12, 0x98, 0xF3, 0xFF, 0xB5, 0x7B, 0x9B, 0x67, 0x49, 0x76, 0x4F, 0x38, 0x10, 0xB7, 0xDB, 0x23, 0xE6, 0xB9, 0x9E, 0xBE, 0xBB, 0x86, 0x04, 0xA0, 0x07, 0x08, 0x03, 0x66, 0x67, 0x3D, 0xDC, 0x70, 0x80, 0x4E, 0xC3, 0x1F, 0x8F, 0x87, 0x03, 0x14, 0x01, 0x19, 0x40, 0x18, 0x60, 0x02, 0x48, 0x01, 0xDA, 0x28, 0x9F, 0xA0, 0xC5, 0x1F, 0x63, 0x58, 0x3B, 0x8B, 0xC1, 0xF2, 0xD4, 0xBE, 0xE6, 0x04, 0xC7, 0xF1, 0xD6, 0x1D, 0x7A, 0x45, 0xD2, 0x1D, 0xB7, 0x63, 0x2D, 0x93, 0xBC, 0x8C, 0xB6, 0x3E, 0xAC, 0xD7, 0xE7, 0x94, 0x77, 0xEF, 0x7C, 0xBA, 0x01, 0xEA, 0x00, 0xEB, 0xAE, 0xB3, 0x7B, 0x35, 0xA8, 0xBF, 0x73, 0x1E, 0x61, 0x9B, 0x16, 0xDD, 0x00, 0x32, 0x01, 0xF2, 0xF5, 0x78, 0xDB, 0x9C, 0xD7, 0x0C, 0x10, 0x01, 0xEC, 0xEC, 0x0E, 0x3D, 0x27, 0x20, 0xA7, 0x6C, 0x2E, 0x00, 0x9D, 0x46, 0x01, 0x7A, 0x80, 0x20, 0xA0, 0x1A, 0x19, 0x8D, 0x03, 0xB8, 0x03, 0x66, 0x80, 0xFF, 0x92, 0x82, 0x08, 0x5A, 0x7E, 0x4B, 0x2C, 0x09, 0x39, 0x22, 0x36, 0x82, 0x66, 0x4A, 0x3B, 0xF9, 0xA4, 0x30, 0x4E, 0x7B, 0x49, 0xAD, 0x72, 0x9C, 0x1F, 0x88, 0x73, 0x86, 0x7C, 0x9E, 0xB2, 0x67, 0xCC, 0x42, 0x9F, 0xB3, 0x60, 0xEC, 0x69, 0x80, 0x7C, 0x75, 0xB9, 0xAF, 0xE7, 0x02, 0x70, 0x1C, 0xE0, 0x03, 0x4C, 0xA2, 0xC4, 0x0A, 0x60, 0xDE, 0x5E, 0x0D, 0x24, 0x53, 0x5D, 0x9C, 0x16, 0x5D, 0x40, 0x19, 0xF0, 0xA9, 0x46, 0x5D, 0x23, 0x17, 0x40, 0x0B, 0x08, 0x01, 0x52, 0x81, 0xEA, 0x3F, 0x8C, 0x15, 0xF0, 0x46, 0x66, 0xC3, 0x81, 0xB0, 0xA7, 0xBE, 0xD2, 0xB0, 0x6B, 0x92, 0xDC, 0x41, 0xAB, 0xEF, 0xBD, 0x49, 0xC9, 0x3D, 0xD6, 0x03, 0xB1, 0xB9, 0x23, 0x05, 0x89, 0x98, 0xCE, 0x70, 0x9F, 0x64, 0x7C, 0xBF, 0x17, 0xFE, 0x72, 0x08, 0xF5, 0xD5, 0x1C, 0xD4, 0xD2, 0x57, 0x1A, 0x72, 0x9A, 0x9C, 0xE6, 0xC7, 0x46, 0xB4, 0xC6, 0xCA, 0x1A, 0x90, 0xFE, 0x62, 0xE4, 0x16, 0x26, 0x9D, 0x4F, 0x32, 0x2D, 0x93, 0x8F, 0xCA, 0x0F, 0xD7, 0x56, 0x72, 0x9A, 0xC2, 0x93, 0xE5, 0x16, 0xFF, 0xA3, 0x02, 0x94, 0x26, 0x4C, 0xBB, 0x80, 0x14, 0x3E, 0x35, 0x3F, 0x80, 0x14, 0x60, 0x07, 0x6C, 0x1C, 0xB4, 0x0B, 0x90, 0x6C, 0x30, 0x30, 0x9A, 0xD4, 0xA9, 0x80, 0x1F, 0x20, 0xC6, 0xEE, 0x84, 0x11, 0xB4, 0x68, 0x07, 0x5C, 0x4A, 0xE4, 0x47, 0x99, 0x90, 0x4B, 0xF3, 0x9E, 0x91, 0xAD, 0xC4, 0x9F, 0xCC, 0xFC, 0x41, 0x2B, 0x5B, 0xEF, 0x15, 0x52, 0x43, 0xBB, 0xB7, 0x7B, 0xAD, 0x34, 0x5E, 0x42, 0x49, 0xF8, 0x61, 0x56, 0x11, 0x36, 0x19, 0x98, 0x56, 0xDB, 0x4C, 0xC0, 0x0D, 0xA8, 0xF8, 0x7D, 0x27, 0x8C, 0x5F, 0x81, 0xFE, 0xA2, 0x76, 0xB0, 0xFD, 0xF9, 0xFF, 0x66, 0x7E, 0x3F, 0x26, 0x22, 0x77, 0x11, 0x03, 0x35, 0x03, 0x7D, 0x01, 0x44, 0xA3, 0x74, 0x04, 0xF9, 0x01, 0x31, 0xC0, 0x0B, 0x28, 0x02, 0xB2, 0x1A, 0x06, 0x84, 0x00, 0x6E, 0x5B, 0x82, 0x87, 0x27, 0x68, 0xD4, 0x83, 0xA4, 0x02, 0xFD, 0x67, 0x45, 0x11, 0xFD, 0x83, 0x0A, 0x3A, 0xAD, 0x90, 0x0E, 0x1E, 0xE7, 0x75, 0x6D, 0x75, 0x6F, 0x85, 0x1B, 0xD9, 0x5B, 0xF6, 0x8C, 0xBF, 0x07, 0x51, 0xC4, 0x77, 0x84, 0x2D, 0xC6, 0x3A, 0x3F, 0x00, 0xEE, 0x44, 0x77, 0x15, 0x10, 0x0C, 0xF8, 0xFA, 0x16, 0xB9, 0x9E, 0x22, 0x62, 0x80, 0xAE, 0x72, 0x3B, 0x6A, 0x1A, 0x6D, 0x37, 0x3E, 0x82, 0x5E, 0x00, 0x4F, 0x06, 0x91, 0x80, 0x74, 0x20, 0xA2, 0x21, 0x8D, 0x04, 0x92, 0x81, 0xE2, 0x2D, 0x5A, 0xAB, 0x06, 0xF8, 0x20, 0x1A, 0x0C, 0x98, 0x35, 0x08, 0x70, 0x19, 0x7B, 0xF3, 0x8E, 0x19, 0xA3, 0x77, 0xA3, 0x0A, 0x2A, 0x4D, 0x07, 0x92, 0x73, 0x6E, 0xD8, 0xD2, 0x54, 0x03, 0x0D, 0x76, 0xA3, 0x10, 0x84, 0x22, 0xA8, 0x44, 0x1A, 0x0E, 0xB5, 0xFF, 0x9C, 0xBC, 0x28, 0xBA, 0xD5, 0x88, 0x79, 0x68, 0x80, 0xF2, 0x55, 0xD7, 0x59, 0xB3, 0x77, 0xEB, 0x1E, 0x6D, 0xD3, 0x5A, 0xD5, 0xCB, 0x4E, 0x12, 0xE0, 0xDC, 0x9A, 0xA5, 0xF3, 0x56, 0x30, 0x59, 0x5A, 0xC2, 0x9A, 0x8D, 0xDA, 0x5B, 0xBE, 0x12, 0xE0, 0x8D, 0x10, 0x20, 0xCF, 0x5B, 0xCF, 0x51, 0xC0, 0x0C, 0x88, 0x6C, 0x18, 0xE0, 0x07, 0x90, 0xC7, 0xF9, 0x47, 0x1C, 0xC8, 0x09, 0x9A, 0x40, 0x59, 0x31, 0xEE, 0xB8, 0x4A, 0x03, 0xB9, 0xA1, 0x2C, 0x6D, 0xD9, 0x8F, 0x68, 0x2F, 0x19, 0xC5, 0x3F, 0xB1, 0xD7, 0xEA, 0xE4, 0xB8, 0x0B, 0x6D, 0x35, 0xC5, 0x4D, 0xB9, 0x9C, 0xF5, 0x5A, 0x5A, 0x24, 0x03, 0x4E, 0xC0, 0xB9, 0x36, 0x12, 0x00, 0x9D, 0x99, 0xC2, 0x07, 0x4C, 0x01, 0x71, 0x80, 0x15, 0x38, 0xBD, 0xD0, 0xB2, 0xE1, 0x07, 0x10, 0x01, 0x58, 0x01, 0xF2, 0x46, 0x34, 0x12, 0x60, 0x6A, 0x14, 0x20, 0x0E, 0x68, 0x00, 0x9E, 0x40, 0x1A, 0x50, 0xDA, 0xC8, 0xD1, 0x2B, 0x6B, 0x14, 0x40, 0x0E, 0x70, 0x02, 0xD3, 0x3B, 0x1A, 0xDA, 0x95, 0xD4, 0x42, 0xB0, 0x66, 0x3E, 0x3A, 0x09, 0xD5, 0x96, 0x48, 0x94, 0x42, 0x12, 0x39, 0x7B, 0x3E, 0x89, 0x6A, 0x4B, 0xD9, 0x97, 0x68, 0x9E, 0x22, 0xC1, 0xD5, 0x1F, 0x5C, 0x53, 0x4E, 0xDC, 0xC5, 0x36, 0xE9, 0x85, 0x22, 0x5F, 0xBD, 0x14, 0x48, 0x06, 0xD8, 0xDB, 0x10, 0x3F, 0x01, 0xD6, 0x46, 0x01, 0xD9, 0xDF, 0x29, 0xD5, 0x38, 0xF8, 0xA2, 0x09, 0xFE, 0x30, 0xEB, 0x9F, 0x42, 0x7B, 0x07, 0x96, 0x2E, 0xC8, 0x24, 0x01, 0xCA, 0x00, 0x17, 0x40, 0xD2, 0x38, 0xCF, 0xA7, 0x00, 0x84, 0x00, 0x0B, 0xA0, 0xBA, 0x28, 0x71, 0xBC, 0x11, 0x0D, 0x7D, 0xE0, 0x00, 0x15, 0x60, 0xD1, 0x31, 0x83, 0xF4, 0xA3, 0x28, 0xB5, 0x4A, 0x27, 0xE1, 0x1F, 0xE5, 0x64, 0x7B, 0xAD, 0x74, 0xA3, 0x82, 0x2A, 0xBE, 0x38, 0x92, 0x11, 0xCA, 0x38, 0x94, 0xBD, 0xB2, 0xDD, 0xF1, 0xCB, 0x43, 0x4C, 0x35, 0xF8, 0x76, 0x05, 0xE1, 0x6A, 0x0D, 0x63, 0x13, 0x07, 0xF4, 0x03, 0xFF, 0xFD, 0x16, 0x9A, 0xB2, 0xDC, 0xAF, 0x0E, 0x84, 0xB3, 0xE5, 0x87, 0xF9, 0xDF, 0xCD, 0x7F, 0xA5, 0x77, 0xEA, 0x35, 0x31, 0x0F, 0x50, 0xDD, 0x4F, 0x74, 0x80, 0xB2, 0xDE, 0x24, 0xBD, 0x37, 0xC9, 0x02, 0x24, 0xDF, 0xD6, 0xA4, 0xAD, 0x35, 0xA1, 0x06, 0x78, 0x35, 0xB2, 0x41, 0xFB, 0xBF, 0x89, 0x02, 0x53, 0xA8, 0x9A, 0x33, 0x5A, 0x38, 0x8A, 0x9E, 0xDE, 0xFD, 0x17, 0x61, 0x5D, 0x49, 0xD7, 0xEF, 0x9F, 0x56, 0x34, 0x50, 0x8E, 0x23, 0xC4, 0x6C, 0xD4, 0x89, 0xBA, 0x25, 0x81, 0xF5, 0x75, 0xA4, 0x11, 0xC4, 0xCC, 0xA7, 0x60, 0x88, 0x6F, 0xB5, 0x6B, 0xE9, 0x9F, 0x07, 0xA8, 0x02, 0xB4, 0xDA, 0x89, 0xFE, 0x00, 0x46, 0x40, 0x64, 0x7F, 0x67, 0x17, 0x3D, 0xD3, 0x00, 0x65, 0xFC, 0xB7, 0x94, 0x9F, 0x6D, 0x0C, 0x5F, 0x6F, 0xAE, 0x3A, 0xDB, 0xE1, 0x49, 0x14, 0x50, 0x03, 0x8C, 0x1F, 0x04, 0xE0, 0xA7, 0x51, 0x40, 0x59, 0x17, 0x1A, 0x03, 0xF0, 0x03, 0x58, 0x02, 0x6A, 0x00, 0x13, 0x70, 0x12, 0xE0, 0xB3, 0xE5, 0xE6, 0x22, 0x3E, 0x95, 0xD6, 0x43, 0xF5, 0xA7, 0xBE, 0x9A, 0xD2, 0x2D, 0xAB, 0xE0, 0xA4, 0x46, 0x81, 0xE2, 0x91, 0x3B, 0xEA, 0x12, 0x96, 0x98, 0x94, 0x74, 0x9F, 0x56, 0x84, 0xC7, 0x8A, 0x40, 0x1E, 0x4F, 0x80, 0xC3, 0x00, 0x9D, 0x47, 0x30, 0x2E, 0x01, 0x3B, 0xFF, 0x18, 0xC8, 0x57, 0x5E, 0xBD, 0x89, 0x6B, 0xAC, 0x72, 0x8D, 0x58, 0xD4, 0x01, 0x22, 0x00, 0xE7, 0xC6, 0x4C, 0x2E, 0x3C, 0xD6, 0xC3, 0x25, 0xBB, 0x2F, 0x4F, 0x1D, 0x30, 0x02, 0xFC, 0x00, 0x39, 0xA9, 0x91, 0x86, 0xBD, 0x0D, 0xCF, 0x8F, 0x06, 0x59, 0x36, 0x6A, 0xBE, 0x73, 0x4A, 0xC5, 0x91, 0x5F, 0x15, 0x2A, 0x8F, 0x4D, 0xB8, 0x60, 0xF7, 0x5C, 0xDD, 0xA2, 0x86, 0x38, 0x85, 0xD4, 0x07, 0x72, 0x0B, 0xCC, 0x7E, 0x84, 0x4F, 0xBA, 0xF6, 0xB9, 0x42, 0xC9, 0xA4, 0x6D, 0xFF, 0x55, 0x56, 0x51, 0xC0, 0x1F, 0x7F, 0x69, 0x2A, 0xE0, 0x08, 0x40, 0x07, 0x10, 0x07, 0x34, 0x81, 0x23, 0x5B, 0x58, 0x48, 0xB4, 0xC1, 0x00, 0x17, 0x20, 0x0E, 0xA4, 0xEC, 0x24, 0xAE, 0x36, 0x22, 0x9E, 0x2E, 0x46, 0x03, 0x88, 0x00, 0x69, 0x38, 0x03, 0xF9, 0x4C, 0xF3, 0x7A, 0x00, 0x5A, 0x80, 0xF8, 0xFE, 0x74, 0x53, 0x1C, 0xED, 0x55, 0x7C, 0x24, 0x3E, 0xB0, 0xE6, 0xC4, 0x0E, 0x3B, 0xBE, 0x17, 0x4A, 0x34, 0xD4, 0xF2, 0xBC, 0x4C, 0x98, 0x35, 0xF1, 0x7F, 0xCD, 0x14, 0x4F, 0x0C, 0x54, 0x9F, 0xCA, 0x98, 0x00, 0x92, 0x00, 0xC5, 0x53, 0x99, 0x8A, 0x86, 0x4C, 0x2E, 0x64, 0xB7, 0xE9, 0x52, 0x3C, 0x2A, 0x57, 0x04, 0xD0, 0xD3, 0x44, 0xFB, 0x0E, 0x96, 0x5C, 0x2D, 0xBA, 0x99, 0xCD, 0xD2, 0xAD, 0x8C, 0xC0, 0x0E, 0x88, 0xEE, 0xD5, 0x14, 0xE7, 0xFF, 0x30, 0x78, 0xA6, 0x9D, 0xB6, 0xF5, 0x02, 0x92, 0xFB, 0x5B, 0x26, 0xC3, 0x91, 0x50, 0x2E, 0xE1, 0xF4, 0x0F, 0x6E, 0x06, 0x4D, 0x65, 0x17, 0x54, 0xF0, 0x8C, 0x91, 0x3B, 0xC9, 0x4E, 0x26, 0x70, 0x77, 0x2C, 0x8B, 0x4E, 0xDA, 0xF6, 0x29, 0x10, 0x4C, 0xF1, 0x55, 0x9E, 0x09, 0xDC, 0x47, 0xF4, 0xB7, 0x18, 0x70, 0x01, 0xE4, 0xE9, 0x97, 0x75, 0x7F, 0x86, 0x5C, 0x02, 0x60, 0xD9, 0xF9, 0xFE, 0xF3, 0xF4, 0x13, 0xB3, 0xEC, 0x0D, 0xC0, 0x62, 0x8F, 0x98, 0x8B, 0x00, 0xD1, 0xA8, 0x49, 0xED, 0x37, 0x88, 0x01, 0x09, 0x20, 0x6C, 0x27, 0x6A, 0x2B, 0x80, 0x24, 0xC0, 0x0A, 0x50, 0x05, 0xCC, 0x27, 0x9D, 0x39, 0x41, 0xA3, 0x4F, 0x19, 0x81, 0x4B, 0xBF, 0x8E, 0xEE, 0xB0, 0x16, 0xD7, 0x4F, 0x47, 0x77, 0x80, 0x46, 0xA7, 0xF2, 0xB9, 0x9B, 0x93, 0x0B, 0x99, 0x26, 0x1D, 0xF1, 0x97, 0xB7, 0x14, 0x75, 0x6B, 0xBE, 0xDB, 0x34, 0x58, 0xA2, 0xF1, 0xE4, 0xAC, 0x55, 0xB7, 0x1B, 0x88, 0xF3, 0x1E, 0xB9, 0xD4, 0xDA, 0xCA, 0x86, 0xE6, 0xFB, 0x71, 0x21, 0xDD, 0x19, 0x32, 0x5D, 0x8B, 0x58, 0x67, 0xFE, 0xE6, 0xF6, 0x36, 0xBF, 0x86, 0xB9, 0x6E, 0x8F, 0xAC, 0x63, 0xEE, 0xE1, 0xDC, 0xC8, 0x6D, 0x5F, 0x39, 0x5A, 0x3E, 0x69, 0xBB, 0x8F, 0x48, 0x02, 0xD0, 0xF9, 0xCE, 0xB9, 0xAC, 0x27, 0x7F, 0x43, 0x64, 0x72, 0x0C, 0x55, 0x95, 0x13, 0x90, 0x21, 0xD5, 0xC2, 0xBD, 0x53, 0x04, 0xC2, 0xD5, 0x5C, 0xC8, 0xDA, 0x0B, 0x23, 0x2B, 0x98, 0x5B, 0x91, 0xC3, 0xE8, 0xB1, 0x57, 0xE1, 0x25, 0x84, 0x0F, 0x4F, 0x54, 0xA0, 0x80, 0xF3, 0x48, 0x8D, 0x96, 0x01, 0xCE, 0x40, 0xD4, 0xA4, 0xA0, 0x27, 0xA9, 0xBA, 0x85, 0xB3, 0x8F, 0xEC, 0x39, 0xA1, 0xDD, 0x3A, 0x6E, 0x7F, 0xBB, 0xC4, 0x7D, 0x67, 0x87, 0xBC, 0xFA, 0xD7, 0x4D, 0x20, 0x0C, 0x28, 0x7E, 0xFC, 0x76, 0x45, 0x81, 0xB1, 0x21, 0x3C, 0xBC, 0xB3, 0x26, 0x69, 0x80, 0xEB, 0x33, 0xCD, 0xCB, 0x53, 0xFE, 0xEB, 0xA0, 0x09, 0x82, 0xC6, 0xF4, 0x75, 0xC3, 0x13, 0x23, 0x76, 0xC7, 0x71, 0xEF, 0x4C, 0x6A, 0x0F, 0x02, 0x39, 0x1F, 0x9C, 0x14, 0x35, 0x19, 0xD5, 0xF5, 0x22, 0x30, 0x5E, 0x8F, 0xA7, 0x20, 0x76, 0x50, 0x15, 0xDD, 0x13, 0x3E, 0x66, 0xC0, 0x94, 0x5A, 0xCA, 0x01, 0x7B, 0xA6, 0x6A, 0x32, 0x3A, 0xAE, 0x3E, 0x2A, 0x7B, 0x00, 0xD1, 0xF6, 0xB2, 0x71, 0xDD, 0x21, 0x14, 0x07, 0xE8, 0x00, 0x7E, 0xF6, 0xE4, 0x8B, 0xCF, 0xFF, 0xDE, 0xD0, 0x03, 0x98, 0x00, 0xFE, 0x86, 0x90, 0x13, 0x30, 0x6F, 0x10, 0x20, 0x05, 0x50, 0x02, 0xC7, 0xF7, 0x27, 0x8F, 0x0E, 0x9A, 0x7E, 0x9D, 0x2F, 0x98, 0xE2, 0x39, 0xD0, 0x1F, 0x5D, 0x2F, 0x02, 0xE4, 0xBA, 0x2B, 0x2D, 0xF0, 0x3E, 0x67, 0x43, 0x87, 0x0B, 0x12, 0x90, 0x1C, 0xAF, 0x15, 0xC1, 0x64, 0x6D, 0x45, 0x9E, 0xD2, 0x3F, 0x03, 0xCC, 0xFF, 0x7A, 0x89, 0x36, 0xE4, 0x19, 0x1E, 0x11, 0x03, 0x52, 0x00, 0x9E, 0xEF, 0x94, 0x67, 0x40, 0x51, 0x81, 0x48, 0x20, 0xD7, 0x78, 0x8A, 0xDE, 0x82, 0x0D, 0x05, 0x10, 0xB9, 0xE3, 0xCA, 0x0C, 0x88, 0x02, 0x2E, 0xDB, 0xB6, 0x5B, 0xAB, 0xC1, 0xC0, 0xAD, 0x36, 0xE4, 0x23, 0x95, 0x7E, 0xEE, 0x4C, 0x57, 0x07, 0x0D, 0x05, 0x02, 0x65, 0xC5, 0xC9, 0xA3, 0xC1, 0x9A, 0xB8, 0x39, 0x58, 0x6F, 0x1F, 0x86, 0x3A, 0x81, 0x48, 0x7C, 0x9F, 0xE6, 0xC8, 0xB1, 0x54, 0xF5, 0x57, 0xFD, 0xCE, 0x73, 0xE7, 0xD6, 0x53, 0x81, 0x48, 0x40, 0x0B, 0x20, 0x7A, 0x14, 0x20, 0x9E, 0x3A, 0x9C, 0x2A, 0x50, 0x05, 0xDC, 0x76, 0x00, 0xDD, 0x93, 0x41, 0x6E, 0x00, 0x37, 0xE8, 0xEC, 0xF1, 0x38, 0xCE, 0xFD, 0x1A, 0x3A, 0x02, 0x90, 0x01, 0x7C, 0x1A, 0xBE, 0x5F, 0x2E, 0xB3, 0xCD, 0x52, 0x35, 0x64, 0xEF, 0xB6, 0xEF, 0xC9, 0xC3, 0x6F, 0x9E, 0x7E, 0x82, 0xE6, 0x18, 0xF5, 0x14, 0xFE, 0x84, 0x47, 0xB3, 0x2D, 0xEC, 0xC3, 0x0A, 0xA5, 0x28, 0x67, 0xA8, 0x33, 0x38, 0x61, 0x15, 0x90, 0x63, 0xC1, 0x25, 0x6D, 0x15, 0x30, 0x79, 0xDF, 0x9E, 0xF5, 0x08, 0xD0, 0x2A, 0xA0, 0x09, 0x90, 0x6D, 0xBB, 0x79, 0x75, 0x80, 0x05, 0x90, 0xA7, 0x3E, 0x2E, 0xDA, 0x9F, 0x0A, 0x90, 0x47, 0x6B, 0xC4, 0x13, 0x90, 0x06, 0xD7, 0xEF, 0x8B, 0x72, 0xFF, 0xA2, 0xD3, 0x90, 0x00, 0x4C, 0x00, 0x7F, 0xD5, 0x53, 0x72, 0xAB, 0x37, 0xA9, 0x36, 0x18, 0xE0, 0xDC, 0x8A, 0xC5, 0x25, 0xAB, 0x9E, 0xFA, 0x3B, 0x72, 0x04, 0x86, 0xFC, 0x15, 0x15, 0x01, 0xD5, 0xC0, 0x6D, 0x8F, 0x0A, 0xA9, 0xEE, 0x8A, 0x9E, 0x63, 0xA8, 0xDE, 0x1F, 0xE5, 0x83, 0x57, 0x2D, 0x11, 0x30, 0xE7, 0xC7, 0x93, 0xC6, 0xAE, 0x77, 0xD3, 0x34, 0x49, 0x0B, 0xE0, 0x09, 0xD0, 0xB2, 0x34, 0xE1, 0x2B, 0x78, 0xEB, 0x02, 0xC8, 0xD3, 0x58, 0x1C, 0x0A, 0x70, 0xEF, 0xCF, 0x12, 0xCB, 0xFF, 0x94, 0x6D, 0xF7, 0xD6, 0x5A, 0x4E, 0x03, 0xC8, 0xE3, 0x77, 0x94, 0xB6, 0x7D, 0x8C, 0xDF, 0x1F, 0x22, 0x6D, 0x32, 0xB3, 0x80, 0x1D, 0x20, 0x68, 0xC3, 0x79, 0xFF, 0x37, 0x25, 0xC0, 0xAE, 0x63, 0x47, 0x07, 0x2D, 0x71, 0xC5, 0x1A, 0x9F, 0x67, 0xB7, 0xCE, 0xC1, 0x4F, 0xD6, 0xD6, 0x3B, 0x61, 0x99, 0x1F, 0xC8, 0xB8, 0xFF, 0x64, 0x64, 0x6D, 0xE3, 0x55, 0xD5, 0x17, 0xFA, 0x9D, 0x8D, 0xC6, 0xE8, 0x91, 0xB1, 0x0E, 0x7B, 0x32, 0xA1, 0x3F, 0xE5, 0x63, 0xB8, 0xAB, 0xD3, 0x08, 0x0B, 0x58, 0x35, 0x02, 0x70, 0x01, 0xB8, 0x7F, 0x50, 0x23, 0xE0, 0xD0, 0xAE, 0x32, 0x90, 0x35, 0x08, 0x98, 0xB4, 0xAB, 0x8F, 0x27, 0x56, 0x6E, 0xB1, 0xF2, 0xC8, 0xFE, 0x21, 0x14, 0x60, 0x01, 0x8C, 0x81, 0x14, 0xA0, 0x46, 0x6D, 0x8C, 0x1B, 0x93, 0x29, 0xB5, 0xC6, 0xDC, 0xFE, 0x13, 0x50, 0xED, 0xA0, 0x41, 0x8F, 0x2F, 0x4C, 0xDB, 0xED, 0xC2, 0xDB, 0xCD, 0xC1, 0xE1, 0x94, 0xD8, 0x23, 0x3E, 0x5C, 0x02, 0x30, 0x43, 0x72, 0xD1, 0x21, 0x37, 0x17, 0xEF, 0x4A, 0x63, 0xFE, 0x6D, 0x66, 0xF5, 0xB7, 0x4C, 0x60, 0x0A, 0x14, 0x01, 0x16, 0xBB, 0xCF, 0x5C, 0x6C, 0x24, 0x72, 0xB6, 0x1C, 0x2D, 0xD9, 0xE3, 0xA1, 0x33, 0x79, 0xF3, 0x39, 0x10, 0xD8, 0xAA, 0x22, 0x0B, 0xEF, 0x63, 0x97, 0xD5, 0x4C, 0x70, 0xCB, 0xEE, 0x00, 0x1A, 0xBD, 0x53, 0x69, 0x18, 0x03, 0x9E, 0xC0, 0x08, 0xB6, 0xA9, 0x02, 0x21, 0x8D, 0xC7, 0xFD, 0x53, 0x9E, 0xE9, 0x01, 0x31, 0x20, 0x13, 0x41, 0xAB, 0x6E, 0x0D, 0x50, 0xEB, 0x11, 0x2D, 0xEA, 0xDF, 0xD2, 0xBF, 0x2A, 0xDE, 0xE9, 0xA6, 0xE5, 0x4A, 0xFE, 0xE0, 0xF3, 0x17, 0x38, 0x32, 0x43, 0xF6, 0x0E, 0x5E, 0x9C, 0x3B, 0x9A, 0xBE, 0xC5, 0xE3, 0xFC, 0xEA, 0x9D, 0xEE, 0x06, 0x6A, 0x91, 0x9D, 0x7D, 0x97, 0xC1, 0x01, 0xC6, 0x17, 0xE1, 0x0C, 0xB8, 0xBF, 0xD3, 0x01, 0x57, 0xC0, 0x12, 0xD0, 0x00, 0x7C, 0x59, 0x8F, 0xE3, 0x58, 0x81, 0xA4, 0x45, 0xAF, 0x22, 0x31, 0x20, 0xCF, 0xD8, 0x4B, 0x03, 0xDC, 0x50, 0x03, 0x3C, 0x81, 0x28, 0x20, 0x03, 0xA8, 0xD3, 0x18, 0x0F, 0x60, 0x07, 0xA8, 0xA1, 0xDE, 0x31, 0x23, 0x94, 0x3C, 0x85, 0xBF, 0xE1, 0x81, 0xC3, 0x89, 0x17, 0x80, 0x08, 0x74, 0x26, 0xA9, 0x7A, 0x00, 0x9F, 0x5B, 0x0A, 0xD9, 0xE0, 0x03, 0xA8, 0xB9, 0x0D, 0xDD, 0x6C, 0x29, 0xDC, 0xEA, 0x1D, 0x84, 0x71, 0x9A, 0x39, 0xBE, 0x06, 0xD5, 0x1E, 0xF1, 0x3A, 0xBA, 0x86, 0x00, 0xF2, 0x1E, 0x39, 0x15, 0xB8, 0x53, 0xC4, 0x0C, 0xE8, 0x9C, 0x43, 0x69, 0x74, 0x36, 0xE6, 0xE0, 0xBA, 0x9C, 0xC3, 0xDC, 0xFF, 0x35, 0x92, 0x3C, 0x7E, 0x06, 0xB3, 0x8A, 0x0E, 0x03, 0x5C, 0x80, 0xD6, 0xF6, 0x90, 0xD5, 0x03, 0x84, 0x02, 0x5E, 0x80, 0x11, 0xC0, 0x0A, 0x9C, 0x06, 0x05, 0x30, 0xA9, 0xEE, 0xE2, 0xEE, 0x87, 0xAF, 0x1E, 0x53, 0x11, 0xE4, 0x54, 0x0D, 0x06, 0xA6, 0x12, 0xD1, 0x45, 0xA2, 0xFC, 0xA0, 0x81, 0x10, 0x72, 0xD4, 0x92, 0x3A, 0x8F, 0x38, 0xBF, 0xDC, 0x83, 0xFE, 0x44, 0xBC, 0x7A, 0x81, 0xDB, 0x01, 0xD2, 0x00, 0x9D, 0xFA, 0xA2, 0x00, 0xA4, 0x5B, 0x1D, 0xE6, 0x8C, 0xE9, 0xF4, 0x8C, 0x1D, 0x0A, 0xC0, 0xFA, 0x7B, 0x4C, 0xE4, 0x4E, 0xA4, 0x54, 0x02, 0x72, 0x80, 0x65, 0x55, 0xF7, 0x2B, 0x67, 0xC5, 0xD4, 0x95, 0x64, 0xF4, 0x75, 0x81, 0x10, 0xA0, 0x74, 0x8B, 0xFD, 0x7A, 0x00, 0x75, 0x1A, 0x04, 0xA4, 0x00, 0x9E, 0x0D, 0x02, 0xAE, 0xDB, 0xB4, 0x76, 0xD0, 0xB6, 0x8C, 0xFE, 0x71, 0xEB, 0x79, 0x48, 0xB8, 0xE0, 0x31, 0xE3, 0x1D, 0x61, 0xAE, 0xDD, 0x13, 0xAE, 0x6D, 0x7C, 0xE0, 0xF3, 0xF2, 0x7C, 0xF4, 0xE1, 0xEB, 0xDE, 0x16, 0x3B, 0x5A, 0xFE, 0x1B, 0xCB, 0xAC, 0xDB, 0x7E, 0xAE, 0xD2, 0xCF, 0xD7, 0x07, 0xBF, 0xAF, 0xA8, 0x72, 0x20, 0x64, 0xD7, 0xDD, 0x38, 0xB6, 0x11, 0x7A, 0xBC, 0x46, 0xE8, 0x6B, 0x2E, 0xCA, 0xEF, 0xD3, 0x9D, 0xF6, 0xD3, 0x79, 0x97, 0x5B, 0x89, 0xB0, 0x1C, 0xA9, 0xFC, 0x96, 0xC3, 0x67, 0xC0, 0x14, 0xC8, 0x3E, 0xBD, 0x1F, 0x02, 0x48, 0x00, 0x66, 0x40, 0x08, 0x50, 0x05, 0x2C, 0x01, 0x6F, 0xDC, 0x2D, 0x4D, 0x91, 0xD2, 0x77, 0xC3, 0xDF, 0x63, 0xD9, 0x6F, 0x3B, 0xFF, 0x92, 0xF1, 0xC5, 0xD1, 0xCA, 0xEA, 0x09, 0x1C, 0xC6, 0xEE, 0x53, 0xF2, 0xB3, 0xC5, 0xCE, 0xBB, 0xA5, 0xD5, 0xAF, 0x01, 0x8C, 0xFC, 0x3A, 0x4B, 0xE7, 0x24, 0xB4, 0x1D, 0x90, 0x19, 0x7D, 0x7A, 0x3C, 0xD9, 0xE5, 0x00, 0xEA, 0xBD, 0x0B, 0x4D, 0x1D, 0xC4, 0x80, 0x13, 0xF8, 0x22, 0x4D, 0x92, 0x75, 0x9C, 0xBB, 0x66, 0xDD, 0x34, 0x74, 0x04, 0x80, 0xC7, 0xEC, 0x3A, 0xB6, 0x94, 0xBB, 0xCD, 0xE8, 0x44, 0x02, 0xD2, 0x70, 0x02, 0x4A, 0x11, 0x56, 0x49, 0xC0, 0xA5, 0x11, 0x8D, 0x03, 0x68, 0x35, 0x08, 0x30, 0xEF, 0x69, 0x87, 0xE8, 0x98, 0x19, 0x7C, 0x57, 0x4E, 0xA0, 0x2F, 0xC1, 0x0C, 0xF9, 0x65, 0x97, 0x2F, 0xD9, 0x1D, 0x82, 0xAA, 0xC1, 0x1C, 0xB9, 0xCC, 0x12, 0x8F, 0x45, 0x4F, 0xF8, 0xF0, 0xDB, 0x8F, 0x20, 0x8F, 0x66, 0x77, 0xF2, 0xAE, 0xA9, 0xA7, 0x00, 0x33, 0x39, 0x37, 0x0F, 0xAE, 0x9C, 0xC7, 0x46, 0xB9, 0x80, 0x5A, 0x8A, 0xFC, 0xB2, 0x5C, 0xE6, 0xD7, 0x98, 0xEA, 0xB4, 0xCB, 0xBA, 0x01, 0x31, 0xA3, 0x9D, 0xD1, 0xCB, 0x74, 0xA6, 0x71, 0xE6, 0x41, 0xB2, 0x7D, 0xC2, 0x70, 0x03, 0x26, 0x65, 0x2E, 0x0C, 0xC4, 0x5B, 0x7A, 0xF2, 0xC6, 0xD9, 0x2F, 0x85, 0x3C, 0x40, 0x49, 0xBF, 0x06, 0x66, 0x9D, 0x39, 0x36, 0x9D, 0x8A, 0x0F, 0x91, 0xB5, 0xC6, 0xF0, 0x2A, 0x1C, 0xE5, 0x8C, 0x60, 0xC0, 0x0D, 0x6F, 0x9D, 0xD4, 0xFB, 0x30, 0xDE, 0x5E, 0x0E, 0xBA, 0xAD, 0xC2, 0x34, 0xCB, 0xC6, 0x68, 0x06, 0x4C, 0xDA, 0x54, 0xB9, 0x00, 0x59, 0x5F, 0x8C, 0xAE, 0x91, 0xF8, 0xDF, 0x32, 0xCA, 0x79, 0x0A, 0x7B, 0xFD, 0x3B, 0x54, 0x83, 0xCF, 0x94, 0x5F, 0xF6, 0xE2, 0xD3, 0x02, 0x44, 0xF7, 0x58, 0xCC, 0x39, 0x8F, 0xCE, 0x6B, 0xAF, 0x10, 0x62, 0x40, 0x04, 0x30, 0x02, 0x22, 0x7B, 0xD9, 0x34, 0xD8, 0x1A, 0xD5, 0x88, 0x86, 0x35, 0x12, 0x50, 0x02, 0x62, 0x62, 0x16, 0x38, 0xA7, 0xAA, 0x3A, 0x7E, 0x96, 0xD9, 0xDF, 0x5A, 0x18, 0xD2, 0x4A, 0xF0, 0x17, 0x8D, 0x45, 0x7E, 0x46, 0x9F, 0x10, 0x0D, 0xB9, 0xED, 0x27, 0x68, 0x76, 0x13, 0x33, 0x13, 0xB4, 0x0E, 0x8C, 0xF6, 0x2E, 0xC0, 0xFD, 0x49, 0xEA, 0xF7, 0x53, 0xD8, 0x5F, 0x7D, 0xEC, 0x31, 0xE3, 0x9F, 0x92, 0x89, 0x03, 0xAA, 0xC0, 0x99, 0xEA, 0xFB, 0x01, 0xAC, 0xE1, 0xD4, 0xF0, 0x5D, 0x92, 0x9F, 0x88, 0x84, 0xFC, 0xCA, 0x37, 0xF5, 0x57, 0x4C, 0x9A, 0x80, 0x9A, 0x02, 0x5F, 0xC3, 0x04, 0x08, 0x7F, 0x8A, 0x78, 0x04, 0xD0, 0x01, 0xB8, 0x21, 0x01, 0xD8, 0x01, 0x26, 0xD5, 0x5D, 0xD9, 0x51, 0x9A, 0x59, 0x20, 0x42, 0x83, 0x96, 0x48, 0x3B, 0x6C, 0x2B, 0x8A, 0x8C, 0x54, 0xF8, 0x0B, 0x58, 0x51, 0xF3, 0x4D, 0x9B, 0x8C, 0x3C, 0x8A, 0xC5, 0x80, 0xC7, 0xED, 0x52, 0xEC, 0xE8, 0xF6, 0x0C, 0x18, 0x25, 0x4A, 0x95, 0x6A, 0xF8, 0x64, 0x3A, 0xE2, 0xAF, 0x3D, 0x57, 0x26, 0x2D, 0x0A, 0x1E, 0xFD, 0xEB, 0x35, 0xB4, 0x00, 0x3F, 0x80, 0xD8, 0xEC, 0xBB, 0x0D, 0x02, 0xCA, 0xB6, 0xF0, 0xB6, 0xF5, 0xEF, 0x4C, 0x84, 0xBF, 0xE8, 0x48, 0x57, 0x56, 0xBB, 0x15, 0x31, 0x1C, 0x0F, 0x4B, 0x16, 0xFE, 0xF9, 0x25, 0x80, 0x70, 0xA8, 0xDE, 0x9F, 0x02, 0x84, 0x00, 0x55, 0xC0, 0x0C, 0xF0, 0x00, 0x92, 0x71, 0x21, 0x3A, 0x07, 0x20, 0x02, 0x64, 0xF6, 0xB3, 0xEA, 0x2B, 0x04, 0xE1, 0xA7, 0x0D, 0xC3, 0x95, 0x2E, 0xF9, 0xFB, 0x51, 0x3C, 0xBD, 0xFF, 0xD5, 0xA9, 0xEF, 0x1C, 0xD2, 0xF6, 0x67, 0x89, 0x1C, 0xED, 0x2B, 0x91, 0x30, 0xD5, 0xE5, 0x39, 0x5F, 0x4E, 0xB9, 0x6E, 0x26, 0x0F, 0x49, 0xF1, 0x09, 0xB7, 0x29, 0xBF, 0x53, 0x6D, 0x99, 0x7B, 0x60, 0x8E, 0xB9, 0x77, 0x8D, 0x46, 0xAC, 0x1B, 0xCC, 0x8C, 0x23, 0x77, 0x74, 0xA9, 0xAE, 0x4F, 0x9B, 0x07, 0x60, 0x73, 0x9E, 0xED, 0xFF, 0x61, 0xB6, 0xA7, 0xEA, 0x07, 0x5D, 0xBA, 0xF6, 0x47, 0x07, 0x50, 0xDB, 0x6F, 0xD1, 0x93, 0x80, 0x16, 0x10, 0xDC, 0x10, 0xC0, 0x0B, 0xB0, 0x68, 0x38, 0xE0, 0xD1, 0xBF, 0x0A, 0x62, 0x16, 0xD3, 0x7E, 0x30, 0xD2, 0x75, 0x4C, 0xF3, 0x09, 0xF7, 0xA7, 0x16, 0xA0, 0x16, 0x6F, 0x58, 0xE1, 0x09, 0x3B, 0xFC, 0xF3, 0xED, 0x38, 0x05, 0x38, 0x3F, 0x75, 0x75, 0x14, 0xC6, 0x5B, 0xD9, 0x5F, 0x7A, 0xB2, 0x4E, 0xAC, 0xD7, 0x78, 0x9F, 0x2E, 0x45, 0xFE, 0x2E, 0xFC, 0x2E, 0x7E, 0x3B, 0x03, 0x24, 0xDB, 0x31, 0xDE, 0x14, 0x60, 0x01, 0xA8, 0x00, 0xD6, 0x86, 0x03, 0xD6, 0xFF, 0xDF, 0x3C, 0x4C, 0xC4, 0xF8, 0xA3, 0xCF, 0x01, 0x9C, 0x80, 0x72, 0xFC, 0xB5, 0xC4, 0x80, 0x1C, 0xC0, 0x1A, 0x6E, 0x40, 0x48, 0x23, 0x80, 0x54, 0xA0, 0xAC, 0x75, 0xA4, 0x13, 0x20, 0x05, 0xB8, 0x10, 0xB2, 0x71, 0x29, 0xA6, 0xBF, 0x49, 0xC7, 0x82, 0x57, 0x0F, 0xDA, 0xE0, 0x49, 0xBE, 0xD3, 0xBD, 0x94, 0xA2, 0xB1, 0x35, 0x04, 0x05, 0x3C, 0x99, 0xF4, 0xD9, 0x96, 0x99, 0xDB, 0xF2, 0x6D, 0xF8, 0x5E, 0x80, 0x12, 0x38, 0xFA, 0x8F, 0x72, 0x27, 0x07, 0x40, 0x0C, 0x70, 0xC3, 0x1C, 0x08, 0x01, 0x78, 0x4A, 0x9A, 0x04, 0xE8, 0x40, 0x1A, 0x07, 0xB0, 0xF8, 0xC9, 0xCE, 0xEA, 0xAD, 0x37, 0xA5, 0xED, 0xCC, 0x39, 0x37, 0x8C, 0x01, 0x7F, 0x7A, 0x94, 0xC5, 0x01, 0x67, 0xC0, 0xE2, 0xE9, 0xD5, 0x24, 0xE0, 0x38, 0x40, 0x09, 0xC4, 0x39, 0x1D, 0x34, 0xFE, 0x13, 0xDF, 0xC9, 0x58, 0xFE, 0x06, 0xED, 0x2B, 0x50, 0xA1, 0xB0, 0xEE, 0x1C, 0x48, 0x0F, 0x26, 0x75, 0xD2, 0xAF, 0x30, 0x5D, 0xA7, 0xB5, 0x4C, 0xFE, 0xD5, 0x9F, 0x34, 0x9A, 0x3C, 0x22, 0x33, 0x52, 0xFF, 0xB0, 0xEE, 0xF7, 0x86, 0x3A, 0xC0, 0xF3, 0x89, 0x80, 0x28, 0xA0, 0x02, 0x90, 0x29, 0x07, 0x3B, 0xA0, 0xDC, 0x20, 0x40, 0x1C, 0x50, 0x7C, 0xE7, 0x1A, 0x00, 0x5F, 0x2A, 0x97, 0x14, 0x80, 0x3E, 0x9E, 0xA1, 0xD1, 0xA8, 0xC9, 0xB1, 0x0B, 0x10, 0x0C, 0x78, 0x00, 0x9A, 0x00, 0x9F, 0x67, 0x02, 0xC1, 0x80, 0xB0, 0x09, 0x9A, 0x74, 0x7B, 0x45, 0x7C, 0x83, 0x50, 0x12, 0x68, 0x83, 0xCF, 0x38, 0xB8, 0xA7, 0x47, 0x17, 0x1D, 0x8A, 0x50, 0xC5, 0xA9, 0x42, 0x59, 0x03, 0xB3, 0x77, 0xFE, 0x2F, 0xE5, 0x4C, 0xD9, 0xEF, 0x4F, 0x24, 0xE7, 0xB7, 0xBB, 0x97, 0xEA, 0xD6, 0xB1, 0x22, 0xDF, 0x3F, 0x6F, 0xCC, 0x17, 0x05, 0xF0, 0x03, 0xC8, 0x23, 0x9D, 0x6A, 0xD2, 0xA0, 0xE7, 0xD7, 0x3D, 0x57, 0x11, 0x6C, 0xCA, 0x23, 0xE3, 0xF2, 0xB8, 0xEF, 0x95, 0x31, 0xE7, 0xC3, 0x86, 0x04, 0xE0, 0x0A, 0x94, 0x6D, 0x3D, 0x10, 0xE2, 0x86, 0x00, 0xC7, 0x37, 0xC8, 0x00, 0x95, 0x0E, 0x9A, 0x5E, 0xBF, 0xF0, 0xFA, 0xFE, 0xE5, 0xEC, 0xAB, 0x7A, 0x1E, 0x17, 0xBC, 0x4A, 0xB4, 0x47, 0x39, 0xA8, 0xD0, 0x23, 0x4E, 0xAD, 0xE4, 0x54, 0x3A, 0xC6, 0x03, 0xCF, 0xEC, 0xC0, 0x52, 0x7E, 0xC6, 0xED, 0x72, 0x17, 0xF4, 0x15, 0xD0, 0xB3, 0x87, 0x03, 0x35, 0x00, 0x92, 0x06, 0x01, 0x12, 0xFF, 0xF0, 0x13, 0x10, 0x05, 0x48, 0x1A, 0xD9, 0x88, 0xA7, 0xBC, 0xAA, 0xBF, 0xA5, 0x02, 0xFB, 0x82, 0x29, 0x18, 0x8D, 0x13, 0x04, 0xA0, 0x8F, 0x0F, 0xCF, 0x31, 0x40, 0x13, 0x88, 0x68, 0x38, 0xE0, 0xB1, 0xFF, 0x9B, 0x14, 0x60, 0x73, 0xEB, 0xA7, 0x0E, 0x9A, 0x41, 0x08, 0x9E, 0xF4, 0x1B, 0x5B, 0xAC, 0x8A, 0x79, 0x4A, 0x71, 0xE7, 0x24, 0x46, 0xDF, 0x7B, 0x3F, 0xA5, 0x49, 0x82, 0x9F, 0x1D, 0x8E, 0x9E, 0x12, 0x6F, 0x61, 0xFD, 0xE8, 0x9E, 0xD3, 0xCD, 0x04, 0xAA, 0xF6, 0x27, 0x17, 0x40, 0x0F, 0xC0, 0x02, 0x90, 0xEE, 0x5F, 0xFE, 0x24, 0xE0, 0x04, 0xC8, 0x79, 0x86, 0x43, 0x0D, 0x90, 0x06, 0x0B, 0x20, 0xAB, 0x49, 0x44, 0xAF, 0x5D, 0x48, 0xD8, 0x1E, 0x8E, 0x49, 0x7B, 0x7C, 0x77, 0x1D, 0x50, 0x02, 0x72, 0x16, 0xAA, 0x36, 0xE6, 0x8B, 0x09, 0xB8, 0x3F, 0x7B, 0xA1, 0xDE, 0xC6, 0xF3, 0x0E, 0x1A, 0x8C, 0x7B, 0x8A, 0xE3, 0x2B, 0x42, 0x45, 0xC9, 0xF7, 0x94, 0x92, 0x32, 0xDE, 0x42, 0xCE, 0x98, 0xD3, 0x21, 0xC3, 0xBF, 0xA6, 0x32, 0x12, 0xEE, 0x42, 0xAB, 0x9E, 0xA2, 0xF1, 0xEC, 0x69, 0x77, 0xE6, 0x29, 0xF7, 0x26, 0x61, 0xBA, 0xE7, 0xA1, 0x84, 0x66, 0xE3, 0x01, 0x8E, 0x3C, 0xD6, 0x76, 0x04, 0xE4, 0xD3, 0xBE, 0x20, 0x09, 0x1C, 0x6F, 0x3C, 0x46, 0xD8, 0x77, 0xFA, 0x75, 0xCA, 0x23, 0x33, 0xC2, 0x54, 0xBB, 0x8E, 0xC7, 0x06, 0x68, 0x00, 0xAE, 0x40, 0xF9, 0x74, 0xDD, 0x03, 0xD1, 0xF0, 0x02, 0x4C, 0x00, 0x76, 0xE0, 0x18, 0xC0, 0x07, 0x88, 0x9C, 0xA0, 0xC5, 0x97, 0xB0, 0x3D, 0x8E, 0x91, 0xBB, 0xA4, 0xC4, 0xA0, 0x85, 0x08, 0x0E, 0x9F, 0xCE, 0xDD, 0x42, 0x59, 0xC8, 0x8D, 0x72, 0x17, 0x3F, 0xCB, 0xF6, 0xE3, 0xA9, 0xAB, 0x85, 0x03, 0xAF, 0xF7, 0xED, 0x83, 0x1B, 0xD2, 0xB0, 0x3D, 0x02, 0xC0, 0x5B, 0x29, 0xE3, 0x68, 0x23, 0x00, 0x8F, 0xB3, 0xF4, 0x6F, 0x66, 0xA3, 0xF3, 0x00, 0xCE, 0x3C, 0x82, 0x0D, 0xAA, 0xC6, 0x7A, 0x35, 0xDE, 0xF6, 0x4E, 0xBE, 0x59, 0x52, 0xCA, 0xD1, 0xFA, 0x06, 0xC4, 0x01, 0x3F, 0x40, 0x8D, 0x57, 0xB6, 0x00, 0x69, 0x0D, 0x01, 0xDC, 0x01, 0x3D, 0x00, 0x0B, 0x20, 0x0E, 0xD4, 0x9C, 0xD2, 0x12, 0x13, 0x16, 0x59, 0x5F, 0xF5, 0x49, 0x0B, 0x3D, 0xF1, 0x32, 0x67, 0x5F, 0xEA, 0xA1, 0x2A, 0x09, 0x2C, 0x1B, 0xB2, 0x3F, 0xD8, 0xFC, 0x78, 0xB5, 0x58, 0x85, 0x3D, 0x62, 0xDD, 0xB7, 0x6A, 0x3E, 0xD5, 0x5D, 0xDB, 0x83, 0x16, 0x41, 0xC0, 0xF1, 0xED, 0x76, 0x54, 0x3C, 0xE8, 0x2F, 0x1A, 0x10, 0x0A, 0xF0, 0x33, 0xEA, 0x72, 0x62, 0x37, 0xF6, 0x58, 0xED, 0xA1, 0xD0, 0xBB, 0xB6, 0x72, 0xA5, 0x3E, 0xCF, 0x4D, 0x76, 0x0A, 0x01, 0x66, 0x40, 0xF0, 0x4E, 0x8B, 0x2A, 0x01, 0x6E, 0x0D, 0x02, 0xB4, 0x00, 0x0E, 0x80, 0x18, 0xE0, 0x46, 0xCC, 0x39, 0xAD, 0xA0, 0x28, 0xE7, 0xF6, 0xD5, 0x39, 0x4F, 0xF1, 0x67, 0x29, 0x9E, 0x11, 0x58, 0x70, 0xDE, 0xAB, 0x5D, 0xB5, 0x67, 0x62, 0x12, 0xAF, 0xF5, 0x74, 0x9C, 0xCF, 0x56, 0x69, 0x60, 0x95, 0x3B, 0x67, 0xCF, 0x9F, 0x6C, 0xC7, 0x1D, 0x72, 0x02, 0xEC, 0xF5, 0x6C, 0x33, 0x40, 0x0B, 0xF0, 0xB3, 0x67, 0x8F, 0xEC, 0x6C, 0xDF, 0x28, 0x6B, 0x88, 0x00, 0x1C, 0x8D, 0x03, 0xDC, 0xC9, 0x1E, 0x9B, 0xCA, 0xEF, 0xF5, 0x02, 0x9A, 0x56, 0x8C, 0x5D, 0x2E, 0xCF, 0xB3, 0x73, 0xC2, 0x6C, 0x80, 0x15, 0x90, 0x67, 0x23, 0x18, 0x30, 0x07, 0xB4, 0x61, 0x01, 0xCC, 0x4A, 0xA3, 0x1E, 0xBA, 0x26, 0x38, 0x7A, 0x8A, 0xC0, 0x52, 0xDC, 0xFA, 0xF1, 0xA4, 0x10, 0xBC, 0xE4, 0x1D, 0xF3, 0xB1, 0x9A, 0x8A, 0x1A, 0xA4, 0xC9, 0xB7, 0x97, 0xD5, 0x04, 0x8D, 0x9E, 0x0E, 0xAB, 0xAC, 0x3D, 0x89, 0x14, 0x0D, 0x57, 0x80, 0x6A, 0xCF, 0x2C, 0xCD, 0x2F, 0x5F, 0xB6, 0xA3, 0xE5, 0x53, 0xAC, 0xE5, 0xD9, 0xD7, 0x27, 0xA0, 0x00, 0xD3, 0x23, 0x5D, 0x10, 0x40, 0x4D, 0x25, 0x95, 0xB7, 0xD4, 0xEB, 0xD5, 0x8A, 0x3E, 0x4F, 0x53, 0x8B, 0x08, 0x60, 0x07, 0xC8, 0xC7, 0x51, 0x28, 0x08, 0x70, 0x01, 0x94, 0x01, 0x9A, 0xEF, 0x74, 0xA0, 0x7C, 0xBE, 0xA5, 0x83, 0x46, 0x7F, 0xF4, 0x20, 0xDD, 0x18, 0x5F, 0xEE, 0xC3, 0xBF, 0x25, 0x66, 0x44, 0x7D, 0xF3, 0xC8, 0xEE, 0x7F, 0xD7, 0x3E, 0x1A, 0x07, 0x5A, 0x8D, 0x8A, 0x76, 0x6D, 0x00, 0xA4, 0x7B, 0x74, 0xF0, 0x99, 0x0D, 0x7C, 0x74, 0xB4, 0x74, 0x2A, 0x94, 0x73, 0x18, 0xCF, 0x3D, 0x62, 0xAC, 0x05, 0xC8, 0xD3, 0x05, 0x93, 0xF1, 0x3C, 0x9E, 0xF6, 0xD8, 0xF0, 0xE8, 0x76, 0xF6, 0xA0, 0x79, 0x43, 0x5E, 0x2D, 0xED, 0x39, 0x25, 0x74, 0x8A, 0x57, 0xE7, 0x48, 0x26, 0xCF, 0x41, 0xCB, 0xB7, 0x94, 0xC9, 0x7B, 0x8D, 0xF5, 0x04, 0xAC, 0x21, 0x01, 0xB0, 0x01, 0x08, 0x6F, 0xDD, 0x23, 0x07, 0x71, 0x2B, 0xC3, 0xE4, 0x1F, 0xEB, 0x5A, 0x9D, 0x7C, 0xDB, 0x5D, 0x7C, 0xB5, 0x01, 0xF7, 0xB1, 0x76, 0xE6, 0x56, 0x43, 0x32, 0xBC, 0x4D, 0x04, 0xB2, 0xF0, 0xEF, 0x39, 0xED, 0x2E, 0x0E, 0xAE, 0xE5, 0x10, 0x85, 0x6B, 0x11, 0x70, 0xB6, 0x58, 0xDE, 0xB8, 0xF8, 0xD0, 0xF6, 0x53, 0x37, 0x7D, 0xEA, 0x2A, 0x4E, 0x00, 0xE7, 0xFA, 0x16, 0x66, 0x80, 0x9E, 0x92, 0x1D, 0xC7, 0x3C, 0x74, 0xF5, 0x2B, 0x07, 0x63, 0xF7, 0xEC, 0x86, 0xFD, 0x4E, 0x3F, 0xD2, 0x63, 0x09, 0x24, 0x80, 0x1D, 0xA0, 0x78, 0x97, 0x98, 0x28, 0xF7, 0xA7, 0x53, 0x0D, 0xDD, 0xFF, 0xCD, 0xB9, 0x83, 0x86, 0xAC, 0xB5, 0x13, 0xDA, 0x83, 0xD8, 0x7E, 0x1A, 0x7D, 0x0A, 0x03, 0x02, 0x24, 0xF0, 0x18, 0xA9, 0x86, 0xD0, 0xCE, 0xF7, 0x07, 0x4A, 0x75, 0xEF, 0x34, 0x94, 0x3D, 0xE9, 0xC7, 0xD3, 0xD9, 0x05, 0x57, 0x20, 0x1C, 0x29, 0x07, 0x9E, 0xF9, 0x80, 0xFA, 0x65, 0x0C, 0xCF, 0xFD, 0x07, 0x14, 0xFA, 0xFD, 0xE3, 0xC6, 0x75, 0x23, 0xC8, 0x02, 0xA6, 0xC8, 0x52, 0x39, 0x9F, 0x00, 0x76, 0x20, 0x63, 0x6C, 0xB8, 0x7E, 0x19, 0x6D, 0x9C, 0x27, 0x90, 0xFC, 0xCA, 0xDF, 0x9D, 0xDC, 0xFA, 0xF6, 0xFE, 0x35, 0x88, 0x01, 0x7E, 0x80, 0xF2, 0xD3, 0x8A, 0x54, 0x00, 0x33, 0x20, 0x06, 0x68, 0x02, 0x71, 0x80, 0x14, 0x24, 0x30, 0x4E, 0x76, 0xCC, 0x14, 0x39, 0x83, 0xA0, 0xB6, 0xB8, 0x08, 0x84, 0x53, 0x03, 0xC9, 0xA8, 0xB2, 0x16, 0x47, 0xD4, 0x35, 0xBB, 0x71, 0x2C, 0xFE, 0x31, 0xA4, 0xC2, 0x6F, 0x11, 0x4A, 0xA7, 0x19, 0x81, 0x00, 0x99, 0xD3, 0x77, 0xBF, 0x8D, 0x64, 0x76, 0x62, 0x9A, 0x9D, 0x66, 0xCD, 0x09, 0x06, 0x01, 0x6E, 0xC0, 0xE1, 0xC7, 0x55, 0xC0, 0x80, 0x20, 0xC0, 0x14, 0x88, 0xE9, 0xB7, 0xE3, 0xA5, 0x05, 0x68, 0xB7, 0xC8, 0xC2, 0xB5, 0x9F, 0xB2, 0x34, 0x84, 0x97, 0x02, 0x30, 0x02, 0x4A, 0x1E, 0xBF, 0x03, 0x06, 0xC8, 0x81, 0x63, 0xFD, 0x2D, 0x31, 0x9F, 0x00, 0x9B, 0xF7, 0xC0, 0xC8, 0x31, 0xB5, 0x2C, 0xBC, 0xC5, 0xF7, 0x63, 0x86, 0x60, 0x48, 0xD6, 0x44, 0x70, 0x5E, 0x49, 0xF9, 0xEB, 0x18, 0x8A, 0xF4, 0xD0, 0x72, 0xAB, 0x8F, 0xF3, 0x18, 0x7A, 0x32, 0xCD, 0x25, 0xA5, 0xD7, 0x81, 0x29, 0xC0, 0x4B, 0xF8, 0x13, 0x5B, 0x7F, 0x5F, 0x67, 0xFE, 0x51, 0x03, 0x35, 0x01, 0x28, 0xD7, 0xE4, 0xF6, 0xF5, 0xAA, 0xA1, 0x7D, 0xD6, 0x24, 0x07, 0xFC, 0xC3, 0xAD, 0x11, 0x58, 0xA3, 0x3A, 0x37, 0xC6, 0xBD, 0xCE, 0xB1, 0x63, 0x20, 0x87, 0xCE, 0x80, 0x3A, 0x90, 0xA7, 0x13, 0xDD, 0x0A, 0x50, 0x02, 0x72, 0x00, 0x6D, 0x58, 0x00, 0x41, 0x40, 0x0A, 0x50, 0x13, 0x34, 0x87, 0xD0, 0x89, 0x06, 0x12, 0x5F, 0xCB, 0xD9, 0xF9, 0x6F, 0xE6, 0x91, 0x54, 0x5B, 0x43, 0x2C, 0xBB, 0xAD, 0xC2, 0x91, 0x09, 0x7A, 0x0A, 0x77, 0x52, 0xBF, 0x1E, 0x45, 0x8A, 0x3B, 0xA8, 0xE3, 0x07, 0xC8, 0x4E, 0x5B, 0x8F, 0x64, 0x9A, 0xCE, 0x03, 0x4C, 0xBB, 0xD8, 0x8E, 0x4F, 0xF1, 0x77, 0x3A, 0x51, 0x00, 0x52, 0x44, 0xC2, 0x02, 0x90, 0x02, 0xD4, 0x1B, 0x05, 0x64, 0x3F, 0xCE, 0x36, 0x1A, 0x9B, 0xFD, 0xD7, 0xCE, 0x6E, 0x50, 0x9D, 0x5E, 0xA7, 0x00, 0x42, 0xBA, 0x54, 0x97, 0x80, 0x34, 0x3C, 0x80, 0x3C, 0x8D, 0x02, 0xCA, 0x3B, 0x2D, 0xAC, 0x00, 0x05, 0xC0, 0x0E, 0xD8, 0xBC, 0x3B, 0x63, 0x45, 0xA9, 0x66, 0x2E, 0x34, 0xB5, 0x85, 0xF5, 0xA9, 0x6D, 0xB3, 0x91, 0xBB, 0x75, 0xC1, 0x10, 0x1E, 0xB9, 0xA1, 0xEA, 0xF4, 0x16, 0x54, 0xFC, 0x77, 0xA4, 0x1D, 0x95, 0x2C, 0xC6, 0x7D, 0x09, 0xB0, 0xC9, 0x7E, 0xFF, 0xA6, 0x46, 0x50, 0x5B, 0x5E, 0x75, 0xB8, 0x62, 0x20, 0x0C, 0xC8, 0x03, 0xF0, 0xBC, 0xED, 0x0A, 0x90, 0xF3, 0x34, 0x21, 0xCC, 0xB7, 0xC4, 0xAF, 0x62, 0xE7, 0x57, 0x3D, 0xEC, 0xAC, 0xCD, 0x2B, 0x11, 0x72, 0x18, 0x9E, 0x20, 0xD1, 0xCD, 0x04, 0xB8, 0x01, 0xA5, 0x9D, 0xF6, 0x76, 0x80, 0x0C, 0xE0, 0x04, 0x94, 0x00, 0xAB, 0x27, 0xFB, 0x6D, 0x1D, 0xB3, 0xDC, 0x15, 0x62, 0x75, 0x34, 0xC6, 0xB6, 0x3B, 0x99, 0x1E, 0x46, 0x3A, 0xD8, 0xB2, 0x53, 0xB1, 0xDA, 0x8F, 0x3D, 0xA1, 0x8C, 0xFE, 0xC6, 0x4C, 0xFA, 0xA8, 0x3F, 0x32, 0x73, 0xD4, 0x99, 0x63, 0x3A, 0xC0, 0x54, 0x6A, 0x35, 0x10, 0x41, 0xA2, 0xDF, 0x34, 0x0D, 0xDF, 0x5E, 0x8B, 0x4A, 0x20, 0x0E, 0xE0, 0x0D, 0xF2, 0x7F, 0x0C, 0x8F, 0x38, 0x01, 0x31, 0x83, 0x8B, 0xE3, 0x06, 0x3B, 0x9E, 0xE8, 0x76, 0x05, 0xE9, 0xDA, 0x5B, 0x0D, 0xDB, 0x7F, 0x30, 0x22, 0xA8, 0x02, 0x54, 0x6F, 0xEA, 0xEC, 0x80, 0x09, 0xE0, 0x06, 0x44, 0x00, 0x75, 0x7A, 0xC3, 0x37, 0x80, 0x1D, 0x10, 0x05, 0xAC, 0x3A, 0x66, 0xD5, 0xDD, 0x14, 0x02, 0x8D, 0x97, 0xDA, 0xAA, 0x86, 0xC2, 0x88, 0xD9, 0x89, 0x4E, 0x5F, 0x93, 0xE0, 0xBD, 0xAB, 0xB1, 0xA4, 0xF9, 0x64, 0x65, 0x4F, 0x63, 0xC6, 0x4A, 0xF8, 0x0E, 0x76, 0x1D, 0x01, 0x72, 0xBC, 0x44, 0x67, 0xE9, 0x67, 0xFF, 0x7E, 0xF2, 0x9B, 0xC8, 0xD3, 0x0E, 0x96, 0xDC, 0x79, 0xD0, 0x0A, 0x80, 0xA8, 0xE3, 0xF2, 0x54, 0x94, 0x3D, 0x00, 0x6D, 0xE4, 0xF9, 0x6D, 0x5D, 0xDE, 0xA5, 0xA8, 0xBA, 0x25, 0x25, 0xD5, 0x83, 0x5F, 0xA9, 0x5F, 0xA0, 0x26, 0x40, 0x39, 0x02, 0x29, 0x05, 0x64, 0xC7, 0xF3, 0x18, 0x40, 0xD2, 0xB0, 0x46, 0x02, 0xEC, 0x80, 0x12, 0x90, 0x81, 0x98, 0x4D, 0xCF, 0x9A, 0xD8, 0x72, 0x52, 0x21, 0xF2, 0xEF, 0xEC, 0xA1, 0xDC, 0x8D, 0x7B, 0x4A, 0x50, 0x94, 0xB1, 0x84, 0xA6, 0x41, 0xF1, 0x36, 0x5D, 0xF7, 0x57, 0x8F, 0x69, 0x0E, 0xAD, 0xA3, 0x5D, 0xF1, 0xD8, 0xEA, 0x56, 0x02, 0x87, 0x76, 0x9A, 0x8D, 0x1F, 0x0D, 0x08, 0xC9, 0x6D, 0xD7, 0x27, 0xB5, 0xE5, 0xBD, 0x4C, 0x01, 0x5F, 0x4A, 0x69, 0x3C, 0x6D, 0xA0, 0x33, 0xD0, 0xD9, 0x9F, 0xAE, 0xB6, 0x2A, 0xFE, 0x5E, 0xEC, 0x9C, 0x0A, 0x94, 0xEF, 0xF2, 0xDF, 0xDD, 0x28, 0x08, 0x30, 0x06, 0x9C, 0x1A, 0xF2, 0x40, 0x9F, 0x5A, 0x72, 0x76, 0xD0, 0x08, 0xA9, 0x49, 0xC1, 0x5D, 0xDD, 0x9D, 0xBA, 0xE4, 0x56, 0xC8, 0x7A, 0xA8, 0xB4, 0xC1, 0x91, 0x62, 0xFC, 0x34, 0x12, 0x33, 0x09, 0xE6, 0x3B, 0x68, 0x93, 0x15, 0x9A, 0x5F, 0x7E, 0xD2, 0xEE, 0x7E, 0x7D, 0x13, 0x0B, 0x60, 0x5D, 0x5E, 0xCD, 0xBA, 0xF2, 0xBA, 0xA8, 0xB2, 0xAD, 0x1C, 0xAC, 0x68, 0xE3, 0x2A, 0x9F, 0x03, 0xEC, 0xC0, 0x09, 0x80, 0xB4, 0x11, 0x80, 0xF9, 0x4D, 0xEF, 0xCE, 0x35, 0x67, 0xEA, 0xFF, 0xBF, 0x74, 0x6B, 0xDE, 0xC1, 0xB2, 0x13, 0xC0, 0x7C, 0x8A, 0xE9, 0xF4, 0x23, 0x80, 0x0B, 0x90, 0xF8, 0x17, 0x0A, 0x30, 0x06, 0x92, 0x3B, 0x68, 0xDC, 0x85, 0x46, 0xF9, 0x93, 0xD6, 0x12, 0x09, 0x89, 0xA6, 0x47, 0x54, 0x6B, 0xAA, 0x53, 0x03, 0x81, 0x7C, 0x9C, 0x27, 0x7E, 0x4B, 0xE5, 0x09, 0xD6, 0x23, 0x2D, 0xB4, 0x32, 0xB2, 0xF9, 0xB7, 0x67, 0x2A, 0x1C, 0x10, 0x5F, 0x41, 0x63, 0xDD, 0x79, 0x0E, 0x8A, 0x9D, 0xB5, 0xD7, 0x00, 0x64, 0xAE, 0x9D, 0xB9, 0xD5, 0xDF, 0x4D, 0x01, 0xA7, 0x46, 0x7F, 0xCB, 0x24, 0xEF, 0x6F, 0xA6, 0x5B, 0x27, 0xC5, 0x3D, 0x6D, 0x95, 0x13, 0x9F, 0xDB, 0x21, 0x02, 0x54, 0xAF, 0x34, 0xE1, 0xA7, 0x5D, 0x2D, 0x00, 0x62, 0xE0, 0x78, 0x2F, 0x46, 0x06, 0xD2, 0x80, 0xD9, 0x31, 0x26, 0xD3, 0xCD, 0xF2, 0xF5, 0xA2, 0x85, 0xC6, 0xB2, 0x3D, 0xE2, 0x0A, 0x9C, 0xA3, 0x49, 0x20, 0xD8, 0x43, 0x2D, 0x00, 0xE6, 0x86, 0x11, 0x1C, 0xB2, 0x6D, 0x4B, 0x49, 0x4F, 0x13, 0x7C, 0xF2, 0xF8, 0x7A, 0x3D, 0x22, 0x20, 0xFC, 0x74, 0x69, 0xD3, 0x1E, 0xF0, 0x92, 0x03, 0x90, 0x36, 0x02, 0x38, 0xB5, 0x1F, 0x4F, 0x77, 0x40, 0xA5, 0x91, 0x8D, 0x00, 0x62, 0xC4, 0xFB, 0x9E, 0x75, 0x57, 0x2B, 0x8F, 0xB8, 0x26, 0x2B, 0x0E, 0x30, 0xDD, 0x6E, 0x1C, 0x5B, 0x12, 0xF8, 0x0C, 0x66, 0xCC, 0xBB, 0x00, 0x27, 0x40, 0x15, 0xB0, 0x1A, 0xB5, 0xE1, 0x0E, 0x9A, 0xFE, 0x61, 0x0C, 0x5A, 0x4F, 0xD0, 0x50, 0x72, 0x27, 0x85, 0x60, 0xB7, 0xF8, 0x77, 0x86, 0x0C, 0xE8, 0xBD, 0x48, 0xAA, 0x60, 0x4D, 0xBC, 0xD5, 0xBB, 0x78, 0xEE, 0xEA, 0x71, 0x9E, 0x1F, 0xBB, 0x71, 0x26, 0xD5, 0x68, 0x23, 0x93, 0xD4, 0x01, 0xA5, 0x9D, 0xEE, 0xA0, 0xB3, 0x13, 0x40, 0x74, 0x8D, 0x99, 0x9E, 0xA0, 0x05, 0x60, 0x0D, 0xE7, 0x9D, 0xB4, 0x2D, 0xFA, 0xD5, 0xE4, 0xAE, 0xE7, 0xB1, 0xDE, 0x06, 0x2C, 0x1D, 0x27, 0xAF, 0xDA, 0x07, 0x95, 0xD3, 0x50, 0x01, 0xBC, 0x80, 0x90, 0xE7, 0xCA, 0x5E, 0x0D, 0x03, 0x7C, 0x2E, 0x13, 0xDA, 0x41, 0xB3, 0xFB, 0x72, 0x48, 0x45, 0xD9, 0x0E, 0x07, 0x3E, 0xC7, 0x01, 0x85, 0x15, 0xFF, 0x62, 0x82, 0xE4, 0x50, 0x39, 0x7D, 0x8F, 0x95, 0xF1, 0x63, 0xBA, 0x0E, 0xD2, 0x5D, 0x23, 0x95, 0xBF, 0xCB, 0x0F, 0xE1, 0x06, 0x3F, 0xB9, 0x5B, 0xF4, 0xE7, 0xFE, 0x26, 0x48, 0xE2, 0xEF, 0x90, 0xBB, 0xEE, 0xED, 0x4B, 0x1B, 0x64, 0x8F, 0x96, 0x10, 0x03, 0x1A, 0x8D, 0xDA, 0x9F, 0x62, 0x9E, 0xE7, 0xF9, 0xA3, 0x6D, 0xC9, 0x59, 0x74, 0x27, 0x2D, 0xA4, 0xAF, 0x81, 0xEB, 0xAC, 0x77, 0x00, 0x71, 0x20, 0x3A, 0x92, 0x87, 0x1B, 0x32, 0x89, 0x59, 0x20, 0x15, 0x08, 0x07, 0xC6, 0x83, 0x4F, 0x26, 0x68, 0x8E, 0xC3, 0x64, 0x24, 0x06, 0xEE, 0x32, 0x90, 0x48, 0x39, 0x86, 0x03, 0xF1, 0xC1, 0x27, 0xC9, 0x4E, 0x0E, 0xB1, 0x7F, 0x08, 0x9D, 0x5E, 0xB4, 0x57, 0x13, 0x3E, 0x7F, 0xEA, 0x41, 0x24, 0xF7, 0xAF, 0xD0, 0xD8, 0xA6, 0xEB, 0x65, 0xBF, 0xEB, 0x15, 0x4A, 0x57, 0x57, 0x83, 0x26, 0xEF, 0x5B, 0xD7, 0x0D, 0x38, 0xB4, 0xEB, 0x09, 0xE7, 0x6C, 0xE3, 0xD4, 0x7C, 0xB2, 0x42, 0xB7, 0xA6, 0x3B, 0x5E, 0xEF, 0x73, 0xD0, 0xB5, 0x49, 0x0E, 0x4C, 0x13, 0x0C, 0xF5, 0xE9, 0x3E, 0x80, 0xA0, 0x5D, 0x9B, 0x8F, 0xD1, 0x29, 0x76, 0x80, 0x08, 0x38, 0x71, 0x66, 0x54, 0x1F, 0x88, 0xFE, 0xA2, 0x01, 0x36, 0x7B, 0xDA, 0xBD, 0x0E, 0xB4, 0xFD, 0x9D, 0xE1, 0x97, 0x55, 0xC7, 0x1F, 0xC9, 0x86, 0x8D, 0xD1, 0xA4, 0x3B, 0x22, 0x19, 0x77, 0x6D, 0x1A, 0xCF, 0xB6, 0x9D, 0xE0, 0x90, 0x29, 0x6B, 0x4F, 0x0F, 0xFC, 0x2C, 0xFE, 0x2A, 0x40, 0x26, 0xEB, 0x9E, 0xBF, 0xAE, 0x4E, 0xB9, 0xAD, 0xB7, 0xE9, 0xC0, 0xF8, 0x8C, 0xEB, 0x96, 0x12, 0x92, 0xEB, 0xCF, 0x07, 0xF0, 0xF3, 0x69, 0xF2, 0xB2, 0x62, 0xE7, 0xE7, 0x82, 0x57, 0x00, 0x4F, 0x86, 0x62, 0xE4, 0x98, 0xBB, 0x5D, 0x43, 0xBA, 0xF1, 0x4F, 0xF0, 0x2D, 0xB8, 0x15, 0x34, 0xBC, 0x91, 0xD3, 0x0C, 0x43, 0x00, 0x39, 0x20, 0x06, 0x98, 0x03, 0x9E, 0x40, 0x9D, 0x8E, 0x59, 0x22, 0x8F, 0x9F, 0xD0, 0x96, 0x53, 0xCD, 0x95, 0x14, 0x12, 0xB6, 0x16, 0x04, 0x21, 0x24, 0xF5, 0x28, 0x3E, 0x24, 0xC9, 0x96, 0x7B, 0xA9, 0xD5, 0xCF, 0x3D, 0x05, 0x69, 0x4C, 0xBD, 0xFF, 0x74, 0x49, 0xCE, 0xED, 0x6C, 0x3D, 0x4B, 0x0C, 0x5E, 0x6F, 0x95, 0xF1, 0xE4, 0x6F, 0x43, 0xEE, 0xC3, 0x7E, 0x5D, 0xB3, 0xD9, 0x90, 0x9D, 0xD9, 0xB0, 0x04, 0x82, 0x1A, 0x35, 0x07, 0xC1, 0xD9, 0x06, 0xE6, 0xAF, 0x9D, 0xF6, 0x6C, 0xFF, 0xB5, 0x88, 0x56, 0x9F, 0xB3, 0x67, 0xDD, 0xE0, 0x47, 0x42, 0xBF, 0x47, 0xC3, 0x1C, 0x88, 0x04, 0xD2, 0x81, 0xD2, 0x46, 0x20, 0xF4, 0xC7, 0x00, 0x52, 0xC0, 0xE6, 0xC4, 0x01, 0xB9, 0x20, 0xEC, 0xF5, 0xD5, 0x13, 0x64, 0x90, 0x46, 0x85, 0x37, 0x88, 0x20, 0x68, 0xAA, 0x86, 0xDC, 0x8E, 0x64, 0xDB, 0x45, 0xF0, 0x5C, 0x04, 0x9E, 0xA0, 0xCD, 0xC9, 0x0A, 0x9F, 0xF4, 0x6A, 0xAC, 0x44, 0x01, 0x36, 0x37, 0xF1, 0xD1, 0x66, 0xA2, 0xE9, 0xAF, 0xDE, 0xFE, 0x0D, 0xF2, 0x34, 0x72, 0xCF, 0x98, 0x60, 0x16, 0x70, 0x62, 0xB4, 0x47, 0x00, 0x6F, 0xCC, 0xBB, 0x70, 0xB4, 0xEF, 0x63, 0x76, 0x83, 0x3E, 0x40, 0xD0, 0xB4, 0x7C, 0x4E, 0x47, 0x50, 0x77, 0x66, 0x71, 0x02, 0x31, 0x77, 0x6F, 0x05, 0xDC, 0x81, 0x3A, 0xC0, 0x3C, 0x8F, 0x87, 0xFA, 0x53, 0xF5, 0x27, 0x07, 0x28, 0x01, 0xEF, 0x95, 0x26, 0xED, 0x80, 0xA2, 0x08, 0x1A, 0x51, 0x20, 0x09, 0x11, 0xDE, 0xBB, 0x40, 0xF4, 0x3F, 0x1C, 0x77, 0xCB, 0xBE, 0x22, 0xA0, 0xC4, 0xA8, 0xA5, 0x3F, 0xED, 0xDC, 0xBA, 0x0C, 0x5A, 0xBB, 0xEA, 0x8F, 0xEB, 0x0F, 0x6F, 0x29, 0x03, 0xED, 0xD0, 0xCD, 0xBE, 0x7A, 0x6C, 0xA2, 0xBB, 0x47, 0x7E, 0x4A, 0x36, 0x28, 0xB6, 0xA5, 0x40, 0x06, 0x50, 0xDE, 0xE8, 0xFF, 0x66, 0x39, 0x6D, 0xEB, 0xBF, 0xB9, 0x13, 0x94, 0x74, 0xB1, 0x98, 0x74, 0xA7, 0x1F, 0x47, 0x0B, 0x44, 0x02, 0x48, 0xEB, 0xFB, 0x67, 0x02, 0xDA, 0x30, 0x7D, 0x40, 0xCF, 0xA7, 0x00, 0x4A, 0x3A, 0x66, 0xD4, 0x6E, 0x35, 0x84, 0xE3, 0x59, 0xC0, 0x7D, 0xC6, 0x52, 0xF1, 0x47, 0x8E, 0xA1, 0x4D, 0x7A, 0xF7, 0xB7, 0xE6, 0x77, 0x51, 0x29, 0x85, 0xDC, 0xCB, 0x3C, 0x9D, 0xC5, 0x6B, 0x4B, 0xC3, 0x5E, 0x3D, 0xB9, 0xEC, 0x4E, 0x94, 0x10, 0x20, 0x39, 0xFD, 0xFC, 0xD3, 0x1F, 0xBF, 0x7C, 0x33, 0xB9, 0x76, 0xD5, 0x96, 0x0E, 0x30, 0xC3, 0xB4, 0xC1, 0xCF, 0x8C, 0x80, 0x02, 0x71, 0x9E, 0x12, 0xF0, 0x94, 0x3D, 0x6E, 0xE2, 0xC8, 0x7F, 0xAA, 0x1C, 0x72, 0xB3, 0x03, 0x22, 0x9D, 0x2D, 0x6B, 0x58, 0x02, 0x35, 0x9B, 0x9F, 0x02, 0xE6, 0x8D, 0x68, 0x58, 0x83, 0x00, 0xF5, 0xFD, 0xC5, 0x9A, 0x85, 0xF6, 0x37, 0xB3, 0x1D, 0x04, 0x59, 0x04, 0xF4, 0x51, 0x45, 0xF7, 0xC0, 0x77, 0xFA, 0x51, 0x1C, 0x87, 0x3B, 0xCA, 0x0F, 0x7A, 0x70, 0x1F, 0xF8, 0x97, 0xCD, 0x05, 0xA6, 0x17, 0x7A, 0xE1, 0xCC, 0x89, 0x5C, 0x00, 0x9E, 0x02, 0x6D, 0x87, 0xB0, 0x68, 0x3B, 0x2F, 0x44, 0xCD, 0x74, 0x18, 0xEE, 0x11, 0x02, 0x90, 0x6D, 0xAD, 0x47, 0x0B, 0x40, 0x1C, 0x30, 0x01, 0x26, 0x84, 0xB7, 0xE2, 0xCD, 0x33, 0xA1, 0x30, 0x41, 0xF3, 0x4E, 0x7B, 0xAF, 0x16, 0xD5, 0xEF, 0x87, 0x00, 0xA2, 0x1F, 0x52, 0x32, 0x40, 0x09, 0x30, 0x06, 0xBC, 0x11, 0x02, 0xA4, 0xFE, 0x2B, 0xB1, 0x56, 0x1D, 0x34, 0xF9, 0x1B, 0x34, 0x47, 0x5B, 0x37, 0x9A, 0x9F, 0x13, 0x49, 0xA5, 0xEE, 0xE7, 0x0E, 0x12, 0xEC, 0xB5, 0xD9, 0xEE, 0x77, 0xA6, 0x7B, 0x16, 0xEA, 0x4D, 0x74, 0xE7, 0x9C, 0x93, 0xE6, 0x00, 0xE0, 0xEB, 0xA1, 0xE3, 0xA9, 0x2E, 0x4E, 0x29, 0x65, 0x1A, 0x7D, 0xAC, 0x76, 0xE3, 0x84, 0x1E, 0xE0, 0x4C, 0x98, 0xA6, 0x04, 0x4C, 0x80, 0x0A, 0x60, 0xB5, 0x55, 0x69, 0x45, 0x7E, 0x87, 0x67, 0xC2, 0x31, 0xA4, 0xF3, 0xA5, 0x9D, 0x7F, 0x3C, 0x1D, 0x8A, 0xD9, 0xB6, 0xFA, 0x75, 0x60, 0x73, 0xC4, 0x20, 0x40, 0x18, 0xD0, 0x04, 0xFC, 0x00, 0xD1, 0x48, 0xFB, 0x57, 0xF3, 0x6D, 0x74, 0xD0, 0xB4, 0xBB, 0x82, 0xA7, 0x31, 0x6D, 0x4A, 0x21, 0x8C, 0x6C, 0x54, 0x67, 0xB8, 0x39, 0x71, 0xA6, 0x3D, 0xEA, 0x10, 0x89, 0x0E, 0xDA, 0x47, 0xDB, 0x5C, 0x55, 0x62, 0xFD, 0x7B, 0x6F, 0xE6, 0xD8, 0xF5, 0xA7, 0xB0, 0x99, 0xCF, 0x59, 0x25, 0x3C, 0x9A, 0x17, 0x47, 0xEC, 0x0B, 0x16, 0x2F, 0x1B, 0xB1, 0x69, 0xEA, 0xC3, 0x9D, 0x66, 0x27, 0x37, 0x0A, 0xC8, 0x35, 0xE6, 0xA9, 0xBF, 0xB7, 0xC2, 0x58, 0xFD, 0x8C, 0x66, 0x4B, 0xF7, 0x2F, 0xDF, 0x4C, 0x6E, 0x67, 0xA0, 0x38, 0x81, 0xEC, 0x57, 0x05, 0x17, 0x60, 0x01, 0x38, 0x01, 0x56, 0x80, 0x66, 0x43, 0x9F, 0xC9, 0x01, 0xEE, 0xA0, 0xDD, 0xEA, 0xC0, 0x04, 0x0D, 0xA3, 0xD1, 0x69, 0xBD, 0x4D, 0x46, 0xEF, 0xEA, 0x02, 0x4D, 0xE3, 0xA8, 0x6E, 0xB0, 0xA8, 0xEF, 0x05, 0x50, 0xAF, 0x78, 0x09, 0x7F, 0xB0, 0x09, 0xDA, 0x78, 0x36, 0x8D, 0xB6, 0x9B, 0x6D, 0xD7, 0xA3, 0x39, 0xD3, 0xCE, 0x8D, 0x3E, 0x46, 0xCB, 0xF2, 0x0E, 0xFF, 0xFA, 0xDC, 0x00, 0x26, 0x68, 0xD7, 0x11, 0x16, 0x88, 0xB3, 0xA3, 0xB5, 0x95, 0x46, 0x6D, 0x8C, 0x61, 0x79, 0xCA, 0x1F, 0x37, 0xC5, 0x2D, 0x7D, 0x60, 0x65, 0xE9, 0x93, 0x83, 0xEC, 0x2E, 0x52, 0x6B, 0x94, 0xEE, 0xA6, 0x50, 0x21, 0x40, 0x1D, 0x70, 0x02, 0xA2, 0x80, 0xA2, 0xCE, 0xBB, 0xCD, 0x4A, 0xF3, 0xFF, 0x0D, 0x5A, 0x5E, 0x8F, 0xA8, 0x73, 0xB4, 0x3D, 0xAC, 0x18, 0x02, 0xB0, 0x9C, 0xB8, 0x38, 0xD2, 0x08, 0x31, 0x3D, 0x89, 0x21, 0x9A, 0x11, 0xEB, 0x5B, 0xCE, 0x9E, 0x56, 0x09, 0xED, 0x07, 0x52, 0xD7, 0x03, 0xC9, 0xB7, 0x51, 0x63, 0x7B, 0xF4, 0xC7, 0x33, 0x6C, 0xEC, 0xD2, 0x41, 0xCB, 0xC7, 0x69, 0x60, 0x3E, 0x3D, 0x73, 0xD7, 0x57, 0x7E, 0xD4, 0x7E, 0xA3, 0x91, 0x37, 0xDD, 0xE3, 0x8D, 0xB9, 0x01, 0x60, 0xCA, 0x60, 0x35, 0xB7, 0x87, 0x75, 0x24, 0x13, 0xE0, 0x86, 0x12, 0x60, 0x06, 0x78, 0x01, 0x19, 0x40, 0x09, 0xA2, 0x4C, 0xD4, 0x41, 0x8B, 0x1D, 0xB4, 0x0F, 0x8E, 0x37, 0x80, 0xFA, 0x2D, 0xF2, 0x26, 0x94, 0x25, 0xD8, 0x85, 0x60, 0xFC, 0x97, 0xB9, 0x2E, 0x51, 0xA1, 0xCB, 0x2B, 0x50, 0xFF, 0x4A, 0xF9, 0xDE, 0xA4, 0xC1, 0x0C, 0x6F, 0x9E, 0xB5, 0xD9, 0xB3, 0x77, 0xD0, 0xE4, 0xD1, 0xDA, 0xA8, 0x49, 0xC6, 0x01, 0x32, 0xAD, 0x81, 0xB1, 0xFD, 0x85, 0x3D, 0x81, 0x94, 0x1D, 0x3B, 0xAD, 0x35, 0x1B, 0xD3, 0x17, 0x3C, 0xF2, 0x6B, 0x3C, 0xA5, 0xD7, 0x55, 0x7B, 0x3F, 0x89, 0xC5, 0x93, 0xE1, 0x05, 0x9C, 0x80, 0x70, 0x20, 0x03, 0xA8, 0x9C, 0x8E, 0x74, 0x80, 0x05, 0x10, 0x02, 0x6C, 0xDE, 0x9E, 0x79, 0x83, 0x96, 0xD2, 0x56, 0x5A, 0x9F, 0xF9, 0x91, 0xE2, 0x72, 0x41, 0x85, 0x7A, 0xD0, 0xA9, 0x0E, 0x84, 0x7C, 0x20, 0x24, 0x86, 0xC2, 0xDE, 0x7E, 0x04, 0xB6, 0x7F, 0x3D, 0x9E, 0x35, 0x05, 0xDE, 0x18, 0x95, 0x4E, 0x44, 0x72, 0x74, 0xEE, 0xB8, 0xB0, 0xC3, 0xCD, 0x95, 0x73, 0xDE, 0x89, 0xF3, 0xB0, 0x76, 0x24, 0xAB, 0xC1, 0x07, 0x38, 0x04, 0x50, 0x02, 0x42, 0x40, 0xDD, 0x36, 0xAC, 0xF9, 0x6B, 0xE7, 0xED, 0xB9, 0x6E, 0x9E, 0x38, 0x96, 0xAC, 0xF1, 0x0B, 0x21, 0x60, 0xB2, 0xF1, 0xA4, 0x80, 0xD8, 0xF3, 0x3E, 0x20, 0x20, 0x02, 0x28, 0x7D, 0x5E, 0x04, 0xD6, 0x41, 0xAB, 0x15, 0xB4, 0x92, 0xEA, 0x52, 0x75, 0xE0, 0x6D, 0xDB, 0x47, 0xD4, 0x13, 0x8E, 0x0D, 0xA3, 0x02, 0xA7, 0x74, 0xB5, 0x25, 0xCF, 0xFA, 0xF8, 0xDE, 0x61, 0x1F, 0xD8, 0x8D, 0x01, 0x55, 0x3F, 0xBD, 0x4A, 0xBB, 0x87, 0xB7, 0x33, 0x5A, 0x86, 0x3E, 0x29, 0xAF, 0x7D, 0x5D, 0x6F, 0xD0, 0x9C, 0x94, 0x63, 0xF7, 0xC1, 0xE4, 0x7C, 0x3A, 0x00, 0xDB, 0x2F, 0x73, 0x5E, 0x1D, 0xF3, 0x19, 0xE2, 0x9E, 0x92, 0xBE, 0x20, 0xCC, 0x28, 0x84, 0x68, 0xDF, 0x32, 0x19, 0x77, 0xC7, 0x98, 0xF6, 0xB1, 0x02, 0xF2, 0xFB, 0xF4, 0xF5, 0x1C, 0x00, 0x4C, 0x80, 0x04, 0x60, 0x06, 0x44, 0x02, 0xF9, 0x7D, 0xF1, 0xEA, 0xA5, 0x85, 0x9E, 0x75, 0xE4, 0x60, 0xA7, 0xFB, 0x89, 0x0B, 0x9F, 0x98, 0xDA, 0xBB, 0x4D, 0xFF, 0x1E, 0x58, 0x8F, 0xAF, 0xEB, 0x3A, 0x3F, 0x15, 0x4F, 0x9B, 0x8A, 0xA7, 0xF7, 0xA0, 0xCE, 0x35, 0x9F, 0xF7, 0x31, 0x58, 0xFA, 0x35, 0xA2, 0xE8, 0x3D, 0xED, 0x4F, 0x9A, 0x30, 0x15, 0x11, 0x9C, 0xFC, 0x8E, 0x4E, 0xF9, 0x7C, 0x56, 0xDF, 0x73, 0x4C, 0x0B, 0x60, 0xCE, 0xBD, 0x3A, 0xBB, 0xC1, 0x8C, 0x72, 0xCE, 0x04, 0xD3, 0x0C, 0x0E, 0xC8, 0x1C, 0xF3, 0xC7, 0x61, 0x8D, 0x10, 0x3A, 0x95, 0x3D, 0xA6, 0xA2, 0x8D, 0x30, 0xA0, 0xBA, 0x82, 0x79, 0x02, 0x60, 0x03, 0xD4, 0x01, 0x4B, 0x60, 0x72, 0xDD, 0xDA, 0x22, 0xBF, 0x25, 0x5F, 0x8B, 0x95, 0x73, 0x5F, 0xB3, 0xAC, 0x75, 0xF9, 0x64, 0xDE, 0x7D, 0x01, 0xF9, 0x60, 0x49, 0xE4, 0x11, 0x73, 0x27, 0xD3, 0xDC, 0x9E, 0x63, 0x9A, 0xF9, 0x6A, 0x7D, 0x94, 0xBF, 0x0E, 0x69, 0x73, 0x3E, 0xEB, 0x9C, 0xDA, 0x52, 0x35, 0x8F, 0xBF, 0xCD, 0x51, 0xF2, 0x28, 0xED, 0x8F, 0x7A, 0xB6, 0x6C, 0x61, 0x89, 0xF0, 0x2D, 0x3A, 0x71, 0x1A, 0x73, 0xCA, 0x93, 0x79, 0x3A, 0x95, 0x7B, 0x4A, 0x66, 0xDC, 0xF3, 0x66, 0xFA, 0xE4, 0xFC, 0x2A, 0x60, 0x78, 0x1B, 0x21, 0x2F, 0x64, 0x40, 0xC8, 0x3E, 0xB4, 0x9D, 0x00, 0xE8, 0x34, 0xB8, 0x61, 0x00, 0x07, 0xE0, 0xD5, 0x41, 0x1B, 0x39, 0xF3, 0xEE, 0x89, 0x39, 0x0E, 0xED, 0x92, 0x93, 0x78, 0xE7, 0x1E, 0x81, 0xAA, 0xB9, 0x0A, 0xA4, 0xE0, 0x8F, 0x41, 0x21, 0xAA, 0x6A, 0x5F, 0x08, 0xE8, 0x91, 0xD1, 0x4F, 0x19, 0xE1, 0xB1, 0xFE, 0xE5, 0xDF, 0x2E, 0x47, 0x6F, 0xE4, 0x3C, 0x7A, 0x80, 0x56, 0x87, 0xF0, 0xCC, 0x99, 0x78, 0xAE, 0x0E, 0x73, 0x7D, 0xAB, 0x9F, 0x90, 0x2F, 0xCD, 0x1E, 0x78, 0xA7, 0x6F, 0xB3, 0x43, 0x28, 0x00, 0x4F, 0xCA, 0xBB, 0xE1, 0xFC, 0x2A, 0x75, 0x34, 0xA2, 0x91, 0x80, 0x06, 0x90, 0xF6, 0x68, 0xE1, 0x5D, 0x2F, 0x5E, 0xC0, 0x0F, 0xA0, 0x0C, 0x58, 0xDC, 0x0E, 0xEA, 0x0E, 0x9A, 0xDC, 0xA0, 0xBD, 0xEF, 0x50, 0xFD, 0x2E, 0x35, 0x81, 0xD6, 0xC3, 0xEE, 0x88, 0xFF, 0x1A, 0x11, 0xE4, 0xAE, 0x34, 0xF3, 0xAD, 0xFC, 0x85, 0x93, 0xD1, 0x3E, 0x3E, 0x85, 0x01, 0xE5, 0x0D, 0x05, 0x72, 0x3E, 0x3D, 0xAA, 0x7D, 0x3E, 0x27, 0x8F, 0xD5, 0x2A, 0x4C, 0x3D, 0x77, 0x36, 0x86, 0xAD, 0xF7, 0x4E, 0x46, 0xF8, 0x62, 0xDE, 0x6B, 0xC2, 0xFC, 0x16, 0x39, 0x7F, 0x51, 0x02, 0xC6, 0x00, 0x3D, 0xE7, 0xBB, 0xD4, 0x06, 0x35, 0x04, 0xA8, 0x7C, 0x62, 0x58, 0x0D, 0xDE, 0x61, 0x3E, 0xF1, 0x98, 0xFB, 0x1F, 0xC0, 0x68, 0xA2, 0xA6, 0xFF, 0x13, 0xB5, 0xFC, 0x0A, 0xB0, 0x81, 0xB7, 0x67, 0x04, 0xE4, 0xCE, 0x82, 0xD0, 0x17, 0x2D, 0x0E, 0xCD, 0x13, 0x45, 0x0B, 0xE4, 0xF2, 0xF2, 0x5C, 0x6D, 0xDD, 0xA3, 0x7B, 0x66, 0xCF, 0x94, 0x48, 0x04, 0x90, 0xB5, 0x85, 0xCB, 0xD8, 0x81, 0xCC, 0xBE, 0xB0, 0xDB, 0x3C, 0x60, 0xFA, 0x73, 0x01, 0xAB, 0xDB, 0x72, 0x45, 0xFC, 0xF7, 0xF6, 0x5F, 0xF7, 0x4F, 0xB1, 0xC9, 0x87, 0x5F, 0xCF, 0x83, 0x2D, 0xD4, 0xAF, 0x06, 0x50, 0x00, 0xC7, 0x1B, 0xBA, 0x3F, 0xB1, 0x02, 0x56, 0x40, 0x0A, 0x10, 0xBE, 0xBF, 0x28, 0x0E, 0xF0, 0xD9, 0x9F, 0x52, 0x27, 0x68, 0xF6, 0xA7, 0x12, 0xFD, 0xDC, 0xEF, 0x52, 0x43, 0x01, 0xDE, 0x20, 0x0E, 0x97, 0xD2, 0x55, 0x4F, 0xC1, 0x44, 0x44, 0xC4, 0xB2, 0x87, 0x52, 0x7B, 0x97, 0x1A, 0x35, 0xCA, 0x1E, 0x93, 0x21, 0x01, 0x28, 0x00, 0x21, 0x60, 0x9A, 0xE1, 0x27, 0x79, 0x19, 0x57, 0x50, 0xA1, 0x7A, 0x4B, 0x57, 0x44, 0x6D, 0x26, 0x49, 0x82, 0x7F, 0x2B, 0xEE, 0xDC, 0x16, 0xE0, 0x11, 0xC1, 0xD1, 0xC7, 0x9B, 0x86, 0x80, 0xF9, 0x44, 0x8D, 0x33, 0xB0, 0xFD, 0x89, 0x6D, 0x3F, 0x84, 0xA9, 0x8D, 0x03, 0x38, 0x01, 0x12, 0x00, 0xF3, 0x13, 0x35, 0x9E, 0xA8, 0x39, 0x9C, 0xB0, 0xB5, 0x26, 0x6A, 0xDF, 0x8C, 0x14, 0x8D, 0x03, 0xAA, 0xC5, 0xF7, 0x64, 0x2A, 0x17, 0x76, 0x1C, 0x08, 0xA6, 0x29, 0x89, 0xCF, 0x03, 0xFA, 0xD8, 0xD0, 0xC4, 0xE3, 0xA8, 0x72, 0xEF, 0xD3, 0x80, 0x07, 0x90, 0x32, 0xF9, 0x7F, 0x80, 0xA7, 0x42, 0x75, 0x56, 0xC1, 0xD2, 0x6E, 0x6F, 0xD1, 0xC9, 0x9F, 0xAB, 0xDF, 0xD4, 0xD0, 0xE2, 0xBE, 0x5E, 0x0C, 0x79, 0x91, 0x5A, 0x99, 0x22, 0xBF, 0x9A, 0x7C, 0xF5, 0xF8, 0xF9, 0x13, 0xEF, 0x4A, 0x7E, 0x45, 0x23, 0xE7, 0x07, 0x04, 0xDC, 0x80, 0x62, 0x20, 0x0D, 0x70, 0x07, 0x24, 0x00, 0x2A, 0x40, 0x08, 0x48, 0x9F, 0xA0, 0xC5, 0xFB, 0x7C, 0x42, 0x7D, 0x34, 0xBB, 0xC9, 0x4F, 0x09, 0x25, 0x6D, 0xD5, 0x76, 0x04, 0x70, 0xB8, 0x72, 0x10, 0x4F, 0xD0, 0x9E, 0xA9, 0x28, 0xDF, 0x41, 0xBB, 0x85, 0xE0, 0x86, 0x29, 0x10, 0x0C, 0x54, 0x74, 0xD0, 0x66, 0x98, 0x56, 0xA6, 0x1A, 0x79, 0x5D, 0x8B, 0x11, 0xAD, 0xAC, 0xDF, 0x24, 0xFE, 0x58, 0x92, 0xC6, 0xD5, 0x8F, 0xB1, 0x71, 0x3F, 0xD9, 0x15, 0x55, 0xA6, 0xAD, 0x89, 0x75, 0xCE, 0x33, 0x1B, 0x53, 0x0D, 0xDF, 0xF0, 0x7A, 0xE7, 0x8A, 0x1A, 0x8F, 0x9D, 0x7B, 0x34, 0x9C, 0x80, 0x98, 0x25, 0x3D, 0xF3, 0x77, 0x4B, 0x2B, 0xB3, 0x0F, 0x29, 0x25, 0x10, 0x79, 0xD1, 0x4F, 0x7D, 0x80, 0x30, 0xA6, 0x23, 0x0A, 0xDB, 0x07, 0x33, 0x8C, 0x31, 0xA1, 0xC0, 0xCE, 0xFC, 0x1A, 0x92, 0x95, 0xCE, 0xF3, 0x49, 0x7B, 0x9F, 0x97, 0x7F, 0xB9, 0xE7, 0xB3, 0xEE, 0xC7, 0x74, 0xFE, 0xB1, 0xEF, 0xF8, 0xC5, 0xF4, 0xE7, 0x49, 0xA3, 0xFA, 0x89, 0x9C, 0xF3, 0xDB, 0x35, 0xB5, 0xD9, 0xC6, 0x78, 0x94, 0xFF, 0x78, 0x65, 0xD2, 0x38, 0xE2, 0x35, 0x32, 0x1B, 0xFE, 0xDC, 0xF8, 0x19, 0x90, 0x86, 0xD1, 0x8E, 0xA8, 0x10, 0x40, 0x02, 0x9C, 0xD3, 0x28, 0xC0, 0x6E, 0xD4, 0xEA, 0x4F, 0x7D, 0x79, 0xA0, 0x42, 0xF1, 0x4B, 0xB7, 0xA5, 0x8A, 0x28, 0x63, 0x57, 0x73, 0x1C, 0xAA, 0x4C, 0xDB, 0x06, 0xCD, 0x67, 0x2C, 0xEA, 0x4D, 0x0E, 0xE9, 0x4C, 0x2B, 0xED, 0xA0, 0x71, 0x35, 0x12, 0xA0, 0x41, 0x01, 0xC2, 0x40, 0xCA, 0xEF, 0x70, 0x36, 0xB7, 0x7A, 0x18, 0x1D, 0xFC, 0x2C, 0x1B, 0x7A, 0x8C, 0x6B, 0x46, 0xC3, 0x46, 0xA9, 0xCF, 0x6E, 0x29, 0x7F, 0x56, 0x87, 0x33, 0x20, 0xFA, 0x34, 0xCC, 0x2B, 0x10, 0xDE, 0xD0, 0x86, 0xED, 0x5D, 0x97, 0x9F, 0x8E, 0x07, 0xF5, 0x67, 0xC5, 0x3D, 0xAF, 0xFB, 0xA3, 0x80, 0xCD, 0xAB, 0xC0, 0x50, 0x25, 0x0E, 0x4E, 0xA4, 0x83, 0x05, 0xBE, 0x64, 0x74, 0x18, 0xB7, 0x31, 0x32, 0x68, 0x9F, 0x9B, 0xA2, 0xD0, 0x2E, 0x0A, 0xDF, 0x22, 0x91, 0x35, 0xE1, 0xE3, 0xFC, 0x34, 0xC0, 0xD0, 0x1A, 0x1A, 0xF0, 0x9B, 0x5C, 0xA4, 0x06, 0x9F, 0x7F, 0xE0, 0x76, 0x6D, 0xCF, 0x9B, 0x60, 0x9C, 0x02, 0x8C, 0x7F, 0x1D, 0x2C, 0x76, 0xAF, 0x0F, 0x41, 0x9D, 0x0D, 0x90, 0xBF, 0x22, 0x89, 0xFE, 0x13, 0x32, 0x03, 0x24, 0x1E, 0x07, 0x2A, 0xFB, 0x87, 0x75, 0xCB, 0x11, 0x80, 0x1D, 0xF0, 0x02, 0x2A, 0x80, 0x2C, 0x20, 0xE4, 0xD1, 0x4F, 0x23, 0x40, 0x02, 0xA8, 0x9C, 0xA0, 0xD1, 0xF7, 0xFE, 0x74, 0xAB, 0x9E, 0xE9, 0x19, 0x9B, 0xC5, 0x51, 0x17, 0x70, 0xA8, 0x13, 0x6A, 0xE1, 0x62, 0xC9, 0xD9, 0x8F, 0x3C, 0xAD, 0x4D, 0xCD, 0xCE, 0xBF, 0xE6, 0x63, 0x29, 0x00, 0xC9, 0x86, 0x3C, 0x2B, 0xED, 0xF9, 0x64, 0xFA, 0xFB, 0x5D, 0x20, 0xAD, 0xF4, 0x73, 0x9D, 0xE3, 0x99, 0x7C, 0x98, 0x23, 0x9A, 0x4E, 0x47, 0x51, 0xC7, 0x40, 0x64, 0x37, 0x30, 0x04, 0x03, 0x6E, 0x8F, 0x4A, 0x33, 0x03, 0xEC, 0x0D, 0x6B, 0x04, 0xA0, 0x8D, 0xF4, 0xFD, 0x23, 0xCD, 0xEF, 0x90, 0xC0, 0xBF, 0xCF, 0xB7, 0x44, 0x13, 0x34, 0xFE, 0x66, 0x3C, 0xA9, 0xEA, 0xAB, 0x0B, 0x78, 0xC4, 0x04, 0x0D, 0xA9, 0xB7, 0xA3, 0xD0, 0xE6, 0x8B, 0x44, 0xAC, 0xC5, 0xF1, 0xD6, 0x55, 0xFF, 0x36, 0xB5, 0x9C, 0xA0, 0xF1, 0x6B, 0x83, 0xCA, 0xBC, 0x47, 0xB1, 0x99, 0xF6, 0xAF, 0x56, 0xD5, 0xA0, 0xE7, 0x98, 0xBB, 0xDA, 0x62, 0x30, 0x30, 0xB6, 0x1C, 0xFF, 0xDE, 0x8C, 0xA5, 0x4C, 0xCA, 0x71, 0xD2, 0x50, 0xB1, 0x0D, 0x24, 0x39, 0x01, 0x19, 0x38, 0xC0, 0x03, 0x6D, 0x48, 0xE3, 0xE9, 0x6E, 0x98, 0xD4, 0x31, 0x31, 0x70, 0xAC, 0xBF, 0x58, 0xFB, 0x99, 0x57, 0x5B, 0x67, 0xA4, 0x5F, 0xD4, 0x04, 0xEA, 0xC9, 0x59, 0xB8, 0xEE, 0xA6, 0x4C, 0xD4, 0x70, 0xC7, 0x3F, 0xFC, 0x5D, 0x03, 0xCB, 0x12, 0xE3, 0x91, 0x44, 0x78, 0x02, 0x9D, 0x96, 0x88, 0xB2, 0xCB, 0xBB, 0xA9, 0x5D, 0xDD, 0x51, 0x80, 0x07, 0x0A, 0x90, 0x35, 0x76, 0x40, 0xF7, 0xF8, 0xCF, 0xEC, 0xF6, 0x23, 0xF1, 0x32, 0xD7, 0xC9, 0x11, 0xC2, 0xC2, 0x8A, 0xFB, 0xCD, 0xEF, 0xF8, 0x3D, 0x58, 0xC8, 0x79, 0xF4, 0x26, 0x05, 0xB0, 0x04, 0x94, 0x01, 0x89, 0x86, 0x37, 0x0A, 0xB0, 0xC6, 0x3D, 0x23, 0x1D, 0x80, 0x68, 0xBE, 0xF8, 0x98, 0x46, 0x39, 0xE0, 0x73, 0x90, 0xB1, 0x09, 0x9A, 0x7E, 0xAE, 0x5A, 0x95, 0xF6, 0xF7, 0xA4, 0xA6, 0x7D, 0x29, 0xF8, 0xBA, 0x78, 0xE2, 0x7B, 0x30, 0x8C, 0xB3, 0x2B, 0x90, 0x8E, 0x33, 0xBD, 0xE1, 0xBD, 0xA9, 0xAF, 0x85, 0xF8, 0x5D, 0xDB, 0xFC, 0x1C, 0x3A, 0x14, 0xD0, 0x37, 0x47, 0xB1, 0x64, 0x28, 0xD0, 0xF4, 0x3A, 0x3D, 0x1D, 0x3F, 0x0B, 0xF1, 0xEC, 0x84, 0xE0, 0x1C, 0xDF, 0xEA, 0x36, 0xD7, 0xFB, 0x72, 0x97, 0xB9, 0x09, 0x61, 0x3B, 0x5B, 0xF3, 0x97, 0x72, 0x0F, 0x7B, 0x9B, 0x02, 0xEA, 0x0D, 0x6B, 0x14, 0x30, 0x82, 0x88, 0x74, 0x00, 0xF1, 0xC6, 0xD9, 0xE5, 0xB0, 0x62, 0x20, 0x02, 0xC8, 0xE8, 0x6F, 0xA9, 0x09, 0x1A, 0xA6, 0x8A, 0x0F, 0xF9, 0x04, 0xED, 0x0B, 0xA1, 0x54, 0xB4, 0x55, 0x01, 0x63, 0x8B, 0x39, 0x86, 0x62, 0x9E, 0x3B, 0xEE, 0x3C, 0xA9, 0x18, 0x1E, 0x78, 0x4F, 0x6A, 0x7B, 0x8F, 0xC2, 0xD9, 0x75, 0xCD, 0xAF, 0x87, 0xDC, 0xB9, 0x1F, 0x80, 0x15, 0xB0, 0xB9, 0x8A, 0xE7, 0xCF, 0x9B, 0x7F, 0x4A, 0xDF, 0x76, 0x85, 0x32, 0x94, 0xFA, 0x13, 0x4F, 0x0B, 0x2E, 0x02, 0x2A, 0xAB, 0x9D, 0x86, 0x6F, 0x33, 0x48, 0x04, 0x40, 0xD1, 0x87, 0x94, 0x04, 0xC4, 0x00, 0xD6, 0x06, 0x35, 0x02, 0xB0, 0x69, 0x22, 0x31, 0x40, 0xA2, 0x41, 0x00, 0xF5, 0x77, 0x66, 0xC3, 0x0A, 0x08, 0x9A, 0xEF, 0xEC, 0xA0, 0xF9, 0x67, 0x4D, 0x49, 0xA2, 0xAB, 0x02, 0x6A, 0x04, 0x6B, 0x15, 0x2E, 0x87, 0x36, 0x6C, 0x0A, 0x24, 0xE1, 0xB2, 0x60, 0x84, 0x48, 0xB2, 0xD3, 0x43, 0xF2, 0x8C, 0x2D, 0xA6, 0x6F, 0xD3, 0x44, 0xCD, 0xC7, 0xB9, 0x4F, 0x00, 0x32, 0x40, 0x18, 0x48, 0x5F, 0xD6, 0x55, 0x72, 0x07, 0xBF, 0xD2, 0x67, 0xC1, 0xCD, 0x5B, 0xF4, 0xD7, 0xC9, 0xD0, 0x59, 0x9B, 0x5C, 0x65, 0xD1, 0x95, 0x52, 0x61, 0x7E, 0xC7, 0x41, 0x1B, 0x0C, 0xE8, 0xF3, 0xC9, 0xDF, 0x97, 0xA9, 0x02, 0x54, 0xC0, 0xF1, 0xFD, 0xC8, 0x7B, 0x6D, 0x69, 0x6C, 0xBE, 0x8F, 0x67, 0x7C, 0x9A, 0x1C, 0xB5, 0xA6, 0x56, 0xBE, 0x3F, 0xC5, 0x51, 0xC5, 0xEF, 0xA6, 0x5B, 0x25, 0x6A, 0x7B, 0x27, 0xC2, 0xD2, 0xF0, 0x58, 0x19, 0x6F, 0xCB, 0xFF, 0x36, 0xDD, 0xA2, 0xF7, 0x6D, 0x14, 0x1F, 0x1F, 0x3D, 0x46, 0x07, 0x34, 0x00, 0x9F, 0x2C, 0xC6, 0x6F, 0xDC, 0xE9, 0x3A, 0xB6, 0xEB, 0xDC, 0x09, 0x1E, 0x79, 0x98, 0xA9, 0x01, 0x4C, 0x4F, 0x88, 0x5E, 0xA5, 0x48, 0x92, 0xED, 0x6A, 0x63, 0x0A, 0x9C, 0xAE, 0x41, 0xCF, 0x18, 0xE0, 0x40, 0x1A, 0x09, 0x94, 0x9C, 0x6D, 0x2F, 0xE3, 0x0C, 0x98, 0x3F, 0x22, 0xCA, 0xF4, 0x28, 0x56, 0x2B, 0xE0, 0xDC, 0x41, 0xCB, 0xEF, 0xBE, 0x29, 0xDC, 0x83, 0x78, 0x01, 0x61, 0xF8, 0x38, 0x86, 0xC7, 0x33, 0x0B, 0x4B, 0x23, 0x03, 0x1B, 0xB1, 0x27, 0xAE, 0x06, 0x85, 0x83, 0x9A, 0xBE, 0x07, 0xB5, 0xFB, 0xF2, 0x9F, 0x7F, 0x97, 0xDA, 0x5E, 0xA8, 0xC7, 0x1A, 0xDA, 0x78, 0x24, 0x2F, 0xE2, 0x3C, 0x6F, 0x80, 0xD2, 0xDF, 0x9D, 0x29, 0xEF, 0xA0, 0x74, 0xC8, 0x5E, 0x69, 0x66, 0x63, 0xD4, 0xB3, 0xFB, 0x9D, 0xAB, 0x71, 0x00, 0x17, 0x40, 0x1B, 0x92, 0x0D, 0x6F, 0x14, 0xE0, 0x36, 0xB3, 0x93, 0x80, 0x1E, 0x80, 0x1F, 0xCF, 0xD6, 0x48, 0xC0, 0x0A, 0x08, 0xB9, 0xCF, 0x47, 0x07, 0xAD, 0xBE, 0x2E, 0xAB, 0x23, 0xD4, 0x02, 0xDD, 0x3F, 0x3F, 0x6C, 0xB4, 0xC1, 0xE3, 0x86, 0x17, 0x86, 0xFF, 0x1B, 0xF6, 0x0D, 0xFE, 0xE1, 0x1F, 0x57, 0x02, 0x7E, 0x7C, 0x1B, 0x62, 0xBD, 0x2F, 0x97, 0x1D, 0x37, 0x70, 0x80, 0x88, 0x9F, 0x84, 0x84, 0x4E, 0x40, 0x47, 0xD2, 0xFD, 0xCE, 0x96, 0x29, 0xFD, 0x02, 0x1A, 0x77, 0x3E, 0x3B, 0x7C, 0x3B, 0xF2, 0xF2, 0xAB, 0x9F, 0x5F, 0x8F, 0xD6, 0xB4, 0x00, 0x42, 0x0D, 0xDF, 0x91, 0x74, 0xDD, 0x26, 0xA8, 0x34, 0x30, 0xE0, 0xF0, 0x64, 0x18, 0x80, 0x38, 0x8D, 0xB9, 0x33, 0xCF, 0x95, 0xFD, 0xBB, 0x24, 0x7D, 0x87, 0x63, 0xFE, 0x9E, 0x4B, 0x62, 0x59, 0xCE, 0xEB, 0x81, 0x63, 0x6D, 0x98, 0x33, 0xCC, 0x9A, 0x55, 0x70, 0x1F, 0x66, 0xDD, 0xA7, 0x5B, 0x7E, 0x34, 0x39, 0x38, 0xF7, 0x79, 0x42, 0x15, 0x90, 0x37, 0x47, 0xC4, 0x1B, 0x92, 0x3B, 0x75, 0xCD, 0x32, 0xFE, 0x7D, 0x53, 0xAA, 0xFF, 0x35, 0xA3, 0xC6, 0x5F, 0x21, 0x1C, 0xDA, 0xD5, 0xBF, 0xF2, 0x6D, 0xDC, 0x58, 0x8F, 0xE9, 0xAA, 0x3F, 0xCB, 0x2F, 0x1D, 0x28, 0xDE, 0x17, 0x12, 0x4F, 0xA0, 0x02, 0xC8, 0x02, 0xBC, 0x21, 0x01, 0x90, 0x03, 0x9C, 0x40, 0x9D, 0x09, 0x1A, 0x7D, 0xCA, 0xD3, 0xC7, 0x13, 0xF6, 0x44, 0x92, 0x9F, 0x00, 0x35, 0x8B, 0xF7, 0xAC, 0xA7, 0x63, 0xB8, 0xB7, 0x90, 0x52, 0x3B, 0x6C, 0xD8, 0x2D, 0x2B, 0xB6, 0x33, 0x65, 0x4D, 0xD0, 0x26, 0x39, 0xF0, 0xFC, 0x2E, 0x39, 0xD9, 0xED, 0xE7, 0xB6, 0x52, 0x0C, 0xA4, 0xCC, 0xAA, 0xE8, 0x07, 0x64, 0xF6, 0x98, 0x29, 0x02, 0x1A, 0xED, 0x61, 0x3D, 0xE3, 0xE9, 0x96, 0x41, 0xC6, 0xF2, 0xEC, 0x67, 0xE8, 0xD8, 0xB3, 0x0F, 0x0C, 0xA2, 0x41, 0x0D, 0x69, 0x68, 0xA3, 0x00, 0x61, 0x60, 0x6A, 0x88, 0xC7, 0xF6, 0x78, 0x48, 0x14, 0xA0, 0x0D, 0x39, 0x80, 0xF2, 0x64, 0xB6, 0x26, 0x68, 0xDC, 0x2E, 0x17, 0x84, 0x51, 0xD1, 0xD4, 0xCF, 0xBC, 0xDE, 0x44, 0x31, 0x9F, 0xCD, 0x7C, 0x2F, 0x9F, 0xF0, 0x7E, 0x4B, 0xF4, 0x0D, 0xB3, 0x6F, 0x35, 0xFD, 0x7C, 0x82, 0x76, 0x1B, 0xDE, 0x15, 0xB1, 0xA3, 0x78, 0x6A, 0x97, 0xD9, 0xE0, 0x06, 0x6D, 0x4F, 0x90, 0x11, 0x9B, 0xD0, 0xEB, 0x64, 0x36, 0xBB, 0x3C, 0xAF, 0x7A, 0xDF, 0x1C, 0xAD, 0x78, 0xEE, 0xB5, 0x0C, 0x1C, 0xDA, 0x79, 0x61, 0x6A, 0x88, 0x35, 0x12, 0x50, 0x6E, 0x3C, 0x7D, 0x47, 0x61, 0xDB, 0x83, 0x57, 0x0F, 0x20, 0x06, 0xD0, 0xA3, 0xFA, 0x1F, 0xCF, 0x09, 0x40, 0x75, 0x82, 0x86, 0xB1, 0x0B, 0x74, 0xC1, 0x7F, 0x6F, 0x1C, 0x5B, 0x37, 0x02, 0x4F, 0xCC, 0x34, 0x1A, 0x3B, 0xAE, 0xBC, 0xAD, 0xD1, 0xA4, 0x92, 0x93, 0xE9, 0x7E, 0x7A, 0xE2, 0xE9, 0xD9, 0xD3, 0xF2, 0xFF, 0xBD, 0xA7, 0x45, 0x35, 0x74, 0xDF, 0xA6, 0x72, 0x9E, 0xAF, 0x6B, 0x16, 0x0C, 0xC8, 0x12, 0xB9, 0xF7, 0xDB, 0xD7, 0xCB, 0xBA, 0x7B, 0x18, 0x4C, 0x01, 0x35, 0xC0, 0x0B, 0x88, 0x7C, 0x50, 0x40, 0xD2, 0x63, 0x9F, 0x2D, 0x80, 0x24, 0xE0, 0x07, 0x30, 0x01, 0xA4, 0x00, 0x8A, 0xC7, 0xC3, 0xA6, 0xE1, 0x32, 0x41, 0x83, 0x05, 0x41, 0x29, 0x7F, 0xBE, 0x0D, 0xC7, 0xD0, 0xE5, 0x8D, 0x3A, 0x8A, 0xC2, 0x57, 0x0B, 0xE6, 0x8A, 0x85, 0x12, 0x64, 0x17, 0x0D, 0xD4, 0xE5, 0x1F, 0xD3, 0x17, 0xBB, 0xBD, 0x02, 0x57, 0xC9, 0xED, 0x75, 0x6E, 0xFB, 0xF8, 0xE4, 0x05, 0x98, 0xEC, 0xEB, 0xC9, 0x58, 0x02, 0x5C, 0x83, 0xBA, 0x65, 0xDC, 0x91, 0xF7, 0xEE, 0x10, 0x36, 0xF5, 0x81, 0x49, 0x3B, 0xEC, 0x8B, 0x53, 0xEA, 0xB6, 0x09, 0x8F, 0x00, 0x8A, 0x1A, 0xB5, 0x5F, 0xE1, 0xC4, 0x80, 0xE4, 0x4E, 0x27, 0x13, 0xEF, 0x29, 0x9A, 0x7C, 0x8D, 0x25, 0x0E, 0x60, 0x77, 0x57, 0x98, 0xA0, 0x75, 0x8F, 0xD0, 0xF5, 0xBE, 0xEB, 0x8A, 0x72, 0x31, 0xEA, 0xD2, 0xE2, 0x38, 0x5C, 0xB6, 0xCD, 0x16, 0x85, 0x75, 0x9B, 0xEC, 0x23, 0x08, 0x2C, 0x8F, 0x8A, 0xB2, 0xC7, 0x52, 0x68, 0x47, 0x48, 0xBA, 0x2A, 0x07, 0xE4, 0xA0, 0x80, 0xF2, 0x47, 0x9C, 0xD6, 0x7F, 0x92, 0xAC, 0xDA, 0xFD, 0x18, 0xDD, 0xF4, 0xCF, 0x36, 0x52, 0xA0, 0xD3, 0x95, 0xBA, 0xBD, 0xB4, 0xA6, 0x0A, 0x83, 0x89, 0x77, 0x40, 0x02, 0xB8, 0xCE, 0x68, 0xD2, 0xA0, 0xC7, 0x99, 0x92, 0x00, 0x0E, 0xC0, 0x0D, 0xA8, 0x03, 0xA4, 0x03, 0xD1, 0x70, 0x01, 0xAC, 0xE1, 0x3D, 0x8F, 0x4A, 0xD2, 0x41, 0xF3, 0x4F, 0x22, 0xA1, 0x34, 0x50, 0x1D, 0x75, 0x5C, 0xA3, 0x8C, 0xA3, 0x77, 0xB8, 0xC2, 0x55, 0xA0, 0xAB, 0x04, 0x9A, 0x8C, 0x57, 0x30, 0xDB, 0x92, 0x97, 0xB0, 0xFD, 0x22, 0x90, 0x7B, 0xDB, 0xE4, 0xD8, 0x73, 0x01, 0x35, 0x60, 0x20, 0x0F, 0x10, 0x06, 0x54, 0x2D, 0xC5, 0x03, 0xBE, 0x7E, 0x9C, 0xC7, 0x80, 0xB1, 0xFA, 0xB4, 0xF1, 0x7A, 0xA5, 0x19, 0xBB, 0x5E, 0x53, 0x6A, 0xCA, 0x67, 0xA1, 0xE6, 0xBF, 0x49, 0x00, 0xA6, 0x80, 0x07, 0x10, 0x0A, 0xA4, 0xCE, 0xBD, 0x02, 0xB0, 0x04, 0x32, 0x1A, 0x04, 0xB8, 0x01, 0x4A, 0x00, 0x0B, 0x20, 0x01, 0xD4, 0x04, 0x2D, 0x20, 0x92, 0x63, 0x7A, 0x57, 0x9A, 0x7D, 0x97, 0xE2, 0xFC, 0xAE, 0x51, 0x2A, 0xD6, 0x95, 0xDA, 0xEE, 0x51, 0x96, 0xC0, 0x45, 0x52, 0xCE, 0x92, 0x97, 0x70, 0x7F, 0xB4, 0xD3, 0xE2, 0x37, 0x0D, 0xB1, 0x4C, 0x70, 0xE5, 0x11, 0x50, 0x71, 0x06, 0x42, 0xB7, 0x76, 0xB4, 0xCF, 0xAA, 0x90, 0x9F, 0xD0, 0xEB, 0xA8, 0xB1, 0x8E, 0x7A, 0x50, 0x5E, 0xC5, 0xEC, 0xEB, 0x85, 0x7B, 0xF6, 0xBB, 0x62, 0xC2, 0x54, 0xB5, 0xC3, 0xA4, 0xDA, 0x38, 0x80, 0xE4, 0xFE, 0xA2, 0xC7, 0xB4, 0x07, 0x03, 0x6C, 0x8D, 0xB3, 0xEF, 0x9E, 0x75, 0x80, 0x48, 0x60, 0xE2, 0x2A, 0xD9, 0x41, 0x83, 0xB5, 0xBF, 0x19, 0x77, 0x51, 0x3F, 0xBF, 0xD4, 0x6D, 0x86, 0xA1, 0x8A, 0x47, 0x5F, 0x98, 0x58, 0xA5, 0x10, 0xE4, 0x4A, 0x1C, 0xE8, 0x39, 0x57, 0x96, 0xC3, 0xE5, 0xAD, 0x47, 0x4D, 0xF7, 0x6D, 0xEC, 0xBC, 0x46, 0x4A, 0x43, 0x1B, 0x06, 0xD4, 0x12, 0x95, 0x9B, 0x03, 0x3E, 0xF1, 0xF5, 0x6C, 0x3D, 0xA3, 0x21, 0xE2, 0xBF, 0x27, 0xCA, 0xAE, 0xF1, 0x70, 0x4D, 0x7C, 0xA6, 0xED, 0x6D, 0x9B, 0x18, 0x09, 0xED, 0x4F, 0x54, 0x1B, 0x7C, 0x1A, 0x0E, 0x18, 0x03, 0x65, 0xB3, 0x6C, 0x79, 0x4D, 0x7D, 0x54, 0x6E, 0x1F, 0x50, 0x6B, 0xF8, 0x84, 0x9E, 0xAC, 0x83, 0x56, 0x9F, 0x32, 0x3C, 0xA7, 0xA1, 0x6B, 0x25, 0xF2, 0x7B, 0x3C, 0x43, 0x09, 0x5D, 0x6F, 0xEA, 0x63, 0x1D, 0xD0, 0x52, 0xE5, 0x0C, 0xF7, 0x6A, 0x96, 0xD5, 0x0C, 0x69, 0xF1, 0x4C, 0xC9, 0x0A, 0xCD, 0x1B, 0x7D, 0x86, 0x23, 0x80, 0xD0, 0x46, 0x6E, 0xE4, 0x88, 0x6D, 0xC9, 0x92, 0xFF, 0xD1, 0xEB, 0xF9, 0x7A, 0x95, 0x46, 0x79, 0xDF, 0xDB, 0x79, 0xC4, 0x23, 0x72, 0xF4, 0x97, 0x47, 0xBC, 0x0A, 0xB0, 0xD1, 0x3A, 0x6F, 0x48, 0x3C, 0xA6, 0x03, 0x06, 0x84, 0x00, 0x39, 0x2D, 0x38, 0x06, 0x78, 0xA3, 0x06, 0x04, 0x84, 0x00, 0x1A, 0x00, 0x37, 0x10, 0x34, 0xBB, 0xCD, 0x90, 0x01, 0xBF, 0x53, 0xFE, 0xF5, 0x79, 0xEB, 0x27, 0x37, 0x24, 0x98, 0xD3, 0xE0, 0xDE, 0xAB, 0x7B, 0x94, 0xD4, 0x85, 0xBB, 0xD1, 0xCC, 0x56, 0x57, 0x7C, 0xCE, 0xDB, 0x53, 0x26, 0x0D, 0xE8, 0x93, 0xB0, 0xA6, 0x5F, 0xEB, 0x28, 0xDE, 0x78, 0x4B, 0x47, 0xF0, 0x08, 0x40, 0x0E, 0xDC, 0x11, 0x9D, 0x55, 0xBD, 0xCB, 0x2B, 0x70, 0x9B, 0x86, 0x4F, 0xB4, 0xB4, 0x57, 0xE7, 0x8A, 0x5E, 0x77, 0x7C, 0x58, 0xC7, 0x39, 0x7A, 0xC4, 0xBD, 0x12, 0x30, 0x07, 0xD8, 0x00, 0xCA, 0x86, 0x01, 0x2C, 0x80, 0x16, 0x50, 0x23, 0x80, 0x41, 0x8F, 0x64, 0x4A, 0x00, 0x21, 0x80, 0xCD, 0xA7, 0xFE, 0x16, 0x9E, 0xA0, 0xD1, 0xB7, 0xA7, 0x05, 0x7B, 0xEB, 0xF0, 0xF2, 0xD7, 0x74, 0x95, 0x9A, 0xB8, 0x7B, 0x4A, 0xA1, 0xF9, 0xC9, 0xB3, 0xEF, 0xF9, 0x01, 0x6F, 0xB9, 0xD4, 0x9D, 0x84, 0x9C, 0xA0, 0xDD, 0x36, 0x58, 0xDE, 0x8E, 0x6C, 0x52, 0x80, 0x0E, 0x08, 0x10, 0xD9, 0xB0, 0x75, 0x0A, 0xBF, 0x7A, 0x4A, 0x7C, 0x85, 0xF7, 0x6F, 0xC7, 0xF3, 0x8C, 0x5C, 0xF2, 0xCD, 0x92, 0xDD, 0x52, 0x0C, 0xA2, 0x3B, 0xC0, 0x43, 0xEE, 0x80, 0xE4, 0x63, 0x98, 0x1E, 0x8F, 0xEB, 0x2E, 0x5D, 0x3D, 0x96, 0xBD, 0xDF, 0x79, 0xC3, 0x12, 0xD0, 0x00, 0xE4, 0x00, 0xE4, 0x00, 0x07, 0x10, 0xA7, 0x83, 0xC6, 0xF3, 0x8F, 0x8A, 0xE3, 0xB6, 0x0B, 0x1A, 0xB9, 0x82, 0x7A, 0x84, 0x28, 0xB1, 0x1F, 0xBB, 0xA1, 0x13, 0xD3, 0x7B, 0xB0, 0x4C, 0x19, 0x1B, 0xFF, 0x6B, 0x76, 0x31, 0xB5, 0x9B, 0x3A, 0xD3, 0x95, 0xDC, 0xCB, 0x60, 0xA6, 0x2A, 0x09, 0xB0, 0x68, 0xD0, 0xE3, 0x0C, 0xC0, 0x3F, 0x45, 0x72, 0xB9, 0x9A, 0xBD, 0xE6, 0xDD, 0xD2, 0x5F, 0xF8, 0x94, 0xF5, 0xD3, 0xCC, 0xD6, 0xFE, 0x16, 0xB9, 0x2E, 0x27, 0x54, 0xC0, 0x39, 0x00, 0x27, 0xA0, 0x05, 0xF8, 0x01, 0x42, 0x80, 0x6C, 0x54, 0x6C, 0xF7, 0xDC, 0x38, 0x40, 0xD9, 0x46, 0xEA, 0xFE, 0x6F, 0x4E, 0x40, 0xE8, 0xB4, 0x87, 0x77, 0xCC, 0x04, 0x31, 0x13, 0x5C, 0xC6, 0x9D, 0xA8, 0xC5, 0x84, 0x05, 0x1D, 0xCB, 0x14, 0x38, 0x34, 0x49, 0xB6, 0xEE, 0x36, 0x21, 0x82, 0x92, 0x77, 0xCE, 0xF7, 0x0E, 0x14, 0xD0, 0xDD, 0xF8, 0xD5, 0xC6, 0xA2, 0xB8, 0x4F, 0x5B, 0xFE, 0xA8, 0xA9, 0x04, 0x01, 0xA6, 0x80, 0x08, 0xA0, 0xF6, 0x57, 0xCB, 0x58, 0xCE, 0x15, 0xE6, 0x3D, 0x0E, 0x24, 0xFF, 0xA6, 0xE9, 0xFA, 0xB5, 0x75, 0x27, 0x10, 0xFD, 0xCA, 0xE1, 0x07, 0x01, 0xA4, 0xC0, 0x91, 0x49, 0xC6, 0x01, 0xD1, 0xC8, 0xD3, 0x10, 0xA0, 0x0C, 0xDF, 0xC9, 0x0E, 0x78, 0x01, 0x65, 0x0D, 0x7A, 0x1C, 0x95, 0x05, 0x30, 0x07, 0x7C, 0xA4, 0xCF, 0xB5, 0x63, 0xA6, 0x9F, 0xBE, 0xD0, 0x21, 0x48, 0xF5, 0xA1, 0x9E, 0xF7, 0x65, 0x2E, 0xF8, 0x7B, 0x77, 0x52, 0x38, 0x32, 0xED, 0x2C, 0xC8, 0xA6, 0x67, 0xB5, 0x26, 0xA8, 0xFC, 0xAB, 0x97, 0xC3, 0xB6, 0xCD, 0xD5, 0xDC, 0xDA, 0x69, 0xA0, 0xBB, 0x0D, 0x39, 0x1B, 0x11, 0x40, 0xE5, 0x5C, 0x19, 0x26, 0x8D, 0xFF, 0xBC, 0xD2, 0x04, 0xEF, 0xC7, 0x19, 0x56, 0xB4, 0xFE, 0x96, 0x37, 0x73, 0xA1, 0x67, 0x9F, 0xEB, 0xEF, 0x00, 0xFD, 0xBC, 0x42, 0x0D, 0xB0, 0x03, 0x78, 0x23, 0xE8, 0xB9, 0x71, 0xA8, 0x00, 0x71, 0x00, 0xB7, 0x47, 0xAD, 0x80, 0x81, 0xD3, 0x20, 0x03, 0x42, 0x3A, 0x68, 0xF6, 0xC7, 0x04, 0xD3, 0x29, 0x9A, 0x48, 0xD8, 0x06, 0x52, 0xD9, 0xE8, 0x96, 0xC4, 0x04, 0x81, 0x57, 0x38, 0xEE, 0x32, 0xA6, 0xA8, 0x9D, 0xA2, 0x16, 0x15, 0x31, 0x41, 0x93, 0xB7, 0x97, 0x23, 0xB7, 0xCD, 0xA2, 0x1A, 0x60, 0x02, 0xC8, 0xD9, 0x19, 0x8F, 0xB4, 0xC6, 0x24, 0x71, 0xE2, 0xF6, 0xDE, 0xEE, 0xDC, 0xBE, 0xD9, 0x12, 0xB8, 0x3C, 0x67, 0x0E, 0x80, 0x53, 0x8E, 0x01, 0xB8, 0x11, 0xB6, 0x95, 0xC1, 0xEA, 0x6E, 0x50, 0x0C, 0x24, 0x01, 0x25, 0x73, 0xF7, 0x07, 0x84, 0x81, 0x68, 0x94, 0x35, 0x0E, 0x10, 0x05, 0x58, 0x00, 0x4A, 0x80, 0xE1, 0xB8, 0x33, 0xD3, 0x17, 0x68, 0x6B, 0xC1, 0x1B, 0x02, 0xDD, 0x1B, 0x0E, 0x83, 0x32, 0x57, 0x46, 0xCB, 0xAE, 0x38, 0x7E, 0x59, 0xFA, 0x50, 0x5E, 0x84, 0x76, 0x4E, 0xCD, 0x6B, 0x45, 0xF6, 0xF1, 0xBC, 0x65, 0x4F, 0xCD, 0x9D, 0xD6, 0x48, 0x07, 0x4A, 0x80, 0x50, 0xC0, 0x1A, 0x92, 0xC0, 0xE8, 0x23, 0x4C, 0x2C, 0x28, 0xEE, 0xDC, 0xCE, 0x9E, 0x92, 0x9D, 0x2C, 0xD7, 0x1C, 0x66, 0x6E, 0x62, 0x09, 0xD0, 0xB3, 0x2B, 0xFA, 0x4A, 0x3B, 0xB3, 0xC8, 0x01, 0xA8, 0x3E, 0xAA, 0xAB, 0x07, 0xC8, 0x69, 0xD0, 0x67, 0x40, 0xAD, 0x41, 0x00, 0x07, 0x70, 0xEE, 0x35, 0x66, 0x6B, 0x7D, 0x6A, 0xCD, 0x7B, 0x20, 0xBE, 0xD7, 0xA5, 0x8B, 0x7E, 0xC1, 0xD3, 0xF4, 0x35, 0xFF, 0x6F, 0x9A, 0x68, 0x3C, 0xC7, 0x1A, 0x93, 0x63, 0x8C, 0xE9, 0x1B, 0xBC, 0x3C, 0x45, 0xFF, 0x29, 0x07, 0x79, 0x35, 0x1B, 0x0D, 0x90, 0x6A, 0x10, 0x40, 0xE7, 0xE9, 0x8C, 0x5C, 0xED, 0x92, 0x72, 0xCB, 0x16, 0xEE, 0xFB, 0xF7, 0x94, 0xDA, 0x6A, 0x9B, 0x13, 0xEC, 0xA4, 0x5D, 0xD7, 0x0D, 0x7C, 0x5A, 0x02, 0x7E, 0x6B, 0x72, 0xEA, 0x08, 0xC0, 0xDC, 0x28, 0x40, 0x62, 0x5B, 0x06, 0x9E, 0x04, 0xC4, 0x00, 0xAE, 0xDD, 0x09, 0x9C, 0x0D, 0xD7, 0x9D, 0xB8, 0x15, 0x9D, 0xA0, 0xE5, 0x1F, 0x6F, 0xFF, 0x07, 0xFF, 0xFE, 0xFD, 0x7F, 0x3E, 0x8B, 0x48, 0x81, 0xE3, 0xA0, 0xCA, 0xF6, 0x81, 0xDC, 0xD1, 0x41, 0x92, 0xBE, 0x73, 0x90, 0xFA, 0x9C, 0x38, 0x58, 0x9F, 0xAC, 0xAC, 0x00, 0xAC, 0x5B, 0xF2, 0xBC, 0x04, 0xC8, 0xC9, 0x76, 0x4B, 0xC7, 0x60, 0x3D, 0xBB, 0x50, 0xDF, 0x05, 0xE6, 0x97, 0xC8, 0x59, 0x46, 0x3B, 0x83, 0x31, 0xFA, 0x91, 0xF3, 0x94, 0xDB, 0x2C, 0xD4, 0x69, 0x6E, 0x78, 0x1C, 0x4F, 0x45, 0x00, 0x4D, 0xC0, 0xE5, 0xB9, 0xA4, 0x9A, 0x00, 0x99, 0x0D, 0x06, 0xAC, 0x00, 0xCE, 0x67, 0x53, 0x73, 0xE0, 0xAE, 0xB4, 0x6A, 0x41, 0xFF, 0x3B, 0x8E, 0x87, 0x8B, 0xBA, 0x61, 0x66, 0xE5, 0x88, 0xB7, 0xF3, 0x9A, 0xF7, 0x70, 0x75, 0xF4, 0xD9, 0x29, 0xA1, 0xC3, 0xF1, 0x8A, 0xB5, 0xF2, 0x15, 0x8C, 0xF8, 0x4D, 0x57, 0xA3, 0x5E, 0xB9, 0x75, 0xF5, 0x0E, 0x40, 0x04, 0x1C, 0x07, 0x26, 0xD9, 0xA0, 0xF2, 0x53, 0xB8, 0x99, 0x63, 0x01, 0xD4, 0x6F, 0x70, 0x10, 0x28, 0x60, 0x2C, 0xFD, 0x75, 0x8C, 0xD8, 0x12, 0x18, 0x05, 0x97, 0x34, 0x20, 0x1A, 0xEE, 0x0D, 0x6E, 0x04, 0x10, 0x04, 0x24, 0x3F, 0xAE, 0x6E, 0x05, 0xA8, 0x35, 0xA2, 0xE1, 0x0D, 0xD9, 0x30, 0x05, 0x0A, 0x7B, 0xDA, 0x0C, 0x17, 0x50, 0x64, 0x0F, 0x8F, 0x22, 0x58, 0x51, 0x85, 0x06, 0xFB, 0xEA, 0x01, 0xEC, 0x23, 0xB8, 0x7E, 0xB8, 0x20, 0xF0, 0x67, 0xCF, 0xB0, 0x47, 0x3D, 0x4E, 0x51, 0x94, 0xF7, 0x62, 0x37, 0xE5, 0x35, 0xC0, 0x12, 0x50, 0x05, 0x48, 0x1E, 0x65, 0xD4, 0x95, 0xD0, 0x46, 0x13, 0x6D, 0x2B, 0x69, 0x00, 0x91, 0x3F, 0x7D, 0x34, 0xED, 0xFF, 0x41, 0x9E, 0x6B, 0x13, 0xDD, 0xB1, 0x48, 0x22, 0xA0, 0xA6, 0x35, 0xCB, 0xB6, 0xB3, 0x0D, 0x11, 0xC0, 0x0C, 0x48, 0xC3, 0x02, 0xA8, 0xB9, 0x32, 0x44, 0x43, 0x81, 0xD3, 0xDF, 0x92, 0x0A, 0xC4, 0x7C, 0x1A, 0x57, 0x3F, 0xEA, 0xA0, 0xD1, 0x1F, 0x13, 0x3C, 0x96, 0x4A, 0x58, 0x6F, 0xFE, 0x15, 0xB6, 0x13, 0x07, 0xA4, 0xE3, 0x7D, 0xCB, 0x97, 0x2E, 0xB3, 0x33, 0xDA, 0x1A, 0x71, 0xDD, 0x72, 0x7A, 0x9B, 0x12, 0x68, 0x3D, 0x88, 0x7E, 0x4B, 0x12, 0xE1, 0x40, 0x35, 0xF2, 0x00, 0xAE, 0x80, 0x1A, 0x30, 0x07, 0xFA, 0xBB, 0x42, 0xE7, 0x57, 0x3A, 0x0D, 0x1D, 0x45, 0x44, 0xD9, 0xBE, 0x8C, 0xF3, 0xEE, 0x3F, 0x6D, 0x54, 0x36, 0x13, 0xED, 0xF9, 0x8A, 0x9B, 0x1B, 0xE0, 0x07, 0xA8, 0xAB, 0x1B, 0x08, 0xF0, 0x01, 0x4C, 0x46, 0xB9, 0x1C, 0x10, 0x01, 0x38, 0x01, 0x9A, 0x3B, 0x6A, 0x00, 0x5E, 0x40, 0x9E, 0xB9, 0x8E, 0x76, 0xD0, 0x5A, 0xA0, 0x9B, 0xE4, 0x6A, 0x92, 0xE9, 0xF7, 0x7A, 0x77, 0x4C, 0x12, 0x70, 0xB4, 0x74, 0x4A, 0xF6, 0x03, 0xEC, 0x2D, 0x4C, 0x00, 0xFB, 0x1A, 0x7F, 0x6F, 0x9E, 0x3C, 0x89, 0x62, 0x9E, 0x9B, 0xC7, 0xC8, 0x48, 0x3C, 0xD6, 0x46, 0x26, 0x80, 0x30, 0x40, 0x04, 0x8C, 0xEF, 0xD8, 0x1C, 0x8A, 0x75, 0x2E, 0xB9, 0x33, 0x93, 0x3E, 0x9F, 0x5A, 0x66, 0x73, 0x2C, 0xBB, 0x44, 0x47, 0x7B, 0xF5, 0x31, 0x56, 0xAA, 0x49, 0x25, 0x8E, 0x6E, 0x5D, 0x5F, 0x4E, 0x03, 0xB0, 0x02, 0x42, 0x81, 0xEC, 0x64, 0x13, 0x05, 0x60, 0x8D, 0xC8, 0x46, 0x01, 0xDE, 0x30, 0x05, 0x34, 0xF6, 0x8F, 0x74, 0x26, 0x68, 0x82, 0x21, 0xC7, 0x12, 0xF4, 0x0C, 0xB9, 0xFE, 0xF1, 0xEF, 0xE4, 0x59, 0x78, 0x4A, 0x59, 0xFB, 0x14, 0x63, 0xE8, 0xA9, 0x13, 0x14, 0x3F, 0x39, 0x9F, 0xF6, 0xB4, 0xFD, 0x1E, 0x98, 0x86, 0x20, 0x1C, 0xC9, 0xD6, 0xC0, 0x79, 0x16, 0x10, 0x06, 0xB8, 0x00, 0xF6, 0xD8, 0xD7, 0xC5, 0x5D, 0x46, 0x1D, 0xD7, 0xF0, 0xED, 0x77, 0x78, 0xAC, 0x83, 0x3D, 0xCF, 0xE5, 0xF4, 0x6E, 0x24, 0xA0, 0x36, 0x9F, 0x7A, 0x6D, 0x4D, 0x05, 0x9F, 0x80, 0xF4, 0x59, 0x38, 0x00, 0x3B, 0x20, 0x09, 0x38, 0x01, 0xC5, 0xDB, 0xE1, 0x92, 0x0E, 0x70, 0x9E, 0xC4, 0x47, 0x16, 0x30, 0x77, 0xF8, 0x79, 0x79, 0xF6, 0x90, 0xBF, 0x4B, 0x22, 0xAC, 0x09, 0x13, 0x3C, 0x67, 0x87, 0xBA, 0x42, 0x6A, 0xEB, 0xF1, 0xA0, 0xB3, 0x94, 0xC4, 0xDA, 0x73, 0xCF, 0x76, 0xB2, 0x9B, 0x1E, 0x23, 0x37, 0xF2, 0x79, 0x16, 0x26, 0x8F, 0xD1, 0x97, 0xCD, 0xA3, 0x8F, 0x6D, 0x62, 0x43, 0xA2, 0xE1, 0x73, 0x11, 0x9D, 0x7F, 0xC8, 0x49, 0x75, 0xFC, 0x7C, 0xC4, 0x90, 0x0C, 0xEE, 0xF7, 0x50, 0xF7, 0xC9, 0xCF, 0x82, 0xF3, 0xED, 0x00, 0x1A, 0xBD, 0xC4, 0xC6, 0xA9, 0x4E, 0x14, 0xC8, 0x11, 0x9E, 0x4C, 0x80, 0x19, 0x90, 0x04, 0x62, 0x26, 0xB7, 0xDF, 0xAD, 0x5F, 0x01, 0x39, 0xFB, 0x1D, 0x53, 0x31, 0x9F, 0x80, 0x98, 0xA0, 0x59, 0x5F, 0x6A, 0x15, 0x2B, 0x9A, 0x0A, 0x03, 0x7E, 0x5E, 0x48, 0x41, 0x3A, 0xBE, 0x58, 0xE6, 0x58, 0xAE, 0x55, 0xBD, 0x31, 0xEA, 0xD2, 0xE5, 0x08, 0x7D, 0xC6, 0xF0, 0x24, 0x9E, 0x36, 0x96, 0x79, 0x5C, 0xDC, 0x01, 0x2D, 0xE0, 0x8C, 0x50, 0x52, 0x00, 0xC6, 0xBF, 0xA4, 0x2C, 0xE4, 0x36, 0xF0, 0xA3, 0xD1, 0x28, 0x73, 0xE1, 0x93, 0xCE, 0xEF, 0xA9, 0x1D, 0xB4, 0x04, 0x78, 0x34, 0x66, 0x3A, 0x92, 0x32, 0x4F, 0xD4, 0xE8, 0xCA, 0x59, 0xDF, 0xDE, 0xF9, 0xB9, 0xB6, 0xD7, 0x73, 0x5F, 0x6F, 0xB8, 0x02, 0x39, 0xB0, 0x06, 0x01, 0x61, 0x8D, 0xF3, 0xFB, 0x6F, 0x7A, 0x13, 0x43, 0xF9, 0xB7, 0xC3, 0x0A, 0x2F, 0xC8, 0xEC, 0x7F, 0x7E, 0xA4, 0x20, 0xC5, 0xB2, 0x55, 0xD4, 0x18, 0xD3, 0xCA, 0x52, 0xDD, 0x8C, 0x22, 0x7F, 0xF0, 0x73, 0xB5, 0x13, 0x0D, 0xE0, 0x3A, 0x4F, 0xDE, 0x52, 0x72, 0x1C, 0xA1, 0x9A, 0x6F, 0x85, 0x6E, 0xC1, 0x10, 0x75, 0xE0, 0xF0, 0x4F, 0xEB, 0xB3, 0xB7, 0x1D, 0xA1, 0x6B, 0x2B, 0xE5, 0xE3, 0xB1, 0xC3, 0x40, 0x08, 0x90, 0x07, 0x28, 0x69, 0x73, 0x9D, 0x03, 0x48, 0x01, 0xD5, 0x76, 0x41, 0x23, 0xE8, 0xA8, 0x06, 0x94, 0xB4, 0xA0, 0x63, 0x02, 0x1A, 0x80, 0x17, 0x50, 0x86, 0xD1, 0x3C, 0x4A, 0x80, 0x03, 0x90, 0x86, 0x36, 0x5C, 0x80, 0x6C, 0x54, 0x5B, 0x4E, 0xCD, 0x75, 0x7D, 0x9C, 0xC6, 0x60, 0xD1, 0x53, 0xC7, 0xA9, 0x13, 0x0F, 0x86, 0xEC, 0x10, 0x21, 0x2D, 0x14, 0x4E, 0x88, 0xD5, 0x34, 0x3D, 0x95, 0xFE, 0x26, 0x17, 0x23, 0x1F, 0xA1, 0xA1, 0xB0, 0xD9, 0x13, 0xE6, 0x39, 0x9A, 0x93, 0x94, 0x00, 0x6C, 0xC0, 0x99, 0x31, 0x73, 0x02, 0xE6, 0x5B, 0x6A, 0x59, 0xB0, 0xA1, 0xF6, 0x8D, 0xC9, 0x5E, 0xC7, 0x27, 0xAD, 0x5F, 0xAE, 0x41, 0x3B, 0x5F, 0x22, 0x57, 0x94, 0x30, 0x0E, 0xA0, 0xDE, 0xC8, 0x46, 0x34, 0x0A, 0x30, 0x07, 0x9C, 0x80, 0x59, 0x3C, 0xE7, 0x00, 0xC2, 0x80, 0x0D, 0xB4, 0x71, 0x00, 0xB5, 0x86, 0x02, 0x56, 0xFD, 0x03, 0xCE, 0x79, 0x23, 0x5B, 0x1A, 0xDC, 0x20, 0xDF, 0x23, 0x85, 0xF5, 0xA5, 0xFE, 0xC1, 0x39, 0xF0, 0xB3, 0x1F, 0x43, 0x92, 0x28, 0xAC, 0xF7, 0x0E, 0x83, 0x38, 0xEB, 0x9B, 0x16, 0x1A, 0x4F, 0x8B, 0xD3, 0x31, 0xF3, 0xD9, 0x9E, 0x0E, 0x50, 0x0A, 0xA4, 0x01, 0x7E, 0x00, 0x11, 0x40, 0xE7, 0xF9, 0xB1, 0x49, 0xC5, 0xF4, 0x1A, 0xEC, 0xF5, 0xA9, 0x07, 0x38, 0xBD, 0x14, 0xD5, 0x46, 0x2E, 0x62, 0x64, 0xAA, 0x00, 0xB7, 0xF9, 0xD4, 0xFF, 0x6D, 0xF4, 0x70, 0x1A, 0x9E, 0x40, 0x8D, 0xE6, 0x0D, 0x01, 0x9C, 0x80, 0x19, 0x90, 0xA3, 0x56, 0xA5, 0x8D, 0x6C, 0x44, 0x43, 0x1A, 0x06, 0x30, 0x01, 0x3E, 0xFB, 0x19, 0x74, 0x86, 0xD6, 0x65, 0x00, 0x05, 0x44, 0xFD, 0xAE, 0x9D, 0x9E, 0x81, 0x27, 0x26, 0x02, 0x09, 0x2E, 0x1B, 0xD9, 0x05, 0xE8, 0x8E, 0xDA, 0x9A, 0x87, 0xA2, 0x7B, 0x13, 0x96, 0xEA, 0x80, 0xDC, 0x91, 0xCA, 0xD8, 0x42, 0x48, 0x33, 0x3D, 0xE9, 0x01, 0x30, 0xED, 0x9F, 0x33, 0xFB, 0xA1, 0xAC, 0x6A, 0x5D, 0x1B, 0xED, 0x2B, 0x49, 0x7F, 0xF2, 0xD1, 0x08, 0x1D, 0x37, 0x2C, 0xC7, 0x77, 0xC6, 0x01, 0xE8, 0x11, 0x57, 0x72, 0x06, 0xD4, 0x00, 0x09, 0x40, 0x4F, 0x83, 0x00, 0x6B, 0x84, 0x3E, 0xC2, 0x4B, 0xF5, 0x80, 0x81, 0xF3, 0x7E, 0x0B, 0x03, 0x9A, 0x88, 0x59, 0x9D, 0x09, 0x16, 0x6E, 0xB7, 0x52, 0x78, 0x38, 0x14, 0x73, 0xC7, 0x3C, 0x55, 0xDA, 0x53, 0x1F, 0xAE, 0x74, 0xF1, 0x21, 0x5C, 0xA0, 0xDE, 0xA9, 0xE2, 0xF8, 0xA9, 0x44, 0x90, 0x5E, 0x6D, 0x76, 0x12, 0x20, 0x15, 0x70, 0x06, 0xE4, 0x00, 0x87, 0x1B, 0x07, 0x88, 0xE8, 0x35, 0x38, 0xD9, 0xD2, 0xDC, 0xF9, 0xC3, 0xE2, 0xFE, 0x29, 0x1E, 0xCF, 0x44, 0x26, 0xC0, 0x78, 0x6B, 0x48, 0xE7, 0xB2, 0x60, 0xFB, 0x9A, 0x79, 0x00, 0x3D, 0x80, 0x05, 0x10, 0x93, 0xC4, 0x3C, 0x00, 0x25, 0xC0, 0x0D, 0x29, 0x40, 0x03, 0xB0, 0x04, 0xC2, 0x81, 0x8C, 0x59, 0xF3, 0x1D, 0x33, 0x9A, 0x98, 0x35, 0x26, 0xEB, 0x14, 0x18, 0x3F, 0x56, 0x6E, 0x2B, 0x49, 0xC2, 0x1F, 0x19, 0xD2, 0xEF, 0x7C, 0xC7, 0x31, 0xF6, 0xD1, 0xB7, 0x75, 0x9E, 0xBC, 0xC4, 0x84, 0xE0, 0xD9, 0x97, 0x54, 0x01, 0x1E, 0x35, 0x82, 0x86, 0x06, 0xC0, 0x0D, 0x8B, 0xFE, 0xCE, 0xEA, 0xDF, 0x6F, 0xD4, 0x69, 0x08, 0xE0, 0x03, 0x08, 0x3D, 0xBF, 0x98, 0x02, 0xDE, 0x08, 0x01, 0xD2, 0xB7, 0x2C, 0x15, 0x31, 0xC0, 0x01, 0x48, 0xC3, 0x0C, 0x88, 0x46, 0xE9, 0x7E, 0x36, 0x89, 0x01, 0x3E, 0x80, 0x18, 0x60, 0x0C, 0x78, 0x23, 0xB5, 0x63, 0xC6, 0xF0, 0xA7, 0x37, 0x48, 0x33, 0x1D, 0xE1, 0xAF, 0xA9, 0x9B, 0xFB, 0x8B, 0xA6, 0x02, 0xD1, 0x97, 0x28, 0xE8, 0x83, 0x2A, 0x92, 0x30, 0x33, 0x54, 0x7C, 0x5E, 0x45, 0x8E, 0x19, 0xED, 0xF3, 0x78, 0x1C, 0x42, 0xFA, 0x53, 0x35, 0xBC, 0x21, 0x0E, 0x9C, 0x49, 0xD9, 0x0A, 0x3E, 0xF1, 0x9A, 0x31, 0xF1, 0x9B, 0xE1, 0xA9, 0x02, 0xF4, 0x3C, 0x1D, 0xB0, 0x06, 0x38, 0x37, 0xE2, 0x37, 0x50, 0x16, 0x7F, 0xFB, 0xE9, 0x65, 0x72, 0xB5, 0x4F, 0x2E, 0x92, 0x02, 0xE0, 0x02, 0xCC, 0x76, 0xE5, 0xF7, 0x64, 0x63, 0x32, 0x18, 0x01, 0x24, 0x01, 0xC1, 0x8D, 0x69, 0xF4, 0x9D, 0x85, 0x26, 0x5F, 0x13, 0x9F, 0x67, 0xB7, 0x21, 0x50, 0xCF, 0x2C, 0xBA, 0xE1, 0x9F, 0x91, 0x0D, 0xD5, 0x4A, 0xAF, 0xEF, 0x40, 0x4F, 0x52, 0xC8, 0x2B, 0xFA, 0x33, 0x54, 0xAC, 0xEF, 0x78, 0x6C, 0x4D, 0x3B, 0xCA, 0x64, 0x6E, 0x1B, 0x0C, 0x90, 0x3E, 0xDD, 0xC3, 0xD1, 0x38, 0xDB, 0xB4, 0xE2, 0x8E, 0xB6, 0x37, 0x88, 0xB6, 0x7D, 0x99, 0x09, 0x70, 0x72, 0x1B, 0xB3, 0x59, 0xFF, 0x37, 0x9F, 0x21, 0x5B, 0x9D, 0xE7, 0x84, 0xA6, 0xB5, 0x01, 0x88, 0x6B, 0xFB, 0x0C, 0x70, 0xC3, 0x6A, 0xB4, 0xC7, 0x00, 0xCD, 0x86, 0x02, 0x3C, 0x17, 0x7D, 0x07, 0xA2, 0x31, 0x37, 0x02, 0x8B, 0x0E, 0x9A, 0xFE, 0xD1, 0x40, 0xAD, 0xCE, 0xB4, 0x6D, 0xC8, 0xBE, 0xEB, 0x48, 0xF4, 0xA5, 0x6A, 0x0A, 0xF8, 0x84, 0xD1, 0x4A, 0x69, 0x27, 0x37, 0xA6, 0xAD, 0x6F, 0x6B, 0x6F, 0x8D, 0x78, 0x7A, 0xE4, 0x7C, 0xBB, 0x34, 0x89, 0x03, 0x27, 0xB6, 0xC6, 0x9E, 0x1C, 0x80, 0x12, 0x88, 0xA9, 0x7E, 0xDF, 0x0E, 0x80, 0x6A, 0xE8, 0xD2, 0x97, 0x1B, 0x75, 0xE6, 0x2B, 0xC7, 0x2A, 0x40, 0x8C, 0x5B, 0xD2, 0xE4, 0xC7, 0xAD, 0x7E, 0x66, 0x3B, 0x72, 0x11, 0xF1, 0x98, 0x88, 0x13, 0x60, 0x37, 0x93, 0x01, 0x08, 0x01, 0x5C, 0x00, 0xCD, 0xFD, 0x49, 0x80, 0x28, 0xA0, 0xFA, 0x4C, 0xA0, 0x13, 0x34, 0xFB, 0x63, 0x06, 0x31, 0x78, 0xFF, 0x22, 0x33, 0x63, 0xD9, 0x28, 0x0E, 0xF8, 0x21, 0x64, 0xFD, 0x82, 0x27, 0x0F, 0x0A, 0x53, 0x30, 0x8C, 0xF7, 0xC8, 0x93, 0x7C, 0xC4, 0x92, 0xDE, 0x23, 0xBB, 0x75, 0xB6, 0x17, 0x5B, 0x19, 0x10, 0x0C, 0x98, 0x01, 0xAA, 0x8D, 0xEA, 0xEF, 0x7C, 0x2C, 0xE0, 0xE2, 0x01, 0x4D, 0x92, 0xAE, 0xA1, 0x09, 0x50, 0x01, 0x77, 0x68, 0x2C, 0x76, 0x41, 0x9F, 0x6A, 0xDB, 0x15, 0x18, 0x3D, 0xF5, 0xCE, 0x7C, 0xAA, 0x98, 0x16, 0x40, 0x32, 0x10, 0xF9, 0xB4, 0x80, 0x24, 0x20, 0x02, 0xA8, 0x02, 0x25, 0x1D, 0x35, 0xF8, 0xF8, 0xBB, 0xE6, 0xE7, 0xDC, 0xE0, 0x22, 0xD0, 0x80, 0x61, 0x81, 0x5D, 0xAA, 0x74, 0x11, 0x03, 0x7B, 0x5B, 0x95, 0x7A, 0xAB, 0x02, 0xD7, 0xB2, 0xBB, 0xD0, 0x7A, 0x52, 0xB6, 0x36, 0xCD, 0x8E, 0x0D, 0xB3, 0x06, 0x01, 0x72, 0x80, 0x49, 0x1F, 0x95, 0xEF, 0xAE, 0xBA, 0x69, 0xF3, 0x70, 0xDA, 0x32, 0x99, 0x71, 0xB6, 0xC3, 0x9A, 0xFA, 0xEE, 0xED, 0xD4, 0x86, 0xF8, 0xCE, 0xD5, 0x06, 0x3F, 0x15, 0xE0, 0xF4, 0x3D, 0x35, 0x6A, 0x0D, 0xD7, 0x9D, 0x81, 0x13, 0x05, 0x2C, 0x1B, 0x06, 0xA8, 0x00, 0xAC, 0x00, 0x19, 0xC0, 0x02, 0xC4, 0xBC, 0x09, 0xE2, 0x8F, 0x17, 0xCC, 0xDB, 0xF2, 0x5B, 0x41, 0xB3, 0xD4, 0xFA, 0x46, 0x42, 0x8A, 0xC2, 0x5A, 0x04, 0x56, 0x01, 0x39, 0x56, 0x88, 0xED, 0xB1, 0x75, 0x7D, 0x3D, 0x3D, 0xDF, 0x41, 0x4F, 0x4E, 0x80, 0x7C, 0x4F, 0x90, 0x85, 0x00, 0x16, 0x8D, 0x69, 0x92, 0xE4, 0x27, 0xC9, 0x6F, 0x53, 0x82, 0xD9, 0x2E, 0x83, 0xC6, 0x00, 0xEB, 0x5E, 0xBD, 0xD5, 0x5F, 0xF4, 0xDA, 0xF3, 0xDF, 0x1A, 0x4F, 0x4F, 0x68, 0x00, 0xFE, 0x54, 0xAC, 0x8E, 0x00, 0x5A, 0x40, 0x44, 0x83, 0x00, 0x13, 0x80, 0x0D, 0x38, 0xFC, 0x78, 0x7A, 0x4E, 0x2B, 0x7C, 0xA1, 0xD5, 0x45, 0xE8, 0x7C, 0x20, 0x8F, 0xF5, 0x7C, 0xD2, 0xF1, 0x2E, 0x65, 0x30, 0x3A, 0x80, 0xB8, 0x2D, 0xB4, 0xF4, 0xAC, 0xE2, 0x80, 0x4F, 0xD0, 0xA8, 0x83, 0x26, 0x37, 0x4C, 0x80, 0x10, 0xC0, 0x06, 0x9C, 0x47, 0xCD, 0x20, 0x12, 0x48, 0x7F, 0x46, 0x17, 0xA7, 0x67, 0xDF, 0x1A, 0xBC, 0x07, 0x2F, 0x29, 0xB6, 0xCE, 0x2D, 0x33, 0x70, 0x0C, 0x70, 0xD9, 0x4D, 0xCF, 0x61, 0xBB, 0xB0, 0xA7, 0x09, 0x58, 0xC3, 0x6B, 0xD7, 0x46, 0xA5, 0xE1, 0x0C, 0x98, 0x01, 0x52, 0x00, 0xAD, 0xDC, 0x69, 0xDE, 0xB2, 0x85, 0x9F, 0x09, 0x5A, 0xFD, 0x89, 0x3E, 0x87, 0xC4, 0xF7, 0x8B, 0xD9, 0x9F, 0x32, 0x94, 0xCF, 0x39, 0xBF, 0xA6, 0x2A, 0xF4, 0x5E, 0xC8, 0x07, 0xCA, 0xE2, 0x2E, 0x1F, 0xE9, 0x3C, 0x9E, 0xCF, 0x9B, 0xA0, 0x23, 0xA2, 0x33, 0xE7, 0x47, 0x80, 0x27, 0x60, 0x05, 0x88, 0xED, 0x80, 0x9E, 0xD3, 0x78, 0x96, 0x0A, 0xC5, 0x0E, 0x9A, 0x74, 0xD0, 0xC4, 0x77, 0xBB, 0xE9, 0x34, 0xC0, 0xB9, 0x01, 0x5A, 0xBF, 0x4E, 0x58, 0xBB, 0xFF, 0x9F, 0xFB, 0x0E, 0x9A, 0x29, 0xE0, 0x01, 0xC4, 0x44, 0x84, 0x00, 0x6F, 0x94, 0x00, 0x19, 0x80, 0x37, 0xC4, 0x01, 0x6A, 0x70, 0xA3, 0x14, 0x41, 0xCB, 0xB9, 0x9A, 0x7A, 0xCB, 0x12, 0x11, 0x5A, 0x1F, 0x83, 0xA8, 0x7D, 0xEB, 0xA3, 0x33, 0xAF, 0xD6, 0x3A, 0x68, 0x89, 0xD7, 0x57, 0xC8, 0xD4, 0xD4, 0x9F, 0x16, 0xAB, 0x8E, 0x4F, 0xC5, 0xB5, 0x3E, 0xDD, 0x4D, 0x72, 0xD3, 0x47, 0x57, 0x0E, 0xA8, 0xCC, 0x8E, 0xBC, 0xDA, 0xBE, 0x42, 0xCE, 0x9E, 0x2E, 0x93, 0xDA, 0xFF, 0x5F, 0x36, 0xAC, 0xA1, 0x07, 0xA0, 0x04, 0xA6, 0xDC, 0x2B, 0x6B, 0x80, 0x08, 0xB1, 0x6F, 0x09, 0xE8, 0xDD, 0x9D, 0x24, 0x06, 0x58, 0x02, 0x69, 0x9D, 0x8B, 0x72, 0x40, 0xAC, 0x11, 0x0D, 0x6F, 0x9C, 0x06, 0x03, 0xDA, 0x48, 0xEA, 0xA0, 0xCD, 0x8D, 0x60, 0xBC, 0xD0, 0x19, 0x49, 0x13, 0x42, 0xA7, 0x95, 0x57, 0xB5, 0x4F, 0x0A, 0xE3, 0x2F, 0xA0, 0xE8, 0x53, 0x22, 0x32, 0x69, 0xAF, 0x74, 0xDA, 0x3D, 0x85, 0xF1, 0x3D, 0x4A, 0xAE, 0xD9, 0x38, 0xF9, 0x9B, 0xAD, 0x57, 0x60, 0x22, 0x99, 0x8D, 0x58, 0x3B, 0xF2, 0x08, 0x47, 0xDA, 0x15, 0x74, 0xD5, 0x00, 0xA4, 0x36, 0xB4, 0x61, 0x09, 0xD4, 0x87, 0x9C, 0xBC, 0xF5, 0x2D, 0x55, 0x89, 0x8F, 0x2B, 0x4D, 0x1B, 0xDF, 0x07, 0x50, 0xD2, 0xD7, 0xAF, 0x03, 0xA8, 0x00, 0x4E, 0x8D, 0x02, 0x22, 0x81, 0x0C, 0xA0, 0xBA, 0xE1, 0x86, 0x18, 0x60, 0x01, 0xEE, 0x4A, 0xE3, 0xD6, 0xAE, 0x32, 0x24, 0x35, 0x52, 0xD0, 0xCC, 0xA1, 0x8A, 0xE2, 0x94, 0x3B, 0xCE, 0x36, 0xA7, 0x3E, 0x90, 0x32, 0xCA, 0xD0, 0x86, 0x60, 0x9D, 0x57, 0x67, 0x68, 0x1E, 0xBA, 0x58, 0xDB, 0xC2, 0xEF, 0xAD, 0x1D, 0x02, 0x68, 0x83, 0x64, 0xDC, 0x31, 0x01, 0x9A, 0xEF, 0xF4, 0x8E, 0x9D, 0x4F, 0xE7, 0x1C, 0x90, 0xB1, 0x05, 0x84, 0x83, 0x00, 0x8A, 0xC7, 0x15, 0x31, 0x77, 0x8D, 0x21, 0xA7, 0xCD, 0x4C, 0xB6, 0x91, 0xAE, 0x15, 0x10, 0x8D, 0x89, 0x32, 0x0B, 0x60, 0x09, 0x84, 0x37, 0xB2, 0x41, 0x80, 0x37, 0xAC, 0xE1, 0xA3, 0x07, 0x2D, 0x1D, 0x34, 0xE9, 0xC7, 0xD3, 0x91, 0x89, 0xA3, 0xC4, 0x54, 0xAC, 0x18, 0x2E, 0x5C, 0x9D, 0xB3, 0xB5, 0xE3, 0xBD, 0x78, 0xBD, 0x57, 0xC8, 0xB7, 0x34, 0x8B, 0xDE, 0x92, 0xCA, 0x6D, 0x7E, 0x9F, 0x76, 0xD5, 0x9C, 0x6A, 0x98, 0x00, 0x2A, 0x93, 0x60, 0x07, 0x44, 0x76, 0x0C, 0x94, 0x7E, 0x15, 0x00, 0xEB, 0x27, 0x31, 0x1A, 0x79, 0x2D, 0xEB, 0xA4, 0x43, 0x11, 0x07, 0xA0, 0xDA, 0x9D, 0xE2, 0x93, 0xF9, 0xDD, 0x6E, 0x58, 0x28, 0x12, 0x20, 0xED, 0xE6, 0x7B, 0x51, 0xA5, 0x6D, 0xA5, 0x5B, 0x2D, 0xA0, 0x78, 0x7B, 0x23, 0x91, 0x37, 0xCE, 0x74, 0x24, 0x01, 0x59, 0x40, 0xCD, 0xE8, 0x69, 0x74, 0xD0, 0x14, 0xC9, 0xD3, 0xA8, 0x3F, 0xF6, 0x15, 0x43, 0xE3, 0x3B, 0xAE, 0x9D, 0x48, 0x08, 0x8C, 0x71, 0xB6, 0x57, 0x32, 0xA2, 0x55, 0x27, 0x70, 0xAB, 0x89, 0xE7, 0x45, 0xE0, 0x6B, 0x26, 0x4A, 0xFE, 0x16, 0x4A, 0xEE, 0x24, 0x58, 0x43, 0x81, 0xF3, 0xBC, 0xA3, 0xE6, 0x82, 0x90, 0xFD, 0x49, 0xD6, 0xD0, 0x3A, 0xAE, 0x78, 0x00, 0xC7, 0xDE, 0xCC, 0x68, 0x5F, 0x10, 0xCC, 0x00, 0xFF, 0x70, 0xEF, 0x8B, 0x72, 0x1B, 0x2F, 0xAB, 0x43, 0x6F, 0xCF, 0xA6, 0xE4, 0x09, 0x8C, 0xB0, 0x33, 0x37, 0xCC, 0x81, 0xA8, 0x46, 0x34, 0x0E, 0x60, 0x01, 0x68, 0x01, 0x96, 0x40, 0x59, 0x07, 0xCD, 0xA0, 0xC8, 0x9C, 0x70, 0xBE, 0xC0, 0x84, 0xD4, 0xB7, 0x8E, 0x0A, 0x17, 0x7D, 0xF2, 0xD9, 0x92, 0x66, 0x56, 0x10, 0xB7, 0x3E, 0x92, 0xDD, 0x0A, 0xEF, 0x6B, 0xFA, 0x4E, 0xEE, 0xC8, 0xD1, 0x9D, 0x83, 0xAD, 0x86, 0xEE, 0x06, 0x65, 0x3B, 0x00, 0x45, 0x83, 0x81, 0xEA, 0x80, 0xDE, 0xF3, 0x7A, 0xD6, 0x63, 0x2F, 0xE8, 0x08, 0x53, 0x9E, 0xD5, 0xFA, 0x18, 0x0E, 0xE4, 0x04, 0x4D, 0xEA, 0xD7, 0xEA, 0xED, 0x77, 0x0B, 0x27, 0xEA, 0x27, 0xAA, 0x00, 0x23, 0x20, 0x62, 0xFB, 0xB5, 0xB9, 0x02, 0x35, 0x38, 0x40, 0x36, 0xCC, 0x01, 0x25, 0xC0, 0x26, 0x87, 0x3F, 0x7B, 0xDA, 0x54, 0x07, 0x3A, 0x99, 0xE3, 0x3A, 0x49, 0x99, 0xB6, 0xB4, 0xD7, 0x4E, 0xD8, 0x50, 0xE7, 0x1E, 0x6D, 0x1E, 0x0F, 0xD4, 0xD2, 0x9F, 0x74, 0x9A, 0x7D, 0xB0, 0xB9, 0x32, 0xDB, 0xFD, 0xDB, 0x63, 0x52, 0xDD, 0x3F, 0x4F, 0x17, 0xAA, 0x6B, 0xA3, 0x55, 0x09, 0xD8, 0x08, 0xF8, 0xCD, 0x4F, 0x76, 0x37, 0x72, 0x20, 0x03, 0xB0, 0xB7, 0xAF, 0x51, 0x81, 0xE0, 0x5F, 0x27, 0xE3, 0xE4, 0xD8, 0xFA, 0x0F, 0x13, 0xBA, 0x1A, 0xA1, 0x1C, 0xA7, 0xCB, 0xB6, 0x6D, 0x61, 0x44, 0x80, 0xC5, 0x76, 0x8D, 0xA2, 0x06, 0x0B, 0x20, 0x0C, 0x68, 0xC3, 0x0C, 0x88, 0xD3, 0x48, 0xA0, 0xAA, 0x63, 0x16, 0x3D, 0x59, 0x6B, 0x2D, 0x62, 0x22, 0xED, 0xB3, 0xD6, 0xCA, 0x4C, 0x6A, 0x48, 0x05, 0x4A, 0x62, 0xD7, 0x4B, 0x6A, 0xD7, 0xB5, 0xEA, 0x7E, 0x64, 0xC4, 0x4C, 0x57, 0xCC, 0xA6, 0x39, 0x85, 0x70, 0x9E, 0x5C, 0xBD, 0x99, 0xD9, 0xA0, 0x0E, 0x01, 0x4F, 0xFB, 0x44, 0x3C, 0x8D, 0x16, 0x35, 0xBE, 0x44, 0x4F, 0x9A, 0xDF, 0x77, 0x8A, 0x5C, 0x7D, 0x9B, 0x47, 0x15, 0xFF, 0x2A, 0x6A, 0x9D, 0xA8, 0x65, 0xBB, 0x5B, 0x92, 0x4F, 0xC6, 0x8D, 0x76, 0x1E, 0x2D, 0x6C, 0xDB, 0x34, 0x48, 0x23, 0x08, 0x48, 0x07, 0x8A, 0x1A, 0x07, 0xC8, 0x02, 0x4A, 0xB6, 0xA2, 0xB2, 0x64, 0xC7, 0xAC, 0xBB, 0xA8, 0x8A, 0xB1, 0x9D, 0xCE, 0x7A, 0x8E, 0x40, 0x32, 0x4E, 0x13, 0x49, 0xF4, 0xA3, 0x1F, 0x28, 0xBC, 0x0B, 0x2C, 0xF6, 0xC5, 0xCC, 0xDE, 0x54, 0xF7, 0x3C, 0x8D, 0xB4, 0xCC, 0x29, 0xA3, 0x17, 0x58, 0x22, 0x4A, 0xD3, 0x19, 0x8A, 0x9D, 0x17, 0x98, 0x46, 0x6D, 0x67, 0xA0, 0x26, 0x4B, 0x39, 0xAA, 0xD9, 0xD6, 0x29, 0x48, 0xE9, 0x4F, 0x0D, 0x2D, 0x40, 0xF4, 0x11, 0xDD, 0x16, 0x7C, 0xE7, 0x24, 0x08, 0xCB, 0xBA, 0xE9, 0xB4, 0x73, 0xE3, 0xD6, 0x1E, 0x59, 0xAA, 0x40, 0x72, 0xAF, 0x2C, 0x01, 0x34, 0x80, 0x28, 0xA0, 0xB4, 0x8D, 0xC8, 0xB8, 0x11, 0x00, 0x39, 0xC0, 0x0A, 0x48, 0x01, 0x3E, 0x31, 0xAB, 0x1E, 0x02, 0xE2, 0x29, 0xEB, 0xE0, 0xFB, 0xAB, 0xA3, 0xEA, 0xD1, 0xE5, 0x19, 0x05, 0x2C, 0xDA, 0xE4, 0x05, 0xA9, 0x6E, 0xEE, 0x98, 0xF9, 0xB2, 0xBF, 0xB3, 0x59, 0x67, 0x7A, 0x27, 0x26, 0x44, 0x80, 0x2C, 0xC0, 0x0F, 0x70, 0xA6, 0xB8, 0x6B, 0x80, 0xD2, 0x7C, 0xE7, 0x78, 0xE2, 0xFD, 0x0A, 0x41, 0x3A, 0x2D, 0xCB, 0xB7, 0x5C, 0x59, 0x02, 0x70, 0xF6, 0x8A, 0xDC, 0x0B, 0x13, 0x58, 0x9D, 0xBD, 0xB9, 0x45, 0x20, 0xA5, 0x1E, 0x77, 0xC0, 0x49, 0x6E, 0x33, 0x60, 0x05, 0xC4, 0x20, 0x1A, 0x0C, 0xB8, 0x3E, 0xDF, 0x32, 0xE5, 0x9D, 0x40, 0xCC, 0xDA, 0xB7, 0xDF, 0x35, 0x7B, 0x81, 0xE1, 0x69, 0xA4, 0x74, 0xCC, 0x92, 0x65, 0x60, 0x7B, 0xB1, 0xAE, 0xE0, 0x05, 0x21, 0xB9, 0xE4, 0x71, 0x93, 0x67, 0x38, 0xA8, 0xEF, 0xF2, 0x80, 0x4D, 0xCC, 0xC6, 0xA2, 0x76, 0xDE, 0x3D, 0x44, 0xDB, 0xD3, 0x96, 0x68, 0xC7, 0x8C, 0x1B, 0x3E, 0x67, 0xED, 0xE9, 0xEF, 0xA6, 0xC7, 0xB5, 0x2D, 0x01, 0xA9, 0x07, 0x01, 0xF8, 0x2D, 0xB9, 0x23, 0xBA, 0x3A, 0x85, 0x84, 0x39, 0x58, 0x14, 0x90, 0xDA, 0x6B, 0x5E, 0x00, 0x29, 0xC0, 0x05, 0x48, 0x07, 0x2A, 0xBB, 0x9E, 0x60, 0x00, 0x31, 0xC0, 0xD4, 0x28, 0x40, 0x0D, 0x70, 0xE9, 0x98, 0x41, 0x40, 0x42, 0xF4, 0x60, 0x20, 0x96, 0xFE, 0x26, 0x38, 0xEC, 0x2B, 0x20, 0x28, 0x86, 0x4E, 0xA9, 0x30, 0xF2, 0x58, 0x0A, 0xA3, 0x21, 0xCF, 0xF1, 0xA8, 0x7F, 0x12, 0x1C, 0xB4, 0xA5, 0x03, 0x23, 0x80, 0x3A, 0xFB, 0x93, 0x31, 0xC0, 0x09, 0xD0, 0x79, 0x84, 0x16, 0x13, 0x88, 0x71, 0x8E, 0x22, 0x7C, 0x4A, 0x7E, 0xE4, 0xB8, 0xAC, 0x51, 0x8D, 0xD8, 0xD7, 0x5C, 0x9B, 0x8A, 0xCE, 0x1C, 0x64, 0x3A, 0xC7, 0xAD, 0xE7, 0xCD, 0x9A, 0x3D, 0x99, 0xEB, 0x9A, 0x3B, 0x9A, 0x02, 0x16, 0x0D, 0x6F, 0x1C, 0x40, 0x02, 0xE0, 0x02, 0x24, 0x81, 0x3C, 0x1D, 0x34, 0x94, 0x02, 0xBE, 0x04, 0x59, 0x1C, 0xAC, 0x29, 0x94, 0x09, 0x04, 0x5B, 0x82, 0x17, 0x3A, 0x52, 0xC4, 0xD1, 0x2D, 0xA9, 0x85, 0x5E, 0xBD, 0xF2, 0x3D, 0x6F, 0xA1, 0xCF, 0xE0, 0xDD, 0x99, 0x0C, 0xF4, 0x1C, 0x2C, 0x08, 0x50, 0x05, 0xCE, 0x9D, 0xE6, 0x04, 0x78, 0x0E, 0xC2, 0xDA, 0x9F, 0x46, 0x35, 0x41, 0x27, 0x33, 0xB6, 0xC7, 0xA8, 0x8E, 0xEE, 0xE4, 0xB6, 0x04, 0x70, 0x9E, 0xCB, 0xBD, 0xC4, 0xEA, 0xD2, 0x42, 0xD6, 0x1F, 0x57, 0xB5, 0x03, 0x94, 0xCC, 0x7D, 0x01, 0x50, 0x07, 0x72, 0x1A, 0xAB, 0x0E, 0x60, 0xD5, 0x48, 0x40, 0x9F, 0xFC, 0xEE, 0x31, 0x80, 0x12, 0x08, 0xEB, 0xA0, 0xC9, 0x1F, 0xFF, 0x8A, 0x24, 0x0E, 0x41, 0x2B, 0xB7, 0xD5, 0x67, 0x7B, 0x1C, 0x96, 0x5A, 0xAE, 0x8C, 0x79, 0x5F, 0x9F, 0x4E, 0x5A, 0x59, 0xB6, 0xEB, 0xE6, 0x4F, 0x82, 0x43, 0x7C, 0xCF, 0xFA, 0x4B, 0x00, 0xFC, 0xE4, 0x6E, 0xFD, 0x91, 0xCB, 0x13, 0x01, 0xEC, 0x6C, 0x61, 0x05, 0xEE, 0x2F, 0xCE, 0x1F, 0x9D, 0x0C, 0x58, 0x02, 0x4E, 0x80, 0x15, 0x80, 0xB8, 0xCA, 0x0D, 0xE1, 0x9D, 0x8E, 0x8C, 0x7F, 0xAD, 0x34, 0x4D, 0xC0, 0xA7, 0x7E, 0xA2, 0xCF, 0xB4, 0xE2, 0x40, 0x01, 0x0F, 0x40, 0x1A, 0x64, 0x80, 0x1C, 0x20, 0xAB, 0x83, 0xA6, 0xA8, 0x04, 0x1F, 0x74, 0x76, 0x4B, 0x40, 0xF4, 0x85, 0x8E, 0xF7, 0x3C, 0x76, 0xC2, 0x7E, 0x9A, 0x12, 0x0D, 0x51, 0xC4, 0x5D, 0x3A, 0xE2, 0xF7, 0xDA, 0xB9, 0x83, 0x16, 0xBC, 0x47, 0x84, 0xA5, 0x31, 0x33, 0xB3, 0x45, 0x80, 0x25, 0xC0, 0x0E, 0x10, 0xEF, 0x14, 0xB7, 0xD4, 0x16, 0x90, 0xE4, 0xDA, 0x9D, 0xB5, 0x26, 0x8F, 0x45, 0x5E, 0x02, 0xD3, 0xE6, 0x9D, 0x1D, 0x26, 0xB9, 0xC3, 0x58, 0xBC, 0x5B, 0xE2, 0x6A, 0xB6, 0x59, 0x05, 0x34, 0x80, 0x98, 0xFA, 0x80, 0x03, 0x6C, 0x0D, 0x6F, 0x30, 0x40, 0x0E, 0x9C, 0x02, 0x98, 0x00, 0xD3, 0x0E, 0x9A, 0xFD, 0xB1, 0xEE, 0x38, 0x4B, 0xD9, 0xF2, 0x5F, 0x38, 0x04, 0x06, 0xA4, 0x29, 0x0C, 0x0A, 0xAD, 0x9A, 0xD4, 0x69, 0x7D, 0x5B, 0x59, 0x21, 0xCF, 0x67, 0x6C, 0x5D, 0xCE, 0x23, 0x56, 0x55, 0x00, 0xE5, 0xEE, 0x4A, 0x8E, 0x86, 0x79, 0x43, 0x81, 0xF2, 0x9D, 0xFE, 0x4E, 0x01, 0x4C, 0xF6, 0xDC, 0xB9, 0xFA, 0xB3, 0x7A, 0x05, 0xC0, 0x6A, 0xD2, 0xBB, 0xC4, 0xC8, 0xEF, 0x94, 0xEC, 0x24, 0xFD, 0xE7, 0x12, 0x03, 0x64, 0x75, 0x79, 0xAA, 0xA1, 0x02, 0x14, 0xEF, 0xF2, 0x14, 0x39, 0x30, 0x6E, 0x00, 0xF1, 0x24, 0x05, 0xE2, 0xB6, 0x21, 0x76, 0xD0, 0xFC, 0x6B, 0xE5, 0x56, 0x93, 0x3F, 0xE9, 0x38, 0x8F, 0xD5, 0x57, 0x5B, 0x0F, 0xA8, 0x4F, 0x17, 0x43, 0xE0, 0x82, 0x03, 0x9B, 0x59, 0x1A, 0xCC, 0x12, 0xF4, 0xEC, 0x59, 0xFF, 0x37, 0x69, 0x7B, 0xFD, 0xD6, 0x04, 0x70, 0x03, 0xEC, 0x09, 0xE1, 0xF1, 0xDD, 0x06, 0x1F, 0x31, 0x71, 0xDD, 0x3E, 0xFF, 0xC9, 0x80, 0xF8, 0x4E, 0x71, 0x93, 0xED, 0x3A, 0x4D, 0x36, 0x8A, 0x7E, 0xC1, 0xF6, 0xBF, 0x57, 0xD9, 0xD8, 0x4E, 0xD0, 0x2A, 0x80, 0x07, 0x90, 0x72, 0x2B, 0xA0, 0xCF, 0xC3, 0x7A, 0xCB, 0xE3, 0x40, 0x28, 0xA0, 0x0D, 0x26, 0x40, 0x04, 0xA8, 0x39, 0x71, 0xA0, 0xB9, 0x05, 0x32, 0x26, 0x7D, 0xD4, 0x8B, 0xEF, 0xB6, 0x12, 0x50, 0x01, 0x1F, 0xC7, 0x98, 0x48, 0x58, 0xE9, 0x78, 0x3F, 0x4F, 0x3A, 0xE3, 0xEA, 0xEF, 0x30, 0x31, 0xCF, 0xBE, 0xD5, 0xFB, 0xB3, 0x00, 0x99, 0x80, 0x17, 0xC0, 0xB1, 0xB5, 0x8E, 0x94, 0x00, 0x32, 0x40, 0x72, 0x1B, 0x76, 0xA6, 0x00, 0xF6, 0x98, 0xB7, 0x39, 0x35, 0xAC, 0x31, 0xA9, 0xF1, 0x79, 0x3C, 0xF7, 0x70, 0x8E, 0xFE, 0xF5, 0x87, 0x9E, 0x06, 0xC2, 0x04, 0x5C, 0x81, 0xE9, 0x69, 0x13, 0x02, 0xA2, 0x51, 0xD2, 0x50, 0x20, 0x03, 0x08, 0x01, 0x3C, 0x80, 0xEE, 0x16, 0x9F, 0xB9, 0xD8, 0xA5, 0x05, 0x6C, 0x85, 0xB3, 0x3E, 0xEE, 0x01, 0xF2, 0xE5, 0x1F, 0x99, 0xAD, 0xE7, 0x27, 0xAB, 0x17, 0xA8, 0xA2, 0xF4, 0x28, 0x32, 0xB3, 0x3D, 0xBB, 0xC5, 0x6A, 0x22, 0xA2, 0xBE, 0x7E, 0x7A, 0xE8, 0xE3, 0xB5, 0x14, 0x3F, 0x30, 0x35, 0x6C, 0x9A, 0x1B, 0x38, 0xAF, 0x1C, 0x08, 0x05, 0x20, 0x02, 0x58, 0x01, 0x53, 0x2F, 0xF6, 0x86, 0x26, 0xE0, 0x04, 0x84, 0xAC, 0x71, 0xF7, 0x99, 0xBC, 0xF1, 0xB9, 0xBD, 0xDE, 0x8E, 0xA9, 0x98, 0x31, 0xB0, 0x69, 0x8F, 0x20, 0x60, 0x2C, 0xCB, 0x4E, 0x83, 0x13, 0x90, 0x86, 0x1A, 0x60, 0x0E, 0x78, 0x23, 0x02, 0x48, 0x03, 0xCA, 0x3B, 0x68, 0x85, 0x74, 0x79, 0x40, 0x07, 0x92, 0x89, 0x71, 0x6A, 0x66, 0x47, 0x87, 0x1C, 0xF7, 0xAC, 0x5D, 0x59, 0x7B, 0x38, 0x16, 0x9E, 0x78, 0x8D, 0xDD, 0xFE, 0xB8, 0x83, 0x86, 0x9D, 0x7C, 0x9A, 0xD5, 0xB7, 0x77, 0xB5, 0x8D, 0x1B, 0x7F, 0x6F, 0xB0, 0x65, 0xBB, 0x9D, 0x55, 0xB5, 0x11, 0xB3, 0x07, 0x8F, 0xC0, 0x79, 0xA3, 0xFF, 0x07, 0x6D, 0x30, 0x35, 0xB4, 0x21, 0x80, 0xE7, 0xF4, 0x52, 0xF6, 0xF5, 0x20, 0x7E, 0x1A, 0x6B, 0xB8, 0x05, 0xAD, 0xA3, 0xBC, 0x12, 0x90, 0xD3, 0x32, 0xE5, 0x80, 0x2B, 0x90, 0x02, 0x14, 0x35, 0xA2, 0xCF, 0x0E, 0x0C, 0x10, 0x01, 0x6C, 0x40, 0x57, 0xD7, 0xEF, 0x6E, 0xA9, 0x08, 0x9A, 0x96, 0xCF, 0xF0, 0x40, 0x4B, 0x4D, 0x44, 0x0B, 0x38, 0xE0, 0x9E, 0xC5, 0xC9, 0xB0, 0x54, 0x33, 0x5F, 0xBD, 0x7C, 0x71, 0x63, 0xF6, 0x78, 0x84, 0xD0, 0x34, 0x03, 0x14, 0x90, 0x0A, 0x88, 0xCC, 0x30, 0x06, 0xC0, 0x67, 0xCF, 0x76, 0x69, 0x8D, 0x1B, 0xDE, 0x98, 0x3E, 0x4D, 0x94, 0x76, 0xF7, 0xBE, 0x5A, 0xE3, 0x00, 0xD2, 0xF0, 0x49, 0x7B, 0xD3, 0xCF, 0x85, 0x5F, 0x6E, 0xDE, 0xF1, 0xDE, 0x04, 0x12, 0x88, 0xE8, 0x40, 0x2A, 0x60, 0x04, 0xA4, 0x6F, 0x13, 0x46, 0x3A, 0x8D, 0x68, 0x38, 0xC0, 0x04, 0x48, 0x00, 0x41, 0x1D, 0x33, 0xEA, 0x8C, 0x6F, 0x7D, 0xA7, 0xB5, 0x64, 0xFD, 0x5E, 0xA5, 0x15, 0xD4, 0x8D, 0x37, 0xD9, 0x57, 0xC5, 0xC2, 0x8F, 0xA9, 0xDA, 0x75, 0x19, 0x18, 0xFC, 0xD7, 0x3B, 0x70, 0x71, 0xA5, 0x58, 0xFC, 0x3E, 0x6C, 0xFB, 0x30, 0x3D, 0xCE, 0x9E, 0x3A, 0x83, 0x74, 0x4F, 0x32, 0x32, 0x81, 0x9A, 0x9D, 0x78, 0x1E, 0x60, 0xB1, 0x1D, 0x57, 0x49, 0xE0, 0x48, 0x83, 0xB6, 0xE4, 0x99, 0xF6, 0xAB, 0x0D, 0xBB, 0xD0, 0x3C, 0x42, 0x3C, 0x42, 0x1E, 0xF7, 0x5E, 0x2F, 0xB2, 0xDB, 0x8E, 0x7C, 0x9A, 0x89, 0x1C, 0x70, 0x05, 0x8A, 0x1A, 0xB2, 0x3F, 0xA5, 0x6C, 0x14, 0x4F, 0x66, 0xA4, 0x83, 0x76, 0xC7, 0xD5, 0x11, 0xAD, 0xA4, 0x4F, 0x77, 0x34, 0x28, 0xDA, 0xC4, 0xBD, 0xB0, 0xD0, 0x0E, 0x75, 0x6A, 0x39, 0x50, 0xE8, 0xE2, 0xDA, 0xD2, 0xB6, 0x6F, 0x49, 0x65, 0x7A, 0x01, 0xF2, 0x03, 0xD6, 0x16, 0x30, 0xC7, 0x43, 0x95, 0xE5, 0x8A, 0x3A, 0x07, 0x50, 0x53, 0x20, 0x76, 0xFF, 0x06, 0x06, 0x68, 0x00, 0x01, 0x24, 0x01, 0x56, 0x40, 0x0F, 0x60, 0x23, 0xAB, 0xA9, 0xBD, 0xE0, 0xC6, 0x62, 0x4F, 0xA6, 0x83, 0xB8, 0xD7, 0xD6, 0xF3, 0x74, 0x9A, 0xEE, 0xBE, 0x46, 0x09, 0xC0, 0x19, 0x88, 0x41, 0x02, 0x19, 0x40, 0xD5, 0xD3, 0x8A, 0x98, 0x80, 0x58, 0x07, 0x4D, 0x96, 0xD8, 0x4B, 0x84, 0xE2, 0xF9, 0xFD, 0x9E, 0xD5, 0xB8, 0x6E, 0x81, 0x2E, 0xD5, 0xD2, 0x00, 0xD6, 0xFF, 0xE0, 0x18, 0xF5, 0xD7, 0x77, 0x47, 0xCB, 0x7B, 0x6E, 0x9D, 0x72, 0xDB, 0xC8, 0xEF, 0x35, 0x68, 0x6E, 0x33, 0x00, 0xF9, 0x8E, 0x60, 0x0D, 0x3A, 0x58, 0x53, 0xA9, 0x52, 0xDE, 0x38, 0xD4, 0x11, 0xA4, 0xFE, 0x24, 0x00, 0x29, 0x30, 0x23, 0x00, 0xE3, 0x47, 0x98, 0xCB, 0xAB, 0x50, 0x6E, 0xFD, 0x29, 0x1F, 0xA3, 0xAC, 0xAB, 0x26, 0xE3, 0x00, 0x07, 0x20, 0x0E, 0xA8, 0x01, 0xC6, 0x80, 0x0B, 0x10, 0x0A, 0xA4, 0xF4, 0xEB, 0xE3, 0x74, 0xCC, 0xB4, 0x3B, 0x50, 0x31, 0xAC, 0x48, 0x84, 0x7E, 0x21, 0xB7, 0x16, 0xCF, 0xA9, 0xA9, 0xAB, 0x25, 0xFA, 0x85, 0x5C, 0xFA, 0x30, 0x50, 0x73, 0xE3, 0x7C, 0x04, 0xD3, 0x6C, 0x4F, 0xF6, 0xB8, 0xEF, 0xF6, 0x8B, 0x92, 0xA7, 0x0B, 0x43, 0x00, 0x3D, 0x00, 0x01, 0xFD, 0x29, 0x6E, 0x55, 0x5B, 0xCF, 0x9E, 0xBB, 0x53, 0x03, 0x4E, 0xED, 0x26, 0x8E, 0x2D, 0x0B, 0x94, 0x7F, 0x0D, 0xB6, 0x64, 0xA4, 0x62, 0xA4, 0x43, 0x38, 0x95, 0x23, 0x03, 0xAC, 0x80, 0xD1, 0x47, 0x11, 0x02, 0xC2, 0x11, 0xE5, 0x43, 0x0D, 0x9E, 0x61, 0x01, 0x20, 0x05, 0x88, 0xDC, 0x3E, 0xDA, 0xCA, 0x1D, 0xB4, 0x9F, 0xFA, 0xE3, 0xB7, 0xD7, 0x2A, 0x32, 0x24, 0x87, 0x60, 0xC1, 0x35, 0x2D, 0xDD, 0x84, 0xBE, 0xE4, 0x91, 0xE5, 0x68, 0x61, 0xD2, 0x9A, 0xA7, 0x33, 0x6D, 0x69, 0x4A, 0xD8, 0x98, 0xB9, 0xCA, 0x28, 0x47, 0xDF, 0x19, 0xBB, 0xCC, 0x2E, 0x63, 0xDE, 0xF9, 0x90, 0xAD, 0x5A, 0x6B, 0x01, 0x08, 0x01, 0x56, 0xFB, 0x44, 0xEE, 0xBA, 0x47, 0x7D, 0x23, 0x81, 0xF2, 0x7D, 0xAE, 0x8F, 0x0E, 0xD3, 0x75, 0x08, 0xF7, 0x59, 0x23, 0xBD, 0x19, 0x75, 0x57, 0xAE, 0x8C, 0xA9, 0xAB, 0x6D, 0x1F, 0x32, 0x71, 0xC0, 0x05, 0x88, 0x04, 0x32, 0x80, 0x69, 0xF8, 0x25, 0x06, 0x58, 0x01, 0x09, 0xC0, 0xE6, 0xE9, 0xF4, 0x09, 0x1A, 0x84, 0xA7, 0x33, 0xF1, 0x8D, 0x4C, 0xDD, 0x25, 0x49, 0x6D, 0xBE, 0x87, 0x73, 0x47, 0x91, 0x76, 0x77, 0x1C, 0x86, 0x15, 0xDF, 0x77, 0xA7, 0xAC, 0xD1, 0x5E, 0x92, 0x7B, 0xB6, 0xCC, 0x46, 0xE9, 0x2E, 0xBA, 0xC9, 0x07, 0x7D, 0xFB, 0xE9, 0xAE, 0x90, 0xC6, 0x48, 0x22, 0xA9, 0x02, 0x5E, 0x00, 0x25, 0x70, 0x1A, 0x5C, 0x80, 0xDA, 0xAE, 0x0E, 0x67, 0x3F, 0x42, 0xD3, 0x8D, 0xAD, 0x1D, 0x17, 0xED, 0x8C, 0x2C, 0xF6, 0xF1, 0xCE, 0x3C, 0x4A, 0x5D, 0x0F, 0xA4, 0x73, 0x00, 0x51, 0xC0, 0x08, 0xF0, 0x00, 0xA2, 0x80, 0xAA, 0xB6, 0xDF, 0x6D, 0x88, 0x00, 0x37, 0x66, 0x71, 0x63, 0x16, 0xDF, 0x5D, 0x58, 0xBF, 0x2C, 0x1A, 0x99, 0x20, 0x59, 0x54, 0x39, 0x63, 0x50, 0x3D, 0x40, 0xDF, 0x7E, 0x04, 0xB5, 0x3D, 0x03, 0x7D, 0xEB, 0xA5, 0xC9, 0x75, 0x70, 0x32, 0xDF, 0x8D, 0x7B, 0x7A, 0xB6, 0x5C, 0x1B, 0xF9, 0x16, 0xE7, 0x38, 0xF2, 0xA4, 0x87, 0x18, 0xB0, 0xC6, 0xF4, 0x9E, 0x79, 0x02, 0xF6, 0x4A, 0xA6, 0x8E, 0xA8, 0xC7, 0xFC, 0x0D, 0x33, 0x77, 0x57, 0x5D, 0x6E, 0xF7, 0x39, 0xBA, 0x8F, 0x41, 0x40, 0x02, 0xE5, 0xE3, 0xF3, 0x09, 0x24, 0xF7, 0x2C, 0x40, 0x02, 0x2C, 0x80, 0x18, 0xA0, 0x0E, 0x58, 0x01, 0x21, 0x40, 0xF6, 0x8E, 0x78, 0xB7, 0xB4, 0xC4, 0x7B, 0x46, 0xEA, 0x4F, 0x1E, 0x6C, 0xFC, 0xF6, 0x1D, 0xCB, 0x12, 0x59, 0x5E, 0x8B, 0xBE, 0xCB, 0xD2, 0x77, 0x88, 0x48, 0xED, 0xE1, 0x66, 0xD1, 0xBD, 0xA5, 0xBD, 0x41, 0xD3, 0xD9, 0x69, 0xC6, 0x7A, 0xB2, 0xC1, 0xFD, 0xC5, 0xAB, 0x34, 0xD4, 0xA0, 0xDB, 0xF8, 0xD9, 0xB0, 0xAD, 0x47, 0xA8, 0x34, 0x09, 0xC5, 0xC7, 0x0E, 0x5B, 0x1A, 0x4F, 0xD0, 0x38, 0x7E, 0x03, 0xED, 0xF7, 0xC5, 0x11, 0x3D, 0xCE, 0x74, 0xEE, 0x28, 0x4F, 0xAC, 0x19, 0x1E, 0xBD, 0x76, 0x9F, 0x1E, 0x4F, 0x6F, 0xB8, 0x36, 0xBC, 0x41, 0x80, 0x04, 0xC0, 0x0E, 0x28, 0x01, 0x95, 0x1D, 0xB4, 0x6A, 0x5B, 0xA8, 0xC9, 0xD7, 0x42, 0x59, 0xDF, 0xC5, 0xF0, 0x45, 0xCD, 0x3E, 0x3A, 0x8D, 0x12, 0x93, 0xA0, 0x51, 0x2A, 0xF4, 0x9F, 0xEF, 0x81, 0xC9, 0x58, 0x6C, 0xBB, 0x35, 0x37, 0x40, 0xCF, 0xE8, 0x47, 0x00, 0xD6, 0xA0, 0x77, 0x76, 0xFD, 0x69, 0xC6, 0x52, 0xF9, 0x97, 0x3B, 0xA5, 0x01, 0xD1, 0x98, 0xDB, 0xFA, 0xA4, 0x9C, 0x8C, 0x7F, 0x57, 0xB0, 0x2B, 0x1C, 0x14, 0xB7, 0x56, 0x28, 0xF9, 0x54, 0x38, 0x4F, 0x6F, 0xF9, 0x06, 0x58, 0x00, 0xE9, 0x0D, 0x03, 0xC2, 0x01, 0x33, 0x40, 0xD7, 0xE0, 0x24, 0xDF, 0x76, 0x84, 0x69, 0x35, 0x39, 0xF4, 0x27, 0xBB, 0xEE, 0x61, 0xDF, 0x48, 0x95, 0xB7, 0xD1, 0xE2, 0x8C, 0x07, 0x26, 0xBA, 0xDA, 0x34, 0xDA, 0x49, 0xED, 0xB1, 0xF4, 0x3C, 0x4F, 0xDA, 0x76, 0xD2, 0xAF, 0xA1, 0x7B, 0x1E, 0xD6, 0xE5, 0x59, 0x62, 0xBC, 0xA5, 0xC9, 0xA3, 0xA1, 0x05, 0x58, 0x00, 0x2E, 0x7B, 0x9A, 0x5F, 0xFC, 0xD1, 0xE7, 0x7F, 0x9A, 0xB8, 0x4A, 0x6E, 0xF6, 0xED, 0x27, 0x00, 0xE1, 0x77, 0x44, 0xD3, 0x47, 0xEB, 0x65, 0x06, 0xC3, 0xA2, 0x9F, 0x3D, 0x05, 0x6A, 0x56, 0x93, 0x01, 0x56, 0x80, 0x27, 0x10, 0xE7, 0x81, 0x02, 0xE9, 0x53, 0x74, 0xE8, 0xA0, 0x11, 0xE2, 0xE3, 0xF9, 0x05, 0xCD, 0xEA, 0xD1, 0xD2, 0xD7, 0x56, 0xE2, 0xB0, 0x82, 0x1E, 0x60, 0xA7, 0x6D, 0x2D, 0x1F, 0x25, 0x8E, 0x09, 0x1A, 0x9D, 0xC7, 0x80, 0x80, 0x9F, 0x0E, 0x48, 0xDE, 0x56, 0x51, 0xDE, 0xD0, 0x68, 0x1C, 0x20, 0x1E, 0xC1, 0x7A, 0xBE, 0x06, 0x64, 0x00, 0xF3, 0xD6, 0x95, 0x3C, 0xB4, 0x21, 0xBC, 0xFD, 0x0B, 0x6C, 0x62, 0x57, 0xF1, 0x1B, 0x0D, 0xB6, 0xBF, 0x37, 0xF9, 0x04, 0x94, 0x80, 0xEC, 0xCA, 0x2C, 0x27, 0x60, 0x6F, 0x71, 0xCC, 0x01, 0x2E, 0x80, 0x02, 0x90, 0x03, 0x4C, 0x8B, 0x95, 0xF0, 0x57, 0x55, 0xA1, 0x73, 0xA3, 0x35, 0xC0, 0xDB, 0x24, 0xAB, 0x97, 0x4D, 0xE0, 0x37, 0xC9, 0x82, 0xD7, 0x52, 0xFA, 0x7D, 0x2C, 0x3F, 0x52, 0xB3, 0xEA, 0xEC, 0xDA, 0x47, 0xC9, 0x56, 0x44, 0xC8, 0x02, 0x5C, 0x5E, 0xEB, 0x13, 0xE0, 0x30, 0x40, 0x0E, 0x58, 0x23, 0x0A, 0xE0, 0x98, 0x89, 0x0E, 0x40, 0xA5, 0x51, 0x80, 0x31, 0x90, 0x2B, 0x78, 0x7E, 0xBB, 0x45, 0xD4, 0x66, 0xE1, 0xF9, 0xB4, 0xD0, 0xCE, 0xD4, 0x29, 0x20, 0x0C, 0xC4, 0x3C, 0xC9, 0x6F, 0xCE, 0x80, 0x01, 0x51, 0x80, 0x1C, 0x38, 0xF3, 0x29, 0x00, 0x9F, 0xA5, 0x86, 0xE9, 0x7E, 0xAE, 0xEC, 0x70, 0x61, 0x82, 0x20, 0x28, 0xBB, 0xA0, 0x9C, 0x2D, 0x39, 0x08, 0xB9, 0xD1, 0x74, 0x87, 0x17, 0x82, 0xC8, 0x2C, 0xB1, 0xF7, 0x4D, 0xF0, 0x8C, 0x5D, 0xE4, 0xB3, 0x87, 0x27, 0x20, 0xA3, 0x94, 0x13, 0x80, 0x1E, 0xE0, 0x68, 0x83, 0x1F, 0x05, 0x8F, 0x8E, 0xA4, 0x3F, 0xB6, 0x62, 0x4E, 0x8D, 0x04, 0x62, 0xB9, 0xA0, 0xC9, 0xE8, 0x64, 0x4C, 0x5C, 0x27, 0xA3, 0x28, 0x7F, 0xE7, 0x86, 0x6B, 0xE7, 0x46, 0x2C, 0x80, 0x79, 0xD1, 0x1A, 0x03, 0xA9, 0x0D, 0x02, 0xBC, 0x00, 0x55, 0x80, 0x63, 0x2F, 0xD1, 0x49, 0x0C, 0x21, 0x47, 0x66, 0x6E, 0xF2, 0x37, 0x68, 0xAD, 0x68, 0xAB, 0x9F, 0x46, 0x51, 0xF6, 0xD0, 0x06, 0xF2, 0xF5, 0xFD, 0x26, 0x60, 0x2D, 0x99, 0x19, 0xFF, 0xA7, 0xAC, 0x42, 0x7B, 0xEC, 0xC2, 0xE7, 0xD0, 0xF0, 0x94, 0x06, 0x66, 0x73, 0x4A, 0xDF, 0x81, 0xA9, 0x46, 0x24, 0x90, 0xBA, 0xC1, 0xB9, 0xC3, 0x64, 0xF4, 0xBC, 0x10, 0xE6, 0x5B, 0xF8, 0xD7, 0x38, 0x5E, 0xB3, 0x0A, 0xF5, 0xF6, 0x37, 0xCE, 0xFE, 0x3E, 0x52, 0x57, 0x6C, 0x40, 0xCA, 0xEE, 0x95, 0x70, 0x01, 0xD2, 0x81, 0x51, 0x92, 0x3A, 0xDA, 0x28, 0x80, 0x02, 0xE0, 0x02, 0x26, 0x31, 0x24, 0xD6, 0xEF, 0x11, 0xFA, 0x53, 0x5F, 0x0A, 0xE0, 0x27, 0x6C, 0x5B, 0xE3, 0x98, 0x43, 0x19, 0xF6, 0x2D, 0x1B, 0x56, 0xE9, 0xBA, 0xA6, 0x4C, 0x0F, 0xFC, 0xA3, 0x9C, 0x19, 0xDB, 0x1B, 0x28, 0x03, 0xA8, 0xDA, 0x31, 0xB0, 0x02, 0xC4, 0x00, 0x92, 0xE7, 0xF1, 0x6C, 0x68, 0x00, 0x9E, 0x00, 0xDB, 0x13, 0x34, 0x06, 0x7C, 0x30, 0x26, 0x75, 0xB3, 0x7A, 0x6D, 0x66, 0xE0, 0xD7, 0x5D, 0x5E, 0xEF, 0xDA, 0x0A, 0xD9, 0x1D, 0x94, 0x11, 0xBB, 0xD3, 0x4F, 0x05, 0x70, 0x6D, 0x64, 0x23, 0x1A, 0xDE, 0x38, 0xC0, 0x4D, 0x02, 0x5B, 0x07, 0xCD, 0xD1, 0x84, 0x4E, 0x2D, 0x64, 0x18, 0xF9, 0xA9, 0x0C, 0x91, 0x39, 0x4E, 0xD1, 0x66, 0xE3, 0x3F, 0xD7, 0xED, 0x89, 0x0E, 0x8B, 0x6F, 0x96, 0xE9, 0xE2, 0x7B, 0x54, 0x25, 0x62, 0x96, 0xD1, 0xA3, 0xAD, 0xC4, 0xB1, 0xF2, 0x19, 0x3C, 0x02, 0x3D, 0xF1, 0x78, 0x9E, 0xDA, 0x86, 0x8F, 0xF1, 0x62, 0xED, 0xB7, 0x2F, 0x27, 0x40, 0x04, 0x70, 0x01, 0x2A, 0x7D, 0xBB, 0xCD, 0x95, 0x1C, 0xF1, 0x3B, 0x2F, 0x7B, 0xFC, 0x77, 0x0D, 0x9F, 0x9A, 0x3D, 0x7E, 0x0A, 0xE4, 0x82, 0x66, 0x52, 0xB2, 0x00, 0x75, 0xC0, 0x13, 0x88, 0x02, 0xB2, 0x9E, 0x24, 0x87, 0x01, 0x1C, 0x80, 0xCE, 0x9E, 0xF6, 0xF7, 0x4A, 0x90, 0x9F, 0xD9, 0x0D, 0xFA, 0xD3, 0xDC, 0x19, 0x17, 0x76, 0xF3, 0x4E, 0x76, 0x47, 0xCB, 0xF3, 0xA3, 0x25, 0xDE, 0xE2, 0x19, 0x25, 0xAB, 0x47, 0x6E, 0x54, 0x57, 0x0F, 0x0C, 0x3A, 0x7E, 0xF7, 0x2F, 0x3F, 0xBA, 0x49, 0xD7, 0x3C, 0x1D, 0xA0, 0x04, 0x4E, 0x43, 0x1A, 0x5E, 0xBB, 0xFB, 0x5D, 0x1D, 0xE0, 0x02, 0x34, 0xF7, 0x06, 0xC0, 0x39, 0x51, 0x9E, 0x51, 0xC9, 0x75, 0xE0, 0x9A, 0x66, 0x29, 0x24, 0xB1, 0xF0, 0x5B, 0x3F, 0x63, 0x9B, 0xCE, 0x40, 0x55, 0x5B, 0x36, 0x37, 0x44, 0x01, 0x0D, 0xC0, 0x1D, 0x48, 0xD9, 0xA3, 0xDF, 0xA4, 0x1D, 0xB4, 0xD7, 0x2D, 0x10, 0xAE, 0x0D, 0x99, 0xDA, 0xF6, 0x5A, 0x8E, 0x7E, 0xCF, 0xD2, 0x6F, 0x85, 0x38, 0x09, 0x46, 0x21, 0x64, 0xBB, 0x36, 0xB8, 0xBE, 0x57, 0x82, 0x47, 0x79, 0x3E, 0x0D, 0x10, 0xFB, 0x55, 0xDB, 0xED, 0x1E, 0x79, 0xC3, 0x81, 0x39, 0xE0, 0x85, 0x01, 0x4E, 0x80, 0xAE, 0x81, 0xA0, 0xEF, 0x86, 0x0E, 0x44, 0xA3, 0x74, 0x0F, 0x12, 0xC5, 0x12, 0x4D, 0xA6, 0xE9, 0x61, 0x3B, 0xB7, 0x85, 0x83, 0x67, 0x44, 0xB3, 0x7E, 0x6E, 0xF4, 0xD8, 0x01, 0x10, 0x3B, 0x06, 0xF4, 0x00, 0xDE, 0x08, 0x03, 0xB2, 0xB6, 0xD8, 0x1D, 0xF3, 0x0E, 0xA8, 0x31, 0x82, 0x36, 0x13, 0xFC, 0x3F, 0x43, 0x37, 0xFF, 0x16, 0xB6, 0x20, 0x33, 0x5C, 0x8E, 0xE7, 0xB2, 0x7A, 0xE8, 0x2B, 0x7B, 0x0C, 0x49, 0x68, 0xD7, 0xD7, 0xDF, 0xA6, 0x84, 0x6B, 0xA5, 0x7E, 0x27, 0xCA, 0x00, 0x3D, 0x7B, 0x7A, 0x62, 0xA6, 0x52, 0xF8, 0x89, 0x96, 0x35, 0xFC, 0x00, 0x36, 0x41, 0xB3, 0x0E, 0x13, 0x01, 0x5E, 0x40, 0x32, 0x70, 0x3D, 0x15, 0xE7, 0xA0, 0x76, 0xBB, 0x11, 0x7E, 0x6A, 0xC9, 0xF7, 0x14, 0x8F, 0x63, 0x45, 0x0B, 0x6F, 0x02, 0x35, 0x93, 0xA5, 0x93, 0x09, 0x27, 0x40, 0x05, 0xB0, 0xF9, 0xA4, 0x80, 0x34, 0xD8, 0x00, 0xD5, 0x5D, 0x56, 0xD1, 0xB3, 0x1E, 0xCF, 0x63, 0x8E, 0xC1, 0xE7, 0x60, 0x04, 0xD9, 0xAC, 0x7B, 0xA0, 0xB2, 0xAB, 0xD6, 0x85, 0x01, 0x19, 0xC9, 0x5D, 0x8B, 0xA2, 0x7F, 0x7A, 0xAF, 0x4F, 0x2F, 0xBC, 0x2C, 0xE1, 0xDF, 0x2B, 0x1B, 0x27, 0xBC, 0x05, 0xC9, 0x26, 0x9F, 0xE6, 0x0C, 0xE8, 0x13, 0xE5, 0x7B, 0x39, 0x07, 0xF6, 0xA7, 0xA5, 0xF3, 0xB5, 0x04, 0xE6, 0xC8, 0xAE, 0x7A, 0x53, 0xFC, 0x24, 0x19, 0x44, 0xAE, 0xF1, 0xBC, 0x4C, 0xA6, 0xC7, 0x80, 0xF4, 0x6E, 0x7E, 0x0C, 0xC0, 0x0E, 0xE0, 0x0A, 0xE4, 0x01, 0x2A, 0xA7, 0xE5, 0x0C, 0xE0, 0xC6, 0xBC, 0x3D, 0x95, 0x9E, 0xC7, 0x73, 0xBC, 0xEC, 0x1D, 0xBB, 0x81, 0x3A, 0xCA, 0x07, 0xE6, 0x2D, 0x86, 0x15, 0x70, 0xC8, 0x90, 0xEA, 0x20, 0x21, 0x66, 0xFE, 0x08, 0xE5, 0xF8, 0xC4, 0x4C, 0x47, 0x83, 0x65, 0x62, 0x36, 0x83, 0xA9, 0x3E, 0x2D, 0x2A, 0xD8, 0xE0, 0x68, 0xAE, 0xE8, 0xDB, 0x42, 0xC6, 0x03, 0xA0, 0xA7, 0x2C, 0xCF, 0x8F, 0x75, 0x1F, 0x37, 0x64, 0x59, 0x84, 0xF9, 0x3C, 0x9D, 0x7F, 0x55, 0x20, 0xA5, 0xA6, 0x0F, 0xA5, 0xC3, 0x73, 0x46, 0x48, 0xA2, 0x73, 0x42, 0x01, 0x84, 0x77, 0xDE, 0x27, 0x01, 0x25, 0xC0, 0x14, 0xF0, 0x02, 0xD2, 0xDA, 0xEA, 0x59, 0x00, 0x22, 0x80, 0xAD, 0x63, 0xC6, 0x68, 0x46, 0xD0, 0xB8, 0xA1, 0xAB, 0x6F, 0x77, 0x16, 0xFC, 0x59, 0x70, 0xBA, 0x28, 0x49, 0xEB, 0x8A, 0x74, 0x7C, 0x77, 0x9B, 0x53, 0xB1, 0x55, 0xE6, 0xE2, 0xF1, 0x1F, 0x90, 0xD7, 0x43, 0xD1, 0x81, 0xD0, 0x06, 0x01, 0x49, 0x7B, 0xEC, 0xEE, 0x3A, 0x56, 0xD6, 0xF9, 0xE5, 0xB0, 0xF3, 0x36, 0xA7, 0x51, 0xE1, 0x93, 0xDA, 0xAF, 0xA1, 0xBE, 0x73, 0x90, 0x79, 0xBB, 0x9D, 0x8B, 0x1F, 0x2B, 0xCF, 0x69, 0x43, 0x2A, 0x20, 0x0E, 0x60, 0xD5, 0xF0, 0xC6, 0x63, 0xC6, 0x43, 0x0E, 0x48, 0x35, 0x18, 0x98, 0x67, 0xA6, 0x18, 0x88, 0x00, 0xB2, 0xEE, 0x77, 0x76, 0xD0, 0xE0, 0x3F, 0x20, 0xFC, 0xFA, 0x14, 0x77, 0xD1, 0x0A, 0x4B, 0x8B, 0xA6, 0x0C, 0x57, 0x29, 0x10, 0x5D, 0xCA, 0xB3, 0xCE, 0xB6, 0xEE, 0xAF, 0x74, 0xE6, 0x63, 0x4A, 0x19, 0xA7, 0x21, 0x0D, 0x07, 0x6A, 0x0A, 0xEA, 0xF3, 0xF6, 0xF3, 0xDB, 0x0A, 0xDF, 0x81, 0xB1, 0xDE, 0x85, 0x46, 0x8C, 0x43, 0xF1, 0x49, 0xA3, 0x43, 0x38, 0x45, 0xCF, 0x19, 0x9D, 0x46, 0xEC, 0xF4, 0x15, 0xA2, 0xAB, 0xED, 0xA5, 0x61, 0xF2, 0x44, 0x44, 0x1B, 0x01, 0x38, 0xBF, 0xB9, 0x76, 0x40, 0x68, 0x27, 0xAD, 0x22, 0x01, 0x13, 0xC0, 0xA3, 0xBF, 0x85, 0x27, 0x68, 0xFA, 0x4D, 0x90, 0x85, 0x52, 0xB7, 0xBB, 0xFA, 0x7E, 0x48, 0xAB, 0xC7, 0xBA, 0x84, 0xA1, 0x79, 0x6D, 0x6D, 0x1E, 0xE7, 0x85, 0x33, 0xED, 0x3F, 0x2F, 0xEC, 0xFC, 0x0C, 0x8B, 0x89, 0x35, 0xF8, 0xB1, 0xDF, 0x3D, 0x7B, 0x31, 0x8E, 0xA1, 0x8C, 0x7D, 0x40, 0xD7, 0xEC, 0xEF, 0x9E, 0x67, 0x33, 0x1E, 0x7D, 0x9B, 0xCC, 0xB8, 0x66, 0xB7, 0x1C, 0x5F, 0x87, 0x65, 0x47, 0x61, 0x09, 0xB8, 0x35, 0x04, 0x30, 0x6F, 0xD8, 0xFE, 0xE4, 0x07, 0x48, 0x1D, 0x5F, 0x19, 0xC0, 0x08, 0x50, 0x07, 0x38, 0x1F, 0x3F, 0x9A, 0xD8, 0xE6, 0xAD, 0x76, 0x83, 0x66, 0xDF, 0x4A, 0x73, 0x1B, 0x15, 0xBE, 0xB9, 0x4C, 0x4D, 0x13, 0x65, 0xC2, 0x0B, 0x85, 0xBA, 0x08, 0x75, 0x14, 0x8F, 0x5C, 0xD1, 0xD8, 0x9F, 0x3E, 0xF6, 0x20, 0x73, 0xAB, 0xA9, 0xA7, 0xA1, 0xC7, 0x1B, 0x06, 0x48, 0xED, 0x2F, 0xCE, 0xB6, 0x2E, 0x7A, 0x3D, 0x72, 0xA6, 0xEE, 0xF4, 0x9B, 0xEF, 0xAA, 0x2B, 0xE9, 0x95, 0xAB, 0x7E, 0x4C, 0xE3, 0x1D, 0x7B, 0xCD, 0x66, 0x74, 0xA7, 0x2B, 0xCD, 0x01, 0x8E, 0x27, 0x29, 0x6C, 0x0D, 0x6E, 0xCC, 0xB7, 0xD0, 0xE3, 0x73, 0x3E, 0x60, 0xC0, 0xEB, 0x31, 0xDC, 0x6D, 0x08, 0x03, 0x65, 0x13, 0x34, 0x47, 0xFF, 0xE3, 0x7F, 0x5E, 0x07, 0x8A, 0xFF, 0x01, 0x8F, 0x27, 0x7B, 0x3B, 0xE9, 0x33, 0x7E, 0xF5, 0x92, 0x7B, 0xA6, 0xFD, 0x48, 0xCF, 0xD5, 0x93, 0x74, 0xCF, 0x23, 0x72, 0x83, 0xAA, 0x21, 0x8D, 0xDA, 0x1D, 0x52, 0x67, 0x1E, 0x09, 0x5D, 0x13, 0x27, 0x10, 0x0E, 0x5E, 0xCA, 0xE6, 0x73, 0xE1, 0x16, 0x9B, 0xEC, 0xDE, 0x14, 0x8E, 0x11, 0x3B, 0xDD, 0xD2, 0x75, 0x7C, 0x76, 0xFB, 0xA4, 0x55, 0x83, 0x1A, 0xA7, 0x21, 0x40, 0xE8, 0xA3, 0x9C, 0x49, 0x00, 0xDB, 0x6E, 0xC2, 0x2C, 0x05, 0x22, 0x80, 0xAC, 0xFE, 0xCE, 0x9C, 0xA0, 0xC5, 0x57, 0xB3, 0x3B, 0x65, 0xD8, 0xF5, 0x28, 0xBF, 0xAC, 0xB7, 0xA7, 0x75, 0x3E, 0xCD, 0xFF, 0x2A, 0x2F, 0xD8, 0x18, 0x06, 0x32, 0xF5, 0xD9, 0x36, 0x5F, 0xB9, 0x51, 0x80, 0xEF, 0x3F, 0x39, 0x9F, 0x6D, 0x0C, 0xA3, 0x09, 0x98, 0x3F, 0x86, 0x81, 0x36, 0xBF, 0xEE, 0xF2, 0xC5, 0x9B, 0x14, 0x33, 0xDD, 0xBC, 0xFC, 0x59, 0x42, 0x54, 0x5D, 0x0B, 0x21, 0xBF, 0xC9, 0x32, 0xAA, 0x0E, 0xE1, 0xF8, 0x2C, 0x24, 0x20, 0x37, 0xF4, 0x40, 0x10, 0xE0, 0xDA, 0x90, 0x46, 0x02, 0x65, 0xBB, 0x0A, 0xED, 0xDE, 0x38, 0x80, 0xF2, 0x16, 0x01, 0xAC, 0x69, 0xC5, 0x2A, 0x20, 0x26, 0x68, 0x70, 0x1C, 0x30, 0xF2, 0x77, 0xA5, 0xE1, 0x98, 0xA6, 0xD8, 0x3E, 0x42, 0x65, 0xDA, 0x5E, 0xD0, 0x42, 0x2A, 0x68, 0xB8, 0xE5, 0x9D, 0x19, 0x5A, 0xF9, 0xB4, 0x7C, 0x3C, 0x93, 0xB3, 0xE1, 0xFB, 0x93, 0x29, 0x90, 0x3E, 0xEF, 0xB8, 0x5B, 0xDB, 0xEC, 0x34, 0x17, 0x23, 0x6A, 0xB2, 0x12, 0xFA, 0x8C, 0x50, 0x52, 0xDD, 0x66, 0x18, 0xFE, 0x89, 0xF6, 0xD6, 0xBD, 0xAC, 0x3A, 0x01, 0x67, 0x44, 0x6C, 0x1D, 0xF8, 0xB5, 0xEF, 0x02, 0xA7, 0x61, 0x80, 0x1E, 0x20, 0x7D, 0x3B, 0xDF, 0xCC, 0xC2, 0x2B, 0x02, 0x9C, 0x01, 0x25, 0xC0, 0xA4, 0xBF, 0xD3, 0x26, 0x6A, 0x18, 0x21, 0x23, 0xE3, 0xFB, 0x83, 0x85, 0xE3, 0x1A, 0x05, 0x81, 0x22, 0x46, 0x81, 0xFC, 0xF4, 0x15, 0xD4, 0xB8, 0x7D, 0x5A, 0x72, 0x5B, 0x5D, 0xDC, 0x0A, 0xFB, 0x7A, 0xF8, 0x0C, 0x31, 0xC4, 0x61, 0x0C, 0xB0, 0x01, 0x37, 0x0A, 0x18, 0x57, 0x02, 0xB9, 0x33, 0x8B, 0xF3, 0x0C, 0xFA, 0x4F, 0xCF, 0x89, 0xEF, 0x40, 0x4A, 0xCC, 0x60, 0x90, 0x4F, 0xEA, 0x7F, 0x8F, 0xF4, 0xB1, 0x01, 0xE7, 0x00, 0xE2, 0x80, 0x15, 0xE0, 0x09, 0x44, 0x00, 0xC9, 0x40, 0xC9, 0x6E, 0x10, 0x8D, 0x11, 0x3F, 0x9D, 0xB3, 0xB1, 0x00, 0xE1, 0x80, 0x26, 0x20, 0x67, 0x6B, 0xA7, 0xCE, 0x10, 0x81, 0xA1, 0x2D, 0x8D, 0x51, 0x45, 0x0F, 0xA7, 0x51, 0xB6, 0x85, 0xC6, 0x50, 0x5A, 0x7E, 0xC7, 0xED, 0x30, 0xEB, 0xF1, 0xBB, 0x42, 0x9E, 0x50, 0x6B, 0xA5, 0x86, 0x54, 0x9F, 0x86, 0x78, 0x3A, 0x40, 0xCE, 0xDE, 0x56, 0x8D, 0x37, 0x53, 0xED, 0x00, 0xC7, 0xB6, 0x76, 0x4E, 0x5B, 0x92, 0xD3, 0x76, 0x2B, 0x9E, 0x49, 0xC0, 0xB1, 0x79, 0x76, 0x7F, 0x63, 0xC3, 0x7F, 0xDB, 0x0D, 0x85, 0xA6, 0x13, 0xE4, 0x83, 0x33, 0xA0, 0x0A, 0xC8, 0x01, 0x38, 0x36, 0x44, 0x01, 0x0B, 0xA0, 0xF4, 0xE9, 0x64, 0x26, 0x5E, 0x56, 0x17, 0x79, 0x9E, 0xFE, 0xC9, 0x39, 0xB6, 0xB3, 0x74, 0xD0, 0x08, 0x1D, 0x56, 0x9A, 0xAB, 0xFE, 0xC9, 0x8A, 0x99, 0xC5, 0x4A, 0x6F, 0xD9, 0x93, 0xEC, 0x21, 0x09, 0xE8, 0x73, 0x30, 0xE9, 0x76, 0x0C, 0x94, 0xE7, 0xCC, 0x71, 0x8F, 0x99, 0xF5, 0xF8, 0x83, 0x18, 0x30, 0xCB, 0xFE, 0x30, 0xC0, 0x8D, 0xF4, 0xD9, 0xD4, 0x66, 0x1D, 0xD0, 0xAF, 0xFA, 0x26, 0xD7, 0xA7, 0x21, 0xA6, 0x82, 0x24, 0x3F, 0x39, 0xBE, 0xB8, 0x8B, 0x23, 0x0D, 0x60, 0xDD, 0xCA, 0x23, 0xEE, 0x80, 0x46, 0xC3, 0x1A, 0x0E, 0x98, 0x02, 0x51, 0xDB, 0xCA, 0x41, 0x06, 0x02, 0x70, 0x63, 0x2C, 0x31, 0x6B, 0xB6, 0xF4, 0xB3, 0xDB, 0x94, 0xBF, 0x87, 0x8E, 0x70, 0x55, 0xC2, 0xFC, 0x86, 0xFD, 0xC9, 0x6F, 0x4E, 0x28, 0x71, 0xF5, 0xC8, 0xE9, 0x43, 0x9C, 0x3D, 0x34, 0x51, 0x9E, 0x0B, 0xDD, 0x1D, 0xB7, 0xF2, 0xBC, 0x3E, 0x6D, 0xCA, 0x75, 0x4F, 0x52, 0xC7, 0x64, 0x7F, 0x52, 0x05, 0x8C, 0x81, 0x9A, 0x97, 0x9B, 0xAD, 0x46, 0x58, 0xBD, 0x0F, 0x8F, 0xAE, 0xBE, 0x34, 0x9E, 0x2D, 0x19, 0x91, 0xAC, 0xFB, 0x74, 0x67, 0x23, 0xCE, 0xD6, 0x2D, 0x61, 0x07, 0xA4, 0xA1, 0xD2, 0x48, 0xC0, 0xFC, 0x31, 0x6F, 0x60, 0x02, 0xD4, 0x1B, 0x0C, 0x70, 0x00, 0x47, 0xF1, 0x9D, 0xB3, 0x26, 0xEB, 0xEA, 0xA6, 0x77, 0xD0, 0x90, 0xD0, 0x28, 0x91, 0xE5, 0xB7, 0x6B, 0x26, 0x5F, 0x2E, 0x32, 0x68, 0x14, 0x3B, 0x15, 0x7B, 0x5A, 0x70, 0xCF, 0x14, 0x38, 0xAE, 0x02, 0xAF, 0x4C, 0xC2, 0x34, 0x1F, 0x87, 0x6C, 0xBF, 0xDD, 0x01, 0x47, 0xC3, 0x00, 0x21, 0x40, 0x03, 0xA8, 0x11, 0xBA, 0x98, 0x7B, 0x54, 0xF1, 0x38, 0x36, 0x6D, 0x29, 0xD5, 0xD3, 0xC7, 0x36, 0x5A, 0xA6, 0x4E, 0x9F, 0x80, 0x04, 0x30, 0xED, 0xEA, 0x61, 0x80, 0x15, 0xA0, 0x06, 0x88, 0x36, 0xBC, 0x51, 0x80, 0x3A, 0xE0, 0xB1, 0xFD, 0x41, 0x4E, 0x3D, 0xE8, 0x6F, 0xA9, 0xC7, 0xD0, 0xEA, 0x18, 0xA0, 0xD4, 0x41, 0xD3, 0xCF, 0x28, 0xCA, 0xC5, 0xF0, 0x83, 0x95, 0x2F, 0x9B, 0xC5, 0xB2, 0x16, 0xB3, 0x55, 0xC5, 0x2E, 0x5B, 0x86, 0x33, 0x3C, 0xD7, 0x6A, 0x53, 0xB6, 0x78, 0xBC, 0x29, 0xE5, 0x3C, 0xA7, 0xDB, 0x7A, 0x60, 0x80, 0xE5, 0xBE, 0x83, 0x1A, 0xCD, 0xA3, 0xDB, 0x41, 0x93, 0x99, 0xFB, 0xA5, 0x7E, 0x89, 0x1A, 0x82, 0xC6, 0x33, 0xEC, 0xAA, 0xBF, 0x6D, 0x7A, 0x4C, 0x05, 0xF9, 0xBA, 0x47, 0xA5, 0xCC, 0xE1, 0xB8, 0x11, 0x0D, 0x6B, 0x14, 0x40, 0xA7, 0x91, 0x80, 0x36, 0x66, 0x14, 0x99, 0x07, 0x04, 0x4C, 0x33, 0x57, 0x34, 0xB4, 0x00, 0xD7, 0xFE, 0x96, 0xD9, 0xD3, 0xA0, 0x32, 0x64, 0xF1, 0x5B, 0x69, 0x8E, 0x69, 0x4E, 0xF5, 0x6B, 0x97, 0xCA, 0xDE, 0x2F, 0x51, 0x31, 0x5C, 0x8E, 0x3D, 0xEE, 0x5E, 0xF6, 0x51, 0x9F, 0x3D, 0x6D, 0xDA, 0x05, 0x68, 0xEE, 0x76, 0x04, 0xE8, 0x69, 0x28, 0x60, 0xBE, 0xCF, 0x97, 0xC2, 0xFD, 0x44, 0x6D, 0xBF, 0xDD, 0xBC, 0x93, 0xBE, 0x77, 0x04, 0x9A, 0x7F, 0x82, 0xAC, 0x76, 0x55, 0x90, 0xAF, 0x47, 0xBB, 0x8F, 0x82, 0x15, 0x60, 0xF6, 0x38, 0x2E, 0x8C, 0x4B, 0x6C, 0x83, 0x1B, 0xF1, 0x34, 0xC4, 0x1B, 0x03, 0xA1, 0x80, 0xE7, 0xE3, 0x20, 0x1B, 0x00, 0x2B, 0x20, 0x06, 0x44, 0x75, 0xD0, 0x1C, 0xD9, 0x26, 0xAA, 0x09, 0x1A, 0xB4, 0x86, 0x2C, 0xE0, 0xAE, 0x75, 0xBC, 0x77, 0x59, 0x47, 0x4D, 0x21, 0x1C, 0x5B, 0x04, 0xEE, 0x51, 0xA9, 0x6F, 0xBA, 0x7B, 0xEE, 0x02, 0x3E, 0xA9, 0xFB, 0xD9, 0xDE, 0xA5, 0x31, 0x32, 0x12, 0x87, 0x01, 0x3A, 0x00, 0x3B, 0x10, 0xA3, 0x2E, 0x9D, 0x7F, 0x3D, 0x7D, 0x98, 0xEE, 0x1B, 0xA0, 0x1A, 0xF2, 0xD3, 0x95, 0xA4, 0xBA, 0xC6, 0x6F, 0x61, 0xBB, 0xEA, 0xC6, 0x05, 0x9C, 0x71, 0x8A, 0x63, 0xC0, 0xAB, 0x91, 0x40, 0x10, 0x90, 0xE7, 0x79, 0xDA, 0x0E, 0x60, 0xD5, 0xC8, 0xC6, 0x01, 0x24, 0x1B, 0x0A, 0xA8, 0x00, 0x39, 0x47, 0x8E, 0x80, 0xCB, 0x85, 0xCB, 0x0D, 0x9A, 0x7F, 0xA5, 0x02, 0xEA, 0x8E, 0x2B, 0x6E, 0x89, 0x61, 0x3C, 0xBA, 0x9C, 0x89, 0x40, 0x04, 0xAF, 0xA0, 0x65, 0x2C, 0x3D, 0x60, 0x9C, 0x97, 0x66, 0x63, 0xDE, 0x61, 0x0A, 0x05, 0x8A, 0xF7, 0x73, 0xC2, 0x01, 0x5C, 0x19, 0x63, 0xEE, 0xED, 0x6B, 0x3A, 0x03, 0x56, 0x6B, 0xB1, 0x5F, 0x95, 0xD1, 0x92, 0x8E, 0xDD, 0x4C, 0x87, 0xF6, 0x56, 0x13, 0xBC, 0x7D, 0xF5, 0xA6, 0xD2, 0x59, 0x05, 0x04, 0x01, 0x2E, 0x0D, 0x6A, 0x24, 0x50, 0xF3, 0x3F, 0x04, 0x60, 0xD5, 0x78, 0x76, 0x3F, 0x8A, 0xE7, 0xED, 0xA9, 0x80, 0x5B, 0x07, 0x2D, 0x91, 0xB4, 0x2C, 0x5A, 0x3E, 0x6E, 0xD2, 0x82, 0x86, 0x57, 0xAA, 0x5E, 0xD0, 0xA6, 0xC6, 0x59, 0x3D, 0x55, 0x2F, 0x33, 0x09, 0x85, 0x04, 0xEE, 0x9B, 0x84, 0xCC, 0xE5, 0x84, 0xA6, 0xF7, 0x78, 0xA8, 0x07, 0x08, 0x03, 0xCA, 0xA6, 0x5B, 0x0D, 0x40, 0xCC, 0xAA, 0xE3, 0xA2, 0xB7, 0xD9, 0x95, 0xA7, 0xF8, 0xE1, 0x9D, 0xD5, 0x9F, 0x6A, 0x52, 0xFD, 0x84, 0x1F, 0xF4, 0x8E, 0xB2, 0x97, 0x00, 0xD4, 0x87, 0x12, 0x4F, 0x40, 0x0E, 0x70, 0xBC, 0x41, 0x0D, 0x01, 0xA8, 0xA1, 0x0E, 0xD4, 0x08, 0x07, 0x4B, 0x83, 0x81, 0x13, 0x4F, 0x3B, 0x0C, 0x03, 0xD9, 0x97, 0x93, 0xFB, 0xF2, 0x2C, 0xC4, 0x25, 0x26, 0x09, 0x89, 0xA4, 0x25, 0x73, 0xB5, 0xF0, 0x34, 0x63, 0x74, 0x9A, 0xF0, 0x49, 0x82, 0xBA, 0xB7, 0xAE, 0xA6, 0x39, 0x00, 0xEB, 0xED, 0x19, 0x90, 0x8D, 0xE9, 0x56, 0xB7, 0x8E, 0xC4, 0xD5, 0x63, 0x61, 0xC0, 0x4E, 0x23, 0xF7, 0xB8, 0x3A, 0x7D, 0x90, 0xBF, 0xB3, 0xDA, 0x85, 0x60, 0xCD, 0x24, 0xF5, 0xB4, 0x2E, 0x66, 0x47, 0xD0, 0x66, 0xA6, 0xFC, 0xC3, 0x94, 0x4E, 0x90, 0x3A, 0x47, 0x91, 0x4E, 0x00, 0x27, 0x40, 0x05, 0x10, 0x6A, 0xBC, 0x32, 0x9A, 0xBA, 0x1B, 0xE1, 0xB9, 0x00, 0xA3, 0x06, 0x03, 0x1A, 0x80, 0x58, 0x83, 0x01, 0x35, 0x60, 0x06, 0xFE, 0x7D, 0x54, 0x5E, 0x7F, 0x43, 0x2B, 0xD1, 0x75, 0x2D, 0x83, 0xA2, 0xC9, 0xD5, 0x47, 0x47, 0x41, 0xA5, 0x2D, 0x08, 0x65, 0xAB, 0xE5, 0xD4, 0xE3, 0x4C, 0x39, 0xE3, 0x26, 0xE9, 0x67, 0x2B, 0x8E, 0x8B, 0x02, 0x5A, 0x80, 0x1F, 0x60, 0x5A, 0x49, 0xE7, 0x72, 0xE2, 0xEB, 0xA2, 0x3E, 0x92, 0x04, 0xE7, 0x76, 0xB2, 0x7B, 0xAF, 0xB0, 0x1A, 0x5B, 0xF1, 0x8E, 0x72, 0x8D, 0x90, 0x82, 0x02, 0x2C, 0x5B, 0x45, 0xD7, 0x1B, 0xEA, 0x0D, 0xDB, 0x9F, 0xCC, 0x80, 0xA4, 0xFE, 0xFF, 0x0E, 0xA0, 0x04, 0x48, 0x35, 0x0E, 0x40, 0x06, 0x1C, 0x07, 0x28, 0x81, 0xB9, 0xAF, 0x3B, 0xC1, 0x89, 0xC6, 0xD1, 0x08, 0xCF, 0x92, 0xEB, 0xC0, 0xC1, 0xD2, 0x8D, 0x52, 0x94, 0x68, 0x05, 0x8E, 0x40, 0xB5, 0x89, 0x78, 0xBB, 0xED, 0xBE, 0x63, 0x8B, 0xAC, 0x4F, 0x57, 0x54, 0x36, 0x08, 0xA0, 0x6C, 0xE8, 0xFE, 0x64, 0x93, 0xF3, 0x9A, 0x1A, 0xB1, 0xCC, 0x1B, 0x71, 0x4E, 0x05, 0xB6, 0x1D, 0x14, 0x49, 0xE6, 0x30, 0xBB, 0x1A, 0x04, 0xE7, 0x8E, 0x41, 0xE3, 0x1D, 0xD3, 0xB8, 0x63, 0x0A, 0xF1, 0xAF, 0x83, 0x6E, 0x23, 0x3E, 0x2C, 0xBB, 0xFF, 0xC1, 0xF3, 0xF2, 0x3A, 0x3C, 0xB7, 0xA7, 0x7D, 0xDD, 0x32, 0xEB, 0xA0, 0xA1, 0x69, 0xA8, 0x22, 0x30, 0x3D, 0x90, 0xF9, 0xDD, 0x07, 0x48, 0x0B, 0x05, 0x06, 0xBC, 0x2D, 0x4D, 0xE4, 0xBB, 0x95, 0x3A, 0xB5, 0x40, 0x9F, 0xB1, 0xFE, 0xBF, 0xD3, 0x69, 0x1A, 0x3B, 0x81, 0xC1, 0xB5, 0x41, 0xB4, 0x5B, 0xFB, 0x26, 0x27, 0x48, 0x2B, 0x57, 0x0F, 0xB5, 0xAE, 0x89, 0x0F, 0x10, 0xBE, 0x14, 0x5F, 0xB4, 0xB6, 0x4C, 0x17, 0x2B, 0x70, 0x1A, 0x21, 0x13, 0x03, 0x46, 0x94, 0x75, 0xA6, 0x8A, 0x19, 0x70, 0x07, 0x52, 0xE7, 0xA0, 0x02, 0x70, 0x00, 0x6E, 0x40, 0x56, 0x23, 0x80, 0x78, 0x9E, 0x08, 0x2D, 0x60, 0x5E, 0x26, 0x53, 0x2A, 0x76, 0xF9, 0x8E, 0x18, 0xC6, 0xD2, 0x5E, 0x94, 0xB4, 0x2C, 0x8A, 0x45, 0x0C, 0x2B, 0xCD, 0x09, 0x6A, 0x62, 0xDC, 0x46, 0x34, 0x06, 0xDB, 0x75, 0xDF, 0xAA, 0x86, 0x78, 0x5C, 0x9F, 0x56, 0x8E, 0xB9, 0xA8, 0xDF, 0xCE, 0x32, 0x20, 0x15, 0x08, 0x6B, 0xE4, 0xEF, 0x2E, 0xAF, 0x53, 0x8A, 0x9F, 0xA5, 0x36, 0xD7, 0x19, 0xBA, 0x47, 0x23, 0x8F, 0x75, 0x6F, 0x0A, 0xDB, 0x36, 0x1A, 0x1C, 0x80, 0xD6, 0x0E, 0x65, 0xCE, 0x84, 0x5A, 0x43, 0x4E, 0xA3, 0x00, 0x4D, 0x20, 0xAE, 0xBD, 0x44, 0x43, 0x18, 0xE0, 0x02, 0x1E, 0x87, 0xCA, 0xA4, 0xE7, 0x78, 0x37, 0x17, 0x02, 0xD7, 0x2F, 0x6A, 0xAA, 0xFE, 0x1D, 0x3C, 0x44, 0xF7, 0xF3, 0xE9, 0x2A, 0xDF, 0x1A, 0x4B, 0xE5, 0x76, 0x08, 0xD3, 0x6E, 0xD4, 0xD3, 0x35, 0x21, 0x1B, 0x7C, 0x37, 0xB5, 0xED, 0x86, 0x2D, 0x0A, 0x58, 0x36, 0xF8, 0x79, 0x5A, 0xAD, 0x51, 0x40, 0xC8, 0xAF, 0x84, 0x87, 0x79, 0xA5, 0x7D, 0x94, 0xBF, 0x86, 0xAE, 0x39, 0x87, 0xBD, 0x99, 0xD6, 0x5C, 0x06, 0x97, 0x22, 0x40, 0xCD, 0xE3, 0xA6, 0x63, 0xB3, 0x3A, 0x45, 0xD7, 0x03, 0xB8, 0x00, 0x11, 0xDB, 0x2E, 0x84, 0x05, 0x08, 0xED, 0xC4, 0x92, 0xE3, 0x53, 0xE5, 0x5E, 0x6A, 0x1A, 0xFB, 0x3B, 0x65, 0xBE, 0x53, 0x3A, 0x68, 0xD6, 0xBA, 0xC1, 0x82, 0xF3, 0x91, 0xE4, 0x77, 0x21, 0x10, 0x8E, 0x76, 0x59, 0x74, 0xFC, 0xEC, 0x44, 0x3D, 0x1A, 0x10, 0xA8, 0x65, 0x27, 0x2E, 0x04, 0xFC, 0x06, 0x8D, 0x66, 0x19, 0x8D, 0x0E, 0xF0, 0xE3, 0xB0, 0x1C, 0xD5, 0x20, 0xC0, 0x65, 0xA3, 0xCE, 0xB3, 0xC4, 0xE6, 0x27, 0x74, 0xDF, 0x6E, 0x13, 0x2E, 0x8F, 0xE5, 0x45, 0xFE, 0xE3, 0x8E, 0x53, 0x4F, 0x56, 0x2D, 0xE7, 0xA4, 0xF3, 0x64, 0xC7, 0x8A, 0xF6, 0xA1, 0x56, 0x18, 0x70, 0x01, 0x92, 0x1B, 0x02, 0x44, 0x02, 0x5E, 0x0D, 0x03, 0x10, 0xDE, 0xF8, 0xFB, 0x7C, 0x42, 0x75, 0x34, 0x35, 0xF0, 0x7A, 0x2F, 0xFA, 0x13, 0x8A, 0x25, 0x26, 0x0A, 0xE7, 0x0B, 0x4C, 0x67, 0x56, 0x57, 0xCB, 0x15, 0x9D, 0x18, 0x5E, 0x7B, 0x80, 0x5D, 0x9F, 0xFB, 0x7A, 0x4E, 0x19, 0x62, 0x5A, 0x61, 0x0B, 0xB0, 0xC7, 0x78, 0x5F, 0xAA, 0x91, 0xDB, 0xC1, 0x8D, 0xEE, 0x2D, 0x21, 0x3B, 0x4C, 0xAB, 0xF1, 0x53, 0xFF, 0xEE, 0x2E, 0xA3, 0x55, 0x77, 0x5D, 0x53, 0x01, 0x09, 0x20, 0xCE, 0x56, 0xAE, 0x33, 0x05, 0xAA, 0x57, 0x0C, 0x27, 0xA0, 0x07, 0x30, 0x01, 0xD2, 0xB6, 0x07, 0x8D, 0x37, 0x2C, 0x01, 0x75, 0x80, 0x0F, 0x70, 0x04, 0x20, 0x05, 0x22, 0x3B, 0x68, 0x81, 0x72, 0x32, 0x77, 0x6B, 0x72, 0x15, 0x74, 0x6E, 0xA9, 0x70, 0xB6, 0xA1, 0xC7, 0x20, 0x28, 0xD1, 0x69, 0x65, 0x7C, 0x95, 0xF9, 0xDE, 0xAB, 0xE7, 0x3C, 0x97, 0x8F, 0x2A, 0x30, 0x01, 0x7A, 0x00, 0x4E, 0x80, 0x04, 0x38, 0x0C, 0xF0, 0xCF, 0x74, 0x13, 0x8B, 0x3A, 0x67, 0x1D, 0x6C, 0xBB, 0x99, 0xEB, 0x62, 0x3A, 0x0B, 0x2E, 0x7E, 0xCA, 0xC8, 0xFC, 0x4C, 0xBF, 0x4C, 0x3E, 0x6C, 0xCA, 0x08, 0xD1, 0xC8, 0x0E, 0x61, 0x5E, 0x99, 0xAF, 0x43, 0x80, 0x14, 0x30, 0x32, 0x56, 0x1C, 0x0D, 0x03, 0x4E, 0x3E, 0xF2, 0xEC, 0x05, 0xA4, 0xCD, 0xF0, 0x6D, 0x07, 0x0D, 0x87, 0xB1, 0x39, 0xF7, 0x1C, 0x2B, 0x8C, 0xE2, 0x1D, 0xE9, 0xA2, 0x7D, 0xE0, 0xA2, 0x4C, 0x40, 0x25, 0x61, 0xA4, 0x9E, 0x76, 0xB6, 0x3B, 0xDE, 0x6C, 0x77, 0xCD, 0xEC, 0xB8, 0xCC, 0xC2, 0x69, 0x58, 0x00, 0x52, 0x00, 0x25, 0x70, 0x96, 0xF9, 0xCC, 0xDC, 0xA9, 0xE6, 0x72, 0x13, 0x8D, 0xE9, 0x2E, 0xCF, 0x91, 0x86, 0x19, 0x4D, 0xC7, 0xDB, 0xC6, 0x19, 0xEB, 0xE1, 0x41, 0xAD, 0x12, 0xDF, 0x99, 0xDB, 0xA3, 0x67, 0xEE, 0x07, 0x64, 0x80, 0x34, 0x4C, 0xF6, 0x41, 0x8D, 0x14, 0x10, 0x6A, 0x68, 0xE3, 0x00, 0xEC, 0x0D, 0xD9, 0xDF, 0x12, 0xF3, 0x22, 0x28, 0x74, 0xC8, 0xF8, 0xDC, 0xD6, 0xF8, 0x4F, 0x10, 0xF6, 0x7C, 0x34, 0x2A, 0x33, 0x7E, 0xB0, 0x13, 0xE8, 0x15, 0x38, 0xDE, 0x76, 0x6E, 0xF0, 0x5D, 0xF7, 0x7F, 0x24, 0x6E, 0xE5, 0x6F, 0x1E, 0x4D, 0x77, 0x4D, 0xCC, 0xE8, 0xD1, 0x4C, 0x55, 0xC0, 0x75, 0xD6, 0xDD, 0xB2, 0xA3, 0x44, 0xBB, 0xD8, 0xA8, 0xEB, 0x2C, 0x55, 0x33, 0xE9, 0x50, 0x4C, 0xEC, 0xA6, 0x4D, 0x31, 0x14, 0x90, 0xC6, 0x18, 0x22, 0x71, 0x01, 0x69, 0x5B, 0x50, 0x4E, 0xFD, 0xF1, 0x3E, 0x92, 0x11, 0x8F, 0x02, 0xA4, 0x00, 0x8B, 0xC6, 0xEB, 0x76, 0x64, 0xCF, 0xB7, 0x08, 0x30, 0x4D, 0x43, 0x33, 0x43, 0x65, 0x0A, 0x2F, 0x11, 0xAD, 0x3F, 0x89, 0xF9, 0x1E, 0x88, 0x02, 0xF7, 0x66, 0x56, 0xD2, 0x43, 0xD8, 0xC9, 0xE8, 0xE5, 0x50, 0x5E, 0x2F, 0x02, 0x5F, 0x3E, 0x8B, 0xAB, 0x2F, 0x21, 0xA7, 0x9D, 0x2A, 0x00, 0x39, 0xAF, 0xC1, 0x67, 0xC3, 0xB7, 0xD4, 0xF9, 0xBC, 0xE0, 0xD9, 0x56, 0x2E, 0x12, 0xDF, 0x8A, 0xF7, 0xC2, 0x7C, 0xD1, 0x80, 0x99, 0xBB, 0x75, 0x5A, 0x1D, 0xDC, 0xAB, 0x21, 0x7B, 0x35, 0x8C, 0xC6, 0xF4, 0xBD, 0x3B, 0x60, 0x07, 0x08, 0x9A, 0x75, 0x0B, 0xA8, 0x03, 0x21, 0x0D, 0x06, 0xBC, 0xA1, 0x8F, 0x24, 0xA9, 0xC6, 0x3C, 0xDE, 0x1D, 0x35, 0xFA, 0xA3, 0x82, 0x5B, 0x12, 0x1F, 0x4C, 0x92, 0xC5, 0xF7, 0xD7, 0x29, 0x54, 0xBB, 0xDD, 0x5A, 0x7A, 0xD9, 0xFA, 0xC5, 0x6C, 0xFD, 0x12, 0xF4, 0x25, 0xD1, 0x17, 0xE7, 0x29, 0x7C, 0x4E, 0x05, 0x5B, 0x78, 0xA7, 0x6C, 0x95, 0x00, 0xB1, 0x0D, 0x25, 0x20, 0xCF, 0x4F, 0x71, 0xFA, 0x26, 0x0C, 0xFD, 0xFA, 0xF5, 0x7A, 0xED, 0xC2, 0x4A, 0x75, 0x60, 0x7C, 0xCE, 0x00, 0x1D, 0x2D, 0xCF, 0xC1, 0xA8, 0x6B, 0x02, 0xF6, 0xC8, 0x4D, 0xA6, 0x36, 0x0A, 0x98, 0x0C, 0x08, 0x0B, 0x60, 0x05, 0xE4, 0x01, 0x22, 0x00, 0x7F, 0xEC, 0xB0, 0x85, 0x01, 0x15, 0x20, 0xB3, 0x83, 0xC6, 0xB0, 0xCD, 0x08, 0x6F, 0x15, 0x29, 0xFE, 0x94, 0x86, 0x62, 0x6C, 0x1B, 0x9C, 0x5B, 0x3F, 0x11, 0x01, 0x75, 0x21, 0x9C, 0xA5, 0x5C, 0xA7, 0x4D, 0x08, 0x09, 0xDC, 0x35, 0x23, 0x2B, 0x57, 0x7A, 0xD7, 0x47, 0x1F, 0xA9, 0x11, 0xD6, 0x38, 0x80, 0x17, 0x10, 0xBA, 0x92, 0xF4, 0xBD, 0x81, 0xCC, 0x8C, 0x23, 0x73, 0xDF, 0x92, 0xFB, 0xDD, 0xC6, 0xF2, 0xD7, 0xC3, 0x68, 0x6A, 0x2E, 0xE7, 0x67, 0x38, 0x96, 0xD7, 0x3E, 0xEA, 0xCC, 0xA3, 0x74, 0x1D, 0x9F, 0xC6, 0x33, 0x09, 0x30, 0x01, 0x82, 0x80, 0xEA, 0x34, 0x13, 0x3B, 0x10, 0xD3, 0xCE, 0x2D, 0x0D, 0x1E, 0x9F, 0x2A, 0xC0, 0x13, 0xB0, 0x46, 0xCC, 0x8F, 0xC4, 0x1D, 0x33, 0xB9, 0x67, 0x9A, 0x9B, 0xE5, 0x80, 0x12, 0x12, 0x5A, 0xAD, 0xD2, 0x7B, 0xB7, 0x54, 0x24, 0x63, 0x8C, 0xF1, 0x82, 0x13, 0x59, 0x46, 0x6E, 0x41, 0xCF, 0x8D, 0xDD, 0xEA, 0x3D, 0x3A, 0x4C, 0xAE, 0x9E, 0x1B, 0xDE, 0xD0, 0xFD, 0x29, 0x9E, 0x19, 0xB0, 0x91, 0x96, 0x3D, 0x7D, 0x47, 0x3F, 0xD6, 0x98, 0x81, 0xF4, 0x71, 0xF2, 0x19, 0x99, 0xB4, 0x00, 0x58, 0x81, 0x43, 0x93, 0x71, 0x03, 0xD2, 0x1B, 0xD4, 0x48, 0xA0, 0xE6, 0x3B, 0xDF, 0x06, 0xF7, 0x00, 0x82, 0x1B, 0xD1, 0xF0, 0x86, 0x36, 0x02, 0xA8, 0x1E, 0xFA, 0xE1, 0x09, 0x9A, 0x76, 0x76, 0x53, 0xBF, 0xB3, 0xA9, 0x46, 0x7C, 0x05, 0x03, 0x32, 0xC1, 0xCC, 0x68, 0x3A, 0xEA, 0xDC, 0xFD, 0x43, 0x3B, 0x8F, 0xFB, 0x9D, 0xAF, 0xA0, 0xA5, 0x4C, 0xD0, 0x46, 0x98, 0x24, 0x7A, 0x35, 0xBD, 0x79, 0xC6, 0x68, 0x24, 0x37, 0x72, 0x0F, 0x90, 0x58, 0x4D, 0xEC, 0x7E, 0x3B, 0xB2, 0x23, 0x30, 0x50, 0x26, 0x04, 0xF0, 0x29, 0x3B, 0x06, 0x18, 0xDF, 0x44, 0xBE, 0xEA, 0x00, 0xD6, 0x50, 0x01, 0x9C, 0x81, 0x10, 0x20, 0x1B, 0x35, 0xA1, 0x67, 0x80, 0x1E, 0xFD, 0x8D, 0x48, 0xA0, 0xAC, 0xF1, 0x7E, 0x92, 0xC1, 0x63, 0xD4, 0x32, 0x2F, 0x02, 0x9B, 0x9E, 0xC5, 0x6E, 0xFE, 0x22, 0x1C, 0x39, 0x98, 0x21, 0x33, 0xA9, 0xDA, 0xF9, 0x17, 0x6A, 0x31, 0x48, 0xEE, 0x24, 0x39, 0x2D, 0x51, 0x8E, 0x3C, 0x8F, 0x56, 0x02, 0xCF, 0x4D, 0x6D, 0x82, 0x66, 0x05, 0x54, 0x23, 0x03, 0x88, 0x03, 0x78, 0x23, 0x73, 0xCF, 0xA0, 0x57, 0x4E, 0x22, 0x66, 0x3F, 0x2E, 0xD5, 0xB0, 0xC6, 0xB1, 0xED, 0xFD, 0xE4, 0xFD, 0x45, 0xE9, 0xC5, 0x31, 0x53, 0x5F, 0x7C, 0x3A, 0x4C, 0x01, 0x58, 0x02, 0xA9, 0xFB, 0x97, 0x17, 0x01, 0xDC, 0x80, 0xA4, 0x86, 0x35, 0xBC, 0x11, 0x8F, 0x06, 0x05, 0x03, 0xA2, 0x1D, 0x34, 0x7F, 0x0D, 0x69, 0x60, 0xCF, 0xD5, 0x3E, 0x82, 0x47, 0xE5, 0xDB, 0xEE, 0x6A, 0x6E, 0x0B, 0xEC, 0x2D, 0xF8, 0xCC, 0x10, 0x01, 0x7E, 0x54, 0x47, 0x75, 0x35, 0x6E, 0x5F, 0x9B, 0x3D, 0x88, 0x39, 0xCC, 0x81, 0x70, 0xBF, 0xC2, 0xB5, 0xC1, 0xC0, 0x75, 0xC8, 0xAA, 0x5E, 0x29, 0xAB, 0x8F, 0x1F, 0x0F, 0x0D, 0x06, 0x84, 0x05, 0x70, 0x6D, 0x14, 0x10, 0xD1, 0x13, 0xD3, 0x07, 0xE0, 0x04, 0x34, 0x00, 0x4B, 0x20, 0x14, 0x28, 0x42, 0x03, 0xED, 0x39, 0x00, 0x15, 0xA0, 0x0C, 0x38, 0x01, 0x71, 0x1A, 0x05, 0x64, 0x6E, 0x6D, 0x48, 0x72, 0x40, 0x0E, 0x30, 0x9D, 0x1C, 0x11, 0x5F, 0x2D, 0xAA, 0x44, 0xD0, 0xD4, 0xCD, 0x35, 0xF7, 0x75, 0x64, 0x26, 0xCB, 0x70, 0x74, 0x4F, 0x81, 0xAF, 0x47, 0x26, 0x2E, 0x97, 0x99, 0x6B, 0x8E, 0xCC, 0xED, 0x19, 0xF7, 0x9C, 0x8B, 0x3A, 0x33, 0xA0, 0x07, 0x10, 0x05, 0xE8, 0x4D, 0x79, 0xD4, 0xEE, 0xC9, 0xCA, 0x9C, 0x4B, 0xEA, 0x23, 0xE4, 0x6E, 0xFD, 0x7A, 0x75, 0x80, 0xFB, 0xB5, 0x9C, 0x07, 0x10, 0x06, 0xA6, 0x92, 0xCA, 0x79, 0x6F, 0x1E, 0x53, 0x3C, 0xDB, 0xE2, 0x67, 0xA5, 0x3B, 0x51, 0x24, 0x05, 0xC4, 0xD4, 0xE3, 0x1A, 0x66, 0x0D, 0x02, 0x44, 0x81, 0x13, 0xF3, 0x78, 0x6C, 0x6B, 0x16, 0x97, 0x0E, 0x5A, 0xA2, 0x7D, 0x97, 0x31, 0x51, 0x4C, 0x2C, 0xBB, 0x3D, 0x0D, 0xED, 0x1D, 0x7C, 0x2A, 0xA0, 0x30, 0x2F, 0x08, 0x9A, 0x08, 0xAD, 0x29, 0x82, 0xA0, 0x47, 0xD1, 0x8A, 0x9F, 0x44, 0xA3, 0xD0, 0xE3, 0x51, 0x7C, 0x1E, 0x8F, 0x62, 0x05, 0xAA, 0x63, 0x97, 0xD6, 0x41, 0xF3, 0x6D, 0xB0, 0x40, 0x67, 0xDB, 0x85, 0xD3, 0x84, 0xB0, 0x00, 0x3F, 0x8D, 0x09, 0x6F, 0xDC, 0x22, 0xDD, 0x76, 0xAA, 0x2C, 0x7E, 0x8E, 0x1F, 0x05, 0x54, 0xEC, 0xB6, 0x19, 0x67, 0x20, 0x07, 0x07, 0x08, 0x06, 0xCC, 0x01, 0x55, 0xC0, 0x1A, 0x35, 0xA7, 0xB4, 0xFA, 0x82, 0x96, 0xA2, 0x9F, 0x1A, 0x18, 0x9D, 0x5D, 0x2A, 0x36, 0x0A, 0xFC, 0x8B, 0x51, 0xE1, 0xDC, 0xC0, 0x84, 0x15, 0xC2, 0x73, 0x3A, 0x7B, 0x57, 0x5A, 0x3D, 0xA5, 0x62, 0x02, 0x54, 0x01, 0x11, 0x80, 0x02, 0x38, 0xDE, 0x60, 0xE0, 0x5A, 0xA4, 0x8C, 0xEA, 0xC4, 0xD8, 0x7B, 0x3E, 0x72, 0xD5, 0x7C, 0xB6, 0xEB, 0x82, 0x1E, 0xE0, 0x38, 0xC0, 0x53, 0xFB, 0xBA, 0x23, 0xEC, 0x1D, 0x8A, 0xD4, 0x7D, 0xB4, 0xF5, 0xD1, 0xFF, 0x66, 0x40, 0x0A, 0x88, 0x7C, 0x8C, 0x52, 0xB3, 0x61, 0x80, 0x1E, 0x80, 0x0A, 0x38, 0x02, 0x90, 0x02, 0xC1, 0x08, 0x5A, 0x76, 0x87, 0xF8, 0xB1, 0x2F, 0xD7, 0x51, 0x6A, 0x7F, 0xF2, 0x6B, 0x0D, 0xA7, 0x6E, 0xB4, 0xA2, 0xE5, 0x3B, 0x5A, 0x82, 0x79, 0x15, 0x4A, 0xD9, 0x3D, 0x7D, 0xF5, 0x64, 0x86, 0x92, 0x76, 0x2B, 0xB4, 0x5B, 0xC3, 0x01, 0x35, 0x80, 0x1F, 0xC5, 0x2F, 0x99, 0x32, 0xF2, 0x64, 0xA8, 0xA7, 0xAB, 0x2E, 0x27, 0xDD, 0xED, 0x4F, 0x39, 0xD8, 0x00, 0xD1, 0x49, 0x22, 0x7E, 0x70, 0x59, 0xDA, 0x72, 0x72, 0xA7, 0x62, 0x75, 0xCE, 0x7C, 0xDE, 0x41, 0x23, 0xA0, 0xAC, 0x63, 0x97, 0xC0, 0xC4, 0xE7, 0x38, 0x20, 0xD6, 0x60, 0x80, 0x6A, 0x4B, 0x3D, 0xA7, 0x03, 0x35, 0xE1, 0xAD, 0x0E, 0x1A, 0xB5, 0x59, 0x59, 0x27, 0xD0, 0x4A, 0x21, 0x6D, 0xC8, 0x02, 0x45, 0xFD, 0x92, 0x79, 0xCD, 0x8D, 0xAA, 0x12, 0x9A, 0x55, 0x4D, 0x56, 0x53, 0x42, 0xF0, 0xA3, 0xA8, 0x3F, 0x13, 0x11, 0xC6, 0xBB, 0x03, 0x52, 0x03, 0x60, 0xD9, 0x83, 0x03, 0x51, 0xCF, 0x64, 0xCB, 0xAC, 0x18, 0x79, 0x25, 0x9B, 0x6C, 0x3E, 0x01, 0xC6, 0x00, 0xD3, 0x92, 0x3B, 0x2F, 0x3B, 0xBF, 0xF2, 0xB3, 0xDC, 0x22, 0xA6, 0xD2, 0x5E, 0x69, 0xCA, 0x40, 0xC8, 0x8E, 0x1D, 0x3B, 0xE0, 0x0C, 0xE4, 0x40, 0x80, 0x08, 0xC0, 0xAD, 0xC1, 0x40, 0x4C, 0x40, 0xA5, 0x83, 0x36, 0x42, 0x43, 0x3D, 0x49, 0x55, 0x70, 0x40, 0x52, 0xD7, 0x3F, 0x5A, 0xE8, 0x53, 0x26, 0xBF, 0xD5, 0x5C, 0x45, 0x3A, 0xCD, 0x8C, 0xD0, 0x3D, 0xEA, 0xFF, 0x7C, 0x3C, 0x6B, 0xA5, 0x1B, 0x91, 0x20, 0x5A, 0xB0, 0x03, 0x88, 0x00, 0x54, 0x80, 0x8C, 0xDD, 0xE0, 0x48, 0xE9, 0x5D, 0x1D, 0x97, 0xD9, 0x91, 0xBD, 0x41, 0x1B, 0x2A, 0xC0, 0xEC, 0x38, 0xD3, 0x75, 0x3A, 0x3A, 0xF0, 0x93, 0xE1, 0x99, 0x5A, 0x68, 0x3E, 0xFE, 0xA5, 0xC2, 0x80, 0x2B, 0x90, 0xD5, 0x87, 0xE8, 0x04, 0xA8, 0xC1, 0x0E, 0x88, 0x02, 0x1A, 0x80, 0x1F, 0x20, 0x1A, 0xA9, 0x1D, 0x34, 0xE9, 0x99, 0xB4, 0xFC, 0xCE, 0x67, 0x14, 0xBF, 0x3D, 0xAD, 0x3A, 0xC9, 0x41, 0xF0, 0x8C, 0x85, 0xAA, 0x12, 0x6A, 0x04, 0x15, 0xB1, 0xFC, 0xA2, 0xEC, 0x35, 0xF1, 0x21, 0x02, 0x2A, 0x9E, 0x5D, 0xAC, 0x1E, 0x6B, 0x7F, 0x6F, 0xCC, 0xB7, 0xCC, 0xC5, 0x3E, 0xE7, 0x45, 0xF9, 0xE8, 0xE4, 0xAB, 0xAC, 0x1E, 0x0C, 0xAD, 0xED, 0xB5, 0x95, 0xFC, 0x48, 0x61, 0x5D, 0xB3, 0xF2, 0x98, 0x1B, 0xE4, 0x53, 0x8D, 0x9E, 0x19, 0x74, 0x01, 0x2C, 0x80, 0xAC, 0xED, 0x04, 0x62, 0xD2, 0x30, 0x40, 0x13, 0x10, 0x03, 0x38, 0x01, 0x25, 0x20, 0xAD, 0x83, 0xA6, 0xB8, 0x24, 0x14, 0xB7, 0x42, 0x0C, 0xA1, 0x60, 0x10, 0x89, 0x61, 0xBD, 0x16, 0xA7, 0x16, 0x8F, 0x4E, 0x02, 0x2B, 0x36, 0xE9, 0x38, 0x23, 0x9A, 0xF3, 0x88, 0x68, 0x2E, 0x4B, 0xBB, 0xFC, 0xFB, 0x5B, 0x47, 0xA3, 0x18, 0x70, 0x03, 0xC4, 0x81, 0x13, 0x00, 0xCD, 0xF3, 0x35, 0xEF, 0xFE, 0xC7, 0xD7, 0x3E, 0x1D, 0xE0, 0x18, 0x3D, 0x87, 0x47, 0x51, 0xED, 0xEC, 0x49, 0xEB, 0x8C, 0x79, 0xE8, 0xFA, 0x40, 0x28, 0xBB, 0x26, 0xEE, 0xD1, 0x67, 0x62, 0x05, 0x84, 0x00, 0xCF, 0x3D, 0x3B, 0x2C, 0xD6, 0xA8, 0x86, 0x00, 0xDC, 0x20, 0x03, 0x84, 0x80, 0xA4, 0x0E, 0xDA, 0x28, 0x0D, 0xF5, 0xF4, 0xA3, 0x40, 0x87, 0xF4, 0xA4, 0xC0, 0x7A, 0x96, 0x7B, 0x99, 0x17, 0xF5, 0x31, 0xB4, 0x60, 0x9A, 0x50, 0xBE, 0x44, 0x73, 0xE4, 0xB9, 0x79, 0x92, 0xAF, 0xA7, 0x8C, 0xEE, 0x45, 0x80, 0xCE, 0xBF, 0x1A, 0xB0, 0xB5, 0x41, 0xBF, 0x9D, 0x7F, 0x0E, 0x02, 0x7E, 0xBD, 0x17, 0x4A, 0x81, 0x30, 0xC0, 0x0B, 0x48, 0x7B, 0x93, 0xB2, 0xBF, 0xDA, 0x7D, 0x77, 0x02, 0xCE, 0xD1, 0x5F, 0x50, 0xD1, 0x1A, 0x55, 0xAF, 0xE5, 0xE6, 0x59, 0x3D, 0xB0, 0xC8, 0x06, 0xA8, 0x03, 0x66, 0x80, 0x3B, 0x10, 0x0A, 0xA4, 0xF7, 0xF8, 0xA2, 0x02, 0x74, 0x00, 0x99, 0x2D, 0xCD, 0xD7, 0x45, 0x20, 0x89, 0x20, 0xD2, 0x24, 0x8E, 0x59, 0x6C, 0xE2, 0xEE, 0x96, 0x49, 0x1C, 0x54, 0xBA, 0x4B, 0x39, 0xC2, 0x46, 0xAE, 0xFB, 0x19, 0xF2, 0x99, 0xB2, 0xD3, 0x54, 0x49, 0xA6, 0x92, 0x66, 0x8D, 0x03, 0xA8, 0x01, 0xC4, 0xE3, 0x40, 0xD4, 0xA0, 0x5F, 0x4D, 0xA9, 0xFE, 0xE6, 0x7B, 0x83, 0x11, 0x6C, 0x4E, 0xE0, 0x0C, 0x1C, 0xA0, 0x02, 0xE4, 0x00, 0x11, 0xBF, 0xF6, 0xE4, 0xB8, 0x42, 0x55, 0x34, 0x35, 0xF1, 0xF1, 0x70, 0x2E, 0x20, 0x3B, 0xAE, 0x24, 0x80, 0x1E, 0xC0, 0x09, 0x88, 0x46, 0x9E, 0xAD, 0xD8, 0x71, 0xF8, 0x1F, 0xDB, 0x9D, 0xCE, 0xD3, 0x19, 0xFD, 0xCA, 0x56, 0xDC, 0xD2, 0x2A, 0xBF, 0x77, 0xA8, 0xA7, 0xB5, 0x2E, 0xA2, 0xE1, 0x4F, 0x76, 0x6F, 0x99, 0x76, 0xC5, 0x4F, 0x1B, 0xF5, 0xD3, 0x4E, 0x4B, 0x7B, 0xB4, 0xD3, 0xF2, 0x9E, 0x18, 0x7C, 0xB7, 0xB3, 0xDA, 0x01, 0x68, 0x12, 0x57, 0x0A, 0x68, 0x02, 0xD6, 0xFB, 0xB8, 0x4F, 0x1F, 0xD0, 0x74, 0xF2, 0xF9, 0x6E, 0x12, 0x38, 0x3A, 0x0D, 0x0B, 0x80, 0x31, 0xC0, 0x09, 0x58, 0xC7, 0x65, 0x7C, 0x76, 0x46, 0xB6, 0xB0, 0x7A, 0xA1, 0x65, 0x6E, 0x71, 0x47, 0x4D, 0x20, 0xB5, 0x17, 0x5A, 0xC3, 0x1B, 0x69, 0x40, 0x49, 0x43, 0x1B, 0xB3, 0xD0, 0x18, 0x20, 0x03, 0x7C, 0x4E, 0x69, 0xD3, 0xC2, 0xD1, 0xFB, 0xE8, 0x4C, 0xFC, 0x1D, 0x6F, 0xD7, 0x7F, 0xC3, 0x04, 0xF7, 0xE8, 0x4C, 0x9A, 0xE3, 0x98, 0x53, 0x74, 0xC5, 0x59, 0xF1, 0x88, 0x21, 0x66, 0xF7, 0x84, 0xB1, 0xB6, 0x22, 0xF4, 0xDE, 0x00, 0xC9, 0x80, 0x3D, 0xB6, 0xE0, 0x21, 0x8D, 0xFE, 0x62, 0x2E, 0xC1, 0x9F, 0x76, 0xD4, 0x11, 0x74, 0x3F, 0x02, 0x05, 0x88, 0x01, 0x46, 0x80, 0x8F, 0x79, 0xA9, 0xFD, 0x5C, 0x75, 0xB5, 0x1F, 0x32, 0xEF, 0xF0, 0xCC, 0x33, 0x9A, 0xFD, 0x9D, 0xDF, 0x43, 0x03, 0x88, 0x02, 0x6E, 0x40, 0x56, 0xCF, 0x32, 0x0A, 0x40, 0x0D, 0x56, 0x40, 0x19, 0xF0, 0x03, 0x84, 0x00, 0x35, 0x87, 0xB4, 0xBA, 0x31, 0x63, 0x42, 0x0D, 0xC0, 0xBC, 0x7B, 0x12, 0x0E, 0xB4, 0x72, 0x58, 0xB0, 0xBD, 0x41, 0x9E, 0x81, 0xE0, 0x6B, 0x62, 0xE7, 0xBF, 0x1A, 0x7D, 0xD7, 0x09, 0x70, 0x3D, 0x94, 0xA8, 0x9B, 0x3C, 0x62, 0x99, 0x0E, 0x44, 0x00, 0xCE, 0x40, 0xD2, 0x8C, 0x2B, 0x4E, 0x83, 0xE3, 0x56, 0xD6, 0x57, 0x01, 0x4C, 0x01, 0x27, 0x20, 0x18, 0x48, 0x9D, 0x01, 0x8D, 0x5F, 0xEB, 0x77, 0xAF, 0x64, 0x8E, 0xDB, 0xF9, 0x43, 0x1D, 0xE4, 0x93, 0x80, 0x31, 0x90, 0xB4, 0x5D, 0x2F, 0x38, 0x01, 0x69, 0xA8, 0x03, 0x16, 0x80, 0x17, 0x90, 0x01, 0x60, 0xD5, 0xF1, 0x3D, 0xA3, 0x15, 0xBA, 0x0F, 0x0E, 0xC5, 0x97, 0xAC, 0xF5, 0xC8, 0x3F, 0xD9, 0x5E, 0xB2, 0xD0, 0xE8, 0xC3, 0xB6, 0x7F, 0x8C, 0xDA, 0x66, 0x0F, 0x13, 0x04, 0x95, 0xB2, 0xA7, 0xD7, 0xDF, 0xE3, 0x86, 0xEA, 0x53, 0x1D, 0x50, 0x80, 0x1E, 0x01, 0x1C, 0x2F, 0xC0, 0xB8, 0x71, 0xB3, 0x49, 0xFB, 0xDE, 0xC9, 0x83, 0x99, 0x0C, 0x52, 0x80, 0xE4, 0x19, 0xF8, 0x0A, 0x20, 0x57, 0xF3, 0xCB, 0xD2, 0xA0, 0xE4, 0x69, 0xCB, 0xD8, 0x2F, 0xD7, 0xE3, 0x00, 0x17, 0xE0, 0xB2, 0x9B, 0x92, 0xC5, 0x1A, 0xB2, 0xDF, 0xDB, 0x73, 0xFC, 0xAB, 0xFB, 0x09, 0x30, 0xED, 0xA0, 0xD1, 0xB7, 0x85, 0x89, 0x15, 0x44, 0x5F, 0x8E, 0xAD, 0x01, 0x3C, 0xCD, 0xD1, 0xED, 0x15, 0x0C, 0x9E, 0xE0, 0xB2, 0xEE, 0x1A, 0xBA, 0x24, 0xF5, 0xFD, 0xBC, 0xEA, 0xF0, 0xBC, 0x67, 0x2A, 0x94, 0x9F, 0x0C, 0xC7, 0x79, 0x85, 0x4B, 0x1A, 0xF5, 0xD3, 0x57, 0xD0, 0xAB, 0xAE, 0x76, 0x6E, 0x08, 0x1F, 0x81, 0x74, 0x06, 0xB4, 0xC1, 0x0A, 0xCC, 0x7D, 0x83, 0xEC, 0x67, 0x85, 0x44, 0x7C, 0x6F, 0xDB, 0xD1, 0x17, 0xAA, 0x9C, 0xC0, 0x38, 0xE0, 0xBE, 0xC5, 0xEB, 0x46, 0x5E, 0x79, 0x5C, 0xC0, 0xCB, 0x81, 0x48, 0xC0, 0x04, 0x10, 0xDE, 0xFA, 0x76, 0x27, 0x3B, 0x68, 0xDC, 0x46, 0x10, 0x0C, 0xBF, 0xC5, 0xF4, 0x09, 0xDA, 0x34, 0xC3, 0x43, 0xD0, 0x98, 0x15, 0x83, 0x4B, 0x62, 0x5F, 0x0E, 0xC3, 0xD5, 0xD7, 0x04, 0x81, 0xC6, 0xFF, 0x61, 0xDE, 0x90, 0x37, 0x30, 0x80, 0x1F, 0x40, 0x05, 0x10, 0x6D, 0x4C, 0x76, 0xE8, 0xCA, 0xC3, 0x6C, 0x71, 0x80, 0x4C, 0x40, 0x15, 0xE0, 0x81, 0x35, 0x78, 0xDF, 0xD5, 0x2A, 0x56, 0x47, 0xCB, 0xD4, 0x1A, 0xE4, 0xEF, 0xD5, 0xFD, 0x19, 0xD4, 0xB1, 0x00, 0x32, 0x7A, 0x51, 0x11, 0xA0, 0x03, 0xDD, 0x9F, 0xC4, 0x1B, 0x02, 0x68, 0x23, 0xB9, 0x83, 0x26, 0x48, 0x62, 0x66, 0xFE, 0x09, 0x45, 0x6E, 0x3B, 0xBF, 0x97, 0x08, 0xB5, 0x80, 0xA2, 0xB7, 0xE0, 0xA7, 0x62, 0x9F, 0x42, 0xEF, 0x8B, 0x86, 0xF9, 0x9A, 0x8F, 0xB5, 0xF3, 0x04, 0xED, 0x3E, 0x6D, 0x07, 0x08, 0x02, 0xFC, 0x00, 0xB3, 0xFC, 0xAA, 0xE1, 0x0D, 0x9B, 0x2E, 0xDD, 0x8E, 0xCF, 0x5B, 0xB8, 0xE2, 0xE8, 0xC0, 0x34, 0x84, 0x1A, 0x02, 0x70, 0x01, 0x93, 0xF6, 0xB8, 0xDD, 0xBD, 0x29, 0xBF, 0x8E, 0x8D, 0xBC, 0x32, 0xDB, 0x62, 0x5B, 0x2C, 0x4D, 0x1B, 0xB7, 0x78, 0xF3, 0x66, 0x80, 0xFD, 0xB1, 0x59, 0x8A, 0xC6, 0xF9, 0xBD, 0xC4, 0xE4, 0x16, 0xEF, 0x4A, 0x5B, 0x40, 0xA6, 0xBE, 0xBA, 0x80, 0x88, 0x5D, 0xE3, 0x0B, 0x21, 0xD8, 0x03, 0x92, 0xDF, 0x92, 0x67, 0xA8, 0xB5, 0x61, 0xB3, 0x6F, 0x81, 0x5B, 0x7B, 0xFC, 0xB5, 0x68, 0x9E, 0xAF, 0x91, 0x0A, 0xED, 0x4F, 0x55, 0x80, 0x2B, 0x20, 0x53, 0xE3, 0x0C, 0xE0, 0xA6, 0xC6, 0xEA, 0x7A, 0x6B, 0xEE, 0x97, 0x44, 0x1D, 0x80, 0x65, 0x5A, 0xEA, 0x00, 0x06, 0x72, 0xEA, 0x58, 0xBB, 0x29, 0x68, 0x84, 0x20, 0x3A, 0x76, 0xB7, 0x32, 0xE3, 0x37, 0xCD, 0x3F, 0x4E, 0x40, 0xCC, 0xC0, 0x58, 0x23, 0x91, 0x3E, 0xD6, 0xE4, 0xD6, 0x10, 0x40, 0xA2, 0x91, 0x80, 0x1D, 0xA0, 0xAC, 0x83, 0x76, 0x6F, 0x03, 0xE3, 0x26, 0x8E, 0xA0, 0x1D, 0x42, 0x47, 0xC2, 0xCC, 0x21, 0x29, 0x75, 0x6F, 0x39, 0xFD, 0x81, 0x30, 0x9D, 0xAD, 0xCB, 0x7A, 0xC4, 0x73, 0x85, 0x9A, 0x2B, 0x38, 0xF1, 0xDE, 0xD0, 0xC9, 0x9F, 0xB1, 0x55, 0x05, 0xB8, 0x7E, 0x21, 0x8C, 0xAB, 0x26, 0x2C, 0x73, 0x71, 0xB0, 0x7A, 0x67, 0x2A, 0x80, 0x90, 0xC7, 0x4F, 0x40, 0x80, 0x71, 0xC1, 0x9B, 0x84, 0x97, 0xD7, 0xEF, 0x5E, 0x1E, 0xD7, 0x85, 0x67, 0x5E, 0x9B, 0xD2, 0x88, 0x7E, 0x19, 0x12, 0x01, 0xC2, 0x80, 0x1A, 0x60, 0x04, 0xF8, 0x01, 0x82, 0x81, 0x34, 0xA0, 0xC6, 0x04, 0x64, 0x1E, 0xCF, 0xB9, 0x0E, 0x40, 0xDA, 0x96, 0xBD, 0xFD, 0x77, 0xD9, 0xA1, 0xA7, 0x56, 0x84, 0x4B, 0x2F, 0x77, 0xC3, 0x90, 0x29, 0x84, 0xBD, 0x88, 0x96, 0x74, 0x9A, 0xDB, 0x73, 0xE4, 0x38, 0xB3, 0x29, 0x75, 0x44, 0xC2, 0x00, 0x0B, 0x80, 0xAF, 0xC4, 0x09, 0xA0, 0x02, 0xC8, 0xFA, 0x62, 0xDC, 0x91, 0x4B, 0x23, 0xC0, 0x65, 0x27, 0x6F, 0x2B, 0xF7, 0x54, 0x26, 0xC7, 0xB2, 0x7E, 0xA3, 0x79, 0xFD, 0xCD, 0x4A, 0xEB, 0xF5, 0xA3, 0x7D, 0xB7, 0x1C, 0x45, 0xCD, 0xB8, 0x32, 0xDD, 0xE7, 0x00, 0xA2, 0x80, 0x25, 0xE0, 0x05, 0x44, 0x00, 0x69, 0x40, 0xBD, 0x82, 0xDE, 0x02, 0xF0, 0xBC, 0x3D, 0xA3, 0xB3, 0x91, 0x89, 0x66, 0x2B, 0x52, 0x4C, 0xCB, 0x56, 0xF5, 0x28, 0x99, 0x63, 0x27, 0x85, 0x4A, 0x2B, 0x36, 0xBA, 0x6F, 0xD7, 0x93, 0xD8, 0x22, 0x7D, 0xBC, 0x3A, 0x12, 0xD6, 0x54, 0xF1, 0xE4, 0x7E, 0x14, 0x38, 0x4F, 0x6A, 0xDF, 0x14, 0x10, 0x69, 0xD4, 0x93, 0xE1, 0x9F, 0xE7, 0x33, 0xB4, 0x63, 0x41, 0xF8, 0x94, 0x0A, 0x98, 0x00, 0x7A, 0x00, 0x76, 0xC0, 0x3E, 0xF0, 0xD2, 0x45, 0xC3, 0x6E, 0xB6, 0xEC, 0xEC, 0x90, 0x76, 0x59, 0x1E, 0x70, 0x65, 0x7D, 0x69, 0x3F, 0x80, 0x27, 0x90, 0x8D, 0x92, 0x06, 0x01, 0x69, 0x0D, 0x07, 0xCA, 0xE7, 0x5E, 0xDF, 0x51, 0xEB, 0x03, 0xAC, 0x39, 0xC4, 0x94, 0x45, 0x56, 0x5E, 0x28, 0x8A, 0xBA, 0x95, 0x89, 0xBA, 0xEF, 0x15, 0x65, 0xD1, 0x23, 0xBE, 0x14, 0x73, 0xFC, 0x3C, 0x69, 0x5B, 0xE6, 0xC7, 0x27, 0x24, 0x00, 0xCA, 0x47, 0x13, 0x6C, 0xB0, 0x6C, 0x6A, 0xA4, 0x3F, 0xD9, 0x1D, 0x31, 0x76, 0x07, 0xCA, 0x00, 0x71, 0x80, 0x68, 0xE3, 0x18, 0x30, 0xE9, 0x5E, 0xA5, 0xD5, 0xDB, 0xE8, 0xB7, 0x41, 0x4A, 0xCE, 0xF6, 0x94, 0x62, 0x06, 0xCC, 0x81, 0xE2, 0xDD, 0x07, 0x64, 0xD2, 0xB0, 0x06, 0x03, 0x2A, 0x80, 0x3C, 0xEF, 0x85, 0xAC, 0x0E, 0x5A, 0xE1, 0x71, 0x23, 0x2B, 0x98, 0x7A, 0x9E, 0x84, 0x3F, 0x25, 0x1B, 0x0E, 0xCE, 0xA9, 0x63, 0x87, 0x39, 0xFF, 0x3B, 0x0E, 0xBB, 0xB4, 0x47, 0x7C, 0xE2, 0x3C, 0x95, 0x62, 0x5E, 0xB6, 0x91, 0x4B, 0xB3, 0xDC, 0x01, 0x7B, 0x64, 0xDF, 0x93, 0x1B, 0x4F, 0x92, 0x43, 0x6B, 0x52, 0xAD, 0xDB, 0x03, 0xF7, 0x78, 0xE3, 0x00, 0x4C, 0xC0, 0x74, 0x97, 0xCD, 0x20, 0xC5, 0xCC, 0xB5, 0xA4, 0xCF, 0xD6, 0xD3, 0x1D, 0x3D, 0x63, 0xB3, 0x26, 0x58, 0x02, 0x64, 0x40, 0x78, 0xDF, 0x95, 0x04, 0xB0, 0x02, 0xC2, 0x80, 0x6C, 0xDD, 0x97, 0x43, 0x8F, 0x24, 0x70, 0x02, 0xC6, 0x40, 0xFB, 0x88, 0x8F, 0x2B, 0xA2, 0x16, 0x44, 0x6E, 0xD3, 0x7D, 0xD7, 0xA2, 0xA4, 0x7A, 0x28, 0x0B, 0xCE, 0x34, 0x8A, 0xE3, 0x2D, 0x15, 0x9A, 0xD3, 0x34, 0xD7, 0xD8, 0xE2, 0xB6, 0xAC, 0x77, 0x20, 0xF9, 0x59, 0x5D, 0x06, 0x38, 0x03, 0xDA, 0xE0, 0x6C, 0x18, 0xE0, 0x33, 0x57, 0x35, 0x4A, 0xA4, 0x06, 0xCC, 0x61, 0x39, 0x0F, 0xE0, 0x0A, 0x04, 0xF0, 0x5C, 0x3B, 0xFC, 0x76, 0x24, 0x17, 0xDF, 0x31, 0xF8, 0xED, 0x54, 0x9C, 0xBE, 0xF3, 0x8C, 0x63, 0x0A, 0xC2, 0x05, 0x78, 0x02, 0x59, 0x40, 0x69, 0xC3, 0x1B, 0xDC, 0x18, 0x9B, 0x03, 0x05, 0x24, 0x3B, 0x6A, 0xD4, 0x7D, 0xAC, 0x0A, 0xED, 0x1C, 0x96, 0x3F, 0x01, 0x35, 0x21, 0xFC, 0x7B, 0xB8, 0xCC, 0x4B, 0x00, 0x35, 0xA1, 0x0C, 0xB4, 0x17, 0x43, 0x20, 0x40, 0x6E, 0xD4, 0xA4, 0x59, 0xF8, 0xCC, 0xF7, 0xE8, 0x25, 0x8D, 0x7A, 0x54, 0x7D, 0xE5, 0x9A, 0xD5, 0x03, 0x16, 0x80, 0x28, 0xF0, 0xCA, 0xE3, 0x86, 0x01, 0x2A, 0xF3, 0xF4, 0x3E, 0x51, 0x2B, 0x20, 0xAB, 0xBF, 0x65, 0x4B, 0x0D, 0xD1, 0xED, 0x92, 0x0D, 0xFF, 0x65, 0xD9, 0xF8, 0x0A, 0x18, 0xDA, 0x68, 0x15, 0x2A, 0xE0, 0x07, 0xA8, 0x9A, 0x06, 0x0D, 0x40, 0x06, 0xDE, 0x08, 0x40, 0x19, 0x30, 0x03, 0x8A, 0x3B, 0x6A, 0xDC, 0xCE, 0x04, 0xF4, 0xA7, 0xBE, 0xF7, 0x3D, 0xAD, 0x62, 0xB1, 0xB0, 0xB5, 0x44, 0x03, 0x7E, 0x30, 0xE1, 0x3E, 0xCD, 0x17, 0xFF, 0xC3, 0xC9, 0xE7, 0xD8, 0x33, 0x7C, 0x01, 0xEC, 0xDA, 0xDD, 0x92, 0x20, 0xCD, 0xC7, 0x68, 0x2B, 0x00, 0x7F, 0xE4, 0x14, 0xEA, 0x00, 0x12, 0xFB, 0x36, 0x21, 0x0E, 0x68, 0xC3, 0xCE, 0x36, 0xC1, 0xE1, 0xB3, 0x86, 0x7F, 0xF5, 0x6F, 0x2E, 0xBB, 0xA6, 0xA2, 0x3F, 0xE9, 0x08, 0x20, 0xE6, 0x05, 0x51, 0x40, 0xC8, 0xCE, 0xEA, 0x4E, 0x5E, 0xA6, 0x0A, 0xC8, 0xA7, 0xD9, 0x28, 0xFB, 0x5B, 0x74, 0x1E, 0xD0, 0xBF, 0xC3, 0x77, 0x69, 0x98, 0xC1, 0xF8, 0x3D, 0xA0, 0xE5, 0xFD, 0xEA, 0x54, 0x42, 0xA2, 0x90, 0x0C, 0x61, 0x71, 0xDE, 0xDD, 0xA3, 0xEF, 0xFD, 0x93, 0x6A, 0x5B, 0x40, 0x1D, 0x7B, 0xCC, 0xA2, 0x08, 0x30, 0x06, 0xC4, 0x1A, 0xB4, 0x83, 0xA6, 0xB7, 0x0A, 0x0A, 0x9C, 0xF3, 0x54, 0x4F, 0xE7, 0x93, 0xED, 0x27, 0x79, 0x5E, 0xD1, 0x21, 0x4B, 0xDE, 0x29, 0xEE, 0x9B, 0x93, 0xA7, 0xF9, 0x67, 0xD6, 0xC8, 0x34, 0xCC, 0x10, 0x50, 0x34, 0xA6, 0x98, 0x80, 0x38, 0xA0, 0x09, 0x38, 0x03, 0xD1, 0xA8, 0x3E, 0xA7, 0x1C, 0x06, 0x48, 0x3A, 0x68, 0xDF, 0x6B, 0x51, 0x53, 0xEC, 0x3B, 0xA4, 0x71, 0x25, 0x0E, 0xB8, 0x49, 0x18, 0xE8, 0xCA, 0x6C, 0xC9, 0x82, 0xC0, 0x7B, 0x14, 0x75, 0x4F, 0xEF, 0x13, 0x71, 0xCA, 0xDB, 0x3D, 0x3A, 0xBB, 0xD9, 0xE8, 0xCF, 0xF8, 0xE3, 0x83, 0x77, 0xCF, 0x63, 0x06, 0xA8, 0x00, 0x73, 0xE3, 0x4C, 0xD9, 0x3E, 0x78, 0x93, 0xF9, 0x0D, 0x6B, 0x10, 0x70, 0x66, 0xA2, 0x87, 0xB7, 0xBA, 0x06, 0x3B, 0x50, 0xBA, 0x6C, 0x7A, 0xA3, 0xDB, 0xCC, 0x10, 0x51, 0x9C, 0xC0, 0x74, 0x0B, 0xF4, 0xD5, 0xE4, 0xB4, 0xBB, 0x4D, 0x84, 0x09, 0xB0, 0x00, 0xC2, 0x81, 0x6A, 0x49, 0xE4, 0xC3, 0x00, 0x39, 0xC0, 0x05, 0xA8, 0x02, 0x3E, 0x41, 0xB3, 0x35, 0x49, 0xE6, 0x81, 0x9A, 0xB1, 0x1F, 0x6B, 0xEF, 0x0C, 0x6A, 0x87, 0x5B, 0xC4, 0x4E, 0xCD, 0xBA, 0x66, 0x52, 0xBF, 0x1A, 0x81, 0xBF, 0xA6, 0x34, 0xB7, 0x89, 0xAF, 0xAE, 0x35, 0x36, 0xE0, 0x05, 0x9C, 0xB3, 0x24, 0x21, 0xBC, 0xBF, 0x93, 0x12, 0xF8, 0x6B, 0x97, 0x31, 0x6D, 0x17, 0x6F, 0x9B, 0x68, 0x00, 0x46, 0x40, 0xE8, 0x36, 0xC1, 0x98, 0xD4, 0x4F, 0xE4, 0x4F, 0x0E, 0x1E, 0xF9, 0x75, 0x24, 0x5D, 0xA7, 0xF1, 0xA5, 0xDB, 0x59, 0xB4, 0xF0, 0xFA, 0xE4, 0x00, 0x52, 0x9F, 0x8C, 0x63, 0xE3, 0x7D, 0x99, 0x96, 0xF4, 0x5B, 0xD4, 0x00, 0x39, 0x80, 0x9D, 0x8E, 0x99, 0x77, 0xBF, 0x77, 0x7C, 0x07, 0x5B, 0x0F, 0x5F, 0xDE, 0x81, 0xEC, 0xD9, 0x6D, 0xAC, 0xD5, 0xE7, 0x4A, 0x81, 0xE2, 0x31, 0xFB, 0x9A, 0xC5, 0xB6, 0xF3, 0x2C, 0xB4, 0x69, 0x47, 0x38, 0x01, 0x30, 0x03, 0x44, 0x8F, 0x67, 0xA5, 0x00, 0x6E, 0x40, 0xF4, 0xB7, 0x68, 0x6E, 0xFF, 0xC4, 0x74, 0xA0, 0x02, 0x90, 0x03, 0x9C, 0x00, 0x48, 0x1B, 0x09, 0xC4, 0x0A, 0x3D, 0xE9, 0x6D, 0x24, 0x60, 0x9D, 0x53, 0x55, 0xEF, 0xF5, 0xBE, 0x9F, 0x4E, 0x35, 0xA0, 0x74, 0x2B, 0x16, 0x86, 0x34, 0xAA, 0x11, 0x0D, 0x6E, 0x1C, 0x60, 0x7A, 0xB1, 0x64, 0xDE, 0x03, 0xF1, 0x3F, 0x6A, 0x39, 0x29, 0xAD, 0x5B, 0xA7, 0x2D, 0xFF, 0x82, 0x69, 0x28, 0x68, 0x61, 0x8A, 0xE1, 0x58, 0x2A, 0xB9, 0xEF, 0xEC, 0xF9, 0x4C, 0xFD, 0xDB, 0x9A, 0x19, 0xC3, 0x01, 0x7A, 0x29, 0x65, 0x7A, 0x02, 0x72, 0x76, 0x08, 0x5D, 0x1A, 0x0A, 0xD4, 0xD9, 0xDA, 0xD5, 0x7A, 0x4D, 0x15, 0x01, 0xF7, 0x47, 0x10, 0x72, 0x7D, 0xCB, 0xBC, 0x07, 0x88, 0xAE, 0x9A, 0x82, 0xC7, 0xCE, 0xE8, 0xBA, 0x4F, 0x37, 0xE5, 0x73, 0x75, 0x3F, 0x80, 0x35, 0xDC, 0x81, 0x3C, 0x40, 0xF1, 0xBE, 0x42, 0xB1, 0x00, 0xA2, 0x80, 0xCE, 0x91, 0x23, 0xBB, 0x22, 0x3A, 0x6F, 0xCD, 0xD6, 0x85, 0x54, 0x85, 0xE5, 0x4F, 0x06, 0x9A, 0x8C, 0x2A, 0x20, 0xBC, 0xA3, 0x81, 0xC9, 0xA8, 0xA8, 0x3D, 0x84, 0x07, 0x4E, 0x57, 0x02, 0xDF, 0xC3, 0x85, 0x5D, 0x71, 0xCB, 0x7F, 0x69, 0x50, 0x27, 0xA0, 0x04, 0x9C, 0x04, 0xE8, 0x00, 0xDA, 0xB0, 0x47, 0x55, 0xF9, 0xB4, 0x8A, 0x66, 0xE4, 0x8E, 0xD6, 0x11, 0xC0, 0xEA, 0xA7, 0xF3, 0x7A, 0xCF, 0xCF, 0x63, 0x64, 0x2C, 0x5D, 0x94, 0xF2, 0x7E, 0x33, 0xC6, 0xBD, 0x70, 0x1E, 0x01, 0x2C, 0x11, 0x03, 0x22, 0x40, 0x4F, 0xC3, 0x1A, 0x0E, 0x48, 0x36, 0x0C, 0xD0, 0x00, 0x8A, 0x3A, 0x68, 0x53, 0x25, 0x80, 0x0D, 0x41, 0xA4, 0xE2, 0x75, 0x10, 0x8C, 0x3F, 0xB2, 0xAF, 0xA6, 0xE2, 0xD2, 0xA9, 0x85, 0x82, 0x1A, 0xA1, 0xDA, 0x94, 0xA1, 0x9E, 0xA0, 0xD1, 0x4F, 0x6B, 0xCE, 0xAF, 0xCE, 0xD1, 0x91, 0x79, 0xB5, 0xED, 0x94, 0xB5, 0xCD, 0xF0, 0xD4, 0x23, 0x36, 0x18, 0xB2, 0x6D, 0x2D, 0xB3, 0x00, 0x79, 0x84, 0x50, 0xA4, 0x61, 0x0E, 0xC4, 0xEA, 0x19, 0xC1, 0xC5, 0x60, 0xEA, 0xA5, 0xDD, 0x3A, 0x20, 0x3F, 0x3D, 0xDB, 0xB8, 0x9B, 0xD9, 0xDD, 0xB0, 0x7A, 0xA7, 0x52, 0x07, 0x4A, 0x5B, 0xE7, 0x91, 0x01, 0x25, 0xC0, 0x12, 0x48, 0xEA, 0x5A, 0x80, 0x03, 0x54, 0x80, 0x1A, 0x82, 0x46, 0x7D, 0x36, 0xAD, 0xA8, 0x3F, 0xD5, 0x25, 0xDC, 0xFC, 0x0C, 0xE5, 0x0D, 0x57, 0x10, 0xE2, 0x9E, 0xAD, 0xC6, 0x1B, 0x20, 0x02, 0xAD, 0x56, 0x47, 0x65, 0x27, 0x22, 0xB3, 0x59, 0x37, 0x37, 0x4B, 0xFB, 0xC4, 0x4E, 0x36, 0x75, 0x77, 0xC0, 0x0A, 0xE0, 0x79, 0x16, 0x09, 0x08, 0x06, 0xB2, 0xF6, 0x02, 0xCC, 0x03, 0x88, 0x3E, 0x5A, 0xFC, 0xB9, 0x3F, 0xE5, 0x72, 0xDA, 0x98, 0x41, 0x2B, 0x34, 0x51, 0xCF, 0xD9, 0x7E, 0x0E, 0xA4, 0xF3, 0xBC, 0x75, 0xF1, 0x78, 0x0A, 0x29, 0xB2, 0xD3, 0x3D, 0xD2, 0x30, 0x06, 0x3C, 0x80, 0x28, 0xA0, 0x1C, 0xC1, 0x27, 0x05, 0xD8, 0x81, 0x79, 0x15, 0xD0, 0xFF, 0xAA, 0xCD, 0x79, 0xDE, 0x5E, 0x2B, 0xA6, 0x9C, 0x37, 0x39, 0x26, 0x25, 0x95, 0x91, 0x68, 0xE5, 0x98, 0xE9, 0xD8, 0x27, 0xD5, 0x41, 0x4F, 0x7E, 0xE8, 0x51, 0x1D, 0xE4, 0xF3, 0x38, 0x28, 0x1A, 0x40, 0xF2, 0xA8, 0x01, 0x07, 0x60, 0xB6, 0x1F, 0xD0, 0xA8, 0x47, 0x1B, 0xD8, 0x80, 0xB2, 0xAD, 0xF5, 0x3D, 0x5D, 0x47, 0xEC, 0xBF, 0xE1, 0xAF, 0xC9, 0x66, 0xC8, 0xB9, 0x2E, 0x3E, 0x59, 0xFB, 0x35, 0xCA, 0x0A, 0x54, 0xBF, 0x46, 0xB5, 0x11, 0x02, 0x54, 0xBF, 0x46, 0x89, 0x01, 0x11, 0xC0, 0x02, 0x88, 0x03, 0xD4, 0x04, 0x8D, 0xE1, 0xE6, 0x16, 0xFC, 0x5F, 0xFD, 0x34, 0x9C, 0x75, 0xE9, 0xD6, 0x66, 0x5C, 0xA5, 0x97, 0x0D, 0x82, 0x56, 0xFF, 0xBC, 0x12, 0xD0, 0x23, 0x63, 0x25, 0xDA, 0x88, 0x46, 0xEE, 0xC0, 0xE4, 0x5C, 0x99, 0xF8, 0xA7, 0x12, 0x36, 0xB9, 0x7D, 0xA6, 0x06, 0x32, 0x6E, 0xE3, 0x1E, 0x83, 0x33, 0xFD, 0xEA, 0x56, 0xD0, 0x86, 0xFC, 0x55, 0x77, 0xA1, 0xAD, 0x1A, 0x37, 0x1A, 0x55, 0xD9, 0x88, 0x68, 0x18, 0x90, 0xBC, 0x35, 0xE4, 0x2C, 0x80, 0xF4, 0xC6, 0x01, 0x9C, 0x01, 0x51, 0x80, 0x1C, 0x10, 0x02, 0x66, 0x57, 0x23, 0xC1, 0x09, 0x84, 0xA2, 0x5B, 0x48, 0x0C, 0x9B, 0x5B, 0x79, 0xB7, 0xA4, 0x1B, 0x32, 0x91, 0xFD, 0xDF, 0x3C, 0x31, 0xB0, 0x92, 0x95, 0x5B, 0x00, 0xC6, 0xDE, 0x79, 0xCF, 0xB9, 0x75, 0xDE, 0x2A, 0x1B, 0x50, 0x35, 0x85, 0x26, 0x80, 0x1A, 0x22, 0x88, 0x16, 0xBE, 0x88, 0xFC, 0xF2, 0xCC, 0x66, 0x21, 0x3E, 0x34, 0x46, 0x93, 0x93, 0x06, 0xEB, 0xA0, 0x69, 0xCF, 0xCF, 0x8D, 0x4B, 0xC5, 0x8C, 0x68, 0xD6, 0x60, 0xC4, 0xDE, 0x65, 0x7C, 0x91, 0x00, 0x6D, 0x78, 0x23, 0x0A, 0x28, 0xDD, 0x3D, 0x90, 0x71, 0xC5, 0x8C, 0x1A, 0xD6, 0x4F, 0xF7, 0x01, 0xDC, 0x00, 0x9B, 0x4F, 0x77, 0x5E, 0xAF, 0x83, 0xA6, 0xF0, 0xF1, 0xD4, 0x57, 0xB2, 0xB5, 0x37, 0xC3, 0xC9, 0xDB, 0x1E, 0xEA, 0x2A, 0x8E, 0xA3, 0x2A, 0x62, 0xCF, 0xA1, 0x83, 0x9E, 0x06, 0x35, 0x8A, 0xE7, 0xA4, 0xE6, 0x8D, 0x6A, 0xE8, 0x5E, 0x70, 0xAE, 0x53, 0x84, 0x1A, 0x7B, 0xA4, 0x55, 0xB6, 0xEC, 0x5F, 0xE9, 0x66, 0xB5, 0x68, 0x86, 0xEA, 0x7A, 0x71, 0xC4, 0x54, 0x50, 0x6E, 0x1B, 0x87, 0xF1, 0x1E, 0x3F, 0x37, 0x01, 0x98, 0xB7, 0x63, 0x57, 0xF9, 0x60, 0xBE, 0x08, 0xB0, 0x02, 0x7E, 0x80, 0x24, 0x20, 0x12, 0xF0, 0x86, 0x36, 0x24, 0x00, 0x75, 0xA0, 0xB4, 0x83, 0x66, 0x5F, 0xF1, 0xB3, 0x34, 0x51, 0xC3, 0xD6, 0x9A, 0xA0, 0xE1, 0xC1, 0xA7, 0x91, 0x9F, 0x76, 0xFC, 0x91, 0x78, 0x3C, 0xC5, 0xC4, 0xB7, 0x48, 0xFC, 0xFF, 0xDA, 0x85, 0x08, 0x50, 0xF1, 0x0F, 0x95, 0x56, 0xE2, 0x46, 0x02, 0x12, 0x40, 0xF9, 0x0C, 0x94, 0x3D, 0x82, 0x7D, 0x11, 0x1D, 0xA0, 0x04, 0x38, 0x67, 0x28, 0xB8, 0xE3, 0xE4, 0xE3, 0x2E, 0xBC, 0xDB, 0xB5, 0xE5, 0xE9, 0xC5, 0x66, 0x02, 0xA4, 0x00, 0x93, 0x1D, 0xA0, 0xA0, 0x3D, 0x84, 0xAC, 0x0C, 0x78, 0x34, 0x1C, 0x30, 0x06, 0x44, 0x00, 0x26, 0x40, 0x1A, 0xE9, 0x1D, 0x35, 0x38, 0xFB, 0x3B, 0xD9, 0xBB, 0xD4, 0xF0, 0x02, 0x09, 0xC1, 0xF3, 0x29, 0xD1, 0x11, 0x4D, 0x88, 0x1F, 0x10, 0x9A, 0xAD, 0xF8, 0x6D, 0xB6, 0xE2, 0xED, 0x27, 0x2E, 0x04, 0xF8, 0x80, 0x1B, 0xFA, 0xBC, 0x59, 0xF3, 0x67, 0xA6, 0x9E, 0xC0, 0x68, 0xC7, 0x4D, 0x3B, 0xCF, 0x34, 0x17, 0xE0, 0x54, 0x35, 0x23, 0x15, 0xD3, 0x61, 0x26, 0xD3, 0xA2, 0xF0, 0x93, 0x07, 0xCB, 0xDB, 0xB2, 0x57, 0x04, 0xD8, 0x01, 0x58, 0x00, 0xF2, 0x86, 0x02, 0xFC, 0x7C, 0x4B, 0x69, 0x3F, 0xCF, 0xD5, 0x50, 0xE0, 0xF4, 0xB7, 0x44, 0x00, 0x96, 0x40, 0xC8, 0xF4, 0xF8, 0x75, 0xCC, 0x02, 0xF9, 0xCE, 0x78, 0x1F, 0xCF, 0x56, 0xAF, 0x4E, 0x1E, 0x6D, 0xC4, 0xDE, 0x1B, 0x5A, 0xE7, 0xD6, 0x64, 0xEE, 0x02, 0xCF, 0xDB, 0x53, 0x9F, 0x56, 0x48, 0xD9, 0x6B, 0xEA, 0x85, 0xD0, 0xCE, 0x53, 0xC8, 0x74, 0xBA, 0xDB, 0x1A, 0x71, 0xA9, 0x9B, 0xA2, 0xD7, 0x02, 0x6C, 0xB2, 0x16, 0x23, 0x1D, 0xD3, 0xD1, 0x1A, 0x1B, 0xE2, 0x89, 0x41, 0x3C, 0x76, 0x3C, 0x22, 0x00, 0x9F, 0x07, 0x02, 0x48, 0xC3, 0xF2, 0x69, 0x5F, 0xF6, 0x86, 0x01, 0xA7, 0xA3, 0x55, 0x02, 0x64, 0xEC, 0xD4, 0xB1, 0xCE, 0x9E, 0x96, 0x50, 0xE4, 0xB0, 0xBF, 0x41, 0x8B, 0xBA, 0xB6, 0x07, 0x4A, 0xD6, 0x1E, 0x2E, 0x8C, 0xA4, 0x9E, 0x05, 0xAA, 0x46, 0xEE, 0xFF, 0xA8, 0xE3, 0xCD, 0xB5, 0xF3, 0xDA, 0x3B, 0x9F, 0xD9, 0xE5, 0x01, 0x61, 0x40, 0xED, 0x29, 0x02, 0xF8, 0xD3, 0xCD, 0x3E, 0x6D, 0x9D, 0x73, 0x3E, 0x2D, 0xFD, 0x9D, 0xCA, 0xF3, 0x9A, 0x3B, 0xDD, 0x04, 0x57, 0xCE, 0xA6, 0x3D, 0x6D, 0x9D, 0xBB, 0x8F, 0x60, 0x6C, 0x8E, 0x3C, 0x00, 0xA9, 0x86, 0x34, 0xA8, 0x91, 0xBB, 0x45, 0x81, 0x18, 0x90, 0x68, 0x28, 0x40, 0xFD, 0x2D, 0x45, 0x40, 0x24, 0x30, 0x3B, 0x85, 0xCE, 0x9E, 0x56, 0x9D, 0xF2, 0xDD, 0x96, 0x78, 0x29, 0x84, 0xD4, 0x80, 0xFB, 0xDF, 0x09, 0x66, 0xBD, 0x41, 0xF3, 0xD2, 0xD5, 0x0A, 0x69, 0xEF, 0x60, 0xF1, 0xBC, 0x2E, 0x6D, 0xBA, 0xFC, 0xFF, 0x31, 0x51, 0x1C, 0xBA, 0x47, 0xD8, 0x73, 0xAA, 0x9D, 0x32, 0xBF, 0xC3, 0xA8, 0xBC, 0x47, 0xDF, 0x79, 0x0A, 0x40, 0xE8, 0xA2, 0x53, 0xAF, 0x7E, 0xF3, 0xAA, 0x6C, 0x53, 0xAA, 0x03, 0xA4, 0x00, 0x4E, 0x80, 0xAC, 0x71, 0xF6, 0x27, 0x26, 0x40, 0x14, 0x70, 0x02, 0xAA, 0xB3, 0xB3, 0xE4, 0x8D, 0x6A, 0x58, 0x83, 0x80, 0x53, 0x00, 0x0B, 0xE0, 0x8E, 0x98, 0xF1, 0x24, 0xDE, 0x7E, 0x25, 0xD0, 0x40, 0x5D, 0x40, 0xBE, 0xE3, 0x84, 0x2E, 0x2B, 0xDB, 0x54, 0x41, 0x76, 0x54, 0x12, 0xC7, 0xB2, 0x77, 0x9C, 0x6C, 0xC4, 0xF7, 0xA6, 0x30, 0xE9, 0x8F, 0x69, 0x6E, 0x4E, 0x6A, 0x48, 0x01, 0x16, 0xC0, 0xE4, 0xF7, 0xB6, 0xB4, 0xD1, 0x91, 0xBA, 0x97, 0x40, 0xE1, 0x9F, 0x4C, 0x53, 0x4F, 0xE4, 0xA0, 0xCE, 0xF3, 0xBB, 0x4E, 0xFF, 0x6E, 0x4C, 0x05, 0x08, 0x01, 0x47, 0xF6, 0xC8, 0xA1, 0x55, 0x23, 0x1A, 0x09, 0xC4, 0x01, 0xE6, 0x7F, 0xD7, 0x03, 0xB8, 0x34, 0xCE, 0xE3, 0x84, 0x97, 0x00, 0x3F, 0x49, 0xEF, 0x39, 0xA5, 0x31, 0xCD, 0x5D, 0xFE, 0xC6, 0x2C, 0x09, 0x97, 0x4E, 0xA8, 0x44, 0x3A, 0x62, 0x76, 0x18, 0x49, 0x4E, 0x61, 0x3C, 0x62, 0x66, 0xEB, 0x2D, 0x10, 0xAB, 0xE5, 0x56, 0xAE, 0xCC, 0x75, 0xE9, 0xF4, 0x40, 0x01, 0xEA, 0x80, 0x05, 0x30, 0xBD, 0xA4, 0xD3, 0x9C, 0x7B, 0x62, 0x29, 0x0E, 0xDE, 0xF2, 0x7F, 0x67, 0xFF, 0xB4, 0x63, 0xD6, 0xC7, 0x5D, 0xE1, 0xDB, 0x44, 0x10, 0xFE, 0x4B, 0xAE, 0xFA, 0xCF, 0x1B, 0x16, 0xB0, 0x03, 0x50, 0xCD, 0x22, 0x6A, 0x78, 0x23, 0x76, 0x0B, 0xBC, 0x38, 0x90, 0x67, 0x7B, 0xCA, 0x1E, 0x99, 0xB8, 0x00, 0x61, 0x80, 0x2B, 0x10, 0xD9, 0xAB, 0x5C, 0x3A, 0x66, 0x8C, 0x1F, 0x8C, 0x1C, 0xAF, 0x20, 0xFE, 0xBD, 0x39, 0xA3, 0x7B, 0x1F, 0xBF, 0xC6, 0x7B, 0x34, 0x75, 0x68, 0x08, 0xF2, 0xD1, 0x71, 0x76, 0x87, 0x9A, 0xBC, 0xF2, 0x4C, 0xBC, 0x0F, 0x69, 0x72, 0x00, 0x8E, 0x06, 0x37, 0x12, 0xD0, 0xE8, 0xAC, 0xD1, 0xAA, 0xBF, 0x8F, 0x5A, 0x3E, 0x6E, 0x6D, 0xDB, 0x31, 0x7E, 0x44, 0x22, 0x81, 0xB8, 0x2D, 0xA9, 0xE5, 0x80, 0x0A, 0xE0, 0x7E, 0xFA, 0x47, 0x9C, 0x47, 0x1C, 0x30, 0x02, 0xC2, 0x9F, 0xDD, 0x9C, 0x00, 0x2E, 0xC0, 0x1D, 0x28, 0x6E, 0x1C, 0x20, 0x09, 0x70, 0x05, 0x2C, 0x01, 0x9F, 0x92, 0xA1, 0x76, 0xD0, 0x04, 0x4D, 0x0E, 0x46, 0xED, 0xF5, 0xF3, 0xD3, 0xCC, 0x11, 0x3C, 0x8E, 0xAD, 0x35, 0xFC, 0xC1, 0xCC, 0x91, 0x2D, 0xB4, 0x99, 0x5F, 0x7F, 0x95, 0x4C, 0xF8, 0x29, 0xAB, 0x18, 0xA0, 0x04, 0xC8, 0x13, 0x42, 0x31, 0xC0, 0xCE, 0xCF, 0x21, 0x10, 0xFF, 0xC6, 0xBF, 0x32, 0x3A, 0xDA, 0xAC, 0xF0, 0x0B, 0xF2, 0x1C, 0xF2, 0x77, 0x7B, 0xFC, 0xF1, 0x6D, 0x36, 0x76, 0x1A, 0xC5, 0x13, 0x98, 0xB9, 0x31, 0x4C, 0xF3, 0xE4, 0x2E, 0x13, 0x6B, 0x02, 0x3E, 0x29, 0x5E, 0x06, 0xF4, 0x29, 0x9D, 0x78, 0x3D, 0x7D, 0x43, 0x0C, 0x48, 0x43, 0x0D, 0xA8, 0xEC, 0xA0, 0x29, 0x2C, 0xDD, 0x54, 0x91, 0x1C, 0xA7, 0x7D, 0x46, 0x23, 0xD6, 0x56, 0xE9, 0xF4, 0x3E, 0x25, 0x27, 0x5A, 0xF5, 0x22, 0xB7, 0x5C, 0xEB, 0xDB, 0x0B, 0xC9, 0xF1, 0xAF, 0x71, 0xB2, 0x7C, 0x82, 0xA6, 0x80, 0x06, 0x30, 0x03, 0x2E, 0x39, 0x07, 0x5B, 0x9A, 0x50, 0x8C, 0x4E, 0xCD, 0x2C, 0xAA, 0x69, 0x70, 0x7E, 0x74, 0x13, 0x74, 0x8A, 0xCC, 0x8A, 0x4F, 0x73, 0x66, 0x0F, 0xE9, 0xEF, 0x7C, 0xFA, 0xA3, 0x6F, 0xB0, 0x05, 0xA0, 0x47, 0xF3, 0xB1, 0x0A, 0xC1, 0xE6, 0x81, 0x01, 0xD3, 0x20, 0x99, 0x06, 0x78, 0x23, 0xFA, 0x5B, 0xA4, 0x3A, 0x68, 0xD6, 0xFA, 0x73, 0x82, 0x63, 0x63, 0x9C, 0xD5, 0xD6, 0x27, 0x5D, 0x4F, 0x39, 0x91, 0x1F, 0xCA, 0x18, 0xAD, 0x8C, 0xA9, 0xAF, 0x19, 0xC1, 0xAB, 0x69, 0x45, 0x40, 0x04, 0x50, 0xD9, 0x60, 0x20, 0xAD, 0x21, 0xBB, 0x23, 0x41, 0x26, 0xBB, 0xA6, 0x8F, 0x62, 0xC2, 0x8C, 0x09, 0x72, 0x01, 0x14, 0xFB, 0x6E, 0x73, 0xAE, 0x38, 0x3C, 0x20, 0x8D, 0x98, 0x23, 0x7F, 0xFF, 0x7F, 0x92, 0xC0, 0x5C, 0xB7, 0x88, 0x01, 0x76, 0x40, 0x0F, 0xE0, 0xBA, 0x15, 0x6C, 0x49, 0x1B, 0xD6, 0x20, 0xE0, 0xF0, 0x06, 0x1D, 0x40, 0x27, 0x6A, 0x58, 0x47, 0x4A, 0xB2, 0x0E, 0x1C, 0x96, 0xFC, 0xF5, 0x5E, 0x45, 0x78, 0x1F, 0x85, 0x19, 0x57, 0x5B, 0x6D, 0xBD, 0xD6, 0x8C, 0x29, 0xA9, 0x3F, 0x4E, 0x5B, 0xD2, 0x11, 0x99, 0xF4, 0x73, 0x3D, 0x22, 0xC0, 0xFC, 0xC0, 0x01, 0x9F, 0xE6, 0x0C, 0xBB, 0x42, 0xC8, 0xBF, 0x61, 0xA8, 0xBC, 0xCA, 0x87, 0x1A, 0x40, 0x26, 0x60, 0xB9, 0xFD, 0xAB, 0x35, 0x01, 0x76, 0x80, 0x06, 0x02, 0x9C, 0x6C, 0x38, 0x40, 0xA7, 0x21, 0x00, 0x37, 0xF4, 0x3C, 0xFD, 0xCF, 0xD2, 0xD0, 0x86, 0x37, 0x6C, 0xB0, 0x7B, 0xA3, 0x4F, 0x74, 0xD0, 0x02, 0xD5, 0x40, 0xC7, 0x29, 0xF6, 0x0B, 0x61, 0x24, 0x94, 0x32, 0x91, 0x48, 0xC7, 0xF7, 0x57, 0xCA, 0x94, 0x50, 0xA1, 0x7F, 0x6C, 0xBC, 0x4E, 0x69, 0x7C, 0x63, 0xF6, 0x24, 0x6E, 0xED, 0xB1, 0x5F, 0xF3, 0x86, 0x01, 0x26, 0xCF, 0xD0, 0xC5, 0xAD, 0x42, 0x4D, 0x9B, 0xE6, 0x34, 0xF5, 0xF4, 0xAB, 0x4A, 0x03, 0x38, 0x1F, 0xF4, 0xCA, 0x3E, 0xE8, 0x0C, 0x56, 0xE8, 0x2F, 0x90, 0x7C, 0xA5, 0x12, 0xA6, 0xCE, 0x29, 0x07, 0x28, 0xD9, 0xD3, 0x61, 0x46, 0x40, 0xCC, 0xFB, 0x52, 0x00, 0x0D, 0x20, 0xB4, 0x41, 0x80, 0x33, 0xA0, 0x09, 0x88, 0x03, 0xE3, 0x27, 0x75, 0xE6, 0xED, 0x79, 0xE7, 0x08, 0xB6, 0x04, 0xB5, 0xDA, 0x77, 0x47, 0x30, 0xE1, 0x9E, 0x03, 0x20, 0xCC, 0x78, 0x88, 0xA1, 0xB9, 0x33, 0xCE, 0x3A, 0xA5, 0xD1, 0xE3, 0xB3, 0x75, 0x74, 0x7B, 0xBE, 0x84, 0x00, 0x99, 0x0D, 0x79, 0x8A, 0x97, 0x8D, 0xAB, 0xD0, 0x71, 0xE7, 0x9C, 0xCE, 0xEF, 0x5F, 0x1A, 0x0F, 0x67, 0x1F, 0x62, 0x01, 0xE3, 0x86, 0x03, 0x1E, 0xDB, 0x36, 0x8B, 0x0A, 0x90, 0x00, 0xB4, 0x1E, 0xE3, 0xF9, 0x00, 0x32, 0xC6, 0x78, 0x1E, 0xE0, 0x86, 0x38, 0xA0, 0x0A, 0x18, 0x37, 0x0A, 0x08, 0x01, 0x32, 0x80, 0xFA, 0x90, 0x7F, 0x5F, 0x9E, 0xF5, 0x8B, 0x99, 0xAB, 0x79, 0x60, 0x26, 0xBB, 0x14, 0x19, 0xC8, 0x1E, 0xBE, 0x88, 0x68, 0x0D, 0x80, 0x99, 0x73, 0xB3, 0xEF, 0x68, 0xAB, 0xB1, 0xFA, 0x5E, 0xE6, 0x23, 0x0E, 0x8E, 0xBF, 0xCE, 0x4F, 0xF4, 0x76, 0x61, 0x87, 0x79, 0xA0, 0x0A, 0xF8, 0x18, 0xF3, 0xCC, 0x5D, 0x78, 0xAE, 0x98, 0x6D, 0xF0, 0x37, 0x3E, 0xE9, 0x44, 0x3D, 0xD9, 0x6F, 0x80, 0x1E, 0x40, 0x12, 0x50, 0x03, 0x72, 0x2A, 0x9B, 0x02, 0x70, 0x43, 0x0C, 0xD0, 0x86, 0x9F, 0x86, 0x03, 0x51, 0x40, 0xC5, 0x34, 0x14, 0x35, 0x0A, 0x60, 0x05, 0x84, 0x00, 0x35, 0xC0, 0x0A, 0x70, 0x60, 0x3A, 0x95, 0xAF, 0x10, 0x7D, 0xFE, 0xAE, 0x03, 0xDF, 0x11, 0xBA, 0x10, 0x64, 0xC6, 0xAD, 0x80, 0x24, 0x30, 0x65, 0x15, 0xD2, 0x16, 0x90, 0x7A, 0xEF, 0x99, 0x48, 0x8C, 0x22, 0x66, 0xF2, 0x48, 0x72, 0x68, 0x9D, 0xDD, 0xE3, 0x69, 0x05, 0x84, 0xEF, 0xF1, 0xF9, 0x89, 0x20, 0x07, 0x62, 0x36, 0x8F, 0xD5, 0x5C, 0x00, 0xB2, 0x7F, 0x77, 0xC3, 0x0F, 0xFF, 0x68, 0x1C, 0xD8, 0x5F, 0x15, 0x85, 0x03, 0x50, 0xF4, 0xE9, 0xF7, 0x00, 0x29, 0x40, 0x10, 0xE0, 0xF6, 0x0C, 0x87, 0x1D, 0xA0, 0xA2, 0xAB, 0xEB, 0x05, 0x78, 0xA3, 0xA8, 0xA1, 0x0D, 0x06, 0x32, 0x1A, 0xDE, 0x25, 0x77, 0x05, 0x8C, 0x3A, 0x66, 0xB7, 0x65, 0xE8, 0x43, 0x89, 0x7C, 0x53, 0xC5, 0x1A, 0xDD, 0xAB, 0x36, 0x92, 0xB8, 0x27, 0xB0, 0xA1, 0x45, 0x40, 0x79, 0x91, 0x65, 0x49, 0x72, 0x44, 0x3D, 0x3D, 0xB7, 0xD3, 0xD7, 0x78, 0xA7, 0xF6, 0x0B, 0x90, 0x06, 0x37, 0x44, 0x01, 0x35, 0x00, 0x57, 0xF6, 0x95, 0x4D, 0xB7, 0x3E, 0x58, 0xBD, 0x7A, 0x2D, 0xBE, 0x9B, 0x16, 0x67, 0x54, 0xCC, 0x07, 0xB3, 0x95, 0xC9, 0x4F, 0x2C, 0xD8, 0xEE, 0x5E, 0x44, 0x0A, 0x18, 0x03, 0xEE, 0x40, 0x6A, 0x3F, 0xA4, 0x05, 0x48, 0x02, 0x46, 0x1B, 0x5A, 0x0D, 0x7D, 0x90, 0x40, 0x4E, 0xD0, 0xA6, 0x2E, 0xD0, 0x4D, 0x6D, 0xBA, 0x0F, 0x1C, 0xA4, 0x36, 0xD3, 0x1D, 0x78, 0xD4, 0x58, 0x50, 0xD3, 0x15, 0xBA, 0x65, 0xF5, 0x8F, 0xBC, 0xF3, 0x8F, 0x04, 0x42, 0x45, 0xE6, 0x51, 0x45, 0x68, 0x78, 0x36, 0x18, 0xD8, 0xC5, 0x61, 0xBD, 0xF9, 0xEF, 0x9C, 0xE9, 0xD0, 0xC9, 0xDE, 0xAB, 0x3D, 0x78, 0x9C, 0x63, 0xC2, 0x9E, 0x99, 0x01, 0x9F, 0xCB, 0xC2, 0xCF, 0x70, 0x71, 0xA4, 0xD0, 0x50, 0xA2, 0x59, 0x77, 0x77, 0x35, 0x20, 0x04, 0x98, 0x9A, 0xD5, 0x31, 0x80, 0x14, 0x60, 0x01, 0xC4, 0x01, 0xA3, 0x46, 0x01, 0xE1, 0x1D, 0x35, 0xE9, 0x11, 0xF7, 0xC0, 0x33, 0x40, 0xBB, 0x29, 0xE1, 0x74, 0x19, 0xD9, 0x98, 0x5B, 0x9F, 0x4C, 0x71, 0x34, 0xB5, 0xB3, 0x67, 0xB1, 0x5F, 0xFF, 0x86, 0xC9, 0xCF, 0x0E, 0xDE, 0x74, 0x24, 0x0F, 0x04, 0x10, 0xDB, 0x4E, 0x21, 0xAE, 0xCF, 0xFB, 0x60, 0x7A, 0xF2, 0x42, 0x00, 0x23, 0x60, 0x6C, 0x27, 0x22, 0x9F, 0xEB, 0x53, 0xEE, 0x89, 0x45, 0x9C, 0x03, 0xA5, 0x03, 0x63, 0x0D, 0x34, 0x4A, 0x63, 0x71, 0x39, 0xA0, 0x04, 0x44, 0x67, 0x4F, 0x98, 0x00, 0xB5, 0x46, 0x36, 0x02, 0x90, 0x6A, 0x04, 0x60, 0x04, 0xD4, 0x04, 0x4D, 0xFB, 0x7C, 0x5D, 0x78, 0xD3, 0x7C, 0xA5, 0xF4, 0x82, 0x48, 0x8E, 0xF6, 0xE2, 0x42, 0xA6, 0x59, 0x3F, 0x1C, 0x6A, 0x0D, 0x5F, 0xCA, 0x5D, 0xBE, 0x7B, 0x5B, 0x86, 0xDC, 0x76, 0x23, 0x90, 0x05, 0xE0, 0x0C, 0x68, 0x35, 0xB4, 0x11, 0xBB, 0xAF, 0x5B, 0x78, 0xCD, 0x21, 0xEB, 0xBD, 0x49, 0x4A, 0x00, 0x7A, 0x00, 0x66, 0xE0, 0xC4, 0xD6, 0xC4, 0x9C, 0x5B, 0x26, 0xFE, 0x5B, 0x01, 0x38, 0xC8, 0x6D, 0x7D, 0xBD, 0x9A, 0x47, 0xD8, 0x00, 0x4D, 0x20, 0x72, 0x1E, 0x7D, 0x80, 0x0D, 0x10, 0x6E, 0x68, 0xC3, 0x00, 0x3D, 0x8D, 0x00, 0xE6, 0xF9, 0x84, 0x5D, 0x31, 0xB2, 0x1A, 0xDA, 0xF5, 0x81, 0xC4, 0xFD, 0x12, 0x55, 0x51, 0xB1, 0xB6, 0xE8, 0x25, 0x04, 0xCD, 0xF5, 0xEB, 0x50, 0x21, 0xD5, 0xB9, 0x00, 0x3C, 0xCD, 0x69, 0x6B, 0xB2, 0x47, 0xFF, 0xDE, 0x8D, 0x68, 0xC3, 0x1D, 0xB0, 0x07, 0xB9, 0xF2, 0x20, 0x68, 0x2B, 0xDA, 0xB7, 0x28, 0x75, 0x60, 0xBE, 0x68, 0x02, 0x8C, 0xC9, 0x77, 0x34, 0x26, 0x76, 0x3A, 0xBD, 0xA0, 0x73, 0x4D, 0xEC, 0x88, 0x4C, 0xD6, 0x47, 0x9F, 0xE6, 0x34, 0x4A, 0xC0, 0x14, 0x28, 0xDF, 0x8A, 0x4D, 0x4C, 0x00, 0x09, 0x70, 0x26, 0x03, 0x15, 0x8F, 0x68, 0xD1, 0x04, 0x6D, 0x5E, 0x9B, 0xFD, 0x7E, 0x4D, 0xFD, 0xEE, 0x03, 0xC7, 0x10, 0xC2, 0x11, 0xA1, 0x33, 0xE1, 0xCE, 0x9E, 0x33, 0x3A, 0x05, 0x30, 0x1F, 0x5A, 0xE7, 0x9F, 0xED, 0x2F, 0xD5, 0xF1, 0x99, 0xA3, 0xBF, 0x48, 0xE3, 0x00, 0xA7, 0x1E, 0xFF, 0xB4, 0x29, 0xE6, 0x59, 0x07, 0x6D, 0xE9, 0xEE, 0x12, 0xDC, 0xC1, 0x11, 0xBB, 0x6A, 0x9C, 0x0D, 0x0A, 0x40, 0x0C, 0xA8, 0x91, 0x29, 0x39, 0x23, 0xB2, 0xDD, 0xF1, 0xB1, 0x3D, 0x35, 0x3A, 0x83, 0x89, 0x74, 0x00, 0x4B, 0xA0, 0xA4, 0xBB, 0xA2, 0x18, 0x10, 0x07, 0x34, 0x01, 0x3F, 0x40, 0x38, 0x30, 0x13, 0xB3, 0x27, 0x01, 0x39, 0x1D, 0xB4, 0x98, 0xA0, 0xA1, 0x84, 0x63, 0xB8, 0x3D, 0xA9, 0x6A, 0xCF, 0x75, 0xF8, 0x87, 0xF2, 0xF8, 0x80, 0x94, 0x87, 0x20, 0xFF, 0x8D, 0xCD, 0x79, 0xAB, 0x80, 0xC9, 0xB2, 0x55, 0x21, 0xBE, 0x56, 0x38, 0xF8, 0xE4, 0x7F, 0x45, 0xF6, 0x18, 0xC8, 0xB3, 0xD5, 0x07, 0x67, 0x2A, 0xE6, 0x8C, 0x8A, 0xA5, 0xCC, 0x21, 0xB3, 0x27, 0x35, 0x1D, 0xD0, 0x86, 0x15, 0x10, 0x02, 0x64, 0x75, 0x08, 0xA6, 0xF8, 0xF3, 0xA1, 0xCF, 0x7C, 0x12, 0x88, 0xBC, 0x64, 0x7F, 0x11, 0xCA, 0xDB, 0xBD, 0x00, 0x00, 0x13, 0x20, 0xA3, 0x3B, 0xCF, 0x18, 0xE0, 0x00, 0xC4, 0x01, 0x6D, 0xB8, 0x00, 0xA9, 0x40, 0x55, 0xB7, 0x7C, 0xCC, 0x42, 0x9B, 0xFB, 0xC0, 0xF4, 0x9F, 0x0A, 0x7A, 0xD4, 0x58, 0x71, 0x40, 0x32, 0xEF, 0x47, 0x3C, 0x5A, 0x69, 0x2B, 0xDA, 0xCD, 0xB0, 0xAE, 0x6D, 0xC3, 0xC7, 0xF3, 0x5C, 0xA2, 0x00, 0x6F, 0xA0, 0xAF, 0x1D, 0x48, 0x40, 0xA2, 0x71, 0x1A, 0x06, 0x44, 0x9E, 0xE9, 0xEF, 0xFB, 0xAD, 0xB0, 0xBC, 0x2E, 0x00, 0xDC, 0x30, 0x6A, 0x38, 0xE0, 0x05, 0x4C, 0xB1, 0x40, 0xE9, 0xF7, 0x66, 0x9C, 0x83, 0x44, 0xF5, 0x41, 0x8B, 0x6E, 0x7B, 0x7C, 0xF5, 0x12, 0x51, 0x03, 0x22, 0x3B, 0xBB, 0x69, 0x00, 0x27, 0x20, 0x0E, 0xA8, 0x02, 0x26, 0x80, 0x1B, 0x90, 0x0C, 0x14, 0xF5, 0x71, 0xAD, 0x3A, 0x68, 0x05, 0xFB, 0x0F, 0xD3, 0xD6, 0x7B, 0xF3, 0x2F, 0x6D, 0xEB, 0xC6, 0xF8, 0x5B, 0x59, 0xF1, 0x76, 0xAE, 0x02, 0x3C, 0xFB, 0x71, 0xE2, 0xBD, 0xA5, 0xC9, 0x33, 0x50, 0x36, 0xD2, 0x2E, 0xD7, 0x40, 0x57, 0x00, 0x23, 0x40, 0x9F, 0x99, 0xD7, 0xB8, 0xF5, 0x96, 0xD5, 0x06, 0xA9, 0x7F, 0xCD, 0xA1, 0xA6, 0x15, 0xC1, 0x00, 0x39, 0x00, 0x9D, 0x3D, 0x47, 0xE2, 0x04, 0xDC, 0xDB, 0x65, 0x07, 0x6D, 0x3C, 0x02, 0xA8, 0x57, 0x61, 0x44, 0x3F, 0x6C, 0x1D, 0x34, 0x3A, 0x80, 0x0A, 0x10, 0x63, 0x88, 0xAD, 0x4F, 0xD0, 0xA4, 0x61, 0x8D, 0x00, 0x4C, 0x81, 0xE8, 0xB5, 0x4C, 0xFD, 0x74, 0xDE, 0xAA, 0x7A, 0x77, 0xB1, 0x9D, 0xFA, 0x46, 0xA4, 0x24, 0x0B, 0x4F, 0xE7, 0xDC, 0x0B, 0x2C, 0x70, 0x42, 0x61, 0xFA, 0x7E, 0x3D, 0x32, 0x46, 0x90, 0x5E, 0x2B, 0x02, 0x99, 0x2C, 0x6C, 0x27, 0x2C, 0x6A, 0x2A, 0x25, 0x02, 0x68, 0x02, 0x7C, 0x80, 0x43, 0xDB, 0x71, 0x85, 0xE8, 0xA7, 0x41, 0xE7, 0xB7, 0x17, 0x3B, 0x66, 0x70, 0xA4, 0x00, 0x3F, 0x0D, 0x02, 0xA2, 0x80, 0xD2, 0x0E, 0xDD, 0xD4, 0xA8, 0x7E, 0xEE, 0x0A, 0x57, 0x0A, 0x22, 0xFA, 0xE1, 0xC6, 0x00, 0x23, 0xDA, 0xAC, 0xB8, 0x87, 0xD5, 0x0F, 0x20, 0x05, 0x78, 0x02, 0x79, 0x76, 0xB3, 0xE8, 0x51, 0x80, 0x09, 0xD0, 0x86, 0x19, 0x10, 0xD2, 0x31, 0xFB, 0x7A, 0xA7, 0xCC, 0x5A, 0x41, 0x8D, 0x4E, 0x2D, 0x81, 0xF8, 0x23, 0xD4, 0x83, 0xA4, 0x8E, 0x62, 0x36, 0x2B, 0x06, 0x82, 0x69, 0xAB, 0x41, 0x7A, 0x3E, 0x0D, 0x7D, 0x7C, 0x1E, 0xCF, 0x36, 0x06, 0x76, 0xBD, 0x1D, 0xAF, 0x57, 0xC0, 0xB7, 0x3E, 0x3C, 0xCD, 0x5A, 0x9C, 0xAA, 0x81, 0x02, 0xC9, 0x80, 0x1D, 0x40, 0x1B, 0xA6, 0x80, 0xC7, 0x1A, 0x90, 0x9A, 0x7B, 0x5A, 0xDC, 0x26, 0x99, 0x39, 0xCC, 0x06, 0xEF, 0xE4, 0x04, 0x27, 0x10, 0xDA, 0xD7, 0x6E, 0x02, 0xC4, 0x00, 0x3B, 0x8D, 0x00, 0xBC, 0x11, 0x0A, 0x64, 0x02, 0x53, 0x4F, 0x24, 0xEA, 0xA0, 0xF5, 0x85, 0x60, 0x46, 0x89, 0x0F, 0x7D, 0xA7, 0x34, 0x96, 0x96, 0xD1, 0x89, 0xC2, 0x69, 0xA7, 0x26, 0xA7, 0xEE, 0xD0, 0x66, 0x12, 0x5E, 0xB2, 0xC0, 0x91, 0x8F, 0x6B, 0xFD, 0xBC, 0x1F, 0xAF, 0x40, 0xB7, 0xED, 0x59, 0xD7, 0x2A, 0x20, 0x0F, 0xE0, 0xB6, 0x4F, 0x69, 0x87, 0x97, 0x63, 0x18, 0xDF, 0x66, 0xA0, 0x72, 0xC0, 0x19, 0xB0, 0x46, 0x08, 0x50, 0xF4, 0xEB, 0x24, 0x98, 0x8B, 0xCF, 0xCC, 0x00, 0xE4, 0xD5, 0x90, 0x20, 0x9B, 0x5E, 0xEC, 0x96, 0xEC, 0xEB, 0xCB, 0xBB, 0x14, 0x90, 0xBC, 0xAF, 0xEB, 0x1C, 0x80, 0x14, 0x60, 0x04, 0xB8, 0x03, 0xD9, 0xA8, 0x5E, 0xAF, 0x14, 0x1D, 0x34, 0x69, 0x3F, 0x03, 0x42, 0x87, 0x2D, 0xC7, 0x9F, 0xCC, 0x7B, 0x5A, 0x1E, 0xD5, 0x97, 0x54, 0xED, 0x6B, 0x41, 0x61, 0x68, 0xBC, 0x68, 0x69, 0x72, 0xD0, 0x93, 0x7F, 0x8C, 0x19, 0x2C, 0x0F, 0xA0, 0xAA, 0x91, 0x40, 0x54, 0xC3, 0x1A, 0xB1, 0x9D, 0xA5, 0xC2, 0xD6, 0x79, 0x43, 0x6F, 0x7A, 0x79, 0x8E, 0x16, 0x29, 0x80, 0x19, 0xA0, 0x02, 0x70, 0x01, 0xA1, 0x5B, 0x44, 0x52, 0xE2, 0x77, 0xC9, 0xAC, 0x3B, 0xAE, 0xA9, 0xD2, 0x79, 0xFB, 0x04, 0xDC, 0xA7, 0x30, 0x08, 0x98, 0x02, 0x11, 0x40, 0x6A, 0xC3, 0x1B, 0xD2, 0xF0, 0x7D, 0xCD, 0x97, 0x89, 0x99, 0xCE, 0x42, 0x83, 0x43, 0x14, 0xC9, 0xEA, 0x7C, 0x39, 0x69, 0x48, 0x70, 0x86, 0x76, 0x55, 0x99, 0xF0, 0xA8, 0xBD, 0x16, 0x95, 0xF1, 0x9A, 0x15, 0xD3, 0xEE, 0x71, 0x91, 0x06, 0x1B, 0x40, 0xDC, 0xA0, 0x46, 0x01, 0xA6, 0xD3, 0x98, 0xBB, 0xE6, 0x16, 0x31, 0x93, 0x81, 0xBB, 0x6E, 0x23, 0x18, 0xF0, 0xDC, 0xB9, 0xA6, 0xC3, 0xC0, 0x08, 0x7D, 0xCD, 0x55, 0x13, 0x3F, 0x84, 0x77, 0x0C, 0xF0, 0xE4, 0xCE, 0x41, 0x0C, 0x61, 0x0A, 0xC0, 0xDF, 0x54, 0x07, 0x03, 0x22, 0x80, 0x36, 0xAC, 0xE1, 0x09, 0x24, 0x3F, 0xD3, 0x05, 0x13, 0x34, 0xEB, 0x8B, 0x06, 0x43, 0x14, 0x32, 0xF2, 0x4F, 0x7D, 0xBD, 0xC2, 0xE8, 0xEC, 0xC0, 0x30, 0x99, 0xDD, 0xA7, 0x43, 0x54, 0x10, 0x08, 0xA7, 0x75, 0x87, 0x32, 0xFE, 0x97, 0x59, 0xB1, 0x1D, 0x20, 0x15, 0x88, 0x86, 0x65, 0xE3, 0x00, 0x1A, 0x40, 0xC8, 0xAF, 0xF9, 0x36, 0xC6, 0x3A, 0xE9, 0xDC, 0xA1, 0x01, 0x55, 0x7C, 0xCA, 0x00, 0xB4, 0x00, 0x11, 0x80, 0x64, 0x3B, 0xBD, 0x1B, 0x8F, 0xFC, 0xC3, 0xE8, 0x6C, 0xFF, 0xC6, 0x76, 0x10, 0x83, 0xA5, 0x7C, 0x63, 0xD9, 0x59, 0x5B, 0x02, 0xB4, 0x80, 0x68, 0x24, 0x03, 0xE1, 0x80, 0x0F, 0x04, 0x08, 0xEB, 0x8D, 0x71, 0xDE, 0x03, 0xBE, 0x0A, 0xC4, 0xA1, 0xBC, 0x6A, 0x9E, 0x56, 0xDE, 0x0A, 0x0D, 0xDA, 0x66, 0x1A, 0x84, 0xA9, 0xA8, 0xA8, 0x35, 0x15, 0xE5, 0xF2, 0x8E, 0xC8, 0xD2, 0x23, 0xF2, 0x48, 0x34, 0x9F, 0x80, 0x30, 0xC0, 0x02, 0x50, 0x6E, 0x28, 0x30, 0x2D, 0xCB, 0xC4, 0xDB, 0x80, 0xF9, 0xF4, 0x17, 0x55, 0x00, 0x7E, 0x2C, 0x1C, 0xE7, 0x36, 0x2B, 0xB4, 0xBC, 0xC8, 0xB5, 0xEF, 0x93, 0x74, 0x67, 0x01, 0x78, 0xCE, 0xC4, 0xFD, 0x7C, 0x9E, 0x46, 0xF6, 0x8A, 0x53, 0xDA, 0x07, 0x8F, 0x43, 0x00, 0x05, 0x20, 0x0C, 0x18, 0x01, 0x71, 0x80, 0x94, 0x19, 0x64, 0xE9, 0xA8, 0xC5, 0x8D, 0x9A, 0xFF, 0xFF, 0x8C, 0x58, 0x39, 0x0E, 0x25, 0xEF, 0xE7, 0x33, 0xB1, 0x9B, 0x44, 0xA1, 0xBF, 0x55, 0xE7, 0x4C, 0xFB, 0x46, 0x8D, 0x9F, 0x76, 0x3E, 0x06, 0x58, 0x9E, 0xB7, 0xA7, 0x37, 0x0E, 0x90, 0x13, 0xD7, 0x89, 0x48, 0xFD, 0xDA, 0x86, 0xEA, 0xEF, 0xF8, 0xBF, 0xB4, 0x35, 0x48, 0xAE, 0xFC, 0xC7, 0xB9, 0x27, 0x16, 0xFE, 0x40, 0xFD, 0x49, 0x6F, 0x25, 0xC3, 0x05, 0xD1, 0x92, 0xD9, 0xBF, 0xFA, 0x38, 0x1A, 0x93, 0xC2, 0x6C, 0xD4, 0x24, 0x65, 0x1D, 0x48, 0x6E, 0x41, 0x1D, 0x05, 0xF8, 0x00, 0xA2, 0x80, 0x35, 0x82, 0x81, 0x51, 0x80, 0xBC, 0xCF, 0xE7, 0xCF, 0x2B, 0xEA, 0x13, 0x8C, 0x34, 0x78, 0x5E, 0x88, 0x21, 0x68, 0x47, 0xDB, 0x6C, 0xC9, 0x71, 0x25, 0x86, 0xB5, 0x38, 0xBB, 0x9E, 0x2D, 0x0B, 0x4C, 0xFF, 0xEA, 0x49, 0x48, 0xEB, 0x18, 0xF0, 0xBF, 0x54, 0x12, 0x0A, 0xF0, 0x46, 0x9C, 0x5F, 0x33, 0x73, 0xF6, 0x17, 0xE9, 0xDC, 0x91, 0x5A, 0x29, 0x7C, 0xCA, 0x03, 0xB8, 0x01, 0xE9, 0x1D, 0x2D, 0x03, 0x72, 0xDA, 0x40, 0xF8, 0x67, 0x0B, 0x95, 0xBD, 0xE9, 0x4B, 0x27, 0x67, 0xFD, 0x66, 0xC0, 0xED, 0x79, 0x51, 0xC6, 0x13, 0x2D, 0x4A, 0x40, 0x08, 0x50, 0x01, 0xAC, 0x80, 0x10, 0x20, 0xBD, 0x83, 0x36, 0x2B, 0xAD, 0x9E, 0xA6, 0x17, 0x5A, 0x9D, 0x69, 0x24, 0x84, 0x57, 0x54, 0x79, 0x77, 0xAB, 0x24, 0xC6, 0x05, 0x8B, 0xB6, 0xE7, 0x05, 0xBD, 0x2D, 0xCA, 0x0A, 0x94, 0x3C, 0xEA, 0x7C, 0x8D, 0x3C, 0x80, 0x07, 0x60, 0x09, 0x04, 0x3D, 0x23, 0x3E, 0x35, 0x6E, 0x9F, 0x53, 0xC9, 0xDA, 0xA1, 0x8F, 0x03, 0x64, 0xED, 0x61, 0xEC, 0x38, 0xAB, 0xCB, 0xC6, 0xBA, 0x82, 0x42, 0x77, 0x48, 0xD3, 0xA6, 0x20, 0x52, 0x7D, 0x6C, 0x6F, 0x04, 0xF7, 0x9D, 0xC1, 0x00, 0x2D, 0xC0, 0x19, 0x08, 0xDB, 0xB7, 0xDA, 0x63, 0x00, 0x0B, 0x20, 0x06, 0x98, 0x21, 0x68, 0xF6, 0xEB, 0x7A, 0x29, 0xF8, 0x2C, 0x76, 0xD0, 0x70, 0x92, 0x4B, 0xED, 0xBE, 0x3F, 0xEF, 0xBE, 0x1F, 0x46, 0x97, 0xA3, 0x6E, 0x3F, 0x6C, 0xF3, 0x37, 0x68, 0xF1, 0x1C, 0x6E, 0x81, 0x9F, 0x83, 0x31, 0xE0, 0x0D, 0xF5, 0x06, 0x6F, 0x77, 0xE3, 0x71, 0xB4, 0x31, 0x05, 0x88, 0x76, 0x59, 0xFE, 0x7E, 0xE2, 0xDD, 0xD2, 0xC0, 0xD3, 0x51, 0x33, 0x39, 0x80, 0x9C, 0x7E, 0x97, 0x91, 0x98, 0x9B, 0xE7, 0xB2, 0x97, 0xD1, 0xDC, 0x01, 0x6C, 0xAE, 0xE6, 0x02, 0x64, 0x4F, 0x5C, 0xD0, 0x01, 0x84, 0x01, 0x2D, 0x20, 0x0E, 0x50, 0xD2, 0x07, 0xFD, 0x04, 0xB8, 0x3A, 0x68, 0xD4, 0x97, 0xF1, 0xFC, 0x6F, 0x33, 0x7C, 0x76, 0x62, 0x28, 0x84, 0xFB, 0xDA, 0x4E, 0x68, 0xF8, 0xF4, 0x11, 0x00, 0x7B, 0x92, 0x1C, 0xA4, 0x5B, 0x17, 0x98, 0x0D, 0xD0, 0x02, 0x8C, 0x37, 0x62, 0x3A, 0x38, 0x14, 0x98, 0x72, 0x5E, 0xDA, 0xB5, 0x02, 0x18, 0xB9, 0xEE, 0xBD, 0x38, 0x8C, 0x7E, 0x09, 0x54, 0xBF, 0xD3, 0x4E, 0x3C, 0x99, 0x41, 0x02, 0x66, 0x5C, 0x31, 0x15, 0xF0, 0x86, 0x71, 0x43, 0x1B, 0x0E, 0x78, 0x00, 0xA5, 0x8F, 0x4C, 0xFC, 0xD9, 0x50, 0x01, 0x84, 0x01, 0x76, 0x40, 0x0A, 0x48, 0xE9, 0xA0, 0x31, 0x9C, 0xA4, 0x3B, 0xE7, 0x9D, 0x11, 0xEB, 0x1A, 0xA5, 0xEE, 0x6D, 0xE8, 0x8A, 0xEA, 0xBA, 0x84, 0x22, 0x49, 0x9D, 0xB4, 0x93, 0xDD, 0xE7, 0x5D, 0x69, 0x07, 0x28, 0x7F, 0x3A, 0x46, 0xED, 0x19, 0x81, 0x12, 0x40, 0x08, 0xC8, 0x95, 0x89, 0xA4, 0x73, 0xFB, 0x2B, 0x38, 0xBB, 0x3F, 0xA7, 0x61, 0x02, 0x28, 0x01, 0xDC, 0x38, 0x0C, 0x4C, 0xB1, 0x7C, 0xEA, 0xC6, 0x11, 0x53, 0x7A, 0xD9, 0x49, 0x59, 0x2B, 0x20, 0x46, 0x6A, 0xF4, 0x00, 0x2C, 0xAF, 0xB8, 0x68, 0x43, 0x1B, 0xB1, 0x11, 0x0C, 0xCC, 0xB1, 0xE4, 0xCC, 0xE3, 0x29, 0x9D, 0x33, 0xB0, 0x3E, 0xE9, 0xD4, 0x6A, 0x19, 0xB2, 0x20, 0xF4, 0x22, 0x1C, 0xC7, 0x4E, 0x81, 0x66, 0xF8, 0x30, 0x9E, 0x17, 0xC0, 0xBB, 0xA7, 0xDD, 0xBB, 0xE7, 0x13, 0x18, 0xDB, 0xE0, 0x00, 0xF4, 0x3C, 0xCD, 0xF0, 0x4B, 0x71, 0xF4, 0xDA, 0xF2, 0xD4, 0xBD, 0x8D, 0x5B, 0x00, 0x33, 0x3C, 0x5D, 0x01, 0x8C, 0xCE, 0xDB, 0xB4, 0x1D, 0xCC, 0x21, 0xE3, 0x0A, 0x45, 0xCC, 0xDA, 0x1A, 0xF5, 0x4B, 0x07, 0xAC, 0x11, 0x06, 0x94, 0x75, 0xD0, 0x12, 0x88, 0x03, 0x94, 0x34, 0x0C, 0xC8, 0x02, 0x62, 0xA0, 0x40, 0xC6, 0x14, 0xA3, 0x3B, 0x68, 0x7A, 0x9F, 0x4B, 0x4C, 0x40, 0xD6, 0x77, 0x5E, 0x4B, 0xAB, 0x96, 0x4F, 0x97, 0x1E, 0xF8, 0xD3, 0x96, 0xA3, 0x0F, 0x08, 0xE2, 0x64, 0xCD, 0xE3, 0xF9, 0x5C, 0x09, 0x6C, 0xF6, 0xA6, 0x47, 0xCA, 0x24, 0x00, 0xAE, 0x86, 0x03, 0xD2, 0xF0, 0xF3, 0x93, 0x48, 0xAB, 0x19, 0xA5, 0xB6, 0x69, 0x38, 0x58, 0x39, 0x68, 0xBC, 0x0C, 0x0B, 0x50, 0x07, 0x4C, 0x00, 0x1F, 0x5D, 0x96, 0xDE, 0xC9, 0xF1, 0x16, 0xA4, 0x3B, 0xE4, 0x74, 0x9B, 0x28, 0x1B, 0xFA, 0x28, 0x64, 0x66, 0xF6, 0x91, 0x8C, 0x00, 0x19, 0xD4, 0x93, 0x0B, 0x6A, 0x78, 0x01, 0xE9, 0x40, 0xD5, 0x4C, 0x1A, 0x77, 0xD0, 0xAC, 0xC7, 0xE4, 0x19, 0x32, 0x49, 0x55, 0x7F, 0x6A, 0x14, 0x07, 0xF3, 0x0A, 0xFB, 0x87, 0x71, 0x4F, 0xAE, 0x7C, 0x17, 0x76, 0x3D, 0x5C, 0xE8, 0xAB, 0x7A, 0x44, 0xF5, 0x67, 0x6C, 0xDD, 0xE7, 0xD4, 0xE5, 0x40, 0x52, 0xA3, 0x80, 0xD2, 0xAD, 0x3C, 0x6D, 0xBC, 0x95, 0xA7, 0x4D, 0x97, 0x26, 0x62, 0xB7, 0x36, 0x41, 0x5B, 0x03, 0xF0, 0xFC, 0x7D, 0x3A, 0x37, 0xDB, 0x50, 0x0E, 0xF8, 0xC4, 0xCC, 0x80, 0xE2, 0x79, 0xC3, 0x01, 0x65, 0xFF, 0x9F, 0x00, 0x84, 0x9D, 0x89, 0x8D, 0x2C, 0x39, 0x8F, 0x84, 0x5D, 0x69, 0x13, 0x24, 0xDE, 0xF4, 0xDF, 0xB1, 0x45, 0x06, 0x43, 0x28, 0x09, 0xFF, 0xC3, 0x2C, 0xAE, 0x0F, 0x95, 0x93, 0x3D, 0xAF, 0x8B, 0xAD, 0x93, 0x47, 0x70, 0xAE, 0x51, 0xC7, 0x90, 0x80, 0x2F, 0xA0, 0x36, 0x2C, 0xB8, 0x13, 0x50, 0xA2, 0x06, 0x06, 0x48, 0x0C, 0x1C, 0xD0, 0x41, 0xD2, 0x66, 0x14, 0xFB, 0xDA, 0x57, 0x83, 0x67, 0xA3, 0xFD, 0x53, 0x66, 0x44, 0x16, 0x72, 0x60, 0xC3, 0x11, 0x2A, 0xF6, 0xE0, 0xB1, 0xEC, 0x8E, 0x14, 0xF7, 0xA3, 0xCE, 0x94, 0xB7, 0xBF, 0x36, 0x75, 0x50, 0x40, 0x5F, 0x09, 0xB9, 0xAF, 0x4C, 0x37, 0x95, 0x0D, 0x18, 0xC8, 0x40, 0x1D, 0xF8, 0xD8, 0x4C, 0x00, 0xA1, 0xA0, 0xD2, 0x98, 0x27, 0x16, 0xA0, 0x06, 0x88, 0xDE, 0xD8, 0x35, 0x48, 0x40, 0x06, 0xAA, 0x80, 0x25, 0x90, 0xFE, 0x1C, 0x2A, 0x64, 0xE0, 0x0F, 0x62, 0xD0, 0x80, 0x09, 0x90, 0xDC, 0x3B, 0x93, 0xC6, 0x7A, 0xF7, 0x4E, 0xCA, 0x8F, 0x22, 0x37, 0x47, 0xF7, 0x44, 0xBC, 0x1A, 0x9D, 0x38, 0xDD, 0xEF, 0x53, 0xDA, 0x7A, 0xEE, 0x03, 0x2B, 0xEE, 0xF3, 0xC3, 0xAA, 0x81, 0x0F, 0x14, 0xD8, 0x06, 0x18, 0x93, 0x18, 0xA8, 0x0B, 0x7F, 0xF4, 0xDD, 0xB9, 0xFE, 0x37, 0x43, 0x6D, 0xF4, 0x8A, 0x3D, 0xD1, 0x5C, 0xBD, 0x97, 0xA4, 0x70, 0xA0, 0x37, 0x8C, 0xBD, 0x1D, 0x90, 0x06, 0xCC, 0x00, 0x6F, 0x20, 0xD7, 0x93, 0x03, 0x33, 0x90, 0x00, 0x74, 0x60, 0x0A, 0xF8, 0x20, 0x0C, 0xA8, 0x05, 0xF4, 0xA6, 0x17, 0x6E, 0x8C, 0x56, 0xC7, 0x5A, 0x44, 0x38, 0x96, 0x32, 0x48, 0x3C, 0xF5, 0xF4, 0x8C, 0x30, 0x1C, 0x93, 0xC3, 0xA7, 0x99, 0x75, 0x5F, 0xC2, 0xA3, 0xB4, 0x19, 0xA7, 0x23, 0x5B, 0x66, 0x29, 0x4D, 0x50, 0xA7, 0x72, 0x1F, 0x50, 0x07, 0x5C, 0x81, 0xF2, 0x5B, 0xA6, 0x25, 0xD9, 0x42, 0x86, 0xBE, 0xFC, 0xDF, 0x9D, 0xC6, 0x30, 0x98, 0xE9, 0x46, 0x05, 0x14, 0xD0, 0x02, 0x8A, 0xB1, 0x0E, 0x05, 0x7C, 0x10, 0x0D, 0x1C, 0xA9, 0xCB, 0x04, 0x76, 0x03, 0x3A, 0x08, 0x07, 0x2A, 0x81, 0x6E, 0xD6, 0x9D, 0x03, 0x7B, 0xA0, 0x0A, 0xB8, 0x03, 0xD1, 0x40, 0x71, 0xA0, 0x35, 0x8D, 0xC5, 0xB5, 0xE0, 0xAA, 0x23, 0x13, 0x29, 0x24, 0xC0, 0xF5, 0x9E, 0xB3, 0x48, 0xE1, 0x9C, 0x29, 0xC6, 0x59, 0xF9, 0x34, 0x6F, 0x90, 0xC7, 0x31, 0xB4, 0x00, 0xE9, 0x41, 0x02, 0x9B, 0x68, 0x40, 0x05, 0xA0, 0x48, 0xBC, 0x73, 0x61, 0xD3, 0xC5, 0xD4, 0x22, 0x58, 0xD2, 0x07, 0xE9, 0x83, 0x04, 0x7A, 0x8D, 0x87, 0xD6, 0x00, 0x96, 0xAD, 0xB0, 0xD7, 0xD1, 0xD9, 0xE6, 0x8C, 0x8A, 0x5F, 0xDC, 0x28, 0x80, 0x9C, 0xE9, 0xBC, 0x04, 0xD0, 0x05, 0x58, 0x03, 0x5E, 0x40, 0xE4, 0x73, 0x2B, 0x10, 0xA0, 0x79, 0x39, 0x30, 0x40, 0x16, 0x8C, 0x16, 0x67, 0x84, 0xC1, 0xD9, 0x78, 0xB5, 0x09, 0x89, 0x51, 0x6B, 0xFD, 0xF6, 0xB3, 0x91, 0xF5, 0x16, 0x45, 0x79, 0x66, 0x4E, 0x0D, 0xF2, 0x3F, 0x04, 0xE7, 0x84, 0x47, 0xAF, 0x03, 0xF7, 0x81, 0x01, 0xD6, 0x40, 0xAC, 0xBB, 0xC9, 0x2C, 0x43, 0x2C, 0xAD, 0xCC, 0xA1, 0x1D, 0x1B, 0x68, 0xDE, 0x41, 0x00, 0x57, 0x20, 0x0C, 0xC8, 0x41, 0xCD, 0xCC, 0xA5, 0x26, 0x89, 0xEC, 0x5F, 0x12, 0xFD, 0x3E, 0x5E, 0xC3, 0xA4, 0x8F, 0x42, 0x6F, 0x79, 0x0D, 0x1B, 0xF0, 0x61, 0xEF, 0xC1, 0x5C, 0x51, 0x57, 0x00, 0x7B, 0x03, 0x22, 0x80, 0xFA, 0xA0, 0x00, 0xB7, 0x31, 0xDA, 0xA6, 0xD1, 0xE0, 0xF6, 0x70, 0xFF, 0xEB, 0xCF, 0xC9, 0x54, 0x18, 0x77, 0xAD, 0xD3, 0xDE, 0xDB, 0x66, 0x65, 0xB3, 0x6F, 0x68, 0x88, 0xF7, 0x25, 0x62, 0x92, 0xEF, 0x21, 0x4D, 0xD7, 0x9D, 0xC9, 0x9D, 0xF2, 0x08, 0xB4, 0x0E, 0x42, 0x81, 0x23, 0x03, 0xC0, 0x8A, 0xE0, 0xBA, 0x32, 0x12, 0xE2, 0xB4, 0x5A, 0xB3, 0x81, 0x13, 0x05, 0xE4, 0x80, 0x8B, 0x5F, 0x8E, 0x79, 0xB9, 0x26, 0x71, 0x9B, 0xE4, 0x97, 0x71, 0x5E, 0xD3, 0x93, 0xAD, 0x64, 0xE6, 0x7E, 0x9E, 0x80, 0xEF, 0x5B, 0x97, 0x63, 0x6D, 0x60, 0x1B, 0x20, 0x09, 0x98, 0x01, 0xE1, 0x40, 0x26, 0xB5, 0xAE, 0xC6, 0x68, 0x72, 0x49, 0x1B, 0xC6, 0xB9, 0xAD, 0x33, 0xCA, 0x90, 0x53, 0x34, 0x33, 0x07, 0xDC, 0xCD, 0xD9, 0xA5, 0x97, 0x5F, 0x28, 0xF7, 0xEB, 0x17, 0x8A, 0x7F, 0x4D, 0x4F, 0x07, 0xB6, 0xDE, 0x10, 0x1A, 0xF4, 0x6A, 0x7C, 0x51, 0xA7, 0x7D, 0xE0, 0xE9, 0xA1, 0x19, 0x0E, 0x68, 0x0D, 0x16, 0xE0, 0x01, 0x30, 0xFE, 0x7E, 0x4A, 0x00, 0x18, 0xC5, 0xF3, 0x31, 0xDA, 0x86, 0xB5, 0x36, 0x4D, 0xB1, 0x7E, 0xE1, 0x5F, 0xA4, 0xEB, 0x5F, 0xE5, 0xFC, 0x32, 0x30, 0x01, 0xBC, 0x81, 0x34, 0xA0, 0x6D, 0x56, 0xB8, 0x81, 0x6E, 0xC0, 0x63, 0x8C, 0xA6, 0xFF, 0xDC, 0x3C, 0x31, 0x6A, 0x63, 0xE3, 0x74, 0x36, 0xD3, 0x39, 0x77, 0x20, 0x65, 0x2F, 0xF7, 0x5D, 0xDE, 0xF3, 0xE4, 0x0B, 0xED, 0xBE, 0xED, 0x62, 0x7B, 0xB0, 0x9E, 0x22, 0xEC, 0xFC, 0xC9, 0x2E, 0x1B, 0x0B, 0xCE, 0x18, 0x4D, 0xB1, 0x23, 0x38, 0xB2, 0x66, 0x77, 0x57, 0x1E, 0x93, 0x16, 0x10, 0x31, 0x28, 0xA0, 0xF4, 0x76, 0x16, 0x46, 0x01, 0xCC, 0x9D, 0x5C, 0x05, 0x88, 0x02, 0xDA, 0x80, 0x0D, 0x22, 0x81, 0xCA, 0x99, 0x8F, 0x0E, 0x6C, 0x1D, 0xF4, 0xD3, 0x46, 0x49, 0x01, 0x4F, 0x20, 0x0A, 0x28, 0xCE, 0x4E, 0xFB, 0xEB, 0xEF, 0xCC, 0xDB, 0xB3, 0x87, 0xD1, 0x82, 0xEC, 0x9B, 0x57, 0x98, 0x32, 0xE5, 0xF8, 0x42, 0x62, 0x13, 0xAB, 0x6E, 0xAA, 0xC1, 0x5F, 0x19, 0x69, 0xCC, 0xD1, 0xEE, 0x64, 0x48, 0x37, 0xE6, 0x9F, 0xA5, 0xC7, 0x60, 0x82, 0x0F, 0xFC, 0x33, 0xD6, 0x3C, 0x94, 0x9A, 0xB1, 0x3F, 0xFE, 0x40, 0x98, 0x20, 0x28, 0x6D, 0x7F, 0xC4, 0x2F, 0x83, 0xBD, 0xD5, 0xD8, 0x67, 0x32, 0x4F, 0x5E, 0xFC, 0x39, 0x09, 0xC7, 0x11, 0x98, 0x30, 0xFE, 0x01, 0xE2, 0xD6, 0xFD, 0xE8, 0x41, 0x6D, 0x20, 0xE3, 0x5E, 0x13, 0x56, 0x03, 0x54, 0x64, 0x3E, 0x7E, 0x83, 0x00, 0xA2, 0x00, 0x89, 0x5B, 0x8E, 0x65, 0xF3, 0x15, 0xE3, 0x36, 0xE0, 0x1C, 0x59, 0xEF, 0x70, 0x83, 0x7F, 0x7E, 0xF5, 0x87, 0xEA, 0x98, 0xAC, 0xA1, 0xE0, 0x58, 0x47, 0x9B, 0x7F, 0x60, 0x05, 0x10, 0x75, 0xB4, 0x56, 0x59, 0x38, 0xF4, 0x93, 0x0A, 0x2F, 0x18, 0xC9, 0xBF, 0x4D, 0x17, 0xA8, 0x04, 0x3E, 0xEB, 0xF8, 0x74, 0xBA, 0xF1, 0x69, 0xA0, 0x6B, 0x75, 0xB6, 0x78, 0xB5, 0x5F, 0x7A, 0x2B, 0xF3, 0xB6, 0xD9, 0x35, 0x36, 0x4E, 0xCD, 0x7E, 0x04, 0x63, 0x7E, 0x94, 0x08, 0xA6, 0xE3, 0xF7, 0xDA, 0x7B, 0xCE, 0x71, 0xB1, 0x07, 0x36, 0xE0, 0xDA, 0x31, 0x48, 0x1F, 0x7B, 0x0C, 0x96, 0xF2, 0x21, 0xA0, 0x02, 0xAC, 0x02, 0x24, 0xE7, 0xCD, 0x45, 0x93, 0xC5, 0xBF, 0x4D, 0x06, 0x25, 0x7B, 0x47, 0xF4, 0x22, 0x05, 0xE9, 0x39, 0xDB, 0xC6, 0xAD, 0xFE, 0x4D, 0x4D, 0xF5, 0x19, 0x66, 0xFB, 0xD2, 0x86, 0x4F, 0x2A, 0x99, 0xC9, 0xF1, 0xB9, 0x27, 0x4F, 0x55, 0x09, 0x4B, 0x58, 0x01, 0xDE, 0x00, 0x85, 0x41, 0x56, 0xE3, 0x95, 0xBC, 0x7C, 0xCA, 0x71, 0x6E, 0x4C, 0x5A, 0xBF, 0x78, 0xC7, 0x82, 0x05, 0xD9, 0xB3, 0xA9, 0x9F, 0xE6, 0x2C, 0x76, 0xCA, 0x94, 0x4B, 0x01, 0x59, 0xB7, 0xBE, 0x75, 0x28, 0xE0, 0x09, 0xC4, 0xBA, 0xCF, 0xDD, 0xEA, 0xCF, 0x26, 0x55, 0x80, 0x06, 0x70, 0x6A, 0x47, 0x02, 0xE0, 0x98, 0x8D, 0xA0, 0xCD, 0x6E, 0x27, 0x50, 0x9C, 0xAC, 0xF8, 0x39, 0x14, 0x7B, 0xC1, 0x67, 0xDD, 0x85, 0xB4, 0x95, 0x51, 0x0F, 0x8E, 0xDC, 0x57, 0x6D, 0x4F, 0xF4, 0x95, 0x9F, 0xEC, 0xD4, 0x7F, 0xF6, 0x53, 0x1C, 0x51, 0xFE, 0x73, 0x8B, 0xD1, 0x81, 0xAF, 0xF3, 0x69, 0x9F, 0x8A, 0x89, 0x75, 0xB5, 0x7B, 0x4D, 0x3C, 0xDC, 0x71, 0x4A, 0xCA, 0x17, 0xA5, 0x22, 0xE2, 0x32, 0x53, 0x7F, 0xB0, 0xE3, 0xE9, 0xD5, 0x37, 0x5A, 0xBF, 0x1E, 0xF7, 0xA6, 0x02, 0x5A, 0x03, 0xBF, 0x3F, 0xC5, 0x33, 0x8A, 0x34, 0x01, 0x69, 0x3E, 0x7C, 0xE2, 0x3F, 0x71, 0x8B, 0x47, 0x69, 0xD1, 0x68, 0x75, 0x39, 0xB6, 0xC5, 0x36, 0x8C, 0xC6, 0x58, 0x7F, 0xF5, 0x57, 0xC1, 0x1A, 0xDE, 0x13, 0xDE, 0x48, 0x5C, 0x59, 0xCA, 0xE8, 0x6C, 0xBC, 0xCA, 0x62, 0x59, 0x46, 0x01, 0x08, 0xF3, 0x9E, 0x30, 0xE5, 0xAE, 0x33, 0x12, 0x7D, 0x0E, 0x8C, 0xDD, 0xFA, 0xAC, 0x59, 0xE7, 0xB2, 0x92, 0xBF, 0xC0, 0x9A, 0x9E, 0xCE, 0x78, 0xD2, 0xBF, 0x66, 0xDE, 0xCA, 0x85, 0x2C, 0xE4, 0x27, 0xF2, 0x62, 0xA7, 0xE2, 0x2A, 0x17, 0xE0, 0x02, 0x88, 0xDF, 0xF1, 0x9B, 0xCA, 0x81, 0x3E, 0x93, 0x33, 0x81, 0xEC, 0x5B, 0x47, 0x91, 0x16, 0xCC, 0x81, 0x3A, 0xB0, 0xFA, 0x9E, 0x9C, 0xEB, 0x0C, 0xB4, 0xBE, 0xC2, 0x4E, 0x7A, 0xF2, 0xFA, 0xD8, 0x75, 0x6A, 0x7F, 0x0B, 0x3B, 0xC3, 0x3E, 0xBE, 0x65, 0x4E, 0xB7, 0xF5, 0xD9, 0xEC, 0xDD, 0x37, 0x2D, 0x98, 0x5D, 0x7C, 0x55, 0xD1, 0xF4, 0xF1, 0x16, 0x9C, 0x8A, 0xCD, 0x4B, 0x85, 0x66, 0x9F, 0x83, 0xBA, 0xD4, 0xD8, 0xAC, 0x7E, 0x25, 0x97, 0x7A, 0x3A, 0x0D, 0xD6, 0xD5, 0x2E, 0x77, 0xAE, 0x3C, 0x6C, 0x0D, 0x15, 0x47, 0x95, 0xC8, 0xEB, 0x0E, 0xA8, 0x9A, 0xDE, 0xF1, 0xC2, 0x1A, 0xE4, 0x02, 0x22, 0x06, 0x7D, 0xD7, 0x62, 0x59, 0x01, 0xE5, 0x40, 0xEA, 0xFD, 0x70, 0xEF, 0xE7, 0xFA, 0xBC, 0x80, 0xDC, 0x63, 0xB3, 0x5C, 0x5F, 0xE6, 0x7B, 0x8C, 0x1F, 0x63, 0x6B, 0xDD, 0x7B, 0x40, 0xDB, 0xF4, 0xAB, 0xB4, 0xD1, 0xED, 0x9C, 0x82, 0xC6, 0x95, 0xBF, 0x44, 0xBE, 0xAE, 0xF5, 0x53, 0xE6, 0x2A, 0xCE, 0x07, 0x26, 0x4D, 0x4C, 0x19, 0xBD, 0x09, 0x3E, 0xD9, 0x9C, 0xE8, 0x99, 0x12, 0xA7, 0x4C, 0x1C, 0xCB, 0x39, 0x1E, 0x04, 0xA3, 0xDE, 0xC7, 0xAB, 0x11, 0xF2, 0x4B, 0x19, 0xB6, 0xD3, 0x6E, 0x39, 0xF7, 0xF8, 0x8C, 0x98, 0x71, 0x48, 0x39, 0x16, 0xBF, 0xC3, 0xC7, 0x51, 0x40, 0x12, 0x36, 0x48, 0xA0, 0xD6, 0x80, 0x69, 0x4B, 0x0E, 0x34, 0xBB, 0x08, 0x1A, 0x20, 0x36, 0x0F, 0x15, 0xB0, 0x06, 0x76, 0x02, 0x1A, 0xF3, 0x8A, 0x8C, 0xCD, 0xF6, 0x19, 0x67, 0xFE, 0x8D, 0x17, 0xA5, 0xCD, 0x70, 0x12, 0xB7, 0xC6, 0x29, 0x3D, 0x0B, 0x2D, 0xAD, 0xC7, 0xD5, 0x6D, 0x88, 0x8E, 0xE6, 0x7B, 0xA8, 0x3D, 0x6E, 0x57, 0xC5, 0xA7, 0x3C, 0x9B, 0x5D, 0xF9, 0x78, 0x10, 0x03, 0x58, 0x57, 0xFE, 0x98, 0xCE, 0xC3, 0x7D, 0xD4, 0x4A, 0x72, 0xFD, 0x24, 0x08, 0x82, 0xE7, 0x57, 0x58, 0x92, 0x95, 0xDA, 0x4D, 0x67, 0xD3, 0x51, 0x26, 0x3A, 0x4A, 0x9B, 0xC1, 0x71, 0x33, 0x48, 0xA0, 0x02, 0x08, 0x1F, 0x2C, 0xC0, 0x0B, 0x88, 0x7D, 0xCF, 0x51, 0xED, 0x7B, 0x84, 0x85, 0x00, 0x5A, 0xC0, 0x92, 0xBB, 0x17, 0x40, 0xE7, 0x59, 0x05, 0xC6, 0x68, 0xF2, 0xE5, 0xB9, 0xA8, 0xD5, 0x9F, 0x27, 0x84, 0x92, 0x11, 0x29, 0x33, 0xD4, 0x93, 0x78, 0x4F, 0x6B, 0xCA, 0x0F, 0x61, 0xB5, 0x60, 0xB4, 0xDE, 0xB7, 0x60, 0x9A, 0xD3, 0x68, 0x54, 0x60, 0x62, 0x8F, 0x0F, 0x5F, 0xF4, 0x16, 0xDF, 0x22, 0x77, 0xA7, 0x72, 0x7E, 0x52, 0x54, 0xE2, 0x1A, 0x3F, 0x30, 0xC9, 0x11, 0xBB, 0x38, 0xBD, 0xEA, 0xED, 0xA8, 0xFA, 0xE4, 0x2F, 0x41, 0x32, 0x07, 0x3E, 0x46, 0x83, 0x67, 0x15, 0x98, 0x87, 0x2B, 0x01, 0x1D, 0xD8, 0x1E, 0xF8, 0x20, 0x01, 0xD7, 0x3B, 0x1A, 0x6B, 0x05, 0x54, 0x02, 0xF9, 0x3C, 0x5C, 0xA7, 0xF1, 0x23, 0xD0, 0x32, 0xAF, 0x18, 0x8D, 0xA6, 0x67, 0xA4, 0x05, 0x26, 0xF7, 0xB5, 0xA2, 0x85, 0x6F, 0xC4, 0xFB, 0xDD, 0xF1, 0xD3, 0xA2, 0x93, 0x85, 0x7E, 0x47, 0x53, 0x1C, 0xDC, 0x47, 0xF9, 0x72, 0xAD, 0x2B, 0x80, 0xB6, 0x8F, 0xA3, 0x47, 0x36, 0x33, 0xF2, 0xC6, 0x4C, 0x32, 0x76, 0x1D, 0xFB, 0x04, 0xBB, 0xF7, 0x6F, 0xE6, 0x50, 0xFD, 0xDA, 0x1B, 0x2D, 0x58, 0xB2, 0xCE, 0x10, 0xF3, 0x18, 0xC3, 0x70, 0xC5, 0x7F, 0x16, 0x2A, 0xDF, 0x40, 0xCA, 0x60, 0x03, 0xDE, 0x03, 0x7B, 0x90, 0x40, 0x31, 0x72, 0x31, 0x88, 0x7C, 0xA5, 0x76, 0xEF, 0xEA, 0xD4, 0x8C, 0x7B, 0x0D, 0x8C, 0x63, 0x34, 0xFB, 0x3C, 0xB4, 0x12, 0x48, 0x7B, 0x5C, 0xDB, 0xAF, 0x6E, 0x3E, 0x95, 0x8E, 0x84, 0xBA, 0x5D, 0xE8, 0xEC, 0x2F, 0x32, 0x13, 0xE9, 0x29, 0xED, 0x39, 0xFB, 0x80, 0xFF, 0xAA, 0xEA, 0xD8, 0xE4, 0x51, 0x92, 0x4D, 0x88, 0xC6, 0x5A, 0xC9, 0x92, 0xB9, 0x63, 0x42, 0x3F, 0x7D, 0x64, 0xC7, 0x84, 0x74, 0xA7, 0x5D, 0x85, 0xAC, 0x93, 0xE5, 0xC9, 0x20, 0x7B, 0x9F, 0xFC, 0xDC, 0xCC, 0xBB, 0x25, 0xAA, 0x35, 0x50, 0x57, 0xCF, 0x03, 0x24, 0x3A, 0x7F, 0xB0, 0x00, 0x52, 0x80, 0x52, 0xA0, 0x8D, 0xBA, 0xFD, 0x40, 0x1F, 0x19, 0x87, 0x00, 0x24, 0xA8, 0x8E, 0xFB, 0xC1, 0x03, 0x90, 0x81, 0xF9, 0xE2, 0x2B, 0x30, 0xDA, 0x67, 0x18, 0x85, 0x18, 0x70, 0x7E, 0x4E, 0x5C, 0x1A, 0x8D, 0x7E, 0x2C, 0x43, 0x1D, 0x6C, 0x36, 0xDA, 0xBF, 0x24, 0x1E, 0x8E, 0x5D, 0xB3, 0x68, 0x34, 0xE3, 0xF4, 0x94, 0x93, 0xD4, 0xCE, 0x2F, 0xFF, 0x8B, 0x8A, 0xE8, 0xA3, 0xAE, 0x0B, 0x3F, 0x33, 0x55, 0xA8, 0xEE, 0xBA, 0xA1, 0x1C, 0x99, 0x04, 0xE7, 0x82, 0x8E, 0xEF, 0x69, 0x63, 0x8A, 0x73, 0xFE, 0xBB, 0xB7, 0x4B, 0xF3, 0xA7, 0x95, 0x6A, 0x3C, 0xA2, 0x62, 0x3A, 0xF0, 0x41, 0x0E, 0x0A, 0x68, 0xB9, 0x95, 0x73, 0x59, 0xD4, 0xB0, 0x13, 0x58, 0xCE, 0x87, 0x80, 0x36, 0xB0, 0x17, 0x20, 0x7C, 0x45, 0x39, 0xD2, 0xE2, 0x8B, 0x9F, 0xC4, 0x86, 0xD2, 0x4B, 0xAB, 0x5C, 0xB7, 0x81, 0x0A, 0x47, 0xB6, 0x9D, 0x04, 0x14, 0x9E, 0x4D, 0xA7, 0xA5, 0xB5, 0x5F, 0x0D, 0xFE, 0xDD, 0x69, 0x34, 0x67, 0x90, 0x84, 0xDE, 0xC3, 0x64, 0x28, 0x12, 0xE0, 0x84, 0x34, 0x36, 0xC8, 0xB9, 0x52, 0xCE, 0xD8, 0x87, 0x61, 0x06, 0x5C, 0x9D, 0x11, 0x13, 0x97, 0x18, 0xBF, 0x9D, 0x2B, 0x4D, 0x0B, 0x20, 0x75, 0x2F, 0xEF, 0xFC, 0xE4, 0x8F, 0x98, 0x40, 0x3E, 0x46, 0x6B, 0x19, 0xF0, 0x9A, 0x44, 0x1B, 0x14, 0x50, 0xEB, 0x8E, 0xF0, 0xAC, 0xE0, 0x43, 0xC0, 0x0C, 0x10, 0x9A, 0x90, 0xAF, 0x38, 0x8C, 0x76, 0x69, 0x26, 0xF7, 0x3E, 0x45, 0x6E, 0x6B, 0x27, 0xF2, 0x32, 0x65, 0x9C, 0x86, 0xD2, 0x38, 0x6B, 0xEF, 0x84, 0xB0, 0x59, 0xED, 0xAB, 0x6A, 0xDD, 0xF2, 0xC9, 0x4E, 0x8E, 0xFD, 0xB6, 0x5D, 0x37, 0x20, 0xFD, 0x97, 0xFB, 0x39, 0x21, 0x09, 0x66, 0xFE, 0x50, 0x90, 0x83, 0xA3, 0x29, 0x4E, 0x59, 0xED, 0x6E, 0x0E, 0x8E, 0xFB, 0x64, 0xB5, 0x75, 0xE4, 0x46, 0x0D, 0xF0, 0x0D, 0x68, 0x03, 0x7C, 0x45, 0x1C, 0xF0, 0xF5, 0x1F, 0x50, 0xA0, 0xD6, 0x7D, 0xB7, 0x8C, 0x78, 0xEE, 0x50, 0xFB, 0xDE, 0x91, 0x53, 0x81, 0xDE, 0x5C, 0xF6, 0x68, 0xB4, 0xFA, 0xEB, 0x2F, 0x67, 0x46, 0xFE, 0x12, 0x8B, 0xF4, 0x75, 0x87, 0x8A, 0x96, 0xCF, 0x10, 0x1A, 0xFB, 0x43, 0xAF, 0x9A, 0xB5, 0xFA, 0xEE, 0x15, 0xE5, 0x4D, 0xA3, 0xF5, 0xD9, 0xB8, 0xA8, 0xAB, 0xC5, 0xBE, 0xFB, 0x40, 0x17, 0xB0, 0x2F, 0xB5, 0x24, 0x3F, 0x82, 0x65, 0xC6, 0x8E, 0x1F, 0x36, 0xF3, 0x52, 0xB1, 0xE2, 0x5C, 0x42, 0x27, 0x71, 0x52, 0xD4, 0xD6, 0xE6, 0x88, 0xB9, 0xAF, 0xE0, 0xBA, 0x00, 0x49, 0xC0, 0x1D, 0x88, 0x0D, 0xF8, 0xC0, 0x7A, 0x50, 0xB7, 0xED, 0xD2, 0xEE, 0xB8, 0xBF, 0x0D, 0xB4, 0xEF, 0x8E, 0x09, 0x95, 0xFF, 0x92, 0x9C, 0x14, 0x1A, 0xAD, 0xBF, 0x74, 0x97, 0x9D, 0x8F, 0x9B, 0x83, 0xD5, 0xEA, 0x9E, 0x10, 0xF8, 0xB4, 0xF8, 0x93, 0xDF, 0xA2, 0xF9, 0xC8, 0xA5, 0xB9, 0x5E, 0x23, 0x0D, 0x03, 0x9D, 0xDE, 0x43, 0x96, 0x76, 0x01, 0xCB, 0x7E, 0x02, 0x05, 0x72, 0x26, 0xA4, 0x60, 0x6B, 0x64, 0x3B, 0x6B, 0x7A, 0x67, 0x64, 0xFD, 0x5C, 0x36, 0x72, 0x34, 0x6C, 0x6B, 0x03, 0xD6, 0x03, 0x03, 0xD4, 0x01, 0x63, 0xEC, 0xEB, 0xB2, 0x81, 0x1D, 0x45, 0x6B, 0x75, 0xC0, 0x15, 0x88, 0x35, 0xC8, 0x5B, 0x39, 0xD0, 0x37, 0x50, 0x01, 0xE4, 0xC0, 0x0D, 0xD8, 0x7C, 0xF3, 0x39, 0xCD, 0x64, 0x8C, 0xD1, 0x6A, 0x1D, 0x6B, 0x35, 0xB4, 0x37, 0xAE, 0x23, 0x47, 0x57, 0xC3, 0x59, 0x9D, 0x86, 0x11, 0x1D, 0x81, 0xBD, 0x0C, 0x05, 0x17, 0xDA, 0x34, 0x9A, 0x5D, 0x6D, 0x16, 0xB1, 0xED, 0x51, 0xFE, 0xEE, 0x56, 0xB8, 0xB0, 0x0F, 0x31, 0x0F, 0x27, 0xCA, 0xBA, 0x37, 0xB7, 0x2A, 0x61, 0xB6, 0xE8, 0xD3, 0x7A, 0x85, 0x36, 0x88, 0xBE, 0xC7, 0x0F, 0xFD, 0x4F, 0xD9, 0x80, 0x2F, 0xC0, 0x06, 0x91, 0xCC, 0x84, 0x00, 0xCC, 0x07, 0xF6, 0x2F, 0x14, 0x90, 0xC7, 0x19, 0xF2, 0x04, 0x2F, 0x1C, 0x90, 0x7D, 0x8F, 0xE5, 0xC8, 0x67, 0xA4, 0x15, 0x8D, 0xB6, 0x69, 0xB4, 0xC1, 0xED, 0x49, 0x4B, 0x49, 0x88, 0xC2, 0xED, 0x59, 0x0D, 0x44, 0xC6, 0xBD, 0x06, 0x63, 0xF9, 0x6B, 0x34, 0x61, 0x45, 0x22, 0xA7, 0xE7, 0xAE, 0xA7, 0xF7, 0x2F, 0x75, 0x1A, 0x2F, 0x77, 0x35, 0x96, 0xA3, 0xA3, 0x2E, 0xC4, 0x94, 0x04, 0xD6, 0x35, 0xDA, 0x39, 0xE7, 0xB7, 0xDC, 0x66, 0xB2, 0x7D, 0x0F, 0x31, 0x91, 0x1B, 0x9C, 0x90, 0x12, 0x80, 0xE7, 0xA0, 0x81, 0x58, 0x83, 0x3D, 0x30, 0x80, 0xBB, 0x83, 0x05, 0x50, 0x02, 0xE4, 0xF3, 0x70, 0xF5, 0x73, 0xF5, 0xE4, 0x2B, 0xC7, 0x68, 0xF2, 0xD7, 0xDF, 0xB6, 0x47, 0x4F, 0x07, 0x13, 0x4C, 0x26, 0xD8, 0x0E, 0xA3, 0xB5, 0xD5, 0xC6, 0x29, 0xCF, 0x02, 0xC7, 0xB5, 0x25, 0xAF, 0xAE, 0xED, 0x1D, 0xEF, 0xAC, 0x7C, 0x3A, 0x5D, 0x49, 0x0E, 0x58, 0xEC, 0xD4, 0xEC, 0x8A, 0x7E, 0x9C, 0xAE, 0x27, 0xDA, 0x1E, 0x67, 0x9E, 0x18, 0x37, 0x2E, 0x06, 0xF9, 0x58, 0xA0, 0xAC, 0x80, 0x1B, 0x60, 0x09, 0xA8, 0x0D, 0x0A, 0xE8, 0x75, 0x0F, 0x07, 0xD5, 0x7B, 0xE0, 0xF8, 0x1A, 0xE8, 0xA0, 0x80, 0xDE, 0xF7, 0xD4, 0x6D, 0xB9, 0xB7, 0x4D, 0xDF, 0xC0, 0xBA, 0xDC, 0x20, 0x67, 0xF3, 0xFD, 0x4D, 0x4F, 0xFD, 0xAB, 0x49, 0x81, 0xA8, 0xAF, 0x47, 0xFE, 0x7D, 0x4E, 0x8B, 0x3D, 0x79, 0x87, 0x16, 0x70, 0x03, 0x5B, 0xA3, 0x1A, 0x22, 0x8D, 0x21, 0xBB, 0x67, 0xA4, 0x5D, 0xCD, 0xAD, 0x37, 0x36, 0x84, 0xE9, 0xA6, 0x01, 0xF8, 0xFA, 0xC9, 0x7D, 0x4E, 0xD8, 0x9B, 0x9D, 0x99, 0x39, 0x70, 0xFB, 0x74, 0xC3, 0xDE, 0x4C, 0x71, 0xF4, 0x5B, 0x42, 0x79, 0xF9, 0x1D, 0x62, 0x58, 0x72, 0x5F, 0x25, 0xED, 0x71, 0xDB, 0x54, 0x73, 0x92, 0x03, 0xC5, 0x24, 0x4A, 0x03, 0xB4, 0x01, 0x17, 0xA0, 0x66, 0xEF, 0xB6, 0x02, 0x6A, 0x90, 0x03, 0xDF, 0xC0, 0xD6, 0x79, 0x33, 0x5E, 0x79, 0x37, 0x1A, 0xCD, 0xFE, 0x4A, 0x10, 0x9E, 0xBB, 0xA7, 0xE7, 0x5C, 0xFE, 0x4B, 0x20, 0xA9, 0xDA, 0x82, 0x23, 0xE3, 0x36, 0x3C, 0x44, 0x79, 0xA3, 0x5F, 0x15, 0xD8, 0xD7, 0x39, 0xAD, 0x7D, 0x8C, 0xF6, 0xAA, 0xA6, 0x98, 0xC1, 0x68, 0x62, 0x63, 0x50, 0x1D, 0x7F, 0xC1, 0x58, 0x2B, 0x7E, 0x5F, 0x22, 0x4E, 0xAE, 0x72, 0xC9, 0xAD, 0x85, 0xBE, 0x78, 0xAC, 0x20, 0x02, 0x70, 0x07, 0x4E, 0x29, 0x3C, 0x2B, 0x3D, 0xFC, 0xBE, 0x58, 0xBA, 0x3F, 0x49, 0xA6, 0x0A, 0x6C, 0x07, 0x5C, 0xD9, 0x07, 0x1F, 0x08, 0xBD, 0xAD, 0x25, 0x72, 0x37, 0x41, 0x30, 0x01, 0xBC, 0xC7, 0xCA, 0xC7, 0x68, 0xFE, 0x5A, 0x0B, 0xEE, 0x56, 0x3A, 0x1B, 0xA7, 0xC5, 0xC5, 0x2A, 0xC5, 0xEC, 0xF2, 0x9C, 0xFE, 0x48, 0xCD, 0x91, 0x76, 0xBB, 0x20, 0x6D, 0x5F, 0x9A, 0xA1, 0xCC, 0xC3, 0xB7, 0x53, 0x10, 0xD7, 0xE3, 0x5C, 0x0B, 0x07, 0x6A, 0x03, 0x39, 0x88, 0x23, 0x76, 0x7C, 0x67, 0xBA, 0x68, 0xE3, 0xE1, 0xC9, 0xBA, 0x8B, 0xDF, 0x11, 0x79, 0xAE, 0x17, 0xAC, 0x99, 0x8A, 0x73, 0x88, 0xF7, 0xB8, 0xD5, 0xAA, 0x77, 0xDE, 0xB7, 0xC6, 0xD8, 0x80, 0xC7, 0x20, 0x9F, 0x89, 0x3C, 0x08, 0x01, 0x7C, 0x20, 0x4F, 0xF3, 0xEE, 0x5C, 0x40, 0xD5, 0xBC, 0x72, 0x8C, 0x16, 0xFF, 0x6B, 0x34, 0x11, 0x98, 0x69, 0x67, 0x7D, 0x83, 0xC1, 0xD3, 0x27, 0xA5, 0x7B, 0x4F, 0x90, 0x5F, 0xE8, 0xDB, 0xBE, 0xFA, 0xED, 0x3A, 0xCF, 0xA8, 0x1F, 0x4E, 0x4B, 0xB5, 0x3A, 0x61, 0x36, 0x9B, 0x40, 0x60, 0x4D, 0xF4, 0x4B, 0x1B, 0xF0, 0x0D, 0xC4, 0x95, 0x6F, 0xFD, 0xA5, 0x23, 0x01, 0xBD, 0xE7, 0x95, 0x38, 0x3D, 0xD8, 0x4E, 0x1B, 0xEB, 0x1D, 0x83, 0x19, 0xBC, 0xC1, 0xF3, 0xC0, 0x09, 0x8A, 0x88, 0xDE, 0xDF, 0x7D, 0xBD, 0x1D, 0xCB, 0xF7, 0x40, 0xC6, 0xAC, 0x83, 0xE8, 0x5B, 0xEB, 0xBF, 0x0B, 0xC8, 0x0D, 0x48, 0x01, 0x4B, 0x81, 0x53, 0x59, 0xE8, 0xB4, 0x59, 0xFE, 0x55, 0xA2, 0xA5, 0xE7, 0xED, 0xE3, 0x96, 0x0F, 0xD9, 0x8E, 0x83, 0x7C, 0x3A, 0x3C, 0xCF, 0x5B, 0x27, 0x1E, 0x27, 0xF4, 0x6D, 0x5F, 0x92, 0x2F, 0xDE, 0xBF, 0x25, 0x89, 0x7A, 0x82, 0x3A, 0x35, 0xC1, 0x66, 0xB0, 0x84, 0x8D, 0xD7, 0xC7, 0xD0, 0xF6, 0x09, 0x9F, 0x0A, 0x90, 0x00, 0x56, 0x22, 0x39, 0xA9, 0x3F, 0x38, 0x8C, 0x6C, 0xEB, 0x94, 0x29, 0xF5, 0x2F, 0xE5, 0xE7, 0x24, 0x8E, 0x2A, 0x6C, 0xD6, 0x63, 0xB3, 0x3A, 0x53, 0x8E, 0xFD, 0x8F, 0x5C, 0xEF, 0xCB, 0x45, 0xE5, 0x60, 0x0F, 0x78, 0x3F, 0x73, 0x80, 0x13, 0x70, 0xEB, 0xA3, 0x61, 0xEF, 0x80, 0x2A, 0xB0, 0x0A, 0x90, 0x9C, 0x57, 0x8A, 0x36, 0xAB, 0xEF, 0x9E, 0xBE, 0x7C, 0xD3, 0x66, 0x98, 0xB7, 0x62, 0x33, 0x2B, 0x64, 0x6A, 0x8E, 0x6A, 0x7E, 0x5B, 0x99, 0xFC, 0xA1, 0xCD, 0xA3, 0xEC, 0x1D, 0x87, 0x5A, 0xBF, 0xB5, 0x56, 0xF6, 0x91, 0x5F, 0x17, 0x26, 0x05, 0x04, 0x2C, 0xA8, 0x09, 0x98, 0x00, 0x0C, 0xCB, 0xA6, 0xDD, 0xA3, 0x0E, 0x11, 0x04, 0x9F, 0x37, 0x79, 0xBD, 0xAF, 0x93, 0xAB, 0x21, 0x63, 0x33, 0xBF, 0xE4, 0x75, 0xE4, 0xF4, 0x1D, 0x51, 0xDE, 0x26, 0x36, 0xB0, 0xA6, 0xFD, 0xC8, 0x5B, 0xEB, 0x18, 0x83, 0x06, 0xB2, 0xCF, 0x31, 0x1D, 0x88, 0x02, 0xBC, 0x01, 0x4D, 0x60, 0x09, 0x57, 0x5C, 0x76, 0xE9, 0x9E, 0x37, 0x7D, 0x6C, 0xD6, 0xDF, 0x38, 0xCB, 0x0E, 0x5C, 0xF5, 0x76, 0x8E, 0x9A, 0x60, 0xE0, 0x0A, 0xB4, 0x15, 0xDE, 0xDE, 0xC2, 0xDC, 0x0C, 0xDD, 0x08, 0xA5, 0x49, 0x31, 0x36, 0x7C, 0x97, 0x12, 0x1B, 0xFF, 0x72, 0xF4, 0x0B, 0x31, 0xB9, 0x93, 0x35, 0x6F, 0x4C, 0x3F, 0x89, 0x05, 0xE4, 0xC0, 0x0C, 0xD8, 0x05, 0x78, 0x8C, 0x79, 0x13, 0x88, 0x31, 0x5A, 0xCB, 0x4F, 0x0B, 0x49, 0x8E, 0xC0, 0x44, 0x38, 0x9B, 0x2E, 0x62, 0xB7, 0xF3, 0xB7, 0x33, 0xEF, 0xAC, 0xAA, 0x0A, 0xF8, 0x06, 0x34, 0x06, 0x7B, 0x60, 0xC0, 0xF1, 0x07, 0x34, 0xE0, 0x0E, 0xD8, 0x40, 0xE4, 0x1E, 0x99, 0xEE, 0x40, 0xEA, 0xBC, 0x42, 0x45, 0xF8, 0xE6, 0x91, 0x96, 0xB9, 0x24, 0x93, 0x3E, 0xAA, 0x3A, 0xBA, 0xB1, 0x85, 0x92, 0x86, 0xD8, 0xE3, 0x3D, 0xB5, 0xA9, 0xA2, 0x0C, 0xAA, 0x56, 0x5D, 0xDA, 0x42, 0xA7, 0x07, 0xC0, 0x1E, 0x57, 0x77, 0x5C, 0x32, 0x96, 0x28, 0x25, 0x45, 0x12, 0xD3, 0x02, 0xD8, 0x5A, 0x42, 0xE9, 0x67, 0x13, 0x40, 0x37, 0x20, 0xD4, 0x6D, 0xC8, 0x9F, 0xA7, 0x9C, 0xC3, 0x80, 0xC2, 0x6F, 0x53, 0x7B, 0x98, 0x8F, 0x32, 0x9D, 0x5E, 0xF1, 0xCB, 0xAB, 0xAB, 0x81, 0x37, 0x60, 0x39, 0xD0, 0x81, 0x03, 0xD1, 0x8F, 0xE8, 0x62, 0x02, 0x3A, 0xD8, 0xF6, 0xD4, 0x39, 0xF8, 0xD3, 0x16, 0xD8, 0x69, 0xB3, 0xFD, 0x39, 0x20, 0x6B, 0x8A, 0x76, 0xF6, 0x88, 0xD8, 0x6E, 0x16, 0xA5, 0xC8, 0x46, 0xF4, 0x72, 0xFB, 0x94, 0xD6, 0x27, 0x32, 0xB6, 0x4C, 0xB8, 0x53, 0xBE, 0x0D, 0xC4, 0xB9, 0x8B, 0xD3, 0x3F, 0xFB, 0xCB, 0xBC, 0xC8, 0x53, 0x71, 0x14, 0x39, 0x58, 0xC0, 0xF6, 0x49, 0x42, 0xE0, 0xC3, 0x29, 0x79, 0x3E, 0x05, 0x0E, 0x93, 0xAD, 0x22, 0x1C, 0x9F, 0x34, 0x6B, 0x50, 0x17, 0x8D, 0x72, 0x94, 0x77, 0x68, 0x25, 0xF6, 0xDD, 0x4C, 0x6F, 0x63, 0xB1, 0xA3, 0x86, 0x8C, 0xE5, 0x60, 0x0D, 0x0C, 0x28, 0xBA, 0x36, 0xAD, 0x80, 0x6A, 0x20, 0x13, 0xB0, 0x71, 0x43, 0xD2, 0xC1, 0xAE, 0x40, 0x9E, 0x4C, 0xA6, 0x3D, 0x36, 0x93, 0x2F, 0x9F, 0xCA, 0x63, 0x4F, 0xEE, 0x79, 0xE2, 0xF7, 0x5B, 0x8E, 0x12, 0x62, 0x11, 0x44, 0xCB, 0x4B, 0x61, 0xC1, 0xA0, 0xE7, 0xDF, 0xEE, 0x4A, 0xE2, 0x7E, 0x4E, 0x1B, 0x41, 0x57, 0x5A, 0x6D, 0x0E, 0x11, 0xF6, 0x91, 0x07, 0xDA, 0x80, 0x08, 0x3E, 0xFC, 0x95, 0xA0, 0xEB, 0xA9, 0x7A, 0xC8, 0x19, 0xA0, 0x31, 0x3F, 0x50, 0x54, 0xDE, 0x63, 0x8D, 0xAC, 0xC0, 0x3E, 0xF5, 0xCB, 0x14, 0xF1, 0x73, 0x36, 0xF3, 0x06, 0xB6, 0xDE, 0x5B, 0x9F, 0xBE, 0xA2, 0xF4, 0x32, 0x30, 0xC0, 0xD7, 0x73, 0xAB, 0xD7, 0x7B, 0xE3, 0xED, 0x27, 0x0B, 0xCC, 0x16, 0xE0, 0x79, 0xDC, 0x90, 0x63, 0xB4, 0x91, 0xAD, 0xFA, 0x5D, 0xD2, 0x89, 0xED, 0xA7, 0x01, 0xB4, 0x27, 0x22, 0x9D, 0x5B, 0x15, 0x71, 0xE4, 0x8A, 0xB3, 0x73, 0x22, 0x6C, 0x09, 0x62, 0x0C, 0x17, 0xEF, 0xB7, 0xC5, 0x2D, 0x13, 0x0B, 0xA9, 0x8F, 0xB5, 0x1D, 0x17, 0x94, 0x0F, 0x91, 0xBF, 0x44, 0x0E, 0x99, 0x4F, 0xD3, 0x13, 0xC1, 0x26, 0xCF, 0xCC, 0xA6, 0x6C, 0xDF, 0xD8, 0xCE, 0x95, 0xE2, 0xB2, 0x3D, 0x31, 0x3C, 0x3D, 0xDD, 0x17, 0xB7, 0x4F, 0x66, 0xD1, 0x07, 0x3D, 0x7B, 0x82, 0xB1, 0xDD, 0x42, 0x01, 0xBB, 0x81, 0xA5, 0x77, 0x4D, 0xDA, 0xDA, 0x80, 0x3A, 0xD0, 0x75, 0x8B, 0xC9, 0x4B, 0x00, 0x6B, 0x3D, 0x0D, 0x21, 0x0D, 0xB0, 0x35, 0xAF, 0xF8, 0xD8, 0xCC, 0xAE, 0xE0, 0x5D, 0xF7, 0x24, 0x21, 0x5B, 0x4F, 0x9C, 0x7B, 0x4F, 0xFE, 0x4D, 0x4D, 0xA6, 0xDD, 0x5C, 0xA0, 0xB4, 0xAE, 0xE0, 0x9D, 0x9F, 0xA2, 0x3B, 0x3B, 0x05, 0xD7, 0xBF, 0xD8, 0x61, 0x1C, 0xD5, 0x6B, 0x2F, 0xC0, 0x1C, 0x0F, 0x5D, 0x79, 0xC7, 0x9A, 0x64, 0x24, 0x56, 0xA7, 0x17, 0x50, 0x02, 0xF8, 0x3A, 0xEE, 0xB5, 0x33, 0x4D, 0x92, 0x3D, 0x1F, 0x8E, 0xD3, 0x75, 0xCB, 0x9D, 0x67, 0x11, 0x39, 0x78, 0x9B, 0x6E, 0x1B, 0xA0, 0x35, 0xC8, 0x01, 0x5F, 0x91, 0x7F, 0xF4, 0x0B, 0xD2, 0x27, 0xC8, 0x9C, 0x05, 0x78, 0x3D, 0xD9, 0x08, 0x67, 0x45, 0x73, 0x1A, 0x0D, 0x07, 0x27, 0x8B, 0x69, 0x46, 0x5E, 0x80, 0x37, 0x4E, 0x29, 0xD2, 0xC8, 0x5D, 0x57, 0x1B, 0x59, 0xF5, 0xBC, 0x35, 0x6D, 0x95, 0x46, 0xF3, 0x53, 0x7F, 0x38, 0x16, 0xA1, 0xE8, 0xA5, 0x52, 0xCE, 0x11, 0x30, 0x8A, 0x24, 0x7D, 0x60, 0x9A, 0x63, 0x9F, 0xCB, 0x55, 0x14, 0xB0, 0xFB, 0x97, 0xC9, 0xE1, 0xB4, 0xDD, 0xDC, 0x56, 0x27, 0xB3, 0x3D, 0xCF, 0x56, 0xB6, 0x9F, 0x56, 0x95, 0x3B, 0xFE, 0xA1, 0xC2, 0x90, 0x0E, 0x44, 0x0C, 0xEC, 0xFE, 0xD4, 0x7A, 0xAF, 0xFF, 0x25, 0x40, 0x6E, 0x3E, 0x7C, 0xFC, 0x1B, 0xFE, 0x84, 0xD6, 0x85, 0x46, 0x8B, 0xAB, 0x62, 0x4C, 0xA6, 0x69, 0xC3, 0x96, 0x9C, 0x74, 0xBA, 0x9E, 0xBE, 0x5F, 0xF6, 0x6D, 0xED, 0x31, 0x06, 0x5D, 0x2B, 0xB9, 0xFE, 0xDF, 0xE2, 0x08, 0xCA, 0x14, 0xE3, 0x93, 0xCC, 0x46, 0xD5, 0x32, 0x9A, 0x69, 0x01, 0xD4, 0x8F, 0x6B, 0xFA, 0x36, 0x37, 0xB0, 0x1A, 0xB6, 0x4B, 0x1F, 0x34, 0x60, 0xF9, 0x6B, 0x24, 0x3F, 0xD3, 0x9A, 0x7E, 0x91, 0x3A, 0xA2, 0x0A, 0xB5, 0x6E, 0x27, 0x84, 0xD6, 0xB3, 0xEB, 0x3D, 0xAA, 0x6C, 0xAE, 0x83, 0x7D, 0x7F, 0x4A, 0x2E, 0x77, 0xFA, 0x2F, 0x4F, 0x9A, 0x3E, 0x8D, 0xBF, 0x0A, 0x28, 0xBE, 0xD2, 0x34, 0x5A, 0x1E, 0xA3, 0xC5, 0x97, 0xCF, 0x23, 0x48, 0x92, 0xDC, 0x89, 0xDF, 0xBD, 0xA6, 0xC7, 0x68, 0x3B, 0x8A, 0x61, 0x11, 0xC3, 0xCB, 0xDC, 0x88, 0x0E, 0x34, 0xA3, 0x03, 0x72, 0xA5, 0x26, 0x73, 0x29, 0xED, 0x53, 0xD9, 0x74, 0x74, 0x20, 0x5D, 0x81, 0xCD, 0xB0, 0xBF, 0xDE, 0xCD, 0x63, 0xCD, 0x00, 0x95, 0xDF, 0xF6, 0x85, 0xF4, 0xD3, 0xB3, 0xC3, 0xE5, 0x89, 0xD0, 0x9E, 0x23, 0x06, 0x87, 0x43, 0x3C, 0xE9, 0x53, 0x0E, 0xD4, 0x1A, 0xC8, 0x93, 0xBD, 0x61, 0x03, 0x19, 0xF8, 0x33, 0xD2, 0x06, 0x59, 0x40, 0x0C, 0x6C, 0x3F, 0x17, 0x30, 0x7D, 0x32, 0xAC, 0x9C, 0x46, 0xAB, 0xBB, 0x0D, 0xA5, 0xCA, 0x9F, 0xE6, 0xF9, 0x26, 0x22, 0x73, 0x07, 0xB1, 0x3D, 0x09, 0x1A, 0x89, 0x42, 0xE7, 0x48, 0x96, 0x40, 0xDD, 0xF5, 0x63, 0x8C, 0x40, 0x1E, 0xAD, 0xF2, 0x08, 0x36, 0x4A, 0xB8, 0x15, 0xAF, 0x33, 0xEE, 0x66, 0x08, 0xFB, 0x91, 0x8F, 0xA3, 0x34, 0x04, 0xFD, 0x95, 0xB1, 0xE6, 0x95, 0x0F, 0x76, 0x96, 0x62, 0xC5, 0x59, 0x56, 0x9F, 0x5D, 0x73, 0x09, 0x4D, 0x38, 0xD0, 0xA7, 0x05, 0x55, 0x0F, 0x68, 0xC9, 0x04, 0x68, 0x73, 0x19, 0x30, 0x4E, 0x27, 0x02, 0xEC, 0xC5, 0x87, 0x4F, 0xAC, 0x60, 0x3D, 0xD9, 0x42, 0x49, 0xA3, 0xF5, 0x77, 0x4A, 0xDB, 0x41, 0xB9, 0x6E, 0x36, 0x83, 0xEE, 0x51, 0x20, 0x28, 0xEC, 0x49, 0xED, 0xD8, 0x4A, 0xBB, 0x21, 0x87, 0xB4, 0x6E, 0x19, 0x0E, 0x0E, 0x34, 0xBB, 0x3A, 0xCE, 0xEF, 0x3A, 0x32, 0xB2, 0x47, 0x35, 0xB1, 0x9E, 0x63, 0x2B, 0x15, 0x63, 0x9F, 0x3A, 0xC0, 0xA3, 0x4B, 0x70, 0xE9, 0x32, 0xFA, 0x51, 0xC7, 0x11, 0x9A, 0xDC, 0x27, 0x82, 0xCC, 0x98, 0x9F, 0x61, 0x2C, 0xE6, 0xFA, 0xA0, 0x0A, 0xC4, 0x02, 0xD2, 0x80, 0x28, 0x20, 0x65, 0x70, 0x69, 0xC8, 0x60, 0x38, 0x00, 0x4C, 0x72, 0xD1, 0x04, 0x24, 0xE7, 0x61, 0x00, 0xD6, 0xC0, 0x0E, 0x40, 0xF1, 0x26, 0xA3, 0xC4, 0x9B, 0xB2, 0x08, 0x25, 0x38, 0xA6, 0x79, 0x21, 0xDB, 0x96, 0x15, 0xC4, 0x4B, 0x7A, 0xFE, 0xC4, 0x89, 0x5F, 0xD7, 0x64, 0xBA, 0xA6, 0xA2, 0x5B, 0x83, 0xBE, 0x51, 0x62, 0x1A, 0xAD, 0x38, 0xB4, 0x68, 0x98, 0xB8, 0xFD, 0x3E, 0x51, 0x80, 0xB0, 0x8D, 0xDC, 0x58, 0xB2, 0x02, 0xC8, 0xC6, 0x43, 0xD9, 0xC0, 0xCA, 0x29, 0x89, 0x9A, 0xC3, 0x9A, 0x30, 0x7A, 0x1A, 0x14, 0x50, 0x63, 0xFA, 0x0E, 0x25, 0x8C, 0xAE, 0xBE, 0xEC, 0x99, 0x80, 0x19, 0xB0, 0x1D, 0x58, 0x84, 0x0D, 0x0A, 0xB0, 0xA7, 0x91, 0xBB, 0x3A, 0x20, 0x83, 0xC5, 0x6C, 0x91, 0x0D, 0x68, 0x00, 0xBE, 0x4E, 0xAF, 0x77, 0x1A, 0x0D, 0xBA, 0x38, 0xD1, 0x31, 0x57, 0x1A, 0x47, 0x36, 0x9C, 0xF7, 0xE4, 0x69, 0xDA, 0x5C, 0x3C, 0x13, 0x2B, 0x13, 0x6B, 0x6F, 0x55, 0x7E, 0xAD, 0x07, 0x6A, 0x5F, 0x23, 0x2D, 0x59, 0x7B, 0x07, 0xC3, 0xC0, 0x22, 0xFB, 0xEE, 0x95, 0xE6, 0x4C, 0xE2, 0x63, 0xAD, 0x48, 0x8E, 0xB5, 0xFC, 0x97, 0xAB, 0x10, 0xA7, 0x68, 0x97, 0xCA, 0xEC, 0x4C, 0x25, 0x62, 0x4B, 0xBB, 0x13, 0xAC, 0xF9, 0x40, 0x1F, 0xF3, 0xF1, 0x3B, 0x84, 0x0D, 0x04, 0x70, 0xBD, 0x0D, 0xA3, 0x31, 0xA0, 0x41, 0xE5, 0xEE, 0xB3, 0xA1, 0x0B, 0x88, 0x00, 0x3C, 0x01, 0xB5, 0x31, 0x68, 0x00, 0xD1, 0x40, 0xD9, 0xBC, 0x29, 0xC7, 0x68, 0x02, 0x39, 0x04, 0x91, 0x39, 0x47, 0xC6, 0x68, 0x7D, 0x8F, 0x9C, 0xB9, 0xF8, 0xC4, 0x75, 0x6D, 0xA4, 0x56, 0xE6, 0x2E, 0xB5, 0x68, 0xB4, 0xE7, 0x3E, 0xC0, 0x8C, 0x9B, 0x3C, 0xF7, 0xD7, 0x9F, 0x5E, 0x65, 0x1D, 0xEF, 0xE3, 0xE6, 0xDD, 0xDB, 0xEE, 0xE9, 0x29, 0xC5, 0x8B, 0x00, 0xE0, 0x09, 0x8C, 0x06, 0x2B, 0xB0, 0x7B, 0x10, 0x03, 0xEE, 0x26, 0x8B, 0x0B, 0x5C, 0x50, 0xF3, 0x35, 0x01, 0xEA, 0x37, 0xED, 0x3D, 0x28, 0x40, 0x1C, 0xD0, 0x35, 0x68, 0x20, 0xED, 0x69, 0xC2, 0x91, 0x83, 0x00, 0x18, 0xEB, 0x69, 0xCE, 0xEE, 0x05, 0x54, 0x2C, 0xBE, 0x42, 0xA3, 0xE9, 0x5F, 0xF6, 0xD1, 0x04, 0x5B, 0x16, 0xF8, 0xB6, 0x65, 0xE8, 0xB0, 0x62, 0x1B, 0xFE, 0x2A, 0x1E, 0x9B, 0x35, 0xA6, 0xD9, 0x4B, 0xD3, 0x1F, 0x74, 0xD7, 0xC4, 0xBE, 0xE7, 0xB4, 0x19, 0x32, 0xFB, 0xF4, 0x48, 0xAE, 0x62, 0xC4, 0x1E, 0x9F, 0x24, 0xC7, 0xC5, 0xD9, 0x13, 0x39, 0x48, 0x20, 0x14, 0x0F, 0xCD, 0x81, 0xE6, 0x7F, 0x73, 0xB6, 0xFF, 0x3E, 0xAA, 0x11, 0xA7, 0x55, 0x5B, 0x9F, 0x71, 0x54, 0x1B, 0x50, 0x03, 0x5C, 0x07, 0x3D, 0x90, 0x07, 0x3A, 0x28, 0xA0, 0xD7, 0x13, 0x1D, 0x30, 0x20, 0x1D, 0xB0, 0x67, 0xCE, 0x97, 0x3E, 0x0D, 0x73, 0xEC, 0x0C, 0x35, 0xFB, 0x8B, 0xEF, 0x0F, 0x69, 0xF8, 0x7B, 0xB6, 0xA3, 0xFA, 0xB2, 0x04, 0x5F, 0x3A, 0x62, 0x14, 0x91, 0x64, 0x22, 0xE5, 0x3A, 0x11, 0x77, 0xD4, 0xDD, 0x8D, 0xD1, 0xCA, 0xAF, 0xA1, 0x96, 0x00, 0xA5, 0xC7, 0x31, 0x31, 0x6B, 0xDC, 0x3C, 0xCE, 0x4A, 0x22, 0x7C, 0xA2, 0x58, 0x4F, 0xC6, 0xAD, 0x85, 0xB4, 0xF2, 0x99, 0xC2, 0x18, 0x9B, 0x63, 0x5E, 0x3F, 0x6A, 0x4B, 0xBC, 0x3F, 0xE5, 0x86, 0x09, 0x29, 0x3F, 0x74, 0xAA, 0xA8, 0x1A, 0xD0, 0x81, 0x04, 0xCD, 0x0B, 0xAC, 0xBE, 0xB1, 0x03, 0xF0, 0xCD, 0x8C, 0x24, 0xC0, 0x6A, 0xB0, 0x80, 0xED, 0x78, 0x25, 0x0B, 0xB0, 0x41, 0xD8, 0xBC, 0xA2, 0x34, 0x9A, 0xCF, 0x4E, 0x80, 0xBE, 0xEA, 0xB6, 0xEE, 0xDC, 0x97, 0x90, 0x99, 0xA6, 0x55, 0xA3, 0xB3, 0xAB, 0xC8, 0xEA, 0x0C, 0x63, 0xFE, 0xDE, 0xE5, 0xE4, 0x88, 0x2B, 0x0E, 0x21, 0x7A, 0x14, 0x8E, 0x58, 0x6C, 0xB4, 0x59, 0x53, 0x83, 0x1C, 0x68, 0xF6, 0xD7, 0x07, 0xB4, 0x4F, 0xAD, 0x92, 0x28, 0xEC, 0x6A, 0x4C, 0xCB, 0xFD, 0xB0, 0x8E, 0x42, 0xBB, 0x52, 0xFC, 0x9D, 0xED, 0xD4, 0x7F, 0x0D, 0x1B, 0x9A, 0xCD, 0x59, 0xCE, 0x68, 0xEA, 0x0D, 0x68, 0x01, 0x6B, 0xBD, 0xDA, 0xEA, 0x83, 0xBC, 0x77, 0x89, 0xC8, 0x7B, 0xED, 0xEF, 0x0D, 0x44, 0x01, 0xAA, 0xC0, 0x4A, 0x40, 0xF8, 0x8A, 0x9C, 0x91, 0x16, 0x7F, 0x05, 0x9F, 0x03, 0x0E, 0x14, 0x5E, 0x1F, 0xDC, 0x7C, 0xFA, 0xAD, 0x2A, 0x3C, 0x97, 0xD5, 0x23, 0xB1, 0x8D, 0x49, 0x1B, 0x28, 0x1F, 0xD8, 0x94, 0xD1, 0xBF, 0xBD, 0x69, 0xCE, 0xAC, 0x85, 0xE0, 0xAA, 0x74, 0x7C, 0x16, 0x7B, 0x01, 0x21, 0xBF, 0x4F, 0xF0, 0x2C, 0xE0, 0x9A, 0x4B, 0x3C, 0x0A, 0xB2, 0x71, 0x5A, 0x04, 0x4E, 0x88, 0xBF, 0x7F, 0xAE, 0x47, 0xE5, 0xF4, 0x64, 0x74, 0xA9, 0x15, 0x58, 0x7D, 0x1B, 0xC6, 0x1D, 0x90, 0x1A, 0xEC, 0xA7, 0x7C, 0x7E, 0x01, 0x56, 0x40, 0xF7, 0xD8, 0x67, 0x03, 0x22, 0x7C, 0x08, 0xC4, 0x02, 0xB4, 0x01, 0x9F, 0x57, 0x76, 0x1C, 0xA3, 0xE5, 0xA5, 0xC1, 0xB4, 0x72, 0x56, 0x72, 0x9F, 0x6E, 0xCE, 0x6E, 0xE8, 0xAD, 0x3C, 0xB6, 0xAB, 0xD9, 0x1A, 0x97, 0xE8, 0x5D, 0xE2, 0x69, 0xB4, 0x9A, 0x1D, 0xCF, 0x29, 0xDB, 0x55, 0xD1, 0x16, 0xB3, 0x2B, 0x26, 0x50, 0x63, 0x43, 0xFA, 0xAE, 0xA9, 0xE1, 0xE8, 0x42, 0x03, 0x01, 0x19, 0xC0, 0x36, 0xB6, 0x24, 0xFB, 0x49, 0xD6, 0xEA, 0x69, 0x28, 0x4A, 0x5B, 0x9C, 0x0E, 0xC8, 0x77, 0x05, 0xA4, 0xD6, 0x23, 0x96, 0xA2, 0x40, 0x12, 0x6B, 0xA0, 0xBC, 0xE9, 0x03, 0x1E, 0x4F, 0x15, 0x90, 0xDE, 0x0F, 0x77, 0xDD, 0x61, 0xF8, 0x95, 0x40, 0xF9, 0xB1, 0x5A, 0xA1, 0xA3, 0x8A, 0x4E, 0x8A, 0xAA, 0xE9, 0x37, 0xDE, 0x2B, 0x63, 0x9C, 0x7A, 0x0D, 0x9F, 0x75, 0x1B, 0x8A, 0xDD, 0x43, 0xE0, 0x2F, 0xD4, 0xFC, 0x35, 0x57, 0xDE, 0x0A, 0x64, 0xFF, 0x8E, 0x92, 0xD2, 0xA3, 0x92, 0x62, 0x53, 0xEB, 0x86, 0xEF, 0x8E, 0xFC, 0xE7, 0x04, 0xB6, 0xA1, 0x9C, 0x47, 0x8D, 0x95, 0x7E, 0x80, 0x16, 0xE0, 0x83, 0xBD, 0xA7, 0xFE, 0x9B, 0x3A, 0x2C, 0x23, 0xBB, 0x7A, 0x56, 0xBF, 0x39, 0xD9, 0x9D, 0xBE, 0xD6, 0x4C, 0x7B, 0x16, 0x80, 0x3A, 0x9B, 0xD9, 0x80, 0xD7, 0x20, 0x6F, 0x04, 0x5B, 0x67, 0x3D, 0x87, 0x6A, 0x51, 0x60, 0x73, 0x0D, 0x15, 0xC0, 0x0D, 0x90, 0xB8, 0x05, 0xAC, 0xD5, 0x69, 0xB3, 0x46, 0xC9, 0xB5, 0x36, 0xDC, 0x30, 0xDB, 0x67, 0xE9, 0x37, 0x78, 0xAB, 0x74, 0xCF, 0xF6, 0x25, 0xB3, 0xC2, 0xD9, 0x9C, 0x40, 0x8D, 0xE9, 0xB5, 0x97, 0xB3, 0x9B, 0x47, 0xA5, 0xE4, 0x46, 0xE0, 0x36, 0xEB, 0x3A, 0x6B, 0xC9, 0x7C, 0xFC, 0xB7, 0x0B, 0x70, 0xC3, 0xC3, 0x0E, 0xC0, 0x1A, 0xC8, 0x9A, 0x57, 0xFC, 0x27, 0xFF, 0x1F, 0x47, 0x4C, 0x6F, 0xD5, 0x4F, 0x95, 0x5D, 0x4E, 0x06, 0xB8, 0x05, 0x7B, 0xFC, 0x50, 0xD9, 0x1B, 0xD0, 0xCD, 0x1E, 0xAA, 0x40, 0x28, 0xE0, 0x3E, 0x50, 0x20, 0x36, 0xC0, 0xC6, 0x36, 0xC1, 0xA6, 0x37, 0xD4, 0x62, 0x4E, 0x20, 0x17, 0x70, 0x84, 0xD3, 0x1D, 0x9F, 0xF6, 0x06, 0xBA, 0xC7, 0x68, 0x1B, 0x3E, 0x41, 0xB3, 0xB7, 0x78, 0x7D, 0xA2, 0xE1, 0x19, 0xA8, 0xCE, 0x31, 0x19, 0xE9, 0xC8, 0x9E, 0xCA, 0xD0, 0x60, 0x8A, 0xCE, 0x35, 0xD0, 0xE4, 0x77, 0x1A, 0x12, 0xAA, 0xEF, 0x4E, 0xDD, 0xAE, 0x8F, 0xF4, 0x81, 0x8F, 0xDC, 0xAA, 0xCF, 0x57, 0xF1, 0x59, 0xEE, 0x8E, 0x7F, 0x92, 0x95, 0xA8, 0x35, 0x03, 0x2D, 0x4E, 0x15, 0x66, 0x07, 0x2C, 0xE8, 0xCA, 0x5E, 0x02, 0x13, 0x51, 0xD0, 0x9F, 0x76, 0xCD, 0x3E, 0x07, 0x96, 0xAD, 0x2C, 0x41, 0x9E, 0xFD, 0x55, 0x01, 0x5D, 0xC0, 0xCE, 0xC1, 0x1E, 0x04, 0xE0, 0xCC, 0x26, 0x17, 0xC0, 0x0A, 0xD0, 0xBE, 0x3B, 0x36, 0x66, 0x02, 0xD6, 0x40, 0xE8, 0xBC, 0x69, 0xB4, 0xD9, 0xFE, 0xB2, 0xE0, 0xBD, 0xF7, 0x74, 0x6C, 0x8C, 0x91, 0x54, 0x15, 0x1C, 0x67, 0xAB, 0xE1, 0xAF, 0xD1, 0x98, 0xA0, 0x7A, 0x22, 0x26, 0xDE, 0x70, 0xDC, 0xDE, 0x0D, 0x7B, 0x68, 0x42, 0x8C, 0x10, 0x7E, 0x25, 0xFA, 0xF6, 0xD9, 0x44, 0x62, 0xAA, 0x78, 0x17, 0x3E, 0x89, 0xFF, 0x54, 0x92, 0x62, 0x3E, 0xF9, 0x5C, 0x1A, 0xE2, 0x14, 0x01, 0x87, 0xC1, 0x4C, 0xE7, 0xEE, 0xA0, 0x9C, 0x18, 0xCC, 0x6C, 0xFE, 0x75, 0x57, 0xCC, 0xD3, 0xC3, 0x48, 0x03, 0xF8, 0xED, 0xAF, 0x80, 0x0C, 0x1A, 0x28, 0x03, 0x30, 0x6E, 0xF2, 0x98, 0x77, 0x39, 0x60, 0x09, 0x68, 0x01, 0x14, 0x4C, 0x4F, 0x01, 0x4C, 0x81, 0x38, 0x99, 0xD4, 0x34, 0x1A, 0x92, 0x1F, 0x77, 0xE7, 0x37, 0x1A, 0x2C, 0x6D, 0x5C, 0xFB, 0x36, 0xAB, 0x72, 0xE2, 0x56, 0x3C, 0xEB, 0xDB, 0x52, 0xC3, 0x50, 0xB6, 0xE4, 0xB4, 0xBC, 0xEB, 0x7B, 0xF4, 0x0A, 0x73, 0x61, 0x5E, 0xDF, 0xAD, 0x73, 0xF8, 0x49, 0x67, 0x75, 0x67, 0x9F, 0x4C, 0x4A, 0x97, 0x0B, 0xFB, 0x39, 0x05, 0x20, 0x97, 0x66, 0xB9, 0x8E, 0xC7, 0x77, 0x8F, 0x77, 0x64, 0xE1, 0xCD, 0x3A, 0xEA, 0xA4, 0xB6, 0x7F, 0x97, 0x5D, 0xE6, 0x9D, 0x32, 0x6D, 0x1E, 0x06, 0xBD, 0xA2, 0x9D, 0x19, 0x40, 0x39, 0xD0, 0xC9, 0xBB, 0xC0, 0xA0, 0xF2, 0xAE, 0x5C, 0xD9, 0x7E, 0x47, 0x59, 0xDC, 0x00, 0x71, 0x80, 0x9E, 0xF4, 0x7D, 0x86, 0xDA, 0xAF, 0x84, 0x60, 0x23, 0xDD, 0x00, 0xFA, 0x34, 0x31, 0x67, 0x3F, 0x47, 0xD8, 0xB0, 0x03, 0x6A, 0xC8, 0xE2, 0xE3, 0x99, 0x6E, 0xFA, 0x37, 0x9E, 0x62, 0x15, 0x96, 0x3C, 0xE8, 0x9A, 0xA5, 0x63, 0x46, 0xB5, 0x8F, 0x9D, 0x62, 0x03, 0x98, 0x29, 0xC9, 0xBF, 0x3D, 0x3E, 0x41, 0x6A, 0x06, 0x90, 0xDB, 0xED, 0x4D, 0x73, 0xE1, 0x3B, 0xF5, 0xB9, 0x3B, 0x27, 0xE3, 0xE3, 0x4F, 0x0C, 0x65, 0xEF, 0x3B, 0xC1, 0x7F, 0xF7, 0xE0, 0xA9, 0x36, 0x69, 0x1F, 0xE8, 0xFD, 0xA6, 0x0C, 0xCA, 0x1F, 0xDF, 0xD0, 0xD5, 0xF9, 0xFC, 0xDA, 0x8A, 0x01, 0xBD, 0x52, 0xAF, 0x60, 0x35, 0x3B, 0x56, 0x8B, 0xAF, 0x1A, 0x4E, 0x71, 0xD7, 0xCE, 0x98, 0xCC, 0x6E, 0xC5, 0x9B, 0x22, 0x5F, 0xC8, 0xC7, 0xB7, 0xE3, 0xAF, 0x84, 0x6A, 0x15, 0xAD, 0x37, 0x75, 0x94, 0x59, 0x9B, 0x27, 0xD5, 0x3E, 0x83, 0xB6, 0x00, 0xAA, 0x00, 0x1E, 0xE3, 0x4F, 0x0D, 0x4A, 0xCF, 0x9B, 0x0B, 0x58, 0x75, 0x79, 0x72, 0x28, 0xED, 0xB8, 0xA8, 0xA5, 0xF3, 0x24, 0x6B, 0x2C, 0xDA, 0x69, 0x01, 0x12, 0x03, 0x05, 0x9C, 0x68, 0xC0, 0x08, 0x1F, 0xD8, 0x20, 0x81, 0x94, 0xFF, 0x3F, 0x0B, 0xF2, 0x9F, 0x2D, 0xDE, 0xE3, 0x58, 0xCD, 0x3F, 0x97, 0x5A, 0xD4, 0xC6, 0x42, 0xBD, 0xE3, 0x4A, 0xB8, 0xF5, 0x09, 0xEF, 0xF7, 0xDE, 0x38, 0x51, 0xCE, 0x52, 0x29, 0x56, 0x97, 0xC2, 0x79, 0xEA, 0xE3, 0x1E, 0x4A, 0x2E, 0xC0, 0xCE, 0x22, 0xC4, 0xAB, 0x30, 0x2A, 0xE6, 0x93, 0x9D, 0x3E, 0x73, 0xEE, 0x77, 0xB4, 0x60, 0xC7, 0x2F, 0x0A, 0x13, 0x67, 0xB7, 0x12, 0x5E, 0x38, 0x95, 0xE5, 0x11, 0xF4, 0x78, 0xF3, 0x10, 0x7A, 0x27, 0x5A, 0xEC, 0xDB, 0xF7, 0x13, 0x0D, 0x34, 0x3B, 0xBB, 0xEC, 0x41, 0x03, 0x32, 0x60, 0xCA, 0x82, 0x0C, 0x62, 0x03, 0xCE, 0x87, 0x71, 0x67, 0xAC, 0xC5, 0x06, 0x32, 0xE7, 0x15, 0x3D, 0x56, 0x8B, 0x2F, 0x2F, 0x61, 0x89, 0x20, 0x22, 0x35, 0x8D, 0x69, 0x56, 0x24, 0x7B, 0x3E, 0xC0, 0xCF, 0x12, 0x86, 0x85, 0xDE, 0x83, 0x5D, 0x58, 0x39, 0x43, 0x41, 0x5A, 0xCD, 0x18, 0xCC, 0xD7, 0xD3, 0x61, 0x61, 0x6A, 0xC5, 0xD6, 0xDD, 0x8F, 0x8F, 0x4D, 0x3C, 0xFA, 0x48, 0x9F, 0xDD, 0x7D, 0xC0, 0xCB, 0x81, 0x25, 0xBF, 0xCE, 0x0C, 0x7A, 0xDA, 0xA8, 0x68, 0x72, 0x99, 0x82, 0x49, 0x98, 0xD6, 0x62, 0x77, 0xEA, 0x62, 0xD0, 0x77, 0xEC, 0x80, 0xC8, 0x60, 0x0D, 0xE4, 0x41, 0x00, 0xEE, 0x63, 0xF4, 0x06, 0x6C, 0x03, 0x2A, 0x4F, 0x49, 0xD4, 0x02, 0x2C, 0x00, 0xDE, 0x11, 0x24, 0x8E, 0xD5, 0xF2, 0xAF, 0xA6, 0x6E, 0x24, 0x3E, 0xB7, 0x4B, 0x8D, 0x7C, 0xB2, 0x4F, 0x48, 0x48, 0x71, 0x67, 0xD3, 0x84, 0x3F, 0x6A, 0x9C, 0xB9, 0x9D, 0x72, 0xEA, 0xC8, 0x3E, 0xCA, 0xE3, 0xEA, 0x98, 0x4F, 0x72, 0x5A, 0xC3, 0x48, 0xDC, 0x9B, 0x52, 0x8C, 0x81, 0xB4, 0xEF, 0xB0, 0x65, 0x0D, 0x54, 0x01, 0x09, 0x60, 0xD5, 0x55, 0x4E, 0xCC, 0x32, 0x1D, 0x0E, 0x2B, 0x7F, 0xEA, 0x24, 0xC4, 0x01, 0x3D, 0x59, 0xD2, 0x80, 0x37, 0x90, 0xB4, 0xAF, 0x0F, 0x1A, 0xE8, 0x47, 0x91, 0xAC, 0x78, 0xBB, 0x74, 0x60, 0x9F, 0x24, 0x40, 0xC0, 0x69, 0x27, 0x03, 0x4C, 0xE6, 0x95, 0x3A, 0x56, 0xAB, 0xB3, 0xAE, 0x25, 0xEB, 0x96, 0x1C, 0xDA, 0x42, 0x23, 0x0A, 0x86, 0xDF, 0xAC, 0x0B, 0x15, 0x1C, 0x39, 0x19, 0x31, 0xA9, 0x77, 0xF1, 0x45, 0x3D, 0xEB, 0x5A, 0xF9, 0x62, 0x1D, 0x25, 0xD5, 0x2C, 0x7F, 0x76, 0xF2, 0x13, 0x62, 0xDA, 0x09, 0xC3, 0x9A, 0xE1, 0xCD, 0xC5, 0x04, 0x79, 0xBD, 0x72, 0x7D, 0xD8, 0xDA, 0x98, 0x5D, 0x59, 0x4E, 0xF5, 0x75, 0xFC, 0xCA, 0x51, 0xE4, 0x60, 0xE7, 0xBD, 0xAE, 0xC5, 0xFE, 0x8F, 0x08, 0x9E, 0x0E, 0x12, 0x68, 0x7B, 0x6A, 0x64, 0x03, 0x48, 0x07, 0xAC, 0x5F, 0xF9, 0xCA, 0x3B, 0x4F, 0x2D, 0xF3, 0x58, 0xAD, 0x8F, 0xD5, 0x6A, 0x23, 0x46, 0x60, 0x5F, 0xFD, 0x94, 0xE2, 0x8E, 0xD2, 0x81, 0xC8, 0x84, 0x2B, 0x0A, 0x09, 0x3C, 0x70, 0xFF, 0x35, 0x58, 0xAB, 0xDF, 0x92, 0x95, 0x75, 0x89, 0xEF, 0x25, 0xD7, 0x12, 0xEE, 0xF6, 0x4C, 0x58, 0x3D, 0x4E, 0xDE, 0xE0, 0x0A, 0xB8, 0x81, 0x53, 0xF9, 0xE4, 0x40, 0x2D, 0x20, 0x99, 0x43, 0xFB, 0xA4, 0xC6, 0x77, 0x01, 0xC6, 0xCA, 0x95, 0x02, 0xBC, 0x81, 0xBC, 0x7A, 0x71, 0xDF, 0x5B, 0x04, 0xB0, 0x07, 0x32, 0x30, 0xC0, 0xE2, 0x91, 0xD8, 0x8D, 0xBB, 0x74, 0xBD, 0x06, 0xDE, 0x80, 0xE9, 0x5D, 0x49, 0xB4, 0x95, 0x56, 0x13, 0x98, 0xAB, 0xF6, 0x9A, 0x8E, 0x77, 0x39, 0xBA, 0x3E, 0x0D, 0xEF, 0xB5, 0xF8, 0xB7, 0x10, 0xEA, 0x8E, 0x91, 0x4C, 0xB0, 0x19, 0x38, 0x71, 0xB7, 0xF8, 0x5F, 0x77, 0x54, 0x8A, 0xDF, 0x82, 0x57, 0xBC, 0x75, 0x2A, 0xCB, 0x76, 0x8D, 0x8B, 0x31, 0xD8, 0xB2, 0x90, 0x95, 0xA3, 0x2C, 0xC5, 0x05, 0xD6, 0x1E, 0xB0, 0xB5, 0x37, 0x9B, 0xC1, 0xB2, 0xB1, 0x7C, 0x50, 0x1C, 0xEB, 0x3A, 0x87, 0x58, 0x30, 0x37, 0x0A, 0x58, 0x76, 0x4F, 0xAA, 0x8C, 0x41, 0x01, 0x25, 0x03, 0x1B, 0x34, 0x1D, 0x1B, 0x4F, 0xFB, 0x5F, 0x07, 0x18, 0x4F, 0xC8, 0x06, 0xB4, 0x80, 0xBD, 0x01, 0x89, 0x79, 0x65, 0x1F, 0xAB, 0x6D, 0x5C, 0xA7, 0xBD, 0xA7, 0x6C, 0x9D, 0xA9, 0x1D, 0xE3, 0x9E, 0x18, 0x55, 0x4D, 0x09, 0xC1, 0xA5, 0xC5, 0x05, 0x0F, 0x4B, 0x8F, 0xBC, 0x1C, 0x2C, 0x00, 0xA3, 0x79, 0xD2, 0x27, 0x75, 0x25, 0x0F, 0xE1, 0xEF, 0x7B, 0xA9, 0xB0, 0x78, 0xFE, 0xEE, 0x0B, 0x7A, 0xB2, 0xF7, 0x76, 0xFC, 0x1A, 0x37, 0xF7, 0x09, 0x60, 0xB9, 0x4F, 0x90, 0x4A, 0xE9, 0x37, 0xA2, 0x5B, 0x77, 0x8C, 0x3D, 0x76, 0xDD, 0x5C, 0x02, 0x06, 0x9A, 0x40, 0x6E, 0x80, 0x36, 0x5F, 0x83, 0xDD, 0x80, 0x18, 0xA0, 0x0E, 0x44, 0xDD, 0x45, 0x35, 0xEE, 0x80, 0x15, 0xA0, 0x1B, 0x58, 0x4F, 0x0F, 0xF1, 0x2E, 0x76, 0xB2, 0xA5, 0xD1, 0xE4, 0x3B, 0xA7, 0xC9, 0x0A, 0xF8, 0x27, 0x54, 0xF1, 0xE3, 0x1B, 0xEB, 0xBE, 0xB3, 0x7D, 0xAC, 0x0B, 0x36, 0xB4, 0x9C, 0xD4, 0xB5, 0xC4, 0x21, 0xB7, 0xDE, 0x83, 0x07, 0xD3, 0xD4, 0x82, 0x07, 0x0F, 0x56, 0xB3, 0x1B, 0xFB, 0x26, 0xB0, 0x85, 0x50, 0xDF, 0x92, 0x08, 0xAD, 0x63, 0x5F, 0x9A, 0x64, 0x03, 0x51, 0x80, 0xFE, 0x0A, 0x47, 0x77, 0x1E, 0xC1, 0x89, 0x90, 0xF1, 0xCF, 0xD6, 0x9C, 0xEF, 0xE2, 0x2E, 0xE4, 0xFC, 0xD0, 0x4C, 0x29, 0x41, 0xDC, 0x07, 0x07, 0xFE, 0x81, 0x39, 0xE0, 0x0A, 0x04, 0xB3, 0x5D, 0x1C, 0x48, 0x26, 0xD2, 0x2C, 0x60, 0x0B, 0x1E, 0x56, 0x00, 0x36, 0xD8, 0x03, 0xE5, 0x9B, 0x9B, 0x56, 0xD3, 0x3F, 0xFF, 0xC6, 0xE8, 0xC6, 0xF5, 0xD1, 0xD6, 0x55, 0x4B, 0x50, 0x2B, 0x60, 0x82, 0xD8, 0x18, 0x6A, 0x55, 0xD3, 0x53, 0xA7, 0x39, 0x21, 0xAF, 0xF4, 0x21, 0xAF, 0x5F, 0xA0, 0x87, 0x3E, 0x1B, 0x8D, 0xA3, 0xD9, 0x1C, 0x1B, 0xE8, 0x11, 0x2C, 0xA1, 0xF3, 0xE3, 0x78, 0xC1, 0x99, 0x18, 0xB1, 0x7E, 0xAD, 0x87, 0x18, 0x3A, 0xC0, 0xCE, 0xFB, 0x2B, 0xE1, 0x06, 0xA0, 0xD1, 0xCA, 0x01, 0x04, 0x4B, 0x7A, 0x01, 0x92, 0x00, 0xC3, 0x0A, 0x6A, 0x80, 0x07, 0x90, 0x32, 0x68, 0xA0, 0x95, 0x85, 0xF2, 0x40, 0x3F, 0x15, 0x49, 0xC2, 0x87, 0x0D, 0x04, 0xDF, 0x34, 0xC0, 0xE7, 0x4D, 0x35, 0x1A, 0xCD, 0x3E, 0x1F, 0x91, 0x2E, 0x19, 0x11, 0x28, 0xBD, 0x12, 0xBD, 0xDB, 0x1B, 0xE6, 0x4D, 0x1F, 0xDF, 0x24, 0x7B, 0xF4, 0x19, 0x05, 0xE6, 0xEE, 0x84, 0x48, 0x2E, 0x01, 0xA7, 0xEA, 0x7A, 0xA6, 0x9B, 0x4D, 0x30, 0x2F, 0x1D, 0xF0, 0x8D, 0x87, 0x4C, 0x0D, 0x65, 0xE8, 0x8A, 0xCD, 0x66, 0xCA, 0x8E, 0xBF, 0x1C, 0xA1, 0xAF, 0xFD, 0x4B, 0xF1, 0xC8, 0x89, 0x12, 0xF8, 0x0C, 0x1C, 0x3D, 0x42, 0xE7, 0x55, 0xEC, 0x16, 0x72, 0x2B, 0xA3, 0x9B, 0xB0, 0x51, 0x17, 0x20, 0x0D, 0x58, 0x02, 0x6E, 0xCF, 0x48, 0x13, 0x20, 0x36, 0xD0, 0x09, 0x54, 0x03, 0x91, 0x80, 0x14, 0xB0, 0x0C, 0xD8, 0xCD, 0x37, 0x69, 0x34, 0xFF, 0x0B, 0xC3, 0x43, 0x68, 0x6D, 0x0A, 0xCE, 0x9D, 0x13, 0x36, 0xAE, 0x28, 0x58, 0x6B, 0xE1, 0xE8, 0x76, 0xAA, 0x29, 0x36, 0x25, 0x86, 0x9E, 0x60, 0x5E, 0x5C, 0x1E, 0xDC, 0x3A, 0x1D, 0x5F, 0x5B, 0xA9, 0xC0, 0x08, 0xF4, 0x8C, 0x42, 0x8A, 0x18, 0x53, 0xC0, 0xB7, 0x14, 0x70, 0x03, 0x32, 0x07, 0xEC, 0x60, 0xA1, 0xB0, 0x5D, 0xD1, 0x76, 0xBC, 0xD5, 0x33, 0xE2, 0xC1, 0xD8, 0xF7, 0x93, 0x93, 0xD6, 0xAF, 0x76, 0xE2, 0x02, 0xBA, 0xC6, 0xD8, 0x01, 0xEC, 0x06, 0x3C, 0xA9, 0x2A, 0x0F, 0xC4, 0xC0, 0x37, 0x70, 0x0A, 0x79, 0x13, 0xF0, 0x02, 0xD2, 0x38, 0xB2, 0x69, 0xB4, 0x40, 0x47, 0xA9, 0xCA, 0xB9, 0x34, 0x2A, 0x56, 0xAC, 0x66, 0x24, 0xAA, 0x73, 0xDC, 0xFC, 0x35, 0xAD, 0x54, 0x1B, 0x33, 0x6A, 0x7F, 0x2E, 0xDC, 0x50, 0x9E, 0x36, 0x00, 0x06, 0x0A, 0x57, 0xB3, 0x19, 0x90, 0x8F, 0x90, 0xD0, 0x64, 0x72, 0xED, 0x02, 0x70, 0x26, 0x0D, 0xAA, 0x2D, 0x8E, 0xD3, 0x76, 0x56, 0x15, 0xCA, 0x11, 0x29, 0xA5, 0x57, 0x93, 0xE1, 0xAC, 0xF9, 0x34, 0x5F, 0x5E, 0x60, 0x3B, 0x98, 0xFE, 0x6A, 0x10, 0x25, 0xC7, 0x45, 0xB9, 0x05, 0x08, 0xA5, 0x30, 0x0F, 0x20, 0x03, 0x0D, 0xC0, 0x04, 0xF0, 0x41, 0xF5, 0x6C, 0x32, 0x05, 0xD4, 0x06, 0x52, 0x00, 0xDF, 0xC0, 0x66, 0x39, 0xF9, 0x7C, 0x5A, 0x0D, 0x64, 0xD3, 0x68, 0x89, 0x60, 0x91, 0xE8, 0x98, 0xC7, 0xAF, 0x36, 0x65, 0xEE, 0x13, 0x68, 0x59, 0xF6, 0x21, 0xC5, 0xB0, 0x19, 0xA6, 0x63, 0x3E, 0x8E, 0xCD, 0x06, 0xCC, 0x50, 0xD5, 0x78, 0xDC, 0xDE, 0x32, 0x36, 0xAB, 0x81, 0x19, 0x8E, 0x35, 0xD2, 0x63, 0xAC, 0x0F, 0xD4, 0x5C, 0x1D, 0x07, 0xA2, 0xCE, 0x90, 0x54, 0x3F, 0x7D, 0x16, 0x4E, 0x91, 0xCB, 0x4C, 0x67, 0xB1, 0xFB, 0xFE, 0x2A, 0xC9, 0x16, 0xCA, 0xBF, 0x60, 0xAA, 0x9C, 0x86, 0xFE, 0x4A, 0x81, 0xD2, 0x06, 0xC2, 0x81, 0x32, 0x98, 0x7C, 0x09, 0x60, 0x49, 0x6D, 0x02, 0xC0, 0x15, 0x30, 0x07, 0x64, 0xDF, 0x6D, 0x30, 0x7C, 0x03, 0x71, 0xDC, 0xC8, 0xB4, 0xD9, 0xB9, 0x14, 0xDC, 0x99, 0x91, 0xD9, 0x70, 0xED, 0x2C, 0xC3, 0x39, 0x7A, 0x6F, 0x9C, 0x1D, 0xC5, 0xA0, 0x53, 0x16, 0xE8, 0x23, 0xCE, 0xA8, 0xB1, 0xF5, 0xA5, 0x6C, 0xA8, 0x8F, 0x6E, 0x02, 0xBC, 0x7C, 0x00, 0xE3, 0x7C, 0xCA, 0x63, 0xD4, 0xAD, 0xAD, 0x51, 0xEB, 0xD6, 0xF0, 0xEA, 0xC1, 0xA9, 0x34, 0x5C, 0x77, 0x41, 0x94, 0x1A, 0x20, 0x09, 0xEC, 0x18, 0x14, 0xC0, 0x9C, 0xAB, 0x3D, 0xB0, 0x78, 0xCB, 0x89, 0x1F, 0xF8, 0x53, 0x91, 0xBD, 0x81, 0x30, 0xC0, 0x1D, 0x50, 0xBA, 0x96, 0xEA, 0x5F, 0x15, 0xD9, 0xBE, 0x68, 0xB5, 0xFE, 0xD5, 0xB1, 0x23, 0x24, 0xEC, 0x90, 0xAE, 0x82, 0xD5, 0xD2, 0x10, 0xD0, 0xA9, 0xF8, 0x7E, 0x09, 0xF6, 0x0D, 0xB4, 0xDE, 0xA7, 0x02, 0xEF, 0xE3, 0x2D, 0xD3, 0xA7, 0xA7, 0xD8, 0x23, 0x78, 0x5E, 0x24, 0xEC, 0x3E, 0x91, 0x7A, 0xDF, 0x56, 0x6B, 0x01, 0x62, 0x01, 0x2E, 0x77, 0xB0, 0x89, 0x49, 0x9F, 0x3A, 0x76, 0xEA, 0x0D, 0xE4, 0x02, 0xCC, 0x01, 0x0D, 0x20, 0x68, 0xB5, 0x06, 0x4C, 0xFF, 0x85, 0xD7, 0x45, 0x44, 0x85, 0xD4, 0xB7, 0xE1, 0x0B, 0x1F, 0xBE, 0x5A, 0x32, 0xAF, 0x8B, 0xE8, 0x58, 0x4D, 0xD1, 0x06, 0x5B, 0xA3, 0xFE, 0xA2, 0x26, 0xF9, 0xEA, 0x3B, 0x51, 0x8E, 0x53, 0x28, 0x0C, 0xEE, 0x94, 0xFD, 0x61, 0x55, 0xEC, 0x29, 0xA1, 0xD3, 0xBB, 0xBD, 0x8A, 0x3D, 0x9D, 0x03, 0x95, 0x19, 0x7D, 0x3C, 0x5A, 0xB6, 0xCE, 0x22, 0xBE, 0x7E, 0x8E, 0x69, 0x3F, 0x57, 0xF3, 0xDC, 0xEC, 0x4E, 0x0F, 0x2C, 0x62, 0x16, 0x78, 0x26, 0x3E, 0x31, 0x2B, 0xA0, 0xC6, 0xE8, 0xF5, 0x0B, 0x49, 0xFA, 0x49, 0x1D, 0xCB, 0xFA, 0xE5, 0x62, 0x62, 0x0E, 0x23, 0x8A, 0xFC, 0x24, 0x74, 0x84, 0x00, 0xD9, 0x4F, 0x05, 0x0A, 0x13, 0xAD, 0xF6, 0x02, 0x3C, 0x00, 0x73, 0x60, 0xE7, 0x93, 0xE5, 0x21, 0x80, 0x2F, 0xBE, 0x42, 0xAB, 0xED, 0x6F, 0x90, 0x89, 0xFB, 0x17, 0x3E, 0x96, 0xD5, 0xE3, 0x01, 0x6F, 0x7C, 0x87, 0x9D, 0x90, 0xC0, 0xCA, 0x86, 0xCA, 0x45, 0x09, 0xFC, 0x03, 0x99, 0xBC, 0xB6, 0xDF, 0x63, 0xED, 0x48, 0x69, 0xE5, 0xCF, 0xA7, 0xC5, 0x0A, 0xA6, 0xBD, 0x4E, 0xF0, 0xF2, 0xB9, 0x87, 0x72, 0x2E, 0x47, 0x03, 0x96, 0x40, 0xAE, 0x41, 0xFE, 0x92, 0x44, 0xEC, 0x08, 0x1B, 0xB8, 0xDE, 0x3E, 0x59, 0x35, 0x60, 0x25, 0x60, 0x7E, 0x0B, 0x4D, 0xD0, 0x7D, 0xB4, 0xD6, 0xA0, 0x81, 0xAD, 0x83, 0x06, 0x9C, 0x92, 0x02, 0x05, 0x98, 0x01, 0xEA, 0x00, 0x7F, 0x20, 0x1F, 0xBD, 0x89, 0x90, 0x33, 0x2A, 0x68, 0x35, 0xF9, 0x2B, 0x47, 0xD2, 0x46, 0x7E, 0x3A, 0x27, 0x81, 0xF4, 0xB2, 0xE5, 0x13, 0x61, 0xF0, 0x51, 0xC9, 0x30, 0xE4, 0x58, 0xEB, 0x38, 0x3B, 0x22, 0xD8, 0xCA, 0xED, 0x91, 0x1C, 0xBA, 0x84, 0xCD, 0xCF, 0xFE, 0xEF, 0x3C, 0x23, 0xF2, 0xDE, 0x73, 0x7C, 0x43, 0xCB, 0x7F, 0xA9, 0x15, 0xFB, 0x14, 0xD7, 0x85, 0x01, 0xAA, 0xB0, 0x36, 0x7D, 0x86, 0xF9, 0x4B, 0x37, 0x73, 0xF6, 0x35, 0x1E, 0xE8, 0x81, 0x0D, 0x32, 0xE6, 0x8B, 0x8E, 0x2D, 0xB4, 0x80, 0x50, 0x20, 0x13, 0x28, 0xBB, 0x1B, 0x8A, 0x8A, 0x03, 0xB5, 0x99, 0x80, 0xF0, 0x04, 0xED, 0x0D, 0xB0, 0x27, 0x3E, 0xAF, 0x4C, 0x2C, 0xB3, 0x63, 0x35, 0x3D, 0xEB, 0x5A, 0xD9, 0x91, 0x3F, 0xB3, 0x50, 0x14, 0xB1, 0xE8, 0x86, 0x22, 0x4F, 0x7D, 0x30, 0xCB, 0x0D, 0xF7, 0x8D, 0x37, 0xC7, 0xDA, 0x93, 0xEB, 0x9D, 0x8F, 0xEB, 0x5B, 0x6D, 0xDC, 0x65, 0x0E, 0x04, 0x73, 0xB6, 0x6D, 0xEC, 0x64, 0xCC, 0x7D, 0xBA, 0x3D, 0x20, 0x57, 0x09, 0x64, 0x9C, 0x76, 0x2B, 0x47, 0xCC, 0x32, 0x01, 0x79, 0x3A, 0x45, 0x33, 0x4E, 0x51, 0xF3, 0x70, 0xC9, 0xBD, 0xE2, 0x47, 0x0F, 0xEC, 0x81, 0x0C, 0xF2, 0xA9, 0x65, 0x1F, 0xA4, 0x03, 0x61, 0xF7, 0x43, 0x0E, 0xE3, 0xE2, 0xA7, 0x0D, 0x44, 0x1C, 0xAB, 0xD9, 0x5F, 0x0A, 0xCA, 0x2D, 0xE2, 0xCB, 0xB3, 0xDD, 0x13, 0x2F, 0xF5, 0x71, 0xC5, 0xEA, 0x1F, 0x2E, 0xA7, 0x89, 0x7B, 0x52, 0xEC, 0x69, 0xA7, 0x06, 0xD7, 0xB7, 0xD1, 0x6A, 0xF5, 0x8F, 0x12, 0xE3, 0x38, 0x7D, 0x28, 0x78, 0x8B, 0xB7, 0xB8, 0xEF, 0x95, 0x3A, 0x8B, 0xDD, 0x66, 0x32, 0x90, 0xFE, 0xE4, 0xBF, 0xF4, 0x2C, 0x6F, 0x5B, 0x98, 0xD0, 0x89, 0x75, 0x6D, 0xDD, 0xEB, 0x9A, 0xC5, 0x5D, 0xF6, 0xDE, 0xFE, 0x4B, 0xC8, 0xCD, 0x93, 0xB3, 0xC7, 0x53, 0x90, 0x34, 0x10, 0x06, 0x64, 0x01, 0xD5, 0xA7, 0x4C, 0x13, 0xE8, 0x59, 0xC9, 0x54, 0x00, 0x39, 0x55, 0x1B, 0x4F, 0x70, 0x6A, 0x70, 0x32, 0x4E, 0x8F, 0xD5, 0xB0, 0xA0, 0xB5, 0xF7, 0x87, 0x72, 0x81, 0xF8, 0xA7, 0x1B, 0xAC, 0x26, 0x8E, 0xB9, 0x2C, 0x8A, 0x3A, 0x5E, 0xED, 0x6F, 0x70, 0xAC, 0xC2, 0x58, 0xA3, 0xD5, 0xFC, 0xCD, 0xF6, 0x56, 0xC6, 0xCF, 0x84, 0xA9, 0x3E, 0x0A, 0x38, 0xAB, 0xE8, 0x4E, 0x79, 0xD2, 0x25, 0x98, 0xD0, 0x0D, 0xD8, 0x02, 0x36, 0xD7, 0xB5, 0xE6, 0x14, 0xBB, 0x55, 0x58, 0x43, 0x81, 0xED, 0xB7, 0x77, 0xD1, 0x9E, 0xD6, 0x8D, 0x2C, 0x3D, 0x22, 0x6A, 0xCC, 0xBC, 0x15, 0x10, 0x03, 0x74, 0x10, 0x4D, 0x33, 0x03, 0xFC, 0xE4, 0x83, 0xA3, 0x41, 0xC9, 0x37, 0x1D, 0x28, 0xBE, 0xB9, 0x8F, 0xD5, 0xE2, 0xAF, 0x04, 0x11, 0xD0, 0xDC, 0xB3, 0xAE, 0x7D, 0xA7, 0xCC, 0x46, 0x06, 0xB1, 0x15, 0xB4, 0x9A, 0x0A, 0x5A, 0x4D, 0x7B, 0x0B, 0x8C, 0xBE, 0x9E, 0x42, 0xC6, 0x33, 0xD6, 0xD8, 0x25, 0x90, 0x5B, 0x8D, 0x5E, 0x9D, 0x00, 0xFD, 0x34, 0xAE, 0x13, 0x5E, 0xF8, 0xB8, 0x61, 0x25, 0xB7, 0xA8, 0x2B, 0xE9, 0x78, 0x73, 0xD7, 0x54, 0x3A, 0x71, 0x6F, 0x31, 0x18, 0xE1, 0x3A, 0x4E, 0x6F, 0xEA, 0x40, 0xF3, 0x56, 0x60, 0xCD, 0xB3, 0x64, 0x03, 0x91, 0x40, 0xE9, 0xA0, 0x1E, 0xD7, 0xF7, 0x53, 0x31, 0xBB, 0x72, 0xB0, 0x6E, 0x87, 0x9C, 0xD9, 0xB3, 0xAE, 0xD9, 0xBC, 0xA2, 0xC7, 0x6A, 0xF9, 0x97, 0x9F, 0xB9, 0x91, 0xEC, 0xA7, 0x15, 0x57, 0xC2, 0x9A, 0xA5, 0x23, 0x9F, 0x2B, 0x1C, 0x7F, 0x82, 0x09, 0x1F, 0x53, 0xAC, 0xA9, 0x5F, 0x09, 0x1D, 0xF1, 0x27, 0xF9, 0xCA, 0xFD, 0x77, 0xDB, 0xD1, 0xA3, 0x61, 0x2E, 0xAC, 0xD1, 0xB0, 0x89, 0x87, 0x16, 0x9B, 0x2A, 0xFE, 0xFC, 0x15, 0x08, 0xB5, 0x5D, 0x72, 0x0A, 0x3C, 0xEE, 0x51, 0x79, 0x92, 0x46, 0x90, 0x31, 0x50, 0x02, 0x12, 0x40, 0x8C, 0x9D, 0x2A, 0x6F, 0x5B, 0xEC, 0x81, 0x36, 0x60, 0x03, 0x2F, 0xA0, 0xF7, 0x7D, 0x0C, 0x2F, 0x05, 0xD2, 0x1F, 0xE5, 0x04, 0xBB, 0x35, 0x16, 0x96, 0x03, 0xB9, 0x8F, 0xD5, 0xEA, 0xDB, 0x43, 0x33, 0x01, 0xEF, 0x84, 0xCB, 0xD0, 0x30, 0xD6, 0xB6, 0x17, 0x34, 0xF1, 0x2A, 0xB0, 0x4F, 0x55, 0x21, 0xFD, 0xD1, 0x19, 0x5E, 0x79, 0x03, 0xA1, 0x0C, 0x53, 0xCA, 0xF1, 0x74, 0xDD, 0x37, 0x6A, 0xC9, 0x6B, 0x6A, 0xBE, 0x51, 0xCE, 0x6E, 0x40, 0x83, 0x46, 0x07, 0xFC, 0xA9, 0xED, 0xF7, 0x7D, 0xEB, 0x8A, 0xC6, 0x06, 0x64, 0xB0, 0x17, 0x10, 0x5C, 0xAB, 0x9D, 0x13, 0x15, 0x48, 0x03, 0x5A, 0x06, 0x63, 0xD8, 0x35, 0xD0, 0x04, 0xEA, 0xCD, 0x6A, 0xE3, 0x36, 0x3B, 0x70, 0xBE, 0xE9, 0x80, 0x2B, 0x47, 0xDE, 0xB1, 0x5A, 0x43, 0x11, 0x2C, 0x14, 0x68, 0xC1, 0x96, 0x5F, 0x1B, 0xC3, 0xC1, 0x14, 0x53, 0x3A, 0x04, 0x9A, 0x5F, 0x73, 0x88, 0xAB, 0x7D, 0xB7, 0xFC, 0xF7, 0x37, 0x0F, 0x37, 0xE8, 0x3B, 0x74, 0xE7, 0xC2, 0x0F, 0x30, 0x39, 0x42, 0xE8, 0x55, 0x9D, 0xFD, 0xF5, 0x34, 0xBC, 0xD8, 0x57, 0xD9, 0xE5, 0xF1, 0x41, 0xE7, 0xAF, 0xDD, 0x9B, 0x9F, 0x08, 0x8E, 0x3E, 0x52, 0x23, 0x3B, 0x1F, 0x39, 0x3D, 0x1D, 0x93, 0xD0, 0x08, 0x02, 0x64, 0x73, 0xAD, 0x04, 0x44, 0x00, 0x35, 0x80, 0x52, 0xD0, 0x32, 0x08, 0x03, 0x3C, 0xF8, 0xF0, 0xCE, 0x21, 0x8C, 0xBA, 0x9C, 0xE4, 0xBF, 0x40, 0xA8, 0x4D, 0xF7, 0x40, 0x8B, 0xC9, 0xE5, 0x61, 0x5E, 0xB5, 0x7C, 0x10, 0xE5, 0xEA, 0x94, 0x1F, 0xD8, 0x52, 0x30, 0xEC, 0x4E, 0xF9, 0xAE, 0xAB, 0x04, 0x14, 0x29, 0xFC, 0x30, 0x53, 0x5E, 0x2D, 0x39, 0x90, 0x98, 0x0D, 0x67, 0x1A, 0x73, 0xE1, 0xD7, 0x9D, 0xD6, 0xED, 0x7A, 0xAB, 0x06, 0xE7, 0x18, 0xBB, 0xFB, 0xB6, 0x32, 0x93, 0xA3, 0xCE, 0x06, 0x13, 0x14, 0x1A, 0xBD, 0x77, 0x44, 0x17, 0x96, 0x33, 0xDE, 0xB9, 0x55, 0x35, 0x57, 0x11, 0xDB, 0x40, 0x28, 0x50, 0x4C, 0xBA, 0x77, 0xA0, 0xD9, 0x8B, 0x76, 0x03, 0x2A, 0x00, 0xEF, 0x35, 0x21, 0x80, 0x0E, 0xAC, 0xE7, 0x15, 0xA5, 0xD1, 0x90, 0x4A, 0xB4, 0x56, 0x43, 0x54, 0x5B, 0xEE, 0x98, 0x3B, 0x6B, 0x6F, 0x76, 0x3B, 0x4C, 0xB8, 0x13, 0xB9, 0x2D, 0x0E, 0x7F, 0xE4, 0x9B, 0xDE, 0xC1, 0xFB, 0xB9, 0x30, 0x83, 0x52, 0x37, 0xCC, 0x94, 0x0A, 0xA3, 0xD1, 0x03, 0x59, 0x14, 0xB6, 0x0D, 0xF6, 0x85, 0x82, 0xB5, 0x22, 0x7F, 0xFF, 0x52, 0xB1, 0xFD, 0x30, 0x1B, 0xB9, 0x33, 0xC3, 0xF8, 0xF6, 0x0F, 0xA2, 0xA4, 0x93, 0x2B, 0xDE, 0x87, 0xDD, 0x40, 0x9F, 0x61, 0xDB, 0x4C, 0x2E, 0x61, 0xEE, 0x19, 0x15, 0xC8, 0x00, 0x6B, 0x20, 0x98, 0x5C, 0xB2, 0x80, 0x1C, 0xA3, 0x6D, 0x1F, 0xAC, 0x3B, 0x90, 0xED, 0x1B, 0x10, 0x03, 0x68, 0xD7, 0xDD, 0x34, 0x1A, 0xEB, 0xCA, 0x6A, 0x94, 0x0E, 0xFC, 0x72, 0xE2, 0x7A, 0xE8, 0xD5, 0x25, 0x4C, 0x64, 0x3A, 0x3B, 0x88, 0xFC, 0x5A, 0xFA, 0x54, 0x3F, 0x32, 0x1D, 0xE5, 0x94, 0x2E, 0x92, 0x49, 0xD1, 0x63, 0xFB, 0x5A, 0x07, 0x74, 0xFD, 0x24, 0x6D, 0x7B, 0xAC, 0x55, 0xC7, 0x6D, 0x13, 0xEC, 0x39, 0xC3, 0xD2, 0xA3, 0x19, 0x85, 0xCC, 0xA4, 0x3F, 0xA9, 0x68, 0x8C, 0x47, 0x73, 0xE0, 0x24, 0x0C, 0xD3, 0x63, 0x91, 0x53, 0x65, 0xCA, 0x5C, 0xA5, 0x98, 0x3C, 0x26, 0x07, 0x62, 0x03, 0x35, 0x0E, 0xA5, 0xD5, 0x80, 0xEF, 0x71, 0xC9, 0x29, 0x60, 0x3D, 0x08, 0x80, 0xF9, 0x70, 0x3D, 0xC8, 0xC1, 0x89, 0x6E, 0x1C, 0xA3, 0x29, 0x7A, 0x19, 0x8B, 0x21, 0x0F, 0xF7, 0x91, 0x0A, 0xD6, 0xB2, 0x09, 0x86, 0x1A, 0x26, 0x94, 0xA1, 0xD5, 0xB8, 0x56, 0x73, 0x3E, 0x5E, 0xE1, 0x02, 0x9E, 0x23, 0x65, 0x2F, 0x16, 0xF8, 0x4F, 0x0F, 0x99, 0x0F, 0x3A, 0x3E, 0x47, 0xA6, 0x4C, 0x62, 0x58, 0xE0, 0x5F, 0xA2, 0x3C, 0xFA, 0x98, 0xF7, 0x74, 0xF2, 0x0F, 0x18, 0x74, 0x3B, 0x83, 0x32, 0x4C, 0xD8, 0xBD, 0x15, 0x5F, 0x3B, 0x98, 0x63, 0x72, 0x67, 0xEC, 0xC1, 0xE6, 0x72, 0xD2, 0xA3, 0x75, 0x3C, 0x66, 0xFC, 0x5D, 0x56, 0x00, 0x56, 0x77, 0x91, 0x91, 0x32, 0x1F, 0x6E, 0x03, 0x66, 0x80, 0x16, 0xB0, 0x1D, 0xAF, 0x64, 0x02, 0x2E, 0x77, 0x93, 0x2A, 0x37, 0x1A, 0xCD, 0xBE, 0x6B, 0x94, 0x4A, 0x5D, 0xBE, 0x35, 0x9D, 0x5A, 0xD0, 0xF0, 0xA9, 0x51, 0x94, 0x46, 0x8C, 0x5A, 0xF3, 0xDB, 0x10, 0x72, 0x7C, 0x6A, 0xAF, 0x32, 0xD8, 0x11, 0x55, 0xE1, 0xDE, 0x2E, 0xCC, 0x23, 0x69, 0x20, 0xB8, 0x7F, 0xD7, 0x7D, 0x7A, 0xE0, 0xF1, 0xAA, 0x0A, 0xD0, 0x00, 0xD6, 0xA5, 0xCB, 0x2E, 0x00, 0x53, 0x2F, 0x2F, 0x65, 0xB0, 0x1E, 0x6C, 0xC0, 0xE4, 0xEE, 0x28, 0x17, 0x8C, 0xFA, 0x2B, 0xAF, 0x0E, 0x40, 0x34, 0xC0, 0x87, 0xCD, 0x7D, 0x30, 0x81, 0x8A, 0xF9, 0x75, 0x15, 0xD8, 0xF1, 0xA4, 0x29, 0xE8, 0xBF, 0xD2, 0x14, 0x72, 0xD1, 0x6A, 0xFE, 0xD7, 0xEB, 0x6E, 0x1F, 0xE8, 0x9F, 0xCF, 0x49, 0xA6, 0x58, 0xD5, 0x50, 0x23, 0xB9, 0xD9, 0x85, 0x1D, 0x17, 0x78, 0x4D, 0xFF, 0x43, 0xAA, 0xDC, 0x58, 0x4F, 0x1F, 0xDF, 0x5A, 0x0A, 0x0F, 0xDA, 0xB7, 0x7A, 0x81, 0xB2, 0x22, 0xC9, 0x9F, 0xA0, 0x2F, 0xB3, 0x41, 0x78, 0x32, 0x0E, 0xC0, 0x0C, 0x58, 0x57, 0x2E, 0x01, 0x52, 0xD7, 0x2E, 0x55, 0x48, 0x0B, 0x40, 0x1D, 0xA0, 0xE3, 0xEC, 0x6A, 0xFE, 0x7E, 0xD5, 0xF8, 0x0F, 0xEC, 0xE9, 0x81, 0x19, 0xFB, 0xBE, 0x85, 0x79, 0x02, 0x1D, 0x40, 0x0D, 0xBC, 0xEE, 0x74, 0xAF, 0xCA, 0x3B, 0xDB, 0xA6, 0x8E, 0xD5, 0x2C, 0xFE, 0xBA, 0x50, 0x8E, 0x47, 0xAB, 0xA1, 0xAC, 0xC9, 0xD9, 0x7D, 0x17, 0x65, 0xBC, 0x7B, 0x82, 0xFF, 0x9D, 0x90, 0x0A, 0xC5, 0x6E, 0xA1, 0xFA, 0x96, 0xB6, 0x53, 0x3A, 0x69, 0xDF, 0x5D, 0x74, 0xB1, 0x2E, 0x01, 0x32, 0x27, 0x37, 0xFD, 0x5F, 0x25, 0x35, 0xFA, 0x26, 0x94, 0x5F, 0x8D, 0xB6, 0x1F, 0xAB, 0x85, 0x3E, 0x7E, 0x5C, 0x07, 0xA4, 0x80, 0x3D, 0x90, 0x05, 0x78, 0x3D, 0xCA, 0x9A, 0x05, 0x84, 0x0C, 0x5E, 0xD1, 0x8D, 0x75, 0xCB, 0x4C, 0x5B, 0xFD, 0x4B, 0x85, 0xAE, 0x9E, 0x92, 0xEF, 0x75, 0x37, 0x0E, 0x4B, 0x3B, 0x56, 0xCB, 0x2F, 0x0A, 0x5A, 0xEA, 0xDF, 0x09, 0x57, 0x4B, 0x2E, 0x69, 0x4D, 0xB3, 0x8D, 0xA1, 0x82, 0x06, 0x82, 0x61, 0x3B, 0xA7, 0x84, 0x44, 0xA8, 0x73, 0xF5, 0x78, 0x89, 0xEC, 0xB8, 0x64, 0x18, 0x7D, 0x63, 0x7D, 0x00, 0xE0, 0xB3, 0x8C, 0xE7, 0xE5, 0x2C, 0x92, 0x73, 0x48, 0x6B, 0xC3, 0xA8, 0xE4, 0xB1, 0x97, 0xED, 0x0C, 0x29, 0x63, 0x41, 0xEF, 0xD6, 0xE3, 0xF6, 0xC8, 0x06, 0x5C, 0x81, 0xD0, 0x5F, 0xC7, 0xF7, 0x3C, 0x5D, 0xDD, 0x4F, 0xB5, 0x6D, 0xBE, 0xA1, 0xAA, 0x93, 0xA3, 0x04, 0x98, 0xDF, 0x0D, 0xCA, 0x35, 0x00, 0x69, 0x80, 0xAF, 0x64, 0x00, 0x56, 0x40, 0xAC, 0x79, 0xF3, 0x58, 0xAD, 0x50, 0x33, 0x95, 0xF1, 0x4D, 0xD4, 0x30, 0x1B, 0xA1, 0x8C, 0x11, 0x8C, 0xD7, 0x0D, 0x97, 0x7F, 0x16, 0x92, 0xB8, 0xCA, 0x27, 0xE5, 0x07, 0x56, 0xDB, 0xFF, 0x68, 0xEA, 0x70, 0xA5, 0x5F, 0xCD, 0x0E, 0x6E, 0x06, 0x50, 0x27, 0x82, 0x41, 0xC7, 0xA0, 0x3B, 0x41, 0x58, 0xE4, 0x75, 0xE7, 0xC9, 0x70, 0xF1, 0x39, 0x5E, 0xC0, 0xDB, 0x09, 0xDE, 0x0B, 0xC8, 0x47, 0x7B, 0x34, 0xD9, 0x26, 0xCE, 0xCE, 0x5D, 0x92, 0xC1, 0x51, 0xBA, 0x2F, 0x6E, 0x17, 0xB1, 0x16, 0x10, 0x8C, 0xA6, 0x3A, 0x2D, 0xC3, 0x83, 0xD5, 0x60, 0xDD, 0x5A, 0x0E, 0xDA, 0xF7, 0x9B, 0x42, 0xBF, 0x4C, 0xD0, 0x6A, 0xFD, 0x09, 0x79, 0xA7, 0xF4, 0x97, 0x7E, 0x95, 0xB6, 0x2F, 0xC1, 0x8E, 0x72, 0xC5, 0x70, 0x10, 0x41, 0x65, 0x92, 0x16, 0x4E, 0x2F, 0xE2, 0x97, 0x97, 0x28, 0xF5, 0x51, 0x8E, 0x8F, 0x93, 0xFF, 0x3F, 0xD1, 0xB1, 0x54, 0xA0, 0x67, 0x13, 0x6C, 0x9E, 0x23, 0xEC, 0x77, 0x48, 0xF0, 0xB1, 0x28, 0xBD, 0x70, 0xFB, 0x58, 0x54, 0x37, 0x2B, 0x34, 0xA9, 0x44, 0x75, 0x89, 0x51, 0x47, 0x03, 0x8B, 0x83, 0x6C, 0x1F, 0x9F, 0x06, 0x77, 0x1F, 0x2E, 0x05, 0x74, 0xAC, 0x53, 0xCD, 0x03, 0xF0, 0x41, 0xB1, 0x7C, 0x40, 0x81, 0x3E, 0xAE, 0x2A, 0x40, 0x6C, 0x1E, 0xBE, 0xD1, 0xFC, 0x81, 0x6D, 0xBE, 0x32, 0x56, 0x73, 0xE8, 0x2B, 0xAF, 0xF6, 0x4F, 0xF3, 0x30, 0xB6, 0xE2, 0x8C, 0xB1, 0x05, 0xC7, 0xF4, 0x80, 0xBF, 0xC3, 0x1D, 0x5E, 0xA2, 0xCA, 0x80, 0xAB, 0x4A, 0x92, 0xDE, 0xA1, 0xA7, 0xAA, 0x91, 0xDB, 0xD7, 0x51, 0x1A, 0x61, 0x15, 0xC3, 0xA0, 0xF2, 0x8E, 0x12, 0x50, 0x77, 0x64, 0x27, 0xAF, 0xC2, 0xD7, 0x58, 0xAB, 0x01, 0x5D, 0xD4, 0xFD, 0xE4, 0x92, 0xBD, 0x9A, 0xB4, 0x7E, 0xC9, 0x72, 0x30, 0x7F, 0xD6, 0xCE, 0x5A, 0xB9, 0x9E, 0xF6, 0xDC, 0x1D, 0x74, 0xD2, 0xDE, 0x2E, 0x5B, 0x67, 0xCA, 0xA9, 0x02, 0xD6, 0x83, 0x47, 0x6E, 0x2C, 0x03, 0xF0, 0x0D, 0xC4, 0xBC, 0xA9, 0xB5, 0x68, 0xB5, 0xFD, 0x97, 0x3A, 0x52, 0x7D, 0xF6, 0xDD, 0x3E, 0x21, 0x10, 0x97, 0x3D, 0x21, 0x07, 0x99, 0x52, 0x2C, 0xFB, 0x66, 0xE8, 0x86, 0x7F, 0x52, 0x65, 0x73, 0xEF, 0x7C, 0x76, 0x83, 0x9D, 0x27, 0xBF, 0x93, 0x52, 0x08, 0x5C, 0x21, 0x00, 0xC6, 0xBB, 0x19, 0x46, 0xF1, 0x62, 0xC8, 0x83, 0x25, 0xB0, 0x97, 0x8B, 0x2D, 0x14, 0xD0, 0x75, 0x8B, 0xF3, 0x51, 0xD9, 0xFD, 0x55, 0xED, 0x5E, 0x39, 0x60, 0x5C, 0x80, 0xFB, 0xB2, 0x31, 0x1E, 0xC6, 0x5C, 0x39, 0xC0, 0x03, 0xC8, 0x7C, 0x23, 0x2D, 0xD4, 0x8A, 0x19, 0xB8, 0x00, 0x36, 0xD8, 0xFA, 0xAF, 0x48, 0x0B, 0x9D, 0xF5, 0x45, 0xAB, 0xC9, 0x5F, 0x16, 0xFA, 0xDE, 0xF5, 0x57, 0x7E, 0x39, 0x83, 0xAC, 0x90, 0xB0, 0x10, 0xA5, 0x7F, 0xB8, 0x2D, 0x28, 0xB2, 0xA3, 0x3B, 0xBE, 0x85, 0x68, 0x42, 0xCC, 0x56, 0xAF, 0xD5, 0x38, 0x3C, 0x92, 0x56, 0xB3, 0x31, 0x57, 0x08, 0xC0, 0x7E, 0x13, 0x2D, 0xB4, 0x28, 0x5C, 0x22, 0x57, 0x32, 0x58, 0x9C, 0x09, 0xD7, 0x01, 0x9C, 0x9C, 0xBB, 0xA0, 0x87, 0x1B, 0xB0, 0x1E, 0xD4, 0x60, 0x03, 0x30, 0x89, 0x9C, 0x68, 0xA0, 0x2D, 0x2E, 0x8B, 0xB7, 0x13, 0x51, 0xE4, 0xF6, 0x79, 0xBA, 0x01, 0x0C, 0xD6, 0xBA, 0x02, 0xED, 0x40, 0x05, 0x10, 0x1B, 0xD8, 0x7D, 0xFB, 0x93, 0x16, 0x5F, 0x91, 0x33, 0xD6, 0xF4, 0xCF, 0xBF, 0x82, 0x8B, 0x46, 0x33, 0x91, 0xFA, 0x25, 0xC5, 0x28, 0x2E, 0x03, 0x98, 0x6E, 0x02, 0x27, 0xF8, 0xEA, 0x49, 0xB0, 0xD8, 0xD4, 0xEE, 0x7B, 0x76, 0x03, 0xF9, 0x79, 0x7B, 0x76, 0x9E, 0x12, 0x63, 0x1B, 0xB8, 0xCD, 0xA9, 0x3E, 0x7F, 0xD5, 0x35, 0x71, 0x44, 0x75, 0x8C, 0x3B, 0x5C, 0x9F, 0xA0, 0xD9, 0x29, 0x9C, 0xA8, 0x23, 0x2B, 0xEA, 0xC7, 0x08, 0x80, 0xEA, 0x93, 0x4A, 0xE9, 0xF7, 0x36, 0x50, 0x4E, 0x61, 0xD0, 0xFD, 0xCB, 0xF3, 0xB5, 0xD3, 0x09, 0x61, 0x29, 0x20, 0x0D, 0xA4, 0xDC, 0x39, 0x6C, 0xA9, 0x40, 0x34, 0x60, 0x05, 0x6C, 0xC7, 0x9B, 0x35, 0x0F, 0x97, 0x02, 0xA5, 0xB4, 0x9A, 0x7D, 0xFE, 0x0E, 0xB3, 0xC9, 0x28, 0xB2, 0x18, 0x7D, 0x07, 0xC5, 0x7E, 0x23, 0x8C, 0x90, 0xF8, 0x6C, 0x0A, 0xC8, 0x68, 0xF3, 0x6D, 0x4C, 0xF8, 0x7E, 0x62, 0x06, 0xF6, 0x0B, 0xCB, 0xED, 0x3A, 0xB7, 0xCA, 0x6D, 0x40, 0x7E, 0xB0, 0x93, 0x06, 0xBE, 0xEC, 0x4E, 0x49, 0xF3, 0x64, 0x08, 0x8B, 0x85, 0x30, 0xE3, 0xB1, 0xD8, 0xCC, 0xDF, 0xB9, 0x82, 0x56, 0x5B, 0xEE, 0x55, 0x87, 0x5B, 0x44, 0x16, 0x27, 0xF8, 0xD5, 0x90, 0x90, 0xE9, 0x46, 0x76, 0xFA, 0xDB, 0xEF, 0x0D, 0x98, 0x3C, 0x21, 0xB3, 0x0D, 0x54, 0x8C, 0x1B, 0x63, 0x01, 0x32, 0x0F, 0x5B, 0x01, 0x4B, 0x60, 0x07, 0x70, 0xE5, 0x68, 0xC1, 0x6A, 0xFE, 0x67, 0x06, 0xE5, 0xA6, 0xF8, 0x02, 0x3D, 0x8F, 0x02, 0x6E, 0xD4, 0x07, 0xB5, 0xC4, 0xC1, 0x45, 0x12, 0xFE, 0x32, 0xBB, 0x73, 0xFD, 0xCA, 0x68, 0xB5, 0xF8, 0x4D, 0x07, 0x59, 0xA7, 0x07, 0xF2, 0x36, 0xC0, 0xFB, 0x57, 0x0E, 0x8A, 0x4D, 0x89, 0xB5, 0x62, 0x2C, 0x12, 0xC3, 0x62, 0x70, 0xA5, 0xCB, 0x1B, 0xBF, 0xFD, 0x59, 0x75, 0x2C, 0xE8, 0xD0, 0xBC, 0x22, 0xC1, 0xEB, 0xEA, 0xD6, 0xB0, 0x17, 0xF7, 0xBB, 0xE3, 0xB9, 0xB0, 0x64, 0x4B, 0x8F, 0xB9, 0xB5, 0xFB, 0xC4, 0x79, 0x02, 0x38, 0xF5, 0xE4, 0x05, 0x54, 0x4E, 0x06, 0x4D, 0x0D, 0x14, 0x58, 0xC6, 0x72, 0x40, 0xC0, 0xEA, 0x4E, 0xB9, 0x31, 0xA1, 0xD5, 0xE0, 0x54, 0x13, 0xD3, 0xCF, 0x5B, 0x94, 0x71, 0xA7, 0x95, 0xAE, 0x1D, 0xB3, 0xF7, 0x32, 0x53, 0x3B, 0x27, 0x8B, 0xAC, 0xEE, 0x96, 0x9F, 0xF2, 0x8C, 0xB5, 0x90, 0x53, 0xDF, 0x07, 0x03, 0xB1, 0xA6, 0x72, 0xEF, 0x9F, 0x5C, 0x1A, 0xE3, 0xA4, 0x3D, 0x39, 0xB9, 0x75, 0x7C, 0x33, 0xA7, 0x74, 0xBD, 0x6E, 0x5F, 0x78, 0xE5, 0x6D, 0x35, 0x1F, 0x77, 0xDA, 0x1E, 0xAB, 0xD9, 0xCF, 0x6F, 0x4D, 0x8D, 0xC8, 0x2D, 0xC7, 0x78, 0x15, 0x4C, 0xE8, 0xA3, 0xAF, 0x0C, 0x30, 0x01, 0x82, 0xB5, 0x66, 0x0D, 0xC4, 0xD8, 0x77, 0xD9, 0x60, 0xB3, 0x21, 0x18, 0xE0, 0x03, 0x35, 0xC0, 0x4E, 0x61, 0x0A, 0xAD, 0x96, 0xDF, 0x29, 0x37, 0xAD, 0xFF, 0x47, 0x38, 0x98, 0xEB, 0xB6, 0x5B, 0x8F, 0xEC, 0x7D, 0x25, 0x75, 0xAB, 0xAF, 0x53, 0xAE, 0xF5, 0x15, 0x0B, 0x65, 0x2E, 0x31, 0x1D, 0x7F, 0x02, 0xEF, 0x2C, 0x0C, 0xA4, 0x33, 0x19, 0xD9, 0x94, 0xB2, 0xEF, 0x86, 0x64, 0x9B, 0x21, 0xBB, 0x3B, 0x20, 0x70, 0x67, 0x59, 0x43, 0x5F, 0xE0, 0x43, 0xC8, 0xC0, 0xEF, 0x4F, 0xBC, 0xEF, 0x30, 0xDA, 0x1B, 0x01, 0x8B, 0x7A, 0x73, 0x4B, 0xDA, 0xB7, 0x7C, 0x5A, 0xD6, 0x7D, 0x68, 0x75, 0xBB, 0x5B, 0x62, 0x66, 0x0F, 0x04, 0x38, 0x8E, 0x4D, 0x03, 0x62, 0x03, 0x59, 0xFC, 0xE5, 0x69, 0xB5, 0xFA, 0x16, 0xB4, 0x9D, 0xB4, 0x1A, 0x1B, 0x49, 0xC7, 0xA4, 0x7E, 0x19, 0x0E, 0x3C, 0x6D, 0x28, 0x7F, 0xA8, 0x8D, 0xCA, 0xAF, 0xB1, 0xDA, 0xD5, 0xF0, 0xED, 0x8E, 0x20, 0xF3, 0x6F, 0x2F, 0x67, 0x45, 0x04, 0x94, 0xF5, 0x04, 0x8E, 0xEF, 0xF4, 0x34, 0x52, 0x61, 0x21, 0x8C, 0xF1, 0x12, 0xAF, 0xCF, 0xED, 0x3D, 0xC6, 0x32, 0x09, 0x44, 0x00, 0xB9, 0x6E, 0xE3, 0x55, 0xFD, 0x04, 0x88, 0xFC, 0x48, 0x45, 0x68, 0x3E, 0x2A, 0x3A, 0x1E, 0x00, 0xF7, 0x9B, 0x35, 0xE0, 0xBE, 0xB1, 0x05, 0xF0, 0x0D, 0x98, 0x02, 0x7B, 0x5E, 0x29, 0x05, 0x5C, 0x80, 0xE8, 0x79, 0xC5, 0x69, 0xB5, 0xC9, 0x20, 0x52, 0xA1, 0xD5, 0x90, 0xA4, 0xD8, 0x0A, 0xFB, 0xB6, 0x41, 0x39, 0x44, 0x05, 0xF2, 0xF0, 0x82, 0x4F, 0xBB, 0x85, 0x69, 0xF2, 0x77, 0xBA, 0xFC, 0xBE, 0x8E, 0xEC, 0x48, 0x9F, 0x99, 0x09, 0xC7, 0x65, 0x2A, 0xD9, 0xB3, 0x8D, 0xA9, 0xC5, 0x57, 0x2C, 0x14, 0x56, 0x8B, 0xD3, 0xEC, 0xE0, 0x74, 0xEE, 0x78, 0x1A, 0x88, 0x2D, 0xDA, 0x29, 0x81, 0xD4, 0x01, 0xFF, 0x1B, 0x0B, 0xEE, 0xAE, 0xE8, 0xFD, 0xDE, 0x27, 0xF7, 0xC6, 0xE9, 0x05, 0xF7, 0xD9, 0x0D, 0x16, 0x90, 0x36, 0x8B, 0x7B, 0xB0, 0xA6, 0x14, 0xF0, 0x05, 0x98, 0x02, 0xBB, 0xD8, 0x91, 0x1A, 0xB0, 0x41, 0xF0, 0xCD, 0x3D, 0x56, 0x8B, 0x85, 0x1B, 0x95, 0x3F, 0x33, 0x94, 0xBB, 0x5D, 0x17, 0x8E, 0x9E, 0x31, 0x19, 0x52, 0x53, 0xA8, 0x67, 0xAE, 0x97, 0xF2, 0x7E, 0xC8, 0x63, 0x35, 0x2D, 0x8E, 0x6E, 0x16, 0x0B, 0x38, 0xA0, 0x41, 0x1B, 0xB2, 0x5B, 0x36, 0x87, 0x23, 0xB6, 0xC4, 0x7A, 0x82, 0x2A, 0x8F, 0xA7, 0xA8, 0xE4, 0x3E, 0xAF, 0x39, 0x11, 0xF7, 0xA7, 0xE4, 0x5C, 0x66, 0x4C, 0x91, 0xFE, 0xBC, 0xCD, 0x01, 0xAF, 0xF7, 0xE8, 0x32, 0xBF, 0xC7, 0xCC, 0x5E, 0xC0, 0xD9, 0x76, 0x6A, 0xC0, 0x5F, 0x70, 0x03, 0xE6, 0xC0, 0x6E, 0xE0, 0xBA, 0x95, 0xC2, 0x6A, 0xFB, 0x2B, 0x61, 0xC9, 0xD8, 0x5F, 0x83, 0x0C, 0xD1, 0xBA, 0x0B, 0xF5, 0x3A, 0xE6, 0x58, 0x9A, 0xF0, 0x34, 0x46, 0x4D, 0x10, 0xDD, 0xFE, 0xA5, 0xE7, 0xD7, 0x8F, 0x20, 0x7A, 0x2B, 0xAB, 0xF0, 0xEE, 0x90, 0x00, 0xEB, 0xC9, 0xA8, 0x21, 0x72, 0x14, 0x6D, 0xF2, 0x2C, 0xEE, 0xE7, 0xA2, 0x13, 0x27, 0x70, 0xCE, 0x1C, 0xA5, 0x56, 0xC0, 0x7A, 0xB0, 0x00, 0x31, 0x3E, 0x3C, 0xD1, 0xE5, 0x19, 0xBF, 0x97, 0x2D, 0xFC, 0x9C, 0x2E, 0x6C, 0x3D, 0x95, 0xC7, 0x0B, 0x38, 0x25, 0xD9, 0x1B, 0xC8, 0x1E, 0x04, 0xE0, 0x09, 0x88, 0x03, 0x4B, 0x80, 0xDD, 0x40, 0x35, 0xAD, 0x26, 0x7F, 0x3E, 0xC9, 0xDA, 0xF9, 0x2D, 0xCE, 0xB4, 0x1A, 0x95, 0x32, 0xF2, 0x43, 0xE6, 0x37, 0x35, 0x4B, 0xF7, 0x46, 0x08, 0x22, 0x85, 0xE9, 0xCB, 0x8F, 0x90, 0x93, 0xFE, 0x0A, 0x0C, 0x51, 0xE8, 0x3D, 0xB1, 0x28, 0xF9, 0x25, 0x2E, 0x2B, 0x0B, 0x1A, 0x01, 0x26, 0xB4, 0xF1, 0xAA, 0x7A, 0x72, 0x8D, 0x37, 0x7E, 0x00, 0xDB, 0xEB, 0x35, 0x0E, 0x73, 0x71, 0x20, 0x01, 0x11, 0x80, 0x18, 0xA0, 0x79, 0xF4, 0x37, 0x7E, 0x57, 0x22, 0x3F, 0xC5, 0x15, 0xE5, 0x77, 0xCF, 0xA1, 0x92, 0xF9, 0x0B, 0x26, 0x90, 0x54, 0x87, 0x36, 0xA0, 0x6A, 0xA0, 0x80, 0x17, 0xB0, 0xD9, 0xE5, 0xB0, 0xF1, 0x69, 0x09, 0xD0, 0x9B, 0x56, 0x53, 0x74, 0x84, 0x5D, 0xFB, 0x9D, 0xA1, 0xF4, 0x95, 0xD0, 0x6A, 0x50, 0x55, 0x89, 0x9C, 0x82, 0x8D, 0xFE, 0x57, 0xDC, 0xFD, 0x2A, 0x7B, 0xE5, 0x9C, 0x3C, 0x32, 0x91, 0xFB, 0xB4, 0xC1, 0x3E, 0x4D, 0x1F, 0x78, 0x89, 0x9F, 0xFD, 0xCE, 0x19, 0x71, 0xA4, 0x65, 0x98, 0xF3, 0x70, 0x0B, 0xBA, 0xEF, 0x7D, 0xB7, 0xC8, 0xE8, 0x3D, 0x70, 0x26, 0xAD, 0x5D, 0x7D, 0x4C, 0x58, 0x39, 0xC9, 0x2C, 0xF3, 0x7D, 0xF2, 0x98, 0x4F, 0x83, 0x5F, 0x9F, 0x98, 0x42, 0xDC, 0xA9, 0xB9, 0xC5, 0xE2, 0x91, 0x1E, 0x14, 0xB0, 0xE6, 0x78, 0x99, 0x0E, 0xF8, 0x02, 0x92, 0x2E, 0xC7, 0x33, 0xD6, 0xEC, 0xAF, 0x82, 0x65, 0xC5, 0x30, 0x17, 0xEA, 0x03, 0x64, 0xC2, 0x81, 0xCC, 0xB6, 0x31, 0x0C, 0xEA, 0xC0, 0xC6, 0x6A, 0x55, 0xCC, 0x89, 0xBD, 0x7B, 0x59, 0xFA, 0x6F, 0x47, 0xDC, 0x79, 0x8E, 0x6B, 0xC6, 0x20, 0xE8, 0xBA, 0xC3, 0x16, 0xD5, 0xAC, 0xFB, 0x07, 0x34, 0x47, 0xBD, 0x28, 0xA6, 0x60, 0xC8, 0x7F, 0xA2, 0xC3, 0x3E, 0x61, 0x19, 0xD6, 0x2C, 0xD0, 0x71, 0x53, 0x3C, 0x3C, 0xD2, 0x99, 0x99, 0xBC, 0x24, 0xF6, 0x23, 0x8A, 0x3E, 0x58, 0x79, 0x2B, 0x57, 0x57, 0x3E, 0xA9, 0x6B, 0x72, 0xA7, 0xAE, 0xED, 0x7A, 0x52, 0xD7, 0x36, 0x60, 0x02, 0xEC, 0x0D, 0xE8, 0x95, 0xB9, 0x03, 0xA3, 0x51, 0xA6, 0x74, 0xFE, 0x56, 0x99, 0x28, 0x3C, 0x33, 0x44, 0x3F, 0x4B, 0x1D, 0x39, 0x12, 0xBE, 0xC7, 0x4D, 0xD5, 0x30, 0x88, 0x08, 0x83, 0x2B, 0x77, 0xC7, 0x02, 0x56, 0x56, 0x9F, 0xDC, 0x52, 0x9E, 0x24, 0x83, 0xFE, 0xB4, 0x39, 0x9B, 0x17, 0xE0, 0x3A, 0x70, 0xA0, 0xB9, 0x67, 0x07, 0xCC, 0x5B, 0x06, 0x13, 0xBA, 0xFC, 0x64, 0xF7, 0xB9, 0x0C, 0x36, 0x5E, 0x61, 0xBB, 0xAB, 0x3A, 0xA6, 0xE8, 0x78, 0x3A, 0x16, 0xBC, 0xAD, 0xA1, 0x06, 0x19, 0x03, 0x19, 0xD8, 0x23, 0x14, 0xE3, 0x40, 0x2F, 0xA0, 0x06, 0xEE, 0x4F, 0x5C, 0x5F, 0xE7, 0x93, 0x01, 0x95, 0xC7, 0x68, 0x6F, 0xCB, 0x82, 0xF9, 0x1B, 0x27, 0xA5, 0x92, 0x05, 0x9B, 0xC0, 0x4C, 0xCC, 0x62, 0xDD, 0xC6, 0x6A, 0x56, 0xB2, 0x3C, 0x02, 0x01, 0xB4, 0x9A, 0x72, 0x3D, 0xE4, 0x52, 0x3B, 0x96, 0x39, 0x62, 0x61, 0x0A, 0xF8, 0x06, 0xC2, 0xE7, 0xF2, 0xB2, 0x78, 0x87, 0x80, 0xD5, 0x72, 0x06, 0x97, 0x25, 0xA5, 0xC1, 0x7F, 0x63, 0xAC, 0x4F, 0x72, 0x9B, 0x8D, 0xBF, 0x72, 0xDD, 0xED, 0xE0, 0x94, 0x46, 0x48, 0x60, 0x3D, 0xDD, 0x6A, 0xAC, 0x06, 0xF6, 0x2F, 0x89, 0xEF, 0xA7, 0xC6, 0x5D, 0xE3, 0x5F, 0x12, 0xDF, 0x0B, 0xA0, 0x45, 0x4D, 0x69, 0xB5, 0xAB, 0xA9, 0xB1, 0xA0, 0x9F, 0x6C, 0x7C, 0xD9, 0x2E, 0x1B, 0xF2, 0x60, 0x92, 0x70, 0x2E, 0x23, 0x34, 0xE5, 0xAB, 0xF7, 0x1F, 0x8C, 0xA6, 0x57, 0xE6, 0xDA, 0x70, 0x9F, 0x63, 0x93, 0x39, 0xC3, 0x5F, 0x13, 0x15, 0x37, 0x20, 0x65, 0x10, 0x80, 0x6F, 0x60, 0xF7, 0xE0, 0x08, 0x04, 0xB0, 0xBC, 0x8B, 0x5E, 0xE6, 0xB1, 0xFD, 0xC9, 0x1D, 0x8E, 0x09, 0xB4, 0x32, 0xF3, 0xF3, 0x1F, 0x3D, 0x40, 0xAB, 0x07, 0xEB, 0xC9, 0x6A, 0x1B, 0x68, 0x0C, 0x7C, 0x90, 0x80, 0xF7, 0xDD, 0xC7, 0x47, 0x07, 0xA2, 0xB7, 0x40, 0x69, 0x0E, 0x5C, 0x6F, 0x33, 0xEB, 0x99, 0xA0, 0x4F, 0x57, 0x63, 0x57, 0x81, 0x48, 0x90, 0xCF, 0x3C, 0x43, 0xB8, 0xC0, 0xD4, 0x1B, 0xD7, 0xAA, 0xF1, 0x1A, 0x95, 0xE4, 0x7B, 0xC6, 0xBD, 0x7B, 0xBF, 0x39, 0x8D, 0x60, 0x7D, 0x3B, 0xE5, 0x2B, 0xC7, 0x53, 0xC3, 0xFB, 0x54, 0x02, 0xBB, 0x80, 0x75, 0x6D, 0xA4, 0x4C, 0x1B, 0xE8, 0x73, 0x47, 0x5C, 0x74, 0x59, 0x24, 0x4B, 0xEB, 0xE8, 0xDF, 0xE2, 0x2A, 0x75, 0xE9, 0x47, 0x58, 0xBC, 0x6D, 0xC2, 0x1F, 0x91, 0x57, 0x1D, 0xEC, 0x81, 0x3C, 0x33, 0xF4, 0x71, 0x77, 0x96, 0x03, 0x5E, 0xC0, 0xAE, 0x67, 0x86, 0xAE, 0x77, 0x86, 0x5E, 0x7D, 0x8D, 0xF3, 0x28, 0xB9, 0x2B, 0xF5, 0x35, 0xDB, 0x71, 0xDA, 0x9F, 0x80, 0x5E, 0x34, 0xAC, 0xD6, 0xD5, 0x57, 0xA3, 0xA4, 0xA8, 0xC7, 0x27, 0x69, 0x72, 0x25, 0xAA, 0xD8, 0xF9, 0xDA, 0xEA, 0x80, 0x6F, 0x60, 0x8D, 0xD5, 0x7C, 0x01, 0x3B, 0x00, 0xBA, 0x6F, 0xD6, 0xA5, 0xEB, 0xCA, 0x4F, 0x7A, 0xC4, 0x66, 0xA3, 0x11, 0x89, 0x3E, 0x41, 0x9D, 0x3B, 0x89, 0x76, 0xBD, 0x0A, 0xC2, 0xF9, 0x48, 0x56, 0xE7, 0xC0, 0x06, 0xFE, 0xAF, 0xB1, 0xB6, 0x9F, 0xB1, 0x76, 0xEC, 0xFB, 0x28, 0x0F, 0xAF, 0x79, 0xD3, 0x68, 0xB5, 0x5C, 0x57, 0xF0, 0xB8, 0x5A, 0xBE, 0x9B, 0x7C, 0x88, 0x4E, 0xF6, 0x5D, 0xA1, 0x3D, 0x61, 0x40, 0xF8, 0xC4, 0x15, 0xDE, 0xF0, 0x8A, 0x7D, 0xB5, 0xCC, 0x8B, 0xDB, 0x93, 0xAB, 0x27, 0xD7, 0x63, 0x25, 0x5D, 0xA3, 0x77, 0x6A, 0xEC, 0xE6, 0xC3, 0x81, 0xF5, 0xC0, 0x4E, 0x07, 0x0B, 0x96, 0x18, 0x33, 0x1F, 0x08, 0xA0, 0x93, 0x7A, 0x6F, 0xFC, 0x1C, 0xA3, 0x39, 0x1C, 0xD4, 0x4F, 0x5F, 0x20, 0x0E, 0x96, 0xE5, 0xFC, 0x04, 0x24, 0xB1, 0x80, 0xA8, 0xDB, 0x16, 0xDD, 0xB7, 0x76, 0x47, 0x2F, 0x20, 0x0B, 0xF0, 0x27, 0x89, 0xB5, 0x1F, 0x49, 0xF0, 0x5E, 0xC7, 0x6A, 0xFB, 0x8B, 0x86, 0xF6, 0xEE, 0xCB, 0x41, 0x94, 0x22, 0x38, 0xB6, 0x58, 0xE3, 0xF8, 0x61, 0x82, 0xF3, 0xA0, 0x14, 0x60, 0xF1, 0xCD, 0xC8, 0xFD, 0x38, 0xD7, 0x8E, 0x9C, 0xC3, 0x71, 0xCD, 0x8C, 0xB7, 0x8A, 0xDD, 0x52, 0x9B, 0x5A, 0x6B, 0x06, 0xB4, 0x0E, 0xEC, 0x6E, 0xAF, 0x8A, 0xDF, 0x1E, 0xF6, 0x81, 0x24, 0x51, 0x01, 0x7B, 0x8E, 0x26, 0x72, 0xE9, 0x74, 0xCA, 0x91, 0x0F, 0xCA, 0xE3, 0x37, 0xBC, 0xB5, 0x79, 0x42, 0xEF, 0xF0, 0x5C, 0x3A, 0x10, 0x36, 0x90, 0x41, 0xDF, 0xEB, 0x82, 0x3B, 0x50, 0x3D, 0x50, 0x20, 0xF6, 0x13, 0x1A, 0x0D, 0x40, 0x04, 0xE8, 0x63, 0x34, 0x41, 0x5D, 0x46, 0xE6, 0xA4, 0x33, 0x0A, 0x0A, 0xE7, 0x04, 0x9F, 0x34, 0xFC, 0x03, 0xBD, 0x6A, 0xEA, 0x3D, 0x3B, 0x59, 0x5F, 0x8D, 0xC7, 0x6F, 0xD9, 0x93, 0x13, 0x41, 0xB6, 0x39, 0x5F, 0x8D, 0xEA, 0xA7, 0xC8, 0xE9, 0x56, 0x10, 0x02, 0x64, 0x0C, 0x28, 0x4B, 0x3A, 0x16, 0xD9, 0x0B, 0xF6, 0xB1, 0xFD, 0x6B, 0x3A, 0xC2, 0x1F, 0x68, 0xD8, 0x4E, 0xF4, 0xDC, 0x75, 0xF6, 0x35, 0x0A, 0x17, 0xF6, 0xE8, 0x3E, 0x9D, 0x66, 0x2D, 0xEF, 0x3C, 0x3D, 0xDF, 0x80, 0xF6, 0xC0, 0x06, 0xFD, 0x08, 0xBC, 0x36, 0x50, 0x1B, 0xC8, 0x05, 0xD8, 0x7E, 0x04, 0x5E, 0x0D, 0x38, 0xF1, 0x84, 0x3A, 0x46, 0xD3, 0x2F, 0x63, 0xBE, 0x2A, 0xA7, 0x02, 0x42, 0xE6, 0x6F, 0x3C, 0xAA, 0xB8, 0x7A, 0x8A, 0xB5, 0xF1, 0xC7, 0x65, 0x59, 0xDC, 0x52, 0xE6, 0x74, 0x5C, 0x27, 0x5C, 0x67, 0x44, 0x89, 0xC9, 0x74, 0x3E, 0x86, 0x61, 0xB1, 0x5C, 0x06, 0x87, 0x2F, 0x10, 0xF5, 0x94, 0xC0, 0x6D, 0x96, 0xD5, 0xCE, 0x48, 0x73, 0x36, 0x20, 0x07, 0x16, 0x8D, 0x46, 0xC1, 0x39, 0xD6, 0x71, 0xD7, 0x8C, 0x2D, 0x86, 0x3B, 0xE9, 0x42, 0x19, 0x13, 0x86, 0x02, 0x7B, 0x5F, 0xD2, 0xAC, 0x9E, 0x03, 0x19, 0x04, 0x50, 0xC5, 0x2D, 0x2B, 0x80, 0x12, 0x20, 0xF7, 0xFD, 0x70, 0xF9, 0x95, 0x68, 0xDF, 0x5C, 0xAD, 0xF3, 0x18, 0xCD, 0x90, 0xA5, 0x20, 0x09, 0xD5, 0xF9, 0x5D, 0xC8, 0x5B, 0x52, 0x14, 0x3B, 0xBA, 0x2A, 0x7E, 0xBC, 0x1C, 0xFB, 0x58, 0x23, 0x74, 0x25, 0x2B, 0x78, 0xCC, 0x60, 0xCE, 0xC2, 0x75, 0xC2, 0x2D, 0xBD, 0xBA, 0xBF, 0xED, 0xB1, 0x88, 0x9D, 0xAA, 0x77, 0x57, 0x20, 0x65, 0xA0, 0xC0, 0xA9, 0xF4, 0xB4, 0xB1, 0x4F, 0x62, 0xC0, 0xB1, 0x0A, 0x54, 0x13, 0xAF, 0xD8, 0xC4, 0x9D, 0x59, 0x73, 0x5D, 0x8C, 0xBF, 0xC5, 0x5D, 0x59, 0xC5, 0x4C, 0xD2, 0xC1, 0xD6, 0x5B, 0xF4, 0x24, 0x36, 0xE0, 0x09, 0xC4, 0xBA, 0xD3, 0x70, 0x6D, 0x01, 0xF9, 0xA4, 0xC6, 0xDB, 0x06, 0xD6, 0x71, 0x91, 0xCE, 0x27, 0xBE, 0xA9, 0xC7, 0x68, 0xFE, 0x45, 0x42, 0x2B, 0x62, 0x32, 0xC0, 0x02, 0xAA, 0x67, 0xB1, 0xE9, 0xD8, 0x18, 0xC1, 0xD3, 0x3D, 0x82, 0x63, 0x32, 0x42, 0x6E, 0x71, 0x37, 0x84, 0x7E, 0x9A, 0xD8, 0xD0, 0xDF, 0x40, 0x5B, 0xEC, 0xA3, 0xA9, 0x59, 0xD4, 0x46, 0x70, 0x40, 0x78, 0x7C, 0xD6, 0xC1, 0x86, 0x65, 0x84, 0x4D, 0x57, 0xAE, 0xB5, 0x6D, 0xCD, 0xC3, 0x38, 0x69, 0x69, 0x76, 0x69, 0xCD, 0x31, 0xCD, 0x74, 0x9F, 0x41, 0xD2, 0x0B, 0x48, 0x03, 0x7C, 0x01, 0x92, 0x03, 0x79, 0xD0, 0x40, 0xE4, 0xAD, 0xF1, 0x5D, 0x0B, 0xC8, 0x01, 0xA3, 0x10, 0x6D, 0x40, 0x2C, 0x20, 0xA9, 0x5E, 0x53, 0xB4, 0x5A, 0xFC, 0x15, 0xAC, 0x30, 0xDE, 0x9C, 0xC4, 0x74, 0x91, 0xC6, 0xE6, 0x1F, 0x58, 0xDB, 0x7C, 0x37, 0xE2, 0x3A, 0xEE, 0xBF, 0xF9, 0xB9, 0xF2, 0x09, 0x18, 0x9C, 0xFB, 0xDA, 0x51, 0x83, 0x77, 0xAE, 0x58, 0x4F, 0x19, 0xEA, 0xC2, 0xA7, 0x4E, 0x40, 0xFA, 0xA7, 0xC1, 0x19, 0x63, 0x50, 0xC8, 0xEE, 0x51, 0x06, 0x7C, 0x7E, 0x8B, 0x9F, 0x95, 0xD7, 0x9C, 0xED, 0xFC, 0x78, 0x47, 0x56, 0x5C, 0x37, 0xD0, 0x14, 0xC0, 0x14, 0xD8, 0x8F, 0xCC, 0x70, 0x0A, 0x10, 0x05, 0xF0, 0xCD, 0x95, 0x00, 0x1E, 0xF6, 0x89, 0x72, 0xB6, 0x01, 0xE1, 0x80, 0x18, 0x57, 0x48, 0xDE, 0x71, 0x81, 0x3E, 0xE9, 0xF2, 0x27, 0x63, 0x8D, 0x93, 0x00, 0x65, 0xD9, 0x56, 0x8E, 0x31, 0x56, 0x02, 0x67, 0xFE, 0xA6, 0x42, 0xEF, 0x1E, 0x91, 0x12, 0xA7, 0xA2, 0xDF, 0x53, 0xE9, 0xEE, 0xBF, 0xD9, 0xB0, 0x8D, 0x49, 0xB6, 0x14, 0xE3, 0x3B, 0x8B, 0x7F, 0xEC, 0xBB, 0xE4, 0xA0, 0xE5, 0xFE, 0x6F, 0xAC, 0xF6, 0x55, 0x8E, 0x38, 0x1D, 0x6B, 0xDB, 0x6F, 0xC7, 0x84, 0x1C, 0xF8, 0xC4, 0x19, 0xF1, 0x9D, 0x1E, 0x41, 0x7E, 0x7B, 0x0E, 0xAA, 0xF6, 0xF8, 0x80, 0x3B, 0xFF, 0xA5, 0xB6, 0x66, 0x00, 0x03, 0x14, 0xB2, 0x80, 0x15, 0xFF, 0x52, 0xE2, 0xE7, 0x27, 0x9D, 0x57, 0xFA, 0x58, 0xAD, 0xAE, 0x8C, 0xB5, 0x0C, 0xFF, 0xAA, 0xD1, 0xD5, 0x7C, 0x6E, 0xDA, 0x1B, 0x85, 0x21, 0xBB, 0x20, 0xA7, 0x55, 0xE3, 0x22, 0x6A, 0x1E, 0xD5, 0xDE, 0x74, 0x79, 0xA6, 0x4B, 0xF9, 0x73, 0xC0, 0xDD, 0x74, 0x40, 0x06, 0x50, 0x83, 0xDC, 0x80, 0xC9, 0x40, 0x8F, 0x83, 0xF9, 0x84, 0x96, 0x85, 0x13, 0xAD, 0x8F, 0xDE, 0x48, 0x72, 0xCB, 0x4C, 0x8C, 0xAE, 0xAB, 0x8C, 0xCE, 0x8E, 0x8F, 0x32, 0xEC, 0x1F, 0xA5, 0xC3, 0xD1, 0x80, 0xD7, 0xC0, 0xAF, 0x4F, 0xBF, 0xB6, 0x54, 0x40, 0x14, 0xE0, 0xF5, 0xF4, 0xAA, 0xEA, 0x7F, 0xB5, 0xB9, 0xD7, 0x63, 0x35, 0xA8, 0x95, 0x7A, 0xD4, 0xD5, 0xA2, 0xD7, 0x5B, 0x31, 0x27, 0x76, 0x8E, 0x7F, 0x63, 0x23, 0x68, 0x28, 0x8E, 0xC3, 0x95, 0xD8, 0x71, 0xDA, 0x22, 0x3B, 0x96, 0x19, 0x8C, 0x4C, 0x29, 0xA5, 0xF7, 0x97, 0x59, 0xAF, 0x31, 0x6D, 0xC9, 0x72, 0xCE, 0x12, 0x0A, 0x84, 0x00, 0x5E, 0x40, 0xB0, 0x81, 0x99, 0x8C, 0x8C, 0xEB, 0x87, 0x91, 0x5E, 0xD3, 0x9C, 0x57, 0x58, 0xD2, 0xCF, 0x88, 0xB4, 0x1E, 0xF3, 0xF6, 0x9B, 0xDC, 0x55, 0x8C, 0x3A, 0x03, 0xE2, 0xB7, 0x07, 0x3B, 0x72, 0x60, 0x83, 0x27, 0xAF, 0x2A, 0xF2, 0xAE, 0x77, 0xEB, 0x41, 0x2A, 0xA0, 0x1B, 0x58, 0x06, 0x88, 0xCC, 0x9B, 0x8C, 0x83, 0x8E, 0x96, 0x68, 0xAE, 0x7D, 0x37, 0xB8, 0xDF, 0x7B, 0x52, 0x40, 0x6A, 0xD6, 0xF0, 0xFE, 0x56, 0xE6, 0xDE, 0x89, 0xEA, 0xFD, 0xB8, 0xD2, 0x2C, 0x96, 0x02, 0x51, 0xBF, 0x74, 0x09, 0xEE, 0x8A, 0x3A, 0x21, 0x4E, 0x9B, 0x64, 0x18, 0x43, 0x55, 0x3B, 0x50, 0x40, 0x2C, 0xC0, 0x85, 0x5A, 0x48, 0xD3, 0x87, 0x70, 0x8F, 0x8E, 0x2E, 0x75, 0x05, 0x9C, 0x8D, 0xBA, 0x60, 0x41, 0xEA, 0xF0, 0x08, 0x27, 0x32, 0xE5, 0xB1, 0x65, 0xB6, 0x1C, 0xBB, 0xDB, 0xBC, 0xC8, 0xA6, 0x4B, 0x09, 0x08, 0x01, 0xBC, 0xEE, 0x80, 0xF2, 0x32, 0x20, 0xE7, 0xC7, 0xB7, 0x01, 0x8B, 0xC1, 0xE6, 0x0D, 0x68, 0x01, 0x6B, 0x20, 0x31, 0x6F, 0x26, 0x6D, 0x46, 0xD7, 0x2D, 0x84, 0x57, 0xA5, 0xE5, 0xFB, 0x3D, 0x6B, 0x15, 0xD6, 0xE7, 0x52, 0x24, 0x7B, 0x56, 0x42, 0xF7, 0x0A, 0x31, 0x16, 0x0A, 0x30, 0xD7, 0x7A, 0xF7, 0x4F, 0xF5, 0xBB, 0x27, 0x4B, 0xD8, 0xE2, 0x41, 0x6A, 0xFE, 0x4A, 0x0D, 0xEC, 0x9C, 0x87, 0xCC, 0x5F, 0x0C, 0x40, 0x12, 0x60, 0x28, 0x4D, 0xEA, 0x2E, 0x49, 0x6B, 0xB6, 0x4C, 0xE2, 0xEA, 0x7D, 0x77, 0x58, 0x95, 0xFA, 0x47, 0x52, 0x56, 0x0B, 0x50, 0x0A, 0x44, 0x00, 0xDE, 0x83, 0x7C, 0x1C, 0x3E, 0x7A, 0x97, 0x2B, 0x87, 0x00, 0xBE, 0x01, 0xE9, 0x7F, 0xDC, 0xC7, 0xFA, 0x2A, 0x81, 0x86, 0xD5, 0x84, 0x56, 0x43, 0xBD, 0xD9, 0x67, 0x20, 0xF6, 0xAC, 0xFB, 0x86, 0xB4, 0x63, 0x15, 0x54, 0x85, 0xEF, 0x4A, 0x26, 0x25, 0x4C, 0xF2, 0xEE, 0x09, 0xAD, 0xCF, 0xFD, 0xF3, 0xA4, 0xC6, 0xB0, 0x70, 0x86, 0x9B, 0x8F, 0xCF, 0xA7, 0x75, 0x97, 0x0E, 0x66, 0x03, 0x56, 0x40, 0xE5, 0xAD, 0x5F, 0x58, 0x1B, 0x58, 0x4E, 0x8F, 0xEC, 0x9D, 0xED, 0xFC, 0x2E, 0xF0, 0xAA, 0x80, 0x14, 0xE0, 0x7E, 0x5B, 0xC6, 0x7A, 0x10, 0x37, 0xDE, 0x46, 0xDA, 0xBB, 0x01, 0x1B, 0xE8, 0x40, 0x68, 0xD8, 0xF8, 0x57, 0xFB, 0x9F, 0x3A, 0x56, 0xD3, 0x63, 0x35, 0xFF, 0x7C, 0xE2, 0xFD, 0xE7, 0x0A, 0xFD, 0x60, 0xD4, 0xDA, 0xED, 0x3F, 0x78, 0x23, 0x36, 0xF2, 0xA2, 0x2D, 0x26, 0x0B, 0xB1, 0x19, 0x69, 0x7F, 0xF2, 0xAF, 0x18, 0x8E, 0xBC, 0x5A, 0x04, 0x23, 0xA6, 0x05, 0xC4, 0x02, 0x4C, 0xE7, 0x0C, 0x1E, 0xC0, 0x6E, 0x0A, 0xC3, 0xDF, 0xB1, 0x37, 0xAF, 0x13, 0x5A, 0x3A, 0xC3, 0xB1, 0x4F, 0x1D, 0xED, 0x51, 0xE9, 0xE3, 0xF5, 0x39, 0x6E, 0x3F, 0x6D, 0x18, 0x90, 0x3E, 0x58, 0x80, 0xDB, 0x3F, 0x8C, 0xE7, 0x0B, 0x38, 0xF1, 0x88, 0x00, 0xBC, 0x6E, 0xE3, 0x89, 0x3E, 0xED, 0xC7, 0x07, 0xC5, 0x37, 0xFB, 0x58, 0x0D, 0xD1, 0x02, 0x53, 0x24, 0x79, 0xE4, 0x16, 0x78, 0x88, 0x76, 0x4D, 0x88, 0x3C, 0xA7, 0xBA, 0xCF, 0xA7, 0xEE, 0x66, 0x02, 0xCA, 0x86, 0x0D, 0x54, 0x5F, 0x55, 0x05, 0xE9, 0x2B, 0xD8, 0x21, 0x47, 0x4F, 0x68, 0xE5, 0x1D, 0x0B, 0x5B, 0x7A, 0xE7, 0xEB, 0x30, 0xBC, 0xEC, 0x0E, 0xD4, 0xBE, 0x7F, 0x60, 0x35, 0xF3, 0x7C, 0x98, 0x4C, 0x70, 0xB5, 0xAF, 0x51, 0x7A, 0x53, 0xE4, 0xAE, 0xFA, 0xB4, 0x41, 0x3F, 0xFA, 0x6B, 0xA2, 0x83, 0x18, 0x34, 0xA0, 0x0E, 0xE4, 0xD3, 0x7E, 0x24, 0x13, 0x08, 0xE7, 0x43, 0x26, 0x52, 0x03, 0xDE, 0x40, 0xC6, 0xBC, 0xB2, 0x8E, 0xD5, 0xFC, 0x13, 0xDE, 0xAC, 0x52, 0x94, 0xA0, 0xB8, 0x43, 0x0B, 0x47, 0x9C, 0xCD, 0x8C, 0xE1, 0xBC, 0x35, 0xC3, 0xC5, 0xA5, 0x7C, 0x4E, 0xD4, 0x7A, 0x67, 0x7E, 0x2F, 0x5A, 0x6D, 0x3D, 0xEB, 0x5A, 0xD3, 0x78, 0xFB, 0x1F, 0x52, 0xDB, 0xBC, 0x3C, 0xA6, 0x00, 0xAE, 0xF7, 0x06, 0xD5, 0xC9, 0xBD, 0x88, 0xA6, 0x9C, 0x9F, 0x8B, 0xD3, 0xF2, 0xEE, 0x04, 0x0A, 0xE2, 0x84, 0xF5, 0x94, 0x85, 0x8B, 0x63, 0xC3, 0xC5, 0x4F, 0x05, 0x54, 0x0C, 0xF4, 0xC1, 0xD8, 0x77, 0x07, 0x8D, 0x7E, 0x6B, 0x0B, 0xB6, 0x00, 0xB9, 0x00, 0x55, 0x60, 0x2F, 0x40, 0x12, 0x68, 0x3B, 0x56, 0x8B, 0xBF, 0x48, 0xC4, 0xD1, 0xE1, 0x0C, 0xAA, 0xD1, 0xC4, 0x75, 0xEC, 0x53, 0x7B, 0x8F, 0x04, 0x19, 0xE6, 0xAB, 0x56, 0x8D, 0x42, 0xDC, 0xA6, 0xD0, 0xF7, 0xDD, 0x02, 0x28, 0xDE, 0x42, 0x77, 0x06, 0x08, 0x26, 0xA6, 0x64, 0xD4, 0x7D, 0x5F, 0xB7, 0xF8, 0x8F, 0xF0, 0x32, 0x95, 0xF7, 0x2B, 0x71, 0xA9, 0xC1, 0xFA, 0xF1, 0x09, 0x55, 0x4E, 0x14, 0xB3, 0xEE, 0x56, 0x06, 0xB4, 0x64, 0x19, 0xC0, 0x10, 0x7B, 0xFB, 0xD3, 0x67, 0x65, 0x01, 0x5E, 0x37, 0xC2, 0xEE, 0x16, 0x84, 0xBE, 0x81, 0x4A, 0x20, 0x1B, 0xF0, 0x02, 0x64, 0xDF, 0x6F, 0xEE, 0x33, 0xDE, 0x69, 0x34, 0x24, 0x12, 0xB5, 0x25, 0x8E, 0x16, 0xA2, 0xC8, 0x32, 0xCB, 0x9C, 0x43, 0x68, 0xE2, 0x9C, 0xAA, 0x36, 0xE9, 0x0D, 0x32, 0x59, 0x41, 0x41, 0xD5, 0xB0, 0x3B, 0x72, 0x1C, 0x8F, 0x5B, 0x8D, 0x49, 0x60, 0xE5, 0x63, 0x8A, 0x06, 0xEA, 0xD8, 0x6E, 0xAC, 0x55, 0x80, 0x2A, 0x10, 0x31, 0xFF, 0x6D, 0x8C, 0x26, 0xF5, 0xFB, 0x24, 0x27, 0xF4, 0x2B, 0x33, 0x0A, 0x85, 0x27, 0x29, 0xCA, 0x5A, 0x0B, 0x60, 0x47, 0x34, 0x05, 0xE0, 0x27, 0x4F, 0x20, 0x0A, 0x48, 0x03, 0x8A, 0xC3, 0x7D, 0x50, 0x7D, 0xA7, 0x13, 0xD1, 0xF9, 0xD4, 0x02, 0x98, 0x02, 0x7B, 0x20, 0x31, 0xAF, 0x04, 0x8D, 0x56, 0x7F, 0x1E, 0xA7, 0xCB, 0x54, 0xA7, 0xC0, 0x5A, 0x3B, 0xA7, 0x88, 0x2D, 0x27, 0x85, 0xD1, 0x70, 0x6A, 0xD5, 0x9A, 0x41, 0x01, 0x5F, 0x64, 0x3C, 0x46, 0x3B, 0xBD, 0x8A, 0x8C, 0x07, 0x5C, 0x66, 0xF8, 0xD1, 0xEF, 0xA3, 0x40, 0x04, 0x40, 0x0F, 0x9A, 0x6E, 0x16, 0x72, 0x01, 0xB9, 0xE7, 0xA1, 0x01, 0xF4, 0xA7, 0xF1, 0xDA, 0xEE, 0xEC, 0x10, 0x41, 0xD5, 0xF0, 0xD3, 0xF6, 0xF1, 0xBE, 0x62, 0x6C, 0x03, 0xA4, 0x00, 0xD5, 0x81, 0x0C, 0x12, 0x30, 0x01, 0x5C, 0xEF, 0x54, 0x51, 0x1B, 0x94, 0x03, 0x59, 0x80, 0x0F, 0xE4, 0xD1, 0x55, 0xDC, 0x06, 0xF4, 0x19, 0x69, 0x48, 0x23, 0x6A, 0x2E, 0xDA, 0x9E, 0xD3, 0x81, 0xCC, 0x10, 0xB4, 0x0F, 0x9D, 0x9F, 0xC3, 0xBC, 0xDC, 0x5B, 0x3F, 0xD4, 0x0A, 0x5E, 0x07, 0x6E, 0x17, 0x11, 0x97, 0xD8, 0x15, 0x4C, 0xAC, 0xE4, 0x2D, 0xD3, 0x29, 0xB9, 0x76, 0xF7, 0x48, 0xAA, 0x04, 0x54, 0x80, 0x15, 0x40, 0x26, 0x25, 0x23, 0xC7, 0xDA, 0x76, 0x57, 0x90, 0xAA, 0xF2, 0x22, 0xFA, 0xCB, 0x39, 0x08, 0x3C, 0xBC, 0x7D, 0xB6, 0x80, 0x14, 0xA0, 0x7D, 0xC3, 0x12, 0xF0, 0x0D, 0xC4, 0xA0, 0xFD, 0xB6, 0x61, 0x2F, 0xA0, 0x14, 0x88, 0x05, 0x88, 0xCF, 0x9B, 0x7D, 0xA7, 0xA6, 0x9E, 0x24, 0x85, 0x5E, 0xDF, 0xA2, 0xE6, 0x19, 0xF0, 0x42, 0x76, 0x4E, 0x80, 0xDC, 0x59, 0x25, 0x3C, 0x2D, 0xBA, 0xF6, 0xB4, 0x03, 0x85, 0x0D, 0xBD, 0xFC, 0x4E, 0x8F, 0x8C, 0xC7, 0x85, 0x6B, 0x4C, 0xD8, 0x60, 0x07, 0xC6, 0xC5, 0x23, 0xB6, 0x00, 0x32, 0x0F, 0x43, 0xEE, 0x2E, 0x01, 0xB2, 0x00, 0xB6, 0xE3, 0xDA, 0x0D, 0xF4, 0xBC, 0xD2, 0x7D, 0xFE, 0xBE, 0xF4, 0x4A, 0xB3, 0x1E, 0xE5, 0x84, 0xBE, 0x30, 0x69, 0x6F, 0x35, 0xF9, 0xD7, 0x73, 0xB8, 0x04, 0xD8, 0x3A, 0x28, 0x40, 0x02, 0xF0, 0xA6, 0x54, 0x3C, 0x60, 0x35, 0xD8, 0x00, 0xDF, 0x2C, 0xE3, 0x9B, 0x40, 0x2A, 0xDF, 0xA4, 0xD5, 0xF6, 0x5F, 0x4E, 0x3D, 0xAA, 0x3A, 0xCA, 0x3D, 0xD1, 0x3A, 0x5D, 0x31, 0x70, 0xCB, 0xA6, 0xB8, 0xC4, 0x26, 0x33, 0x3B, 0xB0, 0x12, 0x98, 0x5C, 0x7D, 0x07, 0xBD, 0xDE, 0x5E, 0xAA, 0x4C, 0x59, 0x03, 0xE0, 0xEE, 0x1B, 0x3F, 0x05, 0x10, 0x1B, 0xD8, 0xAC, 0xED, 0x1D, 0x50, 0x02, 0x85, 0xE6, 0xB2, 0xFA, 0xB9, 0x31, 0xE9, 0xDA, 0xAA, 0x33, 0xB7, 0x98, 0x23, 0x54, 0x75, 0xE5, 0x6E, 0xF1, 0x16, 0xA7, 0x01, 0x24, 0x6D, 0x28, 0x03, 0x03, 0xF6, 0x1E, 0x28, 0x20, 0x0B, 0x70, 0x3A, 0xCF, 0x76, 0x02, 0x1E, 0x80, 0x39, 0xB0, 0xFB, 0xAA, 0x49, 0x30, 0x03, 0x42, 0xE9, 0xF4, 0x3D, 0x63, 0x4D, 0xB0, 0xAC, 0xD9, 0x9E, 0x7E, 0x1B, 0x3A, 0x8D, 0x07, 0x1A, 0x06, 0x8A, 0x1E, 0xB1, 0xF4, 0xC0, 0x7A, 0x66, 0x3E, 0xDD, 0xAF, 0x93, 0x8B, 0xFF, 0x0C, 0x39, 0xD6, 0xC9, 0x5D, 0x9D, 0x93, 0xD8, 0xEB, 0x02, 0xC9, 0x69, 0x70, 0x6E, 0x26, 0x10, 0x7D, 0x37, 0x78, 0x58, 0x73, 0x7D, 0xD7, 0x00, 0xD2, 0x7E, 0xBD, 0xDB, 0x27, 0xEF, 0x4E, 0x27, 0x83, 0x4B, 0x65, 0x1C, 0x4D, 0x35, 0xA1, 0x07, 0xBB, 0x7B, 0x7B, 0xED, 0x3A, 0x8B, 0x5C, 0x18, 0x50, 0x7B, 0x50, 0x03, 0x1D, 0xF8, 0x20, 0x00, 0xFE, 0x21, 0x4E, 0x4B, 0x05, 0x01, 0x6C, 0x03, 0xD2, 0x1C, 0xE1, 0x80, 0x07, 0x20, 0x0E, 0x68, 0xCC, 0x2B, 0x49, 0xA3, 0xE9, 0x84, 0x8C, 0x7F, 0xE9, 0xDE, 0xC9, 0x46, 0x6C, 0xD3, 0x8C, 0x25, 0x10, 0x77, 0x51, 0xB8, 0x36, 0xB1, 0xC7, 0xBA, 0x5D, 0x5A, 0x88, 0xFB, 0xBA, 0xB7, 0x33, 0x3F, 0xCF, 0x4E, 0x33, 0xEC, 0x9A, 0x56, 0x52, 0xA6, 0xA3, 0x51, 0xBA, 0x80, 0x3D, 0x0F, 0xB3, 0x81, 0xF0, 0x75, 0x9A, 0x4E, 0xD9, 0xC8, 0x5D, 0x9B, 0x1D, 0x29, 0x45, 0x1D, 0xA5, 0x53, 0x81, 0xE5, 0x61, 0x1E, 0x65, 0x5F, 0xD6, 0x3A, 0xA9, 0x3D, 0x62, 0xB3, 0xD3, 0xD2, 0xC1, 0x4E, 0x51, 0xCA, 0x05, 0x98, 0x02, 0x2A, 0x80, 0x34, 0xC0, 0x57, 0xF2, 0x78, 0xE4, 0x81, 0x10, 0xC0, 0x07, 0xFC, 0x81, 0x6E, 0x20, 0xF3, 0x16, 0x4F, 0x4C, 0xA1, 0xCD, 0xEC, 0x4F, 0xEF, 0x14, 0x79, 0x02, 0x46, 0xAE, 0x9E, 0x8E, 0x59, 0x86, 0x26, 0x33, 0xAA, 0xF0, 0x52, 0x58, 0xFE, 0xD2, 0x3C, 0x75, 0x03, 0xA9, 0x1C, 0xED, 0xB2, 0x4E, 0x7B, 0x10, 0x9F, 0x1A, 0x39, 0x9F, 0x84, 0x22, 0x9F, 0xE5, 0xDD, 0x13, 0xC3, 0xCD, 0x67, 0x53, 0xF4, 0x09, 0xC2, 0x9D, 0xAE, 0x2D, 0x73, 0xE4, 0x75, 0x54, 0x81, 0xE3, 0x86, 0x42, 0x3F, 0xC8, 0xF4, 0x69, 0x39, 0x3D, 0x4A, 0x66, 0x60, 0xF6, 0x9E, 0x91, 0x3C, 0x19, 0x48, 0xB9, 0x81, 0xC5, 0xA2, 0xEA, 0x81, 0x18, 0xB0, 0x75, 0xB0, 0x06, 0x05, 0xB8, 0x52, 0xC0, 0x18, 0x50, 0x05, 0x24, 0x81, 0x95, 0xCC, 0x5C, 0x02, 0xC2, 0x80, 0x1C, 0x7F, 0xBC, 0x35, 0x6D, 0xE6, 0x68, 0x6A, 0xA4, 0x76, 0x55, 0xB7, 0xC7, 0xDE, 0x53, 0x88, 0x52, 0x1F, 0x64, 0x6F, 0x78, 0xD3, 0x32, 0x31, 0x57, 0xB2, 0xD8, 0xAC, 0x1D, 0x71, 0x16, 0x20, 0x98, 0x94, 0xB7, 0x79, 0x80, 0x9D, 0x69, 0x28, 0xA3, 0x11, 0xE9, 0x1B, 0x83, 0xA8, 0x16, 0xE0, 0x06, 0xAC, 0x3D, 0xFF, 0x2D, 0x81, 0x9C, 0x87, 0x9E, 0x40, 0x29, 0x1E, 0xAE, 0x75, 0x0F, 0xB0, 0x3D, 0xBE, 0xD2, 0x98, 0x41, 0x74, 0xD2, 0xF0, 0xE4, 0x76, 0x05, 0x2D, 0x7F, 0x64, 0xB0, 0x39, 0x61, 0x7B, 0xA0, 0x03, 0x26, 0x6F, 0x09, 0x90, 0xDC, 0xAE, 0x88, 0xC5, 0x87, 0x80, 0x3D, 0xED, 0x6F, 0x84, 0xAF, 0x9C, 0x71, 0x16, 0xA8, 0xD3, 0x37, 0xC3, 0xD5, 0x23, 0x1C, 0x5E, 0x08, 0x2B, 0x04, 0x7B, 0x03, 0x58, 0x8E, 0x95, 0x6C, 0x8B, 0xE3, 0x6F, 0x54, 0xB0, 0xD2, 0xBE, 0xE7, 0x26, 0x5B, 0x43, 0x0A, 0x6D, 0x16, 0xFE, 0xF3, 0x2E, 0x62, 0x81, 0x98, 0x16, 0x55, 0xC0, 0x0A, 0x3C, 0xD4, 0xC9, 0x87, 0x88, 0x0D, 0xA8, 0xDC, 0x58, 0xB3, 0x25, 0xE5, 0x0C, 0x5A, 0xFB, 0x30, 0x5B, 0xD9, 0x29, 0xF3, 0xF7, 0x73, 0x76, 0xEB, 0x7E, 0xE6, 0x9F, 0x01, 0x5B, 0x80, 0xA5, 0x83, 0x00, 0xF6, 0x02, 0x64, 0x03, 0x6C, 0x40, 0xB1, 0x0C, 0x50, 0x05, 0xA4, 0x81, 0x7D, 0x9A, 0xC9, 0x02, 0xD9, 0x40, 0x73, 0xFA, 0x16, 0x6D, 0x96, 0x70, 0x16, 0x76, 0xCE, 0xA1, 0x1F, 0xC7, 0x58, 0x13, 0x99, 0x70, 0xB9, 0xE0, 0x57, 0xB2, 0x3D, 0x89, 0x84, 0x0D, 0xB8, 0x70, 0x52, 0x32, 0x34, 0x75, 0x39, 0x6F, 0x31, 0xFA, 0x64, 0x9F, 0x81, 0xCD, 0x6F, 0x2D, 0x01, 0x38, 0x77, 0x86, 0x06, 0xD6, 0x9E, 0xD1, 0x1E, 0x40, 0x39, 0x5E, 0x39, 0x5B, 0xC2, 0xC2, 0xA7, 0x9A, 0x57, 0xA8, 0x98, 0x62, 0xB4, 0x56, 0x9C, 0xAB, 0x15, 0x9C, 0xF2, 0x0E, 0xEC, 0x41, 0xD9, 0x5D, 0xA7, 0x95, 0x0A, 0xB4, 0x8F, 0xED, 0x12, 0x10, 0x05, 0x82, 0x66, 0x1A, 0xC4, 0x02, 0x5C, 0x01, 0x35, 0x60, 0xE9, 0x63, 0x34, 0xA6, 0x56, 0x6E, 0x1A, 0x6D, 0xE2, 0x9D, 0x32, 0x1E, 0x6F, 0xA6, 0x4D, 0x74, 0x51, 0x7A, 0x0F, 0xA3, 0x41, 0x1A, 0xCD, 0xC5, 0xDC, 0x66, 0x65, 0xB1, 0xBF, 0x4D, 0xA7, 0xCE, 0xC9, 0xA5, 0x5B, 0x27, 0xF6, 0x35, 0xE6, 0xA1, 0x12, 0x6E, 0xDB, 0x2C, 0x53, 0xC9, 0x6C, 0x11, 0xC0, 0x1D, 0x0F, 0x3B, 0x00, 0x6B, 0x20, 0x14, 0xFF, 0x4D, 0x0B, 0xC8, 0x3D, 0xFF, 0x4D, 0xA7, 0xD1, 0x59, 0x4F, 0xFF, 0xA9, 0x71, 0xE5, 0xC2, 0x9E, 0x38, 0x97, 0x60, 0x8B, 0x9D, 0x55, 0xE0, 0xEC, 0xB4, 0x0D, 0xB8, 0x00, 0xE2, 0x03, 0x1D, 0x18, 0x60, 0x0B, 0x28, 0xC1, 0xCF, 0x99, 0x02, 0x19, 0x37, 0x62, 0x03, 0x6A, 0xC0, 0x2E, 0xC0, 0x66, 0x5E, 0x88, 0xD0, 0x66, 0xFD, 0xD7, 0x0B, 0x8D, 0xF2, 0xF2, 0x8B, 0x34, 0x2B, 0x5A, 0xB0, 0xCD, 0x0D, 0xA0, 0x55, 0x30, 0x63, 0xDD, 0xBE, 0xDB, 0x7E, 0x6A, 0xA0, 0xC2, 0x14, 0xB1, 0x95, 0x38, 0x65, 0xA0, 0x41, 0x87, 0x1A, 0x4B, 0x11, 0x7F, 0xA7, 0xA4, 0x4B, 0x2B, 0x3A, 0x1B, 0x60, 0x41, 0xA5, 0x21, 0x46, 0x62, 0xA7, 0xC7, 0x26, 0x10, 0x0B, 0x68, 0x67, 0x82, 0x1B, 0xE3, 0x71, 0x77, 0xF2, 0xBC, 0xF9, 0x5D, 0xEC, 0x6E, 0xFE, 0x24, 0x44, 0xBD, 0xED, 0x7C, 0x12, 0xD0, 0x00, 0x4C, 0x07, 0x01, 0xB8, 0x00, 0x25, 0xB7, 0x46, 0x45, 0x06, 0x10, 0x05, 0xD8, 0xBE, 0x8B, 0x9A, 0x33, 0x80, 0xD6, 0x79, 0x85, 0x0E, 0x35, 0xCC, 0x2B, 0x47, 0x9C, 0x29, 0xBE, 0x01, 0xE4, 0x7F, 0xB6, 0x4F, 0xD3, 0x80, 0xEA, 0xA9, 0xD4, 0xD7, 0x0F, 0xC2, 0xF2, 0xF6, 0x6E, 0x6A, 0x10, 0xBD, 0x1D, 0xB5, 0xF3, 0x27, 0x35, 0xB5, 0xF1, 0xF1, 0xAA, 0x25, 0xDC, 0xFE, 0xCB, 0x50, 0x53, 0xE0, 0xF2, 0x7C, 0x2B, 0x10, 0xCE, 0x16, 0xE5, 0xB7, 0x66, 0x58, 0xD8, 0x95, 0xF8, 0xAD, 0x75, 0x0B, 0x49, 0xE6, 0xE3, 0xB8, 0x71, 0xBD, 0x0B, 0x3F, 0x33, 0xB8, 0xC0, 0x02, 0xF6, 0x34, 0xE4, 0x0D, 0xFE, 0x59, 0x15, 0x88, 0x93, 0x5C, 0x98, 0xF4, 0xAD, 0xD3, 0xED, 0x79, 0xC9, 0x73, 0x35, 0x33, 0x9F, 0x02, 0x68, 0x3B, 0x56, 0xDB, 0x7F, 0x39, 0x65, 0x13, 0xAE, 0xA7, 0xE4, 0xD8, 0x96, 0x9F, 0xF3, 0x0A, 0x3A, 0x9E, 0xAD, 0x19, 0x64, 0x74, 0xC8, 0xD6, 0x29, 0xC2, 0x20, 0xAF, 0x92, 0x63, 0xA7, 0x93, 0x26, 0xC7, 0x6A, 0x34, 0x57, 0x09, 0x40, 0xDF, 0x59, 0x8E, 0xD5, 0x7A, 0x01, 0x92, 0x80, 0x6E, 0x80, 0x25, 0x4A, 0xC7, 0x4F, 0x41, 0x55, 0xFD, 0x5F, 0xE2, 0x56, 0x1E, 0x57, 0xB9, 0xD2, 0x5C, 0x83, 0xD0, 0x79, 0x98, 0x40, 0xD1, 0xBE, 0x03, 0x59, 0x83, 0x04, 0xF4, 0xE9, 0x06, 0x2A, 0x0A, 0x78, 0x0D, 0x16, 0x20, 0xC1, 0xFA, 0x5A, 0xBE, 0x09, 0xD4, 0x55, 0x6D, 0x0B, 0xAB, 0xC9, 0x5F, 0x17, 0xBE, 0x5F, 0x2A, 0xCE, 0x13, 0x61, 0xE7, 0xAA, 0xBE, 0x7B, 0xA2, 0x0E, 0x11, 0xF0, 0x30, 0x62, 0x6B, 0xDD, 0x1E, 0x08, 0x14, 0xD8, 0xEB, 0x86, 0x3C, 0xA9, 0xAC, 0xC1, 0x2C, 0x89, 0xBB, 0x4B, 0xB5, 0x6D, 0x80, 0xDF, 0xC2, 0x5E, 0x31, 0x50, 0x05, 0xF2, 0x28, 0x73, 0xDD, 0x7A, 0xCD, 0xEE, 0x77, 0x39, 0x72, 0xF5, 0x6F, 0x16, 0xCA, 0x81, 0xAE, 0x41, 0x02, 0x59, 0x40, 0x2B, 0x50, 0x31, 0xB0, 0x81, 0x0E, 0xF2, 0x9E, 0xD2, 0xB9, 0xEF, 0x60, 0x71, 0x3B, 0x10, 0x0D, 0xA8, 0x02, 0x2B, 0x00, 0x31, 0xA0, 0xE3, 0x58, 0x4D, 0xFF, 0xAA, 0xA1, 0xD0, 0x91, 0x8E, 0x3A, 0xA9, 0xC0, 0xDF, 0x67, 0x32, 0x02, 0x0C, 0x65, 0xD3, 0x95, 0x9F, 0xD5, 0xAC, 0x13, 0x3E, 0xCD, 0xD0, 0x7B, 0x5D, 0x93, 0x27, 0x50, 0x20, 0x4A, 0x77, 0xC7, 0xAD, 0xCC, 0x68, 0x03, 0x6E, 0x34, 0xE6, 0xB7, 0x1E, 0x8B, 0x15, 0x90, 0xFC, 0x6F, 0x54, 0x45, 0xDB, 0xB7, 0x5A, 0x1D, 0x3E, 0xD9, 0x71, 0xEA, 0xFB, 0x63, 0x0B, 0x5F, 0xB7, 0x96, 0x68, 0xCC, 0x9B, 0x5B, 0x00, 0x29, 0x40, 0x13, 0x30, 0x19, 0x14, 0x40, 0xC5, 0x57, 0xDD, 0x40, 0x38, 0xE0, 0x7C, 0xF8, 0x14, 0x8D, 0x27, 0x3F, 0xAD, 0xF3, 0x0A, 0xAD, 0x06, 0x39, 0xA2, 0xA5, 0xFE, 0xE7, 0x0D, 0x11, 0x44, 0xFB, 0x92, 0x05, 0x63, 0x24, 0x5A, 0x1D, 0x05, 0xB1, 0x2E, 0xB8, 0x23, 0x55, 0x4E, 0xAC, 0xC4, 0xE9, 0xB5, 0x7D, 0xBA, 0x26, 0xD1, 0xBF, 0x4C, 0x27, 0x27, 0xB5, 0xB9, 0x56, 0x01, 0xB5, 0x01, 0xE3, 0x44, 0x5D, 0x27, 0x70, 0x7E, 0x95, 0x35, 0xD3, 0x27, 0x6B, 0x9C, 0xD9, 0x72, 0xEB, 0xA1, 0x64, 0x63, 0x81, 0x61, 0x87, 0xA3, 0x4B, 0xFD, 0x86, 0xEA, 0x87, 0x76, 0x49, 0x1C, 0x5D, 0xA2, 0x9A, 0x1E, 0x40, 0xAE, 0x41, 0x00, 0x65, 0xF7, 0xB4, 0x2D, 0xBB, 0x27, 0xEA, 0x3E, 0x59, 0x69, 0x80, 0xE9, 0x23, 0xA5, 0x78, 0x55, 0xD5, 0xC0, 0x6A, 0xFE, 0x85, 0x57, 0xBA, 0x58, 0x6B, 0xB6, 0xBF, 0xB8, 0x7B, 0x6D, 0x9B, 0x66, 0xE0, 0xF4, 0xC2, 0x2B, 0x9C, 0xEA, 0x52, 0x10, 0x87, 0xC8, 0x7D, 0xCB, 0xF9, 0xF5, 0x95, 0xB6, 0xAC, 0xD7, 0x2F, 0x7C, 0x75, 0x95, 0xDF, 0x75, 0x2F, 0x14, 0x96, 0xB7, 0xFA, 0x61, 0xC6, 0x23, 0x37, 0x1D, 0xF7, 0x7A, 0xBC, 0x9A, 0x21, 0x8D, 0x7B, 0xE4, 0xC9, 0xA9, 0x79, 0x64, 0x68, 0xED, 0x56, 0x3F, 0x54, 0xB9, 0x87, 0x47, 0x39, 0xD0, 0x3A, 0x48, 0xEE, 0x8C, 0x80, 0x0E, 0x6A, 0xCC, 0xBC, 0x6B, 0xB0, 0xEE, 0xBA, 0x0D, 0x17, 0x40, 0x1A, 0x30, 0x9D, 0x57, 0xE2, 0x58, 0x2D, 0x3E, 0x73, 0x7D, 0x96, 0xB1, 0xAF, 0xDA, 0x36, 0x90, 0x3C, 0xE0, 0x0D, 0x0F, 0xA2, 0xED, 0x29, 0xA7, 0xA9, 0xE9, 0x3C, 0xE1, 0xB3, 0x44, 0xEB, 0x3D, 0xD6, 0xFA, 0x91, 0xED, 0x68, 0x96, 0xBC, 0xB1, 0x26, 0x70, 0x3D, 0x35, 0xF7, 0x2C, 0x37, 0x0F, 0xA6, 0xCB, 0xF8, 0xAD, 0xBD, 0xB7, 0x0C, 0xC8, 0xAB, 0xF8, 0xD0, 0x4E, 0x3F, 0xD4, 0xC5, 0xA2, 0x3A, 0xE6, 0x4D, 0xD9, 0x95, 0xC6, 0xBB, 0x07, 0xDE, 0x47, 0x24, 0xFB, 0x09, 0x03, 0x28, 0x50, 0x01, 0x74, 0x33, 0x09, 0x1F, 0xF0, 0x53, 0x36, 0x02, 0x58, 0x00, 0xFA, 0x84, 0xB7, 0x6B, 0x01, 0x1E, 0x77, 0xA4, 0xC8, 0x9C, 0x56, 0x4B, 0xCC, 0x49, 0x4D, 0x04, 0x54, 0x5A, 0xB1, 0x67, 0xE7, 0x46, 0x00, 0x3F, 0xF5, 0x43, 0xED, 0xC0, 0x69, 0x7F, 0xEB, 0xDC, 0xB0, 0x8C, 0x85, 0xD9, 0xB7, 0xD3, 0xDB, 0x7E, 0x3D, 0x15, 0x05, 0x91, 0x3C, 0x7A, 0x25, 0xF0, 0x37, 0x30, 0x40, 0x7D, 0x0E, 0xC0, 0x75, 0xD7, 0xA9, 0x08, 0x13, 0xAD, 0xE6, 0xAA, 0xD4, 0x1B, 0x60, 0x16, 0xC2, 0xDD, 0x85, 0x81, 0xC7, 0xFD, 0x75, 0x5C, 0x38, 0x92, 0x77, 0x03, 0x1F, 0xA6, 0x7A, 0xB0, 0xC2, 0xAD, 0x0D, 0x6F, 0x06, 0x6B, 0xB5, 0x0C, 0x90, 0x0D, 0x68, 0x03, 0xA7, 0x19, 0x87, 0x01, 0xD1, 0x03, 0x01, 0x2C, 0x9E, 0x56, 0x4F, 0x39, 0x9F, 0x36, 0x50, 0x41, 0xA3, 0x15, 0xCE, 0xEB, 0x7B, 0xE3, 0xCA, 0xF2, 0x19, 0x46, 0x4E, 0x5A, 0xA3, 0x09, 0x5D, 0x86, 0x3A, 0x8E, 0xD6, 0xC0, 0x15, 0x59, 0xA8, 0x49, 0x37, 0x56, 0xAB, 0x27, 0x6D, 0xD9, 0x82, 0xAE, 0x47, 0xFF, 0x5D, 0xDC, 0xB0, 0x06, 0x01, 0x01, 0x23, 0x14, 0xA3, 0x51, 0x03, 0x29, 0xC0, 0xF4, 0x77, 0x19, 0xF4, 0xD3, 0x9F, 0x64, 0xB3, 0x37, 0x4C, 0xDD, 0x3D, 0x5A, 0xE8, 0xA7, 0x56, 0xC6, 0x3B, 0x88, 0x62, 0xF2, 0x3D, 0x70, 0xDA, 0x68, 0x3A, 0x60, 0x0B, 0x70, 0x01, 0x82, 0x45, 0xB3, 0x0E, 0xC4, 0x87, 0x3A, 0x9F, 0xBA, 0x80, 0x7C, 0xCA, 0xE1, 0x77, 0x01, 0xCA, 0x62, 0xFC, 0xA4, 0xD5, 0xFA, 0x3B, 0x6A, 0x78, 0xC8, 0x38, 0x63, 0x04, 0x21, 0x0D, 0xAD, 0xF9, 0xF1, 0xC2, 0x98, 0x8E, 0xFE, 0x50, 0xDE, 0xA3, 0xA5, 0x28, 0x54, 0xED, 0xB8, 0xEB, 0xA5, 0xE4, 0xDA, 0x0A, 0xA7, 0x05, 0x0F, 0x06, 0xE9, 0xD3, 0x12, 0xC9, 0xE7, 0xA1, 0xE9, 0xDD, 0x21, 0x77, 0x37, 0x7F, 0xE1, 0xA7, 0x2A, 0xD3, 0x7F, 0x6E, 0x5F, 0x3F, 0xDA, 0x53, 0xCE, 0x7B, 0xC6, 0xE6, 0x5C, 0xC4, 0x0E, 0x41, 0x21, 0x41, 0xBB, 0xB2, 0xBD, 0xF6, 0xD1, 0xBA, 0x5A, 0x09, 0x68, 0x00, 0xBE, 0x80, 0x33, 0xE9, 0x37, 0x10, 0x47, 0x00, 0xEB, 0xA9, 0x67, 0xEF, 0x27, 0x83, 0x08, 0xB8, 0x8A, 0x47, 0x60, 0xB5, 0x8D, 0xAB, 0x41, 0xEF, 0x0D, 0x4F, 0x56, 0x28, 0xB2, 0x76, 0x4A, 0x26, 0x4C, 0xF3, 0x4D, 0xD7, 0x5E, 0xBB, 0xB0, 0x9E, 0xAC, 0xC2, 0xF2, 0x80, 0xF2, 0xDA, 0x3E, 0xB5, 0xB3, 0xF1, 0x6E, 0xA1, 0xEB, 0x2A, 0xC7, 0xB4, 0x13, 0xB8, 0x88, 0x02, 0xAC, 0xEE, 0x23, 0xEF, 0xD2, 0xB1, 0x85, 0x01, 0x6D, 0xBF, 0xA0, 0x46, 0xD0, 0xCD, 0x7D, 0xFE, 0x1B, 0xA3, 0x94, 0xDE, 0x3C, 0xCD, 0x5F, 0x67, 0xDD, 0xB4, 0xBB, 0xC4, 0xEE, 0x38, 0xAA, 0x1A, 0xB0, 0x0D, 0xB8, 0x03, 0x21, 0x40, 0xD2, 0x05, 0xBE, 0x80, 0xA4, 0xB5, 0xB7, 0x03, 0x4F, 0xAA, 0xB2, 0xC6, 0xED, 0x3A, 0x97, 0x13, 0x7E, 0x30, 0x5A, 0x6D, 0xE3, 0xBE, 0x5B, 0x70, 0x07, 0xD1, 0xF6, 0xD5, 0x98, 0x8C, 0xBA, 0x73, 0x74, 0x23, 0x64, 0xAA, 0x13, 0x8D, 0x4E, 0xB3, 0x73, 0xA8, 0x45, 0xEE, 0xEB, 0x2D, 0x53, 0xEA, 0x5C, 0xD6, 0xD6, 0xFE, 0xF9, 0xF3, 0xE4, 0x34, 0xA5, 0xD1, 0x59, 0xCF, 0xC4, 0xD8, 0xBB, 0x65, 0x16, 0x32, 0x07, 0xA2, 0xF0, 0x70, 0x1B, 0x70, 0x42, 0x81, 0x3A, 0xB1, 0xBC, 0xA2, 0xAB, 0xE1, 0x76, 0x74, 0xAC, 0x66, 0x3E, 0xD4, 0x6F, 0x4C, 0xCB, 0xD3, 0x42, 0xDA, 0x4F, 0xBE, 0x6A, 0x4F, 0x5A, 0xF9, 0x76, 0x40, 0x0B, 0xA8, 0xF1, 0xD2, 0x69, 0x01, 0xB9, 0x81, 0x68, 0xC0, 0x15, 0x90, 0x00, 0x56, 0x03, 0xE2, 0x40, 0x3B, 0x8D, 0x26, 0x10, 0x3E, 0x54, 0x99, 0x6C, 0xD9, 0x1A, 0x21, 0xCB, 0xC6, 0xCC, 0xDC, 0x85, 0x19, 0x65, 0x86, 0x35, 0x72, 0xC1, 0x49, 0x34, 0xFD, 0xC8, 0x35, 0xD9, 0x8F, 0x05, 0xF0, 0x7E, 0xB6, 0x82, 0x58, 0x30, 0x4F, 0xD5, 0xEC, 0x01, 0x0D, 0xD8, 0x78, 0x7E, 0xC4, 0xE6, 0xBF, 0xD1, 0x31, 0x9A, 0x00, 0x7F, 0x40, 0x02, 0x48, 0xFA, 0x5C, 0xD9, 0x5C, 0x86, 0x96, 0xC8, 0x9F, 0x30, 0x7D, 0x9D, 0x35, 0xAA, 0x9B, 0x60, 0x20, 0xF2, 0x6E, 0x98, 0x1D, 0x83, 0xB6, 0x27, 0xE9, 0xCC, 0x80, 0xE0, 0xFF, 0x6C, 0x90, 0x3D, 0x58, 0x80, 0x39, 0xB0, 0xE4, 0x2E, 0x34, 0xE7, 0x12, 0x93, 0x67, 0xA0, 0x29, 0xD6, 0x1D, 0x88, 0x6A, 0xEA, 0xAE, 0x42, 0x93, 0xD1, 0xD8, 0x93, 0x76, 0xB5, 0x27, 0x8F, 0xB1, 0xE1, 0x2A, 0xF2, 0x80, 0xF3, 0x64, 0xEB, 0xAF, 0x57, 0xE2, 0x76, 0x80, 0x35, 0x77, 0x2A, 0xEB, 0x24, 0xBA, 0x23, 0xE5, 0x4D, 0xE0, 0xDD, 0x71, 0x03, 0x7A, 0x03, 0xDB, 0xA7, 0x0F, 0xD0, 0xC4, 0x04, 0xCC, 0x81, 0xDD, 0x80, 0x05, 0xE0, 0x8A, 0x40, 0x41, 0xD4, 0xB8, 0x73, 0xC7, 0x97, 0x59, 0x39, 0xFE, 0x2A, 0x36, 0x54, 0x5A, 0x77, 0xD1, 0x46, 0x2F, 0xA0, 0x0C, 0x48, 0x07, 0xA2, 0xEF, 0x4F, 0x59, 0x40, 0x4F, 0x08, 0x43, 0x1C, 0x88, 0x06, 0xDA, 0x06, 0x02, 0x94, 0x01, 0x11, 0x83, 0x05, 0xA4, 0x8D, 0xA7, 0x29, 0x69, 0x33, 0x9B, 0x61, 0xDA, 0xD3, 0x46, 0x5A, 0x2E, 0xF9, 0x26, 0x91, 0xC2, 0x3C, 0x8A, 0xC4, 0x9F, 0x3F, 0x61, 0x41, 0x53, 0x9D, 0x96, 0x3B, 0xB0, 0xD9, 0x15, 0x28, 0x60, 0x9D, 0x22, 0x95, 0x96, 0x6D, 0x0A, 0x65, 0xCD, 0xC6, 0x74, 0x3E, 0x6E, 0x6E, 0xAC, 0xA4, 0xF0, 0x8F, 0x05, 0x5E, 0xF1, 0x1A, 0xDF, 0x37, 0x63, 0x2C, 0x13, 0x0C, 0xD0, 0x89, 0x60, 0x71, 0x98, 0x32, 0x2E, 0xD5, 0x8E, 0xC1, 0xC7, 0x53, 0x49, 0xCF, 0x04, 0xAA, 0x04, 0xF2, 0xC4, 0xAC, 0x80, 0xDE, 0x0C, 0xD3, 0x03, 0x96, 0x40, 0x2C, 0x20, 0x93, 0x43, 0x18, 0x88, 0x04, 0x3A, 0x6E, 0x94, 0x02, 0x31, 0x70, 0x07, 0x52, 0x26, 0xA4, 0x10, 0xB4, 0x99, 0xE3, 0xD6, 0x7E, 0x72, 0x23, 0x71, 0x79, 0x37, 0x65, 0xB4, 0x73, 0x4F, 0xD3, 0x24, 0x43, 0x37, 0x4D, 0xD5, 0xB9, 0x8D, 0x22, 0x51, 0x4D, 0xDE, 0x96, 0x2C, 0x47, 0xEE, 0x6C, 0x33, 0xA7, 0xE7, 0x3E, 0x6B, 0xB3, 0xA8, 0xC1, 0x8F, 0xD4, 0xDC, 0x9D, 0xD5, 0x98, 0x83, 0x48, 0xA0, 0x6C, 0x00, 0xDB, 0x1F, 0xC5, 0x89, 0x5A, 0x80, 0x19, 0xA0, 0x05, 0x48, 0x0C, 0x1A, 0xC8, 0xFD, 0x74, 0xFA, 0xF4, 0x41, 0x01, 0xBD, 0x07, 0x72, 0xAB, 0x6C, 0xCA, 0xA0, 0xEC, 0x5F, 0x7D, 0xB5, 0x9F, 0x5A, 0xDA, 0x5D, 0x80, 0xEA, 0xB9, 0xDA, 0xD2, 0x6A, 0x71, 0xCC, 0x55, 0x09, 0xDB, 0xE7, 0x77, 0xC8, 0xD8, 0xA3, 0xCE, 0xC3, 0xA6, 0x49, 0x8D, 0xEF, 0xE0, 0x85, 0xDB, 0x4A, 0x40, 0xD8, 0xD5, 0xDE, 0x5B, 0xFB, 0xC9, 0x55, 0x64, 0x02, 0xA3, 0x8D, 0xD5, 0xF2, 0x29, 0x28, 0x91, 0xFB, 0x2A, 0x14, 0xF6, 0x78, 0x0E, 0x69, 0xD1, 0xE7, 0xDE, 0xEC, 0xEB, 0x2E, 0x8D, 0x4D, 0x05, 0x74, 0xDD, 0x1A, 0x1E, 0x31, 0xA8, 0xBC, 0x2B, 0x64, 0x9D, 0xB0, 0x07, 0x3A, 0x78, 0x5A, 0x86, 0xA8, 0x02, 0x11, 0x80, 0x0F, 0x74, 0xFF, 0x2B, 0xD3, 0xDB, 0x9E, 0x4C, 0xEF, 0xBD, 0xF3, 0x58, 0xAD, 0xBF, 0x2C, 0xE7, 0xFC, 0xEB, 0x6F, 0xAD, 0xD0, 0x49, 0xE3, 0xCD, 0xEF, 0x77, 0x11, 0x2D, 0xA4, 0x6B, 0xE6, 0xD8, 0x30, 0x37, 0x5B, 0xB2, 0xBC, 0xC5, 0xC6, 0x77, 0x1F, 0x1E, 0x4F, 0xA0, 0x1C, 0x48, 0x03, 0xCC, 0xFE, 0x55, 0x01, 0xDD, 0x77, 0x2D, 0x62, 0x1C, 0x51, 0xBA, 0x3B, 0xDD, 0x9D, 0xC1, 0xC2, 0x0A, 0x20, 0x0A, 0x30, 0x05, 0xB4, 0x81, 0x63, 0xD1, 0x0D, 0x78, 0xDF, 0x78, 0x11, 0x0A, 0x54, 0x3D, 0x7D, 0x70, 0x06, 0xA1, 0x80, 0x16, 0xB0, 0xF8, 0xE6, 0x65, 0x43, 0x5E, 0x74, 0x61, 0xB5, 0x82, 0xB9, 0x6C, 0xDF, 0x43, 0xCE, 0x7A, 0x3A, 0x3B, 0x0B, 0xFE, 0x2E, 0x7B, 0xE3, 0x0F, 0x29, 0xF2, 0xFD, 0xCF, 0xDA, 0x61, 0xAD, 0xF5, 0x8A, 0x37, 0x51, 0xCD, 0xE5, 0xF8, 0x68, 0x14, 0xF0, 0x7C, 0xA4, 0x81, 0x9F, 0xC9, 0x28, 0x71, 0x9B, 0x6B, 0x0D, 0xAC, 0x80, 0x93, 0x19, 0x3A, 0x26, 0x29, 0x01, 0xAC, 0x1F, 0x73, 0xC9, 0x20, 0xEF, 0xB1, 0x96, 0x75, 0x8F, 0x20, 0x5F, 0x83, 0x02, 0x62, 0x0F, 0x12, 0xE8, 0xD7, 0x0F, 0x5E, 0x40, 0x0E, 0x5C, 0xEE, 0xDE, 0xFA, 0xFC, 0x6F, 0xCB, 0x80, 0xD4, 0x63, 0xB5, 0xFE, 0xCB, 0xC9, 0x8A, 0x4D, 0x45, 0xD8, 0xC0, 0xBF, 0xF9, 0xD6, 0xD0, 0xE4, 0x0A, 0xC7, 0xC1, 0xB0, 0x04, 0x59, 0xC7, 0xBA, 0xE1, 0x02, 0x56, 0xB9, 0x44, 0xE9, 0x72, 0x3D, 0xC9, 0xDE, 0xBE, 0x4E, 0xF4, 0xF8, 0x4E, 0x0F, 0xEB, 0x0D, 0x88, 0xDD, 0xED, 0x1F, 0xF6, 0xC9, 0x0C, 0x05, 0xFC, 0x49, 0x5E, 0xF1, 0x40, 0x48, 0xE1, 0x4A, 0x7E, 0x8E, 0xD3, 0x0E, 0xB9, 0xF7, 0x9D, 0xFF, 0x48, 0x17, 0x7F, 0xC4, 0xBC, 0xB9, 0x8F, 0x04, 0x08, 0x93, 0x65, 0x80, 0x7E, 0xDA, 0x39, 0xAA, 0x03, 0x59, 0x77, 0x7B, 0xB0, 0x2E, 0xA0, 0x02, 0x70, 0x07, 0x56, 0xDC, 0x15, 0x54, 0x45, 0xE1, 0x2C, 0xEE, 0xA0, 0xB2, 0xBE, 0x62, 0x29, 0x89, 0xFA, 0x1C, 0xE0, 0xE5, 0xF9, 0xC5, 0xC3, 0x4D, 0xF6, 0x1C, 0x6F, 0xC7, 0x35, 0x54, 0x8E, 0xA2, 0xE8, 0x98, 0x5F, 0x3E, 0x9D, 0xBE, 0xDB, 0xA7, 0xAF, 0xF6, 0x35, 0xC5, 0xF2, 0xEC, 0xA8, 0xEE, 0x40, 0x6C, 0x80, 0x15, 0x4A, 0x74, 0x41, 0x9F, 0x9A, 0xB8, 0x1C, 0xF8, 0xAD, 0xB7, 0xED, 0xFD, 0xA4, 0x8B, 0x3E, 0xE5, 0xC5, 0xAD, 0x80, 0xF4, 0x3D, 0x46, 0x73, 0x8D, 0x29, 0xA9, 0x70, 0x6A, 0x40, 0x08, 0x50, 0x01, 0x74, 0xDD, 0xDD, 0x57, 0x8C, 0x45, 0x53, 0x1B, 0xB0, 0x05, 0x48, 0x01, 0xCB, 0x1E, 0xE1, 0xCF, 0x04, 0xAC, 0x4F, 0xAF, 0x58, 0x5A, 0x6D, 0xFF, 0x45, 0xE2, 0x68, 0x12, 0x9F, 0x99, 0xD1, 0x57, 0x3B, 0x36, 0x2E, 0xA0, 0x9A, 0x09, 0xF7, 0x96, 0x2B, 0xF4, 0xDF, 0x76, 0x8D, 0x0E, 0x61, 0x32, 0xBA, 0x72, 0xC7, 0xA6, 0x28, 0x56, 0x05, 0x20, 0xFD, 0xE9, 0x6E, 0x79, 0x4B, 0xE9, 0xCF, 0x76, 0xE0, 0xC8, 0x1A, 0xEE, 0xAB, 0x09, 0x41, 0x1F, 0x69, 0xD3, 0x41, 0x0B, 0xB0, 0x93, 0x46, 0xE7, 0x57, 0xBB, 0x92, 0x8A, 0x79, 0xE1, 0x2D, 0x1A, 0x68, 0xF1, 0x95, 0x4B, 0x3D, 0x72, 0xCD, 0x0D, 0x07, 0x8B, 0xC7, 0x5D, 0xC1, 0x20, 0x00, 0x53, 0xB8, 0xAC, 0x81, 0xAA, 0xC1, 0xBE, 0x07, 0xE0, 0xE6, 0x9B, 0x72, 0x77, 0x5F, 0x2D, 0xA1, 0xD5, 0x64, 0x2A, 0x0A, 0xF4, 0x73, 0xAF, 0x95, 0x6F, 0xC4, 0x75, 0xDB, 0x70, 0x94, 0xEE, 0x80, 0x09, 0xD2, 0x50, 0x94, 0x26, 0x36, 0x72, 0x63, 0xFB, 0x6E, 0x35, 0xB5, 0x69, 0x35, 0x79, 0xB2, 0xAE, 0xF6, 0x95, 0x77, 0x1C, 0xE3, 0xA8, 0xF2, 0x53, 0x42, 0xA5, 0x45, 0x99, 0xA9, 0x79, 0x73, 0xDD, 0x21, 0xAA, 0x5A, 0x03, 0xB9, 0x7A, 0x61, 0x30, 0xC6, 0xB4, 0x85, 0xDE, 0xD7, 0x5B, 0x59, 0xAC, 0xEC, 0x6E, 0x74, 0x78, 0xD6, 0x07, 0xA2, 0xF4, 0x31, 0xD7, 0x20, 0x6C, 0x8C, 0xE0, 0x77, 0x19, 0xD0, 0x5E, 0x00, 0x2D, 0x93, 0x01, 0x68, 0x02, 0x6B, 0x20, 0x47, 0x57, 0x82, 0x56, 0xD3, 0xBF, 0xFC, 0x6E, 0x64, 0xF9, 0x35, 0x25, 0x8F, 0xA5, 0xC8, 0xDD, 0x51, 0x1F, 0x65, 0x47, 0x47, 0x0E, 0xB4, 0x25, 0x3A, 0xC1, 0xEC, 0x44, 0x7E, 0xFF, 0x3E, 0xB5, 0x65, 0xAF, 0x0F, 0x97, 0x4B, 0xE8, 0xF1, 0xBE, 0xDE, 0x35, 0x96, 0x47, 0x05, 0x21, 0x66, 0x1C, 0x32, 0xBD, 0x8C, 0xE9, 0xA7, 0xC0, 0xAD, 0xEF, 0x4D, 0x09, 0x4D, 0x07, 0x7E, 0xC2, 0x7E, 0xBD, 0x01, 0xE3, 0x29, 0xEC, 0xC9, 0xF7, 0x8F, 0xF5, 0x4B, 0xD0, 0x8F, 0xAB, 0x57, 0xD4, 0x15, 0x94, 0xB2, 0x0D, 0xB8, 0xDE, 0x4D, 0x7D, 0xCC, 0x80, 0xEC, 0xC1, 0x06, 0xAC, 0x80, 0xBD, 0xE7, 0xCD, 0xC6, 0xA7, 0x75, 0x85, 0x6D, 0x61, 0x35, 0x9B, 0xA2, 0x24, 0xFD, 0x33, 0x3F, 0xA1, 0x7D, 0x49, 0x8E, 0xD8, 0xE9, 0x10, 0xDA, 0x81, 0x5B, 0xDF, 0x52, 0x7C, 0x1A, 0x2B, 0xBD, 0x9D, 0xA6, 0x34, 0xCE, 0xF2, 0xC4, 0xB4, 0x91, 0x5F, 0x23, 0x91, 0x38, 0x35, 0xC5, 0xCB, 0x7F, 0xD9, 0x4D, 0x72, 0xE4, 0xA5, 0x3C, 0x80, 0xBD, 0x01, 0x0D, 0x20, 0x74, 0x7C, 0x49, 0xE3, 0x36, 0x62, 0x17, 0x8C, 0x65, 0x3F, 0xC7, 0xC9, 0x78, 0xE0, 0xA8, 0xC8, 0x7D, 0x52, 0x3D, 0xEB, 0x78, 0x1C, 0x17, 0xBB, 0xAB, 0xD2, 0x81, 0xC7, 0x8C, 0x73, 0x05, 0x58, 0xED, 0x2C, 0xEB, 0xAE, 0x76, 0x16, 0xC2, 0x00, 0xB6, 0xB9, 0x8E, 0x04, 0x4C, 0x80, 0x10, 0x16, 0xAB, 0xD2, 0x68, 0xFE, 0xB9, 0x86, 0x74, 0xED, 0x2F, 0xC8, 0xB2, 0xC3, 0x31, 0x41, 0xD3, 0xA7, 0x43, 0x06, 0x04, 0x28, 0x58, 0x71, 0xB6, 0x18, 0x64, 0xD1, 0x7D, 0xD5, 0x15, 0x7C, 0xB8, 0xB4, 0xD1, 0x97, 0x31, 0x2D, 0xB2, 0x6E, 0x09, 0x59, 0xE1, 0x04, 0x5D, 0xB7, 0x28, 0xE3, 0xE6, 0xC0, 0xA7, 0x5B, 0x9A, 0x9F, 0x16, 0x70, 0xF4, 0xE3, 0xF6, 0xD5, 0xC2, 0xCB, 0xF4, 0x8E, 0xD1, 0x2F, 0x0E, 0x04, 0x0E, 0x6D, 0xAA, 0xC8, 0x9C, 0x42, 0xBB, 0xC5, 0x2A, 0xCA, 0xBB, 0xA9, 0x8A, 0x17, 0x50, 0x72, 0xFB, 0x7E, 0x93, 0x17, 0x7E, 0x7B, 0xDA, 0xEE, 0x2F, 0x20, 0x0C, 0xB0, 0x0D, 0x9C, 0x7C, 0xBF, 0xA0, 0xD5, 0xE2, 0xCF, 0x15, 0xAD, 0x7D, 0xFC, 0x8B, 0x5D, 0xC7, 0xA4, 0xD9, 0xF6, 0x08, 0xBA, 0xEE, 0xF9, 0x43, 0x36, 0x5C, 0x5F, 0x2B, 0xE6, 0xE7, 0x9C, 0x3D, 0x2D, 0x2F, 0x3D, 0x00, 0xED, 0x5F, 0xC1, 0x07, 0x46, 0x25, 0x73, 0xDC, 0x81, 0xBA, 0x72, 0x93, 0xE5, 0x78, 0x1F, 0x7A, 0x7C, 0x11, 0x2A, 0x77, 0x7A, 0x63, 0x09, 0xA0, 0x4C, 0xC9, 0xA6, 0xCB, 0x8D, 0xC7, 0x81, 0xBA, 0x4B, 0xA8, 0xB9, 0x4F, 0xDC, 0x4D, 0xDB, 0xF5, 0x48, 0x1C, 0xC6, 0x98, 0xA9, 0x99, 0xC2, 0x3A, 0x68, 0xBB, 0x33, 0xA9, 0x82, 0xFF, 0xFA, 0x02, 0x72, 0x70, 0x1E, 0x3A, 0x5E, 0x69, 0x05, 0x62, 0x03, 0xEC, 0xF5, 0xED, 0x49, 0xA3, 0xE5, 0xB4, 0x59, 0xC7, 0x31, 0x2D, 0x5B, 0x27, 0xAA, 0xEE, 0xA3, 0xA8, 0x84, 0x8D, 0x74, 0x1B, 0x2C, 0xA9, 0xEA, 0x73, 0xF0, 0x35, 0xAC, 0xFD, 0xB7, 0x5B, 0xED, 0x6E, 0xF3, 0x09, 0xA3, 0xF9, 0x18, 0x6D, 0x03, 0xCE, 0x86, 0xCC, 0x63, 0xB4, 0x14, 0x18, 0x8D, 0xBF, 0x85, 0x7E, 0xA8, 0xC1, 0x24, 0xA3, 0x9D, 0x46, 0xFD, 0x4E, 0x4D, 0xD0, 0xB1, 0xAB, 0x9E, 0x98, 0xFC, 0x19, 0x54, 0x76, 0x57, 0xF4, 0x31, 0x34, 0x13, 0x33, 0x70, 0x94, 0x55, 0xDD, 0xFB, 0x8E, 0x16, 0x98, 0x03, 0xF9, 0x74, 0xB0, 0xC9, 0xF5, 0x64, 0x69, 0x2D, 0x3C, 0x2C, 0x03, 0xDC, 0x01, 0x4D, 0x80, 0xBD, 0xA5, 0xF7, 0x31, 0x5A, 0xE1, 0x50, 0x1B, 0x1B, 0x7B, 0xC0, 0x31, 0x76, 0x5C, 0x42, 0xF9, 0xA5, 0xF2, 0x21, 0xB5, 0xF0, 0x17, 0x90, 0xB8, 0xFD, 0xDE, 0x7D, 0xA9, 0xF0, 0x5F, 0xED, 0xC8, 0xB9, 0x80, 0x51, 0x37, 0xA1, 0x81, 0x7D, 0x95, 0x68, 0xB0, 0xB7, 0x0F, 0x97, 0x33, 0x6C, 0x2D, 0x40, 0x0D, 0xFC, 0x57, 0x7F, 0x91, 0x03, 0x9F, 0x87, 0xD8, 0x12, 0xAE, 0x0E, 0x4A, 0x2E, 0xF3, 0xE9, 0x12, 0xE7, 0xF1, 0x53, 0x27, 0x50, 0xF9, 0x8A, 0xE0, 0x02, 0x95, 0x63, 0xD8, 0x05, 0xB4, 0x71, 0xBC, 0x03, 0x92, 0xC0, 0xE2, 0x18, 0x4B, 0xC0, 0xAE, 0x11, 0xD7, 0x30, 0x09, 0xAC, 0xD6, 0x53, 0x1C, 0xB1, 0xA1, 0x78, 0x95, 0x53, 0x8F, 0xA5, 0x3A, 0x29, 0x83, 0x06, 0xFB, 0x6A, 0x60, 0x70, 0xC4, 0x86, 0xE7, 0xC8, 0x95, 0x9E, 0x86, 0xBB, 0x67, 0x92, 0xFC, 0x4E, 0xE6, 0x22, 0x27, 0xD7, 0xCC, 0xC6, 0xBF, 0xE3, 0x74, 0x35, 0xD2, 0x79, 0xA3, 0xE3, 0x19, 0xCD, 0x5F, 0xD1, 0x80, 0x1D, 0x8D, 0xE1, 0x2D, 0x63, 0xD0, 0xB1, 0x5D, 0xAF, 0x7B, 0x0A, 0x0B, 0xE7, 0x2E, 0x3D, 0xE3, 0x8F, 0xCC, 0x28, 0xD5, 0x0B, 0xCD, 0x7E, 0x5D, 0xF4, 0x29, 0x4A, 0x80, 0x6F, 0x8D, 0x0E, 0xE9, 0x1B, 0xD0, 0x04, 0x6A, 0xDC, 0x43, 0xD6, 0x40, 0xD9, 0x8D, 0xDC, 0x80, 0x25, 0xA0, 0xCA, 0x37, 0xF9, 0x1D, 0xC6, 0x68, 0x8A, 0xEC, 0x32, 0xF5, 0xF8, 0xF2, 0x64, 0x2D, 0x62, 0x72, 0x37, 0x31, 0x23, 0xD7, 0xCA, 0x0F, 0x9E, 0x31, 0x12, 0xBA, 0xFB, 0x43, 0x57, 0x5C, 0x62, 0xD5, 0xE1, 0x4F, 0xBB, 0xE3, 0x90, 0xF5, 0x4B, 0x7E, 0xA9, 0x13, 0x52, 0x52, 0x6A, 0x1C, 0xAF, 0x5B, 0xAC, 0xB4, 0x3F, 0xD8, 0x41, 0x30, 0x40, 0x6F, 0xB7, 0xFA, 0xB2, 0xFE, 0x6E, 0x30, 0x5C, 0xE7, 0xB9, 0x80, 0xB1, 0x99, 0xD9, 0x59, 0xD5, 0xF6, 0x58, 0x74, 0xE2, 0x86, 0x3B, 0x01, 0x0E, 0x0B, 0xA4, 0xAA, 0x03, 0x9D, 0x6C, 0x5D, 0x7E, 0x37, 0x2C, 0x75, 0x01, 0x3A, 0x80, 0x6A, 0x20, 0x9E, 0x50, 0xDF, 0x0A, 0x80, 0x3D, 0xB0, 0xF6, 0xB1, 0xDA, 0x1E, 0x75, 0xBD, 0x9C, 0xAC, 0xDD, 0x44, 0x8F, 0x1C, 0xB3, 0x09, 0xA8, 0x16, 0x86, 0x4A, 0x8C, 0xB5, 0x7D, 0xAC, 0xDD, 0xF2, 0x53, 0xA4, 0x95, 0x05, 0xA4, 0x5F, 0x3E, 0xDC, 0xC2, 0xEA, 0x6B, 0xF8, 0xD3, 0xC1, 0x95, 0xAB, 0xE3, 0x7A, 0x1C, 0x5F, 0xAC, 0xF5, 0xD4, 0x5C, 0x33, 0x0B, 0xAF, 0x1E, 0x2D, 0x98, 0x35, 0xF9, 0xB6, 0x41, 0x1F, 0xE0, 0xB8, 0x17, 0x67, 0xE0, 0x44, 0x4E, 0xE4, 0x60, 0xE6, 0xBA, 0x0D, 0x64, 0x1E, 0x36, 0x47, 0x4C, 0xFF, 0x3C, 0xB3, 0x33, 0x26, 0x15, 0xF2, 0x51, 0x70, 0x75, 0x0A, 0xD0, 0xF3, 0x9B, 0xF9, 0x74, 0xC2, 0xDA, 0x05, 0xB8, 0x0F, 0x02, 0xB0, 0x81, 0x24, 0xB0, 0x1D, 0xD0, 0x98, 0xEC, 0xE9, 0xA6, 0xCD, 0x04, 0xEB, 0xCE, 0xA6, 0xC9, 0x91, 0xD2, 0xC1, 0x28, 0x5E, 0x36, 0xC6, 0x9D, 0x86, 0x7C, 0xD8, 0xE5, 0x70, 0x75, 0x2E, 0x47, 0xA0, 0x18, 0xC6, 0x5A, 0xC0, 0x6B, 0xB3, 0x59, 0x0C, 0x15, 0xFB, 0x01, 0x4C, 0x17, 0x80, 0xCE, 0xC3, 0x8E, 0xF9, 0x46, 0x31, 0xA9, 0x87, 0x1B, 0xA6, 0x0B, 0x07, 0xCA, 0xF0, 0x70, 0xE9, 0x38, 0x6F, 0x7D, 0x0C, 0xC9, 0xC9, 0x4D, 0x5F, 0xEC, 0xCC, 0xB9, 0x35, 0x86, 0xB4, 0x31, 0xAB, 0xE5, 0xBC, 0x32, 0x3F, 0x40, 0xB9, 0x49, 0xF7, 0xC9, 0x9B, 0x4C, 0xA0, 0x8F, 0x21, 0x81, 0x4A, 0xFE, 0x82, 0x40, 0xEB, 0x80, 0x46, 0x5E, 0xF7, 0x7F, 0xD3, 0x06, 0xCE, 0x1F, 0x7C, 0xD1, 0x66, 0x8A, 0xF0, 0x76, 0xD9, 0x08, 0x6A, 0xC8, 0x55, 0x5B, 0xD0, 0x96, 0x13, 0x31, 0x92, 0x0F, 0x98, 0xB9, 0xD3, 0xD9, 0x00, 0xA3, 0xE6, 0xF2, 0x7B, 0x87, 0xFF, 0x6A, 0x44, 0x84, 0x22, 0x99, 0x7D, 0xC6, 0x19, 0x93, 0xBD, 0xBB, 0x60, 0x3A, 0x18, 0xAB, 0x66, 0xD0, 0x06, 0xBF, 0xDF, 0x18, 0x79, 0xC2, 0xC4, 0x8A, 0x81, 0x09, 0x13, 0x28, 0xAC, 0xA4, 0xB3, 0x04, 0xE6, 0xFA, 0xC5, 0x96, 0xEC, 0x08, 0x7F, 0xF4, 0x7C, 0x4A, 0xCA, 0x68, 0x71, 0x60, 0x52, 0x55, 0x66, 0xD0, 0x67, 0x76, 0x00, 0x3E, 0x61, 0xB2, 0xE5, 0x40, 0xD8, 0x3D, 0xBC, 0xBB, 0x80, 0x0A, 0x20, 0x0C, 0x70, 0x01, 0x98, 0x16, 0xCC, 0x9A, 0x1F, 0x1C, 0x20, 0x7A, 0x6C, 0x86, 0x4D, 0xEF, 0x8A, 0x15, 0x58, 0xF8, 0x28, 0x8A, 0xC2, 0x74, 0x6B, 0x07, 0xDC, 0xED, 0x76, 0xC5, 0x0A, 0x56, 0x03, 0x71, 0xC9, 0xB3, 0x08, 0xF2, 0xAD, 0x4E, 0x96, 0xB7, 0xCD, 0x12, 0xA4, 0x3D, 0x91, 0x8A, 0x9C, 0x89, 0xEE, 0x27, 0x59, 0xC1, 0x3F, 0xC8, 0x29, 0x07, 0xC8, 0xBC, 0xBB, 0xEA, 0xA9, 0x8F, 0x25, 0x78, 0x78, 0x0F, 0x60, 0x09, 0xAC, 0xB4, 0x65, 0x6C, 0x76, 0x75, 0xDC, 0xAB, 0x13, 0xEE, 0x5A, 0x9B, 0xDF, 0x7D, 0x46, 0x5D, 0x4E, 0x44, 0xA5, 0x00, 0x1F, 0x50, 0x07, 0xD5, 0x04, 0x88, 0x18, 0x38, 0xE0, 0x0A, 0x68, 0x01, 0xD2, 0x80, 0x2D, 0xA0, 0x85, 0x36, 0xF3, 0xBF, 0xFA, 0xEC, 0xA2, 0xC7, 0x13, 0x19, 0x9F, 0xC8, 0x6E, 0x20, 0x13, 0xC6, 0x37, 0xEA, 0xE5, 0x35, 0xA0, 0xBD, 0xB8, 0xF3, 0x0F, 0xB1, 0xDD, 0xBC, 0xDB, 0x1C, 0x2B, 0x3D, 0x91, 0xF2, 0xF3, 0x8B, 0xFA, 0xF1, 0xCF, 0x2C, 0xB9, 0xDD, 0x60, 0x26, 0x8C, 0x2A, 0x03, 0x5B, 0x6E, 0x07, 0xA1, 0xD9, 0x20, 0x6F, 0x3F, 0xB7, 0x3F, 0xC2, 0xF1, 0x1A, 0x03, 0x05, 0xC4, 0x00, 0xDD, 0x40, 0xF5, 0xE3, 0x9A, 0x6E, 0x80, 0x7A, 0xBA, 0xDB, 0x00, 0x91, 0x41, 0x03, 0xDE, 0x77, 0x32, 0xEA, 0xDB, 0xBE, 0x7D, 0xCF, 0x9B, 0xC9, 0x37, 0xFD, 0x6E, 0x6E, 0x6B, 0xC7, 0x3B, 0x34, 0x6D, 0x8E, 0xF3, 0xB4, 0xCE, 0x83, 0x93, 0xA8, 0xF7, 0x86, 0x2B, 0x4F, 0x36, 0xF2, 0xCF, 0xB2, 0xF0, 0x55, 0xB4, 0xBF, 0x9F, 0x0B, 0xC8, 0x2D, 0xDB, 0x2B, 0xBE, 0xFF, 0xB6, 0xCE, 0x3B, 0x92, 0x3E, 0x2E, 0x80, 0x5E, 0x35, 0xE3, 0xC1, 0x90, 0xC1, 0x71, 0x70, 0xD7, 0xC0, 0x1A, 0xD0, 0xBC, 0x2D, 0xBA, 0xE4, 0x96, 0x0A, 0xF6, 0x18, 0x18, 0x60, 0x7E, 0xF7, 0x31, 0xF3, 0xAB, 0x8D, 0x34, 0x12, 0x91, 0x6F, 0x6D, 0x86, 0xA0, 0x4F, 0x00, 0xD8, 0x0E, 0xF8, 0x93, 0xA4, 0x16, 0xF9, 0x34, 0x51, 0x7D, 0xF4, 0x1E, 0xAC, 0x80, 0xF3, 0x8A, 0x1D, 0xAB, 0xA1, 0x9D, 0x59, 0xBA, 0x7F, 0x59, 0x0A, 0xA5, 0x39, 0x77, 0xE5, 0x1A, 0xFF, 0x93, 0x7C, 0xC8, 0x84, 0x33, 0xAD, 0x22, 0x47, 0x2D, 0x34, 0xFE, 0x21, 0xB7, 0xCC, 0x5F, 0xB8, 0x8F, 0x7E, 0xFC, 0x69, 0xF3, 0x09, 0xC8, 0x55, 0x1A, 0x82, 0x12, 0xD5, 0xBB, 0x05, 0xC6, 0xBA, 0x53, 0xA3, 0xD6, 0xA6, 0x22, 0x15, 0x55, 0x13, 0x2F, 0x2F, 0x9A, 0xB3, 0xF2, 0x3C, 0x01, 0xAD, 0x81, 0x8E, 0x65, 0x8E, 0xFB, 0x97, 0x9A, 0x2F, 0x3C, 0xCC, 0x08, 0x65, 0xC6, 0xD9, 0xFA, 0x05, 0x88, 0xBC, 0x13, 0x5C, 0xFA, 0xA9, 0x79, 0xD1, 0x00, 0x56, 0xCF, 0x69, 0x58, 0x01, 0x69, 0xC0, 0x7A, 0xDE, 0x74, 0x5A, 0xAD, 0x3E, 0x01, 0xD7, 0x2C, 0x4C, 0xCD, 0x6D, 0x93, 0x90, 0xD0, 0x82, 0x98, 0x35, 0xF7, 0x52, 0xE9, 0xCF, 0x6A, 0xE8, 0x47, 0x8B, 0x75, 0xFA, 0x5F, 0x02, 0x0A, 0x4C, 0xC8, 0x34, 0x9E, 0xCD, 0xD7, 0x7D, 0x9C, 0x4E, 0x1E, 0xCA, 0xF7, 0xEF, 0x1E, 0x6F, 0xA7, 0xAB, 0x41, 0x39, 0xB0, 0x98, 0xB8, 0x31, 0xD8, 0xBF, 0x9E, 0x03, 0x75, 0x8B, 0xEF, 0x5D, 0x42, 0xDF, 0x7E, 0x67, 0x42, 0x16, 0xF3, 0x30, 0x72, 0xDD, 0xF7, 0x84, 0xEC, 0x3B, 0x11, 0x2D, 0x07, 0x1D, 0x77, 0x9B, 0x96, 0xB5, 0x01, 0x53, 0x40, 0x1D, 0x60, 0x09, 0x6E, 0x6E, 0xC0, 0x0C, 0xF0, 0x9C, 0x37, 0xCF, 0x58, 0x6B, 0x74, 0x20, 0xDF, 0x8E, 0x1E, 0x97, 0x36, 0x9A, 0x1D, 0x35, 0x05, 0xDA, 0xCB, 0x3E, 0x17, 0x55, 0xA7, 0xA2, 0xB6, 0x40, 0x12, 0x2A, 0x0E, 0x1E, 0x3C, 0xD5, 0x3E, 0x9E, 0xC8, 0xC7, 0xEB, 0xED, 0x76, 0xA7, 0x96, 0x6F, 0xBF, 0x65, 0x09, 0xA3, 0x38, 0x51, 0x1F, 0x29, 0xE9, 0xF5, 0xB4, 0x5A, 0xF7, 0xBB, 0x0B, 0xA1, 0xD8, 0x1D, 0x1B, 0xD1, 0xC1, 0x5A, 0x77, 0xB8, 0xA8, 0x39, 0xD2, 0xD7, 0xE3, 0xA1, 0x2E, 0xE0, 0xF8, 0x42, 0x04, 0xD8, 0x09, 0xB8, 0xAE, 0xBB, 0xA2, 0xD6, 0x7A, 0x20, 0xC0, 0xF6, 0xAB, 0xE7, 0x8B, 0xEF, 0x7F, 0xD5, 0x7F, 0x6E, 0x5B, 0xF0, 0x0B, 0x69, 0x7D, 0x81, 0x16, 0x35, 0x43, 0x56, 0x80, 0x8F, 0x17, 0x4D, 0x6D, 0xE4, 0x47, 0x0C, 0x62, 0x8A, 0xE2, 0x68, 0xB4, 0x1E, 0xF4, 0x76, 0xBF, 0xE2, 0xFB, 0x1F, 0xEC, 0x54, 0xA3, 0x9E, 0x32, 0x02, 0x6F, 0x20, 0xAF, 0x7E, 0x7A, 0xFB, 0xD4, 0xF0, 0x86, 0x3D, 0x7A, 0xC2, 0x40, 0x9D, 0x2F, 0x43, 0x6B, 0xDF, 0x0D, 0x1D, 0x5B, 0x81, 0x73, 0xF9, 0xC8, 0xDF, 0xD8, 0x8E, 0xF3, 0x0D, 0x8D, 0x85, 0x20, 0x6F, 0x23, 0x82, 0xD2, 0x3B, 0xAD, 0x4D, 0x1B, 0x38, 0x69, 0xC1, 0x09, 0x54, 0x0D, 0x36, 0xE0, 0x05, 0xF0, 0x7A, 0xD3, 0x7A, 0xE7, 0xC1, 0x55, 0xD1, 0x6A, 0xFB, 0xCF, 0xE7, 0x3C, 0x9D, 0x02, 0x7D, 0x52, 0x78, 0x4F, 0x6C, 0xFC, 0xB7, 0x09, 0xC7, 0x34, 0xCC, 0xE5, 0xAB, 0x7B, 0xD4, 0x35, 0xFA, 0x6A, 0xCC, 0x15, 0xFB, 0x99, 0xA1, 0xC9, 0xD1, 0x6D, 0x49, 0x27, 0x22, 0x10, 0x9B, 0x2B, 0x04, 0x7F, 0xA9, 0xDB, 0x94, 0x6C, 0x7C, 0x29, 0x7A, 0xB5, 0xF6, 0xA1, 0xBC, 0x4C, 0x14, 0x3D, 0xAF, 0x77, 0x86, 0x95, 0x72, 0x70, 0xCA, 0x60, 0x5E, 0xE1, 0xD0, 0x39, 0xB3, 0x90, 0xFD, 0x20, 0x83, 0x49, 0x7D, 0xEC, 0x62, 0xBC, 0x01, 0x5B, 0x40, 0x05, 0xBB, 0xD7, 0x02, 0x3D, 0xA8, 0x02, 0x62, 0xA0, 0x0A, 0xEC, 0x05, 0x08, 0x8B, 0xFF, 0x8C, 0x56, 0x93, 0x2F, 0x12, 0xA5, 0x5E, 0x7F, 0xF9, 0x99, 0x2B, 0x70, 0x78, 0x5E, 0x1B, 0x7F, 0x9E, 0xDC, 0xA3, 0x73, 0x81, 0x7C, 0xEF, 0xEA, 0xFE, 0x06, 0x87, 0xB2, 0x22, 0xE3, 0x9F, 0x5E, 0xEF, 0x52, 0xAE, 0x2C, 0x5C, 0x13, 0xFA, 0x76, 0x3E, 0x6A, 0x50, 0x75, 0xFF, 0x2A, 0x4C, 0x57, 0x7B, 0x1B, 0xD5, 0x02, 0xDC, 0x89, 0xF5, 0x6A, 0x8A, 0xE3, 0x27, 0x73, 0x79, 0x71, 0x50, 0x07, 0x10, 0x63, 0xD1, 0x53, 0x77, 0xFD, 0x01, 0x3E, 0x24, 0x0E, 0xAB, 0xBB, 0x9B, 0x48, 0x51, 0x55, 0x4C, 0x81, 0xF0, 0xC7, 0x86, 0x35, 0xD8, 0x80, 0x3B, 0xC0, 0x37, 0x6B, 0x03, 0xCD, 0x54, 0xC4, 0x4D, 0xAB, 0xA1, 0x9A, 0xC0, 0x2B, 0x3E, 0xB1, 0x4D, 0x5B, 0x81, 0x02, 0xDF, 0xD3, 0x17, 0xBA, 0x91, 0x4D, 0xD7, 0x02, 0x15, 0x7B, 0x33, 0x1C, 0x23, 0xAC, 0x6E, 0xE9, 0xE0, 0xF5, 0xD4, 0xB5, 0x5B, 0x71, 0x8A, 0x1D, 0x1D, 0x33, 0xC0, 0xEB, 0x4E, 0x3D, 0x56, 0x45, 0x4A, 0x23, 0x9D, 0x23, 0x03, 0x31, 0x86, 0xDC, 0x80, 0xD4, 0x47, 0xA2, 0xEF, 0x68, 0xB8, 0x03, 0x5E, 0x80, 0xD8, 0x20, 0xE7, 0x95, 0x4B, 0x01, 0x87, 0x4B, 0x18, 0x72, 0x9C, 0x81, 0x62, 0x0C, 0xD4, 0x01, 0x55, 0x20, 0x9F, 0x8E, 0x97, 0x49, 0x2C, 0xC0, 0x14, 0x58, 0x72, 0xC7, 0x7E, 0x58, 0x76, 0x13, 0x45, 0xAB, 0xD9, 0xA7, 0x06, 0x80, 0xE9, 0xC7, 0xF3, 0x9A, 0x41, 0x81, 0x0E, 0xDD, 0x09, 0x50, 0x69, 0x26, 0x81, 0xF3, 0xDA, 0xEA, 0xC4, 0x2F, 0x58, 0xEB, 0x3A, 0xAF, 0xC5, 0x7A, 0x9A, 0xF6, 0xEE, 0xE2, 0xFC, 0x61, 0x87, 0x44, 0x20, 0x0B, 0xD8, 0x7D, 0x57, 0x8C, 0x85, 0x00, 0x6B, 0xDF, 0x89, 0x0C, 0x51, 0x80, 0xB3, 0x71, 0x2C, 0xD3, 0xBA, 0xF2, 0x5F, 0xAD, 0xF3, 0x14, 0xF0, 0xBE, 0xCF, 0x6B, 0x47, 0x56, 0x74, 0xD0, 0x8F, 0xD0, 0x90, 0x0F, 0x28, 0x75, 0xBB, 0xFC, 0x2D, 0x70, 0x03, 0xAA, 0x80, 0x70, 0x40, 0x37, 0xB0, 0x12, 0x10, 0x7D, 0x14, 0x23, 0xB7, 0xF9, 0x17, 0x97, 0xF2, 0x76, 0x5A, 0xED, 0xB3, 0x61, 0x84, 0xCE, 0x48, 0x6F, 0x1C, 0x8D, 0xC4, 0x51, 0x29, 0x93, 0x1B, 0x27, 0xD0, 0x46, 0xF5, 0xCF, 0x7D, 0xCA, 0xA5, 0xD5, 0xAE, 0x3C, 0xA2, 0xE6, 0x5E, 0x08, 0x6C, 0xC1, 0xC3, 0xD3, 0x65, 0xB8, 0x01, 0x95, 0xA7, 0x5F, 0xAE, 0x03, 0x4D, 0x04, 0xC0, 0xCA, 0xDC, 0x0E, 0x20, 0xF6, 0x40, 0x00, 0x77, 0x20, 0xE5, 0x17, 0x9E, 0x72, 0xEA, 0xAF, 0x1D, 0x23, 0xAC, 0x27, 0x9D, 0x34, 0x1B, 0x68, 0xC6, 0xF7, 0x39, 0x27, 0x56, 0x01, 0xAE, 0x80, 0xD9, 0xBD, 0x87, 0x6E, 0xBE, 0xF9, 0xC6, 0xF0, 0x8F, 0xD5, 0x62, 0x72, 0xB8, 0x0A, 0x91, 0xE3, 0xD0, 0xAB, 0xB4, 0x3D, 0x96, 0x51, 0xB1, 0x14, 0x8B, 0x6B, 0x4C, 0x10, 0xBE, 0xF2, 0x12, 0x21, 0xEA, 0xA7, 0x13, 0x8B, 0x9D, 0xEC, 0xC2, 0xC9, 0x15, 0xAD, 0x0B, 0x71, 0x1A, 0xE8, 0x6D, 0xC5, 0x2B, 0x14, 0x25, 0xD8, 0x74, 0xB3, 0xD2, 0xD7, 0xC6, 0x9A, 0x82, 0xB8, 0x9B, 0x2B, 0x65, 0x00, 0x2B, 0x66, 0xC1, 0x17, 0x40, 0x37, 0xE0, 0xFE, 0xDB, 0x9D, 0xF3, 0x38, 0x87, 0xD9, 0x0D, 0x44, 0x9E, 0x46, 0x74, 0xDD, 0x93, 0xA9, 0x3A, 0xF7, 0xF9, 0x15, 0x40, 0xDA, 0xAD, 0x5D, 0xB3, 0x05, 0x0F, 0xBB, 0x9F, 0xA4, 0x4D, 0x01, 0x92, 0x37, 0x7F, 0xA3, 0xD1, 0x72, 0x74, 0x91, 0xEA, 0xF3, 0x49, 0xEE, 0xBD, 0xAF, 0xAE, 0xF7, 0x5B, 0x13, 0x5E, 0xD6, 0x12, 0x58, 0xC2, 0x6A, 0x4A, 0x9D, 0x83, 0x7E, 0xEE, 0x5B, 0x30, 0x32, 0x7F, 0xB5, 0x64, 0x94, 0x31, 0x50, 0xCC, 0x30, 0x64, 0x90, 0xFE, 0x72, 0xE4, 0xA4, 0x4F, 0x0F, 0x14, 0xD7, 0x5F, 0x87, 0x07, 0x39, 0x9E, 0x42, 0xCF, 0xBB, 0x09, 0xDA, 0x56, 0xC6, 0x8E, 0x6E, 0x6D, 0xF9, 0x54, 0x40, 0x1A, 0xE0, 0x16, 0x48, 0x85, 0x53, 0xDF, 0xF7, 0x15, 0x3E, 0x84, 0xDE, 0x81, 0x49, 0x6A, 0x2D, 0xA0, 0xE7, 0x0E, 0x6E, 0x74, 0x46, 0x6D, 0x40, 0x6D, 0x90, 0x03, 0x01, 0x76, 0x0F, 0x0C, 0x90, 0x06, 0xFA, 0x8C, 0xB4, 0xFA, 0x56, 0xFF, 0xCE, 0xFA, 0xF3, 0x46, 0xB6, 0x15, 0x6E, 0x22, 0x7B, 0xB6, 0x0B, 0x60, 0x57, 0x63, 0x1F, 0xAC, 0x98, 0xD3, 0x83, 0x53, 0xB6, 0xEF, 0x8A, 0xB0, 0x9C, 0x53, 0xD3, 0xB9, 0x11, 0x14, 0x2C, 0x12, 0x06, 0xB0, 0x54, 0xDA, 0xE5, 0x6E, 0x33, 0x48, 0x17, 0x7E, 0xFA, 0x98, 0x62, 0x01, 0x27, 0x0A, 0x67, 0xBF, 0xEB, 0x85, 0x9C, 0xDB, 0x82, 0xFB, 0xAC, 0xEC, 0x09, 0x6C, 0x05, 0x98, 0xB3, 0x52, 0xFE, 0x6B, 0xC0, 0xD8, 0xA7, 0x22, 0x81, 0x2D, 0x74, 0xBC, 0x27, 0x7C, 0x52, 0x80, 0x36, 0xD0, 0x2C, 0xCD, 0x76, 0xA0, 0x15, 0xA8, 0x04, 0xE2, 0xD5, 0xFB, 0x69, 0x40, 0x0C, 0xE8, 0xA4, 0xD1, 0x90, 0x61, 0x2B, 0xDB, 0xBE, 0x40, 0xA8, 0x71, 0xA4, 0xD1, 0x79, 0xDD, 0x3E, 0xC5, 0x1D, 0xF0, 0x23, 0xB5, 0x43, 0x63, 0x67, 0xC2, 0x52, 0x2A, 0xB7, 0x33, 0xF2, 0xA4, 0x08, 0xF8, 0xA5, 0xB2, 0x19, 0xE3, 0xC8, 0x4B, 0x16, 0x4E, 0xCF, 0x54, 0xA0, 0x87, 0xB9, 0xC7, 0x90, 0x79, 0xE2, 0x57, 0xFC, 0x62, 0xF9, 0x41, 0x8E, 0x58, 0xB0, 0xF1, 0x0F, 0xC0, 0x43, 0x80, 0x8C, 0x59, 0xEB, 0x71, 0x96, 0xD7, 0xE9, 0xEA, 0x89, 0x65, 0xE4, 0x83, 0x1E, 0x0D, 0xF1, 0x15, 0xE3, 0xB0, 0x12, 0xA0, 0x62, 0x06, 0xE1, 0x02, 0xA2, 0xEE, 0xC0, 0x41, 0x06, 0x10, 0x0D, 0x58, 0x02, 0x9B, 0x5E, 0xBA, 0x35, 0xE0, 0x9B, 0x74, 0xE0, 0x3A, 0x75, 0x8F, 0x03, 0x36, 0x33, 0xC5, 0x71, 0x5E, 0xF6, 0x34, 0x9A, 0x4B, 0xB8, 0xB6, 0x76, 0xE0, 0x4F, 0x25, 0x3D, 0x13, 0x29, 0x98, 0xDE, 0x79, 0x2B, 0x02, 0x5C, 0x41, 0x7D, 0xD1, 0x71, 0xA5, 0xEE, 0xA3, 0x01, 0x20, 0xC9, 0x35, 0xE2, 0xF7, 0xFB, 0x06, 0x2C, 0x22, 0x76, 0xBA, 0xB1, 0xC4, 0x02, 0x96, 0xFD, 0x2A, 0x70, 0x78, 0x3E, 0xE8, 0x73, 0xDE, 0x8C, 0xBC, 0xEB, 0x4C, 0xC4, 0x01, 0xCA, 0xBB, 0xA4, 0x51, 0x7D, 0x6C, 0xDC, 0x90, 0xE3, 0x4B, 0x5B, 0x35, 0xF3, 0x6A, 0x3C, 0xC6, 0xE2, 0x40, 0x8D, 0x1B, 0xD9, 0x0A, 0xCE, 0x3E, 0x31, 0x20, 0xD7, 0x40, 0x00, 0x6F, 0x40, 0x1D, 0xD8, 0x03, 0x1D, 0x89, 0x8C, 0x9D, 0x34, 0xDA, 0xDC, 0x0A, 0x74, 0x7D, 0x02, 0xFC, 0xE9, 0x8A, 0xEC, 0x64, 0x06, 0x0B, 0x03, 0xB6, 0x8B, 0x0A, 0xB8, 0x78, 0x6C, 0x9A, 0x1C, 0xA7, 0x31, 0x5A, 0xFC, 0xB4, 0x50, 0xD5, 0x5F, 0x9A, 0xDC, 0xC9, 0xE3, 0xB0, 0x83, 0xCD, 0xD5, 0x9A, 0x31, 0xCB, 0xB8, 0xAA, 0xAF, 0x83, 0x07, 0xB6, 0x06, 0x6C, 0xB0, 0x8F, 0x74, 0xD6, 0x9D, 0x81, 0xA7, 0x03, 0x51, 0x60, 0x2D, 0x40, 0x78, 0x8B, 0xCF, 0xA7, 0xD3, 0x7E, 0xE7, 0xDD, 0xC8, 0x4C, 0x0C, 0xA0, 0xF3, 0x60, 0x0D, 0x8E, 0x4E, 0xB8, 0x00, 0xBE, 0x01, 0x33, 0x40, 0xF6, 0xAD, 0xBE, 0xE3, 0x05, 0xE4, 0x7A, 0xBC, 0x1D, 0x2E, 0x70, 0x86, 0xAF, 0xFC, 0x6B, 0xA8, 0xFD, 0x60, 0xF2, 0x58, 0x4D, 0x1B, 0x2A, 0x99, 0x90, 0x4F, 0x7F, 0x3B, 0xB9, 0x78, 0x40, 0xC7, 0x5F, 0x9D, 0xBA, 0x4D, 0xCF, 0x5D, 0xCA, 0xDE, 0x1B, 0xE8, 0x44, 0xC9, 0x99, 0x77, 0x45, 0x69, 0x29, 0x79, 0x1A, 0x42, 0xC5, 0x9D, 0xF6, 0xD2, 0x0A, 0xC8, 0x55, 0xAF, 0xAA, 0x27, 0x23, 0x39, 0x13, 0xB0, 0x81, 0xEB, 0xE0, 0xEA, 0x82, 0xE1, 0x27, 0x05, 0x27, 0x95, 0xD7, 0x01, 0x65, 0x61, 0x15, 0x03, 0xD3, 0x77, 0x65, 0x81, 0xDB, 0x1D, 0x4B, 0x8E, 0x41, 0xD7, 0xA0, 0x81, 0x4A, 0x20, 0x14, 0xB0, 0x06, 0x82, 0x51, 0x46, 0x8E, 0xB5, 0x69, 0x72, 0xDC, 0x4E, 0x2F, 0x2E, 0x14, 0x1F, 0xD6, 0x72, 0x18, 0x3D, 0xF4, 0x3B, 0xE8, 0x69, 0x0B, 0x9C, 0x9B, 0xBB, 0x70, 0x6D, 0xD9, 0x7A, 0x54, 0xAE, 0x3E, 0xDA, 0x93, 0xE3, 0x57, 0x63, 0x12, 0x95, 0xBB, 0xD6, 0x9E, 0x99, 0x18, 0x40, 0xCE, 0x5C, 0x8E, 0x53, 0x5D, 0xA9, 0x6B, 0xEC, 0x24, 0x00, 0x5D, 0x19, 0x4D, 0xA7, 0xAC, 0xCF, 0x49, 0x4D, 0x81, 0x20, 0x7A, 0x50, 0x6C, 0xDE, 0x38, 0xF6, 0xBD, 0xE4, 0x31, 0x51, 0x6C, 0x7B, 0x77, 0xED, 0x95, 0x05, 0xA4, 0xDC, 0xBD, 0x8E, 0x9D, 0xBB, 0xB0, 0x00, 0x61, 0x80, 0xF7, 0x5D, 0x77, 0xD9, 0x83, 0xDC, 0x40, 0x05, 0xB7, 0x2C, 0x5A, 0x0D, 0x7B, 0x40, 0x5B, 0x7D, 0xE9, 0xF2, 0x31, 0xA1, 0x61, 0x5F, 0x83, 0x12, 0x88, 0x65, 0x6D, 0x41, 0x16, 0x94, 0x39, 0xB4, 0x5A, 0x3D, 0xFF, 0xA5, 0x11, 0xE6, 0x6F, 0xF3, 0xF6, 0x0F, 0x76, 0x9C, 0x5A, 0x47, 0x52, 0x9D, 0xFA, 0x13, 0xBF, 0x94, 0xA7, 0x38, 0xF5, 0xCF, 0xF5, 0xA4, 0xC3, 0x6E, 0xBB, 0xFD, 0x40, 0x74, 0xE6, 0x26, 0xD1, 0x00, 0x53, 0x8A, 0x29, 0x45, 0xC0, 0x26, 0xEC, 0xC2, 0x19, 0x7A, 0x5A, 0xD7, 0x33, 0xC2, 0xBC, 0xEF, 0x0E, 0x96, 0x5A, 0x40, 0xD5, 0x3D, 0x35, 0xAB, 0x07, 0x0E, 0x44, 0x02, 0xEA, 0xF7, 0x24, 0x16, 0x03, 0x5A, 0x69, 0x35, 0xFF, 0x8B, 0x91, 0xB4, 0x6A, 0x74, 0x81, 0x83, 0xB2, 0x9A, 0xC7, 0xB8, 0x47, 0x1C, 0x09, 0x65, 0x29, 0xF8, 0x46, 0x6A, 0x7F, 0x90, 0x82, 0x8C, 0xBB, 0x51, 0xD2, 0x7E, 0x6A, 0x67, 0xA9, 0x0F, 0x67, 0xC7, 0x78, 0x0D, 0x68, 0x5C, 0xBE, 0x59, 0x26, 0x91, 0x1D, 0x85, 0x49, 0xDE, 0x18, 0x14, 0xD8, 0x75, 0x37, 0xCD, 0xF3, 0xBC, 0xDB, 0x44, 0x2D, 0xBF, 0x6D, 0xD8, 0xFA, 0xB3, 0x1A, 0x73, 0xB5, 0xE3, 0x94, 0xD0, 0xEE, 0xE6, 0x90, 0x93, 0x47, 0x49, 0xD3, 0xEE, 0x94, 0x3D, 0xA7, 0x6E, 0xA4, 0x01, 0x51, 0x80, 0x0F, 0x74, 0x6C, 0x5F, 0x0A, 0xB8, 0x00, 0xC7, 0xEB, 0x65, 0xB4, 0x5A, 0xA0, 0x24, 0x47, 0x78, 0x97, 0xE2, 0xA1, 0xB0, 0x26, 0xE5, 0x24, 0xE0, 0x23, 0x32, 0x81, 0x9C, 0xC3, 0xDC, 0xB7, 0xF3, 0x6D, 0xA8, 0x1D, 0x97, 0xD5, 0x98, 0x52, 0x7C, 0x3A, 0x68, 0xFA, 0xF1, 0x66, 0xF9, 0xF5, 0x6B, 0x8C, 0xCA, 0x1C, 0xF6, 0xF3, 0xAB, 0xBB, 0xBD, 0xC4, 0x4F, 0x66, 0xC4, 0x4E, 0xDE, 0xBA, 0xCD, 0x58, 0x93, 0xB1, 0x53, 0x15, 0xD0, 0x67, 0x6A, 0x02, 0xBC, 0xCE, 0xB6, 0x5D, 0x12, 0xC4, 0x7E, 0x8E, 0x83, 0x52, 0xF7, 0x99, 0x4D, 0x0C, 0xC8, 0x0F, 0x7A, 0x94, 0x73, 0xF6, 0x20, 0x04, 0xF0, 0x7C, 0x64, 0xC2, 0x0C, 0x88, 0x41, 0xC9, 0xAD, 0xAA, 0xB3, 0x3D, 0xCF, 0x86, 0x9C, 0x85, 0x3E, 0xBD, 0x9F, 0xE9, 0x98, 0xE6, 0x56, 0x3D, 0xFD, 0x67, 0x37, 0x4A, 0xCE, 0x3D, 0xE0, 0x4A, 0x2E, 0x67, 0xA9, 0xF1, 0xED, 0xFB, 0x56, 0x5E, 0x99, 0x9B, 0xF2, 0x7D, 0x31, 0x2B, 0x29, 0x6B, 0xB4, 0xE8, 0xBF, 0xA2, 0xCF, 0x9E, 0x1B, 0x6B, 0xFD, 0xF2, 0x34, 0x17, 0xD5, 0x95, 0x6D, 0xDD, 0x59, 0x93, 0xF4, 0xE9, 0xAE, 0xB7, 0x39, 0xC8, 0x02, 0xD4, 0x7F, 0x63, 0x34, 0x01, 0x8C, 0xA7, 0xAB, 0x2D, 0x77, 0x4D, 0x54, 0x74, 0x9D, 0x36, 0x7D, 0x62, 0x40, 0xF8, 0x93, 0x44, 0xF4, 0x68, 0x3C, 0x2D, 0x7F, 0xBA, 0x29, 0x2C, 0xC0, 0x13, 0xC8, 0x3D, 0xD6, 0x2E, 0x5A, 0xAD, 0xA6, 0x0A, 0x1A, 0x5D, 0x6C, 0xE4, 0xBA, 0x4C, 0xC5, 0x08, 0xF6, 0xD5, 0x49, 0xC7, 0x6B, 0x11, 0x4C, 0x5B, 0x43, 0x9E, 0xBC, 0xBC, 0xC5, 0xB3, 0xB6, 0x8F, 0x4C, 0x37, 0x73, 0x57, 0xF8, 0x6F, 0xFC, 0xAE, 0x84, 0xEB, 0x24, 0x46, 0x9D, 0xC5, 0x96, 0xBD, 0xDE, 0x98, 0x50, 0xA5, 0x97, 0x58, 0x23, 0x70, 0xB4, 0x13, 0xCE, 0xA8, 0x74, 0x1D, 0xC4, 0x80, 0x29, 0xDB, 0x74, 0xD3, 0x85, 0x8C, 0xB9, 0xFC, 0x77, 0x27, 0x83, 0x8F, 0x89, 0x5D, 0x36, 0xAE, 0x53, 0xAA, 0xB3, 0x6A, 0x4A, 0x80, 0x68, 0x36, 0x75, 0x06, 0xB6, 0xDC, 0xF2, 0x6A, 0x5D, 0x03, 0x9D, 0x87, 0x01, 0xC4, 0xA2, 0xD5, 0x7A, 0x3A, 0x58, 0xC6, 0x17, 0x67, 0x51, 0xBF, 0xEF, 0xED, 0x15, 0xD3, 0x21, 0x3A, 0x0C, 0xE3, 0x47, 0x63, 0x62, 0x37, 0x46, 0xFF, 0xE3, 0xA3, 0x83, 0x4B, 0x75, 0x92, 0xAB, 0x33, 0x69, 0x9D, 0x43, 0x79, 0x50, 0x00, 0xD7, 0x6F, 0x59, 0x5B, 0xD5, 0x3B, 0x4B, 0x94, 0x3D, 0x0A, 0xD3, 0x7E, 0x65, 0xF8, 0x9B, 0x5E, 0x07, 0xBA, 0xCB, 0xAC, 0x00, 0x17, 0xC0, 0xFA, 0xE7, 0x24, 0xDF, 0x7A, 0x6E, 0x06, 0xAC, 0xD5, 0x8C, 0x4B, 0x6D, 0x2B, 0x26, 0x60, 0x5C, 0x63, 0x0A, 0x86, 0xE3, 0xFB, 0x54, 0xB8, 0x49, 0x00, 0x21, 0x83, 0x1E, 0xE4, 0x60, 0x0F, 0xD6, 0x2D, 0x00, 0xA7, 0x5C, 0xD6, 0x62, 0x4E, 0xC5, 0xD5, 0xDF, 0x04, 0xF5, 0x2C, 0xF8, 0x9C, 0x25, 0x67, 0x34, 0x50, 0x15, 0xD7, 0x66, 0x3B, 0xAF, 0x49, 0xD4, 0xE9, 0xBB, 0xE2, 0xD8, 0x9E, 0x2C, 0x5C, 0xA3, 0xDB, 0xC1, 0xEB, 0x4E, 0xCE, 0x61, 0x1A, 0x0F, 0x6F, 0x9D, 0x7D, 0x75, 0x3C, 0x86, 0x43, 0xF1, 0x78, 0x34, 0xE8, 0xA4, 0xE9, 0x93, 0x66, 0xDC, 0xAC, 0x31, 0x18, 0xEC, 0xD3, 0xC9, 0x12, 0x38, 0x51, 0x1A, 0xFD, 0xC5, 0xAF, 0xB6, 0x9E, 0x7D, 0x6E, 0x31, 0x11, 0x8B, 0xB7, 0xCE, 0x98, 0x15, 0xAC, 0x81, 0x60, 0x61, 0xAD, 0x00, 0xCD, 0x8A, 0xDA, 0x18, 0x18, 0xB0, 0xE7, 0x95, 0x1A, 0xC4, 0xA0, 0xD8, 0x4B, 0x47, 0x68, 0xB5, 0x3D, 0xBD, 0x9C, 0xF4, 0xAF, 0x70, 0x88, 0xBA, 0xBA, 0x64, 0x68, 0x34, 0xD6, 0xD6, 0x36, 0x08, 0x1C, 0x45, 0xB0, 0x43, 0xE8, 0xD5, 0xD7, 0x32, 0xF2, 0xB1, 0x9A, 0x3B, 0x9D, 0x35, 0x7B, 0xD6, 0x09, 0x26, 0x22, 0xF2, 0x62, 0x34, 0xCB, 0x5A, 0xB3, 0x4E, 0xDB, 0xEF, 0x8C, 0xF8, 0xBD, 0x79, 0x89, 0xBD, 0xA2, 0x77, 0x6B, 0xF3, 0x30, 0x03, 0x18, 0xE1, 0x80, 0x16, 0x50, 0x74, 0x4D, 0x71, 0xD7, 0x63, 0x15, 0x6D, 0x32, 0x3B, 0xBA, 0xC6, 0x40, 0xEC, 0x1C, 0x9C, 0x00, 0xEB, 0x20, 0x2D, 0xC6, 0x7F, 0xA4, 0x80, 0x3F, 0xB0, 0x0D, 0xEC, 0x04, 0x16, 0x3F, 0x05, 0x50, 0x49, 0xAB, 0x09, 0x42, 0x04, 0x3B, 0xBF, 0xD8, 0x7B, 0xAB, 0x61, 0x2E, 0xF1, 0x66, 0xB1, 0x14, 0x87, 0x2E, 0xC5, 0x66, 0x50, 0xBD, 0x31, 0xE4, 0xFC, 0xE9, 0xDD, 0x0E, 0xEE, 0xD3, 0x73, 0xD8, 0xE2, 0x74, 0xA4, 0x1C, 0x03, 0x29, 0x60, 0x0C, 0xE7, 0xF2, 0xBE, 0xC0, 0x8B, 0x42, 0x5D, 0xC1, 0xCE, 0x2A, 0x40, 0xE4, 0x8E, 0xFA, 0xF9, 0x8C, 0x2E, 0x1A, 0xA8, 0x6D, 0xB0, 0x80, 0x64, 0xAE, 0x01, 0x43, 0xE2, 0x77, 0x7B, 0x6C, 0xFE, 0xCD, 0xF6, 0x51, 0xDA, 0xB4, 0x19, 0x6B, 0xEA, 0x40, 0x31, 0x8F, 0x7B, 0x6C, 0xB8, 0x1B, 0x08, 0x19, 0x6C, 0xC0, 0x1C, 0x60, 0x52, 0x78, 0x37, 0x3F, 0x01, 0x6D, 0xB4, 0x9A, 0x42, 0x47, 0xCF, 0xEB, 0x69, 0xA5, 0x4A, 0xA5, 0x88, 0x91, 0x50, 0xC8, 0xA9, 0x85, 0xA8, 0x1E, 0x87, 0xE7, 0x13, 0x30, 0x78, 0xAD, 0x96, 0x3C, 0x87, 0xD7, 0xBE, 0x33, 0xDC, 0x29, 0x0C, 0xCF, 0x16, 0x29, 0x79, 0x2F, 0xF8, 0xAC, 0x7C, 0x0C, 0xB9, 0x7B, 0xB7, 0xEF, 0x7C, 0xAE, 0x06, 0x06, 0x44, 0x01, 0xB5, 0x80, 0xBB, 0x90, 0xD1, 0x8E, 0x60, 0xF0, 0x91, 0x9A, 0x38, 0xA5, 0xEF, 0x33, 0xE4, 0x3C, 0xE8, 0x1E, 0x98, 0x89, 0xFA, 0x74, 0x3C, 0x36, 0x05, 0x4A, 0x06, 0x06, 0xE4, 0x06, 0x5C, 0x01, 0x5B, 0x80, 0x1B, 0x8D, 0x47, 0xAB, 0x19, 0xAC, 0x56, 0x49, 0xAB, 0xE1, 0x0E, 0xB2, 0x1D, 0x28, 0xA3, 0xA4, 0x10, 0x84, 0x09, 0x12, 0x56, 0x6B, 0xA9, 0x3B, 0xE8, 0x2E, 0x4F, 0x48, 0xAF, 0x7A, 0x8D, 0x81, 0xEC, 0xE7, 0xA2, 0x65, 0x54, 0xCC, 0xC7, 0x5C, 0xCA, 0xE8, 0x07, 0x2C, 0x5A, 0x67, 0x63, 0x5C, 0x3A, 0x46, 0x5F, 0xCC, 0x41, 0xB9, 0xCB, 0x1A, 0x77, 0x8C, 0x9D, 0x0C, 0xE8, 0xBE, 0x8F, 0xBC, 0x61, 0x57, 0x4E, 0xA6, 0x9C, 0x02, 0xF7, 0x55, 0x3F, 0x6D, 0x00, 0x84, 0x70, 0xE0, 0x69, 0x61, 0x4A, 0xA9, 0xDC, 0x2D, 0x96, 0xD9, 0x1F, 0x58, 0xD7, 0x60, 0x03, 0x3B, 0x98, 0x35, 0x08, 0xA4, 0x00, 0x94, 0x42, 0x0D, 0xA7, 0xD5, 0x7C, 0x42, 0x9F, 0xFA, 0x05, 0xA7, 0x32, 0x6E, 0x2F, 0x6E, 0x77, 0xF2, 0x9E, 0x31, 0x79, 0x1E, 0x93, 0xE0, 0xE1, 0x7D, 0x77, 0x63, 0x59, 0x8F, 0xC0, 0x77, 0x9C, 0xD6, 0xE8, 0xF5, 0x3B, 0xE3, 0x30, 0x2A, 0xD5, 0x47, 0x59, 0xFC, 0xF4, 0x57, 0xFD, 0x89, 0xE5, 0xF4, 0xD8, 0xA2, 0x4E, 0x3A, 0xEF, 0x51, 0xFE, 0x71, 0x86, 0x01, 0x66, 0x4E, 0x0E, 0x7A, 0x0F, 0xFA, 0x17, 0xBF, 0x62, 0x23, 0x12, 0xE6, 0x7C, 0x8B, 0x9E, 0xD5, 0x8A, 0x1A, 0x95, 0xBA, 0xEF, 0x4C, 0x2C, 0x18, 0xC1, 0x4F, 0xD2, 0xDC, 0x6A, 0xC0, 0x06, 0x5E, 0x03, 0x07, 0x2C, 0x2F, 0x50, 0x17, 0xF4, 0x37, 0xD6, 0x98, 0x73, 0xEB, 0xEF, 0x0C, 0x85, 0x0F, 0x72, 0xEB, 0x58, 0xAD, 0x27, 0xA1, 0x7F, 0x8F, 0x6A, 0x87, 0xDE, 0xBB, 0x01, 0xB8, 0x4F, 0x03, 0x0A, 0xA3, 0xD5, 0xD4, 0x7F, 0xE9, 0xAE, 0x2C, 0x72, 0xCC, 0x73, 0x8B, 0xE6, 0xAE, 0x29, 0xCE, 0xB8, 0xD0, 0x4C, 0xFF, 0x3B, 0xC3, 0xC8, 0xAF, 0x5E, 0x29, 0xC2, 0xAE, 0x1B, 0x47, 0x25, 0x6D, 0x19, 0xB0, 0x13, 0xA8, 0xB8, 0xFA, 0x78, 0xDB, 0x91, 0x2E, 0x8D, 0xFE, 0x75, 0x92, 0xF3, 0x29, 0x64, 0x67, 0x03, 0x65, 0x98, 0x92, 0x0E, 0x35, 0x34, 0x5F, 0xDF, 0x40, 0x2D, 0xA0, 0xF7, 0x8D, 0x6A, 0x7E, 0x1A, 0x21, 0xDA, 0x04, 0x62, 0xD3, 0x6A, 0xF9, 0xDD, 0xDA, 0xED, 0xA7, 0x08, 0xE0, 0x09, 0x51, 0x4D, 0xE8, 0x7B, 0x29, 0x2E, 0x9E, 0x5B, 0x27, 0x93, 0x84, 0xB3, 0xB7, 0xFF, 0x51, 0xC9, 0x22, 0xFA, 0x34, 0xE6, 0x3A, 0xB2, 0x5F, 0x7E, 0x47, 0x6E, 0x93, 0x1E, 0xD9, 0x81, 0x33, 0x81, 0xA7, 0x7F, 0x59, 0xC5, 0x79, 0xB4, 0x0B, 0x56, 0x1D, 0x9C, 0x7D, 0x8B, 0x99, 0xE0, 0x4C, 0x98, 0xEF, 0xB1, 0x76, 0x5C, 0x01, 0xAF, 0xAB, 0xEA, 0xD5, 0xE2, 0xEE, 0x20, 0x5B, 0x0E, 0x64, 0x03, 0xB5, 0xEF, 0x96, 0xA8, 0x41, 0x5F, 0xDD, 0x7C, 0xAA, 0xE6, 0x43, 0x40, 0xEC, 0x4E, 0x21, 0xD9, 0x00, 0x5E, 0x19, 0xAB, 0x71, 0x1B, 0xA0, 0x4B, 0xD4, 0xBF, 0x18, 0xD5, 0xEE, 0xC2, 0x3A, 0x6A, 0x85, 0x84, 0x9D, 0x0E, 0x58, 0x42, 0xF2, 0x83, 0xAF, 0xCD, 0x14, 0xAC, 0x67, 0x5D, 0x93, 0x5F, 0x3D, 0x58, 0x71, 0x4F, 0xDB, 0xA7, 0xB9, 0xFD, 0x2E, 0xC0, 0x03, 0x08, 0x01, 0xE8, 0x81, 0x5B, 0x63, 0x0B, 0x8E, 0x6E, 0x59, 0xB7, 0xC0, 0xED, 0x2E, 0x3C, 0xE4, 0x5A, 0x79, 0xF9, 0x3B, 0x13, 0x17, 0xFB, 0x6B, 0xFB, 0xB0, 0xBB, 0x58, 0x5D, 0x68, 0xAE, 0x04, 0x52, 0x81, 0x68, 0x20, 0x37, 0xD0, 0x8F, 0xDA, 0x18, 0x4D, 0x99, 0xFB, 0x31, 0x7A, 0xD1, 0xE8, 0x77, 0x67, 0xDF, 0x5C, 0xC7, 0x6A, 0xFD, 0x57, 0xD3, 0x06, 0x9A, 0x63, 0xCD, 0xE0, 0x1A, 0x1D, 0xB9, 0x7A, 0xEC, 0xA1, 0x5C, 0xDA, 0x2B, 0x27, 0xA9, 0xCD, 0x9D, 0x49, 0x91, 0x77, 0xDF, 0x82, 0xFD, 0x74, 0xCE, 0xE3, 0x05, 0x90, 0xD7, 0x5F, 0x5E, 0x8D, 0x7B, 0xDF, 0xC2, 0x2D, 0xDE, 0xBF, 0x83, 0xE5, 0x04, 0xA2, 0x98, 0x03, 0x6E, 0x53, 0x76, 0x62, 0xCC, 0xA3, 0x45, 0xD2, 0xE2, 0x69, 0x19, 0x2A, 0xB3, 0x7E, 0xF3, 0x5F, 0xA0, 0x09, 0xFB, 0xC4, 0x84, 0xB3, 0xEE, 0xF6, 0x4C, 0x3E, 0xD0, 0x1A, 0xF8, 0x20, 0xEF, 0x20, 0xB2, 0x6E, 0x80, 0x9F, 0xBC, 0x00, 0x7D, 0x9C, 0xCB, 0xA1, 0xB7, 0x76, 0x64, 0x04, 0x8D, 0x96, 0xEB, 0xEA, 0x9C, 0x27, 0xBD, 0xBF, 0xA2, 0x6D, 0x11, 0x9D, 0x55, 0x62, 0xCA, 0x19, 0x43, 0x50, 0xEA, 0xD5, 0x82, 0x7F, 0x2F, 0x58, 0x6F, 0xFC, 0xD6, 0x1D, 0xFB, 0xA5, 0x4C, 0xF7, 0x2B, 0x0C, 0x04, 0x42, 0x81, 0x92, 0x81, 0x01, 0x2D, 0x4F, 0x77, 0xE3, 0x10, 0x7A, 0xC2, 0x6E, 0x75, 0xE0, 0xA0, 0x5B, 0xDA, 0xCF, 0x9A, 0x75, 0xD2, 0xA4, 0xE2, 0xE4, 0xA7, 0x06, 0xB5, 0x07, 0x02, 0xB0, 0xF5, 0x8F, 0x3E, 0xE2, 0x31, 0xF0, 0x06, 0x62, 0x3F, 0xCA, 0x00, 0x6F, 0xC4, 0x7F, 0x60, 0xEB, 0x5F, 0xCA, 0x00, 0xF5, 0x0E, 0xB5, 0xDC, 0x5F, 0xC2, 0xDA, 0xEE, 0x3D, 0xA3, 0x11, 0xE2, 0x61, 0xCD, 0xFC, 0x0E, 0x43, 0x1E, 0x0C, 0xFB, 0x97, 0xB6, 0xC1, 0x94, 0xCB, 0xF6, 0xA5, 0x4C, 0x97, 0xFE, 0xF8, 0x24, 0xE3, 0x14, 0xAF, 0xCA, 0x9D, 0x97, 0xD2, 0x1B, 0x26, 0x09, 0x05, 0xDA, 0xD9, 0xB1, 0x05, 0x26, 0x59, 0x57, 0x01, 0x50, 0x8C, 0x56, 0xF5, 0x14, 0x60, 0x30, 0x3D, 0x5B, 0xEA, 0x54, 0x29, 0xD6, 0x15, 0x5D, 0x99, 0x9C, 0x11, 0x56, 0x65, 0xC0, 0x61, 0x78, 0x8B, 0x79, 0x06, 0x60, 0x06, 0x48, 0x0D, 0x7C, 0xD0, 0x80, 0xD7, 0x93, 0x67, 0xBA, 0x01, 0x13, 0x60, 0xE7, 0xDD, 0x3B, 0xCC, 0x05, 0x38, 0x79, 0x4D, 0x71, 0xAC, 0xC6, 0x86, 0x66, 0x93, 0x95, 0x92, 0xA8, 0xDD, 0x56, 0x96, 0x51, 0x46, 0xCD, 0xE6, 0x1E, 0xB8, 0x4A, 0x4B, 0xC2, 0x95, 0xA3, 0x7D, 0x67, 0x96, 0xFA, 0x33, 0xD6, 0x4E, 0x16, 0xD0, 0x3E, 0x39, 0x8B, 0x77, 0x80, 0x3C, 0x15, 0x68, 0x3A, 0x2A, 0xD7, 0xAF, 0x00, 0xD8, 0x58, 0x28, 0x75, 0x4E, 0x9B, 0x52, 0x40, 0x1A, 0xCC, 0x25, 0xEB, 0x97, 0xDB, 0x89, 0xE8, 0xC1, 0x19, 0xC6, 0x7E, 0x9A, 0x35, 0xEE, 0xA7, 0x3F, 0x36, 0x77, 0x81, 0x70, 0xC0, 0x37, 0x60, 0x39, 0x68, 0x80, 0xA3, 0x4B, 0xE4, 0xFE, 0x39, 0xB3, 0x7F, 0xB5, 0xE6, 0xCA, 0xA7, 0x35, 0x97, 0x1C, 0xAB, 0xE9, 0x7D, 0xE2, 0x98, 0xA8, 0x81, 0xC9, 0x9E, 0x5F, 0x37, 0x31, 0x19, 0x7C, 0x51, 0x35, 0x66, 0xB2, 0xAA, 0x94, 0x97, 0xF6, 0xBB, 0x02, 0x48, 0xF6, 0xB3, 0x85, 0xE6, 0xD8, 0xE2, 0x78, 0xE3, 0x19, 0x15, 0x52, 0xA0, 0x9E, 0x02, 0xC3, 0xA2, 0x54, 0xF7, 0xEF, 0x8C, 0xAE, 0xEB, 0x54, 0x58, 0xC5, 0x18, 0x8F, 0x6A, 0xEE, 0xD4, 0x21, 0x9C, 0xD1, 0x75, 0xB2, 0x22, 0x9F, 0x16, 0x97, 0xB9, 0x81, 0xBD, 0x9E, 0xDE, 0x96, 0x3E, 0x58, 0x03, 0x01, 0xF2, 0x91, 0x8B, 0x89, 0x05, 0xF8, 0x40, 0x9E, 0x16, 0xA2, 0xB9, 0x80, 0xBA, 0x9C, 0xCB, 0xB0, 0x9A, 0x4D, 0x06, 0x96, 0x1F, 0xAB, 0xF9, 0x97, 0x81, 0x30, 0xC1, 0xD0, 0x70, 0x66, 0x07, 0xD0, 0xCF, 0x89, 0x55, 0x66, 0x39, 0x03, 0xC8, 0x57, 0x1B, 0x72, 0xC0, 0xE9, 0xF1, 0xD0, 0x53, 0x79, 0xD9, 0xFD, 0xC8, 0x46, 0x51, 0x5D, 0x50, 0x00, 0x4B, 0xFA, 0xDF, 0x28, 0x78, 0xC8, 0x5A, 0x80, 0x5F, 0xCD, 0x90, 0xC1, 0x5A, 0xDA, 0x73, 0xE6, 0x64, 0x21, 0x1A, 0xBD, 0x9D, 0xF0, 0x24, 0xDF, 0x1D, 0x80, 0x18, 0x4E, 0x61, 0xCA, 0x6D, 0x01, 0x66, 0x80, 0x38, 0xB0, 0xEB, 0x71, 0x78, 0xEF, 0x59, 0x41, 0x06, 0xA9, 0x40, 0x2C, 0x3E, 0x64, 0x6A, 0x25, 0x60, 0x7D, 0x77, 0xC1, 0xF4, 0xA4, 0xD1, 0xCE, 0xE1, 0xF6, 0x88, 0x97, 0x57, 0x7F, 0x2B, 0x3E, 0x6A, 0xDC, 0xAA, 0xBF, 0xBF, 0x5C, 0x88, 0x7D, 0x07, 0xF4, 0xB0, 0xEF, 0x53, 0x76, 0xEC, 0xAB, 0x77, 0xDE, 0x23, 0x24, 0x2C, 0x27, 0xA9, 0xEC, 0x8C, 0x80, 0x3D, 0x48, 0x40, 0x17, 0xB0, 0x7B, 0x20, 0x80, 0xCA, 0xB1, 0x36, 0xF5, 0x1F, 0xEE, 0x46, 0xC5, 0xA6, 0x67, 0xF7, 0x38, 0x4B, 0x90, 0x9F, 0xF5, 0xFB, 0x1C, 0xBE, 0x1E, 0xC9, 0x9C, 0xE0, 0xA7, 0x00, 0x4C, 0x00, 0x8D, 0x81, 0x0F, 0x0A, 0xF0, 0xE6, 0x82, 0x0F, 0x48, 0x0F, 0x04, 0x58, 0x1C, 0x8D, 0x0E, 0x78, 0x00, 0x79, 0x35, 0x6A, 0x85, 0xD5, 0xE2, 0x8B, 0xB1, 0x64, 0x20, 0x4E, 0x95, 0xB5, 0xE1, 0x64, 0x1B, 0x5D, 0x7E, 0xDD, 0x3D, 0xD9, 0x88, 0xFE, 0xFD, 0xD6, 0xE6, 0xF6, 0x07, 0x5F, 0x29, 0x03, 0x54, 0x6F, 0x3A, 0xAE, 0xDD, 0x69, 0x6B, 0xC5, 0xC4, 0xB1, 0x59, 0xE4, 0x44, 0xEE, 0xC0, 0x70, 0xFB, 0x2D, 0xC1, 0x77, 0xC4, 0x33, 0xEC, 0xDA, 0x49, 0x8D, 0x43, 0x87, 0x6A, 0x86, 0x94, 0xAB, 0xE8, 0x4B, 0xEA, 0xD5, 0x4F, 0xFE, 0x56, 0x37, 0x10, 0xAF, 0x48, 0xCE, 0xBE, 0xB7, 0x42, 0xD5, 0xC1, 0x1A, 0xD8, 0x7D, 0xB8, 0x95, 0xF5, 0xC8, 0xD9, 0x38, 0xB0, 0xB9, 0x5B, 0x26, 0x60, 0x7D, 0xCB, 0xFE, 0x98, 0x1D, 0xAB, 0xF1, 0xD2, 0x8E, 0x4B, 0x47, 0xE7, 0xFE, 0xC2, 0x55, 0xB6, 0xF6, 0x34, 0x18, 0x6D, 0x04, 0x9D, 0x22, 0xFE, 0x90, 0x0E, 0x83, 0xB6, 0xC7, 0xAE, 0xB4, 0xD6, 0xBF, 0x8A, 0x33, 0xB8, 0x43, 0x45, 0x8E, 0x2D, 0xF4, 0x3E, 0x63, 0xAC, 0x85, 0x4F, 0xE5, 0x40, 0x6E, 0xA0, 0xE8, 0x91, 0x95, 0x98, 0xF9, 0x53, 0xB7, 0x6A, 0x05, 0xA7, 0xBB, 0xFD, 0x5A, 0x16, 0xE5, 0x11, 0x84, 0x17, 0x1A, 0xC8, 0x00, 0xDE, 0xE4, 0xFB, 0x59, 0xCF, 0xCC, 0x01, 0xED, 0xC1, 0xF3, 0x89, 0x86, 0x5D, 0x05, 0xE8, 0x40, 0x12, 0x58, 0x7D, 0x47, 0xAE, 0x7D, 0x90, 0xB4, 0x7D, 0x1F, 0xAB, 0xD5, 0x17, 0x71, 0x8F, 0x90, 0x69, 0xB2, 0x9B, 0x88, 0x1D, 0xAC, 0x44, 0x25, 0xA4, 0xA1, 0xAD, 0xA5, 0x6E, 0x47, 0x2E, 0x80, 0x35, 0x52, 0x8A, 0x53, 0x98, 0x86, 0x4B, 0xEB, 0xDD, 0x37, 0x03, 0x5E, 0xE1, 0xED, 0x49, 0xB7, 0xE3, 0x27, 0xCF, 0x07, 0x3D, 0xA6, 0x3C, 0x6D, 0xEF, 0x16, 0x13, 0xAC, 0xE9, 0x0C, 0x05, 0x92, 0x1D, 0x96, 0xB8, 0x5A, 0x8D, 0xF1, 0xE8, 0x68, 0xE7, 0xB5, 0x55, 0x6E, 0xCD, 0xE0, 0xB0, 0xA7, 0x30, 0x66, 0xDD, 0x49, 0x98, 0x5D, 0xFC, 0x04, 0x48, 0x01, 0xB5, 0xEF, 0xFE, 0x83, 0xCB, 0xF9, 0x10, 0x30, 0xBD, 0x17, 0x14, 0xF5, 0x79, 0xC5, 0x8E, 0xD5, 0xFA, 0xAF, 0x36, 0xC4, 0x35, 0x65, 0x2A, 0xCF, 0xAC, 0x21, 0xBF, 0x8C, 0xEA, 0xFD, 0x8D, 0xE1, 0x30, 0xCD, 0xB9, 0x78, 0x4F, 0xB0, 0xBD, 0x6F, 0x8F, 0xC7, 0xE5, 0xC9, 0xBD, 0x8E, 0x6B, 0x69, 0xB7, 0xE8, 0xAA, 0x24, 0x60, 0x0A, 0xC8, 0x51, 0xE3, 0x1C, 0xD8, 0x2F, 0x13, 0x83, 0x9A, 0x72, 0x6C, 0xC0, 0xC2, 0x4C, 0xD8, 0x1E, 0x53, 0xC6, 0x2D, 0x47, 0xD2, 0xA7, 0xDD, 0x7D, 0x0F, 0xD4, 0x07, 0x06, 0xC8, 0x06, 0x16, 0x57, 0x84, 0x22, 0xE6, 0xA1, 0x02, 0x3A, 0xA8, 0x73, 0xDA, 0x03, 0xB6, 0xF3, 0x21, 0xE0, 0x0B, 0x90, 0x0D, 0x68, 0xCD, 0x2B, 0xC7, 0x6A, 0x85, 0x78, 0x5E, 0x2C, 0xC3, 0x75, 0x23, 0x13, 0x0D, 0x2A, 0x96, 0xC1, 0x49, 0xFC, 0xAD, 0x79, 0x8C, 0x21, 0xD8, 0x37, 0x0E, 0xE1, 0x63, 0xF6, 0xBE, 0x5B, 0x91, 0xEB, 0x13, 0x42, 0x36, 0x1D, 0xAB, 0x51, 0xC8, 0xB8, 0x38, 0x82, 0x1A, 0x08, 0x07, 0xF8, 0x90, 0xE6, 0x32, 0xAA, 0x6E, 0xF0, 0x7E, 0x4E, 0x79, 0x4C, 0xE0, 0xD6, 0xCB, 0xDD, 0x3D, 0xA7, 0x18, 0xBF, 0x45, 0x95, 0xFB, 0xE4, 0xD3, 0x1A, 0x6D, 0x68, 0x80, 0x25, 0xB0, 0x8D, 0x76, 0x1A, 0xAC, 0xC7, 0x6A, 0x02, 0x94, 0xD0, 0x16, 0xC0, 0xCA, 0x79, 0xE8, 0x80, 0x0B, 0x20, 0x0D, 0x18, 0x0D, 0x2B, 0xC7, 0x6A, 0xE8, 0xF8, 0xB0, 0x9A, 0xFD, 0x7F, 0x98, 0x73, 0xA4, 0x08, 0x33, 0x4C, 0xDD, 0xB6, 0x4B, 0x4D, 0x37, 0xE5, 0x18, 0xE7, 0x72, 0xB0, 0xBC, 0xFD, 0x6E, 0x6F, 0xC9, 0x11, 0x7C, 0x1C, 0x36, 0x9C, 0x69, 0x9B, 0xA2, 0xA2, 0x1B, 0xC8, 0x00, 0xBA, 0x67, 0x3C, 0x19, 0x10, 0x71, 0xBA, 0xC4, 0x9C, 0xA2, 0x65, 0x15, 0x8A, 0x3D, 0xC2, 0x78, 0xBA, 0x8E, 0xBF, 0x9F, 0xDD, 0xE0, 0x97, 0x8F, 0x99, 0xC7, 0x86, 0x55, 0x3C, 0x17, 0x3E, 0x47, 0x0E, 0x05, 0x56, 0x30, 0x8F, 0x69, 0xB0, 0x06, 0x75, 0x0B, 0xDE, 0x56, 0xD0, 0x8B, 0x03, 0xB0, 0x29, 0x63, 0x0F, 0x9C, 0x6F, 0x3A, 0xE0, 0x74, 0x72, 0x19, 0xAD, 0x26, 0x7F, 0xF1, 0x99, 0x7B, 0xE3, 0x70, 0x50, 0xE8, 0x10, 0x2D, 0xA3, 0xDD, 0xE1, 0x6A, 0x93, 0x1C, 0x12, 0xF8, 0xB6, 0x5A, 0xD3, 0x55, 0xBD, 0x28, 0xAD, 0x76, 0xCB, 0x50, 0xAC, 0x9F, 0xC2, 0xFE, 0x76, 0x46, 0x90, 0x8F, 0xE3, 0xC2, 0x8C, 0x8E, 0x55, 0x40, 0x0B, 0x30, 0x01, 0xAA, 0xA6, 0x8E, 0x3F, 0x61, 0x2D, 0x61, 0x86, 0x60, 0x01, 0x99, 0xB0, 0x5D, 0xF6, 0x18, 0x94, 0xED, 0x68, 0x58, 0xF6, 0x31, 0xB3, 0x9D, 0xA7, 0x28, 0xE1, 0xF7, 0xB4, 0xDB, 0x4C, 0xBE, 0x00, 0x75, 0x40, 0x1A, 0x50, 0x05, 0x72, 0xDD, 0x16, 0x49, 0x05, 0x82, 0x0F, 0x59, 0xD7, 0x95, 0x80, 0x3B, 0x90, 0x94, 0xE7, 0x0D, 0x1A, 0x4D, 0x71, 0x0B, 0xD5, 0x89, 0x53, 0x75, 0xA3, 0x6E, 0x4F, 0x75, 0xD4, 0x98, 0x14, 0x51, 0xA3, 0xC2, 0x27, 0xF6, 0xE7, 0x73, 0xB8, 0xBF, 0xCB, 0xFF, 0xE1, 0x92, 0xFC, 0x4D, 0xD0, 0x75, 0x94, 0xCD, 0x29, 0xDB, 0x02, 0x6C, 0xEA, 0x48, 0x0C, 0xA2, 0x81, 0x32, 0x2E, 0x79, 0x74, 0x5C, 0xDF, 0xD5, 0xF9, 0xB6, 0xF0, 0x90, 0x72, 0x2F, 0x0C, 0xA7, 0xC4, 0x3A, 0x11, 0xFA, 0x33, 0x8B, 0xE2, 0x94, 0x2C, 0xAC, 0x3D, 0x58, 0xF7, 0x65, 0xB4, 0x74, 0x20, 0x83, 0xBA, 0xCF, 0x42, 0xC5, 0x8A, 0xC6, 0xC1, 0xD6, 0x7B, 0x82, 0xDA, 0x06, 0xF6, 0x35, 0x4F, 0x79, 0x8D, 0x83, 0xD5, 0xEC, 0xDB, 0x34, 0xC3, 0x05, 0xBF, 0x60, 0xC7, 0x57, 0x73, 0x16, 0x59, 0x4C, 0xE9, 0x9A, 0x0C, 0x13, 0x9D, 0xF0, 0x89, 0x4F, 0x86, 0x49, 0x5C, 0x07, 0x8F, 0xBC, 0x43, 0x2D, 0x76, 0xAE, 0x9F, 0xAD, 0xEB, 0x16, 0x7C, 0x6E, 0x3A, 0x33, 0x63, 0xE0, 0x83, 0x05, 0x50, 0xF3, 0xC6, 0x2E, 0x4D, 0x73, 0x9B, 0x20, 0x2A, 0xA5, 0xAF, 0x29, 0xE8, 0xDE, 0x47, 0x89, 0x21, 0x9D, 0x97, 0x51, 0x1E, 0x87, 0xB1, 0x35, 0x08, 0xE0, 0x01, 0xA8, 0x03, 0xDB, 0x80, 0xD5, 0x83, 0x02, 0xB6, 0x02, 0x76, 0x0A, 0x22, 0x37, 0xA0, 0x09, 0x48, 0x00, 0x4B, 0xD9, 0x50, 0x9D, 0x37, 0xE9, 0xBB, 0x49, 0xA1, 0x9C, 0xB1, 0xE6, 0x7F, 0xF5, 0x79, 0xA4, 0x0A, 0xBF, 0xB5, 0xFB, 0xD7, 0xB4, 0x68, 0xA9, 0x8D, 0x6C, 0x4B, 0x21, 0xD6, 0x66, 0x14, 0x63, 0xF1, 0x69, 0xC8, 0x6A, 0xB7, 0x16, 0xBF, 0x5F, 0x55, 0xA1, 0xAC, 0xEC, 0x3D, 0x7D, 0x73, 0xED, 0x7C, 0xD1, 0x48, 0x0E, 0x16, 0x60, 0xE5, 0xDD, 0xA3, 0x54, 0x18, 0x57, 0xB6, 0xF1, 0x97, 0x6F, 0x98, 0x2B, 0x16, 0xC0, 0x66, 0xF3, 0x27, 0x1B, 0x9E, 0xB3, 0xD0, 0x61, 0x27, 0xBF, 0xB3, 0x92, 0x2C, 0x01, 0x5E, 0xE8, 0xD3, 0x01, 0x0B, 0x40, 0x09, 0xBB, 0x3F, 0xC5, 0xD3, 0x4A, 0xDA, 0x13, 0xB0, 0x81, 0x6C, 0x76, 0x37, 0x00, 0x7C, 0x90, 0x7A, 0xBC, 0x28, 0xB4, 0x5A, 0xA0, 0xD3, 0x43, 0x27, 0x42, 0x24, 0x1B, 0x5B, 0xA8, 0xC4, 0x9E, 0x32, 0x1E, 0x0C, 0xB2, 0xF4, 0x64, 0xEF, 0x49, 0x98, 0xE0, 0x5E, 0xD6, 0xAE, 0x14, 0x0F, 0x9E, 0x7B, 0x28, 0x7E, 0x78, 0xBB, 0x82, 0xE2, 0xED, 0xB9, 0x16, 0x78, 0xD8, 0x41, 0x3D, 0x93, 0x5F, 0xDC, 0x32, 0x4E, 0xAA, 0xBB, 0x3A, 0x00, 0x13, 0xD6, 0x91, 0xA2, 0x0E, 0x76, 0x18, 0xF5, 0x9F, 0x3B, 0xC0, 0xCE, 0x15, 0xD3, 0x64, 0xA0, 0x80, 0x3A, 0x20, 0xFB, 0x81, 0x00, 0xBA, 0x81, 0x53, 0xF1, 0x29, 0x40, 0x39, 0x90, 0x0A, 0x18, 0xB7, 0x84, 0x06, 0x22, 0x81, 0xF3, 0xCA, 0x19, 0x6A, 0xF9, 0xE5, 0x76, 0x78, 0xFC, 0x62, 0x06, 0x5F, 0x60, 0x76, 0xFA, 0x43, 0x2F, 0xA3, 0x32, 0x15, 0x9C, 0xFC, 0x2B, 0x61, 0x90, 0x08, 0x8A, 0x93, 0x5E, 0x92, 0x61, 0x92, 0xCF, 0xAA, 0x26, 0x8C, 0x23, 0xEB, 0x9D, 0xA0, 0x28, 0x09, 0x58, 0x03, 0x19, 0x3F, 0xBD, 0x17, 0x86, 0x05, 0x98, 0x51, 0xD0, 0x30, 0xA8, 0x32, 0x01, 0x94, 0x4A, 0x3D, 0x7A, 0xDA, 0xE4, 0x1D, 0x6F, 0xB9, 0x5C, 0xFD, 0x97, 0x7E, 0xFD, 0x51, 0x81, 0x25, 0xD7, 0x04, 0xF3, 0x0D, 0x58, 0xDE, 0x9F, 0x6A, 0x3D, 0xFE, 0xAB, 0x30, 0xC0, 0x1D, 0x50, 0x03, 0xA8, 0xA0, 0x5E, 0xC0, 0xB9, 0xC0, 0x84, 0xD3, 0x68, 0x53, 0x5E, 0xC0, 0x1F, 0x4F, 0xC7, 0xDF, 0xB8, 0x6D, 0xAA, 0x4C, 0x74, 0x32, 0x61, 0x74, 0x72, 0x92, 0x1A, 0xB3, 0xC5, 0xFC, 0x57, 0xCF, 0x52, 0x79, 0xB5, 0x3A, 0x66, 0x71, 0xF0, 0x11, 0xBB, 0xB1, 0x13, 0x74, 0xAD, 0xF1, 0x5E, 0xFB, 0x06, 0xCC, 0x00, 0xD9, 0x80, 0x7E, 0xA8, 0xD3, 0x0A, 0xB1, 0x27, 0xCE, 0xD2, 0x05, 0xB8, 0xE3, 0xA1, 0xF6, 0xFC, 0xDC, 0x07, 0x3D, 0x77, 0x86, 0x53, 0x67, 0xB7, 0x19, 0xD7, 0x07, 0x78, 0x14, 0xE9, 0x06, 0x92, 0x88, 0x1B, 0xE5, 0xF3, 0xA6, 0x02, 0xD5, 0x9C, 0x11, 0x83, 0x27, 0x57, 0xC0, 0x0D, 0x10, 0xBF, 0x7B, 0xC2, 0x4A, 0xD3, 0x68, 0xFD, 0xA5, 0xFB, 0x95, 0xE5, 0x95, 0x7B, 0xD5, 0xDB, 0xB0, 0x7E, 0x6D, 0x9D, 0x06, 0xCD, 0x75, 0x92, 0x40, 0xA4, 0x39, 0x3D, 0x2D, 0x1F, 0x29, 0x0A, 0x96, 0xBC, 0xDA, 0xD3, 0x29, 0x23, 0x18, 0x6D, 0x9C, 0x94, 0xF5, 0xFD, 0x60, 0xE5, 0xAF, 0xD3, 0x60, 0x8F, 0x73, 0x48, 0x61, 0x5D, 0x43, 0x9D, 0x32, 0xE0, 0x14, 0xFE, 0xC6, 0x2B, 0xBE, 0x61, 0xC8, 0xE3, 0x74, 0xB3, 0x5B, 0xA6, 0xC2, 0x38, 0x81, 0xE3, 0x6E, 0x46, 0xE8, 0x0E, 0xD8, 0xA6, 0xAD, 0x01, 0x33, 0xA0, 0x6C, 0xFE, 0xA8, 0x0B, 0xE8, 0x41, 0x0D, 0xDC, 0x81, 0x1D, 0xF3, 0x66, 0xDC, 0x1D, 0x0A, 0x4F, 0x69, 0xE3, 0x74, 0xB6, 0x0B, 0x8D, 0xEB, 0x7C, 0xBB, 0x2A, 0x27, 0x3B, 0xCA, 0x26, 0x69, 0x3A, 0x66, 0xAE, 0x32, 0x74, 0xD2, 0xD7, 0x40, 0x93, 0x27, 0x6B, 0x6D, 0x71, 0xAD, 0x57, 0x61, 0x0E, 0xD1, 0x64, 0x05, 0x9C, 0x58, 0x3F, 0x90, 0x83, 0xAA, 0x9F, 0x9F, 0xAC, 0x8E, 0xAC, 0xB7, 0x4E, 0x26, 0x94, 0xFC, 0x42, 0x8F, 0xA7, 0x9F, 0x23, 0x75, 0xBC, 0x18, 0x97, 0x56, 0xA6, 0x11, 0xE2, 0xD3, 0xA9, 0x8D, 0xA9, 0x93, 0xD4, 0xBE, 0xA9, 0x2D, 0x57, 0x80, 0xFB, 0xC0, 0x06, 0x7D, 0xCB, 0x02, 0x78, 0x00, 0x2D, 0x40, 0x19, 0x10, 0xEB, 0x6E, 0x60, 0x72, 0xE4, 0xEA, 0x07, 0x6D, 0x34, 0xDA, 0x4F, 0xE4, 0x5B, 0xA0, 0xA2, 0x50, 0xE8, 0xA1, 0x87, 0x11, 0xE6, 0xF6, 0x39, 0x06, 0x64, 0x1B, 0x3C, 0x02, 0x25, 0x9F, 0xCB, 0x44, 0xDC, 0x2F, 0x25, 0x61, 0xE7, 0xF4, 0x5C, 0xC7, 0x61, 0x7A, 0xD7, 0x00, 0x58, 0x0F, 0x1C, 0x10, 0xDE, 0x9F, 0x0D, 0x88, 0x1A, 0xD8, 0x5D, 0x2D, 0x70, 0x9C, 0xF3, 0x06, 0xEC, 0xBC, 0xFB, 0xFE, 0x2F, 0xBF, 0xFD, 0xD2, 0xC6, 0xA4, 0xDC, 0xC4, 0xA7, 0xB5, 0x01, 0x1D, 0x98, 0x00, 0x6A, 0x83, 0x3D, 0x90, 0x81, 0x03, 0x1E, 0x77, 0x8C, 0x53, 0x02, 0xD8, 0x8F, 0x2C, 0x65, 0xEE, 0xC7, 0xE9, 0xBB, 0x8E, 0x33, 0x87, 0x56, 0x83, 0x9D, 0xD2, 0xE4, 0xCF, 0x67, 0x5D, 0x8E, 0xEF, 0x88, 0xE6, 0x58, 0xC1, 0x3B, 0xA0, 0x73, 0x5E, 0x93, 0xAE, 0x23, 0x8A, 0x13, 0x5E, 0x1A, 0xDD, 0x90, 0xB7, 0xD6, 0x37, 0xE3, 0xB6, 0xEC, 0x4F, 0xD6, 0x1F, 0xE0, 0x0B, 0xBB, 0x2B, 0x06, 0xA5, 0xB1, 0xA6, 0x3E, 0x27, 0xA0, 0x5D, 0x40, 0xD3, 0xB1, 0x76, 0x94, 0xF9, 0x8E, 0x76, 0x25, 0xCB, 0x60, 0xAF, 0x1E, 0x4A, 0x2A, 0x4F, 0xAF, 0x29, 0x19, 0xF8, 0xDD, 0xE1, 0x88, 0x9F, 0xD2, 0x06, 0x0D, 0x94, 0x01, 0xCD, 0x62, 0x65, 0x03, 0x8A, 0xFD, 0xAB, 0x0A, 0xD8, 0x31, 0x0F, 0x1B, 0xB0, 0x02, 0xB6, 0x03, 0x77, 0xAA, 0x2B, 0xAC, 0xA6, 0x67, 0xAC, 0xE5, 0x82, 0x27, 0x83, 0x9F, 0x76, 0x22, 0xF3, 0xFB, 0xEB, 0x1E, 0x54, 0x10, 0x89, 0x59, 0x0B, 0x9F, 0x02, 0xBA, 0xF2, 0xEA, 0x74, 0xAC, 0x05, 0xAD, 0xC6, 0x9C, 0x62, 0xFA, 0x3A, 0x1D, 0xF0, 0x00, 0xAC, 0x9E, 0xBF, 0xE8, 0x7A, 0x42, 0xD9, 0xEC, 0xC7, 0x26, 0x9C, 0xE0, 0xD4, 0x03, 0x00, 0x4C, 0xFF, 0xD5, 0x0D, 0xCE, 0xEE, 0x40, 0x9B, 0xD8, 0x20, 0x81, 0x90, 0x7B, 0x94, 0x84, 0xFE, 0x87, 0xD6, 0x37, 0xD3, 0x6E, 0x06, 0xA9, 0x40, 0xC8, 0xFD, 0x70, 0xF1, 0x4D, 0x9D, 0x4F, 0xEB, 0x8D, 0xE8, 0xB5, 0x7D, 0x55, 0xB4, 0xE6, 0x38, 0xA2, 0x85, 0xA3, 0x7E, 0x7B, 0x45, 0x61, 0x59, 0x5B, 0x01, 0xD1, 0x94, 0xA9, 0x48, 0x17, 0x6D, 0x38, 0x57, 0x50, 0xB1, 0x6D, 0xF9, 0x8E, 0xB5, 0x1D, 0xBF, 0x40, 0x45, 0x8E, 0x65, 0x8A, 0x82, 0x09, 0xE7, 0x53, 0x27, 0x10, 0x8F, 0x4E, 0x84, 0x51, 0xA9, 0x39, 0x4F, 0x8F, 0x2A, 0xAA, 0xAE, 0x01, 0xFE, 0xAB, 0x92, 0x66, 0x7D, 0x5E, 0x33, 0x34, 0x7C, 0xFC, 0x9E, 0x2A, 0x80, 0xCD, 0x43, 0xDD, 0x40, 0x2F, 0x5E, 0x8D, 0x00, 0x49, 0x40, 0x0D, 0xB0, 0x41, 0x31, 0x0A, 0xEB, 0x40, 0x05, 0x90, 0x09, 0x58, 0xDF, 0x72, 0xD1, 0x39, 0xE0, 0xEC, 0x49, 0x3F, 0x56, 0x73, 0xE4, 0x10, 0x8D, 0x1E, 0xA2, 0x35, 0x66, 0xE8, 0x5A, 0x8E, 0x75, 0x5B, 0x03, 0x27, 0x68, 0x85, 0x25, 0x24, 0x02, 0xBE, 0x92, 0x5A, 0xB4, 0xDA, 0x33, 0xD6, 0x6A, 0xAC, 0xC6, 0x5F, 0xDF, 0xC7, 0x5C, 0x03, 0x37, 0x40, 0x0B, 0xA0, 0x8F, 0x32, 0x06, 0x96, 0x47, 0x56, 0x83, 0x93, 0x91, 0x17, 0x25, 0xE0, 0x1C, 0xA8, 0x7C, 0x1D, 0x6B, 0x27, 0xF3, 0xC0, 0x8F, 0xB3, 0xD0, 0x1F, 0xD7, 0x21, 0x67, 0xE1, 0xF2, 0x41, 0x0C, 0x1A, 0xD8, 0x32, 0x28, 0xC0, 0x0C, 0xE8, 0x78, 0x42, 0xA5, 0x6B, 0x1E, 0x16, 0x10, 0x06, 0x98, 0x00, 0x9E, 0xF3, 0x8A, 0x1C, 0xAB, 0xC5, 0xA7, 0x24, 0x5F, 0xD9, 0xDF, 0x25, 0xCA, 0x7D, 0x7F, 0xCE, 0xC9, 0x52, 0x9D, 0x16, 0x28, 0x82, 0x5F, 0x62, 0xF7, 0xDC, 0x7F, 0x37, 0x52, 0x14, 0x63, 0x53, 0xBF, 0xE3, 0xE9, 0xFC, 0x70, 0x35, 0x04, 0x84, 0x0B, 0xE3, 0x5A, 0x59, 0xEA, 0x69, 0xE7, 0xE9, 0x0D, 0x58, 0xDC, 0xFD, 0x29, 0xF9, 0xD7, 0x76, 0xE7, 0x90, 0xCB, 0x01, 0x0B, 0xA9, 0x03, 0x7F, 0xF4, 0x79, 0x93, 0xE9, 0xB8, 0xA7, 0xAD, 0xE0, 0x06, 0x44, 0x80, 0xD8, 0x40, 0xC9, 0x60, 0x3D, 0x9F, 0x0C, 0xE8, 0x75, 0x1B, 0x2F, 0xF5, 0x91, 0x5E, 0xA9, 0xE7, 0x2A, 0xC6, 0x37, 0x1D, 0xD0, 0x41, 0xF7, 0xB1, 0x5A, 0x7E, 0x63, 0x2D, 0x5C, 0xD1, 0x6E, 0xB7, 0xE5, 0x9B, 0xA1, 0xD9, 0xAC, 0x15, 0x73, 0x24, 0x11, 0xD7, 0x9E, 0xEE, 0x49, 0x93, 0x19, 0xA1, 0xEB, 0xB6, 0x9A, 0x3D, 0x5D, 0x2E, 0xE3, 0xF8, 0x06, 0xEE, 0xBE, 0xA5, 0x96, 0x80, 0x0E, 0x36, 0x13, 0x16, 0x02, 0x78, 0xAA, 0x2A, 0xF4, 0xE4, 0x1E, 0x75, 0x00, 0x8C, 0x7C, 0x9E, 0xB3, 0x3F, 0x93, 0xE8, 0xEF, 0x5A, 0x35, 0xDF, 0x80, 0xC6, 0xD3, 0x12, 0x4F, 0x1E, 0xE4, 0xA0, 0x01, 0x49, 0xE0, 0xFC, 0x9E, 0x09, 0x44, 0x01, 0x9E, 0xF7, 0xE4, 0x2F, 0x07, 0x7C, 0x03, 0xA7, 0xF4, 0x4B, 0x8F, 0xD5, 0xEA, 0x6A, 0x2F, 0xA2, 0x89, 0x32, 0xC7, 0xEA, 0x9A, 0x6E, 0x77, 0x1B, 0x7B, 0x7D, 0x07, 0xB2, 0x3D, 0x05, 0xFD, 0x32, 0x22, 0xFD, 0x56, 0x3D, 0xB9, 0x13, 0xB0, 0x84, 0xA9, 0x78, 0x03, 0xDC, 0xD7, 0x81, 0x78, 0xFE, 0x78, 0xEB, 0xEE, 0x8A, 0xCB, 0x57, 0x34, 0x7E, 0x42, 0xD3, 0x75, 0x1C, 0xA7, 0x61, 0xBF, 0x6F, 0x6F, 0x47, 0x32, 0xA0, 0xED, 0x6E, 0x1A, 0xA2, 0x01, 0x98, 0x01, 0xE5, 0x40, 0x27, 0x50, 0x3D, 0xF0, 0x1B, 0x4C, 0xEC, 0xD8, 0xF1, 0x1F, 0xBD, 0x41, 0xEB, 0x51, 0xAE, 0x77, 0x40, 0x14, 0x68, 0x3B, 0x56, 0xEB, 0xAF, 0xF3, 0x83, 0x35, 0x54, 0x71, 0xAB, 0x36, 0xB6, 0x52, 0x4B, 0xDC, 0xA6, 0x77, 0xC1, 0x83, 0x51, 0x85, 0x94, 0x62, 0xD1, 0x69, 0x00, 0x6B, 0x9F, 0xD5, 0xFC, 0xD5, 0x95, 0x17, 0xB9, 0x7B, 0x83, 0xEE, 0x78, 0x84, 0xB5, 0x37, 0x90, 0x02, 0x58, 0x00, 0xFB, 0x72, 0x71, 0x41, 0xAD, 0xEB, 0xAE, 0xF6, 0xCF, 0x05, 0xE8, 0x4F, 0xF1, 0xA0, 0x8E, 0x0D, 0xF9, 0x45, 0xF9, 0xED, 0x6B, 0x01, 0x9E, 0x40, 0xBE, 0xF9, 0x54, 0x0B, 0x88, 0x20, 0xEE, 0x87, 0x1D, 0x77, 0xA7, 0xD0, 0x12, 0x20, 0xF7, 0xFD, 0x70, 0x0B, 0x13, 0xD5, 0x68, 0x58, 0xE0, 0xEC, 0x06, 0xF8, 0x2A, 0x58, 0x33, 0xD1, 0xDE, 0x28, 0x1D, 0x2E, 0xDD, 0x36, 0x44, 0xC2, 0x53, 0xF1, 0xFD, 0x74, 0x8F, 0xDE, 0x4D, 0xCC, 0x7C, 0xD5, 0x7F, 0xF4, 0xA1, 0x15, 0xBD, 0x83, 0x53, 0xCE, 0xE0, 0x94, 0x02, 0xD2, 0x77, 0x14, 0xA3, 0x37, 0x10, 0x7E, 0xA7, 0x42, 0x25, 0x0B, 0x79, 0xE8, 0xB2, 0xF4, 0x0D, 0xD8, 0x89, 0x0D, 0x5C, 0x8D, 0x1A, 0xBD, 0xEE, 0xE0, 0xC9, 0x5E, 0x03, 0x05, 0xF2, 0xE9, 0xD7, 0xAB, 0x0E, 0x98, 0x0D, 0x0A, 0x70, 0xBB, 0x9B, 0x82, 0xAA, 0x3F, 0x7A, 0x6B, 0x03, 0x7D, 0x5A, 0x19, 0xD4, 0xA0, 0x95, 0x7B, 0xD8, 0xB1, 0x1A, 0xBA, 0x81, 0xB6, 0xC6, 0xD4, 0x79, 0xA3, 0xF3, 0xC3, 0xAE, 0x98, 0x64, 0xC6, 0xC6, 0xCE, 0x3F, 0xBD, 0x7C, 0xF3, 0x64, 0xE5, 0xF6, 0x9D, 0xFA, 0xFD, 0xD6, 0xD2, 0x9A, 0x5C, 0x7E, 0x04, 0x3D, 0x15, 0xC8, 0x22, 0x80, 0x02, 0x97, 0x5B, 0x1E, 0x9F, 0xE8, 0xF8, 0x67, 0xEB, 0x7F, 0xF9, 0xD5, 0xBC, 0xDB, 0x89, 0x37, 0x94, 0xDF, 0x31, 0x2A, 0xFE, 0xB8, 0xC6, 0x2D, 0x53, 0x61, 0x83, 0xEE, 0xBB, 0x81, 0xB2, 0x09, 0xE0, 0x7B, 0x60, 0x4F, 0x13, 0xBD, 0x75, 0x27, 0x20, 0x2C, 0x06, 0x0D, 0x07, 0xB9, 0x00, 0x66, 0xAA, 0x37, 0x7F, 0xA0, 0x81, 0x6A, 0x5A, 0x4D, 0xD0, 0x7A, 0xD0, 0x7A, 0x7E, 0xDD, 0xFD, 0x5D, 0x97, 0x5B, 0x0A, 0x2E, 0xFE, 0xCA, 0x69, 0x8F, 0x00, 0xAB, 0xA9, 0xDA, 0xA4, 0x46, 0xC4, 0xBF, 0x8A, 0x33, 0xD6, 0x53, 0x15, 0x5A, 0xAC, 0x43, 0xA5, 0x7C, 0x44, 0x03, 0xED, 0x40, 0x1A, 0x60, 0x3A, 0x48, 0xEA, 0x91, 0xD3, 0x6F, 0xF6, 0x14, 0x7F, 0x31, 0x97, 0xA3, 0xEE, 0xAA, 0xAB, 0x28, 0xEE, 0x1B, 0xB7, 0x7E, 0xB5, 0x28, 0xE0, 0x0B, 0x08, 0x7D, 0xD0, 0x40, 0x0A, 0xF0, 0xF6, 0xA4, 0x48, 0x7B, 0x7A, 0x18, 0xE8, 0xDD, 0x14, 0xD4, 0x0C, 0xD8, 0x05, 0xE8, 0x31, 0x1E, 0xAD, 0xA6, 0xC8, 0x51, 0x68, 0xC1, 0x6F, 0x6D, 0x02, 0xB1, 0xD5, 0x08, 0xE6, 0xFE, 0xC1, 0xED, 0xBA, 0xF7, 0x68, 0x42, 0xE5, 0xB8, 0xC6, 0x9C, 0xF1, 0x95, 0x5B, 0x23, 0x9D, 0xF5, 0x8D, 0x42, 0xA7, 0xB7, 0xF3, 0xCA, 0x4B, 0xA7, 0x63, 0x01, 0x16, 0xC0, 0xA6, 0x74, 0x9D, 0x01, 0xE1, 0x78, 0xC8, 0xB2, 0x68, 0x4A, 0x6B, 0x5A, 0xDD, 0xC2, 0xFD, 0x59, 0x30, 0x5E, 0x38, 0x8D, 0x77, 0x7B, 0x84, 0x96, 0xFE, 0x3C, 0x8A, 0x7E, 0x0C, 0x5B, 0x74, 0x17, 0x6F, 0x60, 0x27, 0x20, 0xF1, 0x48, 0xFC, 0x35, 0x1D, 0x43, 0x80, 0x6F, 0xC0, 0x04, 0x90, 0x06, 0x96, 0x3C, 0x6A, 0x4E, 0x45, 0xA5, 0x3D, 0x5A, 0xCD, 0xBE, 0x19, 0xAA, 0x5D, 0x10, 0xF9, 0x90, 0x44, 0x47, 0x83, 0xB6, 0x69, 0x2A, 0xAA, 0x33, 0x0B, 0x1A, 0x96, 0x28, 0x40, 0x70, 0x37, 0xE8, 0x13, 0xD2, 0xDB, 0x4F, 0x48, 0x6F, 0xAD, 0xB7, 0x0F, 0x6D, 0x00, 0x5D, 0x40, 0x25, 0xA0, 0x36, 0xE3, 0x50, 0x00, 0xA3, 0x34, 0x55, 0x8C, 0x99, 0x8F, 0x92, 0x22, 0x43, 0x9F, 0xFC, 0x4D, 0xE7, 0xCD, 0x66, 0x36, 0xC3, 0xD5, 0x81, 0xA4, 0x7B, 0x01, 0x27, 0xF1, 0x8B, 0x23, 0xAF, 0x01, 0x37, 0x20, 0xD7, 0x20, 0x80, 0x8A, 0x5B, 0xF7, 0xBF, 0x16, 0x07, 0xEE, 0x1D, 0x03, 0x2C, 0x05, 0xCC, 0xEF, 0x51, 0xA9, 0x32, 0xAF, 0x38, 0xAD, 0xE6, 0xB8, 0x14, 0xB8, 0xE3, 0x8B, 0x45, 0x7C, 0x2E, 0x9A, 0xA4, 0xB4, 0xCE, 0x04, 0x0E, 0xB2, 0x1C, 0xD9, 0xD9, 0x2B, 0xF1, 0x8A, 0xF7, 0x4F, 0x8E, 0x3F, 0xF5, 0x11, 0xAE, 0xB6, 0x66, 0xB8, 0x90, 0x5D, 0x00, 0x39, 0x48, 0x36, 0x50, 0x0D, 0x44, 0x01, 0xE6, 0x80, 0xF7, 0x2F, 0x2D, 0x6B, 0x2C, 0x09, 0x19, 0x1C, 0x80, 0xE1, 0x3E, 0xBC, 0x62, 0x4F, 0xC9, 0x42, 0x1D, 0x05, 0x99, 0xCD, 0x1A, 0x74, 0x96, 0xFD, 0x15, 0xA0, 0x7A, 0x8F, 0x1C, 0xD7, 0x41, 0xDF, 0x02, 0x09, 0xAB, 0x81, 0xA8, 0x5B, 0x15, 0xBD, 0x0B, 0xC8, 0x00, 0x6C, 0x03, 0x3B, 0x00, 0x3D, 0x4E, 0x64, 0x1A, 0x2D, 0x3E, 0xF9, 0x26, 0xEB, 0x46, 0x2A, 0xA7, 0x22, 0xF3, 0x5B, 0xAD, 0x10, 0x9D, 0x8C, 0x3D, 0x9B, 0x56, 0xCF, 0xF6, 0xE6, 0xDF, 0xE1, 0x74, 0x55, 0x20, 0x94, 0xF7, 0xCF, 0x56, 0xEE, 0xDC, 0x18, 0xE9, 0xD6, 0xE8, 0x5A, 0xB7, 0x4F, 0x3A, 0x1C, 0x70, 0x03, 0x6C, 0x03, 0x21, 0xBF, 0x65, 0xDC, 0x4E, 0xDF, 0x81, 0xE6, 0x57, 0x5B, 0xBF, 0x19, 0xC6, 0x10, 0xD7, 0xE4, 0xE8, 0xF6, 0xB5, 0xCF, 0x5D, 0xA7, 0xD4, 0x6A, 0xA0, 0x7D, 0xB0, 0x07, 0x32, 0xB0, 0x3B, 0xE5, 0x44, 0x07, 0xE5, 0xF4, 0xBB, 0x3C, 0xC7, 0xEF, 0x06, 0xDC, 0x01, 0x69, 0xC0, 0xF8, 0x26, 0x93, 0xFD, 0x90, 0x06, 0xF9, 0x85, 0xB1, 0x64, 0x8A, 0x8A, 0xF4, 0x2B, 0x60, 0x48, 0xB7, 0xAB, 0x40, 0xB5, 0xC3, 0x51, 0x8C, 0xB4, 0x85, 0x7E, 0x3C, 0x5A, 0xE9, 0x8A, 0x18, 0x98, 0x9D, 0xB6, 0x45, 0x2C, 0x93, 0xBD, 0x0B, 0x0C, 0xD7, 0x40, 0xB9, 0xC2, 0x37, 0x60, 0x05, 0xD0, 0xCD, 0x9A, 0x1F, 0x10, 0xA6, 0x44, 0x91, 0x0E, 0xB5, 0x59, 0x64, 0x1E, 0xDA, 0xCF, 0x2F, 0x4B, 0x6D, 0x9D, 0x38, 0x0E, 0x6E, 0x5E, 0xF6, 0x8B, 0x8A, 0xFD, 0xC1, 0xE8, 0x17, 0xA0, 0x0B, 0xB0, 0x06, 0x7C, 0x90, 0x4F, 0x4B, 0xDE, 0x7A, 0x44, 0xFC, 0xA8, 0xA6, 0xD2, 0x03, 0x17, 0x40, 0x36, 0x60, 0x6B, 0xDE, 0x74, 0x1A, 0xAD, 0x50, 0xB5, 0xCD, 0x5A, 0xBA, 0x71, 0x9A, 0xB6, 0x39, 0x8C, 0xD6, 0x89, 0x7A, 0x09, 0xED, 0x29, 0x1F, 0x72, 0x2A, 0x58, 0x21, 0x44, 0x70, 0x4B, 0xEC, 0x38, 0x8F, 0x49, 0xF4, 0xF5, 0x52, 0x71, 0xBF, 0x66, 0xB6, 0xF5, 0x82, 0x25, 0x76, 0xE1, 0x53, 0x0D, 0xCC, 0x06, 0x0C, 0xA8, 0xE8, 0xAF, 0xC5, 0x64, 0x0D, 0xFA, 0xA8, 0x29, 0xE5, 0xD4, 0xC5, 0x1E, 0x41, 0xAA, 0x98, 0xFF, 0xF5, 0x82, 0x3D, 0xC5, 0x07, 0x9B, 0x69, 0xEB, 0x53, 0x88, 0x58, 0x40, 0xCE, 0x24, 0x5F, 0x09, 0x88, 0x01, 0x16, 0x40, 0xDB, 0xFC, 0xCF, 0xEA, 0x29, 0x3B, 0x7E, 0xB4, 0xF9, 0x2D, 0x01, 0xE1, 0x27, 0x14, 0x21, 0xFF, 0x6C, 0xD6, 0x88, 0xE0, 0xA5, 0x63, 0xA1, 0x9B, 0x5F, 0x57, 0x37, 0xB7, 0x6D, 0x6C, 0x08, 0xEA, 0x98, 0xAC, 0xCB, 0xF6, 0x84, 0xDE, 0xF2, 0xD2, 0x72, 0x3A, 0xF1, 0x3C, 0xC6, 0x11, 0x19, 0x65, 0x71, 0xD6, 0xAE, 0xB2, 0x3D, 0x4C, 0x03, 0xAE, 0x80, 0x06, 0xB0, 0x0A, 0x60, 0x94, 0x45, 0x95, 0x99, 0xA3, 0x30, 0x9A, 0x04, 0x80, 0x14, 0x0F, 0x67, 0x49, 0x0F, 0x3E, 0x49, 0x9E, 0x6C, 0x85, 0xAE, 0x5B, 0xA2, 0x44, 0x16, 0x60, 0x06, 0xC4, 0x1A, 0xC8, 0xA0, 0x81, 0xDC, 0x40, 0x29, 0xB5, 0xF5, 0x81, 0x96, 0xBB, 0x0E, 0x44, 0x64, 0x1E, 0x3A, 0xE0, 0x7C, 0x73, 0xA0, 0x3D, 0xAF, 0xE4, 0x18, 0x6D, 0x8F, 0x5B, 0xDE, 0x02, 0x3A, 0x1A, 0x51, 0x2C, 0x7E, 0x60, 0x6C, 0x1D, 0x56, 0xAE, 0x8D, 0xFA, 0x08, 0x95, 0xC9, 0x60, 0xEF, 0x9F, 0x8E, 0xC6, 0x36, 0xE0, 0xA8, 0xBF, 0x9D, 0xCE, 0x3A, 0x7B, 0xEA, 0xB6, 0x26, 0xFC, 0x50, 0x7A, 0xD7, 0x45, 0xAB, 0xCD, 0xC3, 0x06, 0xD2, 0xF0, 0xB0, 0xD7, 0x44, 0x59, 0x1C, 0x77, 0x93, 0x28, 0x40, 0x04, 0x0F, 0x37, 0x93, 0x74, 0x02, 0x16, 0xE4, 0x5F, 0xBC, 0xE5, 0x1E, 0xB5, 0x5B, 0x07, 0x39, 0x88, 0xFB, 0xA1, 0xAC, 0x81, 0x03, 0xB6, 0x81, 0x9A, 0x3A, 0x3C, 0x1F, 0x74, 0x0D, 0x04, 0x88, 0x06, 0xD4, 0x80, 0xBD, 0x01, 0x96, 0xF1, 0x89, 0xD1, 0x66, 0x1B, 0x53, 0xC0, 0xEB, 0xD2, 0x52, 0xE8, 0xE9, 0x97, 0x54, 0x1D, 0x08, 0xB9, 0x45, 0x7E, 0xC6, 0xB2, 0x09, 0xB6, 0xB4, 0xD4, 0x4F, 0xB8, 0x65, 0x15, 0x10, 0x7A, 0xAE, 0x2B, 0x6C, 0x81, 0x32, 0x03, 0xBB, 0x39, 0xD3, 0x31, 0x88, 0x22, 0x00, 0x4F, 0x40, 0x0B, 0xF0, 0x86, 0x25, 0x84, 0xC1, 0x9D, 0x8D, 0xEC, 0xE5, 0x4E, 0x18, 0xCB, 0x84, 0xF6, 0xC4, 0x1F, 0xD5, 0xAE, 0xFF, 0xCB, 0x7C, 0x87, 0xD3, 0xED, 0x3D, 0x4F, 0xC6, 0x56, 0x28, 0x70, 0xF2, 0xC7, 0x17, 0x90, 0x3A, 0x58, 0x83, 0xE6, 0x2B, 0x40, 0x38, 0xD0, 0x35, 0x50, 0x20, 0x07, 0x56, 0x80, 0x0C, 0xEC, 0xB4, 0xDF, 0xA0, 0xCD, 0x64, 0x94, 0xA7, 0x6E, 0x15, 0x7E, 0xF5, 0x18, 0x91, 0x4F, 0x99, 0xDA, 0x36, 0x7C, 0x95, 0x28, 0xC7, 0xAA, 0xE3, 0xFB, 0x44, 0x37, 0xB0, 0x16, 0xDC, 0xE3, 0x6C, 0x53, 0x58, 0x9E, 0xB2, 0x52, 0x1B, 0xDF, 0x5D, 0x7A, 0xBA, 0xCF, 0xCE, 0xA7, 0x34, 0x40, 0x7D, 0x30, 0xC9, 0xDD, 0xF1, 0x61, 0xA4, 0x0F, 0x7C, 0xD4, 0x36, 0x7C, 0x26, 0x9E, 0xF5, 0xFC, 0xEB, 0x13, 0xAD, 0x34, 0x3D, 0x95, 0x75, 0xA5, 0xB3, 0xE6, 0xD5, 0x4C, 0x66, 0x65, 0x0D, 0x1E, 0xA0, 0x0E, 0xEC, 0x05, 0xAC, 0xBE, 0xC1, 0x37, 0x63, 0x16, 0x81, 0xED, 0x80, 0x11, 0x0B, 0x90, 0x04, 0x18, 0x16, 0xEB, 0x98, 0x37, 0x15, 0xA8, 0x4D, 0x9B, 0xE9, 0x5F, 0x1B, 0x94, 0xC0, 0xCA, 0x60, 0xEB, 0x71, 0x16, 0x31, 0x3F, 0x0D, 0x8E, 0x15, 0x2B, 0xB8, 0xF5, 0xCD, 0xFF, 0x90, 0x78, 0x9A, 0x5F, 0xB0, 0xE0, 0x88, 0x47, 0x1E, 0x61, 0x79, 0x98, 0xEB, 0xE4, 0x0B, 0x13, 0x5E, 0x80, 0x39, 0x20, 0x8C, 0x12, 0x14, 0x90, 0x44, 0xFE, 0x5A, 0x98, 0xDA, 0xC9, 0xA1, 0xA0, 0x82, 0x66, 0x3F, 0xC2, 0x92, 0xCC, 0xB4, 0xF5, 0x02, 0xD6, 0x55, 0x56, 0x8B, 0xE3, 0xE7, 0x55, 0x37, 0x21, 0x6B, 0xE0, 0x83, 0xFA, 0x57, 0xEE, 0xB2, 0xB0, 0xC0, 0x19, 0x70, 0x01, 0x6C, 0x01, 0xDB, 0xEF, 0xDC, 0x65, 0x37, 0x20, 0xD7, 0x49, 0x55, 0xA5, 0xD5, 0xEC, 0xD8, 0xA9, 0x04, 0xED, 0x19, 0xCB, 0xD1, 0xDA, 0x01, 0x19, 0x70, 0x0E, 0xAB, 0x69, 0x23, 0xB3, 0xD7, 0x6B, 0xC2, 0x11, 0x68, 0x42, 0x9B, 0x6F, 0x21, 0xCB, 0xA2, 0x11, 0xFC, 0xE7, 0x61, 0xC1, 0x1D, 0x07, 0xD8, 0xB7, 0xF7, 0x45, 0xFD, 0x4E, 0x8E, 0xAD, 0x2B, 0xF5, 0xC8, 0x4F, 0xEF, 0x25, 0x65, 0x70, 0xCF, 0x6F, 0xD9, 0xEA, 0xE3, 0x38, 0x13, 0x60, 0xE7, 0x58, 0x2D, 0xC6, 0x86, 0x0D, 0x84, 0x00, 0xE5, 0x83, 0x05, 0x64, 0x0D, 0xFA, 0x8E, 0x98, 0x6C, 0x7D, 0x9C, 0x6A, 0xCD, 0x44, 0x5D, 0x20, 0xE5, 0x36, 0xF3, 0xBA, 0xFE, 0xE4, 0x0C, 0x05, 0xC1, 0x6A, 0xFE, 0xD7, 0x1B, 0x37, 0xCB, 0x0A, 0x54, 0x7F, 0xC2, 0x86, 0x6C, 0xAB, 0x98, 0xC8, 0xA8, 0x97, 0xF5, 0x21, 0x45, 0x90, 0x66, 0xDF, 0x75, 0xB9, 0x87, 0x4C, 0x68, 0xB5, 0xF9, 0x4E, 0xAC, 0x08, 0x7C, 0x0B, 0x4B, 0xFC, 0x8C, 0xA7, 0xA7, 0x5A, 0xF0, 0x29, 0xAB, 0x31, 0xFA, 0xAD, 0xFB, 0x2E, 0xA4, 0x6D, 0xBA, 0xCA, 0xF4, 0x1E, 0x6B, 0xB1, 0x80, 0xBD, 0x6F, 0x65, 0x22, 0x3D, 0xE5, 0xDD, 0x40, 0x73, 0x20, 0xAD, 0x41, 0x03, 0x77, 0x66, 0x98, 0x1D, 0x09, 0x24, 0x19, 0xC4, 0x02, 0x7C, 0x20, 0x7A, 0xFB, 0xC9, 0xDD, 0x81, 0x8C, 0x79, 0x45, 0x8E, 0xD5, 0xE2, 0x2F, 0xA7, 0xDF, 0x9B, 0x7F, 0x61, 0x09, 0xFD, 0xF3, 0x9C, 0x14, 0xA2, 0xA4, 0xF2, 0x72, 0x79, 0x29, 0xAA, 0xBA, 0xF2, 0x83, 0xB4, 0x6E, 0x66, 0x74, 0x3C, 0xDA, 0x1D, 0xD7, 0xE8, 0xC6, 0x5E, 0x45, 0x19, 0x5E, 0xDE, 0xDF, 0x6E, 0xC9, 0x7D, 0x66, 0xCC, 0x44, 0x00, 0x8A, 0x87, 0x77, 0x07, 0xC9, 0x13, 0x91, 0xC2, 0xD7, 0xC7, 0x8F, 0x9F, 0xAA, 0x5C, 0xAE, 0x9C, 0xB7, 0x46, 0xFF, 0x80, 0x2E, 0xAF, 0xCD, 0x06, 0xFF, 0x4F, 0x80, 0x29, 0x37, 0x50, 0x0B, 0x68, 0x86, 0x6D, 0xA4, 0x81, 0xDE, 0xF3, 0x2B, 0x0D, 0x64, 0xCF, 0x43, 0x01, 0x7C, 0x03, 0xBB, 0x00, 0x65, 0x7F, 0x4E, 0xA1, 0xD5, 0xF2, 0xCB, 0x5D, 0xEE, 0x55, 0x5F, 0x2A, 0x51, 0xE6, 0x84, 0xA9, 0x3A, 0xA6, 0x44, 0x27, 0xFF, 0xD0, 0x0A, 0xEE, 0x83, 0xEA, 0x12, 0x8C, 0x5F, 0x47, 0x10, 0x54, 0x38, 0xD6, 0x4E, 0xC0, 0x9D, 0xCA, 0x4A, 0x61, 0x6F, 0x1E, 0x3A, 0x90, 0x01, 0xF8, 0x02, 0x24, 0x80, 0xB5, 0xEE, 0xA2, 0x97, 0x28, 0x86, 0xE7, 0x6E, 0x97, 0xAF, 0xD5, 0xA3, 0x33, 0xCF, 0x3F, 0x7E, 0x3C, 0x25, 0x13, 0x0A, 0xF4, 0xBE, 0x43, 0x52, 0x95, 0x77, 0xBC, 0xC9, 0x1A, 0xF0, 0x02, 0x62, 0xD0, 0x7D, 0x97, 0xE6, 0x95, 0x03, 0x19, 0x80, 0x1B, 0x20, 0x72, 0xA7, 0x8A, 0x6F, 0x01, 0x60, 0x7C, 0x98, 0xAD, 0xBE, 0x7D, 0x20, 0x02, 0xD5, 0x18, 0xDD, 0x48, 0x9B, 0x8F, 0x30, 0xF6, 0xEA, 0x83, 0x10, 0xFF, 0xF6, 0xEF, 0x77, 0x59, 0xDB, 0xBF, 0xDF, 0xBA, 0x5C, 0xAE, 0xED, 0xC0, 0xF7, 0x1B, 0x99, 0xAA, 0xBB, 0x4B, 0x76, 0xAD, 0x81, 0x01, 0x5E, 0x80, 0xEE, 0x67, 0xD1, 0x5B, 0x00, 0xED, 0x14, 0x57, 0x34, 0xE6, 0xD6, 0x17, 0x83, 0x11, 0xDE, 0x52, 0x63, 0x7A, 0xF6, 0xF7, 0x6D, 0xFB, 0xF6, 0x3B, 0xF6, 0x55, 0x72, 0xC7, 0xEC, 0x96, 0x02, 0x5B, 0x00, 0x66, 0x85, 0xAF, 0x00, 0xEC, 0xC9, 0xB3, 0x5F, 0xB4, 0x6F, 0x03, 0xB6, 0x01, 0xEF, 0x79, 0xC5, 0x8F, 0xD5, 0xFA, 0x2F, 0x0A, 0x5A, 0x6B, 0x0E, 0xAF, 0xF6, 0x87, 0x35, 0xF9, 0x43, 0x4C, 0x4F, 0xAD, 0x16, 0x08, 0x97, 0xA3, 0x28, 0x23, 0x7A, 0xCB, 0x3F, 0x6A, 0x68, 0xD7, 0xA9, 0x31, 0xBD, 0x2F, 0xED, 0x00, 0xE5, 0x58, 0x9B, 0xF1, 0xDA, 0xE3, 0x6B, 0xAE, 0x05, 0xF8, 0x06, 0x4E, 0x46, 0x83, 0x32, 0xD7, 0xB7, 0x80, 0xED, 0xFC, 0xB9, 0x4B, 0x67, 0x3E, 0x98, 0xCE, 0x68, 0xB7, 0x2D, 0x38, 0x66, 0x18, 0xE7, 0x65, 0xE7, 0x60, 0x19, 0xB8, 0x00, 0x61, 0x40, 0x26, 0x7F, 0xA5, 0xB7, 0x51, 0x2D, 0xE7, 0xA6, 0x03, 0xA9, 0x80, 0x16, 0xB0, 0x0D, 0xD0, 0xC5, 0x37, 0xC7, 0x6A, 0xB2, 0xBE, 0x41, 0x56, 0x3E, 0xF9, 0xF2, 0xD5, 0x9F, 0x3F, 0xB7, 0x26, 0xE2, 0xDE, 0xD4, 0x78, 0xD0, 0xFC, 0xB0, 0x24, 0xFE, 0xE0, 0xA1, 0xAB, 0xAB, 0x94, 0xC5, 0xF7, 0x93, 0xDD, 0xE1, 0xC1, 0x14, 0x0C, 0xDA, 0x82, 0x9E, 0x84, 0x3B, 0x82, 0x77, 0x14, 0x87, 0x06, 0x39, 0x56, 0x3B, 0x3A, 0x86, 0xEB, 0xF5, 0xCB, 0x6E, 0x36, 0x3A, 0x80, 0x7D, 0x39, 0xA9, 0x9E, 0x1C, 0xD2, 0x25, 0xC0, 0x79, 0xE5, 0xCE, 0x02, 0x5E, 0xC7, 0x9D, 0xB6, 0x37, 0xA0, 0x0B, 0xB0, 0x04, 0x2A, 0x9F, 0x3E, 0xD1, 0x0A, 0x94, 0x03, 0xB1, 0x80, 0xDD, 0xF3, 0x66, 0xB3, 0x6B, 0x34, 0x50, 0x45, 0xAB, 0xED, 0xBF, 0xFE, 0x5C, 0x5E, 0x82, 0x4C, 0xA2, 0x64, 0x76, 0x07, 0x35, 0x52, 0x0A, 0xBB, 0xE7, 0xB4, 0x00, 0x2A, 0x14, 0x27, 0x47, 0x4E, 0x3C, 0x4F, 0xDF, 0x88, 0xFB, 0xE2, 0x6E, 0x16, 0x77, 0xF4, 0xCB, 0x36, 0xA0, 0x0A, 0xAC, 0xBC, 0x6B, 0x9B, 0xB2, 0xEF, 0x2A, 0xCB, 0xD0, 0x33, 0x7B, 0xA7, 0x18, 0x1B, 0xF0, 0x7D, 0xF7, 0x89, 0x36, 0xBE, 0xF9, 0x04, 0xEB, 0xAC, 0x80, 0x5C, 0xF7, 0x26, 0x1A, 0x05, 0xA4, 0x03, 0xB5, 0x07, 0x06, 0xF4, 0xBA, 0x4F, 0x6A, 0xD1, 0x77, 0xAB, 0xEE, 0x56, 0x3E, 0x04, 0xD4, 0x9F, 0x46, 0x42, 0x57, 0x56, 0x13, 0xAC, 0x26, 0xDF, 0x20, 0x93, 0x65, 0xB8, 0xC2, 0x34, 0xDC, 0x45, 0x5B, 0x7C, 0x9C, 0x1C, 0x39, 0x83, 0x73, 0x4F, 0xE7, 0x60, 0x43, 0x7F, 0xE9, 0x5E, 0xB7, 0x5B, 0x4D, 0x9F, 0xEC, 0x8E, 0xD4, 0xA7, 0x40, 0x71, 0x15, 0x60, 0x0A, 0x48, 0xB1, 0x25, 0xF4, 0x87, 0x10, 0xE0, 0xA4, 0x3B, 0xF3, 0x8F, 0x9E, 0x74, 0xB9, 0x10, 0x8C, 0x53, 0x25, 0xBD, 0xC2, 0x97, 0x96, 0x9D, 0xE6, 0xDD, 0xF6, 0xE0, 0xF8, 0xEF, 0xF6, 0xBE, 0xBB, 0x90, 0x9B, 0x3E, 0x4D, 0xC5, 0x15, 0xE8, 0xE3, 0x90, 0x05, 0x8A, 0x5E, 0x61, 0xBD, 0x7B, 0xBC, 0xF6, 0x20, 0x04, 0xD0, 0x02, 0xDC, 0xF9, 0x26, 0xAD, 0x06, 0xBD, 0x52, 0x97, 0x0D, 0x07, 0x43, 0xC0, 0xEF, 0x9D, 0xCB, 0xF0, 0x73, 0x53, 0x94, 0x51, 0xAD, 0xD3, 0x0B, 0x61, 0x8F, 0x27, 0x4B, 0xFE, 0xB0, 0x3D, 0xBF, 0x7E, 0x6F, 0xB9, 0xA5, 0x9C, 0xE6, 0x1F, 0xAE, 0x23, 0x25, 0xED, 0x01, 0x68, 0xCC, 0xC3, 0xD3, 0x45, 0x01, 0x60, 0x97, 0x42, 0xAA, 0xA5, 0x31, 0x32, 0xB5, 0x4E, 0x13, 0xC0, 0xBB, 0x87, 0xAF, 0xD0, 0x97, 0x5E, 0xAC, 0x52, 0x60, 0xE9, 0x04, 0x93, 0x92, 0xD9, 0xA2, 0xE6, 0xD6, 0xDA, 0x94, 0x41, 0x24, 0x40, 0x59, 0xCD, 0xA5, 0x80, 0x15, 0x7D, 0xCC, 0x40, 0x6C, 0xC0, 0x15, 0x90, 0xBC, 0x33, 0xFF, 0x7C, 0xDF, 0xCE, 0x5E, 0x3F, 0x56, 0x33, 0x74, 0x6C, 0xF3, 0x0D, 0x47, 0x4C, 0x1B, 0x6A, 0x49, 0xD4, 0xA6, 0x78, 0xC5, 0x27, 0x0C, 0xE2, 0x13, 0x22, 0x81, 0xD5, 0x24, 0x84, 0xC7, 0xDA, 0xBB, 0x0D, 0x6D, 0x72, 0xF7, 0x62, 0xFD, 0x05, 0xFF, 0x25, 0x56, 0x55, 0x14, 0x20, 0x74, 0x2B, 0x27, 0xB0, 0x9D, 0xB6, 0x9B, 0x87, 0x74, 0x8D, 0x3B, 0x8D, 0x36, 0x18, 0x3F, 0x10, 0x0B, 0xE0, 0x99, 0xA9, 0x68, 0x63, 0x98, 0x52, 0x60, 0x2F, 0x20, 0x2F, 0x95, 0xEB, 0x3E, 0x8D, 0x6E, 0x59, 0x09, 0xAE, 0x0D, 0x84, 0x02, 0xA7, 0x33, 0x69, 0x01, 0xC5, 0xF2, 0x18, 0x1F, 0x6C, 0x60, 0x31, 0xB2, 0xE3, 0x80, 0x0F, 0xF8, 0xE7, 0xB4, 0xA6, 0xD1, 0x1C, 0x43, 0xAD, 0xC7, 0xFF, 0x20, 0xF9, 0x95, 0x6B, 0xEF, 0x4A, 0x18, 0x5B, 0x0B, 0xFE, 0x51, 0xA5, 0xF2, 0x9F, 0xCD, 0xB8, 0x45, 0xAD, 0x59, 0xBD, 0x43, 0x4D, 0xF3, 0x14, 0x18, 0x52, 0xD1, 0x9C, 0x99, 0xD9, 0x40, 0x16, 0x10, 0x0D, 0xB0, 0x46, 0xBA, 0x6A, 0x30, 0x21, 0x16, 0x66, 0xD1, 0xEF, 0x7D, 0xFB, 0xBD, 0x6C, 0x4C, 0x69, 0xFD, 0x44, 0xA4, 0xCE, 0xDF, 0xE5, 0x2E, 0xFB, 0x60, 0xD9, 0x13, 0x6B, 0x00, 0xED, 0xA9, 0x66, 0x93, 0x81, 0x16, 0xE0, 0x0A, 0xB4, 0xDE, 0xB9, 0xA6, 0xBD, 0x81, 0x7A, 0x32, 0x4F, 0x85, 0x6F, 0xCE, 0xC3, 0x2D, 0x40, 0x05, 0xAD, 0x16, 0xA8, 0x93, 0xB2, 0xF1, 0xCF, 0x7A, 0xC2, 0x49, 0x98, 0x39, 0x81, 0xA9, 0x9F, 0xD4, 0xC9, 0x67, 0x98, 0x9A, 0xC0, 0x5B, 0xFE, 0x14, 0x4F, 0xEA, 0xF8, 0xBD, 0xE5, 0x71, 0x47, 0xD2, 0xE1, 0x9D, 0xD4, 0xD0, 0x4B, 0x60, 0xB3, 0x5C, 0x6A, 0xC6, 0x51, 0x0C, 0x64, 0xF3, 0xD3, 0xBC, 0xD9, 0x4C, 0x4B, 0x06, 0x8E, 0x40, 0xBD, 0xB2, 0x28, 0x8D, 0xF1, 0x1A, 0xCE, 0x97, 0x67, 0xF2, 0xB1, 0x81, 0xEC, 0xBC, 0xB2, 0x12, 0x08, 0x16, 0xBA, 0x39, 0x20, 0x1B, 0xD0, 0x02, 0x38, 0x8E, 0x54, 0x80, 0x70, 0xC0, 0x1B, 0x30, 0x01, 0x36, 0x15, 0x9A, 0x63, 0x3E, 0x6D, 0xA0, 0x8C, 0x46, 0xCB, 0x3F, 0xB7, 0x69, 0x28, 0x62, 0xE3, 0xC3, 0x35, 0xA4, 0x13, 0x41, 0x13, 0x2B, 0xA6, 0x78, 0x7A, 0x8F, 0x76, 0x58, 0xB3, 0x75, 0xD9, 0xD5, 0x26, 0xDA, 0xAF, 0x36, 0xD1, 0x23, 0xFA, 0x85, 0x9F, 0x60, 0x60, 0x33, 0x38, 0x54, 0x80, 0x65, 0x2C, 0xCD, 0x78, 0xE4, 0xCE, 0x07, 0xC6, 0x55, 0xF0, 0x43, 0x1F, 0xA1, 0xB6, 0x66, 0x2C, 0x92, 0xE2, 0x89, 0xC6, 0x08, 0xF9, 0xDD, 0x38, 0x45, 0xAE, 0x3C, 0x06, 0x1D, 0x4B, 0xFA, 0x09, 0x25, 0x2E, 0x01, 0x2C, 0x80, 0x48, 0xA0, 0x94, 0xC3, 0xE8, 0x0E, 0x16, 0x88, 0x01, 0x9B, 0xF1, 0x1D, 0x05, 0x7C, 0x20, 0x06, 0x68, 0xF2, 0x15, 0x1A, 0xAD, 0x26, 0x4A, 0x14, 0x1F, 0xA2, 0x1B, 0xC5, 0x47, 0x51, 0xE3, 0xE7, 0x73, 0xB4, 0x3B, 0x2D, 0x99, 0x86, 0x87, 0x3A, 0x85, 0x87, 0x49, 0x2B, 0x5D, 0x7A, 0xFC, 0xFD, 0xD3, 0x3C, 0x17, 0x3F, 0x4A, 0x39, 0x8B, 0x49, 0xF1, 0x3E, 0x4E, 0x7F, 0xC7, 0xC3, 0x36, 0x00, 0x0F, 0xE1, 0x9A, 0xF9, 0xA0, 0x01, 0xF4, 0xBC, 0xE2, 0x0D, 0x18, 0x45, 0xBE, 0x14, 0x58, 0xE3, 0xC0, 0x34, 0x9B, 0xB2, 0xC7, 0x7C, 0x5A, 0x4B, 0x38, 0x5E, 0x89, 0xF9, 0x5F, 0xD7, 0xFC, 0x7B, 0xC1, 0xCC, 0xFC, 0x02, 0xCC, 0x80, 0xA0, 0xE3, 0x4C, 0x00, 0x53, 0x20, 0x64, 0x90, 0x83, 0x06, 0x72, 0x0D, 0x0C, 0xA8, 0xA2, 0xDE, 0x3C, 0x6D, 0x86, 0x20, 0x9E, 0xBA, 0x4D, 0x89, 0xCC, 0xC6, 0xD2, 0x32, 0x9F, 0x76, 0x16, 0x42, 0x0E, 0x1A, 0xE3, 0x7D, 0xA5, 0x7B, 0xB8, 0x3F, 0x2B, 0xE5, 0xED, 0xF7, 0x3E, 0xF9, 0x24, 0x74, 0x01, 0xDF, 0x42, 0x65, 0xC8, 0xDB, 0xFC, 0x90, 0xCA, 0xEE, 0x97, 0xC0, 0xD2, 0xFB, 0xAB, 0xB4, 0xCE, 0x2B, 0x3D, 0xAA, 0x5C, 0xD4, 0xEF, 0x4A, 0x4A, 0xE7, 0x3F, 0x2D, 0x10, 0xA8, 0xEC, 0x51, 0x54, 0x52, 0x1B, 0xF8, 0xED, 0xCD, 0x8E, 0xD3, 0x9A, 0x18, 0xF0, 0x00, 0x72, 0x03, 0x2D, 0x23, 0xBD, 0x76, 0xBA, 0x82, 0x02, 0xEA, 0x03, 0x05, 0xB6, 0xE1, 0x95, 0x72, 0x20, 0xE2, 0xEE, 0x9A, 0x79, 0x3C, 0x6B, 0xCA, 0x06, 0x25, 0x70, 0x71, 0xBB, 0xD8, 0x38, 0xCA, 0x73, 0x04, 0xBE, 0x36, 0xBC, 0xC4, 0x12, 0x1F, 0x2C, 0x63, 0x4A, 0x61, 0xE3, 0xB3, 0x52, 0x4C, 0x80, 0xC5, 0x9E, 0x66, 0x19, 0xC5, 0x6E, 0xE8, 0x3B, 0xEE, 0xD6, 0x0B, 0x5C, 0xA7, 0x28, 0x81, 0xD9, 0xC9, 0xFA, 0x3B, 0xC0, 0x28, 0xFD, 0xDA, 0xF3, 0x26, 0xBB, 0x83, 0xC6, 0x60, 0xE3, 0xE1, 0x51, 0x13, 0x5D, 0xBF, 0xD8, 0xB1, 0x1E, 0x29, 0x60, 0x2E, 0x9D, 0x46, 0x59, 0x1E, 0x7A, 0xC3, 0xE7, 0xC7, 0xD9, 0xEB, 0xD9, 0xF7, 0xAD, 0xDD, 0xB7, 0x17, 0xE0, 0x63, 0x98, 0x1D, 0x80, 0xD5, 0x40, 0x00, 0x99, 0x37, 0xDB, 0x81, 0x4C, 0xA0, 0x38, 0xB0, 0x85, 0x46, 0xDB, 0xD3, 0x2C, 0x43, 0x61, 0x1F, 0x0D, 0xF8, 0xD4, 0x53, 0x79, 0x89, 0xC0, 0xD7, 0x5C, 0x36, 0x3E, 0xF5, 0x4D, 0x15, 0x67, 0x6E, 0x96, 0x57, 0x54, 0x8A, 0x99, 0x86, 0xA9, 0x8B, 0x6B, 0xEE, 0x0C, 0x80, 0xE7, 0xD7, 0xD6, 0xF5, 0x6B, 0x46, 0xC1, 0x7E, 0xD7, 0x6C, 0x3F, 0x43, 0xA7, 0x33, 0x02, 0xC9, 0xF8, 0xED, 0x03, 0x58, 0x8C, 0xA2, 0x24, 0xDE, 0x8C, 0xF8, 0x95, 0xAC, 0xE8, 0x59, 0xC0, 0x75, 0x03, 0x6D, 0x63, 0xFA, 0xC2, 0x9B, 0xC7, 0x76, 0x0A, 0xF4, 0x8C, 0x42, 0x49, 0xC0, 0x6D, 0x02, 0xAC, 0x0E, 0xD0, 0x22, 0x22, 0xC0, 0xE6, 0x4C, 0x32, 0x20, 0x36, 0xA0, 0x05, 0x70, 0xBC, 0x5A, 0xD0, 0x68, 0x02, 0xC3, 0xEC, 0xC4, 0xC2, 0xBD, 0x14, 0x43, 0xAC, 0x14, 0xC3, 0x60, 0x61, 0x88, 0xB9, 0xB0, 0xB6, 0x29, 0x60, 0xB4, 0x65, 0x0C, 0x7F, 0xDE, 0xDD, 0x32, 0xAE, 0xC6, 0x0D, 0x67, 0xBF, 0xAA, 0x37, 0x92, 0x78, 0x02, 0x43, 0xAE, 0xAC, 0xC8, 0x06, 0xF6, 0x06, 0xF4, 0x43, 0x1F, 0xDB, 0xF9, 0x60, 0x73, 0x0A, 0x8E, 0x79, 0x7D, 0x31, 0x38, 0x32, 0x03, 0xAE, 0x80, 0xDD, 0x00, 0xA3, 0x22, 0x14, 0x2E, 0xCE, 0x7D, 0x8B, 0x45, 0xEE, 0x04, 0x4C, 0x81, 0xC8, 0xBB, 0x01, 0x50, 0x2C, 0xA0, 0x89, 0x0D, 0xD4, 0x20, 0x0C, 0xF0, 0xBC, 0x5B, 0x05, 0x69, 0xD1, 0x68, 0x08, 0xAD, 0xFB, 0x36, 0xEC, 0x53, 0xAE, 0xF8, 0x9A, 0xB1, 0x79, 0xFC, 0xC5, 0xB9, 0x41, 0x65, 0x8A, 0x0D, 0x75, 0xCE, 0x8A, 0x2C, 0x98, 0x82, 0xD1, 0x4E, 0xD7, 0xA4, 0x7A, 0x7B, 0xD9, 0xCC, 0x5F, 0x5E, 0xE7, 0x7B, 0xB2, 0x05, 0xCB, 0xE9, 0xFC, 0xB3, 0x67, 0xF8, 0x0A, 0xC0, 0x08, 0x7B, 0xD6, 0x7C, 0x25, 0xE5, 0xEA, 0x0E, 0xD4, 0x4F, 0x14, 0x53, 0xEA, 0x18, 0x6D, 0xF1, 0x84, 0x92, 0xF7, 0xE1, 0xE0, 0x54, 0x45, 0xE5, 0x58, 0x52, 0x01, 0x4F, 0xA0, 0xFC, 0x2E, 0xC7, 0xDD, 0x02, 0xF8, 0xBE, 0x23, 0xB3, 0x26, 0x80, 0xC6, 0xBF, 0x74, 0x84, 0x0D, 0x60, 0x90, 0xDA, 0x95, 0x46, 0x43, 0xCE, 0x8B, 0x0B, 0x2E, 0x98, 0x9E, 0x06, 0x31, 0xB6, 0x70, 0xEC, 0xEA, 0xE6, 0xD3, 0xAF, 0xA4, 0x21, 0xD7, 0xDC, 0x7B, 0x1A, 0x95, 0x04, 0xDC, 0xF4, 0xCC, 0x86, 0x04, 0xFA, 0xAA, 0x98, 0x65, 0x4B, 0x65, 0x9B, 0xBC, 0x14, 0x87, 0xBF, 0x01, 0x08, 0x84, 0x99, 0x42, 0x51, 0x42, 0x26, 0x8E, 0x57, 0xF6, 0x64, 0x63, 0x66, 0xCF, 0x0F, 0x24, 0x20, 0x81, 0x87, 0x3B, 0x27, 0x9E, 0xF5, 0x41, 0x60, 0x2C, 0x6D, 0xD8, 0x1A, 0x1B, 0x07, 0xB0, 0x16, 0xA0, 0x35, 0x5B, 0x8C, 0x4D, 0x84, 0x75, 0xDF, 0x9D, 0xC6, 0xD3, 0x81, 0x9E, 0xD8, 0x9A, 0x0C, 0xD2, 0x27, 0x5A, 0xB8, 0x80, 0x8C, 0x41, 0x02, 0xE1, 0x80, 0x0D, 0xB4, 0x00, 0x17, 0xFC, 0x2E, 0x2A, 0xB4, 0x99, 0xC3, 0xF3, 0x42, 0xF9, 0x26, 0x7A, 0xC4, 0x28, 0x8D, 0xBA, 0x0A, 0xBD, 0xCC, 0x3D, 0xE7, 0x7F, 0xAD, 0xB3, 0x23, 0xEE, 0x13, 0xD3, 0xD8, 0x27, 0xD0, 0x51, 0xFB, 0x68, 0xCC, 0xCD, 0x22, 0x34, 0xBF, 0x8B, 0xFB, 0x18, 0x24, 0x07, 0x32, 0x32, 0x81, 0x0A, 0xAC, 0x09, 0xF0, 0x59, 0x01, 0xEE, 0x78, 0xA8, 0x0C, 0x16, 0x37, 0x60, 0x1B, 0x0F, 0x33, 0xF0, 0x4A, 0x37, 0xB0, 0xE6, 0xAB, 0xEC, 0x89, 0x94, 0x86, 0x01, 0x2A, 0x80, 0x0C, 0xF6, 0x02, 0x56, 0x03, 0xDB, 0x01, 0xD9, 0x80, 0xC6, 0xFD, 0x73, 0x3D, 0x06, 0xD9, 0x32, 0xC8, 0x81, 0x0D, 0x74, 0xD0, 0x80, 0x2A, 0x10, 0x41, 0x9B, 0x21, 0xD4, 0x29, 0x25, 0xB0, 0x19, 0x95, 0xDB, 0x36, 0xC6, 0x99, 0x45, 0x7E, 0x7F, 0x77, 0x4D, 0xF9, 0xF3, 0xC9, 0x37, 0x34, 0x9F, 0xED, 0x6A, 0x52, 0x6A, 0xF6, 0x11, 0xA8, 0x59, 0x74, 0x24, 0xA8, 0xAD, 0xD3, 0x9B, 0xDA, 0xE7, 0x37, 0xF3, 0x9C, 0x4F, 0x5F, 0xA5, 0x37, 0x3E, 0x45, 0xA3, 0x5D, 0x6B, 0x0F, 0x2C, 0x81, 0x1C, 0x89, 0xCF, 0x34, 0xBC, 0x19, 0x0A, 0x6C, 0xBE, 0xF2, 0x3D, 0x34, 0x4C, 0x74, 0xC7, 0x81, 0x01, 0xA3, 0xB5, 0xA7, 0xE0, 0x71, 0xE2, 0xA6, 0xB9, 0x00, 0x4D, 0xE0, 0x64, 0x12, 0xDB, 0x80, 0x43, 0x38, 0x00, 0x19, 0x44, 0xCD, 0x60, 0x37, 0xC0, 0x89, 0x1C, 0x2C, 0x40, 0x6D, 0xE0, 0x80, 0x2B, 0xFE, 0x59, 0x71, 0xDA, 0x2C, 0x31, 0x29, 0x35, 0x27, 0xAD, 0x3E, 0xC6, 0x4B, 0x6B, 0x23, 0xCC, 0x88, 0x7F, 0xD6, 0x5B, 0xF0, 0x2F, 0x54, 0x8F, 0xAE, 0x69, 0xA2, 0x3C, 0x89, 0x37, 0x27, 0xA0, 0x4F, 0x00, 0x64, 0x8E, 0x32, 0x88, 0xFD, 0xCE, 0x24, 0xF1, 0x69, 0x6F, 0xE5, 0xC8, 0xC9, 0x46, 0xB1, 0xC7, 0xC6, 0x77, 0x5F, 0x33, 0x53, 0xBB, 0x81, 0xF2, 0x99, 0xBE, 0x63, 0x97, 0x50, 0x40, 0xD7, 0xBC, 0xB2, 0xF9, 0x8D, 0xE6, 0x4B, 0xCF, 0x1F, 0xAE, 0x14, 0xD0, 0x05, 0xA4, 0xCD, 0x44, 0xE7, 0xD7, 0x1C, 0xB3, 0x2E, 0x07, 0x7C, 0x03, 0x11, 0x40, 0xCD, 0x72, 0x21, 0x06, 0x44, 0x03, 0xBD, 0x80, 0xAA, 0x81, 0x00, 0x39, 0x88, 0x04, 0xD2, 0xF0, 0x2B, 0x49, 0xD3, 0x66, 0x35, 0x8E, 0xA7, 0x44, 0x1D, 0x47, 0x52, 0x82, 0x7F, 0x6E, 0xF5, 0x19, 0x28, 0x58, 0x5D, 0xFB, 0x5B, 0x27, 0xBC, 0x6C, 0x52, 0x53, 0xFC, 0x27, 0x4F, 0x2B, 0x0E, 0x94, 0xFF, 0xC2, 0x3D, 0x2A, 0xE7, 0x8F, 0x7A, 0xCC, 0xA3, 0xF3, 0xAF, 0xDB, 0xFC, 0xA9, 0x6C, 0x86, 0x86, 0xE2, 0xCF, 0xA1, 0xF9, 0xFB, 0xEE, 0x76, 0x16, 0x0F, 0xE7, 0x04, 0xFA, 0x30, 0x75, 0x48, 0xB6, 0x00, 0x85, 0xB3, 0x04, 0x87, 0x5D, 0x03, 0x96, 0x02, 0xAA, 0x4C, 0xDD, 0xC1, 0x9B, 0x5B, 0x00, 0xFE, 0xF8, 0xDA, 0xC0, 0x36, 0x40, 0x15, 0x08, 0x9F, 0xE9, 0xAB, 0x80, 0xEC, 0x1B, 0xBB, 0x07, 0x3E, 0x28, 0x40, 0x37, 0x90, 0x46, 0x9B, 0xF5, 0x17, 0xF4, 0xDC, 0x56, 0x9F, 0xF7, 0x36, 0x96, 0x7C, 0x90, 0x74, 0xDC, 0x52, 0xB3, 0x11, 0xBC, 0x48, 0x83, 0x08, 0x54, 0x08, 0x5A, 0x14, 0xF5, 0xBA, 0x22, 0xC6, 0x66, 0x6F, 0x9C, 0x9D, 0x95, 0x73, 0xC2, 0x92, 0xCF, 0x27, 0x35, 0x7F, 0x01, 0x16, 0xC0, 0x66, 0x39, 0xC5, 0x7C, 0x92, 0x27, 0x7B, 0x9F, 0x51, 0xD2, 0x90, 0x5B, 0xC2, 0x50, 0x16, 0xC0, 0xCE, 0x8D, 0x99, 0x83, 0xA0, 0x5E, 0x1A, 0x83, 0xAC, 0x4F, 0xD9, 0x94, 0xDE, 0x11, 0x9C, 0x2D, 0x80, 0xEC, 0xBB, 0xD2, 0x74, 0x25, 0x60, 0x02, 0xA8, 0x01, 0x7B, 0x3D, 0x95, 0x3F, 0x75, 0xEB, 0x2D, 0x68, 0xF0, 0x36, 0x60, 0x28, 0x28, 0xF0, 0xB0, 0xBF, 0x9C, 0x14, 0xD2, 0x42, 0x84, 0x6F, 0x26, 0x9B, 0xE2, 0x4D, 0x99, 0xDE, 0xCB, 0x69, 0x28, 0xCA, 0x30, 0x65, 0x40, 0xE5, 0xB1, 0x9A, 0xDD, 0xAD, 0x2D, 0x25, 0xEE, 0x3C, 0x7F, 0x00, 0xBE, 0xA1, 0xAB, 0xE9, 0x73, 0x07, 0x50, 0x8B, 0x0F, 0x29, 0xB7, 0x76, 0x6B, 0xB2, 0xF2, 0xCB, 0xDC, 0x5F, 0xDB, 0x8E, 0xD1, 0xD3, 0x01, 0x06, 0x06, 0xF5, 0xAA, 0xB3, 0xCD, 0xE3, 0xCB, 0xB5, 0x7D, 0x47, 0x70, 0x9A, 0x19, 0x8F, 0xFB, 0xE9, 0x54, 0x29, 0x0A, 0x44, 0x00, 0x3E, 0x90, 0x60, 0xD3, 0xE5, 0x4B, 0x3B, 0x20, 0xF7, 0x71, 0x2F, 0xD3, 0x6A, 0x68, 0x69, 0xE6, 0x1E, 0xD3, 0x3F, 0xB5, 0xB0, 0x66, 0x87, 0xE1, 0x24, 0xB4, 0x7B, 0xF2, 0xDC, 0x37, 0x6C, 0xB8, 0x0D, 0xFB, 0x6A, 0xC6, 0xD1, 0x5A, 0x86, 0xDC, 0xE6, 0x95, 0x79, 0xAB, 0x47, 0xA7, 0xDB, 0xF3, 0x44, 0x7B, 0x06, 0x0A, 0x6C, 0x99, 0x0D, 0x16, 0xAF, 0xA4, 0x00, 0xBA, 0x01, 0x46, 0xEF, 0x7A, 0x33, 0xE8, 0xF3, 0x93, 0x03, 0x83, 0xB7, 0xF7, 0xEA, 0x69, 0xD0, 0x0D, 0x68, 0x0E, 0xDE, 0x2A, 0x8E, 0xA4, 0x78, 0x21, 0x7D, 0x69, 0xEB, 0x91, 0x7A, 0xDE, 0x80, 0x2A, 0x90, 0x71, 0x37, 0x45, 0xCA, 0x05, 0x84, 0x01, 0xB6, 0x01, 0xA6, 0xF1, 0x96, 0x00, 0x6D, 0x7C, 0x85, 0x56, 0x93, 0x6F, 0x74, 0xAD, 0xF2, 0x0F, 0x92, 0xFE, 0xD5, 0x4B, 0xD9, 0x38, 0x1B, 0xDB, 0x04, 0xA3, 0xD9, 0x12, 0x23, 0xBD, 0xF6, 0x87, 0xF1, 0x40, 0x5A, 0xBF, 0x6D, 0xA6, 0x36, 0xF3, 0x03, 0x58, 0x0D, 0x68, 0x8F, 0x4A, 0x57, 0x02, 0xDE, 0xC0, 0xB2, 0x7B, 0xE4, 0x6F, 0x05, 0x98, 0x83, 0x7A, 0x04, 0x6C, 0xE6, 0x93, 0xDA, 0xDD, 0xDA, 0x98, 0xC1, 0x9A, 0x68, 0x60, 0x53, 0x9F, 0xF6, 0x8A, 0xB6, 0xF8, 0x29, 0x21, 0x36, 0xB9, 0xF5, 0xAD, 0xF4, 0xD1, 0x6B, 0xF5, 0x41, 0x8F, 0xB5, 0xDD, 0x80, 0x0E, 0xA0, 0x14, 0xF0, 0x00, 0x58, 0xB6, 0xC4, 0x87, 0x6B, 0x50, 0x72, 0x66, 0xA8, 0x7E, 0xA1, 0x4F, 0x15, 0x45, 0x1F, 0x77, 0x41, 0xF6, 0x32, 0x2A, 0xF6, 0x3F, 0xD4, 0x94, 0x2C, 0x0B, 0xBC, 0x8B, 0x12, 0x13, 0x10, 0xCF, 0x5B, 0x8F, 0xEE, 0x0D, 0xE2, 0x2D, 0xBB, 0x7B, 0xF8, 0x0B, 0x21, 0x78, 0x58, 0x05, 0xF8, 0x53, 0x65, 0xD6, 0x8F, 0xD5, 0xD2, 0xEE, 0x84, 0x63, 0x77, 0x1A, 0xE1, 0x2E, 0xC8, 0x5C, 0x71, 0xAF, 0x5D, 0x22, 0xF3, 0xF0, 0xEA, 0x48, 0x5E, 0x27, 0xE6, 0xB9, 0x36, 0x60, 0x0A, 0xC4, 0x06, 0x32, 0x4E, 0x34, 0xF6, 0xEE, 0x44, 0xB5, 0x72, 0x70, 0x4E, 0xE8, 0x80, 0x6D, 0x60, 0x3B, 0xA0, 0x7C, 0x53, 0x68, 0x35, 0x43, 0x5F, 0xE8, 0xDE, 0x5F, 0x95, 0xD9, 0xCA, 0x60, 0x10, 0x6F, 0x6A, 0x7D, 0xFC, 0x5B, 0xA2, 0x4F, 0x06, 0x8D, 0x06, 0x32, 0x51, 0x3A, 0x11, 0xC4, 0xFB, 0x67, 0x01, 0xA8, 0xF9, 0x2D, 0x29, 0x1B, 0x01, 0xB8, 0x00, 0xE2, 0x4F, 0xD6, 0x95, 0x02, 0x41, 0x6B, 0x6F, 0xA0, 0x68, 0x92, 0xF9, 0xC4, 0xA4, 0x17, 0x37, 0x60, 0xD5, 0xDD, 0x16, 0x2E, 0xF7, 0xC0, 0xE6, 0x15, 0x66, 0x3A, 0x28, 0x97, 0xCC, 0xBB, 0xE0, 0x35, 0x1C, 0xC8, 0x41, 0x3D, 0x2A, 0x3A, 0x15, 0x4F, 0x61, 0x7B, 0xCE, 0xC3, 0x81, 0x3D, 0x6B, 0xB3, 0xFA, 0x79, 0x85, 0x56, 0xF3, 0xBF, 0x5A, 0xD0, 0x4B, 0x4B, 0xC3, 0xF2, 0x96, 0xDF, 0x22, 0x1B, 0x93, 0xBE, 0x2A, 0xE8, 0xEC, 0xA1, 0xF9, 0xC1, 0xDD, 0xF1, 0x2B, 0x6D, 0xA5, 0xF4, 0xD0, 0x9D, 0x75, 0xC5, 0x4D, 0x90, 0xFB, 0x0F, 0x0B, 0xE8, 0x0E, 0xF2, 0x6E, 0x58, 0x5F, 0x0D, 0x98, 0x02, 0xBB, 0x9F, 0xEA, 0x59, 0xA6, 0xD6, 0x07, 0x20, 0x47, 0xEC, 0x16, 0x58, 0xCD, 0x84, 0x32, 0xCE, 0x49, 0x40, 0x03, 0x38, 0xC5, 0xB0, 0x7A, 0xC7, 0xDE, 0x6D, 0x10, 0x0E, 0xA4, 0x01, 0xA5, 0xAC, 0xFC, 0x07, 0xB8, 0xB8, 0xAE, 0xB1, 0x5A, 0x27, 0x90, 0x06, 0x68, 0x02, 0xAB, 0x01, 0x09, 0xA0, 0xEB, 0x58, 0x2D, 0xBE, 0x24, 0xB5, 0x95, 0xF2, 0x55, 0x7E, 0xC6, 0x51, 0x78, 0x65, 0xB8, 0xED, 0x12, 0x90, 0xD8, 0xB6, 0x30, 0xD6, 0x64, 0xC6, 0x9A, 0x9D, 0x80, 0xF1, 0xB0, 0x19, 0x07, 0xD6, 0x75, 0xA7, 0xD5, 0x59, 0x02, 0x5A, 0xC0, 0x96, 0xBB, 0x76, 0x33, 0x83, 0x98, 0x57, 0x9E, 0x7A, 0xD0, 0xDC, 0xC0, 0x8E, 0x5B, 0x74, 0xC2, 0xE4, 0x96, 0x54, 0xF6, 0xB8, 0xF5, 0x07, 0xB6, 0xE3, 0x4D, 0xAF, 0xFB, 0x8F, 0xB6, 0xFD, 0x49, 0xCA, 0xA0, 0x11, 0xED, 0x5E, 0xF4, 0x82, 0x66, 0xE3, 0x6A, 0x37, 0x88, 0xA0, 0xA1, 0x9E, 0x4C, 0x98, 0x0D, 0xB4, 0x1E, 0xB3, 0xE5, 0x5F, 0x28, 0x14, 0x4D, 0xE2, 0xDB, 0x70, 0xA0, 0xAD, 0x66, 0x9D, 0xD3, 0x2D, 0x50, 0x10, 0xEC, 0xF7, 0xFA, 0x43, 0x9F, 0xFC, 0x42, 0x3F, 0x2C, 0xDD, 0x97, 0xEA, 0xB2, 0xEB, 0xB5, 0x1D, 0x30, 0x2B, 0x08, 0x7B, 0xE2, 0x9D, 0x1D, 0x51, 0x09, 0x68, 0x53, 0xD1, 0x6B, 0x0A, 0xEC, 0x01, 0x2B, 0xA0, 0x6E, 0x4D, 0xB6, 0x7D, 0x32, 0x2E, 0xB4, 0xF0, 0xDF, 0xEA, 0x4E, 0xF2, 0x59, 0x57, 0x8D, 0x29, 0x47, 0x2E, 0x1F, 0xE2, 0x04, 0xFC, 0x2B, 0xF6, 0x91, 0xA3, 0x33, 0xA7, 0x05, 0x84, 0x03, 0x95, 0xB3, 0xCF, 0xB2, 0xD0, 0xAA, 0x00, 0x57, 0xC0, 0x0C, 0xD8, 0xF5, 0x08, 0x39, 0x2D, 0xC0, 0x7B, 0x5E, 0x49, 0x5A, 0xAD, 0x3E, 0x73, 0xC5, 0x8A, 0x6F, 0x3B, 0xF0, 0x44, 0xB2, 0x5A, 0x89, 0x4D, 0xCB, 0x39, 0x45, 0xC5, 0x87, 0xC9, 0x14, 0xBA, 0xE6, 0x87, 0xF6, 0x38, 0xD5, 0x78, 0xE4, 0x25, 0x85, 0x7B, 0xB6, 0x9C, 0x7C, 0xCA, 0x57, 0x96, 0xDD, 0x67, 0x8E, 0xE4, 0x5F, 0x0D, 0xB0, 0x05, 0x38, 0x6B, 0x45, 0x0B, 0x68, 0x03, 0x58, 0x56, 0xDD, 0x1B, 0x58, 0x33, 0x90, 0xDE, 0x52, 0xD7, 0xD0, 0x5F, 0xB5, 0x7E, 0x1E, 0xC9, 0x53, 0x91, 0x27, 0xEA, 0xEE, 0x09, 0x64, 0xDC, 0xE9, 0x69, 0xD2, 0x40, 0xEF, 0x5B, 0xE3, 0x6F, 0xF3, 0xA1, 0x03, 0x6E, 0x80, 0x38, 0xA0, 0x31, 0xAF, 0x04, 0xAD, 0xD6, 0xD3, 0xAC, 0x05, 0x45, 0x8C, 0x5B, 0x0D, 0x95, 0x0A, 0x12, 0xA8, 0xC7, 0x6C, 0x9F, 0xF8, 0x1D, 0xDC, 0x94, 0xEE, 0x81, 0x58, 0x62, 0x0A, 0x3D, 0x43, 0x77, 0x44, 0xEA, 0x27, 0x0A, 0x82, 0x77, 0x8E, 0xF6, 0x17, 0xD0, 0x01, 0xC8, 0x62, 0x57, 0xD3, 0xBB, 0x9B, 0xE4, 0xB2, 0xC1, 0x29, 0x59, 0x9A, 0x57, 0x1A, 0x9F, 0x3C, 0x7F, 0xF1, 0xA2, 0x3C, 0x22, 0x4A, 0x54, 0xA7, 0x0E, 0x01, 0x58, 0x4E, 0xC7, 0x92, 0xAC, 0x5A, 0xBF, 0x6E, 0xCE, 0xC8, 0x19, 0x83, 0x87, 0x78, 0x1C, 0x9A, 0xE6, 0x00, 0xAB, 0x43, 0x74, 0x01, 0xBF, 0xB0, 0x03, 0x90, 0x00, 0x13, 0xEC, 0x7B, 0x03, 0xD9, 0x40, 0xFB, 0xF8, 0x27, 0x69, 0xB4, 0xB9, 0xCE, 0x57, 0xA1, 0xB3, 0xA5, 0xEC, 0x84, 0x73, 0x26, 0xE1, 0xBF, 0xD5, 0x0E, 0x04, 0x67, 0xA5, 0x01, 0x33, 0xDC, 0x57, 0x1B, 0xD6, 0x8A, 0xF7, 0x94, 0x7B, 0xCB, 0x18, 0xA0, 0x74, 0xFF, 0x1E, 0xD5, 0x2B, 0xF0, 0x29, 0x12, 0xA0, 0x30, 0x22, 0xB5, 0x1B, 0xFB, 0x2A, 0x2F, 0xF6, 0xA3, 0x39, 0xD5, 0x83, 0x50, 0x3E, 0xBC, 0xB3, 0x24, 0x73, 0xB3, 0xD6, 0xF3, 0x56, 0xA6, 0xAF, 0x79, 0xA5, 0xF6, 0x98, 0x72, 0x02, 0x78, 0x1E, 0xCF, 0xF1, 0x36, 0x00, 0xD7, 0x3B, 0xBC, 0x6F, 0x05, 0xD4, 0x06, 0xF2, 0x51, 0x27, 0x92, 0xC1, 0x12, 0x60, 0x2B, 0x50, 0xC7, 0x6A, 0x1B, 0xBE, 0xAC, 0x85, 0xC2, 0xF6, 0x6D, 0x81, 0xC0, 0x41, 0xD4, 0x04, 0x21, 0x75, 0xC2, 0x8E, 0x3A, 0xF3, 0xBB, 0x47, 0x6C, 0xAE, 0x98, 0x2E, 0x74, 0x19, 0x8D, 0x59, 0x7B, 0xCA, 0x2F, 0xB8, 0xF2, 0x0E, 0x66, 0x6B, 0xFF, 0x2A, 0x29, 0xFD, 0xB4, 0x34, 0x23, 0x24, 0x00, 0x9B, 0xFF, 0x06, 0xC4, 0x89, 0x93, 0x1F, 0x2D, 0xC0, 0x75, 0x67, 0xA9, 0xEC, 0x93, 0xC5, 0x06, 0xA3, 0x9D, 0x5E, 0x9F, 0x94, 0xB8, 0x96, 0x9F, 0x99, 0xEA, 0xE4, 0x69, 0x98, 0x03, 0x25, 0xFF, 0x68, 0xDF, 0xBB, 0x1B, 0x70, 0x22, 0x00, 0x4D, 0x60, 0x19, 0xDE, 0xCC, 0x06, 0x28, 0x33, 0x98, 0x49, 0xA3, 0x09, 0xFA, 0x3B, 0x64, 0x7C, 0xEE, 0x88, 0x5D, 0x35, 0xD8, 0x53, 0xA3, 0xDC, 0x1F, 0x2A, 0x12, 0x68, 0x9F, 0xA1, 0x96, 0x8C, 0xAF, 0xDF, 0x4D, 0x6C, 0xEE, 0xFE, 0xBB, 0x7B, 0x9F, 0x62, 0x6C, 0x8F, 0x19, 0x6A, 0xC6, 0xD6, 0xE1, 0xC0, 0x92, 0xBB, 0x00, 0xBA, 0x0A, 0x9F, 0xF8, 0xA6, 0xDB, 0x5D, 0xC5, 0xBA, 0xF7, 0xDD, 0x68, 0x8F, 0xF9, 0xBC, 0xEC, 0x52, 0x95, 0x83, 0xD5, 0xBF, 0xE3, 0x29, 0x6A, 0x18, 0x28, 0x7D, 0x07, 0xDB, 0x73, 0xA8, 0x2D, 0x40, 0x13, 0x88, 0x75, 0xAF, 0x0B, 0x19, 0x77, 0x3A, 0xCC, 0x96, 0x7B, 0xE9, 0x30, 0x7B, 0x4A, 0x19, 0x8D, 0xFD, 0x62, 0x68, 0x35, 0x45, 0xE6, 0x4B, 0xE8, 0xE7, 0x48, 0xD4, 0xBD, 0x27, 0xD9, 0x6A, 0x63, 0xA4, 0x4A, 0xC0, 0xE8, 0xDA, 0x53, 0x0B, 0x94, 0x78, 0xD8, 0x42, 0x8D, 0x2B, 0xB4, 0x54, 0xBD, 0xE2, 0xEC, 0x01, 0xB0, 0x84, 0x8D, 0x9D, 0xEE, 0x2F, 0xA7, 0x3D, 0xB3, 0x5B, 0xB6, 0xDC, 0x6D, 0x99, 0x65, 0x60, 0x41, 0x45, 0xCD, 0x79, 0xF3, 0x97, 0x74, 0x22, 0xFB, 0x0C, 0x12, 0x61, 0x6F, 0xDD, 0x47, 0x8A, 0xAE, 0xC6, 0xCA, 0x7C, 0x45, 0x27, 0xBE, 0xE7, 0x75, 0x0B, 0xA2, 0xD1, 0xE7, 0x2F, 0x1B, 0xB0, 0xBE, 0x9B, 0x0D, 0x7A, 0x02, 0xED, 0x83, 0xF5, 0xD4, 0xB0, 0x38, 0x20, 0x01, 0xD8, 0xC4, 0x6E, 0x76, 0xD1, 0x68, 0x86, 0x28, 0xAA, 0xCA, 0xB7, 0xAA, 0x85, 0x37, 0x96, 0x64, 0x8F, 0xE9, 0x54, 0x81, 0x1C, 0x05, 0x8A, 0xFA, 0x2D, 0xAD, 0xE9, 0x84, 0xAA, 0xBF, 0x8C, 0x8E, 0x88, 0xA7, 0x93, 0xEA, 0xAE, 0xC5, 0xA9, 0x38, 0x71, 0x0F, 0x03, 0x3A, 0x81, 0x33, 0xE0, 0x65, 0xFE, 0x66, 0x7E, 0x27, 0x04, 0xC4, 0x83, 0xCC, 0x5F, 0x06, 0x8A, 0x1F, 0x4D, 0xA2, 0x7A, 0x14, 0x7E, 0x6D, 0x01, 0xBA, 0x7F, 0xFD, 0x0A, 0x92, 0x65, 0xF0, 0x03, 0x39, 0x81, 0xD6, 0x35, 0xF0, 0x00, 0x18, 0x9D, 0xD4, 0x0D, 0x14, 0x5B, 0x33, 0xFA, 0x8D, 0xA5, 0x2C, 0xF8, 0x02, 0x72, 0x50, 0xB4, 0x64, 0xD0, 0x68, 0x0E, 0xC7, 0xB0, 0x26, 0xDA, 0x6B, 0xB7, 0xC0, 0x31, 0x3C, 0xAD, 0x19, 0x2D, 0x1A, 0x66, 0x72, 0xAC, 0x6D, 0xAC, 0xD6, 0xEE, 0xDA, 0x77, 0x27, 0xD5, 0xF5, 0xE4, 0xA9, 0xED, 0x66, 0x1D, 0xFD, 0xBA, 0xB5, 0x00, 0x16, 0x8F, 0x42, 0xA7, 0xA5, 0xC2, 0x7D, 0x76, 0xDA, 0x0B, 0xF0, 0xA2, 0xF4, 0xF7, 0x18, 0xDD, 0x01, 0x19, 0x73, 0xC5, 0xBE, 0x45, 0x7D, 0x25, 0xEF, 0x9E, 0xAB, 0xD5, 0x3F, 0x95, 0x84, 0x38, 0x4A, 0xCF, 0x6A, 0xAC, 0xD9, 0x82, 0xF1, 0x82, 0x61, 0xE6, 0x81, 0xF9, 0x98, 0x52, 0x81, 0x1A, 0x03, 0xA9, 0x00, 0xC2, 0x78, 0x76, 0xDF, 0x13, 0x44, 0x06, 0x0C, 0xB4, 0xD9, 0x99, 0x9F, 0x01, 0x15, 0x8A, 0xF2, 0x19, 0x23, 0x77, 0xA5, 0xD9, 0x32, 0x99, 0xD4, 0x0C, 0x45, 0x52, 0x85, 0x07, 0x02, 0xA7, 0x29, 0xBF, 0x2E, 0xD7, 0x2B, 0x80, 0xF4, 0x9F, 0x80, 0x14, 0x3B, 0xA8, 0x32, 0x84, 0x64, 0xFB, 0x60, 0x6F, 0x3C, 0x64, 0xE2, 0xC4, 0x96, 0xC9, 0xF3, 0x98, 0xEC, 0x8D, 0x8C, 0xA9, 0xFF, 0x1C, 0xEC, 0xC9, 0xDE, 0xD0, 0x9E, 0x10, 0x72, 0xDE, 0x91, 0x6F, 0x4F, 0x60, 0x0B, 0x20, 0x1F, 0x04, 0x96, 0x50, 0x3B, 0x21, 0x2B, 0x11, 0x96, 0x36, 0xDD, 0x85, 0x7F, 0x3B, 0x01, 0x5F, 0x00, 0x7F, 0x25, 0xDD, 0x80, 0x3B, 0x10, 0x3A, 0x88, 0x41, 0x02, 0x19, 0x40, 0x33, 0x42, 0x93, 0xB4, 0x59, 0x4E, 0xCE, 0x91, 0x22, 0xB4, 0xDA, 0x82, 0x34, 0xA8, 0x95, 0xF8, 0x73, 0xEC, 0x42, 0xB0, 0x30, 0x6A, 0x02, 0x89, 0xCD, 0x3D, 0xF5, 0xAA, 0xFF, 0x3C, 0xE2, 0x87, 0xCE, 0x8B, 0x30, 0x6F, 0x61, 0x4F, 0xCC, 0xB1, 0xE5, 0x96, 0x75, 0x74, 0xFF, 0x75, 0x4D, 0x94, 0xA3, 0xEE, 0x28, 0x76, 0x27, 0x2B, 0xE4, 0xC0, 0xAF, 0x87, 0x4C, 0x41, 0x90, 0x93, 0xA3, 0x97, 0x01, 0x78, 0x33, 0x0F, 0xEA, 0x27, 0x9E, 0x5B, 0x30, 0xA8, 0x4C, 0x0C, 0x02, 0x09, 0x29, 0x63, 0xDE, 0x00, 0xBC, 0x61, 0xE5, 0x65, 0x00, 0x3F, 0x55, 0x01, 0xBD, 0x81, 0x32, 0x20, 0x37, 0x10, 0x06, 0xE0, 0x2F, 0xA0, 0xBF, 0xE9, 0x59, 0x70, 0x6C, 0xB8, 0x4C, 0xE9, 0x6D, 0x4E, 0xFA, 0xE7, 0xEC, 0x00, 0xAE, 0xF8, 0x1B, 0xDB, 0xC6, 0x41, 0xCF, 0xE1, 0xA4, 0x6C, 0x51, 0xC8, 0x25, 0x8C, 0xD1, 0xEC, 0x32, 0x5A, 0xD2, 0x4D, 0xCD, 0xEC, 0x91, 0x39, 0x18, 0xA8, 0x9C, 0x3C, 0x8A, 0xC5, 0xC0, 0x70, 0xFD, 0xBA, 0x94, 0xE6, 0xA9, 0x2A, 0xEC, 0xC6, 0xA7, 0x64, 0x8D, 0x70, 0x02, 0x2C, 0x20, 0x54, 0xBF, 0x0B, 0x0F, 0x77, 0x8F, 0x7D, 0x1C, 0xA0, 0xEA, 0x69, 0x5D, 0xCA, 0xA6, 0x7E, 0xEA, 0x95, 0xE3, 0x09, 0x1F, 0x64, 0xCE, 0x70, 0x0F, 0x20, 0x18, 0xEF, 0x4B, 0x40, 0x88, 0x1A, 0x08, 0xB0, 0x6D, 0xB0, 0x01, 0x59, 0x40, 0x1C, 0xA3, 0x35, 0xE2, 0xEE, 0x51, 0x98, 0x34, 0xA9, 0x93, 0x31, 0x91, 0x73, 0xCF, 0xD0, 0xE9, 0x8C, 0xD9, 0x53, 0x37, 0x7C, 0x84, 0xC3, 0xB0, 0x5D, 0x8E, 0xD1, 0xB8, 0x11, 0x1C, 0xA5, 0x7A, 0x67, 0x79, 0x36, 0xBF, 0xAE, 0xFD, 0x9A, 0xB9, 0xE6, 0xD9, 0x95, 0xFC, 0x83, 0x9F, 0x1E, 0xE0, 0x72, 0xB5, 0xE9, 0xF4, 0x63, 0xC2, 0xBD, 0xF1, 0x49, 0x39, 0x26, 0xE5, 0xA7, 0xCB, 0xBF, 0x8E, 0xE2, 0x70, 0x2E, 0x40, 0x8D, 0x0F, 0x7F, 0x49, 0x80, 0x9C, 0xF9, 0x0C, 0xCB, 0x20, 0x53, 0x19, 0x33, 0xD8, 0x80, 0xF2, 0x19, 0x31, 0x9B, 0xEB, 0x00, 0xE0, 0x3D, 0x48, 0xC0, 0x04, 0xD8, 0x82, 0x37, 0x9B, 0x6F, 0x32, 0x87, 0x8C, 0x4B, 0x5A, 0x50, 0x28, 0xAF, 0x30, 0x44, 0x5A, 0xB1, 0x6F, 0x71, 0xE9, 0xDD, 0x85, 0x68, 0x10, 0xAB, 0xDE, 0xAD, 0x30, 0xE0, 0xD6, 0x5D, 0x01, 0x3A, 0x48, 0x4A, 0xE3, 0xE5, 0x6C, 0xDA, 0xB5, 0x7E, 0x62, 0xF0, 0x3D, 0xD7, 0x94, 0xC2, 0x72, 0xA0, 0x71, 0x32, 0xD1, 0x4E, 0x7A, 0x5A, 0x02, 0x16, 0x1C, 0x22, 0xF3, 0x73, 0x1B, 0xC0, 0x92, 0x16, 0xE7, 0xD7, 0xDD, 0xF3, 0xA6, 0x32, 0xDB, 0xD5, 0x81, 0x98, 0xA1, 0xE5, 0xB3, 0x84, 0x06, 0x83, 0xD5, 0x0C, 0x3A, 0x4F, 0x58, 0xB4, 0x27, 0xD8, 0xC9, 0x68, 0xDE, 0x16, 0x20, 0x6C, 0x82, 0x7A, 0x1B, 0xB0, 0x06, 0x5C, 0x01, 0x2B, 0x40, 0x73, 0xE0, 0x80, 0xC5, 0x04, 0xD9, 0x8A, 0x36, 0xDB, 0xF0, 0x24, 0xB5, 0x8E, 0x30, 0x2A, 0x83, 0xC7, 0x4C, 0x4D, 0xDF, 0x88, 0x6E, 0x4B, 0x61, 0x29, 0x4C, 0xE4, 0x81, 0xF7, 0x4A, 0xC4, 0x89, 0x79, 0x7D, 0xBA, 0xBA, 0xF7, 0x4F, 0xB0, 0x4C, 0x6D, 0xE6, 0xC5, 0x88, 0xFB, 0xFA, 0xA4, 0xD1, 0xF2, 0xDF, 0xB3, 0x9E, 0x38, 0xF8, 0x98, 0xCE, 0xFC, 0xC4, 0xB3, 0x73, 0xA6, 0x80, 0xF5, 0x2C, 0xCB, 0x3A, 0xF1, 0x3B, 0x1B, 0x93, 0x3B, 0x4C, 0xEE, 0x0D, 0x6C, 0x67, 0xD9, 0x2B, 0x50, 0xF3, 0x4A, 0xF4, 0x18, 0x6B, 0xAC, 0x24, 0xF3, 0xAF, 0x17, 0x4B, 0x70, 0x0D, 0xBF, 0xC4, 0x1A, 0xF8, 0x07, 0xDC, 0x58, 0x3E, 0x78, 0x03, 0x55, 0x40, 0xC7, 0xA0, 0x26, 0x6E, 0x2B, 0x83, 0x02, 0x64, 0x50, 0x46, 0x9B, 0x8D, 0x95, 0xA8, 0x4C, 0x98, 0x7E, 0x35, 0x21, 0xCF, 0x6C, 0xDC, 0x4B, 0x29, 0x53, 0xA7, 0x93, 0xD8, 0xB1, 0xFA, 0x88, 0xA4, 0x9E, 0xA4, 0xC8, 0x5F, 0xB1, 0xC8, 0x1E, 0x9B, 0x25, 0x7E, 0x5D, 0x9B, 0xA8, 0x71, 0xE6, 0xFC, 0x66, 0x1F, 0xC6, 0x95, 0xE0, 0x6C, 0xC2, 0xC9, 0x24, 0x0C, 0x48, 0xDF, 0xC1, 0x90, 0x0A, 0xA8, 0xC0, 0x9E, 0xB5, 0x00, 0x31, 0x60, 0x07, 0xA0, 0x7B, 0x90, 0x00, 0x76, 0xB4, 0x3C, 0xF1, 0xE5, 0xF2, 0xF9, 0x17, 0x68, 0x09, 0xFE, 0xEB, 0x45, 0xCD, 0x6D, 0xC0, 0x0D, 0xE8, 0x85, 0x20, 0xFE, 0x4E, 0x40, 0x0A, 0xD0, 0x81, 0x35, 0x90, 0x0B, 0xE8, 0xC9, 0x0F, 0x58, 0x09, 0xA8, 0xD3, 0x66, 0xFA, 0xF9, 0x21, 0x53, 0xE2, 0x38, 0x20, 0x7B, 0x43, 0x39, 0x1E, 0x3D, 0x50, 0x1A, 0x15, 0x2B, 0x5B, 0xE1, 0xFF, 0x33, 0x45, 0xD1, 0xA9, 0x05, 0x1D, 0x69, 0x4F, 0x7C, 0xA5, 0x58, 0xB5, 0x7A, 0x47, 0x40, 0xB7, 0x3D, 0xAD, 0x8C, 0x12, 0x50, 0x7D, 0x84, 0x66, 0x03, 0xE8, 0x47, 0x11, 0xF4, 0x74, 0x03, 0x64, 0x77, 0x5E, 0x01, 0x62, 0x01, 0x5E, 0xC0, 0x9D, 0x1C, 0x27, 0xA7, 0x2E, 0xAF, 0x19, 0xB3, 0x49, 0x20, 0x59, 0x53, 0x36, 0xD8, 0x4F, 0x95, 0x5E, 0xE8, 0x2D, 0x23, 0xE6, 0x09, 0xD8, 0x40, 0xE8, 0x49, 0x36, 0xC0, 0x0B, 0x48, 0x39, 0x45, 0x68, 0xB4, 0x9A, 0x61, 0x4C, 0xDA, 0xFA, 0xC2, 0x2C, 0x6E, 0xF2, 0xFD, 0xB1, 0xB2, 0x64, 0x2E, 0xEA, 0x36, 0xB5, 0x1E, 0x3D, 0xD5, 0x58, 0x09, 0xA9, 0x51, 0x37, 0xAA, 0xE7, 0x3C, 0x0E, 0xB5, 0x60, 0xFD, 0x22, 0xD5, 0x3B, 0x1F, 0x31, 0x29, 0xA1, 0x63, 0x82, 0xE1, 0x46, 0xBF, 0x8A, 0x32, 0x97, 0x01, 0xBB, 0x9F, 0x8A, 0xAF, 0x56, 0x60, 0x8F, 0x46, 0x24, 0x1D, 0xE1, 0x05, 0x9C, 0xAF, 0x6D, 0x80, 0xE7, 0x4F, 0x81, 0x74, 0xCF, 0xD8, 0xDE, 0x76, 0x44, 0xE6, 0x37, 0x85, 0x76, 0x12, 0xF0, 0x02, 0xCA, 0xEF, 0x9B, 0xE4, 0x1A, 0x98, 0x03, 0x5A, 0xC0, 0xB6, 0xDB, 0xE7, 0x61, 0xF6, 0xDC, 0xFE, 0x8F, 0xD5, 0xFC, 0x0B, 0x11, 0x84, 0xEC, 0xBF, 0x1A, 0x77, 0x4A, 0x34, 0x44, 0xF8, 0x51, 0x0C, 0xE3, 0xA8, 0x96, 0xDE, 0x89, 0x30, 0x92, 0xEA, 0x87, 0xE8, 0xBC, 0xEB, 0xB3, 0xD7, 0xDB, 0xD4, 0x92, 0x4D, 0x10, 0x19, 0x3F, 0x1B, 0xF0, 0x61, 0x25, 0x20, 0x7A, 0x37, 0x01, 0x58, 0x0D, 0xC8, 0xBA, 0x3B, 0x79, 0x89, 0xDC, 0x11, 0xE6, 0xA3, 0x13, 0xEB, 0x00, 0x57, 0xD1, 0xD2, 0x01, 0xC7, 0x36, 0xE5, 0x2F, 0xC7, 0xBE, 0x27, 0x77, 0xFA, 0xD2, 0x46, 0xBD, 0x5A, 0x35, 0x00, 0x1D, 0x4F, 0x41, 0xDE, 0x5E, 0x77, 0x5D, 0x5E, 0x0E, 0x24, 0xEE, 0x3A, 0xB5, 0x6D, 0x40, 0x07, 0xAD, 0x16, 0xDF, 0xE4, 0xDF, 0x5E, 0x7F, 0xA5, 0x27, 0x2D, 0x64, 0x4D, 0x9E, 0x5A, 0x4F, 0xC0, 0xD8, 0x55, 0xE0, 0x54, 0xDF, 0x33, 0x9A, 0x43, 0x6F, 0xB9, 0xE5, 0x7C, 0x7A, 0xF5, 0x6E, 0xBA, 0x4F, 0x8D, 0x3B, 0x83, 0x03, 0xBB, 0xC7, 0x83, 0xAD, 0xAC, 0x42, 0xBE, 0x54, 0x83, 0x36, 0x4B, 0x58, 0xC7, 0xBE, 0x2B, 0xAF, 0x87, 0xC0, 0xAF, 0xE2, 0xEB, 0xD8, 0xD0, 0xC7, 0x4E, 0xF3, 0x69, 0xD1, 0xF3, 0x3D, 0x43, 0x3C, 0x82, 0x6E, 0xA4, 0xE3, 0x9E, 0x66, 0x55, 0xCB, 0x9D, 0x0B, 0xEF, 0x41, 0xBF, 0x27, 0x50, 0x74, 0x5E, 0xF4, 0xE0, 0x74, 0xFA, 0x03, 0x3C, 0x01, 0x29, 0xC0, 0x58, 0xB2, 0xB4, 0x69, 0xB5, 0xFC, 0x72, 0x14, 0x7A, 0xF9, 0x27, 0xA4, 0xB0, 0x65, 0x5F, 0xF1, 0x15, 0xB3, 0xFA, 0x7C, 0x8B, 0x81, 0x82, 0x3C, 0xD7, 0xED, 0xE8, 0x11, 0x59, 0x49, 0xA9, 0xC8, 0x27, 0x50, 0xB0, 0x9F, 0x58, 0xDE, 0x02, 0xBC, 0x9F, 0x5C, 0x0E, 0x96, 0xE8, 0xBF, 0xFD, 0xED, 0x04, 0xA8, 0x7D, 0x47, 0xFD, 0xBA, 0xEE, 0x3E, 0x89, 0xDC, 0x76, 0xDA, 0x81, 0x4A, 0x20, 0x0D, 0xB8, 0xDB, 0x17, 0xDB, 0xDD, 0xEE, 0xE2, 0xAA, 0x87, 0x6D, 0x20, 0xF2, 0xE9, 0x8B, 0x54, 0x40, 0x8E, 0xB5, 0x77, 0x00, 0xAB, 0xEE, 0x0E, 0xAF, 0x36, 0xD8, 0x0D, 0xA8, 0x9D, 0xD2, 0x6F, 0x5A, 0xAD, 0x3E, 0x49, 0xB5, 0xAB, 0x23, 0x68, 0x7D, 0xFE, 0x61, 0x9B, 0x58, 0x9E, 0xFE, 0x21, 0xDB, 0x32, 0x11, 0x1B, 0x0A, 0x43, 0xAF, 0xC7, 0xD2, 0x3B, 0xBC, 0xF2, 0x76, 0x1A, 0x3C, 0x85, 0xBF, 0x3E, 0xC3, 0xA3, 0xEF, 0x29, 0x56, 0xF2, 0xD8, 0x70, 0x71, 0xC5, 0x07, 0xDA, 0xEE, 0xD0, 0x9C, 0x2B, 0x77, 0x0A, 0x5A, 0x06, 0xF0, 0x18, 0xF4, 0xFD, 0x89, 0xD6, 0x3E, 0xC1, 0x96, 0x3C, 0xDD, 0x76, 0xA7, 0xD4, 0x96, 0xB3, 0x70, 0xD0, 0x1C, 0xF7, 0x09, 0x04, 0x23, 0x04, 0x0E, 0x44, 0x0E, 0x36, 0xA0, 0x05, 0xAC, 0x8D, 0x37, 0xD3, 0xEE, 0x90, 0x42, 0x04, 0xAD, 0xD6, 0x5F, 0x50, 0x2A, 0x74, 0xCC, 0x55, 0x23, 0x88, 0x6E, 0x73, 0x93, 0x0A, 0x41, 0x4C, 0x6B, 0x22, 0xA0, 0x15, 0x1F, 0xAC, 0x32, 0x19, 0x01, 0x7D, 0xCA, 0x18, 0xAF, 0x22, 0xF3, 0x38, 0x7F, 0xAE, 0x9D, 0xC0, 0xB2, 0x3B, 0xBD, 0x25, 0xFC, 0x2E, 0x9E, 0x96, 0x7D, 0x2F, 0x6F, 0x1A, 0x80, 0xCB, 0xDD, 0xF6, 0x3E, 0x14, 0xD8, 0xF5, 0x74, 0x4F, 0x2C, 0xE0, 0xAE, 0xE5, 0x64, 0xB4, 0x1D, 0xC5, 0x31, 0xB0, 0x93, 0x15, 0x0B, 0x6F, 0x01, 0x17, 0x20, 0xA9, 0x2F, 0x60, 0x40, 0x16, 0x3D, 0xC3, 0x83, 0xF5, 0xF4, 0x47, 0x5A, 0xB7, 0x61, 0xD9, 0x64, 0xE4, 0xF8, 0xD4, 0x72, 0x7D, 0x56, 0x13, 0xB1, 0xBF, 0x6C, 0xB4, 0x91, 0x8A, 0x82, 0x8A, 0x2B, 0x7A, 0x43, 0x19, 0x32, 0x50, 0x6A, 0xA3, 0x20, 0x3A, 0x1D, 0x5D, 0x25, 0x03, 0x7B, 0xA8, 0xBC, 0xDD, 0xB4, 0xB7, 0xFC, 0xB4, 0x25, 0xE2, 0xC4, 0x5C, 0x43, 0x00, 0x97, 0xBB, 0x58, 0xDC, 0x17, 0xC7, 0xC5, 0x93, 0xDA, 0x54, 0x77, 0x99, 0xF5, 0xEE, 0xFB, 0x4D, 0x6A, 0x00, 0xA4, 0x02, 0x8C, 0xA6, 0x76, 0x10, 0xC7, 0xF6, 0x8C, 0xF8, 0x72, 0x01, 0x1F, 0x73, 0xC9, 0x5D, 0x29, 0xBC, 0x13, 0xD0, 0x41, 0x3E, 0xBD, 0xBB, 0x6A, 0x01, 0xF9, 0x74, 0xFF, 0xDC, 0x7B, 0x6C, 0x38, 0x38, 0xE2, 0x9B, 0x4E, 0xAB, 0x6D, 0xE4, 0x65, 0x56, 0x7D, 0xB9, 0x57, 0x6B, 0x5A, 0x1C, 0x87, 0x20, 0x95, 0xD9, 0xF6, 0x9E, 0x1D, 0xC6, 0x90, 0xC5, 0x63, 0x8D, 0x28, 0x7D, 0xAD, 0xBB, 0x3C, 0x3B, 0x1E, 0xAB, 0xD5, 0x25, 0x73, 0x7E, 0xB5, 0x1F, 0x2A, 0x6C, 0x5F, 0xA7, 0x31, 0xE3, 0xAD, 0x56, 0xB0, 0x69, 0xD1, 0x06, 0x82, 0xFA, 0x11, 0x8F, 0xB6, 0x84, 0xE8, 0x2D, 0x3F, 0xAC, 0x09, 0x2C, 0x05, 0x4E, 0x5A, 0x41, 0xFD, 0x32, 0x33, 0xB7, 0x9E, 0x1A, 0xC7, 0x65, 0xF7, 0x36, 0x90, 0x7E, 0x6F, 0x03, 0x1E, 0xF4, 0x61, 0x03, 0x5E, 0x03, 0x07, 0x34, 0x6E, 0x51, 0xBF, 0x6C, 0xA0, 0x8D, 0x17, 0x5F, 0x5A, 0x4D, 0x50, 0xA6, 0xE1, 0xF1, 0xE7, 0x3D, 0x09, 0x7E, 0x05, 0x9D, 0x65, 0x09, 0xDC, 0x9F, 0x76, 0x60, 0x00, 0x22, 0x54, 0xB0, 0xA7, 0xE4, 0xDB, 0xB8, 0x77, 0x3E, 0xCD, 0xA5, 0x78, 0x58, 0x38, 0x7F, 0xB5, 0xE3, 0x88, 0x1D, 0xD4, 0x6C, 0x66, 0x8C, 0xD1, 0x3E, 0x0D, 0xBA, 0x8E, 0x3E, 0xE8, 0xA0, 0xB9, 0x09, 0x2A, 0x17, 0x18, 0x86, 0xB8, 0xD8, 0x22, 0x06, 0x50, 0xBB, 0xC5, 0x21, 0xB7, 0xFC, 0xD6, 0x20, 0x76, 0xA0, 0xEE, 0x53, 0xC3, 0xB7, 0xD9, 0x5A, 0x84, 0x05, 0x08, 0x01, 0xB8, 0x02, 0x3D, 0x7E, 0x02, 0x5F, 0x40, 0xE9, 0x8D, 0x5C, 0x80, 0x0F, 0xB4, 0x9E, 0x94, 0xFA, 0xA2, 0xD5, 0x14, 0xB2, 0x78, 0xBD, 0xA7, 0xB7, 0x71, 0x8C, 0x61, 0x27, 0x6D, 0xDE, 0x0B, 0xBD, 0x48, 0x76, 0xE0, 0x15, 0xB7, 0xF1, 0x53, 0x6F, 0x66, 0xA8, 0x5D, 0xCD, 0x6B, 0xEC, 0x3A, 0x92, 0x6D, 0x16, 0x8D, 0xF8, 0x49, 0xD0, 0x67, 0xF7, 0x37, 0x96, 0x02, 0xB2, 0x40, 0x2F, 0x8D, 0xA7, 0xC6, 0xFB, 0x44, 0x19, 0x3A, 0x48, 0x06, 0x00, 0x60, 0xEC, 0xA0, 0x45, 0x12, 0x08, 0x05, 0x64, 0xE0, 0x6B, 0xDE, 0xDC, 0xBF, 0x7A, 0xC4, 0x3C, 0xB5, 0x1F, 0x2D, 0x3F, 0x9F, 0x99, 0x1E, 0x6F, 0xA7, 0x14, 0x50, 0x73, 0xE1, 0xD7, 0x06, 0x52, 0x07, 0x09, 0x44, 0x01, 0xEE, 0x83, 0xFD, 0x7B, 0x88, 0xAB, 0xDE, 0x18, 0xCD, 0xE0, 0xB1, 0x5B, 0x3A, 0x17, 0x54, 0x1D, 0x6F, 0xA7, 0x50, 0x73, 0x0B, 0x4E, 0xDD, 0x29, 0x67, 0x0C, 0xE3, 0xB1, 0x7D, 0x5F, 0xDD, 0xDF, 0x72, 0x3F, 0x7D, 0x92, 0x92, 0x39, 0x02, 0x71, 0xEA, 0x19, 0x81, 0x0A, 0x60, 0xF7, 0xED, 0xBD, 0xE6, 0x38, 0xCA, 0xBE, 0x4A, 0xCD, 0x81, 0x5F, 0xE0, 0x2A, 0x1A, 0x0F, 0xC3, 0x81, 0xB5, 0x1E, 0x45, 0x8A, 0x05, 0x08, 0x17, 0x9D, 0xAB, 0x01, 0x35, 0x0B, 0x8D, 0x65, 0x42, 0x23, 0x7A, 0x06, 0xD7, 0x6A, 0xC0, 0x0C, 0x60, 0xDD, 0x96, 0x6D, 0x20, 0xD7, 0x60, 0x03, 0xDE, 0xF7, 0x7F, 0x53, 0x05, 0x8C, 0x71, 0x84, 0xA4, 0xD5, 0x1C, 0x5E, 0x48, 0x95, 0xCF, 0x6A, 0xBD, 0x03, 0x1E, 0xE3, 0xA9, 0xFE, 0x11, 0x6B, 0xAC, 0x6E, 0xD6, 0xD3, 0x0C, 0x3B, 0x30, 0x79, 0xA4, 0xE9, 0xC1, 0xBD, 0x8C, 0xC6, 0x8C, 0x3C, 0x73, 0xCE, 0xCF, 0xE6, 0xC4, 0x04, 0x3A, 0x81, 0x4D, 0x7F, 0xBE, 0x3E, 0x96, 0x5C, 0x80, 0x50, 0xC1, 0xF6, 0x7C, 0x79, 0x60, 0x19, 0x4D, 0x7F, 0x37, 0x4D, 0xD4, 0xBE, 0xB5, 0x7D, 0xF1, 0xD0, 0x4F, 0x70, 0x3E, 0xC7, 0x22, 0xAC, 0xFE, 0xF1, 0x11, 0x3A, 0x3C, 0xAA, 0x72, 0x0A, 0xC4, 0x1E, 0x37, 0x69, 0xDC, 0x3E, 0x37, 0xD9, 0x37, 0x16, 0xFF, 0xDB, 0x06, 0x22, 0x01, 0xBA, 0x75, 0xDD, 0x69, 0x34, 0x88, 0xB7, 0xD6, 0x9E, 0x6E, 0x66, 0xC1, 0x62, 0x25, 0x04, 0x0E, 0xB6, 0xEB, 0x64, 0x66, 0xE6, 0x6C, 0x25, 0xFB, 0x43, 0x86, 0xDD, 0x01, 0x96, 0xB8, 0x02, 0xA0, 0xCE, 0x2C, 0x18, 0x3B, 0x2D, 0x72, 0x64, 0x0F, 0x68, 0xB5, 0xFC, 0xB5, 0x79, 0xB2, 0x13, 0x41, 0x3F, 0xAD, 0xB5, 0x5E, 0xE4, 0x7D, 0x6D, 0xDD, 0x7A, 0x09, 0xA3, 0xF4, 0x06, 0x6C, 0x01, 0xCE, 0x13, 0x99, 0xE7, 0xD8, 0x37, 0x39, 0xDB, 0x27, 0xC0, 0xC2, 0xEA, 0xB3, 0xC5, 0x11, 0x07, 0xB4, 0x52, 0x98, 0xF8, 0x0E, 0xF0, 0x85, 0x0E, 0x36, 0x60, 0x83, 0xD5, 0x77, 0x28, 0x70, 0x19, 0x50, 0xC7, 0x6A, 0x89, 0x2F, 0x36, 0x13, 0x3B, 0xA6, 0xF7, 0xF8, 0x4A, 0xC5, 0x56, 0x32, 0x49, 0x1E, 0xBE, 0x1D, 0x81, 0x41, 0x0B, 0x24, 0x4C, 0xF6, 0x95, 0x73, 0xBD, 0xD6, 0x55, 0x61, 0x56, 0xCC, 0xAD, 0xD2, 0xE3, 0x7D, 0x6F, 0x1F, 0x2F, 0xE8, 0x7C, 0x4A, 0x78, 0x56, 0xF1, 0x49, 0xFA, 0x94, 0xD0, 0x05, 0x95, 0x47, 0xF7, 0x2B, 0x9C, 0x37, 0x53, 0x83, 0x9D, 0x9D, 0x66, 0x9E, 0x09, 0x63, 0xA4, 0x0A, 0x6C, 0x01, 0x64, 0x6C, 0x20, 0xCE, 0x7A, 0xAA, 0xF1, 0xEF, 0x53, 0x64, 0xD2, 0xC6, 0xA9, 0x69, 0xE3, 0x92, 0x5B, 0x80, 0xC7, 0xA8, 0x05, 0x26, 0x10, 0x06, 0xC0, 0xCD, 0x07, 0xE7, 0x18, 0x3E, 0x19, 0x50, 0x0E, 0x64, 0x02, 0xDD, 0x78, 0xC5, 0x8B, 0x46, 0x63, 0x1C, 0x8A, 0x61, 0x42, 0xBF, 0x8A, 0x0B, 0x3A, 0x7A, 0xCA, 0x56, 0x7B, 0x82, 0x3E, 0x8E, 0x2F, 0x9D, 0x5F, 0xB0, 0xA0, 0x58, 0xF8, 0x33, 0xA0, 0xF7, 0x42, 0x6A, 0x31, 0xE1, 0x64, 0x62, 0x3F, 0x3A, 0x4E, 0xC6, 0x4B, 0x77, 0x0F, 0xFF, 0x0D, 0xE1, 0xA8, 0x3D, 0x7E, 0x64, 0x4A, 0x8E, 0xB2, 0xB2, 0x8C, 0x33, 0xA3, 0x6E, 0x95, 0x50, 0x15, 0x60, 0x27, 0xA0, 0x0A, 0xD8, 0x55, 0xCE, 0x89, 0x44, 0x36, 0x94, 0x1A, 0xD0, 0xA1, 0x3F, 0xD5, 0x2B, 0x6B, 0x7C, 0xB7, 0xCB, 0x01, 0x16, 0xBF, 0x58, 0x01, 0xAC, 0x18, 0x91, 0x81, 0x26, 0x60, 0x05, 0xC4, 0x06, 0x8A, 0x95, 0x11, 0x0B, 0xD8, 0x0E, 0x68, 0xD3, 0x66, 0xFD, 0x1D, 0xA8, 0x5D, 0x1D, 0x5F, 0x45, 0x1D, 0x5E, 0x16, 0xC6, 0xB8, 0xD7, 0x46, 0xEC, 0x6E, 0x3B, 0x76, 0xA5, 0xAD, 0xF0, 0xB7, 0x4D, 0x1B, 0xB3, 0x7E, 0x4A, 0x19, 0x63, 0x9F, 0x8C, 0x46, 0x76, 0x53, 0xBC, 0xC5, 0x2D, 0x73, 0x2C, 0x69, 0x31, 0xB1, 0x94, 0x67, 0x14, 0x51, 0x06, 0x20, 0x1D, 0xE8, 0x35, 0x0F, 0x83, 0x0F, 0x27, 0xE4, 0x14, 0x80, 0xCB, 0x60, 0x01, 0xDA, 0x00, 0xF7, 0x69, 0xF7, 0x5F, 0x11, 0x62, 0x4C, 0x11, 0xC5, 0x1A, 0x4C, 0x68, 0xD4, 0x30, 0x3B, 0x91, 0x20, 0x55, 0x40, 0xEA, 0xED, 0xEA, 0x74, 0x01, 0x82, 0x28, 0x80, 0xAF, 0x50, 0xF4, 0x73, 0x09, 0x70, 0x52, 0xD5, 0x0A, 0x1E, 0x05, 0xDB, 0x10, 0xF5, 0x76, 0xCD, 0x4B, 0x34, 0xB2, 0x46, 0x7D, 0xB3, 0xC3, 0x66, 0x49, 0x74, 0x2C, 0xAC, 0x75, 0xDD, 0x9B, 0x57, 0x3F, 0x95, 0x3F, 0x6A, 0x2C, 0xB2, 0x9C, 0xF2, 0xB8, 0x9A, 0x3A, 0x92, 0x9A, 0x09, 0x11, 0x53, 0x68, 0xBE, 0x59, 0xA0, 0xCE, 0x90, 0xDA, 0x8C, 0x9B, 0x4B, 0x5D, 0xB4, 0x00, 0xD4, 0xBE, 0xC2, 0x20, 0x3D, 0x70, 0x19, 0xC4, 0x80, 0xC5, 0xA0, 0x36, 0x3F, 0x37, 0x27, 0x08, 0x11, 0x96, 0xA8, 0x4C, 0xBD, 0x12, 0x87, 0x16, 0x6B, 0x02, 0x67, 0xDC, 0x58, 0x8F, 0x9B, 0x57, 0x81, 0x30, 0xA0, 0xE3, 0x76, 0x86, 0xEF, 0x81, 0x04, 0x60, 0x1B, 0xF0, 0x1E, 0x2F, 0xB8, 0xD3, 0x66, 0x7B, 0xBA, 0xEE, 0x35, 0x86, 0x79, 0x25, 0x4E, 0x17, 0x1A, 0xD3, 0xE2, 0xB0, 0x31, 0xFA, 0xA2, 0x27, 0x84, 0x3B, 0x36, 0x73, 0xF9, 0x46, 0x56, 0x3D, 0x93, 0x53, 0x7F, 0xC5, 0x0E, 0x92, 0xA7, 0xAC, 0xFE, 0x44, 0x6B, 0xE7, 0x53, 0x18, 0x6C, 0xC6, 0x00, 0x90, 0x2D, 0x36, 0x31, 0x06, 0xB6, 0x02, 0x5A, 0x40, 0x32, 0x9A, 0xC4, 0x52, 0x5B, 0x19, 0xBB, 0x18, 0xEC, 0xA9, 0x94, 0xF9, 0x76, 0x20, 0xB8, 0x31, 0xB2, 0xB0, 0x8D, 0x7F, 0xA3, 0x19, 0x52, 0x2C, 0x2D, 0x63, 0x4E, 0x99, 0x2C, 0x80, 0xE5, 0x94, 0xDA, 0x30, 0xE4, 0x32, 0x80, 0x66, 0xD5, 0x1E, 0x6C, 0x60, 0xD5, 0x40, 0x80, 0xBD, 0x80, 0x12, 0xDA, 0x4C, 0xEE, 0x05, 0xCD, 0x0D, 0x8D, 0xB6, 0xCB, 0x46, 0xCF, 0x3E, 0x30, 0x76, 0xBD, 0x11, 0x38, 0x5C, 0x82, 0xA5, 0x1D, 0x36, 0xEB, 0xA7, 0xFA, 0x33, 0xE3, 0x57, 0xE8, 0xC1, 0x2C, 0x39, 0xD3, 0x53, 0xAD, 0x18, 0x57, 0xF1, 0xE1, 0x1E, 0xF3, 0xF4, 0x51, 0x01, 0xB0, 0x9A, 0xC1, 0x37, 0x70, 0x07, 0x72, 0x03, 0xBB, 0x61, 0x09, 0x4D, 0x80, 0x9F, 0x6C, 0x03, 0x3E, 0x83, 0x56, 0xA7, 0x84, 0x4A, 0x39, 0xD5, 0xF6, 0x59, 0x75, 0x20, 0x70, 0xF6, 0x61, 0xD2, 0x66, 0x02, 0xE6, 0xF9, 0x90, 0xE3, 0x93, 0x50, 0x05, 0x52, 0x00, 0xDC, 0x75, 0x31, 0xE6, 0x3F, 0xEC, 0x02, 0x6C, 0x01, 0x11, 0x40, 0x36, 0xEE, 0xE8, 0x2B, 0x69, 0x33, 0xC5, 0x6F, 0x7D, 0x7A, 0xD7, 0xE0, 0xBF, 0xED, 0xE8, 0xF9, 0x6B, 0xF6, 0x6C, 0xE6, 0x05, 0x37, 0xAE, 0xC9, 0x08, 0xF2, 0xD5, 0x75, 0x8B, 0x72, 0x7F, 0xE4, 0x9A, 0x94, 0xF2, 0x54, 0x7E, 0x8B, 0x93, 0x6B, 0xD2, 0x3F, 0x4F, 0x6D, 0xBA, 0xDB, 0xBF, 0x28, 0x7E, 0x5F, 0xC0, 0xEB, 0x52, 0xB8, 0x94, 0xE3, 0x3E, 0xEB, 0x41, 0x2E, 0xA0, 0xF6, 0x20, 0x7E, 0x29, 0xD2, 0x94, 0x73, 0x84, 0x1E, 0x30, 0x33, 0x6B, 0xB9, 0xB4, 0xFC, 0x8E, 0x6E, 0xD8, 0xF4, 0x2E, 0x99, 0x13, 0x7F, 0x36, 0x60, 0xCB, 0x81, 0x03, 0xEA, 0x8F, 0xB0, 0x49, 0xCE, 0xA7, 0x00, 0x72, 0xD1, 0x6A, 0xF6, 0xD9, 0x29, 0xB3, 0x69, 0x35, 0xF8, 0xC0, 0x4D, 0xD8, 0xE4, 0x03, 0x71, 0x60, 0xFD, 0xCC, 0x95, 0xB6, 0x15, 0x75, 0x63, 0x65, 0x27, 0xB2, 0xF2, 0xF1, 0x64, 0x44, 0xD2, 0xB9, 0xC5, 0x4C, 0x7E, 0xB9, 0x13, 0xF3, 0xC5, 0xE7, 0x61, 0xDF, 0xC5, 0x14, 0x0C, 0xA6, 0x14, 0x31, 0x36, 0x5C, 0x7D, 0x47, 0x66, 0x76, 0x52, 0x72, 0x94, 0xA3, 0x79, 0xD0, 0x03, 0xFF, 0x85, 0x10, 0xF5, 0xFC, 0x7B, 0xA5, 0x57, 0xA4, 0x02, 0x96, 0xB9, 0x3A, 0x7B, 0xD5, 0x9B, 0x76, 0xD3, 0x63, 0x5F, 0x05, 0xB2, 0x81, 0x18, 0xD8, 0x7E, 0xDA, 0x56, 0x0B, 0x90, 0x31, 0xAF, 0x14, 0xAD, 0xE6, 0x88, 0xC5, 0xAE, 0x84, 0xF2, 0xA1, 0xA3, 0x70, 0x31, 0x96, 0x61, 0x9F, 0xEC, 0x91, 0x74, 0x15, 0xFF, 0x79, 0xAB, 0xF7, 0x6A, 0xB9, 0xAB, 0xA5, 0x84, 0x56, 0xBB, 0x9A, 0x31, 0xC2, 0xCF, 0x7E, 0xAB, 0x6B, 0x89, 0x51, 0x0F, 0x0E, 0x0E, 0xC2, 0xA3, 0xE8, 0x41, 0xEF, 0xEA, 0x5D, 0x1A, 0x54, 0x1B, 0xA0, 0x4B, 0x23, 0xED, 0xD1, 0x80, 0x8D, 0x41, 0x0F, 0x1C, 0xA8, 0x7D, 0x3A, 0x41, 0x8D, 0x81, 0xA8, 0xAC, 0x33, 0x7B, 0xBF, 0xC9, 0x7D, 0x8D, 0x32, 0x07, 0xBA, 0x67, 0x23, 0xA9, 0x5B, 0x47, 0x3D, 0x62, 0x90, 0x80, 0x1B, 0xA0, 0x0B, 0xD8, 0x09, 0x68, 0xB0, 0x2E, 0x9F, 0x56, 0x0B, 0x6C, 0x24, 0x69, 0x7F, 0x3D, 0xB7, 0x13, 0xFF, 0x0A, 0x6F, 0x6C, 0x1A, 0x79, 0x08, 0x84, 0xF5, 0xA2, 0xA7, 0x34, 0x67, 0xC3, 0x7D, 0xA5, 0x18, 0x6B, 0xFB, 0x9D, 0xA1, 0xF8, 0xA8, 0x27, 0x75, 0xB9, 0x8E, 0x58, 0x22, 0x4B, 0x93, 0x80, 0x7D, 0x49, 0x68, 0xFA, 0xF9, 0xF6, 0x31, 0x50, 0x22, 0x01, 0xA1, 0xB7, 0x9C, 0x8E, 0xF1, 0x0D, 0xC8, 0x1A, 0x6C, 0x60, 0x27, 0x60, 0x97, 0x56, 0x5C, 0x32, 0xF7, 0x77, 0x9D, 0x51, 0xB2, 0x67, 0x20, 0xE9, 0x06, 0x98, 0xC6, 0xBA, 0x15, 0xF0, 0xBC, 0x9B, 0x8C, 0xB8, 0x0F, 0x36, 0xA0, 0x0A, 0xD0, 0x77, 0x92, 0x7D, 0x77, 0xAF, 0x8E, 0x63, 0xB5, 0x44, 0xFC, 0x3E, 0x27, 0x56, 0xE0, 0xFD, 0x69, 0xF8, 0xF5, 0xB4, 0xD4, 0xD6, 0x5D, 0x48, 0xD5, 0x17, 0x9B, 0x02, 0x98, 0x84, 0xAB, 0xD4, 0x9C, 0x7E, 0xDB, 0xA7, 0xEE, 0x87, 0x92, 0xC8, 0x74, 0xC0, 0xAE, 0x31, 0xD0, 0x06, 0xF6, 0xBA, 0x7B, 0x50, 0x76, 0x02, 0xCA, 0x05, 0x6D, 0x0F, 0x94, 0xE6, 0x02, 0xAC, 0x7F, 0x65, 0x43, 0x72, 0xA0, 0x7B, 0x10, 0x03, 0x01, 0x68, 0xF4, 0x64, 0xE9, 0x62, 0x5C, 0x0E, 0x58, 0x3F, 0x5D, 0x53, 0xD7, 0x02, 0x82, 0xA1, 0x15, 0x07, 0x3C, 0xC7, 0xA7, 0x36, 0x88, 0x1A, 0x38, 0x60, 0x09, 0x9C, 0x2C, 0xE5, 0xA6, 0x87, 0x0D, 0x28, 0xA7, 0xD5, 0x6A, 0x2A, 0xB6, 0x29, 0x18, 0x8C, 0x3D, 0x65, 0x77, 0x4D, 0xB3, 0x7C, 0x87, 0x3B, 0x54, 0x1D, 0xCD, 0xE4, 0x04, 0x5E, 0xEF, 0x89, 0x4B, 0x65, 0xBD, 0x91, 0x63, 0x59, 0x77, 0x4F, 0x0C, 0x6D, 0xD6, 0xB1, 0x01, 0x27, 0xB9, 0x88, 0xD3, 0x4F, 0x6F, 0x1B, 0x66, 0xDE, 0x63, 0x4D, 0x12, 0x58, 0x71, 0xB7, 0x94, 0xE4, 0xDF, 0x25, 0x1A, 0xC8, 0x1C, 0x4C, 0xE0, 0x99, 0xA1, 0x2B, 0x96, 0x35, 0x16, 0x17, 0x2D, 0x29, 0x8E, 0x99, 0xB1, 0xD3, 0x02, 0x52, 0xC7, 0x16, 0x0E, 0x50, 0xC1, 0xCD, 0x12, 0x68, 0x79, 0x5A, 0x9D, 0x38, 0x20, 0x01, 0xAC, 0x05, 0x6C, 0x65, 0x26, 0x33, 0xAD, 0xD6, 0x93, 0x19, 0x65, 0x9F, 0xBB, 0x3B, 0xA7, 0x5B, 0xCD, 0xAA, 0x46, 0x1E, 0xD1, 0x1A, 0x45, 0xD7, 0xB5, 0xA7, 0x79, 0x1E, 0x90, 0x41, 0x99, 0xAB, 0x27, 0x27, 0x92, 0x2B, 0x51, 0xD1, 0x2D, 0xC4, 0xEC, 0xDF, 0x41, 0xF4, 0xAF, 0xFE, 0xD2, 0x4F, 0x4F, 0xA2, 0xA6, 0xEB, 0x27, 0x1F, 0x49, 0xE1, 0x02, 0x16, 0x13, 0x92, 0x37, 0x4C, 0xE1, 0x77, 0x43, 0xCA, 0xCD, 0x66, 0x21, 0x31, 0x0F, 0x59, 0x4B, 0x77, 0x52, 0x2A, 0xD7, 0xCF, 0x22, 0x72, 0x34, 0x3A, 0x82, 0x0E, 0xC5, 0x06, 0x6A, 0x56, 0x30, 0x36, 0x99, 0x5E, 0x1B, 0xB0, 0x35, 0xD8, 0x80, 0x34, 0xB0, 0xE6, 0xCD, 0xD6, 0xF9, 0xD4, 0x40, 0xD1, 0x68, 0xCD, 0x66, 0xE1, 0x1B, 0x69, 0x10, 0x92, 0x57, 0x4E, 0x64, 0x32, 0x0B, 0x57, 0x04, 0x9E, 0xAA, 0xDA, 0x1F, 0x52, 0xBF, 0xDB, 0xA7, 0xBD, 0xF2, 0x43, 0x5C, 0xDA, 0xEB, 0xC3, 0x11, 0xCA, 0x2B, 0xE2, 0x78, 0x3E, 0xD9, 0xF7, 0x9F, 0xE9, 0xC9, 0xEC, 0xE9, 0x43, 0xCD, 0x2D, 0x36, 0xEF, 0xC8, 0x59, 0x57, 0x92, 0x3E, 0x47, 0x67, 0x22, 0x29, 0x20, 0x09, 0xA8, 0x00, 0xD2, 0x40, 0xF5, 0x6F, 0xF5, 0x67, 0xC7, 0x63, 0x66, 0x2C, 0xE9, 0xE9, 0x47, 0xBD, 0xEB, 0xBE, 0xB9, 0xAF, 0x05, 0xF8, 0x9C, 0xF2, 0xF6, 0x02, 0x6C, 0xE0, 0x7B, 0xE0, 0x83, 0x02, 0x22, 0x01, 0x5E, 0xA8, 0x25, 0x69, 0xB4, 0x3D, 0xC3, 0xC0, 0xBE, 0x2E, 0x79, 0x51, 0x93, 0xC3, 0xD7, 0x39, 0xEB, 0x26, 0xBC, 0xB7, 0x29, 0x9B, 0xA9, 0x58, 0xF8, 0x3D, 0x97, 0xB3, 0xDD, 0xCA, 0xA5, 0x42, 0xE7, 0xF9, 0x8B, 0x38, 0xED, 0x3C, 0x77, 0x44, 0xD7, 0x5F, 0x4E, 0xF7, 0x3A, 0xAB, 0xC4, 0xE2, 0xDA, 0x6A, 0xB4, 0xC1, 0xED, 0x28, 0x6B, 0x01, 0xD8, 0x43, 0xCB, 0xE6, 0xEF, 0xB9, 0xA7, 0xC2, 0x4A, 0x17, 0x90, 0x83, 0xD3, 0x28, 0x8D, 0xA1, 0x01, 0x2A, 0xCD, 0xB1, 0xC1, 0xC3, 0xF8, 0x5D, 0x29, 0xCA, 0x9F, 0x9B, 0x5F, 0x97, 0xE9, 0xAC, 0x40, 0x09, 0xAF, 0xA6, 0x40, 0x15, 0xD0, 0x06, 0x94, 0x03, 0xA9, 0x40, 0x0C, 0x4E, 0xBB, 0x80, 0x63, 0x34, 0xC1, 0xF4, 0x6C, 0xC5, 0x1E, 0xA0, 0x8A, 0xEE, 0x14, 0xA3, 0x3B, 0xB4, 0xAC, 0xA6, 0x02, 0x43, 0x26, 0x8B, 0xDF, 0xA6, 0x42, 0xD7, 0x2F, 0xEF, 0x6D, 0xC8, 0xD3, 0xF5, 0x4D, 0xFB, 0x48, 0x91, 0xD2, 0x35, 0x06, 0x30, 0xE6, 0x6E, 0xC2, 0xAA, 0xB1, 0x2B, 0xE6, 0x6E, 0x0A, 0xC8, 0x02, 0x2C, 0x80, 0x1C, 0xAC, 0x23, 0x0D, 0x4D, 0x95, 0x1E, 0x20, 0x14, 0xB0, 0xBA, 0x8F, 0x67, 0x8B, 0x35, 0x05, 0x3E, 0xEB, 0x17, 0xC7, 0xFB, 0xE6, 0x9D, 0x9F, 0x5A, 0x81, 0x8F, 0xCC, 0x0E, 0x9D, 0x68, 0x3B, 0x01, 0xD7, 0x81, 0x03, 0xA6, 0x80, 0x38, 0xB0, 0xE5, 0xFE, 0xD4, 0x8B, 0x56, 0xD3, 0x09, 0x66, 0x21, 0x86, 0xB7, 0x36, 0xDC, 0xDB, 0x5E, 0x93, 0x07, 0x49, 0x89, 0xCD, 0x44, 0x72, 0x4C, 0x69, 0xE3, 0xBF, 0xA5, 0xDF, 0x9D, 0xB8, 0xE4, 0x9A, 0xA0, 0x47, 0x80, 0x28, 0x61, 0x19, 0x9E, 0xA6, 0x99, 0x25, 0xBB, 0x9B, 0xBA, 0x79, 0xDC, 0xDE, 0xCE, 0xB1, 0x52, 0xDE, 0x80, 0x4A, 0x50, 0x73, 0x95, 0x75, 0xBF, 0x1C, 0x56, 0x57, 0x66, 0x86, 0x15, 0xE0, 0x5C, 0xCE, 0x18, 0xA4, 0xE1, 0x46, 0xC8, 0xAE, 0x17, 0xEC, 0x45, 0x73, 0x14, 0xEF, 0x74, 0x04, 0xDE, 0x94, 0x19, 0xCD, 0x40, 0x51, 0xC2, 0x62, 0x50, 0x1B, 0xE8, 0x17, 0x6B, 0x30, 0xB3, 0x76, 0x35, 0x70, 0x4A, 0xDB, 0xA1, 0x41, 0x8A, 0x04, 0xDC, 0xFC, 0xFC, 0xC4, 0x8A, 0x5B, 0x9C, 0xC2, 0x4E, 0x6E, 0x3A, 0x09, 0xED, 0xBC, 0x55, 0xC9, 0x14, 0xE4, 0xA3, 0x57, 0xDE, 0x09, 0xB6, 0xBF, 0x47, 0x5C, 0xB9, 0xFA, 0xF2, 0xFE, 0x02, 0xD5, 0xAC, 0x8B, 0x0B, 0x18, 0x21, 0x26, 0xDA, 0xE7, 0xF5, 0x74, 0xBA, 0x5C, 0x77, 0x9C, 0x39, 0xD6, 0x3C, 0xEC, 0x7B, 0x74, 0x6D, 0x79, 0x9A, 0xC2, 0x16, 0x1F, 0x5E, 0x5E, 0x5C, 0x3D, 0xB9, 0x18, 0xB1, 0x7E, 0xF7, 0x21, 0x3B, 0x83, 0x65, 0xAD, 0x3B, 0xB8, 0xB4, 0x17, 0xC0, 0x04, 0x5E, 0xF1, 0x81, 0xDE, 0x9B, 0x40, 0x26, 0xE0, 0x83, 0x34, 0x0A, 0x6E, 0xD1, 0x6A, 0x0E, 0x27, 0xD0, 0xF2, 0xBF, 0xFC, 0x4C, 0x99, 0x13, 0x82, 0x51, 0x6E, 0x10, 0x53, 0x24, 0x52, 0xD3, 0xA9, 0x2F, 0x3E, 0x4C, 0x97, 0xDE, 0xDA, 0xEF, 0x58, 0xBB, 0x0F, 0xAE, 0x5B, 0x4F, 0xDF, 0xC0, 0x65, 0x3C, 0x17, 0xDE, 0x85, 0x62, 0xCE, 0x46, 0x42, 0xCC, 0x91, 0x71, 0x9A, 0xF2, 0x1A, 0x48, 0xEA, 0xBF, 0x13, 0x72, 0x1C, 0xE3, 0x89, 0xDC, 0x27, 0xBF, 0xAA, 0x79, 0xD8, 0xC7, 0xCB, 0x32, 0x11, 0x83, 0x9C, 0xA9, 0x79, 0x05, 0xE1, 0x12, 0x96, 0xA1, 0x5A, 0x19, 0x85, 0xC2, 0x74, 0x1D, 0x37, 0x67, 0x0B, 0x75, 0xBF, 0x06, 0x06, 0x30, 0x83, 0x37, 0x0D, 0xB0, 0xBC, 0x43, 0x0C, 0x56, 0xB4, 0x5A, 0xC0, 0x94, 0x4B, 0x70, 0xAD, 0x77, 0x99, 0xF6, 0xFE, 0xF0, 0x14, 0x31, 0x53, 0xB9, 0x23, 0xC6, 0x04, 0x09, 0x1B, 0xC6, 0x49, 0xB5, 0xA2, 0xF1, 0xA8, 0x10, 0xC6, 0xFA, 0xD5, 0xD9, 0x10, 0x8F, 0xF3, 0x04, 0xE0, 0xC5, 0xB8, 0xA6, 0x50, 0xF1, 0x34, 0xE1, 0xAF, 0xDB, 0xAE, 0xC0, 0x29, 0x5C, 0x3D, 0x85, 0x7B, 0x35, 0x5B, 0x83, 0x3D, 0x09, 0x16, 0xD6, 0xC0, 0x76, 0xC0, 0xE5, 0xD4, 0xA0, 0x9D, 0x1A, 0x48, 0xF1, 0x23, 0x8F, 0xC6, 0x54, 0x73, 0xE7, 0x7E, 0x3A, 0x31, 0x3C, 0xDD, 0x40, 0xC7, 0x04, 0xEF, 0x64, 0x36, 0xD9, 0x18, 0x34, 0xB0, 0x98, 0x0F, 0xAC, 0x40, 0x24, 0x50, 0xF3, 0x4A, 0x1C, 0xA3, 0x25, 0xA6, 0x84, 0xD1, 0xD1, 0x41, 0x8F, 0x11, 0x7B, 0xF2, 0xC1, 0xBC, 0xBD, 0x1B, 0x5F, 0x7A, 0xE5, 0x74, 0x56, 0xBA, 0x65, 0xD5, 0xEC, 0x89, 0x14, 0x34, 0xC7, 0x7D, 0x30, 0xE5, 0x58, 0xC6, 0x47, 0x48, 0xBF, 0xE3, 0xE4, 0xBD, 0x33, 0x50, 0xB6, 0x2E, 0x25, 0xD5, 0x75, 0xEA, 0x06, 0xED, 0xB4, 0xBC, 0x1B, 0x13, 0x3E, 0xB5, 0x8F, 0xEE, 0x40, 0xE4, 0x0F, 0x76, 0x84, 0x71, 0x83, 0x61, 0xA8, 0x9E, 0x04, 0xDD, 0x9F, 0x36, 0x91, 0xAF, 0x81, 0x8E, 0xF7, 0x1A, 0xAB, 0x28, 0x7A, 0x59, 0x34, 0x90, 0xE3, 0x4E, 0xDA, 0x03, 0x19, 0xA8, 0x0C, 0xF6, 0xC0, 0x00, 0xCB, 0xC9, 0x2B, 0x55, 0x1A, 0x8D, 0x91, 0x02, 0xFC, 0xAF, 0xF3, 0x72, 0xE0, 0xF6, 0x67, 0x4A, 0xFC, 0xAD, 0xC2, 0x11, 0x57, 0x59, 0x09, 0x4F, 0x4A, 0xC0, 0x4A, 0xFE, 0x64, 0xC8, 0xC7, 0xFE, 0xD5, 0x5B, 0xF3, 0x50, 0xA9, 0x08, 0x38, 0x5D, 0x71, 0x15, 0x9D, 0x75, 0x21, 0x6D, 0x8C, 0x16, 0xBF, 0x26, 0x9F, 0xFB, 0xE4, 0x04, 0x34, 0xF3, 0xC5, 0x36, 0x7B, 0x01, 0x32, 0x68, 0x0C, 0xA8, 0x03, 0x21, 0x40, 0xAD, 0x79, 0x45, 0x66, 0xB3, 0x91, 0x5F, 0x37, 0xB4, 0x1A, 0x89, 0x31, 0x9F, 0x16, 0x4B, 0x13, 0x1F, 0xF1, 0x7D, 0x94, 0xA3, 0x7A, 0x4C, 0x18, 0x0D, 0x13, 0xEE, 0x81, 0x19, 0x10, 0x0E, 0x94, 0xC3, 0xA0, 0x5B, 0x00, 0x5B, 0x80, 0x37, 0x50, 0x49, 0xA3, 0x35, 0xCD, 0x34, 0xBD, 0xDF, 0x74, 0x12, 0x14, 0x47, 0x0D, 0x26, 0x0D, 0x7E, 0xF5, 0x71, 0xE4, 0x56, 0xD4, 0xF4, 0x3F, 0x73, 0xF8, 0xB9, 0xE9, 0x50, 0x03, 0xFA, 0xF4, 0x24, 0xA8, 0x31, 0xCF, 0x9C, 0x8B, 0xDA, 0xE7, 0x40, 0x94, 0xBF, 0x26, 0x5C, 0x79, 0x62, 0xDC, 0xDB, 0xC7, 0xAC, 0x6C, 0x4E, 0x16, 0xB7, 0xEC, 0x20, 0xCF, 0xA9, 0x1A, 0x3F, 0xC5, 0x47, 0x64, 0xBA, 0xE3, 0x53, 0x03, 0xD6, 0x47, 0x41, 0xF1, 0x74, 0xA7, 0x32, 0x19, 0xA7, 0xEB, 0x6C, 0x3C, 0x3E, 0xDE, 0xF9, 0xB0, 0x71, 0x2E, 0x8E, 0x48, 0x5B, 0x8C, 0x38, 0x58, 0x14, 0x8C, 0x1C, 0x88, 0x4C, 0x7D, 0xD0, 0x02, 0xBC, 0x81, 0x92, 0xF5, 0x9D, 0x5A, 0x57, 0x02, 0x66, 0x40, 0x0C, 0xDA, 0x60, 0x33, 0xE5, 0x89, 0xC9, 0x05, 0x09, 0xD3, 0x21, 0x18, 0x61, 0x73, 0x11, 0xD3, 0x3D, 0x6A, 0xB7, 0x13, 0xFB, 0xD8, 0xB1, 0x4F, 0xB5, 0x34, 0x33, 0x95, 0xCF, 0x2E, 0xBA, 0x8F, 0x07, 0xAD, 0x8B, 0x15, 0x12, 0x79, 0x0B, 0x06, 0x86, 0x3C, 0xD9, 0x09, 0x3E, 0x97, 0x3C, 0x9D, 0x37, 0xED, 0x56, 0xF9, 0xA6, 0xFF, 0x70, 0x1D, 0xED, 0x6E, 0x1E, 0x60, 0x80, 0xB5, 0xEE, 0x56, 0xA6, 0x0C, 0x43, 0xC7, 0x4C, 0xEE, 0x4C, 0xEE, 0x82, 0x13, 0x85, 0xF8, 0xD0, 0x30, 0xB6, 0xC9, 0x71, 0x27, 0x87, 0x8D, 0xF8, 0xDD, 0x84, 0x50, 0x96, 0x03, 0xB1, 0x00, 0x6A, 0xA1, 0x2D, 0xC2, 0x81, 0xBD, 0x06, 0x0E, 0xA8, 0x02, 0xD9, 0x34, 0xDA, 0x46, 0x97, 0x04, 0xDF, 0x48, 0x0C, 0xD7, 0x9A, 0x54, 0x1B, 0xC5, 0x62, 0xE2, 0x09, 0x0F, 0xFE, 0x2E, 0xAC, 0xEA, 0x86, 0x88, 0x68, 0x56, 0x7E, 0xB3, 0x73, 0x3F, 0x95, 0x52, 0x1E, 0xBF, 0x52, 0x7C, 0xD9, 0xA7, 0x78, 0xA7, 0x37, 0x10, 0x54, 0x59, 0xDC, 0xBF, 0x80, 0x13, 0xB2, 0xEA, 0x27, 0x95, 0x04, 0x66, 0xE2, 0x92, 0xD6, 0x02, 0x54, 0xF0, 0x48, 0x77, 0xCF, 0x47, 0x59, 0x80, 0xEA, 0xC0, 0x7F, 0xC5, 0xEC, 0xFB, 0x48, 0x68, 0xC6, 0x9C, 0xAD, 0x4A, 0xE7, 0xEB, 0xF6, 0x2F, 0x2E, 0x27, 0x03, 0x2C, 0x85, 0x9C, 0x8F, 0x58, 0xD9, 0x12, 0xD0, 0x02, 0xAC, 0x01, 0xD7, 0x81, 0x03, 0x21, 0x40, 0xEA, 0x2C, 0x7E, 0x41, 0xA3, 0x8D, 0xB3, 0x76, 0x37, 0x82, 0x7C, 0x5B, 0x27, 0xF8, 0xAD, 0x93, 0x01, 0x50, 0x93, 0xB8, 0x90, 0x23, 0xFC, 0x69, 0x27, 0x27, 0x07, 0x35, 0xFE, 0xFF, 0x58, 0xD2, 0x34, 0x18, 0xD3, 0x5E, 0xB3, 0x85, 0x07, 0xE0, 0xBF, 0x48, 0x95, 0xE4, 0x89, 0x70, 0x6F, 0x76, 0xF6, 0x63, 0xF6, 0xC5, 0x9C, 0x15, 0x62, 0x70, 0x36, 0x87, 0x45, 0x13, 0x02, 0x32, 0xE0, 0xF9, 0x99, 0x5B, 0xB0, 0xC2, 0x68, 0xB0, 0x08, 0xC5, 0x61, 0xD5, 0x4F, 0x51, 0x9D, 0xEC, 0x19, 0x5B, 0x3D, 0xA3, 0x69, 0x46, 0x4C, 0x4D, 0xBD, 0x86, 0x33, 0xEA, 0x92, 0x40, 0x34, 0x90, 0x35, 0x08, 0x20, 0xEA, 0x06, 0xDB, 0xA9, 0xB9, 0xD3, 0x68, 0x3A, 0x7A, 0xB7, 0x0C, 0x16, 0x30, 0x46, 0x11, 0x93, 0xE0, 0xB3, 0xA7, 0xB5, 0x66, 0xE2, 0x0A, 0x65, 0x89, 0x96, 0x44, 0xDD, 0x77, 0x1E, 0x0C, 0x88, 0x04, 0xE5, 0x2B, 0x6D, 0x79, 0xF3, 0xC4, 0xDE, 0xFB, 0xCA, 0x57, 0xDE, 0xFE, 0x53, 0x11, 0x89, 0xA3, 0x45, 0xE2, 0x71, 0xF7, 0xA4, 0xC8, 0xC1, 0xE9, 0x12, 0x45, 0x1F, 0x24, 0xEB, 0x0B, 0x02, 0x9F, 0xB6, 0x00, 0xB2, 0x81, 0xFA, 0xE0, 0x6C, 0x7B, 0x24, 0x73, 0xF6, 0xEB, 0x23, 0x86, 0xAB, 0xDC, 0xAD, 0xA9, 0x5F, 0x59, 0xF7, 0x79, 0x4B, 0x0C, 0xE8, 0x89, 0x8D, 0x49, 0x0D, 0x1A, 0xD8, 0xCE, 0x2B, 0x05, 0x90, 0x0D, 0x54, 0xCC, 0xF9, 0xC5, 0x68, 0xB5, 0x49, 0x40, 0x28, 0x19, 0xAB, 0x51, 0x4A, 0x15, 0xE3, 0xCF, 0x32, 0x70, 0x85, 0xF2, 0x82, 0x36, 0xD9, 0xCE, 0xEF, 0xBB, 0x6B, 0x25, 0x9D, 0x6A, 0x8F, 0xD5, 0x3E, 0x20, 0x02, 0xF9, 0x6B, 0x51, 0xEF, 0xE3, 0xFE, 0xB3, 0x73, 0xE0, 0x6A, 0xD6, 0x9F, 0x07, 0xA5, 0xCE, 0x98, 0x45, 0x7F, 0x09, 0xED, 0xF8, 0x1A, 0xE3, 0x8D, 0xD5, 0x9C, 0xCE, 0x47, 0x05, 0xD6, 0xE3, 0xB9, 0x95, 0x00, 0x98, 0x76, 0xBF, 0x4E, 0x82, 0x9B, 0x70, 0xC1, 0xA4, 0xDF, 0x9A, 0xB3, 0x76, 0xC2, 0xF6, 0x09, 0x14, 0x4F, 0x6F, 0x31, 0x15, 0xA6, 0x06, 0xD4, 0xBE, 0x11, 0x01, 0xD8, 0x02, 0x64, 0xA0, 0xC6, 0xAA, 0x33, 0x5A, 0x0D, 0xC1, 0x02, 0x11, 0x86, 0x58, 0x58, 0x3E, 0x1A, 0x38, 0x45, 0xE5, 0x78, 0xD3, 0x98, 0xDF, 0xD9, 0x8E, 0xDC, 0x5A, 0xCF, 0x3B, 0x6D, 0x19, 0x64, 0xDA, 0xB2, 0x8D, 0xD5, 0xB0, 0xF9, 0xC3, 0x40, 0x76, 0xCA, 0x81, 0x71, 0xEE, 0xBF, 0x1C, 0x61, 0xBC, 0x6F, 0xFB, 0xF1, 0xC0, 0x76, 0x01, 0x96, 0x00, 0x0D, 0xD4, 0x0C, 0x4C, 0x35, 0x90, 0x02, 0xDC, 0x95, 0x2D, 0x42, 0x71, 0x26, 0xFC, 0xC0, 0xD5, 0x19, 0xD7, 0x8A, 0x1B, 0x04, 0xDB, 0x7A, 0x4E, 0x4E, 0xD1, 0x06, 0x38, 0x0E, 0x7D, 0x0C, 0x2B, 0x83, 0xB0, 0x81, 0x3F, 0x8D, 0x4A, 0x37, 0xB0, 0x1D, 0x90, 0xA2, 0x1B, 0x8E, 0x56, 0x0B, 0x48, 0xB4, 0xAF, 0xFE, 0x6B, 0xF4, 0xA7, 0xC1, 0x79, 0x26, 0x47, 0x45, 0x72, 0x35, 0x86, 0x8A, 0x61, 0x70, 0x38, 0xBC, 0xDF, 0xAD, 0xD1, 0x94, 0x00, 0x78, 0xD2, 0x96, 0xFD, 0x27, 0x77, 0xD8, 0x8C, 0x8C, 0x52, 0x0E, 0x10, 0x26, 0x46, 0xA3, 0x95, 0xBB, 0xD3, 0xCF, 0x5E, 0xF7, 0xAD, 0x32, 0x12, 0x70, 0x03, 0x34, 0xEE, 0x50, 0xDF, 0x7A, 0xF4, 0xB1, 0x8A, 0xC8, 0x9F, 0xAE, 0x56, 0x0C, 0x8E, 0x83, 0xA9, 0x8F, 0x5B, 0x23, 0x18, 0x62, 0x9E, 0x89, 0x5A, 0xD7, 0x7E, 0xB1, 0xCE, 0xA5, 0x49, 0x36, 0x90, 0x3A, 0x10, 0xC0, 0xF3, 0xFE, 0x6F, 0x4B, 0x80, 0xCD, 0xD9, 0xAB, 0xB4, 0xDA, 0x39, 0xD1, 0x7E, 0x56, 0xAB, 0xE9, 0x5D, 0xB6, 0x35, 0xB1, 0xC6, 0xCE, 0xA7, 0xD2, 0xF1, 0xDC, 0xDA, 0x44, 0xE0, 0x57, 0x5D, 0xAA, 0x13, 0x11, 0x4F, 0xD7, 0xF1, 0x30, 0x26, 0x5D, 0x51, 0xA4, 0x23, 0x7E, 0x2D, 0xC5, 0x11, 0xAC, 0x3B, 0x69, 0x9F, 0xF0, 0xBA, 0x5F, 0x0E, 0xD9, 0x75, 0x24, 0x1C, 0xEF, 0x44, 0x65, 0xA6, 0x77, 0xEF, 0xC7, 0x4E, 0x5B, 0x80, 0xBB, 0xD1, 0x1C, 0x35, 0x78, 0x76, 0xCE, 0x60, 0x61, 0xB6, 0x4D, 0xCD, 0x8A, 0x3F, 0xFE, 0x4A, 0x63, 0x9E, 0x0C, 0xAB, 0x05, 0x17, 0x00, 0xAD, 0x51, 0x80, 0x9F, 0x7A, 0xDD, 0xE9, 0x0B, 0x26, 0x40, 0x0E, 0x2A, 0x26, 0x7D, 0xC1, 0x68, 0xB5, 0xA2, 0xDE, 0x08, 0xAA, 0xCD, 0xD6, 0xC6, 0x3E, 0xBE, 0x37, 0x86, 0xF8, 0xD4, 0x64, 0x77, 0x14, 0x73, 0xD4, 0x26, 0x2B, 0xB1, 0x28, 0x11, 0x79, 0x67, 0xAA, 0xF5, 0xE3, 0xF6, 0x66, 0xD7, 0x84, 0x93, 0xDF, 0xE7, 0xBF, 0x66, 0x33, 0x36, 0x40, 0x44, 0xF6, 0xE7, 0x64, 0xD3, 0xAB, 0x31, 0x17, 0x7B, 0x5D, 0xC7, 0x59, 0xE9, 0x53, 0x01, 0x13, 0xC0, 0x0B, 0xA0, 0xF2, 0x17, 0x8B, 0x24, 0xD2, 0x78, 0x90, 0xE3, 0xEE, 0x7C, 0x6D, 0xE0, 0xFC, 0x14, 0x63, 0xC9, 0x3C, 0x8D, 0x07, 0xAC, 0xC6, 0x83, 0x6B, 0x80, 0x35, 0x10, 0x6B, 0xA0, 0x80, 0xC7, 0xA0, 0x80, 0x54, 0x0A, 0x39, 0xD3, 0x68, 0x0D, 0x69, 0xBF, 0xDA, 0x9F, 0xD1, 0x6C, 0xFF, 0xEA, 0x19, 0x03, 0x35, 0xA0, 0xC8, 0x85, 0x6B, 0xF8, 0x73, 0x73, 0x7F, 0xB0, 0x8C, 0xE3, 0x10, 0x3A, 0x92, 0x3A, 0xFB, 0x28, 0x0B, 0x2A, 0x45, 0x86, 0x00, 0x9F, 0x25, 0xC4, 0x4E, 0xA4, 0x3B, 0xF7, 0x58, 0x92, 0x5E, 0xB5, 0x4B, 0x3D, 0x82, 0x0D, 0xD8, 0x27, 0x93, 0x00, 0x53, 0xE9, 0x0A, 0x8F, 0x1E, 0x39, 0xC5, 0xF9, 0x24, 0x1B, 0xD0, 0x38, 0xA9, 0xF4, 0x3F, 0x35, 0x85, 0x9E, 0x7B, 0x19, 0x80, 0x1B, 0xD5, 0x25, 0x43, 0xED, 0x30, 0x9A, 0xA1, 0x22, 0x1C, 0xE3, 0x2E, 0x81, 0x9A, 0xE1, 0x27, 0x0A, 0xD8, 0x06, 0x5C, 0x07, 0xF5, 0xC8, 0xE7, 0x26, 0x73, 0x3F, 0xC6, 0x68, 0x47, 0x6D, 0x7D, 0xFF, 0x95, 0x43, 0xC8, 0x1B, 0xED, 0x4B, 0x84, 0xCA, 0x43, 0x93, 0xDA, 0x48, 0x0D, 0x4B, 0xC5, 0x80, 0x13, 0xE5, 0x48, 0xBB, 0x03, 0x2C, 0xF4, 0x7C, 0xED, 0xB1, 0xB6, 0x50, 0x95, 0x83, 0xB7, 0x4A, 0xF9, 0x15, 0xC5, 0xCD, 0x2A, 0x4C, 0xB5, 0x1D, 0x7E, 0xDD, 0xA6, 0x7E, 0xE3, 0xC1, 0x66, 0x45, 0xC7, 0x58, 0xCB, 0x05, 0xD8, 0x6B, 0xE0, 0xF7, 0xA7, 0xF0, 0xE3, 0xF1, 0xA5, 0x86, 0xD3, 0x4F, 0x2E, 0x80, 0xD2, 0xDF, 0x53, 0x39, 0xA6, 0x32, 0xE3, 0x4E, 0x4F, 0x6E, 0x5B, 0x4E, 0xE9, 0xB2, 0x3B, 0xD0, 0x79, 0xA3, 0xE4, 0xA9, 0xD7, 0xDE, 0x80, 0x4F, 0xCA, 0xE0, 0x19, 0x69, 0x7B, 0xC3, 0x59, 0xEF, 0xFE, 0xD5, 0x98, 0x95, 0xFA, 0x64, 0xA0, 0x26, 0x46, 0xC3, 0x76, 0x2C, 0x71, 0xCB, 0xE1, 0xAD, 0xA9, 0x9C, 0xBA, 0xB5, 0xA0, 0x8B, 0x03, 0x56, 0xEB, 0x2B, 0x69, 0x19, 0x16, 0xA1, 0xF3, 0x1E, 0x76, 0x92, 0xE0, 0x86, 0x36, 0xB1, 0xAA, 0x2B, 0x31, 0x79, 0x4E, 0x1F, 0x7D, 0xD4, 0x57, 0x6B, 0x03, 0x6A, 0x00, 0x97, 0xB8, 0xB6, 0xBB, 0xD6, 0xC5, 0x37, 0x10, 0x0D, 0xD4, 0xBC, 0xE2, 0x7D, 0x95, 0x2F, 0xD4, 0xD1, 0x19, 0x58, 0xC2, 0xA4, 0xC8, 0x99, 0x52, 0x8C, 0x0B, 0x7C, 0xC0, 0x75, 0xFD, 0x56, 0x12, 0x17, 0x20, 0x1D, 0xA8, 0x06, 0x7A, 0x01, 0x95, 0x83, 0x9A, 0x1B, 0x56, 0x00, 0xE1, 0xB4, 0xDA, 0x4F, 0xD2, 0xFB, 0x0B, 0x8C, 0x17, 0xA2, 0xAA, 0x4B, 0x3F, 0x28, 0xEF, 0x44, 0x31, 0xF1, 0x28, 0xB7, 0x69, 0x29, 0xA5, 0xDC, 0x30, 0x6F, 0xD9, 0x89, 0xAB, 0x65, 0xDD, 0x66, 0xEB, 0x01, 0xF8, 0x53, 0x91, 0x43, 0xC2, 0xBE, 0x3B, 0x2C, 0x78, 0x63, 0x78, 0x32, 0x98, 0x4C, 0xC1, 0x66, 0x33, 0xC0, 0x8A, 0x5B, 0xCE, 0x2A, 0xEA, 0x96, 0x45, 0xD3, 0x05, 0x78, 0x00, 0x19, 0x3F, 0x7F, 0xA6, 0x1F, 0xAD, 0x97, 0xB5, 0x99, 0xD2, 0x0E, 0xC3, 0xE8, 0x1C, 0xE5, 0xBB, 0xE6, 0x32, 0xC5, 0x9A, 0x6B, 0x05, 0x5A, 0xEF, 0xEB, 0x53, 0xD6, 0x64, 0x1D, 0x6D, 0x60, 0x37, 0x60, 0x02, 0xE4, 0x02, 0x2A, 0xE0, 0x1F, 0xDA, 0x42, 0xA3, 0x29, 0x8D, 0x86, 0x02, 0x16, 0x89, 0xE9, 0x08, 0x95, 0x93, 0x47, 0x2D, 0xD8, 0x85, 0xF7, 0xC4, 0xF2, 0x7C, 0xA2, 0x53, 0xF5, 0x19, 0x2D, 0xDE, 0xB0, 0x94, 0xDB, 0x71, 0x5E, 0xFF, 0x52, 0x2A, 0xE8, 0x0A, 0x1A, 0xFB, 0xF0, 0x86, 0x25, 0xB0, 0xC1, 0xF4, 0x6D, 0xFA, 0x87, 0x22, 0x93, 0x5D, 0x2A, 0x70, 0xC8, 0x41, 0xBB, 0x64, 0x56, 0x17, 0x70, 0xEA, 0xA1, 0x16, 0xD0, 0xCD, 0x80, 0xEB, 0x18, 0xCD, 0x7F, 0xAA, 0xD5, 0x36, 0x0B, 0x3B, 0x85, 0xD7, 0x63, 0xC1, 0x92, 0x21, 0x93, 0x72, 0x85, 0x95, 0x0E, 0x7E, 0x90, 0x0D, 0xF0, 0x53, 0x04, 0x50, 0xBE, 0x50, 0x74, 0x27, 0x80, 0x36, 0x60, 0x09, 0xE4, 0xA2, 0xD1, 0xEC, 0x1E, 0x69, 0x7B, 0xDD, 0x4E, 0x35, 0x8C, 0xB4, 0x3B, 0xF2, 0x89, 0x0E, 0x61, 0x7E, 0x44, 0xBD, 0x21, 0x25, 0x3E, 0x46, 0x63, 0x20, 0xC9, 0xAE, 0x44, 0x4F, 0xE6, 0x25, 0xD7, 0x80, 0xD9, 0xF9, 0xC2, 0xD2, 0x9A, 0x23, 0x35, 0x64, 0xF2, 0xDB, 0x17, 0x46, 0x44, 0xEE, 0x44, 0x5B, 0x90, 0x64, 0x75, 0xB7, 0xA5, 0x2D, 0x20, 0x0C, 0xA8, 0x79, 0x05, 0xA9, 0xF3, 0x8C, 0x05, 0xDB, 0x29, 0xAC, 0x2F, 0xF6, 0xEE, 0xA6, 0x26, 0x7C, 0x51, 0x8C, 0x60, 0x4E, 0x12, 0x8E, 0xB3, 0x83, 0x0A, 0xD0, 0x74, 0x4F, 0x0E, 0xCC, 0x81, 0x08, 0xA0, 0x37, 0x46, 0xA1, 0x08, 0xA0, 0x09, 0x44, 0xD2, 0x68, 0x3E, 0xFD, 0xBE, 0xEC, 0x6A, 0xC6, 0xD8, 0x56, 0x1F, 0xAC, 0x6D, 0x54, 0x7D, 0x02, 0xDD, 0xEB, 0xAD, 0xB0, 0x4C, 0x57, 0xDE, 0x2D, 0x7A, 0x69, 0x35, 0xF1, 0x39, 0xDD, 0xBF, 0xCA, 0xC7, 0x7B, 0x8C, 0x70, 0x0A, 0xE3, 0xA6, 0x3A, 0xFB, 0x0A, 0x96, 0xE3, 0x04, 0x8E, 0x15, 0xEB, 0xC9, 0x16, 0x5A, 0x7E, 0x57, 0xBF, 0x2F, 0xBD, 0x33, 0xAE, 0xFA, 0x69, 0x00, 0xCD, 0x03, 0x49, 0x5F, 0xB9, 0xF6, 0x32, 0x17, 0x5F, 0xC9, 0x53, 0x46, 0x50, 0x8F, 0xEF, 0xDB, 0x17, 0x0C, 0x2B, 0x02, 0x94, 0x33, 0x09, 0x15, 0x50, 0x1B, 0xC4, 0x40, 0x07, 0x0E, 0x30, 0xFD, 0x70, 0x29, 0xAD, 0x16, 0x08, 0x64, 0x8A, 0xC7, 0x27, 0x86, 0xBE, 0x4F, 0xDB, 0x76, 0xFE, 0xBB, 0x05, 0xE7, 0xFE, 0x76, 0x1C, 0xAE, 0x0C, 0xC8, 0x36, 0x2A, 0x0F, 0xDD, 0x5A, 0x74, 0x71, 0x75, 0x2F, 0x8B, 0xF1, 0x3E, 0xAC, 0x93, 0x5D, 0x22, 0x32, 0x0F, 0x7B, 0x4C, 0x19, 0xEB, 0x84, 0xAA, 0x9A, 0xB5, 0xE9, 0x63, 0xA7, 0x38, 0xEB, 0x3C, 0x8D, 0xC7, 0xAE, 0xDF, 0x1E, 0x80, 0x0A, 0xC0, 0x87, 0x7C, 0xC5, 0xF2, 0x17, 0xCD, 0xDA, 0x71, 0x62, 0x97, 0x3D, 0x06, 0xE2, 0xE1, 0xA3, 0xE1, 0x18, 0xBD, 0xBA, 0x3B, 0xE0, 0x28, 0xA2, 0x40, 0x4F, 0xFF, 0x08, 0x19, 0x58, 0x03, 0x11, 0x00, 0x37, 0x86, 0x9D, 0x80, 0x3A, 0xE0, 0x46, 0xAB, 0x25, 0xCD, 0x74, 0xD5, 0x19, 0xC3, 0x30, 0x86, 0x5C, 0x6F, 0x0C, 0xB9, 0x98, 0xA0, 0x6C, 0x52, 0x33, 0x8F, 0x46, 0xBB, 0xF7, 0xCF, 0x3E, 0xA7, 0xFA, 0x99, 0x30, 0xF5, 0xAB, 0x76, 0xAB, 0x93, 0xC1, 0x64, 0xF1, 0x2B, 0x39, 0x99, 0x6D, 0xAD, 0xCE, 0x69, 0xA5, 0xD7, 0x6D, 0x2D, 0x5E, 0xDB, 0xCD, 0x99, 0xFD, 0x08, 0x2C, 0x05, 0xA4, 0x00, 0xAB, 0x5F, 0x9E, 0x57, 0x72, 0x84, 0xD7, 0xF1, 0x64, 0xE4, 0xA6, 0xFB, 0x11, 0x33, 0x33, 0xF5, 0xB7, 0xDC, 0xE7, 0x4C, 0x49, 0xF4, 0xB2, 0xF9, 0xD0, 0x93, 0x64, 0xAA, 0x05, 0x44, 0x02, 0xED, 0x48, 0x08, 0x92, 0x02, 0x62, 0x01, 0x19, 0x93, 0x72, 0x9A, 0x34, 0x5A, 0xDD, 0x46, 0x83, 0x29, 0x76, 0x97, 0x26, 0x9C, 0x83, 0x35, 0x85, 0x15, 0x5D, 0x93, 0x38, 0xE0, 0x1F, 0x54, 0xEF, 0xB3, 0xDA, 0x7E, 0x64, 0xD5, 0x92, 0xF5, 0x62, 0xE2, 0x4F, 0x1C, 0x2A, 0x7E, 0xAE, 0x7F, 0x3B, 0x7D, 0x64, 0x7D, 0xFC, 0x46, 0x3C, 0xCB, 0x32, 0x40, 0xA7, 0x63, 0xB5, 0xAB, 0x23, 0xBD, 0x9C, 0x3C, 0xDF, 0xAE, 0xF9, 0xF4, 0xB4, 0xD3, 0x17, 0xFB, 0x35, 0x75, 0xDE, 0x39, 0x29, 0x23, 0x3D, 0x07, 0x8C, 0xC5, 0x2E, 0x2F, 0xAC, 0x19, 0x38, 0x6A, 0x1E, 0x91, 0x13, 0x13, 0x61, 0x90, 0xA0, 0x80, 0xD2, 0x3B, 0x3A, 0xA0, 0x0E, 0x84, 0x01, 0x2D, 0xB3, 0xB9, 0x16, 0xA0, 0x4A, 0xAB, 0xF5, 0x31, 0x17, 0x8D, 0x97, 0xDF, 0x4D, 0x79, 0x5C, 0xDC, 0x1B, 0x69, 0x6A, 0x95, 0x32, 0x47, 0x52, 0x47, 0xF9, 0x77, 0x36, 0xC7, 0x18, 0x97, 0xB5, 0xA7, 0xDA, 0x58, 0xC6, 0x78, 0xCE, 0x1E, 0x70, 0xD4, 0x4E, 0x01, 0xEA, 0x28, 0xDE, 0x6F, 0x20, 0xEA, 0x5E, 0x00, 0x99, 0xEB, 0xCA, 0xD8, 0xE3, 0x9A, 0x80, 0x24, 0xAC, 0x96, 0x0C, 0x6B, 0x02, 0xCC, 0xD5, 0xEB, 0xA3, 0x03, 0x4C, 0x7F, 0x5E, 0xE6, 0x9D, 0xCB, 0xCB, 0xC1, 0x59, 0x01, 0xE4, 0x02, 0xC2, 0x07, 0x79, 0x2B, 0xA9, 0x5B, 0x02, 0xA5, 0x40, 0x0A, 0x60, 0xF5, 0x14, 0x91, 0xD3, 0x77, 0x20, 0x40, 0x9E, 0x1D, 0x54, 0xD6, 0x6D, 0xB5, 0xA9, 0x6C, 0xCF, 0xED, 0x53, 0x5C, 0xBA, 0xB1, 0x50, 0xCF, 0x50, 0x33, 0x75, 0x28, 0xF6, 0x76, 0x5F, 0x3D, 0x0B, 0x5C, 0x9F, 0x2E, 0xF7, 0x91, 0xEC, 0x0E, 0x7E, 0x2B, 0x51, 0xA7, 0x01, 0x7D, 0x72, 0x72, 0x6F, 0xF1, 0xF3, 0xBA, 0x85, 0x4C, 0xE1, 0xC7, 0x9C, 0x38, 0x0A, 0x8C, 0xE7, 0x74, 0xD9, 0xAC, 0x5F, 0x37, 0xC6, 0xF1, 0x59, 0xD3, 0x9D, 0x12, 0xA7, 0x91, 0x41, 0xAC, 0xBB, 0x97, 0x04, 0x7D, 0x6F, 0x69, 0x80, 0xF7, 0xC0, 0x07, 0x71, 0x6B, 0x56, 0xA8, 0x02, 0x91, 0xCF, 0xFA, 0x79, 0x1C, 0x54, 0x8F, 0x10, 0xCB, 0x9E, 0x37, 0xF5, 0x58, 0x6D, 0xFF, 0xF5, 0x88, 0x7A, 0x2B, 0x7E, 0x02, 0x36, 0xE4, 0xEA, 0xB4, 0x0B, 0xD2, 0xCF, 0x22, 0x08, 0xC3, 0x88, 0xB1, 0x5F, 0xFB, 0xE5, 0x58, 0x53, 0xA1, 0xD5, 0xE4, 0x6E, 0x54, 0xF1, 0x0A, 0x70, 0x87, 0x01, 0xEE, 0x83, 0x06, 0xD8, 0xC3, 0xFD, 0x64, 0x83, 0xD3, 0x13, 0x57, 0x9C, 0x69, 0x2C, 0x09, 0xA6, 0x5E, 0xC9, 0xCF, 0xFF, 0xD3, 0xA7, 0x19, 0xF4, 0xD9, 0x73, 0x07, 0x2B, 0xEE, 0x34, 0xCB, 0x28, 0xC0, 0x0C, 0x50, 0x1F, 0xD8, 0x20, 0x81, 0xA0, 0x54, 0x46, 0x00, 0xBE, 0x01, 0xDB, 0x8F, 0xBA, 0xC5, 0xBA, 0x4D, 0x99, 0x3E, 0xAF, 0xF8, 0xB1, 0x9A, 0xD0, 0x4E, 0xB8, 0xF2, 0x2E, 0xFD, 0xEB, 0x40, 0x21, 0x06, 0x2A, 0x45, 0x14, 0x4A, 0x10, 0x28, 0xCE, 0x4E, 0x31, 0x43, 0xE6, 0xE7, 0x96, 0x2B, 0x4F, 0xDE, 0x9A, 0x56, 0xF3, 0x5B, 0xDC, 0xC6, 0x03, 0xE8, 0x35, 0x88, 0xC1, 0x1E, 0x04, 0x5B, 0x8D, 0x00, 0xC9, 0xF5, 0xB0, 0xE9, 0xBF, 0xBC, 0xD2, 0x61, 0x93, 0xB1, 0x77, 0xD6, 0xA4, 0x53, 0x2B, 0xA6, 0x9A, 0x03, 0xF7, 0xF6, 0x22, 0x99, 0x02, 0x3B, 0x1E, 0x75, 0x8B, 0x05, 0xF8, 0xC0, 0x72, 0xD0, 0x40, 0xF2, 0x07, 0x1A, 0x30, 0x62, 0x01, 0xBB, 0xEE, 0x09, 0x1E, 0x0D, 0x8C, 0x0D, 0x2F, 0xAB, 0xE9, 0x37, 0xD6, 0xDA, 0xE5, 0x54, 0xAC, 0xF6, 0x17, 0xD6, 0x9B, 0x02, 0x29, 0x6D, 0x4C, 0xB7, 0x10, 0xC8, 0xDE, 0xF8, 0x86, 0xD1, 0x45, 0x2F, 0x45, 0x74, 0x5F, 0x4F, 0x2F, 0x16, 0xF1, 0xBB, 0xB5, 0x8A, 0x11, 0x71, 0x7F, 0xF2, 0x7D, 0x8F, 0x35, 0xBB, 0x1C, 0x6B, 0x5B, 0x4E, 0x0D, 0xB2, 0x4E, 0x3C, 0x98, 0x99, 0xA0, 0xCE, 0x44, 0x39, 0x2A, 0x44, 0xE5, 0xA5, 0x31, 0xBF, 0x39, 0x3C, 0x9E, 0x99, 0x26, 0x79, 0xCB, 0xFC, 0x57, 0x0E, 0x6C, 0x10, 0x74, 0x71, 0x02, 0xBE, 0x80, 0x6C, 0x20, 0x1E, 0x1B, 0xCA, 0x02, 0x96, 0xDF, 0xF6, 0xCD, 0x3E, 0x56, 0xB3, 0xBF, 0xFA, 0xE2, 0x9E, 0x02, 0x9D, 0xFC, 0x82, 0xEA, 0xC9, 0xDE, 0x39, 0x01, 0xF6, 0x71, 0xDB, 0xBA, 0xCE, 0xBA, 0x66, 0x10, 0xAC, 0x89, 0xBE, 0xB5, 0x27, 0xFA, 0xC9, 0xC2, 0x3D, 0xCB, 0x4D, 0xDD, 0x2A, 0xED, 0x3B, 0x00, 0x6D, 0xC0, 0x13, 0x28, 0x76, 0xD2, 0xD6, 0x31, 0x97, 0xB2, 0x5A, 0xF4, 0x4A, 0x60, 0x88, 0xD3, 0x96, 0xF6, 0xA4, 0x4F, 0xEE, 0xD3, 0x9A, 0xF7, 0x28, 0x25, 0xE4, 0x2D, 0x8E, 0x0D, 0xBF, 0xC1, 0xDD, 0x50, 0x23, 0x04, 0xF0, 0x05, 0x58, 0x0C, 0x0A, 0xC8, 0x79, 0x53, 0x04, 0x70, 0x07, 0x6C, 0x40, 0xA1, 0x9B, 0x6A, 0x20, 0xF4, 0xEE, 0x19, 0x63, 0x71, 0xAC, 0xE6, 0x7F, 0xF9, 0xE5, 0x5B, 0xFC, 0xAE, 0x55, 0x5F, 0xAA, 0xA2, 0x8E, 0x94, 0x73, 0xC3, 0x33, 0x31, 0xCD, 0xF4, 0x52, 0x37, 0x8C, 0x67, 0x72, 0xEF, 0xA1, 0x7E, 0x17, 0x69, 0x8F, 0xF1, 0x1A, 0xD3, 0x01, 0xEF, 0xB2, 0x09, 0xAC, 0xCD, 0x6D, 0x49, 0x00, 0x4F, 0xA0, 0x8B, 0x97, 0xEE, 0x31, 0xC9, 0x98, 0x2B, 0xEB, 0x17, 0xE1, 0xA0, 0xBB, 0x66, 0x0E, 0x2E, 0xC2, 0xFB, 0x6A, 0x1F, 0x39, 0x01, 0xB7, 0xFB, 0xBE, 0xBA, 0x46, 0xAE, 0xC7, 0xD8, 0x0E, 0x1F, 0xD8, 0x0E, 0x50, 0x67, 0xBF, 0x7D, 0xD0, 0x8C, 0x5A, 0x00, 0x95, 0xF4, 0xD4, 0x03, 0xDB, 0xE6, 0x61, 0x03, 0xAE, 0x80, 0x0C, 0x6C, 0xCD, 0x2B, 0x7D, 0xAC, 0x16, 0x9F, 0x7B, 0x48, 0x7F, 0x8E, 0xC8, 0xFC, 0x52, 0xBD, 0xC6, 0x5C, 0x52, 0x53, 0x60, 0x01, 0x0F, 0xDB, 0xDE, 0xC1, 0x66, 0x1B, 0xF7, 0x85, 0xCA, 0x9F, 0x4A, 0x96, 0x7C, 0xA4, 0x33, 0xEA, 0x68, 0xF0, 0xFB, 0xEC, 0x93, 0x0B, 0x70, 0x7A, 0xC0, 0xFB, 0x77, 0xD9, 0x8A, 0xA3, 0xC8, 0xC9, 0x46, 0xB3, 0x4D, 0x57, 0x6B, 0xC2, 0x86, 0x8C, 0xA7, 0xEF, 0x3D, 0xBE, 0x4E, 0x1D, 0xAB, 0xED, 0xAB, 0xCE, 0xC3, 0xC6, 0x08, 0x9C, 0xEE, 0x99, 0x4F, 0xD7, 0x8B, 0x05, 0x2C, 0x1F, 0x34, 0x60, 0x32, 0x16, 0x35, 0xC0, 0x1C, 0x50, 0x05, 0xA8, 0xC5, 0x13, 0x0A, 0xA8, 0x01, 0xBE, 0xE7, 0x95, 0x3C, 0x56, 0xCB, 0xAF, 0x3F, 0x46, 0x76, 0x1E, 0xAB, 0x65, 0xC3, 0x8D, 0x26, 0x02, 0xDD, 0x65, 0x68, 0x38, 0xCB, 0xE4, 0x45, 0x39, 0x66, 0x9D, 0xD6, 0xB7, 0xAE, 0xBD, 0x55, 0x53, 0x5C, 0x59, 0x06, 0x7E, 0xDA, 0x0B, 0xEC, 0x04, 0x22, 0x80, 0x9E, 0xDF, 0x54, 0x0C, 0x08, 0xCE, 0x50, 0x06, 0x48, 0x8A, 0xA5, 0xFC, 0x79, 0x77, 0x05, 0x2D, 0x6A, 0x4D, 0x2E, 0x66, 0x70, 0xFF, 0x3C, 0x25, 0x7A, 0xB2, 0xC2, 0x25, 0x39, 0x66, 0x3E, 0x6C, 0xBD, 0x75, 0x55, 0x36, 0x3D, 0x74, 0x31, 0xD0, 0x41, 0x8C, 0x45, 0x13, 0xA8, 0x7D, 0x2F, 0x21, 0x34, 0x57, 0xC9, 0xA3, 0xB7, 0xB6, 0x81, 0x93, 0x43, 0x67, 0xC7, 0x6A, 0x75, 0x77, 0xC4, 0x70, 0x45, 0x67, 0xAE, 0x15, 0x70, 0xBC, 0xB6, 0x7E, 0x53, 0xDA, 0x02, 0x45, 0x06, 0x9E, 0x01, 0xD1, 0xF3, 0xAA, 0x5B, 0xBF, 0xC9, 0x9E, 0x3D, 0x34, 0x4E, 0x29, 0xCA, 0x2D, 0x46, 0x22, 0x0E, 0xA8, 0x02, 0xBE, 0x81, 0x92, 0x5F, 0xE6, 0x63, 0x33, 0x3D, 0xD0, 0x59, 0x8E, 0x7E, 0x74, 0xAA, 0x25, 0x7E, 0xC9, 0x0C, 0x7E, 0xE2, 0xA8, 0xD6, 0xB4, 0x0C, 0xBD, 0xBA, 0xD7, 0xC9, 0xC3, 0xEB, 0x6E, 0xFA, 0x95, 0x0D, 0x44, 0x0C, 0x74, 0xF0, 0xE8, 0xE0, 0x99, 0x3E, 0xBB, 0x41, 0x01, 0xF6, 0xC4, 0xC4, 0xCA, 0xE6, 0xD3, 0x20, 0xED, 0x58, 0xAD, 0x3F, 0x07, 0x91, 0xF5, 0xE6, 0x58, 0x83, 0x47, 0xC9, 0x15, 0x07, 0x25, 0xD9, 0x93, 0x16, 0xB6, 0x47, 0xC1, 0x58, 0x46, 0x64, 0x4E, 0xEF, 0xE0, 0x94, 0x3E, 0xE9, 0xCB, 0x5B, 0xC6, 0x08, 0x3C, 0x62, 0xAD, 0xA2, 0xDF, 0x07, 0x08, 0xC6, 0xA8, 0x1C, 0x70, 0x36, 0x1D, 0x60, 0x62, 0xC7, 0x2F, 0x7F, 0x53, 0x8F, 0x97, 0xEC, 0x34, 0x8D, 0x0E, 0xF9, 0xE5, 0x15, 0xE9, 0xE9, 0x07, 0x55, 0xC6, 0x65, 0x91, 0x4A, 0x74, 0xCC, 0x6A, 0x9B, 0x81, 0x1B, 0x80, 0x2D, 0x40, 0x0C, 0xD8, 0x7D, 0x7F, 0x62, 0x05, 0x99, 0x04, 0x10, 0x05, 0xF8, 0x40, 0x39, 0xFC, 0x1B, 0xF0, 0x04, 0xD2, 0xE6, 0x15, 0x86, 0x0C, 0x94, 0xE7, 0x5A, 0x56, 0xE1, 0x26, 0x3F, 0xE1, 0xA4, 0xDE, 0x1B, 0x07, 0x87, 0xC0, 0xE0, 0x08, 0x31, 0x78, 0x1E, 0xAC, 0xFE, 0x16, 0xEC, 0xB2, 0xAE, 0x31, 0xD7, 0xC6, 0x5E, 0x2C, 0x7E, 0x77, 0x5F, 0x09, 0x1F, 0x08, 0x60, 0x35, 0x58, 0x03, 0x07, 0xAE, 0x86, 0x66, 0xF0, 0x82, 0xF3, 0x9B, 0x16, 0x60, 0x3A, 0xBE, 0x5B, 0xE1, 0xAA, 0x45, 0xAF, 0xCA, 0xD5, 0x1B, 0x48, 0xFC, 0x56, 0xCD, 0x5A, 0xCA, 0x4F, 0x40, 0xFA, 0x33, 0xD8, 0x9E, 0x4F, 0xE7, 0x4A, 0xD5, 0xCF, 0x95, 0x6A, 0x03, 0x96, 0xC0, 0xF2, 0x3B, 0xF2, 0xDA, 0x7D, 0xBE, 0x11, 0xCD, 0xB6, 0xAF, 0x70, 0xBB, 0x5A, 0xCC, 0x95, 0xAA, 0xB1, 0x78, 0xA8, 0xE1, 0xB0, 0xDC, 0x7B, 0x44, 0xF2, 0xBE, 0x4F, 0xED, 0x69, 0x9F, 0xB9, 0xF6, 0x7B, 0xA5, 0x3A, 0xD3, 0x42, 0xEF, 0x2B, 0x95, 0x18, 0xA0, 0x3D, 0x90, 0x81, 0x01, 0xB6, 0x80, 0xE6, 0x16, 0x47, 0x73, 0x31, 0x53, 0x88, 0xB1, 0x19, 0xA5, 0x9F, 0x96, 0x0E, 0x48, 0x76, 0xD3, 0xA2, 0x30, 0xD1, 0x2D, 0xC6, 0xA6, 0xCF, 0x39, 0x71, 0xAD, 0xC7, 0x6A, 0x36, 0xD0, 0xDB, 0x78, 0x2D, 0xEF, 0x9F, 0xEE, 0x39, 0xB0, 0x29, 0xB0, 0xF2, 0x5F, 0x53, 0x74, 0x1F, 0xAB, 0xC9, 0x5F, 0x7D, 0x99, 0xCE, 0x81, 0xEC, 0xBC, 0x0E, 0x1C, 0xDF, 0x42, 0x4F, 0x03, 0x1A, 0x88, 0x77, 0x3A, 0x2E, 0xCC, 0xBB, 0xB1, 0x58, 0xA9, 0x5E, 0xC5, 0x66, 0xE6, 0x4F, 0x93, 0xA9, 0x5A, 0x77, 0x03, 0x1E, 0x19, 0xD8, 0x06, 0x34, 0x06, 0x57, 0x4F, 0x95, 0x38, 0x2D, 0x6F, 0x36, 0xAD, 0x16, 0x7D, 0x5F, 0xA9, 0x98, 0x5C, 0x9A, 0xFE, 0x6C, 0x00, 0x6C, 0xDB, 0xC5, 0x50, 0x1F, 0x10, 0x06, 0xF4, 0x1E, 0xF4, 0xF3, 0x69, 0x3D, 0x9F, 0xF2, 0xEE, 0x2E, 0xD8, 0x67, 0x4B, 0x05, 0x74, 0x03, 0xEB, 0x14, 0x02, 0x03, 0xA2, 0x80, 0xD9, 0xA9, 0xA0, 0xA4, 0xD5, 0xF4, 0xB3, 0x5A, 0x54, 0x4C, 0x5B, 0xF8, 0xFE, 0x6B, 0x83, 0x1B, 0x12, 0x6E, 0x86, 0xFA, 0xBE, 0x5F, 0x77, 0x8D, 0x70, 0x7A, 0xE0, 0x46, 0x04, 0x87, 0x9C, 0xD2, 0x6A, 0x5A, 0x6F, 0xBB, 0xA4, 0x73, 0xD1, 0xE3, 0x32, 0x4D, 0xE4, 0x60, 0xDD, 0x0F, 0x77, 0xFC, 0xDC, 0x42, 0x31, 0x38, 0xD9, 0x0D, 0x74, 0xD0, 0xC5, 0x94, 0x5F, 0xE1, 0x9D, 0xD3, 0x1B, 0xA3, 0xCF, 0xF9, 0x62, 0xAD, 0x7B, 0x73, 0x59, 0x01, 0x6C, 0xBD, 0xEB, 0x74, 0x5B, 0x80, 0xCA, 0x1B, 0xB4, 0x9E, 0x2C, 0x20, 0x8D, 0x79, 0x35, 0xB7, 0xB9, 0xD3, 0x01, 0x7D, 0x1A, 0xD5, 0x49, 0x02, 0x1D, 0xC7, 0x6C, 0xF6, 0x85, 0x8E, 0xBB, 0x0C, 0x85, 0xE9, 0xBA, 0xBE, 0x4A, 0x83, 0xC5, 0x4E, 0x22, 0xA9, 0x10, 0x36, 0xF5, 0x09, 0x8D, 0x6F, 0x43, 0x40, 0xB7, 0xF3, 0x6A, 0xFC, 0xE3, 0xF9, 0x54, 0x6C, 0xEF, 0xFD, 0x74, 0x31, 0x1A, 0x28, 0x21, 0xC0, 0xEE, 0xC1, 0x02, 0x78, 0x7E, 0x5C, 0x5C, 0x83, 0x8F, 0x53, 0x36, 0x00, 0xF6, 0xD4, 0x70, 0x1D, 0xAB, 0x29, 0x0F, 0x2B, 0x1C, 0x18, 0x57, 0xDF, 0xAE, 0xD4, 0xA7, 0xFB, 0x98, 0x3C, 0x88, 0x41, 0x01, 0x16, 0x40, 0x9E, 0x5A, 0x72, 0x20, 0x1D, 0x08, 0xBB, 0x7F, 0xDD, 0xB5, 0xE7, 0x4D, 0x01, 0xF8, 0x8D, 0xA2, 0x8E, 0xD5, 0x1C, 0x27, 0xB6, 0x49, 0xFB, 0x6B, 0x33, 0x74, 0xCF, 0xEB, 0xC0, 0xA9, 0x33, 0x7D, 0x8E, 0x58, 0x36, 0xC9, 0x0A, 0x8D, 0x5B, 0x4C, 0xFA, 0xBD, 0xB0, 0xDD, 0x7D, 0xE0, 0xE8, 0x96, 0x8A, 0x53, 0xBE, 0xE3, 0x3C, 0x4D, 0x3E, 0xE7, 0x22, 0xDD, 0x80, 0x8F, 0xB9, 0xF6, 0x5D, 0x5D, 0x1D, 0x13, 0x6B, 0xC2, 0x1E, 0x87, 0x02, 0xAE, 0x0F, 0xFB, 0x4C, 0xD8, 0x75, 0x45, 0x64, 0x16, 0xB3, 0x75, 0xF2, 0x3D, 0x64, 0xD9, 0x2D, 0x81, 0x97, 0x83, 0x20, 0x62, 0xD0, 0xF7, 0xC1, 0xCD, 0xEA, 0xFE, 0xF1, 0x1C, 0xB8, 0x02, 0x5B, 0x1F, 0x2D, 0x50, 0x01, 0x7E, 0x0B, 0x1B, 0xC4, 0xD5, 0x18, 0xD1, 0xD3, 0xAC, 0xBF, 0x10, 0xD4, 0xEA, 0x49, 0x9C, 0xB2, 0xD0, 0x4E, 0x04, 0xA7, 0xF6, 0x69, 0xD6, 0x94, 0xFF, 0x68, 0xF7, 0x20, 0x57, 0xA1, 0x7A, 0x31, 0x7D, 0x6A, 0x9F, 0x12, 0x73, 0x11, 0xC0, 0x02, 0x08, 0x07, 0xA8, 0xC6, 0xC6, 0x20, 0x55, 0x4C, 0xDE, 0x14, 0x80, 0x9C, 0x84, 0xAB, 0xC3, 0xFD, 0xA9, 0x54, 0xA4, 0x8A, 0x9C, 0xFD, 0xDA, 0xFA, 0xD8, 0x49, 0x7A, 0xE8, 0x02, 0x6A, 0x01, 0x9E, 0x80, 0xD6, 0xC0, 0x07, 0x01, 0xD8, 0x80, 0xB9, 0x28, 0xEA, 0x40, 0x2E, 0x20, 0x0C, 0xB0, 0x0D, 0xAC, 0x9A, 0x37, 0x0D, 0xE8, 0x9E, 0x37, 0x8D, 0x56, 0x4B, 0x74, 0x6A, 0xF4, 0x9A, 0xBE, 0x4E, 0x0E, 0xF5, 0x05, 0x9D, 0x6E, 0xA2, 0x8D, 0x01, 0xA8, 0x11, 0x28, 0xC9, 0xE5, 0xF1, 0x6B, 0xEF, 0xCB, 0x05, 0x5E, 0x57, 0xBA, 0x02, 0xFE, 0xD9, 0xB1, 0x2C, 0xAB, 0x03, 0x12, 0x16, 0xD9, 0x1B, 0x30, 0x19, 0x14, 0xC0, 0x2F, 0x7F, 0x54, 0x7B, 0xA9, 0x97, 0x34, 0xA9, 0x51, 0xD0, 0x3A, 0x67, 0xDA, 0x41, 0x1F, 0xBD, 0xAE, 0x45, 0xBB, 0xAE, 0x31, 0x5A, 0xCD, 0xC0, 0xDB, 0xB7, 0x7D, 0xCC, 0x00, 0x6D, 0x40, 0x62, 0x60, 0x37, 0x54, 0x80, 0xA4, 0x7D, 0x06, 0x45, 0x8B, 0x24, 0x60, 0x3E, 0x66, 0x0A, 0x20, 0x14, 0xC8, 0x9A, 0x57, 0x84, 0x46, 0x83, 0xFA, 0x61, 0x65, 0x4F, 0x9E, 0x6B, 0x7C, 0xD3, 0x55, 0x0C, 0xF1, 0x77, 0x15, 0x83, 0x5F, 0x62, 0x72, 0x9A, 0xBD, 0xF3, 0x2F, 0x8F, 0x74, 0x64, 0xD2, 0x55, 0x54, 0xFE, 0x34, 0x05, 0x15, 0x3A, 0x21, 0xF6, 0xDD, 0xAC, 0xAC, 0xFC, 0x2E, 0x7C, 0xDD, 0x02, 0x68, 0x9D, 0x2B, 0xF3, 0x4F, 0x05, 0xB4, 0x58, 0xBD, 0x73, 0x72, 0xEC, 0xCA, 0x7E, 0x85, 0x75, 0x6C, 0x30, 0x19, 0xC7, 0xDD, 0x66, 0xCE, 0x0E, 0xB2, 0x3C, 0x56, 0x7F, 0x58, 0xC2, 0xC6, 0xAA, 0x80, 0x05, 0xA0, 0x39, 0xF0, 0x41, 0x9F, 0x57, 0x66, 0xA9, 0x06, 0xA2, 0x00, 0x0F, 0xE0, 0x5C, 0xED, 0x0B, 0x88, 0x0D, 0x24, 0x5F, 0xC9, 0x33, 0x41, 0x7B, 0x94, 0x36, 0x7D, 0x0A, 0xE9, 0x36, 0x06, 0x5E, 0x08, 0x72, 0x34, 0x64, 0x44, 0x31, 0xDA, 0xC7, 0x47, 0xB3, 0xBF, 0x4F, 0x96, 0xCD, 0x9A, 0xC6, 0x47, 0x88, 0xE2, 0xBA, 0x9C, 0x60, 0x9D, 0xC0, 0x58, 0xED, 0x53, 0x19, 0x0C, 0x94, 0x03, 0x6D, 0x6C, 0x32, 0x0B, 0x24, 0x1D, 0x40, 0x42, 0xD9, 0xE8, 0x9F, 0x52, 0xD7, 0xA4, 0xAE, 0x33, 0xCD, 0x71, 0xF7, 0x71, 0x52, 0x6A, 0x32, 0x7C, 0xCC, 0x2F, 0xCA, 0x08, 0xC5, 0x65, 0xA0, 0x95, 0x4F, 0x29, 0x9B, 0x3C, 0x88, 0x79, 0xA5, 0x01, 0x9A, 0x8B, 0x9F, 0xBA, 0x6F, 0xA3, 0xEB, 0x06, 0x96, 0x01, 0xFB, 0x44, 0xFC, 0x69, 0x35, 0x43, 0x80, 0x65, 0x4F, 0x01, 0xD5, 0x56, 0xFB, 0x9C, 0x1E, 0x19, 0x88, 0x83, 0xBA, 0x2A, 0x2E, 0x89, 0xE5, 0xA3, 0x99, 0x97, 0xB8, 0xFD, 0xC7, 0x66, 0xCA, 0xDA, 0x7D, 0xCA, 0x7D, 0x45, 0xAB, 0xAD, 0x99, 0xE2, 0x02, 0xD8, 0xC0, 0xF7, 0xC0, 0x81, 0xA0, 0xC6, 0x77, 0x30, 0x70, 0x10, 0x30, 0x49, 0xE5, 0xAF, 0xDE, 0x7C, 0x9F, 0x00, 0x61, 0xFA, 0xE9, 0x04, 0x34, 0x0A, 0x96, 0x63, 0xF4, 0x39, 0x86, 0xC8, 0x3D, 0x2E, 0x3A, 0x07, 0x0E, 0x94, 0x3D, 0x48, 0xA0, 0x85, 0xFA, 0xD0, 0x8F, 0x6A, 0xEE, 0xAE, 0xC1, 0xC6, 0xC3, 0x31, 0xA5, 0x35, 0x20, 0x0A, 0x68, 0xF2, 0xCD, 0x63, 0xB5, 0x3D, 0x72, 0x00, 0x32, 0xEA, 0x85, 0xF6, 0x17, 0x8E, 0x4C, 0x48, 0x2C, 0x8E, 0x3D, 0xB5, 0x9B, 0x3A, 0xDD, 0xBF, 0xF6, 0xB4, 0x3E, 0x46, 0x10, 0x59, 0xDF, 0xBD, 0x60, 0x3D, 0x09, 0xB9, 0xE7, 0x0A, 0xB8, 0xEE, 0x7B, 0xA8, 0x6F, 0x20, 0x9B, 0xDE, 0x45, 0x80, 0x45, 0x16, 0x4C, 0x72, 0x63, 0x6B, 0x8B, 0xD6, 0x49, 0x2B, 0xFE, 0x75, 0xAC, 0x91, 0x64, 0x55, 0xEC, 0x29, 0x9D, 0xEF, 0xA7, 0xFE, 0x2F, 0x12, 0xB0, 0x06, 0xC4, 0x81, 0x25, 0x03, 0x46, 0xC1, 0x1A, 0x9F, 0xF6, 0x02, 0x7C, 0x51, 0x42, 0x1D, 0x88, 0x0D, 0xF8, 0x80, 0xAA, 0x94, 0x35, 0xF0, 0x0D, 0xA4, 0xCC, 0x9B, 0xC7, 0x68, 0x82, 0xFC, 0x7B, 0xD1, 0xAB, 0x82, 0x6A, 0xFB, 0x9E, 0xA8, 0x90, 0x02, 0x56, 0xD8, 0xD6, 0xA6, 0x8C, 0x5B, 0x3B, 0x78, 0x81, 0xBA, 0x2A, 0x5A, 0x94, 0x4E, 0x8E, 0x1A, 0x6B, 0xB1, 0xCC, 0x49, 0xE8, 0xDB, 0x91, 0x5B, 0xD9, 0x40, 0x0A, 0xF0, 0xA2, 0xDE, 0xE6, 0x4F, 0x61, 0xAE, 0xE6, 0xD6, 0xEE, 0xA7, 0xC6, 0x55, 0x98, 0x23, 0xF0, 0x81, 0x99, 0x23, 0xF3, 0xE3, 0x62, 0x30, 0x13, 0xE5, 0xC3, 0x58, 0x79, 0x85, 0xA4, 0x4E, 0x40, 0xC6, 0x8D, 0x5E, 0x3D, 0xD8, 0x40, 0xF2, 0x53, 0xDF, 0x6A, 0x09, 0x25, 0xAC, 0xED, 0x18, 0x9C, 0x74, 0x07, 0x20, 0x16, 0xA0, 0x05, 0x38, 0x6B, 0xC2, 0x9B, 0x46, 0x53, 0xA4, 0xDB, 0xB4, 0x8C, 0xD1, 0x18, 0x5B, 0xF5, 0xD9, 0xE1, 0x91, 0x16, 0xC9, 0x22, 0xBD, 0x6D, 0x81, 0x3D, 0x04, 0x59, 0x1E, 0xFD, 0x6F, 0x29, 0xFE, 0xE0, 0x79, 0xC3, 0x1F, 0x25, 0xC8, 0x1C, 0xE3, 0xA9, 0x01, 0xB1, 0xEF, 0x96, 0x7F, 0xAC, 0x18, 0xA3, 0x9A, 0x15, 0xCC, 0x35, 0x5B, 0xAE, 0xC6, 0x69, 0x9F, 0x92, 0x13, 0x08, 0x5A, 0x54, 0xF7, 0x1B, 0x23, 0x04, 0x95, 0x39, 0xF6, 0x2D, 0x23, 0xD0, 0x02, 0x9C, 0xFC, 0xB9, 0x02, 0xD2, 0x07, 0x6B, 0xF0, 0x28, 0x56, 0x46, 0xDF, 0x6D, 0xEA, 0x3A, 0x80, 0x54, 0x40, 0x9F, 0x37, 0xC5, 0xE6, 0xCD, 0xA0, 0xD5, 0xA6, 0xD5, 0xF1, 0x6A, 0x34, 0xE5, 0xD2, 0x75, 0xA5, 0xC8, 0x24, 0x6F, 0x27, 0x5E, 0x38, 0x28, 0x97, 0xE0, 0x7E, 0xEC, 0x77, 0x38, 0x34, 0xEC, 0x91, 0x47, 0xD7, 0x7A, 0x32, 0x32, 0x9E, 0x50, 0xAD, 0xFA, 0x60, 0x0D, 0x0C, 0x60, 0x5E, 0xC7, 0x66, 0x5E, 0x38, 0x8D, 0x5E, 0x35, 0x23, 0xD6, 0xB8, 0x87, 0x5C, 0xC5, 0x1D, 0x27, 0xF3, 0x77, 0xDD, 0x81, 0xBD, 0x10, 0xA0, 0xEB, 0xC9, 0xA4, 0xD4, 0x41, 0x0C, 0x1A, 0x10, 0x03, 0x9C, 0x5D, 0x46, 0x07, 0x2A, 0x80, 0xE8, 0xDD, 0xF7, 0x3B, 0xF7, 0xA3, 0x0E, 0xCD, 0x57, 0xF2, 0x4C, 0x50, 0xFF, 0x2B, 0x41, 0xDD, 0xAC, 0x2B, 0x7A, 0xB7, 0xF7, 0xC6, 0x81, 0x17, 0xC5, 0xB4, 0xEC, 0x36, 0x31, 0x7D, 0x5B, 0x02, 0x97, 0xC7, 0x15, 0x76, 0x2E, 0x04, 0x1F, 0xE5, 0x75, 0x4A, 0x32, 0x25, 0x7B, 0x10, 0x32, 0x08, 0xC0, 0x05, 0x30, 0x1B, 0x28, 0x90, 0x7A, 0xF2, 0x6C, 0xB9, 0xB4, 0xDF, 0x72, 0xE5, 0xFD, 0xD3, 0x6F, 0xED, 0x73, 0x88, 0x3F, 0x2D, 0x30, 0x1E, 0x03, 0x89, 0x02, 0x6D, 0x74, 0x25, 0xBD, 0x5D, 0x7A, 0x07, 0x05, 0x64, 0xDC, 0x97, 0xB9, 0x5C, 0xDC, 0x4F, 0x07, 0x7C, 0x68, 0x80, 0x2A, 0xB0, 0x0C, 0x10, 0xBE, 0xB9, 0x8F, 0xD5, 0xE2, 0xBB, 0xBB, 0xEB, 0xDA, 0x93, 0x1E, 0x12, 0x1C, 0x6B, 0xB8, 0xCE, 0x58, 0xA1, 0xBA, 0x27, 0x04, 0x0E, 0x30, 0x6F, 0xF8, 0xA5, 0xCA, 0x99, 0x29, 0x7F, 0x5B, 0x6D, 0xEB, 0x7D, 0x75, 0xD7, 0x05, 0xF8, 0xC0, 0x36, 0x20, 0x06, 0x6C, 0x05, 0x56, 0x02, 0x52, 0xAC, 0xFD, 0x39, 0xE9, 0xDE, 0xCC, 0xFD, 0x00, 0xFC, 0x2E, 0x77, 0x77, 0xBA, 0x99, 0x36, 0xFF, 0x2E, 0xF7, 0x30, 0xF6, 0x9C, 0x87, 0x0A, 0x98, 0x03, 0xBE, 0x07, 0x39, 0x68, 0x20, 0xF2, 0xE9, 0x81, 0x3E, 0x48, 0x07, 0x22, 0x00, 0x73, 0x60, 0xCB, 0x7D, 0xD7, 0x5F, 0x09, 0xE4, 0xB1, 0x9A, 0xE1, 0x62, 0xB0, 0x3B, 0xA1, 0xB1, 0x18, 0xE8, 0x13, 0xBD, 0xBD, 0x60, 0xB5, 0x50, 0x84, 0x6C, 0x12, 0xA9, 0x44, 0xC7, 0x63, 0x66, 0xC7, 0x85, 0x4B, 0xDE, 0xDE, 0xB5, 0xE2, 0xA6, 0xB0, 0xEF, 0x62, 0xF4, 0xC5, 0xBA, 0xFE, 0x41, 0xE9, 0x53, 0xDE, 0xBF, 0x18, 0x59, 0xB8, 0xB2, 0xB8, 0xF1, 0xAB, 0x1E, 0x55, 0xA1, 0x73, 0xBF, 0xC0, 0x6E, 0x80, 0x5F, 0x43, 0x59, 0xE6, 0x7C, 0x45, 0x9C, 0xB6, 0xDD, 0xFD, 0x4A, 0xA2, 0x81, 0x3E, 0x6D, 0x4B, 0x02, 0x10, 0x03, 0x74, 0x10, 0x3D, 0xC3, 0x38, 0x81, 0x10, 0xC0, 0x15, 0xD0, 0xA7, 0xCF, 0x49, 0x24, 0x90, 0x3D, 0xAF, 0x04, 0xAD, 0x56, 0x48, 0x53, 0xB2, 0x18, 0x09, 0x1D, 0x45, 0xB5, 0x42, 0x29, 0x82, 0x08, 0xB1, 0xE7, 0x3E, 0x5D, 0xD8, 0x3E, 0xA6, 0x0B, 0x6D, 0xC8, 0x66, 0xD0, 0x18, 0x77, 0xD1, 0x4B, 0x47, 0x98, 0x7F, 0xC2, 0x13, 0x7E, 0xC2, 0xB2, 0x81, 0xA3, 0xF2, 0xC0, 0x75, 0x50, 0x4F, 0x6F, 0x4E, 0x0A, 0xC6, 0x60, 0x21, 0x05, 0x74, 0x7E, 0x43, 0x3D, 0xCA, 0x9D, 0x14, 0xC6, 0x39, 0xE9, 0x33, 0xA7, 0x12, 0xF2, 0x44, 0xB6, 0x00, 0x21, 0x72, 0x20, 0xC0, 0xB6, 0x81, 0x0F, 0xEA, 0x7E, 0x25, 0x64, 0x7E, 0xB3, 0x81, 0x17, 0x60, 0x0D, 0xF0, 0x95, 0x16, 0x20, 0x02, 0xC8, 0x66, 0x11, 0x2A, 0x8D, 0xD6, 0xA7, 0x3F, 0x90, 0x6E, 0xD4, 0xCE, 0xC6, 0x97, 0xCD, 0x0A, 0xA3, 0x55, 0xD8, 0xF8, 0xD4, 0x13, 0x26, 0x48, 0x24, 0x7B, 0x6C, 0x2F, 0xE6, 0x5F, 0xDD, 0x17, 0x83, 0x6D, 0x8C, 0x76, 0xD0, 0xF1, 0x70, 0xDF, 0x56, 0x52, 0x06, 0xD7, 0x40, 0x20, 0x70, 0xAC, 0xBC, 0xCD, 0x6C, 0x2C, 0x70, 0x5C, 0x30, 0x90, 0x29, 0x2C, 0x9A, 0x0A, 0x3B, 0x39, 0x2D, 0xC3, 0xF1, 0x17, 0x94, 0xBA, 0xBA, 0x3B, 0xFF, 0x02, 0xB8, 0x29, 0x5E, 0x07, 0x33, 0x0D, 0xC0, 0x0A, 0x88, 0x31, 0xE5, 0x52, 0xE0, 0x48, 0x14, 0xC4, 0xD8, 0xA9, 0x80, 0x0C, 0x40, 0x07, 0x7B, 0x01, 0x12, 0x78, 0xF3, 0x14, 0x02, 0x31, 0xA9, 0x6B, 0xD5, 0xF4, 0x23, 0x13, 0x34, 0xF8, 0xAA, 0x8D, 0xC3, 0xB7, 0x27, 0x6F, 0x86, 0x38, 0xDA, 0xCC, 0x5D, 0x34, 0x76, 0xFF, 0x6E, 0xEE, 0xBD, 0x1E, 0xC9, 0x6A, 0x2A, 0xC5, 0xDD, 0x22, 0xF2, 0xC8, 0x5A, 0x03, 0xCA, 0x80, 0x3B, 0x19, 0x37, 0x4F, 0x19, 0xB2, 0x4D, 0x1C, 0x25, 0x6C, 0xA4, 0x4A, 0x07, 0x31, 0x97, 0x2A, 0x4D, 0x76, 0x29, 0x1C, 0x13, 0xEE, 0x5F, 0x1A, 0x61, 0x1C, 0x4B, 0x06, 0xCB, 0xDE, 0x67, 0x18, 0xB2, 0x4D, 0x9C, 0x6C, 0xC0, 0x0D, 0x88, 0x06, 0x8A, 0x43, 0x9B, 0x6A, 0x56, 0x01, 0x58, 0x0F, 0x0C, 0xD8, 0xF3, 0x4A, 0x1A, 0x60, 0x0A, 0x50, 0xB7, 0xD6, 0x8D, 0x46, 0xC3, 0xAD, 0x33, 0x4A, 0x51, 0xB3, 0x2B, 0xF6, 0xDD, 0xAD, 0xB2, 0x7B, 0x26, 0x56, 0xA2, 0xEC, 0x6E, 0x0B, 0x66, 0xB9, 0x24, 0xAA, 0x39, 0x3B, 0x4E, 0x10, 0x94, 0xBC, 0x6E, 0x53, 0x62, 0x4F, 0xD3, 0x87, 0x00, 0x7A, 0x03, 0xC9, 0x87, 0x0B, 0x30, 0x01, 0x98, 0xDF, 0xB6, 0x4E, 0x5F, 0x8A, 0x33, 0x1E, 0x80, 0xD6, 0x9F, 0x4F, 0x43, 0x8E, 0x3C, 0x4F, 0xFC, 0xF4, 0xC8, 0xF2, 0x5C, 0xA3, 0x76, 0x1E, 0xD5, 0x8F, 0x7B, 0x01, 0x8B, 0x00, 0x5A, 0xA8, 0xA9, 0x05, 0xEC, 0x04, 0xDC, 0x6F, 0xF7, 0x55, 0x0C, 0x5C, 0x01, 0x29, 0xBC, 0x52, 0x0E, 0xB8, 0x02, 0xB9, 0xF8, 0x0A, 0xAD, 0x26, 0x7F, 0xD1, 0x68, 0x93, 0xAA, 0x8A, 0xBE, 0xD0, 0xF9, 0xFD, 0x82, 0x86, 0x45, 0x06, 0x56, 0xF3, 0x1A, 0xA1, 0xEF, 0xBD, 0x14, 0xB2, 0x85, 0xA9, 0x94, 0xF1, 0xBB, 0x9D, 0x44, 0xCE, 0xBD, 0x92, 0x1B, 0xFF, 0x1D, 0xA0, 0x5D, 0x3D, 0xA0, 0x09, 0x73, 0x70, 0x35, 0x6C, 0x3F, 0x8D, 0xDE, 0xF5, 0x64, 0x61, 0x35, 0x23, 0xB3, 0x0C, 0xBB, 0x5C, 0xC2, 0xF4, 0x6C, 0x9D, 0x32, 0x4A, 0x24, 0x7D, 0x6E, 0x6F, 0x6B, 0x03, 0x96, 0x40, 0xFA, 0xA0, 0x81, 0x8A, 0x41, 0x03, 0x9D, 0xB4, 0x6B, 0x03, 0x15, 0x77, 0x46, 0xC0, 0xE2, 0xC3, 0x04, 0x9C, 0x6F, 0x2A, 0xA0, 0x3D, 0x36, 0x3F, 0x46, 0x53, 0x14, 0x21, 0x78, 0x20, 0x0B, 0xAB, 0x14, 0x89, 0xAB, 0x91, 0xA3, 0x3A, 0x1F, 0xD3, 0x91, 0x30, 0x46, 0x72, 0xD2, 0x70, 0xAD, 0x75, 0x1C, 0x3B, 0xAE, 0x42, 0xBD, 0x6B, 0xA8, 0x71, 0x43, 0x3B, 0x59, 0xE0, 0xB6, 0x81, 0xCE, 0x1B, 0xB5, 0x81, 0x70, 0xA0, 0x14, 0xE6, 0x92, 0x31, 0x10, 0x05, 0x29, 0x82, 0x75, 0xF0, 0x63, 0x3C, 0x8F, 0x27, 0x7E, 0x60, 0x30, 0x5E, 0xF1, 0xC7, 0xD7, 0x60, 0x46, 0xA3, 0xD3, 0xF9, 0xE7, 0x80, 0x19, 0x10, 0x83, 0x1C, 0x54, 0x70, 0xF8, 0x02, 0x19, 0xF7, 0xFA, 0xC7, 0xFB, 0x41, 0x39, 0xE0, 0x0A, 0x48, 0x03, 0x96, 0xF3, 0x66, 0xD0, 0x6A, 0xF6, 0x45, 0x90, 0x77, 0x24, 0x52, 0xCA, 0xAB, 0xFE, 0xF2, 0x2B, 0x36, 0xD7, 0xE9, 0xB2, 0xBB, 0xE7, 0x36, 0xDF, 0xE3, 0xA7, 0x73, 0x78, 0xC6, 0x9C, 0x3E, 0xEF, 0xF7, 0xD8, 0x11, 0x8C, 0x2D, 0x32, 0x19, 0x80, 0x5E, 0x17, 0xBA, 0x0A, 0x06, 0x35, 0x58, 0x80, 0x24, 0x10, 0xFC, 0xDA, 0xC9, 0x15, 0xB7, 0xD9, 0x34, 0xFA, 0x96, 0x63, 0x5B, 0xF5, 0xBB, 0xCA, 0x1A, 0x9B, 0x8F, 0x9F, 0xB3, 0x41, 0x29, 0x70, 0xD4, 0x8F, 0xD8, 0x37, 0x43, 0x01, 0x19, 0xE8, 0xC0, 0x68, 0xD8, 0x05, 0xF4, 0x1E, 0x8B, 0x2E, 0xA0, 0x7B, 0xB0, 0x80, 0x63, 0x7B, 0x7B, 0x24, 0xFF, 0xCF, 0x64, 0xA0, 0xD5, 0x7C, 0x7A, 0xFF, 0x15, 0xEC, 0x54, 0x1B, 0xDA, 0x1E, 0x0B, 0x63, 0x4D, 0xCD, 0xA7, 0xA6, 0x53, 0xA7, 0xA3, 0xB3, 0x4C, 0x7D, 0x6D, 0x5D, 0x39, 0xF3, 0xF6, 0x34, 0xBD, 0xA7, 0x29, 0xCA, 0x4F, 0xD4, 0xE4, 0x6E, 0x18, 0xE3, 0x36, 0x90, 0xC1, 0x06, 0x9A, 0xE1, 0x28, 0x0E, 0x2E, 0xFF, 0xA9, 0x2E, 0xCD, 0xBD, 0x44, 0x66, 0x3C, 0xB0, 0xC3, 0xC6, 0x6E, 0xFA, 0x47, 0xCE, 0x46, 0xA8, 0x1B, 0x58, 0x03, 0x5B, 0x40, 0x14, 0x50, 0x0B, 0x68, 0x1D, 0xB0, 0x39, 0x9C, 0x00, 0x66, 0x40, 0xFB, 0x38, 0x13, 0x6C, 0xB0, 0x80, 0xA5, 0xDC, 0x58, 0x00, 0x4F, 0x80, 0x3A, 0x85, 0xB6, 0x69, 0xB4, 0x80, 0xBB, 0xC3, 0x61, 0xB4, 0x2E, 0x41, 0x25, 0x47, 0xEF, 0x99, 0x2E, 0x85, 0xDD, 0xAD, 0x15, 0x02, 0x1E, 0x59, 0x18, 0xE8, 0xBB, 0xAF, 0x9B, 0x7B, 0xAD, 0x27, 0x09, 0xAB, 0x38, 0x33, 0x43, 0x39, 0x9C, 0xE7, 0x3B, 0x35, 0xA0, 0x67, 0x38, 0xDD, 0xA0, 0x1B, 0x62, 0x15, 0x0C, 0xA4, 0x4E, 0xE5, 0xF8, 0xFB, 0xB0, 0x46, 0xF9, 0x42, 0x36, 0xF8, 0xAD, 0x29, 0x96, 0x7C, 0xDB, 0xDF, 0xED, 0xB8, 0x95, 0x83, 0x77, 0x01, 0xB6, 0x00, 0x6F, 0x20, 0xEA, 0xF6, 0x70, 0x88, 0x01, 0xE5, 0xF4, 0xB6, 0x00, 0xDB, 0x29, 0x93, 0x01, 0x78, 0x03, 0xEA, 0x80, 0x07, 0x5E, 0xD1, 0xA4, 0xD5, 0x12, 0x42, 0x3E, 0xC1, 0x14, 0x8F, 0x11, 0xF2, 0xB7, 0x66, 0x70, 0x6A, 0xFA, 0x11, 0x3B, 0xB2, 0x7A, 0x9C, 0xDA, 0x10, 0xC5, 0xA4, 0xAB, 0xAB, 0x7E, 0x8A, 0x75, 0xAE, 0x79, 0xF2, 0x5B, 0x82, 0xEE, 0x96, 0x5B, 0x08, 0xBE, 0x75, 0x30, 0xA7, 0x88, 0xB5, 0x01, 0xF6, 0x53, 0x67, 0x2D, 0x35, 0x45, 0xAA, 0x93, 0x8D, 0x07, 0x14, 0x9F, 0xFE, 0x11, 0x3E, 0x88, 0x23, 0x4A, 0xEF, 0xC5, 0x26, 0xB5, 0x00, 0x25, 0x95, 0xC3, 0x01, 0x4D, 0x40, 0x7A, 0x10, 0x80, 0x3A, 0x10, 0x49, 0x25, 0x17, 0xC0, 0x6C, 0xB0, 0x00, 0x11, 0x76, 0x61, 0x06, 0x6A, 0x03, 0x3D, 0xAF, 0xC4, 0x99, 0x9F, 0x05, 0xA9, 0x90, 0x0A, 0x8C, 0x69, 0xB7, 0x51, 0x05, 0x0C, 0xFC, 0x91, 0x46, 0x86, 0x28, 0xF5, 0xF4, 0x89, 0x9E, 0xF3, 0x7C, 0x5F, 0x0D, 0xA2, 0x6F, 0xF9, 0x2B, 0x67, 0xAA, 0x1A, 0x1B, 0x50, 0xC0, 0x06, 0xD4, 0xD7, 0x00, 0x1A, 0x30, 0x05, 0xB6, 0x03, 0x4A, 0x83, 0x16, 0x47, 0xD3, 0x9C, 0xB3, 0x3F, 0xC8, 0x69, 0x5C, 0xE0, 0x36, 0x2E, 0xB5, 0xAB, 0x79, 0xB4, 0x1E, 0x29, 0xFE, 0xAD, 0x83, 0x05, 0x74, 0xDE, 0x02, 0x7E, 0x67, 0xF4, 0x0A, 0x60, 0x0A, 0x78, 0x3E, 0x32, 0x01, 0x1B, 0x28, 0x1F, 0x2C, 0x20, 0x06, 0xD2, 0xC0, 0xDE, 0x80, 0x28, 0xD0, 0x46, 0xA3, 0x35, 0xEA, 0x89, 0x76, 0x4F, 0xFD, 0xAF, 0xA2, 0x16, 0x46, 0x7D, 0x22, 0x4C, 0x81, 0xB4, 0xFF, 0xA9, 0x35, 0xB2, 0xB4, 0x39, 0xFF, 0x4D, 0xFB, 0x1F, 0x66, 0xCA, 0x03, 0x74, 0xB9, 0x38, 0x3E, 0xB1, 0x1B, 0x8A, 0x9E, 0xFA, 0x39, 0x4D, 0x20, 0x1C, 0xF0, 0x00, 0xCC, 0x80, 0xA6, 0x1B, 0x72, 0x84, 0x1E, 0x92, 0xAD, 0xCB, 0x73, 0x5A, 0x0D, 0xD8, 0x7C, 0xF2, 0xD1, 0x81, 0xFC, 0xC0, 0xDB, 0x96, 0x1C, 0xF5, 0x23, 0x5F, 0x80, 0x6C, 0xA0, 0x17, 0x4D, 0x0E, 0x44, 0x00, 0xD5, 0x40, 0xE7, 0xAD, 0x5F, 0xEF, 0x93, 0x47, 0x28, 0x0E, 0x84, 0x00, 0x1E, 0x80, 0xCE, 0x2B, 0xDD, 0x40, 0x0A, 0xD0, 0xA7, 0x00, 0x77, 0x6C, 0x16, 0xD3, 0x23, 0x77, 0x3D, 0xB3, 0x73, 0xE5, 0x38, 0xBC, 0x37, 0x34, 0xD8, 0x54, 0xF0, 0xE3, 0x56, 0x98, 0xF1, 0x2D, 0x67, 0x3A, 0xC2, 0xAD, 0xFF, 0x18, 0xCD, 0x69, 0xB4, 0x99, 0x7A, 0x35, 0xD6, 0xAA, 0x7A, 0xC4, 0xF1, 0x0A, 0xE8, 0x60, 0x9C, 0xF3, 0xB7, 0x88, 0x05, 0xCC, 0x6B, 0xCA, 0xF2, 0xD6, 0x53, 0xEF, 0xC4, 0x1E, 0xD9, 0x2D, 0xBF, 0x5E, 0xCE, 0x58, 0x4B, 0x8F, 0xB1, 0x25, 0xCF, 0x94, 0xCD, 0x7D, 0xF7, 0xDD, 0x2E, 0x03, 0x32, 0x07, 0x0E, 0x54, 0xE2, 0x15, 0x09, 0x80, 0xC5, 0x69, 0x52, 0x83, 0x0D, 0x70, 0x1B, 0x8A, 0x02, 0x2C, 0x80, 0xD3, 0x8D, 0xA9, 0x68, 0xB4, 0x3D, 0xA3, 0xAF, 0x8F, 0xD1, 0x04, 0x19, 0x09, 0xE3, 0xE2, 0x66, 0xCB, 0x7B, 0x43, 0x15, 0x6F, 0x6C, 0x78, 0x59, 0x23, 0xD8, 0x4E, 0x04, 0xA7, 0x5C, 0x20, 0xE2, 0xAA, 0x08, 0xE5, 0xB4, 0xC2, 0x12, 0x0A, 0x9F, 0xBF, 0xDD, 0xAD, 0xA0, 0xD5, 0x00, 0x51, 0x20, 0xC6, 0x58, 0xB5, 0x61, 0x9E, 0x65, 0x53, 0x84, 0xCE, 0xD6, 0x01, 0x8A, 0x4F, 0xF2, 0x61, 0x26, 0x8B, 0x71, 0xC0, 0x20, 0x40, 0x84, 0x45, 0xEF, 0x43, 0x9C, 0x5A, 0xBA, 0x6A, 0xC0, 0x12, 0x90, 0x0D, 0xEC, 0xBC, 0xA1, 0xEB, 0x16, 0xA5, 0x93, 0x02, 0x62, 0x03, 0x1E, 0x80, 0xC9, 0xAB, 0x54, 0x07, 0xE0, 0xD7, 0x85, 0x3D, 0xC7, 0x66, 0xF2, 0x97, 0x1B, 0x35, 0xDA, 0x61, 0x08, 0xB0, 0x54, 0x20, 0xE8, 0xBE, 0x91, 0x23, 0x84, 0x4C, 0x83, 0x32, 0x44, 0xC3, 0xC2, 0xE0, 0x49, 0x2C, 0xBF, 0x95, 0xBE, 0xEB, 0x71, 0xAA, 0x55, 0xCD, 0x1E, 0x2A, 0xB7, 0xF3, 0xD3, 0x12, 0xA0, 0x67, 0xBC, 0x1B, 0xA8, 0x35, 0x60, 0x2A, 0x4A, 0x9E, 0xB8, 0xE8, 0xDD, 0xCD, 0xD4, 0xF2, 0xF2, 0x04, 0x45, 0xB2, 0x46, 0xFB, 0xFE, 0x5F, 0x2F, 0x01, 0x78, 0x47, 0x73, 0xE3, 0xD9, 0xFA, 0x4A, 0x58, 0x85, 0xED, 0x3F, 0xC8, 0x02, 0xD4, 0x81, 0x9C, 0x93, 0xB6, 0x05, 0xD0, 0x0B, 0xC8, 0x06, 0x7C, 0x03, 0x2B, 0xE6, 0x4D, 0x05, 0x5A, 0xE7, 0x95, 0x33, 0xD2, 0xF4, 0x73, 0xA3, 0xC5, 0xF6, 0x2F, 0x7E, 0x1C, 0xF1, 0xCB, 0x31, 0x45, 0xC9, 0x0C, 0x5C, 0xCB, 0xB1, 0xFF, 0x70, 0x52, 0xDE, 0xB0, 0x8B, 0x04, 0xB3, 0x49, 0xEF, 0xEE, 0x79, 0x4C, 0xF0, 0x3A, 0x55, 0x05, 0x6F, 0x75, 0x4D, 0x01, 0xAA, 0xC0, 0x36, 0x60, 0x6D, 0xE0, 0xAE, 0x44, 0xA1, 0xA7, 0x2F, 0x4F, 0xF9, 0x5A, 0x51, 0x36, 0xFC, 0x44, 0xF2, 0xE7, 0xCD, 0x81, 0xEC, 0x3B, 0xF5, 0xCC, 0xF9, 0x27, 0xD8, 0x77, 0x6E, 0xD0, 0x76, 0x40, 0x13, 0xB0, 0x00, 0x3C, 0x81, 0xD6, 0xBB, 0xCD, 0x71, 0x0F, 0xAA, 0x00, 0xEF, 0xBB, 0xF1, 0x61, 0xF1, 0xD3, 0x3A, 0xAF, 0xD0, 0x6A, 0xF6, 0x55, 0x15, 0x2C, 0xF7, 0x3F, 0x47, 0x8B, 0x46, 0xD8, 0xD0, 0x36, 0xB6, 0xA8, 0xCA, 0xF9, 0xF7, 0x7A, 0x5A, 0x27, 0x2B, 0x72, 0xF5, 0xE1, 0x8A, 0xB4, 0xD7, 0x3F, 0x74, 0x32, 0x57, 0x73, 0xC6, 0x5A, 0xD4, 0x93, 0x9D, 0x16, 0x80, 0x38, 0xB0, 0xE6, 0x95, 0x5E, 0xF3, 0x89, 0x5E, 0x7B, 0x3B, 0xC1, 0xDA, 0x19, 0x64, 0x3D, 0x40, 0xE0, 0xFA, 0xFC, 0xC2, 0xF3, 0x2D, 0x8E, 0xB3, 0x75, 0x01, 0x4B, 0x01, 0xED, 0x3B, 0xAF, 0x6C, 0x17, 0xE0, 0x1B, 0xC8, 0x35, 0xE8, 0xFB, 0x96, 0x2F, 0x0A, 0x14, 0x93, 0x72, 0x9E, 0xF8, 0x71, 0x19, 0x60, 0x0D, 0x88, 0x00, 0x9A, 0xF3, 0xA6, 0x1C, 0xAB, 0xF9, 0x5F, 0xD9, 0x14, 0x40, 0xE2, 0x8E, 0x77, 0x8D, 0xB5, 0xB4, 0xC0, 0x6F, 0x96, 0x89, 0xF3, 0x44, 0x16, 0x84, 0x5A, 0xFA, 0x37, 0x33, 0xF1, 0xC5, 0x4E, 0xC3, 0xA9, 0xBB, 0x56, 0xD3, 0x12, 0x48, 0x01, 0xC2, 0x01, 0x1B, 0xA8, 0x00, 0x12, 0xBF, 0x87, 0x76, 0x72, 0xD3, 0x77, 0x3C, 0xE9, 0x02, 0x57, 0x92, 0x0F, 0x37, 0x67, 0x9F, 0x87, 0xC6, 0xF8, 0xFE, 0x09, 0x44, 0xD0, 0x7A, 0xCB, 0xEF, 0x54, 0xAC, 0xB5, 0xEE, 0x31, 0x27, 0x4F, 0x62, 0x56, 0xF8, 0x9D, 0xFF, 0x1D, 0x06, 0xF8, 0x40, 0x38, 0xCA, 0x0A, 0xF0, 0x06, 0x92, 0x6F, 0x1E, 0xB3, 0x45, 0x7C, 0x29, 0x30, 0x1D, 0x0E, 0x01, 0x37, 0xF3, 0xBF, 0xFA, 0x2E, 0xA0, 0x7B, 0xBA, 0x26, 0xC9, 0x77, 0x55, 0x6C, 0x69, 0xA4, 0xC7, 0x58, 0x4F, 0x9C, 0x6A, 0x7F, 0xE6, 0x3A, 0xD1, 0x82, 0xFD, 0x44, 0xA6, 0x8A, 0x9E, 0x76, 0x63, 0xE0, 0x67, 0xF0, 0xE4, 0x2B, 0xA6, 0x02, 0x5E, 0xF7, 0x37, 0x6C, 0xBA, 0x29, 0x36, 0xD7, 0x86, 0x0D, 0xB0, 0x38, 0xE1, 0x49, 0xE3, 0x58, 0x3E, 0xA6, 0x0C, 0x40, 0x05, 0x68, 0x1B, 0x6B, 0xEF, 0xF5, 0x8F, 0x55, 0xAB, 0x74, 0x6E, 0xA5, 0x02, 0xEC, 0x04, 0xDC, 0xEF, 0x2E, 0xAA, 0x1E, 0x80, 0x35, 0x20, 0x7E, 0xA7, 0x30, 0x87, 0x00, 0xA9, 0x7C, 0x93, 0x56, 0xCB, 0xBF, 0x18, 0x1D, 0x5C, 0xC4, 0x8C, 0x1D, 0xEA, 0xF2, 0xCB, 0xE7, 0xE4, 0x16, 0x1F, 0x4A, 0x6D, 0x1C, 0xE5, 0x8A, 0x11, 0x6F, 0x2C, 0xC9, 0x78, 0x13, 0xFD, 0x58, 0x5C, 0xA4, 0xD4, 0xDD, 0x9F, 0xC1, 0xA2, 0x80, 0x17, 0xA0, 0x83, 0x45, 0x6D, 0x6A, 0x19, 0xC4, 0xE5, 0xD9, 0xE7, 0x6F, 0xEA, 0x63, 0x2E, 0x86, 0xD1, 0xF5, 0x5C, 0xD4, 0xF7, 0x18, 0xCF, 0xF5, 0x16, 0x48, 0x11, 0xA0, 0xD6, 0xE9, 0x94, 0x3D, 0x6F, 0x6E, 0xA0, 0xC6, 0x08, 0x6A, 0x80, 0x2B, 0x70, 0x72, 0x49, 0x1A, 0x68, 0x06, 0xEA, 0x1D, 0x50, 0x03, 0x4E, 0x66, 0xBA, 0x01, 0xB2, 0x00, 0xCD, 0x79, 0xE5, 0x58, 0xAD, 0xA6, 0xE7, 0xBE, 0x4E, 0xAB, 0xFF, 0xC4, 0xB5, 0xBD, 0x7B, 0x8A, 0xD3, 0xE3, 0x43, 0x5B, 0xC0, 0x93, 0xAB, 0x3E, 0x69, 0x68, 0x75, 0xAB, 0x7D, 0xE7, 0xAD, 0x10, 0xF0, 0x6B, 0x68, 0xC7, 0xBF, 0xCC, 0x13, 0x7E, 0x5D, 0xFB, 0x8E, 0xE5, 0xDA, 0x06, 0x9C, 0xBF, 0xE9, 0x78, 0x66, 0x4D, 0xA6, 0xC8, 0xC0, 0x00, 0xAF, 0xB9, 0x92, 0xF1, 0x96, 0x69, 0xBF, 0xB4, 0x66, 0x3F, 0xAE, 0x8F, 0xA0, 0x0C, 0x7F, 0xFE, 0x94, 0x61, 0xEB, 0xF8, 0x85, 0x3D, 0xA8, 0x95, 0x0B, 0xA8, 0x01, 0x7C, 0xD8, 0x73, 0x47, 0xE1, 0xB5, 0x6B, 0xC5, 0xE0, 0x68, 0x39, 0x3E, 0xF7, 0x97, 0x06, 0x34, 0x79, 0x49, 0xA5, 0xD5, 0x1A, 0xAA, 0x7F, 0x56, 0x10, 0x0F, 0x5D, 0xFA, 0x15, 0x4F, 0xD5, 0x2E, 0x5C, 0x24, 0xBA, 0x60, 0x66, 0x89, 0x11, 0x8C, 0x88, 0x49, 0x3E, 0xB9, 0x14, 0x98, 0xDF, 0xD6, 0xDA, 0x7A, 0x46, 0xD0, 0xBE, 0x3B, 0xB4, 0xE0, 0xCA, 0x0C, 0x6C, 0xC0, 0x0C, 0x90, 0x04, 0xAC, 0xEF, 0x6E, 0xA8, 0x16, 0x94, 0x14, 0x98, 0xEF, 0x2B, 0x77, 0x97, 0xD0, 0xC5, 0xBF, 0x76, 0xFD, 0xFC, 0x64, 0x72, 0xD2, 0x64, 0x94, 0x36, 0x8C, 0x19, 0xAA, 0x39, 0xBE, 0x0F, 0x01, 0x6A, 0x03, 0x5D, 0xE3, 0xED, 0x78, 0x52, 0x27, 0xF6, 0x02, 0xCC, 0x00, 0x6D, 0x40, 0x36, 0x7D, 0xA2, 0x40, 0x0E, 0x2A, 0xC7, 0xC9, 0x47, 0xAB, 0xE5, 0x3A, 0x3D, 0xA9, 0x6C, 0x2E, 0xB2, 0x5E, 0x10, 0xE0, 0x17, 0x94, 0x17, 0x60, 0x9E, 0x2F, 0xFD, 0x10, 0xA2, 0x50, 0xF6, 0x33, 0x58, 0x6D, 0xBD, 0x8E, 0x35, 0xB9, 0x96, 0x65, 0x56, 0x6D, 0x21, 0x3C, 0x07, 0xB8, 0x01, 0x52, 0x77, 0x9C, 0xCC, 0x05, 0x30, 0xAE, 0x41, 0x63, 0x0B, 0x86, 0x83, 0xCC, 0x01, 0x67, 0x86, 0x8B, 0xFC, 0x64, 0x7B, 0xE4, 0xFC, 0xCF, 0x4E, 0xF1, 0x37, 0x43, 0x70, 0xCA, 0x65, 0xEA, 0x76, 0x32, 0x1E, 0x67, 0x9D, 0x02, 0xE6, 0x40, 0x18, 0x55, 0x4F, 0x81, 0x58, 0x40, 0xFB, 0x63, 0xA7, 0x0D, 0x68, 0x03, 0x3B, 0x00, 0x65, 0x86, 0x4A, 0xD0, 0x6A, 0x1B, 0xC2, 0xB1, 0xDA, 0x68, 0xE1, 0x55, 0x81, 0x6E, 0x40, 0x3D, 0xB9, 0x7D, 0x47, 0xBD, 0xDD, 0xF9, 0x9B, 0xA1, 0xAF, 0x8D, 0xCA, 0x6D, 0x35, 0x7B, 0x8A, 0xDD, 0xF1, 0xD4, 0x4F, 0x32, 0xBA, 0x0C, 0xD4, 0x81, 0x1D, 0x00, 0xF7, 0xBB, 0xF6, 0xBB, 0xE5, 0x7A, 0x1D, 0x29, 0xC0, 0xBE, 0x17, 0x98, 0x5A, 0x9C, 0xE0, 0xF4, 0x27, 0x72, 0xA9, 0xA7, 0xBE, 0xF7, 0x78, 0xCE, 0x81, 0x32, 0x1E, 0x59, 0xC6, 0x86, 0xF1, 0xB8, 0x23, 0xDD, 0x81, 0x28, 0xA0, 0x36, 0x57, 0x7C, 0x80, 0xF9, 0x1C, 0x5A, 0x80, 0xC4, 0x3C, 0xF4, 0xB7, 0x57, 0x34, 0x40, 0x5F, 0xEE, 0x3E, 0x56, 0x13, 0x48, 0xF8, 0x6E, 0x9F, 0x4C, 0x9E, 0x69, 0xDB, 0x15, 0x88, 0x17, 0x44, 0xED, 0x89, 0x49, 0x25, 0x26, 0x78, 0xF4, 0x38, 0x86, 0x9B, 0x51, 0xD0, 0x3B, 0x5E, 0x70, 0x29, 0xF3, 0x6D, 0x3D, 0x35, 0x8B, 0xBB, 0x80, 0xDE, 0x40, 0x38, 0xB0, 0xF3, 0xCE, 0x8C, 0xE1, 0xDC, 0x90, 0x9C, 0x45, 0xC7, 0xE8, 0x4D, 0xBA, 0x9B, 0x5A, 0xEE, 0xBC, 0x5D, 0x69, 0x27, 0x95, 0xA6, 0x00, 0xBA, 0xCA, 0xB9, 0xF6, 0xEC, 0xA2, 0xEF, 0xE4, 0xEE, 0x57, 0x40, 0xFF, 0xC1, 0x1A, 0xA8, 0x01, 0x69, 0x14, 0x39, 0x04, 0xBC, 0x6F, 0x58, 0x00, 0x32, 0xD8, 0x0E, 0xE8, 0xA0, 0x8F, 0xD1, 0x14, 0x82, 0xB5, 0xDA, 0xB0, 0xA4, 0x60, 0x3D, 0x53, 0x1F, 0xE7, 0x97, 0xEF, 0x11, 0x3C, 0x8E, 0x69, 0xE2, 0x9A, 0x78, 0xB8, 0xEA, 0x52, 0x79, 0xE5, 0xFC, 0x3C, 0x8D, 0xC4, 0x59, 0xCC, 0x7F, 0x37, 0xFD, 0xC4, 0x22, 0x75, 0x29, 0xEE, 0x18, 0x7B, 0x9C, 0xF8, 0xAD, 0x55, 0x68, 0x7E, 0x1C, 0x16, 0xE3, 0x7F, 0x07, 0xBA, 0x7F, 0x6D, 0x3E, 0xF7, 0x91, 0xBF, 0x75, 0x1F, 0xDD, 0x9E, 0xE7, 0xD2, 0xCD, 0x6E, 0x26, 0xD4, 0x70, 0x5E, 0x0A, 0xA4, 0xF2, 0xE7, 0x00, 0x1D, 0x78, 0x00, 0x3D, 0x3E, 0x0D, 0x5B, 0x40, 0xE4, 0x0D, 0x37, 0x40, 0x13, 0x90, 0x06, 0x8C, 0x52, 0xDC, 0x9B, 0x46, 0x33, 0xE8, 0x70, 0x52, 0xA2, 0xB6, 0x1C, 0xDD, 0x02, 0x27, 0x8B, 0x54, 0x26, 0x40, 0xB5, 0xAC, 0xA7, 0x89, 0x95, 0x4D, 0x85, 0x70, 0x31, 0x14, 0x75, 0xB7, 0x88, 0xBE, 0x9A, 0x24, 0xED, 0x38, 0x32, 0xBF, 0xA7, 0x2A, 0x31, 0x80, 0x1C, 0xE8, 0xB8, 0xD9, 0x6A, 0x70, 0xD4, 0x31, 0xF9, 0x87, 0xB4, 0x11, 0x48, 0x53, 0x20, 0xC7, 0x11, 0x44, 0xFB, 0xB4, 0xD2, 0xFB, 0x35, 0xFE, 0xA7, 0x4B, 0xAB, 0x5E, 0x4F, 0xD3, 0x58, 0x15, 0xAA, 0x63, 0x8E, 0x5D, 0x0B, 0xC8, 0x0D, 0x74, 0xDE, 0x7F, 0xC0, 0x60, 0x97, 0xD1, 0x0D, 0x44, 0x0C, 0x04, 0x30, 0x07, 0xB6, 0x53, 0xEF, 0x6E, 0x3E, 0x19, 0x50, 0x4D, 0xA3, 0x39, 0xFE, 0x02, 0x1E, 0x98, 0x89, 0x9A, 0x9F, 0x4F, 0x6B, 0x45, 0xC1, 0x9F, 0x37, 0xDE, 0x48, 0x2D, 0x87, 0xCB, 0x27, 0x26, 0xF0, 0x32, 0xDE, 0x48, 0x4E, 0x4F, 0x7D, 0x34, 0x5E, 0x95, 0x31, 0x8B, 0xB4, 0x99, 0x89, 0xC7, 0xA9, 0x3D, 0xA0, 0x10, 0xCD, 0x06, 0x34, 0x7E, 0x5B, 0x57, 0x8F, 0x09, 0x75, 0xFE, 0x74, 0x71, 0x46, 0xE1, 0xE9, 0xBC, 0xC0, 0x10, 0xC2, 0xBC, 0xA2, 0x41, 0x63, 0x03, 0x4B, 0x01, 0x7B, 0xE6, 0xE5, 0xEB, 0x47, 0x8C, 0x05, 0x94, 0x4C, 0x6E, 0xEF, 0xC0, 0x06, 0x1D, 0x1C, 0xAF, 0x37, 0xF6, 0x9E, 0xFF, 0xB6, 0x80, 0x54, 0xA0, 0x85, 0x13, 0x83, 0x46, 0x8B, 0xF1, 0xE4, 0xDB, 0x64, 0xB3, 0x6D, 0x78, 0xCF, 0xB6, 0x8C, 0x1C, 0x17, 0x55, 0x17, 0x37, 0xFC, 0x81, 0x33, 0x59, 0x1B, 0xB2, 0x44, 0x59, 0x4C, 0xB9, 0x02, 0x22, 0x7E, 0x75, 0xCD, 0x72, 0xFA, 0x03, 0x4C, 0x56, 0x63, 0xC2, 0x12, 0x48, 0xDA, 0x03, 0x28, 0x1F, 0xB7, 0x9A, 0x4E, 0x22, 0x7C, 0x32, 0x36, 0xE8, 0xD1, 0x5F, 0xE7, 0x5A, 0x44, 0xBF, 0x31, 0xEA, 0x63, 0xBC, 0x91, 0x1F, 0xF2, 0xF8, 0x83, 0x3A, 0x00, 0x2B, 0x3A, 0xE4, 0xF0, 0x0A, 0xB5, 0xD8, 0x81, 0x71, 0x62, 0xD8, 0x84, 0x79, 0x50, 0xA3, 0x03, 0x68, 0x00, 0xB5, 0x46, 0x8E, 0x2D, 0x80, 0xF0, 0x41, 0x0D, 0x36, 0x60, 0x31, 0x30, 0x80, 0xBA, 0xE0, 0xE2, 0xB4, 0x19, 0x2E, 0xE7, 0x19, 0x85, 0x7B, 0x96, 0xF5, 0xAC, 0x96, 0x06, 0x4C, 0x1F, 0x0D, 0x73, 0x81, 0x20, 0xBC, 0xF8, 0xFC, 0x19, 0xFD, 0xB3, 0x52, 0x8E, 0xCD, 0x02, 0xF0, 0xAB, 0xCE, 0x47, 0x30, 0x0A, 0xC7, 0xBA, 0xB7, 0x9B, 0x55, 0x95, 0xE1, 0x12, 0xC0, 0x04, 0xD0, 0x9C, 0x57, 0x92, 0xAE, 0xD4, 0x31, 0x72, 0xC3, 0x04, 0x51, 0x80, 0x25, 0xB0, 0x26, 0x7E, 0xE0, 0x0A, 0xAC, 0x75, 0xC3, 0x69, 0x56, 0x68, 0x68, 0xC2, 0x4A, 0xF0, 0x03, 0x02, 0xB5, 0x60, 0xC1, 0x35, 0x10, 0x07, 0x8E, 0x59, 0x0D, 0x66, 0xDD, 0x32, 0x28, 0x40, 0xD6, 0x20, 0x00, 0x55, 0xC0, 0x02, 0xA8, 0xA0, 0xCD, 0x30, 0x0F, 0x77, 0x15, 0x12, 0xC4, 0x1D, 0xEE, 0xC7, 0x1A, 0xA5, 0x52, 0x33, 0xC7, 0xB7, 0x0D, 0x87, 0x3B, 0x58, 0x0C, 0xF3, 0x61, 0x17, 0x97, 0xB0, 0x4B, 0xEC, 0x9B, 0x1E, 0xDC, 0x68, 0x9E, 0x7B, 0x28, 0x24, 0x4F, 0x87, 0x7C, 0x01, 0x19, 0x40, 0x08, 0x60, 0x09, 0xE4, 0x4C, 0x08, 0xAE, 0xC0, 0x4B, 0x68, 0x8A, 0x31, 0x5A, 0x8C, 0x45, 0x8C, 0x2D, 0xE9, 0xD9, 0xBC, 0xFE, 0xEE, 0xB4, 0xDA, 0x4E, 0xE0, 0x61, 0x52, 0x85, 0x3A, 0x81, 0x30, 0xA0, 0x65, 0x16, 0xF0, 0x04, 0x24, 0xEF, 0xBE, 0x19, 0x62, 0x80, 0xCB, 0xC0, 0x01, 0x33, 0x40, 0x02, 0xD8, 0x0A, 0x28, 0xA7, 0xC7, 0xA6, 0xD1, 0x7A, 0xEE, 0xE7, 0x3D, 0x2A, 0xF8, 0x02, 0xB7, 0xB7, 0xEC, 0x39, 0xF3, 0x35, 0xD6, 0xC5, 0x08, 0xF8, 0xDE, 0xF9, 0x8A, 0x3B, 0x97, 0xB0, 0x2B, 0x28, 0xA5, 0x4D, 0x7F, 0x02, 0x63, 0x8E, 0xB3, 0xFE, 0xC7, 0xFF, 0x09, 0x20, 0x80, 0x00, 0x7C, 0x9D, 0x89, 0x8D, 0xEC, 0x48, 0x8F, 0x84, 0x5D, 0x79, 0x26, 0x24, 0x6F, 0xD2, 0x7F, 0xC7, 0x16, 0x15, 0x0C, 0xB5, 0x52, 0xF8, 0x07, 0x8B, 0xEB, 0x43, 0xA9, 0xD5, 0x33, 0x5D, 0x7C, 0x79, 0xF2, 0x08, 0xEE, 0x22, 0x9D, 0x03, 0x84, 0x01, 0xC2, 0x9F, 0x25, 0x50, 0x6B, 0x5E, 0x63, 0x7F, 0xD9, 0x59, 0x65, 0x4C, 0x0A, 0x5D, 0x16, 0x3E, 0x85, 0xAC, 0x97, 0x9F, 0x4B, 0xB6, 0xEF, 0x72, 0x2E, 0x5C, 0xE3, 0xF1, 0x29, 0x66, 0x2D, 0xC9, 0x34, 0xF1, 0xFD, 0x82, 0x62, 0x40, 0xD7, 0xFA, 0x60, 0x0F, 0xE0, 0x05, 0xCC, 0x8E, 0x50, 0x0F, 0xA0, 0x6A, 0x11, 0x40, 0x1A, 0xE0, 0x0E, 0xD8, 0xC2, 0x77, 0xF0, 0x3F, 0x4A, 0x88, 0xBD, 0xDF, 0xE1, 0xF8, 0x3A, 0x38, 0x05, 0x7F, 0xD9, 0x9E, 0xDD, 0x5D, 0x0A, 0xBF, 0x37, 0x70, 0x7B, 0xBB, 0x24, 0x76, 0x26, 0xCB, 0xB7, 0xAB, 0xDD, 0x49, 0x20, 0x2F, 0xA7, 0x9E, 0xEA, 0xA3, 0xAE, 0x2D, 0x7D, 0x76, 0x84, 0x02, 0xB1, 0xD0, 0x80, 0x09, 0x46, 0xF0, 0xE9, 0xF4, 0xDB, 0x5A, 0x7B, 0x60, 0x5D, 0x8F, 0x5D, 0x7D, 0x92, 0x1D, 0x9D, 0xB9, 0x32, 0x3D, 0xED, 0x93, 0xB5, 0xB9, 0xF6, 0xED, 0x77, 0xDF, 0x6F, 0xAB, 0xC1, 0x91, 0x79, 0x37, 0x20, 0x8B, 0xDC, 0x69, 0x19, 0x80, 0x0E, 0x10, 0x3B, 0xCB, 0xCE, 0xA2, 0x8A, 0xD7, 0xA0, 0x45, 0x00, 0xE7, 0xF0, 0x67, 0x40, 0x0A, 0xD0, 0x8E, 0x9F, 0xD5, 0xA1, 0xCD, 0x9E, 0xC0, 0xCA, 0x03, 0xD1, 0x67, 0xEB, 0xB4, 0x11, 0xC4, 0x39, 0xCA, 0xD1, 0x34, 0x58, 0x76, 0x92, 0xE6, 0x2F, 0x26, 0xD5, 0xCA, 0x7A, 0x02, 0xA0, 0xAF, 0x54, 0x14, 0xC5, 0x55, 0x03, 0x26, 0xA8, 0x5D, 0x29, 0x16, 0x27, 0xEF, 0xC5, 0xE4, 0xCC, 0x2E, 0xF8, 0x54, 0x16, 0xDF, 0xA5, 0x3A, 0xE2, 0x95, 0x0D, 0x45, 0xF0, 0x03, 0x22, 0xB6, 0x0A, 0x68, 0x01, 0xB6, 0x70, 0x07, 0x2A, 0x81, 0x51, 0x04, 0x15, 0x64, 0xA1, 0x05, 0x78, 0x02, 0x39, 0x40, 0x6F, 0xAB, 0x91, 0x93, 0x80, 0x39, 0x10, 0x0D, 0xD4, 0x01, 0x9A, 0x60, 0x1B, 0xE4, 0x85, 0x19, 0x10, 0x07, 0x28, 0xA3, 0xCD, 0xDE, 0xC6, 0x35, 0xBF, 0x73, 0x6D, 0x6D, 0x4D, 0x9A, 0x6E, 0x51, 0x18, 0xA2, 0xEE, 0x63, 0xB8, 0x8E, 0xCA, 0x0C, 0xF6, 0x27, 0xDF, 0x32, 0xF6, 0x37, 0x52, 0xAC, 0x7F, 0x35, 0x4F, 0x87, 0xE7, 0x45, 0x59, 0xF5, 0x3B, 0xFE, 0xF1, 0x07, 0xB0, 0x6D, 0x1C, 0xD0, 0x02, 0xD8, 0x42, 0xF7, 0x6B, 0x86, 0xAC, 0x8C, 0x5C, 0xFF, 0x29, 0x34, 0x46, 0x2D, 0xFA, 0x69, 0x59, 0x6C, 0x0A, 0xB8, 0x03, 0x91, 0x07, 0xE5, 0x84, 0x06, 0x58, 0x01, 0xEC, 0x6A, 0xAC, 0x07, 0x08, 0x03, 0xDA, 0xA1, 0x2D, 0x77, 0x0E, 0x60, 0x02, 0x64, 0x00, 0x13, 0x2B, 0x38, 0xB7, 0xD0, 0x03, 0x98, 0x02, 0x11, 0x40, 0x1B, 0x30, 0xB3, 0x22, 0x30, 0x4A, 0x9B, 0xD9, 0x66, 0x26, 0xE6, 0x9A, 0x8E, 0xD9, 0x21, 0x6B, 0xB3, 0xD3, 0xF8, 0xF7, 0x4B, 0x47, 0x1F, 0x18, 0xDF, 0x3D, 0x5D, 0xFB, 0xA7, 0x3A, 0xA4, 0xBC, 0x39, 0x01, 0x63, 0xAF, 0x57, 0x8C, 0xC7, 0x70, 0xF7, 0xA7, 0x5B, 0x82, 0x06, 0x90, 0x87, 0x9F, 0xD6, 0x74, 0x07, 0x28, 0xE5, 0x28, 0x80, 0xCD, 0x28, 0x75, 0x59, 0x03, 0xD3, 0x8D, 0x01, 0xBA, 0x0F, 0x85, 0x9A, 0x05, 0x45, 0x75, 0xEE, 0xBB, 0x37, 0xBD, 0x14, 0x70, 0x8C, 0x03, 0x65, 0xE1, 0xC0, 0x04, 0x7F, 0x06, 0x68, 0x02, 0x94, 0xFA, 0x13, 0x01, 0x2C, 0x16, 0xB3, 0xA8, 0x85, 0xDD, 0x0F, 0xA1, 0xDA, 0xF9, 0xFA, 0x85, 0xDA, 0xB7, 0xA2, 0xC1, 0xD6, 0x66, 0xCC, 0x74, 0xEA, 0x4D, 0x73, 0xA8, 0x0D, 0x65, 0xF5, 0xCA, 0x5C, 0xCF, 0x6A, 0xE5, 0xC9, 0xDB, 0xB3, 0x59, 0x03, 0x28, 0x79, 0x5C, 0xEA, 0xBB, 0x63, 0xD6, 0x6E, 0x3A, 0x7B, 0x7E, 0x2A, 0x1E, 0x10, 0x9C, 0x9F, 0x00, 0x27, 0x76, 0x89, 0xCD, 0x9D, 0xA9, 0x95, 0xB0, 0xB5, 0xFC, 0x10, 0x4F, 0x9B, 0x0B, 0x75, 0x36, 0xFE, 0xDB, 0x57, 0x6C, 0x03, 0xA1, 0x86, 0xDF, 0x1B, 0x07, 0x2C, 0x81, 0xA7, 0x7E, 0x23, 0x81, 0xF2, 0x45, 0x01, 0xAD, 0xF7, 0x02, 0x68, 0x02, 0x54, 0xB0, 0x73, 0x23, 0x81, 0x87, 0x63, 0x40, 0xC7, 0x42, 0x00, 0x8A, 0x50, 0xC6, 0xD0, 0x66, 0x88, 0x44, 0x95, 0xF5, 0x2F, 0x7E, 0x97, 0xF2, 0xF4, 0x52, 0xC5, 0xE0, 0x53, 0x08, 0x9B, 0x1C, 0x17, 0xA4, 0x9A, 0x47, 0x43, 0x25, 0x61, 0xC5, 0x61, 0xE6, 0x52, 0x03, 0xB8, 0x83, 0x04, 0xFE, 0x09, 0x12, 0x1C, 0x20, 0x0A, 0xD0, 0x01, 0x8E, 0x7F, 0xC4, 0xF4, 0xF7, 0x15, 0x1B, 0x56, 0xB9, 0xDF, 0x42, 0x76, 0xB2, 0x3F, 0x9B, 0x85, 0xF6, 0xAD, 0x2B, 0x11, 0xB1, 0xD8, 0x9F, 0xF9, 0x25, 0xDE, 0x9F, 0x14, 0x66, 0x78, 0xFE, 0x25, 0xC5, 0x01, 0x53, 0xC0, 0x0B, 0xE8, 0x4F, 0xF1, 0xE2, 0x34, 0xD0, 0x8B, 0x18, 0x80, 0x42, 0x46, 0x4F, 0x4B, 0xC3, 0x45, 0xE7, 0xA1, 0xD9, 0x12, 0x92, 0xB0, 0x65, 0xA8, 0x61, 0x3C, 0xA8, 0x72, 0xD7, 0x98, 0x75, 0xE5, 0xC9, 0x26, 0x03, 0x0E, 0x7E, 0xAF, 0x07, 0xC2, 0x79, 0xED, 0xFF, 0x55, 0xD7, 0xEE, 0x14, 0xBD, 0x63, 0x90, 0x00, 0xE0, 0xA7, 0x1E, 0x20, 0x1A, 0x50, 0x26, 0xF5, 0xF7, 0x82, 0xD1, 0x10, 0x56, 0x59, 0x7C, 0xFD, 0xE3, 0xF6, 0x26, 0x54, 0xD6, 0xA3, 0x02, 0x98, 0x75, 0xD7, 0x98, 0x30, 0x02, 0xE7, 0x76, 0x1E, 0xCF, 0xDC, 0x7A, 0xFF, 0xEE, 0x14, 0xFB, 0xFE, 0x94, 0x92, 0x79, 0x02, 0x63, 0xEB, 0x66, 0xA1, 0x8B, 0x8C, 0xCE, 0xB4, 0x06, 0x2A, 0x00, 0x5B, 0xC8, 0x01, 0xE0, 0x47, 0xBA, 0x0E, 0x1C, 0xB5, 0x99, 0xDD, 0x28, 0x6F, 0x17, 0xA5, 0x7C, 0x07, 0x93, 0xC6, 0x04, 0xFE, 0xAE, 0x74, 0xC4, 0xCA, 0x3A, 0xA1, 0xD3, 0xA6, 0x7A, 0x77, 0x22, 0x97, 0x8F, 0x06, 0xA2, 0xD5, 0xA7, 0xE8, 0xC7, 0x00, 0x1B, 0x40, 0x62, 0x0D, 0x9B, 0x40, 0xEB, 0x62, 0x5F, 0xF1, 0x59, 0x1B, 0xAE, 0x49, 0x34, 0xD7, 0xDA, 0x94, 0x85, 0x6C, 0x40, 0xF2, 0xD6, 0xBF, 0xB1, 0x5C, 0xB0, 0x87, 0x0B, 0xA3, 0x4D, 0x43, 0x33, 0xDF, 0x05, 0x06, 0x61, 0x40, 0x05, 0x30, 0x8C, 0xBE, 0x98, 0xDC, 0xC5, 0xA8, 0xB6, 0xD0, 0x04, 0x9E, 0x88, 0x83, 0xDE, 0x6F, 0x86, 0xEE, 0x2B, 0x45, 0xAB, 0x35, 0x02, 0x78, 0xA5, 0x3F, 0x9C, 0x41, 0xF4, 0x53, 0x2B, 0x59, 0x79, 0x89, 0x8C, 0xE3, 0x95, 0x56, 0xB3, 0x6E, 0xA8, 0xB2, 0x84, 0xDE, 0xE5, 0x2B, 0xF5, 0x15, 0xEC, 0xF8, 0x04, 0x6F, 0xA3, 0x16, 0x01, 0x98, 0xDC, 0xBA, 0x10, 0x7D, 0xEE, 0x98, 0x7C, 0x36, 0xE3, 0x69, 0x9F, 0xDA, 0xCB, 0xBC, 0x6B, 0x71, 0x4E, 0xAE, 0x45, 0x3F, 0x91, 0x76, 0x3D, 0x74, 0xAD, 0xEC, 0x9B, 0xD7, 0x50, 0x45, 0xF0, 0x14, 0xE8, 0x5E, 0x5B, 0x2C, 0xD4, 0x81, 0xCC, 0xCD, 0x96, 0x54, 0xA0, 0x1C, 0xC8, 0x00, 0x9E, 0xFA, 0xE7, 0x01, 0xEA, 0x00, 0x5D, 0xFB, 0x4A, 0xD3, 0x6A, 0x83, 0xCD, 0x5C, 0xA1, 0x58, 0x2D, 0xB6, 0xFD, 0x54, 0x2B, 0x30, 0x62, 0xA7, 0x11, 0x1C, 0x53, 0x94, 0xBB, 0xE6, 0xD9, 0xDA, 0x1F, 0xB7, 0xAF, 0xD5, 0x3E, 0xAA, 0x57, 0x6B, 0xA7, 0xD1, 0x8F, 0x3E, 0x17, 0x03, 0x8E, 0x9F, 0x5E, 0x04, 0xDD, 0x77, 0x54, 0xDC, 0xE5, 0x51, 0x3B, 0xB9, 0x3A, 0xCD, 0x3E, 0x0F, 0x19, 0xA8, 0x5C, 0xAB, 0xE5, 0xB9, 0x67, 0x7D, 0x51, 0xD9, 0x8A, 0x07, 0x45, 0x0A, 0x32, 0x30, 0x90, 0x75, 0xCE, 0x1D, 0x82, 0x3A, 0x0A, 0xA8, 0xDF, 0xE1, 0x04, 0x53, 0x20, 0x7B, 0x21, 0x80, 0xD5, 0x9D, 0x8B, 0x5B, 0x05, 0x0C, 0xBB, 0x34, 0x73, 0x86, 0x3E, 0x87, 0x10, 0x4C, 0x54, 0xB1, 0x5B, 0x89, 0xC8, 0x8E, 0x22, 0xD5, 0x42, 0x0D, 0x8B, 0x6B, 0x39, 0x56, 0x63, 0xB3, 0x2B, 0x3D, 0xDE, 0xF5, 0x13, 0xFC, 0xD4, 0xB9, 0x53, 0x11, 0x22, 0x01, 0x5F, 0x68, 0x7C, 0x4A, 0xA5, 0xF8, 0x90, 0x0D, 0x70, 0xF2, 0x2E, 0x52, 0x4E, 0x5F, 0xAC, 0xED, 0xBD, 0x3F, 0x0B, 0x5A, 0xDD, 0x5D, 0x33, 0x74, 0x1F, 0xDE, 0xE5, 0xEA, 0x4F, 0x22, 0x06, 0xB2, 0xAD, 0xEE, 0x48, 0xEA, 0xDC, 0xA6, 0x74, 0xBF, 0x8B, 0x77, 0x63, 0xE1, 0x71, 0xF7, 0x76, 0x6D, 0x01, 0xE2, 0x00, 0x39, 0xFB, 0xCA, 0xD0, 0x6A, 0x82, 0x16, 0x67, 0x35, 0xFF, 0x42, 0x81, 0x82, 0x3B, 0x06, 0x0E, 0xAD, 0x14, 0xC4, 0x12, 0x35, 0x58, 0x4F, 0x84, 0x7A, 0x38, 0xD5, 0xBB, 0x2C, 0xAF, 0x3F, 0x01, 0x29, 0xBD, 0x16, 0x26, 0x5C, 0xB6, 0x81, 0x01, 0xCC, 0x6E, 0x35, 0x8D, 0x3E, 0x8B, 0x7D, 0xD8, 0xE7, 0xD3, 0xEC, 0xD7, 0x15, 0xC8, 0xA0, 0xCF, 0x9F, 0xD1, 0x01, 0xE0, 0xF8, 0x95, 0xF2, 0x7C, 0xFA, 0xAA, 0xB1, 0xD6, 0x27, 0xB6, 0x17, 0x71, 0x6F, 0x03, 0x3E, 0x77, 0xD9, 0xCE, 0x11, 0xC0, 0x0D, 0x18, 0x7A, 0xCD, 0x05, 0xD0, 0x01, 0x18, 0x2F, 0xEC, 0x02, 0x72, 0xD1, 0xFB, 0x4A, 0x1C, 0x5A, 0x4D, 0x37, 0x0B, 0x2A, 0x70, 0x76, 0x2F, 0x83, 0x94, 0xB3, 0x30, 0xF3, 0xD4, 0x59, 0x42, 0xB4, 0x55, 0x3F, 0x82, 0xAD, 0xB4, 0xD0, 0xF3, 0xE1, 0xD1, 0xEB, 0xF8, 0x26, 0x2D, 0x8B, 0x7E, 0xCA, 0xD5, 0x5D, 0x80, 0x68, 0x40, 0x86, 0x59, 0xD9, 0x80, 0x26, 0x20, 0xFE, 0xAE, 0x3A, 0xF6, 0x94, 0xFC, 0xCF, 0x55, 0xDE, 0x14, 0x8F, 0x80, 0xB0, 0xF0, 0x15, 0x46, 0x4A, 0x66, 0xC1, 0x24, 0x76, 0xEE, 0x7E, 0x97, 0x6F, 0x12, 0xF9, 0x32, 0x7B, 0x21, 0x04, 0x86, 0x2D, 0x8B, 0xEB, 0x8E, 0x12, 0x58, 0x02, 0x39, 0x37, 0xE2, 0x13, 0x41, 0x10, 0x03, 0x9E, 0xFE, 0xE4, 0x4A, 0xAB, 0x21, 0xC2, 0x1E, 0x53, 0xBF, 0x0B, 0x4C, 0x9C, 0x82, 0x38, 0x40, 0xC7, 0xF6, 0xD7, 0x0A, 0x8C, 0x74, 0x9D, 0x1F, 0x4C, 0x07, 0xB9, 0x06, 0xA9, 0x6C, 0x3B, 0xFB, 0xAD, 0x2A, 0xF8, 0x8C, 0xB5, 0xD8, 0x41, 0xB6, 0x48, 0x01, 0xCC, 0xEF, 0x55, 0xBD, 0x08, 0xA6, 0xA8, 0xDC, 0x0B, 0xB8, 0x3E, 0xF9, 0xEA, 0x27, 0x3E, 0xBD, 0x1F, 0x56, 0x76, 0x99, 0xE7, 0xAE, 0x06, 0x24, 0x9F, 0x33, 0x0A, 0xEB, 0x16, 0x5E, 0x1B, 0xC6, 0x93, 0xF1, 0xED, 0x0E, 0xD4, 0xA7, 0x79, 0xA1, 0x27, 0x87, 0x15, 0x10, 0x09, 0x78, 0x03, 0xCA, 0xB1, 0xD6, 0x40, 0x0A, 0x50, 0xB5, 0x6F, 0x36, 0xAD, 0xE6, 0x28, 0x4F, 0xAA, 0x86, 0x1B, 0x44, 0xD7, 0x5B, 0xB0, 0xFE, 0x6F, 0x69, 0x87, 0xE7, 0xA2, 0x15, 0x41, 0xE9, 0xCC, 0x5D, 0x47, 0x83, 0xAB, 0xFF, 0xDD, 0xD5, 0x8C, 0x5D, 0x3F, 0xF0, 0xC9, 0x9F, 0x48, 0xA1, 0x17, 0x30, 0x0D, 0xB0, 0x2C, 0xAF, 0x13, 0x10, 0xBD, 0xBF, 0x0B, 0x0B, 0x9A, 0xE8, 0x2A, 0x39, 0x01, 0x68, 0xD2, 0xAD, 0xC9, 0xEB, 0x0A, 0x5E, 0xD1, 0xF3, 0x99, 0x4C, 0xEC, 0x2D, 0xC5, 0x40, 0x96, 0x50, 0x53, 0x9E, 0x5D, 0x46, 0xB6, 0x33, 0x79, 0x03, 0xF5, 0xA8, 0x61, 0x03, 0x51, 0x77, 0xDC, 0x25, 0x6C, 0x11, 0x80, 0x1B, 0xA0, 0x9F, 0x6E, 0x68, 0x1A, 0xC0, 0x38, 0x8D, 0x16, 0xEB, 0x9A, 0x4D, 0xE4, 0x2E, 0xAB, 0xA0, 0x8B, 0x86, 0xE9, 0x26, 0x2D, 0x6F, 0x34, 0x45, 0xE7, 0x07, 0xC9, 0x59, 0xA7, 0xD1, 0x5C, 0x13, 0x34, 0xE3, 0x12, 0x95, 0x47, 0x10, 0x91, 0x97, 0xD1, 0x5B, 0x32, 0x8F, 0xA5, 0x11, 0x15, 0x80, 0x35, 0x70, 0x74, 0xC1, 0x02, 0x16, 0xA6, 0xD0, 0xC7, 0xDB, 0x60, 0x8B, 0x73, 0x78, 0x9E, 0x95, 0xA8, 0x18, 0x46, 0xB6, 0x37, 0x3C, 0xEA, 0x8F, 0x96, 0xC2, 0xC9, 0xB7, 0x29, 0x8B, 0xFC, 0x25, 0x37, 0xD4, 0x9D, 0xC0, 0x5D, 0x2C, 0x8C, 0x77, 0xC0, 0x29, 0x0C, 0xB2, 0x70, 0x03, 0x6C, 0x00, 0x4E, 0xEC, 0x31, 0xA0, 0xEA, 0x9E, 0xDF, 0x99, 0xB4, 0xDA, 0x9A, 0x6B, 0x14, 0x97, 0x66, 0x6D, 0x94, 0x6A, 0x97, 0xE0, 0xEF, 0xE4, 0x32, 0xCA, 0x93, 0xB6, 0xD5, 0xDE, 0x3A, 0xFA, 0x6E, 0x65, 0xF3, 0x8D, 0xB3, 0xDB, 0xB3, 0x38, 0xCF, 0x5B, 0x6A, 0x68, 0x4F, 0xE1, 0x6B, 0x7C, 0xB2, 0x10, 0xB9, 0xC8, 0xB5, 0x53, 0xB0, 0xE8, 0x35, 0x5E, 0x6C, 0x0A, 0x81, 0x3F, 0xA1, 0x5B, 0x1E, 0xAD, 0xCA, 0xEE, 0x53, 0x94, 0x2A, 0x20, 0x57, 0x4D, 0x63, 0x3E, 0x6D, 0x38, 0xA6, 0x77, 0xA8, 0x06, 0x5D, 0xA0, 0x6B, 0xAE, 0x02, 0x5C, 0x81, 0x91, 0xDB, 0xB5, 0x3C, 0x44, 0x00, 0x95, 0x80, 0x0F, 0xA0, 0x05, 0x78, 0x30, 0xBB, 0x97, 0x56, 0x43, 0x10, 0xAA, 0x5C, 0xA1, 0xF9, 0x5F, 0x8A, 0xFE, 0x1B, 0xA6, 0x9B, 0x66, 0xA2, 0x57, 0xDD, 0xA1, 0xC6, 0x6C, 0x2E, 0x93, 0x51, 0x73, 0xE2, 0x23, 0xC5, 0xAF, 0x3C, 0xB3, 0xD2, 0x24, 0x4F, 0x54, 0x1A, 0xC8, 0x03, 0x28, 0xB3, 0x31, 0x06, 0xD0, 0x00, 0x64, 0x7F, 0xC6, 0xEA, 0xD6, 0x36, 0x4A, 0x24, 0x00, 0xC5, 0x65, 0x86, 0x72, 0x58, 0xCC, 0xF5, 0xE1, 0xE9, 0xEB, 0xCA, 0x0A, 0xF2, 0xA7, 0x94, 0xD3, 0x65, 0x03, 0x5C, 0x4C, 0xBE, 0xA7, 0xF1, 0x1C, 0x48, 0x03, 0x46, 0x77, 0x00, 0xAE, 0x29, 0x25, 0x80, 0xC8, 0x85, 0x00, 0x3A, 0x78, 0x65, 0x0C, 0xC8, 0x02, 0x56, 0xDD, 0xE7, 0x3D, 0xAE, 0x35, 0xBC, 0x9F, 0xE1, 0xDB, 0x14, 0x73, 0x7E, 0x38, 0xE3, 0xD8, 0x52, 0xB2, 0xF6, 0x3A, 0xE7, 0x08, 0xDA, 0x5B, 0x22, 0x65, 0xAD, 0xEE, 0x6B, 0x68, 0xEA, 0x95, 0x9D, 0x80, 0xF5, 0x6C, 0x4F, 0x07, 0x1C, 0x1E, 0x0A, 0x4C, 0xDE, 0xD9, 0x18, 0x23, 0x00, 0x4B, 0x0E, 0x39, 0xF2, 0x7C, 0x8D, 0xC0, 0x93, 0x68, 0xCE, 0x82, 0xC5, 0x4B, 0x9C, 0xEE, 0x72, 0x17, 0x19, 0x9E, 0x7A, 0xBB, 0x68, 0x2A, 0x07, 0xE7, 0xFE, 0xAC, 0x9E, 0x73, 0xC4, 0x1C, 0xDA, 0x7E, 0x97, 0xC5, 0x04, 0xDC, 0xEE, 0x42, 0x16, 0x73, 0x20, 0x63, 0x61, 0x40, 0x1C, 0x40, 0x07, 0x10, 0x03, 0x34, 0x81, 0x7E, 0xC6, 0xDA, 0x6C, 0xCB, 0x54, 0x63, 0xE8, 0x18, 0x4E, 0xD1, 0x2E, 0x24, 0x45, 0x4C, 0x6D, 0xD8, 0x3D, 0x30, 0xA8, 0x77, 0x00, 0xB2, 0x17, 0xF9, 0x37, 0x3B, 0xC1, 0x98, 0x2F, 0x9B, 0xCF, 0xF9, 0xF0, 0x16, 0x36, 0xC9, 0x01, 0xAC, 0xA9, 0xD4, 0x01, 0x58, 0x2F, 0xEC, 0xD5, 0xED, 0x40, 0x60, 0x08, 0x31, 0x4A, 0x07, 0x58, 0x1C, 0xE1, 0xB2, 0xFF, 0xF4, 0xB9, 0x43, 0x46, 0xDE, 0xAF, 0x44, 0xE9, 0x9D, 0xBD, 0x02, 0x3D, 0x45, 0x15, 0xB3, 0x51, 0x02, 0x58, 0x04, 0x71, 0x73, 0x06, 0x20, 0x1C, 0x60, 0x05, 0x83, 0x08, 0xC0, 0x7E, 0xE3, 0xEA, 0x0B, 0x01, 0xCE, 0xBE, 0x52, 0x03, 0xC4, 0xA2, 0x06, 0x3F, 0x4B, 0x83, 0xD1, 0xFC, 0xDC, 0x3D, 0x7F, 0x64, 0x6C, 0x93, 0x30, 0x14, 0x7F, 0x8B, 0x06, 0xDC, 0xEE, 0xAA, 0x88, 0xA9, 0x4D, 0x6E, 0x9C, 0x55, 0xFF, 0x21, 0x98, 0x01, 0xDB, 0x35, 0x90, 0x4C, 0xD7, 0x36, 0x76, 0xD5, 0xE6, 0x5F, 0xC6, 0x9C, 0x75, 0xC6, 0x4B, 0xF4, 0xAE, 0x75, 0x60, 0x6B, 0x68, 0x0B, 0x20, 0xF7, 0x67, 0xC2, 0xD0, 0x41, 0x01, 0x91, 0x80, 0x08, 0x70, 0x0E, 0x20, 0x0A, 0xE8, 0xA2, 0x67, 0x5D, 0x5F, 0x4F, 0xFE, 0xFC, 0xFA, 0xCD, 0xD9, 0xF9, 0x47, 0xD7, 0x13, 0x59, 0x40, 0xC9, 0xBA, 0x20, 0x03, 0x08, 0x01, 0x2A, 0x80, 0x2E, 0x60, 0xB6, 0xDB, 0xE0, 0x71, 0x40, 0x0A, 0xB0, 0x85, 0x07, 0xF0, 0x67, 0x33, 0xD9, 0xAE, 0xF3, 0xBD, 0x87, 0xC2, 0xD8, 0xE2, 0x86, 0xD9, 0xC8, 0xB8, 0x22, 0x1E, 0xE4, 0xBB, 0x1B, 0x47, 0xAC, 0x9E, 0x92, 0x5D, 0xFD, 0xDB, 0xF5, 0x7C, 0xE2, 0x9F, 0x79, 0xDE, 0xEA, 0x3A, 0x1C, 0xCB, 0xF6, 0x44, 0x83, 0x4F, 0x3C, 0x3F, 0x4E, 0x00, 0xF2, 0xE8, 0xA8, 0xE0, 0x93, 0x07, 0x83, 0x4C, 0xF7, 0x16, 0x5F, 0x74, 0x09, 0xFB, 0xC6, 0x4D, 0x03, 0x60, 0x17, 0x78, 0xF5, 0xC5, 0xC1, 0xC3, 0x92, 0x37, 0x6A, 0xB7, 0xDE, 0x5F, 0x04, 0x61, 0xD8, 0x28, 0x1A, 0xA8, 0x62, 0x00, 0x1A, 0x78, 0x5A, 0xFB, 0x2A, 0x10, 0x0E, 0xE4, 0x01, 0x22, 0x00, 0x27, 0x0E, 0xC0, 0x40, 0x8B, 0x26, 0x8D, 0xA6, 0xDB, 0x07, 0x4A, 0x37, 0xE0, 0xE5, 0xDB, 0x39, 0xC7, 0xB6, 0x07, 0xAA, 0xE2, 0xCC, 0x13, 0x8D, 0x2F, 0x56, 0xB6, 0xF7, 0xD2, 0xE1, 0xD9, 0x8C, 0xCD, 0x41, 0xAF, 0xB6, 0xDA, 0xC5, 0x83, 0x94, 0xB1, 0x2E, 0x89, 0x9B, 0x79, 0xE3, 0x53, 0xED, 0xCA, 0x4A, 0x51, 0x3E, 0xD6, 0xBC, 0x4D, 0xF1, 0xD3, 0xBE, 0x92, 0x30, 0xAF, 0x10, 0xFB, 0xEB, 0xAC, 0x6E, 0x52, 0x67, 0x24, 0x70, 0x7F, 0xCF, 0x01, 0x16, 0x4E, 0xE5, 0x26, 0x7D, 0xB4, 0xBE, 0xCD, 0x78, 0xFD, 0xF1, 0x17, 0x33, 0x16, 0x77, 0x3E, 0x21, 0xB9, 0x53, 0x40, 0x9F, 0xB5, 0xEB, 0x07, 0xC7, 0xF1, 0xB3, 0x2A, 0x20, 0x05, 0x80, 0xDB, 0x7F, 0xDE, 0x91, 0x66, 0x7F, 0xB3, 0xB3, 0xFE, 0x3C, 0x03, 0xB3, 0x5D, 0x58, 0xC6, 0x11, 0x93, 0x31, 0x59, 0xD7, 0x3E, 0x0B, 0x52, 0xFC, 0x9F, 0x3E, 0x8D, 0xDB, 0xCD, 0x80, 0x66, 0x09, 0x2C, 0xFF, 0xE1, 0x7B, 0xBD, 0xD5, 0x8C, 0xC5, 0xB1, 0x71, 0x9D, 0xB3, 0xC9, 0x3A, 0x33, 0x08, 0xB6, 0x5F, 0x78, 0x14, 0x50, 0xC6, 0x78, 0x1B, 0x1B, 0x6B, 0x01, 0xA5, 0x80, 0x1E, 0xE0, 0x0C, 0x60, 0x07, 0x60, 0xCE, 0x80, 0xA2, 0xB7, 0x1D, 0xCE, 0xEF, 0xB1, 0x3B, 0x4C, 0xAC, 0x7B, 0x3B, 0x77, 0x3E, 0xA6, 0xE2, 0x67, 0x89, 0xDD, 0x0F, 0xED, 0xCB, 0x12, 0x98, 0x5C, 0x79, 0x69, 0x05, 0xBC, 0x81, 0x3C, 0x40, 0x39, 0x30, 0x8A, 0xE4, 0x77, 0x35, 0xC0, 0x02, 0xC8, 0xA0, 0xCD, 0x9C, 0x36, 0x83, 0x6E, 0x8E, 0x05, 0x6A, 0x21, 0x78, 0xD8, 0xDC, 0x1E, 0xA2, 0x7A, 0x12, 0xB0, 0x8D, 0x1A, 0xC8, 0xFC, 0xDC, 0x8E, 0x72, 0x87, 0xA5, 0xCE, 0x53, 0xF7, 0xBB, 0x6B, 0xAD, 0xFB, 0x06, 0xA2, 0x18, 0xC1, 0xF0, 0xED, 0xBE, 0x53, 0x0C, 0x98, 0xE1, 0x67, 0xC9, 0x48, 0x4B, 0x2D, 0x18, 0x6F, 0xDB, 0x37, 0x8F, 0x02, 0xD6, 0x80, 0xD8, 0x22, 0x00, 0x73, 0xC0, 0x13, 0xFF, 0x69, 0xAE, 0x3E, 0xB6, 0x2D, 0xF1, 0xE2, 0xBC, 0x6D, 0xEF, 0x6A, 0x63, 0x5C, 0xBF, 0xC8, 0x0E, 0x30, 0xB9, 0x01, 0xAC, 0x00, 0x4A, 0x61, 0xD6, 0x23, 0x80, 0x24, 0xA0, 0x03, 0xD8, 0x22, 0x1A, 0xE8, 0xDA, 0xA8, 0x96, 0x02, 0x36, 0xB4, 0x59, 0xD0, 0x66, 0x3C, 0x94, 0x42, 0x5A, 0xA3, 0x0D, 0x59, 0x3A, 0x11, 0x88, 0x97, 0x9A, 0xFF, 0x60, 0x91, 0x18, 0xFA, 0x6D, 0x6F, 0xF7, 0x61, 0x49, 0xA0, 0xF2, 0xF1, 0x3B, 0xEC, 0x24, 0x61, 0x23, 0x52, 0x79, 0x17, 0x83, 0x4D, 0x11, 0xB6, 0x79, 0x2A, 0xEC, 0xDA, 0x81, 0x33, 0x80, 0xEC, 0x2F, 0x9C, 0xC0, 0x9B, 0x32, 0x40, 0x1C, 0x40, 0x65, 0x71, 0x00, 0x33, 0xC0, 0x1D, 0x98, 0xDA, 0x75, 0xE6, 0x4A, 0x5F, 0x41, 0x91, 0xD9, 0x06, 0xD3, 0x36, 0xE0, 0x69, 0x80, 0x2B, 0x50, 0x6B, 0x79, 0x11, 0xC0, 0x1A, 0x08, 0x01, 0x72, 0x51, 0x0A, 0x8C, 0xEE, 0xB6, 0xE1, 0x80, 0x06, 0x10, 0x4A, 0x9B, 0xE5, 0x65, 0x33, 0xF7, 0xE4, 0x01, 0x61, 0xD3, 0x10, 0x1C, 0x7F, 0xC4, 0x99, 0x1F, 0x2C, 0x7C, 0x93, 0x27, 0x8A, 0x0D, 0xAE, 0x91, 0xA2, 0x00, 0xB4, 0x3C, 0xEA, 0x78, 0xBB, 0xD0, 0x33, 0x16, 0x2E, 0xB0, 0x44, 0x3B, 0xA0, 0x8A, 0x87, 0xCA, 0xC0, 0x90, 0xB2, 0xAC, 0x0C, 0x9F, 0x62, 0xAD, 0x24, 0xBE, 0xF1, 0xEE, 0x81, 0x09, 0xFC, 0x00, 0x1A, 0x0B, 0x05, 0xEC, 0xDB, 0xEE, 0xDF, 0x61, 0xA5, 0x84, 0x41, 0x18, 0x76, 0xDB, 0x6F, 0x6B, 0x4F, 0x5C, 0x30, 0x3F, 0xCD, 0xED, 0xDD, 0x80, 0xCA, 0xED, 0x1C, 0x75, 0x16, 0x05, 0x48, 0x02, 0x1A, 0x80, 0x2B, 0x90, 0x06, 0x94, 0x03, 0x13, 0xB4, 0x59, 0x61, 0x78, 0xBB, 0xFD, 0xAB, 0xB3, 0xEE, 0x48, 0x47, 0xA3, 0x54, 0x48, 0x94, 0xC4, 0x0F, 0xE2, 0x86, 0xC3, 0xEA, 0xFC, 0xE6, 0xED, 0xB1, 0x71, 0x5E, 0x9E, 0x3E, 0x8A, 0x30, 0xF5, 0x76, 0x58, 0xA9, 0xBF, 0xF8, 0x8E, 0x2D, 0x1C, 0x38, 0x01, 0xC3, 0xBA, 0xDD, 0x5A, 0xBD, 0xD6, 0x40, 0xDF, 0x3E, 0xA5, 0x2D, 0xB4, 0xC5, 0x89, 0xF4, 0xEA, 0x25, 0x9D, 0xE7, 0x76, 0xC8, 0xF9, 0x00, 0x71, 0xDE, 0x02, 0x1E, 0x91, 0x47, 0x72, 0xEF, 0x30, 0xCD, 0xF8, 0xE3, 0x2E, 0x63, 0x57, 0x04, 0x31, 0x20, 0x59, 0xBD, 0x1D, 0xC0, 0x18, 0xD0, 0x05, 0xA4, 0x00, 0xCC, 0xAF, 0xEB, 0x7D, 0xF3, 0x14, 0xF0, 0x67, 0xB5, 0xFE, 0xCD, 0xFF, 0x16, 0xB4, 0xB6, 0x74, 0xB9, 0x85, 0xAE, 0x50, 0x13, 0x07, 0x3B, 0x61, 0x5B, 0x14, 0xFF, 0x07, 0x97, 0x87, 0x31, 0x88, 0xF7, 0x91, 0x07, 0x1B, 0x36, 0x5A, 0xBF, 0xBB, 0xBF, 0xB8, 0x00, 0xA6, 0x77, 0x13, 0x80, 0x11, 0xA0, 0xCF, 0xE2, 0xEA, 0x5E, 0x14, 0x7F, 0xFD, 0xA7, 0xF4, 0x35, 0x49, 0x3C, 0xB2, 0x62, 0x93, 0x40, 0x06, 0xA0, 0x0D, 0x98, 0xBD, 0xD2, 0xDE, 0x70, 0x7D, 0x30, 0x03, 0xFF, 0x76, 0x09, 0x54, 0xDD, 0x49, 0xC7, 0x16, 0xB7, 0x36, 0xAB, 0x0D, 0x50, 0xBD, 0x30, 0x20, 0x14, 0x60, 0x59, 0xCB, 0xEC, 0xA7, 0x53, 0x40, 0x3B, 0xAD, 0xB6, 0xEA, 0x43, 0xD9, 0x3F, 0xFD, 0xF8, 0xD4, 0xBC, 0xA3, 0x52, 0x0A, 0xAB, 0x45, 0xDA, 0x06, 0xE6, 0x12, 0xA1, 0x47, 0x24, 0xC6, 0x5B, 0xD2, 0xE7, 0x9D, 0xDF, 0x10, 0xA8, 0xCE, 0xA7, 0x08, 0x6A, 0x61, 0x02, 0x3C, 0x31, 0x98, 0x45, 0xD6, 0x82, 0x9E, 0x70, 0x5E, 0xF8, 0x65, 0xAD, 0x27, 0xAF, 0x96, 0x97, 0x3D, 0x50, 0x07, 0x9E, 0xA8, 0x61, 0xEE, 0xA7, 0x7E, 0xA3, 0x35, 0x38, 0x47, 0x50, 0xFE, 0xE5, 0x92, 0x95, 0x00, 0x5E, 0x41, 0xBE, 0x8C, 0xF5, 0x09, 0x18, 0xC0, 0x5A, 0x03, 0x75, 0x40, 0x8A, 0x6E, 0x50, 0x20, 0x0A, 0xB0, 0x03, 0xB8, 0xED, 0x9B, 0xB5, 0x66, 0x93, 0x6D, 0x8E, 0x69, 0xFD, 0xAF, 0xB6, 0xE4, 0xA0, 0x15, 0xAD, 0x06, 0x91, 0xBC, 0x2C, 0x70, 0xB4, 0xF6, 0xFC, 0x7C, 0x7E, 0x47, 0x02, 0xBD, 0x2F, 0x1C, 0x83, 0x6D, 0xFE, 0xB3, 0xC9, 0xD4, 0xF8, 0x47, 0x83, 0x6C, 0x80, 0xEC, 0xBB, 0xBB, 0xF8, 0x14, 0x90, 0x02, 0x78, 0xEE, 0x2F, 0x30, 0xCE, 0x12, 0x77, 0x1D, 0x9D, 0xCA, 0x1D, 0xED, 0x74, 0xBB, 0xC5, 0xCE, 0xCA, 0x81, 0xBE, 0xA2, 0x2E, 0x72, 0x9E, 0xF1, 0xE1, 0xB9, 0x5F, 0x9B, 0x22, 0x48, 0xB6, 0x0E, 0x87, 0x45, 0xD4, 0x5E, 0xF0, 0x06, 0xA0, 0x87, 0x40, 0x7B, 0x41, 0xF5, 0xCE, 0x02, 0x62, 0x00, 0x3B, 0x00, 0x15, 0x2F, 0x4C, 0x69, 0x35, 0xF9, 0x6D, 0xC3, 0x5A, 0xFD, 0xAF, 0x06, 0xAA, 0x56, 0x2D, 0xB8, 0x19, 0xE0, 0x7A, 0xAA, 0xC8, 0x0D, 0x55, 0xCC, 0x1B, 0x19, 0x74, 0x30, 0xA8, 0x63, 0xF4, 0xA5, 0x7D, 0xEA, 0x09, 0xF2, 0x0E, 0x1C, 0x9F, 0xF3, 0xD1, 0x78, 0x5B, 0x68, 0xDF, 0x7A, 0xEE, 0x9E, 0x80, 0x2E, 0x68, 0xD8, 0x3E, 0xB7, 0x6B, 0x57, 0xED, 0x6E, 0x1D, 0x92, 0x07, 0xE0, 0x22, 0xC0, 0xE2, 0xDB, 0x27, 0xDC, 0x72, 0xA9, 0x03, 0xE3, 0x54, 0xCE, 0x02, 0x84, 0x5B, 0x68, 0x39, 0x0A, 0xA8, 0xB9, 0xA3, 0x53, 0xAC, 0xCB, 0xD2, 0x5E, 0x08, 0x25, 0x4C, 0x81, 0x68, 0xC0, 0x14, 0x70, 0xBE, 0x12, 0xB4, 0x9A, 0xEE, 0x06, 0x2E, 0xBF, 0x9A, 0x63, 0x1D, 0xE8, 0x0F, 0x65, 0xE2, 0x8E, 0x1E, 0x2A, 0x74, 0x3A, 0x43, 0xEB, 0x67, 0x1A, 0x93, 0x21, 0xF2, 0x1F, 0x54, 0x30, 0xBE, 0xCD, 0xF3, 0xFA, 0xAE, 0xC2, 0x48, 0x2A, 0x0F, 0x3A, 0xE0, 0x8B, 0x43, 0x1B, 0x0A, 0x20, 0x75, 0x0B, 0x3C, 0xDE, 0xEA, 0xEE, 0xFD, 0x68, 0x0D, 0x56, 0xE1, 0x61, 0x2B, 0x60, 0x06, 0x08, 0x83, 0x79, 0xD7, 0x7F, 0x13, 0x69, 0x18, 0x6F, 0x4F, 0xA1, 0xF8, 0xD3, 0x30, 0xD9, 0xC1, 0x52, 0x1C, 0x25, 0x01, 0xD4, 0x73, 0xD5, 0x03, 0x8A, 0xEA, 0x56, 0x07, 0x38, 0x75, 0x6F, 0x0E, 0x59, 0x80, 0x0F, 0xB0, 0xAE, 0x90, 0x77, 0xAC, 0xD9, 0x2F, 0xF6, 0x99, 0xA6, 0xFF, 0xE6, 0x77, 0x4D, 0x0E, 0x2E, 0x6C, 0x70, 0x01, 0x96, 0x40, 0xD2, 0x5E, 0x06, 0x8E, 0x9F, 0x44, 0x32, 0x85, 0x4D, 0x5D, 0xCD, 0xF3, 0xDC, 0xBF, 0x0B, 0x9B, 0xF5, 0xBD, 0x11, 0xA4, 0x02, 0x9E, 0x77, 0x2B, 0xC0, 0x1E, 0x20, 0x03, 0x08, 0x03, 0xBA, 0xEE, 0x7A, 0x4E, 0xD9, 0x4F, 0x7E, 0x09, 0x77, 0xE2, 0x7C, 0x08, 0x04, 0xD0, 0xFB, 0xEB, 0xC7, 0x19, 0xD1, 0x5F, 0x23, 0x72, 0xDB, 0x0D, 0xE6, 0x61, 0x7C, 0xE4, 0x9E, 0x1F, 0x0F, 0xE8, 0x22, 0xE2, 0xAE, 0x6F, 0xC9, 0x04, 0xA2, 0x01, 0xA3, 0x1F, 0x6A, 0x80, 0x3C, 0x40, 0x3D, 0xAA, 0x51, 0x34, 0x9B, 0xE3, 0x62, 0x7F, 0xE6, 0x5F, 0x3B, 0x74, 0x5D, 0x6B, 0xBB, 0x71, 0xA3, 0x12, 0x26, 0x57, 0x64, 0x18, 0x97, 0x85, 0x44, 0x6E, 0x47, 0x54, 0xE6, 0x55, 0x6D, 0xEC, 0xF3, 0x1D, 0x6C, 0x74, 0x13, 0xF1, 0x80, 0x50, 0x80, 0xF5, 0x9D, 0xE9, 0xE1, 0x9F, 0x06, 0x0C, 0xB1, 0x60, 0xE1, 0x28, 0x87, 0xD7, 0xD3, 0x1C, 0x48, 0x6E, 0x8D, 0x4E, 0xF1, 0xBB, 0x91, 0x48, 0xF1, 0x53, 0xBE, 0x43, 0x0F, 0x57, 0xB2, 0xDD, 0x29, 0xAF, 0xC6, 0x1A, 0xB8, 0x7A, 0xDE, 0x35, 0x51, 0x7E, 0xAF, 0x53, 0x6A, 0x40, 0x1D, 0x20, 0x1D, 0x60, 0x95, 0xD9, 0x2C, 0x72, 0xF1, 0x88, 0x3F, 0x1B, 0xAD, 0x16, 0xDB, 0x35, 0x5F, 0x1E, 0x9D, 0xC8, 0xFA, 0x49, 0xE2, 0x17, 0x62, 0xA0, 0x90, 0x08, 0xD3, 0x3E, 0xFA, 0x8B, 0x69, 0xAB, 0x2A, 0xF4, 0x00, 0xD4, 0x69, 0xAD, 0x4F, 0xBC, 0x3D, 0xD6, 0x6A, 0x7E, 0xCF, 0x38, 0x53, 0x40, 0x3F, 0xCB, 0x9C, 0x32, 0x63, 0x23, 0x01, 0x37, 0x20, 0xAF, 0x86, 0x98, 0xF9, 0xD8, 0xDE, 0x69, 0x58, 0x01, 0xE4, 0x00, 0xE7, 0x07, 0x5B, 0x3B, 0xF9, 0xF3, 0x66, 0xAD, 0xD5, 0xD8, 0x9C, 0xE4, 0x59, 0xA0, 0xB8, 0x27, 0xEA, 0x01, 0xD2, 0x80, 0x39, 0xB7, 0xB0, 0xCF, 0x9C, 0x5B, 0x00, 0x51, 0x6A, 0x1F, 0x0E, 0x90, 0xF9, 0x29, 0x75, 0xE3, 0xA6, 0xF2, 0x8C, 0xB5, 0x5C, 0x07, 0x79, 0x6E, 0xB2, 0xA0, 0x6E, 0xAA, 0xA9, 0xC1, 0xA3, 0x90, 0xBA, 0x1B, 0x87, 0x6F, 0x97, 0x7F, 0x5B, 0xC7, 0xEB, 0x7F, 0xA8, 0xEF, 0x3F, 0x7B, 0x21, 0x43, 0x2B, 0xCE, 0x90, 0xFE, 0x00, 0xD9, 0x77, 0x7B, 0x81, 0xF4, 0x7D, 0xA5, 0xA8, 0x88, 0xBE, 0x88, 0x5B, 0xE3, 0xCB, 0x29, 0x67, 0xC8, 0x9F, 0x25, 0x20, 0x9C, 0x68, 0x09, 0xE4, 0xFE, 0xFA, 0xD1, 0xB7, 0x8A, 0x94, 0x59, 0xCC, 0x7F, 0x1D, 0xD0, 0x8C, 0x15, 0x47, 0xB9, 0x01, 0xA9, 0x02, 0x18, 0x7B, 0x3A, 0x8B, 0x74, 0x60, 0x62, 0x61, 0x40, 0x1F, 0x20, 0x06, 0x70, 0xBD, 0x1B, 0x02, 0x88, 0xD1, 0x68, 0xB5, 0xA2, 0x7F, 0x85, 0xEB, 0x47, 0xD4, 0xEF, 0xA2, 0x92, 0x11, 0xB0, 0xEB, 0x96, 0x46, 0xE9, 0x24, 0x6C, 0xB7, 0x13, 0x5B, 0x73, 0xD8, 0x7B, 0xE5, 0x8E, 0xE6, 0x31, 0x4F, 0x45, 0x1E, 0x05, 0x2E, 0x46, 0x3C, 0x1A, 0x48, 0xBB, 0x4B, 0xEC, 0xDA, 0xEF, 0x1C, 0x00, 0x55, 0x80, 0xEB, 0xF8, 0x61, 0x4C, 0x47, 0x81, 0x60, 0xAA, 0x45, 0x7F, 0x3A, 0x0A, 0x0C, 0x20, 0x57, 0xAB, 0xAA, 0x7A, 0x54, 0x83, 0xDA, 0x59, 0x8B, 0xB5, 0x9E, 0xDB, 0x5C, 0x27, 0x6D, 0xD3, 0x6D, 0xB9, 0x99, 0x85, 0xBD, 0x0E, 0xA3, 0x45, 0xC9, 0x5E, 0xFD, 0x72, 0x31, 0x77, 0xC2, 0x5F, 0x2B, 0x50, 0xFC, 0xF4, 0xD4, 0x38, 0xD0, 0x6A, 0xBD, 0x42, 0x26, 0x09, 0xAF, 0xC0, 0x6F, 0x2E, 0x06, 0x12, 0xD8, 0xA4, 0xD6, 0x53, 0x54, 0xAC, 0x9B, 0x42, 0x19, 0x0B, 0xBC, 0x08, 0x72, 0xB7, 0xE6, 0x92, 0xAB, 0xD6, 0xD8, 0x1E, 0x01, 0x02, 0xE5, 0x3A, 0x7C, 0x1C, 0x10, 0x85, 0x03, 0x69, 0xD7, 0x68, 0xAA, 0xF0, 0x66, 0x00, 0xCC, 0x18, 0xB2, 0xBC, 0xD6, 0x68, 0xDC, 0xCC, 0x80, 0x4B, 0x0B, 0x4D, 0xF0, 0xE9, 0x2E, 0xFC, 0x04, 0xEA, 0xAA, 0x41, 0xDF, 0x3A, 0xE4, 0x47, 0xFE, 0xD1, 0xF7, 0x53, 0x3C, 0x62, 0x59, 0xA1, 0x77, 0xF5, 0x8E, 0xAF, 0x7D, 0x45, 0x00, 0xEF, 0x45, 0x00, 0xBA, 0x43, 0x75, 0x16, 0x15, 0xC0, 0xE0, 0x17, 0xDE, 0xCD, 0x60, 0x70, 0xEA, 0x73, 0x85, 0xEB, 0xA0, 0xA0, 0x48, 0x34, 0x0E, 0x87, 0x47, 0x8B, 0xFC, 0x90, 0x5E, 0xBB, 0x3D, 0xE7, 0xB6, 0x94, 0x30, 0xF6, 0x28, 0xB8, 0x24, 0xD1, 0x5D, 0xDE, 0x45, 0x59, 0xFC, 0xAF, 0xE9, 0x58, 0xDE, 0xB1, 0x5E, 0xEF, 0x5B, 0x12, 0xAD, 0x0E, 0x20, 0x09, 0x50, 0x4A, 0x95, 0xBF, 0x60, 0xB5, 0xE0, 0xBA, 0xFD, 0x89, 0x7E, 0x47, 0x00, 0x52, 0x77, 0x20, 0xCA, 0xE7, 0xAD, 0x60, 0xA8, 0xF5, 0xEB, 0x9F, 0xA7, 0xC2, 0xC3, 0x6C, 0xB3, 0xF1, 0x03, 0x88, 0xF5, 0xC1, 0x9F, 0x45, 0x24, 0xD0, 0x8B, 0x91, 0xFB, 0x53, 0xF5, 0x8D, 0xA1, 0xF2, 0x16, 0x8D, 0xA6, 0x7F, 0xB1, 0x02, 0x8B, 0x57, 0x5B, 0x56, 0x98, 0xCB, 0x01, 0x47, 0x44, 0xB3, 0x98, 0x63, 0x10, 0x6B, 0x35, 0xFD, 0x87, 0xF5, 0xE0, 0xD6, 0xD3, 0xE1, 0x21, 0xD3, 0x37, 0x56, 0xC0, 0xAA, 0x08, 0xCA, 0x06, 0x59, 0xBC, 0x12, 0x48, 0x67, 0xDD, 0xD7, 0xFD, 0x57, 0xAF, 0x15, 0x80, 0x38, 0xC0, 0x1C, 0xFB, 0x88, 0xDB, 0x5D, 0xAE, 0x9F, 0x52, 0x30, 0x69, 0xC0, 0x84, 0x0A, 0x58, 0x6F, 0x15, 0xC6, 0xE0, 0x13, 0xB3, 0xEA, 0xC3, 0x36, 0x4F, 0x79, 0x2B, 0xB4, 0x02, 0x3E, 0x03, 0x9C, 0xE5, 0x07, 0x68, 0x5F, 0x5F, 0x9A, 0x00, 0x96, 0x80, 0x2F, 0xA2, 0x81, 0x32, 0x60, 0xCE, 0x82, 0x69, 0xE3, 0x45, 0x9B, 0xC9, 0xDA, 0x8C, 0x5E, 0xFA, 0x5A, 0xB5, 0x46, 0x45, 0x70, 0xC8, 0x02, 0x2E, 0x78, 0xDB, 0x25, 0x75, 0x58, 0x4B, 0x6F, 0xA8, 0xF3, 0xB9, 0x5A, 0xBF, 0xC9, 0x5F, 0x4B, 0x43, 0xEA, 0xBF, 0x31, 0x83, 0xA4, 0xF7, 0x5B, 0xB3, 0x00, 0x8E, 0x85, 0x3E, 0x16, 0xB0, 0x2B, 0x15, 0xCD, 0xAC, 0x17, 0xB5, 0x0F, 0x9F, 0x68, 0x37, 0x20, 0x83, 0x87, 0x69, 0x40, 0x28, 0x50, 0x0E, 0xCC, 0x61, 0xEC, 0x7B, 0x6D, 0xB7, 0xA5, 0x1D, 0xAC, 0xB1, 0x52, 0x56, 0x32, 0xD0, 0xBD, 0xE4, 0x9B, 0x0A, 0x6D, 0x40, 0x27, 0xFC, 0x4A, 0x66, 0x40, 0x16, 0xD0, 0x01, 0x63, 0x9F, 0x03, 0x48, 0x02, 0xE6, 0x40, 0x0C, 0x50, 0xB1, 0xF2, 0x48, 0x46, 0xA3, 0x21, 0x25, 0x4D, 0x7B, 0xD6, 0xB9, 0x55, 0x88, 0xF9, 0x94, 0xC0, 0xA5, 0x52, 0xEB, 0x4C, 0xEB, 0x5E, 0x87, 0x59, 0x61, 0xBB, 0xC6, 0xF6, 0x69, 0x5F, 0xB5, 0x2B, 0xAF, 0x57, 0xD6, 0x1C, 0xEF, 0xEC, 0x21, 0x5A, 0x80, 0x58, 0x6B, 0xD7, 0xE3, 0x76, 0xD9, 0x99, 0x3B, 0x80, 0x25, 0xD0, 0x7C, 0xC5, 0xD8, 0xC4, 0x12, 0x96, 0x64, 0xD9, 0xB0, 0x2B, 0x70, 0x72, 0xB1, 0x81, 0xCB, 0x47, 0xE6, 0x6E, 0xCD, 0x4B, 0xC5, 0x3F, 0xAA, 0x2C, 0x31, 0x46, 0xE5, 0x6B, 0xB4, 0x53, 0x6B, 0xB4, 0x00, 0xE6, 0x07, 0x6C, 0x51, 0xB0, 0x8F, 0x00, 0xBE, 0x08, 0x5D, 0xE4, 0x62, 0x80, 0x0C, 0xA0, 0xD7, 0x68, 0x56, 0x34, 0x9A, 0x6D, 0xE5, 0x3E, 0xEA, 0x7D, 0x34, 0x06, 0xC1, 0x8C, 0xEE, 0x8D, 0xDD, 0x2A, 0xBC, 0x85, 0x47, 0x30, 0xCB, 0xA4, 0xB1, 0x6E, 0x58, 0xFE, 0x46, 0x5A, 0xBD, 0xC7, 0x5A, 0x7E, 0x2A, 0xF6, 0x12, 0xD6, 0xA7, 0xD4, 0xCE, 0x39, 0x7A, 0xF7, 0x93, 0xC9, 0x46, 0x95, 0xB8, 0xEC, 0x50, 0xA3, 0x8B, 0x93, 0x8D, 0x71, 0x4B, 0xE7, 0x2F, 0x00, 0x2C, 0xE6, 0x8B, 0x01, 0x8E, 0xE3, 0x95, 0x0A, 0xC0, 0x05, 0xE8, 0x9D, 0xF8, 0xBE, 0x99, 0xED, 0x4F, 0x15, 0xCF, 0x1A, 0x04, 0x98, 0xC7, 0x41, 0x1B, 0xB1, 0x2E, 0xD9, 0x01, 0xAA, 0xEF, 0x30, 0x5D, 0x2E, 0x2A, 0x17, 0xB1, 0x18, 0xA0, 0x0D, 0x98, 0xC6, 0x8C, 0x0F, 0xA3, 0xCD, 0x1C, 0xFF, 0xE0, 0xAC, 0xC6, 0x71, 0x44, 0xF2, 0x52, 0x64, 0x93, 0x98, 0x12, 0xDF, 0xDD, 0xB6, 0x46, 0x6A, 0xBB, 0xDB, 0x0C, 0xF2, 0x87, 0xFC, 0x7C, 0xB4, 0x96, 0xE3, 0x3C, 0x4D, 0x53, 0x99, 0xCA, 0x02, 0x8B, 0xC8, 0x82, 0x25, 0xE5, 0xBD, 0xB3, 0x2C, 0x29, 0x2D, 0x28, 0x6B, 0x5E, 0x05, 0xA8, 0xB5, 0xCC, 0x74, 0x0A, 0xE5, 0x0C, 0xA4, 0xD0, 0xE0, 0xD3, 0x47, 0x04, 0x50, 0x6A, 0x02, 0x2E, 0x7A, 0x5E, 0x71, 0xBE, 0x79, 0x0A, 0xCB, 0x14, 0x1E, 0x76, 0xC0, 0x65, 0x1D, 0xBC, 0x30, 0xCC, 0x15, 0x9F, 0x99, 0xF5, 0x94, 0xB3, 0x36, 0x4B, 0xCE, 0x22, 0x00, 0xCE, 0xEA, 0x39, 0x40, 0xF3, 0xA1, 0x02, 0x2D, 0x34, 0x1A, 0x83, 0x05, 0x3B, 0xFF, 0xD3, 0x10, 0xDA, 0xEE, 0x5D, 0x30, 0xBC, 0x51, 0x81, 0x71, 0x76, 0xF4, 0xF9, 0x6C, 0xD4, 0x25, 0xAE, 0x76, 0x22, 0xFD, 0xA9, 0xCD, 0x56, 0x1E, 0xB1, 0xC5, 0xD6, 0x14, 0x02, 0x18, 0xF5, 0x59, 0x15, 0x06, 0xA5, 0x10, 0x28, 0xD5, 0xC8, 0x6B, 0x91, 0x8C, 0x00, 0x7E, 0xA4, 0xA5, 0x8F, 0xEF, 0x43, 0x05, 0x24, 0x01, 0x1B, 0x20, 0xE2, 0x6F, 0x7B, 0x55, 0x7D, 0xCE, 0x0F, 0xC5, 0x3A, 0xDA, 0x8D, 0x39, 0xA4, 0xC1, 0x3E, 0xD9, 0xFB, 0xAD, 0xF3, 0x5E, 0xD2, 0x5C, 0x80, 0x96, 0xCF, 0x5A, 0x16, 0x80, 0x19, 0x10, 0x8B, 0x2A, 0x60, 0x36, 0x2E, 0x24, 0x8F, 0xD1, 0x12, 0xF7, 0x36, 0xDD, 0x93, 0x86, 0x0A, 0x22, 0x4F, 0x19, 0xD8, 0x07, 0xC6, 0x7F, 0xE8, 0x94, 0xCD, 0x2E, 0xF4, 0x75, 0x66, 0xEA, 0xDB, 0xB8, 0xA6, 0xED, 0xA3, 0xEA, 0xED, 0xD4, 0x6E, 0x65, 0x6A, 0x45, 0x1B, 0x15, 0x14, 0xD6, 0x30, 0x01, 0x50, 0x85, 0xDC, 0x1A, 0x10, 0x03, 0x86, 0x66, 0x62, 0xA9, 0xB5, 0x02, 0x93, 0x80, 0x2D, 0x8E, 0xAF, 0x1F, 0x42, 0x81, 0xDA, 0x87, 0xCA, 0x82, 0xED, 0x61, 0x54, 0xFA, 0xD5, 0x39, 0x74, 0x00, 0x4A, 0x73, 0x1B, 0x9E, 0x28, 0x60, 0xB6, 0x60, 0xC5, 0x1A, 0xE0, 0xA6, 0x7B, 0x1A, 0x90, 0x01, 0x54, 0x17, 0xB6, 0x68, 0xC0, 0x1D, 0x18, 0xA7, 0xD1, 0x0A, 0x36, 0xF7, 0xF8, 0x37, 0xBF, 0x9B, 0xBB, 0xFF, 0x9B, 0x03, 0xB9, 0x43, 0xD9, 0xDB, 0x14, 0x5C, 0x04, 0x8E, 0x06, 0x72, 0x3E, 0x28, 0x0F, 0xB0, 0xBA, 0xD2, 0x96, 0x53, 0x3F, 0x02, 0x61, 0xD1, 0x77, 0x3B, 0x46, 0x5F, 0xD0, 0x83, 0x3B, 0x05, 0xA4, 0x03, 0xA6, 0x80, 0x24, 0x10, 0xBA, 0x6F, 0x0E, 0x30, 0x0B, 0xF5, 0xBB, 0x8D, 0x7D, 0xF5, 0xED, 0x30, 0xAF, 0xDA, 0x9F, 0xB1, 0xD2, 0x83, 0x2A, 0x1D, 0x40, 0x3C, 0xA9, 0x8E, 0x36, 0xB7, 0xAE, 0xEB, 0xEC, 0x84, 0xF6, 0x8F, 0x72, 0x4E, 0x73, 0x0B, 0x8F, 0x85, 0x7E, 0x0A, 0x54, 0x07, 0x70, 0x03, 0x76, 0x55, 0x79, 0x8F, 0x69, 0xFD, 0xCF, 0x05, 0xFD, 0xB8, 0x7A, 0x70, 0xA8, 0x6D, 0x47, 0x9B, 0x68, 0xDD, 0x42, 0x4C, 0x4A, 0x37, 0x41, 0x3A, 0xA1, 0x36, 0x8F, 0xDB, 0xE9, 0x4D, 0xFB, 0x84, 0x0B, 0xD8, 0xA5, 0x94, 0xDF, 0x3E, 0x81, 0xFE, 0x74, 0x13, 0xD1, 0xDE, 0x4B, 0xC3, 0x00, 0x71, 0x3E, 0x1E, 0xF2, 0xB5, 0xB6, 0x04, 0x90, 0x0A, 0x9C, 0xB5, 0xF6, 0xA3, 0x0E, 0x48, 0xF4, 0xE2, 0xD2, 0x5E, 0x8F, 0x47, 0xBE, 0xF9, 0x49, 0xC3, 0xA9, 0x78, 0xAF, 0x6F, 0xFD, 0xE7, 0x97, 0xA5, 0x17, 0xC3, 0x80, 0x0E, 0x98, 0xD2, 0x13, 0xE8, 0xB8, 0x51, 0x72, 0xFF, 0x4C, 0x17, 0x2E, 0x6C, 0x09, 0x44, 0xAB, 0xCD, 0x3F, 0xDB, 0xD1, 0xD5, 0x05, 0x79, 0xA6, 0xAC, 0x47, 0x84, 0x37, 0xA3, 0xD7, 0xCF, 0xEE, 0xBF, 0xAC, 0x7D, 0x13, 0x45, 0x01, 0x04, 0xDC, 0x43, 0x39, 0xDF, 0xC6, 0xD0, 0xB2, 0x46, 0x30, 0xFA, 0x77, 0x28, 0x1E, 0xB9, 0x08, 0xB9, 0x65, 0xCA, 0xF4, 0x7C, 0x94, 0x0B, 0x05, 0xB8, 0xFD, 0x94, 0xF9, 0x7C, 0xB2, 0xB5, 0xA1, 0x15, 0x70, 0x0C, 0x10, 0x59, 0x28, 0x40, 0x75, 0x34, 0x97, 0xC3, 0xAB, 0x2C, 0xAF, 0x20, 0x6F, 0xD6, 0x42, 0x3E, 0x27, 0x67, 0x2D, 0x60, 0x94, 0x07, 0xE8, 0x3D, 0x7C, 0x2E, 0xB2, 0x81, 0x12, 0x20, 0x0A, 0xB0, 0x85, 0x2A, 0x60, 0x54, 0x9E, 0xE0, 0x58, 0xDB, 0x83, 0x5E, 0x55, 0xFD, 0x9B, 0xC0, 0xEE, 0x58, 0xB9, 0x05, 0xDA, 0xE7, 0xF1, 0xC9, 0x79, 0x2B, 0x84, 0x00, 0x2B, 0x7F, 0xDF, 0x21, 0x0C, 0x56, 0xB3, 0xAF, 0xD5, 0x0E, 0x75, 0x74, 0x18, 0x2A, 0xCA, 0xBB, 0x71, 0xAB, 0x3D, 0x45, 0x51, 0x00, 0x5B, 0x77, 0x85, 0x03, 0x72, 0x16, 0x05, 0xA4, 0x03, 0xDD, 0x54, 0x43, 0xE4, 0x64, 0x04, 0x6C, 0x00, 0xF7, 0x85, 0x02, 0x5D, 0x97, 0xD4, 0xC5, 0x79, 0xC2, 0x22, 0xC5, 0x61, 0xC5, 0x94, 0xF5, 0xDD, 0x91, 0x64, 0x80, 0x5A, 0x8B, 0xF2, 0x90, 0xAD, 0x0A, 0x94, 0x01, 0xD9, 0x80, 0x07, 0xC0, 0x94, 0xF1, 0x72, 0x60, 0x78, 0xDB, 0x69, 0x5A, 0x4D, 0x36, 0xA9, 0x0C, 0x15, 0x05, 0x93, 0xB5, 0x6A, 0xAE, 0x8A, 0xD5, 0x38, 0x6A, 0x05, 0xB6, 0x0A, 0x4E, 0x85, 0xD5, 0x58, 0x53, 0x74, 0xA1, 0x9A, 0xFA, 0x7A, 0x3A, 0x4C, 0x9F, 0x31, 0xF3, 0xE6, 0xDB, 0x51, 0x6D, 0xC9, 0x99, 0x52, 0xFA, 0x64, 0xFB, 0x39, 0x13, 0xE6, 0xED, 0x0A, 0xF0, 0x8F, 0x7E, 0xFB, 0x0C, 0x04, 0x1E, 0x52, 0x33, 0xF3, 0x00, 0xA1, 0x8B, 0x5A, 0xC4, 0xD5, 0x47, 0x54, 0x9F, 0x59, 0x98, 0x4C, 0xBE, 0xF1, 0x57, 0xB9, 0x19, 0x27, 0x0D, 0xDC, 0x34, 0xFB, 0x96, 0x26, 0x9D, 0xAD, 0x72, 0x0F, 0x03, 0x3A, 0x80, 0xD1, 0x4F, 0x49, 0x64, 0x2F, 0xEC, 0x7D, 0x88, 0x51, 0xBD, 0x56, 0x53, 0xF8, 0x60, 0xE2, 0xFC, 0xC2, 0x04, 0x11, 0xBA, 0x7B, 0x8A, 0xC1, 0x4E, 0xDB, 0x8A, 0x6B, 0x22, 0xE8, 0xC4, 0xC3, 0xDE, 0x80, 0xB1, 0x36, 0x41, 0xAB, 0xE5, 0x7F, 0xEA, 0x9B, 0x48, 0xDD, 0x95, 0x70, 0x4F, 0xAE, 0x23, 0x7B, 0x4C, 0x52, 0xE4, 0xF3, 0xE3, 0xB1, 0xD0, 0x00, 0xBC, 0x80, 0x5A, 0x53, 0xAE, 0x81, 0x5A, 0x01, 0x77, 0x20, 0x08, 0xBA, 0x4D, 0x68, 0xB5, 0x8E, 0x57, 0xC2, 0x7B, 0xF6, 0x46, 0x1E, 0x4F, 0x9D, 0x7B, 0xCA, 0x2B, 0xFC, 0xA1, 0x0B, 0xFC, 0x11, 0xB8, 0x32, 0x1C, 0xC0, 0x15, 0x08, 0x01, 0x7C, 0x00, 0x23, 0x12, 0x60, 0xFD, 0xB8, 0x2A, 0xAD, 0x66, 0x9B, 0xF1, 0xD4, 0x48, 0xA3, 0x09, 0x26, 0xF8, 0x14, 0xDB, 0xCC, 0x6E, 0xAA, 0x7A, 0x6C, 0x15, 0xE0, 0xEC, 0x50, 0x51, 0xA6, 0x41, 0x5E, 0x2D, 0x2D, 0xFD, 0xBC, 0xEB, 0x92, 0xF8, 0x13, 0xE4, 0x98, 0xFA, 0xA4, 0x69, 0x33, 0xFE, 0x58, 0x6F, 0x5B, 0x31, 0x7D, 0x10, 0x7A, 0xF7, 0x19, 0x68, 0x07, 0xD8, 0xCB, 0x22, 0xEB, 0xD6, 0x57, 0xED, 0x01, 0xD2, 0x5F, 0xD7, 0xBF, 0x3F, 0x92, 0x4F, 0x4D, 0x11, 0x8B, 0xBD, 0x2C, 0xA4, 0xF2, 0xEC, 0xB6, 0xE7, 0x8F, 0x60, 0x7A, 0x04, 0x30, 0xB5, 0xB9, 0x55, 0xCC, 0xB4, 0x1A, 0x82, 0x95, 0xB9, 0x40, 0x26, 0xE0, 0x05, 0xA4, 0xE2, 0x15, 0x0B, 0x1A, 0xCD, 0x9F, 0xB4, 0x9F, 0x32, 0x54, 0xFE, 0xE7, 0x6F, 0x30, 0xEB, 0xEA, 0x4E, 0xD0, 0x5F, 0x6C, 0x18, 0x1B, 0xEE, 0xD8, 0x49, 0xED, 0x9D, 0x98, 0xDC, 0x14, 0x50, 0xC3, 0x72, 0xE7, 0x29, 0x54, 0xDD, 0xB2, 0x87, 0xD2, 0x3B, 0x3A, 0x86, 0xC2, 0x8E, 0x80, 0xFA, 0x5D, 0xF9, 0x23, 0xF3, 0xC6, 0xE3, 0x86, 0x2D, 0x3C, 0x9F, 0x37, 0x5B, 0x01, 0x3B, 0x80, 0x50, 0x90, 0x35, 0x5E, 0xE5, 0xD7, 0x61, 0x8E, 0xE6, 0xD3, 0x61, 0x75, 0x6D, 0x68, 0xCF, 0xCD, 0x7E, 0x9E, 0xC4, 0x54, 0x58, 0xD4, 0x16, 0x9D, 0xBB, 0x27, 0x14, 0x30, 0xB1, 0x70, 0xA0, 0x02, 0xF0, 0x85, 0x26, 0xC0, 0xAD, 0x41, 0x94, 0x56, 0xA3, 0xAF, 0xD6, 0x51, 0x29, 0x2F, 0x70, 0xE0, 0xC6, 0xF4, 0xAA, 0xEA, 0xD9, 0x5E, 0x8A, 0x6D, 0x1B, 0x71, 0xCE, 0xA6, 0xA8, 0xEB, 0xE5, 0x54, 0x93, 0xCF, 0x19, 0x37, 0x58, 0xC3, 0x65, 0x72, 0x3B, 0xCE, 0xA2, 0xDF, 0x00, 0x36, 0x66, 0x01, 0x5E, 0xB1, 0x3B, 0x14, 0x44, 0xDF, 0x63, 0x5F, 0x6E, 0x5C, 0x7F, 0xCA, 0x12, 0x9E, 0xBA, 0x16, 0x01, 0xDA, 0x81, 0x9C, 0xF7, 0xBF, 0x82, 0x15, 0x08, 0x66, 0xEA, 0xD7, 0x5F, 0x5D, 0x9B, 0x51, 0x73, 0x60, 0x1F, 0xC7, 0xEE, 0x41, 0xFD, 0x6B, 0xD4, 0x82, 0x1F, 0xA0, 0xF7, 0xD2, 0x60, 0x0A, 0xF8, 0xC2, 0x12, 0x50, 0x07, 0xA4, 0x00, 0x1B, 0xEC, 0x99, 0x12, 0x34, 0x5A, 0xAE, 0xE8, 0x1C, 0x5A, 0xD6, 0xA4, 0x3B, 0xCA, 0x0B, 0x8E, 0x6D, 0xD1, 0x6D, 0x62, 0x4B, 0x50, 0x5B, 0x3D, 0xC6, 0xF9, 0xB9, 0x66, 0x43, 0x8A, 0x4E, 0x8E, 0x3B, 0x43, 0x5E, 0x86, 0xC7, 0xD9, 0xAB, 0xBF, 0x26, 0x1C, 0x13, 0x18, 0xA4, 0xAC, 0xC7, 0x64, 0x9B, 0xCD, 0xBB, 0x2F, 0xA7, 0x2A, 0xC0, 0xDF, 0x93, 0xA0, 0xDF, 0x17, 0x9F, 0x7C, 0x5F, 0xF1, 0x00, 0xC4, 0x00, 0x4D, 0xC0, 0xF4, 0x29, 0x90, 0x5D, 0xDB, 0xC7, 0x2B, 0x4B, 0xC6, 0x54, 0x25, 0x7F, 0x5C, 0xDA, 0x91, 0x6F, 0xD2, 0x16, 0x96, 0xDF, 0x5B, 0xAF, 0x83, 0x42, 0x1D, 0x05, 0x68, 0x2E, 0x62, 0x71, 0x6E, 0x58, 0x00, 0x93, 0xB4, 0x5A, 0x6D, 0x23, 0x2E, 0x45, 0xE4, 0x38, 0x02, 0x37, 0x7D, 0x17, 0x8C, 0x69, 0x6B, 0x9C, 0x0E, 0xD5, 0xB7, 0x00, 0x2C, 0x50, 0x43, 0x2B, 0xF1, 0xB3, 0xD6, 0x7C, 0x6F, 0x06, 0xD2, 0x3C, 0x46, 0x5C, 0xF1, 0x21, 0xDC, 0x17, 0xAE, 0x9E, 0x1F, 0x47, 0xF0, 0x33, 0x3A, 0xC6, 0xED, 0x96, 0x9F, 0x7D, 0x7C, 0x99, 0x79, 0x6B, 0xF8, 0xA6, 0xDE, 0x1D, 0xEC, 0x3C, 0x81, 0x68, 0x20, 0xED, 0x4A, 0x82, 0x61, 0xCD, 0x70, 0x3D, 0xE7, 0x07, 0xCF, 0x3D, 0x75, 0x31, 0xD9, 0xFB, 0xDC, 0x0A, 0xE3, 0xB9, 0x3B, 0xA8, 0x2E, 0x28, 0x1C, 0x70, 0x16, 0x62, 0xFF, 0x85, 0x06, 0xCC, 0x80, 0x0A, 0x5A, 0xAD, 0x7F, 0xFF, 0xE9, 0x6E, 0xF9, 0x37, 0x02, 0xB1, 0xE0, 0xFA, 0xFD, 0x85, 0xBD, 0x65, 0x5D, 0xBD, 0x11, 0x8E, 0x42, 0x0D, 0xAD, 0x09, 0xDA, 0xD1, 0xE9, 0xFC, 0x57, 0x5D, 0xC1, 0xB9, 0xDB, 0xB6, 0x33, 0xCD, 0x20, 0xF5, 0x3E, 0xAD, 0xB5, 0x03, 0x5A, 0xDF, 0xEB, 0x02, 0xE0, 0xCE, 0xB0, 0xD6, 0x9D, 0x3A, 0x94, 0xC6, 0x5B, 0x03, 0x20, 0x07, 0x50, 0x59, 0x38, 0xD0, 0x2C, 0xCF, 0x7D, 0x74, 0x03, 0xAF, 0xD2, 0xBC, 0x7C, 0x56, 0x22, 0xEF, 0xF5, 0x1C, 0xFF, 0x20, 0x8F, 0x2F, 0xDC, 0x03, 0xA6, 0x34, 0x07, 0x3A, 0x80, 0x39, 0x40, 0x2D, 0x7C, 0xA1, 0x0B, 0xDB, 0x9B, 0xED, 0x93, 0x11, 0xF3, 0xEA, 0xC7, 0xFB, 0xC0, 0xE3, 0x88, 0x74, 0xEF, 0xC4, 0x11, 0x4E, 0x07, 0xBF, 0x3E, 0xB6, 0x05, 0x7E, 0xBD, 0x8A, 0x93, 0xB7, 0x37, 0x32, 0xCF, 0xED, 0x59, 0x3B, 0xCD, 0x16, 0x3D, 0xCA, 0xD5, 0x18, 0xA8, 0x60, 0xF2, 0x3F, 0x73, 0x00, 0xD8, 0xC9, 0x18, 0x6F, 0x9A, 0x03, 0xB2, 0x68, 0xD6, 0x4F, 0xE8, 0x1D, 0xC0, 0x0D, 0x01, 0xEC, 0x00, 0x51, 0x40, 0xF5, 0xDB, 0x40, 0xC4, 0xF0, 0x90, 0x99, 0xF6, 0x94, 0x08, 0xA3, 0x03, 0x31, 0x74, 0x3D, 0xDD, 0x9B, 0x36, 0x18, 0x9B, 0x77, 0x1F, 0x70, 0x97, 0xFE, 0xD0, 0x3F, 0xC0, 0x51, 0xFE, 0x83, 0x19, 0x10, 0x7E, 0x27, 0xA4, 0x9E, 0x02, 0x34, 0x80, 0x27, 0x3B, 0xD2, 0x19, 0x2B, 0x40, 0x82, 0xEF, 0x68, 0x22, 0xEB, 0x5F, 0x7A, 0xD5, 0x50, 0xD7, 0xB3, 0x96, 0xB3, 0x82, 0x6F, 0xBE, 0xA5, 0xB7, 0xCD, 0x56, 0x18, 0xB7, 0x93, 0x68, 0xF7, 0x35, 0x61, 0x8C, 0x76, 0xEC, 0xD9, 0xC9, 0x9E, 0x6F, 0x26, 0xFD, 0xE9, 0x8A, 0xCB, 0x4E, 0xA7, 0xF6, 0x84, 0x45, 0x4D, 0x80, 0x98, 0xBB, 0xA8, 0xC7, 0x98, 0x47, 0x30, 0xC0, 0x51, 0xC0, 0xE4, 0x3E, 0xA7, 0x00, 0x7F, 0x12, 0x8A, 0x92, 0x14, 0xDA, 0xE0, 0x5D, 0x07, 0x46, 0x73, 0x87, 0xB5, 0xE4, 0xC0, 0x4C, 0xB1, 0x86, 0xF1, 0x58, 0x8B, 0x38, 0x60, 0x01, 0x44, 0x03, 0xE5, 0x2B, 0x3C, 0xB3, 0x30, 0x05, 0xBC, 0x81, 0x3E, 0x34, 0x9A, 0xE0, 0x1F, 0x29, 0x1E, 0x05, 0x05, 0xA8, 0x50, 0x3C, 0xE1, 0xDB, 0x61, 0x29, 0x12, 0xCE, 0xE5, 0xD2, 0xC8, 0x92, 0xF2, 0xB8, 0xFA, 0x8F, 0xE7, 0xF9, 0x34, 0x49, 0x0A, 0x96, 0x11, 0xB3, 0x98, 0x5F, 0xB9, 0x02, 0xF1, 0xE1, 0x7D, 0xC1, 0x94, 0xBC, 0x23, 0xE9, 0xA6, 0x80, 0xC7, 0x82, 0x13, 0x93, 0x59, 0x70, 0x54, 0xA0, 0x49, 0x7C, 0x12, 0x5D, 0xCC, 0xEB, 0xFD, 0x88, 0xBF, 0xEE, 0x86, 0x45, 0xA5, 0xE0, 0xBD, 0x1E, 0x30, 0x42, 0x97, 0xB1, 0x3E, 0xE0, 0x45, 0x9F, 0x3B, 0x0C, 0x6C, 0x02, 0xD4, 0xDC, 0x48, 0x07, 0xCC, 0x00, 0x49, 0x40, 0x87, 0xC1, 0x2D, 0x5A, 0x4D, 0xB7, 0xC8, 0xB6, 0x1E, 0xAB, 0x55, 0xA3, 0xB1, 0x83, 0x0C, 0x1E, 0x42, 0x25, 0xB9, 0x20, 0x07, 0x2D, 0x58, 0x47, 0x8E, 0xC6, 0x95, 0x1E, 0xF9, 0xA9, 0x96, 0xD2, 0xA7, 0x6B, 0xA5, 0x7C, 0x52, 0x39, 0x52, 0x6F, 0xFD, 0x78, 0x1F, 0x5E, 0x30, 0x3F, 0xAD, 0x42, 0x1B, 0xA8, 0xFB, 0x67, 0x14, 0xF4, 0xC7, 0x52, 0xF7, 0x16, 0xCD, 0x4C, 0xEF, 0xC3, 0x45, 0x16, 0xEF, 0xBC, 0xBC, 0x54, 0xD1, 0x4B, 0xC9, 0x2B, 0x25, 0xA5, 0x3C, 0x19, 0x74, 0xB7, 0x35, 0xDE, 0x01, 0xF2, 0x13, 0x4A, 0x6F, 0x5F, 0x0C, 0x50, 0x8B, 0x58, 0x78, 0x03, 0x8F, 0x29, 0x9F, 0xB1, 0x66, 0xCF, 0x04, 0xED, 0x5F, 0x48, 0xDA, 0x71, 0xF2, 0x93, 0xDA, 0x43, 0x3B, 0xBC, 0xB8, 0xF4, 0x24, 0xA6, 0x37, 0xC5, 0x19, 0xFE, 0xE3, 0xB0, 0x46, 0x91, 0xDB, 0x27, 0x6D, 0x22, 0xD9, 0x49, 0xF9, 0x0D, 0x68, 0x6E, 0xC4, 0x0E, 0x65, 0x91, 0x77, 0x0F, 0xB7, 0x4E, 0x9C, 0x45, 0xAE, 0x8D, 0xB7, 0x9F, 0x5D, 0xD5, 0x3E, 0x1A, 0x00, 0x15, 0xFB, 0xE9, 0xD2, 0xD6, 0x2D, 0x0E, 0xC3, 0xB7, 0x72, 0x91, 0x72, 0x76, 0xAB, 0x41, 0x24, 0xB2, 0x4B, 0x16, 0xC3, 0x71, 0x89, 0x4A, 0x03, 0x00, 0x5E, 0x93, 0x1F, 0xFA, 0x07, 0xF8, 0xBC, 0x7F, 0xB0, 0x06, 0xA2, 0x80, 0x1A, 0x54, 0x13, 0x9C, 0x02, 0xC4, 0x01, 0x35, 0x1A, 0xCD, 0xD1, 0x4C, 0xCC, 0x9C, 0x43, 0x6D, 0x3B, 0xC1, 0xE9, 0x7A, 0xEA, 0x83, 0xD5, 0xF3, 0x88, 0x95, 0x4B, 0x42, 0xF0, 0x44, 0xE5, 0x5B, 0xA5, 0x7D, 0xBB, 0x3B, 0x52, 0xEF, 0x06, 0xB8, 0x33, 0x80, 0x5F, 0xE7, 0x86, 0x7C, 0x92, 0x1C, 0xE9, 0xFA, 0x89, 0x04, 0xA4, 0x6E, 0x67, 0x5A, 0x2B, 0xC7, 0xED, 0x9D, 0x72, 0x55, 0x0E, 0x8C, 0x73, 0xFC, 0x01, 0x75, 0x29, 0x10, 0x88, 0x3F, 0xDE, 0x21, 0xED, 0x77, 0x38, 0x41, 0xFF, 0x69, 0x05, 0xE2, 0xF6, 0xE8, 0xB6, 0xF7, 0x27, 0x5B, 0x8C, 0x6D, 0x12, 0x7E, 0x01, 0xAE, 0x8B, 0x06, 0x42, 0x16, 0x09, 0xD4, 0x16, 0x02, 0x49, 0xD1, 0x6A, 0x81, 0x86, 0xCD, 0xBE, 0xFA, 0x30, 0xB1, 0x6F, 0x36, 0xB3, 0x94, 0x0C, 0x7E, 0xC9, 0x82, 0xC6, 0x0E, 0x4F, 0xA8, 0xAE, 0xD4, 0xE8, 0xB8, 0xC5, 0x5C, 0x2D, 0x1E, 0x07, 0x10, 0x05, 0x10, 0xEE, 0x96, 0xB1, 0xAD, 0xAF, 0xF8, 0xB6, 0x3C, 0x27, 0x37, 0x8D, 0xEB, 0x58, 0x16, 0x44, 0x00, 0x29, 0xAF, 0xE9, 0x13, 0x9F, 0xDE, 0x2C, 0xBF, 0xF8, 0x74, 0x29, 0x4E, 0x67, 0xB6, 0x37, 0xB3, 0xF5, 0x28, 0x6F, 0x9B, 0xFB, 0x05, 0x0F, 0x4B, 0x5C, 0x28, 0xA4, 0xB6, 0x35, 0x1C, 0x0A, 0x8C, 0xB2, 0x8F, 0x27, 0x30, 0xB6, 0x5D, 0xD7, 0x15, 0x50, 0x03, 0x2C, 0x81, 0x08, 0x20, 0x0B, 0xDB, 0xF0, 0x71, 0x1A, 0x2D, 0xF7, 0x70, 0xA5, 0xBF, 0x43, 0x9A, 0x86, 0x63, 0x35, 0x3C, 0x0E, 0xBF, 0x93, 0xF8, 0x8A, 0xA9, 0xC7, 0x4A, 0xAE, 0xC5, 0xE6, 0xBA, 0xC6, 0xD5, 0xFA, 0xAD, 0xAF, 0x72, 0xE3, 0x60, 0xCA, 0xBA, 0x3E, 0x29, 0xEB, 0x93, 0x00, 0x1E, 0xDA, 0x3E, 0xD4, 0x47, 0xDD, 0xBB, 0xD8, 0x61, 0xE0, 0xEE, 0xEF, 0x9F, 0x01, 0x04, 0x4F, 0xBD, 0x73, 0x67, 0x80, 0x7B, 0x03, 0xB9, 0xE8, 0xB5, 0x6B, 0xD4, 0xD5, 0x55, 0x91, 0x7D, 0x43, 0xA9, 0xD1, 0xE9, 0x8F, 0x98, 0x15, 0xC7, 0xC1, 0x31, 0x58, 0xF2, 0x24, 0x50, 0x5B, 0x87, 0x64, 0x09, 0x64, 0x00, 0x2D, 0x8B, 0x02, 0x66, 0x2F, 0x09, 0xA7, 0x01, 0x75, 0x20, 0x9A, 0x46, 0x2B, 0x9C, 0x80, 0x9C, 0x39, 0x91, 0x98, 0xBB, 0xAD, 0xBA, 0x15, 0x1A, 0xBD, 0x4D, 0xE2, 0x0D, 0x8E, 0x05, 0x09, 0x74, 0x45, 0x31, 0xBB, 0xEA, 0x0B, 0xC0, 0xEB, 0xDE, 0x1E, 0xD4, 0xE8, 0x58, 0x5B, 0x2C, 0x3C, 0x2E, 0x5F, 0x2E, 0x37, 0x06, 0x00, 0x9E, 0x47, 0x20, 0x13, 0xA8, 0x59, 0x70, 0xB2, 0xB3, 0xB7, 0xCB, 0x42, 0x02, 0xB0, 0x02, 0x1E, 0xCF, 0x79, 0x5F, 0x8B, 0x1B, 0x3B, 0xEC, 0xE5, 0x53, 0xB6, 0x39, 0xF9, 0x56, 0x7A, 0xE8, 0x4E, 0x37, 0x7B, 0xE4, 0xC8, 0x6A, 0x6F, 0x9B, 0xB9, 0xA3, 0xF1, 0x14, 0x20, 0x09, 0x30, 0xD4, 0xDC, 0x0D, 0x54, 0x02, 0xBD, 0xAF, 0xA4, 0xD3, 0x6A, 0xBD, 0x9E, 0x30, 0x5A, 0x0D, 0x3F, 0x8B, 0x3D, 0xAB, 0x59, 0x0B, 0x3C, 0xC9, 0x09, 0x1B, 0xA6, 0xD9, 0xCF, 0xDB, 0x20, 0x11, 0x6C, 0x5F, 0x76, 0x7B, 0x3B, 0xA4, 0x3E, 0xA5, 0xED, 0x4C, 0x55, 0x3F, 0xEB, 0x05, 0xA6, 0x64, 0x5D, 0xBE, 0x93, 0xB0, 0x9E, 0x15, 0x7E, 0xEC, 0xEE, 0x07, 0xD4, 0x02, 0x38, 0xFD, 0xE8, 0x3C, 0x76, 0x08, 0x85, 0xEF, 0xD6, 0x78, 0x0E, 0x28, 0x33, 0x31, 0x63, 0x47, 0x1E, 0xAC, 0xF6, 0x17, 0x88, 0x34, 0x79, 0x0A, 0xB7, 0xB6, 0x76, 0x15, 0xC6, 0xEB, 0xA6, 0x14, 0xE3, 0x5D, 0xB4, 0xD6, 0x74, 0x9E, 0x15, 0x10, 0xB2, 0xF0, 0x85, 0x2E, 0x12, 0x28, 0xDE, 0xDF, 0x9B, 0x56, 0x9B, 0xBF, 0x0D, 0xF4, 0xA0, 0x88, 0x05, 0x92, 0x8A, 0xBD, 0x0D, 0xA8, 0x6C, 0x73, 0x7A, 0x73, 0xBB, 0x32, 0x04, 0xBA, 0x97, 0x9B, 0xDF, 0xA5, 0xED, 0xDF, 0x2B, 0x28, 0x7B, 0xBF, 0x2A, 0xAF, 0xA0, 0x42, 0x97, 0xE3, 0x26, 0x5E, 0xD9, 0xBD, 0x66, 0x45, 0xDC, 0x22, 0x31, 0xB9, 0xE8, 0xBC, 0xFD, 0x40, 0xE1, 0xFF, 0xD1, 0x15, 0x3C, 0x1B, 0x78, 0x32, 0xE4, 0x9F, 0xE2, 0x17, 0x7B, 0x2E, 0x19, 0xF8, 0xBB, 0xCF, 0x9B, 0x0B, 0x04, 0x8F, 0x13, 0x6B, 0x3C, 0x2F, 0x69, 0xCD, 0x38, 0xC0, 0xD4, 0x5D, 0x5C, 0xE4, 0x06, 0xE4, 0x01, 0xDA, 0x60, 0xA7, 0xD3, 0x80, 0x2A, 0xE0, 0xB4, 0x5A, 0xBC, 0xF5, 0xC6, 0xDC, 0x41, 0xD1, 0xF5, 0x0D, 0xF7, 0x82, 0x1E, 0x78, 0xCE, 0xD7, 0x0F, 0x39, 0xD6, 0xF8, 0x3B, 0xDB, 0x9F, 0x72, 0x02, 0x2C, 0x4E, 0x77, 0x67, 0x0C, 0x65, 0xE5, 0x8F, 0xF2, 0x3A, 0xDD, 0x8F, 0x1B, 0xFF, 0xF1, 0xB7, 0xD6, 0x23, 0xB8, 0x1F, 0x7D, 0x77, 0x41, 0x9A, 0x01, 0xB2, 0x3F, 0x43, 0xCD, 0x76, 0x54, 0x25, 0xF7, 0xD1, 0xFD, 0x14, 0xB7, 0xFE, 0x9D, 0xC9, 0x2B, 0xCC, 0x26, 0x2C, 0x58, 0xC3, 0x3C, 0x80, 0x57, 0x48, 0xDE, 0xB2, 0x3E, 0xF8, 0x8F, 0xA0, 0xAA, 0x38, 0x7B, 0x16, 0x29, 0x60, 0x64, 0x6F, 0x4A, 0x05, 0x44, 0x02, 0xBD, 0x37, 0x01, 0x39, 0x80, 0x35, 0x10, 0x03, 0x3C, 0x11, 0xF7, 0xF7, 0x42, 0x70, 0xDB, 0x8E, 0x8A, 0xBE, 0xF5, 0xFB, 0x0E, 0x1D, 0x1B, 0x28, 0xD0, 0x40, 0x88, 0xA8, 0x7E, 0x3E, 0x22, 0x7B, 0x6A, 0x32, 0xE4, 0x39, 0x76, 0xDC, 0xF3, 0x46, 0x06, 0xF0, 0xFA, 0x9C, 0x62, 0x07, 0xC8, 0xE7, 0x84, 0x01, 0xCC, 0xD5, 0xB6, 0x89, 0x69, 0x6E, 0x4F, 0x4A, 0x42, 0x3C, 0xBD, 0x16, 0x0F, 0xB3, 0x1F, 0xD9, 0x8C, 0xE5, 0x75, 0x81, 0xC4, 0xA3, 0x05, 0xD5, 0x79, 0xF7, 0x9C, 0xCA, 0x01, 0x2C, 0x00, 0xF5, 0xC5, 0x59, 0x28, 0xE0, 0x02, 0xB4, 0xDE, 0x2E, 0x81, 0xA3, 0x7C, 0x08, 0x44, 0x00, 0x36, 0x40, 0xE4, 0x13, 0x5D, 0xA4, 0xD5, 0xF4, 0x17, 0x8D, 0xB2, 0xA4, 0xC0, 0x77, 0x5E, 0x1A, 0x88, 0x47, 0xE3, 0x07, 0x8B, 0xC0, 0xC0, 0x13, 0x54, 0x17, 0x78, 0xE7, 0x7F, 0xF4, 0x78, 0xE0, 0x1F, 0x1C, 0xC6, 0x3D, 0x61, 0x2D, 0x93, 0x80, 0xD8, 0xA2, 0x00, 0x6B, 0xA0, 0xF5, 0x4E, 0xD5, 0xC6, 0x43, 0x86, 0xE5, 0xB5, 0x9E, 0x66, 0xE8, 0xDA, 0x6F, 0x49, 0x36, 0xEF, 0xA7, 0xBD, 0xA0, 0x32, 0x95, 0xE0, 0x13, 0xFC, 0x32, 0x80, 0xEE, 0xC9, 0xA8, 0x6E, 0x7D, 0x43, 0xAF, 0x85, 0x2F, 0xFA, 0x9B, 0x42, 0x1F, 0xC0, 0x14, 0xD0, 0x01, 0x84, 0x03, 0x27, 0x99, 0x44, 0x7E, 0xCB, 0xD9, 0xF5, 0x63, 0x35, 0xFB, 0x37, 0x1B, 0x96, 0x81, 0x2A, 0x87, 0xD1, 0x6A, 0x58, 0x95, 0x1C, 0x0B, 0x89, 0x4D, 0x32, 0x85, 0x18, 0x67, 0xD2, 0x66, 0x55, 0xC1, 0x37, 0xA2, 0xC7, 0x78, 0xDB, 0xDC, 0x71, 0xF5, 0x31, 0xE6, 0x68, 0x2F, 0x04, 0xD0, 0x03, 0x44, 0xBE, 0xD1, 0xF2, 0xE6, 0x55, 0x29, 0x9F, 0xA6, 0x8D, 0x1E, 0x6F, 0xD2, 0x9F, 0xEF, 0xA9, 0x62, 0x9E, 0x34, 0xE5, 0x1C, 0x9C, 0xF2, 0xEA, 0x56, 0x6B, 0x3B, 0xF1, 0xB9, 0xA8, 0x15, 0x10, 0x0B, 0x37, 0xC0, 0x1A, 0xF0, 0x03, 0x14, 0xCB, 0x62, 0x16, 0xD9, 0x40, 0x24, 0xA0, 0x73, 0x8F, 0xDF, 0x18, 0xA0, 0x72, 0x5F, 0xF1, 0xC7, 0x6A, 0xBE, 0x4D, 0xB9, 0x12, 0xC7, 0xD8, 0x96, 0x3F, 0xAB, 0x35, 0xE2, 0x7B, 0x38, 0xC1, 0xE5, 0x6A, 0xE1, 0x14, 0xD2, 0x07, 0x92, 0x37, 0xF6, 0xEF, 0x1D, 0xD4, 0x3F, 0x25, 0x19, 0x8B, 0xAA, 0x45, 0x2C, 0xEA, 0x36, 0xA5, 0xE6, 0x3B, 0xC5, 0x9A, 0xCE, 0x25, 0x7F, 0xB2, 0x85, 0xA8, 0x3A, 0xF1, 0xA4, 0xD6, 0xF4, 0x5B, 0x0F, 0xE0, 0x4F, 0xE2, 0xB7, 0xF5, 0xD3, 0x27, 0x09, 0x59, 0x14, 0x77, 0xDD, 0x90, 0x0D, 0x70, 0x08, 0xA1, 0xC4, 0x24, 0x3F, 0x01, 0xB6, 0xA0, 0x63, 0x4E, 0xE6, 0x23, 0x62, 0xE6, 0x80, 0x0F, 0xA0, 0x01, 0xB8, 0xED, 0x9B, 0x7F, 0x56, 0xDB, 0x1B, 0x41, 0xFA, 0x67, 0x5D, 0x63, 0x7A, 0xBD, 0xFE, 0x66, 0x8F, 0xCC, 0x6E, 0x0D, 0xA9, 0xA8, 0xEE, 0xD2, 0x3B, 0x7A, 0x5C, 0xFE, 0x91, 0xA5, 0x0B, 0xDE, 0xC7, 0x3F, 0x49, 0x09, 0xC3, 0x95, 0x4C, 0x01, 0x2D, 0x80, 0x0B, 0x13, 0x5E, 0xE1, 0xF6, 0x4A, 0x2F, 0x9A, 0xCE, 0x93, 0x8A, 0x4A, 0x17, 0x45, 0x71, 0x95, 0x43, 0xE2, 0xCC, 0x62, 0x63, 0xBB, 0xCC, 0x93, 0x9F, 0x3F, 0x39, 0xBB, 0xC5, 0xF1, 0x4F, 0x7B, 0x78, 0x03, 0xAC, 0x01, 0x57, 0xA0, 0xEC, 0x6E, 0xE2, 0x92, 0x0E, 0xC4, 0x42, 0xE7, 0xEE, 0x35, 0x9F, 0x71, 0xF7, 0x52, 0x8F, 0x78, 0xAC, 0x96, 0xFF, 0x1A, 0x8B, 0xC0, 0x63, 0xB5, 0xF9, 0x05, 0xF6, 0x72, 0xB3, 0x23, 0x65, 0xCB, 0x66, 0x65, 0xEB, 0x03, 0x0B, 0x7A, 0xAB, 0x22, 0x4F, 0xA6, 0xF7, 0x8F, 0xF5, 0x99, 0xA1, 0x11, 0x1C, 0xDD, 0xF7, 0x04, 0x70, 0x07, 0xE2, 0x00, 0x45, 0x2F, 0xD1, 0xBC, 0x57, 0xF0, 0xD9, 0x87, 0x52, 0x4F, 0x94, 0x48, 0xE8, 0x6A, 0xC8, 0x75, 0x58, 0xD4, 0x9F, 0x36, 0x8E, 0xE4, 0x42, 0xF0, 0x4A, 0x3F, 0xFD, 0x70, 0x32, 0x6F, 0x59, 0x45, 0xF5, 0x6F, 0x76, 0xC9, 0x42, 0x17, 0x06, 0x8C, 0xDC, 0x55, 0x7F, 0x95, 0x40, 0x16, 0xE0, 0x01, 0x9C, 0xA7, 0x63, 0xF3, 0x9D, 0x51, 0x51, 0xFA, 0x58, 0xAD, 0x7E, 0x95, 0x8C, 0x27, 0x14, 0x17, 0xC5, 0xD3, 0xFF, 0x5A, 0x9E, 0x2E, 0x8E, 0x12, 0x0D, 0x81, 0x58, 0xB3, 0x6D, 0x3B, 0xA4, 0x68, 0xDA, 0x37, 0x4A, 0xAB, 0x7D, 0xC4, 0xFC, 0x76, 0x74, 0xA9, 0xBE, 0x5D, 0x7D, 0xEA, 0xE9, 0x79, 0xCF, 0x1B, 0x82, 0x04, 0xE0, 0x0A, 0xB4, 0xAC, 0xB9, 0x86, 0xE1, 0xE6, 0x75, 0xF1, 0x3A, 0x43, 0x6C, 0x09, 0xAB, 0x1D, 0x66, 0x38, 0x37, 0xAC, 0x06, 0xBF, 0xE6, 0x7E, 0x12, 0x7B, 0x34, 0x75, 0x2C, 0xAF, 0x28, 0x44, 0x06, 0x20, 0x45, 0x81, 0x40, 0x20, 0x7B, 0x11, 0xB7, 0x53, 0xE1, 0x14, 0xC0, 0xA5, 0x5E, 0x16, 0xC7, 0xF6, 0xE1, 0x77, 0xC8, 0x15, 0xFF, 0xF8, 0x7D, 0xC5, 0x1F, 0xAB, 0xA1, 0x26, 0xCF, 0xC2, 0xBE, 0x33, 0xF4, 0xD1, 0xD5, 0x62, 0x7C, 0x44, 0x12, 0xED, 0x92, 0x10, 0x9E, 0xC6, 0x58, 0xBB, 0x1B, 0x5B, 0xDE, 0xB5, 0x66, 0xCE, 0x8B, 0x0E, 0x90, 0xB2, 0xB0, 0x45, 0x01, 0x73, 0x39, 0x21, 0x19, 0xA5, 0x6F, 0xEA, 0x7D, 0xBC, 0xCD, 0x77, 0x98, 0x6B, 0x30, 0x30, 0xE2, 0x61, 0xA6, 0xE4, 0xE5, 0xF6, 0x66, 0x2F, 0x7A, 0x38, 0x40, 0x70, 0x8E, 0xDE, 0xAD, 0x71, 0x00, 0x4E, 0xBC, 0x5E, 0x54, 0x2E, 0xCE, 0x82, 0xA1, 0x9C, 0x02, 0xD2, 0x80, 0xE9, 0x85, 0x00, 0xE9, 0x80, 0x09, 0x0D, 0x05, 0xE8, 0x01, 0xE6, 0x3C, 0x66, 0x1B, 0x68, 0xBB, 0x76, 0xD2, 0x6C, 0x1B, 0x68, 0xD9, 0x20, 0x81, 0xCC, 0x96, 0xAA, 0x15, 0xFE, 0x95, 0xC7, 0x11, 0xCD, 0xCD, 0x62, 0xE1, 0xCF, 0xA7, 0x28, 0x83, 0x81, 0x96, 0xCB, 0x21, 0x56, 0x4F, 0x4E, 0xC6, 0x11, 0x40, 0x13, 0xE0, 0xC3, 0x39, 0x57, 0xE4, 0x57, 0x9F, 0xC2, 0x82, 0xE4, 0xA4, 0xA4, 0xDF, 0xD0, 0x60, 0x35, 0xA3, 0x1A, 0x15, 0x13, 0xA0, 0xD9, 0xE9, 0x7D, 0xD8, 0x03, 0x8A, 0xDE, 0xB5, 0x5B, 0x6C, 0xF1, 0xD0, 0x94, 0x09, 0x84, 0x2F, 0x64, 0x91, 0x40, 0x27, 0xCF, 0xE1, 0x40, 0xCE, 0xC2, 0x01, 0xFF, 0xC6, 0xD6, 0x72, 0x3F, 0x09, 0xF0, 0xD4, 0x9A, 0xE5, 0x6A, 0x59, 0x14, 0x1D, 0xF3, 0xF1, 0xB3, 0xDA, 0xD1, 0x5A, 0xC9, 0xA6, 0x5E, 0x4F, 0x7E, 0x6E, 0xAA, 0xA3, 0x63, 0x8A, 0xCA, 0xA7, 0x6D, 0xDE, 0x37, 0x3C, 0xA5, 0x97, 0x07, 0xED, 0x6D, 0xBE, 0xB9, 0xB0, 0x01, 0xC2, 0xEE, 0x29, 0x1A, 0x8F, 0x0B, 0x96, 0xA7, 0xB1, 0x5D, 0xF9, 0x87, 0x15, 0x26, 0x67, 0x47, 0xDE, 0x0F, 0x6C, 0x9A, 0x3F, 0xEB, 0x47, 0xC9, 0xA7, 0x1C, 0xA8, 0x13, 0x38, 0xC5, 0xDA, 0x6C, 0xA0, 0x0E, 0xE0, 0xB3, 0xF0, 0x85, 0x2D, 0x1A, 0xE8, 0x73, 0x57, 0x71, 0x97, 0x00, 0xF9, 0x79, 0x78, 0xE4, 0x8E, 0x6A, 0x34, 0x0B, 0x8E, 0x8A, 0x56, 0x13, 0x84, 0x09, 0x36, 0x0F, 0x37, 0x14, 0x5B, 0x6A, 0xE8, 0x46, 0x5A, 0x0E, 0x52, 0x99, 0xD5, 0x7A, 0x3B, 0x17, 0xCE, 0x6F, 0x73, 0x38, 0x23, 0x57, 0xD0, 0x20, 0xEA, 0x1B, 0xD4, 0xB3, 0x5B, 0x11, 0x57, 0x06, 0x88, 0xCF, 0xA6, 0x56, 0x72, 0x5B, 0x34, 0x82, 0xFF, 0xB0, 0xC1, 0x19, 0xCA, 0x6C, 0x79, 0x86, 0x34, 0xF1, 0xC9, 0x18, 0xAD, 0xDA, 0x57, 0xE4, 0xEA, 0xF5, 0x26, 0x8F, 0x56, 0xF0, 0xE4, 0xAD, 0x56, 0x67, 0xB6, 0x90, 0x45, 0x2C, 0x06, 0xF0, 0x06, 0x3A, 0x6F, 0xDD, 0xD7, 0x31, 0xA0, 0x17, 0x11, 0x80, 0xD8, 0xBE, 0x49, 0x47, 0xC4, 0xE1, 0x2B, 0xB4, 0x9A, 0x22, 0x8B, 0xC8, 0x14, 0x61, 0x02, 0xB5, 0xEB, 0xC0, 0xD6, 0x9E, 0x2B, 0xB8, 0xDA, 0x14, 0xD7, 0x43, 0x13, 0xC6, 0xF5, 0x14, 0xD5, 0x77, 0x3B, 0xE0, 0x81, 0x2D, 0xB8, 0xA0, 0xCD, 0xA7, 0xAA, 0xDA, 0x6E, 0xE8, 0x22, 0x9A, 0x3B, 0x16, 0xA7, 0xED, 0xD5, 0x27, 0xDF, 0x1E, 0x0D, 0x51, 0x3F, 0x6F, 0x57, 0x17, 0x76, 0xAD, 0xCC, 0xA7, 0x48, 0xCD, 0x3E, 0xA2, 0x80, 0xB6, 0xD0, 0x00, 0x8E, 0x5D, 0x3E, 0xF5, 0xD2, 0x85, 0x2C, 0x9E, 0xC0, 0x7E, 0x03, 0xAF, 0x7B, 0x0E, 0xB6, 0x6F, 0x20, 0x0B, 0xD0, 0xA2, 0xA7, 0x86, 0xA5, 0x5F, 0x40, 0x07, 0xAD, 0x66, 0x50, 0x05, 0x90, 0xDA, 0xEE, 0x53, 0x7A, 0x6D, 0x07, 0x76, 0x0C, 0xC5, 0xB3, 0xE1, 0x9B, 0x4D, 0xD6, 0xE8, 0x23, 0x9B, 0x77, 0x9F, 0x63, 0x7F, 0x8E, 0x1E, 0xB6, 0xBB, 0x01, 0x27, 0x6A, 0x01, 0x61, 0x0B, 0x05, 0x3C, 0xF8, 0xE9, 0x73, 0x3C, 0xE7, 0x65, 0xFE, 0x6E, 0x9B, 0x07, 0x37, 0x12, 0xF3, 0xD0, 0xB6, 0xB1, 0x26, 0x6B, 0xF3, 0xF0, 0x0A, 0xB5, 0xD3, 0xB9, 0x3F, 0x0B, 0x60, 0x9F, 0x4D, 0xDB, 0x1A, 0xD0, 0x5A, 0xC4, 0x22, 0x01, 0x13, 0x20, 0xF5, 0xDE, 0xD7, 0x43, 0x00, 0xE7, 0x43, 0x4A, 0x8A, 0x18, 0x10, 0x03, 0x54, 0x3C, 0xAE, 0x42, 0x5A, 0xCD, 0xE1, 0x12, 0x78, 0x36, 0x51, 0x48, 0x57, 0xCF, 0xE4, 0x16, 0xE4, 0x1A, 0x4E, 0xE5, 0xA7, 0xD9, 0x38, 0x6A, 0x87, 0x78, 0x31, 0x71, 0xED, 0xE3, 0xF4, 0x30, 0x9E, 0x68, 0x3F, 0x2D, 0x1A, 0x9D, 0x05, 0xD0, 0x07, 0xC8, 0x00, 0x28, 0x08, 0x69, 0xF9, 0x2A, 0x68, 0x30, 0x8A, 0xC4, 0xE4, 0x81, 0x78, 0xC4, 0x9D, 0x54, 0xDE, 0xBC, 0x3B, 0x96, 0xB5, 0x6C, 0xB5, 0xC9, 0x93, 0x72, 0xCC, 0x12, 0x3D, 0x54, 0x6A, 0xC0, 0xCC, 0x0D, 0x9C, 0xB8, 0x6B, 0x8D, 0x3D, 0x16, 0x67, 0x91, 0x40, 0x53, 0x47, 0x75, 0x51, 0x05, 0xE4, 0x00, 0xFE, 0x91, 0x9A, 0xAF, 0xC5, 0xEC, 0xC3, 0x6C, 0x5A, 0x2D, 0xFE, 0xA5, 0x62, 0xA9, 0xA7, 0xD5, 0xFA, 0x37, 0x19, 0x1B, 0x6F, 0x86, 0xE1, 0x1F, 0xD9, 0x14, 0x3E, 0xF9, 0x5A, 0xFF, 0xDA, 0xC4, 0x6F, 0x37, 0xD0, 0xAF, 0x56, 0x0C, 0x73, 0x8D, 0xE9, 0x64, 0xA4, 0x1C, 0x40, 0x2C, 0xBA, 0x6E, 0xDD, 0x6F, 0x4B, 0xA0, 0xCF, 0x65, 0x5F, 0x7D, 0x84, 0x07, 0x0F, 0x75, 0xEB, 0x0A, 0xE6, 0x72, 0x04, 0x20, 0x61, 0x66, 0x7D, 0xD2, 0x6C, 0x9F, 0x74, 0x64, 0x16, 0x04, 0xD7, 0x47, 0xB4, 0x94, 0xF9, 0x47, 0x33, 0x9F, 0x36, 0xBC, 0x0A, 0x58, 0x03, 0xEE, 0x1F, 0xD5, 0x93, 0x02, 0xCA, 0x81, 0x0C, 0xC0, 0x0F, 0x70, 0xEC, 0x2E, 0xB2, 0x9C, 0xD8, 0x37, 0x95, 0x56, 0x4B, 0xFC, 0xB3, 0x7A, 0xA0, 0xA5, 0x8F, 0xD7, 0x76, 0x71, 0x89, 0x55, 0xC5, 0x4E, 0x9C, 0x03, 0xA4, 0x51, 0x05, 0x74, 0x6A, 0x6B, 0x01, 0x94, 0xB2, 0x57, 0x77, 0x9B, 0xA9, 0x4B, 0xF4, 0x5C, 0xE2, 0x91, 0x69, 0x34, 0x96, 0x9D, 0x70, 0x51, 0x2F, 0x20, 0x06, 0x68, 0xDF, 0x15, 0x8C, 0xBD, 0xEE, 0x82, 0x52, 0x83, 0xAF, 0x10, 0x58, 0x3D, 0x65, 0x15, 0xCA, 0xD0, 0x89, 0xC2, 0x92, 0x11, 0xB0, 0x2B, 0x6B, 0x83, 0xEC, 0xC0, 0xA0, 0xB2, 0x77, 0x8A, 0x34, 0x40, 0x9C, 0xC7, 0x17, 0xA0, 0x14, 0xC8, 0x01, 0xAA, 0x79, 0xFB, 0x00, 0xDA, 0x6E, 0xD1, 0xDC, 0xC3, 0x87, 0x05, 0x84, 0x02, 0xDA, 0x80, 0xB3, 0x51, 0x53, 0xD3, 0x68, 0x05, 0x1F, 0xAE, 0x14, 0xE4, 0xCB, 0xCE, 0x2E, 0x6B, 0x5C, 0x9A, 0xA1, 0xAC, 0x33, 0x25, 0xF6, 0x3B, 0x22, 0x6C, 0x4B, 0xED, 0x8A, 0x0E, 0x1E, 0x38, 0x3E, 0x9B, 0xC1, 0x0F, 0xFA, 0xB7, 0x74, 0x25, 0xD0, 0xBE, 0x50, 0xA0, 0x88, 0xCF, 0xA5, 0xCB, 0xE5, 0x15, 0x3B, 0x79, 0x1A, 0x0A, 0xC4, 0x23, 0x2A, 0x9B, 0x1C, 0x01, 0xF3, 0xD6, 0x80, 0xEF, 0x32, 0x5E, 0xCF, 0x15, 0x3B, 0xF2, 0xEE, 0x40, 0x7E, 0x0E, 0x60, 0x84, 0x2D, 0x06, 0xF0, 0xB3, 0x48, 0xA0, 0xF5, 0x4E, 0xEF, 0x6A, 0x07, 0xEA, 0x93, 0xC2, 0x7A, 0xE4, 0xBE, 0x5A, 0xF4, 0xBE, 0x99, 0x79, 0x68, 0xB5, 0x86, 0xB4, 0xB7, 0x15, 0x72, 0x92, 0xBA, 0x2F, 0xAF, 0xA4, 0xBA, 0xAE, 0xB4, 0x92, 0xAC, 0xD8, 0xBF, 0xFE, 0x0C, 0xE2, 0x72, 0x6F, 0xA1, 0xF9, 0x58, 0xCD, 0x6E, 0x9F, 0x87, 0x1D, 0x20, 0x72, 0x21, 0x80, 0xDB, 0x22, 0x80, 0xB8, 0x92, 0xB6, 0x28, 0x20, 0xF1, 0x1C, 0x48, 0xE3, 0x91, 0x6A, 0xD5, 0x4B, 0x24, 0xD8, 0xD7, 0x6A, 0xFA, 0x6C, 0x70, 0xB3, 0x38, 0x09, 0x3C, 0xFA, 0xB8, 0x75, 0x9F, 0x15, 0xA4, 0x00, 0x6B, 0xC0, 0x0B, 0x88, 0x01, 0xE6, 0x7B, 0x78, 0x53, 0xA0, 0x02, 0x88, 0x85, 0xF0, 0xCD, 0xC4, 0xA7, 0x33, 0x40, 0x35, 0xAD, 0x36, 0x88, 0x3A, 0xA8, 0xA1, 0xD7, 0xE7, 0xE8, 0xEF, 0xF0, 0x26, 0x9B, 0xE8, 0x67, 0x5B, 0x8E, 0xA6, 0x6E, 0xAB, 0x0F, 0xF2, 0x1B, 0x72, 0x16, 0xAD, 0xCC, 0x5E, 0xFE, 0x08, 0x7D, 0xD3, 0x6F, 0xF5, 0x5E, 0x39, 0xF1, 0x65, 0x16, 0x59, 0x8B, 0x06, 0xEA, 0x2C, 0x78, 0xC2, 0xE2, 0x12, 0xC4, 0xDB, 0x92, 0xB1, 0xEA, 0x93, 0x72, 0xE5, 0x8C, 0x9D, 0x6C, 0x60, 0xF8, 0xEA, 0xA5, 0xCA, 0x62, 0x0B, 0xD6, 0x2A, 0x73, 0xE1, 0x46, 0x46, 0xC2, 0x8A, 0x57, 0x01, 0x65, 0xFB, 0x0B, 0x09, 0xE8, 0x01, 0xAC, 0x80, 0xAA, 0x7B, 0xD1, 0x28, 0x01, 0x32, 0x00, 0x5F, 0x88, 0xE3, 0xCD, 0xF9, 0xB4, 0xAB, 0x6E, 0x2E, 0x6B, 0xC5, 0x46, 0x4B, 0x89, 0xEE, 0x60, 0x12, 0xBF, 0x04, 0x36, 0xD5, 0xDC, 0xE5, 0x30, 0x71, 0xD5, 0x0B, 0xC5, 0xC2, 0x79, 0x12, 0x2E, 0x6B, 0x9F, 0x3B, 0xF0, 0xEE, 0x9F, 0xB1, 0x56, 0xF4, 0x72, 0x2C, 0xA6, 0xE8, 0x3D, 0x58, 0xC8, 0x22, 0x01, 0x3D, 0x00, 0xCD, 0x7C, 0x9A, 0xE5, 0x15, 0x73, 0xF7, 0x86, 0x6E, 0x79, 0x5B, 0x63, 0xE6, 0x73, 0x0B, 0x78, 0x72, 0xE4, 0x79, 0x77, 0x2A, 0xC0, 0xF6, 0x61, 0xF8, 0x7D, 0x27, 0x98, 0xBA, 0xA5, 0x74, 0xEC, 0xF9, 0x75, 0x60, 0x38, 0xA8, 0x39, 0x9A, 0xE3, 0x8E, 0xDE, 0x66, 0x01, 0x6A, 0xFB, 0xA6, 0xE2, 0x93, 0x1C, 0x60, 0x9A, 0x56, 0x83, 0xB6, 0xB7, 0x8A, 0xA3, 0x74, 0x48, 0xFA, 0x5F, 0x25, 0x46, 0x17, 0x2E, 0x85, 0x94, 0x74, 0x1A, 0x6C, 0xD9, 0xDD, 0x48, 0x0E, 0x9A, 0xA6, 0x07, 0xFC, 0x1B, 0x6D, 0xB9, 0x6B, 0x5A, 0x92, 0x9E, 0x85, 0x00, 0xAC, 0x00, 0x3F, 0x8B, 0x04, 0xF0, 0x0A, 0xEC, 0xB3, 0x37, 0x40, 0xCE, 0x49, 0x2A, 0x1E, 0xB3, 0x59, 0xE1, 0x7E, 0x7A, 0x44, 0x70, 0x58, 0x79, 0x1B, 0xEC, 0x5A, 0xB1, 0x26, 0x31, 0xE0, 0x08, 0x90, 0xCA, 0x36, 0x17, 0x80, 0x2A, 0x60, 0x01, 0xF8, 0x01, 0x42, 0x80, 0x6E, 0x6A, 0x36, 0x00, 0x73, 0x80, 0xE2, 0x43, 0x07, 0xC4, 0xF7, 0xCD, 0x58, 0xC3, 0x0A, 0xD0, 0x87, 0x56, 0x53, 0xE4, 0x81, 0xD4, 0x6C, 0xBD, 0x8B, 0x5D, 0xCD, 0x32, 0x02, 0x9E, 0xDD, 0xCD, 0xC8, 0x45, 0x4F, 0x5F, 0x2C, 0x44, 0x26, 0xD7, 0x0C, 0x8D, 0xFC, 0xE4, 0x13, 0x7D, 0x0F, 0xB2, 0x7D, 0x16, 0x0A, 0x54, 0xDF, 0x2E, 0x0F, 0xC9, 0x3B, 0xDA, 0xE2, 0xD7, 0x58, 0x7B, 0x32, 0x6B, 0xF5, 0x99, 0x69, 0x3E, 0xAF, 0x2A, 0x71, 0x3C, 0x7D, 0xFC, 0x4B, 0xEE, 0x3E, 0x2B, 0x47, 0x80, 0x70, 0xA0, 0x0B, 0xA0, 0xE8, 0xF3, 0x59, 0xC8, 0x59, 0x0C, 0x70, 0xAF, 0x5D, 0xF6, 0x7C, 0xF2, 0x04, 0x74, 0xDF, 0x2C, 0xBE, 0x79, 0x80, 0xE4, 0x42, 0x18, 0xB4, 0x9A, 0x41, 0xBC, 0xB3, 0x0B, 0xE5, 0xC0, 0x65, 0x3F, 0x21, 0x2C, 0x55, 0xC3, 0x71, 0x60, 0x60, 0x35, 0x2D, 0x59, 0x6D, 0x78, 0x87, 0x5F, 0x39, 0x9E, 0xBD, 0x13, 0xFC, 0xFA, 0x72, 0xA7, 0x3F, 0xC7, 0xB5, 0x03, 0x94, 0x2D, 0x74, 0x11, 0x40, 0xFB, 0xDB, 0xD5, 0x00, 0x65, 0xAF, 0xAF, 0x1E, 0x4A, 0xF3, 0x9E, 0xFE, 0x1C, 0x3A, 0xE9, 0x44, 0x92, 0x7D, 0xA5, 0xE8, 0xA5, 0x60, 0x1C, 0x34, 0x00, 0x39, 0x80, 0xE7, 0x67, 0x01, 0x35, 0xA0, 0x65, 0x11, 0x77, 0xDB, 0x1F, 0x2D, 0xA0, 0x75, 0x4D, 0xE9, 0xC0, 0x99, 0x5B, 0x15, 0x3B, 0x3E, 0x97, 0x59, 0xA7, 0xED, 0x95, 0x56, 0x73, 0x94, 0x00, 0x8D, 0x6D, 0xAA, 0x73, 0xDC, 0x22, 0x75, 0x99, 0x48, 0x2E, 0x76, 0xDB, 0xF2, 0x41, 0x5C, 0xA8, 0x6C, 0x1D, 0x45, 0xF2, 0x71, 0x79, 0x5C, 0x11, 0xB3, 0x2B, 0x96, 0x57, 0xBD, 0x30, 0x20, 0xF5, 0x46, 0xF1, 0x52, 0xBA, 0xA6, 0x14, 0xA3, 0x11, 0xD8, 0x49, 0xC6, 0xEE, 0x5A, 0x18, 0xFE, 0xC1, 0xF9, 0x6E, 0x2D, 0xFD, 0xD7, 0xA1, 0x2A, 0x80, 0xCE, 0xDB, 0xC9, 0x68, 0x02, 0x84, 0x03, 0x39, 0x40, 0x05, 0xD0, 0xF6, 0x28, 0x8C, 0x02, 0x6D, 0x6B, 0xC3, 0x4F, 0xCC, 0xBB, 0x0D, 0x70, 0x05, 0xF8, 0x50, 0x1F, 0x81, 0x71, 0x5A, 0x2D, 0xB6, 0x37, 0x6D, 0xAE, 0xF7, 0x36, 0xFF, 0x95, 0x43, 0x80, 0x19, 0x35, 0xC7, 0x86, 0xA9, 0xD1, 0x81, 0xCD, 0x64, 0xEA, 0xE7, 0xF5, 0x29, 0x61, 0x25, 0xD0, 0x37, 0x67, 0x7E, 0x6D, 0x61, 0xCC, 0xF7, 0xA9, 0x7B, 0x41, 0xAB, 0xC5, 0x50, 0x2A, 0xF2, 0x00, 0x7E, 0xAE, 0x6D, 0xD6, 0xD6, 0x4E, 0x14, 0x6E, 0xC8, 0x27, 0x49, 0xAF, 0x78, 0xDC, 0x6C, 0x3C, 0xBC, 0xA5, 0xF5, 0xE5, 0xF9, 0x85, 0x14, 0x40, 0x0F, 0x60, 0x03, 0x38, 0xD1, 0x40, 0x2C, 0xF8, 0x66, 0xF9, 0x0E, 0x08, 0x01, 0x9E, 0x96, 0x07, 0xFB, 0x69, 0x0A, 0xA8, 0x01, 0xE2, 0x00, 0x3A, 0x80, 0xB3, 0x07, 0x85, 0xD3, 0x6A, 0xB9, 0x15, 0x8E, 0x6C, 0xDB, 0xB8, 0x89, 0xAB, 0x32, 0x7B, 0x42, 0x8A, 0xED, 0x5F, 0x5A, 0x7B, 0x1B, 0xAC, 0xF5, 0xE5, 0x28, 0x2B, 0x0B, 0xEE, 0x8C, 0xBF, 0x7A, 0x65, 0x9A, 0x9E, 0x95, 0x81, 0x37, 0xBF, 0x7E, 0xFE, 0xDE, 0xB3, 0xD0, 0x01, 0x12, 0x7F, 0xFD, 0x62, 0x03, 0x4F, 0xCC, 0xC9, 0x7E, 0xB2, 0x78, 0xF6, 0x54, 0xF1, 0xF4, 0x07, 0x65, 0x46, 0xDA, 0x3C, 0x85, 0x3D, 0xA2, 0x6F, 0x9B, 0x58, 0x5B, 0xA0, 0xB6, 0xFF, 0x07, 0xBC, 0x89, 0x60, 0x3D, 0x10, 0x0B, 0xDF, 0xAB, 0x5A, 0x03, 0xDE, 0x9B, 0x2B, 0x3A, 0x80, 0xC7, 0x42, 0x01, 0x35, 0xBC, 0x32, 0x01, 0x54, 0xBE, 0x9F, 0xEC, 0xEF, 0x3E, 0x55, 0x05, 0x01, 0xD9, 0x83, 0xA5, 0x4B, 0x7C, 0x7E, 0x0D, 0x94, 0x3C, 0x03, 0x9B, 0x4F, 0xDA, 0x8A, 0x7C, 0x6E, 0x4F, 0xED, 0x33, 0x5B, 0x17, 0x66, 0x4C, 0xC1, 0xBD, 0x9B, 0xD9, 0xE4, 0x2E, 0xF4, 0x6F, 0xCD, 0x0F, 0x46, 0xBA, 0x52, 0x66, 0x1F, 0xC8, 0x00, 0x9A, 0xC2, 0x98, 0x01, 0x74, 0x73, 0x47, 0xDB, 0xC3, 0xD0, 0xA5, 0xF5, 0xBD, 0xB9, 0x17, 0xA6, 0xC0, 0x53, 0xA6, 0x13, 0x8F, 0xA4, 0xC0, 0xE1, 0x88, 0xE9, 0x5B, 0xEE, 0x6B, 0x8C, 0x5B, 0x09, 0x20, 0x0E, 0xA8, 0x2D, 0x1A, 0xF0, 0x73, 0x2B, 0xF1, 0x7B, 0x03, 0x5D, 0x40, 0x0D, 0x10, 0x05, 0x70, 0x27, 0x1A, 0xD9, 0x4F, 0x0A, 0x4C, 0xD0, 0x68, 0xBD, 0xDD, 0x94, 0x07, 0xBF, 0x2E, 0x5B, 0x0F, 0x54, 0xCA, 0x42, 0xA0, 0x6D, 0x72, 0xAF, 0xAB, 0x90, 0x35, 0x5B, 0x09, 0xD6, 0x8C, 0xAD, 0xDC, 0x23, 0xED, 0x8A, 0x3E, 0xC9, 0x7E, 0x6B, 0xF1, 0x67, 0x8F, 0x57, 0x07, 0xEC, 0x00, 0x9A, 0xF7, 0x43, 0xBA, 0x1A, 0x74, 0x18, 0x2D, 0x7E, 0x73, 0x8D, 0xF9, 0x8F, 0x7C, 0xD6, 0x5A, 0xFD, 0x74, 0x01, 0xA9, 0x64, 0x26, 0x24, 0x6D, 0x07, 0xD8, 0x5B, 0x08, 0xF4, 0xD8, 0x35, 0x9F, 0x86, 0xE2, 0xD1, 0x40, 0x2D, 0x28, 0x34, 0xE4, 0x76, 0x4B, 0x12, 0xC5, 0xC2, 0x15, 0xA0, 0x16, 0x4D, 0x7F, 0xA4, 0x6C, 0x2A, 0xF6, 0xCD, 0xA2, 0xD1, 0x66, 0xFB, 0xEE, 0x17, 0xA7, 0x27, 0x52, 0x95, 0xE6, 0x4F, 0x76, 0xC2, 0x0E, 0x2A, 0xE0, 0xED, 0x2D, 0xE8, 0x8A, 0xFA, 0x0D, 0xAD, 0x35, 0xDA, 0xD0, 0x68, 0xC1, 0x36, 0x76, 0xCC, 0x21, 0xE3, 0x41, 0xDB, 0xEC, 0xEE, 0x32, 0xA1, 0x09, 0xF8, 0x01, 0xE2, 0x92, 0x9D, 0xD8, 0x99, 0x68, 0xC6, 0x8E, 0xBB, 0xCC, 0xB5, 0x63, 0xE7, 0x5C, 0x66, 0x83, 0x6E, 0x6D, 0x5D, 0x2E, 0xFC, 0x69, 0xDF, 0x5F, 0x9C, 0x7B, 0x0A, 0x84, 0x01, 0x6F, 0x82, 0x0C, 0x70, 0x16, 0x7A, 0xB7, 0xA6, 0xF1, 0xD8, 0xC9, 0x7A, 0x00, 0xD3, 0xC5, 0x01, 0xA4, 0xEE, 0x69, 0xDD, 0x7C, 0x53, 0x80, 0xE2, 0x9A, 0xB6, 0x7A, 0x43, 0x1E, 0x89, 0xF6, 0x73, 0x15, 0xAB, 0x7B, 0x2D, 0x70, 0xE3, 0x96, 0xAF, 0x12, 0x8E, 0xEC, 0xBF, 0x00, 0x66, 0xB0, 0x96, 0x5C, 0x5A, 0x14, 0xCE, 0x91, 0x26, 0x0C, 0xFB, 0x5F, 0x22, 0xAB, 0xFE, 0x8C, 0x2D, 0x51, 0xC0, 0x04, 0x70, 0x07, 0xF2, 0x4D, 0xD1, 0x93, 0x79, 0x84, 0xF9, 0xBD, 0x5E, 0x99, 0x9C, 0xAD, 0xEF, 0xA2, 0x92, 0x12, 0x57, 0x2A, 0x9D, 0xA7, 0x3B, 0x4A, 0x27, 0x7F, 0x01, 0x90, 0x06, 0xD2, 0x80, 0xA1, 0x7C, 0x88, 0x02, 0x3A, 0x80, 0x15, 0xE0, 0x03, 0xF4, 0xEC, 0x80, 0x2B, 0xA0, 0x66, 0x11, 0x40, 0x14, 0xA0, 0x03, 0x9C, 0x85, 0x32, 0x52, 0x26, 0x34, 0x9A, 0xAC, 0x8A, 0x54, 0x5F, 0x75, 0x2D, 0x39, 0x7B, 0x05, 0xF5, 0xC4, 0x5F, 0x7D, 0x04, 0x89, 0xBF, 0x99, 0x4F, 0xEF, 0x25, 0xA4, 0xE9, 0xFF, 0x20, 0x02, 0xB8, 0xBF, 0x11, 0x58, 0xF1, 0xBF, 0x3D, 0x6D, 0xE8, 0x29, 0x02, 0xC2, 0x81, 0xBC, 0x4A, 0xF2, 0x65, 0x3F, 0xB1, 0x38, 0x6C, 0xD7, 0x16, 0x97, 0x47, 0x61, 0x24, 0x1C, 0x60, 0x81, 0x5D, 0x07, 0x7E, 0x56, 0xB6, 0x6A, 0xD8, 0xE7, 0x96, 0xCB, 0x57, 0xBF, 0x5B, 0xA1, 0x66, 0x00, 0xFE, 0x85, 0x03, 0x91, 0x40, 0x6F, 0x46, 0xB3, 0x39, 0x10, 0xB9, 0x08, 0xC0, 0x1D, 0xD0, 0x06, 0x64, 0xEE, 0x4F, 0xDD, 0xB4, 0x99, 0x62, 0x27, 0x4E, 0x85, 0x1F, 0x5A, 0x7C, 0x65, 0x8E, 0x7C, 0xB5, 0xAA, 0x61, 0xAC, 0xE9, 0x44, 0x96, 0xE0, 0x0C, 0x4E, 0xEA, 0x18, 0x68, 0xD9, 0x3C, 0x9F, 0x01, 0xC9, 0x73, 0x2C, 0x77, 0x4B, 0x29, 0x76, 0x2F, 0x60, 0x77, 0x07, 0xC0, 0x0C, 0xF0, 0xB3, 0x78, 0x85, 0xAD, 0x6C, 0x05, 0xCF, 0xF9, 0x07, 0x3A, 0xDB, 0x1B, 0x2B, 0xB3, 0x8E, 0x61, 0x02, 0x9F, 0x4D, 0xCE, 0x4E, 0xD6, 0x0E, 0x3F, 0xCD, 0xEA, 0xB3, 0x01, 0x1F, 0x3C, 0x3C, 0x01, 0xB8, 0x00, 0x79, 0x80, 0x36, 0x60, 0x62, 0x6B, 0x1A, 0x1D, 0x88, 0xB9, 0x33, 0xF8, 0x22, 0x16, 0x0A, 0x58, 0x03, 0x92, 0xC0, 0x31, 0x40, 0x99, 0x81, 0x6A, 0xB4, 0xD9, 0xF6, 0x7E, 0xF3, 0xFA, 0x41, 0x86, 0x87, 0x5B, 0xF6, 0x55, 0x10, 0xA8, 0x74, 0x6B, 0xFD, 0x20, 0xD9, 0xC8, 0xE4, 0x9C, 0xDF, 0xA5, 0xDD, 0x1F, 0x71, 0x80, 0xA7, 0x09, 0x2D, 0x2C, 0xF3, 0xEC, 0xA1, 0x6A, 0x80, 0xCF, 0xE2, 0xDC, 0x0F, 0xA5, 0x6E, 0xB8, 0xBF, 0xFB, 0x47, 0xBD, 0xBD, 0x29, 0x03, 0xE8, 0x3D, 0x9D, 0x5E, 0xC1, 0x5F, 0xF8, 0xB7, 0x50, 0x45, 0x9B, 0x40, 0xF2, 0xF7, 0xF8, 0xA6, 0x70, 0x17, 0x4A, 0x4A, 0x48, 0x02, 0xA5, 0xB7, 0xBB, 0x5D, 0x0C, 0x08, 0xA7, 0xBC, 0x24, 0x10, 0x01, 0xF8, 0x00, 0x4A, 0x9F, 0xED, 0x01, 0xD2, 0xEE, 0x00, 0x60, 0x38, 0xAD, 0xE6, 0xBF, 0xD8, 0xB1, 0x37, 0x1B, 0x4D, 0xC7, 0x95, 0x80, 0x95, 0x16, 0x28, 0x01, 0x9E, 0xC4, 0xF5, 0xDA, 0x0C, 0x92, 0xAB, 0x9D, 0xBC, 0x76, 0x7E, 0xFA, 0x82, 0x7E, 0x52, 0x8B, 0x89, 0x4E, 0xA0, 0x02, 0x48, 0x03, 0xC2, 0x17, 0x05, 0x30, 0x23, 0xC3, 0x86, 0x37, 0xF9, 0x4F, 0x13, 0xCE, 0x13, 0x57, 0x0B, 0x38, 0x15, 0xBC, 0x72, 0xE7, 0xDF, 0xE6, 0x5F, 0x38, 0x85, 0x81, 0x97, 0x27, 0xD0, 0x64, 0x00, 0xA3, 0x74, 0x2E, 0x40, 0x2E, 0xAA, 0x61, 0x04, 0x95, 0xDB, 0x9B, 0x6D, 0x05, 0x68, 0x7D, 0xDC, 0xE6, 0x02, 0x48, 0x03, 0xA6, 0xB4, 0x28, 0xAD, 0x16, 0x28, 0x89, 0x2C, 0x43, 0x25, 0x48, 0xFA, 0xBF, 0xC2, 0x52, 0x85, 0xC5, 0x5A, 0x03, 0x8B, 0xD2, 0xC9, 0x1F, 0x42, 0x0D, 0x9E, 0x8A, 0x29, 0x56, 0xE7, 0xDD, 0xE2, 0x00, 0x5A, 0xEF, 0xF5, 0xA8, 0x9E, 0x14, 0xBE, 0x6C, 0x60, 0x14, 0xA8, 0x04, 0xD2, 0x81, 0x58, 0xE0, 0x67, 0x4F, 0x1F, 0x25, 0x4E, 0xDB, 0xAD, 0xB6, 0x53, 0x7B, 0xE4, 0x76, 0x8A, 0x5E, 0xF4, 0xA4, 0xA8, 0xF4, 0xDD, 0xD6, 0x4E, 0x78, 0x5F, 0xCD, 0xF7, 0xDC, 0xB5, 0x23, 0x48, 0x79, 0xF8, 0x43, 0x51, 0x38, 0x96, 0x02, 0x01, 0xBC, 0x81, 0xA9, 0xD7, 0x53, 0x8E, 0x8C, 0xB8, 0xAB, 0x70, 0xBB, 0x16, 0x36, 0x80, 0x18, 0xB0, 0xFB, 0xD0, 0x3B, 0x43, 0x73, 0x53, 0xC5, 0x1B, 0x73, 0x59, 0x6D, 0x13, 0x8B, 0x64, 0xFB, 0xA7, 0xF4, 0xC6, 0xAA, 0xF3, 0x87, 0x14, 0x47, 0x5E, 0x90, 0x3C, 0x97, 0x75, 0xF2, 0x76, 0x7C, 0x33, 0x53, 0xC7, 0x16, 0x3D, 0xC0, 0x28, 0x50, 0xBD, 0xB0, 0x05, 0x33, 0x43, 0x79, 0x93, 0xBF, 0xA7, 0xA6, 0x3F, 0xED, 0xDE, 0x52, 0xEE, 0xC8, 0x09, 0x43, 0xBA, 0xA1, 0xEF, 0x25, 0x9A, 0xF1, 0x4B, 0x5D, 0x70, 0xCC, 0xE4, 0xD3, 0xA9, 0x38, 0xD6, 0xCC, 0xEA, 0x40, 0x2C, 0x6A, 0x6E, 0xB5, 0xA8, 0x16, 0x1E, 0x92, 0x17, 0x3C, 0x24, 0x27, 0x90, 0x0B, 0x37, 0x20, 0xB8, 0xAD, 0x09, 0xAD, 0x06, 0x85, 0xD2, 0xD0, 0x81, 0xEA, 0x93, 0xAC, 0xE8, 0x09, 0x63, 0xCE, 0xC2, 0x10, 0xFD, 0x5E, 0xAB, 0xD2, 0x50, 0xCE, 0x6F, 0x73, 0x47, 0xA6, 0xF2, 0xD3, 0x83, 0xD6, 0xD6, 0x08, 0x8C, 0xB1, 0xCF, 0x93, 0xC9, 0xC7, 0x4F, 0x40, 0x05, 0x90, 0x07, 0xE8, 0xDC, 0x91, 0xC7, 0x1B, 0x98, 0xEB, 0xAD, 0x63, 0xFE, 0x24, 0xCA, 0xD8, 0x2D, 0x02, 0xC2, 0xDB, 0x33, 0x53, 0x37, 0x66, 0x3F, 0xCD, 0xD5, 0x36, 0x2D, 0x77, 0xA6, 0x31, 0x90, 0xD7, 0x4F, 0x48, 0xD5, 0x1C, 0x88, 0x64, 0xBE, 0x25, 0x50, 0xEC, 0xD4, 0xA7, 0x80, 0xD8, 0x9A, 0xD2, 0x01, 0x1B, 0xE0, 0x24, 0xF0, 0x18, 0x56, 0x69, 0xB5, 0xDE, 0xD6, 0x26, 0x85, 0x6D, 0x35, 0xF3, 0x17, 0xCF, 0xEB, 0xF0, 0x8D, 0xFC, 0xCD, 0x2E, 0x84, 0x86, 0x13, 0xD7, 0x24, 0xF4, 0xCE, 0x43, 0xAF, 0xDA, 0x8C, 0x8C, 0xCF, 0x58, 0x1B, 0xBF, 0xDB, 0x10, 0x9F, 0x01, 0x54, 0x01, 0xF1, 0x85, 0x2D, 0x06, 0x60, 0xAD, 0x76, 0x3E, 0x79, 0x58, 0x6C, 0x3C, 0xC9, 0xEB, 0xB6, 0xDE, 0xA5, 0xA4, 0xE1, 0x77, 0x4D, 0x91, 0xB0, 0x87, 0x61, 0x02, 0xB3, 0x86, 0x4D, 0xFB, 0x3A, 0x0E, 0x99, 0x2C, 0x0B, 0x78, 0x03, 0xB9, 0x36, 0x14, 0xB9, 0x47, 0x9E, 0xF4, 0x82, 0x3E, 0x75, 0x01, 0x62, 0xA1, 0x79, 0xFB, 0xAC, 0xEC, 0xB1, 0xDA, 0x40, 0x33, 0x2B, 0x64, 0xA5, 0xF7, 0x12, 0x07, 0xDC, 0x75, 0x62, 0x36, 0x6F, 0x77, 0x66, 0x7B, 0x13, 0x53, 0x78, 0x43, 0xD0, 0xFB, 0x61, 0xE8, 0x56, 0x6B, 0xFD, 0x34, 0xD0, 0x7B, 0x42, 0x4C, 0x6C, 0x34, 0xD8, 0x0C, 0x13, 0x17, 0xA0, 0x03, 0x70, 0x52, 0x3D, 0x76, 0xA2, 0x8C, 0x02, 0x8F, 0x77, 0xD4, 0xB6, 0x61, 0x62, 0xE9, 0xB0, 0x78, 0x79, 0x77, 0xF4, 0x67, 0x1A, 0xDD, 0x2D, 0xD2, 0x82, 0x9E, 0x37, 0xCE, 0x1F, 0x76, 0xC8, 0xDC, 0xDF, 0x93, 0x05, 0x2F, 0x25, 0x72, 0x00, 0x0B, 0x80, 0xAA, 0x79, 0x2E, 0x40, 0xF5, 0xC2, 0x81, 0x58, 0xA8, 0x01, 0xF7, 0xDF, 0x12, 0x7F, 0xF2, 0x00, 0xB3, 0x35, 0xCC, 0x61, 0x68, 0xF0, 0x65, 0xF9, 0x4B, 0x69, 0xF6, 0xEC, 0xEB, 0xBB, 0xAB, 0xCB, 0x0F, 0x69, 0xB3, 0xBD, 0xE8, 0xE5, 0x0E, 0xE8, 0xC9, 0x57, 0x38, 0x8C, 0xFE, 0x34, 0xFF, 0x08, 0x4D, 0x0F, 0xAF, 0xF4, 0x5F, 0x21, 0x7D, 0xE0, 0xD1, 0x9E, 0xA7, 0xB7, 0x2B, 0xAE, 0x2E, 0x8D, 0xBC, 0x9D, 0xFA, 0x53, 0x7E, 0xDC, 0xF4, 0x0A, 0xCA, 0xA5, 0x35, 0xE0, 0x8F, 0x62, 0x58, 0x71, 0xC8, 0xDD, 0x5E, 0x39, 0x8D, 0xBB, 0x65, 0xBB, 0x2E, 0xBC, 0x81, 0x61, 0x50, 0xC7, 0xEF, 0x55, 0x4E, 0x0C, 0x0F, 0x3B, 0x3E, 0x81, 0xF7, 0x01, 0xB4, 0xF9, 0x26, 0xAD, 0x26, 0xA8, 0x91, 0xAC, 0x81, 0xD5, 0x6A, 0x2E, 0x67, 0xA4, 0x9B, 0xA1, 0x96, 0xCE, 0x36, 0x39, 0x44, 0x0B, 0x69, 0x7C, 0x59, 0xF7, 0xC9, 0xC3, 0x3E, 0xAD, 0x1F, 0xEC, 0x7C, 0xFA, 0xB8, 0x2F, 0x3C, 0x01, 0x8B, 0x85, 0x2E, 0x1A, 0x28, 0xFA, 0x7C, 0x59, 0x0E, 0x79, 0x65, 0x34, 0xBC, 0x1A, 0x1F, 0x4C, 0x42, 0x2B, 0x85, 0x9D, 0xEC, 0x5C, 0xD9, 0xCB, 0xF1, 0xE9, 0xC9, 0x9D, 0x1C, 0xE9, 0xF4, 0xC1, 0xFA, 0x7C, 0x52, 0x81, 0x04, 0x90, 0x00, 0xA2, 0xEE, 0x03, 0x48, 0x2E, 0xC2, 0x00, 0xE5, 0x44, 0x99, 0xCF, 0x89, 0xA5, 0xF6, 0x95, 0xA6, 0xD5, 0x74, 0x53, 0xD4, 0xE7, 0x87, 0x74, 0x41, 0x2D, 0xBD, 0x24, 0xF4, 0x9E, 0x46, 0x30, 0xD2, 0xCB, 0x7F, 0xA8, 0xB4, 0x3D, 0x44, 0xE5, 0xE5, 0x56, 0x9B, 0x4B, 0xEB, 0x9B, 0xC5, 0x62, 0x22, 0x8F, 0xA6, 0xB4, 0x0A, 0x90, 0x03, 0x84, 0x00, 0x9A, 0xC0, 0x31, 0x40, 0xA9, 0x68, 0xCD, 0x9A, 0xF8, 0xDC, 0x1B, 0x7E, 0xBD, 0xF3, 0x66, 0x07, 0x9E, 0xDA, 0xE3, 0x44, 0x2A, 0x9E, 0x4D, 0x1A, 0xA0, 0x1C, 0x22, 0xB3, 0x01, 0x23, 0x98, 0x5F, 0xC9, 0x0E, 0x4E, 0xEB, 0x9F, 0x48, 0xA0, 0x9B, 0x2D, 0x09, 0x81, 0xD8, 0x3B, 0xFD, 0x51, 0xC0, 0x6C, 0x21, 0x80, 0x1E, 0xE0, 0x30, 0x9F, 0xDA, 0x6E, 0xA9, 0xF0, 0x34, 0x1A, 0xCD, 0x30, 0x6B, 0x5D, 0x31, 0x36, 0x05, 0x46, 0x8B, 0xD6, 0x5D, 0x7E, 0x63, 0x05, 0x7B, 0x05, 0xBF, 0x7E, 0x1C, 0x9B, 0xBB, 0x38, 0x9D, 0x1D, 0xF7, 0xAA, 0xC6, 0x63, 0x84, 0x3F, 0x22, 0x43, 0x6C, 0xF2, 0x0C, 0x8C, 0x2E, 0x1C, 0xE8, 0x5A, 0xB0, 0x19, 0xE5, 0xDB, 0x08, 0x54, 0xFD, 0xD1, 0x7A, 0x51, 0xF6, 0x55, 0xA4, 0xBA, 0x90, 0xE0, 0xA1, 0xEC, 0x97, 0x78, 0xF2, 0x9A, 0x3F, 0xD7, 0x69, 0x7A, 0x96, 0x84, 0xDD, 0xE0, 0x64, 0x1D, 0x8D, 0x05, 0x14, 0x85, 0x90, 0x0F, 0x60, 0x03, 0x34, 0xD5, 0x26, 0x0B, 0x68, 0xBD, 0x91, 0x0D, 0xF8, 0xC2, 0x02, 0x40, 0xA2, 0xEB, 0xDB, 0x9A, 0x65, 0x1C, 0x2B, 0x40, 0x37, 0x22, 0x1D, 0x95, 0x5B, 0xB7, 0xE6, 0xB8, 0x36, 0xB6, 0x50, 0x96, 0x0D, 0xDE, 0x86, 0xAA, 0xED, 0x4C, 0x69, 0x6F, 0x1D, 0xED, 0xF4, 0xC7, 0x81, 0x5B, 0x74, 0x6F, 0xD0, 0x0D, 0x08, 0x60, 0xC5, 0x03, 0xA8, 0x9E, 0x97, 0x40, 0xE9, 0xDD, 0x63, 0x77, 0xD6, 0x06, 0x79, 0x7D, 0x5D, 0x8A, 0xDD, 0xFA, 0xA3, 0xAD, 0xD1, 0xFB, 0x57, 0x3C, 0xE5, 0xE7, 0xF4, 0xFB, 0x04, 0x3E, 0xD1, 0x5F, 0x64, 0x6B, 0x6C, 0x69, 0xA0, 0xA8, 0x4F, 0xED, 0x80, 0x14, 0x60, 0x0E, 0xE4, 0xE6, 0x2B, 0x9D, 0x04, 0xD4, 0x6E, 0x48, 0x02, 0x27, 0x16, 0x67, 0x31, 0xC0, 0x33, 0x3D, 0x99, 0xFB, 0xF2, 0xD1, 0x61, 0x3E, 0xD3, 0xF0, 0x84, 0x9E, 0x41, 0x09, 0xF3, 0x41, 0x38, 0x21, 0x4D, 0xB7, 0x21, 0xF7, 0xCF, 0x68, 0xA9, 0x14, 0x41, 0x04, 0x52, 0x9E, 0xF4, 0x2E, 0xE6, 0x33, 0xEE, 0xD8, 0x38, 0xB7, 0x6B, 0x59, 0xD9, 0x50, 0x71, 0x80, 0xDE, 0x9F, 0x89, 0xAE, 0x79, 0xD6, 0x9D, 0x96, 0x67, 0xC5, 0x43, 0x75, 0x95, 0x44, 0x04, 0x88, 0x1F, 0xF6, 0x7C, 0xEE, 0xF9, 0xB4, 0xE9, 0xA2, 0x60, 0x6B, 0x0D, 0xA0, 0x09, 0xD0, 0x27, 0x58, 0x0A, 0x44, 0x2F, 0x72, 0x61, 0x40, 0x7E, 0x6A, 0x64, 0x6D, 0x11, 0x84, 0x01, 0xBE, 0xB0, 0x03, 0x68, 0x00, 0x66, 0x40, 0x3B, 0x6D, 0x96, 0x30, 0x16, 0x2F, 0xC0, 0x9E, 0x2B, 0x48, 0xEB, 0xDB, 0x74, 0x77, 0x7E, 0x73, 0x55, 0xA4, 0x7F, 0x68, 0xCB, 0xD5, 0x65, 0xE8, 0xB7, 0xED, 0xA0, 0x1A, 0x50, 0xF1, 0xE4, 0x51, 0xED, 0x9C, 0xA1, 0xE3, 0x85, 0x75, 0xE2, 0x0D, 0x88, 0xAF, 0xA7, 0x7F, 0x7F, 0x56, 0x06, 0xE4, 0x1A, 0x8B, 0x96, 0x98, 0xED, 0x96, 0x97, 0xFE, 0xA9, 0x98, 0xF6, 0x45, 0x01, 0x69, 0x0B, 0xC8, 0x98, 0xEC, 0x2B, 0xF1, 0x27, 0xE6, 0xBD, 0xBA, 0xDD, 0x79, 0x90, 0x3F, 0x70, 0x1A, 0x18, 0x83, 0x2A, 0x89, 0x2E, 0x22, 0x80, 0x5E, 0x85, 0x80, 0x53, 0x80, 0xC8, 0x22, 0x01, 0x55, 0xC0, 0x16, 0x11, 0x8B, 0x04, 0xAA, 0x69, 0xB3, 0xFA, 0x87, 0x7F, 0xE8, 0xA0, 0xE9, 0x56, 0x69, 0x67, 0x8B, 0x68, 0x0D, 0x37, 0x85, 0x72, 0xFD, 0x17, 0xF2, 0x5C, 0xDD, 0xCC, 0xF3, 0xED, 0x8D, 0x22, 0x03, 0x24, 0xDB, 0xB0, 0xB3, 0xC4, 0x2E, 0x77, 0x9C, 0x99, 0xDC, 0x73, 0x45, 0x13, 0x10, 0xBB, 0x97, 0x9B, 0x48, 0xC6, 0x4A, 0xB6, 0x15, 0x9E, 0xED, 0x00, 0x0B, 0x18, 0xE4, 0x08, 0x10, 0x0A, 0x9C, 0xB5, 0xA0, 0x7C, 0x84, 0x93, 0x65, 0x71, 0x74, 0x11, 0x5B, 0xC0, 0x3E, 0xFB, 0xC9, 0x00, 0x49, 0x40, 0x0D, 0xF0, 0x06, 0x7A, 0x2D, 0xAF, 0x0E, 0xF8, 0x59, 0xD8, 0xA2, 0x81, 0x10, 0x20, 0x0F, 0x50, 0xA8, 0x71, 0x7F, 0x0F, 0x1C, 0xBD, 0x9B, 0x73, 0xFF, 0x8E, 0xF2, 0x53, 0xB3, 0xAE, 0xCE, 0x60, 0x42, 0xCE, 0xCE, 0x07, 0x87, 0x5B, 0x2B, 0xE8, 0x34, 0x9E, 0x57, 0x4E, 0xC3, 0xFC, 0x6E, 0xA1, 0x97, 0xAC, 0x76, 0x2A, 0x81, 0x25, 0x38, 0xDC, 0x52, 0x16, 0x06, 0xE8, 0x6A, 0xD4, 0x96, 0x03, 0xED, 0x8F, 0x5F, 0x71, 0xDD, 0x76, 0x5B, 0x8A, 0xBA, 0x7F, 0x35, 0x0D, 0xE2, 0x07, 0x0F, 0x67, 0xD8, 0x26, 0x6F, 0x83, 0x55, 0x0E, 0x68, 0x01, 0xB9, 0x3F, 0x3B, 0xFB, 0xE6, 0x49, 0xA0, 0xD6, 0x82, 0x6A, 0x80, 0x2F, 0x72, 0xED, 0x29, 0x0E, 0xD4, 0x01, 0xA6, 0x17, 0xB3, 0x30, 0xA0, 0x63, 0xB1, 0x66, 0x3D, 0x02, 0xD4, 0x63, 0x33, 0x9C, 0xCE, 0xFC, 0x38, 0x86, 0xF0, 0xA7, 0xAD, 0x59, 0x9D, 0x42, 0x18, 0xD7, 0xE3, 0x77, 0x3A, 0x52, 0x0D, 0xB4, 0x5C, 0xE9, 0x60, 0x43, 0x96, 0x4F, 0x92, 0x3C, 0x0F, 0x69, 0x3C, 0x8F, 0x2D, 0xA2, 0x00, 0xFF, 0xA4, 0x62, 0x49, 0x2F, 0x1C, 0xB8, 0x95, 0x28, 0x6A, 0x1F, 0xB2, 0x77, 0x1E, 0x13, 0x90, 0xFB, 0xB9, 0xC2, 0x0A, 0xF3, 0x18, 0xEA, 0x2E, 0x57, 0xBE, 0xAB, 0xA4, 0xE4, 0xFC, 0x5D, 0x40, 0x78, 0x5B, 0xCD, 0x37, 0x85, 0x2B, 0xFF, 0xCE, 0xBB, 0x05, 0x14, 0x7B, 0x2D, 0x3B, 0x50, 0x06, 0x64, 0x01, 0x1E, 0x80, 0xE8, 0xBD, 0xC5, 0x1F, 0x03, 0x38, 0x3B, 0xE3, 0xA0, 0x00, 0x37, 0x8F, 0xFE, 0xAC, 0xE6, 0x19, 0x57, 0x2D, 0xA8, 0x8C, 0xFC, 0xE0, 0x11, 0x28, 0x9F, 0x94, 0xFB, 0x68, 0xAB, 0x5F, 0x47, 0x07, 0x2F, 0x04, 0x34, 0x10, 0x51, 0x09, 0x24, 0x1F, 0x12, 0xB2, 0x38, 0x40, 0xD6, 0xAB, 0x1F, 0x83, 0xA5, 0xFE, 0xCE, 0xD4, 0xF0, 0xA7, 0x8E, 0x06, 0xCB, 0x25, 0x2F, 0xFE, 0x09, 0xB0, 0xCE, 0xAE, 0xEC, 0x63, 0xB5, 0x79, 0x9A, 0xFF, 0xAC, 0xD5, 0x9C, 0x4E, 0x2E, 0x80, 0x25, 0x09, 0x32, 0x40, 0xCE, 0x6D, 0xA0, 0x51, 0xA0, 0xFD, 0xD3, 0x52, 0xE2, 0x93, 0x1E, 0x33, 0x7C, 0xF3, 0xD0, 0x6A, 0x42, 0x45, 0x32, 0xB6, 0xDB, 0x84, 0x53, 0xED, 0x38, 0x8E, 0x6E, 0xA1, 0xDB, 0xEE, 0x1A, 0x90, 0x83, 0xBA, 0xB3, 0x56, 0x63, 0x00, 0xEF, 0x73, 0x65, 0xA7, 0x49, 0x98, 0x74, 0xBB, 0x46, 0xD0, 0x00, 0xAC, 0x81, 0xDB, 0x97, 0x88, 0x3F, 0x94, 0x0F, 0xEF, 0xD2, 0x29, 0xCB, 0x1D, 0x02, 0xB1, 0x97, 0xE6, 0xE7, 0xDF, 0xF7, 0xEE, 0xC9, 0xC3, 0xB6, 0xF8, 0x11, 0x80, 0xF7, 0x7B, 0x55, 0x1A, 0xE0, 0x51, 0x4E, 0x76, 0x8A, 0xF4, 0x3F, 0xBE, 0xF7, 0x73, 0x00, 0x53, 0xE0, 0xAF, 0xD5, 0x0D, 0x90, 0xB1, 0x28, 0x20, 0x1C, 0xB0, 0x06, 0xD4, 0x01, 0x3F, 0x7B, 0x1E, 0x54, 0x5A, 0x4D, 0xB1, 0xF6, 0x4B, 0xAF, 0x3E, 0x7A, 0xFC, 0x32, 0x3C, 0xE2, 0xC4, 0x66, 0x29, 0xF6, 0x86, 0x4B, 0x63, 0x25, 0x8B, 0x65, 0x27, 0x8A, 0x52, 0xE7, 0xE4, 0xCE, 0x8B, 0xB4, 0x2B, 0xC3, 0xAF, 0xDE, 0x1A, 0x15, 0xA0, 0x14, 0xF0, 0x01, 0x34, 0x80, 0xB3, 0xD0, 0x3E, 0x6F, 0x02, 0x50, 0x3C, 0x5E, 0x9B, 0xD8, 0x30, 0x6F, 0xB0, 0xC7, 0xC8, 0x79, 0x6F, 0x81, 0xB5, 0xAF, 0xC4, 0xE7, 0x7E, 0x5A, 0x6B, 0x27, 0xD9, 0x53, 0x7F, 0x2C, 0xE0, 0x0E, 0xC6, 0x29, 0xD3, 0x80, 0xE2, 0xB9, 0x59, 0x00, 0x0A, 0x36, 0x85, 0x03, 0x93, 0x0B, 0x03, 0x6A, 0xE1, 0x02, 0xC8, 0x00, 0x8F, 0xE6, 0xDA, 0x63, 0x35, 0xC3, 0x09, 0xF2, 0xE0, 0x2A, 0x20, 0xC7, 0x7F, 0x2A, 0x4E, 0x69, 0x2B, 0xB9, 0x69, 0xB6, 0x43, 0x55, 0x36, 0xE6, 0xDB, 0xE8, 0xA0, 0xD5, 0x7D, 0x8F, 0x35, 0x50, 0x9E, 0x65, 0x4A, 0xF5, 0x95, 0x96, 0x40, 0xA8, 0xF2, 0x42, 0x19, 0x10, 0x0A, 0xD8, 0xC2, 0x9F, 0xD6, 0xA0, 0x5C, 0x98, 0x76, 0x6E, 0xC9, 0x82, 0x2E, 0xEA, 0xE2, 0x7D, 0xBC, 0x01, 0x5F, 0x33, 0x57, 0x01, 0xED, 0xEF, 0x2B, 0xF5, 0x17, 0x2A, 0xB7, 0x75, 0x97, 0x14, 0x6C, 0xE8, 0x73, 0x07, 0xF6, 0x42, 0x98, 0x29, 0x0D, 0xD4, 0x27, 0x76, 0x2C, 0xCA, 0x96, 0x35, 0x40, 0x0E, 0x10, 0x02, 0xE4, 0x93, 0xC0, 0x4C, 0xAB, 0x39, 0xC4, 0x61, 0x6D, 0xD0, 0xCA, 0x56, 0xF3, 0x5F, 0x31, 0x7D, 0xA3, 0x9E, 0xAE, 0x98, 0x1D, 0xF9, 0x83, 0x6A, 0xFC, 0x0C, 0x32, 0xA2, 0x57, 0xFE, 0x50, 0xCC, 0xA7, 0x3D, 0x17, 0x5D, 0x65, 0x3C, 0xF8, 0x9D, 0x02, 0x24, 0x3F, 0xC6, 0x6B, 0x20, 0x15, 0x68, 0x4E, 0x54, 0xDA, 0xC2, 0xB9, 0x8E, 0xEF, 0x78, 0x72, 0x5E, 0x57, 0x83, 0xD7, 0x6B, 0x16, 0x57, 0x51, 0xF9, 0x10, 0x90, 0xAB, 0x41, 0x50, 0x3C, 0x15, 0xCA, 0x52, 0x77, 0x2B, 0x54, 0xA6, 0x22, 0x68, 0x00, 0xE1, 0x54, 0x1B, 0xB8, 0xD5, 0x98, 0x4F, 0x2F, 0xD8, 0x2A, 0x61, 0xC1, 0x37, 0xED, 0x00, 0xB1, 0x6F, 0xEA, 0xD0, 0x6A, 0x3C, 0xA4, 0xF1, 0x9A, 0xAB, 0xD0, 0xA0, 0x7C, 0x12, 0x28, 0x98, 0x28, 0xB2, 0xC9, 0x32, 0x8C, 0xFA, 0xAA, 0xE0, 0x8E, 0x7E, 0xDF, 0x09, 0x58, 0x89, 0xDA, 0xC2, 0x54, 0x4D, 0xD6, 0x38, 0x2D, 0x72, 0x71, 0xFA, 0xEE, 0x01, 0x34, 0x07, 0x28, 0x76, 0x5D, 0x0B, 0x66, 0x1B, 0xEC, 0xB1, 0x85, 0xC3, 0x81, 0xBE, 0xFE, 0x5C, 0x08, 0xC0, 0x1B, 0x97, 0x18, 0xD0, 0xFD, 0xF6, 0xE4, 0x88, 0xA7, 0x97, 0xF8, 0xF4, 0x9E, 0xED, 0x37, 0x28, 0xE7, 0xCF, 0xD9, 0x09, 0xE8, 0xCD, 0xB1, 0xB1, 0x03, 0x44, 0x02, 0xA5, 0x40, 0x2F, 0x46, 0xD9, 0xAB, 0x00, 0xD0, 0x01, 0xAC, 0x80, 0x0C, 0xDA, 0x2C, 0x7F, 0x93, 0xC6, 0x5C, 0xB7, 0x65, 0x56, 0x6F, 0x88, 0xB5, 0xB0, 0x48, 0x1C, 0x47, 0xD4, 0xA5, 0x04, 0x0F, 0xA7, 0x56, 0x65, 0x3D, 0x71, 0xA2, 0xBD, 0x83, 0xC6, 0xD4, 0x2E, 0x79, 0x2A, 0xAE, 0x45, 0xD7, 0x5B, 0x61, 0x77, 0x3F, 0x9A, 0x6E, 0xC0, 0x0B, 0x38, 0x09, 0x48, 0xE2, 0x95, 0xE6, 0x8D, 0x3B, 0x6E, 0xAD, 0x2A, 0x37, 0x40, 0xA9, 0x19, 0x7D, 0x00, 0x73, 0xBC, 0xD2, 0x85, 0x4F, 0x67, 0x5F, 0xB1, 0x1F, 0xFE, 0x3A, 0xA0, 0x0B, 0x03, 0xA0, 0x94, 0x52, 0xAE, 0x5B, 0xBB, 0x44, 0x14, 0xF0, 0x02, 0x7A, 0x0D, 0x79, 0x64, 0x11, 0x1F, 0x38, 0x20, 0xB2, 0x68, 0x20, 0x85, 0x36, 0xAB, 0xCD, 0xE2, 0xF5, 0x2D, 0x52, 0x48, 0xC8, 0x85, 0xA9, 0xC3, 0xFF, 0xB2, 0x0F, 0x71, 0x13, 0xDD, 0x14, 0x5D, 0x11, 0xC4, 0x8E, 0x71, 0x2E, 0xF8, 0x24, 0x0F, 0x51, 0x44, 0xF3, 0x51, 0xB5, 0xDE, 0xC5, 0x68, 0x58, 0xDB, 0x63, 0xC0, 0x09, 0x4A, 0x39, 0x01, 0x31, 0x40, 0x53, 0xA9, 0x38, 0x76, 0x3E, 0xE5, 0x9A, 0xF7, 0x49, 0xF5, 0x06, 0xF4, 0xB0, 0xF5, 0x3D, 0x70, 0xCE, 0x9A, 0xDE, 0x00, 0x3C, 0xCC, 0xA7, 0xA5, 0xCB, 0x14, 0x33, 0xA7, 0xD6, 0xAE, 0xB1, 0x36, 0x77, 0xA0, 0x95, 0x31, 0xF9, 0x5B, 0x74, 0x59, 0x06, 0xF0, 0x04, 0xE2, 0x00, 0x1E, 0x80, 0x0D, 0xE0, 0x02, 0x04, 0x95, 0xA0, 0x82, 0x46, 0x6B, 0x6C, 0x4A, 0x29, 0xB8, 0xE6, 0x78, 0xFC, 0x0C, 0x3A, 0x96, 0xEB, 0xCC, 0x31, 0xF8, 0xA0, 0x72, 0xB7, 0x5D, 0xB1, 0x6D, 0x81, 0xD7, 0x97, 0x30, 0xDD, 0xA3, 0x8D, 0xDE, 0x6F, 0xD3, 0x54, 0xF1, 0xC7, 0xDF, 0x29, 0x06, 0xA4, 0x7E, 0x1A, 0x66, 0x0C, 0x20, 0x09, 0xF0, 0x4D, 0x76, 0x20, 0xC9, 0x79, 0xF5, 0x27, 0x72, 0x81, 0xE4, 0x0F, 0x58, 0xD2, 0x00, 0x65, 0xF9, 0xF1, 0xB9, 0x9B, 0xB8, 0x60, 0xDC, 0x6D, 0x90, 0xC4, 0x7C, 0x8D, 0x86, 0x43, 0x03, 0x0C, 0x23, 0x40, 0x53, 0x16, 0xB7, 0x80, 0x59, 0x19, 0xAC, 0x48, 0x60, 0x74, 0x11, 0x8B, 0x03, 0x54, 0x2D, 0x14, 0x18, 0x7A, 0x01, 0x9C, 0x46, 0x63, 0xF2, 0xD9, 0x1E, 0x2F, 0x0A, 0xB6, 0x0B, 0x33, 0xFC, 0x49, 0x54, 0x95, 0xF4, 0x86, 0x1B, 0xA6, 0x62, 0x03, 0x11, 0xBF, 0xD9, 0xE9, 0xB1, 0xAE, 0xA1, 0x6F, 0xC7, 0xA4, 0x48, 0x2E, 0x54, 0xC2, 0x6F, 0xF6, 0x99, 0x90, 0x8A, 0x87, 0xCE, 0x15, 0xF8, 0x5A, 0x6C, 0xED, 0x71, 0x1F, 0x3E, 0xB9, 0x2E, 0xB9, 0x0B, 0x55, 0xE1, 0xD3, 0x1C, 0xC0, 0xFC, 0x2E, 0xCA, 0xB1, 0x04, 0x42, 0xF1, 0x26, 0x66, 0xA9, 0x3D, 0x9E, 0x1E, 0xA6, 0x76, 0x8C, 0xB2, 0x2B, 0x3C, 0x10, 0x8B, 0xF1, 0xB5, 0x5D, 0x03, 0xBD, 0xB6, 0x3B, 0xB1, 0x98, 0x1B, 0x72, 0x16, 0x06, 0xD8, 0x63, 0xC9, 0x35, 0x1A, 0xFB, 0xFE, 0xED, 0xDF, 0x59, 0x55, 0x68, 0x66, 0xDE, 0xBE, 0x31, 0x91, 0x5A, 0xFF, 0x8D, 0xC3, 0xD3, 0xA3, 0x8D, 0x37, 0xB5, 0xAF, 0x8C, 0x2B, 0xFB, 0x74, 0x69, 0x54, 0xD6, 0x8B, 0xB1, 0xD7, 0x70, 0x31, 0x40, 0x34, 0x6C, 0xC6, 0x0C, 0xC4, 0x01, 0xD4, 0x01, 0xEE, 0x0A, 0x7E, 0x65, 0xEC, 0x15, 0x4C, 0x81, 0x06, 0x3A, 0xB7, 0x99, 0x54, 0xEE, 0x83, 0x80, 0x38, 0xE0, 0xB9, 0x76, 0x45, 0x9A, 0xD1, 0x02, 0x25, 0xEE, 0xD8, 0x07, 0x72, 0x53, 0x35, 0x76, 0x51, 0x72, 0x5B, 0xB7, 0x53, 0x00, 0xC9, 0xD5, 0xDD, 0x80, 0x6C, 0xA0, 0x62, 0xC1, 0x87, 0xB5, 0x08, 0xA0, 0x63, 0xFD, 0x54, 0x46, 0xA3, 0xC9, 0x86, 0xFF, 0x72, 0xEB, 0xA1, 0x0D, 0x3F, 0xDB, 0x3A, 0xE3, 0xCE, 0x82, 0xC3, 0xCF, 0xF5, 0x87, 0xA3, 0x8D, 0x2F, 0xED, 0xFE, 0x9B, 0x8F, 0x74, 0x42, 0x2A, 0x8D, 0x46, 0x4D, 0x2A, 0x06, 0x21, 0x85, 0xFB, 0xE4, 0x61, 0xA0, 0x91, 0x52, 0xB7, 0x40, 0x2C, 0x64, 0x00, 0xDF, 0x98, 0x2D, 0x86, 0x11, 0xBF, 0xF5, 0x79, 0x7C, 0x8A, 0x87, 0x99, 0x65, 0xEC, 0x87, 0xB4, 0x63, 0xAB, 0x8C, 0xEE, 0x4A, 0xE0, 0xA9, 0xFB, 0xA2, 0xE7, 0xEE, 0x87, 0x5D, 0xAD, 0x39, 0x2F, 0xFD, 0x3C, 0x53, 0x50, 0x15, 0x60, 0xEA, 0x8C, 0x26, 0x30, 0x4E, 0xBF, 0xDA, 0xA2, 0x00, 0x5D, 0x1C, 0xBE, 0xD2, 0xF8, 0x24, 0x1F, 0xB9, 0xEA, 0x10, 0xE6, 0xDC, 0xF2, 0x5F, 0xBC, 0xF7, 0xC0, 0x6C, 0xEB, 0xEE, 0x16, 0x6C, 0x3C, 0xC7, 0xF1, 0xEB, 0x96, 0x9B, 0x30, 0xFC, 0x33, 0xDA, 0xD0, 0x09, 0x39, 0xB7, 0x82, 0xB0, 0xCF, 0xD9, 0x13, 0xD1, 0x8E, 0x8D, 0x9A, 0xFD, 0xB6, 0x0E, 0xD0, 0x33, 0xCD, 0x6F, 0x3B, 0x8B, 0x62, 0x53, 0xAE, 0x7A, 0x4F, 0xE6, 0xC8, 0x6B, 0xC1, 0x84, 0xF2, 0xCF, 0xF2, 0xDC, 0x40, 0x16, 0xD0, 0x06, 0x83, 0x24, 0x53, 0x75, 0xD7, 0xDF, 0x11, 0x74, 0x0E, 0xFD, 0x10, 0xEB, 0x27, 0xC9, 0x47, 0xE6, 0xAA, 0x75, 0x75, 0x6F, 0x0B, 0x68, 0x5B, 0x61, 0xAB, 0x04, 0x74, 0x00, 0x17, 0x20, 0x1C, 0xA8, 0x6D, 0xAE, 0x77, 0x0E, 0x20, 0x0E, 0x58, 0xD1, 0x66, 0x06, 0xDF, 0x52, 0xF4, 0xEF, 0xFE, 0x54, 0x31, 0xD7, 0x95, 0x3D, 0x74, 0x7D, 0x44, 0x01, 0x47, 0x47, 0x68, 0xA2, 0x77, 0x7D, 0x07, 0xF3, 0x5F, 0x3E, 0xD1, 0x28, 0xFB, 0x0F, 0x49, 0x9D, 0x5C, 0xC4, 0xC2, 0x06, 0xD0, 0x5E, 0x1C, 0x3E, 0xBC, 0x1D, 0x1D, 0x67, 0xAF, 0x5F, 0x36, 0x0B, 0xBD, 0x6F, 0xAB, 0xCA, 0xB2, 0x84, 0x4F, 0x28, 0x5A, 0xE4, 0xD3, 0x1C, 0xDA, 0x59, 0xCE, 0xC9, 0x5A, 0xEE, 0xBD, 0xBB, 0x0E, 0x03, 0xBE, 0x71, 0xEB, 0x35, 0x9B, 0x7D, 0x72, 0xBD, 0x17, 0xF1, 0x11, 0x3E, 0xEE, 0x00, 0xC2, 0x80, 0x52, 0xBE, 0x49, 0xAB, 0x39, 0xDC, 0x5F, 0x9B, 0x00, 0x63, 0x57, 0x41, 0x41, 0xED, 0x2C, 0x53, 0xA4, 0x40, 0xFE, 0x0A, 0x8F, 0xF5, 0xE7, 0xB3, 0xAD, 0xD4, 0xB9, 0x1D, 0x1D, 0xE4, 0xF4, 0x8F, 0xFA, 0x2A, 0x50, 0x00, 0x46, 0x1C, 0x80, 0x02, 0x32, 0x13, 0x40, 0xE7, 0x3E, 0x3C, 0x40, 0xCF, 0x1E, 0x8E, 0xD7, 0x42, 0x55, 0x40, 0xF3, 0x36, 0xD6, 0x40, 0x14, 0xE0, 0x0E, 0x68, 0x00, 0x11, 0x6F, 0xC3, 0x11, 0xD1, 0xA7, 0xF0, 0xC9, 0x87, 0x69, 0x96, 0x6B, 0x0C, 0x65, 0x56, 0x3B, 0xE0, 0x0D, 0x0C, 0x37, 0x22, 0x01, 0x5A, 0x17, 0x02, 0x64, 0x02, 0x1E, 0x80, 0x0E, 0xE0, 0xBC, 0x3B, 0x28, 0xCD, 0x16, 0x7B, 0x00, 0x6E, 0x5C, 0x3B, 0xC7, 0x2F, 0x39, 0x00, 0x5F, 0xAF, 0x9A, 0x77, 0xC0, 0x07, 0xA3, 0x06, 0xB3, 0x6D, 0x27, 0x72, 0x9A, 0xCB, 0x93, 0x83, 0xCD, 0x3F, 0xB5, 0x8C, 0x0E, 0x44, 0x00, 0x6E, 0x80, 0xF4, 0x47, 0xC7, 0xAC, 0x80, 0xD9, 0x9F, 0xE5, 0x5A, 0xCD, 0xE2, 0xEE, 0x13, 0x94, 0x07, 0x0F, 0x23, 0x6F, 0x65, 0xAB, 0x2E, 0x20, 0x0F, 0x40, 0xC3, 0x96, 0x5E, 0xDD, 0xB3, 0xFD, 0x2F, 0x15, 0xA4, 0xEF, 0xC2, 0x3D, 0xFF, 0xC8, 0x88, 0xB3, 0xC2, 0xFB, 0x2C, 0x3C, 0x16, 0x02, 0x3C, 0x49, 0x32, 0x09, 0xA4, 0x02, 0x4F, 0x99, 0x41, 0xD0, 0x6A, 0xB9, 0x0D, 0x5D, 0xEC, 0x57, 0x80, 0xA1, 0xD2, 0x97, 0x7E, 0x53, 0xF9, 0x36, 0x66, 0x49, 0x59, 0xBD, 0x02, 0x85, 0x0F, 0xD1, 0x13, 0x49, 0x57, 0xFF, 0xA9, 0xBC, 0x1C, 0xF6, 0x1F, 0x75, 0xB3, 0xC5, 0x87, 0x02, 0x58, 0x02, 0x3A, 0x77, 0x82, 0x9F, 0x27, 0xE7, 0xDF, 0xA7, 0x8E, 0xB5, 0xA9, 0x55, 0x0A, 0x48, 0x02, 0xE7, 0xC9, 0xBF, 0xDC, 0x4F, 0x3B, 0x99, 0xE3, 0x91, 0xB5, 0xF3, 0x77, 0x3A, 0xD9, 0x73, 0xE1, 0x38, 0x0E, 0xF0, 0x22, 0xA6, 0x05, 0x3C, 0x59, 0xDC, 0x8B, 0x39, 0x40, 0x27, 0x90, 0x0E, 0x98, 0x00, 0xC7, 0x01, 0x19, 0xE0, 0x6F, 0x33, 0xA8, 0xBD, 0xCF, 0xF7, 0x2F, 0x16, 0x11, 0x59, 0x50, 0x24, 0x9E, 0xC0, 0xE9, 0x61, 0x7C, 0xBB, 0xAF, 0x15, 0x6C, 0x28, 0x0E, 0x81, 0x1E, 0xAD, 0xDB, 0x3F, 0xF4, 0x5C, 0x0B, 0xFC, 0xCD, 0x3C, 0x40, 0xFA, 0x3F, 0x35, 0xA9, 0xEE, 0x86, 0xCE, 0x2E, 0xB7, 0xCA, 0x72, 0xBE, 0xBA, 0x37, 0xF3, 0x97, 0xEC, 0x5C, 0x9F, 0x8C, 0xC4, 0x8A, 0xBB, 0x63, 0x6F, 0x0B, 0x10, 0x9F, 0x12, 0xD9, 0x27, 0xA1, 0x71, 0xAF, 0xE7, 0x4F, 0x26, 0xBC, 0xDC, 0x11, 0xB1, 0x3C, 0x77, 0xE4, 0x4E, 0xEB, 0xEE, 0xFE, 0x83, 0x87, 0x6B, 0x99, 0x07, 0xF9, 0x5C, 0xD3, 0xF2, 0x00, 0xD6, 0x40, 0xF0, 0xD4, 0x7C, 0x68, 0xB5, 0xED, 0x64, 0xE9, 0xF5, 0x2F, 0x64, 0xC1, 0x58, 0xF6, 0x6F, 0xB5, 0xE9, 0x9D, 0xE0, 0xB1, 0x0D, 0xAB, 0x1B, 0xF9, 0x79, 0x53, 0xF4, 0xD8, 0xDE, 0x0D, 0xF4, 0x8C, 0xC2, 0x70, 0x57, 0xEB, 0x23, 0xB8, 0xA7, 0x00, 0xB9, 0x65, 0x43, 0xE2, 0xDC, 0xE5, 0x48, 0xC1, 0x72, 0x2F, 0x6A, 0x97, 0x38, 0x6B, 0x2F, 0x01, 0x2E, 0xEE, 0xB9, 0xD0, 0x59, 0x1C, 0xE0, 0x24, 0xF0, 0x38, 0x5B, 0x93, 0xDE, 0x88, 0x1D, 0x0F, 0x6B, 0xB4, 0x66, 0xA8, 0x98, 0x21, 0x4D, 0x07, 0x4A, 0x61, 0x03, 0x4D, 0xA0, 0x66, 0xAD, 0x15, 0x80, 0xC8, 0x8D, 0x13, 0x8B, 0x02, 0xF4, 0x00, 0xC5, 0x65, 0x6D, 0xDB, 0x1C, 0x43, 0x80, 0x62, 0x33, 0xEA, 0xF2, 0xAF, 0xCB, 0x69, 0x5A, 0x33, 0x4F, 0x79, 0xF3, 0xE4, 0xE2, 0xB7, 0x34, 0x4F, 0x24, 0x8F, 0xB6, 0x9F, 0xF2, 0xB2, 0x4B, 0x59, 0xAD, 0x1E, 0x4D, 0xA6, 0x26, 0xE4, 0x53, 0x30, 0x5E, 0x54, 0x9F, 0x7A, 0xC0, 0x57, 0xD6, 0xA2, 0xC2, 0x6A, 0x6C, 0x60, 0x12, 0x90, 0x73, 0xA7, 0x5D, 0xB8, 0x03, 0xBA, 0xE0, 0x21, 0x3A, 0xEA, 0xED, 0x0D, 0xC9, 0x0C, 0x6E, 0x44, 0x3A, 0x61, 0xAE, 0x5E, 0x3B, 0x2D, 0x78, 0x67, 0x60, 0x76, 0xB7, 0x34, 0x10, 0xBA, 0xE8, 0x85, 0x01, 0x7E, 0x00, 0x33, 0x80, 0xA7, 0xA0, 0x43, 0xF7, 0x10, 0x07, 0x5E, 0x0D, 0x62, 0x7F, 0xA7, 0xEF, 0x3C, 0x18, 0xB5, 0xCD, 0xC8, 0xC8, 0x4D, 0x0A, 0x33, 0xF4, 0xA7, 0x58, 0x59, 0xBA, 0xFE, 0x6F, 0x31, 0x3F, 0xF6, 0xC3, 0x53, 0xA0, 0x1C, 0x48, 0x05, 0x3C, 0x17, 0x07, 0xE0, 0x9B, 0x6C, 0x63, 0x36, 0xBE, 0x36, 0xE4, 0x50, 0xAD, 0x8F, 0x7E, 0xD2, 0x09, 0xD6, 0xA3, 0xFD, 0x70, 0xF2, 0x56, 0x92, 0xEB, 0xE0, 0x9B, 0xE7, 0x6D, 0x59, 0x3E, 0x7B, 0x0B, 0xD3, 0xBF, 0x8E, 0x70, 0x4D, 0xF1, 0x27, 0x20, 0x59, 0x86, 0x90, 0x40, 0x1F, 0xB6, 0x2F, 0x5D, 0x50, 0x05, 0xC9, 0x80, 0x5C, 0xD8, 0xDC, 0xCE, 0x73, 0x75, 0x5A, 0x4D, 0x30, 0x2A, 0x99, 0x44, 0x74, 0xE2, 0x5F, 0xE7, 0x53, 0x33, 0x19, 0x33, 0xDB, 0x1D, 0xDF, 0xD7, 0x23, 0xA8, 0x48, 0x0C, 0x2D, 0xBF, 0x37, 0x03, 0xA3, 0xD5, 0x7A, 0x77, 0x44, 0xDE, 0xAA, 0x14, 0x98, 0x5E, 0x38, 0x90, 0x0D, 0xF8, 0x00, 0x76, 0x00, 0xDE, 0x5D, 0xAB, 0x9E, 0xD5, 0x8D, 0x35, 0xAA, 0x40, 0xE5, 0x9D, 0x65, 0x15, 0x0D, 0x88, 0x73, 0xF9, 0xFF, 0xA1, 0xF8, 0x0B, 0xF6, 0xEA, 0x9A, 0xA8, 0x2E, 0xE0, 0x19, 0x67, 0xA1, 0x05, 0xF3, 0x61, 0x90, 0x42, 0x7B, 0x80, 0x94, 0xBD, 0xE5, 0x2E, 0x3A, 0x81, 0x6A, 0x20, 0x14, 0x10, 0xC5, 0x9B, 0x2D, 0xC0, 0xF8, 0xBE, 0x29, 0xB4, 0x9A, 0x6E, 0xA1, 0xC5, 0x20, 0x06, 0x7D, 0xF4, 0x27, 0x44, 0x61, 0xE9, 0xEC, 0xCB, 0xB5, 0x6E, 0x1C, 0xD9, 0x2A, 0x6A, 0xC3, 0xC6, 0x6F, 0x14, 0xF1, 0xFB, 0xAA, 0x37, 0xE9, 0x5A, 0xAD, 0xD6, 0x24, 0x9F, 0xCC, 0x47, 0xA1, 0xA3, 0x72, 0x11, 0x0E, 0x68, 0xBF, 0xC8, 0x27, 0xFC, 0x62, 0x1C, 0x6B, 0x29, 0x8B, 0x82, 0x29, 0xF7, 0x67, 0x93, 0x40, 0x1E, 0x40, 0x0A, 0xB0, 0xA7, 0x85, 0x5C, 0x32, 0x5D, 0x89, 0x6D, 0x33, 0xDE, 0x92, 0x32, 0x79, 0x66, 0xAF, 0x04, 0xE0, 0x03, 0x4C, 0x52, 0xF8, 0x14, 0x98, 0x58, 0x08, 0x50, 0x06, 0x78, 0x02, 0xEA, 0x77, 0xC7, 0xBD, 0x53, 0xB4, 0x9A, 0x6D, 0x03, 0xDC, 0x81, 0x9F, 0xB3, 0x1B, 0x97, 0x10, 0xAF, 0x15, 0x5A, 0xED, 0x6D, 0x86, 0x59, 0x9B, 0xBB, 0xA2, 0xAB, 0x73, 0x39, 0x1C, 0x5B, 0x57, 0xFD, 0xA7, 0xCE, 0x6E, 0x06, 0x77, 0xFA, 0xB1, 0x3D, 0x0B, 0x92, 0x26, 0xF3, 0xF3, 0x00, 0xFA, 0xAB, 0xDB, 0x00, 0xA6, 0xFD, 0xD3, 0xCF, 0xCD, 0x0B, 0xAA, 0x15, 0xD0, 0x8F, 0x0D, 0x00, 0x69, 0x26, 0x88, 0x02, 0xE6, 0x40, 0xDA, 0x5E, 0x73, 0xF9, 0xAD, 0x29, 0x53, 0xC2, 0x6A, 0xBE, 0x7C, 0x6A, 0xFB, 0xB6, 0xD2, 0x0B, 0x48, 0x6E, 0x06, 0x02, 0x74, 0xEF, 0x4A, 0x9F, 0x80, 0x09, 0xA0, 0x8B, 0x13, 0xF7, 0x3A, 0x28, 0x09, 0x34, 0xCF, 0x1D, 0x74, 0x3C, 0x0A, 0x3C, 0x6A, 0x19, 0x86, 0xD5, 0x4D, 0x0C, 0x43, 0xDB, 0x57, 0xE6, 0xDB, 0x65, 0x03, 0x2D, 0xF9, 0x3B, 0x3B, 0xA5, 0x33, 0x43, 0xED, 0xA3, 0x06, 0x20, 0x73, 0x8B, 0xA3, 0x37, 0xE7, 0x9B, 0x2C, 0x14, 0x30, 0x0E, 0x19, 0x07, 0x52, 0x16, 0x7C, 0x25, 0x9F, 0xAA, 0xF3, 0x5B, 0xE1, 0xE0, 0x49, 0xB9, 0x5D, 0x58, 0xDC, 0x4A, 0x6A, 0x65, 0xFB, 0xE9, 0x91, 0x36, 0x80, 0xF1, 0x86, 0x3B, 0xBF, 0xB0, 0x4C, 0xE6, 0xDB, 0xE3, 0x9F, 0x39, 0xEE, 0x80, 0x17, 0x30, 0xF4, 0xC8, 0x05, 0x60, 0x07, 0x50, 0x03, 0x84, 0xE0, 0x43, 0x05, 0x2A, 0x68, 0xB5, 0x37, 0x56, 0xF0, 0x33, 0xAC, 0xE3, 0xD7, 0xD7, 0x4E, 0xAD, 0xBD, 0xC9, 0x2C, 0xB1, 0x4D, 0x0B, 0x03, 0xF6, 0x45, 0x8B, 0xE8, 0x4A, 0xCE, 0x4B, 0x20, 0xF3, 0x2D, 0x52, 0x7F, 0x0A, 0xA2, 0xB0, 0x49, 0x53, 0x89, 0xEF, 0x6E, 0xE3, 0x7E, 0x18, 0x86, 0xB8, 0xF3, 0x60, 0xA3, 0xF1, 0xE6, 0xD3, 0x56, 0x9B, 0xCD, 0x50, 0x02, 0x9F, 0x32, 0x81, 0x30, 0xA0, 0x14, 0xE8, 0xC6, 0x2B, 0xC5, 0xC3, 0x04, 0xC5, 0xF5, 0x0F, 0x7D, 0xFE, 0x9B, 0xDB, 0x60, 0xB8, 0xC1, 0x9F, 0x6D, 0xF7, 0xA3, 0x0A, 0x74, 0x6F, 0x9F, 0x9F, 0x01, 0xCA, 0x80, 0x4E, 0x60, 0x72, 0x9B, 0xDB, 0x34, 0xA0, 0x06, 0x78, 0x00, 0xE1, 0x40, 0x29, 0x6D, 0x96, 0x6B, 0x33, 0x36, 0x91, 0xA8, 0xCD, 0x2D, 0x6A, 0x78, 0x6E, 0x58, 0x60, 0x98, 0x48, 0xF2, 0x63, 0x3A, 0xB5, 0xC3, 0xB1, 0xE6, 0xFE, 0xF5, 0x46, 0xE6, 0x93, 0xA8, 0xC6, 0x23, 0x14, 0x8F, 0x2D, 0x40, 0x7D, 0x64, 0xA8, 0x94, 0x89, 0xDB, 0x0A, 0xE8, 0x0F, 0xC5, 0xD4, 0x74, 0x96, 0x40, 0x02, 0x70, 0x51, 0x02, 0x6C, 0xB1, 0xCB, 0x26, 0xDB, 0xF2, 0xE9, 0x92, 0xAF, 0x8C, 0xF4, 0xB2, 0x09, 0x54, 0xC0, 0x76, 0xEC, 0x68, 0x0F, 0x9F, 0xC6, 0x59, 0x1B, 0xE0, 0x28, 0x0C, 0x4B, 0xCA, 0xE6, 0x69, 0x1C, 0xC0, 0x17, 0x29, 0x40, 0x35, 0x30, 0x9B, 0x7C, 0x23, 0x03, 0xB8, 0x02, 0x31, 0x40, 0x3F, 0x46, 0x7B, 0x0B, 0x3F, 0x1B, 0x79, 0xA4, 0xA9, 0x2C, 0x14, 0x7C, 0x62, 0xD0, 0x67, 0xDD, 0xBB, 0xE3, 0x05, 0xED, 0xB8, 0x19, 0x5E, 0x39, 0xEF, 0xD6, 0x05, 0xF6, 0x24, 0x22, 0x53, 0x0F, 0x92, 0x79, 0x16, 0x0B, 0x07, 0x6C, 0x15, 0xDE, 0x9E, 0xEB, 0xCF, 0xC2, 0xAE, 0x1E, 0xA8, 0xF6, 0xE7, 0xB7, 0xCC, 0x5B, 0x34, 0xE3, 0xB0, 0x7B, 0xC4, 0x5A, 0x59, 0x0A, 0xA0, 0xB8, 0x18, 0x3B, 0x34, 0xE6, 0x9E, 0x6C, 0xB9, 0x8A, 0x31, 0xDE, 0x52, 0xBD, 0x0E, 0xA4, 0x0D, 0xB4, 0x7C, 0xEB, 0xC7, 0xA6, 0x61, 0x57, 0x3F, 0x40, 0x0A, 0xD0, 0x07, 0x98, 0x62, 0xFF, 0xF7, 0x4F, 0x43, 0xFC, 0x02, 0xDA, 0x68, 0xB4, 0xC6, 0xDF, 0xE9, 0x70, 0x9E, 0x79, 0xE8, 0xEF, 0xF7, 0x54, 0x12, 0x5D, 0x44, 0x26, 0x31, 0x23, 0x52, 0x30, 0xD9, 0x4A, 0x57, 0x2B, 0xC3, 0xDE, 0x06, 0xEE, 0xAD, 0xE7, 0x0E, 0x4B, 0x59, 0x33, 0x0E, 0xB9, 0x37, 0xC1, 0x48, 0xA0, 0x3F, 0x69, 0xD4, 0xA6, 0x77, 0xC2, 0xB5, 0x60, 0x4C, 0x02, 0x0A, 0xA7, 0x09, 0x62, 0x55, 0x0B, 0x6E, 0x63, 0xC9, 0x91, 0x66, 0x40, 0x1C, 0xE0, 0x18, 0xE0, 0x2C, 0x03, 0xED, 0x9D, 0xB3, 0x3C, 0x92, 0xCA, 0xDB, 0xF6, 0x2E, 0xD7, 0x8D, 0x8D, 0x33, 0x37, 0xFC, 0x13, 0x0E, 0xB0, 0xDF, 0x48, 0xFA, 0x0E, 0xC6, 0x02, 0x24, 0x17, 0x02, 0x1C, 0x61, 0x0A, 0xD8, 0x3E, 0x6C, 0xA0, 0x9B, 0x46, 0x1B, 0x44, 0xEA, 0xD3, 0x7E, 0x8A, 0xB8, 0xAA, 0xF4, 0x11, 0x51, 0xF4, 0x27, 0xB8, 0xED, 0x21, 0x93, 0x47, 0xB7, 0xAE, 0x27, 0x3F, 0xDA, 0x87, 0xF6, 0xA9, 0xC4, 0xF8, 0xAA, 0xF8, 0xB9, 0x03, 0x66, 0xC0, 0xA3, 0xE6, 0x71, 0x80, 0xB2, 0x45, 0xEE, 0x2B, 0xAC, 0x08, 0xCA, 0x5B, 0x5F, 0xBA, 0xE4, 0xD3, 0x04, 0xA2, 0x81, 0xE0, 0xA7, 0x02, 0x28, 0x4D, 0x69, 0x97, 0x3E, 0x9B, 0xF0, 0xDE, 0x8D, 0x2D, 0x9D, 0xCA, 0x75, 0x9F, 0xFE, 0xBC, 0x30, 0xB3, 0x36, 0x30, 0xBB, 0xCE, 0xDA, 0xB9, 0xF0, 0x96, 0x0F, 0x00, 0x7D, 0x80, 0x69, 0xFC, 0x2C, 0x39, 0x3F, 0x59, 0x6A, 0x2A, 0x68, 0x10, 0x2D, 0x42, 0xAB, 0xD1, 0x4F, 0xB5, 0x97, 0x18, 0xB5, 0x7F, 0x28, 0x74, 0x9C, 0x75, 0x11, 0xD9, 0x2D, 0x70, 0xF2, 0x6D, 0xAB, 0xED, 0x7A, 0x9B, 0x2B, 0x03, 0x08, 0x03, 0x34, 0x80, 0x93, 0x77, 0x7B, 0xEC, 0x39, 0xAF, 0x33, 0xC9, 0x9F, 0x1A, 0x45, 0xA1, 0x0C, 0x72, 0xAE, 0x9D, 0x0A, 0x90, 0x58, 0x24, 0x70, 0xFA, 0xF6, 0x63, 0x6A, 0x53, 0xBA, 0xE2, 0x51, 0xBA, 0xA4, 0x13, 0x6C, 0xC7, 0xE1, 0x67, 0x33, 0x3D, 0xF5, 0x29, 0x52, 0x67, 0xDD, 0x58, 0x2E, 0x0A, 0x0F, 0x3B, 0x81, 0x90, 0xFF, 0x90, 0x56, 0xB3, 0xA0, 0xD5, 0x04, 0xB7, 0xB5, 0xB1, 0x7F, 0x73, 0x90, 0x0F, 0xD9, 0xB9, 0xE1, 0x82, 0x5F, 0xD0, 0x7A, 0x45, 0x15, 0x44, 0xA1, 0xCC, 0xAA, 0xDB, 0x8C, 0xDC, 0x9D, 0x89, 0x09, 0x1F, 0x01, 0x61, 0xB9, 0x5B, 0xB8, 0x9B, 0x00, 0x35, 0x40, 0x0A, 0xA0, 0xF1, 0x1F, 0x5D, 0xB9, 0x74, 0x00, 0x5A, 0xC6, 0x14, 0xE8, 0x02, 0x84, 0x6E, 0x5F, 0xBB, 0x5D, 0x70, 0xC7, 0x17, 0x05, 0xDC, 0x8D, 0x81, 0x1E, 0xCF, 0x00, 0xC3, 0xD6, 0x9C, 0xBD, 0xCC, 0xAE, 0xCF, 0xB5, 0x4C, 0x3E, 0x71, 0x7C, 0x33, 0xD8, 0xE2, 0x2C, 0xBC, 0x80, 0x38, 0x80, 0x15, 0xC0, 0x70, 0xFE, 0xF4, 0x7E, 0x0A, 0x60, 0x0E, 0xAD, 0xF6, 0x17, 0x2F, 0x48, 0xC1, 0x7D, 0x29, 0xFF, 0xC4, 0x54, 0xE7, 0x08, 0x46, 0x6C, 0xDB, 0xE3, 0x2E, 0x46, 0x37, 0x42, 0xE1, 0x69, 0xE3, 0xDE, 0x0B, 0xCE, 0xAB, 0x39, 0x84, 0xB5, 0xE3, 0x72, 0x06, 0xA5, 0xDF, 0x9D, 0xB7, 0x62, 0x6E, 0x87, 0x76, 0xD7, 0x55, 0xFB, 0x79, 0x1E, 0xB9, 0x1F, 0x1F, 0x20, 0x59, 0x3D, 0xA6, 0x40, 0xD9, 0xDD, 0x44, 0x8F, 0xD7, 0x76, 0xC6, 0x55, 0xCF, 0x5B, 0xA0, 0x63, 0xF8, 0x2B, 0xB6, 0x05, 0xCB, 0x5B, 0x28, 0x8C, 0xF8, 0x31, 0x62, 0x51, 0xB1, 0x39, 0x94, 0x0D, 0xE4, 0x01, 0x3A, 0x77, 0x21, 0x0B, 0x40, 0x1D, 0xF0, 0x02, 0x2A, 0x81, 0xD9, 0x4E, 0x4B, 0xD2, 0x34, 0x9A, 0x61, 0xF7, 0x97, 0x5A, 0x29, 0x7E, 0xFD, 0xAD, 0x6E, 0x99, 0xB6, 0x1B, 0xD2, 0x6C, 0xDF, 0xD8, 0xD8, 0x8C, 0xBF, 0x5F, 0xC0, 0x20, 0xD3, 0xEB, 0xBE, 0x4A, 0x7D, 0x25, 0x5D, 0xD9, 0x03, 0x80, 0x0D, 0x7E, 0x54, 0x80, 0xA3, 0xB7, 0xDB, 0x55, 0xFD, 0x2E, 0xAA, 0xCD, 0x8F, 0xD2, 0xFC, 0xB0, 0x6B, 0x79, 0x01, 0x46, 0x3D, 0x75, 0xFB, 0x88, 0xAC, 0x17, 0x10, 0xFD, 0xDE, 0x74, 0x11, 0xE6, 0x62, 0xBD, 0x30, 0xDB, 0x4D, 0xED, 0x15, 0xFB, 0x15, 0x36, 0xB4, 0xF3, 0x1C, 0xF5, 0x74, 0x80, 0x66, 0x36, 0x55, 0x01, 0xAD, 0x8B, 0xF9, 0xA0, 0x88, 0x8D, 0x7A, 0x09, 0x10, 0x41, 0xAB, 0x39, 0x5C, 0xC0, 0x1E, 0xFF, 0x72, 0x23, 0x8D, 0xF5, 0x93, 0x40, 0x8F, 0xDD, 0xF0, 0x75, 0x43, 0x0B, 0x0E, 0x4F, 0x82, 0xC5, 0xB6, 0x50, 0xE9, 0xDB, 0x45, 0x14, 0xDF, 0xBC, 0xAB, 0x9D, 0x30, 0x6A, 0xB7, 0x7E, 0xAA, 0xC4, 0x2D, 0xD8, 0x64, 0xBB, 0x66, 0xCD, 0xA2, 0x3F, 0xCE, 0xDB, 0x7A, 0xF2, 0x42, 0x85, 0x60, 0xFE, 0xDF, 0x0F, 0xD6, 0x8B, 0x02, 0x74, 0x80, 0x79, 0x6E, 0x6B, 0x67, 0x1D, 0xD9, 0x57, 0xC3, 0xC6, 0x0D, 0x06, 0x58, 0xBC, 0x1E, 0x47, 0xA0, 0xD7, 0xE3, 0xC3, 0x40, 0xB2, 0x26, 0x90, 0x05, 0x94, 0x01, 0x19, 0x9F, 0x98, 0x98, 0x02, 0xB9, 0xD1, 0x41, 0x4D, 0x5A, 0x2D, 0x36, 0x7D, 0xC2, 0xFE, 0xD5, 0xC6, 0xD4, 0x6B, 0x8F, 0x1F, 0xAA, 0x7F, 0x29, 0x98, 0x47, 0xB6, 0xDA, 0x67, 0xB6, 0x81, 0x9B, 0x5F, 0x3E, 0xDC, 0xFA, 0x3A, 0xD6, 0x18, 0xFC, 0xD0, 0xFA, 0xF4, 0x74, 0xFE, 0xB4, 0xD9, 0x52, 0x56, 0x6D, 0x0C, 0xC0, 0xD8, 0x89, 0x38, 0xCB, 0x12, 0x6E, 0x59, 0xF7, 0x7E, 0x8A, 0xD9, 0x01, 0xF7, 0xFF, 0x50, 0xB9, 0x2D, 0xBD, 0x44, 0xAF, 0x82, 0xBA, 0x7D, 0x2C, 0x37, 0x7E, 0xD6, 0x7D, 0x65, 0xA3, 0x67, 0x05, 0x2A, 0x77, 0x51, 0x3F, 0xB7, 0x0B, 0x43, 0x7B, 0x31, 0x80, 0xF4, 0xFE, 0x6C, 0x80, 0x9E, 0xBB, 0x3E, 0x28, 0x83, 0x56, 0x4B, 0xDC, 0x9E, 0xDA, 0x7E, 0x69, 0x6A, 0xD9, 0x90, 0x60, 0x56, 0x69, 0xAC, 0x24, 0x67, 0xB6, 0x8C, 0x75, 0x1B, 0xFB, 0x9A, 0xFC, 0xBE, 0xED, 0xE9, 0xBC, 0x55, 0xFC, 0xF4, 0x73, 0x03, 0x75, 0x46, 0x3D, 0x8C, 0x8D, 0x7E, 0x80, 0xCA, 0xBB, 0x91, 0x76, 0x0E, 0x20, 0xEC, 0xC8, 0x72, 0x65, 0xFC, 0xE1, 0x72, 0x73, 0x39, 0xCF, 0x9E, 0xE0, 0xEA, 0xC1, 0x2B, 0xB3, 0x68, 0x03, 0xB2, 0xDF, 0xE6, 0x4A, 0x6C, 0xC5, 0x42, 0x61, 0x4E, 0xB5, 0x67, 0xD7, 0x13, 0xEA, 0xCA, 0xB0, 0x41, 0xE5, 0x01, 0xBA, 0x77, 0xA6, 0xF5, 0xB7, 0x08, 0x68, 0xE1, 0x40, 0x36, 0x60, 0x8B, 0xBB, 0xF2, 0x25, 0xF0, 0x09, 0x56, 0x2B, 0x5C, 0x9C, 0x06, 0xC7, 0x35, 0x77, 0x6A, 0xF0, 0x33, 0xA5, 0x57, 0x7E, 0xB0, 0xCA, 0x75, 0xD4, 0x23, 0xA4, 0xA7, 0x62, 0xB4, 0xD6, 0x9D, 0xBB, 0xCC, 0xE3, 0x84, 0xD9, 0x67, 0x63, 0x3C, 0x80, 0x35, 0xC0, 0xA5, 0x6F, 0x0A, 0x68, 0x5F, 0xCC, 0xBB, 0x15, 0xC6, 0x53, 0x5B, 0x1B, 0x01, 0x28, 0x5D, 0x70, 0x05, 0x9C, 0x85, 0xCA, 0x62, 0x80, 0xE1, 0x7C, 0x85, 0xF1, 0x18, 0x42, 0xB1, 0x27, 0x6A, 0x1D, 0x6B, 0xA0, 0xA3, 0x77, 0x93, 0x63, 0xAF, 0xDB, 0xDB, 0x31, 0x3B, 0x6D, 0x2D, 0x00, 0xE7, 0xA7, 0x06, 0xD4, 0x00, 0xE9, 0xBB, 0x67, 0xE1, 0x71, 0x5A, 0x8D, 0xEA, 0x26, 0xDB, 0x44, 0x35, 0xE4, 0x77, 0xBD, 0xCD, 0x10, 0xF6, 0xE9, 0xC5, 0x29, 0x71, 0x57, 0x39, 0xB3, 0x42, 0x5B, 0xAD, 0xF2, 0xBB, 0xA9, 0x59, 0x5F, 0x33, 0x14, 0xCE, 0x07, 0xFA, 0xBC, 0xA9, 0xA5, 0x09, 0xF8, 0xF6, 0xD1, 0xA1, 0xB7, 0xA3, 0x01, 0xE5, 0xE8, 0xBA, 0xBA, 0xAE, 0xC2, 0xD5, 0x43, 0x35, 0x33, 0x6C, 0xC1, 0x9F, 0x5F, 0xA8, 0xE2, 0xEC, 0x05, 0x54, 0xF9, 0xE6, 0x0F, 0xF6, 0xA7, 0x99, 0x42, 0x47, 0x62, 0xFD, 0x39, 0x79, 0x5C, 0x9E, 0xC6, 0xD8, 0xC2, 0x4E, 0x5C, 0x06, 0xCC, 0xE6, 0xAF, 0xF9, 0x22, 0xEB, 0x6E, 0xF7, 0x76, 0x12, 0xD0, 0x01, 0xC2, 0x80, 0xDC, 0xDB, 0xD5, 0x39, 0xB4, 0xDA, 0xD0, 0x6A, 0xE8, 0xF3, 0x1B, 0x81, 0x5A, 0x03, 0x46, 0x49, 0x9A, 0xBD, 0x8E, 0x0B, 0x4E, 0x63, 0x1B, 0x76, 0xED, 0x67, 0xAE, 0xF2, 0xDD, 0xAA, 0xB1, 0x9F, 0x0E, 0xCF, 0xAF, 0x58, 0x46, 0x3C, 0x0A, 0x97, 0xD3, 0xC0, 0xA9, 0xBB, 0xBA, 0x9A, 0xF2, 0x09, 0x57, 0x5B, 0x4F, 0x84, 0x06, 0xEE, 0x8B, 0xA6, 0xDA, 0xAD, 0xF8, 0x74, 0x12, 0xB0, 0x06, 0xF2, 0x6D, 0x12, 0xCF, 0xCC, 0x08, 0x93, 0xBD, 0x02, 0xE9, 0xDE, 0x7D, 0x04, 0xA6, 0x88, 0xCD, 0x7E, 0x49, 0x4C, 0x0A, 0xD4, 0x03, 0x15, 0x4A, 0x7F, 0x8E, 0x03, 0xC9, 0x0A, 0xA0, 0x03, 0xA8, 0x03, 0xBE, 0xA8, 0xED, 0x18, 0x7A, 0x02, 0x50, 0x01, 0x9C, 0x13, 0xD4, 0xB7, 0x7B, 0xCE, 0x38, 0x0E, 0x33, 0xDD, 0xF8, 0x67, 0xB1, 0xDE, 0x98, 0xC7, 0x60, 0x62, 0xAF, 0x9B, 0x2D, 0x2D, 0x50, 0x73, 0xD7, 0xCA, 0xA2, 0xB2, 0x2B, 0x8F, 0x28, 0xFC, 0xED, 0xF2, 0x80, 0x2B, 0xED, 0xD9, 0x59, 0xBF, 0xA8, 0xBB, 0xDF, 0xB3, 0x0E, 0x6F, 0x9F, 0xAF, 0xCE, 0x65, 0xAD, 0xB5, 0xE6, 0x91, 0x5D, 0x8D, 0x06, 0x6A, 0x6F, 0xA6, 0x39, 0x80, 0xE6, 0x62, 0x16, 0x14, 0xA5, 0x63, 0x2A, 0xCD, 0x5B, 0x56, 0xF4, 0x64, 0x9E, 0x6D, 0x81, 0x7A, 0xAC, 0x37, 0x20, 0xF6, 0x95, 0xC0, 0xB5, 0x08, 0x79, 0x8C, 0x09, 0x83, 0xBA, 0x02, 0xFC, 0xD4, 0x44, 0x2D, 0x06, 0x98, 0xB8, 0xFB, 0x44, 0xE7, 0xA1, 0xD1, 0xE4, 0x6F, 0xA4, 0x29, 0xE2, 0x29, 0x6C, 0xBB, 0xA7, 0xF2, 0xD4, 0x91, 0xCA, 0xD8, 0xB6, 0xAE, 0xCE, 0xD5, 0xA7, 0x74, 0x26, 0x0E, 0x5D, 0xF1, 0x3C, 0xDF, 0x95, 0xDD, 0xF3, 0x11, 0x54, 0xA1, 0xFA, 0x2F, 0x70, 0xD6, 0x3E, 0xA7, 0x38, 0x62, 0xEE, 0x4C, 0x49, 0x77, 0xA0, 0x39, 0xA8, 0x72, 0x4D, 0x28, 0x8B, 0xDD, 0xC0, 0x6D, 0x21, 0x05, 0xF8, 0x01, 0x62, 0x4D, 0x1F, 0xE7, 0xCD, 0x4A, 0x9E, 0xE7, 0x68, 0xC1, 0x36, 0x81, 0x36, 0xB0, 0x9D, 0x6F, 0x41, 0x91, 0x6D, 0xBE, 0x8C, 0xD5, 0x5D, 0x4C, 0xE5, 0x09, 0x64, 0x00, 0x7D, 0x80, 0x79, 0x2A, 0xB3, 0x00, 0x1B, 0x20, 0x14, 0xA8, 0xC7, 0x68, 0x8A, 0x18, 0x87, 0xF8, 0xBF, 0x10, 0xB8, 0x34, 0x62, 0xB6, 0xF0, 0x3F, 0x9E, 0x1B, 0x5A, 0x88, 0xAE, 0xCA, 0xAA, 0xA1, 0x9A, 0x45, 0x95, 0x15, 0xA0, 0xB7, 0xC8, 0x09, 0x3B, 0x6E, 0x3D, 0xA7, 0x80, 0xBC, 0x7B, 0x27, 0x54, 0x00, 0x0C, 0xF6, 0xE6, 0x01, 0x6E, 0x37, 0x92, 0x3C, 0xC9, 0xF1, 0x41, 0x57, 0x08, 0x15, 0x81, 0x1F, 0xD3, 0xDF, 0xE5, 0xE9, 0x87, 0x08, 0xA0, 0xFB, 0xCD, 0x8A, 0xDF, 0x60, 0x9B, 0xF1, 0x0A, 0xB0, 0xFF, 0x72, 0x5E, 0x30, 0x9A, 0xCF, 0x73, 0xDA, 0x57, 0x03, 0x86, 0x33, 0xF8, 0x00, 0x13, 0x6B, 0xC9, 0x06, 0xC4, 0x16, 0x03, 0xE8, 0xC2, 0x03, 0x98, 0xA2, 0xD1, 0x6C, 0x7B, 0x81, 0x3F, 0xFD, 0xA1, 0x17, 0x14, 0xD4, 0x82, 0xED, 0x8E, 0x08, 0x7A, 0x30, 0xD9, 0x0A, 0x0D, 0x8D, 0x7D, 0x6B, 0x7F, 0xC0, 0x09, 0xA6, 0xC4, 0x3C, 0xAE, 0x0D, 0x40, 0x0B, 0x10, 0xBB, 0xB7, 0xCC, 0x3C, 0xFF, 0xD1, 0xDC, 0xCE, 0xF7, 0xCD, 0x13, 0x00, 0x9B, 0xDB, 0x15, 0xFB, 0x69, 0x0B, 0x90, 0x03, 0x74, 0xDF, 0x2D, 0x08, 0xF3, 0xCE, 0x33, 0xD7, 0xBD, 0x6E, 0x9E, 0x27, 0xB5, 0x4B, 0xCF, 0x7D, 0xEC, 0xC8, 0xD9, 0xF0, 0xBB, 0xED, 0x29, 0x42, 0x80, 0xD9, 0x53, 0xB0, 0x2A, 0x60, 0xBE, 0xE8, 0x45, 0x2E, 0x06, 0x08, 0x07, 0x26, 0x68, 0x36, 0xDF, 0xF4, 0xCD, 0xF9, 0x37, 0xBF, 0x7B, 0xA6, 0x5C, 0xF9, 0x57, 0x35, 0x0E, 0x77, 0xFD, 0x51, 0x5C, 0x1E, 0xC3, 0x91, 0xBE, 0x11, 0x7D, 0x35, 0x4C, 0xF2, 0xFE, 0x1E, 0x3B, 0xF4, 0x4E, 0x82, 0x49, 0xB9, 0x3F, 0x89, 0xDF, 0x5E, 0xA2, 0x4C, 0x20, 0x02, 0xE8, 0x66, 0x4C, 0xF4, 0x16, 0x5D, 0xA0, 0x45, 0xA5, 0xD6, 0x5C, 0xFB, 0x0B, 0x47, 0x01, 0x11, 0xA0, 0x8C, 0xA7, 0x0F, 0xFA, 0x3B, 0xF2, 0x55, 0xA8, 0xCE, 0xA7, 0x8C, 0xE5, 0xE4, 0xDD, 0x17, 0x3B, 0xD8, 0xFB, 0x9F, 0x72, 0x93, 0x02, 0x94, 0x2D, 0x12, 0x48, 0x01, 0xEC, 0x00, 0xB2, 0xD0, 0x35, 0x9E, 0x3C, 0x56, 0x8B, 0xBF, 0x63, 0xC7, 0x40, 0x19, 0x2C, 0x04, 0xDD, 0x53, 0xE1, 0xA3, 0xF2, 0x6D, 0x01, 0x18, 0x14, 0xDE, 0xC7, 0xC9, 0xC0, 0x9D, 0xF9, 0xF1, 0x74, 0xB1, 0x5D, 0xA7, 0x8E, 0xF0, 0x2B, 0xF6, 0x6B, 0x8F, 0x2A, 0x79, 0xF9, 0xEE, 0x95, 0x7D, 0xDF, 0x91, 0x72, 0xAF, 0xF3, 0x0A, 0x68, 0x5E, 0x61, 0x39, 0xEC, 0xCE, 0x78, 0xB3, 0xEF, 0x2E, 0x46, 0x05, 0xCC, 0x73, 0x30, 0xD9, 0x99, 0x2D, 0x4F, 0xE5, 0xC6, 0xFA, 0xCD, 0xDE, 0xE8, 0x93, 0xFB, 0xE3, 0xFA, 0xCE, 0x7E, 0xAB, 0x3B, 0x11, 0xBE, 0x41, 0xB1, 0xED, 0x06, 0x11, 0x3C, 0x80, 0x5A, 0xCC, 0xEE, 0x05, 0xD2, 0x80, 0x0B, 0x90, 0x03, 0xF4, 0x46, 0x0F, 0x44, 0x69, 0xB4, 0xFC, 0xB6, 0x97, 0x42, 0x10, 0xB4, 0x72, 0xC5, 0x42, 0x12, 0x65, 0x20, 0xC3, 0xA4, 0x8C, 0x82, 0x70, 0x15, 0x5A, 0x3D, 0xD4, 0x7C, 0xCF, 0x6A, 0xCF, 0x38, 0xE2, 0x5D, 0xBD, 0x81, 0x2C, 0xE0, 0x11, 0x25, 0x3A, 0x80, 0x7E, 0xA4, 0x71, 0xCD, 0x17, 0x7C, 0x18, 0xC0, 0x2C, 0x24, 0xD9, 0xE2, 0xFE, 0xEE, 0x7B, 0xAF, 0x02, 0xF0, 0x17, 0x54, 0x2E, 0xD7, 0x5A, 0xC2, 0x40, 0x6C, 0x81, 0x06, 0x77, 0xE1, 0xAB, 0xAB, 0x56, 0x7B, 0x24, 0xE9, 0x7D, 0x08, 0x47, 0x07, 0x56, 0x39, 0x01, 0xC2, 0x81, 0x9A, 0x6D, 0x22, 0x2D, 0x80, 0x3A, 0x10, 0x0A, 0x64, 0x02, 0xF3, 0x58, 0xAD, 0x56, 0xDC, 0x47, 0x2E, 0xAB, 0x55, 0xC7, 0x8A, 0x89, 0xCE, 0x6E, 0xF8, 0xB5, 0x22, 0xC5, 0xF8, 0x46, 0x3E, 0x97, 0x76, 0xF0, 0xB7, 0x53, 0x23, 0x44, 0xAA, 0x60, 0xA7, 0x66, 0xFA, 0xE2, 0x7D, 0xDD, 0x54, 0xBB, 0xFB, 0xB2, 0x71, 0x05, 0xCB, 0x45, 0xAD, 0x45, 0x45, 0x00, 0x13, 0x9A, 0x72, 0xED, 0xF4, 0x59, 0xC8, 0x54, 0x01, 0xE3, 0x8A, 0xC9, 0x1B, 0x69, 0x3E, 0x82, 0x45, 0x54, 0x56, 0xD8, 0x0C, 0xA0, 0x78, 0x2B, 0x34, 0x50, 0x11, 0x82, 0x30, 0x2F, 0xB7, 0x88, 0x73, 0xE7, 0x2F, 0x77, 0x00, 0xC3, 0x2A, 0x5C, 0xDF, 0x4F, 0xB5, 0x9F, 0x0E, 0x20, 0x0D, 0x74, 0xD3, 0x6A, 0x7F, 0xF7, 0x82, 0xFE, 0xE5, 0x65, 0xC6, 0xF6, 0xE3, 0x0E, 0xB6, 0x9C, 0x85, 0x13, 0x6E, 0x8F, 0x01, 0x55, 0x81, 0x3E, 0x2F, 0x85, 0x2D, 0x34, 0xBF, 0x79, 0x44, 0xFA, 0xA9, 0xC9, 0xA8, 0xA0, 0x57, 0xF5, 0xD5, 0x37, 0xC3, 0x24, 0x7E, 0x52, 0x35, 0x10, 0xDE, 0xBD, 0x6E, 0xA9, 0x7D, 0xEE, 0xE6, 0x5D, 0xB5, 0x0F, 0x47, 0x98, 0x9D, 0x06, 0xF8, 0xA2, 0x16, 0x93, 0xFB, 0x0A, 0x0C, 0xFA, 0x76, 0xDB, 0x18, 0x46, 0x7B, 0x39, 0xAA, 0x56, 0xF4, 0xA6, 0xDE, 0x64, 0x5A, 0x68, 0x7C, 0xA3, 0x4E, 0xB8, 0x80, 0xE9, 0xAD, 0x63, 0x4F, 0x20, 0x15, 0x68, 0xDB, 0x66, 0xF8, 0x02, 0xD8, 0x00, 0x61, 0x40, 0x09, 0x8D, 0x36, 0x2B, 0xB4, 0x65, 0xFF, 0x7A, 0x73, 0xB0, 0xDB, 0x11, 0xC2, 0x43, 0x43, 0xC9, 0x62, 0x82, 0x09, 0x5E, 0xB1, 0xC6, 0xC4, 0x52, 0xB9, 0x9C, 0x44, 0xF5, 0x6D, 0x0A, 0xDA, 0x14, 0x01, 0xBB, 0xB2, 0x1D, 0x83, 0x03, 0xE8, 0x6A, 0xC4, 0x79, 0x35, 0x71, 0xCC, 0x47, 0x5D, 0xE7, 0x96, 0xE6, 0x1F, 0x05, 0x18, 0x46, 0x70, 0x01, 0xC4, 0x01, 0x5B, 0x78, 0xBF, 0x5A, 0xC5, 0x18, 0x15, 0x8C, 0xC9, 0xAF, 0xE7, 0x9F, 0x3A, 0xBF, 0xF5, 0x46, 0x5D, 0xCE, 0x0E, 0xAE, 0x0D, 0xEC, 0xB9, 0x3E, 0x09, 0xDE, 0x22, 0x40, 0x28, 0x90, 0xBE, 0x88, 0xCF, 0xA7, 0x04, 0x7A, 0x97, 0xCA, 0xC7, 0xF7, 0x1D, 0xF8, 0x37, 0x9B, 0xF1, 0x9F, 0xEF, 0x3B, 0x14, 0x89, 0x7E, 0x93, 0x30, 0x57, 0x15, 0x26, 0x68, 0x89, 0xB3, 0x2A, 0x0E, 0x4B, 0xD5, 0x47, 0xF1, 0xAA, 0xE2, 0x23, 0x1E, 0xCC, 0x54, 0xC6, 0xC8, 0x3B, 0xCD, 0xD1, 0xCF, 0x3E, 0x64, 0xF2, 0x0B, 0x7D, 0x6A, 0x0B, 0x75, 0x40, 0x12, 0xF0, 0x01, 0xEA, 0xE9, 0x54, 0xBE, 0xF6, 0x15, 0x20, 0x1C, 0xA8, 0x02, 0x1E, 0xC5, 0x36, 0x26, 0x52, 0xCA, 0x5A, 0x2D, 0xEA, 0x95, 0xFD, 0x60, 0x45, 0xD4, 0xF9, 0xCB, 0x87, 0xBF, 0x9A, 0x66, 0x07, 0xAC, 0x06, 0x11, 0x48, 0xC0, 0x06, 0x08, 0x5D, 0xE4, 0x8D, 0x2C, 0xA0, 0x76, 0x62, 0xCB, 0xD0, 0x6A, 0x7F, 0x17, 0x83, 0x12, 0xA4, 0xAE, 0xE5, 0x6F, 0xDB, 0x28, 0x1C, 0xC9, 0x45, 0xD6, 0x37, 0x65, 0x5B, 0x12, 0x30, 0x3F, 0x77, 0x8E, 0x9B, 0x32, 0x6A, 0x7C, 0x6F, 0xA1, 0xC2, 0xD5, 0x9C, 0x2E, 0xB2, 0x58, 0xAB, 0x2D, 0x92, 0x93, 0xB1, 0x00, 0xE7, 0xBC, 0x1B, 0x20, 0x58, 0xFC, 0x78, 0xB5, 0xE5, 0x94, 0xF5, 0x63, 0xCD, 0x33, 0x6D, 0xBB, 0x80, 0x0C, 0x60, 0xE8, 0x49, 0xCF, 0x6B, 0x27, 0xA5, 0xAA, 0xAE, 0x3F, 0x95, 0x6A, 0x8F, 0x96, 0xC5, 0xAE, 0xDF, 0x62, 0x1B, 0x0C, 0x56, 0xEC, 0x9D, 0xF5, 0x43, 0x2E, 0x7E, 0xAB, 0x1B, 0x50, 0xBC, 0x32, 0xE9, 0xA7, 0x61, 0x74, 0x00, 0x5D, 0xC8, 0x9D, 0x3F, 0x01, 0xFC, 0x8D, 0x35, 0xC5, 0x0E, 0xEC, 0xF5, 0x18, 0xAF, 0x1B, 0x52, 0x0A, 0x1A, 0xD0, 0x6E, 0x12, 0x7F, 0x2E, 0x88, 0x65, 0x18, 0x23, 0x25, 0x72, 0x75, 0x23, 0x4F, 0xFD, 0xA8, 0x46, 0x26, 0xFB, 0xE7, 0x72, 0x20, 0x7D, 0x46, 0x50, 0x2C, 0x58, 0xD0, 0xAF, 0xE7, 0xF6, 0x8D, 0xED, 0x05, 0xF5, 0xAD, 0x5C, 0xDD, 0x0C, 0x05, 0x6A, 0x2E, 0x9F, 0x7E, 0xC3, 0x4B, 0xFA, 0x94, 0x20, 0x67, 0xBD, 0x19, 0xDE, 0xF1, 0x24, 0x7E, 0x54, 0x02, 0x1A, 0x77, 0x6A, 0x6A, 0x2F, 0x2A, 0x81, 0x36, 0xBC, 0x22, 0x0E, 0x64, 0x02, 0xD3, 0x0B, 0x01, 0x6A, 0xE1, 0x07, 0x90, 0x06, 0x2C, 0x29, 0xA6, 0x45, 0xAB, 0x19, 0x44, 0x36, 0xA5, 0x37, 0x67, 0xA7, 0xEF, 0xC6, 0x3F, 0xEC, 0x8A, 0x9F, 0x89, 0x9F, 0x65, 0xA3, 0xBD, 0x65, 0xD9, 0x75, 0xF0, 0x88, 0xF9, 0x34, 0x2D, 0xF0, 0xF3, 0x91, 0x05, 0x18, 0xA0, 0x75, 0x21, 0xC0, 0x30, 0x80, 0x65, 0x6B, 0x58, 0x36, 0xCF, 0x30, 0x5E, 0xF9, 0xE3, 0xCD, 0xC3, 0x5B, 0xCB, 0x28, 0x0E, 0x53, 0xC8, 0x86, 0xA2, 0x12, 0x3C, 0x13, 0x89, 0x8C, 0x8A, 0x87, 0x6B, 0x92, 0xBE, 0xA5, 0x33, 0x8F, 0xF0, 0xD3, 0xA2, 0xF7, 0xA1, 0x02, 0xB2, 0xA0, 0x86, 0xB6, 0x34, 0x90, 0x07, 0xF0, 0xB9, 0xFB, 0x89, 0xD4, 0x00, 0x71, 0x80, 0xDC, 0x9F, 0xC5, 0x63, 0x35, 0xFF, 0x6D, 0x2D, 0x79, 0x1C, 0xA9, 0x63, 0xD1, 0xF7, 0xCD, 0x20, 0xD6, 0xBE, 0x55, 0x9B, 0x95, 0x9F, 0x38, 0x89, 0x49, 0x70, 0x3D, 0xFB, 0x64, 0xFA, 0xE5, 0xDD, 0x5B, 0x3D, 0x05, 0x18, 0xF6, 0xD7, 0xF6, 0x45, 0x03, 0x56, 0x00, 0xBD, 0xB2, 0x72, 0x2E, 0x17, 0xD9, 0xAC, 0x07, 0x55, 0xF7, 0x0E, 0xB3, 0xE7, 0xCB, 0x27, 0x71, 0x8A, 0x3E, 0x69, 0xF6, 0x43, 0x3E, 0x4F, 0x7A, 0x9A, 0x5F, 0x8A, 0x87, 0x18, 0xC7, 0x57, 0x23, 0x91, 0xC3, 0x62, 0xDE, 0x45, 0xF7, 0x2D, 0xDC, 0x66, 0x4F, 0x5B, 0x04, 0xC0, 0x1D, 0x30, 0x05, 0x8E, 0xAF, 0x81, 0x06, 0xD0, 0x06, 0xB6, 0x13, 0xD8, 0x3B, 0x43, 0x03, 0xA5, 0x52, 0xBA, 0x92, 0x72, 0xBE, 0xCD, 0x58, 0x52, 0xF6, 0x82, 0x3C, 0xDB, 0x3A, 0xCC, 0x57, 0xE0, 0x6E, 0x70, 0x96, 0x8F, 0xFF, 0x6A, 0xC6, 0x22, 0xFE, 0x2E, 0xD9, 0xF5, 0x74, 0x61, 0x61, 0x97, 0x3F, 0x35, 0xC0, 0x07, 0xE8, 0x27, 0x39, 0xAF, 0xDE, 0xAE, 0x9C, 0xFE, 0x24, 0x4E, 0x29, 0x77, 0xBF, 0x79, 0x85, 0x51, 0xF2, 0x49, 0xAD, 0x65, 0xAB, 0x2C, 0x1A, 0xCF, 0xD8, 0x79, 0x84, 0x22, 0x50, 0x7A, 0x2B, 0x3B, 0x9F, 0xA6, 0xEA, 0x18, 0x90, 0x7D, 0xA3, 0xA8, 0x07, 0x58, 0x40, 0x1F, 0xC6, 0x18, 0x16, 0xB2, 0x0F, 0xE7, 0x53, 0xDD, 0x92, 0x80, 0xEF, 0x2B, 0x5A, 0xB4, 0x5A, 0x22, 0x5E, 0xD8, 0xFA, 0xB7, 0xAE, 0xFD, 0x06, 0x89, 0x6F, 0xC2, 0xB5, 0xE2, 0x2F, 0x7B, 0x62, 0xD2, 0x89, 0x56, 0x0F, 0x1A, 0xFF, 0xF0, 0x67, 0xC2, 0x68, 0x43, 0xA3, 0x15, 0x4B, 0x7B, 0xEE, 0xDA, 0x1C, 0x5F, 0x34, 0x8B, 0x79, 0x0C, 0x70, 0x05, 0xA6, 0x69, 0x3B, 0x4E, 0x34, 0x81, 0xD1, 0x86, 0x25, 0xC6, 0xEB, 0x58, 0x64, 0x59, 0xA6, 0xCE, 0xEB, 0x84, 0x66, 0x59, 0x49, 0x3F, 0x02, 0x6C, 0x6C, 0x83, 0x19, 0x6B, 0xF3, 0x39, 0x80, 0xB1, 0x46, 0x65, 0x16, 0x07, 0x28, 0x7C, 0x7A, 0x5F, 0x01, 0x66, 0xF6, 0x5F, 0x80, 0x50, 0x40, 0xF6, 0x95, 0x12, 0xC0, 0x03, 0xC8, 0xFD, 0x59, 0x1C, 0x1A, 0xAD, 0x10, 0x2C, 0x9D, 0xFE, 0x5C, 0xAB, 0xD8, 0xA8, 0x4D, 0xE0, 0x2A, 0x55, 0x64, 0x7F, 0x47, 0xD5, 0xEF, 0x18, 0x5B, 0xE2, 0xF7, 0xC1, 0x43, 0xBE, 0x9D, 0xB9, 0x76, 0xC4, 0x11, 0xD9, 0x40, 0xC9, 0xA2, 0xEF, 0xE9, 0x1A, 0xBA, 0x57, 0xAE, 0xDB, 0x95, 0xFD, 0x28, 0x16, 0xAC, 0xF1, 0x9C, 0x03, 0x6F, 0xBD, 0x8E, 0xEC, 0x0D, 0x11, 0x4F, 0x13, 0x39, 0xF6, 0xC7, 0x18, 0x26, 0x27, 0x2C, 0xD4, 0x58, 0x8C, 0x0A, 0x58, 0x02, 0x4A, 0xC4, 0x47, 0x15, 0x86, 0xBF, 0x90, 0x40, 0x0A, 0x10, 0x01, 0xD8, 0xE2, 0x50, 0x02, 0xE5, 0xDC, 0x05, 0x58, 0xA5, 0xB4, 0x5A, 0x6F, 0x49, 0x1B, 0xAA, 0x17, 0x5D, 0xFB, 0xEA, 0xFB, 0xC3, 0x02, 0x50, 0xA9, 0x64, 0xEB, 0xA5, 0xCD, 0x34, 0x68, 0xD6, 0xFE, 0x7C, 0xEE, 0x53, 0x71, 0xC7, 0x59, 0x88, 0xF4, 0x1B, 0xD1, 0x40, 0x7E, 0xDA, 0xFF, 0xF0, 0x50, 0x22, 0xF4, 0xF3, 0xB0, 0x1C, 0xC5, 0xE5, 0xF6, 0xE3, 0xFA, 0x25, 0xE2, 0x98, 0x4F, 0x0A, 0x25, 0x25, 0x67, 0x8F, 0x02, 0x7C, 0xC8, 0x25, 0x48, 0x04, 0x88, 0x04, 0x3A, 0x80, 0xA9, 0xFD, 0x75, 0x05, 0xE2, 0xC9, 0x96, 0x03, 0xC2, 0x01, 0x0F, 0x40, 0x8D, 0x42, 0xA3, 0x40, 0x2A, 0x40, 0xE3, 0x45, 0xD2, 0x6A, 0xB3, 0xD2, 0x51, 0xB2, 0xBB, 0x87, 0xFE, 0xBC, 0x45, 0xAE, 0xB6, 0x25, 0xC3, 0x8C, 0x65, 0x27, 0xC5, 0x26, 0xE1, 0xC2, 0xD1, 0xF9, 0x36, 0x52, 0xBD, 0xAD, 0xF6, 0xD4, 0xE0, 0x29, 0x10, 0xB2, 0xF8, 0x7C, 0x2A, 0xE5, 0x2D, 0x14, 0x18, 0x4E, 0x62, 0x61, 0xD8, 0xDC, 0xDF, 0xC6, 0x62, 0xF0, 0xFC, 0x52, 0xDF, 0x0F, 0x0F, 0xD7, 0xA2, 0xC3, 0x6F, 0x28, 0x6B, 0x8B, 0x06, 0x92, 0x9F, 0x0E, 0x13, 0xDD, 0x16, 0x05, 0x88, 0x2F, 0x06, 0xB0, 0x03, 0x64, 0xDF, 0x9E, 0xE6, 0x54, 0x20, 0x0A, 0xB0, 0x00, 0x8E, 0xFD, 0x87, 0xB2, 0x4E, 0x71, 0x0B, 0x4D, 0xBA, 0x05, 0x6A, 0x7B, 0x7F, 0xE9, 0x5D, 0x6F, 0xC6, 0xF6, 0x05, 0xEA, 0x9B, 0x9B, 0x33, 0x68, 0x82, 0x6E, 0x73, 0xC7, 0x8F, 0xFD, 0x93, 0x2C, 0xEF, 0xFA, 0x5F, 0x1D, 0x07, 0x07, 0x18, 0xDE, 0xCF, 0xEF, 0x19, 0xBA, 0xE0, 0x25, 0x42, 0x1E, 0x31, 0x80, 0xA7, 0x1E, 0xC5, 0x29, 0x30, 0x61, 0x6F, 0x2B, 0x77, 0x7F, 0x54, 0x35, 0x84, 0xC5, 0x86, 0x0B, 0x2B, 0x60, 0x28, 0xD1, 0xD1, 0x80, 0x1B, 0x10, 0x0D, 0xA4, 0x03, 0xC5, 0x5F, 0x77, 0x80, 0xFD, 0x36, 0x44, 0x80, 0xE3, 0xF7, 0x42, 0xE8, 0x09, 0xE8, 0x01, 0x2C, 0xF6, 0x4D, 0xA7, 0xD5, 0x04, 0x57, 0x7F, 0xD9, 0xEC, 0x04, 0x09, 0x6C, 0x06, 0x07, 0x57, 0xA8, 0x60, 0x33, 0x96, 0x81, 0xD5, 0x52, 0xB6, 0x52, 0x25, 0xE4, 0x1A, 0x6B, 0x15, 0x5F, 0xB5, 0x13, 0xDE, 0x23, 0x85, 0xD5, 0x60, 0x80, 0x2D, 0x3C, 0x01, 0x8A, 0x06, 0x9F, 0xAF, 0x24, 0xA9, 0x2A, 0x97, 0xA9, 0x75, 0xB8, 0xB3, 0xB3, 0x8C, 0xC1, 0x78, 0x39, 0x6F, 0xBA, 0x14, 0x22, 0x60, 0x38, 0x06, 0x25, 0x03, 0x2E, 0x1C, 0x80, 0x4C, 0x95, 0xBC, 0x15, 0x17, 0x4D, 0x80, 0x58, 0xF0, 0x67, 0xE5, 0x6B, 0xB5, 0x04, 0x7A, 0x6D, 0xA1, 0x0B, 0x29, 0x3C, 0x1C, 0x05, 0xC2, 0x00, 0x4D, 0xC0, 0x0D, 0xAF, 0x98, 0xD1, 0x6A, 0x8A, 0x04, 0x86, 0xF3, 0xB7, 0x85, 0xD6, 0x6F, 0x55, 0xAD, 0x4D, 0xF7, 0x6B, 0xFC, 0xD3, 0x49, 0xC0, 0x2F, 0x9A, 0x86, 0x8E, 0x53, 0xFD, 0xE9, 0x96, 0x94, 0x9F, 0xA8, 0xBB, 0xF9, 0x5D, 0xA8, 0x79, 0x04, 0xB0, 0x06, 0xA2, 0xEE, 0x0A, 0x33, 0xBB, 0xB3, 0x0C, 0xFE, 0x3A, 0xBD, 0x65, 0xBE, 0x8D, 0x42, 0x72, 0xFD, 0xAB, 0xB1, 0x97, 0x70, 0xA5, 0xC4, 0xE8, 0xEE, 0x77, 0xB9, 0x26, 0x61, 0x26, 0x0C, 0x06, 0xF7, 0x95, 0xB8, 0x9B, 0x02, 0x98, 0x02, 0x5A, 0x37, 0x6C, 0x51, 0xC6, 0xF8, 0x3C, 0x90, 0x0A, 0x44, 0x01, 0x2E, 0x80, 0xC8, 0xDA, 0xB0, 0xF6, 0x93, 0x03, 0x5D, 0xB4, 0x9A, 0x21, 0x8F, 0xE1, 0xC4, 0xDD, 0xC2, 0x5D, 0x1A, 0x2B, 0x19, 0xCB, 0xF2, 0x5D, 0xA1, 0x5A, 0xD9, 0x83, 0x3C, 0x5A, 0x17, 0x5E, 0xD6, 0xEF, 0x14, 0xAC, 0x7C, 0x67, 0x66, 0x3D, 0xE5, 0xC3, 0xE2, 0x40, 0x1E, 0xA0, 0xFA, 0xEE, 0xB4, 0xCC, 0x88, 0xCB, 0x9E, 0xA3, 0xB9, 0x31, 0xD2, 0xFF, 0x5C, 0x4F, 0xC4, 0xB7, 0x16, 0x76, 0x58, 0x9E, 0xBD, 0x3F, 0x9B, 0xF5, 0x4D, 0xAF, 0x25, 0xCB, 0x99, 0x06, 0x0E, 0xB8, 0x6F, 0x94, 0x60, 0x80, 0x12, 0x20, 0x73, 0xE1, 0x00, 0x7F, 0x41, 0x04, 0x48, 0x07, 0xA6, 0x16, 0x06, 0x54, 0x02, 0x71, 0x00, 0x73, 0x80, 0x69, 0x47, 0x32, 0x34, 0x9A, 0xE3, 0x2C, 0xDE, 0xEB, 0x39, 0x13, 0xFF, 0x57, 0x6C, 0x81, 0x8E, 0xF6, 0x18, 0x3C, 0xCC, 0x6C, 0x11, 0x4D, 0xFF, 0x2C, 0x11, 0x5D, 0x6F, 0x7C, 0xAA, 0xF5, 0x53, 0xD9, 0x98, 0x46, 0x01, 0xB9, 0x35, 0x5A, 0x7F, 0x8C, 0xA6, 0xC0, 0xE8, 0xC7, 0xD1, 0xCD, 0x3B, 0x1E, 0xF7, 0x4C, 0xFE, 0xD9, 0xB1, 0x4E, 0xB2, 0xA3, 0x6F, 0x31, 0xE2, 0xAE, 0x39, 0x86, 0xA1, 0x09, 0x8F, 0x3C, 0x73, 0xF7, 0x0E, 0xE0, 0x06, 0xF4, 0xFE, 0x4C, 0x14, 0xD0, 0x04, 0x5C, 0x16, 0x0D, 0xA4, 0x03, 0xC3, 0xAF, 0xE4, 0x40, 0x13, 0x02, 0x64, 0x00, 0x2E, 0x80, 0x1A, 0x60, 0x9B, 0xFD, 0x20, 0x87, 0x46, 0x0B, 0x8A, 0xD9, 0x41, 0x35, 0xBF, 0x06, 0xED, 0x1F, 0xDC, 0x37, 0x28, 0xD7, 0xC8, 0x69, 0xB0, 0xD8, 0x06, 0x3C, 0xB2, 0x42, 0x68, 0x73, 0x29, 0x94, 0xC6, 0xAD, 0x1F, 0x9C, 0x1C, 0x4C, 0x6D, 0x77, 0x33, 0x61, 0x57, 0x20, 0xCF, 0x2D, 0x18, 0xA7, 0xC2, 0xFD, 0x8C, 0x3A, 0xEE, 0x94, 0xE7, 0xC0, 0x99, 0xB6, 0x57, 0x00, 0x22, 0x2E, 0x39, 0x08, 0xBA, 0x19, 0x71, 0xD7, 0x86, 0xD2, 0xA8, 0xE2, 0xCD, 0x0A, 0xA0, 0xF9, 0x90, 0x8A, 0x08, 0x1F, 0x87, 0x59, 0x15, 0xD0, 0x9B, 0xA7, 0x70, 0x16, 0x54, 0x2A, 0x3A, 0x0E, 0x98, 0x2E, 0x0E, 0x20, 0xF4, 0x96, 0x14, 0xD0, 0xB1, 0x6F, 0x1E, 0x20, 0x8B, 0x36, 0xCB, 0x55, 0x0C, 0xED, 0x2D, 0xF0, 0xF6, 0xAB, 0xB5, 0x48, 0xA6, 0x6C, 0x07, 0xB8, 0xDE, 0x3D, 0x4A, 0xE1, 0x3A, 0xEC, 0x66, 0xB6, 0xDA, 0x9D, 0x7F, 0x75, 0xCE, 0xB9, 0xA3, 0x53, 0x66, 0x40, 0xCA, 0xC2, 0x81, 0xA8, 0xCF, 0xB1, 0xE3, 0x00, 0x7D, 0x5E, 0x67, 0x9C, 0x18, 0x77, 0xC0, 0xE7, 0x02, 0xAF, 0x3F, 0xB0, 0x42, 0x56, 0x9F, 0xCB, 0xE7, 0x30, 0x8D, 0x9C, 0x67, 0xD4, 0x01, 0x4A, 0xD6, 0xF8, 0x7E, 0x6B, 0x31, 0x9F, 0x02, 0xBC, 0x81, 0x5C, 0x74, 0xDD, 0x8B, 0x3F, 0xA5, 0x67, 0x24, 0x17, 0xE7, 0x2E, 0x9F, 0xCA, 0x04, 0x7C, 0x91, 0x94, 0x55, 0x17, 0x9A, 0x0D, 0xE2, 0xFB, 0xE9, 0x05, 0x25, 0x08, 0xD7, 0x7F, 0x8D, 0xCE, 0xBD, 0x5B, 0xA0, 0xC5, 0x1A, 0xBD, 0x5E, 0xA5, 0x9C, 0x44, 0xFF, 0xC5, 0xA9, 0xCB, 0x6C, 0xF9, 0xD5, 0x45, 0xAF, 0x1D, 0x73, 0xAC, 0xCA, 0xAB, 0x03, 0xF4, 0xA2, 0x62, 0x51, 0xC0, 0x3C, 0x1D, 0x8E, 0xAF, 0xC4, 0x52, 0x76, 0x2E, 0x80, 0x9B, 0x1E, 0x06, 0x0A, 0x80, 0x06, 0x62, 0xFD, 0x54, 0xC4, 0x7D, 0x57, 0xE7, 0x51, 0x2A, 0x83, 0xC7, 0xF6, 0x5B, 0x0E, 0x20, 0x1F, 0xB7, 0x12, 0x90, 0x72, 0x77, 0xA5, 0xD6, 0x02, 0x78, 0x1B, 0x53, 0x01, 0x64, 0x80, 0x63, 0x14, 0xB1, 0xFF, 0xA8, 0xF8, 0x70, 0xEB, 0x31, 0x5A, 0xAD, 0x31, 0x37, 0x6A, 0xB0, 0x9E, 0x04, 0x07, 0x1B, 0x1D, 0x7C, 0xB5, 0x8D, 0x70, 0xF5, 0x87, 0x8C, 0x81, 0x1F, 0xD5, 0xEB, 0xEA, 0xF7, 0x90, 0xF2, 0xF1, 0xAD, 0xE9, 0x47, 0x6D, 0x22, 0x6C, 0x21, 0xC0, 0xB7, 0x75, 0x74, 0xD1, 0x0B, 0x77, 0xC5, 0x05, 0x9E, 0xE6, 0x9D, 0xA8, 0x6A, 0xBD, 0xDA, 0xB0, 0xF1, 0xB6, 0xD0, 0xBA, 0xC6, 0x73, 0xC6, 0xDB, 0x81, 0x6C, 0x5A, 0x74, 0x8F, 0x67, 0xF2, 0x56, 0x80, 0xC6, 0xE3, 0x0B, 0x3F, 0x0A, 0xD8, 0x00, 0x2C, 0x4F, 0x92, 0x03, 0xA4, 0x02, 0xE3, 0x37, 0x5A, 0xEE, 0x9F, 0xF9, 0x00, 0xC9, 0x16, 0x23, 0x49, 0xAB, 0x0D, 0xE6, 0xAD, 0x60, 0x93, 0xEC, 0xE6, 0x25, 0x94, 0x2B, 0x91, 0x53, 0xFA, 0x64, 0x65, 0xEB, 0x0B, 0x7D, 0xED, 0x37, 0x6D, 0xED, 0xF2, 0xAD, 0xDD, 0x92, 0x0A, 0xFE, 0xA9, 0xA2, 0x3D, 0x37, 0xD2, 0x81, 0xD2, 0xDB, 0x83, 0x94, 0xFE, 0x56, 0xFE, 0x23, 0xB4, 0xB3, 0x06, 0xE2, 0x28, 0xA1, 0xF1, 0x9E, 0x3B, 0x16, 0x7B, 0x15, 0xDC, 0x97, 0x24, 0x39, 0xC0, 0xC8, 0xDB, 0x10, 0x63, 0xF0, 0x09, 0x29, 0x33, 0x40, 0x0E, 0x30, 0x3C, 0x7D, 0x28, 0x90, 0x3B, 0xD6, 0x6C, 0x51, 0x84, 0x02, 0xDE, 0x80, 0xD8, 0x0E, 0x4E, 0x9E, 0x68, 0xBE, 0xC7, 0x8E, 0xE2, 0x8A, 0x10, 0xF8, 0x59, 0x23, 0x2B, 0x37, 0x6B, 0x90, 0x54, 0x1E, 0x78, 0xE8, 0x5D, 0x3F, 0x4C, 0x35, 0xE6, 0x92, 0xE1, 0xB0, 0x76, 0x79, 0x89, 0x2E, 0x87, 0x47, 0x26, 0x93, 0xD1, 0xEE, 0x5E, 0x35, 0x7D, 0x80, 0x8A, 0xC5, 0xF5, 0x50, 0xCE, 0xD3, 0xA2, 0x98, 0x7E, 0xDC, 0x33, 0xFB, 0x9D, 0x98, 0xE9, 0x5E, 0x40, 0xB2, 0x6E, 0x71, 0x21, 0x8D, 0x57, 0x5C, 0xEF, 0x46, 0x73, 0xF8, 0x84, 0x25, 0xE1, 0xD6, 0x9F, 0x51, 0x60, 0x74, 0xB3, 0x46, 0x0B, 0x88, 0x05, 0xC5, 0xC1, 0xDD, 0x80, 0x3A, 0x0B, 0xFB, 0x14, 0xB8, 0xC5, 0xC2, 0xDF, 0x57, 0x10, 0x89, 0x5D, 0xAB, 0x09, 0x6A, 0xD0, 0x65, 0x56, 0x84, 0x31, 0xFE, 0x65, 0x3D, 0x97, 0x50, 0x4B, 0x3A, 0x66, 0x02, 0x6A, 0x93, 0x47, 0xD7, 0x77, 0x58, 0xBC, 0x08, 0xC0, 0xC5, 0x76, 0x9D, 0x3B, 0xFC, 0xCF, 0xA7, 0xF6, 0x6C, 0xA5, 0x3C, 0x5B, 0xCC, 0x0D, 0x5D, 0x78, 0xBD, 0x09, 0x6E, 0xCE, 0x5D, 0xE0, 0xD9, 0x4A, 0x8F, 0xF0, 0xA4, 0x01, 0xF8, 0x00, 0xBA, 0x1E, 0xB6, 0x36, 0xC0, 0x03, 0xA8, 0x7D, 0x73, 0xDE, 0xD8, 0xA7, 0xF5, 0xA3, 0x94, 0xD6, 0x2B, 0x71, 0x55, 0x9B, 0x96, 0x25, 0x02, 0x78, 0x01, 0x5D, 0xAB, 0x4D, 0xD4, 0x40, 0xC8, 0x62, 0x6E, 0xA4, 0x00, 0x75, 0x80, 0x4E, 0x1E, 0x1C, 0x69, 0x34, 0x45, 0x42, 0x74, 0xCD, 0xCA, 0xA2, 0x20, 0x29, 0x97, 0x6E, 0x00, 0x77, 0xC5, 0xB2, 0x42, 0x65, 0x45, 0xEB, 0xAD, 0x0E, 0xB0, 0x3B, 0xD0, 0xF2, 0xED, 0x6D, 0xE9, 0xC3, 0xCC, 0x59, 0x56, 0x12, 0x03, 0x25, 0x0B, 0x07, 0x9A, 0x3A, 0xA5, 0x0E, 0x54, 0x5E, 0xD1, 0x52, 0x56, 0x45, 0x50, 0x24, 0x93, 0xAD, 0xD1, 0x38, 0xFE, 0xE2, 0xD9, 0xF5, 0x54, 0x58, 0xE3, 0x73, 0x67, 0xC6, 0x35, 0xC7, 0x5F, 0xDF, 0x1B, 0x63, 0xD2, 0x93, 0xBE, 0xB0, 0x06, 0x62, 0x76, 0xAD, 0x73, 0x80, 0x63, 0xF3, 0xE4, 0x42, 0x6F, 0xDD, 0xC5, 0x70, 0xC0, 0x02, 0x08, 0x9E, 0x00, 0x87, 0x56, 0x5B, 0x01, 0x80, 0x88, 0x6D, 0x0D, 0x9C, 0x9B, 0x28, 0xD9, 0xBB, 0xAC, 0xC8, 0xBA, 0xA2, 0xEB, 0xB7, 0xE4, 0x05, 0x5D, 0xEF, 0x16, 0x0C, 0x18, 0x5F, 0x6D, 0x1A, 0x8D, 0xC7, 0x88, 0xE1, 0x9A, 0x6E, 0x77, 0x1A, 0xA3, 0xE6, 0xA2, 0x6E, 0x87, 0x83, 0xFF, 0x50, 0xEB, 0x68, 0x9E, 0x47, 0x97, 0x8E, 0x7A, 0xFB, 0xE1, 0x77, 0xB9, 0xEF, 0xD9, 0xFC, 0x59, 0xA9, 0xF5, 0x84, 0xEB, 0x0E, 0x2E, 0x07, 0xD2, 0xDF, 0x66, 0xAA, 0xB1, 0x93, 0x88, 0xF7, 0x7E, 0xB8, 0xCE, 0x2F, 0xD5, 0x04, 0x2B, 0x20, 0x0F, 0x30, 0x14, 0x6A, 0x3F, 0x40, 0xDA, 0x22, 0x17, 0x07, 0x88, 0x0F, 0x72, 0x03, 0x84, 0x12, 0x34, 0x9A, 0x63, 0x47, 0x91, 0x75, 0x0B, 0x05, 0x9A, 0x43, 0x9B, 0xE4, 0x36, 0xC2, 0xCA, 0x75, 0x33, 0xEB, 0xFE, 0xFB, 0xE7, 0xEF, 0xCC, 0x1F, 0x70, 0x48, 0x4E, 0xFE, 0x47, 0x32, 0xAE, 0xAD, 0xF1, 0x10, 0x48, 0xBA, 0x32, 0xBE, 0xE7, 0xC1, 0xED, 0xCD, 0x55, 0x05, 0x86, 0x82, 0xCB, 0x91, 0x74, 0xD3, 0xBC, 0xCB, 0x59, 0x3F, 0x2D, 0x12, 0x83, 0x5B, 0xA0, 0xEE, 0xCF, 0x78, 0x7A, 0x5A, 0xB0, 0x61, 0xA6, 0xE5, 0xDD, 0xE8, 0xF7, 0x9C, 0xB7, 0x27, 0xDF, 0x5F, 0xCE, 0x69, 0x06, 0xC0, 0x8E, 0xB2, 0x6E, 0x9F, 0x25, 0xE0, 0x00, 0xD6, 0x80, 0x06, 0x70, 0xF6, 0xCD, 0x51, 0x7C, 0x92, 0x03, 0xF4, 0x33, 0x41, 0x79, 0xF7, 0x44, 0x12, 0xBA, 0xAC, 0x54, 0x8A, 0x97, 0xAD, 0x10, 0x89, 0xC0, 0x59, 0x69, 0xFD, 0x43, 0x97, 0xEC, 0x7A, 0xDB, 0x6F, 0xD6, 0x85, 0x06, 0x50, 0xF6, 0x96, 0x03, 0xA8, 0xEC, 0x08, 0x9F, 0x67, 0x4D, 0x3D, 0xB3, 0xF8, 0x8A, 0x17, 0x18, 0x1E, 0xB2, 0x86, 0xF3, 0xC8, 0xDB, 0xBA, 0x60, 0x1E, 0xF5, 0xF8, 0x3C, 0x5B, 0xC7, 0x1A, 0x40, 0x09, 0x30, 0x7A, 0x4B, 0x82, 0x9D, 0x37, 0x05, 0x34, 0x37, 0x4B, 0x29, 0x0D, 0x16, 0xCC, 0x3D, 0x75, 0xE4, 0x6F, 0x80, 0x03, 0xF5, 0xC3, 0xCF, 0xD7, 0x08, 0x64, 0x22, 0x61, 0xFB, 0x1C, 0x40, 0x02, 0xB0, 0x03, 0x78, 0x00, 0x39, 0xC0, 0xFC, 0xF0, 0xBB, 0x18, 0x02, 0xF1, 0xD8, 0x2C, 0x7F, 0x87, 0xD0, 0x36, 0xA7, 0xE9, 0xD0, 0x12, 0xE0, 0x08, 0x36, 0xD5, 0x09, 0xAC, 0x9E, 0xA3, 0x08, 0x29, 0x94, 0x3E, 0xC5, 0xF8, 0x18, 0x19, 0x3F, 0x9C, 0x45, 0xC8, 0x7A, 0xC9, 0x8C, 0x91, 0x47, 0xCA, 0x45, 0x2E, 0xC6, 0x59, 0xBD, 0x0F, 0xA8, 0x00, 0x1E, 0xAF, 0x2C, 0xDD, 0x9A, 0x87, 0xBA, 0xFD, 0xBE, 0xFB, 0x97, 0x23, 0x72, 0x0E, 0x89, 0xBD, 0x04, 0xDC, 0xF7, 0xE1, 0x56, 0x79, 0x76, 0x00, 0x25, 0x40, 0x26, 0x50, 0x0E, 0xE4, 0x00, 0x65, 0x40, 0x3B, 0x30, 0x67, 0x43, 0xE6, 0x0B, 0x5F, 0x54, 0x02, 0x63, 0x8B, 0xDE, 0x2E, 0x91, 0xE7, 0x86, 0x2C, 0xD4, 0x81, 0x2C, 0xDA, 0xAC, 0xD6, 0x15, 0x1A, 0xAB, 0x73, 0xB5, 0x62, 0x31, 0x6E, 0xDB, 0xA7, 0xDC, 0x56, 0xD3, 0xB3, 0x60, 0xBA, 0x68, 0xD8, 0x2C, 0x9D, 0x09, 0xCB, 0x08, 0xB5, 0xDC, 0xFD, 0x40, 0xA3, 0x78, 0x23, 0xA2, 0x8C, 0xA6, 0xAF, 0x95, 0x0C, 0x30, 0x59, 0x24, 0xE0, 0x57, 0x52, 0xB2, 0xFD, 0xF9, 0x28, 0x62, 0x87, 0x1B, 0xFB, 0x49, 0x36, 0x70, 0xEC, 0x4D, 0xB9, 0x10, 0xBE, 0xF2, 0xAC, 0x45, 0x43, 0x2F, 0x88, 0x73, 0x13, 0xDC, 0x4B, 0x26, 0x9B, 0x53, 0x1A, 0x50, 0xF1, 0x49, 0x48, 0x70, 0xA0, 0xD7, 0x66, 0x56, 0x40, 0x12, 0x0D, 0xC4, 0x00, 0x1E, 0x0B, 0x01, 0x22, 0xD6, 0x74, 0x49, 0x9B, 0xF5, 0x6F, 0x72, 0x79, 0x32, 0x73, 0x6D, 0xAF, 0xC6, 0xA3, 0xEB, 0xBB, 0xD1, 0x7F, 0x31, 0xB8, 0x80, 0xE6, 0x36, 0x75, 0x57, 0x47, 0xD1, 0x36, 0x16, 0xFA, 0xCD, 0xC0, 0x05, 0xEA, 0xCA, 0x1C, 0xD3, 0xF3, 0x27, 0x0B, 0xC4, 0xAB, 0xB8, 0x2E, 0x72, 0x11, 0x00, 0xAD, 0x64, 0xF2, 0xCE, 0x4D, 0x66, 0x0C, 0x6F, 0xF1, 0x6A, 0xAE, 0x9F, 0x2D, 0x77, 0x6D, 0x4F, 0x9C, 0xEC, 0xF1, 0x69, 0x80, 0x4C, 0x3C, 0x14, 0x03, 0x5C, 0x81, 0x6C, 0xA0, 0x12, 0xE8, 0xC5, 0x34, 0x66, 0xE3, 0x11, 0x40, 0x06, 0xF0, 0x06, 0xEA, 0x2C, 0x62, 0xD1, 0x40, 0x0B, 0x30, 0x3B, 0x53, 0x4F, 0x03, 0x72, 0x00, 0x33, 0xDA, 0x6C, 0x68, 0x2C, 0x54, 0x46, 0x04, 0x6C, 0x76, 0x7C, 0x10, 0xD9, 0xE8, 0x6D, 0xE9, 0xAE, 0xB6, 0xFE, 0x80, 0xD8, 0x0E, 0xF8, 0x3F, 0x23, 0xF7, 0x13, 0x8D, 0x02, 0x82, 0x69, 0x1A, 0xDC, 0x0F, 0xE9, 0x16, 0x64, 0xC6, 0xA2, 0x39, 0x20, 0x94, 0x15, 0x59, 0x34, 0x57, 0x6F, 0xD9, 0x7D, 0xFF, 0x6D, 0xEF, 0xE3, 0xE7, 0x19, 0x59, 0x74, 0x6D, 0xC4, 0x00, 0x15, 0x40, 0xBF, 0x49, 0x1B, 0xCE, 0x2C, 0xC8, 0x7C, 0x12, 0xCD, 0x54, 0x36, 0x93, 0x83, 0x52, 0x0A, 0xCA, 0xA6, 0x11, 0x40, 0x08, 0xD0, 0xBB, 0xF6, 0x88, 0x00, 0xE6, 0x80, 0x1B, 0x10, 0xBA, 0x18, 0xA0, 0xF2, 0x4E, 0xAF, 0x17, 0x01, 0x9E, 0x1B, 0x7B, 0x1F, 0xDA, 0x0C, 0xEA, 0xEF, 0x8D, 0x55, 0xBF, 0x72, 0x70, 0x16, 0x90, 0x42, 0x09, 0xBD, 0xF9, 0xAA, 0xA0, 0x0C, 0xC3, 0xD3, 0xA8, 0x2D, 0xE0, 0x45, 0x1D, 0x08, 0x7B, 0xEF, 0xE4, 0x62, 0x4F, 0x72, 0x76, 0x53, 0x74, 0x93, 0x90, 0xC5, 0x00, 0xC9, 0x09, 0x7B, 0x69, 0xE5, 0x51, 0x2B, 0x12, 0xFA, 0x51, 0x74, 0xE4, 0x60, 0x8E, 0x05, 0xE0, 0x09, 0xA4, 0xDF, 0x05, 0x27, 0x35, 0xBB, 0xCC, 0x18, 0x8C, 0xC5, 0x6F, 0xAB, 0x7A, 0xEF, 0x0F, 0xD2, 0x40, 0xD6, 0xE6, 0x83, 0x0A, 0x10, 0x06, 0x74, 0x6E, 0xA2, 0xCB, 0x47, 0x47, 0xD2, 0x0E, 0x10, 0x02, 0xD4, 0x00, 0xA3, 0xD8, 0x65, 0xF4, 0xB1, 0x99, 0xC0, 0x2E, 0xE2, 0xB0, 0xBC, 0xE9, 0x9D, 0xD5, 0x91, 0x82, 0x25, 0xBD, 0xE7, 0x07, 0x55, 0xFD, 0x1D, 0x5D, 0xEB, 0xE4, 0x55, 0x08, 0x9A, 0xF9, 0x09, 0x49, 0x3D, 0x9D, 0x1C, 0x0A, 0xC8, 0x59, 0xD4, 0xA7, 0xAB, 0xD9, 0x00, 0x91, 0xC0, 0x5C, 0x45, 0xD9, 0xB8, 0x5C, 0xC2, 0xE8, 0xDE, 0x77, 0xCA, 0x86, 0x6E, 0xB2, 0xFD, 0x73, 0x9B, 0xC8, 0xBD, 0x7B, 0x29, 0x20, 0x54, 0x5D, 0xEB, 0x37, 0x17, 0xA6, 0x9E, 0x7F, 0x10, 0x6F, 0xC6, 0xC8, 0x81, 0xDE, 0x0B, 0xA8, 0x1E, 0x20, 0x87, 0x7D, 0xCB, 0x81, 0xAA, 0x85, 0x00, 0xB1, 0x10, 0x8A, 0x25, 0x52, 0x85, 0xA0, 0x81, 0x39, 0xB4, 0x9A, 0x6E, 0x32, 0x61, 0xE1, 0x8E, 0x10, 0x79, 0x79, 0x39, 0xB2, 0x07, 0xC6, 0x9B, 0xFC, 0x61, 0xCB, 0x67, 0xAD, 0xC3, 0x2F, 0xAB, 0x45, 0x7C, 0xBC, 0x1C, 0xF6, 0x29, 0x65, 0x77, 0x5F, 0x28, 0x60, 0xE7, 0x83, 0x01, 0xBA, 0x60, 0x35, 0x66, 0x32, 0xF4, 0x23, 0xFA, 0xD1, 0x6F, 0x08, 0x2E, 0x1E, 0x3F, 0x66, 0x24, 0x33, 0x81, 0x98, 0x10, 0x0F, 0xF4, 0x79, 0x13, 0x82, 0xF2, 0x51, 0x63, 0x77, 0x26, 0x2D, 0x2C, 0xE6, 0x69, 0x86, 0x0E, 0xE4, 0xB9, 0xAF, 0xDF, 0x29, 0xC0, 0xD4, 0x22, 0x81, 0x16, 0x20, 0x1A, 0x70, 0x03, 0xE2, 0x69, 0xA2, 0x4E, 0xAB, 0x19, 0xF4, 0xD6, 0x26, 0x57, 0x26, 0xD6, 0x2E, 0x2F, 0x87, 0xE5, 0xC0, 0x77, 0x20, 0xBE, 0x19, 0x44, 0x86, 0xE0, 0x5C, 0xF9, 0x1D, 0xFE, 0xAC, 0x8F, 0xD5, 0xFC, 0xDC, 0x63, 0xAD, 0x7A, 0xE1, 0xDF, 0x7C, 0x5B, 0xA0, 0xF3, 0xAD, 0x21, 0xCE, 0x7D, 0xC8, 0x66, 0x04, 0x74, 0x25, 0x3F, 0x6D, 0xFF, 0x7B, 0x81, 0x6D, 0x8C, 0xE2, 0x28, 0x57, 0x35, 0x4C, 0xE5, 0x3E, 0xA4, 0xE2, 0xC5, 0x15, 0x4C, 0x62, 0xE0, 0x05, 0x3B, 0xFA, 0x75, 0x6D, 0xB2, 0x02, 0x7A, 0x1D, 0xE0, 0xB1, 0x18, 0xC2, 0x81, 0x5A, 0xF8, 0x01, 0x64, 0x00, 0x7B, 0xEE, 0x75, 0xB4, 0x9A, 0x6F, 0xB1, 0x51, 0x6F, 0x67, 0x9B, 0xBE, 0x14, 0x28, 0xA4, 0x64, 0x2F, 0x41, 0x83, 0x3F, 0x50, 0x07, 0xE3, 0x67, 0xF4, 0xF2, 0x0D, 0xD5, 0xB7, 0xEF, 0x2C, 0xCD, 0xE5, 0x76, 0x1B, 0x28, 0x6F, 0x1D, 0x80, 0xFF, 0x9E, 0xA1, 0xC1, 0xD2, 0x44, 0xBA, 0x23, 0x85, 0x29, 0x65, 0xC5, 0xF6, 0xC2, 0x54, 0x76, 0x00, 0xC4, 0x77, 0x4E, 0x0E, 0x90, 0x3F, 0xD8, 0x7E, 0xAA, 0x27, 0x61, 0xE5, 0x11, 0xC6, 0x3E, 0xB7, 0xA6, 0x9A, 0x2A, 0x10, 0xBE, 0x36, 0x14, 0x20, 0x06, 0x98, 0x03, 0x74, 0x01, 0x65, 0x80, 0x17, 0x60, 0x0A, 0x38, 0x3D, 0x71, 0x42, 0xAB, 0x05, 0x4E, 0xF9, 0x3A, 0x58, 0x7F, 0xE3, 0x4E, 0x50, 0xE8, 0xA3, 0xAB, 0x10, 0x9B, 0x2B, 0x42, 0x95, 0x18, 0x31, 0x3A, 0xCC, 0x59, 0xBE, 0xD7, 0x35, 0xB1, 0xFF, 0x68, 0xFD, 0x93, 0x01, 0xC4, 0x2C, 0x64, 0x61, 0x77, 0x65, 0xFB, 0x53, 0xDB, 0xFD, 0x08, 0x23, 0xB2, 0x2C, 0x8F, 0x12, 0x28, 0x79, 0xFB, 0x6B, 0xDB, 0x00, 0xA5, 0x00, 0xBD, 0x03, 0x45, 0x21, 0x52, 0x46, 0x67, 0xA8, 0xAC, 0x49, 0xC1, 0x62, 0x2A, 0x30, 0x05, 0xD0, 0x9F, 0x3B, 0x55, 0x3D, 0xED, 0x42, 0x80, 0xF2, 0x45, 0x00, 0xE9, 0x80, 0x07, 0x60, 0x06, 0x38, 0x6E, 0x58, 0xEF, 0x58, 0xCB, 0xED, 0xF2, 0x1B, 0xFF, 0x4C, 0x11, 0x2D, 0xAE, 0xC1, 0x9C, 0xC4, 0xC6, 0x16, 0x5B, 0x2C, 0xC5, 0x85, 0xD0, 0x50, 0x4F, 0x9C, 0xF9, 0x1F, 0xED, 0x58, 0xA4, 0xEF, 0x16, 0x19, 0xC2, 0x80, 0x5E, 0x00, 0x3E, 0x80, 0xD5, 0x62, 0x00, 0x77, 0x60, 0x68, 0xAE, 0xE3, 0xCC, 0xAB, 0xA3, 0x8C, 0xE0, 0xAD, 0x4C, 0xFB, 0x34, 0xB7, 0xD8, 0x9F, 0x4D, 0x01, 0x16, 0x00, 0x55, 0x6B, 0x29, 0x50, 0x92, 0x94, 0xE1, 0xE0, 0x05, 0x63, 0x4D, 0x12, 0xC3, 0xEF, 0x0B, 0x44, 0xDF, 0xBD, 0xF4, 0xA2, 0x80, 0x91, 0x1B, 0x1D, 0x40, 0x2D, 0xB2, 0xDF, 0x87, 0xF1, 0xD7, 0x58, 0xA4, 0x0B, 0xCE, 0x19, 0x2D, 0x04, 0xCF, 0x42, 0x7F, 0x77, 0x2C, 0x3F, 0x1B, 0x52, 0xE9, 0xC2, 0xA8, 0x5C, 0x77, 0x7A, 0xA7, 0x23, 0xEF, 0x4A, 0x84, 0xEB, 0xD8, 0xED, 0x51, 0x2B, 0x26, 0x3F, 0xAE, 0x29, 0xF4, 0x96, 0x9E, 0xA8, 0x02, 0xC2, 0x00, 0x4B, 0x40, 0x15, 0x08, 0x3F, 0x6F, 0xCE, 0x1A, 0xBF, 0x35, 0xB2, 0xB9, 0xAE, 0x2D, 0x4D, 0x13, 0x46, 0xEB, 0x03, 0xC4, 0x42, 0x0A, 0x60, 0xD4, 0x83, 0xF2, 0x1B, 0xBD, 0xF6, 0xC9, 0x1F, 0xEA, 0xE9, 0x39, 0x27, 0x07, 0x98, 0x5C, 0xD1, 0xEF, 0x8D, 0x66, 0x1D, 0x07, 0xA2, 0x81, 0x0E, 0x60, 0x14, 0xE8, 0x59, 0xD8, 0x22, 0x81, 0x59, 0x17, 0x5C, 0x04, 0x8D, 0xF6, 0x26, 0x5C, 0x41, 0x07, 0x06, 0xD5, 0x8F, 0xC7, 0x30, 0xB8, 0x02, 0xDB, 0x6B, 0xB8, 0x21, 0x0C, 0x19, 0x1B, 0xDE, 0xD3, 0x79, 0x62, 0x77, 0x8F, 0xB7, 0x43, 0x76, 0x50, 0xF9, 0x9F, 0x8E, 0x63, 0x50, 0x5D, 0x74, 0x4D, 0x71, 0x98, 0xC5, 0xE7, 0x40, 0xCF, 0x8B, 0x78, 0x7A, 0xEE, 0x26, 0xFB, 0xA0, 0xD8, 0xAD, 0xFA, 0xAD, 0x0A, 0xC4, 0x00, 0x75, 0x00, 0xB6, 0xAC, 0x14, 0x05, 0xC6, 0xE9, 0x37, 0x82, 0x45, 0x84, 0x27, 0x63, 0x5E, 0x49, 0x79, 0xF9, 0xD1, 0xBB, 0xBE, 0xC2, 0x17, 0xDD, 0x1F, 0x85, 0x8E, 0x03, 0x84, 0x02, 0x99, 0x40, 0xBF, 0x89, 0xCF, 0x57, 0x51, 0x8B, 0xD3, 0x68, 0xB3, 0x07, 0xA3, 0x46, 0x42, 0x62, 0xC8, 0x6F, 0x7E, 0xC6, 0xE8, 0xE6, 0x26, 0x6D, 0x41, 0x86, 0xE7, 0xF6, 0x41, 0xF1, 0x9F, 0x47, 0x5F, 0x23, 0x79, 0x55, 0xBF, 0xB7, 0x82, 0xAB, 0x3D, 0x19, 0x7B, 0xFB, 0xD4, 0x9F, 0xEF, 0x63, 0x51, 0x1F, 0x34, 0x1D, 0x95, 0x7D, 0x95, 0x58, 0x71, 0x97, 0xD3, 0x67, 0xEB, 0x13, 0xA3, 0x08, 0x1B, 0xF0, 0x44, 0x91, 0x12, 0x70, 0x03, 0x9A, 0xDB, 0x22, 0x7D, 0x26, 0xBD, 0x26, 0x5C, 0xFF, 0x58, 0x60, 0xC4, 0x2C, 0xB0, 0x2A, 0xAD, 0x4C, 0x3C, 0x90, 0xAC, 0xDA, 0x4E, 0x20, 0x65, 0x31, 0x8B, 0x00, 0xA2, 0x16, 0x09, 0xD4, 0x1E, 0xB7, 0x9F, 0x64, 0xD2, 0xE1, 0xB5, 0x80, 0x5A, 0x92, 0xF3, 0xAF, 0xFC, 0x89, 0xC6, 0x68, 0xC7, 0xCA, 0xDF, 0xF5, 0x3A, 0x31, 0xF3, 0xE7, 0x96, 0x55, 0xEB, 0xAB, 0xCC, 0x2C, 0xBF, 0x69, 0x91, 0x0D, 0xA3, 0x71, 0x15, 0x2B, 0x59, 0x34, 0x90, 0xBE, 0x90, 0x45, 0xB0, 0xE3, 0xEE, 0x95, 0xB2, 0x80, 0xBF, 0x97, 0x91, 0x3B, 0x9C, 0x1E, 0x02, 0xC8, 0xCF, 0x64, 0x1D, 0x65, 0xE4, 0x03, 0x18, 0x3A, 0x56, 0x77, 0x7D, 0x67, 0xBD, 0xBF, 0xF3, 0x46, 0xB6, 0x33, 0x4A, 0x06, 0x66, 0x92, 0x04, 0x2A, 0xD7, 0x5A, 0xFA, 0xB1, 0x88, 0x01, 0x4D, 0x1F, 0x81, 0x00, 0x7A, 0x00, 0x5F, 0x84, 0x03, 0x55, 0x34, 0x9A, 0x60, 0x2F, 0xCF, 0xDE, 0x9B, 0x8E, 0xA1, 0xB8, 0xD4, 0x72, 0x67, 0xD9, 0xAC, 0xE4, 0x7D, 0xEF, 0xB5, 0xD0, 0xB1, 0xB3, 0xAF, 0x58, 0x58, 0x50, 0x82, 0xE8, 0xD6, 0x0A, 0x3B, 0xE7, 0xC9, 0x12, 0x67, 0x6A, 0x0F, 0x30, 0x0D, 0xD4, 0x00, 0x11, 0x80, 0x2D, 0x8A, 0x81, 0xA1, 0xAB, 0x7F, 0xEE, 0xA6, 0x15, 0xC0, 0xDD, 0x01, 0xB0, 0x99, 0x8F, 0x3D, 0x42, 0x60, 0x94, 0xA1, 0x05, 0xE8, 0xEE, 0x50, 0x7D, 0x5B, 0x81, 0x62, 0x9C, 0x63, 0x3E, 0x26, 0x4B, 0x8D, 0x81, 0xD9, 0x59, 0x66, 0x01, 0x74, 0xEE, 0x15, 0xD5, 0x81, 0xD2, 0x85, 0x01, 0x19, 0x40, 0x2C, 0x3C, 0x01, 0x0A, 0xD7, 0x69, 0xD3, 0x66, 0xCC, 0x1A, 0x62, 0xDE, 0x2E, 0x92, 0xFD, 0xAC, 0x6B, 0x5B, 0xD0, 0xA0, 0xF9, 0x94, 0x4C, 0x62, 0x98, 0x2B, 0x2E, 0x07, 0xAD, 0xB0, 0x99, 0x3F, 0xF1, 0x75, 0x30, 0xE4, 0xD3, 0x8D, 0x85, 0x7D, 0xE5, 0xD9, 0x8C, 0x8C, 0xCD, 0xE6, 0x2B, 0x81, 0x50, 0xC0, 0x0C, 0x60, 0xEB, 0x59, 0x8A, 0x2B, 0x25, 0xBB, 0xC5, 0x52, 0xF6, 0x41, 0x69, 0x98, 0x45, 0x02, 0xD9, 0xC0, 0x18, 0x4C, 0x38, 0xAC, 0x66, 0x7F, 0x3D, 0x38, 0x61, 0xB0, 0x6B, 0xEC, 0x32, 0x99, 0x6B, 0xF3, 0x84, 0xBE, 0x1F, 0x04, 0x01, 0x12, 0x48, 0x5D, 0x5D, 0x00, 0x01, 0x64, 0x00, 0x4B, 0xC0, 0x0B, 0x28, 0xBD, 0xC5, 0x02, 0x24, 0x01, 0x4F, 0x1A, 0xCD, 0xF0, 0x1D, 0x8E, 0xC3, 0x67, 0x1A, 0xFE, 0x8B, 0xAC, 0x4C, 0xF6, 0x46, 0x28, 0x66, 0xB3, 0xBF, 0x58, 0x56, 0x20, 0x88, 0x99, 0x5B, 0x50, 0x74, 0xFF, 0x53, 0x2E, 0xC5, 0x4A, 0xB9, 0x6F, 0x2F, 0x33, 0x59, 0x18, 0x90, 0x03, 0x84, 0x00, 0x96, 0x40, 0xE4, 0x75, 0xF2, 0x90, 0xB5, 0x2F, 0xC4, 0x87, 0xF6, 0x02, 0x7C, 0x2B, 0x6D, 0xBA, 0x01, 0xEA, 0xC0, 0xD1, 0xF7, 0x61, 0x3E, 0x9D, 0xB7, 0x22, 0x6E, 0x09, 0x22, 0x46, 0xE1, 0x78, 0xE0, 0xD2, 0xBE, 0x9B, 0xDD, 0x9A, 0x02, 0x4D, 0xE1, 0xC4, 0xB3, 0xC8, 0x45, 0x00, 0xE2, 0x0B, 0xFE, 0xAC, 0x80, 0x76, 0x5A, 0xCD, 0xF1, 0x8F, 0x5C, 0x02, 0x1F, 0xC0, 0x9C, 0x3B, 0x27, 0xD2, 0xEB, 0x87, 0x9A, 0xDE, 0x16, 0x75, 0x85, 0x12, 0x6A, 0x99, 0xFB, 0x02, 0xFA, 0xD5, 0xE0, 0xFF, 0x16, 0x1C, 0x97, 0x02, 0xB9, 0x88, 0xCF, 0x35, 0x2B, 0x14, 0xE8, 0x7E, 0x75, 0x84, 0x9B, 0xC6, 0xA3, 0x34, 0x38, 0x2E, 0x0E, 0x97, 0x9C, 0xF0, 0x61, 0x05, 0x6E, 0x02, 0xAE, 0x40, 0xAD, 0x99, 0x9D, 0x55, 0x36, 0xFA, 0x36, 0xB3, 0xEA, 0xBF, 0x56, 0x38, 0xF6, 0x39, 0xD7, 0x26, 0x8C, 0x67, 0x07, 0x18, 0x83, 0xF1, 0xF4, 0xDB, 0xE4, 0x55, 0xD6, 0xBE, 0x0D, 0xE4, 0x00, 0xF5, 0x83, 0xBD, 0x63, 0x2D, 0x70, 0x8A, 0x5A, 0xCF, 0x90, 0x47, 0xFE, 0x04, 0xD6, 0x32, 0x1B, 0xE7, 0x1F, 0x99, 0x8D, 0x22, 0xEF, 0xCC, 0x1A, 0x87, 0x76, 0x55, 0xC4, 0x25, 0xBB, 0x5C, 0xF6, 0xD1, 0xE0, 0xAF, 0x62, 0xED, 0xD7, 0xDA, 0x42, 0x3E, 0x15, 0x7A, 0x86, 0x9F, 0x4D, 0x2F, 0x74, 0x1F, 0x5E, 0x2D, 0x83, 0xF0, 0xAD, 0xDF, 0x66, 0x6F, 0x98, 0x15, 0x30, 0x5E, 0x03, 0xA6, 0x80, 0x9F, 0x85, 0xBF, 0xF7, 0xF5, 0xFA, 0xCB, 0xD2, 0xA3, 0xB0, 0x90, 0xBC, 0xDD, 0x9D, 0x91, 0x63, 0xC8, 0x55, 0x11, 0x4B, 0xB3, 0x00, 0xF1, 0x69, 0xEF, 0x63, 0x05, 0x78, 0x2E, 0x06, 0x08, 0x59, 0xF8, 0xDD, 0xC8, 0x45, 0x0E, 0xAD, 0x96, 0x2B, 0x5D, 0xDD, 0x28, 0xC4, 0x1D, 0x47, 0xED, 0x6C, 0xF8, 0xD6, 0x18, 0xDB, 0xE6, 0xE0, 0xE7, 0x0A, 0xDC, 0xDB, 0x6F, 0x9E, 0x95, 0x1B, 0x5C, 0x42, 0xFF, 0x25, 0xB0, 0x66, 0xF1, 0x39, 0x74, 0x0C, 0xD0, 0x06, 0x44, 0x03, 0xFE, 0x11, 0xC4, 0x4A, 0xF9, 0xBA, 0x86, 0xA8, 0x65, 0xCA, 0x0C, 0x21, 0xE1, 0xA7, 0x8F, 0xC6, 0xC7, 0x5E, 0xA1, 0x7A, 0xF0, 0xE9, 0x30, 0x7B, 0xE8, 0x52, 0x39, 0x9C, 0xD5, 0x88, 0xA1, 0x1F, 0x3D, 0x9E, 0x86, 0xC0, 0x4E, 0xC5, 0x18, 0x01, 0xD8, 0x06, 0xD7, 0x1A, 0xA8, 0x58, 0x18, 0x10, 0x05, 0x68, 0x00, 0xC7, 0x01, 0x3D, 0xC0, 0x04, 0x8D, 0xC6, 0xE2, 0x32, 0x0A, 0xF9, 0x2B, 0x34, 0x50, 0x1C, 0x01, 0x75, 0x64, 0x7B, 0x08, 0x94, 0xAB, 0x2D, 0xD8, 0x0A, 0x62, 0x55, 0x85, 0x71, 0x1F, 0x7A, 0xE3, 0x04, 0x96, 0x9F, 0xD2, 0x76, 0x65, 0x4D, 0x7B, 0x02, 0x1D, 0x80, 0x0F, 0xA0, 0x0E, 0x1C, 0x05, 0x58, 0x1B, 0xE6, 0x49, 0x57, 0x05, 0xDB, 0xE6, 0xDD, 0x2A, 0x55, 0x47, 0x6E, 0x19, 0x60, 0x35, 0xC0, 0xE7, 0x8D, 0x78, 0xD9, 0xD3, 0xFB, 0xCD, 0xF6, 0x40, 0x4A, 0xF7, 0xA1, 0xB3, 0xE7, 0x73, 0xC0, 0xF5, 0x6D, 0xEB, 0xC9, 0x0E, 0xA3, 0xEF, 0x1A, 0xE8, 0xDA, 0x60, 0x93, 0x00, 0x76, 0x00, 0x1F, 0xE0, 0x67, 0xC1, 0xFA, 0xDD, 0xF0, 0x00, 0x09, 0xC0, 0x9D, 0x36, 0xE3, 0x95, 0x80, 0xED, 0x99, 0x7C, 0xEF, 0x51, 0xB5, 0x1A, 0xBF, 0x8E, 0xBC, 0xC1, 0x40, 0x00, 0x34, 0x32, 0x7E, 0x43, 0xE3, 0x48, 0xBE, 0x2D, 0xE0, 0xE6, 0x56, 0xAA, 0xC6, 0x25, 0x1D, 0x63, 0x8A, 0x71, 0xF4, 0x06, 0xE4, 0xD3, 0xF7, 0x22, 0x05, 0x70, 0x03, 0x32, 0x69, 0x65, 0x16, 0x83, 0xED, 0xDE, 0xAA, 0xC1, 0xFC, 0x65, 0x20, 0x7B, 0xE1, 0x00, 0x5B, 0xBE, 0x9F, 0x02, 0x46, 0x5F, 0x77, 0xD8, 0x3C, 0x39, 0xBB, 0xB2, 0x13, 0xB1, 0xFA, 0x4D, 0xF2, 0xA3, 0xCF, 0x3C, 0xF6, 0x90, 0x9B, 0xCF, 0xF1, 0xC4, 0x12, 0x08, 0x07, 0xB2, 0x81, 0x56, 0x0A, 0x0E, 0x01, 0x6A, 0x80, 0x39, 0x10, 0x45, 0xA3, 0xCD, 0x2F, 0x6B, 0xE0, 0x4C, 0xEF, 0xCC, 0x0D, 0x6C, 0xC6, 0xE9, 0x98, 0x10, 0x93, 0x48, 0x5B, 0x15, 0x59, 0x6D, 0x4E, 0x83, 0xE7, 0x74, 0x73, 0x6F, 0x15, 0x46, 0xEB, 0xA7, 0x81, 0xAA, 0x7C, 0x47, 0x5A, 0xEC, 0x48, 0x53, 0xA0, 0x05, 0xF0, 0x03, 0x9C, 0x5D, 0xC2, 0xB3, 0x80, 0xA2, 0x07, 0x68, 0x67, 0x20, 0x8F, 0x3E, 0x76, 0xEE, 0x1B, 0xFB, 0x29, 0x3C, 0x2C, 0x01, 0xD2, 0x80, 0xDB, 0xC9, 0x1A, 0x8F, 0x3C, 0x5F, 0x30, 0xAA, 0x7E, 0x78, 0x6E, 0x63, 0x43, 0xC1, 0x3B, 0x7C, 0xD7, 0x7B, 0x8A, 0xF3, 0xC5, 0x13, 0x61, 0x08, 0xC0, 0x88, 0xBE, 0x3F, 0xF9, 0x01, 0x22, 0xA8, 0x90, 0x08, 0xA3, 0xE5, 0xE1, 0x95, 0x60, 0xA3, 0x63, 0x86, 0x43, 0x47, 0xD4, 0x6A, 0x4D, 0xB8, 0xAF, 0xD3, 0x64, 0xC5, 0xBE, 0xFB, 0x77, 0x8F, 0x3A, 0xD6, 0xC6, 0x85, 0xFF, 0xCE, 0x8D, 0xCF, 0xFB, 0x1E, 0x55, 0xCE, 0x58, 0xCD, 0xC2, 0x77, 0x65, 0x5B, 0x54, 0x2E, 0xF6, 0x67, 0xE2, 0x57, 0x51, 0x1E, 0x53, 0x4D, 0x31, 0x62, 0x60, 0xAD, 0xB5, 0x4F, 0xC7, 0x42, 0x68, 0xC2, 0x3B, 0x63, 0x08, 0x48, 0x16, 0x09, 0xB1, 0x79, 0x1B, 0xCC, 0xEB, 0x05, 0x84, 0xAC, 0xE7, 0x1F, 0xFE, 0x5E, 0x28, 0x2A, 0xB3, 0xAB, 0x79, 0xAD, 0x8A, 0xB5, 0x02, 0x5A, 0x80, 0x27, 0x90, 0x0E, 0x74, 0x6C, 0xC0, 0x61, 0x00, 0x2D, 0x20, 0x9C, 0x46, 0x13, 0x88, 0x9A, 0x65, 0xFD, 0xA4, 0xE8, 0xC6, 0x51, 0xDF, 0x9E, 0x29, 0xEB, 0xB2, 0xAC, 0x9D, 0x1F, 0x0A, 0x6F, 0xB3, 0x18, 0x4E, 0x0E, 0x36, 0x57, 0xAB, 0x87, 0xC8, 0x4F, 0x42, 0x64, 0xB0, 0x08, 0xFD, 0x00, 0x61, 0x80, 0x2B, 0x1F, 0xC2, 0xB0, 0xB3, 0xC8, 0xBE, 0x93, 0x4A, 0x9D, 0x2A, 0xFC, 0x2C, 0x4B, 0xFE, 0x88, 0x71, 0x9A, 0x01, 0xB2, 0xB0, 0x85, 0xEF, 0x2B, 0xCA, 0x64, 0xF1, 0x64, 0x1D, 0xD3, 0xD3, 0xA5, 0xF0, 0xF5, 0x82, 0xE5, 0x23, 0xB3, 0xC3, 0x55, 0x3E, 0x83, 0x7B, 0x29, 0xD0, 0xBC, 0x72, 0x35, 0xA0, 0xB2, 0x18, 0xC0, 0x16, 0xA1, 0x40, 0xE6, 0xFA, 0x47, 0x94, 0x56, 0x53, 0x9C, 0x28, 0xCB, 0x7E, 0xA5, 0x04, 0x26, 0x7E, 0x15, 0x80, 0xE6, 0x08, 0x3D, 0x6B, 0xDB, 0x9B, 0x51, 0xD1, 0x22, 0x2A, 0xFA, 0x6E, 0xF5, 0xF0, 0x24, 0xA9, 0x7D, 0x04, 0x21, 0xE2, 0x73, 0x52, 0x8B, 0xFA, 0xE8, 0x08, 0x17, 0x70, 0x12, 0x90, 0x4B, 0x87, 0x22, 0x01, 0x58, 0xED, 0xEE, 0x31, 0xD5, 0x0A, 0x78, 0x03, 0xE9, 0xB7, 0x52, 0x60, 0xFC, 0x20, 0x9C, 0xAE, 0x8C, 0xA5, 0xC2, 0x7D, 0xC1, 0x86, 0x20, 0x1B, 0xFE, 0xD8, 0x8B, 0xE3, 0x79, 0x33, 0x9F, 0xEB, 0xC9, 0x8A, 0x2E, 0x67, 0x08, 0x10, 0x30, 0x5D, 0x08, 0x20, 0xB3, 0x28, 0xC0, 0x38, 0x41, 0x93, 0x56, 0x33, 0x84, 0xD9, 0x7D, 0x43, 0xAA, 0xE7, 0xDC, 0x61, 0x29, 0x51, 0xAC, 0x27, 0xB5, 0x31, 0x3C, 0x1B, 0x9C, 0xFB, 0xFB, 0x96, 0x03, 0x48, 0xFF, 0x06, 0x58, 0xE2, 0x8E, 0x9E, 0xE4, 0x01, 0x42, 0x01, 0x13, 0x40, 0x7D, 0xA1, 0x80, 0xAF, 0xD5, 0x1E, 0x23, 0xC8, 0x53, 0xB0, 0x0D, 0xD4, 0x6A, 0xC3, 0x9C, 0x3B, 0x4F, 0x30, 0x6D, 0xE1, 0x7C, 0x73, 0x3D, 0x4F, 0x5C, 0x0E, 0xFD, 0x15, 0x84, 0xB4, 0x78, 0xDA, 0xA8, 0x0C, 0xCF, 0x66, 0xFE, 0x66, 0xA9, 0xED, 0x2E, 0x8E, 0x95, 0x0F, 0x70, 0x07, 0xC2, 0x00, 0x1F, 0xC0, 0x08, 0x07, 0x22, 0xF6, 0xB2, 0x1F, 0xB4, 0x9A, 0xFF, 0x43, 0x4C, 0xCC, 0x0D, 0x39, 0x23, 0xF0, 0x0F, 0xED, 0x66, 0x00, 0xD1, 0xE0, 0x9D, 0xA9, 0xBA, 0x3D, 0x2D, 0x1B, 0x2D, 0x2D, 0xAC, 0xFF, 0x3A, 0x0D, 0xE2, 0x9B, 0xDD, 0x45, 0x3F, 0x00, 0x62, 0xE5, 0xD7, 0x65, 0xAA, 0x0C, 0xB0, 0xC5, 0x39, 0x78, 0x25, 0x7D, 0xB1, 0xAF, 0x3C, 0xB2, 0x0B, 0x14, 0xAA, 0x23, 0x68, 0xBD, 0x10, 0x40, 0xF9, 0xA9, 0x80, 0x1A, 0xBC, 0xD2, 0x14, 0xB1, 0x7B, 0x5B, 0xA6, 0xC0, 0x9F, 0x4A, 0x9F, 0xCE, 0x7A, 0xCE, 0x76, 0x61, 0xAB, 0x0D, 0x11, 0x9F, 0x04, 0x7A, 0x76, 0x29, 0x13, 0x20, 0xF3, 0xB3, 0x94, 0x09, 0xA0, 0x0E, 0x78, 0x01, 0xB1, 0xA8, 0xA4, 0xD9, 0xDE, 0xDC, 0xA1, 0x42, 0xAF, 0x9F, 0x3B, 0x67, 0xD9, 0x36, 0xE4, 0xB5, 0x49, 0xB8, 0xDD, 0xD0, 0x3D, 0x8E, 0xBA, 0x15, 0x3B, 0xE4, 0xDB, 0xC3, 0x46, 0xB8, 0x2B, 0x7C, 0x06, 0xDB, 0x42, 0x07, 0x10, 0x22, 0x00, 0xCB, 0xBB, 0x35, 0x17, 0xC7, 0x95, 0x3B, 0xD0, 0x02, 0x1C, 0x5F, 0x8B, 0xDA, 0x7D, 0x98, 0xD1, 0xB9, 0x34, 0x36, 0xD9, 0x19, 0x58, 0x9F, 0x72, 0x94, 0xFE, 0x61, 0x9E, 0x2A, 0x98, 0xDC, 0x29, 0xFA, 0xD5, 0x90, 0x70, 0x01, 0xDA, 0x37, 0xE9, 0x65, 0x21, 0x05, 0x98, 0x02, 0x5E, 0x40, 0x0E, 0x50, 0x0E, 0x4C, 0xD0, 0x6A, 0x89, 0xCB, 0x39, 0xC4, 0x70, 0x61, 0xD1, 0x29, 0xEC, 0xA1, 0xD8, 0xAF, 0x7C, 0x3B, 0x0E, 0x24, 0xEE, 0x34, 0x15, 0x10, 0xB1, 0xD9, 0x8B, 0x7B, 0xFE, 0x67, 0xE7, 0x1F, 0xB7, 0x4F, 0x36, 0x77, 0x2D, 0x0E, 0xE0, 0xBD, 0x38, 0x80, 0xF1, 0x4D, 0x7D, 0x05, 0xAD, 0xF3, 0x11, 0xE8, 0xB7, 0x05, 0x0F, 0x76, 0x65, 0x80, 0x25, 0xE0, 0x07, 0xB0, 0x00, 0x78, 0xE1, 0xFF, 0x91, 0xCD, 0x6E, 0xAF, 0x82, 0x1B, 0x66, 0xD8, 0x46, 0xDC, 0x4A, 0x61, 0xDF, 0x1B, 0x7B, 0x08, 0xD0, 0xB6, 0x48, 0xA0, 0x0A, 0x48, 0x03, 0x62, 0x91, 0x6C, 0xC0, 0xFC, 0x58, 0xAD, 0x2E, 0x29, 0x3F, 0x11, 0xFF, 0x57, 0xB1, 0xEE, 0xA0, 0x42, 0x47, 0x63, 0x24, 0x9A, 0x35, 0xFE, 0x16, 0x2B, 0xCC, 0x25, 0xEB, 0xD7, 0x83, 0xDB, 0xFA, 0xBD, 0x4C, 0xF5, 0xF7, 0xE4, 0xB1, 0x8B, 0xBB, 0x01, 0x31, 0x80, 0x05, 0x20, 0x0A, 0xD8, 0xB9, 0xD2, 0x75, 0xD7, 0x25, 0xF1, 0xE4, 0x50, 0xD6, 0x53, 0x29, 0xDB, 0x01, 0xE4, 0xA7, 0x14, 0x53, 0x0A, 0x66, 0x52, 0x46, 0x85, 0xD9, 0x96, 0x67, 0x93, 0x8B, 0x78, 0x2C, 0x45, 0xF7, 0x06, 0xDE, 0x16, 0x9C, 0xC7, 0x8A, 0x67, 0xA2, 0xE9, 0x00, 0xF5, 0xE9, 0x80, 0x29, 0x0E, 0xE8, 0x00, 0xBE, 0xA8, 0x00, 0xDA, 0xA9, 0xE9, 0x41, 0xA3, 0xF5, 0x63, 0xB4, 0xD9, 0x8E, 0x3F, 0x0D, 0xBD, 0x04, 0x94, 0xE6, 0xE4, 0x20, 0xD8, 0x23, 0xC3, 0x76, 0xEA, 0x90, 0xAC, 0x8A, 0x8F, 0x3E, 0x69, 0x5E, 0xD2, 0x13, 0xB6, 0x76, 0x8A, 0x27, 0x39, 0xC6, 0x02, 0x38, 0x8E, 0x87, 0x3C, 0x95, 0xCC, 0x00, 0x9E, 0x80, 0x38, 0xE0, 0x72, 0x2B, 0x7C, 0x8C, 0x01, 0xCF, 0xFE, 0xFA, 0x74, 0xAC, 0xE2, 0x27, 0x40, 0xFD, 0xD5, 0x78, 0x95, 0xBD, 0x8D, 0xB3, 0xB8, 0xC5, 0x0C, 0xF0, 0x58, 0x73, 0x29, 0x3E, 0x45, 0x3E, 0xAA, 0x25, 0x6C, 0xFC, 0xE9, 0x9B, 0x0F, 0x28, 0x0D, 0xC4, 0x01, 0x4A, 0x80, 0x11, 0xB8, 0xE2, 0x44, 0x01, 0xB3, 0x45, 0x03, 0x51, 0xB4, 0xDA, 0x9B, 0x42, 0xA4, 0xC8, 0x83, 0x79, 0x43, 0xA0, 0x1E, 0x8A, 0x93, 0xE4, 0xF4, 0xAA, 0x13, 0xC6, 0x4F, 0xC8, 0x64, 0xA4, 0xE8, 0x13, 0xBA, 0x25, 0xBE, 0xE5, 0x5E, 0xD5, 0x74, 0x00, 0x0F, 0xC0, 0xE4, 0xD3, 0xDC, 0xD2, 0x80, 0x3E, 0x8B, 0x64, 0xF9, 0xF6, 0x9A, 0x89, 0xD7, 0xFE, 0x06, 0x4C, 0x6E, 0x97, 0x89, 0x0C, 0xE0, 0x05, 0xE4, 0xBE, 0x92, 0x34, 0x5A, 0x33, 0x81, 0x19, 0x33, 0x12, 0xF0, 0xB3, 0xFF, 0xCA, 0xB9, 0x26, 0x9C, 0x1D, 0x2B, 0x9B, 0x0F, 0x1F, 0xFA, 0x68, 0x41, 0x9E, 0x00, 0x5C, 0x80, 0x0C, 0xA0, 0x93, 0x62, 0x32, 0x80, 0xFB, 0xA7, 0xB3, 0x48, 0xAF, 0xD1, 0xD8, 0x70, 0xBA, 0xE4, 0x96, 0x03, 0xE0, 0x21, 0xC8, 0x37, 0xA6, 0x9C, 0x8A, 0xF5, 0x20, 0x1B, 0xF5, 0xFB, 0x72, 0xEE, 0x02, 0xD0, 0x5B, 0x76, 0x59, 0xAF, 0x12, 0x8C, 0xAB, 0x0C, 0x5B, 0x0A, 0xD0, 0x45, 0x06, 0xE5, 0x4D, 0xAE, 0x6E, 0xEF, 0x2C, 0x55, 0x59, 0x4F, 0xB4, 0x51, 0xB8, 0xAB, 0x36, 0x45, 0x28, 0x9F, 0x54, 0xF6, 0xBC, 0xFA, 0xB7, 0xD9, 0x53, 0x22, 0x50, 0x8F, 0xB0, 0xE5, 0x06, 0xF3, 0xEC, 0x4E, 0x10, 0x2F, 0x01, 0xA2, 0x16, 0x02, 0xA4, 0xDC, 0xE2, 0xFB, 0xC5, 0x6E, 0x40, 0xBD, 0x38, 0xFB, 0xD0, 0x00, 0x73, 0xE0, 0x08, 0x20, 0xB3, 0xAF, 0x38, 0xAD, 0x26, 0x0C, 0x0A, 0x7F, 0xAD, 0x06, 0x8F, 0x5A, 0xE9, 0x96, 0xBF, 0xD4, 0xA6, 0xF9, 0x06, 0x4A, 0xC2, 0x4A, 0xB8, 0x17, 0x7C, 0x62, 0x2C, 0xFA, 0x91, 0x03, 0xE8, 0x6F, 0x2E, 0xC7, 0x82, 0xF3, 0xED, 0xEA, 0x4D, 0x18, 0x2C, 0x74, 0x64, 0x32, 0x2F, 0x83, 0x01, 0xB2, 0x9E, 0xB1, 0x86, 0xD5, 0x8C, 0xF2, 0xC9, 0xFD, 0x94, 0x36, 0x3E, 0xEA, 0x8F, 0x5C, 0xE1, 0x17, 0xC2, 0x72, 0x5B, 0x07, 0xB2, 0x81, 0x38, 0x0B, 0x5F, 0xE4, 0x5D, 0x51, 0x71, 0x1C, 0x08, 0x03, 0xFA, 0x00, 0x35, 0x40, 0x36, 0x10, 0x02, 0xB8, 0x02, 0x69, 0xEB, 0xAA, 0x4C, 0x5A, 0x4D, 0xF7, 0x4D, 0xFB, 0x6D, 0x5D, 0xC7, 0xDE, 0x7C, 0x18, 0x7B, 0x3A, 0x1C, 0xE5, 0x6E, 0x09, 0xDE, 0x98, 0x28, 0xC7, 0xE4, 0x76, 0x7D, 0xF7, 0x77, 0x07, 0x7D, 0x26, 0x1C, 0x30, 0xBA, 0xC8, 0x7B, 0x41, 0x32, 0x07, 0xFA, 0x3A, 0xBB, 0x0D, 0xBB, 0x61, 0xCE, 0xF3, 0x97, 0xF6, 0x9A, 0x6B, 0x1C, 0x88, 0x78, 0x7D, 0x62, 0xDC, 0xFB, 0xFE, 0x8A, 0x36, 0xEA, 0xF2, 0xA5, 0x9D, 0x6B, 0x4F, 0xC0, 0x2B, 0x07, 0x30, 0xA2, 0x6F, 0x1B, 0x4E, 0xD3, 0x16, 0xC0, 0xCC, 0xC2, 0x80, 0x52, 0xC0, 0x1A, 0x90, 0x02, 0xEC, 0xD0, 0xC1, 0x4B, 0xAB, 0xD9, 0xEA, 0x59, 0xCF, 0x77, 0xAC, 0xE1, 0x4E, 0x60, 0xB6, 0xF1, 0x34, 0x3A, 0x8B, 0xF4, 0xA7, 0xA8, 0x73, 0xE2, 0xFC, 0x47, 0xC0, 0x40, 0xE2, 0x53, 0x2B, 0xD5, 0x40, 0x2D, 0x7A, 0x6E, 0xE3, 0xE9, 0xA2, 0xA8, 0xD1, 0xDD, 0x57, 0xD2, 0x15, 0x5A, 0xDD, 0xE0, 0x3B, 0xCD, 0x4E, 0xD4, 0xF3, 0xD6, 0x03, 0xC4, 0x33, 0x74, 0x86, 0x91, 0x75, 0x16, 0x51, 0x1C, 0xCA, 0x2D, 0x30, 0x61, 0x08, 0x90, 0x47, 0x44, 0x72, 0x21, 0x40, 0xF2, 0x53, 0xF2, 0x15, 0x20, 0x0D, 0x18, 0x07, 0xBA, 0x80, 0x6C, 0xC0, 0x05, 0x50, 0x05, 0x8C, 0xE5, 0x6A, 0x41, 0xAB, 0xF9, 0x8E, 0x58, 0x5F, 0xB9, 0x3D, 0xBB, 0x66, 0xA8, 0x7B, 0xAC, 0xE7, 0x01, 0x89, 0xF1, 0x59, 0x81, 0x4E, 0x0B, 0xF2, 0xF8, 0x87, 0xC0, 0xC7, 0x6A, 0xF5, 0xC9, 0xF3, 0x8B, 0x8F, 0x7A, 0xD3, 0x59, 0xDC, 0x9A, 0x13, 0xFB, 0x4A, 0xB0, 0xE5, 0x25, 0x73, 0xAF, 0x98, 0xAB, 0x93, 0x4F, 0xED, 0x52, 0x2F, 0x42, 0xDE, 0x61, 0x55, 0x0C, 0x2B, 0x3F, 0x8D, 0x43, 0x5C, 0x00, 0xA3, 0x54, 0x80, 0x01, 0x5E, 0x40, 0x19, 0x30, 0xB2, 0xDF, 0xF7, 0x00, 0xA2, 0x80, 0x0F, 0x8D, 0x0E, 0xD8, 0x42, 0x03, 0x38, 0x4C, 0xCF, 0x0A, 0x20, 0x17, 0xCD, 0x84, 0x2C, 0xA7, 0xD5, 0xD8, 0xDB, 0xE1, 0x95, 0x03, 0xF8, 0x4D, 0x9F, 0x5A, 0x45, 0xF4, 0xDA, 0xCE, 0x40, 0xBD, 0x3D, 0xE5, 0x1C, 0x3D, 0xDD, 0x92, 0x2E, 0x48, 0x18, 0x6D, 0xAE, 0x24, 0x05, 0xFB, 0x8B, 0x12, 0xD7, 0xE7, 0x80, 0x6F, 0xC0, 0x70, 0xBB, 0x93, 0x01, 0x92, 0x3E, 0x36, 0xE6, 0x2A, 0x1C, 0x7A, 0x16, 0x57, 0x4E, 0x4E, 0x99, 0x46, 0xF1, 0x16, 0xB6, 0xEB, 0x3A, 0x81, 0xF6, 0xD7, 0xD9, 0xA2, 0x13, 0x7E, 0x0C, 0xC0, 0x04, 0x90, 0xF5, 0x48, 0x76, 0x00, 0xD9, 0x1F, 0x04, 0x50, 0xBD, 0xB3, 0x7D, 0x11, 0x02, 0x94, 0x02, 0xC9, 0x87, 0xF5, 0xD1, 0x96, 0x4F, 0xC0, 0x0B, 0x98, 0xC7, 0x68, 0xB9, 0x4E, 0xA0, 0xF9, 0x33, 0xDA, 0xCF, 0xBB, 0x20, 0x70, 0xCA, 0xB7, 0xE1, 0xF2, 0x9B, 0xB1, 0x69, 0xB1, 0x82, 0x0B, 0x4C, 0x9F, 0xAB, 0xA3, 0x99, 0x5D, 0x1E, 0x49, 0xFB, 0xD3, 0x82, 0xBC, 0xAC, 0x05, 0xA9, 0x21, 0xC0, 0x0F, 0x50, 0xF6, 0xF6, 0x9B, 0xD5, 0x75, 0x7A, 0xFF, 0xD5, 0x25, 0x39, 0x83, 0xC6, 0xEB, 0x6B, 0xB0, 0xA4, 0x2E, 0x2B, 0xBB, 0xF4, 0xBF, 0xC9, 0xEA, 0xB4, 0x6B, 0x3C, 0x3A, 0x9A, 0x35, 0x8B, 0x03, 0xC4, 0xC2, 0x06, 0xF0, 0x02, 0x42, 0x81, 0x62, 0x21, 0xF6, 0x22, 0x17, 0x5D, 0x8B, 0x5E, 0x18, 0x90, 0xB3, 0xE8, 0x3B, 0xEF, 0xD7, 0x9B, 0x46, 0x2B, 0x84, 0xF9, 0x25, 0xFF, 0x8C, 0xF6, 0x73, 0xA7, 0x15, 0xBE, 0xAD, 0x1A, 0x2E, 0x12, 0x69, 0x1B, 0x3B, 0xC6, 0x43, 0xC9, 0x62, 0xD2, 0xD0, 0x35, 0x3D, 0x19, 0xC8, 0xCB, 0x4F, 0xAF, 0x0B, 0x5B, 0x74, 0xF1, 0x18, 0x5A, 0x00, 0xCC, 0x24, 0x1B, 0x3A, 0xD1, 0x47, 0x9A, 0x8B, 0x73, 0x8F, 0x42, 0xAC, 0x0C, 0x72, 0x87, 0x2F, 0x12, 0x46, 0x63, 0xF2, 0x72, 0xEC, 0x28, 0x14, 0x83, 0x79, 0x8D, 0x25, 0x4F, 0x74, 0x6D, 0x34, 0xE0, 0x03, 0x48, 0x2F, 0xE2, 0x86, 0x09, 0x50, 0xC9, 0xDF, 0x03, 0x6A, 0x16, 0x0D, 0x44, 0x02, 0x3A, 0x80, 0x1C, 0x7E, 0xBA, 0x4B, 0xA5, 0x52, 0x90, 0xF2, 0x92, 0x33, 0x8F, 0x1C, 0x4F, 0xFF, 0xA2, 0x6C, 0xBD, 0xE1, 0x1F, 0xDD, 0x34, 0xC2, 0xDA, 0x33, 0x4C, 0x40, 0x40, 0xB5, 0xE3, 0xED, 0x73, 0x3C, 0x41, 0xA3, 0xB1, 0x6F, 0xFB, 0xB5, 0xBE, 0xD7, 0x73, 0x99, 0xD2, 0x04, 0x4C, 0x01, 0xEF, 0x5B, 0x05, 0xAB, 0x94, 0x0E, 0x71, 0xC6, 0x06, 0x36, 0xF1, 0xDB, 0x59, 0x96, 0x54, 0x80, 0x32, 0x04, 0xDC, 0xFC, 0x19, 0xCC, 0xCB, 0xBC, 0xC5, 0x27, 0x05, 0xE5, 0x87, 0x7E, 0x04, 0x27, 0xBC, 0xEF, 0x1D, 0x93, 0x3D, 0x69, 0x44, 0x00, 0x53, 0xA0, 0x6A, 0xEF, 0xA3, 0x8B, 0x12, 0x20, 0x0D, 0xF0, 0x02, 0x84, 0x95, 0x52, 0xFB, 0xE9, 0x0C, 0xD0, 0x43, 0xA3, 0xCD, 0xDF, 0xDA, 0xE2, 0x08, 0xD9, 0x95, 0x3F, 0x9A, 0x3E, 0xD5, 0xC8, 0xB8, 0x1A, 0x33, 0xAC, 0x18, 0x58, 0xD3, 0x2C, 0x4C, 0xD9, 0x2C, 0xEF, 0xCE, 0x56, 0xE3, 0x45, 0x9D, 0x71, 0x3C, 0x36, 0xC6, 0x5B, 0xB4, 0x2C, 0x9A, 0x03, 0xCE, 0x00, 0xA3, 0x37, 0x88, 0x71, 0xF3, 0x79, 0x12, 0xD3, 0x76, 0x11, 0xDD, 0x05, 0xA4, 0x76, 0xE0, 0x28, 0x3E, 0x55, 0xEE, 0x82, 0xB5, 0x38, 0x06, 0xC8, 0xFE, 0x2C, 0x82, 0x9E, 0xFB, 0xF5, 0x97, 0x31, 0xBB, 0x85, 0x73, 0x6F, 0x43, 0x28, 0xDA, 0x40, 0xC6, 0x1D, 0x3E, 0x48, 0x01, 0xE6, 0x2C, 0x14, 0xE8, 0x59, 0xF8, 0x82, 0xAF, 0xAC, 0xCF, 0xE3, 0xB9, 0x4B, 0xED, 0xFC, 0xA0, 0xCF, 0xA3, 0x3C, 0xBF, 0xBA, 0xE8, 0xAB, 0x27, 0xD6, 0x5B, 0x25, 0xDE, 0x90, 0x3E, 0x88, 0xBA, 0xEB, 0x3F, 0x41, 0x44, 0x0C, 0xEE, 0x36, 0x70, 0x09, 0x84, 0x2F, 0x3E, 0x6D, 0x8E, 0xF3, 0x00, 0xCD, 0xCE, 0x4A, 0xD7, 0x30, 0x44, 0x03, 0xE8, 0x3D, 0xED, 0xF4, 0x9B, 0x16, 0x9A, 0x3C, 0x20, 0x3C, 0x29, 0xD7, 0xBD, 0x90, 0x5A, 0x70, 0x33, 0x8D, 0xB7, 0x97, 0xF6, 0x79, 0x0A, 0xDA, 0xC2, 0xEF, 0x23, 0x57, 0xB1, 0xD4, 0x2E, 0x01, 0x5F, 0x0C, 0x45, 0xBC, 0x63, 0xD1, 0x0B, 0x05, 0x4E, 0x2E, 0x1C, 0x90, 0x02, 0x72, 0x68, 0x35, 0xD9, 0x8E, 0xF0, 0xBA, 0x92, 0x91, 0xF6, 0x6F, 0x12, 0x79, 0x31, 0x68, 0x12, 0x2E, 0x98, 0x98, 0xE3, 0x5B, 0xFE, 0x25, 0xBF, 0x53, 0x42, 0x8F, 0xBF, 0xAD, 0x67, 0xDB, 0x3E, 0x37, 0xD0, 0xD4, 0x3B, 0x60, 0x90, 0x0E, 0xD4, 0x59, 0x50, 0xED, 0x56, 0x01, 0xE7, 0x65, 0xD3, 0x2E, 0x95, 0x51, 0x86, 0x70, 0xE9, 0xC2, 0xDE, 0xF3, 0x97, 0xC5, 0x66, 0xC8, 0x72, 0x6B, 0x95, 0x27, 0x0D, 0x70, 0xE4, 0xEE, 0x20, 0x25, 0xE7, 0x4D, 0x9B, 0xF5, 0xA7, 0x4F, 0x52, 0xDB, 0xDD, 0x84, 0x9D, 0x7D, 0x57, 0x54, 0x01, 0xC6, 0x8A, 0x7D, 0xD1, 0x06, 0xD4, 0x00, 0x29, 0x80, 0x29, 0x20, 0x09, 0xB0, 0xF5, 0xA3, 0x04, 0x8D, 0xA6, 0xF0, 0xB1, 0xAC, 0xBB, 0xB6, 0x23, 0x7E, 0x61, 0x96, 0x96, 0x5A, 0x21, 0xC5, 0x46, 0x28, 0x7E, 0xE2, 0x07, 0x57, 0x85, 0xEE, 0x74, 0x9E, 0xAB, 0xAA, 0x3D, 0xEB, 0x63, 0xB5, 0x62, 0x82, 0x24, 0x2F, 0xD7, 0x8B, 0xCA, 0x85, 0x03, 0x4D, 0x19, 0x6B, 0x03, 0x46, 0xAE, 0xA6, 0xD0, 0xF9, 0x64, 0x6A, 0x8F, 0xDC, 0x79, 0xEA, 0xE7, 0xD3, 0xEF, 0x9A, 0x87, 0x57, 0x71, 0xE0, 0xB0, 0x0B, 0xE7, 0xDE, 0x0F, 0x69, 0x3C, 0x26, 0xAF, 0x30, 0xDE, 0x9E, 0x9F, 0xA6, 0x35, 0xB9, 0x56, 0x13, 0x07, 0xAA, 0xD6, 0x32, 0xB2, 0x50, 0xE0, 0x18, 0x7B, 0xF3, 0x02, 0x65, 0xC0, 0xEC, 0xCF, 0xD2, 0x68, 0xB5, 0xE7, 0xEA, 0xB9, 0x2D, 0x91, 0xA0, 0x18, 0x79, 0x54, 0x70, 0xCC, 0xAC, 0x59, 0xF1, 0x79, 0xFE, 0x11, 0x01, 0x67, 0xD9, 0x96, 0x1A, 0x9F, 0xEF, 0xAA, 0x76, 0x75, 0x1A, 0xCC, 0x67, 0x9D, 0xD7, 0x85, 0x2F, 0x6C, 0x80, 0x4B, 0x5A, 0xF8, 0x6A, 0xD4, 0x1B, 0xBA, 0x97, 0x02, 0x6E, 0xA3, 0xCD, 0x99, 0x75, 0xAF, 0xD7, 0x69, 0x40, 0x35, 0x30, 0xF3, 0x3A, 0x0E, 0x19, 0x8D, 0xA2, 0x08, 0xB7, 0xEC, 0x51, 0x02, 0x59, 0x2E, 0x70, 0xF1, 0x17, 0x50, 0x76, 0x9F, 0x36, 0xDC, 0x81, 0x5A, 0x74, 0x01, 0xB3, 0x6E, 0x02, 0xD1, 0xFF, 0xEA, 0x60, 0x13, 0xC0, 0x1C, 0x1A, 0xCD, 0x69, 0xB4, 0x4B, 0xB7, 0xC9, 0x7C, 0x30, 0x69, 0x19, 0xE3, 0x69, 0x45, 0x30, 0x6B, 0x66, 0xB5, 0x80, 0xB1, 0x15, 0x70, 0x7E, 0xE6, 0xB7, 0xA8, 0x3D, 0x98, 0x6C, 0x75, 0xBB, 0x59, 0xF3, 0x2C, 0x1A, 0x98, 0x7C, 0xBB, 0x93, 0xC9, 0xAE, 0xDE, 0x62, 0x14, 0x77, 0x64, 0xE5, 0xEF, 0x27, 0x96, 0xA6, 0xCF, 0x49, 0x44, 0x12, 0x50, 0x03, 0x3C, 0x61, 0x8A, 0x33, 0x40, 0x18, 0xD0, 0x7B, 0xB8, 0x3A, 0x0D, 0xD8, 0x01, 0xC2, 0x80, 0x0C, 0xA0, 0x69, 0x98, 0x02, 0x5C, 0x80, 0x50, 0x20, 0x05, 0x28, 0x07, 0x98, 0x04, 0x27, 0x06, 0xA8, 0x02, 0xF1, 0x18, 0x2D, 0xBE, 0x46, 0x83, 0xCB, 0x6D, 0xD3, 0x89, 0xA7, 0x1B, 0x9B, 0x46, 0x0F, 0x32, 0x26, 0xA2, 0x57, 0xE1, 0xB4, 0xAF, 0x2A, 0x33, 0x07, 0x78, 0x2D, 0x32, 0x8E, 0x9B, 0xFA, 0xB4, 0x89, 0x6D, 0xBB, 0x5D, 0xAF, 0x2A, 0x00, 0x25, 0x1A, 0x1F, 0xE9, 0x96, 0x5D, 0xB0, 0x84, 0x97, 0x00, 0xEA, 0xE0, 0x37, 0x73, 0xF6, 0xEE, 0xA0, 0xEF, 0x39, 0x80, 0x06, 0x30, 0x0C, 0xFA, 0x36, 0x30, 0x07, 0x5E, 0x47, 0x49, 0xC0, 0x05, 0xC8, 0x02, 0x5A, 0xD7, 0x49, 0x7B, 0x00, 0x77, 0xA0, 0x04, 0xE8, 0x00, 0xC6, 0xD6, 0x49, 0x9B, 0x80, 0x09, 0x10, 0x0E, 0x64, 0x01, 0xD3, 0xB4, 0x19, 0x8F, 0xB5, 0x2C, 0xF9, 0x65, 0x77, 0x91, 0xBD, 0xBE, 0x4D, 0xC0, 0xA5, 0x52, 0xB9, 0x6D, 0x9B, 0x1C, 0xED, 0x26, 0x1D, 0xA7, 0x5B, 0xF9, 0x5E, 0x3E, 0xE3, 0x53, 0x8C, 0xE1, 0x40, 0x12, 0xB1, 0x50, 0xA0, 0x3F, 0xC1, 0xE5, 0x61, 0x26, 0xD1, 0x53, 0xF6, 0x64, 0x6F, 0x99, 0x57, 0x3E, 0x2B, 0x5B, 0x34, 0x50, 0x02, 0x34, 0xCB, 0xDD, 0x17, 0x14, 0xC7, 0x72, 0x2E, 0xFD, 0x57, 0x04, 0x18, 0xC6, 0xC6, 0xB0, 0x1B, 0xA0, 0x73, 0x73, 0x39, 0x02, 0xA8, 0x4F, 0xF6, 0x86, 0x28, 0xA0, 0x0B, 0x73, 0xC0, 0x07, 0xC8, 0x45, 0x0B, 0xEB, 0x8F, 0x69, 0xB4, 0xC2, 0x9C, 0x1B, 0xFE, 0x81, 0xF9, 0x13, 0x92, 0x1F, 0xB5, 0x95, 0x32, 0xDD, 0xDD, 0xD3, 0x36, 0xA6, 0x57, 0x03, 0xAD, 0xDF, 0x6C, 0x9E, 0x39, 0x3E, 0xDB, 0xE7, 0xA7, 0x67, 0xC1, 0x37, 0xFB, 0xD1, 0x0F, 0x60, 0xB2, 0x18, 0x20, 0x18, 0x45, 0xEF, 0x37, 0x96, 0x22, 0xF1, 0x68, 0x97, 0x08, 0x5B, 0x6E, 0x3B, 0xE0, 0x03, 0x68, 0xBE, 0x0A, 0x7E, 0x30, 0x37, 0x7E, 0xC6, 0x45, 0x50, 0x61, 0x3C, 0xF6, 0xC7, 0x00, 0xFA, 0x51, 0x3C, 0xD0, 0x62, 0xA4, 0x1C, 0xA0, 0x28, 0xC7, 0x39, 0x80, 0x37, 0x50, 0x06, 0xB4, 0x2F, 0x72, 0xD1, 0xC0, 0xE8, 0x2E, 0x0E, 0x07, 0x88, 0xA4, 0xD5, 0x1A, 0xD2, 0x06, 0x89, 0xA3, 0x47, 0x28, 0x5A, 0x17, 0xD4, 0xE6, 0xCD, 0x0F, 0x5B, 0x7C, 0xEF, 0x7D, 0x4A, 0xCF, 0x20, 0xC2, 0x8D, 0xC2, 0x59, 0xE3, 0x50, 0x8B, 0xAB, 0x35, 0xB4, 0x3D, 0x66, 0x0A, 0xA6, 0x79, 0x07, 0xD0, 0xB9, 0x50, 0x60, 0x36, 0xD6, 0x24, 0x8B, 0x9E, 0xF3, 0x46, 0x32, 0xFB, 0x19, 0x4E, 0xAC, 0xBC, 0x39, 0x02, 0xA8, 0xDD, 0x7A, 0x73, 0x11, 0x00, 0x1F, 0x56, 0xBD, 0x2D, 0xEE, 0xF6, 0x5E, 0xE4, 0xFB, 0xC9, 0xEB, 0xC9, 0x5C, 0x3E, 0x02, 0x60, 0xEE, 0xCA, 0x73, 0x47, 0x3B, 0x02, 0x84, 0x02, 0x35, 0x40, 0xE7, 0x07, 0xB2, 0x98, 0xAB, 0x01, 0xF7, 0xBB, 0xA6, 0xBD, 0xCE, 0x34, 0xEC, 0x00, 0x9B, 0x44, 0x64, 0x88, 0x90, 0x79, 0xAE, 0x90, 0xA4, 0xED, 0x72, 0xE9, 0x3B, 0x87, 0xF2, 0xAD, 0x36, 0x3E, 0x0E, 0x58, 0xB2, 0xB3, 0xDD, 0x15, 0x5C, 0x8A, 0xA7, 0x58, 0x40, 0x12, 0x38, 0x1F, 0x88, 0x03, 0xF4, 0xF1, 0xD3, 0x49, 0xE3, 0x74, 0x57, 0xCC, 0xA7, 0xAD, 0xC0, 0x00, 0xFC, 0x14, 0x01, 0xF4, 0xDE, 0xCA, 0xE7, 0x07, 0x2E, 0x4A, 0x9B, 0x0D, 0x1A, 0xBD, 0xD5, 0xDB, 0xEB, 0xD9, 0x4D, 0x87, 0xE9, 0x72, 0x77, 0xC6, 0xCC, 0xFD, 0xD9, 0x6F, 0x80, 0x03, 0x11, 0x40, 0x1D, 0xA0, 0x03, 0x98, 0xD9, 0x9A, 0xEC, 0x06, 0xE2, 0x00, 0xA9, 0x40, 0xD3, 0xCD, 0x61, 0x87, 0x36, 0x83, 0x41, 0x14, 0xB5, 0x52, 0x63, 0xB1, 0x52, 0xA7, 0x72, 0x49, 0xC9, 0x68, 0x60, 0xF3, 0x8C, 0x36, 0x4A, 0xD1, 0xD1, 0x1D, 0x09, 0xA3, 0x5D, 0xC2, 0x69, 0xF8, 0xD2, 0xD8, 0x2E, 0x1D, 0xE8, 0x5C, 0xB0, 0x2F, 0x9E, 0x00, 0x16, 0x97, 0xF8, 0x90, 0x3D, 0x6D, 0xDC, 0xDA, 0x5E, 0x2F, 0x2A, 0x1A, 0x08, 0x62, 0x0F, 0x35, 0xA0, 0x06, 0x18, 0xD9, 0x2C, 0x50, 0x5E, 0xDC, 0xE9, 0xD8, 0x60, 0x93, 0x95, 0x78, 0x7B, 0x41, 0x6D, 0x99, 0x72, 0xE4, 0xD3, 0x7E, 0xC6, 0x04, 0xA8, 0x86, 0x5D, 0x25, 0x01, 0x5F, 0x44, 0x00, 0x69, 0x40, 0x39, 0x30, 0x1B, 0xBD, 0x12, 0x03, 0x74, 0xE1, 0x46, 0xA3, 0xC9, 0x46, 0x84, 0x15, 0x7B, 0x76, 0x31, 0xD4, 0xCE, 0x3C, 0xBA, 0xC2, 0x39, 0xD2, 0x1C, 0x69, 0xEC, 0xD2, 0x88, 0x07, 0xBB, 0x5D, 0x6E, 0xC8, 0xFC, 0x16, 0x33, 0xEA, 0x7C, 0x22, 0xC2, 0xDF, 0x3A, 0xE3, 0xB3, 0xD0, 0xBB, 0x15, 0xF4, 0xE9, 0xAB, 0x6F, 0xDC, 0x79, 0x54, 0xAC, 0x26, 0x77, 0xF3, 0x2E, 0x20, 0x1A, 0x90, 0xB9, 0x85, 0x69, 0xA9, 0x12, 0x66, 0x97, 0x4E, 0x77, 0x3C, 0x22, 0x8F, 0xF4, 0xF6, 0x32, 0xA9, 0xBE, 0xF7, 0xE4, 0xDA, 0xF4, 0x6C, 0x24, 0x4B, 0xE7, 0x81, 0x18, 0x60, 0x74, 0xE1, 0x0B, 0x03, 0x3A, 0x17, 0xBE, 0x4B, 0x62, 0x00, 0xCF, 0xED, 0xF3, 0xF1, 0x3F, 0x6E, 0xB0, 0x79, 0xF2, 0xDF, 0xFC, 0x8C, 0xA7, 0xB0, 0x1A, 0xFB, 0x66, 0x8A, 0x20, 0xF0, 0x93, 0x8D, 0xEB, 0x90, 0xC4, 0xB5, 0x7D, 0xF6, 0x95, 0x18, 0x89, 0x41, 0x79, 0x05, 0x35, 0x53, 0x17, 0x02, 0x04, 0x1F, 0x06, 0xD0, 0x57, 0x74, 0x85, 0x85, 0x2C, 0xAC, 0x88, 0x57, 0x79, 0x6E, 0x96, 0x21, 0x40, 0xC6, 0xC2, 0x81, 0x8E, 0xB7, 0x3B, 0x6A, 0xB2, 0x0F, 0xF6, 0xBA, 0x83, 0x92, 0x47, 0x96, 0xDD, 0x30, 0x1B, 0xB6, 0x0B, 0x79, 0x9A, 0x90, 0x55, 0xEF, 0xA2, 0xC4, 0xE4, 0x8E, 0x06, 0xFC, 0x00, 0xD1, 0x40, 0x0E, 0xD0, 0x07, 0x98, 0xA6, 0x8C, 0x0A, 0xA0, 0x0E, 0xFC, 0x0D, 0x35, 0xA3, 0xD1, 0xB0, 0xDF, 0x9A, 0x5D, 0xAD, 0x40, 0xFB, 0xE0, 0xCC, 0x61, 0x5A, 0xEB, 0x30, 0xDF, 0x16, 0xC7, 0xDD, 0x8C, 0xA6, 0xDC, 0xAD, 0x31, 0xE4, 0xBE, 0xB1, 0x9B, 0x7D, 0x92, 0x3A, 0xEC, 0x93, 0x1A, 0xFF, 0xE9, 0xF1, 0xA3, 0xC9, 0xE8, 0xF2, 0xD5, 0x14, 0x0E, 0xE9, 0x27, 0xC8, 0x2E, 0x77, 0x40, 0x0B, 0x90, 0x01, 0x7C, 0x51, 0xF9, 0xE6, 0x96, 0xDA, 0xD3, 0xAC, 0x4C, 0x38, 0x2A, 0x0C, 0x46, 0x13, 0xCE, 0xD6, 0x5A, 0xC3, 0x9C, 0xCD, 0x7A, 0xB1, 0xFB, 0x10, 0x37, 0x8C, 0xAD, 0x1F, 0xC0, 0x06, 0xC8, 0xF3, 0xE9, 0x27, 0xB5, 0xD0, 0x06, 0xA2, 0x69, 0xB4, 0x5D, 0xDE, 0xCB, 0x61, 0x49, 0x8D, 0x1D, 0x69, 0xBE, 0x99, 0xFC, 0x05, 0x0F, 0xF9, 0x6C, 0xFA, 0x95, 0x0A, 0x82, 0x98, 0x98, 0x9F, 0xE3, 0xDF, 0x0C, 0xF9, 0x6F, 0x5F, 0x68, 0xC9, 0xCF, 0x18, 0x4B, 0xC0, 0x15, 0xB0, 0x06, 0x3C, 0x00, 0x5E, 0x45, 0x1F, 0x39, 0xB1, 0xD9, 0xF9, 0x59, 0x6C, 0x51, 0xA8, 0x77, 0x7D, 0x7B, 0x2E, 0xA2, 0x00, 0xE7, 0xCF, 0xEC, 0x4D, 0xA5, 0xDC, 0xEF, 0x6B, 0xBC, 0x04, 0xC0, 0x07, 0xC7, 0xA6, 0x9F, 0x38, 0xFD, 0xF3, 0x34, 0x16, 0xC0, 0x30, 0xCF, 0xC5, 0xEF, 0x5E, 0x48, 0x6C, 0x40, 0x35, 0x8B, 0x32, 0x20, 0x89, 0x66, 0x26, 0x1B, 0xAD, 0x76, 0x27, 0x10, 0xF9, 0xE4, 0x95, 0xAD, 0x16, 0x47, 0x56, 0xE4, 0x38, 0xF1, 0xCF, 0x6A, 0x8E, 0x2C, 0x33, 0xC9, 0x3B, 0xFC, 0x19, 0xDF, 0x62, 0x63, 0xC6, 0xD8, 0x05, 0xC8, 0x06, 0x22, 0xBF, 0x39, 0x30, 0x0B, 0x05, 0xA2, 0xBF, 0xF2, 0xDE, 0x34, 0xDE, 0x8E, 0x3C, 0x77, 0x4A, 0xE5, 0x02, 0x56, 0x40, 0x2E, 0xD8, 0x98, 0x7C, 0x86, 0x4D, 0x7A, 0x59, 0x71, 0xBD, 0xD7, 0xEB, 0xB5, 0x4C, 0xB2, 0xA7, 0xA2, 0xEF, 0x96, 0xE0, 0xDC, 0x04, 0x76, 0x85, 0x3F, 0x00, 0xDB, 0x84, 0x9E, 0x03, 0xE8, 0xC2, 0x17, 0x69, 0xC0, 0x6C, 0x7E, 0xC2, 0x71, 0x40, 0x8B, 0x56, 0xCB, 0xAB, 0x7F, 0x6A, 0x59, 0x5C, 0x7B, 0x41, 0x3D, 0x7A, 0x53, 0xCC, 0x27, 0x1E, 0x4C, 0xB7, 0xEC, 0x4B, 0x35, 0x78, 0xAE, 0x93, 0x9A, 0xBE, 0x93, 0x10, 0xA8, 0x59, 0x18, 0x10, 0xB3, 0xA8, 0x4F, 0x7B, 0x3C, 0xA5, 0x47, 0xE4, 0xCA, 0xA5, 0x62, 0x1E, 0x33, 0x86, 0x23, 0x6E, 0xA6, 0x0E, 0xE4, 0x95, 0x11, 0xEE, 0xCF, 0xF8, 0x93, 0x4D, 0x0C, 0x37, 0x76, 0xA6, 0x67, 0xA8, 0x65, 0x77, 0xD5, 0x66, 0xBA, 0xA3, 0xDD, 0xED, 0x2C, 0x9D, 0x2D, 0x2B, 0x0D, 0x88, 0x00, 0xCA, 0x80, 0x0E, 0x60, 0xA8, 0xFA, 0x71, 0x00, 0xCB, 0x7B, 0xFD, 0xCB, 0x43, 0xA3, 0x15, 0x8D, 0xB6, 0xDD, 0xEA, 0x68, 0x34, 0xC6, 0xB5, 0x7A, 0x6B, 0x9B, 0xED, 0x87, 0x92, 0xFE, 0xCD, 0xAF, 0xF0, 0xBC, 0xD4, 0xFB, 0xBE, 0xA2, 0xA4, 0x74, 0x77, 0xA8, 0x01, 0xDE, 0x40, 0xD8, 0x8D, 0xAA, 0x77, 0x0A, 0xC7, 0xEE, 0x01, 0x58, 0x33, 0x9E, 0x89, 0xF9, 0xE7, 0x2A, 0x90, 0xC7, 0x2F, 0xAD, 0x07, 0x88, 0x00, 0x72, 0x80, 0x59, 0x67, 0x61, 0xFD, 0x90, 0x7F, 0xDE, 0xFF, 0x75, 0xE2, 0x32, 0x9F, 0xC1, 0xF4, 0x3E, 0xE9, 0xDD, 0xBD, 0xE0, 0xE0, 0xBA, 0xB9, 0x8B, 0x19, 0xCF, 0x62, 0x80, 0xD1, 0xFB, 0x06, 0x66, 0x07, 0x70, 0x05, 0xB2, 0x69, 0x34, 0x5C, 0xC4, 0xCD, 0x07, 0xF7, 0x1A, 0xB9, 0x33, 0x61, 0xC2, 0x1B, 0x41, 0xDA, 0x84, 0xE7, 0xFB, 0x4C, 0xAE, 0xB7, 0xCC, 0xAF, 0xB2, 0xD9, 0xA6, 0xD1, 0xE6, 0x3F, 0xF2, 0xFB, 0x4A, 0x16, 0x09, 0x34, 0xF7, 0xD6, 0x6B, 0x53, 0x8D, 0xA7, 0x78, 0x7B, 0x27, 0x79, 0xFF, 0x89, 0x37, 0x5D, 0x2E, 0xC0, 0xF9, 0x13, 0x92, 0x4B, 0xD8, 0x67, 0xE8, 0x9C, 0x4C, 0xC0, 0x17, 0xB3, 0xF3, 0xF2, 0x29, 0xF4, 0x29, 0x20, 0x37, 0xF0, 0x72, 0x16, 0x1A, 0x40, 0x7C, 0xD4, 0x9E, 0x5C, 0x80, 0x1C, 0xA0, 0x0E, 0x90, 0x06, 0x44, 0x2E, 0x14, 0xC8, 0xF5, 0x3B, 0x19, 0x47, 0xDA, 0x1B, 0x60, 0x5F, 0x5C, 0x59, 0x91, 0x6A, 0x8E, 0xB0, 0x8F, 0xEA, 0xFA, 0x63, 0x06, 0x63, 0xA3, 0x85, 0x61, 0xBC, 0xDB, 0x39, 0xE4, 0xB7, 0xD1, 0x62, 0x51, 0x01, 0xB4, 0x01, 0x73, 0x3E, 0x61, 0xF6, 0xFC, 0x84, 0xD9, 0x8B, 0xF9, 0x4A, 0x3C, 0xE5, 0xE4, 0x5E, 0xFC, 0xEC, 0xCE, 0x38, 0x36, 0x07, 0x74, 0x00, 0xEF, 0xBD, 0x6D, 0x17, 0x90, 0x14, 0xF6, 0x2A, 0x40, 0x0D, 0xF0, 0x03, 0x44, 0x00, 0x69, 0x40, 0x3D, 0x5D, 0xF1, 0x00, 0xB5, 0xC5, 0x7F, 0x96, 0x12, 0x0C, 0x50, 0x0E, 0x74, 0x7E, 0xF2, 0x96, 0xFD, 0x20, 0x03, 0x37, 0x34, 0xAF, 0xE0, 0xA7, 0xE8, 0xE0, 0x9C, 0xA9, 0x78, 0x55, 0xD5, 0x30, 0xF5, 0xB7, 0x1C, 0x23, 0xCC, 0x50, 0xF4, 0x79, 0x0B, 0x54, 0xDB, 0xD5, 0x95, 0x00, 0x97, 0x90, 0x8D, 0xA3, 0x24, 0xE0, 0x07, 0x08, 0x03, 0x9A, 0x0D, 0x6B, 0x8A, 0x35, 0x77, 0x74, 0x20, 0xB1, 0xB5, 0x3F, 0xAC, 0xE5, 0xC3, 0x4B, 0xE1, 0xED, 0xF3, 0xC9, 0xBE, 0xC1, 0xF6, 0x93, 0x7D, 0xF6, 0x70, 0x5F, 0xC0, 0xEC, 0x2A, 0xAF, 0x02, 0x78, 0x00, 0xA5, 0x40, 0xFB, 0xA6, 0xA6, 0x09, 0xE0, 0x0A, 0xD4, 0x01, 0x9A, 0x68, 0x60, 0x66, 0x13, 0xD5, 0x1A, 0x70, 0x05, 0x62, 0x80, 0x36, 0x1A, 0x4D, 0xFE, 0x21, 0x52, 0x3B, 0x1B, 0x20, 0xCA, 0x5F, 0x26, 0x69, 0xB7, 0x6F, 0xBF, 0x7D, 0xC1, 0xC8, 0x4E, 0xC5, 0xE8, 0xF5, 0xFC, 0x8D, 0xB4, 0x4E, 0x5A, 0xE9, 0xF6, 0xDD, 0x8A, 0xDD, 0xA9, 0x09, 0x51, 0xC0, 0x7C, 0x5A, 0x49, 0x9D, 0x85, 0x2B, 0x30, 0xFE, 0xCA, 0x53, 0xB0, 0xF7, 0xA0, 0x30, 0x7E, 0xA7, 0xCF, 0xDD, 0xC9, 0xD7, 0x35, 0x31, 0x03, 0x74, 0x02, 0x26, 0xEF, 0xBA, 0xC5, 0x4F, 0xFA, 0x2C, 0x43, 0x2C, 0xFE, 0x3F, 0x3B, 0x7E, 0x92, 0x7D, 0x40, 0xF7, 0xAE, 0x7E, 0x02, 0xF0, 0xC5, 0xC8, 0x6E, 0x0B, 0x8B, 0x4C, 0xA0, 0x6C, 0x91, 0x8B, 0x00, 0xB8, 0x3B, 0x9C, 0x04, 0x22, 0x68, 0x34, 0xBD, 0x5C, 0x6A, 0x96, 0xDC, 0x08, 0xD8, 0xAD, 0xC4, 0x36, 0x79, 0x67, 0x55, 0x8A, 0x3A, 0x70, 0xEC, 0xF2, 0x64, 0xE6, 0xE8, 0xE5, 0xE7, 0x90, 0xFC, 0x68, 0xE9, 0xE4, 0x3D, 0x2F, 0xAB, 0x16, 0xB4, 0xDD, 0x01, 0x78, 0xC9, 0xD7, 0x1D, 0x9A, 0xDE, 0x6F, 0xDB, 0x71, 0xCD, 0x27, 0xA5, 0xE7, 0x11, 0x6F, 0x0C, 0x20, 0x0C, 0x28, 0x01, 0x66, 0xB3, 0x61, 0xB9, 0x7C, 0x71, 0xBF, 0xD4, 0x9D, 0x43, 0xF4, 0x51, 0xB2, 0xBB, 0x9B, 0x71, 0x30, 0xEE, 0xB8, 0x13, 0x07, 0x32, 0xEF, 0xB3, 0x86, 0x04, 0xA0, 0x09, 0xD8, 0x00, 0xD1, 0x40, 0x1B, 0x30, 0xB9, 0x47, 0x8E, 0x43, 0xA3, 0xD9, 0x7F, 0xAF, 0x69, 0x90, 0x33, 0xC8, 0x9D, 0xDD, 0x0E, 0x37, 0x82, 0x6F, 0x77, 0x1E, 0xFB, 0x6D, 0x04, 0x59, 0x5F, 0x41, 0x52, 0xB9, 0x13, 0xAE, 0xF2, 0xBF, 0x32, 0xAD, 0x4E, 0xDF, 0x4D, 0x15, 0xCF, 0xE5, 0x6D, 0x93, 0x3F, 0x6D, 0x0E, 0xD6, 0xB9, 0x85, 0xB1, 0xDB, 0xF5, 0x4E, 0x4F, 0x7A, 0x5F, 0x73, 0x21, 0x30, 0x05, 0x3D, 0xAC, 0x47, 0x80, 0x6A, 0x98, 0xC2, 0x04, 0x88, 0x00, 0xCA, 0x80, 0x89, 0xB5, 0x8F, 0x03, 0xBA, 0x08, 0x03, 0x2A, 0x3E, 0xD3, 0x73, 0x80, 0xA9, 0x9D, 0x9E, 0x06, 0x58, 0x00, 0xEE, 0x40, 0x26, 0x8D, 0xE6, 0x34, 0xD3, 0xAB, 0x48, 0x37, 0xAE, 0x7A, 0x7B, 0x3F, 0x62, 0xBD, 0xD2, 0xAC, 0x1D, 0x1F, 0x38, 0x3A, 0xCE, 0xBD, 0xA4, 0x3D, 0x4D, 0x77, 0xD9, 0x08, 0xE4, 0x71, 0x8D, 0xEE, 0xBA, 0x13, 0xB6, 0xB5, 0xE3, 0x09, 0x74, 0x00, 0xBE, 0x55, 0xE6, 0xBE, 0x7F, 0x52, 0x1A, 0xBF, 0xCA, 0x1A, 0x64, 0x38, 0xBD, 0x60, 0xC1, 0x3A, 0x4F, 0xD5, 0xE2, 0x53, 0xA3, 0x22, 0x1B, 0x25, 0xEF, 0x27, 0xBB, 0x57, 0xF8, 0xEF, 0xE0, 0xBB, 0x3D, 0xC7, 0x7D, 0x56, 0x34, 0x03, 0xB4, 0x6E, 0xA4, 0xDD, 0x09, 0x73, 0x35, 0x40, 0xFA, 0xA7, 0xDF, 0xA6, 0x00, 0xEE, 0x40, 0xD6, 0xB3, 0xE5, 0xD3, 0x66, 0xF7, 0x7C, 0xAC, 0xA6, 0xE9, 0x08, 0xFE, 0x81, 0xBA, 0x5D, 0x96, 0xE4, 0x9F, 0x3B, 0x8E, 0xB8, 0x08, 0x23, 0xDC, 0xCE, 0xA1, 0x8C, 0x35, 0xDA, 0x0F, 0xAC, 0x29, 0xA4, 0x23, 0x99, 0x67, 0x71, 0xFE, 0xAB, 0x06, 0x76, 0x23, 0x58, 0xF2, 0xBC, 0xF2, 0xA2, 0xFA, 0x6C, 0x7B, 0xCE, 0x06, 0x3A, 0xBA, 0x0E, 0x8A, 0x3D, 0x7F, 0x24, 0x6B, 0xC9, 0xF6, 0xEC, 0xCF, 0x7B, 0x01, 0x6C, 0xFE, 0xD7, 0x2D, 0x94, 0xA5, 0x59, 0x9F, 0x16, 0x39, 0x7E, 0x00, 0x55, 0x40, 0x72, 0xD1, 0x77, 0x4A, 0xBE, 0x2E, 0x32, 0x81, 0x30, 0x40, 0xE5, 0x96, 0x84, 0xB3, 0x04, 0x82, 0xAF, 0xFC, 0x19, 0x2D, 0xEF, 0xBC, 0x51, 0xDD, 0x0A, 0xE3, 0x52, 0x54, 0xFD, 0x7B, 0xFE, 0x9C, 0xD1, 0xA3, 0xB5, 0xED, 0x19, 0x1D, 0x11, 0xEC, 0x4A, 0xDE, 0x00, 0xAE, 0x28, 0x41, 0x5C, 0x2A, 0x1C, 0xFA, 0x64, 0xEF, 0x2F, 0xD6, 0x21, 0xCB, 0xBC, 0x01, 0x7B, 0x44, 0xFA, 0x76, 0x22, 0xF2, 0xE2, 0x13, 0x8F, 0xEC, 0xEF, 0x93, 0xC0, 0x31, 0x30, 0x3D, 0x5B, 0x54, 0x52, 0x69, 0x61, 0x58, 0x9D, 0x8D, 0x21, 0xC6, 0x28, 0xEA, 0x9C, 0xDB, 0x75, 0x22, 0x9F, 0x1A, 0x7A, 0x15, 0xE0, 0xD4, 0x42, 0x17, 0x09, 0x58, 0xDD, 0xCB, 0xAB, 0x2B, 0x40, 0xC7, 0xD6, 0x2C, 0xC2, 0xBE, 0xC7, 0xF4, 0x1D, 0x85, 0x7F, 0x46, 0xAB, 0xEF, 0xEC, 0xFC, 0x80, 0x3D, 0xF9, 0x64, 0xB3, 0xF6, 0x73, 0x93, 0xA0, 0x21, 0xAE, 0x79, 0xDD, 0x9E, 0x84, 0x41, 0x5F, 0xAE, 0xF8, 0xBA, 0xEB, 0xB1, 0xEE, 0xF2, 0xBA, 0x47, 0xEA, 0x5A, 0x43, 0xD6, 0x16, 0xA8, 0xD7, 0x3A, 0xE4, 0x8B, 0xBB, 0x7B, 0x6F, 0x03, 0x5D, 0xDB, 0xD3, 0x04, 0x2F, 0xD5, 0xBD, 0xD9, 0x7D, 0xFD, 0xB4, 0x34, 0xAB, 0xDD, 0x5E, 0xE3, 0x2D, 0x57, 0xAE, 0x47, 0x5B, 0xAC, 0xD7, 0x04, 0xC5, 0x2F, 0xED, 0x80, 0x0D, 0x20, 0x84, 0x2D, 0x02, 0xF0, 0xE1, 0x3C, 0x06, 0x62, 0x00, 0x0F, 0x40, 0x3E, 0xAD, 0xD7, 0xCC, 0x81, 0xC7, 0xF5, 0xA0, 0x8F, 0xCD, 0xFA, 0xE7, 0xAC, 0x75, 0xF9, 0xEE, 0x06, 0xEC, 0xCC, 0x50, 0x2B, 0xAD, 0x91, 0x88, 0x6D, 0xF3, 0x8C, 0x78, 0xE0, 0xEE, 0x4E, 0x66, 0x29, 0xDF, 0x2B, 0x5A, 0xE8, 0x66, 0x2F, 0xCA, 0x93, 0x1E, 0xC5, 0xE9, 0xB8, 0x7E, 0x67, 0x85, 0x05, 0xB5, 0xF1, 0x29, 0xE6, 0x5D, 0xE6, 0x64, 0x6B, 0x2C, 0xE9, 0xD5, 0x37, 0xFA, 0xF8, 0x77, 0x5F, 0x9C, 0x4D, 0x8B, 0xA1, 0x58, 0xE1, 0x8E, 0x33, 0x29, 0x18, 0x59, 0xF0, 0x26, 0xE6, 0x05, 0x8F, 0x81, 0x8A, 0x7F, 0x38, 0x76, 0x91, 0x13, 0x80, 0x82, 0xCE, 0x13, 0xFB, 0xE9, 0x7C, 0xFC, 0xC6, 0x67, 0xE1, 0x06, 0xD8, 0x01, 0xF6, 0x95, 0x28, 0x40, 0x03, 0x70, 0xFE, 0x82, 0x39, 0x6D, 0xC6, 0x5B, 0xD3, 0x26, 0x45, 0x30, 0xB9, 0x6F, 0x87, 0x62, 0xB4, 0xA0, 0xF8, 0xCD, 0x7C, 0x9B, 0xAB, 0x19, 0xE2, 0x1B, 0x2A, 0x8C, 0x3E, 0x5D, 0xC1, 0x28, 0x7A, 0xB6, 0x9D, 0xA2, 0x53, 0x14, 0xD5, 0xB6, 0x7A, 0x8F, 0x57, 0xF6, 0x34, 0x14, 0x56, 0x6A, 0x18, 0x14, 0xDD, 0x11, 0xEC, 0xA5, 0xFB, 0x1E, 0x2D, 0xCE, 0x93, 0x24, 0xED, 0x6F, 0xB7, 0x24, 0xD6, 0xAF, 0xB0, 0xF5, 0x03, 0x7C, 0x5D, 0xD7, 0x52, 0xA6, 0x5C, 0xCA, 0x02, 0x70, 0xFF, 0x54, 0x2F, 0xD4, 0xC2, 0x16, 0xDC, 0x0D, 0x3E, 0x5D, 0xE7, 0x4C, 0x01, 0x3D, 0x7C, 0x08, 0x78, 0x01, 0xB2, 0xF0, 0xB7, 0x67, 0x3A, 0x8C, 0x16, 0x7B, 0xC2, 0x60, 0x34, 0x7A, 0x75, 0x4C, 0x52, 0x85, 0xB6, 0x83, 0xB7, 0x26, 0x14, 0x56, 0xD6, 0xD9, 0xD6, 0x25, 0xC1, 0x5C, 0x8E, 0x7B, 0x49, 0x73, 0xB6, 0xDD, 0xBA, 0xBA, 0xD2, 0x2A, 0xDC, 0x80, 0x28, 0x17, 0x5A, 0x28, 0xC5, 0xAA, 0xE5, 0xCD, 0xEE, 0x8F, 0x27, 0xA1, 0xB8, 0x0F, 0xA0, 0x2B, 0xDF, 0x48, 0x8D, 0x9D, 0x94, 0xD7, 0x5C, 0xD8, 0xF7, 0x9E, 0x71, 0x94, 0xCF, 0x12, 0x13, 0x71, 0x97, 0xE1, 0xF6, 0xC7, 0xF7, 0x69, 0xF7, 0xCA, 0x76, 0xF5, 0x8C, 0xBC, 0x96, 0x75, 0x75, 0x20, 0x07, 0x88, 0xB8, 0xF7, 0x81, 0x72, 0xC0, 0xEA, 0x3F, 0xA7, 0x67, 0xC8, 0xAF, 0x59, 0x59, 0x95, 0xAD, 0xC8, 0x9A, 0x21, 0x9F, 0x7D, 0xFC, 0xD7, 0x5B, 0x3E, 0x44, 0xB0, 0x79, 0xB2, 0x2B, 0x6B, 0x36, 0xF6, 0x32, 0xD5, 0xFF, 0xCD, 0xE5, 0x48, 0x61, 0x06, 0x02, 0x23, 0x96, 0x6C, 0xA2, 0xE5, 0xB7, 0x16, 0x06, 0x43, 0x23, 0xB8, 0x3E, 0x17, 0x2B, 0xB5, 0x9E, 0xBB, 0x66, 0xBE, 0xCA, 0x23, 0xBA, 0xA7, 0x34, 0xCD, 0xE7, 0xA0, 0xC3, 0x40, 0xD9, 0x34, 0xF5, 0x9B, 0x77, 0xA2, 0x24, 0xB3, 0x45, 0x2E, 0x11, 0xA8, 0x6E, 0x60, 0x66, 0xA1, 0x8B, 0x58, 0x14, 0x6B, 0x97, 0x01, 0x8F, 0x7B, 0x0A, 0x67, 0x03, 0xC1, 0x87, 0x7A, 0x77, 0x08, 0xB0, 0x04, 0xF6, 0x67, 0x97, 0xD1, 0x14, 0xAB, 0x4A, 0x3E, 0x83, 0xEB, 0x03, 0x7C, 0x07, 0x3D, 0xB8, 0x0F, 0xA4, 0x18, 0x8E, 0x91, 0x63, 0xFF, 0xF4, 0xD9, 0x00, 0x6C, 0x47, 0xBF, 0xD0, 0xAF, 0xC4, 0x6C, 0x25, 0xEF, 0x3F, 0xEF, 0x5D, 0x6D, 0x2E, 0x46, 0xE1, 0x4B, 0x6C, 0x25, 0x33, 0x3E, 0xC5, 0x9C, 0xA7, 0x15, 0x42, 0xAD, 0xC8, 0x72, 0x6D, 0x7D, 0x4E, 0xE6, 0x3A, 0xF0, 0xB1, 0xAC, 0xC0, 0x0D, 0xF6, 0xDE, 0xDD, 0xCD, 0x81, 0xA7, 0xA8, 0xC4, 0x1F, 0x89, 0x3F, 0xA7, 0x7C, 0x80, 0x3D, 0xBA, 0x7F, 0xEB, 0x32, 0x05, 0xD2, 0x81, 0x68, 0x80, 0x67, 0x3D, 0x31, 0x60, 0x12, 0xBF, 0xE7, 0x0D, 0x58, 0xDE, 0xDD, 0x57, 0x3D, 0x80, 0x53, 0x80, 0xE6, 0xBE, 0x32, 0xB4, 0x19, 0x8A, 0xB2, 0xA5, 0x62, 0x13, 0xC4, 0xF2, 0x6B, 0x33, 0x38, 0xE7, 0xD9, 0x69, 0xAF, 0x0A, 0x6A, 0x63, 0x1E, 0xBF, 0x91, 0xD5, 0xF4, 0x07, 0x01, 0xF5, 0xB6, 0x68, 0xC0, 0xB2, 0x47, 0xEF, 0xC0, 0xDE, 0x5E, 0x44, 0xD7, 0x82, 0xBC, 0x43, 0xEF, 0xDD, 0xBB, 0xD7, 0x71, 0xFF, 0x48, 0xBB, 0xAD, 0xC8, 0x39, 0xFB, 0x82, 0x7B, 0xBC, 0x59, 0xAF, 0xB6, 0xFE, 0xCF, 0x7C, 0xBA, 0xE0, 0xCD, 0x7A, 0xDD, 0x72, 0xEF, 0xFA, 0xC1, 0x9B, 0xBF, 0x03, 0xA7, 0x79, 0xB5, 0x00, 0x42, 0x01, 0x8F, 0x85, 0x2E, 0x1A, 0x18, 0xC1, 0x2F, 0x30, 0x4A, 0x2B, 0x03, 0x9C, 0xE4, 0x43, 0x40, 0xF6, 0xF7, 0x6A, 0x31, 0xB6, 0xAF, 0x3C, 0xE3, 0xCC, 0x21, 0x4B, 0x5F, 0x42, 0x51, 0x98, 0xAF, 0xCD, 0x10, 0x1A, 0x6A, 0xD9, 0xB6, 0x39, 0xB8, 0xB3, 0xA7, 0xE6, 0x9B, 0xFE, 0x22, 0xE7, 0xB6, 0x59, 0xFB, 0xDA, 0x2C, 0x99, 0xF7, 0xE0, 0xB0, 0x8B, 0xC9, 0x5B, 0xCD, 0xBB, 0x0B, 0x53, 0xD0, 0x8B, 0x55, 0x4F, 0xB2, 0xB5, 0xEE, 0x9D, 0xDB, 0xB1, 0x5B, 0x2E, 0x90, 0xDA, 0xB0, 0x02, 0x6F, 0xB0, 0x99, 0x16, 0x05, 0x14, 0x18, 0xF0, 0xB9, 0xFB, 0x36, 0x1F, 0x01, 0xAA, 0xEE, 0xB6, 0xC4, 0xD1, 0x40, 0x2D, 0x3A, 0x37, 0xE6, 0x20, 0x40, 0xC8, 0xDD, 0x18, 0xB5, 0x1B, 0xA8, 0x00, 0xD8, 0xFE, 0xA5, 0x03, 0xF0, 0x45, 0x7E, 0xBA, 0xA5, 0x66, 0xF0, 0x36, 0xB0, 0x97, 0x17, 0xA1, 0xCD, 0x28, 0x80, 0x29, 0x10, 0x98, 0xD0, 0x6D, 0x9E, 0xD8, 0xB3, 0x17, 0x29, 0x61, 0x5C, 0xE0, 0x2E, 0x8F, 0xF2, 0xD8, 0x6D, 0xA0, 0x2E, 0x09, 0xF4, 0x79, 0x52, 0x8C, 0xE7, 0x00, 0xCE, 0x0A, 0x2E, 0x79, 0x33, 0xF4, 0xD6, 0x81, 0xAD, 0x54, 0x64, 0xDD, 0x23, 0x0A, 0xFF, 0x52, 0x56, 0x4C, 0xCA, 0x8A, 0x33, 0xD2, 0x47, 0x59, 0xCF, 0xED, 0x95, 0x2B, 0xBE, 0x7F, 0xAA, 0x95, 0xB5, 0x01, 0x59, 0xB0, 0x27, 0xD8, 0x28, 0xD0, 0x03, 0x8C, 0xDD, 0x25, 0xF5, 0xCD, 0x85, 0xFF, 0x73, 0x30, 0x6E, 0x07, 0x5C, 0x00, 0x39, 0x80, 0xC9, 0xBE, 0x22, 0xCF, 0x48, 0x4B, 0x5A, 0x0D, 0x8B, 0x49, 0xC4, 0x5E, 0x97, 0xE6, 0x3D, 0xAC, 0x75, 0x75, 0x43, 0xDF, 0xFC, 0x09, 0xD2, 0xDA, 0x7F, 0xB4, 0xCE, 0xA6, 0x3C, 0x87, 0x5E, 0xFD, 0x3B, 0xA1, 0xF8, 0x78, 0xEB, 0x14, 0xC6, 0xC7, 0x40, 0xCA, 0xD6, 0xA4, 0x3B, 0x3C, 0x0E, 0xC5, 0x24, 0xFD, 0x5D, 0xEB, 0xB7, 0x9D, 0xCC, 0xEC, 0x6E, 0x5F, 0x77, 0xE5, 0x22, 0x1C, 0x01, 0xF7, 0x79, 0xA2, 0x3F, 0x3B, 0xA3, 0xC6, 0xFD, 0x7D, 0x4F, 0x2C, 0x6C, 0x51, 0x80, 0xD3, 0x81, 0x30, 0x40, 0x28, 0xE0, 0x02, 0x9C, 0xBE, 0xE5, 0x7A, 0x75, 0x80, 0xE0, 0xCD, 0xE1, 0x3C, 0x56, 0xAB, 0x7F, 0xF3, 0xFB, 0x73, 0x7B, 0x7B, 0x42, 0x24, 0x4A, 0x5D, 0x73, 0x3D, 0xDF, 0x6E, 0x3F, 0x73, 0x55, 0x0F, 0x4A, 0x0D, 0x63, 0x75, 0x01, 0x02, 0x55, 0x9F, 0xF6, 0x39, 0xA7, 0x39, 0x25, 0xD3, 0x92, 0x3E, 0xEB, 0xDD, 0x43, 0xD9, 0xF7, 0x63, 0x0A, 0x9F, 0x86, 0xA7, 0x53, 0xB6, 0x16, 0xEB, 0xB7, 0xA1, 0x70, 0x3E, 0x5A, 0x69, 0x14, 0xFF, 0x65, 0xBB, 0xC6, 0x89, 0xBF, 0x5D, 0xAC, 0xFE, 0x0A, 0x6E, 0xF5, 0xAE, 0x9F, 0x95, 0xB9, 0x47, 0x4E, 0x15, 0x30, 0xB3, 0x88, 0x85, 0x7F, 0x3E, 0xCD, 0x7D, 0x32, 0x1B, 0xCA, 0x92, 0x1D, 0x40, 0x9B, 0x0F, 0x81, 0x10, 0x40, 0x1A, 0x78, 0x5E, 0x91, 0xC7, 0x68, 0xFD, 0xAF, 0x50, 0x3A, 0x80, 0x48, 0xA1, 0x7F, 0x3D, 0xDF, 0x8C, 0xE3, 0xE9, 0xAE, 0x0B, 0xB6, 0xB9, 0xA4, 0xF3, 0xD6, 0xF9, 0xCC, 0xE0, 0x1D, 0x9E, 0x9F, 0xA9, 0x85, 0xDE, 0xEB, 0x1F, 0xB4, 0x27, 0xF3, 0xBC, 0x16, 0x69, 0x6F, 0x1A, 0xE7, 0x96, 0x79, 0x3E, 0xD9, 0xAE, 0xF1, 0x88, 0x91, 0x30, 0x75, 0x76, 0xE2, 0x15, 0x91, 0xD6, 0x47, 0x06, 0x30, 0xD9, 0x7A, 0x9D, 0xCB, 0xF5, 0x1E, 0xFE, 0x87, 0xC9, 0xF7, 0x3C, 0xD9, 0x17, 0x37, 0x04, 0x40, 0x0B, 0x70, 0x5D, 0x34, 0x10, 0xC5, 0x4E, 0x3A, 0x00, 0x4F, 0x80, 0x56, 0x80, 0xEA, 0x3E, 0x34, 0x40, 0x83, 0xE9, 0x4C, 0xC0, 0x0C, 0x5E, 0x39, 0x41, 0xA3, 0x0D, 0x5A, 0xE2, 0x1D, 0x85, 0xEF, 0xB8, 0xF5, 0x6B, 0x34, 0xFC, 0x65, 0xA9, 0x5B, 0xF9, 0x1C, 0x2B, 0x92, 0xED, 0xF7, 0xE1, 0x36, 0x38, 0xD4, 0xF4, 0x15, 0xCF, 0x54, 0x7D, 0x4A, 0x1E, 0xBA, 0xDE, 0xB3, 0x98, 0xEF, 0xD5, 0x9C, 0x7D, 0xEB, 0xB0, 0x55, 0x62, 0x34, 0x52, 0x03, 0x9B, 0xBD, 0x8D, 0xA8, 0x8C, 0xE8, 0x6F, 0xE3, 0x79, 0x83, 0x61, 0x29, 0x58, 0xDA, 0x4F, 0x6F, 0x38, 0x0D, 0xFA, 0xE4, 0x00, 0x39, 0xC0, 0x50, 0x9A, 0x2D, 0x80, 0x5A, 0x74, 0x03, 0x63, 0x77, 0x45, 0x88, 0x33, 0xDF, 0x2B, 0x80, 0x54, 0xC0, 0xEB, 0x7D, 0x58, 0x7F, 0xD9, 0xFA, 0x07, 0x08, 0x79, 0x5E, 0x59, 0xAB, 0xE5, 0x7B, 0x25, 0x18, 0xE4, 0xD5, 0xDE, 0x56, 0xDB, 0x13, 0x64, 0xEA, 0xAF, 0x24, 0x2C, 0x1C, 0x5B, 0x2C, 0x3B, 0xCC, 0xEA, 0xB7, 0xC0, 0xD8, 0xE7, 0x4D, 0x42, 0xD3, 0xBF, 0x4A, 0x0F, 0x93, 0x3B, 0x97, 0xDA, 0x6C, 0x7D, 0xAD, 0x2C, 0x56, 0xAD, 0x4D, 0xC3, 0xF8, 0xA1, 0xF6, 0x6A, 0xE9, 0x8F, 0x2B, 0xD2, 0xF6, 0x72, 0x2E, 0x6C, 0xA4, 0x1A, 0xCF, 0x1D, 0xFD, 0xB9, 0x45, 0x06, 0xC0, 0xE9, 0x73, 0x25, 0x40, 0x7C, 0x7C, 0x42, 0xE2, 0xC0, 0x21, 0x6C, 0x91, 0x80, 0xCD, 0x4E, 0xF3, 0xBA, 0xE6, 0xE2, 0xF5, 0xF0, 0xFA, 0x8F, 0x69, 0x7F, 0xBC, 0x1C, 0xF3, 0x58, 0x4D, 0x68, 0x35, 0x28, 0xDE, 0x7A, 0x6C, 0x3F, 0x2A, 0x1E, 0xD8, 0xD8, 0xCD, 0xF3, 0x17, 0xBA, 0x8B, 0xCA, 0x40, 0x24, 0xE4, 0x60, 0x07, 0xF5, 0x6F, 0x5B, 0x41, 0x56, 0xE4, 0x7B, 0x30, 0x79, 0x8A, 0xFA, 0x99, 0x07, 0x78, 0x5A, 0x3D, 0x14, 0x93, 0x82, 0x6E, 0xE1, 0xFC, 0xC3, 0x15, 0xEC, 0x00, 0x67, 0x70, 0xA3, 0x96, 0xB7, 0xCA, 0x2A, 0x9E, 0x44, 0xFB, 0x27, 0xC8, 0xBC, 0x1B, 0x62, 0x06, 0x20, 0x09, 0x98, 0x02, 0x1D, 0x5C, 0xEF, 0x3F, 0x3B, 0x68, 0x2E, 0xF8, 0x50, 0x00, 0xF3, 0x7B, 0x91, 0x73, 0x01, 0xB4, 0xF6, 0x61, 0x03, 0xF1, 0x91, 0xAF, 0x71, 0xFF, 0x5E, 0x3F, 0x53, 0xD7, 0x6A, 0x38, 0xA3, 0xEB, 0xD4, 0xFF, 0xB8, 0x3B, 0xB2, 0xE6, 0x07, 0xF5, 0xB3, 0x7D, 0x40, 0x4D, 0xD9, 0x18, 0xEF, 0xCE, 0xB6, 0x32, 0xCE, 0x8A, 0xC7, 0x4E, 0xC3, 0x5B, 0x37, 0x33, 0x66, 0xF1, 0x49, 0xD8, 0xA0, 0x6F, 0x77, 0xD0, 0xB4, 0xF7, 0x10, 0xE5, 0x7F, 0x07, 0xD6, 0xFC, 0x93, 0xCF, 0xE9, 0x75, 0xB0, 0xE6, 0x63, 0x3C, 0x7D, 0x6A, 0x46, 0xD7, 0x08, 0x02, 0xD8, 0x59, 0x34, 0xD0, 0xFE, 0x31, 0xD7, 0xA2, 0xFB, 0xC6, 0xD0, 0x16, 0x06, 0x74, 0xD2, 0x16, 0x80, 0x7C, 0xAF, 0xFE, 0x07, 0x10, 0xBD, 0x05, 0x58, 0xA4, 0x1E, 0xAB, 0x19, 0xAD, 0x86, 0x5B, 0x68, 0x34, 0x32, 0x11, 0x5C, 0xB0, 0x77, 0x6D, 0x75, 0x4F, 0x65, 0x61, 0x7F, 0x82, 0x7D, 0x51, 0x43, 0x75, 0x30, 0x23, 0x21, 0x9C, 0x70, 0x4B, 0x00, 0x50, 0x4A, 0xE2, 0x6A, 0x5B, 0xD6, 0x0C, 0x36, 0xE0, 0x13, 0x97, 0x29, 0xA3, 0x38, 0xA6, 0xB1, 0x14, 0x14, 0xF3, 0xEE, 0x00, 0x22, 0x3C, 0x26, 0xEE, 0x2C, 0xE4, 0x71, 0x80, 0xD3, 0x4F, 0x78, 0xC4, 0x00, 0xE4, 0x07, 0x59, 0x3B, 0xFD, 0x0E, 0xF4, 0x40, 0xF2, 0x95, 0x5C, 0xE8, 0xE2, 0x2C, 0xE4, 0x36, 0xAC, 0x14, 0x50, 0x8F, 0x2D, 0x00, 0xCE, 0xDE, 0x5A, 0x98, 0xDD, 0x13, 0x5C, 0x63, 0x5F, 0xF9, 0xB3, 0x9A, 0xFF, 0xCC, 0xE5, 0x99, 0xA8, 0x27, 0x3B, 0xF6, 0x6E, 0x03, 0x29, 0x2E, 0xEB, 0xEA, 0xB0, 0x4D, 0xEE, 0x19, 0xA4, 0xB7, 0x97, 0x50, 0x06, 0xE6, 0x73, 0x5A, 0xBB, 0x5A, 0xE3, 0x49, 0xEF, 0x1A, 0xCF, 0x6E, 0x81, 0x2C, 0x2A, 0x61, 0x2B, 0x57, 0x76, 0x28, 0x6B, 0x76, 0xDA, 0xDF, 0xEA, 0x4F, 0x7A, 0x68, 0xF5, 0xF1, 0x8E, 0x4D, 0xFE, 0xE9, 0xE5, 0xD4, 0xCE, 0x91, 0x7C, 0x12, 0xA1, 0x9F, 0x40, 0x0D, 0x4D, 0x79, 0x0D, 0xC0, 0x78, 0x74, 0x55, 0xAC, 0x80, 0xE6, 0xA1, 0xD8, 0x01, 0x09, 0x40, 0x13, 0xC8, 0xBC, 0xAF, 0xE4, 0xFD, 0xB9, 0xA7, 0xBB, 0xFC, 0x87, 0x1E, 0x4B, 0xED, 0x9B, 0x99, 0x8F, 0xD5, 0x78, 0x33, 0x40, 0x9A, 0xF2, 0x71, 0xBB, 0x9A, 0xFE, 0xAC, 0xDE, 0xAD, 0xAA, 0x2B, 0xEA, 0xB1, 0x35, 0x50, 0xD6, 0x68, 0x73, 0xCF, 0xD0, 0xFA, 0x9C, 0x71, 0x4D, 0x98, 0xC0, 0x1B, 0x6F, 0x43, 0x4D, 0x7F, 0xFA, 0x78, 0xB3, 0x75, 0xAC, 0xF4, 0x7B, 0xB1, 0xF1, 0xB5, 0x93, 0xF2, 0x6A, 0x88, 0x37, 0xFB, 0x71, 0x56, 0x9C, 0x59, 0x5B, 0xD8, 0xBD, 0xEA, 0xF8, 0x8E, 0xA0, 0x28, 0x40, 0x14, 0x30, 0xF9, 0xAC, 0x6B, 0x9C, 0xC4, 0xB3, 0xC8, 0x0F, 0xE6, 0xD6, 0x0D, 0x19, 0xFB, 0xB8, 0xD5, 0xF8, 0x50, 0x01, 0xFF, 0x9C, 0x9B, 0xAD, 0x1E, 0xCF, 0x1B, 0xAD, 0x96, 0xBF, 0x7B, 0xFB, 0x54, 0x43, 0x55, 0xD3, 0xBE, 0x6E, 0xDC, 0xCD, 0x70, 0x4A, 0x83, 0xC6, 0x6A, 0xE9, 0x2A, 0x6B, 0xDF, 0x7A, 0x30, 0xF5, 0x1C, 0x72, 0xFD, 0xAD, 0x0B, 0xD0, 0xBF, 0x36, 0x09, 0x4A, 0xAD, 0x83, 0x57, 0x71, 0x96, 0x3A, 0x17, 0x4A, 0x05, 0xEB, 0x4D, 0xB3, 0x66, 0x1A, 0xA8, 0xD4, 0x73, 0x2D, 0x1F, 0x7F, 0x05, 0x4A, 0x85, 0x1E, 0x55, 0x29, 0xB6, 0x3E, 0xE6, 0x21, 0x03, 0x10, 0x80, 0xE2, 0x62, 0x57, 0xA1, 0x0C, 0x3C, 0x3D, 0x8B, 0x30, 0x20, 0x13, 0xA8, 0xB9, 0xAA, 0x9E, 0xE5, 0x11, 0x60, 0x8C, 0x85, 0x0B, 0x70, 0x78, 0xD5, 0x1F, 0x40, 0x0C, 0x60, 0xE7, 0x4D, 0x53, 0x5A, 0xAD, 0x20, 0xD9, 0x79, 0x04, 0x0E, 0x8A, 0xF2, 0x8F, 0xD5, 0x98, 0x9F, 0x98, 0xBB, 0x3A, 0xF5, 0x3A, 0x79, 0xFD, 0x72, 0xAB, 0xE5, 0x75, 0xC8, 0x6D, 0x5E, 0xF5, 0xEA, 0xC9, 0x27, 0xD1, 0x7A, 0xEB, 0x74, 0xE4, 0xA9, 0xE3, 0x2C, 0xC6, 0x7A, 0x29, 0x91, 0xC0, 0xAE, 0x5C, 0xAF, 0x78, 0xA1, 0xFA, 0x73, 0x33, 0x2D, 0xDB, 0xD9, 0xDE, 0x6B, 0xC9, 0x82, 0x25, 0x63, 0xBF, 0x99, 0x60, 0x55, 0xEC, 0xB9, 0xFC, 0xD6, 0xFA, 0x74, 0xB7, 0x39, 0x09, 0x8C, 0x53, 0x18, 0x0E, 0x48, 0x05, 0x6A, 0x78, 0xBB, 0xBF, 0xD3, 0x79, 0x4B, 0x80, 0x68, 0x40, 0x79, 0x25, 0x34, 0x40, 0x0A, 0xB0, 0xE2, 0xF5, 0x98, 0x46, 0x7B, 0x52, 0x94, 0x17, 0x3C, 0x3C, 0x09, 0x8D, 0xB6, 0x1D, 0x8C, 0x05, 0x5B, 0x7D, 0x1B, 0x56, 0x6F, 0x74, 0xD3, 0xF3, 0x5A, 0xAB, 0x79, 0x5C, 0x82, 0x4D, 0x2B, 0x0B, 0xCC, 0x3E, 0x9E, 0xB0, 0xF3, 0x79, 0x81, 0x40, 0x1B, 0x7E, 0xF6, 0x66, 0x7B, 0x30, 0xF7, 0x23, 0x77, 0xFD, 0x8E, 0x47, 0x02, 0xB1, 0x1E, 0xAD, 0xBA, 0x8D, 0xDD, 0x2C, 0xBC, 0x17, 0x07, 0x50, 0x5B, 0x04, 0x50, 0xBE, 0xB3, 0x36, 0x80, 0x21, 0x7A, 0x31, 0xDC, 0x57, 0x17, 0x71, 0xBB, 0xB1, 0x4F, 0xFF, 0xD7, 0x25, 0x34, 0x3F, 0x97, 0xD0, 0x7C, 0xA7, 0x2B, 0x56, 0x5F, 0x5A, 0x6D, 0xBE, 0x56, 0xBB, 0x87, 0x1A, 0xB7, 0xB0, 0xF8, 0x59, 0xAD, 0x4D, 0x0B, 0x3B, 0x20, 0x14, 0x9E, 0xA2, 0xBF, 0xFD, 0x8C, 0x8D, 0xE5, 0x29, 0xBD, 0x76, 0xCA, 0x62, 0x09, 0x0A, 0xC0, 0xA3, 0x46, 0xE7, 0xFE, 0xAC, 0x29, 0xA6, 0xCC, 0xE2, 0xF6, 0x2B, 0xF8, 0xCB, 0xBF, 0x9B, 0x17, 0x47, 0x9A, 0x64, 0xEC, 0xFF, 0xB1, 0x5A, 0x02, 0x15, 0xF7, 0x5A, 0x37, 0xFD, 0xB1, 0x93, 0x2E, 0x7C, 0x51, 0xF7, 0xE9, 0x4B, 0x14, 0x88, 0x06, 0x3C, 0x3F, 0x61, 0x29, 0x03, 0xEC, 0x00, 0x71, 0xBE, 0x87, 0xDC, 0x3A, 0xB8, 0x50, 0x69, 0xFD, 0x14, 0x96, 0x33, 0x06, 0x9D, 0xB1, 0x86, 0xAB, 0x1B, 0xB5, 0x23, 0x64, 0xAF, 0x30, 0x45, 0x55, 0xAE, 0xBB, 0xC8, 0xF8, 0x7C, 0xB6, 0xD0, 0xEA, 0x47, 0xA1, 0x84, 0x82, 0x23, 0x40, 0x51, 0x69, 0x84, 0x9A, 0xAC, 0x97, 0x80, 0x7C, 0xEC, 0x3C, 0xD8, 0x8E, 0x8C, 0x8F, 0x2F, 0x70, 0xFB, 0xAD, 0xF3, 0x18, 0x92, 0xBB, 0x46, 0xC7, 0xE3, 0x9C, 0x78, 0x8E, 0xEA, 0x72, 0xDB, 0xA2, 0x94, 0x27, 0xBA, 0xFD, 0xA7, 0x5B, 0x54, 0x33, 0x80, 0x01, 0x88, 0x01, 0xAA, 0x40, 0xC6, 0x5D, 0x5E, 0xD9, 0x03, 0x54, 0xDE, 0x5B, 0x68, 0x0F, 0x10, 0x8F, 0x11, 0xF0, 0x33, 0x00, 0x56, 0x93, 0xBF, 0x2D, 0x74, 0xB0, 0xAE, 0xBC, 0x07, 0x0F, 0xF7, 0xC1, 0xC0, 0x1D, 0xDB, 0xBD, 0x0B, 0x63, 0x4D, 0xA6, 0x78, 0x25, 0xF8, 0xCC, 0x50, 0x9E, 0xB0, 0x92, 0xD7, 0xFD, 0xA7, 0x57, 0xF8, 0xFA, 0x92, 0xD9, 0xE2, 0xCD, 0xEF, 0xB1, 0x46, 0xD9, 0x09, 0x8B, 0xCB, 0x73, 0x56, 0xF1, 0x8E, 0x58, 0x7F, 0xF2, 0xDC, 0xCC, 0xEF, 0xCB, 0x80, 0xFA, 0x8E, 0xAE, 0x06, 0x62, 0x00, 0x9E, 0x67, 0x43, 0x81, 0x16, 0xA0, 0xE6, 0x8B, 0xCF, 0x71, 0x2D, 0xEE, 0xB6, 0xE7, 0xB2, 0x38, 0xCE, 0x87, 0x80, 0x7D, 0x6E, 0x60, 0xCF, 0x11, 0x5B, 0x1E, 0xAB, 0xE9, 0x9F, 0xD5, 0x9A, 0xA7, 0x8A, 0xEF, 0xD5, 0xE0, 0x8C, 0xE4, 0x9E, 0xEF, 0x0C, 0x06, 0x29, 0x5C, 0xA8, 0x68, 0xB5, 0x38, 0x57, 0xF9, 0x4A, 0xB2, 0x59, 0x41, 0x3D, 0xED, 0x03, 0x25, 0x80, 0x52, 0xBA, 0xDA, 0x60, 0xBC, 0x8A, 0x5D, 0x5E, 0x85, 0x3A, 0xE7, 0xD7, 0x91, 0xD7, 0x95, 0x97, 0xD9, 0xFB, 0x90, 0xAB, 0xFC, 0x16, 0x49, 0xB1, 0x75, 0x40, 0xD6, 0x8D, 0xDC, 0xBA, 0x9F, 0x16, 0x7D, 0x3E, 0x5E, 0xB5, 0x5C, 0x04, 0x71, 0xFF, 0xCC, 0x69, 0x2E, 0xFB, 0xAF, 0xC0, 0xB1, 0xDD, 0xF5, 0x84, 0xA6, 0x1F, 0xE7, 0xDA, 0x9F, 0xD5, 0x0C, 0xEA, 0xD5, 0x1D, 0xBF, 0x5A, 0xBC, 0xA3, 0xDF, 0x0B, 0x15, 0xCF, 0x50, 0x18, 0xA3, 0xF4, 0x0A, 0x8F, 0x25, 0xE5, 0xBC, 0x79, 0x1B, 0xBD, 0xCE, 0x1D, 0xD6, 0x6C, 0xE6, 0x4F, 0xDD, 0xFB, 0x45, 0xF8, 0x3A, 0xD7, 0x92, 0x11, 0x11, 0xB6, 0x18, 0xA4, 0xE7, 0x9F, 0x9E, 0x1A, 0xD8, 0x4E, 0x1B, 0x63, 0xFC, 0x71, 0x9F, 0xDC, 0xA1, 0xF4, 0x69, 0xC0, 0xE3, 0x76, 0xB6, 0x96, 0xBD, 0x93, 0xB7, 0x78, 0x2F, 0x39, 0xCF, 0x79, 0x65, 0xD8, 0xC2, 0xAB, 0x81, 0xE1, 0x6A, 0x7A, 0x80, 0xA2, 0x33, 0x8F, 0x85, 0x80, 0x06, 0x70, 0xD3, 0x4A, 0x07, 0x4E, 0xE1, 0xCD, 0x74, 0xA0, 0xF7, 0xE1, 0x28, 0x8D, 0xE6, 0xBF, 0x2B, 0x81, 0x37, 0xD4, 0x48, 0x9F, 0x04, 0xE6, 0xDD, 0xD7, 0x66, 0x12, 0x3D, 0x87, 0xE7, 0xE7, 0x91, 0x9C, 0xA8, 0x86, 0x27, 0xFE, 0xD4, 0x5D, 0xF3, 0x13, 0x1C, 0x6A, 0xF9, 0xB9, 0x85, 0x16, 0xC5, 0x8E, 0x1A, 0x48, 0x9E, 0x78, 0x65, 0x67, 0xED, 0x1A, 0x3F, 0xCF, 0xEB, 0x2C, 0xB3, 0xC5, 0xBA, 0xDC, 0x18, 0x5F, 0x63, 0xA7, 0xDF, 0xFC, 0xCB, 0x6E, 0x9E, 0x3B, 0xEC, 0xD9, 0x72, 0x27, 0xD7, 0x07, 0x07, 0x3A, 0xAB, 0x9B, 0x19, 0x6F, 0x2F, 0xA0, 0x12, 0x98, 0x78, 0x3A, 0xBD, 0x00, 0x4F, 0x7C, 0xE6, 0x00, 0x55, 0x40, 0x2E, 0x2C, 0x98, 0xBC, 0x09, 0x84, 0xDE, 0x32, 0x36, 0xE9, 0xB4, 0x5A, 0xFC, 0xEB, 0x42, 0xDB, 0xB7, 0xF9, 0x0D, 0xF8, 0x7C, 0x67, 0xA6, 0x47, 0x3A, 0x4E, 0xFB, 0xE2, 0x88, 0xBE, 0x1F, 0xDB, 0xA3, 0x7C, 0xDE, 0x32, 0x00, 0x4A, 0xAB, 0xB1, 0xB4, 0x33, 0x3E, 0x2D, 0x40, 0x63, 0x00, 0xEA, 0x48, 0x30, 0xAC, 0x21, 0xB5, 0x5D, 0xB7, 0x18, 0xEE, 0x11, 0x7C, 0x27, 0x46, 0x2C, 0xD9, 0xF5, 0x86, 0x89, 0x1A, 0xD7, 0x3D, 0x5B, 0x1F, 0x57, 0x87, 0x39, 0xC0, 0x75, 0x61, 0xE2, 0x56, 0x1F, 0xD0, 0xA1, 0x5F, 0xF6, 0xA3, 0x37, 0xA0, 0x80, 0x2E, 0x6C, 0x51, 0x74, 0xB2, 0x05, 0x30, 0x07, 0xA8, 0x00, 0x58, 0x95, 0x3F, 0x8B, 0x98, 0x7B, 0x67, 0xC9, 0xBF, 0x2D, 0x34, 0x7F, 0x17, 0xA9, 0x08, 0xF9, 0xEF, 0x83, 0x07, 0x76, 0x1D, 0xFB, 0x59, 0xAD, 0x44, 0x37, 0x9B, 0x3F, 0xA8, 0xB2, 0xFC, 0x19, 0x6B, 0x7D, 0x2D, 0x6B, 0xBD, 0x7A, 0x78, 0xBE, 0x60, 0xA3, 0x6B, 0xEE, 0x09, 0x9B, 0xBB, 0xC6, 0xBE, 0xC7, 0xBC, 0x70, 0x36, 0x77, 0x01, 0xA6, 0x32, 0x3F, 0x57, 0xA7, 0x58, 0x73, 0xC9, 0x13, 0x35, 0x5C, 0x08, 0x90, 0x8B, 0xE2, 0x2D, 0xC9, 0xF6, 0xF7, 0x78, 0xEF, 0xDC, 0x21, 0x77, 0x0E, 0x10, 0x02, 0xD4, 0x01, 0x9A, 0x05, 0xF5, 0xF6, 0xEC, 0xD5, 0x40, 0x2A, 0x10, 0xAF, 0xFC, 0xC5, 0x3C, 0x5A, 0x40, 0xB2, 0x70, 0xFE, 0x82, 0x15, 0xAD, 0x56, 0x1F, 0x73, 0xD1, 0xB1, 0x33, 0x57, 0xA5, 0xC1, 0xB1, 0x59, 0x91, 0x9B, 0x46, 0x94, 0xE9, 0xF8, 0x95, 0x80, 0x4B, 0xA3, 0x25, 0xB5, 0xCE, 0x19, 0x05, 0x0C, 0x56, 0x4D, 0xFB, 0xA6, 0xB4, 0xB3, 0x45, 0xBF, 0x7F, 0x2A, 0x13, 0x9B, 0x5E, 0xF0, 0xBD, 0x3C, 0xF8, 0x53, 0x19, 0xFD, 0x24, 0x54, 0x7B, 0xEC, 0x55, 0xA2, 0x36, 0x4E, 0xC3, 0xAB, 0xD6, 0x3C, 0x53, 0x79, 0xEC, 0x4F, 0x7B, 0x26, 0x1E, 0xE9, 0xCD, 0x7C, 0x3A, 0x64, 0x02, 0xA6, 0x80, 0x18, 0x70, 0x72, 0x31, 0xFF, 0x15, 0x68, 0xB1, 0xCF, 0x19, 0x77, 0xFE, 0x9F, 0x40, 0x4B, 0x3C, 0x43, 0xAD, 0xAF, 0xA6, 0x2B, 0xED, 0xB2, 0x0A, 0x0E, 0xBF, 0xD3, 0x9A, 0xF8, 0x68, 0xE2, 0x1F, 0x4B, 0x64, 0x17, 0x49, 0x44, 0xF5, 0x54, 0x94, 0xBD, 0x91, 0xAE, 0xA0, 0x9E, 0x0D, 0x67, 0xC3, 0x15, 0x9E, 0x32, 0x00, 0x5D, 0xBC, 0x6E, 0xE9, 0x45, 0x4D, 0x18, 0xA1, 0x09, 0xF6, 0x3C, 0xDE, 0x5B, 0x2B, 0xC5, 0xC1, 0xD8, 0xE4, 0xDE, 0xE7, 0x95, 0x7A, 0x94, 0x47, 0x67, 0xBE, 0x76, 0xAC, 0xE8, 0xBB, 0xE4, 0xF9, 0x63, 0x35, 0x91, 0x5B, 0x89, 0x46, 0xE4, 0x73, 0x67, 0x97, 0x85, 0xDF, 0x11, 0xAC, 0x1E, 0xA6, 0x42, 0x02, 0x52, 0x1F, 0xE7, 0x9A, 0x01, 0x12, 0xB7, 0xE7, 0x57, 0xF5, 0xB1, 0xDA, 0xDC, 0x43, 0x8D, 0x5E, 0x1E, 0x89, 0x2B, 0x31, 0xD2, 0x43, 0x77, 0x11, 0x6F, 0x88, 0x49, 0x55, 0xBC, 0xD3, 0x45, 0x04, 0xA0, 0x83, 0x05, 0x13, 0x4B, 0x63, 0xF3, 0x8D, 0x37, 0x2C, 0xEB, 0xF9, 0xB4, 0x51, 0x2B, 0x67, 0xF1, 0x0D, 0xA0, 0x03, 0x9C, 0x04, 0x5A, 0x6F, 0x55, 0x50, 0xB7, 0xBF, 0x46, 0xD6, 0xF6, 0xD7, 0x09, 0x23, 0x98, 0x0D, 0xCE, 0x74, 0xB5, 0x37, 0x61, 0x23, 0x9E, 0xEF, 0xDE, 0x72, 0xFB, 0x61, 0x5D, 0xBF, 0x79, 0x91, 0x37, 0xBE, 0xA1, 0xA7, 0x54, 0xC0, 0xFB, 0x36, 0x5D, 0x36, 0x60, 0x8B, 0xE8, 0x6F, 0x3E, 0x4C, 0x9F, 0xDF, 0x1E, 0x30, 0xE5, 0x9B, 0x0C, 0x90, 0x4F, 0xCA, 0x04, 0xFA, 0x66, 0x27, 0x36, 0xA2, 0xC9, 0x2D, 0x5F, 0x72, 0xF8, 0x27, 0x36, 0x7C, 0xDC, 0xDF, 0x84, 0x98, 0xA7, 0xE6, 0xDF, 0x98, 0xBC, 0x32, 0xAF, 0xA0, 0x60, 0x3F, 0x41, 0xA7, 0xA0, 0x00, 0x72, 0x03, 0x47, 0x6F, 0xBD, 0x3C, 0xDB, 0x87, 0x96, 0x40, 0xF5, 0xEB, 0x05, 0x66, 0xFB, 0x91, 0x5A, 0x6F, 0x39, 0x7C, 0x89, 0x4F, 0xB3, 0x8D, 0xDC, 0xAF, 0x16, 0x0F, 0x6C, 0x80, 0x13, 0xF7, 0xF0, 0x4B, 0x5B, 0xC8, 0x22, 0x80, 0xD9, 0x37, 0x53, 0x6F, 0x7D, 0xDE, 0x51, 0x20, 0x0D, 0xA0, 0x97, 0x92, 0xB7, 0x63, 0xBE, 0xD2, 0xFD, 0x58, 0x4D, 0xFE, 0x35, 0x6A, 0x61, 0x71, 0x40, 0x11, 0x5D, 0xBF, 0x60, 0x5D, 0x31, 0xBD, 0x4C, 0xC5, 0x4A, 0xA5, 0xBE, 0xB2, 0x65, 0xFA, 0x1E, 0xC8, 0x4F, 0x01, 0x94, 0x90, 0x6E, 0x8A, 0x37, 0x3E, 0xA5, 0x4A, 0xB5, 0xD5, 0x21, 0x3B, 0xB6, 0x26, 0x01, 0xD6, 0x8A, 0x50, 0x4E, 0x9B, 0x83, 0xAA, 0x04, 0xF0, 0xF3, 0x0A, 0x90, 0x08, 0x05, 0x94, 0x36, 0xB2, 0x57, 0x6B, 0x4F, 0x1E, 0x02, 0xB0, 0xB7, 0x3E, 0x5D, 0x8E, 0xE7, 0x49, 0x93, 0x90, 0xBE, 0xAB, 0xC2, 0x55, 0x81, 0xD3, 0x0B, 0x5B, 0x14, 0xE0, 0x75, 0x77, 0x86, 0xCC, 0x01, 0xC2, 0x01, 0x95, 0xCF, 0x7F, 0xA5, 0x81, 0xA0, 0xDA, 0x78, 0x3C, 0x36, 0xE3, 0xAD, 0x60, 0xA7, 0x42, 0xE5, 0xCA, 0x2C, 0x5E, 0x5E, 0x49, 0x95, 0x9A, 0x8D, 0x08, 0x0E, 0x46, 0x1A, 0x6C, 0x76, 0xCE, 0x37, 0x5F, 0x2D, 0x78, 0x54, 0xE3, 0xF4, 0xAE, 0xAB, 0x6B, 0xEB, 0xFC, 0xF5, 0x2D, 0xA2, 0x63, 0x6D, 0x17, 0x33, 0x46, 0x96, 0x2D, 0x01, 0xF1, 0x5B, 0x8B, 0xF1, 0x5C, 0xDA, 0xDC, 0x74, 0x6D, 0xC5, 0x93, 0xB6, 0x10, 0x82, 0xDD, 0xFF, 0x93, 0xE5, 0xE7, 0x9F, 0x34, 0xBD, 0x76, 0x20, 0x04, 0xB0, 0x5A, 0xD8, 0x22, 0x80, 0x92, 0xFB, 0xF7, 0xBA, 0xEE, 0xA1, 0x69, 0x7D, 0xEF, 0x27, 0xA1, 0xF7, 0x2F, 0x64, 0x3D, 0x56, 0xB3, 0xAB, 0x74, 0xD1, 0xAA, 0x91, 0x73, 0x67, 0x8A, 0x1B, 0x4A, 0xEC, 0xFC, 0x3C, 0x18, 0x85, 0x15, 0xB2, 0x9A, 0x9C, 0xC5, 0xA3, 0xD9, 0x65, 0x34, 0xA7, 0x04, 0xC0, 0x93, 0xE4, 0x17, 0x7B, 0x2B, 0xA0, 0xFA, 0x14, 0xAB, 0x27, 0x1A, 0x48, 0x6A, 0xA6, 0x06, 0xE0, 0xF6, 0x7E, 0xDA, 0x3A, 0x69, 0x63, 0x47, 0x15, 0x7D, 0x0A, 0x33, 0xE2, 0x87, 0xB3, 0x1E, 0x73, 0x07, 0xE6, 0xA3, 0xFD, 0xE1, 0x7F, 0xBE, 0xD8, 0x4F, 0x81, 0x16, 0x3F, 0x49, 0x2C, 0x64, 0xF1, 0x49, 0x43, 0x96, 0xFC, 0xAF, 0x45, 0x8D, 0x2E, 0xA2, 0x85, 0x05, 0x10, 0xF9, 0x5D, 0xD4, 0xDA, 0xFF, 0x25, 0x1A, 0x30, 0x5E, 0x97, 0xA7, 0xD7, 0xB1, 0x06, 0x13, 0x86, 0x50, 0xF7, 0x15, 0xC9, 0xFE, 0x07, 0x06, 0x65, 0x85, 0x94, 0x02, 0x3D, 0xEF, 0x19, 0xC7, 0x0C, 0x88, 0x3D, 0x64, 0xE7, 0x56, 0xD4, 0x27, 0xCA, 0x62, 0x37, 0x61, 0x09, 0x9F, 0xF2, 0x6C, 0x8D, 0x41, 0x2E, 0x1C, 0x0F, 0xD9, 0xA6, 0xCE, 0x74, 0xAB, 0xA0, 0x98, 0xC9, 0xCB, 0x12, 0xB9, 0x35, 0x32, 0x75, 0x4F, 0x64, 0x0B, 0x52, 0xD9, 0x54, 0x8A, 0x8A, 0x01, 0xCD, 0x68, 0xD7, 0x00, 0x1A, 0xC0, 0xD1, 0xF5, 0x65, 0xC6, 0x62, 0x7F, 0xE6, 0xEC, 0xE0, 0x55, 0x40, 0x0D, 0x90, 0x01, 0x28, 0xF3, 0x8F, 0x0E, 0xA0, 0x09, 0x84, 0xEC, 0x2B, 0x8F, 0xCD, 0x02, 0x05, 0xC6, 0x19, 0xEB, 0x30, 0x19, 0x6C, 0x9E, 0x11, 0xD8, 0x39, 0x7A, 0x30, 0xFA, 0x76, 0x84, 0xD5, 0x71, 0x24, 0xB1, 0xBF, 0xC9, 0x1C, 0x2C, 0xD2, 0xC6, 0x5E, 0x7A, 0x79, 0x70, 0xD7, 0xFB, 0x68, 0xF5, 0x28, 0xAC, 0x0C, 0x2B, 0x58, 0x03, 0xA8, 0x02, 0xB4, 0xDE, 0xFE, 0xA6, 0xFE, 0xF4, 0x26, 0x7A, 0xC4, 0x6A, 0x28, 0x9B, 0xB9, 0x15, 0x88, 0xC6, 0xB1, 0x68, 0xEF, 0xB0, 0x93, 0x8D, 0xC2, 0xD7, 0xE3, 0xA9, 0xB3, 0xDC, 0x09, 0x2C, 0x80, 0x1D, 0x5E, 0x15, 0x81, 0x16, 0xA0, 0x1A, 0xE8, 0xDC, 0x57, 0x64, 0xDD, 0xB3, 0x8B, 0x18, 0xC0, 0xEB, 0x53, 0x0C, 0xAE, 0x80, 0x1A, 0xE0, 0xBE, 0xAF, 0x0C, 0x8D, 0x96, 0x68, 0x58, 0xF6, 0x9C, 0x31, 0xE8, 0x07, 0x2E, 0xF8, 0x37, 0xD3, 0x10, 0x2F, 0xB1, 0x46, 0x8A, 0x68, 0x0E, 0xD4, 0x53, 0x47, 0xAE, 0x24, 0x3F, 0x03, 0xEA, 0x3A, 0x7D, 0xEB, 0xDB, 0x7F, 0xF3, 0xC0, 0x12, 0xB5, 0x2B, 0xFF, 0xD8, 0x56, 0x31, 0x25, 0x70, 0x76, 0xD4, 0xD6, 0xE0, 0x53, 0xC9, 0xAD, 0xBA, 0xD2, 0x8A, 0x9F, 0xC5, 0x26, 0xA1, 0xE6, 0xCE, 0x6D, 0x5E, 0x32, 0x98, 0xC7, 0x20, 0xB0, 0xC4, 0x42, 0x9F, 0x64, 0x8E, 0x23, 0x3C, 0xE6, 0x5F, 0xCB, 0xBA, 0x19, 0xA0, 0xB1, 0x18, 0x20, 0x8B, 0x97, 0xFB, 0x45, 0x07, 0xC0, 0x87, 0x56, 0xAC, 0xAC, 0xFC, 0xC1, 0x07, 0x48, 0x4E, 0xA4, 0x0C, 0xDA, 0xAC, 0xFE, 0xCD, 0xCF, 0xCB, 0xB9, 0x2D, 0xDF, 0x76, 0xC7, 0x4F, 0x2D, 0x2C, 0x65, 0xA6, 0x7B, 0x0D, 0xB7, 0x9F, 0x41, 0x60, 0xC1, 0xC4, 0x9B, 0x14, 0xBC, 0x45, 0xEF, 0xF1, 0xEB, 0xF2, 0x19, 0x3B, 0xF3, 0x05, 0x8B, 0x04, 0x15, 0x2B, 0x90, 0xAE, 0x5D, 0x40, 0x24, 0x1E, 0xBA, 0xEF, 0xC9, 0x7E, 0xBD, 0xF5, 0x93, 0x40, 0x1A, 0x30, 0x87, 0xD8, 0x7F, 0xF2, 0x2B, 0x66, 0xBA, 0xC7, 0xBC, 0x7E, 0xDA, 0x3E, 0xE6, 0xC7, 0x2F, 0xC9, 0x25, 0x4D, 0x74, 0x11, 0xC0, 0x21, 0xCE, 0x07, 0x09, 0xD8, 0x62, 0x7C, 0x77, 0x13, 0xBD, 0x43, 0xD3, 0x13, 0x40, 0x24, 0xA0, 0x05, 0x78, 0xED, 0x2B, 0x7F, 0xD3, 0x93, 0x37, 0x82, 0x55, 0x54, 0xD0, 0x59, 0xE5, 0xE2, 0x78, 0xFD, 0x1D, 0xA7, 0x2D, 0x7F, 0x8E, 0x4C, 0x1D, 0x81, 0xFF, 0x56, 0xE8, 0xB7, 0xFD, 0x24, 0x29, 0xB8, 0xEC, 0xBB, 0xC2, 0xE8, 0x40, 0xBE, 0x9D, 0xB2, 0x30, 0x07, 0xAF, 0x84, 0xB5, 0xA1, 0xDE, 0xC1, 0x5E, 0xE0, 0x9D, 0x77, 0xFC, 0x02, 0x54, 0x1E, 0xA7, 0xF9, 0xB3, 0xE6, 0x8B, 0xC0, 0x5C, 0xF4, 0x5B, 0xE4, 0x9F, 0xB8, 0x64, 0xDC, 0x67, 0xCF, 0x53, 0x80, 0x3A, 0x20, 0xF3, 0x89, 0xBA, 0xDB, 0xE2, 0x2C, 0xE2, 0xBF, 0x6E, 0x04, 0x72, 0xE7, 0x89, 0xF4, 0xC2, 0x03, 0x10, 0x07, 0x8C, 0x4E, 0x01, 0x7B, 0xAC, 0xC6, 0x1B, 0xC1, 0x16, 0xC4, 0x07, 0xF2, 0xAB, 0xEA, 0xE4, 0x6B, 0x35, 0x39, 0x5D, 0xFF, 0x90, 0xA8, 0x56, 0x2B, 0x52, 0x0A, 0xFF, 0x6D, 0xFF, 0x67, 0x6A, 0x47, 0x72, 0x41, 0xB1, 0x62, 0xB9, 0x09, 0xEC, 0xA4, 0x06, 0x08, 0xE5, 0x5B, 0x84, 0xC9, 0x99, 0xB0, 0x13, 0x11, 0x9C, 0x77, 0x09, 0x50, 0x4F, 0x82, 0x97, 0x7B, 0x46, 0xD5, 0xB2, 0x98, 0xD2, 0xCD, 0xC3, 0xC6, 0xA5, 0x34, 0x60, 0x09, 0xF8, 0xC2, 0x1C, 0x10, 0x01, 0x8E, 0x2D, 0xCE, 0xC2, 0x3E, 0x65, 0x3F, 0x0E, 0x78, 0xDD, 0x03, 0x90, 0xAF, 0x44, 0x02, 0xEA, 0xC0, 0xF3, 0x4A, 0xD0, 0x6A, 0x73, 0xAE, 0xE4, 0x48, 0x93, 0xC0, 0x22, 0x9C, 0x57, 0x55, 0xC6, 0x58, 0xC5, 0xCF, 0x78, 0xB2, 0x75, 0x54, 0x09, 0x8B, 0x06, 0x67, 0xA8, 0xF7, 0x65, 0x35, 0xDE, 0x65, 0x44, 0x9E, 0x75, 0x94, 0x7E, 0x6E, 0x89, 0x37, 0x65, 0xC1, 0x9F, 0xCE, 0x94, 0xCA, 0xC4, 0xB0, 0x06, 0x24, 0x80, 0xF2, 0x37, 0xCF, 0x6F, 0x85, 0x0B, 0x39, 0xC8, 0x8A, 0x05, 0xA3, 0xBC, 0x4A, 0xBF, 0x97, 0x49, 0xA0, 0xE3, 0x3F, 0xB2, 0xFE, 0xCE, 0x2C, 0x6C, 0xA1, 0x8B, 0x00, 0x5C, 0xFE, 0x2B, 0x8D, 0xA8, 0x00, 0xBE, 0x12, 0xFD, 0x89, 0x4B, 0x25, 0x5F, 0x79, 0xAC, 0x86, 0x3B, 0x41, 0x88, 0xA3, 0xF3, 0x5E, 0xFA, 0x36, 0xA6, 0xF3, 0xFB, 0x08, 0x32, 0xC6, 0x15, 0x17, 0x8B, 0x54, 0xDB, 0x25, 0xA4, 0xA3, 0xD7, 0x49, 0x0D, 0x21, 0x4C, 0x46, 0x05, 0xB6, 0xDA, 0x5A, 0x99, 0x5F, 0x05, 0x18, 0x2F, 0xE9, 0x87, 0x3A, 0xED, 0x7B, 0x84, 0xE5, 0xE4, 0x2D, 0x00, 0x07, 0x5A, 0xD8, 0x82, 0xE5, 0x18, 0x98, 0xB5, 0x49, 0x8D, 0x3A, 0xB6, 0xA3, 0xE5, 0x89, 0xFF, 0xF2, 0x78, 0x59, 0x7F, 0xD2, 0xD1, 0x16, 0x21, 0x8B, 0x4F, 0x23, 0x6A, 0x5E, 0x93, 0xC5, 0x00, 0x2E, 0xF8, 0xE6, 0x80, 0xEA, 0x9D, 0x65, 0x62, 0x0D, 0x1C, 0x05, 0x94, 0xAF, 0xC8, 0x63, 0x34, 0xFD, 0x85, 0xA5, 0xB4, 0x0C, 0x95, 0x9B, 0xA7, 0xE1, 0xB8, 0x8F, 0xDA, 0xDE, 0x6A, 0xB1, 0x4D, 0xD5, 0xB8, 0x8B, 0xC7, 0xF6, 0xCC, 0x4B, 0x6A, 0xC0, 0x5C, 0xB5, 0x8C, 0x54, 0x95, 0x4B, 0x26, 0xAC, 0x69, 0xBC, 0xDA, 0x98, 0xB9, 0xA0, 0x9C, 0x78, 0x3E, 0xF7, 0xA3, 0xB8, 0xA4, 0x68, 0xF7, 0x1F, 0xC4, 0xF6, 0x22, 0x6F, 0xE7, 0x51, 0x79, 0x9F, 0xDA, 0xC8, 0x3D, 0x9B, 0xB6, 0xEE, 0xD4, 0xD7, 0x77, 0x9B, 0xEB, 0xC7, 0xDB, 0xAD, 0x09, 0xC8, 0x00, 0xAC, 0xC7, 0xED, 0x58, 0xC8, 0xE2, 0x2C, 0xF6, 0x4D, 0x15, 0xA0, 0xD7, 0x30, 0x3A, 0x80, 0x14, 0x1F, 0x02, 0x6E, 0x80, 0x08, 0x60, 0xB2, 0x6F, 0xC6, 0x63, 0x34, 0xFB, 0x57, 0x3F, 0x33, 0xC5, 0x96, 0xA6, 0xE2, 0x7A, 0x3E, 0x52, 0xD7, 0x19, 0x44, 0xB2, 0x71, 0x62, 0x53, 0x5D, 0x89, 0xD4, 0xBE, 0xFA, 0x7F, 0x9E, 0x03, 0xD2, 0xDD, 0x1C, 0xF1, 0x8A, 0xDA, 0xDB, 0xFA, 0x81, 0x5C, 0x3F, 0xFA, 0xA0, 0xB2, 0xC1, 0xF6, 0x79, 0x1A, 0xF7, 0x4F, 0x03, 0x67, 0x0D, 0x5A, 0x4A, 0xE5, 0x42, 0x58, 0xF2, 0x29, 0x1F, 0x4A, 0xFA, 0x80, 0x29, 0x59, 0xBA, 0xBE, 0xF2, 0x62, 0x27, 0x5F, 0x40, 0xF8, 0xE9, 0x49, 0xA6, 0x04, 0xF4, 0x00, 0xA6, 0x8B, 0x04, 0x3C, 0x80, 0x11, 0xBA, 0x90, 0xF7, 0x38, 0xE6, 0xC0, 0x99, 0x7D, 0xE8, 0x80, 0x14, 0xDE, 0xAC, 0x00, 0xA6, 0xF6, 0x15, 0xA5, 0xD1, 0xD0, 0x0E, 0xA9, 0x54, 0x31, 0x23, 0xA2, 0xE0, 0x7C, 0x9D, 0xD8, 0xB4, 0x10, 0xC6, 0xE5, 0x1C, 0x67, 0x08, 0x2B, 0x88, 0xF9, 0xE6, 0x3D, 0xD2, 0x9E, 0xDB, 0xA7, 0xBE, 0xCE, 0x63, 0x7E, 0xC1, 0x67, 0x34, 0x31, 0x29, 0xF7, 0xFC, 0xD5, 0xD9, 0xE9, 0x5A, 0x8B, 0xD2, 0xF8, 0x0D, 0x50, 0x5F, 0xD6, 0x03, 0x08, 0xFD, 0xEB, 0xE2, 0xA4, 0xF3, 0x14, 0x54, 0x65, 0xB2, 0x65, 0xC6, 0x0E, 0xFB, 0xDC, 0x25, 0xB1, 0x78, 0x75, 0x07, 0xA4, 0xEF, 0xBC, 0x8C, 0xAE, 0x85, 0x7E, 0xC0, 0xF4, 0x0C, 0x26, 0x88, 0x05, 0x10, 0x06, 0xF8, 0xF3, 0x90, 0x9D, 0x67, 0x00, 0x49, 0xC0, 0x1C, 0x3F, 0xB3, 0xA2, 0xD1, 0xE2, 0x57, 0x27, 0xAD, 0xD2, 0x1B, 0x60, 0x98, 0xF7, 0xB2, 0xEE, 0x5D, 0x89, 0xF9, 0xB1, 0x7E, 0x1C, 0xC4, 0x0B, 0x74, 0x0B, 0x6B, 0xD9, 0x71, 0x80, 0xEA, 0x07, 0x94, 0xEC, 0xE6, 0x82, 0x4C, 0xF9, 0x31, 0x36, 0x6A, 0x42, 0x1E, 0x11, 0x4A, 0xD3, 0x03, 0x90, 0xDA, 0x87, 0x2C, 0x31, 0xEE, 0xA7, 0x9D, 0xFA, 0xA3, 0x4C, 0xE5, 0xBB, 0x7F, 0xB8, 0xAC, 0x05, 0x13, 0x56, 0xA2, 0xA4, 0xB9, 0xE6, 0x73, 0x83, 0xA2, 0x9C, 0x29, 0x75, 0xD5, 0x72, 0x00, 0xB7, 0xBB, 0x8F, 0x6F, 0xCF, 0x22, 0x6E, 0x4C, 0xEE, 0x9B, 0xC2, 0x90, 0x05, 0x90, 0x0E, 0x44, 0x00, 0x6A, 0x78, 0xA5, 0x1C, 0xB0, 0x02, 0x9E, 0x64, 0x31, 0xA1, 0xCD, 0x12, 0xA2, 0x02, 0x23, 0x1B, 0xD1, 0x12, 0xB8, 0x93, 0x65, 0x3D, 0x8D, 0x11, 0x08, 0x25, 0x59, 0xC1, 0xE7, 0x2A, 0xF0, 0x0D, 0xB9, 0xD8, 0xEF, 0x67, 0x73, 0x17, 0xB1, 0x50, 0x97, 0xAF, 0x58, 0x87, 0x11, 0xF5, 0x0A, 0xD7, 0xEC, 0x41, 0x36, 0xE8, 0xE8, 0x66, 0xB9, 0x3B, 0xC2, 0x46, 0x2C, 0xF2, 0x84, 0xA3, 0xD2, 0x81, 0x56, 0x80, 0x25, 0x2D, 0x23, 0xAF, 0xF6, 0xB9, 0xC2, 0x20, 0x5A, 0x7B, 0x8B, 0xD7, 0xC7, 0x27, 0xD9, 0xC9, 0x34, 0x4C, 0x7C, 0xD2, 0x04, 0xDC, 0x17, 0x01, 0x84, 0x2F, 0x06, 0xC0, 0x84, 0x3F, 0xCF, 0x21, 0xE8, 0x14, 0x10, 0x03, 0x78, 0x02, 0xF2, 0xD4, 0x04, 0xF2, 0x4D, 0xC0, 0x63, 0xDF, 0x0C, 0xDA, 0xAC, 0xF0, 0xC7, 0xCF, 0x60, 0x19, 0xBF, 0x6A, 0x67, 0x01, 0x48, 0xD4, 0x24, 0xF2, 0xE7, 0x35, 0x03, 0x5A, 0x04, 0x5A, 0xFF, 0x94, 0x87, 0xFF, 0x27, 0x71, 0xEC, 0x30, 0x93, 0x1C, 0x97, 0xC7, 0xCD, 0x4C, 0xCA, 0x0D, 0xA8, 0xD7, 0xFE, 0xA3, 0xF6, 0x26, 0xB0, 0xD7, 0x96, 0xB0, 0xD4, 0xB6, 0xC4, 0xAA, 0x5D, 0x59, 0x6A, 0x43, 0x05, 0x09, 0x4F, 0xEC, 0x36, 0x94, 0x7F, 0x75, 0x07, 0x75, 0x97, 0xC5, 0x78, 0x16, 0x42, 0x66, 0x8E, 0x9F, 0xDD, 0x2F, 0x98, 0x7C, 0x94, 0x0D, 0x84, 0x01, 0x16, 0x80, 0xE4, 0xC2, 0x17, 0x0A, 0xE8, 0x01, 0x4A, 0xF0, 0xEB, 0x6C, 0xFB, 0x73, 0xF6, 0xD3, 0x1C, 0x80, 0xFF, 0x95, 0x71, 0x20, 0x0A, 0x28, 0x63, 0x11, 0x12, 0x6D, 0xD6, 0x90, 0x50, 0xD1, 0x7E, 0x4F, 0xB3, 0x2E, 0x63, 0x28, 0x1B, 0xEF, 0x59, 0xBD, 0xF6, 0x81, 0x7F, 0xA1, 0x75, 0x05, 0x64, 0x51, 0x68, 0x5C, 0xB0, 0x99, 0x0A, 0xC0, 0xFC, 0xFE, 0x11, 0xB6, 0x93, 0xB9, 0x9C, 0x8F, 0x85, 0x99, 0x9A, 0xEB, 0x15, 0xA3, 0xEE, 0x43, 0x50, 0x78, 0xAA, 0x1F, 0xD1, 0xDE, 0x4E, 0xC0, 0xD8, 0xE8, 0x95, 0x0D, 0x62, 0x1B, 0xC6, 0xE2, 0x8E, 0x62, 0x6C, 0x79, 0xF4, 0x89, 0x3D, 0xF3, 0x66, 0x56, 0xB5, 0xA3, 0x4E, 0x80, 0x63, 0xB7, 0x58, 0x9D, 0x19, 0xA0, 0x01, 0xD8, 0x01, 0x4A, 0xEF, 0x11, 0xD9, 0x05, 0xD4, 0xC2, 0x1B, 0x38, 0xE7, 0x9A, 0xB7, 0x4C, 0x10, 0x78, 0x6D, 0x36, 0x70, 0xBF, 0xF4, 0x15, 0xB4, 0x9B, 0x30, 0xE1, 0x27, 0x48, 0x8A, 0xB8, 0x63, 0x7D, 0x39, 0x5B, 0xD0, 0x8E, 0x4C, 0x22, 0x1A, 0xCB, 0x02, 0x60, 0x74, 0xFB, 0x69, 0x1E, 0xA0, 0xB3, 0xC6, 0x5A, 0xFD, 0xCF, 0x18, 0x54, 0x29, 0x9A, 0x02, 0xAE, 0xDB, 0x98, 0x7A, 0xA5, 0x3E, 0x27, 0x80, 0xDE, 0x87, 0x5A, 0xF8, 0xA4, 0xAB, 0x4F, 0x11, 0xB6, 0x1D, 0x25, 0xFB, 0x5D, 0xEB, 0xE8, 0x1F, 0xF2, 0xED, 0x51, 0xB4, 0xF7, 0x67, 0x85, 0x09, 0xAE, 0xDC, 0xE8, 0x2E, 0xC0, 0x3E, 0x9D, 0x69, 0x4E, 0x02, 0x12, 0x77, 0x2F, 0x08, 0x17, 0xA0, 0x0B, 0xA8, 0x04, 0x7C, 0x5F, 0x99, 0x04, 0x52, 0x80, 0xE6, 0x9B, 0x03, 0x9B, 0x15, 0x9D, 0xA9, 0xAF, 0x77, 0xFB, 0xC6, 0xAE, 0xD0, 0x3D, 0xAB, 0xF4, 0x93, 0x68, 0x0D, 0x9A, 0xC8, 0xBE, 0xAA, 0x3B, 0x3D, 0x0C, 0xA6, 0xE3, 0x06, 0x4F, 0x25, 0xED, 0xDA, 0xFD, 0xA8, 0xB7, 0x1A, 0xB6, 0x7F, 0xBF, 0x0E, 0xC4, 0x66, 0x2A, 0xF9, 0xFE, 0x6C, 0x7E, 0xD8, 0x2B, 0x41, 0xB3, 0xA7, 0xF7, 0xEA, 0x1C, 0xD7, 0x26, 0x64, 0xE5, 0x9E, 0x83, 0x53, 0x77, 0xC2, 0xE6, 0x53, 0xF9, 0xA8, 0x6B, 0x48, 0x5B, 0x7F, 0x52, 0x51, 0xBD, 0xBC, 0x01, 0xAA, 0x9E, 0xB7, 0x03, 0x95, 0x0B, 0x03, 0xD8, 0x3A, 0xCF, 0xA9, 0xFB, 0x54, 0x40, 0x19, 0x90, 0x09, 0xF8, 0x01, 0xCE, 0xBE, 0x59, 0xFB, 0x90, 0x52, 0x90, 0xA7, 0x69, 0x33, 0x81, 0x3C, 0xC1, 0xDB, 0x25, 0xEF, 0x2A, 0xCA, 0x13, 0x47, 0xD4, 0xB1, 0x07, 0x5A, 0x95, 0xE2, 0x2B, 0xC4, 0x06, 0x07, 0x64, 0xBE, 0x87, 0x0C, 0x64, 0x75, 0x33, 0xA0, 0xBF, 0x07, 0x89, 0x59, 0x75, 0xA4, 0xD9, 0x41, 0x94, 0x58, 0xB3, 0x72, 0x01, 0xBB, 0x50, 0xBA, 0xA6, 0x31, 0xB9, 0x72, 0xD3, 0x70, 0x73, 0x75, 0x2C, 0x53, 0x61, 0xF9, 0xA0, 0x28, 0x26, 0x0F, 0x76, 0xF5, 0xF4, 0xFB, 0xE1, 0xFF, 0x21, 0x73, 0xD5, 0x29, 0xA8, 0x29, 0xCF, 0xF6, 0x19, 0x7D, 0x37, 0x2E, 0x8B, 0x03, 0xF8, 0xC2, 0x0A, 0xF0, 0x01, 0xE6, 0xD3, 0x87, 0xEC, 0x30, 0x76, 0xD8, 0x40, 0x09, 0x60, 0x06, 0x9C, 0x02, 0x58, 0x88, 0xAA, 0x4A, 0x9B, 0xE9, 0xBF, 0x09, 0xC4, 0xEB, 0xA0, 0x8E, 0x5B, 0xEB, 0xA2, 0x16, 0x74, 0xE0, 0x8C, 0x46, 0x6E, 0x42, 0xE4, 0xA6, 0xBA, 0x3A, 0xC6, 0x52, 0x08, 0xEF, 0xE8, 0x77, 0x78, 0x5D, 0x29, 0x30, 0xE2, 0x3B, 0xE0, 0x28, 0x87, 0x29, 0x9F, 0x15, 0xC6, 0xB8, 0xED, 0xEB, 0x5B, 0xB1, 0xC9, 0xC3, 0xAA, 0xEE, 0x43, 0x66, 0x51, 0xEE, 0xD7, 0xA6, 0x94, 0x41, 0xAF, 0x57, 0x21, 0xFF, 0x02, 0x44, 0x4D, 0x77, 0xF6, 0xA7, 0xB8, 0xE2, 0x00, 0x3E, 0x40, 0x12, 0xB1, 0xB0, 0x85, 0x2F, 0x9A, 0x39, 0x53, 0x40, 0xFA, 0x1D, 0xBA, 0x1A, 0xE3, 0x43, 0x80, 0x57, 0xD8, 0xF9, 0xE4, 0x4D, 0xF6, 0x1C, 0x5A, 0xCD, 0x90, 0x2E, 0x34, 0xBD, 0x4A, 0x36, 0x06, 0x6B, 0xB7, 0xFC, 0x7E, 0xFD, 0xC0, 0x8D, 0x76, 0x44, 0x66, 0xBD, 0x69, 0x8D, 0x1B, 0x8C, 0x32, 0x30, 0xF0, 0xC9, 0x86, 0x64, 0x16, 0x45, 0xD8, 0x79, 0x53, 0x6E, 0xFA, 0x59, 0x58, 0x2B, 0x01, 0x8D, 0xD7, 0x7F, 0x96, 0x4F, 0x42, 0xAC, 0x3A, 0x2B, 0x3D, 0x81, 0xC9, 0x45, 0xC3, 0xA2, 0x7E, 0x27, 0xD9, 0x6A, 0xBC, 0x1D, 0xB3, 0xE3, 0x29, 0x05, 0x68, 0x7E, 0xED, 0x82, 0x61, 0x45, 0x80, 0xFE, 0xA1, 0xEE, 0xCC, 0xFA, 0xAB, 0xE1, 0xF6, 0x82, 0x4D, 0xF6, 0xE9, 0xA6, 0x3C, 0x72, 0xA7, 0xF7, 0x45, 0x02, 0xFC, 0xF5, 0x32, 0x60, 0x74, 0x5F, 0x89, 0xC7, 0x6A, 0x94, 0x1D, 0xC2, 0x72, 0xD2, 0xC7, 0x76, 0xD7, 0x8B, 0xD7, 0xC3, 0x71, 0x5C, 0x0B, 0x31, 0x7B, 0x73, 0xFC, 0x1F, 0x5A, 0x2F, 0x0F, 0x47, 0xD8, 0x5A, 0x8D, 0x51, 0x57, 0xBA, 0x49, 0x9B, 0x09, 0xEF, 0xC9, 0x9C, 0xA0, 0xFD, 0x64, 0x38, 0x88, 0xC3, 0x78, 0xF3, 0xFC, 0x19, 0x93, 0x40, 0x0E, 0x30, 0x4C, 0x9F, 0x38, 0xFC, 0x83, 0xEF, 0x44, 0xB5, 0x3A, 0x6F, 0x50, 0x48, 0x1F, 0xC8, 0x00, 0x66, 0x9F, 0xD4, 0x78, 0xFB, 0x04, 0xD6, 0x6D, 0xA1, 0xF7, 0xE0, 0xB4, 0xF3, 0x49, 0x8D, 0x0F, 0x40, 0x95, 0xA3, 0xEB, 0xA3, 0x38, 0xD1, 0x1F, 0xC5, 0x09, 0x7F, 0xAC, 0x16, 0xBF, 0x65, 0xD7, 0x4B, 0xA0, 0xEC, 0x1F, 0x81, 0xA1, 0xD2, 0x8E, 0xF6, 0x88, 0xE2, 0x70, 0x99, 0x56, 0xFD, 0xD0, 0x6C, 0x04, 0xED, 0xFA, 0x1F, 0x39, 0xA4, 0x0C, 0x0E, 0xE5, 0x30, 0x40, 0xCF, 0x8A, 0xBB, 0xDD, 0x90, 0x58, 0x5C, 0xAC, 0xD4, 0xC4, 0x61, 0x27, 0x9F, 0xB7, 0xDC, 0xFE, 0x39, 0x95, 0xF6, 0x5F, 0x2E, 0xF5, 0x3A, 0xF2, 0xE9, 0x4D, 0x13, 0xFF, 0xBB, 0x20, 0xCD, 0x33, 0x66, 0x28, 0x4B, 0x1F, 0x05, 0xB0, 0x04, 0xE6, 0xF1, 0x69, 0x27, 0x50, 0x8F, 0x80, 0x89, 0x03, 0x52, 0x80, 0x0E, 0x50, 0x72, 0x97, 0x39, 0x76, 0x00, 0x55, 0x80, 0x2F, 0xCE, 0xE3, 0xE1, 0x06, 0x3A, 0xF7, 0x4D, 0xA5, 0xD5, 0x10, 0x23, 0x48, 0x4D, 0x38, 0xF2, 0x1B, 0xEA, 0x42, 0x25, 0x89, 0x94, 0xD7, 0x98, 0x9F, 0x9F, 0x5C, 0x0E, 0xDA, 0xD6, 0x54, 0x6E, 0x23, 0x96, 0x18, 0xE6, 0x70, 0x7C, 0x8A, 0x57, 0xEC, 0x2D, 0x05, 0x63, 0xE0, 0x82, 0x95, 0x89, 0xAA, 0x8F, 0xF4, 0xC0, 0xCC, 0x3E, 0x64, 0x46, 0xE9, 0xDC, 0x85, 0xE5, 0xE2, 0x40, 0x31, 0xCB, 0xC5, 0xDF, 0x4B, 0x91, 0xEF, 0x04, 0xDF, 0xF5, 0x78, 0x1E, 0x27, 0xC5, 0xD3, 0x4E, 0xF5, 0x2C, 0x98, 0x5D, 0x9B, 0x40, 0xF9, 0x2D, 0x32, 0x21, 0xBA, 0x68, 0x40, 0x0B, 0xC8, 0xB8, 0x3D, 0x42, 0xD5, 0x40, 0x26, 0x60, 0x79, 0xFB, 0x87, 0xA2, 0x80, 0xE7, 0x95, 0xBF, 0x19, 0x5A, 0xBF, 0x63, 0xD1, 0xB8, 0xE0, 0xA4, 0x7D, 0x02, 0x51, 0x1E, 0xC5, 0xFA, 0x7F, 0x72, 0xAF, 0x72, 0x32, 0xEB, 0xD6, 0xEF, 0xED, 0x54, 0xA4, 0x97, 0x16, 0x69, 0x7D, 0xAA, 0xDA, 0x53, 0xCE, 0xDD, 0xD9, 0xA2, 0x9A, 0xCD, 0x5A, 0x16, 0xDC, 0xAF, 0x9C, 0x5D, 0x25, 0xEF, 0x83, 0xB7, 0x1B, 0x90, 0x5F, 0xFD, 0x93, 0xCD, 0x40, 0xD5, 0x1F, 0xE4, 0xA9, 0xE2, 0xAF, 0x79, 0xA3, 0x4B, 0xF0, 0x33, 0x02, 0x74, 0x4B, 0x04, 0xAB, 0xBC, 0x01, 0x6F, 0xA0, 0x1C, 0xE8, 0xFC, 0xC4, 0xF0, 0x18, 0xAE, 0xB3, 0x4F, 0x41, 0xC1, 0x00, 0x5A, 0xB7, 0x86, 0x80, 0x15, 0x10, 0xBE, 0xAF, 0x24, 0x8D, 0xD6, 0xBF, 0x03, 0xD8, 0x18, 0x86, 0x9A, 0xC7, 0xAC, 0xD7, 0xD9, 0xAF, 0xB4, 0x04, 0x89, 0xFC, 0xC1, 0x8F, 0x6D, 0x7D, 0xF5, 0xE0, 0x9E, 0xFE, 0x1F, 0x29, 0xA4, 0x74, 0x0C, 0xB1, 0x97, 0xC0, 0x79, 0x76, 0xF0, 0xD8, 0x2D, 0xBF, 0x2F, 0x97, 0x05, 0xB3, 0x37, 0x30, 0x07, 0xB7, 0x14, 0x17, 0x60, 0x77, 0x1F, 0x0A, 0xE8, 0x50, 0x8F, 0xDA, 0x58, 0x3F, 0x91, 0x77, 0x6D, 0xDA, 0x11, 0x8E, 0x91, 0xDD, 0x6B, 0xE9, 0x04, 0xDE, 0x57, 0x3A, 0xD7, 0xAE, 0x0C, 0xC2, 0x1D, 0xC0, 0x06, 0x08, 0xD6, 0xBB, 0xCD, 0x7D, 0x7B, 0x0F, 0x01, 0xAC, 0x81, 0xA7, 0xF6, 0xC4, 0xD6, 0xCA, 0x6C, 0x0D, 0x40, 0x2B, 0x3F, 0x46, 0x9B, 0x5F, 0x9A, 0xF2, 0xB0, 0x11, 0x02, 0x37, 0xC0, 0x51, 0xD4, 0xA7, 0xC6, 0x0F, 0x9D, 0xBB, 0xB8, 0x85, 0xD8, 0xA6, 0x34, 0xCA, 0xDD, 0x00, 0x7A, 0x3E, 0x91, 0x95, 0x62, 0x88, 0x9D, 0xC1, 0x3C, 0xB6, 0x7B, 0xD2, 0x01, 0x64, 0xCD, 0x15, 0x6C, 0x31, 0xD9, 0x30, 0x50, 0x3F, 0x5A, 0x62, 0x6B, 0xED, 0x5D, 0xEA, 0xE8, 0x75, 0xE4, 0xDF, 0x6D, 0xCD, 0x0E, 0x40, 0x57, 0x7A, 0x29, 0xCB, 0xC9, 0x42, 0x00, 0xA9, 0xFB, 0x53, 0x3A, 0x10, 0xB1, 0xA8, 0x1B, 0xA9, 0x77, 0x51, 0x72, 0x3E, 0x05, 0xF3, 0x77, 0x1B, 0xFE, 0x54, 0x40, 0xE2, 0x4D, 0xFB, 0x65, 0xC8, 0x28, 0xDF, 0x1D, 0x54, 0x70, 0x2E, 0x17, 0x11, 0x5C, 0x93, 0x76, 0x2F, 0xC8, 0x14, 0x94, 0x3F, 0xB8, 0xC0, 0x5C, 0x31, 0x38, 0xBE, 0x26, 0xFC, 0x44, 0xB2, 0x5A, 0xC1, 0xF2, 0x11, 0x58, 0xF6, 0x79, 0xF7, 0x78, 0xFD, 0xBB, 0xE1, 0xCC, 0x1E, 0x39, 0x85, 0x57, 0x61, 0xC5, 0x43, 0x9B, 0xB7, 0x21, 0x99, 0x71, 0xDD, 0x5B, 0x4B, 0xB2, 0xBB, 0x27, 0xB5, 0x48, 0x36, 0x6A, 0xCC, 0xE9, 0xC6, 0x96, 0x8D, 0xF3, 0x74, 0xDE, 0x4B, 0xFD, 0xF4, 0x24, 0xC9, 0xFB, 0x68, 0x31, 0xC3, 0x43, 0x1E, 0x60, 0x05, 0xB8, 0x01, 0xA1, 0xC0, 0x70, 0x35, 0xD3, 0x4F, 0x43, 0xCD, 0x93, 0x78, 0x78, 0xEE, 0x7C, 0x1A, 0xDE, 0xAB, 0x1F, 0xC7, 0xFF, 0x51, 0x1A, 0x4D, 0xE0, 0x61, 0xF0, 0xDC, 0xEE, 0x5D, 0x57, 0x1D, 0x63, 0x85, 0xEC, 0xEA, 0x50, 0xB3, 0x69, 0xCA, 0x81, 0xE3, 0xEF, 0xB6, 0xC7, 0xAB, 0xDB, 0x07, 0xC9, 0xBA, 0x70, 0xE6, 0x7C, 0x52, 0xEE, 0x32, 0x9E, 0xCE, 0x60, 0x63, 0x40, 0xB1, 0xE9, 0x66, 0xEE, 0x05, 0x72, 0xE7, 0xAE, 0x30, 0x3B, 0x86, 0x19, 0x7F, 0xB8, 0x39, 0x2E, 0x6C, 0x4D, 0x4F, 0x29, 0xEF, 0xDA, 0xDD, 0x6D, 0x3B, 0xFA, 0x3C, 0x0D, 0x1C, 0xD7, 0xEF, 0x20, 0x1C, 0x9A, 0xB2, 0xD0, 0xA7, 0xB0, 0x68, 0x84, 0xDB, 0x2F, 0xA0, 0x01, 0x58, 0x03, 0x6D, 0x6F, 0x94, 0x30, 0x9E, 0xE2, 0xC0, 0x31, 0x20, 0x15, 0x10, 0xC3, 0x9B, 0xD5, 0xC0, 0xD4, 0xBE, 0xE2, 0x34, 0x9A, 0x62, 0x35, 0xAB, 0xC1, 0x37, 0xA2, 0x41, 0xE5, 0x56, 0x28, 0xF5, 0x8E, 0x1F, 0xE2, 0x34, 0x06, 0x4C, 0xF9, 0xA5, 0x7A, 0xAB, 0x40, 0xFA, 0x25, 0x9F, 0x50, 0x8F, 0x36, 0x02, 0x95, 0x12, 0x22, 0x00, 0xB4, 0x6F, 0x9E, 0xC5, 0xDE, 0x85, 0x9F, 0x0E, 0xFB, 0xF6, 0xE9, 0xB1, 0x2C, 0x4F, 0x42, 0x9B, 0xD9, 0x5D, 0x9E, 0x6C, 0xB5, 0x33, 0x57, 0x5E, 0xE1, 0xFD, 0x7C, 0xEA, 0xBE, 0xE9, 0x25, 0xB3, 0x66, 0x31, 0x20, 0x85, 0x8E, 0xF9, 0xEF, 0x07, 0xB8, 0x03, 0xF8, 0x59, 0x3E, 0x71, 0x1F, 0x4D, 0xA0, 0x05, 0x28, 0x05, 0x7C, 0x97, 0x96, 0x6E, 0x20, 0x04, 0xE0, 0xCF, 0xBA, 0x68, 0xB3, 0x6D, 0xA8, 0x32, 0xBD, 0xFF, 0x2A, 0xF2, 0x0E, 0xB4, 0x88, 0xB2, 0xD5, 0xCC, 0xCB, 0x6D, 0xDA, 0x9B, 0xC8, 0xBB, 0xB0, 0xFC, 0xA7, 0x8F, 0x9E, 0xA6, 0x34, 0xD0, 0xB4, 0x35, 0xAF, 0x69, 0x03, 0x4F, 0x18, 0xCC, 0x13, 0xEB, 0xA4, 0x89, 0x57, 0x8A, 0xC8, 0x5F, 0x81, 0x51, 0xB6, 0x42, 0xC7, 0x1E, 0x81, 0x08, 0x3F, 0xE5, 0x38, 0x7D, 0x5D, 0x98, 0xFA, 0xE6, 0x72, 0xC4, 0xE3, 0xF4, 0x2A, 0x7E, 0x23, 0x87, 0x5D, 0x82, 0xD1, 0xE8, 0xB3, 0x56, 0x2A, 0x20, 0x02, 0xC8, 0x04, 0xAA, 0x80, 0x16, 0x60, 0xD6, 0x90, 0x56, 0xB7, 0xF3, 0xC3, 0x1B, 0xE0, 0x43, 0x39, 0x77, 0x33, 0x63, 0x0B, 0x80, 0xA6, 0xF3, 0xA4, 0xCD, 0x7C, 0xBB, 0x4A, 0x39, 0xA6, 0x8C, 0xCF, 0xFF, 0x8A, 0x0F, 0x4D, 0x16, 0x8A, 0x4E, 0x1A, 0xF3, 0x57, 0xEC, 0x16, 0x6C, 0xF2, 0x5B, 0xB8, 0xAF, 0xFB, 0xF0, 0xA4, 0xC1, 0x16, 0x4C, 0x30, 0x5D, 0x08, 0xC0, 0x0C, 0x3F, 0x9F, 0x75, 0x1C, 0x24, 0xEC, 0x72, 0x56, 0x26, 0xDB, 0xCF, 0xDB, 0x17, 0x37, 0xF0, 0x33, 0x93, 0xBF, 0xAE, 0xEA, 0xB3, 0x76, 0xC9, 0xF7, 0x30, 0x8C, 0x91, 0xBC, 0xFB, 0x39, 0xC0, 0xE3, 0x00, 0x5D, 0xD7, 0xF4, 0xE9, 0x9A, 0x02, 0x95, 0xC0, 0x38, 0xE3, 0xD4, 0x40, 0xFA, 0xBB, 0x80, 0xE2, 0xDF, 0x16, 0x7B, 0xD0, 0x00, 0xB1, 0x6F, 0x4E, 0x03, 0x11, 0x77, 0xD1, 0x52, 0x1B, 0x6D, 0x16, 0x68, 0x99, 0x9A, 0x83, 0x3F, 0x29, 0xEB, 0xBD, 0x40, 0x89, 0x74, 0xE0, 0x92, 0xBF, 0x6E, 0xB5, 0xF2, 0x80, 0xF7, 0x7E, 0xE8, 0x41, 0xFB, 0xC1, 0x0C, 0x18, 0x2E, 0x92, 0xB0, 0x19, 0x07, 0x11, 0xAE, 0xC2, 0x97, 0xBA, 0xBF, 0xCC, 0x7A, 0x63, 0xF7, 0x67, 0xCC, 0xB1, 0xC5, 0xA8, 0x63, 0x0F, 0x9A, 0xF5, 0x33, 0x7A, 0xEC, 0xA7, 0xB5, 0xB5, 0xF5, 0x7A, 0x2F, 0x7C, 0x3D, 0xDF, 0x02, 0x4B, 0xA0, 0xDE, 0x9E, 0x2B, 0x1F, 0xE0, 0xF2, 0x3E, 0xC4, 0xBF, 0x0A, 0x82, 0x3F, 0x06, 0x50, 0x7D, 0xFE, 0x2C, 0xB4, 0x81, 0x62, 0xF7, 0x75, 0x36, 0x40, 0x55, 0x7C, 0x9A, 0x45, 0xCA, 0xDD, 0xED, 0xBD, 0x9F, 0x56, 0xEE, 0xFB, 0x66, 0xD2, 0x66, 0x89, 0xB9, 0xD2, 0xB6, 0x1D, 0xB8, 0x13, 0x3D, 0xEC, 0x3E, 0x4D, 0xCC, 0x3A, 0x7A, 0xFF, 0x32, 0xDB, 0x06, 0xE9, 0x7A, 0x67, 0x29, 0x03, 0x3C, 0x2D, 0x0F, 0x5D, 0x83, 0xB2, 0xAE, 0x2C, 0xF6, 0xF0, 0x28, 0x65, 0x43, 0xE2, 0xF5, 0xF1, 0x9C, 0xB5, 0xCB, 0x8A, 0xDE, 0xB3, 0xBD, 0x55, 0xD6, 0xAD, 0x51, 0xC7, 0x1E, 0xCB, 0xC6, 0xBF, 0x33, 0xDE, 0x06, 0xFF, 0x8E, 0x37, 0xA9, 0x0F, 0x06, 0x8F, 0x00, 0xC0, 0x18, 0x40, 0x9D, 0x7B, 0x10, 0x49, 0x00, 0x3E, 0x40, 0x06, 0xD0, 0xB6, 0x27, 0xEF, 0x9D, 0xD3, 0x5A, 0x40, 0x2B, 0x50, 0x02, 0x58, 0xE2, 0x95, 0x16, 0xC0, 0x17, 0xC9, 0x57, 0x8A, 0x36, 0xAB, 0xDD, 0x0E, 0x13, 0x03, 0xA5, 0xBF, 0x73, 0x93, 0xDF, 0x2F, 0x57, 0x8F, 0x76, 0xB6, 0x1D, 0x49, 0xFF, 0xE2, 0x03, 0xF3, 0xAA, 0xB6, 0x62, 0x24, 0x3E, 0xD7, 0x9C, 0xC7, 0xE9, 0x95, 0x9B, 0xCA, 0x52, 0x7B, 0x22, 0xAD, 0x75, 0x09, 0xA1, 0x0D, 0x37, 0xFC, 0x93, 0xB2, 0x9E, 0xDA, 0x88, 0xB7, 0xA7, 0x13, 0x8E, 0xA2, 0x70, 0x37, 0xFA, 0xDB, 0xA5, 0x88, 0x7A, 0x6B, 0xE7, 0xE9, 0x8B, 0x28, 0xC6, 0x31, 0x78, 0x77, 0xE6, 0x61, 0x46, 0xD6, 0x9C, 0xBB, 0xB1, 0x58, 0xAF, 0xF3, 0xD1, 0x16, 0xD1, 0x00, 0x5B, 0x3A, 0xDB, 0x2E, 0x10, 0x6A, 0x40, 0x9D, 0x8F, 0x0F, 0x52, 0x80, 0xA3, 0x77, 0x8F, 0xC6, 0xC9, 0x5D, 0x69, 0x85, 0x36, 0xFB, 0xCB, 0x18, 0x9A, 0x5F, 0xFA, 0x62, 0xAD, 0xEF, 0xB9, 0xDF, 0xEA, 0x62, 0xB1, 0x38, 0x5B, 0x27, 0xEB, 0x3F, 0xEF, 0x9A, 0xE0, 0x67, 0x4E, 0xCF, 0x90, 0xDF, 0x6D, 0x65, 0x99, 0x92, 0x99, 0x8F, 0xCB, 0xE2, 0xF0, 0xC8, 0xD4, 0x80, 0xCB, 0xED, 0x17, 0xAB, 0x05, 0xF3, 0x28, 0x98, 0xD7, 0xAE, 0xBE, 0xB8, 0xB4, 0xD2, 0x15, 0x6F, 0xBE, 0x69, 0x97, 0x23, 0x40, 0xCC, 0xE2, 0x5B, 0xEB, 0xA3, 0x4C, 0xDF, 0xB8, 0x21, 0x67, 0xA1, 0x8B, 0x02, 0xFE, 0x24, 0x81, 0x81, 0x2C, 0x20, 0x3E, 0x2A, 0x00, 0xB5, 0xF0, 0xF3, 0xD1, 0x87, 0xB4, 0x43, 0xAB, 0xCD, 0x65, 0xB5, 0x69, 0x41, 0x1B, 0x1C, 0x0B, 0x04, 0x0A, 0x54, 0x61, 0xB5, 0x34, 0x54, 0x5C, 0x7A, 0xA2, 0xAF, 0xDD, 0x28, 0x3D, 0x42, 0x77, 0xEE, 0x8B, 0xD8, 0xA7, 0xC3, 0xF8, 0x3A, 0x88, 0xCA, 0x17, 0x57, 0xCF, 0xAD, 0x7A, 0x4A, 0x8E, 0x8A, 0xC6, 0x6B, 0xC0, 0x14, 0x10, 0x66, 0xD0, 0x5C, 0xDD, 0x08, 0x11, 0xB7, 0xBB, 0x4A, 0xB3, 0xCB, 0x00, 0x0F, 0xC0, 0x1A, 0x60, 0x39, 0x67, 0x1C, 0xA0, 0x7D, 0x91, 0x8B, 0x5A, 0x34, 0x30, 0xFA, 0xC9, 0xB3, 0xAA, 0x8F, 0xAC, 0x49, 0xF1, 0xE1, 0xA7, 0xF2, 0x62, 0x61, 0xF6, 0x91, 0x35, 0x29, 0x3D, 0xBF, 0x82, 0x32, 0x75, 0xFF, 0x5D, 0x0A, 0x4C, 0x6B, 0x1B, 0xB1, 0x5F, 0x91, 0x29, 0x49, 0x74, 0xE1, 0xB5, 0x9C, 0x5C, 0x4F, 0x49, 0xDD, 0x35, 0xD9, 0x77, 0xB7, 0xCF, 0x58, 0xCB, 0x88, 0x3E, 0xE9, 0xD8, 0x15, 0xC0, 0x6C, 0xAA, 0x10, 0x4F, 0x9A, 0xF4, 0x8D, 0x53, 0x5C, 0xE2, 0xAC, 0xBF, 0x27, 0xD6, 0xB0, 0xFA, 0xCA, 0x60, 0xD0, 0x65, 0x11, 0x4F, 0xB2, 0x8E, 0xD7, 0x9D, 0x59, 0x75, 0x38, 0xBA, 0x3E, 0x09, 0x40, 0x9D, 0xAC, 0xC4, 0xB8, 0x6B, 0xC7, 0xEE, 0x12, 0xBD, 0x7C, 0xFC, 0x1F, 0xB2, 0x98, 0x73, 0xDF, 0x18, 0x94, 0x0F, 0x05, 0xB0, 0x4F, 0x71, 0xB2, 0xEE, 0x9B, 0xD2, 0x8F, 0xD5, 0x04, 0x8B, 0xCD, 0x60, 0x6A, 0xBA, 0x33, 0x1F, 0x6C, 0x90, 0x19, 0x58, 0x02, 0x75, 0x06, 0xF5, 0xDF, 0x05, 0xF4, 0x58, 0xE1, 0x36, 0x1B, 0xF6, 0x1F, 0x99, 0x90, 0x9E, 0xFC, 0xA3, 0x58, 0x50, 0xC6, 0x73, 0x93, 0xEE, 0xE9, 0xD2, 0x76, 0xC5, 0x95, 0x5D, 0x94, 0xE9, 0x06, 0x67, 0xFF, 0xB1, 0x7C, 0x13, 0x5C, 0x7D, 0xB7, 0x66, 0x44, 0x06, 0x60, 0xD8, 0x43, 0x8B, 0xE2, 0xCB, 0x5C, 0x5F, 0x9B, 0x97, 0x4C, 0x7F, 0x04, 0x96, 0x4B, 0x5E, 0x6F, 0x41, 0x3F, 0xAD, 0x35, 0xCA, 0x3E, 0xE5, 0x8A, 0x3A, 0x80, 0xFB, 0x2D, 0x12, 0x99, 0xB3, 0xFF, 0xC8, 0x0D, 0x9C, 0x62, 0x0E, 0x21, 0xA0, 0x7A, 0x3B, 0xD2, 0x4E, 0xF2, 0x15, 0x5A, 0x4D, 0x7F, 0x83, 0x2C, 0x33, 0xD1, 0x76, 0x4F, 0x64, 0x85, 0xD9, 0xF5, 0x4D, 0x4D, 0x28, 0x11, 0x45, 0xC1, 0x42, 0xCD, 0x86, 0xFC, 0x87, 0xB9, 0x42, 0x9F, 0x4A, 0xF6, 0xF8, 0x54, 0xAC, 0x38, 0x77, 0xA6, 0x35, 0x5E, 0xEF, 0xA7, 0x59, 0xAB, 0xD5, 0xC0, 0x6A, 0xD6, 0x7C, 0xF3, 0x4D, 0xC5, 0x8E, 0xF5, 0xAE, 0x39, 0x6B, 0x79, 0x00, 0xA6, 0x8C, 0x33, 0xF1, 0x29, 0x1F, 0x1F, 0xB7, 0x3D, 0xEB, 0x0C, 0x30, 0x75, 0xBB, 0xD5, 0xB4, 0x81, 0x3A, 0xC0, 0xB0, 0xEC, 0xC2, 0x01, 0x09, 0x20, 0xEA, 0xCE, 0xC8, 0x6D, 0x01, 0x92, 0x0F, 0xF7, 0x95, 0x76, 0xC0, 0x0B, 0xA8, 0xEB, 0x15, 0x58, 0xCD, 0x7E, 0x9D, 0x2F, 0xBC, 0xF3, 0x67, 0xBC, 0x39, 0x8A, 0xEE, 0x26, 0x9D, 0xF8, 0xF7, 0xB4, 0x41, 0x8F, 0x94, 0xF0, 0x1F, 0x0E, 0x46, 0x9E, 0x6A, 0x37, 0x5B, 0x95, 0x61, 0xAC, 0xDD, 0x4D, 0x8C, 0x9D, 0xAB, 0x33, 0x94, 0x33, 0x2F, 0x79, 0xB7, 0xA4, 0xE6, 0x9B, 0x53, 0x43, 0x84, 0x2E, 0xD5, 0xCB, 0x37, 0x6F, 0x0D, 0xE8, 0xE2, 0xCC, 0x5D, 0xC4, 0x73, 0xF4, 0xAE, 0x33, 0xA7, 0xEE, 0x4B, 0x38, 0x20, 0x09, 0x7C, 0x73, 0x3D, 0x9D, 0xB0, 0xC5, 0x59, 0xE8, 0xA2, 0xEE, 0x9E, 0x39, 0x9E, 0x40, 0x0F, 0x50, 0x0E, 0xF0, 0xF7, 0xA6, 0x80, 0x14, 0xA0, 0xF5, 0x11, 0xFC, 0xA2, 0xD5, 0x18, 0x27, 0xD8, 0x22, 0xA9, 0x94, 0x15, 0x0D, 0xBE, 0xF6, 0xD0, 0x36, 0xF9, 0x41, 0x44, 0x36, 0xE3, 0x59, 0xE3, 0xF2, 0xDD, 0xC6, 0x7C, 0x32, 0x21, 0xAB, 0xB9, 0x68, 0xD1, 0xA7, 0xB5, 0xA0, 0x44, 0x1E, 0xAB, 0x77, 0xE7, 0xBD, 0x3F, 0xF4, 0x67, 0x78, 0xE4, 0xEE, 0x62, 0xF1, 0x7C, 0x27, 0xD3, 0xBB, 0x82, 0x4E, 0xE7, 0xAE, 0x90, 0xCD, 0x00, 0xC2, 0x01, 0xC6, 0x02, 0x32, 0x3F, 0xA9, 0xA2, 0xF2, 0x5F, 0x9F, 0x12, 0xF0, 0x4F, 0xE6, 0xB2, 0x0F, 0x60, 0xF1, 0xC9, 0x84, 0x1C, 0x40, 0xEB, 0x2E, 0x42, 0xB3, 0x7C, 0xAC, 0x86, 0x38, 0x41, 0x8D, 0xFC, 0x0E, 0x4A, 0x53, 0xBA, 0x8E, 0xD5, 0x3B, 0x13, 0xD2, 0x0B, 0x50, 0xB3, 0xD5, 0x3F, 0xAC, 0xAB, 0xA6, 0x2C, 0xEB, 0x53, 0xFF, 0x2F, 0xF4, 0x5C, 0xD6, 0xDE, 0x7B, 0x86, 0xE7, 0x4A, 0x01, 0x0E, 0x73, 0x52, 0xF4, 0x4D, 0xF5, 0xC9, 0x47, 0x72, 0xA2, 0x12, 0xE8, 0x03, 0xD0, 0xDA, 0x42, 0x2F, 0xFE, 0x56, 0x20, 0xCF, 0xB9, 0x26, 0x6A, 0x2D, 0xCE, 0x01, 0xB2, 0x19, 0x4D, 0xFA, 0x44, 0x06, 0x9A, 0x25, 0x54, 0x0E, 0xB8, 0x02, 0xC1, 0x25, 0x6C, 0xC1, 0x0D, 0xCA, 0x1D, 0x30, 0xD9, 0x87, 0xF1, 0xC9, 0xBC, 0x12, 0x40, 0xB8, 0xE2, 0x26, 0xAD, 0x96, 0x3F, 0x73, 0x75, 0x37, 0xEE, 0x3D, 0x9E, 0xC8, 0x96, 0xE1, 0x1A, 0xDB, 0xBE, 0xEA, 0x12, 0x83, 0x5F, 0x77, 0xC1, 0xB7, 0xDD, 0xBC, 0x78, 0xFF, 0xEE, 0x06, 0xCF, 0x86, 0xA5, 0x9F, 0xDD, 0x80, 0xDE, 0x33, 0x65, 0xE7, 0x7E, 0x63, 0xDA, 0xF7, 0xDE, 0x08, 0xE7, 0x75, 0xCD, 0xD6, 0x53, 0x11, 0x51, 0x01, 0xA8, 0xD3, 0x77, 0x43, 0x5F, 0xDA, 0x1A, 0xA1, 0xFF, 0xC4, 0xA1, 0x9B, 0x9B, 0x20, 0xBD, 0xF8, 0x3C, 0xBD, 0xC9, 0x5F, 0x22, 0x3D, 0xBD, 0x3C, 0x74, 0x63, 0x7E, 0x34, 0x74, 0xDA, 0x3E, 0x1A, 0x3A, 0x02, 0xE4, 0x01, 0x62, 0xC1, 0xBA, 0xD5, 0x12, 0xC0, 0x12, 0x08, 0xE3, 0x32, 0x4C, 0xAB, 0x15, 0xDC, 0xB6, 0xED, 0x28, 0xB7, 0x1C, 0xBF, 0xAA, 0xB1, 0x5D, 0x1A, 0x83, 0xA3, 0x7A, 0xBF, 0x58, 0xC0, 0xCF, 0x82, 0x5B, 0xBB, 0xF6, 0xC7, 0x0F, 0x19, 0xF3, 0xAE, 0x99, 0x4A, 0xB1, 0xCC, 0x2D, 0xF9, 0x78, 0x3C, 0x41, 0xF1, 0xD7, 0x61, 0x97, 0xA9, 0x3C, 0xCC, 0x98, 0x30, 0x18, 0x34, 0x06, 0x06, 0xCD, 0xE0, 0x8D, 0x19, 0x06, 0xED, 0x62, 0xEB, 0xBB, 0x5B, 0x29, 0xA0, 0x14, 0x96, 0x34, 0x67, 0x30, 0xE9, 0x3D, 0xCC, 0xE4, 0x13, 0x9B, 0x69, 0x5E, 0xB1, 0xF7, 0x5A, 0x34, 0x43, 0x17, 0x17, 0xD0, 0xBA, 0xFF, 0x9C, 0xEB, 0x33, 0xD2, 0x03, 0xD4, 0x22, 0x0D, 0xB0, 0xA4, 0xAC, 0x19, 0x90, 0x07, 0x68, 0xC1, 0xCF, 0xFE, 0x96, 0xB5, 0xDE, 0x4B, 0x8B, 0xA1, 0x3F, 0xD8, 0xC9, 0xD7, 0x68, 0x66, 0xD5, 0xF0, 0xD7, 0x87, 0xFD, 0x20, 0xBE, 0xE1, 0x7B, 0x38, 0x6F, 0x5D, 0x3F, 0x2E, 0xB5, 0x7E, 0x92, 0x7D, 0xD7, 0x20, 0xB2, 0x77, 0x9E, 0x7E, 0x6F, 0x9B, 0xFE, 0x14, 0xFE, 0x9C, 0x7C, 0xFB, 0x96, 0xE6, 0xFE, 0x37, 0x8D, 0x3D, 0x8A, 0xF7, 0xAF, 0x1E, 0xFA, 0x62, 0x76, 0xFF, 0xB5, 0xC7, 0xCB, 0x20, 0x7E, 0xAB, 0xB0, 0xC9, 0xBC, 0xE5, 0x3C, 0xF1, 0x0C, 0x91, 0x5C, 0x9B, 0x59, 0xD1, 0xC1, 0x06, 0xCC, 0xE7, 0x42, 0x6A, 0x0A, 0xF0, 0x7E, 0xC9, 0xDE, 0x24, 0xA7, 0xD6, 0xBA, 0x01, 0xA4, 0x03, 0xC2, 0x53, 0xD2, 0x00, 0x4D, 0x35, 0xDF, 0xA0, 0xCD, 0x06, 0x2D, 0x95, 0x54, 0xD0, 0xDF, 0x4B, 0x0B, 0xCA, 0x35, 0xF9, 0x5E, 0xDB, 0xD7, 0x29, 0x89, 0x1C, 0xA5, 0x41, 0x50, 0xC4, 0xFB, 0x92, 0x71, 0x8D, 0xAB, 0x81, 0x08, 0x4B, 0x23, 0xD9, 0xE5, 0xF5, 0x19, 0x61, 0x38, 0xB1, 0x22, 0x39, 0x74, 0xFB, 0x34, 0x3F, 0x2E, 0x24, 0xFA, 0x1A, 0x37, 0x74, 0x90, 0x3B, 0xEC, 0x74, 0x87, 0x1D, 0x87, 0x48, 0xAC, 0x0D, 0x58, 0x6C, 0xC0, 0xF8, 0x92, 0xB3, 0xBC, 0x20, 0x5F, 0x41, 0x6F, 0x7B, 0x0A, 0xC0, 0x8A, 0x42, 0xE7, 0x6B, 0x18, 0x67, 0x70, 0x6C, 0x80, 0x16, 0xD8, 0x47, 0x16, 0x54, 0xC5, 0x0B, 0x36, 0x5D, 0xE5, 0xD0, 0x5A, 0x64, 0x00, 0x42, 0x79, 0x8C, 0x7D, 0x93, 0x5F, 0xEC, 0xC9, 0x83, 0x59, 0xEF, 0x8D, 0x07, 0xDB, 0x13, 0x5E, 0xC5, 0x9E, 0x16, 0x2E, 0xDB, 0x5D, 0x73, 0x76, 0x85, 0xB1, 0xAD, 0x81, 0xBB, 0xCB, 0xD8, 0xE7, 0x52, 0x71, 0xE5, 0x81, 0x48, 0xD7, 0xCB, 0x61, 0xB8, 0x44, 0x62, 0x34, 0x1D, 0x7C, 0xA2, 0xFF, 0x45, 0xED, 0x0D, 0xB4, 0xE4, 0x5A, 0x8B, 0x73, 0x60, 0x6D, 0x40, 0x0F, 0x96, 0xF4, 0x93, 0xBF, 0xC0, 0xDE, 0x8C, 0x3D, 0x6F, 0x4A, 0xEC, 0x7A, 0xC8, 0x31, 0xA6, 0xF0, 0x89, 0xB7, 0x11, 0x0D, 0xA6, 0x46, 0xDC, 0x4A, 0x25, 0xA5, 0x9F, 0xC0, 0xD2, 0x22, 0xED, 0x0E, 0x41, 0xB5, 0x03, 0x95, 0x80, 0x33, 0xD5, 0x74, 0x80, 0xB7, 0xA7, 0x1A, 0x5E, 0x19, 0x1A, 0x4D, 0x36, 0x2F, 0x30, 0x76, 0x8E, 0x7F, 0xB5, 0xD4, 0x36, 0x17, 0xC8, 0xE3, 0x07, 0x2D, 0x43, 0xEF, 0x87, 0xBE, 0x93, 0xD4, 0x0C, 0x98, 0x38, 0xCC, 0x3B, 0xD8, 0x31, 0xD5, 0x4C, 0x52, 0x63, 0x2E, 0xD0, 0x76, 0x4A, 0x63, 0x31, 0xD1, 0x36, 0x6F, 0xD3, 0xF3, 0x66, 0x3A, 0xCE, 0x7A, 0x86, 0x6A, 0x7D, 0x10, 0x01, 0x13, 0x38, 0x36, 0x8C, 0x6B, 0x1E, 0x1F, 0xD9, 0x3C, 0xA1, 0x5A, 0x57, 0x19, 0x73, 0x14, 0x13, 0x9F, 0xC6, 0xDE, 0xCC, 0xB5, 0xDA, 0x5E, 0x38, 0xF3, 0xF4, 0x47, 0x38, 0x07, 0x08, 0x03, 0xE6, 0x07, 0x7D, 0x32, 0x5C, 0xDD, 0x81, 0x89, 0x85, 0x00, 0x99, 0x80, 0xB2, 0x8A, 0xB0, 0xF7, 0x53, 0xAC, 0xE7, 0xC4, 0x68, 0x33, 0xFD, 0x75, 0x93, 0xAD, 0xA9, 0xAB, 0x4A, 0xCA, 0x43, 0xDF, 0x83, 0x5A, 0xA6, 0x15, 0x7C, 0x0E, 0x8D, 0x6B, 0xBB, 0x41, 0x95, 0x28, 0x62, 0xED, 0x6A, 0x79, 0xB5, 0x61, 0xB4, 0x27, 0x03, 0x65, 0x8A, 0x4A, 0xF2, 0x0B, 0x76, 0xA7, 0xCA, 0x5B, 0xDD, 0xE5, 0x89, 0xAD, 0xF5, 0xED, 0xF3, 0x68, 0x05, 0xDC, 0x79, 0x63, 0x66, 0x39, 0x29, 0xE0, 0xBD, 0x10, 0x40, 0xEB, 0xF3, 0x6F, 0x56, 0x77, 0x69, 0x4F, 0x7F, 0xCB, 0xC8, 0x06, 0x10, 0x07, 0x54, 0xEE, 0x26, 0x90, 0xE6, 0x40, 0x2B, 0x90, 0x03, 0x18, 0x7D, 0x07, 0x06, 0x78, 0x03, 0x19, 0x4F, 0xC1, 0x0C, 0xAD, 0x66, 0xE8, 0x3D, 0x2E, 0xF2, 0xAF, 0xE3, 0x5D, 0x62, 0xAE, 0xB0, 0xD4, 0x98, 0x24, 0x0A, 0x10, 0xAA, 0x71, 0x8C, 0xD1, 0xFA, 0x8F, 0x8E, 0xBC, 0x2E, 0x4F, 0x5B, 0x45, 0x4A, 0xE5, 0xED, 0x6A, 0x98, 0x9F, 0xD3, 0x05, 0x0B, 0xCE, 0xEA, 0x56, 0x68, 0xCA, 0xFA, 0x6B, 0x25, 0x30, 0xCF, 0xD2, 0x58, 0x2C, 0x55, 0xDE, 0x2F, 0xE3, 0x9F, 0x22, 0x7E, 0xE9, 0x6F, 0x3E, 0x15, 0x55, 0x96, 0xDF, 0x7B, 0xB7, 0x9C, 0x27, 0x66, 0x15, 0x1F, 0xE1, 0xE9, 0x3A, 0x00, 0x83, 0x4E, 0x5C, 0x21, 0x2D, 0x81, 0x1E, 0xA0, 0x12, 0xB0, 0xC1, 0x2B, 0x7D, 0x00, 0x4B, 0x20, 0x76, 0x96, 0xA7, 0xD0, 0x6A, 0x0E, 0xC9, 0xDB, 0x82, 0xE6, 0x50, 0x74, 0xAF, 0x07, 0x1D, 0x75, 0xB3, 0x39, 0x85, 0x5A, 0x17, 0x2B, 0x38, 0x0D, 0xAA, 0x50, 0xE3, 0x10, 0x72, 0x17, 0x95, 0xF9, 0x27, 0xE5, 0x2A, 0x9D, 0x0A, 0x7D, 0xC6, 0xEC, 0x55, 0x40, 0x77, 0x2D, 0xBF, 0x2B, 0x7C, 0xED, 0xD1, 0xCD, 0x3E, 0x6F, 0xAF, 0x85, 0xD9, 0xE1, 0x38, 0xCF, 0x29, 0x2C, 0xCF, 0x1B, 0xAB, 0x8D, 0xAB, 0x25, 0xE1, 0xED, 0xF6, 0xBA, 0x44, 0xCA, 0x13, 0x78, 0x05, 0x60, 0x38, 0xD2, 0xB5, 0x01, 0x2F, 0x20, 0xED, 0x11, 0x26, 0x06, 0x9A, 0xCA, 0x64, 0x02, 0x28, 0x5D, 0xF7, 0x03, 0x38, 0xDF, 0x34, 0x80, 0xFA, 0xDE, 0x12, 0xB4, 0x5A, 0x20, 0x60, 0xDC, 0x9C, 0xA1, 0x5B, 0xFC, 0xDB, 0x8D, 0x1B, 0x4D, 0x06, 0x94, 0x51, 0xB3, 0x56, 0xDE, 0xB8, 0x20, 0xC8, 0x66, 0x7D, 0xA7, 0x5C, 0x29, 0xAD, 0x76, 0xD5, 0x92, 0x0F, 0x8D, 0x47, 0x01, 0x5C, 0x1C, 0x99, 0x36, 0x09, 0x89, 0xDF, 0x02, 0x26, 0xB9, 0x54, 0xD3, 0xDE, 0x89, 0x7A, 0x3E, 0x33, 0xB4, 0x3E, 0x97, 0x27, 0x5D, 0x1C, 0x20, 0x16, 0xF4, 0xBD, 0xA5, 0xDD, 0x82, 0x4D, 0xA7, 0x80, 0x5E, 0xDB, 0x6B, 0x7C, 0x8A, 0xA6, 0x02, 0x18, 0x2A, 0x70, 0xF2, 0x5F, 0x49, 0x00, 0x5A, 0xBB, 0x16, 0x6A, 0x74, 0x18, 0x3D, 0x62, 0x0B, 0x74, 0x0E, 0xD2, 0x6A, 0xF0, 0x72, 0xF8, 0xC9, 0xDF, 0x0C, 0xED, 0xC9, 0x77, 0x6A, 0xBA, 0x4A, 0x21, 0x75, 0x3B, 0x36, 0x74, 0x6F, 0x0C, 0xAF, 0x2A, 0x95, 0xBC, 0x3F, 0x57, 0xA9, 0x79, 0x57, 0x2B, 0xE9, 0x3D, 0xFF, 0xFB, 0xB3, 0xC7, 0x8F, 0xF1, 0xD4, 0x83, 0x9F, 0x65, 0xBF, 0xDD, 0x2C, 0xF4, 0x69, 0x49, 0x70, 0x98, 0xC2, 0x77, 0x2F, 0x7D, 0x5C, 0x83, 0xAA, 0x01, 0x91, 0x8F, 0x9A, 0xEF, 0xA7, 0x63, 0x51, 0xD1, 0xBD, 0x71, 0x15, 0x4F, 0x89, 0x3C, 0x13, 0xB5, 0x59, 0x00, 0x54, 0x80, 0xEB, 0x5D, 0xEB, 0xC3, 0xA3, 0xB3, 0x08, 0x70, 0x94, 0x05, 0x40, 0x80, 0xE6, 0xA7, 0x71, 0x32, 0xBF, 0x7D, 0xD2, 0x6A, 0xF5, 0x6F, 0x04, 0x5D, 0x8A, 0xE7, 0xE7, 0x09, 0x93, 0x7F, 0x56, 0x08, 0x71, 0x22, 0x5F, 0xDA, 0xE0, 0xEC, 0x18, 0x87, 0xCC, 0x54, 0x07, 0x4A, 0xB0, 0x90, 0xDE, 0xE7, 0xF1, 0x15, 0xA0, 0x13, 0x4E, 0x15, 0x61, 0x1C, 0xF4, 0xBA, 0xCA, 0x01, 0x18, 0x72, 0x77, 0x7F, 0x9E, 0xA4, 0xF8, 0x60, 0x31, 0x19, 0x9F, 0x19, 0x5B, 0xC0, 0xD3, 0x9C, 0x42, 0x6E, 0xE1, 0xC7, 0xC3, 0x0A, 0x99, 0x45, 0x0A, 0x10, 0xC3, 0x70, 0xC5, 0xDD, 0xB8, 0xE2, 0x04, 0xC0, 0x4F, 0x6E, 0x8B, 0x01, 0xA2, 0xEF, 0xDA, 0x62, 0x96, 0xF2, 0x1D, 0xE6, 0x79, 0x1C, 0x20, 0xE5, 0x23, 0x6A, 0x72, 0xC9, 0x14, 0xC7, 0x9B, 0x4A, 0x6A, 0xFD, 0x4B, 0x25, 0xED, 0x47, 0x0E, 0x7D, 0xF3, 0xF5, 0x5D, 0xB1, 0xA7, 0xD4, 0x20, 0x85, 0x24, 0x15, 0x33, 0x14, 0x39, 0x7F, 0xEE, 0x6A, 0xBF, 0x31, 0x96, 0xDF, 0xA4, 0x48, 0x3D, 0x4F, 0x51, 0x33, 0xBD, 0x76, 0xB7, 0x7E, 0xAA, 0xEA, 0x5B, 0xA1, 0x25, 0xC0, 0x3C, 0x53, 0xA5, 0xE5, 0xDE, 0x51, 0x9F, 0xAF, 0xF6, 0x74, 0x6A, 0xE3, 0x06, 0x09, 0x04, 0x11, 0x80, 0x3B, 0x00, 0x23, 0xE8, 0xA7, 0x03, 0x7C, 0xFC, 0xED, 0xD2, 0x0B, 0xFA, 0x64, 0x4F, 0x01, 0x32, 0x40, 0x2A, 0x8F, 0xA3, 0xFF, 0xA1, 0xB2, 0x6C, 0x7D, 0x4B, 0x85, 0x85, 0x03, 0xB5, 0xAF, 0xA4, 0x3F, 0x56, 0x9B, 0xDF, 0x1E, 0x7A, 0x8E, 0xFF, 0x22, 0x46, 0x55, 0xBE, 0x27, 0x64, 0xB9, 0x3B, 0x69, 0x6F, 0x43, 0x8F, 0xCE, 0x5E, 0x71, 0xBB, 0xA6, 0x8B, 0xE8, 0x53, 0x98, 0x7D, 0x5F, 0xDB, 0x79, 0x72, 0x15, 0xE6, 0x06, 0x6D, 0x5A, 0xFF, 0xC1, 0x27, 0x69, 0x80, 0x12, 0x04, 0xCF, 0x74, 0xB0, 0x6F, 0xD2, 0xE9, 0x5A, 0xFB, 0xE0, 0x67, 0x78, 0xFF, 0xEF, 0x86, 0x9E, 0x4F, 0x6E, 0x10, 0x61, 0x57, 0xF9, 0x27, 0x56, 0xFC, 0x9D, 0x9A, 0xB1, 0x93, 0x91, 0x33, 0x4D, 0x80, 0x70, 0xA0, 0x86, 0x7E, 0xCF, 0x5B, 0x90, 0xA2, 0x06, 0xC8, 0xFE, 0x0F, 0xFF, 0x8B, 0x29, 0x10, 0xBA, 0xAF, 0xD0, 0x6A, 0xCE, 0x62, 0xAE, 0xFA, 0x05, 0xD8, 0xFC, 0x24, 0x76, 0x2D, 0x43, 0xAF, 0xE7, 0xC8, 0xDA, 0x1A, 0xAB, 0x59, 0xC5, 0x50, 0xD9, 0x5E, 0xE8, 0x50, 0x59, 0xAE, 0xFF, 0xEC, 0x54, 0x50, 0x7A, 0x60, 0x2E, 0xEA, 0x0D, 0xCD, 0x5E, 0x02, 0x4E, 0xBD, 0x75, 0x9C, 0xBE, 0x25, 0x38, 0x6C, 0x5D, 0xD1, 0xF4, 0x14, 0x3D, 0x7B, 0xBF, 0x0E, 0xFB, 0xAF, 0xD0, 0x2D, 0x43, 0xDF, 0xE6, 0xAE, 0xB2, 0xF7, 0xB8, 0x10, 0x5F, 0xCC, 0xE5, 0xFE, 0x8C, 0xC7, 0x8F, 0x52, 0xC1, 0x26, 0x13, 0x7B, 0xE9, 0xD0, 0xBD, 0x8D, 0x37, 0xD0, 0x1B, 0x72, 0xA6, 0x76, 0x96, 0x15, 0xD0, 0x84, 0x01, 0x11, 0x80, 0xFC, 0x90, 0x7C, 0xB8, 0x11, 0xF9, 0x06, 0x60, 0x35, 0xF9, 0x17, 0x01, 0x09, 0xA6, 0xC2, 0x91, 0xF0, 0x7F, 0x5B, 0x89, 0x58, 0x29, 0x5C, 0x52, 0x23, 0x9B, 0x24, 0x50, 0x97, 0xEB, 0xBB, 0xCF, 0x65, 0xB5, 0xDE, 0x89, 0xAA, 0xF6, 0x04, 0xAB, 0x55, 0x01, 0xF7, 0xB5, 0x61, 0xD1, 0xA7, 0x00, 0xAB, 0x0D, 0x4B, 0x6B, 0x68, 0x35, 0x8E, 0x84, 0xD8, 0x21, 0x57, 0x7F, 0xCA, 0xD1, 0x78, 0x83, 0xE7, 0x89, 0xCB, 0x71, 0xE9, 0x8B, 0x27, 0x40, 0x92, 0x1C, 0xA3, 0x4A, 0xFF, 0xCF, 0x0E, 0xEA, 0xB8, 0xAB, 0xC3, 0xE8, 0x02, 0x51, 0x05, 0x98, 0xEC, 0x55, 0xEB, 0x09, 0x31, 0x07, 0x94, 0xEE, 0x11, 0x07, 0x5C, 0x81, 0xE3, 0xC0, 0xD3, 0x8C, 0xEE, 0xB1, 0x9A, 0xFE, 0x4B, 0x47, 0x96, 0x77, 0xA2, 0x43, 0xD9, 0xFF, 0x76, 0xB1, 0x94, 0x31, 0x2C, 0xE6, 0xBC, 0xCA, 0x66, 0xD1, 0xCD, 0x71, 0x75, 0xAD, 0x89, 0xCB, 0x75, 0x4D, 0xF7, 0x8A, 0xF9, 0xD3, 0x3A, 0x70, 0x86, 0x49, 0x0E, 0x5B, 0x40, 0x7C, 0xE5, 0x9C, 0xF0, 0x2F, 0x64, 0xBE, 0x46, 0xD3, 0x84, 0x4F, 0xA2, 0x14, 0x53, 0x8B, 0xCD, 0x99, 0x00, 0x49, 0x8F, 0x23, 0x6C, 0x77, 0xB5, 0x0B, 0x61, 0x23, 0x37, 0x5A, 0xF9, 0x91, 0xAF, 0xF6, 0xE7, 0x78, 0x98, 0x03, 0x0C, 0x03, 0x13, 0x0A, 0x54, 0x50, 0x00, 0x86, 0xE9, 0x48, 0xC0, 0xF1, 0x7D, 0x98, 0xC0, 0xE9, 0xBB, 0x39, 0x55, 0x53, 0x66, 0xB5, 0x69, 0x34, 0xFB, 0x25, 0x79, 0x57, 0x0B, 0x56, 0xB7, 0x8A, 0xCB, 0xAF, 0x56, 0xA1, 0x2B, 0x83, 0xD0, 0x5B, 0x91, 0x1F, 0x70, 0xBD, 0xFC, 0xF7, 0x04, 0xD5, 0x47, 0x5D, 0x97, 0x2E, 0x95, 0x35, 0x50, 0x00, 0xD4, 0xFE, 0xA0, 0xDF, 0x0A, 0xD0, 0xBF, 0x6C, 0x15, 0xFA, 0x03, 0xED, 0x96, 0x09, 0xA0, 0x87, 0x95, 0xFB, 0xB1, 0xAC, 0xA2, 0x7C, 0x31, 0x96, 0xF0, 0xCA, 0xFF, 0xE6, 0x1D, 0x6E, 0xC0, 0x3E, 0xB3, 0xE6, 0xAA, 0xC3, 0xEF, 0x4B, 0xCF, 0xD1, 0x9A, 0x44, 0x01, 0x93, 0xBB, 0x5C, 0x8C, 0xB5, 0x8A, 0x72, 0x80, 0xC3, 0x3F, 0xC9, 0x00, 0x6D, 0xBC, 0x39, 0xF1, 0x2A, 0x20, 0x9F, 0x77, 0x82, 0x3A, 0xDC, 0x5E, 0x9D, 0x5B, 0x2A, 0xF7, 0xBD, 0xBA, 0xB3, 0x83, 0xDC, 0x3A, 0x6F, 0x4F, 0x30, 0x4B, 0xE9, 0x52, 0x6B, 0x9A, 0x4F, 0x65, 0xF6, 0x3C, 0xC9, 0x6A, 0x9B, 0xD9, 0xA7, 0xB2, 0x99, 0x53, 0xB2, 0x9A, 0x87, 0xEC, 0x83, 0xCD, 0xA2, 0x43, 0xE6, 0x82, 0xC5, 0xBD, 0xD4, 0xCD, 0x75, 0x0F, 0xAB, 0x27, 0x8A, 0xFA, 0x14, 0x53, 0x3B, 0x2C, 0x59, 0x4F, 0xCF, 0x1E, 0x40, 0x29, 0x01, 0xFB, 0xDE, 0x3D, 0x9E, 0x7C, 0x8C, 0xF8, 0xAB, 0x16, 0x15, 0xA0, 0x77, 0xA1, 0xD5, 0x01, 0x58, 0x00, 0xC9, 0x44, 0x61, 0x37, 0xC0, 0x1A, 0x60, 0x67, 0x98, 0x58, 0xA8, 0x02, 0x7C, 0x25, 0x8A, 0x46, 0x0B, 0xB8, 0x28, 0xAC, 0x90, 0xEE, 0xD0, 0x79, 0x1B, 0x6D, 0x4D, 0x40, 0x57, 0x93, 0x76, 0x23, 0x9F, 0x66, 0xF4, 0x8D, 0x7C, 0x9F, 0xFE, 0xA8, 0x35, 0xD9, 0xBC, 0x1D, 0x53, 0x37, 0x07, 0xF9, 0xD1, 0x46, 0xB3, 0x75, 0x35, 0x9C, 0xC7, 0xCD, 0x76, 0xFC, 0x75, 0x23, 0xC9, 0xD3, 0xE7, 0xD9, 0xFB, 0x15, 0x37, 0x0C, 0x76, 0x64, 0x7C, 0x46, 0xC3, 0x13, 0x06, 0x7C, 0x52, 0x24, 0x01, 0x0E, 0x57, 0xAB, 0xB7, 0x7B, 0xC4, 0x56, 0xF8, 0x19, 0xDD, 0x9E, 0xB6, 0x83, 0x1E, 0xB9, 0x08, 0x70, 0x2A, 0x1F, 0x60, 0xF6, 0x9F, 0xB1, 0x6B, 0xDD, 0x33, 0xBE, 0x10, 0x40, 0xE8, 0x77, 0x4E, 0xC0, 0x02, 0x88, 0xC1, 0xCF, 0xEA, 0xD0, 0x66, 0x89, 0x5E, 0xCC, 0x52, 0xFF, 0xDB, 0x3E, 0xBB, 0x3B, 0xB7, 0x3A, 0xDC, 0x91, 0xBF, 0x1F, 0x89, 0x63, 0xF6, 0xF4, 0x15, 0x62, 0x89, 0x8F, 0x82, 0x2B, 0x1D, 0xBB, 0xF5, 0xE4, 0x27, 0xC6, 0x70, 0x37, 0x65, 0xEB, 0x9A, 0xB7, 0xA1, 0x9D, 0xE2, 0x2F, 0x9D, 0x47, 0x34, 0x7B, 0x3E, 0x7A, 0x8F, 0x1D, 0xAF, 0x2E, 0xA6, 0xFE, 0x75, 0xE3, 0x0B, 0xA0, 0xBF, 0xDA, 0xCA, 0x97, 0x96, 0x0E, 0xF6, 0xE2, 0xF7, 0xAE, 0xC1, 0x8C, 0xF8, 0x7A, 0x92, 0x79, 0xE5, 0x00, 0xC1, 0xC0, 0x75, 0x01, 0x4D, 0x6F, 0x6F, 0x00, 0xDA, 0xC0, 0xB1, 0xBB, 0x89, 0xA3, 0x26, 0xE0, 0x41, 0xBF, 0x30, 0xAD, 0xB6, 0x43, 0xCC, 0x1C, 0xF2, 0xB7, 0xC1, 0xC0, 0xEA, 0xC0, 0x7D, 0x60, 0xB9, 0x57, 0x7D, 0x81, 0x66, 0xDD, 0x38, 0x3E, 0xC5, 0x5C, 0x49, 0xCB, 0xF2, 0xE9, 0x5F, 0x56, 0x5C, 0x40, 0x8C, 0x39, 0x5B, 0x0E, 0xE8, 0x79, 0x8F, 0x6A, 0xF5, 0x27, 0x3D, 0x45, 0x9F, 0x04, 0x4F, 0x65, 0x79, 0x49, 0xE6, 0x3D, 0x85, 0xBB, 0xFA, 0xB9, 0x97, 0x06, 0x60, 0x06, 0xC8, 0x82, 0x61, 0xFE, 0xAE, 0xEB, 0xCA, 0x5B, 0xCF, 0xFA, 0x93, 0x79, 0x3B, 0xB7, 0xBD, 0x00, 0x9E, 0x7C, 0x92, 0x41, 0x8D, 0x02, 0x86, 0x30, 0x20, 0x0B, 0xD0, 0x7D, 0x73, 0x1C, 0x9F, 0x18, 0xDB, 0x10, 0xA5, 0xD1, 0xD0, 0x09, 0x23, 0xEC, 0x3B, 0xD4, 0x08, 0x06, 0xC7, 0xE2, 0x77, 0xD1, 0x19, 0x83, 0xD1, 0xF4, 0xCC, 0x7D, 0x05, 0x3D, 0xB7, 0xDE, 0x3E, 0x07, 0x42, 0x3F, 0x62, 0x07, 0xC5, 0x2B, 0x28, 0x03, 0x27, 0x2C, 0xE9, 0xB9, 0x36, 0xC7, 0x3D, 0x0B, 0xF0, 0x06, 0x9D, 0x74, 0x6E, 0x3D, 0x45, 0x4B, 0xA1, 0x77, 0x77, 0x9A, 0x4A, 0xA0, 0xE5, 0x56, 0xD8, 0x67, 0x48, 0x73, 0x94, 0x07, 0x45, 0x7A, 0x45, 0xE9, 0x1C, 0xFF, 0x8A, 0x4F, 0x2F, 0x5C, 0xEF, 0xFE, 0x09, 0x73, 0xEE, 0xD6, 0x8B, 0x66, 0x9F, 0xAA, 0x82, 0x00, 0x8E, 0x01, 0x6A, 0xFB, 0xCA, 0x33, 0x41, 0x07, 0x8D, 0x26, 0xCB, 0x7F, 0x35, 0xAD, 0x95, 0x79, 0x79, 0x22, 0xCB, 0x66, 0xFB, 0x09, 0x08, 0x4E, 0xE7, 0x62, 0x38, 0x07, 0x75, 0xD0, 0xB5, 0xF6, 0xC9, 0xED, 0x60, 0xD9, 0x1B, 0x77, 0x22, 0xFD, 0xD4, 0xE9, 0xCA, 0xBC, 0x7A, 0x4D, 0x4C, 0xB2, 0xC8, 0x47, 0xE6, 0xEC, 0xD0, 0xA1, 0xCD, 0x7F, 0x20, 0x0E, 0xF5, 0x1D, 0xB8, 0xB4, 0xA1, 0xDF, 0xAA, 0x53, 0x4F, 0x6D, 0xD8, 0xD5, 0xE8, 0x3A, 0xE9, 0x52, 0xA6, 0x7E, 0x8C, 0x3F, 0x9A, 0x72, 0x11, 0xF7, 0x5C, 0x2C, 0xF6, 0x2B, 0x59, 0x54, 0x70, 0xE9, 0x60, 0x80, 0x71, 0xC1, 0xCD, 0xDF, 0x00, 0xB3, 0x3B, 0x8E, 0x2B, 0x3C, 0xB1, 0xD1, 0x6A, 0x71, 0x70, 0x8B, 0xD2, 0xB7, 0x59, 0xBB, 0xE3, 0x92, 0xF0, 0x76, 0x29, 0x30, 0xD4, 0xE5, 0x95, 0x68, 0xE3, 0x2F, 0xDB, 0x78, 0xFB, 0xD0, 0x6A, 0xFD, 0xD1, 0x06, 0xF3, 0xC7, 0xB9, 0xFF, 0x15, 0x6D, 0x58, 0x07, 0x47, 0xC8, 0xDD, 0x3E, 0x30, 0x12, 0x06, 0x8A, 0x57, 0x75, 0x25, 0x9E, 0xCE, 0xCC, 0xA3, 0x77, 0x77, 0x1A, 0x61, 0x9E, 0x2F, 0x91, 0x40, 0x16, 0x30, 0x6B, 0x43, 0x9E, 0x7A, 0x45, 0xAE, 0x88, 0x28, 0xFE, 0x09, 0xAE, 0xEC, 0x79, 0x51, 0xC0, 0x16, 0x74, 0xEC, 0x25, 0x95, 0x8E, 0x12, 0x38, 0xFB, 0xB0, 0x0E, 0x20, 0xCC, 0x8F, 0x99, 0x3B, 0x80, 0x3C, 0x49, 0xAB, 0x09, 0xAA, 0xB0, 0xC7, 0xFE, 0x73, 0x86, 0xE2, 0x16, 0x35, 0x8A, 0x8E, 0x42, 0xCE, 0x01, 0x6F, 0xD4, 0x56, 0xFE, 0x54, 0x98, 0xE9, 0x47, 0x24, 0xB2, 0xF5, 0x2D, 0xB8, 0xF0, 0xCD, 0x9C, 0x96, 0x67, 0x1E, 0x54, 0xBD, 0xA7, 0x88, 0x3D, 0x94, 0xF6, 0x73, 0x7F, 0xA7, 0x17, 0xFA, 0xE9, 0xBE, 0x9C, 0x4C, 0x4F, 0x58, 0x03, 0x09, 0x1D, 0x6D, 0x0B, 0x01, 0xBC, 0x5F, 0x67, 0x25, 0x85, 0xE4, 0x78, 0x2D, 0xD0, 0xB3, 0x0B, 0x93, 0x3E, 0x0B, 0x9A, 0x3B, 0x30, 0x5C, 0x3B, 0xAE, 0x9C, 0xEE, 0xDF, 0x4D, 0x14, 0x10, 0x96, 0x89, 0x34, 0x60, 0x5C, 0xD7, 0xF6, 0x93, 0x9E, 0x7D, 0xD3, 0x69, 0x35, 0xBD, 0xCD, 0xC5, 0x8E, 0xE0, 0xE3, 0xAF, 0x87, 0xAD, 0xC3, 0x99, 0xF4, 0x3A, 0x9B, 0xAA, 0x7B, 0xB7, 0xAC, 0xD1, 0xCB, 0x3F, 0x98, 0xBC, 0xD4, 0xD4, 0x8E, 0x78, 0x7F, 0x9A, 0x09, 0x06, 0xCF, 0xB9, 0xEC, 0xE2, 0x1E, 0x40, 0x30, 0x52, 0x95, 0x7F, 0x31, 0x66, 0x17, 0x18, 0xD4, 0x37, 0x48, 0xE4, 0xF1, 0x1C, 0x07, 0x60, 0x1F, 0x9E, 0xDC, 0x90, 0x42, 0xF3, 0xD4, 0x5D, 0xD4, 0x9F, 0x23, 0x9F, 0xEE, 0x71, 0xB9, 0xB3, 0xDA, 0x34, 0x81, 0x53, 0xFF, 0x25, 0x0D, 0x96, 0x77, 0xD5, 0xB1, 0xEB, 0x67, 0xEE, 0x37, 0x10, 0xFE, 0x5F, 0xCD, 0x57, 0xE6, 0x99, 0xA0, 0xDF, 0x31, 0xB6, 0x79, 0xA7, 0xBE, 0x52, 0x50, 0xA5, 0x3F, 0x1F, 0x67, 0x84, 0xEE, 0x34, 0x53, 0xCC, 0x76, 0x81, 0xD1, 0x62, 0xA3, 0xA0, 0xCF, 0x05, 0x94, 0x95, 0x45, 0xC6, 0x3B, 0x2B, 0xAB, 0x78, 0x98, 0xE9, 0xEF, 0x77, 0x1A, 0x3F, 0x3F, 0x75, 0x30, 0x05, 0x1E, 0x06, 0xF5, 0xA2, 0x98, 0xCE, 0xE6, 0x32, 0xEB, 0xDB, 0xEF, 0x92, 0x55, 0x15, 0x0C, 0x34, 0xF0, 0xC2, 0xB3, 0xC3, 0x16, 0xA7, 0xBA, 0xCB, 0x68, 0x80, 0xBD, 0xA7, 0x16, 0x40, 0xFC, 0x63, 0xBB, 0x04, 0xAC, 0xEF, 0x48, 0x8C, 0x2F, 0x68, 0x9F, 0x29, 0x20, 0x0C, 0xD0, 0x00, 0xFC, 0x2A, 0xAD, 0x85, 0xD1, 0xB0, 0x09, 0xB8, 0xC1, 0x79, 0x36, 0x62, 0x48, 0x18, 0x1F, 0xF8, 0x3C, 0xBA, 0x6A, 0x8F, 0x55, 0x89, 0xC5, 0x74, 0x74, 0xBB, 0x9F, 0x5E, 0xA1, 0xE3, 0xBE, 0xAF, 0x52, 0x49, 0xF7, 0x34, 0x6F, 0x4D, 0xBC, 0x07, 0xE0, 0xA5, 0xAD, 0x4F, 0x01, 0xC6, 0x17, 0x7B, 0xFE, 0x7C, 0x46, 0xDA, 0x06, 0xE1, 0x60, 0xAD, 0x4D, 0x39, 0x70, 0xC6, 0xF7, 0x39, 0x95, 0x8A, 0x07, 0xAA, 0xB5, 0x9D, 0xDF, 0x6D, 0x9F, 0xFA, 0xD1, 0xC9, 0xEF, 0x01, 0x84, 0xD9, 0xC0, 0x8B, 0x10, 0xC0, 0x13, 0x88, 0x03, 0x34, 0x77, 0xAE, 0xBA, 0x7F, 0xAF, 0x02, 0xF0, 0x04, 0x0E, 0x0F, 0x52, 0x0B, 0x7A, 0xE7, 0xDA, 0x1F, 0xA3, 0xC5, 0x47, 0x02, 0x7D, 0x3B, 0x35, 0xC7, 0x95, 0xAA, 0x50, 0x26, 0xB9, 0x97, 0x77, 0xD9, 0x2C, 0x91, 0xEF, 0x06, 0xFA, 0x89, 0xB2, 0x08, 0x97, 0xD1, 0xCA, 0x37, 0x46, 0x3E, 0x7F, 0x75, 0x63, 0x06, 0xA4, 0x7C, 0xB3, 0xD9, 0xA9, 0xA7, 0xB6, 0x27, 0x7A, 0x1E, 0xE5, 0x0B, 0x86, 0xED, 0x35, 0x97, 0x3F, 0x2D, 0xA9, 0x9F, 0xBC, 0x84, 0xA7, 0x53, 0x6A, 0x3E, 0x83, 0x64, 0x12, 0xE0, 0xE0, 0xAA, 0x85, 0xF6, 0x47, 0xC1, 0x2F, 0x3F, 0x4D, 0x44, 0x8C, 0xDE, 0x74, 0x20, 0xE2, 0x9E, 0xA6, 0x7C, 0x25, 0xF5, 0x23, 0x1C, 0x2F, 0x9F, 0x26, 0x22, 0xF5, 0xF4, 0x35, 0xDE, 0xE1, 0xA0, 0x5B, 0xD2, 0x12, 0x8A, 0xBE, 0x07, 0x31, 0xF7, 0x9E, 0xEE, 0x18, 0x78, 0x22, 0xCD, 0xAD, 0xE0, 0x2E, 0x01, 0x7D, 0xDC, 0xCC, 0xDC, 0xBB, 0x28, 0xCB, 0xE5, 0x3B, 0x2E, 0x52, 0x80, 0x39, 0x40, 0x19, 0xE0, 0x03, 0xD0, 0x03, 0xC8, 0x63, 0xB7, 0xCB, 0xDE, 0x8A, 0xB8, 0x7A, 0xE7, 0x5B, 0x87, 0x12, 0x4F, 0x27, 0x20, 0x1D, 0x0C, 0x08, 0xFA, 0xC8, 0x39, 0x6F, 0xD8, 0x9A, 0xF2, 0x2B, 0x55, 0xA8, 0xFF, 0xD5, 0xDE, 0xB8, 0x3F, 0x1D, 0x40, 0xF5, 0xDB, 0xCB, 0xF2, 0xD3, 0x84, 0xCF, 0x3F, 0x13, 0x34, 0x9F, 0x39, 0x4C, 0xAB, 0x7D, 0xCE, 0xB6, 0x30, 0x1E, 0x7A, 0x8A, 0xA0, 0x29, 0x81, 0x21, 0xB1, 0x8F, 0x71, 0xFB, 0x36, 0xA4, 0x37, 0xF8, 0xA5, 0x0D, 0xD6, 0xF1, 0xC9, 0xC3, 0x75, 0x66, 0xA6, 0xF0, 0x68, 0x6D, 0xCC, 0xDF, 0xA0, 0x54, 0x46, 0x00, 0xD3, 0xDC, 0x03, 0x00, 0x56, 0xE9, 0x95, 0xB2, 0x74, 0xEF, 0xD6, 0x5C, 0x3B, 0x83, 0x57, 0xB8, 0x91, 0x95, 0xBE, 0xF5, 0x3D, 0x67, 0xBB, 0xE5, 0x3F, 0xED, 0xBF, 0x2C, 0xEF, 0xF6, 0x8D, 0x19, 0x80, 0xF8, 0x47, 0x14, 0xE0, 0x2C, 0xF4, 0xD3, 0xCA, 0x92, 0x36, 0x4F, 0x40, 0xAE, 0x87, 0xB0, 0xEB, 0x35, 0x52, 0xAF, 0x5E, 0x7A, 0x30, 0x1A, 0xFB, 0x1A, 0x87, 0xDE, 0x95, 0x2B, 0x7D, 0x6B, 0xEF, 0xB7, 0x1B, 0x6E, 0xEF, 0x6D, 0x58, 0xAE, 0xFB, 0xCA, 0xEF, 0x3F, 0x06, 0x24, 0x1D, 0x35, 0xCA, 0x3B, 0x8A, 0xFC, 0x49, 0x9D, 0x38, 0x06, 0x3C, 0x44, 0xAC, 0x7A, 0x53, 0x11, 0x0C, 0xD0, 0x00, 0xDC, 0xB7, 0xC6, 0xA5, 0xB7, 0xE2, 0x4C, 0x36, 0xBD, 0xA1, 0xF0, 0x29, 0x8C, 0x8D, 0xDC, 0x99, 0x20, 0xB2, 0x93, 0x95, 0x6E, 0x38, 0xE6, 0x92, 0x51, 0xCE, 0xEF, 0x3A, 0x04, 0xEA, 0xD3, 0x03, 0x2F, 0x15, 0xB0, 0x59, 0xE8, 0xA2, 0x80, 0xAA, 0xB7, 0xEA, 0xD1, 0x9E, 0x63, 0x58, 0x07, 0x10, 0xC6, 0x46, 0xC6, 0x40, 0x0A, 0xD0, 0x7C, 0xC5, 0x68, 0xB3, 0xF9, 0x89, 0xDA, 0x9C, 0x09, 0x5A, 0x09, 0x42, 0x71, 0xD9, 0x97, 0x2B, 0x12, 0xA7, 0xE4, 0x2D, 0x7C, 0xD7, 0x64, 0x2F, 0x68, 0xE1, 0x4E, 0xD0, 0x97, 0x2B, 0x92, 0x4D, 0x14, 0x85, 0x82, 0xFA, 0xF9, 0x64, 0x5E, 0xF8, 0x67, 0x68, 0xB5, 0xEE, 0x16, 0x20, 0xEB, 0xEB, 0xE0, 0xB9, 0xA2, 0xD6, 0xBC, 0x2B, 0x23, 0x36, 0xF3, 0xCA, 0x88, 0x51, 0x9A, 0xC5, 0xFE, 0xCE, 0x31, 0xF4, 0xC2, 0xED, 0xD7, 0x0D, 0xBB, 0x72, 0xEE, 0x61, 0x9F, 0x79, 0x7A, 0x86, 0xCC, 0x27, 0x6E, 0x92, 0xBE, 0x60, 0x11, 0x6C, 0x02, 0x1D, 0xF4, 0xD0, 0x28, 0xA0, 0xFB, 0xD0, 0x00, 0xBB, 0x72, 0x2B, 0xD0, 0x2A, 0x98, 0xAF, 0xAC, 0xD1, 0xAE, 0xAE, 0xC6, 0xBF, 0xFA, 0x6E, 0x45, 0xDE, 0xC7, 0xF8, 0x2D, 0xE2, 0x3A, 0x9B, 0xF8, 0x1F, 0x83, 0x45, 0x28, 0x60, 0xAD, 0x27, 0xC2, 0x02, 0x32, 0xE5, 0x2F, 0x78, 0x52, 0xB3, 0x3F, 0x57, 0x28, 0xDD, 0x78, 0xB2, 0xB8, 0xCA, 0xAE, 0xEB, 0xB9, 0x09, 0xF6, 0xBE, 0x69, 0x7C, 0x93, 0x7B, 0xC6, 0x9B, 0xE3, 0x77, 0x75, 0x35, 0x0E, 0x7C, 0x0B, 0xB6, 0x13, 0xF8, 0xE4, 0x2C, 0x04, 0x91, 0x80, 0xE5, 0x67, 0x31, 0x93, 0xFF, 0x90, 0x90, 0x31, 0x07, 0xA6, 0x3F, 0x6B, 0x5A, 0x7F, 0x0E, 0x1D, 0x0A, 0xE8, 0x67, 0xEB, 0xB0, 0x3F, 0xAB, 0xC9, 0xBF, 0x41, 0xAD, 0xE2, 0x6A, 0x44, 0xAF, 0x42, 0x93, 0x9F, 0xD7, 0x6A, 0x35, 0x12, 0x88, 0x4B, 0x99, 0xEC, 0x55, 0x91, 0x62, 0x1D, 0xDF, 0x9D, 0x80, 0x21, 0xDC, 0xBF, 0x56, 0x2D, 0x8C, 0x05, 0x31, 0xC7, 0x0C, 0x30, 0x06, 0x66, 0x03, 0x38, 0x7A, 0x37, 0x76, 0x2A, 0xBF, 0xDD, 0x64, 0x31, 0x9F, 0xB2, 0x76, 0x4C, 0x26, 0x60, 0x18, 0xA2, 0x7E, 0x02, 0x95, 0x8F, 0x2C, 0x4E, 0x02, 0x33, 0x1F, 0x75, 0x1C, 0x01, 0xBA, 0x17, 0x7C, 0xE5, 0xEA, 0xCB, 0x8E, 0x04, 0x88, 0x3B, 0xF0, 0x60, 0x77, 0x8B, 0x4C, 0x0F, 0x40, 0x0E, 0xA0, 0x83, 0x57, 0xD4, 0x1E, 0xAB, 0xE9, 0xCF, 0x35, 0x94, 0x65, 0xDB, 0x5D, 0xAC, 0x57, 0x76, 0xCF, 0x2E, 0x67, 0x47, 0x6D, 0x1F, 0x4B, 0x1D, 0x5B, 0xA7, 0x70, 0x32, 0xE6, 0x79, 0x27, 0xAC, 0x71, 0x04, 0xB0, 0x7B, 0xE7, 0x53, 0x33, 0xA9, 0xDC, 0x0D, 0x81, 0x39, 0x40, 0x3A, 0x20, 0x57, 0xF7, 0xD9, 0xA0, 0x27, 0xF5, 0xF1, 0x1F, 0x4E, 0xED, 0x66, 0xDE, 0xBC, 0x0D, 0x50, 0x12, 0xE5, 0x55, 0x60, 0xDE, 0x55, 0x86, 0x0E, 0xE3, 0xFA, 0x8B, 0xF7, 0xC9, 0x7D, 0x54, 0xEB, 0x04, 0x8A, 0xF8, 0xB4, 0xCE, 0x93, 0xBA, 0xEB, 0x0E, 0xFC, 0x00, 0xCA, 0x87, 0xFA, 0x5F, 0x75, 0x2C, 0x78, 0xF3, 0xDD, 0x09, 0xD2, 0x7E, 0xB7, 0x76, 0x0D, 0xDB, 0x2A, 0xEC, 0x80, 0xDB, 0xB2, 0xE4, 0x0E, 0x4B, 0x99, 0x6C, 0x83, 0x05, 0x45, 0xF2, 0x65, 0x9E, 0xAB, 0xB3, 0xC3, 0xD8, 0x15, 0x96, 0xE2, 0xDF, 0x26, 0xFD, 0xA4, 0x3A, 0x0A, 0x0F, 0x60, 0xF4, 0xCF, 0x3A, 0x3D, 0xCE, 0x80, 0x3A, 0x4C, 0x32, 0xB9, 0x5B, 0xEC, 0xEE, 0xDB, 0x1D, 0xBB, 0xEC, 0x6F, 0x06, 0x1A, 0x43, 0x32, 0xD2, 0xAF, 0x43, 0xF7, 0x3C, 0x9E, 0x9E, 0x94, 0x3B, 0x66, 0x2A, 0x09, 0x58, 0x00, 0xAE, 0xFC, 0xB4, 0x18, 0xC0, 0x65, 0x31, 0x00, 0xA3, 0xA4, 0xAC, 0x95, 0xD7, 0xFA, 0x54, 0xB2, 0x0F, 0xC0, 0x94, 0x01, 0x7E, 0xE2, 0x0A, 0x7F, 0x9C, 0x56, 0x63, 0x6D, 0x01, 0x77, 0xA9, 0x80, 0x6B, 0xD2, 0x15, 0x55, 0x08, 0xA9, 0x48, 0x20, 0x50, 0xC7, 0x8A, 0x29, 0xB1, 0x29, 0x87, 0x68, 0x5D, 0x26, 0x1C, 0x6B, 0xF9, 0x3D, 0xE0, 0x2A, 0x0F, 0xB8, 0x9C, 0x6F, 0x94, 0x3C, 0x17, 0xC0, 0xB9, 0x51, 0x14, 0x60, 0x0E, 0x9C, 0x37, 0xA6, 0xA7, 0xF2, 0xE7, 0x88, 0x13, 0xDE, 0xB7, 0x29, 0x16, 0xC3, 0xF4, 0xED, 0xF5, 0x91, 0xBC, 0xE7, 0x7A, 0x56, 0x48, 0x18, 0x3E, 0xDD, 0xFD, 0xD5, 0xB9, 0x90, 0x01, 0x4D, 0xF8, 0xA2, 0xFE, 0xAB, 0x15, 0x74, 0xFE, 0x57, 0x6F, 0x41, 0x07, 0x4E, 0x00, 0x7A, 0xE5, 0x97, 0xC0, 0x6A, 0x68, 0x8F, 0x37, 0x7B, 0x51, 0xB2, 0x63, 0xEB, 0xED, 0x47, 0xCF, 0x0B, 0xCC, 0xCC, 0xD5, 0x5C, 0x86, 0xE6, 0x47, 0x20, 0xFC, 0x86, 0x9F, 0xC9, 0x37, 0x02, 0xCA, 0x85, 0xA1, 0xF0, 0x05, 0x5F, 0x6D, 0x89, 0x0D, 0xB6, 0x96, 0x50, 0xED, 0x05, 0xD0, 0x7D, 0x18, 0x07, 0x10, 0x01, 0x66, 0x4F, 0x73, 0xC6, 0xD6, 0x10, 0xFB, 0x49, 0xF4, 0x2D, 0x3C, 0x67, 0x91, 0x47, 0x3E, 0xA7, 0x88, 0xC6, 0x06, 0xA5, 0x7E, 0x4B, 0x4C, 0x1C, 0x5E, 0x8D, 0x02, 0x48, 0x01, 0xC2, 0x17, 0xB6, 0x98, 0x3B, 0x3D, 0xAB, 0xA8, 0x59, 0xE4, 0xC0, 0xF9, 0x74, 0xB3, 0xD4, 0xBC, 0x35, 0x85, 0x45, 0x1E, 0x49, 0x29, 0x1A, 0x2D, 0xB1, 0xAA, 0x69, 0x6D, 0x69, 0x7B, 0xA0, 0x90, 0xDF, 0xF2, 0xB7, 0xA6, 0x9A, 0x25, 0x7E, 0x5D, 0x1D, 0x9B, 0xC0, 0xF8, 0x4A, 0xEE, 0x06, 0x83, 0x79, 0x9F, 0x8C, 0x35, 0x76, 0x9E, 0xCC, 0xAB, 0xF6, 0x2E, 0xFE, 0xBA, 0x49, 0x14, 0xD0, 0x07, 0x08, 0x07, 0xC4, 0x6E, 0xC1, 0x15, 0xE6, 0x1B, 0x0B, 0xDD, 0x7A, 0x57, 0xBB, 0xB8, 0xC3, 0x37, 0xD7, 0x89, 0xA9, 0x4C, 0xA7, 0xE9, 0xE0, 0x3E, 0x05, 0x88, 0x2C, 0x12, 0xE0, 0xF2, 0x3D, 0xBE, 0x38, 0x1F, 0xC4, 0x2D, 0x5D, 0x34, 0x6B, 0x51, 0x5B, 0xA8, 0xF0, 0x21, 0xE0, 0x03, 0xA8, 0xDC, 0xEA, 0xD7, 0xF6, 0x67, 0xB5, 0x42, 0xF2, 0xB2, 0x39, 0x24, 0x35, 0x33, 0x11, 0x90, 0xEF, 0xC1, 0x79, 0xA5, 0x02, 0xEE, 0xCE, 0x8D, 0xE2, 0x45, 0x2A, 0x06, 0x0E, 0xF6, 0x02, 0xFF, 0x1E, 0x70, 0xF5, 0x55, 0x53, 0x52, 0x7D, 0x82, 0xEC, 0xED, 0xB8, 0x92, 0xFB, 0xCE, 0xFD, 0x30, 0x80, 0x9A, 0x08, 0x3D, 0x8B, 0xB3, 0x67, 0xB5, 0xD9, 0x98, 0xD5, 0xA6, 0xC7, 0xB2, 0xB8, 0xDD, 0x9B, 0x6D, 0x35, 0xF6, 0xA2, 0xC2, 0x3C, 0x07, 0x6A, 0x65, 0xED, 0x94, 0xB7, 0x64, 0xF8, 0xE4, 0x56, 0x12, 0xB2, 0xC5, 0xE3, 0xDA, 0x56, 0xA0, 0xFB, 0x96, 0xCF, 0x31, 0xFA, 0x4D, 0x06, 0x08, 0x05, 0xFC, 0xF0, 0x21, 0xFF, 0x19, 0x01, 0x6D, 0xC0, 0x7D, 0xA7, 0x50, 0xD2, 0x66, 0x8D, 0xCC, 0xDB, 0xA7, 0xCC, 0x78, 0x97, 0x1F, 0x48, 0x53, 0x6B, 0xB4, 0xE5, 0x26, 0x64, 0xD4, 0xEF, 0x0B, 0x86, 0x06, 0x04, 0x5D, 0xF5, 0x37, 0x3F, 0xA7, 0x6F, 0x55, 0xD2, 0x66, 0x15, 0xE1, 0xB3, 0xE8, 0xC7, 0x9F, 0x74, 0x84, 0xE3, 0xC8, 0xB8, 0x89, 0xF8, 0x40, 0xFB, 0x42, 0x00, 0x68, 0x07, 0xEC, 0xA2, 0x1F, 0x9B, 0xE4, 0x91, 0x5B, 0x89, 0x1E, 0xBB, 0x83, 0x84, 0x3C, 0xCA, 0xD6, 0xB1, 0xC6, 0xCE, 0x7C, 0xAB, 0x39, 0x82, 0xA1, 0x9C, 0x05, 0xB3, 0x08, 0xE4, 0x71, 0x8A, 0xD4, 0x22, 0x72, 0x21, 0x40, 0x1E, 0xB6, 0x6C, 0x01, 0x9E, 0x88, 0x69, 0x01, 0xA6, 0xFB, 0x70, 0x00, 0x77, 0xE0, 0x2C, 0x34, 0xF6, 0x95, 0xA6, 0xD1, 0x70, 0x38, 0xF3, 0x1E, 0xDC, 0xEA, 0xCC, 0x98, 0xE2, 0xBF, 0x26, 0xA4, 0x3A, 0xDA, 0x46, 0x3E, 0x63, 0x7E, 0x33, 0x58, 0x60, 0x33, 0xAF, 0xBB, 0x9B, 0x54, 0xF6, 0x47, 0xCE, 0xFB, 0x6C, 0x49, 0xC1, 0xD9, 0xC4, 0x6D, 0xD3, 0xFD, 0xD2, 0x0D, 0x50, 0x0E, 0xD8, 0x0B, 0x50, 0x79, 0x87, 0x16, 0x55, 0x26, 0xE1, 0xA9, 0x85, 0x4B, 0x99, 0x5D, 0x59, 0x56, 0x2E, 0xC5, 0x7E, 0xD0, 0x67, 0x9D, 0x2B, 0xDD, 0xF9, 0xCB, 0xAF, 0x62, 0x80, 0x3A, 0x70, 0x9A, 0xE1, 0xFE, 0x45, 0x2E, 0x02, 0xB8, 0x33, 0x36, 0x7E, 0x17, 0x72, 0xA0, 0x16, 0x31, 0x80, 0x1A, 0xCB, 0x69, 0x00, 0xD5, 0x5B, 0x42, 0xC0, 0x67, 0x6D, 0x56, 0xE8, 0xBC, 0x73, 0xF2, 0xB5, 0xD2, 0xC0, 0x4A, 0xEF, 0x5D, 0xF4, 0x98, 0xE0, 0xCF, 0x1D, 0xAC, 0x7A, 0x3A, 0xF9, 0xA6, 0x8E, 0x49, 0x02, 0x99, 0x6F, 0xD7, 0x2B, 0x0A, 0x8F, 0x58, 0xAE, 0x52, 0x09, 0x3C, 0x49, 0x10, 0xE6, 0x38, 0x80, 0xC9, 0xC2, 0x5F, 0x63, 0xED, 0x52, 0x1F, 0xFA, 0x0C, 0xB7, 0xDA, 0x1C, 0x7B, 0xDD, 0x61, 0x5A, 0xFD, 0xF6, 0xE3, 0xD2, 0xBD, 0xD5, 0xC5, 0x33, 0x18, 0x86, 0x61, 0xCC, 0x9D, 0x64, 0x0C, 0xAB, 0x74, 0x00, 0xAA, 0x74, 0x34, 0x2C, 0xCE, 0x7F, 0x28, 0x53, 0xAB, 0x03, 0xB5, 0xC8, 0x03, 0x28, 0xEF, 0x33, 0x0D, 0xA8, 0xDF, 0x93, 0x33, 0x0E, 0x6D, 0x26, 0x3F, 0x95, 0x50, 0x6D, 0xB9, 0x42, 0xEB, 0xC7, 0x0C, 0xBB, 0x48, 0x25, 0x16, 0x8A, 0x33, 0x6C, 0x45, 0x04, 0x7B, 0xB6, 0x30, 0xBD, 0x9B, 0x37, 0x83, 0x4B, 0x6C, 0xDF, 0xE6, 0xD3, 0x8A, 0x51, 0xD6, 0xC9, 0x48, 0x61, 0x73, 0x13, 0x20, 0x06, 0xC8, 0x4B, 0x09, 0x7D, 0xE3, 0x0A, 0xEE, 0x2B, 0x9F, 0x8A, 0x6D, 0xEF, 0x51, 0xED, 0xB0, 0x59, 0xA0, 0x21, 0x2F, 0xAA, 0x63, 0x2E, 0x95, 0xDF, 0x84, 0xE9, 0x9F, 0x5C, 0x6C, 0x7B, 0x2A, 0xD2, 0xAA, 0x00, 0x75, 0xE0, 0xE4, 0x42, 0xEE, 0x4F, 0x1E, 0x77, 0x54, 0x25, 0x06, 0xF0, 0x85, 0xD4, 0x1D, 0x63, 0xB1, 0xB8, 0x53, 0xC7, 0x23, 0x69, 0x34, 0xFD, 0x8D, 0x86, 0x8E, 0x8F, 0xBC, 0x7E, 0xD9, 0x55, 0x8D, 0x11, 0x2D, 0xC8, 0x32, 0x90, 0xFC, 0xE1, 0x48, 0xFF, 0x43, 0x6F, 0xFF, 0x5B, 0x32, 0x98, 0xA5, 0x24, 0x1C, 0x0D, 0xBE, 0xED, 0x8D, 0x3A, 0x57, 0xF4, 0x9C, 0xE3, 0x26, 0x16, 0x7D, 0x70, 0x53, 0xBB, 0xB0, 0x69, 0x29, 0xB9, 0xD9, 0xEC, 0xB9, 0x66, 0xCD, 0xDD, 0x55, 0x13, 0x29, 0x53, 0x50, 0x74, 0xDD, 0x21, 0x69, 0xB5, 0xFB, 0xC5, 0xDE, 0xF4, 0x75, 0xF7, 0x12, 0x5F, 0xD7, 0x78, 0xEC, 0x7D, 0xA2, 0x0A, 0x50, 0x07, 0xCE, 0x2C, 0x02, 0x90, 0x04, 0x92, 0x5D, 0x12, 0x0E, 0x30, 0xB3, 0x38, 0x40, 0x34, 0x20, 0x8A, 0x37, 0xE9, 0xBB, 0xA2, 0x48, 0xB7, 0x08, 0x6D, 0xC6, 0x28, 0xC1, 0xEA, 0x47, 0x0B, 0x70, 0xAA, 0x7F, 0x37, 0x33, 0xF3, 0x41, 0x3C, 0x01, 0x29, 0x7F, 0xD2, 0x56, 0xC8, 0xAE, 0xF3, 0xFC, 0x2F, 0x79, 0xCD, 0xE0, 0x15, 0x98, 0x8A, 0x82, 0xBC, 0x82, 0x36, 0x90, 0x0A, 0x3C, 0x5D, 0x88, 0x0C, 0x10, 0xFF, 0x28, 0xC9, 0x31, 0x58, 0xC6, 0xD4, 0xE2, 0x66, 0x02, 0xC3, 0xBE, 0x99, 0x38, 0x58, 0xF1, 0xBA, 0x18, 0x77, 0x1F, 0xF5, 0x93, 0x77, 0x33, 0xEC, 0x63, 0x0B, 0xD9, 0x87, 0x06, 0x54, 0x2D, 0x72, 0xF1, 0x91, 0xA5, 0xC8, 0xBE, 0x0B, 0x65, 0xC7, 0x81, 0x4C, 0x40, 0x17, 0x47, 0x00, 0x5D, 0x4C, 0x3F, 0xD3, 0x13, 0x69, 0x09, 0x51, 0x02, 0x73, 0x75, 0xFF, 0x8B, 0xC2, 0xDF, 0x89, 0x31, 0xA5, 0xC8, 0xDD, 0x34, 0x45, 0xAA, 0x78, 0xD4, 0xCF, 0xF5, 0xB2, 0xF9, 0x45, 0xD1, 0xDF, 0x53, 0x9A, 0xF8, 0x73, 0xB4, 0xE6, 0xB5, 0x7A, 0x8D, 0xB0, 0x88, 0x04, 0x74, 0xEE, 0x36, 0xEC, 0xD3, 0xC0, 0xE3, 0x91, 0xA5, 0xC7, 0x6A, 0xBD, 0xDA, 0x76, 0xDE, 0x42, 0xCE, 0x3D, 0xE2, 0xCE, 0x93, 0x39, 0x6B, 0xCC, 0x37, 0xF6, 0xDB, 0x57, 0x9D, 0x8F, 0x10, 0xDD, 0x7D, 0x0F, 0x17, 0x07, 0xD4, 0x16, 0x0D, 0x58, 0x02, 0xB5, 0x07, 0x57, 0x6F, 0x60, 0x02, 0x68, 0x05, 0x7C, 0x80, 0xA7, 0x22, 0xD7, 0xEE, 0x74, 0xFB, 0xCA, 0xC7, 0x6A, 0xF1, 0xAF, 0x07, 0xB5, 0x3E, 0xEC, 0x1C, 0xE0, 0xCE, 0x56, 0xA9, 0x8C, 0x13, 0xC4, 0xEA, 0x5A, 0x7A, 0x14, 0xCE, 0xB6, 0x1D, 0x79, 0x87, 0x8C, 0xEF, 0x0C, 0x79, 0x0A, 0xE0, 0xA2, 0xD2, 0x96, 0xC1, 0x7C, 0xDE, 0x0F, 0x00, 0xE9, 0xD7, 0x97, 0x91, 0x4F, 0x07, 0x8A, 0x30, 0xA0, 0xEB, 0x3D, 0x61, 0xF5, 0x8E, 0xB5, 0x7A, 0xF4, 0x1F, 0x75, 0x0D, 0x1B, 0xB1, 0x97, 0xF4, 0x37, 0x4A, 0x12, 0x8F, 0xA3, 0x7F, 0x3E, 0x62, 0x7E, 0x35, 0x40, 0x9F, 0x85, 0x2E, 0x02, 0x18, 0xA7, 0x4B, 0x63, 0x2D, 0x93, 0x40, 0x38, 0xE0, 0xC2, 0x87, 0xB7, 0xDE, 0xA9, 0x1E, 0x80, 0x3F, 0xB3, 0x7E, 0xAC, 0x96, 0x57, 0x8B, 0x9F, 0x58, 0x99, 0x13, 0xEB, 0x82, 0x7E, 0x40, 0xAE, 0x13, 0x7E, 0x66, 0x7B, 0x6A, 0x2A, 0xF4, 0xEC, 0xCA, 0xFF, 0x63, 0x86, 0xEA, 0x25, 0x03, 0x82, 0x8C, 0x80, 0xFD, 0xA2, 0x8B, 0x69, 0x20, 0xA9, 0xFA, 0x70, 0x80, 0xF3, 0x66, 0xD5, 0x22, 0x16, 0x75, 0x8F, 0x3C, 0xD3, 0x2B, 0xAF, 0x4F, 0xFA, 0x4D, 0xDD, 0x8E, 0x67, 0x16, 0x06, 0xE7, 0xDD, 0x7F, 0x56, 0xB4, 0xD7, 0xA7, 0xFD, 0xCF, 0x2C, 0xEA, 0xFF, 0x71, 0x79, 0x2F, 0xE4, 0x13, 0x07, 0x74, 0x01, 0x44, 0x01, 0x93, 0xEF, 0xE5, 0xB3, 0xEA, 0x57, 0xF9, 0xE3, 0xA7, 0xE0, 0x62, 0xD5, 0xC2, 0x05, 0xD1, 0xEB, 0x0A, 0xB4, 0xAB, 0xDB, 0x16, 0xF6, 0x35, 0x52, 0x6B, 0xD1, 0xEE, 0x4D, 0xF4, 0x73, 0x63, 0xF7, 0x7A, 0xAF, 0x20, 0x32, 0x8F, 0x2E, 0xFB, 0xD3, 0x7C, 0x46, 0x00, 0x17, 0x56, 0xC5, 0xDE, 0xCD, 0x79, 0xF9, 0x26, 0x53, 0xD5, 0x0C, 0x6F, 0xF2, 0x95, 0x85, 0x3F, 0x5E, 0xEE, 0xA7, 0x4F, 0x20, 0xDD, 0x92, 0xBD, 0x76, 0xA5, 0xFE, 0x1B, 0x30, 0x5C, 0x23, 0x35, 0x16, 0x0D, 0x58, 0x2C, 0x06, 0xF0, 0xC5, 0xEC, 0xDC, 0x2F, 0x65, 0x76, 0xF4, 0x7F, 0xE9, 0x75, 0x70, 0x15, 0x56, 0x7C, 0xA2, 0xF2, 0xE2, 0x9F, 0xD1, 0x7A, 0x45, 0x0F, 0x67, 0x65, 0xB6, 0x12, 0xF1, 0x0C, 0xFD, 0xC5, 0xA2, 0xA2, 0x63, 0xB6, 0xB2, 0x43, 0x56, 0xA9, 0xB6, 0x71, 0x3F, 0xFC, 0xF8, 0xBC, 0xCF, 0x33, 0x3F, 0xEF, 0x4C, 0x35, 0x4A, 0xC5, 0x2D, 0x7E, 0x0B, 0x04, 0x60, 0x1B, 0x2B, 0xCE, 0xBD, 0xCD, 0xD7, 0xC2, 0x04, 0x0F, 0x8F, 0xC1, 0x4C, 0xD4, 0xCB, 0x32, 0x96, 0x89, 0x9E, 0x3B, 0xC9, 0xB9, 0x9B, 0x21, 0x63, 0xBA, 0x38, 0xEF, 0x96, 0x29, 0xB4, 0x64, 0x0C, 0x30, 0x75, 0xAB, 0xBC, 0xAA, 0x2C, 0x12, 0xB0, 0x02, 0xFA, 0xDC, 0x8E, 0xD2, 0xB3, 0x9F, 0x66, 0x11, 0x0D, 0x9C, 0x6F, 0xB7, 0x1A, 0xB9, 0xFB, 0xDA, 0x57, 0xCD, 0xBF, 0x82, 0x8B, 0x00, 0x91, 0x8C, 0x81, 0x13, 0x57, 0xCF, 0xDD, 0xCF, 0xD2, 0xA4, 0xF1, 0x27, 0x75, 0x53, 0xBD, 0xFC, 0x12, 0x25, 0xAD, 0xC7, 0x6A, 0x4A, 0xA9, 0x72, 0xA6, 0x5C, 0x33, 0xE1, 0x77, 0x6D, 0x18, 0x06, 0x38, 0x6B, 0x82, 0xED, 0xEE, 0x29, 0xC9, 0x4E, 0x88, 0x4F, 0x32, 0x1D, 0x8F, 0xF3, 0x14, 0x84, 0xD3, 0x3B, 0xB7, 0x6D, 0xFA, 0xEF, 0xB0, 0x35, 0x8F, 0x60, 0x45, 0x35, 0x40, 0xD7, 0x04, 0xF5, 0x8E, 0xAC, 0x80, 0x14, 0xA0, 0x0A, 0x68, 0x03, 0xC6, 0xAF, 0x1D, 0x5B, 0x9E, 0x64, 0x97, 0x6C, 0x20, 0x94, 0x0F, 0x19, 0xB7, 0x04, 0x74, 0xE1, 0xFB, 0xA6, 0xF1, 0x52, 0xD0, 0x50, 0xEF, 0x32, 0x17, 0x1C, 0xBD, 0x15, 0x97, 0xA5, 0x1C, 0x24, 0x0C, 0x85, 0xCD, 0xBA, 0xE8, 0x65, 0x1B, 0xDA, 0xFB, 0x06, 0xD1, 0x87, 0xDA, 0x7D, 0x4C, 0x8E, 0xA4, 0xF7, 0x96, 0xCD, 0xE3, 0xD7, 0x06, 0xB9, 0xD9, 0xE7, 0xB9, 0x13, 0x2C, 0x16, 0x14, 0xB7, 0x8D, 0x5B, 0x7E, 0xD9, 0x1B, 0x78, 0xF2, 0xD4, 0xAF, 0x02, 0x7C, 0x7B, 0x3C, 0x8F, 0xC7, 0x79, 0xF5, 0xE6, 0x20, 0xB9, 0x2A, 0xF9, 0xF4, 0x53, 0x23, 0x36, 0x71, 0x3E, 0xFD, 0xFB, 0x9D, 0x6F, 0x2E, 0x98, 0x72, 0xBF, 0xF0, 0xB9, 0xCF, 0xC0, 0x39, 0x40, 0x04, 0xA0, 0x79, 0x4F, 0x53, 0x3F, 0xB7, 0x5E, 0x45, 0x18, 0x8D, 0x86, 0xEA, 0xCF, 0xE8, 0x6D, 0x89, 0xED, 0x86, 0xE6, 0x29, 0xA6, 0x90, 0xF9, 0xC2, 0xF1, 0x6C, 0xCA, 0x14, 0x0B, 0xBA, 0xB2, 0x44, 0x32, 0x2F, 0x3F, 0xE4, 0x37, 0xBC, 0xC2, 0xE8, 0xA7, 0xD1, 0x73, 0xF0, 0x94, 0x46, 0xA4, 0x03, 0xAD, 0x80, 0x3E, 0x22, 0x72, 0x80, 0x04, 0xD0, 0xCD, 0xB4, 0xB0, 0xB5, 0x36, 0x2F, 0x17, 0xE7, 0xAE, 0xD5, 0x16, 0x96, 0x5C, 0x29, 0x46, 0x15, 0x57, 0xD1, 0x06, 0x7C, 0x80, 0x72, 0xA0, 0x15, 0xA8, 0x5C, 0xC4, 0xFD, 0xA9, 0xED, 0xAA, 0xFE, 0x79, 0x85, 0x56, 0x00, 0x3D, 0x77, 0xB2, 0x82, 0x07, 0x70, 0xAE, 0xD3, 0x0E, 0x2A, 0x40, 0x68, 0x35, 0xFD, 0x9D, 0xD2, 0x2C, 0x1A, 0xD7, 0xF3, 0xB2, 0xD5, 0xBC, 0x9B, 0x4B, 0x0E, 0xA0, 0x77, 0xC4, 0x48, 0x1B, 0x54, 0x57, 0x87, 0x12, 0x0A, 0xB7, 0xCB, 0x3B, 0xAF, 0xFF, 0x3D, 0x55, 0x1A, 0x0C, 0x85, 0x33, 0xC8, 0xF4, 0x56, 0xA0, 0xB6, 0xE8, 0x3A, 0x6D, 0xFD, 0x41, 0xF2, 0x16, 0x1C, 0x6C, 0x96, 0xCB, 0x93, 0x37, 0xDC, 0x6C, 0x78, 0x46, 0x77, 0xE4, 0x1A, 0xB4, 0x76, 0x50, 0x72, 0xAD, 0x82, 0xA3, 0xE3, 0x72, 0xFD, 0x04, 0xAF, 0x95, 0xC3, 0xDE, 0x46, 0xF7, 0x7D, 0xB2, 0x03, 0xE0, 0x55, 0x55, 0xE4, 0xCE, 0x8B, 0xF7, 0x02, 0x26, 0x81, 0x76, 0xC0, 0x87, 0xFD, 0x22, 0x81, 0x30, 0xA0, 0x82, 0xAF, 0xD0, 0x68, 0x28, 0x2A, 0x10, 0xCD, 0x0D, 0x0B, 0x3B, 0x16, 0xE1, 0x8A, 0xDF, 0x06, 0x3F, 0x39, 0xAB, 0x4B, 0x29, 0xFB, 0xEF, 0x3F, 0x1B, 0x4E, 0x46, 0x22, 0x4C, 0xAC, 0xD1, 0xF2, 0x73, 0x01, 0x55, 0x5B, 0x33, 0xC7, 0x86, 0x04, 0x72, 0x57, 0xF6, 0x6A, 0xA0, 0xF7, 0x02, 0xCB, 0x1E, 0xF7, 0x5D, 0x80, 0x34, 0xD0, 0x0A, 0xFB, 0x50, 0x95, 0xF1, 0xEA, 0x7C, 0xA3, 0xFD, 0x08, 0x84, 0x6A, 0x70, 0x26, 0xAF, 0x45, 0x04, 0xD6, 0xEA, 0x5C, 0xD8, 0xED, 0x3E, 0x97, 0x03, 0xE4, 0x9A, 0xE2, 0x1C, 0x40, 0x12, 0xB0, 0x03, 0x14, 0x9B, 0x22, 0xED, 0xC8, 0xFE, 0xAB, 0x84, 0x00, 0x52, 0x80, 0x27, 0x7B, 0x32, 0x81, 0x31, 0x7A, 0x09, 0x68, 0x34, 0x47, 0x92, 0xD5, 0xF4, 0xCE, 0xC1, 0xC0, 0xBF, 0x4E, 0x0E, 0xB2, 0x4C, 0x2C, 0x60, 0x49, 0xF3, 0xD5, 0xF7, 0xAD, 0xAD, 0x09, 0xA8, 0x37, 0x43, 0xF1, 0x0C, 0x50, 0x73, 0xF5, 0x1A, 0x5F, 0xC7, 0xC5, 0x13, 0x67, 0xA7, 0x50, 0xAB, 0x3E, 0xCD, 0x40, 0x9C, 0x9D, 0x63, 0x0B, 0xD0, 0xFD, 0x19, 0xBC, 0x20, 0x0E, 0x0B, 0x7A, 0x3E, 0x9F, 0x22, 0xE8, 0x9B, 0x5C, 0xF7, 0xA5, 0xDE, 0xC3, 0x6E, 0x14, 0x86, 0x4C, 0x2A, 0xB4, 0xCA, 0x9A, 0xD5, 0x00, 0x77, 0x20, 0x0C, 0xC8, 0x00, 0xCA, 0x00, 0xD8, 0x65, 0xDD, 0xE6, 0x28, 0x7D, 0x00, 0x52, 0x81, 0x70, 0x40, 0x9F, 0x0A, 0x29, 0x20, 0x14, 0xA8, 0x7D, 0xB3, 0x1E, 0x9B, 0x05, 0xFC, 0x80, 0xD6, 0x2B, 0x23, 0x06, 0x1D, 0xB0, 0xB7, 0x7A, 0x16, 0xBF, 0x9E, 0xB6, 0x19, 0x53, 0x03, 0x4B, 0x18, 0xAC, 0xD4, 0x14, 0xEF, 0x03, 0xFA, 0xD5, 0x72, 0xC5, 0x38, 0x5D, 0x4B, 0x98, 0xBC, 0xC2, 0x08, 0xBF, 0xE5, 0x12, 0x08, 0xA3, 0xCE, 0x2B, 0x20, 0x0A, 0x74, 0xAC, 0x26, 0x64, 0xAF, 0x1A, 0x6E, 0xBF, 0x9D, 0x9F, 0xD9, 0x6C, 0xBB, 0x9F, 0x46, 0x28, 0xB2, 0x36, 0x93, 0x4F, 0xBA, 0xCC, 0xC9, 0x0F, 0xD6, 0x09, 0x36, 0x44, 0x2E, 0xFA, 0xD6, 0xEA, 0xA0, 0x16, 0x0D, 0xF3, 0xBC, 0x29, 0xFC, 0x33, 0x8B, 0x48, 0xE0, 0x1C, 0xBE, 0x79, 0x8B, 0xC9, 0x8C, 0xD2, 0x66, 0xF9, 0x24, 0xFF, 0xFF, 0x14, 0xCC, 0x54, 0xE5, 0xAD, 0x29, 0x90, 0xF2, 0x41, 0xF0, 0xBD, 0x03, 0xBE, 0xD7, 0x82, 0x73, 0x22, 0x20, 0x1A, 0x9C, 0x7D, 0xD5, 0x5F, 0xD2, 0x76, 0x30, 0xDE, 0xD3, 0xC1, 0x28, 0x1D, 0x16, 0xA9, 0x75, 0xE1, 0xD5, 0x0A, 0x78, 0xD4, 0xCA, 0xB7, 0xD6, 0xC6, 0x2E, 0xEB, 0xC0, 0x30, 0x89, 0x64, 0x01, 0xB8, 0x38, 0xD6, 0xBD, 0x57, 0x02, 0xBF, 0x87, 0xD6, 0xB6, 0xBE, 0x79, 0x7B, 0x24, 0x85, 0xAE, 0x67, 0x7C, 0xBD, 0x60, 0x0E, 0x6F, 0x24, 0xA4, 0x30, 0x0A, 0x78, 0x06, 0xA8, 0x02, 0x6A, 0x80, 0xCC, 0xA2, 0x01, 0x0B, 0xA0, 0x9F, 0x7E, 0x3F, 0x40, 0xCD, 0x22, 0x81, 0x14, 0xC0, 0x02, 0xD0, 0x03, 0xB0, 0xFB, 0x8F, 0x0E, 0x8D, 0x56, 0x2B, 0xD9, 0x72, 0x2B, 0x9B, 0xE4, 0x55, 0x76, 0xDF, 0x88, 0x18, 0xA0, 0xBF, 0x90, 0xFF, 0x8B, 0x83, 0xA9, 0x8A, 0x44, 0x81, 0x3D, 0x69, 0x5C, 0x8D, 0x7E, 0x28, 0x9A, 0x11, 0x40, 0x6C, 0x43, 0x8C, 0x84, 0x33, 0x1A, 0x96, 0x50, 0x20, 0x0E, 0xEC, 0x59, 0x06, 0x1C, 0x59, 0xF0, 0x61, 0x00, 0xF8, 0xBD, 0xDD, 0xE4, 0x23, 0xD7, 0x74, 0x7B, 0x9F, 0x70, 0x7F, 0x84, 0x38, 0xE8, 0xE8, 0xCC, 0x58, 0x61, 0xA3, 0xDA, 0xC4, 0xC9, 0xF5, 0x00, 0x45, 0x02, 0x62, 0x00, 0x45, 0x8F, 0xA6, 0x6F, 0x5F, 0x51, 0xE4, 0xFE, 0xC2, 0x00, 0x65, 0x40, 0x26, 0xE0, 0x07, 0xAF, 0xCC, 0x00, 0x65, 0xC0, 0xAC, 0x73, 0xF0, 0x1C, 0xDA, 0xAC, 0xD9, 0x04, 0xEF, 0xB2, 0x99, 0xB4, 0x21, 0x43, 0x29, 0xF4, 0x37, 0x59, 0xA4, 0xFC, 0xE7, 0xFC, 0x28, 0x45, 0x12, 0x7D, 0xA9, 0xBC, 0x62, 0xAE, 0x29, 0xAF, 0x22, 0x9C, 0x30, 0x92, 0x32, 0x18, 0xE6, 0xB9, 0xC7, 0x9D, 0x42, 0xE0, 0x1C, 0x23, 0x6B, 0x00, 0x37, 0x3C, 0x0C, 0xC1, 0x00, 0xEB, 0xC0, 0x27, 0xE4, 0x9D, 0xED, 0x35, 0xA6, 0xD6, 0xBB, 0x5B, 0xEB, 0x0F, 0xC9, 0x82, 0x5D, 0x72, 0xE7, 0x5A, 0x34, 0x46, 0x6B, 0xD8, 0x13, 0x3E, 0xB0, 0x9D, 0xD4, 0x18, 0x60, 0xD8, 0xA2, 0x31, 0x06, 0x17, 0x96, 0x0B, 0x59, 0x1C, 0xC0, 0x03, 0x98, 0x58, 0xAF, 0xF0, 0xA1, 0x4E, 0x2C, 0x70, 0x0A, 0x0F, 0x3B, 0x80, 0x30, 0xC0, 0x16, 0x51, 0x78, 0x25, 0x92, 0x36, 0x1B, 0xB4, 0xF9, 0x09, 0xC7, 0xF7, 0x33, 0x34, 0x8D, 0x6A, 0x33, 0x64, 0xA7, 0xC6, 0x0A, 0xF3, 0xAB, 0x42, 0xC9, 0x7F, 0x0C, 0xBD, 0xBA, 0xDD, 0xA8, 0xD0, 0xF1, 0x11, 0x07, 0xF3, 0x37, 0x9B, 0x77, 0xFE, 0x4A, 0x49, 0xA2, 0x80, 0x5E, 0xB0, 0x29, 0x03, 0xFD, 0x64, 0xD6, 0x97, 0xD0, 0x60, 0xE7, 0xB9, 0x75, 0x19, 0x73, 0xF0, 0x29, 0x28, 0x47, 0xFF, 0x9E, 0x96, 0xE2, 0xC9, 0xCA, 0x48, 0x01, 0xCE, 0x22, 0xEC, 0x6E, 0x28, 0xD0, 0x72, 0x1F, 0xC4, 0xAC, 0x01, 0x5F, 0x44, 0xFF, 0x57, 0xDC, 0x53, 0x80, 0xD3, 0xFB, 0xD0, 0x6E, 0xB9, 0xCD, 0x4E, 0xEA, 0xD2, 0x7E, 0xD5, 0x13, 0xDE, 0x46, 0xC6, 0xB5, 0x01, 0xE1, 0xC4, 0xF5, 0xF0, 0x6A, 0xF3, 0xA3, 0x13, 0xBF, 0xDB, 0xC1, 0xCC, 0x0A, 0x7A, 0xBA, 0xFF, 0xAC, 0x45, 0xAB, 0xC5, 0xE3, 0x51, 0xEB, 0x5B, 0x15, 0xA6, 0x92, 0xBE, 0x0B, 0xA0, 0x03, 0x30, 0x06, 0x63, 0xCF, 0xA7, 0x89, 0xEB, 0xF5, 0x0B, 0x74, 0xFC, 0xF0, 0xC6, 0xD3, 0x8F, 0x2C, 0x45, 0x09, 0xB3, 0xE5, 0xE9, 0x91, 0xA0, 0xF3, 0xE1, 0x96, 0x6F, 0xCD, 0xBA, 0x7D, 0x17, 0xBE, 0x30, 0x05, 0xB4, 0x17, 0x09, 0xD8, 0x01, 0xF2, 0xD3, 0x71, 0xBC, 0x05, 0xC8, 0x4F, 0x26, 0x6A, 0x2F, 0xBC, 0x6F, 0x8F, 0x65, 0xE4, 0x63, 0x35, 0x79, 0xAC, 0xD6, 0x0E, 0x7D, 0xA6, 0xDE, 0x64, 0x07, 0x5A, 0x0D, 0x41, 0x9B, 0x86, 0x20, 0x6D, 0x0E, 0x3C, 0x7F, 0xB8, 0x97, 0x1A, 0xFD, 0x90, 0x2E, 0x1F, 0xEF, 0xED, 0xA9, 0xFD, 0x86, 0x76, 0x47, 0x5A, 0x85, 0xA3, 0xC4, 0x01, 0xA6, 0x6F, 0xCE, 0xA7, 0x15, 0x96, 0x30, 0xB1, 0x9E, 0x09, 0xC7, 0xF5, 0xFE, 0x9E, 0x3F, 0x29, 0xB0, 0x75, 0x80, 0xE3, 0x77, 0x3B, 0xA4, 0x73, 0x00, 0x6D, 0x60, 0xE2, 0x93, 0x3C, 0xDA, 0x8B, 0x5C, 0xC4, 0x62, 0x00, 0xBA, 0x31, 0x55, 0x3F, 0xC2, 0xC1, 0x9F, 0x1E, 0x49, 0xE5, 0x80, 0x0B, 0x10, 0xF3, 0x28, 0xEB, 0xD0, 0x6A, 0xFA, 0x4B, 0xF2, 0x36, 0xA9, 0xDF, 0x16, 0x97, 0x27, 0xD1, 0xE3, 0xCF, 0x15, 0xA2, 0x9D, 0xAB, 0x9E, 0x60, 0x56, 0x3F, 0xEF, 0x9E, 0xE6, 0x20, 0x3A, 0xAD, 0x72, 0x7B, 0xD4, 0xCE, 0xA5, 0x9E, 0x80, 0x25, 0x96, 0xB7, 0x9B, 0x4B, 0xD2, 0x33, 0x02, 0x90, 0x4F, 0x83, 0x9E, 0x31, 0x20, 0xAE, 0xCE, 0xCD, 0xCC, 0xA7, 0x9C, 0xBF, 0x26, 0x16, 0x73, 0x57, 0x66, 0xF0, 0x5F, 0x9B, 0x5F, 0xA6, 0xFA, 0x1E, 0x4F, 0x8F, 0x30, 0x44, 0x00, 0xDD, 0x6B, 0xF4, 0x02, 0x4C, 0x16, 0x03, 0x78, 0x01, 0x1D, 0xB7, 0xFA, 0x2B, 0x1D, 0xAE, 0xCF, 0x43, 0x05, 0xCE, 0xBE, 0x99, 0xFD, 0xF1, 0xDE, 0x16, 0xAD, 0xF6, 0xD6, 0xAC, 0xB4, 0xE2, 0xE4, 0x9A, 0x89, 0xCB, 0xF9, 0xEF, 0xD0, 0xA7, 0x89, 0x01, 0x8F, 0xB1, 0x56, 0x66, 0x06, 0xAD, 0x0A, 0x7B, 0x67, 0xE6, 0xA3, 0xD8, 0x21, 0x4F, 0x86, 0xAA, 0xFB, 0x5D, 0x33, 0xAD, 0x0A, 0x18, 0xFF, 0xA8, 0xBC, 0x07, 0x92, 0x5F, 0xEA, 0x18, 0xF9, 0x78, 0x4C, 0x7B, 0xDF, 0xE4, 0x17, 0xA5, 0x7B, 0xB0, 0x68, 0x99, 0x03, 0x88, 0xEC, 0x58, 0x6B, 0xE0, 0x08, 0xA0, 0x09, 0x74, 0xFE, 0x57, 0x86, 0xB2, 0x7D, 0x50, 0x9F, 0x82, 0x82, 0x8F, 0x98, 0x87, 0x9D, 0xFF, 0xCA, 0x57, 0x2E, 0xC0, 0xE3, 0x79, 0x85, 0x56, 0x73, 0x88, 0x95, 0x1B, 0xAE, 0x53, 0x66, 0x0A, 0x77, 0xC7, 0x89, 0xAB, 0x9D, 0xC8, 0x29, 0x59, 0x6F, 0x09, 0xC5, 0x52, 0x9C, 0x19, 0x91, 0x9F, 0x82, 0x9F, 0x6B, 0xFA, 0xC9, 0x06, 0x7D, 0x9E, 0xF4, 0xA0, 0xA1, 0x27, 0xFB, 0x69, 0x60, 0xD1, 0xBC, 0x30, 0x52, 0x08, 0x29, 0x81, 0x6A, 0x5E, 0x26, 0xF7, 0x95, 0xFD, 0xE4, 0xEC, 0xE1, 0xF1, 0x36, 0x7D, 0x9F, 0xA7, 0xA3, 0x90, 0xD5, 0xED, 0xFF, 0x8F, 0xBE, 0x3A, 0xB3, 0x01, 0x58, 0x47, 0x81, 0x6C, 0xA0, 0x16, 0xF3, 0x78, 0xBC, 0xD8, 0xDC, 0xEB, 0x00, 0x51, 0x80, 0x5F, 0x0F, 0x11, 0x0C, 0xB9, 0xBC, 0x9A, 0xDE, 0x1F, 0xEF, 0xD0, 0xC4, 0xEF, 0xCA, 0xDE, 0x15, 0x10, 0x1C, 0x63, 0x26, 0x77, 0xF5, 0x15, 0xD7, 0xD3, 0xB4, 0x75, 0x01, 0x0E, 0xDC, 0x3A, 0x77, 0x6E, 0x5F, 0xCB, 0xE7, 0xF6, 0xE9, 0xBC, 0xDC, 0xF9, 0xDC, 0xDD, 0x03, 0x7A, 0xC1, 0x2C, 0x35, 0x96, 0xB0, 0x58, 0x6E, 0xEE, 0x99, 0xDF, 0xCD, 0x2A, 0xB2, 0x6F, 0x21, 0xBF, 0xD8, 0x5C, 0x01, 0x36, 0x12, 0x6E, 0x81, 0x25, 0x19, 0xB1, 0x4C, 0x66, 0xA2, 0x1D, 0x80, 0xCD, 0x54, 0x18, 0x17, 0x4E, 0x26, 0xD6, 0xEC, 0xEF, 0xA9, 0x02, 0xDE, 0x77, 0xA7, 0x2F, 0xCD, 0xBD, 0x92, 0x16, 0x50, 0x06, 0xA4, 0x02, 0xCA, 0x8C, 0x7C, 0x01, 0xB4, 0x80, 0xD0, 0x7D, 0x45, 0x68, 0xB4, 0x44, 0xAC, 0xB1, 0x14, 0x29, 0x18, 0x95, 0x38, 0x07, 0x76, 0xFE, 0x96, 0x15, 0xCD, 0x59, 0x49, 0xCB, 0xBE, 0x9C, 0xB8, 0x02, 0xD9, 0x43, 0x29, 0x18, 0xAD, 0xE2, 0xD3, 0x1C, 0x49, 0x1F, 0x5F, 0xA3, 0x53, 0x6A, 0x90, 0x0E, 0x92, 0xBB, 0xA5, 0x0F, 0x6F, 0xCB, 0x74, 0x64, 0x87, 0x01, 0xE9, 0xB7, 0x84, 0x63, 0x1B, 0x23, 0xCF, 0x74, 0x1C, 0xBD, 0xEA, 0xA0, 0xF6, 0x54, 0x49, 0xB1, 0xD4, 0x56, 0x15, 0xF0, 0xA4, 0xDA, 0xE6, 0x47, 0xA0, 0x35, 0x80, 0x4A, 0xA0, 0xE9, 0x93, 0x35, 0xC0, 0xF3, 0x6E, 0x32, 0x9E, 0x0D, 0x44, 0x01, 0x1A, 0x77, 0xCB, 0x71, 0xAB, 0xBB, 0xB9, 0x4D, 0x18, 0x8D, 0x56, 0x48, 0xA2, 0x08, 0x41, 0x8E, 0x89, 0x06, 0xE5, 0x48, 0x70, 0xC4, 0x88, 0x80, 0xC3, 0x60, 0x7A, 0x1D, 0x23, 0x03, 0x37, 0x40, 0xDF, 0x2E, 0xEF, 0xFA, 0x94, 0x96, 0x4D, 0xD0, 0xC5, 0xC0, 0x8E, 0x52, 0xF4, 0xF7, 0x37, 0xA0, 0xF9, 0xDE, 0x93, 0xE3, 0x31, 0xE8, 0xEC, 0x27, 0xDD, 0x9B, 0x31, 0xB3, 0xDA, 0x4C, 0xF1, 0xA6, 0xEE, 0x2B, 0x4E, 0x8F, 0x6E, 0xF2, 0x5F, 0x9E, 0xA5, 0xA3, 0x6F, 0x13, 0x91, 0xAB, 0x82, 0xEA, 0xEE, 0xF3, 0x4C, 0xBF, 0x9C, 0x16, 0xE0, 0x8B, 0x64, 0x99, 0x67, 0x02, 0xE3, 0xEB, 0x1A, 0x3D, 0x80, 0xD6, 0x3E, 0x6C, 0x20, 0x0C, 0x90, 0x02, 0x9E, 0x74, 0x1B, 0xA7, 0xD1, 0x1A, 0x9D, 0x3E, 0x02, 0xBE, 0xEE, 0xF1, 0xDE, 0x4E, 0x3B, 0x03, 0x9F, 0x9D, 0xC7, 0x06, 0xD2, 0xFA, 0x07, 0x99, 0xC4, 0xE0, 0xD7, 0xE0, 0xA2, 0x76, 0x57, 0x67, 0x9B, 0x7E, 0x86, 0x1A, 0x95, 0x61, 0x60, 0x2E, 0xBD, 0x7C, 0x30, 0x30, 0xFE, 0x1A, 0xD6, 0xB8, 0xEE, 0x15, 0xA0, 0x01, 0x3C, 0x6E, 0xAC, 0xFD, 0xA4, 0xB9, 0x26, 0xD1, 0xBB, 0xB6, 0xD6, 0xB8, 0xE4, 0x08, 0x5B, 0xDB, 0xE1, 0x93, 0xEF, 0x18, 0x63, 0x8D, 0x8C, 0x53, 0x74, 0xA1, 0x69, 0x51, 0xC0, 0xEC, 0x6E, 0xDD, 0x76, 0x02, 0xA0, 0xBB, 0xCD, 0x16, 0x4F, 0xAB, 0xCD, 0x85, 0x2F, 0xCE, 0x00, 0xCA, 0x3F, 0xF7, 0xD0, 0x6A, 0xF3, 0xAF, 0x1C, 0xC2, 0x7C, 0x01, 0x15, 0x30, 0xF4, 0x4E, 0xB1, 0xBC, 0x25, 0xFC, 0x26, 0x70, 0x68, 0x0F, 0x59, 0x6F, 0x7A, 0xDD, 0xF2, 0x43, 0xF9, 0x09, 0xE4, 0x15, 0x6F, 0xEF, 0x1C, 0xE3, 0xA9, 0xCC, 0xF0, 0xC3, 0xA7, 0x9E, 0x3B, 0xC3, 0x55, 0x8D, 0xF9, 0xA6, 0xAF, 0x6E, 0x57, 0x3C, 0x7F, 0xA9, 0x72, 0x4A, 0xEE, 0x44, 0xA3, 0x1E, 0x38, 0xDD, 0xFF, 0xB5, 0xFB, 0x3F, 0x5B, 0x46, 0x5C, 0xA7, 0xBB, 0x7E, 0x62, 0x02, 0x33, 0x34, 0x6C, 0x01, 0xF3, 0x64, 0x9E, 0x03, 0x12, 0x00, 0x17, 0x45, 0x77, 0x60, 0x02, 0xE8, 0x03, 0x70, 0x47, 0x18, 0x05, 0xE2, 0xDC, 0x6A, 0xF3, 0xB5, 0x13, 0x94, 0x3D, 0x51, 0x92, 0x5E, 0x54, 0xED, 0x1D, 0x4F, 0x03, 0x95, 0x51, 0xCB, 0xD5, 0x5C, 0xEA, 0x1F, 0xF4, 0xCC, 0x56, 0xC6, 0xC7, 0x9B, 0x09, 0xD3, 0xF9, 0x51, 0x0D, 0xC6, 0xC0, 0x53, 0x7D, 0x04, 0x6D, 0x63, 0xAF, 0xBE, 0x1E, 0x6F, 0x0D, 0x1E, 0x43, 0x03, 0xA8, 0x7D, 0x42, 0x1F, 0x13, 0xE6, 0x2D, 0xC7, 0xED, 0x96, 0x64, 0x0B, 0x67, 0xEA, 0xA8, 0xE2, 0x13, 0xE3, 0x4E, 0xB3, 0xA6, 0xAF, 0x67, 0x63, 0x68, 0x7D, 0x0B, 0x8C, 0xCE, 0x23, 0x52, 0xC1, 0x74, 0xCA, 0xE2, 0x86, 0x72, 0x80, 0xE6, 0xD6, 0x63, 0x40, 0xB2, 0xE1, 0xCD, 0x62, 0x88, 0x03, 0xA4, 0x00, 0xAC, 0xC3, 0xE1, 0x43, 0xA1, 0x08, 0xD1, 0xD0, 0x68, 0xB2, 0x3A, 0x1D, 0xAB, 0x4C, 0xED, 0x89, 0x60, 0xC0, 0x29, 0xDC, 0x66, 0x9A, 0x7D, 0xCE, 0xD9, 0xCB, 0x1C, 0x68, 0x9D, 0x57, 0x8C, 0xFC, 0x08, 0x90, 0x57, 0xA1, 0x88, 0xFE, 0x29, 0xDF, 0xDA, 0x56, 0xC1, 0xFA, 0x22, 0xB6, 0x16, 0xD7, 0x0C, 0x3F, 0x6B, 0x26, 0x3B, 0x2A, 0x50, 0xFE, 0xF6, 0x37, 0xDB, 0x35, 0xD1, 0xFA, 0xA9, 0x70, 0x64, 0xC7, 0x62, 0x57, 0x4A, 0x79, 0xAC, 0x3D, 0xD7, 0x04, 0x66, 0x40, 0x3E, 0xC1, 0x56, 0x98, 0xBC, 0xE6, 0x6E, 0xC4, 0xAE, 0x03, 0x84, 0x01, 0xB5, 0x95, 0x5A, 0xFA, 0x29, 0xD8, 0x32, 0x42, 0x00, 0xBA, 0x8E, 0xCB, 0x00, 0x6F, 0x20, 0x93, 0xDD, 0x81, 0x68, 0x33, 0xC5, 0xDA, 0x3F, 0x3C, 0x45, 0x19, 0x52, 0xA0, 0x5D, 0x7F, 0xE7, 0xD2, 0xA9, 0x1D, 0x7D, 0x27, 0x21, 0x47, 0x52, 0x05, 0x71, 0x54, 0xC9, 0x9F, 0x77, 0x43, 0x78, 0x19, 0xF8, 0x68, 0x9B, 0x54, 0x33, 0x7F, 0x67, 0x5D, 0x09, 0x8E, 0x5C, 0x47, 0x21, 0x62, 0x5B, 0x4C, 0xAD, 0x63, 0xC1, 0xFB, 0xF5, 0x4B, 0xD4, 0x5F, 0x23, 0x99, 0xF5, 0x86, 0x8D, 0xBF, 0xDE, 0xDE, 0x75, 0x64, 0xD8, 0xBE, 0x62, 0x28, 0x3E, 0x82, 0x05, 0xE5, 0x56, 0x84, 0xAA, 0x75, 0xE9, 0x50, 0xBF, 0xC4, 0x29, 0x59, 0xAC, 0x77, 0xA2, 0xD7, 0x9D, 0xE1, 0x85, 0x03, 0x08, 0xEA, 0x9A, 0x0E, 0x90, 0xBA, 0x38, 0x80, 0x2F, 0x4E, 0xE3, 0x4D, 0xE4, 0xBA, 0xFE, 0x9F, 0x00, 0x7C, 0xBD, 0x6D, 0x72, 0xF3, 0x3C, 0xCF, 0xB4, 0xB9, 0x95, 0x6B, 0x05, 0x53, 0x24, 0xBE, 0xB1, 0xFF, 0x8D, 0x4D, 0xB9, 0x1B, 0x0C, 0xA9, 0xE7, 0x3E, 0xEB, 0xFD, 0x75, 0x94, 0x1C, 0x39, 0x89, 0x61, 0x4A, 0x22, 0x9B, 0x40, 0x03, 0x26, 0x3A, 0xF8, 0x5F, 0x64, 0x62, 0xA6, 0xC8, 0x44, 0x34, 0x81, 0xF6, 0xBB, 0xC7, 0x68, 0x97, 0xF3, 0x6E, 0x33, 0x2A, 0xC8, 0x7C, 0xEC, 0x45, 0x62, 0xB8, 0xA5, 0x4C, 0x32, 0x1F, 0xAB, 0x0A, 0xC0, 0xCC, 0xDB, 0x0C, 0x64, 0x9A, 0x7C, 0xE9, 0xA4, 0x9B, 0xE1, 0x31, 0x06, 0xF0, 0x1F, 0x75, 0xC6, 0xA0, 0x9A, 0x9F, 0xCC, 0x00, 0x75, 0xA0, 0x27, 0xA1, 0x8D, 0xF9, 0x4D, 0x53, 0xC5, 0x37, 0x17, 0x6E, 0xEC, 0xBB, 0xC3, 0x0C, 0x4D, 0x0F, 0x53, 0x15, 0x7D, 0xF7, 0xB1, 0x46, 0x62, 0x1D, 0xC5, 0xDB, 0xA6, 0x36, 0x79, 0x01, 0x92, 0x80, 0x0B, 0x2F, 0xB2, 0x7A, 0xEF, 0x09, 0x56, 0xC4, 0x02, 0x56, 0x4C, 0xF5, 0x33, 0x20, 0x06, 0xCC, 0xCC, 0xD3, 0x6B, 0x82, 0x66, 0xEC, 0x0A, 0x5F, 0xB0, 0x66, 0x57, 0x43, 0xDE, 0x8C, 0x19, 0x53, 0xBC, 0x37, 0x7D, 0x77, 0x0B, 0x6A, 0xA8, 0x23, 0x5B, 0x0D, 0x25, 0x2E, 0x53, 0x36, 0x30, 0x56, 0xC7, 0x67, 0xD3, 0x91, 0x69, 0x78, 0x9C, 0xE9, 0x38, 0xFB, 0x33, 0x39, 0xA5, 0x6E, 0x6F, 0x84, 0xC7, 0xEB, 0x48, 0xC0, 0xD5, 0xD4, 0x2A, 0x0B, 0xD8, 0x0B, 0xD0, 0x24, 0xF8, 0x76, 0xDB, 0x18, 0xAE, 0x3D, 0x29, 0x93, 0x3F, 0x70, 0x07, 0x9D, 0xB9, 0x80, 0xEC, 0xA4, 0xC6, 0xE1, 0x13, 0x38, 0x3A, 0x3F, 0x9B, 0xBB, 0x80, 0xBD, 0xDF, 0x58, 0x4D, 0xAB, 0xBE, 0x06, 0x62, 0xB2, 0x5B, 0x89, 0xDC, 0x40, 0x24, 0x60, 0x01, 0x6C, 0x7B, 0x5D, 0x86, 0x37, 0xD5, 0xF7, 0x95, 0x13, 0x33, 0x67, 0xB7, 0x0E, 0x56, 0x58, 0xD5, 0x54, 0x94, 0xB1, 0x74, 0xC7, 0xFC, 0xF7, 0x69, 0xA5, 0x12, 0x62, 0xAA, 0x42, 0x8F, 0xB4, 0xCA, 0x9F, 0xA6, 0x50, 0xAF, 0x25, 0xA8, 0xFE, 0xB0, 0xA7, 0x81, 0x9B, 0x52, 0xB8, 0x66, 0x21, 0x7F, 0x1A, 0x82, 0x95, 0x14, 0x3E, 0x93, 0x3F, 0x4B, 0x4E, 0xBA, 0x92, 0x6B, 0x94, 0xE0, 0x02, 0x2B, 0x92, 0xFA, 0x6E, 0x30, 0xB5, 0x8F, 0x91, 0x0F, 0x56, 0xCC, 0xC6, 0x66, 0xF6, 0x1F, 0xFF, 0x4F, 0x76, 0xDE, 0x83, 0x36, 0x5A, 0x57, 0x9D, 0xC4, 0xB5, 0x86, 0x53, 0x0C, 0xC8, 0xC2, 0xFB, 0x24, 0x01, 0x6B, 0xA0, 0xD8, 0xB7, 0x4A, 0x0D, 0x68, 0xA5, 0xB2, 0x7E, 0x44, 0x66, 0x40, 0x0C, 0xD8, 0x09, 0xC8, 0x06, 0xCC, 0x28, 0xE1, 0xFB, 0xC4, 0x2C, 0x98, 0x83, 0xE2, 0x58, 0x6A, 0xF4, 0xE6, 0x14, 0x48, 0x18, 0x3A, 0x7E, 0x2B, 0xBB, 0xF0, 0x15, 0x6F, 0xC3, 0x4E, 0xC7, 0x52, 0x2E, 0x91, 0x5F, 0xA3, 0xE3, 0xD9, 0xF8, 0x9E, 0x54, 0xF7, 0xD8, 0x1C, 0x67, 0x2C, 0xE2, 0xEC, 0x02, 0x4E, 0xAB, 0x37, 0x0E, 0x22, 0x77, 0xA8, 0xAF, 0x99, 0xC0, 0x56, 0xC0, 0x13, 0xA8, 0x7E, 0x07, 0xD8, 0xE4, 0x38, 0x2B, 0x6F, 0x29, 0x9B, 0x19, 0xA8, 0x52, 0xCC, 0xA9, 0xAF, 0x6B, 0xAC, 0xD4, 0x1C, 0x98, 0xFB, 0xE4, 0xF9, 0x86, 0xBE, 0x2D, 0xB8, 0x3A, 0x28, 0xFD, 0x2F, 0xA0, 0x37, 0xF7, 0x18, 0xE2, 0xAD, 0x40, 0xDD, 0x3E, 0xD5, 0xA9, 0x80, 0x25, 0x30, 0x2F, 0xDA, 0x9A, 0x22, 0xD5, 0x89, 0x59, 0xD2, 0x02, 0x33, 0x26, 0x4A, 0x5F, 0xC0, 0xE0, 0x75, 0xF7, 0x6F, 0x68, 0x48, 0xE6, 0x6F, 0xA0, 0x74, 0x16, 0xAA, 0x6F, 0x19, 0xAC, 0xBC, 0x6A, 0xE0, 0x54, 0x16, 0x39, 0x3B, 0x1E, 0x95, 0xE2, 0xD6, 0xD5, 0x9C, 0x77, 0x35, 0xEF, 0xE2, 0x4D, 0x3F, 0x86, 0x56, 0xA6, 0x15, 0x50, 0x21, 0xAF, 0xC6, 0x8B, 0xC5, 0xF1, 0x52, 0x5C, 0x29, 0x14, 0x2F, 0x84, 0x6C, 0x8A, 0xE1, 0xDC, 0x9E, 0x4B, 0xDC, 0x41, 0xD1, 0x18, 0x8D, 0xBB, 0x0A, 0x5D, 0x18, 0x05, 0xE1, 0xC0, 0xA2, 0xCE, 0x6E, 0x02, 0x2C, 0x0E, 0xB0, 0x6E, 0x82, 0x23, 0x6B, 0x6F, 0xC0, 0xEB, 0x1D, 0x59, 0xA1, 0x80, 0x07, 0xA0, 0xC4, 0xE2, 0x1B, 0xAA, 0xE7, 0x08, 0xE8, 0x9A, 0x98, 0x9D, 0xEE, 0x65, 0x04, 0x3E, 0x83, 0x4F, 0xCC, 0x18, 0x90, 0x9D, 0xF1, 0x1B, 0x59, 0x12, 0x50, 0xC1, 0x99, 0x09, 0x2E, 0xFB, 0x2B, 0x42, 0x2E, 0xB9, 0xFD, 0xC3, 0xEC, 0xC8, 0xAC, 0x45, 0xA4, 0x01, 0x53, 0x8B, 0xD9, 0x1B, 0x30, 0x07, 0x36, 0xA1, 0x02, 0x54, 0x5C, 0x0F, 0x6E, 0x3D, 0xAD, 0x1E, 0x8B, 0x30, 0x05, 0x34, 0x00, 0xD9, 0x84, 0x02, 0xB9, 0xC6, 0xE1, 0x04, 0x28, 0x27, 0xF2, 0x83, 0x06, 0x5A, 0x5F, 0x21, 0xB7, 0x4F, 0x8B, 0x17, 0xE0, 0xC8, 0xCF, 0x84, 0x29, 0xB0, 0xFD, 0xED, 0xC3, 0x25, 0x6B, 0x4D, 0xD4, 0xDE, 0xEE, 0x65, 0x2B, 0x1C, 0xA6, 0xE8, 0x10, 0x21, 0x5D, 0xD7, 0xC6, 0x30, 0xF2, 0x5F, 0xD4, 0xAC, 0x85, 0x15, 0xE1, 0xE8, 0x3B, 0xA8, 0x3E, 0x51, 0x93, 0x89, 0xDA, 0x0C, 0x39, 0xFE, 0x8D, 0x64, 0xB8, 0x56, 0xBC, 0x2E, 0x21, 0x91, 0x80, 0xC6, 0x9B, 0x32, 0x3B, 0x31, 0x94, 0x09, 0x57, 0x01, 0xCE, 0x37, 0xE4, 0x88, 0xDA, 0x01, 0x9C, 0x18, 0x6E, 0xC0, 0x15, 0x30, 0x7F, 0x4D, 0xC2, 0xAC, 0x81, 0xDA, 0xC4, 0xFA, 0x60, 0x13, 0xFE, 0xC6, 0x22, 0xFD, 0xB5, 0xCB, 0x5A, 0xFB, 0xD5, 0x6C, 0x75, 0x03, 0xCB, 0x00, 0x99, 0x53, 0x6C, 0xA2, 0xB6, 0x79, 0x69, 0x2C, 0x5E, 0x52, 0xE9, 0xB8, 0x21, 0xF7, 0xA6, 0xA9, 0xC9, 0xC6, 0xBA, 0x28, 0x1C, 0xFB, 0x26, 0x1E, 0x50, 0x70, 0x2D, 0x9F, 0x9E, 0x6F, 0x3E, 0x51, 0xDB, 0xB7, 0x2A, 0xF7, 0x31, 0x6E, 0x2C, 0x60, 0xCB, 0xDB, 0x7F, 0xB8, 0xFD, 0x55, 0xC1, 0x23, 0x81, 0x5A, 0xAF, 0xB0, 0x7A, 0x0A, 0x9B, 0xF2, 0x13, 0xC3, 0x04, 0x64, 0xD2, 0x1F, 0x09, 0x1B, 0xBD, 0x71, 0x5D, 0xD7, 0x03, 0x88, 0x4D, 0x6F, 0x42, 0xE9, 0x22, 0xFA, 0x95, 0x75, 0x25, 0x3F, 0xE5, 0x51, 0xF5, 0x3A, 0x76, 0x76, 0x00, 0xBE, 0x81, 0x5D, 0x80, 0x26, 0x4F, 0xD1, 0x89, 0x1A, 0x5D, 0xE3, 0xB7, 0xA3, 0xCE, 0x78, 0xB9, 0xFF, 0x9E, 0x66, 0xD2, 0x8E, 0xF2, 0xB3, 0x0C, 0xD4, 0x08, 0xDA, 0xA6, 0xE3, 0x89, 0xC0, 0x1C, 0xDF, 0x11, 0xB5, 0x35, 0x63, 0x2D, 0xEF, 0x58, 0x9B, 0x81, 0x7C, 0x5B, 0x32, 0x7B, 0x02, 0x47, 0xB8, 0x26, 0x76, 0xBE, 0x7B, 0x25, 0xE9, 0xAF, 0x50, 0xDF, 0x63, 0x22, 0xD4, 0xF7, 0x8B, 0x95, 0x33, 0x90, 0x74, 0x03, 0x33, 0xD5, 0xA9, 0x04, 0x7A, 0x7D, 0x6E, 0x0C, 0xCA, 0x70, 0xE9, 0xD4, 0x96, 0x01, 0x9A, 0x80, 0xAF, 0x4F, 0xA7, 0x6C, 0x22, 0xD7, 0xEB, 0x07, 0xBB, 0x84, 0x2F, 0x2A, 0x20, 0xA3, 0xDD, 0xF3, 0x68, 0xFB, 0x3D, 0x05, 0x51, 0x93, 0xDF, 0xAE, 0x8A, 0x64, 0xFC, 0x57, 0x54, 0x0B, 0x3C, 0xEF, 0xE6, 0x0A, 0xAD, 0x84, 0x12, 0x83, 0x6C, 0x85, 0xA2, 0xC5, 0xE2, 0xDE, 0x67, 0x8C, 0xFD, 0xE8, 0x5F, 0x1B, 0x74, 0x9B, 0xA6, 0xD3, 0x93, 0x40, 0x4B, 0xD8, 0xEB, 0x33, 0x57, 0xFB, 0xDD, 0x99, 0x6A, 0x05, 0x6A, 0x36, 0x06, 0x0C, 0xA8, 0xCD, 0xA0, 0xF7, 0x6B, 0x7B, 0x55, 0x0D, 0xEC, 0xF8, 0x5E, 0xE7, 0x40, 0x8D, 0xBF, 0xD6, 0x55, 0xF6, 0xAF, 0xFF, 0xB9, 0x13, 0xD1, 0xC0, 0xFC, 0xF5, 0xC9, 0x6D, 0x5B, 0x0E, 0x78, 0x00, 0xA6, 0xC0, 0x9A, 0xCD, 0x0D, 0x03, 0x76, 0x00, 0xCA, 0x53, 0xF4, 0x2F, 0x6A, 0xFA, 0x0B, 0x57, 0x34, 0x77, 0x41, 0x3B, 0x91, 0x5F, 0x61, 0xB8, 0x0A, 0xBA, 0x36, 0x25, 0x22, 0x65, 0x37, 0xBA, 0xFD, 0x0B, 0x08, 0xED, 0x01, 0x42, 0xBE, 0xBD, 0x2C, 0x67, 0xFB, 0xC8, 0xFD, 0x49, 0x3B, 0xC6, 0x1D, 0xF5, 0xA9, 0x28, 0x09, 0x65, 0x28, 0xE5, 0xD9, 0xAC, 0x4B, 0x42, 0x8A, 0x68, 0x62, 0xD2, 0xD1, 0xE3, 0x75, 0x53, 0x53, 0x7F, 0x9D, 0x98, 0xF6, 0xDC, 0x16, 0xEB, 0xDE, 0xD5, 0xFD, 0xEC, 0x80, 0xA8, 0x8F, 0x78, 0x00, 0x58, 0x03, 0x61, 0xC0, 0xE8, 0xDE, 0x32, 0x69, 0xB5, 0xDF, 0x9E, 0x59, 0xAA, 0xC0, 0x62, 0x0C, 0x0B, 0x58, 0x0D, 0x48, 0xF2, 0x4C, 0xD1, 0x89, 0x9A, 0xA1, 0x7A, 0x6B, 0x61, 0x22, 0x66, 0x93, 0x64, 0x92, 0x86, 0xCA, 0x85, 0xED, 0x50, 0x5B, 0xC5, 0x98, 0xD9, 0xB9, 0x47, 0xEC, 0xE0, 0xD8, 0x7A, 0xDD, 0x26, 0xEC, 0xD9, 0xCC, 0x14, 0xEA, 0x30, 0x27, 0x89, 0x6A, 0x6C, 0xDF, 0xFA, 0x88, 0x8B, 0xE9, 0x54, 0x0F, 0x4E, 0xE7, 0x58, 0xC0, 0x9F, 0x6C, 0x9F, 0x69, 0x57, 0x4D, 0x49, 0xE9, 0x88, 0xBD, 0x0B, 0x67, 0x6E, 0x84, 0x19, 0xF2, 0x86, 0x03, 0xEB, 0xB4, 0xDB, 0xE3, 0x9F, 0xA5, 0x6E, 0x29, 0x7D, 0x7B, 0xF6, 0xE6, 0x11, 0x41, 0x57, 0x00, 0xE3, 0x85, 0xBA, 0x16, 0x50, 0x39, 0x36, 0xA4, 0x04, 0x5F, 0xEC, 0x04, 0xAC, 0x81, 0x1D, 0x80, 0x06, 0x4F, 0x89, 0x09, 0x1A, 0x52, 0x5C, 0x6A, 0x39, 0xA6, 0x98, 0x8B, 0x89, 0x7D, 0xA9, 0xD8, 0xCD, 0x2E, 0x45, 0x91, 0x54, 0x41, 0x2F, 0x3A, 0xD9, 0x5A, 0x12, 0x53, 0x51, 0xF6, 0x75, 0xB8, 0x7A, 0x1B, 0xDB, 0x5B, 0xF2, 0x1F, 0x3D, 0xDD, 0x69, 0x70, 0xB4, 0x27, 0xD5, 0x89, 0xD1, 0x1A, 0x4D, 0xD4, 0xA9, 0x74, 0x67, 0x01, 0x91, 0xC0, 0x24, 0xD3, 0x55, 0xBE, 0x0D, 0x7E, 0x66, 0xF4, 0xB6, 0xDC, 0xEE, 0x34, 0xFB, 0x64, 0x2D, 0xE7, 0xD3, 0x9D, 0x66, 0x44, 0xC5, 0x49, 0x86, 0x5B, 0xA7, 0x1A, 0x4F, 0x0C, 0xB0, 0x9E, 0xCE, 0xCF, 0xC0, 0x18, 0x20, 0xEB, 0x06, 0x64, 0xE3, 0xC5, 0x5E, 0x80, 0x29, 0xB0, 0x0A, 0x10, 0xE5, 0x29, 0x27, 0x68, 0x81, 0xD5, 0x4B, 0x2A, 0x26, 0x7B, 0xE9, 0x58, 0x56, 0x47, 0x60, 0x33, 0x7B, 0x37, 0x04, 0x38, 0x4D, 0xAA, 0x79, 0x9B, 0xD7, 0x9C, 0x4C, 0xB4, 0xA6, 0x91, 0xC8, 0x9B, 0xAE, 0x7C, 0xA6, 0xBA, 0x3D, 0x62, 0x68, 0x03, 0xB5, 0x81, 0x35, 0xC6, 0x07, 0x0C, 0xC2, 0xCE, 0xAB, 0xC8, 0xEA, 0x5F, 0x7E, 0xF5, 0xF4, 0x0B, 0xD8, 0x6F, 0x63, 0x3D, 0xAA, 0x89, 0x78, 0xB1, 0xCE, 0xDD, 0x49, 0xCF, 0xA3, 0x1A, 0x47, 0x35, 0xD7, 0x99, 0x3C, 0x5D, 0xEF, 0x71, 0xD9, 0x40, 0xF5, 0xFC, 0x36, 0x04, 0x71, 0xFE, 0x85, 0x04, 0x66, 0x33, 0x46, 0x1B, 0x90, 0xE0, 0x8B, 0xFA, 0xF6, 0x13, 0x69, 0xBE, 0xB8, 0x93, 0xA7, 0xEC, 0x89, 0x5A, 0xFE, 0x67, 0x6C, 0x82, 0x67, 0xE8, 0x24, 0x8B, 0xF7, 0xDD, 0xBC, 0x2B, 0x78, 0xDC, 0x19, 0x62, 0x9F, 0x9B, 0x3A, 0x5E, 0x72, 0x11, 0xF5, 0xDA, 0x0E, 0xCD, 0x3D, 0xC3, 0x8D, 0xEF, 0x30, 0xA5, 0xFC, 0x38, 0x82, 0x4E, 0xE0, 0x28, 0xD7, 0x48, 0x93, 0x2C, 0x69, 0xE7, 0xD5, 0xA3, 0xFD, 0xCA, 0x81, 0x22, 0xB7, 0x42, 0xD1, 0x26, 0xA3, 0x79, 0xEC, 0x90, 0xF9, 0xDF, 0xD7, 0x11, 0xAE, 0xA3, 0x81, 0xCD, 0xD1, 0xD8, 0x75, 0xB5, 0xFC, 0x98, 0x2B, 0xEB, 0xB4, 0xCF, 0x6E, 0xA7, 0x24, 0x66, 0x94, 0xCB, 0x36, 0x50, 0xD3, 0x10, 0x5C, 0x98, 0x44, 0x94, 0xC4, 0x24, 0x0A, 0x39, 0x60, 0x01, 0x6C, 0x42, 0x27, 0xB3, 0xE8, 0x0C, 0xB5, 0x42, 0x9D, 0x84, 0xED, 0x23, 0x2E, 0xED, 0x40, 0x98, 0x7E, 0x42, 0x73, 0x34, 0x2A, 0xF7, 0xCD, 0xF0, 0xF9, 0xA6, 0x57, 0x56, 0xC5, 0xD3, 0xA6, 0x7D, 0xAD, 0xB7, 0xF2, 0xD3, 0x27, 0xCC, 0x35, 0xFF, 0x8C, 0x71, 0x3D, 0x8A, 0xD8, 0x11, 0x5C, 0x29, 0xEB, 0x02, 0xA6, 0x16, 0x59, 0xEA, 0x1C, 0x09, 0x31, 0x26, 0x61, 0x73, 0x73, 0xDA, 0xCE, 0xFB, 0xDE, 0x6D, 0xA4, 0x85, 0x3D, 0x12, 0x40, 0xF9, 0xA2, 0xEA, 0x88, 0x3D, 0x94, 0xDB, 0xF8, 0x67, 0x9D, 0x42, 0xA7, 0x26, 0x35, 0x91, 0x02, 0x82, 0x0A, 0xD9, 0x94, 0xF5, 0x49, 0x01, 0xD9, 0x40, 0x2D, 0xC0, 0x0B, 0x18, 0xB9, 0xAD, 0x03, 0x47, 0xFB, 0x96, 0x9F, 0x22, 0x68, 0x0D, 0x07, 0x26, 0x6B, 0xC8, 0x97, 0x61, 0x6C, 0x4D, 0x38, 0x09, 0x58, 0x54, 0x3F, 0xC7, 0xF5, 0x40, 0x94, 0x79, 0x5F, 0x72, 0xED, 0x2D, 0xB7, 0x00, 0x71, 0x5B, 0x90, 0x22, 0x04, 0xFC, 0x0B, 0xA5, 0x53, 0x22, 0x7C, 0x1B, 0x37, 0x6D, 0xDE, 0x7C, 0xFB, 0xF8, 0x18, 0xBA, 0x8F, 0x64, 0x08, 0x58, 0x01, 0xE7, 0x8B, 0xA7, 0x6A, 0x2A, 0x31, 0x8A, 0x1A, 0x23, 0x68, 0xB7, 0x69, 0xAD, 0x1C, 0x45, 0x7C, 0x31, 0x66, 0xCE, 0x07, 0xCF, 0xF8, 0x5F, 0xEF, 0xE4, 0xD8, 0x30, 0xA0, 0x7B, 0x54, 0x3A, 0xA0, 0xF9, 0x87, 0x6A, 0x14, 0x3C, 0x42, 0x02, 0x58, 0x1B, 0x3F, 0xF3, 0x04, 0xC4, 0x81, 0xD1, 0x08, 0x7D, 0x9E, 0x9E, 0x32, 0x5F, 0x15, 0x62, 0xB6, 0xFF, 0xB7, 0xE7, 0x38, 0x34, 0x70, 0x84, 0xB5, 0x9B, 0xA9, 0xB2, 0xFB, 0x3F, 0x99, 0xB9, 0x18, 0x71, 0xD6, 0x39, 0xA3, 0xA1, 0x26, 0xD5, 0x1A, 0xDE, 0xEB, 0x9D, 0xA2, 0xE2, 0x11, 0xCF, 0x26, 0xEF, 0xB6, 0xA8, 0x70, 0xE1, 0xF6, 0x01, 0x39, 0x89, 0xF1, 0x54, 0x67, 0x3C, 0xFD, 0xE6, 0x80, 0x1B, 0xC3, 0x2A, 0xE7, 0xDA, 0xDE, 0xC5, 0xEF, 0xCF, 0x01, 0xE5, 0x8B, 0xF1, 0x43, 0x70, 0x4C, 0x60, 0x9C, 0xE1, 0x46, 0x43, 0x71, 0x38, 0x8A, 0x32, 0xF2, 0x54, 0x7A, 0x07, 0x95, 0x15, 0xD6, 0xD1, 0x2F, 0x07, 0x3C, 0x89, 0x06, 0x34, 0x81, 0x35, 0xAA, 0x4B, 0xF1, 0xA8, 0xD9, 0xDA, 0xAD, 0x26, 0x66, 0x1B, 0xB7, 0x86, 0x95, 0x34, 0x74, 0xAE, 0x37, 0x66, 0xFC, 0xB4, 0xB6, 0xE4, 0x87, 0x70, 0x96, 0x37, 0x2A, 0x9B, 0x51, 0xDF, 0xB6, 0xA5, 0x32, 0xB3, 0x18, 0x39, 0x2E, 0x60, 0xAB, 0xA1, 0x93, 0x95, 0x42, 0xA3, 0xA8, 0x05, 0xE4, 0x86, 0xA2, 0x66, 0x8B, 0xA9, 0x7D, 0x89, 0x53, 0xD6, 0x0F, 0x2C, 0x61, 0x09, 0x25, 0xF0, 0x64, 0x83, 0x6C, 0x59, 0xD4, 0x2B, 0x37, 0xBE, 0x00, 0x9D, 0x7F, 0x7E, 0x94, 0xA3, 0x05, 0xAC, 0xE9, 0xE1, 0x9E, 0x57, 0xF5, 0x44, 0xB0, 0x20, 0xBA, 0x05, 0x7F, 0x4B, 0x4F, 0xC9, 0x2D, 0x10, 0x94, 0xD9, 0x74, 0x74, 0x0F, 0x07, 0xBC, 0x88, 0x06, 0x4C, 0x01, 0x11, 0x60, 0x15, 0xA0, 0x53, 0xCD, 0x6B, 0x13, 0x33, 0xE1, 0xC6, 0x56, 0xB1, 0xA8, 0x3B, 0xFE, 0x6F, 0xCC, 0x18, 0x4F, 0x57, 0x3C, 0x05, 0xFC, 0x27, 0x70, 0xDA, 0x74, 0x90, 0xB9, 0x69, 0xB7, 0xBA, 0x6F, 0xDD, 0xA2, 0x51, 0x16, 0x0A, 0xDE, 0xA2, 0x93, 0x17, 0x57, 0x34, 0x65, 0x1A, 0xBA, 0x8A, 0x06, 0x77, 0xE5, 0x62, 0xF3, 0xDB, 0xC4, 0xA8, 0x43, 0x78, 0x28, 0xBA, 0x31, 0x04, 0x04, 0xEB, 0x7D, 0xAC, 0x4F, 0x76, 0xE3, 0xEA, 0xD1, 0xC2, 0x80, 0x10, 0xBC, 0xD8, 0xC2, 0x71, 0xBD, 0x11, 0x25, 0x75, 0xCA, 0x88, 0xD4, 0x32, 0x11, 0x02, 0x64, 0xDC, 0xF0, 0xAF, 0x03, 0x90, 0x34, 0x99, 0xA3, 0x10, 0xD0, 0xFF, 0x81, 0x24, 0x16, 0x85, 0x51, 0x27, 0xE6, 0x67, 0x4C, 0xDB, 0xDC, 0x6B, 0x62, 0xA6, 0x2C, 0x1D, 0x49, 0x24, 0x09, 0xCC, 0xB5, 0x39, 0xE9, 0x46, 0x9D, 0x6C, 0x28, 0x27, 0xBC, 0x01, 0x3A, 0xB4, 0xE1, 0xEE, 0x6B, 0x43, 0xAB, 0xEB, 0x73, 0x6D, 0x9E, 0xDB, 0x13, 0x3F, 0x74, 0x8F, 0xBC, 0x3A, 0x01, 0x59, 0xF8, 0x60, 0x36, 0x63, 0x9E, 0x91, 0x70, 0xEA, 0x80, 0x29, 0x6F, 0x32, 0xFC, 0xB8, 0x29, 0x04, 0xEF, 0x0C, 0x46, 0x29, 0x3B, 0x29, 0x3F, 0x1E, 0x67, 0x0F, 0xC2, 0xE6, 0xA2, 0x9C, 0xEC, 0xF9, 0xC0, 0xDB, 0xC5, 0x18, 0x56, 0x45, 0x3C, 0x77, 0x02, 0xA5, 0x8C, 0xFC, 0x02, 0x9A, 0xE3, 0x33, 0xF8, 0xBF, 0x2C, 0x07, 0xF6, 0x1A, 0x13, 0x37, 0x20, 0x8B, 0xD8, 0x40, 0x2B, 0x4E, 0xC9, 0x98, 0x98, 0x19, 0xB2, 0x84, 0x57, 0xFF, 0xC4, 0x8E, 0x5E, 0x98, 0xA3, 0x65, 0x08, 0x3C, 0xD1, 0x76, 0x20, 0x4D, 0x27, 0xEC, 0x3F, 0x3C, 0x4C, 0xE1, 0x71, 0x62, 0xDB, 0xB8, 0xAF, 0xCE, 0x95, 0x67, 0x3E, 0x3D, 0xDA, 0xF1, 0xC4, 0xBC, 0xE9, 0x37, 0x3F, 0xF5, 0x1C, 0x10, 0x1B, 0x6F, 0x35, 0x06, 0xD6, 0x9E, 0x35, 0x94, 0xEB, 0x6B, 0x4E, 0x65, 0x72, 0x1D, 0x40, 0xFD, 0x5D, 0x85, 0xBF, 0x8D, 0xCA, 0x80, 0xFD, 0xB1, 0x01, 0xEA, 0x9B, 0xD3, 0xC5, 0x05, 0x2F, 0x47, 0xBD, 0x72, 0x8E, 0xF6, 0x36, 0xAA, 0x39, 0xD9, 0x0C, 0x3A, 0x53, 0x2E, 0x05, 0x32, 0x80, 0x20, 0xD4, 0x70, 0x4A, 0x09, 0x60, 0x0A, 0x84, 0xF0, 0x14, 0x9B, 0xA8, 0x39, 0xF4, 0x52, 0xB3, 0x3F, 0x1D, 0x72, 0xFF, 0x22, 0x74, 0x53, 0x48, 0x43, 0x77, 0xC2, 0x52, 0x32, 0x85, 0x9A, 0x9D, 0x31, 0x5A, 0xDF, 0x42, 0xD9, 0x7D, 0x73, 0x0D, 0xFD, 0xA4, 0xEE, 0x99, 0x00, 0xFA, 0xA9, 0xFA, 0x3D, 0x1D, 0xB6, 0xED, 0xD5, 0xD0, 0xF6, 0x02, 0x5C, 0x81, 0xB0, 0x1B, 0x20, 0x39, 0xBD, 0x91, 0x32, 0x88, 0x0D, 0x78, 0x01, 0xF9, 0xA4, 0x90, 0xDA, 0x71, 0x5A, 0xAE, 0xFD, 0xFE, 0xF5, 0x24, 0xCA, 0x81, 0x9E, 0x6A, 0xEC, 0x93, 0xF6, 0x0F, 0x84, 0x02, 0x3E, 0x2F, 0xCE, 0x02, 0xDF, 0x00, 0x09, 0x60, 0x7E, 0x66, 0x79, 0xAE, 0xCF, 0xF8, 0xC5, 0xA9, 0xAF, 0x87, 0x6B, 0x40, 0x96, 0xB8, 0x1B, 0x2C, 0x2E, 0xDE, 0x58, 0x28, 0x7B, 0xD0, 0xDB, 0xA7, 0x5E, 0x45, 0x6D, 0x7D, 0x14, 0xB5, 0xAC, 0x3B, 0x74, 0x20, 0x02, 0x3F, 0x19, 0xB7, 0xA3, 0x14, 0x8D, 0x72, 0x33, 0x19, 0x6D, 0xC6, 0x38, 0x75, 0x03, 0x15, 0x80, 0xE7, 0xDB, 0x9E, 0x60, 0xCD, 0x23, 0x27, 0x08, 0x07, 0x9C, 0xC8, 0x7D, 0x45, 0x46, 0x3B, 0x15, 0xD7, 0x31, 0x7F, 0x28, 0xDE, 0xE6, 0xEC, 0xA2, 0x80, 0x36, 0x50, 0x93, 0x19, 0x3C, 0xF2, 0xC2, 0x36, 0x60, 0xE9, 0x93, 0xD1, 0x36, 0x6A, 0x50, 0x16, 0xD0, 0x7D, 0x6B, 0xFD, 0x10, 0xB5, 0xFC, 0xDD, 0xE3, 0x4A, 0x8F, 0xCA, 0x81, 0x9B, 0x70, 0x07, 0x32, 0x50, 0xDB, 0xE0, 0x9F, 0x1B, 0x82, 0x70, 0xC1, 0xCE, 0xBB, 0x34, 0xFD, 0x4D, 0x57, 0xF6, 0x27, 0x6A, 0x46, 0x50, 0x13, 0xE0, 0xFA, 0x87, 0xE0, 0x3F, 0x95, 0xC2, 0xD6, 0x7E, 0x6F, 0x9B, 0x2B, 0x6B, 0x40, 0x04, 0x30, 0x03, 0xDC, 0x18, 0xD8, 0x7E, 0xFD, 0x6C, 0x65, 0x7D, 0xE4, 0xC8, 0xC1, 0x7E, 0x1B, 0x0B, 0xB6, 0xDC, 0x64, 0x6D, 0x14, 0xAB, 0x02, 0xED, 0x63, 0x31, 0x00, 0x18, 0x31, 0x0E, 0x05, 0x91, 0xBC, 0x96, 0xED, 0x1F, 0xEE, 0xE7, 0x22, 0x53, 0x54, 0x32, 0xC5, 0xB8, 0x3C, 0xC5, 0x26, 0x6A, 0xD3, 0x9F, 0x40, 0x60, 0x1D, 0xAF, 0x41, 0xDB, 0xB7, 0x46, 0x1E, 0xF6, 0x16, 0x7C, 0xDA, 0xBD, 0x7F, 0xFF, 0x8B, 0xA9, 0x21, 0x3F, 0x24, 0x6B, 0x0C, 0x0E, 0xDF, 0x0C, 0x18, 0x04, 0x11, 0x37, 0xE7, 0x5B, 0x95, 0x9B, 0x7F, 0x4B, 0xD0, 0x85, 0xA3, 0x7D, 0x5A, 0x59, 0xF1, 0x14, 0x9B, 0x9E, 0xDE, 0x6F, 0x89, 0xA5, 0x17, 0x60, 0x32, 0xDF, 0x3D, 0xE2, 0x2B, 0x57, 0x0C, 0x88, 0x63, 0x0E, 0xE8, 0x01, 0xE8, 0xBE, 0x65, 0xEE, 0xCD, 0xA3, 0xC9, 0x56, 0xB9, 0x05, 0xC6, 0x35, 0xB7, 0x37, 0x42, 0x03, 0xA8, 0xC9, 0x4D, 0x9B, 0x64, 0xAD, 0xC6, 0x51, 0x13, 0x41, 0xEC, 0xE6, 0x99, 0x0A, 0xF4, 0x9C, 0x92, 0x13, 0xB5, 0xFE, 0x3D, 0x87, 0x97, 0xCA, 0x6F, 0xA7, 0x20, 0x45, 0x68, 0xD1, 0x91, 0xFF, 0x61, 0x72, 0x04, 0xE9, 0x5B, 0xC4, 0x20, 0x21, 0x87, 0xC3, 0x4A, 0x51, 0xA6, 0x9B, 0xC3, 0xF7, 0x0A, 0xE5, 0x7D, 0x6D, 0xF4, 0xC4, 0x3D, 0xF9, 0x9A, 0x01, 0x64, 0xBD, 0x0D, 0x53, 0x5B, 0xDF, 0xE6, 0x03, 0xBD, 0x81, 0x58, 0xC4, 0x06, 0xAC, 0x46, 0xC2, 0x7E, 0x5D, 0xE4, 0xAC, 0x89, 0x0D, 0x88, 0x01, 0x16, 0xF7, 0xB6, 0x48, 0x69, 0x8A, 0xCA, 0xD8, 0xD4, 0x9D, 0xCF, 0x08, 0x02, 0x4C, 0x80, 0x60, 0x2C, 0xC4, 0xDF, 0x8E, 0x82, 0x11, 0x80, 0x3B, 0x20, 0x82, 0x53, 0x22, 0x01, 0x21, 0x2C, 0x79, 0xCA, 0xAC, 0xD8, 0x95, 0xAA, 0xD7, 0x6A, 0x4C, 0x77, 0x56, 0xDD, 0x34, 0xAB, 0x15, 0xDB, 0x99, 0x64, 0x23, 0x53, 0xC4, 0x3E, 0x85, 0xA1, 0x47, 0x0D, 0xC2, 0x44, 0xEA, 0x5D, 0xB1, 0xD7, 0x64, 0xF4, 0x29, 0xD7, 0x45, 0x9A, 0x5C, 0x22, 0xE4, 0x5D, 0xCA, 0x70, 0x86, 0xCA, 0xB5, 0x16, 0xCB, 0xF6, 0x6E, 0x72, 0x8F, 0x9C, 0x25, 0xA5, 0x3C, 0x59, 0x6C, 0x58, 0x6B, 0xB1, 0x39, 0x1C, 0x05, 0x20, 0x62, 0x09, 0x91, 0x73, 0xCA, 0x2D, 0x25, 0x83, 0xA8, 0x79, 0xFE, 0x90, 0xDA, 0x75, 0xA5, 0x07, 0x8A, 0xAB, 0x24, 0x9B, 0x59, 0x8C, 0x00, 0xD9, 0x2F, 0x42, 0x00, 0x25, 0xF6, 0x06, 0xD4, 0x26, 0x2D, 0x67, 0x82, 0xB6, 0xB1, 0x26, 0xB4, 0x42, 0x6E, 0x5A, 0x72, 0xCE, 0x66, 0x94, 0xD1, 0x8B, 0x55, 0x9F, 0x92, 0xF8, 0xCF, 0xC2, 0x90, 0x8E, 0xE8, 0xFA, 0xC8, 0x1C, 0xF6, 0x91, 0x21, 0x65, 0x1A, 0x7E, 0x9F, 0x42, 0xC6, 0x31, 0x31, 0x1A, 0xDF, 0x4C, 0xE7, 0x4A, 0xD1, 0x46, 0xD3, 0x1A, 0xED, 0x0D, 0x6F, 0x88, 0x02, 0xCC, 0x01, 0x69, 0x84, 0x62, 0x94, 0x9B, 0x35, 0xFD, 0x2D, 0xF6, 0x0C, 0x15, 0xDE, 0x8F, 0x16, 0xA0, 0x79, 0x67, 0x36, 0x85, 0x23, 0x11, 0x04, 0x4D, 0xEC, 0xAF, 0x58, 0xD1, 0x80, 0x4E, 0xCA, 0x2A, 0x23, 0x4A, 0x2E, 0x60, 0x32, 0x82, 0xD5, 0x89, 0x0D, 0x8C, 0x60, 0x19, 0x0E, 0x28, 0xE1, 0x35, 0x5A, 0xC2, 0x04, 0x4D, 0x58, 0xFE, 0x53, 0x33, 0x95, 0x66, 0x6E, 0x75, 0xA1, 0x66, 0x64, 0x74, 0x18, 0x83, 0x94, 0x36, 0x0D, 0x76, 0x27, 0xFB, 0xA5, 0xBE, 0xA5, 0xEC, 0xC9, 0x69, 0xD6, 0xE9, 0x10, 0xCE, 0x61, 0x34, 0xE5, 0x94, 0xE3, 0x7E, 0xE0, 0x4F, 0x3F, 0xB5, 0x75, 0x9A, 0x0D, 0x9C, 0x14, 0x33, 0xC6, 0xA7, 0x88, 0x6D, 0x37, 0x39, 0x56, 0x4E, 0x72, 0xB5, 0x4C, 0xA6, 0x6D, 0x3C, 0x06, 0x87, 0x27, 0x83, 0x2F, 0xF5, 0xFA, 0x1D, 0xD4, 0x29, 0x72, 0x55, 0x4A, 0x4B, 0xCE, 0x48, 0xAE, 0x00, 0xB4, 0x81, 0x9E, 0x24, 0xB6, 0x1C, 0x11, 0xEA, 0x6D, 0x30, 0x5E, 0x09, 0x68, 0x03, 0x2B, 0x00, 0xD9, 0x3C, 0x65, 0x82, 0xC6, 0x84, 0xF8, 0x88, 0x8D, 0x52, 0x42, 0x6F, 0xC8, 0x23, 0x69, 0x78, 0x1E, 0x65, 0xD0, 0xBA, 0xC1, 0xF0, 0x20, 0x0A, 0xE1, 0xAD, 0x42, 0x7F, 0x41, 0xF3, 0xD7, 0x34, 0x61, 0x36, 0x83, 0x88, 0x93, 0xE8, 0xF8, 0x8B, 0x16, 0x20, 0xF1, 0xFA, 0x47, 0x9F, 0x46, 0x89, 0x9B, 0x43, 0x85, 0x58, 0x02, 0x68, 0x03, 0xA9, 0xEF, 0x5C, 0x78, 0xAD, 0x47, 0x7E, 0xAC, 0x7C, 0xED, 0x6D, 0x6A, 0x7D, 0x7A, 0x96, 0x01, 0x76, 0xCC, 0xAF, 0x32, 0xA7, 0x43, 0xF8, 0x9B, 0xE8, 0x3D, 0xDF, 0xEA, 0x32, 0xA0, 0x94, 0xE1, 0x15, 0x40, 0x46, 0xB9, 0x13, 0xC0, 0x02, 0xD8, 0x1B, 0x90, 0xE2, 0x29, 0x3E, 0x41, 0x33, 0xAC, 0x43, 0x56, 0xFE, 0x96, 0x07, 0x5A, 0x0E, 0x19, 0x5A, 0x92, 0xBD, 0x22, 0x85, 0x45, 0xE0, 0x45, 0xF5, 0x32, 0xD8, 0xEC, 0x71, 0xBF, 0xDA, 0xED, 0xD7, 0x35, 0xA1, 0x63, 0x4A, 0xF6, 0x65, 0xBE, 0x3B, 0x40, 0x27, 0x71, 0x5B, 0x46, 0x81, 0xE6, 0x88, 0xE5, 0x67, 0x5A, 0x7B, 0xE4, 0xFE, 0xF1, 0x64, 0x05, 0x66, 0x21, 0x51, 0x0C, 0x25, 0x9E, 0x6E, 0x9B, 0xE0, 0xDA, 0xAA, 0x4F, 0x51, 0x58, 0xED, 0x71, 0x6F, 0xB5, 0x79, 0x42, 0x53, 0xB7, 0x7C, 0x1A, 0x7E, 0xE4, 0x51, 0x8E, 0xCA, 0x78, 0xB9, 0x29, 0xD0, 0xFD, 0x6E, 0x13, 0xD8, 0x02, 0x34, 0x81, 0xCD, 0xDD, 0x82, 0x24, 0x4C, 0x81, 0x18, 0xBF, 0x95, 0x9E, 0xA8, 0x39, 0x76, 0xEE, 0x5A, 0x7F, 0x51, 0x93, 0x48, 0xB6, 0x3E, 0xD3, 0xC7, 0xF3, 0x76, 0xAD, 0xC6, 0x73, 0x28, 0x68, 0x47, 0x1A, 0xF9, 0x74, 0xB6, 0xFF, 0xBA, 0x9A, 0x18, 0x8E, 0xF2, 0x98, 0xE1, 0x2D, 0x03, 0xE2, 0xE9, 0xCB, 0xBF, 0x4E, 0xB6, 0xBB, 0xF9, 0xEB, 0x0B, 0x27, 0x4A, 0xF8, 0x85, 0xB1, 0x28, 0x00, 0xCF, 0x48, 0x8C, 0x74, 0x63, 0xB4, 0xDE, 0x6D, 0xA6, 0x55, 0x33, 0x51, 0x9D, 0x11, 0x3E, 0xFA, 0x75, 0x7E, 0xEA, 0x3F, 0x12, 0x98, 0xAF, 0x6C, 0x35, 0x10, 0xF5, 0x66, 0x53, 0xEF, 0xF5, 0x3A, 0x1C, 0x86, 0x02, 0x7B, 0xCF, 0x99, 0x40, 0x25, 0x4F, 0x99, 0xA1, 0x36, 0x06, 0x90, 0x35, 0xA9, 0x87, 0x4F, 0xD1, 0xAC, 0x6D, 0x57, 0x64, 0x51, 0xEE, 0xC6, 0x53, 0x69, 0xE4, 0xBD, 0xDA, 0x8F, 0x65, 0xBC, 0x01, 0xF3, 0xC5, 0xE7, 0xE9, 0xAA, 0x42, 0xFD, 0xB1, 0xB9, 0x18, 0xAF, 0xE6, 0x51, 0x32, 0xB5, 0xC7, 0xA9, 0xA1, 0xC6, 0x24, 0x5A, 0xDE, 0x76, 0x6C, 0xFB, 0xC8, 0xBA, 0x32, 0xD2, 0xAD, 0x33, 0x33, 0xAF, 0x5F, 0xCF, 0x8E, 0xB9, 0x29, 0x6D, 0xBF, 0x15, 0xFB, 0x7A, 0x1E, 0x9B, 0xB1, 0x69, 0xA2, 0xF6, 0x68, 0x9A, 0x75, 0x1C, 0x1B, 0x56, 0x03, 0x1E, 0xA3, 0xCB, 0x02, 0x1D, 0x54, 0xF2, 0xFA, 0xC5, 0x66, 0x24, 0x2A, 0x80, 0xDC, 0x40, 0xF1, 0x9F, 0xCF, 0x3D, 0x31, 0x4B, 0xDC, 0x19, 0xBD, 0x21, 0x13, 0xC8, 0x37, 0x79, 0x88, 0xC2, 0x71, 0xFF, 0xCD, 0x4A, 0x94, 0xB5, 0x3E, 0xC8, 0x7E, 0xE6, 0x8E, 0x27, 0x50, 0x33, 0x0D, 0x1F, 0x7D, 0xDD, 0xE9, 0xA8, 0xEF, 0x4E, 0xDD, 0xEB, 0x87, 0x60, 0x6A, 0x24, 0xBD, 0xF0, 0xB5, 0xC7, 0x4B, 0x82, 0xDA, 0xFB, 0x94, 0xAB, 0xF3, 0x9E, 0x04, 0xED, 0x9D, 0xD7, 0x93, 0xBF, 0x25, 0xFE, 0x62, 0x1F, 0xEF, 0xCC, 0x02, 0x54, 0x27, 0x43, 0x92, 0x21, 0xA7, 0x28, 0x52, 0xA3, 0xEB, 0xB1, 0xE5, 0xCD, 0xA2, 0x1A, 0x39, 0x7E, 0xFE, 0x32, 0x1A, 0x9C, 0x8C, 0xB8, 0x01, 0x44, 0x12, 0x0D, 0xF8, 0x02, 0x64, 0x03, 0x6B, 0x8E, 0x92, 0x12, 0xA5, 0x4E, 0xCC, 0x0A, 0x33, 0xE5, 0x6A, 0x5A, 0xE1, 0xE7, 0xD3, 0x34, 0xA4, 0x36, 0x74, 0xA1, 0x25, 0x05, 0xD1, 0xA7, 0x9A, 0xBA, 0x2C, 0xE4, 0xA1, 0x49, 0xDE, 0x31, 0x80, 0x11, 0xE4, 0x5F, 0x40, 0x58, 0xA9, 0xC5, 0xF0, 0xCF, 0x1A, 0x43, 0xE7, 0x0C, 0x5D, 0x32, 0x74, 0xA1, 0xB7, 0xA7, 0x0A, 0x77, 0x17, 0x15, 0xD3, 0x01, 0x88, 0xD1, 0x4F, 0xCD, 0x34, 0x76, 0xF9, 0xB0, 0x1F, 0xC3, 0x5B, 0x4A, 0x29, 0xB0, 0x12, 0x18, 0xE7, 0xFE, 0x5E, 0x1C, 0xBB, 0x49, 0x79, 0x9D, 0xE1, 0x99, 0x80, 0x24, 0x55, 0xDA, 0xA2, 0xF6, 0x1A, 0xD4, 0xA8, 0x54, 0xA0, 0xDD, 0xAD, 0x02, 0xAC, 0x01, 0x37, 0xC0, 0x0A, 0xD0, 0x41, 0x02, 0x3E, 0x0A, 0x67, 0x4E, 0xCC, 0x1A, 0x2A, 0x74, 0x4D, 0xF1, 0xE7, 0x34, 0x7F, 0x74, 0x64, 0xDD, 0xEE, 0xA0, 0xEF, 0xB5, 0x23, 0xFF, 0x23, 0x36, 0x95, 0x9F, 0xFD, 0xFA, 0xA8, 0xF5, 0xE7, 0xE1, 0xD9, 0xBA, 0xEE, 0xF6, 0x57, 0x9F, 0x56, 0x82, 0xA5, 0xD7, 0x2A, 0x58, 0x4F, 0xA3, 0x04, 0xB9, 0x4D, 0x02, 0xF2, 0xD4, 0x3D, 0xCA, 0xB3, 0xA9, 0x3E, 0xF5, 0xA9, 0x93, 0x69, 0x89, 0x8B, 0x9A, 0xEA, 0x1D, 0xA1, 0x80, 0xD5, 0x59, 0x9F, 0x5E, 0x77, 0x20, 0x3F, 0x53, 0xBF, 0x15, 0xDC, 0x42, 0xBE, 0xD7, 0xF1, 0xCD, 0x97, 0x5F, 0x9F, 0x96, 0x52, 0x6E, 0x80, 0xF9, 0xDB, 0x1F, 0x3D, 0x04, 0x10, 0x05, 0x4C, 0xE6, 0x14, 0x46, 0xCD, 0x10, 0xFB, 0x76, 0x41, 0x12, 0x4C, 0x19, 0xF6, 0x03, 0x32, 0xB0, 0x7B, 0xDF, 0xB3, 0xD4, 0x9E, 0xE2, 0xCB, 0xFC, 0x7D, 0x4C, 0x55, 0x7B, 0x17, 0x9F, 0xF3, 0x1C, 0x18, 0xD1, 0x87, 0x31, 0xDC, 0x67, 0x09, 0x12, 0x0E, 0xBC, 0x26, 0xE2, 0x14, 0x6C, 0xFB, 0x2C, 0xD2, 0x73, 0x8A, 0x2A, 0x09, 0xF1, 0x9B, 0xED, 0x03, 0x49, 0xEE, 0xC9, 0x41, 0x48, 0x01, 0x26, 0x94, 0x1E, 0x40, 0x4D, 0xD4, 0x94, 0x4A, 0xC1, 0xF1, 0xFA, 0x2B, 0xCE, 0xF6, 0x66, 0x0A, 0x28, 0x53, 0x01, 0x03, 0x8C, 0x91, 0x8F, 0x4C, 0x6B, 0x51, 0x01, 0xAC, 0x09, 0x05, 0xF6, 0xE9, 0x0B, 0x07, 0xD8, 0x02, 0x3C, 0x79, 0x4A, 0x4E, 0xD4, 0x36, 0x24, 0x76, 0x47, 0x2E, 0xE2, 0x4A, 0x56, 0xDB, 0x99, 0x3C, 0x6D, 0x30, 0x44, 0x7E, 0xE1, 0x4A, 0xCD, 0x46, 0x24, 0x76, 0xCF, 0x52, 0xE0, 0xF5, 0xEC, 0x9B, 0x44, 0x1B, 0xCB, 0x31, 0x39, 0x7E, 0x1C, 0x65, 0xE5, 0x34, 0x14, 0x4E, 0xFE, 0xDF, 0xEB, 0x07, 0x3F, 0x1E, 0xEF, 0x5D, 0xD7, 0x38, 0x89, 0xCB, 0xC6, 0x3E, 0x22, 0x48, 0x4C, 0xDE, 0x95, 0x7C, 0xFA, 0xA5, 0x13, 0x46, 0x44, 0xDC, 0x4C, 0x20, 0x4C, 0xF7, 0xAE, 0xB2, 0xC8, 0x26, 0xA8, 0x77, 0x76, 0x2B, 0x0E, 0x44, 0xCC, 0x56, 0xD2, 0x3B, 0xAD, 0xAD, 0x0D, 0x44, 0x03, 0xAA, 0xAF, 0x0F, 0xAE, 0x6E, 0xC0, 0x7A, 0x46, 0xE5, 0x44, 0x4D, 0xA0, 0xD8, 0x9F, 0x1C, 0x3F, 0x5A, 0x55, 0xE8, 0x44, 0x6D, 0x5A, 0xD4, 0x37, 0x9C, 0xAB, 0x64, 0xC3, 0x55, 0xB3, 0xFA, 0x1D, 0x6B, 0xFB, 0x33, 0xD6, 0x2A, 0x66, 0xAC, 0x31, 0xDE, 0xAE, 0xC0, 0xAA, 0x5B, 0xBE, 0xB4, 0xC6, 0x69, 0xA9, 0xF2, 0xAD, 0xDE, 0xB4, 0xC9, 0x56, 0xFB, 0x5C, 0xA1, 0x19, 0x9F, 0x2B, 0x74, 0x13, 0x49, 0xCC, 0xCA, 0x7D, 0x62, 0x28, 0x63, 0x44, 0x33, 0x8B, 0xF4, 0x59, 0x88, 0xF3, 0xC6, 0xD0, 0x67, 0x0D, 0x0B, 0x54, 0xBD, 0xB3, 0x5C, 0x33, 0xA0, 0x1B, 0xA8, 0x00, 0xC6, 0xB9, 0x68, 0xCE, 0xB4, 0x0D, 0xCC, 0x0A, 0x31, 0x7A, 0xA2, 0xA6, 0xB4, 0x41, 0xA2, 0xB6, 0x56, 0x05, 0x03, 0xCD, 0x56, 0x14, 0x21, 0x97, 0x61, 0x8B, 0x76, 0x35, 0x6E, 0x4B, 0x6E, 0xBC, 0x49, 0xE9, 0x94, 0x5E, 0xBC, 0xA5, 0x3E, 0x53, 0x44, 0x7C, 0xDC, 0x7B, 0x66, 0x17, 0x78, 0x03, 0x56, 0x33, 0x79, 0x78, 0x17, 0x52, 0x67, 0x85, 0x39, 0xF2, 0xF3, 0x88, 0x36, 0x4F, 0xA5, 0x2D, 0x77, 0xD2, 0xC6, 0xE2, 0xAB, 0xFF, 0xC4, 0xC3, 0x04, 0x6C, 0x3D, 0x0E, 0x0D, 0x3A, 0x93, 0x2A, 0xDE, 0xC1, 0xF2, 0x2C, 0xD9, 0x73, 0xEC, 0x42, 0xD6, 0xBB, 0xE6, 0xDE, 0x02, 0xBC, 0x5E, 0xBB, 0xBF, 0x25, 0x17, 0x60, 0x0B, 0x10, 0x9F, 0x8D, 0x62, 0x20, 0x67, 0x32, 0xB6, 0x81, 0xF6, 0x09, 0x9A, 0x61, 0x01, 0xBF, 0xEA, 0x97, 0x11, 0xA9, 0x15, 0x74, 0x19, 0xAA, 0xA7, 0xB7, 0xCF, 0xAE, 0x0D, 0xF1, 0xCE, 0xD8, 0xCB, 0xD2, 0x7D, 0x52, 0x86, 0x98, 0xCF, 0xF1, 0x5E, 0xA0, 0xC4, 0x0E, 0xDE, 0x3A, 0xF7, 0x69, 0x59, 0x3A, 0xC5, 0xAE, 0x23, 0x58, 0xCC, 0x84, 0x3F, 0xC7, 0xE2, 0x8B, 0x91, 0x89, 0x9E, 0x66, 0xB3, 0x3F, 0x4C, 0x7E, 0xD9, 0xB8, 0x79, 0xC9, 0xA4, 0x8A, 0x34, 0x60, 0x0E, 0xCC, 0x8B, 0x31, 0x22, 0xAB, 0x4C, 0x43, 0xCF, 0xF3, 0x2C, 0x7B, 0x5B, 0xC8, 0xF9, 0x98, 0x64, 0xF1, 0x79, 0x0C, 0x15, 0x43, 0x67, 0x1B, 0x99, 0x80, 0xE7, 0x24, 0x94, 0x98, 0x02, 0xD2, 0x00, 0xA9, 0x49, 0x54, 0xC0, 0xD1, 0x2E, 0x9C, 0x29, 0x35, 0x51, 0x73, 0x18, 0x7F, 0xB4, 0xC3, 0x6E, 0x62, 0x17, 0x2F, 0x7A, 0x83, 0xBF, 0x89, 0xB3, 0x82, 0xB1, 0xF8, 0x95, 0x5B, 0x21, 0xE5, 0x6C, 0x5D, 0x9B, 0xFD, 0x5B, 0x2C, 0xAB, 0x71, 0x8B, 0xD2, 0xA7, 0xCA, 0xFA, 0x56, 0xC2, 0xCE, 0x18, 0xCF, 0x59, 0x16, 0x3E, 0x65, 0x86, 0x72, 0x82, 0x17, 0x33, 0xF1, 0x57, 0x80, 0x56, 0xFA, 0x3D, 0x12, 0xEF, 0xE9, 0xA2, 0x0A, 0xC8, 0x5C, 0xCA, 0xFB, 0xDE, 0xF2, 0x92, 0x67, 0x1E, 0x59, 0x33, 0x8E, 0x6C, 0xE2, 0xC9, 0xAF, 0x2E, 0x80, 0xB2, 0xB9, 0xBB, 0xBD, 0x49, 0x43, 0x31, 0x0F, 0x4D, 0x05, 0x56, 0xCE, 0x16, 0x3E, 0x60, 0x0B, 0x78, 0xAF, 0x10, 0x3B, 0xED, 0x7D, 0x0A, 0xAD, 0x8C, 0xD1, 0x43, 0xB6, 0xD0, 0x80, 0x00, 0xA3, 0x72, 0xC7, 0x63, 0xAA, 0xA9, 0xEA, 0x3F, 0xE1, 0xDF, 0x42, 0x38, 0x61, 0x98, 0x66, 0xD9, 0x60, 0xD8, 0xA7, 0x0F, 0x86, 0xD6, 0xBC, 0x85, 0x97, 0xDF, 0xE6, 0xE2, 0xB2, 0xBF, 0xC2, 0x6D, 0x8E, 0x75, 0xCC, 0xD3, 0xE7, 0x3F, 0x27, 0x9F, 0x2E, 0xDE, 0xB1, 0x56, 0xF9, 0xCE, 0x46, 0x7C, 0xBF, 0x4D, 0xCA, 0x52, 0x80, 0x7A, 0x15, 0x96, 0x31, 0xC9, 0x8C, 0xA3, 0xC9, 0xED, 0x9C, 0x3A, 0xD3, 0xD7, 0x1E, 0xB0, 0xFA, 0x26, 0x7A, 0xE9, 0x91, 0xF4, 0x16, 0x63, 0xD8, 0x44, 0x08, 0xB0, 0x6A, 0x9E, 0x1E, 0x40, 0x25, 0x4F, 0xD9, 0x13, 0xB5, 0xC4, 0xFC, 0xDC, 0x14, 0xE5, 0x9F, 0xBE, 0x27, 0x5C, 0x04, 0xA5, 0x15, 0xC5, 0xAA, 0x5D, 0x03, 0xAE, 0x9A, 0x6F, 0xA3, 0x9A, 0x57, 0x1F, 0xBA, 0x69, 0x30, 0x68, 0xE4, 0x83, 0xC4, 0x82, 0x0D, 0x8C, 0x15, 0x69, 0x4E, 0x07, 0xC6, 0xA9, 0xD9, 0xFE, 0xB4, 0x67, 0x57, 0x3B, 0x42, 0x33, 0x86, 0xF3, 0x2B, 0x75, 0x4C, 0xCE, 0x64, 0x25, 0xE0, 0x02, 0xAC, 0x00, 0xF4, 0x74, 0x90, 0x50, 0xCE, 0x2D, 0x26, 0x27, 0xD0, 0x6F, 0x03, 0x2B, 0x34, 0x9B, 0xC3, 0x65, 0xC7, 0x2B, 0xCC, 0x47, 0x23, 0xD5, 0xB7, 0xEA, 0xAC, 0x8A, 0x50, 0xC0, 0xE3, 0x6D, 0x9E, 0x5D, 0x02, 0x1C, 0x9F, 0xAD, 0xB9, 0xAD, 0xB1, 0xA8, 0x38, 0x1B, 0x0E, 0xCB, 0x7E, 0xEF, 0x67, 0x03, 0x49, 0xCC, 0x6A, 0x65, 0xA3, 0x19, 0xB9, 0x4C, 0xA6, 0x1F, 0xC5, 0x79, 0xAC, 0xA4, 0xEF, 0xDE, 0x1A, 0x24, 0xBD, 0xC9, 0x01, 0x9A, 0x59, 0x3F, 0x30, 0x05, 0x8D, 0xB1, 0xF8, 0xDF, 0x33, 0x84, 0xE1, 0xFC, 0xDD, 0x71, 0xBB, 0x91, 0x0A, 0xE3, 0xCA, 0xF5, 0xF9, 0xAE, 0xD9, 0x98, 0x3C, 0xFD, 0xEE, 0x6D, 0xA4, 0xE8, 0xA2, 0x0A, 0x12, 0x40, 0xF3, 0x94, 0xA9, 0xAF, 0xF6, 0x60, 0xB4, 0x04, 0xF1, 0xB1, 0xBC, 0x0E, 0x80, 0x98, 0x6E, 0xF3, 0xB6, 0xCF, 0xFF, 0x6C, 0x6A, 0x9F, 0x16, 0x10, 0x46, 0x6C, 0x40, 0x1D, 0xA7, 0x74, 0x01, 0xD1, 0x40, 0x25, 0x7E, 0xD6, 0xE7, 0xFA, 0x6C, 0x7A, 0xE8, 0x41, 0xF0, 0x50, 0xDB, 0x4C, 0x80, 0xAB, 0x27, 0x68, 0xBE, 0x8D, 0xA9, 0x81, 0xFC, 0xCF, 0x6C, 0xEA, 0x22, 0xAE, 0x23, 0xE9, 0xC4, 0x70, 0x9A, 0x0B, 0x4D, 0x6E, 0xA8, 0x2A, 0xC1, 0xE4, 0x3A, 0x1D, 0xC1, 0xB6, 0x4F, 0x2A, 0x99, 0xC6, 0xBD, 0x9F, 0xC8, 0x69, 0x2C, 0xDC, 0x0B, 0x90, 0x7B, 0x57, 0x82, 0x6C, 0x7C, 0x1D, 0x00, 0xFC, 0x94, 0x5E, 0x67, 0x02, 0x55, 0x38, 0x05, 0x17, 0x8F, 0x51, 0xC9, 0xDE, 0xB7, 0xEF, 0xC6, 0x94, 0xFF, 0xDD, 0x6C, 0xAA, 0x8D, 0x17, 0x4D, 0x8E, 0xD1, 0xBF, 0x34, 0x50, 0x4A, 0x6C, 0x20, 0x16, 0x20, 0x3C, 0xB3, 0x93, 0x47, 0x6B, 0xF6, 0xF1, 0x19, 0x34, 0x9F, 0xB9, 0x21, 0x32, 0x95, 0xF5, 0xEE, 0x17, 0x03, 0x8C, 0x79, 0x36, 0xB2, 0xDB, 0x44, 0x7F, 0x70, 0xF4, 0xB4, 0x6F, 0xE3, 0xBD, 0xCC, 0x81, 0xCA, 0x4F, 0xDD, 0x67, 0x29, 0x13, 0x30, 0x16, 0x70, 0x3C, 0xCA, 0x46, 0xE9, 0xE0, 0xD3, 0x9F, 0x8F, 0x2C, 0x1E, 0xC9, 0xDF, 0x10, 0x99, 0xA6, 0xF4, 0x7E, 0xEB, 0x7D, 0x9D, 0xEB, 0x1E, 0xEA, 0x09, 0xE8, 0x14, 0x0E, 0x78, 0xF1, 0x45, 0x4E, 0x6B, 0x66, 0x43, 0xC2, 0x9C, 0x62, 0xC1, 0xD4, 0x63, 0x09, 0x52, 0x5F, 0x7A, 0x0A, 0xC6, 0x1E, 0xCB, 0x31, 0x3C, 0x77, 0x61, 0xB0, 0x94, 0xAC, 0x1F, 0x32, 0x40, 0x93, 0x10, 0x60, 0x37, 0x20, 0x0B, 0x40, 0x7D, 0x1B, 0x46, 0x2D, 0x63, 0xC6, 0xA1, 0x15, 0x63, 0xFA, 0x55, 0x77, 0xD5, 0x5E, 0xED, 0x8A, 0xDC, 0xC1, 0x62, 0xDB, 0x9F, 0xEC, 0x69, 0x0A, 0x3B, 0x23, 0xEB, 0xCD, 0xEC, 0xDB, 0xBC, 0x3A, 0x63, 0x5D, 0x5B, 0x48, 0x48, 0x5D, 0x00, 0x4B, 0x3C, 0x93, 0x32, 0xC8, 0xA8, 0xF1, 0x99, 0x57, 0x25, 0x34, 0xC6, 0x47, 0x79, 0xB4, 0xCF, 0x5C, 0xB2, 0x37, 0xA5, 0xB1, 0xFD, 0x36, 0x40, 0x31, 0x03, 0xB6, 0x03, 0xB9, 0xAF, 0x33, 0x42, 0x1F, 0x63, 0xCE, 0x29, 0x2A, 0x1B, 0xB3, 0x40, 0xA3, 0x77, 0x98, 0xC4, 0x2B, 0x59, 0x6C, 0x01, 0x5A, 0x98, 0x75, 0x64, 0x80, 0x7D, 0x8E, 0x24, 0x80, 0xDD, 0x80, 0xF6, 0xD4, 0xFD, 0x4E, 0xD0, 0x04, 0xE9, 0x62, 0xB7, 0x2F, 0x2F, 0x72, 0x15, 0xFB, 0x59, 0x4A, 0xC5, 0x76, 0xE4, 0xFA, 0x3B, 0xCD, 0x10, 0x91, 0x19, 0xDF, 0xFE, 0x6D, 0x88, 0xA4, 0x93, 0x1A, 0x60, 0xF3, 0x96, 0x1E, 0x87, 0xD6, 0x69, 0x9C, 0xFD, 0xB6, 0xCB, 0x3A, 0xCB, 0x5A, 0xC3, 0x1C, 0xAB, 0x67, 0xEB, 0xF8, 0xDD, 0xDA, 0x9C, 0x9D, 0xF6, 0xEE, 0x77, 0xAD, 0xB9, 0x15, 0x90, 0x20, 0x12, 0x98, 0xA9, 0x47, 0x9D, 0x16, 0x5C, 0x3D, 0xC2, 0xF0, 0x5D, 0xC8, 0xF9, 0xF1, 0x79, 0xEC, 0xF1, 0x80, 0xD4, 0x49, 0xB5, 0x7C, 0xF7, 0x53, 0xAA, 0x89, 0x05, 0x4C, 0xB2, 0x75, 0x0B, 0xE0, 0x1B, 0x88, 0xE0, 0x29, 0x7B, 0xA2, 0x76, 0xFC, 0x5A, 0x61, 0xFB, 0x66, 0x27, 0x5C, 0x07, 0xF2, 0xA7, 0xAA, 0x67, 0x26, 0xAD, 0x4A, 0xFA, 0xDC, 0xF9, 0xE1, 0x97, 0x7F, 0xF7, 0xF1, 0xB0, 0xC3, 0xCE, 0x01, 0xC4, 0x47, 0x8E, 0x4C, 0xA9, 0xB0, 0x73, 0x82, 0x39, 0x99, 0xDF, 0x3F, 0xD8, 0xE9, 0x8B, 0xB2, 0x74, 0x3E, 0xE7, 0x95, 0x43, 0xEC, 0xCF, 0x54, 0x9A, 0x93, 0xB8, 0xD9, 0x30, 0x0F, 0x05, 0x9C, 0x50, 0x01, 0x70, 0xA6, 0xF3, 0x97, 0xD9, 0xD9, 0xB9, 0xDB, 0xB8, 0xA1, 0xF3, 0x36, 0xC4, 0xB6, 0x01, 0xC6, 0x50, 0x38, 0xF7, 0x61, 0x7C, 0xFF, 0x35, 0xC9, 0xD9, 0x53, 0x52, 0x09, 0x84, 0x02, 0xBE, 0x01, 0x21, 0xF6, 0x02, 0xD4, 0x27, 0x5B, 0x6E, 0x82, 0x66, 0x58, 0x51, 0xCB, 0x46, 0x99, 0x94, 0xDB, 0x55, 0x6F, 0x57, 0xB4, 0x32, 0x55, 0x33, 0xB1, 0x53, 0xCD, 0x05, 0x55, 0xAB, 0xDD, 0x2D, 0xA9, 0x92, 0x77, 0x1F, 0x6F, 0x32, 0x53, 0x4E, 0x7C, 0x4E, 0x5D, 0xBE, 0xAE, 0xD9, 0xC0, 0xBB, 0x2B, 0x84, 0x3C, 0xAE, 0x1B, 0x2A, 0xD7, 0xD1, 0x78, 0xE1, 0xE2, 0x9B, 0xBA, 0x87, 0x3C, 0xED, 0xBC, 0xF6, 0x31, 0xB8, 0x02, 0xD2, 0x2F, 0xE2, 0x6F, 0x8F, 0x78, 0x5D, 0xF7, 0x0C, 0x3C, 0xB8, 0x6E, 0x67, 0x8B, 0x1E, 0x51, 0x76, 0x32, 0xB9, 0x4E, 0x21, 0xA9, 0x35, 0x2F, 0xE1, 0x04, 0x8A, 0x68, 0x07, 0xCA, 0x80, 0xD8, 0x80, 0xAF, 0x9B, 0x09, 0x7B, 0x77, 0x8C, 0xDD, 0xE9, 0xEC, 0x43, 0xBF, 0x7D, 0x96, 0x04, 0x89, 0x27, 0x24, 0xAF, 0x54, 0x04, 0x54, 0x47, 0x07, 0x33, 0xBA, 0xD3, 0x60, 0x25, 0xA5, 0x5F, 0x57, 0x13, 0x7B, 0xFC, 0xFE, 0xE7, 0xC2, 0x14, 0xAA, 0xCF, 0x32, 0x0E, 0xFB, 0x75, 0xDC, 0x3A, 0x7C, 0x36, 0xA3, 0xB8, 0x80, 0xE4, 0xFB, 0xFA, 0x69, 0xB9, 0xE0, 0x27, 0xA5, 0x2A, 0xA6, 0x3C, 0xCA, 0x5F, 0x21, 0x4D, 0x04, 0x38, 0x0D, 0x2A, 0xE7, 0xCF, 0x8E, 0x9A, 0x57, 0xC6, 0x1C, 0x71, 0x46, 0x6D, 0x37, 0xA3, 0x66, 0x94, 0xAB, 0x03, 0xE1, 0x5A, 0x8C, 0xCC, 0x2A, 0x04, 0x61, 0x19, 0x10, 0x0B, 0x48, 0x01, 0xC2, 0x01, 0x2B, 0x40, 0x1F, 0xAF, 0xCD, 0x2B, 0x46, 0x7A, 0x60, 0x95, 0xB5, 0xEA, 0xED, 0xCB, 0x3B, 0x75, 0x49, 0xA6, 0x78, 0xE8, 0xAF, 0x46, 0xBB, 0x65, 0xEE, 0x49, 0xEE, 0xC2, 0x50, 0xFB, 0x7A, 0xC6, 0x9B, 0xDD, 0x82, 0xB5, 0xDD, 0x47, 0xAF, 0x76, 0x8A, 0x31, 0x3D, 0x3B, 0x1A, 0x71, 0x77, 0xF7, 0xF4, 0xA4, 0x6D, 0x84, 0x63, 0xCE, 0xFA, 0x24, 0xFE, 0xF8, 0xB1, 0xDA, 0x8B, 0xF8, 0x04, 0x6D, 0x01, 0xDB, 0x01, 0x51, 0xA0, 0xE2, 0x56, 0xF7, 0x6D, 0x9D, 0xA5, 0x13, 0xFF, 0x6C, 0xF2, 0x09, 0xB4, 0x39, 0xD3, 0x96, 0xA3, 0xC7, 0x97, 0xDD, 0x84, 0x73, 0xC4, 0x07, 0xF7, 0x91, 0x4D, 0x08, 0xB0, 0x94, 0x3F, 0x4B, 0xC0, 0x04, 0x60, 0x7A, 0x2F, 0x80, 0xA0, 0x25, 0x66, 0x12, 0x4B, 0xD1, 0x6D, 0xFC, 0xAA, 0xDE, 0x00, 0x9F, 0x4E, 0x1A, 0x6C, 0x7B, 0xD3, 0x5C, 0x7A, 0x63, 0x4B, 0x6A, 0xBA, 0x13, 0xE4, 0x04, 0x2D, 0xCE, 0x16, 0x11, 0x97, 0x22, 0x94, 0xEE, 0x4D, 0x6F, 0x1B, 0xC5, 0x18, 0x75, 0x6B, 0xA4, 0xC1, 0xE3, 0x7D, 0x64, 0x71, 0x73, 0xF1, 0xE8, 0xAE, 0xDC, 0xE7, 0x62, 0x8F, 0xE9, 0x06, 0x22, 0x93, 0x9D, 0x05, 0x68, 0xBF, 0x6B, 0xF6, 0x8C, 0x47, 0x83, 0x8C, 0x63, 0x1F, 0x2C, 0x7E, 0x3D, 0x35, 0x6E, 0x5B, 0x7C, 0x99, 0xB9, 0x0E, 0xD0, 0xFB, 0x4D, 0x7B, 0x77, 0x27, 0x0C, 0x90, 0x71, 0x12, 0x28, 0xC0, 0x89, 0x11, 0x3C, 0x4A, 0x27, 0x68, 0xC5, 0x9E, 0x78, 0x32, 0x23, 0x8D, 0xCD, 0xE3, 0xF7, 0xA3, 0x74, 0x98, 0x6E, 0xEE, 0x70, 0x2B, 0x4D, 0xE9, 0xFB, 0x69, 0x33, 0x9E, 0xF1, 0x35, 0xB8, 0xDA, 0x77, 0xA7, 0x9C, 0x8A, 0x28, 0x2D, 0xB8, 0xEE, 0x2E, 0xBA, 0x9D, 0x00, 0x29, 0x02, 0x24, 0xA7, 0x95, 0xF9, 0xDB, 0x14, 0xC4, 0x9F, 0xD6, 0x31, 0xF0, 0x4C, 0x7A, 0xC6, 0x98, 0x0A, 0xD1, 0xB7, 0x1E, 0x2F, 0x66, 0x23, 0xCF, 0x4E, 0x13, 0x47, 0xDF, 0xA7, 0xE6, 0x89, 0x1F, 0x6D, 0xFA, 0x61, 0x4E, 0x7A, 0x09, 0xD0, 0x8C, 0xC5, 0x52, 0x20, 0xE4, 0x0D, 0xD0, 0xF1, 0x5D, 0x31, 0xC0, 0x17, 0x70, 0x27, 0x50, 0x8C, 0x1A, 0x93, 0xE2, 0x3B, 0x7E, 0x8F, 0x02, 0x79, 0xED, 0x86, 0xC4, 0xB6, 0x51, 0x74, 0xDF, 0xBC, 0x5D, 0xCF, 0x67, 0xDF, 0x9C, 0xA3, 0x7D, 0x95, 0x8E, 0xFA, 0xB4, 0x92, 0xDA, 0xCF, 0xBE, 0x12, 0x44, 0x6D, 0xAE, 0x77, 0xF9, 0x2C, 0xC8, 0xEB, 0x81, 0x44, 0x85, 0xE6, 0xF4, 0xE3, 0xC4, 0xCF, 0x6E, 0x28, 0x7D, 0xAE, 0x3E, 0xDE, 0xFD, 0x43, 0x00, 0x4F, 0xC0, 0x1E, 0x71, 0xB7, 0x46, 0x9F, 0xC4, 0x39, 0x18, 0xCD, 0x39, 0xCD, 0x44, 0xAF, 0x85, 0x8D, 0x9C, 0xFD, 0xAF, 0xBD, 0x3E, 0xD7, 0x29, 0xD7, 0xA4, 0xFB, 0x83, 0xB5, 0xE6, 0x1A, 0x06, 0xAC, 0x80, 0xF0, 0x59, 0xBD, 0x32, 0x6A, 0x54, 0x4F, 0x34, 0xED, 0x7B, 0x57, 0x23, 0xF8, 0xD5, 0xB1, 0x0D, 0xE3, 0xC9, 0x48, 0x52, 0x44, 0x69, 0x7F, 0x9B, 0xCB, 0xCE, 0x2D, 0xFD, 0x3C, 0x40, 0x37, 0x83, 0xF6, 0x64, 0xC0, 0x4C, 0xEB, 0xAB, 0xE2, 0xFB, 0xED, 0x94, 0x85, 0xEA, 0xFB, 0xC8, 0x04, 0x20, 0xBC, 0xB2, 0x34, 0xF1, 0x75, 0x1C, 0xDD, 0x0A, 0x68, 0xCC, 0x8B, 0xB7, 0x40, 0x77, 0xF4, 0xF1, 0x9D, 0x67, 0x51, 0x31, 0xBB, 0x54, 0xCE, 0xC7, 0x62, 0xFA, 0xB5, 0xC1, 0xEE, 0x63, 0x3D, 0xEC, 0xFB, 0xEE, 0xDE, 0xC9, 0xC9, 0xBC, 0xF7, 0x0D, 0xD8, 0x02, 0xB6, 0x03, 0x6B, 0x03, 0x22, 0x9C, 0x8A, 0xE4, 0x04, 0x6D, 0x7F, 0xA2, 0x85, 0x95, 0xC6, 0x8E, 0x46, 0xCE, 0xAA, 0xED, 0xFF, 0xA0, 0xFB, 0x2B, 0x2E, 0xBA, 0x32, 0xA8, 0x3B, 0x15, 0x8F, 0x14, 0x19, 0xFD, 0xE9, 0x5D, 0xA9, 0xF5, 0x74, 0x3F, 0x41, 0x56, 0xF1, 0x9B, 0x4B, 0x97, 0xBC, 0x78, 0x0B, 0x88, 0xF1, 0xEC, 0xD1, 0xEB, 0xDE, 0xDE, 0xE7, 0x6E, 0xB3, 0x05, 0x28, 0x1D, 0xA9, 0x02, 0xB1, 0x37, 0xBE, 0x61, 0x32, 0x00, 0xF7, 0x9E, 0x5E, 0x92, 0x33, 0xF0, 0xB8, 0x81, 0xF0, 0xFA, 0x96, 0x0A, 0x31, 0x16, 0x05, 0x6D, 0xC4, 0x9B, 0x53, 0x79, 0x36, 0x68, 0x84, 0xD8, 0xC6, 0x17, 0x13, 0x30, 0xF9, 0x18, 0x01, 0xFC, 0x60, 0x38, 0x62, 0xD4, 0xE4, 0x1B, 0x35, 0xE6, 0xAB, 0xED, 0x7B, 0x9D, 0x9A, 0x75, 0x43, 0xA3, 0xD2, 0xFA, 0xC1, 0x7B, 0x2A, 0x7D, 0x5E, 0x07, 0xBA, 0x91, 0x55, 0x6D, 0xA2, 0xD5, 0xEB, 0xD3, 0x0D, 0xE4, 0x64, 0xE0, 0x00, 0xE9, 0x77, 0x3D, 0x49, 0x21, 0x69, 0x0A, 0xCD, 0xB4, 0xCE, 0x4E, 0xAF, 0x11, 0x63, 0xFD, 0x33, 0x15, 0x54, 0x2A, 0xB7, 0x23, 0x2F, 0x53, 0xDA, 0x90, 0xA1, 0xF1, 0x94, 0xC7, 0x9F, 0x14, 0xE8, 0xE9, 0xAE, 0xB5, 0x00, 0x4D, 0x62, 0x8E, 0x04, 0x98, 0x34, 0x67, 0xF5, 0xFF, 0x87, 0xF1, 0xAD, 0x02, 0xD6, 0x40, 0x2E, 0x9E, 0xF2, 0x17, 0xB4, 0xBB, 0x88, 0x72, 0x14, 0x64, 0x24, 0x64, 0xD4, 0x9B, 0xB5, 0x9C, 0x29, 0x4A, 0xFD, 0x16, 0x9D, 0xB3, 0xF7, 0x6E, 0xDE, 0xCD, 0x38, 0xD4, 0xEA, 0x93, 0xEB, 0x7D, 0xA6, 0x5E, 0x71, 0x26, 0x9E, 0x40, 0xCD, 0xE3, 0x71, 0xF2, 0x61, 0x8B, 0xF0, 0x9B, 0x34, 0xAA, 0x67, 0xCB, 0xAA, 0xFD, 0x6D, 0x17, 0xBD, 0x94, 0x71, 0x6A, 0x4E, 0xC4, 0x6E, 0x53, 0xFA, 0x3C, 0xCF, 0xD3, 0xFD, 0xB4, 0xE7, 0xD7, 0x63, 0x28, 0xE1, 0x05, 0x88, 0x03, 0x7B, 0x03, 0xAB, 0xDE, 0xA3, 0x19, 0x9B, 0xAB, 0x01, 0x7F, 0x9D, 0x32, 0xCE, 0x99, 0xB1, 0x01, 0x69, 0xE0, 0x9C, 0x52, 0x27, 0x6A, 0xF6, 0xDB, 0xC5, 0xD3, 0xDE, 0x4C, 0x4D, 0xDA, 0x74, 0xCB, 0xB6, 0x67, 0x5B, 0xCA, 0x7B, 0x1E, 0xEA, 0xC6, 0x87, 0xA3, 0xBE, 0xFA, 0x6D, 0x7C, 0x6A, 0x3F, 0x57, 0xAF, 0x5B, 0x86, 0x9D, 0xE7, 0x46, 0x56, 0xC7, 0x9A, 0x12, 0x88, 0x45, 0x6C, 0x86, 0x64, 0x5F, 0x39, 0x8D, 0xB2, 0xC8, 0xD5, 0xEE, 0x4B, 0xEF, 0x0A, 0x5F, 0x81, 0x59, 0xCE, 0x4E, 0x2F, 0x9F, 0x3E, 0x4E, 0xD3, 0xBA, 0xDF, 0x6E, 0xD7, 0xFE, 0xE9, 0x11, 0xB2, 0x06, 0x0E, 0xEC, 0x05, 0x18, 0xDF, 0xB7, 0x3F, 0x75, 0xDB, 0xBE, 0x81, 0x7D, 0x96, 0x38, 0x80, 0xC6, 0xDB, 0xCA, 0xD7, 0xF5, 0x44, 0xCD, 0xFF, 0xAB, 0x82, 0x83, 0x55, 0xFC, 0x56, 0x07, 0x30, 0xF4, 0x76, 0x87, 0x1B, 0x47, 0x87, 0xB3, 0x13, 0xA8, 0x28, 0x9E, 0xA4, 0x29, 0xD8, 0x49, 0xB2, 0x98, 0x46, 0xC6, 0x6F, 0x7B, 0x76, 0xFB, 0x34, 0xB5, 0xDF, 0xF9, 0xC9, 0xB4, 0xDB, 0xD3, 0xC0, 0x14, 0xC8, 0xC9, 0x8A, 0x24, 0xDA, 0x4E, 0xF1, 0xF1, 0xE4, 0x77, 0x9C, 0xE6, 0xFF, 0xA3, 0x06, 0x4E, 0xD7, 0x40, 0x19, 0x61, 0x83, 0xE3, 0xF7, 0xB6, 0xAC, 0xD9, 0x06, 0x35, 0x6F, 0xC2, 0xC5, 0xD5, 0x7F, 0x7F, 0xEA, 0x0A, 0xC4, 0x81, 0xDD, 0x80, 0x18, 0xE0, 0x0C, 0xA5, 0x4C, 0x80, 0x36, 0x70, 0x5E, 0x3C, 0x26, 0xBC, 0x80, 0xC5, 0xEB, 0x2D, 0x10, 0xEB, 0x44, 0x2D, 0xD8, 0xAB, 0x86, 0x89, 0x68, 0x1A, 0x28, 0x30, 0xB2, 0x77, 0xAC, 0xA9, 0x37, 0x06, 0x0E, 0xD3, 0xFD, 0x22, 0x9C, 0xE9, 0x56, 0xDF, 0x8D, 0x63, 0xBF, 0x83, 0xBC, 0x67, 0x2F, 0x52, 0x4E, 0x43, 0xA3, 0x55, 0x80, 0x13, 0x35, 0xB5, 0xC4, 0xC4, 0xD4, 0xC3, 0xAE, 0x09, 0x9E, 0xDD, 0x67, 0xBD, 0x9F, 0x4A, 0xF3, 0x93, 0x42, 0xD0, 0x53, 0x7A, 0xCD, 0xEF, 0x65, 0xD2, 0xC1, 0xE3, 0xE9, 0xD8, 0xAC, 0x73, 0x7F, 0x98, 0x20, 0x38, 0x60, 0x46, 0x6C, 0x22, 0xAE, 0x9F, 0x72, 0x31, 0x4E, 0x7D, 0x34, 0xF4, 0x36, 0x20, 0x36, 0xB0, 0xE2, 0x8D, 0xE8, 0xFC, 0xAC, 0xF2, 0x44, 0x2D, 0xD1, 0x33, 0xFB, 0xB6, 0xB0, 0xF4, 0x5F, 0x35, 0x51, 0x62, 0x5F, 0xA8, 0xB1, 0x8D, 0x37, 0x5F, 0xB2, 0x6C, 0x99, 0x4A, 0xE6, 0x27, 0x57, 0x4D, 0xEE, 0x50, 0x9B, 0x64, 0x81, 0x49, 0xC2, 0xC7, 0xA9, 0xD3, 0xE7, 0xC7, 0x18, 0x98, 0x00, 0x7C, 0x01, 0xCD, 0x95, 0xCF, 0x08, 0x6B, 0x39, 0x4B, 0x1E, 0xE5, 0x50, 0xDB, 0x40, 0xF7, 0xE4, 0x0D, 0x33, 0xF7, 0x55, 0x47, 0xE4, 0xBD, 0x3E, 0xA4, 0xF4, 0x7C, 0xEA, 0x63, 0xF0, 0x5E, 0x06, 0x2C, 0x79, 0xE3, 0x23, 0x0E, 0xEC, 0x24, 0xFA, 0xB5, 0xA4, 0x16, 0xFD, 0xC7, 0x05, 0x2A, 0xEB, 0x8D, 0x96, 0xC6, 0xFB, 0x06, 0xF3, 0x13, 0xB4, 0x59, 0x7B, 0xF2, 0x99, 0x67, 0x8A, 0x3A, 0x3E, 0x4B, 0x0C, 0x5F, 0x53, 0x18, 0x18, 0xEB, 0xB4, 0x8A, 0xAF, 0x1F, 0xA4, 0xEB, 0x31, 0xD6, 0xF4, 0x98, 0xA1, 0x36, 0xB6, 0x2C, 0x6F, 0x69, 0x88, 0x1C, 0xF3, 0xD8, 0x25, 0x80, 0x07, 0x90, 0x0A, 0x54, 0xF3, 0xD3, 0x4F, 0xCF, 0xE5, 0xBB, 0x4D, 0x74, 0x35, 0xAD, 0xDC, 0xE3, 0x11, 0x79, 0xAD, 0x4A, 0x39, 0x0B, 0xA9, 0x63, 0x28, 0x5F, 0xC7, 0x37, 0x06, 0x58, 0x9F, 0x8A, 0xAA, 0x55, 0x9F, 0x09, 0xC7, 0xFA, 0x57, 0x87, 0xBC, 0xA9, 0xF3, 0x20, 0xF6, 0xBC, 0xF8, 0xDA, 0x9F, 0xF3, 0xC5, 0xDB, 0x21, 0xAF, 0x4F, 0xD4, 0x50, 0xBB, 0x22, 0xBA, 0x91, 0xCF, 0xB8, 0x90, 0x1D, 0x59, 0x2A, 0x48, 0xB0, 0x70, 0x85, 0x37, 0x9D, 0x25, 0x6D, 0x74, 0x85, 0xF5, 0x12, 0x36, 0xB3, 0xB5, 0x77, 0x8E, 0x3B, 0xBF, 0x55, 0x26, 0x31, 0xA5, 0x6F, 0x43, 0x41, 0x24, 0x54, 0x02, 0xA6, 0x40, 0x6C, 0x20, 0x79, 0xB9, 0x4E, 0xE3, 0xC5, 0xDD, 0x57, 0x41, 0xEC, 0xD3, 0x13, 0xC8, 0xD7, 0xCD, 0x7E, 0xDE, 0x7F, 0xE2, 0x9B, 0x8C, 0x50, 0x3F, 0xA5, 0xCD, 0x2C, 0x7B, 0x7A, 0xBB, 0x98, 0x29, 0xB1, 0x4E, 0x81, 0x14, 0xA1, 0xC4, 0x9C, 0xA2, 0x40, 0xD7, 0x5B, 0x0D, 0x24, 0xF5, 0x7A, 0xA2, 0x7B, 0x00, 0x42, 0xD8, 0x9C, 0x69, 0x13, 0xB5, 0x5C, 0x7F, 0x63, 0x2D, 0x61, 0x0D, 0x9C, 0xBF, 0x1B, 0x28, 0x04, 0x0E, 0xDD, 0xA8, 0xF8, 0xC9, 0x52, 0x8C, 0x35, 0xA5, 0x61, 0x4B, 0xDF, 0x2B, 0xF3, 0xDD, 0x6E, 0xE7, 0xF3, 0xF9, 0xFE, 0x6F, 0xB7, 0x79, 0x82, 0x2D, 0x20, 0x89, 0xE3, 0xA8, 0xBD, 0xEB, 0x7A, 0xAB, 0x8E, 0x3A, 0x89, 0x2D, 0x9B, 0xC7, 0x4E, 0x43, 0x85, 0xFB, 0x05, 0x7E, 0x1F, 0xBD, 0x8A, 0x8B, 0xB8, 0x4F, 0x48, 0x66, 0xE2, 0x91, 0xFD, 0x99, 0xA7, 0xD9, 0x3B, 0x9E, 0x56, 0x12, 0x9B, 0xF8, 0xF4, 0xF9, 0xEF, 0xB9, 0x19, 0xDB, 0xBF, 0xA6, 0x2F, 0x0B, 0x10, 0x42, 0x9B, 0xA7, 0x9C, 0xA8, 0xB1, 0x9D, 0xB1, 0x1B, 0x27, 0x68, 0x53, 0x86, 0xB9, 0xF5, 0x59, 0xBA, 0xB7, 0x0A, 0xD4, 0xE2, 0xDC, 0xB8, 0x03, 0xA9, 0xB3, 0xD0, 0xE7, 0x15, 0x71, 0x5D, 0x9E, 0x25, 0x34, 0x77, 0x0A, 0xD1, 0x09, 0x9C, 0x31, 0x08, 0x0E, 0xA0, 0xE6, 0x82, 0xDA, 0x01, 0x1C, 0xED, 0xBF, 0x6A, 0x4E, 0xCA, 0x84, 0x31, 0xEB, 0x9A, 0x00, 0x3A, 0xE9, 0xB8, 0x39, 0x6D, 0x96, 0xE6, 0xB7, 0xCC, 0x93, 0x37, 0xF9, 0xAF, 0x19, 0x17, 0xC6, 0xD4, 0x72, 0x73, 0xF2, 0x43, 0x1C, 0x10, 0x01, 0xD6, 0x9E, 0x60, 0xF3, 0x68, 0xBD, 0xD6, 0xD4, 0xBA, 0x81, 0x72, 0x20, 0x37, 0xA0, 0x7C, 0x7B, 0x06, 0xA0, 0x0B, 0x38, 0x9E, 0xED, 0x35, 0x41, 0x9B, 0x85, 0xC1, 0xE4, 0x52, 0x06, 0x3B, 0x42, 0xD7, 0x15, 0xD8, 0x3A, 0x3B, 0x31, 0x6F, 0xC5, 0xB6, 0x81, 0x58, 0xED, 0xB7, 0xEE, 0x27, 0x3E, 0x2D, 0x31, 0x72, 0xDD, 0xC7, 0x33, 0x6E, 0xDF, 0x7C, 0xCC, 0xF9, 0x00, 0x37, 0xEE, 0xE7, 0x67, 0x3D, 0xCB, 0xC7, 0x7D, 0x6A, 0x99, 0x6C, 0x76, 0x52, 0x92, 0xB1, 0x88, 0xEB, 0xC1, 0xCD, 0xDC, 0xD8, 0x3A, 0xDB, 0xFA, 0x71, 0xDA, 0x75, 0x4C, 0x1B, 0x50, 0x20, 0x1C, 0xF0, 0x0D, 0x48, 0x00, 0x7B, 0x60, 0x44, 0x02, 0xAE, 0x33, 0x72, 0x80, 0x68, 0xC0, 0x03, 0x10, 0xF9, 0x54, 0x9D, 0x2E, 0xC0, 0x8B, 0xA7, 0x9C, 0xA1, 0x76, 0x1B, 0x1A, 0x7B, 0xA3, 0x87, 0x65, 0xFE, 0x1E, 0x6F, 0x89, 0x6A, 0x59, 0x55, 0xB4, 0xFB, 0xCD, 0x0D, 0xAB, 0xAC, 0x82, 0x0D, 0x91, 0x79, 0xDE, 0x96, 0x18, 0xD7, 0xEB, 0xAA, 0xEF, 0xAD, 0x13, 0x5F, 0xDA, 0xD3, 0x11, 0x61, 0x05, 0x8F, 0x1A, 0x08, 0x07, 0x6C, 0x01, 0x3E, 0xCF, 0x2B, 0x63, 0x7C, 0xDD, 0xDF, 0xE6, 0xD5, 0x31, 0x59, 0xF1, 0x08, 0xD7, 0xE8, 0x50, 0x1A, 0x6F, 0x0A, 0xA0, 0x24, 0xB0, 0xE2, 0xDB, 0x33, 0xE4, 0xD3, 0x35, 0xB5, 0x89, 0x7A, 0xAF, 0x53, 0x95, 0xCF, 0x05, 0x1A, 0x13, 0xC3, 0xF7, 0x02, 0xB5, 0x04, 0x76, 0x7D, 0x16, 0xA1, 0x27, 0x6A, 0x47, 0xE8, 0x60, 0xB6, 0xAA, 0xD3, 0xF9, 0x4A, 0xF4, 0x8E, 0x35, 0xDB, 0xDA, 0xF0, 0x61, 0xF1, 0x8D, 0x6D, 0x20, 0x49, 0xBA, 0x35, 0x7D, 0xDB, 0x40, 0xEB, 0xFC, 0xFB, 0x6F, 0x67, 0x61, 0x17, 0x20, 0x0D, 0x88, 0x04, 0xDC, 0x00, 0x73, 0xE0, 0xE6, 0xBC, 0x23, 0x4E, 0xA3, 0x61, 0x77, 0x00, 0x29, 0x8C, 0xE1, 0x66, 0xF0, 0x0C, 0xF1, 0x9D, 0x9C, 0xB6, 0xD7, 0xC3, 0xE9, 0xC4, 0xD0, 0xF5, 0xB3, 0xE8, 0xEE, 0x7F, 0xAD, 0xA7, 0x04, 0x38, 0xB5, 0x69, 0x0E, 0x78, 0x03, 0xF6, 0x59, 0xC1, 0x47, 0x00, 0xAA, 0xEF, 0xE0, 0x34, 0x3D, 0x51, 0xF3, 0x5F, 0x1B, 0xE8, 0xDD, 0xC2, 0xDD, 0x57, 0xFB, 0x2F, 0x15, 0xF8, 0xA5, 0xA6, 0x71, 0xFE, 0xE1, 0x12, 0xD8, 0x82, 0xCB, 0xC2, 0x2C, 0x46, 0xF5, 0xAD, 0x38, 0x8E, 0xB7, 0xFD, 0xCA, 0x19, 0x41, 0xD9, 0x8C, 0x85, 0x02, 0xE5, 0xEF, 0x14, 0xB2, 0x8A, 0xB0, 0xB7, 0x5E, 0xF4, 0xC7, 0x29, 0x25, 0x64, 0xA7, 0x00, 0xC0, 0xEF, 0x6E, 0xFA, 0xC8, 0x8D, 0x53, 0xC6, 0x39, 0x75, 0x2B, 0x31, 0x52, 0xEF, 0xED, 0xDE, 0x02, 0xE8, 0xBC, 0xD8, 0x44, 0x11, 0xF9, 0xAE, 0x0C, 0x62, 0xBD, 0xCF, 0xC7, 0x68, 0xC0, 0xF3, 0x35, 0xA5, 0x2B, 0x01, 0x7C, 0xDF, 0xBA, 0xE5, 0x7C, 0xAE, 0x50, 0x48, 0x91, 0x21, 0xD8, 0x27, 0xF6, 0xBD, 0x7F, 0x2B, 0x03, 0xDD, 0x7D, 0x05, 0x0F, 0x6F, 0x0B, 0xDC, 0x5E, 0x22, 0xB9, 0x76, 0xB6, 0xD9, 0x95, 0x7A, 0x15, 0x49, 0x79, 0xC6, 0x3A, 0x9E, 0x76, 0xB7, 0x94, 0x42, 0xCF, 0x64, 0xDE, 0x0D, 0x30, 0x7F, 0x5F, 0xCC, 0x1F, 0xE2, 0xA4, 0x1A, 0x1F, 0x2F, 0xEF, 0x00, 0x46, 0x29, 0xD9, 0x79, 0xA7, 0x6B, 0x76, 0x76, 0xF6, 0x32, 0xDF, 0xE2, 0xF8, 0x1C, 0x4F, 0x30, 0x42, 0x81, 0x25, 0xC4, 0x22, 0x36, 0x91, 0x80, 0xD5, 0xA4, 0x2B, 0x01, 0x29, 0x80, 0x27, 0x20, 0xB3, 0x40, 0x68, 0x40, 0x15, 0x70, 0xBB, 0xB6, 0x61, 0x88, 0x5A, 0x62, 0x73, 0xBE, 0x13, 0xC5, 0x74, 0x1E, 0xD8, 0x98, 0xD6, 0x7C, 0xAA, 0x58, 0x3C, 0x82, 0xD5, 0x45, 0x5C, 0x19, 0xA4, 0x5D, 0xB3, 0xAB, 0xC8, 0x47, 0xFC, 0xF6, 0xB9, 0xB7, 0xEB, 0xB5, 0xB2, 0x7F, 0x3B, 0x40, 0xAE, 0xC4, 0x51, 0x35, 0x10, 0x1B, 0xA8, 0xBC, 0x05, 0x24, 0x71, 0xB2, 0x16, 0xB6, 0x00, 0xF2, 0xF4, 0x39, 0x30, 0xAE, 0x61, 0xD7, 0xC9, 0xB5, 0xDD, 0x63, 0x2C, 0x5F, 0x80, 0xD9, 0xEB, 0xD0, 0xE4, 0x01, 0xA4, 0x01, 0xBD, 0x89, 0x29, 0x88, 0x95, 0xB7, 0xC2, 0xDF, 0x46, 0x52, 0x5E, 0xF3, 0x20, 0x06, 0x5C, 0xDE, 0xBB, 0xC4, 0x1C, 0xE5, 0xED, 0xFC, 0x88, 0xA0, 0xD5, 0xAF, 0xD2, 0x38, 0xDA, 0x20, 0x6A, 0xC4, 0x46, 0xDE, 0x47, 0x1A, 0xB6, 0x36, 0xC4, 0xF1, 0xE8, 0xDD, 0xCE, 0x7A, 0x3B, 0x40, 0x32, 0x67, 0xC2, 0xF1, 0xA6, 0x94, 0x6A, 0xDE, 0xDE, 0xF3, 0x74, 0x1F, 0x60, 0x92, 0xFA, 0xDB, 0xD2, 0xAF, 0x9C, 0x30, 0x20, 0x17, 0x30, 0xE1, 0x5A, 0xC6, 0xDC, 0xA2, 0x9B, 0x82, 0x48, 0xC1, 0x03, 0x2F, 0x4E, 0xF7, 0xC5, 0x71, 0x1F, 0xE3, 0x87, 0x99, 0xA6, 0xB3, 0xD3, 0x27, 0x76, 0x8C, 0xF4, 0x3B, 0x80, 0xDC, 0x80, 0x15, 0x21, 0x1F, 0xF4, 0xA7, 0x4C, 0xDB, 0xE7, 0xC6, 0x09, 0xAC, 0x79, 0xB1, 0x81, 0xE9, 0xDB, 0x7B, 0xAA, 0xB6, 0xE6, 0x14, 0x99, 0xA8, 0xB1, 0x83, 0xE0, 0xF5, 0x37, 0x81, 0x05, 0x1A, 0x04, 0x8F, 0xED, 0x31, 0x66, 0xEB, 0x8E, 0x5C, 0xD4, 0x54, 0xA8, 0xE6, 0x68, 0x95, 0xB7, 0xE4, 0xB5, 0x42, 0xCF, 0x19, 0xC6, 0xF8, 0x64, 0x3E, 0xCB, 0x47, 0xC0, 0xA0, 0xE8, 0xF0, 0xAB, 0x00, 0x7C, 0x0F, 0xB8, 0x13, 0x39, 0x3D, 0x19, 0x99, 0x3C, 0x91, 0xE3, 0xC7, 0xE2, 0xC0, 0x16, 0xF6, 0x15, 0x64, 0x96, 0x46, 0x30, 0x3D, 0x47, 0x36, 0x55, 0x40, 0xEE, 0x7F, 0xF9, 0x4C, 0xE1, 0xF8, 0x6F, 0xE7, 0x14, 0x94, 0x35, 0xA0, 0x06, 0xEC, 0x24, 0x16, 0x20, 0x02, 0xCC, 0x1B, 0xAC, 0x81, 0x2E, 0xA0, 0x02, 0x70, 0x05, 0xA6, 0x3A, 0x2D, 0x0A, 0xA8, 0xE2, 0x99, 0xCD, 0xA0, 0xD1, 0x0B, 0x79, 0xEA, 0xEF, 0x64, 0x6F, 0xDA, 0xDC, 0xF3, 0x39, 0x68, 0x8E, 0x3B, 0xF3, 0x4A, 0xCC, 0xCF, 0x25, 0xB1, 0x4E, 0xCC, 0x9A, 0x85, 0xC0, 0x2B, 0xE3, 0xDE, 0x4E, 0xFB, 0xD3, 0xD2, 0x07, 0x57, 0xFB, 0x18, 0xF9, 0x4D, 0xD9, 0xE9, 0x06, 0xC4, 0xF9, 0xE2, 0x26, 0x38, 0xC4, 0x5C, 0x66, 0x33, 0x83, 0xFB, 0x42, 0x0B, 0x50, 0xC7, 0x8B, 0x96, 0xD4, 0xC5, 0xF5, 0xDA, 0xFA, 0xCD, 0xEC, 0x0E, 0x61, 0xA2, 0x43, 0x18, 0x8E, 0xC4, 0x00, 0xDB, 0x84, 0x00, 0xBE, 0x09, 0x07, 0x62, 0x9A, 0xCD, 0x0A, 0xD0, 0x1C, 0xBD, 0xEA, 0x80, 0x18, 0x5F, 0x24, 0x2C, 0x81, 0xD5, 0x80, 0xCE, 0x99, 0x3A, 0x41, 0xDB, 0x6C, 0x24, 0xA2, 0x58, 0xFE, 0xB4, 0x62, 0x6C, 0xA8, 0x3D, 0xFB, 0xA0, 0xDB, 0x0B, 0x5F, 0x4B, 0x38, 0xBB, 0x62, 0x1A, 0xF5, 0x8D, 0xB7, 0x35, 0xAF, 0x25, 0x83, 0x36, 0x8B, 0xEC, 0x69, 0xE2, 0x93, 0xEB, 0xB3, 0x36, 0x6A, 0xC0, 0x05, 0xB0, 0xE9, 0xE0, 0x3E, 0xBD, 0x12, 0xA7, 0x31, 0xA1, 0x52, 0xFB, 0x26, 0x8A, 0xAA, 0x87, 0x9D, 0x9A, 0xA0, 0x5B, 0x5F, 0xA8, 0xE7, 0xE3, 0xC6, 0x7C, 0x24, 0xC6, 0xA7, 0x13, 0x88, 0x05, 0x48, 0x13, 0xF2, 0x42, 0x37, 0x90, 0xD3, 0x69, 0xF9, 0xD6, 0xEB, 0x41, 0x81, 0x01, 0xC2, 0x81, 0xC5, 0xB7, 0x07, 0xD1, 0xC6, 0x33, 0xF7, 0x04, 0x0D, 0xC5, 0x05, 0x76, 0x35, 0x22, 0x18, 0xB0, 0x39, 0x3C, 0x3C, 0xB7, 0xB2, 0xEA, 0x4F, 0xF0, 0xEF, 0xCE, 0x8D, 0xD9, 0xF2, 0xE9, 0x67, 0xDC, 0x4F, 0x47, 0x8C, 0x29, 0x15, 0x90, 0x7D, 0x6C, 0xE0, 0x2C, 0x98, 0x4F, 0x9A, 0x23, 0x2B, 0x02, 0x29, 0xC4, 0x38, 0x70, 0x4D, 0x5B, 0x07, 0xE1, 0x22, 0x6E, 0xBA, 0x24, 0xD2, 0xFE, 0x66, 0x1C, 0x72, 0xC6, 0xCA, 0xDB, 0x84, 0x63, 0x32, 0x28, 0x2A, 0x8D, 0xAD, 0x9A, 0x5C, 0xDD, 0xA9, 0x4E, 0x63, 0xF3, 0xDC, 0xC0, 0x69, 0x79, 0xEC, 0x40, 0xD5, 0x3D, 0xCA, 0xD3, 0x6E, 0x65, 0x02, 0xE3, 0xFE, 0x8E, 0xD0, 0xCD, 0xB7, 0xC7, 0x02, 0xC4, 0x00, 0x53, 0xC6, 0x3C, 0x27, 0x68, 0xB3, 0x2C, 0x98, 0x4C, 0x37, 0xFB, 0xD9, 0x2D, 0xAB, 0xD8, 0xED, 0x94, 0x67, 0x5A, 0xF6, 0xD3, 0xE6, 0xB5, 0x14, 0x5B, 0x02, 0x7D, 0x96, 0x03, 0x60, 0x7D, 0xEC, 0x96, 0x63, 0xE6, 0x88, 0x02, 0x78, 0x10, 0x06, 0x28, 0xB1, 0x1B, 0x58, 0x05, 0x48, 0xDD, 0xB5, 0x11, 0x53, 0x2B, 0xB9, 0xA7, 0xF0, 0xAE, 0x07, 0xEC, 0x4E, 0x96, 0xFC, 0xCC, 0xA4, 0x9D, 0x93, 0xFD, 0x34, 0x62, 0xBD, 0x4B, 0xF4, 0x39, 0x65, 0xAD, 0x8F, 0x46, 0xA4, 0xC4, 0x67, 0xD3, 0xA5, 0xED, 0xB3, 0x2C, 0xD0, 0xCF, 0xB2, 0xA0, 0xDF, 0x65, 0x81, 0xED, 0x4F, 0xF7, 0xB2, 0x2A, 0x3B, 0x51, 0xCB, 0x42, 0x9E, 0x42, 0xFF, 0x44, 0x58, 0xB9, 0x51, 0xDB, 0x9A, 0x8A, 0x04, 0xB2, 0xDC, 0x58, 0xCA, 0x65, 0xBF, 0x8B, 0xA9, 0x98, 0xA8, 0xDD, 0x52, 0x26, 0xF4, 0x87, 0x03, 0xBA, 0x80, 0x8A, 0x77, 0x81, 0x68, 0x84, 0x3E, 0x2B, 0x3C, 0x3B, 0x9B, 0x4C, 0x47, 0xF8, 0x2F, 0x40, 0x19, 0xA7, 0xC8, 0x89, 0xFD, 0x48, 0x19, 0x13, 0x27, 0x40, 0x14, 0x30, 0x7B, 0xA5, 0x0C, 0x49, 0x62, 0x01, 0xBB, 0x88, 0xCF, 0x8B, 0x1E, 0xFF, 0x5A, 0x82, 0xDA, 0x1B, 0xBC, 0x94, 0x77, 0x09, 0x3A, 0x4B, 0x5E, 0xDF, 0x27, 0x6A, 0x0E, 0x37, 0xF7, 0x8D, 0xBE, 0x04, 0xB6, 0x17, 0xED, 0x96, 0x03, 0x9F, 0x4F, 0xE9, 0xE2, 0xA4, 0xFB, 0xA7, 0xFB, 0xB4, 0x18, 0x36, 0xD5, 0x45, 0xC6, 0x1C, 0xE6, 0x1D, 0x6B, 0x7B, 0x22, 0x93, 0xF3, 0x79, 0xDF, 0x9E, 0xF3, 0xE6, 0xEF, 0xC4, 0xB1, 0x08, 0x4D, 0x00, 0x2F, 0x36, 0x80, 0x2C, 0x88, 0xD9, 0xAA, 0x7A, 0xFC, 0x9E, 0x16, 0x4D, 0xE5, 0xCF, 0x92, 0x2C, 0x19, 0xC3, 0xE2, 0x48, 0x28, 0x07, 0xB2, 0x27, 0xF6, 0x80, 0x17, 0x11, 0xEF, 0x51, 0x2C, 0x82, 0x6B, 0xB1, 0xB5, 0x80, 0x59, 0x0E, 0xAF, 0xC4, 0x51, 0x07, 0x10, 0x06, 0xC8, 0xC8, 0x16, 0x3C, 0x73, 0x35, 0xCF, 0xFC, 0x8B, 0x5A, 0xFC, 0x8C, 0xE3, 0xD7, 0x4A, 0xB4, 0x32, 0x58, 0x0D, 0xBB, 0x7B, 0xE8, 0x91, 0x5B, 0x1D, 0x8D, 0xC7, 0x25, 0x0A, 0xCB, 0x10, 0xA7, 0xFD, 0xCB, 0x56, 0xD6, 0x4A, 0x7D, 0x3B, 0x80, 0xCE, 0xB2, 0xEF, 0xFE, 0x61, 0xAC, 0xFC, 0x3F, 0xCB, 0x92, 0x02, 0xA4, 0xE7, 0x5F, 0x24, 0x46, 0x34, 0x9C, 0xE0, 0xDD, 0x8D, 0x78, 0x84, 0x8B, 0xFB, 0xF1, 0xB3, 0x4B, 0xC4, 0xF7, 0xD5, 0x2C, 0x17, 0xE5, 0x1D, 0xBF, 0xF5, 0x71, 0x7F, 0xEA, 0x9C, 0x6D, 0x51, 0x60, 0x3B, 0xD1, 0x80, 0x04, 0xE0, 0x0C, 0x82, 0x08, 0x10, 0x84, 0x2F, 0x40, 0xF4, 0x2D, 0xFA, 0xB0, 0x06, 0xE6, 0xA3, 0xDC, 0xB1, 0x96, 0xBF, 0x6D, 0x16, 0x5B, 0xCE, 0x06, 0x1E, 0x98, 0xEF, 0xFA, 0x7E, 0x12, 0x72, 0xF7, 0x36, 0x2E, 0x16, 0xBB, 0xB9, 0x5D, 0xF1, 0x2E, 0x41, 0xAD, 0x3E, 0x4B, 0xD0, 0xD3, 0x07, 0x72, 0x5F, 0x25, 0xBE, 0xCF, 0x51, 0x13, 0x91, 0x80, 0x2D, 0xC0, 0xFD, 0xD1, 0x91, 0xF4, 0x94, 0xBC, 0x27, 0x61, 0x1C, 0x72, 0x53, 0xC2, 0xE7, 0xF2, 0x37, 0x7E, 0xE3, 0x7C, 0x26, 0xB7, 0x01, 0x5E, 0x54, 0xA2, 0x3E, 0x82, 0xED, 0x4A, 0x60, 0x1B, 0x20, 0x02, 0xC4, 0x0C, 0xF8, 0x02, 0x2A, 0x81, 0x54, 0xC0, 0x3E, 0x8D, 0x5D, 0x5D, 0x80, 0xDC, 0xF7, 0x14, 0x44, 0xAD, 0xA6, 0x95, 0x03, 0xD2, 0x8C, 0x16, 0xBC, 0x28, 0x98, 0xA6, 0xA6, 0xE2, 0xC9, 0x32, 0xA9, 0x8D, 0xB9, 0xBE, 0x25, 0x1D, 0x66, 0x83, 0xAE, 0x30, 0xDF, 0x54, 0xDC, 0x7D, 0xFD, 0xCD, 0xF7, 0x3E, 0x5A, 0xE0, 0x34, 0x9F, 0x53, 0xFB, 0x74, 0xE4, 0x2A, 0xC0, 0x8C, 0xE0, 0x62, 0x65, 0x96, 0x58, 0x3A, 0x55, 0x23, 0x4D, 0xEC, 0x99, 0x21, 0xDD, 0x27, 0xA3, 0x1F, 0xA3, 0x0A, 0xEB, 0xB7, 0xAD, 0xA2, 0x28, 0x5F, 0xAC, 0xD7, 0x3D, 0xE7, 0xB4, 0xFE, 0x72, 0x40, 0x0A, 0xB0, 0x05, 0x8C, 0x04, 0x19, 0x63, 0xA5, 0xC2, 0xA3, 0x16, 0x20, 0x14, 0xD8, 0xFA, 0xEA, 0x92, 0x1D, 0x73, 0xCA, 0x44, 0xAD, 0x7F, 0x77, 0x32, 0x17, 0x41, 0x7E, 0x51, 0x35, 0x26, 0xBC, 0xD3, 0x50, 0x64, 0x36, 0xE6, 0x34, 0xB0, 0x18, 0x6B, 0xF9, 0x1D, 0x95, 0xD7, 0xA7, 0xEE, 0xF8, 0xDB, 0xC0, 0xAC, 0xAF, 0x2D, 0xDD, 0xFD, 0x53, 0x95, 0x44, 0x01, 0xAE, 0xC0, 0x6A, 0x60, 0xCF, 0xE8, 0xAA, 0xDB, 0xDF, 0x8E, 0x19, 0x3E, 0xB7, 0x4B, 0x9E, 0x9F, 0x87, 0x3E, 0xDF, 0x50, 0xCC, 0x43, 0xDD, 0x6F, 0xC3, 0xC9, 0x90, 0x5B, 0x52, 0x24, 0xA7, 0xA7, 0xA0, 0x6C, 0x60, 0x42, 0x19, 0x0B, 0x98, 0x85, 0xA9, 0xD8, 0xE4, 0xF0, 0x4E, 0xF0, 0x00, 0x0B, 0x60, 0xF5, 0xAC, 0x64, 0xDF, 0xA0, 0xCF, 0x5F, 0x3F, 0x2D, 0x45, 0x1A, 0x8D, 0x3B, 0x56, 0x1B, 0x92, 0xB3, 0x2A, 0x59, 0xFD, 0x6E, 0xBF, 0xCB, 0x5D, 0x29, 0xF1, 0xEF, 0x54, 0x86, 0x2B, 0xB8, 0x69, 0x22, 0x7F, 0x4D, 0x2C, 0xF1, 0x5F, 0xBF, 0xB5, 0xA0, 0x59, 0x8C, 0xDA, 0x2C, 0x77, 0x4F, 0xFB, 0x36, 0x01, 0x6C, 0x03, 0xEB, 0x64, 0x97, 0x02, 0x26, 0x6F, 0x75, 0x58, 0xEA, 0x64, 0x50, 0x01, 0x33, 0xF7, 0xDC, 0xC5, 0xF7, 0x31, 0x24, 0x65, 0xCF, 0x2E, 0xDE, 0x1E, 0xB9, 0x43, 0x5E, 0x69, 0x22, 0x1C, 0xC8, 0x45, 0x24, 0x30, 0xA7, 0x4C, 0x09, 0xA0, 0xAE, 0xB9, 0x31, 0x18, 0x60, 0x0D, 0x68, 0xCD, 0x8B, 0x8F, 0xB7, 0xBC, 0x6C, 0xE0, 0x64, 0xFD, 0xEA, 0x9E, 0xA8, 0xC1, 0x18, 0xA6, 0x6A, 0xA3, 0x45, 0x8C, 0x6C, 0x64, 0x2B, 0xA1, 0xD1, 0x43, 0xAF, 0x4C, 0x84, 0x60, 0x39, 0x93, 0xDC, 0x95, 0xAB, 0xDC, 0x78, 0x56, 0xEE, 0xB9, 0x9F, 0x2B, 0x14, 0x03, 0x81, 0x23, 0x41, 0x39, 0x9E, 0xF7, 0x0C, 0x24, 0x20, 0x12, 0x18, 0xC5, 0xC1, 0x5E, 0xFB, 0xE7, 0x93, 0xD4, 0x60, 0xD3, 0x68, 0xD3, 0x81, 0xC5, 0xE9, 0xA6, 0x9F, 0x51, 0xC9, 0x81, 0x74, 0xF6, 0xB4, 0x1F, 0xF7, 0xFC, 0x5D, 0x7C, 0x51, 0xE6, 0xB2, 0xFD, 0xB4, 0xB9, 0x4B, 0x05, 0xCA, 0x81, 0xE6, 0xB2, 0x7C, 0x6E, 0x99, 0xBB, 0x80, 0x70, 0xC0, 0xE3, 0x55, 0x03, 0x32, 0x00, 0x5B, 0x80, 0x37, 0x4F, 0x39, 0x63, 0x4D, 0x7E, 0xFB, 0x51, 0xFB, 0x98, 0xCF, 0xD6, 0x6F, 0xCD, 0x1C, 0x19, 0x74, 0x05, 0x73, 0x74, 0xEC, 0x0B, 0xC1, 0x20, 0xCB, 0x82, 0xA6, 0x35, 0x9D, 0x8D, 0xBF, 0x51, 0x93, 0x9B, 0x9D, 0xC3, 0xBC, 0x0B, 0x06, 0x4F, 0x80, 0xD6, 0x57, 0x4E, 0x28, 0x01, 0xBC, 0x80, 0x9C, 0xCB, 0x61, 0x7D, 0x1D, 0x98, 0x08, 0x9D, 0x3A, 0xE0, 0x3B, 0x54, 0x15, 0x2F, 0xF2, 0x4B, 0xBF, 0xE6, 0x85, 0xEA, 0x6F, 0x9B, 0x59, 0x29, 0x40, 0x1D, 0x30, 0xC2, 0x37, 0x10, 0x27, 0x53, 0x7C, 0x03, 0x69, 0x93, 0x9D, 0x0D, 0xAC, 0xE2, 0x8B, 0x09, 0x48, 0xE3, 0x4A, 0x1B, 0x59, 0xFE, 0x64, 0xBE, 0xE6, 0x44, 0x4D, 0xB1, 0x78, 0xD9, 0xCE, 0xD4, 0x32, 0x67, 0xD2, 0xD3, 0x3C, 0x43, 0xA7, 0xCB, 0x9E, 0xC1, 0xFE, 0x41, 0x0A, 0x37, 0x1B, 0x41, 0x89, 0xC1, 0xE6, 0x82, 0x2A, 0x3E, 0xDD, 0x66, 0xB7, 0x1D, 0xD7, 0x2B, 0x2A, 0x0E, 0xE3, 0x48, 0xC3, 0xFA, 0x1E, 0x71, 0x60, 0xF5, 0x54, 0x38, 0xF0, 0x88, 0x35, 0xC2, 0x36, 0x95, 0x72, 0x4C, 0xCE, 0xCE, 0x7D, 0x93, 0xB3, 0xE7, 0x7D, 0x7E, 0x7E, 0x4B, 0xDB, 0x95, 0x2C, 0xED, 0x6F, 0x4D, 0xFA, 0xAC, 0xB2, 0x7E, 0x17, 0x3D, 0x90, 0xE3, 0x95, 0xB2, 0x81, 0xAD, 0x80, 0x12, 0x23, 0x89, 0x24, 0xF5, 0x0E, 0xDD, 0x80, 0xC8, 0x48, 0x1B, 0x80, 0xE6, 0xEB, 0x96, 0xB5, 0xE7, 0x4C, 0x9F, 0xA0, 0x19, 0x24, 0x18, 0xE6, 0x12, 0x45, 0x39, 0xB3, 0x02, 0x46, 0xC5, 0x1D, 0xB7, 0xB4, 0xC2, 0x5E, 0x9C, 0x15, 0x04, 0x24, 0xD7, 0x11, 0x38, 0x26, 0x93, 0xF9, 0x7A, 0x7B, 0x6F, 0x5F, 0x23, 0xBB, 0x22, 0x12, 0x3A, 0x3D, 0xCD, 0x04, 0x48, 0x9D, 0xA3, 0x37, 0x5B, 0x53, 0xF8, 0x62, 0xE8, 0x38, 0xA0, 0x20, 0x66, 0x53, 0x36, 0x67, 0xEB, 0x66, 0xC3, 0xB2, 0xF8, 0xE6, 0xEC, 0xE8, 0xF9, 0x29, 0x72, 0x0D, 0x03, 0xB4, 0xC7, 0xA4, 0xED, 0x8D, 0xD9, 0x68, 0x2E, 0xD2, 0x80, 0x19, 0x10, 0xFE, 0x86, 0x60, 0x2F, 0x20, 0x14, 0x70, 0x62, 0x33, 0x9E, 0x41, 0xA8, 0x00, 0x6E, 0x3C, 0x33, 0x26, 0x66, 0x8E, 0x96, 0x53, 0x25, 0xFC, 0xE2, 0x1C, 0x4E, 0xD1, 0xA2, 0xCF, 0x40, 0x5B, 0xA5, 0x7F, 0x4D, 0x8A, 0x85, 0xF7, 0x01, 0xDC, 0x28, 0xDF, 0xA2, 0x46, 0xBD, 0xFB, 0xDA, 0xBB, 0x4E, 0xA6, 0x7F, 0x4E, 0xCD, 0xB4, 0x02, 0x69, 0x80, 0x6E, 0x8E, 0x14, 0x23, 0xA6, 0xCC, 0x66, 0x21, 0xCA, 0x15, 0x5C, 0xA4, 0x1B, 0x30, 0xD1, 0x1A, 0x19, 0x20, 0xFB, 0x7E, 0x5C, 0x88, 0xB7, 0xF8, 0x67, 0x14, 0x50, 0x3E, 0x70, 0x77, 0xBF, 0x23, 0x6C, 0x3E, 0xB5, 0x38, 0xE0, 0x1B, 0xC8, 0x9C, 0xE2, 0x34, 0xEA, 0x55, 0x05, 0x94, 0x00, 0xA9, 0x80, 0x8D, 0x7A, 0x95, 0x80, 0x0B, 0x90, 0xCE, 0x33, 0x7B, 0x82, 0x16, 0x4C, 0x8A, 0xE6, 0x1C, 0x5A, 0x1C, 0x19, 0x52, 0x1E, 0x48, 0xB4, 0xE6, 0x43, 0x55, 0xA5, 0x90, 0xD3, 0xBA, 0x15, 0x3A, 0x4E, 0xCB, 0xD3, 0xC6, 0x6C, 0x03, 0xD3, 0xFB, 0x9F, 0xBB, 0x39, 0xEB, 0x28, 0x8D, 0x9B, 0x26, 0xC1, 0x19, 0xD0, 0x30, 0x4A, 0x00, 0x0D, 0xBC, 0x18, 0x06, 0xD8, 0xD8, 0xDB, 0xD8, 0x5B, 0x52, 0x17, 0x0E, 0xA8, 0xF0, 0xC5, 0x8D, 0xF7, 0x19, 0x8B, 0x49, 0x78, 0xC5, 0x22, 0x4A, 0x9A, 0x1C, 0xBC, 0x88, 0x3C, 0x60, 0x40, 0x34, 0xE0, 0x49, 0x14, 0xD1, 0xF7, 0x14, 0x6A, 0x92, 0x28, 0x86, 0x05, 0xAC, 0x01, 0x25, 0x16, 0x7F, 0xB5, 0x37, 0x20, 0xCF, 0xD7, 0x08, 0x91, 0x8E, 0x31, 0x4B, 0x2A, 0x61, 0xFE, 0x14, 0x97, 0xB9, 0xEF, 0xC7, 0xA8, 0xBA, 0x2A, 0x60, 0xBD, 0xAD, 0x46, 0x53, 0xE2, 0x9C, 0x0E, 0x57, 0xD7, 0xA8, 0x5A, 0xCE, 0x6E, 0xDC, 0xE6, 0x3F, 0x41, 0x81, 0x73, 0xDA, 0xD0, 0x6D, 0x45, 0x39, 0xA1, 0x6D, 0x60, 0x37, 0x5E, 0xCC, 0x02, 0x10, 0x25, 0x3A, 0x1A, 0x26, 0x55, 0xB2, 0xE4, 0x33, 0x37, 0xE9, 0x8E, 0x96, 0x0A, 0x04, 0x6F, 0x8B, 0xC1, 0xE4, 0xE9, 0x71, 0xE7, 0xF6, 0xE6, 0x37, 0x8D, 0x7B, 0xD0, 0x0F, 0x4A, 0xC5, 0x37, 0x0B, 0xB0, 0x24, 0x82, 0x68, 0x20, 0xF7, 0xFC, 0x67, 0x6C, 0xB3, 0x27, 0x80, 0x05, 0xA1, 0x80, 0x08, 0x4E, 0xE9, 0x06, 0x4A, 0x78, 0x26, 0x9C, 0xC2, 0x01, 0xC4, 0x0C, 0x15, 0xC7, 0x9A, 0x78, 0x50, 0xE4, 0x76, 0x56, 0xB4, 0xC9, 0xC4, 0x0C, 0x0B, 0x85, 0x74, 0xE8, 0xD4, 0xD1, 0xD0, 0x9B, 0x63, 0xFF, 0x46, 0x56, 0xBC, 0x4E, 0x44, 0xA5, 0x7C, 0xF0, 0x37, 0xEF, 0xFE, 0xE3, 0xFE, 0xBF, 0xF7, 0x7B, 0x4F, 0x57, 0x79, 0x0B, 0x55, 0x77, 0x02, 0xEB, 0x07, 0xFF, 0x33, 0x36, 0x0F, 0x8E, 0x2C, 0xE5, 0xC7, 0xFC, 0x41, 0x10, 0x41, 0xFB, 0xB3, 0x19, 0xD2, 0x29, 0x9F, 0x98, 0xEF, 0x5D, 0x00, 0xDD, 0x8B, 0xB7, 0x94, 0xB7, 0x1F, 0x63, 0x35, 0x55, 0xF2, 0x02, 0xCC, 0x80, 0xA0, 0x0E, 0x2F, 0x3E, 0x77, 0x4E, 0xC0, 0x8B, 0x10, 0x40, 0x1C, 0xA7, 0x54, 0x00, 0x4E, 0x24, 0x4F, 0xE9, 0x33, 0xCE, 0xFA, 0xB7, 0x01, 0x2A, 0x5D, 0x3F, 0x55, 0x2D, 0x54, 0x7E, 0x35, 0x7A, 0xAA, 0x01, 0xDF, 0xDC, 0xEE, 0xDF, 0xAA, 0x55, 0x3A, 0x51, 0x6D, 0xC1, 0xA5, 0xFB, 0x52, 0x7D, 0x9A, 0x98, 0x79, 0xBC, 0x6B, 0xF6, 0xB3, 0xFE, 0x73, 0xBF, 0xD9, 0xB8, 0x75, 0x16, 0x7E, 0x25, 0xC0, 0xB1, 0xAC, 0x25, 0x72, 0xF1, 0xC5, 0x6B, 0x8A, 0x43, 0x2B, 0x14, 0x60, 0x8F, 0xFD, 0xF4, 0xDB, 0xFA, 0xC7, 0x47, 0x8D, 0x9B, 0xC4, 0x97, 0x47, 0x08, 0x43, 0xBD, 0x18, 0x33, 0xA8, 0x81, 0x20, 0x6A, 0x11, 0x0E, 0xB4, 0xBC, 0x5B, 0xA5, 0xED, 0xA3, 0xA0, 0x02, 0xE2, 0xF3, 0xE2, 0xBB, 0x82, 0xDF, 0x09, 0xA8, 0x9F, 0x53, 0x10, 0x35, 0x6C, 0xF3, 0xFD, 0x9E, 0xCA, 0x30, 0x04, 0xF8, 0xE5, 0x61, 0xE5, 0xEF, 0x49, 0xF1, 0xF4, 0xB4, 0x0C, 0x53, 0x43, 0xFB, 0x2F, 0xC1, 0xBF, 0x14, 0x78, 0x44, 0x18, 0xA3, 0x46, 0xDE, 0x35, 0xFB, 0xFC, 0xE1, 0xC5, 0x38, 0x6D, 0x07, 0x44, 0x5F, 0xB7, 0x21, 0x9B, 0x7F, 0xBF, 0x80, 0x9C, 0x17, 0xEB, 0x35, 0x82, 0x0D, 0x79, 0xFB, 0x4B, 0xCD, 0x06, 0x7E, 0x4D, 0x64, 0x26, 0x99, 0x7D, 0x03, 0x6A, 0xC0, 0xD8, 0xC2, 0xCA, 0x77, 0x6B, 0x58, 0x3E, 0x2B, 0xF8, 0x29, 0x49, 0xB3, 0x37, 0x91, 0x4A, 0x0C, 0x48, 0x22, 0x04, 0x38, 0x59, 0xA6, 0xF6, 0x46, 0xD4, 0xFD, 0x6E, 0x20, 0x21, 0x6A, 0xFB, 0xBF, 0xFE, 0x9D, 0x6A, 0xBF, 0xDD, 0xE3, 0x5A, 0x79, 0x94, 0x49, 0x44, 0xB2, 0x70, 0xFB, 0x12, 0x34, 0x63, 0x0C, 0x76, 0x2A, 0xC8, 0xEE, 0x19, 0x63, 0x6F, 0xD4, 0xA6, 0xFF, 0x9D, 0x7F, 0x72, 0x05, 0x32, 0x81, 0x20, 0x4C, 0x00, 0xD9, 0xC0, 0x1A, 0x18, 0x90, 0x3E, 0xEA, 0xCD, 0x1B, 0xD8, 0x94, 0x37, 0x71, 0xDD, 0x3E, 0x5D, 0x03, 0x65, 0xBF, 0x4D, 0xCC, 0x84, 0x18, 0xD1, 0x73, 0x3B, 0xA1, 0x84, 0x7C, 0x8E, 0x12, 0x70, 0x79, 0xD5, 0xE4, 0xD8, 0x9F, 0x14, 0x85, 0x7C, 0xD3, 0x61, 0xB4, 0x01, 0x4F, 0x9E, 0xD2, 0x27, 0x6A, 0xF2, 0x5F, 0x09, 0x46, 0x57, 0x28, 0x9E, 0x90, 0x99, 0xB0, 0xD8, 0x5F, 0xD7, 0xCC, 0x52, 0x11, 0x7B, 0xA9, 0x80, 0x95, 0xC9, 0xAE, 0x47, 0x1F, 0x0A, 0x99, 0xB1, 0xF6, 0x83, 0xDE, 0x8E, 0xED, 0xAF, 0x0B, 0x75, 0x38, 0xA0, 0xFD, 0x26, 0xC7, 0xE4, 0xBA, 0xC8, 0x59, 0xEB, 0xAF, 0x3F, 0xA3, 0x4D, 0x42, 0x66, 0x6A, 0x3E, 0xFB, 0xE3, 0x33, 0x66, 0x10, 0x51, 0x7D, 0x14, 0x46, 0x3F, 0xD9, 0x6B, 0x7A, 0x94, 0x5F, 0x20, 0x89, 0x9E, 0x34, 0x53, 0x05, 0xB6, 0x03, 0xC7, 0xF7, 0x41, 0x81, 0x12, 0x20, 0x12, 0xD0, 0x8F, 0x66, 0x6A, 0x01, 0x44, 0xF3, 0x14, 0x3F, 0x51, 0x53, 0x24, 0x25, 0xB4, 0xFC, 0x1E, 0xFE, 0xBD, 0x37, 0xDB, 0x95, 0x42, 0x1F, 0x72, 0x6D, 0x3E, 0x15, 0xEB, 0x87, 0xD2, 0xD1, 0x0F, 0xF4, 0x55, 0x3A, 0xF6, 0xC7, 0xA8, 0x7A, 0xCF, 0x5A, 0xED, 0xF4, 0x04, 0xCF, 0x29, 0x3E, 0x01, 0xF6, 0xB3, 0x82, 0xF7, 0x93, 0x08, 0x16, 0x5F, 0xC1, 0x43, 0xEF, 0x26, 0xD2, 0x35, 0xF2, 0x48, 0xFE, 0x61, 0x1F, 0x11, 0x05, 0xFF, 0xFE, 0x73, 0x6D, 0x41, 0x56, 0x9A, 0xF5, 0x10, 0x83, 0x3E, 0x35, 0x8E, 0x02, 0x4C, 0x6A, 0xC3, 0x36, 0x40, 0x17, 0x90, 0x3E, 0xF9, 0xAC, 0x40, 0x3B, 0x50, 0x06, 0x78, 0x02, 0x2B, 0xDF, 0x3D, 0xFB, 0xCA, 0x39, 0x65, 0xA2, 0x66, 0xBF, 0xC7, 0xAA, 0xAF, 0x40, 0x7D, 0xE8, 0x6E, 0xA6, 0x0D, 0xDF, 0x02, 0x3D, 0x18, 0xE2, 0xE2, 0x33, 0xAC, 0xCD, 0xBA, 0x9D, 0xCD, 0x79, 0xED, 0x57, 0x55, 0x9B, 0xBB, 0xD5, 0xE4, 0x16, 0xE7, 0xB3, 0xDB, 0xCE, 0xBC, 0x77, 0xD9, 0x67, 0xBB, 0x7C, 0x92, 0x13, 0x66, 0x87, 0x32, 0x9D, 0x47, 0x8B, 0xA7, 0xD8, 0xDD, 0x90, 0xE7, 0xAA, 0xF5, 0x6C, 0x4D, 0x26, 0xD7, 0xD0, 0x7E, 0x16, 0xA1, 0x5B, 0xDE, 0x25, 0xF8, 0x88, 0x64, 0x3A, 0xDF, 0xD2, 0xFC, 0xEA, 0x7C, 0xCD, 0x59, 0x53, 0x81, 0xA6, 0x1C, 0xE0, 0xCC, 0xDD, 0xB7, 0x05, 0xB4, 0x00, 0xD9, 0x80, 0x6D, 0x9C, 0x52, 0x05, 0xD8, 0x02, 0x4E, 0x5A, 0x6B, 0x4F, 0xD4, 0x1C, 0x5D, 0x7E, 0xBD, 0x10, 0xB5, 0x66, 0xB3, 0x95, 0xD6, 0x67, 0xE6, 0xB6, 0x46, 0xCE, 0xCA, 0xE6, 0xFF, 0x79, 0xA3, 0x85, 0xB9, 0xE8, 0xBB, 0x66, 0xAF, 0x51, 0xD5, 0x4E, 0x46, 0xE1, 0x0C, 0x96, 0x91, 0xF3, 0x12, 0xB0, 0x9C, 0x1A, 0x21, 0x20, 0xE7, 0x8B, 0xF5, 0xA9, 0x43, 0x7B, 0x3F, 0xCC, 0xC8, 0x1F, 0x3E, 0x36, 0x73, 0x7D, 0x3D, 0x4E, 0x36, 0x63, 0x3F, 0xCA, 0xCE, 0x3E, 0xC3, 0x51, 0x47, 0xAE, 0xEC, 0x31, 0x8A, 0x05, 0x22, 0x80, 0x3A, 0x3E, 0x3F, 0x40, 0xCC, 0xAF, 0x76, 0x2A, 0x50, 0xB3, 0xDF, 0xDD, 0x40, 0x08, 0xB0, 0x8A, 0x67, 0x3A, 0x50, 0xC1, 0x53, 0x6A, 0xA2, 0x16, 0xF0, 0x90, 0xEF, 0xB1, 0x11, 0x16, 0x78, 0xBB, 0x4A, 0x21, 0x81, 0x2A, 0xF6, 0x6F, 0x3A, 0x30, 0xFF, 0xE0, 0xD6, 0x4D, 0x2D, 0xDB, 0x8F, 0x05, 0xD1, 0x8F, 0x3A, 0x51, 0xEB, 0xBB, 0x91, 0x87, 0xBF, 0x4B, 0x89, 0x70, 0x3E, 0x13, 0x8F, 0xEA, 0xBA, 0x33, 0xF5, 0xDF, 0x42, 0xA2, 0xE7, 0x4C, 0x9F, 0xFE, 0x37, 0xD7, 0x0A, 0xD7, 0x4E, 0xD5, 0x4A, 0xF2, 0x7D, 0x4D, 0xDD, 0xFB, 0x53, 0xFE, 0x1E, 0x3A, 0xD2, 0xFC, 0xFD, 0xB3, 0x7D, 0x6F, 0x92, 0x05, 0x24, 0x8F, 0xCA, 0x81, 0xEE, 0x2B, 0x96, 0xCA, 0xB9, 0xA4, 0xA3, 0x00, 0x0F, 0x40, 0x26, 0x3F, 0x84, 0xD0, 0x02, 0x62, 0xCD, 0x29, 0x13, 0xB5, 0x84, 0x81, 0x53, 0x2A, 0x4C, 0x3E, 0xC5, 0xB0, 0x5E, 0x5A, 0x82, 0x14, 0x47, 0x73, 0xEE, 0xE8, 0x3B, 0x6D, 0x5B, 0xF8, 0x4D, 0x44, 0x8D, 0x35, 0xE9, 0x5B, 0x41, 0x3B, 0x93, 0x1B, 0x1F, 0xAF, 0x30, 0x5E, 0x99, 0xEA, 0xCC, 0x7C, 0x19, 0x3C, 0xDE, 0x1C, 0x72, 0x92, 0x0D, 0x5A, 0xAF, 0x21, 0x74, 0x9C, 0x36, 0x48, 0x26, 0xC0, 0x1A, 0x83, 0x6E, 0x9E, 0xA2, 0xF7, 0x82, 0xB9, 0xDE, 0xD6, 0x5B, 0x80, 0xB9, 0x32, 0x7B, 0xC4, 0x73, 0x9B, 0xAA, 0x34, 0xC0, 0x1D, 0x48, 0x05, 0x7A, 0xAE, 0xCC, 0xE9, 0xFA, 0x4E, 0x44, 0x01, 0x9E, 0x80, 0xE4, 0xDB, 0xC4, 0xCF, 0x14, 0x88, 0x39, 0x73, 0x4F, 0xD0, 0xEA, 0xB7, 0x56, 0x49, 0x51, 0xA8, 0x69, 0x5C, 0x37, 0x2D, 0x7B, 0x0A, 0xF4, 0x32, 0xAD, 0x80, 0xD5, 0xDC, 0x21, 0x99, 0xC9, 0x2D, 0xD9, 0x6F, 0x79, 0xC1, 0x74, 0x99, 0x9D, 0xD5, 0x3B, 0x42, 0xFB, 0x68, 0x82, 0x2B, 0x5F, 0xDB, 0x64, 0xBD, 0xDD, 0x33, 0xF6, 0xE2, 0xA7, 0x17, 0x62, 0x1C, 0x39, 0x75, 0xBA, 0x2D, 0x20, 0x94, 0xFD, 0xD7, 0x97, 0x73, 0x4F, 0x3D, 0x0E, 0xB0, 0x1C, 0xE8, 0x59, 0x98, 0x9C, 0x31, 0xDD, 0x6F, 0x97, 0x06, 0x25, 0xBC, 0x81, 0x9C, 0x27, 0xCB, 0xE9, 0xD7, 0x07, 0xC4, 0x06, 0x7C, 0x01, 0xDB, 0x5E, 0x9D, 0x5C, 0x08, 0x93, 0xC9, 0x7A, 0x9E, 0xA8, 0xC1, 0xAE, 0x35, 0xB2, 0xF0, 0xF5, 0x54, 0x32, 0x49, 0x6A, 0x16, 0xA4, 0x34, 0x11, 0x32, 0x14, 0x74, 0xFB, 0x4A, 0x76, 0xC5, 0xDA, 0x5C, 0x40, 0x71, 0x6E, 0x0B, 0xA4, 0xDF, 0x1D, 0x28, 0x09, 0xEA, 0x43, 0x71, 0x1C, 0xF3, 0x32, 0x81, 0x26, 0xF6, 0x9A, 0xFC, 0xA2, 0xB7, 0x33, 0x9B, 0xB0, 0x4A, 0x6A, 0x07, 0xC5, 0x34, 0x2E, 0x76, 0x74, 0xF1, 0x7D, 0xD3, 0x49, 0x6C, 0x6A, 0x5D, 0x1E, 0x99, 0x08, 0x21, 0xFC, 0x61, 0xAA, 0xB3, 0x43, 0x71, 0x8A, 0xD3, 0x79, 0x2E, 0x75, 0xB2, 0x69, 0x80, 0x4C, 0x16, 0xB1, 0xC5, 0xEB, 0x07, 0xE0, 0xD3, 0x1F, 0xA0, 0x88, 0xFD, 0x6A, 0x00, 0xD2, 0x38, 0xB3, 0x79, 0xB4, 0x79, 0x8A, 0x0A, 0x63, 0xB6, 0xB9, 0xA6, 0x4B, 0x81, 0x20, 0x28, 0x93, 0xFC, 0xA3, 0x8F, 0x7F, 0x93, 0x8A, 0xFD, 0x00, 0xED, 0x6F, 0x7C, 0x10, 0x71, 0xFF, 0x40, 0x6E, 0x02, 0x10, 0x79, 0x0B, 0x67, 0x44, 0x8F, 0x7D, 0xD3, 0xA2, 0x82, 0xB8, 0x29, 0xF3, 0x78, 0xE3, 0x45, 0x99, 0x8C, 0xA9, 0x1A, 0x51, 0x04, 0x28, 0x7E, 0x39, 0xB9, 0x71, 0xE6, 0xD8, 0xED, 0xB9, 0x33, 0x12, 0xFC, 0x27, 0x8A, 0x2E, 0x60, 0x3B, 0x78, 0x99, 0xCC, 0x23, 0x23, 0x71, 0x04, 0x01, 0xCA, 0x79, 0x95, 0xD5, 0x79, 0x9F, 0xAD, 0x6B, 0x4D, 0x80, 0x51, 0xC7, 0x92, 0x74, 0x60, 0x2C, 0x93, 0x62, 0x84, 0xBD, 0x05, 0xEC, 0xC5, 0x58, 0x3B, 0x70, 0x7C, 0x76, 0x05, 0x47, 0x2B, 0x79, 0x4A, 0x4F, 0xCC, 0xB0, 0x35, 0xE0, 0x62, 0x88, 0xA7, 0x28, 0xD7, 0xB3, 0xFD, 0xB8, 0xAB, 0x89, 0x6E, 0xA8, 0x8B, 0xE5, 0xCC, 0x19, 0xC9, 0x5B, 0x5A, 0x50, 0xFE, 0x49, 0x21, 0xD2, 0x3A, 0xD3, 0x14, 0xBE, 0x91, 0xFA, 0x97, 0x29, 0x20, 0x63, 0xA5, 0x70, 0x8A, 0xB9, 0x81, 0x69, 0xF0, 0x30, 0x0A, 0xDB, 0x92, 0x37, 0xD9, 0x68, 0x3B, 0x5E, 0x1C, 0x71, 0xF3, 0x34, 0xF3, 0xEC, 0x8F, 0x6B, 0x7F, 0xE0, 0x28, 0x9E, 0x1B, 0x95, 0x1E, 0xDF, 0x27, 0xE3, 0x77, 0xAC, 0x09, 0x64, 0x20, 0xF4, 0x8B, 0x88, 0x1E, 0x2F, 0x16, 0xFE, 0xA1, 0x04, 0x16, 0x5F, 0xCC, 0x04, 0x46, 0x8B, 0x2B, 0xBE, 0x38, 0x92, 0xB3, 0xD4, 0x04, 0x0D, 0x0A, 0x64, 0x45, 0xF3, 0x26, 0x2F, 0x3F, 0x20, 0x84, 0xBF, 0x4B, 0x54, 0x69, 0x34, 0xC0, 0xB1, 0xD8, 0x79, 0x7A, 0x5C, 0x08, 0x03, 0x7A, 0xB5, 0x8E, 0xBC, 0x39, 0xAC, 0xD2, 0x14, 0x16, 0x20, 0x0F, 0xC2, 0x32, 0xC4, 0x81, 0x3D, 0x72, 0x81, 0xE0, 0x67, 0xA3, 0x3D, 0x58, 0x03, 0x35, 0x3F, 0x53, 0xB6, 0xE3, 0xFF, 0xC1, 0x8F, 0x04, 0xB1, 0x79, 0x25, 0xC4, 0x5C, 0xC6, 0x94, 0xC8, 0xD6, 0xBE, 0xD7, 0x5A, 0x1C, 0x53, 0x89, 0x69, 0x63, 0x18, 0xBC, 0xB6, 0x6D, 0x12, 0x0A, 0x8D, 0x6A, 0xCA, 0x06, 0x34, 0x81, 0xA9, 0xF4, 0x98, 0xCA, 0x77, 0x59, 0xC0, 0x2E, 0xBC, 0x38, 0x3F, 0x8B, 0x00, 0xAC, 0x80, 0x94, 0xA9, 0x91, 0x9F, 0x98, 0x29, 0xDD, 0xEB, 0x0D, 0xE9, 0xEB, 0xBF, 0xCC, 0x98, 0xFD, 0xE4, 0x48, 0x22, 0x8F, 0xCD, 0x36, 0xF4, 0x2F, 0x77, 0x54, 0xCC, 0xEF, 0xBC, 0x0D, 0xF3, 0x18, 0xA5, 0xBF, 0xF6, 0xCF, 0xCD, 0xE8, 0x2E, 0x0A, 0x5F, 0x11, 0xC8, 0x4A, 0xF2, 0x0D, 0x04, 0xBB, 0xB0, 0x49, 0x42, 0x5A, 0x8B, 0xCD, 0x76, 0xFC, 0x8A, 0xA3, 0x65, 0xF8, 0x19, 0x5E, 0xC4, 0xA3, 0x13, 0x60, 0x52, 0xD3, 0x76, 0x9C, 0x92, 0x71, 0x3B, 0xD7, 0xAD, 0xD3, 0x53, 0x6F, 0x15, 0x90, 0x76, 0xDB, 0xFF, 0x63, 0x44, 0xA2, 0x42, 0x7F, 0x03, 0xD5, 0xFC, 0xB3, 0x0B, 0x70, 0xE3, 0xEF, 0xDC, 0x40, 0xB1, 0xCF, 0xDB, 0x4E, 0xC2, 0xF1, 0x62, 0x17, 0x90, 0x41, 0x08, 0xD0, 0x82, 0x53, 0xF2, 0x8C, 0x33, 0x83, 0x56, 0xBC, 0x62, 0x9A, 0xFA, 0xE0, 0xD1, 0xB5, 0x9D, 0x31, 0xE3, 0xF7, 0xE0, 0x58, 0x63, 0x8D, 0x0B, 0x8D, 0x40, 0xD7, 0x55, 0xE7, 0x45, 0xF9, 0xF6, 0x7F, 0xC2, 0x25, 0x3B, 0x6E, 0x4D, 0xDC, 0x41, 0xA5, 0x3C, 0xB8, 0x29, 0xE5, 0x19, 0x8E, 0x84, 0x82, 0xA0, 0xC8, 0xC7, 0x35, 0xDB, 0x70, 0x4A, 0x0B, 0x5B, 0x5B, 0x31, 0x2E, 0xF1, 0xBC, 0x5D, 0xE9, 0x78, 0x80, 0xAF, 0x03, 0xDF, 0x3B, 0xEB, 0x93, 0xBA, 0x6F, 0x3A, 0x6A, 0x70, 0xEC, 0xE2, 0x82, 0x85, 0x3F, 0x98, 0x00, 0xED, 0xF4, 0xFA, 0x2E, 0xC0, 0x8A, 0xE2, 0xDD, 0x02, 0x3A, 0x68, 0x3F, 0x3E, 0x10, 0x60, 0xF3, 0x0F, 0x95, 0x03, 0xA1, 0x40, 0xB3, 0xC2, 0xA7, 0x7D, 0x62, 0xE6, 0x98, 0x2B, 0x45, 0x41, 0xD3, 0x2A, 0xB6, 0x75, 0x58, 0x85, 0x92, 0x91, 0x4A, 0x5C, 0x63, 0x7B, 0xE3, 0x5A, 0xD1, 0xA4, 0x56, 0xBC, 0xA9, 0x2C, 0x70, 0x19, 0xF0, 0xEA, 0x90, 0xB1, 0xC7, 0x06, 0x3E, 0xAF, 0x29, 0x5E, 0x22, 0x74, 0x46, 0xC9, 0xDF, 0xE2, 0x78, 0xFC, 0x84, 0x01, 0x9B, 0x9F, 0x76, 0x6F, 0xFA, 0x42, 0x6C, 0xC4, 0x3A, 0x16, 0x50, 0xEB, 0x0A, 0xDD, 0x89, 0x23, 0x46, 0x89, 0x9B, 0x2E, 0x7C, 0xD2, 0x0A, 0x20, 0xC2, 0x17, 0xE3, 0xF5, 0x65, 0xDA, 0x0A, 0xB8, 0x03, 0xA9, 0x40, 0xC7, 0xDC, 0x2E, 0xF8, 0x67, 0x17, 0x60, 0x41, 0x18, 0x20, 0xD3, 0x66, 0xB3, 0x81, 0x12, 0xA0, 0x79, 0x89, 0x96, 0x4C, 0xCC, 0x82, 0xC5, 0x71, 0xF9, 0x34, 0x7B, 0x4B, 0xDB, 0x3C, 0xC2, 0x45, 0x22, 0xDD, 0xB0, 0xDF, 0x5C, 0x89, 0xC1, 0xBE, 0xF5, 0xD4, 0xD3, 0x63, 0xAD, 0x76, 0x3A, 0x15, 0x9D, 0x7D, 0x56, 0xE3, 0x8A, 0x3C, 0x69, 0x7F, 0x58, 0x5C, 0x46, 0x16, 0x57, 0xE4, 0x65, 0x88, 0x4B, 0x71, 0x51, 0x59, 0xB0, 0x4D, 0x06, 0x16, 0xCE, 0xDC, 0x3F, 0x18, 0x22, 0x58, 0xCC, 0x78, 0xAF, 0x8D, 0x17, 0x93, 0xA9, 0xA9, 0xE9, 0xFC, 0xD5, 0xD0, 0xA0, 0x60, 0x5B, 0x90, 0xC0, 0x32, 0x4A, 0xE2, 0x0E, 0x48, 0x01, 0x7B, 0x11, 0x09, 0x88, 0x00, 0xE6, 0xC0, 0xBC, 0x2F, 0x0C, 0x9D, 0x23, 0xD7, 0x1A, 0xE0, 0xC5, 0x4A, 0x20, 0xD7, 0x8B, 0x6A, 0x9C, 0x92, 0x39, 0x31, 0xCB, 0xFF, 0x9A, 0xDB, 0x87, 0x23, 0xA4, 0x75, 0x63, 0x1F, 0xEF, 0x27, 0xD2, 0xAB, 0xA3, 0xC4, 0x28, 0x7F, 0xF0, 0x8C, 0xDF, 0x00, 0x4B, 0x5F, 0xBF, 0x7B, 0x9D, 0x7F, 0xF3, 0x12, 0xC6, 0xB4, 0xFC, 0x98, 0x3D, 0x24, 0xD1, 0x02, 0x64, 0x7D, 0x2B, 0x8F, 0xDE, 0x2A, 0xD6, 0xF4, 0x8F, 0xAC, 0x76, 0x8B, 0x6E, 0xEE, 0x99, 0x4B, 0xC7, 0x26, 0x10, 0x70, 0x07, 0x6C, 0x13, 0xC1, 0x53, 0xE6, 0xB7, 0xF4, 0xFB, 0xD7, 0x2B, 0x80, 0x36, 0x62, 0xFC, 0x11, 0x14, 0xD0, 0x1A, 0x45, 0x09, 0xB0, 0x06, 0xD4, 0x81, 0x65, 0xD3, 0x7D, 0x0E, 0x10, 0x03, 0x8E, 0x05, 0xD2, 0x5A, 0x13, 0xB5, 0xFA, 0xB5, 0xB7, 0xDF, 0xEA, 0xBF, 0xA4, 0x0E, 0x2B, 0xA8, 0x6B, 0x96, 0x71, 0xF5, 0x34, 0xD3, 0x15, 0xC8, 0x27, 0x8B, 0xFE, 0xA5, 0x80, 0x6D, 0xDF, 0x6F, 0x59, 0xBB, 0x7E, 0xDA, 0xE5, 0x89, 0xBE, 0x59, 0x6A, 0x5E, 0x2F, 0xF6, 0xA8, 0xB5, 0x01, 0xE8, 0x02, 0x56, 0x03, 0x47, 0x28, 0x5D, 0xB7, 0xDA, 0x3C, 0x8F, 0xE4, 0xB6, 0x94, 0x67, 0x7E, 0xBA, 0xDC, 0x7B, 0x03, 0x6A, 0x37, 0x1B, 0x35, 0x88, 0x3C, 0xF9, 0x1B, 0xBE, 0x80, 0x9A, 0x29, 0xF7, 0x02, 0xB6, 0x7D, 0x36, 0xDA, 0xCD, 0x80, 0x26, 0x6A, 0x5E, 0x94, 0xF1, 0xBF, 0xFE, 0xC1, 0x88, 0x38, 0x7D, 0xFB, 0x6B, 0xA2, 0xD6, 0xBF, 0xAB, 0x40, 0x7F, 0xC6, 0xC1, 0x86, 0xEC, 0xA0, 0xFC, 0x89, 0x89, 0x7E, 0xA3, 0xB6, 0x37, 0x56, 0xA1, 0xD2, 0x7B, 0xFF, 0xBE, 0x97, 0x6D, 0x9F, 0x25, 0xD4, 0xFA, 0xEE, 0x13, 0xF0, 0x2D, 0xAA, 0x23, 0x13, 0xBF, 0x98, 0xA4, 0x42, 0xFF, 0xE8, 0xF6, 0x66, 0xC0, 0x49, 0x77, 0xDC, 0xEF, 0x56, 0xC2, 0x54, 0xAA, 0x56, 0x01, 0x2B, 0x18, 0xAE, 0x78, 0xFB, 0x9A, 0xD5, 0x88, 0xC4, 0x13, 0xFB, 0x51, 0x21, 0xBF, 0xD5, 0x3D, 0x44, 0x28, 0x90, 0x53, 0xEB, 0x33, 0x41, 0x58, 0x09, 0x38, 0x61, 0x0E, 0x6C, 0x9C, 0xE2, 0x0E, 0xEC, 0x04, 0xF4, 0x44, 0x94, 0x63, 0x0D, 0xCA, 0xC1, 0x6F, 0xFA, 0xE2, 0xFF, 0x35, 0x1F, 0x78, 0xAF, 0x4F, 0xCC, 0xD8, 0x7C, 0x6C, 0xE8, 0xC8, 0x96, 0xA8, 0x0C, 0x44, 0xF6, 0xAD, 0xD9, 0x44, 0x4D, 0x26, 0x6A, 0x9B, 0x57, 0xE8, 0xA7, 0x5E, 0x7C, 0x2F, 0x60, 0xAD, 0x7F, 0x08, 0xDF, 0x3B, 0x80, 0x55, 0x6F, 0x72, 0x6B, 0x32, 0x86, 0xCE, 0x23, 0xEB, 0xB7, 0x3E, 0xDD, 0xE2, 0x6D, 0x6F, 0x59, 0x0A, 0x4C, 0xCE, 0xF2, 0x88, 0xE2, 0x5A, 0xEF, 0xC5, 0xB8, 0x17, 0x61, 0x44, 0x02, 0xA2, 0x40, 0xC8, 0x7B, 0x4D, 0xD6, 0x06, 0x22, 0x80, 0x49, 0xB8, 0xAB, 0x05, 0x98, 0xBC, 0x22, 0xB1, 0xFB, 0x89, 0xDA, 0xC6, 0xE6, 0xAC, 0x37, 0x26, 0x37, 0xCB, 0x58, 0x29, 0x92, 0x8F, 0x49, 0xF5, 0x92, 0xA2, 0xFB, 0xF6, 0x9E, 0x3E, 0x80, 0x4F, 0x79, 0x59, 0xEC, 0xAF, 0xC9, 0xC9, 0xEB, 0x77, 0xC9, 0x5D, 0xF6, 0x9B, 0x61, 0xA5, 0xEB, 0xED, 0xFA, 0xD0, 0x0D, 0xEC, 0x00, 0x74, 0x4A, 0xCF, 0x26, 0x23, 0x46, 0x78, 0x14, 0x54, 0x71, 0xFC, 0x69, 0x70, 0x5F, 0xF1, 0xAA, 0xE8, 0xE2, 0x57, 0x8F, 0xDE, 0xFB, 0x28, 0x76, 0x35, 0x96, 0xC3, 0xFE, 0xE6, 0xB9, 0x8F, 0x58, 0x26, 0x09, 0xD4, 0x98, 0x60, 0x9E, 0x9E, 0x52, 0xC0, 0xD6, 0xC9, 0x45, 0x01, 0x46, 0xD3, 0x69, 0x1E, 0xAD, 0xE6, 0x29, 0x39, 0x51, 0x13, 0xCC, 0x9C, 0x3C, 0x7E, 0x33, 0x27, 0x69, 0x87, 0xC1, 0xAE, 0x1B, 0x12, 0xD3, 0x4D, 0xD9, 0x77, 0xA0, 0x21, 0xFF, 0xA5, 0xFF, 0x60, 0xE5, 0xAF, 0x35, 0x4C, 0x7F, 0x4C, 0x4E, 0x7C, 0x24, 0x81, 0xF9, 0x4F, 0x23, 0xC7, 0x3C, 0x9A, 0x47, 0xB7, 0x6B, 0xEB, 0x11, 0x9B, 0xED, 0xA8, 0x90, 0x23, 0x13, 0xCF, 0x99, 0x1A, 0x38, 0xB2, 0x1C, 0x2D, 0x93, 0x61, 0xCE, 0x2B, 0x6C, 0xAD, 0x51, 0x3E, 0x42, 0x79, 0x54, 0xA3, 0x71, 0x4F, 0x66, 0x23, 0xC3, 0xA5, 0x8C, 0xD3, 0x26, 0xDC, 0x80, 0x5A, 0x1F, 0xF5, 0x88, 0x08, 0xC2, 0x03, 0x90, 0x7C, 0x83, 0x67, 0x0A, 0xCC, 0x29, 0x47, 0x1A, 0xA2, 0x26, 0x94, 0xDB, 0x7E, 0x63, 0x6D, 0x85, 0x9F, 0x21, 0xF7, 0x9B, 0x52, 0x0A, 0x56, 0x08, 0x7F, 0xED, 0x7C, 0x02, 0x8E, 0x15, 0xD0, 0x75, 0x5B, 0xBF, 0xDE, 0xDE, 0xAA, 0x77, 0x93, 0x87, 0x45, 0x9E, 0x4C, 0x60, 0x02, 0x44, 0xDE, 0x3C, 0xA6, 0xAD, 0x74, 0x84, 0x7A, 0x93, 0xC1, 0xCB, 0xF8, 0x86, 0xD2, 0xB7, 0x65, 0x41, 0xD7, 0x88, 0x98, 0x8F, 0xC5, 0xF7, 0xE8, 0x8E, 0x96, 0xC0, 0x8A, 0x5B, 0x69, 0xBA, 0xF7, 0x8F, 0xDC, 0x19, 0x78, 0xD3, 0x06, 0x77, 0x03, 0x46, 0x24, 0x57, 0xAD, 0x33, 0xE4, 0xB6, 0x01, 0x11, 0x80, 0x0B, 0xB0, 0xF3, 0x1D, 0xA3, 0x73, 0xA4, 0x3C, 0x65, 0x52, 0x87, 0x7E, 0x91, 0x71, 0x47, 0x29, 0xA3, 0xF3, 0x51, 0xEA, 0x06, 0xA1, 0xE8, 0xF7, 0x24, 0xED, 0x62, 0x66, 0x6C, 0x02, 0x16, 0x6C, 0x2A, 0x16, 0xCF, 0x58, 0xCB, 0xB3, 0x0C, 0xAD, 0x8F, 0xE2, 0x9D, 0x6B, 0x74, 0x6C, 0xC0, 0xEB, 0x55, 0x64, 0x27, 0x91, 0xAE, 0x03, 0x48, 0xB9, 0x32, 0x6D, 0x9E, 0xDC, 0xBE, 0x25, 0x53, 0xEE, 0xC8, 0x17, 0xED, 0xE3, 0x42, 0xEF, 0x73, 0x31, 0x02, 0x73, 0xB9, 0xDB, 0xB4, 0xCD, 0x91, 0xAB, 0x4E, 0xF7, 0xD1, 0xFB, 0x25, 0xDF, 0xF1, 0xD4, 0x46, 0xA9, 0x80, 0xA2, 0x82, 0x09, 0xD0, 0x09, 0x54, 0x01, 0x6E, 0xC0, 0xDA, 0x3C, 0xB3, 0x81, 0x9A, 0x33, 0x75, 0xA2, 0xE6, 0xEC, 0xFD, 0xA4, 0xDC, 0x93, 0x12, 0x5C, 0xA1, 0x3D, 0xF7, 0xB5, 0xE9, 0xD7, 0x17, 0x18, 0xDB, 0xAD, 0xB8, 0xC0, 0xF6, 0xE4, 0x8D, 0xBE, 0xA5, 0x8C, 0x76, 0x7B, 0x32, 0xF0, 0x7B, 0xBD, 0x62, 0xC6, 0x2F, 0xFA, 0x38, 0x8A, 0x11, 0x5F, 0x19, 0x91, 0x35, 0xDF, 0x2B, 0xE1, 0xF3, 0x97, 0xD6, 0xDB, 0x56, 0x4C, 0xD6, 0xBD, 0xB1, 0xE4, 0xF9, 0x06, 0x2C, 0x5F, 0x47, 0x74, 0x65, 0xB4, 0x26, 0xE1, 0xF4, 0x74, 0x4F, 0x1B, 0x9B, 0xCF, 0x3D, 0xB6, 0xF5, 0x93, 0x74, 0x06, 0xA4, 0x4E, 0xB6, 0xD9, 0xBF, 0x92, 0x87, 0x16, 0x30, 0x39, 0x6B, 0xD9, 0x73, 0x26, 0xE0, 0xF2, 0xF6, 0x66, 0x6C, 0x09, 0xFC, 0xCC, 0x36, 0xB2, 0xF0, 0xCA, 0xA0, 0x9A, 0x48, 0x63, 0xC6, 0x61, 0x82, 0x6C, 0xBA, 0xC8, 0x1F, 0x62, 0x5C, 0xD1, 0x8A, 0x4D, 0x86, 0xBF, 0xB5, 0x52, 0x79, 0xBC, 0x31, 0x19, 0x2D, 0x8A, 0x5A, 0x5B, 0xE8, 0x78, 0x99, 0xC0, 0x8E, 0x49, 0xED, 0x1B, 0x07, 0x6F, 0x60, 0x07, 0x50, 0x3C, 0x53, 0xF6, 0x58, 0x13, 0x02, 0xD1, 0x7C, 0xFB, 0x94, 0x2B, 0x8E, 0x37, 0xE0, 0xED, 0x4F, 0x72, 0x15, 0xA0, 0xAA, 0x5B, 0x9B, 0xA5, 0x3C, 0x1A, 0xB3, 0xD1, 0x3C, 0xF9, 0x1F, 0x7B, 0x01, 0xD6, 0xF4, 0x8A, 0x2C, 0xA0, 0xC6, 0x5A, 0xB3, 0x08, 0x05, 0xC6, 0x47, 0x32, 0x05, 0xF0, 0x0D, 0xE4, 0xC8, 0x2D, 0x67, 0xA4, 0x25, 0x65, 0xBA, 0xF1, 0xC7, 0xDF, 0x6C, 0x3E, 0x9A, 0x8F, 0xE5, 0x72, 0xAB, 0xF1, 0xF3, 0x35, 0xAB, 0xF2, 0x72, 0xB6, 0x05, 0xDE, 0xD6, 0xA9, 0x72, 0x12, 0x37, 0x38, 0xB6, 0xE2, 0x3A, 0x72, 0xC8, 0xD4, 0x6A, 0x1E, 0x0B, 0xEE, 0xF9, 0x06, 0xB7, 0x52, 0xE2, 0x32, 0x60, 0x7C, 0xA3, 0xA7, 0x76, 0xB6, 0x37, 0x70, 0x7C, 0x27, 0x05, 0xF1, 0x29, 0x63, 0x2A, 0xDA, 0x73, 0x61, 0x6D, 0x86, 0x50, 0x4F, 0x4A, 0xD9, 0x51, 0x3A, 0x15, 0x41, 0x3B, 0x89, 0x54, 0xD3, 0xF6, 0xCB, 0x81, 0xF0, 0xD7, 0x82, 0x5F, 0x1C, 0xC8, 0x81, 0x00, 0x16, 0xC0, 0xF2, 0xD7, 0x7E, 0x7E, 0xC9, 0x38, 0x71, 0x4D, 0xD0, 0x0A, 0x92, 0x5A, 0x1A, 0x33, 0xEE, 0x9A, 0x72, 0x79, 0xFE, 0x87, 0xD6, 0x95, 0x9B, 0xA6, 0xC5, 0x9B, 0x6A, 0x96, 0xA2, 0x41, 0x02, 0x53, 0xD8, 0x6C, 0x72, 0xE2, 0x81, 0x3A, 0x33, 0x46, 0xE5, 0xD8, 0xA0, 0x7E, 0xD5, 0x74, 0x93, 0xCF, 0xE2, 0xBA, 0xDB, 0xF0, 0x62, 0x26, 0xD7, 0xD6, 0xF1, 0xFE, 0xBB, 0xB2, 0x81, 0x52, 0xA6, 0xEC, 0xD8, 0xE9, 0x5C, 0x77, 0x8C, 0x1F, 0xF5, 0xCF, 0x09, 0x4B, 0xC7, 0x34, 0xD3, 0xEF, 0x18, 0xD6, 0x49, 0x5A, 0xE3, 0x68, 0xE0, 0x7A, 0xD6, 0x8C, 0xA2, 0x41, 0x1C, 0x6F, 0xF9, 0xAD, 0x40, 0xD0, 0xD9, 0x5E, 0x46, 0xFF, 0x58, 0x40, 0x10, 0x6E, 0x80, 0xF2, 0x94, 0x0E, 0x20, 0xD7, 0xDB, 0x26, 0xBF, 0x7A, 0x62, 0xD6, 0x6C, 0x9F, 0x67, 0xEC, 0xC2, 0x26, 0xA8, 0x25, 0xB6, 0xC4, 0xEE, 0x45, 0xEA, 0x73, 0xB7, 0xDC, 0x52, 0x6C, 0x78, 0xB8, 0x67, 0x6A, 0x46, 0xE3, 0xE5, 0xB7, 0x66, 0x36, 0x70, 0x94, 0xA7, 0x21, 0xD3, 0x5A, 0x40, 0x07, 0xE0, 0xF6, 0x4A, 0xD5, 0xDE, 0xBC, 0x2F, 0x17, 0x8E, 0x82, 0x6F, 0xC8, 0x19, 0x53, 0x4F, 0x02, 0xAD, 0x4E, 0x07, 0xD4, 0xDB, 0x98, 0x96, 0x13, 0x2F, 0x01, 0xE6, 0xAE, 0x67, 0x3C, 0x25, 0x38, 0x16, 0x9D, 0x97, 0xAC, 0xC5, 0x9B, 0xFE, 0xB9, 0x36, 0xA0, 0x06, 0xF4, 0xDC, 0xC4, 0x78, 0x17, 0x11, 0x23, 0xE6, 0xBA, 0x32, 0xC0, 0x15, 0x90, 0x00, 0xE6, 0xD2, 0x31, 0x63, 0xD0, 0x74, 0xAA, 0x4C, 0x36, 0x5D, 0x65, 0x36, 0xBB, 0x40, 0xCD, 0x0A, 0x94, 0xEE, 0x9C, 0xC8, 0x5B, 0x40, 0xEF, 0x7B, 0x63, 0x3D, 0x81, 0x9C, 0xC4, 0x5B, 0x1F, 0x4D, 0x2D, 0x47, 0x53, 0xE3, 0xB6, 0x40, 0xC6, 0xF5, 0xF8, 0x8C, 0x93, 0x7D, 0x96, 0xB4, 0xA2, 0x1C, 0x0D, 0xC8, 0x8C, 0x56, 0xF8, 0x8B, 0x70, 0xBC, 0x58, 0x82, 0x53, 0xC6, 0x91, 0x7C, 0x74, 0xAC, 0xE4, 0xF7, 0x7F, 0x7A, 0x20, 0x38, 0xD5, 0x14, 0x0E, 0xE5, 0x1A, 0x15, 0x6D, 0x5C, 0xCE, 0xF9, 0x87, 0xDA, 0x21, 0xD0, 0x15, 0xB3, 0x2A, 0xDD, 0xA1, 0xD3, 0x49, 0x02, 0x78, 0x11, 0xF9, 0xE5, 0xA8, 0x0A, 0xDB, 0x40, 0x2F, 0x42, 0x80, 0x6C, 0xC0, 0x07, 0xF3, 0x62, 0x40, 0x0C, 0xAD, 0x35, 0x31, 0xDB, 0x5C, 0xFB, 0x0B, 0x6D, 0x7D, 0x85, 0x6D, 0x66, 0x13, 0xED, 0xE1, 0x53, 0x51, 0x67, 0xBE, 0xE4, 0xF7, 0x19, 0x96, 0x24, 0xF6, 0x88, 0xB2, 0xB0, 0x76, 0xB9, 0x1D, 0xA5, 0x4E, 0x79, 0x3B, 0x43, 0x30, 0x4D, 0xA0, 0x9D, 0x99, 0x70, 0x9E, 0x27, 0x74, 0xB6, 0x19, 0x90, 0x6B, 0x31, 0x34, 0xDA, 0xA6, 0xE3, 0x83, 0xE1, 0x68, 0x03, 0xD1, 0x80, 0x6E, 0xFC, 0x6C, 0x14, 0x44, 0x57, 0x60, 0xF3, 0x62, 0xF1, 0x06, 0x26, 0xAC, 0xEB, 0x07, 0xA7, 0xC4, 0xC9, 0xFA, 0xD9, 0x10, 0x7E, 0x5A, 0x24, 0xB4, 0x61, 0x02, 0x5A, 0xC0, 0x11, 0x90, 0x37, 0x90, 0x0E, 0x8C, 0x5A, 0xBB, 0x06, 0x0D, 0x6C, 0x05, 0xA4, 0x00, 0x73, 0x68, 0xB7, 0xEB, 0xC4, 0x4C, 0x7E, 0xE1, 0x69, 0x31, 0x2C, 0xE4, 0xD3, 0xEF, 0x7E, 0xE7, 0xD6, 0x48, 0x08, 0xAC, 0x5C, 0x2D, 0xD8, 0x76, 0x7C, 0x5A, 0x17, 0xD4, 0x5E, 0x32, 0x66, 0xC6, 0x25, 0x61, 0x8E, 0x05, 0x5D, 0x8C, 0xF2, 0xCF, 0x26, 0x14, 0xCC, 0x0C, 0xDD, 0x7B, 0x94, 0x39, 0xFE, 0x83, 0xD4, 0xBB, 0xB5, 0xF0, 0xC1, 0x20, 0x43, 0x73, 0xCC, 0x7B, 0x71, 0x84, 0x24, 0x63, 0x46, 0x65, 0xCE, 0x8D, 0x47, 0xBC, 0xB4, 0x5D, 0x8E, 0x77, 0xAD, 0x29, 0x20, 0x3F, 0x08, 0x8F, 0x9C, 0x83, 0x96, 0x53, 0x0A, 0x1F, 0xF9, 0x6C, 0x1D, 0x21, 0xB8, 0x82, 0xC3, 0x4D, 0x80, 0xDC, 0xFC, 0xEB, 0x06, 0x58, 0x03, 0xAE, 0x73, 0x44, 0xD8, 0x8B, 0x98, 0xEE, 0x1A, 0x7B, 0x62, 0xA6, 0x4C, 0xD8, 0x11, 0xF6, 0x41, 0x08, 0xEE, 0x49, 0x1B, 0x43, 0xC7, 0xED, 0x0E, 0xDB, 0x88, 0x84, 0x16, 0xFB, 0x7E, 0x38, 0x15, 0x6E, 0x2C, 0xD4, 0x89, 0xEC, 0x5B, 0xE3, 0x00, 0x7F, 0x81, 0xBB, 0x87, 0x39, 0xE2, 0xA4, 0x9C, 0x87, 0xB9, 0xEB, 0x38, 0x3E, 0x33, 0x07, 0x58, 0x81, 0xB0, 0xB1, 0x88, 0x9E, 0x67, 0xC1, 0x44, 0x9E, 0x2F, 0x0A, 0x4E, 0x69, 0x0E, 0x61, 0x1C, 0x51, 0xD4, 0x54, 0x4A, 0xB1, 0xF3, 0x5B, 0x4C, 0xA7, 0xD9, 0xE7, 0x74, 0x20, 0x60, 0x3C, 0xF9, 0xD0, 0xF1, 0x38, 0xA9, 0xB9, 0xCE, 0x14, 0x5B, 0x75, 0x84, 0x55, 0x16, 0x10, 0x45, 0x24, 0xE0, 0x0A, 0x48, 0x01, 0x3B, 0x00, 0x35, 0x44, 0x5E, 0xE6, 0x21, 0x80, 0x54, 0xC7, 0x15, 0x26, 0xB0, 0xF3, 0x8C, 0xA7, 0xC1, 0x43, 0x2D, 0x35, 0xFF, 0x49, 0x96, 0x16, 0xFD, 0x83, 0x4F, 0x9A, 0x07, 0x16, 0x58, 0x26, 0xB7, 0xF7, 0xE7, 0x6F, 0xF0, 0x5D, 0x47, 0x13, 0xE3, 0x06, 0x6E, 0x06, 0x62, 0x50, 0x2C, 0xC8, 0x2A, 0xEE, 0x2D, 0x16, 0xED, 0x34, 0x92, 0x49, 0x3C, 0x99, 0x38, 0x25, 0x1D, 0x61, 0x4A, 0x3A, 0x70, 0xA7, 0xF2, 0xED, 0x7B, 0x32, 0x98, 0x99, 0xDD, 0xDC, 0xBC, 0x66, 0xEA, 0x34, 0x44, 0xD9, 0x41, 0x18, 0x5E, 0x8C, 0xC4, 0x1B, 0x3A, 0xF1, 0x5B, 0x9A, 0xBF, 0x7A, 0x51, 0xF4, 0x95, 0x04, 0x6A, 0xE3, 0xCF, 0xAA, 0xFE, 0x80, 0x33, 0xEB, 0x37, 0xE3, 0x02, 0x3A, 0xA0, 0x12, 0x2F, 0x27, 0x94, 0x10, 0x60, 0x1B, 0xA0, 0x89, 0x7F, 0x7E, 0x9D, 0xA0, 0xCD, 0xE5, 0x38, 0xB5, 0x6C, 0x31, 0x47, 0x07, 0x59, 0x68, 0xA6, 0x9D, 0xBF, 0x7B, 0x42, 0xFD, 0xAE, 0x2E, 0x33, 0xB9, 0x96, 0xF8, 0x8B, 0xF0, 0x63, 0x11, 0xC7, 0x7B, 0x50, 0xF2, 0x2F, 0xF8, 0x0F, 0xEC, 0xDE, 0x57, 0x9C, 0xC1, 0x96, 0xCD, 0xFF, 0xC9, 0x28, 0x71, 0x05, 0x9F, 0xCE, 0x40, 0x32, 0x07, 0xE1, 0x06, 0x6B, 0xC4, 0xE9, 0x3D, 0xFB, 0x40, 0x0D, 0xB4, 0x11, 0x8A, 0x9F, 0x95, 0x43, 0xFE, 0xEE, 0x40, 0x24, 0x16, 0xF5, 0xF2, 0xFE, 0xA1, 0xB9, 0x9E, 0xA7, 0x89, 0x47, 0x0B, 0xEE, 0x72, 0x0D, 0x79, 0xF7, 0x07, 0x0F, 0xA0, 0x8C, 0xA8, 0x0F, 0x7A, 0xFD, 0xD4, 0xEC, 0x25, 0x80, 0x18, 0xB0, 0x13, 0x50, 0x9F, 0x98, 0x05, 0x84, 0xA1, 0xD5, 0xF0, 0x84, 0x59, 0x06, 0x2D, 0xBD, 0xF4, 0x09, 0x64, 0x6C, 0x87, 0xCB, 0xE8, 0x6E, 0xB4, 0x52, 0x10, 0x7F, 0xCA, 0xB2, 0xBD, 0x5F, 0x8F, 0xAB, 0x93, 0x29, 0x9B, 0xFB, 0x53, 0x9E, 0x34, 0x76, 0xE5, 0xF1, 0x56, 0xA2, 0xA6, 0x01, 0x36, 0x1E, 0x41, 0x3C, 0x33, 0x67, 0xCD, 0x2E, 0xB7, 0x3E, 0x0E, 0xD1, 0x7A, 0x84, 0xDC, 0x56, 0x60, 0xD5, 0xDB, 0xF3, 0xCD, 0xFB, 0xC9, 0x1B, 0xB1, 0xD3, 0xFA, 0x4D, 0xEB, 0x6D, 0x73, 0xD3, 0x6B, 0xE4, 0x16, 0x60, 0x8C, 0x50, 0x33, 0xB9, 0x70, 0x23, 0xC4, 0xC7, 0xB7, 0x03, 0x50, 0xC5, 0x99, 0xBD, 0x71, 0xB4, 0x37, 0x4F, 0x89, 0x89, 0x5A, 0xF2, 0x71, 0xEC, 0xBF, 0x01, 0x60, 0xB5, 0x91, 0x9E, 0x96, 0xF2, 0x44, 0x6D, 0x75, 0xA3, 0x14, 0x38, 0x37, 0x6A, 0x72, 0x29, 0xA7, 0xED, 0xAF, 0xE0, 0x3D, 0xFE, 0x94, 0xDA, 0xD7, 0xFE, 0x08, 0x0B, 0x7B, 0xC2, 0xDE, 0x58, 0x08, 0x4B, 0xE8, 0x7A, 0xDC, 0x7E, 0x01, 0x31, 0x60, 0x1C, 0xEA, 0x64, 0xDF, 0x50, 0x62, 0xAE, 0x45, 0x7F, 0xF4, 0xB7, 0xE7, 0x9B, 0x17, 0xD1, 0x38, 0xE5, 0xE4, 0xD0, 0x1C, 0x59, 0x6A, 0xD2, 0x16, 0x65, 0x5C, 0x85, 0x00, 0x27, 0x8A, 0xB1, 0xB0, 0x78, 0x7B, 0xA2, 0x76, 0x01, 0x45, 0x8C, 0xD2, 0xD1, 0x0E, 0xF8, 0x02, 0x52, 0x78, 0x8A, 0x4E, 0xD4, 0xEA, 0x37, 0xA8, 0x2B, 0xA1, 0xE0, 0xD6, 0xF2, 0xFF, 0x69, 0x8E, 0x11, 0xAA, 0x0A, 0x33, 0x84, 0xED, 0x90, 0x98, 0x43, 0x69, 0x98, 0xF0, 0x4D, 0x56, 0xF6, 0xB9, 0xB9, 0xBD, 0x2A, 0x6D, 0x1B, 0x50, 0x0B, 0xB0, 0x06, 0xC4, 0x5E, 0x73, 0xB8, 0xAA, 0x57, 0xEE, 0xD7, 0x7A, 0x77, 0x04, 0x46, 0xB3, 0x4D, 0x07, 0x44, 0x80, 0x75, 0xB6, 0x0D, 0x89, 0xBE, 0x19, 0xCC, 0x76, 0x64, 0xF3, 0xAD, 0x40, 0xD6, 0xEB, 0xAD, 0x2C, 0x06, 0x68, 0x00, 0x35, 0xF9, 0x6C, 0x6B, 0x3D, 0xDF, 0x60, 0xC7, 0xBC, 0xF8, 0xBA, 0xDF, 0x46, 0x01, 0x65, 0xB7, 0x74, 0x14, 0x51, 0x6B, 0x78, 0x1C, 0xEE, 0xFC, 0xDD, 0x0A, 0x3C, 0x03, 0xC5, 0x05, 0xD7, 0x26, 0x32, 0xE1, 0x3F, 0x04, 0xAD, 0xB7, 0x11, 0x82, 0xF2, 0x18, 0x17, 0xBA, 0x37, 0x6A, 0x5B, 0xAE, 0x4F, 0xAA, 0xF1, 0x33, 0xF9, 0x19, 0x25, 0x13, 0x92, 0x26, 0x9C, 0xD8, 0xEB, 0xB5, 0x70, 0xD7, 0xC5, 0x33, 0xF3, 0xED, 0x4E, 0x20, 0x1F, 0x43, 0x77, 0x21, 0xD6, 0x28, 0xEB, 0x0D, 0x24, 0xC3, 0x35, 0x8E, 0xB5, 0x67, 0xE7, 0xE4, 0x5C, 0xAF, 0x01, 0xF4, 0xE4, 0xEF, 0xC5, 0x5B, 0xB9, 0xBD, 0x16, 0x50, 0x53, 0x3D, 0x1C, 0x80, 0xF8, 0xDC, 0x9B, 0x01, 0xCD, 0xAB, 0xE9, 0xE9, 0x49, 0xE7, 0x3C, 0xD2, 0xAD, 0xE1, 0x76, 0x5A, 0x22, 0xBF, 0x9B, 0x5D, 0x3A, 0xDC, 0xD5, 0xB2, 0x1D, 0x36, 0x79, 0xC9, 0xC4, 0xFF, 0x16, 0x78, 0x39, 0x84, 0x63, 0x1F, 0xA3, 0xFB, 0xB1, 0x36, 0x71, 0x7D, 0x1C, 0x0F, 0xE5, 0x44, 0xA6, 0x8F, 0xA8, 0x0E, 0x98, 0xF3, 0xC5, 0x06, 0x7C, 0x7F, 0xF6, 0x0E, 0x1C, 0x28, 0x99, 0x0B, 0x1C, 0x48, 0x99, 0x2D, 0x13, 0x06, 0x48, 0x80, 0x5D, 0x04, 0xFF, 0x5E, 0x1B, 0x8E, 0x66, 0xEB, 0x4E, 0xF5, 0xD6, 0x5B, 0xE4, 0x29, 0x22, 0x5E, 0x09, 0x04, 0xD1, 0x32, 0x92, 0xEF, 0x06, 0x9C, 0x11, 0x95, 0x06, 0xD2, 0x81, 0xD0, 0x8F, 0x6D, 0x43, 0x00, 0xAE, 0x6F, 0x56, 0x67, 0xEC, 0x89, 0x1A, 0x7C, 0xE7, 0x3A, 0x0D, 0xB3, 0x80, 0x54, 0xCE, 0x87, 0x59, 0x25, 0xE2, 0xCA, 0x4D, 0x99, 0x0D, 0xD5, 0x07, 0xB6, 0xAE, 0x66, 0x12, 0x34, 0x52, 0xFB, 0x3E, 0x0D, 0x1E, 0x13, 0xCA, 0x3C, 0xA5, 0xAB, 0xD5, 0x44, 0x7D, 0x1E, 0x03, 0x01, 0x2C, 0x7B, 0xCD, 0xF7, 0xFA, 0xE3, 0x18, 0x57, 0x75, 0x8F, 0xE2, 0x34, 0xB1, 0x0C, 0x07, 0x16, 0x03, 0x6B, 0x01, 0x68, 0xE2, 0xC5, 0xD9, 0xBA, 0x3B, 0x0F, 0x13, 0xBD, 0x79, 0xE6, 0x37, 0x3B, 0xAF, 0x6D, 0x36, 0x29, 0x80, 0xB4, 0xD7, 0x02, 0x60, 0x7F, 0xB6, 0x33, 0xA2, 0x80, 0x9D, 0x3C, 0x93, 0xE8, 0x1F, 0x1C, 0x40, 0xD4, 0xE4, 0x54, 0x0F, 0xF9, 0x4F, 0x75, 0x82, 0x82, 0x26, 0xFB, 0xD3, 0xB8, 0x26, 0xA7, 0x8D, 0x73, 0x02, 0xEE, 0x73, 0x45, 0xBE, 0x22, 0xE4, 0x54, 0xA7, 0x24, 0x6F, 0x9D, 0x53, 0xC2, 0x7F, 0xD2, 0x9E, 0x04, 0x47, 0x47, 0x36, 0x5A, 0x6F, 0x2F, 0xD5, 0x0E, 0xE0, 0xF6, 0x12, 0x7E, 0xFC, 0x97, 0xD6, 0x63, 0x07, 0x67, 0x7F, 0xCE, 0x7F, 0x39, 0x9B, 0x31, 0xC0, 0xC9, 0x76, 0xEF, 0x9B, 0x27, 0x4E, 0x25, 0x64, 0x32, 0xAA, 0xA8, 0x1B, 0xA2, 0x66, 0xB5, 0x81, 0x5E, 0xA3, 0xC3, 0x30, 0x01, 0x90, 0xD9, 0x68, 0x5B, 0x80, 0x15, 0x78, 0x31, 0x0D, 0x90, 0xC2, 0x99, 0xCD, 0x17, 0x77, 0xE0, 0x14, 0x39, 0x41, 0x53, 0x1A, 0x4B, 0x25, 0xB6, 0xED, 0x7B, 0x63, 0xA5, 0x28, 0xAF, 0x75, 0x5F, 0xB6, 0x70, 0x19, 0xBF, 0xE1, 0xBB, 0x8C, 0x80, 0x76, 0x7C, 0x0D, 0xE4, 0x25, 0xEF, 0x23, 0x8D, 0xA3, 0x9A, 0x15, 0xD4, 0x17, 0x54, 0x70, 0xC7, 0x1D, 0xE0, 0xE6, 0x91, 0xCE, 0x1B, 0x16, 0xC7, 0xFF, 0xD4, 0x60, 0x38, 0xCF, 0xCC, 0xFD, 0x6C, 0x45, 0xF5, 0x3C, 0x73, 0x65, 0xAC, 0x62, 0x09, 0x66, 0x27, 0x53, 0x66, 0xB7, 0xB3, 0x1D, 0xE2, 0xE3, 0x59, 0xC1, 0x18, 0x3A, 0x45, 0x13, 0x0D, 0xA0, 0xE4, 0xE6, 0xBD, 0xE5, 0x69, 0xE6, 0xDB, 0x01, 0x54, 0x03, 0x1E, 0xC0, 0xAA, 0x29, 0x4C, 0x05, 0xDA, 0xA9, 0x96, 0xD8, 0x44, 0xCD, 0xD8, 0xE2, 0x46, 0xC6, 0xFF, 0x8D, 0x2D, 0xFA, 0x7F, 0x73, 0x0C, 0x09, 0x75, 0xEE, 0xDE, 0x08, 0x86, 0xEF, 0xDA, 0xB4, 0xE2, 0xB5, 0x91, 0x1F, 0x5F, 0xA7, 0x65, 0x7D, 0x5C, 0xB6, 0xC7, 0x8E, 0x63, 0x9A, 0x52, 0x0B, 0xC2, 0x8F, 0x61, 0x35, 0xA2, 0x7F, 0xE3, 0x94, 0xF9, 0xA0, 0xD9, 0x40, 0x6C, 0xBE, 0x6F, 0x7E, 0x56, 0x6F, 0x03, 0x38, 0xC9, 0xEB, 0x2A, 0xB0, 0xCF, 0x6D, 0x26, 0x83, 0x68, 0x9C, 0xC2, 0x3D, 0x12, 0xE0, 0x5A, 0xF9, 0x8F, 0x61, 0xE2, 0x12, 0x20, 0xA7, 0x3E, 0x56, 0x81, 0x11, 0x97, 0x8F, 0xAA, 0xAC, 0xC0, 0xE2, 0xA8, 0x2C, 0x01, 0x6C, 0x03, 0xDB, 0x00, 0x5D, 0x23, 0x2E, 0x4F, 0xD4, 0x1C, 0x6F, 0x30, 0x2A, 0x2B, 0x2A, 0x18, 0xB1, 0xFE, 0x96, 0x65, 0x6F, 0xCA, 0x5E, 0x73, 0xF1, 0x6D, 0xCF, 0x69, 0xEF, 0x43, 0x73, 0xEF, 0x57, 0x52, 0x6B, 0xE1, 0x39, 0xD3, 0xFF, 0xBC, 0x73, 0x0C, 0x97, 0x71, 0xB4, 0xE4, 0x36, 0xE7, 0x9F, 0xD1, 0xD8, 0x27, 0xBC, 0xCB, 0x80, 0x9E, 0xEA, 0x07, 0x67, 0xCC, 0xC7, 0x63, 0x6E, 0x8A, 0x5A, 0x8C, 0x01, 0xDD, 0xC0, 0x32, 0xE2, 0x76, 0xE2, 0xE6, 0x95, 0xC9, 0x4F, 0x7D, 0x3B, 0x68, 0x31, 0x85, 0x46, 0x39, 0xFE, 0x6C, 0x9D, 0x04, 0xDF, 0x35, 0x4D, 0x11, 0x1C, 0x88, 0xF5, 0x62, 0x74, 0xDD, 0x4E, 0x20, 0x0A, 0x40, 0xA6, 0xAD, 0xDC, 0xBB, 0x5A, 0xB0, 0x6B, 0xA7, 0x41, 0xAA, 0x74, 0x41, 0x5C, 0xA1, 0x43, 0xAA, 0x68, 0xD2, 0xC0, 0x3D, 0xA0, 0xF2, 0x89, 0x62, 0xCE, 0xD7, 0x31, 0x4F, 0xCC, 0x57, 0x87, 0x2C, 0x06, 0xAD, 0xEF, 0x84, 0x50, 0x8C, 0xE0, 0xF8, 0x11, 0x3B, 0x56, 0x2F, 0x3D, 0xD5, 0x21, 0x8C, 0x9D, 0x36, 0x61, 0x78, 0x51, 0x9F, 0x32, 0x6B, 0x2E, 0x84, 0xC6, 0x9A, 0x73, 0xD7, 0x4C, 0xF0, 0x8F, 0xCF, 0x87, 0x2A, 0xB0, 0xA7, 0x4F, 0xDE, 0xD8, 0x51, 0xCA, 0xD4, 0x5E, 0x73, 0xE0, 0x30, 0xBB, 0xB9, 0x78, 0xE7, 0x8A, 0x69, 0x85, 0x9D, 0x40, 0xD9, 0xED, 0x53, 0x06, 0xD1, 0x0F, 0xE0, 0x8B, 0x4D, 0x78, 0x01, 0x4A, 0xB8, 0x8F, 0x88, 0x3E, 0x41, 0x4B, 0x5A, 0x23, 0xC5, 0x94, 0xB8, 0xDE, 0x59, 0x9A, 0x67, 0x0B, 0x8B, 0xA0, 0x05, 0x7F, 0x4F, 0xEC, 0x87, 0x25, 0xF6, 0x7B, 0xFA, 0xCB, 0x27, 0x87, 0x14, 0x47, 0x0C, 0x01, 0xFE, 0xCF, 0x2B, 0x32, 0x17, 0x5E, 0x34, 0x3F, 0x3D, 0x6E, 0xA7, 0xD6, 0x7F, 0x9A, 0xAC, 0xF9, 0x64, 0x61, 0xDB, 0x6D, 0x0A, 0xBE, 0x8F, 0x88, 0xEA, 0xC6, 0x3B, 0x8E, 0x00, 0x7B, 0x36, 0x51, 0x08, 0x73, 0xA0, 0x47, 0x7C, 0xED, 0xDB, 0x37, 0x95, 0xA3, 0xEF, 0x08, 0x6D, 0xDC, 0xB2, 0xF7, 0xE0, 0x8B, 0xBF, 0x24, 0x6E, 0x20, 0xF9, 0xE0, 0x73, 0x05, 0xDA, 0x98, 0x5C, 0xA9, 0x84, 0xF0, 0xC5, 0x24, 0x1A, 0x2F, 0x6E, 0xA2, 0x6A, 0x62, 0x56, 0xEC, 0x0F, 0x3D, 0xC9, 0xAA, 0xA3, 0x23, 0xCF, 0x5A, 0x9E, 0x09, 0xE5, 0x81, 0xD1, 0xB7, 0xD4, 0xB0, 0x19, 0xD6, 0xCD, 0x34, 0x78, 0xCC, 0xD0, 0x0C, 0x08, 0xBF, 0x93, 0x66, 0x09, 0x5E, 0x17, 0x79, 0xD2, 0x61, 0x37, 0x95, 0x1D, 0x63, 0x78, 0xE6, 0xF6, 0x11, 0xD3, 0x5B, 0xE5, 0x1A, 0x56, 0x22, 0x3B, 0x19, 0xB0, 0xB8, 0x3B, 0x55, 0xC1, 0xB5, 0xDF, 0xE9, 0x4E, 0x06, 0xB0, 0xAB, 0x35, 0xC0, 0x9B, 0x7C, 0xC8, 0x7D, 0xE0, 0xE1, 0xE1, 0x8B, 0x4E, 0x8A, 0x4C, 0xE6, 0x4C, 0xEA, 0x97, 0xAB, 0x80, 0x0A, 0x66, 0x39, 0x26, 0xC2, 0xEA, 0x3D, 0xDA, 0xF4, 0x00, 0x2F, 0xB6, 0x02, 0xB1, 0x00, 0x9B, 0x23, 0x19, 0xF5, 0x74, 0x62, 0xD6, 0xF4, 0x0D, 0x09, 0x14, 0x41, 0xB7, 0x70, 0xFF, 0xC9, 0x51, 0x38, 0xE3, 0x86, 0x2F, 0xBC, 0xE7, 0x1A, 0x75, 0x5C, 0x78, 0xAB, 0x51, 0xD9, 0xC3, 0x98, 0x05, 0x10, 0xCF, 0xA4, 0xFC, 0x3C, 0xBD, 0xFC, 0x8C, 0x89, 0xC5, 0xAD, 0xBF, 0x98, 0xED, 0xD6, 0x31, 0xC6, 0x8C, 0xB9, 0x85, 0x01, 0xE3, 0xAD, 0x6C, 0x53, 0x26, 0x22, 0x38, 0xCA, 0xDB, 0x3A, 0x1C, 0xC5, 0xF6, 0xBC, 0x77, 0x11, 0xF6, 0x34, 0x33, 0xDE, 0xBC, 0x28, 0xA7, 0x0F, 0x9E, 0x1F, 0xF1, 0x2E, 0x8C, 0x55, 0xE1, 0x39, 0x89, 0x97, 0x40, 0x35, 0x93, 0x32, 0x37, 0xE2, 0x69, 0x0B, 0x28, 0x21, 0x36, 0x90, 0x0B, 0xB0, 0x00, 0x54, 0x01, 0xA3, 0x5C, 0x37, 0x9A, 0xDA, 0xDC, 0x63, 0x67, 0x2C, 0xA9, 0x3A, 0xF3, 0x5C, 0xFA, 0x71, 0xDF, 0xCF, 0x82, 0x0E, 0x29, 0x5A, 0x70, 0x1D, 0x59, 0xD0, 0xBB, 0xF3, 0xF5, 0x4C, 0xE0, 0x0C, 0x77, 0xEA, 0x02, 0xF4, 0xC8, 0xFA, 0x9B, 0xFB, 0x00, 0x93, 0xBA, 0x3A, 0x5E, 0xAD, 0x93, 0x76, 0x1D, 0x3F, 0xC8, 0x51, 0x1E, 0x43, 0x80, 0x5C, 0x40, 0x17, 0x3F, 0xF4, 0xBE, 0x96, 0xA4, 0xCC, 0xB3, 0x3F, 0x3D, 0x12, 0xA7, 0x3D, 0xAA, 0x4E, 0x61, 0x06, 0xC3, 0xC3, 0x5A, 0x51, 0xEB, 0xD3, 0xE6, 0x34, 0xEB, 0x16, 0xFE, 0xCF, 0x36, 0x02, 0x34, 0x02, 0xD6, 0xF1, 0x03, 0x4D, 0x5D, 0x57, 0x9B, 0x28, 0x60, 0x17, 0x2F, 0xC3, 0x06, 0x52, 0x80, 0x4A, 0x2A, 0xC0, 0x7B, 0x62, 0x06, 0xF9, 0x62, 0xCD, 0x3E, 0xA5, 0xF9, 0x04, 0x8B, 0xE0, 0x76, 0x87, 0x35, 0xB2, 0x54, 0x27, 0x71, 0x7D, 0xE5, 0xAC, 0x6D, 0x98, 0x96, 0x78, 0x73, 0x95, 0xE5, 0x58, 0x8A, 0x1A, 0xEF, 0x05, 0x66, 0xA3, 0x31, 0xE3, 0x08, 0x9F, 0x81, 0x37, 0x55, 0xC7, 0x0E, 0x23, 0x1F, 0x3A, 0x77, 0x97, 0xCD, 0x26, 0x97, 0x7E, 0x2A, 0xF7, 0xCF, 0x76, 0xAE, 0xE4, 0xC7, 0x05, 0x62, 0xF3, 0xD6, 0x55, 0x3C, 0x82, 0xCA, 0x8B, 0x78, 0xDA, 0x7C, 0x3E, 0x9E, 0x19, 0x4E, 0x7D, 0x9D, 0x09, 0x2C, 0xB9, 0x11, 0xAC, 0x14, 0x1E, 0x29, 0x81, 0xFD, 0x83, 0x1F, 0xB2, 0x80, 0x5E, 0x2F, 0x6A, 0x5E, 0x34, 0x68, 0x7E, 0xB2, 0x20, 0xAC, 0xAE, 0x13, 0x33, 0xC1, 0x5A, 0xA6, 0x58, 0x33, 0x86, 0x65, 0x93, 0x6A, 0x8C, 0x1A, 0xC9, 0x5D, 0x9D, 0x0E, 0x6E, 0xAF, 0x24, 0x6F, 0xB1, 0x79, 0x1C, 0x19, 0xF7, 0xC9, 0xB2, 0xDB, 0x63, 0x67, 0xE6, 0xF9, 0xFA, 0x4C, 0xB8, 0xF0, 0xCB, 0x79, 0xC4, 0x65, 0xDE, 0xEB, 0x9C, 0x0A, 0xA0, 0xEF, 0xE3, 0xDB, 0xD1, 0x89, 0x23, 0xE3, 0x96, 0x94, 0x18, 0x8F, 0x38, 0x6C, 0xCA, 0x10, 0xDD, 0x0A, 0x40, 0x92, 0x89, 0xCF, 0x01, 0x4C, 0x82, 0xF6, 0x8E, 0xC9, 0x20, 0x67, 0xB0, 0x82, 0x19, 0xB3, 0x94, 0x36, 0x5B, 0x99, 0xAF, 0xFB, 0x43, 0xE0, 0xCC, 0x64, 0xF9, 0x51, 0x52, 0x66, 0x4F, 0x44, 0x1E, 0x68, 0x82, 0x3F, 0xEB, 0x7C, 0x7F, 0x26, 0x0B, 0x28, 0x9F, 0x98, 0x29, 0x44, 0x7E, 0xAD, 0x99, 0x14, 0xBD, 0xCF, 0xCD, 0x1D, 0x4C, 0x63, 0xEF, 0xDF, 0x47, 0x49, 0x37, 0xA4, 0xA3, 0x63, 0x2F, 0x2A, 0xE2, 0xB3, 0x17, 0xF5, 0xA4, 0xFC, 0x68, 0x53, 0x66, 0x5D, 0xC7, 0x9B, 0xA3, 0x26, 0xCB, 0x7F, 0x1E, 0x4B, 0xCD, 0xE7, 0x58, 0x22, 0x74, 0x3E, 0xA3, 0x6E, 0xB6, 0x9D, 0x1C, 0x51, 0x3A, 0x8E, 0xCB, 0xA7, 0x40, 0x02, 0x30, 0x05, 0xDC, 0x09, 0xC3, 0x29, 0x6A, 0x78, 0x9F, 0x3A, 0x2F, 0x43, 0xEE, 0xD5, 0x94, 0xB3, 0x6E, 0xA1, 0x10, 0x3A, 0x1F, 0x39, 0x38, 0x98, 0xE3, 0xCC, 0x71, 0xB6, 0x0B, 0x88, 0x00, 0x8A, 0x32, 0xF9, 0x5A, 0xC0, 0xDE, 0x80, 0x14, 0xE0, 0x06, 0x04, 0x87, 0xDB, 0xB2, 0x89, 0x99, 0x3D, 0x56, 0xD4, 0xBA, 0x14, 0x06, 0xDE, 0x2D, 0xF3, 0x22, 0x77, 0x08, 0x0B, 0x37, 0x88, 0xCD, 0x47, 0xEB, 0x56, 0xF6, 0xE3, 0x9C, 0xE2, 0x9E, 0x77, 0x9C, 0x25, 0x6F, 0x41, 0x25, 0xBC, 0x87, 0xF0, 0x26, 0xB0, 0x14, 0x47, 0x6E, 0x6C, 0xA3, 0xFC, 0xC3, 0x9E, 0xFE, 0xED, 0x27, 0x1D, 0xBD, 0x05, 0x10, 0xE5, 0xA6, 0xBC, 0x31, 0x7F, 0x7D, 0x9C, 0x33, 0x1A, 0x50, 0x1E, 0xC5, 0x06, 0x8A, 0x67, 0x2E, 0x1B, 0x6F, 0x5C, 0xEE, 0x88, 0x70, 0x80, 0x51, 0xFF, 0x47, 0x74, 0x8B, 0xD1, 0x2D, 0xEE, 0x84, 0x35, 0x27, 0xBC, 0xBD, 0x09, 0xF9, 0xFF, 0xCC, 0x81, 0x14, 0xA0, 0x37, 0x15, 0xF1, 0x04, 0x94, 0x48, 0x01, 0xA0, 0x36, 0xDE, 0xC2, 0x28, 0x77, 0x64, 0x3E, 0xC6, 0xA6, 0x12, 0xC9, 0xBC, 0xF7, 0xAA, 0x27, 0x0F, 0xB2, 0xA5, 0x21, 0x51, 0x19, 0x3D, 0x35, 0xE2, 0xF7, 0xB3, 0x5E, 0x5F, 0x3F, 0xCD, 0x9D, 0xD7, 0xAD, 0xB5, 0x6E, 0x31, 0xA2, 0x41, 0x91, 0xF1, 0xEB, 0x76, 0x32, 0xFD, 0x3F, 0xF2, 0xB8, 0xB5, 0x46, 0x03, 0x59, 0xAF, 0x97, 0xC3, 0xF6, 0xB7, 0xA3, 0xA5, 0xF7, 0xAB, 0xC5, 0x25, 0x61, 0xCF, 0xD1, 0xFC, 0xB2, 0x2D, 0xA7, 0xF8, 0x57, 0xFA, 0xBA, 0xD0, 0xDB, 0x79, 0x6E, 0xB7, 0x5E, 0xDD, 0x20, 0xCE, 0xFC, 0x77, 0x6F, 0x20, 0x1A, 0xF0, 0x02, 0xE4, 0x98, 0x15, 0x01, 0x52, 0x9F, 0xAD, 0x7A, 0x9D, 0xA8, 0x61, 0x9A, 0x61, 0x35, 0x8A, 0x2D, 0xBE, 0x2C, 0x95, 0xFD, 0xC8, 0xDD, 0x16, 0x63, 0x4F, 0x29, 0x68, 0x8D, 0xEB, 0x32, 0xAD, 0xF1, 0xDE, 0x55, 0xE7, 0x96, 0xEB, 0x47, 0x9B, 0xA7, 0xE6, 0xD3, 0x36, 0xB0, 0x65, 0x5C, 0x2E, 0x5E, 0x95, 0x67, 0xF4, 0xEA, 0x0A, 0x20, 0x05, 0xE8, 0x07, 0x8A, 0x88, 0xDE, 0x87, 0x74, 0xE7, 0x6C, 0xE5, 0x10, 0x0E, 0x18, 0x03, 0xBB, 0x8E, 0x97, 0xDE, 0xE3, 0xF7, 0x88, 0xDD, 0x37, 0xB6, 0x6E, 0x05, 0xDA, 0xA9, 0xAF, 0xD8, 0xAC, 0x1A, 0x18, 0xD1, 0x02, 0xC2, 0x00, 0x27, 0x44, 0x70, 0x4A, 0x04, 0x20, 0x84, 0x29, 0x4F, 0xD9, 0x13, 0xB5, 0xFC, 0xED, 0xEF, 0x98, 0xEB, 0x44, 0x0D, 0x7B, 0x05, 0xDB, 0xEF, 0xAD, 0x2D, 0x54, 0x1B, 0xB6, 0xC6, 0xE2, 0xF0, 0x91, 0xB5, 0x1E, 0xB9, 0xFB, 0xCD, 0xB9, 0x95, 0xC9, 0x6A, 0xAE, 0xD7, 0x6D, 0xA5, 0x36, 0x10, 0x06, 0x6C, 0x86, 0xCB, 0xEA, 0x6D, 0x64, 0xA4, 0x8B, 0x70, 0xA0, 0x8C, 0x41, 0xB8, 0xFB, 0x34, 0x78, 0xE4, 0x00, 0x6B, 0x11, 0xFB, 0xDD, 0x3B, 0xDC, 0x3D, 0x45, 0x0B, 0xA3, 0x65, 0x4F, 0xF0, 0xC6, 0x1A, 0x9F, 0xA8, 0xA9, 0xB7, 0x35, 0xC0, 0xA6, 0xFD, 0xCD, 0xC7, 0xBA, 0xD2, 0x17, 0xA0, 0xC1, 0x17, 0x1D, 0x50, 0xBE, 0xA1, 0x88, 0xEE, 0xB1, 0x92, 0x9C, 0xA8, 0x15, 0xF6, 0xB1, 0xCD, 0x71, 0x11, 0x2F, 0x61, 0x6D, 0xB6, 0x41, 0xB2, 0x4F, 0x63, 0x6F, 0xF9, 0x46, 0x52, 0x70, 0xFF, 0x10, 0xA1, 0x31, 0x5E, 0xF1, 0x6F, 0x05, 0x86, 0xCE, 0x85, 0xF3, 0x6D, 0x91, 0xB7, 0xF5, 0xB4, 0x64, 0x3B, 0x75, 0xEA, 0xCD, 0x00, 0xE5, 0x71, 0xCF, 0x29, 0x42, 0x89, 0x31, 0xCC, 0x9D, 0x8B, 0xF1, 0xF4, 0x84, 0x9A, 0x04, 0xF8, 0x05, 0x64, 0x01, 0x31, 0x9D, 0x67, 0x74, 0x52, 0xB2, 0x9F, 0xF2, 0x64, 0x1B, 0x23, 0x79, 0xE0, 0xA6, 0xD7, 0xAE, 0x0D, 0x1C, 0x53, 0x01, 0x01, 0x7A, 0xBD, 0xE9, 0x90, 0xE7, 0xCA, 0x0E, 0xC0, 0x1C, 0x58, 0x06, 0xEC, 0xE2, 0x29, 0x32, 0x51, 0x6B, 0x96, 0x34, 0xC1, 0x36, 0x67, 0x67, 0xB0, 0xD2, 0x2F, 0x50, 0xD0, 0x90, 0xC1, 0xD6, 0x15, 0xD3, 0x68, 0x4C, 0x28, 0x94, 0xD9, 0x8C, 0xAD, 0x57, 0x4C, 0x8B, 0xEB, 0x48, 0xBC, 0xE5, 0xB8, 0x9F, 0xA6, 0x03, 0x36, 0xE6, 0x18, 0x54, 0xCA, 0x4E, 0x07, 0xCF, 0xD9, 0x42, 0x62, 0x94, 0xBF, 0xFD, 0x93, 0xE4, 0x6D, 0x6B, 0x5C, 0x1B, 0x90, 0x00, 0x76, 0x8E, 0x2A, 0x80, 0x23, 0x9F, 0xF7, 0x95, 0xDE, 0xE5, 0x01, 0x17, 0x04, 0xBA, 0x28, 0x25, 0x72, 0x90, 0xA8, 0x73, 0x09, 0x17, 0xC7, 0xDF, 0x6B, 0xF5, 0xDB, 0x49, 0xDB, 0x0B, 0x88, 0x0D, 0x98, 0x00, 0x5B, 0x70, 0x66, 0x15, 0x8F, 0x98, 0xD9, 0x77, 0xB2, 0xD3, 0x82, 0xCB, 0x42, 0x17, 0x6C, 0xC0, 0xAE, 0x71, 0xE4, 0xDB, 0x48, 0x0C, 0xDA, 0xCA, 0xD5, 0x4C, 0xD1, 0xFF, 0xD2, 0x7F, 0x70, 0x7B, 0x1A, 0x8E, 0xD7, 0xFE, 0x14, 0xFE, 0x7B, 0xDF, 0xB2, 0x7C, 0x64, 0x5A, 0x5D, 0xFB, 0xDA, 0x7D, 0x6C, 0x1E, 0x8F, 0x95, 0xFB, 0xD8, 0x94, 0xE6, 0x6B, 0x43, 0xBB, 0xFA, 0xFA, 0x4F, 0x08, 0xB5, 0xCA, 0x79, 0xE8, 0x1D, 0xFB, 0xE5, 0xA9, 0x45, 0xE9, 0xC2, 0x91, 0xD8, 0x33, 0xA4, 0xEB, 0xB8, 0xF6, 0xD5, 0x94, 0x9D, 0xD2, 0x33, 0x70, 0x44, 0x59, 0xDD, 0x40, 0xD7, 0xAC, 0xA5, 0x11, 0xC9, 0x5C, 0x8C, 0x64, 0x12, 0x0E, 0xAC, 0xF5, 0x51, 0x38, 0x04, 0xF0, 0x4D, 0x71, 0xC1, 0x27, 0x68, 0x9B, 0x16, 0x01, 0x8E, 0xB4, 0x98, 0x4C, 0xE4, 0xF4, 0x2E, 0xC1, 0xDD, 0xD7, 0x12, 0x21, 0xDC, 0x6F, 0xCB, 0x94, 0xBD, 0x6A, 0xBA, 0x85, 0xBC, 0xBE, 0x90, 0x1C, 0x0E, 0x91, 0xEB, 0x0E, 0x7B, 0x7E, 0x2F, 0x48, 0x4F, 0xE4, 0xA3, 0x88, 0x91, 0xB4, 0xBC, 0xAD, 0x7B, 0xA6, 0xEF, 0x42, 0x8E, 0x46, 0x7F, 0xEE, 0xE5, 0xA5, 0xE3, 0xEB, 0xCB, 0xD8, 0xCD, 0x45, 0x5E, 0x40, 0x2C, 0x40, 0x1A, 0x78, 0xBC, 0x59, 0xC6, 0x1F, 0x57, 0x15, 0x2F, 0xDA, 0x3E, 0x73, 0x98, 0x98, 0x6C, 0xAC, 0x31, 0x16, 0xE3, 0xE2, 0xDD, 0xA7, 0x17, 0xF4, 0x4C, 0x81, 0x7A, 0x80, 0x17, 0x7B, 0x03, 0xEE, 0x80, 0x2A, 0x70, 0x2A, 0x1C, 0x75, 0x82, 0x06, 0xC9, 0x31, 0x4C, 0x19, 0xB4, 0xCD, 0x15, 0xCC, 0x7E, 0x76, 0x08, 0x52, 0x98, 0xE4, 0x5F, 0x8E, 0xDD, 0xAF, 0x4A, 0xEE, 0xAA, 0xBF, 0x19, 0xF1, 0xF6, 0x03, 0x94, 0xE4, 0xB9, 0xAB, 0x8C, 0xE0, 0x0F, 0xE4, 0x0F, 0x79, 0xFC, 0x6D, 0xBB, 0x71, 0x8A, 0x8E, 0x97, 0x8B, 0xBF, 0xB7, 0x6B, 0xAB, 0xEB, 0x9F, 0x22, 0x3C, 0x73, 0xE2, 0x43, 0x15, 0x15, 0x69, 0x0E, 0x3F, 0x58, 0x01, 0x75, 0x6C, 0x8C, 0xAF, 0xEA, 0x26, 0x71, 0xBA, 0xC8, 0x75, 0xDE, 0x34, 0x99, 0x38, 0xD2, 0xD1, 0x12, 0xA0, 0xA6, 0xE1, 0xC6, 0x2C, 0xFB, 0x04, 0xD0, 0x06, 0x36, 0xAF, 0xD9, 0x24, 0x4C, 0x80, 0xD0, 0xB7, 0x49, 0x7B, 0x87, 0x62, 0x11, 0xC8, 0xAA, 0xB2, 0xDD, 0xFD, 0x9B, 0xCA, 0x6E, 0xC1, 0x34, 0x37, 0x45, 0xB9, 0x3B, 0x98, 0xBC, 0xFD, 0x08, 0x5B, 0x65, 0xD8, 0xD3, 0x55, 0x30, 0xF6, 0xC7, 0x8F, 0xBA, 0xEE, 0xC2, 0x1D, 0xB1, 0x30, 0x20, 0xA6, 0x47, 0xE7, 0x0F, 0x0B, 0x47, 0x7D, 0x72, 0x12, 0x3C, 0x81, 0x39, 0x6A, 0x6E, 0xDF, 0x9E, 0x9D, 0xF7, 0xE9, 0xE8, 0x64, 0xC0, 0xB6, 0xF9, 0x5E, 0x00, 0x33, 0x60, 0x66, 0x39, 0x3D, 0x97, 0x69, 0xC6, 0x9B, 0x57, 0xEF, 0x45, 0x39, 0x53, 0x78, 0xAF, 0x68, 0xC0, 0x3F, 0x2D, 0xA8, 0x37, 0x11, 0x4E, 0x2C, 0x40, 0x85, 0x57, 0x79, 0x02, 0x2E, 0x40, 0x8E, 0xD7, 0xE5, 0x19, 0x6A, 0x86, 0x0C, 0x83, 0xB6, 0xE4, 0xFC, 0xBC, 0x6E, 0x3D, 0x99, 0x96, 0x19, 0x6B, 0x48, 0x13, 0x22, 0x67, 0x29, 0x74, 0xC2, 0x28, 0xCE, 0x99, 0x30, 0x47, 0x23, 0x0A, 0x58, 0xD7, 0xDE, 0x81, 0x22, 0x4B, 0xDF, 0x64, 0x5B, 0xE3, 0xBC, 0x9E, 0xD9, 0x68, 0x73, 0x7B, 0x50, 0xE5, 0x1B, 0xF6, 0xD1, 0xED, 0x85, 0x33, 0xCD, 0x4A, 0x5E, 0xD0, 0xC6, 0xFF, 0xB7, 0x01, 0xDB, 0x40, 0x12, 0xB3, 0xCF, 0xD5, 0x75, 0xEC, 0x16, 0x4E, 0xDA, 0xB1, 0x2B, 0xD3, 0xFA, 0xEC, 0x54, 0x71, 0xC6, 0x98, 0x25, 0xB2, 0x6A, 0xD4, 0x04, 0xCB, 0x4F, 0x9B, 0xE4, 0x22, 0x07, 0x54, 0x01, 0x27, 0x72, 0x01, 0x2D, 0x5C, 0x77, 0x3A, 0xA0, 0x09, 0x78, 0x4C, 0xD0, 0x28, 0x06, 0x2D, 0xC5, 0x85, 0xB9, 0x1A, 0xB7, 0x93, 0xDC, 0x8F, 0x34, 0xE4, 0x9D, 0x48, 0x2D, 0x17, 0x6C, 0x25, 0x64, 0xD9, 0x4D, 0x10, 0x10, 0x7D, 0x7D, 0x39, 0xEA, 0x07, 0x5D, 0x7F, 0xB9, 0xC8, 0x45, 0xF1, 0x82, 0x2A, 0x90, 0x1C, 0x09, 0x84, 0x31, 0x0B, 0xEA, 0xB5, 0xBC, 0x3F, 0xDB, 0x02, 0x34, 0x80, 0xF1, 0xD7, 0x98, 0x6D, 0x0D, 0x4F, 0xC4, 0x33, 0x36, 0xB0, 0xFD, 0xF6, 0x96, 0xEA, 0x51, 0x88, 0x46, 0xED, 0x38, 0xC2, 0xE2, 0x66, 0xFA, 0x68, 0x30, 0xFF, 0x53, 0x94, 0xEB, 0x78, 0x66, 0x3D, 0xAA, 0x4F, 0x82, 0xE3, 0x5B, 0xBF, 0x1E, 0x4A, 0x24, 0xE0, 0x01, 0x28, 0x21, 0xC4, 0x54, 0xD6, 0xCB, 0x9E, 0x98, 0x05, 0xDD, 0xED, 0x0B, 0xD9, 0x84, 0x53, 0x92, 0x2D, 0x98, 0x5E, 0x76, 0x34, 0xC4, 0x74, 0x7E, 0xFD, 0x6B, 0x07, 0xA4, 0x52, 0xDF, 0x3F, 0xD1, 0xD1, 0x3E, 0x5E, 0xB7, 0x72, 0x57, 0x49, 0x82, 0xDA, 0x37, 0xEE, 0x29, 0x12, 0x9C, 0x01, 0x4C, 0xED, 0x43, 0x6F, 0x5E, 0x02, 0xFB, 0x7A, 0xE1, 0xC8, 0xC1, 0x5E, 0xC0, 0x0A, 0x6E, 0xAD, 0xF4, 0x9B, 0xC0, 0x13, 0x9F, 0xED, 0x51, 0x51, 0xE0, 0xD8, 0xCA, 0x53, 0x0A, 0x76, 0x8A, 0x72, 0xBB, 0xB9, 0xF0, 0x57, 0xEA, 0x29, 0x94, 0xBA, 0x47, 0xE3, 0xDE, 0xB3, 0xB9, 0xEB, 0xD3, 0x41, 0x11, 0x70, 0x01, 0x62, 0x03, 0x1E, 0x80, 0x29, 0xA0, 0xFD, 0xF7, 0xB3, 0xB8, 0xC5, 0x8B, 0x71, 0xDB, 0xD3, 0xE4, 0xEB, 0x02, 0x36, 0xF0, 0x3A, 0x05, 0xE8, 0xBD, 0x1D, 0xC5, 0xE2, 0xEE, 0xBF, 0xC9, 0x65, 0xDE, 0xEE, 0x34, 0x78, 0xAA, 0x4F, 0xDA, 0x04, 0xAF, 0x3F, 0xFE, 0xF5, 0x1E, 0xBB, 0xD0, 0x27, 0xF3, 0x76, 0xFA, 0x78, 0x52, 0x6A, 0x33, 0x3B, 0xFB, 0x3B, 0xC2, 0x1B, 0x71, 0xD7, 0xDD, 0x3A, 0x9A, 0xCB, 0x17, 0xA7, 0xFC, 0xE0, 0x0B, 0xA8, 0x0D, 0xF4, 0xCC, 0x11, 0x78, 0x51, 0x8E, 0xF1, 0x66, 0x15, 0xC7, 0x52, 0xFD, 0x29, 0x3D, 0xE5, 0x08, 0x41, 0x51, 0x4C, 0x6F, 0xEC, 0xF6, 0x61, 0xC9, 0x5E, 0x4C, 0x5B, 0x73, 0xA0, 0x14, 0x68, 0x66, 0xA8, 0x6D, 0x05, 0xB4, 0x80, 0xDC, 0x84, 0x33, 0x6D, 0xED, 0x8C, 0xB3, 0x42, 0xCA, 0xE6, 0xCF, 0x4D, 0xE8, 0x37, 0x63, 0x48, 0xA8, 0x08, 0x78, 0x0C, 0xA8, 0x85, 0xB0, 0xE3, 0x66, 0xC3, 0xB4, 0xB1, 0xD9, 0x00, 0x59, 0xB0, 0x20, 0xD0, 0x5B, 0x84, 0xF7, 0x16, 0x46, 0x4D, 0xF0, 0xBE, 0xB3, 0x2E, 0xAB, 0xDB, 0x4C, 0x8C, 0xB5, 0x21, 0x08, 0xDA, 0xD3, 0x37, 0x57, 0xD6, 0xDB, 0xB3, 0x63, 0x12, 0x1C, 0x32, 0xDE, 0x4A, 0xCF, 0xD5, 0x80, 0x2C, 0xC2, 0x80, 0x4C, 0xBE, 0xEF, 0x58, 0x5C, 0xCC, 0x96, 0xD5, 0x4C, 0x12, 0xE7, 0x1E, 0x6F, 0xAF, 0x99, 0x89, 0x72, 0x12, 0xB4, 0x67, 0x4A, 0xB4, 0x01, 0x37, 0xC0, 0x0A, 0xD8, 0x1F, 0x4F, 0x13, 0x33, 0x20, 0x16, 0xCF, 0xD4, 0x89, 0x5A, 0x23, 0x45, 0x66, 0xEE, 0x99, 0x3B, 0xB9, 0xC6, 0xDF, 0x98, 0x7C, 0xD3, 0x4E, 0xD9, 0x37, 0xC4, 0xB6, 0xC9, 0xFB, 0x12, 0x93, 0x71, 0x80, 0x79, 0x73, 0x12, 0xEC, 0x76, 0xA9, 0xDC, 0x75, 0xCA, 0x07, 0x4E, 0x69, 0x49, 0x4D, 0x3D, 0x17, 0x2F, 0x33, 0xBD, 0xED, 0x2D, 0xEC, 0x54, 0xDD, 0xF5, 0xD7, 0xB2, 0xFD, 0x5A, 0xE7, 0xDE, 0x7A, 0x69, 0x2B, 0x20, 0xD6, 0x05, 0xC7, 0xD8, 0x34, 0x6F, 0x9C, 0xC7, 0x9D, 0xFA, 0x98, 0xC2, 0x4E, 0x95, 0xC5, 0xC8, 0x9D, 0x4C, 0x7B, 0x16, 0xEA, 0x48, 0x7A, 0xB2, 0xF3, 0xC3, 0x21, 0x26, 0xEF, 0x02, 0x74, 0x11, 0x02, 0x48, 0xBC, 0xB0, 0x49, 0x9E, 0x9E, 0xA1, 0x36, 0x9E, 0xDE, 0xD6, 0x5C, 0xB1, 0x4F, 0xC9, 0x86, 0xF2, 0x39, 0x5E, 0xD8, 0xC9, 0xD0, 0x60, 0x85, 0x65, 0x20, 0x89, 0x51, 0x50, 0xB9, 0xE8, 0xB3, 0x8C, 0xCA, 0x8F, 0x7F, 0x9A, 0xD7, 0x7C, 0xA6, 0xA9, 0x84, 0x15, 0x60, 0xF7, 0xAC, 0x75, 0x9E, 0xB5, 0x67, 0x8E, 0x3F, 0xEA, 0xCC, 0x23, 0x12, 0xF0, 0x0D, 0xEC, 0xC9, 0xB1, 0x52, 0x26, 0xBD, 0x11, 0x3B, 0x01, 0x0D, 0xC0, 0x9E, 0xCE, 0xB1, 0x31, 0x8F, 0x6E, 0x9F, 0x2F, 0x8B, 0xC1, 0x5B, 0xC7, 0xB9, 0x28, 0x9F, 0xAB, 0x3D, 0xFF, 0x2A, 0x7F, 0x66, 0x13, 0xD1, 0x81, 0x34, 0x22, 0x00, 0x27, 0x64, 0x8F, 0xAF, 0x0C, 0x8E, 0xF6, 0x02, 0xDA, 0x27, 0x6A, 0x1B, 0xC6, 0x55, 0xB2, 0x26, 0x6A, 0xDC, 0x60, 0xCE, 0xA7, 0x8F, 0xB1, 0x78, 0x23, 0x6A, 0xED, 0xF0, 0xB0, 0x87, 0x11, 0x51, 0xD9, 0x37, 0x69, 0x48, 0xEC, 0xE3, 0x0B, 0xA9, 0xEB, 0xCD, 0xBB, 0xD1, 0x99, 0xAE, 0xDD, 0x34, 0x02, 0xE6, 0x3D, 0xDE, 0xEE, 0x9A, 0x1A, 0xD3, 0x09, 0x06, 0xD8, 0x7B, 0x5C, 0x40, 0x19, 0xA7, 0x06, 0xD6, 0x04, 0xAF, 0x01, 0x21, 0x9A, 0x6F, 0x0F, 0xB9, 0x25, 0xB7, 0xA2, 0xA7, 0x63, 0x72, 0xCF, 0xDE, 0x14, 0xC3, 0x25, 0xDC, 0x6C, 0x97, 0x09, 0x09, 0x6F, 0xBF, 0xAA, 0x40, 0x3B, 0x51, 0x40, 0x06, 0xA0, 0x09, 0xAC, 0x06, 0x74, 0x92, 0xCE, 0xCF, 0x58, 0x13, 0x44, 0xC6, 0xE4, 0x77, 0xAB, 0x6C, 0x73, 0x16, 0x37, 0x1A, 0xB2, 0x45, 0x5B, 0xF0, 0xC0, 0x14, 0x83, 0xBC, 0xF2, 0xC3, 0xD8, 0xDB, 0xF1, 0x33, 0xBC, 0x65, 0x3E, 0x57, 0x2F, 0xDB, 0x9C, 0x50, 0x9C, 0x4B, 0xB2, 0x6F, 0x33, 0x71, 0x7E, 0xB2, 0xE9, 0xFB, 0x31, 0x2B, 0x76, 0x47, 0x08, 0x27, 0xB7, 0x76, 0xBC, 0x7B, 0xA7, 0x4E, 0x59, 0xDF, 0xA6, 0x4E, 0x95, 0x38, 0x5A, 0x01, 0xEC, 0xBE, 0x32, 0x12, 0xE6, 0x21, 0xA7, 0x35, 0xDE, 0xF1, 0x7C, 0xD7, 0x60, 0x0C, 0x04, 0x61, 0x32, 0x06, 0xD4, 0xE2, 0x94, 0x48, 0x6D, 0xEE, 0xC8, 0xED, 0x06, 0x32, 0x80, 0xDE, 0x40, 0x39, 0x90, 0x1B, 0x08, 0x03, 0xAA, 0xC6, 0x8D, 0x7C, 0x82, 0xC6, 0x19, 0x6B, 0xC1, 0x32, 0x61, 0xED, 0xFC, 0x05, 0x54, 0xF5, 0xE6, 0xDD, 0xC2, 0xE8, 0x1C, 0x0B, 0xA8, 0xBD, 0x71, 0x99, 0x25, 0x82, 0xB6, 0xBF, 0x95, 0xC5, 0xD7, 0xF7, 0x18, 0xB7, 0x25, 0xE5, 0xAA, 0xDC, 0x00, 0x9B, 0x8E, 0x9B, 0xFB, 0x4A, 0x5B, 0xF3, 0xB4, 0x58, 0x98, 0x5F, 0xF4, 0x49, 0xD7, 0x15, 0x05, 0x56, 0xBD, 0x21, 0x9C, 0x34, 0xC9, 0x54, 0x20, 0x1A, 0xF0, 0xE9, 0x33, 0xFE, 0xF6, 0x67, 0x48, 0x4E, 0x91, 0xFD, 0xD8, 0x7F, 0xC5, 0xE8, 0x1B, 0xB3, 0x6F, 0x3D, 0x1B, 0x58, 0x02, 0xCC, 0xD8, 0x5A, 0x0A, 0x44, 0x12, 0x05, 0x58, 0x00, 0x8B, 0x63, 0x32, 0xE7, 0xCC, 0x3D, 0xBE, 0x33, 0x13, 0x34, 0xC3, 0xC4, 0x89, 0x1D, 0x66, 0x65, 0x33, 0x05, 0x2D, 0x8D, 0x41, 0xA3, 0x8C, 0xB9, 0x8D, 0x77, 0x6D, 0xA5, 0x66, 0x27, 0x74, 0x48, 0x78, 0x0D, 0x48, 0x2D, 0x3F, 0x9B, 0xC5, 0x39, 0x79, 0x69, 0x7E, 0xDB, 0x2D, 0xCC, 0x92, 0x7B, 0x56, 0xA4, 0x7E, 0x9E, 0x01, 0xEE, 0xB7, 0xF9, 0x3D, 0xE5, 0x9C, 0x59, 0x52, 0x62, 0x0F, 0xE8, 0x31, 0xE5, 0xDB, 0xFE, 0x62, 0x05, 0x10, 0x7D, 0x16, 0x22, 0x14, 0x13, 0x66, 0xB7, 0x7E, 0xDC, 0xE3, 0x26, 0x7D, 0x65, 0x7D, 0x76, 0x16, 0x38, 0x81, 0x5A, 0x33, 0xE0, 0x16, 0x90, 0x03, 0x07, 0xBC, 0x00, 0x71, 0x60, 0xCE, 0x94, 0xD9, 0x2C, 0xF6, 0x09, 0x9A, 0xB3, 0x7F, 0x61, 0x60, 0xED, 0xE0, 0x08, 0xDA, 0x4E, 0x81, 0x29, 0x6F, 0x26, 0x04, 0x61, 0x4D, 0x24, 0x5A, 0xA5, 0xB3, 0x45, 0xEB, 0xE6, 0x8A, 0xFD, 0xD5, 0x86, 0x7C, 0x5D, 0xA9, 0x7B, 0x4F, 0x51, 0xAE, 0xFE, 0x39, 0x3E, 0x52, 0xD8, 0x98, 0xA0, 0x4D, 0xBF, 0xE2, 0x79, 0x54, 0xC6, 0xF8, 0x25, 0x40, 0x65, 0x23, 0xB8, 0x6A, 0xC4, 0xAD, 0x98, 0xBD, 0x76, 0x01, 0x53, 0xC0, 0x85, 0x50, 0xC6, 0x35, 0x47, 0x1B, 0x9A, 0xA6, 0x40, 0x53, 0x4D, 0x77, 0xF7, 0x48, 0xCF, 0x16, 0xB2, 0xF3, 0x28, 0xFE, 0x8C, 0xBF, 0x72, 0x0A, 0x45, 0x80, 0x08, 0x20, 0x9D, 0xD8, 0x80, 0x1B, 0x60, 0x01, 0xC4, 0x35, 0x79, 0x42, 0xD0, 0x02, 0x4F, 0x1E, 0x45, 0xAA, 0xF2, 0x5E, 0xB8, 0x7D, 0xD9, 0xD6, 0x67, 0x9B, 0x4A, 0x56, 0xE3, 0x46, 0xB5, 0x59, 0xCA, 0x8E, 0x44, 0x48, 0xFD, 0x5E, 0x9E, 0xFE, 0xD6, 0xC8, 0x62, 0x45, 0xCA, 0x02, 0x58, 0x96, 0x45, 0x4F, 0x82, 0x55, 0x5F, 0x41, 0xCD, 0x4F, 0x6E, 0xA7, 0x5C, 0x23, 0x89, 0xE6, 0x82, 0x1D, 0xB7, 0x98, 0x67, 0x73, 0x25, 0x16, 0xB0, 0x13, 0xD0, 0x00, 0x78, 0x0F, 0xE5, 0xD1, 0xFE, 0xD3, 0x57, 0x8F, 0xA3, 0x21, 0x07, 0xD5, 0xD4, 0x53, 0xD5, 0x6C, 0xF1, 0x71, 0xAA, 0x2E, 0x33, 0xC5, 0x0F, 0x6E, 0xCA, 0x36, 0x6D, 0xCB, 0x16, 0x90, 0x49, 0x38, 0xE0, 0x4D, 0x08, 0x90, 0xD8, 0x21, 0xBC, 0xF7, 0xB4, 0x64, 0x9E, 0xFF, 0x46, 0xDD, 0x48, 0x3F, 0xED, 0xC5, 0x3D, 0xC7, 0x1B, 0xB0, 0x21, 0x46, 0x76, 0x37, 0x9D, 0xFB, 0xFC, 0xF8, 0x80, 0x61, 0x37, 0x0E, 0xF4, 0xF8, 0x98, 0x42, 0xB6, 0xDF, 0x7A, 0x68, 0x63, 0xD1, 0xF2, 0x3E, 0x36, 0x79, 0x7B, 0x5D, 0xD5, 0x61, 0x7A, 0x11, 0x8D, 0x36, 0x3D, 0xD9, 0xAE, 0x76, 0x5A, 0xB3, 0x6B, 0xF2, 0x9A, 0x2D, 0x40, 0x1A, 0x30, 0x21, 0x7C, 0x86, 0x26, 0xF5, 0xA6, 0xBB, 0xCF, 0x34, 0xC2, 0xCF, 0xC8, 0x05, 0x4E, 0xA1, 0xC9, 0x79, 0x99, 0x79, 0x9D, 0x55, 0xD2, 0xEC, 0x30, 0x06, 0x23, 0xB2, 0x1D, 0x90, 0xC1, 0xBC, 0x98, 0x84, 0x01, 0xD2, 0x08, 0xDA, 0x92, 0x09, 0x5A, 0xFD, 0x66, 0xFC, 0xE9, 0xC1, 0xAA, 0xB5, 0x8D, 0x9A, 0x05, 0x8D, 0x89, 0x1D, 0xB7, 0x32, 0x37, 0x97, 0x8D, 0x8E, 0xA0, 0x6D, 0x3B, 0xD9, 0x68, 0xD3, 0x10, 0x69, 0xD6, 0xA2, 0x67, 0xA6, 0x2F, 0x76, 0x92, 0x78, 0x3A, 0x01, 0x9F, 0xDA, 0xF5, 0x8D, 0xA0, 0x49, 0xBC, 0xA9, 0x6A, 0x42, 0x19, 0xA7, 0x1B, 0x30, 0x03, 0x26, 0xE5, 0xA5, 0xFC, 0xDA, 0x41, 0xC4, 0x91, 0xF5, 0x8A, 0xC8, 0x3E, 0xC1, 0x3E, 0xA6, 0x89, 0xAA, 0xB3, 0xA7, 0xCC, 0x15, 0x26, 0xB5, 0x8B, 0x60, 0xF2, 0x68, 0xD4, 0xF1, 0xBF, 0x6A, 0x96, 0x5E, 0x09, 0x6B, 0x84, 0xD4, 0x80, 0x16, 0xEE, 0x22, 0x2B, 0x61, 0xEF, 0x91, 0x10, 0x66, 0xDC, 0x45, 0xCE, 0x09, 0x5A, 0xE3, 0x36, 0xB2, 0x9C, 0x69, 0x1F, 0x35, 0xD1, 0x7A, 0x82, 0x96, 0x56, 0xCC, 0xC9, 0x69, 0xC4, 0xAE, 0x94, 0x29, 0x2F, 0x93, 0xD4, 0xFD, 0x26, 0xA7, 0xC9, 0xE4, 0x21, 0xE6, 0x27, 0x9F, 0x30, 0x28, 0xE7, 0xCD, 0x2A, 0x92, 0x11, 0x9C, 0x7D, 0x46, 0xCB, 0xAB, 0x6B, 0xCD, 0xD2, 0x67, 0x9F, 0x8A, 0x92, 0xD3, 0x97, 0x3D, 0x00, 0x51, 0xC2, 0x80, 0xAD, 0x40, 0x73, 0xC5, 0x9E, 0x8C, 0xD9, 0xDA, 0x5C, 0xD1, 0x72, 0xA2, 0xBF, 0xE6, 0xF2, 0x72, 0x84, 0x2E, 0x8C, 0x2B, 0xD3, 0x31, 0x0E, 0x5C, 0xD4, 0x35, 0x1A, 0x81, 0x54, 0x01, 0xFC, 0x03, 0xB3, 0xF7, 0x28, 0x8D, 0x4B, 0x26, 0x67, 0xCC, 0x8A, 0xDE, 0x45, 0xBE, 0x7F, 0x21, 0xDF, 0x7B, 0xE4, 0xE3, 0xFE, 0x8B, 0x19, 0xC4, 0x48, 0xAC, 0x8A, 0xBA, 0xA1, 0x3A, 0x24, 0xED, 0xB9, 0x38, 0xD0, 0x4E, 0xE1, 0xA7, 0x7F, 0xEC, 0x47, 0x95, 0x81, 0x89, 0x47, 0xD4, 0x09, 0x1E, 0x29, 0xA3, 0x35, 0x26, 0xBF, 0xBC, 0x59, 0x8F, 0x9B, 0xF0, 0xDD, 0x45, 0x8B, 0x69, 0x4C, 0x3D, 0x2D, 0x04, 0x1D, 0x58, 0x09, 0x88, 0xBD, 0x49, 0xEF, 0x72, 0x03, 0x2A, 0x75, 0x72, 0x3F, 0x8D, 0x95, 0xA2, 0x55, 0x57, 0x1A, 0x82, 0x6B, 0x16, 0x42, 0xB1, 0xAF, 0x53, 0xDA, 0x6F, 0x63, 0x10, 0x08, 0x01, 0x6A, 0x10, 0x2F, 0x7A, 0x46, 0x1F, 0xD1, 0x32, 0x41, 0xDB, 0x1F, 0x03, 0x48, 0x18, 0xA6, 0xB5, 0xFD, 0xD6, 0x51, 0x59, 0x6E, 0xC8, 0x51, 0xDD, 0xF5, 0xD7, 0x1F, 0xC8, 0x21, 0xAE, 0xE1, 0xBE, 0xF8, 0x48, 0x90, 0x53, 0x44, 0x66, 0x76, 0x16, 0xC2, 0xD4, 0x86, 0x9F, 0xE2, 0xCE, 0x71, 0xBD, 0xDC, 0xA3, 0x10, 0x31, 0x90, 0x46, 0x81, 0x5A, 0x4E, 0x5F, 0xB2, 0xFA, 0x8C, 0xB0, 0x9E, 0x55, 0x6A, 0x02, 0x8B, 0xD0, 0x02, 0x7C, 0x4C, 0x5A, 0x92, 0x03, 0x4D, 0xB9, 0x69, 0x62, 0x33, 0x39, 0xA0, 0xEE, 0x93, 0x53, 0x3D, 0x8C, 0x28, 0x19, 0x03, 0x22, 0xCD, 0x6B, 0x4D, 0x98, 0xB8, 0xB1, 0x00, 0x2D, 0x20, 0x14, 0xA8, 0xC5, 0xC4, 0x8D, 0x00, 0x94, 0x30, 0x05, 0xCE, 0x40, 0xBB, 0x0D, 0x64, 0xB9, 0x8A, 0xE2, 0xFE, 0xC6, 0x46, 0x43, 0x85, 0x6E, 0xDC, 0xBF, 0x97, 0x61, 0x8B, 0x20, 0x69, 0xB2, 0xEF, 0x32, 0x29, 0x56, 0x6F, 0xAB, 0xEC, 0x99, 0xC9, 0xE3, 0xA8, 0x4E, 0xCA, 0xA2, 0xC9, 0x2D, 0xD8, 0xAF, 0xF1, 0xCA, 0x3F, 0x43, 0x64, 0x3B, 0xD3, 0xE1, 0xEF, 0x2E, 0xFC, 0x4C, 0xC8, 0xFC, 0x34, 0x56, 0x58, 0x54, 0x32, 0x22, 0x01, 0x9D, 0x23, 0xA2, 0xE2, 0x16, 0x09, 0xE1, 0x71, 0xCC, 0x67, 0x27, 0xD3, 0xB0, 0x62, 0x94, 0xA2, 0xE9, 0x83, 0xA3, 0x54, 0x0F, 0x39, 0xB4, 0x66, 0xC0, 0x64, 0x22, 0x3E, 0xE9, 0x08, 0x85, 0x08, 0xE0, 0x05, 0x94, 0xBC, 0x09, 0x46, 0xBE, 0x80, 0x20, 0xCA, 0x26, 0x68, 0x4A, 0x0B, 0x1B, 0x61, 0xD0, 0xA8, 0x80, 0x44, 0xA0, 0x01, 0x6B, 0x16, 0x3E, 0x7B, 0x20, 0x5A, 0xE1, 0xC5, 0x9E, 0x6A, 0x3E, 0x5A, 0x10, 0xB3, 0xE2, 0xDF, 0xF5, 0x40, 0xC5, 0x2C, 0x01, 0xE3, 0x5A, 0x23, 0xC5, 0xD9, 0xB2, 0x1E, 0xFF, 0xA0, 0x69, 0x84, 0xF3, 0xF1, 0x94, 0xAE, 0x78, 0x97, 0xED, 0xAB, 0xDF, 0xBC, 0x04, 0x53, 0x60, 0x0B, 0xA0, 0x6F, 0x9B, 0x0D, 0x1E, 0xE5, 0xE4, 0x30, 0x25, 0x82, 0x36, 0x3D, 0xA0, 0x8C, 0xB9, 0x24, 0xC6, 0x45, 0x89, 0xF3, 0x66, 0xEB, 0xFB, 0xD4, 0x1D, 0x6F, 0x1B, 0x0F, 0x02, 0x20, 0x1B, 0xE8, 0x20, 0x36, 0x50, 0x06, 0x64, 0x01, 0xFD, 0x83, 0xE3, 0x08, 0x41, 0xB3, 0xEF, 0x48, 0xE3, 0xD1, 0x60, 0xE6, 0x0D, 0xC2, 0x8C, 0x6E, 0x61, 0xE7, 0x52, 0xC3, 0x52, 0x93, 0x41, 0xD3, 0x67, 0xC2, 0x51, 0x04, 0x33, 0xBA, 0xB9, 0x8C, 0xB9, 0xCA, 0x94, 0x4D, 0x23, 0xF4, 0x33, 0xB7, 0x50, 0x86, 0x70, 0x0B, 0x8B, 0x1D, 0xAF, 0x7B, 0x4C, 0x30, 0x68, 0x76, 0x76, 0xD6, 0xB3, 0xDE, 0xD8, 0xA5, 0x03, 0xFD, 0x78, 0xD1, 0xF5, 0x28, 0x6F, 0x3A, 0x59, 0x95, 0x27, 0x69, 0xD1, 0x95, 0xA3, 0x89, 0x25, 0xCD, 0x90, 0xF1, 0xB8, 0xEB, 0x50, 0xD4, 0x7F, 0xAB, 0xB9, 0xA3, 0xFA, 0xDB, 0x05, 0x02, 0x9A, 0x0A, 0xA5, 0x2A, 0x90, 0x94, 0x26, 0x65, 0x03, 0xDA, 0x40, 0xAC, 0x09, 0x9A, 0x63, 0x2A, 0xA4, 0xFE, 0xEF, 0xA0, 0xC1, 0xD0, 0x46, 0x30, 0xFB, 0x8D, 0xFE, 0x21, 0x3F, 0x7A, 0x5A, 0xDE, 0xA9, 0x2D, 0xEB, 0xFD, 0x6E, 0x56, 0xED, 0x24, 0x04, 0x04, 0x97, 0x05, 0x72, 0x86, 0x5F, 0xE4, 0xED, 0x9B, 0xBA, 0xF9, 0xFF, 0x9E, 0x46, 0xAF, 0xBB, 0xEF, 0x22, 0x53, 0x4F, 0x75, 0xA3, 0x17, 0x20, 0x0A, 0xF8, 0x02, 0x62, 0x06, 0xA3, 0x3E, 0xDF, 0x15, 0x77, 0xEB, 0xA7, 0x1F, 0xBE, 0x51, 0xD4, 0x73, 0x3E, 0x6D, 0x63, 0x22, 0x69, 0x7C, 0x1C, 0x20, 0xF1, 0x01, 0x3B, 0x05, 0x0E, 0xF4, 0xEC, 0x06, 0x08, 0xF1, 0xAF, 0xA3, 0x79, 0x86, 0x6A, 0x4F, 0xD0, 0x02, 0xAB, 0x9F, 0xAA, 0x6F, 0xD0, 0xB0, 0x8A, 0x69, 0xE1, 0x64, 0xB4, 0xA1, 0xEF, 0x94, 0x43, 0xED, 0xB1, 0x42, 0xAB, 0x2D, 0x4E, 0x6D, 0x89, 0xC8, 0xE9, 0x70, 0x3D, 0x1A, 0x3F, 0x57, 0x80, 0xCB, 0x6F, 0x83, 0xB7, 0xCD, 0x05, 0x40, 0x9E, 0x5D, 0xCF, 0x3D, 0x95, 0xB3, 0xCA, 0xAE, 0x93, 0x8C, 0x99, 0x5E, 0xE3, 0x48, 0x3B, 0x52, 0x6D, 0x6E, 0x40, 0x0B, 0x08, 0x07, 0x6A, 0xAA, 0xF4, 0x8C, 0x31, 0x93, 0xBB, 0xDE, 0x1D, 0x73, 0x70, 0x73, 0xC0, 0x95, 0x02, 0x63, 0x9E, 0xDD, 0x80, 0x35, 0x39, 0xB6, 0x7C, 0xEA, 0x89, 0x02, 0xB9, 0x81, 0x16, 0x22, 0x06, 0x33, 0x97, 0x05, 0xF6, 0x06, 0x62, 0x4F, 0xCC, 0xF2, 0xAD, 0x57, 0x8F, 0x3D, 0x47, 0x04, 0xEF, 0x0D, 0xBD, 0x91, 0x97, 0xC4, 0xEA, 0x0B, 0x45, 0xD9, 0x45, 0x4F, 0xCC, 0xEC, 0xDD, 0x8A, 0x92, 0x98, 0x6A, 0x23, 0x19, 0x73, 0x8E, 0xB7, 0x9D, 0xDD, 0xDA, 0x8C, 0xE0, 0x94, 0x54, 0xF8, 0xE4, 0x6B, 0x4F, 0x61, 0xDB, 0x9B, 0x8C, 0xA0, 0x3D, 0x3A, 0x26, 0xEE, 0xF1, 0x4F, 0xD3, 0x60, 0x3C, 0x10, 0xDF, 0xC6, 0xA6, 0x16, 0x7C, 0xAE, 0x8E, 0x3F, 0xD5, 0xE4, 0x4C, 0x1A, 0x6D, 0x4A, 0xF8, 0xD4, 0x6B, 0xC5, 0xC5, 0x69, 0x3F, 0x38, 0x26, 0xCB, 0x85, 0xC5, 0x2C, 0x56, 0x8C, 0x0A, 0x64, 0xE2, 0xE2, 0x94, 0x0D, 0x78, 0x00, 0x9D, 0xB8, 0x46, 0x6D, 0x03, 0xC1, 0xCD, 0x84, 0xE5, 0x13, 0xB3, 0xEF, 0x00, 0xE3, 0x96, 0xE0, 0xEE, 0x27, 0x89, 0xD4, 0xAB, 0xB1, 0x44, 0x88, 0xCD, 0x8F, 0x22, 0x27, 0xED, 0x85, 0x7D, 0x7D, 0xEE, 0x16, 0xC1, 0xD4, 0x67, 0xE6, 0x29, 0xD8, 0x0D, 0xBB, 0x95, 0x65, 0xD7, 0x7F, 0xCE, 0xE3, 0x8A, 0xB9, 0xCA, 0x23, 0xE4, 0xA1, 0x40, 0x8F, 0xD7, 0x5B, 0x7E, 0xC3, 0x9F, 0xE9, 0x5F, 0xAF, 0xC4, 0x18, 0xB7, 0xC1, 0x69, 0xB7, 0x5B, 0xB4, 0x1A, 0x7D, 0x87, 0xE6, 0x14, 0x89, 0x56, 0x03, 0x6A, 0xC0, 0xFE, 0x38, 0xBA, 0xEE, 0x0D, 0x98, 0xBD, 0xB6, 0x91, 0xEE, 0x80, 0xED, 0xB7, 0x78, 0x37, 0x04, 0x50, 0x05, 0x5C, 0xBE, 0x5D, 0x90, 0x6A, 0x64, 0x6E, 0x3C, 0xD2, 0x42, 0x0C, 0x46, 0x07, 0x3B, 0x61, 0x70, 0x92, 0x01, 0xC5, 0x2A, 0x37, 0x4B, 0x6B, 0x0B, 0x12, 0x57, 0xDB, 0xC9, 0xB0, 0xFA, 0xF1, 0x14, 0x16, 0x33, 0x6A, 0xBB, 0xDF, 0x8A, 0x7C, 0x69, 0xA0, 0xA6, 0x01, 0xD1, 0x02, 0x34, 0x81, 0x19, 0x9C, 0x39, 0xF2, 0x9B, 0x38, 0x97, 0xF9, 0x7D, 0x6B, 0x0C, 0x19, 0xD8, 0x63, 0x15, 0x34, 0x95, 0xAB, 0x9C, 0xED, 0x4F, 0x87, 0x5C, 0x0C, 0x66, 0xEC, 0xE7, 0x10, 0x7B, 0x3E, 0xE1, 0x02, 0xD6, 0xC7, 0x54, 0xB7, 0x82, 0x98, 0xFF, 0x93, 0xC8, 0x79, 0x1F, 0x71, 0x0C, 0x77, 0x03, 0x50, 0x62, 0xA2, 0x2D, 0x73, 0x4A, 0x4D, 0xD4, 0xB8, 0xD3, 0xD5, 0x1E, 0xCF, 0x58, 0x8B, 0x78, 0x4B, 0xFF, 0x25, 0x03, 0x9F, 0x68, 0x17, 0x47, 0x8C, 0xBF, 0x5D, 0x90, 0xBE, 0x51, 0x4B, 0xBD, 0x62, 0x0E, 0xFD, 0x4F, 0xF1, 0x16, 0x01, 0x5C, 0xDF, 0x64, 0xBB, 0x69, 0x36, 0xB1, 0xF6, 0x35, 0xC7, 0xEF, 0xE3, 0xF0, 0x9E, 0x93, 0xC3, 0x2D, 0x37, 0x35, 0x7E, 0x16, 0xA9, 0xB3, 0xB7, 0x15, 0xDC, 0x52, 0x91, 0xBF, 0x84, 0x2D, 0x1B, 0xFD, 0x96, 0x72, 0xD1, 0x4C, 0x44, 0x00, 0x73, 0x40, 0x0B, 0xB0, 0x05, 0x8C, 0x60, 0xE7, 0x02, 0x74, 0x01, 0xE5, 0x80, 0xF3, 0x94, 0x4E, 0x20, 0xE4, 0xFD, 0xE6, 0x6B, 0x9D, 0xA8, 0xED, 0xFF, 0x8A, 0x77, 0x4A, 0xC6, 0x89, 0xED, 0x42, 0x92, 0x47, 0xD3, 0x49, 0x77, 0x63, 0x2B, 0xB7, 0x93, 0xFD, 0xA0, 0xF6, 0x93, 0xD5, 0x97, 0xF6, 0xC9, 0xE5, 0xE8, 0x33, 0x77, 0x5D, 0xF7, 0xA3, 0xA1, 0x42, 0xF3, 0xA9, 0xB6, 0x9B, 0x86, 0xD8, 0xEA, 0xB7, 0x35, 0x92, 0x9F, 0x34, 0x95, 0xB1, 0x12, 0x5A, 0x3F, 0x70, 0xFD, 0x35, 0x7A, 0xB5, 0xCE, 0x33, 0x59, 0xCF, 0x42, 0x21, 0x64, 0x74, 0xB8, 0xC7, 0x57, 0x73, 0xF9, 0xDB, 0x04, 0xDA, 0xFA, 0x9B, 0xD8, 0x06, 0xC8, 0x02, 0x62, 0xC6, 0xBD, 0x03, 0x25, 0x40, 0x14, 0xA0, 0x63, 0x95, 0x91, 0x6F, 0x98, 0xBD, 0x18, 0x51, 0x3D, 0x51, 0x9B, 0x79, 0x2D, 0x93, 0x30, 0xD6, 0xFE, 0xED, 0x8E, 0x4A, 0x25, 0x3C, 0x06, 0xAC, 0x7E, 0x77, 0x8B, 0x2C, 0xFF, 0x2D, 0x92, 0x16, 0xBC, 0x9C, 0xAA, 0x30, 0x0E, 0xDD, 0xFE, 0x59, 0xC4, 0x1E, 0x36, 0xA5, 0xF8, 0x40, 0x06, 0x50, 0x4D, 0x24, 0xD0, 0xF1, 0xEA, 0x63, 0xFD, 0x7C, 0xE9, 0xDB, 0x4E, 0x45, 0xDE, 0x34, 0x71, 0xCA, 0xD9, 0xF6, 0x9B, 0x39, 0xF3, 0x9E, 0x8C, 0x4A, 0x88, 0x6D, 0xF2, 0xFE, 0xCE, 0x25, 0xEF, 0xB5, 0x65, 0x02, 0x9C, 0xBA, 0xFA, 0x24, 0x94, 0x98, 0xDE, 0x7D, 0x01, 0xCC, 0x7F, 0x26, 0x9F, 0xB6, 0x6E, 0xF5, 0xF9, 0x2D, 0x9B, 0x38, 0xFD, 0x8A, 0xFE, 0xA2, 0xA6, 0x8C, 0x1A, 0xF7, 0xF6, 0xAD, 0x31, 0x19, 0x94, 0x7C, 0x3A, 0x09, 0x06, 0x93, 0x20, 0x3B, 0x0C, 0xC6, 0x9F, 0xF8, 0x99, 0xFB, 0xF7, 0x69, 0x30, 0x79, 0xB7, 0xCA, 0x19, 0xAA, 0x8C, 0xCE, 0xDA, 0x33, 0x81, 0x03, 0x76, 0x01, 0xF2, 0x38, 0x9B, 0x60, 0x73, 0xEC, 0xA6, 0x9A, 0xCD, 0x3E, 0x2E, 0x37, 0x44, 0xC5, 0xC7, 0x4C, 0x92, 0x51, 0xE3, 0x8C, 0x6F, 0xCC, 0x71, 0x73, 0x62, 0x3F, 0xB5, 0xEC, 0xC0, 0xBD, 0xAF, 0xA5, 0x00, 0x3A, 0x01, 0xDA, 0xC0, 0x0E, 0xA2, 0x01, 0xD7, 0xF7, 0xDB, 0x0D, 0x07, 0x5C, 0x80, 0x73, 0xB3, 0x59, 0x80, 0x26, 0xE0, 0x8C, 0x9A, 0xE5, 0x89, 0x9A, 0xDD, 0x35, 0x14, 0x5A, 0xD3, 0xF4, 0x4F, 0x8B, 0xAF, 0x1B, 0x35, 0x77, 0x2B, 0xD6, 0x51, 0x27, 0x7A, 0x58, 0xD2, 0x08, 0xC6, 0xBE, 0x5D, 0x2B, 0xE7, 0xD6, 0x7B, 0x72, 0x90, 0x13, 0xE8, 0xB1, 0x0D, 0x2E, 0x60, 0x2B, 0xA0, 0x76, 0xF7, 0x48, 0xF0, 0x7C, 0x9C, 0xCC, 0xB3, 0x49, 0x63, 0x9B, 0x1E, 0xCD, 0x23, 0x1D, 0xCD, 0x32, 0xF6, 0xCE, 0x51, 0x28, 0x39, 0xD4, 0xF1, 0x62, 0xA8, 0x49, 0x90, 0x5F, 0x6F, 0x2B, 0xCB, 0x12, 0xC0, 0x08, 0x49, 0x62, 0x13, 0x06, 0x9C, 0xDE, 0x97, 0x09, 0xE4, 0xFE, 0x78, 0x9D, 0x9F, 0x89, 0x20, 0xA0, 0x0D, 0xC4, 0xFA, 0x3E, 0x43, 0xDB, 0x7F, 0x33, 0x16, 0x4D, 0xE6, 0xC2, 0xAC, 0x64, 0x65, 0x8C, 0xDE, 0x89, 0xAE, 0x86, 0x18, 0x64, 0x2C, 0x09, 0x7A, 0xDA, 0xF4, 0x33, 0xF3, 0x08, 0x70, 0x7F, 0xFE, 0xE1, 0x9C, 0x20, 0xAC, 0xD3, 0x82, 0x6D, 0x2D, 0x40, 0x03, 0x88, 0xE4, 0x43, 0x21, 0x19, 0x04, 0x6A, 0x64, 0xD3, 0x27, 0xB9, 0x9C, 0xB7, 0xB7, 0x11, 0xFA, 0x6D, 0x7A, 0xD6, 0xCC, 0xCF, 0xAE, 0x1D, 0xA9, 0xCE, 0x4E, 0xD6, 0xB1, 0x1F, 0x99, 0x3B, 0xFE, 0x29, 0x4E, 0x00, 0x54, 0x80, 0x1D, 0xC4, 0x22, 0x0C, 0x18, 0x85, 0x5E, 0x1C, 0xC8, 0x05, 0xB8, 0x03, 0x32, 0x12, 0x42, 0x02, 0xAA, 0xEF, 0x1B, 0x7C, 0x9F, 0xA8, 0x05, 0xB2, 0x8B, 0xAA, 0x20, 0xC2, 0x06, 0xF7, 0xE7, 0xDD, 0x9E, 0x1D, 0x63, 0x57, 0x65, 0xE6, 0x58, 0x50, 0xE7, 0xB7, 0xE9, 0xB8, 0xF5, 0xA6, 0x43, 0xEE, 0x93, 0x92, 0x71, 0x67, 0xFD, 0x93, 0x1B, 0xB5, 0x4F, 0x5F, 0x2B, 0x59, 0xC0, 0xF4, 0xDF, 0x9A, 0x22, 0x6D, 0x1F, 0x39, 0xCC, 0x11, 0xA6, 0x1D, 0xCC, 0xF0, 0x64, 0xB5, 0x65, 0x4D, 0x5B, 0x14, 0x2A, 0x18, 0x74, 0x1E, 0x24, 0x70, 0xE1, 0xB0, 0xE8, 0x92, 0x43, 0x74, 0xA4, 0xB9, 0xA2, 0x70, 0xBE, 0x81, 0xC5, 0x87, 0x74, 0x09, 0x90, 0x01, 0x94, 0x4E, 0xB5, 0xFC, 0xDB, 0xB0, 0x2B, 0x14, 0xF0, 0x05, 0x6C, 0x7D, 0xFB, 0x09, 0x6E, 0x07, 0x34, 0xE7, 0x2F, 0x4C, 0xD0, 0x12, 0x12, 0xDB, 0x9D, 0xD6, 0x46, 0xDC, 0xA1, 0xC6, 0xB7, 0x57, 0xE2, 0x26, 0xB3, 0x0B, 0xD3, 0x25, 0x95, 0xA7, 0x1E, 0xFB, 0x68, 0x1D, 0xCE, 0x91, 0x3E, 0xF3, 0x80, 0xE6, 0xFF, 0x6B, 0x7C, 0x7F, 0xCD, 0x2E, 0xF2, 0x58, 0x00, 0xE9, 0x35, 0x2D, 0xAE, 0x13, 0x03, 0xBB, 0xD5, 0xD2, 0x96, 0xA7, 0x44, 0x75, 0x31, 0xBF, 0xA8, 0x26, 0x39, 0x9B, 0x7A, 0x6F, 0xAD, 0x9B, 0x8C, 0x15, 0x7F, 0x11, 0xE1, 0xB0, 0x9D, 0x41, 0x9C, 0xFE, 0x66, 0xE5, 0xF7, 0x02, 0x4A, 0x88, 0xE9, 0xDF, 0xD6, 0xA3, 0x75, 0x02, 0x4E, 0x98, 0x02, 0x8B, 0xA7, 0xB8, 0x00, 0x9B, 0xD0, 0xEB, 0x0D, 0x83, 0xA0, 0xD5, 0xAF, 0x83, 0x83, 0x49, 0x42, 0x89, 0xDC, 0x7E, 0x67, 0xBC, 0x6A, 0x1E, 0xBF, 0xBB, 0x83, 0x6F, 0x43, 0xE1, 0xD4, 0xDC, 0xED, 0xD1, 0x1F, 0x43, 0x67, 0xDE, 0x61, 0xE7, 0xAE, 0x96, 0x54, 0x24, 0x66, 0xE2, 0x5D, 0x40, 0x2A, 0x10, 0x0D, 0xB8, 0x01, 0x16, 0x2F, 0xC6, 0x1D, 0x7F, 0xFC, 0xCB, 0xD5, 0xDE, 0x5C, 0xE4, 0x29, 0x17, 0x9A, 0x07, 0x8B, 0xDD, 0xBB, 0x21, 0x0A, 0x8B, 0x80, 0xB5, 0x3F, 0x8D, 0x51, 0xED, 0xE2, 0x3E, 0x3A, 0x37, 0xB1, 0x08, 0x7D, 0x6F, 0x6E, 0x53, 0x37, 0x23, 0x0E, 0x6C, 0xE7, 0x8B, 0x0A, 0xD8, 0x7E, 0x9F, 0xA0, 0x2A, 0xF7, 0x21, 0x8B, 0xA8, 0xF5, 0x2F, 0x6A, 0x5A, 0x86, 0xAD, 0xBE, 0x89, 0x1A, 0x43, 0x50, 0x4D, 0xCB, 0x7A, 0x17, 0x96, 0x85, 0xE8, 0xEF, 0x77, 0x5A, 0xE6, 0x2F, 0x5A, 0xFB, 0x6B, 0x39, 0x34, 0xFF, 0xBE, 0x4F, 0x9C, 0x0C, 0xE8, 0x0F, 0x4A, 0x89, 0x79, 0x71, 0x9E, 0x5A, 0xB3, 0x2D, 0x3C, 0xE1, 0x1A, 0x79, 0x56, 0x17, 0x10, 0x93, 0xBD, 0x3C, 0xF7, 0xC6, 0x9E, 0xF5, 0x05, 0xF7, 0xF3, 0x5E, 0x0F, 0x28, 0x1D, 0x6C, 0x60, 0xFB, 0x1B, 0xA7, 0x12, 0x20, 0x1B, 0x28, 0x7D, 0xE3, 0x9B, 0x13, 0x2E, 0x05, 0xD6, 0x7E, 0xBF, 0x6B, 0x5D, 0xC0, 0x3A, 0x61, 0xE6, 0x29, 0x7C, 0x16, 0xC8, 0x5A, 0x58, 0x9A, 0x8A, 0x28, 0xDA, 0x54, 0x57, 0xFF, 0x66, 0x6B, 0xBD, 0x9F, 0x0E, 0xC6, 0x22, 0xEA, 0x70, 0xB5, 0xDF, 0x8D, 0x99, 0x8D, 0xE2, 0x09, 0x2A, 0x13, 0x35, 0xFD, 0xF4, 0xE2, 0x8D, 0x78, 0xFF, 0x8D, 0x30, 0xA2, 0x00, 0x1F, 0xF8, 0x7B, 0xD4, 0x7D, 0x73, 0x92, 0xF7, 0xFA, 0xBB, 0xE0, 0x0A, 0x98, 0x74, 0x67, 0xBF, 0xF3, 0xD8, 0x3C, 0xBA, 0x65, 0xC4, 0xDB, 0x37, 0x40, 0xD7, 0xA7, 0x5C, 0x28, 0x09, 0x23, 0x9C, 0x28, 0x60, 0x1B, 0xE0, 0xD3, 0xFD, 0xD6, 0x81, 0xDC, 0x80, 0x27, 0x20, 0x7C, 0x43, 0x12, 0xDA, 0x80, 0x37, 0x4F, 0xD9, 0x27, 0x6A, 0x1B, 0x05, 0x92, 0xD9, 0x74, 0x99, 0xC7, 0x46, 0x57, 0x41, 0x71, 0xAC, 0xB5, 0x92, 0xCD, 0x38, 0x85, 0x36, 0xE2, 0xC9, 0x5D, 0xF0, 0x18, 0x17, 0xEA, 0xAF, 0xEF, 0xF9, 0x5B, 0x91, 0x67, 0xC5, 0x20, 0x64, 0x4C, 0x11, 0x2D, 0x50, 0x0B, 0xE8, 0x49, 0x84, 0x99, 0x5D, 0x94, 0x9C, 0xBC, 0xFB, 0xA9, 0xE7, 0x9A, 0xA5, 0xD3, 0x75, 0x0A, 0x58, 0xF4, 0x6C, 0xF1, 0x53, 0xEE, 0x9E, 0xEB, 0x0E, 0x47, 0x0C, 0x0C, 0x26, 0x77, 0xCD, 0x2F, 0x03, 0xF6, 0x1C, 0x19, 0x11, 0x9F, 0x9F, 0x15, 0x10, 0x5C, 0xD2, 0x1A, 0xD1, 0x0A, 0xD4, 0x06, 0x8C, 0xEF, 0x6B, 0x05, 0xDC, 0x1E, 0x7F, 0x76, 0x00, 0x51, 0x93, 0xFF, 0xA2, 0x90, 0x14, 0xB9, 0x9B, 0xA6, 0xF1, 0xEC, 0xC4, 0x7E, 0x1F, 0x06, 0x16, 0xC5, 0xFA, 0x63, 0xC3, 0x5F, 0x58, 0xCD, 0xFD, 0xA8, 0x6F, 0x26, 0x8C, 0x5C, 0xCD, 0x7A, 0x22, 0x73, 0x2D, 0xE0, 0xF6, 0x06, 0x3C, 0x80, 0x28, 0xA0, 0xC6, 0xF1, 0xFC, 0x69, 0xF4, 0x86, 0xA4, 0xDA, 0xDB, 0xE8, 0x0F, 0x67, 0x2A, 0xD7, 0xAB, 0x92, 0x3C, 0x45, 0xCE, 0x66, 0x5E, 0x08, 0x3F, 0x2F, 0xB1, 0x0C, 0xD8, 0x49, 0x14, 0xB0, 0x1A, 0xD8, 0x9B, 0x70, 0x40, 0x88, 0x51, 0x92, 0xA7, 0xF5, 0xEA, 0x3A, 0xF6, 0x33, 0x40, 0x2C, 0x60, 0xCD, 0x1E, 0x99, 0x03, 0x55, 0x3C, 0xA5, 0x27, 0x6A, 0x0A, 0xD1, 0x49, 0x02, 0x56, 0x31, 0xAB, 0x7E, 0xB9, 0x1D, 0x85, 0x2D, 0x81, 0x88, 0x2E, 0xB4, 0xA9, 0x0C, 0x41, 0xB4, 0x61, 0xA5, 0x60, 0x8D, 0xCA, 0xD0, 0x9C, 0x95, 0x41, 0xC4, 0x8C, 0xB5, 0x7D, 0xFB, 0xA1, 0xE4, 0x59, 0x0E, 0xE6, 0x28, 0x61, 0x1B, 0x30, 0x03, 0x5C, 0x3E, 0x8D, 0x5F, 0xD4, 0x39, 0x04, 0x38, 0x8F, 0xF0, 0xE9, 0x84, 0x97, 0x8C, 0xD3, 0x74, 0xE6, 0xE5, 0xCF, 0x94, 0x41, 0x38, 0x85, 0x6A, 0xCD, 0xAE, 0xED, 0xEF, 0x82, 0xD3, 0x05, 0xB0, 0x0D, 0x08, 0xB1, 0x93, 0x08, 0x40, 0x1E, 0x8D, 0xFD, 0xAE, 0x42, 0x37, 0x10, 0x39, 0x2F, 0xBE, 0xD5, 0x59, 0x96, 0x40, 0xD4, 0xED, 0x8B, 0x80, 0xA8, 0x19, 0x7A, 0x37, 0x55, 0x62, 0xE3, 0xAE, 0xF7, 0x4F, 0x8E, 0x53, 0xE7, 0x3C, 0x36, 0xF6, 0x46, 0x21, 0x63, 0x05, 0x52, 0x2F, 0x76, 0xA0, 0x81, 0x90, 0x7D, 0x16, 0x54, 0xF2, 0x59, 0x86, 0x56, 0xBE, 0x0E, 0x74, 0x5E, 0x40, 0x0A, 0xB1, 0x89, 0x78, 0x6B, 0x1D, 0x4F, 0x6A, 0xC3, 0xF5, 0x5A, 0x42, 0x19, 0xDC, 0x06, 0x7A, 0x5F, 0x3F, 0xFE, 0x19, 0x03, 0x32, 0x4F, 0x85, 0x66, 0xBC, 0x56, 0xBE, 0x4D, 0xB7, 0xB7, 0x00, 0x6A, 0x84, 0x12, 0x41, 0x14, 0x60, 0x01, 0x94, 0x7F, 0x7C, 0xFB, 0x18, 0xAF, 0x16, 0x60, 0x42, 0xBA, 0xFA, 0xF5, 0xB2, 0x6C, 0xE3, 0x29, 0x7E, 0xC2, 0xE6, 0xA8, 0x37, 0xA0, 0xEB, 0xCB, 0xCA, 0xF8, 0x2D, 0x0D, 0xB2, 0x1C, 0xCB, 0xB9, 0x8A, 0xDF, 0xE8, 0xD0, 0x4C, 0xEC, 0xE4, 0x15, 0x34, 0xB7, 0x85, 0x09, 0x70, 0xD4, 0xB7, 0xC9, 0xF8, 0xDC, 0xD8, 0x62, 0xA4, 0xFF, 0x27, 0xAB, 0x05, 0xD9, 0x50, 0x2F, 0x36, 0xB0, 0x0A, 0xF0, 0x5B, 0xD8, 0x8D, 0x3D, 0x9C, 0x51, 0xCF, 0x37, 0xE0, 0xD3, 0x17, 0x65, 0xE6, 0xA0, 0x7A, 0x73, 0xDD, 0x28, 0xBB, 0xD6, 0xDB, 0x98, 0xFE, 0xA9, 0x7E, 0x11, 0xC0, 0x08, 0x1F, 0xC4, 0x47, 0x27, 0x5D, 0x01, 0xD4, 0xE6, 0x54, 0xA7, 0x80, 0xED, 0xF3, 0x22, 0xA0, 0xA3, 0x38, 0xCE, 0x2A, 0x47, 0x79, 0xCA, 0x9E, 0xA8, 0x05, 0xB6, 0xAA, 0xBA, 0x7E, 0xBF, 0xB3, 0x98, 0x75, 0x1F, 0x5B, 0xDF, 0x64, 0xB5, 0x69, 0x8D, 0xEA, 0x45, 0x9B, 0x2A, 0xE3, 0x6E, 0x14, 0x2B, 0x8C, 0x01, 0x8B, 0x3B, 0x9A, 0xB6, 0xFD, 0xB9, 0x50, 0x8E, 0xD2, 0xAD, 0x08, 0xC1, 0xDE, 0x80, 0x0A, 0xE0, 0xB8, 0xFD, 0xF3, 0x67, 0x18, 0x08, 0x47, 0x2F, 0xB7, 0x9C, 0x05, 0xC2, 0xA4, 0x97, 0x9D, 0x64, 0xD9, 0x3D, 0xDE, 0x3C, 0xC1, 0x05, 0xEA, 0x64, 0x87, 0x8C, 0xDB, 0x10, 0x31, 0x6D, 0x7E, 0x8B, 0x88, 0x89, 0x7C, 0x10, 0x02, 0x84, 0xF0, 0x0D, 0x1B, 0x68, 0xFE, 0x16, 0x73, 0x40, 0x8A, 0x2F, 0x2E, 0x00, 0xBF, 0x5A, 0xCE, 0xD1, 0x92, 0xD9, 0x5F, 0x9B, 0x98, 0x61, 0x76, 0x1B, 0x7B, 0x63, 0x83, 0x4C, 0x1A, 0x75, 0x0B, 0xDE, 0xBF, 0xBB, 0xC4, 0xDA, 0x1B, 0x51, 0x72, 0x38, 0xF0, 0x6B, 0x6C, 0xA6, 0x3A, 0xD6, 0x2C, 0xD5, 0xDF, 0x95, 0x41, 0xDE, 0xB9, 0xEA, 0x56, 0xAE, 0x64, 0x72, 0x3A, 0xBC, 0xF0, 0xA8, 0x4F, 0x0B, 0xE1, 0xF5, 0x35, 0x7E, 0xE1, 0x66, 0x5F, 0xC7, 0x75, 0x2B, 0x12, 0xAA, 0xDF, 0x76, 0xB2, 0x63, 0x85, 0xAB, 0x06, 0x9B, 0xF6, 0x15, 0x71, 0xC3, 0xB4, 0x4E, 0x8F, 0x6D, 0xF7, 0xB1, 0x69, 0x05, 0x64, 0x56, 0x0D, 0x06, 0xA4, 0x02, 0xD1, 0x40, 0xC6, 0xA4, 0xB5, 0x02, 0x4D, 0x1D, 0xCA, 0x36, 0xA0, 0x67, 0x23, 0x08, 0xF0, 0x0D, 0xEC, 0x00, 0x34, 0x79, 0x8A, 0x4F, 0xD0, 0x0A, 0x1D, 0x13, 0x45, 0x91, 0x43, 0xDC, 0x1B, 0x56, 0x05, 0x05, 0x57, 0xC3, 0xF4, 0x42, 0xB0, 0xAB, 0xD8, 0x8B, 0x59, 0x31, 0x60, 0x90, 0x0C, 0x23, 0xC6, 0xA0, 0xF5, 0x3F, 0x5A, 0xA4, 0xE6, 0xA9, 0xC2, 0x1C, 0x4F, 0x31, 0xF1, 0x29, 0x7F, 0x01, 0xF6, 0x22, 0x14, 0x08, 0xCA, 0xDD, 0xC6, 0x47, 0x66, 0x21, 0x5A, 0x0C, 0x1A, 0x76, 0xE6, 0x99, 0xD7, 0xCA, 0x9A, 0xCC, 0xBE, 0xC9, 0x22, 0x7E, 0xE4, 0x49, 0x99, 0xC6, 0xEF, 0xD3, 0xA9, 0x44, 0x01, 0x77, 0x40, 0x9A, 0xF0, 0x17, 0x4A, 0x64, 0xBF, 0xC3, 0xAF, 0x1D, 0x28, 0xC2, 0x89, 0xBD, 0xDF, 0x33, 0xD7, 0x9C, 0xD9, 0x13, 0xB4, 0x66, 0x0F, 0x85, 0x91, 0xBB, 0xF9, 0x7F, 0xEE, 0xC2, 0x92, 0xA9, 0x3A, 0xB0, 0x45, 0xE6, 0x41, 0x39, 0xD5, 0xB1, 0x0A, 0xD4, 0x75, 0x33, 0x3B, 0x96, 0x02, 0x61, 0x73, 0x9F, 0x7D, 0xEE, 0xE4, 0xB8, 0x9D, 0xB0, 0xC1, 0xEF, 0x24, 0x45, 0x01, 0xC9, 0x81, 0xB3, 0x04, 0x60, 0xC9, 0x0A, 0xA3, 0xC5, 0x59, 0x87, 0xF7, 0xB8, 0x93, 0x73, 0xE3, 0x7B, 0x5E, 0x9C, 0xDE, 0x14, 0x76, 0xAC, 0xC0, 0xB3, 0x26, 0x51, 0x87, 0xBF, 0xF3, 0x0C, 0x54, 0x60, 0xE5, 0xC8, 0x84, 0x80, 0x16, 0x61, 0x80, 0x05, 0xD0, 0xF1, 0xF6, 0xE4, 0x95, 0x04, 0xCE, 0x0D, 0x80, 0xB0, 0x0D, 0x2C, 0x07, 0xE6, 0x14, 0x2D, 0x06, 0x6D, 0x63, 0xC7, 0x40, 0x1C, 0xEB, 0x82, 0x28, 0x6A, 0xBA, 0x7C, 0x28, 0x45, 0xFB, 0x6F, 0xFB, 0x7B, 0xD3, 0x56, 0x5E, 0xA5, 0xE0, 0x1D, 0xEA, 0xFA, 0x0B, 0x68, 0x7F, 0x2B, 0xDA, 0xF7, 0x1A, 0x37, 0x83, 0xD7, 0x60, 0xB4, 0x3F, 0xBB, 0x45, 0x99, 0x84, 0x11, 0x75, 0xF3, 0xB8, 0x21, 0xA5, 0x4D, 0xEA, 0xC2, 0x9D, 0x5C, 0xDA, 0xE9, 0x99, 0x3E, 0xF7, 0xE7, 0xDB, 0xBD, 0xED, 0x9A, 0x0A, 0xAC, 0x00, 0xB6, 0x00, 0x63, 0xBF, 0x6C, 0x0B, 0x70, 0x03, 0x42, 0x89, 0x04, 0xD2, 0xDF, 0x07, 0x6D, 0xBD, 0x56, 0xC5, 0xE7, 0xC5, 0x6C, 0x40, 0x1D, 0x58, 0x1B, 0x90, 0x11, 0xA3, 0x6A, 0x4D, 0xD4, 0x36, 0x76, 0xE1, 0x45, 0x90, 0x71, 0x53, 0x7D, 0xA3, 0x56, 0x5D, 0xEC, 0x4F, 0xBF, 0x69, 0x36, 0x11, 0x01, 0x5D, 0x0F, 0x9E, 0x13, 0x26, 0xEB, 0xBB, 0x72, 0x37, 0x46, 0x6D, 0xE4, 0xBE, 0xFD, 0x89, 0xD3, 0x06, 0xFC, 0xB3, 0x22, 0xD6, 0x04, 0x5E, 0xEB, 0x09, 0x4C, 0xCE, 0xF8, 0x70, 0x7B, 0x73, 0x17, 0xBA, 0x18, 0x04, 0x46, 0x46, 0x3E, 0x6D, 0x16, 0x37, 0xA1, 0x32, 0x8B, 0x48, 0x40, 0x9D, 0x28, 0xC0, 0x36, 0xE1, 0x80, 0x6F, 0x60, 0xD6, 0x64, 0x6E, 0x40, 0x07, 0x50, 0xFE, 0xBE, 0xB8, 0xEA, 0xD5, 0xEF, 0xDB, 0xEF, 0x29, 0x88, 0x9A, 0xC0, 0x9B, 0xC3, 0x03, 0xB9, 0xF7, 0x46, 0x17, 0x71, 0xC3, 0xD4, 0x56, 0xCC, 0xF1, 0xF4, 0x4D, 0xC7, 0x52, 0xD0, 0x1D, 0xFD, 0x14, 0x43, 0xEF, 0x3E, 0xCB, 0x35, 0xA6, 0x1E, 0xC9, 0xF4, 0xD3, 0x22, 0xB0, 0x14, 0xE8, 0x06, 0x6A, 0x20, 0x17, 0x79, 0x72, 0xE2, 0x25, 0x66, 0x71, 0x34, 0xFD, 0xF2, 0xF9, 0xFC, 0xD5, 0xE9, 0x7E, 0x65, 0x77, 0xAD, 0x23, 0x7F, 0x8D, 0xFF, 0x72, 0xA6, 0x4E, 0x33, 0x9F, 0xC1, 0x8B, 0x36, 0xB9, 0x6C, 0x0A, 0xA4, 0x00, 0x1D, 0x9C, 0xE2, 0x39, 0xB0, 0x13, 0x70, 0xAA, 0x44, 0x1A, 0x40, 0x29, 0x90, 0x0B, 0x50, 0xBE, 0xA1, 0x14, 0xB0, 0x00, 0xE6, 0x1F, 0xF4, 0x98, 0xA8, 0x29, 0x1C, 0xFC, 0x5D, 0x68, 0x98, 0x67, 0xEC, 0x29, 0xF1, 0xEA, 0x91, 0xB6, 0x13, 0xB7, 0xD1, 0x59, 0xBF, 0x28, 0x5C, 0x35, 0x47, 0xC5, 0xCD, 0x6F, 0x9F, 0x37, 0x1B, 0x43, 0xED, 0x59, 0x3F, 0x2D, 0x06, 0x61, 0x35, 0x30, 0xCF, 0xA2, 0x56, 0x20, 0x1C, 0x98, 0x49, 0xFF, 0x38, 0x3C, 0x16, 0xB3, 0x03, 0xB7, 0x02, 0xDE, 0x6F, 0x6E, 0x9B, 0x18, 0x45, 0x35, 0xB9, 0x6F, 0x9F, 0xDD, 0xFA, 0x38, 0x6D, 0xC5, 0x72, 0x52, 0xA3, 0x15, 0xA8, 0x71, 0x38, 0x57, 0xC0, 0x89, 0x9C, 0x6D, 0xD5, 0xF5, 0xD1, 0x48, 0x15, 0x08, 0x62, 0x1E, 0x22, 0xA9, 0x80, 0x12, 0x6E, 0x3C, 0xE5, 0x44, 0xCD, 0xE0, 0x66, 0x3F, 0x15, 0xF2, 0x02, 0x9B, 0xEA, 0xCC, 0xD7, 0x15, 0x26, 0x8B, 0x15, 0x2C, 0x18, 0x80, 0x56, 0xA2, 0x73, 0x3F, 0x7B, 0x57, 0x53, 0xA3, 0x38, 0xAC, 0xB9, 0x43, 0x1C, 0x0F, 0x09, 0x42, 0xFA, 0x71, 0xD6, 0x99, 0x2C, 0xB3, 0x58, 0x40, 0xFA, 0x5B, 0x2B, 0x76, 0xB6, 0xFD, 0x44, 0x01, 0x8D, 0x2B, 0x61, 0xB2, 0x29, 0xC6, 0xE4, 0x31, 0xDC, 0x5D, 0x3C, 0xBD, 0x8D, 0xBA, 0xB1, 0x72, 0xE1, 0x28, 0x99, 0xD5, 0xF9, 0xA4, 0x41, 0x2B, 0xA0, 0x84, 0xCB, 0xEB, 0xCA, 0xD9, 0x94, 0x71, 0x2D, 0x00, 0x9D, 0x17, 0x13, 0xB0, 0x19, 0x25, 0x85, 0xA3, 0x49, 0x24, 0x93, 0x13, 0x35, 0xC7, 0x0D, 0x2D, 0x1B, 0x63, 0xCD, 0xFD, 0x27, 0xEA, 0xFA, 0xDA, 0x70, 0xCF, 0xE1, 0xC0, 0x55, 0x33, 0xFC, 0xF3, 0x26, 0x58, 0x78, 0x28, 0x56, 0x5A, 0x47, 0x5B, 0xCB, 0xCF, 0xFE, 0x71, 0x9C, 0x02, 0x1E, 0x86, 0xC4, 0x26, 0x6A, 0x06, 0xE8, 0x22, 0x36, 0x21, 0xC0, 0x28, 0x15, 0x96, 0x0C, 0x17, 0x67, 0x15, 0xE9, 0x37, 0xC7, 0xDE, 0x98, 0x4E, 0xB9, 0x39, 0x93, 0xCF, 0xD9, 0x77, 0xBE, 0x0E, 0xB9, 0xC0, 0xAC, 0x64, 0x65, 0x03, 0xE9, 0x40, 0xDB, 0x67, 0x01, 0x9F, 0x80, 0x04, 0x90, 0x0C, 0x9E, 0x6F, 0xA0, 0x03, 0x28, 0x7D, 0xBB, 0x1D, 0xB6, 0x01, 0x4E, 0xCC, 0x1B, 0xC2, 0x26, 0x6A, 0x01, 0x13, 0x2F, 0x6D, 0xF4, 0xF0, 0x4A, 0x65, 0x5A, 0x73, 0xBC, 0xBE, 0x4D, 0xD1, 0x14, 0xD4, 0x0D, 0x45, 0xA0, 0x76, 0x77, 0xDB, 0xEF, 0x33, 0x54, 0xF6, 0xBB, 0xEB, 0x6E, 0xC1, 0xBB, 0x55, 0x02, 0x11, 0x84, 0x01, 0x5E, 0x44, 0xCC, 0x70, 0x34, 0x7E, 0xEC, 0xBA, 0x29, 0xA2, 0x3A, 0xF5, 0xF7, 0x67, 0xDE, 0x74, 0xEC, 0x2E, 0x46, 0x4F, 0xD2, 0x1B, 0x66, 0x7A, 0x33, 0x5D, 0x31, 0xFB, 0xF8, 0x7F, 0x28, 0x30, 0x3B, 0xCD, 0xEA, 0x80, 0xCB, 0xA7, 0xA7, 0xA0, 0xBF, 0x6D, 0xE6, 0x22, 0x01, 0x27, 0x66, 0xFE, 0x1B, 0x0A, 0x88, 0x00, 0x66, 0x3C, 0x45, 0x27, 0x6A, 0x89, 0xCC, 0x1B, 0x67, 0xB3, 0x32, 0x37, 0xB6, 0x12, 0x9A, 0xA8, 0x31, 0xBE, 0x39, 0xE9, 0x4D, 0x8A, 0x7F, 0x57, 0xE4, 0x2E, 0x0C, 0xD2, 0xFF, 0x59, 0x39, 0xAB, 0x71, 0x15, 0xC5, 0x29, 0xBD, 0x60, 0xB5, 0xCD, 0x5C, 0x14, 0xF7, 0x45, 0xB1, 0xD7, 0xC9, 0x5A, 0xE7, 0x7E, 0xF6, 0xC3, 0x3E, 0x9B, 0x04, 0xCD, 0xA5, 0xD2, 0xB4, 0x12, 0xE8, 0x79, 0x9F, 0xCF, 0xDC, 0xE4, 0x1D, 0x55, 0x35, 0x2D, 0x0C, 0x89, 0x9A, 0x44, 0xA3, 0x02, 0x76, 0x03, 0x2A, 0x40, 0x6D, 0x06, 0x66, 0x62, 0x97, 0xC0, 0x29, 0x73, 0x58, 0xC0, 0x2E, 0x46, 0xD9, 0x81, 0xBE, 0xA7, 0x20, 0x68, 0x85, 0x4E, 0x28, 0xE2, 0xA8, 0x02, 0xEF, 0x86, 0x73, 0xFC, 0xDD, 0x75, 0x41, 0xFB, 0x9F, 0xC2, 0xA0, 0x80, 0xD9, 0x55, 0x77, 0x43, 0xC6, 0x3D, 0x17, 0xE8, 0xD7, 0x03, 0x7D, 0xCF, 0x52, 0xD4, 0xDE, 0xC7, 0xE4, 0x12, 0x1E, 0x25, 0x90, 0x9F, 0x59, 0x54, 0xEB, 0xD5, 0x67, 0xF0, 0x98, 0x7E, 0x13, 0x96, 0xE7, 0xDA, 0x98, 0x24, 0xEF, 0x36, 0x1A, 0xC1, 0xDF, 0xBD, 0x35, 0x0C, 0x23, 0x6A, 0x26, 0xB7, 0xB0, 0x14, 0x46, 0x01, 0xEF, 0xE3, 0x95, 0x10, 0x03, 0x34, 0x80, 0xDA, 0x9F, 0x02, 0xDC, 0xBD, 0x71, 0xD4, 0x0D, 0x84, 0x01, 0xAB, 0xC7, 0xBC, 0xFF, 0x87, 0x93, 0xB2, 0x52, 0x3D, 0x51, 0x6B, 0xD8, 0x2A, 0xEC, 0x42, 0xB9, 0x9E, 0x31, 0x11, 0x13, 0xC9, 0x44, 0x52, 0xB5, 0x21, 0x8F, 0x64, 0xE0, 0x0F, 0x45, 0x40, 0x28, 0xF6, 0xFC, 0x45, 0x6D, 0x4D, 0xD4, 0xE6, 0x02, 0x9D, 0x4D, 0x8A, 0x99, 0x5F, 0x8E, 0xB8, 0x95, 0xFD, 0x6E, 0x53, 0xB6, 0x02, 0x99, 0x80, 0x17, 0x90, 0x73, 0x29, 0x17, 0xA3, 0x16, 0xF1, 0x5A, 0xB8, 0x37, 0x2F, 0xBB, 0xA2, 0x16, 0x91, 0x8C, 0xDA, 0xB3, 0x69, 0x89, 0x0C, 0x92, 0x27, 0x6A, 0x3E, 0x96, 0x64, 0x01, 0xD8, 0x06, 0x3C, 0x81, 0xF0, 0x8F, 0x00, 0x93, 0x9F, 0x58, 0x28, 0xB1, 0x11, 0xA7, 0xD1, 0x4C, 0x6C, 0x82, 0xCE, 0x23, 0xE9, 0x53, 0x3D, 0xC1, 0xA8, 0x4D, 0xDF, 0xF6, 0x15, 0xDC, 0x04, 0x74, 0xD4, 0x62, 0xF5, 0x6B, 0x4C, 0x5D, 0xED, 0x28, 0x01, 0xCA, 0xA0, 0xC3, 0xC1, 0x4D, 0xFA, 0xBE, 0x9D, 0x18, 0xFD, 0xD9, 0x2F, 0x99, 0xD4, 0x48, 0x3B, 0xFE, 0xE1, 0xDE, 0x40, 0x27, 0x90, 0x01, 0xF8, 0x02, 0xCA, 0xA7, 0xB8, 0xFC, 0x66, 0xC5, 0x70, 0x6F, 0xCE, 0x9C, 0xB6, 0xD1, 0xFB, 0xA4, 0x0E, 0xD6, 0xB5, 0x70, 0x97, 0x3A, 0xB5, 0x58, 0x99, 0x80, 0xD9, 0x6B, 0x19, 0x27, 0x0D, 0x04, 0xD1, 0x3D, 0xC5, 0xEC, 0x80, 0x04, 0x30, 0x26, 0x45, 0x31, 0xF3, 0x1C, 0x62, 0x19, 0x5F, 0xEC, 0x7F, 0x54, 0xB8, 0x77, 0xF1, 0x14, 0x9F, 0xA0, 0xED, 0xDF, 0x95, 0x39, 0xCF, 0xA5, 0xDC, 0x85, 0x5A, 0x6F, 0x49, 0xE8, 0x79, 0x7B, 0xD3, 0x19, 0x3F, 0x50, 0x56, 0x90, 0x85, 0x61, 0x10, 0x79, 0x5C, 0x3A, 0xE0, 0x9D, 0x39, 0x1B, 0xA1, 0xD3, 0xC2, 0x62, 0xE4, 0x8E, 0x69, 0x8B, 0x3B, 0xB7, 0xAC, 0xA4, 0xEA, 0xE1, 0xC0, 0x26, 0x64, 0x03, 0x47, 0xCF, 0x49, 0xFE, 0xA3, 0x89, 0xF8, 0x4C, 0x59, 0xC2, 0x38, 0x26, 0x89, 0x8C, 0xCF, 0xF4, 0x78, 0x11, 0xF3, 0x0D, 0x53, 0xD8, 0xE1, 0x6F, 0x7A, 0xD2, 0x6A, 0x40, 0x17, 0x61, 0x73, 0x0A, 0xD1, 0x40, 0x08, 0x9F, 0xC6, 0x05, 0xCC, 0x5F, 0x97, 0x04, 0x76, 0xF2, 0xC5, 0x06, 0x4C, 0x81, 0xBD, 0x3E, 0xB3, 0xBB, 0x98, 0xA0, 0x09, 0xD6, 0xEA, 0xED, 0x2C, 0x8A, 0x80, 0x0F, 0x4C, 0x61, 0xDA, 0x61, 0xF8, 0xD5, 0x0E, 0xCB, 0x65, 0x29, 0x44, 0x12, 0x21, 0xD0, 0xF1, 0x69, 0x9A, 0x99, 0xEE, 0x75, 0xF3, 0x46, 0x28, 0x19, 0x58, 0xFE, 0xA5, 0xE2, 0x07, 0x6C, 0xA0, 0x0C, 0x08, 0x42, 0x03, 0xF0, 0xE6, 0x98, 0x7C, 0xBE, 0x79, 0x9F, 0xD8, 0x31, 0x5A, 0x3A, 0x3E, 0xEE, 0x47, 0x51, 0xCB, 0x11, 0x95, 0x26, 0x87, 0xCD, 0x80, 0xE8, 0xEB, 0xB5, 0x3E, 0x05, 0x33, 0xD0, 0xC3, 0x9F, 0x76, 0x82, 0x62, 0x80, 0xD5, 0xEB, 0x9E, 0x50, 0x74, 0x64, 0x91, 0xFC, 0x74, 0x15, 0x74, 0xC0, 0x05, 0x10, 0x07, 0x6C, 0x64, 0x99, 0x13, 0x34, 0x65, 0x23, 0x40, 0x45, 0x17, 0x99, 0x62, 0xBF, 0xD4, 0x95, 0xC8, 0xD8, 0xCB, 0x40, 0xBA, 0x58, 0x17, 0x8A, 0xC1, 0x75, 0xE3, 0xE1, 0x26, 0xBF, 0x91, 0x56, 0xC6, 0x7B, 0x19, 0x11, 0x75, 0x73, 0x20, 0x45, 0xF9, 0xBF, 0xE8, 0x49, 0x30, 0x58, 0x09, 0xB4, 0x13, 0x0B, 0x18, 0x2F, 0xCE, 0xF5, 0x14, 0x91, 0x73, 0x9A, 0xE0, 0x54, 0x67, 0x5C, 0x8F, 0x26, 0x99, 0x8E, 0x9F, 0xC9, 0xE2, 0x99, 0xCD, 0x78, 0x52, 0x3A, 0x19, 0x7D, 0x23, 0x09, 0x23, 0xA6, 0x3D, 0x6B, 0x25, 0x61, 0x84, 0x03, 0x1D, 0xAF, 0x00, 0xB3, 0x1A, 0x70, 0x01, 0x8C, 0x90, 0x8D, 0x53, 0xCA, 0x80, 0x98, 0x23, 0xFE, 0xBD, 0xA8, 0x89, 0x99, 0xB1, 0xCD, 0xDB, 0xDC, 0xC4, 0xC6, 0x51, 0x21, 0x78, 0x44, 0x41, 0x95, 0x3B, 0xA4, 0x96, 0x9B, 0x7E, 0x03, 0xBF, 0xE8, 0x8E, 0xBD, 0xB2, 0x36, 0xD0, 0x76, 0x67, 0xFA, 0xC2, 0x85, 0x91, 0xE9, 0xA9, 0x13, 0x17, 0xC1, 0x67, 0x97, 0x22, 0x36, 0xB0, 0x0C, 0x70, 0x46, 0x29, 0xE5, 0x56, 0x17, 0xD2, 0xE9, 0x64, 0x5C, 0x57, 0x83, 0xF7, 0x94, 0xC0, 0x56, 0x2E, 0x1D, 0x75, 0xF1, 0x86, 0xE0, 0xEF, 0xAC, 0x1F, 0xA8, 0x22, 0x1A, 0x56, 0xFD, 0xB8, 0x4A, 0x04, 0xD0, 0x00, 0xC4, 0x80, 0xDD, 0x80, 0x10, 0xC5, 0x0F, 0x36, 0xBD, 0x09, 0x97, 0xE0, 0xA8, 0x89, 0x08, 0x60, 0xDE, 0xD7, 0xCD, 0x10, 0x5C, 0xEF, 0x5D, 0xC4, 0xCC, 0xD9, 0x6D, 0x37, 0x91, 0x0A, 0xE8, 0x01, 0xF5, 0x68, 0x09, 0x55, 0x02, 0x85, 0x55, 0x83, 0x8C, 0xF2, 0x46, 0x49, 0x52, 0xDF, 0x71, 0x96, 0x40, 0x2E, 0x8E, 0xB3, 0xBC, 0x95, 0x11, 0x0A, 0xA5, 0x18, 0x43, 0xF8, 0xA4, 0x66, 0x10, 0x06, 0x2C, 0x07, 0xAC, 0x68, 0x8A, 0xA7, 0x73, 0xDF, 0x67, 0x1E, 0xCC, 0xF4, 0x11, 0xA4, 0x9B, 0x70, 0xF9, 0xFD, 0xAF, 0xF5, 0x18, 0xC8, 0x24, 0x47, 0x6B, 0x6D, 0xC0, 0x66, 0xD0, 0x1A, 0x60, 0x0D, 0xA4, 0x01, 0x3D, 0x9E, 0x5F, 0x1B, 0x50, 0x05, 0xAA, 0x6E, 0x1D, 0x3B, 0x1E, 0xFC, 0x00, 0x47, 0x72, 0x25, 0x60, 0x05, 0x88, 0x00, 0x36, 0xED, 0x12, 0x4F, 0xCC, 0x02, 0x6B, 0x00, 0x41, 0x8F, 0x1A, 0x5F, 0xF9, 0xCD, 0x00, 0xE7, 0xB6, 0x0C, 0xE6, 0x1D, 0xAD, 0x3F, 0x55, 0xCD, 0x73, 0xDB, 0xB3, 0x8E, 0xF2, 0xFC, 0xA8, 0x6A, 0x3E, 0x09, 0x58, 0x9F, 0x16, 0xFC, 0xAB, 0x3E, 0xE2, 0xDA, 0xC0, 0xAE, 0xA4, 0xE3, 0x67, 0x72, 0x60, 0x35, 0xAB, 0x48, 0x01, 0x58, 0x53, 0x25, 0xD3, 0xCE, 0xE9, 0x14, 0xB2, 0xF3, 0x0D, 0x5F, 0xD9, 0x26, 0x6E, 0xEA, 0xEC, 0x5D, 0x6C, 0xA8, 0x03, 0x19, 0x40, 0x4F, 0xA6, 0x43, 0xBC, 0x89, 0xE7, 0xB6, 0x81, 0x56, 0x20, 0x13, 0xB0, 0x4F, 0x02, 0x8D, 0x7E, 0xDE, 0x10, 0x32, 0x51, 0x4B, 0x94, 0xAC, 0x65, 0xA3, 0x24, 0x2B, 0x13, 0xA6, 0xCD, 0xBA, 0xEF, 0xE4, 0x36, 0xA4, 0x02, 0x73, 0xC5, 0xDE, 0x10, 0x01, 0x63, 0xDD, 0xA8, 0xDD, 0x4D, 0xA9, 0xC9, 0x89, 0xF3, 0x49, 0xC5, 0x7E, 0x5B, 0xA3, 0xE4, 0x06, 0xCC, 0x80, 0xD5, 0xEF, 0x1C, 0xF7, 0xA4, 0x3B, 0xFB, 0xE3, 0xC5, 0x36, 0x5B, 0x0D, 0xD8, 0x83, 0xB9, 0x65, 0x06, 0x8B, 0x67, 0x86, 0xDD, 0x07, 0xCE, 0x94, 0x6F, 0xC7, 0x69, 0x28, 0xA7, 0xFD, 0x28, 0x9A, 0x10, 0x35, 0x10, 0xFB, 0xFC, 0x7C, 0xFA, 0xF1, 0x2B, 0xDD, 0xC0, 0x59, 0x5F, 0x13, 0x32, 0x2F, 0x26, 0x30, 0x2A, 0xD3, 0x71, 0x69, 0x99, 0x1C, 0xC3, 0x9E, 0xA8, 0x15, 0x74, 0xB4, 0x72, 0x54, 0x94, 0xFA, 0xB7, 0xDA, 0x80, 0x49, 0x68, 0xCD, 0x09, 0xA4, 0x2A, 0xE2, 0x62, 0x3F, 0x49, 0x5C, 0x4E, 0x0B, 0x2E, 0xFB, 0x64, 0x76, 0xF8, 0xFE, 0x34, 0x2E, 0xD3, 0x57, 0x37, 0x0C, 0x07, 0x5C, 0x00, 0x4B, 0x60, 0x36, 0x47, 0x67, 0x0B, 0x72, 0x1D, 0xB7, 0x4C, 0x07, 0xE2, 0xE6, 0xD4, 0xE7, 0x49, 0xB8, 0x68, 0x99, 0xC4, 0x90, 0xFB, 0x17, 0x8C, 0xE1, 0xF2, 0xA3, 0xD2, 0xBA, 0x02, 0x75, 0xF6, 0xB0, 0x81, 0x6D, 0x80, 0x10, 0xB3, 0x45, 0x6C, 0x06, 0xB4, 0x02, 0xB5, 0x00, 0x9B, 0x81, 0xBB, 0x81, 0xEF, 0x6A, 0x23, 0x73, 0x4D, 0xD4, 0xFA, 0x57, 0x78, 0x15, 0x12, 0xBF, 0x95, 0x41, 0x5F, 0xDD, 0xFB, 0xD6, 0xB7, 0xC7, 0x16, 0xA4, 0x2D, 0xA3, 0x05, 0x97, 0x2C, 0x36, 0x2E, 0xD3, 0xAF, 0x7F, 0xDF, 0xD6, 0xC9, 0x87, 0x79, 0xAF, 0xD0, 0x25, 0x6F, 0xF0, 0x52, 0x5E, 0x75, 0x57, 0x0B, 0xB0, 0xA7, 0x20, 0x22, 0x88, 0x29, 0xD9, 0x4B, 0x06, 0xD6, 0x4F, 0x6F, 0xB3, 0x32, 0x60, 0xB2, 0x7A, 0xA6, 0x21, 0x57, 0xCD, 0x2F, 0x1B, 0x79, 0x96, 0x6F, 0x50, 0x22, 0x02, 0x28, 0x01, 0x7A, 0x13, 0xFD, 0xAE, 0x59, 0xB6, 0x03, 0xA1, 0x80, 0x2F, 0x60, 0xC7, 0xBF, 0x72, 0x23, 0xAF, 0x18, 0x81, 0xA8, 0x51, 0x4E, 0xD3, 0xD8, 0x98, 0x49, 0x6E, 0xE7, 0xEC, 0xB6, 0x90, 0x7B, 0x65, 0x36, 0xBD, 0x53, 0xB1, 0x16, 0x50, 0xA3, 0xCE, 0x22, 0xE3, 0x03, 0xF0, 0x2E, 0xDA, 0x4F, 0xBF, 0x36, 0x79, 0xBA, 0x5F, 0xC5, 0xA9, 0x82, 0xB5, 0x05, 0xCC, 0x2C, 0xAE, 0x0B, 0x08, 0x1E, 0xA5, 0x8C, 0xC8, 0x70, 0x7B, 0xB2, 0x24, 0x97, 0x0D, 0x9C, 0xDE, 0x8A, 0x1F, 0xFF, 0x0A, 0xBD, 0x62, 0x22, 0xFD, 0x2B, 0x20, 0x5A, 0x35, 0x50, 0xB7, 0x8A, 0x19, 0xB3, 0x3F, 0xAE, 0xF2, 0xF3, 0xF5, 0x2B, 0x5C, 0x9F, 0xF6, 0x48, 0xED, 0x5C, 0x91, 0xCC, 0x06, 0x6C, 0x12, 0xEB, 0x5D, 0xBB, 0x58, 0x00, 0xAB, 0x01, 0x9D, 0x33, 0x6B, 0xA2, 0xB6, 0xD1, 0xD1, 0xC0, 0x0B, 0x9E, 0x7B, 0xDE, 0x28, 0x66, 0x8E, 0x8D, 0xC0, 0x6E, 0x68, 0x1B, 0xD3, 0x10, 0xC9, 0x22, 0xE0, 0xEA, 0x88, 0x19, 0x49, 0xC9, 0xBD, 0xAF, 0xBD, 0xFA, 0x90, 0xDD, 0x46, 0x7C, 0x28, 0x47, 0xE2, 0xB2, 0x8E, 0x58, 0x7C, 0xB1, 0x5F, 0x2D, 0xB2, 0x74, 0xDD, 0x44, 0x23, 0x3F, 0x7D, 0x7F, 0x72, 0x23, 0x08, 0xA3, 0xDE, 0xAC, 0xD1, 0xBC, 0x92, 0x92, 0xD9, 0xBE, 0xAD, 0xD9, 0xD6, 0x49, 0x50, 0xDA, 0x8F, 0x53, 0x14, 0x46, 0x2E, 0x64, 0xA2, 0x4F, 0x1F, 0xB2, 0xAA, 0xB7, 0x72, 0xD9, 0x67, 0xD5, 0xB2, 0x81, 0x5A, 0x40, 0x34, 0xA0, 0x53, 0xBF, 0x2A, 0x80, 0x27, 0x90, 0xD7, 0xED, 0x01, 0x51, 0x13, 0x36, 0x67, 0x31, 0xF8, 0x98, 0x46, 0x21, 0xF7, 0xEA, 0xC9, 0x22, 0x32, 0x34, 0xF5, 0x41, 0x0F, 0xA2, 0x9F, 0xAA, 0xE6, 0xB6, 0xD7, 0x33, 0xD6, 0x0A, 0x9C, 0xA5, 0x94, 0x9E, 0xFC, 0x07, 0xF1, 0x59, 0xE2, 0x12, 0x66, 0x80, 0xEC, 0x67, 0x4D, 0xEC, 0x09, 0xE4, 0x66, 0xD4, 0x26, 0xFB, 0x54, 0xC7, 0xB5, 0x28, 0x80, 0xD1, 0xB5, 0x8C, 0x9F, 0x7E, 0xF4, 0xC6, 0x79, 0xBE, 0xCE, 0x5F, 0x38, 0xE6, 0x9D, 0x53, 0xA1, 0xBB, 0x6E, 0xE3, 0xCA, 0x3A, 0xB9, 0xBA, 0x7B, 0x03, 0x46, 0x04, 0x47, 0xEC, 0x31, 0x16, 0x51, 0x20, 0x0A, 0x70, 0x01, 0xB6, 0xE1, 0x14, 0x27, 0x56, 0x03, 0x32, 0xEB, 0x9C, 0x9E, 0xA8, 0x29, 0x4D, 0x35, 0x9C, 0xCB, 0x1D, 0xB6, 0xF3, 0x59, 0x81, 0x9C, 0xB8, 0x36, 0xAC, 0x26, 0x76, 0x70, 0x2D, 0x23, 0xD8, 0xAC, 0xAD, 0x7C, 0x96, 0x52, 0xFA, 0x2C, 0xDA, 0xB1, 0x5C, 0xBE, 0xFF, 0x53, 0x9E, 0xB2, 0x1E, 0x75, 0x62, 0x7A, 0x61, 0x39, 0xB0, 0x64, 0xDA, 0xFC, 0x4F, 0x86, 0xFE, 0x4C, 0xEF, 0xEF, 0xFA, 0x93, 0x5F, 0xB6, 0x32, 0x14, 0x2A, 0x67, 0x49, 0x6D, 0x36, 0xDB, 0xD0, 0x6F, 0x7B, 0x17, 0x1F, 0x23, 0x1D, 0x2E, 0x04, 0x8E, 0xEF, 0xA2, 0xBD, 0x0E, 0x94, 0x39, 0x0D, 0x48, 0x14, 0x88, 0x4D, 0x4F, 0xE0, 0x06, 0x2A, 0x09, 0x03, 0xBC, 0x01, 0xE1, 0x1B, 0x9A, 0x3F, 0xDB, 0xFC, 0x97, 0x76, 0x4E, 0xD0, 0x0C, 0x73, 0x46, 0x4E, 0x47, 0x6D, 0x63, 0xFD, 0xB9, 0x56, 0xA3, 0x3E, 0xD4, 0x02, 0x61, 0x92, 0xA2, 0xAA, 0xDA, 0xBC, 0x1D, 0xE9, 0x35, 0xA8, 0x2E, 0x70, 0x4C, 0x4F, 0xD0, 0x0F, 0x66, 0x32, 0xAA, 0x19, 0xBB, 0x1A, 0xA3, 0x18, 0x1C, 0x55, 0x02, 0x22, 0xE3, 0x81, 0x05, 0x88, 0xE2, 0x45, 0xE3, 0xEE, 0xF9, 0xC8, 0xDD, 0xF2, 0x2C, 0x20, 0x9D, 0x9A, 0x88, 0xF2, 0x14, 0x0C, 0x31, 0x8C, 0x98, 0x4F, 0xBB, 0xD8, 0x6E, 0x9C, 0x32, 0x91, 0xCC, 0xA9, 0x51, 0xE3, 0xFA, 0x33, 0x64, 0x2C, 0x8C, 0x01, 0x6D, 0xA0, 0xFD, 0x7A, 0x58, 0xE3, 0xC3, 0x30, 0xD8, 0x78, 0xB1, 0x05, 0xB0, 0x06, 0x44, 0x01, 0xC3, 0xFA, 0xEC, 0xDE, 0xD5, 0x1C, 0xB3, 0xE1, 0xDE, 0x68, 0xF3, 0x46, 0x6B, 0xC7, 0x72, 0x64, 0xCD, 0xAB, 0x24, 0xEE, 0xA9, 0xA2, 0xD8, 0x17, 0x1A, 0x23, 0x44, 0xAC, 0x3F, 0x77, 0x7C, 0x73, 0x14, 0xF8, 0x7C, 0x3A, 0xDA, 0x58, 0xF5, 0xAB, 0x30, 0xAB, 0x03, 0x8B, 0x2F, 0x06, 0x21, 0x0A, 0xE8, 0x9E, 0x96, 0xB9, 0xB7, 0xAB, 0x1D, 0xD7, 0xA8, 0x52, 0xA7, 0x5D, 0x80, 0xF5, 0xF5, 0xAC, 0x95, 0xA3, 0x97, 0x34, 0xB1, 0xF7, 0xDD, 0x73, 0xB2, 0x63, 0xE3, 0x63, 0x8C, 0x8F, 0x17, 0x03, 0x93, 0x0C, 0x0C, 0x71, 0x9A, 0x28, 0x71, 0x14, 0x6E, 0x22, 0x1C, 0xF0, 0x02, 0x64, 0x6A, 0x1A, 0x04, 0xD0, 0x7A, 0x5B, 0x10, 0x86, 0x4C, 0xD0, 0x02, 0x8F, 0x09, 0x0B, 0x5A, 0x93, 0x19, 0x96, 0xAA, 0xB7, 0xFC, 0x07, 0x2B, 0x97, 0x64, 0xDB, 0x33, 0xC1, 0x57, 0x26, 0xCD, 0x64, 0xD3, 0x77, 0xD1, 0x9E, 0xB7, 0x32, 0x4E, 0x8C, 0x7F, 0xC8, 0x78, 0xCD, 0x41, 0x8C, 0x05, 0xC6, 0x48, 0x3B, 0x38, 0xEA, 0x1D, 0x48, 0x9E, 0x12, 0x6B, 0xD6, 0x2A, 0x74, 0x98, 0xE2, 0xBA, 0x70, 0x33, 0xBD, 0x23, 0xFD, 0xF6, 0xB1, 0x59, 0xC7, 0x2B, 0x59, 0xFB, 0x35, 0x36, 0x97, 0x31, 0x01, 0x08, 0x9C, 0xD9, 0x7B, 0x71, 0x37, 0x17, 0x6F, 0x2F, 0x79, 0x57, 0x9E, 0x41, 0x2B, 0x2B, 0xDD, 0xFC, 0x0B, 0x09, 0x84, 0x13, 0x02, 0xE8, 0x67, 0x55, 0x5A, 0xEB, 0x1E, 0x71, 0xD1, 0x87, 0x98, 0x25, 0xBE, 0xF7, 0x45, 0x57, 0xCD, 0x4E, 0x1A, 0x3D, 0x17, 0x1C, 0xDF, 0x74, 0x63, 0x09, 0x18, 0x68, 0x59, 0xE3, 0x5D, 0x58, 0x92, 0xFD, 0x42, 0x37, 0xB7, 0xFA, 0xE9, 0x5C, 0x73, 0x5B, 0x91, 0x26, 0xE5, 0x04, 0x2E, 0x78, 0x93, 0x0E, 0x06, 0xE1, 0x40, 0x6F, 0x40, 0xD7, 0xD8, 0x46, 0x01, 0x72, 0x17, 0x99, 0xCE, 0xBB, 0x48, 0x4C, 0x7F, 0x71, 0x5C, 0xF1, 0xEC, 0xEC, 0x7F, 0x3D, 0x84, 0xF8, 0x64, 0xF4, 0x8D, 0x90, 0x9F, 0xF7, 0x6D, 0xFE, 0x8C, 0x55, 0xFF, 0x3E, 0xCB, 0x7B, 0x4C, 0x39, 0xF0, 0x06, 0x03, 0x42, 0x81, 0xA6, 0x13, 0xA4, 0xD1, 0xCC, 0x69, 0x0B, 0xE0, 0xEB, 0x85, 0x3A, 0xB0, 0x13, 0x58, 0x05, 0xC0, 0xDA, 0x3B, 0xEF, 0x1D, 0xAD, 0xB8, 0xF7, 0x95, 0x74, 0xB3, 0x14, 0xA8, 0x3B, 0x3A, 0xB2, 0xC7, 0xD8, 0x2F, 0x70, 0x5F, 0xB9, 0x04, 0xBE, 0x81, 0x6A, 0xE3, 0x45, 0x88, 0xDE, 0x82, 0x40, 0xE5, 0xCD, 0x85, 0x53, 0x7E, 0x06, 0xB3, 0x63, 0xDB, 0x2A, 0x06, 0xEC, 0xF9, 0x8A, 0x19, 0x4F, 0x2D, 0x60, 0x7C, 0xCD, 0x3A, 0xA7, 0x13, 0x3D, 0xA3, 0x14, 0x8C, 0x59, 0xE3, 0x28, 0x59, 0x9D, 0x1E, 0x63, 0x7F, 0x69, 0xF7, 0x4C, 0x26, 0x00, 0x4D, 0x63, 0x18, 0x0F, 0x9E, 0xD9, 0x7F, 0x2E, 0x55, 0x8B, 0xF5, 0xE8, 0xCA, 0x22, 0xCD, 0x02, 0x5C, 0xE0, 0x0B, 0xB0, 0x0D, 0xE8, 0x35, 0x4D, 0x94, 0x88, 0x02, 0xB6, 0xF2, 0x67, 0x44, 0x09, 0x5E, 0x5C, 0x0B, 0x68, 0x9B, 0x98, 0x35, 0xFA, 0x15, 0x47, 0x31, 0x4A, 0x93, 0xEB, 0xC5, 0x0C, 0xD0, 0x10, 0xE4, 0xF1, 0xD8, 0xA6, 0xAD, 0x40, 0x60, 0x94, 0xA7, 0x9D, 0x02, 0x08, 0x7C, 0xAE, 0xDB, 0x96, 0x79, 0xFA, 0x90, 0x52, 0xDA, 0x70, 0xE5, 0x87, 0x9E, 0x80, 0xFC, 0xDE, 0x8E, 0x23, 0xE7, 0xD7, 0x58, 0x06, 0x4C, 0x9F, 0xBA, 0x2A, 0xFC, 0x83, 0xC6, 0x96, 0x3C, 0xAB, 0xE9, 0x5C, 0x13, 0x80, 0x26, 0x5E, 0xC4, 0x29, 0x7D, 0x0C, 0x0F, 0x36, 0x9D, 0x84, 0x44, 0x51, 0x72, 0x13, 0x84, 0x16, 0xB0, 0x82, 0x9F, 0x6F, 0x13, 0x02, 0xD4, 0xFC, 0xCC, 0x00, 0x5B, 0x40, 0xB1, 0x37, 0xFE, 0xBC, 0xD8, 0x05, 0x54, 0x02, 0x59, 0x40, 0x34, 0x90, 0xC7, 0x92, 0x87, 0x31, 0x33, 0x7A, 0x7C, 0xD6, 0xBA, 0x8B, 0x74, 0xDB, 0x52, 0x7F, 0x47, 0x86, 0xFD, 0x83, 0xFA, 0x5D, 0x4E, 0x81, 0x3F, 0x5B, 0xF1, 0x5B, 0x49, 0x6E, 0x06, 0x4B, 0x00, 0x0A, 0x14, 0xFC, 0x7C, 0x63, 0x80, 0x97, 0xB4, 0x15, 0x2A, 0x43, 0xE8, 0x8A, 0xD5, 0x4A, 0xA5, 0x3C, 0xA2, 0x97, 0x72, 0xD1, 0xC6, 0xA0, 0x04, 0xF1, 0x2C, 0xDA, 0x2D, 0x14, 0x46, 0x16, 0x8A, 0xF0, 0x37, 0x60, 0x8B, 0x05, 0xFA, 0x06, 0x48, 0xE2, 0x14, 0x6F, 0x62, 0x03, 0xBA, 0x08, 0x01, 0x64, 0xE0, 0x80, 0x06, 0x21, 0xEF, 0x1B, 0x8A, 0x45, 0xFF, 0x9B, 0x10, 0x01, 0x76, 0x7F, 0x5E, 0x5C, 0x80, 0x2A, 0x11, 0x40, 0xD6, 0xC4, 0x6C, 0x73, 0xA5, 0xAE, 0xB4, 0x31, 0xA2, 0x38, 0x34, 0x99, 0xD2, 0xEE, 0x98, 0xA5, 0x96, 0x43, 0x5F, 0xD0, 0x85, 0xA5, 0x67, 0xF4, 0x2D, 0xFB, 0xB9, 0x19, 0xCB, 0xF9, 0x2E, 0xD8, 0x3D, 0x80, 0xB2, 0x57, 0x0E, 0xF2, 0x02, 0x4C, 0x01, 0x0D, 0xC0, 0x9F, 0x7E, 0x21, 0x79, 0x9A, 0xDB, 0xEB, 0x02, 0x4E, 0xAF, 0xEF, 0xA9, 0x71, 0xD9, 0x6F, 0x86, 0xCF, 0xE2, 0xFB, 0x8A, 0x2F, 0x9E, 0x86, 0xF9, 0xC7, 0x01, 0x11, 0x55, 0x43, 0x57, 0xEB, 0x01, 0x22, 0xDE, 0xB4, 0x05, 0x8D, 0x77, 0xE7, 0x3D, 0x0C, 0x70, 0x07, 0x66, 0x43, 0x3A, 0x6D, 0xCE, 0x04, 0x7C, 0x4E, 0xB1, 0x89, 0x9A, 0xFC, 0x46, 0xAF, 0x4E, 0x3F, 0x2A, 0xDD, 0xBF, 0x7D, 0xD0, 0x5A, 0x81, 0x8D, 0x95, 0xD6, 0xDF, 0x3F, 0x2F, 0x25, 0xD0, 0xAB, 0x22, 0x90, 0x1A, 0x96, 0xC6, 0x68, 0x7D, 0x0D, 0x01, 0x6E, 0x69, 0xD1, 0xD5, 0x1B, 0xC2, 0x88, 0x05, 0xE8, 0x7A, 0x57, 0xCE, 0x4E, 0xE8, 0xD8, 0x40, 0xCA, 0x95, 0xCD, 0x66, 0xFB, 0xAC, 0x8E, 0xAD, 0x80, 0xF1, 0x14, 0xB7, 0x37, 0x6A, 0x63, 0x80, 0xD0, 0x9B, 0x6F, 0xCF, 0xDB, 0x6D, 0x9A, 0x7E, 0x58, 0x94, 0xBF, 0x26, 0xB3, 0x02, 0x88, 0x04, 0xA6, 0xF8, 0xED, 0x24, 0x90, 0x10, 0x69, 0x40, 0x38, 0x30, 0xF9, 0x3E, 0xA5, 0x80, 0x05, 0x10, 0x31, 0xC5, 0x7A, 0x13, 0x35, 0xFD, 0xC5, 0x29, 0x1C, 0x1B, 0xA0, 0x5E, 0x33, 0xD6, 0x58, 0x25, 0xA5, 0x8A, 0xF6, 0x31, 0xEE, 0xF0, 0x80, 0xD6, 0xF8, 0xC5, 0x45, 0x77, 0xFC, 0xA2, 0xB5, 0x27, 0x6A, 0xF1, 0x1D, 0x6B, 0xF5, 0xA6, 0xA6, 0x75, 0x00, 0xE5, 0x40, 0xEC, 0x4F, 0x3D, 0x6B, 0xDD, 0x21, 0x67, 0x3C, 0x8A, 0x29, 0x45, 0x3E, 0x0A, 0xA8, 0x8D, 0x1C, 0x64, 0xC0, 0x88, 0x2E, 0x53, 0xC3, 0xE4, 0xF9, 0xA9, 0xFC, 0xA2, 0x78, 0xB1, 0x7C, 0xC2, 0xFC, 0x96, 0x37, 0xBB, 0x03, 0xD1, 0x40, 0x4D, 0x8A, 0x97, 0x9F, 0x8C, 0x38, 0xC0, 0x0A, 0xD0, 0x98, 0x17, 0x9F, 0xFC, 0xF0, 0xED, 0x80, 0x1E, 0xE7, 0x81, 0x98, 0xA8, 0x19, 0x2E, 0x4D, 0xDB, 0xBF, 0xDB, 0x8B, 0xC6, 0x57, 0xBE, 0xA5, 0x34, 0x25, 0x0D, 0x8D, 0xA6, 0x7F, 0xF2, 0xED, 0x0A, 0x11, 0xA6, 0xBF, 0x7C, 0xAF, 0x50, 0x61, 0xD4, 0x16, 0x03, 0x54, 0x40, 0x13, 0xE5, 0x9F, 0x0F, 0x4A, 0xC8, 0xFA, 0x94, 0x6E, 0xE5, 0x0C, 0xA4, 0xC9, 0x47, 0x7C, 0xDD, 0xAF, 0x84, 0x91, 0x31, 0xBE, 0xA1, 0x09, 0x55, 0x40, 0x46, 0x5B, 0xB2, 0xBB, 0x65, 0xDF, 0xFC, 0xBF, 0x27, 0x59, 0xE9, 0xEA, 0x91, 0x6B, 0x01, 0xBB, 0xDF, 0xEA, 0x5D, 0x2B, 0xA0, 0xFB, 0x55, 0x20, 0xDD, 0x80, 0x75, 0x94, 0x01, 0xA0, 0x9C, 0xA7, 0x9C, 0xA8, 0x39, 0x24, 0x77, 0x6D, 0xCC, 0xEF, 0xB6, 0xD1, 0x04, 0x2F, 0xF8, 0x70, 0x74, 0x16, 0x49, 0x17, 0x77, 0xFF, 0xFC, 0xA8, 0x06, 0x93, 0x2C, 0x04, 0x41, 0xF9, 0xDD, 0xFA, 0x6C, 0x1C, 0xF9, 0xD9, 0x6E, 0xD4, 0x0D, 0x94, 0x01, 0xAC, 0xA6, 0x25, 0x30, 0x9E, 0x9E, 0x0C, 0xEA, 0xC5, 0x53, 0x54, 0xC7, 0x91, 0x0F, 0x90, 0xE2, 0x8B, 0xD7, 0x78, 0xEC, 0xBC, 0x21, 0xF8, 0xF6, 0xF9, 0x67, 0x66, 0x6B, 0x4F, 0x6E, 0xFB, 0xB1, 0xBB, 0x0C, 0x92, 0xD3, 0xAA, 0x66, 0xAF, 0x3B, 0xE9, 0xC7, 0xD8, 0xC6, 0xF2, 0x72, 0x01, 0x29, 0x40, 0x38, 0xA0, 0xFD, 0xCE, 0xBE, 0xA3, 0x80, 0xE2, 0xCC, 0xBC, 0xF7, 0x04, 0x2D, 0xB0, 0x49, 0x16, 0x1B, 0x73, 0xF1, 0x74, 0x34, 0x4D, 0xDC, 0xF1, 0x98, 0x06, 0x57, 0xCA, 0x0F, 0xDB, 0x03, 0xDF, 0x8E, 0xC4, 0x64, 0x8E, 0x4E, 0x3D, 0xC6, 0x94, 0x68, 0xCF, 0x45, 0x34, 0xDF, 0xD2, 0xC4, 0x0E, 0xA8, 0x02, 0xAC, 0x79, 0xB7, 0x20, 0x44, 0x81, 0xC5, 0x53, 0xCE, 0xCE, 0x32, 0x83, 0xB6, 0x92, 0x98, 0x7E, 0xAA, 0x71, 0x53, 0x04, 0xE3, 0xDC, 0xC5, 0x23, 0xDF, 0xB7, 0x1F, 0x4B, 0xE7, 0xBE, 0xD6, 0xB1, 0x7E, 0xFA, 0xF6, 0xE6, 0xA8, 0x65, 0x0A, 0x24, 0x37, 0x42, 0x47, 0x42, 0x10, 0x03, 0xB2, 0x80, 0x68, 0x40, 0x67, 0xF1, 0xBF, 0x00, 0x57, 0x20, 0x79, 0x66, 0xF9, 0x04, 0x2D, 0x31, 0x0B, 0x8F, 0xC2, 0x94, 0xC9, 0x21, 0x0D, 0xCD, 0x6D, 0x77, 0x2F, 0x63, 0x98, 0x9C, 0x52, 0x79, 0xA2, 0x1C, 0x29, 0x7D, 0xDC, 0xF6, 0x67, 0xC3, 0xE0, 0x4D, 0x24, 0xCD, 0x5B, 0x58, 0x04, 0xD7, 0x73, 0xC0, 0x37, 0x20, 0xEB, 0x23, 0x2C, 0x6F, 0x40, 0x93, 0xA7, 0xCC, 0x9A, 0xF5, 0xDC, 0xA2, 0x27, 0x51, 0xCC, 0x3F, 0xFE, 0x87, 0x31, 0x39, 0x6F, 0xF8, 0x2D, 0xC9, 0xB7, 0xDB, 0xE7, 0xED, 0xA7, 0x9A, 0xCA, 0xA7, 0xBF, 0xFF, 0x9B, 0x26, 0xB4, 0x09, 0x55, 0xA0, 0xE6, 0x5B, 0x8A, 0x77, 0xF4, 0x77, 0x03, 0x51, 0xC0, 0xE6, 0x99, 0x49, 0x4C, 0x5F, 0xEB, 0xEA, 0x89, 0x5A, 0xC1, 0x09, 0xCA, 0x37, 0xE6, 0x78, 0x4E, 0x1F, 0xBB, 0x9D, 0x4F, 0x4A, 0xE4, 0xD4, 0xC0, 0xB8, 0xD6, 0xEF, 0x61, 0xD5, 0x79, 0xED, 0x82, 0x99, 0x0D, 0xF3, 0x5A, 0x4F, 0xF4, 0xBD, 0x1F, 0xC1, 0x1F, 0x02, 0xA8, 0x57, 0x58, 0x16, 0x79, 0x6B, 0xF6, 0x83, 0xA7, 0x9C, 0x72, 0xB3, 0x19, 0xAA, 0xE2, 0xFC, 0xC3, 0xF3, 0xA2, 0x23, 0x4E, 0x7C, 0xFB, 0x24, 0xF1, 0x0E, 0x62, 0xDC, 0x83, 0x27, 0xD1, 0x2B, 0x66, 0x1C, 0xF6, 0x4D, 0x3D, 0xCA, 0xC1, 0x49, 0x99, 0x12, 0xA2, 0x26, 0xA7, 0xE1, 0x93, 0x6B, 0x2A, 0xA7, 0xEA, 0x06, 0x50, 0x61, 0x28, 0x37, 0x03, 0x3B, 0xA7, 0xD8, 0x44, 0xAD, 0xB1, 0x2A, 0xD7, 0xA2, 0x0D, 0x78, 0xFC, 0x2E, 0xD0, 0x16, 0x63, 0x26, 0xB1, 0xE0, 0xB7, 0xAC, 0x60, 0x97, 0xAB, 0xC6, 0xCD, 0x14, 0x36, 0x27, 0x1D, 0x33, 0xD6, 0x64, 0xA2, 0xA6, 0x4F, 0xA3, 0x9F, 0x7D, 0x92, 0x37, 0x17, 0xA1, 0x6B, 0x1E, 0xF9, 0x6F, 0x4E, 0x70, 0x12, 0x3E, 0x45, 0xE9, 0x1C, 0x1E, 0x63, 0x70, 0x2D, 0x0D, 0xE8, 0xE8, 0xD9, 0x72, 0xB3, 0xF3, 0xFC, 0x34, 0x8F, 0x90, 0x7C, 0xFB, 0xD7, 0xD5, 0xBA, 0x41, 0xD0, 0xFF, 0x6B, 0x60, 0xB1, 0xDE, 0x1C, 0x05, 0x53, 0x4A, 0x45, 0x02, 0xD4, 0x74, 0xAC, 0x17, 0x40, 0xEA, 0x93, 0x0D, 0xE3, 0xAF, 0x9A, 0xE4, 0x93, 0x41, 0x37, 0xB7, 0x35, 0xA7, 0x1E, 0x53, 0x86, 0xBD, 0xDC, 0x6C, 0x58, 0x2E, 0x5E, 0x5B, 0x6F, 0xB8, 0x28, 0x05, 0x7E, 0x75, 0x14, 0x2B, 0xF1, 0x6B, 0x16, 0xEB, 0xEC, 0x59, 0x40, 0x19, 0xF2, 0xB1, 0xAF, 0xD9, 0x4C, 0x05, 0xBA, 0xFD, 0x22, 0x47, 0x6A, 0x77, 0xBB, 0x3D, 0x88, 0xEC, 0xE8, 0x64, 0xDD, 0x78, 0x71, 0x3E, 0xD2, 0x18, 0x71, 0x9A, 0x01, 0xCE, 0xFF, 0x37, 0x46, 0xB0, 0x74, 0x0A, 0xF6, 0x7C, 0x7B, 0x06, 0x80, 0x88, 0x8C, 0x6E, 0xB9, 0x29, 0x90, 0x05, 0xCE, 0x34, 0x3E, 0x0B, 0x6C, 0xF6, 0xE4, 0x39, 0x47, 0xB5, 0x5F, 0x21, 0x28, 0x50, 0xD3, 0xFE, 0x7C, 0xCF, 0x9E, 0xFC, 0x8B, 0xED, 0xFC, 0xD9, 0x02, 0xDC, 0x80, 0x9C, 0x1D, 0x7A, 0x9D, 0xA0, 0x6D, 0x7A, 0x30, 0x6C, 0xA4, 0x3A, 0xAC, 0x40, 0xDA, 0x05, 0x26, 0xB5, 0x5B, 0xB7, 0x43, 0xB0, 0xDC, 0xC5, 0x6E, 0x3C, 0x6C, 0x45, 0x1B, 0xD0, 0x6E, 0xE3, 0x9B, 0x70, 0xF5, 0x4C, 0xEC, 0xA7, 0xF5, 0x96, 0x18, 0x85, 0x59, 0x3F, 0x6D, 0x9C, 0x5A, 0x81, 0xFD, 0x03, 0x75, 0x2B, 0xA1, 0x92, 0x23, 0x76, 0x4A, 0x81, 0xB4, 0x47, 0x0F, 0x04, 0x7A, 0x53, 0x12, 0x5B, 0x63, 0x03, 0x39, 0x6D, 0xC9, 0x81, 0x9D, 0x80, 0xC6, 0xED, 0x5F, 0xCF, 0xD8, 0x19, 0x1F, 0xBC, 0xE3, 0xB2, 0x36, 0x6D, 0x31, 0xAC, 0x99, 0x2D, 0xC2, 0x04, 0x08, 0x47, 0x62, 0x3A, 0x72, 0x47, 0x14, 0xF0, 0x04, 0xC2, 0xDF, 0x23, 0x6D, 0xC2, 0x00, 0xA7, 0x7A, 0xA2, 0x3E, 0x41, 0x13, 0xFA, 0x15, 0x18, 0x1D, 0xA4, 0x8A, 0x7B, 0x48, 0xD8, 0x1F, 0xAE, 0x95, 0x6C, 0x9D, 0x1B, 0xF8, 0x9D, 0xBB, 0xB0, 0xD1, 0x1F, 0x4D, 0xB7, 0xCB, 0x57, 0x1D, 0x3A, 0x99, 0x6F, 0x23, 0x35, 0xF7, 0xF4, 0xC8, 0x7E, 0x7B, 0xA7, 0xAD, 0xE0, 0x67, 0xD8, 0xFC, 0x99, 0x52, 0xE1, 0x0A, 0x1C, 0xB9, 0xCC, 0x27, 0xA2, 0xF7, 0x25, 0xD1, 0x14, 0x35, 0xAC, 0xD8, 0x3E, 0x9D, 0xA7, 0x78, 0x20, 0x04, 0x9B, 0xEA, 0xD7, 0xE8, 0x4F, 0xAB, 0x70, 0xE6, 0xA6, 0xC6, 0xD4, 0x4E, 0x29, 0x55, 0x46, 0x10, 0x60, 0x3B, 0xE5, 0x00, 0x62, 0xF4, 0x27, 0x05, 0x72, 0x03, 0xDD, 0x84, 0x03, 0x25, 0x40, 0x38, 0xB1, 0x08, 0xDA, 0x55, 0x6B, 0x4E, 0xCC, 0x14, 0xA5, 0xB7, 0x2D, 0x34, 0x7F, 0x49, 0x8C, 0x10, 0xEF, 0xDF, 0x53, 0xC9, 0x2D, 0xF0, 0x31, 0x25, 0x20, 0xC8, 0x05, 0x33, 0xC1, 0xD1, 0x9C, 0xF7, 0x3C, 0x00, 0x12, 0xE0, 0x33, 0x91, 0xA1, 0x1B, 0xBD, 0x5A, 0x8B, 0x6B, 0xF8, 0x31, 0x60, 0x9E, 0xB2, 0xA9, 0xE2, 0x95, 0x97, 0xA7, 0x9D, 0x5F, 0xF2, 0xA8, 0x8A, 0x2A, 0x64, 0x5C, 0xDD, 0x91, 0x0F, 0xBC, 0xDB, 0xB1, 0xD7, 0xA8, 0x38, 0xA5, 0x03, 0x4B, 0x00, 0xD1, 0xB9, 0xAC, 0x10, 0xBA, 0x1C, 0xD5, 0x2C, 0x28, 0xB0, 0x8C, 0x20, 0xC7, 0x80, 0x08, 0x91, 0x35, 0xCD, 0x87, 0x80, 0x8A, 0xF1, 0x35, 0x24, 0x1C, 0x58, 0x4D, 0x18, 0xA1, 0xC0, 0x4E, 0x20, 0x65, 0x62, 0x66, 0x78, 0xB6, 0xF8, 0x86, 0x48, 0x5F, 0x82, 0xBB, 0x5D, 0xC8, 0xD3, 0x85, 0xCB, 0x44, 0x50, 0xA7, 0xD7, 0x9B, 0xF7, 0xC5, 0x9F, 0x3A, 0x34, 0x7E, 0xC1, 0x8B, 0x38, 0x29, 0xAF, 0x3D, 0x96, 0x38, 0x93, 0xF1, 0x32, 0x7E, 0x2E, 0x0D, 0xE8, 0xC6, 0x8B, 0x5B, 0x39, 0x5B, 0x34, 0x60, 0x8A, 0xD8, 0xDD, 0x18, 0xD6, 0x66, 0xFD, 0x22, 0x6F, 0x29, 0xD3, 0xDC, 0x5C, 0x74, 0x0A, 0xF3, 0x78, 0x4A, 0x30, 0xC8, 0x84, 0x39, 0x5E, 0x0C, 0xBE, 0x6F, 0xDA, 0x56, 0x34, 0x47, 0xDD, 0xF4, 0xA3, 0xC9, 0x91, 0x18, 0x8D, 0x5A, 0x66, 0x02, 0xE9, 0x53, 0xE2, 0x3A, 0x1E, 0x92, 0x38, 0xEA, 0x06, 0x52, 0x00, 0xDB, 0x80, 0x2C, 0x40, 0x6D, 0x46, 0xEB, 0xC4, 0xCC, 0x9F, 0x1C, 0x78, 0x33, 0x3C, 0x1F, 0x2D, 0x1B, 0x7A, 0xC5, 0x36, 0xA8, 0x51, 0xDD, 0x68, 0x48, 0x6D, 0x58, 0x2D, 0x38, 0x54, 0xC8, 0xB4, 0xDB, 0x86, 0x51, 0x28, 0x7A, 0x4F, 0x89, 0xCD, 0x0C, 0x22, 0xB7, 0xF3, 0xD7, 0xF7, 0x0F, 0x50, 0xBF, 0x58, 0xBE, 0x76, 0x75, 0x55, 0x2E, 0x4B, 0x9C, 0xD3, 0x75, 0xF7, 0xE3, 0x24, 0xAA, 0x09, 0xB4, 0x02, 0xEA, 0x80, 0x34, 0x10, 0x0B, 0xA8, 0x3D, 0x17, 0xDE, 0x1D, 0x13, 0xFC, 0x72, 0x92, 0x8F, 0xE8, 0xE4, 0xFC, 0xB5, 0xA8, 0x2A, 0x41, 0x8D, 0x02, 0x2A, 0x21, 0x51, 0xF9, 0x06, 0xBA, 0xA0, 0x5B, 0xED, 0x04, 0x54, 0x01, 0x5F, 0x40, 0x06, 0x04, 0xAB, 0x2D, 0x80, 0x2E, 0x80, 0x56, 0xCB, 0x93, 0x67, 0x20, 0xBA, 0x1A, 0x39, 0xA3, 0x92, 0x8D, 0x96, 0xAD, 0xB5, 0xE1, 0xA3, 0xD9, 0x0D, 0x57, 0xE6, 0x4C, 0xF8, 0x37, 0xBB, 0x41, 0x40, 0x6C, 0xFA, 0x8C, 0xF1, 0xAA, 0xF4, 0x6B, 0x4F, 0xBB, 0x67, 0x50, 0xF0, 0xCF, 0xC7, 0xB4, 0x35, 0xD7, 0xF3, 0x59, 0xAC, 0x28, 0x27, 0x36, 0xFC, 0xA2, 0x57, 0xE0, 0x94, 0x5C, 0x80, 0xD5, 0xB8, 0x8E, 0xE3, 0x67, 0xBD, 0x70, 0xE6, 0xE6, 0x91, 0x2B, 0xB1, 0x80, 0x6C, 0xA0, 0x13, 0xA7, 0x34, 0x73, 0xAB, 0xF5, 0x87, 0xA2, 0xCE, 0x26, 0x8C, 0x88, 0xE3, 0xC5, 0x0A, 0x06, 0x26, 0xF1, 0x05, 0x56, 0x31, 0x30, 0x98, 0xA2, 0x42, 0x67, 0xDB, 0x80, 0x25, 0x10, 0x1B, 0x48, 0x8A, 0x68, 0xCB, 0x01, 0x25, 0x3C, 0x20, 0xEF, 0xAD, 0x35, 0x41, 0x4B, 0x7E, 0x9D, 0x05, 0x3D, 0xF0, 0x78, 0x27, 0x6C, 0x88, 0x07, 0x55, 0x4C, 0x05, 0x17, 0xD8, 0x14, 0xA0, 0xA9, 0xB1, 0xF4, 0xDE, 0xEC, 0x89, 0xF4, 0x4D, 0xF0, 0xFE, 0x61, 0x42, 0x19, 0xC7, 0x79, 0x50, 0x09, 0x89, 0x5B, 0x40, 0x78, 0x73, 0x7E, 0x12, 0x50, 0x62, 0xE6, 0xAD, 0x7B, 0x66, 0xAA, 0x9B, 0x6F, 0x2F, 0xFE, 0xAC, 0x81, 0x1D, 0x33, 0x0D, 0x04, 0x34, 0x00, 0x0A, 0x47, 0xC4, 0xD1, 0xD2, 0xEC, 0x14, 0x0C, 0x9C, 0x2A, 0xAC, 0x7E, 0x2B, 0x89, 0xF3, 0x87, 0x3E, 0xCB, 0xDA, 0xED, 0x40, 0x14, 0xE0, 0xC4, 0xCC, 0x70, 0xE3, 0x93, 0x1E, 0x6C, 0x6B, 0x7A, 0x02, 0x4C, 0xD4, 0x8A, 0x6D, 0x20, 0xE2, 0xBF, 0xE2, 0x2E, 0x54, 0xFF, 0x56, 0x9B, 0x71, 0xFD, 0xC1, 0x56, 0x77, 0xA1, 0x5C, 0xB2, 0x16, 0x64, 0x8E, 0xC0, 0x42, 0x20, 0xBF, 0x0B, 0x82, 0xC9, 0x81, 0xF1, 0x78, 0x7D, 0xDC, 0x3A, 0xFF, 0x25, 0x73, 0x14, 0x20, 0xFB, 0x23, 0x73, 0xC4, 0x1B, 0x3C, 0x55, 0x86, 0x79, 0x54, 0x37, 0x79, 0x4D, 0x64, 0x64, 0xBD, 0x66, 0x7D, 0x93, 0xE0, 0xE2, 0x8F, 0xB1, 0xC0, 0xB1, 0x90, 0xB4, 0xD3, 0xB0, 0x44, 0x15, 0xC8, 0x59, 0xE9, 0x07, 0x10, 0xCF, 0x62, 0x81, 0xD9, 0xDF, 0xB7, 0x28, 0x3B, 0xF4, 0xB3, 0xE3, 0x98, 0x40, 0x25, 0x4F, 0x89, 0x89, 0x5A, 0x43, 0x70, 0x17, 0xFB, 0x8D, 0x66, 0xEB, 0x7E, 0xE4, 0x5B, 0xF5, 0x9F, 0x1E, 0xE9, 0xBF, 0xD4, 0x35, 0xB8, 0x70, 0x62, 0x7F, 0xA0, 0xAA, 0x27, 0xA7, 0xEF, 0x95, 0xD4, 0xF6, 0x47, 0x1C, 0x72, 0x05, 0x8A, 0x88, 0xFA, 0x68, 0x69, 0xC4, 0x32, 0xC2, 0xDF, 0xB4, 0xAB, 0x3D, 0xC3, 0xB1, 0x71, 0x14, 0x8C, 0xA8, 0x36, 0x4F, 0x29, 0xC0, 0x5F, 0x43, 0xBE, 0xB3, 0x0E, 0x89, 0xFE, 0x2C, 0xC6, 0x64, 0x8F, 0x1D, 0xC3, 0xEB, 0x59, 0x55, 0x3E, 0x95, 0x82, 0x40, 0xE8, 0xC7, 0x13, 0xC6, 0x81, 0x22, 0xDC, 0x80, 0x25, 0x6F, 0x43, 0xB5, 0xE2, 0x8B, 0x35, 0x51, 0x0B, 0xDE, 0x5B, 0x35, 0xD0, 0x83, 0xCF, 0xE2, 0xA9, 0x98, 0x4D, 0x15, 0x74, 0x36, 0xAD, 0xFC, 0x1D, 0x2D, 0xEC, 0xDE, 0xD5, 0x56, 0x3B, 0xD1, 0xFA, 0xB1, 0xBE, 0x15, 0xB3, 0xF9, 0x0E, 0xAB, 0x24, 0x62, 0xBF, 0x32, 0xF7, 0xC4, 0xB7, 0x8D, 0x90, 0xFB, 0x06, 0x3B, 0x85, 0xC2, 0x6B, 0x06, 0x19, 0x43, 0xB2, 0x7A, 0x4E, 0x79, 0x63, 0xBF, 0x1B, 0x30, 0xBD, 0xD7, 0x39, 0x24, 0x02, 0xAE, 0xF1, 0xF5, 0x36, 0x3E, 0x88, 0x33, 0x74, 0x76, 0x02, 0xAE, 0x6F, 0x71, 0xD4, 0x94, 0x10, 0xB9, 0x00, 0xE6, 0xEF, 0x02, 0x3E, 0xFC, 0x5D, 0xAD, 0xCE, 0xCF, 0xEC, 0x44, 0x6D, 0xFF, 0x66, 0x53, 0x6E, 0x89, 0x27, 0x2E, 0xA7, 0x90, 0x3B, 0x03, 0x42, 0x87, 0x07, 0x57, 0xAB, 0xC1, 0xCE, 0x50, 0x06, 0xBD, 0xA1, 0xE3, 0x36, 0x81, 0x0E, 0xFB, 0x18, 0xE9, 0x88, 0xCF, 0x92, 0x3B, 0x5F, 0x75, 0xC8, 0xFB, 0x35, 0xF9, 0x59, 0xFE, 0x31, 0x2F, 0x5B, 0x3C, 0x7A, 0x9C, 0x2A, 0x62, 0xDE, 0x77, 0x46, 0x80, 0x0A, 0x4E, 0x91, 0xAB, 0x65, 0xC0, 0x10, 0x1C, 0xB0, 0xBC, 0xA5, 0xAE, 0x85, 0xA3, 0xA3, 0x0E, 0x71, 0xCE, 0x23, 0x5C, 0xAA, 0x5F, 0x79, 0x47, 0x14, 0xA8, 0xE6, 0x62, 0x23, 0x66, 0xFF, 0x9D, 0x98, 0xC4, 0x84, 0x02, 0x3C, 0x01, 0x5D, 0x00, 0x92, 0x84, 0x37, 0x80, 0xA0, 0x09, 0x12, 0x45, 0xC4, 0xF0, 0x6C, 0x4F, 0xAC, 0x01, 0x64, 0xCB, 0xE3, 0xD2, 0xE1, 0xBD, 0xB1, 0x1C, 0x16, 0x9B, 0x32, 0xA6, 0xD7, 0xB4, 0x29, 0x3F, 0x42, 0xA4, 0xEA, 0x04, 0xA1, 0xDE, 0x24, 0x84, 0x7A, 0x7A, 0x34, 0xF8, 0x59, 0xCD, 0x1F, 0x1F, 0x38, 0x1E, 0xC9, 0x1A, 0xC1, 0x6C, 0xAC, 0x48, 0x81, 0x79, 0xD1, 0xEA, 0x76, 0x39, 0x30, 0x1E, 0x61, 0xFC, 0x02, 0xCD, 0x53, 0x28, 0xC2, 0xC5, 0xB1, 0x6F, 0x5F, 0xFC, 0x4C, 0xD4, 0x0E, 0xD7, 0xDB, 0xC9, 0x38, 0x9A, 0x93, 0xEC, 0x60, 0xF7, 0xD6, 0x05, 0x74, 0x10, 0x0A, 0x44, 0x03, 0x12, 0x38, 0x93, 0x3F, 0x63, 0x96, 0xF8, 0xD5, 0xBC, 0x43, 0x61, 0x56, 0xBF, 0x0D, 0x73, 0x83, 0x51, 0x87, 0xA4, 0x70, 0xB3, 0xD0, 0xC6, 0xC7, 0x94, 0x84, 0xF4, 0x82, 0x47, 0x68, 0x48, 0xF5, 0xD3, 0x5E, 0x30, 0xF4, 0xAB, 0x0E, 0xF9, 0x9B, 0x6F, 0xE8, 0x1F, 0xF3, 0xDE, 0x25, 0x6F, 0x7D, 0xFE, 0xB9, 0xFD, 0x8F, 0x48, 0x74, 0x85, 0xB6, 0x5B, 0x5A, 0x9B, 0x23, 0xBB, 0x8D, 0x80, 0xB4, 0x01, 0x99, 0x07, 0x45, 0x02, 0xA7, 0x29, 0xF4, 0x66, 0x44, 0x63, 0x1C, 0x41, 0xE2, 0xDA, 0x93, 0x38, 0x80, 0x91, 0x07, 0xA4, 0xCE, 0x32, 0x17, 0xF1, 0x95, 0x04, 0x72, 0xA0, 0x80, 0x39, 0xB0, 0x78, 0x66, 0x0A, 0x80, 0xA5, 0xF3, 0xD5, 0xD4, 0xC2, 0x90, 0x10, 0x59, 0x86, 0xE9, 0x52, 0xEC, 0x1F, 0xCA, 0xF6, 0x93, 0xA4, 0x16, 0xAB, 0xA0, 0x70, 0xC1, 0x19, 0x77, 0xD7, 0xAA, 0x9F, 0xA6, 0x56, 0xDF, 0xA8, 0x89, 0xBE, 0xE6, 0xDE, 0xAD, 0x6F, 0xFA, 0x9E, 0x37, 0xB0, 0x9A, 0x91, 0xE1, 0x29, 0x15, 0x37, 0xB0, 0xF8, 0xEF, 0x19, 0xAE, 0x29, 0xE8, 0x54, 0x40, 0xE5, 0xAF, 0x22, 0xAE, 0x8E, 0xFA, 0xD6, 0x0D, 0x88, 0x11, 0xCA, 0xA8, 0x8D, 0x74, 0x89, 0xE0, 0x8D, 0xE4, 0xBA, 0x8F, 0x9A, 0xBB, 0x37, 0x50, 0x14, 0x48, 0x44, 0x81, 0x96, 0x37, 0x5D, 0xCB, 0x0C, 0x50, 0x62, 0x12, 0x90, 0xAC, 0x81, 0xBD, 0x01, 0xB5, 0x39, 0x73, 0xA2, 0xE6, 0xC8, 0x39, 0xD8, 0x82, 0x4D, 0x67, 0x2E, 0x2B, 0xC2, 0xF5, 0xF7, 0x69, 0xAD, 0x92, 0xA9, 0x75, 0x85, 0x87, 0xC8, 0xDA, 0x90, 0x5F, 0x11, 0xD1, 0xEA, 0x7F, 0xA4, 0x91, 0xDA, 0x29, 0x62, 0xCB, 0xE3, 0xAF, 0x94, 0x84, 0x30, 0x08, 0x36, 0x73, 0x2A, 0x9C, 0x22, 0x6F, 0x73, 0xBC, 0x98, 0xBC, 0xC8, 0x35, 0xE6, 0xD3, 0x81, 0xA3, 0x9C, 0x46, 0x52, 0x73, 0xCA, 0x7D, 0x43, 0x1D, 0xD7, 0xFD, 0x3E, 0x55, 0xD9, 0x93, 0xAB, 0x64, 0xE3, 0xF5, 0x74, 0x5B, 0x80, 0xE1, 0x8B, 0xC1, 0x08, 0x22, 0x7A, 0x04, 0x6E, 0x7F, 0x93, 0xAA, 0x7A, 0x90, 0x40, 0x3A, 0x60, 0x0B, 0xD8, 0x01, 0x8C, 0xA4, 0x22, 0x35, 0x51, 0xE3, 0x92, 0xDC, 0x36, 0xEA, 0x66, 0x97, 0xC3, 0xA6, 0x14, 0xE6, 0x1C, 0x7B, 0xF4, 0xF8, 0xD4, 0x64, 0xCA, 0xBD, 0xC2, 0x8B, 0xCB, 0x7D, 0x12, 0x21, 0x5F, 0x73, 0xEF, 0xE3, 0x60, 0xAC, 0x33, 0x20, 0x26, 0x78, 0x40, 0x2D, 0xE0, 0xB8, 0x71, 0x11, 0xD2, 0xC0, 0x22, 0x7A, 0x8A, 0x30, 0x27, 0x09, 0x5D, 0x4F, 0xFB, 0x75, 0x46, 0xBB, 0x1E, 0x0F, 0x25, 0x67, 0xD4, 0xA2, 0x88, 0xF5, 0x58, 0xD5, 0x1B, 0xF7, 0x3C, 0x67, 0x23, 0x00, 0xB7, 0x7A, 0xEC, 0x38, 0x10, 0xB1, 0x81, 0x8E, 0x11, 0x2B, 0xA7, 0x42, 0x17, 0x28, 0x22, 0x1D, 0x30, 0xE2, 0x78, 0x2F, 0x25, 0x70, 0x4E, 0x89, 0x89, 0x5A, 0xB2, 0x55, 0x85, 0xD2, 0x3A, 0xB5, 0x98, 0x1A, 0xA8, 0xEC, 0x95, 0x68, 0xC7, 0x11, 0x45, 0x12, 0x25, 0x66, 0x3B, 0xA7, 0xC1, 0xA0, 0xC9, 0x27, 0x21, 0xF2, 0xEC, 0xED, 0xD6, 0x1A, 0xC5, 0x95, 0x37, 0x96, 0x06, 0x5E, 0xF7, 0x24, 0xEA, 0x0C, 0xF0, 0x4B, 0x00, 0x36, 0xE1, 0x3A, 0x3F, 0xE3, 0xFB, 0x02, 0x90, 0xE2, 0xA7, 0x36, 0xFE, 0x8C, 0xC0, 0x11, 0xE5, 0x1B, 0x66, 0x7C, 0x52, 0x90, 0xBC, 0xCE, 0x2F, 0x2C, 0x00, 0x3C, 0x2D, 0xCE, 0xF3, 0x54, 0x07, 0xED, 0x0D, 0x34, 0x35, 0xAB, 0xA4, 0xB6, 0x66, 0x05, 0x54, 0x02, 0x6D, 0x40, 0x15, 0x90, 0x4E, 0x08, 0xD0, 0x42, 0x6D, 0xAD, 0x27, 0x68, 0xB8, 0xFA, 0xA6, 0xBE, 0x32, 0xC5, 0xB1, 0x7F, 0xA5, 0x23, 0xDF, 0x4E, 0xDE, 0x57, 0xA2, 0x1C, 0x2C, 0x1B, 0x31, 0xDF, 0xF1, 0xA4, 0xA9, 0x6D, 0x20, 0xF6, 0x75, 0x67, 0x1F, 0xEF, 0x06, 0x5D, 0xA7, 0xAC, 0x2B, 0x16, 0x8E, 0x4E, 0x29, 0x5C, 0xDD, 0xAB, 0x06, 0x57, 0x14, 0x8E, 0x74, 0x4E, 0xB9, 0x35, 0x69, 0xC6, 0x1D, 0xB9, 0xE9, 0xB4, 0xB5, 0xCF, 0xEF, 0x6C, 0x07, 0x76, 0x03, 0x9E, 0xD7, 0x05, 0x56, 0xA8, 0x64, 0xF0, 0x45, 0x67, 0x6D, 0x75, 0xEC, 0xA3, 0xFE, 0xD4, 0x0F, 0x98, 0x3F, 0xA2, 0x35, 0x17, 0xF3, 0x63, 0x9C, 0xE8, 0x20, 0x12, 0x28, 0x07, 0x42, 0x01, 0x7F, 0x8E, 0x90, 0x95, 0xC5, 0x98, 0x35, 0xFB, 0xC8, 0x0B, 0xED, 0x66, 0x0D, 0xC9, 0xDE, 0x5B, 0xB0, 0x46, 0x71, 0xC7, 0x08, 0xD3, 0xCD, 0x84, 0xC4, 0x8D, 0x5D, 0x33, 0x89, 0x9B, 0x44, 0x9A, 0x33, 0xD0, 0xA6, 0x10, 0xA2, 0x72, 0xB6, 0x3F, 0xEF, 0x62, 0xEE, 0xB6, 0x4E, 0x6D, 0x2E, 0x02, 0x3B, 0x5F, 0xB7, 0x0E, 0x1D, 0x0B, 0x0F, 0x9F, 0x45, 0x20, 0x47, 0x58, 0x10, 0xE3, 0x97, 0x71, 0x7F, 0xB6, 0xFB, 0xEC, 0x18, 0xA5, 0x0F, 0x70, 0x8A, 0xE4, 0x6C, 0xDA, 0x21, 0xCA, 0xBA, 0x6E, 0x61, 0x56, 0x31, 0xAE, 0x70, 0x06, 0x64, 0xFA, 0x1F, 0x50, 0x3F, 0x6C, 0x2A, 0x4B, 0x90, 0xD3, 0x00, 0xC5, 0x8B, 0xED, 0x40, 0x04, 0x60, 0x09, 0x44, 0xE2, 0x94, 0x93, 0xD5, 0x91, 0x33, 0x23, 0x6E, 0xAA, 0xE2, 0xC1, 0x2F, 0x77, 0xE6, 0x6A, 0x4C, 0x5A, 0x5C, 0xC9, 0xAC, 0xE3, 0x98, 0x86, 0x94, 0x8F, 0xE4, 0xFD, 0xDD, 0x27, 0xC8, 0xA9, 0x54, 0x6D, 0x8E, 0x9F, 0x18, 0x79, 0x7A, 0x1A, 0xD8, 0xC4, 0x7D, 0x2C, 0xE9, 0x71, 0x95, 0x2A, 0xB9, 0x66, 0x68, 0xC6, 0x6B, 0x6E, 0x66, 0x5E, 0x71, 0x6C, 0xCC, 0xD4, 0x6E, 0x24, 0xA7, 0x58, 0x60, 0x9F, 0xB7, 0x6F, 0xFE, 0x4E, 0x9F, 0x1E, 0xF7, 0xFC, 0x9C, 0x93, 0xCA, 0xB8, 0x27, 0xFF, 0x8F, 0xBD, 0xCE, 0x8D, 0x5A, 0xD4, 0x74, 0x37, 0x53, 0x9F, 0xAC, 0x37, 0xA0, 0x1A, 0x68, 0x05, 0x4A, 0x00, 0x0F, 0xC0, 0x04, 0x88, 0x1F, 0xA0, 0x36, 0x33, 0x68, 0x9B, 0x82, 0xAD, 0x42, 0x95, 0x13, 0xC3, 0xDB, 0x45, 0xE1, 0x8E, 0x90, 0xAC, 0x70, 0x2C, 0xA7, 0xB1, 0xD6, 0x66, 0x0E, 0xBB, 0x60, 0x9D, 0xFE, 0xAF, 0x8D, 0x76, 0xC9, 0xCF, 0xAA, 0xE0, 0x60, 0xDF, 0x9C, 0x12, 0x3D, 0x8D, 0x06, 0xA2, 0x01, 0xD1, 0x29, 0x8C, 0xE2, 0x99, 0x3E, 0x46, 0x1C, 0x80, 0xF1, 0xC5, 0x6A, 0x60, 0x9D, 0x7B, 0x3D, 0xB0, 0x37, 0x70, 0x1C, 0x22, 0xA6, 0x4C, 0x7B, 0xD2, 0xB9, 0xFB, 0x6F, 0xBA, 0x6A, 0xD3, 0x38, 0xC9, 0x8F, 0xD2, 0xBB, 0xE3, 0xCD, 0x53, 0x5D, 0x05, 0x04, 0x91, 0x02, 0xB8, 0x01, 0xA2, 0xC0, 0x22, 0xC4, 0x99, 0xC0, 0x99, 0x13, 0x34, 0x41, 0xA5, 0xBB, 0x6D, 0xEC, 0xE9, 0x2C, 0xAA, 0xB9, 0x9D, 0x27, 0x8B, 0xD4, 0xE2, 0x94, 0xF9, 0x2D, 0x15, 0xAC, 0x26, 0xB4, 0x7F, 0x92, 0x5B, 0xCE, 0x04, 0x0D, 0x38, 0x79, 0x3F, 0xCD, 0x7D, 0x10, 0xDB, 0x94, 0x5C, 0x85, 0x5B, 0x42, 0xF3, 0x76, 0xE7, 0x24, 0xBB, 0xA6, 0x0B, 0xEC, 0x34, 0x69, 0x06, 0xA6, 0x83, 0xD5, 0x14, 0xD6, 0x5A, 0x01, 0x6B, 0xB4, 0xDD, 0xC9, 0xD1, 0x15, 0x40, 0x65, 0xE2, 0x82, 0x23, 0x69, 0x9C, 0x99, 0x53, 0x05, 0x59, 0xD4, 0x37, 0x95, 0x3A, 0x2C, 0x65, 0x6A, 0x31, 0xDE, 0xCB, 0x98, 0x3F, 0x38, 0x37, 0x2A, 0xDB, 0xB8, 0x43, 0xED, 0x05, 0x58, 0x03, 0x2E, 0x80, 0x05, 0xA0, 0x03, 0x05, 0x2C, 0x99, 0x07, 0xD8, 0x13, 0xB3, 0x6B, 0x6D, 0xB8, 0xE1, 0x11, 0x36, 0x69, 0x4A, 0xF3, 0x62, 0x38, 0x36, 0xA4, 0xBC, 0x4E, 0xA1, 0xA4, 0x40, 0xF1, 0xE0, 0x02, 0x8A, 0xAE, 0x90, 0xA3, 0x80, 0xCF, 0x56, 0xF8, 0x34, 0xEA, 0x77, 0x66, 0x47, 0xBB, 0xF1, 0xF2, 0x50, 0x1E, 0x6D, 0xC6, 0x73, 0x8A, 0x67, 0xF3, 0xEC, 0xB4, 0xE4, 0x3C, 0xDF, 0x12, 0xA7, 0xAC, 0x02, 0x76, 0xB3, 0xF5, 0x58, 0x00, 0x5B, 0x00, 0x6B, 0x20, 0xED, 0x6E, 0xB8, 0x30, 0x59, 0x36, 0x1C, 0x21, 0x4F, 0x7A, 0xAE, 0xD5, 0x78, 0x70, 0xF2, 0x7A, 0x2A, 0xF8, 0x25, 0x40, 0x60, 0xDC, 0x40, 0x33, 0x71, 0xD0, 0x15, 0x28, 0x9D, 0x5E, 0x3E, 0x80, 0x10, 0x18, 0x05, 0xBF, 0xDB, 0x06, 0x20, 0xC0, 0xBD, 0x38, 0xED, 0xA9, 0x2D, 0xAE, 0x68, 0xDC, 0xAA, 0xC3, 0xD0, 0x99, 0x24, 0x1B, 0xFF, 0xBC, 0x16, 0x9D, 0xF4, 0x30, 0x14, 0xDD, 0xFD, 0xA8, 0xDC, 0xBF, 0x18, 0x03, 0xB5, 0xAF, 0x89, 0xA5, 0x34, 0x37, 0x55, 0x36, 0xE3, 0x82, 0x6A, 0x69, 0x26, 0xDE, 0xDF, 0x71, 0x96, 0x1C, 0x59, 0x28, 0xFE, 0x02, 0x14, 0x2F, 0x6E, 0x99, 0xE2, 0x59, 0x82, 0x6F, 0xD8, 0x8E, 0x9F, 0xD5, 0x1C, 0x2D, 0x40, 0x6E, 0x97, 0x75, 0x1B, 0xC9, 0x7C, 0x71, 0x53, 0x85, 0x25, 0xB1, 0xE7, 0x11, 0xC8, 0x49, 0x6C, 0x22, 0xE3, 0x04, 0xB5, 0x9A, 0x0B, 0xA8, 0xCD, 0x46, 0x8B, 0x05, 0x48, 0x03, 0x5A, 0x80, 0x05, 0x10, 0x0A, 0x94, 0x5C, 0x60, 0xFF, 0x9B, 0x31, 0x73, 0x0C, 0x5A, 0x9F, 0x2A, 0x3C, 0x7C, 0x0F, 0x21, 0x0E, 0x97, 0x66, 0x83, 0x55, 0x64, 0x87, 0x40, 0xB8, 0xC9, 0x64, 0x31, 0x9E, 0x3E, 0xB9, 0x7D, 0x66, 0x6F, 0xB9, 0xEC, 0xF1, 0xA1, 0xDE, 0x44, 0x10, 0x6E, 0x6F, 0xA7, 0x8E, 0xAC, 0x8F, 0x54, 0xB4, 0x01, 0x15, 0xA0, 0xD7, 0x7B, 0xA6, 0x4C, 0xA6, 0xAA, 0x4D, 0x19, 0x33, 0xA1, 0x40, 0x34, 0x7F, 0xB6, 0xAE, 0x35, 0x77, 0x4E, 0x51, 0xDB, 0x9A, 0xD2, 0x56, 0x42, 0xCF, 0x2D, 0x70, 0x15, 0xA0, 0x44, 0x7F, 0x5C, 0x6A, 0x54, 0x01, 0xB1, 0xD7, 0xAC, 0x46, 0x0B, 0x58, 0xF2, 0x31, 0x6B, 0x3A, 0x51, 0xC3, 0x7A, 0x60, 0x6B, 0x4F, 0xD4, 0xE0, 0x05, 0x13, 0xFE, 0xB4, 0xAD, 0xF1, 0xAD, 0x28, 0xF0, 0xB3, 0x42, 0x2F, 0x36, 0x79, 0x45, 0x6F, 0xDF, 0x8F, 0xF3, 0xAD, 0x1E, 0xFF, 0x6C, 0x69, 0xA0, 0x89, 0x2C, 0xE0, 0x74, 0xA0, 0x90, 0x4F, 0x0C, 0x89, 0xEA, 0xD7, 0xA1, 0xFB, 0x94, 0x88, 0x3A, 0x22, 0x23, 0xC5, 0xDD, 0xD5, 0x89, 0xA1, 0x12, 0x7E, 0xE5, 0x62, 0x2C, 0xCA, 0x6F, 0xAB, 0x5E, 0xA8, 0xE5, 0x28, 0x7B, 0xCA, 0xD9, 0x8A, 0xE6, 0x1A, 0x32, 0x81, 0xEC, 0xD7, 0x92, 0x38, 0x64, 0xDC, 0x9D, 0x81, 0xCD, 0x17, 0xCB, 0x01, 0xF5, 0xFB, 0xC8, 0x4F, 0x44, 0x4D, 0xAE, 0xB5, 0x66, 0xD2, 0x6D, 0x3F, 0x73, 0xA2, 0x36, 0xB8, 0xA2, 0xF7, 0xDE, 0x0D, 0xF9, 0x76, 0xA5, 0x40, 0xBE, 0xDD, 0x71, 0xA3, 0x76, 0x8B, 0xF1, 0xF2, 0x53, 0xF8, 0xA9, 0x6F, 0xA7, 0xA6, 0xFA, 0x64, 0xDF, 0xAA, 0x4C, 0x7C, 0x5F, 0x21, 0x52, 0x4F, 0x28, 0x81, 0xE0, 0x99, 0xA7, 0x89, 0xE5, 0x19, 0x56, 0x84, 0x13, 0x02, 0x1C, 0x7B, 0xBE, 0x49, 0x77, 0xB4, 0xA7, 0x6A, 0xC6, 0x8F, 0xDD, 0x57, 0xD9, 0x3C, 0x8A, 0x81, 0x1C, 0x5D, 0x51, 0x26, 0x63, 0x04, 0x68, 0xA2, 0x88, 0xD1, 0x2A, 0xDB, 0x01, 0xAB, 0xD7, 0x65, 0xA4, 0x64, 0xA2, 0x56, 0x7C, 0xEA, 0xE6, 0x7F, 0x65, 0xD4, 0xBE, 0x7F, 0xB6, 0xC1, 0xFB, 0xD9, 0xDE, 0xDB, 0x52, 0x48, 0x98, 0xF2, 0x0D, 0xAB, 0x40, 0xAD, 0x99, 0xD5, 0xBE, 0x3A, 0xC7, 0xCE, 0x4F, 0x3B, 0xAE, 0xC9, 0xA5, 0x74, 0x20, 0x79, 0x24, 0x93, 0x99, 0xFB, 0xDD, 0x2F, 0x99, 0x7D, 0x96, 0xFD, 0x16, 0xA5, 0x7A, 0xF0, 0x7D, 0xFA, 0xAA, 0xB8, 0xB9, 0x01, 0x17, 0x40, 0x14, 0xF0, 0x11, 0x9E, 0x6C, 0x7D, 0x8C, 0xB2, 0x74, 0x1E, 0x6B, 0x9C, 0xE0, 0xCD, 0x90, 0x13, 0x20, 0x94, 0xB2, 0x85, 0x4E, 0x76, 0x08, 0x50, 0x49, 0xF0, 0x68, 0x04, 0x8E, 0x4E, 0x20, 0x16, 0x50, 0xC2, 0x53, 0x7A, 0xA2, 0xD6, 0x63, 0xCE, 0xFA, 0xBB, 0x65, 0x2A, 0x8B, 0x54, 0x76, 0x2B, 0xBA, 0x27, 0x6C, 0x43, 0x8A, 0x4A, 0x42, 0xEE, 0xA8, 0x9D, 0x68, 0x30, 0xE3, 0xF5, 0x4C, 0xD4, 0xEA, 0xA9, 0x67, 0x87, 0x90, 0x3E, 0xAA, 0xEA, 0x9B, 0x32, 0xDD, 0x05, 0x50, 0xC3, 0x20, 0x7E, 0xF2, 0x12, 0xB0, 0x1B, 0x30, 0xAA, 0xB1, 0x5E, 0x38, 0x25, 0xE5, 0xED, 0x78, 0xEF, 0x39, 0x8D, 0x6D, 0x00, 0x7D, 0x84, 0x94, 0xC5, 0xBC, 0x36, 0x1B, 0x73, 0x5F, 0xCE, 0x44, 0xE4, 0x74, 0xBA, 0x55, 0xDA, 0xF1, 0xE4, 0xBE, 0x9B, 0xF7, 0x8C, 0x8F, 0x25, 0x01, 0x85, 0x0C, 0x65, 0x34, 0x84, 0x07, 0x60, 0x0A, 0xEC, 0x02, 0xD6, 0x02, 0x64, 0xFA, 0x88, 0xCE, 0x50, 0x3B, 0xFE, 0xC6, 0x46, 0x7B, 0x8C, 0x8D, 0xCD, 0x58, 0xAB, 0x33, 0xD4, 0xE4, 0x47, 0x2C, 0xA0, 0x76, 0xF6, 0x6F, 0x32, 0x96, 0xB2, 0x5E, 0x49, 0x2D, 0x26, 0x6A, 0x4F, 0xE7, 0xB9, 0xBD, 0x7E, 0x64, 0xCD, 0x3C, 0xB1, 0xEF, 0x66, 0xD1, 0x3E, 0xD6, 0x7B, 0x1A, 0xE3, 0xDC, 0xF7, 0x3A, 0x3F, 0xC7, 0xA8, 0xBF, 0x72, 0x3D, 0xD2, 0x68, 0x79, 0xDE, 0xE7, 0x21, 0xAD, 0xB7, 0xDF, 0x18, 0x13, 0x8A, 0x6F, 0xF3, 0x3D, 0xCC, 0x4F, 0x31, 0x8E, 0x6A, 0xEA, 0xE8, 0xAE, 0xED, 0x85, 0xF1, 0x68, 0xB2, 0x43, 0x19, 0x43, 0x0D, 0x00, 0x49, 0x00, 0xC4, 0x02, 0x96, 0xE1, 0x67, 0xB1, 0x01, 0x09, 0xC0, 0x79, 0x8A, 0xD7, 0x44, 0x6D, 0xD3, 0x45, 0xB6, 0xF0, 0x14, 0x68, 0x47, 0xB1, 0x85, 0x26, 0x3A, 0x23, 0x34, 0x84, 0x8D, 0x93, 0x39, 0xB7, 0x0C, 0x59, 0x75, 0xB6, 0xB9, 0x18, 0xF8, 0xA6, 0x44, 0xC6, 0xED, 0x75, 0x81, 0x9B, 0xC6, 0xEB, 0x70, 0x98, 0xB3, 0xD3, 0xF6, 0xF6, 0x65, 0x53, 0x79, 0x2F, 0xDE, 0xF2, 0xD7, 0xA3, 0x5D, 0x79, 0xA4, 0x73, 0xB5, 0x17, 0x60, 0x0A, 0x68, 0x01, 0x22, 0xC0, 0x47, 0x59, 0xF3, 0xE3, 0xD2, 0x33, 0x6E, 0x3B, 0x4D, 0xE5, 0xFF, 0x0C, 0x40, 0x01, 0x22, 0x11, 0x4A, 0x63, 0x28, 0x95, 0x28, 0x07, 0xB2, 0x01, 0x57, 0x60, 0xD2, 0x75, 0x33, 0x80, 0x9E, 0x33, 0xB9, 0xFC, 0xE4, 0x5E, 0x53, 0x66, 0x6F, 0xE4, 0x3E, 0xEC, 0x84, 0x68, 0x27, 0xFB, 0x49, 0xEA, 0x70, 0x69, 0x68, 0x44, 0x95, 0xAC, 0x84, 0xF5, 0xDF, 0xF3, 0x5F, 0xDE, 0x5E, 0xD0, 0x21, 0x4C, 0x48, 0x9F, 0x7A, 0xF2, 0xED, 0xD4, 0xFC, 0x04, 0xF0, 0x9A, 0x54, 0xB2, 0x7B, 0x5B, 0xC1, 0xF6, 0x15, 0xD6, 0xA9, 0x01, 0x78, 0x4E, 0x8F, 0xC1, 0xAB, 0x81, 0xED, 0x93, 0xE1, 0xD7, 0x06, 0x78, 0x00, 0xC5, 0x37, 0x2C, 0xE7, 0x29, 0x35, 0x42, 0xF6, 0x74, 0x94, 0xFF, 0xAB, 0x34, 0x0A, 0x3E, 0x03, 0x72, 0x3A, 0x58, 0x32, 0x7B, 0xBA, 0x04, 0x67, 0x16, 0xF6, 0x46, 0xB1, 0x1D, 0x1F, 0x40, 0x2B, 0x1B, 0xD1, 0x16, 0x60, 0x44, 0x26, 0xF6, 0xE8, 0x97, 0x03, 0xBA, 0x80, 0xF2, 0x89, 0x99, 0x72, 0x17, 0x20, 0x90, 0x3D, 0xD2, 0x4C, 0x8F, 0x6C, 0x79, 0x1A, 0xB5, 0x2F, 0x11, 0xA6, 0x04, 0x6E, 0x2E, 0x0D, 0x37, 0x7A, 0x18, 0xAC, 0x29, 0xCF, 0x06, 0xE7, 0xE6, 0xDD, 0x42, 0xCD, 0x39, 0x66, 0xB1, 0xBD, 0x00, 0x99, 0xEF, 0x7F, 0x04, 0xB5, 0x53, 0xB0, 0xCE, 0x2B, 0x6A, 0x01, 0xD3, 0xDD, 0x3E, 0x9D, 0x67, 0xEE, 0x4F, 0x5C, 0x1B, 0xD0, 0x0D, 0xEC, 0x62, 0x24, 0x1F, 0xA5, 0xD1, 0xCF, 0x46, 0xCA, 0x69, 0x02, 0xCA, 0xC5, 0xF6, 0xB4, 0x43, 0xB5, 0xBC, 0xD5, 0x64, 0x4C, 0xB9, 0x09, 0x6E, 0x1A, 0x07, 0x9E, 0x19, 0x28, 0xBA, 0x6A, 0x40, 0xF2, 0x3D, 0xBA, 0x99, 0x22, 0x78, 0x31, 0x31, 0x5D, 0x5E, 0x32, 0x41, 0x9B, 0x55, 0x01, 0x73, 0x97, 0x3A, 0xB1, 0x69, 0xD6, 0xCE, 0x17, 0x67, 0x49, 0xC3, 0x59, 0x7A, 0x0A, 0x25, 0x63, 0xFD, 0x4D, 0xA0, 0x8C, 0x4B, 0x75, 0x05, 0x7A, 0xDD, 0x36, 0x64, 0x93, 0x0C, 0x6D, 0x54, 0x3B, 0x6C, 0x9F, 0xD9, 0xBD, 0xE3, 0x83, 0x5D, 0x1B, 0xE9, 0x37, 0x6D, 0xCF, 0x0D, 0xD8, 0xC4, 0x68, 0x6E, 0x9D, 0x53, 0x72, 0x0D, 0x48, 0x00, 0xA1, 0x00, 0x34, 0x6D, 0x7E, 0xBE, 0x29, 0x61, 0x35, 0x67, 0xFA, 0xDD, 0x74, 0xFD, 0x9F, 0xA4, 0x97, 0x3D, 0x29, 0x1E, 0x4C, 0xEA, 0x40, 0x08, 0x90, 0xC6, 0xC1, 0x05, 0x95, 0x0A, 0x50, 0xEC, 0x40, 0xB3, 0x0D, 0xB0, 0x0D, 0xD4, 0xE2, 0xBA, 0xAA, 0x00, 0x37, 0xA0, 0xF7, 0xC4, 0xCC, 0x99, 0x17, 0xA0, 0x78, 0xD4, 0xC8, 0x86, 0xCC, 0xBE, 0x8C, 0x3B, 0xB7, 0xD8, 0xAD, 0xDA, 0x52, 0xFC, 0xCF, 0x20, 0x88, 0x6C, 0x68, 0x43, 0x19, 0x93, 0x95, 0x00, 0x84, 0x1D, 0x9F, 0x10, 0x0A, 0xA9, 0xBC, 0x0B, 0x6C, 0x01, 0xCC, 0x99, 0xE0, 0x29, 0x08, 0xC8, 0x14, 0x5E, 0x8F, 0x0A, 0x34, 0xCD, 0xDF, 0x6B, 0xE3, 0x88, 0xB2, 0x3E, 0x00, 0x75, 0x85, 0x13, 0x52, 0x03, 0x64, 0xE0, 0xC0, 0x0E, 0xE0, 0x71, 0x85, 0x53, 0xAE, 0xD1, 0x8D, 0x3B, 0x2B, 0x3E, 0x8B, 0x6C, 0x8A, 0xE5, 0xC1, 0x85, 0xD1, 0xAD, 0x5A, 0xAC, 0x19, 0x6E, 0x3A, 0xF5, 0x78, 0x80, 0x6C, 0x22, 0x00, 0x15, 0xC0, 0x14, 0x80, 0x6A, 0x59, 0xF7, 0xE1, 0x19, 0xD0, 0xD3, 0x14, 0xD2, 0x90, 0x51, 0x36, 0x30, 0x9D, 0x1C, 0xEF, 0x29, 0x64, 0x4E, 0x04, 0xAB, 0x37, 0x5B, 0x2F, 0xE4, 0xA9, 0x1F, 0x80, 0x36, 0x7B, 0x45, 0x48, 0xEC, 0x75, 0x4E, 0x8A, 0xC4, 0xC8, 0xDC, 0x80, 0xAF, 0xAB, 0x5A, 0xAF, 0xB3, 0xBD, 0xE9, 0xF6, 0x26, 0xAA, 0x8B, 0xE2, 0x45, 0x99, 0xBD, 0x6C, 0x99, 0x4B, 0x9C, 0x96, 0x0F, 0x0D, 0x08, 0xEF, 0xF4, 0xBD, 0x01, 0xE7, 0xCF, 0xF6, 0x1A, 0x4F, 0x0A, 0xDE, 0x41, 0x95, 0x23, 0xBA, 0x79, 0xCD, 0x08, 0xD7, 0xFF, 0xF2, 0xE9, 0x32, 0x4E, 0xE9, 0x4C, 0x92, 0x4B, 0xFD, 0x05, 0x54, 0x00, 0xBD, 0x81, 0x74, 0xC0, 0x08, 0x69, 0xC0, 0xA8, 0x06, 0x9B, 0x4E, 0xD0, 0x26, 0x3E, 0xCC, 0x1E, 0xDB, 0x1B, 0x5A, 0xBB, 0x3B, 0x1E, 0x76, 0xB5, 0x71, 0x55, 0x2E, 0xC7, 0x42, 0x3C, 0x02, 0x5B, 0x04, 0xAE, 0xBF, 0x81, 0xC6, 0xA0, 0x75, 0x7E, 0x93, 0x95, 0xA7, 0x38, 0x7F, 0x31, 0xEF, 0xD6, 0x1B, 0xD0, 0xF8, 0xC7, 0x1D, 0x2D, 0xFA, 0xDD, 0x1A, 0x76, 0xBE, 0x68, 0x73, 0x63, 0xDB, 0x80, 0xEE, 0xB7, 0x6D, 0xE8, 0x5A, 0x80, 0x2A, 0xE0, 0xC9, 0x33, 0x85, 0xC2, 0xE6, 0xAC, 0xFC, 0xA9, 0x3E, 0x5A, 0x31, 0x7F, 0x6F, 0x61, 0x6C, 0x49, 0x71, 0xC4, 0x70, 0x05, 0xBF, 0x99, 0xB1, 0x25, 0xCD, 0x12, 0xD3, 0x0D, 0x68, 0x03, 0x41, 0xCC, 0xC5, 0x2D, 0x0E, 0x84, 0x01, 0xE5, 0x5C, 0xDD, 0xAF, 0x09, 0x5A, 0x4D, 0xD0, 0x70, 0x05, 0xB2, 0x19, 0xBB, 0x6B, 0xF0, 0x45, 0x86, 0x37, 0x84, 0xF3, 0xC1, 0x64, 0x95, 0x7B, 0xDD, 0xAA, 0x6C, 0xD5, 0x59, 0xE3, 0xDC, 0xFC, 0x93, 0xD1, 0xF1, 0x4D, 0x39, 0xB9, 0x34, 0x96, 0x86, 0xCB, 0xD1, 0x9B, 0x95, 0x57, 0xD2, 0xA4, 0x17, 0xDB, 0x06, 0x16, 0x07, 0xF8, 0xDE, 0x1C, 0x29, 0x06, 0xCC, 0xA4, 0x49, 0xA8, 0xB5, 0xB5, 0xBD, 0x13, 0x2A, 0x2F, 0x9C, 0xD2, 0x9C, 0xBE, 0x16, 0x73, 0x09, 0x1D, 0xF2, 0x18, 0x53, 0xD8, 0x92, 0xC9, 0x79, 0xAC, 0x70, 0x29, 0x9A, 0xDF, 0x55, 0x1F, 0x89, 0xA8, 0x79, 0xF3, 0x8A, 0x78, 0x45, 0x21, 0x5D, 0xEF, 0xCD, 0xAB, 0x1A, 0x6A, 0x90, 0x2E, 0xC0, 0x0A, 0xE8, 0x13, 0xB3, 0xC6, 0xA3, 0xDA, 0x67, 0xD1, 0xC9, 0x6B, 0xDC, 0xFD, 0xB5, 0xBC, 0xDD, 0xCE, 0x3A, 0xCC, 0x44, 0xAB, 0x19, 0xB8, 0x6D, 0x96, 0x7E, 0x53, 0x87, 0x64, 0xBF, 0xBB, 0xC5, 0x29, 0x6F, 0xA5, 0x4A, 0xE6, 0xF5, 0x3E, 0x42, 0x91, 0xC7, 0x9B, 0x7C, 0xB6, 0xDF, 0xC5, 0xD4, 0x12, 0x1C, 0x4D, 0x3D, 0x5A, 0x4E, 0xDE, 0x20, 0xB1, 0x12, 0x10, 0x25, 0x1A, 0x98, 0x42, 0x8C, 0xDD, 0x27, 0x9D, 0x93, 0xD3, 0x16, 0x3E, 0x3F, 0xE6, 0x7E, 0xA7, 0x3E, 0xA6, 0x7D, 0xEF, 0x24, 0x0D, 0x33, 0x55, 0x63, 0xEC, 0x21, 0x62, 0x00, 0x36, 0xD5, 0x50, 0x80, 0xF2, 0xCC, 0x1E, 0xB9, 0x73, 0xE3, 0x94, 0xA3, 0xDC, 0x8E, 0x43, 0x6A, 0x28, 0x2A, 0x80, 0x43, 0x7E, 0xEA, 0x5E, 0x2F, 0x7D, 0xBA, 0xDB, 0xAF, 0x74, 0xDE, 0x77, 0x7E, 0xC1, 0xDB, 0xAA, 0x39, 0xFD, 0x1C, 0xDE, 0x74, 0x8E, 0xF9, 0xB8, 0x7E, 0xD5, 0xC8, 0xD3, 0xD6, 0x49, 0x8F, 0x71, 0xB4, 0x70, 0x51, 0xD4, 0xF6, 0x6C, 0x5F, 0xFA, 0x06, 0x24, 0x81, 0xE8, 0x77, 0x0E, 0xBC, 0xE4, 0x2D, 0x1F, 0x15, 0x01, 0xB4, 0x01, 0xCB, 0x3B, 0xF9, 0x9D, 0x26, 0x06, 0xB3, 0xA7, 0xA9, 0x53, 0x05, 0x30, 0xBD, 0xD9, 0x8D, 0x22, 0xFF, 0xF4, 0xBA, 0xE7, 0xA2, 0x3C, 0x36, 0xE7, 0x16, 0xC2, 0x6B, 0xF6, 0xF7, 0xC0, 0x02, 0x24, 0x89, 0x79, 0x51, 0x81, 0x15, 0x80, 0x1A, 0xAF, 0xF5, 0x35, 0x41, 0xDB, 0xB4, 0xEC, 0x18, 0x71, 0x88, 0x49, 0x9A, 0xED, 0x8F, 0x6B, 0xFC, 0xD2, 0x8D, 0x6B, 0x4F, 0xED, 0x37, 0x11, 0xDF, 0x7E, 0x9F, 0x00, 0xB7, 0xB0, 0x6C, 0x7F, 0x1A, 0xFC, 0xAC, 0x60, 0x2C, 0x14, 0x47, 0x45, 0xAC, 0x78, 0xDB, 0xA9, 0xA9, 0x4D, 0x7E, 0x19, 0xE0, 0x09, 0xD4, 0x22, 0xEC, 0x66, 0xB7, 0x5D, 0x99, 0xC3, 0xDE, 0xA1, 0xA6, 0x3F, 0xE8, 0xFC, 0xCE, 0xF1, 0xFD, 0x9D, 0x67, 0xAA, 0x9D, 0x92, 0x84, 0xE4, 0x85, 0xBD, 0xE3, 0x55, 0x2E, 0x75, 0xEE, 0x12, 0x8D, 0xC9, 0x90, 0x4F, 0xF5, 0xC1, 0x26, 0x0C, 0x58, 0x82, 0x9F, 0xC5, 0x02, 0x34, 0x80, 0xE0, 0x29, 0xA9, 0x13, 0x35, 0xC1, 0x3E, 0x5B, 0xCB, 0xEF, 0x16, 0xB0, 0x2C, 0xB9, 0x51, 0x2A, 0x28, 0x66, 0xEA, 0x80, 0x34, 0xE5, 0xCD, 0xEE, 0x01, 0x85, 0xEE, 0xD2, 0x4C, 0x82, 0xA9, 0xEF, 0x26, 0x9E, 0x4C, 0x10, 0x66, 0x21, 0x9D, 0x3A, 0x3D, 0x61, 0x6F, 0xB5, 0xEF, 0x3E, 0x45, 0xA9, 0x12, 0x4F, 0x37, 0xA8, 0x4E, 0xE0, 0xAD, 0xA9, 0xAA, 0xC9, 0xD5, 0x00, 0xEE, 0x2A, 0xCA, 0x89, 0x20, 0xF2, 0xB1, 0x9E, 0xDB, 0xEB, 0x18, 0x73, 0xCF, 0xFE, 0xD7, 0xE2, 0xF5, 0x16, 0xFB, 0xDA, 0x15, 0xB2, 0x94, 0xC2, 0x78, 0x7B, 0x32, 0x24, 0xF5, 0x41, 0x90, 0x2E, 0xA0, 0x65, 0xD1, 0xFF, 0x86, 0x47, 0x44, 0x34, 0xE0, 0xF9, 0x2E, 0xF8, 0x43, 0x26, 0x6A, 0xCA, 0xC4, 0x30, 0xB6, 0x12, 0x89, 0xC0, 0xAD, 0x59, 0xF6, 0x4F, 0xC8, 0x96, 0x16, 0xCC, 0xA6, 0x82, 0x66, 0xB7, 0x6D, 0x58, 0x3B, 0x98, 0x8C, 0x9B, 0xC9, 0x6B, 0x9F, 0xC3, 0x0F, 0x71, 0xD2, 0x66, 0x4E, 0x5D, 0xDB, 0x94, 0xBE, 0xE9, 0x35, 0x4B, 0x9E, 0x44, 0x15, 0xDC, 0x7F, 0xB1, 0xB4, 0x67, 0xDF, 0x8B, 0x4F, 0x17, 0xA8, 0xC5, 0xA0, 0x4D, 0xB6, 0xAE, 0xDA, 0xAB, 0x37, 0xAD, 0x00, 0xF6, 0x0C, 0xDF, 0xA9, 0xC8, 0x9A, 0x7E, 0x41, 0x33, 0x41, 0x5C, 0x1C, 0x16, 0x45, 0x81, 0x02, 0xC9, 0x8B, 0x42, 0x60, 0xFC, 0xA2, 0xE4, 0x80, 0x93, 0xB9, 0x95, 0x40, 0x1A, 0xD0, 0x0B, 0xA8, 0x0D, 0x44, 0x03, 0x4E, 0x14, 0x27, 0x1D, 0x47, 0x1B, 0x9A, 0x0E, 0x0E, 0xBC, 0x32, 0x2B, 0x05, 0x77, 0xCA, 0x4E, 0x48, 0x09, 0x99, 0x50, 0x06, 0x5A, 0xB1, 0x3B, 0xE9, 0xC2, 0xBD, 0xB8, 0x1C, 0x9B, 0x89, 0x37, 0x2F, 0x21, 0x6F, 0x2E, 0xD5, 0x18, 0x52, 0xC9, 0x34, 0x57, 0xDF, 0x47, 0xEC, 0xB3, 0xD1, 0x03, 0xA7, 0x0C, 0x74, 0x8F, 0x71, 0x39, 0xA0, 0x8B, 0x48, 0x60, 0x24, 0xA2, 0x31, 0xFC, 0x12, 0x86, 0xB7, 0x37, 0x8F, 0x14, 0x30, 0xBD, 0xCE, 0xDF, 0x53, 0xCE, 0xC9, 0xE9, 0x89, 0x29, 0xB7, 0x68, 0x98, 0xC8, 0x1E, 0xCA, 0x0D, 0xF4, 0x04, 0x12, 0x55, 0xD7, 0xD8, 0x36, 0x50, 0xA0, 0x13, 0x33, 0x0A, 0x5D, 0x80, 0x3B, 0x90, 0x9C, 0x5F, 0x2C, 0x01, 0x74, 0x10, 0x80, 0xC7, 0x04, 0xCD, 0x9F, 0xC6, 0xF6, 0xBB, 0x9B, 0x2D, 0x7A, 0xFC, 0x3F, 0xEC, 0xA6, 0x34, 0x1E, 0x1A, 0x9A, 0x58, 0x27, 0x54, 0xB2, 0x60, 0xDE, 0x27, 0x7B, 0x83, 0x12, 0xD1, 0xEB, 0x6E, 0xE5, 0xFB, 0xD4, 0xD7, 0xDE, 0x69, 0xBC, 0x9D, 0xC5, 0xB5, 0x8F, 0xC9, 0x72, 0xDC, 0x9C, 0x47, 0x3B, 0x09, 0x8D, 0x53, 0xB6, 0x6F, 0x4F, 0x67, 0x58, 0xEE, 0xAA, 0xF7, 0x29, 0x71, 0x6F, 0x7B, 0xCD, 0xFB, 0x7D, 0xF1, 0x94, 0x98, 0xCD, 0x51, 0x39, 0xF9, 0x64, 0x67, 0x23, 0xDC, 0xAF, 0x63, 0xC7, 0x19, 0x0E, 0x37, 0x43, 0x9F, 0xAE, 0xA7, 0xF9, 0xBB, 0xA2, 0x00, 0x4F, 0xA0, 0x1D, 0xB3, 0x15, 0x5D, 0x40, 0x14, 0x12, 0xEE, 0xB7, 0x00, 0x1A, 0x40, 0xAE, 0x09, 0x5A, 0x3C, 0x1B, 0x76, 0x52, 0x86, 0x89, 0x65, 0xBD, 0x22, 0xC7, 0x8A, 0xC2, 0xF4, 0x76, 0x37, 0xD6, 0xCF, 0x4B, 0x70, 0xE9, 0xDE, 0xCA, 0x95, 0xBB, 0x8E, 0x1A, 0xCF, 0xA1, 0x69, 0x29, 0x24, 0x3A, 0xB9, 0x99, 0x54, 0xD8, 0x7F, 0x70, 0xC4, 0x45, 0xE4, 0x74, 0x64, 0xDF, 0x53, 0x85, 0x59, 0x80, 0x4C, 0x87, 0x91, 0xE9, 0x27, 0x30, 0xDB, 0xC4, 0xFE, 0x3A, 0x17, 0xAC, 0x0D, 0xE0, 0xCC, 0x31, 0x03, 0x9F, 0x4C, 0x04, 0xE7, 0x02, 0x8A, 0x7F, 0x36, 0xD8, 0xAE, 0x24, 0x99, 0xF1, 0x58, 0xDC, 0x6C, 0xBE, 0x13, 0xB6, 0x48, 0x6E, 0x22, 0x19, 0x17, 0x9D, 0x05, 0xB8, 0x01, 0xC9, 0xD5, 0xE6, 0x4E, 0xC0, 0x1D, 0x88, 0xE2, 0x9E, 0xDE, 0x89, 0x19, 0x97, 0x04, 0xAC, 0x9E, 0x5A, 0xE5, 0x94, 0x5F, 0x02, 0x3D, 0x80, 0x76, 0x62, 0x49, 0xB0, 0x37, 0xB6, 0x1C, 0xC6, 0xD4, 0xDB, 0xFC, 0x89, 0x99, 0x01, 0x11, 0xD7, 0x1A, 0x5E, 0xC6, 0xB4, 0x78, 0x7A, 0xA6, 0xCC, 0xA8, 0xE3, 0x55, 0x29, 0xDC, 0x0A, 0x12, 0x39, 0xD5, 0xA9, 0x5F, 0xB1, 0x7E, 0x05, 0xC1, 0x4B, 0xFC, 0x6B, 0x99, 0x27, 0x0A, 0xB8, 0x01, 0x39, 0xB5, 0x02, 0x63, 0x8F, 0x38, 0x66, 0xCE, 0xDC, 0x45, 0xEF, 0x62, 0xB9, 0x8E, 0xDC, 0x65, 0x66, 0x73, 0xA0, 0x20, 0x3C, 0x98, 0xEE, 0x13, 0x6D, 0x9C, 0xE7, 0xFB, 0x67, 0xFB, 0x2E, 0x81, 0xDE, 0xD8, 0xB7, 0x93, 0x41, 0x03, 0xEE, 0x13, 0xB3, 0xA2, 0x54, 0x2A, 0x48, 0x82, 0x2C, 0x4E, 0xCD, 0xBD, 0x9F, 0x9A, 0xCF, 0x70, 0xE3, 0xB7, 0x29, 0xEC, 0xD2, 0x50, 0x93, 0x87, 0xF0, 0x5A, 0xCF, 0x4D, 0xF7, 0xA6, 0x98, 0xAA, 0xFE, 0x09, 0xCC, 0x9E, 0x0C, 0x96, 0x37, 0x01, 0x66, 0xA6, 0xCC, 0x4D, 0x41, 0xDC, 0x37, 0xB0, 0x08, 0x35, 0x60, 0x9C, 0x65, 0x72, 0x8C, 0x53, 0x8B, 0x0A, 0xA8, 0x00, 0xB9, 0x81, 0x38, 0x1B, 0x75, 0xFC, 0x7B, 0xC7, 0x44, 0x9E, 0xC5, 0x9E, 0xCF, 0xA2, 0x93, 0x0F, 0xA1, 0xD8, 0xA7, 0x3C, 0x2C, 0x37, 0x6F, 0x73, 0x94, 0x89, 0x96, 0x02, 0x21, 0x40, 0x1A, 0x10, 0x0D, 0xB8, 0x02, 0x56, 0x40, 0xFC, 0x10, 0x38, 0x42, 0xD0, 0x9A, 0xFF, 0xEE, 0x34, 0xB8, 0x1F, 0x3D, 0xAA, 0x1E, 0x93, 0xFD, 0x10, 0x67, 0xE6, 0x3D, 0x8D, 0x5A, 0x2A, 0x9E, 0x54, 0xC8, 0x00, 0x71, 0xAF, 0x7E, 0x6D, 0xD4, 0x3A, 0x19, 0x19, 0x9D, 0x7D, 0xC6, 0xB7, 0x24, 0x9D, 0x1D, 0x66, 0xF6, 0x4D, 0xA6, 0xBD, 0x0E, 0xB8, 0xB2, 0x6F, 0x6B, 0x42, 0x3B, 0x5B, 0x9F, 0xA9, 0x80, 0x3A, 0x10, 0x0A, 0xCC, 0x06, 0xEA, 0x35, 0x55, 0xE5, 0x6A, 0xF5, 0xE9, 0xBF, 0x3D, 0x15, 0x7A, 0xF6, 0x57, 0x20, 0x16, 0xAC, 0xC9, 0x63, 0x0C, 0x43, 0x18, 0xC3, 0x46, 0x0C, 0x4D, 0x01, 0xF7, 0xF7, 0x48, 0x16, 0xB0, 0x0C, 0xD8, 0x01, 0x34, 0x97, 0x04, 0xFB, 0xEE, 0xD7, 0x31, 0x6A, 0x14, 0xD2, 0x37, 0x92, 0x67, 0x8F, 0x89, 0x1B, 0xD7, 0x53, 0x11, 0x68, 0xCE, 0xD3, 0xCD, 0x82, 0xFF, 0xF7, 0x39, 0x60, 0x8F, 0xF8, 0xBC, 0xED, 0x18, 0x55, 0xDA, 0x14, 0xE2, 0x3F, 0x7D, 0x6E, 0x47, 0xA7, 0x3A, 0xA5, 0xB5, 0xC5, 0x68, 0xE5, 0xC7, 0xC0, 0x44, 0xCE, 0x76, 0x28, 0xE2, 0xE3, 0x84, 0x10, 0x5E, 0x00, 0x5D, 0x79, 0x88, 0xF1, 0xAC, 0x9D, 0x14, 0x3F, 0xE5, 0x05, 0xED, 0xBC, 0x95, 0xC6, 0x3E, 0x66, 0x4B, 0xFD, 0x03, 0x56, 0x9F, 0x58, 0xA3, 0xCF, 0x53, 0xF3, 0xB3, 0x1C, 0xDF, 0x05, 0x58, 0x02, 0xA5, 0xB8, 0x22, 0x77, 0x02, 0xAA, 0x40, 0xEC, 0x09, 0xDA, 0xFE, 0x06, 0x0D, 0xE9, 0xE2, 0x6D, 0x4F, 0xAE, 0x95, 0x9F, 0x94, 0xB2, 0x62, 0xB6, 0xAC, 0x9D, 0x9D, 0x4E, 0x4C, 0x03, 0xB8, 0x8E, 0x9A, 0x31, 0x82, 0x23, 0x3B, 0x7D, 0x78, 0x36, 0x07, 0x5C, 0xF9, 0xED, 0x50, 0xB4, 0x27, 0xE9, 0x76, 0xD2, 0xB6, 0x67, 0x8E, 0x1A, 0xF9, 0x06, 0x4D, 0x6D, 0x1A, 0xC5, 0x31, 0x4C, 0x06, 0x88, 0xBE, 0x47, 0x39, 0x71, 0xF5, 0x9B, 0xE0, 0x2D, 0x7A, 0x1A, 0x40, 0x08, 0x0B, 0x13, 0x4F, 0x36, 0x81, 0x43, 0x8B, 0x4C, 0xEA, 0xDB, 0xC5, 0xE4, 0x0E, 0xD9, 0x7C, 0x1E, 0x8C, 0x16, 0x99, 0x40, 0x35, 0xBB, 0x61, 0x17, 0x90, 0x46, 0x11, 0x52, 0x00, 0x73, 0xA0, 0x4E, 0xD0, 0x46, 0xD8, 0xE6, 0xAF, 0x8E, 0xC6, 0xA2, 0x75, 0xED, 0x47, 0xED, 0xDE, 0x2D, 0xEC, 0x50, 0x28, 0x98, 0xE5, 0xC7, 0x9E, 0x26, 0x9F, 0xEF, 0x4D, 0x4D, 0xEE, 0xC6, 0xE5, 0x68, 0x60, 0xC2, 0x25, 0x88, 0xAC, 0xA3, 0x96, 0x4D, 0x35, 0xC9, 0xD8, 0x40, 0xCF, 0x32, 0xB5, 0xA6, 0x2F, 0x12, 0xE1, 0x09, 0x40, 0x3B, 0x3D, 0xF3, 0xD7, 0x24, 0xF4, 0xDB, 0xED, 0xB5, 0x6E, 0x07, 0x90, 0x69, 0x34, 0x3C, 0xCF, 0xE7, 0x29, 0x41, 0x9F, 0xD5, 0x63, 0x3A, 0x05, 0x5C, 0x1A, 0x9E, 0x54, 0xE0, 0xC5, 0x1B, 0x34, 0x63, 0xB4, 0xB6, 0x01, 0x13, 0xC2, 0x0E, 0x0A, 0xB8, 0x02, 0x34, 0xC5, 0x8F, 0x1D, 0x80, 0xAF, 0x09, 0xDA, 0x2C, 0xCE, 0xF1, 0x5B, 0xDA, 0x0C, 0xD3, 0xB4, 0x9E, 0x48, 0x4E, 0x4E, 0xE9, 0x7C, 0x76, 0x9D, 0x65, 0xF8, 0x13, 0x34, 0x5F, 0x8B, 0x87, 0xDF, 0xEA, 0x7F, 0x3E, 0x29, 0xA3, 0x67, 0x21, 0x7D, 0xF7, 0x47, 0x82, 0x47, 0x94, 0x59, 0xAE, 0x6F, 0xED, 0x4A, 0x9A, 0x6E, 0xDC, 0xA5, 0x55, 0x9C, 0xDD, 0xA7, 0xB5, 0x67, 0x95, 0xCA, 0xA3, 0x05, 0x08, 0x2F, 0x6B, 0x9D, 0x7D, 0xD6, 0x93, 0x30, 0xC8, 0x94, 0xB4, 0xB9, 0x6F, 0x09, 0x47, 0x5A, 0x16, 0x82, 0x36, 0xCD, 0x13, 0xCB, 0x11, 0xB4, 0x95, 0xAF, 0xEA, 0xBD, 0xF5, 0x9D, 0x80, 0x2C, 0x05, 0xAC, 0x80, 0x36, 0x06, 0xAD, 0x01, 0x3F, 0x23, 0xCD, 0xFE, 0xEB, 0xDF, 0xA3, 0x7C, 0xB3, 0xA7, 0x74, 0xFF, 0x8F, 0xE9, 0x90, 0x7B, 0x05, 0xA2, 0xE5, 0x89, 0xA6, 0x87, 0xB9, 0x59, 0xE4, 0x83, 0x73, 0x7C, 0x86, 0xDA, 0xF2, 0x7B, 0xF5, 0xE8, 0x5F, 0xCA, 0xC6, 0x26, 0x0A, 0x10, 0x62, 0xD6, 0x90, 0x63, 0x82, 0xAE, 0x53, 0x72, 0xA1, 0x0C, 0x6C, 0xCE, 0xCC, 0x6E, 0xB6, 0x2A, 0xEF, 0x3D, 0x55, 0x74, 0x26, 0xC5, 0x27, 0xD9, 0x3B, 0xED, 0xD9, 0xE4, 0xAB, 0x78, 0xB7, 0xED, 0x5D, 0x3E, 0x69, 0x11, 0x45, 0x08, 0xE1, 0x53, 0xD3, 0x07, 0xF4, 0x9A, 0xFB, 0xC1, 0xEB, 0x6E, 0x54, 0x05, 0x68, 0x03, 0x4B, 0x00, 0xB1, 0x5B, 0xF8, 0x86, 0xA8, 0xF9, 0x37, 0x4E, 0xEF, 0xD1, 0xD8, 0x8F, 0x24, 0x97, 0xA7, 0x2D, 0xBF, 0x15, 0xB3, 0x76, 0xF0, 0xB9, 0xF9, 0x35, 0xB8, 0xDA, 0x94, 0xBF, 0xAE, 0xD1, 0xF9, 0x8D, 0x9A, 0x28, 0x60, 0x1B, 0x78, 0xCB, 0x0E, 0xEF, 0xEA, 0xB1, 0x0C, 0x91, 0x51, 0xC8, 0x8B, 0x80, 0x4D, 0xEF, 0x89, 0x38, 0xBD, 0xC6, 0x6B, 0x9A, 0x41, 0xF7, 0xEC, 0xD4, 0xE3, 0x49, 0xF2, 0x44, 0xCD, 0xCE, 0xF3, 0xA1, 0x0D, 0xD0, 0x02, 0x76, 0x12, 0x9B, 0x50, 0xC0, 0x92, 0xFF, 0xA0, 0x03, 0xDE, 0x80, 0x05, 0xB0, 0x47, 0x65, 0x09, 0x40, 0x05, 0xF0, 0xF9, 0x0C, 0x75, 0xA2, 0x16, 0x18, 0xA3, 0x22, 0x6F, 0xD4, 0xC6, 0x84, 0x5C, 0x37, 0x10, 0xC6, 0xAA, 0xB6, 0x7D, 0xEB, 0x65, 0x63, 0x7F, 0xCD, 0xD4, 0x56, 0xBE, 0xFD, 0x2B, 0x63, 0x01, 0xFD, 0x0D, 0x9E, 0x00, 0x31, 0x97, 0xD8, 0x3B, 0xB9, 0x5B, 0xAC, 0xA5, 0x19, 0xEB, 0x59, 0xFB, 0xCB, 0x6E, 0x17, 0x4E, 0x5B, 0x8D, 0xBB, 0x9B, 0xE3, 0xD0, 0xF2, 0x03, 0x57, 0x5E, 0xFD, 0x69, 0xAB, 0x14, 0x88, 0xDA, 0x2D, 0xE6, 0xB3, 0x02, 0xA4, 0x09, 0x25, 0xE2, 0x75, 0xE8, 0x97, 0x02, 0x92, 0x47, 0x5E, 0x80, 0x4C, 0x09, 0xAF, 0x01, 0xD6, 0xC0, 0x3D, 0x65, 0xA2, 0x96, 0x13, 0xA7, 0xE7, 0xEE, 0xE6, 0x11, 0x18, 0x07, 0x59, 0x54, 0x60, 0x0A, 0x33, 0xAE, 0xC0, 0xE0, 0x50, 0x99, 0x6E, 0x9F, 0xDF, 0x2B, 0x34, 0x28, 0xA7, 0xBE, 0xCD, 0x16, 0x4E, 0x49, 0xA2, 0x12, 0x21, 0xC0, 0x54, 0xEB, 0x9C, 0x0E, 0x59, 0x6B, 0x72, 0x11, 0xA6, 0x95, 0x4D, 0x72, 0xD6, 0x33, 0xAD, 0x2D, 0x46, 0x71, 0xE5, 0xF2, 0xAC, 0xA7, 0x49, 0xFE, 0x74, 0xB6, 0x16, 0xFC, 0x37, 0x13, 0x19, 0xFF, 0x18, 0xAD, 0xF9, 0x9B, 0x9C, 0x54, 0x49, 0x2C, 0x42, 0xDE, 0x91, 0x97, 0xEB, 0xFD, 0x5A, 0x27, 0xE7, 0x2D, 0x1A, 0x50, 0x1E, 0x2D, 0x42, 0x14, 0xE8, 0x3E, 0x51, 0xAB, 0xDF, 0xBA, 0x4C, 0xA4, 0x50, 0xF0, 0x11, 0x1C, 0x6B, 0xF3, 0xF5, 0x18, 0x56, 0x54, 0xE9, 0x86, 0x19, 0xAE, 0x0B, 0x7A, 0x87, 0xEE, 0x7E, 0x5B, 0x96, 0x15, 0xD9, 0xE0, 0xDF, 0x25, 0xEA, 0x05, 0x74, 0xCE, 0xBD, 0x81, 0x08, 0x40, 0x37, 0x70, 0xFA, 0xB5, 0x3F, 0xBE, 0x4E, 0xA7, 0x3D, 0x5E, 0xFE, 0xED, 0x8C, 0x06, 0x8E, 0xF6, 0x0F, 0x93, 0x14, 0x13, 0xA7, 0x7C, 0x31, 0x0B, 0x51, 0xCF, 0x19, 0x6C, 0x80, 0x4E, 0xB9, 0x99, 0xBD, 0x63, 0xC7, 0x82, 0x10, 0xC2, 0x81, 0xD2, 0xB7, 0x13, 0x7E, 0x3B, 0x50, 0x06, 0xF8, 0x06, 0xD6, 0x7C, 0xD9, 0x0D, 0xD4, 0x8C, 0x6A, 0x3B, 0x61, 0xEB, 0xDF, 0x32, 0x3F, 0x02, 0x37, 0xAF, 0x9F, 0xFB, 0x44, 0x51, 0xAD, 0xBC, 0xD9, 0x7D, 0xB2, 0x84, 0x9B, 0x43, 0xD8, 0x32, 0xD0, 0x2D, 0x4F, 0x15, 0x63, 0xE9, 0x33, 0x5D, 0xD3, 0x77, 0x40, 0x4D, 0x9F, 0xB0, 0xDB, 0x20, 0xCC, 0x04, 0x88, 0x7E, 0x7A, 0xA4, 0xEF, 0xD3, 0x09, 0x75, 0x8A, 0x70, 0xAA, 0x6E, 0x72, 0xF2, 0x54, 0x66, 0xE8, 0xD4, 0x70, 0x9E, 0xB5, 0x99, 0x4C, 0xF7, 0x44, 0x9B, 0xE2, 0xE1, 0x99, 0x02, 0x02, 0x3A, 0x1D, 0xDB, 0x12, 0x08, 0x01, 0x5C, 0x01, 0x6B, 0xC0, 0xFD, 0x75, 0xA4, 0xAB, 0xF9, 0x84, 0x0D, 0xEC, 0xF1, 0x52, 0x0F, 0x60, 0x54, 0xCE, 0x22, 0x7A, 0xEE, 0xA7, 0xC5, 0xA8, 0x6D, 0xAE, 0xF7, 0x31, 0x4F, 0x63, 0x46, 0xCF, 0xEF, 0xD9, 0xFF, 0x8B, 0xCC, 0xEE, 0x90, 0x86, 0x07, 0x63, 0x39, 0xDE, 0xEF, 0x0D, 0x07, 0x3D, 0xB3, 0xB7, 0xD5, 0x5B, 0x7E, 0x9F, 0xA2, 0x33, 0xF6, 0x7D, 0x2A, 0x84, 0x81, 0xED, 0xC4, 0x7A, 0x6F, 0x70, 0x16, 0x77, 0x0E, 0x51, 0x53, 0x8D, 0x6E, 0x27, 0xB5, 0x63, 0x82, 0x78, 0x14, 0x91, 0xD9, 0x01, 0x95, 0xF3, 0x8F, 0x9F, 0x76, 0x21, 0x71, 0x1E, 0x6E, 0xBE, 0x89, 0xCF, 0x43, 0x71, 0x0B, 0xB0, 0x8C, 0x10, 0x22, 0x81, 0xF1, 0xFA, 0xDB, 0x84, 0x37, 0x60, 0x09, 0x6C, 0xC7, 0x29, 0x41, 0xE8, 0x02, 0x7C, 0xDD, 0xE9, 0x10, 0xC2, 0xB6, 0x21, 0x26, 0x15, 0xBD, 0x23, 0xAA, 0xE1, 0x7B, 0xE8, 0xEB, 0x49, 0xEF, 0x73, 0x0F, 0x7C, 0x06, 0xD1, 0x5F, 0x0A, 0x42, 0x6E, 0x63, 0x43, 0xBC, 0xB7, 0xA2, 0x40, 0x9E, 0x0A, 0xEA, 0x3C, 0x1D, 0xEA, 0x5A, 0x5E, 0x57, 0xFD, 0xF6, 0xF5, 0xE6, 0xA4, 0x4D, 0xEB, 0x93, 0x51, 0x28, 0x65, 0xDC, 0xBB, 0x8B, 0xB9, 0x65, 0xC1, 0x3D, 0xF3, 0x31, 0xA4, 0xE6, 0x44, 0x64, 0x36, 0xE0, 0xA7, 0xAA, 0x4A, 0xD7, 0x95, 0x8A, 0x14, 0xB8, 0x8E, 0x62, 0x9A, 0xB7, 0x4F, 0xCD, 0x1D, 0x6B, 0x41, 0x14, 0xD0, 0x9F, 0xAA, 0x77, 0x59, 0xC0, 0xD2, 0x51, 0x05, 0x80, 0xD3, 0x78, 0xB0, 0x81, 0x9A, 0xFA, 0x4A, 0x99, 0xA0, 0x09, 0x36, 0xEE, 0xFD, 0xCD, 0x87, 0xEF, 0x42, 0xCF, 0x6C, 0x9B, 0x22, 0x87, 0x29, 0xA7, 0xF1, 0x1A, 0xD9, 0x7A, 0x12, 0xD3, 0xDE, 0x7D, 0xA9, 0x79, 0x32, 0xCF, 0xD5, 0xF7, 0xD6, 0x4C, 0xDB, 0x49, 0xEC, 0x74, 0x7F, 0xFB, 0x2A, 0x44, 0x8D, 0x63, 0xC1, 0x68, 0xBD, 0xDC, 0x71, 0x0B, 0x06, 0xCD, 0x68, 0xC7, 0xCC, 0x10, 0xCE, 0x66, 0xA9, 0xB2, 0xC8, 0xCA, 0x9C, 0xDB, 0xF8, 0xB3, 0xC9, 0x3E, 0x05, 0xC9, 0xD3, 0x8F, 0x41, 0x46, 0x6D, 0x7B, 0x93, 0x8F, 0xD3, 0x80, 0x68, 0x20, 0x83, 0xC3, 0x76, 0x1A, 0x07, 0x0B, 0x60, 0x0D, 0x68, 0x00, 0x2B, 0xDE, 0x36, 0xA1, 0xDB, 0x01, 0x2D, 0x9E, 0x79, 0x82, 0xA6, 0x74, 0x14, 0x19, 0x7D, 0x0D, 0xF9, 0x49, 0xAE, 0x0D, 0xDB, 0xB7, 0x6D, 0xB4, 0x11, 0x80, 0x48, 0x64, 0xDA, 0x58, 0x72, 0x67, 0xBF, 0x45, 0x8C, 0xF6, 0x29, 0x33, 0xB6, 0xBE, 0xB3, 0xB0, 0xA9, 0xCF, 0x84, 0x1E, 0xF8, 0x49, 0xE4, 0x73, 0x20, 0xFA, 0xCC, 0xEA, 0xE9, 0xB1, 0x75, 0xB3, 0x34, 0x28, 0x94, 0x9A, 0x9E, 0x6D, 0xE4, 0x1E, 0xA7, 0xF7, 0xC0, 0x29, 0x32, 0x22, 0xBA, 0xBE, 0x55, 0xEF, 0x3B, 0xDF, 0x26, 0x3D, 0x33, 0x98, 0x2B, 0x80, 0x18, 0x6C, 0x22, 0xDE, 0xA2, 0xD4, 0x6C, 0xBE, 0xCF, 0xDF, 0x0D, 0xA1, 0xDA, 0x80, 0xF2, 0x0D, 0x9D, 0x9F, 0x1E, 0x3F, 0xE7, 0xFA, 0x34, 0x78, 0x17, 0xD9, 0x0C, 0x35, 0x4A, 0xBF, 0x26, 0x8F, 0x4B, 0x64, 0xD3, 0x2F, 0x3E, 0x0D, 0x3B, 0x2C, 0x57, 0xBB, 0x7D, 0x45, 0xA2, 0x59, 0x4A, 0xCF, 0x66, 0xD3, 0xF1, 0xDC, 0x2B, 0xA0, 0xEA, 0xED, 0x67, 0x5D, 0xBC, 0x8B, 0x1F, 0x63, 0x87, 0x1F, 0x26, 0x30, 0x8B, 0xD1, 0x82, 0x45, 0x07, 0x32, 0x31, 0xC6, 0xCE, 0x5D, 0xA7, 0x76, 0x66, 0xEC, 0xF1, 0x6F, 0x13, 0x3C, 0x6E, 0x89, 0xB3, 0x2C, 0x8B, 0xE2, 0x1D, 0xB0, 0x98, 0x15, 0x62, 0x0B, 0x10, 0x01, 0xB6, 0xBF, 0x47, 0xC9, 0x33, 0x4F, 0xBB, 0x8B, 0xFA, 0x64, 0xC4, 0x35, 0xB0, 0x14, 0x67, 0x06, 0x51, 0xD7, 0xE2, 0x1F, 0x41, 0xF3, 0x5F, 0x98, 0x36, 0xD7, 0x2E, 0xAB, 0xF5, 0x3B, 0x79, 0xE3, 0xEE, 0x5B, 0x63, 0x4F, 0x44, 0x13, 0xD3, 0xEF, 0xB0, 0xA7, 0x05, 0xB4, 0xF7, 0xBA, 0x59, 0x7E, 0x72, 0x66, 0xB7, 0xF5, 0x49, 0xDC, 0x96, 0x20, 0x0C, 0x30, 0x22, 0x67, 0xF2, 0xF8, 0xF4, 0xD6, 0xDC, 0xC1, 0x35, 0x78, 0x4C, 0xA1, 0x39, 0x8F, 0x1C, 0xA1, 0x3C, 0x1B, 0x35, 0x71, 0xAC, 0x56, 0xCB, 0x66, 0x5B, 0xEB, 0xED, 0xDE, 0xB9, 0x03, 0x50, 0x1E, 0x89, 0x12, 0x46, 0xC4, 0xA7, 0x33, 0x57, 0xBD, 0xE9, 0xBE, 0x8B, 0x47, 0x6D, 0xEF, 0xE3, 0x78, 0xE9, 0xDB, 0x39, 0x75, 0x5A, 0x72, 0x95, 0x4E, 0xD4, 0xE2, 0xA7, 0xAD, 0xF7, 0x46, 0x64, 0x76, 0xC2, 0x67, 0x39, 0x2A, 0x70, 0x61, 0x95, 0x71, 0xE7, 0x5F, 0x70, 0xF7, 0xDD, 0x81, 0xC2, 0xF2, 0xF8, 0x34, 0xAB, 0xE9, 0xF7, 0x02, 0x3D, 0xC2, 0x47, 0x3F, 0x9D, 0xC8, 0xFA, 0x74, 0xFB, 0xDF, 0x0D, 0x98, 0x7C, 0xDA, 0x43, 0x1F, 0x67, 0x51, 0x9D, 0x16, 0xDF, 0xD7, 0x54, 0x8E, 0x77, 0xC5, 0xA3, 0xA0, 0xC7, 0x9C, 0xC2, 0xC8, 0xC4, 0xB1, 0x22, 0x99, 0x2E, 0xC6, 0xBA, 0x81, 0xCD, 0x20, 0x74, 0x00, 0x29, 0x40, 0x24, 0xE1, 0xF3, 0x22, 0xCF, 0x24, 0xE6, 0xB7, 0xE8, 0x7E, 0x2F, 0xF3, 0x8A, 0xD7, 0x97, 0xB1, 0xEB, 0xFE, 0x6A, 0xCC, 0x09, 0x18, 0xB5, 0xA4, 0x21, 0x14, 0xF3, 0xD1, 0xAA, 0xEF, 0x82, 0xAA, 0x75, 0xA3, 0x44, 0xBB, 0x7D, 0xE3, 0x31, 0xB3, 0x05, 0x4B, 0x70, 0x4E, 0x3B, 0xEA, 0x6B, 0xA5, 0xB3, 0xD7, 0xBB, 0x78, 0x8F, 0x59, 0xF8, 0xEE, 0xC1, 0x3B, 0xE3, 0xDD, 0x0B, 0x50, 0x9F, 0xB9, 0xC1, 0x9D, 0x5E, 0x6E, 0x9C, 0x0A, 0xC5, 0x65, 0x9A, 0x81, 0x4E, 0xD6, 0xE8, 0x94, 0xAB, 0xCF, 0x4A, 0x6A, 0x52, 0xC4, 0xDF, 0x2D, 0xE6, 0x4C, 0x1C, 0xAD, 0x00, 0x76, 0x11, 0x8B, 0x10, 0x42, 0x01, 0x59, 0x80, 0xD7, 0x74, 0xD4, 0x07, 0xA2, 0x00, 0x37, 0x40, 0x46, 0x1A, 0x2E, 0xC0, 0xEC, 0x9D, 0x78, 0xBA, 0xAC, 0x89, 0x5A, 0x41, 0xDE, 0x34, 0xC1, 0xBE, 0xFE, 0xCF, 0xFB, 0x5C, 0xEE, 0xA3, 0x61, 0x72, 0xF5, 0x67, 0x6F, 0xB9, 0x91, 0xF1, 0x6F, 0x75, 0x0D, 0x88, 0x6E, 0x9B, 0x3C, 0xBD, 0x4B, 0xDD, 0x20, 0xF2, 0xF8, 0x1E, 0x2C, 0x7F, 0xFF, 0x7D, 0x09, 0xC0, 0xF4, 0x0E, 0x40, 0xDC, 0x9C, 0x6F, 0x57, 0x29, 0x3F, 0x55, 0x23, 0x1E, 0x37, 0x63, 0x77, 0x71, 0x04, 0xE5, 0x11, 0x85, 0xC3, 0xC7, 0x2F, 0x19, 0xB0, 0x99, 0xAB, 0x12, 0x19, 0x57, 0x81, 0xD7, 0xF3, 0x06, 0x51, 0x40, 0x0B, 0xA8, 0x29, 0xD6, 0x9F, 0x8D, 0x2E, 0x03, 0xF6, 0xE2, 0x8B, 0xFE, 0xE6, 0xA5, 0x64, 0x00, 0x3D, 0x3B, 0x63, 0x3E, 0x51, 0x6B, 0x54, 0xFE, 0xE7, 0xC6, 0x3A, 0x39, 0x1E, 0x01, 0xC4, 0x4D, 0x52, 0xE8, 0x62, 0x20, 0xEC, 0xF5, 0xE4, 0x30, 0x48, 0x40, 0x5A, 0x56, 0xFA, 0x6B, 0x04, 0xF0, 0xCE, 0x71, 0xDF, 0xD6, 0x81, 0x9F, 0xC9, 0xED, 0x12, 0x60, 0x1B, 0x60, 0xF2, 0xCE, 0x71, 0x45, 0x9F, 0xE4, 0x0C, 0x74, 0x45, 0xC6, 0x1D, 0x4D, 0x70, 0xB4, 0x47, 0x45, 0xAA, 0x5B, 0xD3, 0xA4, 0x67, 0x6E, 0x2F, 0x1B, 0xD8, 0xB3, 0x27, 0xE3, 0x40, 0x2B, 0x03, 0x15, 0x80, 0x35, 0xE0, 0x9F, 0xC9, 0x90, 0x2C, 0x46, 0x41, 0x01, 0x17, 0xC0, 0xF6, 0xBB, 0x85, 0xE8, 0x0B, 0xD8, 0x1B, 0xD0, 0x31, 0x37, 0x9E, 0xB0, 0x8D, 0x63, 0x5C, 0xCF, 0xDE, 0x0A, 0x37, 0xB9, 0xB6, 0xC0, 0x39, 0x7E, 0x07, 0xCB, 0xF4, 0x1C, 0xCE, 0xA2, 0x81, 0x18, 0x2E, 0xC9, 0x77, 0x41, 0xB5, 0xEE, 0x4E, 0x0B, 0x75, 0xFE, 0xB7, 0x9F, 0x94, 0xD9, 0x2C, 0x4D, 0x00, 0xAF, 0xF7, 0x51, 0xEE, 0xD3, 0x87, 0x7E, 0xB4, 0xF5, 0x49, 0xBB, 0x95, 0xBF, 0x22, 0x3E, 0xA3, 0xE8, 0x6B, 0xDC, 0xFE, 0xD3, 0x31, 0xD2, 0x68, 0x9E, 0x69, 0xBC, 0x7C, 0xF7, 0xF1, 0x0E, 0x6A, 0x05, 0x66, 0xC8, 0xEA, 0x6C, 0xF8, 0x05, 0x90, 0x0B, 0x88, 0x39, 0x9A, 0x47, 0xAA, 0x01, 0xC5, 0xC7, 0xA6, 0x38, 0x70, 0x5E, 0x0C, 0xC0, 0x04, 0x58, 0x0D, 0x48, 0xF3, 0x4C, 0x9B, 0xA8, 0x6D, 0x56, 0x1E, 0x27, 0x33, 0x41, 0x05, 0x26, 0x71, 0x21, 0xE8, 0xE6, 0xBD, 0x95, 0x7F, 0xA1, 0xF1, 0x95, 0xAB, 0x72, 0xA9, 0xD7, 0x47, 0x4F, 0xC3, 0x54, 0xE1, 0x9D, 0xE4, 0x4A, 0x3E, 0x8D, 0xB0, 0xF7, 0xB9, 0x54, 0x8C, 0x88, 0x06, 0xAA, 0x5E, 0xD7, 0xA9, 0xC6, 0x07, 0xC4, 0x91, 0x4C, 0x19, 0x2C, 0xF4, 0x09, 0xA6, 0x87, 0xE1, 0xC8, 0x27, 0xD1, 0x7E, 0x12, 0x2D, 0x99, 0x14, 0x39, 0x39, 0x95, 0xF6, 0x31, 0x4F, 0x53, 0x07, 0x82, 0xC8, 0x00, 0xAA, 0x80, 0xF6, 0x51, 0xE7, 0x00, 0xE7, 0x2D, 0x53, 0x13, 0x28, 0x07, 0x32, 0x00, 0x63, 0x24, 0x3B, 0x00, 0x6F, 0xA0, 0x84, 0x67, 0xEE, 0x09, 0x9A, 0xA0, 0x57, 0x49, 0xC5, 0x54, 0xED, 0x61, 0x25, 0x0F, 0x0F, 0xEA, 0x5E, 0x62, 0x9C, 0x2B, 0xD7, 0xE6, 0x65, 0x93, 0x70, 0xB8, 0x91, 0x59, 0xB4, 0x7F, 0xAD, 0x3A, 0x46, 0xC4, 0x9D, 0xBD, 0x3A, 0x3E, 0x28, 0x2D, 0xCF, 0x3A, 0x1D, 0x90, 0x02, 0x7C, 0x03, 0xE5, 0x37, 0x27, 0xC1, 0x4F, 0xD5, 0x81, 0x3F, 0xB5, 0xA1, 0xFC, 0x62, 0x8F, 0x53, 0xF9, 0x3A, 0x37, 0xBD, 0xB1, 0x0D, 0xB0, 0x64, 0xBC, 0x66, 0x9B, 0x42, 0xE7, 0xA6, 0x07, 0xC8, 0x1C, 0x35, 0x20, 0x46, 0x24, 0xA0, 0xC4, 0x8C, 0xA7, 0xA8, 0xD7, 0xFA, 0x62, 0xF1, 0xC5, 0xDC, 0xC0, 0x1E, 0x9B, 0xF5, 0x06, 0xBA, 0x66, 0x34, 0x4F, 0xD8, 0x14, 0x39, 0x46, 0xAE, 0xE8, 0xC2, 0xE0, 0xC8, 0x1F, 0xD9, 0xBA, 0x7F, 0x8B, 0xC9, 0x6E, 0xC1, 0x47, 0xC9, 0x60, 0x2B, 0x9A, 0xE4, 0x0D, 0x45, 0x69, 0x03, 0x73, 0x05, 0xA2, 0x7D, 0x32, 0xD0, 0x8E, 0x9B, 0xDE, 0xDC, 0x7B, 0xF6, 0xB1, 0x28, 0x03, 0x54, 0x81, 0x90, 0x9B, 0x71, 0x10, 0x67, 0x82, 0x59, 0xD7, 0x7F, 0xDC, 0x38, 0x0B, 0x33, 0xC7, 0xDB, 0xC7, 0xF5, 0x57, 0xB1, 0xAC, 0x63, 0x13, 0xDC, 0x99, 0x59, 0x72, 0x91, 0x37, 0x15, 0x60, 0x44, 0x26, 0x10, 0x0E, 0xF8, 0x26, 0x9C, 0x30, 0x20, 0x17, 0xD7, 0xB2, 0x01, 0x54, 0x4F, 0xE9, 0x22, 0x20, 0x27, 0xAB, 0x12, 0xF0, 0x00, 0x84, 0xB0, 0x69, 0x56, 0x65, 0x13, 0x34, 0x43, 0x05, 0xB5, 0xCD, 0x53, 0x93, 0x35, 0xE1, 0x6D, 0x70, 0x0E, 0xAA, 0xC0, 0xCE, 0xD4, 0x62, 0x2E, 0x60, 0x34, 0x57, 0x6E, 0x42, 0xE9, 0xF6, 0xDD, 0x0A, 0xD5, 0x29, 0xB0, 0x3B, 0x12, 0xE3, 0xF4, 0xB7, 0x9B, 0x69, 0x35, 0x03, 0xE3, 0x1B, 0xE8, 0x7D, 0xDB, 0x81, 0xD3, 0x54, 0x79, 0xBA, 0x5E, 0xAB, 0x21, 0xD8, 0xC6, 0x2B, 0xD3, 0x78, 0x85, 0x99, 0xB3, 0x7A, 0xA9, 0x4F, 0x15, 0xC1, 0x9A, 0xEC, 0x97, 0xBE, 0x37, 0x37, 0xC5, 0x29, 0x28, 0x94, 0xE3, 0xEF, 0x9C, 0x67, 0x2E, 0x91, 0x41, 0x6C, 0xA2, 0x71, 0xCA, 0x26, 0x7A, 0x52, 0x4D, 0x1C, 0x10, 0xE5, 0x8B, 0x06, 0x58, 0x01, 0x5B, 0x01, 0x4D, 0x9E, 0xB9, 0x26, 0x68, 0x8E, 0xF6, 0x56, 0xBE, 0x19, 0x34, 0xBA, 0xF7, 0xB6, 0x3D, 0x19, 0xCD, 0x69, 0x0D, 0x9B, 0x13, 0x6D, 0x2C, 0x61, 0x54, 0x66, 0x47, 0xEA, 0xAD, 0x61, 0xD1, 0xAB, 0xFB, 0xCD, 0x45, 0x20, 0xAC, 0x89, 0xE3, 0x00, 0xC0, 0x57, 0xE7, 0x40, 0xFF, 0x30, 0x02, 0x0B, 0xEF, 0x55, 0xCA, 0x0E, 0x0B, 0xC6, 0x02, 0x00, 0x4F, 0x20, 0xF8, 0xA2, 0x37, 0x46, 0x85, 0xCB, 0xE9, 0xA1, 0xDD, 0xC9, 0xEC, 0x46, 0x96, 0x75, 0x4F, 0x46, 0x9F, 0xED, 0x91, 0x44, 0xE6, 0xFF, 0x05, 0x4E, 0x94, 0x9D, 0x58, 0xC0, 0x16, 0x20, 0x1C, 0x6F, 0xB0, 0x04, 0x9A, 0x28, 0xC2, 0x03, 0x58, 0x39, 0xDD, 0xF5, 0x80, 0xE6, 0xAD, 0x62, 0x9D, 0x91, 0x16, 0xD8, 0x65, 0x2D, 0x67, 0x8A, 0xDB, 0xDB, 0x32, 0x75, 0xE6, 0x83, 0xCC, 0x51, 0x68, 0x55, 0xEE, 0x3D, 0xB5, 0x1E, 0xD9, 0xFB, 0xC7, 0x89, 0xDA, 0xAA, 0x4F, 0x57, 0x0C, 0x07, 0xBA, 0x88, 0x00, 0xB2, 0x88, 0x78, 0x97, 0x5C, 0x92, 0x4F, 0xFA, 0x31, 0xEE, 0xCD, 0x50, 0x48, 0x1E, 0x17, 0x8A, 0x99, 0x67, 0xED, 0xD9, 0x26, 0x98, 0xF2, 0x33, 0xA3, 0x1A, 0x76, 0x54, 0xA9, 0x91, 0x0A, 0xFC, 0x96, 0xD2, 0xB0, 0x4F, 0xED, 0xDB, 0xCD, 0x38, 0xDF, 0x79, 0x4A, 0xAE, 0x59, 0x0A, 0xBF, 0xCE, 0x78, 0x2D, 0x80, 0x7F, 0xBC, 0xA6, 0xBC, 0x81, 0x9C, 0x07, 0x99, 0x4E, 0xD4, 0x12, 0xF5, 0x8F, 0xE5, 0x18, 0x0E, 0x2B, 0xD0, 0xB7, 0x06, 0x06, 0xCC, 0x2D, 0x1D, 0x4C, 0xE4, 0xE7, 0x18, 0x33, 0x47, 0xCD, 0xDD, 0x56, 0xEE, 0x1C, 0xFF, 0x6B, 0xED, 0x3E, 0xA5, 0xAF, 0x7B, 0xF3, 0x53, 0x4C, 0xB2, 0xE3, 0x22, 0x02, 0xD8, 0x84, 0xBE, 0x75, 0x8C, 0xB3, 0x22, 0x9F, 0x9E, 0x91, 0xE3, 0x15, 0xB7, 0x79, 0xBD, 0x35, 0x11, 0xC7, 0x9C, 0x48, 0xE6, 0xD9, 0xD7, 0x1F, 0x4F, 0xFC, 0x7C, 0xCB, 0xAD, 0x96, 0x00, 0x39, 0x7B, 0xF1, 0x05, 0x88, 0x01, 0xB6, 0x81, 0x5E, 0xBC, 0xBE, 0xB9, 0xCE, 0xDD, 0x0A, 0xAC, 0xCD, 0x17, 0x13, 0x10, 0xBE, 0xBD, 0x04, 0xE8, 0x9E, 0x9D, 0x8B, 0x89, 0x5A, 0x21, 0x83, 0x4D, 0x95, 0x75, 0x33, 0xFA, 0x3F, 0x63, 0x6D, 0x65, 0x27, 0xF7, 0xC4, 0x15, 0x8B, 0x23, 0xBB, 0xD5, 0xD9, 0xDC, 0x72, 0x99, 0xDA, 0xF6, 0xD7, 0x9A, 0x54, 0x67, 0x97, 0x80, 0xD0, 0xD9, 0x6D, 0x23, 0xC6, 0x34, 0x40, 0x80, 0x9C, 0xF4, 0xF9, 0x99, 0xA8, 0xF4, 0xA8, 0x5C, 0x3E, 0xE5, 0x30, 0x57, 0x0F, 0x1B, 0x0D, 0x88, 0x7E, 0x4D, 0x75, 0x4C, 0xE9, 0x7A, 0xF4, 0x7D, 0x19, 0x31, 0xF8, 0xED, 0x4D, 0xB3, 0x05, 0xD0, 0x4D, 0x34, 0xE0, 0x1B, 0xE8, 0x19, 0x87, 0x47, 0xE8, 0x4E, 0x60, 0x1B, 0x5F, 0x4C, 0x40, 0x1C, 0xB2, 0xC0, 0xE9, 0xA2, 0x30, 0xA7, 0xEC, 0x89, 0x5A, 0x23, 0xE5, 0xD2, 0x1D, 0x19, 0xF6, 0xA2, 0xBF, 0x6D, 0x69, 0x2B, 0xFD, 0xFD, 0x13, 0x7B, 0x6F, 0x0A, 0x01, 0x7C, 0xE4, 0x95, 0xFC, 0x87, 0x7B, 0x54, 0xBC, 0xEB, 0xA9, 0xAF, 0xE2, 0x51, 0x63, 0x96, 0x39, 0x06, 0x7D, 0x1B, 0xE8, 0xBA, 0x88, 0x9B, 0xFB, 0x0D, 0xB4, 0xDD, 0xD5, 0xDD, 0xF6, 0xD3, 0x98, 0x34, 0x39, 0x3C, 0x2C, 0x71, 0x34, 0x9D, 0x46, 0x3C, 0xA6, 0xDA, 0xE1, 0xDD, 0x2C, 0x50, 0x01, 0xA4, 0xF0, 0xA2, 0x18, 0xD0, 0xFE, 0x59, 0x18, 0x24, 0xE0, 0xF1, 0x2E, 0x0C, 0x76, 0x00, 0xFD, 0x59, 0x11, 0xA8, 0xF0, 0xC5, 0x06, 0xEC, 0xAC, 0xD6, 0x01, 0xA9, 0xB9, 0x69, 0x30, 0x6A, 0x3A, 0x1D, 0xF7, 0x94, 0x16, 0x80, 0xF4, 0x55, 0xB3, 0xCD, 0x75, 0xEE, 0xA6, 0x5F, 0x63, 0x73, 0xB2, 0x57, 0x9C, 0x52, 0xD8, 0xD3, 0xE1, 0x21, 0xE2, 0x75, 0xA3, 0x3B, 0xAB, 0xE7, 0x8A, 0x4F, 0x6B, 0x9D, 0x0C, 0xA0, 0x04, 0xC8, 0x06, 0x8E, 0xF0, 0xE7, 0x5C, 0xF9, 0x4D, 0x8F, 0x9A, 0xA9, 0xC0, 0x63, 0x1E, 0xDA, 0xD6, 0x5B, 0x56, 0x2E, 0xF3, 0x20, 0x1E, 0x3B, 0xDB, 0x6B, 0x11, 0xF1, 0x16, 0xFF, 0xCF, 0xE4, 0x7F, 0x04, 0xB1, 0x1D, 0x9F, 0x92, 0x7E, 0x03, 0x66, 0x23, 0x5A, 0xA7, 0x96, 0x3A, 0x00, 0xE7, 0x91, 0x09, 0xB0, 0x4F, 0x81, 0x12, 0xA0, 0x06, 0xB8, 0xCF, 0x99, 0x13, 0xB5, 0x8D, 0x22, 0x36, 0x0F, 0x14, 0xDB, 0xB0, 0x68, 0xA6, 0xAD, 0x1E, 0xE7, 0xC3, 0x64, 0x55, 0x86, 0x7B, 0x42, 0xA3, 0x65, 0x8B, 0xFB, 0x57, 0xC8, 0xBD, 0x3D, 0x58, 0x74, 0xBF, 0xED, 0xB5, 0x74, 0x01, 0xEE, 0xC4, 0x1C, 0x3D, 0xFD, 0x43, 0xEA, 0xA4, 0x2B, 0x70, 0x06, 0x99, 0xC7, 0x27, 0x4D, 0x66, 0x09, 0xFF, 0xB4, 0xB9, 0x18, 0xED, 0x3F, 0x4F, 0xDD, 0x7C, 0xEC, 0xD9, 0x44, 0x05, 0x6C, 0x16, 0xDF, 0x9F, 0x8E, 0xC5, 0xD2, 0x40, 0xAE, 0x77, 0xF1, 0xB0, 0x12, 0x88, 0xF5, 0x56, 0x69, 0x2D, 0xC6, 0xA9, 0x17, 0xE0, 0xF2, 0xFA, 0x28, 0xCC, 0xD1, 0xC4, 0x30, 0x73, 0xA2, 0x26, 0x68, 0x0C, 0x24, 0x8D, 0x3F, 0xB4, 0x1B, 0xBE, 0x43, 0xBA, 0x9E, 0x1C, 0x49, 0x33, 0x41, 0x79, 0xC3, 0x62, 0xBD, 0xA3, 0xCF, 0x4C, 0xE3, 0x87, 0x25, 0x80, 0xCB, 0xA7, 0x3C, 0x4F, 0xA6, 0xC3, 0x43, 0xBF, 0x8D, 0xA8, 0x53, 0x00, 0x5F, 0x80, 0xEC, 0x5B, 0xE4, 0xD9, 0xA7, 0x65, 0x51, 0xCD, 0x3E, 0x0B, 0x13, 0xFC, 0x93, 0x47, 0xCB, 0x99, 0x16, 0xC6, 0x53, 0xA6, 0xE6, 0xDA, 0x92, 0xD6, 0x6D, 0xC2, 0xA7, 0xC6, 0xD4, 0x50, 0x72, 0xFA, 0x51, 0x9B, 0xBF, 0xCC, 0x99, 0xC5, 0xA6, 0x40, 0x6D, 0x26, 0x7F, 0x2E, 0x20, 0xEA, 0x96, 0x67, 0xE1, 0x31, 0x05, 0x95, 0x3D, 0x81, 0x5C, 0x80, 0x24, 0xCE, 0xEC, 0xB8, 0xF3, 0x6B, 0xD8, 0x2E, 0x32, 0x66, 0xCA, 0x7F, 0x90, 0x8D, 0x78, 0xD7, 0x86, 0xEF, 0x50, 0x39, 0x2C, 0x12, 0x7C, 0x36, 0x35, 0x76, 0xD0, 0xC2, 0x2F, 0x29, 0xAC, 0xCB, 0x4C, 0x34, 0xDE, 0xA2, 0xC6, 0xD9, 0x6F, 0x97, 0x4F, 0x07, 0x96, 0x5D, 0x40, 0xFB, 0xDC, 0x16, 0x81, 0x6D, 0x80, 0x10, 0xA3, 0x38, 0x2F, 0x46, 0x74, 0x7C, 0xF9, 0x9D, 0x59, 0x7B, 0x1D, 0x38, 0xD2, 0x60, 0x80, 0xB8, 0xB6, 0x9F, 0x27, 0x61, 0xDB, 0xCC, 0x4A, 0x01, 0x9F, 0x0A, 0xE7, 0x71, 0xCE, 0xFC, 0x36, 0x47, 0x12, 0xC0, 0x13, 0x28, 0x2E, 0x68, 0x8D, 0x55, 0xA9, 0xAA, 0x40, 0x15, 0x90, 0x0D, 0xD8, 0xD4, 0x98, 0x1B, 0xE0, 0x09, 0xCC, 0xCF, 0xAA, 0x27, 0x6A, 0x58, 0x17, 0x78, 0x24, 0xE6, 0xD2, 0x69, 0x48, 0x1A, 0x5F, 0xFB, 0xD9, 0x32, 0xC8, 0xA5, 0xC8, 0xE5, 0xCE, 0x82, 0xFD, 0xB2, 0xF6, 0xD3, 0x3E, 0x3B, 0xEA, 0xE3, 0xD8, 0x11, 0x4F, 0xC7, 0xF8, 0x59, 0x82, 0xF6, 0xDD, 0x41, 0xE8, 0x57, 0x8D, 0xF6, 0x75, 0x0B, 0x05, 0x66, 0x54, 0xEA, 0x99, 0x57, 0xCA, 0x34, 0xA0, 0x2D, 0x1C, 0x55, 0xF2, 0x33, 0xE5, 0x4D, 0x1B, 0xDF, 0x67, 0x41, 0xED, 0x02, 0xA8, 0x9C, 0xDB, 0x12, 0xFB, 0x86, 0x01, 0x5F, 0xB7, 0x48, 0xD9, 0x80, 0x06, 0x50, 0x7C, 0xDA, 0xA4, 0xBE, 0x76, 0xA5, 0x7B, 0xF3, 0xC5, 0x04, 0x24, 0x79, 0x26, 0x8F, 0x56, 0xF3, 0x94, 0x98, 0xA8, 0x39, 0x9C, 0xEB, 0x64, 0x73, 0x06, 0xE8, 0xBF, 0x9C, 0xCC, 0xB8, 0x96, 0xE8, 0xA8, 0xA2, 0x6E, 0xAC, 0xA6, 0x97, 0x9E, 0x5D, 0x09, 0x54, 0x0B, 0x7C, 0x9A, 0x1A, 0xC7, 0x7D, 0x3A, 0xEE, 0x38, 0x06, 0x8F, 0x71, 0xCD, 0xF8, 0xEE, 0x3F, 0x53, 0x0E, 0xB4, 0xD3, 0xB3, 0x52, 0x6F, 0xC1, 0x35, 0x53, 0x84, 0x0D, 0x83, 0x04, 0xCE, 0x8E, 0x81, 0xA3, 0x60, 0xB9, 0x77, 0xD9, 0x5C, 0x68, 0x73, 0xCF, 0x98, 0x6A, 0x63, 0x8E, 0x8E, 0xC6, 0xD1, 0x16, 0xC0, 0x03, 0xC8, 0xA6, 0x92, 0xBE, 0x81, 0x4D, 0x48, 0xBF, 0xE5, 0x7A, 0xB9, 0xF9, 0x25, 0x2D, 0x60, 0x35, 0x5F, 0x2C, 0x40, 0xF9, 0x86, 0x0E, 0x1C, 0xED, 0xE6, 0x99, 0x67, 0xA8, 0x05, 0x6B, 0x55, 0xE3, 0x97, 0xAE, 0x57, 0xB1, 0xB1, 0x7D, 0x76, 0x86, 0x1A, 0xCD, 0x40, 0xE8, 0x16, 0x60, 0x1A, 0xAC, 0xAE, 0x79, 0x5A, 0x63, 0x88, 0x01, 0x33, 0x79, 0xB0, 0x58, 0xB7, 0x9E, 0x30, 0x4F, 0xF1, 0xA7, 0x28, 0xE0, 0x05, 0xA8, 0x03, 0x2B, 0x01, 0xFB, 0x1D, 0x51, 0x9D, 0x77, 0xAE, 0xD7, 0x9D, 0x0F, 0xB7, 0xE0, 0xCE, 0x5C, 0x2C, 0xFE, 0x8C, 0xD2, 0x85, 0x63, 0x75, 0x01, 0x9B, 0xB0, 0x31, 0x1F, 0x49, 0x60, 0x9C, 0x32, 0xD7, 0x66, 0x81, 0x41, 0xE2, 0xCC, 0xD5, 0x40, 0x18, 0x50, 0xAC, 0xFB, 0xD9, 0x44, 0xED, 0xD7, 0x99, 0x6F, 0x6F, 0x60, 0x15, 0x5E, 0x2C, 0xC2, 0x1D, 0xD0, 0x7C, 0xCF, 0x0C, 0x9F, 0x98, 0x25, 0x1E, 0x51, 0x39, 0xCB, 0x76, 0xFA, 0x3A, 0x6B, 0x3C, 0x31, 0xF3, 0x32, 0x54, 0x16, 0xA9, 0xC2, 0xF7, 0x42, 0x61, 0x08, 0xB0, 0xA7, 0x98, 0x11, 0xA8, 0xF5, 0xB4, 0x13, 0xA1, 0x76, 0xAC, 0x83, 0x3C, 0x5A, 0x85, 0x39, 0x90, 0x73, 0xF3, 0x35, 0x86, 0xAE, 0xD9, 0xB6, 0x28, 0xF8, 0xC1, 0x68, 0x01, 0x27, 0x53, 0x09, 0x3C, 0x55, 0xC2, 0x2C, 0x27, 0x0C, 0x2E, 0x47, 0xC3, 0xF8, 0x51, 0x14, 0xE1, 0xE9, 0x40, 0xB0, 0xC2, 0x81, 0x65, 0x88, 0xA7, 0x39, 0xB0, 0x92, 0xB0, 0x17, 0xE2, 0x40, 0x29, 0xDF, 0x47, 0xFF, 0xBA, 0xED, 0xC4, 0xC2, 0x8B, 0xD5, 0x80, 0x2B, 0xA0, 0xEB, 0x1E, 0x71, 0x07, 0x03, 0x31, 0x2B, 0x96, 0xA7, 0xE8, 0xB3, 0x4E, 0xB7, 0x14, 0x98, 0xB0, 0x98, 0x71, 0xC7, 0xDB, 0xD9, 0xB4, 0x59, 0xA1, 0xA0, 0xAE, 0x7C, 0x5C, 0x49, 0x13, 0xC8, 0xFD, 0x29, 0xCA, 0x08, 0x99, 0x91, 0xCC, 0x2F, 0x60, 0x72, 0xB1, 0x17, 0x60, 0x35, 0x98, 0x87, 0xD9, 0x0D, 0x5D, 0xB2, 0xC7, 0xCF, 0xF4, 0x67, 0xEE, 0x69, 0xDE, 0xCB, 0x8F, 0xE9, 0x7C, 0x91, 0xFE, 0xC0, 0x56, 0xA7, 0x17, 0xB6, 0x2B, 0x0B, 0xE8, 0x02, 0x58, 0x2C, 0xBC, 0x0B, 0x05, 0x34, 0x08, 0x7D, 0xE1, 0x0B, 0xE8, 0xCD, 0xF7, 0x39, 0x50, 0x45, 0x04, 0x10, 0x0D, 0x58, 0x00, 0x2A, 0x80, 0xCB, 0xD4, 0xCB, 0x4F, 0xCC, 0x1A, 0x22, 0x69, 0x0A, 0x16, 0xCD, 0xBB, 0x60, 0xBE, 0xA7, 0xF2, 0x8C, 0x3A, 0x49, 0x81, 0x14, 0x9D, 0x46, 0x81, 0x39, 0x1F, 0xB7, 0x0E, 0x03, 0x7C, 0xD2, 0x4B, 0xCE, 0xFD, 0x8C, 0xE2, 0x8B, 0xF3, 0xF9, 0x36, 0x93, 0x2D, 0x15, 0xC0, 0x08, 0xF7, 0xBF, 0x32, 0x21, 0xA9, 0x99, 0x07, 0x5C, 0xEB, 0x46, 0x6E, 0x1C, 0xF3, 0x32, 0x8C, 0x09, 0x0F, 0x05, 0xB6, 0x63, 0x47, 0xE7, 0xAF, 0xD3, 0xCD, 0x0A, 0x7E, 0x01, 0x0A, 0xF4, 0xD8, 0x9D, 0x13, 0xE5, 0x1C, 0xD7, 0x0B, 0x10, 0x01, 0x92, 0x77, 0x86, 0x10, 0xEE, 0x49, 0x27, 0xB1, 0xF1, 0x62, 0x0A, 0x20, 0x0D, 0xCC, 0x8B, 0xB2, 0x71, 0xCA, 0x51, 0x87, 0x6C, 0xC6, 0x60, 0x62, 0x4C, 0x8C, 0xA3, 0x4A, 0xE5, 0x53, 0x3B, 0xEB, 0xC5, 0xAA, 0x9F, 0x32, 0xEE, 0x59, 0xDA, 0x59, 0x6C, 0x22, 0x1F, 0xF6, 0x66, 0xC3, 0xD8, 0x59, 0xE8, 0xF9, 0x3E, 0xE9, 0x25, 0x80, 0x0B, 0xB1, 0x01, 0x0D, 0x40, 0x36, 0x10, 0xB3, 0x72, 0x89, 0x77, 0x3D, 0x60, 0x8B, 0x53, 0x84, 0x59, 0x48, 0x37, 0x9F, 0x79, 0x72, 0xFD, 0xBB, 0x46, 0xAE, 0x75, 0xAE, 0x00, 0xE2, 0xAC, 0xDF, 0x73, 0x24, 0x6C, 0xE3, 0x23, 0xB3, 0x80, 0x9C, 0x87, 0x32, 0xA1, 0x0E, 0xB4, 0xF0, 0x26, 0xD2, 0x63, 0x90, 0x02, 0xC8, 0xC6, 0x8B, 0xBD, 0x00, 0xED, 0x77, 0xA9, 0x2E, 0xCA, 0x33, 0xF7, 0x04, 0x6D, 0xB3, 0x05, 0x9A, 0xFF, 0xE0, 0x5B, 0x7E, 0xFB, 0xA1, 0x3B, 0x36, 0x94, 0x59, 0xD5, 0xC4, 0x3F, 0xCA, 0x84, 0x35, 0x5B, 0x78, 0x50, 0x88, 0x73, 0x0A, 0xF7, 0x35, 0x56, 0x9B, 0x05, 0xC1, 0x24, 0x2F, 0x9D, 0x5D, 0x3C, 0x05, 0x76, 0xF1, 0x28, 0x88, 0x9B, 0xC7, 0xC0, 0x3D, 0xBD, 0xBB, 0x7F, 0x4C, 0x79, 0xFB, 0xCA, 0x7E, 0xB1, 0x19, 0x85, 0x31, 0x3A, 0xAB, 0x2B, 0x68, 0xFB, 0xA9, 0x1B, 0x6A, 0x8E, 0x6D, 0xE7, 0x99, 0xC2, 0x98, 0x04, 0x83, 0xD1, 0x9C, 0x9F, 0xED, 0x7C, 0x7B, 0x58, 0xAE, 0x06, 0x92, 0xCF, 0xDC, 0xE0, 0x53, 0x56, 0x0C, 0x18, 0x61, 0xA5, 0x02, 0xD0, 0xB8, 0xED, 0xD2, 0x9A, 0x8F, 0xD7, 0x75, 0xC7, 0x1A, 0xB6, 0x0A, 0xB2, 0x9B, 0x9E, 0x15, 0xCD, 0x84, 0x7B, 0x41, 0x24, 0x9C, 0x43, 0x66, 0x36, 0x8E, 0xAD, 0xE1, 0x02, 0x26, 0xF1, 0xE4, 0xAB, 0xF9, 0x57, 0xE8, 0x38, 0x89, 0xC4, 0xC7, 0x6A, 0x89, 0x88, 0x4F, 0x6E, 0xB5, 0x13, 0x0A, 0x8C, 0x69, 0x85, 0x8E, 0xD0, 0x21, 0xCD, 0x25, 0xE5, 0x93, 0xF8, 0xA3, 0x8C, 0x9A, 0x70, 0x8D, 0x34, 0x09, 0xED, 0x47, 0x46, 0x9B, 0x89, 0x60, 0xE8, 0xB7, 0x95, 0xA5, 0xCE, 0x6D, 0x02, 0xA8, 0xD9, 0x37, 0x70, 0xC0, 0x16, 0xD0, 0x35, 0x9D, 0x29, 0xDF, 0x86, 0x18, 0xAA, 0x6F, 0x47, 0x4B, 0x53, 0x60, 0x2D, 0x40, 0x84, 0xA7, 0xF8, 0x44, 0x4D, 0xD9, 0xFD, 0x69, 0xEE, 0x78, 0xF5, 0xCB, 0xA3, 0x4F, 0xCB, 0x67, 0xF1, 0xB9, 0x42, 0xB9, 0xF9, 0x17, 0xA8, 0x3C, 0xD7, 0xFD, 0x46, 0xAD, 0xDF, 0xFC, 0xE5, 0xB3, 0xF5, 0xA9, 0x05, 0x74, 0xBE, 0x0D, 0x89, 0x5B, 0x08, 0xE5, 0x8B, 0x01, 0x84, 0xDD, 0xF2, 0xFF, 0xAD, 0xA7, 0x29, 0xA3, 0xD5, 0x5C, 0x6A, 0x37, 0x17, 0x25, 0xCE, 0xC5, 0x7C, 0xF6, 0x88, 0xEB, 0x86, 0x79, 0x22, 0x6A, 0x7F, 0x5D, 0x66, 0xD6, 0xBB, 0xCE, 0xCC, 0xB3, 0x33, 0x02, 0xE8, 0x06, 0x6A, 0x54, 0xB8, 0x49, 0x9B, 0x0E, 0x60, 0x94, 0xBD, 0x5A, 0x80, 0x14, 0xCF, 0xEC, 0xD7, 0x29, 0x6A, 0xE7, 0x44, 0xCD, 0xD0, 0x9C, 0xAB, 0x94, 0xAE, 0xB5, 0x6F, 0xD6, 0x77, 0xE9, 0xA6, 0x80, 0x9A, 0x6C, 0x68, 0x51, 0x50, 0xC8, 0xBC, 0x9F, 0x24, 0x05, 0xD7, 0xCF, 0x58, 0x33, 0x7B, 0x33, 0x88, 0xCB, 0x08, 0xFF, 0x28, 0xB7, 0x93, 0x9D, 0x0B, 0x70, 0x54, 0xE6, 0xA9, 0x51, 0x3B, 0xC9, 0x3A, 0x7B, 0x92, 0x83, 0x78, 0x24, 0xB3, 0xDF, 0x27, 0xA3, 0xE8, 0xF0, 0xCC, 0xFD, 0x6E, 0x17, 0x9E, 0xDC, 0x0C, 0xB9, 0xED, 0x4B, 0xE8, 0x07, 0x72, 0x3B, 0xF5, 0xAC, 0x06, 0x84, 0x48, 0x8E, 0x27, 0xEF, 0x77, 0xE7, 0xB4, 0x0B, 0x88, 0x06, 0x76, 0xBF, 0x0D, 0x56, 0xB9, 0xAA, 0x07, 0x10, 0x35, 0x87, 0xBF, 0x6E, 0x18, 0xD6, 0xEA, 0x86, 0x92, 0x0F, 0x2B, 0xFD, 0x4D, 0xF0, 0xAB, 0x1A, 0x5F, 0x6B, 0x24, 0x1B, 0x78, 0x38, 0xCA, 0xC9, 0x22, 0x47, 0x16, 0xFA, 0xF6, 0xFB, 0x19, 0x67, 0x83, 0x37, 0x61, 0x53, 0x17, 0x70, 0x8E, 0x14, 0x90, 0x7C, 0x11, 0x7D, 0x5D, 0xF4, 0xB7, 0x9E, 0xCD, 0xB8, 0x36, 0x8E, 0x12, 0x7E, 0xFA, 0x9E, 0x70, 0xED, 0xD1, 0xA6, 0xDF, 0x64, 0xDB, 0x25, 0x40, 0xD4, 0x7D, 0xB6, 0xDC, 0xAD, 0xF4, 0x04, 0x3C, 0x80, 0x2C, 0xA0, 0x93, 0x11, 0x2D, 0x6A, 0x9E, 0x0B, 0x28, 0xE2, 0xDB, 0x39, 0xB9, 0x0A, 0xF0, 0x0D, 0xA4, 0x8C, 0x6A, 0x32, 0x51, 0x0B, 0x68, 0x2F, 0xAE, 0xAC, 0x26, 0x71, 0x98, 0xB0, 0x84, 0xC2, 0x94, 0xA4, 0x36, 0x1E, 0xF2, 0x65, 0x70, 0x6E, 0xC8, 0x4D, 0x35, 0xB8, 0x68, 0xB0, 0xFC, 0x9A, 0x37, 0x41, 0xF2, 0x61, 0x78, 0x64, 0x9F, 0x3B, 0x6E, 0x7D, 0x7A, 0xBF, 0x2C, 0x7F, 0x57, 0xC4, 0x59, 0x84, 0xE3, 0x67, 0x91, 0xDC, 0xF8, 0xB4, 0xDB, 0x69, 0x50, 0x8F, 0x39, 0xB9, 0x4F, 0x4B, 0x3C, 0xDA, 0xC3, 0xE4, 0x51, 0x31, 0x00, 0x79, 0xE6, 0x7F, 0x8D, 0xD0, 0x99, 0x9C, 0xB9, 0x5A, 0x8C, 0x5C, 0xC2, 0x59, 0xD6, 0x4E, 0xC0, 0x37, 0xFD, 0x3C, 0x1C, 0x48, 0xBA, 0x51, 0xEF, 0x0D, 0xAC, 0x18, 0x57, 0x44, 0xC0, 0x1B, 0xB0, 0x0D, 0x38, 0x4E, 0xB9, 0x77, 0xB5, 0xA4, 0xEF, 0x0D, 0xD2, 0x61, 0x74, 0xD7, 0xAF, 0x3E, 0x2B, 0x6B, 0x0A, 0x68, 0xF9, 0xE4, 0x36, 0xC1, 0xF3, 0xB8, 0x1C, 0x6B, 0x25, 0x29, 0xCA, 0xB5, 0x6F, 0x42, 0xA9, 0xCC, 0x95, 0x38, 0xC9, 0x3C, 0x67, 0x8D, 0x6E, 0x80, 0x29, 0xB1, 0x89, 0x7E, 0x9B, 0xF7, 0xEB, 0x2D, 0x83, 0x94, 0x7D, 0x4A, 0x7E, 0x62, 0x73, 0xC1, 0x97, 0x0C, 0xF6, 0xBE, 0x8E, 0xAA, 0x76, 0x96, 0xE3, 0x21, 0x53, 0xFC, 0xC9, 0xF7, 0x8D, 0x9C, 0xBF, 0xAF, 0x73, 0x66, 0x72, 0xC5, 0x5E, 0xA7, 0x99, 0x4D, 0x53, 0xD2, 0xD8, 0x0D, 0x64, 0xF0, 0xBB, 0xB2, 0xB7, 0xDF, 0xE8, 0x9A, 0x54, 0xC3, 0x0D, 0xC8, 0x7E, 0x9B, 0xD1, 0xAE, 0x39, 0x25, 0x27, 0x68, 0x85, 0xCD, 0x30, 0x41, 0x35, 0xF6, 0xD8, 0x51, 0xAF, 0x14, 0x76, 0xCD, 0xE3, 0x8B, 0x51, 0xF8, 0xEB, 0xBB, 0xD8, 0xAC, 0x4A, 0x6E, 0xD7, 0xF1, 0x8F, 0xF9, 0x84, 0x03, 0xB8, 0x84, 0x38, 0xA4, 0x6F, 0x0D, 0x32, 0x20, 0xC0, 0xB6, 0xA9, 0xE1, 0xE3, 0x8B, 0x23, 0xC9, 0xFA, 0x6C, 0x83, 0x72, 0x3D, 0x3D, 0x5B, 0x88, 0xB3, 0x66, 0x9E, 0xCF, 0x39, 0x05, 0xDF, 0x3C, 0x73, 0x44, 0x3B, 0x35, 0xBE, 0x2F, 0x67, 0xDD, 0xFF, 0x3A, 0x1D, 0x3A, 0x7F, 0xCB, 0xA0, 0xA7, 0x12, 0x2B, 0x80, 0x32, 0x8E, 0xEC, 0xA4, 0x15, 0x8A, 0x13, 0xEB, 0x1D, 0xC4, 0x56, 0x80, 0x08, 0x60, 0x93, 0x5A, 0x12, 0x13, 0xB4, 0x66, 0x2D, 0x1D, 0x1D, 0xBD, 0xA5, 0xE0, 0x86, 0xD4, 0x8D, 0xED, 0xA3, 0x6C, 0x4C, 0xBA, 0x5D, 0xB1, 0x6B, 0x9B, 0xC6, 0xCA, 0x08, 0x78, 0xF8, 0xD5, 0x6B, 0x09, 0xE0, 0x76, 0x4D, 0x5A, 0x46, 0xD2, 0x17, 0x3F, 0x52, 0x63, 0x28, 0x51, 0x80, 0x19, 0xB0, 0x1F, 0x07, 0x5F, 0x14, 0x30, 0xF2, 0x9B, 0xA3, 0xF0, 0xF8, 0xF4, 0xCE, 0x35, 0xDA, 0x94, 0x6C, 0x1C, 0x69, 0x1F, 0x3D, 0x24, 0x7D, 0x2E, 0x67, 0x1C, 0xCD, 0xA2, 0xA2, 0x79, 0xCA, 0x98, 0x62, 0xDB, 0x02, 0x7A, 0x0C, 0xB3, 0x17, 0x60, 0x06, 0xF4, 0xEC, 0xE1, 0x6F, 0xA0, 0x8B, 0x10, 0x20, 0x37, 0x60, 0xC4, 0x2E, 0x40, 0x93, 0x37, 0x8C, 0x89, 0x19, 0xAD, 0x8D, 0x3C, 0x0B, 0xC3, 0x35, 0xF6, 0x6F, 0x79, 0x6C, 0xDB, 0x5F, 0x69, 0x68, 0x15, 0xAF, 0x92, 0x60, 0x0A, 0x58, 0x23, 0xF5, 0x85, 0x03, 0xED, 0x75, 0xDD, 0xC7, 0xB6, 0xC4, 0xF4, 0x90, 0x79, 0x13, 0x11, 0x76, 0x10, 0x02, 0xAC, 0xFD, 0x4A, 0x93, 0x46, 0x29, 0x7F, 0x84, 0x6E, 0xAD, 0xDB, 0x9A, 0x58, 0x29, 0x96, 0xC8, 0x99, 0x7C, 0x1E, 0x63, 0x3F, 0x0E, 0xAD, 0xDE, 0xC0, 0xEC, 0xF1, 0xD5, 0xD3, 0x84, 0x03, 0x5A, 0x38, 0x16, 0x56, 0x94, 0x62, 0x43, 0xC7, 0xDA, 0x15, 0xC8, 0x60, 0x40, 0x93, 0x21, 0x5C, 0x40, 0x3B, 0xB1, 0x81, 0x30, 0x40, 0x84, 0x31, 0x57, 0x1C, 0x4D, 0x0B, 0x08, 0x39, 0x41, 0xDB, 0xFC, 0x77, 0x85, 0x5D, 0xA8, 0x15, 0x76, 0xED, 0x7B, 0xA4, 0x21, 0xAE, 0xD2, 0x36, 0xFC, 0xFD, 0x3C, 0x93, 0xBE, 0x97, 0x4D, 0xB7, 0x09, 0xCE, 0x34, 0x00, 0xCF, 0x29, 0x6B, 0x78, 0x9A, 0xAF, 0xD8, 0xE9, 0x33, 0xA4, 0x4A, 0x24, 0x20, 0x06, 0xAC, 0x02, 0x82, 0x97, 0x55, 0xFB, 0x9F, 0x13, 0x98, 0xC5, 0x74, 0x48, 0xE1, 0xCE, 0xFA, 0xA4, 0x79, 0x60, 0x89, 0x89, 0x41, 0x48, 0x9D, 0x49, 0x92, 0xC3, 0x6E, 0x5D, 0x9D, 0x49, 0x8F, 0x1F, 0xCE, 0x18, 0xAC, 0x29, 0xDF, 0xAE, 0x0A, 0xE4, 0xA6, 0x4F, 0x8C, 0x01, 0x31, 0x82, 0x48, 0x00, 0xBD, 0x80, 0xDA, 0x80, 0x2B, 0xB0, 0x1D, 0x67, 0xD6, 0xA8, 0x24, 0x7B, 0xC4, 0xA7, 0x89, 0x19, 0x83, 0x15, 0x81, 0xC9, 0x48, 0x28, 0x97, 0xB4, 0xAF, 0x34, 0xB4, 0x55, 0x7E, 0xC8, 0x6E, 0xDC, 0x64, 0x5B, 0xD1, 0x1C, 0x74, 0x96, 0x9D, 0x40, 0x4E, 0xF3, 0x95, 0x9C, 0xE6, 0x2B, 0x1C, 0xBC, 0xFB, 0x08, 0x7D, 0x80, 0xE9, 0xA8, 0x7F, 0x80, 0x08, 0xA0, 0x1C, 0x52, 0x45, 0xA9, 0xCD, 0xF9, 0xF7, 0x72, 0xFA, 0xC8, 0x28, 0x3F, 0xD8, 0xC6, 0x8B, 0xC6, 0x67, 0x9F, 0x51, 0x4B, 0x0A, 0x01, 0xB6, 0x32, 0x9E, 0x7E, 0xD5, 0x38, 0xC3, 0xAD, 0xCF, 0xF9, 0x5C, 0xF4, 0x3E, 0xA2, 0xDC, 0x6A, 0xC0, 0x9D, 0x85, 0xB5, 0x0B, 0x68, 0x36, 0xE2, 0xD5, 0x81, 0x03, 0x5B, 0xF1, 0xB3, 0xDA, 0x40, 0x10, 0xA9, 0xF8, 0x59, 0xE4, 0xC4, 0x4C, 0x27, 0x3C, 0x03, 0x3A, 0xE6, 0xC4, 0x39, 0x2A, 0x63, 0x3D, 0x78, 0xB3, 0x78, 0xF6, 0xA7, 0xC9, 0xDA, 0xE9, 0xEB, 0x37, 0xB3, 0x0E, 0xF9, 0x9B, 0x99, 0x2A, 0x87, 0x77, 0xB1, 0x95, 0x42, 0x4E, 0xD7, 0x53, 0x07, 0x22, 0x58, 0x91, 0x4F, 0x93, 0xCF, 0x16, 0x20, 0x93, 0x56, 0x7A, 0xC1, 0xBC, 0x7C, 0x65, 0x77, 0x57, 0x1A, 0x91, 0xA8, 0xBC, 0xE5, 0xC0, 0xEA, 0x84, 0xBD, 0x47, 0x2D, 0x2C, 0x5A, 0x4A, 0xC0, 0x17, 0x10, 0x0E, 0x54, 0xB3, 0x54, 0xD8, 0x00, 0xD9, 0x80, 0x35, 0x50, 0x46, 0xCB, 0x92, 0x06, 0x76, 0x12, 0x0D, 0x48, 0x02, 0xD6, 0x40, 0x2D, 0xA0, 0x7F, 0xC0, 0xC2, 0x9D, 0x31, 0x33, 0x94, 0xDB, 0xB9, 0xA1, 0x3B, 0xBF, 0x16, 0x06, 0x0A, 0xE7, 0xEF, 0x5B, 0x15, 0x56, 0x0C, 0xE5, 0xBF, 0xCD, 0x16, 0xD5, 0x8D, 0x31, 0xE8, 0x7A, 0xCC, 0x0C, 0xF6, 0x29, 0xCF, 0x5F, 0xA7, 0x83, 0xE4, 0xC8, 0xC4, 0xEF, 0x35, 0x76, 0xAE, 0x87, 0x73, 0xA9, 0x19, 0x30, 0x02, 0x5A, 0xEB, 0x6D, 0x7D, 0x3D, 0x6D, 0x76, 0xB0, 0x0D, 0x88, 0x0E, 0x15, 0xC4, 0x1E, 0xC7, 0x9A, 0xA0, 0xB1, 0x59, 0xF3, 0x14, 0x25, 0x12, 0x2F, 0xE2, 0x7B, 0x18, 0xFB, 0x1B, 0x9A, 0x5B, 0xE5, 0x46, 0x3C, 0x53, 0x08, 0x64, 0x69, 0xFD, 0x10, 0x45, 0x67, 0x84, 0x00, 0xC2, 0x81, 0xCA, 0x0F, 0x36, 0x90, 0x05, 0x94, 0x00, 0xCD, 0x4E, 0x78, 0xBE, 0x27, 0x66, 0x8E, 0x12, 0xD7, 0xD0, 0xE7, 0xB6, 0xBF, 0x22, 0xB1, 0x69, 0xD9, 0x8A, 0x81, 0x69, 0x4A, 0x35, 0x75, 0xD3, 0xE4, 0xD9, 0xB8, 0x56, 0xA2, 0xAF, 0x26, 0xD0, 0x3F, 0x34, 0x03, 0x39, 0x85, 0xC1, 0x5A, 0xE7, 0xA6, 0xAA, 0x05, 0x84, 0x00, 0x6E, 0xC4, 0xF3, 0x5C, 0x72, 0xCA, 0xD9, 0xF0, 0xA8, 0x42, 0xC2, 0x90, 0xB1, 0x63, 0xEF, 0x38, 0xBA, 0x34, 0xB0, 0x39, 0x30, 0xC7, 0x2A, 0xD4, 0x93, 0x10, 0xC0, 0x26, 0x66, 0x4A, 0x38, 0x90, 0x01, 0xF4, 0x38, 0xDA, 0x2E, 0xC0, 0x36, 0x30, 0x9D, 0x1F, 0x54, 0x01, 0x4F, 0x20, 0x94, 0x70, 0x20, 0x05, 0x68, 0x5E, 0x2B, 0x5B, 0x81, 0xA8, 0x89, 0x59, 0x20, 0x7F, 0xA1, 0xFD, 0x35, 0x35, 0xD1, 0x3A, 0x47, 0x81, 0xDD, 0x34, 0xB8, 0x43, 0x55, 0x40, 0xDF, 0xCF, 0xFA, 0x15, 0x5C, 0xF8, 0x35, 0x0A, 0xC6, 0x66, 0xCF, 0xED, 0xD0, 0x3E, 0x4F, 0x76, 0xE7, 0x00, 0x63, 0xBF, 0x3E, 0xC3, 0x3E, 0x35, 0x90, 0x80, 0x6D, 0xDE, 0x69, 0xFB, 0x6A, 0xDC, 0x82, 0x33, 0x93, 0x69, 0x80, 0x39, 0xED, 0x8D, 0xB9, 0x24, 0x4C, 0x2C, 0x67, 0xF0, 0x33, 0x36, 0x3B, 0xB6, 0xCD, 0x8F, 0xC2, 0xCF, 0x67, 0x01, 0x08, 0x03, 0xD2, 0x0B, 0xC8, 0x00, 0xAA, 0x80, 0x4E, 0x9E, 0xE2, 0x40, 0x31, 0x04, 0x6E, 0x40, 0x6F, 0x42, 0x81, 0x12, 0x20, 0x92, 0x08, 0xA0, 0x39, 0x76, 0x4B, 0x26, 0x66, 0x89, 0xBB, 0xDB, 0x42, 0xCA, 0x95, 0xE8, 0xB7, 0xAC, 0x7D, 0x2A, 0x42, 0x1C, 0x45, 0xC1, 0xDD, 0xBF, 0xFD, 0x73, 0xC3, 0x1E, 0xB2, 0xC9, 0x3F, 0x97, 0xEA, 0xC7, 0x0C, 0x60, 0xBD, 0xB5, 0xBB, 0xD5, 0xF3, 0x22, 0xE0, 0x49, 0xF0, 0x28, 0x1F, 0xF1, 0x23, 0xF9, 0xF6, 0x59, 0x4A, 0x62, 0x1E, 0xFB, 0xB4, 0x37, 0x9E, 0x06, 0xB4, 0x33, 0x7F, 0xF6, 0x06, 0x8C, 0xEF, 0x3B, 0xFF, 0xA9, 0x8E, 0xD7, 0x98, 0x4C, 0xA2, 0xFB, 0x5B, 0xCC, 0x66, 0x0D, 0x4C, 0x72, 0xF4, 0x64, 0x87, 0x48, 0x00, 0x25, 0x40, 0x12, 0x27, 0xC7, 0x74, 0x03, 0x46, 0x38, 0x96, 0xF1, 0x77, 0xA4, 0x15, 0x3B, 0x62, 0x04, 0x3C, 0xE3, 0xBB, 0xB1, 0xE7, 0xB9, 0x03, 0x09, 0x5F, 0xD5, 0x4C, 0x4A, 0xD9, 0xB4, 0xEF, 0x0B, 0x54, 0x82, 0x47, 0xBC, 0xFE, 0x9A, 0xF5, 0x44, 0x4D, 0x4F, 0x9D, 0xF8, 0x38, 0x6B, 0x44, 0x11, 0x0D, 0x58, 0x00, 0x32, 0x79, 0x42, 0xF1, 0xDA, 0x23, 0x1E, 0x31, 0x4D, 0x75, 0x92, 0x4D, 0x00, 0xED, 0x9B, 0xE7, 0x7E, 0x7D, 0x3D, 0xEC, 0xB1, 0xDF, 0x2F, 0xE5, 0xFB, 0x62, 0x1A, 0xB3, 0x8E, 0x0A, 0x51, 0x1F, 0x21, 0x53, 0x99, 0x5E, 0x5F, 0xAF, 0xCA, 0xBE, 0x03, 0x68, 0x8A, 0x95, 0xBE, 0x00, 0x33, 0x60, 0x7E, 0x96, 0x0A, 0x98, 0x00, 0xB1, 0x27, 0x39, 0x75, 0xA2, 0xD6, 0x94, 0xC9, 0xB9, 0xD9, 0xA9, 0x81, 0xC4, 0xF8, 0xEA, 0xC7, 0x70, 0xDF, 0x42, 0x28, 0x26, 0x07, 0x7C, 0x09, 0x65, 0xBD, 0x25, 0x79, 0x67, 0xDD, 0x39, 0xF6, 0x0E, 0x7B, 0x9C, 0xF7, 0xDE, 0x9D, 0x62, 0x6F, 0x40, 0x1D, 0xD8, 0x72, 0x53, 0x64, 0x70, 0xF5, 0xDD, 0x7A, 0x5E, 0x23, 0xD8, 0xCE, 0xEE, 0xA4, 0xBA, 0xD4, 0x48, 0x89, 0x63, 0xA0, 0x76, 0x12, 0x66, 0xD6, 0x54, 0xE7, 0x4C, 0xCD, 0xA2, 0xDD, 0x34, 0x51, 0x8A, 0xD2, 0x32, 0x9B, 0x5F, 0xEB, 0xD8, 0x94, 0xAD, 0x05, 0x58, 0xBF, 0x7B, 0x98, 0x3B, 0x81, 0x34, 0x20, 0x0A, 0xD0, 0xC2, 0x29, 0xD5, 0x80, 0x17, 0x90, 0x3C, 0xF3, 0x94, 0xB5, 0xC7, 0x18, 0x0A, 0xFB, 0x6F, 0x16, 0xD3, 0xF2, 0xCD, 0x50, 0x9B, 0xD4, 0xA5, 0x51, 0x87, 0xEA, 0xB7, 0x83, 0x6E, 0x25, 0x4F, 0x39, 0xBB, 0xAF, 0x4F, 0x11, 0x86, 0xD5, 0x27, 0x1B, 0x32, 0x3E, 0x57, 0xA8, 0x12, 0x42, 0x8C, 0xCB, 0x03, 0x75, 0xA4, 0xF6, 0x33, 0x74, 0x18, 0x0B, 0x8E, 0x35, 0x1C, 0xC9, 0x59, 0xD7, 0x6F, 0xF6, 0x78, 0xC8, 0x49, 0x19, 0x04, 0x54, 0x17, 0x5E, 0x3C, 0x0A, 0xE6, 0xF8, 0xB1, 0xD5, 0xEB, 0x44, 0xEC, 0x35, 0x39, 0x2E, 0x80, 0x3A, 0x30, 0x96, 0x0D, 0x63, 0x31, 0x66, 0x02, 0xE8, 0x06, 0xA6, 0x4F, 0x94, 0x19, 0xB0, 0x14, 0x10, 0xFB, 0x24, 0xDE, 0x06, 0xDA, 0x39, 0x44, 0x06, 0x1E, 0x95, 0x3B, 0x7F, 0x55, 0xED, 0x25, 0xFB, 0x89, 0x5A, 0x54, 0xFD, 0xB0, 0x96, 0xFC, 0x3E, 0xDF, 0xCE, 0x5B, 0x47, 0x70, 0xAF, 0xD0, 0xCD, 0x38, 0x89, 0xDF, 0x7D, 0xF6, 0x3C, 0xC9, 0x43, 0x32, 0x25, 0x67, 0x0E, 0xA4, 0x02, 0xBE, 0x80, 0x90, 0xB3, 0x9D, 0xC0, 0xC8, 0xD4, 0x7B, 0x85, 0xEE, 0x9E, 0xCD, 0x18, 0x5E, 0x9A, 0x6F, 0xF7, 0x54, 0x53, 0x60, 0xAD, 0xDB, 0xFE, 0x6B, 0xCB, 0x11, 0xCC, 0xE2, 0x51, 0xB6, 0x7F, 0x91, 0x05, 0x72, 0x92, 0x46, 0x1C, 0x08, 0x06, 0x2F, 0x18, 0xA0, 0x1D, 0xC0, 0x1A, 0x35, 0x77, 0x01, 0x9B, 0x67, 0xA6, 0x00, 0x3D, 0xA7, 0xD4, 0x44, 0x4D, 0xB0, 0x84, 0x68, 0x83, 0xB9, 0x98, 0xD4, 0x6F, 0xD6, 0x98, 0xFA, 0x76, 0x99, 0xD5, 0x74, 0xD4, 0x52, 0x2C, 0x87, 0xDB, 0x86, 0xC7, 0xD9, 0x89, 0x1A, 0xD9, 0xFB, 0xCD, 0xEB, 0xA3, 0xCE, 0x3D, 0x09, 0x7D, 0xAE, 0x1F, 0xDF, 0x8C, 0xAB, 0x73, 0x5F, 0x57, 0x96, 0xCD, 0xE0, 0xF9, 0xF8, 0x04, 0xE4, 0xE8, 0xB7, 0xC4, 0xF4, 0x13, 0x61, 0x64, 0xCA, 0x80, 0x93, 0xA2, 0xD9, 0xC4, 0x7A, 0x32, 0x51, 0xED, 0xAF, 0xFC, 0x62, 0xF2, 0x01, 0x3F, 0x3B, 0x52, 0x9A, 0x6F, 0xF6, 0x86, 0xD6, 0xBB, 0xC2, 0xEB, 0x37, 0xB1, 0xFE, 0xDC, 0xC9, 0xCA, 0x01, 0x53, 0x20, 0x78, 0x4A, 0xF4, 0x44, 0x4D, 0x91, 0xD2, 0xAC, 0x49, 0xF5, 0xCF, 0xB0, 0x14, 0x11, 0x79, 0x66, 0x21, 0xF3, 0x17, 0x56, 0xED, 0xE9, 0xCE, 0x74, 0xFD, 0xAE, 0x3E, 0x69, 0x43, 0xC8, 0xD9, 0x9F, 0x22, 0xC0, 0xB7, 0x26, 0x22, 0x08, 0x9D, 0x12, 0xCF, 0x0D, 0x48, 0x10, 0x72, 0xCD, 0xF8, 0xF6, 0xC9, 0xCE, 0x92, 0x02, 0xF0, 0xA2, 0x4F, 0xDF, 0xD2, 0x93, 0xB7, 0x1E, 0x93, 0xA2, 0x9B, 0x77, 0xC8, 0xEC, 0x93, 0xC7, 0x35, 0x4E, 0xF5, 0xAB, 0xA6, 0x1D, 0x1C, 0x15, 0x10, 0x01, 0x9A, 0xFB, 0xA2, 0x66, 0xCC, 0x9D, 0x9A, 0xE6, 0xCE, 0x02, 0x44, 0x11, 0x0A, 0xD8, 0x9A, 0xFE, 0xCF, 0x40, 0x28, 0x50, 0x3C, 0xA5, 0x7D, 0x82, 0x46, 0xB3, 0x26, 0xD9, 0x54, 0x14, 0x8A, 0xCB, 0x38, 0x87, 0x6D, 0x66, 0x70, 0x43, 0x74, 0x1B, 0x5C, 0xDE, 0x76, 0x41, 0x07, 0xB3, 0xE4, 0x6A, 0xE0, 0xF6, 0xD0, 0xDE, 0xC7, 0x03, 0x63, 0x4D, 0x89, 0x98, 0x4F, 0x43, 0x06, 0xE1, 0xA0, 0xDE, 0x38, 0x0A, 0x07, 0x76, 0xF3, 0xE3, 0x06, 0x30, 0xCD, 0x74, 0xF3, 0x51, 0x2B, 0x30, 0xD2, 0x90, 0xB7, 0xFE, 0xA4, 0xB6, 0x43, 0xBF, 0xE5, 0x4E, 0x1B, 0x35, 0x61, 0x07, 0x92, 0x6B, 0x58, 0x61, 0x60, 0x8A, 0xDA, 0x8E, 0x4D, 0xE2, 0xCC, 0xAC, 0xD1, 0xB9, 0x1C, 0x5F, 0x0A, 0x24, 0x57, 0xDE, 0xC6, 0x6C, 0x7B, 0x25, 0xCA, 0x5F, 0x44, 0x02, 0xB6, 0x00, 0xD9, 0x80, 0xD9, 0xF4, 0x73, 0x9C, 0xA0, 0x39, 0xD4, 0x98, 0x76, 0x4A, 0xBC, 0x8D, 0x14, 0x94, 0x30, 0xB4, 0xB3, 0x57, 0xC5, 0xBE, 0x78, 0x21, 0xAE, 0x12, 0x9B, 0xB7, 0x64, 0xEC, 0x8B, 0xDA, 0x37, 0xC7, 0x5B, 0x26, 0xF9, 0x38, 0xA7, 0x2F, 0xF1, 0x94, 0xA4, 0x8E, 0xE7, 0xAD, 0xE1, 0x28, 0x09, 0xC9, 0x4F, 0x45, 0xAB, 0xE3, 0xC5, 0x69, 0x08, 0x2A, 0x13, 0xDF, 0x9C, 0x5B, 0x08, 0xE3, 0x2B, 0x77, 0x53, 0x6D, 0xBC, 0x60, 0xE3, 0x0F, 0xB7, 0xDC, 0x5A, 0x94, 0xDF, 0x4B, 0x9D, 0x11, 0x57, 0x53, 0x5D, 0x30, 0x59, 0x6F, 0xE3, 0xDD, 0xBD, 0x80, 0xA4, 0xFA, 0x18, 0x42, 0x15, 0x69, 0xA0, 0x1C, 0x94, 0x1B, 0xF0, 0x02, 0x74, 0x8E, 0x7C, 0xFA, 0x1E, 0x4E, 0xD4, 0x02, 0xF6, 0xE5, 0xB2, 0x79, 0x5B, 0x68, 0x3C, 0x51, 0xEE, 0x42, 0xDE, 0x51, 0x98, 0x87, 0x7D, 0xBE, 0x85, 0x5E, 0xB3, 0xEC, 0x94, 0xE7, 0xFA, 0x59, 0x4B, 0xC9, 0xAD, 0x86, 0xD2, 0xFD, 0x71, 0x32, 0x9E, 0xFD, 0xC1, 0x3C, 0x1D, 0x04, 0x6C, 0x4A, 0x79, 0x9C, 0xE9, 0x15, 0x85, 0x17, 0xD7, 0xD3, 0x3A, 0xD0, 0x99, 0xD8, 0x92, 0xA7, 0x67, 0x40, 0x38, 0x5E, 0x34, 0x26, 0xFC, 0x98, 0x4F, 0xAB, 0x42, 0xC0, 0x17, 0xDF, 0x20, 0xB4, 0x84, 0x2C, 0x66, 0xD0, 0x2C, 0xAE, 0x82, 0x68, 0xD0, 0xB7, 0xB9, 0xFE, 0x5C, 0x0E, 0x24, 0x17, 0x97, 0xB6, 0xB1, 0x9C, 0xDC, 0x02, 0x58, 0x02, 0xFE, 0x39, 0xD2, 0x22, 0x1A, 0xF0, 0xC2, 0xE2, 0x44, 0x75, 0x62, 0x96, 0xF8, 0xB4, 0x8B, 0x96, 0x73, 0x59, 0xCC, 0x93, 0x34, 0xC6, 0x8C, 0x79, 0x62, 0xD5, 0xD8, 0x61, 0x60, 0x72, 0xDF, 0x2F, 0xAB, 0x4F, 0xCE, 0x7E, 0xCA, 0x6E, 0x20, 0xEC, 0x3A, 0xF2, 0xC9, 0x3E, 0xDD, 0x41, 0x4C, 0xDF, 0x74, 0xB1, 0x55, 0xEF, 0xD6, 0xB5, 0x27, 0x01, 0x55, 0x9E, 0x1A, 0x41, 0x30, 0xBA, 0x42, 0x4D, 0x90, 0x51, 0xE2, 0xF6, 0x08, 0xD5, 0x3C, 0xCA, 0xAA, 0x23, 0xE3, 0xDA, 0xBB, 0x7C, 0x15, 0xA6, 0xF8, 0x24, 0x0D, 0x49, 0x9D, 0xFE, 0x8E, 0xC1, 0x08, 0x26, 0xD7, 0xAD, 0xCB, 0x81, 0x4A, 0x2E, 0x2E, 0xB9, 0x7A, 0x72, 0x05, 0xBA, 0x28, 0xB6, 0xF8, 0x1C, 0x01, 0x75, 0x81, 0x9F, 0x01, 0xBD, 0x27, 0x66, 0xF5, 0x18, 0xEC, 0xBB, 0x25, 0xF6, 0x76, 0xE8, 0xBF, 0xB5, 0xAB, 0xF0, 0x35, 0xF6, 0xA6, 0xB3, 0x73, 0xE0, 0x49, 0xD3, 0xFA, 0x8B, 0x59, 0x5E, 0xB3, 0xFD, 0xAB, 0xA7, 0xF5, 0xBA, 0xE6, 0x4B, 0xDC, 0x82, 0xBD, 0x42, 0x5A, 0x3B, 0x30, 0x1B, 0x53, 0xB9, 0x09, 0x9E, 0xD2, 0xA3, 0xB1, 0x26, 0x42, 0xD0, 0xB3, 0x52, 0x75, 0xC0, 0x85, 0x30, 0x20, 0x89, 0xD1, 0x47, 0x9A, 0x83, 0x6F, 0x25, 0x8D, 0x0E, 0x73, 0x7C, 0x45, 0xE9, 0xA9, 0x3C, 0xF6, 0xC9, 0x9B, 0x16, 0xC9, 0x34, 0x63, 0x95, 0x02, 0x6A, 0xC6, 0x59, 0x01, 0x2A, 0x80, 0x11, 0x1E, 0x40, 0xD1, 0x45, 0x79, 0x15, 0x20, 0x06, 0x98, 0x4D, 0xCC, 0x9A, 0x9D, 0xD5, 0x95, 0x2D, 0xDD, 0x1D, 0x2A, 0x44, 0x04, 0x66, 0xEF, 0x7D, 0x5A, 0x69, 0xE3, 0xEE, 0xBA, 0x36, 0x53, 0x2B, 0xF2, 0xF6, 0x5E, 0x59, 0xF6, 0xE6, 0x29, 0xB7, 0xAE, 0x5B, 0x43, 0xE2, 0xB3, 0x33, 0x70, 0x76, 0x3E, 0x52, 0x80, 0xD3, 0x6C, 0x77, 0x03, 0xB2, 0x26, 0x8D, 0xFB, 0xF6, 0x73, 0xC6, 0xF3, 0x14, 0xDE, 0x6A, 0x93, 0x29, 0xBC, 0x00, 0x57, 0xC0, 0x36, 0x20, 0x0A, 0x74, 0x5D, 0x5D, 0x3A, 0x39, 0xCE, 0x30, 0x30, 0x11, 0x41, 0x26, 0x06, 0x96, 0xB2, 0xC7, 0x8F, 0x03, 0xE3, 0xE1, 0xEA, 0x4D, 0xD9, 0x29, 0x00, 0x2B, 0xC0, 0x95, 0x48, 0x20, 0x0C, 0xC8, 0x06, 0x7A, 0x04, 0x15, 0x67, 0xCC, 0xF2, 0x9D, 0xFC, 0x87, 0x24, 0x75, 0xF7, 0x7C, 0x6C, 0xBE, 0x25, 0x85, 0x7A, 0x0C, 0x92, 0xE6, 0xA7, 0xC1, 0x60, 0xDC, 0x0E, 0xE3, 0xB8, 0x69, 0xCC, 0x9A, 0x99, 0x63, 0x69, 0x52, 0xC2, 0x78, 0xB3, 0x2A, 0x01, 0x84, 0xD7, 0x91, 0x19, 0x7E, 0x66, 0x0D, 0xE8, 0xC6, 0xCF, 0x74, 0x5A, 0x7D, 0x3B, 0xEF, 0x9F, 0xFC, 0xB4, 0xE2, 0x80, 0x1A, 0x60, 0x02, 0x24, 0x2F, 0xBC, 0xC5, 0x48, 0x8C, 0x52, 0x54, 0x94, 0xC7, 0x8C, 0x5D, 0x7D, 0xF6, 0xA2, 0x29, 0xA4, 0x50, 0x39, 0x5D, 0x14, 0x2D, 0xE9, 0x9D, 0xA9, 0x0B, 0xE8, 0x7E, 0x15, 0xC9, 0x5C, 0x40, 0x05, 0xD0, 0xD3, 0x0A, 0xC3, 0x80, 0x28, 0xA0, 0x9C, 0x1A, 0xE4, 0x9E, 0x98, 0x6D, 0x88, 0x81, 0xED, 0xBF, 0x74, 0xA1, 0xF4, 0xE0, 0x2A, 0x8A, 0xED, 0x05, 0x44, 0xB1, 0x10, 0x30, 0xB6, 0x9D, 0xCF, 0x9F, 0x90, 0xD6, 0xD9, 0x9B, 0x05, 0xB2, 0x5F, 0xBB, 0x26, 0x06, 0xCF, 0xA6, 0xFB, 0xA4, 0x01, 0xD9, 0x40, 0x24, 0x60, 0x02, 0x48, 0x00, 0x7B, 0x13, 0x93, 0xA0, 0xA0, 0xD3, 0x26, 0xE3, 0x2D, 0x3B, 0xD8, 0xE7, 0x45, 0x40, 0x88, 0x99, 0x18, 0xA7, 0xF1, 0x68, 0xDD, 0x15, 0xC7, 0xDE, 0x67, 0xD7, 0xD0, 0xA6, 0x91, 0x4B, 0xBE, 0xF5, 0x87, 0x35, 0xC9, 0xCA, 0x05, 0x34, 0x27, 0x7E, 0x39, 0xC3, 0x9D, 0xD8, 0x82, 0x17, 0x2B, 0x00, 0x53, 0x60, 0x1B, 0x20, 0xCD, 0x33, 0x63, 0xA2, 0x26, 0xCC, 0x68, 0x6B, 0x88, 0x44, 0x9B, 0xB6, 0xB0, 0x51, 0x68, 0xB5, 0xC0, 0x86, 0x82, 0x22, 0x4E, 0x53, 0xE4, 0xFD, 0x5B, 0x04, 0xA5, 0xFB, 0xDB, 0x22, 0x6F, 0x7F, 0x72, 0xBB, 0x7D, 0xBD, 0x95, 0x71, 0x5E, 0x44, 0x03, 0x22, 0x73, 0xDB, 0x03, 0x2C, 0x09, 0xE3, 0x29, 0xA7, 0xC4, 0x65, 0xAA, 0xF4, 0x1D, 0x88, 0xB8, 0xFD, 0xEF, 0xF6, 0xA9, 0x8E, 0x72, 0x9F, 0x86, 0x79, 0xC0, 0xAC, 0x1C, 0x4E, 0xAE, 0xC7, 0x94, 0x72, 0xCA, 0xAD, 0x14, 0x8B, 0xD3, 0xC2, 0x3B, 0x3F, 0x4D, 0x3E, 0x7B, 0x4D, 0x0E, 0x3C, 0xF7, 0xFF, 0x15, 0x90, 0x02, 0x96, 0x8C, 0x43, 0x25, 0x20, 0x0D, 0xF8, 0xF8, 0x85, 0xE8, 0x44, 0x4D, 0x99, 0x7C, 0x1E, 0xB8, 0x26, 0xC4, 0x7F, 0xDA, 0x5F, 0x47, 0x3E, 0x19, 0xF1, 0xB1, 0x7A, 0xDA, 0x14, 0xA0, 0xD2, 0x90, 0xEA, 0x50, 0x7E, 0x33, 0xE2, 0x77, 0xDC, 0xDE, 0xB1, 0x71, 0xAC, 0xDC, 0xA2, 0x89, 0x04, 0xD4, 0x5E, 0x7F, 0xB7, 0x94, 0xBB, 0x4F, 0x0A, 0x8B, 0x1B, 0x46, 0xC6, 0xB8, 0x47, 0x41, 0xF8, 0x14, 0x3B, 0x1D, 0x93, 0x22, 0x40, 0x72, 0x82, 0x07, 0x4C, 0x36, 0x96, 0x05, 0x47, 0x17, 0xC3, 0xA5, 0xCE, 0x0F, 0x1A, 0xF7, 0x01, 0xC4, 0xDF, 0x82, 0x66, 0x02, 0xAC, 0x4D, 0xE0, 0xAE, 0xA9, 0x6E, 0xA0, 0x92, 0x10, 0xC0, 0x15, 0x58, 0x3C, 0x33, 0x03, 0xE8, 0xC9, 0xBA, 0xF4, 0x89, 0x9A, 0x61, 0xC2, 0x5B, 0x89, 0x6C, 0x84, 0x7B, 0x85, 0x3E, 0xB7, 0x3A, 0x4B, 0x0A, 0x92, 0x36, 0x71, 0x79, 0x93, 0x86, 0xE2, 0x6B, 0x36, 0x31, 0xF9, 0x41, 0x73, 0xDD, 0xF1, 0xA8, 0x89, 0xFC, 0xD8, 0x48, 0xBA, 0xBC, 0x1E, 0x28, 0x35, 0x23, 0x4F, 0x38, 0x82, 0x88, 0x19, 0xB8, 0xED, 0x6F, 0x1F, 0x92, 0x59, 0xCF, 0xF6, 0x26, 0x92, 0x41, 0x1F, 0x45, 0x24, 0x95, 0xF9, 0x41, 0x23, 0x2E, 0x71, 0xE4, 0x09, 0xD1, 0xA3, 0x65, 0x10, 0x93, 0xD5, 0xDA, 0xA3, 0x9B, 0x25, 0xA0, 0x0E, 0xAC, 0x49, 0x75, 0x0D, 0x60, 0x6D, 0x40, 0x16, 0x4F, 0x59, 0x13, 0x35, 0x24, 0xBC, 0x54, 0x34, 0xBB, 0x4E, 0x27, 0xA3, 0x06, 0x2B, 0x4C, 0x55, 0x2C, 0x9C, 0x54, 0x92, 0xB6, 0x21, 0x1B, 0x1D, 0x51, 0x45, 0xE6, 0xCA, 0x7C, 0x93, 0x21, 0xF7, 0xFE, 0xD4, 0xCA, 0x12, 0x35, 0xE1, 0xD2, 0x37, 0x4E, 0xB6, 0x01, 0x9D, 0xA3, 0x9E, 0x3F, 0xC5, 0xC8, 0x1C, 0xEF, 0x64, 0x40, 0x4F, 0x55, 0x22, 0x23, 0xAA, 0xC0, 0x4E, 0x8E, 0xD1, 0x23, 0x6B, 0x3E, 0x49, 0x23, 0x71, 0xCA, 0x3D, 0x57, 0xDE, 0xBD, 0xFC, 0x3F, 0x33, 0xA8, 0x45, 0x04, 0x07, 0xE0, 0xB4, 0x05, 0xD0, 0x04, 0x3A, 0x08, 0x05, 0x72, 0x01, 0xBA, 0x81, 0xE5, 0x80, 0xFC, 0xA0, 0xF7, 0xBE, 0x06, 0x3B, 0x48, 0x6B, 0x08, 0x92, 0x5E, 0x8D, 0x19, 0x50, 0x0A, 0xEE, 0xFF, 0x62, 0x6C, 0x85, 0x59, 0x68, 0x62, 0x66, 0x5C, 0xB1, 0x77, 0x3E, 0xD5, 0x51, 0x6B, 0x81, 0x66, 0xB7, 0x60, 0xF1, 0xC8, 0x84, 0x79, 0xBE, 0xFA, 0x5E, 0xEF, 0x8A, 0x3D, 0x37, 0xB0, 0x47, 0x42, 0xEC, 0x71, 0x2A, 0xBB, 0xF2, 0x8C, 0x9F, 0xA2, 0xFB, 0xB9, 0xDE, 0x42, 0x81, 0xDD, 0x84, 0x02, 0xEB, 0xA9, 0xFC, 0xEF, 0x59, 0xE4, 0xCC, 0x43, 0x1A, 0x47, 0xCE, 0x87, 0x98, 0x73, 0xDE, 0xE7, 0xDC, 0x6C, 0xF1, 0xC2, 0x1B, 0x26, 0xB7, 0x3E, 0xD6, 0xD9, 0x16, 0x2D, 0x03, 0xBA, 0xB8, 0xB0, 0x58, 0x84, 0x00, 0xDB, 0x80, 0x79, 0x8E, 0x2F, 0x9D, 0xA0, 0x25, 0x6A, 0xE7, 0xDB, 0x99, 0x2A, 0xAF, 0x98, 0x39, 0x2B, 0x4D, 0x2B, 0x43, 0x39, 0xD7, 0xDA, 0x3C, 0xA5, 0x7E, 0x0A, 0x60, 0x58, 0xDE, 0xEE, 0x2B, 0xA9, 0x9F, 0xEA, 0xC5, 0xCD, 0xEB, 0xE5, 0xB8, 0x4E, 0xF5, 0x26, 0x14, 0xF0, 0x0D, 0x6C, 0x1B, 0x7B, 0x35, 0xA0, 0x3E, 0xB7, 0xB3, 0xD4, 0x49, 0x8F, 0x66, 0x36, 0x5F, 0x8D, 0x7A, 0xFB, 0xC6, 0xBC, 0x0C, 0x50, 0x05, 0x72, 0xDD, 0xCE, 0x96, 0x31, 0x4B, 0x7C, 0x9C, 0xA9, 0xB3, 0xB9, 0xBE, 0x4F, 0xFB, 0x1E, 0xE7, 0xCA, 0x42, 0x04, 0x68, 0xAE, 0xE2, 0xC6, 0x62, 0x40, 0xE4, 0xC5, 0x24, 0xD7, 0x97, 0x02, 0x61, 0xC0, 0x49, 0x99, 0xB7, 0x09, 0x5A, 0xD1, 0x0B, 0x6F, 0x23, 0x23, 0x3D, 0x85, 0xCD, 0x5B, 0x66, 0xED, 0x39, 0x2B, 0xA0, 0x11, 0x93, 0x9C, 0xEE, 0x24, 0x3A, 0xE6, 0x2F, 0xAF, 0xB9, 0xA6, 0x50, 0x1F, 0xAB, 0x73, 0x1F, 0xE4, 0x68, 0xDA, 0x80, 0xEA, 0x94, 0x09, 0x03, 0xA7, 0xF3, 0x77, 0x00, 0x53, 0x60, 0x66, 0x93, 0x2A, 0x9A, 0x6F, 0x39, 0xB5, 0x3C, 0xAB, 0xB2, 0x75, 0xB2, 0x16, 0xCB, 0x81, 0x65, 0x80, 0xE4, 0x2D, 0x29, 0xEB, 0x93, 0xC5, 0xB1, 0x16, 0xC3, 0xD4, 0xB7, 0x50, 0x00, 0x4F, 0x22, 0xD4, 0x20, 0x3C, 0x7D, 0x6C, 0xD6, 0x41, 0x2C, 0x62, 0x03, 0x46, 0x6C, 0x9E, 0x59, 0x7D, 0x1B, 0xEB, 0xDF, 0xFC, 0xD1, 0xEC, 0xC7, 0x2B, 0xBE, 0xCC, 0xB1, 0xA8, 0xDB, 0xC2, 0x17, 0xD9, 0x90, 0x2F, 0xB9, 0xC6, 0xEE, 0x60, 0x0D, 0xF9, 0x66, 0x93, 0xB7, 0x77, 0xF1, 0x39, 0x8F, 0xC8, 0x3D, 0x4F, 0xDC, 0x40, 0x94, 0x47, 0xF0, 0x99, 0x89, 0xBF, 0xCA, 0xDC, 0x75, 0xA7, 0x8C, 0x13, 0x98, 0x59, 0x52, 0xFA, 0xCC, 0x05, 0x5E, 0x87, 0x82, 0x98, 0x0E, 0x00, 0x05, 0x94, 0xBC, 0x8D, 0xC6, 0xEC, 0x87, 0xA0, 0xD3, 0x0E, 0xEF, 0x3B, 0xCE, 0x45, 0xEB, 0xF4, 0x69, 0xC8, 0x60, 0x6A, 0x00, 0x33, 0x4A, 0x8A, 0xD7, 0x7F, 0x35, 0x27, 0xB8, 0xEB, 0x58, 0x76, 0x4B, 0x02, 0x61, 0x40, 0xCB, 0xBB, 0x1D, 0xEF, 0x06, 0xB4, 0xBF, 0xFB, 0xF0, 0x3E, 0xD2, 0x50, 0xAD, 0xA7, 0xF7, 0xA2, 0x95, 0x62, 0x7C, 0x77, 0xFF, 0x44, 0xE5, 0xB5, 0x27, 0x33, 0xB0, 0xB8, 0xC7, 0x6B, 0x34, 0xCB, 0x73, 0x2E, 0x03, 0xDE, 0xC5, 0xE7, 0x3A, 0xFE, 0x5C, 0xF7, 0x49, 0xD5, 0x7F, 0x45, 0x5F, 0x7A, 0xB3, 0xCB, 0xF3, 0x34, 0xA0, 0x8E, 0x05, 0x2C, 0xE2, 0x34, 0x0C, 0x0D, 0xC4, 0xCC, 0xEA, 0xB6, 0xC7, 0xD5, 0x09, 0xE4, 0x79, 0xF6, 0x2F, 0x07, 0xA4, 0x18, 0x3A, 0x88, 0x88, 0x38, 0xD3, 0x12, 0x67, 0x7A, 0xFE, 0x15, 0x06, 0x6D, 0x6E, 0x34, 0x73, 0xA9, 0x2D, 0x94, 0x3C, 0x6C, 0x5C, 0x95, 0x88, 0x74, 0xA0, 0xB9, 0x30, 0xDD, 0x05, 0x28, 0x11, 0x5C, 0x83, 0x2E, 0x01, 0x64, 0x03, 0xBE, 0x26, 0x66, 0xFB, 0xD9, 0x5D, 0x0F, 0x69, 0x96, 0x3C, 0xE4, 0x23, 0x0C, 0x85, 0x15, 0x37, 0xAB, 0x12, 0x13, 0x3C, 0xF9, 0x2D, 0xA4, 0xCE, 0x45, 0x99, 0xDC, 0x30, 0x3E, 0xCF, 0xB0, 0x3D, 0xA6, 0xA2, 0x93, 0x49, 0x76, 0x13, 0x7C, 0xEA, 0x28, 0xA7, 0xDA, 0xB7, 0x03, 0xB3, 0x51, 0x74, 0xF4, 0x69, 0x26, 0x78, 0x32, 0xC2, 0x16, 0xD1, 0x0A, 0xEC, 0x02, 0xD6, 0x02, 0x34, 0x80, 0x70, 0xDE, 0x98, 0x7E, 0x47, 0x45, 0x09, 0xA9, 0x38, 0xC0, 0x16, 0x3F, 0x7B, 0x63, 0x51, 0x5E, 0x4E, 0x50, 0x7F, 0x6D, 0x6E, 0x4E, 0xF5, 0x3E, 0x2D, 0x50, 0xD7, 0x02, 0xD4, 0x00, 0x6F, 0x20, 0x27, 0xB5, 0x43, 0x00, 0x5F, 0x40, 0x72, 0x21, 0xB5, 0x4F, 0xCC, 0x04, 0xF9, 0x8B, 0xB1, 0x71, 0xF3, 0xC8, 0xC2, 0xB5, 0x92, 0x48, 0x72, 0x59, 0x3B, 0xA1, 0x5C, 0xAD, 0xC6, 0xA5, 0xAD, 0x82, 0xB9, 0xE2, 0xCE, 0x5F, 0xCA, 0x4B, 0x7E, 0x92, 0x86, 0x7E, 0x68, 0x1E, 0x49, 0x51, 0x2E, 0x6E, 0xDA, 0x94, 0xB0, 0x7C, 0xD1, 0x16, 0xA0, 0x7D, 0x0A, 0x76, 0x4B, 0x80, 0x45, 0x74, 0x4E, 0x19, 0x0D, 0x45, 0xB8, 0x69, 0xAE, 0xAB, 0xAF, 0x3E, 0x94, 0x0D, 0xD8, 0x7E, 0xEF, 0xE2, 0xCE, 0x76, 0x78, 0x91, 0xD3, 0xD4, 0x93, 0x0F, 0xBB, 0xE9, 0x93, 0x32, 0x59, 0x07, 0xD4, 0x80, 0x8A, 0xC3, 0x2D, 0x9C, 0x4B, 0x9E, 0xFA, 0x74, 0x8C, 0x52, 0xC0, 0x36, 0xA0, 0x3D, 0x47, 0x44, 0x01, 0x11, 0xD4, 0x48, 0x64, 0x62, 0x36, 0xF7, 0xFB, 0x29, 0xCF, 0xAC, 0x91, 0x97, 0x9F, 0xC4, 0x04, 0xDD, 0xCD, 0xAE, 0x39, 0xC5, 0x6E, 0x7A, 0xC9, 0xDD, 0x74, 0xAA, 0x1B, 0x40, 0xDB, 0xB5, 0x79, 0x44, 0xAE, 0x29, 0x22, 0x91, 0xCD, 0xE1, 0xE6, 0xD4, 0xE4, 0x29, 0x7F, 0xF6, 0xF4, 0xE6, 0x5D, 0x80, 0xF0, 0xCC, 0xC5, 0xD1, 0x23, 0x3E, 0x96, 0x39, 0xEC, 0x02, 0x12, 0x54, 0xA7, 0xEB, 0xBD, 0x51, 0x97, 0x00, 0x5D, 0xB7, 0x44, 0x91, 0x4F, 0xD3, 0x49, 0x95, 0x49, 0x4A, 0x17, 0x65, 0x04, 0xEE, 0x91, 0x48, 0x2F, 0x72, 0x8E, 0xAC, 0x02, 0x4A, 0x3E, 0xF9, 0x41, 0x8B, 0x08, 0xC0, 0x37, 0x90, 0x02, 0xB4, 0x11, 0x1C, 0x67, 0x2B, 0x27, 0x66, 0x86, 0xBC, 0xB7, 0xD8, 0xFF, 0x35, 0xEE, 0xF3, 0x77, 0x62, 0xBB, 0x33, 0x8C, 0xEE, 0x06, 0x58, 0x0A, 0x2D, 0xFF, 0x5D, 0x94, 0x2D, 0xD8, 0xA6, 0xCA, 0xFE, 0x6E, 0x45, 0x4D, 0xD7, 0x3F, 0xFF, 0x18, 0xBD, 0x74, 0x03, 0x15, 0x80, 0x27, 0xA0, 0x0A, 0xAC, 0x22, 0x04, 0xF0, 0x71, 0x95, 0xE7, 0x24, 0x5F, 0x13, 0x47, 0x36, 0x4B, 0x7B, 0xAE, 0x34, 0x72, 0x13, 0x01, 0x44, 0x5F, 0xFB, 0x7C, 0xE7, 0x8B, 0x7B, 0x9F, 0x9D, 0x9A, 0x98, 0x1D, 0x4E, 0x4A, 0x7B, 0x53, 0x9F, 0xBB, 0x05, 0x88, 0xFD, 0x1A, 0x0B, 0x6C, 0x22, 0x17, 0x10, 0x84, 0x4C, 0xED, 0x6E, 0x01, 0x4A, 0x4C, 0xA1, 0x96, 0xD7, 0x44, 0xCD, 0x59, 0x55, 0xAF, 0x3F, 0x59, 0x45, 0xD3, 0xD0, 0x5D, 0x3B, 0xE6, 0x36, 0x37, 0x2D, 0xC6, 0x10, 0x3C, 0xED, 0x86, 0xD7, 0x8D, 0xE9, 0xE3, 0xD8, 0xF7, 0xAD, 0xF2, 0x39, 0x6B, 0x9B, 0xE5, 0x40, 0x0A, 0xE0, 0x05, 0x88, 0xCD, 0xCE, 0x1D, 0xE0, 0xFE, 0x9A, 0x53, 0x9F, 0x49, 0xFE, 0x78, 0x38, 0x3E, 0x09, 0x0D, 0x71, 0xA6, 0x32, 0xA9, 0x80, 0x27, 0xA0, 0x0E, 0x4C, 0xC3, 0x9A, 0x32, 0x4E, 0x93, 0x6D, 0xDD, 0x26, 0x73, 0x09, 0x9C, 0x62, 0x63, 0x74, 0x05, 0xC1, 0xDE, 0x7A, 0x00, 0xF3, 0x3C, 0x5E, 0x0B, 0x88, 0x4D, 0xF0, 0x48, 0x37, 0xF3, 0x0C, 0x03, 0xF0, 0xF5, 0x6E, 0x33, 0x64, 0x4F, 0xD4, 0x02, 0xDB, 0x2A, 0xAA, 0xE8, 0x2B, 0xD8, 0x3E, 0x63, 0x0D, 0x06, 0xCB, 0xBD, 0xB9, 0x0F, 0x27, 0x88, 0x5A, 0xEA, 0x6F, 0x70, 0x6C, 0xA9, 0x5F, 0xD4, 0xB0, 0x78, 0x1A, 0x72, 0xA6, 0xFB, 0x9A, 0x6A, 0x3A, 0xD0, 0x1B, 0x48, 0x07, 0x7C, 0x03, 0x4A, 0x6C, 0x07, 0x64, 0x01, 0xCD, 0xE0, 0x45, 0xBC, 0xF9, 0x2E, 0x61, 0x0C, 0x50, 0x33, 0xDA, 0x4A, 0x38, 0x50, 0x53, 0x7D, 0x15, 0x8C, 0xDA, 0xC9, 0x77, 0x09, 0x8E, 0xA7, 0x29, 0x09, 0x33, 0x04, 0x28, 0x94, 0x01, 0x4A, 0x60, 0x12, 0xB7, 0x63, 0xAC, 0x14, 0x72, 0xCC, 0x9E, 0x88, 0xC0, 0x8B, 0x65, 0x80, 0x25, 0xB0, 0x09, 0x35, 0x9C, 0x22, 0x31, 0x51, 0x4B, 0x96, 0xC2, 0xF8, 0xEF, 0x06, 0x56, 0x56, 0xC8, 0xB9, 0xAC, 0x84, 0x67, 0xCE, 0xE9, 0x66, 0xDD, 0xB4, 0xF7, 0x30, 0xEC, 0xE7, 0x56, 0x8F, 0x18, 0xC4, 0x0B, 0xF5, 0x75, 0xEC, 0x4B, 0x9D, 0xE4, 0x0C, 0xA3, 0xF8, 0x40, 0xEC, 0xE4, 0x4E, 0x39, 0xCD, 0x67, 0x9C, 0xA7, 0x78, 0x03, 0x2B, 0x81, 0xB8, 0x3D, 0xF2, 0xAE, 0x2B, 0x6B, 0x17, 0x5E, 0xCC, 0x0D, 0xEC, 0x24, 0x1C, 0x58, 0xFB, 0xFE, 0x2C, 0x4E, 0x3F, 0xF8, 0xF6, 0xDB, 0xC2, 0x6C, 0x9D, 0x9D, 0x86, 0x1D, 0x53, 0x6C, 0x31, 0xE5, 0x15, 0x40, 0x73, 0xDE, 0x9A, 0x4C, 0x3C, 0x14, 0x21, 0x02, 0xD8, 0xC4, 0xDA, 0x38, 0xA5, 0x17, 0x8F, 0x70, 0xCA, 0x1D, 0x6A, 0x85, 0x49, 0x86, 0x29, 0xDA, 0xE8, 0x2D, 0xC3, 0x6C, 0xE6, 0x6A, 0xB7, 0xC8, 0xB9, 0xD9, 0x98, 0xCF, 0x2F, 0x47, 0x07, 0x0B, 0xD3, 0x6B, 0xB0, 0x5C, 0xFE, 0x35, 0x58, 0x96, 0x3B, 0x5D, 0x43, 0x4D, 0x2A, 0x04, 0xCC, 0x02, 0xF4, 0xD9, 0x7B, 0xC9, 0x79, 0xCC, 0x9C, 0x75, 0xFA, 0xB8, 0xAA, 0xD6, 0xC4, 0x5C, 0x15, 0xDB, 0xED, 0xF1, 0xA6, 0x5B, 0xCD, 0x99, 0xDE, 0x80, 0x8D, 0xB9, 0xE9, 0x5E, 0x8C, 0xE4, 0xF8, 0xA6, 0x4D, 0xF1, 0x0B, 0xF5, 0x72, 0xE1, 0xF3, 0xA5, 0x92, 0xD5, 0xC4, 0xD3, 0xD4, 0xB3, 0x26, 0x4D, 0x93, 0x21, 0x54, 0x20, 0x16, 0xE0, 0x05, 0x68, 0x72, 0xD2, 0x47, 0x44, 0x03, 0xC5, 0x60, 0x57, 0x4D, 0xD0, 0xE8, 0x11, 0xEC, 0x1B, 0xE9, 0x96, 0x11, 0x78, 0x04, 0x2D, 0xC7, 0xE3, 0x50, 0x9C, 0xF7, 0xCD, 0xC0, 0x60, 0x14, 0xDE, 0xA2, 0x72, 0x8F, 0x14, 0xC4, 0x02, 0xA9, 0x57, 0x85, 0xD4, 0x7A, 0xDB, 0xE6, 0xBA, 0x02, 0x53, 0x11, 0x55, 0x09, 0xD8, 0xA7, 0x05, 0x6A, 0xD9, 0x9B, 0xD2, 0xE1, 0x13, 0x34, 0xDB, 0x80, 0xC8, 0x93, 0x68, 0x94, 0x06, 0x54, 0x10, 0xFD, 0xB4, 0x3B, 0x40, 0xAA, 0x1B, 0x2D, 0xE4, 0xAE, 0xBF, 0xC1, 0xEC, 0xC1, 0xD8, 0x29, 0xA5, 0xCE, 0x09, 0x45, 0x73, 0xA4, 0xD5, 0xBB, 0x42, 0x32, 0x01, 0x5C, 0x01, 0x2B, 0x40, 0x83, 0x50, 0xC0, 0xB9, 0x88, 0xD2, 0x59, 0x79, 0xF6, 0xD4, 0x71, 0x15, 0x33, 0x9C, 0xE9, 0x66, 0x12, 0xEB, 0xD3, 0x4C, 0x7B, 0x72, 0x1B, 0x12, 0x6A, 0xA9, 0xEA, 0x5D, 0xAE, 0xB7, 0x3F, 0x93, 0x5C, 0x54, 0xE7, 0xBF, 0xDA, 0xE0, 0x4E, 0x60, 0xED, 0xDB, 0x3C, 0x61, 0x9F, 0xEB, 0xB2, 0x1C, 0xF0, 0xBC, 0x2D, 0xF0, 0xEC, 0x64, 0xD1, 0xE9, 0x05, 0x12, 0xCF, 0x01, 0x51, 0x42, 0x80, 0x95, 0x40, 0xFB, 0xB8, 0xF0, 0x21, 0x5A, 0x32, 0x9E, 0x31, 0x75, 0xF7, 0xCB, 0x8B, 0x9B, 0x29, 0x5C, 0xBF, 0x86, 0x9E, 0x1D, 0x16, 0x09, 0xA6, 0xF2, 0x26, 0x90, 0x05, 0x94, 0x00, 0xB9, 0x01, 0x73, 0x40, 0x37, 0xE1, 0xE3, 0x49, 0x30, 0x41, 0x7B, 0x2B, 0x06, 0x4A, 0x9A, 0x39, 0xA0, 0x85, 0x56, 0x43, 0x16, 0xB8, 0x1D, 0xB4, 0xC1, 0x64, 0x66, 0x25, 0x53, 0x91, 0xEC, 0xAE, 0x3C, 0x25, 0x80, 0xD1, 0x68, 0xF3, 0x07, 0xD9, 0xA7, 0x0A, 0x49, 0x05, 0x98, 0xD2, 0x24, 0x99, 0xAE, 0x33, 0xA3, 0xFD, 0x7C, 0x76, 0xA5, 0xD2, 0xDF, 0xC5, 0x94, 0x1B, 0xD0, 0x02, 0xCC, 0x22, 0xAC, 0x36, 0x8E, 0xB6, 0x02, 0x9A, 0x77, 0x47, 0x95, 0xF1, 0x1C, 0x27, 0x49, 0x0F, 0xBC, 0x1D, 0x3B, 0xC6, 0xB7, 0x11, 0xAA, 0x73, 0x31, 0x45, 0x55, 0x2A, 0x71, 0x8F, 0x78, 0x9A, 0x79, 0x46, 0x02, 0xBD, 0xB0, 0x92, 0xD8, 0x84, 0x09, 0x90, 0x0E, 0x74, 0xC2, 0x4D, 0x5F, 0x74, 0x62, 0x76, 0x17, 0xE6, 0x0E, 0xF3, 0x47, 0xD4, 0x71, 0xF8, 0x6F, 0x9E, 0x6F, 0xBE, 0xA1, 0x97, 0xAC, 0xC4, 0x94, 0x57, 0x83, 0xD9, 0x00, 0x75, 0xC5, 0xB4, 0xFD, 0x69, 0x5C, 0x96, 0x7B, 0xEA, 0xFF, 0xA6, 0xE4, 0x7F, 0x03, 0x11, 0x53, 0x87, 0x3A, 0x12, 0xCE, 0x6B, 0x49, 0x6B, 0x0A, 0xE4, 0x64, 0x77, 0x18, 0xCE, 0xAC, 0x0D, 0xA4, 0x52, 0xDA, 0x08, 0x40, 0x0A, 0x08, 0x05, 0x7A, 0x26, 0x17, 0xB7, 0x6E, 0xCC, 0x16, 0x17, 0xED, 0x3E, 0x59, 0xC9, 0x4C, 0xA6, 0x2D, 0xBC, 0xAF, 0x98, 0xA3, 0x57, 0x2C, 0x59, 0x2E, 0xDE, 0x68, 0x0A, 0x62, 0x1F, 0xDB, 0x98, 0x01, 0x9E, 0x40, 0x15, 0xD7, 0xF5, 0x0A, 0x14, 0xDB, 0x74, 0x2D, 0x05, 0xEC, 0xC4, 0x4C, 0x79, 0x23, 0x35, 0x0C, 0x29, 0x11, 0x24, 0x12, 0xBB, 0xBE, 0xDD, 0xDE, 0x24, 0x51, 0x49, 0x71, 0xCD, 0x88, 0x6F, 0xE3, 0xB2, 0x53, 0x4C, 0x36, 0x2D, 0x85, 0x94, 0xE7, 0x28, 0xE3, 0xE3, 0x8B, 0xE8, 0x31, 0xE1, 0x9A, 0x46, 0xA8, 0xC0, 0x12, 0x3E, 0xF5, 0x78, 0x54, 0x53, 0xEE, 0x48, 0x45, 0xD9, 0x47, 0x6B, 0xF4, 0xF1, 0xD5, 0x03, 0x76, 0x8F, 0x4A, 0x0D, 0x84, 0xDD, 0xEC, 0xA9, 0xE4, 0xA4, 0x22, 0x68, 0xE8, 0x14, 0x88, 0x96, 0xF3, 0xED, 0xB1, 0xA6, 0xAB, 0x38, 0x4E, 0x09, 0x3D, 0x2A, 0xC8, 0xE2, 0x58, 0x5C, 0x05, 0x84, 0x03, 0xD9, 0x84, 0x03, 0xB1, 0x00, 0x0F, 0xA0, 0x8C, 0x39, 0xE3, 0x27, 0x68, 0x37, 0xFD, 0xE0, 0xF7, 0xF6, 0xC6, 0xAE, 0xEB, 0xD6, 0xDF, 0xF4, 0x41, 0xDC, 0xE1, 0x31, 0xA5, 0x8E, 0x94, 0xA1, 0x79, 0x60, 0x44, 0x30, 0xB1, 0xFB, 0xDD, 0x2B, 0xE6, 0x93, 0x70, 0x4F, 0x5C, 0x63, 0xBC, 0x46, 0x93, 0x70, 0x60, 0x4D, 0xDB, 0xCF, 0xBA, 0x35, 0xC2, 0x23, 0x20, 0xE6, 0xE9, 0x27, 0x17, 0x9C, 0x7D, 0xEF, 0x05, 0x64, 0x31, 0x66, 0x02, 0x24, 0x5F, 0x5C, 0x0A, 0xE8, 0x1A, 0x2F, 0xD6, 0xB9, 0x46, 0x29, 0x35, 0x4E, 0xB2, 0x78, 0xE3, 0xA6, 0x55, 0xC1, 0x34, 0x82, 0x1F, 0x9C, 0xCB, 0x4B, 0x2C, 0xF0, 0x70, 0x55, 0xF2, 0x02, 0x5C, 0x06, 0xD8, 0x06, 0xA2, 0x80, 0xDE, 0xBC, 0x0E, 0x05, 0xF0, 0x06, 0xD0, 0x4D, 0xE8, 0x3A, 0xF5, 0xB5, 0x73, 0x42, 0x34, 0xEB, 0x27, 0x9E, 0x72, 0xF7, 0xA2, 0x60, 0x9D, 0xD8, 0xB0, 0xBA, 0x93, 0x42, 0x6B, 0x01, 0x38, 0xAB, 0xD5, 0xFE, 0x66, 0x0C, 0x6D, 0x7B, 0x33, 0x95, 0xD7, 0xE7, 0x69, 0xE9, 0xFB, 0xED, 0xC8, 0x26, 0xFE, 0x36, 0x64, 0xDF, 0x42, 0x34, 0x10, 0x05, 0x34, 0x57, 0x5A, 0xA5, 0x9F, 0x66, 0x8C, 0x0B, 0xB0, 0x00, 0x42, 0x6E, 0xCD, 0x77, 0x8D, 0x78, 0x30, 0x8E, 0xC2, 0x72, 0x56, 0xF8, 0x12, 0xD7, 0xDD, 0x65, 0x0A, 0x81, 0xB8, 0x02, 0xF6, 0xE6, 0x30, 0xC2, 0x46, 0x24, 0x9B, 0x80, 0x02, 0xA5, 0x84, 0x01, 0x51, 0xC4, 0xBC, 0x88, 0xF1, 0x0A, 0x20, 0x6A, 0xCC, 0xCF, 0x48, 0x43, 0x33, 0xBD, 0xAC, 0x09, 0xDE, 0x93, 0xA9, 0xBC, 0xA7, 0xDF, 0x06, 0x4A, 0x55, 0xCA, 0x71, 0x0F, 0xAC, 0xB3, 0x8C, 0xCA, 0x7F, 0x2E, 0x08, 0x14, 0x28, 0x03, 0x72, 0x03, 0x26, 0xC0, 0x6E, 0x60, 0x31, 0x08, 0x3D, 0x0B, 0xD3, 0x1F, 0x6C, 0x02, 0x7B, 0xB0, 0x92, 0x6F, 0x27, 0xB4, 0x81, 0xF3, 0x17, 0xC6, 0xAB, 0xFF, 0x5A, 0xE1, 0xB3, 0x75, 0x0A, 0xAF, 0x56, 0x8A, 0x02, 0x65, 0xB7, 0x88, 0x0E, 0x0B, 0x91, 0xB7, 0xD6, 0x98, 0x57, 0x56, 0xC5, 0xD4, 0x0C, 0x13, 0x09, 0xD8, 0x06, 0x56, 0xF2, 0x14, 0xC3, 0xD1, 0x3E, 0x55, 0x62, 0x13, 0x35, 0x6C, 0x34, 0xF9, 0x2A, 0x08, 0x6F, 0xC5, 0x07, 0xB2, 0xBD, 0x5A, 0xB7, 0x05, 0xF4, 0x5A, 0xD9, 0x0E, 0x53, 0x07, 0x7B, 0xFA, 0x7E, 0x66, 0x7E, 0x0A, 0x17, 0xFD, 0xC8, 0x6A, 0x33, 0xE5, 0x1C, 0x5F, 0x43, 0xBE, 0x58, 0xF9, 0xD4, 0x09, 0xAC, 0xE4, 0xC4, 0x4C, 0x80, 0x9E, 0x53, 0x9C, 0xEF, 0x5B, 0x93, 0x22, 0x5F, 0x4C, 0x4D, 0x9E, 0xED, 0x3C, 0x20, 0x8C, 0x88, 0x67, 0x59, 0xE1, 0xD4, 0x82, 0x99, 0xDE, 0x30, 0xD9, 0x8D, 0xBE, 0x38, 0xAA, 0xE8, 0xB7, 0x16, 0x14, 0xB2, 0x03, 0xAB, 0x12, 0x24, 0x14, 0x51, 0xA6, 0xCC, 0xE4, 0x74, 0xA2, 0x01, 0xDF, 0x80, 0x29, 0x20, 0x0D, 0x6C, 0xC2, 0x70, 0x8B, 0xBB, 0x4F, 0xCF, 0xC2, 0x3C, 0x62, 0x27, 0xAA, 0xB0, 0x6A, 0xA3, 0x94, 0x00, 0x5B, 0xEC, 0xAB, 0x7C, 0x8C, 0x1E, 0x0C, 0xAB, 0x20, 0x15, 0x64, 0xD3, 0x4A, 0x7F, 0x6D, 0x5B, 0x3F, 0xAD, 0x09, 0xA6, 0xA4, 0x7F, 0x7F, 0x32, 0x94, 0x09, 0xE9, 0xB7, 0x95, 0xFF, 0x92, 0xB7, 0xA5, 0x5F, 0xC6, 0x9B, 0x9C, 0xDB, 0x09, 0xAC, 0xC7, 0xB0, 0xFF, 0x0E, 0xB5, 0x04, 0x62, 0xA4, 0x90, 0x89, 0xFD, 0x71, 0x84, 0x6F, 0x3A, 0x96, 0x4C, 0x59, 0x3B, 0x8B, 0x38, 0x71, 0x26, 0x76, 0x7C, 0x1E, 0xD7, 0xA0, 0xE0, 0x70, 0x8A, 0x59, 0x03, 0x6C, 0xC0, 0x16, 0x20, 0x0D, 0x2C, 0x8E, 0xB1, 0xE2, 0xD1, 0xFE, 0x1D, 0x5D, 0x07, 0xEF, 0x6E, 0xA4, 0xEA, 0xB8, 0x23, 0xC7, 0xA3, 0x1A, 0x85, 0x77, 0x29, 0x8F, 0xCE, 0xB1, 0x7D, 0x23, 0x15, 0xC0, 0x60, 0xDB, 0xDA, 0xB6, 0xDE, 0x44, 0x65, 0x10, 0xA9, 0xE3, 0xB8, 0xDE, 0x3E, 0x39, 0xC9, 0x9D, 0x40, 0x1A, 0x30, 0xFB, 0x55, 0x45, 0x28, 0xB1, 0x88, 0x89, 0xE8, 0x5E, 0x40, 0x28, 0x5E, 0x9C, 0x5B, 0x97, 0xAE, 0xC9, 0x81, 0x06, 0xBA, 0xDE, 0xC6, 0x75, 0xA1, 0x77, 0xDB, 0x9E, 0x93, 0x63, 0xEA, 0x1C, 0xD7, 0xC3, 0x08, 0x4F, 0xAD, 0xC7, 0x51, 0xB9, 0xB9, 0x71, 0xDE, 0x63, 0xDF, 0x35, 0xEE, 0x76, 0xFB, 0x85, 0x06, 0x7F, 0xB6, 0x01, 0x4F, 0xA0, 0xF8, 0x4D, 0x4C, 0xCE, 0xAD, 0x3C, 0xED, 0x2A, 0x7F, 0x6B, 0xC2, 0xE2, 0xBA, 0xCD, 0xF8, 0x22, 0x2B, 0x6E, 0xB3, 0x71, 0xB3, 0x88, 0x40, 0x8D, 0x84, 0xD4, 0x99, 0xCF, 0x42, 0x0F, 0x7C, 0x67, 0x1D, 0x3E, 0xB7, 0x97, 0xC9, 0xC9, 0xDF, 0xDC, 0xCC, 0xB4, 0x49, 0x2A, 0x9E, 0x1A, 0x9A, 0x71, 0x7A, 0xA8, 0xF1, 0x1F, 0x01, 0x74, 0x36, 0xAA, 0x16, 0x50, 0x7A, 0x8E, 0xE8, 0x6C, 0x01, 0x48, 0x02, 0xA1, 0x37, 0x31, 0x75, 0x2A, 0x8B, 0xF7, 0x88, 0x3C, 0xCC, 0x8F, 0xE5, 0x9D, 0x20, 0xA6, 0xA4, 0xAA, 0xF8, 0x24, 0x34, 0x9C, 0x52, 0x88, 0x2F, 0xA6, 0x63, 0xAC, 0x8F, 0xEC, 0xC2, 0x04, 0xCC, 0x13, 0x68, 0xFB, 0xEC, 0xB6, 0x8C, 0x72, 0x99, 0x80, 0x6E, 0x20, 0x4E, 0xD0, 0xF6, 0xD3, 0x41, 0xAA, 0xAC, 0xB1, 0xAD, 0x53, 0x7E, 0x5E, 0xD4, 0x31, 0xEA, 0x11, 0x78, 0x2E, 0x23, 0x01, 0xF6, 0x4D, 0x54, 0xD6, 0xE7, 0xAE, 0xE6, 0x53, 0x68, 0x8C, 0x68, 0x21, 0xBE, 0xF9, 0x16, 0x04, 0xA0, 0x56, 0x67, 0x42, 0x38, 0x13, 0x46, 0xCE, 0x5A, 0x30, 0x1B, 0xBF, 0xE6, 0x4E, 0x53, 0xE4, 0x79, 0x73, 0x66, 0x00, 0x4F, 0x60, 0x3A, 0xE0, 0x1C, 0x73, 0xE6, 0x98, 0xE9, 0xE3, 0xE4, 0xDA, 0x36, 0x57, 0xE5, 0xC1, 0xD2, 0x46, 0xA1, 0x96, 0xBB, 0x38, 0xBF, 0x15, 0x4C, 0x6C, 0xD5, 0x11, 0x34, 0x9B, 0x6E, 0xC6, 0xF5, 0xD6, 0x8F, 0x66, 0x21, 0x5A, 0x5B, 0x00, 0x2F, 0x06, 0x4D, 0x00, 0x31, 0xC0, 0x7B, 0x82, 0x26, 0x4F, 0xF3, 0x8B, 0x12, 0xC7, 0xC6, 0xB3, 0x6D, 0x28, 0x12, 0x5C, 0x0C, 0x4C, 0xC1, 0xBF, 0xC7, 0xCF, 0x35, 0x38, 0x56, 0xE8, 0x93, 0x12, 0xEF, 0xAF, 0xB3, 0xD5, 0x08, 0xE0, 0xEB, 0x34, 0xB2, 0xD3, 0x7A, 0xBD, 0xB0, 0x8F, 0x27, 0xE4, 0x46, 0x44, 0x78, 0x3B, 0x8A, 0x9E, 0xF6, 0x3F, 0xF3, 0xBE, 0x91, 0x8F, 0xE6, 0x0D, 0x2C, 0x85, 0xDA, 0xEF, 0x33, 0xA0, 0xF3, 0xF9, 0x0B, 0xFB, 0x6C, 0x19, 0x9B, 0x72, 0xA7, 0xAB, 0x98, 0x5B, 0xEA, 0x4C, 0xEF, 0x93, 0x5B, 0x40, 0x9A, 0xBC, 0xF9, 0xE3, 0xFD, 0x70, 0xB4, 0x6B, 0xB6, 0xB7, 0x4F, 0x20, 0x93, 0x7D, 0xB3, 0x15, 0x30, 0x22, 0x67, 0x8F, 0x8A, 0xB0, 0x00, 0xF2, 0x8C, 0x34, 0xFD, 0xC5, 0x67, 0x17, 0x7E, 0xB5, 0x44, 0xE1, 0x2E, 0x28, 0xF5, 0x13, 0x1F, 0x6A, 0x61, 0x03, 0xAA, 0x76, 0x63, 0x25, 0x54, 0xC6, 0xFF, 0xB3, 0x68, 0x29, 0xF1, 0xA6, 0xC4, 0x6B, 0x5F, 0xAD, 0x7A, 0x63, 0x1B, 0xFB, 0x6D, 0x95, 0xB6, 0xEF, 0xB8, 0xC3, 0x7C, 0x81, 0x75, 0x43, 0xFC, 0xD4, 0x0D, 0x98, 0xE1, 0x45, 0x40, 0x8F, 0x71, 0xD8, 0x74, 0xB0, 0x8B, 0x02, 0x64, 0xCE, 0x2C, 0xC0, 0x93, 0x6F, 0xE8, 0x69, 0xCD, 0x86, 0xA0, 0x4D, 0x8B, 0xB3, 0xAC, 0xBB, 0xDB, 0x30, 0x4B, 0x52, 0x8C, 0x4D, 0x7A, 0xD9, 0x31, 0x01, 0x61, 0xCA, 0xAC, 0x8B, 0x19, 0x84, 0x84, 0x39, 0xE0, 0x9B, 0x50, 0x20, 0x36, 0x30, 0x6D, 0xA5, 0x4D, 0x27, 0x68, 0xF6, 0x6C, 0xA3, 0xAC, 0xC6, 0x97, 0xE4, 0xB7, 0xB5, 0x0F, 0x32, 0x47, 0x85, 0x5E, 0x2D, 0x85, 0x7F, 0x37, 0x36, 0x56, 0xA6, 0x6F, 0xD0, 0x8E, 0x70, 0x6D, 0x7A, 0x3A, 0x9F, 0xDE, 0x02, 0x0B, 0x3F, 0x89, 0xF1, 0xB5, 0xDF, 0x16, 0xFF, 0xA7, 0xF5, 0x8A, 0xE2, 0xC8, 0x78, 0x8A, 0x29, 0x83, 0x4D, 0xE8, 0xDC, 0xDA, 0xE6, 0xED, 0x0B, 0x47, 0x3B, 0x01, 0x84, 0x77, 0xD6, 0xFF, 0x72, 0xE6, 0x66, 0x39, 0x3B, 0x2E, 0xAC, 0x9B, 0xED, 0xE6, 0xCC, 0x9F, 0xF7, 0xB4, 0xE0, 0x3D, 0xCD, 0x8D, 0x6B, 0x4B, 0x2E, 0x2A, 0x6D, 0xBD, 0x9D, 0xB2, 0xD5, 0x80, 0x50, 0x5E, 0x97, 0x0E, 0xF8, 0x02, 0x72, 0xB3, 0x84, 0x5B, 0x26, 0x68, 0xFE, 0xED, 0xC7, 0x8B, 0xCC, 0xEF, 0x8D, 0xCB, 0xD3, 0xAD, 0xF0, 0x18, 0xDA, 0xC5, 0x74, 0x02, 0x43, 0xD3, 0x40, 0xE8, 0x22, 0x9D, 0x6F, 0x4B, 0xC1, 0xEB, 0xA9, 0x3C, 0x4D, 0xFD, 0xE7, 0xA9, 0xC6, 0xA3, 0x69, 0x79, 0xDD, 0x01, 0xE8, 0x9E, 0xEE, 0xBC, 0xC0, 0x1E, 0x6C, 0xC0, 0x0A, 0x88, 0x99, 0x58, 0xC4, 0xD4, 0xA9, 0x01, 0xBB, 0xDF, 0x23, 0x96, 0x90, 0x12, 0x35, 0xBB, 0xD4, 0xEB, 0xB5, 0xD4, 0xF1, 0x59, 0x78, 0x4E, 0xB5, 0xBF, 0x73, 0x70, 0x15, 0x75, 0x0B, 0x2C, 0xBE, 0x51, 0x71, 0xCB, 0xCB, 0x74, 0x25, 0x60, 0x05, 0x94, 0x4C, 0x9F, 0x1E, 0x20, 0x1C, 0xA8, 0x49, 0x75, 0xDE, 0x13, 0xB5, 0xF8, 0x46, 0x0D, 0x97, 0xA9, 0xC4, 0xAB, 0xA8, 0xE9, 0xC6, 0x3C, 0x08, 0x9B, 0xA4, 0xD5, 0x1B, 0x8A, 0xDA, 0x66, 0xD0, 0xEA, 0xD5, 0x6E, 0x8F, 0x4C, 0x2B, 0xCA, 0xFB, 0x10, 0xB1, 0x64, 0x9C, 0xE6, 0x80, 0xB5, 0x18, 0x42, 0x01, 0xF6, 0x68, 0xFF, 0x7B, 0x1E, 0x24, 0xC0, 0x96, 0xB7, 0xAF, 0x7D, 0x10, 0xBA, 0xDE, 0xA3, 0xC9, 0xE2, 0x7A, 0x3D, 0xD3, 0x45, 0x39, 0x73, 0xDF, 0x27, 0xDD, 0x5B, 0x9D, 0x1F, 0x9E, 0x2B, 0xC8, 0x92, 0xEB, 0x63, 0x00, 0xB1, 0x18, 0x9B, 0xC8, 0x36, 0x4D, 0xC7, 0x81, 0xFE, 0xB8, 0x0C, 0x94, 0x72, 0xFC, 0x09, 0xE0, 0x0D, 0x74, 0x4E, 0xD0, 0x12, 0x65, 0xBB, 0xA9, 0xFF, 0xF5, 0x6F, 0xA2, 0x27, 0x34, 0x68, 0xF0, 0xDF, 0x1A, 0xBC, 0x02, 0x62, 0x78, 0x65, 0xB2, 0xA9, 0x7A, 0x41, 0xA2, 0x16, 0xEE, 0x40, 0x7D, 0x2B, 0x56, 0xEA, 0xF5, 0x38, 0xD4, 0x78, 0xAC, 0x95, 0x27, 0x51, 0x98, 0x4F, 0xBC, 0x3C, 0xFD, 0x8D, 0xBD, 0xDE, 0x3A, 0xE1, 0x59, 0x86, 0x76, 0x02, 0x39, 0x35, 0x90, 0x9B, 0xD1, 0x6A, 0x60, 0x2F, 0x40, 0xE3, 0x4D, 0x1F, 0x9C, 0xE9, 0xED, 0x9E, 0xF5, 0xA7, 0xCA, 0xCC, 0xC9, 0xB8, 0x5A, 0xE2, 0x03, 0x41, 0x73, 0xB1, 0xD2, 0x90, 0x77, 0xB3, 0x49, 0x7D, 0x9E, 0x7B, 0x54, 0xF0, 0xAE, 0xE4, 0x80, 0x2A, 0x60, 0x0E, 0xF8, 0x06, 0xA2, 0x81, 0x9A, 0xB5, 0x81, 0x4F, 0xD0, 0xEA, 0xF7, 0x45, 0xC4, 0xAE, 0x7F, 0x37, 0x1B, 0x47, 0x4F, 0x30, 0xE3, 0x7C, 0x0B, 0x6B, 0x43, 0x11, 0x79, 0x2D, 0x0E, 0xFF, 0xDD, 0x95, 0xA0, 0xDF, 0x2E, 0xE3, 0x1A, 0x80, 0xEF, 0xB7, 0x00, 0xCF, 0xE3, 0x99, 0x98, 0x6E, 0xCA, 0x6F, 0xB3, 0x79, 0x3E, 0xD2, 0x05, 0x95, 0xAF, 0x31, 0xB9, 0xD2, 0x69, 0xA8, 0x62, 0xBC, 0x1B, 0xE6, 0x69, 0x55, 0x90, 0xFD, 0xD6, 0x1E, 0x67, 0x4D, 0x05, 0xE8, 0x5B, 0x99, 0x6B, 0xC0, 0x2A, 0x60, 0x6F, 0xC0, 0x4F, 0xB3, 0x44, 0x07, 0x92, 0x47, 0x9E, 0x80, 0x30, 0x19, 0x4C, 0x3F, 0xDD, 0x0C, 0x6E, 0x57, 0x0D, 0x46, 0xAD, 0xB1, 0x91, 0x1F, 0xEB, 0x9F, 0x51, 0xC3, 0xFD, 0xD6, 0x93, 0x6E, 0x41, 0x1B, 0xF7, 0xA6, 0x1A, 0x6B, 0xA6, 0x6F, 0xDE, 0xAD, 0x7E, 0xFA, 0x30, 0xCE, 0x54, 0x7F, 0x7F, 0xA2, 0xB6, 0x5E, 0xB3, 0x3E, 0x9C, 0x99, 0x27, 0xF7, 0xF3, 0x38, 0xE7, 0xC4, 0xAD, 0x4C, 0x71, 0x06, 0xC1, 0x82, 0x51, 0x2B, 0x4E, 0xD9, 0xA9, 0xE2, 0x8B, 0x1E, 0xB7, 0xBD, 0x69, 0x54, 0xB9, 0xE2, 0x55, 0xEA, 0xC6, 0xA2, 0xC7, 0x1A, 0x90, 0x81, 0x00, 0xBA, 0x80, 0x34, 0x9C, 0xE9, 0xC9, 0xF7, 0x25, 0x8E, 0x5A, 0xE7, 0x45, 0x60, 0x6D, 0x9C, 0x19, 0x02, 0xD4, 0xE6, 0x29, 0xF3, 0x2C, 0xD8, 0x53, 0x44, 0xF4, 0x8D, 0x1A, 0x37, 0x96, 0x12, 0x2B, 0xCF, 0x34, 0xCC, 0x3A, 0x74, 0x33, 0xF5, 0x03, 0xBB, 0x55, 0xBD, 0xE6, 0x59, 0x00, 0xDE, 0x8E, 0x82, 0xEB, 0xD3, 0x01, 0x83, 0xD8, 0x84, 0x04, 0x10, 0xFB, 0xDD, 0x24, 0x76, 0x79, 0x5B, 0xB4, 0xCF, 0x9E, 0x24, 0x7D, 0x52, 0x19, 0x4A, 0xAD, 0x53, 0xA3, 0x10, 0xC1, 0xC0, 0xAE, 0x5B, 0xAD, 0x3F, 0xB1, 0xD0, 0xBF, 0x59, 0x4B, 0x4F, 0x2B, 0x15, 0x60, 0x3A, 0xB2, 0x36, 0x51, 0x05, 0xB4, 0xCD, 0x1C, 0xEF, 0xB5, 0x49, 0xB5, 0x06, 0x34, 0x80, 0xF5, 0xE9, 0x29, 0x2D, 0x02, 0xD8, 0xE6, 0x29, 0x3A, 0x51, 0x43, 0xC1, 0x98, 0xCE, 0xB7, 0xA4, 0xF1, 0xBB, 0x47, 0x6E, 0x16, 0xC5, 0xAA, 0x29, 0x74, 0x17, 0x77, 0xA4, 0x93, 0x09, 0x33, 0x5D, 0x6B, 0xBD, 0x51, 0xD3, 0x8F, 0x87, 0xDA, 0x9E, 0xCB, 0x6F, 0x56, 0x56, 0x09, 0x94, 0xCF, 0x53, 0x00, 0x90, 0x06, 0xC6, 0x55, 0xB8, 0x64, 0x32, 0x01, 0x29, 0x74, 0xDB, 0x14, 0x8E, 0x1B, 0x82, 0x87, 0xED, 0xDD, 0xA9, 0xD6, 0xA7, 0xFE, 0x2C, 0x7E, 0xDC, 0x1B, 0x8F, 0x1D, 0xA1, 0x8C, 0x2A, 0x8C, 0x23, 0x5D, 0x80, 0x35, 0x51, 0x80, 0x3B, 0x51, 0x40, 0xEE, 0xB7, 0xD5, 0x56, 0x73, 0xC4, 0xDA, 0x06, 0x74, 0xF3, 0xC5, 0x8F, 0xC7, 0xE6, 0x0A, 0x40, 0x78, 0xA6, 0xF8, 0x44, 0x0D, 0x6D, 0xDD, 0x5C, 0xE8, 0x8D, 0xF0, 0x5B, 0x2F, 0xFD, 0xD2, 0x04, 0xEC, 0xF5, 0xD2, 0xF1, 0xC2, 0xB2, 0xA0, 0x0A, 0x7D, 0xF1, 0x55, 0xEF, 0x46, 0xFB, 0xED, 0x1B, 0xE2, 0x73, 0x85, 0xBE, 0x83, 0xCC, 0x79, 0x14, 0x09, 0x14, 0x23, 0xBA, 0xE3, 0xED, 0xAF, 0xDF, 0x67, 0x5C, 0x4C, 0xC7, 0x26, 0x61, 0x9C, 0xC6, 0x16, 0xA5, 0xB8, 0x70, 0x66, 0xD4, 0xBA, 0x47, 0xDF, 0xBD, 0xDD, 0x5F, 0xE3, 0x34, 0xFF, 0xAB, 0x06, 0x52, 0x01, 0x6B, 0x40, 0x9C, 0x58, 0x1F, 0xCC, 0x99, 0xC9, 0xCB, 0x6F, 0x84, 0x09, 0x01, 0x96, 0xF0, 0xC5, 0xCF, 0x24, 0x31, 0x0C, 0xA8, 0xDB, 0x10, 0x00, 0x51, 0x53, 0xB4, 0x68, 0x32, 0x7B, 0x16, 0xA2, 0xBD, 0x0B, 0xE9, 0xEA, 0xD3, 0xC3, 0x78, 0x1B, 0xCB, 0x76, 0x9B, 0x9A, 0x99, 0x3F, 0x6D, 0x09, 0xF6, 0x67, 0xB2, 0x16, 0x33, 0x9C, 0xE2, 0xED, 0x90, 0x1A, 0x0B, 0xE8, 0xB3, 0x21, 0x1C, 0x40, 0xE7, 0xBD, 0x28, 0x02, 0xF1, 0x19, 0xEB, 0x38, 0xD3, 0xBF, 0x64, 0x4E, 0x67, 0xF6, 0x27, 0x9F, 0x09, 0xBB, 0xA7, 0x78, 0xF3, 0x6E, 0x4E, 0xF9, 0xD8, 0xFD, 0x9E, 0x6C, 0x17, 0x9B, 0x56, 0xA1, 0x05, 0x6C, 0xE7, 0x0E, 0x59, 0x13, 0xE3, 0x1D, 0xAC, 0x80, 0x4F, 0x96, 0x6A, 0x02, 0xE9, 0x40, 0x18, 0x30, 0x7D, 0xB8, 0x2A, 0x00, 0x37, 0x20, 0x8D, 0x67, 0xEA, 0x04, 0x8D, 0xED, 0xCA, 0x14, 0x9B, 0xE9, 0x9E, 0x71, 0x73, 0x3A, 0x4A, 0x2B, 0x30, 0xFA, 0x83, 0x8D, 0x1E, 0x8A, 0x39, 0x15, 0x8E, 0xB6, 0xF6, 0xE7, 0x61, 0xA0, 0xDF, 0xC4, 0x78, 0x67, 0xF0, 0x0A, 0xE8, 0xFE, 0xF4, 0xF7, 0x49, 0x40, 0x1D, 0xC8, 0xA4, 0x5A, 0x5B, 0x0C, 0xEC, 0xF1, 0xAC, 0x4B, 0xDE, 0xF0, 0x39, 0x55, 0x35, 0x4E, 0x16, 0x35, 0x11, 0x27, 0x97, 0x31, 0xEA, 0x7B, 0xDB, 0x2F, 0x4E, 0xC6, 0x6E, 0x1B, 0x8F, 0x88, 0x2C, 0xA0, 0xA7, 0xA1, 0x8A, 0x01, 0x7B, 0x03, 0x12, 0x40, 0xCE, 0x0D, 0x21, 0x80, 0x16, 0xA0, 0x36, 0xE0, 0x0A, 0xAC, 0xE2, 0x99, 0xF6, 0xF1, 0x59, 0x98, 0x75, 0xFB, 0x14, 0xE0, 0xD5, 0x2C, 0xDF, 0x47, 0xB0, 0x7C, 0x53, 0x4B, 0x23, 0x0D, 0x33, 0xC7, 0x25, 0x2C, 0x2E, 0x70, 0xEE, 0xDE, 0xBD, 0x6D, 0x09, 0xF4, 0x99, 0x75, 0x6D, 0x39, 0x4B, 0x9E, 0x1E, 0x5B, 0x43, 0x05, 0x72, 0xBF, 0xB7, 0x9E, 0xB9, 0xA1, 0x1C, 0x4B, 0x11, 0x66, 0xAC, 0x9D, 0x0A, 0xD8, 0xC2, 0xCC, 0x6A, 0xBC, 0xBD, 0x62, 0x7C, 0xDB, 0xA7, 0x0A, 0x74, 0xDC, 0xE6, 0x47, 0xED, 0x0A, 0x4A, 0x43, 0xC2, 0xF0, 0x32, 0xF3, 0xDF, 0x03, 0x18, 0x33, 0xC7, 0xDE, 0x40, 0x15, 0x5F, 0x5C, 0x80, 0x3B, 0xDE, 0x60, 0x0A, 0x34, 0x51, 0x06, 0xF8, 0x06, 0x96, 0xE0, 0xCC, 0x68, 0x60, 0x7A, 0x99, 0x2D, 0x9B, 0xA0, 0xC5, 0x6F, 0x22, 0xD8, 0xA6, 0x48, 0xA7, 0xB1, 0xFC, 0xDF, 0x79, 0x87, 0x6E, 0xA7, 0x7D, 0xCC, 0x86, 0x9E, 0xA1, 0xFB, 0xCE, 0xD6, 0xAE, 0xD7, 0x84, 0xBC, 0xB5, 0x65, 0x91, 0x9F, 0x9E, 0xBC, 0x49, 0x04, 0x20, 0x0A, 0xF8, 0xD3, 0x93, 0xBF, 0xA6, 0x0F, 0xA1, 0x1F, 0x6B, 0x03, 0xAB, 0x31, 0x33, 0xC0, 0x51, 0x8D, 0x3F, 0xEF, 0xDC, 0xE1, 0x6D, 0xA4, 0x37, 0x96, 0x04, 0x39, 0x8E, 0x64, 0x76, 0x0B, 0x38, 0xFE, 0xE4, 0x34, 0x09, 0x02, 0xBA, 0xC6, 0xAA, 0x13, 0xF0, 0xC5, 0xEB, 0x74, 0xCC, 0xBD, 0x17, 0xE0, 0x01, 0x98, 0x03, 0x7B, 0x14, 0xB1, 0x00, 0x36, 0xA1, 0xB7, 0x41, 0x13, 0xA2, 0x96, 0xA8, 0x4D, 0x28, 0xC5, 0x16, 0xB6, 0x3B, 0xA3, 0x46, 0x85, 0x91, 0x8B, 0xCF, 0x70, 0xE7, 0x4E, 0x66, 0xA0, 0x14, 0xCE, 0xFC, 0x89, 0x5A, 0xAE, 0x4F, 0xD4, 0x5C, 0x27, 0xCD, 0x8A, 0x71, 0x6A, 0x60, 0x1B, 0xB1, 0x00, 0x15, 0x60, 0xF4, 0xEF, 0xF0, 0x47, 0x23, 0xE2, 0x33, 0xF3, 0x3A, 0x46, 0xD6, 0xB4, 0xE6, 0xDD, 0xDC, 0xC8, 0x0B, 0xC6, 0x62, 0x04, 0x8E, 0x66, 0x98, 0x85, 0x88, 0x77, 0x43, 0x35, 0xF2, 0xF6, 0x9E, 0xBC, 0x8D, 0x79, 0xFC, 0x6D, 0x8C, 0xAA, 0xC7, 0x8D, 0x00, 0x08, 0xC2, 0x0B, 0x90, 0x78, 0xAD, 0x39, 0x54, 0xDF, 0xAE, 0xE4, 0x21, 0x13, 0x35, 0xE4, 0x23, 0xD7, 0xDE, 0x74, 0x36, 0x55, 0x46, 0x8D, 0x73, 0xE3, 0x3D, 0xBD, 0xF5, 0x19, 0xB5, 0x52, 0xB4, 0xD2, 0x6D, 0x7B, 0x3B, 0x6F, 0xD5, 0x27, 0x2D, 0xD2, 0xA6, 0x04, 0x2A, 0x80, 0x4A, 0xA0, 0x05, 0xA8, 0xF7, 0x26, 0x77, 0xFA, 0x36, 0xCA, 0xDB, 0x14, 0xC9, 0x27, 0x07, 0x91, 0x23, 0x21, 0x4F, 0x23, 0xFB, 0xD8, 0xB7, 0x5C, 0x69, 0x31, 0x16, 0x79, 0x26, 0xA2, 0x22, 0x80, 0x05, 0x5E, 0xEC, 0xFD, 0xF6, 0x42, 0x4D, 0xE5, 0x1B, 0x04, 0xD0, 0x05, 0x58, 0x03, 0xD3, 0x6A, 0xF1, 0x3C, 0x36, 0x36, 0xB0, 0x66, 0x97, 0xDF, 0x00, 0x55, 0x60, 0x09, 0xB0, 0x6B, 0xC6, 0xE8, 0x44, 0xAD, 0x91, 0xF7, 0x56, 0x06, 0xA3, 0xCB, 0xE2, 0x06, 0xAB, 0xA3, 0x77, 0x65, 0xAA, 0xB2, 0xF5, 0x25, 0x04, 0x36, 0x4D, 0x43, 0xA3, 0xE9, 0xAC, 0xD9, 0xBF, 0x7B, 0x3B, 0xF2, 0xEE, 0x5B, 0x29, 0x96, 0x7F, 0xBD, 0x9D, 0x13, 0x70, 0x07, 0xF2, 0xFB, 0x20, 0x05, 0xC6, 0x01, 0x9B, 0x0B, 0xEA, 0x69, 0x63, 0xA7, 0xCA, 0x35, 0x00, 0xC7, 0x8A, 0xC6, 0x11, 0xF8, 0xC7, 0x6E, 0xD3, 0x98, 0xE5, 0x91, 0xD3, 0x80, 0x93, 0x88, 0xE9, 0x2F, 0x9F, 0x63, 0x55, 0x0B, 0x34, 0x6F, 0xCA, 0x1A, 0x80, 0x13, 0x75, 0x2B, 0xA0, 0xB0, 0x44, 0x03, 0xAC, 0x08, 0x05, 0xF6, 0xB9, 0x91, 0x01, 0x61, 0xC0, 0x78, 0x30, 0xD4, 0x2C, 0xA7, 0x78, 0xB4, 0x8F, 0xFE, 0x4D, 0xD7, 0x31, 0xAD, 0xDF, 0xA7, 0x55, 0xDF, 0xBC, 0x8D, 0x0A, 0x76, 0xC9, 0x6C, 0xD3, 0x77, 0x6B, 0x8F, 0x8F, 0xC9, 0xDB, 0xF0, 0xB3, 0x66, 0xA3, 0x68, 0xD6, 0x76, 0x23, 0xB0, 0x6D, 0x60, 0xEE, 0x40, 0xB2, 0x81, 0x98, 0x7C, 0xA0, 0xB9, 0xA4, 0x38, 0x00, 0xBA, 0xC7, 0x2D, 0xF2, 0x3A, 0xD2, 0x09, 0x02, 0xEA, 0x9B, 0x22, 0x06, 0xAB, 0xB1, 0x27, 0x2F, 0x5E, 0xC7, 0x9A, 0x23, 0x4E, 0x2F, 0x5A, 0x9D, 0x44, 0x4F, 0x03, 0x36, 0x63, 0x50, 0x02, 0xA4, 0xBF, 0xE8, 0x8D, 0x53, 0x34, 0x5F, 0xE7, 0x09, 0xD7, 0x8F, 0xC5, 0xAD, 0xCF, 0x2E, 0x0C, 0x10, 0xF6, 0x3A, 0xE4, 0x96, 0x4C, 0xD0, 0x90, 0xF0, 0x52, 0x9E, 0x78, 0xBA, 0x55, 0x30, 0x01, 0xBF, 0x9E, 0xFC, 0xBE, 0x14, 0x43, 0x0A, 0x8F, 0x3A, 0x9A, 0x46, 0x5A, 0x3E, 0xD3, 0x8E, 0xCC, 0x8F, 0x48, 0xB4, 0xE7, 0x5E, 0xC5, 0x05, 0x41, 0xF6, 0xBB, 0x20, 0xD8, 0x0A, 0x18, 0x31, 0xF3, 0x8D, 0xE5, 0x8C, 0xEF, 0x1E, 0x17, 0x67, 0x7E, 0x98, 0x69, 0x67, 0x53, 0xB3, 0xF8, 0x7C, 0xB2, 0x64, 0xD7, 0x31, 0x8A, 0x31, 0x7B, 0xFD, 0x6D, 0x74, 0x2A, 0xE8, 0xF9, 0xB3, 0x54, 0x5E, 0xDE, 0x05, 0x84, 0x02, 0x59, 0x40, 0x73, 0x63, 0xC1, 0x99, 0x8F, 0xA4, 0x05, 0x54, 0x03, 0x99, 0xC0, 0xF4, 0xE6, 0xA8, 0x06, 0xAC, 0x80, 0xC8, 0x39, 0x65, 0xA2, 0x26, 0xCC, 0x86, 0x4B, 0xE6, 0x5D, 0xE8, 0x6F, 0x45, 0x1A, 0x69, 0x8C, 0x1A, 0x2F, 0x82, 0xD5, 0x18, 0x71, 0x46, 0x11, 0xDF, 0x71, 0x7D, 0x7E, 0x1D, 0x74, 0xC4, 0x6F, 0x2F, 0x71, 0xFC, 0xBD, 0xB7, 0x55, 0x76, 0x06, 0x30, 0x4E, 0xEF, 0x7B, 0x01, 0xDA, 0xD7, 0x57, 0x3F, 0x4F, 0x49, 0xF0, 0x66, 0x99, 0x53, 0x8D, 0x78, 0xEC, 0xB7, 0x90, 0x23, 0x4E, 0x43, 0xD5, 0x30, 0xCE, 0x70, 0xE7, 0xFA, 0x14, 0x20, 0xEC, 0x66, 0xDC, 0x2E, 0x86, 0x7E, 0x9F, 0x2B, 0x6B, 0x17, 0xA0, 0x0D, 0x84, 0x4E, 0xFF, 0x23, 0xCE, 0x22, 0x02, 0x70, 0x07, 0x2C, 0x80, 0x1D, 0xE3, 0xEC, 0x0C, 0x68, 0x02, 0x2E, 0x33, 0xF0, 0x26, 0x68, 0x8A, 0x67, 0xC7, 0x7E, 0xEB, 0x55, 0xC4, 0xE7, 0x68, 0xD2, 0x04, 0xF1, 0xA2, 0x56, 0x72, 0xE2, 0x27, 0x8F, 0xDD, 0x44, 0x03, 0xA1, 0xB7, 0xB1, 0xE2, 0x8E, 0xE3, 0xAD, 0x7D, 0x9A, 0xAB, 0x13, 0xD6, 0x40, 0xC5, 0x6B, 0x96, 0x34, 0xC5, 0xD1, 0x4D, 0x3F, 0xDB, 0xB1, 0xD5, 0x9C, 0x02, 0x89, 0x5C, 0xC0, 0x38, 0x14, 0x4E, 0x66, 0xDE, 0xE2, 0xFF, 0x52, 0xDC, 0x4A, 0x77, 0x66, 0x6D, 0x28, 0x37, 0x06, 0xD2, 0x80, 0x51, 0xEF, 0xC3, 0x00, 0x17, 0xC0, 0x14, 0xF0, 0xE4, 0x29, 0x01, 0xD4, 0xC6, 0xDB, 0x65, 0x01, 0x2B, 0xE7, 0x45, 0xC0, 0x16, 0xB0, 0x15, 0x90, 0xE4, 0x99, 0x31, 0x31, 0x33, 0x76, 0x77, 0x7E, 0xA3, 0x24, 0xE5, 0x58, 0x18, 0x45, 0xB3, 0x54, 0x64, 0xC3, 0xD8, 0x20, 0xA7, 0x18, 0x4C, 0xC6, 0xF2, 0xF6, 0xB5, 0x35, 0xE1, 0xE5, 0x38, 0x46, 0x5C, 0xDB, 0x47, 0xEF, 0x99, 0xFE, 0x29, 0xC0, 0xCC, 0x20, 0xB6, 0x01, 0xC6, 0xB1, 0x1F, 0xA3, 0x99, 0x31, 0x66, 0xD5, 0xAC, 0xDC, 0x11, 0x2A, 0xD5, 0x45, 0x55, 0x50, 0xD9, 0x48, 0x6A, 0x1A, 0x3B, 0x4D, 0x83, 0x1F, 0xFA, 0x76, 0x6C, 0x2E, 0xB6, 0x3A, 0x80, 0xA9, 0x7A, 0x49, 0x42, 0x03, 0x10, 0x27, 0x14, 0xD0, 0x7C, 0xF3, 0x39, 0x26, 0xDF, 0x76, 0x2D, 0x1C, 0xB5, 0x02, 0xD1, 0x80, 0x2A, 0xB0, 0x05, 0x90, 0xC0, 0x99, 0x52, 0x13, 0x33, 0xC7, 0x12, 0x13, 0x39, 0x1B, 0x62, 0xA1, 0xE8, 0x40, 0x54, 0xC8, 0x7B, 0xD9, 0x2E, 0x6C, 0x63, 0x16, 0x48, 0x01, 0x5B, 0x86, 0x80, 0xB4, 0xFF, 0xA2, 0xB4, 0xDE, 0x56, 0x82, 0x27, 0x49, 0x68, 0x56, 0xF9, 0xA7, 0xE1, 0xE3, 0x74, 0x3A, 0x27, 0xA2, 0x81, 0x5E, 0xEF, 0x13, 0x5C, 0x04, 0xF1, 0x9C, 0x86, 0x6E, 0x7B, 0x0C, 0x38, 0x9B, 0xC3, 0x26, 0xE8, 0xFA, 0x6B, 0x88, 0x52, 0x4D, 0x12, 0x81, 0xBD, 0x65, 0x40, 0xFB, 0xF1, 0xB5, 0x70, 0x9E, 0x12, 0x27, 0x82, 0x91, 0x78, 0xC3, 0x0E, 0x40, 0x89, 0x50, 0xC6, 0xBA, 0x80, 0xE6, 0xA6, 0x82, 0x26, 0x21, 0x9F, 0xD2, 0x45, 0x01, 0x62, 0x8E, 0xF4, 0x4D, 0xF3, 0x16, 0x09, 0xF6, 0x95, 0xD0, 0x67, 0x1F, 0x6A, 0x75, 0xF0, 0x88, 0xC9, 0x24, 0x19, 0x48, 0x0A, 0x49, 0xC1, 0x8D, 0x50, 0xE3, 0x97, 0x04, 0x25, 0xA3, 0x76, 0x03, 0x93, 0x47, 0xCC, 0xB9, 0x9A, 0x9E, 0x82, 0x66, 0xE3, 0x4D, 0x20, 0x95, 0xCF, 0x29, 0x42, 0x0C, 0xB0, 0xC9, 0xDA, 0xEF, 0x31, 0x27, 0xE7, 0x76, 0x52, 0xD0, 0x6A, 0x95, 0xBB, 0xBD, 0xB1, 0x00, 0xA8, 0x7E, 0x63, 0xCA, 0xC1, 0x84, 0xB7, 0xF0, 0xB1, 0xC8, 0x39, 0x5B, 0x71, 0xA5, 0x80, 0x31, 0x79, 0xAA, 0x89, 0x58, 0x80, 0x17, 0x91, 0xC0, 0xEF, 0x7B, 0xF8, 0xFF, 0x01, 0x00, 0x00, 0xFF, 0xFF, 0x84, 0x9D, 0x89, 0xAD, 0xEC, 0x4C, 0x8E, 0xAC, 0x5D, 0x69, 0x13, 0x92, 0x3B, 0xE9, 0xBF, 0x63, 0x0F, 0x15, 0x41, 0x1D, 0xA5, 0xF0, 0x5F, 0xBC, 0xC1, 0xF6, 0xA1, 0x4E, 0xD5, 0x4C, 0xF7, 0x65, 0x4B, 0x99, 0x5C, 0x83, 0xA9, 0x4F, 0xCF, 0xDF, 0xF4, 0xAD, 0x9F, 0xAB, 0x03, 0x9C, 0xC1, 0x77, 0xAD, 0x40, 0x09, 0x30, 0x8A, 0xEF, 0x5A, 0xD6, 0x66, 0x85, 0xDB, 0xD5, 0x1C, 0x05, 0x83, 0x4C, 0xC8, 0x9B, 0xD6, 0xBD, 0x2B, 0x3B, 0x6C, 0x77, 0xA5, 0x0F, 0xCA, 0x97, 0xA3, 0x2B, 0x01, 0xC6, 0xA1, 0xEC, 0x7B, 0x2B, 0x7B, 0xAE, 0x07, 0x16, 0x4C, 0x0F, 0xC6, 0xB3, 0x72, 0x00, 0x48, 0xBB, 0x3B, 0x10, 0xF6, 0xE8, 0xDB, 0x66, 0xC8, 0x8D, 0x1A, 0xBD, 0xD8, 0x7C, 0xC2, 0xC3, 0x67, 0x06, 0x96, 0xDC, 0x56, 0x14, 0x65, 0xEF, 0xD4, 0x53, 0xE2, 0x2C, 0xDA, 0x7C, 0x43, 0xD0, 0xC1, 0x27, 0x2B, 0x20, 0x13, 0xA8, 0xBA, 0xF5, 0xD3, 0xCE, 0x01, 0xA4, 0x81, 0x92, 0xCF, 0xCE, 0x4A, 0x7E, 0x1A, 0x22, 0x0D, 0xD8, 0x51, 0xAF, 0xBD, 0xBE, 0xCF, 0xEA, 0xAE, 0xF5, 0x1A, 0xAD, 0xD1, 0x06, 0x71, 0x02, 0x59, 0x99, 0xF6, 0x27, 0x1E, 0x88, 0x3D, 0xE1, 0x63, 0xB7, 0xE4, 0xE0, 0xCC, 0xF3, 0x67, 0x3B, 0x6A, 0x9E, 0x6F, 0x3C, 0x70, 0xF2, 0x5F, 0xAB, 0x56, 0x16, 0x0E, 0x54, 0xEE, 0xA7, 0x3B, 0xE9, 0xB6, 0xBE, 0xF0, 0x13, 0xE9, 0x6F, 0x6A, 0x76, 0x13, 0x14, 0xFB, 0x92, 0x8B, 0xDD, 0x4D, 0xDF, 0xDE, 0x2C, 0x11, 0x6C, 0x5D, 0xB9, 0x76, 0x5D, 0xEE, 0x6E, 0x55, 0x61, 0xEC, 0xF9, 0xD9, 0x3E, 0x13, 0x05, 0xCC, 0xB6, 0x99, 0x0C, 0x50, 0xC9, 0xA0, 0x73, 0xEE, 0x2E, 0xCC, 0x63, 0x2B, 0x76, 0x02, 0xA8, 0xDF, 0x7B, 0x1A, 0x45, 0xF7, 0x97, 0x6B, 0x35, 0x36, 0x29, 0x33, 0x95, 0x91, 0xF2, 0xED, 0xEF, 0x63, 0xAC, 0x7B, 0xE6, 0x87, 0x70, 0x45, 0x89, 0xB2, 0xE5, 0x5A, 0xB5, 0x92, 0xFD, 0xED, 0xEF, 0xCB, 0xBB, 0x52, 0x20, 0x46, 0x28, 0x71, 0x00, 0x55, 0x20, 0xCE, 0xDB, 0x53, 0xB4, 0x3D, 0x1A, 0x7B, 0x18, 0xAA, 0x3E, 0x4B, 0xFB, 0xB7, 0x40, 0xB7, 0x3D, 0xCF, 0x5B, 0x79, 0xAA, 0x6D, 0xD8, 0x1D, 0x40, 0xED, 0x33, 0xCE, 0xFD, 0x74, 0xAC, 0x31, 0x66, 0xB0, 0x5B, 0x2E, 0x21, 0x1A, 0x58, 0xC1, 0xA8, 0xDC, 0x74, 0x87, 0xF1, 0x1A, 0xEA, 0x15, 0xF1, 0x00, 0x32, 0x00, 0xE1, 0x2F, 0xAB, 0x80, 0x89, 0xBD, 0xB0, 0x68, 0xB5, 0x4D, 0xE8, 0xE5, 0x70, 0xC7, 0x42, 0xFF, 0xA2, 0xA8, 0xF0, 0xC1, 0xC8, 0x96, 0xF2, 0x86, 0x9B, 0x81, 0xCB, 0x57, 0x01, 0x69, 0x17, 0x4F, 0x36, 0x59, 0xDD, 0x8B, 0x09, 0x74, 0xAB, 0x6F, 0xBB, 0x81, 0x77, 0xEE, 0xCD, 0xE2, 0x1A, 0x37, 0xEC, 0x00, 0x7F, 0xA1, 0x03, 0x63, 0x06, 0x59, 0xB5, 0xD0, 0xDE, 0x10, 0xE9, 0x15, 0x82, 0x90, 0x1D, 0x54, 0x7F, 0xD6, 0x95, 0x6A, 0xEC, 0x86, 0x63, 0xE0, 0xE9, 0xF4, 0x5E, 0xE5, 0x3E, 0x7A, 0xFB, 0x1E, 0x7C, 0x4F, 0xF9, 0x66, 0x76, 0x71, 0x14, 0x57, 0x81, 0xDD, 0x09, 0xB1, 0x9B, 0x1E, 0x24, 0x80, 0x28, 0x22, 0x01, 0x1B, 0xE0, 0x14, 0x7E, 0xD9, 0xFD, 0x7C, 0x62, 0x82, 0x6C, 0x8D, 0x26, 0x2C, 0x68, 0x08, 0xBB, 0xB9, 0x0D, 0xFA, 0x58, 0x01, 0xA9, 0x09, 0xCD, 0x64, 0xEA, 0xA4, 0xD0, 0x44, 0x7C, 0x94, 0x5D, 0x9B, 0x7B, 0x6D, 0xDE, 0x59, 0x8E, 0x35, 0x5A, 0xAD, 0x96, 0x46, 0xD2, 0x68, 0x06, 0x98, 0x02, 0x5A, 0xC4, 0x00, 0xBE, 0xB5, 0xB4, 0xAD, 0x6F, 0xD4, 0xD9, 0x66, 0x70, 0x7A, 0xB8, 0xF1, 0x09, 0x2F, 0x57, 0x7F, 0x60, 0xDF, 0x9E, 0xB3, 0x32, 0x42, 0xC0, 0x93, 0xB9, 0xD1, 0x77, 0xE9, 0x01, 0xCD, 0x04, 0x09, 0x9C, 0x77, 0xEA, 0xE0, 0x8A, 0xD3, 0x80, 0xE1, 0x93, 0xB6, 0x2A, 0xB7, 0x62, 0xF7, 0xA2, 0xCF, 0x6E, 0x20, 0x0E, 0xA0, 0x01, 0xF8, 0xA6, 0xE0, 0x1E, 0xA3, 0x29, 0xD2, 0x73, 0x52, 0x70, 0x01, 0xAA, 0x7F, 0x65, 0xFB, 0x88, 0xFE, 0xB9, 0x1C, 0xEA, 0xC5, 0xC8, 0xA1, 0xF0, 0x93, 0x71, 0xD4, 0x76, 0x54, 0xAE, 0x8C, 0xB7, 0x7E, 0xAE, 0x02, 0x51, 0x5A, 0x2B, 0x5F, 0xB5, 0xE4, 0x6B, 0x35, 0xB6, 0x03, 0x93, 0x6F, 0xA6, 0xD2, 0x9E, 0xDA, 0x9B, 0xE5, 0x6A, 0x21, 0xBD, 0xA3, 0xEA, 0xFD, 0x48, 0x62, 0xF6, 0x0E, 0x17, 0xFE, 0xB0, 0x9B, 0x69, 0x56, 0x78, 0xAC, 0x69, 0xB4, 0xE1, 0x23, 0xA6, 0x7F, 0x9A, 0x37, 0x87, 0x17, 0xC3, 0x30, 0xB5, 0x59, 0x40, 0xCB, 0x1E, 0xF0, 0x40, 0xAD, 0x86, 0xA6, 0xF2, 0x81, 0x3B, 0xC0, 0xEE, 0x49, 0xAE, 0x01, 0xAC, 0x01, 0x39, 0x80, 0x09, 0x9F, 0x42, 0x5F, 0xA3, 0x19, 0x13, 0x27, 0xC1, 0x02, 0x8A, 0x42, 0xBA, 0xAD, 0xFB, 0x9A, 0x29, 0x18, 0x19, 0xCC, 0xD9, 0x7B, 0x72, 0x12, 0xCE, 0xB7, 0x33, 0x0D, 0x11, 0xE8, 0xBF, 0xDB, 0x6F, 0xF3, 0x16, 0x7E, 0x14, 0x21, 0x0A, 0x30, 0x05, 0x22, 0x76, 0x09, 0x02, 0xCB, 0x97, 0xB2, 0x6E, 0xF0, 0x2B, 0x4E, 0xA2, 0xCF, 0x96, 0x15, 0xE7, 0x7B, 0x52, 0xBA, 0x23, 0xDD, 0xBB, 0x74, 0xF1, 0xDD, 0x30, 0xB3, 0xFE, 0x28, 0xBA, 0xC1, 0xB1, 0xEE, 0x28, 0xDF, 0x3D, 0x17, 0xB8, 0xE9, 0xE1, 0xCF, 0x28, 0xD0, 0x87, 0xD9, 0x61, 0x61, 0x94, 0x70, 0x80, 0x1E, 0x60, 0x14, 0xC8, 0x01, 0xDC, 0x01, 0x4D, 0xC0, 0x19, 0x41, 0xC4, 0x63, 0x34, 0xC7, 0x73, 0x37, 0xC9, 0x35, 0x57, 0xAC, 0xBB, 0x47, 0xDE, 0x5A, 0x0A, 0xA7, 0x18, 0xFC, 0x0F, 0x12, 0x3C, 0xA6, 0x57, 0xE4, 0x99, 0xDF, 0xD7, 0x73, 0xE7, 0xF1, 0x3E, 0xCB, 0x8B, 0x3B, 0x80, 0x09, 0x1A, 0x54, 0x06, 0x80, 0xD1, 0x64, 0x3D, 0x11, 0x40, 0xE3, 0x23, 0x47, 0x82, 0xEC, 0x25, 0x75, 0x36, 0x5E, 0x49, 0xD5, 0xD8, 0x17, 0xEB, 0x39, 0x9F, 0xED, 0x00, 0x3B, 0xFE, 0x6A, 0xEB, 0x89, 0x04, 0x1D, 0x0B, 0xE3, 0x61, 0xD6, 0x40, 0x25, 0xFD, 0x0B, 0xBB, 0x1F, 0x31, 0x6F, 0x60, 0x0A, 0xE8, 0x00, 0xC2, 0xEF, 0x33, 0xAD, 0x04, 0xE8, 0xE4, 0x2F, 0x73, 0x8D, 0x16, 0x28, 0x6D, 0x87, 0xF2, 0x56, 0xD1, 0xCB, 0xE9, 0xD0, 0x54, 0xA4, 0x32, 0x9D, 0x62, 0x31, 0xA5, 0x78, 0x98, 0xEA, 0xD3, 0xB3, 0xEC, 0x9F, 0x92, 0xF1, 0x8E, 0x53, 0xA7, 0xDF, 0xA2, 0xF1, 0x33, 0xC4, 0x8E, 0x11, 0x04, 0xE0, 0xC1, 0xEB, 0xD3, 0x98, 0xF0, 0x7E, 0xFC, 0xB7, 0x62, 0xEA, 0xA2, 0xDF, 0xC3, 0x89, 0x46, 0x78, 0x04, 0xFE, 0xB6, 0x13, 0x61, 0xD6, 0x3D, 0x79, 0x66, 0x3E, 0xC2, 0x36, 0x45, 0xB8, 0x92, 0x4B, 0xB7, 0x3E, 0x48, 0x10, 0x63, 0xBB, 0x86, 0x0A, 0xA8, 0xDD, 0x82, 0x6D, 0xC0, 0x0C, 0x21, 0x40, 0x1A, 0xB0, 0x97, 0xCC, 0x5C, 0x9B, 0x1B, 0xD1, 0xE5, 0x40, 0xAB, 0xED, 0x53, 0xB5, 0xCD, 0xF9, 0x4D, 0xD9, 0x9E, 0xE2, 0x88, 0xA1, 0x43, 0x69, 0xA7, 0x80, 0xB4, 0x41, 0x94, 0x4A, 0x85, 0x8E, 0xE0, 0x23, 0x66, 0x40, 0xD9, 0x73, 0x6D, 0xBE, 0x9A, 0xCE, 0xF4, 0x09, 0xDF, 0x15, 0xDE, 0x32, 0xC0, 0x0A, 0x52, 0x8C, 0xBC, 0xCA, 0x5D, 0xFA, 0x28, 0x27, 0xC0, 0x90, 0xEC, 0x76, 0x8A, 0x79, 0x06, 0x23, 0x44, 0x01, 0x17, 0x20, 0x1C, 0xA8, 0xA0, 0xE3, 0xFE, 0xFB, 0xC4, 0x6A, 0x7B, 0xD2, 0xA5, 0x2B, 0x65, 0x2C, 0xC1, 0xE6, 0xD2, 0xA2, 0xC9, 0xAB, 0xF0, 0x09, 0x7E, 0x01, 0x30, 0xC3, 0x29, 0x16, 0x03, 0x5C, 0x81, 0x10, 0x20, 0x1D, 0x68, 0xE7, 0xA4, 0x99, 0x01, 0xEA, 0x80, 0xE7, 0xDA, 0xAC, 0x90, 0xA0, 0x31, 0x65, 0x5B, 0x9E, 0x50, 0x71, 0xF4, 0x67, 0x48, 0x9B, 0x51, 0x44, 0xEA, 0x92, 0x83, 0x2D, 0x15, 0xAE, 0x88, 0x92, 0xBA, 0xAF, 0x1D, 0x35, 0x44, 0xAE, 0xD0, 0x5E, 0xAE, 0x14, 0xCC, 0x1E, 0x51, 0xC9, 0x07, 0xC6, 0x08, 0x01, 0x32, 0x80, 0x70, 0x9E, 0xE4, 0xFD, 0xE7, 0x37, 0xF9, 0xAE, 0x10, 0xA1, 0x04, 0x49, 0x24, 0x07, 0x32, 0x83, 0xC7, 0x10, 0x4B, 0x41, 0xA1, 0x8F, 0xE2, 0x8D, 0xEE, 0xD6, 0x1D, 0x79, 0xCF, 0x2D, 0xD8, 0x0E, 0xF1, 0xFE, 0x1A, 0x9B, 0x31, 0x53, 0x0C, 0xA3, 0x24, 0x01, 0x32, 0x57, 0x23, 0x11, 0xC6, 0x3E, 0x0D, 0xF8, 0x07, 0x66, 0x80, 0x38, 0x70, 0x02, 0x50, 0x76, 0x41, 0x8B, 0xAF, 0xD1, 0xFA, 0x97, 0x11, 0x4C, 0xD5, 0x5F, 0x0A, 0x31, 0x8F, 0xA0, 0x7D, 0xB5, 0x14, 0x1B, 0x8E, 0xD4, 0xA1, 0x47, 0x29, 0x8D, 0x6D, 0x13, 0x7C, 0x36, 0xB2, 0xEA, 0xD7, 0xFA, 0x24, 0xB7, 0xDC, 0x44, 0xD7, 0x0E, 0xEF, 0x6F, 0xD2, 0x72, 0xDE, 0x32, 0x98, 0x3F, 0x6A, 0x38, 0xB2, 0xB0, 0x7B, 0x99, 0xDD, 0x3A, 0x4A, 0x6E, 0x4C, 0xD1, 0xCE, 0x3B, 0x7E, 0xC8, 0x24, 0x4E, 0x71, 0x42, 0xB1, 0x18, 0xF7, 0x15, 0xF3, 0xF7, 0x88, 0xF4, 0x00, 0x0B, 0xA0, 0x0F, 0xBE, 0x3B, 0x02, 0xF4, 0xCA, 0x70, 0x0C, 0x50, 0x0D, 0x0C, 0xB3, 0x4C, 0x12, 0x40, 0xDA, 0xA7, 0xB1, 0xD6, 0x09, 0x01, 0xEC, 0x00, 0x92, 0x84, 0x03, 0x5A, 0xC0, 0xF4, 0xDA, 0x6C, 0xF6, 0xE5, 0xBC, 0x55, 0xBB, 0xDF, 0xED, 0x2B, 0xFD, 0x7B, 0xC0, 0xE6, 0x7F, 0x5D, 0x58, 0xF3, 0xE0, 0x86, 0x2A, 0x8B, 0xFD, 0xE9, 0xE6, 0xBC, 0x33, 0x4C, 0x3B, 0x25, 0xCB, 0xB5, 0xF3, 0x94, 0x5B, 0xE5, 0xAC, 0x97, 0x24, 0xF0, 0xDC, 0x5E, 0x05, 0x44, 0xBE, 0xDF, 0x25, 0xB3, 0x68, 0x9C, 0x34, 0x6B, 0x5E, 0xBD, 0xCD, 0x0C, 0x6B, 0x23, 0xA7, 0x7A, 0x2F, 0xF4, 0x39, 0x44, 0x7E, 0x1A, 0xB2, 0xEB, 0x56, 0xCA, 0x94, 0x06, 0x5C, 0x80, 0x74, 0xA0, 0x0E, 0x30, 0x49, 0x6D, 0x8E, 0x01, 0xC2, 0x89, 0x20, 0x1A, 0x48, 0x07, 0x3A, 0x29, 0xFE, 0xE2, 0x80, 0x1A, 0x10, 0xEB, 0xA5, 0x39, 0xEF, 0x29, 0x15, 0x3E, 0xFA, 0x1B, 0x45, 0xED, 0x42, 0x0F, 0x41, 0xD0, 0x17, 0xC5, 0x7A, 0x8F, 0xFC, 0x02, 0xA4, 0x16, 0xE6, 0xB8, 0xFF, 0xB9, 0x1C, 0x35, 0xCE, 0x47, 0x36, 0xC1, 0x09, 0x05, 0x6A, 0x80, 0xD6, 0xF7, 0xBB, 0x2D, 0x29, 0xE4, 0xE6, 0x99, 0xE4, 0xD9, 0x15, 0x59, 0xBB, 0xB7, 0x72, 0xF0, 0x29, 0xE4, 0x5D, 0x74, 0x66, 0x4F, 0xF2, 0x37, 0x07, 0xF0, 0x2B, 0x27, 0xD0, 0x3C, 0x0D, 0x36, 0xDD, 0xE4, 0xCF, 0x85, 0x3C, 0xC6, 0x93, 0xA2, 0x80, 0xDE, 0x64, 0x1E, 0xCF, 0x06, 0x13, 0xA0, 0x0F, 0x50, 0x02, 0x38, 0x4F, 0x91, 0x51, 0x20, 0xEC, 0x16, 0x97, 0xAC, 0xC7, 0x6A, 0x82, 0xC2, 0xC4, 0x34, 0xDE, 0x0F, 0xFD, 0xEA, 0x1C, 0x32, 0xA2, 0x0B, 0x41, 0xFC, 0xEC, 0x85, 0x91, 0x93, 0xB8, 0xBA, 0x39, 0xCA, 0xFE, 0xD3, 0x02, 0xF3, 0xD6, 0xEA, 0xB4, 0x08, 0x05, 0x84, 0x50, 0xC2, 0xFA, 0x9D, 0xE9, 0x81, 0xCF, 0x4F, 0x4F, 0x77, 0x07, 0xEB, 0x76, 0xD0, 0xA8, 0xB7, 0x44, 0x49, 0x13, 0x26, 0x83, 0xF2, 0x4F, 0xEF, 0x58, 0xD0, 0x5A, 0xB2, 0xAA, 0x85, 0xF2, 0x0A, 0x44, 0x19, 0x5D, 0xF9, 0x78, 0xDC, 0x10, 0x35, 0xA0, 0x56, 0x38, 0x37, 0x56, 0xE5, 0x08, 0x18, 0x05, 0x5A, 0x00, 0x5F, 0xA5, 0x5D, 0x07, 0x22, 0x80, 0x2C, 0x7C, 0x57, 0xB2, 0x46, 0x53, 0x6A, 0x69, 0x27, 0xC6, 0xFA, 0xEA, 0x92, 0x6F, 0x95, 0xF6, 0x60, 0xFD, 0xDA, 0xD9, 0x08, 0x56, 0xBF, 0xC6, 0xCD, 0x80, 0x42, 0x47, 0xF8, 0x3E, 0x6A, 0xF1, 0xDD, 0x28, 0x2B, 0xF7, 0xD4, 0x5C, 0x9F, 0x8F, 0xCC, 0xA1, 0x13, 0x42, 0xD8, 0x6B, 0xDF, 0xE0, 0x1F, 0xE7, 0x2F, 0xDB, 0x31, 0xF9, 0xFA, 0xBF, 0xFA, 0xB4, 0x89, 0x49, 0x5D, 0x3D, 0xA9, 0x91, 0xD7, 0xD8, 0x86, 0xF0, 0x97, 0xB1, 0x1A, 0x6B, 0x80, 0xEA, 0x93, 0x5D, 0x9F, 0x6D, 0xA4, 0x4C, 0x60, 0x58, 0x4A, 0x8D, 0x75, 0x66, 0x04, 0x98, 0x03, 0xB4, 0x03, 0xD1, 0x6F, 0x2C, 0x17, 0x4F, 0xFD, 0xFA, 0x10, 0x93, 0x6B, 0x35, 0xA3, 0x60, 0x2A, 0x2B, 0x3D, 0x15, 0xBF, 0x86, 0x65, 0xF3, 0xDF, 0xED, 0xA0, 0x16, 0x0D, 0x6B, 0xBB, 0xA1, 0x42, 0x24, 0xCD, 0xBE, 0xB9, 0x5F, 0x18, 0xE5, 0xF5, 0x91, 0x00, 0x70, 0xFB, 0x64, 0xD4, 0x92, 0xEF, 0x92, 0x0A, 0x10, 0x06, 0x58, 0x00, 0x5A, 0x84, 0x00, 0x68, 0x7B, 0xDA, 0xB7, 0x47, 0x9F, 0xA5, 0x9A, 0x2B, 0x7E, 0x75, 0x94, 0xF1, 0xDE, 0xD6, 0x1F, 0x77, 0x41, 0x5C, 0x02, 0xB7, 0xC4, 0x0B, 0x8B, 0x83, 0xBE, 0x2B, 0xBE, 0xE2, 0x4F, 0x2F, 0xAE, 0x5F, 0xC9, 0x7C, 0x7B, 0x3A, 0x71, 0x5D, 0x58, 0x22, 0x88, 0x37, 0x39, 0x0C, 0xFB, 0x00, 0x73, 0x57, 0x0A, 0xC6, 0x81, 0x76, 0xFE, 0xD1, 0x80, 0xAA, 0x35, 0x9A, 0xB3, 0xFD, 0xCD, 0xF0, 0x96, 0x9B, 0xA1, 0xAC, 0xF2, 0x16, 0x41, 0x0D, 0x6A, 0xF1, 0x78, 0x44, 0x3D, 0xD9, 0x02, 0x10, 0xEF, 0xB5, 0x79, 0xE2, 0x5E, 0xF3, 0xC9, 0x3F, 0xDA, 0xB3, 0xBE, 0x61, 0xFD, 0x4F, 0xFD, 0x8C, 0x17, 0x8F, 0x03, 0xD5, 0xFC, 0xAE, 0xDE, 0x91, 0xEC, 0xDA, 0x7E, 0xA1, 0x27, 0x55, 0x38, 0x1B, 0x7A, 0xE6, 0xBB, 0x68, 0xD3, 0x9F, 0x2C, 0x4E, 0x25, 0x90, 0x83, 0xEF, 0x36, 0x30, 0x9C, 0x5D, 0x48, 0xB0, 0xA9, 0xE9, 0xE0, 0x5D, 0x33, 0x77, 0x34, 0x34, 0x34, 0x48, 0x15, 0x4C, 0x90, 0xC3, 0xD4, 0xB4, 0x10, 0x05, 0x1C, 0x7E, 0xD7, 0x07, 0xC8, 0x04, 0x86, 0x3F, 0x99, 0x58, 0x9B, 0x05, 0x3C, 0x4E, 0x65, 0x53, 0x4E, 0x07, 0xAE, 0x69, 0xB7, 0xAB, 0x7E, 0x77, 0x0E, 0x7D, 0x5A, 0x1D, 0x08, 0x65, 0xB4, 0xB3, 0x77, 0xE3, 0x8E, 0xA2, 0x56, 0x15, 0x67, 0x76, 0xBB, 0xD1, 0x13, 0x30, 0x35, 0x60, 0x01, 0x9C, 0x5E, 0x65, 0xDF, 0x1F, 0xB2, 0x5F, 0xE9, 0x35, 0xD1, 0x27, 0xD1, 0x78, 0x36, 0x2D, 0xD6, 0x1B, 0xBD, 0xE3, 0x53, 0x6F, 0x5F, 0x14, 0x9B, 0x29, 0x5E, 0xA1, 0x70, 0x60, 0xBB, 0xA4, 0xF6, 0xB4, 0x66, 0xB2, 0x22, 0x37, 0x48, 0xDD, 0xF2, 0xDF, 0x0A, 0x8E, 0xE5, 0xAD, 0xC7, 0x56, 0xAC, 0xE3, 0xAC, 0x86, 0x87, 0x36, 0x91, 0xC0, 0x11, 0x7C, 0x97, 0x84, 0x25, 0x10, 0xFC, 0x2E, 0x1F, 0xA3, 0x25, 0x2E, 0x09, 0x55, 0x26, 0x8E, 0xFB, 0x37, 0xB6, 0x1D, 0x9A, 0x88, 0x94, 0xE4, 0x08, 0xC5, 0x1F, 0x92, 0x7A, 0xF8, 0x8D, 0xB1, 0x00, 0xF7, 0xFF, 0x0E, 0x49, 0xD9, 0x9E, 0x5B, 0x5B, 0x1C, 0xD6, 0xDD, 0x97, 0x0E, 0x64, 0xFC, 0x43, 0x6A, 0x79, 0x7B, 0x14, 0xEC, 0x51, 0x47, 0xBE, 0xB4, 0x21, 0x8B, 0x41, 0x03, 0xFB, 0xFB, 0x9F, 0x2A, 0x6D, 0xB1, 0xD3, 0x2C, 0x9E, 0x76, 0xE5, 0x19, 0xA0, 0xB6, 0x5A, 0xBA, 0x0D, 0x08, 0x5B, 0x79, 0x58, 0x1D, 0x05, 0x46, 0xF1, 0x52, 0x2B, 0xDB, 0x01, 0x64, 0x50, 0x91, 0xED, 0x11, 0x6D, 0x03, 0x7A, 0x61, 0x40, 0x0A, 0xA0, 0x7C, 0x8E, 0xE6, 0xD1, 0x78, 0x64, 0x4D, 0x2B, 0xD7, 0x6A, 0x85, 0x88, 0xA7, 0x71, 0x6E, 0x55, 0x52, 0xA0, 0x3E, 0x31, 0x3A, 0x10, 0x12, 0x38, 0xFD, 0xC6, 0x7F, 0xF8, 0x35, 0xC7, 0x40, 0x61, 0xA5, 0xB6, 0xFB, 0xF1, 0x1E, 0x32, 0x16, 0x5E, 0x91, 0xB4, 0xC8, 0x6C, 0x6A, 0xE8, 0x08, 0x60, 0x0A, 0x88, 0x03, 0x67, 0x9B, 0x21, 0x77, 0xE6, 0xE9, 0xEA, 0x70, 0x1F, 0xFC, 0x44, 0xB7, 0x0D, 0x86, 0xF2, 0x7E, 0x9A, 0x8F, 0x7E, 0x64, 0xFB, 0xBB, 0x3A, 0x4B, 0xF7, 0x31, 0x7C, 0xDA, 0xE5, 0xCF, 0xB5, 0xFA, 0x42, 0xFF, 0xB6, 0x47, 0x6F, 0xCA, 0x64, 0xD3, 0xFC, 0x0A, 0x84, 0x6E, 0xB6, 0x9F, 0x76, 0x15, 0x20, 0x0E, 0xE0, 0x0D, 0xD8, 0xAA, 0xE7, 0x15, 0x50, 0x0E, 0x0C, 0xA2, 0x78, 0x00, 0x46, 0xEB, 0xDF, 0xBD, 0x65, 0x19, 0x38, 0xD3, 0x22, 0x91, 0x39, 0x41, 0xA4, 0x74, 0x24, 0x13, 0x41, 0x95, 0xF1, 0x11, 0x65, 0x6B, 0xA4, 0x63, 0x77, 0x71, 0xD5, 0xC6, 0xE9, 0xF7, 0xDC, 0xE7, 0xF1, 0x2D, 0x2B, 0xCC, 0x1B, 0x81, 0xCA, 0xD3, 0x7E, 0xD8, 0x03, 0x38, 0x21, 0x07, 0xB0, 0x7A, 0xBB, 0x35, 0x37, 0x05, 0x91, 0x4F, 0xB2, 0x6B, 0x04, 0x30, 0xFF, 0x14, 0x3C, 0x68, 0x89, 0x08, 0x7E, 0xF2, 0x77, 0x8C, 0x98, 0xF1, 0x61, 0xD4, 0x96, 0x95, 0x60, 0xB3, 0x64, 0x3A, 0x2D, 0x57, 0x24, 0xE1, 0x3C, 0x18, 0xC6, 0x0E, 0xC9, 0xA0, 0x41, 0x84, 0x68, 0xC2, 0x80, 0x13, 0x44, 0x03, 0xB6, 0x7B, 0x34, 0xD6, 0x4F, 0x43, 0x62, 0x5B, 0x5C, 0x0B, 0xFD, 0x4B, 0x26, 0xB8, 0x69, 0x66, 0x7E, 0xC5, 0x29, 0x29, 0xD6, 0x3B, 0x03, 0x08, 0x87, 0xCD, 0x2A, 0xFD, 0xDA, 0x4C, 0x10, 0x77, 0xD9, 0x73, 0x82, 0x36, 0x73, 0x83, 0x41, 0xF4, 0x00, 0x93, 0x40, 0xDB, 0x1A, 0x12, 0x48, 0x7D, 0xB7, 0x5B, 0xFB, 0x6E, 0x21, 0x7C, 0x54, 0x23, 0x64, 0xC7, 0xF4, 0x85, 0xF0, 0x5B, 0x84, 0xD6, 0x28, 0x57, 0x1B, 0x03, 0xCC, 0x0A, 0xF8, 0xFB, 0xAB, 0xE4, 0xC7, 0x36, 0x90, 0xD8, 0x5D, 0xA2, 0x38, 0x3F, 0xB8, 0x1A, 0xEB, 0x9E, 0xBB, 0x9B, 0x03, 0xB3, 0x86, 0x01, 0xED, 0x44, 0x13, 0x49, 0x18, 0xD1, 0xAC, 0xEA, 0x1B, 0x90, 0x1B, 0x45, 0xC5, 0xDD, 0xF4, 0x38, 0x41, 0xA7, 0x2D, 0xF7, 0x8F, 0xAB, 0xB7, 0x93, 0xDC, 0xAA, 0xDA, 0xD4, 0x9E, 0x80, 0x38, 0xE4, 0xF0, 0x01, 0x13, 0xA0, 0x5E, 0xBD, 0x38, 0x1C, 0xD9, 0xBA, 0xED, 0x23, 0x2B, 0x42, 0xCA, 0x88, 0x35, 0x01, 0xAD, 0xFD, 0x8E, 0x9F, 0x90, 0x5F, 0xA6, 0x25, 0xFE, 0x16, 0xEF, 0x18, 0x9D, 0x82, 0xE0, 0x25, 0x26, 0x02, 0x28, 0xE1, 0x03, 0x54, 0xC1, 0x2E, 0x52, 0xB4, 0x04, 0x76, 0x5E, 0xB0, 0x5C, 0xCA, 0x76, 0xE7, 0xC6, 0x3E, 0x3B, 0x34, 0xF8, 0x53, 0xD2, 0xA5, 0x76, 0x1C, 0x36, 0x19, 0x76, 0x29, 0xE7, 0xED, 0x04, 0x50, 0x03, 0x6C, 0x80, 0xFD, 0xAE, 0x76, 0x73, 0xAA, 0x03, 0x26, 0x40, 0x9D, 0xB5, 0x99, 0xA0, 0x79, 0x8F, 0xC7, 0xC5, 0x51, 0x45, 0xD1, 0xB5, 0xEC, 0xDA, 0xC2, 0xAB, 0x1A, 0xDC, 0x1D, 0x9C, 0x5C, 0xD7, 0x8C, 0x05, 0xF6, 0xB2, 0xC1, 0x13, 0xE0, 0xF3, 0x99, 0x5F, 0x14, 0xDF, 0xA6, 0xC6, 0xDD, 0xA2, 0x0F, 0xC8, 0x10, 0x02, 0x9C, 0x01, 0xEA, 0xF2, 0x37, 0x9E, 0x15, 0x4D, 0x7B, 0xFE, 0xEE, 0xB9, 0xFD, 0x2C, 0x55, 0x99, 0x00, 0xCE, 0x50, 0xC0, 0x24, 0x81, 0x5C, 0xB5, 0x2F, 0x26, 0x3A, 0xF2, 0xC0, 0x90, 0xCE, 0xE7, 0x25, 0xEB, 0xB3, 0x69, 0xA5, 0x80, 0x91, 0x7F, 0x6D, 0x5A, 0x09, 0x06, 0xFB, 0xCA, 0x4F, 0x0E, 0xB4, 0x00, 0x35, 0xC0, 0xFC, 0x20, 0xF8, 0x04, 0x9B, 0xE9, 0x9A, 0x07, 0x6B, 0x02, 0xA5, 0x28, 0xDF, 0x17, 0xFB, 0x47, 0x08, 0xC8, 0x97, 0x63, 0xE9, 0x88, 0x35, 0x0A, 0x3C, 0x9C, 0x1F, 0xDC, 0xFE, 0x8D, 0x06, 0x70, 0xEA, 0xCF, 0xEA, 0x37, 0xCE, 0xF3, 0xEF, 0xEB, 0xBD, 0x82, 0x7C, 0x65, 0xCC, 0x00, 0xE5, 0x45, 0x96, 0xF9, 0xBE, 0x5C, 0xB4, 0x60, 0x70, 0x34, 0x27, 0x69, 0xEB, 0x77, 0x17, 0x6C, 0x19, 0xD0, 0x09, 0xE0, 0xDF, 0xC7, 0x2A, 0x67, 0x05, 0x13, 0x0F, 0xFD, 0x8C, 0x5D, 0x0F, 0xA3, 0x7C, 0x93, 0x0D, 0xE8, 0x6F, 0x09, 0xCD, 0x3A, 0x0C, 0xD3, 0x89, 0x74, 0x60, 0x94, 0x28, 0xAA, 0x65, 0x0A, 0xF1, 0x89, 0xCF, 0x7D, 0x6E, 0x64, 0xAE, 0xCD, 0x0C, 0x81, 0xC2, 0x18, 0xDE, 0xFE, 0x71, 0x64, 0x0E, 0xC4, 0x7E, 0xD5, 0xBB, 0x50, 0x16, 0x5A, 0xAC, 0xD8, 0x96, 0x29, 0x18, 0xA4, 0x48, 0xB9, 0x0A, 0x51, 0x79, 0xF5, 0x40, 0xEA, 0x53, 0x05, 0xAE, 0xDE, 0x6D, 0xF6, 0x80, 0x25, 0x20, 0x0E, 0x1C, 0x7F, 0x17, 0x90, 0xE3, 0x1F, 0xBD, 0x92, 0x31, 0x1B, 0x1E, 0x71, 0xF0, 0x5D, 0x81, 0x55, 0x15, 0x0B, 0x86, 0xE7, 0x6D, 0x40, 0x08, 0x20, 0x07, 0x08, 0x5F, 0x91, 0x6B, 0xC6, 0x4C, 0xF5, 0xBE, 0xF0, 0x5B, 0x84, 0xA9, 0x47, 0x03, 0x75, 0x4B, 0x24, 0x27, 0x81, 0xE2, 0x1D, 0x99, 0x3B, 0xEE, 0x68, 0x04, 0xAF, 0xD1, 0x76, 0x20, 0x14, 0xB0, 0x03, 0xB8, 0xF2, 0xF9, 0xAE, 0x35, 0x9A, 0xA3, 0xE8, 0xA3, 0x89, 0xF4, 0xAC, 0xC8, 0x37, 0x58, 0x47, 0x6F, 0xFE, 0x38, 0x67, 0x85, 0x13, 0x5A, 0x19, 0xB5, 0x0B, 0x30, 0xBE, 0x3A, 0x13, 0xFD, 0x69, 0x52, 0xB6, 0xCF, 0x52, 0x82, 0x06, 0xDA, 0x08, 0x21, 0xE2, 0x9D, 0x98, 0xCA, 0x67, 0x73, 0xE5, 0x8F, 0x57, 0x17, 0xC3, 0x30, 0xF4, 0xF2, 0x6B, 0x2A, 0x9E, 0x2F, 0xA4, 0xE0, 0x1E, 0xBE, 0x37, 0x7B, 0xE5, 0x3B, 0x37, 0x10, 0xAB, 0x1D, 0xF6, 0x88, 0xE6, 0xEB, 0x30, 0x76, 0x2F, 0x60, 0x47, 0x87, 0x72, 0x45, 0x24, 0x76, 0xFD, 0x5B, 0x02, 0xA7, 0xF1, 0xC7, 0xFE, 0x34, 0x56, 0x8E, 0x6E, 0x26, 0x90, 0xBF, 0xEC, 0xB5, 0x5A, 0x70, 0x37, 0x66, 0x30, 0xA9, 0xE9, 0x5F, 0xAB, 0xC1, 0x03, 0x3A, 0x8A, 0x06, 0xC9, 0x6C, 0xF8, 0xAE, 0x16, 0xF7, 0x9A, 0xB2, 0x5C, 0xAB, 0xD5, 0x67, 0x65, 0x65, 0x02, 0x63, 0x40, 0x27, 0x50, 0x02, 0xA4, 0x11, 0xFD, 0x1A, 0x16, 0xF7, 0xE3, 0x96, 0x61, 0xDE, 0x09, 0x31, 0xBE, 0x29, 0x58, 0xD0, 0x70, 0xCB, 0xC3, 0xE4, 0x00, 0x26, 0x40, 0xC7, 0x8E, 0xEB, 0x6C, 0x8F, 0x01, 0xEC, 0xB4, 0xFE, 0x98, 0x73, 0xAA, 0xCF, 0x78, 0x2E, 0x1C, 0x07, 0x66, 0x65, 0x15, 0x76, 0x27, 0x75, 0xB3, 0xDD, 0x2A, 0x88, 0x01, 0xAC, 0x80, 0xD5, 0xAE, 0xAA, 0xF8, 0xCA, 0x22, 0xAE, 0xD5, 0x92, 0xE5, 0xD8, 0x46, 0x3A, 0x3B, 0xE4, 0x6D, 0xED, 0x76, 0x2F, 0xA1, 0x74, 0x70, 0xB2, 0x95, 0x3C, 0xF0, 0x18, 0xB5, 0xF1, 0xCD, 0xA4, 0xD5, 0xFE, 0xBF, 0x39, 0x0E, 0x01, 0xAA, 0x81, 0x0C, 0xA2, 0x81, 0x5B, 0xDA, 0x24, 0x37, 0x0B, 0xCC, 0x73, 0xF7, 0xD1, 0xE8, 0xAB, 0xBF, 0x55, 0x83, 0xB6, 0x6D, 0xDF, 0x3B, 0xD1, 0x0E, 0x48, 0x02, 0xD6, 0x7B, 0xAF, 0x30, 0xFA, 0xDA, 0x85, 0x2A, 0xFB, 0x90, 0xED, 0x62, 0x3D, 0xE3, 0xA3, 0x33, 0xC0, 0x86, 0xB3, 0xB9, 0xBB, 0xDA, 0x0A, 0x18, 0x25, 0x0E, 0x50, 0x0A, 0x78, 0x00, 0x6A, 0xC0, 0xE6, 0x90, 0x4C, 0xD7, 0x6A, 0x85, 0xFF, 0x05, 0x85, 0x37, 0x97, 0xC9, 0x2F, 0x75, 0x6A, 0xC9, 0x93, 0x3D, 0x8B, 0x2A, 0xE8, 0x05, 0x9F, 0x21, 0xEA, 0x7F, 0xE8, 0xE9, 0x4F, 0x0E, 0xDE, 0xDD, 0x02, 0xFB, 0x9A, 0xAF, 0xB5, 0xF2, 0x2F, 0x02, 0x55, 0x62, 0x00, 0x3D, 0x80, 0xC4, 0x8D, 0xEC, 0xF3, 0xAA, 0x50, 0xE4, 0xD3, 0x7A, 0x12, 0x5B, 0x66, 0xB7, 0x5B, 0xBD, 0x77, 0xE5, 0xC0, 0x4A, 0x01, 0xAB, 0x37, 0xCF, 0xC3, 0x7F, 0x8B, 0xC5, 0x33, 0xF5, 0xA8, 0x7C, 0x80, 0x56, 0x8D, 0xB9, 0x7E, 0xD0, 0x8F, 0xF6, 0x21, 0x22, 0x49, 0x04, 0xF1, 0x01, 0xA4, 0x10, 0x09, 0xC4, 0x10, 0x07, 0xF0, 0x02, 0x92, 0x4D, 0x91, 0x76, 0xD6, 0x68, 0x8D, 0xE1, 0x24, 0x1F, 0x54, 0x9A, 0x65, 0x70, 0xFD, 0xD6, 0xB9, 0x84, 0x60, 0x7A, 0x84, 0x6D, 0xCD, 0x45, 0xA5, 0x25, 0x87, 0x76, 0x1A, 0x8D, 0xF6, 0x55, 0x6A, 0x52, 0xBE, 0x67, 0xB6, 0xA6, 0x08, 0x03, 0xB2, 0x00, 0x6B, 0x40, 0x15, 0x38, 0xFD, 0xFE, 0xC4, 0x77, 0x3B, 0x0A, 0x6D, 0x50, 0x7F, 0xFB, 0x75, 0xBE, 0x4D, 0xC3, 0x06, 0x44, 0x01, 0xDA, 0xF8, 0x4E, 0x84, 0xB9, 0x23, 0x5E, 0xD8, 0x41, 0xC3, 0xEC, 0x72, 0x0B, 0x2A, 0x3E, 0x12, 0xEB, 0x74, 0x0C, 0x8C, 0x5D, 0x50, 0x4B, 0x80, 0x4A, 0x47, 0x02, 0x1D, 0xC0, 0x34, 0x61, 0x40, 0xE7, 0x5D, 0x6F, 0x90, 0x03, 0x8C, 0xAC, 0xD1, 0x86, 0x73, 0x70, 0x45, 0xCF, 0xA0, 0x21, 0xFB, 0x64, 0x79, 0xAD, 0x2A, 0xF0, 0x42, 0xD4, 0x6E, 0x13, 0xF8, 0x47, 0x6F, 0xA8, 0xF9, 0x35, 0xDA, 0x2E, 0x76, 0xD2, 0xF3, 0x1E, 0xD4, 0xF6, 0xD4, 0xD7, 0x6B, 0x80, 0x55, 0x38, 0x99, 0x01, 0xA2, 0x80, 0xE2, 0xDB, 0xB6, 0x1B, 0x2F, 0xE4, 0x52, 0x8C, 0x8C, 0x47, 0xC5, 0x76, 0x1B, 0x05, 0x37, 0xE1, 0x36, 0x0A, 0xD8, 0xB9, 0xBB, 0x84, 0xBC, 0xB7, 0xEF, 0x85, 0x91, 0x39, 0x63, 0xAA, 0xE4, 0x43, 0x95, 0x46, 0x87, 0x86, 0xCE, 0x31, 0x50, 0xB0, 0x16, 0x06, 0x5D, 0x81, 0x4E, 0x60, 0x04, 0xA8, 0x01, 0xC2, 0x01, 0x17, 0x20, 0x9D, 0x0A, 0x6C, 0x6B, 0x34, 0x46, 0xCF, 0x3A, 0x7B, 0xA1, 0x34, 0x87, 0xE4, 0xF3, 0x97, 0xA3, 0xC8, 0x52, 0xE4, 0xB3, 0x4A, 0x50, 0x99, 0x54, 0xE1, 0xED, 0x6F, 0x1B, 0x37, 0xDD, 0xEA, 0x39, 0xF5, 0x0A, 0x51, 0x8B, 0xFE, 0x8D, 0xE0, 0x08, 0x90, 0x07, 0xD0, 0x02, 0xB6, 0xC1, 0xB4, 0x14, 0x18, 0xA4, 0x20, 0x81, 0x67, 0x7C, 0xA4, 0x9E, 0xFA, 0xA8, 0x9C, 0x0D, 0xC2, 0xB7, 0x64, 0x0B, 0x64, 0x02, 0x16, 0xC0, 0x24, 0x93, 0x1B, 0x1B, 0x96, 0x16, 0x5D, 0xC3, 0xE2, 0x7B, 0xE9, 0x30, 0xDA, 0x14, 0x8D, 0xE6, 0x30, 0x9A, 0xD1, 0x68, 0x72, 0x80, 0x36, 0x58, 0x44, 0x13, 0xB0, 0x22, 0x92, 0x30, 0xA2, 0x81, 0x18, 0x18, 0xCD, 0x1E, 0xA3, 0x09, 0x7A, 0xD6, 0x6C, 0xB8, 0x67, 0x11, 0xE5, 0x27, 0x7B, 0x44, 0xFB, 0x98, 0x99, 0x61, 0xCF, 0x90, 0x41, 0x33, 0x21, 0x22, 0xED, 0x75, 0xD5, 0x5A, 0x3F, 0x9A, 0x7D, 0x76, 0x6E, 0x49, 0x30, 0x0B, 0x62, 0x00, 0x35, 0x40, 0x82, 0x30, 0x20, 0xF2, 0x1D, 0x65, 0x79, 0x36, 0x46, 0xCD, 0x63, 0x42, 0xFB, 0x61, 0x57, 0xEC, 0xCE, 0xDF, 0xA0, 0x53, 0xBD, 0xDD, 0x69, 0xFC, 0xE7, 0x72, 0x2C, 0x87, 0x56, 0x66, 0xB8, 0x9F, 0x7C, 0x59, 0x7F, 0x88, 0x15, 0xFB, 0xA5, 0xE7, 0xB5, 0xAB, 0x0F, 0xE6, 0xE9, 0xAE, 0x35, 0x07, 0x66, 0x11, 0x40, 0x25, 0xE0, 0x06, 0xA8, 0x02, 0xCE, 0x15, 0x74, 0x91, 0x6B, 0x34, 0xBD, 0x85, 0xE6, 0x04, 0xB5, 0x61, 0x9F, 0x7E, 0xFE, 0x18, 0x89, 0x7E, 0x22, 0xEF, 0x27, 0x10, 0x2A, 0xFD, 0x95, 0xD7, 0xCF, 0x67, 0xFB, 0x62, 0x06, 0x2F, 0xC1, 0x62, 0x04, 0x1B, 0xB9, 0x03, 0x6F, 0x40, 0x37, 0x60, 0xCA, 0xB0, 0xFD, 0x00, 0xDA, 0x80, 0xC7, 0xBE, 0x65, 0x9B, 0x37, 0xDB, 0x6E, 0x65, 0x5E, 0x4A, 0x03, 0x9C, 0x22, 0x0E, 0x60, 0xFA, 0x76, 0x62, 0x30, 0xC9, 0xE4, 0xC9, 0x90, 0x62, 0x77, 0x00, 0xF2, 0xA1, 0x28, 0x36, 0x98, 0x76, 0x30, 0x12, 0x6D, 0x82, 0xC5, 0x83, 0x57, 0xC6, 0x2A, 0x0D, 0x98, 0xBC, 0x2B, 0x7F, 0x96, 0x40, 0x32, 0xF6, 0x3C, 0x05, 0x68, 0x02, 0x69, 0x6B, 0x33, 0xBB, 0x7C, 0xB2, 0x31, 0xC1, 0x1B, 0x0F, 0xE1, 0xE9, 0x6E, 0x69, 0xD4, 0xB0, 0x7B, 0xF0, 0xD0, 0xF7, 0xCE, 0xD1, 0xCE, 0x2F, 0xF6, 0x8C, 0x5D, 0x50, 0x06, 0x84, 0xAD, 0x3C, 0xFC, 0xBA, 0x03, 0xC5, 0xA7, 0xC0, 0x80, 0x6C, 0xC0, 0x0C, 0x38, 0xFB, 0xA0, 0xF8, 0xFB, 0xA0, 0xE0, 0x79, 0xC5, 0x5B, 0xB9, 0x77, 0xA0, 0xD2, 0x4A, 0x84, 0x2E, 0x02, 0x08, 0x03, 0x5A, 0x68, 0xB3, 0xCD, 0x7F, 0x70, 0x51, 0x6E, 0xB1, 0x15, 0xF9, 0xFC, 0x50, 0x30, 0x6B, 0xB1, 0xE0, 0x52, 0x2B, 0x74, 0xC5, 0x3B, 0xF7, 0x5D, 0x89, 0x9A, 0x06, 0x34, 0x9B, 0x17, 0x0E, 0xA1, 0x02, 0x78, 0x03, 0xAD, 0xC0, 0xCE, 0x8B, 0xE9, 0x63, 0x33, 0xE7, 0x86, 0x7B, 0x83, 0xEC, 0xB0, 0x28, 0x24, 0x38, 0x33, 0x50, 0x29, 0x29, 0x65, 0x1F, 0x8F, 0x23, 0x32, 0xC0, 0x4E, 0x3C, 0x89, 0xAE, 0xED, 0x82, 0xBC, 0x97, 0xD8, 0xDB, 0xCA, 0x3F, 0x7E, 0x96, 0xBB, 0x25, 0x10, 0x0D, 0xE8, 0xE3, 0x8C, 0x00, 0x49, 0xD4, 0xAD, 0xC4, 0x2D, 0xCF, 0x46, 0xF1, 0x18, 0xA0, 0x79, 0x8B, 0xAC, 0x98, 0x41, 0x25, 0x10, 0x07, 0x10, 0x03, 0xEA, 0x95, 0x83, 0xD2, 0x9D, 0x39, 0xB1, 0x8D, 0x95, 0x9E, 0x64, 0x75, 0xEC, 0x8E, 0x23, 0xA6, 0x5D, 0x6D, 0x67, 0xAC, 0xE2, 0x96, 0xE6, 0x9B, 0x43, 0x38, 0x50, 0x09, 0xB8, 0x02, 0x32, 0xEF, 0xA7, 0xF9, 0x2B, 0x15, 0x27, 0x32, 0xB3, 0x95, 0x82, 0xFE, 0x0F, 0x93, 0xFF, 0x36, 0xDC, 0x3A, 0x87, 0xF3, 0x52, 0x1A, 0x87, 0x56, 0x39, 0x8F, 0xB2, 0xAF, 0xC2, 0xBE, 0x7D, 0xB7, 0x39, 0xEC, 0x88, 0xEC, 0x5D, 0x2A, 0xCE, 0x8F, 0x4C, 0xA1, 0x27, 0x90, 0xBB, 0xF0, 0x98, 0x66, 0x3E, 0xFD, 0xB6, 0x97, 0xF6, 0x23, 0xB6, 0x93, 0xFB, 0x5D, 0x10, 0xE7, 0x5E, 0x53, 0x16, 0x6B, 0xED, 0x9D, 0x8D, 0x1D, 0xEE, 0xC2, 0xDB, 0xC9, 0x3D, 0x67, 0xF8, 0x58, 0xF4, 0x46, 0x72, 0x60, 0xC3, 0x92, 0xAD, 0x84, 0x6C, 0xA6, 0x6E, 0x4D, 0x49, 0x08, 0x70, 0xE6, 0x4E, 0xE6, 0xB9, 0x01, 0x69, 0xF8, 0x2E, 0x73, 0xAD, 0x96, 0x97, 0xB2, 0x72, 0x2B, 0x4A, 0x51, 0xFE, 0xBE, 0xB3, 0x1E, 0x4F, 0xF8, 0x76, 0x3A, 0x11, 0xB9, 0x08, 0x0E, 0xB1, 0x4D, 0x41, 0x1A, 0xE0, 0xC2, 0x00, 0x7C, 0xC5, 0xBE, 0x7C, 0xEB, 0xB8, 0x84, 0xE5, 0xA1, 0xD1, 0x77, 0xAB, 0x3F, 0x20, 0x8C, 0xBC, 0xBB, 0xEF, 0xB5, 0x66, 0xCA, 0xCA, 0xC9, 0xAE, 0xB2, 0xF3, 0xB8, 0xF3, 0xBC, 0x6A, 0x40, 0x2A, 0x30, 0x46, 0xBF, 0x63, 0x7B, 0xA0, 0x68, 0x9E, 0x78, 0x4B, 0x6D, 0x75, 0x70, 0x5B, 0xAE, 0x9B, 0xDE, 0xB1, 0x92, 0x73, 0xF8, 0xAE, 0x87, 0x69, 0x0E, 0x84, 0x33, 0x10, 0xE8, 0x3B, 0x40, 0x14, 0xD0, 0x3C, 0xD9, 0x74, 0x80, 0xB2, 0xBB, 0x99, 0xE1, 0x89, 0x07, 0xB8, 0xB8, 0xD8, 0x04, 0x69, 0xC6, 0x38, 0xC8, 0x02, 0xD9, 0x0C, 0xCA, 0xB0, 0xC1, 0x59, 0xE3, 0x46, 0x6B, 0xF7, 0x40, 0x99, 0x28, 0xBA, 0xFD, 0x1A, 0xF5, 0xF4, 0x6F, 0x93, 0xF2, 0x67, 0x63, 0xA5, 0x0D, 0xA0, 0x7C, 0x44, 0x5A, 0x01, 0x2F, 0x40, 0x8C, 0x60, 0xE4, 0xE0, 0x7A, 0x3D, 0x30, 0xAB, 0xEA, 0x10, 0x4F, 0xF8, 0x7E, 0x18, 0xB7, 0xA7, 0x02, 0xB5, 0x30, 0xFE, 0xD2, 0xDE, 0x71, 0xF8, 0x6D, 0x3F, 0xEA, 0xE7, 0x4D, 0xF4, 0x7A, 0x57, 0x88, 0xDB, 0x33, 0xFB, 0x32, 0x3B, 0x0F, 0xB5, 0xF5, 0xBB, 0x64, 0xC5, 0xAE, 0x01, 0x29, 0x22, 0x80, 0x53, 0x37, 0x34, 0x80, 0x8E, 0x35, 0xDA, 0x5E, 0x93, 0xAC, 0xD0, 0x38, 0xF6, 0x8A, 0xEF, 0x32, 0xBF, 0xB4, 0x46, 0x42, 0x44, 0x14, 0xB1, 0x94, 0xCA, 0x6A, 0xBC, 0x6E, 0x3C, 0x80, 0x12, 0xC2, 0xAD, 0xA1, 0xA6, 0xBE, 0x19, 0x9B, 0xDA, 0x00, 0x92, 0x70, 0x60, 0xEF, 0x88, 0x4C, 0xE0, 0x2C, 0xB6, 0x8F, 0x2F, 0x98, 0x4F, 0x59, 0xFD, 0xE9, 0xBC, 0x77, 0x9E, 0x44, 0x02, 0xE6, 0x40, 0x2A, 0xD0, 0xC6, 0x9A, 0xF7, 0xEE, 0x3F, 0x3E, 0x9B, 0xCD, 0xA1, 0x53, 0x30, 0x4C, 0x72, 0x53, 0x6B, 0xD5, 0x87, 0xF5, 0x81, 0x8D, 0x03, 0x92, 0x71, 0xC0, 0x01, 0x5A, 0x58, 0x03, 0x50, 0x40, 0x12, 0x30, 0x01, 0x42, 0x81, 0x32, 0xA0, 0x0F, 0x30, 0x8F, 0xCD, 0xE6, 0xD6, 0xCD, 0x1C, 0xD8, 0x33, 0x6C, 0x0D, 0xC9, 0x89, 0x24, 0x8E, 0x19, 0xC4, 0x38, 0xC7, 0x7F, 0x31, 0x7E, 0xF7, 0x59, 0x52, 0x16, 0xB4, 0x59, 0xFB, 0xDA, 0x25, 0x78, 0x69, 0x1A, 0x50, 0x07, 0x38, 0xCA, 0x2C, 0x6E, 0x6F, 0x7F, 0x0B, 0xC1, 0xEF, 0xF2, 0x9A, 0xD0, 0x9B, 0x67, 0xB7, 0x80, 0x06, 0x5D, 0xA0, 0x02, 0xF4, 0xB3, 0x6E, 0xBB, 0x95, 0x01, 0xF9, 0x56, 0x37, 0x67, 0x17, 0x56, 0xEC, 0x0E, 0x22, 0xDE, 0x7A, 0x2B, 0xFF, 0xD5, 0xF7, 0xF2, 0xA8, 0x15, 0xF5, 0xAA, 0x6D, 0x2A, 0xF2, 0xCF, 0x0B, 0x78, 0xE8, 0x61, 0x24, 0xA0, 0x05, 0x44, 0x10, 0x05, 0x3C, 0x79, 0x5B, 0x86, 0x32, 0xD9, 0x8A, 0x67, 0xF7, 0xF8, 0x2E, 0xE3, 0xBA, 0x42, 0xA8, 0x74, 0x85, 0x37, 0x10, 0x01, 0xB5, 0x1B, 0x1D, 0xEE, 0x0C, 0xBC, 0x43, 0x28, 0xDD, 0xA6, 0xA0, 0x78, 0x15, 0x71, 0x86, 0x17, 0xEA, 0x02, 0x01, 0x0A, 0xC3, 0x73, 0xC0, 0x03, 0xA8, 0x6D, 0xCF, 0xDA, 0x86, 0xE5, 0xDA, 0x81, 0xFC, 0x2D, 0x59, 0xD5, 0x7E, 0x82, 0x5D, 0xDB, 0x80, 0x22, 0xC2, 0xDE, 0x5F, 0x32, 0x01, 0x6B, 0x7F, 0xC5, 0x5C, 0xDB, 0xB6, 0xAE, 0x62, 0x7C, 0xB4, 0x2D, 0x94, 0xFA, 0x36, 0x4D, 0x32, 0xCE, 0x7D, 0xDB, 0xF9, 0x72, 0x80, 0x16, 0xA0, 0x0A, 0xC8, 0x20, 0x04, 0xE8, 0x58, 0xF5, 0xF3, 0x35, 0x1A, 0x5E, 0x39, 0x68, 0x89, 0x15, 0x7A, 0x0F, 0xFA, 0xF7, 0x29, 0x2E, 0x6F, 0xB7, 0xC7, 0x11, 0xDF, 0xF8, 0xFC, 0x1E, 0xA6, 0x50, 0x83, 0x95, 0xFE, 0x1B, 0xAC, 0x1B, 0x2B, 0x04, 0x49, 0x8B, 0xD4, 0x03, 0x8B, 0xDD, 0x9F, 0x0D, 0xC4, 0x00, 0x9A, 0x04, 0xAF, 0xC7, 0x58, 0xDB, 0x6D, 0xA3, 0x87, 0x19, 0xE0, 0xBD, 0x25, 0xE4, 0x7B, 0xC4, 0xB6, 0x9D, 0x58, 0x87, 0x83, 0xD7, 0x47, 0xE4, 0x5F, 0xA3, 0xAA, 0xB3, 0x00, 0x16, 0xBC, 0x14, 0xF6, 0x9C, 0xCA, 0xF3, 0x6E, 0x9B, 0x7C, 0xE7, 0xC6, 0x10, 0xD2, 0xC2, 0x76, 0x02, 0x48, 0x11, 0x7C, 0x5E, 0xA7, 0x89, 0xE4, 0x1F, 0x7F, 0xC8, 0xBF, 0xEA, 0xDD, 0xAB, 0x05, 0x8C, 0xE5, 0x10, 0x8D, 0x9D, 0x06, 0x21, 0x5C, 0xE3, 0xAA, 0x48, 0x5D, 0x06, 0x83, 0x66, 0x0F, 0xA4, 0x58, 0xAB, 0x7E, 0x56, 0xA2, 0xD1, 0xE6, 0xBB, 0xB8, 0xD8, 0xE9, 0x0D, 0xAC, 0x8B, 0x50, 0x44, 0xD4, 0xBD, 0xA7, 0xA7, 0x0D, 0x08, 0x7D, 0x4D, 0x58, 0xFB, 0x5A, 0x9F, 0x27, 0x51, 0x76, 0x88, 0x9D, 0x80, 0x0A, 0x07, 0x74, 0x80, 0x34, 0x80, 0x23, 0x5B, 0xB7, 0x06, 0x82, 0xF1, 0xF2, 0xDB, 0x2C, 0x63, 0xEC, 0x2E, 0x70, 0x1E, 0x7E, 0xB9, 0xDB, 0x1A, 0xE0, 0x20, 0x6D, 0x32, 0xE3, 0x56, 0x1E, 0x4D, 0xC0, 0x15, 0xC8, 0x04, 0xC6, 0xD8, 0xFD, 0x98, 0x80, 0xDB, 0x47, 0x80, 0xB4, 0xEC, 0x52, 0x18, 0x4A, 0xD7, 0x37, 0x03, 0x29, 0x2E, 0x89, 0xF5, 0x4B, 0xA3, 0x94, 0xB6, 0xF8, 0x8D, 0x7F, 0xCE, 0x84, 0xB3, 0x51, 0x88, 0x5E, 0x5A, 0x7C, 0xF3, 0xB6, 0xEB, 0xE2, 0xCE, 0x67, 0xE9, 0xAE, 0x02, 0x16, 0x80, 0x1A, 0x20, 0x02, 0x3C, 0x7D, 0x6B, 0x34, 0xE5, 0x66, 0xD8, 0x4E, 0xD2, 0x94, 0x49, 0x33, 0x0B, 0x10, 0xFB, 0xA9, 0xEE, 0xEB, 0x59, 0x7F, 0xA0, 0x45, 0x11, 0xCD, 0xF8, 0xC6, 0x59, 0xDB, 0x68, 0xC9, 0xF1, 0x45, 0x3E, 0x24, 0xEA, 0x34, 0x9E, 0x6D, 0xF7, 0x00, 0x30, 0xBE, 0x22, 0xAE, 0xC0, 0x63, 0xD1, 0xE1, 0x7D, 0x10, 0x40, 0x0E, 0xD0, 0xBB, 0x0E, 0x6E, 0xD6, 0x6A, 0x8E, 0x97, 0xA0, 0x1D, 0xA7, 0xA0, 0xC7, 0xD7, 0xB7, 0x45, 0x4B, 0x40, 0x06, 0x33, 0xF6, 0x14, 0x8B, 0x4F, 0x58, 0x4D, 0xBF, 0x0A, 0xDE, 0xB2, 0x56, 0x2B, 0xDA, 0x49, 0x80, 0x36, 0x20, 0xFB, 0xB3, 0x5A, 0x5C, 0x80, 0x23, 0xB7, 0xB4, 0x74, 0xC4, 0x5D, 0x91, 0x29, 0x9A, 0x72, 0xF4, 0x4E, 0x9D, 0x9B, 0x00, 0xD1, 0xB7, 0x54, 0x4A, 0x5D, 0x02, 0x94, 0xEB, 0xBC, 0xD9, 0x3A, 0xAE, 0xEB, 0x2C, 0x04, 0xEB, 0xA4, 0xF3, 0x28, 0xE6, 0x6F, 0x8D, 0xD8, 0x8B, 0xBA, 0xE7, 0x7A, 0x77, 0x27, 0x27, 0x51, 0x02, 0x64, 0xDC, 0x18, 0xE1, 0xA9, 0x26, 0x6B, 0x35, 0x2C, 0x26, 0xC0, 0x54, 0xF1, 0x70, 0xBF, 0x2E, 0xAC, 0x06, 0xF9, 0xDE, 0x54, 0x6A, 0x54, 0x2A, 0x02, 0x4A, 0xC1, 0x3F, 0xD3, 0x4E, 0x7D, 0x56, 0x8B, 0x7F, 0x17, 0xB2, 0xEB, 0xED, 0xF5, 0x77, 0x00, 0x39, 0x1F, 0xAB, 0x39, 0x70, 0x12, 0x90, 0x03, 0xF4, 0xBB, 0xD8, 0x0D, 0x9A, 0xA5, 0xC0, 0xAA, 0xC7, 0x74, 0x03, 0xA1, 0x40, 0xDD, 0x3B, 0xB7, 0x68, 0x66, 0xD9, 0xE8, 0x7F, 0xEF, 0x58, 0x79, 0xE6, 0x6E, 0x7B, 0x87, 0x57, 0x86, 0x0D, 0x0B, 0xBB, 0x5B, 0xEF, 0x07, 0x56, 0x1A, 0x02, 0x7D, 0x9B, 0x48, 0xF2, 0x37, 0x20, 0x09, 0x1C, 0x7E, 0x37, 0x0E, 0xB4, 0x01, 0x53, 0xF8, 0xEE, 0xE9, 0x19, 0xE2, 0xE2, 0xE2, 0xE3, 0x06, 0xF7, 0xC4, 0x87, 0x81, 0xE9, 0x40, 0x8C, 0xD0, 0x0B, 0x6F, 0x28, 0x9B, 0x47, 0x65, 0xF2, 0xF7, 0x4F, 0x51, 0x4F, 0xCA, 0xDC, 0xFE, 0x4B, 0x0B, 0x2C, 0xFA, 0xD5, 0x87, 0xEF, 0x27, 0x0B, 0x34, 0x0A, 0xD8, 0x7E, 0x67, 0x80, 0x13, 0xBA, 0x2F, 0x9C, 0xEF, 0x5D, 0xBB, 0x9D, 0xB7, 0x71, 0xAF, 0x60, 0x3F, 0xB5, 0x55, 0xD5, 0x5B, 0x08, 0xE5, 0xC4, 0x9B, 0xFF, 0x8D, 0xA7, 0x91, 0x31, 0x3E, 0x1A, 0xFB, 0x67, 0x2F, 0x83, 0xBE, 0x35, 0xF6, 0x7D, 0xFB, 0xE2, 0x83, 0x5D, 0x06, 0xDB, 0xFB, 0x1E, 0x80, 0x19, 0x31, 0x44, 0x02, 0xEE, 0x40, 0xEE, 0xD6, 0x9B, 0x5E, 0xAB, 0xD5, 0xA5, 0x7B, 0xDE, 0x55, 0x3F, 0xAB, 0xD9, 0xD8, 0xD5, 0xD2, 0x37, 0xA1, 0xEC, 0x19, 0xD2, 0x5F, 0xFA, 0xC7, 0x3D, 0x30, 0x3F, 0xF6, 0xCF, 0x98, 0x40, 0xD6, 0x06, 0x8C, 0x09, 0x12, 0x90, 0x0D, 0xE0, 0x09, 0xE5, 0x7D, 0x51, 0x49, 0xC8, 0x1B, 0x2F, 0xC8, 0x79, 0xCE, 0x7D, 0x57, 0x20, 0xB6, 0x17, 0x39, 0x00, 0x49, 0x20, 0x0C, 0x68, 0x46, 0x0F, 0xF2, 0xAE, 0x28, 0x31, 0x9E, 0x6E, 0x71, 0xF6, 0xB6, 0xE3, 0x61, 0xC5, 0xA1, 0xAB, 0xE6, 0xD9, 0xDE, 0x2C, 0xC1, 0x74, 0x3F, 0x1A, 0xAD, 0xA7, 0x81, 0x64, 0xB3, 0xC2, 0x09, 0xC0, 0x88, 0x2A, 0x26, 0x8C, 0xE6, 0xE3, 0xD5, 0xE9, 0x1A, 0x6D, 0x5D, 0x59, 0xAA, 0x83, 0x0B, 0x9E, 0x38, 0xBD, 0xB6, 0xCC, 0x26, 0xC5, 0xE2, 0xE5, 0x77, 0xA0, 0xFD, 0x8C, 0x16, 0x53, 0xBB, 0x14, 0xFB, 0x96, 0x02, 0xDB, 0x96, 0xED, 0xE7, 0xD9, 0xE2, 0x83, 0xB3, 0x7B, 0xFE, 0x1A, 0x10, 0xDF, 0x65, 0xFF, 0x77, 0x9E, 0x43, 0xF7, 0x53, 0xBD, 0x82, 0xB8, 0x98, 0xA8, 0x83, 0x3B, 0xB7, 0x43, 0xC7, 0xBE, 0x57, 0x02, 0x3F, 0x15, 0xE0, 0xC6, 0x23, 0x64, 0x1D, 0xEA, 0x38, 0x5B, 0x38, 0x60, 0xC8, 0xAD, 0x7F, 0xDD, 0x2D, 0x95, 0x8C, 0x3E, 0x0D, 0x16, 0xE9, 0xC4, 0x1F, 0xBB, 0x1F, 0x7D, 0xE5, 0x4A, 0x18, 0xCD, 0x88, 0xA2, 0xB5, 0xE4, 0x00, 0x41, 0x8C, 0x7D, 0x34, 0xE3, 0x6D, 0x8D, 0x36, 0x5F, 0x15, 0xCD, 0xC5, 0xFE, 0x91, 0x5B, 0xCA, 0x07, 0x1D, 0x56, 0x92, 0x50, 0x34, 0x9E, 0xB8, 0xD6, 0xBB, 0xC9, 0x57, 0xB7, 0x55, 0x36, 0x08, 0xFD, 0xD4, 0xEE, 0x04, 0xB0, 0x03, 0xEC, 0xF1, 0xD7, 0x0E, 0x54, 0xAC, 0x6A, 0xCC, 0x3D, 0x88, 0xFC, 0xCC, 0x6D, 0x3F, 0x42, 0x76, 0x80, 0xFA, 0xFD, 0xE9, 0x69, 0xAF, 0x9F, 0xB7, 0x5B, 0x59, 0x69, 0x18, 0xDF, 0x0C, 0x2C, 0xDF, 0xD2, 0xD2, 0x67, 0xF5, 0x53, 0x30, 0x46, 0x88, 0x81, 0xED, 0x66, 0x35, 0xE3, 0x19, 0xC0, 0xAB, 0x03, 0x7D, 0x60, 0x3B, 0x0D, 0xA0, 0x94, 0xE1, 0xFC, 0x00, 0x61, 0xC0, 0xEC, 0x05, 0xDA, 0xE7, 0x9F, 0x46, 0x83, 0xAF, 0xE6, 0x03, 0xBF, 0xD1, 0xD8, 0xFA, 0x32, 0xFE, 0x6B, 0x7A, 0xDF, 0x15, 0x18, 0xFD, 0x2D, 0x7C, 0xCA, 0xB9, 0x0B, 0x9F, 0xFE, 0xA9, 0x71, 0x86, 0x00, 0xCA, 0x9F, 0x4C, 0x01, 0x65, 0x40, 0xEE, 0xC5, 0x60, 0xC0, 0x2E, 0xB4, 0xF4, 0xB5, 0xB6, 0xDD, 0x5B, 0x69, 0xA4, 0xEF, 0x4F, 0xB9, 0x3F, 0xD9, 0x87, 0xF9, 0xEC, 0x05, 0xAA, 0xDB, 0xFD, 0xCE, 0xF5, 0x04, 0x72, 0xAF, 0x98, 0x0D, 0x67, 0x39, 0xAA, 0xD9, 0xEE, 0x92, 0x0C, 0x3C, 0x07, 0x58, 0xC5, 0xE9, 0x93, 0x80, 0x15, 0x50, 0x6C, 0x1C, 0x11, 0xC2, 0x88, 0x92, 0xB5, 0x9A, 0x70, 0x3E, 0x34, 0xD7, 0x78, 0xC8, 0xAC, 0xD5, 0xF5, 0xA8, 0x41, 0x4F, 0xC7, 0xFF, 0x6A, 0xDD, 0x2A, 0x88, 0xD2, 0xF5, 0xA3, 0x69, 0x65, 0xF3, 0x4A, 0x71, 0xA3, 0xA0, 0xB3, 0xE5, 0x4C, 0x60, 0xFF, 0x0F, 0x85, 0xC8, 0x75, 0xFD, 0x59, 0x47, 0x9F, 0x78, 0x5D, 0x54, 0x18, 0xE1, 0x89, 0x82, 0x76, 0xB1, 0x40, 0x9E, 0x47, 0x3C, 0xC1, 0xB6, 0x02, 0x2E, 0xEF, 0x0C, 0x68, 0x3F, 0x3D, 0x05, 0xCE, 0xA4, 0x6F, 0x7C, 0x14, 0x95, 0x56, 0xEC, 0xA1, 0x89, 0x5A, 0x14, 0xBE, 0xD3, 0xAF, 0x3C, 0x53, 0x00, 0x7E, 0x80, 0xC3, 0x9F, 0x84, 0x02, 0x42, 0x3C, 0x43, 0x09, 0xB6, 0x46, 0x53, 0xF4, 0x32, 0xFF, 0x5B, 0x22, 0x98, 0x75, 0x8B, 0x12, 0x38, 0xDD, 0xA6, 0xBF, 0xFB, 0x33, 0x5C, 0xF6, 0x0A, 0xB8, 0x3D, 0x5C, 0xD1, 0x8F, 0xB0, 0x72, 0xD1, 0x86, 0x0D, 0xD8, 0x01, 0x3C, 0x81, 0xD1, 0x77, 0x37, 0x48, 0x6D, 0x95, 0x41, 0x61, 0x43, 0xDD, 0xCE, 0x56, 0x1E, 0xF0, 0xF1, 0x4A, 0x6A, 0xB2, 0xEB, 0x6A, 0x2D, 0xD3, 0xCC, 0x35, 0xE6, 0xA6, 0x3A, 0x7E, 0xF0, 0x47, 0x22, 0x40, 0xB7, 0xC0, 0xB7, 0xF5, 0x16, 0x22, 0x86, 0x50, 0x20, 0xF9, 0x13, 0xB1, 0x8F, 0x54, 0x9F, 0x00, 0x36, 0xC0, 0x9F, 0xDC, 0x26, 0x20, 0x9F, 0xDD, 0xB4, 0xAE, 0x6B, 0x35, 0xDB, 0x9E, 0xD2, 0x7F, 0x5B, 0xCD, 0xE4, 0x67, 0x28, 0x64, 0x41, 0xCF, 0xC0, 0x5B, 0x30, 0xDD, 0x9A, 0xCA, 0x5D, 0x8F, 0xDA, 0x53, 0x6D, 0x7D, 0xB4, 0xB5, 0x96, 0x01, 0x5E, 0x40, 0x6E, 0x07, 0x51, 0x00, 0x83, 0x87, 0x7A, 0x9B, 0xE8, 0x57, 0xC9, 0x61, 0x67, 0x82, 0x8B, 0x2E, 0x26, 0x53, 0x17, 0xC1, 0x3C, 0x48, 0x28, 0xE0, 0x41, 0x07, 0xEC, 0x3C, 0x49, 0x0E, 0xD9, 0x66, 0x16, 0x5D, 0xCF, 0x96, 0x0F, 0x17, 0x61, 0x0A, 0x48, 0x02, 0x67, 0x00, 0x21, 0x72, 0xD5, 0x4C, 0x9D, 0x0F, 0xD7, 0x2E, 0xA3, 0x4F, 0x20, 0x0C, 0x38, 0xC1, 0x5F, 0x36, 0xB0, 0xAA, 0x90, 0x93, 0x6B, 0x34, 0x47, 0x73, 0x47, 0x35, 0x77, 0x25, 0xD4, 0xD7, 0x68, 0x34, 0x2F, 0x3C, 0x36, 0x1D, 0x87, 0xC8, 0x97, 0xFA, 0x5A, 0xE9, 0x5E, 0x5A, 0x19, 0xF7, 0x0A, 0xA9, 0xCA, 0xFB, 0x49, 0x53, 0xC2, 0x06, 0xA8, 0x79, 0x7B, 0xB1, 0x92, 0x9F, 0xB6, 0xFE, 0xBE, 0x1B, 0xFC, 0xAD, 0x79, 0xA4, 0x07, 0xDF, 0x48, 0x63, 0x73, 0x69, 0x3F, 0xA3, 0xF7, 0x12, 0x6F, 0xA9, 0x7D, 0x9F, 0xB4, 0xF8, 0xAB, 0x2F, 0x0F, 0xD0, 0x05, 0x8C, 0xF2, 0x27, 0x8B, 0x01, 0x34, 0x80, 0x1D, 0xA3, 0xAC, 0xBD, 0x77, 0x03, 0x10, 0xBF, 0x25, 0xC3, 0x34, 0xF9, 0xCB, 0xED, 0x2D, 0x1F, 0xFE, 0xF2, 0xAC, 0xD1, 0x82, 0xC5, 0x9C, 0xEF, 0x35, 0xBA, 0xDD, 0x18, 0x42, 0xB1, 0x20, 0xA7, 0xD2, 0x84, 0x61, 0x61, 0xD1, 0x28, 0x27, 0x08, 0xBE, 0x93, 0xC5, 0xF2, 0x99, 0x2C, 0x56, 0x60, 0x3E, 0x72, 0xAD, 0x42, 0xC4, 0x8A, 0xEB, 0x33, 0xAE, 0xF4, 0x7E, 0x1B, 0xC1, 0x55, 0xFF, 0x0C, 0x74, 0x36, 0xFF, 0xBA, 0xBD, 0x80, 0xF8, 0x63, 0xAD, 0xBA, 0xE8, 0x70, 0x50, 0x63, 0x73, 0x09, 0x9F, 0xB5, 0x85, 0x67, 0xEE, 0x92, 0x69, 0x03, 0xEF, 0xFE, 0x38, 0xA0, 0x6A, 0xBB, 0x7D, 0x6F, 0x01, 0x5C, 0x2B, 0x40, 0xFB, 0x16, 0xC7, 0x0D, 0x07, 0xF4, 0x00, 0x7E, 0xF6, 0x97, 0x6B, 0xB5, 0x84, 0x38, 0x59, 0x37, 0x72, 0x08, 0xE9, 0x4C, 0xCE, 0xE1, 0x71, 0x6A, 0x6B, 0xE6, 0xBC, 0x83, 0x75, 0x7F, 0x45, 0xB2, 0x82, 0xF5, 0xE2, 0x43, 0xAB, 0xCD, 0xF9, 0xBC, 0xA0, 0x93, 0x77, 0xA4, 0x93, 0x44, 0x3B, 0x30, 0x0C, 0x94, 0x8C, 0xE8, 0x4D, 0x88, 0xF3, 0x05, 0xA5, 0x2D, 0xEC, 0x79, 0xED, 0x9E, 0x25, 0xBA, 0x3F, 0x30, 0x01, 0xE8, 0x1B, 0x28, 0xE5, 0xB3, 0xC8, 0xAD, 0xE4, 0x96, 0x8E, 0x10, 0xFE, 0x71, 0xCF, 0xFB, 0xE1, 0xCB, 0x54, 0x3B, 0x01, 0x33, 0x80, 0x25, 0x10, 0x2B, 0x06, 0xE5, 0xC0, 0x24, 0xDB, 0x82, 0x0C, 0x30, 0xE2, 0xF0, 0xBB, 0x08, 0x40, 0xED, 0x16, 0x5F, 0x88, 0xE7, 0x59, 0x2B, 0x1C, 0xB4, 0x19, 0x18, 0x0A, 0x36, 0x7F, 0xDD, 0x8E, 0xE8, 0x31, 0x1C, 0x9F, 0xE6, 0x78, 0xFC, 0xD3, 0x7F, 0x06, 0x31, 0x3D, 0xB7, 0xC8, 0xFE, 0x57, 0x3A, 0xC7, 0xFA, 0x96, 0xD2, 0x9C, 0x43, 0xD4, 0xE2, 0x9E, 0xC4, 0x4B, 0x9A, 0x32, 0xE7, 0x55, 0xEF, 0x78, 0x74, 0x13, 0xE6, 0x39, 0xA5, 0x1E, 0x85, 0xB8, 0xB8, 0x35, 0xFA, 0x66, 0x87, 0xEE, 0xF8, 0x4A, 0x7B, 0x02, 0x79, 0xF8, 0xC7, 0x60, 0x93, 0x91, 0x02, 0xF9, 0x79, 0x43, 0x55, 0x00, 0x57, 0x60, 0x67, 0x13, 0x73, 0xE5, 0x9C, 0x0D, 0x38, 0x71, 0xBF, 0xA1, 0x16, 0xC0, 0x49, 0x40, 0xF3, 0xFB, 0x86, 0x36, 0x1E, 0x78, 0xBB, 0xB7, 0x22, 0x55, 0xDC, 0x6B, 0x53, 0xB3, 0x9C, 0xAA, 0x0D, 0xC9, 0x12, 0x25, 0x4A, 0x05, 0xF1, 0x5D, 0x52, 0x43, 0xC3, 0xEC, 0x03, 0x24, 0x4F, 0x94, 0x98, 0x40, 0x0C, 0xD0, 0xCD, 0x13, 0xCC, 0xDF, 0x4E, 0x3D, 0xD8, 0x17, 0x89, 0x59, 0xCE, 0x8D, 0x89, 0x6E, 0xED, 0xF7, 0x5E, 0xB3, 0x76, 0x18, 0x41, 0x3A, 0x9B, 0xA2, 0x4A, 0x18, 0x5D, 0x6E, 0x37, 0x5E, 0x6E, 0x25, 0x8E, 0xD5, 0xB6, 0x02, 0xB6, 0xEC, 0x11, 0x09, 0x78, 0x10, 0x02, 0x44, 0xF3, 0x29, 0x3E, 0xC0, 0x6C, 0x05, 0xCF, 0x01, 0x7D, 0x9A, 0x19, 0x80, 0x18, 0xC0, 0x04, 0x08, 0xFE, 0x24, 0x1F, 0xA3, 0x0D, 0x97, 0x4D, 0xBF, 0x6D, 0xCB, 0x82, 0xCD, 0x78, 0x3B, 0xFA, 0xEF, 0x81, 0xEF, 0x02, 0x79, 0x5D, 0x94, 0xE0, 0x70, 0x81, 0xC6, 0x7C, 0x8C, 0xE6, 0xB2, 0x22, 0x42, 0x9F, 0xCD, 0x78, 0xE9, 0x77, 0x46, 0x36, 0x02, 0x18, 0xDF, 0xF0, 0xE7, 0x8D, 0xB7, 0x19, 0x53, 0x1B, 0x1F, 0x9C, 0x60, 0x0E, 0x36, 0x85, 0x58, 0x95, 0xAF, 0x9D, 0xAB, 0xE3, 0xD9, 0x1C, 0x6C, 0x58, 0x86, 0x79, 0x01, 0x59, 0x99, 0xB5, 0x06, 0x42, 0x01, 0x6D, 0xC0, 0x94, 0x70, 0x20, 0x82, 0x2D, 0x6B, 0x0E, 0x94, 0x30, 0xBB, 0x11, 0x84, 0xAD, 0x94, 0x16, 0x90, 0x0D, 0x44, 0x02, 0x55, 0xEB, 0x08, 0xD1, 0x68, 0x7C, 0x0C, 0xEC, 0x71, 0x69, 0xF1, 0x5D, 0x4B, 0xEC, 0x27, 0x6E, 0x74, 0x34, 0x34, 0x95, 0xE7, 0x4E, 0x18, 0xC6, 0x2F, 0xB4, 0xF9, 0xE8, 0x1B, 0x56, 0xBC, 0x41, 0xA2, 0xD4, 0xA3, 0x06, 0xD5, 0xBC, 0xCF, 0x94, 0xC8, 0xE1, 0xDB, 0x72, 0x49, 0x3F, 0xF4, 0x0E, 0x28, 0x6E, 0x93, 0x01, 0x07, 0x22, 0x76, 0xBA, 0x1C, 0x97, 0x23, 0xB4, 0x0D, 0x36, 0x8E, 0xA4, 0x94, 0x5A, 0x30, 0x61, 0x28, 0x5C, 0x35, 0xA3, 0xDB, 0xE7, 0xDE, 0x40, 0x0E, 0xE0, 0x0A, 0x98, 0xEC, 0x27, 0x62, 0x80, 0x6A, 0xFC, 0xDF, 0x99, 0x31, 0x36, 0x20, 0x5C, 0x08, 0x07, 0xEC, 0x00, 0xE2, 0x84, 0x02, 0xCE, 0xA2, 0x94, 0xFA, 0xDA, 0x4C, 0x30, 0xB8, 0xAE, 0x49, 0x81, 0xFB, 0xAF, 0xB0, 0xD5, 0xAE, 0xA8, 0x51, 0x4E, 0x7C, 0x16, 0x34, 0xC2, 0xEA, 0xBC, 0x83, 0x78, 0xE5, 0xDF, 0x48, 0x6A, 0x3E, 0xED, 0xCA, 0x09, 0xC8, 0xE7, 0x2C, 0x8B, 0x7C, 0x1B, 0xB3, 0x72, 0x6D, 0xCE, 0x7F, 0x84, 0xF2, 0x75, 0x36, 0xFB, 0x13, 0x50, 0x62, 0x87, 0x66, 0x5E, 0x53, 0xBE, 0xB8, 0x1D, 0x60, 0xE5, 0x15, 0xAC, 0x5D, 0xC7, 0xBF, 0xF8, 0x93, 0x7E, 0x7B, 0xB6, 0x19, 0x11, 0x39, 0xD3, 0x8D, 0xEF, 0xF4, 0x58, 0x0D, 0x33, 0x6D, 0xEC, 0x51, 0x70, 0x62, 0x88, 0x4E, 0x20, 0x15, 0x50, 0x7B, 0x3B, 0x6E, 0xEB, 0xE9, 0x51, 0x30, 0x59, 0xA3, 0x29, 0x0A, 0x88, 0xAA, 0x68, 0x39, 0xAC, 0x46, 0xB0, 0x8F, 0x87, 0xA9, 0xC5, 0xD7, 0x2B, 0x32, 0x2E, 0x6F, 0x2E, 0x64, 0xC1, 0x72, 0xD6, 0x4A, 0xF7, 0x2A, 0x87, 0x4D, 0xC7, 0x0A, 0x2D, 0x92, 0x40, 0x37, 0x30, 0x43, 0x34, 0x33, 0xDB, 0x44, 0x9C, 0xCD, 0x58, 0x5C, 0x45, 0x82, 0x15, 0x65, 0x9A, 0x47, 0x24, 0x38, 0x6C, 0xB5, 0x92, 0x58, 0xC3, 0xDB, 0xB1, 0xB1, 0x9D, 0x4A, 0x5F, 0xA7, 0x2C, 0x56, 0x24, 0x78, 0x37, 0x65, 0xD3, 0x4D, 0xE5, 0x1D, 0xAC, 0x14, 0x94, 0x89, 0x55, 0x0D, 0x4A, 0x20, 0x7A, 0xAF, 0x62, 0x98, 0x57, 0x14, 0x48, 0x01, 0x22, 0x81, 0x1D, 0xA1, 0x19, 0x22, 0x1D, 0x78, 0xF6, 0xA0, 0x6D, 0xD0, 0x0E, 0xFF, 0x4B, 0xC5, 0x15, 0x29, 0x56, 0x11, 0xAC, 0xF4, 0x52, 0x6C, 0x30, 0xD3, 0x76, 0x74, 0xA0, 0xB2, 0xC5, 0x4D, 0x38, 0x41, 0x35, 0x96, 0xFF, 0x6D, 0x1D, 0xD2, 0xB5, 0xCB, 0xA7, 0xFC, 0x39, 0x6C, 0xB3, 0x68, 0x62, 0xE6, 0xD6, 0x83, 0x2E, 0x79, 0xD5, 0xE0, 0x1E, 0x0F, 0xE0, 0x59, 0x83, 0x5E, 0x4C, 0x53, 0x07, 0x63, 0x6E, 0xA5, 0x92, 0xE6, 0x24, 0x70, 0x12, 0xDF, 0x99, 0x02, 0xC1, 0xEF, 0xBC, 0x58, 0x71, 0x92, 0x2D, 0x12, 0x01, 0xB3, 0x5B, 0x7A, 0x06, 0xA8, 0x60, 0xCA, 0xF1, 0x00, 0xA9, 0xD4, 0xD9, 0x08, 0xC0, 0x89, 0xD0, 0x0F, 0x1C, 0xC8, 0x04, 0x3A, 0x90, 0x72, 0xF4, 0x5C, 0x9B, 0x39, 0x3C, 0xC1, 0x0C, 0x44, 0xD7, 0xE1, 0xD0, 0x44, 0x71, 0xC7, 0x66, 0x2C, 0x19, 0x6E, 0x86, 0x31, 0xF4, 0x97, 0x6B, 0x72, 0xDA, 0x35, 0xAE, 0x32, 0xFB, 0x21, 0xED, 0x9A, 0x14, 0xC0, 0xD3, 0xFE, 0xE4, 0x5B, 0xF9, 0x7F, 0x01, 0xA8, 0x00, 0x3E, 0xEF, 0xCA, 0x13, 0x65, 0x22, 0x71, 0x3D, 0x75, 0x1A, 0xCD, 0xCF, 0xA3, 0x0A, 0xAA, 0x46, 0xAC, 0x7E, 0x28, 0x87, 0xC9, 0x92, 0x53, 0xAF, 0xFB, 0x02, 0x3F, 0xCF, 0x86, 0x33, 0x3E, 0x8D, 0x77, 0x54, 0x33, 0x9F, 0x57, 0xEF, 0x34, 0x60, 0x44, 0xE9, 0xCA, 0x88, 0x72, 0x73, 0xA7, 0x00, 0xBE, 0x38, 0x80, 0xEA, 0xA7, 0x91, 0xA8, 0xEF, 0xC5, 0xF7, 0xA3, 0x6B, 0xB4, 0x40, 0x33, 0x6C, 0x2B, 0xB7, 0xB0, 0x14, 0x9B, 0x60, 0x30, 0xC1, 0xA3, 0x86, 0xC5, 0xD9, 0x95, 0xCE, 0xBB, 0xD3, 0x79, 0xC6, 0x27, 0x0F, 0xFE, 0x7B, 0xBD, 0xB8, 0x7F, 0xEA, 0xEC, 0xBB, 0xCD, 0x44, 0x77, 0x4C, 0xB1, 0x3F, 0x8A, 0xE3, 0x44, 0xCA, 0x1B, 0x4E, 0x3F, 0x89, 0x86, 0x47, 0x23, 0x74, 0x78, 0x4B, 0x4A, 0x01, 0x4F, 0x13, 0x76, 0xF2, 0x46, 0x0B, 0x26, 0x7E, 0x00, 0xDE, 0xB5, 0xF2, 0xEC, 0xC6, 0xDE, 0xB6, 0xD0, 0x91, 0x7F, 0xEC, 0xBF, 0x73, 0x05, 0xF0, 0xC0, 0xE8, 0x33, 0x42, 0xA5, 0x09, 0x64, 0xDD, 0x08, 0x05, 0x2C, 0x01, 0x2D, 0x60, 0x1F, 0x57, 0x8B, 0xB5, 0xD9, 0x93, 0x14, 0x22, 0x98, 0x87, 0xF1, 0xE6, 0x27, 0xEE, 0x8E, 0x3E, 0x83, 0xDE, 0x9B, 0x53, 0xB8, 0x10, 0x99, 0x46, 0xB4, 0xD5, 0xB7, 0x05, 0xE6, 0x4D, 0x74, 0xA3, 0x24, 0x9E, 0xCC, 0x59, 0xAC, 0x34, 0xCA, 0x00, 0x61, 0x77, 0xD4, 0xB7, 0xE1, 0x5E, 0xD6, 0xEE, 0x2C, 0xE5, 0x53, 0x30, 0xBC, 0xF4, 0x1C, 0x19, 0x43, 0x4B, 0xEE, 0xE4, 0xDC, 0x41, 0xBA, 0x06, 0x52, 0x3F, 0x3D, 0x8D, 0xCC, 0x11, 0x76, 0x32, 0x29, 0xDD, 0x40, 0x0E, 0x30, 0xC2, 0x41, 0x3A, 0x25, 0x02, 0xB0, 0x01, 0x4A, 0x80, 0x89, 0x7F, 0xA1, 0x6E, 0x19, 0x13, 0x17, 0xA2, 0x80, 0xAC, 0xB5, 0x59, 0x7D, 0x6D, 0x86, 0xD7, 0xB1, 0xF4, 0xB2, 0x99, 0xDB, 0x60, 0xBD, 0x28, 0x75, 0xAF, 0xA6, 0xFC, 0x67, 0xB3, 0xA4, 0xCD, 0x0A, 0x16, 0x7C, 0xD6, 0x75, 0xE2, 0xD3, 0x9F, 0x6E, 0xB8, 0xCC, 0x8A, 0xA1, 0x01, 0x91, 0x40, 0xF9, 0x86, 0xE4, 0xEC, 0x70, 0xDC, 0xD1, 0xB2, 0x5D, 0xA2, 0xCF, 0x86, 0x13, 0x74, 0x44, 0x31, 0x21, 0xDF, 0x8C, 0xBE, 0x1B, 0x91, 0xFD, 0x0F, 0x3B, 0x37, 0xB6, 0xF6, 0x8C, 0xB3, 0x6B, 0x01, 0xEF, 0x55, 0xA7, 0x56, 0x40, 0x33, 0x5F, 0x2D, 0x03, 0xB8, 0x00, 0x2D, 0xB0, 0xA7, 0x1D, 0x20, 0x0B, 0x68, 0x03, 0xA6, 0x68, 0x5D, 0x01, 0xAC, 0x81, 0xBA, 0xEC, 0xC9, 0x46, 0x1C, 0xD8, 0xAC, 0x91, 0xCB, 0x3E, 0x82, 0xE8, 0x77, 0xE2, 0x2A, 0xE2, 0x99, 0x18, 0x22, 0xCE, 0x61, 0x40, 0x73, 0xEA, 0x77, 0x2B, 0x76, 0x5D, 0x39, 0x8E, 0xF6, 0x4F, 0xE5, 0x33, 0xF4, 0x23, 0xA3, 0x39, 0x80, 0x0A, 0xF1, 0xD9, 0xF1, 0x33, 0xC1, 0x3A, 0xDD, 0x79, 0x97, 0xD7, 0xC8, 0x6A, 0x6F, 0xA1, 0x6F, 0x19, 0x39, 0xC1, 0x24, 0xE2, 0x95, 0x46, 0x33, 0xDE, 0x17, 0x08, 0xA9, 0x81, 0x95, 0xDA, 0x66, 0x40, 0xBF, 0xFB, 0xBA, 0xC6, 0x56, 0x67, 0x82, 0xF1, 0x82, 0xDD, 0x3D, 0x8D, 0x99, 0x3C, 0xB4, 0x04, 0x98, 0x55, 0x8F, 0x76, 0x42, 0x80, 0xF3, 0x28, 0x3F, 0x01, 0x99, 0x40, 0x19, 0xBE, 0xF3, 0x59, 0xA3, 0x0D, 0xDC, 0xCD, 0x13, 0x30, 0x4C, 0x7C, 0x7B, 0x21, 0x39, 0x04, 0xD1, 0x43, 0x7D, 0xF1, 0x42, 0xD7, 0xA2, 0x38, 0xDA, 0xF9, 0xFE, 0x69, 0xB4, 0xEF, 0x48, 0xD9, 0xA2, 0x08, 0x07, 0xB4, 0x80, 0xD4, 0x77, 0xC5, 0x5B, 0xEF, 0xAB, 0xFE, 0x27, 0x6D, 0x23, 0xCD, 0x40, 0x73, 0x75, 0xC4, 0x98, 0xD4, 0xE8, 0x59, 0xF5, 0x11, 0xD6, 0xD3, 0x0B, 0xE8, 0xF3, 0x4E, 0x6B, 0xE8, 0x7A, 0x73, 0xB4, 0x96, 0x3C, 0xC3, 0xC7, 0xC5, 0x08, 0xAA, 0x76, 0xD0, 0xFF, 0x87, 0x7C, 0xAE, 0x86, 0x13, 0x40, 0x0A, 0x10, 0x73, 0x4B, 0x59, 0x4F, 0x03, 0x75, 0x80, 0xBD, 0x13, 0x0E, 0x4E, 0x34, 0x96, 0x1A, 0x77, 0xF6, 0xA7, 0x30, 0x73, 0xD7, 0x02, 0x83, 0xD2, 0x68, 0x98, 0x9F, 0xD7, 0xA4, 0x82, 0xA9, 0x62, 0x29, 0xAE, 0xE4, 0xD6, 0xEC, 0xEE, 0x31, 0x1F, 0x3C, 0x1C, 0xEF, 0x9A, 0x3B, 0x98, 0xC2, 0x89, 0xF0, 0xFD, 0x44, 0x34, 0x10, 0x2B, 0xAA, 0xF9, 0x0C, 0x1E, 0xE4, 0xF6, 0xBB, 0xBF, 0x91, 0xC2, 0xEC, 0xA8, 0xD3, 0x33, 0xC6, 0x32, 0x01, 0xC8, 0x5E, 0xB2, 0x44, 0x3D, 0xFF, 0xB3, 0xF2, 0x1C, 0x58, 0xFB, 0xF0, 0x8A, 0x08, 0xE5, 0x1C, 0x81, 0xBD, 0xA5, 0x76, 0x1E, 0xAF, 0x98, 0x72, 0xBF, 0x07, 0x08, 0xFA, 0x10, 0x09, 0xE4, 0x00, 0x5E, 0x80, 0x39, 0x80, 0x31, 0xE7, 0x01, 0x60, 0x34, 0xE1, 0x26, 0x85, 0x5C, 0xA9, 0x97, 0x77, 0x07, 0xD2, 0xD1, 0x76, 0xEE, 0xD2, 0x57, 0x2A, 0x80, 0x61, 0x31, 0xCD, 0xF0, 0xF5, 0xCC, 0xAF, 0xB8, 0xA1, 0xED, 0xEB, 0xF9, 0x49, 0x76, 0x1F, 0xC2, 0x80, 0x33, 0x80, 0xC6, 0x1D, 0x14, 0x6C, 0xBB, 0xA4, 0x3D, 0xF3, 0x19, 0xCE, 0xD0, 0xAB, 0x61, 0x9F, 0xD8, 0x64, 0xC4, 0x00, 0xD2, 0xBC, 0x65, 0xB7, 0xAF, 0x4F, 0x37, 0x3B, 0x0E, 0xBB, 0xDA, 0x66, 0x55, 0xE3, 0xF5, 0x53, 0xE9, 0x6C, 0xF9, 0x3C, 0xB3, 0x02, 0xE1, 0x8C, 0x45, 0x03, 0x58, 0xD9, 0xEB, 0x47, 0xEE, 0xE4, 0xC6, 0xDB, 0x2C, 0x0E, 0x64, 0x00, 0xB5, 0x7B, 0x86, 0xCE, 0x1A, 0x8D, 0xD1, 0x80, 0x38, 0xFA, 0xFA, 0xFC, 0x3E, 0xD3, 0x8E, 0x27, 0xDB, 0xED, 0x8A, 0xCA, 0x3D, 0x89, 0x7C, 0xFF, 0x9C, 0x6B, 0x78, 0xB1, 0xE5, 0xFB, 0x7E, 0xC6, 0x67, 0x2F, 0x4D, 0x12, 0xF1, 0x59, 0x23, 0x45, 0x3C, 0x1B, 0xA2, 0x59, 0x29, 0xC8, 0x78, 0x94, 0x63, 0x98, 0x3C, 0xDC, 0x94, 0x3D, 0x13, 0x84, 0x8F, 0x48, 0xCC, 0xFA, 0xC9, 0xB5, 0x1B, 0xDA, 0x80, 0xD8, 0xC4, 0x62, 0xF0, 0x02, 0x62, 0xF9, 0xA0, 0x77, 0xBF, 0xC7, 0x4E, 0x29, 0x6D, 0x0D, 0x45, 0x81, 0xC8, 0x95, 0x6D, 0x03, 0x26, 0x76, 0xF5, 0x12, 0x21, 0xC0, 0xD9, 0x49, 0x3D, 0xC2, 0x13, 0x08, 0xDF, 0xB4, 0xDB, 0x5A, 0xCD, 0xAE, 0x99, 0xD8, 0x28, 0x85, 0x90, 0xB8, 0x1A, 0xCE, 0x26, 0x1B, 0x24, 0x15, 0xBA, 0x50, 0x23, 0xDA, 0xD5, 0xE2, 0x28, 0xB1, 0x4F, 0xD1, 0x58, 0x84, 0xEF, 0x1E, 0xF6, 0xDE, 0x84, 0xFF, 0xAE, 0xD1, 0x6D, 0xA0, 0x0B, 0x28, 0xBB, 0xD1, 0x1C, 0x66, 0x5F, 0x67, 0x6D, 0x65, 0x10, 0x57, 0x84, 0x64, 0x64, 0x35, 0xED, 0x77, 0x9B, 0x3C, 0xA0, 0x06, 0xF8, 0x00, 0xCD, 0x23, 0x1C, 0x8E, 0x9C, 0xB3, 0xA6, 0x2E, 0xEB, 0xB0, 0x00, 0x95, 0x14, 0x93, 0xA0, 0xAC, 0x46, 0xD3, 0x15, 0x6E, 0x25, 0x7E, 0x59, 0x1A, 0x20, 0x15, 0xE8, 0x03, 0x4C, 0xC2, 0xD1, 0x11, 0x03, 0xAC, 0x80, 0x52, 0xA0, 0x77, 0x94, 0xE3, 0x79, 0xD2, 0x9C, 0xB9, 0x1E, 0x81, 0xCD, 0x66, 0x30, 0x8F, 0x60, 0xC3, 0x9A, 0x09, 0x0F, 0x43, 0x39, 0x02, 0x38, 0xE2, 0x01, 0x8E, 0x12, 0x44, 0xDF, 0xCA, 0xFA, 0x76, 0x3D, 0x5A, 0xFD, 0xAA, 0x34, 0x19, 0x30, 0xCD, 0x7C, 0xF6, 0x01, 0x94, 0x88, 0xAB, 0x41, 0x37, 0xF1, 0xE9, 0x09, 0xA5, 0xE6, 0x49, 0x90, 0x65, 0x03, 0xB3, 0x4A, 0x13, 0x71, 0x4B, 0x4C, 0x1C, 0x42, 0xF8, 0x5D, 0x36, 0x4C, 0xB8, 0xCD, 0x69, 0xC2, 0xE1, 0xAF, 0xF5, 0x62, 0x8F, 0x02, 0x53, 0xAF, 0x56, 0x87, 0x3F, 0x8D, 0x1A, 0x2A, 0x40, 0x3A, 0x51, 0x40, 0x18, 0x60, 0x7A, 0xFF, 0xC4, 0x19, 0x51, 0x59, 0xAE, 0xD1, 0xE2, 0xDA, 0x82, 0xAA, 0xE6, 0x68, 0x8A, 0xAC, 0x44, 0x03, 0x4B, 0x17, 0xF4, 0x1C, 0x46, 0x7F, 0x68, 0x19, 0xB4, 0xDB, 0x69, 0x72, 0xB0, 0xE7, 0x8E, 0xA1, 0x9E, 0xEA, 0xDC, 0x56, 0x49, 0x7A, 0xB6, 0x3B, 0x19, 0x28, 0x25, 0x04, 0xC0, 0x77, 0xF9, 0x0C, 0x0D, 0xED, 0xAB, 0x67, 0xC2, 0x68, 0xDB, 0x19, 0x04, 0xD9, 0x4A, 0xD1, 0xAE, 0xCE, 0x23, 0x10, 0x44, 0x0A, 0xD0, 0x0A, 0xFB, 0x4C, 0xD3, 0xF5, 0x6F, 0xC6, 0x98, 0x3F, 0x30, 0x99, 0x59, 0x42, 0x20, 0xB0, 0x42, 0xCD, 0xF7, 0x00, 0x49, 0xCC, 0x4A, 0x07, 0x24, 0x31, 0x80, 0x05, 0xE0, 0x0A, 0x04, 0x51, 0x49, 0x0C, 0x30, 0xB2, 0x46, 0x63, 0x3C, 0x40, 0x41, 0xDA, 0x89, 0x46, 0x7A, 0x4E, 0xED, 0x5A, 0xEC, 0xE3, 0xBB, 0x29, 0x39, 0x03, 0x65, 0xC0, 0x1F, 0xB6, 0x8D, 0xFD, 0x41, 0xE9, 0x9B, 0xF4, 0x7F, 0x04, 0xF3, 0xFC, 0x51, 0x2D, 0x4F, 0x01, 0x22, 0x89, 0xBE, 0xF7, 0xC7, 0x24, 0xB5, 0xC8, 0x73, 0xB7, 0x12, 0xAC, 0x8B, 0x4B, 0x13, 0x6C, 0x2F, 0xCF, 0xCC, 0xB6, 0xB3, 0x00, 0x79, 0x80, 0xA1, 0x72, 0x84, 0x25, 0xCD, 0x93, 0xAB, 0x2B, 0xFA, 0xCA, 0x26, 0xF0, 0x27, 0x8D, 0x4E, 0x24, 0xF4, 0x1A, 0xE8, 0x3D, 0x14, 0x15, 0xF9, 0x91, 0x43, 0x4C, 0xC0, 0x0E, 0x51, 0x40, 0xEA, 0xC7, 0xE1, 0x0D, 0xC0, 0x73, 0x6D, 0x56, 0x28, 0xD5, 0x86, 0x70, 0xCA, 0xE8, 0xBA, 0x07, 0x46, 0x6A, 0xD0, 0x6A, 0x75, 0x94, 0x2A, 0x6D, 0x0D, 0xE1, 0x5A, 0xAD, 0x77, 0x90, 0xA0, 0xBE, 0xD3, 0xD8, 0x36, 0x9F, 0x69, 0x6C, 0x25, 0x04, 0xA8, 0x03, 0xB4, 0xAE, 0xFE, 0x2D, 0x90, 0xF1, 0xBA, 0x28, 0x4F, 0x7F, 0x50, 0x3F, 0xCB, 0xFA, 0xCC, 0xB7, 0x78, 0x04, 0x28, 0x71, 0x76, 0x47, 0x20, 0x3F, 0xED, 0x3E, 0x9F, 0xDD, 0x7A, 0xE7, 0x7C, 0xB9, 0xA5, 0x5E, 0xC5, 0x98, 0x7E, 0xE6, 0x8B, 0x85, 0x19, 0xDC, 0x53, 0x40, 0xEF, 0x34, 0xAD, 0xF1, 0xBA, 0x4C, 0x40, 0xEC, 0xD3, 0x9F, 0x96, 0x84, 0xF2, 0x3B, 0x01, 0xDA, 0xD6, 0x68, 0x0D, 0xC9, 0xE3, 0x0E, 0x0C, 0x71, 0xF9, 0xFC, 0x82, 0x85, 0xF1, 0xBB, 0x53, 0x5E, 0x06, 0xF9, 0xC7, 0x1A, 0xF9, 0xD5, 0xEF, 0x22, 0xE3, 0xD5, 0xA0, 0x6E, 0xF9, 0x78, 0x1C, 0x95, 0xB7, 0x68, 0xFE, 0x49, 0x40, 0xF6, 0x53, 0x00, 0x6A, 0x00, 0xDB, 0x6E, 0x69, 0xE5, 0xC1, 0x27, 0x5C, 0x0E, 0x49, 0x1F, 0x6C, 0x27, 0x02, 0x07, 0x58, 0x71, 0xEE, 0x18, 0x60, 0x23, 0xD6, 0x5E, 0x4F, 0x4E, 0x76, 0xAD, 0x1F, 0xCF, 0x39, 0x7A, 0x07, 0xAD, 0x6F, 0x43, 0xDA, 0x1E, 0x4D, 0xAC, 0xF7, 0x6D, 0x03, 0x69, 0x32, 0x7E, 0x2D, 0xBA, 0x21, 0x85, 0x33, 0x06, 0x58, 0xE1, 0x92, 0x02, 0x3A, 0x89, 0xF3, 0x51, 0x33, 0xE9, 0x35, 0xDA, 0x5C, 0x21, 0xA7, 0xCA, 0xAC, 0xAE, 0x3E, 0x45, 0x70, 0x9A, 0x63, 0x45, 0x89, 0x91, 0xF9, 0xE0, 0x00, 0x8A, 0xA3, 0xA4, 0x62, 0x9F, 0x5E, 0xE5, 0xED, 0x08, 0x2A, 0x7F, 0xFD, 0x07, 0xE4, 0x57, 0x00, 0x03, 0xF6, 0x8E, 0x98, 0x8F, 0xE6, 0x7E, 0xF8, 0xFA, 0xB6, 0xAB, 0xFA, 0xB8, 0xCE, 0x57, 0xD3, 0xF9, 0x3A, 0x80, 0x34, 0x61, 0x80, 0x2B, 0x50, 0xAF, 0x6E, 0xCA, 0xC6, 0x79, 0xFE, 0x27, 0xC5, 0x27, 0xBB, 0xE7, 0xE3, 0xC0, 0x4C, 0x87, 0xFF, 0x6A, 0xEF, 0x7B, 0xB8, 0xBA, 0x6C, 0x67, 0xF3, 0x80, 0x18, 0xA0, 0x1A, 0x98, 0x66, 0x93, 0x72, 0x00, 0xD1, 0x40, 0x9D, 0x5B, 0xB0, 0x75, 0x45, 0x30, 0x22, 0x0B, 0xA7, 0xEC, 0xA9, 0xFF, 0xF6, 0x24, 0x4C, 0x24, 0xFE, 0x29, 0x12, 0x70, 0x58, 0x4B, 0x5E, 0xE1, 0xEE, 0xB9, 0x96, 0xB1, 0xBF, 0x2D, 0x40, 0xFD, 0x51, 0x9B, 0x96, 0xF3, 0xF1, 0xD2, 0x02, 0x90, 0x06, 0x6A, 0x67, 0xF3, 0x7C, 0xEF, 0x8F, 0xDE, 0x26, 0x77, 0x4E, 0xC5, 0xF2, 0x65, 0x5D, 0x85, 0x1D, 0x77, 0x40, 0x13, 0x38, 0x07, 0xA8, 0xA1, 0x23, 0xB7, 0x7B, 0x19, 0x7A, 0x65, 0xE5, 0x76, 0x1D, 0x11, 0x47, 0xF5, 0x39, 0xA1, 0x93, 0x42, 0xA7, 0x3F, 0x78, 0xB1, 0xEE, 0x58, 0x4B, 0x33, 0x67, 0x64, 0x40, 0x1C, 0xC0, 0x12, 0xD0, 0x03, 0x9C, 0x01, 0x2C, 0x76, 0x35, 0xCB, 0x1A, 0x4D, 0xAE, 0x28, 0xD3, 0x6A, 0x1B, 0x72, 0xEF, 0x29, 0x33, 0x91, 0x41, 0xF6, 0x5C, 0x0B, 0xFA, 0xA0, 0x86, 0x99, 0x15, 0xFB, 0xCC, 0xAC, 0xD4, 0xFB, 0x22, 0x8A, 0x3C, 0x5D, 0x8A, 0x6D, 0xEC, 0x5C, 0x17, 0x7C, 0xAA, 0x01, 0x32, 0x80, 0x18, 0x7E, 0x97, 0x6F, 0x9C, 0xCE, 0x0A, 0x19, 0xBA, 0x25, 0xEE, 0x19, 0x59, 0x3B, 0x80, 0x0A, 0xE0, 0x03, 0xD4, 0x6E, 0x97, 0xDD, 0xDA, 0x1D, 0x6F, 0xD2, 0xDE, 0xBB, 0x33, 0x29, 0x25, 0x1D, 0x74, 0xB3, 0xD8, 0x00, 0x19, 0xBC, 0x15, 0x8E, 0x00, 0xC3, 0x81, 0xB2, 0x08, 0xA0, 0x88, 0x1E, 0xB6, 0x43, 0x2A, 0xA0, 0x06, 0xE4, 0x21, 0x02, 0x68, 0x5B, 0x9B, 0xE9, 0x3D, 0x77, 0x7D, 0xEA, 0xE7, 0x07, 0x4A, 0x26, 0x04, 0x14, 0x42, 0xE1, 0x03, 0x45, 0xA3, 0x52, 0xA1, 0x88, 0x77, 0x1C, 0x91, 0xA7, 0x7F, 0x9D, 0x34, 0x7B, 0xDB, 0xC9, 0xEA, 0x19, 0x52, 0xA9, 0x03, 0xB4, 0x7C, 0x3E, 0x11, 0xDB, 0xF1, 0x58, 0x73, 0xF5, 0xBE, 0x20, 0xD7, 0xC0, 0xFD, 0x6A, 0xEF, 0x52, 0x3B, 0xBC, 0xAA, 0xF7, 0x0A, 0xA0, 0x02, 0xCA, 0xB6, 0x43, 0xF3, 0x1D, 0x2F, 0x9E, 0xA7, 0xC5, 0x36, 0xA8, 0x32, 0xAD, 0xB4, 0xA0, 0xF1, 0xE5, 0x3C, 0xB5, 0xA7, 0x16, 0xD0, 0x5B, 0x55, 0x0A, 0xC0, 0x1D, 0xC8, 0x03, 0x94, 0x01, 0x43, 0x77, 0x45, 0x3F, 0x0D, 0x6B, 0x79, 0xD6, 0x66, 0xC6, 0x1E, 0xD7, 0x40, 0x17, 0xAE, 0xD5, 0x1B, 0x78, 0xA6, 0x6A, 0x51, 0x68, 0x70, 0xD6, 0xEB, 0x65, 0x8B, 0xB6, 0xFE, 0x77, 0x46, 0xF6, 0xC4, 0xBD, 0xA4, 0xD2, 0x07, 0xA8, 0x00, 0xB2, 0xFF, 0x4F, 0xB5, 0xD6, 0x9D, 0xFA, 0x79, 0x4C, 0xA8, 0x0D, 0xB4, 0xB0, 0xB5, 0xAD, 0x01, 0x1B, 0xC0, 0x9B, 0x18, 0xFC, 0xE4, 0x9D, 0xB4, 0xDA, 0x0D, 0xAA, 0x38, 0x7A, 0xB7, 0x57, 0x6B, 0x9B, 0xBA, 0xFD, 0x15, 0xBC, 0x52, 0xFC, 0xE4, 0x09, 0xE1, 0xD1, 0x38, 0x41, 0x19, 0x05, 0x20, 0x8C, 0x50, 0xC0, 0x0F, 0x61, 0x40, 0x9E, 0x55, 0x5A, 0x58, 0xA3, 0xF9, 0xAF, 0x16, 0xA2, 0x6D, 0x08, 0xE1, 0x9B, 0xA1, 0x82, 0xAD, 0x93, 0xC6, 0x40, 0xCC, 0x04, 0xE9, 0xD6, 0xE9, 0x5F, 0x32, 0xBB, 0xAA, 0x2E, 0x7D, 0x09, 0xFF, 0x5C, 0x03, 0xEA, 0x9B, 0x22, 0x03, 0x66, 0x08, 0x01, 0x62, 0x00, 0x77, 0x40, 0x1B, 0xD8, 0xF4, 0xC7, 0x33, 0x26, 0x2A, 0xB4, 0x41, 0x28, 0xCF, 0xB0, 0x55, 0x72, 0x4D, 0xE0, 0x34, 0xA0, 0x01, 0x58, 0xFC, 0xFD, 0x44, 0xB7, 0x7B, 0x83, 0xDE, 0xAB, 0xEF, 0xE1, 0x85, 0x2B, 0x06, 0x97, 0xA6, 0x6E, 0xDD, 0x9B, 0x0F, 0xCE, 0x75, 0xAA, 0xA3, 0xA1, 0x1E, 0xB5, 0x54, 0x22, 0x85, 0x48, 0xA0, 0x0C, 0x68, 0x56, 0x5D, 0x4F, 0x02, 0x35, 0x6B, 0xB4, 0xB8, 0x26, 0x17, 0x6D, 0x0A, 0x13, 0xF3, 0x9D, 0x97, 0x7A, 0x9A, 0x99, 0xB0, 0x1F, 0x05, 0xFB, 0xCB, 0x26, 0x7F, 0x4F, 0x5A, 0xCA, 0xF6, 0x6E, 0xDC, 0xB3, 0x51, 0xBD, 0x53, 0x3B, 0x2B, 0xDA, 0x7B, 0x00, 0x0F, 0x40, 0xFA, 0x73, 0x83, 0xF2, 0x93, 0xAF, 0x6E, 0xE4, 0xFC, 0xB0, 0x0B, 0x3A, 0xFD, 0x51, 0x99, 0x30, 0xBF, 0xD5, 0x7A, 0xF3, 0x91, 0xD7, 0x04, 0x76, 0x36, 0xB6, 0x36, 0x39, 0xB9, 0x55, 0xCC, 0x78, 0x54, 0xF8, 0x9F, 0x9E, 0xCF, 0xE6, 0xCB, 0xD6, 0x8C, 0x73, 0x9B, 0x39, 0xA6, 0xC1, 0x0D, 0x81, 0xC3, 0xCB, 0x00, 0xEB, 0xCF, 0xA9, 0x15, 0x74, 0x77, 0x89, 0x30, 0x20, 0x1B, 0x18, 0x5D, 0x9B, 0xAD, 0x79, 0x56, 0xC7, 0x7E, 0x2E, 0xA1, 0xA1, 0x7C, 0x94, 0x68, 0x58, 0x12, 0x4F, 0xC3, 0x66, 0x86, 0xF1, 0x77, 0x36, 0xAA, 0xBE, 0xCB, 0x8F, 0xFC, 0xDC, 0x6F, 0x60, 0x39, 0x90, 0x09, 0xC4, 0xA2, 0x80, 0x9C, 0xB7, 0x80, 0x9C, 0x4F, 0xCF, 0x07, 0x3D, 0xDB, 0x78, 0xD4, 0xBB, 0x7B, 0x00, 0x2D, 0x40, 0x0E, 0xE0, 0xF9, 0x4E, 0x3E, 0xF6, 0x36, 0x31, 0x6E, 0x71, 0x79, 0x93, 0x85, 0xB0, 0x6B, 0x24, 0xA3, 0x49, 0x06, 0x62, 0x49, 0xD3, 0x27, 0xEF, 0x06, 0xC6, 0xF3, 0x74, 0xD2, 0xEE, 0x61, 0x1F, 0x25, 0xBC, 0x81, 0x3E, 0x9F, 0x19, 0x50, 0x22, 0x63, 0x8D, 0x76, 0xAF, 0x0C, 0x4C, 0x51, 0x3C, 0x99, 0xA7, 0xD0, 0xFF, 0x34, 0x89, 0x5B, 0x8B, 0x51, 0x81, 0x65, 0x43, 0x45, 0xC3, 0x9A, 0xB3, 0x50, 0xF7, 0x76, 0x15, 0xDD, 0xD3, 0x2B, 0x6E, 0xA5, 0x0D, 0x11, 0xE0, 0xC8, 0x46, 0xF0, 0x9F, 0x61, 0x63, 0x01, 0xBC, 0xAF, 0xF1, 0xBB, 0x5D, 0x28, 0xBF, 0x7B, 0x36, 0xE5, 0x51, 0x95, 0x2C, 0x01, 0xBC, 0x81, 0x3E, 0x6F, 0x4A, 0x64, 0x45, 0x60, 0x36, 0xAD, 0xD3, 0x8C, 0xD2, 0x19, 0x23, 0x40, 0x4D, 0x9B, 0x6F, 0x67, 0xD1, 0x3E, 0xB4, 0xC1, 0xD9, 0x11, 0x27, 0x03, 0x62, 0x80, 0x36, 0xEA, 0xD8, 0xC9, 0xA7, 0x2B, 0x59, 0x81, 0x14, 0xC2, 0x81, 0x7A, 0x8C, 0x76, 0x97, 0x9C, 0xA4, 0xBF, 0x4E, 0xDA, 0xEA, 0x80, 0x0A, 0x53, 0x5A, 0xF5, 0x3B, 0xB5, 0x52, 0x67, 0xA3, 0xF3, 0x7B, 0xDE, 0x33, 0x3F, 0xED, 0x08, 0xFE, 0x0F, 0xD9, 0xB4, 0x54, 0xC0, 0x1B, 0x30, 0x22, 0xFC, 0xED, 0xB7, 0x5A, 0x65, 0xDC, 0xE1, 0x4D, 0xBC, 0xEF, 0x73, 0x3F, 0x72, 0xE8, 0x65, 0xFC, 0xD4, 0xAF, 0xF2, 0x30, 0x92, 0xA8, 0x3B, 0x23, 0xCF, 0x18, 0x61, 0xF5, 0x10, 0x36, 0x99, 0x41, 0x69, 0x08, 0x1D, 0x46, 0xA3, 0x8A, 0xB7, 0xD4, 0x7D, 0x8B, 0x31, 0xF7, 0x0C, 0x81, 0x2B, 0xD0, 0x45, 0x4F, 0xC3, 0x81, 0xD5, 0xE1, 0x17, 0x07, 0xFC, 0x00, 0x65, 0x6B, 0xB4, 0xB9, 0xF4, 0x32, 0x53, 0xFB, 0x6B, 0x34, 0x8A, 0x61, 0x33, 0xAD, 0xDC, 0x74, 0x2A, 0x4A, 0xF7, 0xF5, 0xBC, 0x97, 0x15, 0x9F, 0xBB, 0x71, 0x34, 0x1B, 0x98, 0x00, 0x3A, 0x81, 0x9C, 0x1B, 0xA5, 0x6F, 0x27, 0x78, 0xD0, 0xAE, 0xB8, 0x85, 0xDE, 0x31, 0x15, 0x7F, 0xA7, 0x3F, 0x81, 0xD3, 0x80, 0x17, 0x80, 0x1B, 0x35, 0x76, 0xA5, 0x3F, 0xB0, 0xDB, 0x4C, 0x63, 0x9D, 0x51, 0x26, 0x17, 0x8B, 0x3A, 0x3A, 0x8D, 0x5A, 0x17, 0x42, 0xF8, 0xB9, 0x2B, 0x82, 0x53, 0x3B, 0x6E, 0xFC, 0x39, 0xE1, 0x12, 0x28, 0x46, 0xF2, 0xDA, 0x80, 0xCF, 0xE7, 0x4C, 0xD3, 0xED, 0x89, 0xB0, 0x35, 0xD3, 0x7B, 0xA6, 0x65, 0x54, 0xB1, 0xAD, 0x04, 0x0D, 0xF3, 0x5D, 0x85, 0x01, 0xB9, 0x94, 0xAB, 0x45, 0xB9, 0x3E, 0xDD, 0xB6, 0xBE, 0xF6, 0x31, 0x60, 0xE6, 0xB3, 0xC9, 0x4D, 0xEE, 0x6A, 0x8A, 0x32, 0xF0, 0xCC, 0x78, 0xE5, 0x38, 0x74, 0x33, 0x64, 0xDB, 0x8F, 0x80, 0xC4, 0x05, 0xAA, 0xD3, 0xC6, 0xC2, 0xB7, 0xBE, 0x2D, 0xB8, 0xFA, 0xFC, 0x52, 0x8D, 0xDE, 0x6F, 0x52, 0x1D, 0xDF, 0x01, 0x4F, 0x40, 0x16, 0x42, 0x1C, 0x40, 0x13, 0x28, 0xD9, 0xFF, 0x3B, 0xA0, 0x0C, 0xC8, 0x06, 0x9C, 0x50, 0x01, 0xCE, 0x01, 0xD4, 0x76, 0xB9, 0xCF, 0x1A, 0x4D, 0x28, 0x1B, 0x12, 0xD7, 0x5B, 0x5A, 0x3A, 0xFB, 0x89, 0x7D, 0x5A, 0x82, 0x22, 0x75, 0x39, 0xBC, 0xA6, 0x32, 0x16, 0x86, 0x61, 0xAC, 0x06, 0x5C, 0xEF, 0xFC, 0xA3, 0xE7, 0x1E, 0xEB, 0x0D, 0xCC, 0x7C, 0x76, 0xF0, 0x9E, 0xD7, 0xBF, 0x62, 0x90, 0xB7, 0x53, 0xD5, 0xC6, 0x67, 0x2A, 0x98, 0x74, 0x7B, 0x02, 0x64, 0xFE, 0x91, 0xD3, 0xAD, 0x48, 0x0B, 0xED, 0x62, 0xC9, 0x62, 0xA5, 0x9C, 0x90, 0xAD, 0xA2, 0x1F, 0xC0, 0x1D, 0x90, 0x85, 0xDD, 0x9F, 0x8C, 0xD8, 0xFF, 0xBB, 0xB4, 0xED, 0xFD, 0xC0, 0xA7, 0x49, 0xA0, 0x0C, 0xF0, 0x02, 0xCC, 0x81, 0x70, 0xFC, 0x32, 0xD6, 0x4B, 0x63, 0x97, 0xD0, 0x6A, 0x68, 0x67, 0xF6, 0x7F, 0x8F, 0xB4, 0xE3, 0x5C, 0x2B, 0x88, 0x07, 0xAD, 0x6B, 0xF0, 0xA0, 0x7D, 0xAB, 0x77, 0xFA, 0xD9, 0x5A, 0xDF, 0xF2, 0x29, 0x79, 0x12, 0x56, 0x77, 0x5B, 0xF7, 0x8E, 0xE3, 0xF5, 0xB5, 0x49, 0x60, 0x3B, 0xF9, 0x5D, 0x1E, 0x65, 0x88, 0x4E, 0xA0, 0xFC, 0xDD, 0x83, 0x8A, 0x09, 0x5F, 0x44, 0x00, 0x1B, 0x51, 0x19, 0x90, 0xC1, 0x88, 0x6A, 0xF5, 0xE6, 0x88, 0x2E, 0x36, 0x5A, 0x09, 0x10, 0x44, 0xED, 0x94, 0xFB, 0x76, 0x7B, 0x1C, 0x20, 0xF3, 0xD3, 0xF1, 0x78, 0x56, 0x03, 0x16, 0xC8, 0x00, 0xF0, 0xFF, 0xEC, 0xCD, 0x3F, 0xA2, 0x2F, 0x48, 0xA3, 0x07, 0x85, 0xB6, 0x29, 0x28, 0xEC, 0xDA, 0xB9, 0xD6, 0xA1, 0x96, 0x24, 0xFA, 0x74, 0x1A, 0x71, 0x67, 0xE3, 0x41, 0xDB, 0xDA, 0xBA, 0x10, 0x5E, 0x6F, 0xF1, 0x17, 0x39, 0xED, 0x77, 0xC9, 0x00, 0x8C, 0xF6, 0x83, 0x17, 0xD0, 0x76, 0x2F, 0xE7, 0xDF, 0x45, 0x92, 0x4F, 0x9F, 0x3B, 0x13, 0xD6, 0xD6, 0x7C, 0x6E, 0x18, 0x1F, 0x97, 0x01, 0xA7, 0xF0, 0xC7, 0x62, 0xB0, 0x9D, 0x06, 0xF4, 0xF0, 0x11, 0xB9, 0x66, 0x5A, 0xFB, 0xCF, 0x7F, 0xE0, 0x6D, 0x19, 0x3B, 0x70, 0xDD, 0x40, 0xF1, 0x46, 0x74, 0x7A, 0xB6, 0x62, 0x80, 0x0F, 0x10, 0x49, 0x1C, 0xC0, 0x8D, 0x48, 0xA0, 0xE8, 0xF5, 0x86, 0xAE, 0xCD, 0x1E, 0xD5, 0x08, 0x2E, 0xDC, 0xB0, 0xEF, 0x83, 0x86, 0x1E, 0x1C, 0x5A, 0xFE, 0xE7, 0x7E, 0x20, 0xE2, 0x8B, 0x7F, 0x34, 0xDA, 0xD2, 0x4B, 0xDB, 0x33, 0x7E, 0x6C, 0x47, 0x54, 0x88, 0x01, 0xBC, 0x80, 0xFE, 0x21, 0x1E, 0x45, 0xA2, 0xB2, 0xB5, 0x72, 0xC1, 0x76, 0x5B, 0xFA, 0xD9, 0xE2, 0x78, 0xE6, 0xDB, 0xF4, 0x13, 0x8F, 0xCA, 0x7B, 0xD8, 0xEA, 0x03, 0x13, 0xFB, 0xDC, 0x38, 0x03, 0xCF, 0x62, 0x82, 0x7C, 0x17, 0x2D, 0x30, 0xA5, 0x11, 0x09, 0xF3, 0xFA, 0x01, 0x66, 0x68, 0xFA, 0x4D, 0x69, 0xF4, 0x6A, 0x01, 0x10, 0x75, 0xAF, 0xA0, 0xAD, 0xCF, 0x0A, 0xDA, 0xE6, 0x4F, 0x6A, 0xD6, 0x68, 0x3F, 0x1B, 0xB4, 0xCF, 0xFC, 0x6E, 0xF5, 0xAA, 0xF9, 0xDD, 0xCE, 0x27, 0xD0, 0x28, 0x35, 0x66, 0xE8, 0x4A, 0x6B, 0x64, 0x8C, 0x86, 0x12, 0x91, 0xD9, 0xBF, 0xB7, 0xF3, 0x09, 0x38, 0x0D, 0x58, 0xF7, 0x61, 0xFD, 0x86, 0x0D, 0x00, 0x4E, 0x01, 0xE6, 0x80, 0x37, 0xD0, 0xDB, 0x8A, 0xBB, 0xC2, 0xA1, 0x9B, 0xE7, 0xD8, 0xA2, 0x66, 0x37, 0xEC, 0x22, 0x0C, 0x0E, 0x53, 0x77, 0x0F, 0x35, 0x90, 0x44, 0x28, 0xC1, 0x54, 0xCF, 0x1A, 0xA4, 0x85, 0xC7, 0x1C, 0x9D, 0x58, 0xE3, 0x9C, 0xBF, 0x9F, 0x3B, 0xD3, 0x28, 0x09, 0xA4, 0xDC, 0x9D, 0xA0, 0xE1, 0x40, 0x19, 0xD0, 0x4A, 0x14, 0xDD, 0xB9, 0x03, 0xC8, 0x00, 0xD6, 0xC0, 0x9F, 0xCD, 0x92, 0x7B, 0x28, 0x14, 0xFF, 0xBE, 0x9E, 0xAB, 0xE0, 0xE9, 0x62, 0xE8, 0x55, 0xE9, 0xE6, 0x39, 0x83, 0x64, 0xAB, 0xF5, 0x5C, 0x39, 0xDB, 0xF8, 0x86, 0x03, 0xF2, 0x19, 0xB9, 0xD8, 0x46, 0x84, 0x06, 0x64, 0x3E, 0x57, 0xE7, 0x06, 0xA3, 0x45, 0x13, 0x4E, 0xF3, 0x41, 0xAB, 0x0D, 0x74, 0xE9, 0xD6, 0x5F, 0x3A, 0xA9, 0xF1, 0x1C, 0x49, 0x7E, 0xB5, 0x2A, 0xE2, 0x41, 0x47, 0x57, 0x22, 0xBF, 0xCB, 0xE1, 0x23, 0xB9, 0xC5, 0xB3, 0x00, 0x6A, 0x5B, 0x0F, 0x12, 0xB0, 0x06, 0x46, 0x98, 0x04, 0x17, 0x3E, 0xA0, 0x0B, 0xFE, 0xB1, 0x1B, 0xC8, 0x00, 0x82, 0xA8, 0x1F, 0x18, 0x97, 0xC3, 0x68, 0x85, 0x3E, 0xBB, 0xA7, 0xA3, 0x1B, 0x79, 0xA7, 0xD4, 0x84, 0x8A, 0x17, 0x7F, 0x59, 0x91, 0x88, 0xFC, 0xE7, 0x17, 0x23, 0xC4, 0x69, 0xBD, 0xDA, 0x1F, 0xE5, 0x7E, 0xD0, 0x74, 0xC7, 0x9D, 0x94, 0x7E, 0x6A, 0x01, 0x3A, 0x80, 0x27, 0xB0, 0x8D, 0xF2, 0x41, 0x1F, 0x16, 0x66, 0xDD, 0x63, 0x4E, 0x8B, 0xA7, 0xF2, 0x56, 0x4D, 0xCE, 0xA3, 0x9F, 0xB1, 0x19, 0x58, 0x0B, 0xDE, 0x7D, 0x72, 0xF7, 0x0C, 0x68, 0x12, 0x87, 0x28, 0x40, 0x04, 0x38, 0x09, 0x48, 0x03, 0xAA, 0x80, 0x37, 0x30, 0xDB, 0x3D, 0x79, 0x80, 0x6A, 0xA0, 0xF7, 0x53, 0x02, 0x19, 0x44, 0xBE, 0x75, 0xC0, 0xF3, 0x5E, 0x9D, 0x0D, 0x7D, 0x20, 0x7F, 0xDD, 0x0D, 0x45, 0x79, 0xEE, 0x9D, 0xCD, 0x76, 0x57, 0x04, 0x1A, 0x2E, 0xBB, 0x52, 0xF2, 0x5D, 0x8A, 0x2D, 0x05, 0x3C, 0x3A, 0x07, 0x2B, 0xAD, 0x51, 0xB5, 0x65, 0x72, 0xDE, 0x02, 0x0A, 0xF8, 0x00, 0xB3, 0x3A, 0xBE, 0xAC, 0x11, 0xEF, 0xB4, 0xDC, 0x4A, 0xF3, 0x35, 0xFF, 0x29, 0x48, 0xCB, 0xD3, 0x74, 0xCD, 0xFB, 0xB0, 0xF9, 0x28, 0xD6, 0xC0, 0x2E, 0xEF, 0x06, 0x3B, 0x11, 0xC0, 0x06, 0x28, 0x01, 0x72, 0x3F, 0x29, 0x30, 0x87, 0x18, 0xFE, 0x9F, 0x37, 0xD0, 0xFC, 0xFF, 0x69, 0x03, 0x64, 0x11, 0x43, 0x18, 0x21, 0x40, 0x1D, 0x00, 0xBA, 0x3B, 0xC8, 0xEE, 0xD3, 0x66, 0x03, 0x35, 0xD5, 0x23, 0xDC, 0x30, 0x71, 0xED, 0xD8, 0x3A, 0xCD, 0x09, 0x50, 0x97, 0x46, 0xFF, 0x52, 0x3B, 0xAC, 0x8B, 0xB0, 0xD3, 0xEA, 0x2B, 0xFE, 0x72, 0xFE, 0x31, 0x7A, 0xA7, 0x84, 0x09, 0xE1, 0xF7, 0xCB, 0x79, 0x36, 0x48, 0xDF, 0xDD, 0x95, 0xF2, 0xB6, 0x00, 0xDA, 0xF9, 0xDB, 0x63, 0x4D, 0x48, 0x6F, 0x0F, 0xEE, 0x3D, 0x65, 0xB7, 0x4D, 0x58, 0xEB, 0xB4, 0xEE, 0x6A, 0x94, 0x92, 0x0D, 0x06, 0xE8, 0xE9, 0x05, 0x1B, 0x57, 0xB6, 0x69, 0x77, 0xE7, 0x0F, 0x12, 0xE8, 0xF5, 0xBC, 0x12, 0xE8, 0x21, 0x1A, 0x28, 0xF9, 0x47, 0xD2, 0xDB, 0x39, 0xC5, 0x20, 0x7B, 0x75, 0xBE, 0x9E, 0x05, 0x96, 0x6B, 0xF6, 0x1B, 0x0C, 0xA8, 0x6B, 0x72, 0xB1, 0x7B, 0xA3, 0x1D, 0x80, 0x5D, 0xF0, 0x9D, 0xF3, 0x8E, 0xC6, 0x4E, 0x7C, 0x22, 0x28, 0xB7, 0x7B, 0xEE, 0x7A, 0xEC, 0x73, 0xB0, 0x05, 0xE0, 0x02, 0xE0, 0xBB, 0xDC, 0x34, 0xF9, 0x26, 0x6B, 0xB7, 0xEF, 0xDD, 0x1F, 0xB7, 0x4A, 0x6C, 0xEF, 0x4C, 0x20, 0x1D, 0xE8, 0x7A, 0x97, 0xF7, 0x17, 0x5F, 0xA1, 0x2D, 0xC8, 0x31, 0x3C, 0x4A, 0xE5, 0xA5, 0x50, 0xF4, 0x68, 0xE7, 0x51, 0x7D, 0x69, 0x1E, 0xF5, 0xB9, 0xC9, 0x5A, 0x22, 0x1D, 0x68, 0x05, 0xA6, 0xE9, 0x99, 0x08, 0xE0, 0x0A, 0x94, 0x03, 0xB3, 0x8B, 0xF0, 0x1E, 0xA3, 0x09, 0x5A, 0x78, 0x4C, 0x29, 0x31, 0x2D, 0x10, 0x0F, 0xB0, 0xBC, 0x3A, 0x48, 0xDB, 0x1D, 0x31, 0x81, 0xFC, 0x6E, 0xD7, 0xB6, 0x8A, 0x6B, 0xDF, 0xC5, 0x00, 0xBE, 0xD9, 0xC7, 0x79, 0x07, 0x38, 0xF3, 0xEF, 0x60, 0x4B, 0x40, 0x0C, 0xF0, 0x00, 0x66, 0xA5, 0x24, 0x9E, 0xF1, 0x1E, 0x96, 0x2D, 0x37, 0x1E, 0x5A, 0x61, 0xC1, 0x67, 0x09, 0xFF, 0x00, 0x42, 0x97, 0x22, 0x0B, 0xD0, 0x7E, 0x9B, 0xF0, 0x9C, 0x0D, 0x07, 0xC2, 0x9E, 0x58, 0x3A, 0x18, 0xC5, 0x3F, 0x16, 0xDF, 0xFF, 0x5A, 0x51, 0x4D, 0xAA, 0x8C, 0x35, 0xB7, 0xB1, 0xBE, 0xEF, 0x9C, 0x10, 0x6A, 0xC4, 0x01, 0x64, 0x00, 0xCD, 0xBB, 0x01, 0xE4, 0xC4, 0xDA, 0x6C, 0x8F, 0x7F, 0xBA, 0xA2, 0x69, 0xFF, 0x4B, 0x28, 0xE5, 0xBD, 0xF1, 0x3B, 0x9A, 0xAF, 0xD2, 0xA0, 0xDA, 0x27, 0x01, 0xF5, 0x26, 0xBD, 0xD3, 0x8E, 0xEF, 0x8E, 0x10, 0x9A, 0x40, 0x99, 0x92, 0xC6, 0xEB, 0xC1, 0x24, 0x2B, 0xD1, 0x80, 0x17, 0xB0, 0x9A, 0x4A, 0xB3, 0x23, 0xBB, 0xBB, 0x56, 0x99, 0xC6, 0x32, 0xBA, 0xD3, 0xB9, 0x47, 0x75, 0x02, 0x13, 0x3B, 0xDD, 0x03, 0xC4, 0x7A, 0x55, 0x18, 0x4A, 0x07, 0x90, 0xC7, 0x7F, 0xCF, 0x29, 0x28, 0x16, 0x22, 0xDF, 0xB8, 0x5B, 0x09, 0x3E, 0x1D, 0xA4, 0xDD, 0x77, 0x09, 0x3D, 0x1C, 0xC8, 0x02, 0xAA, 0x29, 0x05, 0xF6, 0x69, 0xCC, 0x8D, 0x06, 0x5A, 0xD7, 0x66, 0xF6, 0xAE, 0x41, 0xED, 0xEC, 0xC0, 0x09, 0x9A, 0xFB, 0x9C, 0xED, 0xEE, 0x0D, 0xFB, 0x41, 0x23, 0xB8, 0x58, 0xCD, 0xFF, 0xA7, 0x8F, 0xB1, 0xDC, 0x80, 0x94, 0xD7, 0x83, 0x1D, 0x7C, 0xC7, 0xA8, 0x08, 0xD8, 0x35, 0x7F, 0xC7, 0x00, 0x3F, 0xC0, 0x34, 0xAF, 0x86, 0x60, 0x83, 0xD2, 0x6E, 0x9D, 0x66, 0xB5, 0x7B, 0x5B, 0x52, 0xE2, 0x07, 0x94, 0xDA, 0xD0, 0x10, 0xB1, 0x28, 0xA0, 0x82, 0x23, 0x38, 0xBD, 0x35, 0x48, 0x3E, 0x36, 0x94, 0x8E, 0x90, 0xDD, 0xD0, 0xD8, 0xB7, 0x08, 0x6B, 0x3D, 0xAA, 0x84, 0x40, 0xF5, 0xAE, 0x69, 0x20, 0x9A, 0x98, 0xFB, 0x93, 0x0A, 0xE0, 0x0A, 0x98, 0x03, 0x61, 0x6B, 0x33, 0xA7, 0x79, 0xE0, 0x5B, 0x7B, 0xF8, 0xEB, 0xA2, 0xD5, 0xE9, 0xC4, 0x78, 0x0D, 0x57, 0x66, 0xB7, 0x26, 0xA6, 0x73, 0xFC, 0x16, 0x35, 0xCC, 0xCF, 0xD4, 0xBA, 0xDB, 0x47, 0x2B, 0x27, 0x89, 0x00, 0xAA, 0x81, 0xD1, 0x7B, 0xD6, 0x67, 0x2E, 0xC1, 0xAB, 0x5D, 0xDD, 0xAF, 0x78, 0x7A, 0xB9, 0xB5, 0x1C, 0x48, 0x03, 0x62, 0x80, 0xDD, 0x34, 0xB0, 0x59, 0xE4, 0x38, 0x6F, 0xB3, 0xCC, 0xEA, 0x49, 0x50, 0x3E, 0x23, 0xE5, 0x79, 0x08, 0x3B, 0x61, 0xE5, 0xB0, 0xBB, 0x82, 0x3E, 0xC9, 0xE0, 0xAA, 0x81, 0xE1, 0x11, 0x26, 0x0A, 0x98, 0x00, 0x31, 0xC0, 0xE4, 0xDD, 0x33, 0xE3, 0x67, 0x8D, 0x16, 0x57, 0xCA, 0x2C, 0xCE, 0x37, 0x52, 0x5F, 0x15, 0x95, 0x60, 0x4B, 0x8A, 0x41, 0x3A, 0xA9, 0x82, 0x61, 0x26, 0x0E, 0x34, 0xBF, 0x73, 0x8F, 0xA9, 0x9F, 0x40, 0xBD, 0x3F, 0x70, 0xC0, 0xF4, 0x1E, 0x61, 0x8F, 0x2D, 0x3E, 0x39, 0x53, 0xD8, 0x3B, 0xF3, 0x2C, 0x2B, 0x55, 0xE8, 0x40, 0x1B, 0xB0, 0xBB, 0x9C, 0xCF, 0x00, 0xFE, 0xA8, 0x84, 0x70, 0x72, 0x87, 0x67, 0x9E, 0xC7, 0x5F, 0xEB, 0x54, 0x71, 0xA9, 0x65, 0xFB, 0x25, 0x9B, 0x89, 0x93, 0x7A, 0xDF, 0xD1, 0x06, 0x46, 0x99, 0x2A, 0x0B, 0xC0, 0x13, 0x48, 0x03, 0xB6, 0x25, 0x5E, 0x1B, 0xF0, 0x03, 0xA4, 0xAD, 0xCD, 0xF6, 0x3D, 0xDC, 0x56, 0x6A, 0x7B, 0x67, 0x62, 0x6D, 0x47, 0x3D, 0x94, 0x8D, 0x91, 0xA7, 0xF2, 0xF7, 0x68, 0xA4, 0xE6, 0x9B, 0xB0, 0x9D, 0x3C, 0x6B, 0xB4, 0xCF, 0xD0, 0xFA, 0xC7, 0x4C, 0x12, 0x44, 0x01, 0xD6, 0x77, 0x92, 0xA3, 0x2E, 0x99, 0x17, 0xA9, 0xA7, 0xCF, 0xC0, 0x77, 0xFF, 0xBA, 0x03, 0x9D, 0xC0, 0xEC, 0x5C, 0x70, 0x00, 0xAE, 0x7F, 0xBB, 0x26, 0x9D, 0xD3, 0xD4, 0xCE, 0x54, 0x62, 0xB0, 0xA4, 0x9C, 0x49, 0x57, 0x4D, 0xFE, 0xF2, 0xDA, 0xCA, 0xAB, 0xA1, 0x81, 0x3E, 0xBB, 0x96, 0x16, 0xB0, 0x01, 0x9C, 0x08, 0x62, 0xEB, 0x53, 0x47, 0x08, 0x03, 0xA4, 0xD7, 0x68, 0x75, 0x69, 0x7D, 0x89, 0xD6, 0xF7, 0x41, 0x63, 0xB4, 0x59, 0x08, 0x09, 0x50, 0xE2, 0xB3, 0x38, 0x75, 0xB5, 0xA4, 0x35, 0x60, 0x1F, 0x69, 0xDB, 0x8E, 0x4F, 0xF7, 0xBB, 0x12, 0x05, 0x6C, 0xFD, 0xFD, 0xE8, 0x3B, 0x4C, 0x26, 0xE7, 0x51, 0x09, 0x2A, 0xDD, 0x6C, 0xDA, 0x3B, 0xDC, 0xF5, 0x8B, 0xF7, 0x80, 0x18, 0x00, 0x17, 0x85, 0x6D, 0x17, 0x32, 0x63, 0x9D, 0x79, 0xC7, 0xA4, 0x60, 0x25, 0xE5, 0xF9, 0x16, 0x3F, 0xAC, 0x50, 0x0E, 0xFD, 0xDA, 0x39, 0x7C, 0x98, 0x84, 0xF8, 0x85, 0xFB, 0x80, 0x05, 0x10, 0x7E, 0xEF, 0xAD, 0x39, 0x0A, 0x58, 0x02, 0xA1, 0xDF, 0x5B, 0xA0, 0xFF, 0x6C, 0xC6, 0x24, 0x47, 0x0D, 0x76, 0x37, 0xBF, 0x19, 0xA1, 0x16, 0xC3, 0x41, 0x91, 0xF5, 0x73, 0x41, 0x35, 0x9B, 0x1B, 0xC9, 0x6E, 0x9B, 0xED, 0xB0, 0xF5, 0x96, 0x2E, 0x67, 0x2D, 0x61, 0x80, 0x39, 0xA0, 0x09, 0xB8, 0x02, 0xB9, 0x5B, 0x52, 0xE2, 0xCD, 0xEC, 0x3B, 0xBB, 0xA3, 0x76, 0x37, 0x07, 0x9A, 0x40, 0x60, 0x17, 0xBD, 0x57, 0x7B, 0x68, 0x02, 0xDB, 0xAF, 0x2E, 0xBB, 0xEC, 0x79, 0x37, 0x64, 0x27, 0x03, 0x19, 0x3A, 0x0F, 0x26, 0xB0, 0x59, 0xB1, 0xF7, 0x40, 0x68, 0xB3, 0xA8, 0x7B, 0x53, 0x94, 0xF8, 0x67, 0x45, 0x54, 0x00, 0xA5, 0xB4, 0x99, 0x01, 0x46, 0x84, 0x00, 0xED, 0x6B, 0xB3, 0xB9, 0xC4, 0x45, 0x65, 0xBE, 0x19, 0xA1, 0x1D, 0x50, 0x1E, 0xA4, 0xDD, 0x25, 0xE1, 0xD2, 0xAB, 0x5E, 0x2F, 0xE7, 0x5D, 0x18, 0x78, 0x37, 0xC7, 0xDA, 0x86, 0xE6, 0x84, 0x03, 0x47, 0xF6, 0xD3, 0xA7, 0x31, 0x59, 0xDE, 0x9A, 0xD5, 0xEA, 0x57, 0xE9, 0x79, 0xA6, 0xD0, 0x67, 0x00, 0x0B, 0x40, 0x1C, 0x88, 0x03, 0x14, 0xEF, 0x04, 0x65, 0xF0, 0x60, 0xB4, 0xB2, 0x31, 0x4E, 0xE4, 0xEB, 0xC8, 0x27, 0x4C, 0x61, 0xFA, 0x46, 0xCC, 0x8B, 0xFB, 0x54, 0x56, 0x01, 0xF8, 0x5E, 0xAF, 0x65, 0x09, 0x44, 0x03, 0x95, 0x9F, 0x07, 0xCD, 0x89, 0x02, 0x9E, 0x34, 0x9A, 0xF3, 0xFA, 0x37, 0xFB, 0x16, 0x06, 0x6E, 0xB7, 0xD6, 0x02, 0x33, 0x57, 0x39, 0xBF, 0x54, 0x3E, 0x63, 0x81, 0xD2, 0x4F, 0xBF, 0xA8, 0xCE, 0x2D, 0xF8, 0xD2, 0xC9, 0xF7, 0x91, 0xB0, 0xFE, 0xBC, 0x96, 0x09, 0x3C, 0xEA, 0xC0, 0xFD, 0x78, 0x1F, 0x1C, 0xD2, 0x1C, 0xDE, 0x7D, 0xB1, 0x6E, 0xCE, 0xBB, 0x16, 0x4A, 0x1F, 0xA7, 0x75, 0xF5, 0xF4, 0x86, 0xCD, 0xB2, 0x23, 0x40, 0x12, 0x41, 0xC8, 0x70, 0x50, 0xB1, 0x57, 0x5D, 0x94, 0x08, 0x40, 0x0B, 0x68, 0xA5, 0x47, 0x43, 0xCC, 0x01, 0xBA, 0x81, 0x3A, 0x80, 0x27, 0x60, 0x44, 0xB0, 0x42, 0xE3, 0x67, 0x8D, 0x26, 0x1C, 0x1F, 0x64, 0x5D, 0x72, 0xBE, 0x46, 0xDB, 0x6E, 0x79, 0x45, 0x22, 0xAB, 0x1B, 0x5A, 0xA1, 0xDA, 0xBB, 0x58, 0x6B, 0x5B, 0xE1, 0xEF, 0x23, 0x2D, 0xEE, 0x23, 0xED, 0x9B, 0xDD, 0x0E, 0x03, 0xA6, 0x6F, 0x95, 0x1C, 0x59, 0x97, 0x6D, 0x57, 0xDB, 0xEE, 0xA3, 0xBD, 0x29, 0x8C, 0x91, 0x37, 0x45, 0x7F, 0x00, 0xA4, 0x12, 0xDF, 0xEE, 0x5A, 0xBC, 0xC8, 0xD4, 0x62, 0x65, 0xEB, 0xD3, 0x25, 0x1A, 0x57, 0xF4, 0x37, 0xD0, 0x06, 0xFE, 0x43, 0xEE, 0xDE, 0xC0, 0x01, 0x92, 0x15, 0x62, 0x17, 0xA0, 0x8A, 0x08, 0x20, 0x0F, 0xE0, 0x01, 0x58, 0x01, 0x3B, 0xF2, 0x6D, 0xB6, 0x46, 0xD3, 0xB5, 0xCF, 0x55, 0x4D, 0x89, 0xD6, 0x6B, 0x29, 0xD9, 0xD4, 0x50, 0x59, 0xD3, 0xE8, 0x99, 0x62, 0xED, 0xFA, 0x1A, 0x4B, 0x80, 0xB4, 0x37, 0x1A, 0xC7, 0x91, 0x7B, 0x2F, 0xA6, 0x74, 0x07, 0xB2, 0x68, 0x9E, 0x06, 0x46, 0x57, 0xC2, 0x9B, 0xD1, 0x26, 0x5B, 0x83, 0x36, 0xD1, 0x53, 0x54, 0xAE, 0x37, 0x16, 0xDC, 0xCA, 0x29, 0xB7, 0x4D, 0x38, 0x6B, 0x96, 0x87, 0x2D, 0x53, 0xA5, 0x3C, 0xAF, 0x28, 0xDA, 0x25, 0x02, 0xE4, 0xB9, 0xAB, 0x70, 0x4E, 0xAC, 0x17, 0x71, 0x1C, 0x88, 0x03, 0x74, 0xF1, 0x45, 0xFC, 0x8C, 0xE7, 0xA9, 0x01, 0xDE, 0xF7, 0x26, 0xF1, 0x13, 0x80, 0xEB, 0xDA, 0xCC, 0xBE, 0x36, 0xFB, 0x3E, 0x68, 0xB8, 0x87, 0xDB, 0x10, 0xA9, 0xB9, 0xFC, 0x42, 0xC9, 0xF8, 0xAD, 0x91, 0x7D, 0x12, 0xB5, 0x4A, 0xB8, 0xDC, 0x4D, 0x7C, 0xA3, 0xF7, 0x03, 0xE6, 0x09, 0xC0, 0xAC, 0xC8, 0xC5, 0xDF, 0xC2, 0x42, 0x5B, 0xDC, 0x7C, 0xBA, 0x1B, 0x77, 0x8B, 0xF0, 0xE1, 0x15, 0x3F, 0xB0, 0x59, 0x6F, 0x3C, 0x24, 0x40, 0xFE, 0x90, 0x8C, 0x0C, 0x9B, 0x3F, 0xE1, 0x63, 0x33, 0xA8, 0xF6, 0xE1, 0xB8, 0x0A, 0x20, 0x9D, 0x56, 0x3A, 0x9F, 0x6E, 0x0C, 0x01, 0xC6, 0x69, 0x9E, 0x4F, 0x84, 0xE0, 0x87, 0x68, 0xA0, 0xE4, 0x33, 0xB6, 0x08, 0xBC, 0x2F, 0xA7, 0xFF, 0xD3, 0x66, 0x10, 0x4B, 0x15, 0x2C, 0x58, 0x51, 0x33, 0x1C, 0x14, 0xAE, 0xDC, 0xFC, 0x61, 0x57, 0xEA, 0xF1, 0x9B, 0x11, 0xDA, 0xA5, 0xEB, 0x9F, 0x81, 0x31, 0x21, 0x4C, 0x80, 0xDE, 0x55, 0xC6, 0xE7, 0xCD, 0x4E, 0xCA, 0xEA, 0x44, 0xFD, 0x5D, 0x8F, 0x7D, 0xE5, 0x64, 0x76, 0xE8, 0xF9, 0x37, 0x34, 0x07, 0x68, 0x03, 0xDB, 0x7E, 0x21, 0xC5, 0x57, 0x66, 0xD5, 0xB6, 0x0B, 0x88, 0x01, 0x26, 0x3F, 0xAE, 0xBD, 0x02, 0x5D, 0xF7, 0xB6, 0xFE, 0x54, 0xA0, 0x1C, 0x68, 0x36, 0xC0, 0x1F, 0x05, 0xD4, 0x81, 0x88, 0xBB, 0x98, 0xF2, 0x04, 0xEA, 0x9B, 0x73, 0xDC, 0x35, 0x0B, 0xFA, 0xDD, 0x48, 0xC6, 0xB0, 0xCF, 0xF6, 0x2C, 0x10, 0x28, 0x58, 0xF9, 0xB5, 0x1C, 0x44, 0xF4, 0xAE, 0xA5, 0xC4, 0xD6, 0x52, 0xE4, 0x73, 0x9E, 0x11, 0x21, 0x9F, 0xF3, 0x2C, 0x99, 0xCA, 0xD5, 0xB7, 0xEE, 0xA9, 0x41, 0x2F, 0xB5, 0x9E, 0x11, 0x5F, 0xA3, 0x95, 0x0E, 0x85, 0x22, 0x44, 0x00, 0x35, 0x60, 0x35, 0x68, 0xF3, 0x71, 0x4F, 0x99, 0x26, 0xB4, 0xF7, 0x51, 0xC4, 0x05, 0x8A, 0x57, 0xB4, 0x80, 0x91, 0x75, 0x29, 0xEE, 0x01, 0x4E, 0x6F, 0x20, 0x06, 0xC8, 0xFA, 0x04, 0xA4, 0x02, 0x98, 0x02, 0x21, 0x40, 0xD5, 0xDA, 0x2C, 0xAF, 0x2C, 0x9A, 0x4B, 0x7E, 0x6D, 0xC6, 0x5C, 0xDC, 0x20, 0x3D, 0x8C, 0x7E, 0xB4, 0x71, 0xF4, 0x72, 0x8F, 0xAE, 0x9B, 0x01, 0xD8, 0xBE, 0x9B, 0xE7, 0x73, 0x71, 0x7E, 0x22, 0x26, 0xF7, 0x4F, 0xFD, 0x69, 0xDE, 0x9C, 0x11, 0x42, 0xFA, 0x5B, 0x8B, 0x50, 0xAF, 0x41, 0x2F, 0xFC, 0x7F, 0xC3, 0x0B, 0x6B, 0x40, 0xB1, 0xC3, 0x4E, 0xE9, 0x3C, 0x6E, 0x26, 0x28, 0xFA, 0x5D, 0x37, 0xC9, 0x55, 0xDB, 0xED, 0xF4, 0x6E, 0x39, 0x59, 0xD8, 0x43, 0x4B, 0x20, 0xE5, 0xC8, 0x2E, 0xAA, 0x7B, 0x8B, 0xA7, 0x17, 0x90, 0x09, 0xB4, 0xDE, 0x5B, 0x3C, 0x7D, 0x80, 0xB2, 0xFF, 0x57, 0xA8, 0x9D, 0x23, 0xBD, 0xAE, 0x33, 0x67, 0x1C, 0xFF, 0x52, 0x4F, 0x7B, 0xD0, 0x12, 0xD8, 0x33, 0x3A, 0xF3, 0x98, 0x3A, 0x72, 0xEE, 0xFD, 0xEF, 0xC2, 0xF8, 0x3F, 0x2C, 0x95, 0x8E, 0xE7, 0xBA, 0xE2, 0xAF, 0x70, 0x40, 0xA8, 0x81, 0x26, 0xF9, 0x16, 0xD9, 0xD4, 0xFD, 0x1E, 0xC8, 0xF7, 0x98, 0xCD, 0xE7, 0x79, 0xBE, 0x9F, 0x52, 0x6D, 0xCA, 0x65, 0x98, 0x9F, 0x8E, 0x0B, 0x1B, 0xA5, 0x2F, 0x47, 0x44, 0x6F, 0xB8, 0xAB, 0xF5, 0xD3, 0x82, 0x71, 0x7E, 0xD3, 0x79, 0x06, 0xB2, 0xC1, 0xC7, 0x75, 0x9F, 0x18, 0xBD, 0x48, 0x5E, 0xDE, 0x90, 0x3C, 0x43, 0x06, 0x16, 0x44, 0xAB, 0x42, 0x0F, 0xB4, 0xC5, 0xC7, 0xD1, 0x0C, 0x3D, 0x65, 0x61, 0x3B, 0x4E, 0xE0, 0xB6, 0x22, 0x18, 0xFA, 0x62, 0x1E, 0xAC, 0xC6, 0xC3, 0x24, 0x66, 0x18, 0x8D, 0x59, 0x72, 0xB1, 0x1A, 0x27, 0x90, 0x30, 0xCB, 0xBA, 0x6C, 0x95, 0xF0, 0xF9, 0x25, 0x6C, 0xEF, 0x9D, 0x96, 0xFB, 0x6C, 0x70, 0x2E, 0xCE, 0x4D, 0xF8, 0x21, 0xE3, 0xE1, 0x8F, 0xA9, 0xF4, 0x82, 0xCF, 0x3F, 0x99, 0x24, 0x43, 0x49, 0x76, 0xF4, 0xD3, 0x54, 0x70, 0x8D, 0x1F, 0xDD, 0x64, 0x39, 0x57, 0x71, 0xE5, 0x47, 0x09, 0xA2, 0xE4, 0x32, 0x6E, 0x0F, 0x8E, 0x61, 0x2F, 0x56, 0x62, 0x07, 0x4E, 0xCA, 0x7E, 0xEF, 0xEE, 0x68, 0x83, 0x21, 0xCB, 0xB0, 0x1B, 0x8F, 0x5C, 0x27, 0xBE, 0x25, 0xA6, 0x6C, 0x39, 0x8D, 0x47, 0x1C, 0x16, 0xF2, 0x14, 0xFA, 0xC1, 0x68, 0xCC, 0xA3, 0x8C, 0xF7, 0x8F, 0x8C, 0x8B, 0x8B, 0xCD, 0x78, 0x94, 0x55, 0x19, 0x65, 0xE4, 0xE9, 0xDC, 0xC7, 0xFD, 0xB6, 0xB8, 0xCB, 0x33, 0x47, 0x2C, 0x73, 0xD4, 0xD1, 0xDC, 0xC1, 0x29, 0x6B, 0x9E, 0x48, 0xB9, 0x40, 0x8F, 0xBD, 0x3F, 0x38, 0x13, 0xE1, 0x80, 0x31, 0xAE, 0x13, 0xF3, 0xD5, 0x30, 0x42, 0x0E, 0xE6, 0x91, 0x83, 0xD3, 0x78, 0x42, 0x2B, 0x30, 0xB4, 0xC4, 0x80, 0x1C, 0x2C, 0xC7, 0x09, 0xDC, 0xC3, 0x74, 0xEE, 0x18, 0xA2, 0x31, 0x65, 0x1D, 0x3C, 0x26, 0x59, 0xDC, 0x63, 0xE4, 0x5B, 0xCF, 0x2F, 0x5F, 0x7F, 0xDF, 0xB6, 0xF2, 0x47, 0x78, 0x78, 0x8C, 0x27, 0xCB, 0x34, 0xEE, 0xC1, 0xB4, 0xEC, 0xE8, 0x29, 0xA5, 0x28, 0xC9, 0x59, 0x92, 0x33, 0x13, 0xAF, 0xFA, 0x07, 0xF3, 0xF6, 0x24, 0x7B, 0x8B, 0xD7, 0xA1, 0xEC, 0xED, 0xC2, 0x27, 0x08, 0xD7, 0x89, 0x59, 0x32, 0x30, 0x5E, 0x17, 0xF3, 0x0F, 0x67, 0xF0, 0x8D, 0xFF, 0x18, 0x9A, 0xA3, 0x0F, 0xC6, 0x62, 0x0E, 0x76, 0xE3, 0x19, 0x66, 0x7C, 0x0E, 0xDA, 0xA0, 0x17, 0x86, 0x63, 0x06, 0xF6, 0x91, 0x89, 0x27, 0x94, 0xB5, 0xFD, 0x91, 0x75, 0x91, 0xEB, 0xAA, 0x10, 0xA4, 0x52, 0xA4, 0x7A, 0xDF, 0xBD, 0xF8, 0xF9, 0x68, 0xFD, 0xF6, 0x70, 0x52, 0xE2, 0xB6, 0x9B, 0x41, 0x6B, 0xFA, 0xAB, 0x4E, 0xBC, 0xDC, 0xAB, 0x30, 0x3E, 0xD9, 0xA4, 0xCB, 0xCE, 0xC0, 0x58, 0x7C, 0x4A, 0xA5, 0xE6, 0xA2, 0x38, 0x26, 0x07, 0xB7, 0xE4, 0x30, 0xD0, 0xA4, 0x17, 0xC6, 0x62, 0x1E, 0x6C, 0x98, 0xC4, 0xE3, 0xB8, 0x87, 0x99, 0xDC, 0x30, 0x16, 0x73, 0xB0, 0x02, 0xDB, 0x70, 0xE0, 0x2C, 0x6E, 0xA8, 0x9E, 0x75, 0x65, 0xEC, 0xBF, 0x8C, 0xDF, 0xB7, 0x4F, 0xEF, 0x95, 0xCB, 0xFB, 0x04, 0x23, 0xE3, 0xBE, 0x18, 0x69, 0x9F, 0xFD, 0x2C, 0x7F, 0x7D, 0x7E, 0x38, 0x70, 0x49, 0x75, 0xCD, 0x8B, 0x85, 0x49, 0x0C, 0xFD, 0x54, 0xDC, 0x74, 0x9F, 0x44, 0x37, 0xC2, 0x4C, 0x62, 0x06, 0x0A, 0x5F, 0x19, 0xF8, 0x72, 0x64, 0x63, 0x0D, 0x76, 0xE0, 0x14, 0x9E, 0xC0, 0x2D, 0x22, 0x3E, 0x8D, 0x96, 0xE8, 0x8B, 0x29, 0xBB, 0x71, 0xE4, 0x31, 0xE4, 0x48, 0x1A, 0xEB, 0xB1, 0x90, 0x83, 0xD1, 0x4A, 0x37, 0xFE, 0x48, 0xB7, 0x48, 0x72, 0xB9, 0x6E, 0xF5, 0xE2, 0x8B, 0xE7, 0xA5, 0x06, 0x23, 0xE7, 0x99, 0xCF, 0x21, 0x17, 0x2F, 0x62, 0x73, 0x6D, 0xEB, 0x22, 0x70, 0xE4, 0x9B, 0xCD, 0xC4, 0xC1, 0xD3, 0x3D, 0xA6, 0x5E, 0x4F, 0x1D, 0x9C, 0xC0, 0x16, 0x86, 0x95, 0x72, 0xB1, 0x5B, 0x0E, 0x9E, 0x94, 0x07, 0xF7, 0x5D, 0xC6, 0x41, 0x93, 0x21, 0x1A, 0x73, 0xB1, 0x07, 0x8F, 0xE3, 0x8A, 0x66, 0x15, 0x8F, 0xA1, 0x05, 0xFA, 0x62, 0x38, 0x96, 0xD2, 0xCD, 0x5F, 0xBA, 0xA9, 0x24, 0x9B, 0x72, 0xBC, 0xC8, 0x8A, 0x24, 0xF5, 0x50, 0xB9, 0x87, 0x74, 0xED, 0x73, 0x98, 0xDF, 0x9D, 0xCB, 0x23, 0x4C, 0x97, 0x76, 0x28, 0xFA, 0x3D, 0xC7, 0xF0, 0xA4, 0xBA, 0x93, 0x00, 0x5B, 0x58, 0x83, 0x51, 0xE8, 0x2D, 0x13, 0x6D, 0x7F, 0xED, 0x10, 0x86, 0x39, 0x58, 0x86, 0xFD, 0x7A, 0x70, 0x16, 0x0F, 0x2A, 0x30, 0x0F, 0x36, 0xE8, 0x81, 0x71, 0x30, 0x0B, 0x5F, 0x0E, 0x76, 0xE3, 0x31, 0x99, 0x5A, 0x9F, 0x29, 0xE3, 0xFA, 0x65, 0x5C, 0x0F, 0xE9, 0x84, 0x1E, 0x25, 0x78, 0x4D, 0x16, 0xEF, 0xB9, 0x7D, 0xB8, 0xB8, 0x08, 0xD6, 0xC4, 0xB2, 0xD1, 0x59, 0xA6, 0x54, 0xD5, 0x4B, 0xA9, 0x83, 0xB5, 0xF8, 0x0C, 0xFD, 0x6D, 0xE8, 0x4E, 0xAC, 0x6D, 0x9C, 0x23, 0xED, 0x67, 0x0F, 0x8E, 0xCB, 0x91, 0x8B, 0x47, 0xEE, 0xBB, 0x04, 0x97, 0x07, 0x6D, 0xD0, 0x0B, 0xC3, 0x30, 0x1D, 0xAB, 0xB0, 0x07, 0x27, 0xE5, 0xE2, 0x49, 0xDC, 0xD0, 0xAA, 0x12, 0x4D, 0xAC, 0x52, 0xEE, 0x5F, 0xCA, 0xAD, 0xC7, 0xB6, 0xFD, 0x58, 0x93, 0xED, 0xFD, 0xE2, 0xCD, 0xF6, 0xC4, 0xA5, 0x39, 0xC9, 0xA1, 0x1F, 0x8B, 0x87, 0x1D, 0x38, 0x9C, 0x35, 0xF2, 0x3F, 0xD8, 0x60, 0xFA, 0xEA, 0x71, 0xAC, 0xC4, 0x70, 0x14, 0x56, 0xB2, 0x65, 0xCA, 0x83, 0x6E, 0x32, 0x30, 0x5C, 0x16, 0x66, 0xCA, 0xC5, 0x6A, 0xEC, 0x90, 0x07, 0x67, 0x50, 0x73, 0x33, 0xF3, 0x53, 0x72, 0xD1, 0x0A, 0xDD, 0xE5, 0xC1, 0x68, 0xCC, 0x51, 0xBE, 0xF3, 0xCB, 0x77, 0xDE, 0xF7, 0x7C, 0xD0, 0x9F, 0x0F, 0xF7, 0x63, 0x1A, 0x8F, 0xD6, 0xCE, 0x15, 0xC8, 0x0B, 0x13, 0xBA, 0x47, 0xF7, 0x28, 0xC7, 0x5E, 0x4C, 0x69, 0xFA, 0xE6, 0x39, 0xD8, 0x85, 0x22, 0x1D, 0x63, 0xE4, 0x91, 0x83, 0x29, 0x5E, 0x0B, 0xCB, 0x65, 0x61, 0x8B, 0xC2, 0x31, 0x39, 0x78, 0x42, 0x2E, 0xAE, 0x26, 0x7D, 0x06, 0x2D, 0xE4, 0xA0, 0x9B, 0x6C, 0x8C, 0xC0, 0x34, 0x2C, 0x57, 0xBE, 0xE7, 0x8F, 0x7C, 0xEB, 0xC3, 0xFF, 0xAB, 0x0C, 0xF9, 0xE1, 0xFD, 0x3C, 0xB9, 0x0A, 0xFB, 0x28, 0x9D, 0x60, 0x4D, 0x03, 0x4B, 0xC0, 0x65, 0x87, 0x5A, 0xFC, 0xA2, 0x7A, 0x99, 0xBB, 0x15, 0x21, 0xC0, 0x0F, 0xD4, 0x0F, 0x18, 0xF6, 0x1A, 0x38, 0x2C, 0x53, 0xB1, 0x35, 0xEC, 0xA5, 0x12, 0x68, 0x35, 0xAD, 0x61, 0x83, 0x03, 0xCB, 0x56, 0xA0, 0xE3, 0x5E, 0x17, 0x33, 0xE8, 0x8B, 0xAF, 0xF2, 0xD9, 0x5F, 0x3E, 0xE7, 0xF9, 0xF0, 0x3F, 0x38, 0xC2, 0xC2, 0x43, 0x2A, 0x07, 0x82, 0x7C, 0xEC, 0x13, 0x7C, 0xB3, 0x39, 0x0B, 0x73, 0x67, 0xB9, 0x9C, 0xBD, 0x34, 0xA4, 0x5D, 0x6C, 0xF8, 0x6A, 0x13, 0xA4, 0x2E, 0x33, 0x50, 0xFF, 0x9D, 0xC3, 0x66, 0x50, 0x70, 0x2E, 0x1B, 0xD0, 0xD4, 0xB7, 0x0E, 0xB4, 0xDE, 0x90, 0x17, 0xCF, 0x4B, 0xB0, 0x15, 0x68, 0xBE, 0x84, 0x73, 0xA9, 0x04, 0x5A, 0xDD, 0x64, 0xD4, 0xCF, 0x2F, 0xA3, 0x7D, 0x3E, 0xD4, 0x3C, 0x02, 0x28, 0x41, 0xF3, 0xC0, 0x7C, 0x74, 0xEE, 0xB9, 0x59, 0x52, 0x6F, 0xFB, 0x65, 0x44, 0x5E, 0xCA, 0x2E, 0x3E, 0x97, 0x67, 0x54, 0x67, 0xEA, 0xFB, 0xC1, 0x88, 0x20, 0xDD, 0xCB, 0x01, 0x5A, 0xC3, 0x16, 0x90, 0x30, 0x0C, 0x65, 0x0B, 0x68, 0x60, 0xD4, 0x26, 0x1C, 0x22, 0x3A, 0x2C, 0x93, 0x16, 0xB3, 0x18, 0x24, 0xB0, 0x37, 0x0C, 0x98, 0x39, 0x03, 0x56, 0x19, 0xD9, 0x2F, 0x23, 0x8A, 0x39, 0xEE, 0xFF, 0x30, 0xA0, 0x6C, 0xF2, 0x12, 0x7B, 0x59, 0x7A, 0xF4, 0xA8, 0x1F, 0x97, 0x4E, 0x5A, 0x4D, 0x96, 0xF4, 0x19, 0xA7, 0x71, 0xF3, 0x32, 0xE7, 0xD2, 0xC2, 0x2F, 0xB5, 0x30, 0x20, 0xB4, 0xE3, 0xBB, 0x05, 0x14, 0xB0, 0x6F, 0x0C, 0x02, 0xD8, 0x7B, 0xD8, 0x12, 0x08, 0xB1, 0x05, 0x7A, 0x22, 0x33, 0x68, 0x18, 0xCD, 0x0C, 0x7B, 0xF1, 0x50, 0x46, 0x4E, 0x69, 0xF6, 0x84, 0x3E, 0x7A, 0xC9, 0x70, 0x29, 0xAA, 0x8F, 0xF7, 0x80, 0xA6, 0x56, 0xDA, 0xA4, 0xB0, 0x14, 0x69, 0xC3, 0x73, 0xDC, 0x59, 0xC6, 0x54, 0x50, 0x9D, 0x65, 0x63, 0x7D, 0x8E, 0x31, 0xC1, 0x2C, 0x1D, 0x54, 0x4F, 0x47, 0x85, 0x54, 0xD2, 0xAE, 0xA2, 0x3F, 0x96, 0xF6, 0xAA, 0xBF, 0x4C, 0x25, 0x5A, 0xE9, 0xC5, 0x05, 0x93, 0x46, 0x52, 0xFE, 0xAC, 0xD3, 0x2E, 0x82, 0xBF, 0xA5, 0x5C, 0x05, 0xA3, 0xD3, 0x70, 0x4B, 0x71, 0x07, 0xB3, 0x71, 0x15, 0xB7, 0x1C, 0x67, 0xE4, 0x91, 0x86, 0x2D, 0x8E, 0x5C, 0x2A, 0xC8, 0x70, 0x25, 0x1C, 0xFF, 0x4F, 0x8D, 0xF6, 0x1E, 0x4C, 0xE7, 0xEA, 0x54, 0x8D, 0xA6, 0xC7, 0x5D, 0x2A, 0x2D, 0x7A, 0xA8, 0xCE, 0x02, 0x8B, 0x22, 0x4D, 0x75, 0xD5, 0x72, 0x4C, 0x9B, 0x12, 0x9A, 0x38, 0xDE, 0x8C, 0x9C, 0xC2, 0x5C, 0xD9, 0x18, 0x8E, 0x29, 0xEB, 0x35, 0xF0, 0x14, 0xAE, 0xAB, 0x56, 0x0B, 0xF4, 0xC1, 0x0C, 0x6C, 0x31, 0x78, 0x0E, 0x93, 0x98, 0x8C, 0xC5, 0x2C, 0xAC, 0xC4, 0x76, 0x9C, 0xB7, 0x56, 0x8B, 0x9F, 0xDE, 0xCA, 0x39, 0x29, 0xCE, 0x4C, 0x09, 0xBF, 0x6F, 0xAC, 0x8B, 0x74, 0xF5, 0xBC, 0xCB, 0x85, 0xF9, 0xBD, 0xD6, 0x9C, 0x65, 0xDA, 0x35, 0x3F, 0xA1, 0x12, 0xB7, 0x6E, 0x2A, 0x4B, 0xF5, 0x63, 0x07, 0x9F, 0x56, 0xF5, 0xA4, 0x22, 0xEC, 0xAD, 0xF6, 0x9E, 0xC1, 0x70, 0xFA, 0xDD, 0x19, 0xE3, 0x49, 0xC9, 0xD4, 0x8C, 0x51, 0x9D, 0x51, 0x24, 0x5A, 0xBA, 0xCF, 0xD7, 0xFB, 0x54, 0xCA, 0xF9, 0x50, 0xDB, 0xE9, 0x4F, 0x63, 0xCC, 0x2A, 0x5A, 0xAB, 0xB0, 0xAB, 0xC1, 0x1D, 0x62, 0x46, 0xE0, 0x2A, 0xE4, 0x68, 0x09, 0xAF, 0x45, 0xCF, 0x91, 0x25, 0x63, 0x31, 0xB5, 0xD8, 0x48, 0x25, 0x5D, 0x54, 0x68, 0x96, 0x7C, 0xDE, 0xB7, 0xE6, 0x4B, 0xBE, 0xCE, 0xA3, 0x30, 0x49, 0xBB, 0x7E, 0xE0, 0xFE, 0xFE, 0x35, 0x1A, 0xCB, 0x8F, 0x64, 0x99, 0x5C, 0xE0, 0xA6, 0x22, 0x2A, 0xF0, 0x49, 0x16, 0x3B, 0x5A, 0xB8, 0x0F, 0x7B, 0xC3, 0x70, 0x54, 0x80, 0x3D, 0xA5, 0x24, 0x96, 0x91, 0x6B, 0x8C, 0x74, 0x63, 0x9A, 0xA4, 0x84, 0x61, 0x85, 0xA9, 0xC3, 0x99, 0xD4, 0x47, 0x6A, 0x9B, 0xCA, 0x96, 0x26, 0x82, 0x1D, 0xC6, 0x3F, 0x8A, 0x63, 0x07, 0xDB, 0x70, 0x15, 0xAD, 0x15, 0xD8, 0xF0, 0x94, 0x74, 0xAC, 0x46, 0x4F, 0x7C, 0xA4, 0xDD, 0x31, 0x2C, 0x5C, 0x49, 0xF7, 0x87, 0xBC, 0x86, 0x0F, 0x49, 0x93, 0x6A, 0x72, 0x3D, 0x47, 0xAB, 0x52, 0x3B, 0x7B, 0x71, 0x92, 0x7E, 0xFA, 0xBD, 0x6B, 0xEB, 0x91, 0x52, 0x95, 0x96, 0xEB, 0xF8, 0x44, 0xA1, 0xD5, 0xB7, 0x80, 0x4A, 0xCE, 0x47, 0xF2, 0xF4, 0x45, 0x9B, 0x7E, 0x5D, 0xD2, 0x1C, 0xA4, 0x83, 0x76, 0x94, 0x90, 0x72, 0x53, 0xA1, 0x52, 0xCC, 0x75, 0x42, 0xCF, 0xE6, 0x41, 0xBB, 0x92, 0xEE, 0x6C, 0x86, 0x98, 0x62, 0xAD, 0x62, 0xED, 0x5B, 0xBB, 0x39, 0xCE, 0x10, 0x37, 0x0E, 0x73, 0x3B, 0xF4, 0x48, 0xC7, 0xD0, 0xCE, 0x2D, 0xEC, 0xC5, 0xA3, 0xFE, 0xA3, 0x8C, 0x87, 0x02, 0xCD, 0x8D, 0xCF, 0xF3, 0x30, 0xAB, 0x31, 0xA9, 0x93, 0xD7, 0x21, 0x63, 0xB0, 0xA5, 0x95, 0x9F, 0x65, 0x31, 0x3E, 0x44, 0x89, 0xA3, 0x8B, 0xD1, 0x94, 0xD2, 0xC3, 0x30, 0xCA, 0xAB, 0xA6, 0x3F, 0x55, 0xCD, 0xA8, 0xE9, 0xC6, 0xCE, 0xD6, 0xAA, 0x7D, 0xC8, 0xA0, 0x56, 0x03, 0x35, 0xC9, 0x8C, 0x4A, 0x25, 0xCD, 0xF5, 0x3E, 0xD7, 0x3F, 0x8E, 0x54, 0x3C, 0x81, 0x8C, 0x39, 0x9A, 0xCA, 0x55, 0xC3, 0x69, 0x2A, 0x33, 0xCC, 0x64, 0xF2, 0x47, 0x2E, 0x81, 0x13, 0x22, 0xF0, 0x29, 0x7A, 0x1B, 0x7C, 0x51, 0xFB, 0x52, 0xE9, 0x1E, 0x0A, 0x34, 0xD7, 0x47, 0xB5, 0x29, 0xEB, 0x64, 0xAC, 0x8F, 0xD2, 0xED, 0x21, 0x5D, 0xDD, 0x58, 0xF4, 0x10, 0xE2, 0xC9, 0x59, 0xF8, 0xAE, 0x86, 0xC8, 0x6F, 0xCD, 0xA6, 0x9B, 0x6C, 0x04, 0xA7, 0x25, 0xFC, 0xDB, 0xBE, 0x52, 0x3F, 0x7D, 0x17, 0x3C, 0x9C, 0x28, 0xEA, 0xAF, 0x65, 0x8C, 0xAB, 0x18, 0x5C, 0x7E, 0xD6, 0x1F, 0xA6, 0xD7, 0x8D, 0x4D, 0x25, 0xB5, 0x2F, 0x32, 0x24, 0x08, 0xFC, 0x28, 0xCC, 0x93, 0x98, 0x07, 0xE7, 0x2D, 0xC0, 0x0E, 0x21, 0xBD, 0x71, 0x64, 0x2F, 0xC6, 0xB0, 0x77, 0x0D, 0x6B, 0x70, 0xFC, 0x1D, 0x43, 0xC2, 0x9C, 0x70, 0xF2, 0xE4, 0xF3, 0x3C, 0xCC, 0xE8, 0xE4, 0x7A, 0x5B, 0xA1, 0x84, 0x03, 0xEE, 0x64, 0xAA, 0x7D, 0xDE, 0xA2, 0x85, 0xC7, 0x58, 0x16, 0x65, 0xAD, 0x0A, 0xCA, 0xF1, 0xED, 0x29, 0xD5, 0xE9, 0x11, 0x44, 0xE8, 0x43, 0x9B, 0x22, 0x9C, 0xEF, 0x93, 0xFF, 0x0C, 0x5A, 0x32, 0x3E, 0x92, 0x31, 0x8C, 0x4F, 0x22, 0xF8, 0x4D, 0xAE, 0x89, 0xFC, 0x0C, 0xED, 0x47, 0xFD, 0xDB, 0x8A, 0x53, 0x44, 0x8E, 0xF3, 0x2B, 0xFA, 0xE6, 0x8D, 0x59, 0xD8, 0x2A, 0xC2, 0xCA, 0x88, 0xFC, 0x04, 0xED, 0x95, 0x6D, 0x68, 0xCE, 0x98, 0x29, 0x5C, 0xF5, 0xAC, 0x92, 0x1E, 0x55, 0x69, 0xA9, 0xCF, 0xA3, 0x22, 0x2D, 0xF9, 0x41, 0xEB, 0x51, 0x41, 0xA2, 0xEB, 0x99, 0x72, 0x8D, 0x56, 0xF2, 0xC8, 0x16, 0xAA, 0x25, 0xF2, 0xB0, 0xC0, 0xD3, 0xAA, 0xB0, 0x02, 0x8B, 0x8E, 0xD6, 0x57, 0x5F, 0xCD, 0x70, 0x6F, 0x5B, 0x77, 0x36, 0x57, 0x85, 0xEC, 0x94, 0xD2, 0xDF, 0xB2, 0xEC, 0xD1, 0x33, 0xF6, 0xA1, 0x5C, 0x7A, 0x6F, 0xF8, 0xED, 0xB4, 0xA9, 0x53, 0x78, 0xF4, 0x65, 0xC0, 0x61, 0x6C, 0xC4, 0xAF, 0x60, 0x2B, 0xC7, 0xD1, 0xC5, 0x16, 0x45, 0x3C, 0x97, 0xD3, 0xD8, 0x85, 0xC1, 0xCE, 0x39, 0x18, 0x8B, 0xA5, 0xEE, 0x3A, 0x4A, 0xD7, 0x3E, 0xAD, 0x8C, 0x8B, 0x74, 0x99, 0x15, 0x28, 0xD5, 0x28, 0xB2, 0x8D, 0x5C, 0x8D, 0x53, 0xDD, 0x1F, 0x42, 0xD3, 0x9B, 0x87, 0x8C, 0x9F, 0xC0, 0x2E, 0xF4, 0xD0, 0x3A, 0x4D, 0x6B, 0x6E, 0x7C, 0x7B, 0x9E, 0xB7, 0x44, 0xE2, 0x18, 0xF6, 0x92, 0xC4, 0xEA, 0xAB, 0xED, 0x0C, 0x21, 0xD6, 0xAF, 0x5A, 0x59, 0x8E, 0x12, 0x4D, 0xA7, 0x7B, 0xE7, 0xFD, 0xBA, 0x82, 0x0F, 0x6E, 0x10, 0xCA, 0x0D, 0x33, 0x71, 0x9B, 0x88, 0x27, 0x88, 0x1E, 0x83, 0x1E, 0xEA, 0x69, 0x0C, 0xD7, 0x18, 0x9A, 0x8F, 0x16, 0x60, 0xA9, 0x6C, 0x9D, 0xFA, 0xAC, 0xF9, 0x90, 0xED, 0x9D, 0x36, 0x61, 0x40, 0xB9, 0xE6, 0x85, 0x27, 0x3F, 0x72, 0x4D, 0x8E, 0xF4, 0x72, 0x39, 0x52, 0xA3, 0x1D, 0xDC, 0xC6, 0xD6, 0xAA, 0xB7, 0xD1, 0x59, 0xFB, 0xD2, 0x6A, 0x2D, 0xBD, 0x83, 0xE4, 0xF2, 0xEE, 0x0B, 0xA5, 0x64, 0xA4, 0xB4, 0xDC, 0xD5, 0x0E, 0x0B, 0xE4, 0x56, 0x50, 0xE4, 0x77, 0x1B, 0x74, 0xF5, 0x28, 0x88, 0x06, 0x3E, 0x32, 0x07, 0xBB, 0xF0, 0x18, 0x21, 0xFD, 0x10, 0xCC, 0x0C, 0x5B, 0xE6, 0xA0, 0x05, 0x7B, 0xAB, 0xD1, 0x06, 0x23, 0xE8, 0x0F, 0x53, 0xAA, 0x41, 0x69, 0xD6, 0xFA, 0x90, 0x2A, 0x47, 0xE3, 0x4E, 0xA8, 0xD6, 0x50, 0x93, 0x36, 0x0C, 0xE7, 0xD6, 0x78, 0x2C, 0xA7, 0x54, 0xB2, 0x20, 0x19, 0x65, 0xE3, 0xC6, 0x71, 0x39, 0x17, 0xF7, 0x6F, 0x85, 0x45, 0xEB, 0x5B, 0x9A, 0x6A, 0xD6, 0x77, 0xDD, 0xD1, 0x1C, 0x47, 0x63, 0x06, 0xFF, 0xA8, 0xA2, 0x2E, 0x62, 0x26, 0x19, 0xEA, 0x26, 0x43, 0x11, 0x4F, 0x8C, 0x56, 0xB4, 0x4B, 0x0D, 0xC1, 0xE3, 0x72, 0x8A, 0x68, 0xE1, 0xC4, 0x31, 0x68, 0x48, 0xF9, 0x68, 0x21, 0x75, 0xD0, 0x1A, 0x83, 0xF9, 0xBE, 0xF9, 0x25, 0xA5, 0xDA, 0x38, 0x9F, 0x47, 0x35, 0x9B, 0xBF, 0x70, 0x7C, 0x29, 0x07, 0xE2, 0x5B, 0x74, 0x53, 0xAF, 0xE8, 0x6F, 0xB5, 0x28, 0x9C, 0x0E, 0x1B, 0x8D, 0xAC, 0x6F, 0xC5, 0x15, 0x7D, 0x79, 0xE6, 0xD2, 0xC5, 0x51, 0x58, 0xF2, 0x39, 0x9C, 0x1D, 0x63, 0x08, 0x59, 0x0C, 0x97, 0xC3, 0xF1, 0x6F, 0x39, 0x93, 0xFC, 0xD3, 0x42, 0x3B, 0xBE, 0x25, 0x5B, 0x39, 0x91, 0x61, 0x9B, 0x03, 0x3D, 0xA4, 0x4C, 0xC6, 0x4A, 0x36, 0x2F, 0xCA, 0x9F, 0x7D, 0x93, 0x97, 0x38, 0x0C, 0x60, 0xAE, 0x52, 0x3E, 0x45, 0xA1, 0x76, 0x9C, 0x0F, 0xF9, 0xDC, 0xAB, 0x0F, 0x12, 0x9A, 0x54, 0xBE, 0x15, 0x9B, 0xF2, 0xB1, 0xE2, 0x20, 0x73, 0xB8, 0x8D, 0xB5, 0xB3, 0x92, 0xDE, 0x8B, 0xAB, 0x7C, 0x9B, 0x4B, 0xF9, 0xFD, 0xE7, 0xC3, 0x08, 0x67, 0x75, 0x6E, 0xB4, 0x96, 0xBD, 0x87, 0xD3, 0xFD, 0x09, 0xFA, 0x9D, 0xB0, 0x4E, 0xBF, 0xBF, 0xD9, 0x6D, 0x30, 0x5D, 0x92, 0xEC, 0xF9, 0x14, 0x11, 0xFA, 0x62, 0x79, 0x29, 0x02, 0x10, 0xAF, 0xF7, 0x52, 0xEF, 0x3F, 0xBF, 0xF3, 0x46, 0x33, 0x82, 0x83, 0x9C, 0xA1, 0x6C, 0x5A, 0x45, 0xDA, 0x06, 0x9F, 0xDB, 0xA0, 0x88, 0x81, 0xFA, 0xB0, 0x78, 0x0A, 0x35, 0xA5, 0xB3, 0x1F, 0x23, 0xB8, 0x73, 0xA9, 0x24, 0x69, 0x90, 0x70, 0xB2, 0x1E, 0xEE, 0xED, 0x97, 0x9A, 0x8B, 0xC7, 0xE5, 0xA9, 0x8B, 0x76, 0xD6, 0xE5, 0xAD, 0x33, 0xEB, 0xAD, 0x15, 0xBE, 0xF5, 0x5C, 0x5C, 0xB2, 0xE1, 0x6E, 0x27, 0xBE, 0xD9, 0x6D, 0x42, 0xC1, 0xAF, 0xC5, 0x41, 0x08, 0x65, 0xBC, 0x4C, 0xEA, 0x04, 0x3E, 0xDF, 0x1A, 0x35, 0x99, 0xD5, 0x82, 0x21, 0xC5, 0x8E, 0x7B, 0xC1, 0xFD, 0xCB, 0xBF, 0xFE, 0xF3, 0xBF, 0xFF, 0xF3, 0x3F, 0xFC, 0xDB, 0x3F, 0xFC, 0xDD, 0x5F, 0x7F, 0xFF, 0xFB, 0xCB, 0x5F, 0xFE, 0x03, 0xBB, 0x17, 0x80, 0x14, } }; static VipsProfileFallback vips__profile_fallback_p3 = { "p3", 480, { 0x78, 0xDA, 0x7D, 0x90, 0x33, 0xC0, 0x55, 0x01, 0x14, 0xC7, 0x7F, 0xCF, 0xF6, 0xDB, 0xB2, 0x6D, 0xDB, 0xB6, 0xB5, 0x3C, 0x9B, 0xF7, 0xDE, 0xB0, 0x86, 0x25, 0x9B, 0x5B, 0x4B, 0xB6, 0x9B, 0x7A, 0x63, 0x5B, 0x6E, 0x8B, 0x7B, 0x36, 0x2F, 0x3E, 0xFB, 0x4C, 0xC7, 0x7F, 0x80, 0xEE, 0x75, 0x2E, 0x9A, 0x17, 0x8D, 0x9D, 0x21, 0x5F, 0x90, 0x84, 0xA5, 0xB3, 0xA6, 0x76, 0x5E, 0xBD, 0x66, 0x6D, 0x67, 0xCB, 0x5B, 0x0C, 0x04, 0xB1, 0xE1, 0xA6, 0x43, 0x38, 0x2A, 0x96, 0x16, 0x2C, 0x9B, 0xB9, 0x1C, 0x40, 0x0C, 0x6F, 0x14, 0xA3, 0x92, 0x90, 0xA3, 0x61, 0xF0, 0xFD, 0x39, 0x3A, 0x80, 0x27, 0x03, 0x52, 0xE1, 0x42, 0x6C, 0xCB, 0xDB, 0x33, 0xC2, 0xCE, 0x1D, 0x93, 0x7E, 0xF4, 0x98, 0x78, 0xF7, 0xC0, 0xFB, 0xEE, 0xCF, 0x2F, 0xD1, 0x76, 0xD8, 0x63, 0x71, 0x31, 0x0A, 0xFC, 0x05, 0xBA, 0x47, 0x4B, 0x82, 0x04, 0xBA, 0xCE, 0x40, 0xD7, 0x8D, 0x52, 0x49, 0xCB, 0xA7, 0x03, 0xC1, 0x68, 0x2A, 0x1C, 0x53, 0xF3, 0xD5, 0x40, 0x7F, 0x41, 0x25, 0xA8, 0xE6, 0xDB, 0x80, 0x60, 0xB2, 0x3A, 0x3F, 0xA6, 0xE5, 0x91, 0xEA, 0xFC, 0x82, 0x96, 0x0B, 0xCB, 0x97, 0x4E, 0x53, 0xF3, 0x0A, 0xD0, 0x39, 0xD9, 0x20, 0x8F, 0x34, 0xC8, 0xF3, 0xB9, 0xF5, 0x51, 0x00, 0x40, 0x07, 0x38, 0xE3, 0x85, 0x15, 0xCB, 0x00, 0x2B, 0xD0, 0x1E, 0x91, 0xC5, 0x0C, 0x63, 0x5A, 0x2B, 0x3B, 0x66, 0x6D, 0x87, 0x69, 0x4C, 0x63, 0x30, 0x68, 0x7E, 0x35, 0xF5, 0x41, 0x4C, 0x0C, 0x1B, 0x0A, 0x80, 0xCE, 0x39, 0x15, 0x4C, 0x2F, 0x65, 0xF9, 0x4B, 0x0F, 0xB0, 0x1C, 0x84, 0x7F, 0xFB, 0x64, 0xF9, 0xCF, 0x49, 0x59, 0xFE, 0xBF, 0x10, 0x0C, 0x27, 0xA0, 0x12, 0xAC, 0xBF, 0xDF, 0xFA, 0x0A, 0x26, 0xDC, 0x03, 0xA8, 0xEF, 0xCD, 0x55, 0xEB, 0xAB, 0xA3, 0xC0, 0x7E, 0xB3, 0xBE, 0xD7, 0x7B, 0x34, 0xF8, 0xEC, 0x70, 0x7F, 0x53, 0x29, 0x2C, 0x84, 0x01, 0x30, 0x00, 0xFA, 0x44, 0x1A, 0x3E, 0x9F, 0x06, 0xD7, 0x1A, 0x08, 0x3C, 0x04, 0xFB, 0x3A, 0x05, 0x79, 0x5F, 0x5E, 0x41, } }; static VipsProfileFallback vips__profile_fallback_sGrey = { "sGrey", 360, { 0x78, 0xDA, 0x7D, 0x8F, 0x23, 0x60, 0x25, 0x00, 0x18, 0x80, 0xBF, 0x67, 0xFB, 0xB5, 0x33, 0xCB, 0xF9, 0xAE, 0x9F, 0x6D, 0xB3, 0x3C, 0xDB, 0x7E, 0xAF, 0xF7, 0x43, 0x0F, 0xE7, 0xD5, 0xA5, 0x99, 0x71, 0x69, 0x5E, 0x99, 0x11, 0x67, 0xFB, 0xA1, 0xCD, 0xBF, 0x0D, 0x10, 0x78, 0x02, 0xF6, 0x60, 0x5C, 0x7C, 0x1C, 0x82, 0xA1, 0x44, 0xEC, 0xC1, 0xEB, 0x5B, 0x9F, 0x3E, 0x7E, 0xFA, 0x7C, 0x5C, 0x36, 0x82, 0x08, 0x33, 0x0A, 0xB4, 0x1C, 0xB1, 0xDA, 0xE3, 0x91, 0x67, 0x6F, 0xEE, 0xBF, 0x05, 0x88, 0x5B, 0xD3, 0x71, 0x7B, 0x22, 0x16, 0x60, 0x1B, 0x2C, 0xF6, 0x20, 0x00, 0xE8, 0xBC, 0xE0, 0xB1, 0x86, 0x1C, 0xB5, 0x35, 0x36, 0x79, 0xED, 0xFF, 0x72, 0x5D, 0x4B, 0xCE, 0x5B, 0xE9, 0xFE, 0x3F, 0xD1, 0xCC, 0xC1, 0x20, 0x71, 0x38, 0xE3, 0x76, 0xA0, 0x09, 0x38, 0x6D, 0x8F, 0xC4, 0x12, 0xC0, 0x18, 0x70, 0x32, 0x9D, 0x88, 0x14, 0x6D, 0x81, 0x1C, 0x30, 0xDB, 0x3D, 0x56, 0x07, 0x08, 0x0E, 0x03, 0xE7, 0xFD, 0x6F, 0x5F, 0xDF, 0x01, 0xC1, 0x43, 0xE0, 0x78, 0x30, 0x90, 0xB4, 0x03, 0x00, 0x02, 0x40, 0xED, 0x0C, 0xBD, 0x7B, 0x03, 0xC8, 0x81, 0xC3, 0xC4, 0x79, 0x40, 0x8C, 0xEC, 0x3E, 0x35, 0x52, 0xE0, 0x30, 0x77, 0x8A, 0x78, 0x19, 0x4A, 0x3F, 0xEF, 0xFC, 0x25, 0xEE, 0xBA, 0x76, 0x15, 0x00, 0x81, 0xFA, 0x06, 0x48, 0xFA, 0xF3, 0xF9, 0xB9, 0xB3, 0x20, 0xFB, 0x06, 0x1B, 0x3F, 0xF2, 0xF9, 0xB5, 0x5F, 0xF9, 0xFC, 0xC6, 0x6F, 0x10, 0xF5, 0x41, 0x53, 0x34, 0x62, 0x8D, 0x59, 0x01, 0x10, 0x01, 0x42, 0x97, 0x17, 0x66, 0xCB, 0x40, 0xF3, 0x09, 0x4C, 0x6D, 0xA0, 0xFC, 0x52, 0x00, 0xD8, 0x1E, 0x49, 0xEC, } }; static VipsProfileFallback vips__profile_fallback_sRGB = { "sRGB", 480, { 0x78, 0xDA, 0x7D, 0x90, 0x33, 0x60, 0x1D, 0x01, 0x1C, 0x87, 0xBF, 0x67, 0xD4, 0xB6, 0xB1, 0xD4, 0xEE, 0x52, 0x6B, 0xA9, 0x8D, 0xE5, 0xD9, 0xBC, 0xBB, 0x6A, 0xAD, 0xBB, 0xD4, 0xDA, 0x6A, 0x77, 0x7E, 0xDD, 0xCA, 0xEC, 0xB1, 0x9D, 0x2D, 0x63, 0xEC, 0x1C, 0x62, 0x7F, 0xD3, 0xDF, 0xF8, 0x81, 0xAE, 0x22, 0xE2, 0x8E, 0x8A, 0xC6, 0xC5, 0x10, 0x8D, 0x49, 0xC2, 0xC9, 0x43, 0x7B, 0x17, 0x9F, 0xBF, 0x70, 0x71, 0xB1, 0xA5, 0x0A, 0x03, 0xD3, 0xB1, 0x31, 0x91, 0x05, 0x4E, 0xB7, 0x98, 0x38, 0x72, 0xEA, 0xE0, 0x69, 0x00, 0xD1, 0x79, 0x55, 0x74, 0x4B, 0x42, 0x84, 0x81, 0xD0, 0x98, 0x87, 0x0E, 0x20, 0x7B, 0x4D, 0xC0, 0x19, 0xF3, 0x5C, 0xAF, 0xFE, 0x7D, 0xF6, 0xE2, 0x4E, 0x5D, 0xEA, 0xE6, 0xB2, 0xDB, 0x67, 0x0E, 0x36, 0x1D, 0xFB, 0xC6, 0xD8, 0xD8, 0x3D, 0x5E, 0xD1, 0x0D, 0xB4, 0x03, 0xCB, 0xDD, 0x09, 0x41, 0x02, 0xDD, 0x62, 0x60, 0xE9, 0x55, 0x29, 0xA1, 0xD9, 0xFB, 0x81, 0xE9, 0xEE, 0x80, 0xD3, 0x03, 0xBA, 0xF3, 0xC0, 0x6A, 0x41, 0x3D, 0x10, 0x74, 0xB7, 0xB4, 0xB8, 0xBF, 0xDB, 0x7E, 0xA5, 0xD9, 0xAE, 0x6E, 0xFB, 0x87, 0x66, 0x0B, 0xA7, 0x4F, 0xEE, 0x03, 0xDD, 0x1F, 0x60, 0xB1, 0x7F, 0x80, 0xED, 0x1A, 0x60, 0x47, 0x23, 0x97, 0xDD, 0x00, 0x80, 0x0E, 0x18, 0xEF, 0x8D, 0x9D, 0x39, 0x05, 0x58, 0x81, 0xF9, 0x88, 0x9C, 0xE4, 0x10, 0x7B, 0x47, 0xA9, 0x31, 0x6B, 0x35, 0xEC, 0x63, 0x1F, 0xEB, 0x41, 0xD3, 0x6B, 0xA8, 0x0E, 0xA2, 0x6F, 0xD3, 0x46, 0x00, 0x74, 0xE3, 0x77, 0x81, 0xA9, 0x54, 0x96, 0xEB, 0x56, 0x82, 0xE5, 0x11, 0x74, 0x3C, 0x91, 0xE5, 0xB6, 0xB7, 0xB2, 0xDC, 0xF1, 0x0E, 0x0C, 0x25, 0xF0, 0x27, 0xD9, 0xDF, 0x1F, 0x7F, 0x03, 0xDB, 0x6B, 0xC1, 0xF0, 0xB0, 0x3F, 0xE6, 0x7A, 0x01, 0x3F, 0xEF, 0xC3, 0xEC, 0xA2, 0xFE, 0xD8, 0xF2, 0x37, 0x30, 0xE9, 0x36, 0xA4, 0xD2, 0x12, 0x4E, 0xC1, 0x09, 0x80, 0x01, 0xD0, 0xFB, 0x82, 0x50, 0xFB, 0x19, 0x26, 0x5C, 0x80, 0x69, 0x19, 0x60, 0xBF, 0xA4, 0x00, 0xE3, 0xE2, 0x5F, 0xB1, } }; VipsProfileFallback *vips__profile_fallback_table[] = { &vips__profile_fallback_cmyk, &vips__profile_fallback_p3, &vips__profile_fallback_sGrey, &vips__profile_fallback_sRGB, NULL }; libvips-8.15.1/libvips/colour/profiles.h000066400000000000000000000004431454007373500202360ustar00rootroot00000000000000/* The fallback profiles, coded as a set of uchar arrays, see wrap-profiles.sh */ #include typedef struct _VipsProfileFallback { const char *name; size_t length; const unsigned char data[]; } VipsProfileFallback; extern VipsProfileFallback *vips__profile_fallback_table[]; libvips-8.15.1/libvips/colour/profiles/000077500000000000000000000000001454007373500200645ustar00rootroot00000000000000libvips-8.15.1/libvips/colour/profiles/cmyk.icm000066400000000000000000035261541454007373500215410ustar00rootroot00000000000000largl prtrCMYKLab  (5acspMSFT-argldesc8icprtgwtpt bkpt clrt4A2B1A2B0A2B2B2A1ѼB2A0ѼB2A2xLѼgamtJ.targx 3DevDx 3CIEDx 3descChemical prooftextCreated by Graeme W. Gill. Released into the public domain. No Warranty, Use at your own risk.XYZ QXYZ $:clrtCyanx[7KMagenta#͒|Yellow|&Black%o{mft2 Z gt(5BN[h  t ' 3 ? K W cn z,7BMX cmx*4?IS] L !!T!!""[""# #b##$'$h$$%-%o%%&4&v&&':'|''(A(())G))* *M**++R++,,W,,--]--. .a../%/f//0)0j001-1n11212r22343u33484x445:5{556=6}667?7788A8899B99::D::;;E;;<>E>>??D??@@=@w@@A%A_AAB BFBBBC,CfCCDDLDDDE2EkEEFFPFFFG5GnGGHHRHHHI6IoIIJJRJJJK5KnKKLLPLLLM2MjMMNNLNNNO-OeOOP PEP}PPQ%Q]QQRR=RuRRSSTSSST2TjTTUUHUUUV&V]VVWW:WrWWXXNXXXY+YbYYZZ>ZuZZ[[Q[[[\-\d\\] ]@]w]]^^S^^^_._e__` `H```a9avaab+bgbbccYccddJddde;exeef,fiffggZgghhJhhhi;iwiij+jgjjkkXkkl lHlllm9mummn)nfnnooVoop pGpppq7qtqqr(rdrrssUsst tEtttu6uruuv&vcvvwwSwwxxDxxxy4ypyyz$z`zz{{Q{{||A|}||}2}n}}~"~^~~Nƀ?|3p'dރXӄMDžB7t,j"`ۉVъMȋD;y3q+i#aސZבTВMʓ GĔB<{8v3r/n,k)h&f$d"b!a `XΡ D0kXϤ E3n \ӧJ8s&b٪Qɫ@|0l[ӮKî;w*fޱVβ E5q%`صPȶ?{/jZѹ I8s&bڼQȽ?{.iX Bz#\=u®VÏ7oĨPň1iơIǁǹ*bȚ Bzɲ"Zʒ:r˪R̊2jͣK΃λ+cϛ C|д$\є>O>>??R??@@W@@AAaAAB'BjBBC0CrCCD9D{DDEAEEFFJFFGGRGGHHYHHIIaIIJ&JhJJK.KoKKL4LvLLM;M}MNNBNNOOHOOP PNPPQQTQQRRZRRSS_SST#TdTTU(UiUUV-VnVVW1WrWWX5XvXXY9YzYYZ=Z~Z[[@[[\\D\\]]G]]^ ^I^^_ _L__``S``aacaab0btbbcAccddSdde!eeeef3fxfggFgghhZhhi)iniij=jjk kRkkl"lgllm7m|mnnMnnoocoop3pypqqJqqrrarrs2sxsttJttuubuuv4vzvwwMwwxxfxxy9yyz zRzz{%{l{{|@||}}Z}}~.~u~J׀\܁]ނ_ a#c%f)j,m1r5v:{?ŒEȍ KώR֏Yݐa'j0r:|Dɕ NԖYߗ"e.q;~šHϛVݜ!e0t@ȟ PؠP3lޢO3lߤQä6oTǧ9sY̩?y%_ӫ F-gۭN­6pX̰@z(bײK4nW̵@{)dطL5oW˺?y&`ԼG.h۾N¾5nJ|FxBt§ >pâ9kĝ4fŘ.`ƒ)[Ǎǿ#UȆȸNɀɲGyʫ@rˤ9k̜1c͔)[Όξ!RσϵI{Ь@qѣ6hҙ-^ӏ"TԅԶIzի >o֠3dו(Y؊ػM~ٯBrڣ6fۗ)Z܋ܻM~ݮ@pޡ2cߓ6| O#i<U'm?W(n?V'l< R!f6{J],q? Qc0uBRc/s> M\'j5xDR`*n8{FS`*n 8 {  E  Q  ^ ( k 4wA MY"e.q:}FQ]&i1t<HS^&h1s 5 p !"!]!!""J"""#7#r##$#$^$$%%K%%%&7&r&&'#'^''((J((()6)q))*"*]**++H+++,4,o,,--Z--. .E.../1/l//00W0011B1}112.2i2233T3344@4{445+5f5566R6677=7x778(8c8899N999:::t::;%;_;;<>Z>>? ?D???@0@m@@A#A`AABBSBBCCECCCD7DtDDE)EfEEFFWFFG GIGGGH:HvHHI*IgIIJJWJJK KGKKKL7LsLLM'McMMNNRNNOOAO}OOP0PlPPQQZQQR RHRRRS6SrSST$T`TTUUMUUUV:VuVVW(WcWWXXQXXYY?YzYYZ-ZiZZ[[X[[\ \G\\\]6]r]]^&^b^^__R__``F``aaBaaab?b~bbc;c{ccd9dxdde6eueef4fsffg2gqggh0hphhi/ioiij.jnjjk.knkkl.lnllm/mommn0nqnno2oroop4puppq7qxqqr:r{rrs>ssttBttuuGuuv vLvvwwRwwxxXxxyy^yyz#zezz{*{l{{|2|t||}:}|}~~B~~ KπNˁ GÂ@~9x3r.l)h%d!`߉]܊[ڋZٌYٍYَYڏZې\ޑ_"c&g+l0r7y>˜Fʙ OԚXݛ c+m6yBȟ NՠTѡMʢGģA;z6u1p-l*i'f$c!`߬]ۭY׮TүO̰ JDZD={6t/m'e\طSθ IĹ?}5r)g[սOȾB5q+o9}GŠSÖ_Ģ(kŮ3vƸ>ǀHȊQɓZʜ!c˥)k̭1s͵9{ν@ςGЉ NяTҖZӛ`ԡ$eէ)j֬.oױ3tص8yٺ<}ھ@ہD܅G݈ Kދ NߎZ3| T-uN&nFe<[2z P&nDa6~ S(oD_3zN"h<V)oBZ-sE\.tGa4zN!g: R%k=  U ' m ?  V ( m >U&k< R"h8}Mb1wFZ)n= Q e3xF  H !&!^!!""<"t""##Q###$/$f$$% %D%{%%&!&X&&&'5'm''((I((()&)]))**:*q**++M+++,),`,,--<-s--..O.../*/a//00<0s0011N1112)2`2233:3q3344K4445%5\556676m6677H7778$8[888969m99::I:::;&;];;<<:,>c>>? ?A?x??@@V@@@A4AkAABBIBBBC&C]CCDD:DqDDEENEEEF+FbFFGG?GvGGHHRHHHI.IeIIJ JAJxJJKKTKKKL/LfLLM MAMxMMNNSNNNO.OdOOPP?PuPPQQOQQQR)R`RRSS9SpSSTTITTTU#UZUUUV5VlVVWWHWWWX%X]XXYY;YrYYZZRZZZ[2[j[[\\K\\\],]e]]^^H^^^_+_d__``C`w``aaHa}aabbObbbc"cWcccd+d`ddde3eheeff=frffggFg{gghhPhhhi%i[iiij0jfjjkkj€Frʁ"Nz҂+W܄5a?lŅJwІ*V݈ 6cCpʉ$Q~؋3`Cp̌'Uߎ ;iŎ"P~ې 8gŐ"Qޒ rۢDyKQ"V&Z¦*^ŧ-`Ȩ/bɩ0cʪ0cʫ0cɬ.aǭ,^î(Z"TM~Duس :k̳.^ QBrѷ1aN~ܹ :iǹ%T߻|'{}ю~}YVm5jgB.ih~"%}I|h}}~͍/gCF-%~|6J||}ΕE~gZMCAx.2Q%1u{@b{ϭ | 6[|0}蕃g~ȎtDE.ʁ%Y{^3x{߷TH{||+(}V{K\0- h|,'|;$f | І:؂ uҀYxc @z ؄fЖ]Nw5~'|R v{tȜ݌zH|f<N 5SC&}} 0L{ѪkڜĚǘ?GxFdGtyMʇg5,&;}L{۪Rѥ*査w Lqb/KG4)&1} 8p{Ĩ R[>sv-abi`LӐ?4ڄr&~P ʆ{hNtș墈a.Lq=5څ']~!{Lԟ/s䙺a+J5'K"P|2R||{T~!Bzp y_kDyI˗z&2nz'|jy"+yϝûʂ2մ ~o}^|ItE|u2 {&"z zd<۲}rcnCf\qbG%2(@}%~{rtz|rl٣[Ʌ.H7V1~$y1|59{"g1C̱|Mɑk.lZG3;1荙)$S |{0؜={/1ojZ FG<1q_l$~} {(ȪZSzꞺj#2)ZBGj2/v%. }p+{ױͱ!zTEi{X~G쎊2&@} ]{=3ycYhW ֚aDQx3 &~W!{wI}jsZ{p,zdb)y=T|xCIqy4/Cy^$uyH+y7ƾrM}c|[T{VC{=..z#.ycyƚ:څpq!bS7HB}-ۑ{"Oz zh{O4p0aI)QUxA6-}J!{'fhz94jpbZ`ͫQfGA_-Ð~!{s)zHXo`#]P4 A|N$.$#"5h{zFðoٚR_9.Q͏AO.ď#3`|W>zP ·I|n.J^PǢzhAO/?^>$n|ˈQz\8"~7Ql`TO\>q/k;%ċZ}l!wz釆B|yziLy\}x:LRxr<x,ǔx"xɊ3xqx_h̽]}6\3{lMyz<šzJ*y IJy؊xՅ@x6?hؼ| \H]Lܪj~ vv޵wdz ~yV38zHe|oB"~5.?f%́ =u*І̱v4|w#x豮zUHc|3XA~\.& c]u=˵vvz>w0Bx0zKa|? 1.,&r*Cxz5xzG{'V|cÂ}@ۂp}-|:$΃.{ٿʂfOցǂxc끧)@V%~,}>$Y|YVǁ!İǀUŁꆳc'@z,e,~`$[}xc9ᘊ/e4a퀐?^,sq$%~דh)|~O~ma@6,Z$U~uԺc~ڬ~k~~}~З`P?І,!$~=U~~M20~|~^_6%>倨 ,$Á~w~ɀ~Wf}巗}̮e{+~^f~>h%,% - p~$ʪ}!}a1z}֪ ]|~ϝ>,Ł׃\%rf7w*ynzX{5z{^%|>?|,|$/{˸'\ w:ڈˀu!~z$̀$^lp> }+|#ȃ|YҌ̼W ԈyFy؅9g^&K=+>a}#mE|=ژ[ᥗx \؃=;Y+ -~#O}Yǿ좻وLcˆ@uwŐ\N<*q#R }ɊwȇԧУɡoIvmJ[IW(n;+[V$p&~dHxI x֟z zr֋5{VZ{<5N{+{#τ{r1bÈPr%XՈQ~;J}C*k|Q#Ec{0 ٯUZ3*bquXׁ:~)ᄨ}""„.|YԕJCĆao0 VJ:X)}"y|Vޚbъo>V=]9DžT)\t~"b|˹?̐b9םɄhOn 1uUT80Z)r"e$|ظwIJ𪁏ߖw0 Km,oT^=8C)j"-|QU֏ܵǖ[ncl5T&8)WQi"߄}&aȩ9T:{jև_Ru헰8)8#p}s9w ux)%yPzkzT[z9di{!* [{#zz0Va~‘~A~lj~>Sa}83|)4{"7{hܑ+L~mi҂RƋ8*~2(|!{Я/iiv`f}Ց3h@SE[8(S}:!|z4&>|ڐhy"Q7j|'}!q|#w0ڍ퓨S{4@fӍ!AP^^_6nY1'~=!v|t{څ4Qрu&B} E{i%vݛ{tq; 5_KsvP3&}n Q{~3ہup _ZYݳ ݭ/yaNFjqOY gFĔ~1|@${>z $@wҥajޅfX'hFq1}$?X{†zʑlȫ퐕vХNhXpE֓0U$-|$jzْԱQ 4=vfȟ(WAEG0Ox$ |ц]zґ;&хkՠu=/tewgVE֊Z0$q |=`zŏp%u@~eWUD 0ڌ$}ItzЏd,tre8ŠpTeC20&%>} zXwz̹wlw_vPwM?x'-Yx#yLy8 }@{,Q|/lgz_zzMPԢz@\z-y"8yy~΃zIgkk^$~O֢}?ښ|,{!zTz(yʊy[Ljf]y{N\?7aA,@|c! zAyベ+xֶ j]PN,>Ԙȁ, J}!{HoyܼxfpjՐt\vNq >cd,/~!Y{^GyѼ(x5iw[N5]?#|,̎"x{=yQwŵhխtZצFMv >Ή-OЁ2#|$_zͻޮEwhYK[ dLΟjH=ė-$ |z.|x%s~vvcںKvWduIv:v*w G^xUVx{|q3{scxz!V{yIWx:Zx(uxIx׉=xzyooc*!Vl}4H6| 9{2(0yy0ȉx{oԿdb&VkuGc9 @}'{(yWx{Ҏnᾣ0bz(UІGʦ׃)90'Q|8݋yxy애n/Bap UrvHu 9J(}};z-YPxy2n̼әaε;:UHD؊9.)0Y~`z.xxWn@ԟQaU.HEQ:DH)Sl!'{ oTy1wJĚlm6TaT&pr擡uJzw\7^{zm>}- ݂% LmΌp er=Ptxw60\yy=}^-Q&bpFM!s.iu&w}yn_€3{0>?{, {R$1g{0;||M}|*u}}I@~B}|c~}_}>b}+|V# {sz{R|`꒠}z4~^a*=΀+Y}p#ǁ|y<rzYc{)8|Ox}j]S~='+~v#߁~}OXxyYz&F{jw|}]}>̃?+ǀU$d}wxh}y~ zv{d\d}=G+΀Հ$5^}svow=xzRu{m2[}<e+Ѐ$ek~ vw>x7~y©tO{Z-|<{C+ׁ$~U1vfwRxWyd+szǦ.Y|o<$+{+w$ց~IpJWsuMwuyYg#z;{I*.z#҃HzϾy {;|G[|uI}%[#}kgt*UZ0";ՂW~*}#-|R#ܯނQGމŕXȁ;/*VQ}#2r|»ӂ#5ڗځ(q\ڍX.:ǂY*?4~#Gc}kAQq*֚;A^o׀FuW2:v8*8!E#X^})B"u58֟1nFU݀W:aP*-#i\}RnD)9g6mymUR9ځ2N*%#zZ}5Zg߼S*m'EiTØj9 @*5x#X}ӑq|rΗ،-tlBvpo[YxU[xzm9z)̈́Rz##z3zxҧz({J݈{mt|bUˆ|9|2){"ǃ{I Ѥ/܀lfā!U 9k[})^||"|{ٯ/+F΋ْ"5$kBT9))M}="`|+./j:`M:~LjCduSp8k)9}"Z|PJq{}&%h QԄG7)u~g"S|hWLYS^|х2gLLP7t(T"o@| ۯCn |Qf.P7%N(6"Y.|9lFʈnތ ze݄ O݃^7"X(E"X|Цqrt{4NvgkxfQry~7z@(jzp"Jzfx皥yinzx{,e͌{Pjr{7 {(K!{("vzŖ|N~jwd㋁O6c}.({!΄>{bjsǒj:v㆞dK̄P_7~(5|!%{(=֎ˎvCc(NЈ56h(0}!ۄ!{4PrC*,tɌtb Mmu5с'τ}!{8ې&$=sԋka M *5$'Nq~+!n{͞Дms`Li?V4]9' V~!J{ޞÒÒ 0r._K] 4ȉݘᦀy&iÑYfGL1󇔃%y|} 5{si.Rz/0jCGX2mF&;12%\v} V{j3qbrs:t9d{uPTʘvwBw/x$y1yҊr_wavxsHxod뜸xU6yCݒQy/y$JzOz k}׀$}r蠘}od}fT;]}=C|z/H{>$mzz>9~.r3]dś+TC )/|#:{ ޅz`>A}4R2p6^6cŇSBE.}#{vЅzm@s}MBnО܏yaҚT?S>A.r9#{Ņpzf &{XGmpY`aޒzRoB%.֊'#|8ƅ_zS {0m`2_YQqΒ Aҏ.#|TzFy /md_P!ᕢ?.R#ㆹ|jLzBz_q*oճrf@ys[sL*t~cy,Oz$bzmsʺ puԥsxvWyxxz\{${B=}{v+{~$*y{jjmCno^q΀ʏtFviw Yz~~<}x}K+ik|$B|5)iOsm5p`g^s}tvgYy<}r+Y0}#|gי$kd#osrspu#Zx=3|Ɂ+ ~$ }&;gjˠnXq rtWgxd=~|+~`$>}ge_i誽Lmepr t6Vw=,|Ld+~A$~}?ezISi(nl1UpHCrsX3w\<|+%I}eàqhHalPJ|oŬqsDW wz;{l,p%Ҁ~RbygykUzo9{sVu|uY}xO<y+z$zFLv=sjvwu y w:z,xt{zZ}F{<d{_*{>#M{*tbud)wP։xrzX|~;@~}G*i|\#w{xrPtLOu$Qw݆py҄W|u:~E*u0}Q#m|zpprytŏvFoy:W{bp:~OD*z~ #w|ȷ1oؠl2qLs˜vsnx?@V*z׊:~L*~#|nڬ Aqs,uamwUMzQ:\}؅*#€}*nv=pXŖr=tڣlw'Uy⓭9}*w$ }gnt o㹄*qɱځtVlqv¡Ty79}g*8$m} hQHl"Np ڀrmruT xY:ny*cZy#yrat”~wjxpngyV z:;{:)z# 6zҬ}~,}~i}~~-m~d~oT p~$9})|"ׁ{|ڡ|a|nU}Sk}̓Rk~8j~)Z|"|zJ"{#xs{mr~D|3xj}S~Z8')g@}"|Ryޠqzz\|p{`h|WNQ}^8.y)O-~C"|vxmyz2n|?zךg_{PX}j8 )R~"|w92p&"} {NoU(yAϦPjE|Yu(Gm2L% ~! E{OZj~]mVw6HohrXR#t\E v2{xR%vYys܄`yǘuq2#rwth~vX?uwF|x1y%Nz :z3A;xzu>zfW\{\W{F2{1z%sz LzyWMہÁCśeV?E;~q2|K%ф{% zqO@^r\eqЅUDu^2t}%儨{ z6~ȒBqf_dq6U4D ˄1I%w| pzX}$\pǕHcɑTDFC0J$ȄP|u⃸zߡ}Kpib2T /Ca/{$56|pz`|Rr#Ϣc˜jSB.G‚#0|-z{xjuJDliۜos^瘓qPɔksV?ŏu.$w#yC y}tptr%jsm^tPkv\@2w-쉓x#Pyyny{wD|-{D#jz`݄yy=q;fb0c[SMׁ=ʍ-|#Sz焔zy1qelPZ3@M=zr,{}"{{yvGGo[Qc x,$-"}{oU`yvp!dLYSLwr=,T3"[a{ Dyv""p`5eY8˗K;},?)"PU{'yoְjfk]nSdoGq9)s)4v׈xb߅yn'oflpy]'qSsTG,!t9u)Yw xyk߮UueѪIvM[-vQ}DwtF3wx9xy)n"x $y8yl*|dѩi|}Z;|QP-d{E{8ܓAz) y y_Nylc `ZYPEE2#7r}A(o{ SyTylBdl>ZWE^PV;D_6'( Q|҇#yN`y jo bȧ_Y#'OΝ2HDƆ7(N}Rنz9K4xifjb"WF&|2{[#oIyMxjxcx\"R4H4=6`1&}# zxhxaGڎZׯWR8H>1 ̀G$ { gyw_ܲYmBfQdH󣖋0>O2q$i|͈y8ʅw_XUYb?OQFǣ]8z*~S9$Ӏ} Ks_ytdWv2jewnmqyPrBUp{^u9;~w+ y#ڀyJplrotpqvTtl#x5~C'߀T}8"6{~p5'~'?}!4{ҝojq}w2}^oS~.K]~b~IsC~4(|'@{!{| |RB|=| m}![}ÃI~4:q~8'G|(!{EhzÐz?z{jDly|\|I:~<3-' o|!{Tysfyz`z4k{KZ|5jH}3e灮&P};!4{UyynVy8znizZ{HP}>3B&n/}! {Wxxyyjoj"z9Y{V3HI|܏l46e& ~- {^ԋXd7gykjVnYqGEt27vwZ%u#x y~Tk݄Lmxtpcj\yrY^u FŃv1(x%y QzWs?tu,vhrx4Xփy(E(y1nzU%zn zv|U%}+u}~gc~+W}D}51{&{!zsVejV;d{^|aQ9|bA{/{$ăz 3zN|ujH]ɁO@"~0){|l$z )'zZ{Ssi]^i]GÆO'Ä@/`+}$l{]zLy݋ד1r/f\χ6iOԅ?A.'1#L{@z,xgpЉØfC [ϒN셬W>,烺="4{zxfn쟊ețO[$L|=l+ŃÁD"D&|-ys3el g|b_4jXmwL9p#=s<,v!>xv%yNrjkQulb=1nX&pKtr=#u++ۇw!xyzq0pi#rasWOuK'v<ۋ_w+;x"Pyd9yp5owhy_yU~:zYIaWz;݊z,Jz"Äyyn"kgȖ*^_WNV'~Hw~; y}D,3{S"ׄz4Ƀym#@gg 6]i~6T H; +|"ozyj:B5c K[SI L:*9}!fz胣yujdϓ[(SFTGڊ9X=#)~!Lz_yDksc"#.ZYՖcQ9RGݍ7_z)_ ˄:zqye$eO^ fnUiL kBn5q'muΆwxdi]YjTm/KkoMA'qY6LZs'uvOx6„xc7nk[죸pIT*qK"Ns?A|^t6ev'֊wʆexqxauvZHv;SI{vJ} w@ޕTxQ5̏x'x @xxau|Yq|nP|>I<| @x{5X{'qkyy0Kxa\XY7pPԜځH\逯?{*y4}',$zyqx^{XbkQH +>ԓq4#-&ψ|ayAWx^X|8PmPH (>Ԓ3jU'&Lj|By +xg^٠8XBPtH<>Pb1ێJ($}R[yx:Z d1SeKhCj:2l0Vo"tY=w8xqZ@h{SZiJvkBuCm9 o/r#Jsu[wixJ[^mSɬenJtoBA)q49ԝr/tQ"vSwͅxYHs!RmsJ9tBuO:ƛu/cv!Čw<wfwXCxPy'HyAy:Ty60x"V(x|xwX Png,H?~@}9tY|/^n{H"yvMxZmwWcaQEIA-ς8/z.7}#z`xwVqPV)H8`@3{7s*%-6r#IJ{(Ux˄wW`P(ĐsH1@uƊ'6S-3E#Њ{mxw_hAZsj^mgdxhp9ij*s=nLRVvrz8{Hv*~8x)$@xy#ceUCgSi %k l~nohVqryPuu7zx)~yV#_y_r@cshv*{GlvofypdwxO+ty7z^z ) }zt"Pz]-}a9}fx~,yj}fo}3Pht|7^z{(}{O"<O{[q_d8z3iPf|mȃNs`k7Zy}(}{!Y{(oYΜ[^%bygdlLVr5yr'}||!q{EWBJ\;ĉ0awf]gd kLqq4y,'}}m!{zVƗz[8`jFv^ezc/jʕLq 5Nx߄'}~.",{nVZb`uebGjKq6x_(g}~"{Ǫn\oa6{qeyQsj)evnNxr7h|v)n0x#<9y kuf&VmIiom1xrodtrNxu^6|Iw(~y@"yΦmg/pjXr܈mu[vp`vxc6s^wN>wx6b{y(!~zS" z~pd| 3g|~kX|uPn}bcr |Mv2|q6&{s{'~{-! zbuؕeÅ6itm%yapLuo/5c{3}'k~{!s{ 7`ԏŔCdBÄh,tkފ`oK]t;4@z^&~|u!F*{:H_LWb߄ffsynxomr'at'Ru@܀Bw3.ˁ@x$Cy.z~TvAx~&w'm;~zx`~yQ7z<@z`/Mzv$za 'zT{}0~vO|~k;}!~^}P{~o~uA6}0| $ׁz (zr|W{Xt!{[iE{][|>Py}{Ba~/o}${[Â.zj|dz5Oszlh?zݍ[{vO|A}/ .~#{Q2zJy yA}"-uQ#Aa|A݂zx,w^pbfgPZ{9jwLem?"&q,u"-wyvɋCe=oÉge^Ik-Z4n7Lp=s,^v"qx8yguw/m mndpZ[rMt<v[,T6xS"yXقyt"3tplkuc w|XԄx;LVy|al}GV}vI惇|=ق|r.{G#₣zkXz pj_$RTyhIo=W-{|#rzypchmŒ^;T(̈I큤`<䂂,)D}"zvynĂf;^LҐTсnIY8;j'*~!{ӂylԜfS ]ajTV[H2ۍ9|)!h{Ogygi0^cbD[~Pf"PiEl: q*(uH e2wL`xhVdbؓpfYiNlE:o8r)vT ȄxOUy&h`kamHXxo(NepEvs08c[uO)Åxw!XxFyegHr`1FssWd]u'Nr`vCD}w7x**['x!y_K6ydݐoyD_yVǍ>z*N)=zCf{{#7Iz*z6"2y+ydl^^?oUhBLNcC 8}*!{Y!ԃyE'yjaR\3ꇚT7gKLB`G7]M(|\ 郒z,y(a%OUZDSҌ7K؊AۇP5օ~'g},ꃍz'-xa!<[iҔR}K&B35}&L~drzHAxZӢ7_=T͟aPO^dk1o%ڈt {wg x[#cDTڞeM;5hNDk K6vBU8l03}%ÆzZy4x~S%,O88JKqBS9`/${y5x9Q˘^rOۏHIBE0u7z-3$R|f~y6ăyxPn^OKX`Dc>*fZ4j#,nN"VwsvxVO~bpJdCf<_is4lp,Dvo"#ktswDxCO6gdIixD"k <)m5oT+ϒr'!#uaņwQx,O|lIdn Co<'q4җr+Oqt vLgwtBxO>vrit:u!4u,w""_wvRwJx MxGơy.@Rye:; yc3ܕy4,.yD#-Ux8x2/xN3(HYA'j:u~1ߔ|*{+"͉@ymxU؄2wMG{ A=i79Șq1=)O|">MyxRwM:Ez@Z9F91)~c"EzpkxAwUcSSeYh_HtkdaoGjULsoQ5;ytb(T}nwH" x9^^`abYegDuij`mnKs!rY5y[v?'}GxQ"U~y/_Yj]l$bos=gIq_ol-sfK2qu5 xxC'}y_!~yϟVvCZv`8xpeGx^jxJpy4x]z5'&}z8!Az28SNX3GD]ocA3^i ~JJo}4w|&}z ZxW__ivdl:Xj Epe0wy{$~{π>zTYv^hdcJWi$Dp/02xځ2$~|WzT xWu\ٞVgbUWhECo90px%~ } RizpoVp[xzra}k{sfYujDxo0|t%[kw^ }|xl_/mcwogim.5zN$ |%z\[|>^ncb`Fg{R'l@mrÊ/zQ$| ,zdLwNW{+wY]InCwbbxlfXSyk+B${o.~t#rwO 3x}tB_xtcmugaw jRxnxB$zr.~Qu#€[x! :y qhxrkmsn `?uMpQwHrBzt.}w#Dy@Dynqwo~slqot_svAQuw^Ay,xD.}yO#7yZTy|Kkzeumbzkzo{\^q{P^t{@x{.\}]z#̀4ziJiz)ziskin/w]BpOs@Qw4.}(|#6zz,{Zgr'ri͌gblr5[SoY,Nr?xwD-[|~#,1{Hށzxfyrh唿g&kYYnuLr*H~oa,e_t?"([w2ԁxuy{_o{1cfR{fZ|jL|n$=m~q,9u"_Gx1xuy&gn^y j emylYzcoK{r<}Ntf,@wI"0xytkupmvqcwsXyuKvzv@<|w,kx"yځyrt@x9kty bJvyWwzAJfyz={z,.zs#z!߁ypr5isd`GtEUev6IWx1={b},~{"ځzyq+pcgqT^s_YaQ .dHh5?TlD4"pO'".t/wUx]5eWgP jG?l?o3Qr'kvR : xI+y\؉l3V$mNioFچqx>8su3ᄲuu(~w xւyXZrVgsNGu Ev7=w63x(U5x!@yD.ycT'yjUzKMŅJzDz;фZz3Iz( z ! yy@TtlSsLV Aj7m.qqb$Exu|:wHxNiIQOkmCc!lMl?Ŝm9ՙ'o,4p0xr})ȌNt"vwxiCќr?fs86s3t.Ju*Yw(#wȄx@xZD@x?lz69y3yG,x(Bx#LxdxXɃSx0Bo=ܗ#:4S~3}{,]f{&za"!yexB=wAхp;570>g3<.~D(S{!Iy]\xx>w^yMv`S~cZmg`\XkfFHpl;2Ox;r%|vK ~wњ-Y*XH~[\|`0amdf"ZiyjGoo[24wtY%|w& ~xTSdcWlgy\~jtjalXgoFSnr1w!vN%|_x a~x֒OoSpdw)Yrg"_GsVetEm0v1hvxR%S|ax ~y3KCyBPy uVzhf\z/UczODkz0vBz7$|y.ymG̓RMrtTRdZЀTbA.Cj~0v|$0|zV!yEkՀ+K#KsRdYRTt`ņCj-.u~ #M|{_yCq~I q]P)dWvT_ˌ)Bil.]u"|{yΉBA}GRrNVcUnR^@ hӉ-u8"||yݓcOZeWTxrg[ghj;aXImfzCrl/yr$}vBcw_DXr9aH]cudb[gchHfVljDroZ0dy1tY$}w]xIZd&]ftaLiecelU|joDpr0Hxv.$}fxlxۉUn8YpZq^}qcc[s?T8htCo}v`/x8x$G}hx^yAiQx}4Vjxpc[yba/yS0g6yBnjz$/=wy#}yyyN2{So&Y'ax_RXe@Am}.w{#j}z8(y"Kqz-Qp} ,y{9"~z 4y{ S߉qXF f] ZbLhӃ=p",Kyi|"%~zׁyyjRHSpVe[Ya)Llg=o>+yA~`!~z?yxwPnsTaYXh_ӑ>Lf=oR+y !~{IJXyqzNpSqqPX fr1\[6saMug=^yl+}=r"vwxwmPZon]eobWZVqf.Ltijh=(xo+|t/!wx4uiac2mjedim4hXokJrnaY7>d)\ZM`ÑQeRFk9:r*Zz~!zy$owTOhwwXd^w]jSxb%G@z(g$9h|6lt)~r vowntZKgtv]7^puaySyveFxj<8{Hn)r~s vyx.iqqacqd#]zp4}3s'v QWxz4y.^syosXGtpOvUrnGws=yt3|v'x% XxwyMZpwQV`rwNdtx3Fgvxo@Sp\?LrCYt~<w}2{|&.z tyu'ixXlSo"zKqmHD's;uvށ2#zt&{~{}yxWkRmJzp7Cs :uӅ,2yځ &~|orzyWxV6~SQdWK [Dх`:e/k#rmuNwTχYP\%I\` Bd69Ѓh/,m$jsa^vv@x0RńD_M߃bHRve(A%hW8ւKk/Yo$Et8wW3xRfKLIgFBj}?7l7(oc/kr%ev?x?0yRVlL;~mE`Co>qr6Qs2.u?%w~ xijF9ωl4ވn.;ap(ys#Uvςx_FXyC1p%=pq9gq4 }r-Wt:)6v #݃>w 9x^xAzv> w98ww3jw|-x(x~#x !xwx?ƅ|Z/Qv;T_4*Y^.](ScZ"ti6quCw=V9HX4o\}/`*Ze#kvHrnhvsx(<\9Y^4]u`R0s d*׏h~#$mv~ swmx9{aB6kb3d-d/k?h(k!o]tw6x9fm6h2wj5-l9(ьn$UrV" {v \x9wx9єl6#m1>n,pC(r9(St%w[!:xgax9r/5֐s1f't,vt'܊nu~&v$7w!_x{ !_x8x95x2iy?-3x&x0!ɇw" x@ /xc Hzxm93~G4 }1S|-|)uz$ym!+x lxI xZI&\Qw_WVg6b\WgrbEni0,wp#|^u(@~w/T^SIWYYth[^g`bTVegLDdll0urS#{u~Mwc~NH`RUcUt W[ed@\hfSc=lB2kpb.u?tO#{v~=wˆHk,MkoSnT`YogQaLq@kjstE.7tv#m{w~x Cu}Igtwn Pzv_b1WvP_kw>hiw.tux#T|xi{ xG@g~yF~ kM~}_T}XP#]|?g@{-tzo"|{y7xZ=x,CilJvW^R\gE[gMNW捀>d@+r{z<x_IJo~"`xPnbW`e]Rjjc@pj-xjq"}t %vYT{w\Xm_X]`'cbQWhgk@o&l.pwr\"|uwNS_y.WHbfl[eC^`hlOf~l?mo-Evt@"|v wNvj0wDS3k jXl]E]nN^dEq>qlDs},vv<"n|wgxG~JQsuYOqsIiUZto\W[fu{Mbzv>=kw7,vEx"K|xkx|F|sK|whR-|QZ9X{L,`{=[jQ{2,$v)y!}ByiHx{GCErtHeOgY2V:L,_=\ip+kv { }sygxy@$oFs?cMCXTK]n=hq*u}O}z"xw>phnWC`J+UfRC}J'\e<{g{*:u~}qzۀxReMeteR+gh X>ZUj^Mngczq!~(tvD|f`Urbb7YRfd]Yh!bxKlgTt"6Oru*zDw2 0xGHxiVx#aZxnV^UxLcGxuBJiux7px*myx Txxg1S_V́nVg[VMa-~BPg}5o|u(yzgy yje4xdfMMC\nQTWqqI]?eh5o'2zH|>yyix@ggqQaqTVsYLt^XAvcw3yi(}hp'tGvJfnV`2o YVpZ]Lar/b@5tf37xl&}Wr>Bu Aw>e jR^]fk`/TmkcKHof?s8j2wn&:|sv Pxbf e[gh"Sjj)I.mlR>qfn30vsq&|u_w7{x`blZd o QgpSGkkqx=or3uyt'W|Avx3fx`^uRXa1vHOe=vxGiLv>?n0w 3t{w'!| x*6x}x][~X-^[~,Ob?}Gf|=Ll{0=sz%{yH`xXCx[Y3Vw[N`9\Fe^;kZ0s}%{zyxPYUύvU_YzM$^C;d@:jÃ2Zr€8%2{{ɀy)‚x\yP0WRyeT"MynY|Fy^;;{'cT1}ei%pt݁v}ZvV:UvY MBw:]VDx4a:yf60$|Zk$|=qu3w\Xjr]Tns_+LtbCmv!f: x-i/{>n$|~s;vx,WndRp~eLrYh$Bt(j97vmY/zNp$~xu-wxVPk|j}Oml_I1onArMo9?uiqg0Eys$~Kv|x_xTh r5NjsZG?met@pst9su.xv$j~*wxnxT'e{FNgzFljz>mzx8r;z0,xay#}xڀxSxQb삚MeuEh>li5Rqn~"-*w'|J$}yzxbxQO`;LcnFhTr>#lJ5>ptq0uvq~e%}NzpxxMOK SD́W>]75b*'i1 Ap\tȁvMYUEI#EXB\*<|`5 Fe[+j!BquwK}a[dH-}1]A}aS:}d4"~h+m5"ysKuqv`xNJzCalGxzcBC{e:t|7h2}*l+U~p"yt/Xw8xIYwHhAEhx$i?VySk9zfm1|o+\~@r"8vVxxJt&o4D>uo=lwCp7y r50zis)}uL"w`x\pxIq5vDrw*z|$ yށwxłx1AOgwx<(:d*7܄eo2;h?.j(omS$q!0u~x2y,<>k7pl@3hmy/Oo )p%hsr!ā~vx_-y$;q7^s3fs.s($t$ƀiu"w xx7~w6 ~xD2D~x=-a w'w$>w"xa!$x lx86}|58{|1j|{- }z)z$y$-8y::; ;M;;<<]<<=*=n==><>>? ?O??@@b@@A0AtAABBBBCCSCCDDcDDE/EsEEF>FFG GMGGHHZHHI$IgIIJ0JsJJK;K~KLLELLM MOMMNNXNNOO`OOP%PgPPQ,QmQQR1RsRRS6SwSST:T{TTU>U~UVV@VVWWCWWXXDXXYYFYYZZFZZ[[G[[\\G\\]]F]]^^E^^__D__``B``aa@aaab=b|bbc:cyccd7dvdde3eqeef.fmffg)ghggh#hbhhii[iijjTjjkkLkkllClllm9mwmmn/nmnno$obooppVppq qJqqrr=rzrrs/slsst!t^ttuuOuuvv?v{vvw/wjwwxxYxxy yGyyyz5zpzz{"{]{{||I|||}5}o}}~~Z~~ D~.h݁RȂ=x)dڄPƅ=x*f݇TˈC2n"_׋PȌA~3p&cݏWѐKƑ@~6s,j#aݕYՖQΗ KǘD?}:y6u3r1q0p0p0q2s5u8y=~BƦIͧQըYީ c*m5xAȭ Nծ\(k7{HѲZ(m;ŵ P۶ e6|¸Nڹ g:ǻU*qGվe<[2yO—%lôBĉ^ť2yMǔ!gȮ;ɁTʚ'm˳?̅V͜'mβ=ς RЗ!eѪ4xҽFӊWԛ$hլ3wֻBׅ Oؒ[ٞ$gک/q۳8zܼ@݂Gމ NߏRVY[[[YWSN HA9w0n&cXL>{0l!]L:v(cO:u$_H0jQ7pUBIQX`%g,n4v;} B  I  Q  X  _ $f+m2t9z@F MTZ`%g+m1s7y=CI O  T !!Z!!""_""###d##$($i$$%-%n%%&2&s&&'7'x''(<(}())A))**G**+ +L++,,R,,--X--..]../!/c//0'0h001,1m11212r22363w334:4{445>5~566A6677C7788D8899E99::E::;;D;;<>?>>>?D LT\#f-p8zC O[%i3wB Qa-q> Pc1vEZ*o?V(n@X,rDRa,o:~HV!d.r <   I  V c - p 9|FR^'j3v>JU`(j2u<F PY b(k 1 s !9!{!!"A""##I##$$Q$$%%Y%%&&a&&'''i''(.(p(()6)x))*>**++E++, ,L,,--S--..Y..//`//0$0e001)1j112.2o22323s33464w445:5{556=6~677@7788C8899E99::G::; ;I;;< >M>>??N??@@O@@AAOAABBOBBCCNCCD DMDDE EKEEF FHFFGGEGGHHAHHHI=I|IIJ8JwJJK2KqKKL,LjLLM%McMMNN[NNOOSOOP PIPPQQ@Q}QQR5RrRRS*SgSSTT[TTUUNUUVVAV}VVW4WpWWX'XcXXYYWYYZ ZJZZ[[>[{[[\1\n\\]%]b]]^^V^^__K__``?`}``a4aqaab)bgbbcc]ccddSdde eIeeff@f}ffg7guggh.hlhhi&iciijj[jjkkSkkl lLllmmDmmmnBijFȴ J̵ OѶSַX۸^"c(i.o4v;|BſIPX_¡%gé,nİ3uŷ;|ƾBǃIȊOɑVʘ]˟"d̥(jͬ/pβ5wϸ;|оAтF҈ LӍQԓV՘[֜`ס#dؤ&g٨)jڪ,lۭ.nܮ/oݯ/oޯ/o߯/n-m,k*i'f$c!`\XTO JD>}8v1p*h#aYP H?|5s+i!^T I=z2o&bV Imft2@BCDEGH I J L M  N  O  Q RSTVWXY[\]^_ a"b#c$d%f'g ( h !)!i!!"*"k""#,#l##$-$m$$%.%n%%&/&p&&'1'q''(2(r(()3)s))*4*u**+6+v++,7,w,,-8-x--.9.z../;/{//0<0|001=1}112>2223@3344A4455B5566C6677E7788F8899G99::H::; ;J;;< >M>>??O??@@P@@AAQAABBRBBCCTCCDDUDDEEVEEFFWFFGGYGGHHZHHII[IIJJ\JJKK^KKLL_LLM M`MMN!NaNNO"OcOOP#PdPPQ%QeQQR&RfRRS'ShSST(TiTTU*UjUUV+VkVVW,WmWWX-XnXXY/YoYYZ0ZpZZ[1[r[[\2\s\\]4]t]]^5^u^^_6_v__`7`x``a9ayaab:bzbbc;c{ccde~eef?ffgg@gghhAhhiiCiijjDjjkkEkkllFllmmHmmn nInno oJoop pKppq qMqqrrNrrssOssttPttuuRuuvvSvvwwTwwxxUxxyyWyyzzXzz{{Y{{||Z||}}\}}~~]~~^߀_ a"b#c$d%f'g(h)i*k,l-m.n/p0q2r3s4u5v7w8x9z:{<|=}>?ABÝCĞDşFƠGȡHɢ Iʣ Kˤ Lͥ MΦNϧPШQҩRӪSԫUլV׭WخXٯZڰ[ܱ\ݲ]޳_ߴ `!a"b#d%e&f'g(i*j+k,l-n/o0p1q²2só4tĴ5uŵ6vƷ7xǸ9yȹ:zɺ;{ʼ<}˽>~̾?Ϳ@΀AςCЃDфE҅FӇGԈIՉ J֊ K׌ L؍ NَOڏPۑQܒSݓTޔUߖVXYZ[]^_ `!b#c$d%e&g(h)i*j+l-m.n/o0q2r3s4t5v7w8x9y:{<|=}??@@@@AAA  A  B  B  B  B CCCCDDDDEEEEFFFFGG  G !!G!!""H""##H##$$H$$%%H%%& &I&&' 'I''( (I(() )I))* *J**+ +J++, ,J,,- -J--. .K../ /K//0 0K001 1K112 2L223 3L334 4L445 5L556 6M667 7M778 8M889 9M99::N::;;N;;<>O>>??O??@@O@@AAOAABBPBBCCPCCDDPDDEEPEEFFQFFGGQGGHHQHHIIQIIJJRJJKKRKKLLRLLMMRMMNNSNNOOSOOPPSPPQQSQQRRTRRSSTSSTTTTTUUTUUVVUVVWWUWWXXUXXYYUYYZZVZZ[[V[[\\V\\]]V]]^^W^^__W__``W``aaWaabbXbbccXccddXddeeXeeffYffggYgghhYhhiiYiijjZjjkkZkkllZllmmZmmnn[nnoo[oopp[ppqq[qqrr\rrss\sstt\ttuu\uuvv]vvww]wwxx]xxyy]yyzz^zz{{^{{||^||}}^}}~~_~~_߀_߁_߂ ` ` ` `!a!a!a!a"b"b"b"b#c#c#c#c$d$d$d$d%e%e%e%e&f&f&f&f'g'g'g'g(h(h(h(h)i)i)i)i*j*j*j*j+k+k+k+k,l,l,l,l-m-m-m-m.n.n.n.n/o/o/o/o0p°0pð0pİ0pŰ1qƱ1qDZ1qȱ1qɱ2rʲ2r˲2r̲2rͲ3sγ3sϳ3sг3sѳ4tҴ4tӴ4tԴ4tմ5uֵ5u׵5uص5uٵ6vڶ6v۶6vܶ6vݶ7w޷7w߷7w7w8x8x8x8x9y9y9y9y:z:z:z:z;{;{;{;{<|<|<|<|=}=}=}=}>~>~>~>~????@@@@AAA  A  B  B  B  B CCCCDDDDEEEEFFFFGG  G !!G!!""H""##H##$$H$$%%H%%& &I&&' 'I''( (I(() )I))* *J**+ +J++, ,J,,- -J--. .K../ /K//0 0K001 1K112 2L223 3L334 4L445 5L556 6M667 7M778 8M889 9M99::N::;;N;;<>O>>??O??@@O@@AAOAABBPBBCCPCCDDPDDEEPEEFFQFFGGQGGHHQHHIIQIIJJRJJKKRKKLLRLLMMRMMNNSNNOOSOOPPSPPQQSQQRRTRRSSTSSTTTTTUUTUUVVUVVWWUWWXXUXXYYUYYZZVZZ[[V[[\\V\\]]V]]^^W^^__W__``W``aaWaabbXbbccXccddXddeeXeeffYffggYgghhYhhiiYiijjZjjkkZkkllZllmmZmmnn[nnoo[oopp[ppqq[qqrr\rrss\sstt\ttuu\uuvv]vvww]wwxx]xxyy]yyzz^zz{{^{{||^||}}^}}~~_~~_߀_߁_߂ ` ` ` `!a!a!a!a"b"b"b"b#c#c#c#c$d$d$d$d%e%e%e%e&f&f&f&f'g'g'g'g(h(h(h(h)i)i)i)i*j*j*j*j+k+k+k+k,l,l,l,l-m-m-m-m.n.n.n.n/o/o/o/o0p°0pð0pİ0pŰ1qƱ1qDZ1qȱ1qɱ2rʲ2r˲2r̲2rͲ3sγ3sϳ3sг3sѳ4tҴ4tӴ4tԴ4tմ5uֵ5u׵5uص5uٵ6vڶ6v۶6vܶ6vݶ7w޷7w߷7w7w8x8x8x8x9y9y9y9y:z:z:z:z;{;{;{;{<|<|<|<|=}=}=}=}>~>~>~>~??`@2 OdJ@``LI- 1S60G4X;*```f:@4 SEi@``Y<#i'VFX`eMfdnnnwgFXFX `st``^F_2V @\xelmSusvJJ1+`YRibKbK@ [+(i u uğ}\Be*YDYD@~llS?9@nn̄~\s)]` $_s_s_hbCCnOgZܞ<ˀɀmTHp'p'@0`v9^^TQb;K2hK ō &Kx`xy=(']H]D "::nm utlk~˕ @Xd@A`@ P  z[&) V£HRY7l z}sz@ { A d&3v 8PS@-Z q(8 9d\Tb<[oCoY@_+o+I0gE@@%bqqW5@(A t ֣((]Rw(W ݲv*wlHe%e7Xqhzj|jQ5O7`Rdl˔o]p?3qk2e["p5EsV2\O؋abjVc`.=?`#e#^Q7 3DV6^8``Zl@ ="fWo<Saqo=9! E%EV_cFcDmds&7E<^vjAgXT`;b/B\dżkwjPu|rvlIxPNoFq`(_w09<A=P['gsÞrǝ}zuCTsMAH\\%[$emmg\8Jma~٘A~}H&@/7Rc_PD"8͐bz~RVdWG:$vdj W0`sҬs^vQ0bdb0 +)Kljb,oā؋iďs =43:Ŭ͒ /3W >5/t$݌$®܊-xW`$ &X(& ҂RUN)#@u;d~W2r>d8!:(qx@l\<)Z]hys,.=?K; Ź:KHwt"X{v ;,UCezֲy}O)u});Oi 83GX6S=gbUtzr8{yK}w4]Tg \~q4.V dWܗi2҈k1m2`mMJ݁:,+KlRZf8N(`9Ue= 2=EogHK WT@( F`;[`D2 RR H.@MY\'^aN7[n#:-=aF"]^`E!N4A\Pnb`$c_cQmewCfA#_krbQ`X@bAq8U `h:gGrџorTmz{on%{~ST:]#C7 -0@gjgf Kap1=%`۰-灃#2tZUGMbCXqw y {"{h!k&L?[;bu*Mc\`l gdhiEހ7`'\|="RP GRGIiMPium'vQ.,<@CA%u~< -p9qGW0]\a5|N]%_A(2XAQF WXƶZmAN_UA/!"PUuY_dprTe'BJ>@rVD2^``֬`CQi`t|}ZV{p>tnvwV)]PTbb.4cn(jFTWjyS.FT8o <_Q_ k9jĝu{pyIUs/KWwwˏoDFCet2uP}Y}{t}}Lna ;m\&UUFǕ7߼Hz@Ҁ9~LyYQSw*se`].:,Pviʈ+ (Fm_ YqS!ON=^ܛ6_؛&{ 7u|:oq .۹.%KkqԗY\ۋ_:V4K "M i nY-z )@ @|S8di=Iw!%r5xC(h`~< =euy0y<|E6\(>Cx %_OGLM6E@S_fSmʭefha]QA6'-@JXO IkY XX(n-D9@<@vJ`=!~aj''z4h-#R.+S %>+>K>\FAF4*!I_)`~0>Q&2&9:)c'=4I[P^BEU&n:=8$QQ04A޿C(5H,&o&B0cH#b b2d.0\$+B> GRku18FwIԹK+90H@ I)eH__k"emXaV\-:ҒK2BP?QHS.<KiuOjEh!jDok s*[b?8fxQW2X;[3]z2hC8Oh>9G"_(~fc|]݂s*[2`Ҽ_&!_etd$7|G\Tu5YZRX>͆ÈhѢ v frz~}zOx.x.=Ks|Im{$-$0Lky){2NFt,ZMeH>(2;?'8 NW٩S|QKg@N< 23 8_;9rAj^nY*W{~gDˠ6"k'!f&W_}u i&](egg\h j9M²tuvVT UBJ5D B/0?HIHPXWYRg-"ǻQsXUS?4' j Z*4>A<?v&SuM">u>)''}Qg>۾aY T 6%6UTp4p1l1k <)< k6w 3)=Z38;<-'8FO H*'4{ ?-W2;bv?E|D 10DAز- !-E"%0 $#A=FOGtBN,7=$Y 43 !P–3ݿ4 m2'$86\7\_^\d-DM6#*,,A<ڼA#@ $};W'n:c6c&fh<nr7(aS!BWF Jت?MoP= -F]mI5Eh-X= ofjy¬e\2``] ^`D&:WO`t/-eh CF&:W{x7wuYy|tG~0zEGx)~Nz* x+E|{GôN[+=7f9ꆆz,T b?4 P59V xJc QS0۵ki7սIUڵ9~rm|y}w"{unMub/@m`/|KQ0slg#TGhVlX8]Hs]@!Ͼp#F:5FL2@K9=&<l;Vi1mp+iv_iBɞJH"DPBYHg&tANNkVJY۴v$}tlnnmq|i^teidg 5Lw#v*8Vh{C+="r"98u+@GVݴg:yzc}$՝mM~1|~+MQN( <* ⬒A]ɹdS"Ne9L|Er›n df],_S^i}keFt|enbĴ-CZ>5K?c7VN[X Dw<>kC`G8LFv]MTNcHy/BM.@4$L&r*ַ. 1Vhp}[=.!gH syrvUZ31 v\~.'}3`0(:XY}j:XznrܿL~<:SV8x RK k "U-TOwr{۽ Фb/)zAz& v)'(!o#2"iʧMfi234_9hU:E<V@\A}2¨ s (?S'A,>SۚNS)XAZ@[ߨNx6@۠d136ĕ[7%81K=nn7GGGLExXdNwIyzya{ uHph"gx^au_`,[`_Q_e 6FWvsMXQ#_Zi".l-w8ڢV Q.j| 14?o|]qmUQ&nm}zMyU}Bw#t]rglV{~>}{ vh*<$惛ҌH %ï_#<4~*i~`_\7YWQL&NN{Qw<kw9fd)m\S#XW1M DpAn.;;2r-S05v8Bì}UKjTM4*}6 (S+(fիp'#:}ZkPV1 5 /8=oMT%fLs^N|jwIOJy0S~xX.Q}VIx.,Ny>վɸ*K u|(? I5*GIqCp"&T)6ݥT%2Ah" '#%*7V":M8G'=;|A#DʧDW=P70q ̐P#Ћ&' Y4 PV7S6OeLX`cuRWgm&ggjc\B]VOR)R~NSOOp/SLerYznsNWP y!fԌD2@srqnkN)]A}`p`[@0`s(pIshpcBdpb\b~\"AS}`lk g` :mq:RAsVctUxKLMHJFfAH~<1{@y,?fst@;Ox߀?j([(TQϖŎ%5:iw2;ֻ-- $$yl -!w&w5-.6dY<;=0_J#!r쎺ے%L¿ WEc g}ȸT 8%  jZ2EQ4dϡVt4oOjpZ1Gw{w0]k`1Wh P&M*sx׬Ѣv"JZ\S7gћ8 G}?"Ϩ8Cx m͘xX";sew)ٻ M@9`~Ȳ .+ c!I# y$O"D(ӭrm-ߥ/lК.nv/#̊y !s9D). $jQOvNOjRaR\SVS.ONiEI@PEBE@&g?Wbif#AER{tV Hoqwgbc_WI.cnqr|m}<XI|,jU3`bGbUcPrcwNZKBGWW U 2quNYfJ7pyV`KSp/|Bgh9&z5h3o1u*|w)iz+f3 *PkkqxÆ_vHj99kb) g t$}d2| y zɱyanmcqy`Q7FL)Uac$__䤖r!e7:n,q |Ոha0,Љ"dcPp]ra0!j5d`i2Զoo{?>`72` F%Ix2 ͏+4Ϧhΐ&`!3hf<$ #1}>Ҏ#]2z0ӅRgǗ"Ç&/+t oP+*cNwon!Gbwе!7;@i-N̏O||y~ѓ$y=jDX}AS߿BLm@dE9fU"S$@-?(D:O]SZ`94RoqGmi;a \Z]R"R&Nˎ52O|WiYeRoBLe MWXBY=Y/ʚ:Wq9E9BA\A @=J5RM3z8YfeP{eAzJJ2^Xi'7ʚ$K"{KmkfXv#:,3PxZdfMO2W eɔ/d2u:{N{Px[eGfCPIjhúOUs^%ƮDptQpz*ZgeQO>_ũ̅`xXWrӏː{N[Nk'cT 96%`0fDEYOzLbC 1=%NEO2N{,)O޷*PB(B(%1z0 .4b&C5*e4FgWTJCOd-yq yKx|=y y! sU hWT y)&wB~c5HYFU>lnzlIpz|x7vA)vBc`I]V01rMLlnIQ vB)dJ`Vi nLzэڜ=ѬbgJc|WV5cm}A^\vBre #*_YYԭZ;mrpX$ŭ TItŃW^ncb _>SU:qgWX3Jf8(SMu Vtj\RLRa ]0Kc|pyKqտmMaVLL̫O{&vVGqokwiIȒe./ZOP7DEmm|KevHX9Po];H.DBCJD%D@ΕQ| x#_(wJ.( H8yCSo> 8y6?69*,F,(,и~ur\V2J>!"aS1_]b>J^B/Y}o4.{s ;xѣymWXC _4_@NC;gc!:%Z*wcvNc)6a@<QDl`h g :6ȣlU `@SFv4;Qj7O:M7SRcc3` у ˜8PܴٙPhshsYT9zX7E8i}gA~s<kJ\rSjN9)5Ifhmd4WMH5FtE/Cs:Pfrq offYQ[GBD9E& 'rv@$n}LiWc]\SJ=:ao!Hj ?4d)PVBZ=VLC95v|~ wd^E:XS/PP: KE<830'˙7~ }g\R4)fKOSb3C{$ *?{ F<̑=T<1.*ΝXj~qY ]R@$I90d3 (_v.*F'%]!'#;^5~WT|N* e:+*(847]<}3: Sk6 z[tK{*81DKVjV Re5uNgM`fJN ;01:-$Ky$^tN-;4[dBf=f_#Y5RhŔ`SiS88(x _#P%1O98jqwlz={3x2Xfzd}oqWSC`'RF3:H:ku|iM+ AT" Sw>S51<\:|]44ǪZgZy;@_NU`ZOPT/j@ZsguZQG9GTd+@ji"HihG<\_TL,;#4R xsf nE;dEf`@V~N+E60_~Nnf$g9a;MGJVJQGv9"2X*U|~ e3[5U\?8I{OMJ:4;- %~|rQ-Q0 P9D~DCi:'5.'> | cyRwK7 Gl(=|E;}80Cɽ16)6!{~ZRL-D=#J8C89k4,*9%l{RLE1'A)0$ =Tj:ݰp+ ,p Q0J gA ,+63F~V2f12[+j1+)SԦ$!IDNwB:b,#"E:?>\>78(W7hW$1tG2h/Ȥ,"1\MoQ:-z&1GJQL LQK CTuH\c;OJ5x4,%#>VU ;|,<6NsQU\VWWTAPoPZJ`ATu2/ U<"uOS{Xns@v=wpwmq{!t'lOZD&SV8p{#WPR\ bjyOPmy'#iQm~j`502k3\bU@TZ:IPEF7*/(M~m#b2`^AMRuKw71*#ObY}NW-$[5,AJ:}3Y,% %| xJSOb)qT);|;5.0'M ~) KFF`BLH'V5t4x*~(!*~AL0F@;4$.yl+"¢# z~FLH?<40|)0l%eb; ~bH @8A1' 1)ZG?( ϡ H@@5%Xz() LqMqp y I7@H@8!"v$Hgxh G;?@6 `!)6*6*!&4 ""G%aPzCSiF / #/1221+Bq*]%'ī UI! !Iz1u 04t79:::5XH3U`-/?v&&zG@2t#4S8hHKN9P PPMCnpNh]u2g.W-(/( 7?FNMRmSprt tipF[|bopwq\Oh9KQGpy{M{W&_p!9MX:w\=`m~NOUS738/(FEDt\75PJE@@15 =TfHF@@3 Qe [ N7VH@@5dn  4kSdـl%S :h!O}6dKy2aHvA;y4s.m(g"a[UO J !!E!!""@"""#;#z##$7$v$$%3%r%%&/&n&&'+'j''(((g(()$)d))*"*a**++^++,,\,,--[--..Y..//X//00W0011V1122V2233V3344W4455X5566Y667)7p778E8899a99:7:~:; ;T;;<* >h>>????@@_@@A8AABBYBBC2CzCD DTDDE.EwEFFQFFG,GuGHHPHHI,IuIJJQJJK-KwKL LTLLM1M{MNNXNNO6OOPP_PPQ>QQRRgRRSGSST&TqTUUQUUV1V{VWW[WWX;XXYYfYYZFZZ[$[g[[\3\w\\]C]]^^S^^__c__`/`s``a?aab bPbbccaccd-dqdde>eef fOffgg`ggh-hqhhi>iij jOjjkk`kkl-lqllm>mmn nOnnoo_oop,ppppq=qqr rNrrss_sst,tpttu=uuv vNvvww_wwx,xpxxy=yyz zNzz{{`{{|-|q||}=}}~~K~~Xހ"e.r;~G̈́R؅^&h0s:}DɊ MҋVڌ_%g-n4v;}BŒH˓ MДSՕXږ\ޗ`"c&f(i*k,m.n2xIӠ^.tDΣX(m<Ʀ Pڧc2vDΪW$i6{HѮZ(l:~ñLղ^,p>ǵ Pٶb0uB̹Uߺ#h6{Iӽ]+p? S,uO˜*süNė)rŻMƖ(qǺMȖ(qɺMʖ(r˻M̗)rͼNΗ*sϼOИ*tѽOҘ+tӽOԘ+tսO֘*s׼Oؘ*sټNژ*sۼNܗ*sݼNޗ)r߻N)rM)rMN%[3i AwN&\5k CyQ*`8oG} V/e>tM&]6lF|V/f ?vO)`:pJ%[4h9m >rCxI}N T&Z,` 2 f  8 l > s  E z  L S%Z,a4i;pCxKS&[.c7k ?tI@~7u.l%c[  R ! !J!!""C"""#;#y##$4$r$$%-%k%%&&&d&&''^''((W(())Q))* *K**++F++,,@,,,-;-y--.6.t../1/o//0,0k001'1f112#2b2233^3344Z4455V5566S6677P7788M889 9J99::C:::;:;x;;<2">a>>??Y??@@R@@A AKAABBDBBBC=C{CCD6DuDDE0EoEEF*FiFFG$GcGGHH]HHIIXIIJJRJJKKMKKL LHLLMMDMMNN?N~NNO;OzOOP8PwPPQ4QsQQR1RpRRS-SmSST*TjTTU(UgUUV%VeVVW#WcWWX!XaXXYYWYYZ ZHZZZ[8[t[[\(\d\\]]T]]^^C^^^_2_n__` `\``aaJaaab8bsbbc%c`ccddMddde:eueef&fbffggNgggh9hthhi%i`iijjKjjjk6kqkkl!l\llm mFmmmn0njnnooToopp>pxppq'qaqqrrJrrrs3smssttUttuu=uwuuv%vavvw!wawwx x_xxyy^yyzz\zz{{Z{{||W||}}T}}~~P~~ Lʀ HƁC>}9w3q,j%c\؈Tω KƊB8v.k#`ێUϏ IÐ˲Y.uJصf;ʷX.v ]QF:ݽ/Ҿ$vǿkaVMŸCÕ9Č0Ń'zqiȻaɳYʬQˤJ̝C͖<ΐ6ω0Ѓ*}$xrmhռcַ _׳ZخV٪RڦNۣKܟHݜEޙBߖ?=;y(bK5oY C~.iS?y*eQ=x*eR@{.iW F5q$`P@|1m"^OA~3p&bU H=z0m#`S G:w.k"^R F ; x / l # `  U  I>{3p(eZOD:w/l%bXMC9v/l%bY"g 7 | !!L!!""a""#2#w#$$G$$%%]%%&.&s&&'D''((Z(()+)q))*B**++X++,*,o,,-A--..X../)/o//0@0011W112(2n223?3344U445&5l556=6677T778%8k889=99::T::;%;k;;<=<<==T==>&>l>>?>??@@V@@A)AnAAB9B|BCCGCCDDVDDE!EeEEF0FtFFG@GGH HPHHII`IIJ,JpJJK=KKL LNLLMM_MMN,NqNNO>OOP PPPPQQcQQR1RvRRSDSSTTXTTU'UlUUV;VVW WOWWXXdXXY3YxYZZHZZ[[\[[\+\p\\]>]]^ ^Q^^__d__`2`v``aDaabbUbbc"cfccd,dmdde0eqeef4fuffg8gxggh;h|hhi>iijjAjjkkCkkllEllmmFmmnnGnnooHooppHppqqGqqrrFrrssEssttCttuuAuuuv>v}vvw:wywwx6xuxxy2yqyyz-zlzz{({g{{|#|a||}}[}}~~U~~Nˀ Gā@~8v0p6x>†Fɇ MЈS։Yۊ]!b%e(h*k,l-m.n.m-l+j)h%d!`ޘ[ٙVӚP̛ IŜA8v/m&cޠYԡNɢC:|BƥIͦPӧV٨\ީ a$f)j,m0p3t7x;}@òFɳ LϴRֵYݶa'i/q8zBǻ LѼWܽb+n7zDQ_£*nò4qĮ'dšXƕMNJBȼ7tɲ-kʨ#a˟X̖P͎ HΆ@~ϼ8vе1oѮ*iҧ$bӡ\ԛVՕQ֐ L׊G؆Bف=|ڻ9x۷5tܳ1pݯ.mެ*iߩ'f$d"aYw#\Az'` F,eL3lS;u"\ D~,gO8r!\ E/iT>y)cN:t#] F/jS=x'aL6q ! [ F 1 l  W  C ~ .iUB}.iVC~0kX E3n!\J8t'bQ@[8  ` !>!!""f""#E##$#$m$%%L%%&+&u&' 'U''(4(~())^))*=**++h++,G,,-'-r-..R../3/~/00^001?112 2k233L334-4y455Z556<6677h778I889*9u9: :U::;5;;<<_<<=>==>>h>>?G??@%@o@AAMAAB+BuBC CSCCD2D|DEEZEEF9FFGGbGGH@HHIIjIIJIJJK(KsKLLRLLM2M}MNN]NNO=OOPPhPPQHQQR)RtRS SUSST6TTUUcUUVDVVW&WrWXXTXXY6YYZZdZZ[F[[\'\r\]]R]]^1^{^__Y__`7``aa]aab9bbcc]ccd8ddeeZeef3f{fg gSggh3hhiimij jWjjkAkkl*lwlmm`mmnHnno1o~oppfpqqMqqr4rrsshsttOttu5uuvvgvwwMwwx2x~xyycyyzGzz{+{w{||[||}>}}~!~m~P2}Ɂ_A׃"mO0{Ɔ\=ӈhH݊(rQ0zōYTlɐ'>Ukǔ$ݕ9Nbuљ-@RduО*ߟ:HT`jät̥$|Ӧ+ڧ16:=?@ACDFHJLNQSVY] [E/~̽hS>)xdQ >Í,{jź ZƩIǚ:Ȋ+{mʾ`˱S̥H͚>Α6ψ.Ё'{"vrpnopr v$|+ۂ2܊;ݔFޟR߫_n#~5?_@`!Bb%Ef )Jk0Qq7XzAb *Km6Xy"De1SuAd1Tv"Eg7Z}+Ic}2I`w.D[r*AXo(?Vm'>Um'?Vm)AXp,D\s1Iax7Og&>Womft2@BCDEGH I J L M  N  O  Q RSTVWXY[\]^_ a"b#c$d%f'g ( h !)!i!!"*"k""#,#l##$-$m$$%.%n%%&/&p&&'1'q''(2(r(()3)s))*4*u**+6+v++,7,w,,-8-x--.9.z../;/{//0<0|001=1}112>2223@3344A4455B5566C6677E7788F8899G99::H::; ;J;;< >M>>??O??@@P@@AAQAABBRBBCCTCCDDUDDEEVEEFFWFFGGYGGHHZHHII[IIJJ\JJKK^KKLL_LLM M`MMN!NaNNO"OcOOP#PdPPQ%QeQQR&RfRRS'ShSST(TiTTU*UjUUV+VkVVW,WmWWX-XnXXY/YoYYZ0ZpZZ[1[r[[\2\s\\]4]t]]^5^u^^_6_v__`7`x``a9ayaab:bzbbc;c{ccde~eef?ffgg@gghhAhhiiCiijjDjjkkEkkllFllmmHmmn nInno oJoop pKppq qMqqrrNrrssOssttPttuuRuuvvSvvwwTwwxxUxxyyWyyzzXzz{{Y{{||Z||}}\}}~~]~~^߀_ a"b#c$d%f'g(h)i*k,l-m.n/p0q2r3s4u5v7w8x9z:{<|=}>?ABÝCĞDşFƠGȡHɢ Iʣ Kˤ Lͥ MΦNϧPШQҩRӪSԫUլV׭WخXٯZڰ[ܱ\ݲ]޳_ߴ `!a"b#d%e&f'g(i*j+k,l-n/o0p1q²2só4tĴ5uŵ6vƷ7xǸ9yȹ:zɺ;{ʼ<}˽>~̾?Ϳ@΀AςCЃDфE҅FӇGԈIՉ J֊ K׌ L؍ NَOڏPۑQܒSݓTޔUߖVXYZ[]^_ `!b#c$d%e&g(h)i*j+l-m.n/o0q2r3s4t5v7w8x9y:{<|=}??@@@@AAA  A  B  B  B  B CCCCDDDDEEEEFFFFGG  G !!G!!""H""##H##$$H$$%%H%%& &I&&' 'I''( (I(() )I))* *J**+ +J++, ,J,,- -J--. .K../ /K//0 0K001 1K112 2L223 3L334 4L445 5L556 6M667 7M778 8M889 9M99::N::;;N;;<>O>>??O??@@O@@AAOAABBPBBCCPCCDDPDDEEPEEFFQFFGGQGGHHQHHIIQIIJJRJJKKRKKLLRLLMMRMMNNSNNOOSOOPPSPPQQSQQRRTRRSSTSSTTTTTUUTUUVVUVVWWUWWXXUXXYYUYYZZVZZ[[V[[\\V\\]]V]]^^W^^__W__``W``aaWaabbXbbccXccddXddeeXeeffYffggYgghhYhhiiYiijjZjjkkZkkllZllmmZmmnn[nnoo[oopp[ppqq[qqrr\rrss\sstt\ttuu\uuvv]vvww]wwxx]xxyy]yyzz^zz{{^{{||^||}}^}}~~_~~_߀_߁_߂ ` ` ` `!a!a!a!a"b"b"b"b#c#c#c#c$d$d$d$d%e%e%e%e&f&f&f&f'g'g'g'g(h(h(h(h)i)i)i)i*j*j*j*j+k+k+k+k,l,l,l,l-m-m-m-m.n.n.n.n/o/o/o/o0p°0pð0pİ0pŰ1qƱ1qDZ1qȱ1qɱ2rʲ2r˲2r̲2rͲ3sγ3sϳ3sг3sѳ4tҴ4tӴ4tԴ4tմ5uֵ5u׵5uص5uٵ6vڶ6v۶6vܶ6vݶ7w޷7w߷7w7w8x8x8x8x9y9y9y9y:z:z:z:z;{;{;{;{<|<|<|<|=}=}=}=}>~>~>~>~????@@@@AAA  A  B  B  B  B CCCCDDDDEEEEFFFFGG  G !!G!!""H""##H##$$H$$%%H%%& &I&&' 'I''( (I(() )I))* *J**+ +J++, ,J,,- -J--. .K../ /K//0 0K001 1K112 2L223 3L334 4L445 5L556 6M667 7M778 8M889 9M99::N::;;N;;<>O>>??O??@@O@@AAOAABBPBBCCPCCDDPDDEEPEEFFQFFGGQGGHHQHHIIQIIJJRJJKKRKKLLRLLMMRMMNNSNNOOSOOPPSPPQQSQQRRTRRSSTSSTTTTTUUTUUVVUVVWWUWWXXUXXYYUYYZZVZZ[[V[[\\V\\]]V]]^^W^^__W__``W``aaWaabbXbbccXccddXddeeXeeffYffggYgghhYhhiiYiijjZjjkkZkkllZllmmZmmnn[nnoo[oopp[ppqq[qqrr\rrss\sstt\ttuu\uuvv]vvww]wwxx]xxyy]yyzz^zz{{^{{||^||}}^}}~~_~~_߀_߁_߂ ` ` ` `!a!a!a!a"b"b"b"b#c#c#c#c$d$d$d$d%e%e%e%e&f&f&f&f'g'g'g'g(h(h(h(h)i)i)i)i*j*j*j*j+k+k+k+k,l,l,l,l-m-m-m-m.n.n.n.n/o/o/o/o0p°0pð0pİ0pŰ1qƱ1qDZ1qȱ1qɱ2rʲ2r˲2r̲2rͲ3sγ3sϳ3sг3sѳ4tҴ4tӴ4tԴ4tմ5uֵ5u׵5uص5uٵ6vڶ6v۶6vܶ6vݶ7w޷7w߷7w7w8x8x8x8x9y9y9y9y:z:z:z:z;{;{;{;{<|<|<|<|=}=}=}=}>~>~>~>~??QE|2#[t9hdX]j3YqQQWOJ>09Hdq|*j8JFTx*@sTScdZCSnSQ+LF:`#Ar~ x1wTgTg q~Dr7aaBPBVV^SP@=rL_୯2o]i8/=YVL[ydyЅ9x~D`mt]`CX,V&}Rm:!|A_ u+,wI`HaH 2oS on4YX eA/hl8{7%_7s]tL300($\pL[`Rs,TU q ``_0 :`*>(&I:4Rq_JK2ꮕx2Vdj` KA]<%6@1T#y9 R!lsBRQ_S ;.PXyX1wadUj^9iVURtS7Xq-|ם{ȏ#3Eg~4?YYbzLN)w e c{SCfUy?Penuu3:^]] d)7BmLoj[>/+t!9/2zmf?/;[Lkg8#k)`}~*?s @w$@lm]?`,Z%C;beK<>ˢsӫ׹6;݀ }ks ]Yz`=aM$_T)R+>;O`}0`5 X e0vc4yI<872c0}^ O)?D\_|uav;UP0S8c̎-XF(4 .LdY6iU'> FnODIԲrɪ&:z qlub9 f$e-:zFcwWŹYYm=3(thB @0;#Zm z  1<} Juty{TU`o]z] ik `W OS@@\q$\%*5X^x_jNQ~O0mx}j`Y d17T\{|jUkC$Lr<GR*=^>h[yyMOFw/0 mͰ:F OXL8\g"*E2{A=.92h]zTD,}j.1t)a}_h p8 :܃8JUPZ A/<>4: ,,}G]W bkjhqZh ?l8Kt@NAC >O.9\@3wo)*j4KBt JIW'Neh/AMnn5dYkVlXRRQQ3;~>Ay_lĸw3~`v(OK#f'1prS^x`d\QP}RV/$>1@a[VnAmz@>p$/KS4d}Dlhzic[GW5ەnW|6oD{uT#_MR];}h_z-{y}kY?eʪvp |FzNr["7a[0<>}bV~7&!|Ƹ~E*[~q hEa7bbphHfB0z P79"xmlF\u` t#&j37cVBunA'=9n {ܢ@Φ5lu" /[I^`)^7#0PFJqz`j^3&-Y;?V^|^}f je,6<44g1<$lWɅ 5l.B?r~ѣ-Z& `,- jq *d=Airx{4xNǎ`Ⱦ>ǻ=(L."bx#Y#8 "C4L':Y>#S&{9Wy`;al ro \ VS?N@AY72w!u/'& 0E@:^ۑE9 =I<G" 4 E E:+C?E @ 7X+b1;-@'e$eS$Sh#);)(2y4pAlAl %`(^M``YTO9O#P;8z8޿Q/ʗ`jszf~4{! qBG\ jDkahcE" SOoaW[`#0.oIacl>wC~`*[U@3GXv@sK_lvt&s2l5<`"n9z^BT:u%-)QM\i4}^Kxzs~X`oFH|cX)ՏFx (RR?1}My&TztSJ^n=x3 )XU3/2z =~s𺝂ZyXImF~p{bge,hi$F@hK nf,F,f7Q䀧#\̗h s(h,~]\q1W= vm\r1̡>"7? emebYEzyys3pp>d=Y #QU+KëL0g g-:\JqSo`Q&)dڄ|u1k(t~E[,yGm|\Cͩ2Mpo X ZYX{+?18 WwBrfbpz ߜG gـ0jd8B 9H FbB@+"v *Ͱ'B0pO\X8`"h+ 4ַ Lr l2IdBOo"A9<68 c)Z*)Bs9,:@ͣF tM -r'un "'):B,F!C:d.x1>]+d!2$p#" 3U(Z.sɰ=!NA9@:K0J,)9$@ ttF!gig@0s G**nXHZZ<`V MXTPv887$<17)rI6U6_ӮngJmmC5!JfC``^ nQaSW_l=D,+GqVaEip%r5rN2#cO! 'n,@eajbuzml i8,F?zόV/a*GkFWsYwvwu ~8J)nvsP6Ihx~;W+a,K]PY)<H"" KJl _3[ġBqGOM ^ Fά]KΦlr2)? !Q?@+B4a<'>72~'p&8!&ԿV'yABM0l)~(Sv ˙45Ta~pr 8xhv$~g $LX=g$?TLV4z+v;zNRX(3AJ";غLBWin`\inlއX}q =i~~*BB7ELB~`*d7?;UBnM-iZA H<Cg,>A5 $p%n~1O!]#/ v+ܜ. IY eSi$E=A58,9)lH(W B]0\x&Al2 >6,-$@=F =p =Exy}e?QQ6U!L=+uKuIp;'J4bWE^ji&~k"'j4w揣la[ThO@Gh+S9Sbaէw,. %̰. > PSF{n)eª**0=W)?oW6d ܙLtYO\JKF,}@z+le L^X1[G$lRU np{Ly/^!c>.9k-N6$%D!?uf\{`X}!@grdA+k4/f%].L@ Z  q (oKuWA8 "[9-8GMo3a888941fe'mH["HN$ßu%D;i(5 JC$'=K8^=>vI>z< &#@5#/H?,f$N!DfEC`F@jNADDH.S(ɍ%2rc*b+Mdpwjop l!eUa` afl\qqlrw$N:Y0bTWu7wl=\y[X}j%y~<Ewb}oEzqR:ۂz$wfAJLd8߷|#ʏ3u;EMw6caQ[%W#QbYGߐKvt`(h;`Irpx,Рٱ^^q ꨸ a \. ﷔/K\v-0#ydcRJ#GC|??zRnW9+T6ɶ͚ gwK{?{+rtB;z{7{~ tcpvkl*4>Ďˆ2IX<,U;Gd4\KX7W_RaDY.^ d6h*d#˹]jpgi%#+vJ8M24F?7у&ȓ0p6M>EdIfLrQGX-A;,8{ Qim%No!̽$ޕ` Gۣ|Qy :;,09!`te 7~Ҏ q> Dq:5?ٓb]-A3$ 1>S A tW p G }W)O4بkUlF?b3Q5Q'_9:@5E\ENvN M< Z = Ŧ .L.C$'m5(M*PeS-+)%ٝI 1=2/)t+(O0V(I(_.-,'ݭ,e߯ ь [3cX82I 1)M03G-m_3p5j4cL3$Au qǍDd?9$$6= 7>!:Z9x?=Al7,ȼ ŴKtu `.CGNR >wX@]`d|FI5zYp0=_/ ,ё(ן&`a: RqM쏔ᨕD9p~,hÛ"qSMr~iۛwzyg-QYR.GCA߮ JT(~I `6}3h*^;_rfz(lyourvqCtlv:ˮʝIKIY|R%R/OF׽EXjEEDHNR%Vȼ'ǼoB)hz``d1:S}'q+8$\{10BG*`m!(;.)Z4ƣŢc(e0ϦjBOE 5>3~ Lr ~ 7 *joe!2Ƈ<]Sbsz|jS j6$%!Fp "Z, 5J l , Z&r?L'=L}UZ36H+ ;Mqqbr DX̓מYD iy F_$.<< p p 0u@[y O%,vG)![VV [#8 @LYnLL! /DӇ - 6 'L"2!2Wlw #aszcV- p'G?W&&P'6K+ A&^P)'#U!$J K(DX.- I)!$E)S= ++Z ,|,C+oq+&\ 3 `;,$8 7[0F_-/6i3TR1xs65J9Cg45X/4!'i&0.+6BWBJY&&@'c=3HAGIfZ@EيE5̕iDq BIC=ÑFRN܆TMdNK^QKpe%N7h S0PMRewVglPn4PejksOg6oWknlgtpj\g\a8eq V ,B9w|v_!lψ{Yh|yh^gsilYO_KF0B7Wr1t.tx"va iu.,m%EtiQWO=VyaAC!NЅ_ lǒΈ ߋډ`I$Bmr|qh{8etxgdh#k]xP`QOKϓ֦Vf.mxܪU+'UvqJI8OWu_sNb{peWm2gڕ[ѡ?$x+)eH$;t~1ο&0-1_K47w=A*Ey+P-۪/M~{bh:TC9+sg#qWxkCPLF# %wҰjѴzsL^;C-'b mc*Vw Sʟd c!SYXѼ~EƞhًOG6*M 8 z, 6vTI$LUti; ȟs#YN6 `#S  +/KK n$rH }b?6F/*bb 1*E`Xc'*S[@ XVTk6 6Oy̋M'ޱkhʹvC3 = C#\ ?_)OS g3~,=ITp/4 8 Lmb{,gIC !) %O>"a{jR?p&Ӣ"95Y)*,Y$# 4&!$'\cJs*#'&#7 å#[ e'4!4z8L , .'**A+zޱ`t)/,I)"RF. 59';:"@}GcAA"NBB !(=.fը 9rԲ5*HIh_Mj!aca^udYh=OQ2PkPfQzձI 3:=H^WyN[SnJQaŪTUg@G}6uY-( e4fZeOdv`Ʃ]DŎ7Z eBEezôs}{s'R ِw԰z0z4vmrxy U[u 5Z_jvpRhöNaHS@^^WUmVrqOtLRti(s M@(|u{hlI;B|rF6Z47]?HvHSptNk~RiTʖ4$1+#$ylg6 TbDA).j,0!';,4{/33B/Cp[A'L ڙ`Ƴ  BOƛ4;*|~gP.2J~r[ae'^ةɄNr'\fDh* U.X%M-a'-|gQN5f F-QoL=149] ss֠YPW@6m'-L0` 4 Wi 1TASS e9}+ Hhexw -"SF  D J,2AtA7L5D5&E7Հ~A'$`$>$b ' $+9)zLxbYP^uN_L`6ߌEaD؄DNA\>,627m"ueBjA@Zbwf%4z( ~T`7XJhVKSM(AJWz)I;Ym:43CoTi>3_]&of$ssy^zy vj ʴmgjie`VZ:uZe`Ka&M:jM[Na?\Σ9[;YVkESTTa(SsaPD`r{\F$G- *! g2}Yo`~ i O5~A`<4SdLhw!2w.<.L]-sP1ۃz7%i1j@)6HYrtHФjdKib!8L"0B4Vq݈3?3Vkdg)2:OoFcV}pɎH@L  +y40,תDMXn:SۊvO,anmAmK   4Lc<MR$ր'q5nK9i;*]j(h'w%Hū Ty* n\7] 7Sz VzsE3^L+ITFuUAeV<<+ 81,M#b:h+I\N8. Vj.P^3/QJ9δ2?SD;tf&ttoHdH#H2@:~o:hG9JO13"Z/9GSRK!"GI & Vf&YbOfY czZ^."XdO}mJNbYFZSKs@zQAm<OrS/O(=R( PA,cM!7MEKRKKIIm!qd[jtTURF$\6r:oN zbIy؈ zҽ 7x5 dqf#3[,"[,Ž}\}pwf^`bMe3nwdNKT~>!x w Ķx7"{ltGX*w @"b \#Rzz&mcA4gtzΆdIwN2կ8Ɛ0M[׾ܼؠ N7p癉[EB-)kѩVE`Gkն}gQ0:w"DR!qD]'pvTGi-ɬ>t|^qYE*UF9<'DDX)gj{{ U'^O4AԚPҿb6qw{Ƭyw}j~6aޓ!]/>#QN(Ұ^ϫw}ESYN<(Rݼ(ڪ9~pJ9]R4x65/>8T t7 b1sBQvT/h.bƯfN!oӠN(d579I[Gq |wAui e ic+F2+R=a7Mhu~E3r &x Fm&c~/_!1ْ מ54'A5Z++s#C\n al,jQg$J[9BBChCi? E@Ҥ-0*& Uit 7\Yw P/bJ4WM!D#*B? >A% RGay`O\&Ș?S$@W:1/on,Y.D(E:[@vK;-m6J3l#61(.A!OHx HNMRI#IBpY2=U2_ NbW{NR^GyJ[B8I`#Za- mk>h-pTiuh,l_QQ mn&bmYUWSZBnU'q*dpEz*DEQq0}bǠt]kij'zpyV|@lbigRNjj`4xR)IjtΩW@v|`uRpzY,{A|?& Zkj4;\\KJDʫǁM E~VfOE,6Gx7J'JO@^W/W׎EGs=\4F0HEm.K=^vMZh0E9jTó: {2547IE`u ђ  J++r6BQTcz"+bjx NihӨ̴ jBJ=',2j?OcCr{,O?w~;Cj}l<͇Wˣ d.W=BwNT@d~G9ۆuwիѓ?Mº'W6yEX!mDR[QtxxJ)Ɵ o C+P;I7}]C}.~ubljJ'PYf}/p? kQThxw5ipCp:Էkcb_bY"W#8ЧO' |'i!]T6mZPYIv X(WPi#W@-DZ,@.?^"bi e!&[zicrnO U ]E(>?#Gl;q)I:xh6ɖ/ *QBF @ z?a3r5}0(+|&`!M!z:J3 e//na_)?&D$"E %l-/BE{(;%8e1N.%9+*4+6k@@B@$:~/1$m.PVvMqCCDV/G X g+i~6LB.TgYDܬz 1'3@SiiwM֝Zxzr=ǁ^h'T#@"0q?`T lM^ +Txo^n!O/ k)&7-E}Z~{yRwmlmkCx(Anyo-m;hMQi]k3i"o.Omo#iRd8`=`Z5) wuf.$jZR2V)C'U+`RTZ]6G[Y TUOjmĥ~nRyd$T;`nIi()Eh=BsZXD=CD BF\@;s+|GPalhA R?8v4:r1r\/*r"##){,&&n. VZA.b! )N<.WwG:^% 5L Q8Q:4x/\(ME#k0!F7%1W 1O12`.qX1,(v'% 6DJDg~:YO39.$1;w<&.@wKQ O$P<MEfNftPKƹMHpLU6T37a{bIjX8QR;T"]ggjkX#voEp;ox wyu=dLpyk^$i\, Z"Q: Xqul@HE1{׉-a5I4E ăMRǽ.ˤEV[nΉs޳C}ao2WIB1V om $Dn5KIη[j-jAy രte[[o>>  l)^4@s}Sl>>0Wj6}oЈw2߰r91 '}J&2}>;|TrcPx~,wۢr:kqkb> #1;}?F{X[~yق<A$xzqj*d0#[v*k7gAK{iWhi@mjޗh`\-ŁC q5c"X.wT>}UsZU?X8ZT \[WS(3t`cR hG#$4B~4@NC|B"INN&JG[1,l~,XfQhA 5j2-1Fe2w/3cم98o4 ;"J[ _r @VD.'U&+$Mi!| pڸxG 6a" l #Q!}!G`L 6 ! 8 ) h[TJ= 0 ֭9/f2=.n'T J=3'n +@-X bo5ҳ5j;. B}:S_d28H-+h1&X(2lR+'5(k]#wX&i$p!KPEnET=<6%8PApA :Ni9VA*8Lb2s63C3)! Y5~Y^`OII:2KUK[XXG'WOAPQ5j`TKmeT1P,iO3}gqbV\?\%iU@rzd$"5!V]pԣap[?u%dnL p1| KXKr)=|rSidնjkq@vsMWā@=,v8&D9/N8`;okg'H9RB]f5N9 s}9.~l=Q `lk~ߧS8@ xMrk'f2 jdBM hjXGlRt6opq;nBlc -y sj%e 2I cJC g\k|npQnulkug}{ s>1ja#c1 aF e|api.m9gnk~e O[[#x|m*_~UM*FR.;]UXV ~,X$$\Ϧ`Vo`OP1nz]s ObkEz B2AmMCuE+E&M,F @GxaP? 5/42+/E1Iq 03 0~96~20zten'UB01(%"$Bzqse} e} aJS-6!::" IO |<t d6qU#@ +e" $;IK|*? }(;+)f M6M7H^r)SkJ9Zx 馄ʂll7:v4Zc,A% * "#tX3XQx GJ^h+@VOS8r73 3:p5z .*@(_K$,q$Ъ $% UyU]%L"EE-GQORjOM?)yJDCG"g"Hqp D3PEO:7v'5dm`7S'Zs;[!d^l7 q r" uJ2vYRxx))!nxO| sa#nHo/zM*ewCwOS/wit(zB#pVM=Ɏ'. ['J:`Q\yƘr**&AgF2d}BLg7xA(D0sBS[şo:DΕ8uEEF.[@n%R 7eJx/]Bp(V ;i ! O }  5 c  I w  / ]  C q )X>l%S :h!O}6dKy2aHvA;y4s.m(g"a[UO J !!E!!""@"""#;#z##$7$v$$%3%r%%&/&n&&'+'j''(((g(()$)d))*"*a**++^++,,\,,--[--..Y..//X//00W0011V1122V2233V3344W4455X5566Y667)7p778E8899a99:7:~:; ;T;;<* >h>>????@@_@@A8AABBYBBC2CzCD DTDDE.EwEFFQFFG,GuGHHPHHI,IuIJJQJJK-KwKL LTLLM1M{MNNXNNO6OOPP_PPQ>QQRRgRRSGSST&TqTUUQUUV1V{VWW[WWX;XXYYfYYZFZZ[$[g[[\3\w\\]C]]^^S^^__c__`/`s``a?aab bPbbccaccd-dqdde>eef fOffgg`ggh-hqhhi>iij jOjjkk`kkl-lqllm>mmn nOnnoo_oop,ppppq=qqr rNrrss_sst,tpttu=uuv vNvvww_wwx,xpxxy=yyz zNzz{{`{{|-|q||}=}}~~K~~Xހ"e.r;~G̈́R؅^&h0s:}DɊ MҋVڌ_%g-n4v;}BŒH˓ MДSՕXږ\ޗ`"c&f(i*k,m.n2xIӠ^.tDΣX(m<Ʀ Pڧc2vDΪW$i6{HѮZ(l:~ñLղ^,p>ǵ Pٶb0uB̹Uߺ#h6{Iӽ]+p? S,uO˜*süNė)rŻMƖ(qǺMȖ(qɺMʖ(r˻M̗)rͼNΗ*sϼOИ*tѽOҘ+tӽOԘ+tսO֘*s׼Oؘ*sټNژ*sۼNܗ*sݼNޗ)r߻N)rM)rMN%[3i AwN&\5k CyQ*`8oG} V/e>tM&]6lF|V/f ?vO)`:pJ%[4h9m >rCxI}N T&Z,` 2 f  8 l > s  E z  L S%Z,a4i;pCxKS&[.c7k ?tI@~7u.l%c[  R ! !J!!""C"""#;#y##$4$r$$%-%k%%&&&d&&''^''((W(())Q))* *K**++F++,,@,,,-;-y--.6.t../1/o//0,0k001'1f112#2b2233^3344Z4455V5566S6677P7788M889 9J99::C:::;:;x;;<2">a>>??Y??@@R@@A AKAABBDBBBC=C{CCD6DuDDE0EoEEF*FiFFG$GcGGHH]HHIIXIIJJRJJKKMKKL LHLLMMDMMNN?N~NNO;OzOOP8PwPPQ4QsQQR1RpRRS-SmSST*TjTTU(UgUUV%VeVVW#WcWWX!XaXXYYWYYZ ZHZZZ[8[t[[\(\d\\]]T]]^^C^^^_2_n__` `\``aaJaaab8bsbbc%c`ccddMddde:eueef&fbffggNgggh9hthhi%i`iijjKjjjk6kqkkl!l\llm mFmmmn0njnnooToopp>pxppq'qaqqrrJrrrs3smssttUttuu=uwuuv%vavvw!wawwx x_xxyy^yyzz\zz{{Z{{||W||}}T}}~~P~~ Lʀ HƁC>}9w3q,j%c\؈Tω KƊB8v.k#`ێUϏ IÐ˲Y.uJصf;ʷX.v ]QF:ݽ/Ҿ$vǿkaVMŸCÕ9Č0Ń'zqiȻaɳYʬQˤJ̝C͖<ΐ6ω0Ѓ*}$xrmhռcַ _׳ZخV٪RڦNۣKܟHݜEޙBߖ?=;y(bK5oY C~.iS?y*eQ=x*eR@{.iW F5q$`P@|1m"^OA~3p&bU H=z0m#`S G:w.k"^R F ; x / l # `  U  I>{3p(eZOD:w/l%bXMC9v/l%bY"g 7 | !!L!!""a""#2#w#$$G$$%%]%%&.&s&&'D''((Z(()+)q))*B**++X++,*,o,,-A--..X../)/o//0@0011W112(2n223?3344U445&5l556=6677T778%8k889=99::T::;%;k;;<=<<==T==>&>l>>?>??@@V@@A)AnAAB9B|BCCGCCDDVDDE!EeEEF0FtFFG@GGH HPHHII`IIJ,JpJJK=KKL LNLLMM_MMN,NqNNO>OOP PPPPQQcQQR1RvRRSDSSTTXTTU'UlUUV;VVW WOWWXXdXXY3YxYZZHZZ[[\[[\+\p\\]>]]^ ^Q^^__d__`2`v``aDaabbUbbc"cfccd,dmdde0eqeef4fuffg8gxggh;h|hhi>iijjAjjkkCkkllEllmmFmmnnGnnooHooppHppqqGqqrrFrrssEssttCttuuAuuuv>v}vvw:wywwx6xuxxy2yqyyz-zlzz{({g{{|#|a||}}[}}~~U~~Nˀ Gā@~8v0p6x>†Fɇ MЈS։Yۊ]!b%e(h*k,l-m.n.m-l+j)h%d!`ޘ[ٙVӚP̛ IŜA8v/m&cޠYԡNɢC:|BƥIͦPӧV٨\ީ a$f)j,m0p3t7x;}@òFɳ LϴRֵYݶa'i/q8zBǻ LѼWܽb+n7zDQ_£*nò4qĮ'dšXƕMNJBȼ7tɲ-kʨ#a˟X̖P͎ HΆ@~ϼ8vе1oѮ*iҧ$bӡ\ԛVՕQ֐ L׊G؆Bف=|ڻ9x۷5tܳ1pݯ.mެ*iߩ'f$d"aYw#\Az'` F,eL3lS;u"\ D~,gO8r!\ E/iT>y)cN:t#] F/jS=x'aL6q ! [ F 1 l  W  C ~ .iUB}.iVC~0kX E3n!\J8t'bQ@[8  ` !>!!""f""#E##$#$m$%%L%%&+&u&' 'U''(4(~())^))*=**++h++,G,,-'-r-..R../3/~/00^001?112 2k233L334-4y455Z556<6677h778I889*9u9: :U::;5;;<<_<<=>==>>h>>?G??@%@o@AAMAAB+BuBC CSCCD2D|DEEZEEF9FFGGbGGH@HHIIjIIJIJJK(KsKLLRLLM2M}MNN]NNO=OOPPhPPQHQQR)RtRS SUSST6TTUUcUUVDVVW&WrWXXTXXY6YYZZdZZ[F[[\'\r\]]R]]^1^{^__Y__`7``aa]aab9bbcc]ccd8ddeeZeef3f{fg gSggh3hhiimij jWjjkAkkl*lwlmm`mmnHnno1o~oppfpqqMqqr4rrsshsttOttu5uuvvgvwwMwwx2x~xyycyyzGzz{+{w{||[||}>}}~!~m~P2}Ɂ_A׃"mO0{Ɔ\=ӈhH݊(rQ0zōYTlɐ'>Ukǔ$ݕ9Nbuљ-@RduО*ߟ:HT`jät̥$|Ӧ+ڧ16:=?@ACDFHJLNQSVY] [E/~̽hS>)xdQ >Í,{jź ZƩIǚ:Ȋ+{mʾ`˱S̥H͚>Α6ψ.Ё'{"vrpnopr v$|+ۂ2܊;ݔFޟR߫_n#~5?_@`!Bb%Ef )Jk0Qq7XzAb *Km6Xy"De1SuAd1Tv"Eg7Z}+Ic}2I`w.D[r*AXo(?Vm'>Um'?Vm)AXp,D\s1Iax7Og&>Womft2@BCDEGH I J L M  N  O  Q RSTVWXY[\]^_ a"b#c$d%f'g ( h !)!i!!"*"k""#,#l##$-$m$$%.%n%%&/&p&&'1'q''(2(r(()3)s))*4*u**+6+v++,7,w,,-8-x--.9.z../;/{//0<0|001=1}112>2223@3344A4455B5566C6677E7788F8899G99::H::; ;J;;< >M>>??O??@@P@@AAQAABBRBBCCTCCDDUDDEEVEEFFWFFGGYGGHHZHHII[IIJJ\JJKK^KKLL_LLM M`MMN!NaNNO"OcOOP#PdPPQ%QeQQR&RfRRS'ShSST(TiTTU*UjUUV+VkVVW,WmWWX-XnXXY/YoYYZ0ZpZZ[1[r[[\2\s\\]4]t]]^5^u^^_6_v__`7`x``a9ayaab:bzbbc;c{ccde~eef?ffgg@gghhAhhiiCiijjDjjkkEkkllFllmmHmmn nInno oJoop pKppq qMqqrrNrrssOssttPttuuRuuvvSvvwwTwwxxUxxyyWyyzzXzz{{Y{{||Z||}}\}}~~]~~^߀_ a"b#c$d%f'g(h)i*k,l-m.n/p0q2r3s4u5v7w8x9z:{<|=}>?ABÝCĞDşFƠGȡHɢ Iʣ Kˤ Lͥ MΦNϧPШQҩRӪSԫUլV׭WخXٯZڰ[ܱ\ݲ]޳_ߴ `!a"b#d%e&f'g(i*j+k,l-n/o0p1q²2só4tĴ5uŵ6vƷ7xǸ9yȹ:zɺ;{ʼ<}˽>~̾?Ϳ@΀AςCЃDфE҅FӇGԈIՉ J֊ K׌ L؍ NَOڏPۑQܒSݓTޔUߖVXYZ[]^_ `!b#c$d%e&g(h)i*j+l-m.n/o0q2r3s4t5v7w8x9y:{<|=}??@@@@AAA  A  B  B  B  B CCCCDDDDEEEEFFFFGG  G !!G!!""H""##H##$$H$$%%H%%& &I&&' 'I''( (I(() )I))* *J**+ +J++, ,J,,- -J--. .K../ /K//0 0K001 1K112 2L223 3L334 4L445 5L556 6M667 7M778 8M889 9M99::N::;;N;;<>O>>??O??@@O@@AAOAABBPBBCCPCCDDPDDEEPEEFFQFFGGQGGHHQHHIIQIIJJRJJKKRKKLLRLLMMRMMNNSNNOOSOOPPSPPQQSQQRRTRRSSTSSTTTTTUUTUUVVUVVWWUWWXXUXXYYUYYZZVZZ[[V[[\\V\\]]V]]^^W^^__W__``W``aaWaabbXbbccXccddXddeeXeeffYffggYgghhYhhiiYiijjZjjkkZkkllZllmmZmmnn[nnoo[oopp[ppqq[qqrr\rrss\sstt\ttuu\uuvv]vvww]wwxx]xxyy]yyzz^zz{{^{{||^||}}^}}~~_~~_߀_߁_߂ ` ` ` `!a!a!a!a"b"b"b"b#c#c#c#c$d$d$d$d%e%e%e%e&f&f&f&f'g'g'g'g(h(h(h(h)i)i)i)i*j*j*j*j+k+k+k+k,l,l,l,l-m-m-m-m.n.n.n.n/o/o/o/o0p°0pð0pİ0pŰ1qƱ1qDZ1qȱ1qɱ2rʲ2r˲2r̲2rͲ3sγ3sϳ3sг3sѳ4tҴ4tӴ4tԴ4tմ5uֵ5u׵5uص5uٵ6vڶ6v۶6vܶ6vݶ7w޷7w߷7w7w8x8x8x8x9y9y9y9y:z:z:z:z;{;{;{;{<|<|<|<|=}=}=}=}>~>~>~>~????@@@@AAA  A  B  B  B  B CCCCDDDDEEEEFFFFGG  G !!G!!""H""##H##$$H$$%%H%%& &I&&' 'I''( (I(() )I))* *J**+ +J++, ,J,,- -J--. .K../ /K//0 0K001 1K112 2L223 3L334 4L445 5L556 6M667 7M778 8M889 9M99::N::;;N;;<>O>>??O??@@O@@AAOAABBPBBCCPCCDDPDDEEPEEFFQFFGGQGGHHQHHIIQIIJJRJJKKRKKLLRLLMMRMMNNSNNOOSOOPPSPPQQSQQRRTRRSSTSSTTTTTUUTUUVVUVVWWUWWXXUXXYYUYYZZVZZ[[V[[\\V\\]]V]]^^W^^__W__``W``aaWaabbXbbccXccddXddeeXeeffYffggYgghhYhhiiYiijjZjjkkZkkllZllmmZmmnn[nnoo[oopp[ppqq[qqrr\rrss\sstt\ttuu\uuvv]vvww]wwxx]xxyy]yyzz^zz{{^{{||^||}}^}}~~_~~_߀_߁_߂ ` ` ` `!a!a!a!a"b"b"b"b#c#c#c#c$d$d$d$d%e%e%e%e&f&f&f&f'g'g'g'g(h(h(h(h)i)i)i)i*j*j*j*j+k+k+k+k,l,l,l,l-m-m-m-m.n.n.n.n/o/o/o/o0p°0pð0pİ0pŰ1qƱ1qDZ1qȱ1qɱ2rʲ2r˲2r̲2rͲ3sγ3sϳ3sг3sѳ4tҴ4tӴ4tԴ4tմ5uֵ5u׵5uص5uٵ6vڶ6v۶6vܶ6vݶ7w޷7w߷7w7w8x8x8x8x9y9y9y9y:z:z:z:z;{;{;{;{<|<|<|<|=}=}=}=}>~>~>~>~??F={rP`ii&8֒@?JjrLL}Qf `pp5oup'83Zll`s@Ilٍ,xs[vo.>P`uQF*tetpul6OZzNi}b}O@XHqkoz {Э5yxyioUzw::{ >7$Hrivy'2[Z9:EKkً c|jz"dJVr{:^5If|t|tW_ y y-NyAX3laa~t񁇦ٻ"I9vÆ /ɀ<KEt4#@p`}`53Ο@mXwBI$ u0ix]D/@<^vT`Z@Tm΍ћh[/󥕼uAcN9WNfBEeOs,O@b JCs|@=a>rW G|Gꅝ<~딛533쩙+1$w*7;#NHNh#G{ȡ;.)qM󚴺!J]^鍥]^6a9蝚  }S*:+YDX͹ZSinr sؒ:%4_(y2çP? [5C0(,쳖(푓|&p퍑0(KF4@'LNTm`%PfYXuNZF=.?;# 8(9?0?g9xk@XLvǖ k~1E "zGT&yt[kSgs]qV PIЂ ().>ϻt_^EZ f "vRʗ;w(uMFk{dK"_*.y@b{@*;m^Xl4sHwxxzzxFV^/BaY{)aF{ ,Yq ,n|T >WVdF>`h ej0lzn O%0.~%GT\!@+]<+nZcyfcA-46 CIR{T1X<\tS_,"*/kOMG 2F3OE3^l8u8Rh-dq|/VX]Ӎhu0bג{W O'J#EFR0 1>ia~z5ee; ԹQ^r.<3W褠GaTM4`Twإk:X?쏫YkrM*jla̙ W虗& K/? He՚h{ÖĀwDOQ$@C7EdJ1S뗘r-6-*}(*  K+ 6$? Os >IUdž] zsD`0W>gP+HqCɢ) Ν*ش-4G OHQ~v\aZT*c`j*stE$xyхJmzeL,^hsiXA4ļ[]>~)>h(#z4%F,mdźnegtx`yd$xy9w $.@fcw?)p]=n8NUIj_c6"hEkbMlY MԻ/"A[R"-7D Y9M_l_x=~wH Ec]OTqX[  1 0*H0.UBYNZzk!t}<c1Xj:M9W?DY~Il$W,@=%9FKTY[g[pz][5ӣ(%m$:(6n17M60Oebeb[ oln))@Ymddr鋄|3a`^&m%ϛlO*l{g-~&TodntjY :>r䉨xB&Uv$]*p][Ttpּpױ%qf.t =E^dnt"S?vt{*e9rBZZ{u׽utvEwIh06✚|Ltց`|ټ{Rg5|ך}_|C.I>azw>\|3'!;'%'ލ,~,G!D,/xoF)>TwC^S;#<ǵֱ,<Ss1\vƊ4xVpClɇcs((=WprDTUu9>;˼jg & 6z=9{jz[XDR hKH';E#?Ttx|s2A 8zHc짜S칚AEki31B^) q ɪi~Iz< GNĖ eړfČ1ʉ?k\fb=iӦ"-|Xᯉm[[MQ~B>gx$Mp@}*p9gpq]eW5`ҜK%t=QeJCN * ^`oAb nux:xBwv wA 1aKmoX/l^&q*l$ 8P9Sϫ\[l`refhj<(5S{Mb E("cm+2C? uIRZP,aSQW.-Z8CG`D +rT j8v~H<*yF1ie9> tC'# 'Sq"+4@Dm+TdnGx E,0, ] ]~>>{%g#g%90&@LSv]tjr #|"o<__^0b0@o}zDŽ`` SZene5e|P8`cfcnbDw|f}͍w`a?mRmii"Bi3>@7_h9dl1h`CҞQBzClZZ_'j\.MoY mCm5_o21~XpWn=0G >?ʟb<x`1[Au>rAj4rsϞ8LtdZ-1Zjssc1<٫ jܜ\?p}%]w͹4w٧>yAVy=y C3>~hs^F;à8*Diӂ:JJ~/dh (xS8d41GHDWJs-_3 !{O񩆌 ڇ(wWgkE`DIu%|+/R;zm%@/n # WoΛ{󖑘h bZ^ߐ_Q0 F&m<X|Z&R>e|3@q g>Ah ؿM iL뇫g(〢(ߞ ;0% I_P]:Ĉ'ǧ;K}L9.vDr?pBl8ju]T|`M#FW^@7Ă Dؖ-5!k$X\FHdnrG $"#x6Ly:|{5y,zocIzug yΑMخI2o.R)e)LgJoExmNq-Ypee8TSօZ_HNdoh80jtkkyl ` P2wv(9ZJFU+9!#69޷BKdO7T 5WC s[ !+!}H,P<(bc;]-)Op2Mg7:C<~@O R# ꄣ-gA60#NfyBZ7=ն}~">)ޛ-Y ""_#/GPBOK?[mz+ѻ+%>  99kE? >/$Z :@MXdnx]g݂.-UU\6`?9o摛|H` @ A?T&W)X#-N_QlU^* GH5}|1eWU$Ao&BV\ /]β]dvPJ'Pecie' C?}z)A?N$Ha^ma Ha<`K%|``ki'F;Ġ|u 'GcnedTnc׵eU#ZINlnoWmtdBNF6)Nig#g}filKj>"{VtnDa3?6CbēnC%msmopДqK5v=lK|M'+rIu5~Ӓygta+yztz4OzuBztA?`{'vɨˢe^G=s zfYb[[ SGRI>ۅ3EC@? .DgjqmvС/%%LH_` 㩜 Ț u ?ݒŽ4T46p hGhmᘆpOڃfk\`yV 삚PVZJWƀOʧ;GUHXY+lzQ+x$fT2lqo!o|Bnt0nno dCS*Y]|Rwm`ode_kCɥaM4QVYZT s  S!p,6^C?D6,w"*}V$y3)l62;\?=gDK #e ! 8r%}Dn0X(Rn\#3~h R&|*v/ # Z b y"?>\)^@Zwsq*; 1 ; ; j هOH  \!g8=G;Y-nxzڪg v^n$ k9MI0V]d'pŝyY&PPL]` ;U>|Xy`<3r4?8B `MW0^K[ ^D?y;~WZe3n4@IC}H ~OY`]w$ÒCczJ|-vȗe6F9E@KRLY1pO_a_G@R{]|c Ud<9KjNPepQ*7Oeaba2Q{Hw_@QaT'VVPZX$|)Kitcdv 8}[=^uNt`-as|a5 &<"k7coK\zj@ cVY D;2?DH@J ɻt /h# DX7@-s- ^*kB #z',Ɋ0w3 ++< Pgh!8'& UPyUs1?ܟ lK sp <IeX(@)Tq;W ׿ 籫{E^ [z-5ATjP3Z~ Rm 90bBR9`sZñZzrpII)(`| /`zxRc`nm>1(''~ s } NK-`Zz 7<]}{*Q=x`k82d a,$'m(+w NN5aMOQ*@#irht~-tH}tfS9,%,L-0Qw NSQ[! :?x|GO͒f &11|N6߃;F'L![\ZM5zO%T,ʂc4:MAC:Dnb{A_d_RgX [d,*yƘRG𜅚jݵEJûK޹XNsWQ={ix8edjFlP:l]zYd|Qr̳"|W\^Va)b3C(.8^?cs&2mOzX##{<nćvq1nj`)rarz[jrS*sZW`'", /F&Ը XK' Hxb9| ꮈ ˅'<~Piq qབྷ*8#Нj` XAu|Weg`Qi\ iXoiTD|i\ Ӌ7p~-'{@6i-Jwẑz8Kmjz]1JEMOTQ R25 חk(ڞ֊ߨq2KP EbP\'eO >a,1 5 8y\;%f aJޛU h2 4.G> ; l@,ɠw,ў*Y%<<!>A$wU&e ml/c?8AE\% A p[7 h%:h2/hv -49 5Nj g"  U U"pc >Hz) $7M]<LOonYj{jj{G  &8UK`r 6Vqigi@6}AA `x j```|'`dKts0t )"mpe;=c(e%VN0M|)wr^d-"yrFJG'aq$ki:Vo~{/̕b 6*FoM 0{sx DP,UP;s7qZAz)C6d &+]e0bF- O-uVV(dV\B+7ioI{d]LE̫58%f|`w dwrce2]6fWggOHh0 aܜ|$E9v| D*\~U#w pvu-aq4{o=v$Q%)x gH|y1u pf)bv^YK\ wZ^Y9O[?Uyp[_/ƥM(.'n #q*d_aoFSNE<>`&@+ fAh 2ɊaKk*?^'V 9 MbFR<4G+%Z%x(}+-bs +/=mb@D_ . 2YB)%%(̊"jThM'nǐL6 ؽGG ` H8w>bX7ܓ{>d_u V(JJLxa3=N+G7^B948|::%ez5M.,F[a0y-78zn>:o[.EXnH=֥ިZ`@3R M Zv%```vqvq]ĮL /,/&j"Xba:68= NW(]```ktvzV7i%I!r =][7 7$9< ZU.(Z!@zso"0XzH+D.&jtgs?<XC%D^w4R~~}rV c(Ssq|,9H/MF2]2_~‚'\o$;8. |֝?}UJRNQX +փdVzhJgO;5%Q+"/~jquT8T \n[aNrt [&DtEXQ.9>BHFM G$1-u9%pcYqx`fojsWnTkZXsT[O\,H_]:N/So6 G "e L}$ofxcg6f?dh٦EŖЕ+wems^*apX LbX(Jo&F:*-~/{G2(Є M\9I\й\PuҕY>ڙ N05։".$N)ɞ/'#!PF#e /eiyfT9jv%ZJ KU 6 Gf! 7 HJ[ ζx{~L S._c^r&H7T/;&iIL_v ) UCX'j<:8bdtU ULqqZ( ;XhuT B~Rya(.9'<Ul#s8V^@"4747 F0 R b#$<```ppWMGX(!FGT`!A):&@: N(\J```d$rgOP;'"z2RY;)-}:6J_(FLDosoeGQ^ (o]XZWgC<,2l?#)YvH}zs"v$_PՉI$Nݳfe@ik; 7@Q>d5^wcpVpcZ1"7")5sqhqs;<%GJPGe#g9{ckRicQbcH6ԛ;.,)/"L!zz EQ9`)/_^ֱgTXkJB71V-':SAF=846~98 8"oe`:DMZ6zz[Rh~UUZD^VITHODNP<Rd/wwr g{Y*< 2}9 w q?q 'D:^+U;'lR( gR%CtRըn_[Pz1,d& KZz(as"Ths}QljQ];DdX88UQ5T6R8'`ţ@}yaS᪙1 9?v4J<%2U3xk-(!nywMBt![bҭUǵreH5*( Ruu<hgFR#!; A :p(jD-ۡ&( =9|拵P)XGt{z7 ^Y0ocE?4;@N~''yplCЉ autG<gH4Xzȡ67aW}MK47gVsV8x?U$(T'%]X./bHbUOD !w#*2>]yuEsrq?,=@9H]*Nda4ٳ%N ۆ!ۊ`5242z 1u5?o6{uYN bJvE=k;`ل>SE< J6iN5HI2WK,,Kdm+ PkPfF^qhjyfcgTE_l$EN}-u?:,(=*,=n(? 4]95taj mxXsN4L`kj>kc9lb;"Z3M5bRG+sN#NJ$L&dȾsѪ&r&SxR>x,`VV/#V9|e<op no lOԮɂKݼBz=UL3EtY6 +0bw _ iגܛg.?Ϡ[ ѥ3|\1lL;iЉp%7R@@m8#_f5o./]yeiMS,{0gϵړз:eΗSg?:ED6ZWiZpAIE;Yt<N:zI@s-lE7XmbGUH4. - 6 @]jy@}``OfCg1 % F5%}-^"@3 >f&SDlfE@w'bZ'O^Dh'i6EzK,i"j[/2 9%@c8cf:Jb GxHD<"3# |M.JFP:;K.U+T=(Cdx[M>G:~@""3 iqx峘BY.TWZ?_"l+1&>K*Jk0T],Ә̐)-cpkha]="E*2jw2D^tKȴ|W vO-"e0`24]22}t)ehިNj2 t#%eA!d^C%We(gPN.<#2$A8DpDBs0󹊢ltIYsCA W:*]VSLzKt٘E!5;0%.',$/V#/`!ϠVxjeZ]G^E:hSX2*V%Zk۸%U#L"rC"@>@~ $1#.~:deD)}fxBMʛ^f~9v f_]FԘ ה4kUF) F&XfρDz,V8~|z/S4BrM>Ki$k §<e8h٧e| Rbֲ)Bp'DZM7suɝB'1%ۗgfcY7/Y %<cbfbc6hV.IbvƳm->2^ "6YL`pGtGrV1 K d $D , 7 @^cB}``Y}D87h# ;=*)!(l 2$>X^c>zah]'[>_5)lNdjWX;z'% l5 0 Iz.qxs0se@@Q*&UM-'lJ'h0| thRW=s"p^KY< .TmAaMHq>>*:8 V4CM{}gMf6-J".J[ G?':7/1s') 7u 6F2FSu:lZb|LOw5L>i'I JJSP˜O CP .95;4WFHw兮Uj2j/ph")n?djrfmo$Bl!SCDE ОDFҦ[5ܨF šh6-QsB&,{yg\ffݣĄ'OcC=N1v*4lC?\wl|rμb-oEijҢԾ_5׆Pֿoiafˉ[{@MN"%7ސh)yKgaE#!&VGH- XPo7P^w6 "a5XJ/E'T`sBûz*Z nEE ! +(696R _6;V`G76% ` w2^!sm a&!2TPd6ZXIa3`~6- Wp3N-u !E!N-Pc7]-eCU+6) 6ك43+z /!%5C >=R/~#MaD@#=:><?/pD3GJ9*& W ->g]Qky=En!nEdG[,Z7^TcVcU Ty;3.-]! uLLf&ÖP .)3Hw\lyrCjuSjNOHd$Wz/\[ |{+FqXYdlvEm{r[b\U8ƭȏ,~=6f{Vhn ʍ)տ`KiAp\C tVF0R_~dcq~YKR%D19HdX\yһV[~-y , 8sM ``vL/!-QQ.: @M/8d28(m9ʒ %UYb.`) + , <Y?P6e9#2` Z> *Q& LL l=>!P8{0"o O q(‹m-*(&q]] 3.NC'GUDи@Q%k4,-.*<| Z[+Z5{ʜk;+FXzD>>.:3 *GF B֢(hH]gj}RcuUNOWST:OI>,dد[qL2}cqNZuSYRDP.I+( dq+oXN=L&vUD<%86B7p/a)1C!OB oP|zWgO>;W(g/9%5 o2QeK ܸ3Bwуzl^iWI3754*//2 _.㒳1;'c 7o42_k9^c]U(IKX;D7OAc:*=8i- S|jiAdX._v3 k#.gCXfY/VZUS68n0GЦK xM;#D>T,@;Vd"ɤX,UpCT׉!W.Wz6ș(:Xƅi_Qxߎe b8ӑ v;Xb-†Э_cw sjARg)z9&OQbzkB|5TͪnVkLx^&w=yy/DSv`jzL+&bE  Ac%I%<-+J*rf%y 2ȓ޽?z T v<  }$#&Y-H/x6& ";7 jh  !  m d "!-vH_1n~'3{q %e%! l ) )*H%Q OYx= 1ėؿ!Mţ-& $." p F =T3DRlul/vbq&_>07:1( ۫xW$"E.g`#zbd-NsAs;xNzJuB48 .ʼn go-\B3Rd|Kf=d23"ii2Q\ݛE92c |7Uc2*F/&U_4av Q~TP='Fq\DttP3M(Y O/ [qe YXF*ȋ=m\vUNp>f*.-" o+[trx /Qm۾_xyV`p06SacQWDm^5[.;-Ma&**2% Hj ]ڹk`}5z w>n)aU$O?kGkDs7AXB7- rźf;nt.CX̛"[-31Txx{vɨAtt]B:`<}">No%r *CDYjep왹Fuox~[Ѓ/T X`Ԋ"(*EJBWdֆTp$ggʀgiP+8[_aQ'BVT`o{:۳@C /#6dIX`oP} ɞ4GkAQ)yyJJ 2 e?0 eXxuBCdVW ܛ gx Wjjqq ~=HXwopy  _Mm_[~ yr:rY={i O߻ ; ՜ ࣅ 7mm_ ) {6U}]p,OAc}2x$*J"H2-ԍJ"shX XvJ]N9.2) ޖ,M 08IPiv8ngp\SMo>3,HD9*u 3<f"P8?Z5/)7!W}$ZXME?H,'!o|N91C*Yn/h}}}uh;RJ<gS+EQ.#$ _)Sϖ5clsLsF6#R':!d k-0O#D'XxjpOYX(K9E4\%'8VR0!= {̸'cZ30Xs(l^S#F.+;iGP5`.x/r6."_-$s #hu<)G䔍|Y n&ox>/rqOYkl%S :h!O}6dKy2aHvA;y4s.m(g"a[UO J !!E!!""@"""#;#z##$7$v$$%3%r%%&/&n&&'+'j''(((g(()$)d))*"*a**++^++,,\,,--[--..Y..//X//00W0011V1122V2233V3344W4455X5566Y667)7p778E8899a99:7:~:; ;T;;<* >h>>????@@_@@A8AABBYBBC2CzCD DTDDE.EwEFFQFFG,GuGHHPHHI,IuIJJQJJK-KwKL LTLLM1M{MNNXNNO6OOPP_PPQ>QQRRgRRSGSST&TqTUUQUUV1V{VWW[WWX;XXYYfYYZFZZ[$[g[[\3\w\\]C]]^^S^^__c__`/`s``a?aab bPbbccaccd-dqdde>eef fOffgg`ggh-hqhhi>iij jOjjkk`kkl-lqllm>mmn nOnnoo_oop,ppppq=qqr rNrrss_sst,tpttu=uuv vNvvww_wwx,xpxxy=yyz zNzz{{`{{|-|q||}=}}~~K~~Xހ"e.r;~G̈́R؅^&h0s:}DɊ MҋVڌ_%g-n4v;}BŒH˓ MДSՕXږ\ޗ`"c&f(i*k,m.n2xIӠ^.tDΣX(m<Ʀ Pڧc2vDΪW$i6{HѮZ(l:~ñLղ^,p>ǵ Pٶb0uB̹Uߺ#h6{Iӽ]+p? S,uO˜*süNė)rŻMƖ(qǺMȖ(qɺMʖ(r˻M̗)rͼNΗ*sϼOИ*tѽOҘ+tӽOԘ+tսO֘*s׼Oؘ*sټNژ*sۼNܗ*sݼNޗ)r߻N)rM)rMN%[3i AwN&\5k CyQ*`8oG} V/e>tM&]6lF|V/f ?vO)`:pJ%[4h9m >rCxI}N T&Z,` 2 f  8 l > s  E z  L S%Z,a4i;pCxKS&[.c7k ?tI@~7u.l%c[  R ! !J!!""C"""#;#y##$4$r$$%-%k%%&&&d&&''^''((W(())Q))* *K**++F++,,@,,,-;-y--.6.t../1/o//0,0k001'1f112#2b2233^3344Z4455V5566S6677P7788M889 9J99::C:::;:;x;;<2">a>>??Y??@@R@@A AKAABBDBBBC=C{CCD6DuDDE0EoEEF*FiFFG$GcGGHH]HHIIXIIJJRJJKKMKKL LHLLMMDMMNN?N~NNO;OzOOP8PwPPQ4QsQQR1RpRRS-SmSST*TjTTU(UgUUV%VeVVW#WcWWX!XaXXYYWYYZ ZHZZZ[8[t[[\(\d\\]]T]]^^C^^^_2_n__` `\``aaJaaab8bsbbc%c`ccddMddde:eueef&fbffggNgggh9hthhi%i`iijjKjjjk6kqkkl!l\llm mFmmmn0njnnooToopp>pxppq'qaqqrrJrrrs3smssttUttuu=uwuuv%vavvw!wawwx x_xxyy^yyzz\zz{{Z{{||W||}}T}}~~P~~ Lʀ HƁC>}9w3q,j%c\؈Tω KƊB8v.k#`ێUϏ IÐ˲Y.uJصf;ʷX.v ]QF:ݽ/Ҿ$vǿkaVMŸCÕ9Č0Ń'zqiȻaɳYʬQˤJ̝C͖<ΐ6ω0Ѓ*}$xrmhռcַ _׳ZخV٪RڦNۣKܟHݜEޙBߖ?=;y(bK5oY C~.iS?y*eQ=x*eR@{.iW F5q$`P@|1m"^OA~3p&bU H=z0m#`S G:w.k"^R F ; x / l # `  U  I>{3p(eZOD:w/l%bXMC9v/l%bY"g 7 | !!L!!""a""#2#w#$$G$$%%]%%&.&s&&'D''((Z(()+)q))*B**++X++,*,o,,-A--..X../)/o//0@0011W112(2n223?3344U445&5l556=6677T778%8k889=99::T::;%;k;;<=<<==T==>&>l>>?>??@@V@@A)AnAAB9B|BCCGCCDDVDDE!EeEEF0FtFFG@GGH HPHHII`IIJ,JpJJK=KKL LNLLMM_MMN,NqNNO>OOP PPPPQQcQQR1RvRRSDSSTTXTTU'UlUUV;VVW WOWWXXdXXY3YxYZZHZZ[[\[[\+\p\\]>]]^ ^Q^^__d__`2`v``aDaabbUbbc"cfccd,dmdde0eqeef4fuffg8gxggh;h|hhi>iijjAjjkkCkkllEllmmFmmnnGnnooHooppHppqqGqqrrFrrssEssttCttuuAuuuv>v}vvw:wywwx6xuxxy2yqyyz-zlzz{({g{{|#|a||}}[}}~~U~~Nˀ Gā@~8v0p6x>†Fɇ MЈS։Yۊ]!b%e(h*k,l-m.n.m-l+j)h%d!`ޘ[ٙVӚP̛ IŜA8v/m&cޠYԡNɢC:|BƥIͦPӧV٨\ީ a$f)j,m0p3t7x;}@òFɳ LϴRֵYݶa'i/q8zBǻ LѼWܽb+n7zDQ_£*nò4qĮ'dšXƕMNJBȼ7tɲ-kʨ#a˟X̖P͎ HΆ@~ϼ8vе1oѮ*iҧ$bӡ\ԛVՕQ֐ L׊G؆Bف=|ڻ9x۷5tܳ1pݯ.mެ*iߩ'f$d"aYw#\Az'` F,eL3lS;u"\ D~,gO8r!\ E/iT>y)cN:t#] F/jS=x'aL6q ! [ F 1 l  W  C ~ .iUB}.iVC~0kX E3n!\J8t'bQ@[8  ` !>!!""f""#E##$#$m$%%L%%&+&u&' 'U''(4(~())^))*=**++h++,G,,-'-r-..R../3/~/00^001?112 2k233L334-4y455Z556<6677h778I889*9u9: :U::;5;;<<_<<=>==>>h>>?G??@%@o@AAMAAB+BuBC CSCCD2D|DEEZEEF9FFGGbGGH@HHIIjIIJIJJK(KsKLLRLLM2M}MNN]NNO=OOPPhPPQHQQR)RtRS SUSST6TTUUcUUVDVVW&WrWXXTXXY6YYZZdZZ[F[[\'\r\]]R]]^1^{^__Y__`7``aa]aab9bbcc]ccd8ddeeZeef3f{fg gSggh3hhiimij jWjjkAkkl*lwlmm`mmnHnno1o~oppfpqqMqqr4rrsshsttOttu5uuvvgvwwMwwx2x~xyycyyzGzz{+{w{||[||}>}}~!~m~P2}Ɂ_A׃"mO0{Ɔ\=ӈhH݊(rQ0zōYTlɐ'>Ukǔ$ݕ9Nbuљ-@RduО*ߟ:HT`jät̥$|Ӧ+ڧ16:=?@ACDFHJLNQSVY] [E/~̽hS>)xdQ >Í,{jź ZƩIǚ:Ȋ+{mʾ`˱S̥H͚>Α6ψ.Ё'{"vrpnopr v$|+ۂ2܊;ݔFޟR߫_n#~5?_@`!Bb%Ef )Jk0Qq7XzAb *Km6Xy"De1SuAd1Tv"Eg7Z}+Ic}2I`w.D[r*AXo(?Vm'>Um'?Vm)AXp,D\s1Iax7Og&>Womft29Up   ,@Tgy ) 2!:"A#H$N%T&X'\(_)b*c+d,d-c.b/`0]1Z2V3Q4L5F6@78809':;<<=>?@ABCDEyFlG`HUIJJ@K6L.M&NOPQR STUVWXYZ[\] ^ _`abc d&e,f2g9hAiIjRk\lgmrnopqrstuvxy$z9{N|e}|~ǁ0Iawˍގ#2@NZfr|vk^QC4%޻ʼqY@& ƬǕ~hS>)ѺҪӚԌ~qeZPG?81,(%#""#%(-39AJT`lz,Fa~ }xsojea\XS O!K"G#D$@%=&9'5(1)-*)+%, -./01 2 3456789:;< = >?@A!B&C+D0E5F:G?HDIIJOKTLZM`NfOlPrQxRSTUVWXYZ[\]^_`abcefgh i)j1k:lBmInQoXp_qfrlsrtwu{vwxyz{|}~}zvrnid_YTNHB<60*$  &/9DO\jx²ҳ&8J[m (6DQ]iuЉђҚӡԧի֯ײشٶڶ۶ܵݳް߮~vmdZOD8,}iU@+ z o d YND9/% !"#$%&'|(v)p*j+e,`-[.V/S0O1L2I3G4E5C6B7A8@9?:?;???@@BADBGCJDNERFWG]HcIkJrK{LMNOPQRSTUW XY&Z4[C\Q]^^l_y`abcdefghijkmnopq'r0s8t?uGvNwUx[yazg{l|q}v~z}}xsmhb[UOJD>83-("  &-5>GPZdoz9$x=RNNK ԠV'$תyga)bØAH4:"y+ y<^%^";c\eL 7Ѳݍ[Ҁݠgi;PtYdz =?7܈3O3AHϋoko݌fdN0A޻_GQltL0ރV!8Nr TblD SQ ,d9QECLZjy7Ӂ5?-u@۟tSMPa24dMYg$Gۃ՘M]8'/ _d htrN}ܥ2l2;uI 6UvOMT[̳z#dQ gS&)t+9|EO͍gl7ܵș {d. ilvpES#>=k ȗ7YU,v#>CPGEvǻ6]k伔.zpqr~Cz<85F .2΂GbnH;)J8ZKI2}?3$.11twׄ(хQ,҆|C0~png_TJ=jH(+(x J@6\tr("C*!8)VTapf]mmr޻̋ݏ֢JDߦo,%}؎Ѡ+$֮ desc$cprt "wtptDchadX,rXYZgXYZbXYZrTRC gTRC bTRC mluc enUSsP3Cmluc enUSCC0XYZ -sf32 B%NXYZ =XYZ J7 XYZ (8 xparafi Y [libvips-8.15.1/libvips/colour/profiles/sGrey.icm000066400000000000000000000005501454007373500216470ustar00rootroot00000000000000hlcms mntrGRAYXYZ  acspMSFTsawsctrl-handbzigdesc$cprt"wtptchad,kTRCH mluc enUSsGrymluc enUSCC0XYZ -sf32 ?&qparafi Y [libvips-8.15.1/libvips/colour/profiles/sRGB.icm000066400000000000000000000007401454007373500213540ustar00rootroot00000000000000lcms mntrRGB XYZ  acspMSFTsawsctrl-handyVZ>#UFO desc$cprt "wtptDchadX,rXYZgXYZbXYZrTRC gTRC bTRC mluc enUSsRGBmluc enUSCC0XYZ -sf32 ?&qXYZ o8XYZ bXYZ $parafi Y [libvips-8.15.1/libvips/colour/rad2float.c000066400000000000000000000153441454007373500202720ustar00rootroot00000000000000/* Convert Radiance 32bit packed format to float. * * 3/3/09 * - from LabQ2Lab and Radiance sources * 2/11/09 * - gtkdoc * 20/9/12 * - redo as a class * 13/12/12 * - tag output as scRGB, since it'll be 0-1 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Sections of this file from Greg Ward and Radiance with kind permission. The Radience copyright notice appears below. */ /* ==================================================================== * The Radiance Software License, Version 1.0 * * Copyright (c) 1990 - 2009 The Regents of the University of California, * through Lawrence Berkeley National Laboratory. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. 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. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes Radiance software * (http://radsite.lbl.gov/) * developed by the Lawrence Berkeley National Laboratory * (http://www.lbl.gov/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Radiance," "Lawrence Berkeley National Laboratory" * and "The Regents of the University of California" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact radiance@radsite.lbl.gov. * * 5. Products derived from this software may not be called "Radiance", * nor may "Radiance" appear in their name, without prior written * permission of Lawrence Berkeley National Laboratory. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 Lawrence Berkeley National Laboratory OR * ITS 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. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of Lawrence Berkeley National Laboratory. For more * information on Lawrence Berkeley National Laboratory, please see * . */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pcolour.h" /* Begin copy-paste from Radiance sources. */ #define RED 0 #define GRN 1 #define BLU 2 #define CIEX 0 /* or, if input is XYZ... */ #define CIEY 1 #define CIEZ 2 #define EXP 3 /* exponent same for either format */ #define COLXS 128 /* excess used for exponent */ #define WHT 3 /* used for RGBPRIMS type */ #undef BYTE #define BYTE unsigned char /* 8-bit unsigned integer */ typedef BYTE COLR[4]; /* red, green, blue (or X,Y,Z), exponent */ typedef float COLORV; typedef COLORV COLOR[3]; /* red, green, blue (or X,Y,Z) */ #define copycolor(c1, c2) ( \ (c1)[0] = (c2)[0], \ (c1)[1] = (c2)[1], \ (c1)[2] = (c2)[2]) static void colr_color(COLOR col, COLR clr) /* convert short to float color */ { if (clr[EXP] == 0) col[RED] = col[GRN] = col[BLU] = 0.0; else { double f = ldexp(1.0, (int) clr[EXP] - (COLXS + 8)); col[RED] = (clr[RED] + 0.5) * f; col[GRN] = (clr[GRN] + 0.5) * f; col[BLU] = (clr[BLU] + 0.5) * f; } } /* End copy-paste from Radiance sources. */ typedef VipsColourCode VipsRad2float; typedef VipsColourCodeClass VipsRad2floatClass; G_DEFINE_TYPE(VipsRad2float, vips_rad2float, VIPS_TYPE_COLOUR_CODE); static void vips_rad2float_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { COLR *inp = (COLR *) in[0]; COLOR *outbuf = (COLOR *) out; int i; for (i = 0; i < width; i++) colr_color(outbuf[i], inp[i]); } static void vips_rad2float_class_init(VipsRad2floatClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); object_class->nickname = "rad2float"; object_class->description = _("unpack Radiance coding to float RGB"); colour_class->process_line = vips_rad2float_line; } static void vips_rad2float_init(VipsRad2float *rad2float) { VipsColour *colour = VIPS_COLOUR(rad2float); VipsColourCode *code = VIPS_COLOUR_CODE(rad2float); colour->coding = VIPS_CODING_NONE; colour->interpretation = VIPS_INTERPRETATION_scRGB; colour->format = VIPS_FORMAT_FLOAT; colour->bands = 3; code->input_coding = VIPS_CODING_RAD; } /** * vips_rad2float: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Unpack a RAD (#VIPS_CODING_RAD) image to a three-band float image. * * See also: vips_float2rad(), vips_LabQ2LabS(). * * Returns: 0 on success, -1 on error. */ int vips_rad2float(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("rad2float", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/sRGB2HSV.c000066400000000000000000000075711454007373500176570ustar00rootroot00000000000000/* to HSV ... useful for compatibility with other packages * * 9/6/15 * - from LabS2Lab.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include "pcolour.h" typedef VipsColourCode VipssRGB2HSV; typedef VipsColourCodeClass VipssRGB2HSVClass; G_DEFINE_TYPE(VipssRGB2HSV, vips_sRGB2HSV, VIPS_TYPE_COLOUR_CODE); static void vips_sRGB2HSV_line(VipsColour *colour, VipsPel *out, VipsPel **in, int width) { unsigned char *p = (unsigned char *) in[0]; unsigned char *q = (unsigned char *) out; int i; for (i = 0; i < width; i++) { unsigned char c_max; unsigned char c_min; float secondary_diff; float wrap_around_hue; if (p[1] < p[2]) { if (p[2] < p[0]) { /* Center red (at top). */ c_max = p[0]; c_min = p[1]; secondary_diff = p[1] - p[2]; wrap_around_hue = 255.0; } else { /* Center blue. */ c_max = p[2]; c_min = VIPS_MIN(p[1], p[0]); secondary_diff = p[0] - p[1]; wrap_around_hue = 170.0; } } else { if (p[1] < p[0]) { /* Center red (at bottom) */ c_max = p[0]; c_min = p[2]; secondary_diff = p[1] - p[2]; wrap_around_hue = 0.0; } else { /* Center green */ c_max = p[1]; c_min = VIPS_MIN(p[2], p[0]); secondary_diff = p[2] - p[0]; wrap_around_hue = 85.0; } } if (c_max == 0) { q[0] = 0; q[1] = 0; q[2] = 0; } else { unsigned char delta; q[2] = c_max; delta = c_max - c_min; if (delta == 0) q[0] = 0; else q[0] = 42.5 * (secondary_diff / (float) delta) + wrap_around_hue; q[1] = delta * 255.0 / (float) c_max; } p += 3; q += 3; } } static void vips_sRGB2HSV_class_init(VipssRGB2HSVClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsColourClass *colour_class = VIPS_COLOUR_CLASS(class); object_class->nickname = "sRGB2HSV"; object_class->description = _("transform sRGB to HSV"); colour_class->process_line = vips_sRGB2HSV_line; } static void vips_sRGB2HSV_init(VipssRGB2HSV *sRGB2HSV) { VipsColour *colour = VIPS_COLOUR(sRGB2HSV); VipsColourCode *code = VIPS_COLOUR_CODE(sRGB2HSV); colour->interpretation = VIPS_INTERPRETATION_HSV; colour->format = VIPS_FORMAT_UCHAR; colour->bands = 3; colour->input_bands = 3; code->input_coding = VIPS_CODING_NONE; code->input_format = VIPS_FORMAT_UCHAR; code->input_interpretation = VIPS_INTERPRETATION_sRGB; } /** * vips_sRGB2HSV: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Convert to HSV. * * HSV is a crude polar coordinate system for RGB images. It is provided for * compatibility with other image processing systems. See vips_Lab2LCh() for a * much better colour space. * * See also: vips_HSV2sRGB(), vips_Lab2LCh(). * * Returns: 0 on success, -1 on error. */ int vips_sRGB2HSV(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("sRGB2HSV", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/sRGB2scRGB.c000066400000000000000000000164251454007373500201550ustar00rootroot00000000000000/* Turn displayable rgb files to scRGB. * * Modified: * 15/11/94 JC * - memory leak fixed * - error message added * 16/11/94 JC * - partialed * 21/9/12 * - redone as a class * - sRGB only, support for other RGBs is now via lcms * 6/11/12 * - add 16-bit sRGB import * 11/12/12 * - cut about to make sRGB2scRGB.c * 12/2/15 * - add 16-bit alpha handling * 26/2/16 * - look for RGB16 tag, not just ushort, for the 16-bit path * 24/11/17 lovell * - special path for 3 and 4 band images */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pcolour.h" /* We can't use VipsColourCode as our parent class. We want to handle * alpha ourselves so we can get 16 -> 8 bit conversion right. */ typedef struct _VipssRGB2scRGB { VipsOperation parent_instance; VipsImage *in; VipsImage *out; } VipssRGB2scRGB; typedef VipsOperationClass VipssRGB2scRGBClass; G_DEFINE_TYPE(VipssRGB2scRGB, vips_sRGB2scRGB, VIPS_TYPE_OPERATION); /* Convert a buffer of 8-bit pixels. */ static void vips_sRGB2scRGB_line_8(float *restrict q, VipsPel *restrict p, int extra_bands, int width) { int i, j; if (extra_bands == 0) { for (i = 0; i < width; i++) { q[0] = vips_v2Y_8[p[0]]; q[1] = vips_v2Y_8[p[1]]; q[2] = vips_v2Y_8[p[2]]; p += 3; q += 3; } } else if (extra_bands == 1) { for (i = 0; i < width; i++) { q[0] = vips_v2Y_8[p[0]]; q[1] = vips_v2Y_8[p[1]]; q[2] = vips_v2Y_8[p[2]]; q[3] = p[3] / 255.0; p += 4; q += 4; } } else { for (i = 0; i < width; i++) { q[0] = vips_v2Y_8[p[0]]; q[1] = vips_v2Y_8[p[1]]; q[2] = vips_v2Y_8[p[2]]; p += 3; q += 3; for (j = 0; j < extra_bands; j++) q[j] = p[j] / 255.0; p += extra_bands; q += extra_bands; } } } /* Convert a buffer of 16-bit pixels. */ static void vips_sRGB2scRGB_line_16(float *restrict q, unsigned short *restrict p, int extra_bands, int width) { int i, j; if (extra_bands == 0) { for (i = 0; i < width; i++) { q[0] = vips_v2Y_16[p[0]]; q[1] = vips_v2Y_16[p[1]]; q[2] = vips_v2Y_16[p[2]]; p += 3; q += 3; } } else if (extra_bands == 1) { for (i = 0; i < width; i++) { q[0] = vips_v2Y_16[p[0]]; q[1] = vips_v2Y_16[p[1]]; q[2] = vips_v2Y_16[p[2]]; q[3] = p[3] / 65535.0; p += 4; q += 4; } } else { for (i = 0; i < width; i++) { q[0] = vips_v2Y_16[p[0]]; q[1] = vips_v2Y_16[p[1]]; q[2] = vips_v2Y_16[p[2]]; p += 3; q += 3; for (j = 0; j < extra_bands; j++) q[j] = p[j] / 65535.0; p += extra_bands; q += extra_bands; } } } static int vips_sRGB2scRGB_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsRect *r = &out_region->valid; VipsImage *in = ir->im; int y; if (vips_region_prepare(ir, r)) return -1; VIPS_GATE_START("vips_sRGB2scRGB_gen: work"); if (in->BandFmt == VIPS_FORMAT_UCHAR) { vips_col_make_tables_RGB_8(); for (y = 0; y < r->height; y++) { VipsPel *p = VIPS_REGION_ADDR(ir, r->left, r->top + y); float *q = (float *) VIPS_REGION_ADDR(out_region, r->left, r->top + y); vips_sRGB2scRGB_line_8(q, p, in->Bands - 3, r->width); } } else { vips_col_make_tables_RGB_16(); for (y = 0; y < r->height; y++) { VipsPel *p = VIPS_REGION_ADDR(ir, r->left, r->top + y); float *q = (float *) VIPS_REGION_ADDR(out_region, r->left, r->top + y); vips_sRGB2scRGB_line_16(q, (unsigned short *) p, in->Bands - 3, r->width); } } VIPS_GATE_STOP("vips_sRGB2scRGB_gen: work"); return 0; } static int vips_sRGB2scRGB_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipssRGB2scRGB *sRGB2scRGB = (VipssRGB2scRGB *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); VipsImage *in; VipsImage *out; VipsBandFormat format; if (VIPS_OBJECT_CLASS(vips_sRGB2scRGB_parent_class)->build(object)) return -1; in = sRGB2scRGB->in; if (vips_check_bands_atleast(class->nickname, in, 3)) return -1; // we are changing the gamma, so any profile on the image can no longer // work (and will cause horrible problems in any downstream colour // handling) if (vips_copy(in, &t[0], NULL)) return -1; in = t[0]; vips_image_remove(in, VIPS_META_ICC_NAME); format = in->Type == VIPS_INTERPRETATION_RGB16 ? VIPS_FORMAT_USHORT : VIPS_FORMAT_UCHAR; if (in->BandFmt != format) { if (vips_cast(in, &t[1], format, NULL)) return -1; in = t[1]; } out = vips_image_new(); if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_THINSTRIP, in, NULL)) { g_object_unref(out); return -1; } out->Type = VIPS_INTERPRETATION_scRGB; out->BandFmt = VIPS_FORMAT_FLOAT; if (vips_image_generate(out, vips_start_one, vips_sRGB2scRGB_gen, vips_stop_one, in, sRGB2scRGB)) { g_object_unref(out); return -1; } g_object_set(object, "out", out, NULL); return 0; } static void vips_sRGB2scRGB_class_init(VipssRGB2scRGBClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "sRGB2scRGB"; object_class->description = _("convert an sRGB image to scRGB"); object_class->build = vips_sRGB2scRGB_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipssRGB2scRGB, in)); VIPS_ARG_IMAGE(class, "out", 100, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipssRGB2scRGB, out)); } static void vips_sRGB2scRGB_init(VipssRGB2scRGB *sRGB2scRGB) { } /** * vips_sRGB2scRGB: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Convert an sRGB image to scRGB. The input image can be 8 or 16-bit. * * If the input image is tagged as #VIPS_INTERPRETATION_RGB16, any extra * channels after RGB are divided by 256. Thus, scRGB alpha is * always 0 - 255.99. * * See also: vips_scRGB2XYZ(), vips_scRGB2sRGB(), vips_rad2float(). * * Returns: 0 on success, -1 on error. */ int vips_sRGB2scRGB(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("sRGB2scRGB", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/scRGB2BW.c000066400000000000000000000141101454007373500176550ustar00rootroot00000000000000/* Turn scRGB into greyscale. * * 17/4/15 * - from scRGB2BW.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pcolour.h" /* We can't use VipsColourCode as our parent class. We want to handle * alpha ourselves so we can get 16 -> 8 bit conversion right. */ typedef struct _VipsscRGB2BW { VipsOperation parent_instance; VipsImage *in; VipsImage *out; int depth; } VipsscRGB2BW; typedef VipsOperationClass VipsscRGB2BWClass; G_DEFINE_TYPE(VipsscRGB2BW, vips_scRGB2BW, VIPS_TYPE_OPERATION); /* Process a buffer of data. */ static void vips_scRGB2BW_line_8(VipsPel *restrict q, float *restrict p, int extra_bands, int width) { int i, j; for (i = 0; i < width; i++) { float R = p[0]; float G = p[1]; float B = p[2]; int g; int og; vips_col_scRGB2BW_8(R, G, B, &g, &og); p += 3; q[0] = g; q += 1; for (j = 0; j < extra_bands; j++) q[j] = VIPS_CLIP(0, (int) (p[j] * 255.0), UCHAR_MAX); p += extra_bands; q += extra_bands; } } static void vips_scRGB2BW_line_16(unsigned short *restrict q, float *restrict p, int extra_bands, int width) { int i, j; for (i = 0; i < width; i++) { float R = p[0]; float G = p[1]; float B = p[2]; int g; int og; vips_col_scRGB2BW_16(R, G, B, &g, &og); p += 3; q[0] = g; q += 1; for (j = 0; j < extra_bands; j++) q[j] = VIPS_CLIP(0, (int) (p[j] * 65535.0), USHRT_MAX); p += extra_bands; q += extra_bands; } } static int vips_scRGB2BW_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsscRGB2BW *scRGB2BW = (VipsscRGB2BW *) b; VipsRect *r = &out_region->valid; VipsImage *in = ir->im; int y; if (vips_region_prepare(ir, r)) return -1; VIPS_GATE_START("vips_scRGB2BW_gen: work"); for (y = 0; y < r->height; y++) { float *p = (float *) VIPS_REGION_ADDR(ir, r->left, r->top + y); VipsPel *q = (VipsPel *) VIPS_REGION_ADDR(out_region, r->left, r->top + y); if (scRGB2BW->depth == 16) vips_scRGB2BW_line_16((unsigned short *) q, p, in->Bands - 3, r->width); else vips_scRGB2BW_line_8(q, p, in->Bands - 3, r->width); } VIPS_GATE_STOP("vips_scRGB2BW_gen: work"); return 0; } static int vips_scRGB2BW_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsscRGB2BW *scRGB2BW = (VipsscRGB2BW *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); VipsImage *in; VipsBandFormat format; VipsInterpretation interpretation; VipsImage *out; if (VIPS_OBJECT_CLASS(vips_scRGB2BW_parent_class)->build(object)) return -1; in = scRGB2BW->in; if (vips_check_bands_atleast(class->nickname, in, 3)) return -1; switch (scRGB2BW->depth) { case 16: interpretation = VIPS_INTERPRETATION_GREY16; format = VIPS_FORMAT_USHORT; break; case 8: interpretation = VIPS_INTERPRETATION_B_W; format = VIPS_FORMAT_UCHAR; break; default: vips_error(class->nickname, "%s", _("depth must be 8 or 16")); return -1; } if (vips_cast_float(in, &t[0], NULL)) return -1; in = t[0]; out = vips_image_new(); if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_THINSTRIP, in, NULL)) { g_object_unref(out); return -1; } out->Type = interpretation; out->BandFmt = format; out->Bands = in->Bands - 2; if (vips_image_generate(out, vips_start_one, vips_scRGB2BW_gen, vips_stop_one, in, scRGB2BW)) { g_object_unref(out); return -1; } g_object_set(object, "out", out, NULL); return 0; } static void vips_scRGB2BW_class_init(VipsscRGB2BWClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "scRGB2BW"; object_class->description = _("convert scRGB to BW"); object_class->build = vips_scRGB2BW_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsscRGB2BW, in)); VIPS_ARG_IMAGE(class, "out", 100, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsscRGB2BW, out)); VIPS_ARG_INT(class, "depth", 130, _("Depth"), _("Output device space depth in bits"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsscRGB2BW, depth), 8, 16, 8); } static void vips_scRGB2BW_init(VipsscRGB2BW *scRGB2BW) { scRGB2BW->depth = 8; } /** * vips_scRGB2BW: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @depth: depth of output image in bits * * Convert an scRGB image to greyscale. Set @depth to 16 to get 16-bit output. * * If @depth is 16, any extra channels after RGB are * multiplied by 256. * * See also: vips_LabS2LabQ(), vips_sRGB2scRGB(), vips_rad2float(). * * Returns: 0 on success, -1 on error. */ int vips_scRGB2BW(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("scRGB2BW", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/scRGB2XYZ.c000066400000000000000000000117301454007373500200440ustar00rootroot00000000000000/* Turn scRGB to XYZ colourspace. * * Modified: * 29/5/02 JC * - from lab2xyz * 2/11/09 * - gtkdoc * - cleanups * 20/9/12 * redo as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pcolour.h" /* We can't use VipsColourCode as our parent class. We want to handle * alpha ourselves. */ typedef struct _VipsscRGB2XYZ { VipsOperation parent_instance; VipsImage *in; VipsImage *out; } VipsscRGB2XYZ; typedef VipsOperationClass VipsscRGB2XYZClass; G_DEFINE_TYPE(VipsscRGB2XYZ, vips_scRGB2XYZ, VIPS_TYPE_OPERATION); static void vips_scRGB2XYZ_line(float *restrict q, float *restrict p, int extra_bands, int width) { int i, j; for (i = 0; i < width; i++) { const float R = p[0] * VIPS_D65_Y0; const float G = p[1] * VIPS_D65_Y0; const float B = p[2] * VIPS_D65_Y0; /* Manually inlined logic from the vips_col_scRGB2XYZ function * as the original is defined in a separate file and is part of * the public API so a compiler will not inline. */ q[0] = 0.4124 * R + 0.3576 * G + 0.1805 * B; q[1] = 0.2126 * R + 0.7152 * G + 0.0722 * B; q[2] = 0.0193 * R + 0.1192 * G + 0.9505 * B; p += 3; q += 3; for (j = 0; j < extra_bands; j++) q[j] = VIPS_CLIP(0, p[j] * 255.0, 255.0); p += extra_bands; q += extra_bands; } } static int vips_scRGB2XYZ_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsRect *r = &out_region->valid; VipsImage *in = ir->im; int y; if (vips_region_prepare(ir, r)) return -1; VIPS_GATE_START("vips_scRGB2XYZ_gen: work"); for (y = 0; y < r->height; y++) { float *p = (float *) VIPS_REGION_ADDR(ir, r->left, r->top + y); float *q = (float *) VIPS_REGION_ADDR(out_region, r->left, r->top + y); vips_scRGB2XYZ_line(q, p, in->Bands - 3, r->width); } VIPS_GATE_STOP("vips_scRGB2XYZ_gen: work"); return 0; } static int vips_scRGB2XYZ_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsscRGB2XYZ *scRGB2XYZ = (VipsscRGB2XYZ *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); VipsImage *in; VipsImage *out; if (VIPS_OBJECT_CLASS(vips_scRGB2XYZ_parent_class)->build(object)) return -1; in = scRGB2XYZ->in; if (vips_check_bands_atleast(class->nickname, in, 3)) return -1; if (vips_cast_float(in, &t[0], NULL)) return -1; in = t[0]; out = vips_image_new(); if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_THINSTRIP, in, NULL)) { g_object_unref(out); return -1; } out->Type = VIPS_INTERPRETATION_XYZ; out->BandFmt = VIPS_FORMAT_FLOAT; if (vips_image_generate(out, vips_start_one, vips_scRGB2XYZ_gen, vips_stop_one, in, scRGB2XYZ)) { g_object_unref(out); return -1; } g_object_set(object, "out", out, NULL); return 0; } static void vips_scRGB2XYZ_class_init(VipsscRGB2XYZClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "scRGB2XYZ"; object_class->description = _("transform scRGB to XYZ"); object_class->build = vips_scRGB2XYZ_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsscRGB2XYZ, in)); VIPS_ARG_IMAGE(class, "out", 100, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsscRGB2XYZ, out)); } static void vips_scRGB2XYZ_init(VipsscRGB2XYZ *scRGB2XYZ) { } /** * vips_scRGB2XYZ: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Turn XYZ to scRGB. * * Returns: 0 on success, -1 on error */ int vips_scRGB2XYZ(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("scRGB2XYZ", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/scRGB2sRGB.c000066400000000000000000000161571454007373500201570ustar00rootroot00000000000000/* Turn scRGB files into displayable rgb. * * Author: J-P. Laurent * Modified: * 15/11/94 JC * - error message added * - out->Type set to IM_TYPE_RGB * - memory leak fixed * 16/11/94 JC * - uses im_wrapone() * 15/2/95 JC * - oops! now uses PEL, not float for output pointer * 2/1/96 JC * - sometimes produced incorrect result at extrema * - reformatted * - now uses IM_RINT() and clip() * 18/9/96 JC * - some speed-ups ... 3x faster * - slightly less accurate, but who cares * - added out-of-mem check for table build * 21/9/12 * - redone as a class * - sRGB only, support for other RGBs is now via lcms * 6/11/12 * - added 16-bit option * 11/12/12 * - cut about to make scRGB2sRGB.c * 12/2/15 * - add 16-bit alpha handling */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pcolour.h" /* We can't use VipsColourCode as our parent class. We want to handle * alpha ourselves so we can get 16 -> 8 bit conversion right. */ typedef struct _VipsscRGB2sRGB { VipsOperation parent_instance; VipsImage *in; VipsImage *out; int depth; } VipsscRGB2sRGB; typedef VipsOperationClass VipsscRGB2sRGBClass; G_DEFINE_TYPE(VipsscRGB2sRGB, vips_scRGB2sRGB, VIPS_TYPE_OPERATION); /* Process a buffer of data. */ static void vips_scRGB2sRGB_line_8(VipsPel *restrict q, float *restrict p, int extra_bands, int width) { int i, j; for (i = 0; i < width; i++) { float R = p[0]; float G = p[1]; float B = p[2]; int r, g, b; vips_col_scRGB2sRGB_8(R, G, B, &r, &g, &b, NULL); p += 3; q[0] = r; q[1] = g; q[2] = b; q += 3; for (j = 0; j < extra_bands; j++) q[j] = VIPS_CLIP(0, (int) (p[j] * 255.0), UCHAR_MAX); p += extra_bands; q += extra_bands; } } static void vips_scRGB2sRGB_line_16(unsigned short *restrict q, float *restrict p, int extra_bands, int width) { int i, j; for (i = 0; i < width; i++) { float R = p[0]; float G = p[1]; float B = p[2]; int r, g, b; vips_col_scRGB2sRGB_16(R, G, B, &r, &g, &b, NULL); p += 3; q[0] = r; q[1] = g; q[2] = b; q += 3; for (j = 0; j < extra_bands; j++) q[j] = VIPS_CLIP(0, (int) (p[j] * 65535.0), USHRT_MAX); p += extra_bands; q += extra_bands; } } static int vips_scRGB2sRGB_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsscRGB2sRGB *scRGB2sRGB = (VipsscRGB2sRGB *) b; VipsRect *r = &out_region->valid; VipsImage *in = ir->im; int y; if (vips_region_prepare(ir, r)) return -1; VIPS_GATE_START("vips_scRGB2sRGB_gen: work"); for (y = 0; y < r->height; y++) { float *p = (float *) VIPS_REGION_ADDR(ir, r->left, r->top + y); VipsPel *q = (VipsPel *) VIPS_REGION_ADDR(out_region, r->left, r->top + y); if (scRGB2sRGB->depth == 16) vips_scRGB2sRGB_line_16((unsigned short *) q, p, in->Bands - 3, r->width); else vips_scRGB2sRGB_line_8(q, p, in->Bands - 3, r->width); } VIPS_GATE_STOP("vips_scRGB2sRGB_gen: work"); return 0; } static int vips_scRGB2sRGB_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsscRGB2sRGB *scRGB2sRGB = (VipsscRGB2sRGB *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); VipsImage *in; VipsBandFormat format; VipsInterpretation interpretation; VipsImage *out; if (VIPS_OBJECT_CLASS(vips_scRGB2sRGB_parent_class)->build(object)) return -1; in = scRGB2sRGB->in; if (vips_check_bands_atleast(class->nickname, in, 3)) return -1; // we are changing the gamma, so any profile on the image can no longer // work (and will cause horrible problems in any downstream colour // handling) if (vips_copy(in, &t[0], NULL)) return -1; in = t[0]; vips_image_remove(in, VIPS_META_ICC_NAME); switch (scRGB2sRGB->depth) { case 16: interpretation = VIPS_INTERPRETATION_RGB16; format = VIPS_FORMAT_USHORT; break; case 8: interpretation = VIPS_INTERPRETATION_sRGB; format = VIPS_FORMAT_UCHAR; break; default: vips_error(class->nickname, "%s", _("depth must be 8 or 16")); return -1; } if (vips_cast_float(in, &t[1], NULL)) return -1; in = t[1]; out = vips_image_new(); if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_THINSTRIP, in, NULL)) { g_object_unref(out); return -1; } out->Type = interpretation; out->BandFmt = format; if (vips_image_generate(out, vips_start_one, vips_scRGB2sRGB_gen, vips_stop_one, in, scRGB2sRGB)) { g_object_unref(out); return -1; } g_object_set(object, "out", out, NULL); return 0; } static void vips_scRGB2sRGB_class_init(VipsscRGB2sRGBClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "scRGB2sRGB"; object_class->description = _("convert an scRGB image to sRGB"); object_class->build = vips_scRGB2sRGB_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsscRGB2sRGB, in)); VIPS_ARG_IMAGE(class, "out", 100, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsscRGB2sRGB, out)); VIPS_ARG_INT(class, "depth", 130, _("Depth"), _("Output device space depth in bits"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsscRGB2sRGB, depth), 8, 16, 8); } static void vips_scRGB2sRGB_init(VipsscRGB2sRGB *scRGB2sRGB) { scRGB2sRGB->depth = 8; } /** * vips_scRGB2sRGB: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @depth: depth of output image in bits * * Convert an scRGB image to sRGB. Set @depth to 16 to get 16-bit output. * * If @depth is 16, any extra channels after RGB are * multiplied by 256. * * See also: vips_LabS2LabQ(), vips_sRGB2scRGB(), vips_rad2float(). * * Returns: 0 on success, -1 on error. */ int vips_scRGB2sRGB(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("scRGB2sRGB", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/colour/wrap-profiles.sh000077500000000000000000000021271454007373500213740ustar00rootroot00000000000000#!/bin/bash # code up the binary files in $1 as a set of name / string pairs in $2 # For example: # $ ./wrap-profiles.sh profiles profiles.c # we have to use arrays for the strings, since MSVC won't allow string # literals larger than 64kb in=$1 out=$2 echo "/* this file is generated automatically, do not edit! */" > $out echo "/* clang-format off */" > $out echo "" >> $out echo "#include \"profiles.h\"" >> $out echo "" >> $out profile_names= for file in $in/*.icm; do root=${file%.icm} base=${root##*/} profile_name=vips__profile_fallback_$base profile_names="$profile_names $profile_name" echo "static VipsProfileFallback $profile_name = {" >> $out echo -e "\t\"$base\"," >> $out echo -e "\t$(stat --format=%s $file)," >> $out echo -e "\t{" >> $out pigz -c -z -11 $file | hexdump -v -e '" 0x" 1/1 "%02X,"' | fmt >> $out echo -e "\t}" >> $out echo "};" >> $out echo >> $out done echo "VipsProfileFallback *vips__profile_fallback_table[] = {" >> $out for profile_name in $profile_names; do echo -e "\t&$profile_name," >> $out done echo -e "\tNULL" >> $out echo "};" >> $out libvips-8.15.1/libvips/conversion/000077500000000000000000000000001454007373500171235ustar00rootroot00000000000000libvips-8.15.1/libvips/conversion/arrayjoin.c000066400000000000000000000315371454007373500212760ustar00rootroot00000000000000/* join an array of images together * * 11/12/15 * - from join.c * 6/9/21 * - minmise inputs once we've used them * 29/12/22 * - much faster with large arrays */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pconversion.h" typedef struct _VipsArrayjoin { VipsConversion parent_instance; /* Params. */ VipsArrayImage *in; int across; int shim; VipsArea *background; VipsAlign halign; VipsAlign valign; int hspacing; int vspacing; int down; VipsRect *rects; gboolean *minimised; } VipsArrayjoin; typedef VipsConversionClass VipsArrayjoinClass; G_DEFINE_TYPE(VipsArrayjoin, vips_arrayjoin, VIPS_TYPE_CONVERSION); static int vips_arrayjoin_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsImage **in = (VipsImage **) a; VipsArrayjoin *join = (VipsArrayjoin *) b; VipsConversion *conversion = VIPS_CONVERSION(join); VipsRect *r = &out_region->valid; int n; /* Find the left/top/width/height of the cells this region touches. */ int cell_width = join->hspacing + join->shim; int cell_height = join->vspacing + join->shim; int left = r->left / cell_width; int top = r->top / cell_height; int width = (VIPS_ROUND_UP(VIPS_RECT_RIGHT(r), cell_width) - VIPS_ROUND_DOWN(r->left, cell_width)) / cell_width; int height = (VIPS_ROUND_UP(VIPS_RECT_BOTTOM(r), cell_height) - VIPS_ROUND_DOWN(r->top, cell_height)) / cell_height; int i; VipsRegion *reg; /* Size of image array. */ vips_array_image_get(join->in, &n); /* Does this rect fit completely within one of our inputs? We can just * forward the request. */ if (width == 1 && height == 1) { i = VIPS_MIN(n - 1, left + top * join->across); reg = vips_region_new(in[i]); if (vips__insert_just_one(out_region, reg, join->rects[i].left, join->rects[i].top)) { g_object_unref(reg); return -1; } g_object_unref(reg); } else { /* Output requires more than one input. Paste all touching * inputs into the output. */ int x, y; for (y = 0; y < height; y++) for (x = 0; x < width; x++) { i = VIPS_MIN(n - 1, x + left + (y + top) * join->across); reg = vips_region_new(in[i]); if (vips__insert_paste_region(out_region, reg, &join->rects[i])) { g_object_unref(reg); return -1; } g_object_unref(reg); } } if (vips_image_is_sequential(conversion->out)) /* In sequential mode, we can minimise an input once our * generate point is well past the end of it. This can save a * lot of memory and file descriptors on large image arrays. * * minimise_all is quite expensive, so only trigger once for * each input. * * We don't lock for minimised[], but it's harmless. */ for (i = 0; i < n; i++) { int bottom_edge = VIPS_RECT_BOTTOM(&join->rects[i]); if (!join->minimised[i] && r->top > bottom_edge + 1024) { join->minimised[i] = TRUE; vips_image_minimise_all(in[i]); } } return 0; } static int vips_arrayjoin_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsConversion *conversion = VIPS_CONVERSION(object); VipsArrayjoin *join = (VipsArrayjoin *) object; VipsImage **in; int n; VipsImage **format; VipsImage **band; VipsImage **size; int hspacing; int vspacing; int output_width; int output_height; int i; if (VIPS_OBJECT_CLASS(vips_arrayjoin_parent_class)->build(object)) return -1; in = vips_array_image_get(join->in, &n); /* Array length zero means error. */ if (n == 0) return -1; /* Move all input images to a common format and number of bands. */ format = (VipsImage **) vips_object_local_array(object, n); if (vips__formatalike_vec(in, format, n)) return -1; in = format; /* We have to include the number of bands in @background in our * calculation. */ band = (VipsImage **) vips_object_local_array(object, n); if (vips__bandalike_vec(class->nickname, in, band, n, join->background->n)) return -1; in = band; /* Now sizealike: search for the largest image. */ hspacing = in[0]->Xsize; vspacing = in[0]->Ysize; for (i = 1; i < n; i++) { if (in[i]->Xsize > hspacing) hspacing = in[i]->Xsize; if (in[i]->Ysize > vspacing) vspacing = in[i]->Ysize; } if (!vips_object_argument_isset(object, "hspacing")) join->hspacing = hspacing; if (!vips_object_argument_isset(object, "vspacing")) join->vspacing = vspacing; hspacing = join->hspacing; vspacing = join->vspacing; if (!vips_object_argument_isset(object, "across")) join->across = n; /* How many images down the grid? */ join->down = VIPS_ROUND_UP(n, join->across) / join->across; /* The output size. */ output_width = hspacing * join->across + join->shim * (join->across - 1); output_height = vspacing * join->down + join->shim * (join->down - 1); /* Make a rect for the position of each input. */ join->rects = VIPS_ARRAY(join, n, VipsRect); for (i = 0; i < n; i++) { int x = i % join->across; int y = i / join->across; join->rects[i].left = x * (hspacing + join->shim); join->rects[i].top = y * (vspacing + join->shim); join->rects[i].width = hspacing; join->rects[i].height = vspacing; /* In the centre of the array, we make width / height larger * by shim. */ if (x != join->across - 1) join->rects[i].width += join->shim; if (y != join->down - 1) join->rects[i].height += join->shim; /* The right edge of the final image is stretched to the right * to fill the whole row. */ if (i == n - 1) join->rects[i].width = output_width - join->rects[i].left; } /* A thing to track which inputs we've signalled minimise on. */ join->minimised = VIPS_ARRAY(join, n, gboolean); for (i = 0; i < n; i++) join->minimised[i] = FALSE; /* Each image must be cropped and aligned within an @hspacing by * @vspacing box. */ size = (VipsImage **) vips_object_local_array(object, n); for (i = 0; i < n; i++) { int left, top; int width, height; /* Compiler warnings. */ left = 0; top = 0; switch (join->halign) { case VIPS_ALIGN_LOW: left = 0; break; case VIPS_ALIGN_CENTRE: left = (hspacing - in[i]->Xsize) / 2; break; case VIPS_ALIGN_HIGH: left = hspacing - in[i]->Xsize; break; default: g_assert_not_reached(); break; } switch (join->valign) { case VIPS_ALIGN_LOW: top = 0; break; case VIPS_ALIGN_CENTRE: top = (vspacing - in[i]->Ysize) / 2; break; case VIPS_ALIGN_HIGH: top = vspacing - in[i]->Ysize; break; default: g_assert_not_reached(); break; } width = join->rects[i].width; height = join->rects[i].height; if (vips_embed(in[i], &size[i], left, top, width, height, "extend", VIPS_EXTEND_BACKGROUND, "background", join->background, NULL)) return -1; } if (vips_image_pipeline_array(conversion->out, VIPS_DEMAND_STYLE_THINSTRIP, size)) return -1; conversion->out->Xsize = output_width; conversion->out->Ysize = output_height; /* DOn't use start_many -- the set of input images can be huge (many * 10s of 1000s) and we don't want to have 20,000 regions active. It's * much quicker to make them on demand. */ if (vips_image_generate(conversion->out, NULL, vips_arrayjoin_gen, NULL, size, join)) return -1; return 0; } static void vips_arrayjoin_class_init(VipsArrayjoinClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VIPS_DEBUG_MSG("vips_arrayjoin_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "arrayjoin"; vobject_class->description = _("join an array of images"); vobject_class->build = vips_arrayjoin_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_BOXED(class, "in", -1, _("Input"), _("Array of input images"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsArrayjoin, in), VIPS_TYPE_ARRAY_IMAGE); VIPS_ARG_INT(class, "across", 4, _("Across"), _("Number of images across grid"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsArrayjoin, across), 1, 1000000, 1); VIPS_ARG_INT(class, "shim", 5, _("Shim"), _("Pixels between images"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsArrayjoin, shim), 0, 1000000, 0); VIPS_ARG_BOXED(class, "background", 6, _("Background"), _("Colour for new pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsArrayjoin, background), VIPS_TYPE_ARRAY_DOUBLE); VIPS_ARG_ENUM(class, "halign", 7, _("Horizontal align"), _("Align on the left, centre or right"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsArrayjoin, halign), VIPS_TYPE_ALIGN, VIPS_ALIGN_LOW); VIPS_ARG_ENUM(class, "valign", 8, _("Vertical align"), _("Align on the top, centre or bottom"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsArrayjoin, valign), VIPS_TYPE_ALIGN, VIPS_ALIGN_LOW); VIPS_ARG_INT(class, "hspacing", 9, _("Horizontal spacing"), _("Horizontal spacing between images"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsArrayjoin, hspacing), 1, 1000000, 1); VIPS_ARG_INT(class, "vspacing", 10, _("Vertical spacing"), _("Vertical spacing between images"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsArrayjoin, vspacing), 1, 1000000, 1); } static void vips_arrayjoin_init(VipsArrayjoin *join) { /* Init our instance fields. */ join->background = vips_area_new_array(G_TYPE_DOUBLE, sizeof(double), 1); ((double *) (join->background->data))[0] = 0.0; } static int vips_arrayjoinv(VipsImage **in, VipsImage **out, int n, va_list ap) { VipsArrayImage *array; int result; array = vips_array_image_new(in, n); result = vips_call_split("arrayjoin", ap, array, out); vips_area_unref(VIPS_AREA(array)); return result; } /** * vips_arrayjoin: * @in: (array length=n) (transfer none): array of input images * @out: (out): output image * @n: number of input images * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @across: %gint, number of images per row * * @shim: %gint, space between images, in pixels * * @background: #VipsArrayDouble, background ink colour * * @halign: #VipsAlign, low, centre or high alignment * * @valign: #VipsAlign, low, centre or high alignment * * @hspacing: %gint, horizontal distance between images * * @vspacing: %gint, vertical distance between images * * Lay out the images in @in in a grid. The grid is @across images across and * however high is necessary to use up all of @in. Images are set down * left-to-right and top-to-bottom. @across defaults to @n. * * Each input image is placed with a box of size @hspacing by @vspacing * pixels and cropped. These default to the largest width and largest height * of the input images. * * Space between images is filled with @background. This defaults to 0 * (black). * * Images are positioned within their @hspacing by @vspacing box at low, * centre or high coordinate values, controlled by @halign and @valign. These * default to left-top. * * Boxes are joined and separated by @shim pixels. This defaults to 0. * * If the number of bands in the input images differs, all but one of the * images must have one band. In this case, an n-band image is formed from the * one-band image by joining n copies of the one-band image together, and then * the n-band images are operated upon. * * The input images are cast up to the smallest common type (see table * Smallest common format in * arithmetic). * * vips_colourspace() can be useful for moving the images to a common * colourspace for compositing. * * See also: vips_join(), vips_insert(), vips_colourspace(). * * Returns: 0 on success, -1 on error */ int vips_arrayjoin(VipsImage **in, VipsImage **out, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_arrayjoinv(in, out, n, ap); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/autorot.c000066400000000000000000000130421454007373500207640ustar00rootroot00000000000000/* autorot * * 19/10/14 * - from jpegload * 12/4/16 * - test and remove orientation from every ifd * 6/10/18 * - don't remove orientation if it's one of the cases we don't handle * 10/5/20 * - handle mirrored images * - deprecate vips_autorot_get_angle() * 24/10/20 * - only remove main image orientation, since we don't rotate the * embedded thumbnail */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include "pconversion.h" typedef struct _VipsAutorot { VipsConversion parent_instance; VipsImage *in; VipsAngle angle; gboolean flip; } VipsAutorot; typedef VipsConversionClass VipsAutorotClass; G_DEFINE_TYPE(VipsAutorot, vips_autorot, VIPS_TYPE_CONVERSION); static void * vips_autorot_remove_angle_sub(VipsImage *image, const char *field, GValue *value, void *my_data) { if (strcmp(field, "exif-ifd0-Orientation") == 0) { #ifdef DEBUG printf("vips_autorot_remove_angle: %s\n", field); #endif /*DEBUG*/ (void) vips_image_remove(image, field); } return NULL; } /** * vips_autorot_remove_angle: (method) * @image: image to remove orientation from * * Remove the orientation tag on @image. Also remove any exif orientation tags. * You must vips_copy() the image before calling this function since it * modifies metadata. */ void vips_autorot_remove_angle(VipsImage *image) { (void) vips_image_remove(image, VIPS_META_ORIENTATION); (void) vips_image_map(image, vips_autorot_remove_angle_sub, NULL); } static int vips_autorot_build(VipsObject *object) { VipsConversion *conversion = VIPS_CONVERSION(object); VipsAutorot *autorot = (VipsAutorot *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 3); if (VIPS_OBJECT_CLASS(vips_autorot_parent_class)->build(object)) return -1; VipsAngle angle; gboolean flip; VipsImage *in; in = autorot->in; switch (vips_image_get_orientation(in)) { case 2: angle = VIPS_ANGLE_D0; flip = TRUE; break; case 3: angle = VIPS_ANGLE_D180; flip = FALSE; break; case 4: angle = VIPS_ANGLE_D180; flip = TRUE; break; case 5: angle = VIPS_ANGLE_D90; flip = TRUE; break; case 6: angle = VIPS_ANGLE_D90; flip = FALSE; break; case 7: angle = VIPS_ANGLE_D270; flip = TRUE; break; case 8: angle = VIPS_ANGLE_D270; flip = FALSE; break; case 1: default: angle = VIPS_ANGLE_D0; flip = FALSE; break; } g_object_set(object, "angle", angle, "flip", flip, NULL); if (angle != VIPS_ANGLE_D0) { if (vips_rot(in, &t[0], angle, NULL)) return -1; in = t[0]; } if (flip) { if (vips_flip(in, &t[1], VIPS_DIRECTION_HORIZONTAL, NULL)) return -1; in = t[1]; } /* We must copy before modifying metadata. */ if (vips_copy(in, &t[2], NULL)) return -1; in = t[2]; vips_autorot_remove_angle(in); if (vips_image_write(in, conversion->out)) return -1; return 0; } static void vips_autorot_class_init(VipsAutorotClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "autorot"; vobject_class->description = _("autorotate image by exif tag"); vobject_class->build = vips_autorot_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsAutorot, in)); VIPS_ARG_ENUM(class, "angle", 6, _("Angle"), _("Angle image was rotated by"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsAutorot, angle), VIPS_TYPE_ANGLE, VIPS_ANGLE_D0); VIPS_ARG_BOOL(class, "flip", 7, _("Flip"), _("Whether the image was flipped or not"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsAutorot, flip), FALSE); } static void vips_autorot_init(VipsAutorot *autorot) { autorot->angle = VIPS_ANGLE_D0; autorot->flip = FALSE; } /** * vips_autorot: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @angle: output #VipsAngle the image was rotated by * * @flip: output %gboolean whether the image was flipped * * Look at the image metadata and rotate and flip the image to make it * upright. The #VIPS_META_ORIENTATION tag is removed from @out to prevent * accidental double rotation. * * Read @angle to find the amount the image was rotated by. Read @flip to * see if the image was also flipped. * * Returns: 0 on success, -1 on error */ int vips_autorot(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("autorot", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/bandary.c000066400000000000000000000153731454007373500207200ustar00rootroot00000000000000/* base class for various operations on bands * * Copyright: 1991, N. Dessipris, modification of im_bandary() * * Author: N. Dessipris * Written on: 17/04/1991 * Modified on : * 16/3/94 JC * - rewritten for partials * - now in ANSI C * - now works for any number of input images, except zero * 7/10/94 JC * - new IM_NEW() * 16/4/07 * - fall back to im_copy() for 1 input image * 17/1/09 * - cleanups * - gtk-doc * - im_bandary() just calls this * - works for RAD coding too * 27/1/10 * - formatalike inputs * 17/5/11 * - sizealike inputs * 27/10/11 * - rewrite as a class * 20/11/11 * - from bandjoin * 15/12/17 * - remove max images restriction */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "bandary.h" G_DEFINE_ABSTRACT_TYPE(VipsBandary, vips_bandary, VIPS_TYPE_CONVERSION); static int vips_bandary_stop(void *vseq, void *a, void *b) { VipsBandarySequence *seq = (VipsBandarySequence *) vseq; if (seq->ir) { int i; for (i = 0; seq->ir[i]; i++) VIPS_UNREF(seq->ir[i]); VIPS_FREE(seq->ir); } VIPS_FREE(seq->p); VIPS_FREE(seq->pixels); VIPS_FREE(seq); return 0; } static void * vips_bandary_start(VipsImage *out, void *a, void *b) { VipsImage **in = (VipsImage **) a; VipsBandary *bandary = (VipsBandary *) b; VipsBandarySequence *seq; int i, n; if (!(seq = VIPS_NEW(NULL, VipsBandarySequence))) return NULL; seq->bandary = bandary; seq->ir = NULL; seq->p = NULL; seq->pixels = NULL; /* How many images? */ for (n = 0; in[n]; n++) ; /* Allocate space for region array. */ if (!(seq->ir = VIPS_ARRAY(NULL, n + 1, VipsRegion *))) { vips_bandary_stop(seq, NULL, NULL); return NULL; } /* Create a set of regions. */ for (i = 0; i < n; i++) if (!(seq->ir[i] = vips_region_new(in[i]))) { vips_bandary_stop(seq, NULL, NULL); return NULL; } seq->ir[n] = NULL; /* Input pointers. */ if (!(seq->p = VIPS_ARRAY(NULL, n + 1, VipsPel *))) { vips_bandary_stop(seq, NULL, NULL); return NULL; } /* Pixel buffer. This is used as working space by some subclasses. */ if (!(seq->pixels = VIPS_ARRAY(NULL, n * VIPS_IMAGE_SIZEOF_PEL(bandary->ready[0]), VipsPel))) { vips_bandary_stop(seq, NULL, NULL); return NULL; } return seq; } static int vips_bandary_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsBandarySequence *seq = (VipsBandarySequence *) vseq; VipsBandary *bandary = (VipsBandary *) b; VipsBandaryClass *class = VIPS_BANDARY_GET_CLASS(bandary); VipsRect *r = &out_region->valid; VipsPel *q; int y, i; if (vips_reorder_prepare_many(out_region->im, seq->ir, r)) return -1; for (i = 0; i < bandary->n; i++) seq->p[i] = VIPS_REGION_ADDR(seq->ir[i], r->left, r->top); seq->p[i] = NULL; q = VIPS_REGION_ADDR(out_region, r->left, r->top); VIPS_GATE_START("vips_bandary_gen: work"); for (y = 0; y < r->height; y++) { class->process_line(seq, q, seq->p, r->width); for (i = 0; i < bandary->n; i++) seq->p[i] += VIPS_REGION_LSKIP(seq->ir[i]); q += VIPS_REGION_LSKIP(out_region); } VIPS_GATE_STOP("vips_bandary_gen: work"); return 0; } static int vips_bandary_build(VipsObject *object) { VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(object); VipsBandaryClass *class = VIPS_BANDARY_GET_CLASS(object); VipsConversion *conversion = VIPS_CONVERSION(object); VipsBandary *bandary = VIPS_BANDARY(object); int i; VipsImage **decode; VipsImage **format; VipsImage **size; if (VIPS_OBJECT_CLASS(vips_bandary_parent_class)->build(object)) return -1; if (bandary->n <= 0) { vips_error(object_class->nickname, "%s", _("no input images")); return -1; } decode = (VipsImage **) vips_object_local_array(object, bandary->n); format = (VipsImage **) vips_object_local_array(object, bandary->n); size = (VipsImage **) vips_object_local_array(object, bandary->n); for (i = 0; i < bandary->n; i++) if (vips_image_decode(bandary->in[i], &decode[i])) return -1; if (vips__formatalike_vec(decode, format, bandary->n) || vips__sizealike_vec(format, size, bandary->n)) return -1; bandary->ready = size; if (vips_image_pipeline_array(conversion->out, VIPS_DEMAND_STYLE_THINSTRIP, bandary->ready)) return -1; conversion->out->Bands = bandary->out_bands; if (class->format_table) conversion->out->BandFmt = class->format_table[bandary->ready[0]->BandFmt]; if (vips_image_generate(conversion->out, vips_bandary_start, vips_bandary_gen, vips_bandary_stop, bandary->ready, bandary)) return -1; return 0; } static void vips_bandary_class_init(VipsBandaryClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VIPS_DEBUG_MSG("vips_bandary_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "bandary"; vobject_class->description = _("operations on image bands"); vobject_class->build = vips_bandary_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; } static void vips_bandary_init(VipsBandary *bandary) { bandary->out_bands = -1; } /* Call this before chaining up in _build() to make the operation fall back to * copy. */ int vips_bandary_copy(VipsBandary *bandary) { VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(bandary); VipsConversion *conversion = VIPS_CONVERSION(bandary); if (!bandary->in) { vips_error(object_class->nickname, "%s", _("no input images")); return -1; } /* This isn't set by arith until build(), so we have to set * again here. * * Should arith set out in _init()? */ g_object_set(bandary, "out", vips_image_new(), NULL); return vips_image_write(bandary->in[0], conversion->out); } libvips-8.15.1/libvips/conversion/bandary.h000066400000000000000000000054151454007373500207210ustar00rootroot00000000000000/* base class for various operations on bands */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS__BANDARY_H #define VIPS__BANDARY_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #include "pconversion.h" #define VIPS_TYPE_BANDARY (vips_bandary_get_type()) #define VIPS_BANDARY(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_BANDARY, VipsBandary)) #define VIPS_BANDARY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_BANDARY, VipsBandaryClass)) #define VIPS_IS_BANDARY(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_BANDARY)) #define VIPS_IS_BANDARY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_BANDARY)) #define VIPS_BANDARY_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_BANDARY, VipsBandaryClass)) struct _VipsBandary; /* Our sequence value. */ typedef struct { struct _VipsBandary *bandary; /* Set of input regions. */ VipsRegion **ir; /* For each input, an input pointer. */ VipsPel **p; /* A memory area large enough to hold one pixel from each input image. */ VipsPel *pixels; } VipsBandarySequence; typedef void (*VipsBandaryProcessFn)(VipsBandarySequence *seq, VipsPel *out, VipsPel **in, int width); typedef struct _VipsBandary { VipsConversion parent_instance; /* Array of input arguments, set these from a subclass. */ VipsImage **in; int n; /* The number of output bands. For example, VipsBandjoin sets the sum * of the bands in the input images. */ int out_bands; /* The input images, ready for the operation. */ VipsImage **ready; } VipsBandary; typedef struct _VipsBandaryClass { VipsConversionClass parent_class; /* The buffer processor. */ VipsBandaryProcessFn process_line; /* For each input format, what output format. Leave NULL for output * format == input format. */ const VipsBandFormat *format_table; } VipsBandaryClass; GType vips_bandary_get_type(void); int vips_bandary_copy(VipsBandary *bandary); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS__BANDARY_H*/ libvips-8.15.1/libvips/conversion/bandbool.c000066400000000000000000000202531454007373500210510ustar00rootroot00000000000000/* bandbool.c --- bool op across image bands * * 7/12/12 * - from boolean.c */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "bandary.h" typedef struct _VipsBandbool { VipsBandary parent_instance; VipsImage *in; VipsOperationBoolean operation; } VipsBandbool; typedef VipsBandaryClass VipsBandboolClass; G_DEFINE_TYPE(VipsBandbool, vips_bandbool, VIPS_TYPE_BANDARY); static int vips_bandbool_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsBandary *bandary = (VipsBandary *) object; VipsBandbool *bandbool = (VipsBandbool *) object; /* << and >> don't work over bands. */ if (bandbool->operation == VIPS_OPERATION_BOOLEAN_LSHIFT || bandbool->operation == VIPS_OPERATION_BOOLEAN_RSHIFT) { vips_error(class->nickname, _("operator %s not supported across image bands"), vips_enum_nick(VIPS_TYPE_OPERATION_BOOLEAN, bandbool->operation)); return -1; } if (bandbool->in) { if (vips_check_noncomplex(class->nickname, bandbool->in)) return -1; bandary->n = 1; bandary->in = &bandbool->in; if (bandbool->in->Bands == 1) return vips_bandary_copy(bandary); } bandary->out_bands = 1; if (VIPS_OBJECT_CLASS(vips_bandbool_parent_class)->build(object)) return -1; return 0; } #define SWITCH(I, F, OP) \ switch (vips_image_get_format(im)) { \ case VIPS_FORMAT_UCHAR: \ I(unsigned char, OP); \ break; \ case VIPS_FORMAT_CHAR: \ I(signed char, OP); \ break; \ case VIPS_FORMAT_USHORT: \ I(unsigned short, OP); \ break; \ case VIPS_FORMAT_SHORT: \ I(signed short, OP); \ break; \ case VIPS_FORMAT_UINT: \ I(unsigned int, OP); \ break; \ case VIPS_FORMAT_INT: \ I(signed int, OP); \ break; \ case VIPS_FORMAT_FLOAT: \ F(float, OP); \ break; \ case VIPS_FORMAT_DOUBLE: \ F(double, OP); \ break; \ \ default: \ g_assert_not_reached(); \ } #define LOOPB(TYPE, OP) \ { \ TYPE *p = (TYPE *) in[0]; \ TYPE *q = (TYPE *) out; \ \ for (x = 0; x < width; x++) { \ TYPE acc; \ \ acc = p[0]; \ for (b = 1; b < bands; b++) \ acc = acc OP p[b]; \ \ q[x] = acc; \ p += bands; \ } \ } #define FLOOPB(TYPE, OP) \ { \ TYPE *p = (TYPE *) in[0]; \ int *q = (int *) out; \ \ for (x = 0; x < width; x++) { \ int acc; \ \ acc = (int) p[0]; \ for (b = 1; b < bands; b++) \ acc = acc OP((int) p[b]); \ \ q[x] = acc; \ p += bands; \ } \ } static void vips_bandbool_buffer(VipsBandarySequence *seq, VipsPel *out, VipsPel **in, int width) { VipsBandary *bandary = seq->bandary; VipsBandbool *bandbool = (VipsBandbool *) bandary; VipsImage *im = bandary->ready[0]; int bands = im->Bands; int x, b; switch (bandbool->operation) { case VIPS_OPERATION_BOOLEAN_AND: SWITCH(LOOPB, FLOOPB, &); break; case VIPS_OPERATION_BOOLEAN_OR: SWITCH(LOOPB, FLOOPB, |); break; case VIPS_OPERATION_BOOLEAN_EOR: SWITCH(LOOPB, FLOOPB, ^); break; default: g_assert_not_reached(); } } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX /* Format conversions for boolean. */ static const VipsBandFormat vips_bandbool_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, C, US, S, UI, I, I, I, I, I }; static void vips_bandbool_class_init(VipsBandboolClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsBandaryClass *bandary_class = VIPS_BANDARY_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "bandbool"; object_class->description = _("boolean operation across image bands"); object_class->build = vips_bandbool_build; bandary_class->process_line = vips_bandbool_buffer; bandary_class->format_table = vips_bandbool_format_table; VIPS_ARG_IMAGE(class, "in", 0, _("Input"), _("Input image argument"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsBandbool, in)); VIPS_ARG_ENUM(class, "boolean", 200, _("Operation"), _("Boolean to perform"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsBandbool, operation), VIPS_TYPE_OPERATION_BOOLEAN, VIPS_OPERATION_BOOLEAN_AND); } static void vips_bandbool_init(VipsBandbool *bandbool) { bandbool->operation = VIPS_OPERATION_BOOLEAN_AND; } static int vips_bandboolv(VipsImage *in, VipsImage **out, VipsOperationBoolean operation, va_list ap) { return vips_call_split("bandbool", ap, in, out, operation); } /** * vips_bandbool: (method) * @in: left-hand input #VipsImage * @out: (out): output #VipsImage * @boolean: boolean operation to perform * @...: %NULL-terminated list of optional named arguments * * Perform various boolean operations across the bands of an image. For * example, a three-band uchar image operated on with * #VIPS_OPERATION_BOOLEAN_AND will produce a one-band uchar image where each * pixel is the bitwise and of the band elements of the corresponding pixel in * the input image. * * The output image is the same format as the input image for integer * types. Float types are cast to int before processing. Complex types are not * supported. * * The output image always has one band. * * This operation is useful in conjunction with vips_relational(). You can use * it to see if all image bands match exactly. * * See also: vips_boolean_const(). * * Returns: 0 on success, -1 on error */ int vips_bandbool(VipsImage *in, VipsImage **out, VipsOperationBoolean boolean, ...) { va_list ap; int result; va_start(ap, boolean); result = vips_bandboolv(in, out, boolean, ap); va_end(ap); return result; } /** * vips_bandand: (method) * @in: left-hand input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_BOOLEAN_AND on an image. See * vips_bandbool(). * * Returns: 0 on success, -1 on error */ int vips_bandand(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_bandboolv(in, out, VIPS_OPERATION_BOOLEAN_AND, ap); va_end(ap); return result; } /** * vips_bandor: (method) * @in: left-hand input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_BOOLEAN_OR on an image. See * vips_bandbool(). * * Returns: 0 on success, -1 on error */ int vips_bandor(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_bandboolv(in, out, VIPS_OPERATION_BOOLEAN_OR, ap); va_end(ap); return result; } /** * vips_bandeor: (method) * @in: left-hand input #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Perform #VIPS_OPERATION_BOOLEAN_EOR on an image. See * vips_bandbool(). * * Returns: 0 on success, -1 on error */ int vips_bandeor(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_bandboolv(in, out, VIPS_OPERATION_BOOLEAN_EOR, ap); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/bandfold.c000066400000000000000000000117041454007373500210430ustar00rootroot00000000000000/* Fold up x into bands. * * 5/6/15 * - from copy.c * 10/6/15 * - add @factor option */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "pconversion.h" typedef struct _VipsBandfold { VipsConversion parent_instance; /* The input image. */ VipsImage *in; int factor; } VipsBandfold; typedef VipsConversionClass VipsBandfoldClass; G_DEFINE_TYPE(VipsBandfold, vips_bandfold, VIPS_TYPE_CONVERSION); static int vips_bandfold_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsBandfold *bandfold = (VipsBandfold *) b; VipsRegion *ir = (VipsRegion *) seq; VipsImage *out = out_region->im; VipsRect *r = &out_region->valid; int psize = VIPS_IMAGE_SIZEOF_PEL(out); VipsRect need; int y; need.left = r->left * bandfold->factor; need.top = r->top; need.width = r->width * bandfold->factor; need.height = r->height; if (vips_region_prepare(ir, &need)) return -1; for (y = 0; y < r->height; y++) { VipsPel *p = VIPS_REGION_ADDR(ir, r->left * bandfold->factor, r->top + y); VipsPel *q = VIPS_REGION_ADDR(out_region, r->left, r->top + y); /* We can't use vips_region_region() since we change pixel * coordinates. */ memcpy(q, p, psize * r->width); } return 0; } static int vips_bandfold_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsConversion *conversion = VIPS_CONVERSION(object); VipsBandfold *bandfold = (VipsBandfold *) object; if (VIPS_OBJECT_CLASS(vips_bandfold_parent_class)->build(object)) return -1; if (vips_image_pio_input(bandfold->in)) return -1; if (bandfold->factor == 0) bandfold->factor = bandfold->in->Xsize; if (bandfold->in->Xsize % bandfold->factor != 0) { vips_error(class->nickname, "%s", _("@factor must be a factor of image width")); return -1; } if (vips_image_pipelinev(conversion->out, VIPS_DEMAND_STYLE_THINSTRIP, bandfold->in, NULL)) return -1; conversion->out->Xsize /= bandfold->factor; conversion->out->Bands *= bandfold->factor; if (vips_image_generate(conversion->out, vips_start_one, vips_bandfold_gen, vips_stop_one, bandfold->in, bandfold)) return -1; return 0; } static void vips_bandfold_class_init(VipsBandfoldClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VIPS_DEBUG_MSG("vips_bandfold_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "bandfold"; vobject_class->description = _("fold up x axis into bands"); vobject_class->build = vips_bandfold_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsBandfold, in)); VIPS_ARG_INT(class, "factor", 11, _("Factor"), _("Fold by this factor"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsBandfold, factor), 0, 10000000, 0); } static void vips_bandfold_init(VipsBandfold *bandfold) { /* 0 means fold by width, see above. */ bandfold->factor = 0; } /** * vips_bandfold: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @factor: fold by this factor * * Fold up an image horizontally: width is collapsed into bands. * Use @factor to set how much to fold by: @factor 3, for example, will make * the output image three times narrower than the input, and with three times * as many bands. By default the whole of the input width is folded up. * * See also: vips_csvload(), vips_bandunfold(). * * Returns: 0 on success, -1 on error. */ int vips_bandfold(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("bandfold", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/bandjoin.c000066400000000000000000000264551454007373500210670ustar00rootroot00000000000000/* VipsBandjoin -- bandwise join of a set of images * * Copyright: 1991, N. Dessipris, modification of im_bandjoin() * * Author: N. Dessipris * Written on: 17/04/1991 * Modified on : * 16/3/94 JC * - rewritten for partials * - now in ANSI C * - now works for any number of input images, except zero * 7/10/94 JC * - new IM_NEW() * 16/4/07 * - fall back to im_copy() for 1 input image * 17/1/09 * - cleanups * - gtk-doc * - im_bandjoin() just calls this * - works for RAD coding too * 27/1/10 * - formatalike inputs * 17/5/11 * - sizealike inputs * 27/10/11 * - rewrite as a class * 7/11/15 * - added bandjoin_const */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "bandary.h" typedef struct _VipsBandjoin { VipsBandary parent_instance; /* The input images. */ VipsArrayImage *in; } VipsBandjoin; typedef VipsBandaryClass VipsBandjoinClass; G_DEFINE_TYPE(VipsBandjoin, vips_bandjoin, VIPS_TYPE_BANDARY); static void vips_bandjoin_buffer(VipsBandarySequence *seq, VipsPel *q, VipsPel **p, int width) { VipsBandary *bandary = seq->bandary; VipsConversion *conversion = (VipsConversion *) bandary; VipsImage **in = bandary->ready; /* Output pel size. */ const int ops = VIPS_IMAGE_SIZEOF_PEL(conversion->out); int i; /* Loop for each input image. Scattered write is faster than * scattered read. */ for (i = 0; i < bandary->n; i++) { /* Input pel size. */ int ips = VIPS_IMAGE_SIZEOF_PEL(in[i]); VipsPel *restrict p1; VipsPel *restrict q1; int x, z; q1 = q; p1 = p[i]; if (ips == 1) { for (x = 0; x < width; x++) { q1[0] = p1[x]; q1 += ops; } q += ips; } else if (ips == 3) { for (x = 0; x < width; x++) { q1[0] = p1[0]; q1[1] = p1[1]; q1[2] = p1[2]; p1 += ips; q1 += ops; } q += ips; } else { for (x = 0; x < width; x++) { for (z = 0; z < ips; z++) q1[z] = p1[z]; p1 += ips; q1 += ops; } q += ips; } } } static int vips_bandjoin_build(VipsObject *object) { VipsBandary *bandary = (VipsBandary *) object; VipsBandjoin *bandjoin = (VipsBandjoin *) object; if (bandjoin->in) { bandary->in = vips_array_image_get(bandjoin->in, &bandary->n); if (bandary->n == 1) return vips_bandary_copy(bandary); else { int i; bandary->out_bands = 0; for (i = 0; i < bandary->n; i++) if (bandary->in[i]) bandary->out_bands += bandary->in[i]->Bands; } } if (VIPS_OBJECT_CLASS(vips_bandjoin_parent_class)->build(object)) return -1; return 0; } static void vips_bandjoin_class_init(VipsBandjoinClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsBandaryClass *bandary_class = VIPS_BANDARY_CLASS(class); VIPS_DEBUG_MSG("vips_bandjoin_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "bandjoin"; vobject_class->description = _("bandwise join a set of images"); vobject_class->build = vips_bandjoin_build; bandary_class->process_line = vips_bandjoin_buffer; VIPS_ARG_BOXED(class, "in", 0, _("Input"), _("Array of input images"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsBandjoin, in), VIPS_TYPE_ARRAY_IMAGE); } static void vips_bandjoin_init(VipsBandjoin *bandjoin) { /* Init our instance fields. */ } static int vips_bandjoinv(VipsImage **in, VipsImage **out, int n, va_list ap) { VipsArrayImage *array; int result; array = vips_array_image_new(in, n); result = vips_call_split("bandjoin", ap, array, out); vips_area_unref(VIPS_AREA(array)); return result; } /** * vips_bandjoin: * @in: (array length=n) (transfer none): array of input images * @out: (out): output image * @n: number of input images * @...: %NULL-terminated list of optional named arguments * * Join a set of images together, bandwise. * * If the images * have n and m bands, then the output image will have n + m * bands, with the first n coming from the first image and the last m * from the second. * * If the images differ in size, the smaller images are enlarged to match the * larger by adding zero pixels along the bottom and right. * * The input images are cast up to the smallest common type (see table * Smallest common format in * arithmetic). * * See also: vips_insert(). * * Returns: 0 on success, -1 on error */ int vips_bandjoin(VipsImage **in, VipsImage **out, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_bandjoinv(in, out, n, ap); va_end(ap); return result; } /** * vips_bandjoin2: * @in1: first input image * @in2: second input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Join a pair of images together, bandwise. See vips_bandjoin(). * * Returns: 0 on success, -1 on error */ int vips_bandjoin2(VipsImage *in1, VipsImage *in2, VipsImage **out, ...) { va_list ap; int result; VipsImage *in[2]; in[0] = in1; in[1] = in2; va_start(ap, out); result = vips_bandjoinv(in, out, 2, ap); va_end(ap); return result; } typedef struct _VipsBandjoinConst { VipsBandary parent_instance; VipsImage *in; VipsArrayDouble *c; /* The constant expanded to in's format, ready to be appended to each * pixel. */ int n; VipsPel *c_ready; } VipsBandjoinConst; typedef VipsBandaryClass VipsBandjoinConstClass; G_DEFINE_TYPE(VipsBandjoinConst, vips_bandjoin_const, VIPS_TYPE_BANDARY); static void vips_bandjoin_const_finalize(GObject *object) { VipsBandjoinConst *bandjoin = (VipsBandjoinConst *) object; VIPS_FREE(bandjoin->c_ready); G_OBJECT_CLASS(vips_bandjoin_const_parent_class)->finalize(object); } static void vips_bandjoin_const_buffer(VipsBandarySequence *seq, VipsPel *q, VipsPel **p, int width) { VipsBandary *bandary = seq->bandary; VipsConversion *conversion = (VipsConversion *) bandary; VipsBandjoinConst *bandjoin = (VipsBandjoinConst *) bandary; VipsImage *in = bandary->ready[0]; /* Output pel size. */ const int ops = VIPS_IMAGE_SIZEOF_PEL(conversion->out); /* Input pel size. */ const int ips = VIPS_IMAGE_SIZEOF_PEL(in); /* Extra bands size. */ const int ebs = ops - ips; VipsPel *restrict p1; VipsPel *restrict q1; int x, z; q1 = q; p1 = p[0]; /* Special path for 8-bit RGB -> RGBA ... it's a common case. */ if (ips == 3 && ebs == 1) { int c = bandjoin->c_ready[0]; for (x = 0; x < width; x++) { q1[0] = p1[0]; q1[1] = p1[1]; q1[2] = p1[2]; q1[3] = c; p1 += 3; q1 += 4; } } else { for (x = 0; x < width; x++) { for (z = 0; z < ips; z++) q1[z] = p1[z]; p1 += ips; q1 += ips; for (z = 0; z < ebs; z++) q1[z] = bandjoin->c_ready[z]; q1 += ebs; } } } static int vips_bandjoin_const_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsBandary *bandary = (VipsBandary *) object; VipsBandjoinConst *bandjoin = (VipsBandjoinConst *) object; if (bandjoin->c && bandjoin->in) { double *c; int n; c = vips_array_double_get(bandjoin->c, &n); if (n == 0) return vips_bandary_copy(bandary); else bandary->out_bands = bandjoin->in->Bands + n; bandary->n = 1; bandary->in = &bandjoin->in; if (!(bandjoin->c_ready = vips__vector_to_pels(class->nickname, n, bandjoin->in->BandFmt, bandjoin->in->Coding, c, NULL, n))) return -1; } if (VIPS_OBJECT_CLASS(vips_bandjoin_const_parent_class)->build(object)) return -1; return 0; } static void vips_bandjoin_const_class_init(VipsBandjoinConstClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsBandaryClass *bandary_class = VIPS_BANDARY_CLASS(class); VIPS_DEBUG_MSG("vips_bandjoin_const_class_init\n"); gobject_class->finalize = vips_bandjoin_const_finalize; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "bandjoin_const"; vobject_class->description = _("append a constant band to an image"); vobject_class->build = vips_bandjoin_const_build; bandary_class->process_line = vips_bandjoin_const_buffer; VIPS_ARG_IMAGE(class, "in", 0, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsBandjoinConst, in)); VIPS_ARG_BOXED(class, "c", 12, _("Constants"), _("Array of constants to add"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsBandjoinConst, c), VIPS_TYPE_ARRAY_DOUBLE); } static void vips_bandjoin_const_init(VipsBandjoinConst *bandjoin) { /* Init our instance fields. */ } static int vips_bandjoin_constv(VipsImage *in, VipsImage **out, double *c, int n, va_list ap) { VipsArrayDouble *array; int result; array = vips_array_double_new(c, n); result = vips_call_split("bandjoin_const", ap, in, out, array); vips_area_unref(VIPS_AREA(array)); return result; } /** * vips_bandjoin_const: (method) * @in: input image * @out: (out): output image * @c: (array length=n): array of constants to append * @n: number of constants * @...: %NULL-terminated list of optional named arguments * * Append a set of constant bands to an image. * * See also: vips_bandjoin(). * * Returns: 0 on success, -1 on error */ int vips_bandjoin_const(VipsImage *in, VipsImage **out, double *c, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_bandjoin_constv(in, out, c, n, ap); va_end(ap); return result; } /** * vips_bandjoin_const1: (method) * @in: input image * @out: (out): output image * @c: constant to append * @...: %NULL-terminated list of optional named arguments * * Append a single constant band to an image. * * Returns: 0 on success, -1 on error */ int vips_bandjoin_const1(VipsImage *in, VipsImage **out, double c, ...) { va_list ap; int result; va_start(ap, c); result = vips_bandjoin_constv(in, out, &c, 1, ap); va_end(ap); return result; } /** * vips_addalpha: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Append an alpha channel. * * See also: vips_image_hasalpha(). * * Returns: 0 on success, -1 on error */ int vips_addalpha(VipsImage *in, VipsImage **out, ...) { if (vips_bandjoin_const1(in, out, vips_interpretation_max_alpha(in->Type), NULL)) return -1; return 0; } libvips-8.15.1/libvips/conversion/bandmean.c000066400000000000000000000123721454007373500210410ustar00rootroot00000000000000/* average image bands * * Author: Simon Goodall * Written on: 17/7/07 * 17/7/07 JC * - hacked about a bit * 18/8/09 * - gtkdoc * - get rid of the complex case, just double the width * 19/11/11 * - redo as a class */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "bandary.h" typedef struct _VipsBandmean { VipsBandary parent_instance; VipsImage *in; } VipsBandmean; typedef VipsBandaryClass VipsBandmeanClass; G_DEFINE_TYPE(VipsBandmean, vips_bandmean, VIPS_TYPE_BANDARY); /* Unsigned int types. Round, keep sum in a larger variable. */ #define UILOOP(TYPE, STYPE) \ { \ TYPE *p = (TYPE *) in[0]; \ TYPE *q = (TYPE *) out; \ \ for (i = 0; i < sz; i++) { \ STYPE sum; \ \ sum = 0; \ for (j = 0; j < bands; j++) \ sum += p[j]; \ q[i] = (sum + bands / 2) / bands; \ p += bands; \ } \ } /* Signed int types. Round, keep sum in a larger variable. */ #define SILOOP(TYPE, STYPE) \ { \ TYPE *p = (TYPE *) in[0]; \ TYPE *q = (TYPE *) out; \ \ for (i = 0; i < sz; i++) { \ STYPE sum; \ \ sum = 0; \ for (j = 0; j < bands; j++) \ sum += p[j]; \ q[i] = sum > 0 \ ? (sum + bands / 2) / bands \ : (sum - bands / 2) / bands; \ p += bands; \ } \ } /* Float loop. No rounding, sum in same container. */ #define FLOOP(TYPE) \ { \ TYPE *p = (TYPE *) in[0]; \ TYPE *q = (TYPE *) out; \ \ for (i = 0; i < sz; i++) { \ TYPE sum; \ \ sum = 0; \ for (j = 0; j < bands; j++) \ sum += p[j]; \ q[i] = sum / bands; \ p += bands; \ } \ } static void vips_bandmean_buffer(VipsBandarySequence *seq, VipsPel *out, VipsPel **in, int width) { VipsBandary *bandary = seq->bandary; VipsImage *im = bandary->ready[0]; const int bands = im->Bands; const int sz = width * (vips_band_format_iscomplex(im->BandFmt) ? 2 : 1); int i, j; switch (vips_image_get_format(im)) { case VIPS_FORMAT_CHAR: SILOOP(signed char, int); break; case VIPS_FORMAT_UCHAR: UILOOP(unsigned char, unsigned int); break; case VIPS_FORMAT_SHORT: SILOOP(signed short, int); break; case VIPS_FORMAT_USHORT: UILOOP(unsigned short, unsigned int); break; case VIPS_FORMAT_INT: SILOOP(signed int, int); break; case VIPS_FORMAT_UINT: UILOOP(unsigned int, unsigned int); break; case VIPS_FORMAT_FLOAT: FLOOP(float); break; case VIPS_FORMAT_DOUBLE: FLOOP(double); break; case VIPS_FORMAT_COMPLEX: FLOOP(float); break; case VIPS_FORMAT_DPCOMPLEX: FLOOP(double); break; default: g_assert_not_reached(); } } static int vips_bandmean_build(VipsObject *object) { VipsBandary *bandary = (VipsBandary *) object; VipsBandmean *bandmean = (VipsBandmean *) object; bandary->n = 1; bandary->in = &bandmean->in; if (bandmean->in && bandmean->in->Bands == 1) return vips_bandary_copy(bandary); bandary->out_bands = 1; if (VIPS_OBJECT_CLASS(vips_bandmean_parent_class)->build(object)) return -1; return 0; } static void vips_bandmean_class_init(VipsBandmeanClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsBandaryClass *bandary_class = VIPS_BANDARY_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "bandmean"; object_class->description = _("band-wise average"); object_class->build = vips_bandmean_build; bandary_class->process_line = vips_bandmean_buffer; VIPS_ARG_IMAGE(class, "in", 0, _("Input"), _("Input image argument"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsBandmean, in)); } static void vips_bandmean_init(VipsBandmean *bandmean) { } /** * vips_bandmean: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * This operation writes a one-band image where each pixel is the average of * the bands for that pixel in the input image. The output band format is * the same as the input band format. Integer types use round-to-nearest * averaging. * * See also: vips_add(), vips_avg(), vips_recomb() * * Returns: 0 on success, -1 on error */ int vips_bandmean(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("bandmean", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/bandrank.c000066400000000000000000000164631454007373500210610ustar00rootroot00000000000000/* Sort a set of images, pixelwise, and pick out the index at each point. * * 19/8/03 * - from im_maxvalue(), via im_gbandrank() * 10/11/10 * - gtkdoc * - cleanups * - any mix of formats and bands * 23/10/13 * - redo as a class, from bandjoin.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "bandary.h" typedef struct _VipsBandrank { VipsBandary parent_instance; /* The input images. */ VipsArrayImage *in; int index; /* Pick out this one */ } VipsBandrank; typedef VipsBandaryClass VipsBandrankClass; G_DEFINE_TYPE(VipsBandrank, vips_bandrank, VIPS_TYPE_BANDARY); /* Special-case max and min (rather common). */ #define FIND_MAX(TYPE) \ { \ for (x = 0; x < sz; x++) { \ TYPE top = ((TYPE *) p[0])[x]; \ \ for (i = 1; i < bandary->n; i++) { \ TYPE v = ((TYPE *) p[i])[x]; \ \ if (v > top) \ top = v; \ } \ \ ((TYPE *) q)[x] = top; \ } \ } #define FIND_MIN(TYPE) \ { \ for (x = 0; x < sz; x++) { \ TYPE bot = ((TYPE *) p[0])[x]; \ \ for (i = 1; i < bandary->n; i++) { \ TYPE v = ((TYPE *) p[i])[x]; \ \ if (v < bot) \ bot = v; \ } \ \ ((TYPE *) q)[x] = bot; \ } \ } #define FIND_RANK(TYPE) \ { \ TYPE *sort = (TYPE *) sort_buffer; \ \ for (x = 0; x < sz; x++) { \ for (i = 0; i < bandary->n; i++) { \ TYPE v = ((TYPE *) p[i])[x]; \ \ /* Search for element >v. \ */ \ for (j = 0; j < i; j++) \ if (sort[j] > v) \ break; \ \ /* Move remaining elements down. \ */ \ for (k = i; k > j; k--) \ sort[k] = sort[k - 1]; \ \ /* Insert this element. \ */ \ sort[j] = v; \ } \ \ ((TYPE *) q)[x] = sort[bandrank->index]; \ } \ } #define SWITCH(OPERATION) \ switch (in[0]->BandFmt) { \ case VIPS_FORMAT_UCHAR: \ OPERATION(unsigned char); \ break; \ case VIPS_FORMAT_CHAR: \ OPERATION(signed char); \ break; \ case VIPS_FORMAT_USHORT: \ OPERATION(unsigned short); \ break; \ case VIPS_FORMAT_SHORT: \ OPERATION(signed short); \ break; \ case VIPS_FORMAT_UINT: \ OPERATION(unsigned int); \ break; \ case VIPS_FORMAT_INT: \ OPERATION(signed int); \ break; \ case VIPS_FORMAT_FLOAT: \ OPERATION(float); \ break; \ case VIPS_FORMAT_DOUBLE: \ OPERATION(double); \ break; \ \ default: \ g_assert_not_reached(); \ } /* Sort input band elements in the stack. Needs to be big enough for * sizeof(band-element) * number-of-images. */ static void vips_bandrank_buffer(VipsBandarySequence *seq, VipsPel *q, VipsPel **p, int width) { VipsBandary *bandary = seq->bandary; VipsBandrank *bandrank = (VipsBandrank *) bandary; VipsImage **in = bandary->ready; int sz = width * in[0]->Bands; VipsPel *sort_buffer = seq->pixels; int i, j, k; int x; /* Special-case max and min. */ if (bandrank->index == 0) SWITCH(FIND_MIN) else if (bandrank->index == bandary->n - 1) SWITCH(FIND_MAX) else SWITCH(FIND_RANK) } static int vips_bandrank_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsBandary *bandary = (VipsBandary *) object; VipsBandrank *bandrank = (VipsBandrank *) object; if (bandrank->in) { int n; VipsImage **in = vips_array_image_get(bandrank->in, &n); VipsImage **band = (VipsImage **) vips_object_local_array(object, n); int i; for (i = 0; i < n; i++) if (vips_check_noncomplex(class->nickname, in[i])) return -1; if (n == 1) { bandary->in = in; bandary->n = 1; return vips_bandary_copy(bandary); } if (vips__bandalike_vec(class->nickname, in, band, n, 0)) return -1; bandary->in = band; bandary->n = n; bandary->out_bands = band[0]->Bands; if (bandrank->index == -1) bandrank->index = bandary->n / 2; } if (VIPS_OBJECT_CLASS(vips_bandrank_parent_class)->build(object)) return -1; return 0; } static void vips_bandrank_class_init(VipsBandrankClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsBandaryClass *bandary_class = VIPS_BANDARY_CLASS(class); VIPS_DEBUG_MSG("vips_bandrank_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "bandrank"; vobject_class->description = _("band-wise rank of a set of images"); vobject_class->build = vips_bandrank_build; bandary_class->process_line = vips_bandrank_buffer; VIPS_ARG_BOXED(class, "in", 0, _("Input"), _("Array of input images"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsBandrank, in), VIPS_TYPE_ARRAY_IMAGE); VIPS_ARG_INT(class, "index", 0, _("Index"), _("Select this band element from sorted list"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsBandrank, index), -1, 1000000, -1); } static void vips_bandrank_init(VipsBandrank *bandrank) { /* -1 means median. */ bandrank->index = -1; } static int vips_bandrankv(VipsImage **in, VipsImage **out, int n, va_list ap) { VipsArrayImage *array; int result; array = vips_array_image_new(in, n); result = vips_call_split("bandrank", ap, array, out); vips_area_unref(VIPS_AREA(array)); return result; } /** * vips_bandrank: * @in: (array length=n): array of input images * @out: (out): output image * @n: number of input images * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @index: pick this index from list of sorted values * * Sorts the images @in band-element-wise, then outputs an * image in which each band element is selected from the sorted list by the * @index parameter. For example, if @index * is zero, then each output band element will be the minimum of all the * corresponding input band elements. * * By default, @index is -1, meaning pick the median value. * * It works for any uncoded, non-complex image type. Images are cast up to the * smallest common-format. * * Any image can have either 1 band or n bands, where n is the same for all * the non-1-band images. Single band images are then effectively copied to * make n-band images. * * Smaller input images are expanded by adding black pixels. * * See also: vips_rank(). * * Returns: 0 on success, -1 on error */ int vips_bandrank(VipsImage **in, VipsImage **out, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_bandrankv(in, out, n, ap); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/bandunfold.c000066400000000000000000000121531454007373500214050ustar00rootroot00000000000000/* Fold up x into bands. * * 5/6/15 * - from copy.c * 10/6/15 * - add @factor option */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "pconversion.h" typedef struct _VipsBandunfold { VipsConversion parent_instance; /* The input image. */ VipsImage *in; int factor; } VipsBandunfold; typedef VipsConversionClass VipsBandunfoldClass; G_DEFINE_TYPE(VipsBandunfold, vips_bandunfold, VIPS_TYPE_CONVERSION); static int vips_bandunfold_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsBandunfold *bandunfold = (VipsBandunfold *) b; VipsRegion *ir = (VipsRegion *) seq; VipsImage *in = ir->im; VipsImage *out = out_region->im; VipsRect *r = &out_region->valid; int esize = VIPS_IMAGE_SIZEOF_ELEMENT(in); int psize = VIPS_IMAGE_SIZEOF_PEL(out); VipsRect need; int y; need.left = r->left / bandunfold->factor; need.top = r->top; need.width = (1 + r->width) / bandunfold->factor; need.height = r->height; if (vips_region_prepare(ir, &need)) return -1; for (y = 0; y < r->height; y++) { VipsPel *p = VIPS_REGION_ADDR(ir, r->left / bandunfold->factor, r->top + y) + (r->left % bandunfold->factor) * esize; VipsPel *q = VIPS_REGION_ADDR(out_region, r->left, r->top + y); /* We can't use vips_region_region() since we change pixel * coordinates. */ memcpy(q, p, r->width * psize); } return 0; } static int vips_bandunfold_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsConversion *conversion = VIPS_CONVERSION(object); VipsBandunfold *bandunfold = (VipsBandunfold *) object; if (VIPS_OBJECT_CLASS(vips_bandunfold_parent_class)->build(object)) return -1; if (vips_image_pio_input(bandunfold->in)) return -1; if (bandunfold->factor == 0) bandunfold->factor = bandunfold->in->Bands; if (bandunfold->in->Bands % bandunfold->factor != 0) { vips_error(class->nickname, "%s", _("@factor must be a factor of image bands")); return -1; } if (vips_image_pipelinev(conversion->out, VIPS_DEMAND_STYLE_THINSTRIP, bandunfold->in, NULL)) return -1; conversion->out->Xsize *= bandunfold->factor; conversion->out->Bands /= bandunfold->factor; if (vips_image_generate(conversion->out, vips_start_one, vips_bandunfold_gen, vips_stop_one, bandunfold->in, bandunfold)) return -1; return 0; } static void vips_bandunfold_class_init(VipsBandunfoldClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VIPS_DEBUG_MSG("vips_bandunfold_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "bandunfold"; vobject_class->description = _("unfold image bands into x axis"); vobject_class->build = vips_bandunfold_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsBandunfold, in)); VIPS_ARG_INT(class, "factor", 11, _("Factor"), _("Unfold by this factor"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsBandunfold, factor), 0, 10000000, 0); } static void vips_bandunfold_init(VipsBandunfold *bandunfold) { /* 0 means unfold by width, see above. */ bandunfold->factor = 0; } /** * vips_bandunfold: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @factor: unfold by this factor * * Unfold image bands into x axis. * Use @factor to set how much to unfold by: @factor 3, for example, will make * the output image three times wider than the input, and with one third * as many bands. By default, all bands are unfolded. * * See also: vips_csvload(), vips_bandfold(). * * Returns: 0 on success, -1 on error. */ int vips_bandunfold(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("bandunfold", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/byteswap.c000066400000000000000000000132551454007373500211330ustar00rootroot00000000000000/* Swap image byte order. * * 5/6/15 * - from copy.c * 27/1/16 * - don't swap coded images */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "pconversion.h" typedef struct _VipsByteswap { VipsConversion parent_instance; /* The input image. */ VipsImage *in; } VipsByteswap; typedef VipsConversionClass VipsByteswapClass; G_DEFINE_TYPE(VipsByteswap, vips_byteswap, VIPS_TYPE_CONVERSION); /* Swap pairs of bytes. */ static void vips_byteswap_swap2(VipsPel *in, VipsPel *out, int width, VipsImage *im) { guint16 *p = (guint16 *) in; guint16 *q = (guint16 *) out; int sz = (VIPS_IMAGE_SIZEOF_PEL(im) * width) / 2; int x; for (x = 0; x < sz; x++) q[x] = GUINT16_SWAP_LE_BE(p[x]); } /* Swap 4- of bytes. */ static void vips_byteswap_swap4(VipsPel *in, VipsPel *out, int width, VipsImage *im) { guint32 *p = (guint32 *) in; guint32 *q = (guint32 *) out; int sz = (VIPS_IMAGE_SIZEOF_PEL(im) * width) / 4; int x; for (x = 0; x < sz; x++) q[x] = GUINT32_SWAP_LE_BE(p[x]); } /* Swap 8- of bytes. */ static void vips_byteswap_swap8(VipsPel *in, VipsPel *out, int width, VipsImage *im) { guint64 *p = (guint64 *) in; guint64 *q = (guint64 *) out; int sz = (VIPS_IMAGE_SIZEOF_PEL(im) * width) / 8; int x; for (x = 0; x < sz; x++) q[x] = GUINT64_SWAP_LE_BE(p[x]); } typedef void (*SwapFn)(VipsPel *in, VipsPel *out, int width, VipsImage *im); static SwapFn vips_byteswap_swap_fn[] = { NULL, /* VIPS_FORMAT_UCHAR = 0, */ NULL, /* VIPS_FORMAT_CHAR = 1, */ vips_byteswap_swap2, /* VIPS_FORMAT_USHORT = 2, */ vips_byteswap_swap2, /* VIPS_FORMAT_SHORT = 3, */ vips_byteswap_swap4, /* VIPS_FORMAT_UINT = 4, */ vips_byteswap_swap4, /* VIPS_FORMAT_INT = 5, */ vips_byteswap_swap4, /* VIPS_FORMAT_FLOAT = 6, */ vips_byteswap_swap4, /* VIPS_FORMAT_COMPLEX = 7, */ vips_byteswap_swap8, /* VIPS_FORMAT_DOUBLE = 8, */ vips_byteswap_swap8 /* VIPS_FORMAT_DPCOMPLEX = 9, */ }; /* Byteswap, turning bands into the x axis. */ static int vips_byteswap_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsImage *im = ir->im; VipsRect *r = &out_region->valid; SwapFn swap = vips_byteswap_swap_fn[im->BandFmt]; int y; g_assert(swap); if (vips_region_prepare(ir, r)) return -1; for (y = 0; y < r->height; y++) { VipsPel *p = VIPS_REGION_ADDR(ir, r->left, r->top + y); VipsPel *q = VIPS_REGION_ADDR(out_region, r->left, r->top + y); swap(p, q, r->width, im); } return 0; } static int vips_byteswap_build(VipsObject *object) { VipsConversion *conversion = VIPS_CONVERSION(object); VipsByteswap *byteswap = (VipsByteswap *) object; if (VIPS_OBJECT_CLASS(vips_byteswap_parent_class)->build(object)) return -1; /* Lots of images don't need swapping. */ if (byteswap->in->Coding != VIPS_CODING_NONE || !vips_byteswap_swap_fn[byteswap->in->BandFmt]) return vips_image_write(byteswap->in, conversion->out); if (vips_image_pio_input(byteswap->in)) return -1; if (vips_image_pipelinev(conversion->out, VIPS_DEMAND_STYLE_THINSTRIP, byteswap->in, NULL)) return -1; if (vips_image_generate(conversion->out, vips_start_one, vips_byteswap_gen, vips_stop_one, byteswap->in, byteswap)) return -1; return 0; } static void vips_byteswap_class_init(VipsByteswapClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VIPS_DEBUG_MSG("vips_byteswap_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "byteswap"; vobject_class->description = _("byteswap an image"); vobject_class->build = vips_byteswap_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsByteswap, in)); } static void vips_byteswap_init(VipsByteswap *byteswap) { } /** * vips_byteswap: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Swap the byte order in an image. * * See also: vips_rawload(). * * Returns: 0 on success, -1 on error. */ int vips_byteswap(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("byteswap", ap, in, out); va_end(ap); return result; } /* Convenience function: swap if @swap is %TRUE, otherwise copy. */ int vips__byteswap_bool(VipsImage *in, VipsImage **out, gboolean swap) { if (swap) return vips_byteswap(in, out, NULL); else return vips_copy(in, out, NULL); } libvips-8.15.1/libvips/conversion/cache.c000066400000000000000000000110051454007373500203270ustar00rootroot00000000000000/* vips_sink_screen() as an operation. * * 13/1/12 * - from tilecache.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a cache of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pconversion.h" typedef struct _VipsCache { VipsConversion parent_instance; VipsImage *in; int tile_width; int tile_height; int max_tiles; } VipsCache; typedef VipsConversionClass VipsCacheClass; G_DEFINE_TYPE(VipsCache, vips_cache, VIPS_TYPE_CONVERSION); static int vips_cache_build(VipsObject *object) { VipsConversion *conversion = VIPS_CONVERSION(object); VipsCache *cache = (VipsCache *) object; VIPS_DEBUG_MSG("vips_cache_build\n"); if (VIPS_OBJECT_CLASS(vips_cache_parent_class)->build(object)) return -1; if (vips_sink_screen(cache->in, conversion->out, NULL, cache->tile_width, cache->tile_height, cache->max_tiles, 0, NULL, NULL)) return -1; return 0; } static void vips_cache_class_init(VipsCacheClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VIPS_DEBUG_MSG("vips_cache_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "cache"; vobject_class->description = _("cache an image"); vobject_class->build = vips_cache_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsCache, in)); VIPS_ARG_INT(class, "tile_width", 3, _("Tile width"), _("Tile width in pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCache, tile_width), 1, 1000000, 128); VIPS_ARG_INT(class, "tile_height", 3, _("Tile height"), _("Tile height in pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCache, tile_height), 1, 1000000, 128); VIPS_ARG_INT(class, "max_tiles", 3, _("Max tiles"), _("Maximum number of tiles to cache"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCache, max_tiles), -1, 1000000, 1000); } static void vips_cache_init(VipsCache *cache) { /* By default, enough pixels for two 1920 x 1080 displays. */ cache->tile_width = 128; cache->tile_height = 128; cache->max_tiles = 250; } /** * vips_cache: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @tile_width: width of tiles in cache * * @tile_height: height of tiles in cache * * @max_tiles: maximum number of tiles to cache * * This operation behaves rather like vips_copy() between images * @in and @out, except that it keeps a cache of computed pixels. * This cache is made of up to @max_tiles tiles (a value of -1 * means any number of tiles), and each tile is of size @tile_width * by @tile_height pixels. By default it will cache 250 128 x 128 pixel tiles, * enough for two 1920 x 1080 images. * * This operation is a thin wrapper over vips_sink_screen(), see the * documentation for that operation for details. * * It uses a set of background threads to calculate pixels and the various * active cache operations coordinate so as not to overwhelm your system. When * a request is made for an area of pixels, the operation will block until all * of those pixels have been calculated. Pixels are calculated with a set of * threads. * * See also: vips_tilecache(). * * Returns: 0 on success, -1 on error. */ int vips_cache(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("cache", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/cast.c000066400000000000000000000442521454007373500202300ustar00rootroot00000000000000/* cast an image to a numerical format * * Author: Nicos Dessipris * Written on: 07/03/1991 * Modified on: * 04/05/1992 JC * - works for char, uchar too * - floating point code removed from integer clip operations * - uses nint() instead of own rounding code * - calculated the number of >255 clips for float/double input * incorrectly * - rejects complex input correctly now * 27/4/93 JC * - adapted to work with partial images * - nint() removed, now just +0.5 * - im_warning code removed * 30/6/93 JC * - adapted for partial v2 * 31/8/93 JC * - now detects and prints over/underflows * 27/10/93 JC * - unsigned integer clips now faster! * - falls back to im_copy() correctly * 5/5/94 JC * - switched to rint() * 18/8/94 JC * - now uses evalend callback * 9/5/95 JC * - now does complex too * 11/7/95 JC * - now uses IM_RINT() macro * 10/3/01 JC * - slightly faster and simpler * - generalised to im_clip2fmt(), all other clippers now just call * this * 21/4/04 JC * - now does floor(), not rint() ... you'll need to round yourself * before calling this if you want round-to-nearest * 7/11/07 * - use new evalstart/evalend system * 26/8/08 * - oops, complex->complex conversion was broken * 27/1/10 * - modernised * - gtk-doc * 27/10/11 * - redone as a class * 10/4/12 * - cast to uint now removes <0 values * 11/2/15 * - add @shift option * 1/3/16 * - better behaviour for shift of non-int types (thanks apacheark) * 14/11/18 * - revise for better uint/int clipping [erdmann] * - remove old overflow/underflow detect * 8/12/20 * - fix range clip in int32 -> unsigned casts [ewelot] */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "pconversion.h" typedef struct _VipsCast { VipsConversion parent_instance; VipsImage *in; VipsBandFormat format; gboolean shift; } VipsCast; typedef VipsConversionClass VipsCastClass; G_DEFINE_TYPE(VipsCast, vips_cast, VIPS_TYPE_CONVERSION); /* Cast down from an int. */ #define CAST_UCHAR(X) VIPS_CLIP(0, (X), UCHAR_MAX) #define CAST_CHAR(X) VIPS_CLIP(SCHAR_MIN, (X), SCHAR_MAX) #define CAST_USHORT(X) VIPS_CLIP(0, (X), USHRT_MAX) #define CAST_SHORT(X) VIPS_CLIP(SHRT_MIN, (X), SHRT_MAX) /* These cast down from gint64 to uint32 or int32. */ #define CAST_UINT(X) VIPS_CLIP(0, (X), UINT_MAX) #define CAST_INT(X) VIPS_CLIP(INT_MIN, (X), INT_MAX) /* Rightshift an integer type, ie. sizeof(ITYPE) >= sizeof(OTYPE). * * If we're casting between two formats of the same size (eg. ushort to * short), sizes can be equal. */ #define SHIFT_RIGHT(ITYPE, OTYPE) \ { \ ITYPE *restrict p = (ITYPE *) in; \ OTYPE *restrict q = (OTYPE *) out; \ int n = ((int) sizeof(ITYPE) << 3) - ((int) sizeof(OTYPE) << 3); \ \ g_assert(sizeof(ITYPE) >= sizeof(OTYPE)); \ \ for (x = 0; x < sz; x++) \ q[x] = p[x] >> n; \ } /* Leftshift an integer type, ie. sizeof(ITYPE) <= sizeof(OTYPE). We need to * copy the bottom bit up into the fresh new bits. */ #define SHIFT_LEFT(ITYPE, OTYPE) \ { \ ITYPE *restrict p = (ITYPE *) in; \ OTYPE *restrict q = (OTYPE *) out; \ int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \ \ g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \ \ for (x = 0; x < sz; x++) \ q[x] = (p[x] << n) | (((p[x] & 1) << n) - (p[x] & 1)); \ } #define SHIFT_LEFT_SIGNED(ITYPE, OTYPE) \ { \ ITYPE *restrict p = (ITYPE *) in; \ OTYPE *restrict q = (OTYPE *) out; \ int n = ((int) sizeof(OTYPE) << 3) - ((int) sizeof(ITYPE) << 3); \ \ g_assert(sizeof(ITYPE) <= sizeof(OTYPE)); \ \ for (x = 0; x < sz; x++) \ q[x] = VIPS_LSHIFT_INT(p[x], n) | \ (((p[x] & 1) << n) - (p[x] & 1)); \ } /* Cast int types to an int type. We need to pass in the type of the * intermediate value, either int or int64, or we'll have problems with uint * sources turning -ve. */ #define CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST) \ { \ ITYPE *restrict p = (ITYPE *) in; \ OTYPE *restrict q = (OTYPE *) out; \ \ for (x = 0; x < sz; x++) { \ TEMP t = (TEMP) p[x]; \ \ q[x] = CAST(t); \ } \ } /* Int to int handling. */ #define INT_INT(ITYPE, OTYPE, TEMP, CAST) \ { \ if (cast->shift && \ sizeof(ITYPE) > sizeof(OTYPE)) { \ SHIFT_RIGHT(ITYPE, OTYPE); \ } \ else if (cast->shift) { \ SHIFT_LEFT(ITYPE, OTYPE); \ } \ else { \ CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \ } \ } /* Int to int handling for signed int types. */ #define INT_INT_SIGNED(ITYPE, OTYPE, TEMP, CAST) \ { \ if (cast->shift && \ sizeof(ITYPE) > sizeof(OTYPE)) { \ SHIFT_RIGHT(ITYPE, OTYPE); \ } \ else if (cast->shift) { \ SHIFT_LEFT_SIGNED(ITYPE, OTYPE); \ } \ else { \ CAST_INT_INT(ITYPE, OTYPE, TEMP, CAST); \ } \ } /* Cast float types to an int type. * * We need to do the range clip as double or we'll get errors for int max, * since that can't be represented as a 32-bit float. */ #define CAST_FLOAT_INT(ITYPE, OTYPE, TEMP, CAST) \ { \ ITYPE *restrict p = (ITYPE *) in; \ OTYPE *restrict q = (OTYPE *) out; \ \ for (x = 0; x < sz; x++) \ q[x] = CAST((double) p[x]); \ } /* Cast complex types to an int type. Just take the real part. * * We need to do the range clip as double or we'll get errors for int max, * since that can't be represented as a 32-bit float. */ #define CAST_COMPLEX_INT(ITYPE, OTYPE, TEMP, CAST) \ { \ ITYPE *restrict p = (ITYPE *) in; \ OTYPE *restrict q = (OTYPE *) out; \ \ for (x = 0; x < sz; x++) { \ q[x] = CAST((double) p[0]); \ p += 2; \ } \ } /* Cast non-complex types to a float type. */ #define CAST_REAL_FLOAT(ITYPE, OTYPE) \ { \ ITYPE *restrict p = (ITYPE *) in; \ OTYPE *restrict q = (OTYPE *) out; \ \ for (x = 0; x < sz; x++) \ q[x] = p[x]; \ } /* Cast complex types to a float type ... just take real. */ #define CAST_COMPLEX_FLOAT(ITYPE, OTYPE) \ { \ ITYPE *restrict p = (ITYPE *) in; \ OTYPE *restrict q = (OTYPE *) out; \ \ for (x = 0; x < sz; x++) { \ q[x] = p[0]; \ p += 2; \ } \ } /* Cast any non-complex to a complex type ... set imaginary to zero. */ #define CAST_REAL_COMPLEX(ITYPE, OTYPE) \ { \ ITYPE *restrict p = (ITYPE *) in; \ OTYPE *restrict q = (OTYPE *) out; \ \ for (x = 0; x < sz; x++) { \ q[0] = p[x]; \ q[1] = 0.0; \ q += 2; \ } \ } /* Cast any complex to a complex type. */ #define CAST_COMPLEX_COMPLEX(ITYPE, OTYPE) \ { \ ITYPE *restrict p = (ITYPE *) in; \ OTYPE *restrict q = (OTYPE *) out; \ \ for (x = 0; x < sz; x++) { \ q[0] = p[0]; \ q[1] = p[1]; \ p += 2; \ q += 2; \ } \ } #define BAND_SWITCH_INNER(ITYPE, INT, FLOAT, COMPLEX) \ { \ switch (conversion->out->BandFmt) { \ case VIPS_FORMAT_UCHAR: \ INT(ITYPE, unsigned char, int, CAST_UCHAR); \ break; \ \ case VIPS_FORMAT_CHAR: \ INT(ITYPE, signed char, int, CAST_CHAR); \ break; \ \ case VIPS_FORMAT_USHORT: \ INT(ITYPE, unsigned short, int, CAST_USHORT); \ break; \ \ case VIPS_FORMAT_SHORT: \ INT(ITYPE, signed short, int, CAST_SHORT); \ break; \ \ case VIPS_FORMAT_UINT: \ INT(ITYPE, unsigned int, gint64, CAST_UINT); \ break; \ \ case VIPS_FORMAT_INT: \ INT(ITYPE, signed int, gint64, CAST_INT); \ break; \ \ case VIPS_FORMAT_FLOAT: \ FLOAT(ITYPE, float); \ break; \ \ case VIPS_FORMAT_DOUBLE: \ FLOAT(ITYPE, double); \ break; \ \ case VIPS_FORMAT_COMPLEX: \ COMPLEX(ITYPE, float); \ break; \ \ case VIPS_FORMAT_DPCOMPLEX: \ COMPLEX(ITYPE, double); \ break; \ \ default: \ g_assert_not_reached(); \ } \ } static int vips_cast_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) vseq; VipsCast *cast = (VipsCast *) b; VipsConversion *conversion = (VipsConversion *) b; VipsRect *r = &out_region->valid; int sz = VIPS_REGION_N_ELEMENTS(out_region); int x, y; if (vips_region_prepare(ir, r)) return -1; VIPS_GATE_START("vips_cast_gen: work"); for (y = 0; y < r->height; y++) { VipsPel *in = VIPS_REGION_ADDR(ir, r->left, r->top + y); VipsPel *out = VIPS_REGION_ADDR(out_region, r->left, r->top + y); switch (ir->im->BandFmt) { case VIPS_FORMAT_UCHAR: BAND_SWITCH_INNER(unsigned char, INT_INT, CAST_REAL_FLOAT, CAST_REAL_COMPLEX); break; case VIPS_FORMAT_CHAR: BAND_SWITCH_INNER(signed char, INT_INT_SIGNED, CAST_REAL_FLOAT, CAST_REAL_COMPLEX); break; case VIPS_FORMAT_USHORT: BAND_SWITCH_INNER(unsigned short, INT_INT, CAST_REAL_FLOAT, CAST_REAL_COMPLEX); break; case VIPS_FORMAT_SHORT: BAND_SWITCH_INNER(signed short, INT_INT_SIGNED, CAST_REAL_FLOAT, CAST_REAL_COMPLEX); break; case VIPS_FORMAT_UINT: BAND_SWITCH_INNER(unsigned int, INT_INT, CAST_REAL_FLOAT, CAST_REAL_COMPLEX); break; case VIPS_FORMAT_INT: BAND_SWITCH_INNER(signed int, INT_INT_SIGNED, CAST_REAL_FLOAT, CAST_REAL_COMPLEX); break; case VIPS_FORMAT_FLOAT: BAND_SWITCH_INNER(float, CAST_FLOAT_INT, CAST_REAL_FLOAT, CAST_REAL_COMPLEX); break; case VIPS_FORMAT_DOUBLE: BAND_SWITCH_INNER(double, CAST_FLOAT_INT, CAST_REAL_FLOAT, CAST_REAL_COMPLEX); break; case VIPS_FORMAT_COMPLEX: BAND_SWITCH_INNER(float, CAST_COMPLEX_INT, CAST_COMPLEX_FLOAT, CAST_COMPLEX_COMPLEX); break; case VIPS_FORMAT_DPCOMPLEX: BAND_SWITCH_INNER(double, CAST_COMPLEX_INT, CAST_COMPLEX_FLOAT, CAST_COMPLEX_COMPLEX); break; default: g_assert_not_reached(); } } VIPS_GATE_STOP("vips_cast_gen: work"); return 0; } static int vips_cast_build(VipsObject *object) { VipsConversion *conversion = VIPS_CONVERSION(object); VipsCast *cast = (VipsCast *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); VipsImage *in; if (VIPS_OBJECT_CLASS(vips_cast_parent_class)->build(object)) return -1; in = cast->in; /* Trivial case: fall back to copy(). */ if (in->BandFmt == cast->format) return vips_image_write(in, conversion->out); if (vips_image_decode(in, &t[0])) return -1; in = t[0]; /* If @shift is on but we're not in an int format and we're going to * an int format, we need to cast to int first. For example, what * about a float image tagged as rgb16 being cast to uint8? We need * to cast to ushort before we do the final cast to uint8. */ if (cast->shift && !vips_band_format_isint(in->BandFmt) && vips_band_format_isint(cast->format)) { if (vips_cast(in, &t[1], vips_image_guess_format(in), NULL)) return -1; in = t[1]; } if (vips_image_pipelinev(conversion->out, VIPS_DEMAND_STYLE_THINSTRIP, in, NULL)) return -1; conversion->out->BandFmt = cast->format; if (vips_image_generate(conversion->out, vips_start_one, vips_cast_gen, vips_stop_one, in, cast)) return -1; return 0; } static void vips_cast_class_init(VipsCastClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VIPS_DEBUG_MSG("vips_cast_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "cast"; vobject_class->description = _("cast an image"); vobject_class->build = vips_cast_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsCast, in)); VIPS_ARG_ENUM(class, "format", 6, _("Format"), _("Format to cast to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsCast, format), VIPS_TYPE_BAND_FORMAT, VIPS_FORMAT_UCHAR); VIPS_ARG_BOOL(class, "shift", 7, _("Shift"), _("Shift integer values up and down"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCast, shift), FALSE); } static void vips_cast_init(VipsCast *cast) { } static int vips_castv(VipsImage *in, VipsImage **out, VipsBandFormat format, va_list ap) { return vips_call_split("cast", ap, in, out, format); } /** * vips_cast: (method) * @in: input image * @out: (out): output image * @format: format to convert to * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @shift: %gboolean, integer values are shifted * * Convert @in to @format. You can convert between any pair of formats. * Floats are truncated (not rounded). Out of range values are clipped. * * Casting from complex to real returns the real part. * * If @shift is %TRUE, integer values are shifted up and down. For example, * casting from unsigned 8 bit to unsigned 16 bit would * shift every value left by 8 bits. The bottom bit is copied into the new * bits, so 255 would become 65535. * * See also: vips_scale(), vips_complexform(), vips_real(), vips_imag(), * vips_cast_uchar(), vips_msb(). * * Returns: 0 on success, -1 on error */ int vips_cast(VipsImage *in, VipsImage **out, VipsBandFormat format, ...) { va_list ap; int result; va_start(ap, format); result = vips_castv(in, out, format, ap); va_end(ap); return result; } /** * vips_cast_uchar: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Convert @in to #VIPS_FORMAT_UCHAR. See vips_cast(). * * Returns: 0 on success, -1 on error */ int vips_cast_uchar(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_castv(in, out, VIPS_FORMAT_UCHAR, ap); va_end(ap); return result; } /** * vips_cast_char: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Convert @in to #VIPS_FORMAT_CHAR. See vips_cast(). * * Returns: 0 on success, -1 on error */ int vips_cast_char(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_castv(in, out, VIPS_FORMAT_CHAR, ap); va_end(ap); return result; } /** * vips_cast_ushort: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Convert @in to #VIPS_FORMAT_USHORT. See vips_cast(). * * Returns: 0 on success, -1 on error */ int vips_cast_ushort(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_castv(in, out, VIPS_FORMAT_USHORT, ap); va_end(ap); return result; } /** * vips_cast_short: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Convert @in to #VIPS_FORMAT_SHORT. See vips_cast(). * * Returns: 0 on success, -1 on error */ int vips_cast_short(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_castv(in, out, VIPS_FORMAT_SHORT, ap); va_end(ap); return result; } /** * vips_cast_uint: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Convert @in to #VIPS_FORMAT_UINT. See vips_cast(). * * Returns: 0 on success, -1 on error */ int vips_cast_uint(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_castv(in, out, VIPS_FORMAT_UINT, ap); va_end(ap); return result; } /** * vips_cast_int: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Convert @in to #VIPS_FORMAT_INT. See vips_cast(). * * Returns: 0 on success, -1 on error */ int vips_cast_int(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_castv(in, out, VIPS_FORMAT_INT, ap); va_end(ap); return result; } /** * vips_cast_float: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Convert @in to #VIPS_FORMAT_FLOAT. See vips_cast(). * * Returns: 0 on success, -1 on error */ int vips_cast_float(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_castv(in, out, VIPS_FORMAT_FLOAT, ap); va_end(ap); return result; } /** * vips_cast_double: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Convert @in to #VIPS_FORMAT_DOUBLE. See vips_cast(). * * Returns: 0 on success, -1 on error */ int vips_cast_double(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_castv(in, out, VIPS_FORMAT_DOUBLE, ap); va_end(ap); return result; } /** * vips_cast_complex: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Convert @in to #VIPS_FORMAT_COMPLEX. See vips_cast(). * * Returns: 0 on success, -1 on error */ int vips_cast_complex(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_castv(in, out, VIPS_FORMAT_COMPLEX, ap); va_end(ap); return result; } /** * vips_cast_dpcomplex: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Convert @in to #VIPS_FORMAT_DPCOMPLEX. See vips_cast(). * * Returns: 0 on success, -1 on error */ int vips_cast_dpcomplex(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_castv(in, out, VIPS_FORMAT_DPCOMPLEX, ap); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/composite.cpp000066400000000000000000001160171454007373500216370ustar00rootroot00000000000000/* composite an array of images with PDF operators * * 25/9/17 * - from bandjoin.c * 30/11/17 * - add composite2 class, to make a nice CLI interface * 30/1/18 * - remove number of images limit * - allow one mode ... reused for all joins * 11/8/18 [medakk] * - x/y params let you position images * 27/11/18 * - don't stop on first non-transparent image [felixbuenemann, GDmac] * 6/12/18 * - do our own subimage positioning * 8/5/19 * - revise in/out/dest-in/dest-out to make smoother alpha */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #ifdef _MSC_VER #include #else #include #endif #include #if defined(HAVE__ALIGNED_MALLOC) || defined(HAVE_MEMALIGN) #include #endif #include #include #include #include "pconversion.h" /* Maximum number of image bands. */ #define MAX_BANDS (64) /* Uncomment to disable the vector path ... handy for debugging. #undef HAVE_VECTOR_ARITH */ /* We have a vector path with gcc's vector attr. */ #ifdef HAVE_VECTOR_ARITH /* A vector of four floats. */ typedef float v4f __attribute__((vector_size(4 * sizeof(float)), aligned(16))); #endif /*HAVE_VECTOR_ARITH*/ typedef struct _VipsCompositeBase { VipsConversion parent_instance; /* The input images. */ VipsArrayImage *in; /* For N input images, 1 blend mode or N - 1 blend modes. */ VipsArrayInt *mode; /* Compositing space. This defaults to RGB, or B_W if we only have * G and GA inputs. */ VipsInterpretation compositing_space; /* Set if the input images have already been premultiplied. */ gboolean premultiplied; /* The x and y positions for each image in the stack. There are n - 1 * of these, since image 0 is always positioned at (0, 0). Set by * subclasses. Can be NULL. */ int *x_offset; int *y_offset; /* A rect for the position of each input image. For each output region, * we composite the set of input images which intersect that area. */ VipsRect *subimages; /* The number of non-alpha bands we are blending. */ int bands; /* The maximum value for each band, set from the image interpretation. * This is used to scale each band to 0 - 1. */ double max_band[MAX_BANDS + 1]; /* TRUE if all our modes are skippable, ie. we can avoid compositing * the whole stack for every pixel request. */ gboolean skippable; } VipsCompositeBase; typedef VipsConversionClass VipsCompositeBaseClass; /* We need C linkage for this. */ extern "C" { G_DEFINE_ABSTRACT_TYPE(VipsCompositeBase, vips_composite_base, VIPS_TYPE_CONVERSION); } static void vips_composite_base_dispose(GObject *gobject) { VipsCompositeBase *composite = (VipsCompositeBase *) gobject; if (composite->in) { vips_area_unref((VipsArea *) composite->in); composite->in = NULL; } if (composite->mode) { vips_area_unref((VipsArea *) composite->mode); composite->mode = NULL; } VIPS_FREE(composite->subimages); G_OBJECT_CLASS(vips_composite_base_parent_class)->dispose(gobject); } /* Our sequence value. */ typedef struct { #ifdef HAVE_VECTOR_ARITH /* max_band as a vector, for the RGBA case. This must be * defined first to ensure that the member is aligned * on a 16-byte boundary. */ v4f max_band_vec; #endif /*HAVE_VECTOR_ARITH*/ VipsCompositeBase *composite; /* Full set of input regions, each made on the corresponding input * image. */ VipsRegion **input_regions; /* We then vips_region_prepare_to() to one of this set of regions, * each defined on the base image. */ VipsRegion **composite_regions; /* Number of input regions which intersect this request rect. */ int n; /* For each of @n above (inputs which intersect this request), the * index of the input image we need. We can use this index to get the * position, input region and composite region. */ int *enabled; /* For each enabled image, an input pointer. */ VipsPel **p; } VipsCompositeSequence; #ifdef HAVE_VECTOR_ARITH /* Allocate aligned memory. The return value can be released * by calling the vips_free_aligned() function, for example: * VIPS_FREEF(vips_free_aligned, ptr); */ static inline void * vips_alloc_aligned(size_t sz, size_t align) { g_assert(!(align & (align - 1))); #ifdef HAVE__ALIGNED_MALLOC return _aligned_malloc(sz, align); #elif defined(HAVE_POSIX_MEMALIGN) void *ptr; if (posix_memalign(&ptr, align, sz)) return NULL; return ptr; #elif defined(HAVE_MEMALIGN) return memalign(align, sz); #else #error Missing aligned alloc implementation #endif } static inline void vips_free_aligned(void *ptr) { #ifdef HAVE__ALIGNED_MALLOC _aligned_free(ptr); #else /*defined(HAVE_POSIX_MEMALIGN) || defined(HAVE_MEMALIGN)*/ free(ptr); #endif } #endif /*HAVE_VECTOR_ARITH*/ static int vips_composite_stop(void *vseq, void *a, void *b) { VipsCompositeSequence *seq = (VipsCompositeSequence *) vseq; if (seq->input_regions) { for (int i = 0; seq->input_regions[i]; i++) VIPS_UNREF(seq->input_regions[i]); VIPS_FREE(seq->input_regions); } if (seq->composite_regions) { for (int i = 0; seq->composite_regions[i]; i++) VIPS_UNREF(seq->composite_regions[i]); VIPS_FREE(seq->composite_regions); } VIPS_FREE(seq->enabled); VIPS_FREE(seq->p); #ifdef HAVE_VECTOR_ARITH VIPS_FREEF(vips_free_aligned, seq); #else /*!defined(HAVE_VECTOR_ARITH)*/ VIPS_FREE(seq); #endif /*HAVE_VECTOR_ARITH*/ return 0; } static void * vips_composite_start(VipsImage *out, void *a, void *b) { VipsImage **in = (VipsImage **) a; VipsCompositeBase *composite = (VipsCompositeBase *) b; VipsCompositeSequence *seq; int i, n; #ifdef HAVE_VECTOR_ARITH /* Ensure that the memory is aligned on a 16-byte boundary. */ if (!(seq = ((VipsCompositeSequence *) vips_alloc_aligned( sizeof(VipsCompositeSequence), 16)))) #else /*!defined(HAVE_VECTOR_ARITH)*/ if (!(seq = VIPS_NEW(NULL, VipsCompositeSequence))) #endif /*HAVE_VECTOR_ARITH*/ return NULL; seq->composite = composite; seq->input_regions = NULL; seq->enabled = NULL; seq->p = NULL; /* How many images? */ for (n = 0; in[n]; n++) ; /* Allocate space for region array. */ if (!(seq->input_regions = VIPS_ARRAY(NULL, n + 1, VipsRegion *))) { vips_composite_stop(seq, NULL, NULL); return NULL; } for (i = 0; i < n + 1; i++) seq->input_regions[i] = NULL; if (!(seq->composite_regions = VIPS_ARRAY(NULL, n + 1, VipsRegion *))) { vips_composite_stop(seq, NULL, NULL); return NULL; } for (i = 0; i < n + 1; i++) seq->composite_regions[i] = NULL; seq->enabled = VIPS_ARRAY(NULL, n, int); seq->p = VIPS_ARRAY(NULL, n, VipsPel *); if (!seq->enabled || !seq->p) { vips_composite_stop(seq, NULL, NULL); return NULL; } /* Create a set of regions. */ for (i = 0; i < n; i++) { seq->input_regions[i] = vips_region_new(in[i]); seq->composite_regions[i] = vips_region_new(in[0]); if (!seq->input_regions[i] || !seq->composite_regions[i]) { vips_composite_stop(seq, NULL, NULL); return NULL; } } #ifdef HAVE_VECTOR_ARITH /* We need a float version for the vector path. */ if (composite->bands == 3) seq->max_band_vec = (v4f){ (float) composite->max_band[0], (float) composite->max_band[1], (float) composite->max_band[2], (float) composite->max_band[3] }; #endif return seq; } /* For each of the supported interpretations, the maximum value of each band. */ static int vips_composite_base_max_band(VipsCompositeBase *composite, double *max_band) { double max_alpha; int b; max_alpha = vips_interpretation_max_alpha(composite->compositing_space); for (b = 0; b <= composite->bands; b++) max_band[b] = max_alpha; switch (composite->compositing_space) { case VIPS_INTERPRETATION_XYZ: max_band[0] = VIPS_D65_X0; max_band[1] = VIPS_D65_Y0; max_band[2] = VIPS_D65_Z0; break; case VIPS_INTERPRETATION_LAB: max_band[0] = 100; max_band[1] = 128; max_band[2] = 128; break; case VIPS_INTERPRETATION_LCH: max_band[0] = 100; max_band[1] = 128; max_band[2] = 360; break; case VIPS_INTERPRETATION_CMC: max_band[0] = 100; max_band[1] = 128; max_band[2] = 360; break; case VIPS_INTERPRETATION_scRGB: max_band[0] = 1; max_band[1] = 1; max_band[2] = 1; break; case VIPS_INTERPRETATION_sRGB: max_band[0] = 255; max_band[1] = 255; max_band[2] = 255; break; case VIPS_INTERPRETATION_HSV: max_band[0] = 255; max_band[1] = 255; max_band[2] = 255; break; case VIPS_INTERPRETATION_CMYK: max_band[0] = 255; max_band[1] = 255; max_band[2] = 255; max_band[3] = 255; break; case VIPS_INTERPRETATION_RGB16: max_band[0] = 65535; max_band[1] = 65535; max_band[2] = 65535; break; case VIPS_INTERPRETATION_GREY16: max_band[0] = 65535; break; case VIPS_INTERPRETATION_YXY: max_band[0] = 100; max_band[1] = 1; max_band[2] = 1; break; case VIPS_INTERPRETATION_B_W: max_band[0] = 255; break; default: return -1; } return 0; } /* Find the subset of our input images which intersect this region. If we are * not in skippable mode, we must enable all layers. */ static void vips_composite_base_select(VipsCompositeSequence *seq, VipsRect *r) { VipsCompositeBase *composite = seq->composite; int n = composite->in->area.n; seq->n = 0; for (int i = 0; i < n; i++) if (!composite->skippable || vips_rect_overlapsrect(r, &composite->subimages[i])) { seq->enabled[seq->n] = i; seq->n += 1; } } /* Cairo naming conventions: * * aR alpha of result * aA alpha of source A (the new pixel) * aB alpha of source B (the thing we accumulate) * xR colour band of result * xA colour band of source A * xB colour band of source B */ /* A is the new pixel coming in, of any non-complex type T. * * We must scale incoming pixels to 0 - 1 by dividing by the scale[] vector. * * If premultipled is not set, we premultiply incoming pixels before blending. * * B is the double pixel we are accumulating. */ template static void vips_composite_base_blend(VipsCompositeBase *composite, VipsBlendMode mode, double *restrict B, T *restrict p) { const int bands = composite->bands; double A[MAX_BANDS + 1]; double aA; double aB; double aR; double t1; double t2; double t3; double f[MAX_BANDS + 1]; /* Load and scale the pixel to 0 - 1. */ for (int b = 0; b <= bands; b++) A[b] = p[b] / composite->max_band[b]; /* Not necessary, but it stops a compiler warning. */ for (int b = bands + 1; b < MAX_BANDS + 1; b++) A[b] = 0.0; aA = A[bands]; aB = B[bands]; /* We may need to premultiply A. */ if (!composite->premultiplied) for (int b = 0; b < bands; b++) A[b] *= aA; switch (mode) { case VIPS_BLEND_MODE_CLEAR: aR = 0; for (int b = 0; b < bands; b++) B[b] = 0; break; case VIPS_BLEND_MODE_SOURCE: aR = aA; for (int b = 0; b < bands; b++) B[b] = A[b]; break; case VIPS_BLEND_MODE_OVER: aR = aA + aB * (1 - aA); t1 = 1 - aA; for (int b = 0; b < bands; b++) B[b] = A[b] + t1 * B[b]; break; case VIPS_BLEND_MODE_IN: aR = aA * aB; // if aA == 0, then aR == 0 and so B will already be 0 if (aA != 0) for (int b = 0; b < bands; b++) B[b] = A[b] * aR / aA; break; case VIPS_BLEND_MODE_OUT: aR = aA * (1 - aB); // if aA == 0, then aR == 0 and so B will already be 0 if (aA != 0) for (int b = 0; b < bands; b++) B[b] = A[b] * aR / aA; break; case VIPS_BLEND_MODE_ATOP: aR = aB; t1 = 1 - aA; for (int b = 0; b < bands; b++) B[b] = A[b] + t1 * B[b]; break; case VIPS_BLEND_MODE_DEST: aR = aB; // B = B break; case VIPS_BLEND_MODE_DEST_OVER: aR = aB + aA * (1 - aB); t1 = 1 - aB; for (int b = 0; b < bands; b++) B[b] = B[b] + t1 * A[b]; break; case VIPS_BLEND_MODE_DEST_IN: aR = aA * aB; // B = B if (aB != 0) for (int b = 0; b < bands; b++) B[b] *= aR / aB; break; case VIPS_BLEND_MODE_DEST_OUT: aR = (1 - aA) * aB; // B = B // if aB is 0, then B is already 0 if (aB != 0) for (int b = 0; b < bands; b++) B[b] *= aR / aB; break; case VIPS_BLEND_MODE_DEST_ATOP: aR = aA; t1 = 1 - aA; for (int b = 0; b < bands; b++) B[b] = t1 * A[b] + B[b]; break; case VIPS_BLEND_MODE_XOR: aR = aA + aB - 2 * aA * aB; t1 = 1 - aB; t2 = 1 - aA; for (int b = 0; b < bands; b++) B[b] = t1 * A[b] + t2 * B[b]; break; case VIPS_BLEND_MODE_ADD: aR = VIPS_MIN(1, aA + aB); for (int b = 0; b < bands; b++) B[b] = A[b] + B[b]; break; case VIPS_BLEND_MODE_SATURATE: aR = VIPS_MIN(1, aA + aB); t1 = VIPS_MIN(aA, 1 - aB); for (int b = 0; b < bands; b++) B[b] = t1 * A[b] + B[b]; break; default: /* The PDF modes are a bit different. */ aR = aA + aB * (1 - aA); switch (mode) { case VIPS_BLEND_MODE_MULTIPLY: for (int b = 0; b < bands; b++) f[b] = A[b] * B[b]; break; case VIPS_BLEND_MODE_SCREEN: for (int b = 0; b < bands; b++) f[b] = A[b] + B[b] - A[b] * B[b]; break; case VIPS_BLEND_MODE_OVERLAY: for (int b = 0; b < bands; b++) if (B[b] <= 0.5) f[b] = 2 * A[b] * B[b]; else f[b] = 1 - 2 * (1 - A[b]) * (1 - B[b]); break; case VIPS_BLEND_MODE_DARKEN: for (int b = 0; b < bands; b++) f[b] = VIPS_MIN(A[b], B[b]); break; case VIPS_BLEND_MODE_LIGHTEN: for (int b = 0; b < bands; b++) f[b] = VIPS_MAX(A[b], B[b]); break; case VIPS_BLEND_MODE_COLOUR_DODGE: for (int b = 0; b < bands; b++) if (A[b] < 1) f[b] = VIPS_MIN(1, B[b] / (1 - A[b])); else f[b] = 1; break; case VIPS_BLEND_MODE_COLOUR_BURN: for (int b = 0; b < bands; b++) if (A[b] > 0) f[b] = 1 - VIPS_MIN(1, (1 - B[b]) / A[b]); else f[b] = 0; break; case VIPS_BLEND_MODE_HARD_LIGHT: for (int b = 0; b < bands; b++) if (A[b] <= 0.5) f[b] = 2 * A[b] * B[b]; else f[b] = 1 - 2 * (1 - A[b]) * (1 - B[b]); break; case VIPS_BLEND_MODE_SOFT_LIGHT: for (int b = 0; b < bands; b++) { double g; if (B[b] <= 0.25) g = ((16 * B[b] - 12) * B[b] + 4) * B[b]; else g = sqrt(B[b]); if (A[b] <= 0.5) f[b] = B[b] - (1 - 2 * A[b]) * B[b] * (1 - B[b]); else f[b] = B[b] + (2 * A[b] - 1) * (g - B[b]); } break; case VIPS_BLEND_MODE_DIFFERENCE: for (int b = 0; b < bands; b++) f[b] = fabs(B[b] - A[b]); break; case VIPS_BLEND_MODE_EXCLUSION: for (int b = 0; b < bands; b++) f[b] = A[b] + B[b] - 2 * A[b] * B[b]; break; default: g_assert_not_reached(); for (int b = 0; b < bands; b++) B[b] = 0; } t1 = 1 - aB; t2 = 1 - aA; t3 = aA * aB; for (int b = 0; b < bands; b++) B[b] = t1 * A[b] + t2 * B[b] + t3 * f[b]; break; } B[bands] = aR; } /* We have a vector path with gcc's vector attr. */ #ifdef HAVE_VECTOR_ARITH /* Special path for RGBA with non-double output. This is overwhelmingly the * most common case, and vectorises easily. * * B is the float pixel we are accumulating, A is the new pixel coming * in from memory. */ template static void vips_composite_base_blend3(VipsCompositeSequence *seq, VipsBlendMode mode, v4f &B, T *restrict p) { VipsCompositeBase *composite = seq->composite; v4f A; float aA; float aB; float aR; float t1; float t2; float t3; v4f f; v4f g; /* Load and scale the pixel to 0 - 1. */ A[0] = p[0]; A[1] = p[1]; A[2] = p[2]; A[3] = p[3]; A /= seq->max_band_vec; aA = A[3]; aB = B[3]; /* We may need to premultiply A. */ if (!composite->premultiplied) A *= aA; /* See https://www.cairographics.org/operators for a nice summary of * the operators and their meaning. * * Some operators need the unpremultiplied values (eg. dest-in), so * we have to do an extra unpremultiply/premultiply. */ switch (mode) { case VIPS_BLEND_MODE_CLEAR: aR = 0; B[0] = 0; B[1] = 0; B[2] = 0; break; case VIPS_BLEND_MODE_SOURCE: aR = aA; B = A; break; case VIPS_BLEND_MODE_OVER: aR = aA + aB * (1 - aA); t1 = 1 - aA; B = A + t1 * B; break; case VIPS_BLEND_MODE_IN: aR = aA * aB; // if aA == 0, then aR == 0 and so B will already be 0 if (aA != 0) B = A * aR / aA; break; case VIPS_BLEND_MODE_OUT: aR = aA * (1 - aB); // if aA == 0, then aR == 0 and so B will already be 0 if (aA != 0) B = A * aR / aA; break; case VIPS_BLEND_MODE_ATOP: aR = aB; t1 = 1 - aA; B = A + t1 * B; break; case VIPS_BLEND_MODE_DEST: aR = aB; // B = B break; case VIPS_BLEND_MODE_DEST_OVER: aR = aB + aA * (1 - aB); t1 = 1 - aB; B = B + t1 * A; break; case VIPS_BLEND_MODE_DEST_IN: aR = aA * aB; // if aB is 0, then B is already 0 if (aB != 0) B *= aR / aB; break; case VIPS_BLEND_MODE_DEST_OUT: aR = (1 - aA) * aB; // B = B // if aB is 0, then B is already 0 if (aB != 0) B *= aR / aB; break; case VIPS_BLEND_MODE_DEST_ATOP: aR = aA; t1 = 1 - aA; B = t1 * A + B; break; case VIPS_BLEND_MODE_XOR: aR = aA + aB - 2 * aA * aB; t1 = 1 - aB; t2 = 1 - aA; B = t1 * A + t2 * B; break; case VIPS_BLEND_MODE_ADD: aR = VIPS_MIN(1, aA + aB); B = A + B; break; case VIPS_BLEND_MODE_SATURATE: aR = VIPS_MIN(1, aA + aB); t1 = VIPS_MIN(aA, 1 - aB); B = t1 * A + B; break; default: /* The PDF modes are a bit different. */ aR = aA + aB * (1 - aA); switch (mode) { case VIPS_BLEND_MODE_MULTIPLY: f = A * B; break; case VIPS_BLEND_MODE_SCREEN: f = A + B - A * B; break; case VIPS_BLEND_MODE_OVERLAY: f = B <= 0.5f ? 2 * A * B : 1 - 2 * (1 - A) * (1 - B); break; case VIPS_BLEND_MODE_DARKEN: f = VIPS_MIN(A, B); break; case VIPS_BLEND_MODE_LIGHTEN: f = VIPS_MAX(A, B); break; case VIPS_BLEND_MODE_COLOUR_DODGE: f = A < 1 ? VIPS_MIN(1, B / (1 - A)) : 1; break; case VIPS_BLEND_MODE_COLOUR_BURN: f = A > 0 ? 1 - VIPS_MIN(1, (1 - B) / A) : 0; break; case VIPS_BLEND_MODE_HARD_LIGHT: f = A <= 0.5f ? 2 * A * B : 1 - 2 * (1 - A) * (1 - B); break; case VIPS_BLEND_MODE_SOFT_LIGHT: /* You can't sqrt a vector, so we must loop. */ for (int b = 0; b < 3; b++) { double g; if (B[b] <= 0.25) g = ((16 * B[b] - 12) * B[b] + 4) * B[b]; else g = sqrt(B[b]); if (A[b] <= 0.5) f[b] = B[b] - (1 - 2 * A[b]) * B[b] * (1 - B[b]); else f[b] = B[b] + (2 * A[b] - 1) * (g - B[b]); } break; case VIPS_BLEND_MODE_DIFFERENCE: g = B - A; f = g > 0 ? g : -1 * g; break; case VIPS_BLEND_MODE_EXCLUSION: f = A + B - 2 * A * B; break; default: g_assert_not_reached(); /* Stop compiler warnings. */ for (int b = 0; b < 3; b++) B[b] = 0; f = A; } t1 = 1 - aB; t2 = 1 - aA; t3 = aA * aB; B = t1 * A + t2 * B + t3 * f; break; } B[3] = aR; } #endif /*HAVE_VECTOR_ARITH*/ /* min_T and max_T are the numeric range for this type. 0, 0 means no limit, * for example float. */ template static void vips_combine_pixels(VipsCompositeSequence *seq, VipsPel *q) { VipsCompositeBase *composite = seq->composite; VipsBlendMode *mode = (VipsBlendMode *) composite->mode->area.data; int n_mode = composite->mode->area.n; int n = seq->n; int bands = composite->bands; T *restrict tq = (T *restrict) q; T **restrict tp = (T * *restrict) seq->p; double B[MAX_BANDS + 1]; double aB; /* Load and scale the base pixel to 0 - 1. */ for (int b = 0; b <= bands; b++) B[b] = tp[0][b] / composite->max_band[b]; aB = B[bands]; if (!composite->premultiplied) for (int b = 0; b < bands; b++) B[b] *= aB; for (int i = 1; i < n; i++) { int j = seq->enabled[i]; VipsBlendMode m = n_mode == 1 ? mode[0] : mode[j - 1]; vips_composite_base_blend(composite, m, B, tp[i]); } /* Unpremultiply, if necessary. */ if (!composite->premultiplied) { double aR = B[bands]; if (aR == 0) for (int b = 0; b < bands; b++) B[b] = 0; else for (int b = 0; b < bands; b++) B[b] = B[b] / aR; } /* Write back as a full range pixel, clipping to range. */ for (int b = 0; b <= bands; b++) { double v; v = B[b] * composite->max_band[b]; if (min_T != 0 || max_T != 0) { v = VIPS_CLIP(min_T, v, max_T); } tq[b] = v; } } #ifdef HAVE_VECTOR_ARITH /* Three band (four with alpha) vector case. Non-double output. min_T and * max_T are the numeric range for this type. 0, 0 means no limit, * for example float. */ template static void vips_combine_pixels3(VipsCompositeSequence *seq, VipsPel *q) { VipsCompositeBase *composite = seq->composite; VipsBlendMode *mode = (VipsBlendMode *) composite->mode->area.data; int n_mode = composite->mode->area.n; int n = seq->n; T *restrict tq = (T *restrict) q; T **restrict tp = (T * *restrict) seq->p; v4f B; float aB; B[0] = tp[0][0]; B[1] = tp[0][1]; B[2] = tp[0][2]; B[3] = tp[0][3]; /* Scale the base pixel to 0 - 1. */ B /= seq->max_band_vec; aB = B[3]; if (!composite->premultiplied) { B *= aB; B[3] = aB; } for (int i = 1; i < n; i++) { int j = seq->enabled[i]; VipsBlendMode m = n_mode == 1 ? mode[0] : mode[j - 1]; vips_composite_base_blend3(seq, m, B, tp[i]); } /* Unpremultiply, if necessary. */ if (!composite->premultiplied) { float aR = B[3]; if (aR == 0) for (int b = 0; b < 3; b++) B[b] = 0; else { B /= aR; B[3] = aR; } } /* Write back as a full range pixel, clipping to range. */ B *= seq->max_band_vec; if (min_T != 0 || max_T != 0) { float low = min_T; float high = max_T; B = VIPS_CLIP(low, B, high); } tq[0] = B[0]; tq[1] = B[1]; tq[2] = B[2]; tq[3] = B[3]; } #endif /*HAVE_VECTOR_ARITH*/ static int vips_composite_base_gen(VipsRegion *output_region, void *vseq, void *a, void *b, gboolean *stop) { VipsCompositeSequence *seq = (VipsCompositeSequence *) vseq; VipsCompositeBase *composite = (VipsCompositeBase *) b; VipsRect *r = &output_region->valid; int ps = VIPS_IMAGE_SIZEOF_PEL(output_region->im); VIPS_DEBUG_MSG("vips_composite_base_gen: at %d x %d, size %d x %d\n", r->left, r->top, r->width, r->height); /* Find the subset of our input images which intersect this region. */ vips_composite_base_select(seq, r); VIPS_DEBUG_MSG(" selected %d images\n", seq->n); /* Is there just one? We can prepare directly to output and return. */ if (seq->n == 1) { /* This can only be the background image, since it's the only * image which exactly fills the whole output. */ g_assert(seq->enabled[0] == 0); if (vips_region_prepare(seq->input_regions[0], r)) return -1; if (vips_region_region(output_region, seq->input_regions[0], r, r->left, r->top)) return -1; return 0; } /* Prepare the appropriate parts into our set of composite * regions. */ for (int i = 0; i < seq->n; i++) { int j = seq->enabled[i]; VipsRect hit; VipsRect request; /* Set the composite region up to be a bit of memory at the * right position. */ if (vips_region_buffer(seq->composite_regions[j], r)) return -1; /* Clip against this subimage position and size. */ hit = *r; vips_rect_intersectrect(&hit, &composite->subimages[j], &hit); /* Translate request to subimage coordinates. */ request = hit; request.left -= composite->subimages[j].left; request.top -= composite->subimages[j].top; /* If the request is smaller than the target region, there * will be some gaps. We must make sure these are zero. */ if (request.width < r->width || request.height < r->height) vips_region_black(seq->composite_regions[j]); /* And render the right part of the input image to the * composite region. * * If we are not in skippable mode, we can be completely * outside the subimage area. */ if (!vips_rect_isempty(&request)) { VIPS_DEBUG_MSG(" fetching pixels for input %d\n", j); if (vips_region_prepare_to(seq->input_regions[j], seq->composite_regions[j], &request, hit.left, hit.top)) return -1; } } VIPS_GATE_START("vips_composite_base_gen: work"); for (int y = 0; y < r->height; y++) { VipsPel *q; for (int i = 0; i < seq->n; i++) { int j = seq->enabled[i]; seq->p[i] = VIPS_REGION_ADDR(seq->composite_regions[j], r->left, r->top + y); } q = VIPS_REGION_ADDR(output_region, r->left, r->top + y); for (int x = 0; x < r->width; x++) { switch (seq->input_regions[0]->im->BandFmt) { case VIPS_FORMAT_UCHAR: #ifdef HAVE_VECTOR_ARITH if (composite->bands == 3) vips_combine_pixels3(seq, q); else #endif vips_combine_pixels(seq, q); break; case VIPS_FORMAT_CHAR: vips_combine_pixels(seq, q); break; case VIPS_FORMAT_USHORT: #ifdef HAVE_VECTOR_ARITH if (composite->bands == 3) vips_combine_pixels3(seq, q); else #endif vips_combine_pixels(seq, q); break; case VIPS_FORMAT_SHORT: vips_combine_pixels(seq, q); break; case VIPS_FORMAT_UINT: vips_combine_pixels(seq, q); break; case VIPS_FORMAT_INT: vips_combine_pixels(seq, q); break; case VIPS_FORMAT_FLOAT: #ifdef HAVE_VECTOR_ARITH if (composite->bands == 3) vips_combine_pixels3(seq, q); else #endif vips_combine_pixels(seq, q); break; case VIPS_FORMAT_DOUBLE: vips_combine_pixels(seq, q); break; default: g_assert_not_reached(); return -1; } for (int i = 0; i < seq->n; i++) seq->p[i] += ps; q += ps; } } VIPS_GATE_STOP("vips_composite_base_gen: work"); return 0; } /* Is a mode "skippable"? * * Skippable modes are ones where a black (0, 0, 0, 0) layer placed over the * base image and composited has no effect. * * If all the modes in our stack are skippable, we can avoid compositing the * whole stack for every request. */ static gboolean vips_composite_mode_skippable(VipsBlendMode mode) { switch (mode) { case VIPS_BLEND_MODE_CLEAR: case VIPS_BLEND_MODE_SOURCE: case VIPS_BLEND_MODE_IN: case VIPS_BLEND_MODE_OUT: case VIPS_BLEND_MODE_DEST_IN: case VIPS_BLEND_MODE_DEST_ATOP: return FALSE; default: return TRUE; } } static int vips_composite_base_build(VipsObject *object) { VipsObjectClass *klass = VIPS_OBJECT_GET_CLASS(object); VipsConversion *conversion = VIPS_CONVERSION(object); VipsCompositeBase *composite = (VipsCompositeBase *) object; int n; VipsBlendMode *mode; VipsImage **in; VipsImage **decode; VipsImage **compositing; VipsImage **format; if (VIPS_OBJECT_CLASS(vips_composite_base_parent_class)->build(object)) return -1; n = composite->in->area.n; if (n <= 0) { vips_error(klass->nickname, "%s", _("no input images")); return -1; } if (composite->mode->area.n != n - 1 && composite->mode->area.n != 1) { vips_error(klass->nickname, _("must be 1 or %d blend modes"), n - 1); return -1; } mode = (VipsBlendMode *) composite->mode->area.data; composite->skippable = TRUE; for (int i = 0; i < composite->mode->area.n; i++) { if (mode[i] < 0 || mode[i] >= VIPS_BLEND_MODE_LAST) { vips_error(klass->nickname, _("blend mode index %d (%d) invalid"), i, mode[i]); return -1; } if (!vips_composite_mode_skippable(mode[i])) composite->skippable = FALSE; } in = (VipsImage **) composite->in->area.data; /* Make a set of rects for the positions of the input images. Image 0 * (the background) is always at (0, 0). */ if (!(composite->subimages = VIPS_ARRAY(NULL, n, VipsRect))) return -1; for (int i = 0; i < n; i++) { composite->subimages[i].left = 0; composite->subimages[i].top = 0; composite->subimages[i].width = in[i]->Xsize; composite->subimages[i].height = in[i]->Ysize; } /* Position all images, if x/y is set. Image 0 * (the background) is always at (0, 0). */ if (composite->x_offset && composite->y_offset) for (int i = 1; i < n; i++) { composite->subimages[i].left = composite->x_offset[i - 1]; composite->subimages[i].top = composite->y_offset[i - 1]; } decode = (VipsImage **) vips_object_local_array(object, n); for (int i = 0; i < n; i++) if (vips_image_decode(in[i], &decode[i])) return -1; in = decode; /* Add a solid alpha to any images missing one. */ for (int i = n - 1; i >= 0; i--) if (!vips_image_hasalpha(in[i])) { VipsImage *x; if (vips_addalpha(in[i], &x, nullptr)) return -1; g_object_unref(in[i]); in[i] = x; } /* Transform to compositing space. It defaults to sRGB or B_W, usually * 8 bit, but 16 bit if any inputs are 16 bit. */ if (!vips_object_argument_isset(object, "compositing_space")) { gboolean all_grey; gboolean any_16; all_grey = TRUE; for (int i = 0; i < n; i++) if (in[i]->Bands > 2) { all_grey = FALSE; break; } any_16 = FALSE; for (int i = 0; i < n; i++) if (in[i]->Type == VIPS_INTERPRETATION_GREY16 || in[i]->Type == VIPS_INTERPRETATION_RGB16) { any_16 = TRUE; break; } composite->compositing_space = any_16 ? (all_grey ? VIPS_INTERPRETATION_GREY16 : VIPS_INTERPRETATION_RGB16) : (all_grey ? VIPS_INTERPRETATION_B_W : VIPS_INTERPRETATION_sRGB); } compositing = (VipsImage **) vips_object_local_array(object, n); for (int i = 0; i < n; i++) if (vips_colourspace(in[i], &compositing[i], composite->compositing_space, nullptr)) return -1; in = compositing; /* Check that they all now match in bands. This can fail for some * input combinations. */ for (int i = 1; i < n; i++) if (in[i]->Bands != in[0]->Bands) { vips_error(klass->nickname, "%s", _("images do not have same " "numbers of bands")); return -1; } if (in[0]->Bands > MAX_BANDS) { vips_error(klass->nickname, "%s", _("too many input bands")); return -1; } composite->bands = in[0]->Bands - 1; /* Set the max for each band now we know bands and compositing space. */ if (vips_composite_base_max_band(composite, composite->max_band)) { vips_error(klass->nickname, "%s", _("unsupported compositing space")); return -1; } /* Transform the input images to match in format. We may have * mixed float and double, for example. */ format = (VipsImage **) vips_object_local_array(object, n); if (vips__formatalike_vec(in, format, n)) return -1; in = format; /* We want locality, so that we only prepare a few subimages each * time. */ if (vips_image_pipeline_array(conversion->out, VIPS_DEMAND_STYLE_SMALLTILE, in)) return -1; /* The output image is always the size of the base image. */ conversion->out->Xsize = in[0]->Xsize; conversion->out->Ysize = in[0]->Ysize; if (vips_image_generate(conversion->out, vips_composite_start, vips_composite_base_gen, vips_composite_stop, in, composite)) return -1; return 0; } static void vips_composite_base_class_init(VipsCompositeBaseClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(klass); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(klass); VIPS_DEBUG_MSG("vips_composite_base_class_init\n"); gobject_class->dispose = vips_composite_base_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "composite_base"; vobject_class->description = _("blend images together"); vobject_class->build = vips_composite_base_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_ENUM(klass, "compositing_space", 10, _("Compositing space"), _("Composite images in this colour space"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCompositeBase, compositing_space), VIPS_TYPE_INTERPRETATION, VIPS_INTERPRETATION_sRGB); VIPS_ARG_BOOL(klass, "premultiplied", 11, _("Premultiplied"), _("Images have premultiplied alpha"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCompositeBase, premultiplied), FALSE); } static void vips_composite_base_init(VipsCompositeBase *composite) { composite->compositing_space = VIPS_INTERPRETATION_sRGB; } typedef struct _VipsComposite { VipsCompositeBase parent_instance; /* For N input images, N - 1 x coordinates. */ VipsArrayInt *x; /* For N input images, N - 1 y coordinates. */ VipsArrayInt *y; } VipsComposite; typedef VipsCompositeBaseClass VipsCompositeClass; /* We need C linkage for this. */ extern "C" { G_DEFINE_TYPE(VipsComposite, vips_composite, vips_composite_base_get_type()); } static int vips_composite_build(VipsObject *object) { VipsObjectClass *klass = VIPS_OBJECT_GET_CLASS(object); VipsCompositeBase *base = (VipsCompositeBase *) object; VipsComposite *composite = (VipsComposite *) object; int n; n = 0; if (vips_object_argument_isset(object, "in")) n = base->in->area.n; if (vips_object_argument_isset(object, "x")) { if (composite->x->area.n != n - 1) { vips_error(klass->nickname, _("must be %d x coordinates"), n - 1); return -1; } base->x_offset = (int *) composite->x->area.data; } if (vips_object_argument_isset(object, "y")) { if (composite->y->area.n != n - 1) { vips_error(klass->nickname, _("must be %d y coordinates"), n - 1); return -1; } base->y_offset = (int *) composite->y->area.data; } if (VIPS_OBJECT_CLASS(vips_composite_parent_class)->build(object)) return -1; return 0; } static void vips_composite_class_init(VipsCompositeClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(klass); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(klass); VIPS_DEBUG_MSG("vips_composite_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "composite"; vobject_class->description = _("blend an array of images with an array of blend modes"); vobject_class->build = vips_composite_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_BOXED(klass, "in", 0, _("Inputs"), _("Array of input images"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsCompositeBase, in), VIPS_TYPE_ARRAY_IMAGE); VIPS_ARG_BOXED(klass, "mode", 3, _("Blend modes"), _("Array of VipsBlendMode to join with"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsCompositeBase, mode), VIPS_TYPE_ARRAY_INT); VIPS_ARG_BOXED(klass, "x", 4, _("x coordinates"), _("Array of x coordinates to join at"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsComposite, x), VIPS_TYPE_ARRAY_INT); VIPS_ARG_BOXED(klass, "y", 5, _("y coordinates"), _("Array of y coordinates to join at"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsComposite, y), VIPS_TYPE_ARRAY_INT); } static void vips_composite_init(VipsComposite *composite) { } static int vips_compositev(VipsImage **in, VipsImage **out, int n, int *mode, va_list ap) { VipsArrayImage *image_array; VipsArrayInt *mode_array; int result; image_array = vips_array_image_new(in, n); mode_array = vips_array_int_new(mode, n - 1); result = vips_call_split("composite", ap, image_array, out, mode_array); vips_area_unref(VIPS_AREA(image_array)); vips_area_unref(VIPS_AREA(mode_array)); return result; } /* See conversion.c for the doc comment. */ int vips_composite(VipsImage **in, VipsImage **out, int n, int *mode, ...) { va_list ap; int result; va_start(ap, mode); result = vips_compositev(in, out, n, mode, ap); va_end(ap); return result; } typedef struct _VipsComposite2 { VipsCompositeBase parent_instance; VipsImage *base; VipsImage *overlay; VipsBlendMode mode; int x; int y; } VipsComposite2; typedef VipsCompositeBaseClass VipsComposite2Class; /* We need C linkage for this. */ extern "C" { G_DEFINE_TYPE(VipsComposite2, vips_composite2, vips_composite_base_get_type()); } static int vips_composite2_build(VipsObject *object) { VipsCompositeBase *base = (VipsCompositeBase *) object; VipsComposite2 *composite2 = (VipsComposite2 *) object; if (composite2->overlay && composite2->base) { VipsImage *in[3]; int mode[1]; in[0] = composite2->base; in[1] = composite2->overlay; in[2] = NULL; base->in = vips_array_image_new(in, 2); mode[0] = (int) composite2->mode; base->mode = vips_array_int_new(mode, 1); } base->x_offset = &composite2->x; base->y_offset = &composite2->y; if (VIPS_OBJECT_CLASS(vips_composite2_parent_class)->build(object)) return -1; return 0; } static void vips_composite2_class_init(VipsCompositeClass *klass) { GObjectClass *gobject_class = G_OBJECT_CLASS(klass); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(klass); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(klass); VIPS_DEBUG_MSG("vips_composite_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "composite2"; vobject_class->description = _("blend a pair of images with a blend mode"); vobject_class->build = vips_composite2_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(klass, "base", 0, _("Base"), _("Base image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsComposite2, base)); VIPS_ARG_IMAGE(klass, "overlay", 1, _("Overlay"), _("Overlay image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsComposite2, overlay)); VIPS_ARG_ENUM(klass, "mode", 3, _("Blend mode"), _("VipsBlendMode to join with"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsComposite2, mode), VIPS_TYPE_BLEND_MODE, VIPS_BLEND_MODE_OVER); VIPS_ARG_INT(klass, "x", 4, _("x"), _("x position of overlay"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsComposite2, x), -VIPS_MAX_COORD, VIPS_MAX_COORD, 0); VIPS_ARG_INT(klass, "y", 5, _("y"), _("y position of overlay"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsComposite2, y), -VIPS_MAX_COORD, VIPS_MAX_COORD, 0); } static void vips_composite2_init(VipsComposite2 *composite2) { } /* See conversion.c for the doc comment. */ int vips_composite2(VipsImage *base, VipsImage *overlay, VipsImage **out, VipsBlendMode mode, ...) { va_list ap; int result; /* Works for gcc and clang. */ #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wvarargs" /* Triggers a clang compiler warning because mode might not be an int. * I think the warning is harmless for all platforms we care about. */ va_start(ap, mode); g_assert(sizeof(mode) == sizeof(int)); #pragma GCC diagnostic pop result = vips_call_split("composite2", ap, base, overlay, out, mode); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/conversion.c000066400000000000000000000354201454007373500214600ustar00rootroot00000000000000/* base class for all conversion operations * * properties: * - single output image */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pconversion.h" /** * SECTION: conversion * @short_description: convert images in some way: change band format, change header, insert, extract, join * @see_also: resample * @stability: Stable * @include: vips/vips.h * * These operations convert an image in some way. They can be split into a two * main groups. * * The first set of operations change an image's format in some way. You * can change the band format (for example, cast to 32-bit unsigned * int), form complex images from real images, convert images to * matrices and back, change header fields, and a few others. * * The second group move pixels about in some way. You can flip, rotate, * extract, insert and join pairs of images in various ways. * */ /** * vips_composite: * @in: (array length=n) (transfer none): array of input images * @out: (out): output image * @n: number of input images * @mode: array of (@n - 1) #VipsBlendMode * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @compositing_space: #VipsInterpretation to composite in * * @premultiplied: %gboolean, images are already premultiplied * * @x: #VipsArrayInt, position of subimages * * @y: #VipsArrayInt, position of subimages * * Composite an array of images together. * * Images are placed in a stack, with @in[0] at the bottom and @in[@n - 1] at * the top. Pixels are blended together working from the bottom upwards, with * the blend mode at each step being set by the corresponding #VipsBlendMode * in @mode. * * Images are transformed to a compositing space before processing. This is * #VIPS_INTERPRETATION_sRGB, #VIPS_INTERPRETATION_B_W, * #VIPS_INTERPRETATION_RGB16, or #VIPS_INTERPRETATION_GREY16 * by default, depending on * how many bands and bits the input images have. You can select any other * space, such as #VIPS_INTERPRETATION_LAB or #VIPS_INTERPRETATION_scRGB. * * The output image is in the compositing space. It will always be * #VIPS_FORMAT_FLOAT unless one of the inputs is #VIPS_FORMAT_DOUBLE, in * which case the output will be double as well. * * Complex images are not supported. * * The output image will always have an alpha band. A solid alpha is * added to any input missing an alpha. * * The images do not need to match in size or format. They will be expanded to * the smallest common size and format in the usual way. Images are positioned * using the @x and @y parameters, if set. * * Image are normally treated as unpremultiplied, so this operation can be used * directly on PNG images. If your images have been through vips_premultiply(), * set @premultiplied. * * See also: vips_insert(). * * Returns: 0 on success, -1 on error */ /** * vips_composite2: (method) * @base: first input image * @overlay: second input image * @out: (out): output image * @mode: composite with this blend mode * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @compositing_space: #VipsInterpretation to composite in * * @premultiplied: %gboolean, images are already premultiplied * * @x: %gint, position of overlay * * @y: %gint, position of overlay * * Composite @overlay on top of @base with @mode. See vips_composite(). * * Returns: 0 on success, -1 on error */ /** * VipsBlendMode: * @VIPS_BLEND_MODE_CLEAR: where the second object is drawn, the first is removed * @VIPS_BLEND_MODE_SOURCE: the second object is drawn as if nothing were below * @VIPS_BLEND_MODE_OVER: the image shows what you would expect if you held two semi-transparent slides on top of each other * @VIPS_BLEND_MODE_IN: the first object is removed completely, the second is only drawn where the first was * @VIPS_BLEND_MODE_OUT: the second is drawn only where the first isn't * @VIPS_BLEND_MODE_ATOP: this leaves the first object mostly intact, but mixes both objects in the overlapping area * @VIPS_BLEND_MODE_DEST: leaves the first object untouched, the second is discarded completely * @VIPS_BLEND_MODE_DEST_OVER: like OVER, but swaps the arguments * @VIPS_BLEND_MODE_DEST_IN: like IN, but swaps the arguments * @VIPS_BLEND_MODE_DEST_OUT: like OUT, but swaps the arguments * @VIPS_BLEND_MODE_DEST_ATOP: like ATOP, but swaps the arguments * @VIPS_BLEND_MODE_XOR: something like a difference operator * @VIPS_BLEND_MODE_ADD: a bit like adding the two images * @VIPS_BLEND_MODE_SATURATE: a bit like the darker of the two * @VIPS_BLEND_MODE_MULTIPLY: at least as dark as the darker of the two inputs * @VIPS_BLEND_MODE_SCREEN: at least as light as the lighter of the inputs * @VIPS_BLEND_MODE_OVERLAY: multiplies or screens colors, depending on the lightness * @VIPS_BLEND_MODE_DARKEN: the darker of each component * @VIPS_BLEND_MODE_LIGHTEN: the lighter of each component * @VIPS_BLEND_MODE_COLOUR_DODGE: brighten first by a factor second * @VIPS_BLEND_MODE_COLOUR_BURN: darken first by a factor of second * @VIPS_BLEND_MODE_HARD_LIGHT: multiply or screen, depending on lightness * @VIPS_BLEND_MODE_SOFT_LIGHT: darken or lighten, depending on lightness * @VIPS_BLEND_MODE_DIFFERENCE: difference of the two * @VIPS_BLEND_MODE_EXCLUSION: somewhat like DIFFERENCE, but lower-contrast * * The various Porter-Duff and PDF blend modes. See vips_composite(), * for example. * * The Cairo docs have a nice explanation of all the blend modes: * * https://www.cairographics.org/operators * * The non-separable modes are not implemented. */ /** * VipsAlign: * @VIPS_ALIGN_LOW: align low coordinate edge * @VIPS_ALIGN_CENTRE: align centre * @VIPS_ALIGN_HIGH: align high coordinate edge * * See vips_join() and so on. * * Operations like vips_join() need to be told whether to align images on the * low or high coordinate edge, or centre. * * See also: vips_join(). */ /** * VipsAngle: * @VIPS_ANGLE_D0: no rotate * @VIPS_ANGLE_D90: 90 degrees clockwise * @VIPS_ANGLE_D180: 180 degree rotate * @VIPS_ANGLE_D270: 90 degrees anti-clockwise * * See vips_rot() and so on. * * Fixed rotate angles. * * See also: vips_rot(). */ /** * VipsInteresting: * @VIPS_INTERESTING_NONE: do nothing * @VIPS_INTERESTING_CENTRE: just take the centre * @VIPS_INTERESTING_ENTROPY: use an entropy measure * @VIPS_INTERESTING_ATTENTION: look for features likely to draw human attention * @VIPS_INTERESTING_LOW: position the crop towards the low coordinate * @VIPS_INTERESTING_HIGH: position the crop towards the high coordinate * @VIPS_INTERESTING_ALL: everything is interesting * * Pick the algorithm vips uses to decide image "interestingness". This is used * by vips_smartcrop(), for example, to decide what parts of the image to * keep. * * #VIPS_INTERESTING_NONE and #VIPS_INTERESTING_LOW mean the same -- the * crop is positioned at the top or left. #VIPS_INTERESTING_HIGH positions at * the bottom or right. * * See also: vips_smartcrop(). */ /** * VipsCompassDirection: * @VIPS_COMPASS_DIRECTION_CENTRE: centre * @VIPS_COMPASS_DIRECTION_NORTH: north * @VIPS_COMPASS_DIRECTION_EAST: east * @VIPS_COMPASS_DIRECTION_SOUTH: south * @VIPS_COMPASS_DIRECTION_WEST: west * @VIPS_COMPASS_DIRECTION_NORTH_EAST: north-east * @VIPS_COMPASS_DIRECTION_SOUTH_EAST: south-east * @VIPS_COMPASS_DIRECTION_SOUTH_WEST: south-west * @VIPS_COMPASS_DIRECTION_NORTH_WEST: north-west * * A direction on a compass. Used for vips_gravity(), for example. */ /** * VipsAngle45: * @VIPS_ANGLE45_D0: no rotate * @VIPS_ANGLE45_D45: 45 degrees clockwise * @VIPS_ANGLE45_D90: 90 degrees clockwise * @VIPS_ANGLE45_D135: 135 degrees clockwise * @VIPS_ANGLE45_D180: 180 degrees * @VIPS_ANGLE45_D225: 135 degrees anti-clockwise * @VIPS_ANGLE45_D270: 90 degrees anti-clockwise * @VIPS_ANGLE45_D315: 45 degrees anti-clockwise * * See vips_rot45() and so on. * * Fixed rotate angles. * * See also: vips_rot45(). */ /** * VipsExtend: * @VIPS_EXTEND_BLACK: extend with black (all 0) pixels * @VIPS_EXTEND_COPY: copy the image edges * @VIPS_EXTEND_REPEAT: repeat the whole image * @VIPS_EXTEND_MIRROR: mirror the whole image * @VIPS_EXTEND_WHITE: extend with white (all bits set) pixels * @VIPS_EXTEND_BACKGROUND: extend with colour from the @background property * * See vips_embed(), vips_conv(), vips_affine() and so on. * * When the edges of an image are extended, you can specify * how you want the extension done. * * #VIPS_EXTEND_BLACK --- new pixels are black, ie. all bits are zero. * * #VIPS_EXTEND_COPY --- each new pixel takes the value of the nearest edge * pixel * * #VIPS_EXTEND_REPEAT --- the image is tiled to fill the new area * * #VIPS_EXTEND_MIRROR --- the image is reflected and tiled to reduce hash * edges * * #VIPS_EXTEND_WHITE --- new pixels are white, ie. all bits are set * * #VIPS_EXTEND_BACKGROUND --- colour set from the @background property * * We have to specify the exact value of each enum member since we have to * keep these frozen for back compat with vips7. * * See also: vips_embed(). */ /** * VipsDirection: * @VIPS_DIRECTION_HORIZONTAL: left-right * @VIPS_DIRECTION_VERTICAL: top-bottom * * See vips_flip(), vips_join() and so on. * * Operations like vips_flip() need to be told whether to flip left-right or * top-bottom. * * See also: vips_flip(), vips_join(). */ G_DEFINE_ABSTRACT_TYPE(VipsConversion, vips_conversion, VIPS_TYPE_OPERATION); static int vips_conversion_build(VipsObject *object) { VipsConversion *conversion = VIPS_CONVERSION(object); #ifdef DEBUG printf("vips_conversion_build: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ g_object_set(conversion, "out", vips_image_new(), NULL); if (VIPS_OBJECT_CLASS(vips_conversion_parent_class)->build(object)) return -1; return 0; } static void vips_conversion_class_init(VipsConversionClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "conversion"; vobject_class->description = _("conversion operations"); vobject_class->build = vips_conversion_build; VIPS_ARG_IMAGE(class, "out", 2, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsConversion, out)); } static void vips_conversion_init(VipsConversion *conversion) { } /* Called from iofuncs to init all operations in this dir. Use a plugin system * instead? */ void vips_conversion_operation_init(void) { extern GType vips_copy_get_type(void); extern GType vips_tile_cache_get_type(void); extern GType vips_line_cache_get_type(void); extern GType vips_sequential_get_type(void); extern GType vips_cache_get_type(void); extern GType vips_embed_get_type(void); extern GType vips_gravity_get_type(void); extern GType vips_flip_get_type(void); extern GType vips_insert_get_type(void); extern GType vips_join_get_type(void); extern GType vips_arrayjoin_get_type(void); extern GType vips_extract_area_get_type(void); extern GType vips_crop_get_type(void); extern GType vips_smartcrop_get_type(void); extern GType vips_extract_band_get_type(void); extern GType vips_replicate_get_type(void); extern GType vips_cast_get_type(void); extern GType vips_bandjoin_get_type(void); extern GType vips_bandjoin_const_get_type(void); extern GType vips_bandrank_get_type(void); extern GType vips_black_get_type(void); extern GType vips_rot_get_type(void); extern GType vips_rot45_get_type(void); extern GType vips_autorot_get_type(void); extern GType vips_ifthenelse_get_type(void); extern GType vips_switch_get_type(void); extern GType vips_recomb_get_type(void); extern GType vips_bandmean_get_type(void); extern GType vips_bandfold_get_type(void); extern GType vips_bandunfold_get_type(void); extern GType vips_flatten_get_type(void); extern GType vips_premultiply_get_type(void); extern GType vips_unpremultiply_get_type(void); extern GType vips_bandbool_get_type(void); extern GType vips_gaussnoise_get_type(void); extern GType vips_grid_get_type(void); extern GType vips_transpose3d_get_type(void); extern GType vips_scale_get_type(void); extern GType vips_wrap_get_type(void); extern GType vips_zoom_get_type(void); extern GType vips_subsample_get_type(void); extern GType vips_msb_get_type(void); extern GType vips_byteswap_get_type(void); extern GType vips_xyz_get_type(void); extern GType vips_falsecolour_get_type(void); extern GType vips_gamma_get_type(void); extern GType vips_composite_get_type(void); extern GType vips_composite2_get_type(void); vips_copy_get_type(); vips_tile_cache_get_type(); vips_line_cache_get_type(); vips_sequential_get_type(); vips_cache_get_type(); vips_embed_get_type(); vips_gravity_get_type(); vips_flip_get_type(); vips_insert_get_type(); vips_join_get_type(); vips_arrayjoin_get_type(); vips_extract_area_get_type(); vips_crop_get_type(); vips_smartcrop_get_type(); vips_extract_band_get_type(); vips_replicate_get_type(); vips_cast_get_type(); vips_bandjoin_get_type(); vips_bandjoin_const_get_type(); vips_bandrank_get_type(); vips_black_get_type(); vips_rot_get_type(); vips_rot45_get_type(); vips_autorot_get_type(); vips_ifthenelse_get_type(); vips_switch_get_type(); vips_recomb_get_type(); vips_bandmean_get_type(); vips_bandfold_get_type(); vips_bandunfold_get_type(); vips_flatten_get_type(); vips_premultiply_get_type(); vips_unpremultiply_get_type(); vips_bandbool_get_type(); vips_gaussnoise_get_type(); vips_grid_get_type(); vips_transpose3d_get_type(); vips_scale_get_type(); vips_wrap_get_type(); vips_zoom_get_type(); vips_subsample_get_type(); vips_msb_get_type(); vips_byteswap_get_type(); vips_xyz_get_type(); vips_falsecolour_get_type(); vips_gamma_get_type(); vips_composite_get_type(); vips_composite2_get_type(); } libvips-8.15.1/libvips/conversion/copy.c000066400000000000000000000251671454007373500202540ustar00rootroot00000000000000/* Copy an image. * * Copyright: 1990, N. Dessipris, based on im_powtra() * Author: Nicos Dessipris * Written on: 02/05/1990 * Modified on: * 23/4/93 J.Cupitt * - adapted to work with partial images * 30/6/93 JC * - adapted for partial v2 * - and ANSI C * 7/7/93 JC * - now does IM_CODING_LABQ too * 22/2/95 JC * - new use of im_region_region() * 25/6/02 JC * - added im_copy_set() * - hint is IM_ANY * 5/9/02 JC * - added xoff/yoff to copy_set * 14/4/04 JC * - im_copy() now zeros Xoffset/Yoffset (since origin is the same as * input) * 26/5/04 JC * - added im_copy_swap() * 1/6/05 * - added im_copy_morph() * 13/6/05 * - oop, im_copy_set() was messed up * 29/9/06 * - added im_copy_set_meta(), handy wrapper for nip2 to set meta fields * 2/11/06 * - moved im__convert_saveable() here so it's always defined (was part * of JPEG write code) * 15/2/08 * - added im__saveable_t ... so we can have CMYK JPEG write * 24/3/09 * - added IM_CODING_RAD support * 28/1/10 * - gtk-doc * - cleanups * - removed im_copy_from() and associated stuff * - added im_copy_native() * 28/11/10 * - im_copy_set() now sets xoff / yoff again hmmm * 29/9/11 * - rewrite as a class * 1/12/11 * - use glib byteswap macros * 15/5/15 * - support bands -> width conversion * 4/6/15 * - support width -> bands conversion * 5/6/15 * - move byteswap out to vips_byteswap() * - move band folding out to vips_bandfold()/vips_unfold() */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "pconversion.h" typedef struct _VipsCopy { VipsConversion parent_instance; /* The input image. */ VipsImage *in; /* Fields we can optionally set on the way through. */ gboolean swap; VipsInterpretation interpretation; double xres; double yres; int xoffset; int yoffset; int bands; VipsBandFormat format; VipsCoding coding; int width; int height; } VipsCopy; typedef VipsConversionClass VipsCopyClass; G_DEFINE_TYPE(VipsCopy, vips_copy, VIPS_TYPE_CONVERSION); static int vips_copy_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsRect *r = &out_region->valid; if (vips_region_prepare(ir, r) || vips_region_region(out_region, ir, r, r->left, r->top)) return -1; return 0; } /* The props we copy, if set, from the operation to the image. */ static const char *vips_copy_names[] = { "interpretation", "xres", "yres", "xoffset", "yoffset", "bands", "format", "coding", "width", "height" }; static int vips_copy_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsConversion *conversion = VIPS_CONVERSION(object); VipsCopy *copy = (VipsCopy *) object; guint64 pel_size_before; guint64 pel_size_after; VipsImage copy_of_fields; int i; if (VIPS_OBJECT_CLASS(vips_copy_parent_class)->build(object)) return -1; if (vips_image_pio_input(copy->in)) return -1; if (copy->swap) g_warning("%s", _("copy swap is deprecated, use byteswap instead")); if (vips_image_pipelinev(conversion->out, VIPS_DEMAND_STYLE_THINSTRIP, copy->in, NULL)) return -1; /* Take a copy of all the basic header fields. We use this for * sanity-checking the changes our caller has made. */ copy_of_fields = *conversion->out; /* Use props to adjust header fields. */ for (i = 0; i < VIPS_NUMBER(vips_copy_names); i++) { const char *name = vips_copy_names[i]; GParamSpec *pspec; VipsArgumentClass *argument_class; VipsArgumentInstance *argument_instance; if (vips_object_get_argument(object, name, &pspec, &argument_class, &argument_instance)) return -1; if (argument_instance->assigned) { GType type = G_PARAM_SPEC_VALUE_TYPE(pspec); GValue value = G_VALUE_INIT; g_value_init(&value, type); g_object_get_property(G_OBJECT(object), name, &value); #ifdef VIPS_DEBUG { char *str; str = g_strdup_value_contents(&value); printf("vips_copy_build: %s = %s\n", name, str); g_free(str); } #endif /* VIPS_DEBUG */ g_object_set_property(G_OBJECT(conversion->out), name, &value); g_value_unset(&value); } } /* Disallow changes which alter sizeof(pel). */ pel_size_before = VIPS_IMAGE_SIZEOF_PEL(©_of_fields); pel_size_after = VIPS_IMAGE_SIZEOF_PEL(conversion->out); if (pel_size_after != pel_size_before) { vips_error(class->nickname, "%s", _("must not change pel size")); return -1; } if (vips_image_generate(conversion->out, vips_start_one, vips_copy_gen, vips_stop_one, copy->in, copy)) return -1; return 0; } static void vips_copy_class_init(VipsCopyClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VIPS_DEBUG_MSG("vips_copy_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "copy"; vobject_class->description = _("copy an image"); vobject_class->build = vips_copy_build; /* We use copy to make fresh vipsimages to stop sharing, so don't * cache it. Plus copy is cheap. */ operation_class->flags = VIPS_OPERATION_SEQUENTIAL | VIPS_OPERATION_NOCACHE; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsCopy, in)); VIPS_ARG_BOOL(class, "swap", 2, _("Swap"), _("Swap bytes in image between little and big-endian"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsCopy, swap), FALSE); VIPS_ARG_INT(class, "width", 3, _("Width"), _("Image width in pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCopy, width), 0, VIPS_MAX_COORD, 0); VIPS_ARG_INT(class, "height", 4, _("Height"), _("Image height in pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCopy, height), 0, VIPS_MAX_COORD, 0); VIPS_ARG_INT(class, "bands", 5, _("Bands"), _("Number of bands in image"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCopy, bands), 0, VIPS_MAX_COORD, 0); VIPS_ARG_ENUM(class, "format", 6, _("Format"), _("Pixel format in image"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCopy, format), VIPS_TYPE_BAND_FORMAT, VIPS_FORMAT_UCHAR); VIPS_ARG_ENUM(class, "coding", 7, _("Coding"), _("Pixel coding"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCopy, coding), VIPS_TYPE_CODING, VIPS_CODING_NONE); VIPS_ARG_ENUM(class, "interpretation", 8, _("Interpretation"), _("Pixel interpretation"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCopy, interpretation), VIPS_TYPE_INTERPRETATION, VIPS_INTERPRETATION_MULTIBAND); VIPS_ARG_DOUBLE(class, "xres", 9, _("Xres"), _("Horizontal resolution in pixels/mm"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCopy, xres), -0.0, 1000000, 0); VIPS_ARG_DOUBLE(class, "yres", 10, _("Yres"), _("Vertical resolution in pixels/mm"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCopy, yres), -0.0, 1000000, 0); VIPS_ARG_INT(class, "xoffset", 11, _("Xoffset"), _("Horizontal offset of origin"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCopy, xoffset), -VIPS_MAX_COORD, VIPS_MAX_COORD, 0); VIPS_ARG_INT(class, "yoffset", 12, _("Yoffset"), _("Vertical offset of origin"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCopy, yoffset), -VIPS_MAX_COORD, VIPS_MAX_COORD, 0); } static void vips_copy_init(VipsCopy *copy) { /* Init our instance fields. */ } /** * vips_copy: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @width: %gint, set image width * * @height: %gint, set image height * * @bands: %gint, set image bands * * @format: #VipsBandFormat, set image format * * @coding: #VipsCoding, set image coding * * @interpretation: #VipsInterpretation, set image interpretation * * @xres: %gdouble, set image xres * * @yres: %gdouble, set image yres * * @xoffset: %gint, set image xoffset * * @yoffset: %gint, set image yoffset * * Copy an image, optionally modifying the header. VIPS copies images by * copying pointers, so this operation is instant, even for very large images. * * You can optionally change any or all header fields during the copy. You can * make any change which does not change the size of a pel, so for example * you can turn a 4-band uchar image into a 2-band ushort image, but you * cannot change a 100 x 100 RGB image into a 300 x 100 mono image. * * See also: vips_byteswap(), vips_bandfold(), vips_bandunfold(). * * Returns: 0 on success, -1 on error. */ int vips_copy(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("copy", ap, in, out); va_end(ap); return result; } /** * vips_copy_file: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * A simple convenience function to copy an image to a file, then copy * again to output. If the image is already a file, just copy straight * through. * * The file is allocated with vips_image_new_temp_file(). * The file is automatically deleted when @out is closed. * * See also: vips_copy(), vips_image_new_temp_file(). * * Returns: 0 on success, -1 on error */ int vips_copy_file(VipsImage *in, VipsImage **out, ...) { VipsImage *file; if (vips_image_isfile(in)) return vips_copy(in, out, NULL); if (!(file = vips_image_new_temp_file("%s.v"))) return -1; if (vips_image_write(in, file) || vips_image_pio_input(file)) { g_object_unref(file); return -1; } *out = file; return 0; } libvips-8.15.1/libvips/conversion/embed.c000066400000000000000000000517741454007373500203610ustar00rootroot00000000000000/* VipsEmbed * * Author: J. Cupitt * Written on: 21/2/95 * Modified on: * 6/4/04 * - added extend pixels from edge mode * - sets Xoffset / Yoffset to x / y * 15/4/04 * - added replicate and mirror modes * 4/3/05 * - added solid white mode * 4/1/07 * - degenerate to im_copy() for 0/0/w/h * 1/8/07 * - more general ... x and y can be negative * 24/3/09 * - added IM_CODING_RAD support * 5/11/09 * - gtkdoc * 27/1/10 * - use im_region_paint() * - cleanups * 15/10/11 * - rewrite as a class * 10/10/12 * - add @background * 19/9/17 * - break into embed and gravity */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "pconversion.h" typedef struct _VipsEmbedBase { VipsConversion parent_instance; /* The input image. */ VipsImage *in; VipsExtend extend; VipsArrayDouble *background; int width; int height; /* Pixel we paint calculated from background. */ VipsPel *ink; /* Geometry calculations. */ VipsRect rout; /* Whole output area */ VipsRect rsub; /* Rect occupied by image */ /* The 8 border pieces. The 4 borders strictly up/down/left/right of * the main image, and the 4 corner pieces. */ VipsRect border[8]; /* Passed to us by subclasses. */ int x; int y; } VipsEmbedBase; typedef VipsConversionClass VipsEmbedBaseClass; G_DEFINE_ABSTRACT_TYPE(VipsEmbedBase, vips_embed_base, VIPS_TYPE_CONVERSION); /* r is the bit we are trying to paint, guaranteed to be entirely within * border area i. Set out to be the edge of the image we need to paint the * pixels in r. */ static void vips_embed_base_find_edge(VipsEmbedBase *base, VipsRect *r, int i, VipsRect *out) { /* Expand the border by 1 pixel, intersect with the image area, and we * get the edge. Usually too much though: eg. we could make the entire * right edge. */ *out = base->border[i]; vips_rect_marginadjust(out, 1); vips_rect_intersectrect(out, &base->rsub, out); /* Usually too much though: eg. we could make the entire * right edge. If we're strictly up/down/left/right of the image, we * can trim. */ if (i == 0 || i == 2) { VipsRect extend; /* Above or below. */ extend = *r; extend.top = 0; extend.height = base->height; vips_rect_intersectrect(out, &extend, out); } if (i == 1 || i == 3) { VipsRect extend; /* Left or right. */ extend = *r; extend.left = 0; extend.width = base->width; vips_rect_intersectrect(out, &extend, out); } } /* Copy a single pixel sideways into a line of pixels. */ static void vips_embed_base_copy_pixel(VipsEmbedBase *base, VipsPel *q, VipsPel *p, int n) { const int bs = VIPS_IMAGE_SIZEOF_PEL(base->in); int x, b; for (x = 0; x < n; x++) for (b = 0; b < bs; b++) *q++ = p[b]; } /* Paint r of region or. It's a border area, lying entirely within * base->border[i]. p points to the top-left source pixel to fill with. * plsk is the line stride. */ static void vips_embed_base_paint_edge(VipsEmbedBase *base, VipsRegion *out_region, int i, VipsRect *r, VipsPel *p, int plsk) { const int bs = VIPS_IMAGE_SIZEOF_PEL(base->in); VipsRect todo; VipsPel *q; int y; VIPS_GATE_START("vips_embed_base_paint_edge: work"); /* Pixels left to paint. */ todo = *r; /* Corner pieces ... copy the single pixel to paint the top line of * todo, then use the line copier below to paint the rest of it. */ if (i > 3) { q = VIPS_REGION_ADDR(out_region, todo.left, todo.top); vips_embed_base_copy_pixel(base, q, p, todo.width); p = q; todo.top += 1; todo.height -= 1; } if (i == 1 || i == 3) { /* Vertical line of pixels to copy. */ for (y = 0; y < todo.height; y++) { q = VIPS_REGION_ADDR(out_region, todo.left, todo.top + y); vips_embed_base_copy_pixel(base, q, p, todo.width); p += plsk; } } else { /* Horizontal line of pixels to copy. */ for (y = 0; y < todo.height; y++) { q = VIPS_REGION_ADDR(out_region, todo.left, todo.top + y); memcpy(q, p, bs * todo.width); } } VIPS_GATE_STOP("vips_embed_base_paint_edge: work"); } static int vips_embed_base_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsEmbedBase *base = (VipsEmbedBase *) b; VipsRect *r = &out_region->valid; VipsRect ovl; int i; VipsPel *p; int plsk; int ink; /* Entirely within the input image? Generate the subimage and copy * pointers. */ if (vips_rect_includesrect(&base->rsub, r)) { VipsRect need; need = *r; need.left -= base->x; need.top -= base->y; if (vips_region_prepare(ir, &need) || vips_region_region(out_region, ir, r, need.left, need.top)) return -1; return 0; } /* Does any of the input image appear in the area we have been asked * to make? Paste it in. */ vips_rect_intersectrect(r, &base->rsub, &ovl); if (!vips_rect_isempty(&ovl)) { /* Paint the bits coming from the input image. */ ovl.left -= base->x; ovl.top -= base->y; if (vips_region_prepare_to(ir, out_region, &ovl, ovl.left + base->x, ovl.top + base->y)) return -1; ovl.left += base->x; ovl.top += base->y; } switch (base->extend) { case VIPS_EXTEND_BLACK: case VIPS_EXTEND_WHITE: VIPS_GATE_START("vips_embed_base_gen: work1"); ink = base->extend == VIPS_EXTEND_BLACK ? 0 : (int) vips_interpretation_max_alpha(base->in->Type); /* Paint the borders a solid value. */ for (i = 0; i < 8; i++) vips_region_paint(out_region, &base->border[i], ink); VIPS_GATE_STOP("vips_embed_base_gen: work1"); break; case VIPS_EXTEND_BACKGROUND: VIPS_GATE_START("vips_embed_base_gen: work2"); /* Paint the borders a solid value. */ for (i = 0; i < 8; i++) vips_region_paint_pel(out_region, &base->border[i], base->ink); VIPS_GATE_STOP("vips_embed_base_gen: work2"); break; case VIPS_EXTEND_COPY: /* Extend the borders. */ for (i = 0; i < 8; i++) { VipsRect todo; VipsRect edge; vips_rect_intersectrect(r, &base->border[i], &todo); if (!vips_rect_isempty(&todo)) { vips_embed_base_find_edge(base, &todo, i, &edge); /* Did we paint any of the input image? If we * did, we can fetch the edge pixels from * that. */ if (!vips_rect_isempty(&ovl)) { p = VIPS_REGION_ADDR(out_region, edge.left, edge.top); plsk = VIPS_REGION_LSKIP(out_region); } else { /* No pixels painted ... fetch * directly from the input image. */ edge.left -= base->x; edge.top -= base->y; if (vips_region_prepare(ir, &edge)) return -1; p = VIPS_REGION_ADDR(ir, edge.left, edge.top); plsk = VIPS_REGION_LSKIP(ir); } vips_embed_base_paint_edge(base, out_region, i, &todo, p, plsk); } } break; default: g_assert_not_reached(); } return 0; } static int vips_embed_base_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsConversion *conversion = VIPS_CONVERSION(object); VipsEmbedBase *base = (VipsEmbedBase *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 7); VipsRect want; if (VIPS_OBJECT_CLASS(vips_embed_base_parent_class)->build(object)) return -1; /* nip2 can generate this quite often ... just copy. */ if (base->x == 0 && base->y == 0 && base->width == base->in->Xsize && base->height == base->in->Ysize) return vips_image_write(base->in, conversion->out); if (!vips_object_argument_isset(object, "extend") && vips_object_argument_isset(object, "background")) base->extend = VIPS_EXTEND_BACKGROUND; if (base->extend == VIPS_EXTEND_BACKGROUND) if (!(base->ink = vips__vector_to_ink( class->nickname, base->in, VIPS_AREA(base->background)->data, NULL, VIPS_AREA(base->background)->n))) return -1; switch (base->extend) { case VIPS_EXTEND_REPEAT: { /* Clock arithmetic: we want negative x/y to wrap around * nicely. */ const int nx = base->x < 0 ? -base->x % base->in->Xsize : base->in->Xsize - base->x % base->in->Xsize; const int ny = base->y < 0 ? -base->y % base->in->Ysize : base->in->Ysize - base->y % base->in->Ysize; if (vips_replicate(base->in, &t[0], base->width / base->in->Xsize + 2, base->height / base->in->Ysize + 2, NULL) || vips_extract_area(t[0], &t[1], nx, ny, base->width, base->height, NULL) || vips_image_write(t[1], conversion->out)) return -1; } break; case VIPS_EXTEND_MIRROR: { /* As repeat, but the tiles are twice the size because of * mirroring. */ const int w2 = base->in->Xsize * 2; const int h2 = base->in->Ysize * 2; const int nx = base->x < 0 ? -base->x % w2 : w2 - base->x % w2; const int ny = base->y < 0 ? -base->y % h2 : h2 - base->y % h2; if ( /* Make a 2x2 mirror tile. */ vips_flip(base->in, &t[0], VIPS_DIRECTION_HORIZONTAL, NULL) || vips_join(base->in, t[0], &t[1], VIPS_DIRECTION_HORIZONTAL, NULL) || vips_flip(t[1], &t[2], VIPS_DIRECTION_VERTICAL, NULL) || vips_join(t[1], t[2], &t[3], VIPS_DIRECTION_VERTICAL, NULL) || /* Repeat, then cut out the centre. */ vips_replicate(t[3], &t[4], base->width / t[3]->Xsize + 2, base->height / t[3]->Ysize + 2, NULL) || vips_extract_area(t[4], &t[5], nx, ny, base->width, base->height, NULL) || /* Overwrite the centre with the in, much faster * for centre pixels. */ vips_insert(t[5], base->in, &t[6], base->x, base->y, NULL) || vips_image_write(t[6], conversion->out)) return -1; } break; case VIPS_EXTEND_BLACK: case VIPS_EXTEND_WHITE: case VIPS_EXTEND_BACKGROUND: case VIPS_EXTEND_COPY: /* embed is used in many places. We don't really care about * geometry, so use ANY to avoid disturbing all pipelines. */ if (vips_image_pipelinev(conversion->out, VIPS_DEMAND_STYLE_ANY, base->in, NULL)) return -1; conversion->out->Xsize = base->width; conversion->out->Ysize = base->height; /* Whole output area. */ base->rout.left = 0; base->rout.top = 0; base->rout.width = conversion->out->Xsize; base->rout.height = conversion->out->Ysize; /* Rect occupied by image (can be clipped to nothing). */ want.left = base->x; want.top = base->y; want.width = base->in->Xsize; want.height = base->in->Ysize; vips_rect_intersectrect(&want, &base->rout, &base->rsub); /* FIXME ... actually, it can't. base_find_edge() will fail * if rsub is empty. Make this more general at some point * and remove this test. */ if (vips_rect_isempty(&base->rsub)) { vips_error(class->nickname, "%s", _("bad dimensions")); return -1; } /* Edge rects of new pixels ... top, right, bottom, left. Order * important. Can be empty. */ base->border[0].left = base->rsub.left; base->border[0].top = 0; base->border[0].width = base->rsub.width; base->border[0].height = base->rsub.top; base->border[1].left = VIPS_RECT_RIGHT(&base->rsub); base->border[1].top = base->rsub.top; base->border[1].width = conversion->out->Xsize - VIPS_RECT_RIGHT(&base->rsub); base->border[1].height = base->rsub.height; base->border[2].left = base->rsub.left; base->border[2].top = VIPS_RECT_BOTTOM(&base->rsub); base->border[2].width = base->rsub.width; base->border[2].height = conversion->out->Ysize - VIPS_RECT_BOTTOM(&base->rsub); base->border[3].left = 0; base->border[3].top = base->rsub.top; base->border[3].width = base->rsub.left; base->border[3].height = base->rsub.height; /* Corner rects. Top-left, top-right, bottom-right, * bottom-left. Order important. */ base->border[4].left = 0; base->border[4].top = 0; base->border[4].width = base->rsub.left; base->border[4].height = base->rsub.top; base->border[5].left = VIPS_RECT_RIGHT(&base->rsub); base->border[5].top = 0; base->border[5].width = conversion->out->Xsize - VIPS_RECT_RIGHT(&base->rsub); base->border[5].height = base->rsub.top; base->border[6].left = VIPS_RECT_RIGHT(&base->rsub); base->border[6].top = VIPS_RECT_BOTTOM(&base->rsub); base->border[6].width = conversion->out->Xsize - VIPS_RECT_RIGHT(&base->rsub); base->border[6].height = conversion->out->Ysize - VIPS_RECT_BOTTOM(&base->rsub); base->border[7].left = 0; base->border[7].top = VIPS_RECT_BOTTOM(&base->rsub); base->border[7].width = base->rsub.left; base->border[7].height = conversion->out->Ysize - VIPS_RECT_BOTTOM(&base->rsub); if (vips_image_generate(conversion->out, vips_start_one, vips_embed_base_gen, vips_stop_one, base->in, base)) return -1; break; default: g_assert_not_reached(); } return 0; } static void vips_embed_base_class_init(VipsEmbedBaseClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VIPS_DEBUG_MSG("vips_embed_base_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "embed_base"; vobject_class->description = _("embed an image in a larger image"); vobject_class->build = vips_embed_base_build; /* Not seq with mirror. */ VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsEmbedBase, in)); VIPS_ARG_INT(class, "width", 5, _("Width"), _("Image width in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsEmbedBase, width), 1, 1000000000, 1); VIPS_ARG_INT(class, "height", 6, _("Height"), _("Image height in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsEmbedBase, height), 1, 1000000000, 1); VIPS_ARG_ENUM(class, "extend", 7, _("Extend"), _("How to generate the extra pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsEmbedBase, extend), VIPS_TYPE_EXTEND, VIPS_EXTEND_BLACK); VIPS_ARG_BOXED(class, "background", 12, _("Background"), _("Color for background pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsEmbedBase, background), VIPS_TYPE_ARRAY_DOUBLE); } static void vips_embed_base_init(VipsEmbedBase *base) { base->extend = VIPS_EXTEND_BLACK; base->background = vips_array_double_newv(1, 0.0); } /* Embed with specified x, y */ typedef struct _VipsEmbed { VipsEmbedBase parent_instance; int x; int y; } VipsEmbed; typedef VipsConversionClass VipsEmbedClass; G_DEFINE_TYPE(VipsEmbed, vips_embed, vips_embed_base_get_type()); static int vips_embed_build(VipsObject *object) { VipsEmbedBase *base = (VipsEmbedBase *) object; VipsEmbed *embed = (VipsEmbed *) object; /* Just pass the specified x, y down. */ base->x = embed->x; base->y = embed->y; if (VIPS_OBJECT_CLASS(vips_embed_parent_class)->build(object)) return -1; return 0; } static void vips_embed_class_init(VipsEmbedClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VIPS_DEBUG_MSG("vips_embed_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "embed"; vobject_class->description = _("embed an image in a larger image"); vobject_class->build = vips_embed_build; VIPS_ARG_INT(class, "x", 3, _("x"), _("Left edge of input in output"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsEmbed, x), -1000000000, 1000000000, 0); VIPS_ARG_INT(class, "y", 4, _("y"), _("Top edge of input in output"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsEmbed, y), -1000000000, 1000000000, 0); } static void vips_embed_init(VipsEmbed *embed) { } /** * vips_embed: (method) * @in: input image * @out: (out): output image * @x: place @in at this x position in @out * @y: place @in at this y position in @out * @width: @out should be this many pixels across * @height: @out should be this many pixels down * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @extend: #VipsExtend to generate the edge pixels (default: black) * * @background: #VipsArrayDouble colour for edge pixels * * The opposite of vips_extract_area(): embed @in within an image of size * @width by @height at position @x, @y. * * @extend * controls what appears in the new pels, see #VipsExtend. * * See also: vips_extract_area(), vips_insert(). * * Returns: 0 on success, -1 on error. */ int vips_embed(VipsImage *in, VipsImage **out, int x, int y, int width, int height, ...) { va_list ap; int result; va_start(ap, height); result = vips_call_split("embed", ap, in, out, x, y, width, height); va_end(ap); return result; } /* Embed with a general direction. */ typedef struct _VipsGravity { VipsEmbedBase parent_instance; VipsCompassDirection direction; } VipsGravity; typedef VipsConversionClass VipsGravityClass; G_DEFINE_TYPE(VipsGravity, vips_gravity, vips_embed_base_get_type()); static int vips_gravity_build(VipsObject *object) { VipsEmbedBase *base = (VipsEmbedBase *) object; VipsGravity *gravity = (VipsGravity *) object; if (vips_object_argument_isset(object, "in") && vips_object_argument_isset(object, "width") && vips_object_argument_isset(object, "height") && vips_object_argument_isset(object, "direction")) { switch (gravity->direction) { case VIPS_COMPASS_DIRECTION_CENTRE: base->x = (base->width - base->in->Xsize) / 2; base->y = (base->height - base->in->Ysize) / 2; break; case VIPS_COMPASS_DIRECTION_NORTH: base->x = (base->width - base->in->Xsize) / 2; base->y = 0; break; case VIPS_COMPASS_DIRECTION_EAST: base->x = base->width - base->in->Xsize; base->y = (base->height - base->in->Ysize) / 2; break; case VIPS_COMPASS_DIRECTION_SOUTH: base->x = (base->width - base->in->Xsize) / 2; base->y = base->height - base->in->Ysize; break; case VIPS_COMPASS_DIRECTION_WEST: base->x = 0; base->y = (base->height - base->in->Ysize) / 2; break; case VIPS_COMPASS_DIRECTION_NORTH_EAST: base->x = base->width - base->in->Xsize; base->y = 0; break; case VIPS_COMPASS_DIRECTION_SOUTH_EAST: base->x = base->width - base->in->Xsize; base->y = base->height - base->in->Ysize; break; case VIPS_COMPASS_DIRECTION_SOUTH_WEST: base->x = 0; base->y = base->height - base->in->Ysize; break; case VIPS_COMPASS_DIRECTION_NORTH_WEST: base->x = 0; base->y = 0; break; default: g_assert_not_reached(); } } if (VIPS_OBJECT_CLASS(vips_gravity_parent_class)->build(object)) return -1; return 0; } static void vips_gravity_class_init(VipsGravityClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VIPS_DEBUG_MSG("vips_gravity_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "gravity"; vobject_class->description = _("place an image within a larger " "image with a certain gravity"); vobject_class->build = vips_gravity_build; VIPS_ARG_ENUM(class, "direction", 3, _("Direction"), _("Direction to place image within width/height"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsGravity, direction), VIPS_TYPE_COMPASS_DIRECTION, VIPS_COMPASS_DIRECTION_CENTRE); } static void vips_gravity_init(VipsGravity *gravity) { gravity->direction = VIPS_COMPASS_DIRECTION_CENTRE; } /** * vips_gravity: * @in: input image * @out: output image * @direction: place @in at this direction in @out * @width: @out should be this many pixels across * @height: @out should be this many pixels down * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @extend: #VipsExtend to generate the edge pixels (default: black) * * @background: #VipsArrayDouble colour for edge pixels * * The opposite of vips_extract_area(): place @in within an image of size * @width by @height at a certain gravity. * * @extend * controls what appears in the new pels, see #VipsExtend. * * See also: vips_extract_area(), vips_insert(). * * Returns: 0 on success, -1 on error. */ int vips_gravity(VipsImage *in, VipsImage **out, VipsCompassDirection direction, int width, int height, ...) { va_list ap; int result; va_start(ap, height); result = vips_call_split("gravity", ap, in, out, direction, width, height); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/extract.c000066400000000000000000000264051454007373500207500ustar00rootroot00000000000000/* extract an area and/or a set of bands * * Copyright: 1990, J. Cupitt * * Author: J. Cupitt * Written on: 12/02/1990 * Modified on: 4/6/92, J.Cupitt * - speed up! why wasn't this done before? Why am I stupid? * - layout, messages fixed * now extracts IM_CODING_LABQ to IM_CODING_LABQ file: K.Martinez 1/7/93 * 2/7/93 JC * - adapted for partial v2 * - ANSIfied * 7/7/93 JC * - behaviour for IM_CODING_LABQ fixed * - better messages * 7/10/94 JC * - new IM_NEW() * 22/2/95 JC * - new use of im_region_region() * 6/7/98 JC * - im_extract_area() and im_extract_band() added * 11/7/01 JC * - im_extract_band() now numbers from zero * 7/11/01 JC * - oh what pain, im_extract now numbers bands from zero as well * 6/9/02 JC * - zero xoff/yoff for extracted area * 14/4/04 JC * - nope, -ve the origin * 17/7/04 * - added im_extract_bands(), remove many bands from image * 24/3/09 * - added IM_CODING_RAD support * 29/1/10 * - cleanups * - gtkdoc * 26/10/11 * - redone as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pconversion.h" #include "bandary.h" typedef struct _VipsExtractArea { VipsConversion parent_instance; /* The input image. */ VipsImage *in; int left; int top; int width; int height; } VipsExtractArea; typedef VipsConversionClass VipsExtractAreaClass; G_DEFINE_TYPE(VipsExtractArea, vips_extract_area, VIPS_TYPE_CONVERSION); /* Extract an area. Can just use pointers. */ static int vips_extract_area_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsExtractArea *extract = (VipsExtractArea *) b; VipsRect iarea; /* Ask for input we need. Translate from demand in or's space to * demand in ir's space. */ iarea = out_region->valid; iarea.left += extract->left; iarea.top += extract->top; if (vips_region_prepare(ir, &iarea)) return -1; /* Attach or to ir. */ if (vips_region_region(out_region, ir, &out_region->valid, iarea.left, iarea.top)) return -1; return 0; } static int vips_extract_area_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsConversion *conversion = VIPS_CONVERSION(object); VipsExtractArea *extract = (VipsExtractArea *) object; if (VIPS_OBJECT_CLASS(vips_extract_area_parent_class)->build(object)) return -1; if (extract->left + extract->width > extract->in->Xsize || extract->top + extract->height > extract->in->Ysize || extract->left < 0 || extract->top < 0 || extract->width <= 0 || extract->height <= 0) { vips_error(class->nickname, "%s", _("bad extract area")); return -1; } if (vips_image_pio_input(extract->in) || vips_check_coding_known(class->nickname, extract->in)) return -1; if (vips_image_pipelinev(conversion->out, VIPS_DEMAND_STYLE_THINSTRIP, extract->in, NULL)) return -1; conversion->out->Xsize = extract->width; conversion->out->Ysize = extract->height; conversion->out->Xoffset = -extract->left; conversion->out->Yoffset = -extract->top; if (vips_image_generate(conversion->out, vips_start_one, vips_extract_area_gen, vips_stop_one, extract->in, extract)) return -1; return 0; } static void vips_extract_area_class_init(VipsExtractAreaClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VIPS_DEBUG_MSG("vips_extract_area_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "extract_area"; vobject_class->description = _("extract an area from an image"); vobject_class->build = vips_extract_area_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "input", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsExtractArea, in)); VIPS_ARG_INT(class, "left", 3, _("Left"), _("Left edge of extract area"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsExtractArea, left), -VIPS_MAX_COORD, VIPS_MAX_COORD, 0); VIPS_ARG_INT(class, "top", 4, _("Top"), _("Top edge of extract area"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsExtractArea, top), -VIPS_MAX_COORD, VIPS_MAX_COORD, 0); VIPS_ARG_INT(class, "width", 5, _("Width"), _("Width of extract area"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsExtractArea, width), 1, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "height", 6, _("Height"), _("Height of extract area"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsExtractArea, height), 1, VIPS_MAX_COORD, 1); } #ifdef __EMSCRIPTEN__ static void vips_crop_init_adapter(VipsExtractArea *extract, void *dummy) { vips_extract_area_init(extract); } #endif static void vips_extract_area_init(VipsExtractArea *extract) { } /** * vips_extract_area: (method) * @in: input image * @out: (out): output image * @left: left edge of area to extract * @top: top edge of area to extract * @width: width of area to extract * @height: height of area to extract * @...: %NULL-terminated list of optional named arguments * * Extract an area from an image. The area must fit within @in. * * See also: vips_extract_bands(), vips_smartcrop(). * * Returns: 0 on success, -1 on error. */ int vips_extract_area(VipsImage *in, VipsImage **out, int left, int top, int width, int height, ...) { va_list ap; int result; va_start(ap, height); result = vips_call_split("extract_area", ap, in, out, left, top, width, height); va_end(ap); return result; } /* A synonym for extract_area. */ GType vips_crop_get_type(void) { static gsize gtype_id = 0; if (g_once_init_enter(>ype_id)) { GType new_type = g_type_register_static_simple(VIPS_TYPE_CONVERSION, g_intern_static_string("crop"), sizeof(VipsExtractAreaClass), (GClassInitFunc) (void (*)(void)) vips_extract_area_class_intern_init, sizeof(VipsExtractArea), #ifdef __EMSCRIPTEN__ (GInstanceInitFunc) vips_crop_init_adapter, #else (GInstanceInitFunc) (void (*)(void)) vips_extract_area_init, #endif (GTypeFlags) 0); g_once_init_leave(>ype_id, new_type); } return (GType) gtype_id; } /** * vips_crop: (method) * @in: input image * @out: (out): output image * @left: left edge of area to extract * @top: top edge of area to extract * @width: width of area to extract * @height: height of area to extract * @...: %NULL-terminated list of optional named arguments * * A synonym for vips_extract_area(). * * See also: vips_extract_bands(), vips_smartcrop(). * * Returns: 0 on success, -1 on error. */ int vips_crop(VipsImage *in, VipsImage **out, int left, int top, int width, int height, ...) { va_list ap; int result; va_start(ap, height); result = vips_call_split("crop", ap, in, out, left, top, width, height); va_end(ap); return result; } typedef struct _VipsExtractBand { VipsBandary parent_instance; /* The input image. */ VipsImage *in; int band; int n; } VipsExtractBand; typedef VipsBandaryClass VipsExtractBandClass; G_DEFINE_TYPE(VipsExtractBand, vips_extract_band, VIPS_TYPE_BANDARY); static void vips_extract_band_buffer(VipsBandarySequence *seq, VipsPel *out, VipsPel **in, int width) { VipsBandary *bandary = seq->bandary; VipsConversion *conversion = (VipsConversion *) bandary; VipsExtractBand *extract = (VipsExtractBand *) bandary; VipsImage *im = bandary->ready[0]; int es = VIPS_IMAGE_SIZEOF_ELEMENT(im); int ips = VIPS_IMAGE_SIZEOF_PEL(im); const int ops = VIPS_IMAGE_SIZEOF_PEL(conversion->out); VipsPel *restrict p; VipsPel *restrict q; int x, z; p = in[0] + extract->band * es; q = out; if (ops == 1) { for (x = 0; x < width; x++) { q[x] = p[0]; p += ips; } } else { for (x = 0; x < width; x++) { for (z = 0; z < ops; z++) q[z] = p[z]; p += ips; q += ops; } } } static int vips_extract_band_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsBandary *bandary = (VipsBandary *) object; VipsExtractBand *extract = (VipsExtractBand *) object; if (extract->in) { int bands; vips_image_decode_predict(extract->in, &bands, NULL); bandary->n = 1; bandary->in = &extract->in; bandary->out_bands = extract->n; if (extract->band + extract->n > bands) { vips_error(class->nickname, "%s", _("bad extract band")); return -1; } if (extract->band == 0 && extract->n == bands) return vips_bandary_copy(bandary); } if (VIPS_OBJECT_CLASS(vips_extract_band_parent_class)->build(object)) return -1; return 0; } static void vips_extract_band_class_init(VipsExtractBandClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsBandaryClass *bandary_class = VIPS_BANDARY_CLASS(class); VIPS_DEBUG_MSG("vips_extract_band_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "extract_band"; vobject_class->description = _("extract band from an image"); vobject_class->build = vips_extract_band_build; bandary_class->process_line = vips_extract_band_buffer; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsExtractBand, in)); VIPS_ARG_INT(class, "band", 3, _("Band"), _("Band to extract"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsExtractBand, band), 0, VIPS_MAX_COORD, 0); VIPS_ARG_INT(class, "n", 4, _("n"), _("Number of bands to extract"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsExtractBand, n), 1, VIPS_MAX_COORD, 1); } static void vips_extract_band_init(VipsExtractBand *extract) { extract->n = 1; } /** * vips_extract_band: (method) * @in: input image * @out: (out): output image * @band: band to extract * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @n: number of bands to extract * * Extract a band or bands from an image. Extracting out of range is an error. * * See also: vips_extract_area(). * * Returns: 0 on success, -1 on error. */ int vips_extract_band(VipsImage *in, VipsImage **out, int band, ...) { va_list ap; int result; va_start(ap, band); result = vips_call_split("extract_band", ap, in, out, band); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/falsecolour.c000066400000000000000000000204161454007373500216100ustar00rootroot00000000000000/* im_falsecolour * * 23/6/95 JC * - rewritten for PIO * - now walks edges of colour cube to get more saturated appearance * 21/8/05 * - uses falsecolour scale from PET scanner * 7/4/06 * - hmm, reversed scale * 29/1/10 * - cleanups * - gtkdoc * 12/7/11 * - force input to mono 8-bit for the user * 1/8/13 * - redone as a class * 23/1/14 * - oops, was not auto-getting and casting the first band */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pconversion.h" typedef struct _VipsFalsecolour { VipsConversion parent_instance; VipsImage *in; } VipsFalsecolour; typedef VipsConversionClass VipsFalsecolourClass; G_DEFINE_TYPE(VipsFalsecolour, vips_falsecolour, VIPS_TYPE_CONVERSION); /* Falsecolour scale nicked from a PET scan. */ static unsigned char vips_falsecolour_pet[][3] = { { 12, 0, 25 }, { 17, 0, 34 }, { 20, 0, 41 }, { 22, 0, 45 }, { 23, 0, 47 }, { 27, 0, 55 }, { 12, 0, 25 }, { 5, 0, 11 }, { 5, 0, 11 }, { 5, 0, 11 }, { 1, 0, 4 }, { 1, 0, 4 }, { 6, 0, 13 }, { 15, 0, 30 }, { 19, 0, 40 }, { 23, 0, 48 }, { 28, 0, 57 }, { 36, 0, 74 }, { 42, 0, 84 }, { 46, 0, 93 }, { 51, 0, 102 }, { 59, 0, 118 }, { 65, 0, 130 }, { 69, 0, 138 }, { 72, 0, 146 }, { 81, 0, 163 }, { 47, 0, 95 }, { 12, 0, 28 }, { 64, 0, 144 }, { 61, 0, 146 }, { 55, 0, 140 }, { 52, 0, 137 }, { 47, 0, 132 }, { 43, 0, 128 }, { 38, 0, 123 }, { 30, 0, 115 }, { 26, 0, 111 }, { 23, 0, 108 }, { 17, 0, 102 }, { 9, 0, 94 }, { 6, 0, 91 }, { 2, 0, 87 }, { 0, 0, 88 }, { 0, 0, 100 }, { 0, 0, 104 }, { 0, 0, 108 }, { 0, 0, 113 }, { 0, 0, 121 }, { 0, 0, 125 }, { 0, 0, 129 }, { 0, 0, 133 }, { 0, 0, 141 }, { 0, 0, 146 }, { 0, 0, 150 }, { 0, 0, 155 }, { 0, 0, 162 }, { 0, 0, 167 }, { 0, 0, 173 }, { 0, 0, 180 }, { 0, 0, 188 }, { 0, 0, 193 }, { 0, 0, 197 }, { 0, 0, 201 }, { 0, 0, 209 }, { 0, 0, 214 }, { 0, 0, 218 }, { 0, 0, 222 }, { 0, 0, 230 }, { 0, 0, 235 }, { 0, 0, 239 }, { 0, 0, 243 }, { 0, 0, 247 }, { 0, 4, 251 }, { 0, 10, 255 }, { 0, 14, 255 }, { 0, 18, 255 }, { 0, 24, 255 }, { 0, 31, 255 }, { 0, 36, 255 }, { 0, 39, 255 }, { 0, 45, 255 }, { 0, 53, 255 }, { 0, 56, 255 }, { 0, 60, 255 }, { 0, 66, 255 }, { 0, 74, 255 }, { 0, 77, 255 }, { 0, 81, 255 }, { 0, 88, 251 }, { 0, 99, 239 }, { 0, 104, 234 }, { 0, 108, 230 }, { 0, 113, 225 }, { 0, 120, 218 }, { 0, 125, 213 }, { 0, 128, 210 }, { 0, 133, 205 }, { 0, 141, 197 }, { 0, 145, 193 }, { 0, 150, 188 }, { 0, 154, 184 }, { 0, 162, 176 }, { 0, 167, 172 }, { 0, 172, 170 }, { 0, 180, 170 }, { 0, 188, 170 }, { 0, 193, 170 }, { 0, 197, 170 }, { 0, 201, 170 }, { 0, 205, 170 }, { 0, 211, 170 }, { 0, 218, 170 }, { 0, 222, 170 }, { 0, 226, 170 }, { 0, 232, 170 }, { 0, 239, 170 }, { 0, 243, 170 }, { 0, 247, 170 }, { 0, 251, 161 }, { 0, 255, 147 }, { 0, 255, 139 }, { 0, 255, 131 }, { 0, 255, 120 }, { 0, 255, 105 }, { 0, 255, 97 }, { 0, 255, 89 }, { 0, 255, 78 }, { 0, 255, 63 }, { 0, 255, 55 }, { 0, 255, 47 }, { 0, 255, 37 }, { 0, 255, 21 }, { 0, 255, 13 }, { 0, 255, 5 }, { 2, 255, 2 }, { 13, 255, 13 }, { 18, 255, 18 }, { 23, 255, 23 }, { 27, 255, 27 }, { 35, 255, 35 }, { 40, 255, 40 }, { 43, 255, 43 }, { 48, 255, 48 }, { 55, 255, 55 }, { 60, 255, 60 }, { 64, 255, 64 }, { 69, 255, 69 }, { 72, 255, 72 }, { 79, 255, 79 }, { 90, 255, 82 }, { 106, 255, 74 }, { 113, 255, 70 }, { 126, 255, 63 }, { 140, 255, 56 }, { 147, 255, 53 }, { 155, 255, 48 }, { 168, 255, 42 }, { 181, 255, 36 }, { 189, 255, 31 }, { 197, 255, 27 }, { 209, 255, 21 }, { 224, 255, 14 }, { 231, 255, 10 }, { 239, 255, 7 }, { 247, 251, 3 }, { 255, 243, 0 }, { 255, 239, 0 }, { 255, 235, 0 }, { 255, 230, 0 }, { 255, 222, 0 }, { 255, 218, 0 }, { 255, 214, 0 }, { 255, 209, 0 }, { 255, 201, 0 }, { 255, 197, 0 }, { 255, 193, 0 }, { 255, 188, 0 }, { 255, 180, 0 }, { 255, 176, 0 }, { 255, 172, 0 }, { 255, 167, 0 }, { 255, 156, 0 }, { 255, 150, 0 }, { 255, 146, 0 }, { 255, 142, 0 }, { 255, 138, 0 }, { 255, 131, 0 }, { 255, 125, 0 }, { 255, 121, 0 }, { 255, 117, 0 }, { 255, 110, 0 }, { 255, 104, 0 }, { 255, 100, 0 }, { 255, 96, 0 }, { 255, 90, 0 }, { 255, 83, 0 }, { 255, 78, 0 }, { 255, 75, 0 }, { 255, 71, 0 }, { 255, 67, 0 }, { 255, 65, 0 }, { 255, 63, 0 }, { 255, 59, 0 }, { 255, 54, 0 }, { 255, 52, 0 }, { 255, 50, 0 }, { 255, 46, 0 }, { 255, 41, 0 }, { 255, 39, 0 }, { 255, 36, 0 }, { 255, 32, 0 }, { 255, 25, 0 }, { 255, 22, 0 }, { 255, 20, 0 }, { 255, 17, 0 }, { 255, 13, 0 }, { 255, 10, 0 }, { 255, 7, 0 }, { 255, 4, 0 }, { 255, 0, 0 }, { 252, 0, 0 }, { 251, 0, 0 }, { 249, 0, 0 }, { 248, 0, 0 }, { 244, 0, 0 }, { 242, 0, 0 }, { 240, 0, 0 }, { 237, 0, 0 }, { 234, 0, 0 }, { 231, 0, 0 }, { 229, 0, 0 }, { 228, 0, 0 }, { 225, 0, 0 }, { 222, 0, 0 }, { 221, 0, 0 }, { 219, 0, 0 }, { 216, 0, 0 }, { 213, 0, 0 }, { 212, 0, 0 }, { 210, 0, 0 }, { 207, 0, 0 }, { 204, 0, 0 }, { 201, 0, 0 }, { 199, 0, 0 }, { 196, 0, 0 }, { 193, 0, 0 }, { 192, 0, 0 }, { 190, 0, 0 }, { 188, 0, 0 }, { 184, 0, 0 }, { 183, 0, 0 }, { 181, 0, 0 }, { 179, 0, 0 }, { 175, 0, 0 }, { 174, 0, 0 }, { 174, 0, 0 } }; static int vips_falsecolour_build(VipsObject *object) { VipsConversion *conversion = VIPS_CONVERSION(object); VipsFalsecolour *falsecolour = (VipsFalsecolour *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 5); if (VIPS_OBJECT_CLASS(vips_falsecolour_parent_class)->build(object)) return -1; if (!(t[0] = vips_image_new_from_memory( (void *) vips_falsecolour_pet, sizeof(vips_falsecolour_pet), 1, VIPS_NUMBER(vips_falsecolour_pet), 3, VIPS_FORMAT_UCHAR))) return -1; /* Force to mono 8-bit. Don't use vips_colourspace() to go to B_W, we * want to work for images which aren't in a recognised space, like * MULTIBAND. */ if (vips_image_decode(falsecolour->in, &t[1]) || vips_extract_band(t[1], &t[2], 0, NULL) || vips_cast(t[2], &t[3], VIPS_FORMAT_UCHAR, NULL) || vips_maplut(t[3], &t[4], t[0], NULL) || vips_image_write(t[4], conversion->out)) return -1; return 0; } static void vips_falsecolour_class_init(VipsFalsecolourClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "falsecolour"; vobject_class->description = _("false-color an image"); vobject_class->build = vips_falsecolour_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 0, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsFalsecolour, in)); } static void vips_falsecolour_init(VipsFalsecolour *falsecolour) { } /** * vips_falsecolour: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Force @in to 1 band, 8-bit, then transform to * a 3-band 8-bit image with a false colour * map. The map is supposed to make small differences in brightness more * obvious. * * See also: vips_maplut(). * * Returns: 0 on success, -1 on error */ int vips_falsecolour(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("falsecolour", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/flatten.c000066400000000000000000000254711454007373500207350ustar00rootroot00000000000000/* flatten the alpha out of an image, replacing it with a constant background * * Author: John Cupitt * Written on: 18/6/12 * * 4/1/14 * - better rounding * 9/5/15 * - add max_alpha to match vips_premultiply() etc. * 25/5/16 * - max_alpha defaults to 65535 for RGB16/GREY16 * 12/9/21 * - out of range alpha and max_alpha correctly */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "pconversion.h" typedef struct _VipsFlatten { VipsConversion parent_instance; VipsImage *in; /* Background colour. */ VipsArrayDouble *background; /* The [double] background converted to the input image format. */ VipsPel *ink; /* Use this to scale alpha to 0 - 1. */ double max_alpha; } VipsFlatten; typedef VipsConversionClass VipsFlattenClass; G_DEFINE_TYPE(VipsFlatten, vips_flatten, VIPS_TYPE_CONVERSION); /* Flatten with black background. */ #define VIPS_FLATTEN_BLACK_INT(TYPE) \ { \ TYPE *restrict p = (TYPE *) in; \ TYPE *restrict q = (TYPE *) out; \ \ for (x = 0; x < width; x++) { \ TYPE alpha = p[bands - 1]; \ int b; \ \ for (b = 0; b < bands - 1; b++) \ q[b] = (p[b] * alpha) / max_alpha; \ \ p += bands; \ q += bands - 1; \ } \ } /* Same, but with float arithmetic. Necessary for short/int to prevent * overflow. */ #define VIPS_FLATTEN_BLACK_FLOAT(TYPE) \ { \ TYPE *restrict p = (TYPE *) in; \ TYPE *restrict q = (TYPE *) out; \ \ for (x = 0; x < width; x++) { \ TYPE alpha = p[bands - 1]; \ int b; \ \ for (b = 0; b < bands - 1; b++) \ q[b] = ((double) p[b] * alpha) / max_alpha; \ \ p += bands; \ q += bands - 1; \ } \ } /* Flatten with any background. */ #define VIPS_FLATTEN_INT(TYPE) \ { \ TYPE *restrict p = (TYPE *) in; \ TYPE *restrict q = (TYPE *) out; \ \ for (x = 0; x < width; x++) { \ TYPE alpha = p[bands - 1]; \ TYPE nalpha = max_alpha - alpha; \ TYPE *restrict bg = (TYPE *) flatten->ink; \ int b; \ \ for (b = 0; b < bands - 1; b++) \ q[b] = (p[b] * alpha + bg[b] * nalpha) / max_alpha; \ \ p += bands; \ q += bands - 1; \ } \ } #define VIPS_FLATTEN_FLOAT(TYPE) \ { \ TYPE *restrict p = (TYPE *) in; \ TYPE *restrict q = (TYPE *) out; \ \ for (x = 0; x < width; x++) { \ TYPE alpha = p[bands - 1]; \ TYPE nalpha = max_alpha - alpha; \ TYPE *restrict bg = (TYPE *) flatten->ink; \ int b; \ \ for (b = 0; b < bands - 1; b++) \ q[b] = ((double) p[b] * alpha + \ (double) bg[b] * nalpha) / \ max_alpha; \ \ p += bands; \ q += bands - 1; \ } \ } static int vips_flatten_black_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) vseq; VipsFlatten *flatten = (VipsFlatten *) b; VipsRect *r = &out_region->valid; int width = r->width; int bands = ir->im->Bands; double max_alpha = flatten->max_alpha; int x, y; if (vips_region_prepare(ir, r)) return -1; for (y = 0; y < r->height; y++) { VipsPel *in = VIPS_REGION_ADDR(ir, r->left, r->top + y); VipsPel *out = VIPS_REGION_ADDR(out_region, r->left, r->top + y); switch (ir->im->BandFmt) { case VIPS_FORMAT_UCHAR: VIPS_FLATTEN_BLACK_INT(unsigned char); break; case VIPS_FORMAT_CHAR: VIPS_FLATTEN_BLACK_INT(signed char); break; case VIPS_FORMAT_USHORT: VIPS_FLATTEN_BLACK_FLOAT(unsigned short); break; case VIPS_FORMAT_SHORT: VIPS_FLATTEN_BLACK_FLOAT(signed short); break; case VIPS_FORMAT_UINT: VIPS_FLATTEN_BLACK_FLOAT(unsigned int); break; case VIPS_FORMAT_INT: VIPS_FLATTEN_BLACK_FLOAT(signed int); break; case VIPS_FORMAT_FLOAT: VIPS_FLATTEN_BLACK_FLOAT(float); break; case VIPS_FORMAT_DOUBLE: VIPS_FLATTEN_BLACK_FLOAT(double); break; case VIPS_FORMAT_COMPLEX: case VIPS_FORMAT_DPCOMPLEX: default: g_assert_not_reached(); } } return 0; } /* Any background. */ static int vips_flatten_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) vseq; VipsFlatten *flatten = (VipsFlatten *) b; VipsRect *r = &out_region->valid; int width = r->width; int bands = ir->im->Bands; double max_alpha = flatten->max_alpha; int x, y; if (vips_region_prepare(ir, r)) return -1; for (y = 0; y < r->height; y++) { VipsPel *in = VIPS_REGION_ADDR(ir, r->left, r->top + y); VipsPel *out = VIPS_REGION_ADDR(out_region, r->left, r->top + y); switch (ir->im->BandFmt) { case VIPS_FORMAT_UCHAR: VIPS_FLATTEN_INT(unsigned char); break; case VIPS_FORMAT_CHAR: VIPS_FLATTEN_INT(signed char); break; case VIPS_FORMAT_USHORT: VIPS_FLATTEN_FLOAT(unsigned short); break; case VIPS_FORMAT_SHORT: VIPS_FLATTEN_FLOAT(signed short); break; case VIPS_FORMAT_UINT: VIPS_FLATTEN_FLOAT(unsigned int); break; case VIPS_FORMAT_INT: VIPS_FLATTEN_FLOAT(signed int); break; case VIPS_FORMAT_FLOAT: VIPS_FLATTEN_FLOAT(float); break; case VIPS_FORMAT_DOUBLE: VIPS_FLATTEN_FLOAT(double); break; case VIPS_FORMAT_COMPLEX: case VIPS_FORMAT_DPCOMPLEX: default: g_assert_not_reached(); } } return 0; } static int vips_flatten_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsConversion *conversion = VIPS_CONVERSION(object); VipsFlatten *flatten = (VipsFlatten *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 4); VipsImage *in; int i; gboolean black; VipsBandFormat original_format; if (VIPS_OBJECT_CLASS(vips_flatten_parent_class)->build(object)) return -1; in = flatten->in; if (vips_image_decode(in, &t[0])) return -1; in = t[0]; /* Trivial case: fall back to copy(). */ if (in->Bands == 1) return vips_image_write(in, conversion->out); if (vips_check_noncomplex(class->nickname, in)) return -1; /* Is max-alpha unset? Default to the correct value for this * interpretation. */ if (!vips_object_argument_isset(object, "max_alpha")) flatten->max_alpha = vips_interpretation_max_alpha(in->Type); /* Is max_alpha less than the numeric range of this image? If it is, * we can get int overflow. * * This is not a common case, so efficiency is not so important. * Cast to double, then cast back to the input type right at the end. */ original_format = VIPS_FORMAT_NOTSET; if (vips_band_format_isint(in->BandFmt) && flatten->max_alpha < vips_image_get_format_max(in->BandFmt)) { original_format = in->BandFmt; if (vips_cast(in, &t[1], VIPS_FORMAT_DOUBLE, NULL)) return -1; in = t[1]; } t[2] = vips_image_new(); if (vips_image_pipelinev(t[2], VIPS_DEMAND_STYLE_THINSTRIP, in, NULL)) return -1; t[2]->Bands -= 1; /* Is the background black? We have a special path for this. */ black = TRUE; for (i = 0; i < VIPS_AREA(flatten->background)->n; i++) { const double *background = vips_array_double_get(flatten->background, NULL); if (background[i] != 0.0) { black = FALSE; break; } } if (black) { if (vips_image_generate(t[2], vips_start_one, vips_flatten_black_gen, vips_stop_one, in, flatten)) return -1; in = t[2]; } else { /* Convert the background to the image's format. */ if (!(flatten->ink = vips__vector_to_ink(class->nickname, t[2], VIPS_AREA(flatten->background)->data, NULL, VIPS_AREA(flatten->background)->n))) return -1; if (vips_image_generate(t[2], vips_start_one, vips_flatten_gen, vips_stop_one, in, flatten)) return -1; in = t[2]; } if (original_format != VIPS_FORMAT_NOTSET) { if (vips_cast(in, &t[3], original_format, NULL)) return -1; in = t[3]; } if (vips_image_write(in, conversion->out)) return -1; return 0; } static void vips_flatten_class_init(VipsFlattenClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VIPS_DEBUG_MSG("vips_flatten_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "flatten"; vobject_class->description = _("flatten alpha out of an image"); vobject_class->build = vips_flatten_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsFlatten, in)); VIPS_ARG_BOXED(class, "background", 2, _("Background"), _("Background value"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsFlatten, background), VIPS_TYPE_ARRAY_DOUBLE); VIPS_ARG_DOUBLE(class, "max_alpha", 115, _("Maximum alpha"), _("Maximum value of alpha channel"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsFlatten, max_alpha), 0, 100000000, 255); } static void vips_flatten_init(VipsFlatten *flatten) { flatten->background = vips_array_double_newv(1, 0.0); flatten->max_alpha = 255.0; } /** * vips_flatten: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @background: #VipsArrayDouble colour for new pixels * * @max_alpha: %gdouble, maximum value for alpha * * Take the last band of @in as an alpha and use it to blend the * remaining channels with @background. * * The alpha channel is 0 - @max_alpha, where @max_alpha means 100% image * and 0 means 100% background. @background defaults to zero (black). * * @max_alpha has the default value 255, or 65535 for images tagged as * #VIPS_INTERPRETATION_RGB16 or * #VIPS_INTERPRETATION_GREY16. * * Useful for flattening PNG images to RGB. * * Non-complex images only. * * See also: vips_premultiply(), vips_pngload(). * * Returns: 0 on success, -1 on error */ int vips_flatten(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("flatten", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/flip.c000066400000000000000000000133171454007373500202260ustar00rootroot00000000000000/* flip left/right and up/down * * Copyright: 1990, N. Dessipris * Written on: 28/10/91 * Updated on: * 19/7/93 JC * - now allows IM_CODING_LABQ too * - yuk! needs rewriting * 21/12/94 JC * - rewritten * 14/4/04 * - sets Xoffset / Yoffset * 24/3/09 * - added IM_CODING_RAD support * 29/1/10 * - cleanups * - gtkdoc * 17/10/11 * - redone as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pconversion.h" typedef struct _VipsFlip { VipsConversion parent_instance; /* The input image. */ VipsImage *in; /* Left-right or up-down. */ VipsDirection direction; } VipsFlip; typedef VipsConversionClass VipsFlipClass; G_DEFINE_TYPE(VipsFlip, vips_flip, VIPS_TYPE_CONVERSION); static int vips_flip_vertical_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsRect *r = &out_region->valid; VipsRect in; VipsPel *p, *q; int y; int le = r->left; int to = r->top; int bo = VIPS_RECT_BOTTOM(r); int ls; int psk, qsk; /* Transform to input coordinates. */ in = *r; in.top = ir->im->Ysize - bo; /* Ask for input we need. */ if (vips_region_prepare(ir, &in)) return -1; /* Loop, copying and reversing lines. */ p = VIPS_REGION_ADDR(ir, le, in.top + in.height - 1); q = VIPS_REGION_ADDR(out_region, le, to); psk = VIPS_REGION_LSKIP(ir); qsk = VIPS_REGION_LSKIP(out_region); ls = VIPS_REGION_SIZEOF_LINE(out_region); for (y = to; y < bo; y++) { memcpy(q, p, ls); p -= psk; q += qsk; } return 0; } static int vips_flip_horizontal_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsRect *r = &out_region->valid; VipsRect in; VipsPel *p, *q; int x, y, z; int le = r->left; int ri = VIPS_RECT_RIGHT(r); int to = r->top; int bo = VIPS_RECT_BOTTOM(r); int ps = VIPS_IMAGE_SIZEOF_PEL(ir->im); /* sizeof pel */ int hgt = ir->im->Xsize - r->width; int lastx; /* Transform to input coordinates. */ in = *r; in.left = hgt - r->left; /* Find x of final pixel in input area. */ lastx = VIPS_RECT_RIGHT(&in) - 1; /* Ask for input we need. */ if (vips_region_prepare(ir, &in)) return -1; /* Loop, copying and reversing lines. */ for (y = to; y < bo; y++) { p = VIPS_REGION_ADDR(ir, lastx, y); q = VIPS_REGION_ADDR(out_region, le, y); for (x = le; x < ri; x++) { /* Copy the pel. */ for (z = 0; z < ps; z++) q[z] = p[z]; /* Skip forwards in out, back in in. */ q += ps; p -= ps; } } return 0; } static int vips_flip_build(VipsObject *object) { VipsConversion *conversion = VIPS_CONVERSION(object); VipsFlip *flip = (VipsFlip *) object; VipsGenerateFn generate_fn; if (VIPS_OBJECT_CLASS(vips_flip_parent_class)->build(object)) return -1; if (vips_image_pio_input(flip->in)) return -1; if (vips_image_pipelinev(conversion->out, VIPS_DEMAND_STYLE_THINSTRIP, flip->in, NULL)) return -1; if (flip->direction == VIPS_DIRECTION_HORIZONTAL) { generate_fn = vips_flip_horizontal_gen; conversion->out->Xoffset = flip->in->Xsize; conversion->out->Yoffset = 0; } else { generate_fn = vips_flip_vertical_gen; conversion->out->Xoffset = 0; conversion->out->Yoffset = flip->in->Ysize; } if (vips_image_generate(conversion->out, vips_start_one, generate_fn, vips_stop_one, flip->in, flip)) return -1; return 0; } static void vips_flip_class_init(VipsFlipClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VIPS_DEBUG_MSG("vips_flip_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "flip"; vobject_class->description = _("flip an image"); vobject_class->build = vips_flip_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsFlip, in)); VIPS_ARG_ENUM(class, "direction", 6, _("Direction"), _("Direction to flip image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsFlip, direction), VIPS_TYPE_DIRECTION, VIPS_DIRECTION_HORIZONTAL); } static void vips_flip_init(VipsFlip *flip) { } /** * vips_flip: (method) * @in: input image * @out: (out): output image * @direction: flip horizontally or vertically * @...: %NULL-terminated list of optional named arguments * * Flips an image left-right or up-down. * * See also: vips_rot(). * * Returns: 0 on success, -1 on error */ int vips_flip(VipsImage *in, VipsImage **out, VipsDirection direction, ...) { va_list ap; int result; va_start(ap, direction); result = vips_call_split("flip", ap, in, out, direction); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/gamma.c000066400000000000000000000107371454007373500203610ustar00rootroot00000000000000/* Raise an image to a gamma factor * * Copyright: 1990, N. Dessipris. * * Written on: 19/07/1990 * Modified on: * 19/6/95 JC * - redone as library function * 23/3/10 * - gtkdoc * - 16 bit as well * 1/8/13 * - redone as a class * 11/11/13 * - any format * - calculate pow(1/exp) rather than pow(exp) to be consistent with * other packages */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include "pconversion.h" typedef struct _VipsGamma { VipsConversion parent_instance; VipsImage *in; double exponent; } VipsGamma; typedef VipsConversionClass VipsGammaClass; G_DEFINE_TYPE(VipsGamma, vips_gamma, VIPS_TYPE_CONVERSION); /* For each input format, what we normalise the pow() about. */ static double vips_gamma_maxval[10] = { /* UC */ UCHAR_MAX, /* C */ SCHAR_MAX, /* US */ USHRT_MAX, /* S */ SHRT_MAX, /* UI */ UINT_MAX, /* I */ INT_MAX, /* F */ 1.0, /* X */ 1.0, /* D */ 1.0, /* DX */ 1.0 }; static int vips_gamma_build(VipsObject *object) { VipsConversion *conversion = VIPS_CONVERSION(object); VipsGamma *gamma = (VipsGamma *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 5); VipsImage *in = gamma->in; double scale; if (VIPS_OBJECT_CLASS(vips_gamma_parent_class)->build(object)) return -1; scale = pow(vips_gamma_maxval[in->BandFmt], 1.0 / gamma->exponent) / vips_gamma_maxval[in->BandFmt]; if (in->BandFmt == VIPS_FORMAT_UCHAR || in->BandFmt == VIPS_FORMAT_USHORT) { if (vips_identity(&t[0], "ushort", in->BandFmt == VIPS_FORMAT_USHORT, NULL) || vips_pow_const1(t[0], &t[1], 1.0 / gamma->exponent, NULL) || vips_linear1(t[1], &t[2], 1.0 / scale, 0, NULL) || vips_cast(t[2], &t[3], in->BandFmt, NULL) || vips_maplut(in, &t[4], t[3], NULL) || vips_image_write(t[4], conversion->out)) return -1; } else { if (vips_pow_const1(in, &t[1], 1.0 / gamma->exponent, NULL) || vips_linear1(t[1], &t[2], 1.0 / scale, 0, NULL) || vips_cast(t[2], &t[3], in->BandFmt, NULL) || vips_image_write(t[3], conversion->out)) return -1; } return 0; } static void vips_gamma_class_init(VipsGammaClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "gamma"; vobject_class->description = _("gamma an image"); vobject_class->build = vips_gamma_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsGamma, in)); VIPS_ARG_DOUBLE(class, "exponent", 2, _("Exponent"), _("Gamma factor"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsGamma, exponent), 0.000001, 1000.0, 2.4); } static void vips_gamma_init(VipsGamma *gamma) { gamma->exponent = 1.0 / 2.4; } /** * vips_gamma: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @exponent: gamma, default 1.0 / 2.4 * * Calculate @in ** (1 / @exponent), normalising to the maximum range of the * input type. For float types use 1.0 as the maximum. * * See also: vips_identity(), vips_pow_const1(), vips_maplut() * * Returns: 0 on success, -1 on error */ int vips_gamma(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("gamma", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/grid.c000066400000000000000000000146561454007373500202300ustar00rootroot00000000000000/* vips_grid * * 4/8/05 * 7/9/05 * - oops, clipping was wrong * 30/1/10 * - gtkdoc * - small cleanups * 30/5/13 * - redo as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pconversion.h" typedef struct _VipsGrid { VipsConversion parent_instance; VipsImage *in; int tile_height; int across; int down; } VipsGrid; typedef VipsConversionClass VipsGridClass; G_DEFINE_TYPE(VipsGrid, vips_grid, VIPS_TYPE_CONVERSION); static int vips_grid_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) vseq; VipsGrid *grid = (VipsGrid *) b; VipsRect *r = &out_region->valid; int twidth = grid->in->Xsize; int theight = grid->tile_height; int x, y; VipsRect tile; /* Find top left of tiles we need. */ int xs = (r->left / twidth) * twidth; int ys = (r->top / theight) * theight; /* The tile enclosing the top-left corner of the requested area. */ tile.left = xs; tile.top = ys; tile.width = twidth; tile.height = theight; /* If the request fits inside a single tile, we can just pointer-copy. */ if (vips_rect_includesrect(&tile, r)) { VipsRect irect; /* Translate request to input space. */ irect = *r; irect.left -= xs; irect.top -= ys; irect.top += grid->across * ys + theight * (xs / twidth); if (vips_region_prepare(ir, &irect) || vips_region_region(out_region, ir, r, irect.left, irect.top)) return -1; return 0; } for (y = ys; y < VIPS_RECT_BOTTOM(r); y += theight) for (x = xs; x < VIPS_RECT_RIGHT(r); x += twidth) { VipsRect paint; VipsRect input; /* Whole tile at x, y */ tile.left = x; tile.top = y; tile.width = twidth; tile.height = theight; /* Which parts touch the area of the output we are * building. */ vips_rect_intersectrect(&tile, r, &paint); g_assert(!vips_rect_isempty(&paint)); /* Translate back to ir coordinates. */ input = paint; input.left -= x; input.top -= y; input.top += grid->across * y + theight * (x / twidth); /* Render into out_region. */ if (vips_region_prepare_to(ir, out_region, &input, paint.left, paint.top)) return -1; } return 0; } static int vips_grid_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsConversion *conversion = VIPS_CONVERSION(object); VipsGrid *grid = (VipsGrid *) object; if (VIPS_OBJECT_CLASS(vips_grid_parent_class)->build(object)) return -1; if (vips_check_coding_known(class->nickname, grid->in) || vips_image_pio_input(grid->in)) return -1; if (grid->in->Ysize % grid->tile_height != 0 || grid->in->Ysize / grid->tile_height != grid->across * grid->down) { vips_error(class->nickname, "%s", _("bad grid geometry")); return -1; } /* We can render small tiles with pointer copies. */ if (vips_image_pipelinev(conversion->out, VIPS_DEMAND_STYLE_SMALLTILE, grid->in, NULL)) return -1; conversion->out->Xsize = grid->in->Xsize * grid->across; conversion->out->Ysize = grid->tile_height * grid->down; if (vips_image_generate(conversion->out, vips_start_one, vips_grid_gen, vips_stop_one, grid->in, grid)) return -1; return 0; } static void vips_grid_class_init(VipsGridClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "grid"; vobject_class->description = _("grid an image"); vobject_class->build = vips_grid_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsGrid, in)); VIPS_ARG_INT(class, "tile_height", 3, _("Tile height"), _("Chop into tiles this high"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsGrid, tile_height), 1, 10000000, 128); VIPS_ARG_INT(class, "across", 4, _("Across"), _("Number of tiles across"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsGrid, across), 1, 10000000, 1); VIPS_ARG_INT(class, "down", 5, _("Down"), _("Number of tiles down"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsGrid, down), 1, 10000000, 1); } static void vips_grid_init(VipsGrid *grid) { grid->tile_height = 128; grid->across = 1; grid->down = 1; } /** * vips_grid: (method) * @in: input image * @out: (out): output image * @tile_height: chop into tiles this high * @across: tiles across * @down: tiles down * @...: %NULL-terminated list of optional named arguments * * Chop a tall thin image up into a set of tiles, lay the tiles out in a grid. * * The input image should be a very tall, thin image containing a list of * smaller images. Volumetric or time-sequence images are often laid out like * this. This image is chopped into a series of tiles, each @tile_height * pixels high and the width of @in. The tiles are then rearranged into a grid * @across tiles across and @down tiles down in row-major order. * * Supplying @tile_height, @across and @down is not strictly necessary, we * only really need two of these. Requiring three is a double-check that the * image has the expected geometry. * * See also: vips_embed(), vips_insert(), vips_join(). * * Returns: 0 on success, -1 on error */ int vips_grid(VipsImage *in, VipsImage **out, int tile_height, int across, int down, ...) { va_list ap; int result; va_start(ap, down); result = vips_call_split("grid", ap, in, out, tile_height, across, down); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/ifthenelse.c000066400000000000000000000330511454007373500214170ustar00rootroot00000000000000/* ifthenelse.c --- use a condition image to join two images together * * Modified: * 9/2/95 JC * - partialed and ANSIfied * 11/9/95 JC * - return( 0 ) missing! oops * 15/4/05 * - now just evals left/right if all zero/all one * 7/10/06 * - set THINSTRIP * 23/9/09 * - gtkdoc comment * 23/9/09 * - use im_check*() * - allow many-band conditional and single-band a/b * - allow a/b to differ in format and bands * 25/6/10 * - let the conditional image be any format by adding a (!=0) if * necessary * 17/5/11 * - added sizealike * 14/11/11 * - redone as a class * 19/4/12 * - fix blend * - small blend speedup */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pconversion.h" typedef struct _VipsIfthenelse { VipsConversion parent_instance; /* Params. */ VipsImage *cond; VipsImage *in1; VipsImage *in2; gboolean blend; } VipsIfthenelse; typedef VipsConversionClass VipsIfthenelseClass; G_DEFINE_TYPE(VipsIfthenelse, vips_ifthenelse, VIPS_TYPE_CONVERSION); #define IBLEND1(TYPE) \ { \ TYPE *a = (TYPE *) ap; \ TYPE *b = (TYPE *) bp; \ TYPE *q = (TYPE *) qp; \ \ for (i = 0, x = 0; x < n; i++, x += bands) { \ const int v = c[i]; \ \ for (z = x; z < x + bands; z++) \ q[z] = (v * a[z] + (255 - v) * b[z] + 128) / 255; \ } \ } #define IBLENDN(TYPE) \ { \ TYPE *a = (TYPE *) ap; \ TYPE *b = (TYPE *) bp; \ TYPE *q = (TYPE *) qp; \ \ for (x = 0; x < n; x += bands) { \ for (z = x; z < x + bands; z++) { \ const int v = c[z]; \ \ q[z] = (v * a[z] + (255 - v) * b[z] + 128) / 255; \ } \ } \ } #define FBLEND1(TYPE) \ { \ TYPE *a = (TYPE *) ap; \ TYPE *b = (TYPE *) bp; \ TYPE *q = (TYPE *) qp; \ \ for (i = 0, x = 0; x < n; i++, x += bands) { \ const double v = c[i] / 255.0; \ \ for (z = x; z < x + bands; z++) \ q[z] = v * a[z] + (1.0 - v) * b[z]; \ } \ } #define FBLENDN(TYPE) \ { \ TYPE *a = (TYPE *) ap; \ TYPE *b = (TYPE *) bp; \ TYPE *q = (TYPE *) qp; \ \ for (x = 0; x < n; x += bands) { \ for (z = x; z < x + bands; z++) { \ const double v = c[z] / 255.0; \ \ q[z] = v * a[z] + (1.0 - v) * b[z]; \ } \ } \ } #define CBLEND1(TYPE) \ { \ TYPE *a = (TYPE *) ap; \ TYPE *b = (TYPE *) bp; \ TYPE *q = (TYPE *) qp; \ \ for (i = 0, x = 0; x < n; i++, x += bands) { \ const double v = c[i] / 255.0; \ \ for (z = x; z < x + 2 * bands; z++) \ q[z] = v * a[z] + (1.0 - v) * b[z]; \ } \ } #define CBLENDN(TYPE) \ { \ TYPE *a = (TYPE *) ap; \ TYPE *b = (TYPE *) bp; \ TYPE *q = (TYPE *) qp; \ \ for (x = 0; x < n; x += bands) { \ for (z = x; z < x + bands; z++) { \ const double v = c[z] / 255.0; \ \ q[2 * z] = v * a[2 * z] + (1.0 - v) * b[2 * z]; \ q[2 * z + 1] = v * a[2 * z + 1] + \ (1.0 - v) * b[2 * z + 1]; \ } \ } \ } /* Blend with a 1-band conditional image. */ static void vips_blend1_buffer(VipsPel *qp, VipsPel *c, VipsPel *ap, VipsPel *bp, int width, VipsImage *im) { int i, x, z; const int bands = im->Bands; const int n = width * bands; switch (im->BandFmt) { case VIPS_FORMAT_UCHAR: IBLEND1(unsigned char); break; case VIPS_FORMAT_CHAR: IBLEND1(signed char); break; case VIPS_FORMAT_USHORT: IBLEND1(unsigned short); break; case VIPS_FORMAT_SHORT: IBLEND1(signed short); break; case VIPS_FORMAT_UINT: IBLEND1(unsigned int); break; case VIPS_FORMAT_INT: IBLEND1(signed int); break; case VIPS_FORMAT_FLOAT: FBLEND1(float); break; case VIPS_FORMAT_DOUBLE: FBLEND1(double); break; case VIPS_FORMAT_COMPLEX: CBLEND1(float); break; case VIPS_FORMAT_DPCOMPLEX: CBLEND1(double); break; default: g_assert_not_reached(); } } /* Blend with a many band conditional image. */ static void vips_blendn_buffer(VipsPel *qp, VipsPel *c, VipsPel *ap, VipsPel *bp, int width, VipsImage *im) { int x, z; const int bands = im->Bands; const int n = width * bands; switch (im->BandFmt) { case VIPS_FORMAT_UCHAR: IBLENDN(unsigned char); break; case VIPS_FORMAT_CHAR: IBLENDN(signed char); break; case VIPS_FORMAT_USHORT: IBLENDN(unsigned short); break; case VIPS_FORMAT_SHORT: IBLENDN(signed short); break; case VIPS_FORMAT_UINT: IBLENDN(unsigned int); break; case VIPS_FORMAT_INT: IBLENDN(signed int); break; case VIPS_FORMAT_FLOAT: FBLENDN(float); break; case VIPS_FORMAT_DOUBLE: FBLENDN(double); break; case VIPS_FORMAT_COMPLEX: CBLENDN(float); break; case VIPS_FORMAT_DPCOMPLEX: CBLENDN(double); break; default: g_assert_not_reached(); } } static int vips_blend_gen(VipsRegion *out_region, void *seq, void *client1, void *client2, gboolean *stop) { VipsRegion **ir = (VipsRegion **) seq; VipsRect *r = &out_region->valid; int le = r->left; int to = r->top; int bo = VIPS_RECT_BOTTOM(r); VipsImage *c = ir[2]->im; VipsImage *a = ir[0]->im; int x, y; int all0, all255; if (vips_region_prepare(ir[2], r)) return -1; /* Is the conditional all zero or all 255? We can avoid asking * for one of the inputs to be calculated. */ all0 = *VIPS_REGION_ADDR(ir[2], le, to) == 0; all255 = *VIPS_REGION_ADDR(ir[2], le, to) == 255; for (y = to; y < bo; y++) { VipsPel *p = VIPS_REGION_ADDR(ir[2], le, y); int width = r->width * c->Bands; for (x = 0; x < width; x++) { all0 &= p[x] == 0; all255 &= p[x] == 255; } if (!all0 && !all255) break; } if (all255) { /* All 255. Point or at the then image. */ if (vips_region_prepare(ir[0], r) || vips_region_region(out_region, ir[0], r, r->left, r->top)) return -1; } else if (all0) { /* All zero. Point or at the else image. */ if (vips_region_prepare(ir[1], r) || vips_region_region(out_region, ir[1], r, r->left, r->top)) return -1; } else { /* Mix of set and clear ... ask for both then and else parts * and interleave. * * We can't use vips_reorder_prepare_many() since we always * want the c image first. */ if (vips_region_prepare(ir[0], r) || vips_region_prepare(ir[1], r)) return -1; for (y = to; y < bo; y++) { VipsPel *ap = VIPS_REGION_ADDR(ir[0], le, y); VipsPel *bp = VIPS_REGION_ADDR(ir[1], le, y); VipsPel *cp = VIPS_REGION_ADDR(ir[2], le, y); VipsPel *q = VIPS_REGION_ADDR(out_region, le, y); if (c->Bands == 1) vips_blend1_buffer(q, cp, ap, bp, r->width, a); else vips_blendn_buffer(q, cp, ap, bp, r->width, a); } } return 0; } static int vips_ifthenelse_gen(VipsRegion *out_region, void *seq, void *client1, void *client2, gboolean *stop) { VipsRegion **ir = (VipsRegion **) seq; VipsRect *r = &out_region->valid; int le = r->left; int to = r->top; int bo = VIPS_RECT_BOTTOM(r); VipsImage *c = ir[2]->im; VipsImage *a = ir[0]->im; int size, width; int i, x, y, z; int all0, alln0; if (c->Bands == 1) { /* Copying PEL-sized units with a one-band conditional. */ size = VIPS_IMAGE_SIZEOF_PEL(a); width = r->width; } else { /* Copying ELEMENT sized-units with an n-band conditional. */ size = VIPS_IMAGE_SIZEOF_ELEMENT(a); width = r->width * a->Bands; } if (vips_region_prepare(ir[2], r)) return -1; /* Is the conditional all zero or all non-zero? We can avoid asking * for one of the inputs to be calculated. */ all0 = *VIPS_REGION_ADDR(ir[2], le, to) == 0; alln0 = *VIPS_REGION_ADDR(ir[2], le, to) != 0; for (y = to; y < bo; y++) { VipsPel *p = VIPS_REGION_ADDR(ir[2], le, y); for (x = 0; x < width; x++) { all0 &= p[x] == 0; alln0 &= p[x] != 0; } if (!all0 && !alln0) break; } if (alln0) { /* All non-zero. Point or at the then image. */ if (vips_region_prepare(ir[0], r) || vips_region_region(out_region, ir[0], r, r->left, r->top)) return -1; } else if (all0) { /* All zero. Point or at the else image. */ if (vips_region_prepare(ir[1], r) || vips_region_region(out_region, ir[1], r, r->left, r->top)) return -1; } else { /* Mix of set and clear ... ask for both then and else parts * and interleave. */ if (vips_region_prepare(ir[0], r) || vips_region_prepare(ir[1], r)) return -1; for (y = to; y < bo; y++) { VipsPel *ap = VIPS_REGION_ADDR(ir[0], le, y); VipsPel *bp = VIPS_REGION_ADDR(ir[1], le, y); VipsPel *cp = VIPS_REGION_ADDR(ir[2], le, y); VipsPel *q = VIPS_REGION_ADDR(out_region, le, y); for (x = 0, i = 0; i < width; i++, x += size) if (cp[i]) for (z = x; z < x + size; z++) q[z] = ap[z]; else for (z = x; z < x + size; z++) q[z] = bp[z]; } } return 0; } static int vips_ifthenelse_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsConversion *conversion = VIPS_CONVERSION(object); VipsIfthenelse *ifthenelse = (VipsIfthenelse *) object; VipsGenerateFn generate_fn = ifthenelse->blend ? vips_blend_gen : vips_ifthenelse_gen; VipsImage **band = (VipsImage **) vips_object_local_array(object, 3); VipsImage **size = (VipsImage **) vips_object_local_array(object, 3); VipsImage **format = (VipsImage **) vips_object_local_array(object, 3); VipsImage *all[3]; if (VIPS_OBJECT_CLASS(vips_ifthenelse_parent_class)->build(object)) return -1; /* We have to have the condition image last since we want the output * image to inherit its properties from the then/else parts. */ all[0] = ifthenelse->in1; all[1] = ifthenelse->in2; all[2] = ifthenelse->cond; /* No need to check input images, sizealike and friends will do this * for us. */ /* Cast our input images up to a common bands and size. */ if (vips__bandalike_vec(class->nickname, all, band, 3, 0) || vips__sizealike_vec(band, size, 3)) return -1; /* Condition is cast to uchar, then/else to a common type. */ if (size[2]->BandFmt != VIPS_FORMAT_UCHAR) { if (vips_cast(size[2], &format[2], VIPS_FORMAT_UCHAR, NULL)) return -1; } else { format[2] = size[2]; g_object_ref(format[2]); } if (vips__formatalike_vec(size, format, 2)) return -1; if (vips_image_pipeline_array(conversion->out, VIPS_DEMAND_STYLE_SMALLTILE, format)) return -1; if (vips_image_generate(conversion->out, vips_start_many, generate_fn, vips_stop_many, format, ifthenelse)) return -1; return 0; } static void vips_ifthenelse_class_init(VipsIfthenelseClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VIPS_DEBUG_MSG("vips_ifthenelse_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "ifthenelse"; vobject_class->description = _("ifthenelse an image"); vobject_class->build = vips_ifthenelse_build; VIPS_ARG_IMAGE(class, "cond", -2, _("Condition"), _("Condition input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsIfthenelse, cond)); VIPS_ARG_IMAGE(class, "in1", -1, _("Then image"), _("Source for TRUE pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsIfthenelse, in1)); VIPS_ARG_IMAGE(class, "in2", 0, _("Else image"), _("Source for FALSE pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsIfthenelse, in2)); VIPS_ARG_BOOL(class, "blend", 4, _("Blend"), _("Blend smoothly between then and else parts"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsIfthenelse, blend), FALSE); } static void vips_ifthenelse_init(VipsIfthenelse *ifthenelse) { } /** * vips_ifthenelse: * @cond: condition #VipsImage * @in1: then #VipsImage * @in2: else #VipsImage * @out: (out): output #VipsImage * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @blend: blend smoothly between @in1 and @in2 * * This operation scans the condition image @cond * and uses it to select pixels from either the then image @in1 or the else * image @in2. Non-zero means @in1, 0 means @in2. * * Any image can have either 1 band or n bands, where n is the same for all * the non-1-band images. Single band images are then effectively copied to * make n-band images. * * Images @in1 and @in2 are cast up to the smallest common format. @cond is * cast to uchar. * * If the images differ in size, the smaller images are enlarged to match the * largest by adding zero pixels along the bottom and right. * * If @blend is %TRUE, then values in @out are smoothly blended between @in1 * and @in2 using the formula: * * @out = (@cond / 255) * @in1 + (1 - @cond / 255) * @in2 * * See also: vips_equal(). * * Returns: 0 on success, -1 on error */ int vips_ifthenelse(VipsImage *cond, VipsImage *in1, VipsImage *in2, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("ifthenelse", ap, cond, in1, in2, out); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/insert.c000066400000000000000000000333001454007373500205720ustar00rootroot00000000000000/* VipsInsert * * Copyright: 1990, J. Cupitt * * Author: J. Cupitt * Written on: 02/08/1990 * Modified on : * 31/8/93 JC * - ANSIfied * - Nicos' reformatting undone. Grr! * 22/12/94 * - modernised * - now does IM_CODING_LABQ too * 22/6/95 JC * - partialized * 10/2/02 JC * - adapted for im_prepare_to() stuff * 14/4/04 * - sets Xoffset / Yoffset * 3/7/06 * - add sanity range checks * 24/3/09 * - added IM_CODING_RAD support * 30/1/10 * - cleanups * - formatalike/bandalike * - gtkdoc * 29/9/11 * - rewrite as a class * - add expand, bg options * 5/11/21 * - add minimise for seq pipelines */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "pconversion.h" typedef struct _VipsInsert { VipsConversion parent_instance; /* Params. */ VipsImage *main; VipsImage *sub; int x; int y; gboolean expand; VipsArrayDouble *background; /* Pixel we paint calculated from background. */ VipsPel *ink; /* Inputs cast and banded up, plus a NULL at the end. main is 0, sub * is 1. */ VipsImage *processed[3]; /* Geometry. */ VipsRect rout; /* Output space */ VipsRect rimage[2]; /* Position of input in output */ /* TRUE if we've minimised an input. */ gboolean minimised[2]; } VipsInsert; typedef VipsConversionClass VipsInsertClass; G_DEFINE_TYPE(VipsInsert, vips_insert, VIPS_TYPE_CONVERSION); /* Trivial case: we just need pels from one of the inputs. * * Also used by vips_arrayjoin. */ int vips__insert_just_one(VipsRegion *out_region, VipsRegion *ir, int x, int y) { VipsRect need; /* Find the part of pos we need. */ need = out_region->valid; need.left -= x; need.top -= y; if (vips_region_prepare(ir, &need)) return -1; /* Attach our output to it. */ if (vips_region_region(out_region, ir, &out_region->valid, need.left, need.top)) return -1; return 0; } /* Paste in parts of ir that fall within out_region --- ir is an input REGION * for an image positioned at pos within out_region. * * Also used by vips_arrayjoin. */ int vips__insert_paste_region(VipsRegion *out_region, VipsRegion *ir, VipsRect *pos) { VipsRect ovl; /* Does any of the sub-image appear in the area we have been asked * to make? */ vips_rect_intersectrect(&out_region->valid, pos, &ovl); if (!vips_rect_isempty(&ovl)) { /* Find the part of in we need. */ ovl.left -= pos->left; ovl.top -= pos->top; /* Paint this area of pixels into out_region. */ if (vips_region_prepare_to(ir, out_region, &ovl, ovl.left + pos->left, ovl.top + pos->top)) return -1; } return 0; } static int vips_insert_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion **ir = (VipsRegion **) seq; VipsRect *r = &out_region->valid; VipsInsert *insert = (VipsInsert *) b; VipsConversion *conversion = VIPS_CONVERSION(insert); int i; /* Three cases: * * 1. If r is entirely within sub, we can just paint from sub. * 2. If r is entirely within main and does not touch sub, we can * paint from main. * 3. We must paint from both, and the background. */ if (vips_rect_includesrect(&insert->rimage[1], r)) { /* Just the subimage. */ if (vips__insert_just_one(out_region, ir[1], insert->rimage[1].left, insert->rimage[1].top)) return -1; } else if (vips_rect_includesrect(&insert->rimage[0], r) && !vips_rect_overlapsrect(&insert->rimage[1], r)) { /* Just the main image. */ if (vips__insert_just_one(out_region, ir[0], insert->rimage[0].left, insert->rimage[0].top)) return -1; } else { /* Output requires both (or neither) input. If it is not * entirely inside both the main and the sub, then there is * going to be some background. */ vips_region_paint_pel(out_region, r, insert->ink); /* Paste the background first. */ for (i = 0; i < 2; i++) if (vips__insert_paste_region(out_region, ir[i], &insert->rimage[i])) return -1; } /* See arrayjoin for almost this code again. Move into conversion.c? */ if (vips_image_is_sequential(conversion->out)) for (i = 0; i < 2; i++) { int bottom_edge = VIPS_RECT_BOTTOM(&insert->rimage[i]); /* 1024 is a generous margin. 256 is too small. */ if (!insert->minimised[i] && r->top > bottom_edge + 1024) { insert->minimised[i] = TRUE; vips_image_minimise_all(insert->processed[i]); } } return 0; } /* Make a pair of vector constants into a set of formatted pixels. bands can * be 3 while n is 1, meaning expand the constant to the number of bands. * imag can be NULL, meaning all zero for the imaginary component. */ VipsPel * vips__vector_to_pels(const char *domain, int bands, VipsBandFormat format, VipsCoding coding, double *real, double *imag, int n) { /* Run our pipeline relative to this. */ VipsImage *context = vips_image_new(); VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(context), 8); VipsImage *in; double *ones; VipsPel *result; int i; #ifdef VIPS_DEBUG printf("vips__vector_to_pels: starting\n"); #endif /*VIPS_DEBUG*/ ones = VIPS_ARRAY(context, n, double); for (i = 0; i < n; i++) ones[i] = 1.0; /* Make the real and imaginary parts. */ if (vips_black(&t[0], 1, 1, "bands", bands, NULL) || vips_linear(t[0], &t[1], ones, real, n, NULL)) { g_object_unref(context); return NULL; } in = t[1]; if (imag) { if (vips_black(&t[2], 1, 1, "bands", bands, NULL) || vips_linear(t[2], &t[3], ones, imag, n, NULL) || vips_complexform(in, t[3], &t[4], NULL)) { g_object_unref(context); return NULL; } in = t[4]; } /* Cast to the output type and coding. */ if (vips_cast(in, &t[5], format, NULL) || vips_image_encode(t[5], &t[6], coding)) { g_object_unref(context); return NULL; } in = t[6]; /* Write to memory, copy to output buffer. */ vips_image_set_int(in, "hide-progress", 1); if (!(t[7] = vips_image_new_memory()) || vips_image_write(in, t[7])) { g_object_unref(context); return NULL; } in = t[7]; if (!(result = VIPS_ARRAY(NULL, VIPS_IMAGE_SIZEOF_PEL(in), VipsPel))) { g_object_unref(context); return NULL; } memcpy(result, in->data, VIPS_IMAGE_SIZEOF_PEL(in)); #ifdef VIPS_DEBUG { int i; printf("vips__vector_to_ink:\n"); printf("\t(real, imag) = "); for (i = 0; i < n; i++) printf("(%g, %g) ", real[i], imag ? imag[i] : 0); printf("\n"); printf("\tink = "); for (i = 0; i < VIPS_IMAGE_SIZEOF_PEL(in); i++) printf("%d ", result[i]); printf("\n"); } #endif /*VIPS_DEBUG*/ g_object_unref(context); return result; } static void vips__vector_to_ink_cb(VipsObject *object, char *buf) { g_free(buf); } /* Calculate a pixel for an image from a vec of double. Valid while im is * valid. */ VipsPel * vips__vector_to_ink(const char *domain, VipsImage *im, double *real, double *imag, int n) { int bands; VipsBandFormat format; VipsPel *result; vips_image_decode_predict(im, &bands, &format); if (!(result = vips__vector_to_pels(domain, bands, format, im->Coding, real, imag, n))) return NULL; g_signal_connect(im, "postclose", G_CALLBACK(vips__vector_to_ink_cb), result); return result; } static int vips_insert_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsConversion *conversion = VIPS_CONVERSION(object); VipsInsert *insert = (VipsInsert *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 6); if (VIPS_OBJECT_CLASS(vips_insert_parent_class)->build(object)) return -1; if (vips_image_pio_input(insert->main) || vips_image_pio_input(insert->sub) || vips_check_bands_1orn(class->nickname, insert->main, insert->sub) || vips_check_coding_known(class->nickname, insert->main) || vips_check_coding_same(class->nickname, insert->main, insert->sub)) return -1; /* Cast our input images up to a common format and bands. */ if (vips__formatalike(insert->main, insert->sub, &t[0], &t[1]) || vips__bandalike(class->nickname, t[0], t[1], &t[2], &t[3])) return -1; insert->processed[0] = t[2]; insert->processed[1] = t[3]; /* Joins can get very wide (eg. consider joining a set of tiles * horizontally to make a large image), we don't want mem use to shoot * up. SMALLTILE will guarantee we keep small and local. */ if (vips_image_pipeline_array(conversion->out, VIPS_DEMAND_STYLE_SMALLTILE, insert->processed)) return -1; /* Calculate geometry. */ insert->rimage[0].left = 0; insert->rimage[0].top = 0; insert->rimage[0].width = insert->processed[0]->Xsize; insert->rimage[0].height = insert->processed[0]->Ysize; insert->rimage[1].left = insert->x; insert->rimage[1].top = insert->y; insert->rimage[1].width = insert->processed[1]->Xsize; insert->rimage[1].height = insert->processed[1]->Ysize; if (insert->expand) { /* Expand output to bounding box of these two. */ vips_rect_unionrect(&insert->rimage[0], &insert->rimage[1], &insert->rout); /* Translate origin to top LH corner of rout. */ insert->rimage[0].left -= insert->rout.left; insert->rimage[0].top -= insert->rout.top; insert->rimage[1].left -= insert->rout.left; insert->rimage[1].top -= insert->rout.top; insert->rout.left = 0; insert->rout.top = 0; } else insert->rout = insert->rimage[0]; conversion->out->Xsize = insert->rout.width; conversion->out->Ysize = insert->rout.height; if (!(insert->ink = vips__vector_to_ink( class->nickname, conversion->out, (double *) VIPS_ARRAY_ADDR(insert->background, 0), NULL, VIPS_AREA(insert->background)->n))) return -1; if (vips_image_generate(conversion->out, vips_start_many, vips_insert_gen, vips_stop_many, insert->processed, insert)) return -1; return 0; } static void vips_insert_class_init(VipsInsertClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VIPS_DEBUG_MSG("vips_insert_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "insert"; vobject_class->description = _("insert image @sub into @main at @x, @y"); vobject_class->build = vips_insert_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "main", 0, _("Main"), _("Main input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsInsert, main)); VIPS_ARG_IMAGE(class, "sub", 1, _("Sub-image"), _("Sub-image to insert into main image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsInsert, sub)); VIPS_ARG_INT(class, "x", 3, _("X"), _("Left edge of sub in main"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsInsert, x), -VIPS_MAX_COORD, VIPS_MAX_COORD, 0); VIPS_ARG_INT(class, "y", 4, _("Y"), _("Top edge of sub in main"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsInsert, y), -VIPS_MAX_COORD, VIPS_MAX_COORD, 0); VIPS_ARG_BOOL(class, "expand", 5, _("Expand"), _("Expand output to hold all of both inputs"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsInsert, expand), FALSE); VIPS_ARG_BOXED(class, "background", 6, _("Background"), _("Color for new pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsInsert, background), VIPS_TYPE_ARRAY_DOUBLE); } static void vips_insert_init(VipsInsert *insert) { /* Init our instance fields. */ insert->background = vips_array_double_newv(1, 0.0); } /** * vips_insert: (method) * @main: big image * @sub: small image * @out: (out): output image * @x: left position of @sub * @y: top position of @sub * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @expand: expand output to hold whole of both images * * @background: colour for new pixels * * Insert @sub into @main at position @x, @y. * * Normally @out shows the whole of @main. If @expand is #TRUE then @out is * made large enough to hold all of @main and @sub. * Any areas of @out not coming from * either @main or @sub are set to @background (default 0). * * If @sub overlaps @main, * @sub will appear on top of @main. * * If the number of bands differs, one of the images * must have one band. In this case, an n-band image is formed from the * one-band image by joining n copies of the one-band image together, and then * the two n-band images are operated upon. * * The two input images are cast up to the smallest common type (see table * Smallest common format in * arithmetic). * * See also: vips_join(), vips_embed(), vips_extract_area(). * * Returns: 0 on success, -1 on error */ int vips_insert(VipsImage *main, VipsImage *sub, VipsImage **out, int x, int y, ...) { va_list ap; int result; va_start(ap, y); result = vips_call_split("insert", ap, main, sub, out, x, y); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/join.c000066400000000000000000000177531454007373500202430ustar00rootroot00000000000000/* join left-right and up-down * * Copyright 1990, 1991: Kirk Martinez, N. Dessipris * Author: Kirk Martinez, N. Dessipris * Written on: 9/6/90 * Modified on: 17/04/1991 * 31/8/93 JC * - args to memcpy() were reversed * 14/11/94 JC * - tided up and ANSIfied * - now accepts IM_CODING_LABQ * - memory leaks removed * - bug in calculation of output Xsize removed (thanks Thomson!) * - bug in checking of image compatibility fixed * 23/10/95 JC * - rewritten in terms of im_insert() * 14/4/04 * - sets Xoffset / Yoffset * 1/2/10 * - gtkdoc * - cleanups * 19/10/11 * - redone as a class * 25/8/17 * - tag as sequential */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pconversion.h" typedef struct _VipsJoin { VipsConversion parent_instance; /* Params. */ VipsImage *in1; VipsImage *in2; VipsDirection direction; gboolean expand; int shim; VipsArea *background; VipsAlign align; } VipsJoin; typedef VipsConversionClass VipsJoinClass; G_DEFINE_TYPE(VipsJoin, vips_join, VIPS_TYPE_CONVERSION); static int vips_join_build(VipsObject *object) { VipsConversion *conversion = VIPS_CONVERSION(object); VipsJoin *join = (VipsJoin *) object; int x, y; VipsImage *t; if (VIPS_OBJECT_CLASS(vips_join_parent_class)->build(object)) return -1; /* Stop compiler warnings. */ x = 0; y = 0; switch (join->direction) { case VIPS_DIRECTION_HORIZONTAL: x = join->in1->Xsize + join->shim; switch (join->align) { case VIPS_ALIGN_LOW: y = 0; break; case VIPS_ALIGN_CENTRE: y = join->in1->Ysize / 2 - join->in2->Ysize / 2; break; case VIPS_ALIGN_HIGH: y = join->in1->Ysize - join->in2->Ysize; break; default: g_assert_not_reached(); } break; case VIPS_DIRECTION_VERTICAL: y = join->in1->Ysize + join->shim; switch (join->align) { case VIPS_ALIGN_LOW: x = 0; break; case VIPS_ALIGN_CENTRE: x = join->in1->Xsize / 2 - join->in2->Xsize / 2; break; case VIPS_ALIGN_HIGH: x = join->in1->Xsize - join->in2->Xsize; break; default: g_assert_not_reached(); } break; default: g_assert_not_reached(); } if (vips_insert(join->in1, join->in2, &t, x, y, "expand", TRUE, "background", join->background, NULL)) return -1; if (!join->expand) { VipsImage *t2; int left, top, width, height; switch (join->direction) { case VIPS_DIRECTION_HORIZONTAL: left = 0; top = VIPS_MAX(0, y) - y; width = t->Xsize; height = VIPS_MIN(join->in1->Ysize, join->in2->Ysize); break; case VIPS_DIRECTION_VERTICAL: left = VIPS_MAX(0, x) - x; top = 0; width = VIPS_MIN(join->in1->Xsize, join->in2->Xsize); height = t->Ysize; break; default: g_assert_not_reached(); /* Stop compiler warnings. */ left = 0; top = 0; width = 0; height = 0; } if (left != 0 || top != 0 || width != t->Xsize || height != t->Ysize) { if (vips_extract_area(t, &t2, left, top, width, height, NULL)) { g_object_unref(t); return -1; } g_object_unref(t); t = t2; } } if (vips_image_write(t, conversion->out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } static void vips_join_class_init(VipsJoinClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VIPS_DEBUG_MSG("vips_join_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "join"; vobject_class->description = _("join a pair of images"); vobject_class->build = vips_join_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in1", 0, _("in1"), _("First input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsJoin, in1)); VIPS_ARG_IMAGE(class, "in2", 1, _("in2"), _("Second input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsJoin, in2)); VIPS_ARG_ENUM(class, "direction", 3, _("Direction"), _("Join left-right or up-down"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsJoin, direction), VIPS_TYPE_DIRECTION, VIPS_DIRECTION_HORIZONTAL); VIPS_ARG_BOOL(class, "expand", 4, _("Expand"), _("Expand output to hold all of both inputs"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsJoin, expand), FALSE); VIPS_ARG_INT(class, "shim", 5, _("Shim"), _("Pixels between images"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsJoin, shim), 0, 1000000, 0); VIPS_ARG_BOXED(class, "background", 6, _("Background"), _("Colour for new pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsJoin, background), VIPS_TYPE_ARRAY_DOUBLE); VIPS_ARG_ENUM(class, "align", 7, _("Align"), _("Align on the low, centre or high coordinate edge"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsJoin, align), VIPS_TYPE_ALIGN, VIPS_ALIGN_LOW); } static void vips_join_init(VipsJoin *join) { /* Init our instance fields. */ join->background = vips_area_new_array(G_TYPE_DOUBLE, sizeof(double), 1); ((double *) (join->background->data))[0] = 0.0; } /** * vips_join: * @in1: first input image * @in2: second input image * @out: (out): output image * @direction: join horizontally or vertically * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @expand: %TRUE to expand the output image to hold all of the input pixels * * @shim: space between images, in pixels * * @background: background ink colour * * @align: low, centre or high alignment * * Join @in1 and @in2 together, left-right or up-down depending on the value * of @direction. * * If one is taller or wider than the * other, @out will be has high as the smaller. If @expand is %TRUE, then * the output will be expanded to contain all of the input pixels. * * Use @align to set the edge that the images align on. By default, they align * on the edge with the lower value coordinate. * * Use @background to set the colour of any pixels in @out which are not * present in either @in1 or @in2. * * Use @shim to set the spacing between the images. By default this is 0. * * If the number of bands differs, one of the images * must have one band. In this case, an n-band image is formed from the * one-band image by joining n copies of the one-band image together, and then * the two n-band images are operated upon. * * The two input images are cast up to the smallest common type (see table * Smallest common format in * arithmetic). * * If you are going to be joining many thousands of images in a regular * grid, vips_arrayjoin() is a better choice. * * See also: vips_arrayjoin(), vips_insert(). * * Returns: 0 on success, -1 on error */ int vips_join(VipsImage *in1, VipsImage *in2, VipsImage **out, VipsDirection direction, ...) { va_list ap; int result; va_start(ap, direction); result = vips_call_split("join", ap, in1, in2, out, direction); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/meson.build000066400000000000000000000020271454007373500212660ustar00rootroot00000000000000conversion_sources = files( 'switch.c', 'transpose3d.c', 'composite.cpp', 'smartcrop.c', 'conversion.c', 'tilecache.c', 'gamma.c', 'sequential.c', 'flatten.c', 'premultiply.c', 'unpremultiply.c', 'byteswap.c', 'cache.c', 'copy.c', 'embed.c', 'flip.c', 'insert.c', 'join.c', 'arrayjoin.c', 'extract.c', 'replicate.c', 'cast.c', 'bandjoin.c', 'bandrank.c', 'recomb.c', 'bandmean.c', 'bandfold.c', 'bandunfold.c', 'bandbool.c', 'bandary.c', 'rot.c', 'rot45.c', 'autorot.c', 'ifthenelse.c', 'falsecolour.c', 'msb.c', 'grid.c', 'scale.c', 'wrap.c', 'subsample.c', 'zoom.c', ) conversion_headers = files( 'pconversion.h', 'bandary.h', ) libvips_sources += conversion_sources conversion_lib = static_library('conversion', conversion_sources, conversion_headers, dependencies: libvips_deps, gnu_symbol_visibility: 'hidden', ) libvips_components += conversion_lib libvips-8.15.1/libvips/conversion/msb.c000066400000000000000000000150561454007373500200570ustar00rootroot00000000000000/* vips_msb() * * Copyright: 2006, The Nottingham Trent University * * Author: Tom Vajzovic * * Written on: 2006-03-13 * 27/9/06 * - removed extra im_free() in im_copy() fallback * 4/10/06 * - removed warning on uchar fallback: it happens a lot with nip2 and * isn't very serious * 1/2/10 * - revised, cleanups * - gtkdoc * 30/5/13 * - rewrite as a class * - add --band option, remove im_msb_band() */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H */ #include #include #include "pconversion.h" #include "bandary.h" typedef struct _VipsMsb { VipsConversion parent_instance; /* Params. */ VipsImage *in; int band; /* Initial input offset. */ int offset; /* Input step. */ int instep; /* Need to convert signed to unsgned. */ gboolean sign; } VipsMsb; typedef VipsConversionClass VipsMsbClass; G_DEFINE_TYPE(VipsMsb, vips_msb, VIPS_TYPE_CONVERSION); static int vips_msb_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsMsb *msb = (VipsMsb *) b; VipsConversion *conversion = (VipsConversion *) msb; VipsRect *r = &out_region->valid; int le = r->left; int to = r->top; int bo = VIPS_RECT_BOTTOM(r); int sz = r->width * conversion->out->Bands; int x, y, i; if (vips_region_prepare(ir, r)) return -1; for (y = to; y < bo; y++) { VipsPel *p = VIPS_REGION_ADDR(ir, le, y); VipsPel *q = VIPS_REGION_ADDR(out_region, le, y); if (msb->in->Coding == VIPS_CODING_LABQ && msb->band == -1) { /* LABQ, no sub-band select. */ for (x = 0; x < r->width; x++) { q[0] = p[0]; q[1] = 0x80 ^ p[1]; q[2] = 0x80 ^ p[2]; q += 4; p += 3; } } else if (msb->sign) { /* Copy, converting signed to unsigned. */ p += msb->offset; for (i = 0; i < sz; i++) { q[i] = 0x80 ^ *p; p += msb->instep; } } else { /* Just pick out bytes. */ p += msb->offset; for (i = 0; i < sz; i++) { q[i] = *p; p += msb->instep; } } } return 0; } static int vips_msb_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsConversion *conversion = (VipsConversion *) object; VipsMsb *msb = (VipsMsb *) object; int vbands; if (VIPS_OBJECT_CLASS(vips_msb_parent_class)->build(object)) return -1; if (vips_check_coding_noneorlabq(class->nickname, msb->in) || vips_check_int(class->nickname, msb->in)) return -1; /* Effective number of bands this image has. */ vbands = msb->in->Coding == VIPS_CODING_LABQ ? 3 : msb->in->Bands; if (msb->band > vbands - 1) { vips_error(class->nickname, "%s", _("bad band")); return -1; } /* Step to next input element. */ msb->instep = VIPS_IMAGE_SIZEOF_ELEMENT(msb->in); /* Offset into first band element of high order byte. */ msb->offset = vips_amiMSBfirst() ? 0 : VIPS_IMAGE_SIZEOF_ELEMENT(msb->in) - 1; /* If we're picking out a band, they need scaling up. */ if (msb->band != -1) { msb->offset += VIPS_IMAGE_SIZEOF_ELEMENT(msb->in) * msb->band; msb->instep *= msb->in->Bands; } /* May need to flip sign if we're picking out a band from labq. */ if (msb->in->Coding == VIPS_CODING_LABQ && msb->band > 0) msb->sign = TRUE; if (msb->in->Coding == VIPS_CODING_NONE && !vips_band_format_isuint(msb->in->BandFmt)) msb->sign = TRUE; if (msb->band == -1 && msb->in->BandFmt == VIPS_FORMAT_UCHAR) return vips_image_write(msb->in, conversion->out); if (msb->band == 0 && msb->in->Bands == 1 && msb->in->BandFmt == VIPS_FORMAT_UCHAR) return vips_image_write(msb->in, conversion->out); if (vips_image_pipelinev(conversion->out, VIPS_DEMAND_STYLE_THINSTRIP, msb->in, NULL)) return -1; if (msb->band != -1) conversion->out->Bands = 1; else conversion->out->Bands = vbands; conversion->out->BandFmt = VIPS_FORMAT_UCHAR; conversion->out->Coding = VIPS_CODING_NONE; if (conversion->out->Bands == 1) conversion->out->Type = VIPS_INTERPRETATION_B_W; else conversion->out->Type = VIPS_INTERPRETATION_MULTIBAND; if (vips_image_generate(conversion->out, vips_start_one, vips_msb_gen, vips_stop_one, msb->in, msb)) return -1; return 0; } static void vips_msb_class_init(VipsMsbClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "msb"; vobject_class->description = _("pick most-significant byte from an image"); vobject_class->build = vips_msb_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 0, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMsb, in)); VIPS_ARG_INT(class, "band", 3, _("Band"), _("Band to msb"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMsb, band), 0, 100000000, 0); } static void vips_msb_init(VipsMsb *msb) { msb->band = -1; } /** * vips_msb: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @band: %gint, msb just this band * * Turn any integer image to 8-bit unsigned char by discarding all but the most * significant byte. Signed values are converted to unsigned by adding 128. * * Use @band to make a one-band 8-bit image. * * This operator also works for LABQ coding. * * See also: vips_scale(), vips_cast(). * * Returns: 0 on success, -1 on error. */ int vips_msb(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("msb", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/pconversion.h000066400000000000000000000036641454007373500216520ustar00rootroot00000000000000/* base class for all conversion operations */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_PCONVERSION_H #define VIPS_PCONVERSION_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #define VIPS_TYPE_CONVERSION (vips_conversion_get_type()) #define VIPS_CONVERSION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_CONVERSION, VipsConversion)) #define VIPS_CONVERSION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_CONVERSION, VipsConversionClass)) #define VIPS_IS_CONVERSION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_CONVERSION)) #define VIPS_IS_CONVERSION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_CONVERSION)) #define VIPS_CONVERSION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_CONVERSION, VipsConversionClass)) typedef struct _VipsConversion { VipsOperation parent_instance; /* All have an output image. */ VipsImage *out; } VipsConversion; typedef struct _VipsConversionClass { VipsOperationClass parent_class; } VipsConversionClass; GType vips_conversion_get_type(void); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_PCONVERSION_H*/ libvips-8.15.1/libvips/conversion/premultiply.c000066400000000000000000000165731454007373500216710ustar00rootroot00000000000000/* premultiply alpha * * Author: John Cupitt * Written on: 7/5/15 * * 11/4/16 Lovell * - fix RGBA path * 25/5/16 * - max_alpha defaults to 65535 for RGB16/GREY16 * 24/11/17 lovell * - match normalised alpha to output type */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "pconversion.h" typedef struct _VipsPremultiply { VipsConversion parent_instance; VipsImage *in; double max_alpha; } VipsPremultiply; typedef VipsConversionClass VipsPremultiplyClass; G_DEFINE_TYPE(VipsPremultiply, vips_premultiply, VIPS_TYPE_CONVERSION); /* Premultiply an n-band image. */ #define PRE_MANY(IN, OUT) \ { \ IN *restrict p = (IN *) in; \ OUT *restrict q = (OUT *) out; \ \ for (x = 0; x < width; x++) { \ IN alpha = p[bands - 1]; \ IN clip_alpha = VIPS_CLIP(0, alpha, max_alpha); \ OUT nalpha = (OUT) clip_alpha / max_alpha; \ \ for (i = 0; i < bands - 1; i++) \ q[i] = p[i] * nalpha; \ q[i] = alpha; \ \ p += bands; \ q += bands; \ } \ } /* Special case for RGBA, it's very common. */ #define PRE_RGBA(IN, OUT) \ { \ IN *restrict p = (IN *) in; \ OUT *restrict q = (OUT *) out; \ \ for (x = 0; x < width; x++) { \ IN alpha = p[3]; \ IN clip_alpha = VIPS_CLIP(0, alpha, max_alpha); \ OUT nalpha = (OUT) clip_alpha / max_alpha; \ \ q[0] = p[0] * nalpha; \ q[1] = p[1] * nalpha; \ q[2] = p[2] * nalpha; \ q[3] = alpha; \ \ p += 4; \ q += 4; \ } \ } #define PRE(IN, OUT) \ { \ if (bands == 4) { \ PRE_RGBA(IN, OUT); \ } \ else { \ PRE_MANY(IN, OUT); \ } \ } VIPS_TARGET_CLONES("default,avx") static int vips_premultiply_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsPremultiply *premultiply = (VipsPremultiply *) b; VipsRegion *ir = (VipsRegion *) vseq; VipsImage *im = ir->im; VipsRect *r = &out_region->valid; int width = r->width; int bands = im->Bands; double max_alpha = premultiply->max_alpha; int x, y, i; if (vips_region_prepare(ir, r)) return -1; for (y = 0; y < r->height; y++) { VipsPel *in = VIPS_REGION_ADDR(ir, r->left, r->top + y); VipsPel *out = VIPS_REGION_ADDR(out_region, r->left, r->top + y); switch (im->BandFmt) { case VIPS_FORMAT_UCHAR: PRE(unsigned char, float); break; case VIPS_FORMAT_CHAR: PRE(signed char, float); break; case VIPS_FORMAT_USHORT: PRE(unsigned short, float); break; case VIPS_FORMAT_SHORT: PRE(signed short, float); break; case VIPS_FORMAT_UINT: PRE(unsigned int, float); break; case VIPS_FORMAT_INT: PRE(signed int, float); break; case VIPS_FORMAT_FLOAT: PRE(float, float); break; case VIPS_FORMAT_DOUBLE: PRE(double, double); break; case VIPS_FORMAT_COMPLEX: case VIPS_FORMAT_DPCOMPLEX: default: g_assert_not_reached(); } } return 0; } static int vips_premultiply_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsConversion *conversion = VIPS_CONVERSION(object); VipsPremultiply *premultiply = (VipsPremultiply *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 1); VipsImage *in; if (VIPS_OBJECT_CLASS(vips_premultiply_parent_class)->build(object)) return -1; in = premultiply->in; if (vips_image_decode(in, &t[0])) return -1; in = t[0]; /* Trivial case: fall back to copy(). */ if (in->Bands == 1) return vips_image_write(in, conversion->out); if (vips_check_noncomplex(class->nickname, in)) return -1; if (vips_image_pipelinev(conversion->out, VIPS_DEMAND_STYLE_THINSTRIP, in, NULL)) return -1; /* Is max-alpha unset? Default to the correct value for this * interpretation. */ if (!vips_object_argument_isset(object, "max_alpha")) premultiply->max_alpha = vips_interpretation_max_alpha(in->Type); if (in->BandFmt == VIPS_FORMAT_DOUBLE) conversion->out->BandFmt = VIPS_FORMAT_DOUBLE; else conversion->out->BandFmt = VIPS_FORMAT_FLOAT; if (vips_image_generate(conversion->out, vips_start_one, vips_premultiply_gen, vips_stop_one, in, premultiply)) return -1; return 0; } static void vips_premultiply_class_init(VipsPremultiplyClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VIPS_DEBUG_MSG("vips_premultiply_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "premultiply"; vobject_class->description = _("premultiply image alpha"); vobject_class->build = vips_premultiply_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsPremultiply, in)); VIPS_ARG_DOUBLE(class, "max_alpha", 115, _("Maximum alpha"), _("Maximum value of alpha channel"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsPremultiply, max_alpha), 0, 100000000, 255); } static void vips_premultiply_init(VipsPremultiply *premultiply) { premultiply->max_alpha = 255.0; } /** * vips_premultiply: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @max_alpha: %gdouble, maximum value for alpha * * Premultiplies any alpha channel. * The final band is taken to be the alpha * and the bands are transformed as: * * |[ * alpha = clip(0, in[in.bands - 1], @max_alpha); * norm = alpha / @max_alpha; * out = [in[0] * norm, ..., in[in.bands - 1] * norm, alpha]; * ]| * * So for an N-band image, the first N - 1 bands are multiplied by the clipped * and normalised final band, the final band is clipped. * If there is only a single band, * the image is passed through unaltered. * * The result is * #VIPS_FORMAT_FLOAT unless the input format is #VIPS_FORMAT_DOUBLE, in which * case the output is double as well. * * @max_alpha has the default value 255, or 65535 for images tagged as * #VIPS_INTERPRETATION_RGB16 or * #VIPS_INTERPRETATION_GREY16. * * Non-complex images only. * * See also: vips_unpremultiply(), vips_flatten(). * * Returns: 0 on success, -1 on error */ int vips_premultiply(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("premultiply", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/recomb.c000066400000000000000000000142741454007373500205460ustar00rootroot00000000000000/* recomb.c ... pass an image though a matrix * * 21/6/95 JC * - mildly modernised * 14/3/96 JC * - better error checks, partial * 4/11/09 * - gtkdoc * 9/11/11 * - redo as a class */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pconversion.h" typedef struct _VipsRecomb { VipsConversion parent_instance; VipsImage *in; VipsImage *m; /* Our input matrix as a one-band double. */ VipsImage *coeff; } VipsRecomb; typedef VipsConversionClass VipsRecombClass; G_DEFINE_TYPE(VipsRecomb, vips_recomb, VIPS_TYPE_CONVERSION); /* Inner loop. */ #define LOOP(IN, OUT) \ { \ IN *restrict p = (IN *) in; \ OUT *restrict q = (OUT *) out; \ \ for (x = 0; x < out_region->valid.width; x++) { \ double *restrict m = VIPS_MATRIX(recomb->coeff, 0, 0); \ \ for (v = 0; v < mheight; v++) { \ double t; \ \ t = 0.0; \ \ for (u = 0; u < mwidth; u++) \ t += m[u] * p[u]; \ \ q[v] = (OUT) t; \ m += mwidth; \ } \ \ p += mwidth; \ q += mheight; \ } \ } static int vips_recomb_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsRecomb *recomb = (VipsRecomb *) b; VipsImage *im = recomb->in; int mwidth = recomb->m->Xsize; int mheight = recomb->m->Ysize; int y, x, u, v; if (vips_region_prepare(ir, &out_region->valid)) return -1; for (y = 0; y < out_region->valid.height; y++) { VipsPel *in = VIPS_REGION_ADDR(ir, out_region->valid.left, out_region->valid.top + y); VipsPel *out = VIPS_REGION_ADDR(out_region, out_region->valid.left, out_region->valid.top + y); switch (vips_image_get_format(im)) { case VIPS_FORMAT_UCHAR: LOOP(unsigned char, float); break; case VIPS_FORMAT_CHAR: LOOP(signed char, float); break; case VIPS_FORMAT_USHORT: LOOP(unsigned short, float); break; case VIPS_FORMAT_SHORT: LOOP(signed short, float); break; case VIPS_FORMAT_UINT: LOOP(unsigned int, float); break; case VIPS_FORMAT_INT: LOOP(signed int, float); break; case VIPS_FORMAT_FLOAT: LOOP(float, float); break; case VIPS_FORMAT_DOUBLE: LOOP(double, double); break; default: g_assert_not_reached(); } } return 0; } static int vips_recomb_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsConversion *conversion = (VipsConversion *) object; VipsRecomb *recomb = (VipsRecomb *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); VipsImage *in; if (VIPS_OBJECT_CLASS(vips_recomb_parent_class)->build(object)) return -1; in = recomb->in; if (vips_image_decode(in, &t[0])) return -1; in = t[0]; if (vips_check_noncomplex(class->nickname, in)) return -1; if (vips_image_pio_input(recomb->m) || vips_check_uncoded(class->nickname, recomb->m) || vips_check_noncomplex(class->nickname, recomb->m) || vips_check_mono(class->nickname, recomb->m)) return -1; if (in->Bands != recomb->m->Xsize) { vips_error(class->nickname, "%s", _("bands in must equal matrix width")); return -1; } if (vips_check_matrix(class->nickname, recomb->m, &t[1])) return -1; recomb->coeff = t[1]; if (vips_image_pipelinev(conversion->out, VIPS_DEMAND_STYLE_THINSTRIP, in, NULL)) return -1; conversion->out->Bands = recomb->m->Ysize; if (vips_band_format_isint(in->BandFmt)) conversion->out->BandFmt = VIPS_FORMAT_FLOAT; if (vips_image_generate(conversion->out, vips_start_one, vips_recomb_gen, vips_stop_one, in, recomb)) return -1; return 0; } static void vips_recomb_class_init(VipsRecombClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "recomb"; object_class->description = _("linear recombination with matrix"); object_class->build = vips_recomb_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 0, _("Input"), _("Input image argument"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsRecomb, in)); VIPS_ARG_IMAGE(class, "m", 102, _("M"), _("Matrix of coefficients"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsRecomb, m)); } static void vips_recomb_init(VipsRecomb *recomb) { } /** * vips_recomb: (method) * @in: input image * @out: (out): output image * @m: recombination matrix * @...: %NULL-terminated list of optional named arguments * * This operation recombines an image's bands. Each pixel in @in is treated as * an n-element vector, where n is the number of bands in @in, and multiplied by * the n x m matrix @m to produce the m-band image @out. * * @out is always float, unless @in is double, in which case @out is double * too. No complex images allowed. * * It's useful for various sorts of colour space conversions. * * See also: vips_bandmean(). * * Returns: 0 on success, -1 on error */ int vips_recomb(VipsImage *in, VipsImage **out, VipsImage *m, ...) { va_list ap; int result; va_start(ap, m); result = vips_call_split("recomb", ap, in, out, m); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/replicate.c000066400000000000000000000125461454007373500212470ustar00rootroot00000000000000/* replicate an image x times horizontally and vertically * * JC, 30 sep 03 * * 15/4/04 * - some optimisations for some cases * 1/2/10 * - gtkdoc * 26/10/11 * - redone as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pconversion.h" typedef struct _VipsReplicate { VipsConversion parent_instance; /* The input image. */ VipsImage *in; int across; int down; } VipsReplicate; typedef VipsConversionClass VipsReplicateClass; G_DEFINE_TYPE(VipsReplicate, vips_replicate, VIPS_TYPE_CONVERSION); static int vips_replicate_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsImage *in = (VipsImage *) a; VipsRect *r = &out_region->valid; int twidth = in->Xsize; int theight = in->Ysize; int x, y; VipsRect tile; /* Find top left of tiles we need. */ int xs = (r->left / twidth) * twidth; int ys = (r->top / theight) * theight; /* The tile enclosing the top-left corner of the requested area. */ tile.left = xs; tile.top = ys; tile.width = twidth; tile.height = theight; /* If the request fits inside a single tile, we can just pointer-copy. */ if (vips_rect_includesrect(&tile, r)) { VipsRect irect; /* Translate request to input space. */ irect = *r; irect.left -= xs; irect.top -= ys; if (vips_region_prepare(ir, &irect)) return -1; if (vips_region_region(out_region, ir, r, irect.left, irect.top)) return -1; return 0; } for (y = ys; y < VIPS_RECT_BOTTOM(r); y += theight) for (x = xs; x < VIPS_RECT_RIGHT(r); x += twidth) { VipsRect paint; /* Whole tile at x, y */ tile.left = x; tile.top = y; tile.width = twidth; tile.height = theight; /* Which parts touch the area of the output we are * building. */ vips_rect_intersectrect(&tile, r, &paint); /* Translate back to ir coordinates. */ paint.left -= x; paint.top -= y; g_assert(!vips_rect_isempty(&paint)); /* Render into out_region. */ if (vips_region_prepare_to(ir, out_region, &paint, paint.left + x, paint.top + y)) return -1; } return 0; } static int vips_replicate_build(VipsObject *object) { VipsConversion *conversion = VIPS_CONVERSION(object); VipsReplicate *replicate = (VipsReplicate *) object; if (VIPS_OBJECT_CLASS(vips_replicate_parent_class)->build(object)) return -1; if (vips_image_pio_input(replicate->in)) return -1; if (vips_image_pipelinev(conversion->out, VIPS_DEMAND_STYLE_SMALLTILE, replicate->in, NULL)) return -1; conversion->out->Xsize *= replicate->across; conversion->out->Ysize *= replicate->down; if (vips_image_generate(conversion->out, vips_start_one, vips_replicate_gen, vips_stop_one, replicate->in, replicate)) return -1; return 0; } static void vips_replicate_class_init(VipsReplicateClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VIPS_DEBUG_MSG("vips_replicate_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "replicate"; vobject_class->description = _("replicate an image"); vobject_class->build = vips_replicate_build; VIPS_ARG_IMAGE(class, "in", 0, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsReplicate, in)); VIPS_ARG_INT(class, "across", 4, _("Across"), _("Repeat this many times horizontally"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsReplicate, across), 1, 1000000, 1); VIPS_ARG_INT(class, "down", 5, _("Down"), _("Repeat this many times vertically"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsReplicate, down), 1, 1000000, 1); } static void vips_replicate_init(VipsReplicate *replicate) { } /** * vips_replicate: (method) * @in: input image * @out: (out): output image * @across: repeat input this many times across * @down: repeat input this many times down * @...: %NULL-terminated list of optional named arguments * * Repeats an image many times. * * See also: vips_extract_area(). * * Returns: 0 on success, -1 on error */ int vips_replicate(VipsImage *in, VipsImage **out, int across, int down, ...) { va_list ap; int result; va_start(ap, down); result = vips_call_split("replicate", ap, in, out, across, down); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/rot.c000066400000000000000000000233711454007373500201010ustar00rootroot00000000000000/* rotate by 0/90/180/270 degrees * * Copyright: 1991, N. Dessipris * Written on: 28/10/91 * Updated on: 2/4/92, J.Cupitt * bugs in im_la90rot fixed, now works for any type. * 19/7/93 JC * - IM_CODING_LABQ allowed now * 15/11/94 JC * - name changed * - memory leaks fixed * 8/2/95 JC * - oops! memory allocation problem fixed * 18/5/95 JC * - IM_MAXLINES increased * 13/8/96 JC * - rewritten for partials * 6/11/02 JC * - speed-up ... replace memcpy() with a loop for small pixels * 14/4/04 * - sets Xoffset / Yoffset * 24/3/09 * - added IM_CODING_RAD support * 1/2/10 * - cleanups * - gtkdoc * 4/11/11 * - rewrite as a class * 7/3/17 * - added 90/180/270 convenience functions * 10/11/22 alantudyk * - swapped memcpy() in d180 for a loop */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pconversion.h" typedef struct _VipsRot { VipsConversion parent_instance; /* The input image. */ VipsImage *in; /* Rotate by ... */ VipsAngle angle; } VipsRot; typedef VipsConversionClass VipsRotClass; G_DEFINE_TYPE(VipsRot, vips_rot, VIPS_TYPE_CONVERSION); static int vips_rot90_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsImage *in = (VipsImage *) a; /* Output area. */ VipsRect *r = &out_region->valid; int le = r->left; int ri = VIPS_RECT_RIGHT(r); int to = r->top; int bo = VIPS_RECT_BOTTOM(r); int x, y, i; /* Pixel geometry. */ int ps, ls; /* Find the area of the input image we need. */ VipsRect need; need.left = to; need.top = in->Ysize - ri; need.width = r->height; need.height = r->width; if (vips_region_prepare(ir, &need)) return -1; /* Find PEL size and line skip for ir. */ ps = VIPS_IMAGE_SIZEOF_PEL(in); ls = VIPS_REGION_LSKIP(ir); /* Rotate the bit we now have. */ for (y = to; y < bo; y++) { /* Start of this output line. */ VipsPel *q = VIPS_REGION_ADDR(out_region, le, y); /* Corresponding position in ir. */ VipsPel *p = VIPS_REGION_ADDR(ir, need.left + y - to, need.top + need.height - 1); for (x = le; x < ri; x++) { for (i = 0; i < ps; i++) q[i] = p[i]; q += ps; p -= ls; } } return 0; } static int vips_rot180_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsImage *in = (VipsImage *) a; /* Output area. */ VipsRect *r = &out_region->valid; int le = r->left; int ri = VIPS_RECT_RIGHT(r); int to = r->top; int bo = VIPS_RECT_BOTTOM(r); int x, y, i; /* Pixel geometry. */ int ps; /* Find the area of the input image we need. */ VipsRect need; need.left = in->Xsize - ri; need.top = in->Ysize - bo; need.width = r->width; need.height = r->height; if (vips_region_prepare(ir, &need)) return -1; /* Find PEL size and line skip for ir. */ ps = VIPS_IMAGE_SIZEOF_PEL(in); /* Rotate the bit we now have. */ for (y = to; y < bo; y++) { /* Start of this output line. */ VipsPel *q = VIPS_REGION_ADDR(out_region, le, y); /* Corresponding position in ir. */ VipsPel *p = VIPS_REGION_ADDR(ir, need.left + need.width - 1, need.top + need.height - (y - to) - 1); /* Blap across! */ for (x = le; x < ri; x++) { for (i = 0; i < ps; i++) q[i] = p[i]; q += ps; p -= ps; } } return 0; } static int vips_rot270_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsImage *in = (VipsImage *) a; /* Output area. */ VipsRect *r = &out_region->valid; int le = r->left; int ri = VIPS_RECT_RIGHT(r); int to = r->top; int bo = VIPS_RECT_BOTTOM(r); int x, y, i; /* Pixel geometry. */ int ps, ls; /* Find the area of the input image we need. */ VipsRect need; need.left = in->Xsize - bo; need.top = le; need.width = r->height; need.height = r->width; if (vips_region_prepare(ir, &need)) return -1; /* Find PEL size and line skip for ir. */ ps = VIPS_IMAGE_SIZEOF_PEL(in); ls = VIPS_REGION_LSKIP(ir); /* Rotate the bit we now have. */ for (y = to; y < bo; y++) { /* Start of this output line. */ VipsPel *q = VIPS_REGION_ADDR(out_region, le, y); /* Corresponding position in ir. */ VipsPel *p = VIPS_REGION_ADDR(ir, need.left + need.width - (y - to) - 1, need.top); for (x = le; x < ri; x++) { for (i = 0; i < ps; i++) q[i] = p[i]; q += ps; p += ls; } } return 0; } static int vips_rot_build(VipsObject *object) { VipsConversion *conversion = VIPS_CONVERSION(object); VipsRot *rot = (VipsRot *) object; VipsGenerateFn generate_fn; VipsDemandStyle hint; if (VIPS_OBJECT_CLASS(vips_rot_parent_class)->build(object)) return -1; if (rot->angle == VIPS_ANGLE_D0) return vips_image_write(rot->in, conversion->out); if (vips_image_pio_input(rot->in)) return -1; hint = rot->angle == VIPS_ANGLE_D180 ? VIPS_DEMAND_STYLE_THINSTRIP : VIPS_DEMAND_STYLE_SMALLTILE; if (vips_image_pipelinev(conversion->out, hint, rot->in, NULL)) return -1; switch (rot->angle) { case VIPS_ANGLE_D90: generate_fn = vips_rot90_gen; conversion->out->Xsize = rot->in->Ysize; conversion->out->Ysize = rot->in->Xsize; conversion->out->Xoffset = rot->in->Ysize; conversion->out->Yoffset = 0; break; case VIPS_ANGLE_D180: generate_fn = vips_rot180_gen; conversion->out->Xoffset = rot->in->Xsize; conversion->out->Yoffset = rot->in->Ysize; break; case VIPS_ANGLE_D270: generate_fn = vips_rot270_gen; conversion->out->Xsize = rot->in->Ysize; conversion->out->Ysize = rot->in->Xsize; conversion->out->Xoffset = 0; conversion->out->Yoffset = rot->in->Xsize; break; default: g_assert_not_reached(); /* Stop compiler warnings. */ generate_fn = NULL; } if (vips_image_generate(conversion->out, vips_start_one, generate_fn, vips_stop_one, rot->in, rot)) return -1; return 0; } static void vips_rot_class_init(VipsRotClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VIPS_DEBUG_MSG("vips_rot_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "rot"; vobject_class->description = _("rotate an image"); vobject_class->build = vips_rot_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsRot, in)); VIPS_ARG_ENUM(class, "angle", 6, _("Angle"), _("Angle to rotate image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsRot, angle), VIPS_TYPE_ANGLE, VIPS_ANGLE_D90); } static void vips_rot_init(VipsRot *rot) { } static int vips_rotv(VipsImage *in, VipsImage **out, VipsAngle angle, va_list ap) { return vips_call_split("rot", ap, in, out, angle); } /** * vips_rot: (method) * @in: input image * @out: (out): output image * @angle: rotation angle * @...: %NULL-terminated list of optional named arguments * * Rotate @in by a multiple of 90 degrees. * * Use vips_similarity() to rotate by an arbitrary angle. vips_rot45() is * useful for rotating convolution masks by 45 degrees. * * See also: vips_flip(), vips_similarity(), vips_rot45(). * * Returns: 0 on success, -1 on error */ int vips_rot(VipsImage *in, VipsImage **out, VipsAngle angle, ...) { va_list ap; int result; va_start(ap, angle); result = vips_rotv(in, out, angle, ap); va_end(ap); return result; } /** * vips_rot90: * @in: input image * @out: output image * @...: %NULL-terminated list of optional named arguments * * Rotate @in by 90 degrees clockwise. A convenience function over vips_rot(). * * See also: vips_rot(). * * Returns: 0 on success, -1 on error */ int vips_rot90(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_rotv(in, out, VIPS_ANGLE_D90, ap); va_end(ap); return result; } /** * vips_rot180: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Rotate @in by 180 degrees. A convenience function over vips_rot(). * * See also: vips_rot(). * * Returns: 0 on success, -1 on error */ int vips_rot180(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_rotv(in, out, VIPS_ANGLE_D180, ap); va_end(ap); return result; } /** * vips_rot270: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Rotate @in by 270 degrees clockwise. A convenience function over vips_rot(). * * See also: vips_rot(). * * Returns: 0 on success, -1 on error */ int vips_rot270(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_rotv(in, out, VIPS_ANGLE_D270, ap); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/rot45.c000066400000000000000000000152351454007373500202520ustar00rootroot00000000000000/* 'lossless' 45 degree rotate ... odd-sized square images only * * Author: N. Dessipris (Copyright, N. Dessipris 1991) * Written on: 08/05/1991 * Modified on: 28/05/1991 * 12/10/95 JC * - small revisions, needs rewriting really * 7/8/96 JC * - absolutely foul desp code revised * - many bugs and mem leaks fixed * 1/3/99 JC * - oops, fns were not preserving scale and offset * 1/12/10 * - allow any size mask for the 90 degree rot45ates by using im_rot4590(). * 12/10/13 * - rewritten as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pconversion.h" typedef struct _VipsRot45 { VipsConversion parent_instance; /* The input image. */ VipsImage *in; /* Rotate by ... */ VipsAngle45 angle; } VipsRot45; typedef VipsConversionClass VipsRot45Class; G_DEFINE_TYPE(VipsRot45, vips_rot45, VIPS_TYPE_CONVERSION); #define COPY(Q, P) \ { \ VipsPel *q = (Q); \ VipsPel *p = (P); \ int b; \ \ for (b = 0; b < ps; b++) \ q[b] = p[b]; \ } #define ASSIGN(Xout, Yout, Xin, Yin) \ COPY(VIPS_IMAGE_ADDR(out, Xout, Yout), \ VIPS_IMAGE_ADDR(in, Xin, Yin)) #define POINT_TO_TEMP(q, Xin, Yin) \ COPY(q, VIPS_IMAGE_ADDR(in, Xin, Yin)) #define TEMP_TO_POINT(Xout, Yout, p) \ COPY(VIPS_IMAGE_ADDR(out, Xout, Yout), p) /* This can work inplace, ie. in == out is allowed. */ static void vips_rot45_rot45(VipsImage *out, VipsImage *in) { size_t ps = VIPS_IMAGE_SIZEOF_PEL(in); VipsPel *temp = VIPS_ARRAY(in, ps, VipsPel); int size = in->Xsize; int size_2 = size / 2; int x, y; g_assert(in->Xsize == in->Ysize); g_assert(out->Xsize == out->Ysize); g_assert(in->Xsize == out->Xsize); g_assert(in->Xsize % 2 == 1); /* Split the square into 8 triangles. Loop over the top-left one, * reflect to index the others. * * 1 1 2 2 3 * 8 1 2 3 3 * 8 8 x 4 4 * 7 7 6 5 4 * 7 6 6 5 5 * * do the centre separately. */ for (y = 0; y < size_2; y++) for (x = y; x < size_2; x++) { /* Save 1, it goes into 2 at the end. */ POINT_TO_TEMP(temp, x, y); /* Fill 1 from 8. */ ASSIGN(x, y, y, size_2 - (x - y)); /* 8 from 7. */ ASSIGN(y, size_2 - (x - y), y, (size - 1) - x); /* 7 from 6. */ ASSIGN(y, (size - 1) - x, size_2 - (x - y), (size - 1) - y); /* 6 from 5. */ ASSIGN(size_2 - (x - y), (size - 1) - y, (size - 1) - x, (size - 1) - y); /* 5 from 4. */ ASSIGN((size - 1) - x, (size - 1) - y, (size - 1) - y, (x - y) + size_2); /* 4 from 3. */ ASSIGN((size - 1) - y, (x - y) + size_2, (size - 1) - y, x); /* 3 from 2. */ ASSIGN((size - 1) - y, x, (x - y) + size_2, y); /* 2 from saved 1. */ TEMP_TO_POINT((x - y) + size_2, y, temp); } /* Centre. */ ASSIGN(size_2, size_2, size_2, size_2); } static int vips_rot45_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsConversion *conversion = VIPS_CONVERSION(object); VipsRot45 *rot45 = (VipsRot45 *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); VipsImage *in; if (VIPS_OBJECT_CLASS(vips_rot45_parent_class)->build(object)) return -1; if (vips_check_oddsquare(class->nickname, rot45->in)) return -1; if (rot45->angle == VIPS_ANGLE45_D0) return vips_image_write(rot45->in, conversion->out); if (!(t[1] = vips_image_copy_memory(rot45->in))) return -1; in = t[1]; t[0] = vips_image_new_memory(); if (vips_image_pipelinev(t[0], VIPS_DEMAND_STYLE_ANY, rot45->in, NULL)) return -1; if (vips_image_write_prepare(t[0])) return -1; switch (rot45->angle) { case VIPS_ANGLE45_D315: vips_rot45_rot45(t[0], in); in = t[0]; case VIPS_ANGLE45_D270: vips_rot45_rot45(t[0], in); in = t[0]; case VIPS_ANGLE45_D225: vips_rot45_rot45(t[0], in); in = t[0]; case VIPS_ANGLE45_D180: vips_rot45_rot45(t[0], in); in = t[0]; case VIPS_ANGLE45_D135: vips_rot45_rot45(t[0], in); in = t[0]; case VIPS_ANGLE45_D90: vips_rot45_rot45(t[0], in); in = t[0]; case VIPS_ANGLE45_D45: vips_rot45_rot45(t[0], in); in = t[0]; break; default: g_assert_not_reached(); } if (vips_image_write(in, conversion->out)) return -1; return 0; } static void vips_rot45_class_init(VipsRot45Class *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VIPS_DEBUG_MSG("vips_rot45_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "rot45"; vobject_class->description = _("rotate an image"); vobject_class->build = vips_rot45_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsRot45, in)); VIPS_ARG_ENUM(class, "angle", 6, _("Angle"), _("Angle to rotate image"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsRot45, angle), VIPS_TYPE_ANGLE45, VIPS_ANGLE45_D45); } static void vips_rot45_init(VipsRot45 *rot45) { rot45->angle = VIPS_ANGLE45_D45; } /** * vips_rot45: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @angle: #VipsAngle45 rotation angle * * Rotate @in by a multiple of 45 degrees. Odd-length sides and square images * only. * * This operation is useful for rotating convolution masks. Use * vips_similarity() to rotate images by arbitrary angles. * * See also: vips_rot(), vips_similarity(). * * Returns: 0 on success, -1 on error */ int vips_rot45(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("rot45", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/scale.c000066400000000000000000000114601454007373500203600ustar00rootroot00000000000000/* im_scale * * Author: John Cupitt * Written on: 22/4/93 * Modified on: * 30/6/93 JC * - adapted for partial v2 * - ANSI * 31/8/93 JC * - calculation of offset now includes scale * 8/5/06 * - set Type on output too * 16/10/06 * - what? no, don't set Type, useful to be able to scale histograms, for * example * 1/2/10 * - gtkdoc * 30/5/13 * - redo as a class * - add log scale and exponent as an option * 14/1/14 * - use linear uchar mode * 14/7/14 * - round to nearest on uchar output * 29/12/18 kleisauke * - ... and round to nearest in log mode too */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pconversion.h" typedef struct _VipsScale { VipsConversion parent_instance; VipsImage *in; gboolean log; double exp; } VipsScale; typedef VipsConversionClass VipsScaleClass; G_DEFINE_TYPE(VipsScale, vips_scale, VIPS_TYPE_CONVERSION); static int vips_scale_build(VipsObject *object) { VipsConversion *conversion = VIPS_CONVERSION(object); VipsScale *scale = (VipsScale *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 7); double mx; double mn; if (VIPS_OBJECT_CLASS(vips_scale_parent_class)->build(object)) return -1; if (vips_stats(scale->in, &t[0], NULL)) return -1; mn = *VIPS_MATRIX(t[0], 0, 0); mx = *VIPS_MATRIX(t[0], 1, 0); if (mn == mx) { /* Range of zero: just return black. */ if (vips_black(&t[1], scale->in->Xsize, scale->in->Ysize, "bands", scale->in->Bands, NULL) || vips_image_write(t[1], conversion->out)) return -1; } else if (scale->log) { double f = 255.0 / log10(1.0 + pow(mx, scale->exp)); if (vips_pow_const1(scale->in, &t[2], scale->exp, NULL) || vips_linear1(t[2], &t[3], 1.0, 1.0, NULL) || vips_log10(t[3], &t[4], NULL) || /* Add 0.5 to get round to nearest. */ vips_linear1(t[4], &t[5], f, 0.5, "uchar", TRUE, NULL) || vips_image_write(t[5], conversion->out)) return -1; } else { double f = 255.0 / (mx - mn); /* Add .5 to get round-to-nearest. */ double a = -(mn * f) + 0.5; if (vips_linear1(scale->in, &t[2], f, a, "uchar", TRUE, NULL) || vips_image_write(t[2], conversion->out)) return -1; } return 0; } static void vips_scale_class_init(VipsScaleClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "scale"; vobject_class->description = _("scale an image to uchar"); vobject_class->build = vips_scale_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsScale, in)); VIPS_ARG_BOOL(class, "log", 3, _("Log"), _("Log scale"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsScale, log), FALSE); VIPS_ARG_DOUBLE(class, "exp", 3, _("Exponent"), _("Exponent for log scale"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsScale, exp), 0.00001, 10000, 0.25); } static void vips_scale_init(VipsScale *scale) { scale->exp = 0.25; } /** * vips_scale: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @log: log scale pixels * * @exp: exponent for log scale * * Search the image for the maximum and minimum value, then return the image * as unsigned 8-bit, scaled so that the maximum value is 255 and the * minimum is zero. * * If @log is set, transform with log10(1.0 + pow(x, @exp)) + .5, * then scale so max == 255. By default, @exp is 0.25. * * See also: vips_cast(). * * Returns: 0 on success, -1 on error */ int vips_scale(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("scale", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/sequential.c000066400000000000000000000175621454007373500214540ustar00rootroot00000000000000/* Like copy, but ensure sequential access. * * Handy with sequential for loading files formats which are strictly * top-to-bottom, like PNG. * * 15/2/12 * - from VipsForeignLoad * 14/7/12 * - support skip forwards as well, so we can do extract/insert * 10/8/12 * - add @trace option * 21/8/12 * - remove skip forward, instead do thread stalling and have an * integrated cache * - use linecache * 4/9/12 * - stop all threads on error * - don't stall forever, just delay ahead threads * 25/2/14 * - we were allowing skipahead if the first request was for y>0, but * this broke on some busy, many-core systems, see comment below * 10/6/14 * - re-enable skipahead now we have the single-thread-first-tile idea * 6/3/17 * - deprecate @trace, @access now seq is much simpler * 6/9/21 * - don't set "persistent", it can cause huge memory use */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a cache of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG_GREEN #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pconversion.h" typedef struct _VipsSequential { VipsConversion parent_instance; VipsImage *in; int tile_height; VipsAccess access; gboolean trace; /* Lock access to y_pos with this. */ GMutex *lock; /* The next read from our source will fetch this scanline, ie. it's 0 * when we start. */ int y_pos; /* If one thread gets an error, we must stop all threads, otherwise we * can stall and never wake. */ int error; } VipsSequential; typedef VipsConversionClass VipsSequentialClass; G_DEFINE_TYPE(VipsSequential, vips_sequential, VIPS_TYPE_CONVERSION); static void vips_sequential_dispose(GObject *gobject) { VipsSequential *sequential = (VipsSequential *) gobject; VIPS_FREEF(vips_g_mutex_free, sequential->lock); G_OBJECT_CLASS(vips_sequential_parent_class)->dispose(gobject); } static int vips_sequential_generate(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsSequential *sequential = (VipsSequential *) b; VipsRect *r = &out_region->valid; VipsRegion *ir = (VipsRegion *) seq; if (sequential->trace) printf("vips_sequential_generate %p: " "request for line %d, height %d\n", sequential, r->top, r->height); VIPS_GATE_START("vips_sequential_generate: wait"); vips__worker_lock(sequential->lock); VIPS_GATE_STOP("vips_sequential_generate: wait"); /* If we've seen an error, everything must stop. */ if (sequential->error) { g_mutex_unlock(sequential->lock); return -1; } if (r->top > sequential->y_pos) { /* This is a request for something some way down the image. * Probably the operation is something like extract_area and * we should skip the initial part of the image. In fact, * we read to cache, since it may be useful. */ VipsRect area; if (sequential->trace) printf("vips_sequential_generate %p: " "skipping to line %d ...\n", sequential, r->top); area.left = 0; area.top = sequential->y_pos; area.width = 1; area.height = r->top - sequential->y_pos; if (vips_region_prepare(ir, &area)) { sequential->error = -1; g_mutex_unlock(sequential->lock); return -1; } sequential->y_pos = VIPS_RECT_BOTTOM(&area); } /* This is a request for old or present pixels -- serve from cache. * This may trigger further, sequential reads. */ if (vips_region_prepare(ir, r) || vips_region_region(out_region, ir, r, r->left, r->top)) { sequential->error = -1; g_mutex_unlock(sequential->lock); return -1; } sequential->y_pos = VIPS_MAX(sequential->y_pos, VIPS_RECT_BOTTOM(r)); g_mutex_unlock(sequential->lock); return 0; } static int vips_sequential_build(VipsObject *object) { VipsConversion *conversion = VIPS_CONVERSION(object); VipsSequential *sequential = (VipsSequential *) object; VipsImage *t; VIPS_DEBUG_MSG("vips_sequential_build\n"); if (VIPS_OBJECT_CLASS(vips_sequential_parent_class)->build(object)) return -1; /* We've gone forwards and backwards on sequential caches being * persistent. Persistent caches can be useful if you want to eg. * make several crop() operations on a seq image source, but they use * a lot of memory with eg. arrayjoin. * * On balance, if you want to make many crops from one source, use a * RANDOM image. */ if (vips_linecache(sequential->in, &t, "tile_height", sequential->tile_height, "access", VIPS_ACCESS_SEQUENTIAL, NULL)) return -1; vips_object_local(object, t); if (vips_image_pipelinev(conversion->out, VIPS_DEMAND_STYLE_THINSTRIP, t, NULL)) return -1; if (vips_image_generate(conversion->out, vips_start_one, vips_sequential_generate, vips_stop_one, t, sequential)) return -1; return 0; } static void vips_sequential_class_init(VipsSequentialClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VIPS_DEBUG_MSG("vips_sequential_class_init\n"); gobject_class->dispose = vips_sequential_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "sequential"; vobject_class->description = _("check sequential access"); vobject_class->build = vips_sequential_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsSequential, in)); VIPS_ARG_INT(class, "tile_height", 3, _("Tile height"), _("Tile height in pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSequential, tile_height), 1, 1000000, 1); VIPS_ARG_ENUM(class, "access", 6, _("Strategy"), _("Expected access pattern"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsSequential, access), VIPS_TYPE_ACCESS, VIPS_ACCESS_SEQUENTIAL); VIPS_ARG_BOOL(class, "trace", 2, _("Trace"), _("Trace pixel requests"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsSequential, trace), TRUE); } static void vips_sequential_init(VipsSequential *sequential) { sequential->lock = vips_g_mutex_new(); sequential->tile_height = 1; sequential->error = 0; sequential->trace = FALSE; } /** * vips_sequential: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @tile_height: height of cache strips * * This operation behaves rather like vips_copy() between images * @in and @out, except that it checks that pixels on @in are only requested * top-to-bottom. This operation is useful for loading file formats which are * strictly top-to-bottom, like PNG. * * @tile_height can be used to set the size of the tiles that * vips_sequential() uses. The default value is 1. * * See also: vips_cache(), vips_linecache(), vips_tilecache(). * * Returns: 0 on success, -1 on error. */ int vips_sequential(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("sequential", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/smartcrop.c000066400000000000000000000312431454007373500213040ustar00rootroot00000000000000/* crop an image down to a specified size by removing boring parts * * Adapted from sharp's smartcrop feature, with kind permission. * * 1/3/17 * - first version, from sharp * 14/3/17 * - revised attention smartcrop * 8/6/17 * - revised again * 15/9/18 lovell * - move shrink to start of processing * 22/9/18 jcupitt * - add low and high * 19/3/20 jcupitt * - add all * 26/11/22 ejoebstl * - expose location of interest when using attention based cropping */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pconversion.h" #include "bandary.h" typedef struct _VipsSmartcrop { VipsConversion parent_instance; VipsImage *in; int width; int height; VipsInteresting interesting; gboolean premultiplied; int attention_x; int attention_y; } VipsSmartcrop; typedef VipsConversionClass VipsSmartcropClass; G_DEFINE_TYPE(VipsSmartcrop, vips_smartcrop, VIPS_TYPE_CONVERSION); static int vips_smartcrop_score(VipsSmartcrop *smartcrop, VipsImage *in, int left, int top, int width, int height, double *score) { VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(smartcrop), 2); if (vips_extract_area(in, &t[0], left, top, width, height, NULL) || vips_hist_find(t[0], &t[1], NULL) || vips_hist_entropy(t[1], score, NULL)) return -1; return 0; } /* Entropy-style smartcrop. Repeatedly discard low interest areas. This should * be faster for very large images. */ static int vips_smartcrop_entropy(VipsSmartcrop *smartcrop, VipsImage *in, int *left, int *top) { int max_slice_size; int width; int height; *left = 0; *top = 0; width = in->Xsize; height = in->Ysize; /* How much do we trim by each iteration? Aim for 8 steps in the axis * that needs trimming most. */ max_slice_size = VIPS_MAX( ceil((width - smartcrop->width) / 8.0), ceil((height - smartcrop->height) / 8.0)); /* Repeatedly take a slice off width and height until we * reach the target. */ while (width > smartcrop->width || height > smartcrop->height) { const int slice_width = VIPS_MIN(width - smartcrop->width, max_slice_size); const int slice_height = VIPS_MIN(height - smartcrop->height, max_slice_size); if (slice_width > 0) { double left_score; double right_score; if (vips_smartcrop_score(smartcrop, in, *left, *top, slice_width, height, &left_score)) return -1; if (vips_smartcrop_score(smartcrop, in, *left + width - slice_width, *top, slice_width, height, &right_score)) return -1; width -= slice_width; if (left_score < right_score) *left += slice_width; } if (slice_height > 0) { double top_score; double bottom_score; if (vips_smartcrop_score(smartcrop, in, *left, *top, width, slice_height, &top_score)) return -1; if (vips_smartcrop_score(smartcrop, in, *left, *top + height - slice_height, width, slice_height, &bottom_score)) return -1; height -= slice_height; if (top_score < bottom_score) *top += slice_height; } } return 0; } /* Calculate sqrt(b1^2 + b2^2 ...) */ static int pythagoras(VipsSmartcrop *smartcrop, VipsImage *in, VipsImage **out) { VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(smartcrop), 2 * in->Bands + 1); int i; for (i = 0; i < in->Bands; i++) if (vips_extract_band(in, &t[i], i, NULL)) return -1; for (i = 0; i < in->Bands; i++) if (vips_multiply(t[i], t[i], &t[i + in->Bands], NULL)) return -1; if (vips_sum(&t[in->Bands], &t[2 * in->Bands], in->Bands, NULL) || vips_pow_const1(t[2 * in->Bands], out, 0.5, NULL)) return -1; return 0; } static int vips_smartcrop_attention(VipsSmartcrop *smartcrop, VipsImage *in, int *left, int *top, int *attention_x, int *attention_y) { /* From smartcrop.js. */ static double skin_vector[] = { -0.78, -0.57, -0.44 }; static double ones[] = { 1.0, 1.0, 1.0 }; VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(smartcrop), 24); double hscale; double vscale; double sigma; double max; int x_pos; int y_pos; /* The size we shrink to gives the precision with which we can place * the crop */ hscale = 32.0 / in->Xsize; vscale = 32.0 / in->Ysize; sigma = sqrt(pow(smartcrop->width * hscale, 2) + pow(smartcrop->height * vscale, 2)); sigma = VIPS_MAX(sigma / 10, 1.0); if (vips_resize(in, &t[17], hscale, "vscale", vscale, NULL)) return -1; /* Simple edge detect. */ if (!(t[21] = vips_image_new_matrixv(3, 3, 0.0, -1.0, 0.0, -1.0, 4.0, -1.0, 0.0, -1.0, 0.0))) return -1; /* Convert to XYZ and just use the first three bands. */ if (vips_colourspace(t[17], &t[0], VIPS_INTERPRETATION_XYZ, NULL) || vips_extract_band(t[0], &t[1], 0, "n", 3, NULL)) return -1; /* Edge detect on Y. */ if (vips_extract_band(t[1], &t[2], 1, NULL) || vips_conv(t[2], &t[3], t[21], "precision", VIPS_PRECISION_INTEGER, NULL) || vips_linear1(t[3], &t[4], 5.0, 0.0, NULL) || vips_abs(t[4], &t[14], NULL)) return -1; /* Look for skin colours. Taken from smartcrop.js. */ if ( /* Normalise to magnitude of colour in XYZ. */ pythagoras(smartcrop, t[1], &t[5]) || vips_divide(t[1], t[5], &t[6], NULL) || /* Distance from skin point. */ vips_linear(t[6], &t[7], ones, skin_vector, 3, NULL) || pythagoras(smartcrop, t[7], &t[8]) || /* Rescale to 100 - 0 score. */ vips_linear1(t[8], &t[9], -100.0, 100.0, NULL) || /* Ignore dark areas. */ vips_more_const1(t[2], &t[10], 5.0, NULL) || !(t[11] = vips_image_new_from_image1(t[10], 0.0)) || vips_ifthenelse(t[10], t[9], t[11], &t[15], NULL)) return -1; /* Look for saturated areas. */ if (vips_colourspace(t[1], &t[12], VIPS_INTERPRETATION_LAB, NULL) || vips_extract_band(t[12], &t[13], 1, NULL) || vips_ifthenelse(t[10], t[13], t[11], &t[16], NULL)) return -1; /* Sum, blur and find maxpos. * * The amount of blur is related to the size of the crop * area: how large an area we want to consider for the scoring * function. */ if (vips_sum(&t[14], &t[18], 3, NULL) || vips_gaussblur(t[18], &t[19], sigma, NULL) || vips_max(t[19], &max, "x", &x_pos, "y", &y_pos, NULL)) return -1; /* Transform back into image coordinates. */ *attention_x = x_pos / hscale; *attention_y = y_pos / vscale; /* Centre the crop over the max. */ *left = VIPS_CLIP(0, *attention_x - smartcrop->width / 2, in->Xsize - smartcrop->width); *top = VIPS_CLIP(0, *attention_y - smartcrop->height / 2, in->Ysize - smartcrop->height); return 0; } static int vips_smartcrop_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsConversion *conversion = VIPS_CONVERSION(object); VipsSmartcrop *smartcrop = (VipsSmartcrop *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); VipsImage *in; int left; int top; int attention_x = 0; int attention_y = 0; if (VIPS_OBJECT_CLASS(vips_smartcrop_parent_class)->build(object)) return -1; if (smartcrop->width > smartcrop->in->Xsize || smartcrop->height > smartcrop->in->Ysize || smartcrop->width <= 0 || smartcrop->height <= 0) { vips_error(class->nickname, "%s", _("bad extract area")); return -1; } in = smartcrop->in; /* If there's an alpha, we have to premultiply before searching for * content. There could be stuff in transparent areas which we don't * want to consider. */ if (vips_image_hasalpha(in) && !smartcrop->premultiplied) { if (vips_premultiply(in, &t[0], NULL)) return -1; in = t[0]; } switch (smartcrop->interesting) { case VIPS_INTERESTING_NONE: case VIPS_INTERESTING_LOW: left = 0; top = 0; break; case VIPS_INTERESTING_CENTRE: left = (in->Xsize - smartcrop->width) / 2; top = (in->Ysize - smartcrop->height) / 2; break; case VIPS_INTERESTING_ENTROPY: if (vips_smartcrop_entropy(smartcrop, in, &left, &top)) return -1; break; case VIPS_INTERESTING_ATTENTION: if (vips_smartcrop_attention(smartcrop, in, &left, &top, &attention_x, &attention_y)) return -1; break; case VIPS_INTERESTING_HIGH: left = in->Xsize - smartcrop->width; top = in->Ysize - smartcrop->height; break; case VIPS_INTERESTING_ALL: left = 0; top = 0; smartcrop->width = in->Xsize; smartcrop->height = in->Ysize; break; default: g_assert_not_reached(); /* Stop a compiler warning. */ left = 0; top = 0; break; } g_object_set(smartcrop, "attention_x", attention_x, "attention_y", attention_y, NULL); if (vips_extract_area(smartcrop->in, &t[1], left, top, smartcrop->width, smartcrop->height, NULL) || vips_image_write(t[1], conversion->out)) return -1; return 0; } static void vips_smartcrop_class_init(VipsSmartcropClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VIPS_DEBUG_MSG("vips_smartcrop_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "smartcrop"; vobject_class->description = _("extract an area from an image"); vobject_class->build = vips_smartcrop_build; VIPS_ARG_IMAGE(class, "input", 0, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsSmartcrop, in)); VIPS_ARG_INT(class, "width", 4, _("Width"), _("Width of extract area"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsSmartcrop, width), 1, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "height", 5, _("Height"), _("Height of extract area"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsSmartcrop, height), 1, VIPS_MAX_COORD, 1); VIPS_ARG_ENUM(class, "interesting", 6, _("Interesting"), _("How to measure interestingness"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSmartcrop, interesting), VIPS_TYPE_INTERESTING, VIPS_INTERESTING_ATTENTION); VIPS_ARG_INT(class, "attention_x", 2, _("Attention x"), _("Horizontal position of attention centre"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsSmartcrop, attention_x), 0, VIPS_MAX_COORD, 0); VIPS_ARG_INT(class, "attention_y", 3, _("Attention y"), _("Vertical position of attention centre"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsSmartcrop, attention_y), 0, VIPS_MAX_COORD, 0); VIPS_ARG_BOOL(class, "premultiplied", 7, _("Premultiplied"), _("Input image already has premultiplied alpha"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSmartcrop, premultiplied), FALSE); } static void vips_smartcrop_init(VipsSmartcrop *smartcrop) { smartcrop->interesting = VIPS_INTERESTING_ATTENTION; smartcrop->premultiplied = FALSE; } /** * vips_smartcrop: (method) * @in: input image * @out: (out): output image * @width: width of area to extract * @height: height of area to extract * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @interesting: #VipsInteresting to use to find interesting areas (default: #VIPS_INTERESTING_ATTENTION) * * @premultiplied: %gboolean, input image already has premultiplied alpha * * @attention_x: %gint, horizontal position of attention centre when using attention based cropping * * @attention_y: %gint, vertical position of attention centre when using attention based cropping * * Crop an image down to a specified width and height by removing boring parts. * * Use @interesting to pick the method vips uses to decide which bits of the * image should be kept. * * You can test xoffset / yoffset on @out to find the location of the crop * within the input image. * * See also: vips_extract_area(). * * Returns: 0 on success, -1 on error. */ int vips_smartcrop(VipsImage *in, VipsImage **out, int width, int height, ...) { va_list ap; int result; va_start(ap, height); result = vips_call_split("smartcrop", ap, in, out, width, height); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/subsample.c000066400000000000000000000200071454007373500212610ustar00rootroot00000000000000/* subsample * * 3/7/95 JC * - adapted from im_shrink() * 3/8/02 JC * - fall back to im_copy() for x/y factors == 1 * 21/4/08 * - don't fall back to pixel-wise shrinks for smalltile, it kills * performance, just bring VIPS_MAX_WIDTH down instead * 1/2/10 * - gtkdoc * 1/6/13 * - redo as a class * 2/11/13 * - add @point to force point sample mode * 22/1/16 * - remove SEQUENTIAL hint, it confuses vips_sequential() */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pconversion.h" typedef struct _VipsSubsample { VipsConversion parent_instance; VipsImage *in; int xfac; int yfac; gboolean point; } VipsSubsample; typedef VipsConversionClass VipsSubsampleClass; G_DEFINE_TYPE(VipsSubsample, vips_subsample, VIPS_TYPE_CONVERSION); /* Maximum width of input we ask for. */ #define VIPS_MAX_WIDTH (100) /* Subsample a VipsRegion. We fetch in VIPS_MAX_WIDTH pixel-wide strips, * left-to-right across the input. */ static int vips_subsample_line_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsSubsample *subsample = (VipsSubsample *) b; VipsImage *in = (VipsImage *) a; VipsRect *r = &out_region->valid; int le = r->left; int ri = VIPS_RECT_RIGHT(r); int to = r->top; int bo = VIPS_RECT_BOTTOM(r); int ps = VIPS_IMAGE_SIZEOF_PEL(in); int owidth = VIPS_MAX_WIDTH / subsample->xfac; VipsRect s; int x, y; int z, k; /* Loop down the region. */ for (y = to; y < bo; y++) { VipsPel *q = VIPS_REGION_ADDR(out_region, le, y); VipsPel *p; /* Loop across the region, in owidth sized pieces. */ for (x = le; x < ri; x += owidth) { /* How many pixels do we make this time? */ int ow = VIPS_MIN(owidth, ri - x); /* Ask for this many from input ... can save a * little here! */ int iw = ow * subsample->xfac - (subsample->xfac - 1); /* Ask for input. */ s.left = x * subsample->xfac; s.top = y * subsample->yfac; s.width = iw; s.height = 1; if (vips_region_prepare(ir, &s)) return -1; /* Append new pels to output. */ p = VIPS_REGION_ADDR(ir, s.left, s.top); for (z = 0; z < ow; z++) { for (k = 0; k < ps; k++) q[k] = p[k]; q += ps; p += ps * subsample->xfac; } } } return 0; } /* Fetch one pixel at a time ... good for very large shrinks. */ static int vips_subsample_point_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsSubsample *subsample = (VipsSubsample *) b; VipsImage *in = (VipsImage *) a; VipsRect *r = &out_region->valid; int le = r->left; int ri = VIPS_RECT_RIGHT(r); int to = r->top; int bo = VIPS_RECT_BOTTOM(r); int ps = VIPS_IMAGE_SIZEOF_PEL(in); VipsRect s; int x, y; int k; /* Loop down the region. */ for (y = to; y < bo; y++) { VipsPel *q = VIPS_REGION_ADDR(out_region, le, y); VipsPel *p; /* Loop across the region, in owidth sized pieces. */ for (x = le; x < ri; x++) { /* Ask for input. */ s.left = x * subsample->xfac; s.top = y * subsample->yfac; s.width = 1; s.height = 1; if (vips_region_prepare(ir, &s)) return -1; /* Append new pels to output. */ p = VIPS_REGION_ADDR(ir, s.left, s.top); for (k = 0; k < ps; k++) q[k] = p[k]; q += ps; } } return 0; } static int vips_subsample_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsConversion *conversion = VIPS_CONVERSION(object); VipsSubsample *subsample = (VipsSubsample *) object; VipsGenerateFn subsample_fn; if (VIPS_OBJECT_CLASS(vips_subsample_parent_class)->build(object)) return -1; g_assert(subsample->xfac > 0); g_assert(subsample->yfac > 0); if (subsample->xfac == 1 && subsample->yfac == 1) return vips_image_write(subsample->in, conversion->out); if (vips_image_pio_input(subsample->in) || vips_check_coding_known(class->nickname, subsample->in)) return -1; /* Set demand hints. We want THINSTRIP, as we will be demanding a * large area of input for each output line. */ if (vips_image_pipelinev(conversion->out, VIPS_DEMAND_STYLE_THINSTRIP, subsample->in, NULL)) return -1; /* Prepare output. Note: we round the output width down! */ conversion->out->Xsize = subsample->in->Xsize / subsample->xfac; conversion->out->Ysize = subsample->in->Ysize / subsample->yfac; if (conversion->out->Xsize <= 0 || conversion->out->Ysize <= 0) { vips_error(class->nickname, "%s", _("image has shrunk to nothing")); return -1; } /* Generate! If this is a very large shrink, then it's probably faster * to do it a pixel at a time. */ if (subsample->point || subsample->xfac > 10) subsample_fn = vips_subsample_point_gen; else subsample_fn = vips_subsample_line_gen; if (vips_image_generate(conversion->out, vips_start_one, subsample_fn, vips_stop_one, subsample->in, subsample)) return -1; return 0; } static void vips_subsample_class_init(VipsSubsampleClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "subsample"; vobject_class->description = _("subsample an image"); vobject_class->build = vips_subsample_build; /* We don't work well as sequential: we can easily skip the first few * scanlines, and that confuses vips_sequential(). */ VIPS_ARG_IMAGE(class, "input", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsSubsample, in)); VIPS_ARG_INT(class, "xfac", 3, _("Xfac"), _("Horizontal subsample factor"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsSubsample, xfac), 1, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "yfac", 4, _("Yfac"), _("Vertical subsample factor"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsSubsample, yfac), 1, VIPS_MAX_COORD, 1); VIPS_ARG_BOOL(class, "point", 5, _("Point"), _("Point sample"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSubsample, point), FALSE); } static void vips_subsample_init(VipsSubsample *subsample) { } /** * vips_subsample: (method) * @in: input image * @out: (out): output image * @xfac: horizontal shrink factor * @yfac: vertical shrink factor * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @point: turn on point sample mode * * Subsample an image by an integer fraction. This is fast, nearest-neighbour * shrink. * * For small horizontal shrinks, this operation will fetch lines of pixels * from @in and then subsample that line. For large shrinks it will fetch * single pixels. * * If @point is set, @in will always be sampled in points. This can be faster * if the previous operations in the pipeline are very slow. * * See also: vips_affine(), vips_shrink(), vips_zoom(). * * Returns: 0 on success, -1 on error. */ int vips_subsample(VipsImage *in, VipsImage **out, int xfac, int yfac, ...) { va_list ap; int result; va_start(ap, yfac); result = vips_call_split("subsample", ap, in, out, xfac, yfac); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/switch.c000066400000000000000000000140541454007373500205740ustar00rootroot00000000000000/* switch between an array of images * * 28/7/19 * - from maplut.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include typedef struct _VipsSwitch { VipsOperation parent_instance; VipsArrayImage *tests; VipsImage *out; int n; } VipsSwitch; typedef VipsOperationClass VipsSwitchClass; G_DEFINE_TYPE(VipsSwitch, vips_switch, VIPS_TYPE_OPERATION); static int vips_switch_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion **ar = (VipsRegion **) seq; VipsSwitch *swit = (VipsSwitch *) b; VipsRect *r = &out_region->valid; int x, y, i; VipsPel *restrict q; size_t qls; VipsPel *restrict p[256]; size_t ls[256]; if (vips_reorder_prepare_many(out_region->im, ar, r)) return -1; g_assert(ar[0]->im->BandFmt == VIPS_FORMAT_UCHAR); g_assert(ar[0]->im->Bands == 1); for (i = 0; i < swit->n; i++) { p[i] = VIPS_REGION_ADDR(ar[i], r->left, r->top); ls[i] = VIPS_REGION_LSKIP(ar[i]); } q = VIPS_REGION_ADDR(out_region, r->left, r->top); qls = VIPS_REGION_LSKIP(out_region); for (y = 0; y < r->height; y++) { for (x = 0; x < r->width; x++) { for (i = 0; i < swit->n; i++) if (p[i][x]) break; q[x] = i; } q += qls; for (i = 0; i < swit->n; i++) p[i] += ls[i]; } return 0; } static int vips_switch_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsSwitch *swit = (VipsSwitch *) object; VipsImage **tests; VipsImage **decode; VipsImage **format; VipsImage **band; VipsImage **size; int i; g_object_set(object, "out", vips_image_new(), NULL); if (VIPS_OBJECT_CLASS(vips_switch_parent_class)->build(object)) return -1; /* 255 rather than 256, since we want to reserve +1 as the no * match value. */ tests = vips_area_get_data(&swit->tests->area, NULL, &swit->n, NULL, NULL); if (swit->n > 255 || swit->n < 1) { vips_error(class->nickname, "%s", _("bad number of tests")); return -1; } decode = (VipsImage **) vips_object_local_array(object, swit->n); format = (VipsImage **) vips_object_local_array(object, swit->n); band = (VipsImage **) vips_object_local_array(object, swit->n + 1); size = (VipsImage **) vips_object_local_array(object, swit->n + 1); /* Decode RAD/LABQ etc. */ for (i = 0; i < swit->n; i++) if (vips_image_decode(tests[i], &decode[i])) return -1; tests = decode; /* Must be uchar. */ for (i = 0; i < swit->n; i++) if (vips_cast_uchar(tests[i], &format[i], NULL)) return -1; tests = format; /* Images must match in size and bands. */ if (vips__bandalike_vec(class->nickname, tests, band, swit->n, 1) || vips__sizealike_vec(band, size, swit->n)) return -1; tests = size; if (tests[0]->Bands > 1) { vips_error(class->nickname, "%s", _("test images not 1-band")); return -1; } if (vips_image_pipeline_array(swit->out, VIPS_DEMAND_STYLE_THINSTRIP, tests)) return -1; if (vips_image_generate(swit->out, vips_start_many, vips_switch_gen, vips_stop_many, tests, swit)) return -1; return 0; } static void vips_switch_class_init(VipsSwitchClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "switch"; object_class->description = _("find the index of the first non-zero pixel in tests"); object_class->build = vips_switch_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_BOXED(class, "tests", 1, _("Tests"), _("Table of images to test"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsSwitch, tests), VIPS_TYPE_ARRAY_IMAGE); VIPS_ARG_IMAGE(class, "out", 2, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsSwitch, out)); } static void vips_switch_init(VipsSwitch *swit) { } static int vips_switchv(VipsImage **tests, VipsImage **out, int n, va_list ap) { VipsArrayImage *tests_array; int result; tests_array = vips_array_image_new(tests, n); result = vips_call_split("switch", ap, tests_array, out); vips_area_unref(VIPS_AREA(tests_array)); return result; } /** * vips_switch: * @tests: (array length=n): test these images * @out: (out): output index image * @n: number of input images * @...: %NULL-terminated list of optional named arguments * * The @tests images are evaluated and at each point the index of the first * non-zero value is written to @out. If all @tests are false, the value * (@n + 1) is written. * * Images in @tests must have one band. They are expanded to the * bounding box of the set of images in @tests, and that size is used for * @out. @tests can have up to 255 elements. * * Combine with vips_case() to make an efficient multi-way vips_ifthenelse(). * * See also: vips_maplut(), vips_case(), vips_ifthenelse(). * * Returns: 0 on success, -1 on error */ int vips_switch(VipsImage **tests, VipsImage **out, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_switchv(tests, out, n, ap); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/tilecache.c000066400000000000000000000625351454007373500212230ustar00rootroot00000000000000/* Simple tile or line cache. * * This isn't the same as the sinkscreen cache: we don't sub-divide, and we * single-thread our callee. * * 23/8/06 * - take ownership of reused tiles in case the cache is being shared * 13/2/07 * - release ownership after fillng with pixels in case we read across * threads * 4/2/10 * - gtkdoc * 12/12/10 * - use im_prepare_to() and avoid making a sequence for every cache tile * 5/12/11 * - rework as a class * 23/6/12 * - listen for "minimise" signal * 23/8/12 * - split to line and tile cache * - use a hash table instead of a list * 13/9/12 * - oops, linecache was oversized * 12/11/12 * - make linecache 50% larger to give some slop room * 8/10/12 * - make it optionally threaded * 21/2/13 * - could deadlock if downstream raised an error (thanks Todd) * 25/4/13 * - cache minimisation is optional, see "persistent" flag * 26/8/14 Lovell * - free the hash table in _dispose() * 11/7/16 * - terminate on tile calc error * 7/3/17 * - remove "access" on linecache, use the base class instead */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a cache of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG_RED #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pconversion.h" /* A tile in cache can be in one of three states: * * DATA - the tile holds valid pixels * CALC - some thread somewhere is calculating it * PEND - some thread somewhere wants it */ typedef enum VipsTileState { VIPS_TILE_STATE_DATA, VIPS_TILE_STATE_CALC, VIPS_TILE_STATE_PEND } VipsTileState; /* A tile in our cache. */ typedef struct _VipsTile { struct _VipsBlockCache *cache; VipsTileState state; VipsRegion *region; /* Region with private mem for data */ /* We count how many threads are relying on this tile. This tile can't * be flushed if ref_count > 0. */ int ref_count; /* Tile position. Just use left/top to calculate a hash. This is the * key for the hash table. Don't use region->valid in case the region * pointer is NULL. */ VipsRect pos; } VipsTile; typedef struct _VipsBlockCache { VipsConversion parent_instance; VipsImage *in; int tile_width; int tile_height; int max_tiles; VipsAccess access; gboolean threaded; gboolean persistent; int ntiles; /* Current cache size */ GMutex *lock; /* Lock everything here */ GCond *new_tile; /* A new tile is ready */ GHashTable *tiles; /* Tiles, hashed by coordinates */ GQueue *recycle; /* Queue of unreffed tiles to reuse */ } VipsBlockCache; typedef VipsConversionClass VipsBlockCacheClass; G_DEFINE_ABSTRACT_TYPE(VipsBlockCache, vips_block_cache, VIPS_TYPE_CONVERSION); #define VIPS_TYPE_BLOCK_CACHE (vips_block_cache_get_type()) static void vips_block_cache_drop_all(VipsBlockCache *cache) { /* FIXME this is a disaster if active threads are working on tiles. We * should have something to block new requests, and only dispose once * all tiles are unreffed. */ g_hash_table_remove_all(cache->tiles); } static void vips_block_cache_dispose(GObject *gobject) { VipsBlockCache *cache = (VipsBlockCache *) gobject; vips_block_cache_drop_all(cache); VIPS_FREEF(vips_g_mutex_free, cache->lock); VIPS_FREEF(vips_g_cond_free, cache->new_tile); if (cache->tiles) g_assert(g_hash_table_size(cache->tiles) == 0); VIPS_FREEF(g_hash_table_destroy, cache->tiles); VIPS_FREEF(g_queue_free, cache->recycle); G_OBJECT_CLASS(vips_block_cache_parent_class)->dispose(gobject); } static int vips_tile_move(VipsTile *tile, int x, int y) { /* We are changing x/y and therefore the hash value. We must unlink * from the old hash position and relink at the new place. */ g_hash_table_steal(tile->cache->tiles, &tile->pos); tile->pos.left = x; tile->pos.top = y; tile->pos.width = tile->cache->tile_width; tile->pos.height = tile->cache->tile_height; g_hash_table_insert(tile->cache->tiles, &tile->pos, tile); if (vips_region_buffer(tile->region, &tile->pos)) return -1; /* No data yet, but someone must want it. */ tile->state = VIPS_TILE_STATE_PEND; return 0; } static VipsTile * vips_tile_new(VipsBlockCache *cache, int x, int y) { VipsTile *tile; if (!(tile = VIPS_NEW(NULL, VipsTile))) return NULL; tile->cache = cache; tile->state = VIPS_TILE_STATE_PEND; tile->ref_count = 0; tile->region = NULL; tile->pos.left = x; tile->pos.top = y; tile->pos.width = cache->tile_width; tile->pos.height = cache->tile_height; g_hash_table_insert(cache->tiles, &tile->pos, tile); g_queue_push_tail(tile->cache->recycle, tile); g_assert(cache->ntiles >= 0); cache->ntiles += 1; if (!(tile->region = vips_region_new(cache->in))) { g_hash_table_remove(cache->tiles, &tile->pos); return NULL; } vips__region_no_ownership(tile->region); if (vips_tile_move(tile, x, y)) { g_hash_table_remove(cache->tiles, &tile->pos); return NULL; } return tile; } /* Do we have a tile in the cache? */ static VipsTile * vips_tile_search(VipsBlockCache *cache, int x, int y) { VipsRect pos; VipsTile *tile; pos.left = x; pos.top = y; pos.width = cache->tile_width; pos.height = cache->tile_height; tile = (VipsTile *) g_hash_table_lookup(cache->tiles, &pos); return tile; } static void vips_tile_find_is_topper(gpointer element, gpointer user_data) { VipsTile *this = (VipsTile *) element; VipsTile **best = (VipsTile **) user_data; if (!*best || this->pos.top < (*best)->pos.top) *best = this; } /* Search the recycle list for the topmost tile. */ static VipsTile * vips_tile_find_topmost(GQueue *recycle) { VipsTile *tile; tile = NULL; g_queue_foreach(recycle, vips_tile_find_is_topper, &tile); return tile; } /* Find existing tile, make a new tile, or if we have a full set of tiles, * reuse one. */ static VipsTile * vips_tile_find(VipsBlockCache *cache, int x, int y) { VipsTile *tile; /* In cache already? */ if ((tile = vips_tile_search(cache, x, y))) { VIPS_DEBUG_MSG_RED( "vips_tile_find: tile %d x %d in cache\n", x, y); return tile; } /* VipsBlockCache not full? */ if (cache->max_tiles == -1 || cache->ntiles < cache->max_tiles) { VIPS_DEBUG_MSG_RED( "vips_tile_find: making new tile at %d x %d\n", x, y); if (!(tile = vips_tile_new(cache, x, y))) return NULL; return tile; } /* Reuse an old one, if there are any. We just peek the tile pointer, * it is removed from the recycle list later on _ref. */ if (cache->recycle) { if (cache->access == VIPS_ACCESS_RANDOM) tile = g_queue_peek_head(cache->recycle); else /* This is slower :( We have to search the recycle * queue. */ tile = vips_tile_find_topmost(cache->recycle); } if (!tile) { /* There are no tiles we can reuse -- we have to make another * for now. They will get culled down again next time around. */ if (!(tile = vips_tile_new(cache, x, y))) return NULL; return tile; } VIPS_DEBUG_MSG_RED("vips_tile_find: reusing tile %d x %d\n", tile->pos.left, tile->pos.top); if (vips_tile_move(tile, x, y)) return NULL; return tile; } static gboolean vips_tile_unlocked(gpointer key, gpointer value, gpointer user_data) { VipsTile *tile = (VipsTile *) value; return !tile->ref_count; } static void vips_block_cache_minimise(VipsImage *image, VipsBlockCache *cache) { VIPS_DEBUG_MSG("vips_block_cache_minimise:\n"); g_mutex_lock(cache->lock); /* We can't drop tiles that are in use. */ g_hash_table_foreach_remove(cache->tiles, vips_tile_unlocked, NULL); g_mutex_unlock(cache->lock); } static int vips_block_cache_build(VipsObject *object) { VipsConversion *conversion = VIPS_CONVERSION(object); VipsBlockCache *cache = (VipsBlockCache *) object; VIPS_DEBUG_MSG("vips_block_cache_build:\n"); if (VIPS_OBJECT_CLASS(vips_block_cache_parent_class)->build(object)) return -1; VIPS_DEBUG_MSG("vips_block_cache_build: max size = %g MB\n", (cache->max_tiles * cache->tile_width * cache->tile_height * VIPS_IMAGE_SIZEOF_PEL(cache->in)) / (1024 * 1024.0)); if (!cache->persistent) g_signal_connect(conversion->out, "minimise", G_CALLBACK(vips_block_cache_minimise), cache); return 0; } static void vips_block_cache_class_init(VipsBlockCacheClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VIPS_DEBUG_MSG("vips_block_cache_class_init\n"); gobject_class->dispose = vips_block_cache_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "blockcache"; vobject_class->description = _("cache an image"); vobject_class->build = vips_block_cache_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsBlockCache, in)); VIPS_ARG_INT(class, "tile_height", 4, _("Tile height"), _("Tile height in pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsBlockCache, tile_height), 1, 1000000, 128); VIPS_ARG_ENUM(class, "access", 6, _("Access"), _("Expected access pattern"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsBlockCache, access), VIPS_TYPE_ACCESS, VIPS_ACCESS_RANDOM); VIPS_ARG_BOOL(class, "threaded", 7, _("Threaded"), _("Allow threaded access"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsBlockCache, threaded), FALSE); VIPS_ARG_BOOL(class, "persistent", 8, _("Persistent"), _("Keep cache between evaluations"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsBlockCache, persistent), FALSE); } static unsigned int vips_rect_hash(VipsRect *pos) { guint hash; /* We could shift down by the tile size? * * X discrimination is more important than Y, since * most tiles will have a similar Y. */ hash = (guint) pos->left ^ ((guint) pos->top << 16); return hash; } static gboolean vips_rect_equal(VipsRect *a, VipsRect *b) { return a->left == b->left && a->top == b->top; } static void vips_tile_destroy(VipsTile *tile) { VipsBlockCache *cache = tile->cache; VIPS_DEBUG_MSG_RED("vips_tile_destroy: tile %d, %d (%p)\n", tile->pos.left, tile->pos.top, tile); /* 0 ref tiles should be on the recycle list. */ g_assert(tile->ref_count == 0); g_assert(g_queue_find(tile->cache->recycle, tile)); g_queue_remove(cache->recycle, tile); cache->ntiles -= 1; g_assert(cache->ntiles >= 0); tile->cache = NULL; VIPS_UNREF(tile->region); g_free(tile); } static void vips_block_cache_init(VipsBlockCache *cache) { cache->tile_width = 128; cache->tile_height = 128; cache->max_tiles = 1000; cache->access = VIPS_ACCESS_RANDOM; cache->threaded = FALSE; cache->persistent = FALSE; cache->ntiles = 0; cache->lock = vips_g_mutex_new(); cache->new_tile = vips_g_cond_new(); cache->tiles = g_hash_table_new_full( (GHashFunc) vips_rect_hash, (GEqualFunc) vips_rect_equal, NULL, (GDestroyNotify) vips_tile_destroy); cache->recycle = g_queue_new(); } typedef struct _VipsTileCache { VipsBlockCache parent_instance; } VipsTileCache; typedef VipsBlockCacheClass VipsTileCacheClass; G_DEFINE_TYPE(VipsTileCache, vips_tile_cache, VIPS_TYPE_BLOCK_CACHE); static void vips_tile_unref(VipsTile *tile) { g_assert(tile->ref_count > 0); tile->ref_count -= 1; if (tile->ref_count == 0) { /* Place at the end of the recycle queue. We pop from the * front when selecting an unused tile for reuse. */ g_assert(!g_queue_find(tile->cache->recycle, tile)); g_queue_push_tail(tile->cache->recycle, tile); } } static void vips_tile_ref(VipsTile *tile) { tile->ref_count += 1; g_assert(tile->ref_count > 0); if (tile->ref_count == 1) { g_assert(g_queue_find(tile->cache->recycle, tile)); g_queue_remove(tile->cache->recycle, tile); } } static void vips_tile_cache_unref(GSList *work) { GSList *p; for (p = work; p; p = p->next) vips_tile_unref((VipsTile *) p->data); g_slist_free(work); } /* Make a set of work tiles. */ static GSList * vips_tile_cache_ref(VipsBlockCache *cache, VipsRect *r) { const int tw = cache->tile_width; const int th = cache->tile_height; /* Find top left of tiles we need. */ const int xs = (r->left / tw) * tw; const int ys = (r->top / th) * th; GSList *work; VipsTile *tile; int x, y; /* Ref all the tiles we will need. */ work = NULL; for (y = ys; y < VIPS_RECT_BOTTOM(r); y += th) for (x = xs; x < VIPS_RECT_RIGHT(r); x += tw) { if (!(tile = vips_tile_find(cache, x, y))) { vips_tile_cache_unref(work); return NULL; } vips_tile_ref(tile); /* We must append, since we want to keep tile ordering * for sequential sources. */ work = g_slist_append(work, tile); VIPS_DEBUG_MSG_RED( "vips_tile_cache_ref: tile %d, %d (%p)\n", x, y, tile); } return work; } static void vips_tile_paste(VipsTile *tile, VipsRegion *out_region) { VipsRect hit; /* The part of the tile that we need. */ vips_rect_intersectrect(&out_region->valid, &tile->pos, &hit); if (!vips_rect_isempty(&hit)) vips_region_copy(tile->region, out_region, &hit, hit.left, hit.top); } /* Also called from vips_line_cache_gen(), beware. */ static int vips_tile_cache_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *in = (VipsRegion *) seq; VipsBlockCache *cache = (VipsBlockCache *) b; VipsRect *r = &out_region->valid; VipsTile *tile; GSList *work; GSList *p; int result; result = 0; VIPS_GATE_START("vips_tile_cache_gen: wait1"); vips__worker_lock(cache->lock); VIPS_GATE_STOP("vips_tile_cache_gen: wait1"); VIPS_DEBUG_MSG_RED( "vips_tile_cache_gen: " "left = %d, top = %d, width = %d, height = %d\n", r->left, r->top, r->width, r->height); /* Ref all the tiles we will need. */ work = vips_tile_cache_ref(cache, r); while (work) { /* Search for data tiles: easy, we can just paste those in. */ for (;;) { for (p = work; p; p = p->next) { tile = (VipsTile *) p->data; if (tile->state == VIPS_TILE_STATE_DATA) break; } if (!p) break; VIPS_DEBUG_MSG_RED( "vips_tile_cache_gen: pasting %p\n", tile); vips_tile_paste(tile, out_region); /* We're done with this tile. */ work = g_slist_remove(work, tile); vips_tile_unref(tile); } /* Calculate the first PEND tile we find on the work list. We * don't calculate all PEND tiles since after the first, more * DATA tiles might heve been made available by other threads * and we want to get them out of the way as soon as we can. */ for (p = work; p; p = p->next) { tile = (VipsTile *) p->data; if (tile->state == VIPS_TILE_STATE_PEND) { tile->state = VIPS_TILE_STATE_CALC; VIPS_DEBUG_MSG_RED( "vips_tile_cache_gen: calc of %p\n", tile); /* In threaded mode, we let other threads run * while we calc this tile. In non-threaded * mode, we keep the lock and make 'em wait. */ if (cache->threaded) g_mutex_unlock(cache->lock); /* Don't compute if we've seen an error * previously. */ if (!result) result = vips_region_prepare_to(in, tile->region, &tile->pos, tile->pos.left, tile->pos.top); if (cache->threaded) { VIPS_GATE_START("vips_tile_cache_gen: wait2"); g_mutex_lock(cache->lock); VIPS_GATE_STOP("vips_tile_cache_gen: wait2"); } /* If there was an error calculating this * tile, black it out and terminate * calculation. We have to stop so we can * support things like --fail on jpegload. * * Don't return early, we'd deadlock. */ if (result) { VIPS_DEBUG_MSG_RED( "vips_tile_cache_gen: error on tile %p\n", tile); g_warning(_("error in tile %d x %d"), tile->pos.left, tile->pos.top); vips_region_black(tile->region); *stop = TRUE; } tile->state = VIPS_TILE_STATE_DATA; /* Let everyone know there's a new DATA tile. * They need to all check their work lists. */ g_cond_broadcast(cache->new_tile); break; } } /* There are no PEND or DATA tiles, we must need a tile some * other thread is currently calculating. * * We must block until the CALC tiles we need are done. */ if (!p && work) { for (p = work; p; p = p->next) { tile = (VipsTile *) p->data; g_assert(tile->state == VIPS_TILE_STATE_CALC); } VIPS_DEBUG_MSG_RED("vips_tile_cache_gen: waiting\n"); VIPS_GATE_START("vips_tile_cache_gen: wait3"); g_cond_wait(cache->new_tile, cache->lock); VIPS_GATE_STOP("vips_tile_cache_gen: wait3"); VIPS_DEBUG_MSG("vips_tile_cache_gen: awake!\n"); } } g_mutex_unlock(cache->lock); return result; } static int vips_tile_cache_build(VipsObject *object) { VipsConversion *conversion = VIPS_CONVERSION(object); VipsBlockCache *block_cache = (VipsBlockCache *) object; VipsTileCache *cache = (VipsTileCache *) object; VIPS_DEBUG_MSG("vips_tile_cache_build\n"); if (VIPS_OBJECT_CLASS(vips_tile_cache_parent_class)->build(object)) return -1; if (vips_image_pio_input(block_cache->in)) return -1; if (vips_image_pipelinev(conversion->out, VIPS_DEMAND_STYLE_SMALLTILE, block_cache->in, NULL)) return -1; if (vips_image_generate(conversion->out, vips_start_one, vips_tile_cache_gen, vips_stop_one, block_cache->in, cache)) return -1; return 0; } static void vips_tile_cache_class_init(VipsTileCacheClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VIPS_DEBUG_MSG("vips_tile_cache_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "tilecache"; vobject_class->description = _("cache an image as a set of tiles"); vobject_class->build = vips_tile_cache_build; VIPS_ARG_INT(class, "tile_width", 3, _("Tile width"), _("Tile width in pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsBlockCache, tile_width), 1, 1000000, 128); VIPS_ARG_INT(class, "max_tiles", 5, _("Max tiles"), _("Maximum number of tiles to cache"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsBlockCache, max_tiles), -1, 1000000, 1000); } static void vips_tile_cache_init(VipsTileCache *cache) { } /** * vips_tilecache: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @tile_width: width of tiles in cache * * @tile_height: height of tiles in cache * * @max_tiles: maximum number of tiles to cache * * @access: hint expected access pattern #VipsAccess * * @threaded: allow many threads * * @persistent: don't drop cache at end of computation * * This operation behaves rather like vips_copy() between images * @in and @out, except that it keeps a cache of computed pixels. * This cache is made of up to @max_tiles tiles (a value of -1 * means any number of tiles), and each tile is of size @tile_width * by @tile_height pixels. * * Each cache tile is made with a single call to * vips_region_prepare(). * * When the cache fills, a tile is chosen for reuse. If @access is * #VIPS_ACCESS_RANDOM, then the least-recently-used tile is reused. If * @access is #VIPS_ACCESS_SEQUENTIAL * the top-most tile is reused. * * By default, @tile_width and @tile_height are 128 pixels, and the operation * will cache up to 1,000 tiles. @access defaults to #VIPS_ACCESS_RANDOM. * * Normally, only a single thread at once is allowed to calculate tiles. If * you set @threaded to %TRUE, vips_tilecache() will allow many threads to * calculate tiles at once, and share the cache between them. * * Normally the cache is dropped when computation finishes. Set @persistent to * %TRUE to keep the cache between computations. * * See also: vips_cache(), vips_linecache(). * * Returns: 0 on success, -1 on error. */ int vips_tilecache(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("tilecache", ap, in, out); va_end(ap); return result; } typedef struct _VipsLineCache { VipsBlockCache parent_instance; } VipsLineCache; typedef VipsBlockCacheClass VipsLineCacheClass; G_DEFINE_TYPE(VipsLineCache, vips_line_cache, VIPS_TYPE_BLOCK_CACHE); static int vips_line_cache_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsBlockCache *block_cache = (VipsBlockCache *) b; VIPS_GATE_START("vips_line_cache_gen: wait"); vips__worker_lock(block_cache->lock); VIPS_GATE_STOP("vips_line_cache_gen: wait"); /* We size up the cache to the largest request. */ if (out_region->valid.height > block_cache->max_tiles * block_cache->tile_height) { block_cache->max_tiles = 1 + (out_region->valid.height / block_cache->tile_height); VIPS_DEBUG_MSG("vips_line_cache_gen: bumped max_tiles to %d\n", block_cache->max_tiles); } g_mutex_unlock(block_cache->lock); return vips_tile_cache_gen(out_region, seq, a, b, stop); } static int vips_line_cache_build(VipsObject *object) { VipsConversion *conversion = VIPS_CONVERSION(object); VipsBlockCache *block_cache = (VipsBlockCache *) object; VipsLineCache *cache = (VipsLineCache *) object; int tile_width; int tile_height; int n_lines; VIPS_DEBUG_MSG("vips_line_cache_build\n"); if (!vips_object_argument_isset(object, "access")) block_cache->access = VIPS_ACCESS_SEQUENTIAL; if (VIPS_OBJECT_CLASS(vips_line_cache_parent_class)->build(object)) return -1; /* This can go up with request size, see vips_line_cache_gen(). */ vips_get_tile_size(block_cache->in, &tile_width, &tile_height, &n_lines); block_cache->tile_width = block_cache->in->Xsize; /* Output has two buffers n_lines height, so 2 * n_lines is the maximum * non-locality from threading. Double again for conv, rounding, etc. * * tile_height can be huge for things like tiff read, where we can * have a whole strip in a single tile ... we still need to have a * minimum of two strips, so we can handle requests that straddle a * tile boundary. */ block_cache->max_tiles = VIPS_MAX(2, 4 * n_lines / block_cache->tile_height); VIPS_DEBUG_MSG("vips_line_cache_build: n_lines = %d\n", n_lines); VIPS_DEBUG_MSG("vips_line_cache_build: max_tiles = %d\n", block_cache->max_tiles); VIPS_DEBUG_MSG("vips_line_cache_build: tile_height = %d\n", block_cache->tile_height); VIPS_DEBUG_MSG("vips_line_cache_build: max size = %g MB\n", (block_cache->max_tiles * block_cache->tile_width * block_cache->tile_height * VIPS_IMAGE_SIZEOF_PEL(block_cache->in)) / (1024 * 1024.0)); if (vips_image_pio_input(block_cache->in)) return -1; if (vips_image_pipelinev(conversion->out, VIPS_DEMAND_STYLE_THINSTRIP, block_cache->in, NULL)) return -1; if (vips_image_generate(conversion->out, vips_start_one, vips_line_cache_gen, vips_stop_one, block_cache->in, cache)) return -1; return 0; } static void vips_line_cache_class_init(VipsLineCacheClass *class) { VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VIPS_DEBUG_MSG("vips_line_cache_class_init\n"); vobject_class->nickname = "linecache"; vobject_class->description = _("cache an image as a set of lines"); vobject_class->build = vips_line_cache_build; } static void vips_line_cache_init(VipsLineCache *cache) { } /** * vips_linecache: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @access: hint expected access pattern #VipsAccess * * @tile_height: height of tiles in cache * * @threaded: allow many threads * * This operation behaves rather like vips_copy() between images * @in and @out, except that it keeps a cache of computed scanlines. * * The number of lines cached is enough for a small amount of non-local * access. * * Each cache tile is made with a single call to * vips_region_prepare(). * * When the cache fills, a tile is chosen for reuse. If @access is * #VIPS_ACCESS_RANDOM, then the least-recently-used tile is reused. If * @access is #VIPS_ACCESS_SEQUENTIAL, then * the top-most tile is reused. @access defaults to #VIPS_ACCESS_RANDOM. * * @tile_height can be used to set the size of the strips that * vips_linecache() uses. The default is 1 (a single scanline). * * Normally, only a single thread at once is allowed to calculate tiles. If * you set @threaded to %TRUE, vips_linecache() will allow many threads to * calculate tiles at once and share the cache between them. * * See also: vips_cache(), vips_tilecache(). * * Returns: 0 on success, -1 on error. */ int vips_linecache(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("linecache", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/transpose3d.c000066400000000000000000000121261454007373500215360ustar00rootroot00000000000000/* vips_transpose3d * * 30/4/18 * - from grid.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pconversion.h" typedef struct _VipsTranspose3d { VipsConversion parent_instance; VipsImage *in; int page_height; } VipsTranspose3d; typedef VipsConversionClass VipsTranspose3dClass; G_DEFINE_TYPE(VipsTranspose3d, vips_transpose3d, VIPS_TYPE_CONVERSION); static int vips_transpose3d_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) vseq; VipsImage *in = (VipsImage *) a; VipsTranspose3d *transpose3d = (VipsTranspose3d *) b; VipsRect *r = &out_region->valid; int output_page_height = in->Ysize / transpose3d->page_height; int y; VipsRect tile; tile = *r; tile.height = 1; for (y = 0; y < r->height; y++) { /* y in output. */ int yo = r->top + y; /* On output page. */ int yop = yo / output_page_height; /* Line on output page. */ int yol = yo % output_page_height; /* y of input page. */ int yip = yol * transpose3d->page_height; /* y of input line. */ int yi = yip + yop; tile.top = yi; /* Render into out_region. */ if (vips_region_prepare_to(ir, out_region, &tile, tile.left, yo)) return -1; } return 0; } static int vips_transpose3d_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsConversion *conversion = VIPS_CONVERSION(object); VipsTranspose3d *transpose3d = (VipsTranspose3d *) object; VipsImage *in; if (VIPS_OBJECT_CLASS(vips_transpose3d_parent_class)->build(object)) return -1; in = transpose3d->in; if (vips_check_coding_known(class->nickname, in) || vips_image_pio_input(in)) return -1; if (!vips_object_argument_isset(object, "page_height")) { if (vips_image_get_int(in, VIPS_META_PAGE_HEIGHT, &transpose3d->page_height)) return -1; } if (transpose3d->page_height <= 0 || in->Ysize % transpose3d->page_height != 0) { vips_error(class->nickname, "%s", _("bad page_height")); return -1; } if (vips_image_pipelinev(conversion->out, VIPS_DEMAND_STYLE_SMALLTILE, in, NULL)) return -1; vips_image_set_int(conversion->out, VIPS_META_PAGE_HEIGHT, in->Ysize / transpose3d->page_height); if (vips_image_generate(conversion->out, vips_start_one, vips_transpose3d_gen, vips_stop_one, in, transpose3d)) return -1; return 0; } static void vips_transpose3d_class_init(VipsTranspose3dClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "transpose3d"; vobject_class->description = _("transpose3d an image"); vobject_class->build = vips_transpose3d_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsTranspose3d, in)); VIPS_ARG_INT(class, "page_height", 3, _("Page height"), _("Height of each input page"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsTranspose3d, page_height), 0, 10000000, 0); } static void vips_transpose3d_init(VipsTranspose3d *transpose3d) { } /** * vips_transpose3d: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @page_height: %gint, size of each input page * * Transpose a volumetric image. * * Volumetric images are very tall, thin images, with the metadata item * #VIPS_META_PAGE_HEIGHT set to the height of each sub-image. * * This operation swaps the two major dimensions, so that page N in the * output contains the Nth scanline, in order, from each input page. * * You can override the #VIPS_META_PAGE_HEIGHT metadata item with the optional * @page_height parameter. * * #VIPS_META_PAGE_HEIGHT in the output image is the number of pages in the * input image. * * See also: vips_grid(). * * Returns: 0 on success, -1 on error */ int vips_transpose3d(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("transpose3d", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/unpremultiply.c000066400000000000000000000225301454007373500222220ustar00rootroot00000000000000/* unpremultiply alpha * * Author: John Cupitt * Written on: 7/5/15 * * 25/5/16 * - max_alpha defaults to 65535 for RGB16/GREY16 * 24/11/17 lovell * - match normalised alpha to output type * 27/2/21 jjonesrs * - revise range clipping and 1/x, again * 8/8/22 * - look for alpha near 0, not just exactly 0 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "pconversion.h" typedef struct _VipsUnpremultiply { VipsConversion parent_instance; VipsImage *in; double max_alpha; int alpha_band; } VipsUnpremultiply; typedef VipsConversionClass VipsUnpremultiplyClass; G_DEFINE_TYPE(VipsUnpremultiply, vips_unpremultiply, VIPS_TYPE_CONVERSION); /* Unpremultiply an N-band image. Don't use clip_alpha to calculate factor: we * want over and undershoots on alpha and RGB to cancel. */ #define UNPRE_MANY(IN, OUT) \ { \ IN *restrict p = (IN *) in; \ OUT *restrict q = (OUT *) out; \ \ for (x = 0; x < width; x++) { \ IN alpha = p[alpha_band]; \ OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \ \ for (i = 0; i < alpha_band; i++) \ q[i] = factor * p[i]; \ q[alpha_band] = VIPS_CLIP(0, alpha, max_alpha); \ for (i = alpha_band + 1; i < bands; i++) \ q[i] = p[i]; \ \ p += bands; \ q += bands; \ } \ } /* Unpremultiply an RGB (four band) image. */ #define UNPRE_RGBA(IN, OUT) \ { \ IN *restrict p = (IN *) in; \ OUT *restrict q = (OUT *) out; \ \ for (x = 0; x < width; x++) { \ IN alpha = p[3]; \ OUT factor = alpha == 0 ? 0 : max_alpha / alpha; \ \ q[0] = factor * p[0]; \ q[1] = factor * p[1]; \ q[2] = factor * p[2]; \ q[3] = VIPS_CLIP(0, alpha, max_alpha); \ \ p += 4; \ q += 4; \ } \ } #define UNPRE(IN, OUT) \ { \ if (bands == 4) { \ UNPRE_RGBA(IN, OUT); \ } \ else { \ UNPRE_MANY(IN, OUT); \ } \ } /* For float-style images, we need to check for alpha near zero, or we'll get * +/- Inf in the output. */ #define FUNPRE_MANY(IN, OUT) \ { \ IN *restrict p = (IN *) in; \ OUT *restrict q = (OUT *) out; \ \ for (x = 0; x < width; x++) { \ IN alpha = p[alpha_band]; \ OUT factor = VIPS_ABS(alpha) < 0.01 ? 0 : max_alpha / alpha; \ \ for (i = 0; i < alpha_band; i++) \ q[i] = factor * p[i]; \ q[alpha_band] = VIPS_CLIP(0, alpha, max_alpha); \ for (i = alpha_band + 1; i < bands; i++) \ q[i] = p[i]; \ \ p += bands; \ q += bands; \ } \ } #define FUNPRE_RGBA(IN, OUT) \ { \ IN *restrict p = (IN *) in; \ OUT *restrict q = (OUT *) out; \ \ for (x = 0; x < width; x++) { \ IN alpha = p[3]; \ OUT factor = VIPS_ABS(alpha) < 0.01 ? 0 : max_alpha / alpha; \ \ q[0] = factor * p[0]; \ q[1] = factor * p[1]; \ q[2] = factor * p[2]; \ q[3] = VIPS_CLIP(0, alpha, max_alpha); \ \ p += 4; \ q += 4; \ } \ } #define FUNPRE(IN, OUT) \ { \ if (bands == 4) { \ FUNPRE_RGBA(IN, OUT); \ } \ else { \ FUNPRE_MANY(IN, OUT); \ } \ } VIPS_TARGET_CLONES("default,avx") static int vips_unpremultiply_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsUnpremultiply *unpremultiply = (VipsUnpremultiply *) b; VipsRegion *ir = (VipsRegion *) vseq; VipsImage *im = ir->im; VipsRect *r = &out_region->valid; int width = r->width; int bands = im->Bands; double max_alpha = unpremultiply->max_alpha; int alpha_band = unpremultiply->alpha_band; int x, y, i; if (vips_region_prepare(ir, r)) return -1; for (y = 0; y < r->height; y++) { VipsPel *in = VIPS_REGION_ADDR(ir, r->left, r->top + y); VipsPel *out = VIPS_REGION_ADDR(out_region, r->left, r->top + y); switch (im->BandFmt) { case VIPS_FORMAT_UCHAR: UNPRE(unsigned char, float); break; case VIPS_FORMAT_CHAR: UNPRE(signed char, float); break; case VIPS_FORMAT_USHORT: UNPRE(unsigned short, float); break; case VIPS_FORMAT_SHORT: UNPRE(signed short, float); break; case VIPS_FORMAT_UINT: UNPRE(unsigned int, float); break; case VIPS_FORMAT_INT: UNPRE(signed int, float); break; case VIPS_FORMAT_FLOAT: FUNPRE(float, float); break; case VIPS_FORMAT_DOUBLE: FUNPRE(double, double); break; case VIPS_FORMAT_COMPLEX: case VIPS_FORMAT_DPCOMPLEX: default: g_assert_not_reached(); } } return 0; } static int vips_unpremultiply_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsConversion *conversion = VIPS_CONVERSION(object); VipsUnpremultiply *unpremultiply = (VipsUnpremultiply *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 1); VipsImage *in; if (VIPS_OBJECT_CLASS(vips_unpremultiply_parent_class)->build(object)) return -1; in = unpremultiply->in; if (vips_image_decode(in, &t[0])) return -1; in = t[0]; /* Trivial case: fall back to copy(). */ if (in->Bands == 1) return vips_image_write(in, conversion->out); if (vips_check_noncomplex(class->nickname, in)) return -1; if (vips_image_pipelinev(conversion->out, VIPS_DEMAND_STYLE_THINSTRIP, in, NULL)) return -1; /* Is max-alpha unset? Default to the correct value for this * interpretation. */ if (!vips_object_argument_isset(object, "max_alpha")) unpremultiply->max_alpha = vips_interpretation_max_alpha(in->Type); /* Is alpha-band unset? Default to the final band for this image. */ if (!vips_object_argument_isset(object, "alpha_band")) unpremultiply->alpha_band = in->Bands - 1; if (in->BandFmt == VIPS_FORMAT_DOUBLE) conversion->out->BandFmt = VIPS_FORMAT_DOUBLE; else conversion->out->BandFmt = VIPS_FORMAT_FLOAT; if (vips_image_generate(conversion->out, vips_start_one, vips_unpremultiply_gen, vips_stop_one, in, unpremultiply)) return -1; return 0; } static void vips_unpremultiply_class_init(VipsUnpremultiplyClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VIPS_DEBUG_MSG("vips_unpremultiply_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "unpremultiply"; vobject_class->description = _("unpremultiply image alpha"); vobject_class->build = vips_unpremultiply_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsUnpremultiply, in)); VIPS_ARG_DOUBLE(class, "max_alpha", 115, _("Maximum alpha"), _("Maximum value of alpha channel"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsUnpremultiply, max_alpha), 0, 100000000, 255); VIPS_ARG_INT(class, "alpha_band", 116, _("Alpha band"), _("Unpremultiply with this alpha"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsUnpremultiply, alpha_band), 0, 100000000, 3); } static void vips_unpremultiply_init(VipsUnpremultiply *unpremultiply) { unpremultiply->max_alpha = 255.0; } /** * vips_unpremultiply: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @max_alpha: %gdouble, maximum value for alpha * * @alpha_band: %gint, band containing alpha data * * Unpremultiplies any alpha channel. * Band @alpha_band (by default the final band) contains the alpha and all * other bands are transformed as: * * |[ * alpha = (int) clip(0, in[in.bands - 1], @max_alpha); * norm = (double) alpha / @max_alpha; * if (alpha == 0) * out = [0, ..., 0, alpha]; * else * out = [in[0] / norm, ..., in[in.bands - 1] / norm, alpha]; * ]| * * So for an N-band image, the first N - 1 bands are divided by the clipped * and normalised final band, the final band is clipped. * If there is only a single band, the image is passed through unaltered. * * The result is * #VIPS_FORMAT_FLOAT unless the input format is #VIPS_FORMAT_DOUBLE, in which * case the output is double as well. * * @max_alpha has the default value 255, or 65535 for images tagged as * #VIPS_INTERPRETATION_RGB16 or * #VIPS_INTERPRETATION_GREY16. * * Non-complex images only. * * See also: vips_premultiply(), vips_flatten(). * * Returns: 0 on success, -1 on error */ int vips_unpremultiply(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("unpremultiply", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/wrap.c000066400000000000000000000100441454007373500202370ustar00rootroot00000000000000/* im_wrap * * Copyright: 2008, Nottingham Trent University * Author: Tom Vajzovic * Written on: 2008-01-15 * 2/2/10 * - rewritten in terms of im_replicate()/im_extract_area() * - gtkdoc * - allows any x/y * 31/5/13 * - redone as a class * - added rotquad behaviour if x/y not set */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include "pconversion.h" typedef struct _VipsWrap { VipsConversion parent_instance; VipsImage *in; int x; int y; } VipsWrap; typedef VipsConversionClass VipsWrapClass; G_DEFINE_TYPE(VipsWrap, vips_wrap, VIPS_TYPE_CONVERSION); static int vips_wrap_build(VipsObject *object) { VipsConversion *conversion = VIPS_CONVERSION(object); VipsWrap *wrap = (VipsWrap *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 7); int x; int y; if (VIPS_OBJECT_CLASS(vips_wrap_parent_class)->build(object)) return -1; if (!vips_object_argument_isset(object, "x")) wrap->x = wrap->in->Xsize / 2; if (!vips_object_argument_isset(object, "y")) wrap->y = wrap->in->Ysize / 2; /* Clock arithmetic: we want negative x/y to wrap around * nicely. */ x = wrap->x < 0 ? -wrap->x % wrap->in->Xsize : wrap->in->Xsize - wrap->x % wrap->in->Xsize; y = wrap->y < 0 ? -wrap->y % wrap->in->Ysize : wrap->in->Ysize - wrap->y % wrap->in->Ysize; if (vips_replicate(wrap->in, &t[0], 2, 2, NULL) || vips_extract_area(t[0], &t[1], x, y, wrap->in->Xsize, wrap->in->Ysize, NULL) || vips_image_write(t[1], conversion->out)) return -1; conversion->out->Xoffset = x; conversion->out->Yoffset = y; return 0; } static void vips_wrap_class_init(VipsWrapClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "wrap"; vobject_class->description = _("wrap image origin"); vobject_class->build = vips_wrap_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsWrap, in)); VIPS_ARG_INT(class, "x", 3, _("x"), _("Left edge of input in output"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsWrap, x), -VIPS_MAX_COORD, VIPS_MAX_COORD, 0); VIPS_ARG_INT(class, "y", 4, _("y"), _("Top edge of input in output"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsWrap, y), -VIPS_MAX_COORD, VIPS_MAX_COORD, 0); } static void vips_wrap_init(VipsWrap *wrap) { } /** * vips_wrap: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @x: horizontal displacement * * @y: vertical displacement * * Slice an image up and move the segments about so that the pixel that was * at 0, 0 is now at @x, @y. If @x and @y are not set, they default to the * centre of the image. * * See also: vips_embed(), vips_replicate(). * * Returns: 0 on success, -1 on error */ int vips_wrap(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("wrap", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/conversion/zoom.c000066400000000000000000000237341454007373500202640ustar00rootroot00000000000000/* im_zoom * * Author: N. Martinez 1991 * 6/6/94 JC * - rewritten to ANSI-C * - now works for any type, including IM_CODING_LABQ * 7/10/94 JC * - new IM_ARRAY() macro * 26/1/96 JC * - separate x and y zoom factors * 21/8/96 JC * - partial, yuk! this is so complicated ... * 30/8/96 JC * - sets demand_hint * 10/2/00 JC * - check for integer overflow in zoom facs ... was happening with ip's * zoom on large images * 3/8/02 JC * - fall back to im_copy() for x & y factors == 1 * 24/3/09 * - added IM_CODING_RAD support * 1/2/10 * - gtkdoc * 1/6/13 * - redo as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG #define DEBUG_VERBOSE */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pconversion.h" typedef struct _VipsZoom { VipsConversion parent_instance; /* The input image. */ VipsImage *in; int xfac; /* Scale factors */ int yfac; } VipsZoom; typedef VipsConversionClass VipsZoomClass; G_DEFINE_TYPE(VipsZoom, vips_zoom, VIPS_TYPE_CONVERSION); /* Paint the part of the region containing only whole pels. */ static void vips_zoom_paint_whole(VipsRegion *out_region, VipsRegion *ir, VipsZoom *zoom, const int left, const int right, const int top, const int bottom) { const int ps = VIPS_IMAGE_SIZEOF_PEL(ir->im); const int ls = VIPS_REGION_LSKIP(out_region); const int rs = ps * (right - left); /* Transform to ir coordinates. */ const int ileft = left / zoom->xfac; const int iright = right / zoom->xfac; const int itop = top / zoom->yfac; const int ibottom = bottom / zoom->yfac; int x, y, z, i; /* We know this! */ g_assert(right > left && bottom > top && right % zoom->xfac == 0 && left % zoom->xfac == 0 && top % zoom->yfac == 0 && bottom % zoom->yfac == 0); /* Loop over input, as we know we are all whole. */ for (y = itop; y < ibottom; y++) { VipsPel *p = VIPS_REGION_ADDR(ir, ileft, y); VipsPel *q = VIPS_REGION_ADDR(out_region, left, y * zoom->yfac); VipsPel *r; /* Expand the first line of pels. */ r = q; for (x = ileft; x < iright; x++) { /* Copy each pel xfac times. */ for (z = 0; z < zoom->xfac; z++) { for (i = 0; i < ps; i++) r[i] = p[i]; r += ps; } p += ps; } /* Copy the expanded line yfac-1 times. */ r = q + ls; for (z = 1; z < zoom->yfac; z++) { memcpy(r, q, rs); r += ls; } } } /* Paint the part of the region containing only part-pels. */ static void vips_zoom_paint_part(VipsRegion *out_region, VipsRegion *ir, VipsZoom *zoom, const int left, const int right, const int top, const int bottom) { const int ps = VIPS_IMAGE_SIZEOF_PEL(ir->im); const int ls = VIPS_REGION_LSKIP(out_region); const int rs = ps * (right - left); /* Start position in input. */ const int ix = left / zoom->xfac; const int iy = top / zoom->yfac; /* Pels down to yfac boundary, pels down to bottom. Do the smallest of * these for first y loop. */ const int ptbound = (iy + 1) * zoom->yfac - top; const int ptbot = bottom - top; int yt = VIPS_MIN(ptbound, ptbot); int x, y, z, i; /* Only know this. */ g_assert(right - left >= 0 && bottom - top >= 0); /* Have to loop over output. */ for (y = top; y < bottom;) { VipsPel *p = VIPS_REGION_ADDR(ir, ix, y / zoom->yfac); VipsPel *q = VIPS_REGION_ADDR(out_region, left, y); VipsPel *r; /* Output pels until we jump the input pointer. */ int xt = (ix + 1) * zoom->xfac - left; /* Loop for this output line. */ r = q; for (x = left; x < right; x++) { /* Copy 1 pel. */ for (i = 0; i < ps; i++) r[i] = p[i]; r += ps; /* Move input if on boundary. */ --xt; if (xt == 0) { xt = zoom->xfac; p += ps; } } /* Repeat that output line until the bottom of this pixel * boundary, or we hit bottom. */ r = q + ls; for (z = 1; z < yt; z++) { memcpy(r, q, rs); r += ls; } /* Move y on by the number of lines we wrote. */ y += yt; /* Reset yt for next iteration. */ yt = zoom->yfac; } } /* Zoom a VipsRegion. */ static int vips_zoom_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsZoom *zoom = (VipsZoom *) b; /* Output area we are building. */ const VipsRect *r = &out_region->valid; const int ri = VIPS_RECT_RIGHT(r); const int bo = VIPS_RECT_BOTTOM(r); VipsRect s; int left, right, top, bottom; int width, height; #ifdef DEBUG_VERBOSE printf("vips_zoom_gen: left=%d, top=%d, width=%d, height=%d\n", r->left, r->top, r->width, r->height); #endif /*DEBUG_VERBOSE*/ /* Area of input we need. We have to round out, as we may have * part-pixels all around the edges. */ left = VIPS_ROUND_DOWN(r->left, zoom->xfac); right = VIPS_ROUND_UP(ri, zoom->xfac); top = VIPS_ROUND_DOWN(r->top, zoom->yfac); bottom = VIPS_ROUND_UP(bo, zoom->yfac); width = right - left; height = bottom - top; s.left = left / zoom->xfac; s.top = top / zoom->yfac; s.width = width / zoom->xfac; s.height = height / zoom->yfac; if (vips_region_prepare(ir, &s)) return -1; /* Find the part of the output (if any) which uses only whole pels. */ left = VIPS_ROUND_UP(r->left, zoom->xfac); right = VIPS_ROUND_DOWN(ri, zoom->xfac); top = VIPS_ROUND_UP(r->top, zoom->yfac); bottom = VIPS_ROUND_DOWN(bo, zoom->yfac); width = right - left; height = bottom - top; /* Stage 1: we just paint the whole pels in the centre of the region. * As we know they are not clipped, we can do it quickly. */ if (width > 0 && height > 0) vips_zoom_paint_whole(out_region, ir, zoom, left, right, top, bottom); /* Just fractional pixels left. Paint in the top, left, right and * bottom parts. */ if (top - r->top > 0) /* Some top pixels. */ vips_zoom_paint_part(out_region, ir, zoom, r->left, ri, r->top, VIPS_MIN(top, bo)); if (left - r->left > 0 && height > 0) /* Left pixels. */ vips_zoom_paint_part(out_region, ir, zoom, r->left, VIPS_MIN(left, ri), top, bottom); if (ri - right > 0 && height > 0) /* Right pixels. */ vips_zoom_paint_part(out_region, ir, zoom, VIPS_MAX(right, r->left), ri, top, bottom); if (bo - bottom > 0 && height >= 0) /* Bottom pixels. */ vips_zoom_paint_part(out_region, ir, zoom, r->left, ri, VIPS_MAX(bottom, r->top), bo); return 0; } static int vips_zoom_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsConversion *conversion = VIPS_CONVERSION(object); VipsZoom *zoom = (VipsZoom *) object; if (VIPS_OBJECT_CLASS(vips_zoom_parent_class)->build(object)) return -1; g_assert(zoom->xfac > 0); g_assert(zoom->yfac > 0); /* Make sure we won't get integer overflow. */ if ((double) zoom->in->Xsize * zoom->xfac > (double) INT_MAX / 2 || (double) zoom->in->Ysize * zoom->yfac > (double) INT_MAX / 2) { vips_error(class->nickname, "%s", _("zoom factors too large")); return -1; } if (zoom->xfac == 1 && zoom->yfac == 1) return vips_image_write(zoom->in, conversion->out); if (vips_image_pio_input(zoom->in) || vips_check_coding_known(class->nickname, zoom->in)) return -1; /* Set demand hints. THINSTRIP will prevent us from using * vips_zoom_paint_whole() much ... so go for FATSTRIP. */ if (vips_image_pipelinev(conversion->out, VIPS_DEMAND_STYLE_FATSTRIP, zoom->in, NULL)) return -1; conversion->out->Xsize = zoom->in->Xsize * zoom->xfac; conversion->out->Ysize = zoom->in->Ysize * zoom->yfac; if (vips_image_generate(conversion->out, vips_start_one, vips_zoom_gen, vips_stop_one, zoom->in, zoom)) return -1; return 0; } static void vips_zoom_class_init(VipsZoomClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "zoom"; vobject_class->description = _("zoom an image"); vobject_class->build = vips_zoom_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "input", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsZoom, in)); VIPS_ARG_INT(class, "xfac", 3, _("Xfac"), _("Horizontal zoom factor"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsZoom, xfac), 1, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "yfac", 4, _("Yfac"), _("Vertical zoom factor"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsZoom, yfac), 1, VIPS_MAX_COORD, 1); } static void vips_zoom_init(VipsZoom *zoom) { } /** * vips_zoom: (method) * @in: input image * @out: (out): output image * @xfac: horizontal scale factor * @yfac: vertical scale factor * @...: %NULL-terminated list of optional named arguments * * Zoom an image by repeating pixels. This is fast nearest-neighbour * zoom. * * See also: vips_affine(), vips_subsample(). * * Returns: 0 on success, -1 on error. */ int vips_zoom(VipsImage *in, VipsImage **out, int xfac, int yfac, ...) { va_list ap; int result; va_start(ap, yfac); result = vips_call_split("zoom", ap, in, out, xfac, yfac); va_end(ap); return result; } libvips-8.15.1/libvips/convolution/000077500000000000000000000000001454007373500173155ustar00rootroot00000000000000libvips-8.15.1/libvips/convolution/canny.c000066400000000000000000000270711454007373500206000ustar00rootroot00000000000000/* Canny edge detector */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include typedef struct _VipsCanny { VipsOperation parent_instance; VipsImage *in; VipsImage *out; double sigma; VipsPrecision precision; /* Need an image vector for start_many. */ VipsImage *args[3]; } VipsCanny; typedef VipsOperationClass VipsCannyClass; G_DEFINE_TYPE(VipsCanny, vips_canny, VIPS_TYPE_OPERATION); /* Simple 2x2 -1/+1 difference. For uchar, we try to hit the vector path and * use an offset rather than -ves. Otherwise it's float or double output. */ static int vips_canny_gradient(VipsImage *in, VipsImage **Gx, VipsImage **Gy) { VipsImage *scope; VipsImage **t; VipsPrecision precision; scope = vips_image_new(); t = (VipsImage **) vips_object_local_array((VipsObject *) scope, 2); t[0] = vips_image_new_matrixv(2, 2, -1.0, 1.0, -1.0, 1.0); if (in->BandFmt == VIPS_FORMAT_UCHAR) { precision = VIPS_PRECISION_INTEGER; vips_image_set_double(t[0], "offset", 128.0); } else precision = VIPS_PRECISION_FLOAT; if (vips_conv(in, Gx, t[0], "precision", precision, NULL) || vips_rot90(t[0], &t[1], NULL) || vips_conv(in, Gy, t[1], "precision", precision, NULL)) { g_object_unref(scope); return -1; } g_object_unref(scope); return 0; } /* LUT for calculating atan2() with +/- 4 bits of precision in each axis. */ static VipsPel vips_canny_polar_atan2[256]; /* For the uchar path, gx/gy are -128 to +127, and we need -8 to +7 for the * atan2 LUT. * * For G, we should calculate sqrt(gx * gx + gy * gy), however we are only * interested in relative magnitude (max of sqrt), so we can skip the sqrt * itself. We need a result that will fit in 0 - 255, so shift down. */ #define POLAR_UCHAR \ { \ for (x = 0; x < r->width; x++) { \ for (band = 0; band < Gx->Bands; band++) { \ int gx = p1[band] - 128; \ int gy = p2[band] - 128; \ \ int i = ((gx >> 4) & 0xf) | (gy & 0xf0); \ \ q[0] = (gx * gx + gy * gy + 256) >> 9; \ q[1] = vips_canny_polar_atan2[i]; \ \ q += 2; \ } \ \ p1 += Gx->Bands; \ p2 += Gx->Bands; \ } \ } /* Float/double path. We keep the same ranges as the uchar path to reduce * confusion. */ #define POLAR(TYPE) \ { \ TYPE *tp1 = (TYPE *) p1; \ TYPE *tp2 = (TYPE *) p2; \ TYPE *tq = (TYPE *) q; \ \ for (x = 0; x < r->width; x++) { \ for (band = 0; band < Gx->Bands; band++) { \ double gx = tp1[band]; \ double gy = tp2[band]; \ double theta = VIPS_DEG(atan2(gx, gy)); \ \ tq[0] = (gx * gx + gy * gy + 256.0) / 512.0; \ tq[1] = 256.0 * fmod(theta + 360.0, 360.0) / 360.0; \ \ tq += 2; \ } \ \ tp1 += Gx->Bands; \ tp2 += Gx->Bands; \ } \ } static int vips_canny_polar_generate(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsRegion **in = (VipsRegion **) vseq; VipsRect *r = &out_region->valid; VipsImage *Gx = in[0]->im; int x, y, band; if (vips_reorder_prepare_many(out_region->im, in, r)) return -1; for (y = 0; y < r->height; y++) { VipsPel *p1 = (VipsPel *restrict) VIPS_REGION_ADDR(in[0], r->left, r->top + y); VipsPel *p2 = (VipsPel *restrict) VIPS_REGION_ADDR(in[1], r->left, r->top + y); VipsPel *q = (VipsPel *restrict) VIPS_REGION_ADDR(out_region, r->left, r->top + y); switch (Gx->BandFmt) { case VIPS_FORMAT_UCHAR: POLAR_UCHAR; break; case VIPS_FORMAT_FLOAT: POLAR(float); break; case VIPS_FORMAT_DOUBLE: POLAR(double); break; default: g_assert(FALSE); } } return 0; } static void * vips_atan2_init(void *null) { int i; for (i = 0; i < 256; i++) { /* Use the bottom 4 bits for x, the top 4 for y. The double * shift does sign extension, assuming 2s complement. */ int bits = sizeof(int) * 8 - 4; int x = ((i & 0xf) << bits) >> bits; int y = ((i >> 4) & 0x0f) << bits >> bits; double theta = VIPS_DEG(atan2(x, y)) + 360; vips_canny_polar_atan2[i] = 256 * theta / 360; } return NULL; } /* Calculate G/theta from Gx/Gy. We code theta as 0-256 for 0-360 * and skip the sqrt on G. * * For a white disc on a black background, theta is 0 at the top, 64 on the * left, 128 on the right and 192 on the right edge. */ static int vips_canny_polar(VipsImage **args, VipsImage **out) { static GOnce once = G_ONCE_INIT; g_once(&once, vips_atan2_init, NULL); *out = vips_image_new(); if (vips_image_pipeline_array(*out, VIPS_DEMAND_STYLE_THINSTRIP, args)) return -1; (*out)->Bands *= 2; if (vips_image_generate(*out, vips_start_many, vips_canny_polar_generate, vips_stop_many, args, NULL)) return -1; return 0; } #define THIN(TYPE) \ { \ TYPE *tp = (TYPE *) p; \ TYPE *tq = (TYPE *) q; \ \ for (x = 0; x < r->width; x++) { \ for (band = 0; band < out_bands; band++) { \ TYPE G = tp[lsk + psk]; \ TYPE theta = tp[lsk + psk + 1]; \ int low_theta = ((int) (theta / 32)) & 0x7; \ int high_theta = (low_theta + 1) & 0x7; \ TYPE residual = theta - low_theta * 32; \ TYPE lowa = tp[offset[low_theta]]; \ TYPE lowb = tp[offset[high_theta]]; \ TYPE low = \ (lowa * (32 - residual) + lowb * residual) / 32; \ TYPE higha = tp[offset[(low_theta + 4) & 0x7]]; \ TYPE highb = tp[offset[(high_theta + 4) & 0x7]]; \ TYPE high = \ (higha * (32 - residual) + highb * residual) / 32; \ \ if (G <= low || \ G < high) \ G = 0; \ \ tq[band] = G; \ \ tp += 2; \ } \ \ tq += out_bands; \ } \ } static int vips_canny_thin_generate(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsRegion *in = (VipsRegion *) vseq; VipsRect *r = &out_region->valid; VipsImage *im = in->im; int out_bands = out_region->im->Bands; VipsRect rect; int x, y, band; int lsk; int psk; int offset[8]; rect = *r; rect.width += 2; rect.height += 2; if (vips_region_prepare(in, &rect)) return -1; /* These are in typed units. */ lsk = VIPS_REGION_LSKIP(in) / VIPS_IMAGE_SIZEOF_ELEMENT(im); psk = VIPS_IMAGE_SIZEOF_PEL(im) / VIPS_IMAGE_SIZEOF_ELEMENT(im); /* For each of the 8 directions, the offset to get to that pixel from * the top-left of the 3x3. * * 1 | 0 | 7 * --+---+-- * 2 | X | 6 * --+---+-- * 3 | 4 | 5 */ offset[0] = psk; offset[1] = 0; offset[2] = lsk; offset[3] = 2 * lsk; offset[4] = 2 * lsk + psk; offset[5] = 2 * lsk + 2 * psk; offset[6] = lsk + 2 * psk; offset[7] = 2 * psk; for (y = 0; y < r->height; y++) { VipsPel *p = (VipsPel *restrict) VIPS_REGION_ADDR(in, r->left, r->top + y); VipsPel *q = (VipsPel *restrict) VIPS_REGION_ADDR(out_region, r->left, r->top + y); switch (im->BandFmt) { case VIPS_FORMAT_UCHAR: THIN(unsigned char); break; case VIPS_FORMAT_FLOAT: THIN(float); break; case VIPS_FORMAT_DOUBLE: THIN(double); break; default: g_assert(FALSE); } } return 0; } /* Remove non-maximal edges. At each point, compare the G to the G in either * direction and 0 it if it's not the largest. */ static int vips_canny_thin(VipsImage *in, VipsImage **out) { *out = vips_image_new(); if (vips_image_pipelinev(*out, VIPS_DEMAND_STYLE_THINSTRIP, in, NULL)) return -1; (*out)->Bands /= 2; (*out)->Xsize -= 2; (*out)->Ysize -= 2; if (vips_image_generate(*out, vips_start_one, vips_canny_thin_generate, vips_stop_one, in, NULL)) return -1; return 0; } static int vips_canny_build(VipsObject *object) { VipsCanny *canny = (VipsCanny *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 6); VipsImage *in; if (VIPS_OBJECT_CLASS(vips_canny_parent_class)->build(object)) return -1; in = canny->in; if (vips_gaussblur(in, &t[0], canny->sigma, "precision", canny->precision, NULL)) return -1; in = t[0]; if (vips_canny_gradient(in, &t[1], &t[2])) return -1; /* Form (G, theta). */ canny->args[0] = t[1]; canny->args[1] = t[2]; canny->args[2] = NULL; if (vips_canny_polar(canny->args, &t[3])) return -1; in = t[3]; /* Expand by two pixels all around, then thin in the direction of the * gradient. */ if (vips_embed(in, &t[4], 1, 1, in->Xsize + 2, in->Ysize + 2, "extend", VIPS_EXTEND_COPY, NULL)) return -1; if (vips_canny_thin(t[4], &t[5])) return -1; in = t[5]; g_object_set(object, "out", vips_image_new(), NULL); if (vips_image_write(in, canny->out)) return -1; return 0; } static void vips_canny_class_init(VipsCannyClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "canny"; object_class->description = _("Canny edge detector"); object_class->build = vips_canny_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsCanny, in)); VIPS_ARG_IMAGE(class, "out", 2, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsCanny, out)); VIPS_ARG_DOUBLE(class, "sigma", 10, _("Sigma"), _("Sigma of Gaussian"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCanny, sigma), 0.01, 1000, 1.4); VIPS_ARG_ENUM(class, "precision", 103, _("Precision"), _("Convolve with this precision"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCanny, precision), VIPS_TYPE_PRECISION, VIPS_PRECISION_FLOAT); } static void vips_canny_init(VipsCanny *canny) { canny->sigma = 1.4; canny->precision = VIPS_PRECISION_FLOAT; } /** * vips_canny: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @sigma: %gdouble, sigma for gaussian blur * * @precision: #VipsPrecision, calculation accuracy * * Find edges by Canny's method: The maximum of the derivative of the gradient * in the direction of the gradient. Output is float, except for uchar input, * where output is uchar, and double input, where output is double. Non-complex * images only. * * Use @sigma to control the scale over which gradient is measured. 1.4 is * usually a good value. * * Use @precision to set the precision of edge detection. For uchar images, * setting this to #VIPS_PRECISION_INTEGER will make edge detection much * faster, but sacrifice some sensitivity. * * You will probably need to process the output further to eliminate weak * edges. * * See also: vips_sobel(). * * Returns: 0 on success, -1 on error. */ int vips_canny(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("canny", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/convolution/compass.c000066400000000000000000000141161454007373500211310ustar00rootroot00000000000000/* repeatedly convolve with a rotating mask * * 23/10/13 * - from vips_conv() * 8/5/17 * - default to float ... int will often lose precision and should not be * the default * 2/11/17 * - add MIN mode */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include "pconvolution.h" typedef struct { VipsConvolution parent_instance; int times; VipsAngle45 angle; VipsCombine combine; VipsPrecision precision; int layers; int cluster; } VipsCompass; typedef VipsConvolutionClass VipsCompassClass; G_DEFINE_TYPE(VipsCompass, vips_compass, VIPS_TYPE_CONVOLUTION); static int vips_compass_build(VipsObject *object) { VipsConvolution *convolution = (VipsConvolution *) object; VipsCompass *compass = (VipsCompass *) object; VipsImage **masks; VipsImage *mask; VipsImage **images; int i; VipsImage **abs; VipsImage **combine; VipsImage *x; g_object_set(compass, "out", vips_image_new(), NULL); if (VIPS_OBJECT_CLASS(vips_compass_parent_class)->build(object)) return -1; masks = (VipsImage **) vips_object_local_array(object, compass->times); images = (VipsImage **) vips_object_local_array(object, compass->times); abs = (VipsImage **) vips_object_local_array(object, compass->times); combine = (VipsImage **) vips_object_local_array(object, compass->times); mask = convolution->M; for (i = 0; i < compass->times; i++) { if (vips_conv(convolution->in, &images[i], mask, "precision", compass->precision, "layers", compass->layers, "cluster", compass->cluster, NULL)) return -1; if (vips_rot45(mask, &masks[i], "angle", compass->angle, NULL)) return -1; mask = masks[i]; } for (i = 0; i < compass->times; i++) if (vips_abs(images[i], &abs[i], NULL)) return -1; switch (compass->combine) { case VIPS_COMBINE_MAX: if (vips_bandrank(abs, &combine[0], compass->times, "index", compass->times - 1, NULL)) return -1; x = combine[0]; break; case VIPS_COMBINE_MIN: if (vips_bandrank(abs, &combine[0], compass->times, "index", 0, NULL)) return -1; x = combine[0]; break; case VIPS_COMBINE_SUM: if (vips_sum(abs, &combine[0], compass->times, NULL)) return -1; x = combine[0]; break; default: g_assert_not_reached(); /* Stop compiler warnings. */ x = NULL; } if (vips_image_write(x, convolution->out)) return -1; return 0; } static void vips_compass_class_init(VipsCompassClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "compass"; object_class->description = _("convolve with rotating mask"); object_class->build = vips_compass_build; VIPS_ARG_INT(class, "times", 101, _("Times"), _("Rotate and convolve this many times"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCompass, times), 1, 1000, 2); VIPS_ARG_ENUM(class, "angle", 103, _("Angle"), _("Rotate mask by this much between convolutions"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCompass, angle), VIPS_TYPE_ANGLE45, VIPS_ANGLE45_D90); VIPS_ARG_ENUM(class, "combine", 104, _("Combine"), _("Combine convolution results like this"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCompass, combine), VIPS_TYPE_COMBINE, VIPS_COMBINE_MAX); VIPS_ARG_ENUM(class, "precision", 203, _("Precision"), _("Convolve with this precision"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCompass, precision), VIPS_TYPE_PRECISION, VIPS_PRECISION_FLOAT); VIPS_ARG_INT(class, "layers", 204, _("Layers"), _("Use this many layers in approximation"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCompass, layers), 1, 1000, 5); VIPS_ARG_INT(class, "cluster", 205, _("Cluster"), _("Cluster lines closer than this in approximation"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsCompass, cluster), 1, 100, 1); } static void vips_compass_init(VipsCompass *compass) { compass->times = 2; compass->angle = VIPS_ANGLE45_D90; compass->combine = VIPS_COMBINE_MAX; compass->precision = VIPS_PRECISION_FLOAT; compass->layers = 5; compass->cluster = 1; } /** * vips_compass: (method) * @in: input image * @out: (out): output image * @mask: convolve with this mask * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @times: %gint, how many times to rotate and convolve * * @angle: #VipsAngle45, rotate mask by this much between colvolutions * * @combine: #VipsCombine, combine results like this * * @precision: #VipsPrecision, precision for blur, default float * * @layers: %gint, number of layers for approximation * * @cluster: %gint, cluster lines closer than this distance * * This convolves @in with @mask @times times, rotating @mask by @angle * each time. By default, it comvolves twice, rotating by 90 degrees, taking * the maximum result. * * See also: vips_conv(). * * Returns: 0 on success, -1 on error. */ int vips_compass(VipsImage *in, VipsImage **out, VipsImage *mask, ...) { va_list ap; int result; va_start(ap, mask); result = vips_call_split("compass", ap, in, out, mask); va_end(ap); return result; } libvips-8.15.1/libvips/convolution/conv.c000066400000000000000000000137231454007373500204340ustar00rootroot00000000000000/* convolution * * 12/8/13 * - from vips_hist_cum() * 8/5/17 * - default to float ... int will often lose precision and should not be * the default */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pconvolution.h" typedef struct { VipsConvolution parent_instance; VipsPrecision precision; int layers; int cluster; } VipsConv; typedef VipsConvolutionClass VipsConvClass; G_DEFINE_TYPE(VipsConv, vips_conv, VIPS_TYPE_CONVOLUTION); static int vips_conv_build(VipsObject *object) { VipsConvolution *convolution = (VipsConvolution *) object; VipsConv *conv = (VipsConv *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 4); VipsImage *in; if (VIPS_OBJECT_CLASS(vips_conv_parent_class)->build(object)) return -1; g_object_set(conv, "out", vips_image_new(), NULL); in = convolution->in; /* printf("vips_conv_build: convolving with:\n"); vips_matrixprint(convolution->M, NULL); */ /* Unpack for processing. */ if (vips_image_decode(in, &t[0])) return -1; in = t[0]; switch (conv->precision) { case VIPS_PRECISION_FLOAT: if (vips_convf(in, &t[1], convolution->M, NULL) || vips_image_write(t[1], convolution->out)) return -1; break; case VIPS_PRECISION_INTEGER: if (vips_convi(in, &t[1], convolution->M, NULL) || vips_image_write(t[1], convolution->out)) return -1; break; case VIPS_PRECISION_APPROXIMATE: if (vips_conva(in, &t[1], convolution->M, "layers", conv->layers, "cluster", conv->cluster, NULL) || vips_image_write(t[1], convolution->out)) return -1; break; default: g_assert_not_reached(); } vips_reorder_margin_hint(convolution->out, convolution->M->Xsize * convolution->M->Ysize); return 0; } static void vips_conv_class_init(VipsConvClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "conv"; object_class->description = _("convolution operation"); object_class->build = vips_conv_build; VIPS_ARG_ENUM(class, "precision", 103, _("Precision"), _("Convolve with this precision"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsConv, precision), VIPS_TYPE_PRECISION, VIPS_PRECISION_FLOAT); VIPS_ARG_INT(class, "layers", 104, _("Layers"), _("Use this many layers in approximation"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsConv, layers), 1, 1000, 5); VIPS_ARG_INT(class, "cluster", 105, _("Cluster"), _("Cluster lines closer than this in approximation"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsConv, cluster), 1, 100, 1); } static void vips_conv_init(VipsConv *conv) { conv->precision = VIPS_PRECISION_FLOAT; conv->layers = 5; conv->cluster = 1; } /** * vips_conv: (method) * @in: input image * @out: (out): output image * @mask: convolve with this mask * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @precision: #VipsPrecision, calculation accuracy * * @layers: %gint, number of layers for approximation * * @cluster: %gint, cluster lines closer than this distance * * Convolution. * * Perform a convolution of @in with @mask. * Each output pixel is calculated as: * * |[ * sigma[i]{pixel[i] * mask[i]} / scale + offset * ]| * * where scale and offset are part of @mask. * * By default, @precision is * #VIPS_PRECISION_FLOAT. The output image * is always #VIPS_FORMAT_FLOAT unless @in is #VIPS_FORMAT_DOUBLE, in which case * @out is also #VIPS_FORMAT_DOUBLE. * * If @precision is #VIPS_PRECISION_INTEGER, then * elements of @mask are converted to * integers before convolution, using rint(), * and the output image * always has the same #VipsBandFormat as the input image. * * For #VIPS_FORMAT_UCHAR images and #VIPS_PRECISION_INTEGER @precision, * vips_conv() uses a fast vector path based on * half-float arithmetic. This can produce slightly different results. * Disable the vector path with `--vips-novector` or `VIPS_NOVECTOR` or * vips_vector_set_enabled(). * * If @precision is #VIPS_PRECISION_APPROXIMATE then, like * #VIPS_PRECISION_INTEGER, @mask is converted to int before convolution, and * the output image * always has the same #VipsBandFormat as the input image. * * Larger values for @layers give more accurate * results, but are slower. As @layers approaches the mask radius, the * accuracy will become close to exact convolution and the speed will drop to * match. For many large masks, such as Gaussian, @n_layers need be only 10% of * this value and accuracy will still be good. * * Smaller values of @cluster will give more accurate results, but be slower * and use more memory. 10% of the mask radius is a good rule of thumb. * * See also: vips_convsep(). * * Returns: 0 on success, -1 on error */ int vips_conv(VipsImage *in, VipsImage **out, VipsImage *mask, ...) { va_list ap; int result; va_start(ap, mask); result = vips_call_split("conv", ap, in, out, mask); va_end(ap); return result; } libvips-8.15.1/libvips/convolution/conva.c000066400000000000000000000744221454007373500206000ustar00rootroot00000000000000/* conva ... approximate convolution * * This operation does an approximate convolution. * * Author: John Cupitt & Nicolas Robidoux * Written on: 31/5/11 * Modified on: * 31/5/11 * - from im_aconvsep() * 10/7/16 * - redone as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* See: http://incubator.quasimondo.com/processing/stackblur.pde This thing is a little like stackblur, but generalised to any 2D convolution. */ /* TODO timing: $ time vips im_conv_f img_0075.jpg x2.v g2d201.con real 5m3.359s user 9m34.700s sys 0m1.500s $ time vips im_aconv img_0075.jpg x.v g2d201.con 10 10 real 0m3.151s user 0m5.640s sys 0m0.100s $ vips im_subtract x.v x2.v diff.v $ vips im_abs diff.v abs.v $ vips im_max abs.v 2.70833 - are we handling mask offset correctly? - could we do better with an h and a v cumulativization image? we might not need the huge intermediate we have now, since any line sum an be found with simple indexing */ /* #define DEBUG #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include #include "pconvolution.h" /* Maximum number of boxes we can break the mask into. Don't have this too * high, it'll make the instance huge, and gobject has a 64kb limit. */ #define MAX_LINES (1000) /* The number of edges we consider at once in clustering. Higher values are * faster, but risk pushing up average error in the result. */ #define MAX_EDGES (1000) /* A horizontal line in the mask. */ typedef struct _HLine { /* Start is the left-most pixel in the line, end is one beyond the * right-most pixel. */ int start; int end; /* The hlines have weights. weight 0 means this line is unused. */ int weight; } HLine; /* For clustering. A pair of hlines and their distance. An edge in a graph. */ typedef struct _Edge { /* The index into boxes->hline[]. */ int a; int b; /* The distance between them, see boxes_distance(). */ int d; } Edge; /* An element of a vline. */ typedef struct _VElement { /* band is the index into hline[] we add, row is the row we take * it from. */ int band; int row; /* Negative lobes are made with factor -1, we also common-up repeated * additions of the same line. */ int factor; } VElement; /* A vline. */ typedef struct _VLine { int band; int factor; int start; int end; } VLine; /* A set of boxes. */ typedef struct { VipsConvolution parent_instance; VipsImage *iM; int layers; int cluster; int divisor; int rounding; int offset; /* The horizontal lines we gather. hline[3] writes to band 3 in the * intermediate image. max_line is the length of the longest hline: * over 256 and we need to use an int intermediate for 8-bit images. */ int n_hline; HLine hline[MAX_LINES]; int max_line; /* During clustering, the top few edges we are considering. */ Edge edge[MAX_EDGES]; /* Scale and sum a set of hlines to make the final value. */ int n_velement; VElement velement[MAX_LINES]; /* And group those velements as vlines. */ int n_vline; VLine vline[MAX_LINES]; } VipsConva; typedef VipsConvolutionClass VipsConvaClass; G_DEFINE_TYPE(VipsConva, vips_conva, VIPS_TYPE_CONVOLUTION); /* Euclid's algorithm. Use this to common up mults. */ static int gcd(int a, int b) { if (b == 0) return abs(a); else return gcd(b, a % b); } static void vips_conva_hline_start(VipsConva *conva, int x) { conva->hline[conva->n_hline].start = x; conva->hline[conva->n_hline].weight = 1; } static int vips_conva_hline_end(VipsConva *conva, int x, int y, int factor) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(conva); conva->hline[conva->n_hline].end = x; conva->velement[conva->n_velement].row = y; conva->velement[conva->n_velement].band = conva->n_hline; conva->velement[conva->n_velement].factor = factor; if (conva->n_hline >= MAX_LINES - 1) { vips_error(class->nickname, "%s", _("mask too complex")); return -1; } conva->n_hline += 1; if (conva->n_velement >= MAX_LINES - 1) { vips_error(class->nickname, "%s", _("mask too complex")); return -1; } conva->n_velement += 1; return 0; } #ifdef DEBUG static void vips_conva_hprint(VipsConva *conva) { int x, y; printf("hlines:\n"); printf(" n b r f w\n"); for (y = 0; y < conva->n_velement; y++) { int b = conva->velement[y].band; printf("%4d %3d %3d %2d %3d ", y, b, conva->velement[y].row, conva->velement[y].factor, conva->hline[b].weight); for (x = 0; x < 45; x++) { int rx = x * (conva->iM->Xsize + 1) / 45; if (rx >= conva->hline[b].start && rx < conva->hline[b].end) printf("#"); else printf(" "); } printf(" %3d .. %3d\n", conva->hline[b].start, conva->hline[b].end); } } static void vips_conva_vprint(VipsConva *conva) { int y; printf("%d vlines:\n", conva->n_vline); printf(" n b f s e\n"); for (y = 0; y < conva->n_vline; y++) printf("%4d %2d %2d == %3d .. %3d\n", y, conva->vline[y].band, conva->vline[y].factor, conva->vline[y].start, conva->vline[y].end); printf("divisor = %d\n", conva->divisor); printf("rounding = %d\n", conva->rounding); printf("offset = %d\n", conva->offset); printf("max_line = %d\n", conva->max_line); } #endif /*DEBUG*/ /* Break the mask into a set of hlines. */ static int vips_conva_decompose_hlines(VipsConva *conva) { VipsImage *iM = conva->iM; const int size = iM->Xsize * iM->Ysize; double *coeff = VIPS_MATRIX(iM, 0, 0); double max; double min; double depth; int layers_above; int layers_below; int z, n, x, y; /* Find mask range. We must always include the zero axis in the mask. */ max = 0; min = 0; for (n = 0; n < size; n++) { max = VIPS_MAX(max, coeff[n]); min = VIPS_MIN(min, coeff[n]); } VIPS_DEBUG_MSG("vips_conva_decompose_hlines: min = %g, max = %g\n", min, max); /* The zero axis must fall on a layer boundary. Estimate the * depth, find n-lines-above-zero, get exact depth, then calculate a * fixed n-lines which includes any negative parts. */ depth = (max - min) / conva->layers; layers_above = VIPS_CEIL(max / depth); depth = max / layers_above; layers_below = VIPS_FLOOR(min / depth); conva->layers = layers_above - layers_below; VIPS_DEBUG_MSG("vips_conva_decompose_hlines: depth = %g, layers = %d\n", depth, conva->layers); /* For each layer, generate a set of lines which are inside the * perimeter. Work down from the top. */ for (z = 0; z < conva->layers; z++) { /* How deep we are into the mask, as a double we can test * against. Add half the layer depth so we can easily find >50% * mask elements. */ double z_ph = max - (1 + z) * depth + depth / 2; /* Odd, but we must avoid rounding errors that make us miss 0 * in the line above. */ int z_positive = z < layers_above; for (y = 0; y < iM->Ysize; y++) { int inside; /* Start outside the perimeter. */ inside = 0; for (x = 0; x < iM->Xsize; x++) { double c = coeff[x + y * iM->Xsize]; /* The vertical line from mask[x, y] to 0 is * inside. Is our current square (x, y) part * of that line? */ if ((z_positive && c >= z_ph) || (!z_positive && c <= z_ph)) { if (!inside) { vips_conva_hline_start(conva, x); inside = 1; } } else { if (inside) { if (vips_conva_hline_end(conva, x, y, z_positive ? 1 : -1)) return -1; inside = 0; } } } if (inside && vips_conva_hline_end(conva, iM->Xsize, y, z_positive ? 1 : -1)) return -1; } } #ifdef DEBUG VIPS_DEBUG_MSG("vips_conva_decompose_hlines: generated %d hlines\n", conva->n_hline); vips_conva_hprint(conva); #endif /*DEBUG*/ return 0; } /* The 'distance' between a pair of hlines. */ static int vips_conva_distance(VipsConva *conva, int a, int b) { g_assert(conva->hline[a].weight > 0 && conva->hline[b].weight > 0); return abs(conva->hline[a].start - conva->hline[b].start) + abs(conva->hline[a].end - conva->hline[b].end); } /* Merge two hlines. Line b is deleted, and any refs to b in vlines updated to * point at a. */ static void vips_conva_merge(VipsConva *conva, int a, int b) { int i; /* Scale weights. */ int fa = conva->hline[a].weight; int fb = conva->hline[b].weight; double w = (double) fb / (fa + fb); /* New endpoints. */ conva->hline[a].start += w * (conva->hline[b].start - conva->hline[a].start); conva->hline[a].end += w * (conva->hline[b].end - conva->hline[a].end); conva->hline[a].weight += conva->hline[b].weight; /* Update velement refs to b to refer to a instead. */ for (i = 0; i < conva->n_velement; i++) if (conva->velement[i].band == b) conva->velement[i].band = a; /* Mark b to be deleted. */ conva->hline[b].weight = 0; } static int edge_sortfn(const void *p1, const void *p2) { Edge *a = (Edge *) p1; Edge *b = (Edge *) p2; return a->d - b->d; } /* Cluster in batches. Return non-zero if we merged some lines. * * This is not as accurate as rescanning the whole space on every merge, but * it's far faster. */ static int vips_conva_cluster2(VipsConva *conva) { int i, j, k; int worst; int worst_i; int merged; for (i = 0; i < MAX_EDGES; i++) { conva->edge[i].a = -1; conva->edge[i].b = -1; conva->edge[i].d = 99999; } worst_i = 0; worst = conva->edge[worst_i].d; for (i = 0; i < conva->n_hline; i++) { if (conva->hline[i].weight == 0) continue; for (j = i + 1; j < conva->n_hline; j++) { int distance; if (conva->hline[j].weight == 0) continue; distance = vips_conva_distance(conva, i, j); if (distance < worst) { conva->edge[worst_i].a = i; conva->edge[worst_i].b = j; conva->edge[worst_i].d = distance; worst_i = 0; worst = conva->edge[worst_i].d; for (k = 0; k < MAX_EDGES; k++) if (conva->edge[k].d > worst) { worst = conva->edge[k].d; worst_i = k; } } } } /* Sort to get closest first. */ qsort(conva->edge, MAX_EDGES, sizeof(Edge), edge_sortfn); /* printf("edges:\n"); printf(" n a b d:\n"); for (i = 0; i < MAX_EDGES; i++) printf("%2i) %3d %3d %3d\n", i, conva->edge[i].a, conva->edge[i].b, conva->edge[i].d); */ /* Merge from the top down. */ merged = 0; for (k = 0; k < MAX_EDGES; k++) { Edge *edge = &conva->edge[k]; if (edge->d > conva->cluster) break; /* Has been removed, see loop below. */ if (edge->a == -1) continue; vips_conva_merge(conva, edge->a, edge->b); merged = 1; /* Nodes a and b have vanished or been moved. Remove any edges * which refer to them from the edge list, */ for (i = k; i < MAX_EDGES; i++) { Edge *edgei = &conva->edge[i]; if (edgei->a == edge->a || edgei->b == edge->a || edgei->a == edge->b || edgei->b == edge->b) edgei->a = -1; } } return merged; } /* Renumber after clustering. We will have removed a lot of hlines ... shuffle * the rest down, adjust all the vline references. */ static void vips_conva_renumber(VipsConva *conva) { int i, j; VIPS_DEBUG_MSG("vips_conva_renumber: renumbering ...\n"); /* Loop for all zero-weight hlines. */ for (i = 0; i < conva->n_hline;) { if (conva->hline[i].weight > 0) { i++; continue; } /* We move hlines i + 1 down, so we need to adjust all * band[] refs to match. */ for (j = 0; j < conva->n_velement; j++) if (conva->velement[j].band > i) conva->velement[j].band -= 1; memmove(conva->hline + i, conva->hline + i + 1, sizeof(HLine) * (conva->n_hline - i - 1)); conva->n_hline -= 1; } VIPS_DEBUG_MSG("vips_conva_renumber: ... %d hlines remain\n", conva->n_hline); } /* Sort by band, then factor, then row. */ static int velement_sortfn(const void *p1, const void *p2) { VElement *a = (VElement *) p1; VElement *b = (VElement *) p2; if (a->band != b->band) return a->band - b->band; if (a->factor != b->factor) return a->factor - b->factor; return a->row - b->row; } static void vips_conva_vline(VipsConva *conva) { int y, z; VIPS_DEBUG_MSG("vips_conva_vline: forming vlines ...\n"); /* Sort to get elements which could form a vline together. */ qsort(conva->velement, conva->n_velement, sizeof(VElement), velement_sortfn); #ifdef DEBUG vips_conva_hprint(conva); #endif /*DEBUG*/ /* If two lines have the same row and band, we can join them and knock * up the factor instead. */ for (y = 0; y < conva->n_velement; y++) { for (z = y + 1; z < conva->n_velement; z++) if (conva->velement[z].band != conva->velement[y].band || conva->velement[z].row != conva->velement[y].row) break; /* We need to keep the sign of the old factor. */ if (conva->velement[y].factor > 0) conva->velement[y].factor = z - y; else conva->velement[y].factor = y - z; memmove(conva->velement + y + 1, conva->velement + z, sizeof(VElement) * (conva->n_velement - z)); conva->n_velement -= z - y - 1; } #ifdef DEBUG printf("after commoning up, %d velement remain\n", conva->n_velement); vips_conva_hprint(conva); #endif /*DEBUG*/ conva->n_vline = 0; for (y = 0; y < conva->n_velement;) { int n = conva->n_vline; /* Start of a line. */ conva->vline[n].band = conva->velement[y].band; conva->vline[n].factor = conva->velement[y].factor; conva->vline[n].start = conva->velement[y].row; /* Search for the end of this line. */ for (z = y + 1; z < conva->n_velement; z++) if (conva->velement[z].band != conva->vline[n].band || conva->velement[z].factor != conva->vline[n].factor || conva->velement[z].row != conva->vline[n].start + z - y) break; /* So the line ends at the previously examined element. We * want 'end' to be one beyond that (non-inclusive). */ conva->vline[n].end = conva->velement[z - 1].row + 1; conva->n_vline += 1; y = z; } VIPS_DEBUG_MSG("vips_conva_vline: found %d vlines\n", conva->n_vline); } /* Break a mask into boxes. */ static int vips_conva_decompose_boxes(VipsConva *conva) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(conva); VipsImage *iM = conva->iM; double *coeff = VIPS_MATRIX(iM, 0, 0); const int size = iM->Xsize * iM->Ysize; double scale = vips_image_get_scale(iM); double offset = vips_image_get_offset(iM); double sum; double area; int x, y, z; if (vips_conva_decompose_hlines(conva)) return -1; /* Cluster to find groups of lines. */ VIPS_DEBUG_MSG( "vips_conva_decompose_boxes: " "clustering hlines with thresh %d ...\n", conva->cluster); while (vips_conva_cluster2(conva)) ; /* Renumber to remove holes created by clustering. */ vips_conva_renumber(conva); /* Find a set of vlines for the remaining hlines. */ vips_conva_vline(conva); /* Find the area of the lines and the length of the longest hline. We * find the absolute area, we don't want -ves to cancel. */ area = 0; conva->max_line = 0; for (y = 0; y < conva->n_velement; y++) { x = conva->velement[y].band; z = conva->hline[x].end - conva->hline[x].start; area += abs(conva->velement[y].factor * z); if (z > conva->max_line) conva->max_line = z; } /* Strength reduction: if all lines are divisible by n, we can move * that n out into the area factor. The aim is to produce as many * factor 1 lines as we can and to reduce the chance of overflow. */ x = conva->velement[0].factor; for (y = 1; y < conva->n_velement; y++) x = gcd(x, conva->velement[y].factor); for (y = 0; y < conva->n_velement; y++) conva->velement[y].factor /= x; area *= x; /* Find the area of the original mask. Again, don't let -ves cancel. */ sum = 0; for (z = 0; z < size; z++) sum += fabs(coeff[z]); conva->divisor = VIPS_RINT(area * scale / sum); conva->rounding = (conva->divisor + 1) / 2; conva->offset = offset; #ifdef DEBUG vips_conva_hprint(conva); vips_conva_vprint(conva); #endif /*DEBUG*/ /* With 512x512 tiles, each hline requires 3mb of intermediate per * thread ... 300 lines is about a gb per thread, ouch. */ if (conva->n_hline > 150) { vips_error(class->nickname, "%s", _("mask too complex")); return -1; } return 0; } /* Our sequence value. */ typedef struct { VipsConva *conva; VipsRegion *ir; /* Input region */ /* Offsets for start and stop. */ int *start; int *end; int last_stride; /* Avoid recalcing offsets, if we can */ /* The rolling sums. int for integer types, double for floating point * types. */ void *sum; } VipsConvaSeq; /* Free a sequence value. */ static int vips_conva_stop(void *vseq, void *a, void *b) { VipsConvaSeq *seq = (VipsConvaSeq *) vseq; VIPS_UNREF(seq->ir); return 0; } /* Convolution start function. */ static void * vips_conva_start(VipsImage *out, void *a, void *b) { VipsImage *in = (VipsImage *) a; VipsConva *conva = (VipsConva *) b; VipsConvaSeq *seq; seq = VIPS_NEW(out, VipsConvaSeq); seq->conva = conva; seq->ir = vips_region_new(in); /* n_velement should be the largest possible dimension. */ g_assert(conva->n_velement >= conva->n_hline); g_assert(conva->n_velement >= conva->n_vline); seq->start = VIPS_ARRAY(out, conva->n_velement, int); seq->end = VIPS_ARRAY(out, conva->n_velement, int); if (vips_band_format_isint(out->BandFmt)) seq->sum = VIPS_ARRAY(out, conva->n_velement, int); else seq->sum = VIPS_ARRAY(out, conva->n_velement, double); seq->last_stride = -1; return seq; } /* The h and v loops are very similar, but also annoyingly different. Keep * them separate for easy debugging. */ #define HCONV(IN, OUT) \ G_STMT_START \ { \ for (i = 0; i < bands; i++) { \ OUT *seq_sum = (OUT *) seq->sum; \ \ IN *p; \ OUT *q; \ \ p = i + (IN *) VIPS_REGION_ADDR(ir, r->left, r->top + y); \ q = i * n_hline + \ (OUT *) VIPS_REGION_ADDR(out_region, r->left, r->top + y); \ \ for (z = 0; z < n_hline; z++) { \ seq_sum[z] = 0; \ for (x = conva->hline[z].start; \ x < conva->hline[z].end; x++) \ seq_sum[z] += p[x * istride]; \ q[z] = seq_sum[z]; \ } \ q += ostride; \ \ for (x = 1; x < r->width; x++) { \ for (z = 0; z < n_hline; z++) { \ seq_sum[z] += p[seq->end[z]]; \ seq_sum[z] -= p[seq->start[z]]; \ q[z] = seq_sum[z]; \ } \ p += istride; \ q += ostride; \ } \ } \ } \ G_STMT_END /* Do horizontal masks ... we scan the mask along scanlines. */ static int vips_conva_hgenerate(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsConvaSeq *seq = (VipsConvaSeq *) vseq; VipsImage *in = (VipsImage *) a; VipsConva *conva = (VipsConva *) b; VipsRegion *ir = seq->ir; const int n_hline = conva->n_hline; VipsImage *iM = conva->iM; VipsRect *r = &out_region->valid; /* Double the bands (notionally) for complex. */ int bands = vips_band_format_iscomplex(in->BandFmt) ? 2 * in->Bands : in->Bands; VipsRect s; int x, y, z, i; int istride; int ostride; /* Prepare the section of the input image we need. A little larger * than the section of the output image we are producing. */ s = *r; s.width += iM->Xsize - 1; if (vips_region_prepare(ir, &s)) return -1; istride = VIPS_IMAGE_SIZEOF_PEL(in) / VIPS_IMAGE_SIZEOF_ELEMENT(in); ostride = VIPS_IMAGE_SIZEOF_PEL(out_region->im) / VIPS_IMAGE_SIZEOF_ELEMENT(out_region->im); /* Init offset array. */ if (seq->last_stride != istride) { seq->last_stride = istride; for (z = 0; z < n_hline; z++) { seq->start[z] = conva->hline[z].start * istride; seq->end[z] = conva->hline[z].end * istride; } } for (y = 0; y < r->height; y++) { switch (in->BandFmt) { case VIPS_FORMAT_UCHAR: if (conva->max_line < 256) HCONV(unsigned char, unsigned short); else HCONV(unsigned char, unsigned int); break; case VIPS_FORMAT_CHAR: if (conva->max_line < 256) HCONV(signed char, signed short); else HCONV(signed char, signed int); break; case VIPS_FORMAT_USHORT: HCONV(unsigned short, unsigned int); break; case VIPS_FORMAT_SHORT: HCONV(signed short, signed int); break; case VIPS_FORMAT_UINT: HCONV(unsigned int, unsigned int); break; case VIPS_FORMAT_INT: HCONV(signed int, signed int); break; case VIPS_FORMAT_FLOAT: HCONV(float, float); break; case VIPS_FORMAT_DOUBLE: HCONV(double, double); break; case VIPS_FORMAT_COMPLEX: HCONV(float, float); break; case VIPS_FORMAT_DPCOMPLEX: HCONV(double, double); break; default: g_assert_not_reached(); } } return 0; } static int vips_conva_horizontal(VipsConva *conva, VipsImage *in, VipsImage **out) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(conva); /* Prepare output. Consider a 7x7 mask and a 7x7 image --- the output * would be 1x1. */ *out = vips_image_new(); if (vips_image_pipelinev(*out, VIPS_DEMAND_STYLE_SMALLTILE, in, NULL)) return -1; (*out)->Xsize -= conva->iM->Xsize - 1; if ((*out)->Xsize <= 0) { vips_error(class->nickname, "%s", _("image too small for mask")); return -1; } (*out)->Bands *= conva->n_hline; /* Short u?char lines can use u?short intermediate. */ if (vips_band_format_isuint(in->BandFmt)) (*out)->BandFmt = conva->max_line < 256 ? VIPS_FORMAT_USHORT : VIPS_FORMAT_UINT; else if (vips_band_format_isint(in->BandFmt)) (*out)->BandFmt = conva->max_line < 256 ? VIPS_FORMAT_SHORT : VIPS_FORMAT_INT; if (vips_image_generate(*out, vips_conva_start, vips_conva_hgenerate, vips_conva_stop, in, conva)) return -1; return 0; } #define CLIP_UCHAR(V) \ G_STMT_START \ { \ if ((V) < 0) \ (V) = 0; \ else if ((V) > UCHAR_MAX) \ (V) = UCHAR_MAX; \ } \ G_STMT_END #define CLIP_CHAR(V) \ G_STMT_START \ { \ if ((V) < SCHAR_MIN) \ (V) = SCHAR_MIN; \ else if ((V) > SCHAR_MAX) \ (V) = SCHAR_MAX; \ } \ G_STMT_END #define CLIP_USHORT(V) \ G_STMT_START \ { \ if ((V) < 0) \ (V) = 0; \ else if ((V) > USHRT_MAX) \ (V) = USHRT_MAX; \ } \ G_STMT_END #define CLIP_SHORT(V) \ G_STMT_START \ { \ if ((V) < SHRT_MIN) \ (V) = SHRT_MIN; \ else if ((V) > SHRT_MAX) \ (V) = SHRT_MAX; \ } \ G_STMT_END #define CLIP_NONE(V) \ { \ } #define VCONV(ACC, IN, OUT, CLIP) \ G_STMT_START \ { \ for (x = 0; x < sz; x++) { \ ACC *seq_sum = (ACC *) seq->sum; \ \ IN *p; \ OUT *q; \ ACC sum; \ \ p = x * conva->n_hline + \ (IN *) VIPS_REGION_ADDR(ir, r->left, r->top); \ q = x + (OUT *) VIPS_REGION_ADDR(out_region, r->left, r->top); \ \ sum = 0; \ for (z = 0; z < n_vline; z++) { \ seq_sum[z] = 0; \ for (k = conva->vline[z].start; \ k < conva->vline[z].end; k++) \ seq_sum[z] += p[k * istride + \ conva->vline[z].band]; \ sum += conva->vline[z].factor * seq_sum[z]; \ } \ sum = (sum + conva->rounding) / conva->divisor + conva->offset; \ CLIP(sum); \ *q = sum; \ q += ostride; \ \ for (y = 1; y < r->height; y++) { \ sum = 0; \ for (z = 0; z < n_vline; z++) { \ seq_sum[z] += p[seq->end[z]]; \ seq_sum[z] -= p[seq->start[z]]; \ sum += conva->vline[z].factor * seq_sum[z]; \ } \ p += istride; \ sum = (sum + conva->rounding) / conva->divisor + \ conva->offset; \ CLIP(sum); \ *q = sum; \ q += ostride; \ } \ } \ } \ G_STMT_END /* Do vertical masks ... we scan the mask down columns of pixels. */ static int vips_conva_vgenerate(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsConvaSeq *seq = (VipsConvaSeq *) vseq; VipsImage *in = (VipsImage *) a; VipsConva *conva = (VipsConva *) b; VipsConvolution *convolution = (VipsConvolution *) conva; VipsRegion *ir = seq->ir; const int n_vline = conva->n_vline; VipsImage *iM = conva->iM; VipsRect *r = &out_region->valid; /* Double the width (notionally) for complex. */ int sz = vips_band_format_iscomplex(in->BandFmt) ? 2 * VIPS_REGION_N_ELEMENTS(out_region) : VIPS_REGION_N_ELEMENTS(out_region); VipsRect s; int x, y, z, k; int istride; int ostride; /* Prepare the section of the input image we need. A little larger * than the section of the output image we are producing. */ s = *r; s.height += iM->Ysize - 1; if (vips_region_prepare(ir, &s)) return -1; istride = VIPS_REGION_LSKIP(ir) / VIPS_IMAGE_SIZEOF_ELEMENT(in); ostride = VIPS_REGION_LSKIP(out_region) / VIPS_IMAGE_SIZEOF_ELEMENT(convolution->out); /* Init offset array. */ if (seq->last_stride != istride) { seq->last_stride = istride; for (z = 0; z < n_vline; z++) { seq->start[z] = conva->vline[z].band + conva->vline[z].start * istride; seq->end[z] = conva->vline[z].band + conva->vline[z].end * istride; } } switch (convolution->in->BandFmt) { case VIPS_FORMAT_UCHAR: if (conva->max_line < 256) VCONV(unsigned int, unsigned short, unsigned char, CLIP_UCHAR); else VCONV(unsigned int, unsigned int, unsigned char, CLIP_UCHAR); break; case VIPS_FORMAT_CHAR: if (conva->max_line < 256) VCONV(signed int, signed short, signed char, CLIP_CHAR); else VCONV(signed int, signed int, signed char, CLIP_CHAR); break; case VIPS_FORMAT_USHORT: VCONV(unsigned int, unsigned int, unsigned short, CLIP_USHORT); break; case VIPS_FORMAT_SHORT: VCONV(signed int, signed int, signed short, CLIP_SHORT); break; case VIPS_FORMAT_UINT: VCONV(unsigned int, unsigned int, unsigned int, CLIP_NONE); break; case VIPS_FORMAT_INT: VCONV(signed int, signed int, signed int, CLIP_NONE); break; case VIPS_FORMAT_FLOAT: VCONV(float, float, float, CLIP_NONE); break; case VIPS_FORMAT_DOUBLE: VCONV(double, double, double, CLIP_NONE); break; case VIPS_FORMAT_COMPLEX: VCONV(float, float, float, CLIP_NONE); break; case VIPS_FORMAT_DPCOMPLEX: VCONV(double, double, double, CLIP_NONE); break; default: g_assert_not_reached(); } return 0; } static int vips_conva_vertical(VipsConva *conva, VipsImage *in, VipsImage **out) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(conva); VipsConvolution *convolution = (VipsConvolution *) conva; /* Prepare output. Consider a 7x7 mask and a 7x7 image --- the output * would be 1x1. */ *out = vips_image_new(); if (vips_image_pipelinev(*out, VIPS_DEMAND_STYLE_SMALLTILE, in, NULL)) return -1; (*out)->Ysize -= conva->iM->Ysize - 1; if ((*out)->Ysize <= 0) { vips_error(class->nickname, "%s", _("image too small for mask")); return -1; } (*out)->Bands = convolution->in->Bands; (*out)->BandFmt = convolution->in->BandFmt; if (vips_image_generate(*out, vips_conva_start, vips_conva_vgenerate, vips_conva_stop, in, conva)) return -1; return 0; } static int vips_conva_build(VipsObject *object) { VipsConvolution *convolution = (VipsConvolution *) object; VipsConva *conva = (VipsConva *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 4); VipsImage *in; if (VIPS_OBJECT_CLASS(vips_conva_parent_class)->build(object)) return -1; /* An int version of our mask. */ if (vips__image_intize(convolution->M, &t[0])) return -1; conva->iM = t[0]; #ifdef DEBUG printf("vips_conva_build: iM =\n"); vips_matrixprint(conva->iM, NULL); #endif /*DEBUG*/ in = convolution->in; if (vips_conva_decompose_boxes(conva)) return -1; g_object_set(conva, "out", vips_image_new(), NULL); if ( vips_embed(in, &t[1], t[0]->Xsize / 2, t[0]->Ysize / 2, in->Xsize + t[0]->Xsize - 1, in->Ysize + t[0]->Ysize - 1, "extend", VIPS_EXTEND_COPY, NULL) || vips_conva_horizontal(conva, t[1], &t[2]) || vips_conva_vertical(conva, t[2], &t[3]) || vips_image_write(t[3], convolution->out)) return -1; convolution->out->Xoffset = 0; convolution->out->Yoffset = 0; return 0; } static void vips_conva_class_init(VipsConvaClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "conva"; object_class->description = _("approximate integer convolution"); object_class->build = vips_conva_build; VIPS_ARG_INT(class, "layers", 104, _("Layers"), _("Use this many layers in approximation"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsConva, layers), 1, 1000, 5); VIPS_ARG_INT(class, "cluster", 105, _("Cluster"), _("Cluster lines closer than this in approximation"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsConva, cluster), 1, 100, 1); } static void vips_conva_init(VipsConva *conva) { conva->layers = 5; conva->cluster = 1; } /** * vips_conva: (method) * @in: input image * @out: (out): output image * @mask: convolution mask * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @layers: %gint, number of layers for approximation * * @cluster: %gint, cluster lines closer than this distance * * Perform an approximate integer convolution of @in with @mask. * This is a low-level operation, see * vips_conv() for something more convenient. * * The output image * always has the same #VipsBandFormat as the input image. * Elements of @mask are converted to * integers before convolution. * * Larger values for @layers give more accurate * results, but are slower. As @layers approaches the mask radius, the * accuracy will become close to exact convolution and the speed will drop to * match. For many large masks, such as Gaussian, @layers need be only 10% of * this value and accuracy will still be good. * * Smaller values of @cluster will give more accurate results, but be slower * and use more memory. 10% of the mask radius is a good rule of thumb. * * See also: vips_conv(). * * Returns: 0 on success, -1 on error */ int vips_conva(VipsImage *in, VipsImage **out, VipsImage *mask, ...) { va_list ap; int result; va_start(ap, mask); result = vips_call_split("conva", ap, in, out, mask); va_end(ap); return result; } libvips-8.15.1/libvips/convolution/convasep.c000066400000000000000000000537251454007373500213130ustar00rootroot00000000000000/* convasep ... separable approximate convolution * * This operation does an approximate, separable convolution. * * Author: John Cupitt & Nicolas Robidoux * Written on: 31/5/11 * Modified on: * 31/5/11 * - from im_conv() * 5/7/16 * - redone as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* See: http://incubator.quasimondo.com/processing/stackblur.pde This thing is a little like stackblur, but generalised to any separable mask. */ /* TODO - how about making a cumulative image and then subtracting points in that, rather than keeping a set of running totals faster? we could then use orc to write a bit of code to implement this set of lines stackoverflow has an algorithm for cumulativization using SIMD and threads, see that font rasterization with rust piece on medium by ralph levien */ /* #define DEBUG #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "pconvolution.h" /* Maximum number of lines we can break the mask into. */ #define MAX_LINES (1000) /* Euclid's algorithm. Use this to common up mults. */ static int gcd(int a, int b) { if (b == 0) return abs(a); else return gcd(b, a % b); } typedef struct { VipsConvolution parent_instance; int layers; int divisor; int rounding; int offset; /* The "width" of the mask, ie. n for our 1xn or nx1 argument, plus * an int version of our mask. */ int width; VipsImage *iM; /* The mask broken into a set of lines. * * Start is the left-most pixel in the line, end is one beyond the * right-most pixel. */ int n_lines; int start[MAX_LINES]; int end[MAX_LINES]; int factor[MAX_LINES]; } VipsConvasep; typedef VipsConvolutionClass VipsConvasepClass; G_DEFINE_TYPE(VipsConvasep, vips_convasep, VIPS_TYPE_CONVOLUTION); static void vips_convasep_line_start(VipsConvasep *convasep, int x, int factor) { convasep->start[convasep->n_lines] = x; convasep->factor[convasep->n_lines] = factor; } static int vips_convasep_line_end(VipsConvasep *convasep, int x) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(convasep); convasep->end[convasep->n_lines] = x; if (convasep->n_lines >= MAX_LINES - 1) { vips_error(class->nickname, "%s", _("mask too complex")); return -1; } convasep->n_lines += 1; return 0; } /* Break a mask into lines. */ static int vips_convasep_decompose(VipsConvasep *convasep) { VipsImage *iM = convasep->iM; double *coeff = (double *) VIPS_IMAGE_ADDR(iM, 0, 0); double scale = vips_image_get_scale(iM); double offset = vips_image_get_offset(iM); double max; double min; double depth; double sum; double area; int layers; int layers_above; int layers_below; int z, n, x; VIPS_DEBUG_MSG( "vips_convasep_decompose: " "breaking into %d layers ...\n", convasep->layers); /* Find mask range. We must always include the zero axis in the mask. */ max = 0; min = 0; for (x = 0; x < convasep->width; x++) { if (coeff[x] > max) max = coeff[x]; if (coeff[x] < min) min = coeff[x]; } /* The zero axis must fall on a layer boundary. Estimate the * depth, find n-lines-above-zero, get exact depth, then calculate a * fixed n-lines which includes any negative parts. */ depth = (max - min) / convasep->layers; layers_above = ceil(max / depth); depth = max / layers_above; layers_below = floor(min / depth); layers = layers_above - layers_below; VIPS_DEBUG_MSG("depth = %g, layers = %d\n", depth, layers); /* For each layer, generate a set of lines which are inside the * perimeter. Work down from the top. */ for (z = 0; z < layers; z++) { double y = max - (1 + z) * depth; /* y plus half depth ... ie. the layer midpoint. */ double y_ph = y + depth / 2; /* Odd, but we must avoid rounding errors that make us miss 0 * in the line above. */ int y_positive = z < layers_above; int inside; /* Start outside the perimeter. */ inside = 0; for (x = 0; x < convasep->width; x++) { /* The vertical line from mask[z] to 0 is inside. Is * our current square (x, y) part of that line? */ if ((y_positive && coeff[x] >= y_ph) || (!y_positive && coeff[x] <= y_ph)) { if (!inside) { vips_convasep_line_start(convasep, x, y_positive ? 1 : -1); inside = 1; } } else if (inside) { if (vips_convasep_line_end(convasep, x)) return -1; inside = 0; } } if (inside && vips_convasep_line_end(convasep, convasep->width)) return -1; } /* Can we common up any lines? Search for lines with identical * start/end. */ for (z = 0; z < convasep->n_lines; z++) { for (n = z + 1; n < convasep->n_lines; n++) { if (convasep->start[z] == convasep->start[n] && convasep->end[z] == convasep->end[n]) { convasep->factor[z] += convasep->factor[n]; /* n can be deleted. Do this in a separate * pass below. */ convasep->factor[n] = 0; } } } /* Now we can remove all factor 0 lines. */ for (z = 0; z < convasep->n_lines; z++) { if (convasep->factor[z] == 0) { for (x = z; x < convasep->n_lines; x++) { convasep->start[x] = convasep->start[x + 1]; convasep->end[x] = convasep->end[x + 1]; convasep->factor[x] = convasep->factor[x + 1]; } convasep->n_lines -= 1; } } /* Find the area of the lines. */ area = 0; for (z = 0; z < convasep->n_lines; z++) area += convasep->factor[z] * (convasep->end[z] - convasep->start[z]); /* Strength reduction: if all lines are divisible by n, we can move * that n out into the ->area factor. The aim is to produce as many * factor 1 lines as we can and to reduce the chance of overflow. */ x = convasep->factor[0]; for (z = 1; z < convasep->n_lines; z++) x = gcd(x, convasep->factor[z]); for (z = 0; z < convasep->n_lines; z++) convasep->factor[z] /= x; area *= x; /* Find the area of the original mask. */ sum = 0; for (z = 0; z < convasep->width; z++) sum += coeff[z]; convasep->divisor = VIPS_RINT(sum * area / scale); if (convasep->divisor == 0) convasep->divisor = 1; convasep->rounding = (convasep->divisor + 1) / 2; convasep->offset = offset; #ifdef DEBUG /* ASCII-art layer drawing. */ printf("lines:\n"); for (z = 0; z < convasep->n_lines; z++) { printf("%3d - %2d x ", z, convasep->factor[z]); for (x = 0; x < 55; x++) { int rx = x * (convasep->width + 1) / 55; if (rx >= convasep->start[z] && rx < convasep->end[z]) printf("#"); else printf(" "); } printf(" %3d .. %3d\n", convasep->start[z], convasep->end[z]); } printf("divisor = %d\n", convasep->divisor); printf("rounding = %d\n", convasep->rounding); printf("offset = %d\n", convasep->offset); #endif /*DEBUG*/ return 0; } /* Our sequence value. */ typedef struct { VipsConvasep *convasep; VipsRegion *ir; /* Input region */ int *start; /* Offsets for start and stop */ int *end; /* The sums for each line. int for integer types, double for floating * point types. */ int *isum; double *dsum; int last_stride; /* Avoid recalcing offsets, if we can */ } VipsConvasepSeq; /* Free a sequence value. */ static int vips_convasep_stop(void *vseq, void *a, void *b) { VipsConvasepSeq *seq = (VipsConvasepSeq *) vseq; VIPS_UNREF(seq->ir); VIPS_FREE(seq->start); VIPS_FREE(seq->end); VIPS_FREE(seq->isum); VIPS_FREE(seq->dsum); return 0; } /* Convolution start function. */ static void * vips_convasep_start(VipsImage *out, void *a, void *b) { VipsImage *in = (VipsImage *) a; VipsConvasep *convasep = (VipsConvasep *) b; VipsConvasepSeq *seq; if (!(seq = VIPS_NEW(out, VipsConvasepSeq))) return NULL; /* Init! */ seq->convasep = convasep; seq->ir = vips_region_new(in); seq->start = VIPS_ARRAY(NULL, convasep->n_lines, int); seq->end = VIPS_ARRAY(NULL, convasep->n_lines, int); seq->isum = NULL; seq->dsum = NULL; if (vips_band_format_isint(out->BandFmt)) seq->isum = VIPS_ARRAY(NULL, convasep->n_lines, int); else seq->dsum = VIPS_ARRAY(NULL, convasep->n_lines, double); seq->last_stride = -1; if (!seq->ir || !seq->start || !seq->end || (!seq->isum && !seq->dsum)) { vips_convasep_stop(seq, in, convasep); return NULL; } return seq; } #define CLIP_UCHAR(V) \ G_STMT_START \ { \ if ((V) < 0) \ (V) = 0; \ else if ((V) > UCHAR_MAX) \ (V) = UCHAR_MAX; \ } \ G_STMT_END #define CLIP_CHAR(V) \ G_STMT_START \ { \ if ((V) < SCHAR_MIN) \ (V) = SCHAR_MIN; \ else if ((V) > SCHAR_MAX) \ (V) = SCHAR_MAX; \ } \ G_STMT_END #define CLIP_USHORT(V) \ G_STMT_START \ { \ if ((V) < 0) \ (V) = 0; \ else if ((V) > USHRT_MAX) \ (V) = USHRT_MAX; \ } \ G_STMT_END #define CLIP_SHORT(V) \ G_STMT_START \ { \ if ((V) < SHRT_MIN) \ (V) = SHRT_MIN; \ else if ((V) > SHRT_MAX) \ (V) = SHRT_MAX; \ } \ G_STMT_END #define CLIP_NONE(V) \ { \ } /* The h and v loops are very similar, but also annoyingly different. Keep * them separate for easy debugging. */ #define HCONV_INT(TYPE, CLIP) \ { \ for (i = 0; i < bands; i++) { \ int *isum = seq->isum; \ \ TYPE *q; \ TYPE *p; \ int sum; \ \ p = i + (TYPE *) VIPS_REGION_ADDR(ir, r->left, r->top + y); \ q = i + (TYPE *) VIPS_REGION_ADDR(out_region, r->left, r->top + y); \ \ sum = 0; \ for (z = 0; z < n_lines; z++) { \ isum[z] = 0; \ for (x = seq->start[z]; x < seq->end[z]; x += istride) \ isum[z] += p[x]; \ sum += convasep->factor[z] * isum[z]; \ } \ \ /* Don't add offset ... we only want to do that once, do it on \ * the vertical pass. \ */ \ sum = (sum + convasep->rounding) / convasep->divisor; \ CLIP(sum); \ *q = sum; \ q += ostride; \ \ for (x = 1; x < r->width; x++) { \ sum = 0; \ for (z = 0; z < n_lines; z++) { \ isum[z] += p[seq->end[z]]; \ isum[z] -= p[seq->start[z]]; \ sum += convasep->factor[z] * isum[z]; \ } \ p += istride; \ sum = (sum + convasep->rounding) / convasep->divisor; \ CLIP(sum); \ *q = sum; \ q += ostride; \ } \ } \ } #define HCONV_FLOAT(TYPE) \ { \ for (i = 0; i < bands; i++) { \ double *dsum = seq->dsum; \ \ TYPE *q; \ TYPE *p; \ double sum; \ \ p = i + (TYPE *) VIPS_REGION_ADDR(ir, r->left, r->top + y); \ q = i + (TYPE *) VIPS_REGION_ADDR(out_region, r->left, r->top + y); \ \ sum = 0; \ for (z = 0; z < n_lines; z++) { \ dsum[z] = 0; \ for (x = seq->start[z]; x < seq->end[z]; x += istride) \ dsum[z] += p[x]; \ sum += convasep->factor[z] * dsum[z]; \ } \ \ /* Don't add offset ... we only want to do that once, do it on \ * the vertical pass. \ */ \ sum = sum / convasep->divisor; \ *q = sum; \ q += ostride; \ \ for (x = 1; x < r->width; x++) { \ sum = 0; \ for (z = 0; z < n_lines; z++) { \ dsum[z] += p[seq->end[z]]; \ dsum[z] -= p[seq->start[z]]; \ sum += convasep->factor[z] * dsum[z]; \ } \ p += istride; \ sum = sum / convasep->divisor; \ *q = sum; \ q += ostride; \ } \ } \ } /* Do horizontal masks ... we scan the mask along scanlines. */ static int vips_convasep_generate_horizontal(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsConvasepSeq *seq = (VipsConvasepSeq *) vseq; VipsImage *in = (VipsImage *) a; VipsConvasep *convasep = (VipsConvasep *) b; VipsConvolution *convolution = (VipsConvolution *) convasep; VipsRegion *ir = seq->ir; const int n_lines = convasep->n_lines; VipsRect *r = &out_region->valid; /* Double the bands (notionally) for complex. */ int bands = vips_band_format_iscomplex(in->BandFmt) ? 2 * in->Bands : in->Bands; VipsRect s; int x, y, z, i; int istride; int ostride; /* Prepare the section of the input image we need. A little larger * than the section of the output image we are producing. */ s = *r; s.width += convasep->width - 1; if (vips_region_prepare(ir, &s)) return -1; /* Stride can be different for the vertical case, keep this here for * ease of direction change. */ istride = VIPS_IMAGE_SIZEOF_PEL(in) / VIPS_IMAGE_SIZEOF_ELEMENT(in); ostride = VIPS_IMAGE_SIZEOF_PEL(convolution->out) / VIPS_IMAGE_SIZEOF_ELEMENT(convolution->out); /* Init offset array. */ if (seq->last_stride != istride) { seq->last_stride = istride; for (z = 0; z < n_lines; z++) { seq->start[z] = convasep->start[z] * istride; seq->end[z] = convasep->end[z] * istride; } } for (y = 0; y < r->height; y++) { switch (in->BandFmt) { case VIPS_FORMAT_UCHAR: HCONV_INT(unsigned char, CLIP_UCHAR); break; case VIPS_FORMAT_CHAR: HCONV_INT(signed char, CLIP_CHAR); break; case VIPS_FORMAT_USHORT: HCONV_INT(unsigned short, CLIP_USHORT); break; case VIPS_FORMAT_SHORT: HCONV_INT(signed short, CLIP_SHORT); break; case VIPS_FORMAT_UINT: HCONV_INT(unsigned int, CLIP_NONE); break; case VIPS_FORMAT_INT: HCONV_INT(signed int, CLIP_NONE); break; case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_COMPLEX: HCONV_FLOAT(float); break; case VIPS_FORMAT_DOUBLE: case VIPS_FORMAT_DPCOMPLEX: HCONV_FLOAT(double); break; default: g_assert_not_reached(); } } return 0; } #define VCONV_INT(TYPE, CLIP) \ { \ for (x = 0; x < sz; x++) { \ int *isum = seq->isum; \ \ TYPE *q; \ TYPE *p; \ int sum; \ \ p = x + (TYPE *) VIPS_REGION_ADDR(ir, r->left, r->top); \ q = x + (TYPE *) VIPS_REGION_ADDR(out_region, r->left, r->top); \ \ sum = 0; \ for (z = 0; z < n_lines; z++) { \ isum[z] = 0; \ for (y = seq->start[z]; y < seq->end[z]; y += istride) \ isum[z] += p[y]; \ sum += convasep->factor[z] * isum[z]; \ } \ sum = (sum + convasep->rounding) / convasep->divisor + \ convasep->offset; \ CLIP(sum); \ *q = sum; \ q += ostride; \ \ for (y = 1; y < r->height; y++) { \ sum = 0; \ for (z = 0; z < n_lines; z++) { \ isum[z] += p[seq->end[z]]; \ isum[z] -= p[seq->start[z]]; \ sum += convasep->factor[z] * isum[z]; \ } \ p += istride; \ sum = (sum + convasep->rounding) / convasep->divisor + \ convasep->offset; \ CLIP(sum); \ *q = sum; \ q += ostride; \ } \ } \ } #define VCONV_FLOAT(TYPE) \ { \ for (x = 0; x < sz; x++) { \ double *dsum = seq->dsum; \ \ TYPE *q; \ TYPE *p; \ double sum; \ \ p = x + (TYPE *) VIPS_REGION_ADDR(ir, r->left, r->top); \ q = x + (TYPE *) VIPS_REGION_ADDR(out_region, r->left, r->top); \ \ sum = 0; \ for (z = 0; z < n_lines; z++) { \ dsum[z] = 0; \ for (y = seq->start[z]; y < seq->end[z]; y += istride) \ dsum[z] += p[y]; \ sum += convasep->factor[z] * dsum[z]; \ } \ sum = sum / convasep->divisor + convasep->offset; \ *q = sum; \ q += ostride; \ \ for (y = 1; y < r->height; y++) { \ sum = 0; \ for (z = 0; z < n_lines; z++) { \ dsum[z] += p[seq->end[z]]; \ dsum[z] -= p[seq->start[z]]; \ sum += convasep->factor[z] * dsum[z]; \ } \ p += istride; \ sum = sum / convasep->divisor + convasep->offset; \ *q = sum; \ q += ostride; \ } \ } \ } /* Do vertical masks ... we scan the mask down columns of pixels. Copy-paste * from above with small changes. */ static int vips_convasep_generate_vertical(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsConvasepSeq *seq = (VipsConvasepSeq *) vseq; VipsImage *in = (VipsImage *) a; VipsConvasep *convasep = (VipsConvasep *) b; VipsConvolution *convolution = (VipsConvolution *) convasep; VipsRegion *ir = seq->ir; const int n_lines = convasep->n_lines; VipsRect *r = &out_region->valid; /* Double the width (notionally) for complex. */ int sz = vips_band_format_iscomplex(in->BandFmt) ? 2 * VIPS_REGION_N_ELEMENTS(out_region) : VIPS_REGION_N_ELEMENTS(out_region); VipsRect s; int x, y, z; int istride; int ostride; /* Prepare the section of the input image we need. A little larger * than the section of the output image we are producing. */ s = *r; s.height += convasep->width - 1; if (vips_region_prepare(ir, &s)) return -1; /* Stride can be different for the vertical case, keep this here for * ease of direction change. */ istride = VIPS_REGION_LSKIP(ir) / VIPS_IMAGE_SIZEOF_ELEMENT(in); ostride = VIPS_REGION_LSKIP(out_region) / VIPS_IMAGE_SIZEOF_ELEMENT(convolution->out); /* Init offset array. */ if (seq->last_stride != istride) { seq->last_stride = istride; for (z = 0; z < n_lines; z++) { seq->start[z] = convasep->start[z] * istride; seq->end[z] = convasep->end[z] * istride; } } switch (in->BandFmt) { case VIPS_FORMAT_UCHAR: VCONV_INT(unsigned char, CLIP_UCHAR); break; case VIPS_FORMAT_CHAR: VCONV_INT(signed char, CLIP_CHAR); break; case VIPS_FORMAT_USHORT: VCONV_INT(unsigned short, CLIP_USHORT); break; case VIPS_FORMAT_SHORT: VCONV_INT(signed short, CLIP_SHORT); break; case VIPS_FORMAT_UINT: VCONV_INT(unsigned int, CLIP_NONE); break; case VIPS_FORMAT_INT: VCONV_INT(signed int, CLIP_NONE); break; case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_COMPLEX: VCONV_FLOAT(float); break; case VIPS_FORMAT_DOUBLE: case VIPS_FORMAT_DPCOMPLEX: VCONV_FLOAT(double); break; default: g_assert_not_reached(); } return 0; } static int vips_convasep_pass(VipsConvasep *convasep, VipsImage *in, VipsImage **out, VipsDirection direction) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(convasep); VipsGenerateFn gen; *out = vips_image_new(); if (vips_image_pipelinev(*out, VIPS_DEMAND_STYLE_SMALLTILE, in, NULL)) return -1; if (direction == VIPS_DIRECTION_HORIZONTAL) { (*out)->Xsize -= convasep->width - 1; gen = vips_convasep_generate_horizontal; } else { (*out)->Ysize -= convasep->width - 1; gen = vips_convasep_generate_vertical; } if ((*out)->Xsize <= 0 || (*out)->Ysize <= 0) { vips_error(class->nickname, "%s", _("image too small for mask")); return -1; } if (vips_image_generate(*out, vips_convasep_start, gen, vips_convasep_stop, in, convasep)) return -1; return 0; } static int vips_convasep_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsConvolution *convolution = (VipsConvolution *) object; VipsConvasep *convasep = (VipsConvasep *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 4); VipsImage *in; if (VIPS_OBJECT_CLASS(vips_convasep_parent_class)->build(object)) return -1; if (vips_check_separable(class->nickname, convolution->M)) return -1; /* An int version of our mask. */ if (vips__image_intize(convolution->M, &t[3])) return -1; convasep->iM = t[3]; convasep->width = convasep->iM->Xsize * convasep->iM->Ysize; in = convolution->in; if (vips_convasep_decompose(convasep)) return -1; g_object_set(convasep, "out", vips_image_new(), NULL); if ( vips_embed(in, &t[0], convasep->width / 2, convasep->width / 2, in->Xsize + convasep->width - 1, in->Ysize + convasep->width - 1, "extend", VIPS_EXTEND_COPY, NULL) || vips_convasep_pass(convasep, t[0], &t[1], VIPS_DIRECTION_HORIZONTAL) || vips_convasep_pass(convasep, t[1], &t[2], VIPS_DIRECTION_VERTICAL) || vips_image_write(t[2], convolution->out)) return -1; convolution->out->Xoffset = 0; convolution->out->Yoffset = 0; vips_reorder_margin_hint(convolution->out, convolution->M->Xsize * convolution->M->Ysize); return 0; } static void vips_convasep_class_init(VipsConvasepClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "convasep"; object_class->description = _("approximate separable integer convolution"); object_class->build = vips_convasep_build; VIPS_ARG_INT(class, "layers", 104, _("Layers"), _("Use this many layers in approximation"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsConvasep, layers), 1, 1000, 5); } static void vips_convasep_init(VipsConvasep *convasep) { convasep->layers = 5; convasep->n_lines = 0; } /** * vips_convasep: (method) * @in: input image * @out: (out): output image * @mask: convolve with this mask * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @layers: %gint, number of layers for approximation * * Approximate separable integer convolution. This is a low-level operation, see * vips_convsep() for something more convenient. * * The image is convolved twice: once with @mask and then again with @mask * rotated by 90 degrees. * @mask must be 1xn or nx1 elements. * Elements of @mask are converted to * integers before convolution. * * Larger values for @layers give more accurate * results, but are slower. As @layers approaches the mask radius, the * accuracy will become close to exact convolution and the speed will drop to * match. For many large masks, such as Gaussian, @layers need be only 10% of * this value and accuracy will still be good. * * The output image * always has the same #VipsBandFormat as the input image. * * See also: vips_convsep(). * * Returns: 0 on success, -1 on error */ int vips_convasep(VipsImage *in, VipsImage **out, VipsImage *mask, ...) { va_list ap; int result; va_start(ap, mask); result = vips_call_split("convasep", ap, in, out, mask); va_end(ap); return result; } libvips-8.15.1/libvips/convolution/convf.c000066400000000000000000000231161454007373500205770ustar00rootroot00000000000000/* convf * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris & Kirk Martinez * Written on: 29/04/1991 * Modified on: 19/05/1991 * 8/7/93 JC * - adapted for partial v2 * - memory leaks fixed * - ANSIfied * 12/7/93 JC * - adapted im_convbi() to im_convbf() * 7/10/94 JC * - new IM_ARRAY() macro * - evalend callbacks * - more typedef * 9/3/01 JC * - redone from im_conv() * 27/7/01 JC * - rejects masks with scale == 0 * 7/4/04 * - now uses im_embed() with edge stretching on the input, not * the output * - sets Xoffset / Yoffset * 11/11/05 * - simpler inner loop avoids gcc4 bug * 12/11/09 * - only rebuild the buffer offsets if bpl changes * - tiny speedups and cleanups * - add restrict, though it doesn't seem to help gcc * - add mask-all-zero check * 13/11/09 * - rename as im_conv_f() to make it easier for vips.c to make the * overloaded version * 3/2/10 * - gtkdoc * - more cleanups * 1/10/10 * - support complex (just double the bands) * 29/10/10 * - get rid of im_convsep_f(), just call this twice, no longer worth * keeping two versions * 15/10/11 Nicolas * - handle offset correctly in separable convolutions * 26/1/16 Lovell Fuller * - remove Duff for a 25% speedup * 23/6/16 * - redone as a class * 2/7/17 * - remove pts for a small speedup * 2/8/22 kleisauke * - bake the scale into the mask */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pconvolution.h" typedef struct { VipsConvolution parent_instance; /* We make a smaller version of the mask with the zeros squeezed out. */ int nnz; /* Number of non-zero mask elements */ double *coeff; /* Array of non-zero mask coefficients */ int *coeff_pos; /* Index of each nnz element in mask->coeff */ } VipsConvf; typedef VipsConvolutionClass VipsConvfClass; G_DEFINE_TYPE(VipsConvf, vips_convf, VIPS_TYPE_CONVOLUTION); /* Our sequence value. */ typedef struct { VipsConvf *convf; VipsRegion *ir; /* Input region */ int *offsets; /* Offsets for each non-zero matrix element */ int last_bpl; /* Avoid recalcing offsets, if we can */ } VipsConvfSequence; /* Free a sequence value. */ static int vips_convf_stop(void *vseq, void *a, void *b) { VipsConvfSequence *seq = (VipsConvfSequence *) vseq; VIPS_UNREF(seq->ir); return 0; } /* Convolution start function. */ static void * vips_convf_start(VipsImage *out, void *a, void *b) { VipsImage *in = (VipsImage *) a; VipsConvf *convf = (VipsConvf *) b; VipsConvfSequence *seq; if (!(seq = VIPS_NEW(out, VipsConvfSequence))) return NULL; seq->convf = convf; seq->ir = NULL; seq->last_bpl = -1; seq->ir = vips_region_new(in); if (!(seq->offsets = VIPS_ARRAY(out, convf->nnz, int))) { vips_convf_stop(seq, in, convf); return NULL; } return (void *) seq; } #define CONV_FLOAT(ITYPE, OTYPE) \ { \ ITYPE *restrict p = (ITYPE *) VIPS_REGION_ADDR(ir, le, y); \ OTYPE *restrict q = (OTYPE *) VIPS_REGION_ADDR(out_region, le, y); \ int *restrict offsets = seq->offsets; \ \ for (x = 0; x < sz; x++) { \ double sum; \ int i; \ \ sum = offset; \ for (i = 0; i < nnz; i++) \ sum += t[i] * p[offsets[i]]; \ \ q[x] = sum; \ p += 1; \ } \ } /* Convolve! */ static int vips_convf_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsConvfSequence *seq = (VipsConvfSequence *) vseq; VipsConvf *convf = (VipsConvf *) b; VipsConvolution *convolution = (VipsConvolution *) convf; VipsImage *M = convolution->M; double offset = vips_image_get_offset(M); VipsImage *in = (VipsImage *) a; VipsRegion *ir = seq->ir; double *restrict t = convf->coeff; const int nnz = convf->nnz; VipsRect *r = &out_region->valid; int le = r->left; int to = r->top; int bo = VIPS_RECT_BOTTOM(r); int sz = VIPS_REGION_N_ELEMENTS(out_region) * (vips_band_format_iscomplex(in->BandFmt) ? 2 : 1); VipsRect s; int x, y, z, i; /* Prepare the section of the input image we need. A little larger * than the section of the output image we are producing. */ s = *r; s.width += M->Xsize - 1; s.height += M->Ysize - 1; if (vips_region_prepare(ir, &s)) return -1; /* Fill offset array. Only do this if the bpl has changed since the * previous vips_region_prepare(). */ if (seq->last_bpl != VIPS_REGION_LSKIP(ir)) { seq->last_bpl = VIPS_REGION_LSKIP(ir); for (i = 0; i < nnz; i++) { z = convf->coeff_pos[i]; x = z % M->Xsize; y = z / M->Xsize; seq->offsets[i] = (VIPS_REGION_ADDR(ir, x + le, y + to) - VIPS_REGION_ADDR(ir, le, to)) / VIPS_IMAGE_SIZEOF_ELEMENT(ir->im); } } VIPS_GATE_START("vips_convf_gen: work"); for (y = to; y < bo; y++) { switch (in->BandFmt) { case VIPS_FORMAT_UCHAR: CONV_FLOAT(unsigned char, float); break; case VIPS_FORMAT_CHAR: CONV_FLOAT(signed char, float); break; case VIPS_FORMAT_USHORT: CONV_FLOAT(unsigned short, float); break; case VIPS_FORMAT_SHORT: CONV_FLOAT(signed short, float); break; case VIPS_FORMAT_UINT: CONV_FLOAT(unsigned int, float); break; case VIPS_FORMAT_INT: CONV_FLOAT(signed int, float); break; case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_COMPLEX: CONV_FLOAT(float, float); break; case VIPS_FORMAT_DOUBLE: case VIPS_FORMAT_DPCOMPLEX: CONV_FLOAT(double, double); break; default: g_assert_not_reached(); } } VIPS_GATE_STOP("vips_convf_gen: work"); VIPS_COUNT_PIXELS(out_region, "vips_convf_gen"); return 0; } static int vips_convf_build(VipsObject *object) { VipsConvolution *convolution = (VipsConvolution *) object; VipsConvf *convf = (VipsConvf *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 4); VipsImage *in; VipsImage *M; double *coeff; int ne; int i; double scale; if (VIPS_OBJECT_CLASS(vips_convf_parent_class)->build(object)) return -1; M = convolution->M; coeff = (double *) VIPS_IMAGE_ADDR(M, 0, 0); ne = M->Xsize * M->Ysize; /* Bake the scale into the mask. */ scale = vips_image_get_scale(M); for (i = 0; i < ne; i++) coeff[i] /= scale; if (!(convf->coeff = VIPS_ARRAY(object, ne, double)) || !(convf->coeff_pos = VIPS_ARRAY(object, ne, int))) return -1; /* Find non-zero mask elements. */ for (i = 0; i < ne; i++) if (coeff[i]) { convf->coeff[convf->nnz] = coeff[i]; convf->coeff_pos[convf->nnz] = i; convf->nnz += 1; } /* Was the whole mask zero? We must have at least 1 element * in there: set it to zero. */ if (convf->nnz == 0) { convf->coeff[0] = 0; convf->coeff_pos[0] = 0; convf->nnz = 1; } in = convolution->in; if (vips_embed(in, &t[0], M->Xsize / 2, M->Ysize / 2, in->Xsize + M->Xsize - 1, in->Ysize + M->Ysize - 1, "extend", VIPS_EXTEND_COPY, NULL)) return -1; in = t[0]; g_object_set(convf, "out", vips_image_new(), NULL); if (vips_image_pipelinev(convolution->out, VIPS_DEMAND_STYLE_SMALLTILE, in, NULL)) return -1; convolution->out->Xoffset = 0; convolution->out->Yoffset = 0; /* Prepare output. Consider a 7x7 mask and a 7x7 image --- the output * would be 1x1. */ if (vips_band_format_isint(in->BandFmt)) convolution->out->BandFmt = VIPS_FORMAT_FLOAT; convolution->out->Xsize -= M->Xsize - 1; convolution->out->Ysize -= M->Ysize - 1; if (vips_image_generate(convolution->out, vips_convf_start, vips_convf_gen, vips_convf_stop, in, convf)) return -1; convolution->out->Xoffset = -M->Xsize / 2; convolution->out->Yoffset = -M->Ysize / 2; return 0; } static void vips_convf_class_init(VipsConvfClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; object_class->nickname = "convf"; object_class->description = _("float convolution operation"); object_class->build = vips_convf_build; } static void vips_convf_init(VipsConvf *convf) { convf->nnz = 0; convf->coeff = NULL; convf->coeff_pos = NULL; } /** * vips_convf: (method) * @in: input image * @out: (out): output image * @mask: convolve with this mask * @...: %NULL-terminated list of optional named arguments * * Convolution. This is a low-level operation, see vips_conv() for something * more convenient. * * Perform a convolution of @in with @mask. * Each output pixel is * calculated as sigma[i]{pixel[i] * mask[i]} / scale + offset, where scale * and offset are part of @mask. * * The convolution is performed with floating-point arithmetic. The output image * is always #VIPS_FORMAT_FLOAT unless @in is #VIPS_FORMAT_DOUBLE, in which case * @out is also #VIPS_FORMAT_DOUBLE. * * See also: vips_conv(). * * Returns: 0 on success, -1 on error */ int vips_convf(VipsImage *in, VipsImage **out, VipsImage *mask, ...) { va_list ap; int result; va_start(ap, mask); result = vips_call_split("convf", ap, in, out, mask); va_end(ap); return result; } libvips-8.15.1/libvips/convolution/convi.c000066400000000000000000000745111454007373500206070ustar00rootroot00000000000000/* convi * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris & Kirk Martinez * Written on: 29/04/1991 * Modified on: 19/05/1991 * 8/7/93 JC * - adapted for partial v2 * - memory leaks fixed * - ANSIfied * 23/7/93 JC * - inner loop unrolled with a switch - 25% speed-up! * 13/12/93 JC * - tiny rounding error removed * 7/10/94 JC * - new IM_ARRAY() macro * - various simplifications * - evalend callback added * 1/2/95 JC * - use of IM_REGION_ADDR() updated * - output size was incorrect! see comment below * - bug with large non-square matrices fixed too * - uses new im_embed() function * 13/7/98 JC * - weird bug ... im_free_imask is no longer directly called for close * callback, caused SIGKILL on solaris 2.6 ... linker bug? * 9/3/01 JC * - reworked and simplified, about 10% faster * - slightly better range clipping * 27/7/01 JC * - reject masks with scale == 0 * 7/4/04 * - im_conv() now uses im_embed() with edge stretching on the input, not * the output * - sets Xoffset / Yoffset * 11/11/05 * - simpler inner loop avoids gcc4 bug * 7/11/07 * - new evalstart/end callbacks * 12/5/08 * - int rounding was +1 too much, argh * - only rebuild the buffer offsets if bpl changes * 5/4/09 * - tiny speedups and cleanups * - add restrict, though it doesn't seem to help gcc * 12/11/09 * - only check for non-zero elements once * - add mask-all-zero check * - cleanups * 3/2/10 * - gtkdoc * - more cleanups * 23/08/10 * - add a special case for 3x3 masks, about 20% faster * 1/10/10 * - support complex (just double the bands) * 18/10/10 * - add experimental Orc path * 29/10/10 * - use VipsVector * - get rid of im_convsep(), just call this twice, no longer worth * keeping two versions * 8/11/10 * - add array tiling * 9/5/11 * - argh typo in overflow estimation could cause errors * 15/10/11 Nicolas * - handle offset correctly in separable convolutions * 26/1/16 Lovell Fuller * - remove Duff for a 25% speedup * 23/6/16 * - rewritten as a class * - new fixed-point vector path, up to 2x faster * 2/7/17 * - remove pts for a small speedup * 12/10/17 * - fix leak of vectors, thanks MHeimbuc * 14/10/17 * - switch to half-float for vector path */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG #define DEBUG_PIXELS #define DEBUG_COMPILE */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pconvolution.h" #ifdef HAVE_ORC #include /* Larger than this and we fall back to C. */ #define MAX_PASS (20) #define MAX_SOURCES (8 /*ORC_MAX_SRC_VARS*/) /* A pass with a vector. */ typedef struct { int first; /* The index of the first mask coff we use */ int last; /* The index of the last mask coff we use */ int r; /* Set previous result in this var */ int d1; /* The destination var */ int n_const; int n_scanline; /* The associated line corresponding to the scanline. */ int line[MAX_SOURCES]; /* The code we generate for this section of the mask. */ OrcProgram *program; } Pass; #endif /*HAVE_ORC*/ typedef struct { VipsConvolution parent_instance; int n_point; /* w * h for our matrix */ /* We make a smaller version of the mask with the zeros squeezed out. */ int nnz; /* Number of non-zero mask elements */ int *coeff; /* Array of non-zero mask coefficients */ int *coeff_pos; /* Index of each nnz element in mask->coeff */ #if defined(HAVE_HWY) || defined(HAVE_ORC) /* And a half float version for the vector paths. mant has the signed * 8-bit mantissas in [-1, +1), exp has the final exponent shift before * write-back. */ short *mant; int exp; #endif /*HAVE_HWY || HAVE_ORC*/ #ifdef HAVE_ORC /* sexp has the exponent shift after the mul and before the add. */ int sexp; /* The set of passes we need for this mask. */ int n_pass; Pass pass[MAX_PASS]; /* Code for the final clip back to 8 bits. */ int r; int d1; OrcProgram *program; #endif /*HAVE_ORC*/ } VipsConvi; typedef VipsConvolutionClass VipsConviClass; G_DEFINE_TYPE(VipsConvi, vips_convi, VIPS_TYPE_CONVOLUTION); /* Our sequence value. */ typedef struct { VipsConvi *convi; VipsRegion *ir; /* Input region */ int *offsets; /* Offsets for each non-zero matrix element */ int last_bpl; /* Avoid recalcing offsets, if we can */ #ifdef HAVE_ORC /* We need a pair of intermediate buffers to keep the results of each * vector conv pass. */ short *t1; short *t2; #endif /*HAVE_ORC*/ } VipsConviSequence; #ifdef HAVE_ORC static void vips_convi_finalize(GObject *gobject) { VipsConvi *convi = (VipsConvi *) gobject; for (int i = 0; i < convi->n_pass; i++) VIPS_FREEF(orc_program_free, convi->pass[i].program); convi->n_pass = 0; VIPS_FREEF(orc_program_free, convi->program); G_OBJECT_CLASS(vips_convi_parent_class)->finalize(gobject); } #endif /*HAVE_ORC*/ /* Free a sequence value. */ static int vips_convi_stop(void *vseq, void *a, void *b) { VipsConviSequence *seq = (VipsConviSequence *) vseq; VIPS_UNREF(seq->ir); VIPS_FREE(seq->offsets); #ifdef HAVE_ORC VIPS_FREE(seq->t1); VIPS_FREE(seq->t2); #endif /*HAVE_ORC*/ return 0; } /* Convolution start function. */ static void * vips_convi_start(VipsImage *out, void *a, void *b) { VipsImage *in = (VipsImage *) a; VipsConvi *convi = (VipsConvi *) b; VipsConviSequence *seq; if (!(seq = VIPS_NEW(out, VipsConviSequence))) return NULL; seq->convi = convi; seq->ir = NULL; seq->last_bpl = -1; #ifdef HAVE_ORC seq->offsets = NULL; seq->t1 = NULL; seq->t2 = NULL; #endif /*HAVE_ORC*/ seq->ir = vips_region_new(in); if (convi->nnz) { if (!(seq->offsets = VIPS_ARRAY(NULL, convi->nnz, int))) { vips_convi_stop(seq, in, convi); return NULL; } } #ifdef HAVE_ORC /* Vector mode. */ if (convi->n_pass) { seq->t1 = VIPS_ARRAY(NULL, VIPS_IMAGE_N_ELEMENTS(in), short); seq->t2 = VIPS_ARRAY(NULL, VIPS_IMAGE_N_ELEMENTS(in), short); if (!seq->t1 || !seq->t2) { vips_convi_stop(seq, in, convi); return NULL; } } #endif /*HAVE_ORC*/ return (void *) seq; } #ifdef HAVE_HWY static int vips_convi_uchar_vector_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsConviSequence *seq = (VipsConviSequence *) vseq; VipsConvi *convi = (VipsConvi *) b; VipsConvolution *convolution = (VipsConvolution *) convi; VipsImage *M = convolution->M; int offset = VIPS_RINT(vips_image_get_offset(M)); VipsImage *in = (VipsImage *) a; VipsRegion *ir = seq->ir; const int nnz = convi->nnz; VipsRect *r = &out_region->valid; int ne = r->width * in->Bands; VipsRect s; int x, y, z, i; /* Prepare the section of the input image we need. A little larger * than the section of the output image we are producing. */ s = *r; s.width += M->Xsize - 1; s.height += M->Ysize - 1; if (vips_region_prepare(ir, &s)) return -1; /* Fill offset array. Only do this if the bpl has changed since the * previous vips_region_prepare(). */ if (seq->last_bpl != VIPS_REGION_LSKIP(ir)) { seq->last_bpl = VIPS_REGION_LSKIP(ir); for (i = 0; i < nnz; i++) { z = convi->coeff_pos[i]; x = z % M->Xsize; y = z / M->Xsize; seq->offsets[i] = (VIPS_REGION_ADDR(ir, x + r->left, y + r->top) - VIPS_REGION_ADDR(ir, r->left, r->top)) / VIPS_IMAGE_SIZEOF_ELEMENT(ir->im); } } VIPS_GATE_START("vips_convi_uchar_vector_gen: work"); vips_convi_uchar_hwy(out_region, ir, r, ne, nnz, offset, seq->offsets, convi->mant, convi->exp); VIPS_GATE_STOP("vips_convi_uchar_vector_gen: work"); VIPS_COUNT_PIXELS(out_region, "vips_convi_uchar_vector_gen"); return 0; } #elif defined(HAVE_ORC) #define TEMP(N, S) orc_program_add_temporary(p, S, N) #define SCANLINE(N, S) orc_program_add_source(p, S, N) #define CONST(N, V, S) orc_program_add_constant(p, S, V, N) #define ASM2(OP, A, B) orc_program_append_ds_str(p, OP, A, B) #define ASM3(OP, A, B, C) orc_program_append_str(p, OP, A, B, C) /* Generate code for a section of the mask. first is the index we start * at, we set last to the index of the last one we use before we run * out of intermediates / constants / parameters / sources or mask * coefficients. * * 0 for success, -1 on error. */ static int vips_convi_compile_section(VipsConvi *convi, VipsImage *in, Pass *pass) { VipsConvolution *convolution = (VipsConvolution *) convi; VipsImage *M = convolution->M; OrcProgram *p; OrcCompileResult result; int i; #ifdef DEBUG_COMPILE printf("starting pass %d\n", pass->first); #endif /*DEBUG_COMPILE*/ pass->program = p = orc_program_new(); pass->d1 = orc_program_add_destination(p, 2, "d1"); /* "r" is the array of sums from the previous pass (if any). */ if (!(pass->r = orc_program_add_source(p, 2, "r"))) return -1; /* The value we fetch from the image, the accumulated sum. */ TEMP("value", 2); TEMP("valueb", 1); TEMP("sum", 2); CONST("sexp", convi->sexp, 2); CONST("rnd", 1 << (convi->sexp - 1), 2); pass->n_const += 2; /* Init the sum. If this is the first pass, it's a constant. If this * is a later pass, we have to init the sum from the result * of the previous pass. */ if (pass->first == 0) { CONST("rnd2", 1 << (convi->exp - 1), 2); ASM2("loadpw", "sum", "rnd2"); pass->n_const++; } else ASM2("loadw", "sum", "r"); for (i = pass->first; i < convi->n_point; i++) { int x = i % M->Xsize; int y = i / M->Xsize; char source[256]; char off[256]; char coeff[256]; /* Exclude zero elements. */ if (!convi->mant[i]) continue; /* The source. sl0 is the first scanline in the mask. */ vips_snprintf(source, 256, "sl%d", y); if (orc_program_find_var_by_name(p, source) == -1) { SCANLINE(source, 1); pass->line[pass->n_scanline] = y; pass->n_scanline++; } /* Load with an offset. Only for non-first-columns though. */ if (x == 0) ASM2("convubw", "value", source); else { vips_snprintf(off, 256, "c%db", x); if (orc_program_find_var_by_name(p, off) == -1) { CONST(off, in->Bands * x, 1); pass->n_const++; } ASM3("loadoffb", "valueb", source, off); ASM2("convubw", "value", "valueb"); } /* We need a signed multiply, so the image pixel needs to * become a signed 16-bit value. We know only the bottom 8 bits * of the image and coefficient are interesting, so we can take * the bottom half of a 16x16->32 multiply. */ vips_snprintf(coeff, 256, "c%dw", convi->mant[i]); if (orc_program_find_var_by_name(p, coeff) == -1) { CONST(coeff, convi->mant[i], 2); pass->n_const++; } ASM3("mullw", "value", "value", coeff); /* Shift right before add to prevent overflow on large masks. */ ASM3("addw", "value", "value", "rnd"); ASM3("shrsw", "value", "value", "sexp"); /* We accumulate the signed 16-bit result in sum. Saturated * add. */ ASM3("addssw", "sum", "sum", "value"); /* orc allows up to 8 constants, so break early once we * approach this limit. */ if (pass->n_const >= 7 /*ORC_MAX_CONST_VARS - 1*/) break; /* You can have 8 sources, and pass->r counts as one of them, * so +1 there. */ if (pass->n_scanline + 1 >= 7 /*ORC_MAX_SRC_VARS - 1*/) break; } pass->last = i; /* And write to our intermediate buffer. */ ASM2("copyw", "d1", "sum"); /* Some orcs seem to be unstable with many compilers active at once. */ g_mutex_lock(vips__global_lock); result = orc_program_compile(p); g_mutex_unlock(vips__global_lock); if (!ORC_COMPILE_RESULT_IS_SUCCESSFUL(result)) return -1; #ifdef DEBUG_COMPILE printf("done coeffs %d to %d\n", pass->first, pass->last); #endif /*DEBUG_COMPILE*/ return 0; } /* Generate code for the final 16->8 conversion. * * 0 for success, -1 on error. */ static int vips_convi_compile_clip(VipsConvi *convi) { VipsConvolution *convolution = (VipsConvolution *) convi; VipsImage *M = convolution->M; int offset = VIPS_RINT(vips_image_get_offset(M)); OrcProgram *p; OrcCompileResult result; convi->program = p = orc_program_new(); convi->d1 = orc_program_add_destination(p, 1, "d1"); /* "r" is the array of sums we clip down. */ if (!(convi->r = orc_program_add_source(p, 2, "r"))) return -1; /* The value we fetch from the image. */ TEMP("value", 2); CONST("exp", convi->exp, 2); ASM3("shrsw", "value", "r", "exp"); CONST("off", offset, 2); ASM3("addw", "value", "value", "off"); ASM2("convsuswb", "d1", "value"); /* Some orcs seem to be unstable with many compilers active at once. */ g_mutex_lock(vips__global_lock); result = orc_program_compile(p); g_mutex_unlock(vips__global_lock); if (!ORC_COMPILE_RESULT_IS_SUCCESSFUL(result)) return -1; return 0; } static int vips_convi_compile(VipsConvi *convi, VipsImage *in) { int i; Pass *pass; /* Generate passes until we've used up the whole mask. */ for (i = 0;;) { /* Allocate space for another pass. */ if (convi->n_pass == MAX_PASS) return -1; pass = &convi->pass[convi->n_pass]; convi->n_pass += 1; pass->first = i; pass->r = -1; pass->n_const = 0; pass->n_scanline = 0; if (vips_convi_compile_section(convi, in, pass)) return -1; i = pass->last + 1; if (i >= convi->n_point) break; } if (vips_convi_compile_clip(convi)) return -1; return 0; } static int vips_convi_gen_vector(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsConviSequence *seq = (VipsConviSequence *) vseq; VipsConvi *convi = (VipsConvi *) b; VipsConvolution *convolution = (VipsConvolution *) convi; VipsImage *M = convolution->M; VipsImage *in = (VipsImage *) a; VipsRegion *ir = seq->ir; VipsRect *r = &out_region->valid; int ne = r->width * in->Bands; VipsRect s; int i, j, y; OrcExecutor executor[MAX_PASS]; OrcExecutor clip; #ifdef DEBUG_PIXELS printf("vips_convi_gen_vector: generating %d x %d at %d x %d\n", r->width, r->height, r->left, r->top); #endif /*DEBUG_PIXELS*/ /* Prepare the section of the input image we need. A little larger * than the section of the output image we are producing. */ s = *r; s.width += M->Xsize - 1; s.height += M->Ysize - 1; if (vips_region_prepare(ir, &s)) return -1; for (i = 0; i < convi->n_pass; i++) { orc_executor_set_program(&executor[i], convi->pass[i].program); orc_executor_set_n(&executor[i], ne); } orc_executor_set_program(&clip, convi->program); orc_executor_set_n(&clip, ne); VIPS_GATE_START("vips_convi_gen_vector: work"); for (y = 0; y < r->height; y++) { VipsPel *q = VIPS_REGION_ADDR(out_region, r->left, r->top + y); #ifdef DEBUG_PIXELS { int h, v; printf("before convolve: x = %d, y = %d\n", r->left, r->top + y); for (v = 0; v < M->Ysize; v++) { for (h = 0; h < M->Xsize; h++) printf("%3d ", *VIPS_REGION_ADDR(ir, r->left + h, r->top + y + v)); printf("\n"); } } #endif /*DEBUG_PIXELS*/ /* We run our n passes to generate this scanline. */ for (i = 0; i < convi->n_pass; i++) { Pass *pass = &convi->pass[i]; for (j = 0; j < pass->n_scanline; j++) orc_executor_set_array(&executor[i], pass->r + 1 + j, VIPS_REGION_ADDR(ir, r->left, r->top + y + pass->line[j])); orc_executor_set_array(&executor[i], pass->r, seq->t1); orc_executor_set_array(&executor[i], pass->d1, seq->t2); orc_executor_run(&executor[i]); VIPS_SWAP(signed short *, seq->t1, seq->t2); } #ifdef DEBUG_PIXELS printf("before clip: %d\n", ((signed short *) seq->t1)[0]); #endif /*DEBUG_PIXELS*/ orc_executor_set_array(&clip, convi->r, seq->t1); orc_executor_set_array(&clip, convi->d1, q); orc_executor_run(&clip); #ifdef DEBUG_PIXELS printf("after clip: %d\n", *VIPS_REGION_ADDR(out_region, r->left, r->top + y)); #endif /*DEBUG_PIXELS*/ } VIPS_GATE_STOP("vips_convi_gen_vector: work"); VIPS_COUNT_PIXELS(out_region, "vips_convi_gen_vector"); return 0; } #endif /*HAVE_HWY*/ /* INT inner loops. */ #define CONV_INT(TYPE, CLIP) \ { \ TYPE *restrict p = (TYPE *) VIPS_REGION_ADDR(ir, le, y); \ TYPE *restrict q = (TYPE *) VIPS_REGION_ADDR(out_region, le, y); \ int *restrict offsets = seq->offsets; \ \ for (x = 0; x < sz; x++) { \ int sum; \ int i; \ \ sum = 0; \ for (i = 0; i < nnz; i++) \ sum += t[i] * p[offsets[i]]; \ \ sum = CLIP(((sum + rounding) / scale) + offset); \ \ q[x] = sum; \ p += 1; \ } \ } /* FLOAT inner loops. */ #define CONV_FLOAT(TYPE) \ { \ TYPE *restrict p = (TYPE *) VIPS_REGION_ADDR(ir, le, y); \ TYPE *restrict q = (TYPE *) VIPS_REGION_ADDR(out_region, le, y); \ int *restrict offsets = seq->offsets; \ \ for (x = 0; x < sz; x++) { \ double sum; \ int i; \ \ sum = 0; \ for (i = 0; i < nnz; i++) \ sum += t[i] * p[offsets[i]]; \ \ sum = (sum / scale) + offset; \ \ q[x] = sum; \ p += 1; \ } \ } /* Various integer range clips. */ #define CLIP_UCHAR(X) VIPS_CLIP(0, (X), UCHAR_MAX) #define CLIP_CHAR(X) VIPS_CLIP(SCHAR_MIN, (X), SCHAR_MAX) #define CLIP_USHORT(X) VIPS_CLIP(0, (X), USHRT_MAX) #define CLIP_SHORT(X) VIPS_CLIP(SHRT_MIN, (X), SHRT_MAX) #define CLIP_NONE(X) (X) /* Convolve! */ static int vips_convi_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsConviSequence *seq = (VipsConviSequence *) vseq; VipsConvi *convi = (VipsConvi *) b; VipsConvolution *convolution = (VipsConvolution *) convi; VipsImage *M = convolution->M; int scale = VIPS_RINT(vips_image_get_scale(M)); int rounding = scale / 2; int offset = VIPS_RINT(vips_image_get_offset(M)); VipsImage *in = (VipsImage *) a; VipsRegion *ir = seq->ir; int *restrict t = convi->coeff; const int nnz = convi->nnz; VipsRect *r = &out_region->valid; int le = r->left; int to = r->top; int bo = VIPS_RECT_BOTTOM(r); int sz = VIPS_REGION_N_ELEMENTS(out_region) * (vips_band_format_iscomplex(in->BandFmt) ? 2 : 1); VipsRect s; int x, y, z, i; /* Prepare the section of the input image we need. A little larger * than the section of the output image we are producing. */ s = *r; s.width += M->Xsize - 1; s.height += M->Ysize - 1; if (vips_region_prepare(ir, &s)) return -1; /* Fill offset array. Only do this if the bpl has changed since the * previous vips_region_prepare(). */ if (seq->last_bpl != VIPS_REGION_LSKIP(ir)) { seq->last_bpl = VIPS_REGION_LSKIP(ir); for (i = 0; i < nnz; i++) { z = convi->coeff_pos[i]; x = z % M->Xsize; y = z / M->Xsize; seq->offsets[i] = (VIPS_REGION_ADDR(ir, x + le, y + to) - VIPS_REGION_ADDR(ir, le, to)) / VIPS_IMAGE_SIZEOF_ELEMENT(ir->im); } } VIPS_GATE_START("vips_convi_gen: work"); for (y = to; y < bo; y++) { switch (in->BandFmt) { case VIPS_FORMAT_UCHAR: CONV_INT(unsigned char, CLIP_UCHAR); break; case VIPS_FORMAT_CHAR: CONV_INT(signed char, CLIP_CHAR); break; case VIPS_FORMAT_USHORT: CONV_INT(unsigned short, CLIP_USHORT); break; case VIPS_FORMAT_SHORT: CONV_INT(signed short, CLIP_SHORT); break; case VIPS_FORMAT_UINT: CONV_INT(unsigned int, CLIP_NONE); break; case VIPS_FORMAT_INT: CONV_INT(signed int, CLIP_NONE); break; case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_COMPLEX: CONV_FLOAT(float); break; case VIPS_FORMAT_DOUBLE: case VIPS_FORMAT_DPCOMPLEX: CONV_FLOAT(double); break; default: g_assert_not_reached(); } } VIPS_GATE_STOP("vips_convi_gen: work"); VIPS_COUNT_PIXELS(out_region, "vips_convi_gen"); return 0; } /* Make an int version of a mask. * * We rint() everything, then adjust the scale try to match the overall * effect. */ int vips__image_intize(VipsImage *in, VipsImage **out) { VipsImage *t; int x, y; double double_result; double out_scale; double out_offset; int int_result; if (vips_check_matrix("vips2imask", in, &t)) return -1; if (!(*out = vips_image_new_matrix(t->Xsize, t->Ysize))) { g_object_unref(t); return -1; } /* We want to make an intmask which has the same input to output ratio * as the double image. * * Imagine convolving with the double image, what's the ratio of * brightness between input and output? We want the same ratio for the * int version, if we can. * * Imagine an input image where every pixel is 1, what will the output * be? */ double_result = 0; for (y = 0; y < t->Ysize; y++) for (x = 0; x < t->Xsize; x++) double_result += *VIPS_MATRIX(t, x, y); double_result /= vips_image_get_scale(t); for (y = 0; y < t->Ysize; y++) for (x = 0; x < t->Xsize; x++) *VIPS_MATRIX(*out, x, y) = VIPS_RINT(*VIPS_MATRIX(t, x, y)); out_scale = VIPS_RINT(vips_image_get_scale(t)); if (out_scale == 0) out_scale = 1; out_offset = VIPS_RINT(vips_image_get_offset(t)); /* Now convolve a 1 everywhere image with the int version we've made, * what do we get? */ int_result = 0; for (y = 0; y < t->Ysize; y++) for (x = 0; x < t->Xsize; x++) int_result += *VIPS_MATRIX(*out, x, y); int_result /= out_scale; /* And adjust the scale to get as close to a match as we can. */ out_scale = VIPS_RINT(out_scale + (int_result - double_result)); if (out_scale == 0) out_scale = 1; vips_image_set_double(*out, "scale", out_scale); vips_image_set_double(*out, "offset", out_offset); g_object_unref(t); return 0; } #if defined(HAVE_HWY) || defined(HAVE_ORC) /* Make an int version of a mask. Each element is 8.8 float, with the same * exponent for each element (so just 8 bits in @out). * * @out is a w x h int array. */ static int vips_convi_intize(VipsConvi *convi, VipsImage *M) { VipsImage *t; double scale; double *scaled; double mx; double mn; int shift; int i; if (vips_check_matrix("vips2imask", M, &t)) return -1; /* Bake the scale into the mask to make a double version. */ scale = vips_image_get_scale(t); if (!(scaled = VIPS_ARRAY(convi, convi->n_point, double))) { g_object_unref(t); return -1; } for (i = 0; i < convi->n_point; i++) scaled[i] = VIPS_MATRIX(t, 0, 0)[i] / scale; g_object_unref(t); #ifdef DEBUG_COMPILE { int x, y; printf("vips_convi_intize: double version\n"); for (y = 0; y < t->Ysize; y++) { printf("\t"); for (x = 0; x < t->Xsize; x++) printf("%g ", scaled[y * t->Xsize + x]); printf("\n"); } } #endif /*DEBUG_COMPILE*/ mx = scaled[0]; mn = scaled[0]; for (i = 1; i < convi->n_point; i++) { if (scaled[i] > mx) mx = scaled[i]; if (scaled[i] < mn) mn = scaled[i]; } /* The mask max rounded up to the next power of two gives the exponent * all elements share. Values are eg. -3 for 1/8, 3 for 8. * * Add one so we round up stuff exactly on x.0. We multiply by 128 * later, so 1.0 (for example) would become 128, which is outside * signed 8 bit. */ shift = ceil(log2(mx) + 1); #ifdef HAVE_HWY /* Make sure we have enough range. */ if (ceil(log2(convi->n_point)) > 10) { g_info("vips_convi_intize: mask too large"); return -1; } /* Calculate the final shift. */ convi->exp = 7 - shift; #elif defined(HAVE_ORC) /* We need to sum n_points, so we have to shift right before adding a * new value to make sure we have enough range. */ convi->sexp = ceil(log2(convi->n_point)); if (convi->sexp > 10) { g_info("vips_convi_intize: mask too large"); return -1; } /* With that already done, the final shift must be ... */ convi->exp = 7 - shift - convi->sexp; #endif /*HAVE_HWY*/ if (!(convi->mant = VIPS_ARRAY(convi, convi->n_point, short)) #ifdef HAVE_HWY || !(convi->coeff_pos = VIPS_ARRAY(convi, convi->n_point, int)) #endif /*HAVE_HWY*/ ) return -1; #ifdef HAVE_HWY convi->nnz = 0; #endif /*HAVE_HWY*/ for (i = 0; i < convi->n_point; i++) { /* 128 since this is signed. */ convi->mant[i] = VIPS_RINT(128 * scaled[i] * pow(2, -shift)); if (convi->mant[i] < -128 || convi->mant[i] > 127) { g_info("vips_convi_intize: mask range too large"); return -1; } #ifdef HAVE_HWY /* Squeeze out zero mask elements. */ if (convi->mant[i]) { convi->mant[convi->nnz] = convi->mant[i]; convi->coeff_pos[convi->nnz] = i; convi->nnz += 1; } #endif /*HAVE_HWY*/ } #ifdef HAVE_HWY /* Was the whole mask zero? We must have at least 1 element * in there: set it to zero. */ if (convi->nnz == 0) { convi->mant[0] = 0; convi->coeff_pos[0] = 0; convi->nnz = 1; } #endif /*HAVE_HWY*/ #ifdef DEBUG_COMPILE { int x, y; printf("vips_convi_intize:\n"); #ifdef HAVE_ORC printf("sexp = %d\n", convi->sexp); #endif /*HAVE_ORC*/ printf("exp = %d\n", convi->exp); for (y = 0; y < t->Ysize; y++) { printf("\t"); for (x = 0; x < t->Xsize; x++) printf("%4d ", convi->mant[y * t->Xsize + x]); printf("\n"); } } #endif /*DEBUG_COMPILE*/ /* Verify accuracy. */ { double true_sum; int int_sum; int true_value; int int_value; true_sum = 0.0; int_sum = 0; #ifdef HAVE_HWY for (i = 0; i < convi->nnz; i++) { true_sum += 128 * scaled[convi->coeff_pos[i]]; int_sum += 128 * convi->mant[i]; } #elif defined(HAVE_ORC) for (i = 0; i < convi->n_point; i++) { int value; true_sum += 128 * scaled[i]; value = 128 * convi->mant[i]; value = (value + (1 << (convi->sexp - 1))) >> convi->sexp; int_sum += value; int_sum = VIPS_CLIP(SHRT_MIN, int_sum, SHRT_MAX); } #endif /*HAVE_HWY*/ true_value = VIPS_CLIP(0, true_sum, 255); if (convi->exp > 0) int_value = (int_sum + (1 << (convi->exp - 1))) >> convi->exp; else int_value = VIPS_LSHIFT_INT(int_sum, convi->exp); int_value = VIPS_CLIP(0, int_value, 255); if (VIPS_ABS(true_value - int_value) > 2) { g_info("vips_convi_intize: too inaccurate"); return -1; } } return 0; } #endif /*HAVE_HWY || HAVE_ORC*/ static int vips_convi_build(VipsObject *object) { VipsConvolution *convolution = (VipsConvolution *) object; VipsConvi *convi = (VipsConvi *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 4); VipsImage *in; VipsImage *M; VipsGenerateFn generate; double *coeff; int i; if (VIPS_OBJECT_CLASS(vips_convi_parent_class)->build(object)) return -1; in = convolution->in; M = convolution->M; convi->n_point = M->Xsize * M->Ysize; if (vips_embed(in, &t[0], M->Xsize / 2, M->Ysize / 2, in->Xsize + M->Xsize - 1, in->Ysize + M->Ysize - 1, "extend", VIPS_EXTEND_COPY, NULL)) return -1; in = t[0]; /* For uchar input, try to make a vector path. */ #ifdef HAVE_HWY if (in->BandFmt == VIPS_FORMAT_UCHAR && vips_vector_isenabled() && !vips_convi_intize(convi, M)) { generate = vips_convi_uchar_vector_gen; g_info("convi: using vector path"); } else #elif defined(HAVE_ORC) if (in->BandFmt == VIPS_FORMAT_UCHAR && vips_vector_isenabled() && !vips_convi_intize(convi, M) && !vips_convi_compile(convi, in)) { generate = vips_convi_gen_vector; g_info("convi: using vector path"); } else #endif /*HAVE_HWY*/ /* Default to the C path. */ generate = vips_convi_gen; /* Make the data for the C path. */ if (generate == vips_convi_gen) { g_info("convi: using C path"); /* Make an int version of our mask. */ if (vips__image_intize(M, &t[1])) return -1; M = t[1]; coeff = VIPS_MATRIX(M, 0, 0); if (!(convi->coeff = VIPS_ARRAY(object, convi->n_point, int)) || !(convi->coeff_pos = VIPS_ARRAY(object, convi->n_point, int))) return -1; /* Squeeze out zero mask elements. */ convi->nnz = 0; for (i = 0; i < convi->n_point; i++) if (coeff[i]) { convi->coeff[convi->nnz] = coeff[i]; convi->coeff_pos[convi->nnz] = i; convi->nnz += 1; } /* Was the whole mask zero? We must have at least 1 element * in there: set it to zero. */ if (convi->nnz == 0) { convi->coeff[0] = 0; convi->coeff_pos[0] = 0; convi->nnz = 1; } } g_object_set(convi, "out", vips_image_new(), NULL); if (vips_image_pipelinev(convolution->out, VIPS_DEMAND_STYLE_SMALLTILE, in, NULL)) return -1; convolution->out->Xoffset = 0; convolution->out->Yoffset = 0; /* Prepare output. Consider a 7x7 mask and a 7x7 image --- the output * would be 1x1. */ convolution->out->Xsize -= M->Xsize - 1; convolution->out->Ysize -= M->Ysize - 1; if (vips_image_generate(convolution->out, vips_convi_start, generate, vips_convi_stop, in, convi)) return -1; convolution->out->Xoffset = -M->Xsize / 2; convolution->out->Yoffset = -M->Ysize / 2; return 0; } static void vips_convi_class_init(VipsConviClass *class) { #ifdef HAVE_ORC GObjectClass *gobject_class = G_OBJECT_CLASS(class); #endif /*HAVE_ORC*/ VipsObjectClass *object_class = (VipsObjectClass *) class; #ifdef HAVE_ORC gobject_class->finalize = vips_convi_finalize; #endif /*HAVE_ORC*/ object_class->nickname = "convi"; object_class->description = _("int convolution operation"); object_class->build = vips_convi_build; } static void vips_convi_init(VipsConvi *convi) { convi->nnz = 0; convi->coeff = NULL; convi->coeff_pos = NULL; #if defined(HAVE_HWY) || defined(HAVE_ORC) convi->mant = NULL; #endif /*HAVE_HWY || HAVE_ORC*/ } /** * vips_convi: (method) * @in: input image * @out: (out): output image * @mask: convolve with this mask * @...: %NULL-terminated list of optional named arguments * * Integer convolution. This is a low-level operation, see vips_conv() for * something more convenient. * * @mask is converted to an integer mask with rint() of each element, rint of * scale and rint of offset. Each output pixel is then calculated as * * |[ * sigma[i]{pixel[i] * mask[i]} / scale + offset * ]| * * The output image always has the same #VipsBandFormat as the input image. * * For #VIPS_FORMAT_UCHAR images, vips_convi() uses a fast vector path based on * half-float arithmetic. This can produce slightly different results. * Disable the vector path with `--vips-novector` or `VIPS_NOVECTOR` or * vips_vector_set_enabled(). * * See also: vips_conv(). * * Returns: 0 on success, -1 on error */ int vips_convi(VipsImage *in, VipsImage **out, VipsImage *mask, ...) { va_list ap; int result; va_start(ap, mask); result = vips_call_split("convi", ap, in, out, mask); va_end(ap); return result; } libvips-8.15.1/libvips/convolution/convi_hwy.cpp000066400000000000000000000210211454007373500220220ustar00rootroot00000000000000/* 20/08/22 kleisauke * - initial implementation * 07/09/22 kleisauke * - implement using ReorderWidenMulAccumulate * 29/11/22 kleisauke * - prefer use of RearrangeToOddPlusEven */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "pconvolution.h" #ifdef HAVE_HWY #undef HWY_TARGET_INCLUDE #define HWY_TARGET_INCLUDE "libvips/convolution/convi_hwy.cpp" #include #include namespace HWY_NAMESPACE { using namespace hwy::HWY_NAMESPACE; using DI32 = ScalableTag; using DI16 = ScalableTag; using DU8 = ScalableTag; constexpr DU8 du8; constexpr Rebind du8x16; constexpr Rebind du8x32; constexpr DI16 di16; constexpr DI32 di32; HWY_ATTR void vips_convi_uchar_hwy(VipsRegion *out_region, VipsRegion *ir, VipsRect *r, int32_t ne, int32_t nnz, int32_t offset, const int32_t *HWY_RESTRICT offsets, const int16_t *HWY_RESTRICT mant, int32_t exp) { #if HWY_TARGET != HWY_SCALAR int32_t bo = VIPS_RECT_BOTTOM(r); #if HWY_ARCH_RVV || (HWY_ARCH_ARM_A64 && HWY_TARGET <= HWY_SVE) /* Ensure we do not cross 128-bit block boundaries on RVV/SVE. */ const int32_t N = 16; #else const int32_t N = Lanes(du8); #endif const auto zero = Zero(du8); const auto v_exp = Set(di32, 1 << (exp - 1)); const auto v_offset = Set(di32, offset); for (int32_t y = r->top; y < bo; ++y) { VipsPel *HWY_RESTRICT p = VIPS_REGION_ADDR(ir, r->left, y); VipsPel *HWY_RESTRICT q = VIPS_REGION_ADDR(out_region, r->left, y); /* Main loop: unrolled. */ int32_t x = 0; for (; x + N <= ne; x += N) { #if HWY_ARCH_X86 || HWY_ARCH_WASM || HWY_TARGET == HWY_EMU128 /* Initialize the sum with the addition on x86 and Wasm, * avoids an extra add instruction. Should be safe given * that only one accumulator is used. */ auto sum0 = v_exp; auto sum2 = v_exp; auto sum4 = v_exp; auto sum6 = v_exp; #else auto sum0 = Zero(di32); auto sum2 = Zero(di32); auto sum4 = Zero(di32); auto sum6 = Zero(di32); #endif auto sum1 = Zero(di32); /* unused on x86 and Wasm */ auto sum3 = Zero(di32); /* unused on x86 and Wasm */ auto sum5 = Zero(di32); /* unused on x86 and Wasm */ auto sum7 = Zero(di32); /* unused on x86 and Wasm */ int32_t i = 0; for (; i + 2 <= nnz; i += 2) { /* Load two coefficients at once. */ auto mmk = BitCast(di16, Set(di32, *(int32_t *) &mant[i])); /* Load with an offset. */ auto top = LoadU(du8, /* top line */ p + offsets[i]); auto bottom = LoadU(du8, /* bottom line */ p + offsets[i + 1]); auto source = InterleaveLower(top, bottom); auto pix = BitCast(di16, InterleaveLower(source, zero)); sum0 = ReorderWidenMulAccumulate(di32, pix, mmk, sum0, /* byref */ sum1); pix = BitCast(di16, InterleaveUpper(du8, source, zero)); sum2 = ReorderWidenMulAccumulate(di32, pix, mmk, sum2, /* byref */ sum3); source = InterleaveUpper(du8, top, bottom); pix = BitCast(di16, InterleaveLower(source, zero)); sum4 = ReorderWidenMulAccumulate(di32, pix, mmk, sum4, /* byref */ sum5); pix = BitCast(di16, InterleaveUpper(du8, source, zero)); sum6 = ReorderWidenMulAccumulate(di32, pix, mmk, sum6, /* byref */ sum7); } for (; i < nnz; ++i) { auto mmk = Set(di16, mant[i]); /* Load with an offset. */ auto top = LoadU(du8, p + offsets[i]); auto source = InterleaveLower(top, zero); auto pix = BitCast(di16, InterleaveLower(source, zero)); sum0 = ReorderWidenMulAccumulate(di32, pix, mmk, sum0, /* byref */ sum1); pix = BitCast(di16, InterleaveUpper(du8, source, zero)); sum2 = ReorderWidenMulAccumulate(di32, pix, mmk, sum2, /* byref */ sum3); source = InterleaveUpper(du8, top, zero); pix = BitCast(di16, InterleaveLower(source, zero)); sum4 = ReorderWidenMulAccumulate(di32, pix, mmk, sum4, /* byref */ sum5); pix = BitCast(di16, InterleaveUpper(du8, source, zero)); sum6 = ReorderWidenMulAccumulate(di32, pix, mmk, sum6, /* byref */ sum7); } sum0 = RearrangeToOddPlusEven(sum0, sum1); sum2 = RearrangeToOddPlusEven(sum2, sum3); sum4 = RearrangeToOddPlusEven(sum4, sum5); sum6 = RearrangeToOddPlusEven(sum6, sum7); #if !(HWY_ARCH_X86 || HWY_ARCH_WASM || HWY_TARGET == HWY_EMU128) sum0 = Add(sum0, v_exp); sum2 = Add(sum2, v_exp); sum4 = Add(sum4, v_exp); sum6 = Add(sum6, v_exp); #endif /* The final 32->8 conversion. */ sum0 = ShiftRightSame(sum0, exp); sum2 = ShiftRightSame(sum2, exp); sum4 = ShiftRightSame(sum4, exp); sum6 = ShiftRightSame(sum6, exp); sum0 = Add(sum0, v_offset); sum2 = Add(sum2, v_offset); sum4 = Add(sum4, v_offset); sum6 = Add(sum6, v_offset); #if HWY_ARCH_RVV || (HWY_ARCH_ARM_A64 && HWY_TARGET <= HWY_SVE) /* RVV/SVE defines demotion as writing to the upper or lower half * of each lane, rather than compacting them within a vector. */ auto demoted0 = DemoteTo(du8x32, sum0); auto demoted1 = DemoteTo(du8x32, sum2); auto demoted2 = DemoteTo(du8x32, sum4); auto demoted3 = DemoteTo(du8x32, sum6); StoreU(demoted0, du8x32, q + x + 0 * N / 4); StoreU(demoted1, du8x32, q + x + 1 * N / 4); StoreU(demoted2, du8x32, q + x + 2 * N / 4); StoreU(demoted3, du8x32, q + x + 3 * N / 4); #else auto demoted0 = ReorderDemote2To(di16, sum0, sum2); auto demoted2 = ReorderDemote2To(di16, sum4, sum6); auto demoted = ReorderDemote2To(du8, demoted0, demoted2); StoreU(demoted, du8, q + x); #endif p += N; } /* `ne` was not a multiple of the vector length `N`; * proceed one by one. */ for (; x < ne; ++x) { #if HWY_ARCH_X86 || HWY_ARCH_WASM || HWY_TARGET == HWY_EMU128 /* Initialize the sum with the addition on x86 and Wasm, * avoids an extra add instruction. Should be safe given * that only one accumulator is used. */ auto sum0 = v_exp; #else auto sum0 = Zero(di32); #endif auto sum1 = Zero(di32); /* unused on x86 and Wasm */ int32_t i = 0; for (; i + 2 <= nnz; i += 2) { /* Load two coefficients at once. */ auto mmk = BitCast(di16, Set(di32, *(int32_t *) &mant[i])); /* Load with an offset. */ auto top = LoadU(du8x16, /* top line */ p + offsets[i]); auto bottom = LoadU(du8x16, /* bottom line */ p + offsets[i + 1]); auto source = InterleaveLower(top, bottom); auto pix = PromoteTo(di16, source); sum0 = ReorderWidenMulAccumulate(di32, pix, mmk, sum0, /* byref */ sum1); } for (; i < nnz; ++i) { auto mmk = Set(di16, mant[i]); /* Load with an offset. */ auto top = LoadU(du8x32, p + offsets[i]); auto source = PromoteTo(di32, top); auto pix = BitCast(di16, source); sum0 = ReorderWidenMulAccumulate(di32, pix, mmk, sum0, /* byref */ sum1); } sum0 = RearrangeToOddPlusEven(sum0, sum1); #if !(HWY_ARCH_X86 || HWY_ARCH_WASM || HWY_TARGET == HWY_EMU128) sum0 = Add(sum0, v_exp); #endif /* The final 32->8 conversion. */ sum0 = ShiftRightSame(sum0, exp); sum0 = Add(sum0, v_offset); auto demoted = DemoteTo(du8x32, sum0); q[x] = GetLane(demoted); p += 1; } } #endif } } /*namespace HWY_NAMESPACE*/ #if HWY_ONCE HWY_EXPORT(vips_convi_uchar_hwy); void vips_convi_uchar_hwy(VipsRegion *out_region, VipsRegion *ir, VipsRect *r, int ne, int nnz, int offset, const int *restrict offsets, const short *restrict mant, int exp) { /* clang-format off */ HWY_DYNAMIC_DISPATCH(vips_convi_uchar_hwy)(out_region, ir, r, ne, nnz, offset, offsets, mant, exp); /* clang-format on */ } #endif /*HWY_ONCE*/ #endif /*HAVE_HWY*/ libvips-8.15.1/libvips/convolution/convolution.c000066400000000000000000000114211454007373500220370ustar00rootroot00000000000000/* base class for all convolution operations * * properties: * - one input image * - one output image * - one input mask */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pconvolution.h" /** * SECTION: convolution * @short_description: convolve and correlate images * @stability: Stable * @include: vips/vips.h * * These operations convolve an image in some way, or are operations based on * simple convolution, or are useful with convolution. */ /** * VipsPrecision: * @VIPS_PRECISION_INTEGER: int everywhere * @VIPS_PRECISION_FLOAT: float everywhere * @VIPS_PRECISION_APPROXIMATE: approximate integer output * * How accurate an operation should be. */ /** * VipsCombine: * @VIPS_COMBINE_MAX: take the maximum of the possible values * @VIPS_COMBINE_SUM: sum all the values * @VIPS_COMBINE_MIN: take the minimum value * * How to combine values. See vips_compass(), for example. */ G_DEFINE_ABSTRACT_TYPE(VipsConvolution, vips_convolution, VIPS_TYPE_OPERATION); static int vips_convolution_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsConvolution *convolution = VIPS_CONVOLUTION(object); VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); #ifdef DEBUG printf("vips_convolution_build: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ if (VIPS_OBJECT_CLASS(vips_convolution_parent_class)->build(object)) return -1; if (vips_check_matrix(class->nickname, convolution->mask, &t[0])) return -1; convolution->M = t[0]; return 0; } static void vips_convolution_class_init(VipsConvolutionClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "convolution"; vobject_class->description = _("convolution operations"); vobject_class->build = vips_convolution_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; /* Inputs set by subclassess. */ VIPS_ARG_IMAGE(class, "in", 0, _("Input"), _("Input image argument"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsConvolution, in)); VIPS_ARG_IMAGE(class, "out", 10, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsConvolution, out)); VIPS_ARG_IMAGE(class, "mask", 20, _("Mask"), _("Input matrix image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsConvolution, mask)); } static void vips_convolution_init(VipsConvolution *convolution) { } /* Called from iofuncs to init all operations in this dir. Use a plugin system * instead? */ void vips_convolution_operation_init(void) { extern GType vips_conv_get_type(void); extern GType vips_conva_get_type(void); extern GType vips_convf_get_type(void); extern GType vips_convi_get_type(void); extern GType vips_convsep_get_type(void); extern GType vips_convasep_get_type(void); extern GType vips_compass_get_type(void); extern GType vips_fastcor_get_type(void); extern GType vips_spcor_get_type(void); extern GType vips_sharpen_get_type(void); extern GType vips_gaussblur_get_type(void); extern GType vips_sobel_get_type(void); extern GType vips_scharr_get_type(void); extern GType vips_prewitt_get_type(void); extern GType vips_canny_get_type(void); vips_conv_get_type(); vips_conva_get_type(); vips_convf_get_type(); vips_convi_get_type(); vips_compass_get_type(); vips_convsep_get_type(); vips_convasep_get_type(); vips_fastcor_get_type(); vips_spcor_get_type(); vips_sharpen_get_type(); vips_gaussblur_get_type(); vips_sobel_get_type(); vips_scharr_get_type(); vips_prewitt_get_type(); vips_canny_get_type(); } libvips-8.15.1/libvips/convolution/convsep.c000066400000000000000000000115241454007373500211410ustar00rootroot00000000000000/* convolve twice, rotating the mask * * 23/10/13 * - from vips_convsep() * 8/5/17 * - default to float ... int will often lose precision and should not be * the default */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include "pconvolution.h" typedef struct { VipsConvolution parent_instance; VipsPrecision precision; int layers; int cluster; } VipsConvsep; typedef VipsConvolutionClass VipsConvsepClass; G_DEFINE_TYPE(VipsConvsep, vips_convsep, VIPS_TYPE_CONVOLUTION); static int vips_convsep_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsConvolution *convolution = (VipsConvolution *) object; VipsConvsep *convsep = (VipsConvsep *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 4); VipsImage *in; g_object_set(convsep, "out", vips_image_new(), NULL); if (VIPS_OBJECT_CLASS(vips_convsep_parent_class)->build(object)) return -1; if (vips_check_separable(class->nickname, convolution->M)) return -1; in = convolution->in; if (convsep->precision == VIPS_PRECISION_APPROXIMATE) { if (vips_convasep(in, &t[0], convolution->M, "layers", convsep->layers, NULL)) return -1; in = t[0]; } else { /* Take a copy, since we must set the offset. */ if (vips_rot(convolution->M, &t[0], VIPS_ANGLE_D90, NULL) || vips_copy(t[0], &t[3], NULL)) return -1; vips_image_set_double(t[3], "offset", 0); if (vips_conv(in, &t[1], convolution->M, "precision", convsep->precision, "layers", convsep->layers, "cluster", convsep->cluster, NULL) || vips_conv(t[1], &t[2], t[3], "precision", convsep->precision, "layers", convsep->layers, "cluster", convsep->cluster, NULL)) return -1; in = t[2]; } if (vips_image_write(in, convolution->out)) return -1; return 0; } static void vips_convsep_class_init(VipsConvsepClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "convsep"; object_class->description = _("separable convolution operation"); object_class->build = vips_convsep_build; VIPS_ARG_ENUM(class, "precision", 203, _("Precision"), _("Convolve with this precision"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsConvsep, precision), VIPS_TYPE_PRECISION, VIPS_PRECISION_FLOAT); VIPS_ARG_INT(class, "layers", 204, _("Layers"), _("Use this many layers in approximation"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsConvsep, layers), 1, 1000, 5); VIPS_ARG_INT(class, "cluster", 205, _("Cluster"), _("Cluster lines closer than this in approximation"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsConvsep, cluster), 1, 100, 1); } static void vips_convsep_init(VipsConvsep *convsep) { convsep->precision = VIPS_PRECISION_FLOAT; convsep->layers = 5; convsep->cluster = 1; } /** * vips_convsep: (method) * @in: input image * @out: (out): output image * @mask: convolution mask * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @precision: calculation accuracy * * @layers: number of layers for approximation * * @cluster: cluster lines closer than this distance * * Perform a separable convolution of @in with @mask. * See vips_conv() for a detailed description. * * The mask must be 1xn or nx1 elements. * * The image is convolved twice: once with @mask and then again with @mask * rotated by 90 degrees. This is much faster for certain types of mask * (gaussian blur, for example) than doing a full 2D convolution. * * See also: vips_conv(), vips_gaussmat(). * * Returns: 0 on success, -1 on error */ int vips_convsep(VipsImage *in, VipsImage **out, VipsImage *mask, ...) { va_list ap; int result; va_start(ap, mask); result = vips_call_split("convsep", ap, in, out, mask); va_end(ap); return result; } libvips-8.15.1/libvips/convolution/correlation.c000066400000000000000000000111571454007373500220070ustar00rootroot00000000000000/* base class for correlation * * 7/11/13 * - from convolution.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pconvolution.h" #include "correlation.h" G_DEFINE_ABSTRACT_TYPE(VipsCorrelation, vips_correlation, VIPS_TYPE_OPERATION); static int vips_correlation_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsCorrelation *correlation = (VipsCorrelation *) b; VipsCorrelationClass *cclass = VIPS_CORRELATION_GET_CLASS(correlation); VipsRect *r = &out_region->valid; VipsRect irect; /* What part of ir do we need? */ irect.left = r->left; irect.top = r->top; irect.width = r->width + correlation->ref_ready->Xsize - 1; irect.height = r->height + correlation->ref_ready->Ysize - 1; if (vips_region_prepare(ir, &irect)) return -1; cclass->correlation(correlation, ir, out_region); return 0; } static int vips_correlation_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsCorrelationClass *cclass = VIPS_CORRELATION_CLASS(class); VipsCorrelation *correlation = (VipsCorrelation *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 6); if (VIPS_OBJECT_CLASS(vips_correlation_parent_class)->build(object)) return -1; /* Stretch input out. */ if (vips_embed(correlation->in, &t[0], correlation->ref->Xsize / 2, correlation->ref->Ysize / 2, correlation->in->Xsize + correlation->ref->Xsize - 1, correlation->in->Ysize + correlation->ref->Ysize - 1, "extend", VIPS_EXTEND_COPY, NULL)) return -1; if (vips__formatalike(t[0], correlation->ref, &t[1], &t[2]) || vips__bandalike(class->nickname, t[1], t[2], &t[3], &t[4]) || !(t[5] = vips_image_copy_memory(t[4]))) return -1; correlation->in_ready = t[3]; correlation->ref_ready = t[5]; g_object_set(object, "out", vips_image_new(), NULL); /* FATSTRIP is good for us as THINSTRIP will cause * too many recalculations on overlaps. */ if (vips_image_pipelinev(correlation->out, VIPS_DEMAND_STYLE_FATSTRIP, correlation->in_ready, correlation->ref_ready, NULL)) return -1; correlation->out->Xsize = correlation->in->Xsize; correlation->out->Ysize = correlation->in->Ysize; correlation->out->BandFmt = cclass->format_table[correlation->in_ready->BandFmt]; if (cclass->pre_generate && cclass->pre_generate(correlation)) return -1; if (vips_image_generate(correlation->out, vips_start_one, vips_correlation_gen, vips_stop_one, correlation->in_ready, correlation)) return -1; vips_reorder_margin_hint(correlation->out, correlation->ref->Xsize * correlation->ref->Ysize); return 0; } static void vips_correlation_class_init(VipsCorrelationClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "correlation"; object_class->description = _("correlation operation"); object_class->build = vips_correlation_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 0, _("Input"), _("Input image argument"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsCorrelation, in)); VIPS_ARG_IMAGE(class, "ref", 10, _("Mask"), _("Input reference image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsCorrelation, ref)); VIPS_ARG_IMAGE(class, "out", 20, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsCorrelation, out)); } static void vips_correlation_init(VipsCorrelation *correlation) { } libvips-8.15.1/libvips/convolution/correlation.h000066400000000000000000000045431454007373500220150ustar00rootroot00000000000000/* base class for all correlation operations */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_PCORRELATION_H #define VIPS_PCORRELATION_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #define VIPS_TYPE_CORRELATION (vips_correlation_get_type()) #define VIPS_CORRELATION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_CORRELATION, VipsCorrelation)) #define VIPS_CORRELATION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_CORRELATION, VipsCorrelationClass)) #define VIPS_IS_CORRELATION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_CORRELATION)) #define VIPS_IS_CORRELATION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_CORRELATION)) #define VIPS_CORRELATION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_CORRELATION, VipsCorrelationClass)) typedef struct { VipsOperation parent_instance; /* Params. */ VipsImage *in; VipsImage *ref; VipsImage *out; /* The two input images, upcast to the smallest common format. ref is * a memory buffer. */ VipsImage *in_ready; VipsImage *ref_ready; } VipsCorrelation; typedef struct { VipsOperationClass parent_class; /* For each upcast input format, what output format. */ const VipsBandFormat *format_table; /* Run just before generate. The subclass can fill in some stuff. */ int (*pre_generate)(VipsCorrelation *); void (*correlation)(VipsCorrelation *, VipsRegion *in, VipsRegion *out); } VipsCorrelationClass; GType vips_correlation_get_type(void); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_PCORRELATION_H*/ libvips-8.15.1/libvips/convolution/edge.c000066400000000000000000000215271454007373500203740ustar00rootroot00000000000000/* Edge detector * * 12/4/23 * - from vips_sobel() */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include typedef struct _VipsEdge { VipsOperation parent_instance; VipsImage *in; VipsImage *out; VipsImage *mask; /* Need an image vector for start_many. */ VipsImage *args[3]; } VipsEdge; typedef VipsOperationClass VipsEdgeClass; G_DEFINE_ABSTRACT_TYPE(VipsEdge, vips_edge, VIPS_TYPE_OPERATION); static void vips_edge_dispose(GObject *gobject) { VipsEdge *edge = (VipsEdge *) gobject; VIPS_UNREF(edge->mask); G_OBJECT_CLASS(vips_edge_parent_class)->dispose(gobject); } static int vips_edge_uchar_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsRegion **in = (VipsRegion **) vseq; VipsRect *r = &out_region->valid; int sz = r->width * in[0]->im->Bands; int x, y; if (vips_reorder_prepare_many(out_region->im, in, r)) return -1; for (y = 0; y < r->height; y++) { VipsPel *p1 = (VipsPel *restrict) VIPS_REGION_ADDR(in[0], r->left, r->top + y); VipsPel *p2 = (VipsPel *restrict) VIPS_REGION_ADDR(in[1], r->left, r->top + y); VipsPel *q = (VipsPel *restrict) VIPS_REGION_ADDR(out_region, r->left, r->top + y); for (x = 0; x < sz; x++) { int v1 = 2 * (p1[x] - 128); int v2 = 2 * (p2[x] - 128); /* Avoid the sqrt() for uchar. */ int v = VIPS_ABS(v1) + VIPS_ABS(v2); q[x] = v > 255 ? 255 : v; } } return 0; } /* Fast uchar path. */ static int vips_edge_build_uchar(VipsEdge *edge) { VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(edge), 20); g_info("vips_edge: uchar path"); /* For uchar, use 128 as the zero and divide the result by 2 to * prevent overflow. */ if (vips_copy(edge->mask, &t[1], NULL)) return -1; vips_image_set_double(t[1], "offset", 128.0); vips_image_set_double(t[1], "scale", 2.0); if (vips_conv(edge->in, &t[3], t[1], "precision", VIPS_PRECISION_INTEGER, NULL)) return -1; if (vips_rot90(t[1], &t[5], NULL) || vips_conv(edge->in, &t[7], t[5], "precision", VIPS_PRECISION_INTEGER, NULL)) return -1; g_object_set(edge, "out", vips_image_new(), NULL); edge->args[0] = t[3]; edge->args[1] = t[7]; edge->args[2] = NULL; if (vips_image_pipeline_array(edge->out, VIPS_DEMAND_STYLE_FATSTRIP, edge->args)) return -1; if (vips_image_generate(edge->out, vips_start_many, vips_edge_uchar_gen, vips_stop_many, edge->args, NULL)) return -1; return 0; } /* Accurate but slow path. */ static int vips_edge_build_float(VipsEdge *edge) { VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(edge), 20); g_info("vips_edge: float path"); if (vips_rot90(edge->mask, &t[0], NULL) || vips_conv(edge->in, &t[1], edge->mask, NULL) || vips_conv(edge->in, &t[2], t[0], NULL)) return -1; if (vips_multiply(t[1], t[1], &t[3], NULL) || vips_multiply(t[2], t[2], &t[4], NULL) || vips_add(t[3], t[4], &t[5], NULL) || vips_pow_const1(t[5], &t[6], 0.5, NULL) || vips_cast_uchar(t[6], &t[7], NULL)) return -1; g_object_set(edge, "out", vips_image_new(), NULL); if (vips_image_write(t[7], edge->out)) return -1; return 0; } static int vips_edge_build(VipsObject *object) { VipsEdge *edge = (VipsEdge *) object; if (edge->in->BandFmt == VIPS_FORMAT_UCHAR) { if (vips_edge_build_uchar(edge)) return -1; } else { if (vips_edge_build_float(edge)) return -1; } return 0; } static void vips_edge_class_init(VipsEdgeClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->dispose = vips_edge_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "edge"; object_class->description = _("Edge detector"); object_class->build = vips_edge_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsEdge, in)); VIPS_ARG_IMAGE(class, "out", 2, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsEdge, out)); } static void vips_edge_init(VipsEdge *edge) { } typedef VipsEdge VipsSobel; typedef VipsEdgeClass VipsSobelClass; G_DEFINE_TYPE(VipsSobel, vips_sobel, vips_edge_get_type()); static int vips_sobel_build(VipsObject *object) { VipsEdge *edge = (VipsEdge *) object; edge->mask = vips_image_new_matrixv(3, 3, 1.0, 2.0, 1.0, 0.0, 0.0, 0.0, -1.0, -2.0, -1.0); return VIPS_OBJECT_CLASS(vips_sobel_parent_class)->build(object); } static void vips_sobel_class_init(VipsSobelClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; object_class->nickname = "sobel"; object_class->description = _("Sobel edge detector"); object_class->build = vips_sobel_build; } static void vips_sobel_init(VipsEdge *sobel) { } typedef VipsEdge VipsScharr; typedef VipsEdgeClass VipsScharrClass; G_DEFINE_TYPE(VipsScharr, vips_scharr, vips_edge_get_type()); static int vips_scharr_build(VipsObject *object) { VipsEdge *edge = (VipsEdge *) object; edge->mask = vips_image_new_matrixv(3, 3, -3.0, 0.0, 3.0, -10.0, 0.0, 10.0, -3.0, 0.0, 3.0); return VIPS_OBJECT_CLASS(vips_scharr_parent_class)->build(object); } static void vips_scharr_class_init(VipsSobelClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; object_class->nickname = "scharr"; object_class->description = _("Scharr edge detector"); object_class->build = vips_scharr_build; } static void vips_scharr_init(VipsScharr *scharr) { } typedef VipsEdge VipsPrewitt; typedef VipsEdgeClass VipsPrewittClass; G_DEFINE_TYPE(VipsPrewitt, vips_prewitt, vips_edge_get_type()); static int vips_prewitt_build(VipsObject *object) { VipsEdge *edge = (VipsEdge *) object; edge->mask = vips_image_new_matrixv(3, 3, -1.0, 0.0, 1.0, -1.0, 0.0, 1.0, -1.0, 0.0, 1.0); return VIPS_OBJECT_CLASS(vips_prewitt_parent_class)->build(object); } static void vips_prewitt_class_init(VipsSobelClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; object_class->nickname = "prewitt"; object_class->description = _("Prewitt edge detector"); object_class->build = vips_prewitt_build; } static void vips_prewitt_init(VipsPrewitt *prewitt) { } /** * vips_sobel: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Sobel edge detector. * * uchar images are computed using a fast, low-precision path. Cast to float * for a high-precision implementation. * * See also: vips_canny(), vips_sobel(), vips_prewitt(), vips_scharr(). * * Returns: 0 on success, -1 on error. */ int vips_sobel(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("sobel", ap, in, out); va_end(ap); return result; } /** * vips_scharr: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Scharr edge detector. * * uchar images are computed using a fast, low-precision path. Cast to float * for a high-precision implementation. * * See also: vips_canny(), vips_sobel(), vips_prewitt(), vips_scharr(). * * Returns: 0 on success, -1 on error. */ int vips_scharr(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("scharr", ap, in, out); va_end(ap); return result; } /** * vips_prewitt: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Prewitt edge detector. * * uchar images are computed using a fast, low-precision path. Cast to float * for a high-precision implementation. * * See also: vips_canny(), vips_sobel(), vips_prewitt(), vips_scharr(). * * Returns: 0 on success, -1 on error. */ int vips_prewitt(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("prewitt", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/convolution/fastcor.c000066400000000000000000000143521454007373500211270ustar00rootroot00000000000000/* fastcor * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 02/05/1990 * Modified on : 15/03/1991 * 20/2/95 JC * - ANSIfied * - in1 and in2 swapped, to match order for im_spcor * - memory leaks fixed * 21/2/95 JC * - partialed * - speed-ups * 7/4/04 * - now uses im_embed() with edge stretching on the output * - sets Xoffset / Yoffset * 8/3/06 JC * - use im_embed() with edge stretching on the input, not the output * - calculate sum of squares of differences, rather than abs of * difference * 3/2/10 * - gtkdoc * - cleanups * 7/11/13 * - redone as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pconvolution.h" #include "correlation.h" typedef VipsCorrelationClass VipsFastcor; typedef VipsCorrelationClass VipsFastcorClass; G_DEFINE_TYPE(VipsFastcor, vips_fastcor, VIPS_TYPE_CORRELATION); #define CORR_INT(TYPE) \ { \ for (y = 0; y < r->height; y++) { \ unsigned int *q = (unsigned int *) \ VIPS_REGION_ADDR(out, r->left, r->top + y); \ \ for (x = 0; x < r->width; x++) \ for (b = 0; b < bands; b++) { \ TYPE *p1 = (TYPE *) ref->data; \ TYPE *p2 = (TYPE *) VIPS_REGION_ADDR(in, \ r->left + x, r->top + y); \ \ unsigned int sum; \ \ sum = 0; \ for (j = 0; j < ref->Ysize; j++) { \ for (i = b; i < sz; i += bands) { \ int t = p1[i] - p2[i]; \ \ sum += t * t; \ } \ \ p1 += sz; \ p2 += lsk; \ } \ \ *q++ = sum; \ } \ } \ } #define CORR_FLOAT(TYPE) \ { \ for (y = 0; y < r->height; y++) { \ TYPE *q = (TYPE *) \ VIPS_REGION_ADDR(out, r->left, r->top + y); \ \ for (x = 0; x < r->width; x++) \ for (b = 0; b < bands; b++) { \ TYPE *p_ref = (TYPE *) ref->data; \ TYPE *p_in = (TYPE *) VIPS_REGION_ADDR(in, \ r->left + x, r->top + y); \ \ TYPE sum; \ \ sum = 0; \ for (j = 0; j < ref->Ysize; j++) { \ for (i = b; i < sz; i += bands) { \ TYPE dif = p_ref[i] - p_in[i]; \ \ sum += dif * dif; \ } \ \ p_ref += sz; \ p_in += lsk; \ } \ \ *q++ = sum; \ } \ } \ } static void vips_fastcor_correlation(VipsCorrelation *correlation, VipsRegion *in, VipsRegion *out) { VipsRect *r = &out->valid; VipsImage *ref = correlation->ref_ready; int bands = vips_band_format_iscomplex(ref->BandFmt) ? ref->Bands * 2 : ref->Bands; int sz = ref->Xsize * bands; int lsk = VIPS_REGION_LSKIP(in) / VIPS_IMAGE_SIZEOF_ELEMENT(in->im); int x, y, i, j, b; switch (vips_image_get_format(ref)) { case VIPS_FORMAT_CHAR: CORR_INT(signed char); break; case VIPS_FORMAT_UCHAR: CORR_INT(unsigned char); break; case VIPS_FORMAT_SHORT: CORR_INT(signed short); break; case VIPS_FORMAT_USHORT: CORR_INT(unsigned short); break; case VIPS_FORMAT_INT: CORR_INT(signed int); break; case VIPS_FORMAT_UINT: CORR_INT(unsigned int); break; case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_COMPLEX: CORR_FLOAT(float); break; case VIPS_FORMAT_DOUBLE: case VIPS_FORMAT_DPCOMPLEX: CORR_FLOAT(double); break; default: g_assert_not_reached(); } } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX /* Type promotion for multiplication. Sign and value preserving. Make sure * these match the case statement in multiply_buffer() above. */ static const VipsBandFormat vips_fastcor_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UI, UI, UI, UI, UI, UI, F, X, D, DX }; static void vips_fastcor_class_init(VipsFastcorClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsCorrelationClass *cclass = VIPS_CORRELATION_CLASS(class); object_class->nickname = "fastcor"; object_class->description = _("fast correlation"); cclass->format_table = vips_fastcor_format_table; cclass->correlation = vips_fastcor_correlation; } static void vips_fastcor_init(VipsFastcor *fastcor) { } /** * vips_fastcor: (method) * @in: input image * @ref: reference image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Calculate a fast correlation surface. * * @ref is placed at every position in @in and the sum of squares of * differences calculated. * * The output * image is the same size as the input. Extra input edge pixels are made by * copying the existing edges outwards. * * If the number of bands differs, one of the images * must have one band. In this case, an n-band image is formed from the * one-band image by joining n copies of the one-band image together, and then * the two n-band images are operated upon. * * The output type is uint if both inputs are integer, float if both are float * or complex, and double if either is double or double complex. * In other words, the output type is just large enough to hold the whole * range of possible values. * * See also: vips_spcor(). * * Returns: 0 on success, -1 on error */ int vips_fastcor(VipsImage *in, VipsImage *ref, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("fastcor", ap, in, ref, out); va_end(ap); return result; } libvips-8.15.1/libvips/convolution/gaussblur.c000066400000000000000000000115221454007373500214710ustar00rootroot00000000000000/* Gaussian blur. * * 15/11/13 * - from vips_sharpen() * 19/11/14 * - change parameters to be more imagemagick-like * 21/9/20 * - allow sigma zero, meaning no blur * - sigma < 0.2 is just copy */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include typedef struct _VipsGaussblur { VipsOperation parent_instance; VipsImage *in; VipsImage *out; gdouble sigma; gdouble min_ampl; VipsPrecision precision; } VipsGaussblur; typedef VipsOperationClass VipsGaussblurClass; G_DEFINE_TYPE(VipsGaussblur, vips_gaussblur, VIPS_TYPE_OPERATION); static int vips_gaussblur_build(VipsObject *object) { VipsGaussblur *gaussblur = (VipsGaussblur *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); if (VIPS_OBJECT_CLASS(vips_gaussblur_parent_class)->build(object)) return -1; /* vips_gaussmat() will make a 1x1 pixel mask for anything smaller than * this. */ if (gaussblur->sigma < 0.2) { if (vips_copy(gaussblur->in, &t[1], NULL)) return -1; } else { if (vips_gaussmat(&t[0], gaussblur->sigma, gaussblur->min_ampl, "separable", TRUE, "precision", gaussblur->precision, NULL)) return -1; #ifdef DEBUG printf("gaussblur: blurring with:\n"); vips_matrixprint(t[0], NULL); #endif /*DEBUG*/ g_info("gaussblur mask width %d", t[0]->Xsize); if (vips_convsep(gaussblur->in, &t[1], t[0], "precision", gaussblur->precision, NULL)) return -1; } g_object_set(object, "out", vips_image_new(), NULL); if (vips_image_write(t[1], gaussblur->out)) return -1; return 0; } static void vips_gaussblur_class_init(VipsGaussblurClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "gaussblur"; object_class->description = _("gaussian blur"); object_class->build = vips_gaussblur_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsGaussblur, in)); VIPS_ARG_IMAGE(class, "out", 2, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsGaussblur, out)); VIPS_ARG_DOUBLE(class, "sigma", 3, _("Sigma"), _("Sigma of Gaussian"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsGaussblur, sigma), 0.0, 1000, 1.5); VIPS_ARG_DOUBLE(class, "min_ampl", 3, _("Minimum amplitude"), _("Minimum amplitude of Gaussian"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsGaussblur, min_ampl), 0.001, 1.0, 0.2); VIPS_ARG_ENUM(class, "precision", 4, _("Precision"), _("Convolve with this precision"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsGaussblur, precision), VIPS_TYPE_PRECISION, VIPS_PRECISION_INTEGER); } static void vips_gaussblur_init(VipsGaussblur *gaussblur) { gaussblur->sigma = 1.5; gaussblur->min_ampl = 0.2; gaussblur->precision = VIPS_PRECISION_INTEGER; } /** * vips_gaussblur: (method) * @in: input image * @out: (out): output image * @sigma: how large a mask to use * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @precision: #VipsPrecision, precision for blur, default int * * @min_ampl: minimum amplitude, default 0.2 * * This operator runs vips_gaussmat() and vips_convsep() for you on an image. * Set @min_ampl smaller to generate a larger, more accurate mask. Set @sigma * larger to make the blur more blurry. * * See also: vips_gaussmat(), vips_convsep(). * * Returns: 0 on success, -1 on error. */ int vips_gaussblur(VipsImage *in, VipsImage **out, double sigma, ...) { va_list ap; int result; va_start(ap, sigma); result = vips_call_split("gaussblur", ap, in, out, sigma); va_end(ap); return result; } libvips-8.15.1/libvips/convolution/meson.build000066400000000000000000000011621454007373500214570ustar00rootroot00000000000000convolution_sources = files( 'canny.c', 'edge.c', 'convolution.c', 'correlation.c', 'conv.c', 'conva.c', 'convf.c', 'convi.c', 'convi_hwy.cpp', 'convasep.c', 'convsep.c', 'compass.c', 'fastcor.c', 'spcor.c', 'sharpen.c', 'gaussblur.c', ) convolution_headers = files( 'pconvolution.h', 'correlation.h', ) libvips_sources += convolution_sources convolution_lib = static_library('convolution', convolution_sources, convolution_headers, dependencies: libvips_deps, gnu_symbol_visibility: 'hidden', ) libvips_components += convolution_lib libvips-8.15.1/libvips/convolution/pconvolution.h000066400000000000000000000043201454007373500222240ustar00rootroot00000000000000/* base class for all convolution operations */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_PCONVOLUTION_H #define VIPS_PCONVOLUTION_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #define VIPS_TYPE_CONVOLUTION (vips_convolution_get_type()) #define VIPS_CONVOLUTION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_CONVOLUTION, VipsConvolution)) #define VIPS_CONVOLUTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_CONVOLUTION, VipsConvolutionClass)) #define VIPS_IS_CONVOLUTION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_CONVOLUTION)) #define VIPS_IS_CONVOLUTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_CONVOLUTION)) #define VIPS_CONVOLUTION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_CONVOLUTION, VipsConvolutionClass)) typedef struct _VipsConvolution VipsConvolution; struct _VipsConvolution { VipsOperation parent_instance; VipsImage *in; VipsImage *out; VipsImage *mask; /* @mask cast ready for processing. */ VipsImage *M; }; typedef struct _VipsConvolutionClass { VipsOperationClass parent_class; } VipsConvolutionClass; GType vips_convolution_get_type(void); void vips_convi_uchar_hwy(VipsRegion *out_region, VipsRegion *ir, VipsRect *r, int ne, int nnz, int offset, const int *restrict offsets, const short *restrict mant, int exp); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_PCONVOLUTION_H*/ libvips-8.15.1/libvips/convolution/sharpen.c000066400000000000000000000264201454007373500211250ustar00rootroot00000000000000/* Cored sharpen of LABQ image. * * Returns 0 on success and -1 on error * * Copyright: 1995 A. Abbood * Author: A. Abbood * Written on: 30/01/1995 * 15/5/95 JC * - updated for latest 7.3 mods * - m3 parameter removed * - bug fixes and speed-ups * 4/7/95 JC * - x3 parameter added * - xs are now double * 6/7/95 JC * - xs are now ys * - better LUT generation * 12/3/01 JC * - uses separable convolution for umask * - tiny clean ups * 23/7/01 JC * - fix for band extract index changed * 21/4/04 * - switched to gaussian mask and radius * 20/11/04 * - uses extract_bands() to remove and reattach ab for slight speedup * - accepts LabS as well as LabQ for slight speedup * - small code tidies * - ~15% speed up in total * 29/11/06 * - convolve first to help region sharing * 3/2/10 * - gtkdoc * - cleanups * 13/11/13 * - redo as a class * - does any type, any number of bands * 24/2/16 * - swap "radius" for "sigma", allows finer control * - allow a much greater range of parameters * - move to defaults suitable for screen output * 28/8/19 * - fix sigma 0.5 case (thanks 2h4dl) */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include typedef struct _VipsSharpen { VipsOperation parent_instance; VipsImage *in; VipsImage *out; double sigma; double x1; double y2; double y3; double m1; double m2; /* The lut we build. */ int *lut; /* We used to have a radius control. */ int radius; } VipsSharpen; typedef VipsOperationClass VipsSharpenClass; G_DEFINE_TYPE(VipsSharpen, vips_sharpen, VIPS_TYPE_OPERATION); static int vips_sharpen_generate(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsRegion **in = (VipsRegion **) vseq; VipsSharpen *sharpen = (VipsSharpen *) b; VipsRect *r = &out_region->valid; int *lut = sharpen->lut; int x, y; if (vips_reorder_prepare_many(out_region->im, in, r)) return -1; VIPS_GATE_START("vips_sharpen_generate: work"); for (y = 0; y < r->height; y++) { short *p1 = (short *restrict) VIPS_REGION_ADDR(in[0], r->left, r->top + y); short *p2 = (short *restrict) VIPS_REGION_ADDR(in[1], r->left, r->top + y); short *q = (short *restrict) VIPS_REGION_ADDR(out_region, r->left, r->top + y); for (x = 0; x < r->width; x++) { int v1 = p1[x]; int v2 = p2[x]; /* Our LUT is -32768 - 32767. For the v1, v2 * difference to be in this range, both must be 0 - * 32767. */ int diff = ((v1 & 0x7fff) - (v2 & 0x7fff)); int out; g_assert(diff + 32768 >= 0); g_assert(diff + 32768 < 65536); out = v1 + lut[diff + 32768]; if (out < 0) out = 0; if (out > 32767) out = 32767; q[x] = out; } } VIPS_GATE_STOP("vips_sharpen_generate: work"); return 0; } static int vips_sharpen_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsSharpen *sharpen = (VipsSharpen *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 8); VipsImage **args = (VipsImage **) vips_object_local_array(object, 2); VipsImage *in; VipsInterpretation old_interpretation; int i; VIPS_GATE_START("vips_sharpen_build: build"); if (VIPS_OBJECT_CLASS(vips_sharpen_parent_class)->build(object)) return -1; /* We used to have a radius control. If that's set but sigma isn't, * use it to set a reasonable value for sigma. */ if (!vips_object_argument_isset(object, "sigma") && vips_object_argument_isset(object, "radius")) sharpen->sigma = 1 + sharpen->radius / 2; in = sharpen->in; old_interpretation = in->Type; if (vips_colourspace(in, &t[0], VIPS_INTERPRETATION_LABS, NULL)) return -1; in = t[0]; if (vips_check_uncoded(class->nickname, in) || vips_check_bands_atleast(class->nickname, in, 3) || vips_check_format(class->nickname, in, VIPS_FORMAT_SHORT)) return -1; /* Stop at 10% of max ... a bit mean. We always sharpen a short, * so there's no point using a float mask. */ if (vips_gaussmat(&t[1], sharpen->sigma, 0.1, "separable", TRUE, "precision", VIPS_PRECISION_INTEGER, NULL)) return -1; #ifdef DEBUG printf("sharpen: blurring with:\n"); vips_matrixprint(t[1], NULL); #endif /*DEBUG*/ /* Index with the signed difference between two 0 - 32767 images. */ if (!(sharpen->lut = VIPS_ARRAY(object, 65536, int))) return -1; for (i = 0; i < 65536; i++) { /* Rescale to +/- 100. */ double v = (i - 32767) / 327.67; double y; if (v < -sharpen->x1) /* Left of -x1. */ y = (v + sharpen->x1) * sharpen->m2 + -sharpen->x1 * sharpen->m1; else if (v < sharpen->x1) /* Centre section. */ y = v * sharpen->m1; else /* Right of x1. */ y = (v - sharpen->x1) * sharpen->m2 + sharpen->x1 * sharpen->m1; if (y < -sharpen->y3) y = -sharpen->y3; if (y > sharpen->y2) y = sharpen->y2; sharpen->lut[i] = VIPS_RINT(y * 327.67); } #ifdef DEBUG { VipsImage *mat; mat = vips_image_new_matrix(65536, 1); for (i = 0; i < 65536; i++) *VIPS_MATRIX(mat, i, 0) = sharpen->lut[i]; vips_image_write_to_file(mat, "x.v", NULL); printf("lut written to x.v\n"); g_object_unref(mat); } #endif /*DEBUG*/ /* Extract L and the rest, convolve L. */ if (vips_extract_band(in, &args[0], 0, NULL) || vips_extract_band(in, &t[3], 1, "n", in->Bands - 1, NULL) || vips_convsep(args[0], &args[1], t[1], "precision", VIPS_PRECISION_INTEGER, NULL)) return -1; t[5] = vips_image_new(); if (vips_image_pipeline_array(t[5], VIPS_DEMAND_STYLE_FATSTRIP, args)) return -1; if (vips_image_generate(t[5], vips_start_many, vips_sharpen_generate, vips_stop_many, args, sharpen)) return -1; g_object_set(object, "out", vips_image_new(), NULL); /* Reattach the rest. */ if (vips_bandjoin2(t[5], t[3], &t[6], NULL) || vips_colourspace(t[6], &t[7], old_interpretation, NULL) || vips_image_write(t[7], sharpen->out)) return -1; VIPS_GATE_STOP("vips_sharpen_build: build"); return 0; } static void vips_sharpen_class_init(VipsSharpenClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "sharpen"; object_class->description = _("unsharp masking for print"); object_class->build = vips_sharpen_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsSharpen, in)); VIPS_ARG_IMAGE(class, "out", 2, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsSharpen, out)); VIPS_ARG_DOUBLE(class, "sigma", 3, _("Sigma"), _("Sigma of Gaussian"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSharpen, sigma), 0.000001, 10.0, 0.5); VIPS_ARG_DOUBLE(class, "x1", 5, _("x1"), _("Flat/jaggy threshold"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSharpen, x1), 0, 1000000, 2.0); VIPS_ARG_DOUBLE(class, "y2", 6, _("y2"), _("Maximum brightening"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSharpen, y2), 0, 1000000, 10); VIPS_ARG_DOUBLE(class, "y3", 7, _("y3"), _("Maximum darkening"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSharpen, y3), 0, 1000000, 20); VIPS_ARG_DOUBLE(class, "m1", 8, _("m1"), _("Slope for flat areas"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSharpen, m1), 0, 1000000, 0.0); VIPS_ARG_DOUBLE(class, "m2", 9, _("m2"), _("Slope for jaggy areas"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSharpen, m2), 0, 1000000, 3.0); /* We used to have a radius control. */ VIPS_ARG_INT(class, "radius", 3, _("Radius"), _("Radius of Gaussian"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsSharpen, radius), 1, 100, 1); } static void vips_sharpen_init(VipsSharpen *sharpen) { sharpen->sigma = 0.5; sharpen->x1 = 2.0; sharpen->y2 = 10.0; sharpen->y3 = 20.0; sharpen->m1 = 0.0; sharpen->m2 = 3.0; } /** * vips_sharpen: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @sigma: sigma of gaussian * * @x1: flat/jaggy threshold * * @y2: maximum amount of brightening * * @y3: maximum amount of darkening * * @m1: slope for flat areas * * @m2: slope for jaggy areas * * Selectively sharpen the L channel of a LAB image. The input image is * transformed to #VIPS_INTERPRETATION_LABS. * * The operation performs a gaussian blur and subtracts from @in to generate a * high-frequency signal. This signal is passed through a lookup table formed * from the five parameters and added back to @in. * * The lookup table is formed like this: * * |[ * . ^ * . y2 |- - - - - ----------- * . | / * . | / slope m2 * . | .../ * . -x1 | ... | * . -------------------...----------------------> * . | ... | x1 * . |... slope m1 * . / | * . / m2 | * . / | * . / | * . / | * . / | * . ______/ _ _ _ _ _ _ | -y3 * . | * ]| * * For screen output, we suggest the following settings (the defaults): * * |[ * sigma == 0.5 * x1 == 2 * y2 == 10 (don't brighten by more than 10 L*) * y3 == 20 (can darken by up to 20 L*) * m1 == 0 (no sharpening in flat areas) * m2 == 3 (some sharpening in jaggy areas) * ]| * * If you want more or less sharpening, we suggest you just change the * m2 parameter. * * The @sigma parameter changes the width of the fringe and can be * adjusted according to the output printing resolution. As an approximate * guideline, use 0.5 for 4 pixels/mm (display resolution), * 1.0 for 12 pixels/mm and 1.5 for 16 pixels/mm (300 dpi == 12 * pixels/mm). These figures refer to the image raster, not the half-tone * resolution. * * See also: vips_conv(). * * Returns: 0 on success, -1 on error. */ int vips_sharpen(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("sharpen", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/convolution/spcor.c000066400000000000000000000216421454007373500206140ustar00rootroot00000000000000/* spcor * * Copyright: 1990, N. Dessipris; 2006, 2007 Nottingham Trent University. * * * Author: Nicos Dessipris * Written on: 02/05/1990 * Modified on : * 20/2/95 JC * - updated * - ANSIfied, a little * 21/2/95 JC * - rewritten * - partialed * - speed-ups * - new correlation coefficient (see above), from Niblack "An * Introduction to Digital Image Processing", Prentice/Hall, pp 138. * 4/9/97 JC * - now does short/ushort as well * 13/2/03 JC * - oops, could segv for short images * 14/4/04 JC * - sets Xoffset / Yoffset * 8/3/06 JC * - use im_embed() with edge stretching on the input, not the output * * 2006-10-24 tcv * - add im_spcor2 * * 2007-11-12 tcv * - make im_spcor a wrapper selecting either im__spcor or im__spcor2 * 2008-09-09 JC * - roll back the windowed version for now, it has some tile edge effects * 3/2/10 * - gtkdoc * - cleanups * 7/11/13 * - redone as a class * 8/4/15 * - avoid /0 for constant reference or zero image */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pconvolution.h" #include "correlation.h" typedef struct _VipsSpcor { VipsCorrelation parent_instance; /* Per-band mean of ref images. */ double *rmean; /* Per band sqrt(sumij (ref(i,j)-mean(ref))^2) */ double *c1; } VipsSpcor; typedef VipsCorrelationClass VipsSpcorClass; G_DEFINE_TYPE(VipsSpcor, vips_spcor, VIPS_TYPE_CORRELATION); static int vips_spcor_pre_generate(VipsCorrelation *correlation) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(correlation); VipsSpcor *spcor = (VipsSpcor *) correlation; VipsImage *ref = correlation->ref_ready; int bands = ref->Bands; VipsImage **b = (VipsImage **) vips_object_local_array(VIPS_OBJECT(spcor), bands); VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(spcor), 2); VipsImage **b2 = (VipsImage **) vips_object_local_array(VIPS_OBJECT(spcor), bands); int i; double *offset; double *scale; if (vips_check_noncomplex(class->nickname, ref)) return -1; /* Per-band mean. */ if (!(spcor->rmean = VIPS_ARRAY(spcor, bands, double)) || !(spcor->c1 = VIPS_ARRAY(spcor, bands, double))) return -1; for (i = 0; i < bands; i++) if (vips_extract_band(ref, &b[i], i, NULL) || vips_avg(b[i], &spcor->rmean[i], NULL)) return -1; /* Per band sqrt(sumij (ref(i,j)-mean(ref))^2) */ if (!(offset = VIPS_ARRAY(spcor, bands, double)) || !(scale = VIPS_ARRAY(spcor, bands, double))) return -1; for (i = 0; i < bands; i++) { offset[i] = -spcor->rmean[i]; scale[i] = 1.0; } if (vips_linear(ref, &t[0], scale, offset, bands, NULL) || vips_multiply(t[0], t[0], &t[1], NULL)) return -1; for (i = 0; i < bands; i++) if (vips_extract_band(t[1], &b2[i], i, NULL) || vips_avg(b2[i], &spcor->c1[i], NULL)) return -1; for (i = 0; i < bands; i++) { spcor->c1[i] *= ref->Xsize * ref->Ysize; spcor->c1[i] = sqrt(spcor->c1[i]); } return 0; } #define LOOP(IN) \ { \ IN *r1 = ((IN *) ref->data) + b; \ IN *p1 = ((IN *) p) + b; \ int in_lsk = lsk / sizeof(IN); \ IN *r1a; \ IN *p1a; \ \ /* Mean of area of in corresponding to ref. \ */ \ p1a = p1; \ sum1 = 0.0; \ for (j = 0; j < ref->Ysize; j++) { \ for (i = 0; i < sz; i += bands) \ sum1 += p1a[i]; \ p1a += in_lsk; \ } \ imean = sum1 / VIPS_IMAGE_N_PELS(ref); \ \ /* Calculate sum-of-squares-of-differences for this window on \ * in, and also sum-of-products-of-differences from mean. \ */ \ p1a = p1; \ r1a = r1; \ sum2 = 0.0; \ sum3 = 0.0; \ for (j = 0; j < ref->Ysize; j++) { \ for (i = 0; i < sz; i += bands) { \ /* Reference pel and input pel. \ */ \ IN ip = p1a[i]; \ IN rp = r1a[i]; \ \ /* Accumulate sum-of-squares-of-differences for \ * input image. \ */ \ double t = ip - imean; \ sum2 += t * t; \ \ /* Accumulate product-of-difference from mean. \ */ \ sum3 += (rp - spcor->rmean[b]) * t; \ } \ \ p1a += in_lsk; \ r1a += sz; \ } \ } static void vips_spcor_correlation(VipsCorrelation *correlation, VipsRegion *in, VipsRegion *out) { VipsSpcor *spcor = (VipsSpcor *) correlation; VipsRect *r = &out->valid; VipsImage *ref = correlation->ref_ready; int bands = vips_band_format_iscomplex(ref->BandFmt) ? ref->Bands * 2 : ref->Bands; int sz = ref->Xsize * bands; int lsk = VIPS_REGION_LSKIP(in); int x, y, b, j, i; double imean; double sum1; double sum2, sum3; double c2, cc; for (y = 0; y < r->height; y++) { float *q = (float *) VIPS_REGION_ADDR(out, r->left, r->top + y); for (x = 0; x < r->width; x++) { VipsPel *p = VIPS_REGION_ADDR(in, r->left + x, r->top + y); for (b = 0; b < bands; b++) { switch (vips_image_get_format(ref)) { case VIPS_FORMAT_UCHAR: LOOP(unsigned char); break; case VIPS_FORMAT_CHAR: LOOP(signed char); break; case VIPS_FORMAT_USHORT: LOOP(unsigned short); break; case VIPS_FORMAT_SHORT: LOOP(signed short); break; case VIPS_FORMAT_UINT: LOOP(unsigned int); break; case VIPS_FORMAT_INT: LOOP(signed int); break; case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_COMPLEX: LOOP(float); break; case VIPS_FORMAT_DOUBLE: case VIPS_FORMAT_DPCOMPLEX: LOOP(double); break; default: g_assert_not_reached(); /* Stop compiler warnings. */ sum2 = 0; sum3 = 0; } c2 = spcor->c1[b] * sqrt(sum2); if (c2 == 0.0) /* Something like constant ref. * We regard this as uncorrelated. */ cc = 0.0; else cc = sum3 / c2; *q++ = cc; } } } } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX static const VipsBandFormat vips_spcor_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ F, F, F, F, F, F, F, F, F, F }; static void vips_spcor_class_init(VipsSpcorClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsCorrelationClass *cclass = VIPS_CORRELATION_CLASS(class); object_class->nickname = "spcor"; object_class->description = _("spatial correlation"); cclass->format_table = vips_spcor_format_table; cclass->pre_generate = vips_spcor_pre_generate; cclass->correlation = vips_spcor_correlation; } static void vips_spcor_init(VipsSpcor *spcor) { } /** * vips_spcor: (method) * @in: input image * @ref: reference image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Calculate a correlation surface. * * @ref is placed at every position in @in and the correlation coefficient * calculated. The output * image is always float. * * The output * image is the same size as the input. Extra input edge pixels are made by * copying the existing edges outwards. * * The correlation coefficient is calculated as: * * |[ * sumij (ref(i,j)-mean(ref))(inkl(i,j)-mean(inkl)) * c(k,l) = ------------------------------------------------ * sqrt(sumij (ref(i,j)-mean(ref))^2) * * sqrt(sumij (inkl(i,j)-mean(inkl))^2) * ]| * * where inkl is the area of @in centred at position (k,l). * * from Niblack "An Introduction to Digital Image Processing", * Prentice/Hall, pp 138. * * If the number of bands differs, one of the images * must have one band. In this case, an n-band image is formed from the * one-band image by joining n copies of the one-band image together, and then * the two n-band images are operated upon. * * The output image is always float, unless either of the two inputs is * double, in which case the output is also double. * * See also: vips_fastcor(). * * Returns: 0 on success, -1 on error */ int vips_spcor(VipsImage *in, VipsImage *ref, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("spcor", ap, in, ref, out); va_end(ap); return result; } libvips-8.15.1/libvips/create/000077500000000000000000000000001454007373500162015ustar00rootroot00000000000000libvips-8.15.1/libvips/create/black.c000066400000000000000000000103271454007373500174240ustar00rootroot00000000000000/* black.c * * Copyright: 1990, J. Cupitt * * Author: J. Cupitt * Written on: 02/08/1990 * Modified on : 16/04/1991 by N. Dessipris to work on a line by line basis * 15/8/94 JC * - adapted for partials * - ANSIfied * - memory leaks fixed! * 2/3/98 JC * - IM_ANY added * 18/1/09 * - gtkdoc * 31/10/11 * - redo as a class * 3/4/18 * - always write MULTIBAND, otherwise when we join up these things it'll * look like we have an alpha */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pcreate.h" typedef struct _VipsBlack { VipsCreate parent_instance; int width; int height; int bands; } VipsBlack; typedef VipsCreateClass VipsBlackClass; G_DEFINE_TYPE(VipsBlack, vips_black, VIPS_TYPE_CREATE); static int vips_black_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { /* VipsRect *r = &out_region->valid; printf("vips_black_gen: " "left = %d, top = %d, width = %d, height = %d\n", r->left, r->top, r->width, r->height); */ vips_region_black(out_region); return 0; } static int vips_black_build(VipsObject *object) { VipsCreate *create = VIPS_CREATE(object); VipsBlack *black = (VipsBlack *) object; if (VIPS_OBJECT_CLASS(vips_black_parent_class)->build(object)) return -1; vips_image_init_fields(create->out, black->width, black->height, black->bands, VIPS_FORMAT_UCHAR, VIPS_CODING_NONE, VIPS_INTERPRETATION_MULTIBAND, 1.0, 1.0); if (vips_image_pipelinev(create->out, VIPS_DEMAND_STYLE_ANY, NULL)) return -1; if (vips_image_generate(create->out, NULL, vips_black_gen, NULL, NULL, NULL)) return -1; return 0; } static void vips_black_class_init(VipsBlackClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VIPS_DEBUG_MSG("vips_black_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "black"; vobject_class->description = _("make a black image"); vobject_class->build = vips_black_build; VIPS_ARG_INT(class, "width", 4, _("Width"), _("Image width in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsBlack, width), 1, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "height", 5, _("Height"), _("Image height in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsBlack, height), 1, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "bands", 6, _("Bands"), _("Number of bands in image"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsBlack, bands), 1, VIPS_MAX_COORD, 1); } static void vips_black_init(VipsBlack *black) { black->bands = 1; } /** * vips_black: * @out: (out): output image * @width: output width * @height: output height * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @bands: output bands * * Make a black unsigned char image of a specified size. * * See also: vips_xyz(), vips_text(), vips_gaussnoise(). * * Returns: 0 on success, -1 on error */ int vips_black(VipsImage **out, int width, int height, ...) { va_list ap; int result; va_start(ap, height); result = vips_call_split("black", ap, out, width, height); va_end(ap); return result; } libvips-8.15.1/libvips/create/buildlut.c000066400000000000000000000170731454007373500202010ustar00rootroot00000000000000/* Build a LUT from a set of x/y points. * * Written on: 26/9/06 * - from im_invertlut() * 9/10/06 * - don't output x values * 18/3/09 * - saner limit and rounding behaviour * 30/3/09 * - argh, fixed again * 22/6/09 * - more fixes for tables that don't start at zero (thanks Jack) * 23/3/10 * - gtkdoc * 2/7/13 * - convert to a class * 10/12/13 * - be more forgiving about x vales not quite integers */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pcreate.h" typedef struct _VipsBuildlut { VipsCreate parent_instance; /* Input image. */ VipsImage *in; /* .. and cast to a matrix. */ VipsImage *mat; int xlow; /* Index 0 in output is this x */ int lut_size; /* Number of output elements to generate */ double **data; /* Matrix row pointers */ double *buf; /* Output buffer */ } VipsBuildlut; typedef VipsCreateClass VipsBuildlutClass; G_DEFINE_TYPE(VipsBuildlut, vips_buildlut, VIPS_TYPE_CREATE); static void vips_buildlut_dispose(GObject *gobject) { VipsBuildlut *lut = (VipsBuildlut *) gobject; VIPS_FREE(lut->data); VIPS_FREE(lut->buf); VIPS_UNREF(lut->mat); G_OBJECT_CLASS(vips_buildlut_parent_class)->dispose(gobject); } /* Use this to sort our input rows by the first column. */ static int vips_buildlut_compare(const void *a, const void *b) { double **r1 = (double **) a; double **r2 = (double **) b; double diff = r1[0][0] - r2[0][0]; if (diff > 0) return 1; else if (diff == 0) return 0; else return -1; } static int vips_buildlut_build_init(VipsBuildlut *lut) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(lut); int y; int xlow, xhigh; /* Need xlow and xhigh to get the size of the LUT we build. */ xlow = xhigh = *VIPS_MATRIX(lut->mat, 0, 0); for (y = 0; y < lut->mat->Ysize; y++) { double v = *VIPS_MATRIX(lut->mat, 0, y); /* Allow for being a bit off. */ if (VIPS_FABS(v - VIPS_RINT(v)) > 0.001) { vips_error(class->nickname, _("x value row %d not an int"), y); return -1; } v = VIPS_RINT(v); if (v < xlow) xlow = v; if (v > xhigh) xhigh = v; } lut->xlow = xlow; lut->lut_size = xhigh - xlow + 1; if (lut->lut_size < 1) { vips_error(class->nickname, "%s", _("x range too small")); return -1; } if (!(lut->data = VIPS_ARRAY(NULL, lut->mat->Ysize, double *))) return -1; for (y = 0; y < lut->mat->Ysize; y++) lut->data[y] = VIPS_MATRIX(lut->mat, 0, y); if (!(lut->buf = VIPS_ARRAY(NULL, lut->lut_size * (lut->mat->Xsize - 1), double))) return -1; /* Sort by 1st column in input. */ qsort(lut->data, lut->mat->Ysize, sizeof(double *), vips_buildlut_compare); #ifdef DEBUG printf("Input table, sorted by 1st column\n"); for (y = 0; y < lut->mat->Ysize; y++) { int x; printf("%.4d ", y); for (x = 0; x < lut->mat->Xsize; x++) printf("%.9f ", lut->data[y][x]); printf("\n"); } #endif /*DEBUG*/ return 0; } static int vips_buildlut_build_create(VipsBuildlut *lut) { const int xlow = lut->xlow; const VipsImage *mat = lut->mat; const int xsize = mat->Xsize; const int ysize = mat->Ysize; const int bands = xsize - 1; const int xlast = lut->data[ysize - 1][0]; int b, i, x; /* Do each output channel separately. */ for (b = 0; b < bands; b++) { for (i = 0; i < ysize - 1; i++) { const int x1 = VIPS_RINT(lut->data[i][0]); const int x2 = VIPS_RINT(lut->data[i + 1][0]); const int dx = x2 - x1; const double y1 = lut->data[i][b + 1]; const double y2 = lut->data[i + 1][b + 1]; const double dy = y2 - y1; for (x = 0; x < dx; x++) lut->buf[b + (x + x1 - xlow) * bands] = y1 + x * dy / dx; } /* We are inclusive: pop the final value in by hand. */ lut->buf[b + (xlast - xlow) * bands] = lut->data[ysize - 1][b + 1]; } return 0; } static int vips_buildlut_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsCreate *create = VIPS_CREATE(object); VipsBuildlut *lut = (VipsBuildlut *) object; if (VIPS_OBJECT_CLASS(vips_buildlut_parent_class)->build(object)) return -1; if (vips_check_matrix(class->nickname, lut->in, &lut->mat)) return -1; if (vips_buildlut_build_init(lut) || vips_buildlut_build_create(lut)) return -1; vips_image_init_fields(create->out, lut->lut_size, 1, lut->mat->Xsize - 1, VIPS_FORMAT_DOUBLE, VIPS_CODING_NONE, VIPS_INTERPRETATION_HISTOGRAM, 1.0, 1.0); if (vips_image_write_line(create->out, 0, (VipsPel *) lut->buf)) return -1; return 0; } static void vips_buildlut_class_init(VipsBuildlutClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->dispose = vips_buildlut_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "buildlut"; vobject_class->description = _("build a look-up table"); vobject_class->build = vips_buildlut_build; VIPS_ARG_IMAGE(class, "in", 0, _("Input"), _("Matrix of XY coordinates"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsBuildlut, in)); } static void vips_buildlut_init(VipsBuildlut *lut) { } /** * vips_buildlut: (method) * @in: input matrix * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * This operation builds a lookup table from a set of points. Intermediate * values are generated by piecewise linear interpolation. The lookup table is * always of type #VIPS_FORMAT_DOUBLE, use vips_cast() to change it to the * type you need. * * For example, consider this 2 x 2 matrix of (x, y) coordinates: * * |[ * |-------|-------| * | 0 | 0 | * |-------|-------| * | 255 | 100 | * |-------|-------| * ]| * * We then generate a 1 x 256 element LUT like this: * * |[ * |-------|-------| * | Index | Value | * |-------|-------| * | 0 | 0 | * |-------|-------| * | 1 | 0.4 | * |-------|-------| * | etc. | 0.4 | * |-------|-------| * | 255 | 100 | * |-------|-------| * ]| * * This is then written as the output image, with the left column giving the * index in the image to place the value. * * The (x, y) points don't need to be sorted: we do that. You can have * several Ys, each becomes a band in the output LUT. You don't need to * start at zero, any integer will do, including negatives. * * See also: vips_identity(), vips_invertlut(), vips_cast(), vips_maplut(). * * Returns: 0 on success, -1 on error */ int vips_buildlut(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("buildlut", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/create/create.c000066400000000000000000000121351454007373500176120ustar00rootroot00000000000000/* base class for all create operations * * properties: * - single output image we build */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pcreate.h" #include "point.h" #include "pmask.h" /** * SECTION: create * @short_description: create images in various ways * @stability: Stable * @include: vips/vips.h * * These functions generate various test images. You can combine them with * the arithmetic and rotate functions to build more complicated images. * * The im_benchmark() operations are for testing the VIPS SMP system. */ /** * VipsTextWrap: * @VIPS_TEXT_WRAP_WORD: wrap at word boundaries * @VIPS_TEXT_WRAP_CHAR: wrap at character boundaries * @VIPS_TEXT_WRAP_WORD_CHAR: wrap at word boundaries, but fall back to character boundaries if there is not enough space for a full word * @VIPS_TEXT_WRAP_NONE: no wrapping * * Sets the word wrapping style for vips_text() when used with a maximum * width. * * See also: vips_text(). */ G_DEFINE_ABSTRACT_TYPE(VipsCreate, vips_create, VIPS_TYPE_OPERATION); static int vips_create_build(VipsObject *object) { VipsCreate *create = VIPS_CREATE(object); #ifdef DEBUG printf("vips_create_build: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ g_object_set(create, "out", vips_image_new(), NULL); if (VIPS_OBJECT_CLASS(vips_create_parent_class)->build(object)) return -1; return 0; } static void vips_create_class_init(VipsCreateClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "create"; vobject_class->description = _("create operations"); vobject_class->build = vips_create_build; VIPS_ARG_IMAGE(class, "out", 1, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsCreate, out)); } static void vips_create_init(VipsCreate *create) { } void vips_create_operation_init(void) { extern GType vips_black_get_type(void); extern GType vips_gaussmat_get_type(void); extern GType vips_logmat_get_type(void); extern GType vips_gaussnoise_get_type(void); #ifdef HAVE_PANGOCAIRO extern GType vips_text_get_type(void); #endif /*HAVE_PANGOCAIRO*/ extern GType vips_xyz_get_type(void); extern GType vips_eye_get_type(void); extern GType vips_grey_get_type(void); extern GType vips_zone_get_type(void); extern GType vips_sines_get_type(void); extern GType vips_buildlut_get_type(void); extern GType vips_invertlut_get_type(void); extern GType vips_tonelut_get_type(void); extern GType vips_identity_get_type(void); extern GType vips_mask_butterworth_get_type(void); extern GType vips_mask_butterworth_ring_get_type(void); extern GType vips_mask_butterworth_band_get_type(void); extern GType vips_mask_gaussian_get_type(void); extern GType vips_mask_gaussian_ring_get_type(void); extern GType vips_mask_gaussian_band_get_type(void); extern GType vips_mask_ideal_get_type(void); extern GType vips_mask_ideal_ring_get_type(void); extern GType vips_mask_ideal_band_get_type(void); extern GType vips_mask_fractal_get_type(void); extern GType vips_fractsurf_get_type(void); extern GType vips_worley_get_type(void); extern GType vips_perlin_get_type(void); vips_black_get_type(); vips_gaussmat_get_type(); vips_logmat_get_type(); vips_gaussnoise_get_type(); #ifdef HAVE_PANGOCAIRO vips_text_get_type(); #endif /*HAVE_PANGOCAIRO*/ vips_xyz_get_type(); vips_eye_get_type(); vips_grey_get_type(); vips_zone_get_type(); vips_sines_get_type(); vips_buildlut_get_type(); vips_invertlut_get_type(); vips_tonelut_get_type(); vips_identity_get_type(); vips_mask_ideal_get_type(); vips_mask_ideal_ring_get_type(); vips_mask_ideal_band_get_type(); vips_mask_butterworth_get_type(); vips_mask_butterworth_ring_get_type(); vips_mask_butterworth_band_get_type(); vips_mask_gaussian_get_type(); vips_mask_gaussian_ring_get_type(); vips_mask_gaussian_band_get_type(); vips_mask_fractal_get_type(); vips_fractsurf_get_type(); vips_worley_get_type(); vips_perlin_get_type(); } libvips-8.15.1/libvips/create/eye.c000066400000000000000000000065221454007373500171340ustar00rootroot00000000000000/* make a test pattern to show the eye's frequency response * * Copyright: 1990, 1991, N.Dessipris. * * Author N. Dessipris * Written on 30/05/1990 * Updated on: 27/01/1991, 07/03/1991, * 22/7/93 JC * - im_outcheck() added * 30/8/95 JC * - modernized * 1/2/11 * - gtk-doc * 13/6/13 * - redo as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pcreate.h" #include "point.h" typedef struct _VipsEye { VipsPoint parent_instance; double factor; } VipsEye; typedef VipsPointClass VipsEyeClass; G_DEFINE_TYPE(VipsEye, vips_eye, VIPS_TYPE_POINT); static float vips_eye_point(VipsPoint *point, int x, int y) { VipsEye *eye = (VipsEye *) point; /* VIPS_MAX to prevent /0. */ int max_x = VIPS_MAX(point->width - 1, 1); int max_y = VIPS_MAX(point->height - 1, 1); double c = eye->factor * VIPS_PI / (2 * max_x); double h = max_y * max_y; return y * y * cos(c * x * x) / h; } static void vips_eye_class_init(VipsEyeClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsPointClass *point_class = VIPS_POINT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "eye"; vobject_class->description = _("make an image showing the eye's spatial response"); point_class->point = vips_eye_point; VIPS_ARG_DOUBLE(class, "factor", 6, _("Factor"), _("Maximum spatial frequency"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsEye, factor), 0.0, 1.0, 0.5); } static void vips_eye_init(VipsEye *eye) { eye->factor = 0.5; } /** * vips_eye: * @out: (out): output image * @width: image size * @height: image size * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @factor: maximum spatial frequency * * @uchar: output a uchar image * * Create a test pattern with increasing spatial frequency in X and * amplitude in Y. @factor should be between 0 and 1 and determines the * maximum spatial frequency. * * Set @uchar to output a uchar image. * * See also: vips_zone(). * * Returns: 0 on success, -1 on error */ int vips_eye(VipsImage **out, int width, int height, ...) { va_list ap; int result; va_start(ap, height); result = vips_call_split("eye", ap, out, width, height); va_end(ap); return result; } libvips-8.15.1/libvips/create/fractsurf.c000066400000000000000000000075561454007373500203610ustar00rootroot00000000000000/* fractal surface * * Author: N. Dessipris * Written on: 10/09/1991 * Modified on: * 20/9/95 JC * - modernised, a little * 7/2/10 * - cleanups * - gtkdoc * 4/1/14 * - redo as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pcreate.h" typedef struct _VipsFractsurf { VipsCreate parent_instance; int width; int height; double fractal_dimension; } VipsFractsurf; typedef VipsCreateClass VipsFractsurfClass; G_DEFINE_TYPE(VipsFractsurf, vips_fractsurf, VIPS_TYPE_CREATE); static int vips_fractsurf_build(VipsObject *object) { VipsCreate *create = VIPS_CREATE(object); VipsFractsurf *fractsurf = (VipsFractsurf *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 5); if (VIPS_OBJECT_CLASS(vips_fractsurf_parent_class)->build(object)) return -1; if (vips_gaussnoise(&t[0], fractsurf->width, fractsurf->height, "mean", 0.0, "sigma", 1.0, NULL) || vips_mask_fractal(&t[1], fractsurf->width, fractsurf->height, fractsurf->fractal_dimension, NULL) || vips_freqmult(t[0], t[1], &t[2], NULL) || vips_image_write(t[2], create->out)) return -1; return 0; } static void vips_fractsurf_class_init(VipsFractsurfClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "fractsurf"; vobject_class->description = _("make a fractal surface"); vobject_class->build = vips_fractsurf_build; VIPS_ARG_INT(class, "width", 4, _("Width"), _("Image width in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsFractsurf, width), 1, VIPS_MAX_COORD, 64); VIPS_ARG_INT(class, "height", 5, _("Height"), _("Image height in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsFractsurf, height), 1, VIPS_MAX_COORD, 64); VIPS_ARG_DOUBLE(class, "fractal_dimension", 8, _("Fractal dimension"), _("Fractal dimension"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsFractsurf, fractal_dimension), 2.0, 3.0, 2.5); } static void vips_fractsurf_init(VipsFractsurf *fractsurf) { fractsurf->width = 64; fractsurf->height = 64; fractsurf->fractal_dimension = 2.5; } /** * vips_fractsurf: * @out: (out): output image * @width: output width * @height: output height * @fractal_dimension: fractal dimension * @...: %NULL-terminated list of optional named arguments * * Generate an image of size @width by @height and fractal dimension * @fractal_dimension. The dimension should be between 2 and 3. * * See also: vips_gaussnoise(), vips_mask_fractal(). * * Returns: 0 on success, -1 on error */ int vips_fractsurf(VipsImage **out, int width, int height, double fractal_dimension, ...) { va_list ap; int result; va_start(ap, fractal_dimension); result = vips_call_split("fractsurf", ap, out, width, height, fractal_dimension); va_end(ap); return result; } libvips-8.15.1/libvips/create/gaussmat.c000066400000000000000000000156451454007373500202040ustar00rootroot00000000000000/* generate gaussian images * * Written on: 30/11/1989 by Nicos * Updated on: 6/12/1991 * 7/8/96 JC * - ansified, mem leaks plugged * 20/11/98 JC * - mask too large check added * 18/3/09 * - bumped max mask size *40 * - added _sep variant * 30/3/09 * - set scale in _sep variant, why not * 21/10/10 * - gtkdoc * 20/10/13 * - redone as a class * 16/12/14 * - default to int output to match vips_conv() * - use @precision, not @integer * 10/3/16 * - allow 1x1 masks * - better size calc */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pcreate.h" typedef struct _VipsGaussmat { VipsCreate parent_instance; double sigma; double min_ampl; gboolean separable; gboolean integer; /* Deprecated */ VipsPrecision precision; } VipsGaussmat; typedef struct _VipsGaussmatClass { VipsCreateClass parent_class; } VipsGaussmatClass; G_DEFINE_TYPE(VipsGaussmat, vips_gaussmat, VIPS_TYPE_CREATE); /* Don't allow mask radius to go over this. */ #define MASK_SANITY (5000) static int vips_gaussmat_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsCreate *create = VIPS_CREATE(object); VipsGaussmat *gaussmat = (VipsGaussmat *) object; double sig2 = 2. * gaussmat->sigma * gaussmat->sigma; int max_x = VIPS_CLIP(0, 8 * gaussmat->sigma, MASK_SANITY); int x, y; int width, height; double sum; if (VIPS_OBJECT_CLASS(vips_gaussmat_parent_class)->build(object)) return -1; /* The old, deprecated @integer property has been deliberately set to * FALSE and they've not used the new @precision property ... switch * to float to help them out. */ if (vips_object_argument_isset(object, "integer") && !vips_object_argument_isset(object, "precision") && !gaussmat->integer) gaussmat->precision = VIPS_PRECISION_FLOAT; /* Find the size of the mask. Limit the mask size to 10k x 10k for * sanity. We allow x == 0, meaning a 1x1 mask. */ for (x = 0; x < max_x; x++) { double v = exp(-((double) (x * x)) / sig2); if (v < gaussmat->min_ampl) break; } if (x >= MASK_SANITY) { vips_error(class->nickname, "%s", _("mask too large")); return -1; } width = 2 * VIPS_MAX(x - 1, 0) + 1; height = gaussmat->separable ? 1 : width; vips_image_init_fields(create->out, width, height, 1, VIPS_FORMAT_DOUBLE, VIPS_CODING_NONE, VIPS_INTERPRETATION_MULTIBAND, 1.0, 1.0); if (vips_image_pipelinev(create->out, VIPS_DEMAND_STYLE_ANY, NULL) || vips_image_write_prepare(create->out)) return -1; sum = 0.0; for (y = 0; y < height; y++) { for (x = 0; x < width; x++) { int xo = x - width / 2; int yo = y - height / 2; double distance = xo * xo + yo * yo; double v = exp(-distance / sig2); if (gaussmat->precision != VIPS_PRECISION_FLOAT) v = VIPS_RINT(20 * v); *VIPS_MATRIX(create->out, x, y) = v; sum += v; } } /* Make sure we can't make sum == 0: it'd certainly cause /0 later. */ if (sum == 0) sum = 1; vips_image_set_double(create->out, "scale", sum); vips_image_set_double(create->out, "offset", 0.0); return 0; } static void vips_gaussmat_class_init(VipsGaussmatClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "gaussmat"; vobject_class->description = _("make a gaussian image"); vobject_class->build = vips_gaussmat_build; VIPS_ARG_DOUBLE(class, "sigma", 2, _("Sigma"), _("Sigma of Gaussian"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsGaussmat, sigma), 0.000001, 10000.0, 1.0); VIPS_ARG_DOUBLE(class, "min_ampl", 3, _("Minimum amplitude"), _("Minimum amplitude of Gaussian"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsGaussmat, min_ampl), 0.000001, 10000.0, 0.1); VIPS_ARG_BOOL(class, "separable", 4, _("Separable"), _("Generate separable Gaussian"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsGaussmat, separable), FALSE); VIPS_ARG_BOOL(class, "integer", 5, _("Integer"), _("Generate integer Gaussian"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsGaussmat, integer), FALSE); VIPS_ARG_ENUM(class, "precision", 6, _("Precision"), _("Generate with this precision"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsGaussmat, precision), VIPS_TYPE_PRECISION, VIPS_PRECISION_INTEGER); } static void vips_gaussmat_init(VipsGaussmat *gaussmat) { gaussmat->sigma = 1; gaussmat->min_ampl = 0.1; gaussmat->precision = VIPS_PRECISION_INTEGER; } /** * vips_gaussmat: * @out: (out): output image * @sigma: standard deviation of mask * @min_ampl: minimum amplitude * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @separable: generate a separable gaussian * * @precision: #VipsPrecision for @out * * Creates a circularly symmetric Gaussian image of radius * @sigma. The size of the mask is determined by the variable @min_ampl; * if for instance the value .1 is entered this means that the produced mask * is clipped at values less than 10 percent of the maximum amplitude. * * The program uses the following equation: * * H(r) = exp(-(r * r) / (2 * @sigma * @sigma)) * * The generated image has odd size and its maximum value is normalised to * 1.0, unless @precision is #VIPS_PRECISION_INTEGER. * * If @separable is set, only the centre horizontal is generated. This is * useful for separable convolutions. * * If @precision is #VIPS_PRECISION_INTEGER, an integer gaussian is generated. * This is useful for integer convolutions. * * "scale" is set to the sum of all the mask elements. * * See also: vips_logmat(), vips_conv(). * * Returns: 0 on success, -1 on error */ int vips_gaussmat(VipsImage **out, double sigma, double min_ampl, ...) { va_list ap; int result; va_start(ap, min_ampl); result = vips_call_split("gaussmat", ap, out, sigma, min_ampl); va_end(ap); return result; } libvips-8.15.1/libvips/create/gaussnoise.c000066400000000000000000000135071454007373500205330ustar00rootroot00000000000000/* im_gaussnoise * * Copyright 1990, N. Dessipris. * * File written on 2/12/1986 * Author : N. Dessipris * Updated : 6/6/1991 * 21/7/93 JC * - im_outcheck() call added * 1/2/95 JC * - declaration for drand48() added * - partialised, adapting im_gaussnoise() * 23/10/98 JC * - drand48() changed to random() for portability * 21/10/02 JC * - tries rand() if random() is not available * - uses RAND_MAX, d'oh * 29/1/10 * - cleanups * - gtkdoc * 29/5/13 * - redo as a class * 8/11/14 * - use g_random_double() * 24/1/17 * - use g_random_double() once per image, use vips__random() for pixel * values from (x, y) position ... makes pixels reproducible on * recalculation */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pcreate.h" typedef struct _VipsGaussnoise { VipsCreate parent_instance; int width; int height; double mean; double sigma; /* Per-image seed. Each pixel is seeded by this plus the (x, * y) coordinate. */ guint32 seed; } VipsGaussnoise; typedef VipsCreateClass VipsGaussnoiseClass; G_DEFINE_TYPE(VipsGaussnoise, vips_gaussnoise, VIPS_TYPE_CREATE); static int vips_gaussnoise_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsGaussnoise *gaussnoise = (VipsGaussnoise *) a; int sz = VIPS_REGION_N_ELEMENTS(out_region); int y; for (y = 0; y < out_region->valid.height; y++) { float *q = (float *) VIPS_REGION_ADDR(out_region, out_region->valid.left, y + out_region->valid.top); int x; for (x = 0; x < sz; x++) { guint32 seed; double sum; int i; seed = gaussnoise->seed; seed = vips__random_add(seed, out_region->valid.left + x); seed = vips__random_add(seed, out_region->valid.top + y); sum = 0.0; for (i = 0; i < 12; i++) { seed = vips__random(seed); sum += (double) seed / UINT_MAX; } q[x] = (sum - 6.0) * gaussnoise->sigma + gaussnoise->mean; } } return 0; } static int vips_gaussnoise_build(VipsObject *object) { VipsCreate *create = VIPS_CREATE(object); VipsGaussnoise *gaussnoise = (VipsGaussnoise *) object; if (VIPS_OBJECT_CLASS(vips_gaussnoise_parent_class)->build(object)) return -1; vips_image_init_fields(create->out, gaussnoise->width, gaussnoise->height, 1, VIPS_FORMAT_FLOAT, VIPS_CODING_NONE, VIPS_INTERPRETATION_MULTIBAND, 1.0, 1.0); if (vips_image_pipelinev(create->out, VIPS_DEMAND_STYLE_ANY, NULL) || vips_image_generate(create->out, NULL, vips_gaussnoise_gen, NULL, gaussnoise, NULL)) return -1; return 0; } static void vips_gaussnoise_class_init(VipsGaussnoiseClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = (VipsOperationClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "gaussnoise"; vobject_class->description = _("make a gaussnoise image"); vobject_class->build = vips_gaussnoise_build; /* We want a new set of numbers each time. */ operation_class->flags |= VIPS_OPERATION_NOCACHE; VIPS_ARG_INT(class, "width", 4, _("Width"), _("Image width in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsGaussnoise, width), 1, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "height", 5, _("Height"), _("Image height in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsGaussnoise, height), 1, VIPS_MAX_COORD, 1); VIPS_ARG_DOUBLE(class, "mean", 6, _("Mean"), _("Mean of pixels in generated image"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsGaussnoise, mean), -10000000, 1000000, 128); VIPS_ARG_DOUBLE(class, "sigma", 6, _("Sigma"), _("Standard deviation of pixels in generated image"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsGaussnoise, sigma), 0, 100000, 30); VIPS_ARG_INT(class, "seed", 7, _("Seed"), _("Random number seed"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsGaussnoise, seed), INT_MIN, INT_MAX, 0); } static void vips_gaussnoise_init(VipsGaussnoise *gaussnoise) { gaussnoise->mean = 128.0; gaussnoise->sigma = 30.0; gaussnoise->seed = UINT_MAX * g_random_double(); } /** * vips_gaussnoise: * @out: (out): output image * @width: output width * @height: output height * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @mean: mean of generated pixels * * @sigma: standard deviation of generated pixels * * Make a one band float image of gaussian noise with the specified * distribution. The noise distribution is created by averaging 12 random * numbers with the appropriate weights. * * See also: vips_black(), vips_xyz(), vips_text(). * * Returns: 0 on success, -1 on error */ int vips_gaussnoise(VipsImage **out, int width, int height, ...) { va_list ap; int result; va_start(ap, height); result = vips_call_split("gaussnoise", ap, out, width, height); va_end(ap); return result; } libvips-8.15.1/libvips/create/grey.c000066400000000000000000000055251454007373500173220ustar00rootroot00000000000000/* grey ramps * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 02/02/1990 * Modified on: * 22/7/93 JC * - im_outcheck() added * - externs removed * 8/2/95 JC * - ANSIfied * - im_fgrey() made from im_grey() * 31/8/95 JC * - now makes [0,1], rather than [0,256) * - im_grey() now defined in terms of im_fgrey() * 2/3/98 JC * - partialed * 1/2/11 * - gtk-doc * 13/6/13 * - redo as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pcreate.h" #include "point.h" typedef VipsPoint VipsGrey; typedef VipsPointClass VipsGreyClass; G_DEFINE_TYPE(VipsGrey, vips_grey, VIPS_TYPE_POINT); static float vips_grey_point(VipsPoint *point, int x, int y) { return (double) x / (point->width - 1); } static void vips_grey_class_init(VipsGreyClass *class) { VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsPointClass *point_class = VIPS_POINT_CLASS(class); vobject_class->nickname = "grey"; vobject_class->description = _("make a grey ramp image"); point_class->point = vips_grey_point; point_class->min = 0.0; point_class->max = 1.0; } static void vips_grey_init(VipsGrey *grey) { } /** * vips_grey: * @out: (out): output image * @width: image size * @height: image size * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @uchar: output a uchar image * * Create a one-band float image with the left-most column zero and the * right-most 1. Intermediate pixels are a linear ramp. * * Set @uchar to output a uchar image with the leftmost pixel 0 and the * rightmost 255. * * See also: vips_xyz(), vips_identity(). * * Returns: 0 on success, -1 on error */ int vips_grey(VipsImage **out, int width, int height, ...) { va_list ap; int result; va_start(ap, height); result = vips_call_split("grey", ap, out, width, height); va_end(ap); return result; } libvips-8.15.1/libvips/create/identity.c000066400000000000000000000113351454007373500202010ustar00rootroot00000000000000/* identity LUTs * * Copyright 1991, N. Dessipris. * * Author N. Dessipris * Written on 11/03/1991 * Updated on: * 18/6/93 JC * - im_outcheck() call added * - ANSIfied * 24/8/94 JC * - im_identity_ushort() added * 24/3/10 * - gtkdoc * 3/7/13 * - redo as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pcreate.h" typedef struct _VipsIdentity { VipsCreate parent_instance; int bands; gboolean ushort; int size; } VipsIdentity; typedef VipsCreateClass VipsIdentityClass; G_DEFINE_TYPE(VipsIdentity, vips_identity, VIPS_TYPE_CREATE); #define IDENTITY(TYPE) \ { \ TYPE *q = (TYPE *) VIPS_REGION_ADDR(out_region, le, 0); \ \ for (x = le; x < ri; x++) { \ for (i = 0; i < identity->bands; i++) \ q[i] = x; \ \ q += identity->bands; \ } \ } static int vips_identity_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsIdentity *identity = (VipsIdentity *) a; VipsRect *r = &out_region->valid; int le = r->left; int ri = VIPS_RECT_RIGHT(r); int x, i; if (identity->ushort) { IDENTITY(unsigned short); } else { IDENTITY(unsigned char); } return 0; } static int vips_identity_build(VipsObject *object) { VipsCreate *create = VIPS_CREATE(object); VipsIdentity *identity = (VipsIdentity *) object; if (VIPS_OBJECT_CLASS(vips_identity_parent_class)->build(object)) return -1; vips_image_init_fields(create->out, identity->ushort ? identity->size : 256, 1, identity->bands, identity->ushort ? VIPS_FORMAT_USHORT : VIPS_FORMAT_UCHAR, VIPS_CODING_NONE, VIPS_INTERPRETATION_HISTOGRAM, 1.0, 1.0); if (vips_image_pipelinev(create->out, VIPS_DEMAND_STYLE_ANY, NULL) || vips_image_generate(create->out, NULL, vips_identity_gen, NULL, identity, NULL)) return -1; return 0; } static void vips_identity_class_init(VipsIdentityClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "identity"; vobject_class->description = _("make a 1D image where pixel values are indexes"); vobject_class->build = vips_identity_build; VIPS_ARG_INT(class, "bands", 3, _("Bands"), _("Number of bands in LUT"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsIdentity, bands), 1, 100000, 1); VIPS_ARG_BOOL(class, "ushort", 4, _("Ushort"), _("Create a 16-bit LUT"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsIdentity, ushort), FALSE); VIPS_ARG_INT(class, "size", 5, _("Size"), _("Size of 16-bit LUT"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsIdentity, size), 1, 65536, 65536); } static void vips_identity_init(VipsIdentity *identity) { identity->bands = 1; identity->ushort = FALSE; identity->size = 65536; } /** * vips_identity: * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @bands: number of bands to create * * @ushort: %TRUE for an unsigned short identity * * @size: number of LUT elements for a ushort image * * Creates an identity lookup table, ie. one which will leave an image * unchanged when applied with vips_maplut(). Each entry in the table has a * value equal to its position. * * Use the arithmetic operations on these tables to make LUTs representing * arbitrary functions. * * Normally LUTs are 8-bit. Set @ushort to create a 16-bit table. * * Normally 16-bit tables have 65536 entries. You can set this smaller with * @size. * * See also: vips_xyz(), vips_maplut(). * * Returns: 0 on success, -1 on error */ int vips_identity(VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("identity", ap, out); va_end(ap); return result; } libvips-8.15.1/libvips/create/invertlut.c000066400000000000000000000202461454007373500204050ustar00rootroot00000000000000/* invert a lut * * Written on: 5/6/01 * Modified on : * * 7/7/03 JC * - generate image rather than doublemask (arrg) * 23/3/10 * - gtkdoc * 23/5/13 * - fix 1 high input matrices * - fix file output * 4/9/13 * - convert to a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pcreate.h" /* #define DEBUG */ /* Our state. */ typedef struct _VipsInvertlut { VipsCreate parent_instance; /* Input image. */ VipsImage *in; /* .. and cast to a matrix. */ VipsImage *mat; int size; /* Number of output elements to generate */ double **data; /* Rows of unpacked matrix */ double *buf; /* Output buffer */ } VipsInvertlut; typedef VipsCreateClass VipsInvertlutClass; G_DEFINE_TYPE(VipsInvertlut, vips_invertlut, VIPS_TYPE_CREATE); static void vips_invertlut_dispose(GObject *gobject) { VipsInvertlut *lut = (VipsInvertlut *) gobject; VIPS_FREE(lut->data); VIPS_FREE(lut->buf); VIPS_UNREF(lut->mat); G_OBJECT_CLASS(vips_invertlut_parent_class)->dispose(gobject); } /* Use this to sort our input rows by the first column. */ static int compare(const void *a, const void *b) { double **r1 = (double **) a; double **r2 = (double **) b; double diff = r1[0][0] - r2[0][0]; if (diff > 0) return 1; else if (diff == 0) return 0; else return -1; } static int vips_invertlut_build_init(VipsInvertlut *lut) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(lut); int x, y; if (!lut->mat || lut->mat->Xsize < 2 || lut->mat->Ysize < 1) { vips_error(class->nickname, "%s", _("bad input matrix")); return -1; } if (lut->size < 1 || lut->size > 65536) { vips_error(class->nickname, "%s", _("bad size")); return -1; } if (!(lut->buf = VIPS_ARRAY(NULL, lut->size * (lut->mat->Xsize - 1), double))) return -1; if (!(lut->data = VIPS_ARRAY(NULL, lut->mat->Ysize, double *))) return -1; for (y = 0; y < lut->mat->Ysize; y++) lut->data[y] = VIPS_MATRIX(lut->mat, 0, y); /* Sanity check for data range. */ for (y = 0; y < lut->mat->Ysize; y++) for (x = 0; x < lut->mat->Xsize; x++) if (lut->data[y][x] > 1.0 || lut->data[y][x] < 0.0) { vips_error(class->nickname, _("element (%d, %d) is %g, outside range [0,1]"), x, y, lut->data[y][x]); return -1; } /* Sort by 1st column in input. */ qsort(lut->data, lut->mat->Ysize, sizeof(double *), compare); #ifdef DEBUG printf("Input table, sorted by 1st column\n"); for (y = 0; y < lut->mat->Ysize; y++) { printf("%.4d ", y); for (x = 0; x < lut->mat->Xsize; x++) printf("%.9f ", lut->data[y][x]); printf("\n"); } #endif /*DEBUG*/ return 0; } static int vips_invertlut_build_create(VipsInvertlut *lut) { int bands = lut->mat->Xsize - 1; int height = lut->mat->Ysize; int b; /* Do each output channel separately. */ for (b = 0; b < bands; b++) { /* The first and last lut positions we know real values for. */ int first = lut->data[0][b + 1] * (lut->size - 1); int last = lut->data[height - 1][b + 1] * (lut->size - 1); int k; /* Extrapolate bottom and top segments to (0,0) and (1,1). */ for (k = 0; k < first; k++) { /* Have this inside the loop to avoid /0 errors if * first == 0. */ double fac = lut->data[0][0] / first; lut->buf[b + k * bands] = k * fac; } for (k = last; k < lut->size; k++) { /* Inside the loop to avoid /0 errors for last == * (size - 1). */ double fac = (1 - lut->data[height - 1][0]) / ((lut->size - 1) - last); lut->buf[b + k * bands] = lut->data[height - 1][0] + (k - last) * fac; } /* Interpolate the data sections. */ for (k = first; k < last; k++) { /* Where we're at in the [0,1] range. */ double ki = (double) k / (lut->size - 1); double irange, orange; int j; /* Search for the lowest real value < ki. There may * not be one: if not, just use 0. Tiny error. */ for (j = height - 1; j >= 0; j--) if (lut->data[j][b + 1] < ki) break; if (j == -1) j = 0; /* Interpolate k as being between row data[j] and row * data[j + 1]. */ irange = lut->data[j + 1][b + 1] - lut->data[j][b + 1]; orange = lut->data[j + 1][0] - lut->data[j][0]; lut->buf[b + k * bands] = lut->data[j][0] + orange * ((ki - lut->data[j][b + 1]) / irange); } } return 0; } static int vips_invertlut_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsCreate *create = VIPS_CREATE(object); VipsInvertlut *lut = (VipsInvertlut *) object; if (VIPS_OBJECT_CLASS(vips_invertlut_parent_class)->build(object)) return -1; if (vips_check_matrix(class->nickname, lut->in, &lut->mat)) return -1; if (vips_invertlut_build_init(lut) || vips_invertlut_build_create(lut)) return -1; vips_image_init_fields(create->out, lut->size, 1, lut->mat->Xsize - 1, VIPS_FORMAT_DOUBLE, VIPS_CODING_NONE, VIPS_INTERPRETATION_HISTOGRAM, 1.0, 1.0); if (vips_image_write_line(create->out, 0, (VipsPel *) lut->buf)) return -1; return 0; } static void vips_invertlut_class_init(VipsInvertlutClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->dispose = vips_invertlut_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "invertlut"; vobject_class->description = _("build an inverted look-up table"); vobject_class->build = vips_invertlut_build; VIPS_ARG_IMAGE(class, "in", 0, _("Input"), _("Matrix of XY coordinates"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsInvertlut, in)); VIPS_ARG_INT(class, "size", 5, _("Size"), _("LUT size to generate"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsInvertlut, size), 1, 1000000, 256); } static void vips_invertlut_init(VipsInvertlut *lut) { lut->size = 256; } /** * vips_invertlut: (method) * @in: input mask * @out: (out): output LUT * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @size: generate this much * * Given a mask of target values and real values, generate a LUT which * will map reals to targets. Handy for linearising images from * measurements of a colour chart. All values in [0,1]. Piecewise linear * interpolation, extrapolate head and tail to 0 and 1. * * Eg. input like this: * * |[ * |-------|-------|-------|-------| * | 0.1 | 0.2 | 0.3 | 0.1 | * |-------|-------|-------|-------| * | 0.2 | 0.4 | 0.4 | 0.2 | * |-------|-------|-------|-------| * | 0.7 | 0.5 | 0.6 | 0.3 | * |-------|-------|-------|-------| * ]| * * Means a patch with 10% reflectance produces an image with 20% in * channel 1, 30% in channel 2, and 10% in channel 3, and so on. * * Inputs don't need to be sorted (we do that). Generate any precision * LUT, default to 256 elements. * * It won't work too well for non-monotonic camera responses * (we should fix this). Interpolation is simple piecewise linear; we ought to * do something better really. * * See also: vips_buildlut(). * * Returns: 0 on success, -1 on error */ int vips_invertlut(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("invertlut", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/create/logmat.c000066400000000000000000000170421454007373500176340ustar00rootroot00000000000000/* laplacian of logmatian * * Written on: 30/11/1989 * Updated on: 6/12/1991 * 7/8/96 JC * - ansified, mem leaks plugged * 20/11/98 JC * - mask too large check added * 26/3/02 JC * - ahem, was broken since '96, thanks matt * 16/7/03 JC * - makes mask out to zero, not out to minimum, thanks again matt * 22/10/10 * - gtkdoc * 20/10/13 * - redone as a class from logmat.c * 16/12/14 * - default to int output to match vips_conv() * - use @precision, not @integer */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pcreate.h" typedef struct _VipsLogmat { VipsCreate parent_instance; double sigma; double min_ampl; gboolean separable; gboolean integer; /* Deprecated */ VipsPrecision precision; } VipsLogmat; typedef struct _VipsLogmatClass { VipsCreateClass parent_class; } VipsLogmatClass; G_DEFINE_TYPE(VipsLogmat, vips_logmat, VIPS_TYPE_CREATE); static int vips_logmat_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsCreate *create = VIPS_CREATE(object); VipsLogmat *logmat = (VipsLogmat *) object; double sig2 = logmat->sigma * logmat->sigma; double last; int x, y; int width, height; double sum; if (VIPS_OBJECT_CLASS(vips_logmat_parent_class)->build(object)) return -1; /* The old, deprecated @integer property has been deliberately set to * FALSE and they've not used the new @precision property ... switch * to float to help them out. */ if (vips_object_argument_isset(object, "integer") && !vips_object_argument_isset(object, "precision") && !logmat->integer) logmat->precision = VIPS_PRECISION_FLOAT; if (vips_check_precision_intfloat(class->nickname, logmat->precision)) return -1; /* Find the size of the mask. We want to eval the mask out to the * flat zero part, ie. beyond the minimum and to the point where it * comes back up towards zero. */ last = 0.0; for (x = 0; x < 5000; x++) { const double distance = x * x; double val; /* Handbook of Pattern Recognition and image processing * by Young and Fu AP 1986 pp 220-221 * temp = (1.0 / (2.0 * IM_PI * sig4)) * (2.0 - (distance / sig2)) * exp((-1.0) * distance / (2.0 * sig2)) .. use 0.5 to normalise */ val = 0.5 * (2.0 - (distance / sig2)) * exp(-distance / (2.0 * sig2)); /* Stop when change in value (ie. difference from the last * point) is positive (ie. we are going up) and absolute value * is less than the min. */ if (val - last >= 0 && VIPS_FABS(val) < logmat->min_ampl) break; last = val; } if (x == 5000) { vips_error(class->nickname, "%s", _("mask too large")); return -1; } width = x * 2 + 1; height = logmat->separable ? 1 : width; vips_image_init_fields(create->out, width, height, 1, VIPS_FORMAT_DOUBLE, VIPS_CODING_NONE, VIPS_INTERPRETATION_MULTIBAND, 1.0, 1.0); if (vips_image_pipelinev(create->out, VIPS_DEMAND_STYLE_ANY, NULL) || vips_image_write_prepare(create->out)) return -1; sum = 0.0; for (y = 0; y < height; y++) { for (x = 0; x < width; x++) { int xo = x - width / 2; int yo = y - height / 2; double distance = xo * xo + yo * yo; double v = 0.5 * (2.0 - (distance / sig2)) * exp(-distance / (2.0 * sig2)); if (logmat->precision == VIPS_PRECISION_INTEGER) v = VIPS_RINT(20 * v); *VIPS_MATRIX(create->out, x, y) = v; sum += v; } } vips_image_set_double(create->out, "scale", sum); vips_image_set_double(create->out, "offset", 0.0); return 0; } static void vips_logmat_class_init(VipsLogmatClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "logmat"; vobject_class->description = _("make a Laplacian of Gaussian image"); vobject_class->build = vips_logmat_build; VIPS_ARG_DOUBLE(class, "sigma", 2, _("Radius"), _("Radius of Gaussian"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsLogmat, sigma), 0.000001, 10000.0, 1.0); VIPS_ARG_DOUBLE(class, "min_ampl", 3, _("Width"), _("Minimum amplitude of Gaussian"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsLogmat, min_ampl), 0.000001, 10000.0, 0.1); VIPS_ARG_BOOL(class, "separable", 4, _("Separable"), _("Generate separable Gaussian"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsLogmat, separable), FALSE); VIPS_ARG_BOOL(class, "integer", 5, _("Integer"), _("Generate integer Gaussian"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsLogmat, integer), FALSE); VIPS_ARG_ENUM(class, "precision", 6, _("Precision"), _("Generate with this precision"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsLogmat, precision), VIPS_TYPE_PRECISION, VIPS_PRECISION_INTEGER); } static void vips_logmat_init(VipsLogmat *logmat) { logmat->sigma = 1; logmat->min_ampl = 0.1; logmat->precision = VIPS_PRECISION_INTEGER; } /** * vips_logmat: * @out: (out): output image * @sigma: standard deviation of mask * @min_ampl: minimum amplitude * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @separable: generate a separable mask * * @precision: #VipsPrecision for @out * * Creates a circularly symmetric Laplacian of Gaussian mask * of radius * @sigma. The size of the mask is determined by the variable @min_ampl; * if for instance the value .1 is entered this means that the produced mask * is clipped at values within 10 percent of zero, and where the change * between mask elements is less than 10%. * * The program uses the following equation: (from Handbook of Pattern * Recognition and image processing by Young and Fu, AP 1986 pages 220-221): * * H(r) = (1 / (2 * M_PI * s4)) * * (2 - (r2 / s2)) * * exp(-r2 / (2 * s2)) * * where s2 = @sigma * @sigma, s4 = s2 * s2, r2 = r * r. * * The generated mask has odd size and its maximum value is normalised to * 1.0, unless @precision is #VIPS_PRECISION_INTEGER. * * If @separable is set, only the centre horizontal is generated. This is * useful for separable convolutions. * * If @precision is #VIPS_PRECISION_INTEGER, an integer mask is generated. * This is useful for integer convolutions. * * "scale" is set to the sum of all the mask elements. * * See also: vips_gaussmat(), vips_conv(). * * Returns: 0 on success, -1 on error */ int vips_logmat(VipsImage **out, double sigma, double min_ampl, ...) { va_list ap; int result; va_start(ap, min_ampl); result = vips_call_split("logmat", ap, out, sigma, min_ampl); va_end(ap); return result; } libvips-8.15.1/libvips/create/mask.c000066400000000000000000000063541454007373500173100ustar00rootroot00000000000000/* base class for frequency filter create operations * * 02/01/14 * - from sines.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pcreate.h" #include "point.h" #include "pmask.h" G_DEFINE_ABSTRACT_TYPE(VipsMask, vips_mask, VIPS_TYPE_POINT); static float vips_mask_point(VipsPoint *point, int x, int y) { VipsMask *mask = VIPS_MASK(point); VipsMaskClass *class = VIPS_MASK_GET_CLASS(point); /* VIPS_MAX to prevent /0. */ int half_width = VIPS_MAX(point->width / 2, 1); int half_height = VIPS_MAX(point->height / 2, 1); double result; /* Move centre for an optical transform mask. */ if (!mask->optical) { x = (x + half_width) % point->width; y = (y + half_height) % point->height; } x = x - half_width; y = y - half_height; if (!mask->nodc && x == 0 && y == 0) /* DC component is always 1. */ result = 1.0; else { double dx, dy; dx = (double) x / half_width; dy = (double) y / half_height; result = class->point(mask, dx, dy); /* Invert filter sense for a highpass filter, or to swap * band-pass for band-reject. */ if (mask->reject) result = 1.0 - result; } return result; } static void vips_mask_class_init(VipsMaskClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsPointClass *point_class = VIPS_POINT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "mask"; vobject_class->description = _("base class for frequency filters"); point_class->point = vips_mask_point; point_class->min = 0.0; point_class->max = 1.0; point_class->interpretation = VIPS_INTERPRETATION_FOURIER; VIPS_ARG_BOOL(class, "optical", 5, _("Optical"), _("Rotate quadrants to optical space"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMask, optical), FALSE); VIPS_ARG_BOOL(class, "reject", 5, _("Reject"), _("Invert the sense of the filter"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMask, reject), FALSE); VIPS_ARG_BOOL(class, "nodc", 5, _("Nodc"), _("Remove DC component"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMask, nodc), FALSE); } static void vips_mask_init(VipsMask *mask) { } libvips-8.15.1/libvips/create/mask_butterworth.c000066400000000000000000000102071454007373500217510ustar00rootroot00000000000000/* creates an butterworth filter. * * 02/01/14 * - from butterworth.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pcreate.h" #include "point.h" #include "pmask.h" G_DEFINE_TYPE(VipsMaskButterworth, vips_mask_butterworth, VIPS_TYPE_MASK); static double vips_mask_butterworth_point(VipsMask *mask, double dx, double dy) { VipsMaskButterworth *butterworth = (VipsMaskButterworth *) mask; double order = butterworth->order; double fc = butterworth->frequency_cutoff; double ac = butterworth->amplitude_cutoff; double cnst = (1.0 / ac) - 1.0; double fc2 = fc * fc; double d = dx * dx + dy * dy; if (d == 0) return 0; else return 1.0 / (1.0 + cnst * pow(fc2 / d, order)); } static void vips_mask_butterworth_class_init(VipsMaskButterworthClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsMaskClass *mask_class = VIPS_MASK_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "mask_butterworth"; vobject_class->description = _("make a butterworth filter"); mask_class->point = vips_mask_butterworth_point; VIPS_ARG_DOUBLE(class, "order", 6, _("Order"), _("Filter order"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaskButterworth, order), 1.0, 1000000.0, 1.0); VIPS_ARG_DOUBLE(class, "frequency_cutoff", 7, _("Frequency cutoff"), _("Frequency cutoff"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaskButterworth, frequency_cutoff), 0.0, 1000000.0, 0.5); VIPS_ARG_DOUBLE(class, "amplitude_cutoff", 8, _("Amplitude cutoff"), _("Amplitude cutoff"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaskButterworth, amplitude_cutoff), 0.0, 1.0, 0.5); } static void vips_mask_butterworth_init(VipsMaskButterworth *butterworth) { butterworth->order = 1.0; butterworth->frequency_cutoff = 0.5; butterworth->amplitude_cutoff = 0.5; } /** * vips_mask_butterworth: * @out: (out): output image * @width: image size * @height: image size * @order: filter order * @frequency_cutoff: frequency threshold * @amplitude_cutoff: amplitude threshold * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @nodc: don't set the DC pixel * * @reject: invert the filter sense * * @optical: coordinates in optical space * * @uchar: output a uchar image * * Make an butterworth high- or low-pass filter, that is, one with a variable, * smooth transition * positioned at @frequency_cutoff, where @frequency_cutoff is in * range 0 - 1. The shape of the curve is controlled by * @order --- higher values give a sharper transition. See Gonzalez and Wintz, * Digital Image Processing, 1987. * * See also: vips_mask_ideal(). * * Returns: 0 on success, -1 on error */ int vips_mask_butterworth(VipsImage **out, int width, int height, double order, double frequency_cutoff, double amplitude_cutoff, ...) { va_list ap; int result; va_start(ap, amplitude_cutoff); result = vips_call_split("mask_butterworth", ap, out, width, height, order, frequency_cutoff, amplitude_cutoff); va_end(ap); return result; } libvips-8.15.1/libvips/create/mask_butterworth_band.c000066400000000000000000000131051454007373500227350ustar00rootroot00000000000000/* creates an butterworth_band filter. * * 02/01/14 * - from butterworth_band.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pcreate.h" #include "point.h" #include "pmask.h" typedef struct _VipsMaskButterworthBand { VipsMask parent_instance; double order; double frequency_cutoff_x; double frequency_cutoff_y; double radius; double amplitude_cutoff; } VipsMaskButterworthBand; typedef VipsMaskClass VipsMaskButterworthBandClass; G_DEFINE_TYPE(VipsMaskButterworthBand, vips_mask_butterworth_band, VIPS_TYPE_MASK); static double vips_mask_butterworth_band_point(VipsMask *mask, double dx, double dy) { VipsMaskButterworthBand *butterworth_band = (VipsMaskButterworthBand *) mask; double order = butterworth_band->order; double fcx = butterworth_band->frequency_cutoff_x; double fcy = butterworth_band->frequency_cutoff_y; double r2 = butterworth_band->radius * butterworth_band->radius; double ac = butterworth_band->amplitude_cutoff; double cnst = (1.0 / ac) - 1.0; /* Normalise the amplitude at (fcx, fcy) to 1.0. */ /* clang-format off */ double cnsta = 1.0 / (1.0 + 1.0 / (1.0 + cnst * pow(4.0 * (fcx * fcx + fcy * fcy) / r2, order))); double d1 = (dx - fcx) * (dx - fcx) + (dy - fcy) * (dy - fcy); double d2 = (dx + fcx) * (dx + fcx) + (dy + fcy) * (dy + fcy); return cnsta * (1.0 / (1.0 + cnst * pow(d1 / r2, order)) + 1.0 / (1.0 + cnst * pow(d2 / r2, order))); /* clang-format on */ } static void vips_mask_butterworth_band_class_init( VipsMaskButterworthBandClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsMaskClass *mask_class = VIPS_MASK_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "mask_butterworth_band"; vobject_class->description = _("make a butterworth_band filter"); mask_class->point = vips_mask_butterworth_band_point; VIPS_ARG_DOUBLE(class, "order", 6, _("Order"), _("Filter order"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaskButterworthBand, order), 1.0, 1000000.0, 1.0); VIPS_ARG_DOUBLE(class, "frequency_cutoff_x", 7, _("Frequency cutoff x"), _("Frequency cutoff x"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaskButterworthBand, frequency_cutoff_x), 0.0, 1000000.0, 0.5); VIPS_ARG_DOUBLE(class, "frequency_cutoff_y", 8, _("Frequency cutoff y"), _("Frequency cutoff y"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaskButterworthBand, frequency_cutoff_y), 0.0, 1000000.0, 0.5); VIPS_ARG_DOUBLE(class, "radius", 9, _("Radius"), _("Radius of circle"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaskButterworthBand, radius), 0.0, 1000000.0, 0.1); VIPS_ARG_DOUBLE(class, "amplitude_cutoff", 10, _("Amplitude cutoff"), _("Amplitude cutoff"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaskButterworthBand, amplitude_cutoff), 0.0, 1.0, 0.5); } static void vips_mask_butterworth_band_init( VipsMaskButterworthBand *butterworth_band) { butterworth_band->order = 1.0; butterworth_band->frequency_cutoff_x = 0.5; butterworth_band->frequency_cutoff_y = 0.5; butterworth_band->radius = 0.1; butterworth_band->amplitude_cutoff = 0.5; } /** * vips_mask_butterworth_band: * @out: (out): output image * @width: image size * @height: image size * @order: filter order * @frequency_cutoff_x: band position * @frequency_cutoff_y: band position * @radius: band radius * @amplitude_cutoff: amplitude threshold * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @nodc: don't set the DC pixel * * @reject: invert the filter sense * * @optical: coordinates in optical space * * @uchar: output a uchar image * * Make an butterworth band-pass or band-reject filter, that is, one with a * variable, smooth transition positioned at @frequency_cutoff_x, * @frequency_cutoff_y, of radius @radius. * The shape of the curve is controlled by * @order --- higher values give a sharper transition. See Gonzalez and Wintz, * Digital Image Processing, 1987. * * See also: vips_mask_ideal(). * * Returns: 0 on success, -1 on error */ int vips_mask_butterworth_band(VipsImage **out, int width, int height, double order, double frequency_cutoff_x, double frequency_cutoff_y, double radius, double amplitude_cutoff, ...) { va_list ap; int result; va_start(ap, amplitude_cutoff); result = vips_call_split("mask_butterworth_band", ap, out, width, height, order, frequency_cutoff_x, frequency_cutoff_y, radius, amplitude_cutoff); va_end(ap); return result; } libvips-8.15.1/libvips/create/mask_butterworth_ring.c000066400000000000000000000102701454007373500227700ustar00rootroot00000000000000/* creates an butterworth filter. * * 02/01/14 * - from butterworth.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pcreate.h" #include "point.h" #include "pmask.h" typedef struct _VipsMaskButterworthRing { VipsMaskButterworth parent_instance; double ringwidth; } VipsMaskButterworthRing; typedef VipsMaskButterworthClass VipsMaskButterworthRingClass; G_DEFINE_TYPE(VipsMaskButterworthRing, vips_mask_butterworth_ring, VIPS_TYPE_MASK_BUTTERWORTH); static double vips_mask_butterworth_ring_point(VipsMask *mask, double dx, double dy) { VipsMaskButterworth *butterworth = (VipsMaskButterworth *) mask; VipsMaskButterworthRing *butterworth_ring = (VipsMaskButterworthRing *) mask; double order = butterworth->order; double fc = butterworth->frequency_cutoff; double ac = butterworth->amplitude_cutoff; double ringwidth = butterworth_ring->ringwidth; double df = ringwidth / 2.0; double cnst = (1.0 / ac) - 1.0; double df2 = df * df; double dist = sqrt(dx * dx + dy * dy); return 1.0 / (1.0 + cnst * pow((dist - fc) * (dist - fc) / df2, order)); } static void vips_mask_butterworth_ring_class_init( VipsMaskButterworthRingClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsMaskClass *mask_class = VIPS_MASK_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "mask_butterworth_ring"; vobject_class->description = _("make a butterworth ring filter"); mask_class->point = vips_mask_butterworth_ring_point; VIPS_ARG_DOUBLE(class, "ringwidth", 20, _("Ringwidth"), _("Ringwidth"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaskButterworthRing, ringwidth), 0.0, 1000000.0, 0.1); } static void vips_mask_butterworth_ring_init( VipsMaskButterworthRing *butterworth_ring) { butterworth_ring->ringwidth = 0.1; } /** * vips_mask_butterworth_ring: * @out: (out): output image * @width: image size * @height: image size * @order: filter order * @frequency_cutoff: frequency threshold * @amplitude_cutoff: amplitude threshold * @ringwidth: ringwidth * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @nodc: don't set the DC pixel * * @reject: invert the filter sense * * @optical: coordinates in optical space * * @uchar: output a uchar image * * Make a butterworth ring-pass or ring-reject filter, that is, one with a * variable, * smooth transition * positioned at @frequency_cutoff of width @width, where @frequency_cutoff is * in the range 0 - 1. The shape of the curve is controlled by * @order --- higher values give a sharper transition. See Gonzalez and Wintz, * Digital Image Processing, 1987. * * See also: vips_mask_ideal(). * * Returns: 0 on success, -1 on error */ int vips_mask_butterworth_ring(VipsImage **out, int width, int height, double order, double frequency_cutoff, double amplitude_cutoff, double ringwidth, ...) { va_list ap; int result; va_start(ap, ringwidth); result = vips_call_split("mask_butterworth_ring", ap, out, width, height, order, frequency_cutoff, amplitude_cutoff, ringwidth); va_end(ap); return result; } libvips-8.15.1/libvips/create/mask_fractal.c000066400000000000000000000064141454007373500210010ustar00rootroot00000000000000/* creates a fractal filter. * * 02/01/14 * - from ideal.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pcreate.h" #include "point.h" #include "pmask.h" typedef struct _VipsMaskFractal { VipsMask parent_instance; double fractal_dimension; } VipsMaskFractal; typedef VipsMaskClass VipsMaskFractalClass; G_DEFINE_TYPE(VipsMaskFractal, vips_mask_fractal, VIPS_TYPE_MASK); static double vips_mask_fractal_point(VipsMask *mask, double dx, double dy) { VipsMaskFractal *fractal = (VipsMaskFractal *) mask; double fd = (fractal->fractal_dimension - 4.0) / 2.0; double d2 = dx * dx + dy * dy; return pow(d2, fd); } static void vips_mask_fractal_class_init(VipsMaskFractalClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsMaskClass *mask_class = VIPS_MASK_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "mask_fractal"; vobject_class->description = _("make fractal filter"); mask_class->point = vips_mask_fractal_point; VIPS_ARG_DOUBLE(class, "fractal_dimension", 8, _("Fractal dimension"), _("Fractal dimension"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaskFractal, fractal_dimension), 2.0, 3.0, 2.5); } static void vips_mask_fractal_init(VipsMaskFractal *fractal) { fractal->fractal_dimension = 2.5; } /** * vips_mask_fractal: * @out: (out): output image * @width: image size * @height: image size * @fractal_dimension: fractal dimension * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @nodc: don't set the DC pixel * * @reject: invert the filter sense * * @optical: coordinates in optical space * * @uchar: output a uchar image * * This operation should be used to create fractal images by filtering the * power spectrum of Gaussian white noise. See vips_gaussnoise(). * * See also: vips_mask_ideal(). * * Returns: 0 on success, -1 on error */ int vips_mask_fractal(VipsImage **out, int width, int height, double fractal_dimension, ...) { va_list ap; int result; va_start(ap, fractal_dimension); result = vips_call_split("mask_fractal", ap, out, width, height, fractal_dimension); va_end(ap); return result; } libvips-8.15.1/libvips/create/mask_gaussian.c000066400000000000000000000070401454007373500211730ustar00rootroot00000000000000/* creates a gaussian filter. * * 02/01/14 * - from gaussian.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pcreate.h" #include "point.h" #include "pmask.h" G_DEFINE_TYPE(VipsMaskGaussian, vips_mask_gaussian, VIPS_TYPE_MASK); static double vips_mask_gaussian_point(VipsMask *mask, double dx, double dy) { VipsMaskGaussian *gaussian = (VipsMaskGaussian *) mask; double fc = gaussian->frequency_cutoff; double ac = gaussian->amplitude_cutoff; double cnst = log(ac); double fc2 = fc * fc; double dist2 = (dx * dx + dy * dy) / fc2; return 1.0 - exp(cnst * dist2); } static void vips_mask_gaussian_class_init(VipsMaskGaussianClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsMaskClass *mask_class = VIPS_MASK_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "mask_gaussian"; vobject_class->description = _("make a gaussian filter"); mask_class->point = vips_mask_gaussian_point; VIPS_ARG_DOUBLE(class, "frequency_cutoff", 7, _("Frequency cutoff"), _("Frequency cutoff"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaskGaussian, frequency_cutoff), 0.0, 1000000.0, 0.5); VIPS_ARG_DOUBLE(class, "amplitude_cutoff", 8, _("Amplitude cutoff"), _("Amplitude cutoff"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaskGaussian, amplitude_cutoff), 0.0, 1.0, 0.5); } static void vips_mask_gaussian_init(VipsMaskGaussian *gaussian) { gaussian->frequency_cutoff = 0.5; gaussian->amplitude_cutoff = 0.5; } /** * vips_mask_gaussian: * @out: (out): output image * @width: image size * @height: image size * @frequency_cutoff: frequency threshold * @amplitude_cutoff: amplitude threshold * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @nodc: don't set the DC pixel * * @reject: invert the filter sense * * @optical: coordinates in optical space * * @uchar: output a uchar image * * Make a gaussian high- or low-pass filter, that is, one with a variable, * smooth transition positioned at @frequency_cutoff. * * See also: vips_mask_ideal(). * * Returns: 0 on success, -1 on error */ int vips_mask_gaussian(VipsImage **out, int width, int height, double frequency_cutoff, double amplitude_cutoff, ...) { va_list ap; int result; va_start(ap, amplitude_cutoff); result = vips_call_split("mask_gaussian", ap, out, width, height, frequency_cutoff, amplitude_cutoff); va_end(ap); return result; } libvips-8.15.1/libvips/create/mask_gaussian_band.c000066400000000000000000000115561454007373500221660ustar00rootroot00000000000000/* creates a gaussian filter. * * 02/01/14 * - from gaussian.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pcreate.h" #include "point.h" #include "pmask.h" typedef struct _VipsMaskGaussianBand { VipsMask parent_instance; double frequency_cutoff_x; double frequency_cutoff_y; double radius; double amplitude_cutoff; } VipsMaskGaussianBand; typedef VipsMaskClass VipsMaskGaussianBandClass; G_DEFINE_TYPE(VipsMaskGaussianBand, vips_mask_gaussian_band, VIPS_TYPE_MASK); static double vips_mask_gaussian_band_point(VipsMask *mask, double dx, double dy) { VipsMaskGaussianBand *gaussian_band = (VipsMaskGaussianBand *) mask; double fcx = gaussian_band->frequency_cutoff_x; double fcy = gaussian_band->frequency_cutoff_y; double r2 = gaussian_band->radius * gaussian_band->radius; double ac = gaussian_band->amplitude_cutoff; double cnst = log(ac); double d1 = (dx - fcx) * (dx - fcx) + (dy - fcy) * (dy - fcy); double d2 = (dx + fcx) * (dx + fcx) + (dy + fcy) * (dy + fcy); /* Normalise the amplitude at (fcx, fcy) to 1.0. */ double cnsta = 1.0 / (1.0 + exp(cnst * 4.0 * (fcx * fcx + fcy * fcy) / r2)); return cnsta * (exp(cnst * d1 / r2) + exp(cnst * d2 / r2)); } static void vips_mask_gaussian_band_class_init(VipsMaskGaussianBandClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsMaskClass *mask_class = VIPS_MASK_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "mask_gaussian_band"; vobject_class->description = _("make a gaussian filter"); mask_class->point = vips_mask_gaussian_band_point; VIPS_ARG_DOUBLE(class, "frequency_cutoff_x", 7, _("Frequency cutoff x"), _("Frequency cutoff x"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaskGaussianBand, frequency_cutoff_x), 0.0, 1000000.0, 0.5); VIPS_ARG_DOUBLE(class, "frequency_cutoff_y", 8, _("Frequency cutoff y"), _("Frequency cutoff y"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaskGaussianBand, frequency_cutoff_y), 0.0, 1000000.0, 0.5); VIPS_ARG_DOUBLE(class, "radius", 9, _("Radius"), _("Radius of circle"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaskGaussianBand, radius), 0.0, 1000000.0, 0.1); VIPS_ARG_DOUBLE(class, "amplitude_cutoff", 10, _("Amplitude cutoff"), _("Amplitude cutoff"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaskGaussianBand, amplitude_cutoff), 0.0, 1.0, 0.5); } static void vips_mask_gaussian_band_init(VipsMaskGaussianBand *gaussian_band) { gaussian_band->frequency_cutoff_x = 0.5; gaussian_band->frequency_cutoff_x = 0.5; gaussian_band->radius = 0.1; gaussian_band->amplitude_cutoff = 0.5; } /** * vips_mask_gaussian_band: * @out: (out): output image * @width: image size * @height: image size * @frequency_cutoff_x: band position * @frequency_cutoff_y: band position * @radius: band radius * @amplitude_cutoff: amplitude threshold * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @nodc: don't set the DC pixel * * @reject: invert the filter sense * * @optical: coordinates in optical space * * @uchar: output a uchar image * * Make a gaussian band-pass or band-reject filter, that is, one with a * variable, smooth transition positioned at @frequency_cutoff_x, * @frequency_cutoff_y, of radius @radius. * * See also: vips_mask_ideal(). * * Returns: 0 on success, -1 on error */ int vips_mask_gaussian_band(VipsImage **out, int width, int height, double frequency_cutoff_x, double frequency_cutoff_y, double radius, double amplitude_cutoff, ...) { va_list ap; int result; va_start(ap, amplitude_cutoff); result = vips_call_split("mask_gaussian_band", ap, out, width, height, frequency_cutoff_x, frequency_cutoff_y, radius, amplitude_cutoff); va_end(ap); return result; } libvips-8.15.1/libvips/create/mask_gaussian_ring.c000066400000000000000000000074301454007373500222150ustar00rootroot00000000000000/* creates a gaussian_ring filter. * * 02/01/14 * - from gaussian_ring.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pcreate.h" #include "point.h" #include "pmask.h" typedef struct _VipsMaskGaussianRing { VipsMaskGaussian parent_instance; double ringwidth; } VipsMaskGaussianRing; typedef VipsMaskGaussianClass VipsMaskGaussianRingClass; G_DEFINE_TYPE(VipsMaskGaussianRing, vips_mask_gaussian_ring, VIPS_TYPE_MASK_GAUSSIAN); static double vips_mask_gaussian_ring_point(VipsMask *mask, double dx, double dy) { VipsMaskGaussian *gaussian = (VipsMaskGaussian *) mask; VipsMaskGaussianRing *gaussian_ring = (VipsMaskGaussianRing *) mask; double fc = gaussian->frequency_cutoff; double ac = gaussian->amplitude_cutoff; double ringwidth = gaussian_ring->ringwidth; double df = ringwidth / 2.0; double df2 = df * df; double cnst = log(ac); double dist = sqrt(dx * dx + dy * dy); return exp(cnst * (dist - fc) * (dist - fc) / df2); } static void vips_mask_gaussian_ring_class_init(VipsMaskGaussianRingClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsMaskClass *mask_class = VIPS_MASK_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "mask_gaussian_ring"; vobject_class->description = _("make a gaussian ring filter"); mask_class->point = vips_mask_gaussian_ring_point; VIPS_ARG_DOUBLE(class, "ringwidth", 20, _("Ringwidth"), _("Ringwidth"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaskGaussianRing, ringwidth), 0.0, 1000000.0, 0.5); } static void vips_mask_gaussian_ring_init(VipsMaskGaussianRing *gaussian_ring) { gaussian_ring->ringwidth = 0.5; } /** * vips_mask_gaussian_ring: * @out: (out): output image * @width: image size * @height: image size * @frequency_cutoff: frequency threshold * @amplitude_cutoff: amplitude threshold * @ringwidth: ringwidth * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @nodc: don't set the DC pixel * * @reject: invert the filter sense * * @optical: coordinates in optical space * * @uchar: output a uchar image * * Make a gaussian ring-pass or ring-reject filter, that is, one with a * variable, smooth transition positioned at @frequency_cutoff of width * @ringwidth. * * See also: vips_mask_ideal(). * * Returns: 0 on success, -1 on error */ int vips_mask_gaussian_ring(VipsImage **out, int width, int height, double frequency_cutoff, double amplitude_cutoff, double ringwidth, ...) { va_list ap; int result; va_start(ap, ringwidth); result = vips_call_split("mask_gaussian_ring", ap, out, width, height, frequency_cutoff, amplitude_cutoff, ringwidth); va_end(ap); return result; } libvips-8.15.1/libvips/create/mask_ideal.c000066400000000000000000000101271454007373500204370ustar00rootroot00000000000000/* creates an ideal filter. * * 02/01/14 * - from ideal.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pcreate.h" #include "point.h" #include "pmask.h" G_DEFINE_TYPE(VipsMaskIdeal, vips_mask_ideal, VIPS_TYPE_MASK); static double vips_mask_ideal_point(VipsMask *mask, double dx, double dy) { VipsMaskIdeal *ideal = (VipsMaskIdeal *) mask; double fc = ideal->frequency_cutoff; double dist2 = dx * dx + dy * dy; double fc2 = fc * fc; return dist2 <= fc2 ? 0.0 : 1.0; } static void vips_mask_ideal_class_init(VipsMaskIdealClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsMaskClass *mask_class = VIPS_MASK_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "mask_ideal"; vobject_class->description = _("make an ideal filter"); mask_class->point = vips_mask_ideal_point; VIPS_ARG_DOUBLE(class, "frequency_cutoff", 6, _("Frequency cutoff"), _("Frequency cutoff"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaskIdeal, frequency_cutoff), 0.0, 1000000.0, 0.5); } static void vips_mask_ideal_init(VipsMaskIdeal *ideal) { ideal->frequency_cutoff = 0.5; } /** * vips_mask_ideal: * @out: (out): output image * @width: image size * @height: image size * @frequency_cutoff: threshold at which filter ends * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @nodc: don't set the DC pixel * * @reject: invert the filter sense * * @optical: coordinates in optical space * * @uchar: output a uchar image * * Make an ideal high- or low-pass filter, that is, one with a sharp cutoff * positioned at @frequency_cutoff, where @frequency_cutoff is in * the range 0 - 1. * * This operation creates a one-band float image of the specified size. * The image has * values in the range [0, 1] and is typically used for multiplying against * frequency domain images to filter them. * Masks are created with the DC component at (0, 0). The DC pixel always * has the value 1.0. * * Set @nodc to not set the DC pixel. * * Set @optical to position the DC component in the centre of the image. This * makes the mask suitable for multiplying against optical Fourier transforms. * See vips_wrap(). * * Set @reject to invert the sense of * the filter. For example, low-pass becomes low-reject. * * Set @uchar to output an 8-bit unsigned char image rather than a * float image. In this case, pixels are in the range [0 - 255]. * * See also: vips_mask_ideal(), vips_mask_ideal_ring(), * vips_mask_ideal_band(), vips_mask_butterworth(), * vips_mask_butterworth_ring(), vips_mask_butterworth_band(), * vips_mask_gaussian(), vips_mask_gaussian_ring(), * vips_mask_gaussian_band(). * * Returns: 0 on success, -1 on error */ int vips_mask_ideal(VipsImage **out, int width, int height, double frequency_cutoff, ...) { va_list ap; int result; va_start(ap, frequency_cutoff); result = vips_call_split("mask_ideal", ap, out, width, height, frequency_cutoff); va_end(ap); return result; } libvips-8.15.1/libvips/create/mask_ideal_band.c000066400000000000000000000102671454007373500214300ustar00rootroot00000000000000/* creates an ideal filter. * * 02/01/14 * - from ideal.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pcreate.h" #include "point.h" #include "pmask.h" typedef struct _VipsMaskIdealBand { VipsMask parent_instance; double frequency_cutoff_x; double frequency_cutoff_y; double radius; } VipsMaskIdealBand; typedef VipsMaskClass VipsMaskIdealBandClass; G_DEFINE_TYPE(VipsMaskIdealBand, vips_mask_ideal_band, VIPS_TYPE_MASK); static double vips_mask_ideal_band_point(VipsMask *mask, double dx, double dy) { VipsMaskIdealBand *ideal_band = (VipsMaskIdealBand *) mask; double fcx = ideal_band->frequency_cutoff_x; double fcy = ideal_band->frequency_cutoff_y; double r2 = ideal_band->radius * ideal_band->radius; double d1 = (dx - fcx) * (dx - fcx) + (dy - fcy) * (dy - fcy); double d2 = (dx + fcx) * (dx + fcx) + (dy + fcy) * (dy + fcy); return (d1 < r2 || d2 < r2) ? 1.0 : 0.0; } static void vips_mask_ideal_band_class_init(VipsMaskIdealBandClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsMaskClass *mask_class = VIPS_MASK_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "mask_ideal_band"; vobject_class->description = _("make an ideal band filter"); mask_class->point = vips_mask_ideal_band_point; VIPS_ARG_DOUBLE(class, "frequency_cutoff_x", 6, _("Frequency cutoff x"), _("Frequency cutoff x"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaskIdealBand, frequency_cutoff_x), 0.0, 1000000.0, 0.5); VIPS_ARG_DOUBLE(class, "frequency_cutoff_y", 7, _("Frequency cutoff y"), _("Frequency cutoff y"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaskIdealBand, frequency_cutoff_y), 0.0, 1000000.0, 0.5); VIPS_ARG_DOUBLE(class, "radius", 8, _("Radius"), _("Radius of circle"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaskIdealBand, radius), 0.0, 1000000.0, 0.1); } static void vips_mask_ideal_band_init(VipsMaskIdealBand *ideal_band) { ideal_band->frequency_cutoff_x = 0.5; ideal_band->frequency_cutoff_y = 0.5; ideal_band->radius = 0.1; } /** * vips_mask_ideal_band: * @out: (out): output image * @width: image size * @height: image size * @frequency_cutoff_x: position of band * @frequency_cutoff_y: position of band * @radius: size of band * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @nodc: don't set the DC pixel * * @reject: invert the filter sense * * @optical: coordinates in optical space * * @uchar: output a uchar image * * Make an ideal band-pass or band-reject filter, that is, one with a * sharp cutoff around the point @frequency_cutoff_x, @frequency_cutoff_y, * of size @radius. * * See also: vips_mask_ideal(). * * Returns: 0 on success, -1 on error */ int vips_mask_ideal_band(VipsImage **out, int width, int height, double frequency_cutoff_x, double frequency_cutoff_y, double radius, ...) { va_list ap; int result; va_start(ap, radius); result = vips_call_split("mask_ideal_band", ap, out, width, height, frequency_cutoff_x, frequency_cutoff_y, radius); va_end(ap); return result; } libvips-8.15.1/libvips/create/mask_ideal_ring.c000066400000000000000000000072041454007373500214600ustar00rootroot00000000000000/* creates an ideal ringpass filter. * * 02/01/14 * - from ideal.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pcreate.h" #include "point.h" #include "pmask.h" typedef struct _VipsMaskIdealRing { VipsMaskIdeal parent_instance; double ringwidth; } VipsMaskIdealRing; typedef VipsMaskIdealClass VipsMaskIdealRingClass; G_DEFINE_TYPE(VipsMaskIdealRing, vips_mask_ideal_ring, VIPS_TYPE_MASK_IDEAL); static double vips_mask_ideal_ring_point(VipsMask *mask, double dx, double dy) { VipsMaskIdeal *ideal = (VipsMaskIdeal *) mask; VipsMaskIdealRing *ideal_ring = (VipsMaskIdealRing *) mask; double fc = ideal->frequency_cutoff; double ringwidth = ideal_ring->ringwidth; double df = ringwidth / 2.0; double dist2 = dx * dx + dy * dy; double fc2_1 = (fc - df) * (fc - df); double fc2_2 = (fc + df) * (fc + df); return dist2 > fc2_1 && dist2 < fc2_2 ? 1.0 : 0.0; } static void vips_mask_ideal_ring_class_init(VipsMaskIdealClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsMaskClass *mask_class = VIPS_MASK_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "mask_ideal_ring"; vobject_class->description = _("make an ideal ring filter"); mask_class->point = vips_mask_ideal_ring_point; VIPS_ARG_DOUBLE(class, "ringwidth", 20, _("Ringwidth"), _("Ringwidth"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaskIdealRing, ringwidth), 0.0, 1000000.0, 0.5); } static void vips_mask_ideal_ring_init(VipsMaskIdealRing *ideal_ring) { ideal_ring->ringwidth = 0.5; } /** * vips_mask_ideal_ring: * @out: (out): output image * @width: image size * @height: image size * @frequency_cutoff: threshold at which filter ends * @ringwidth: ring width * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @nodc: don't set the DC pixel * * @reject: invert the filter sense * * @optical: coordinates in optical space * * @uchar: output a uchar image * * Make an ideal ring-pass or ring-reject filter, that is, one with a sharp * ring positioned at @frequency_cutoff of width @width, where * @frequency_cutoff and @width are expressed as the range 0 - 1. * * See also: vips_mask_ideal(). * * Returns: 0 on success, -1 on error */ int vips_mask_ideal_ring(VipsImage **out, int width, int height, double frequency_cutoff, double ringwidth, ...) { va_list ap; int result; va_start(ap, ringwidth); result = vips_call_split("mask_ideal_ring", ap, out, width, height, frequency_cutoff, ringwidth); va_end(ap); return result; } libvips-8.15.1/libvips/create/meson.build000066400000000000000000000016021454007373500203420ustar00rootroot00000000000000create_sources = files( 'perlin.c', 'worley.c', 'create.c', 'gaussmat.c', 'logmat.c', 'buildlut.c', 'invertlut.c', 'tonelut.c', 'identity.c', 'point.c', 'mask.c', 'mask_ideal.c', 'mask_ideal_ring.c', 'mask_ideal_band.c', 'mask_butterworth.c', 'mask_butterworth_ring.c', 'mask_butterworth_band.c', 'mask_gaussian.c', 'mask_gaussian_ring.c', 'mask_gaussian_band.c', 'mask_fractal.c', 'fractsurf.c', 'eye.c', 'grey.c', 'xyz.c', 'black.c', 'text.c', 'gaussnoise.c', 'sines.c', 'zone.c', ) create_headers = files( 'pcreate.h', 'point.h', 'pmask.h', ) libvips_sources += create_sources create_lib = static_library('create', create_sources, create_headers, dependencies: libvips_deps, gnu_symbol_visibility: 'hidden', ) libvips_components += create_lib libvips-8.15.1/libvips/create/pcreate.h000066400000000000000000000035241454007373500200010ustar00rootroot00000000000000/* base class for all create operations */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_PCREATE_H #define VIPS_PCREATE_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #define VIPS_TYPE_CREATE (vips_create_get_type()) #define VIPS_CREATE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_CREATE, VipsCreate)) #define VIPS_CREATE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_CREATE, VipsCreateClass)) #define VIPS_IS_CREATE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_CREATE)) #define VIPS_IS_CREATE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_CREATE)) #define VIPS_CREATE_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_CREATE, VipsCreateClass)) typedef struct _VipsCreate { VipsOperation parent_instance; /* All have an output image. */ VipsImage *out; } VipsCreate; typedef struct _VipsCreateClass { VipsOperationClass parent_class; } VipsCreateClass; GType vips_create_get_type(void); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_PCREATE_H*/ libvips-8.15.1/libvips/create/perlin.c000066400000000000000000000200541454007373500176370ustar00rootroot00000000000000/* Perlin noise generator. * * 24/7/16 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pcreate.h" typedef struct _VipsPerlin { VipsCreate parent_instance; int width; int height; int cell_size; gboolean uchar; int cells_across; int cells_down; /* Use this to seed this call of our rng. */ guint32 seed; } VipsPerlin; typedef struct _VipsPerlinClass { VipsCreateClass parent_class; } VipsPerlinClass; G_DEFINE_TYPE(VipsPerlin, vips_perlin, VIPS_TYPE_CREATE); /* cos and sin from an angle in 0 - 255. */ float vips_perlin_cos[256]; float vips_perlin_sin[256]; typedef struct _Sequence { VipsPerlin *perlin; /* The position of the last cell we were in. Use this to avoid * regenerating vectors on every pixel lookup. */ int cell_x; int cell_y; /* The 2 x 2 grid of unit vectors, with cell_x/cell_y as the top left. */ float gx[4]; float gy[4]; } Sequence; /* Generate a 3 x 3 grid of cells around a point. */ static void vips_perlin_create_cells(VipsPerlin *perlin, float gx[4], float gy[4], int cell_x, int cell_y) { int x, y; for (y = 0; y < 2; y++) for (x = 0; x < 2; x++) { int ci = x + y * 2; guint32 seed; int cx; int cy; int angle; seed = perlin->seed; cx = cell_x + x; cy = cell_y + y; /* When we calculate the seed for this cell, we wrap * around so that our output will tessellate. */ if (cy >= perlin->cells_down) cy = 0; seed = vips__random_add(seed, cy); if (cx >= perlin->cells_across) cx = 0; seed = vips__random_add(seed, cx); angle = (seed ^ (seed >> 8) ^ (seed >> 16)) & 0xff; gx[ci] = vips_perlin_cos[angle]; gy[ci] = vips_perlin_sin[angle]; } } static int vips_perlin_stop(void *vseq, void *a, void *b) { Sequence *seq = (Sequence *) vseq; VIPS_FREE(seq); return 0; } static void * vips_perlin_start(VipsImage *out, void *a, void *b) { VipsPerlin *perlin = (VipsPerlin *) b; Sequence *seq; if (!(seq = VIPS_NEW(NULL, Sequence))) return NULL; seq->perlin = perlin; seq->cell_x = -1; seq->cell_y = -1; return seq; } /* Smooth linear interpolation, 0 <= x <= 1. * * https://en.wikipedia.org/wiki/Smoothstep */ static float smootherstep(float x) { return x * x * x * (x * (x * 6 - 15) + 10); } static int vips_perlin_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsPerlin *perlin = (VipsPerlin *) a; VipsRect *r = &out_region->valid; Sequence *seq = (Sequence *) vseq; int x, y; for (y = 0; y < r->height; y++) { float *fq = (float *) VIPS_REGION_ADDR(out_region, r->left, r->top + y); VipsPel *q = (VipsPel *) fq; for (x = 0; x < r->width; x++) { int cs = perlin->cell_size; int cell_x = (r->left + x) / cs; int cell_y = (r->top + y) / cs; float dx = (x + r->left - cell_x * cs) / (float) cs; float dy = (y + r->top - cell_y * cs) / (float) cs; float sx = smootherstep(dx); float sy = smootherstep(dy); float n0, n1; float ix0, ix1; float p; if (cell_x != seq->cell_x || cell_y != seq->cell_y) { vips_perlin_create_cells(perlin, seq->gx, seq->gy, cell_x, cell_y); seq->cell_x = cell_x; seq->cell_y = cell_y; } n0 = -dx * seq->gx[0] + -dy * seq->gy[0]; n1 = (1 - dx) * seq->gx[1] + -dy * seq->gy[1]; ix0 = n0 + sx * (n1 - n0); n0 = -dx * seq->gx[2] + (1 - dy) * seq->gy[2]; n1 = (1 - dx) * seq->gx[3] + (1 - dy) * seq->gy[3]; ix1 = n0 + sx * (n1 - n0); p = ix0 + sy * (ix1 - ix0); if (perlin->uchar) q[x] = 128 * p + 128; else fq[x] = p; } } return 0; } static int vips_perlin_build(VipsObject *object) { VipsCreate *create = VIPS_CREATE(object); VipsPerlin *perlin = (VipsPerlin *) object; if (VIPS_OBJECT_CLASS(vips_perlin_parent_class)->build(object)) return -1; /* Be careful if width is a multiple of cell_size. */ perlin->cells_across = VIPS_ROUND_UP(perlin->width, perlin->cell_size) / perlin->cell_size; perlin->cells_down = VIPS_ROUND_UP(perlin->height, perlin->cell_size) / perlin->cell_size; vips_image_init_fields(create->out, perlin->width, perlin->height, 1, perlin->uchar ? VIPS_FORMAT_UCHAR : VIPS_FORMAT_FLOAT, VIPS_CODING_NONE, VIPS_INTERPRETATION_MULTIBAND, 1.0, 1.0); if (vips_image_pipelinev(create->out, VIPS_DEMAND_STYLE_ANY, NULL) || vips_image_generate(create->out, vips_perlin_start, vips_perlin_gen, vips_perlin_stop, perlin, NULL)) return -1; return 0; } static void * vips_perlin_make_tables(void *client) { int i; for (i = 0; i < 256; i++) { double angle = 2 * VIPS_PI * i / 256.0; vips_perlin_cos[i] = cos(angle); vips_perlin_sin[i] = sin(angle); } return NULL; } static void vips_perlin_class_init(VipsPerlinClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); static GOnce once = G_ONCE_INIT; VIPS_ONCE(&once, vips_perlin_make_tables, NULL); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "perlin"; vobject_class->description = _("make a perlin noise image"); vobject_class->build = vips_perlin_build; VIPS_ARG_INT(class, "width", 2, _("Width"), _("Image width in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsPerlin, width), 1, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "height", 3, _("Height"), _("Image height in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsPerlin, height), 1, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "cell_size", 3, _("Cell size"), _("Size of Perlin cells"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsPerlin, cell_size), 1, VIPS_MAX_COORD, 256); VIPS_ARG_BOOL(class, "uchar", 4, _("Uchar"), _("Output an unsigned char image"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsPerlin, uchar), FALSE); VIPS_ARG_INT(class, "seed", 5, _("Seed"), _("Random number seed"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsPerlin, seed), INT_MIN, INT_MAX, 0); } static void vips_perlin_init(VipsPerlin *perlin) { perlin->cell_size = 256; perlin->seed = UINT_MAX * g_random_double(); } /** * vips_perlin: * @out: (out): output image * @width: horizontal size * @height: vertical size * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @cell_size: %gint, size of Perlin cells * * @uchar: output a uchar image * * Create a one-band float image of Perlin noise. See: * * https://en.wikipedia.org/wiki/Perlin_noise * * Use @cell_size to set the size of the cells from which the image is * constructed. The default is 256 x 256. * * If @width and @height are multiples of @cell_size, the image will tessellate. * * Normally, output pixels are #VIPS_FORMAT_FLOAT in the range [-1, +1]. Set * @uchar to output a uchar image with pixels in [0, 255]. * * See also: vips_worley(), vips_fractsurf(), vips_gaussnoise(). * * Returns: 0 on success, -1 on error */ int vips_perlin(VipsImage **out, int width, int height, ...) { va_list ap; int result; va_start(ap, height); result = vips_call_split("perlin", ap, out, width, height); va_end(ap); return result; } libvips-8.15.1/libvips/create/pmask.h000066400000000000000000000107651454007373500174760ustar00rootroot00000000000000/* base class for mask generators */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_PMASK_H #define VIPS_PMASK_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ /* vips7compat.h defines VIPS_MASK(), an old compat macro. */ #ifdef VIPS_MASK #undef VIPS_MASK #endif /*VIPS_MASK*/ #define VIPS_TYPE_MASK (vips_mask_get_type()) #define VIPS_MASK(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_MASK, VipsMask)) #define VIPS_MASK_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_MASK, VipsMaskClass)) #define VIPS_IS_MASK(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_MASK)) #define VIPS_IS_MASK_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_MASK)) #define VIPS_MASK_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_MASK, VipsMaskClass)) typedef struct _VipsMask { VipsPoint parent_instance; gboolean optical; gboolean reject; gboolean nodc; } VipsMask; typedef struct _VipsMaskClass { VipsPointClass parent_class; double (*point)(VipsMask *, double, double); } VipsMaskClass; GType vips_mask_get_type(void); #define VIPS_TYPE_MASK_IDEAL (vips_mask_ideal_get_type()) #define VIPS_MASK_IDEAL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_MASK_IDEAL, VipsMaskIdeal)) #define VIPS_MASK_IDEAL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_MASK_IDEAL, VipsMaskIdealClass)) #define VIPS_IS_MASK_IDEAL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_MASK_IDEAL)) #define VIPS_IS_MASK_IDEAL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_MASK_IDEAL)) #define VIPS_MASK_IDEAL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_MASK_IDEAL, VipsMaskIdealClass)) typedef struct _VipsMaskIdeal { VipsMask parent_instance; double frequency_cutoff; } VipsMaskIdeal; typedef VipsMaskClass VipsMaskIdealClass; GType vips_mask_ideal_get_type(void); #define VIPS_TYPE_MASK_BUTTERWORTH (vips_mask_butterworth_get_type()) #define VIPS_MASK_BUTTERWORTH(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_MASK_BUTTERWORTH, VipsMaskButterworth)) #define VIPS_MASK_BUTTERWORTH_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_MASK_BUTTERWORTH, VipsMaskButterworthClass)) #define VIPS_IS_MASK_BUTTERWORTH(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_MASK_BUTTERWORTH)) #define VIPS_IS_MASK_BUTTERWORTH_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_MASK_BUTTERWORTH)) #define VIPS_MASK_BUTTERWORTH_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_MASK_BUTTERWORTH, VipsMaskButterworthClass)) typedef struct _VipsMaskButterworth { VipsMask parent_instance; double order; double frequency_cutoff; double amplitude_cutoff; } VipsMaskButterworth; typedef VipsMaskClass VipsMaskButterworthClass; GType vips_mask_butterworth_get_type(void); #define VIPS_TYPE_MASK_GAUSSIAN (vips_mask_gaussian_get_type()) #define VIPS_MASK_GAUSSIAN(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_MASK_GAUSSIAN, VipsMaskGaussian)) #define VIPS_MASK_GAUSSIAN_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_MASK_GAUSSIAN, VipsMaskGaussianClass)) #define VIPS_IS_MASK_GAUSSIAN(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_MASK_GAUSSIAN)) #define VIPS_IS_MASK_GAUSSIAN_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_MASK_GAUSSIAN)) #define VIPS_MASK_GAUSSIAN_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_MASK_GAUSSIAN, VipsMaskGaussianClass)) typedef struct _VipsMaskGaussian { VipsMask parent_instance; double frequency_cutoff; double amplitude_cutoff; } VipsMaskGaussian; typedef VipsMaskClass VipsMaskGaussianClass; GType vips_mask_gaussian_get_type(void); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_PMASK_H*/ libvips-8.15.1/libvips/create/point.c000066400000000000000000000074331454007373500175050ustar00rootroot00000000000000/* base class for point-wise creators * * 13/6/13 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pcreate.h" #include "point.h" G_DEFINE_ABSTRACT_TYPE(VipsPoint, vips_point, VIPS_TYPE_CREATE); static int vips_point_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsPoint *point = (VipsPoint *) a; VipsPointClass *class = VIPS_POINT_GET_CLASS(point); VipsRect *r = &out_region->valid; int x, y; for (y = 0; y < r->height; y++) { int ay = r->top + y; float *q = (float *) VIPS_REGION_ADDR(out_region, r->left, ay); for (x = 0; x < r->width; x++) q[x] = class->point(point, r->left + x, ay); } return 0; } static int vips_point_build(VipsObject *object) { VipsCreate *create = VIPS_CREATE(object); VipsPoint *point = VIPS_POINT(object); VipsPointClass *class = VIPS_POINT_GET_CLASS(point); VipsImage **t = (VipsImage **) vips_object_local_array(object, 4); VipsImage *in; if (VIPS_OBJECT_CLASS(vips_point_parent_class)->build(object)) return -1; t[0] = vips_image_new(); vips_image_init_fields(t[0], point->width, point->height, 1, VIPS_FORMAT_FLOAT, VIPS_CODING_NONE, class->interpretation, 1.0, 1.0); if (vips_image_pipelinev(t[0], VIPS_DEMAND_STYLE_ANY, NULL) || vips_image_generate(t[0], NULL, vips_point_gen, NULL, point, NULL)) return -1; in = t[0]; if (point->uchar) { float min = class->min; float max = class->max; float range = max - min; if (vips_linear1(in, &t[2], 255.0 / range, -min * 255.0 / range, "uchar", TRUE, NULL)) return -1; in = t[2]; /* We don't want FOURIER or whatever in this case. */ in->Type = VIPS_INTERPRETATION_MULTIBAND; } if (vips_image_write(in, create->out)) return -1; return 0; } static void vips_point_class_init(VipsPointClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "point"; vobject_class->description = _("make a point image"); vobject_class->build = vips_point_build; class->point = NULL; class->min = -1.0; class->max = 1.0; class->interpretation = VIPS_INTERPRETATION_MULTIBAND; VIPS_ARG_INT(class, "width", 2, _("Width"), _("Image width in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsPoint, width), 1, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "height", 3, _("Height"), _("Image height in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsPoint, height), 1, VIPS_MAX_COORD, 1); VIPS_ARG_BOOL(class, "uchar", 4, _("Uchar"), _("Output an unsigned char image"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsPoint, uchar), FALSE); } static void vips_point_init(VipsPoint *point) { } libvips-8.15.1/libvips/create/point.h000066400000000000000000000036131454007373500175060ustar00rootroot00000000000000/* base class for point generators */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_POINT_H #define VIPS_POINT_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #define VIPS_TYPE_POINT (vips_point_get_type()) #define VIPS_POINT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_POINT, VipsPoint)) #define VIPS_POINT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_POINT, VipsPointClass)) #define VIPS_IS_POINT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_POINT)) #define VIPS_IS_POINT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_POINT)) #define VIPS_POINT_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_POINT, VipsPointClass)) typedef struct _VipsPoint { VipsCreate parent_instance; int width; int height; gboolean uchar; } VipsPoint; typedef struct _VipsPointClass { VipsCreateClass parent_class; float (*point)(VipsPoint *, int, int); float min; float max; VipsInterpretation interpretation; } VipsPointClass; GType vips_point_get_type(void); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_POINT_H*/ libvips-8.15.1/libvips/create/sines.c000066400000000000000000000104241454007373500174670ustar00rootroot00000000000000/* creates a 2d sinewave * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 02/02/1990 * Modified on: * 22/7/93 JC * - externs removed * - im_outcheck() added * 1/2/11 * - gtk-doc * 13/6/13 * - redo as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pcreate.h" #include "point.h" typedef struct _VipsSines { VipsPoint parent_instance; double hfreq; double vfreq; double c; double sintheta; double costheta; } VipsSines; typedef VipsPointClass VipsSinesClass; G_DEFINE_TYPE(VipsSines, vips_sines, VIPS_TYPE_POINT); static float vips_sines_point(VipsPoint *point, int x, int y) { VipsSines *sines = (VipsSines *) point; return cos(sines->c * (x * sines->costheta - y * sines->sintheta)); } static int vips_sines_build(VipsObject *object) { VipsPoint *point = VIPS_POINT(object); VipsSines *sines = (VipsSines *) object; double theta; double factor; if (VIPS_OBJECT_CLASS(vips_sines_parent_class)->build(object)) return -1; theta = sines->hfreq == 0.0 ? VIPS_PI / 2.0 : atan(sines->vfreq / sines->hfreq); factor = sqrt(sines->hfreq * sines->hfreq + sines->vfreq * sines->vfreq); sines->costheta = cos(theta); sines->sintheta = sin(theta); sines->c = factor * VIPS_PI * 2.0 / point->width; return 0; } static void vips_sines_class_init(VipsSinesClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsPointClass *point_class = VIPS_POINT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "sines"; vobject_class->description = _("make a 2D sine wave"); vobject_class->build = vips_sines_build; point_class->point = vips_sines_point; VIPS_ARG_DOUBLE(class, "hfreq", 6, _("hfreq"), _("Horizontal spatial frequency"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSines, hfreq), 0.0, 10000.0, 0.5); VIPS_ARG_DOUBLE(class, "vfreq", 7, _("vfreq"), _("Vertical spatial frequency"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSines, vfreq), 0.0, 10000.0, 0.5); } static void vips_sines_init(VipsSines *sines) { sines->hfreq = 0.5; sines->vfreq = 0.5; } /** * vips_sines: * @out: (out): output image * @width: image size * @height: image size * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @hfreq: horizontal frequency * * @vreq: vertical frequency * * @uchar: output a uchar image * * Creates a float one band image of the a sine waveform in two * dimensions. * * The number of horizontal and vertical spatial frequencies are * determined by the variables @hfreq and @vfreq respectively. The * function is useful for creating displayable sine waves and * square waves in two dimensions. * * If horfreq and verfreq are integers the resultant image is periodical * and therefore the Fourier transform does not present spikes * * Pixels are normally in [-1, +1], set @uchar to output [0, 255]. * * See also: vips_grey(), vips_xyz(). * * Returns: 0 on success, -1 on error */ int vips_sines(VipsImage **out, int width, int height, ...) { va_list ap; int result; va_start(ap, height); result = vips_call_split("sines", ap, out, width, height); va_end(ap); return result; } libvips-8.15.1/libvips/create/text.c000066400000000000000000000442021454007373500173330ustar00rootroot00000000000000/* vips_text * * Written on: 20/5/04 * 29/7/04 * - !HAVE_PANGOFT2 was broken, thanks Kenneth * 15/11/04 * - gah, still broken, thanks Stefan * 5/4/06 * - return an error for im_text( "" ) rather than trying to make an * empty image * 2/2/10 * - gtkdoc * 3/6/13 * - rewrite as a class * 20/9/15 leiyangyou * - add @spacing * 29/5/17 * - don't set "font" if unset, it breaks caching * 16/7/17 gargsms * - implement auto fitting of text inside bounds * 12/3/18 * - better fitting of fonts with overhanging edges, thanks Adrià * 26/4/18 fangqiao * - add fontfile option * 5/12/18 * - fitting mode could set wrong dpi * - fitting mode leaked * 16/3/19 * - add `justify` * - set Xoffset/Yoffset to ink left/top * 27/6/19 * - fitting could occasionally terminate early [levmorozov] * 16/5/20 [keiviv] * - don't add fontfiles repeatedly * 12/4/21 * - switch to cairo for text rendering * - add rgba flag * 31/10/22 * - add @wrap * 14/1/23 * - make our own fontmap to prevent conflict with other API users * 15/2/23 * - allow negative line spacing */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #ifdef HAVE_PANGOCAIRO #include #include #include #ifdef HAVE_FONTCONFIG #include #include #endif #include "pcreate.h" typedef struct _VipsText { VipsCreate parent_instance; char *text; char *font; int width; int height; int spacing; VipsAlign align; gboolean justify; int dpi; char *fontfile; gboolean rgba; VipsTextWrap wrap; PangoContext *context; PangoLayout *layout; } VipsText; typedef VipsCreateClass VipsTextClass; G_DEFINE_TYPE(VipsText, vips_text, VIPS_TYPE_CREATE); /* These are expensive and do not unref cleanly on many platforms. We keep a * single value for libvips and reuse it behind a lock. * * Have one shared between libvips threads. */ static PangoFontMap *vips_text_fontmap = NULL; /* ... single-thread vips_text_fontfiles with this. */ static GMutex *vips_text_lock = NULL; /* All the fontfiles we've loaded. fontconfig lets you add a fontfile * repeatedly, and we obviously don't want that. */ static GHashTable *vips_text_fontfiles = NULL; static void vips_text_dispose(GObject *gobject) { VipsText *text = (VipsText *) gobject; VIPS_UNREF(text->layout); VIPS_UNREF(text->context); G_OBJECT_CLASS(vips_text_parent_class)->dispose(gobject); } static PangoLayout * text_layout_new(PangoContext *context, const char *text, const char *font, int width, int spacing, VipsAlign align, VipsTextWrap wrap, gboolean justify) { PangoLayout *layout; PangoFontDescription *font_description; PangoAlignment palign; PangoWrapMode pwrap; int pwidth; layout = pango_layout_new(context); pango_layout_set_markup(layout, text, -1); font_description = pango_font_description_from_string(font); pango_layout_set_font_description(layout, font_description); pango_font_description_free(font_description); pango_layout_set_justify(layout, justify); pango_layout_set_spacing(layout, spacing * PANGO_SCALE); switch (align) { case VIPS_ALIGN_LOW: palign = PANGO_ALIGN_LEFT; break; case VIPS_ALIGN_CENTRE: palign = PANGO_ALIGN_CENTER; break; case VIPS_ALIGN_HIGH: palign = PANGO_ALIGN_RIGHT; break; default: palign = PANGO_ALIGN_LEFT; break; } pango_layout_set_alignment(layout, palign); switch (wrap) { case VIPS_TEXT_WRAP_NONE: pwrap = PANGO_WRAP_WORD_CHAR; pwidth = -1; break; case VIPS_TEXT_WRAP_CHAR: pwrap = PANGO_WRAP_CHAR; pwidth = width * PANGO_SCALE; break; case VIPS_TEXT_WRAP_WORD: pwrap = PANGO_WRAP_WORD; pwidth = width * PANGO_SCALE; break; case VIPS_TEXT_WRAP_WORD_CHAR: default: pwrap = PANGO_WRAP_WORD_CHAR; pwidth = width * PANGO_SCALE; break; } pango_layout_set_wrap(layout, pwrap); if (pwidth > 0) pango_layout_set_width(layout, width * PANGO_SCALE); return layout; } static int vips_text_get_extents(VipsText *text, VipsRect *extents) { PangoRectangle ink_rect; PangoRectangle logical_rect; pango_cairo_font_map_set_resolution( PANGO_CAIRO_FONT_MAP(vips_text_fontmap), text->dpi); VIPS_UNREF(text->layout); if (!(text->layout = text_layout_new(text->context, text->text, text->font, text->width, text->spacing, text->align, text->wrap, text->justify))) return -1; pango_layout_get_pixel_extents(text->layout, &ink_rect, &logical_rect); extents->left = ink_rect.x; extents->top = ink_rect.y; extents->width = ink_rect.width; extents->height = ink_rect.height; #ifdef DEBUG printf("vips_text_get_extents: dpi = %d\n", text->dpi); printf(" ink left = %d, top = %d, width = %d, height = %d\n", ink_rect.x, ink_rect.y, ink_rect.width, ink_rect.height); printf(" logical left = %d, top = %d, width = %d, height = %d\n", logical_rect.x, logical_rect.y, logical_rect.width, logical_rect.height); #endif /*DEBUG*/ return 0; } /* Return -ve for extents too small, +ve for extents too large. */ static int vips_text_rect_difference(VipsRect *target, VipsRect *extents) { if (vips_rect_includesrect(target, extents)) return -1; else return 1; } /* Adjust text->dpi to try to fit to the bounding box. */ static int vips_text_autofit(VipsText *text) { VipsRect target; VipsRect extents; int difference; int previous_difference; int previous_dpi; int lower_dpi; int upper_dpi; /* First, repeatedly double or halve dpi until we pass the correct * value. This will give us a lower and upper bound. */ target.left = 0; target.top = 0; target.width = text->width; target.height = text->height; previous_dpi = -1; previous_difference = 0; #ifdef DEBUG printf("vips_text_autofit: " "target left = %d, top = %d, width = %d, height = %d\n", target.left, target.top, target.width, target.height); #endif /*DEBUG*/ for (;;) { if (vips_text_get_extents(text, &extents)) return -1; target.left = extents.left; target.top = extents.top; difference = vips_text_rect_difference(&target, &extents); if (previous_dpi == -1) { previous_dpi = text->dpi; previous_difference = difference; } /* Stop if we straddle the target. */ if (difference != previous_difference) break; previous_difference = difference; previous_dpi = text->dpi; text->dpi = difference < 0 ? text->dpi * 2 : text->dpi / 2; /* This can happen with fixed-size fonts. */ if (text->dpi < 2 || text->dpi > 10000) break; } if (difference < 0) { /* We've been coming down. */ lower_dpi = text->dpi; upper_dpi = previous_dpi; } else { lower_dpi = previous_dpi; upper_dpi = text->dpi; } #ifdef DEBUG printf("vips_text_autofit: lower dpi = %d, upper dpi = %d\n", lower_dpi, upper_dpi); #endif /*DEBUG*/ /* Refine lower and upper until they are almost touching. */ while (upper_dpi - lower_dpi > 1 && difference != 0) { text->dpi = (upper_dpi + lower_dpi) / 2; if (vips_text_get_extents(text, &extents)) return -1; target.left = extents.left; target.top = extents.top; difference = vips_text_rect_difference(&target, &extents); if (difference < 0) lower_dpi = text->dpi; else upper_dpi = text->dpi; } /* If we've hit the target exactly and quit the loop, diff will be 0 * and we can use upper. Otherwise we are straddling the target and we * must take lower. */ if (difference == 0) text->dpi = upper_dpi; else text->dpi = lower_dpi; g_object_set(text, "autofit_dpi", text->dpi, NULL); #ifdef DEBUG printf("vips_text_autofit: final dpi = %d\n", text->dpi); #endif /*DEBUG*/ return 0; } static void * vips_text_init_once(void *client) { vips_text_lock = vips_g_mutex_new(); vips_text_fontmap = pango_cairo_font_map_new(); vips_text_fontfiles = g_hash_table_new(g_str_hash, g_str_equal); return NULL; } static int vips_text_build(VipsObject *object) { static GOnce once = G_ONCE_INIT; VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsCreate *create = VIPS_CREATE(object); VipsText *text = (VipsText *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 3); VipsRect extents; VipsImage *image; cairo_surface_t *surface; cairo_t *cr; cairo_status_t status; if (VIPS_OBJECT_CLASS(vips_text_parent_class)->build(object)) return -1; if (!pango_parse_markup(text->text, -1, 0, NULL, NULL, NULL, NULL)) { vips_error(class->nickname, "%s", _("invalid markup in text")); return -1; } VIPS_ONCE(&once, vips_text_init_once, NULL); text->context = pango_font_map_create_context(vips_text_fontmap); /* Because we set resolution on vips_text_fontmap and that's shared * between all vips_text instances, we must lock all the way to the * end of text rendering. */ g_mutex_lock(vips_text_lock); #ifdef HAVE_FONTCONFIG if (text->fontfile && !g_hash_table_lookup(vips_text_fontfiles, text->fontfile)) { /* This can fail if you eg. add the same font from two * different files. Just warn. */ if (!FcConfigAppFontAddFile(NULL, (const FcChar8 *) text->fontfile)) g_warning(_("unable to load fontfile \"%s\""), text->fontfile); g_hash_table_insert(vips_text_fontfiles, text->fontfile, g_strdup(text->fontfile)); /* We need to inform that pango should invalidate its * fontconfig cache whenever any changes are made. */ if (PANGO_IS_FC_FONT_MAP(vips_text_fontmap)) pango_fc_font_map_cache_clear( PANGO_FC_FONT_MAP(vips_text_fontmap)); } #else /*!HAVE_FONTCONFIG*/ if (text->fontfile) g_warning("%s", _("ignoring fontfile (no fontconfig support)")); #endif /*HAVE_FONTCONFIG*/ /* If our caller set height and not dpi, we adjust dpi until * we get a fit. */ if (vips_object_argument_isset(object, "height") && !vips_object_argument_isset(object, "dpi")) { if (vips_text_autofit(text)) { g_mutex_unlock(vips_text_lock); return -1; } } /* Layout. Can fail for "", for example. */ if (vips_text_get_extents(text, &extents)) { g_mutex_unlock(vips_text_lock); return -1; } if (extents.width == 0 || extents.height == 0) { g_mutex_unlock(vips_text_lock); vips_error(class->nickname, "%s", _("no text to render")); return -1; } image = t[0] = vips_image_new_memory(); vips_image_init_fields(image, extents.width, extents.height, 4, VIPS_FORMAT_UCHAR, VIPS_CODING_NONE, VIPS_INTERPRETATION_sRGB, text->dpi / 25.4, text->dpi / 25.4); image->Xoffset = extents.left; image->Yoffset = extents.top; if (vips_image_pipelinev(image, VIPS_DEMAND_STYLE_ANY, NULL) || vips_image_write_prepare(image)) { g_mutex_unlock(vips_text_lock); return -1; } surface = cairo_image_surface_create_for_data( VIPS_IMAGE_ADDR(image, 0, 0), CAIRO_FORMAT_ARGB32, image->Xsize, image->Ysize, VIPS_IMAGE_SIZEOF_LINE(image)); status = cairo_surface_status(surface); if (status) { cairo_surface_destroy(surface); g_mutex_unlock(vips_text_lock); vips_error(class->nickname, "%s", cairo_status_to_string(status)); return -1; } cr = cairo_create(surface); cairo_surface_destroy(surface); cairo_translate(cr, -extents.left, -extents.top); pango_cairo_show_layout(cr, text->layout); cairo_destroy(cr); g_mutex_unlock(vips_text_lock); if (text->rgba) { int y; /* Cairo makes pre-multipled BRGA -- we must byteswap and * unpremultiply. */ for (y = 0; y < image->Ysize; y++) vips__premultiplied_bgra2rgba( (guint32 *) VIPS_IMAGE_ADDR(image, 0, y), image->Xsize); } else { /* We just want the alpha channel. */ if (vips_extract_band(image, &t[1], 3, NULL) || vips_copy(t[1], &t[2], "interpretation", VIPS_INTERPRETATION_MULTIBAND, NULL)) return -1; image = t[2]; } if (vips_image_write(image, create->out)) return -1; return 0; } static void vips_text_class_init(VipsTextClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->dispose = vips_text_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "text"; vobject_class->description = _("make a text image"); vobject_class->build = vips_text_build; VIPS_ARG_STRING(class, "text", 4, _("Text"), _("Text to render"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsText, text), NULL); VIPS_ARG_STRING(class, "font", 5, _("Font"), _("Font to render with"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsText, font), NULL); VIPS_ARG_INT(class, "width", 6, _("Width"), _("Maximum image width in pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsText, width), 0, VIPS_MAX_COORD, 0); VIPS_ARG_INT(class, "height", 7, _("Height"), _("Maximum image height in pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsText, height), 0, VIPS_MAX_COORD, 0); VIPS_ARG_ENUM(class, "align", 8, _("Align"), _("Align on the low, centre or high edge"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsText, align), VIPS_TYPE_ALIGN, VIPS_ALIGN_LOW); VIPS_ARG_BOOL(class, "justify", 9, _("Justify"), _("Justify lines"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsText, justify), FALSE); VIPS_ARG_INT(class, "dpi", 10, _("DPI"), _("DPI to render at"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsText, dpi), 1, 1000000, 72); VIPS_ARG_INT(class, "autofit_dpi", 11, _("Autofit DPI"), _("DPI selected by autofit"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsText, dpi), 1, 1000000, 72); VIPS_ARG_INT(class, "spacing", 12, _("Spacing"), _("Line spacing"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsText, spacing), -1000000, 1000000, 0); VIPS_ARG_STRING(class, "fontfile", 13, _("Font file"), _("Load this font file"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsText, fontfile), NULL); VIPS_ARG_BOOL(class, "rgba", 14, _("RGBA"), _("Enable RGBA output"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsText, rgba), FALSE); VIPS_ARG_ENUM(class, "wrap", 15, _("Wrap"), _("Wrap lines on word or character boundaries"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsText, wrap), VIPS_TYPE_TEXT_WRAP, VIPS_TEXT_WRAP_WORD); } static void vips_text_init(VipsText *text) { text->align = VIPS_ALIGN_LOW; text->dpi = 72; text->wrap = VIPS_TEXT_WRAP_WORD; VIPS_SETSTR(text->font, "sans 12"); } #endif /*HAVE_PANGOCAIRO*/ /** * vips_text: * @out: (out): output image * @text: utf-8 text string to render * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @font: %gchararray, font to render with * * @fontfile: %gchararray, load this font file * * @width: %gint, image should be no wider than this many pixels * * @height: %gint, image should be no higher than this many pixels * * @align: #VipsAlign, set justification alignment * * @justify: %gboolean, justify lines * * @dpi: %gint, render at this resolution * * @autofit_dpi: %gint, read out auto-fitted DPI * * @rgba: %gboolean, enable RGBA output * * @spacing: %gint, space lines by this in points * * @wrap: #VipsTextWrap, wrap lines on characters or words * * Draw the string @text to an image. @out is normally a one-band 8-bit * unsigned char image, with 0 for no text and 255 for text. Values between * are used for anti-aliasing. * * Set @rgba to enable RGBA output. This is useful for colour emoji rendering, * or support for pango markup features like `Red!`. * * @text is the text to render as a UTF-8 string. It can contain Pango markup, * for example `TheGuardian`. * * @font is the font to render with, as a fontconfig name. Examples might be * `sans 12` or perhaps `bitstream charter bold 10`. * * You can specify a font to load with @fontfile. You'll need to also set the * name of the font with @font. * * @width is the number of pixels to word-wrap at. By default, lines of text * wider than this will be broken at word boundaries. * Use @wrap to set lines to wrap on word or character boundaries, or to * disable line breaks. * * Set @justify to turn on line justification. * @align can be used to set the alignment style for multi-line * text to the low (left) edge centre, or high (right) edge. Note that the * output image can be wider than @width if there are no * word breaks, or narrower if the lines don't break exactly at @width. * * @height is the maximum number of pixels high the generated text can be. This * only takes effect when @dpi is not set, and @width is set, making a box. * In this case, vips_text() will search for a @dpi and set of line breaks * which will just fit the text into @width and @height. * * You can use @autofit_dpi to read out the DPI selected by auto fit. * * @dpi sets the resolution to render at. "sans 12" at 72 dpi draws characters * approximately 12 pixels high. * * @spacing sets the line spacing, in points. It would typically be something * like font size times 1.2. * * You can read the coordinate of the top edge of the character from `Xoffset` * / `Yoffset`. This can be helpful if you need to line up the output of * several vips_text(). * * See also: vips_bandjoin(), vips_composite(). * * Returns: 0 on success, -1 on error */ int vips_text(VipsImage **out, const char *text, ...) { va_list ap; int result; va_start(ap, text); result = vips_call_split("text", ap, out, text); va_end(ap); return result; } libvips-8.15.1/libvips/create/tonelut.c000066400000000000000000000172731454007373500200510ustar00rootroot00000000000000/* Build a tone curve. * * Author: John Cupitt * Written on: 18/7/1995 * 17/9/96 JC * - restrictions on Ps, Pm, Ph relaxed * - restrictions on S, M, H relaxed * 25/7/01 JC * - patched for im_extract_band() change * 11/7/04 * - generalised to im_tone_build_range() ... so you can use it for any * image, not just LabS * 26/3/10 * - cleanups * - gtkdoc * 20/9/13 * - redo as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pcreate.h" typedef struct _VipsTonelut { VipsCreate parent_instance; /* Parameters for tone curve formation. */ double Lb, Lw; double Ps, Pm, Ph; double S, M, H; /* Range we process. */ int in_max; int out_max; /* Derived values. */ double Ls, Lm, Lh; } VipsTonelut; typedef VipsCreateClass VipsTonelutClass; G_DEFINE_TYPE(VipsTonelut, vips_tonelut, VIPS_TYPE_CREATE); /* Calculate shadow curve. */ static double shad(VipsTonelut *lut, double x) { double x1 = (x - lut->Lb) / (lut->Ls - lut->Lb); double x2 = (x - lut->Ls) / (lut->Lm - lut->Ls); double out; if (x < lut->Lb) out = 0; else if (x < lut->Ls) out = 3.0 * x1 * x1 - 2.0 * x1 * x1 * x1; else if (x < lut->Lm) out = 1.0 - 3.0 * x2 * x2 + 2.0 * x2 * x2 * x2; else out = 0; return out; } /* Calculate mid-tone curve. */ static double mid(VipsTonelut *lut, double x) { double x1 = (x - lut->Ls) / (lut->Lm - lut->Ls); double x2 = (x - lut->Lm) / (lut->Lh - lut->Lm); double out; if (x < lut->Ls) out = 0; else if (x < lut->Lm) out = 3.0 * x1 * x1 - 2.0 * x1 * x1 * x1; else if (x < lut->Lh) out = 1.0 - 3.0 * x2 * x2 + 2.0 * x2 * x2 * x2; else out = 0; return out; } /* Calculate highlight curve. */ static double high(VipsTonelut *lut, double x) { double x1 = (x - lut->Lm) / (lut->Lh - lut->Lm); double x2 = (x - lut->Lh) / (lut->Lw - lut->Lh); double out; if (x < lut->Lm) out = 0; else if (x < lut->Lh) out = 3.0 * x1 * x1 - 2.0 * x1 * x1 * x1; else if (x < lut->Lw) out = 1.0 - 3.0 * x2 * x2 + 2.0 * x2 * x2 * x2; else out = 0; return out; } /* Generate a point on the tone curve. Everything is 0-100. */ static double tone_curve(VipsTonelut *lut, double x) { double out; out = x + lut->S * shad(lut, x) + lut->M * mid(lut, x) + lut->H * high(lut, x); return out; } static int vips_tonelut_build(VipsObject *object) { VipsCreate *create = VIPS_CREATE(object); VipsTonelut *lut = (VipsTonelut *) object; int i; unsigned short buf[65536]; if (VIPS_OBJECT_CLASS(vips_tonelut_parent_class)->build(object)) return -1; g_assert(lut->in_max > 0 && lut->in_max < 65536); g_assert(lut->out_max > 0 && lut->out_max < 65536); /* Note derived params. */ lut->Ls = lut->Lb + lut->Ps * (lut->Lw - lut->Lb); lut->Lm = lut->Lb + lut->Pm * (lut->Lw - lut->Lb); lut->Lh = lut->Lb + lut->Ph * (lut->Lw - lut->Lb); /* Generate curve. */ for (i = 0; i <= lut->in_max; i++) { int v = (lut->out_max / 100.0) * tone_curve(lut, 100.0 * i / lut->in_max); if (v < 0) v = 0; else if (v > lut->out_max) v = lut->out_max; buf[i] = v; } /* Make the output image. */ vips_image_init_fields(create->out, lut->in_max + 1, 1, 1, VIPS_FORMAT_USHORT, VIPS_CODING_NONE, VIPS_INTERPRETATION_HISTOGRAM, 1.0, 1.0); if (vips_image_write_line(create->out, 0, (VipsPel *) buf)) return -1; return 0; } static void vips_tonelut_class_init(VipsTonelutClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "tonelut"; vobject_class->description = _("build a look-up table"); vobject_class->build = vips_tonelut_build; VIPS_ARG_INT(class, "in_max", 4, _("In-max"), _("Size of LUT to build"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsTonelut, in_max), 1, 65535, 32767); VIPS_ARG_INT(class, "out_max", 5, _("Out-max"), _("Maximum value in output LUT"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsTonelut, out_max), 1, 65535, 32767); VIPS_ARG_DOUBLE(class, "Lb", 6, _("Black point"), _("Lowest value in output"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsTonelut, Lb), 0, 100, 0); VIPS_ARG_DOUBLE(class, "Lw", 7, _("White point"), _("Highest value in output"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsTonelut, Lw), 0, 100, 100); VIPS_ARG_DOUBLE(class, "Ps", 8, _("Shadow point"), _("Position of shadow"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsTonelut, Ps), 0, 1, 0.2); VIPS_ARG_DOUBLE(class, "Pm", 9, _("Mid-tone point"), _("Position of mid-tones"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsTonelut, Pm), 0, 1, 0.5); VIPS_ARG_DOUBLE(class, "Ph", 10, _("Highlight point"), _("Position of highlights"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsTonelut, Ph), 0, 1, 0.8); VIPS_ARG_DOUBLE(class, "S", 11, _("Shadow adjust"), _("Adjust shadows by this much"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsTonelut, S), -30, 30, 0); VIPS_ARG_DOUBLE(class, "M", 12, _("Mid-tone adjust"), _("Adjust mid-tones by this much"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsTonelut, M), -30, 30, 0); VIPS_ARG_DOUBLE(class, "H", 13, _("Highlight adjust"), _("Adjust highlights by this much"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsTonelut, H), -30, 30, 0); } static void vips_tonelut_init(VipsTonelut *lut) { lut->in_max = 32767; lut->out_max = 32767; lut->Lb = 0.0; lut->Lw = 100.0; lut->Ps = 0.2; lut->Pm = 0.5; lut->Ph = 0.8; lut->S = 0.0; lut->M = 0.0; lut->H = 0.0; } /** * vips_tonelut: * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @in_max: input range * * @out_max: output range * * @Lb: black-point [0-100] * * @Lw: white-point [0-100] * * @Ps: shadow point (eg. 0.2) * * @Pm: mid-tone point (eg. 0.5) * * @Ph: highlight point (eg. 0.8) * * @S: shadow adjustment (+/- 30) * * @M: mid-tone adjustment (+/- 30) * * @H: highlight adjustment (+/- 30) * * vips_tonelut() generates a tone curve for the adjustment of image * levels. It is mostly designed for adjusting the L* part of a LAB image in * a way suitable for print work, but you can use it for other things too. * * The curve is an unsigned 16-bit image with (@in_max + 1) entries, * each in the range [0, @out_max]. * * @Lb, @Lw are expressed as 0-100, as in LAB colour space. You * specify the scaling for the input and output images with the @in_max and * @out_max parameters. * * Returns: 0 on success, -1 on error */ int vips_tonelut(VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("tonelut", ap, out); va_end(ap); return result; } libvips-8.15.1/libvips/create/worley.c000066400000000000000000000176771454007373500177100ustar00rootroot00000000000000/* Worley noise generator. * * 19/7/16 * * 11/8/16 * - float output */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pcreate.h" typedef struct _VipsWorley { VipsCreate parent_instance; int width; int height; int cell_size; int cells_across; int cells_down; /* Use this to seed this call of our rng. */ guint32 seed; } VipsWorley; typedef struct _VipsWorleyClass { VipsCreateClass parent_class; } VipsWorleyClass; G_DEFINE_TYPE(VipsWorley, vips_worley, VIPS_TYPE_CREATE); #define MAX_FEATURES (10) typedef struct _Cell { /* Cell position, in number of cells. Scale by cell_size to get * absolute image cods. */ int cell_x; int cell_y; /* A cell contains 1 to n features. */ int n_features; /* Feature coordinates, in absolute image space. */ int feature_x[MAX_FEATURES]; int feature_y[MAX_FEATURES]; } Cell; typedef struct _Sequence { VipsWorley *worley; /* The position of the last cell we were in. Use this to avoid * regenerating cells on every pixel lookup. */ int cell_x; int cell_y; /* The 3 x 3 grid of cells around the current point. */ Cell cells[9]; } Sequence; /* Generate a 3 x 3 grid of cells around a point. */ static void vips_worley_create_cells(VipsWorley *worley, Cell cells[9], int cell_x, int cell_y) { int x, y; for (y = 0; y < 3; y++) for (x = 0; x < 3; x++) { Cell *cell = &cells[x + y * 3]; guint32 seed; int value; int j; /* Can go <0 and >width for edges. */ cell->cell_x = cell_x + x - 1; cell->cell_y = cell_y + y - 1; seed = worley->seed; /* When we calculate the seed for this cell, we wrap * around so that our output will tessellate. */ if (cell->cell_x >= worley->cells_across) value = 0; else if (cell->cell_x < 0) value = worley->cells_across - 1; else value = cell->cell_x; seed = vips__random_add(seed, value); if (cell->cell_y >= worley->cells_down) value = 0; else if (cell->cell_y < 0) value = worley->cells_down - 1; else value = cell->cell_y; seed = vips__random_add(seed, value); /* [1, MAX_FEATURES) */ cell->n_features = (seed % (MAX_FEATURES - 1)) + 1; for (j = 0; j < cell->n_features; j++) { seed = vips__random(seed); cell->feature_x[j] = cell->cell_x * worley->cell_size + seed % worley->cell_size; seed = vips__random(seed); cell->feature_y[j] = cell->cell_y * worley->cell_size + seed % worley->cell_size; } } } static int vips_worley_stop(void *vseq, void *a, void *b) { Sequence *seq = (Sequence *) vseq; VIPS_FREE(seq); return 0; } static void * vips_worley_start(VipsImage *out, void *a, void *b) { VipsWorley *worley = (VipsWorley *) b; Sequence *seq; if (!(seq = VIPS_NEW(NULL, Sequence))) return NULL; seq->worley = worley; seq->cell_x = -1; seq->cell_y = -1; return seq; } static float vips_hypot(int x, int y) { /* Faster than hypot() for int args. */ return sqrt(x * x + y * y); } static float vips_worley_distance(VipsWorley *worley, Cell cells[9], int x, int y) { float distance; int i, j; distance = worley->cell_size * 1.5; for (i = 0; i < 9; i++) { Cell *cell = &cells[i]; for (j = 0; j < cell->n_features; j++) { float d = vips_hypot( x - cell->feature_x[j], y - cell->feature_y[j]); distance = VIPS_MIN(distance, d); } } return distance; } static int vips_worley_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsWorley *worley = (VipsWorley *) a; VipsRect *r = &out_region->valid; Sequence *seq = (Sequence *) vseq; int x, y; for (y = 0; y < r->height; y++) { float *q = (float *) VIPS_REGION_ADDR(out_region, r->left, r->top + y); for (x = 0; x < r->width; x++) { int cell_x = (r->left + x) / worley->cell_size; int cell_y = (r->top + y) / worley->cell_size; if (cell_x != seq->cell_x || cell_y != seq->cell_y) { vips_worley_create_cells(worley, seq->cells, cell_x, cell_y); seq->cell_x = cell_x; seq->cell_y = cell_y; } q[x] = vips_worley_distance(worley, seq->cells, r->left + x, r->top + y); } } return 0; } static int vips_worley_build(VipsObject *object) { VipsCreate *create = VIPS_CREATE(object); VipsWorley *worley = (VipsWorley *) object; if (VIPS_OBJECT_CLASS(vips_worley_parent_class)->build(object)) return -1; /* Be careful if width is a multiple of cell_size. */ worley->cells_across = VIPS_ROUND_UP(worley->width, worley->cell_size) / worley->cell_size; worley->cells_down = VIPS_ROUND_UP(worley->height, worley->cell_size) / worley->cell_size; vips_image_init_fields(create->out, worley->width, worley->height, 1, VIPS_FORMAT_FLOAT, VIPS_CODING_NONE, VIPS_INTERPRETATION_MULTIBAND, 1.0, 1.0); if (vips_image_pipelinev(create->out, VIPS_DEMAND_STYLE_ANY, NULL) || vips_image_generate(create->out, vips_worley_start, vips_worley_gen, vips_worley_stop, worley, NULL)) return -1; return 0; } static void vips_worley_class_init(VipsWorleyClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "worley"; vobject_class->description = _("make a worley noise image"); vobject_class->build = vips_worley_build; VIPS_ARG_INT(class, "width", 2, _("Width"), _("Image width in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsWorley, width), 1, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "height", 3, _("Height"), _("Image height in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsWorley, height), 1, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "cell_size", 3, _("Cell size"), _("Size of Worley cells"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsWorley, cell_size), 1, VIPS_MAX_COORD, 256); VIPS_ARG_INT(class, "seed", 4, _("Seed"), _("Random number seed"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsWorley, seed), INT_MIN, INT_MAX, 0); } static void vips_worley_init(VipsWorley *worley) { worley->cell_size = 256; worley->seed = UINT_MAX * g_random_double(); } /** * vips_worley: * @out: (out): output image * @width: horizontal size * @height: vertical size * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @cell_size: %gint, size of Worley cells * * Create a one-band float image of Worley noise. See: * * https://en.wikipedia.org/wiki/Worley_noise * * Use @cell_size to set the size of the cells from which the image is * constructed. The default is 256 x 256. * * If @width and @height are multiples of @cell_size, the image will tessellate. * * See also: vips_perlin(), vips_fractsurf(), vips_gaussnoise(). * * Returns: 0 on success, -1 on error */ int vips_worley(VipsImage **out, int width, int height, ...) { va_list ap; int result; va_start(ap, height); result = vips_call_split("worley", ap, out, width, height); va_end(ap); return result; } libvips-8.15.1/libvips/create/xyz.c000066400000000000000000000140671454007373500172070ustar00rootroot00000000000000/* make an xy index image * * 21/4/04 * - from im_grey * 1/2/11 * - gtk-doc * 31/10/11 * - redo as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pcreate.h" typedef struct _VipsXyz { VipsCreate parent_instance; int width; int height; int csize; int dsize; int esize; int dimensions; } VipsXyz; typedef VipsCreateClass VipsXyzClass; G_DEFINE_TYPE(VipsXyz, vips_xyz, VIPS_TYPE_CREATE); static int vips_xyz_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsXyz *xyz = (VipsXyz *) a; VipsRect *r = &out_region->valid; int le = r->left; int to = r->top; int ri = VIPS_RECT_RIGHT(r); int bo = VIPS_RECT_BOTTOM(r); int x, y, i; for (y = to; y < bo; y++) { unsigned int *q = (unsigned int *) VIPS_REGION_ADDR(out_region, le, y); unsigned int dims[5]; int r; int h; h = xyz->height * xyz->csize * xyz->dsize; dims[4] = y / h; r = y % h; h /= xyz->dsize; dims[3] = r / h; r %= h; h /= xyz->csize; dims[2] = r / h; r %= h; dims[1] = r; for (x = le; x < ri; x++) { dims[0] = x; for (i = 0; i < xyz->dimensions; i++) q[i] = dims[i]; q += xyz->dimensions; } } return 0; } static int vips_xyz_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsCreate *create = VIPS_CREATE(object); VipsXyz *xyz = (VipsXyz *) object; double d; int ysize; if (VIPS_OBJECT_CLASS(vips_xyz_parent_class)->build(object)) return -1; if ((vips_object_argument_isset(object, "dsize") && !vips_object_argument_isset(object, "csize")) || (vips_object_argument_isset(object, "esize") && !vips_object_argument_isset(object, "dsize"))) { vips_error(class->nickname, "%s", _("lower dimensions not set")); return -1; } if (vips_object_argument_isset(object, "csize")) { xyz->dimensions += 1; if (vips_object_argument_isset(object, "dsize")) { xyz->dimensions += 1; if (vips_object_argument_isset(object, "esize")) xyz->dimensions += 1; } } d = (double) xyz->height * xyz->csize * xyz->dsize * xyz->esize; if (d > INT_MAX) { vips_error(class->nickname, "%s", _("image too large")); return -1; } ysize = d; vips_image_init_fields(create->out, xyz->width, ysize, xyz->dimensions, VIPS_FORMAT_UINT, VIPS_CODING_NONE, VIPS_INTERPRETATION_MULTIBAND, 1.0, 1.0); if (vips_image_pipelinev(create->out, VIPS_DEMAND_STYLE_ANY, NULL) || vips_image_generate(create->out, NULL, vips_xyz_gen, NULL, xyz, NULL)) return -1; return 0; } static void vips_xyz_class_init(VipsXyzClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VIPS_DEBUG_MSG("vips_xyz_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "xyz"; vobject_class->description = _("make an image where pixel values are coordinates"); vobject_class->build = vips_xyz_build; VIPS_ARG_INT(class, "width", 4, _("Width"), _("Image width in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsXyz, width), 1, VIPS_MAX_COORD, 64); VIPS_ARG_INT(class, "height", 5, _("Height"), _("Image height in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsXyz, height), 1, VIPS_MAX_COORD, 64); VIPS_ARG_INT(class, "csize", 6, _("csize"), _("Size of third dimension"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsXyz, csize), 1, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "dsize", 7, _("dsize"), _("Size of fourth dimension"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsXyz, dsize), 1, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "esize", 8, _("esize"), _("Size of fifth dimension"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsXyz, esize), 1, VIPS_MAX_COORD, 1); } static void vips_xyz_init(VipsXyz *xyz) { xyz->width = 64; xyz->height = 64; xyz->dimensions = 2; xyz->csize = 1; xyz->dsize = 1; xyz->esize = 1; } /** * vips_xyz: * @out: (out): output image * @width: horizontal size * @height: vertical size * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @csize: size for third dimension * * @dsize: size for fourth dimension * * @esize: size for fifth dimension * * Create a two-band uint32 image where the elements in the first band have the * value of their x coordinate and elements in the second band have their y * coordinate. * * You can make any image where the value of a pixel is a function of its (x, * y) coordinate by combining this operator with the arithmetic operators. * * Set @csize, @dsize, @esize to generate higher dimensions and add more * bands. The extra dimensions are placed down the vertical axis. Use * vips_grid() to change the layout. * * See also: vips_grey(), vips_grid(), vips_identity(). * * Returns: 0 on success, -1 on error */ int vips_xyz(VipsImage **out, int width, int height, ...) { va_list ap; int result; va_start(ap, height); result = vips_call_split("xyz", ap, out, width, height); va_end(ap); return result; } libvips-8.15.1/libvips/create/zone.c000066400000000000000000000053331454007373500173240ustar00rootroot00000000000000/* square zone plate of size * * N. Dessipris 01/02/1991 * * 22/7/93 JC * - externs removed * - im_outcheck() added * 30/8/95 JC * - modernized * - memory leaks fixed * - split into im_zone() and im_fzone() * 1/2/11 * - gtk-doc * 13/6/13 * - redo as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pcreate.h" #include "point.h" typedef VipsPoint VipsZone; typedef VipsPointClass VipsZoneClass; G_DEFINE_TYPE(VipsZone, vips_zone, VIPS_TYPE_POINT); static float vips_zone_point(VipsPoint *point, int x, int y) { VipsZone *zone = (VipsZone *) point; int hwidth = point->width / 2; int hheight = point->height / 2; int h2 = (x - hwidth) * (x - hwidth); int v2 = (y - hheight) * (y - hheight); double c = VIPS_PI / zone->width; return cos(c * (v2 + h2)); } static void vips_zone_class_init(VipsZoneClass *class) { VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsPointClass *point_class = VIPS_POINT_CLASS(class); vobject_class->nickname = "zone"; vobject_class->description = _("make a zone plate"); point_class->point = vips_zone_point; } static void vips_zone_init(VipsZone *zone) { } /** * vips_zone: * @out: (out): output image * @width: image size * @height: image size * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @uchar: output a uchar image * * Create a one-band image of a zone plate. * * Pixels are normally in [-1, +1], set @uchar to output [0, 255]. * * See also: vips_eye(), vips_xyz(). * * Returns: 0 on success, -1 on error */ int vips_zone(VipsImage **out, int width, int height, ...) { va_list ap; int result; va_start(ap, height); result = vips_call_split("zone", ap, out, width, height); va_end(ap); return result; } libvips-8.15.1/libvips/deprecated/000077500000000000000000000000001454007373500170365ustar00rootroot00000000000000libvips-8.15.1/libvips/deprecated/arith_dispatch.c000066400000000000000000000660541454007373500222030ustar00rootroot00000000000000/* Function dispatch tables for arithmetic. * * J. Cupitt, 8/4/93. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include /* One image in, one out. */ static im_arg_desc one_in_one_out[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out") }; /* Two images in, one out. */ static im_arg_desc two_in_one_out[] = { IM_INPUT_IMAGE("in1"), IM_INPUT_IMAGE("in2"), IM_OUTPUT_IMAGE("out") }; /* Image in, number out. */ static im_arg_desc image_in_num_out[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_DOUBLE("value") }; /* Args for im_recomb. */ static im_arg_desc recomb_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DMASK("matrix") }; /* Call im_recomb via arg vector. */ static int recomb_vec(im_object *argv) { im_mask_object *mo = argv[2]; return im_recomb(argv[0], argv[1], mo->mask); } /* Description of im_recomb. */ static im_function recomb_desc = { "im_recomb", /* Name */ "linear recombination with mask", IM_FN_PIO, /* Flags */ recomb_vec, /* Dispatch function */ IM_NUMBER(recomb_args), /* Size of arg list */ recomb_args /* Arg list */ }; /* Call im_abs via arg vector. */ static int abs_vec(im_object *argv) { return im_abs(argv[0], argv[1]); } /* Description of im_abs. */ static im_function abs_desc = { "im_abs", /* Name */ N_("absolute value"), /* Description */ IM_FN_PIO | IM_FN_PTOP, /* Flags */ abs_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_add via arg vector. */ static int add_vec(im_object *argv) { return im_add(argv[0], argv[1], argv[2]); } /* Description of im_add. */ static im_function add_desc = { "im_add", /* Name */ N_("add two images"), /* Description */ IM_FN_PIO | IM_FN_PTOP, /* Flags */ add_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_avg via arg vector. */ static int avg_vec(im_object *argv) { double f; if (im_avg(argv[0], &f)) return -1; *((double *) argv[1]) = f; return 0; } /* Description of im_avg. */ static im_function avg_desc = { "im_avg", /* Name */ N_("average value of image"), /* Description */ IM_FN_PIO, /* Flags */ avg_vec, /* Dispatch function */ IM_NUMBER(image_in_num_out), /* Size of arg list */ image_in_num_out /* Arg list */ }; /* Args to im_point. */ static im_arg_desc point_args[] = { IM_INPUT_IMAGE("in"), IM_INPUT_INTERPOLATE("interpolate"), IM_INPUT_DOUBLE("x"), IM_INPUT_DOUBLE("y"), IM_INPUT_INT("band"), IM_OUTPUT_DOUBLE("out") }; /* Call im_point via arg vector. */ static int point_vec(im_object *argv) { VipsInterpolate *interpolate = VIPS_INTERPOLATE(argv[1]); double x = *((double *) argv[2]); double y = *((double *) argv[3]); int band = *((int *) argv[4]); return im_point(argv[0], interpolate, x, y, band, argv[5]); } /* Description of im_point. */ static im_function point_desc = { "im_point", "interpolate value at single point", IM_FN_PIO, point_vec, IM_NUMBER(point_args), point_args }; /* Args to im_point_bilinear. */ static im_arg_desc point_bilinear_args[] = { IM_INPUT_IMAGE("in"), IM_INPUT_DOUBLE("x"), IM_INPUT_DOUBLE("y"), IM_INPUT_INT("band"), IM_OUTPUT_DOUBLE("val") }; /* Call im_point_bilinear via arg vector. */ static int point_bilinear_vec(im_object *argv) { return im_point_bilinear(argv[0], *(double *) argv[1], *(double *) argv[2], *(int *) argv[3], argv[4]); } /* Description of im_point_bilinear. */ static im_function point_bilinear_desc = { "im_point_bilinear", "interpolate value at single point, linearly", IM_FN_PIO, point_bilinear_vec, IM_NUMBER(point_bilinear_args), point_bilinear_args }; /* Call im_deviate via arg vector. */ static int deviate_vec(im_object *argv) { double f; if (im_deviate(argv[0], &f)) return -1; *((double *) argv[1]) = f; return 0; } /* Description of im_deviate. */ static im_function deviate_desc = { "im_deviate", /* Name */ N_("standard deviation of image"), /* Description */ IM_FN_PIO, /* Flags */ deviate_vec, /* Dispatch function */ IM_NUMBER(image_in_num_out), /* Size of arg list */ image_in_num_out /* Arg list */ }; /* Call im_exp10tra via arg vector. */ static int exp10tra_vec(im_object *argv) { return im_exp10tra(argv[0], argv[1]); } /* Description of im_exp10tra. */ static im_function exp10tra_desc = { "im_exp10tra", /* Name */ N_("10^pel of image"), /* Description */ IM_FN_PIO | IM_FN_PTOP, /* Flags */ exp10tra_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_exptra via arg vector. */ static int exptra_vec(im_object *argv) { return im_exptra(argv[0], argv[1]); } /* Description of im_exptra. */ static im_function exptra_desc = { "im_exptra", /* Name */ N_("e^pel of image"), /* Description */ IM_FN_PIO | IM_FN_PTOP, /* Flags */ exptra_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Args for im_powtra(). */ static im_arg_desc powtra_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DOUBLE("x") }; /* Call im_expntra via arg vector. */ static int expntra_vec(im_object *argv) { double a = *((double *) argv[2]); return im_expntra(argv[0], argv[1], a); } /* Description of im_expntra. */ static im_function expntra_desc = { "im_expntra", /* Name */ N_("x^pel of image"), /* Description */ IM_FN_PIO | IM_FN_PTOP, /* Flags */ expntra_vec, /* Dispatch function */ IM_NUMBER(powtra_args), /* Size of arg list */ powtra_args /* Arg list */ }; /* Args for im_expntra_vec(). */ static im_arg_desc expntra_vec_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DOUBLEVEC("v") }; /* Call im_expntra_vec() via arg vector. */ static int expntra_vec_vec(im_object *argv) { im_doublevec_object *rv = (im_doublevec_object *) argv[2]; return im_expntra_vec(argv[0], argv[1], rv->n, rv->vec); } /* Description of im_expntra_vec. */ static im_function expntra_vec_desc = { "im_expntra_vec", /* Name */ N_("[x,y,z]^pel of image"), /* Description */ IM_FN_PIO | IM_FN_PTOP, /* Flags */ expntra_vec_vec, /* Dispatch function */ IM_NUMBER(expntra_vec_args), /* Size of arg list */ expntra_vec_args /* Arg list */ }; /* Call im_divide via arg vector. */ static int divide_vec(im_object *argv) { return im_divide(argv[0], argv[1], argv[2]); } /* Description of im_divide. */ static im_function divide_desc = { "im_divide", /* Name */ N_("divide two images"), IM_FN_PIO, /* Flags */ divide_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_invert via arg vector. */ static int invert_vec(im_object *argv) { return im_invert(argv[0], argv[1]); } /* Description of im_invert. */ static im_function invert_desc = { "im_invert", /* Name */ N_("photographic negative"), /* Description */ IM_FN_PIO | IM_FN_PTOP, /* Flags */ invert_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Args for im_lintra(). */ static im_arg_desc lintra_args[] = { IM_INPUT_DOUBLE("a"), IM_INPUT_IMAGE("in"), IM_INPUT_DOUBLE("b"), IM_OUTPUT_IMAGE("out") }; /* Call im_lintra() via arg vector. */ static int lintra_vec(im_object *argv) { double a = *((double *) argv[0]); double b = *((double *) argv[2]); return im_lintra(a, argv[1], b, argv[3]); } /* Description of im_lintra(). */ static im_function lintra_desc = { "im_lintra", /* Name */ N_("calculate a*in + b = outfile"), IM_FN_PIO | IM_FN_PTOP, /* Flags */ lintra_vec, /* Dispatch function */ IM_NUMBER(lintra_args), /* Size of arg list */ lintra_args /* Arg list */ }; /* Args for im_lintra_vec(). */ static im_arg_desc lintra_vec_args[] = { IM_INPUT_DOUBLEVEC("a"), IM_INPUT_IMAGE("in"), IM_INPUT_DOUBLEVEC("b"), IM_OUTPUT_IMAGE("out") }; /* Call im_lintra_vec() via arg vector. */ static int lintra_vec_vec(im_object *argv) { im_doublevec_object *dva = (im_doublevec_object *) argv[0]; im_doublevec_object *dvb = (im_doublevec_object *) argv[2]; if (dva->n != dvb->n) { im_error("im_lintra_vec", "%s", _("vectors not equal length")); return -1; } return im_lintra_vec(dva->n, dva->vec, argv[1], dvb->vec, argv[3]); } /* Description of im_lintra_vec(). */ static im_function lintra_vec_desc = { "im_lintra_vec", /* Name */ N_("calculate a*in + b -> out, a and b vectors"), IM_FN_PIO | IM_FN_PTOP, /* Flags */ lintra_vec_vec, /* Dispatch function */ IM_NUMBER(lintra_vec_args), /* Size of arg list */ lintra_vec_args /* Arg list */ }; /* Call im_log10tra via arg vector. */ static int log10tra_vec(im_object *argv) { return im_log10tra(argv[0], argv[1]); } /* Description of im_log10tra. */ static im_function log10tra_desc = { "im_log10tra", /* Name */ N_("log10 of image"), /* Description */ IM_FN_PIO | IM_FN_PTOP, /* Flags */ log10tra_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_logtra via arg vector. */ static int logtra_vec(im_object *argv) { return im_logtra(argv[0], argv[1]); } /* Description of im_logtra. */ static im_function logtra_desc = { "im_logtra", /* Name */ N_("ln of image"), /* Description */ IM_FN_PIO | IM_FN_PTOP, /* Flags */ logtra_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_tantra via arg vector. */ static int tantra_vec(im_object *argv) { return im_tantra(argv[0], argv[1]); } /* Description of im_tantra. */ static im_function tantra_desc = { "im_tantra", /* Name */ N_("tan of image (angles in degrees)"), IM_FN_PIO | IM_FN_PTOP, /* Flags */ tantra_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_atantra via arg vector. */ static int atantra_vec(im_object *argv) { return im_atantra(argv[0], argv[1]); } /* Description of im_atantra. */ static im_function atantra_desc = { "im_atantra", /* Name */ N_("atan of image (result in degrees)"), IM_FN_PIO | IM_FN_PTOP, /* Flags */ atantra_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_costra via arg vector. */ static int costra_vec(im_object *argv) { return im_costra(argv[0], argv[1]); } /* Description of im_costra. */ static im_function costra_desc = { "im_costra", /* Name */ N_("cos of image (angles in degrees)"), IM_FN_PIO | IM_FN_PTOP, /* Flags */ costra_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_acostra via arg vector. */ static int acostra_vec(im_object *argv) { return im_acostra(argv[0], argv[1]); } /* Description of im_acostra. */ static im_function acostra_desc = { "im_acostra", /* Name */ N_("acos of image (result in degrees)"), IM_FN_PIO | IM_FN_PTOP, /* Flags */ acostra_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_ceil via arg vector. */ static int ceil_vec(im_object *argv) { return im_ceil(argv[0], argv[1]); } /* Description of im_ceil. */ static im_function ceil_desc = { "im_ceil", /* Name */ N_("round to smallest integer value not less than"), IM_FN_PIO | IM_FN_PTOP, /* Flags */ ceil_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_floor via arg vector. */ static int floor_vec(im_object *argv) { return im_floor(argv[0], argv[1]); } /* Description of im_floor. */ static im_function floor_desc = { "im_floor", /* Name */ N_("round to largest integer value not greater than"), IM_FN_PIO | IM_FN_PTOP, /* Flags */ floor_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_rint via arg vector. */ static int rint_vec(im_object *argv) { return im_rint(argv[0], argv[1]); } /* Description of im_rint. */ static im_function rint_desc = { "im_rint", /* Name */ N_("round to nearest integer value"), IM_FN_PIO | IM_FN_PTOP, /* Flags */ rint_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_sintra via arg vector. */ static int sintra_vec(im_object *argv) { return im_sintra(argv[0], argv[1]); } /* Description of im_sintra. */ static im_function sintra_desc = { "im_sintra", /* Name */ N_("sin of image (angles in degrees)"), IM_FN_PIO | IM_FN_PTOP, /* Flags */ sintra_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_bandmean via arg vector. */ static int bandmean_vec(im_object *argv) { return im_bandmean(argv[0], argv[1]); } /* Description of im_bandmean. */ static im_function bandmean_desc = { "im_bandmean", /* Name */ N_("average image bands"), IM_FN_PIO, /* Flags */ bandmean_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_sign via arg vector. */ static int sign_vec(im_object *argv) { return im_sign(argv[0], argv[1]); } /* Description of im_sign. */ static im_function sign_desc = { "im_sign", /* Name */ N_("unit vector in direction of value"), IM_FN_PIO | IM_FN_PTOP, /* Flags */ sign_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_asintra via arg vector. */ static int asintra_vec(im_object *argv) { return im_asintra(argv[0], argv[1]); } /* Description of im_asintra. */ static im_function asintra_desc = { "im_asintra", /* Name */ N_("asin of image (result in degrees)"), IM_FN_PIO | IM_FN_PTOP, /* Flags */ asintra_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_max via arg vector. */ static int max_vec(im_object *argv) { double f; if (im_max(argv[0], &f)) return -1; *((double *) argv[1]) = f; return 0; } /* Description of im_max. */ static im_function max_desc = { "im_max", /* Name */ N_("maximum value of image"), /* Description */ IM_FN_PIO, /* Flags */ max_vec, /* Dispatch function */ IM_NUMBER(image_in_num_out), /* Size of arg list */ image_in_num_out /* Arg list */ }; /* Args for maxpos (and minpos). */ static im_arg_desc maxpos_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_COMPLEX("position") }; /* Call im_maxpos via arg vector. */ static int maxpos_vec(im_object *argv) { double f; int x, y; if (im_maxpos(argv[0], &x, &y, &f)) return -1; ((double *) argv[1])[0] = x; ((double *) argv[1])[1] = y; return 0; } /* Description of im_maxpos. */ static im_function maxpos_desc = { "im_maxpos", /* Name */ N_("position of maximum value of image"), 0, /* Flags */ maxpos_vec, /* Dispatch function */ IM_NUMBER(maxpos_args), /* Size of arg list */ maxpos_args /* Arg list */ }; /* Args to im_maxpos_avg. */ static im_arg_desc maxpos_avg_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_DOUBLE("x"), IM_OUTPUT_DOUBLE("y"), IM_OUTPUT_DOUBLE("out") }; /* Call im_maxpos_avg via arg vector. */ static int maxpos_avg_vec(im_object *argv) { return im_maxpos_avg(argv[0], argv[1], argv[2], argv[3]); } /* Description of im_maxpos_avg. */ static im_function maxpos_avg_desc = { "im_maxpos_avg", N_("position of maximum value of image, averaging in case of draw"), IM_FN_PIO, maxpos_avg_vec, IM_NUMBER(maxpos_avg_args), maxpos_avg_args }; /* Args to im_min/maxpos_vec. */ static im_arg_desc maxpos_vec_args[] = { IM_INPUT_IMAGE("in"), IM_INPUT_INT("n"), IM_OUTPUT_INTVEC("xes"), IM_OUTPUT_INTVEC("yes"), IM_OUTPUT_DOUBLEVEC("maxima") }; /* Call im_maxpos_vec via arg vector. */ static int maxpos_vec_vec(im_object *argv) { int n = *((int *) argv[1]); im_intvec_object *xes = argv[2]; im_intvec_object *yes = argv[3]; im_doublevec_object *maxima = argv[4]; xes->vec = IM_ARRAY(NULL, n, int); xes->n = n; yes->vec = IM_ARRAY(NULL, n, int); yes->n = n; maxima->vec = IM_ARRAY(NULL, n, double); maxima->n = n; if (!xes->vec || !yes->vec || !maxima->vec || im_maxpos_vec(argv[0], xes->vec, yes->vec, maxima->vec, n)) return -1; return 0; } /* Description of im_maxpos_vec. */ static im_function maxpos_vec_desc = { "im_maxpos_vec", N_("position and value of n maxima of image"), IM_FN_PIO, maxpos_vec_vec, IM_NUMBER(maxpos_vec_args), maxpos_vec_args }; /* Call im_minpos_vec via arg vector. */ static int minpos_vec_vec(im_object *argv) { int n = *((int *) argv[1]); im_intvec_object *xes = argv[2]; im_intvec_object *yes = argv[3]; im_doublevec_object *minima = argv[4]; xes->vec = IM_ARRAY(NULL, n, int); xes->n = n; yes->vec = IM_ARRAY(NULL, n, int); yes->n = n; minima->vec = IM_ARRAY(NULL, n, double); minima->n = n; if (!xes->vec || !yes->vec || !minima->vec || im_minpos_vec(argv[0], xes->vec, yes->vec, minima->vec, n)) return -1; return 0; } /* Description of im_minpos_vec. */ static im_function minpos_vec_desc = { "im_minpos_vec", N_("position and value of n minima of image"), IM_FN_PIO, minpos_vec_vec, IM_NUMBER(maxpos_vec_args), maxpos_vec_args }; /* Args for measure. */ static im_arg_desc measure_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_DMASK("mask"), IM_INPUT_INT("x"), IM_INPUT_INT("y"), IM_INPUT_INT("w"), IM_INPUT_INT("h"), IM_INPUT_INT("h_patches"), IM_INPUT_INT("v_patches") }; /* Call im_measure via arg vector. */ static int measure_vec(im_object *argv) { im_mask_object *mo = argv[1]; int x = *((int *) argv[2]); int y = *((int *) argv[3]); int w = *((int *) argv[4]); int h = *((int *) argv[5]); int u = *((int *) argv[6]); int v = *((int *) argv[7]); if (!(mo->mask = im_measure_area(argv[0], x, y, w, h, u, v, NULL, 0, mo->name))) { return -1; } return 0; } /* Description of im_measure. */ static im_function measure_desc = { "im_measure", /* Name */ N_("measure averages of a grid of patches"), IM_FN_PIO, /* Flags */ measure_vec, /* Dispatch function */ IM_NUMBER(measure_args), /* Size of arg list */ measure_args /* Arg list */ }; /* Call im_min via arg vector. */ static int min_vec(im_object *argv) { double f; if (im_min(argv[0], &f)) return -1; *((double *) argv[1]) = f; return 0; } /* Description of im_min. */ static im_function min_desc = { "im_min", /* Name */ N_("minimum value of image"), /* Description */ IM_FN_PIO, /* Flags */ min_vec, /* Dispatch function */ IM_NUMBER(image_in_num_out), /* Size of arg list */ image_in_num_out /* Arg list */ }; /* Call im_minpos via arg vector. */ static int minpos_vec(im_object *argv) { double f; int x, y; if (im_minpos(argv[0], &x, &y, &f)) return -1; ((double *) argv[1])[0] = x; ((double *) argv[1])[1] = y; return 0; } /* Description of im_minpos. */ static im_function minpos_desc = { "im_minpos", /* Name */ N_("position of minimum value of image"), 0, /* Flags */ minpos_vec, /* Dispatch function */ IM_NUMBER(maxpos_args), /* Size of arg list */ maxpos_args /* Arg list */ }; /* Call im_remainder via arg vector. */ static int remainder_vec(im_object *argv) { return im_remainder(argv[0], argv[1], argv[2]); } /* Description of im_remainder. */ static im_function remainder_desc = { "im_remainder", /* Name */ N_("remainder after integer division"), /* Description */ IM_FN_PIO | IM_FN_PTOP, /* Flags */ remainder_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_remainderconst via arg vector. */ static int remainderconst_vec(im_object *argv) { double c = *((double *) argv[2]); return im_remainderconst(argv[0], argv[1], c); } /* Args for im_remainderconst(). */ static im_arg_desc remainderconst_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DOUBLE("x") }; /* Description of im_remainderconst. */ static im_function remainderconst_desc = { "im_remainderconst", /* Name */ N_("remainder after integer division by a constant"), /* Description */ IM_FN_PIO | IM_FN_PTOP, /* Flags */ remainderconst_vec, /* Dispatch function */ IM_NUMBER(remainderconst_args), /* Size of arg list */ remainderconst_args /* Arg list */ }; /* Call im_remainder_vec via arg vector. */ static int remainder_vec_vec(im_object *argv) { im_doublevec_object *dv = (im_doublevec_object *) argv[2]; return im_remainder_vec(argv[0], argv[1], dv->n, dv->vec); } /* Args for im_remainder_vec(). */ static im_arg_desc remainder_vec_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DOUBLEVEC("x") }; /* Description of im_remainder_vec. */ static im_function remainder_vec_desc = { "im_remainder_vec", /* Name */ N_("remainder after integer division by a vector of constants"), /* Description */ IM_FN_PIO | IM_FN_PTOP, /* Flags */ remainder_vec_vec, /* Dispatch function */ IM_NUMBER(remainder_vec_args), /* Size of arg list */ remainder_vec_args /* Arg list */ }; /* Call im_multiply via arg vector. */ static int multiply_vec(im_object *argv) { return im_multiply(argv[0], argv[1], argv[2]); } /* Description of im_multiply. */ static im_function multiply_desc = { "im_multiply", /* Name */ N_("multiply two images"), /* Description */ IM_FN_PIO | IM_FN_PTOP, /* Flags */ multiply_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_powtra() via arg vector. */ static int powtra_vec(im_object *argv) { double a = *((double *) argv[2]); return im_powtra(argv[0], argv[1], a); } /* Description of im_powtra(). */ static im_function powtra_desc = { "im_powtra", /* Name */ N_("pel^x of image"), IM_FN_PIO | IM_FN_PTOP, /* Flags */ powtra_vec, /* Dispatch function */ IM_NUMBER(powtra_args), /* Size of arg list */ powtra_args /* Arg list */ }; /* Call im_powtra_vec() via arg vector. */ static int powtra_vec_vec(im_object *argv) { im_doublevec_object *rv = (im_doublevec_object *) argv[2]; return im_powtra_vec(argv[0], argv[1], rv->n, rv->vec); } /* Description of im_powtra_vec(). */ static im_function powtra_vec_desc = { "im_powtra_vec", /* Name */ N_("pel^[x,y,z] of image"), IM_FN_PIO | IM_FN_PTOP, /* Flags */ powtra_vec_vec, /* Dispatch function */ IM_NUMBER(expntra_vec_args), /* Size of arg list */ expntra_vec_args /* Arg list */ }; /* Args for im_stats. */ static im_arg_desc stats_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_DMASK_STATS("statistics") }; /* Call im_stats() via arg vector. */ static int stats_vec(im_object *argv) { im_mask_object *mo = argv[1]; if (!(mo->mask = im_stats(argv[0]))) return -1; return 0; } /* Description of im_stats(). */ static im_function stats_desc = { "im_stats", /* Name */ N_("many image statistics in one pass"), IM_FN_PIO, /* Flags */ stats_vec, /* Dispatch function */ IM_NUMBER(stats_args), /* Size of arg list */ stats_args /* Arg list */ }; /* Call im_subtract via arg vector. */ static int subtract_vec(im_object *argv) { return im_subtract(argv[0], argv[1], argv[2]); } /* Description of im_subtract. */ static im_function subtract_desc = { "im_subtract", /* Name */ N_("subtract two images"), /* Description */ IM_FN_PIO, /* Flags */ subtract_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Args for im_linreg. */ static im_arg_desc linreg_args[] = { IM_INPUT_IMAGEVEC("ins"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DOUBLEVEC("xs") }; /* Call im_linreg() via arg vector. */ static int linreg_vec(im_object *argv) { #define FUNCTION_NAME "im_linreg_vec" im_imagevec_object *ins_vec = (im_imagevec_object *) argv[0]; im_doublevec_object *xs_vec = (im_doublevec_object *) argv[2]; IMAGE *out = (IMAGE *) argv[1]; IMAGE **ins = IM_ARRAY(out, ins_vec->n + 1, IMAGE *); int i; if (!ins) return -1; for (i = 0; i < ins_vec->n; ++i) ins[i] = ins_vec->vec[i]; ins[ins_vec->n] = NULL; if (xs_vec->n != ins_vec->n) { im_error(FUNCTION_NAME, "image vector and x vector differ in length"); return -1; } return im_linreg(ins, out, xs_vec->vec); #undef FUNCTION_NAME } /* Description of im_linreg(). */ static im_function linreg_desc = { "im_linreg", /* Name */ N_("pixelwise linear regression"), IM_FN_PIO | IM_FN_PTOP, /* Flags */ linreg_vec, /* Dispatch function */ IM_NUMBER(linreg_args), /* Size of arg list */ linreg_args /* Arg list */ }; /* Call im_cross_phase via arg vector. */ static int cross_phase_vec(im_object *argv) { return im_cross_phase(argv[0], argv[1], argv[2]); } /* Description of im_cross_phase. */ static im_function cross_phase_desc = { "im_cross_phase", /* Name */ N_("phase of cross power spectrum of two complex images"), /* Description */ IM_FN_PIO | IM_FN_PTOP, /* Flags */ cross_phase_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Package up all these functions. */ static im_function *arith_list[] = { &abs_desc, &acostra_desc, &add_desc, &asintra_desc, &atantra_desc, &avg_desc, &point_desc, &point_bilinear_desc, &bandmean_desc, &ceil_desc, &costra_desc, &cross_phase_desc, &deviate_desc, ÷_desc, &exp10tra_desc, &expntra_desc, &expntra_vec_desc, &exptra_desc, &floor_desc, &invert_desc, &lintra_desc, &linreg_desc, &lintra_vec_desc, &log10tra_desc, &logtra_desc, &max_desc, &maxpos_desc, &maxpos_avg_desc, &maxpos_vec_desc, &measure_desc, &min_desc, &minpos_desc, &minpos_vec_desc, &multiply_desc, &powtra_desc, &powtra_vec_desc, &recomb_desc, &remainder_desc, &remainderconst_desc, &remainder_vec_desc, &rint_desc, &sign_desc, &sintra_desc, &stats_desc, &subtract_desc, &tantra_desc }; /* Package of functions. */ im_package im__arithmetic = { "arithmetic", IM_NUMBER(arith_list), arith_list }; libvips-8.15.1/libvips/deprecated/cimg_dispatch.c000066400000000000000000000102611454007373500220000ustar00rootroot00000000000000/* Function dispatch tables for cimg wrappers. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include static int greyc_vec(im_object *argv) { IMAGE *src = (IMAGE *) argv[0]; IMAGE *dst = (IMAGE *) argv[1]; int iterations = *((int *) argv[2]); double amplitude = *((double *) argv[3]); double sharpness = *((double *) argv[4]); double anisotropy = *((double *) argv[5]); double alpha = *((double *) argv[6]); double sigma = *((double *) argv[7]); double dl = *((double *) argv[8]); double da = *((double *) argv[9]); double gauss_prec = *((double *) argv[10]); int interpolation = *((int *) argv[11]); int fast_approx = *((int *) argv[12]); if (im_greyc_mask(src, dst, NULL, iterations, amplitude, sharpness, anisotropy, alpha, sigma, dl, da, gauss_prec, interpolation, fast_approx)) return -1; return 0; } static im_arg_desc greyc_arg_types[] = { IM_INPUT_IMAGE("src"), IM_OUTPUT_IMAGE("dst"), IM_INPUT_INT("iterations"), IM_INPUT_DOUBLE("amplitude"), IM_INPUT_DOUBLE("sharpness"), IM_INPUT_DOUBLE("anisotropy"), IM_INPUT_DOUBLE("alpha"), IM_INPUT_DOUBLE("sigma"), IM_INPUT_DOUBLE("dl"), IM_INPUT_DOUBLE("da"), IM_INPUT_DOUBLE("gauss_prec"), IM_INPUT_INT("interpolation"), IM_INPUT_INT("fast_approx") }; static im_function greyc_desc = { "im_greyc", /* Name */ "noise-removing filter", /* Description */ (im_fn_flags) (IM_FN_TRANSFORM | IM_FN_PIO), /* Flags */ greyc_vec, /* Dispatch function */ IM_NUMBER(greyc_arg_types), /* Size of arg list */ greyc_arg_types /* Arg list */ }; static int greyc_mask_vec(im_object *argv) { IMAGE *src = (IMAGE *) argv[0]; IMAGE *dst = (IMAGE *) argv[1]; IMAGE *mask = (IMAGE *) argv[2]; int iterations = *((int *) argv[3]); double amplitude = *((double *) argv[4]); double sharpness = *((double *) argv[5]); double anisotropy = *((double *) argv[6]); double alpha = *((double *) argv[7]); double sigma = *((double *) argv[8]); double dl = *((double *) argv[9]); double da = *((double *) argv[10]); double gauss_prec = *((double *) argv[11]); int interpolation = *((int *) argv[12]); int fast_approx = *((int *) argv[13]); if (im_greyc_mask(src, dst, mask, iterations, amplitude, sharpness, anisotropy, alpha, sigma, dl, da, gauss_prec, interpolation, fast_approx)) return -1; return 0; } static im_arg_desc greyc_mask_arg_types[] = { IM_INPUT_IMAGE("src"), IM_OUTPUT_IMAGE("dst"), IM_INPUT_IMAGE("mask"), IM_INPUT_INT("iterations"), IM_INPUT_DOUBLE("amplitude"), IM_INPUT_DOUBLE("sharpness"), IM_INPUT_DOUBLE("anisotropy"), IM_INPUT_DOUBLE("alpha"), IM_INPUT_DOUBLE("sigma"), IM_INPUT_DOUBLE("dl"), IM_INPUT_DOUBLE("da"), IM_INPUT_DOUBLE("gauss_prec"), IM_INPUT_INT("interpolation"), IM_INPUT_INT("fast_approx") }; static im_function greyc_mask_desc = { "im_greyc_mask", /* Name */ "noise-removing filter, with a mask", /* Description */ (im_fn_flags) (IM_FN_TRANSFORM | IM_FN_PIO), /* Flags */ greyc_mask_vec, /* Dispatch function */ IM_NUMBER(greyc_mask_arg_types), /* Size of arg list */ greyc_mask_arg_types /* Arg list */ }; static im_function *function_list[] = { &greyc_desc, &greyc_mask_desc }; /* Package of functions. */ im_package im__cimg = { "cimg", IM_NUMBER(function_list), function_list }; libvips-8.15.1/libvips/deprecated/colour_dispatch.c000066400000000000000000000564561454007373500224040ustar00rootroot00000000000000/* Function dispatch tables for arithmetic. * * J. Cupitt, 8/4/93. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include /* One image in, one out. */ static im_arg_desc one_in_one_out[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out") }; /* Two images in, one out. */ static im_arg_desc two_in_one_out[] = { IM_INPUT_IMAGE("in1"), IM_INPUT_IMAGE("in2"), IM_OUTPUT_IMAGE("out") }; /* Call im_sRGB2XYZ via arg vector. */ static int sRGB2XYZ_vec(im_object *argv) { return im_sRGB2XYZ(argv[0], argv[1]); } /* Description of im_sRGB2XYZ. */ static im_function sRGB2XYZ_desc = { "im_sRGB2XYZ", /* Name */ "convert sRGB to XYZ", /* Description */ IM_FN_PIO, /* Flags */ sRGB2XYZ_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_XYZ2sRGB via arg vector. */ static int XYZ2sRGB_vec(im_object *argv) { return im_XYZ2sRGB(argv[0], argv[1]); } /* Description of im_XYZ2sRGB. */ static im_function XYZ2sRGB_desc = { "im_XYZ2sRGB", /* Name */ "convert XYZ to sRGB", /* Description */ IM_FN_PIO, /* Flags */ XYZ2sRGB_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_LCh2Lab via arg vector. */ static int LCh2Lab_vec(im_object *argv) { return im_LCh2Lab(argv[0], argv[1]); } /* Description of im_LCh2Lab. */ static im_function LCh2Lab_desc = { "im_LCh2Lab", /* Name */ "convert LCh to Lab", /* Description */ IM_FN_PIO, /* Flags */ LCh2Lab_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_LabQ2XYZ via arg vector. */ static int LabQ2XYZ_vec(im_object *argv) { return im_LabQ2XYZ(argv[0], argv[1]); } /* Description of im_LabQ2XYZ. */ static im_function LabQ2XYZ_desc = { "im_LabQ2XYZ", /* Name */ "convert LabQ to XYZ", /* Description */ IM_FN_PIO, /* Flags */ LabQ2XYZ_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_LCh2UCS via arg vector. */ static int LCh2UCS_vec(im_object *argv) { return im_LCh2UCS(argv[0], argv[1]); } /* Description of im_LCh2UCS. */ static im_function LCh2UCS_desc = { "im_LCh2UCS", /* Name */ "convert LCh to UCS", /* Description */ IM_FN_PIO, /* Flags */ LCh2UCS_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_Lab2LCh via arg vector. */ static int Lab2LCh_vec(im_object *argv) { return im_Lab2LCh(argv[0], argv[1]); } /* Description of im_Lab2LCh. */ static im_function Lab2LCh_desc = { "im_Lab2LCh", /* Name */ "convert Lab to LCh", /* Description */ IM_FN_PIO, /* Flags */ Lab2LCh_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_Lab2LabQ() via arg vector. */ static int Lab2LabQ_vec(im_object *argv) { return im_Lab2LabQ(argv[0], argv[1]); } /* Description of im_Lab2LabQ. */ static im_function Lab2LabQ_desc = { "im_Lab2LabQ", /* Name */ "convert Lab to LabQ", /* Description */ IM_FN_PIO, /* Flags */ Lab2LabQ_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_Lab2XYZ() via arg vector. */ static int Lab2XYZ_vec(im_object *argv) { return im_Lab2XYZ(argv[0], argv[1]); } /* Description of im_Lab2XYZ. */ static im_function Lab2XYZ_desc = { "im_Lab2XYZ", /* Name */ "convert D65 Lab to XYZ", /* Description */ IM_FN_PIO, /* Flags */ Lab2XYZ_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; static int icc_present_vec(im_object *argv) { int *present = ((int *) argv[0]); *present = im_icc_present(); return 0; } static im_arg_desc icc_present_args[] = { IM_OUTPUT_INT("present") }; /* Description of im_icc_present. */ static im_function icc_present_desc = { "im_icc_present", /* Name */ "test for presence of ICC library", /* Description */ 0, /* Flags */ icc_present_vec, /* Dispatch function */ IM_NUMBER(icc_present_args), /* Size of arg list */ icc_present_args /* Arg list */ }; static int icc_transform_vec(im_object *argv) { int intent = *((int *) argv[4]); return im_icc_transform(argv[0], argv[1], argv[2], argv[3], intent); } static im_arg_desc icc_transform_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_STRING("input_profile"), IM_INPUT_STRING("output_profile"), IM_INPUT_INT("intent") }; /* Description of im_icc_transform. */ static im_function icc_transform_desc = { "im_icc_transform", /* Name */ "convert between two device images with a pair of ICC profiles", /* Description */ IM_FN_PIO, /* Flags */ icc_transform_vec, /* Dispatch function */ IM_NUMBER(icc_transform_args), /* Size of arg list */ icc_transform_args /* Arg list */ }; static int icc_import_embedded_vec(im_object *argv) { int intent = *((int *) argv[2]); return im_icc_import_embedded(argv[0], argv[1], intent); } static im_arg_desc icc_import_embedded_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("intent") }; /* Description of im_icc_import_embedded. */ static im_function icc_import_embedded_desc = { "im_icc_import_embedded", /* Name */ "convert a device image to float LAB using the embedded profile", /* Description */ IM_FN_PIO, /* Flags */ icc_import_embedded_vec, /* Dispatch function */ IM_NUMBER(icc_import_embedded_args), /* Size of arg list */ icc_import_embedded_args /* Arg list */ }; static int icc_import_vec(im_object *argv) { int intent = *((int *) argv[3]); return im_icc_import(argv[0], argv[1], argv[2], intent); } static im_arg_desc icc_import_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_STRING("input_profile"), IM_INPUT_INT("intent") }; /* Description of im_icc_import. */ static im_function icc_import_desc = { "im_icc_import", /* Name */ "convert a device image to float LAB with an ICC profile", /* Description */ IM_FN_PIO, /* Flags */ icc_import_vec, /* Dispatch function */ IM_NUMBER(icc_import_args), /* Size of arg list */ icc_import_args /* Arg list */ }; static int icc_export_depth_vec(im_object *argv) { int intent = *((int *) argv[4]); int depth = *((int *) argv[2]); return im_icc_export_depth(argv[0], argv[1], depth, argv[3], intent); } static im_arg_desc icc_export_depth_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("depth"), IM_INPUT_STRING("output_profile"), IM_INPUT_INT("intent") }; /* Description of im_icc_export_depth. */ static im_function icc_export_depth_desc = { "im_icc_export_depth", /* Name */ "convert a float LAB to device space with an ICC profile", /* Description */ IM_FN_PIO, /* Flags */ icc_export_depth_vec, /* Dispatch function */ IM_NUMBER(icc_export_depth_args), /* Size of arg list */ icc_export_depth_args /* Arg list */ }; static int icc_ac2rc_vec(im_object *argv) { return im_icc_ac2rc(argv[0], argv[1], argv[2]); } static im_arg_desc icc_ac2rc_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_STRING("profile") }; /* Description of im_icc_ac2rc. */ static im_function icc_ac2rc_desc = { "im_icc_ac2rc", /* Name */ "convert LAB from AC to RC using an ICC profile", /* Description */ IM_FN_PIO, /* Flags */ icc_ac2rc_vec, /* Dispatch function */ IM_NUMBER(icc_ac2rc_args), /* Size of arg list */ icc_ac2rc_args /* Arg list */ }; static int Lab2XYZ_temp_vec(im_object *argv) { double X0 = *((double *) argv[2]); double Y0 = *((double *) argv[3]); double Z0 = *((double *) argv[4]); return im_Lab2XYZ_temp(argv[0], argv[1], X0, Y0, Z0); } static im_arg_desc temp_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DOUBLE("X0"), IM_INPUT_DOUBLE("Y0"), IM_INPUT_DOUBLE("Z0") }; /* Description of im_Lab2XYZ_temp. */ static im_function Lab2XYZ_temp_desc = { "im_Lab2XYZ_temp", /* Name */ "convert Lab to XYZ, with a specified colour temperature", /* Description */ IM_FN_PIO, /* Flags */ Lab2XYZ_temp_vec, /* Dispatch function */ IM_NUMBER(temp_args), /* Size of arg list */ temp_args /* Arg list */ }; /* Call im_Lab2UCS() via arg vector. */ static int Lab2UCS_vec(im_object *argv) { return im_Lab2UCS(argv[0], argv[1]); } /* Description of im_Lab2UCS. */ static im_function Lab2UCS_desc = { "im_Lab2UCS", /* Name */ "convert Lab to UCS", /* Description */ IM_FN_PIO, /* Flags */ Lab2UCS_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_LabQ2Lab() via arg vector. */ static int LabQ2Lab_vec(im_object *argv) { return im_LabQ2Lab(argv[0], argv[1]); } /* Description of im_LabQ2Lab. */ static im_function LabQ2Lab_desc = { "im_LabQ2Lab", /* Name */ "convert LabQ to Lab", /* Description */ IM_FN_PIO, /* Flags */ LabQ2Lab_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_rad2float() via arg vector. */ static int rad2float_vec(im_object *argv) { return im_rad2float(argv[0], argv[1]); } /* Description of im_rad2float. */ static im_function rad2float_desc = { "im_rad2float", /* Name */ "convert Radiance packed to float", /* Description */ IM_FN_PIO, /* Flags */ rad2float_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_float2rad() via arg vector. */ static int float2rad_vec(im_object *argv) { return im_float2rad(argv[0], argv[1]); } /* Description of im_float2rad */ static im_function float2rad_desc = { "im_float2rad", /* Name */ "convert float to Radiance packed", /* Description */ IM_FN_PIO, /* Flags */ float2rad_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_LabQ2LabS() via arg vector. */ static int LabQ2LabS_vec(im_object *argv) { return im_LabQ2LabS(argv[0], argv[1]); } /* Description of im_LabQ2LabS. */ static im_function LabQ2LabS_desc = { "im_LabQ2LabS", /* Name */ "convert LabQ to LabS", /* Description */ IM_FN_PIO, /* Flags */ LabQ2LabS_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_Lab2LabS() via arg vector. */ static int Lab2LabS_vec(im_object *argv) { return im_Lab2LabS(argv[0], argv[1]); } /* Description of im_Lab2LabS. */ static im_function Lab2LabS_desc = { "im_Lab2LabS", /* Name */ "convert Lab to LabS", /* Description */ IM_FN_PIO, /* Flags */ Lab2LabS_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_LabS2Lab() via arg vector. */ static int LabS2Lab_vec(im_object *argv) { return im_LabS2Lab(argv[0], argv[1]); } /* Description of im_LabS2Lab. */ static im_function LabS2Lab_desc = { "im_LabS2Lab", /* Name */ "convert LabS to Lab", /* Description */ IM_FN_PIO, /* Flags */ LabS2Lab_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_LabS2LabQ() via arg vector. */ static int LabS2LabQ_vec(im_object *argv) { return im_LabS2LabQ(argv[0], argv[1]); } /* Description of im_LabS2LabQ. */ static im_function LabS2LabQ_desc = { "im_LabS2LabQ", /* Name */ "convert LabS to LabQ", /* Description */ IM_FN_PIO, /* Flags */ LabS2LabQ_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_UCS2XYZ() via arg vector. */ static int UCS2XYZ_vec(im_object *argv) { return im_UCS2XYZ(argv[0], argv[1]); } /* Description of im_UCS2XYZ. */ static im_function UCS2XYZ_desc = { "im_UCS2XYZ", /* Name */ "convert UCS to XYZ", /* Description */ IM_FN_PIO, /* Flags */ UCS2XYZ_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_UCS2LCh() via arg vector. */ static int UCS2LCh_vec(im_object *argv) { return im_UCS2LCh(argv[0], argv[1]); } /* Description of im_UCS2LCh. */ static im_function UCS2LCh_desc = { "im_UCS2LCh", /* Name */ "convert UCS to LCh", /* Description */ IM_FN_PIO, /* Flags */ UCS2LCh_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_UCS2Lab() via arg vector. */ static int UCS2Lab_vec(im_object *argv) { return im_UCS2Lab(argv[0], argv[1]); } /* Description of im_UCS2Lab. */ static im_function UCS2Lab_desc = { "im_UCS2Lab", /* Name */ "convert UCS to Lab", /* Description */ IM_FN_PIO, /* Flags */ UCS2Lab_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_Yxy2XYZ via arg vector. */ static int Yxy2XYZ_vec(im_object *argv) { return im_Yxy2XYZ(argv[0], argv[1]); } /* Description of im_Yxy2XYZ. */ static im_function Yxy2XYZ_desc = { "im_Yxy2XYZ", /* Name */ "convert Yxy to XYZ", /* Description */ IM_FN_PIO, /* Flags */ Yxy2XYZ_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_XYZ2Yxy via arg vector. */ static int XYZ2Yxy_vec(im_object *argv) { return im_XYZ2Yxy(argv[0], argv[1]); } /* Description of im_XYZ2Yxy. */ static im_function XYZ2Yxy_desc = { "im_XYZ2Yxy", /* Name */ "convert XYZ to Yxy", /* Description */ IM_FN_PIO, /* Flags */ XYZ2Yxy_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_XYZ2Lab via arg vector. */ static int XYZ2Lab_vec(im_object *argv) { return im_XYZ2Lab(argv[0], argv[1]); } /* Description of im_XYZ2Lab. */ static im_function XYZ2Lab_desc = { "im_XYZ2Lab", /* Name */ "convert D65 XYZ to Lab", /* Description */ IM_FN_PIO, /* Flags */ XYZ2Lab_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; static int XYZ2Lab_temp_vec(im_object *argv) { double X0 = *((double *) argv[2]); double Y0 = *((double *) argv[3]); double Z0 = *((double *) argv[4]); return im_XYZ2Lab_temp(argv[0], argv[1], X0, Y0, Z0); } /* Description of im_XYZ2Lab_temp. */ static im_function XYZ2Lab_temp_desc = { "im_XYZ2Lab_temp", /* Name */ "convert XYZ to Lab, with a specified colour temperature", /* Description */ IM_FN_PIO, /* Flags */ XYZ2Lab_temp_vec, /* Dispatch function */ IM_NUMBER(temp_args), /* Size of arg list */ temp_args /* Arg list */ }; /* Call im_XYZ2UCS() via arg vector. */ static int XYZ2UCS_vec(im_object *argv) { return im_XYZ2UCS(argv[0], argv[1]); } /* Description of im_XYZ2UCS. */ static im_function XYZ2UCS_desc = { "im_XYZ2UCS", /* Name */ "convert XYZ to UCS", /* Description */ IM_FN_PIO, /* Flags */ XYZ2UCS_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Args to XYZ2disp and disp2XYZ. */ static im_arg_desc XYZ2disp_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DISPLAY("disp") }; /* Call im_XYZ2disp() via arg vector. */ static int XYZ2disp_vec(im_object *argv) { return im_XYZ2disp(argv[0], argv[1], argv[2]); } /* Description of im_XYZ2disp. */ static im_function XYZ2disp_desc = { "im_XYZ2disp", /* Name */ "convert XYZ to displayble", /* Description */ IM_FN_PIO, /* Flags */ XYZ2disp_vec, /* Dispatch function */ IM_NUMBER(XYZ2disp_args), /* Size of arg list */ XYZ2disp_args /* Arg list */ }; /* Call im_Lab2disp() via arg vector. */ static int Lab2disp_vec(im_object *argv) { return im_Lab2disp(argv[0], argv[1], argv[2]); } /* Description of im_Lab2disp. */ static im_function Lab2disp_desc = { "im_Lab2disp", /* Name */ "convert Lab to displayable", /* Description */ IM_FN_PIO, /* Flags */ Lab2disp_vec, /* Dispatch function */ IM_NUMBER(XYZ2disp_args), /* Size of arg list */ XYZ2disp_args /* Arg list */ }; /* Call im_LabQ2disp() via arg vector. */ static int LabQ2disp_vec(im_object *argv) { return im_LabQ2disp(argv[0], argv[1], argv[2]); } /* Description of im_LabQ2disp. */ static im_function LabQ2disp_desc = { "im_LabQ2disp", /* Name */ "convert LabQ to displayable", /* Description */ IM_FN_PIO, /* Flags */ LabQ2disp_vec, /* Dispatch function */ IM_NUMBER(XYZ2disp_args), /* Size of arg list */ XYZ2disp_args /* Arg list */ }; /* Call im_dE00_fromLab() via arg vector. */ static int dE00_fromLab_vec(im_object *argv) { return im_dE00_fromLab(argv[0], argv[1], argv[2]); } /* Description of im_dE00_fromLab. */ static im_function dE00_fromLab_desc = { "im_dE00_fromLab", /* Name */ "calculate delta-E CIE2000 for two Lab images", IM_FN_PIO, /* Flags */ dE00_fromLab_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_dECMC_fromLab() via arg vector. */ static int dECMC_fromLab_vec(im_object *argv) { return im_dECMC_fromLab(argv[0], argv[1], argv[2]); } /* Description of im_dECMC_fromLab. */ static im_function dECMC_fromLab_desc = { "im_dECMC_fromLab", /* Name */ "calculate delta-E CMC(1:1) for two Lab images", IM_FN_PIO, /* Flags */ dECMC_fromLab_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_dE_fromXYZ() via arg vector. */ static int dE_fromXYZ_vec(im_object *argv) { return im_dE_fromXYZ(argv[0], argv[1], argv[2]); } /* Description of im_dE_fromXYZ. */ static im_function dE_fromXYZ_desc = { "im_dE_fromXYZ", /* Name */ "calculate delta-E for two XYZ images", IM_FN_PIO, /* Flags */ dE_fromXYZ_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_dE_fromLab() via arg vector. */ static int dE_fromLab_vec(im_object *argv) { return im_dE_fromLab(argv[0], argv[1], argv[2]); } /* Description of im_dE_fromLab. */ static im_function dE_fromLab_desc = { "im_dE_fromLab", /* Name */ "calculate delta-E for two Lab images", IM_FN_PIO, /* Flags */ dE_fromLab_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Two images in, one out. */ static im_arg_desc dE_fromdisp_args[] = { IM_INPUT_IMAGE("in1"), IM_INPUT_IMAGE("in2"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DISPLAY("disp") }; /* Call im_dE_fromdisp() via arg vector. */ static int dE_fromdisp_vec(im_object *argv) { return im_dE_fromdisp(argv[0], argv[1], argv[2], argv[3]); } /* Description of im_dE_fromdisp. */ static im_function dE_fromdisp_desc = { "im_dE_fromdisp", /* Name */ "calculate delta-E for two displayable images", IM_FN_PIO, /* Flags */ dE_fromdisp_vec, /* Dispatch function */ IM_NUMBER(dE_fromdisp_args), /* Size of arg list */ dE_fromdisp_args /* Arg list */ }; /* Call im_dECMC_fromdisp() via arg vector. */ static int dECMC_fromdisp_vec(im_object *argv) { return im_dECMC_fromdisp(argv[0], argv[1], argv[2], argv[3]); } /* Description of im_dECMC_fromdisp. */ static im_function dECMC_fromdisp_desc = { "im_dECMC_fromdisp", /* Name */ "calculate delta-E CMC(1:1) for two displayable images", IM_FN_PIO, /* Flags */ dECMC_fromdisp_vec, /* Dispatch function */ IM_NUMBER(dE_fromdisp_args), /* Size of arg list */ dE_fromdisp_args /* Arg list */ }; /* Call im_disp2XYZ() via arg vector. */ static int disp2XYZ_vec(im_object *argv) { return im_disp2XYZ(argv[0], argv[1], argv[2]); } /* Description of im_disp2XYZ. */ static im_function disp2XYZ_desc = { "im_disp2XYZ", /* Name */ "convert displayable to XYZ", /* Description */ IM_FN_PIO, /* Flags */ disp2XYZ_vec, /* Dispatch function */ IM_NUMBER(XYZ2disp_args), /* Size of arg list */ XYZ2disp_args /* Arg list */ }; /* Call im_disp2Lab() via arg vector. */ static int disp2Lab_vec(im_object *argv) { return im_disp2Lab(argv[0], argv[1], argv[2]); } /* Description of im_disp2Lab. */ static im_function disp2Lab_desc = { "im_disp2Lab", /* Name */ "convert displayable to Lab", /* Description */ IM_FN_PIO, /* Flags */ disp2Lab_vec, /* Dispatch function */ IM_NUMBER(XYZ2disp_args), /* Size of arg list */ XYZ2disp_args /* Arg list */ }; static im_arg_desc morph_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DMASK("greyscale"), IM_INPUT_DOUBLE("L_offset"), IM_INPUT_DOUBLE("L_scale"), IM_INPUT_DOUBLE("a_scale"), IM_INPUT_DOUBLE("b_scale") }; static int morph_vec(im_object *argv) { im_mask_object *mo = argv[2]; double L_offset = *((double *) argv[3]); double L_scale = *((double *) argv[4]); double a_scale = *((double *) argv[5]); double b_scale = *((double *) argv[6]); return im_lab_morph(argv[0], argv[1], mo->mask, L_offset, L_scale, a_scale, b_scale); } static im_function morph_desc = { "im_lab_morph", /* Name */ "morph colourspace of a LAB image", IM_FN_PIO | IM_FN_PTOP, /* Flags */ morph_vec, /* Dispatch function */ IM_NUMBER(morph_args), /* Size of arg list */ morph_args /* Arg list */ }; /* Package up all these functions. */ static im_function *colour_list[] = { &LCh2Lab_desc, &LCh2UCS_desc, &Lab2LCh_desc, &Lab2LabQ_desc, &Lab2LabS_desc, &Lab2UCS_desc, &Lab2XYZ_desc, &Lab2XYZ_temp_desc, &Lab2disp_desc, &LabQ2LabS_desc, &LabQ2Lab_desc, &LabQ2XYZ_desc, &LabQ2disp_desc, &LabS2LabQ_desc, &LabS2Lab_desc, &UCS2LCh_desc, &UCS2Lab_desc, &UCS2XYZ_desc, &XYZ2Lab_desc, &XYZ2Lab_temp_desc, &XYZ2UCS_desc, &XYZ2Yxy_desc, &XYZ2disp_desc, &XYZ2sRGB_desc, &Yxy2XYZ_desc, &dE00_fromLab_desc, &dECMC_fromLab_desc, &dECMC_fromdisp_desc, &dE_fromLab_desc, &dE_fromXYZ_desc, &dE_fromdisp_desc, &disp2Lab_desc, &disp2XYZ_desc, &float2rad_desc, &icc_ac2rc_desc, &icc_export_depth_desc, &icc_import_desc, &icc_import_embedded_desc, &icc_present_desc, &icc_transform_desc, &morph_desc, &rad2float_desc, &sRGB2XYZ_desc }; /* Package of functions. */ im_package im__colour = { "colour", IM_NUMBER(colour_list), colour_list }; libvips-8.15.1/libvips/deprecated/conver_dispatch.c000066400000000000000000000724651454007373500223730ustar00rootroot00000000000000/* VIPS function dispatch tables for conversion. * * J. Cupitt, 8/4/93. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include static int system_vec(im_object *argv) { IMAGE *in = argv[0]; char *cmd = argv[1]; char **out = (char **) &argv[2]; if (im_system(in, cmd, out)) return -1; return 0; } static im_arg_desc system_args[] = { IM_INPUT_IMAGE("im"), IM_INPUT_STRING("command"), IM_OUTPUT_STRING("output") }; static im_function system_desc = { "im_system", /* Name */ "run command on image", /* Description */ 0, /* Flags */ system_vec, /* Dispatch function */ IM_NUMBER(system_args), /* Size of arg list */ system_args /* Arg list */ }; static int system_image_vec(im_object *argv) { IMAGE *in = argv[0]; IMAGE *out = argv[1]; char *in_format = argv[2]; char *out_format = argv[3]; char *cmd = argv[4]; char **log = (char **) &argv[5]; IMAGE *out_image; if (!(out_image = im_system_image(in, in_format, out_format, cmd, log))) { im_error("im_system_image", "%s", *log); return -1; } if (im_copy(out_image, out) || im_add_close_callback(out, (im_callback_fn) im_close, out_image, NULL)) { im_close(out_image); return -1; } return 0; } static im_arg_desc system_image_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_STRING("in_format"), IM_INPUT_STRING("out_format"), IM_INPUT_STRING("command"), IM_OUTPUT_STRING("log") }; static im_function system_image_desc = { "im_system_image", /* Name */ "run command on image, with image output", /* Description */ 0, /* Flags */ system_image_vec, /* Dispatch function */ IM_NUMBER(system_image_args), /* Size of arg list */ system_image_args /* Arg list */ }; static int subsample_vec(im_object *argv) { IMAGE *in = argv[0]; IMAGE *out = argv[1]; int xsh = *((int *) argv[2]); int ysh = *((int *) argv[3]); if (im_subsample(in, out, xsh, ysh)) return -1; return 0; } static im_arg_desc subsample_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("xshrink"), IM_INPUT_INT("yshrink") }; static im_function subsample_desc = { "im_subsample", /* Name */ "subsample image by integer factors", /* Description */ IM_FN_PIO, /* Flags */ subsample_vec, /* Dispatch function */ IM_NUMBER(subsample_args), /* Size of arg list */ subsample_args /* Arg list */ }; /* Args for im_gaussnoise. */ static im_arg_desc gaussnoise_args[] = { IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("xsize"), IM_INPUT_INT("ysize"), IM_INPUT_DOUBLE("mean"), IM_INPUT_DOUBLE("sigma") }; /* Call im_gaussnoise via arg vector. */ static int gaussnoise_vec(im_object *argv) { int xsize = *((int *) argv[1]); int ysize = *((int *) argv[2]); double mean = *((double *) argv[3]); double sigma = *((double *) argv[4]); if (im_gaussnoise(argv[0], xsize, ysize, mean, sigma)) return -1; return 0; } /* Description of im_gaussnoise. */ static im_function gaussnoise_desc = { "im_gaussnoise", /* Name */ "generate image of gaussian noise with specified statistics", IM_FN_PIO | IM_FN_NOCACHE, /* Flags */ gaussnoise_vec, /* Dispatch function */ IM_NUMBER(gaussnoise_args), /* Size of arg list */ gaussnoise_args /* Arg list */ }; /* Args to im_extract. */ static im_arg_desc extract_args[] = { IM_INPUT_IMAGE("input"), IM_OUTPUT_IMAGE("output"), IM_INPUT_INT("left"), IM_INPUT_INT("top"), IM_INPUT_INT("width"), IM_INPUT_INT("height"), IM_INPUT_INT("band") }; /* Call im_extract via arg vector. */ static int extract_vec(im_object *argv) { int left = *((int *) argv[2]); int top = *((int *) argv[3]); int width = *((int *) argv[4]); int height = *((int *) argv[5]); int band = *((int *) argv[6]); return im_extract_areabands(argv[0], argv[1], left, top, width, height, band, 1); } /* Description of im_extract. */ static im_function extract_desc = { "im_extract", /* Name */ "extract area/band", /* Description */ IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ extract_vec, /* Dispatch function */ IM_NUMBER(extract_args), /* Size of arg list */ extract_args /* Arg list */ }; /* Args to im_extract_area. */ static im_arg_desc extract_area_args[] = { IM_INPUT_IMAGE("input"), IM_OUTPUT_IMAGE("output"), IM_INPUT_INT("left"), IM_INPUT_INT("top"), IM_INPUT_INT("width"), IM_INPUT_INT("height") }; /* Call im_extract_area via arg vector. */ static int extract_area_vec(im_object *argv) { int x = *((int *) argv[2]); int y = *((int *) argv[3]); int w = *((int *) argv[4]); int h = *((int *) argv[5]); return im_extract_area(argv[0], argv[1], x, y, w, h); } /* Description of im_extract_area. */ static im_function extract_area_desc = { "im_extract_area", /* Name */ "extract area", /* Description */ IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ extract_area_vec, /* Dispatch function */ IM_NUMBER(extract_area_args), /* Size of arg list */ extract_area_args /* Arg list */ }; /* Args to im_extract_bands. */ static im_arg_desc extract_bands_args[] = { IM_INPUT_IMAGE("input"), IM_OUTPUT_IMAGE("output"), IM_INPUT_INT("band"), IM_INPUT_INT("nbands"), }; /* Call im_extract_bands via arg vector. */ static int extract_bands_vec(im_object *argv) { int chsel = *((int *) argv[2]); int nbands = *((int *) argv[3]); return im_extract_bands(argv[0], argv[1], chsel, nbands); } /* Description of im_extract_bands. */ static im_function extract_bands_desc = { "im_extract_bands", /* Name */ "extract several bands", /* Description */ IM_FN_PIO, /* Flags */ extract_bands_vec, /* Dispatch function */ IM_NUMBER(extract_bands_args), /* Size of arg list */ extract_bands_args /* Arg list */ }; /* Args to im_extract_band. */ static im_arg_desc extract_band_args[] = { IM_INPUT_IMAGE("input"), IM_OUTPUT_IMAGE("output"), IM_INPUT_INT("band") }; /* Call im_extract_band via arg vector. */ static int extract_band_vec(im_object *argv) { int chsel = *((int *) argv[2]); return im_extract_band(argv[0], argv[1], chsel); } /* Description of im_extract_band. */ static im_function extract_band_desc = { "im_extract_band", /* Name */ "extract band", /* Description */ IM_FN_PIO, /* Flags */ extract_band_vec, /* Dispatch function */ IM_NUMBER(extract_band_args), /* Size of arg list */ extract_band_args /* Arg list */ }; /* Args to im_extract_areabands. */ static im_arg_desc extract_areabands_args[] = { IM_INPUT_IMAGE("input"), IM_OUTPUT_IMAGE("output"), IM_INPUT_INT("left"), IM_INPUT_INT("top"), IM_INPUT_INT("width"), IM_INPUT_INT("height"), IM_INPUT_INT("band"), IM_INPUT_INT("nbands") }; /* Call im_extract_areabands via arg vector. */ static int extract_areabands_vec(im_object *argv) { int left = *((int *) argv[2]); int top = *((int *) argv[3]); int width = *((int *) argv[4]); int height = *((int *) argv[5]); int band = *((int *) argv[6]); int nbands = *((int *) argv[7]); return im_extract_areabands(argv[0], argv[1], left, top, width, height, band, nbands); } /* Description of im_extract_areabands. */ static im_function extract_areabands_desc = { "im_extract_areabands", /* Name */ "extract area and bands", /* Description */ IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ extract_areabands_vec, /* Dispatch function */ IM_NUMBER(extract_areabands_args), /* Size of arg list */ extract_areabands_args /* Arg list */ }; /* One image in, one out. */ static im_arg_desc one_in_one_out[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out") }; /* Two images in, one out. */ static im_arg_desc two_in_one_out[] = { IM_INPUT_IMAGE("in1"), IM_INPUT_IMAGE("in2"), IM_OUTPUT_IMAGE("out") }; /* Call im_bandjoin via arg vector. */ static int bandjoin_vec(im_object *argv) { return im_bandjoin(argv[0], argv[1], argv[2]); } /* Description of im_bandjoin. */ static im_function bandjoin_desc = { "im_bandjoin", /* Name */ "bandwise join of two images", /* Description */ IM_FN_PIO, /* Flags */ bandjoin_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; static im_arg_desc gbandjoin_args[] = { IM_INPUT_IMAGEVEC("in"), IM_OUTPUT_IMAGE("out") }; static int gbandjoin_vec(im_object *argv) { im_imagevec_object *iv = (im_imagevec_object *) argv[0]; return im_gbandjoin(iv->vec, argv[1], iv->n); } static im_function gbandjoin_desc = { "im_gbandjoin", /* Name */ "bandwise join of many images", /* Description */ IM_FN_PIO, /* Flags */ gbandjoin_vec, /* Dispatch function */ IM_NUMBER(gbandjoin_args), /* Size of arg list */ gbandjoin_args /* Arg list */ }; /* Args to im_text. */ static im_arg_desc text_args[] = { IM_OUTPUT_IMAGE("out"), IM_INPUT_STRING("text"), IM_INPUT_STRING("font"), IM_INPUT_INT("width"), IM_INPUT_INT("alignment"), IM_INPUT_INT("dpi") }; /* Call im_text via arg vector. */ static int text_vec(im_object *argv) { int width = *((int *) argv[3]); int alignment = *((int *) argv[4]); int dpi = *((int *) argv[5]); return im_text(argv[0], argv[1], argv[2], width, alignment, dpi); } /* Description of im_text. */ static im_function text_desc = { "im_text", /* Name */ "generate text image", /* Description */ IM_FN_PIO, /* Flags */ text_vec, /* Dispatch function */ IM_NUMBER(text_args), /* Size of arg list */ text_args /* Arg list */ }; /* Args to im_black. */ static im_arg_desc black_args[] = { IM_OUTPUT_IMAGE("output"), IM_INPUT_INT("x_size"), IM_INPUT_INT("y_size"), IM_INPUT_INT("bands") }; /* Call im_black via arg vector. */ static int black_vec(im_object *argv) { int xs = *((int *) argv[1]); int ys = *((int *) argv[2]); int bands = *((int *) argv[3]); return im_black(argv[0], xs, ys, bands); } /* Description of im_black. */ static im_function black_desc = { "im_black", /* Name */ "generate black image", /* Description */ IM_FN_PIO, /* Flags */ black_vec, /* Dispatch function */ IM_NUMBER(black_args), /* Size of arg list */ black_args /* Arg list */ }; /* Args to im_clip2fmt. */ static im_arg_desc clip2fmt_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("ofmt") }; /* Call im_clip2fmt via arg vector. */ static int clip2fmt_vec(im_object *argv) { int ofmt = *((int *) argv[2]); return im_clip2fmt(argv[0], argv[1], ofmt); } /* Description of im_clip2fmt. */ static im_function clip2fmt_desc = { "im_clip2fmt", /* Name */ "convert image format to ofmt", /* Description */ IM_FN_PIO | IM_FN_PTOP, /* Flags */ clip2fmt_vec, /* Dispatch function */ IM_NUMBER(clip2fmt_args), /* Size of arg list */ clip2fmt_args /* Arg list */ }; /* Call im_c2rect via arg vector. */ static int c2rect_vec(im_object *argv) { return im_c2rect(argv[0], argv[1]); } /* Description of im_c2rect. */ static im_function c2rect_desc = { "im_c2rect", /* Name */ "convert phase and amplitude to real and imaginary", IM_FN_PTOP | IM_FN_PIO, /* Flags */ c2rect_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_c2amph via arg vector. */ static int c2amph_vec(im_object *argv) { return im_c2amph(argv[0], argv[1]); } /* Description of im_c2amph. */ static im_function c2amph_desc = { "im_c2amph", /* Name */ "convert real and imaginary to phase and amplitude", IM_FN_PTOP | IM_FN_PIO, /* Flags */ c2amph_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_ri2c via arg vector. */ static int ri2c_vec(im_object *argv) { return im_ri2c(argv[0], argv[1], argv[2]); } /* Description of im_ri2c. */ static im_function ri2c_desc = { "im_ri2c", /* Name */ "join two non-complex images to form complex", IM_FN_PTOP | IM_FN_PIO, /* Flags */ ri2c_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_c2imag via arg vector. */ static int c2imag_vec(im_object *argv) { return im_c2imag(argv[0], argv[1]); } /* Description of im_c2imag. */ static im_function c2imag_desc = { "im_c2imag", /* Name */ "extract imaginary part of complex image", IM_FN_PTOP | IM_FN_PIO, /* Flags */ c2imag_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_c2real via arg vector. */ static int c2real_vec(im_object *argv) { return im_c2real(argv[0], argv[1]); } /* Description of im_c2real. */ static im_function c2real_desc = { "im_c2real", /* Name */ "extract real part of complex image", IM_FN_PTOP | IM_FN_PIO, /* Flags */ c2real_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Args to im_copy_set. */ static im_arg_desc copy_set_args[] = { IM_INPUT_IMAGE("input"), IM_OUTPUT_IMAGE("output"), IM_INPUT_INT("Type"), IM_INPUT_DOUBLE("Xres"), IM_INPUT_DOUBLE("Yres"), IM_INPUT_INT("Xoffset"), IM_INPUT_INT("Yoffset") }; /* Call im_copy_set via arg vector. */ static int copy_set_vec(im_object *argv) { int Type = *((int *) argv[2]); float Xres = *((double *) argv[3]); float Yres = *((double *) argv[4]); int Xoffset = *((int *) argv[5]); int Yoffset = *((int *) argv[6]); return im_copy_set(argv[0], argv[1], Type, Xres, Yres, Xoffset, Yoffset); } /* Description of im_copy_set. */ static im_function copy_set_desc = { "im_copy_set", /* Name */ "copy image, setting informational fields", /* Can't set PTOP ... we don't want to zap the LUT, we want the real * image. */ IM_FN_PIO, /* Flags */ copy_set_vec, /* Dispatch function */ IM_NUMBER(copy_set_args), /* Size of arg list */ copy_set_args /* Arg list */ }; /* Args to im_copy_set_meta. */ static im_arg_desc copy_set_meta_args[] = { IM_INPUT_IMAGE("input"), IM_OUTPUT_IMAGE("output"), IM_INPUT_STRING("field"), IM_INPUT_GVALUE("value") }; /* Call im_copy_set_meta via arg vector. */ static int copy_set_meta_vec(im_object *argv) { const char *field = argv[2]; GValue *value = argv[3]; return im_copy_set_meta(argv[0], argv[1], field, value); } /* Description of im_copy_set_meta. */ static im_function copy_set_meta_desc = { "im_copy_set_meta", /* Name */ "copy image, setting a meta field", /* Can't set PTOP ... we don't want to zap the LUT, we want the real * image. */ IM_FN_PIO, /* Flags */ copy_set_meta_vec, /* Dispatch function */ IM_NUMBER(copy_set_meta_args), /* Size of arg list */ copy_set_meta_args /* Arg list */ }; /* Args to im_copy_morph. */ static im_arg_desc copy_morph_args[] = { IM_INPUT_IMAGE("input"), IM_OUTPUT_IMAGE("output"), IM_INPUT_INT("Bands"), IM_INPUT_INT("BandFmt"), IM_INPUT_INT("Coding") }; /* Call im_copy_morph via arg vector. */ static int copy_morph_vec(im_object *argv) { int Bands = *((int *) argv[2]); int BandFmt = *((int *) argv[3]); int Coding = *((int *) argv[4]); return im_copy_morph(argv[0], argv[1], Bands, BandFmt, Coding); } /* Description of im_copy_morph. */ static im_function copy_morph_desc = { "im_copy_morph", /* Name */ "copy image, setting pixel layout", /* Can't set PTOP ... we don't want to zap the LUT, we want the real * image. */ IM_FN_PIO, /* Flags */ copy_morph_vec, /* Dispatch function */ IM_NUMBER(copy_morph_args), /* Size of arg list */ copy_morph_args /* Arg list */ }; /* Call im_copy via arg vector. */ static int copy_vec(im_object *argv) { return im_copy(argv[0], argv[1]); } /* Description of im_copy. */ static im_function copy_desc = { "im_copy", /* Name */ "copy image", /* Can't set PTOP ... we don't want to zap the LUT, we want the real * image. * * Don't cache, since we use copy to stop sharing. */ IM_FN_PIO | IM_FN_NOCACHE, copy_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_copy_file via arg vector. */ static int copy_file_vec(im_object *argv) { return im_copy_file(argv[0], argv[1]); } /* Description of im_copy_file. */ static im_function copy_file_desc = { "im_copy_file", /* Name */ "copy image to a file and return that", /* Can't set PTOP ... we don't want to zap the LUT, we want the real * image. */ IM_FN_PIO, /* Flags */ copy_file_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_copy_swap via arg vector. */ static int copy_swap_vec(im_object *argv) { return im_copy_swap(argv[0], argv[1]); } /* Description of im_copy_swap. */ static im_function copy_swap_desc = { "im_copy_swap", /* Name */ "copy image, swapping byte order", /* Can't set PTOP ... we don't want to zap the LUT, we want the real * image. */ IM_FN_PIO, /* Flags */ copy_swap_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_fliphor via arg vector. */ static int fliphor_vec(im_object *argv) { return im_fliphor(argv[0], argv[1]); } /* Description of im_fliphor. */ static im_function fliphor_desc = { "im_fliphor", /* Name */ "flip image left-right", IM_FN_PIO, /* Flags */ fliphor_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_flipver via arg vector. */ static int flipver_vec(im_object *argv) { return im_flipver(argv[0], argv[1]); } /* Description of im_flipver. */ static im_function flipver_desc = { "im_flipver", /* Name */ "flip image top-bottom", IM_FN_PIO, /* Flags */ flipver_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_falsecolour via arg vector. */ static int falsecolour_vec(im_object *argv) { return im_falsecolour(argv[0], argv[1]); } /* Description of im_falsecolour. */ static im_function falsecolour_desc = { "im_falsecolour", /* Name */ "turn luminance changes into chrominance changes", IM_FN_PTOP | IM_FN_PIO, /* Flags */ falsecolour_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Args for im_insert. */ static im_arg_desc insert_args[] = { IM_INPUT_IMAGE("in"), IM_INPUT_IMAGE("sub"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("x"), IM_INPUT_INT("y") }; /* Call im_insert via arg vector. */ static int insert_vec(im_object *argv) { int x = *((int *) argv[3]); int y = *((int *) argv[4]); return im_insert(argv[0], argv[1], argv[2], x, y); } /* Description of im_insert. */ static im_function insert_desc = { "im_insert", /* Name */ "insert sub-image into main image at position", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ insert_vec, /* Dispatch function */ IM_NUMBER(insert_args), /* Size of arg list */ insert_args /* Arg list */ }; /* Args for im_insertset. */ static im_arg_desc insertset_args[] = { IM_INPUT_IMAGE("main"), IM_INPUT_IMAGE("sub"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INTVEC("x"), IM_INPUT_INTVEC("y") }; /* Call im_insertplaceset via arg vector. */ static int insertset_vec(im_object *argv) { im_intvec_object *xv = (im_intvec_object *) argv[3]; im_intvec_object *yv = (im_intvec_object *) argv[4]; if (xv->n != yv->n) { im_error("im_insertset", "%s", _("vectors not same length")); return -1; } if (im_insertset(argv[0], argv[1], argv[2], xv->n, xv->vec, yv->vec)) return -1; return 0; } /* Description of im_insertset. */ static im_function insertset_desc = { "im_insertset", /* Name */ "insert sub into main at every position in x, y", 0, /* Flags */ insertset_vec, /* Dispatch function */ IM_NUMBER(insertset_args), /* Size of arg list */ insertset_args /* Arg list */ }; /* Call im_insert_noexpand via arg vector. */ static int insert_noexpand_vec(im_object *argv) { int x = *((int *) argv[3]); int y = *((int *) argv[4]); return im_insert_noexpand(argv[0], argv[1], argv[2], x, y); } /* Description of im_insert_noexpand. */ static im_function insert_noexpand_desc = { "im_insert_noexpand", /* Name */ "insert sub-image into main image at position, no expansion", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ insert_noexpand_vec, /* Dispatch function */ IM_NUMBER(insert_args), /* Size of arg list */ insert_args /* Arg list */ }; /* Call im_rot180 via arg vector. */ static int rot180_vec(im_object *argv) { return im_rot180(argv[0], argv[1]); } /* Description of im_rot180. */ static im_function rot180_desc = { "im_rot180", /* Name */ "rotate image 180 degrees", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ rot180_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_rot90 via arg vector. */ static int rot90_vec(im_object *argv) { return im_rot90(argv[0], argv[1]); } /* Description of im_rot90. */ static im_function rot90_desc = { "im_rot90", /* Name */ "rotate image 90 degrees clockwise", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ rot90_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_rot270 via arg vector. */ static int rot270_vec(im_object *argv) { return im_rot270(argv[0], argv[1]); } /* Description of im_rot270. */ static im_function rot270_desc = { "im_rot270", /* Name */ "rotate image 270 degrees clockwise", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ rot270_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_lrjoin via arg vector. */ static int lrjoin_vec(im_object *argv) { return im_lrjoin(argv[0], argv[1], argv[2]); } /* Description of im_lrjoin. */ static im_function lrjoin_desc = { "im_lrjoin", /* Name */ "join two images left-right", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ lrjoin_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_tbjoin via arg vector. */ static int tbjoin_vec(im_object *argv) { return im_tbjoin(argv[0], argv[1], argv[2]); } /* Description of im_tbjoin. */ static im_function tbjoin_desc = { "im_tbjoin", /* Name */ "join two images top-bottom", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ tbjoin_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_scale via arg vector. */ static int scale_vec(im_object *argv) { return im_scale(argv[0], argv[1]); } /* Description of im_scale. */ static im_function scale_desc = { "im_scale", /* Name */ "scale image linearly to fit range 0-255", IM_FN_PIO, /* Flags */ scale_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_scaleps via arg vector. */ static int scaleps_vec(im_object *argv) { return im_scaleps(argv[0], argv[1]); } /* Description of im_scaleps. */ static im_function scaleps_desc = { "im_scaleps", /* Name */ "logarithmic scale of image to fit range 0-255", 0, /* Flags */ scaleps_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Args to im_grid. */ static im_arg_desc grid_args[] = { IM_INPUT_IMAGE("input"), IM_OUTPUT_IMAGE("output"), IM_INPUT_INT("tile_height"), IM_INPUT_INT("across"), IM_INPUT_INT("down") }; /* Call im_grid via arg vector. */ static int grid_vec(im_object *argv) { int tile_height = *((int *) argv[2]); int across = *((int *) argv[3]); int down = *((int *) argv[4]); return im_grid(argv[0], argv[1], tile_height, across, down); } /* Description of im_grid. */ static im_function grid_desc = { "im_grid", /* Name */ "chop a tall thin image into a grid of images", IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ grid_vec, /* Dispatch function */ IM_NUMBER(grid_args), /* Size of arg list */ grid_args /* Arg list */ }; /* Args to im_replicate. */ static im_arg_desc replicate_args[] = { IM_INPUT_IMAGE("input"), IM_OUTPUT_IMAGE("output"), IM_INPUT_INT("across"), IM_INPUT_INT("down") }; /* Call im_replicate via arg vector. */ static int replicate_vec(im_object *argv) { int across = *((int *) argv[2]); int down = *((int *) argv[3]); return im_replicate(argv[0], argv[1], across, down); } /* Description of im_replicate. */ static im_function replicate_desc = { "im_replicate", /* Name */ "replicate an image horizontally and vertically", IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ replicate_vec, /* Dispatch function */ IM_NUMBER(replicate_args), /* Size of arg list */ replicate_args /* Arg list */ }; /* Args to im_zoom. */ static im_arg_desc zoom_args[] = { IM_INPUT_IMAGE("input"), IM_OUTPUT_IMAGE("output"), IM_INPUT_INT("xfac"), IM_INPUT_INT("yfac") }; /* Call im_zoom via arg vector. */ static int zoom_vec(im_object *argv) { int xfac = *((int *) argv[2]); int yfac = *((int *) argv[3]); return im_zoom(argv[0], argv[1], xfac, yfac); } /* Description of im_zoom. */ static im_function zoom_desc = { "im_zoom", /* Name */ "simple zoom of an image by integer factors", IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ zoom_vec, /* Dispatch function */ IM_NUMBER(zoom_args), /* Size of arg list */ zoom_args /* Arg list */ }; /* Call im_msb via arg vector. */ static int msb_vec(im_object *argv) { return im_msb(argv[0], argv[1]); } /* Description of im_msb. */ static im_function msb_desc = { "im_msb", /* Name */ "convert to uchar by discarding bits", IM_FN_PIO | IM_FN_PTOP, /* Flags */ msb_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Args to im_msb_band. */ static im_arg_desc msb_band_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("band") }; /* Call im_msb_band via arg vector. */ static int msb_band_vec(im_object *argv) { IMAGE *in = (IMAGE *) argv[0]; IMAGE *out = (IMAGE *) argv[1]; int *band = (int *) argv[2]; return im_msb_band(in, out, *band); } /* Description of im_msb_band. */ static im_function msb_band_desc = { "im_msb_band", /* Name */ "convert to single band uchar by discarding bits", IM_FN_PIO | IM_FN_PTOP, /* Flags */ msb_band_vec, /* Dispatch function */ IM_NUMBER(msb_band_args), /* Size of arg list */ msb_band_args /* Arg list */ }; /* Args to im_wrap. */ static im_arg_desc wrap_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("x"), IM_INPUT_INT("y") }; /* Call im_wrap via arg vector. */ static int wrap_vec(im_object *argv) { return im_wrap(argv[0], argv[1], *(int *) argv[2], *(int *) argv[3]); } /* Description of im_wrap. */ static im_function wrap_desc = { "im_wrap", /* Name */ "shift image origin, wrapping at sides", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ wrap_vec, /* Dispatch function */ IM_NUMBER(wrap_args), /* Size of arg list */ wrap_args /* Arg list */ }; /* Args for im_embed. */ static im_arg_desc embed_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("type"), IM_INPUT_INT("x"), IM_INPUT_INT("y"), IM_INPUT_INT("width"), IM_INPUT_INT("height") }; /* Call im_embed via arg vector. */ static int embed_vec(im_object *argv) { int type = *((int *) argv[2]); int x = *((int *) argv[3]); int y = *((int *) argv[4]); int width = *((int *) argv[5]); int height = *((int *) argv[6]); return im_embed(argv[0], argv[1], type, x, y, width, height); } /* Description of im_embed. */ static im_function embed_desc = { "im_embed", /* Name */ "embed in within a set of borders", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ embed_vec, /* Dispatch function */ IM_NUMBER(embed_args), /* Size of arg list */ embed_args /* Arg list */ }; /* Package up all these functions. */ static im_function *conv_list[] = { &gaussnoise_desc, &bandjoin_desc, &black_desc, &c2amph_desc, &c2imag_desc, &c2real_desc, &c2rect_desc, &clip2fmt_desc, ©_desc, ©_file_desc, ©_morph_desc, ©_swap_desc, ©_set_desc, ©_set_meta_desc, &extract_area_desc, &extract_areabands_desc, &extract_band_desc, &extract_bands_desc, &extract_desc, &falsecolour_desc, &fliphor_desc, &flipver_desc, &gbandjoin_desc, &grid_desc, &insert_desc, &insertset_desc, &insert_noexpand_desc, &embed_desc, &lrjoin_desc, &msb_desc, &msb_band_desc, &replicate_desc, &ri2c_desc, &rot180_desc, &rot270_desc, &rot90_desc, &scale_desc, &scaleps_desc, &subsample_desc, &system_desc, &system_image_desc, &tbjoin_desc, &text_desc, &wrap_desc, &zoom_desc }; /* Package of functions. */ im_package im__conversion = { "conversion", IM_NUMBER(conv_list), conv_list }; libvips-8.15.1/libvips/deprecated/convol_dispatch.c000066400000000000000000000261201454007373500223620ustar00rootroot00000000000000/* VIPS function dispatch tables for convolution. * * J. Cupitt, 14/2/95. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include /* One image in, one out. */ static im_arg_desc one_in_one_out[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out") }; /* Two images in, one out. */ static im_arg_desc two_in_one_out[] = { IM_INPUT_IMAGE("in1"), IM_INPUT_IMAGE("in2"), IM_OUTPUT_IMAGE("out") }; /* Args to im_addgnoise. */ static im_arg_desc addgnoise_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DOUBLE("sigma") }; /* Call im_addgnoise via arg vector. */ static int addgnoise_vec(im_object *argv) { double sigma = *((double *) argv[2]); return im_addgnoise(argv[0], argv[1], sigma); } /* Description of im_addgnoise. */ static im_function addgnoise_desc = { "im_addgnoise", /* Name */ "add gaussian noise with mean 0 and std. dev. sigma", IM_FN_PIO, /* Flags */ addgnoise_vec, /* Dispatch function */ IM_NUMBER(addgnoise_args), /* Size of arg list */ addgnoise_args /* Arg list */ }; /* Args to im_contrast_surface. */ static im_arg_desc contrast_surface_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("half_win_size"), IM_INPUT_INT("spacing") }; /* Call im_contrast_surface via arg vector. */ static int contrast_surface_vec(im_object *argv) { int half_win_size = *((int *) argv[2]); int spacing = *((int *) argv[3]); return im_contrast_surface(argv[0], argv[1], half_win_size, spacing); } /* Description of im_contrast_surface. */ static im_function contrast_surface_desc = { "im_contrast_surface", /* Name */ "find high-contrast points in an image", IM_FN_PIO, /* Flags */ contrast_surface_vec, /* Dispatch function */ IM_NUMBER(contrast_surface_args), /* Size of arg list */ contrast_surface_args /* Arg list */ }; /* Args to im_sharpen. */ static im_arg_desc sharpen_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("mask_size"), IM_INPUT_DOUBLE("x1"), IM_INPUT_DOUBLE("y2"), IM_INPUT_DOUBLE("y3"), IM_INPUT_DOUBLE("m1"), IM_INPUT_DOUBLE("m2") }; /* Call im_sharpen via arg vector. */ static int sharpen_vec(im_object *argv) { int mask_size = *((int *) argv[2]); double x1 = *((double *) argv[3]); double x2 = *((double *) argv[4]); double x3 = *((double *) argv[5]); double m1 = *((double *) argv[6]); double m2 = *((double *) argv[7]); return im_sharpen(argv[0], argv[1], mask_size, x1, x2, x3, m1, m2); } /* Description of im_sharpen. */ static im_function sharpen_desc = { "im_sharpen", /* Name */ "sharpen high frequencies of L channel of LabQ", IM_FN_PIO, /* Flags */ sharpen_vec, /* Dispatch function */ IM_NUMBER(sharpen_args), /* Size of arg list */ sharpen_args /* Arg list */ }; /* Args for convolver with imask. */ static im_arg_desc conv_imask[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_IMASK("matrix") }; /* Args for convolver with dmask. */ static im_arg_desc conv_dmask[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DMASK("matrix") }; /* Call im_compass via arg vector. */ static int compass_vec(im_object *argv) { im_mask_object *mo = argv[2]; return im_compass(argv[0], argv[1], mo->mask); } /* Description of im_compass. */ static im_function compass_desc = { "im_compass", /* Name */ "convolve with 8-way rotating integer mask", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ compass_vec, /* Dispatch function */ IM_NUMBER(conv_imask), /* Size of arg list */ conv_imask /* Arg list */ }; /* Call im_conv via arg vector. */ static int conv_vec(im_object *argv) { im_mask_object *mo = argv[2]; return im_conv(argv[0], argv[1], mo->mask); } /* Description of im_conv. */ static im_function conv_desc = { "im_conv", /* Name */ "convolve", IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ conv_vec, /* Dispatch function */ IM_NUMBER(conv_imask), /* Size of arg list */ conv_imask /* Arg list */ }; /* Call im_conv_f via arg vector. */ static int conv_f_vec(im_object *argv) { im_mask_object *mo = argv[2]; return im_conv_f(argv[0], argv[1], mo->mask); } /* Description of im_conv_f. */ static im_function conv_f_desc = { "im_conv_f", /* Name */ "convolve, with DOUBLEMASK", IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ conv_f_vec, /* Dispatch function */ IM_NUMBER(conv_dmask), /* Size of arg list */ conv_dmask /* Arg list */ }; /* Call im_convsep via arg vector. */ static int convsep_vec(im_object *argv) { im_mask_object *mo = argv[2]; return im_convsep(argv[0], argv[1], mo->mask); } /* Description of im_convsep. */ static im_function convsep_desc = { "im_convsep", /* Name */ "seperable convolution", IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ convsep_vec, /* Dispatch function */ IM_NUMBER(conv_imask), /* Size of arg list */ conv_imask /* Arg list */ }; /* Call im_convsep_f via arg vector. */ static int convsep_f_vec(im_object *argv) { im_mask_object *mo = argv[2]; return im_convsep_f(argv[0], argv[1], mo->mask); } /* Description of im_convsep_f. */ static im_function convsep_f_desc = { "im_convsep_f", /* Name */ "seperable convolution, with DOUBLEMASK", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ convsep_f_vec, /* Dispatch function */ IM_NUMBER(conv_dmask), /* Size of arg list */ conv_dmask /* Arg list */ }; /* Call im_fastcor via arg vector. */ static int fastcor_vec(im_object *argv) { return im_fastcor(argv[0], argv[1], argv[2]); } /* Description of im_fastcor. */ static im_function fastcor_desc = { "im_fastcor", /* Name */ "fast correlate in2 within in1", IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ fastcor_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_grad_x via arg vector. */ static int grad_x_vec(im_object *argv) { return im_grad_x(argv[0], argv[1]); } /* Description of im_grad_x. */ static im_function grad_x_desc = { "im_grad_x", /* Name */ "horizontal difference image", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ grad_x_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_grad_y via arg vector. */ static int grad_y_vec(im_object *argv) { return im_grad_y(argv[0], argv[1]); } /* Description of im_grad_y. */ static im_function grad_y_desc = { "im_grad_y", /* Name */ "vertical difference image", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ grad_y_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_gradcor via arg vector. */ static int gradcor_vec(im_object *argv) { return im_gradcor(argv[0], argv[1], argv[2]); } /* Description of im_gradcor. */ static im_function gradcor_desc = { "im_gradcor", /* Name */ "non-normalised correlation of gradient of in2 within in1", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ gradcor_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_gradient via arg vector. */ static int gradient_vec(im_object *argv) { im_mask_object *mo = argv[2]; return im_gradient(argv[0], argv[1], mo->mask); } /* Description of im_gradient. */ static im_function gradient_desc = { "im_gradient", /* Name */ "convolve with 2-way rotating mask", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ gradient_vec, /* Dispatch function */ IM_NUMBER(conv_imask), /* Size of arg list */ conv_imask /* Arg list */ }; /* Call im_lindetect via arg vector. */ static int lindetect_vec(im_object *argv) { im_mask_object *mo = argv[2]; return im_lindetect(argv[0], argv[1], mo->mask); } /* Description of im_lindetect. */ static im_function lindetect_desc = { "im_lindetect", /* Name */ "convolve with 4-way rotating mask", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ lindetect_vec, /* Dispatch function */ IM_NUMBER(conv_imask), /* Size of arg list */ conv_imask /* Arg list */ }; /* Call im_spcor via arg vector. */ static int spcor_vec(im_object *argv) { return im_spcor(argv[0], argv[1], argv[2]); } /* Description of im_spcor. */ static im_function spcor_desc = { "im_spcor", /* Name */ "normalised correlation of in2 within in1", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ spcor_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Args for im_aconv(). */ static im_arg_desc aconv_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DMASK("matrix"), IM_INPUT_INT("n_layers"), IM_INPUT_INT("cluster") }; /* Call im_aconv via arg vector. */ static int aconv_vec(im_object *argv) { im_mask_object *mo = argv[2]; int n_layers = *((int *) argv[3]); int cluster = *((int *) argv[4]); return im_aconv(argv[0], argv[1], mo->mask, n_layers, cluster); } /* Description of im_aconv. */ static im_function aconv_desc = { "im_aconv", /* Name */ "approximate convolution", IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ aconv_vec, /* Dispatch function */ IM_NUMBER(aconv_args), /* Size of arg list */ aconv_args /* Arg list */ }; /* Args for im_aconvsep(). */ static im_arg_desc aconvsep_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DMASK("matrix"), IM_INPUT_INT("n_layers") }; /* Call im_aconvsep via arg vector. */ static int aconvsep_vec(im_object *argv) { im_mask_object *mo = argv[2]; int n_layers = *((int *) argv[3]); return im_aconvsep(argv[0], argv[1], mo->mask, n_layers); } /* Description of im_aconvsep. */ static im_function aconvsep_desc = { "im_aconvsep", /* Name */ "approximate separable convolution", IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ aconvsep_vec, /* Dispatch function */ IM_NUMBER(aconvsep_args), /* Size of arg list */ aconvsep_args /* Arg list */ }; /* Package up all these functions. */ static im_function *convol_list[] = { &aconvsep_desc, &aconv_desc, &addgnoise_desc, &compass_desc, &contrast_surface_desc, &conv_desc, &conv_f_desc, &convsep_desc, &convsep_f_desc, &fastcor_desc, &gradcor_desc, &gradient_desc, &grad_x_desc, &grad_y_desc, &lindetect_desc, &sharpen_desc, &spcor_desc, }; /* Package of functions. */ im_package im__convolution = { "convolution", IM_NUMBER(convol_list), convol_list }; libvips-8.15.1/libvips/deprecated/cooc_funcs.c000066400000000000000000000252401454007373500213260ustar00rootroot00000000000000/* @(#) Calculates the cooccurrence matrix of an image and some of its * @(#) features. The 256x256 cooccurrence matrix of im is held by m * @(#) There should be enough margin around the box so the (dx,dy) can * @(#) access neighbouring pixels outside the box * @(#) * @(#) Usage: * @(#) int im_cooc_matrix(im, m, xpos, ypos, xsize, ysize, dx, dy, sym_flag) * @(#) IMAGE *im, *m; * @(#) int xpos, ypos, xsize, ysize; location of the box within im * @(#) int dx, dy; displacements * @(#) int sym_flag; * @(#) * @(#) int im_cooc_asm(m, asmoment) * @(#) IMAGE *m; * @(#) double *asmoment; * @(#) * @(#) int im_cooc_contrast(m, contrast) * @(#) IMAGE *m; * @(#) double *contrast; * @(#) * @(#) int im_cooc_correlation(m, correlation) * @(#) IMAGE *m; * @(#) double *correlation; * @(#) * @(#) int im_cooc_entropy(m, entropy) * @(#) IMAGE *m; * @(#) double *entropy; * @(#) * @(#) All functions return 0 on success and -1 on error * * Copyright: N. Dessipris 1991 * Written on: 2/12/1991 * Updated on: 2/12/1991 * 22/7/93 JC * - extern decls removed * - im_incheck() calls added * 28/5/97 JC * - protos added :( */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include static int im_cooc_sym(IMAGE *im, IMAGE *m, int xpos, int ypos, int xsize, int ysize, int dx, int dy) { VipsPel *input, *cpinput; int *buf, *pnt, *cpnt; double *line, *cpline; int x, y; int offset; int bufofst; int tempA, tempB; int norm; if (im_iocheck(im, m) == -1) return -1; if ((im->Bands != 1) || (im->BandFmt != IM_BANDFMT_UCHAR)) { im_error("im_cooc_sym", "%s", _("Unable to accept input")); return -1; } if ((xpos + xsize + dx > im->Xsize) || (ypos + ysize + dy > im->Ysize)) { im_error("im_cooc_sym", "%s", _("wrong args")); return -1; } if (im_cp_desc(m, im) == -1) return -1; m->Xsize = 256; m->Ysize = 256; m->BandFmt = IM_BANDFMT_DOUBLE; m->Type = IM_TYPE_B_W; if (im_setupout(m) == -1) return -1; /* malloc space to keep the read values */ buf = (int *) calloc((unsigned) m->Xsize * m->Ysize, sizeof(int)); line = (double *) calloc((unsigned) m->Xsize * m->Bands, sizeof(double)); if ((buf == NULL) || (line == NULL)) { im_error("im_cooc_sym", "%s", _("calloc failed")); return -1; } input = im->data; input += (ypos * im->Xsize + xpos); offset = dy * im->Xsize + dx; for (y = 0; y < ysize; y++) { cpinput = input; input += im->Xsize; for (x = 0; x < xsize; x++) { tempA = (int) (*cpinput); tempB = (int) (*(cpinput + offset)); bufofst = tempA + m->Xsize * tempB; (*(buf + bufofst))++; bufofst = tempB + m->Xsize * tempA; (*(buf + bufofst))++; cpinput++; } } norm = xsize * ysize * 2; pnt = buf; for (y = 0; y < m->Ysize; y++) { cpnt = pnt; pnt += m->Xsize; cpline = line; for (x = 0; x < m->Xsize; x++) *cpline++ = (double) (*cpnt++) / (double) norm; if (im_writeline(y, m, (VipsPel *) line) == -1) { im_error("im_cooc_sym", "%s", _("unable to im_writeline")); return -1; } } free((char *) buf); free((char *) line); return 0; } static int im_cooc_ord(IMAGE *im, IMAGE *m, int xpos, int ypos, int xsize, int ysize, int dx, int dy) { VipsPel *input, *cpinput; int *buf, *pnt, *cpnt; double *line, *cpline; int x, y; int offset; int bufofst; int tempA, tempB; int norm; if (im_iocheck(im, m) == -1) return -1; if ((im->Bands != 1) || (im->BandFmt != IM_BANDFMT_UCHAR)) { im_error("im_cooc_ord", "%s", _("Unable to accept input")); return -1; } if ((xpos + xsize + dx > im->Xsize) || (ypos + ysize + dy > im->Ysize)) { im_error("im_cooc_ord", "%s", _("wrong args")); return -1; } if (im_cp_desc(m, im) == -1) return -1; m->Xsize = 256; m->Ysize = 256; m->BandFmt = IM_BANDFMT_DOUBLE; if (im_setupout(m) == -1) return -1; /* malloc space to keep the read values */ buf = (int *) calloc((unsigned) m->Xsize * m->Ysize, sizeof(int)); line = (double *) calloc((unsigned) m->Xsize * m->Bands, sizeof(double)); if ((buf == NULL) || (line == NULL)) { im_error("im_cooc_ord", "%s", _("calloc failed")); return -1; } input = im->data; input += (ypos * im->Xsize + xpos); offset = dy * im->Xsize + dx; for (y = 0; y < ysize; y++) { cpinput = input; input += im->Xsize; for (x = 0; x < xsize; x++) { tempA = (int) (*cpinput); tempB = (int) (*(cpinput + offset)); bufofst = tempA + m->Xsize * tempB; (*(buf + bufofst))++; cpinput++; } } norm = xsize * ysize; pnt = buf; for (y = 0; y < m->Ysize; y++) { cpnt = pnt; pnt += m->Xsize; cpline = line; for (x = 0; x < m->Xsize; x++) *cpline++ = (double) (*cpnt++) / (double) norm; if (im_writeline(y, m, (PEL *) line) == -1) { im_error("im_cooc_ord", "%s", _("unable to im_writeline")); return -1; } } free((char *) buf); free((char *) line); return 0; } /* Keep the coocurrence matrix as a 256x256x1 double image */ int im_cooc_matrix(IMAGE *im, IMAGE *m, int xp, int yp, int xs, int ys, int dx, int dy, int flag) { if (flag == 0) return im_cooc_ord(im, m, xp, yp, xs, ys, dx, dy); else if (flag == 1) /* symmetrical cooc */ return im_cooc_sym(im, m, xp, yp, xs, ys, dx, dy); else { im_error("im_cooc_matrix", "%s", _("wrong flag!")); return -1; } } /* Calculate contrast, asmoment, entropy and correlation */ int im_cooc_asm(IMAGE *m, double *asmoment) { double temp, tmpasm, *pnt; int i; if (im_incheck(m)) return -1; if (m->Xsize != 256 || m->Ysize != 256 || m->Bands != 1 || m->BandFmt != IM_BANDFMT_DOUBLE) { im_error("im_cooc_asm", "%s", _("unable to accept input")); return -1; } tmpasm = 0.0; pnt = (double *) m->data; for (i = 0; i < m->Xsize * m->Ysize; i++) { temp = *pnt++; tmpasm += temp * temp; } *asmoment = tmpasm; return 0; } int im_cooc_contrast(IMAGE *m, double *contrast) { double dtemp, tmpcon, *pnt, *cpnt; int x, y; if (im_incheck(m)) return -1; if (m->Xsize != 256 || m->Ysize != 256 || m->Bands != 1 || m->BandFmt != IM_BANDFMT_DOUBLE) { im_error("im_cooc_contrast", "%s", _("unable to accept input")); return -1; } tmpcon = 0.0; pnt = (double *) m->data; for (y = 0; y < m->Ysize; y++) { cpnt = pnt; pnt += m->Xsize; for (x = 0; x < m->Xsize; x++) { dtemp = (double) ((y - x) * (y - x)); tmpcon += dtemp * (*cpnt); cpnt++; } } *contrast = tmpcon; return 0; } /* buffer contains the frequency distributions f[i] */ /* Note that sum(f[i]) = 1.0 and that the */ /* cooccurence matrix is symmetrical */ static void stats(double *buffer, int size, double *pmean, double *pstd) { double mean, std; register int i; double sumf; /* calculates the sum of f[i] */ double temp; /* temporary variable */ double *pbuffer; double sumf2; /* calculates the sum of f[i]^2 */ double correction; /* calulates the correction term for the variance */ double variance; /* = (sumf2 - correction)/n, n=sum(f[i]) = 1 */ mean = 0.0; std = 0.0; sumf = 0.0; sumf2 = 0.0; pbuffer = buffer; for (i = 0; i < size; i++) { temp = *pbuffer++; sumf += (temp * i); sumf2 += (temp * i * i); } correction = sumf * sumf; mean = sumf; variance = sumf2 - correction; std = sqrt(variance); *pmean = mean; *pstd = std; } int im_cooc_correlation(IMAGE *m, double *correlation) { double mcol, stdcol, mrow, stdrow; /* mean and std of cols and rows */ double *pbuf; double *cpbuf; double dtemp; register int i, j; double *row; /* Keeps the sum of rows entries as double */ double *col; /* Keeps the sum of cols entries as double */ double tmpcor = 0.0; double sum = 0.0; if (im_incheck(m)) return -1; if (m->Xsize != 256 || m->Ysize != 256 || m->Bands != 1 || m->BandFmt != IM_BANDFMT_DOUBLE) { im_error("im_cooc_correlation", "%s", _("unable to accept input")); return -1; } row = (double *) calloc((unsigned) m->Ysize, sizeof(double)); col = (double *) calloc((unsigned) m->Xsize, sizeof(double)); if (row == NULL || col == NULL) { im_error("im_cooc_correlation", "%s", _("unable to calloc")); return -1; } pbuf = (double *) m->data; for (j = 0; j < m->Ysize; j++) { cpbuf = pbuf; pbuf += m->Xsize; sum = 0.0; for (i = 0; i < m->Xsize; i++) sum += *cpbuf++; *(row + j) = sum; } pbuf = (double *) m->data; for (j = 0; j < m->Ysize; j++) { cpbuf = pbuf; pbuf++; sum = 0.0; for (i = 0; i < m->Xsize; i++) { sum += *cpbuf; cpbuf += m->Xsize; } *(col + j) = sum; } stats(row, m->Ysize, &mrow, &stdrow); stats(col, m->Ysize, &mcol, &stdcol); #ifdef DEBUG fprintf(stderr, "rows: mean=%f std=%f\ncols: mean=%f std=%f\n", mrow, stdrow, mcol, stdcol); #endif tmpcor = 0.0; pbuf = (double *) m->data; for (j = 0; j < m->Ysize; j++) { cpbuf = pbuf; pbuf += m->Xsize; for (i = 0; i < m->Xsize; i++) { dtemp = *cpbuf; tmpcor += (((double) i) * ((double) j) * dtemp); cpbuf++; } } #ifdef DEBUG fprintf(stderr, "tmpcor=%f\n", tmpcor); #endif if ((stdcol == 0.0) || (stdrow == 0)) { im_error("im_cooc_correlation", "%s", _("zero std")); return -1; } tmpcor = (tmpcor - (mcol * mrow)) / (stdcol * stdrow); *correlation = tmpcor; free((char *) row); free((char *) col); return 0; } int im_cooc_entropy(IMAGE *m, double *entropy) { double *pbuf, *pbufstart; double *cpbuf; register int i, j; double tmpent, dtemp; double val; if (im_incheck(m)) return -1; if (m->Xsize != 256 || m->Ysize != 256 || m->Bands != 1 || m->BandFmt != IM_BANDFMT_DOUBLE) { im_error("im_cooc_entropy", "%s", _("unable to accept input")); return -1; } pbufstart = (double *) m->data; tmpent = 0.0; pbuf = pbufstart; for (j = 0; j < m->Ysize; j++) { cpbuf = pbuf; pbuf += m->Xsize; for (i = 0; i < m->Xsize; i++) { if (*cpbuf != 0) { dtemp = *cpbuf; tmpent += (dtemp * log10(dtemp)); } cpbuf++; } } val = tmpent * (-1); #ifdef DEBUG fprintf(stderr, "ENT=%f\nwhich is %f bits\n", val, val / log10(2.0)); #endif *entropy = (val / log10(2.0)); return 0; } libvips-8.15.1/libvips/deprecated/deprecated_dispatch.c000066400000000000000000001504441454007373500231710ustar00rootroot00000000000000/* Function dispatch tables for deprecated operations. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include /* One image in, one out. */ static im_arg_desc one_in_one_out[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out") }; static im_arg_desc quadratic_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_IMAGE("coeff") }; static int quadratic_vec(im_object *argv) { return im_quadratic(argv[0], argv[1], argv[2]); } static im_function quadratic_desc = { "im_quadratic", /* Name */ "transform via quadratic", IM_FN_PIO, /* Flags */ quadratic_vec, /* Dispatch function */ IM_NUMBER(quadratic_args), /* Size of arg list */ quadratic_args /* Arg list */ }; /* Two images in, one out. */ static im_arg_desc two_in_one_out[] = { IM_INPUT_IMAGE("in1"), IM_INPUT_IMAGE("in2"), IM_OUTPUT_IMAGE("out") }; /* Call im_clip via arg vector. */ static int clip_vec(im_object *argv) { return im_clip(argv[0], argv[1]); } /* Description of im_clip. */ static im_function clip_desc = { "im_clip", /* Name */ "convert to unsigned 8-bit integer", IM_FN_PTOP | IM_FN_PIO, /* Flags */ clip_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_c2ps via arg vector. */ static int c2ps_vec(im_object *argv) { return im_c2ps(argv[0], argv[1]); } /* Description of im_c2ps. */ static im_function c2ps_desc = { "im_c2ps", /* Name */ "find power spectrum of complex image", IM_FN_PTOP | IM_FN_PIO, /* Flags */ c2ps_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Args for im_lhisteq. */ static im_arg_desc lhisteq_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("width"), IM_INPUT_INT("height") }; /* Args for im_stdif. */ static im_arg_desc stdif_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DOUBLE("a"), IM_INPUT_DOUBLE("m0"), IM_INPUT_DOUBLE("b"), IM_INPUT_DOUBLE("s0"), IM_INPUT_INT("xw"), IM_INPUT_INT("yw") }; /* Args to im_erode. */ static im_arg_desc erode_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_IMASK("mask") }; /* Args to im_rank. */ static im_arg_desc rank_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("xsize"), IM_INPUT_INT("ysize"), IM_INPUT_INT("n") }; /* Args for convolver with imask. */ static im_arg_desc conv_imask[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_IMASK("matrix") }; /* Args for convolver with dmask. */ static im_arg_desc conv_dmask[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DMASK("matrix") }; /* Call im_cmulnorm via arg vector. */ static int cmulnorm_vec(im_object *argv) { return im_cmulnorm(argv[0], argv[1], argv[2]); } /* Description of im_cmulnorm. */ static im_function cmulnorm_desc = { "im_cmulnorm", /* Name */ N_("multiply two complex images, normalising output"), IM_FN_PIO, /* Flags */ cmulnorm_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Four images in, one out. */ static im_arg_desc fav4_args[] = { IM_INPUT_IMAGE("in1"), IM_INPUT_IMAGE("in2"), IM_INPUT_IMAGE("in3"), IM_INPUT_IMAGE("in4"), IM_OUTPUT_IMAGE("out") }; /* Call im_fav4 via arg vector. */ static int fav4_vec(im_object *argv) { IMAGE *buf[4]; buf[0] = argv[0]; buf[1] = argv[1]; buf[2] = argv[2]; buf[3] = argv[3]; return im_fav4(&buf[0], argv[4]); } /* Description of im_fav4. */ static im_function fav4_desc = { "im_fav4", /* Name */ N_("average of 4 images"), 0, /* Flags */ fav4_vec, /* Dispatch function */ IM_NUMBER(fav4_args), /* Size of arg list */ fav4_args /* Arg list */ }; /* Args for im_gadd(). */ static im_arg_desc gadd_args[] = { IM_INPUT_DOUBLE("a"), IM_INPUT_IMAGE("in1"), IM_INPUT_DOUBLE("b"), IM_INPUT_IMAGE("in2"), IM_INPUT_DOUBLE("c"), IM_OUTPUT_IMAGE("out") }; /* Call im_gadd() via arg vector. */ static int gadd_vec(im_object *argv) { double a = *((double *) argv[0]); double b = *((double *) argv[2]); double c = *((double *) argv[4]); return im_gadd(a, argv[1], b, argv[3], c, argv[5]); } /* Description of im_gadd(). */ static im_function gadd_desc = { "im_gadd", /* Name */ N_("calculate a*in1 + b*in2 + c = outfile"), 0, /* Flags */ gadd_vec, /* Dispatch function */ IM_NUMBER(gadd_args), /* Size of arg list */ gadd_args /* Arg list */ }; /* Args for im_litecor(). */ static im_arg_desc litecor_args[] = { IM_INPUT_IMAGE("in"), IM_INPUT_IMAGE("white"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("clip"), IM_INPUT_DOUBLE("factor") }; /* Call im_litecor() via arg vector. */ static int litecor_vec(im_object *argv) { int clip = *((int *) argv[3]); double factor = *((double *) argv[4]); return im_litecor(argv[0], argv[1], argv[2], clip, factor); } /* Description of im_litecor(). */ static im_function litecor_desc = { "im_litecor", /* Name */ N_("calculate max(white)*factor*(in/white), if clip == 1"), 0, /* Flags */ litecor_vec, /* Dispatch function */ IM_NUMBER(litecor_args), /* Size of arg list */ litecor_args /* Arg list */ }; /* affine args */ static im_arg_desc affine_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DOUBLE("a"), IM_INPUT_DOUBLE("b"), IM_INPUT_DOUBLE("c"), IM_INPUT_DOUBLE("d"), IM_INPUT_DOUBLE("dx"), IM_INPUT_DOUBLE("dy"), IM_INPUT_INT("x"), IM_INPUT_INT("y"), IM_INPUT_INT("w"), IM_INPUT_INT("h") }; /* Call im_affine via arg vector. */ static int affine_vec(im_object *argv) { double a = *((double *) argv[2]); double b = *((double *) argv[3]); double c = *((double *) argv[4]); double d = *((double *) argv[5]); double dx = *((double *) argv[6]); double dy = *((double *) argv[7]); int x = *((int *) argv[8]); int y = *((int *) argv[9]); int w = *((int *) argv[10]); int h = *((int *) argv[11]); return im_affine(argv[0], argv[1], a, b, c, d, dx, dy, x, y, w, h); } /* Description of im_affine. */ static im_function affine_desc = { "im_affine", /* Name */ "affine transform", IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ affine_vec, /* Dispatch function */ IM_NUMBER(affine_args), /* Size of arg list */ affine_args /* Arg list */ }; /* similarity args */ static im_arg_desc similarity_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DOUBLE("a"), IM_INPUT_DOUBLE("b"), IM_INPUT_DOUBLE("dx"), IM_INPUT_DOUBLE("dy") }; /* Call im_similarity via arg vector. */ static int similarity_vec(im_object *argv) { double a = *((double *) argv[2]); double b = *((double *) argv[3]); double dx = *((double *) argv[4]); double dy = *((double *) argv[5]); return im_similarity(argv[0], argv[1], a, b, dx, dy); } /* Description of im_similarity. */ static im_function similarity_desc = { "im_similarity", /* Name */ "similarity transformation", IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ similarity_vec, /* Dispatch function */ IM_NUMBER(similarity_args), /* Size of arg list */ similarity_args /* Arg list */ }; /* similarity_area args */ static im_arg_desc similarity_area_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DOUBLE("a"), IM_INPUT_DOUBLE("b"), IM_INPUT_DOUBLE("dx"), IM_INPUT_DOUBLE("dy"), IM_INPUT_INT("x"), IM_INPUT_INT("y"), IM_INPUT_INT("w"), IM_INPUT_INT("h") }; /* Call im_similarity_area via arg vector. */ static int similarity_area_vec(im_object *argv) { double a = *((double *) argv[2]); double b = *((double *) argv[3]); double dx = *((double *) argv[4]); double dy = *((double *) argv[5]); int x = *((int *) argv[6]); int y = *((int *) argv[7]); int w = *((int *) argv[8]); int h = *((int *) argv[9]); return im_similarity_area(argv[0], argv[1], a, b, dx, dy, x, y, w, h); } /* Description of im_similarity_area. */ static im_function similarity_area_desc = { "im_similarity_area", /* Name */ "output area xywh of similarity transformation", IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ similarity_area_vec, /* Dispatch function */ IM_NUMBER(similarity_area_args), /* Size of arg list */ similarity_area_args /* Arg list */ }; static int icc_export_vec(im_object *argv) { int intent = *((int *) argv[3]); return im_icc_export(argv[0], argv[1], argv[2], intent); } static im_arg_desc icc_export_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_STRING("output_profile"), IM_INPUT_INT("intent") }; /* Description of im_icc_export. */ static im_function icc_export_desc = { "im_icc_export", /* Name */ "convert a float LAB to an 8-bit device image with an ICC profile", /* Description */ IM_FN_PIO, /* Flags */ icc_export_vec, /* Dispatch function */ IM_NUMBER(icc_export_args), /* Size of arg list */ icc_export_args /* Arg list */ }; /* Args for im_segment(). */ static im_arg_desc segment_args[] = { IM_INPUT_IMAGE("test"), IM_OUTPUT_IMAGE("mask"), IM_OUTPUT_INT("segments") }; /* Call im_segment() via arg vector. */ static int segment_vec(im_object *argv) { IMAGE *test = argv[0]; IMAGE *mask = argv[1]; int *serial = (int *) argv[2]; return im_segment(test, mask, serial); } /* Description of im_segment(). */ static im_function segment_desc = { "im_segment", /* Name */ "number continuous regions in an image", 0, /* Flags */ segment_vec, /* Dispatch function */ IM_NUMBER(segment_args), /* Size of arg list */ segment_args /* Arg list */ }; static int print_vec(im_object *argv) { const char *message = argv[0]; char **out = (char **) &argv[1]; if (im_print(message)) return -1; *out = im_strdup(NULL, "printed"); return 0; } static im_arg_desc print_arg_types[] = { IM_INPUT_STRING("message"), IM_OUTPUT_STRING("result") }; static im_function print_desc = { "im_print", /* Name */ "print string to stdout", /* Description */ 0, /* Flags */ print_vec, /* Dispatch function */ IM_NUMBER(print_arg_types), /* Size of arg list */ print_arg_types /* Arg list */ }; /* Call im_clip2dcm via arg vector. */ static int clip2dcm_vec(im_object *argv) { return im_clip2dcm(argv[0], argv[1]); } /* Description of im_clip2dcm. */ static im_function clip2dcm_desc = { "im_clip2dcm", /* Name */ "convert to double complex", IM_FN_PTOP | IM_FN_PIO, /* Flags */ clip2dcm_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_clip2cm via arg vector. */ static int clip2cm_vec(im_object *argv) { return im_clip2cm(argv[0], argv[1]); } /* Description of im_clip2cm. */ static im_function clip2cm_desc = { "im_clip2cm", /* Name */ "convert to complex", IM_FN_PTOP | IM_FN_PIO, /* Flags */ clip2cm_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_clip2us via arg vector. */ static int clip2us_vec(im_object *argv) { return im_clip2us(argv[0], argv[1]); } /* Description of im_clip2us. */ static im_function clip2us_desc = { "im_clip2us", /* Name */ "convert to unsigned 16-bit integer", IM_FN_PTOP | IM_FN_PIO, /* Flags */ clip2us_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_clip2ui via arg vector. */ static int clip2ui_vec(im_object *argv) { return im_clip2ui(argv[0], argv[1]); } /* Description of im_clip2ui. */ static im_function clip2ui_desc = { "im_clip2ui", /* Name */ "convert to unsigned 32-bit integer", IM_FN_PTOP | IM_FN_PIO, /* Flags */ clip2ui_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_clip2s via arg vector. */ static int clip2s_vec(im_object *argv) { return im_clip2s(argv[0], argv[1]); } /* Description of im_clip2s. */ static im_function clip2s_desc = { "im_clip2s", /* Name */ "convert to signed 16-bit integer", IM_FN_PTOP | IM_FN_PIO, /* Flags */ clip2s_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_clip2i via arg vector. */ static int clip2i_vec(im_object *argv) { return im_clip2i(argv[0], argv[1]); } /* Description of im_clip2i. */ static im_function clip2i_desc = { "im_clip2i", /* Name */ "convert to signed 32-bit integer", IM_FN_PTOP | IM_FN_PIO, /* Flags */ clip2i_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_clip2d via arg vector. */ static int clip2d_vec(im_object *argv) { return im_clip2d(argv[0], argv[1]); } /* Description of im_clip2d. */ static im_function clip2d_desc = { "im_clip2d", /* Name */ "convert to double-precision float", IM_FN_PTOP | IM_FN_PIO, /* Flags */ clip2d_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_clip2f via arg vector. */ static int clip2f_vec(im_object *argv) { return im_clip2f(argv[0], argv[1]); } /* Description of im_clip2f. */ static im_function clip2f_desc = { "im_clip2f", /* Name */ "convert to single-precision float", IM_FN_PTOP | IM_FN_PIO, /* Flags */ clip2f_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_clip2c via arg vector. */ static int clip2c_vec(im_object *argv) { return im_clip2c(argv[0], argv[1]); } /* Description of im_clip2c. */ static im_function clip2c_desc = { "im_clip2c", /* Name */ "convert to signed 8-bit integer", IM_FN_PTOP | IM_FN_PIO, /* Flags */ clip2c_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Args to im_thresh. */ static im_arg_desc thresh_args[] = { IM_INPUT_IMAGE("input"), IM_OUTPUT_IMAGE("output"), IM_INPUT_DOUBLE("threshold") }; /* Call im_thresh via arg vector. */ static int thresh_vec(im_object *argv) { double t1 = *((double *) argv[2]); return im_thresh(argv[0], argv[1], t1); } /* Description of im_thresh. */ static im_function thresh_desc = { "im_thresh", /* Name */ "slice an image at a threshold", 0, /* Flags */ thresh_vec, /* Dispatch function */ IM_NUMBER(thresh_args), /* Size of arg list */ thresh_args /* Arg list */ }; /* Args to im_slice. */ static im_arg_desc slice_args[] = { IM_INPUT_IMAGE("input"), IM_OUTPUT_IMAGE("output"), IM_INPUT_DOUBLE("thresh1"), IM_INPUT_DOUBLE("thresh2") }; /* Call im_slice via arg vector. */ static int slice_vec(im_object *argv) { double t1 = *((double *) argv[2]); double t2 = *((double *) argv[3]); return im_slice(argv[0], argv[1], t1, t2); } /* Description of im_slice. */ static im_function slice_desc = { "im_slice", /* Name */ "slice an image using two thresholds", 0, /* Flags */ slice_vec, /* Dispatch function */ IM_NUMBER(slice_args), /* Size of arg list */ slice_args /* Arg list */ }; /* Args for im_convsub. */ static im_arg_desc convsub_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_IMASK("matrix"), IM_INPUT_INT("xskip"), IM_INPUT_INT("yskip") }; /* Call im_convsub via arg vector. */ static int convsub_vec(im_object *argv) { im_mask_object *mo = argv[2]; int xskip = *((int *) argv[3]); int yskip = *((int *) argv[4]); return im_convsub(argv[0], argv[1], mo->mask, xskip, yskip); } /* Description of im_convsub. */ static im_function convsub_desc = { "im_convsub", /* Name */ "convolve uchar to uchar, sub-sampling by xskip, yskip", IM_FN_TRANSFORM, /* Flags */ convsub_vec, /* Dispatch function */ IM_NUMBER(convsub_args), /* Size of arg list */ convsub_args /* Arg list */ }; /* Args to im_bernd. */ static im_arg_desc bernd_args[] = { IM_INPUT_STRING("tiffname"), IM_INPUT_INT("left"), IM_INPUT_INT("top"), IM_INPUT_INT("width"), IM_INPUT_INT("height") }; /* Call im_bernd via arg vector. */ static int bernd_vec(im_object *argv) { char *name = argv[0]; int left = *((int *) argv[1]); int top = *((int *) argv[2]); int width = *((int *) argv[3]); int height = *((int *) argv[4]); return im_bernd(name, left, top, width, height); } /* Description of im_bernd. */ static im_function bernd_desc = { "im_bernd", /* Name */ "extract from pyramid as jpeg", /* Description */ 0, /* Flags */ bernd_vec, /* Dispatch function */ IM_NUMBER(bernd_args), /* Size of arg list */ bernd_args /* Arg list */ }; /* Args for im_line. */ static im_arg_desc line_args[] = { IM_RW_IMAGE("im"), IM_INPUT_INT("x1"), IM_INPUT_INT("y1"), IM_INPUT_INT("x2"), IM_INPUT_INT("y2"), IM_INPUT_INT("pelval") }; /* Call im_line via arg vector. */ static int line_vec(im_object *argv) { int x1 = *((int *) argv[1]); int y1 = *((int *) argv[2]); int x2 = *((int *) argv[3]); int y2 = *((int *) argv[4]); int pel = *((int *) argv[5]); return im_line(argv[0], x1, y1, x2, y2, pel); } /* Description of im_line. */ static im_function line_desc = { "im_line", /* Name */ "draw line between points (x1,y1) and (x2,y2)", 0, /* Flags */ line_vec, /* Dispatch function */ IM_NUMBER(line_args), /* Size of arg list */ line_args /* Arg list */ }; /* Args for im_resize_linear. */ static im_arg_desc resize_linear_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("X"), IM_INPUT_INT("Y") }; /* Call im_resize_linear via arg vector. */ static int resize_linear_vec(im_object *argv) { int X = *((int *) argv[2]); int Y = *((int *) argv[3]); return im_resize_linear(argv[0], argv[1], X, Y); } /* Description of im_resize_linear. */ static im_function resize_linear_desc = { "im_resize_linear", /* Name */ "resize to X by Y pixels with linear interpolation", 0, /* Flags */ resize_linear_vec, /* Dispatch function */ IM_NUMBER(resize_linear_args), /* Size of arg list */ resize_linear_args /* Arg list */ }; /* Args for im_insertplaceset. */ static im_arg_desc insertplaceset_args[] = { IM_INPUT_IMAGE("main"), IM_INPUT_IMAGE("sub"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INTVEC("x"), IM_INPUT_INTVEC("y") }; /* Call im_insertplaceplaceset via arg vector. */ static int insertplaceset_vec(im_object *argv) { im_intvec_object *xv = (im_intvec_object *) argv[3]; im_intvec_object *yv = (im_intvec_object *) argv[4]; if (xv->n != yv->n) { im_error("im_insertplaceset", "%s", _("vectors not same length")); return -1; } if (im_insertset(argv[0], argv[1], argv[2], xv->n, xv->vec, yv->vec)) return -1; return 0; } /* Description of im_insertplaceset. */ static im_function insertplaceset_desc = { "im_insertplaceset", /* Name */ "insert sub into main at every position in x, y", 0, /* Flags */ insertplaceset_vec, /* Dispatch function */ IM_NUMBER(insertplaceset_args), /* Size of arg list */ insertplaceset_args /* Arg list */ }; /* Call im_spcor_raw via arg vector. */ static int spcor_raw_vec(im_object *argv) { return im_spcor_raw(argv[0], argv[1], argv[2]); } /* Description of im_spcor_raw. */ static im_function spcor_raw_desc = { "im_spcor_raw", /* Name */ "normalised correlation of in2 within in1, no black padding", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ spcor_raw_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_gradcor_raw via arg vector. */ static int gradcor_raw_vec(im_object *argv) { return im_gradcor_raw(argv[0], argv[1], argv[2]); } /* Description of im_gradcor_raw. */ static im_function gradcor_raw_desc = { "im_gradcor_raw", /* Name */ "non-normalised correlation of gradient of in2 within in1, no padding", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ gradcor_raw_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_fastcor_raw via arg vector. */ static int fastcor_raw_vec(im_object *argv) { return im_fastcor_raw(argv[0], argv[1], argv[2]); } /* Description of im_fastcor_raw. */ static im_function fastcor_raw_desc = { "im_fastcor_raw", /* Name */ "fast correlate in2 within in1, no border", IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ fastcor_raw_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_convsepf_raw via arg vector. */ static int convsepf_raw_vec(im_object *argv) { im_mask_object *mo = argv[2]; return im_convsepf_raw(argv[0], argv[1], mo->mask); } /* Description of im_convsepf_raw. */ static im_function convsepf_raw_desc = { "im_convsepf_raw", /* Name */ "seperable convolution, with DOUBLEMASK, no border", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ convsepf_raw_vec, /* Dispatch function */ IM_NUMBER(conv_dmask), /* Size of arg list */ conv_dmask /* Arg list */ }; /* Call im_convsep_raw via arg vector. */ static int convsep_raw_vec(im_object *argv) { im_mask_object *mo = argv[2]; return im_convsep_raw(argv[0], argv[1], mo->mask); } /* Description of im_convsep_raw. */ static im_function convsep_raw_desc = { "im_convsep_raw", /* Name */ "seperable convolution, no border", IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ convsep_raw_vec, /* Dispatch function */ IM_NUMBER(conv_imask), /* Size of arg list */ conv_imask /* Arg list */ }; /* Call im_convf_raw via arg vector. */ static int convf_raw_vec(im_object *argv) { im_mask_object *mo = argv[2]; return im_convf_raw(argv[0], argv[1], mo->mask); } /* Description of im_convf_raw. */ static im_function convf_raw_desc = { "im_convf_raw", /* Name */ "convolve, with DOUBLEMASK, no border", IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ convf_raw_vec, /* Dispatch function */ IM_NUMBER(conv_dmask), /* Size of arg list */ conv_dmask /* Arg list */ }; /* Call im_conv_raw via arg vector. */ static int conv_raw_vec(im_object *argv) { im_mask_object *mo = argv[2]; return im_conv_raw(argv[0], argv[1], mo->mask); } /* Description of im_conv_raw. */ static im_function conv_raw_desc = { "im_conv_raw", /* Name */ "convolve, no border", IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ conv_raw_vec, /* Dispatch function */ IM_NUMBER(conv_imask), /* Size of arg list */ conv_imask /* Arg list */ }; /* Args to im_contrast_surface_raw. */ static im_arg_desc contrast_surface_raw_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("half_win_size"), IM_INPUT_INT("spacing") }; /* Call im_contrast_surface_raw via arg vector. */ static int contrast_surface_raw_vec(im_object *argv) { int half_win_size = *((int *) argv[2]); int spacing = *((int *) argv[3]); return im_contrast_surface_raw(argv[0], argv[1], half_win_size, spacing); } /* Description of im_contrast_surface_raw. */ static im_function contrast_surface_raw_desc = { "im_contrast_surface_raw", /* Name */ "find high-contrast points in an image", IM_FN_PIO, /* Flags */ contrast_surface_raw_vec, /* Dispatch function */ IM_NUMBER(contrast_surface_raw_args), /* Size of arg list */ contrast_surface_raw_args /* Arg list */ }; /* Call im_stdif_raw via arg vector. */ static int stdif_raw_vec(im_object *argv) { double a = *((double *) argv[2]); double m0 = *((double *) argv[3]); double b = *((double *) argv[4]); double s0 = *((double *) argv[5]); int xw = *((int *) argv[6]); int yw = *((int *) argv[7]); return im_stdif_raw(argv[0], argv[1], a, m0, b, s0, xw, yw); } /* Description of im_stdif. */ static im_function stdif_raw_desc = { "im_stdif_raw", /* Name */ "statistical differencing, no border", IM_FN_PIO, /* Flags */ stdif_raw_vec, /* Dispatch function */ IM_NUMBER(stdif_args), /* Size of arg list */ stdif_args /* Arg list */ }; /* Call im_lhisteq_raw via arg vector. */ static int lhisteq_raw_vec(im_object *argv) { int xw = *((int *) argv[2]); int yw = *((int *) argv[3]); return im_lhisteq_raw(argv[0], argv[1], xw, yw); } /* Description of im_lhisteq_raw. */ static im_function lhisteq_raw_desc = { "im_lhisteq_raw", /* Name */ "local histogram equalisation, no border", IM_FN_PIO, /* Flags */ lhisteq_raw_vec, /* Dispatch function */ IM_NUMBER(lhisteq_args), /* Size of arg list */ lhisteq_args /* Arg list */ }; /* Call im_rank_raw via arg vector. */ static int rank_raw_vec(im_object *argv) { int xsize = *((int *) argv[2]); int ysize = *((int *) argv[3]); int n = *((int *) argv[4]); return im_rank_raw(argv[0], argv[1], xsize, ysize, n); } /* Description of im_rank_raw. */ static im_function rank_raw_desc = { "im_rank_raw", /* Name */ "rank filter nth element of xsize/ysize window, no border", IM_FN_PIO, /* Flags */ rank_raw_vec, /* Dispatch function */ IM_NUMBER(rank_args), /* Size of arg list */ rank_args /* Arg list */ }; /* Call im_erode_raw via arg vector. */ static int erode_raw_vec(im_object *argv) { im_mask_object *mo = argv[2]; return im_erode_raw(argv[0], argv[1], mo->mask); } /* Description of im_erode_raw. */ static im_function erode_raw_desc = { "im_erode_raw", /* Name */ "erode image with mask", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ erode_raw_vec, /* Dispatch function */ IM_NUMBER(erode_args), /* Size of arg list */ erode_args /* Arg list */ }; /* Call im_dilate_raw via arg vector. */ static int dilate_raw_vec(im_object *argv) { im_mask_object *mo = argv[2]; return im_dilate_raw(argv[0], argv[1], mo->mask); } /* Description of im_dilate_raw. */ static im_function dilate_raw_desc = { "im_dilate_raw", /* Name */ "dilate image with mask", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ dilate_raw_vec, /* Dispatch function */ IM_NUMBER(erode_args), /* Size of arg list */ erode_args /* Arg list */ }; /* Call im_convsepf via arg vector. */ static int convsepf_vec(im_object *argv) { im_mask_object *mo = argv[2]; return im_convsepf(argv[0], argv[1], mo->mask); } /* Description of im_convsepf. */ static im_function convsepf_desc = { "im_convsepf", /* Name */ "seperable convolution, with DOUBLEMASK", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ convsepf_vec, /* Dispatch function */ IM_NUMBER(conv_dmask), /* Size of arg list */ conv_dmask /* Arg list */ }; /* Call im_convf via arg vector. */ static int convf_vec(im_object *argv) { im_mask_object *mo = argv[2]; return im_convf(argv[0], argv[1], mo->mask); } /* Description of im_convf. */ static im_function convf_desc = { "im_convf", /* Name */ "convolve, with DOUBLEMASK", IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ convf_vec, /* Dispatch function */ IM_NUMBER(conv_dmask), /* Size of arg list */ conv_dmask /* Arg list */ }; /* Args for im_circle. */ static im_arg_desc circle_args[] = { IM_RW_IMAGE("image"), IM_INPUT_INT("cx"), IM_INPUT_INT("cy"), IM_INPUT_INT("radius"), IM_INPUT_INT("intensity") }; /* Call im_circle via arg vector. */ static int circle_vec(im_object *argv) { int cx = *((int *) argv[1]); int cy = *((int *) argv[2]); int radius = *((int *) argv[3]); int intensity = *((int *) argv[4]); return im_circle(argv[0], cx, cy, radius, intensity); } /* Description of im_circle. */ static im_function circle_desc = { "im_circle", /* Name */ "plot circle on image", 0, /* Flags */ circle_vec, /* Dispatch function */ IM_NUMBER(circle_args), /* Size of arg list */ circle_args /* Arg list */ }; /* Args for im_flood_blob_copy(). */ static im_arg_desc flood_blob_copy_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("start_x"), IM_INPUT_INT("start_y"), IM_INPUT_DOUBLEVEC("ink") }; /* Call im_flood_blob_copy() via arg vector. */ static int flood_blob_copy_vec(im_object *argv) { IMAGE *in = argv[0]; IMAGE *out = argv[1]; int start_x = *((int *) argv[2]); int start_y = *((int *) argv[3]); im_doublevec_object *dv = (im_doublevec_object *) argv[4]; PEL *ink; if (!(ink = im__vector_to_ink("im_flood_blob_copy", in, dv->n, dv->vec))) return -1; return im_flood_blob_copy(in, out, start_x, start_y, ink); } /* Description of im_flood_blob_copy(). */ static im_function flood_blob_copy_desc = { "im_flood_blob_copy", /* Name */ "flood with ink from start_x, start_y while pixel == start pixel", 0, /* Flags */ flood_blob_copy_vec, /* Dispatch function */ IM_NUMBER(flood_blob_copy_args), /* Size of arg list */ flood_blob_copy_args /* Arg list */ }; /* Args for im_flood_copy(). */ static im_arg_desc flood_copy_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("start_x"), IM_INPUT_INT("start_y"), IM_INPUT_DOUBLEVEC("ink") }; /* Call im_flood_copy() via arg vector. */ static int flood_copy_vec(im_object *argv) { IMAGE *in = argv[0]; IMAGE *out = argv[1]; int start_x = *((int *) argv[2]); int start_y = *((int *) argv[3]); im_doublevec_object *dv = (im_doublevec_object *) argv[4]; PEL *ink; if (!(ink = im__vector_to_ink("im_flood_copy", in, dv->n, dv->vec))) return -1; return im_flood_copy(in, out, start_x, start_y, ink); } /* Description of im_flood_copy(). */ static im_function flood_copy_desc = { "im_flood_copy", /* Name */ "flood with ink from start_x, start_y while pixel == start pixel", 0, /* Flags */ flood_copy_vec, /* Dispatch function */ IM_NUMBER(flood_copy_args), /* Size of arg list */ flood_copy_args /* Arg list */ }; /* Args for im_flood_other_copy(). */ static im_arg_desc flood_other_copy_args[] = { IM_INPUT_IMAGE("test"), IM_INPUT_IMAGE("mark"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("start_x"), IM_INPUT_INT("start_y"), IM_INPUT_INT("serial") }; /* Call im_flood_other_copy() via arg vector. */ static int flood_other_copy_vec(im_object *argv) { IMAGE *test = argv[0]; IMAGE *mark = argv[1]; IMAGE *out = argv[2]; int start_x = *((int *) argv[3]); int start_y = *((int *) argv[4]); int serial = *((int *) argv[5]); return im_flood_other_copy(test, mark, out, start_x, start_y, serial); } /* Description of im_flood_other_copy(). */ static im_function flood_other_copy_desc = { "im_flood_other_copy", /* Name */ "flood mark with serial from start_x, start_y while pixel == start pixel", 0, /* Flags */ flood_other_copy_vec, /* Dispatch function */ IM_NUMBER(flood_other_copy_args), /* Size of arg list */ flood_other_copy_args /* Arg list */ }; /* Args for im_insertplace. */ static im_arg_desc insertplace_args[] = { IM_RW_IMAGE("main"), IM_INPUT_IMAGE("sub"), IM_INPUT_INT("x"), IM_INPUT_INT("y") }; /* Call im_insertplace via arg vector. */ static int insertplace_vec(im_object *argv) { int x = *((int *) argv[2]); int y = *((int *) argv[3]); return im_insertplace(argv[0], argv[1], x, y); } /* Description of im_insertplace. */ static im_function insertplace_desc = { "im_insertplace", /* Name */ "draw image sub inside image main at position (x,y)", 0, /* Flags */ insertplace_vec, /* Dispatch function */ IM_NUMBER(insertplace_args), /* Size of arg list */ insertplace_args /* Arg list */ }; /* Used to be called im_remainderconst_vec, stupidly. */ static int remainderconst_vec_vec(im_object *argv) { im_doublevec_object *dv = (im_doublevec_object *) argv[2]; return im_remainder_vec(argv[0], argv[1], dv->n, dv->vec); } static im_arg_desc remainderconst_vec_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DOUBLEVEC("x") }; static im_function remainderconst_vec_desc = { "im_remainderconst_vec", /* Name */ N_("remainder after integer division by a vector of constants"), /* Description */ IM_FN_PIO | IM_FN_PTOP, /* Flags */ remainderconst_vec_vec, /* Dispatch function */ IM_NUMBER(remainderconst_vec_args), /* Size of arg list */ remainderconst_vec_args /* Arg list */ }; /* Args to im_mask2vips. */ static im_arg_desc mask2vips_args[] = { IM_INPUT_DMASK("input"), IM_OUTPUT_IMAGE("output"), }; /* Call im_mask2vips via arg vector. */ static int mask2vips_vec(im_object *argv) { im_mask_object *mo = argv[0]; return im_mask2vips(mo->mask, argv[1]); } /* Description of im_mask2vips. */ static im_function mask2vips_desc = { "im_mask2vips", /* Name */ "convert DOUBLEMASK to VIPS image", 0, /* Flags */ mask2vips_vec, /* Dispatch function */ IM_NUMBER(mask2vips_args), /* Size of arg list */ mask2vips_args /* Arg list */ }; /* Args to im_vips2mask. */ static im_arg_desc vips2mask_args[] = { IM_INPUT_IMAGE("input"), IM_OUTPUT_DMASK("output"), }; /* Call im_vips2mask via arg vector. */ static int vips2mask_vec(im_object *argv) { im_mask_object *mo = argv[1]; if (!(mo->mask = im_vips2mask(argv[0], mo->name))) return -1; return 0; } /* Description of im_vips2mask. */ static im_function vips2mask_desc = { "im_vips2mask", /* Name */ "convert VIPS image to DOUBLEMASK", 0, /* Flags */ vips2mask_vec, /* Dispatch function */ IM_NUMBER(vips2mask_args), /* Size of arg list */ vips2mask_args /* Arg list */ }; /* One image plus one constant in, one image out. */ static im_arg_desc int_in_one_out[] = { IM_INPUT_IMAGE("in1"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("c") }; /* One image plus one constant in, one image out. */ static im_arg_desc double_in_one_out[] = { IM_INPUT_IMAGE("in1"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DOUBLE("c") }; /* One image plus doublevec in, one image out. */ static im_arg_desc vec_in_one_out[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DOUBLEVEC("vec") }; /* Call im_andimage via arg vector. */ static int andimage_vec(im_object *argv) { return im_andimage(argv[0], argv[1], argv[2]); } /* Description of im_andimage. */ static im_function andimage_desc = { "im_andimage", /* Name */ "bitwise and of two images", /* Description */ IM_FN_PTOP | IM_FN_PIO, /* Flags */ andimage_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_andimageconst via arg vector. */ static int andimageconst_vec(im_object *argv) { int c = *((int *) argv[2]); return im_andimageconst(argv[0], argv[1], c); } /* Description of im_andconst. */ static im_function andimageconst_desc = { "im_andimageconst", /* Name */ "bitwise and of an image with a constant", IM_FN_PTOP | IM_FN_PIO, /* Flags */ andimageconst_vec, /* Dispatch function */ IM_NUMBER(int_in_one_out), /* Size of arg list */ int_in_one_out /* Arg list */ }; /* Call im_andimage_vec via arg vector. */ static int andimage_vec_vec(im_object *argv) { im_doublevec_object *rv = (im_doublevec_object *) argv[2]; return im_andimage_vec(argv[0], argv[1], rv->n, rv->vec); } /* Description of im_andimageconst. */ static im_function andimage_vec_desc = { "im_andimage_vec", /* Name */ "bitwise and of an image with a vector constant", IM_FN_PTOP | IM_FN_PIO, /* Flags */ andimage_vec_vec, /* Dispatch function */ IM_NUMBER(vec_in_one_out), /* Size of arg list */ vec_in_one_out /* Arg list */ }; /* Call im_orimage via arg vector. */ static int orimage_vec(im_object *argv) { return im_orimage(argv[0], argv[1], argv[2]); } /* Description of im_orimage. */ static im_function orimage_desc = { "im_orimage", /* Name */ "bitwise or of two images", /* Description */ IM_FN_PTOP | IM_FN_PIO, /* Flags */ orimage_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_orimageconst via arg vector. */ static int orimageconst_vec(im_object *argv) { int c = *((int *) argv[2]); return im_orimageconst(argv[0], argv[1], c); } /* Description of im_orimageconst. */ static im_function orimageconst_desc = { "im_orimageconst", /* Name */ "bitwise or of an image with a constant", IM_FN_PTOP | IM_FN_PIO, /* Flags */ orimageconst_vec, /* Dispatch function */ IM_NUMBER(int_in_one_out), /* Size of arg list */ int_in_one_out /* Arg list */ }; /* Call im_orimage_vec via arg vector. */ static int orimage_vec_vec(im_object *argv) { im_doublevec_object *rv = (im_doublevec_object *) argv[2]; return im_orimage_vec(argv[0], argv[1], rv->n, rv->vec); } /* Description of im_orimage_vec. */ static im_function orimage_vec_desc = { "im_orimage_vec", /* Name */ "bitwise or of an image with a vector constant", IM_FN_PTOP | IM_FN_PIO, /* Flags */ orimage_vec_vec, /* Dispatch function */ IM_NUMBER(vec_in_one_out), /* Size of arg list */ vec_in_one_out /* Arg list */ }; /* Call im_eorimage via arg vector. */ static int eorimage_vec(im_object *argv) { return im_eorimage(argv[0], argv[1], argv[2]); } /* Description of im_eorimage. */ static im_function eorimage_desc = { "im_eorimage", /* Name */ "bitwise eor of two images", /* Description */ IM_FN_PTOP | IM_FN_PIO, /* Flags */ eorimage_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_eorimageconst via arg vector. */ static int eorimageconst_vec(im_object *argv) { int c = *((int *) argv[2]); return im_eorimageconst(argv[0], argv[1], c); } /* Description of im_eorimageconst. */ static im_function eorimageconst_desc = { "im_eorimageconst", /* Name */ "bitwise eor of an image with a constant", IM_FN_PTOP | IM_FN_PIO, /* Flags */ eorimageconst_vec, /* Dispatch function */ IM_NUMBER(int_in_one_out), /* Size of arg list */ int_in_one_out /* Arg list */ }; /* Call im_eorimage_vec via arg vector. */ static int eorimage_vec_vec(im_object *argv) { im_doublevec_object *rv = (im_doublevec_object *) argv[2]; return im_eorimage_vec(argv[0], argv[1], rv->n, rv->vec); } /* Description of im_eorimage_vec. */ static im_function eorimage_vec_desc = { "im_eorimage_vec", /* Name */ "bitwise eor of an image with a vector constant", IM_FN_PTOP | IM_FN_PIO, /* Flags */ eorimage_vec_vec, /* Dispatch function */ IM_NUMBER(vec_in_one_out), /* Size of arg list */ vec_in_one_out /* Arg list */ }; /* Call im_shiftleft via arg vector. */ static int shiftleft_vec(im_object *argv) { int n = *((int *) argv[2]); return im_shiftleft(argv[0], argv[1], n); } /* Description of im_shiftleft. */ static im_function shiftleft_desc = { "im_shiftleft", /* Name */ "shift image n bits to left", IM_FN_PTOP | IM_FN_PIO, /* Flags */ shiftleft_vec, /* Dispatch function */ IM_NUMBER(int_in_one_out), /* Size of arg list */ int_in_one_out /* Arg list */ }; /* Call im_shiftleft_vec via arg vector. */ static int shiftleft_vec_vec(im_object *argv) { im_doublevec_object *rv = (im_doublevec_object *) argv[2]; return im_shiftleft_vec(argv[0], argv[1], rv->n, rv->vec); } /* Description of im_shiftleft_vec. */ static im_function shiftleft_vec_desc = { "im_shiftleft_vec", /* Name */ "shift image array bits to left", IM_FN_PTOP | IM_FN_PIO, /* Flags */ shiftleft_vec_vec, /* Dispatch function */ IM_NUMBER(vec_in_one_out), /* Size of arg list */ vec_in_one_out /* Arg list */ }; /* Call im_shiftright via arg vector. */ static int shiftright_vec(im_object *argv) { int n = *((int *) argv[2]); return im_shiftright(argv[0], argv[1], n); } /* Description of im_shiftright. */ static im_function shiftright_desc = { "im_shiftright", /* Name */ "shift integer image n bits to right", IM_FN_PTOP | IM_FN_PIO, /* Flags */ shiftright_vec, /* Dispatch function */ IM_NUMBER(int_in_one_out), /* Size of arg list */ int_in_one_out /* Arg list */ }; /* Call im_shiftright_vec via arg vector. */ static int shiftright_vec_vec(im_object *argv) { im_doublevec_object *rv = (im_doublevec_object *) argv[2]; return im_shiftright_vec(argv[0], argv[1], rv->n, rv->vec); } /* Description of im_shiftright_vec. */ static im_function shiftright_vec_desc = { "im_shiftright_vec", /* Name */ "shift image array bits to right", IM_FN_PTOP | IM_FN_PIO, /* Flags */ shiftright_vec_vec, /* Dispatch function */ IM_NUMBER(vec_in_one_out), /* Size of arg list */ vec_in_one_out /* Arg list */ }; /* Call im_equal via arg vector. */ static int equal_vec(im_object *argv) { return im_equal(argv[0], argv[1], argv[2]); } /* Description of im_equal. */ static im_function equal_desc = { "im_equal", /* Name */ "two images equal in value", /* Description */ IM_FN_PTOP | IM_FN_PIO, /* Flags */ equal_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_equalconst via arg vector. */ static int equalconst_vec(im_object *argv) { double c = *((double *) argv[2]); return im_equalconst(argv[0], argv[1], c); } /* Description of im_equalconst. */ static im_function equalconst_desc = { "im_equalconst", /* Name */ "image equals const", /* Description */ IM_FN_PTOP | IM_FN_PIO, /* Flags */ equalconst_vec, /* Dispatch function */ IM_NUMBER(double_in_one_out), /* Size of arg list */ double_in_one_out /* Arg list */ }; /* Call im_equal_vec via arg vector. */ static int equal_vec_vec(im_object *argv) { im_doublevec_object *rv = (im_doublevec_object *) argv[2]; return im_equal_vec(argv[0], argv[1], rv->n, rv->vec); } /* Description of im_equal_vec. */ static im_function equal_vec_desc = { "im_equal_vec", /* Name */ "image equals doublevec", /* Description */ IM_FN_PTOP | IM_FN_PIO, /* Flags */ equal_vec_vec, /* Dispatch function */ IM_NUMBER(vec_in_one_out), /* Size of arg list */ vec_in_one_out /* Arg list */ }; /* Call im_notequal via arg vector. */ static int notequal_vec(im_object *argv) { return im_notequal(argv[0], argv[1], argv[2]); } /* Description of im_notequal. */ static im_function notequal_desc = { "im_notequal", /* Name */ "two images not equal in value", /* Description */ IM_FN_PTOP | IM_FN_PIO, /* Flags */ notequal_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_notequalconst via arg vector. */ static int notequalconst_vec(im_object *argv) { double c = *((double *) argv[2]); return im_notequalconst(argv[0], argv[1], c); } /* Description of im_notequalconst. */ static im_function notequalconst_desc = { "im_notequalconst", /* Name */ "image does not equal const", /* Description */ IM_FN_PTOP | IM_FN_PIO, /* Flags */ notequalconst_vec, /* Dispatch function */ IM_NUMBER(double_in_one_out), /* Size of arg list */ double_in_one_out /* Arg list */ }; /* Call im_notequal_vec via arg vector. */ static int notequal_vec_vec(im_object *argv) { im_doublevec_object *rv = (im_doublevec_object *) argv[2]; return im_notequal_vec(argv[0], argv[1], rv->n, rv->vec); } /* Description of im_notequal_vec. */ static im_function notequal_vec_desc = { "im_notequal_vec", /* Name */ "image does not equal doublevec", /* Description */ IM_FN_PTOP | IM_FN_PIO, /* Flags */ notequal_vec_vec, /* Dispatch function */ IM_NUMBER(vec_in_one_out), /* Size of arg list */ vec_in_one_out /* Arg list */ }; /* Call im_less via arg vector. */ static int less_vec(im_object *argv) { return im_less(argv[0], argv[1], argv[2]); } /* Description of im_less. */ static im_function less_desc = { "im_less", /* Name */ "in1 less than in2 in value", /* Description */ IM_FN_PTOP | IM_FN_PIO, /* Flags */ less_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_lessconst via arg vector. */ static int lessconst_vec(im_object *argv) { double c = *((double *) argv[2]); return im_lessconst(argv[0], argv[1], c); } /* Description of im_lessconst. */ static im_function lessconst_desc = { "im_lessconst", /* Name */ "in less than const", /* Description */ IM_FN_PTOP | IM_FN_PIO, /* Flags */ lessconst_vec, /* Dispatch function */ IM_NUMBER(double_in_one_out), /* Size of arg list */ double_in_one_out /* Arg list */ }; /* Call im_less_vec via arg vector. */ static int less_vec_vec(im_object *argv) { im_doublevec_object *rv = (im_doublevec_object *) argv[2]; return im_less_vec(argv[0], argv[1], rv->n, rv->vec); } /* Description of im_less_vec. */ static im_function less_vec_desc = { "im_less_vec", /* Name */ "in less than doublevec", /* Description */ IM_FN_PTOP | IM_FN_PIO, /* Flags */ less_vec_vec, /* Dispatch function */ IM_NUMBER(vec_in_one_out), /* Size of arg list */ vec_in_one_out /* Arg list */ }; /* Call im_more via arg vector. */ static int more_vec(im_object *argv) { return im_more(argv[0], argv[1], argv[2]); } /* Description of im_more. */ static im_function more_desc = { "im_more", /* Name */ "in1 more than in2 in value", /* Description */ IM_FN_PTOP | IM_FN_PIO, /* Flags */ more_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_moreconst via arg vector. */ static int moreconst_vec(im_object *argv) { double c = *((double *) argv[2]); return im_moreconst(argv[0], argv[1], c); } /* Description of im_moreconst. */ static im_function moreconst_desc = { "im_moreconst", /* Name */ "in more than const", /* Description */ IM_FN_PTOP | IM_FN_PIO, /* Flags */ moreconst_vec, /* Dispatch function */ IM_NUMBER(double_in_one_out), /* Size of arg list */ double_in_one_out /* Arg list */ }; /* Call im_more_vec via arg vector. */ static int more_vec_vec(im_object *argv) { im_doublevec_object *rv = (im_doublevec_object *) argv[2]; return im_more_vec(argv[0], argv[1], rv->n, rv->vec); } /* Description of im_more_vec. */ static im_function more_vec_desc = { "im_more_vec", /* Name */ "in more than doublevec", /* Description */ IM_FN_PTOP | IM_FN_PIO, /* Flags */ more_vec_vec, /* Dispatch function */ IM_NUMBER(vec_in_one_out), /* Size of arg list */ vec_in_one_out /* Arg list */ }; /* Call im_moreeq via arg vector. */ static int moreeq_vec(im_object *argv) { return im_moreeq(argv[0], argv[1], argv[2]); } /* Description of im_moreeq. */ static im_function moreeq_desc = { "im_moreeq", /* Name */ "in1 more than or equal to in2 in value", IM_FN_PTOP | IM_FN_PIO, /* Flags */ moreeq_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_moreeqconst via arg vector. */ static int moreeqconst_vec(im_object *argv) { double c = *((double *) argv[2]); return im_moreeqconst(argv[0], argv[1], c); } /* Description of im_moreeqconst. */ static im_function moreeqconst_desc = { "im_moreeqconst", /* Name */ "in more than or equal to const", IM_FN_PTOP | IM_FN_PIO, /* Flags */ moreeqconst_vec, /* Dispatch function */ IM_NUMBER(double_in_one_out), /* Size of arg list */ double_in_one_out /* Arg list */ }; /* Call im_moreeq_vec via arg vector. */ static int moreeq_vec_vec(im_object *argv) { im_doublevec_object *rv = (im_doublevec_object *) argv[2]; return im_moreeq_vec(argv[0], argv[1], rv->n, rv->vec); } /* Description of im_moreeq_vec. */ static im_function moreeq_vec_desc = { "im_moreeq_vec", /* Name */ "in more than or equal to doublevec", IM_FN_PTOP | IM_FN_PIO, /* Flags */ moreeq_vec_vec, /* Dispatch function */ IM_NUMBER(vec_in_one_out), /* Size of arg list */ vec_in_one_out /* Arg list */ }; /* Call im_lesseq via arg vector. */ static int lesseq_vec(im_object *argv) { return im_lesseq(argv[0], argv[1], argv[2]); } /* Description of im_lesseq. */ static im_function lesseq_desc = { "im_lesseq", /* Name */ "in1 less than or equal to in2 in value", IM_FN_PTOP | IM_FN_PIO, /* Flags */ lesseq_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_lesseqconst via arg vector. */ static int lesseqconst_vec(im_object *argv) { double c = *((double *) argv[2]); return im_lesseqconst(argv[0], argv[1], c); } /* Description of im_lesseqconst. */ static im_function lesseqconst_desc = { "im_lesseqconst", /* Name */ "in less than or equal to const", IM_FN_PTOP | IM_FN_PIO, /* Flags */ lesseqconst_vec, /* Dispatch function */ IM_NUMBER(double_in_one_out), /* Size of arg list */ double_in_one_out /* Arg list */ }; /* Call im_lesseq_vec via arg vector. */ static int lesseq_vec_vec(im_object *argv) { im_doublevec_object *rv = (im_doublevec_object *) argv[2]; return im_lesseq_vec(argv[0], argv[1], rv->n, rv->vec); } /* Description of im_lesseq_vec. */ static im_function lesseq_vec_desc = { "im_lesseq_vec", /* Name */ "in less than or equal to doublevec", IM_FN_PTOP | IM_FN_PIO, /* Flags */ lesseq_vec_vec, /* Dispatch function */ IM_NUMBER(vec_in_one_out), /* Size of arg list */ vec_in_one_out /* Arg list */ }; /* If-then-else args. */ static im_arg_desc ifthenelse_args[] = { IM_INPUT_IMAGE("cond"), IM_INPUT_IMAGE("in1"), IM_INPUT_IMAGE("in2"), IM_OUTPUT_IMAGE("out") }; /* Call im_blend via arg vector. */ static int blend_vec(im_object *argv) { return im_blend(argv[0], argv[1], argv[2], argv[3]); } /* Description of im_blend. */ static im_function blend_desc = { "im_blend", /* Name */ "use cond image to blend between images in1 and in2", IM_FN_PTOP | IM_FN_PIO, /* Flags */ blend_vec, /* Dispatch function */ IM_NUMBER(ifthenelse_args), /* Size of arg list */ ifthenelse_args /* Arg list */ }; /* Call im_ifthenelse via arg vector. */ static int ifthenelse_vec(im_object *argv) { return im_ifthenelse(argv[0], argv[1], argv[2], argv[3]); } /* Description of im_ifthenelse. */ static im_function ifthenelse_desc = { "im_ifthenelse", /* Name */ "use cond image to choose pels from image in1 or in2", IM_FN_PTOP | IM_FN_PIO, /* Flags */ ifthenelse_vec, /* Dispatch function */ IM_NUMBER(ifthenelse_args), /* Size of arg list */ ifthenelse_args /* Arg list */ }; /* Call im_argb2rgba() via arg vector. */ static int argb2rgba_vec(im_object *argv) { return im_argb2rgba(argv[0], argv[1]); } /* Description of im_argb2rgba. */ static im_function argb2rgba_desc = { "im_argb2rgba", /* Name */ "convert pre-multipled argb to png-style rgba", /* Description */ IM_FN_PIO, /* Flags */ argb2rgba_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Package up all these functions. */ static im_function *deprecated_list[] = { &argb2rgba_desc, &flood_copy_desc, &flood_blob_copy_desc, &flood_other_copy_desc, &clip_desc, &c2ps_desc, &resize_linear_desc, &cmulnorm_desc, &fav4_desc, &gadd_desc, &icc_export_desc, &litecor_desc, &affine_desc, &clip2c_desc, &clip2cm_desc, &clip2d_desc, &clip2dcm_desc, &clip2f_desc, &clip2i_desc, &convsub_desc, &convf_desc, &convsepf_desc, &clip2s_desc, &clip2ui_desc, &insertplaceset_desc, &clip2us_desc, &print_desc, &slice_desc, &bernd_desc, &segment_desc, &line_desc, &thresh_desc, &convf_raw_desc, &conv_raw_desc, &contrast_surface_raw_desc, &convsepf_raw_desc, &convsep_raw_desc, &fastcor_raw_desc, &gradcor_raw_desc, &spcor_raw_desc, &lhisteq_raw_desc, &stdif_raw_desc, &rank_raw_desc, &dilate_raw_desc, &erode_raw_desc, &similarity_area_desc, &similarity_desc, &remainderconst_vec_desc, &mask2vips_desc, &vips2mask_desc, &insertplace_desc, &circle_desc, &andimage_desc, &andimageconst_desc, &andimage_vec_desc, &orimage_desc, &orimageconst_desc, &orimage_vec_desc, &eorimage_desc, &eorimageconst_desc, &eorimage_vec_desc, &shiftleft_vec_desc, &shiftleft_desc, &shiftright_vec_desc, &shiftright_desc, &blend_desc, &equal_desc, &equal_vec_desc, &equalconst_desc, &ifthenelse_desc, &less_desc, &less_vec_desc, &lessconst_desc, &lesseq_desc, &lesseq_vec_desc, &lesseqconst_desc, &more_desc, &more_vec_desc, &moreconst_desc, &moreeq_desc, &moreeq_vec_desc, &moreeqconst_desc, ¬equal_desc, ¬equal_vec_desc, ¬equalconst_desc, &quadratic_desc }; /* Package of functions. */ im_package im__deprecated = { "deprecated", IM_NUMBER(deprecated_list), deprecated_list }; libvips-8.15.1/libvips/deprecated/dispatch_types.c000066400000000000000000000412141454007373500222270ustar00rootroot00000000000000/* Define built-in VIPS types. * * J. Cupitt, 8/4/93. * * Modified: * 21/5/07 * - any length vector (Tom) * 23/8/10 * - add IM_TYPE_RW flag for im__rw_image */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include /* String containing each of the characters which can be used within a * single command line argument to separate the elements of a vector. */ #define VEC_SEPS " " /* Init function for input displays. Just a stub nowadays. */ static int input_display_init(im_object *obj, char *str) { *obj = NULL; return 0; } /* Input display type. */ im_type_desc im__input_display = { IM_TYPE_DISPLAY, /* It's a display */ 0, /* No storage needed */ IM_TYPE_ARG, /* It requires a command-line arg */ input_display_init, /* Init function */ NULL /* Destroy function */ }; /* Output display type. */ im_type_desc im__output_display = { IM_TYPE_DISPLAY, /* It's a display */ sizeof(void *), /* Memory to allocate */ IM_TYPE_OUTPUT, /* Output object */ NULL, /* Init function */ NULL /* Destroy function */ }; /* Init function for input images. */ static int input_image_init(im_object *obj, char *str) { IMAGE **im = (IMAGE **) obj; return !(*im = vips__deprecated_open_read(str, FALSE)); } /* Input image type. */ im_type_desc im__input_image = { IM_TYPE_IMAGE, /* It's an image */ 0, /* No storage needed */ IM_TYPE_ARG, /* It requires a command-line arg */ (im_init_obj_fn) input_image_init, /* Init function */ (im_dest_obj_fn) im_close /* Destroy function */ }; /* Init function for output images. */ static int output_image_init(im_object *obj, char *str) { IMAGE **im = (IMAGE **) obj; return !(*im = vips__deprecated_open_write(str)); } /* Output image type. */ im_type_desc im__output_image = { IM_TYPE_IMAGE, /* It's an image */ 0, /* No storage to be allocated */ IM_TYPE_OUTPUT | IM_TYPE_ARG, /* Flags! */ (im_init_obj_fn) output_image_init, /* Init function */ (im_dest_obj_fn) im_close /* Destroy function */ }; /* Init function for RW images. */ static int rw_image_init(im_object *obj, char *str) { IMAGE **im = (IMAGE **) obj; return !(*im = im_open(str, "rw")); } /* RW image type. */ im_type_desc im__rw_image = { IM_TYPE_IMAGE, /* It's an image */ 0, /* No storage to be allocated */ IM_TYPE_ARG | IM_TYPE_RW, /* Read-write object, needs an arg */ (im_init_obj_fn) rw_image_init, /* Init function */ (im_dest_obj_fn) im_close /* Destroy function */ }; /* im_imagevec_object destroy function. */ static int imagevec_dest(im_object obj) { im_imagevec_object *iv = obj; if (iv->vec) { int i; for (i = 0; i < iv->n; i++) if (iv->vec[i]) { im_close(iv->vec[i]); iv->vec[i] = NULL; } g_free(iv->vec); iv->vec = NULL; iv->n = 0; } return 0; } /* Init function for imagevec input. */ static int input_imagevec_init(im_object *obj, char *str) { im_imagevec_object *iv = *obj; char **strv; int nargs; int i; strv = g_strsplit(str, VEC_SEPS, -1); nargs = g_strv_length(strv); if (!(iv->vec = VIPS_ARRAY(NULL, nargs, IMAGE *))) { g_strfreev(strv); return -1; } iv->n = nargs; /* Must NULL them out in case we fail halfway though opening them all. */ for (i = 0; i < nargs; i++) iv->vec[i] = NULL; for (i = 0; i < nargs; i++) if (!(iv->vec[i] = im_open(strv[i], "rd"))) { g_strfreev(strv); return -1; } g_strfreev(strv); return 0; } /* Input image vector type. */ im_type_desc im__input_imagevec = { IM_TYPE_IMAGEVEC, /* It's an array of IMAGE */ sizeof(im_imagevec_object), /* Memory to allocate in vec build */ IM_TYPE_ARG, /* It requires a command-line arg */ input_imagevec_init, /* Init function */ imagevec_dest /* Destroy function */ }; /* Init function for masks. "str" can be NULL for output masks. */ static int mask_init(im_object *obj, char *str) { im_mask_object *mo = *obj; /* Install string, clear mask. */ if (str && !(mo->name = im_strdup(NULL, str))) return -1; mo->mask = NULL; return 0; } /* Init function for input dmasks. As above, but read in the mask. */ static int dmask_init(im_object *obj, char *str) { im_mask_object *mo = *obj; if (mask_init(obj, str)) return -1; if (!(mo->mask = im_read_dmask(str))) return -1; return 0; } /* Init function for input imasks. */ static int imask_init(im_object *obj, char *str) { im_mask_object *mo = *obj; if (mask_init(obj, str)) return -1; if (!(mo->mask = im_read_imask(str))) return -1; return 0; } /* DOUBLEMASK destroy function. */ static int dmask_dest(im_object obj) { im_mask_object *mo = obj; VIPS_FREE(mo->name); VIPS_FREEF(im_free_dmask, mo->mask); return 0; } /* INTMASK destroy function. */ static int imask_dest(im_object obj) { im_mask_object *mo = obj; VIPS_FREE(mo->name); VIPS_FREEF(im_free_imask, mo->mask); return 0; } /* As above, but save the mask first. */ static int save_dmask_dest(im_object obj) { im_mask_object *mo = obj; if (mo->mask && im_write_dmask(mo->mask)) return -1; return dmask_dest(obj); } /* As above, but save the mask first. */ static int save_imask_dest(im_object obj) { im_mask_object *mo = obj; if (mo->mask && im_write_imask(mo->mask)) return -1; return imask_dest(obj); } /* Output dmask type. */ im_type_desc im__output_dmask = { IM_TYPE_DMASK, /* It's a mask */ sizeof(im_mask_object), /* Storage for mask object */ IM_TYPE_OUTPUT | IM_TYPE_ARG, /* Flags */ mask_init, /* Init function */ save_dmask_dest /* Save and destroy function */ }; /* Input dmask type. */ im_type_desc im__input_dmask = { IM_TYPE_DMASK, /* It's a mask */ sizeof(im_mask_object), /* Storage for mask object */ IM_TYPE_ARG, /* It requires a command-line arg */ dmask_init, /* Init function */ dmask_dest /* Destroy function */ }; /* Output imask type. */ im_type_desc im__output_imask = { IM_TYPE_IMASK, /* It's a mask */ sizeof(im_mask_object), /* Storage for mask object */ IM_TYPE_OUTPUT | IM_TYPE_ARG, /* Flags */ mask_init, /* Init function */ save_imask_dest /* Save and destroy function */ }; /* Input imask type. */ im_type_desc im__input_imask = { IM_TYPE_IMASK, /* It's a mask */ sizeof(im_mask_object), /* Storage for mask object */ IM_TYPE_ARG, /* It requires a command-line arg */ imask_init, /* Init function */ imask_dest /* Destroy function */ }; /* Output dmask to screen type. Set a `print' function to get actual output. * Used for things like "stats". */ im_type_desc im__output_dmask_screen = { IM_TYPE_DMASK, /* It's a mask */ sizeof(im_mask_object), /* Storage for mask object */ IM_TYPE_OUTPUT, /* It's an output argument */ mask_init, /* Init function */ dmask_dest /* Destroy function */ }; /* Init function for double input. */ static int input_double_init(im_object *obj, char *str) { double *d = (double *) *obj; *d = g_ascii_strtod(str, NULL); return 0; } /* Input double type. */ im_type_desc im__input_double = { IM_TYPE_DOUBLE, /* It's a double */ sizeof(double), /* Memory to allocate */ IM_TYPE_ARG, /* It requires a command-line arg */ input_double_init, /* Init function */ NULL /* Destroy function */ }; /* im_doublevec_object destroy function. */ static int doublevec_dest(im_object obj) { im_doublevec_object *dv = obj; if (dv->vec) { g_free(dv->vec); dv->vec = NULL; dv->n = 0; } return 0; } /* Init function for doublevec input. */ static int input_doublevec_init(im_object *obj, char *str) { im_doublevec_object *dv = *obj; char **strv; int nargs; int i; strv = g_strsplit(str, VEC_SEPS, -1); nargs = g_strv_length(strv); if (!(dv->vec = VIPS_ARRAY(NULL, nargs, double))) { g_strfreev(strv); return -1; } dv->n = nargs; for (i = 0; i < nargs; i++) { dv->vec[i] = g_ascii_strtod(strv[i], NULL); if (errno) { vips_error_system(errno, "input_doublevec_init", _("bad double \"%s\""), strv[i]); g_strfreev(strv); return -1; } } g_strfreev(strv); return 0; } /* Input double vector type. */ im_type_desc im__input_doublevec = { IM_TYPE_DOUBLEVEC, /* It's an array of double */ sizeof(im_doublevec_object), /* Memory to allocate in vec build */ IM_TYPE_ARG, /* It requires a command-line arg */ input_doublevec_init, /* Init function */ doublevec_dest /* Destroy function */ }; /* Print function for doublevec output. */ int im__dvprint(im_object obj) { im_doublevec_object *dv = obj; int i; for (i = 0; i < dv->n; i++) printf("%G ", dv->vec[i]); printf("\n"); return 0; } /* Output double vector type. */ im_type_desc im__output_doublevec = { IM_TYPE_DOUBLEVEC, /* It's an array of double */ sizeof(im_doublevec_object), /* Memory to allocate in vec build */ IM_TYPE_OUTPUT, /* Output type */ NULL, /* Init function */ doublevec_dest /* Destroy function */ }; /* im_intvec_object destroy function. */ static int intvec_dest(im_object obj) { im_intvec_object *iv = obj; if (iv->vec) { g_free(iv->vec); iv->vec = NULL; iv->n = 0; } return 0; } /* Init function for intvec input. */ static int input_intvec_init(im_object *obj, char *str) { im_intvec_object *iv = *obj; char **strv; int nargs; int i; strv = g_strsplit(str, VEC_SEPS, -1); nargs = g_strv_length(strv); if (!(iv->vec = VIPS_ARRAY(NULL, nargs, int))) { g_strfreev(strv); return -1; } iv->n = nargs; for (i = 0; i < nargs; i++) { long int val = strtol(strv[i], NULL, 10); if (errno) { vips_error_system(errno, "input_intvec_init", _("bad integer \"%s\""), strv[i]); g_strfreev(strv); return -1; } if (INT_MAX < val || INT_MIN > val) { vips_error("input_intvec_init", "%ld overflows integer type", val); } iv->vec[i] = (int) val; } g_strfreev(strv); return 0; } /* Input int vector type. */ im_type_desc im__input_intvec = { IM_TYPE_INTVEC, /* It's an array of int */ sizeof(im_intvec_object), /* Memory to allocate in vec build */ IM_TYPE_ARG, /* It requires a command-line arg */ input_intvec_init, /* Init function */ intvec_dest /* Destroy function */ }; /* Print function for intvec output. */ int im__ivprint(im_object obj) { im_intvec_object *iv = obj; int i; for (i = 0; i < iv->n; i++) printf("%d ", iv->vec[i]); printf("\n"); return 0; } /* Output int vector type. */ im_type_desc im__output_intvec = { IM_TYPE_INTVEC, /* It's an array of int */ sizeof(im_intvec_object), /* Memory to allocate in vec build */ IM_TYPE_OUTPUT, /* Output arg */ (im_init_obj_fn) NULL, /* Init function */ (im_dest_obj_fn) intvec_dest /* Destroy function */ }; /* Init function for int input. */ static int input_int_init(im_object *obj, char *str) { int *i = (int *) *obj; if (sscanf(str, "%d", i) != 1) { vips_error("input_int", "%s", _("bad format")); return -1; } return 0; } /* Input int type. */ im_type_desc im__input_int = { IM_TYPE_INT, /* It's an int */ sizeof(int), /* Memory to allocate */ IM_TYPE_ARG, /* It requires a command-line arg */ input_int_init, /* Init function */ NULL /* Destroy function */ }; /* Init function for string input. */ static int input_string_init(im_object *obj, char *str) { if (!(*obj = (im_object) im_strdup(NULL, str))) return -1; return 0; } /* Input string type. */ im_type_desc im__input_string = { IM_TYPE_STRING, /* It's a string */ 0, /* Memory to allocate */ IM_TYPE_ARG, /* It requires a command-line arg */ input_string_init, /* Init function */ vips_free /* Destroy function */ }; /* Output string type. */ im_type_desc im__output_string = { IM_TYPE_STRING, /* It's a string */ 0, /* Memory to allocate */ IM_TYPE_OUTPUT, /* It's an output argument */ NULL, /* Init function */ vips_free /* Destroy function */ }; /* Output double type. */ im_type_desc im__output_double = { IM_TYPE_DOUBLE, /* It's a double */ sizeof(double), /* Memory to allocate */ IM_TYPE_OUTPUT, /* It's an output argument */ NULL, /* Init function */ NULL /* Destroy function */ }; /* Output complex type. */ im_type_desc im__output_complex = { IM_TYPE_COMPLEX, /* It's a complex */ 2 * sizeof(double), /* Memory to allocate */ IM_TYPE_OUTPUT, /* It's an output argument */ NULL, /* Init function */ NULL /* Destroy function */ }; /* Output int type. */ im_type_desc im__output_int = { IM_TYPE_INT, /* It's an int */ sizeof(int), /* Memory to allocate */ IM_TYPE_OUTPUT, /* It's an output argument */ NULL, /* Init function */ NULL /* Destroy function */ }; /* Print function for int output. */ int im__iprint(im_object obj) { int *i = (int *) obj; printf("%d\n", *i); return 0; } /* Print function for string output. */ int im__sprint(im_object obj) { char *s = (char *) obj; printf("%s\n", s); return 0; } /* Print function for double output. */ int im__dprint(im_object obj) { double *d = (double *) obj; printf("%G\n", *d); return 0; } /* Print function for complex output. */ int im__cprint(im_object obj) { double *d = (double *) obj; printf("%G %G\n", d[0], d[1]); return 0; } /* Statistics to stdout. */ int im__dmsprint(im_object obj) { DOUBLEMASK *mask = ((im_mask_object *) obj)->mask; double *row; int i, j; /* Print statistics band stats eg: 2 bands:b 0,1 */ printf("band minimum maximum sum " "sum^2 mean deviation\n"); for (j = 0; j < mask->ysize; j++) { row = mask->coeff + j * mask->xsize; if (j == 0) printf("all"); else printf("%2d ", j); for (i = 0; i < 6; i++) printf("%12g", row[i]); printf("\n"); } return 0; } /* GValue */ /* Init function for input gvalue. Just make a string ... will get cast to * whatever later. */ static int input_gvalue_init(im_object *obj, char *str) { GValue *value = *obj; g_value_init(value, G_TYPE_STRING); g_value_set_string(value, str); return 0; } static int gvalue_free(im_object obj) { GValue *value = obj; /* If it's just zeros (built but not used) we'll get an error if we * unset(). */ if (G_IS_VALUE(value)) g_value_unset(value); return 0; } /* Input GValue type. */ im_type_desc im__input_gvalue = { IM_TYPE_GVALUE, sizeof(GValue), /* Need some storage */ IM_TYPE_ARG, /* It requires a command-line arg */ (im_init_obj_fn) input_gvalue_init, /* Init function */ (im_dest_obj_fn) gvalue_free /* Destroy function */ }; int im__gprint(im_object obj) { GValue *value = obj; char *str_value; str_value = g_strdup_value_contents(value); printf("%s\n", str_value); g_free(str_value); return 0; } /* Init function for output gvalue. Just init to zero. */ static int output_gvalue_init(im_object *obj) { GValue *value = *obj; memset(value, 0, sizeof(GValue)); return 0; } im_type_desc im__output_gvalue = { IM_TYPE_GVALUE, sizeof(GValue), /* Need some storage */ IM_TYPE_OUTPUT, /* No arg needed (just print) */ (im_init_obj_fn) output_gvalue_init, /* Init function */ (im_dest_obj_fn) gvalue_free /* Destroy function */ }; /* Init function for input interpolate. * * This is used as a helper function by the C++ interface, so amke it public. */ int vips__input_interpolate_init(im_object *obj, char *str) { GType type = g_type_from_name("VipsInterpolate"); VipsObjectClass *class = VIPS_OBJECT_CLASS(g_type_class_ref(type)); VipsObject *object; g_assert(class); if (!(object = vips_object_new_from_string(class, str))) return -1; if (vips_object_build(object)) { g_object_unref(object); return -1; } *obj = object; return 0; } static int input_interpolate_dest(im_object obj) { g_object_unref((GObject *) obj); return 0; } im_type_desc im__input_interpolate = { IM_TYPE_INTERPOLATE, 0, /* No storage required */ IM_TYPE_ARG, /* It requires a command-line arg */ vips__input_interpolate_init, /* Init function */ input_interpolate_dest /* Destroy function */ }; libvips-8.15.1/libvips/deprecated/fits.c000066400000000000000000000044201454007373500201470ustar00rootroot00000000000000/* Read FITS files with cfitsio * * 13/12/11 * - just a compat stub now */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include int im_fits2vips(const char *filename, VipsImage *out) { VipsImage *t; if (vips_fitsload(filename, &t, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_vips2fits(VipsImage *in, const char *filename) { if (vips_fitssave(in, filename, NULL)) return -1; return 0; } static int isfits(const char *name) { return vips_foreign_is_a("fitsload", name); } static const char *fits_suffs[] = { ".fits", NULL }; /* fits format adds no new members. */ typedef VipsFormat VipsFormatFits; typedef VipsFormatClass VipsFormatFitsClass; static void vips_format_fits_class_init(VipsFormatFitsClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsFormatClass *format_class = (VipsFormatClass *) class; object_class->nickname = "fits"; object_class->description = _("FITS"); format_class->is_a = isfits; format_class->load = im_fits2vips; format_class->save = im_vips2fits; format_class->suffs = fits_suffs; } static void vips_format_fits_init(VipsFormatFits *object) { } G_DEFINE_TYPE(VipsFormatFits, vips_format_fits, VIPS_TYPE_FORMAT); libvips-8.15.1/libvips/deprecated/format.c000066400000000000000000000242621454007373500205000ustar00rootroot00000000000000/* VIPS function dispatch tables for image format load/save. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include /* To iterate over supported formats, we build a temp list of subclasses of * VipsFormat, sort by priority, iterate, and free. */ static void * format_add_class(VipsFormatClass *format, GSList **formats) { if (!G_TYPE_IS_ABSTRACT(G_OBJECT_CLASS_TYPE(format))) /* Append so we don't reverse the list of formats. */ *formats = g_slist_append(*formats, format); return NULL; } static gint format_compare(VipsFormatClass *a, VipsFormatClass *b) { return b->priority - a->priority; } /** * vips_format_map: (skip) * @fn: function to apply to each #VipsFormatClass * @a: user data * @b: user data * * Apply a function to every %VipsFormatClass that VIPS knows about. Formats * are presented to the function in priority order. * * Like all VIPS map functions, if @fn returns %NULL, iteration continues. If * it returns non-%NULL, iteration terminates and that value is returned. The * map function returns %NULL if all calls return %NULL. * * See also: im_slist_map(). * * Returns: the result of iteration */ void * vips_format_map(VSListMap2Fn fn, void *a, void *b) { GSList *formats; void *result; formats = NULL; (void) vips_class_map_all(g_type_from_name("VipsFormat"), (VipsClassMapFn) format_add_class, (void *) &formats); formats = g_slist_sort(formats, (GCompareFunc) format_compare); result = im_slist_map2(formats, fn, a, b); g_slist_free(formats); return result; } /* Abstract base class for image formats. */ G_DEFINE_ABSTRACT_TYPE(VipsFormat, vips_format, VIPS_TYPE_OBJECT); static void vips_format_summary_class(VipsObjectClass *object_class, VipsBuf *buf) { VipsFormatClass *class = VIPS_FORMAT_CLASS(object_class); VIPS_OBJECT_CLASS(vips_format_parent_class) ->summary_class(object_class, buf); vips_buf_appends(buf, ", "); if (class->suffs) { const char **p; vips_buf_appends(buf, "("); for (p = class->suffs; *p; p++) { vips_buf_appendf(buf, "%s", *p); if (p[1]) vips_buf_appends(buf, ", "); } vips_buf_appends(buf, ") "); } if (class->is_a) vips_buf_appends(buf, "is_a "); if (class->header) vips_buf_appends(buf, "header "); if (class->load) vips_buf_appends(buf, "load "); if (class->save) vips_buf_appends(buf, "save "); if (class->get_flags) vips_buf_appends(buf, "get_flags "); } static void vips_format_class_init(VipsFormatClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; object_class->nickname = "format"; object_class->description = _("VIPS file formats"); object_class->summary_class = vips_format_summary_class; /* Hide from UI. */ object_class->deprecated = TRUE; } static void vips_format_init(VipsFormat *object) { } /** * vips_format_get_flags: * @format: format to test * @filename: file to test * * Get a set of flags for this file. * * Returns: flags for this format and file */ VipsFormatFlags vips_format_get_flags(VipsFormatClass *format, const char *filename) { return format->get_flags ? format->get_flags(filename) : 0; } /* VIPS format class. */ static const char *vips_suffs[] = { ".v", ".vips", NULL }; int im_isvips(const char *filename) { unsigned char buf[4]; if (im__get_bytes(filename, buf, 4) == 4) { if (buf[0] == 0x08 && buf[1] == 0xf2 && buf[2] == 0xa6 && buf[3] == 0xb6) /* SPARC-order VIPS image. */ return 1; else if (buf[3] == 0x08 && buf[2] == 0xf2 && buf[1] == 0xa6 && buf[0] == 0xb6) /* INTEL-order VIPS image. */ return 1; } return 0; } static int file2vips(const char *filename, IMAGE *out) { IMAGE *im; if (!(im = im_open_local(out, filename, "r")) || im_copy(im, out)) return -1; return 0; } static VipsFormatFlags vips_flags(const char *filename) { VipsFormatFlags flags; unsigned char buf[4]; flags = VIPS_FORMAT_PARTIAL; if (im__get_bytes(filename, buf, 4) == 4 && buf[0] == 0x08 && buf[1] == 0xf2 && buf[2] == 0xa6 && buf[3] == 0xb6) flags |= VIPS_FORMAT_BIGENDIAN; return flags; } /* Vips format adds no new members. */ typedef VipsFormat VipsFormatVips; typedef VipsFormatClass VipsFormatVipsClass; static int vips_format_vips_save(VipsImage *image, const char *filename) { return vips_image_write_to_file(image, filename, NULL); } static void vips_format_vips_class_init(VipsFormatVipsClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsFormatClass *format_class = (VipsFormatClass *) class; object_class->nickname = "vips"; object_class->description = _("VIPS"); format_class->priority = 200; format_class->is_a = im_isvips; format_class->header = file2vips; format_class->load = file2vips; format_class->save = vips_format_vips_save; format_class->get_flags = vips_flags; format_class->suffs = vips_suffs; } static void vips_format_vips_init(VipsFormatVips *object) { } G_DEFINE_TYPE(VipsFormatVips, vips_format_vips, VIPS_TYPE_FORMAT); /* Called on startup: register the base vips formats. */ void im__format_init(void) { extern GType vips_format_csv_get_type(void); extern GType vips_format_ppm_get_type(void); extern GType vips_format_analyze_get_type(void); extern GType vips_format_rad_get_type(void); vips_format_vips_get_type(); #ifdef HAVE_JPEG extern GType vips_format_jpeg_get_type(void); vips_format_jpeg_get_type(); #endif /*HAVE_JPEG*/ #if defined(HAVE_PNG) || defined(HAVE_SPNG) extern GType vips_format_png_get_type(void); vips_format_png_get_type(); #endif /*HAVE_PNG*/ #ifdef HAVE_LIBWEBP extern GType vips_format_webp_get_type(void); vips_format_webp_get_type(); #endif /*HAVE_LIBWEBP*/ vips_format_csv_get_type(); vips_format_ppm_get_type(); vips_format_analyze_get_type(); #ifdef HAVE_OPENEXR extern GType vips_format_exr_get_type(void); vips_format_exr_get_type(); #endif /*HAVE_OPENEXR*/ #ifdef HAVE_MATIO extern GType vips_format_mat_get_type(void); vips_format_mat_get_type(); #endif /*HAVE_MATIO*/ #ifdef HAVE_CFITSIO extern GType vips_format_fits_get_type(void); vips_format_fits_get_type(); #endif /*HAVE_CFITSIO*/ vips_format_rad_get_type(); #ifdef HAVE_MAGICK extern GType vips_format_magick_get_type(void); vips_format_magick_get_type(); #endif /*HAVE_MAGICK*/ #ifdef HAVE_TIFF extern GType vips_format_tiff_get_type(void); vips_format_tiff_get_type(); #endif /*HAVE_TIFF*/ extern GType vips_format_openslide_get_type(void); vips_format_openslide_get_type(); extern GType vips_format_nifti_get_type(void); vips_format_nifti_get_type(); } /* Can this format open this file? */ static void * format_for_file_sub(VipsFormatClass *format, const char *name, const char *filename) { if (format->is_a) { if (format->is_a(filename)) return format; } else if (im_filename_suffix_match(filename, format->suffs)) return format; return NULL; } /** * vips_format_for_file: * @filename: file to find a format for * * Searches for a format you could use to load a file. * * See also: vips_format_read(), vips_format_for_name(). * * Returns: a format on success, %NULL on error */ VipsFormatClass * vips_format_for_file(const char *filename) { char name[FILENAME_MAX]; char options[FILENAME_MAX]; VipsFormatClass *format; /* Break any options off the name ... eg. "fred.tif:jpeg,tile" * etc. */ im_filename_split(filename, name, options); if (!im_existsf("%s", name)) { im_error("VipsFormat", _("file \"%s\" not found"), name); return NULL; } if (!(format = (VipsFormatClass *) vips_format_map( (VSListMap2Fn) format_for_file_sub, (void *) filename, (void *) name))) { im_error("VipsFormat", _("file \"%s\" not a known format"), name); return NULL; } return format; } /* Can we write this filename with this format? Ignore formats without a save * method. */ static void * format_for_name_sub(VipsFormatClass *format, const char *name) { if (format->save && im_filename_suffix_match(name, format->suffs)) return format; return NULL; } /** * vips_format_for_name: * @filename: name to find a format for * * Searches for a format you could use to save a file. * * See also: vips_format_write(), vips_format_for_file(). * * Returns: a format on success, %NULL on error */ VipsFormatClass * vips_format_for_name(const char *filename) { VipsFormatClass *format; if (!(format = (VipsFormatClass *) vips_format_map( (VSListMap2Fn) format_for_name_sub, (void *) filename, NULL))) { im_error("VipsFormat", _("\"%s\" is not a supported image format."), filename); return NULL; } return format; } /** * vips_format_read: * @filename: file to load * @out: write the file to this image * * Searches for a format for this file, then loads the file into @out. * * See also: vips_format_write(). * * Returns: 0 on success, -1 on error */ int vips_format_read(const char *filename, IMAGE *out) { VipsFormatClass *format; if (!(format = vips_format_for_file(filename)) || format->load(filename, out)) return -1; return 0; } /** * vips_format_write: * @in: image to write * @filename: file to write to * * Searches for a format for this name, then saves @im to it. * * See also: vips_format_read(). * * Returns: 0 on success, -1 on error */ int vips_format_write(IMAGE *in, const char *filename) { VipsFormatClass *format; if (!(format = vips_format_for_name(filename)) || format->save(in, filename)) return -1; return 0; } libvips-8.15.1/libvips/deprecated/format_dispatch.c000066400000000000000000000234551454007373500223620ustar00rootroot00000000000000/* VIPS function dispatch tables for image format load/save. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include static int jpeg2vips_vec(im_object *argv) { char *in = argv[0]; IMAGE *out = argv[1]; if (im_jpeg2vips(in, out)) return -1; return 0; } static im_arg_desc jpeg2vips_args[] = { IM_INPUT_STRING("in"), IM_OUTPUT_IMAGE("out") }; static im_function jpeg2vips_desc = { "im_jpeg2vips", /* Name */ "convert from jpeg", /* Description */ 0, /* Flags */ jpeg2vips_vec, /* Dispatch function */ IM_NUMBER(jpeg2vips_args), /* Size of arg list */ jpeg2vips_args /* Arg list */ }; static int vips2dz_vec(im_object *argv) { IMAGE *in = argv[0]; char *out = argv[1]; if (im_vips2dz(in, out)) return -1; return 0; } static im_arg_desc vips2dz_args[] = { IM_INPUT_IMAGE("in"), IM_INPUT_STRING("out") }; static im_function vips2dz_desc = { "im_vips2dz", /* Name */ "save as deepzoom", /* Description */ 0, /* Flags */ vips2dz_vec, /* Dispatch function */ IM_NUMBER(vips2dz_args), /* Size of arg list */ vips2dz_args /* Arg list */ }; static int vips2jpeg_vec(im_object *argv) { IMAGE *in = argv[0]; char *out = argv[1]; if (im_vips2jpeg(in, out)) return -1; return 0; } static im_arg_desc vips2jpeg_args[] = { IM_INPUT_IMAGE("in"), IM_INPUT_STRING("out") }; static im_function vips2jpeg_desc = { "im_vips2jpeg", /* Name */ "convert to jpeg", /* Description */ 0, /* Flags */ vips2jpeg_vec, /* Dispatch function */ IM_NUMBER(vips2jpeg_args), /* Size of arg list */ vips2jpeg_args /* Arg list */ }; static int vips2mimejpeg_vec(im_object *argv) { IMAGE *in = argv[0]; int qfac = *((int *) argv[1]); if (im_vips2mimejpeg(in, qfac)) return -1; return 0; } static im_arg_desc vips2mimejpeg_args[] = { IM_INPUT_IMAGE("in"), IM_INPUT_INT("qfac") }; static im_function vips2mimejpeg_desc = { "im_vips2mimejpeg", /* Name */ "convert to jpeg as mime type on stdout", /* Description */ 0, /* Flags */ vips2mimejpeg_vec, /* Dispatch function */ IM_NUMBER(vips2mimejpeg_args), /* Size of arg list */ vips2mimejpeg_args /* Arg list */ }; /* Args for vips2png. */ static im_arg_desc vips2png_args[] = { IM_INPUT_IMAGE("in"), IM_INPUT_STRING("out") }; /* Call im_vips2png via arg vector. */ static int vips2png_vec(im_object *argv) { return im_vips2png(argv[0], argv[1]); } /* Description of im_vips2png. */ static im_function vips2png_desc = { "im_vips2png", /* Name */ "convert VIPS image to PNG file", /* Description */ 0, vips2png_vec, /* Dispatch function */ IM_NUMBER(vips2png_args), /* Size of arg list */ vips2png_args /* Arg list */ }; /* Args for png2vips. */ static im_arg_desc png2vips_args[] = { IM_INPUT_STRING("in"), IM_OUTPUT_IMAGE("out") }; /* Call im_png2vips via arg vector. */ static int png2vips_vec(im_object *argv) { return im_png2vips(argv[0], argv[1]); } /* Description of im_png2vips. */ static im_function png2vips_desc = { "im_png2vips", /* Name */ "convert PNG file to VIPS image", /* Description */ 0, png2vips_vec, /* Dispatch function */ IM_NUMBER(png2vips_args), /* Size of arg list */ png2vips_args /* Arg list */ }; /* Args for exr2vips. */ static im_arg_desc exr2vips_args[] = { IM_INPUT_STRING("in"), IM_OUTPUT_IMAGE("out") }; /* Call im_exr2vips via arg vector. */ static int exr2vips_vec(im_object *argv) { return im_exr2vips(argv[0], argv[1]); } /* Description of im_exr2vips. */ static im_function exr2vips_desc = { "im_exr2vips", /* Name */ "convert an OpenEXR file to VIPS", /* Description */ 0, exr2vips_vec, /* Dispatch function */ IM_NUMBER(exr2vips_args), /* Size of arg list */ exr2vips_args /* Arg list */ }; /* Args for vips2tiff. */ static im_arg_desc vips2tiff_args[] = { IM_INPUT_IMAGE("in"), IM_INPUT_STRING("out") }; /* Call im_vips2tiff via arg vector. */ static int vips2tiff_vec(im_object *argv) { return im_vips2tiff(argv[0], argv[1]); } /* Description of im_vips2tiff. */ static im_function vips2tiff_desc = { "im_vips2tiff", /* Name */ "convert VIPS image to TIFF file", /* Description */ 0, vips2tiff_vec, /* Dispatch function */ IM_NUMBER(vips2tiff_args), /* Size of arg list */ vips2tiff_args /* Arg list */ }; /* Args for magick2vips. */ static im_arg_desc magick2vips_args[] = { IM_INPUT_STRING("in"), IM_OUTPUT_IMAGE("out") }; /* Call im_magick2vips via arg vector. */ static int magick2vips_vec(im_object *argv) { return im_magick2vips(argv[0], argv[1]); } /* Description of im_magick2vips. */ static im_function magick2vips_desc = { "im_magick2vips", /* Name */ "load file with libMagick", /* Description */ 0, magick2vips_vec, /* Dispatch function */ IM_NUMBER(magick2vips_args), /* Size of arg list */ magick2vips_args /* Arg list */ }; /* Args for tiff2vips. */ static im_arg_desc tiff2vips_args[] = { IM_INPUT_STRING("in"), IM_OUTPUT_IMAGE("out") }; /* Call im_tiff2vips via arg vector. */ static int tiff2vips_vec(im_object *argv) { return im_tiff2vips(argv[0], argv[1]); } /* Description of im_tiff2vips. */ static im_function tiff2vips_desc = { "im_tiff2vips", /* Name */ "convert TIFF file to VIPS image", /* Description */ 0, tiff2vips_vec, /* Dispatch function */ IM_NUMBER(tiff2vips_args), /* Size of arg list */ tiff2vips_args /* Arg list */ }; static int analyze2vips_vec(im_object *argv) { const char *in = argv[0]; IMAGE *out = argv[1]; return im_analyze2vips(in, out); } static im_arg_desc analyze2vips_arg_types[] = { IM_INPUT_STRING("filename"), IM_OUTPUT_IMAGE("im") }; static im_function analyze2vips_desc = { "im_analyze2vips", /* Name */ "read a file in analyze format", /* Description */ 0, /* Flags */ analyze2vips_vec, /* Dispatch function */ IM_NUMBER(analyze2vips_arg_types), /* Size of arg list */ analyze2vips_arg_types /* Arg list */ }; static int csv2vips_vec(im_object *argv) { const char *in = argv[0]; IMAGE *out = argv[1]; return im_csv2vips(in, out); } static im_arg_desc csv2vips_arg_types[] = { IM_INPUT_STRING("filename"), IM_OUTPUT_IMAGE("im") }; static im_function csv2vips_desc = { "im_csv2vips", /* Name */ "read a file in csv format", /* Description */ 0, /* Flags */ csv2vips_vec, /* Dispatch function */ IM_NUMBER(csv2vips_arg_types), /* Size of arg list */ csv2vips_arg_types /* Arg list */ }; static int vips2csv_vec(im_object *argv) { IMAGE *in = argv[0]; const char *filename = argv[1]; return im_vips2csv(in, filename); } static im_arg_desc vips2csv_arg_types[] = { IM_INPUT_IMAGE("in"), IM_INPUT_STRING("filename") }; static im_function vips2csv_desc = { "im_vips2csv", /* Name */ "write an image in csv format", /* Description */ 0, /* Flags */ vips2csv_vec, /* Dispatch function */ IM_NUMBER(vips2csv_arg_types), /* Size of arg list */ vips2csv_arg_types /* Arg list */ }; static int ppm2vips_vec(im_object *argv) { const char *in = argv[0]; IMAGE *out = argv[1]; return im_ppm2vips(in, out); } static im_arg_desc ppm2vips_arg_types[] = { IM_INPUT_STRING("filename"), IM_OUTPUT_IMAGE("im") }; static im_function ppm2vips_desc = { "im_ppm2vips", /* Name */ "read a file in pbm/pgm/ppm format", /* Description */ 0, /* Flags */ ppm2vips_vec, /* Dispatch function */ IM_NUMBER(ppm2vips_arg_types), /* Size of arg list */ ppm2vips_arg_types /* Arg list */ }; static int vips2ppm_vec(im_object *argv) { IMAGE *im = argv[0]; const char *filename = argv[1]; return im_vips2ppm(im, filename); } static im_arg_desc vips2ppm_arg_types[] = { IM_INPUT_IMAGE("im"), IM_INPUT_STRING("filename") }; static im_function vips2ppm_desc = { "im_vips2ppm", /* Name */ "write a file in pbm/pgm/ppm format", /* Description */ 0, /* Flags */ vips2ppm_vec, /* Dispatch function */ IM_NUMBER(vips2ppm_arg_types), /* Size of arg list */ vips2ppm_arg_types /* Arg list */ }; static int fits2vips_vec(im_object *argv) { char *in = argv[0]; IMAGE *out = argv[1]; if (im_fits2vips(in, out)) return -1; return 0; } static im_arg_desc fits2vips_args[] = { IM_INPUT_STRING("in"), IM_OUTPUT_IMAGE("out") }; static im_function fits2vips_desc = { "im_fits2vips", /* Name */ "convert from fits", /* Description */ 0, /* Flags */ fits2vips_vec, /* Dispatch function */ IM_NUMBER(fits2vips_args), /* Size of arg list */ fits2vips_args /* Arg list */ }; /* Package up all these functions. */ static im_function *list[] = { &csv2vips_desc, &fits2vips_desc, &jpeg2vips_desc, &magick2vips_desc, &png2vips_desc, &exr2vips_desc, &ppm2vips_desc, &analyze2vips_desc, &tiff2vips_desc, &vips2csv_desc, &vips2dz_desc, &vips2jpeg_desc, &vips2mimejpeg_desc, &vips2png_desc, &vips2ppm_desc, &vips2tiff_desc }; /* Package of functions. */ im_package im__format = { "format", IM_NUMBER(list), list }; libvips-8.15.1/libvips/deprecated/freq_dispatch.c000066400000000000000000000167641454007373500220340ustar00rootroot00000000000000/* Function dispatch tables for freq_filt. * * J. Cupitt, 23/2/95 * 22/4/97 JC * - oops, im_freqflt() was wrong */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include /* One image in, one out. */ static im_arg_desc one_in_one_out[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out") }; /* Two images in, one out. */ static im_arg_desc two_in_one_out[] = { IM_INPUT_IMAGE("in1"), IM_INPUT_IMAGE("in2"), IM_OUTPUT_IMAGE("out") }; /* Args to im_create_fmask(). */ static im_arg_desc create_fmask_args[] = { IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("width"), IM_INPUT_INT("height"), IM_INPUT_INT("type"), IM_INPUT_DOUBLE("p1"), IM_INPUT_DOUBLE("p2"), IM_INPUT_DOUBLE("p3"), IM_INPUT_DOUBLE("p4"), IM_INPUT_DOUBLE("p5") }; /* Call im_create_fmask via arg vector. */ static int create_fmask_vec(im_object *argv) { int width = *((int *) argv[1]); int height = *((int *) argv[2]); int type = *((int *) argv[3]); double p1 = *((double *) argv[4]); double p2 = *((double *) argv[5]); double p3 = *((double *) argv[6]); double p4 = *((double *) argv[7]); double p5 = *((double *) argv[8]); return im_create_fmask(argv[0], width, height, type, p1, p2, p3, p4, p5); } /* Description of im_create_fmask. */ static im_function create_fmask_desc = { "im_create_fmask", /* Name */ "create frequency domain filter mask", 0, /* Flags */ create_fmask_vec, /* Dispatch function */ IM_NUMBER(create_fmask_args), /* Size of arg list */ create_fmask_args /* Arg list */ }; /* Args to im_flt_image_freq(). */ static im_arg_desc flt_image_freq_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("type"), IM_INPUT_DOUBLE("p1"), IM_INPUT_DOUBLE("p2"), IM_INPUT_DOUBLE("p3"), IM_INPUT_DOUBLE("p4"), IM_INPUT_DOUBLE("p5") }; /* Call im_flt_image_freq via arg vector. */ static int flt_image_freq_vec(im_object *argv) { int type = *((int *) argv[2]); double p1 = *((double *) argv[3]); double p2 = *((double *) argv[4]); double p3 = *((double *) argv[5]); double p4 = *((double *) argv[6]); double p5 = *((double *) argv[7]); return im_flt_image_freq(argv[0], argv[1], type, p1, p2, p3, p4, p5); } /* Description of im_flt_image_freq. */ static im_function flt_image_freq_desc = { "im_flt_image_freq", /* Name */ "frequency domain filter image", 0, /* Flags */ flt_image_freq_vec, /* Dispatch function */ IM_NUMBER(flt_image_freq_args), /* Size of arg list */ flt_image_freq_args /* Arg list */ }; /* Args to im_fractsurf(). */ static im_arg_desc fractsurf_args[] = { IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("size"), IM_INPUT_DOUBLE("dimension") }; /* Call im_fractsurf via arg vector. */ static int fractsurf_vec(im_object *argv) { int size = *((int *) argv[1]); double dim = *((double *) argv[2]); return im_fractsurf(argv[0], size, dim); } /* Description of im_fractsurf. */ static im_function fractsurf_desc = { "im_fractsurf", /* Name */ "generate a fractal surface of given dimension", IM_FN_TRANSFORM, /* Flags */ fractsurf_vec, /* Dispatch function */ IM_NUMBER(fractsurf_args), /* Size of arg list */ fractsurf_args /* Arg list */ }; /* Args to im_freqflt(). */ static im_arg_desc freqflt_args[] = { IM_INPUT_IMAGE("in"), IM_INPUT_IMAGE("mask"), IM_OUTPUT_IMAGE("out") }; /* Call im_freqflt via arg vector. */ static int freqflt_vec(im_object *argv) { return im_freqflt(argv[0], argv[1], argv[2]); } /* Description of im_freqflt. */ static im_function freqflt_desc = { "im_freqflt", /* Name */ "frequency-domain filter of in with mask", IM_FN_TRANSFORM, /* Flags */ freqflt_vec, /* Dispatch function */ IM_NUMBER(freqflt_args), /* Size of arg list */ freqflt_args /* Arg list */ }; /* Call im_disp_ps via arg vector. */ static int disp_ps_vec(im_object *argv) { return im_disp_ps(argv[0], argv[1]); } /* Description of im_disp_ps. */ static im_function disp_ps_desc = { "im_disp_ps", /* Name */ "make displayable power spectrum", IM_FN_TRANSFORM, /* Flags */ disp_ps_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_rotquad via arg vector. */ static int rotquad_vec(im_object *argv) { return im_rotquad(argv[0], argv[1]); } /* Description of im_rotquad. */ static im_function rotquad_desc = { "im_rotquad", /* Name */ "rotate image quadrants to move origin to centre", IM_FN_TRANSFORM, /* Flags */ rotquad_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_fwfft via arg vector. */ static int fwfft_vec(im_object *argv) { return im_fwfft(argv[0], argv[1]); } /* Description of im_fwfft. */ static im_function fwfft_desc = { "im_fwfft", /* Name */ "forward fast-fourier transform", IM_FN_TRANSFORM, /* Flags */ fwfft_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_invfft via arg vector. */ static int invfft_vec(im_object *argv) { return im_invfft(argv[0], argv[1]); } /* Description of im_invfft. */ static im_function invfft_desc = { "im_invfft", /* Name */ "inverse fast-fourier transform", IM_FN_TRANSFORM, /* Flags */ invfft_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_invfftr via arg vector. */ static int invfftr_vec(im_object *argv) { return im_invfftr(argv[0], argv[1]); } /* Description of im_invfftr. */ static im_function invfftr_desc = { "im_invfftr", /* Name */ "real part of inverse fast-fourier transform", IM_FN_TRANSFORM, /* Flags */ invfftr_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_phasecor_fft via arg vector. */ static int phasecor_fft_vec(im_object *argv) { return im_phasecor_fft(argv[0], argv[1], argv[2]); } /* Description of im_phasecor_fft. */ static im_function phasecor_fft_desc = { "im_phasecor_fft", /* Name */ "non-normalised correlation of gradient of in2 within in1", IM_FN_TRANSFORM, /* Flags */ phasecor_fft_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Package up all these functions. */ static im_function *freq_list[] = { &create_fmask_desc, &disp_ps_desc, &flt_image_freq_desc, &fractsurf_desc, &freqflt_desc, &fwfft_desc, &rotquad_desc, &invfft_desc, &phasecor_fft_desc, &invfftr_desc }; /* Package of functions. */ im_package im__freq_filt = { "freq_filt", IM_NUMBER(freq_list), freq_list }; libvips-8.15.1/libvips/deprecated/glds_funcs.c000066400000000000000000000132401454007373500213310ustar00rootroot00000000000000/* @(#) Calculates the spatial grey level differnce * @(#) matrix of an image and some of its * @(#) features. The 256x1 difference matrix of im is held by m * @(#) There should be enough margin around the box so the (dx,dy) can * @(#) access neighbouring pixels outside the box * @(#) * @(#) Usage: * @(#) int im_glds_matrix(im, m, xpos, ypos, xsize, ysize, dx, dy) * @(#) IMAGE *im, *m; * @(#) int xpos, ypos, xsize, ysize; location of the box within im * @(#) int dx, dy; displacements * @(#) * @(#) int im_glds_asm(m, asmoment) * @(#) IMAGE *m; * @(#) double *asmoment; * @(#) * @(#) int im_glds_contrast(m, contrast) * @(#) IMAGE *m; * @(#) double *contrast; * @(#) * @(#) int im_glds_entropy(m, entropy) * @(#) IMAGE *m; * @(#) double *entropy; * @(#) * @(#) int im_glds_mean(m, mean) * @(#) IMAGE *m; * @(#) double *mean; * @(#) * @(#) All functions return 0 on success and -1 on error * * Copyright: N. Dessipris, 1991 * Written on: 2/12/1991 * Modified on: * 22/7/93 JC * - im_incheck() added */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include /* Keep the greylevel difference matrix as a 256x1 double image */ int im_glds_matrix(IMAGE *im, IMAGE *m, int xpos, int ypos, int xsize, int ysize, int dx, int dy) { PEL *in, *cpin; int *b, *pb; double *l, *pl; int x, y; int ofs; int tmp; int norm; if (im_iocheck(im, m) == -1) return -1; if ((im->Bands != 1) || (im->BandFmt != IM_BANDFMT_UCHAR)) { im_error("im_glds_matrix", "%s", _("Wrong input")); return -1; } if ((xpos + xsize + dx > im->Xsize) || (ypos + ysize + dy > im->Ysize)) { im_error("im_glds_matrix", "%s", _("wrong args")); return -1; } if (im_cp_desc(m, im) == -1) return -1; m->Xsize = 256; m->Ysize = 1; m->BandFmt = IM_BANDFMT_DOUBLE; m->Type = IM_TYPE_B_W; if (im_setupout(m) == -1) return -1; b = (int *) calloc((unsigned) m->Xsize, sizeof(int)); l = (double *) calloc((unsigned) m->Xsize, sizeof(double)); if ((b == NULL) || (l == NULL)) { im_error("im_glds_matrix", "%s", _("calloc failed")); return -1; } in = (PEL *) im->data; in += (ypos * im->Xsize + xpos); ofs = dy * im->Xsize + dx; for (y = 0; y < ysize; y++) { cpin = in; in += im->Xsize; for (x = 0; x < xsize; x++) { tmp = abs((int) *cpin - (int) (*(cpin + ofs))); pb = (b + tmp); (*pb)++; cpin++; } } norm = xsize * ysize; pb = b; pl = l; for (x = 0; x < m->Xsize; x++) *pl++ = ((double) (*pb++)) / (double) norm; if (im_writeline(0, m, (PEL *) l) == -1) return -1; free((char *) b); free((char *) l); return 0; } /* @(#) Calculates the asmoment of the sglds matrix held by m */ int im_glds_asm(IMAGE *m, double *asmoment) { double temp, tmpasm, *in; int i; if (im_incheck(m)) return -1; if (m->Xsize != 256 || m->Ysize != 1 || m->Bands != 1 || m->BandFmt != IM_BANDFMT_DOUBLE) { im_error("im_glds_asm", "%s", _("unable to accept input")); return -1; } tmpasm = 0.0; in = (double *) m->data; for (i = 0; i < m->Xsize; i++) { temp = *in++; tmpasm += (temp * temp); } *asmoment = tmpasm; return 0; } /* @(#) Calculates the contrast of the coocurence matrix passed in buffer */ int im_glds_contrast(IMAGE *m, double *contrast) { double tmpcon, *in; int i; if (im_incheck(m)) return -1; if (m->Xsize != 256 || m->Ysize != 1 || m->Bands != 1 || m->BandFmt != IM_BANDFMT_DOUBLE) { im_error("im_glds_contrast", "%s", _("wrong input")); return -1; } tmpcon = 0.0; in = (double *) m->data; for (i = 0; i < m->Xsize; i++) { tmpcon += (((double) i) * ((double) i) * (*in)); in++; } *contrast = tmpcon; return 0; } /* @(#) Calculates the entropy of the glds vector passed in buffer * @(#) Function returns the entropy based on log base 2. */ int im_glds_entropy(IMAGE *m, double *entropy) { double tmpent, dtemp, *in; int i; if (im_incheck(m)) return -1; if (m->Xsize != 256 || m->Ysize != 1 || m->Bands != 1 || m->BandFmt != IM_BANDFMT_DOUBLE) { im_error("im_glds_entropy", "%s", _("wrong input")); return -1; } tmpent = 0.0; in = (double *) m->data; for (i = 0; i < m->Xsize; i++) { if (*in != 0) { dtemp = *in; tmpent += (dtemp * log10(dtemp)); } in++; } *entropy = ((-1) * tmpent / log10(2.0)); return 0; } /* @(#) Calculates the mean of the sglds matrix passed in m */ int im_glds_mean(IMAGE *m, double *mean) { double tmpmean, *in; int i; if (im_incheck(m)) return -1; if (m->Xsize != 256 || m->Ysize != 1 || m->Bands != 1 || m->BandFmt != IM_BANDFMT_DOUBLE) { im_error("im_glds_mean", "%s", _("wrong input")); return -1; } tmpmean = 0.0; in = (double *) m->data; for (i = 0; i < m->Xsize; i++) { tmpmean += (((double) i) * (*in)); in++; } tmpmean = tmpmean / ((double) m->Xsize); *mean = tmpmean; return 0; } libvips-8.15.1/libvips/deprecated/hist_dispatch.c000066400000000000000000000434441454007373500220410ustar00rootroot00000000000000/* VIPS function dispatch tables for histogram_lut. * * J. Cupitt, 24/5/95. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include /* One image in, one out. */ static im_arg_desc one_in_one_out[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out") }; /* Args for im_gammacorrect. */ static im_arg_desc gammacorrect_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DOUBLE("exponent") }; /* Call im_gammacorrect via arg vector. */ static int gammacorrect_vec(im_object *argv) { double exp = *((double *) argv[2]); return im_gammacorrect(argv[0], argv[1], exp); } /* Description of im_gammacorrect. */ static im_function gammacorrect_desc = { "im_gammacorrect", /* Name */ "gamma-correct image", /* Description */ IM_FN_PIO, /* Flags */ gammacorrect_vec, /* Dispatch function */ IM_NUMBER(gammacorrect_args), /* Size of arg list */ gammacorrect_args /* Arg list */ }; /* Image plus number in, image out. */ static im_arg_desc heq_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("band_number") }; /* Call im_heq via arg vector. */ static int heq_vec(im_object *argv) { int bn = *((int *) argv[2]); return im_heq(argv[0], argv[1], bn); } /* Description of im_heq. */ static im_function heq_desc = { "im_heq", /* Name */ "histogram-equalise image", /* Description */ IM_FN_PIO, /* Flags */ heq_vec, /* Dispatch function */ IM_NUMBER(heq_args), /* Size of arg list */ heq_args /* Arg list */ }; static im_arg_desc histindexed_args[] = { IM_INPUT_IMAGE("index"), IM_INPUT_IMAGE("value"), IM_OUTPUT_IMAGE("out") }; /* Call im_histindexed via arg vector. */ static int histindexed_vec(im_object *argv) { return im_hist_indexed(argv[0], argv[1], argv[2]); } /* Description of im_histindexed. */ static im_function histindexed_desc = { "im_hist_indexed", /* Name */ "make a histogram with an index image", /* Description */ IM_FN_PIO, /* Flags */ histindexed_vec, /* Dispatch function */ IM_NUMBER(histindexed_args), /* Size of arg list */ histindexed_args /* Arg list */ }; /* Call im_hist via arg vector. */ static int hist_vec(im_object *argv) { int bn = *((int *) argv[2]); return im_hist(argv[0], argv[1], bn); } /* Description of im_hist. */ static im_function hist_desc = { "im_hist", /* Name */ "find and graph histogram of image", /* Description */ IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ hist_vec, /* Dispatch function */ IM_NUMBER(heq_args), /* Size of arg list */ heq_args /* Arg list */ }; /* Call im_histcum via arg vector. */ static int histcum_vec(im_object *argv) { return im_histcum(argv[0], argv[1]); } /* Description of im_histcum. */ static im_function histcum_desc = { "im_histcum", /* Name */ "turn histogram to cumulative histogram", /* Description */ IM_FN_PIO, /* Flags */ histcum_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_histnorm via arg vector. */ static int histnorm_vec(im_object *argv) { return im_histnorm(argv[0], argv[1]); } /* Description of im_histcum. */ static im_function histnorm_desc = { "im_histnorm", /* Name */ "form normalised histogram", /* Description */ IM_FN_PIO, /* Flags */ histnorm_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_histeq via arg vector. */ static int histeq_vec(im_object *argv) { return im_histeq(argv[0], argv[1]); } /* Description of im_histeq. */ static im_function histeq_desc = { "im_histeq", /* Name */ "form histogram equalistion LUT", /* Description */ IM_FN_PIO, /* Flags */ histeq_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_histgr via arg vector. */ static int histgr_vec(im_object *argv) { int bn = *((int *) argv[2]); return im_histgr(argv[0], argv[1], bn); } /* Description of im_histgr. */ static im_function histgr_desc = { "im_histgr", /* Name */ "find histogram of image", /* Description */ IM_FN_TRANSFORM, /* Flags */ histgr_vec, /* Dispatch function */ IM_NUMBER(heq_args), /* Size of arg list */ heq_args /* Arg list */ }; /* Call im_histnD() via arg vector. */ static int histnD_vec(im_object *argv) { int bins = *((int *) argv[2]); return im_histnD(argv[0], argv[1], bins); } /* Args for im_histnD(). */ static im_arg_desc histnD_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("bins") }; /* Description of im_histnD(). */ static im_function histnD_desc = { "im_histnD", /* Name */ "find 1D, 2D or 3D histogram of image", /* Description */ IM_FN_TRANSFORM, /* Flags */ histnD_vec, /* Dispatch function */ IM_NUMBER(histnD_args), /* Size of arg list */ histnD_args /* Arg list */ }; /* Call im_histplot via arg vector. */ static int histplot_vec(im_object *argv) { return im_histplot(argv[0], argv[1]); } /* Description of im_histplot. */ static im_function histplot_desc = { "im_histplot", /* Name */ "plot graph of histogram", /* Description */ IM_FN_PIO, /* Flags */ histplot_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Args for im_histspec. */ static im_arg_desc histspec_args[] = { IM_INPUT_IMAGE("in"), IM_INPUT_IMAGE("ref"), IM_OUTPUT_IMAGE("out"), }; /* Call im_histspec via arg vector. */ static int histspec_vec(im_object *argv) { return im_histspec(argv[0], argv[1], argv[2]); } /* Description of im_histspec. */ static im_function histspec_desc = { "im_histspec", /* Name */ "find histogram which will make pdf of in match ref", 0, /* Flags */ histspec_vec, /* Dispatch function */ IM_NUMBER(histspec_args), /* Size of arg list */ histspec_args /* Arg list */ }; /* Call im_hsp via arg vector. */ static int hsp_vec(im_object *argv) { return im_hsp(argv[0], argv[1], argv[2]); } /* Description of im_hsp. */ static im_function hsp_desc = { "im_hsp", /* Name */ "match stats of in to stats of ref", 0, /* Flags */ hsp_vec, /* Dispatch function */ IM_NUMBER(histspec_args), /* Size of arg list */ histspec_args /* Arg list */ }; /* Args for im_identity. */ static im_arg_desc identity_args[] = { IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("nbands") }; /* Call im_identity via arg vector. */ static int identity_vec(im_object *argv) { int nb = *((int *) argv[1]); return im_identity(argv[0], nb); } /* Description of im_identity. */ static im_function identity_desc = { "im_identity", /* Name */ "generate identity histogram", 0, /* Flags */ identity_vec, /* Dispatch function */ IM_NUMBER(identity_args), /* Size of arg list */ identity_args /* Arg list */ }; /* Args for im_identity_ushort. */ static im_arg_desc identity_ushort_args[] = { IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("nbands"), IM_INPUT_INT("size") }; /* Call im_identity_ushort via arg vector. */ static int identity_ushort_vec(im_object *argv) { int nb = *((int *) argv[1]); int sz = *((int *) argv[2]); return im_identity_ushort(argv[0], nb, sz); } /* Description of im_identity_ushort. */ static im_function identity_ushort_desc = { "im_identity_ushort", /* Name */ "generate ushort identity histogram", 0, /* Flags */ identity_ushort_vec, /* Dispatch function */ IM_NUMBER(identity_ushort_args), /* Size of arg list */ identity_ushort_args /* Arg list */ }; /* Args for im_lhisteq. */ static im_arg_desc lhisteq_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("width"), IM_INPUT_INT("height") }; /* Call im_lhisteq via arg vector. */ static int lhisteq_vec(im_object *argv) { int xw = *((int *) argv[2]); int yw = *((int *) argv[3]); return im_lhisteq(argv[0], argv[1], xw, yw); } /* Description of im_lhisteq. */ static im_function lhisteq_desc = { "im_lhisteq", /* Name */ "local histogram equalisation", IM_FN_PIO, /* Flags */ lhisteq_vec, /* Dispatch function */ IM_NUMBER(lhisteq_args), /* Size of arg list */ lhisteq_args /* Arg list */ }; /* Args for im_maplut. */ static im_arg_desc maplut_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_IMAGE("lut") }; /* Call im_maplut via arg vector. */ static int maplut_vec(im_object *argv) { return im_maplut(argv[0], argv[1], argv[2]); } /* Description of im_maplut. */ static im_function maplut_desc = { "im_maplut", /* Name */ "map image through LUT", IM_FN_PIO, /* Flags */ maplut_vec, /* Dispatch function */ IM_NUMBER(maplut_args), /* Size of arg list */ maplut_args /* Arg list */ }; /* Call im_project() via arg vector. */ static int project_vec(im_object *argv) { return im_project(argv[0], argv[1], argv[2]); } /* Args for im_project(). */ static im_arg_desc project_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("hout"), IM_OUTPUT_IMAGE("vout") }; /* Description of im_project(). */ static im_function project_desc = { "im_project", /* Name */ "find horizontal and vertical projections of an image", IM_FN_TRANSFORM, /* Flags */ project_vec, /* Dispatch function */ IM_NUMBER(project_args), /* Size of arg list */ project_args /* Arg list */ }; /* Args for im_stdif. */ static im_arg_desc stdif_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DOUBLE("a"), IM_INPUT_DOUBLE("m0"), IM_INPUT_DOUBLE("b"), IM_INPUT_DOUBLE("s0"), IM_INPUT_INT("xw"), IM_INPUT_INT("yw") }; /* Call im_stdif via arg vector. */ static int stdif_vec(im_object *argv) { double a = *((double *) argv[2]); double m0 = *((double *) argv[3]); double b = *((double *) argv[4]); double s0 = *((double *) argv[5]); int xw = *((int *) argv[6]); int yw = *((int *) argv[7]); return im_stdif(argv[0], argv[1], a, m0, b, s0, xw, yw); } /* Description of im_stdif. */ static im_function stdif_desc = { "im_stdif", /* Name */ "statistical differencing", IM_FN_PIO, /* Flags */ stdif_vec, /* Dispatch function */ IM_NUMBER(stdif_args), /* Size of arg list */ stdif_args /* Arg list */ }; /* Args for im_buildlut. */ static im_arg_desc buildlut_args[] = { IM_INPUT_DMASK("xyes"), IM_OUTPUT_IMAGE("lut") }; /* Call im_buildlut via arg vector. */ static int buildlut_vec(im_object *argv) { im_mask_object *mi = argv[0]; return im_buildlut(mi->mask, argv[1]); } /* Description of im_buildlut. */ static im_function buildlut_desc = { "im_buildlut", /* Name */ "generate LUT table from set of x/y positions", 0, /* Flags */ buildlut_vec, /* Dispatch function */ IM_NUMBER(buildlut_args), /* Size of arg list */ buildlut_args /* Arg list */ }; /* Args for im_invertlut. */ static im_arg_desc invertlut_args[] = { IM_INPUT_DMASK("measures"), IM_OUTPUT_IMAGE("lut"), IM_INPUT_INT("lut_size") }; /* Call im_invertlut via arg vector. */ static int invertlut_vec(im_object *argv) { im_mask_object *mi = argv[0]; int lut_size = *((int *) argv[2]); return im_invertlut(mi->mask, argv[1], lut_size); } /* Description of im_invertlut. */ static im_function invertlut_desc = { "im_invertlut", /* Name */ "generate correction table from set of measures", 0, /* Flags */ invertlut_vec, /* Dispatch function */ IM_NUMBER(invertlut_args), /* Size of arg list */ invertlut_args /* Arg list */ }; /* Args for im_tone_build. */ static im_arg_desc tone_build_args[] = { IM_OUTPUT_IMAGE("hist"), IM_INPUT_DOUBLE("Lb"), IM_INPUT_DOUBLE("Lw"), IM_INPUT_DOUBLE("Ps"), IM_INPUT_DOUBLE("Pm"), IM_INPUT_DOUBLE("Ph"), IM_INPUT_DOUBLE("S"), IM_INPUT_DOUBLE("M"), IM_INPUT_DOUBLE("H") }; /* Call im_tone_build via arg vector. */ static int tone_build_vec(im_object *argv) { double Lb = *((double *) argv[1]); double Lw = *((double *) argv[2]); double Ps = *((double *) argv[3]); double Pm = *((double *) argv[4]); double Ph = *((double *) argv[5]); double S = *((double *) argv[6]); double M = *((double *) argv[7]); double H = *((double *) argv[8]); return im_tone_build(argv[0], Lb, Lw, Ps, Pm, Ph, S, M, H); } /* Description of im_tone_build. */ static im_function tone_build_desc = { "im_tone_build", /* Name */ "create LUT for tone adjustment of LabS images", 0, /* Flags */ tone_build_vec, /* Dispatch function */ IM_NUMBER(tone_build_args), /* Size of arg list */ tone_build_args /* Arg list */ }; /* Args for im_tone_build_range. */ static im_arg_desc tone_build_range_args[] = { IM_OUTPUT_IMAGE("hist"), IM_INPUT_INT("in_max"), IM_INPUT_INT("out_max"), IM_INPUT_DOUBLE("Lb"), IM_INPUT_DOUBLE("Lw"), IM_INPUT_DOUBLE("Ps"), IM_INPUT_DOUBLE("Pm"), IM_INPUT_DOUBLE("Ph"), IM_INPUT_DOUBLE("S"), IM_INPUT_DOUBLE("M"), IM_INPUT_DOUBLE("H") }; /* Call im_tone_build_range via arg vector. */ static int tone_build_range_vec(im_object *argv) { int in_max = *((int *) argv[1]); int out_max = *((int *) argv[2]); double Lb = *((double *) argv[3]); double Lw = *((double *) argv[4]); double Ps = *((double *) argv[5]); double Pm = *((double *) argv[6]); double Ph = *((double *) argv[7]); double S = *((double *) argv[8]); double M = *((double *) argv[9]); double H = *((double *) argv[10]); return im_tone_build_range(argv[0], in_max, out_max, Lb, Lw, Ps, Pm, Ph, S, M, H); } /* Description of im_tone_build_range. */ static im_function tone_build_range_desc = { "im_tone_build_range", /* Name */ "create LUT for tone adjustment", 0, /* Flags */ tone_build_range_vec, /* Dispatch function */ IM_NUMBER(tone_build_range_args), /* Size of arg list */ tone_build_range_args /* Arg list */ }; /* Args for im_tone_analyse. */ static im_arg_desc tone_analyse_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("hist"), IM_INPUT_DOUBLE("Ps"), IM_INPUT_DOUBLE("Pm"), IM_INPUT_DOUBLE("Ph"), IM_INPUT_DOUBLE("S"), IM_INPUT_DOUBLE("M"), IM_INPUT_DOUBLE("H") }; /* Call im_tone_analyse via arg vector. */ static int tone_analyse_vec(im_object *argv) { double Ps = *((double *) argv[2]); double Pm = *((double *) argv[3]); double Ph = *((double *) argv[4]); double S = *((double *) argv[5]); double M = *((double *) argv[6]); double H = *((double *) argv[7]); return im_tone_analyse(argv[0], argv[1], Ps, Pm, Ph, S, M, H); } /* Description of im_tone_analyse. */ static im_function tone_analyse_desc = { "im_tone_analyse", /* Name */ "analyse in and create LUT for tone adjustment", 0, /* Flags */ tone_analyse_vec, /* Dispatch function */ IM_NUMBER(tone_analyse_args), /* Size of arg list */ tone_analyse_args /* Arg list */ }; /* Args for im_ismonotonic. */ static im_arg_desc ismonotonic_args[] = { IM_INPUT_IMAGE("lut"), IM_OUTPUT_INT("mono") }; /* Call im_ismonotonic via arg vector. */ static int ismonotonic_vec(im_object *argv) { int *res = (int *) argv[1]; return im_ismonotonic(argv[0], res); } /* Description of im_ismonotonic. */ static im_function ismonotonic_desc = { "im_ismonotonic", /* Name */ "test LUT for monotonicity", 0, /* Flags */ ismonotonic_vec, /* Dispatch function */ IM_NUMBER(ismonotonic_args), /* Size of arg list */ ismonotonic_args /* Arg list */ }; /* Args for im_tone_map */ static im_arg_desc tone_map_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_IMAGE("lut") }; /* Call im_tone_map via arg vector. */ static int tone_map_vec(im_object *argv) { return im_tone_map(argv[0], argv[1], argv[2]); } /* Description of im_tone_map. */ static im_function tone_map_desc = { "im_tone_map", /* Name */ "map L channel of LabS or LabQ image through LUT", IM_FN_PIO, /* Flags */ tone_map_vec, /* Dispatch function */ IM_NUMBER(tone_map_args), /* Size of arg list */ tone_map_args /* Arg list */ }; /* Args for im_mpercent. */ static im_arg_desc mpercent_args[] = { IM_INPUT_IMAGE("in"), IM_INPUT_DOUBLE("percent"), IM_OUTPUT_INT("thresh") }; /* Call im_mpercent via arg vector. */ static int mpercent_vec(im_object *argv) { double percent = *((double *) argv[1]); return im_mpercent(argv[0], percent, argv[2]); } /* Description of im_mpercent. */ static im_function mpercent_desc = { "im_mpercent", /* Name */ "find threshold above which there are percent values", 0, /* Flags */ mpercent_vec, /* Dispatch function */ IM_NUMBER(mpercent_args), /* Size of arg list */ mpercent_args /* Arg list */ }; /* Package up all these functions. */ static im_function *hist_list[] = { &gammacorrect_desc, &heq_desc, &hist_desc, &histcum_desc, &histeq_desc, &histindexed_desc, &histgr_desc, &histnD_desc, &histnorm_desc, &histplot_desc, &histspec_desc, &hsp_desc, &identity_desc, &identity_ushort_desc, &ismonotonic_desc, &lhisteq_desc, &mpercent_desc, &invertlut_desc, &buildlut_desc, &maplut_desc, &project_desc, &stdif_desc, &tone_analyse_desc, &tone_build_desc, &tone_build_range_desc, &tone_map_desc }; /* Package of functions. */ im_package im__histograms_lut = { "histograms_lut", IM_NUMBER(hist_list), hist_list }; libvips-8.15.1/libvips/deprecated/im_align_bands.c000066400000000000000000000051171454007373500221340ustar00rootroot00000000000000/* * Brute force align the bands of an image. * * Copyright: Nottingham Trent University * Author: Tom Vajzovic * Written on: 2008-02-04 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include /** * im_align_bands: * @in: image to align * @out: output image * * This operation uses im_phasecor_fft() to find an integer displacement to * align all image bands band 0. It is very slow and not very accurate. * * Use im_estpar() in preference: it's fast and accurate. * * See also: im_global_balancef(), im_remosaic(). * * Returns: 0 on success, -1 on error */ int im_align_bands(IMAGE *in, IMAGE *out) { #define FUNCTION_NAME "im_align_bands" if (im_piocheck(in, out)) return -1; if (1 == in->Bands) return im_copy(in, out); { IMAGE **bands = IM_ARRAY(out, 2 * in->Bands, IMAGE *); IMAGE **wrapped_bands = bands + in->Bands; double x = 0.0; double y = 0.0; int i; if (!bands || im_open_local_array(out, bands, in->Bands, FUNCTION_NAME ": bands", "p") || im_open_local_array(out, wrapped_bands + 1, in->Bands - 1, FUNCTION_NAME ": wrapped_bands", "p")) return -1; for (i = 0; i < in->Bands; ++i) if (im_extract_band(in, bands[i], i)) return -1; wrapped_bands[0] = bands[0]; for (i = 1; i < in->Bands; ++i) { IMAGE *temp = im_open(FUNCTION_NAME ": temp", "t"); double this_x, this_y, val; if (!temp || im_phasecor_fft(bands[i - 1], bands[i], temp) || im_maxpos_avg(temp, &this_x, &this_y, &val) || im_close(temp)) return -1; x += this_x; y += this_y; if (im_wrap(bands[i], wrapped_bands[i], (int) x, (int) y)) return -1; } return im_gbandjoin(wrapped_bands, out, in->Bands); } #undef FUNCTION_NAME } libvips-8.15.1/libvips/deprecated/im_analyze2vips.c000066400000000000000000000044061454007373500223220ustar00rootroot00000000000000/* Read a Analyze file. Old-style header (so called 7.5 format). * * 14/12/11 * - just a compat stub now */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include static VipsFormatFlags analyze_flags(const char *filename) { return (VipsFormatFlags) vips_foreign_flags("analyzeload", filename); } static int isanalyze(const char *filename) { return vips_foreign_is_a("analyzeload", filename); } int im_analyze2vips(const char *filename, IMAGE *out) { VipsImage *t; if (vips_analyzeload(filename, &t, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } static const char *analyze_suffs[] = { ".img", ".hdr", NULL }; typedef VipsFormat VipsFormatAnalyze; typedef VipsFormatClass VipsFormatAnalyzeClass; static void vips_format_analyze_class_init(VipsFormatAnalyzeClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsFormatClass *format_class = (VipsFormatClass *) class; object_class->nickname = "analyze"; object_class->description = _("Analyze 6.0"); format_class->is_a = isanalyze; format_class->load = im_analyze2vips; format_class->get_flags = analyze_flags; format_class->suffs = analyze_suffs; } static void vips_format_analyze_init(VipsFormatAnalyze *object) { } G_DEFINE_TYPE(VipsFormatAnalyze, vips_format_analyze, VIPS_TYPE_FORMAT); libvips-8.15.1/libvips/deprecated/im_benchmark.c000066400000000000000000000171551454007373500216320ustar00rootroot00000000000000/* a complicated operation for testing * * 6/10/06 * - hacked in * 27/11/06 * - added im_benchmarkn() * 1/2/11 * - gtk-doc */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include /* VIPS SMP benchmark ------------------ This is adapted from the system used to generate images for POD: http://cima.ng-london.org.uk/~john/POD Images from a 10k by 10k studio digital camera are colour processed, resized, cropped and sharpened. The original POD script was written in nip (see below). This operation is a reimplementation in vanilla C to make it easier to run (and less fragile!). This thing was originally processing images off a remote server over a 100mbit network. No attempt was made to make it quick (there was no point): you could make it a lot faster very easily. ------ benchmark in nip2 ----------- #!/home/john/vips/bin/nip2 -s // get command-line arguments image_path = argv?1; crop_id = parse_pint argv?2; crop_left = parse_pint argv?3; crop_top = parse_pint argv?4; crop_width = parse_pint argv?5; crop_height = parse_pint argv?6; width = parse_pint argv?7; height = parse_pint argv?8; sharp = parse_pint argv?9; // scale down by this much to undo photographic's relativisation darken = Vector [1.18, 1, 1]; // fudge factor in XYZ to get a match under NGC lights on uv-durable paper white_point_adjust = Vector [1.06, 1, 1.01]; // brighten by this in XYZ to get relative colorimetry brighten = 1.5; // blacks down by this much in LAB blacks_down = Vector [-2, 0, 0]; // sharpen params for 400, 300, 200 and 150 dpi // just change the size of the area we search sharpen_params_table = [ [ 11, 2.5, 40, 20, 0.5, 1.5 ], [ 7, 2.5, 40, 20, 0.5, 1.5 ], [ 5, 2.5, 40, 20, 0.5, 1.5 ], [ 3, 2.5, 40, 20, 0.5, 1.5 ] ]; // convert D65 XYZ to D50 XYZ D652D50 = recomb D652D50_direct; stage_crop in = extract_area crop_left crop_top crop_width crop_height in, crop_id != 0 = in; // fit within a width / height stage_shrink image = image, factor > 1; // never upscale = resize factor factor Interpolate.BILINEAR image { hfactor = width / get_width image; vfactor = height / get_height image; factor = min_pair hfactor vfactor; } // unphotoize, go to xyz, convert to D50, adjust white point, back to lab stage_colour in = if in?0 > 99 then Vector [100, 0, 0] else in''' { // back to absolute in' = in / darken; xyz = colour_transform_to Image_type.XYZ in'; xyz' = D652D50 xyz * white_point_adjust * brighten; in'' = colour_transform_to Image_type.LAB xyz'; // shadows down in''' = in'' + blacks_down; } stage_sharp in = (sharpen params?0 params?1 params?2 params?3 params?4 params?5 @ colour_transform_to Image_type.LABQ) in { params = sharpen_params_table?sharp; } // This was: // // stage_srgb in // = (icc_export 8 "$VIPSHOME/share/nip2/data/sRGB.icm" 1 @ // colour_transform_to Image_type.LABQ) in; // // but that uses lcms which is single-threaded. So for this benchmark, we use // VIPS's own ->sRGB converter, which is less accurate but does thread. stage_srgb in = colour_transform_to Image_type.sRGB in; main = (get_image @ stage_srgb @ stage_sharp @ stage_colour @ stage_shrink @ stage_crop @ colour_transform_to Image_type.LAB @ Image_file) image_path; ------ benchmark in nip2 ----------- */ /* The main part of the benchmark ... transform labq to labq. Chain several of * these together to get a CPU-bound operation. */ static int benchmark(IMAGE *in, IMAGE *out) { IMAGE *t[18]; double one[3] = { 1.0, 1.0, 1.0 }; double zero[3] = { 0.0, 0.0, 0.0 }; double darken[3] = { 1.0 / 1.18, 1.0, 1.0 }; double whitepoint[3] = { 1.06, 1.0, 1.01 }; double shadow[3] = { -2, 0, 0 }; double white[3] = { 100, 0, 0 }; DOUBLEMASK *d652d50 = im_create_dmaskv("d652d50", 3, 3, 1.13529, -0.0604663, -0.0606321, 0.0975399, 0.935024, -0.0256156, -0.0336428, 0.0414702, 0.994135); im_add_close_callback(out, (im_callback_fn) im_free_dmask, d652d50, NULL); return ( /* Set of descriptors for this operation. */ im_open_local_array(out, t, 18, "im_benchmark", "p") || /* Unpack to float. */ im_LabQ2Lab(in, t[0]) || /* Crop 100 pixels off all edges. */ im_extract_area(t[0], t[1], 100, 100, t[0]->Xsize - 200, t[0]->Ysize - 200) || /* Shrink by 10%, bilinear interp. */ im_affinei_all(t[1], t[2], vips_interpolate_bilinear_static(), 0.9, 0, 0, 0.9, 0, 0) || /* Find L ~= 100 areas (white surround). */ im_extract_band(t[2], t[3], 0) || im_moreconst(t[3], t[4], 99) || /* Adjust white point and shadows. */ im_lintra_vec(3, darken, t[2], zero, t[5]) || im_Lab2XYZ(t[5], t[6]) || im_recomb(t[6], t[7], d652d50) || im_lintra_vec(3, whitepoint, t[7], zero, t[8]) || im_lintra(1.5, t[8], 0.0, t[9]) || im_XYZ2Lab(t[9], t[10]) || im_lintra_vec(3, one, t[10], shadow, t[11]) || /* Make a solid white image. */ im_black(t[12], t[4]->Xsize, t[4]->Ysize, 3) || im_lintra_vec(3, zero, t[12], white, t[13]) || /* Reattach border. */ im_ifthenelse(t[4], t[13], t[11], t[14]) || /* Sharpen. */ im_Lab2LabQ(t[14], t[15]) || im_sharpen(t[15], out, 11, 2.5, 40, 20, 0.5, 1.5)); } /** * im_benchmarkn: * @in: input image * @out: output image * @n: iterations * * This operation runs a complicated set of other operations on image @in, * producing image @out. Use @n to set the number of iterations to run: a * larger number will make the operation more CPU-bound, a smaller number will * make the operation more IO-bound. * * See http://www.vips.ecs.soton.ac.uk/index.php?title=Benchmarks for a * detailed discussion of the benchmark and some sample results. * * See also: im_benchmark2(). * * Returns: 0 on success, -1 on error */ int im_benchmarkn(IMAGE *in, IMAGE *out, int n) { IMAGE *t[2]; if (n == 0) /* To sRGB. */ return im_LabQ2disp(in, out, im_col_displays(7)); else return im_open_local_array(out, t, 2, "benchmarkn", "p") || benchmark(in, t[0]) || /* Expand back to the original size again ... * benchmark does a 200 pixel crop plus a 10% shrink, * so if we chain many of them together the image gets * too small. */ im_affinei_all(t[0], t[1], vips_interpolate_bilinear_static(), (double) in->Xsize / t[0]->Xsize, 0, 0, (double) in->Ysize / t[0]->Ysize, 0, 0) || im_benchmarkn(t[1], out, n - 1); } /** * im_benchmark2: * @in: input image * @out: average image value * * This operation runs a single im_benchmarkn() and calculates the average * pixel value. It's useful if you just want to test image input. * * See also: im_benchmarkn(). * * Returns: 0 on success, -1 on error */ int im_benchmark2(IMAGE *in, double *out) { IMAGE *t; return !(t = im_open_local(in, "benchmarkn", "p")) || im_benchmarkn(in, t, 1) || im_avg(t, out); } libvips-8.15.1/libvips/deprecated/im_bernd.c000066400000000000000000000040401454007373500207570ustar00rootroot00000000000000/* @(#) Extract a tile from a pyramid as a jpeg * @(#) * @(#) int * @(#) im_bernd(const char *tiffname, * @(#) int x, int y, int w, int h) * @(#) * @(#) * @(#) Returns 0 on success and -1 on error * @(#) * * 7/5/99 JC * - from im_tiff2vips and im_vips2jpeg, plus some stuff from Steve * 11/7/01 JC * - page number now in filename * 12/5/09 * - fix signed/unsigned warning */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include static int extract(IMAGE *in, int x, int y, int w, int h) { IMAGE *t1; int len; char *buf; if (!(t1 = im_open_local(in, "im_bernd:2", "p")) || im_extract_area(in, t1, x, y, w, h) || im_vips2bufjpeg(t1, in, 75, &buf, &len)) return -1; if (fwrite(buf, sizeof(char), len, stdout) != (size_t) len) { im_error("im_bernd", "%s", _("error writing output")); return -1; } fflush(stdout); return 0; } int im_bernd(const char *tiffname, int x, int y, int w, int h) { IMAGE *in; if (!(in = im_open("im_bernd:1", "p"))) return -1; if (im_tiff2vips(tiffname, in) || extract(in, x, y, w, h)) { im_close(in); return -1; } im_close(in); return 0; } libvips-8.15.1/libvips/deprecated/im_clamp.c000066400000000000000000000065601454007373500207720ustar00rootroot00000000000000/* @(#) Function to perform black level correction given black image * @(#) designed for PAD camera single field black to apply in blocks * @(#) as each is reused for higher resolution pels (eg: 6 8 for Progres) * @(#) IM_BANDFMT_UCHAR images only. Always writes UCHAR. * @(#) int im_clamp(in, w, out, hstep, vstep) * @(#) IMAGE *in, *w, *out; int hstep, vstep; * @(#) - Compute clip(image - (black)) ie subtract black no negatives * @(#) scales for low res Progres images to replicate black value * @(#) Returns 0 on success and -1 on error * fiddle at your peril - nasty code * Copyright: 1993 KM * 20/8/93 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include int im_clamp(IMAGE *in, IMAGE *out, IMAGE *black, int hstep, int vstep) { PEL *p, *blk, *bline, *bexp; PEL *q, *outbuf; int rep; int x, y, bnd; int temp, blacky, newblacky; if (im_iocheck(in, out)) return -1; if (in->Bbits != 8 || in->Coding != IM_CODING_NONE || in->BandFmt != IM_BANDFMT_UCHAR) { im_error("im_clamp", "%s", _("bad input format")); return -1; } if (black->Bbits != 8 || black->Coding != IM_CODING_NONE || black->BandFmt != IM_BANDFMT_UCHAR) { im_error("im_clamp", "%s", _("bad black format")); return -1; } /* Set up the output header. */ if (im_cp_desc(out, in)) return -1; if (im_setupout(out)) return -1; /* Make buffer for expanded black line */ if (!(bline = (PEL *) im_malloc(out, black->Bands * hstep * in->Xsize))) return -1; /* Make buffer we write to. */ if (!(outbuf = (PEL *) im_malloc(out, out->Bands * out->Xsize))) return -1; blacky = -1; p = (PEL *) in->data; for (y = 0; y < in->Ysize; y++) { /* calc corresponding black line - get new one if different */ newblacky = (vstep * black->Ysize - in->Ysize + y) / vstep; if (newblacky != blacky) { blacky = newblacky; /* time to expand a new black line */ blk = (PEL *) (black->data + black->Xsize * black->Bands * blacky); for (bexp = bline, x = 0; x < black->Xsize; x++) { for (rep = 0; rep < hstep; rep++) for (q = blk, bnd = 0; bnd < in->Bands; bnd++) *bexp++ = *q++; blk += black->Bands; } } /* correct a line of image */ bexp = bline; q = outbuf; for (x = 0; x < (out->Bands * out->Xsize); x++) { temp = ((int) *p++ - *bexp++); if (temp < 0) temp = 0; *q++ = (PEL) temp; } if (im_writeline(y, out, outbuf)) return -1; } /* end of a line */ return 0; } libvips-8.15.1/libvips/deprecated/im_cmulnorm.c000066400000000000000000000037241454007373500215310ustar00rootroot00000000000000/* im_cmulnorm.c * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 02/05/1990 * Modified on: * 15/4/97 JC * - thrown away and redone in terms of im_multiply() * 9/7/02 JC * - im_sign() broken out, done in terms of that * 28/8/09 * - gtkdoc * - tiny polish */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include /** * im_cmulnorm * @in1: input #IMAGE 1 * @in2: input #IMAGE 2 * @out: output #IMAGE * * im_cmulnorm() multiplies two complex images. The complex output is * normalised to 1 by dividing both the real and the imaginary part of each * pel with the norm. This is useful for phase correlation. * * This operation used to be important, but now simply calls im_multiply() * then im_sign(). * * See also: im_multiply(), im_sign(). * * Returns: 0 on success, -1 on error */ int im_cmulnorm(IMAGE *in1, IMAGE *in2, IMAGE *out) { IMAGE *t1; if (!(t1 = im_open_local(out, "im_cmulnorm:1", "p")) || im_multiply(in1, in2, t1) || im_sign(t1, out)) return -1; return 0; } libvips-8.15.1/libvips/deprecated/im_convsub.c000066400000000000000000000215761454007373500213610ustar00rootroot00000000000000/* @(#) Function which convolves and subsamples VASARI format picture * @(#) with a mask stored in a file argument. * @(#) * @(#) int im_convsub(in, out, mask, xskip, yskip) * @(#) IMAGE *in, *out; * @(#) INTMASK *mask; details in vips.h * @(#) int xskip, yskip; is the subsamping factor along both directions * @(#) * @(#) Returns either 0 (sucess) or -1 (fail) * @(#) * @(#) Picture can have any number of channels (max 64). * @(#) It is assummed that the output picture is subsampled on * @(#) both directions by a factor of xskip horizontally and yskip vertically. * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 29/04/1991 * Modified on: */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include /* Create multiplication luts for all non zero elements of the original mask; * which is kept in buffer of length buffersize * cnt is needed for freeing luts */ static int im__create_int_luts(int *buffer, int buffersize, int **orig_luts, int **luts, int *cnt) { int *pbuffer; int *buf1, *buf2, *pbuf1, *pbuf2; int i, j; int min, max; int mark; /* used to mark the buffer mark = max+1 */ int counter; /* counts the no of unique elms in mask; returned in cnt*/ buf1 = (int *) calloc((unsigned) buffersize, sizeof(int)); buf2 = (int *) calloc((unsigned) buffersize, sizeof(int)); if ((buf1 == NULL) || (buf2 == NULL)) { im_error("im_create_int_luts", "%s", _("calloc failed (1)")); return -1; } pbuffer = buffer; pbuf1 = buf1; /* find max and copy mask to buf1 */ max = *pbuffer; for (i = 0; i < buffersize; i++) { if (*pbuffer > max) max = *pbuffer; *pbuf1++ = *pbuffer++; } mark = max + 1; pbuf1 = buf1; pbuf2 = buf2; counter = 0; /* find a min at a time; put it into buf2 and mark all values of * buf1 equal to found min, to INT_MAX */ for (i = 0; i < buffersize; i++) { min = mark + 1; /* force min to be greater than mark */ pbuf1 = buf1; /* find a min */ for (j = 0; j < buffersize; j++) { if (*pbuf1 < min) min = *pbuf1; pbuf1++; } if (min == mark) /* all min are found */ break; *pbuf2++ = min; counter++; pbuf1 = buf1; for (j = 0; j < buffersize; j++) /* mark values equal to min */ { if (*pbuf1 == min) *pbuf1 = mark; pbuf1++; } } /* buf2 should keep now counter unique values of the mask, descending order * Malloc counter luts and initialise them */ pbuf2 = buf2; for (i = 0; i < counter; i++) { orig_luts[i] = (int *) calloc((unsigned) 256, sizeof(int)); if (orig_luts[i] == NULL) { im_error("im_create_int_luts", "%s", _("calloc failed (2)")); return -1; } for (j = 0; j < 256; j++) *(orig_luts[i] + j) = j * (*pbuf2); pbuf2++; } pbuffer = buffer; for (i = 0; i < buffersize; i++) { j = 0; while (1) { if (*(buf2 + j) == *pbuffer) { luts[i] = orig_luts[j]; break; } j++; } pbuffer++; } /* free buf1, buf2 */ free((char *) buf1); free((char *) buf2); *cnt = counter; return 0; } int im_convsub(IMAGE *in, IMAGE *out, INTMASK *m, int xskip, int yskip) { int x; /* horizontal direction */ int y; /* vertical direction */ int n_clipped = 0; int p_clipped = 0; int i, b; PEL **pnts, **cpnt1s, **cpnt2s; /* to keep pointers to data */ PEL **pnt, **cpnt1, **cpnt2; /* to keep pointers to data */ PEL *input, *line, *cpline; int *pm; /* pointer to mask coefficients */ int count; /* no of non zero elms of the original mask */ int *newm, *pnewm; /* pointer to non zero mask coefficients */ int os; /* size of an input line of data */ int ms; /* is m->xsize * m->ysize */ int **lut_orig, **lut; int lutcnt = 0; int rounding, sum; int tempsize; /* Check input, output and vars */ if ((xskip < 1) || (yskip < 1)) { im_error("im_convsub", "%s", _("xskip and yskip must be >= 1")); return -1; } if (im_iocheck(in, out) == -1) return -1; if ((in->Coding != IM_CODING_NONE) || (in->BandFmt != IM_BANDFMT_UCHAR)) { im_error("im_convsub", "%s", _("nput should be unsigned char uncoded")); return -1; } /* Prepare output */ if (im_cp_desc(out, in) == -1) return -1; tempsize = in->Xsize / xskip; while (1) { if (tempsize * xskip + m->xsize < in->Xsize) break; else tempsize--; if (tempsize < 0) break; } out->Xsize = tempsize; tempsize = in->Ysize / yskip; while (1) { if (tempsize * yskip + m->ysize < in->Ysize) break; else tempsize--; if (tempsize < 0) break; } out->Ysize = tempsize; if ((out->Xsize < 2) || (out->Ysize < 2)) { im_error("im_convsub", "%s", _("too small output sizes")); return -1; } if (im_setupout(out) == -1) return -1; /* Malloc one line of output data */ os = out->Xsize * out->Bands; if ((line = (PEL *) calloc((unsigned) os, sizeof(char))) == NULL) { im_error("im_convsub", "%s", _("unable to calloc(1)")); return -1; } /* Malloc pointers and put them at correct location */ ms = m->xsize * m->ysize; count = 0; /* exclude the non-zero elms */ pm = m->coeff; for (i = 0; i < ms; i++) { if (*pm++ != 0) count++; } if (((newm = (int *) calloc((unsigned) count, sizeof(int))) == NULL) || ((pnts = (PEL **) calloc((unsigned) count, sizeof(char *))) == NULL) || ((cpnt1s = (PEL **) calloc((unsigned) count, sizeof(char *))) == NULL) || ((cpnt2s = (PEL **) calloc((unsigned) count, sizeof(char *))) == NULL)) { im_error("im_convsub", "%s", _("unable to calloc(2)")); return -1; } pnt = pnts; cpnt1 = cpnt1s; cpnt2 = cpnt2s; /* copy the non-zero elms of the original mask and set pointers */ i = 0; input = (PEL *) in->data; pm = m->coeff; pnewm = newm; for (y = 0; y < m->ysize; y++) { for (x = 0; x < m->xsize; x++) { if (*pm != 0) { *pnewm++ = *pm; pnt[i] = (input + (x + y * in->Xsize) * in->Bands); i++; } pm++; } } if (i != count) { im_error("im_convsub", "%s", _("impossible state")); return -1; } /* Malloc pointers; not all lut_orig are used necessarily */ lut_orig = (int **) calloc((unsigned) count, sizeof(int **)); lut = (int **) calloc((unsigned) count, sizeof(int **)); if ((lut == NULL) || (lut_orig == NULL)) { im_error("im_conv", "%s", _("unable to calloc(1)")); return -1; } /* Create luts; count is needed for freeing pointers. Not all lut_orig are used * if zero elms are detected. */ if (im__create_int_luts(newm, count, lut_orig, lut, &lutcnt) == -1) { im_error("im_convsub", "%s", _("im_create_int_luts failed")); return -1; } rounding = m->scale / 2; /* Output out->Ysize processed lines */ for (y = 0; y < out->Ysize; y++) { cpline = line; for (i = 0; i < count; i++) { cpnt1[i] = pnt[i]; /* skip yskip input lines */ pnt[i] += (in->Xsize * in->Bands * yskip); } /* process out->Xsize points */ for (x = 0; x < out->Xsize; x++) { for (i = 0; i < count; i++) { /* skip xskip elms */ cpnt2[i] = cpnt1[i]; cpnt1[i] += xskip * in->Bands; } for (b = 0; b < out->Bands; b++) { sum = 0; for (i = 0; i < count; i++) { /* core of convolution */ sum += *(lut[i] + (*cpnt2[i])); cpnt2[i]++; } sum = ((sum + rounding) / m->scale) + m->offset; if (sum < (int) 0) { n_clipped++; sum = (int) 0; } else if (sum > (int) 255) { p_clipped++; sum = (int) 255; } *cpline++ = (unsigned char) sum; } } /* Output the calculated line */ if (im_writeline(y, out, (PEL *) line) == -1) { free((char *) line); free((char *) newm); free((char *) pnts); free((char *) cpnt1s); free((char *) cpnt2s); for (i = 0; i < lutcnt; i++) free((char *) lut_orig[i]); free((char *) lut_orig); free((char *) lut); return -1; } } /* end of the for (..y..) loop */ if (n_clipped || p_clipped) fprintf(stderr, "im_convsub: %d pels over 255 and %d under 0 clipped\n", p_clipped, n_clipped); free((char *) line); free((char *) newm); free((char *) pnts); free((char *) cpnt1s); free((char *) cpnt2s); for (i = 0; i < lutcnt; i++) free((char *) lut_orig[i]); free((char *) lut_orig); free((char *) lut); return 0; } libvips-8.15.1/libvips/deprecated/im_csv2vips.c000066400000000000000000000053461454007373500214560ustar00rootroot00000000000000/* Read a csv file. * * 16/12/11 * - just a stub */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "../foreign/pforeign.h" int im_csv2vips(const char *filename, IMAGE *out) { /* Read options. */ int start_skip = 0; char *whitespace = " "; char *separator = ";,\t"; int lines = -1; char name[FILENAME_MAX]; char mode[FILENAME_MAX]; char *p, *q, *r; VipsImage *x; /* Parse mode string. */ im_filename_split(filename, name, mode); p = &mode[0]; while ((q = im_getnextoption(&p))) { if (im_isprefix("ski", q) && (r = im_getsuboption(q))) start_skip = atoi(r); else if (im_isprefix("whi", q) && (r = im_getsuboption(q))) whitespace = r; else if (im_isprefix("sep", q) && (r = im_getsuboption(q))) separator = r; else if (im_isprefix("lin", q) && (r = im_getsuboption(q))) lines = atoi(r); } if (vips_csvload(name, &x, "skip", start_skip, "lines", lines, "whitespace", whitespace, "separator", separator, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } static const char *csv_suffs[] = { ".csv", NULL }; /* csv format adds no new members. */ typedef VipsFormat VipsFormatCsv; typedef VipsFormatClass VipsFormatCsvClass; static void vips_format_csv_class_init(VipsFormatCsvClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsFormatClass *format_class = (VipsFormatClass *) class; object_class->nickname = "csv"; object_class->description = _("CSV"); format_class->load = im_csv2vips; format_class->save = im_vips2csv; format_class->suffs = csv_suffs; } static void vips_format_csv_init(VipsFormatCsv *object) { } G_DEFINE_TYPE(VipsFormatCsv, vips_format_csv, VIPS_TYPE_FORMAT); libvips-8.15.1/libvips/deprecated/im_debugim.c000066400000000000000000000065571454007373500213200ustar00rootroot00000000000000/* @(#) Function which prints in stdout the values of a picture * @(#) * @(#) For debuging only * @(#) is either memory mapped or in a buffer. * @(#) * @(#) void * @(#) im_debugim(in) * @(#) IMAGE *in; * @(#) * * Copyright: 1991 N. Dessipris * * Author: N. Dessipris * Written on: 18/03/1991 * Modified on: * 15/4/93 J.Cupitt * - returns int, not void now, so error messages work * - detects im->data invalid. * 15/4/93 J.Cupitt * - uses %g format, not %f for printf() * 23/7/93 JC * - im_incheck() added */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include int im_debugim(IMAGE *in) { /* Check our args. */ if (im_incheck(in)) return -1; if (in->Coding != IM_CODING_NONE) { im_error("im_debugim", "%s", _("input must be uncoded")); return -1; } /* What type? First define the loop we want to perform for all types. */ #define loopuc(TYPE) \ { \ TYPE *p = (TYPE *) in->data; \ int x, y, z; \ \ for (y = 0; y < in->Ysize; y++) { \ for (x = 0; x < in->Xsize; x++) { \ for (z = 0; z < in->Bands; z++) { \ fprintf(stderr, "%4d", (TYPE) *p++); \ } \ } \ fprintf(stderr, "\n"); \ } \ } #define loop(TYPE) \ { \ TYPE *p = (TYPE *) in->data; \ int x, y, z; \ \ for (y = 0; y < in->Ysize; y++) { \ for (x = 0; x < in->Xsize; x++) { \ for (z = 0; z < in->Bands; z++) { \ fprintf(stderr, "%g\t", (double) *p++); \ } \ } \ fprintf(stderr, "\n"); \ } \ } #define loopcmplx(TYPE) \ { \ TYPE *p = (TYPE *) in->data; \ int x, y, z; \ \ for (y = 0; y < in->Ysize; y++) { \ for (x = 0; x < in->Xsize; x++) { \ for (z = 0; z < in->Bands; z++) { \ fprintf(stderr, "re=%g\t", (double) *p++); \ fprintf(stderr, "im=%g\t", (double) *p++); \ } \ } \ fprintf(stderr, "\n"); \ } \ } /* Now generate code for all types. */ switch (in->BandFmt) { case IM_BANDFMT_UCHAR: loopuc(unsigned char); break; case IM_BANDFMT_CHAR: loop(char); break; case IM_BANDFMT_USHORT: loop(unsigned short); break; case IM_BANDFMT_SHORT: loop(short); break; case IM_BANDFMT_UINT: loop(unsigned int); break; case IM_BANDFMT_INT: loop(int); break; case IM_BANDFMT_FLOAT: loop(float); break; case IM_BANDFMT_DOUBLE: loop(double); break; case IM_BANDFMT_COMPLEX: loopcmplx(float); break; case IM_BANDFMT_DPCOMPLEX: loopcmplx(double); break; default: im_error("im_debugim", "%s", _("unknown input format")); return -1; } return 0; } libvips-8.15.1/libvips/deprecated/im_dif_std.c000066400000000000000000000062211454007373500213040ustar00rootroot00000000000000/* @(#) Program to calculate the stdev of the differnce image * @(#) at a given displacement vector * * Written : 25/11/1987 * Author : N. Dessipris * Updated : 2/12/1991 * 22/7/93 JC * - im_incheck() added */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include static int im__mean_std_int_buffer(int *buffer, int size, double *pmean, double *pstd) { double mean, std; register int i; int sumf; int temp; int *pbuffer; int sumf2; double correction; /* calulates the correction term for the variance */ double variance; /* = (sumf2 - correction)/n */ if (size <= 0) { im_error("im_mean_std_int_buffer", "%s", _("wrong args")); return -1; } mean = 0.0; std = 0.0; sumf = 0; sumf2 = 0; pbuffer = buffer; for (i = 0; i < size; i++) { temp = *pbuffer++; sumf += temp; sumf2 += (temp * temp); } correction = ((double) (sumf * sumf)) / ((double) size); mean = ((double) sumf) / ((double) size); variance = (sumf2 - correction) / ((double) size); std = sqrt(variance); *pmean = mean; *pstd = std; return 0; } int im_dif_std(IMAGE *im, int xpos, int ypos, int xsize, int ysize, int dx, int dy, double *pmean, double *pstd) { PEL *input, *cpinput; double m, s; int *buf, *pbuf; int x, y; int ofst, bufsize; if (im_incheck(im)) return -1; if ((im->Bands != 1) || (im->BandFmt != IM_BANDFMT_UCHAR)) { im_error("im_dif_std", "%s", _("Unable to accept input")); return -1; } if ((xpos + xsize + dx > im->Xsize) || (ypos + ysize + dy > im->Ysize)) { im_error("im_dif_std", "%s", _("wrong args")); return -1; } bufsize = xsize * ysize; buf = (int *) calloc((unsigned) bufsize, sizeof(int)); if (buf == NULL) { im_error("im_dif_std", "%s", _("calloc failed")); return -1; } input = (PEL *) im->data; input += (ypos * im->Xsize + xpos); ofst = dy * im->Xsize + dx; pbuf = buf; for (y = 0; y < ysize; y++) { cpinput = input; input += im->Xsize; for (x = 0; x < xsize; x++) { *pbuf++ = ((int) (*cpinput)) - ((int) (*(cpinput + ofst))); cpinput++; } } m = 0.0; s = 0.0; if (im__mean_std_int_buffer(buf, bufsize, &m, &s)) { free((char *) buf); return -1; } free((char *) buf); *pmean = m; *pstd = s; return 0; } libvips-8.15.1/libvips/deprecated/im_exr2vips.c000066400000000000000000000050331454007373500214520ustar00rootroot00000000000000/* Convert OpenEXR to VIPS * * 17/12/11 * - just a stub */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include #include "../foreign/pforeign.h" int im_exr2vips(const char *filename, IMAGE *out) { #ifdef HAVE_OPENEXR return vips__openexr_read(filename, out); #else vips_error("im_exr2vips", "%s", _("no OpenEXR support in your libvips")); return -1; #endif /*HAVE_OPENEXR*/ } static const char *exr_suffs[] = { ".exr", NULL }; static VipsFormatFlags exr_flags(const char *name) { char filename[FILENAME_MAX]; char mode[FILENAME_MAX]; im_filename_split(name, filename, mode); return (VipsFormatFlags) vips_foreign_flags("openexrload", filename); } static int isexr(const char *name) { char filename[FILENAME_MAX]; char mode[FILENAME_MAX]; im_filename_split(name, filename, mode); return vips_foreign_is_a("openexrload", filename); } /* exr format adds no new members. */ typedef VipsFormat VipsFormatExr; typedef VipsFormatClass VipsFormatExrClass; static void vips_format_exr_class_init(VipsFormatExrClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsFormatClass *format_class = (VipsFormatClass *) class; object_class->nickname = "exr"; object_class->description = _("OpenEXR"); format_class->is_a = isexr; format_class->load = im_exr2vips; format_class->get_flags = exr_flags; format_class->suffs = exr_suffs; } static void vips_format_exr_init(VipsFormatExr *object) { } G_DEFINE_TYPE(VipsFormatExr, vips_format_exr, VIPS_TYPE_FORMAT); libvips-8.15.1/libvips/deprecated/im_fav4.c000066400000000000000000000044471454007373500205400ustar00rootroot00000000000000/* @(#) Optimised 4 frame average Copyright (C) 1992, Kirk Martinez, History of Art Dept, Birkbeck College */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #define ARGS "fav4: frame average 4 frames\nARGS: im1 im2 im3 im4 outfile" #define NFRAMES 4 /** * im_fav4: * @in: array of 4 input #IMAGE s * @out: output #IMAGE * * Average four identical images. * * Deprecated. */ int im_fav4(IMAGE **in, IMAGE *out) { PEL *result, *buffer, *p1, *p2, *p3, *p4; int x, y; int linebytes, PICY; /* check IMAGEs parameters */ if (im_iocheck(in[1], out)) return -1; /* BYTE images only! */ if ((in[0]->BandFmt != IM_BANDFMT_CHAR) && (in[0]->BandFmt != IM_BANDFMT_UCHAR)) return -1; if (im_cp_desc(out, in[1]) == -1) /* copy image descriptors */ return -1; if (im_setupout(out) == -1) return -1; linebytes = in[0]->Xsize * in[0]->Bands; PICY = in[0]->Ysize; buffer = (PEL *) im_malloc(NULL, linebytes); memset(buffer, 0, linebytes); p1 = (PEL *) in[0]->data; p2 = (PEL *) in[1]->data; p3 = (PEL *) in[2]->data; p4 = (PEL *) in[3]->data; for (y = 0; y < PICY; y++) { result = buffer; /* average 4 pels with rounding, for whole line*/ for (x = 0; x < linebytes; x++) { *result++ = (PEL) ((int) ((int) *p1++ + (int) *p2++ + (int) *p3++ + (int) *p4++ + 2) >> 2); } im_writeline(y, out, buffer); } im_free(buffer); return 0; } libvips-8.15.1/libvips/deprecated/im_freq_mask.c000066400000000000000000000113271454007373500216430ustar00rootroot00000000000000/* Create masks and filter with them. * * Copyright: N. Dessipris 1991, * Written on: Nov 1991 * Updated on: Dec 1991 * 20/9/95 JC * - modernised * 22/3/10 * - gtkdoc */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include /* Make a mask image. */ static int build_freq_mask(IMAGE *out, int xs, int ys, ImMaskType flag, va_list ap) { /* May be fewer than 4 args ... but extract them all anyway. Should be * safe. */ double p0 = va_arg(ap, double); double p1 = va_arg(ap, double); double p2 = va_arg(ap, double); double p3 = va_arg(ap, double); double p4 = va_arg(ap, double); VipsImage *t; switch (flag) { case IM_MASK_IDEAL_HIGHPASS: if (vips_mask_ideal(&t, xs, ys, p0, NULL)) return -1; break; case IM_MASK_IDEAL_LOWPASS: if (vips_mask_ideal(&t, xs, ys, p0, "reject", TRUE, NULL)) return -1; break; case IM_MASK_BUTTERWORTH_HIGHPASS: if (vips_mask_butterworth(&t, xs, ys, p0, p1, p2, NULL)) return -1; break; case IM_MASK_BUTTERWORTH_LOWPASS: if (vips_mask_butterworth(&t, xs, ys, p0, p1, p2, "reject", TRUE, NULL)) return -1; break; case IM_MASK_GAUSS_HIGHPASS: if (vips_mask_gaussian(&t, xs, ys, p0, p1, NULL)) return -1; break; case IM_MASK_GAUSS_LOWPASS: if (vips_mask_gaussian(&t, xs, ys, p0, p1, "reject", TRUE, NULL)) return -1; break; case IM_MASK_IDEAL_RINGPASS: if (vips_mask_ideal_ring(&t, xs, ys, p0, p1, NULL)) return -1; break; case IM_MASK_IDEAL_RINGREJECT: if (vips_mask_ideal_ring(&t, xs, ys, p0, p1, "reject", TRUE, NULL)) return -1; break; case IM_MASK_BUTTERWORTH_RINGPASS: if (vips_mask_butterworth_ring(&t, xs, ys, p0, p1, p2, p3, NULL)) return -1; break; case IM_MASK_BUTTERWORTH_RINGREJECT: if (vips_mask_butterworth_ring(&t, xs, ys, p0, p1, p2, p3, "reject", TRUE, NULL)) return -1; break; case IM_MASK_GAUSS_RINGPASS: if (vips_mask_gaussian_ring(&t, xs, ys, p0, p1, p2, NULL)) return -1; break; case IM_MASK_GAUSS_RINGREJECT: if (vips_mask_gaussian_ring(&t, xs, ys, p0, p1, p2, "reject", TRUE, NULL)) return -1; break; case IM_MASK_FRACTAL_FLT: if (vips_mask_fractal(&t, xs, ys, p0, NULL)) return -1; break; case IM_MASK_IDEAL_BANDPASS: if (vips_mask_ideal_band(&t, xs, ys, p0, p1, p2, NULL)) return -1; break; case IM_MASK_IDEAL_BANDREJECT: if (vips_mask_ideal_band(&t, xs, ys, p0, p1, p2, "reject", TRUE, NULL)) return -1; break; case IM_MASK_BUTTERWORTH_BANDPASS: if (vips_mask_butterworth_band(&t, xs, ys, p0, p1, p2, p3, p4, NULL)) return -1; break; case IM_MASK_BUTTERWORTH_BANDREJECT: if (vips_mask_butterworth_band(&t, xs, ys, p0, p1, p2, p3, p4, "reject", TRUE, NULL)) return -1; break; case IM_MASK_GAUSS_BANDPASS: if (vips_mask_gaussian_band(&t, xs, ys, p0, p1, p2, p3, NULL)) return -1; break; case IM_MASK_GAUSS_BANDREJECT: if (vips_mask_gaussian_band(&t, xs, ys, p0, p1, p2, p3, "reject", TRUE, NULL)) return -1; break; default: im_error("im_freq_mask", "%s", _("unimplemented mask type")); return -1; } if (im_copy(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_flt_image_freq(IMAGE *in, IMAGE *out, ImMaskType flag, ...) { IMAGE *mask = im_open_local(out, "tempmask", "p"); va_list ap; if (!mask) return -1; /* Generate mask. */ va_start(ap, flag); if (build_freq_mask(mask, in->Xsize, in->Ysize, flag, ap)) return -1; va_end(ap); if (im_freqflt(in, mask, out)) return -1; return 0; } int im_create_fmask(IMAGE *out, int xsize, int ysize, ImMaskType flag, ...) { va_list ap; va_start(ap, flag); if (build_freq_mask(out, xsize, ysize, flag, ap)) return -1; va_end(ap); return 0; } libvips-8.15.1/libvips/deprecated/im_gadd.c000066400000000000000000000060071454007373500205710ustar00rootroot00000000000000/* @(#) Generalised addition of two vasari images using the routines * @(#) im_gaddim or im_gfadd * @(#) Convention to ease the complilation time. * @(#) Function im_gadd() assumes that the both input files * @(#) are either memory mapped or in a buffer. * @(#) Images must have the same no of bands and must not be complex * @(#) No check for overflow is carried out. * @(#) * @(#) int im_gadd(a, in1, b, in2, c, out) * @(#) IMAGE *in1, *in2, *out; * @(#) double a, b, c; * @(#) * @(#) Returns 0 on success and -1 on error * @(#) * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 02/05/1990 * Modified on: */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include int im_gfadd(double a, IMAGE *in1, double b, IMAGE *in2, double c, IMAGE *out); int im_gaddim(double a, IMAGE *in1, double b, IMAGE *in2, double c, IMAGE *out); /* This function works on either mmaped files or on images in buffer */ /** * im_gadd: * * Deprecated. */ int im_gadd(double a, IMAGE *in1, double b, IMAGE *in2, double c, IMAGE *out) { int flagint = 0; int flagfloat = 0; int value = 0; switch (in1->BandFmt) { case IM_BANDFMT_UCHAR: case IM_BANDFMT_CHAR: case IM_BANDFMT_USHORT: case IM_BANDFMT_SHORT: case IM_BANDFMT_UINT: case IM_BANDFMT_INT: flagint = 1; break; case IM_BANDFMT_FLOAT: case IM_BANDFMT_DOUBLE: flagfloat = 1; break; default: im_error("im_gadd", "%s", _("Unable to accept image1")); return -1; } switch (in2->BandFmt) { case IM_BANDFMT_UCHAR: case IM_BANDFMT_CHAR: case IM_BANDFMT_USHORT: case IM_BANDFMT_SHORT: case IM_BANDFMT_UINT: case IM_BANDFMT_INT: flagint = 1; break; case IM_BANDFMT_FLOAT: case IM_BANDFMT_DOUBLE: flagfloat = 1; break; default: im_error("im_gadd", "%s", _("Unable to accept image1")); return -1; } /* Select output routines */ if (flagfloat == 1) { value = im_gfadd(a, in1, b, in2, c, out); if (value == -1) return -1; } else if (flagint == 1) { value = im_gaddim(a, in1, b, in2, c, out); if (value == -1) return -1; } else assert(0); return 0; } libvips-8.15.1/libvips/deprecated/im_gaddim.c000066400000000000000000000161001454007373500211120ustar00rootroot00000000000000/* @(#) Generalised addition of two vasari images. * @(#)Inputs, outputs are neither float nor double * @(#) Result at each point is a*in1 + b*in2 + c * @(#) Result depends on inputs, rounding is carried out; * @(#) Function im_gaddim() assumes that the both input files * @(#) are either memory mapped or in a buffer. * @(#) Images must have the same no of bands and must not be complex * @(#) No check for overflow is done; * @(#) * @(#) int im_gaddim(a, in1, b, in2, c, out) * @(#) double a, b, c; * @(#) IMAGE *in1, *in2, *out; * @(#) * @(#) Returns 0 on success and -1 on error * @(#) * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 02/05/1990 * Modified on: */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include /* This function works on either mmaped files or on images in buffer */ /* uchar char ushort short uint int */ static int array[6][6] = { /* uchar */ { 2, 3, 2, 3, 4, 5 }, /* char */ { 3, 3, 3, 3, 5, 5 }, /* ushort */ { 2, 3, 2, 3, 4, 5 }, /* short */ { 3, 3, 3, 3, 5, 5 }, /* uint */ { 4, 5, 4, 5, 4, 5 }, /* int */ { 5, 5, 5, 5, 5, 5 } }; #define select_tmp2_for_out_int(OUT) \ case IM_BANDFMT_UCHAR: \ select_tmp1_for_out_int(unsigned char, OUT); \ break; \ case IM_BANDFMT_CHAR: \ select_tmp1_for_out_int(signed char, OUT); \ break; \ case IM_BANDFMT_USHORT: \ select_tmp1_for_out_int(unsigned short, OUT); \ break; \ case IM_BANDFMT_SHORT: \ select_tmp1_for_out_int(signed short, OUT); \ break; \ case IM_BANDFMT_UINT: \ select_tmp1_for_out_int(unsigned int, OUT); \ break; \ case IM_BANDFMT_INT: \ select_tmp1_for_out_int(signed int, OUT); \ break; \ \ default: \ im_error("im_gaddim", "Wrong tmp2 format(1)"); \ free(line); \ return -1; #define select_tmp1_for_out_int(IN2, OUT) \ switch (tmp1->BandFmt) { \ case IM_BANDFMT_UINT: \ loop(unsigned int, IN2, OUT); \ break; \ case IM_BANDFMT_INT: \ loop(int, IN2, OUT); \ break; \ default: \ im_error("im_gaddim", "Wrong tmp2 format(2)"); \ free(line); \ return -1; \ } #define select_tmp2_for_out_short(OUT) \ case IM_BANDFMT_UCHAR: \ select_tmp1_for_out_short(unsigned char, OUT); \ break; \ case IM_BANDFMT_CHAR: \ select_tmp1_for_out_short(signed char, OUT); \ break; \ case IM_BANDFMT_USHORT: \ select_tmp1_for_out_short(unsigned short, OUT); \ break; \ case IM_BANDFMT_SHORT: \ select_tmp1_for_out_short(signed short, OUT); \ break; \ default: \ g_assert(0); #define select_tmp1_for_out_short(IN2, OUT) \ switch (tmp1->BandFmt) { \ case IM_BANDFMT_UCHAR: \ loop(unsigned char, IN2, OUT); \ break; \ case IM_BANDFMT_CHAR: \ loop(signed char, IN2, OUT); \ break; \ case IM_BANDFMT_USHORT: \ loop(unsigned short, IN2, OUT); \ break; \ case IM_BANDFMT_SHORT: \ loop(signed short, IN2, OUT); \ break; \ default: \ im_error("im_gaddim", "Wrong image1 format(4)"); \ free(line); \ return -1; \ } /** * im_gaddim: * * Deprecated. */ int im_gaddim(double a, IMAGE *in1, double b, IMAGE *in2, double c, IMAGE *out) { static int fmt[] = { IM_BANDFMT_UCHAR, IM_BANDFMT_CHAR, IM_BANDFMT_USHORT, IM_BANDFMT_SHORT, IM_BANDFMT_UINT, IM_BANDFMT_INT }; int y, x; int first, second, result; IMAGE *tmp1, *tmp2; PEL *line; int os; /* size of a line of output image */ /* fd, data filename must have been set before the function is called * Check whether they are set properly */ if ((im_iocheck(in1, out) == -1) || (im_iocheck(in2, out) == -1)) { return -1; } /* Checks the arguments entered in in and prepares out */ if ((in1->Xsize != in2->Xsize) || (in1->Ysize != in2->Ysize) || (in1->Bands != in2->Bands) || (in1->Coding != in2->Coding)) { im_error("im_gaddim", " Input images differ"); return -1; } if (in1->Coding != IM_CODING_NONE) { im_error("im_gaddim", " images must be uncoded"); return -1; } switch (in1->BandFmt) { case IM_BANDFMT_UCHAR: first = 0; break; case IM_BANDFMT_CHAR: first = 1; break; case IM_BANDFMT_USHORT: first = 2; break; case IM_BANDFMT_SHORT: first = 3; break; case IM_BANDFMT_UINT: first = 4; break; case IM_BANDFMT_INT: first = 5; break; default: im_error("im_gaddim", " Unable to accept image1"); return -1; } switch (in2->BandFmt) { case IM_BANDFMT_UCHAR: second = 0; break; case IM_BANDFMT_CHAR: second = 1; break; case IM_BANDFMT_USHORT: second = 2; break; case IM_BANDFMT_SHORT: second = 3; break; case IM_BANDFMT_UINT: second = 4; break; case IM_BANDFMT_INT: second = 5; break; default: im_error("im_gaddim", " Unable to accept image2"); return -1; } /* Define the output */ result = array[first][second]; /* Prepare the output header */ if (im_cp_desc(out, in1) == -1) { im_error("im_gaddim", " im_cp_desc failed"); return -1; } out->BandFmt = fmt[result]; if (im_setupout(out) == -1) { im_error("im_gaddim", " im_setupout failed"); return -1; } /* Order in1 and in2 */ if (first >= second) { tmp1 = in1; tmp2 = in2; } else { tmp1 = in2; tmp2 = in1; } /* Define what we do for each band element type. */ #define loop(IN1, IN2, OUT) \ { \ IN1 *input1 = (IN1 *) tmp1->data; \ IN2 *input2 = (IN2 *) tmp2->data; \ \ for (y = 0; y < out->Ysize; y++) { \ OUT *cpline = (OUT *) line; \ for (x = 0; x < os; x++) \ *cpline++ = \ (OUT) (a * (*input1++) + b * (*input2++) + c + 0.5); \ if (im_writeline(y, out, line) == -1) { \ free(line); \ return -1; \ } \ } \ } os = out->Xsize * out->Bands; line = (PEL *) calloc((unsigned) os, sizeof(double)); if (line == NULL) { im_error("im_gaddim", " Unable to calloc"); return -1; } switch (out->BandFmt) { case IM_BANDFMT_INT: switch (tmp2->BandFmt) { select_tmp2_for_out_int(int); } break; case IM_BANDFMT_UINT: switch (tmp2->BandFmt) { select_tmp2_for_out_int(unsigned int); } break; case IM_BANDFMT_SHORT: switch (tmp2->BandFmt) { select_tmp2_for_out_short(short); } break; case IM_BANDFMT_USHORT: switch (tmp2->BandFmt) { select_tmp2_for_out_short(unsigned short); } break; default: im_error("im_gaddim", " Impossible output state"); free(line); return -1; } free(line); return 0; } libvips-8.15.1/libvips/deprecated/im_gfadd.c000066400000000000000000000234061454007373500207410ustar00rootroot00000000000000/* @(#) Generalised addition of two vasari images. Result (double or float) * @(#)depends on inputs * @(#) Function im_gfadd() assumes that the both input files * @(#) are either memory mapped or in a buffer. * @(#) Images must have the same no of bands and can be of any type * @(#) No check for overflow is carried out. If in doubt use im_clip2... * @(#) Result at eachpoint is a*in1 + b*in2 + c * @(#) * @(#) int im_gfadd(a, in1, b, in2, c, out) * @(#) double a, b, c; * @(#) IMAGE *in1, *in2, *out; * @(#) * @(#) Returns 0 on success and -1 on error * @(#) * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 02/05/1990 * Modified on: * 15/6/93 J.Cupitt * - externs removed * - casts added to please ANSI C * - includes rationalised */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include /* uchar char ushort short uint int float double */ static int array[8][8] = { /* uchar */ { 0, 0, 0, 0, 0, 0, 0, 1 }, /* char */ { 0, 0, 0, 0, 0, 0, 0, 1 }, /* ushort */ { 0, 0, 0, 0, 0, 0, 0, 1 }, /* short */ { 0, 0, 0, 0, 0, 0, 0, 1 }, /* uint */ { 0, 0, 0, 0, 0, 0, 0, 1 }, /* int */ { 0, 0, 0, 0, 0, 0, 0, 1 }, /* float */ { 0, 0, 0, 0, 0, 0, 0, 1 }, /* double */ { 1, 1, 1, 1, 1, 1, 1, 1 } }; #define select_outdouble(IN2, OUT) \ switch (tmp1->BandFmt) { \ case IM_BANDFMT_DOUBLE: \ loop(double, IN2, OUT); \ break; \ default: \ im_error("im_gfadd", "Wrong tmp1 format(d)"); \ free(line); \ return -1; \ } #define outfloat_2uchar(IN2, OUT) \ case IM_BANDFMT_UCHAR: \ loop(unsigned char, IN2, OUT); \ break; \ case IM_BANDFMT_CHAR: \ loop(signed char, IN2, OUT); \ break; \ case IM_BANDFMT_USHORT: \ loop(unsigned short, IN2, OUT); \ break; \ case IM_BANDFMT_SHORT: \ loop(signed short, IN2, OUT); \ break; \ case IM_BANDFMT_UINT: \ loop(unsigned int, IN2, OUT); \ break; \ case IM_BANDFMT_INT: \ loop(signed int, IN2, OUT); \ break; \ case IM_BANDFMT_FLOAT: \ loop(float, IN2, OUT); \ break; #define outfloat_2char(IN2, OUT) \ case IM_BANDFMT_CHAR: \ loop(signed char, IN2, OUT); \ break; \ case IM_BANDFMT_USHORT: \ loop(unsigned short, IN2, OUT); \ break; \ case IM_BANDFMT_SHORT: \ loop(signed short, IN2, OUT); \ break; \ case IM_BANDFMT_UINT: \ loop(unsigned int, IN2, OUT); \ break; \ case IM_BANDFMT_INT: \ loop(signed int, IN2, OUT); \ break; \ case IM_BANDFMT_FLOAT: \ loop(float, IN2, OUT); \ break; #define outfloat_2ushort(IN2, OUT) \ case IM_BANDFMT_USHORT: \ loop(unsigned short, IN2, OUT); \ break; \ case IM_BANDFMT_SHORT: \ loop(signed short, IN2, OUT); \ break; \ case IM_BANDFMT_UINT: \ loop(unsigned int, IN2, OUT); \ break; \ case IM_BANDFMT_INT: \ loop(signed int, IN2, OUT); \ break; \ case IM_BANDFMT_FLOAT: \ loop(float, IN2, OUT); \ break; #define outfloat_2short(IN2, OUT) \ case IM_BANDFMT_SHORT: \ loop(signed short, IN2, OUT); \ break; \ case IM_BANDFMT_UINT: \ loop(unsigned int, IN2, OUT); \ break; \ case IM_BANDFMT_INT: \ loop(signed int, IN2, OUT); \ break; \ case IM_BANDFMT_FLOAT: \ loop(float, IN2, OUT); \ break; #define outfloat_2uint(IN2, OUT) \ case IM_BANDFMT_UINT: \ loop(unsigned int, IN2, OUT); \ break; \ case IM_BANDFMT_INT: \ loop(signed int, IN2, OUT); \ break; \ case IM_BANDFMT_FLOAT: \ loop(float, IN2, OUT); \ break; #define outfloat_2int(IN2, OUT) \ case IM_BANDFMT_INT: \ loop(signed int, IN2, OUT); \ break; \ case IM_BANDFMT_FLOAT: \ loop(float, IN2, OUT); \ break; #define outfloat_2float(IN2, OUT) \ case IM_BANDFMT_FLOAT: \ loop(float, IN2, OUT); \ break; /** * im_gfadd: * * Deprecated. */ int im_gfadd(double a, IMAGE *in1, double b, IMAGE *in2, double c, IMAGE *out) { static int fmt[] = { IM_BANDFMT_FLOAT, IM_BANDFMT_DOUBLE }; int y, x; int first, second, result; IMAGE *tmp1, *tmp2; PEL *line; int os; /* size of a line of output image */ /* fd, data filename must have been set before the function is called * Check whether they are set properly */ if ((im_iocheck(in1, out) == -1) || (im_iocheck(in2, out) == -1)) { im_error("im_gfadd", " im_iocheck failed"); return -1; } /* Checks the arguments entered in in and prepares out */ if ((in1->Xsize != in2->Xsize) || (in1->Ysize != in2->Ysize) || (in1->Bands != in2->Bands) || (in1->Coding != in2->Coding)) { im_error("im_gfadd", " Input images differ"); return -1; } if (in1->Coding != IM_CODING_NONE) { im_error("im_gfadd", " images are coded"); return -1; } switch (in1->BandFmt) { case IM_BANDFMT_UCHAR: first = 0; break; case IM_BANDFMT_CHAR: first = 1; break; case IM_BANDFMT_USHORT: first = 2; break; case IM_BANDFMT_SHORT: first = 3; break; case IM_BANDFMT_UINT: first = 4; break; case IM_BANDFMT_INT: first = 5; break; case IM_BANDFMT_FLOAT: first = 6; break; case IM_BANDFMT_DOUBLE: first = 7; break; default: im_error("im_gfadd", " unable to accept image1"); return -1; } switch (in2->BandFmt) { case IM_BANDFMT_UCHAR: second = 0; break; case IM_BANDFMT_CHAR: second = 1; break; case IM_BANDFMT_USHORT: second = 2; break; case IM_BANDFMT_SHORT: second = 3; break; case IM_BANDFMT_UINT: second = 4; break; case IM_BANDFMT_INT: second = 5; break; case IM_BANDFMT_FLOAT: second = 6; break; case IM_BANDFMT_DOUBLE: second = 7; break; default: im_error("im_gfadd", " unable to accept image2"); return -1; } /* Define the output */ result = array[first][second]; /* Prepare output */ if (im_cp_desc(out, in1) == -1) { im_error("im_gfadd", " im_cp_desc failed"); return -1; } out->BandFmt = fmt[result]; if (im_setupout(out) == -1) { im_error("im_gfadd", " im_setupout failed"); return -1; } /* Order in1 and in2 */ if (first >= second) { tmp1 = in1; tmp2 = in2; } else { tmp1 = in2; tmp2 = in1; } /* Define what we do for each band element type. */ #define loop(IN1, IN2, OUT) \ { \ IN1 *input1 = (IN1 *) tmp1->data; \ IN2 *input2 = (IN2 *) tmp2->data; \ \ for (y = 0; y < out->Ysize; y++) { \ OUT *cpline = (OUT *) line; \ for (x = 0; x < os; x++) \ *cpline++ = (a * ((OUT) *input1++) + \ b * ((OUT) *input2++) + c); \ if (im_writeline(y, out, line)) { \ im_error("im_gfadd", " im_writeline failed"); \ free(line); \ return -1; \ } \ } \ } os = out->Xsize * out->Bands; line = (PEL *) calloc((unsigned) os, sizeof(double)); if (line == NULL) { im_error("im_gfadd", " unable to calloc"); return -1; } switch (out->BandFmt) { case IM_BANDFMT_DOUBLE: switch (tmp2->BandFmt) { case IM_BANDFMT_UCHAR: select_outdouble(unsigned char, double); break; case IM_BANDFMT_CHAR: select_outdouble(signed char, double); break; case IM_BANDFMT_USHORT: select_outdouble(unsigned short, double); break; case IM_BANDFMT_SHORT: select_outdouble(signed short, double); break; case IM_BANDFMT_UINT: select_outdouble(unsigned int, double); break; case IM_BANDFMT_INT: select_outdouble(signed int, double); break; case IM_BANDFMT_FLOAT: select_outdouble(float, double); break; case IM_BANDFMT_DOUBLE: select_outdouble(double, double); break; default: im_error("im_gfadd", "Wrong tmp2 format(d)"); free(line); return -1; } break; case IM_BANDFMT_FLOAT: switch (tmp2->BandFmt) { case IM_BANDFMT_UCHAR: switch (tmp1->BandFmt) { outfloat_2uchar(unsigned char, float); default: im_error("im_gfadd", " Error (a)"); free(line); return -1; } break; case IM_BANDFMT_CHAR: switch (tmp1->BandFmt) { outfloat_2char(signed char, float); default: im_error("im_gfadd", " Error (b)"); free(line); return -1; } break; case IM_BANDFMT_USHORT: switch (tmp1->BandFmt) { outfloat_2ushort(unsigned short, float); default: im_error("im_gfadd", " Error (c)"); free(line); return -1; } break; case IM_BANDFMT_SHORT: switch (tmp1->BandFmt) { outfloat_2short(signed short, float); default: im_error("im_gfadd", " Error (d)"); free(line); return -1; } break; case IM_BANDFMT_UINT: switch (tmp1->BandFmt) { outfloat_2uint(unsigned int, float); default: im_error("im_gfadd", " Error (e)"); free(line); return -1; } break; case IM_BANDFMT_INT: switch (tmp1->BandFmt) { outfloat_2int(signed int, float); default: im_error("im_gfadd", " Error (f)"); free(line); return -1; } break; case IM_BANDFMT_FLOAT: switch (tmp1->BandFmt) { outfloat_2float(float, float); default: im_error("im_gfadd", " Error (g)"); free(line); return -1; } break; default: im_error("im_gfadd", " Wrong tmp2 format(f)"); free(line); return -1; } break; default: im_error("im_gfadd", " Impossible output state"); free(line); return -1; } free(line); return 0; } libvips-8.15.1/libvips/deprecated/im_gradcor.c000066400000000000000000000405461454007373500213210ustar00rootroot00000000000000/* im_gradcor * * Copyright: 2007 Nottingham Trent University * * Author: Tom Vajzovic * Written on: 2007-06-07 * 3/2/10 * - gtkdoc * - cleanups */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include typedef struct { REGION *reg; int *region_xgrad; int *region_ygrad; size_t region_xgrad_area; size_t region_ygrad_area; } gradcor_seq_t; static void *gradcor_start(IMAGE *out, void *vptr_large, void *unrequired); static int gradcor_stop(void *vptr_seq, void *unrequired, void *unreq2); static int gradcor_gen(REGION *to_make, void *vptr_seq, void *unrequired, void *vptr_grads); #define XGRAD_GEN_DECLARATION(TYPE) static int xgrad_gen_##TYPE(REGION *to_make, void *vptr_make_from, void *unrequired, void *unreq2) #define YGRAD_GEN_DECLARATION(TYPE) static int ygrad_gen_##TYPE(REGION *to_make, void *vptr_make_from, void *unrequired, void *unreq2) XGRAD_GEN_DECLARATION(guint8); YGRAD_GEN_DECLARATION(guint8); XGRAD_GEN_DECLARATION(gint8); YGRAD_GEN_DECLARATION(gint8); XGRAD_GEN_DECLARATION(guint16); YGRAD_GEN_DECLARATION(guint16); XGRAD_GEN_DECLARATION(gint16); YGRAD_GEN_DECLARATION(gint16); XGRAD_GEN_DECLARATION(guint32); YGRAD_GEN_DECLARATION(guint32); XGRAD_GEN_DECLARATION(gint32); YGRAD_GEN_DECLARATION(gint32); #if 0 XGRAD_GEN_DECLARATION(float); YGRAD_GEN_DECLARATION(float); XGRAD_GEN_DECLARATION(double); YGRAD_GEN_DECLARATION(double); #endif int im_gradcor_raw(IMAGE *large, IMAGE *small, IMAGE *out) { #define FUNCTION_NAME "im_gradcor_raw" if (im_piocheck(large, out) || im_pincheck(small)) return -1; if (im_check_uncoded("im_gradcor", large) || im_check_mono("im_gradcor", large) || im_check_uncoded("im_gradcor", small) || im_check_mono("im_gradcor", small) || im_check_format_same("im_gradcor", large, small) || im_check_int("im_gradcor", large)) return -1; if (large->Xsize < small->Xsize || large->Ysize < small->Ysize) { im_error(FUNCTION_NAME, "second image must be smaller than first"); return -1; } if (im_cp_desc(out, large)) return -1; out->Xsize = 1 + large->Xsize - small->Xsize; out->Ysize = 1 + large->Ysize - small->Ysize; out->BandFmt = IM_BANDFMT_FLOAT; if (im_demand_hint(out, IM_FATSTRIP, large, NULL)) return -1; { IMAGE *xgrad = im_open_local(out, FUNCTION_NAME ": xgrad", "t"); IMAGE *ygrad = im_open_local(out, FUNCTION_NAME ": ygrad", "t"); IMAGE **grads = im_allocate_input_array(out, xgrad, ygrad, NULL); if (!xgrad || !ygrad || !grads || im_grad_x(small, xgrad) || im_grad_y(small, ygrad)) return -1; if (im_generate(out, gradcor_start, gradcor_gen, gradcor_stop, (void *) large, (void *) grads)) return -1; return 0; } #undef FUNCTION_NAME } /** * im_gradcor: * @in: input image * @ref: reference image * @out: output image * * Calculate a correlation surface. * * @ref is placed at every position in @in and a correlation coefficient * calculated. One-band, integer images only. @in and @ref must have the * same #VipsBandFmt. The output * image is always %IM_BANDFMT_FLOAT. @ref must be smaller than @in. The output * image is the same size as the input. * * The method takes the gradient images of the two images then takes the * dot-product correlation of the two vector images. * The vector expression of this method is my (tcv) own creation. It is * equivalent to the complex-number method of: * * ARGYRIOU, V. et al. 2003. Estimation of sub-pixel motion using * gradient cross correlation. Electronics Letters, 39 (13). * * See also: im_spcor(). * * Returns: 0 on success, -1 on error */ int im_gradcor(IMAGE *in, IMAGE *ref, IMAGE *out) { #define FUNCTION_NAME "im_gradcor" IMAGE *t1 = im_open_local(out, FUNCTION_NAME " intermediate", "p"); if (!t1 || im_embed(in, t1, 1, ref->Xsize / 2, ref->Ysize / 2, in->Xsize + ref->Xsize - 1, in->Ysize + ref->Ysize - 1) || im_gradcor_raw(t1, ref, out)) return -1; out->Xoffset = 0; out->Yoffset = 0; return 0; #undef FUNCTION_NAME } /** * im_grad_x: * @in: input image * @out: output image * * Find horizontal differences between adjacent pixels. * * Generates an image where the value of each pixel is the difference between * it and the pixel to its right. The output has the same height as the input * and one pixel less width. One-band integer formats only. The result is * always %IM_BANDFMT_INT. * * This operation is much faster than (though equivalent to) im_conv() with the * mask [[-1, 1]]. * * See also: im_grad_y(), im_conv(). * * Returns: 0 on success, -1 on error */ int im_grad_x(IMAGE *in, IMAGE *out) { #define FUNCTION_NAME "im_grad_x" if (im_piocheck(in, out)) return -1; if (im_check_uncoded("im_grad_x", in) || im_check_mono("im_grad_x", in) || im_check_int("im_grad_x", in)) return -1; if (im_cp_desc(out, in)) return -1; --out->Xsize; out->BandFmt = IM_BANDFMT_INT; /* do not change without updating im_gradcor() */ if (im_demand_hint(out, IM_THINSTRIP, in, NULL)) return -1; #define RETURN_GENERATE(TYPE) return im_generate(out, im_start_one, xgrad_gen_##TYPE, im_stop_one, (void *) in, NULL) switch (in->BandFmt) { case IM_BANDFMT_UCHAR: RETURN_GENERATE(guint8); case IM_BANDFMT_CHAR: RETURN_GENERATE(gint8); case IM_BANDFMT_USHORT: RETURN_GENERATE(guint16); case IM_BANDFMT_SHORT: RETURN_GENERATE(gint16); case IM_BANDFMT_UINT: RETURN_GENERATE(guint32); case IM_BANDFMT_INT: RETURN_GENERATE(gint32); #if 0 case IM_BANDFMT_FLOAT: RETURN_GENERATE(float); case IM_BANDFMT_DOUBLE: RETURN_GENERATE(double); #endif #undef RETURN_GENERATE default: g_assert(0); } /* Keep gcc happy. */ return 0; #undef FUNCTION_NAME } /** * im_grad_y: * @in: input image * @out: output image * * Find vertical differences between adjacent pixels. * * Generates an image where the value of each pixel is the difference between * it and the pixel below it. The output has the same width as the input * and one pixel less height. One-band integer formats only. The result is * always %IM_BANDFMT_INT. * * This operation is much faster than (though equivalent to) im_conv() with the * mask [[-1], [1]]. * * See also: im_grad_x(), im_conv(). * * Returns: 0 on success, -1 on error */ int im_grad_y(IMAGE *in, IMAGE *out) { #define FUNCTION_NAME "im_grad_y" if (im_piocheck(in, out)) return -1; if (im_check_uncoded("im_grad_y", in) || im_check_mono("im_grad_y", in) || im_check_int("im_grad_y", in)) return -1; if (im_cp_desc(out, in)) return -1; --out->Ysize; out->BandFmt = IM_BANDFMT_INT; /* do not change without updating im_gradcor() */ if (im_demand_hint(out, IM_FATSTRIP, in, NULL)) return -1; #define RETURN_GENERATE(TYPE) return im_generate(out, im_start_one, ygrad_gen_##TYPE, im_stop_one, (void *) in, NULL) switch (in->BandFmt) { case IM_BANDFMT_UCHAR: RETURN_GENERATE(guint8); case IM_BANDFMT_CHAR: RETURN_GENERATE(gint8); case IM_BANDFMT_USHORT: RETURN_GENERATE(guint16); case IM_BANDFMT_SHORT: RETURN_GENERATE(gint16); case IM_BANDFMT_UINT: RETURN_GENERATE(guint32); case IM_BANDFMT_INT: RETURN_GENERATE(gint32); #if 0 case IM_BANDFMT_FLOAT: RETURN_GENERATE(float); case IM_BANDFMT_DOUBLE: RETURN_GENERATE(double); #endif #undef RETURN_GENERATE default: g_assert(0); } /* Keep gcc happy. */ return 0; #undef FUNCTION_NAME } static void * gradcor_start(IMAGE *out, void *vptr_large, void *unrequired) { gradcor_seq_t *seq = IM_NEW(NULL, gradcor_seq_t); if (!seq) return NULL; seq->region_xgrad = (int *) NULL; seq->region_ygrad = (int *) NULL; seq->region_xgrad_area = 0; seq->region_ygrad_area = 0; seq->reg = im_region_create((IMAGE *) vptr_large); if (!seq->reg) { im_free((void *) seq); return NULL; } return (void *) seq; } static int gradcor_stop(void *vptr_seq, void *unrequired, void *unreq2) { gradcor_seq_t *seq = (gradcor_seq_t *) vptr_seq; if (seq) { im_free((void *) seq->region_xgrad); im_free((void *) seq->region_ygrad); im_region_free(seq->reg); seq->region_xgrad = (int *) NULL; seq->region_ygrad = (int *) NULL; seq->reg = (REGION *) NULL; im_free((void *) seq); } return 0; } static int gradcor_gen(REGION *to_make, void *vptr_seq, void *unrequired, void *vptr_grads) { gradcor_seq_t *seq = (gradcor_seq_t *) vptr_seq; REGION *make_from = seq->reg; IMAGE **grads = (IMAGE **) vptr_grads; IMAGE *small_xgrad = grads[0]; IMAGE *small_ygrad = grads[1]; Rect require = { to_make->valid.left, to_make->valid.top, to_make->valid.width + small_xgrad->Xsize, to_make->valid.height + small_ygrad->Ysize }; size_t region_xgrad_width = require.width - 1; size_t region_ygrad_height = require.height - 1; if (im_prepare(make_from, &require)) return -1; #define FILL_BUFFERS(TYPE) /* fill region_xgrad */ \ { \ TYPE *reading = (TYPE *) IM_REGION_ADDR(make_from, require.left, require.top); \ size_t read_skip = (IM_REGION_LSKIP(make_from) / sizeof(TYPE)) - region_xgrad_width; \ size_t area_need = region_xgrad_width * require.height; \ \ if (seq->region_xgrad_area < area_need) { \ free(seq->region_xgrad); \ seq->region_xgrad = malloc(area_need * sizeof(int)); \ if (!seq->region_xgrad) \ return -1; \ seq->region_xgrad_area = area_need; \ } \ { \ int *writing = seq->region_xgrad; \ int *write_end = writing + area_need; \ int *write_stop; \ for (; writing < write_end; reading += read_skip) \ for (write_stop = writing + region_xgrad_width; writing < write_stop; ++reading, ++writing) \ *writing = reading[1] - reading[0]; \ } \ } \ { /* fill region_ygrad */ \ TYPE *reading = (TYPE *) IM_REGION_ADDR(make_from, require.left, require.top); \ size_t read_line = IM_REGION_LSKIP(make_from) / sizeof(TYPE); \ size_t read_skip = read_line - require.width; \ size_t area_need = require.width * region_ygrad_height; \ \ if (seq->region_ygrad_area < area_need) { \ free(seq->region_ygrad); \ seq->region_ygrad = malloc(area_need * sizeof(int)); \ if (!seq->region_ygrad) \ return -1; \ seq->region_ygrad_area = area_need; \ } \ { \ int *writing = seq->region_ygrad; \ int *write_end = writing + area_need; \ int *write_stop; \ for (; writing < write_end; reading += read_skip) \ for (write_stop = writing + require.width; writing < write_stop; ++reading, ++writing) \ *writing = reading[read_line] - reading[0]; \ } \ } switch (make_from->im->BandFmt) { case IM_BANDFMT_UCHAR: FILL_BUFFERS(unsigned char) break; case IM_BANDFMT_CHAR: FILL_BUFFERS(signed char) break; case IM_BANDFMT_USHORT: FILL_BUFFERS(unsigned short int) break; case IM_BANDFMT_SHORT: FILL_BUFFERS(signed short int) break; case IM_BANDFMT_UINT: FILL_BUFFERS(unsigned int) break; case IM_BANDFMT_INT: FILL_BUFFERS(signed int) break; default: g_assert(0); } { /* write to output */ size_t write_skip = IM_REGION_LSKIP(to_make) / sizeof(float); float *writing = (float *) IM_REGION_ADDR_TOPLEFT(to_make); float *write_end = writing + write_skip * to_make->valid.height; float *write_stop; size_t write_width = to_make->valid.width; size_t small_xgrad_width = small_xgrad->Xsize; size_t small_ygrad_width = small_ygrad->Xsize; int *small_xgrad_end = (int *) small_xgrad->data + small_xgrad_width * small_xgrad->Ysize; int *small_ygrad_end = (int *) small_ygrad->data + small_ygrad_width * small_ygrad->Ysize; int *region_xgrad_start = seq->region_xgrad; int *region_ygrad_start = seq->region_ygrad; size_t region_xgrad_start_skip = region_xgrad_width - write_width; size_t region_ygrad_start_skip = require.width - write_width; size_t region_xgrad_read_skip = region_xgrad_width - small_xgrad_width; size_t region_ygrad_read_skip = require.width - small_ygrad_width; write_skip -= write_width; for (; writing < write_end; writing += write_skip, region_xgrad_start += region_xgrad_start_skip, region_ygrad_start += region_ygrad_start_skip) for (write_stop = writing + write_width; writing < write_stop; ++writing, ++region_xgrad_start, ++region_ygrad_start) { gint64 sum = 0; { int *small_xgrad_read = (int *) small_xgrad->data; int *small_xgrad_stop; int *region_xgrad_read = region_xgrad_start; for (; small_xgrad_read < small_xgrad_end; region_xgrad_read += region_xgrad_read_skip) for (small_xgrad_stop = small_xgrad_read + small_xgrad_width; small_xgrad_read < small_xgrad_stop; ++small_xgrad_read, ++region_xgrad_read) sum += *small_xgrad_read * *region_xgrad_read; } { int *small_ygrad_read = (int *) small_ygrad->data; int *small_ygrad_stop; int *region_ygrad_read = region_ygrad_start; for (; small_ygrad_read < small_ygrad_end; region_ygrad_read += region_ygrad_read_skip) for (small_ygrad_stop = small_ygrad_read + small_ygrad_width; small_ygrad_read < small_ygrad_stop; ++small_ygrad_read, ++region_ygrad_read) sum += *small_ygrad_read * *region_ygrad_read; } *writing = sum; } } return 0; } #define XGRAD_GEN_DEFINITION(TYPE) \ static int xgrad_gen_##TYPE(REGION *to_make, void *vptr_make_from, void *unrequired, void *unreq2) \ { \ \ REGION *make_from = (REGION *) vptr_make_from; \ Rect require = { \ to_make->valid.left, \ to_make->valid.top, \ to_make->valid.width + 1, \ to_make->valid.height \ }; \ if (im_prepare(make_from, &require)) \ return -1; \ \ { \ int *writing = (int *) IM_REGION_ADDR_TOPLEFT(to_make); \ size_t write_skip = IM_REGION_LSKIP(to_make) / sizeof(int); \ int *write_end = writing + write_skip * to_make->valid.height; \ size_t write_width = to_make->valid.width; \ int *write_stop; \ \ TYPE *reading = (TYPE *) IM_REGION_ADDR(make_from, require.left, require.top); \ size_t read_skip = (IM_REGION_LSKIP(make_from) / sizeof(TYPE)) - write_width; \ \ write_skip -= write_width; \ \ for (; writing < write_end; writing += write_skip, reading += read_skip) \ for (write_stop = writing + write_width; writing < write_stop; ++writing, ++reading) \ *writing = (int) (reading[1] - reading[0]); \ } \ return 0; \ } #define YGRAD_GEN_DEFINITION(TYPE) \ static int ygrad_gen_##TYPE(REGION *to_make, void *vptr_make_from, void *unrequired, void *unreq2) \ { \ \ REGION *make_from = (REGION *) vptr_make_from; \ Rect require = { \ to_make->valid.left, \ to_make->valid.top, \ to_make->valid.width, \ to_make->valid.height + 1 \ }; \ if (im_prepare(make_from, &require)) \ return -1; \ \ { \ int *writing = (int *) IM_REGION_ADDR_TOPLEFT(to_make); \ size_t write_skip = IM_REGION_LSKIP(to_make) / sizeof(int); \ int *write_end = writing + write_skip * to_make->valid.height; \ size_t write_width = to_make->valid.width; \ int *write_stop; \ \ TYPE *reading = (TYPE *) IM_REGION_ADDR(make_from, require.left, require.top); \ size_t read_line = IM_REGION_LSKIP(make_from) / sizeof(TYPE); \ size_t read_skip = read_line - write_width; \ \ write_skip -= write_width; \ \ for (; writing < write_end; writing += write_skip, reading += read_skip) \ for (write_stop = writing + write_width; writing < write_stop; ++writing, ++reading) \ *writing = (int) (reading[read_line] - reading[0]); \ } \ return 0; \ } XGRAD_GEN_DEFINITION(guint8) YGRAD_GEN_DEFINITION(guint8) XGRAD_GEN_DEFINITION(gint8) YGRAD_GEN_DEFINITION(gint8) XGRAD_GEN_DEFINITION(guint16) YGRAD_GEN_DEFINITION(guint16) XGRAD_GEN_DEFINITION(gint16) YGRAD_GEN_DEFINITION(gint16) XGRAD_GEN_DEFINITION(guint32) YGRAD_GEN_DEFINITION(guint32) XGRAD_GEN_DEFINITION(gint32) YGRAD_GEN_DEFINITION(gint32) #if 0 XGRAD_GEN_DEFINITION(float) YGRAD_GEN_DEFINITION(float) XGRAD_GEN_DEFINITION(double) YGRAD_GEN_DEFINITION(double) #endif libvips-8.15.1/libvips/deprecated/im_jpeg2vips.c000066400000000000000000000107461454007373500216100ustar00rootroot00000000000000/* Convert 1 or 3-band 8-bit VIPS images to/from JPEG. * * 30/11/11 * - now just a stub * 10/7/12 * - use jpeg funcs directly rather than going though vips_jpegload() */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "../foreign/pforeign.h" static int jpeg2vips(const char *name, IMAGE *out, gboolean header_only) { char filename[FILENAME_MAX]; char mode[FILENAME_MAX]; char *p, *q; int shrink; int seq; gboolean fail_on_warn; /* By default, we ignore any warnings. We want to get as much of * the user's data as we can. */ fail_on_warn = FALSE; /* Parse the filename. */ im_filename_split(name, filename, mode); p = &mode[0]; shrink = 1; seq = 0; if ((q = im_getnextoption(&p))) { shrink = atoi(q); if (shrink != 1 && shrink != 2 && shrink != 4 && shrink != 8) { im_error("im_jpeg2vips", _("bad shrink factor %d"), shrink); return -1; } } if ((q = im_getnextoption(&p))) { if (im_isprefix("fail", q)) fail_on_warn = TRUE; } if ((q = im_getnextoption(&p))) { if (im_isprefix("seq", q)) seq = 1; } /* Don't use vips_jpegload() ... we call the jpeg func directly in * order to avoid the foreign.c mechanisms for load-via-disc and stuff * like that. */ /* We need to be compatible with the pre-sequential mode * im_jpeg2vips(). This returned a "t" if given a "p" image, since it * used writeline. * * If we're writing the image to a "p", switch it to a "t". */ if (!header_only && !seq && out->dtype == VIPS_IMAGE_PARTIAL) { if (vips__image_wio_output(out)) return -1; } #ifdef HAVE_JPEG { VipsSource *source; if (!(source = vips_source_new_from_file(filename))) return -1; if (vips__jpeg_read_source(source, out, header_only, shrink, fail_on_warn, FALSE, FALSE)) { VIPS_UNREF(source); return -1; } VIPS_UNREF(source); } #else vips_error("im_jpeg2vips", "%s", _("no JPEG support in your libvips")); return -1; #endif /*HAVE_JPEG*/ return 0; } int im_jpeg2vips(const char *name, IMAGE *out) { return jpeg2vips(name, out, FALSE); } /* By having a separate header func, we get lazy.c to open via disc/mem. */ static int im_jpeg2vips_header(const char *name, IMAGE *out) { return jpeg2vips(name, out, TRUE); } int im_bufjpeg2vips(void *buf, size_t len, IMAGE *out, gboolean header_only) { VipsImage *t; /* header_only is now automatic ... this call will only decompress on * pixel access. */ if (vips_jpegload_buffer(buf, len, &t, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } static int isjpeg(const char *name) { char filename[FILENAME_MAX]; char mode[FILENAME_MAX]; im_filename_split(name, filename, mode); return vips_foreign_is_a("jpegload", filename); } static const char *jpeg_suffs[] = { ".jpg", ".jpeg", ".jpe", NULL }; /* jpeg format adds no new members. */ typedef VipsFormat VipsFormatJpeg; typedef VipsFormatClass VipsFormatJpegClass; static void vips_format_jpeg_class_init(VipsFormatJpegClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsFormatClass *format_class = (VipsFormatClass *) class; object_class->nickname = "jpeg"; object_class->description = _("JPEG"); format_class->is_a = isjpeg; format_class->header = im_jpeg2vips_header; format_class->load = im_jpeg2vips; format_class->save = im_vips2jpeg; format_class->suffs = jpeg_suffs; } static void vips_format_jpeg_init(VipsFormatJpeg *object) { } G_DEFINE_TYPE(VipsFormatJpeg, vips_format_jpeg, VIPS_TYPE_FORMAT); libvips-8.15.1/libvips/deprecated/im_lab_morph.c000066400000000000000000000152401454007373500216340ustar00rootroot00000000000000/* Morph a lab image. * * 8/3/01 * - added * 2/11/09 * - cleanups * - gtkdoc */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include int im__colour_unary(const char *domain, IMAGE *in, IMAGE *out, VipsType type, im_wrapone_fn buffer_fn, void *a, void *b) { IMAGE *t[1]; if (im_check_uncoded(domain, in) || im_check_bands(domain, in, 3) || im_open_local_array(out, t, 1, domain, "p") || im_clip2fmt(in, t[0], IM_BANDFMT_FLOAT)) return -1; if (im_cp_desc(out, t[0])) return -1; out->Type = type; if (im_wrapone(t[0], out, (im_wrapone_fn) buffer_fn, a, b)) return -1; return 0; } typedef struct { IMAGE *in, *out; double L_scale, L_offset; double a_offset[101], b_offset[101]; double a_scale, b_scale; } Params; static int morph_init(Params *parm, IMAGE *in, IMAGE *out, double L_scale, double L_offset, DOUBLEMASK *mask, double a_scale, double b_scale) { int i, j; parm->in = in; parm->out = out; parm->L_scale = L_scale; parm->L_offset = L_offset; parm->a_scale = a_scale; parm->b_scale = b_scale; if (mask->xsize != 3 || mask->ysize < 1 || mask->ysize > 100) { im_error("im_lab_morph", "%s", _("bad greyscale mask size")); return -1; } for (i = 0; i < mask->ysize; i++) { double L = mask->coeff[i * 3]; double a = mask->coeff[i * 3 + 1]; double b = mask->coeff[i * 3 + 2]; if (L < 0 || L > 100 || a < -120 || a > 120 || b < -120 || b > 120) { im_error("im_lab_morph", _("bad greyscale mask value, row %d"), i); return -1; } } /* Generate a/b offsets. */ for (i = 0; i <= 100; i++) { double L_low = 0; double a_low = 0; double b_low = 0; double L_high = 100; double a_high = 0; double b_high = 0; /* Search for greyscale L just below i. Don't assume sorted by * L*. */ for (j = 0; j < mask->ysize; j++) { double L = mask->coeff[j * 3]; double a = mask->coeff[j * 3 + 1]; double b = mask->coeff[j * 3 + 2]; if (L < i && L > L_low) { L_low = L; a_low = a; b_low = b; } } /* Search for greyscale L just above i. */ for (j = mask->ysize - 1; j >= 0; j--) { double L = mask->coeff[j * 3]; double a = mask->coeff[j * 3 + 1]; double b = mask->coeff[j * 3 + 2]; if (L >= i && L < L_high) { L_high = L; a_high = a; b_high = b; } } /* Interpolate. */ parm->a_offset[i] = a_low + (a_high - a_low) * ((i - L_low) / (L_high - L_low)); parm->b_offset[i] = b_low + (b_high - b_low) * ((i - L_low) / (L_high - L_low)); } return 0; } static void morph_buffer(float *in, float *out, int width, Params *parm) { int x; for (x = 0; x < width; x++) { double L = in[0]; double a = in[1]; double b = in[2]; L = IM_CLIP(0, L, 100); a -= parm->a_offset[(int) L]; b -= parm->b_offset[(int) L]; L = (L + parm->L_offset) * parm->L_scale; L = IM_CLIP(0, L, 100); a *= parm->a_scale; b *= parm->b_scale; out[0] = L; out[1] = a; out[2] = b; in += 3; out += 3; } } /** * im_lab_morph: * @in: input image * @out: output image * @mask: cast correction table * @L_offset: L adjustment * @L_scale: L adjustment * @a_scale: a scale * @b_scale: b scale * * Morph an image in CIELAB colour space. Useful for certain types of gamut * mapping, or correction of greyscales on some printers. * * We perform three adjustments: * * * * * cast * * Pass in @mask containing CIELAB readings for a neutral greyscale. For * example: * * * * * 3 * 4 * * * 14.23 * 4.8 * -3.95 * * * 18.74 * 2.76 * -2.62 * * * 23.46 * 1.4 * -1.95 * * * 27.53 * 1.76 * -2.01 * * * * * Interpolation from this makes cast corrector. The top and tail are * interpolated towards [0, 0, 0] and [100, 0, 0], intermediate values are * interpolated along straight lines fitted between the specified points. * Rows may be in any order (ie. they need not be sorted on L*). * * Each pixel is displaced in a/b by the amount specified for that L in the * table. * * * * * L* * * Pass in scale and offset for L. L' = (L + offset) * scale. * * * * * saturation * * scale a and b by these amounts, eg. 1.5 increases saturation. * * * * * Find the top two by generating and printing a greyscale. Find the bottom * by printing a Macbeth and looking at a/b spread * * Returns: 0 on success, -1 on error. */ int im_lab_morph(IMAGE *in, IMAGE *out, DOUBLEMASK *mask, double L_offset, double L_scale, double a_scale, double b_scale) { Params *parm; /* Recurse for coded images. */ if (in->Coding == IM_CODING_LABQ) { IMAGE *t[2]; if (im_open_local_array(out, t, 2, "im_lab_morph", "p") || im_LabQ2Lab(in, t[0]) || im_lab_morph(t[0], t[1], mask, L_offset, L_scale, a_scale, b_scale) || im_Lab2LabQ(t[1], out)) return -1; return 0; } if (!(parm = IM_NEW(out, Params)) || morph_init(parm, in, out, L_scale, L_offset, mask, a_scale, b_scale)) return -1; return im__colour_unary("im_lab_morph", in, out, IM_TYPE_LAB, (im_wrapone_fn) morph_buffer, parm, NULL); } libvips-8.15.1/libvips/deprecated/im_line.c000066400000000000000000000066421454007373500206260ustar00rootroot00000000000000/* @#) line drawer. adapted to draw for graphics system * @(#) Modified to be compatible with the vasari library * @(#) In order to use this function, the input file should have been set by * @(#) im_mmapinrw() * * Copyright: N. Dessipris * Written: 02/01/1990 * Modified : * 22/7/93 JC * - im_incheck() added * - externs removed * 16/8/94 JC * - im_incheck() changed to im_makerw() * 5/12/06 * - im_invalidate() after paint */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include int im_line(IMAGE *image, int x1, int y1, int x2, int y2, int pelval) { double x, y, dx, dy, m; long offset; double signx, signy; if (im_rwcheck(image)) return -1; /* check coordinates */ if ((x1 > image->Xsize) || (x1 < 0) || (y1 > image->Ysize) || (y1 < 0) || (x2 > image->Xsize) || (x2 < 0) || (y2 > image->Ysize) || (y2 < 0)) { im_error("im_line", "%s", _("invalid line cooordinates")); return -1; } if ((pelval > 255) || (pelval < 0)) { im_error("im_line", "%s", _("line intensity between 0 and 255")); return -1; } if (image->Bands != 1) { im_error("im_line", "%s", _("image should have one band only")); return -1; } dx = (double) (x2 - x1); dy = (double) (y2 - y1); if (dx < 0.0) signx = -1.0; else signx = 1.0; if (dy < 0.0) signy = -1.0; else signy = 1.0; if (dx == 0.0) { x = x1; y = y1; while (y != y2) { offset = (int) (x + .5) + ((int) (y + .5)) * image->Xsize; *(image->data + offset) = (PEL) pelval; y += signy; } /* Draw point (x2, y2) */ offset = x2 + y2 * image->Xsize; *(image->data + offset) = (PEL) pelval; return 0; } if (dy == 0.0) { y = y1; x = x1; while (x != x2) { offset = (int) (x + .5) + ((int) (y + .5)) * image->Xsize; *(image->data + offset) = (PEL) pelval; x += signx; } /* Draw point (x2, y2) */ offset = x2 + y2 * image->Xsize; *(image->data + offset) = (PEL) pelval; return 0; } if (fabs(dy) < fabs(dx)) { m = fabs(dy / dx) * signy; y = y1; x = x1; while (x != x2) { offset = (int) (x + .5) + ((int) (y + .5)) * image->Xsize; *(image->data + offset) = (PEL) pelval; x += signx; y += m; } } else { m = fabs(dx / dy) * signx; x = x1; y = y1; while (y != y2) { offset = (int) (x + .5) + ((int) (y + .5)) * image->Xsize; *(image->data + offset) = (PEL) pelval; x += m; y += signy; } } /* Draw point (x2, y2) */ offset = x2 + y2 * image->Xsize; *(image->data + offset) = (PEL) pelval; im_invalidate(image); return 0; } libvips-8.15.1/libvips/deprecated/im_linreg.c000066400000000000000000000241771454007373500211620ustar00rootroot00000000000000/* im_linreg.c * * Copyright: 2006, The Nottingham Trent University * * Author: Tom Vajzovic * * Written on: 2006-12-26 * * 12/5/09 * - make x_anal() static, fix some signed/unsigned warnings * 3/9/09 * - gtkdoc comment */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include #include #include typedef struct { unsigned int n; double *xs; double *difs; double mean; double nsig2; double err_term; } x_set; #define LINREG_SEQ(TYPE) \ typedef struct { \ REGION **regs; \ TYPE **ptrs; \ size_t *skips; \ } linreg_seq_##TYPE LINREG_SEQ(gint8); LINREG_SEQ(guint8); LINREG_SEQ(gint16); LINREG_SEQ(guint16); LINREG_SEQ(gint32); LINREG_SEQ(guint32); LINREG_SEQ(float); LINREG_SEQ(double); static x_set *x_anal(IMAGE *im, double *xs, unsigned int n); #define LINREG_START_DECL(TYPE) static void *linreg_start_##TYPE(IMAGE *, void *, void *); #define LINREG_GEN_DECL(TYPE) static int linreg_gen_##TYPE(REGION *, void *, void *, void *); #define LINREG_STOP_DECL(TYPE) static int linreg_stop_##TYPE(void *, void *, void *); #define INCR_ALL_DECL(TYPE) static void incr_all_##TYPE(TYPE **ptrs, unsigned int n) #define SKIP_ALL_DECL(TYPE) static void skip_all_##TYPE(TYPE **ptrs, size_t *skips, unsigned int n) LINREG_START_DECL(gint8); LINREG_START_DECL(guint8); LINREG_START_DECL(gint16); LINREG_START_DECL(guint16); LINREG_START_DECL(gint32); LINREG_START_DECL(guint32); LINREG_START_DECL(float); LINREG_START_DECL(double); LINREG_GEN_DECL(gint8); LINREG_GEN_DECL(guint8); LINREG_GEN_DECL(gint16); LINREG_GEN_DECL(guint16); LINREG_GEN_DECL(gint32); LINREG_GEN_DECL(guint32); LINREG_GEN_DECL(float); LINREG_GEN_DECL(double); LINREG_STOP_DECL(gint8); LINREG_STOP_DECL(guint8); LINREG_STOP_DECL(gint16); LINREG_STOP_DECL(guint16); LINREG_STOP_DECL(gint32); LINREG_STOP_DECL(guint32); LINREG_STOP_DECL(float); LINREG_STOP_DECL(double); INCR_ALL_DECL(gint8); INCR_ALL_DECL(guint8); INCR_ALL_DECL(gint16); INCR_ALL_DECL(guint16); INCR_ALL_DECL(gint32); INCR_ALL_DECL(guint32); INCR_ALL_DECL(float); INCR_ALL_DECL(double); SKIP_ALL_DECL(gint8); SKIP_ALL_DECL(guint8); SKIP_ALL_DECL(gint16); SKIP_ALL_DECL(guint16); SKIP_ALL_DECL(gint32); SKIP_ALL_DECL(guint32); SKIP_ALL_DECL(float); SKIP_ALL_DECL(double); /** * im_linreg: * @ins: NULL-terminated array of input images * @out: results of analysis * @xs: X position of each image (pixel value is Y) * * Function to find perform pixelwise linear regression on an array of * single band images. The output is a seven-band douuble image * * TODO: figure out how this works and fix up these docs! */ int im_linreg(IMAGE **ins, IMAGE *out, double *xs) { #define FUNCTION_NAME "im_linreg" int n; x_set *x_vals; if (im_poutcheck(out)) return -1; for (n = 0; ins[n]; ++n) { /* if (!isfinite(xs[n])) { im_error(FUNCTION_NAME, "invalid argument"); return -1; } */ if (im_pincheck(ins[n])) return -1; if (1 != ins[n]->Bands) { im_error(FUNCTION_NAME, "image is not single band"); return -1; } if (ins[n]->Coding) { im_error(FUNCTION_NAME, "image is not uncoded"); return -1; } if (n) { if (ins[n]->BandFmt != ins[0]->BandFmt) { im_error(FUNCTION_NAME, "image band formats differ"); return -1; } } else { if (vips_band_format_iscomplex(ins[0]->BandFmt)) { im_error(FUNCTION_NAME, "image has non-scalar band format"); return -1; } } if (n && (ins[n]->Xsize != ins[0]->Xsize || ins[n]->Ysize != ins[0]->Ysize)) { im_error(FUNCTION_NAME, "image sizes differ"); return -1; } } if (n < 3) { im_error(FUNCTION_NAME, "not enough input images"); return -1; } if (im_cp_desc_array(out, ins)) return -1; out->Bands = 7; out->BandFmt = IM_BANDFMT_DOUBLE; out->Type = 0; if (im_demand_hint_array(out, IM_THINSTRIP, ins)) return -1; x_vals = x_anal(out, xs, n); if (!x_vals) return -1; switch (ins[0]->BandFmt) { #define LINREG_RET(TYPE) return im_generate(out, linreg_start_##TYPE, linreg_gen_##TYPE, linreg_stop_##TYPE, ins, x_vals) case IM_BANDFMT_CHAR: LINREG_RET(gint8); case IM_BANDFMT_UCHAR: LINREG_RET(guint8); case IM_BANDFMT_SHORT: LINREG_RET(gint16); case IM_BANDFMT_USHORT: LINREG_RET(guint16); case IM_BANDFMT_INT: LINREG_RET(gint32); case IM_BANDFMT_UINT: LINREG_RET(guint32); case IM_BANDFMT_FLOAT: LINREG_RET(float); case IM_BANDFMT_DOUBLE: LINREG_RET(double); default: /* keep -Wall happy */ return -1; } #undef FUNCTION_NAME } static x_set * x_anal(IMAGE *im, double *xs, unsigned int n) { unsigned int i; x_set *x_vals = IM_NEW(im, x_set); if (!x_vals) return NULL; x_vals->xs = IM_ARRAY(im, 2 * n, double); if (!x_vals->xs) return NULL; x_vals->difs = x_vals->xs + n; x_vals->n = n; x_vals->mean = 0.0; for (i = 0; i < n; ++i) { x_vals->xs[i] = xs[i]; x_vals->mean += xs[i]; } x_vals->mean /= n; x_vals->nsig2 = 0.0; for (i = 0; i < n; ++i) { x_vals->difs[i] = xs[i] - x_vals->mean; x_vals->nsig2 += x_vals->difs[i] * x_vals->difs[i]; } x_vals->err_term = (1.0 / (double) n) + ((x_vals->mean * x_vals->mean) / x_vals->nsig2); return x_vals; } #define LINREG_START_DEFN(TYPE) \ static void *linreg_start_##TYPE(IMAGE *out, void *a, void *b) \ { \ IMAGE **ins = (IMAGE **) a; \ x_set *x_vals = (x_set *) b; \ linreg_seq_##TYPE *seq = IM_NEW(out, linreg_seq_##TYPE); \ \ if (!seq) \ return NULL; \ \ seq->regs = im_start_many(NULL, ins, NULL); \ seq->ptrs = IM_ARRAY(out, x_vals->n, TYPE *); \ seq->skips = IM_ARRAY(out, x_vals->n, size_t); \ \ if (!seq->ptrs || !seq->regs || !seq->skips) { \ linreg_stop_##TYPE(seq, NULL, NULL); \ return NULL; \ } \ return (void *) seq; \ } #define N ((double) n) #define y(a) ((double) (*seq->ptrs[(a)])) #define x(a) ((double) (x_vals->xs[(a)])) #define xd(a) ((double) (x_vals->difs[(a)])) #define Sxd2 (x_vals->nsig2) #define mean_x (x_vals->mean) #define mean_y (out[0]) #define dev_y (out[1]) #define y_x0 (out[2]) #define d_y_x0 (out[3]) #define dy_dx (out[4]) #define d_dy_dx (out[5]) #define R (out[6]) #define LINREG_GEN_DEFN(TYPE) \ static int linreg_gen_##TYPE(REGION *to_make, void *vseq, void *unrequired, void *b) \ { \ linreg_seq_##TYPE *seq = (linreg_seq_##TYPE *) vseq; \ x_set *x_vals = (x_set *) b; \ unsigned int n = x_vals->n; \ double *out = (double *) IM_REGION_ADDR_TOPLEFT(to_make); \ size_t out_skip = IM_REGION_LSKIP(to_make) / sizeof(double); \ double *out_end = out + out_skip * to_make->valid.height; \ double *out_stop; \ size_t out_n = IM_REGION_N_ELEMENTS(to_make); \ unsigned int i; \ \ out_skip -= out_n; \ \ if (im_prepare_many(seq->regs, &to_make->valid)) \ return -1; \ \ for (i = 0; i < n; ++i) { \ seq->ptrs[i] = (TYPE *) IM_REGION_ADDR(seq->regs[i], to_make->valid.left, to_make->valid.top); \ seq->skips[i] = (IM_REGION_LSKIP(seq->regs[i]) / sizeof(TYPE)) - IM_REGION_N_ELEMENTS(seq->regs[i]); \ } \ \ for (; out < out_end; out += out_skip, skip_all_##TYPE(seq->ptrs, seq->skips, n)) \ for (out_stop = out + out_n; out < out_stop; out += 7, incr_all_##TYPE(seq->ptrs, n)) { \ double Sy = 0.0; \ double Sxd_y = 0.0; \ double Syd2 = 0.0; \ double Sxd_yd = 0.0; \ double Se2 = 0.0; \ \ for (i = 0; i < n; ++i) { \ Sy += y(i); \ Sxd_y += xd(i) * y(i); \ } \ mean_y = Sy / N; \ dy_dx = Sxd_y / Sxd2; \ y_x0 = mean_y - dy_dx * mean_x; \ \ for (i = 0; i < n; ++i) { \ double yd = y(i) - mean_y; \ double e = y(i) - dy_dx * x(i) - y_x0; \ Syd2 += yd * yd; \ Sxd_yd += xd(i) * yd; \ Se2 += e * e; \ } \ dev_y = sqrt(Syd2 / N); \ Se2 /= (N - 2.0); \ d_dy_dx = sqrt(Se2 / Sxd2); \ d_y_x0 = sqrt(Se2 * x_vals->err_term); \ R = Sxd_yd / sqrt(Sxd2 * Syd2); \ } \ return 0; \ } #define LINREG_STOP_DEFN(TYPE) \ static int linreg_stop_##TYPE(void *vseq, void *a, void *b) \ { \ linreg_seq_##TYPE *seq = (linreg_seq_##TYPE *) vseq; \ if (seq->regs) \ im_stop_many(seq->regs, NULL, NULL); \ return 0; \ } #define INCR_ALL_DEFN(TYPE) \ static void incr_all_##TYPE(TYPE **ptrs, unsigned int n) \ { \ TYPE **stop = ptrs + n; \ for (; ptrs < stop; ++ptrs) \ ++*ptrs; \ } #define SKIP_ALL_DEFN(TYPE) \ static void skip_all_##TYPE(TYPE **ptrs, size_t *skips, unsigned int n) \ { \ TYPE **stop = ptrs + n; \ for (; ptrs < stop; ++ptrs, ++skips) \ *ptrs += *skips; \ } LINREG_START_DEFN(gint8); LINREG_START_DEFN(guint8); LINREG_START_DEFN(gint16); LINREG_START_DEFN(guint16); LINREG_START_DEFN(gint32); LINREG_START_DEFN(guint32); LINREG_START_DEFN(float); LINREG_START_DEFN(double); LINREG_GEN_DEFN(gint8); LINREG_GEN_DEFN(guint8); LINREG_GEN_DEFN(gint16); LINREG_GEN_DEFN(guint16); LINREG_GEN_DEFN(gint32); LINREG_GEN_DEFN(guint32); LINREG_GEN_DEFN(float); LINREG_GEN_DEFN(double); LINREG_STOP_DEFN(gint8); LINREG_STOP_DEFN(guint8); LINREG_STOP_DEFN(gint16); LINREG_STOP_DEFN(guint16); LINREG_STOP_DEFN(gint32); LINREG_STOP_DEFN(guint32); LINREG_STOP_DEFN(float); LINREG_STOP_DEFN(double); INCR_ALL_DEFN(gint8); INCR_ALL_DEFN(guint8); INCR_ALL_DEFN(gint16); INCR_ALL_DEFN(guint16); INCR_ALL_DEFN(gint32); INCR_ALL_DEFN(guint32); INCR_ALL_DEFN(float); INCR_ALL_DEFN(double); SKIP_ALL_DEFN(gint8); SKIP_ALL_DEFN(guint8); SKIP_ALL_DEFN(gint16); SKIP_ALL_DEFN(guint16); SKIP_ALL_DEFN(gint32); SKIP_ALL_DEFN(guint32); SKIP_ALL_DEFN(float); SKIP_ALL_DEFN(double); libvips-8.15.1/libvips/deprecated/im_litecor.c000066400000000000000000000160271454007373500213360ustar00rootroot00000000000000/* @(#) Function to perform lighting correction. * @(#) One band IM_BANDFMT_UCHAR images only. Always writes UCHAR. * @(#) * @(#) Function im_litecor() assumes that imin * @(#) is either memory mapped or in a buffer. * @(#) * @(#) int im_litecor(in, w, out, clip, factor) * @(#) IMAGE *in, *w, *out; * @(#) int clip; * @(#) double factor; * @(#) * @(#) clip==1 * @(#) - Compute max(white)*factor*(image/white), Clip to 255. * @(#) clip==0 * @(#) - Compute factor for you. * @(#) * @(#) * @(#) * @(#) * @(#) Returns 0 on success and -1 on error * * Copyright: 1990, J. Cupitt, 1991 N. Dessipris * * Author: J. Cupitt, N. Dessipris * Written on: 02/08/1990 * Modified on : 6/11/1991, by ND to produce a UCHAR output * 1/4/93 J.Cupitt * - bugs if white is smaller than image fixed * - im_warning() now called * - clip==0 case not tested or changed! do not use! */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include /* If maximum output is > 255 scale output between minout and maxout, * by normalising maxout to 255. * If maximum output is < 255 do the light correction without scaling */ static int im_litecor0(IMAGE *in, IMAGE *white, IMAGE *out) { PEL *p, *w; PEL *q, *bu; int c; int x, y; float xrat = (float) in->Xsize / white->Xsize; float yrat = (float) in->Ysize / white->Ysize; int xstep = (int) xrat; int ystep = (int) yrat; double max; int wtmp, maxw, maxout, temp; /* Check white is some simple multiple of image. */ if (xrat < 1.0 || xrat != xstep || yrat < 1.0 || yrat != ystep) { im_error("im_litecor", "white not simple scale of image"); return -1; } /* Find the maximum of the white. */ if (im_max(white, &max)) return -1; maxw = (int) max; /* Set up the output header. */ if (im_cp_desc(out, in)) return -1; if (im_setupout(out)) return -1; /* Make buffer for outputting to. */ if (!(bu = (PEL *) im_malloc(out, out->Xsize))) return -1; /* Find largest value we might generate if factor == 1.0 */ maxout = -1; p = (PEL *) in->data; for (y = 0; y < in->Ysize; y++) { /* Point w to the start of the line in the white * corresponding to the line we are about to correct. c counts * up to xstep; each time it wraps, we should move w on one. */ w = (PEL *) (white->data + white->Xsize * (int) (y / ystep)); c = 0; /* Scan along line. */ for (x = 0; x < out->Xsize; x++) { wtmp = (int) *w; temp = (maxw * (int) *p++ + (wtmp >> 1)) / wtmp; if (temp > maxout) maxout = temp; /* Move white pointer on if necessary. */ c++; if (c == xstep) { w++; c = 0; } } } /* Do exactly the same as above by scaling the result with respect to * maxout */ p = (PEL *) in->data; if (maxout <= 255) /* no need for rescaling output */ { for (y = 0; y < in->Ysize; y++) { q = bu; w = (PEL *) (white->data + white->Xsize * (int) (y / ystep)); c = 0; /* Scan along line. */ for (x = 0; x < in->Xsize; x++) { wtmp = (int) *w; *q++ = (PEL) ((maxw * (int) *p++ + (wtmp >> 1)) / wtmp); /* Move white pointer on if necessary. */ c++; if (c == xstep) { w++; c = 0; } } if (im_writeline(y, out, bu)) { im_error("im_litecor", "im_writeline failed"); return -1; } } } else /* rescale output wrt maxout */ { for (y = 0; y < in->Ysize; y++) { q = bu; w = (PEL *) (white->data + white->Xsize * (int) (y / ystep)); c = 0; /* Scan along line. */ for (x = 0; x < in->Xsize; x++) { wtmp = maxout * ((int) *w); *q++ = (PEL) ((maxw * (int) *p++ * 255 + (wtmp >> 1)) / wtmp); /* Move white pointer on if necessary. */ c++; if (c == xstep) { w++; c = 0; } } if (im_writeline(y, out, bu)) { im_error("im_litecor", "im_writeline failed"); return -1; } } } return 0; } /* Clip all corrected values above 255, if any. */ static int im_litecor1(IMAGE *in, IMAGE *white, IMAGE *out, double factor) { PEL *p, *w; PEL *q, *bu; int c; int x, y; float xrat = (float) in->Xsize / white->Xsize; float yrat = (float) in->Ysize / white->Ysize; int xstep = (int) xrat; int ystep = (int) yrat; double max; double maxw, temp; int nclipped = 0; /* Check white is some simple multiple of image. */ if (xrat < 1.0 || xrat != xstep || yrat < 1.0 || yrat != ystep) { im_error("im_litecor", "white not simple scale of image"); return -1; } /* Find the maximum of the white. */ if (im_max(white, &max)) return -1; maxw = max; /* Set up the output header. */ if (im_cp_desc(out, in)) return -1; if (im_setupout(out)) return -1; /* Make buffer we write to. */ if (!(bu = (PEL *) im_malloc(out, out->Xsize))) return -1; /* Loop through sorting max output */ p = (PEL *) in->data; for (y = 0; y < in->Ysize; y++) { q = bu; w = (PEL *) (white->data + white->Xsize * (int) (y / ystep)); c = 0; for (x = 0; x < out->Xsize; x++) { temp = ((factor * maxw * (int) *p++) / ((int) *w)) + 0.5; if (temp > 255.0) { temp = 255; nclipped++; } *q++ = temp; /* Move white pointer on if necessary. */ c++; if (c == xstep) { w++; c = 0; } } if (im_writeline(y, out, bu)) return -1; } if (nclipped) im_warn("im_litecor", "%d pels over 255 clipped", nclipped); return 0; } /* Lighting correction. One band uchar images only. * Assumes the white is some simple multiple of the image in size; ie. the * white has been taken with some smaller or equal set of resolution * parameters. */ int im_litecor(IMAGE *in, IMAGE *white, IMAGE *out, int clip, double factor) { /* Check our args. */ if (im_iocheck(in, out)) return -1; if (in->Bands != 1 || in->Coding != IM_CODING_NONE || in->BandFmt != IM_BANDFMT_UCHAR) { im_error("im_litecor", "bad input format"); return -1; } if (white->Bands != 1 || white->Coding != IM_CODING_NONE || white->BandFmt != IM_BANDFMT_UCHAR) { im_error("im_litecor", "bad white format"); return -1; } switch (clip) { case 1: return im_litecor1(in, white, out, factor); case 0: return im_litecor0(in, white, out); default: im_error("im_litecor", "unknown flag %d", clip); return -1; } } libvips-8.15.1/libvips/deprecated/im_magick2vips.c000066400000000000000000000052601454007373500221110ustar00rootroot00000000000000/* Read a file using libMagick * * 17/12/11 * - just a stub */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Turn on debugging output. #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include "../foreign/pforeign.h" int im_magick2vips(const char *filename, IMAGE *out) { #ifdef HAVE_MAGICK /* Old behaviour was always to read all frames. */ return vips__magick_read(filename, out, NULL, 0, -1); #else vips_error("im_magick2vips", "%s", _("no libMagick support in your libvips")); return -1; #endif /*HAVE_MAGICK*/ } static int ismagick(const char *filename) { return vips_foreign_is_a("magickload", filename); } static const char *magick_suffs[] = { NULL }; /* magick format adds no new members. */ typedef VipsFormat VipsFormatMagick; typedef VipsFormatClass VipsFormatMagickClass; static void vips_format_magick_class_init(VipsFormatMagickClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsFormatClass *format_class = (VipsFormatClass *) class; object_class->nickname = "magick"; object_class->description = _("libMagick-supported"); format_class->is_a = ismagick; format_class->load = im_magick2vips; format_class->suffs = magick_suffs; /* This can be very slow :-( Use our own jpeg/tiff/png etc. loaders in * preference if we can. */ format_class->priority = -1000; } static void vips_format_magick_init(VipsFormatMagick *object) { } G_DEFINE_TYPE(VipsFormatMagick, vips_format_magick, VIPS_TYPE_FORMAT); int im_bufmagick2vips(void *buf, size_t len, IMAGE *out, gboolean header_only) { VipsImage *t; /* header_only is automatic ... this call will only decompress on * pixel access. */ if (vips_magickload_buffer(buf, len, &t, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } libvips-8.15.1/libvips/deprecated/im_mask2vips.c000066400000000000000000000045201454007373500216070ustar00rootroot00000000000000/* im_mask2vips * * Author: J.Cupitt * Written on: 6/6/94 * Modified on: * 7/10/94 JC * - new IM_ARRAY() * 1/2/10 * - gtkdoc */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include /** * im_mask2vips: * @in: input mask * @out: output image * * Write a one-band, %IM_BANDFMT_DOUBLE image to @out based on mask @in. * * See also: im_vips2mask(). * * Returns: 0 on success, -1 on error */ int im_mask2vips(DOUBLEMASK *in, IMAGE *out) { int x, y; double *buf, *p, *q; /* Check the mask. */ if (!in || !in->coeff) { im_error("im_mask2vips", "%s", _("bad input mask")); return -1; } /* Make the output image. */ im_initdesc(out, in->xsize, in->ysize, 1, IM_BBITS_DOUBLE, IM_BANDFMT_DOUBLE, IM_CODING_NONE, IM_TYPE_B_W, 1.0, 1.0, 0, 0); if (im_setupout(out)) return -1; /* Make an output buffer. */ if (!(buf = IM_ARRAY(out, in->xsize, double))) return -1; /* Write! */ for (p = in->coeff, y = 0; y < out->Ysize; y++) { q = buf; for (x = 0; x < out->Xsize; x++) *q++ = *p++; if (im_writeline(y, out, (void *) buf)) return -1; } vips_image_set_double(out, "scale", in->scale); vips_image_set_double(out, "offset", in->offset); return 0; } int im_imask2vips(INTMASK *in, IMAGE *out) { DOUBLEMASK *d; int result; if (!(d = im_imask2dmask(in, in->filename))) return -1; result = im_mask2vips(d, out); im_free_dmask(d); return result; } libvips-8.15.1/libvips/deprecated/im_matcat.c000066400000000000000000000042301454007373500211370ustar00rootroot00000000000000/* matrix catenate * * 1994, K. Martinez * * 22/10/10 * - gtk-doc */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include /** * im_matcat: * @top: input matrix * @bottom: input matrix * @filename: filename for output * * Matrix catenations. Returns a new matrix which is the two source matrices * joined together top-bottom. They must be the same width. * * See also: im_mattrn(), im_matmul(), im_matinv(). * * Returns: the joined mask on success, or NULL on error. */ DOUBLEMASK * im_matcat(DOUBLEMASK *top, DOUBLEMASK *bottom, const char *filename) { int newxsize, newysize; DOUBLEMASK *mat; double *out; /* matrices must be same width */ if (top->xsize != bottom->xsize) { im_error("im_matcat", "%s", _("matrices must be same width")); return NULL; } newxsize = top->xsize; newysize = top->ysize + bottom->ysize; /* Allocate output matrix. */ if (!(mat = im_create_dmask(filename, newxsize, newysize))) return NULL; /* copy first matrix then add second on the end */ memcpy(mat->coeff, top->coeff, top->xsize * top->ysize * sizeof(double)); out = mat->coeff + top->xsize * top->ysize; memcpy(out, bottom->coeff, bottom->xsize * bottom->ysize * sizeof(double)); return mat; } libvips-8.15.1/libvips/deprecated/im_matinv.c000066400000000000000000000257131454007373500211750ustar00rootroot00000000000000/* solve and invert matrices * * Author: Tom Vajzovic * Copyright: 2006, Tom Vajzovic * Written on: 2006-09-08 * * undated: * - page 43-45 of numerical recipes in C 1998 * * 2006-09-08 tcv: * - complete rewrite; algorithm unchanged * * 22/10/10 * - gtkdoc */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #define TOO_SMALL (2.0 * DBL_MIN) /* DBL_MIN is smallest *normalized* double precision float */ #define MATRIX(mask, i, j) ((mask)->coeff[(j) + (i) * (mask)->xsize]) /* use DOUBLEMASK or INTMASK as matrix type */ static int mat_inv_lu( DOUBLEMASK *inv, const DOUBLEMASK *lu); static int mat_inv_direct( DOUBLEMASK *inv, const DOUBLEMASK *mat, const char *function_name); /** * im_lu_decomp: * @mat: matrix to decompose * @filename: name for output matrix * * This function takes any square NxN #DOUBLEMASK. * It returns a #DOUBLEMASK which is (N+1)xN. * * It calculates the PLU decomposition, storing the upper and diagonal parts * of U, together with the lower parts of L, as an NxN matrix in the first * N rows of the new matrix. The diagonal parts of L are all set to unity * and are not stored. * * The final row of the new #DOUBLEMASK has only integer entries, which * represent the row-wise permutations made by the permuatation matrix P. * * The scale and offset members of the input #DOUBLEMASK are ignored. * * See: * * PRESS, W. et al, 1992. Numerical Recipies in C; The Art of Scientific * Computing, 2nd ed. Cambridge: Cambridge University Press, pp. 43-50. * * See also: im_mattrn(), im_matinv(). * * Returns: the decomposed matrix on success, or NULL on error. */ DOUBLEMASK * im_lu_decomp( const DOUBLEMASK *mat, const char *name) { #define FUNCTION_NAME "im_lu_decomp" int i, j, k; double *row_scale; DOUBLEMASK *lu; if (mat->xsize != mat->ysize) { im_error(FUNCTION_NAME, "non-square matrix"); return NULL; } #define N (mat->xsize) lu = im_create_dmask(name, N, N + 1); row_scale = IM_ARRAY(NULL, N, double); if (!row_scale || !lu) { im_free_dmask(lu); im_free(row_scale); return NULL; } /* copy all coefficients and then perform decomposition in-place */ memcpy(lu->coeff, mat->coeff, N * N * sizeof(double)); #define LU(i, j) MATRIX(lu, (i), (j)) #define perm (lu->coeff + N * N) for (i = 0; i < N; ++i) { row_scale[i] = 0.0; for (j = 0; j < N; ++j) { double abs_val = fabs(LU(i, j)); /* find largest in each ROW */ if (abs_val > row_scale[i]) row_scale[i] = abs_val; } if (!row_scale[i]) { im_error(FUNCTION_NAME, "singular matrix"); im_free_dmask(lu); im_free(row_scale); return NULL; } /* fill array with scaling factors for each ROW */ row_scale[i] = 1.0 / row_scale[i]; } for (j = 0; j < N; ++j) { /* loop over COLs */ double max = -1.0; int i_of_max; /* not needed, but stops a compiler warning */ i_of_max = 0; /* loop over ROWS in upper-half, except diagonal */ for (i = 0; i < j; ++i) for (k = 0; k < i; ++k) LU(i, j) -= LU(i, k) * LU(k, j); /* loop over ROWS in diagonal and lower-half */ for (i = j; i < N; ++i) { double abs_val; for (k = 0; k < j; ++k) LU(i, j) -= LU(i, k) * LU(k, j); /* find largest element in each COLUMN scaled so that */ /* largest in each ROW is 1.0 */ abs_val = row_scale[i] * fabs(LU(i, j)); if (abs_val > max) { max = abs_val; i_of_max = i; } } if (fabs(LU(i_of_max, j)) < TOO_SMALL) { /* divisor is near zero */ im_error(FUNCTION_NAME, "singular or near-singular matrix"); im_free_dmask(lu); im_free(row_scale); return NULL; } if (i_of_max != j) { /* swap ROWS */ for (k = 0; k < N; ++k) { double temp = LU(j, k); LU(j, k) = LU(i_of_max, k); LU(i_of_max, k) = temp; } row_scale[i_of_max] = row_scale[j]; /* no need to copy this scale back up - we won't use it */ } /* record permutation */ perm[j] = i_of_max; /* divide by best (largest scaled) pivot found */ for (i = j + 1; i < N; ++i) LU(i, j) /= LU(j, j); } im_free(row_scale); return lu; #undef N #undef LU #undef perm #undef FUNCTION_NAME } /** * im_lu_solve: * @lu: matrix to solve * @vec: name for output matrix * * Solve the system of linear equations Ax=b, where matrix A has already * been decomposed into LU form in DOUBLEMASK *lu. Input vector b is in * vec and is overwritten with vector x. * * See: * * PRESS, W. et al, 1992. Numerical Recipies in C; The Art of Scientific * Computing, 2nd ed. Cambridge: Cambridge University Press, pp. 43-50. * * See also: im_mattrn(), im_matinv(). * * Returns: the decomposed matrix on success, or NULL on error. */ int im_lu_solve( const DOUBLEMASK *lu, double *vec) { #define FUNCTION_NAME "im_lu_solve" int i, j; if (lu->xsize + 1 != lu->ysize) { im_error(FUNCTION_NAME, "not an LU decomposed matrix"); return -1; } #define N (lu->xsize) #define LU(i, j) MATRIX(lu, (i), (j)) #define perm (lu->coeff + N * N) for (i = 0; i < N; ++i) { int i_perm = perm[i]; if (i_perm != i) { double temp = vec[i]; vec[i] = vec[i_perm]; vec[i_perm] = temp; } for (j = 0; j < i; ++j) vec[i] -= LU(i, j) * vec[j]; } for (i = N - 1; i >= 0; --i) { for (j = i + 1; j < N; ++j) vec[i] -= LU(i, j) * vec[j]; vec[i] /= LU(i, i); } return 0; #undef LU #undef perm #undef N #undef FUNCTION_NAME } /** * im_matinv: * @mat: matrix to invert * @filename: name for output matrix * * Allocate, and return a pointer to, a DOUBLEMASK representing the * inverse of the matrix represented in @mat. Give it the filename * member @filename. Returns NULL on error. Scale and offset are ignored. * * See also: im_mattrn(). * * Returns: the inverted matrix on success, or %NULL on error. */ DOUBLEMASK * im_matinv( const DOUBLEMASK *mat, const char *filename) { #define FUNCTION_NAME "im_matinv" DOUBLEMASK *inv; if (mat->xsize != mat->ysize) { im_error(FUNCTION_NAME, "non-square matrix"); return NULL; } #define N (mat->xsize) inv = im_create_dmask(filename, N, N); if (!inv) return NULL; if (N < 4) { if (mat_inv_direct(inv, (const DOUBLEMASK *) mat, FUNCTION_NAME)) { im_free_dmask(inv); return NULL; } return inv; } else { DOUBLEMASK *lu = im_lu_decomp(mat, "temp"); if (!lu || mat_inv_lu(inv, (const DOUBLEMASK *) lu)) { im_free_dmask(lu); im_free_dmask(inv); return NULL; } im_free_dmask(lu); return inv; } #undef N #undef FUNCTION_NAME } /** * im_matinv_inplace: * @mat: matrix to invert * * Invert the matrix represented by the DOUBLEMASK @mat, and store * it in the place of @mat. Scale and offset * are ignored. * * See also: im_mattrn(). * * Returns: 0 on success, or -1 on error. */ int im_matinv_inplace( DOUBLEMASK *mat) { #define FUNCTION_NAME "im_matinv_inplace" int to_return = 0; if (mat->xsize != mat->ysize) { im_error(FUNCTION_NAME, "non-square matrix"); return -1; } #define N (mat->xsize) if (N < 4) { DOUBLEMASK *dup = im_dup_dmask(mat, "temp"); if (!dup) return -1; to_return = mat_inv_direct(mat, (const DOUBLEMASK *) dup, FUNCTION_NAME); im_free_dmask(dup); return to_return; } { DOUBLEMASK *lu; lu = im_lu_decomp(mat, "temp"); if (!lu || mat_inv_lu(mat, (const DOUBLEMASK *) lu)) to_return = -1; im_free_dmask(lu); return to_return; } #undef N #undef FUNCTION_NAME } /* Invert a square size x size matrix stored in matrix[][] * result is returned in the same matrix */ int im_invmat( double **matrix, int size) { DOUBLEMASK *mat = im_create_dmask("temp", size, size); int i; int to_return = 0; for (i = 0; i < size; ++i) memcpy(mat->coeff + i * size, matrix[i], size * sizeof(double)); to_return = im_matinv_inplace(mat); if (!to_return) for (i = 0; i < size; ++i) memcpy(matrix[i], mat->coeff + i * size, size * sizeof(double)); im_free_dmask(mat); return to_return; } static int mat_inv_lu( DOUBLEMASK *inv, const DOUBLEMASK *lu) { #define N (lu->xsize) #define INV(i, j) MATRIX(inv, (i), (j)) int i, j; double *vec = IM_ARRAY(NULL, N, double); if (!vec) return -1; for (j = 0; j < N; ++j) { for (i = 0; i < N; ++i) vec[i] = 0.0; vec[j] = 1.0; im_lu_solve(lu, vec); for (i = 0; i < N; ++i) INV(i, j) = vec[i]; } im_free(vec); inv->scale = 1.0; inv->offset = 0.0; return 0; #undef N #undef INV } static int mat_inv_direct( DOUBLEMASK *inv, const DOUBLEMASK *mat, const char *function_name) { #define N (mat->xsize) #define MAT(i, j) MATRIX(mat, (i), (j)) #define INV(i, j) MATRIX(inv, (i), (j)) inv->scale = 1.0; inv->offset = 0.0; switch (N) { case 1: { if (fabs(MAT(0, 0)) < TOO_SMALL) { im_error(function_name, "singular or near-singular matrix"); return -1; } INV(0, 0) = 1.0 / MAT(0, 0); return 0; } case 2: { double det = MAT(0, 0) * MAT(1, 1) - MAT(0, 1) * MAT(1, 0); if (fabs(det) < TOO_SMALL) { im_error(function_name, "singular or near-singular matrix"); return -1; } INV(0, 0) = MAT(1, 1) / det; INV(0, 1) = -MAT(0, 1) / det; INV(1, 0) = -MAT(1, 0) / det; INV(1, 1) = MAT(0, 0) / det; return 0; } case 3: { double det = MAT(0, 0) * (MAT(1, 1) * MAT(2, 2) - MAT(1, 2) * MAT(2, 1)) - MAT(0, 1) * (MAT(1, 0) * MAT(2, 2) - MAT(1, 2) * MAT(2, 0)) + MAT(0, 2) * (MAT(1, 0) * MAT(2, 1) - MAT(1, 1) * MAT(2, 0)); if (fabs(det) < TOO_SMALL) { im_error(function_name, "singular or near-singular matrix"); return -1; } INV(0, 0) = (MAT(1, 1) * MAT(2, 2) - MAT(1, 2) * MAT(2, 1)) / det; INV(0, 1) = (MAT(0, 2) * MAT(2, 1) - MAT(0, 1) * MAT(2, 2)) / det; INV(0, 2) = (MAT(0, 1) * MAT(1, 2) - MAT(0, 2) * MAT(1, 1)) / det; INV(1, 0) = (MAT(1, 2) * MAT(2, 0) - MAT(1, 0) * MAT(2, 2)) / det; INV(1, 1) = (MAT(0, 0) * MAT(2, 2) - MAT(0, 2) * MAT(2, 0)) / det; INV(1, 2) = (MAT(0, 2) * MAT(1, 0) - MAT(0, 0) * MAT(1, 2)) / det; INV(2, 0) = (MAT(1, 0) * MAT(2, 1) - MAT(1, 1) * MAT(2, 0)) / det; INV(2, 1) = (MAT(0, 1) * MAT(2, 0) - MAT(0, 0) * MAT(2, 1)) / det; INV(2, 2) = (MAT(0, 0) * MAT(1, 1) - MAT(0, 1) * MAT(1, 0)) / det; return 0; } default: return -1; } #undef N #undef MAT #undef INV } libvips-8.15.1/libvips/deprecated/im_matmul.c000066400000000000000000000044001454007373500211640ustar00rootroot00000000000000/* Multiply two matrices. * * Copyright: 1990, K. Martinez and J. Cupitt * * 23/10/10 * - gtk-doc */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include /** * im_matmul: * @in1: input matrix * @in2: input matrix * @filename: name for output matrix * * Multiplies two DOUBLEMASKs. Result matrix is made and returned. * Pass the filename to set for the output. * * The scale and offset members of @in1 and @in2 are ignored. * * See also: im_mattrn(), im_matinv(). * * Returns: the result matrix on success, or %NULL on error. */ DOUBLEMASK * im_matmul(DOUBLEMASK *in1, DOUBLEMASK *in2, const char *name) { int xc, yc, col; double sum; DOUBLEMASK *mat; double *out, *a, *b; double *s1, *s2; /* Check matrix sizes. */ if (in1->xsize != in2->ysize) { im_error("im_matmul", "%s", _("bad sizes")); return NULL; } /* Allocate output matrix. */ if (!(mat = im_create_dmask(name, in2->xsize, in1->ysize))) return NULL; /* Multiply. */ out = mat->coeff; s1 = in1->coeff; for (yc = 0; yc < in1->ysize; yc++) { s2 = in2->coeff; for (col = 0; col < in2->xsize; col++) { /* Get ready to sweep a row. */ sum = 0.0; a = s1; b = s2; for (sum = 0.0, xc = 0; xc < in1->xsize; xc++) { sum += *a++ * *b; b += in2->xsize; } *out++ = sum; s2++; } s1 += in1->xsize; } return mat; } libvips-8.15.1/libvips/deprecated/im_mattrn.c000066400000000000000000000034361454007373500212020ustar00rootroot00000000000000/* matrix transpose * * Copyright: 1990, K. Martinez and J. Cupitt * */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include /** * im_mattrn: * @in: input matrix * @filename: name for output matrix * * Transposes the input matrix. * Pass the filename to set for the output. * * See also: im_matmul(), im_matinv(). * * Returns: the result matrix on success, or %NULL on error. */ DOUBLEMASK * im_mattrn(DOUBLEMASK *in, const char *name) { int xc, yc; DOUBLEMASK *mat; double *out, *a, *b; /* Allocate output matrix. */ if (!(mat = im_create_dmask(name, in->ysize, in->xsize))) return NULL; mat->scale = in->scale; mat->offset = in->offset; /* Transpose. */ out = mat->coeff; a = in->coeff; for (yc = 0; yc < mat->ysize; yc++) { b = a; for (xc = 0; xc < mat->xsize; xc++) { *out++ = *b; b += in->xsize; } a++; } return mat; } libvips-8.15.1/libvips/deprecated/im_maxpos_avg.c000066400000000000000000000151131454007373500220340ustar00rootroot00000000000000/* im_maxpos_avg.c * * Copyright: 2006, The Nottingham Trent University * Copyright: 2006, Tom Vajzovic * * Author: Tom Vajzovic * * Written on: 2006-09-25 * 15/10/07 JC * - changed spelling of occurrences * - check for !occurrences before using val * - renamed avg as sum, a bit clearer * 2/9/09 * - gtkdoc comment * 8/9/08 * - rewrite from im_maxpos() * - now handles many bands, complex, faster * 27/7/14 * - fix a race ... did not merge states if max was equal * 26/3/15 * - avoid NaN, thanks Paul */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include /* A position and maximum. */ typedef struct _Maxposavg { int xpos; int ypos; double max; /* occurences == 0 means we found no points, or we are uninitialised. */ int occurences; } Maxposavg; /* New sequence value. */ static void * maxposavg_start(IMAGE *in, void *a, void *b) { Maxposavg *global_maxposavg = (Maxposavg *) b; Maxposavg *maxposavg; if (!(maxposavg = IM_NEW(NULL, Maxposavg))) return NULL; *maxposavg = *global_maxposavg; return (void *) maxposavg; } /* Merge the sequence value back into the per-call state. */ static int maxposavg_stop(void *seq, void *a, void *b) { Maxposavg *global_maxposavg = (Maxposavg *) b; Maxposavg *maxposavg = (Maxposavg *) seq; /* Merge. */ if (maxposavg->occurences == 0) { } else if (maxposavg->max > global_maxposavg->max) *global_maxposavg = *maxposavg; else if (maxposavg->max == global_maxposavg->max) { global_maxposavg->xpos += maxposavg->xpos; global_maxposavg->ypos += maxposavg->ypos; global_maxposavg->occurences += maxposavg->occurences; } im_free(seq); return 0; } /* int loop. */ #define ILOOP(TYPE) \ { \ TYPE *p = (TYPE *) in; \ TYPE m; \ \ m = max; \ \ for (x = 0; x < sz; x++) { \ TYPE v = p[x]; \ \ if (occurences == 0 || v > m) { \ m = v; \ xpos = r->left + x / reg->im->Bands; \ ypos = r->top + y; \ occurences = 1; \ } \ else if (v == m) { \ xpos += r->left + x / reg->im->Bands; \ ypos += r->top + y; \ occurences += 1; \ } \ } \ \ max = m; \ } /* float/double loop ... avoid NaN. */ #define FLOOP(TYPE) \ { \ TYPE *p = (TYPE *) in; \ TYPE m; \ \ m = max; \ \ for (x = 0; x < sz; x++) { \ TYPE v = p[x]; \ \ if (isnan(v)) { \ } \ else if (occurences == 0 || v > m) { \ m = v; \ xpos = r->left + x / reg->im->Bands; \ ypos = r->top + y; \ occurences = 1; \ } \ else if (v == m) { \ xpos += r->left + x / reg->im->Bands; \ ypos += r->top + y; \ occurences += 1; \ } \ } \ \ max = m; \ } /* complex/dpcomplex loop ... avoid NaN. */ #define CLOOP(TYPE) \ { \ TYPE *p = (TYPE *) in; \ \ for (x = 0; x < sz; x++) { \ double mod, re, im; \ \ re = p[0]; \ im = p[1]; \ p += 2; \ mod = re * re + im * im; \ \ if (isnan(mod)) { \ } \ else if (occurences == 0 || mod > max) { \ max = mod; \ xpos = r->left + x / reg->im->Bands; \ ypos = r->top + y; \ occurences = 1; \ } \ else if (mod == max) { \ xpos += r->left + x / reg->im->Bands; \ ypos += r->top + y; \ occurences += 1; \ } \ } \ } /* Loop over region, adding to seq. */ static int maxposavg_scan(REGION *reg, void *seq, void *a, void *b, gboolean *stop) { const Rect *r = ®->valid; const int sz = IM_REGION_N_ELEMENTS(reg); Maxposavg *maxposavg = (Maxposavg *) seq; int x, y; double max; int xpos, ypos, occurences; xpos = maxposavg->xpos; ypos = maxposavg->ypos; max = maxposavg->max; occurences = maxposavg->occurences; for (y = 0; y < r->height; y++) { VipsPel *in = VIPS_REGION_ADDR(reg, r->left, r->top + y); switch (reg->im->BandFmt) { case IM_BANDFMT_UCHAR: ILOOP(unsigned char); break; case IM_BANDFMT_CHAR: ILOOP(signed char); break; case IM_BANDFMT_USHORT: ILOOP(unsigned short); break; case IM_BANDFMT_SHORT: ILOOP(signed short); break; case IM_BANDFMT_UINT: ILOOP(unsigned int); break; case IM_BANDFMT_INT: ILOOP(signed int); break; case IM_BANDFMT_FLOAT: FLOOP(float); break; case IM_BANDFMT_DOUBLE: FLOOP(double); break; case IM_BANDFMT_COMPLEX: CLOOP(float); break; case IM_BANDFMT_DPCOMPLEX: CLOOP(double); break; default: g_assert(0); } } maxposavg->xpos = xpos; maxposavg->ypos = ypos; maxposavg->max = max; maxposavg->occurences = occurences; return 0; } /** * im_maxpos_avg: * @im: image to scan * @xpos: returned X position * @ypos: returned Y position * @out: returned value * * Function to find the maximum of an image. Returns coords and value at * double precision. In the event of a draw, returns average of all * drawing coords. * * See also: im_maxpos(), im_min(), im_stats(). * * Returns: 0 on success, -1 on error */ int im_maxpos_avg(IMAGE *in, double *xpos, double *ypos, double *out) { Maxposavg *global_maxposavg; if (im_pincheck(in) || im_check_uncoded("im_maxpos_avg", in)) return -1; if (!(global_maxposavg = IM_NEW(in, Maxposavg))) return -1; global_maxposavg->occurences = 0; if (vips_sink(in, maxposavg_start, maxposavg_scan, maxposavg_stop, in, global_maxposavg)) return -1; if (global_maxposavg->occurences == 0) { *xpos = nan(""); *ypos = nan(""); *out = nan(""); } else { /* Back to modulus. */ if (vips_band_format_iscomplex(in->BandFmt)) global_maxposavg->max = sqrt(global_maxposavg->max); if (xpos) *xpos = (double) global_maxposavg->xpos / global_maxposavg->occurences; if (ypos) *ypos = (double) global_maxposavg->ypos / global_maxposavg->occurences; if (out) *out = global_maxposavg->max; } return 0; } libvips-8.15.1/libvips/deprecated/im_maxpos_subpel.c000066400000000000000000000104761454007373500225600ustar00rootroot00000000000000/* find position of maximum, subpixel estimation * * Copyright: 2008, Nottingham Trent University * Author: Tom Vajzovic * Written on: 2008-02-07 * * 25/1/11 * - gtk-doc */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H */ #include #include #include #include #define MOST_OF(A, B) ((A) > 0.9 * (B)) #define LITTLE_OF(A, B) ((B) < 0.1 * (B)) /** * im_maxpos_subpel: * @in: input image * @x: output position of maximum * @y: output position of maximum * * This function implements: * * "Extension of Phase Correlation to Subpixel Registration" * by H. Foroosh, from IEEE trans. Im. Proc. 11(3), 2002. * * If the best three matches in the correlation are aranged: * * 02 or 01 * 1 2 * * then we return a subpixel match using the ratio of correlations in the * vertical and horizontal dimension. * * (xs[0], ys[0]) is the best integer alignment * (xs[ use_x ], ys[ use_x ]) is equal in y and (+/-)1 off in x * (xs[ use_y ], ys[ use_y ]) is equal in x and (+/-)1 off in y * * Alternatively if the best four matches in the correlation are aranged in * a square: * * 01 or 03 or 02 or 03 * 32 12 31 21 * * then we return a subpixel match weighting with the sum the two on each * side over the sum of all four, but only if all four of them are very * close to the best, and the fifth is nowhere near. * * This alternative method is not described by Foroosh, but is often the * case where the match is close to n-and-a-half pixels in both dimensions. * * See also: im_maxpos(), im_min(), im_stats(). * * Returns: 0 on success, -1 on error */ int im_maxpos_subpel(IMAGE *in, double *x, double *y) { #define FUNCTION_NAME "im_maxpos_subpel" int xs[5]; int ys[5]; double vals[5]; int xa, ya, xb, yb; double vxa, vya, vxb, vyb; if (im_maxpos_vec(in, xs, ys, vals, 5)) return -1; #define WRAP_TEST_RETURN() \ \ /* wrap around if we have alignment -1 < d <= 0 */ \ /* (change it to: size - 1 <= d < size ) */ \ \ if (!xa && in->Xsize - 1 == xb) \ xa = in->Xsize; \ \ else if (!xb && in->Xsize - 1 == xa) \ xb = in->Xsize; \ \ if (!ya && in->Ysize - 1 == yb) \ ya = in->Ysize; \ \ else if (!yb && in->Ysize - 1 == ya) \ yb = in->Ysize; \ \ if (1 == abs(xb - xa) && 1 == abs(yb - ya)) { \ *x = ((double) xa) + ((double) (xb - xa)) * (vxb / (vxa + vxb)); \ *y = ((double) ya) + ((double) (yb - ya)) * (vyb / (vya + vyb)); \ return 0; \ } #define TEST3(A, B) \ if (xs[0] == xs[A] && ys[0] == ys[B]) { \ xa = xs[0]; \ ya = ys[0]; \ xb = xs[B]; \ yb = ys[A]; \ vxa = vals[0]; \ vya = vals[0]; \ vxb = vals[B]; \ vyb = vals[A]; \ WRAP_TEST_RETURN() \ } TEST3(1, 2) TEST3(2, 1) if (MOST_OF(vals[1], vals[0]) && MOST_OF(vals[2], vals[0]) && MOST_OF(vals[3], vals[0]) && LITTLE_OF(vals[4], vals[0])) { #define TEST4(A, B, C, D, E, F, G, H) \ if (xs[A] == xs[B] && xs[C] == xs[D] && ys[E] == ys[F] && ys[G] == ys[H]) { \ xa = xs[A]; \ xb = xs[C]; \ ya = ys[E]; \ yb = ys[G]; \ vxa = vals[A] + vals[B]; \ vxb = vals[C] + vals[D]; \ vya = vals[E] + vals[F]; \ vyb = vals[G] + vals[H]; \ WRAP_TEST_RETURN() \ } TEST4(0, 3, 1, 2, 0, 1, 2, 3) TEST4(0, 1, 2, 3, 0, 3, 1, 2) TEST4(0, 3, 1, 2, 0, 2, 1, 3) TEST4(0, 2, 1, 3, 0, 3, 1, 2) } im_warn(FUNCTION_NAME, "registration performed to nearest pixel only: correlation does not have the expected distribution for sub-pixel registration"); *x = (double) xs[0]; *y = (double) ys[0]; return 0; } libvips-8.15.1/libvips/deprecated/im_measure.c000066400000000000000000000122261454007373500213330ustar00rootroot00000000000000/* im_measure.c * * Modified: * 19/8/94 JC * - now uses doubles for addressing * - could miss by up to h pixels previously! * - ANSIfied * - now issues warning if any deviations are greater than 20% of the * mean * 31/10/95 JC * - more careful about warning for averages <0, or averages near zero * - can get these cases with im_measure() of IM_TYPE_LAB images * 28/10/02 JC * - number bands from zero in error messages * 7/7/04 * - works on labq * 18/8/08 * - add gtkdoc comments * - remove deprecated im_extract() * 30/11/09 * - changes for im_extract() broke averaging * 9/11/11 * - moved to deprecated, the new VipsMeasure does not have the * select-patches thing, so we have to keep this around */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include /* Measure into array. */ static int measure_patches(IMAGE *im, double *coeff, int left, int top, int width, int height, int u, int v, int *sel, int nsel) { IMAGE *tmp; int patch; int i, j; int m, n; double avg, dev; int x, y, w, h; /* How large are the patches we are to measure? */ double pw = (double) width / (double) u; double ph = (double) height / (double) v; /* Set up sub to be the size we need for a patch. */ w = (pw + 1) / 2; h = (ph + 1) / 2; /* Loop through sel, picking out areas to measure. */ for (j = 0, patch = 0; patch < nsel; patch++) { /* Sanity check. Is the patch number sensible? */ if (sel[patch] <= 0 || sel[patch] > u * v) { im_error("im_measure", _("patch %d is out of range"), sel[patch]); return 1; } /* Patch coordinates. */ m = (sel[patch] - 1) % u; n = (sel[patch] - 1) / u; /* Move sub to correct position. */ x = left + m * pw + (pw + 2) / 4; y = top + n * ph + (ph + 2) / 4; /* Loop through bands. */ for (i = 0; i < im->Bands; i++, j++) { /* Make temp buffer to extract to. */ if (!(tmp = im_open("patch", "t"))) return -1; /* Extract and measure. */ if (im_extract_areabands(im, tmp, x, y, w, h, i, 1) || im_avg(tmp, &avg) || im_deviate(tmp, &dev)) { im_close(tmp); return -1; } im_close(tmp); /* Is the deviation large compared with the average? * This could be a clue that our parameters have * caused us to miss the patch. Look out for averages * <0, or averages near zero (can get these if use * im_measure() on IM_TYPE_LAB images). */ if (dev * 5 > fabs(avg) && fabs(avg) > 3) im_warn("im_measure", _("patch %d, band %d: " "avg = %g, sdev = %g"), patch, i, avg, dev); /* Save results. */ coeff[j] = avg; } } return 0; } static DOUBLEMASK * internal_im_measure_area(IMAGE *im, int left, int top, int width, int height, int u, int v, int *sel, int nsel, const char *name) { DOUBLEMASK *mask; if (im_check_uncoded("im_measure", im) || im_check_noncomplex("im_measure", im)) return NULL; /* Default to all patches if sel == NULL. */ if (sel == NULL) { int i; nsel = u * v; if (!(sel = IM_ARRAY(im, nsel, int))) return NULL; for (i = 0; i < nsel; i++) sel[i] = i + 1; } /* What size mask do we need? */ if (!(mask = im_create_dmask(name, im->Bands, nsel))) return NULL; /* Perform measure and return. */ if (measure_patches(im, mask->coeff, left, top, width, height, u, v, sel, nsel)) { im_free_dmask(mask); return NULL; } return mask; } DOUBLEMASK * im_measure_area(IMAGE *im, int left, int top, int width, int height, int u, int v, int *sel, int nsel, const char *name) { DOUBLEMASK *mask; VipsImage *t; /* The old im_measure() worked on labq. */ if (im->Coding == IM_CODING_LABQ) { if (!(t = im_open("measure-temp", "p"))) return NULL; if (im_LabQ2Lab(im, t) || !(mask = im_measure_area(t, left, top, width, height, u, v, sel, nsel, name))) { g_object_unref(t); return NULL; } g_object_unref(t); return mask; } if (sel) return internal_im_measure_area(im, left, top, width, height, u, v, sel, nsel, name); else { if (vips_measure(im, &t, u, v, "left", left, "top", top, "width", width, "height", height, NULL)) return NULL; if (!(mask = im_vips2mask(t, name))) { g_object_unref(t); return NULL; } g_object_unref(t); return mask; } } libvips-8.15.1/libvips/deprecated/im_nifti2vips.c000066400000000000000000000051711454007373500217700ustar00rootroot00000000000000/* load nifti images * * 10/9/18 * - from im_openslide2vips */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include static int im_nifti2vips(const char *name, IMAGE *out) { VipsImage *t; if (vips_niftiload(name, &t, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } static const char *nifti_suffs[] = { ".nii", ".nii.gz", ".hdr", ".hdr.gz", ".img", ".img.gz", ".nia", ".nia.gz", NULL }; static VipsFormatFlags nifti_flags(const char *name) { char filename[FILENAME_MAX]; char mode[FILENAME_MAX]; im_filename_split(name, filename, mode); return (VipsFormatFlags) vips_foreign_flags("niftiload", filename); } static int isnifti(const char *name) { char filename[FILENAME_MAX]; char mode[FILENAME_MAX]; im_filename_split(name, filename, mode); return vips_foreign_is_a("niftiload", filename); } /* nifti format adds no new members. */ typedef VipsFormat VipsFormatNifti; typedef VipsFormatClass VipsFormatNiftiClass; static void vips_format_nifti_class_init(VipsFormatNiftiClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsFormatClass *format_class = (VipsFormatClass *) class; object_class->nickname = "im_nifti"; object_class->description = _("NIfTI"); format_class->priority = 100; format_class->is_a = isnifti; format_class->load = im_nifti2vips; format_class->get_flags = nifti_flags; format_class->suffs = nifti_suffs; } static void vips_format_nifti_init(VipsFormatNifti *object) { } G_DEFINE_TYPE(VipsFormatNifti, vips_format_nifti, VIPS_TYPE_FORMAT); libvips-8.15.1/libvips/deprecated/im_openslide2vips.c000066400000000000000000000066271454007373500226500ustar00rootroot00000000000000/* read with openslide * * 17/12/11 * - just a stub * 11/4/12 * - support :level,associated in filenames * 20/9/12 * - add Leica filename suffix */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include static int im_openslide2vips(const char *name, IMAGE *out) { char filename[FILENAME_MAX]; char mode[FILENAME_MAX]; char *p, *q; char *associated; int level; char *endptr; VipsImage *t; im_filename_split(name, filename, mode); level = 0; associated = NULL; p = &mode[0]; if ((q = im_getnextoption(&p))) { level = strtoul(q, &endptr, 10); if (*endptr) { vips_error("openslide2vips", "%s", _("level must be a number")); return -1; } } if ((q = im_getnextoption(&p))) associated = q; if (vips_openslideload(filename, &t, "level", level, "associated", associated, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } static const char *openslide_suffs[] = { ".svs", /* Aperio */ ".vms", ".vmu", ".ndpi", /* Hamamatsu */ ".scn", /* Leica */ ".mrxs", /* MIRAX */ ".svslide", /* Sakura */ ".tif", /* Trestle */ ".bif", /* Ventana */ NULL }; static VipsFormatFlags openslide_flags(const char *name) { char filename[FILENAME_MAX]; char mode[FILENAME_MAX]; im_filename_split(name, filename, mode); return (VipsFormatFlags) vips_foreign_flags("openslideload", filename); } static int isopenslide(const char *name) { char filename[FILENAME_MAX]; char mode[FILENAME_MAX]; im_filename_split(name, filename, mode); return vips_foreign_is_a("openslideload", filename); } /* openslide format adds no new members. */ typedef VipsFormat VipsFormatOpenslide; typedef VipsFormatClass VipsFormatOpenslideClass; static void vips_format_openslide_class_init(VipsFormatOpenslideClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsFormatClass *format_class = (VipsFormatClass *) class; object_class->nickname = "im_openslide"; object_class->description = _("Openslide"); format_class->priority = 100; format_class->is_a = isopenslide; format_class->load = im_openslide2vips; format_class->get_flags = openslide_flags; format_class->suffs = openslide_suffs; } static void vips_format_openslide_init(VipsFormatOpenslide *object) { } G_DEFINE_TYPE(VipsFormatOpenslide, vips_format_openslide, VIPS_TYPE_FORMAT); libvips-8.15.1/libvips/deprecated/im_png2vips.c000066400000000000000000000042741454007373500214460ustar00rootroot00000000000000/* Convert 1 to 4-band 8 or 16-bit VIPS images to/from PNG. * * 19/12/11 * - just a stub */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "../foreign/pforeign.h" int im_png2vips(const char *name, IMAGE *out) { char filename[FILENAME_MAX]; char mode[FILENAME_MAX]; VipsImage *x; im_filename_split(name, filename, mode); if (vips_pngload(filename, &x, NULL)) return -1; if (vips_image_write(x, out)) { VIPS_UNREF(x); return -1; } VIPS_UNREF(x); return 0; } static int ispng(const char *filename) { return vips_foreign_is_a("pngload", filename); } static const char *png_suffs[] = { ".png", NULL }; typedef VipsFormat VipsFormatPng; typedef VipsFormatClass VipsFormatPngClass; static void vips_format_png_class_init(VipsFormatPngClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsFormatClass *format_class = (VipsFormatClass *) class; object_class->nickname = "png"; object_class->description = _("PNG"); format_class->is_a = ispng; format_class->load = im_png2vips; format_class->save = im_vips2png; format_class->suffs = png_suffs; } static void vips_format_png_init(VipsFormatPng *object) { } G_DEFINE_TYPE(VipsFormatPng, vips_format_png, VIPS_TYPE_FORMAT); libvips-8.15.1/libvips/deprecated/im_point_bilinear.c000066400000000000000000000054061454007373500226720ustar00rootroot00000000000000/* im_point_bilinear.c * * Copyright: 2006, The Nottingham Trent University * * Author: Tom Vajzovic * * Written on: 2006-09-26 * * 9/9/09 * - rewrite in terms of im_affinei() and im_avg() */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /* HAVE_CONFIG_H */ #include #include #include #include /** * im_point: * @im: image to read from * @interpolate: interpolator to sample points with * @x: x position to interpolate * @y: y position to interpolate * @band: band to read * @out: return interpolated value * * Find the value at (@x, @y) in given band of image. * Non-integral values are calculated using the supplied @interpolate. * * See also: im_avg(), #VipsInterpolate * * Returns: 0 on success, -1 on error */ int im_point(IMAGE *im, VipsInterpolate *interpolate, double x, double y, int band, double *out) { IMAGE *mem; IMAGE *t[2]; if (band >= im->Bands || x < 0.0 || y < 0.0 || x > im->Xsize || y > im->Ysize) { im_error("im_point_bilinear", "%s", _("coords outside image")); return -1; } if (!(mem = im_open("im_point", "p"))) return -1; if (im_open_local_array(mem, t, 2, "im_point", "p") || im_extract_band(im, t[0], band) || im_affinei(t[0], t[1], interpolate, 1, 0, 0, 1, floor(x) - x, floor(y) - y, floor(x), floor(y), 1, 1) || im_avg(t[1], out)) { im_close(mem); return -1; } im_close(mem); return 0; } /** * im_point_bilinear: * @im: image to read from * @x: x position to interpolate * @y: y position to interpolate * @band: band to read * @out: return interpolated value * * Find the value at (@x,@y) in given band of image. * Use bilinear interpolation if @x or @y are non-integral. * * See also: im_avg(), im_point(). * * Returns: 0 on success, -1 on error */ int im_point_bilinear(IMAGE *im, double x, double y, int band, double *out) { return im_point(im, vips_interpolate_bilinear_static(), x, y, band, out); } libvips-8.15.1/libvips/deprecated/im_ppm2vips.c000066400000000000000000000043151454007373500214520ustar00rootroot00000000000000/* Read a ppm file. * * 20/12/11 * - just a compat stub */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include int im_ppm2vips(const char *filename, IMAGE *out) { VipsImage *t; if (vips_ppmload(filename, &t, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } static int isppm(const char *filename) { return vips_foreign_is_a("ppmload", filename); } static VipsFormatFlags ppm_flags(const char *filename) { return (VipsFormatFlags) vips_foreign_flags("ppmload", filename); } static const char *ppm_suffs[] = { ".ppm", ".pgm", ".pbm", ".pfm", NULL }; /* ppm format adds no new members. */ typedef VipsFormat VipsFormatPpm; typedef VipsFormatClass VipsFormatPpmClass; static void vips_format_ppm_class_init(VipsFormatPpmClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsFormatClass *format_class = (VipsFormatClass *) class; object_class->nickname = "ppm"; object_class->description = _("PPM/PBM/PNM/PFM"); format_class->is_a = isppm; format_class->load = im_ppm2vips; format_class->save = im_vips2ppm; format_class->get_flags = ppm_flags; format_class->suffs = ppm_suffs; } static void vips_format_ppm_init(VipsFormatPpm *object) { } G_DEFINE_TYPE(VipsFormatPpm, vips_format_ppm, VIPS_TYPE_FORMAT); libvips-8.15.1/libvips/deprecated/im_print.c000066400000000000000000000023001454007373500210160ustar00rootroot00000000000000/* im_print(): print a string to stdout */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include /* Print a string to stdout, with a "\n". Sometimes useful for debugging * language bindings. */ int im_print(const char *message) { printf("%s\n", message); return 0; } libvips-8.15.1/libvips/deprecated/im_printlines.c000066400000000000000000000074221454007373500220630ustar00rootroot00000000000000/* @(#) Function which prints in stdout the values of a picture * @(#) * @(#) For debuging only * @(#) is either memory mapped or in a buffer. * @(#) * @(#) void im_printlines(in) * @(#) IMAGE *in; * @(#) * * Copyright: 1991 N. Dessipris * * Author: N. Dessipris * Written on: 18/03/1991 * Modified on: * 15/4/93 J.Cupitt * - returns int, not void now, so error messages work * - detects im->data invalid. * 23/7/93 JC * - im_incheck() added */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include /* Useful: Call a macro with the name, type pairs for all VIPS functions. */ #define im_for_all_types() \ case IM_BANDFMT_UCHAR: \ loopuc(unsigned char); \ break; \ case IM_BANDFMT_CHAR: \ loop(char); \ break; \ case IM_BANDFMT_USHORT: \ loop(unsigned short); \ break; \ case IM_BANDFMT_SHORT: \ loop(short); \ break; \ case IM_BANDFMT_UINT: \ loop(unsigned int); \ break; \ case IM_BANDFMT_INT: \ loop(int); \ break; \ case IM_BANDFMT_FLOAT: \ loop(float); \ break; \ case IM_BANDFMT_DOUBLE: \ loop(double); \ break; \ case IM_BANDFMT_COMPLEX: \ loopcmplx(float); \ break; \ case IM_BANDFMT_DPCOMPLEX: \ loopcmplx(double); \ break; int im_printlines(IMAGE *in) { if (im_incheck(in)) return -1; if (in->Coding != IM_CODING_NONE) { im_error("im_printlines", "%s", _("input must be uncoded")); return -1; } if (!in->data) { im_error("im_debugim", "%s", _("unsuitable image type")); return -1; } /* What type? First define the loop we want to perform for all types. */ #define loopuc(TYPE) \ { \ TYPE *p = (TYPE *) in->data; \ int x, y, z; \ \ for (y = 0; y < in->Ysize; y++) { \ fprintf(stderr, "line:%5d\n", y); \ for (x = 0; x < in->Xsize; x++) { \ fprintf(stderr, "%5d", x); \ for (z = 0; z < in->Bands; z++) { \ fprintf(stderr, "\t%4d", (TYPE) *p++); \ } \ fprintf(stderr, "\n"); \ } \ } \ } #define loop(TYPE) \ { \ TYPE *p = (TYPE *) in->data; \ int x, y, z; \ \ for (y = 0; y < in->Ysize; y++) { \ fprintf(stderr, "line:%5d\n", y); \ for (x = 0; x < in->Xsize; x++) { \ fprintf(stderr, "%5d", x); \ for (z = 0; z < in->Bands; z++) { \ fprintf(stderr, "\t%f", (double) *p++); \ } \ fprintf(stderr, "\n"); \ } \ } \ } #define loopcmplx(TYPE) \ { \ TYPE *p = (TYPE *) in->data; \ int x, y, z; \ \ for (y = 0; y < in->Ysize; y++) { \ fprintf(stderr, "line:%5d\n", y); \ for (x = 0; x < in->Xsize; x++) { \ fprintf(stderr, "%5d", x); \ for (z = 0; z < in->Bands; z++) { \ fprintf(stderr, "\t%f", (double) *p++); \ fprintf(stderr, "\t%f", (double) *p++); \ } \ fprintf(stderr, "\n"); \ } \ } \ } /* Now generate code for all types. */ switch (in->BandFmt) { im_for_all_types(); default: { im_error("im_printlines", "%s", _("unknown input format")); return -1; } } return 0; } libvips-8.15.1/libvips/deprecated/im_resize_linear.c000066400000000000000000000110411454007373500225170ustar00rootroot00000000000000/* im_lowpass() * History: * 27/10/94 JC * - IM_ARRAY modified to use local allocation * - im_iscomplex() call added * 17/2/95 JC * - modernised a little * 18/8/95 JC * - name changed to reflect function more closely * 2/6/04 * - was detecting edges incorrectly, segv for some images (thanks Javi) */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include /* What we do for each pel. */ #define LOOP(TYPE) \ if (Xint >= 0 && Yint >= 0 && \ Xint < in->Xsize - 1 && Yint < in->Ysize - 1) \ for (bb = 0; bb < in->Bands; bb++) { \ TYPE s1 = *((TYPE *) p); \ TYPE s2 = *((TYPE *) (p + ips)); \ TYPE s3 = *((TYPE *) (p + ils)); \ TYPE s4 = *((TYPE *) (p + ips + ils)); \ TYPE *t = (TYPE *) q; \ \ *t = (1 - dx) * (1 - dy) * s1 + dx * (1 - dy) * s2 + \ dy * (1 - dx) * s3 + dx * dy * s4; \ \ p += ies; \ q += oes; \ } \ else if (Xint == in->Xsize - 1 && Yint >= 0 && Yint < in->Ysize - 1) \ for (bb = 0; bb < in->Bands; bb++) { \ TYPE s1 = *((TYPE *) p); \ TYPE s3 = *((TYPE *) (p + ils)); \ TYPE *t = (TYPE *) q; \ \ *t = (1 - dy) * s1 + dy * s3; \ \ p += ies; \ q += oes; \ } \ else if (Yint == in->Ysize - 1 && Xint >= 0 && Xint < in->Xsize - 1) \ for (bb = 0; bb < in->Bands; bb++) { \ TYPE s1 = *((TYPE *) p); \ TYPE s2 = *((TYPE *) (p + ips)); \ TYPE *t = (TYPE *) q; \ \ *t = (1 - dx) * s1 + dx * s2; \ \ p += ies; \ q += oes; \ } \ else \ for (bb = 0; bb < in->Bands; bb++) { \ unsigned char s1 = *((unsigned char *) p); \ TYPE *t = (TYPE *) q; \ \ *t = s1; \ \ p += ies; \ q += oes; \ } int im_resize_linear(IMAGE *in, IMAGE *out, int X, int Y) { double dx, dy, xscale, yscale; double Xnew, Ynew; /* inv. coord. of the interpolated pt */ int x, y; int Xint, Yint; int bb; PEL *input, *opline; PEL *q, *p; int ils, ips, ies; /* Input and output line, pel and */ int ols, oes; /* element sizes */ if (im_iocheck(in, out)) return -1; if (vips_band_format_iscomplex(in->BandFmt)) { im_error("im_lowpass", "%s", _("non-complex input only")); return -1; } if (in->Coding != IM_CODING_NONE) { im_error("im_lowpass: ", "%s", _("put should be uncoded")); return -1; } if (im_cp_desc(out, in)) return -1; out->Xsize = X; out->Ysize = Y; if (im_setupout(out)) return -1; ils = IM_IMAGE_SIZEOF_LINE(in); ips = IM_IMAGE_SIZEOF_PEL(in); ies = IM_IMAGE_SIZEOF_ELEMENT(in); ols = IM_IMAGE_SIZEOF_LINE(out); oes = IM_IMAGE_SIZEOF_ELEMENT(out); /* buffer lines ***************/ if (!(opline = IM_ARRAY(out, ols, PEL))) return -1; /* Resampling *************/ input = (PEL *) in->data; xscale = ((double) in->Xsize - 1) / (X - 1); yscale = ((double) in->Ysize - 1) / (Y - 1); for (y = 0; y < Y; y++) { q = opline; for (x = 0; x < X; x++) { Xnew = x * xscale; Ynew = y * yscale; Xint = floor(Xnew); Yint = floor(Ynew); dx = Xnew - Xint; dy = Ynew - Yint; p = input + Xint * ips + Yint * ils; switch (in->BandFmt) { case IM_BANDFMT_UCHAR: LOOP(unsigned char); break; case IM_BANDFMT_USHORT: LOOP(unsigned short); break; case IM_BANDFMT_UINT: LOOP(unsigned int); break; case IM_BANDFMT_CHAR: LOOP(signed char); break; case IM_BANDFMT_SHORT: LOOP(signed short); break; case IM_BANDFMT_INT: LOOP(signed int); break; case IM_BANDFMT_FLOAT: LOOP(float); break; case IM_BANDFMT_DOUBLE: LOOP(double); break; default: im_error("im_lowpass", "%s", _("unsupported image type")); return -1; /*NOTREACHED*/ } } if (im_writeline(y, out, opline)) return -1; } return 0; } libvips-8.15.1/libvips/deprecated/im_setbox.c000066400000000000000000000031131454007373500211710ustar00rootroot00000000000000/* @(#) Copies the coordinates of a box to an IMAGE_BOX * @(#) * @(#) Right call: * @(#) void im_setbox(pbox, xst, yst, xsiz, ysiz, ch_select) * @(#) IMAGE_BOX *pbox; * @(#) int xst, yst, xsiz, ysiz, ch_select; * @(#) ch_select could be 0, 1, 2 or 3 corresponding to * @(#) a, r , g or b respectively. * @(#) * * Copyright: Nicos Dessipris * Written on: 13/02/1990 * Modified on : 04/04/1990 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include void im_setbox(IMAGE_BOX *pbox, int xst, int yst, int xsiz, int ysiz, int ch_select) { pbox->xstart = xst; pbox->ystart = yst; pbox->xsize = xsiz; pbox->ysize = ysiz; pbox->chsel = ch_select; } libvips-8.15.1/libvips/deprecated/im_simcontr.c000066400000000000000000000063431454007373500215330ustar00rootroot00000000000000/* creates a pattern showing the similtaneous constrast effect * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 19/07/1991 * Modified on: * 22/7/93 JC * - externs removed * - im_outcheck() added * 1/2/11 * - gtk-doc */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include /** * im_simcontr: * @out: output image * @xsize: image size * @ysize: image size * * Creates a pattern showing the similtaneous constrast effect. * * See also: im_eye(). * * Returns: 0 on success, -1 on error */ int im_simcontr(IMAGE *out, int xsize, int ysize) { int x, y; unsigned char *line1, *line2, *cpline; /* Check input args */ if (im_outcheck(out)) return -1; /* Set now image properly */ im_initdesc(out, xsize, ysize, 1, IM_BBITS_BYTE, IM_BANDFMT_UCHAR, IM_CODING_NONE, IM_TYPE_B_W, 1.0, 1.0, 0, 0); /* Set up image checking whether the output is a buffer or a file */ if (im_setupout(out) == -1) return -1; /* Create data */ line1 = (unsigned char *) calloc((unsigned) xsize, sizeof(char)); line2 = (unsigned char *) calloc((unsigned) xsize, sizeof(char)); if ((line1 == NULL) || (line2 == NULL)) { im_error("im_simcontr", "%s", _("calloc failed")); return -1; } cpline = line1; for (x = 0; x < xsize; x++) *cpline++ = (PEL) 255; cpline = line1; for (x = 0; x < xsize / 2; x++) *cpline++ = (PEL) 0; cpline = line2; for (x = 0; x < xsize; x++) *cpline++ = (PEL) 255; cpline = line2; for (x = 0; x < xsize / 8; x++) *cpline++ = (PEL) 0; for (x = 0; x < xsize / 4; x++) *cpline++ = (PEL) 128; for (x = 0; x < xsize / 8; x++) *cpline++ = (PEL) 0; for (x = 0; x < xsize / 8; x++) *cpline++ = (PEL) 255; for (x = 0; x < xsize / 4; x++) *cpline++ = (PEL) 128; for (y = 0; y < ysize / 4; y++) { if (im_writeline(y, out, (PEL *) line1) == -1) { free((char *) line1); free((char *) line2); return -1; } } for (y = ysize / 4; y < (ysize / 4 + ysize / 2); y++) { if (im_writeline(y, out, (PEL *) line2) == -1) { free((char *) line1); free((char *) line2); return -1; } } for (y = (ysize / 4 + ysize / 2); y < ysize; y++) { if (im_writeline(y, out, (PEL *) line1) == -1) { free((char *) line1); free((char *) line2); return -1; } } free((char *) line1); free((char *) line2); return 0; } libvips-8.15.1/libvips/deprecated/im_slice.c000066400000000000000000000075101454007373500207710ustar00rootroot00000000000000/* @(#) Slices an image using two thresholds. Works for any non-complex type. * @(#) Output has three levels 0 128 and 255. Values below or = t1 are 0, * @(#) above t2 are 255 and the remaining are 128. * @(#) Input is either memory mapped or in a buffer. * @(#) It is implied that t1 is less than t2; however the program checks * @(#) if they are the wrong way and swaps them * @(#) * @(#) int im_slice(in, out, t1, t2) * @(#) IMAGE *in, *out; * @(#) double t1, t2; * @(#) * @(#) Returns 0 on success and -1 on error * * Copyright: 1991, N. Dessipris * * Author: N. Dessipris * Written on: 15/03/1991 * Modified on : */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #define BRIGHT 255 #define GREY 128 #define DARK 0 /* Useful: Call a macro with the name, type pairs for all VIPS functions. */ #define im_for_all_types(A) \ case IM_BANDFMT_UCHAR: \ A(unsigned char); \ break; \ case IM_BANDFMT_CHAR: \ A(signed char); \ break; \ case IM_BANDFMT_USHORT: \ A(unsigned short); \ break; \ case IM_BANDFMT_SHORT: \ A(signed short); \ break; \ case IM_BANDFMT_UINT: \ A(unsigned int); \ break; \ case IM_BANDFMT_INT: \ A(signed int); \ break; \ case IM_BANDFMT_FLOAT: \ A(float); \ break; /* Replacement for im_slice */ int im_slice(IMAGE *in, IMAGE *out, double t1, double t2) { int x, y, z; PEL *bu; /* Buffer we write to */ int s, epl; /* Size and els per line */ double thresh1, thresh2; /* Check our args. */ if (im_iocheck(in, out)) { im_error("im_slice", "%s", _("im_iocheck failed")); return -1; } if (in->Coding != IM_CODING_NONE) { im_error("im_slice", "%s", _("input should be uncoded")); return -1; } /* Set up the output header. */ if (im_cp_desc(out, in)) { im_error("im_slice", "%s", _("im_cp_desc failed")); return -1; } out->BandFmt = IM_BANDFMT_UCHAR; if (im_setupout(out)) { im_error("im_slice", "%s", _("im_setupout failed")); return -1; } if (t1 <= t2) { thresh1 = t1; thresh2 = t2; } else { thresh1 = t2; thresh2 = t1; } /* Make buffer for building o/p in. */ epl = in->Xsize * in->Bands; s = epl * sizeof(PEL); if ((bu = (PEL *) im_malloc(out, (unsigned) s)) == NULL) return -1; /* Define what we do for each band element type. */ #define im_slice_loop(TYPE) \ { \ TYPE *a = (TYPE *) in->data; \ \ for (y = 0; y < in->Ysize; y++) { \ PEL *b = bu; \ \ for (x = 0; x < in->Xsize; x++) \ for (z = 0; z < in->Bands; z++) { \ double f = (double) *a++; \ if (f <= thresh1) \ *b++ = (PEL) DARK; \ else if (f > thresh2) \ *b++ = (PEL) BRIGHT; \ else \ *b++ = (PEL) GREY; \ } \ \ if (im_writeline(y, out, bu)) \ return -1; \ } \ } /* Do the above for all image types. */ switch (in->BandFmt) { im_for_all_types(im_slice_loop); default: im_error("im_slice", "%s", _("Unknown input format")); return -1; } return 0; } libvips-8.15.1/libvips/deprecated/im_spatres.c000066400000000000000000000073241454007373500213560ustar00rootroot00000000000000/* @(#) Function which changes the spatial resolution of an image according to * @(#) step * @(#) * @(#) int im_spatres(in, out, step) * @(#) IMAGE *in, *out; * @(#) int step; * @(#) Returns either 0 (sucess) or -1 (fail) * @(#) * @(#) Picture can have any number of channels (max 64). * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 08/11/1989. * Modified on: 19/01/1990. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include int im_spatres(IMAGE *in, IMAGE *out, int step) { int x, y; /* horizontal and vertical direction */ int z; /* 0 <= z < channel */ int i, j; int rounding, step2, sum; unsigned char *values; unsigned char *input, *cpinput, *cp2input, *line, *cpline, *pnt, *cpnt; int os; /* Check args */ if (step < 1) { im_error("im_spatres", _("Invalid step %d"), step); return -1; } if ((in->Xsize / step == 0) || (in->Ysize / step == 0)) { im_error("im_spatres", _("Invalid step %d"), step); return -1; } if (im_iocheck(in, out) == -1) return -1; if ((in->Coding != IM_CODING_NONE) || (in->BandFmt != IM_BANDFMT_UCHAR)) { im_error("im_spatres", "%s", _("wrong input")); return -1; } /* Prepare output */ if (im_cp_desc(out, in) == -1) return -1; out->Xsize = in->Xsize - in->Xsize % step; out->Ysize = in->Ysize - in->Ysize % step; if (im_setupout(out) == -1) return -1; /* Malloc buffer for one 'line' of input data */ os = in->Xsize * in->Bands; line = (unsigned char *) calloc((unsigned) os, sizeof(char)); /* Malloc space for values */ values = (unsigned char *) calloc((unsigned) out->Bands, sizeof(char)); if (line == NULL || values == NULL) { im_error("im_spatres", "%s", _("calloc failed")); return -1; } step2 = step * step; rounding = step2 / 2; input = (unsigned char *) in->data; for (y = 0; y < out->Ysize; y += step) { cpinput = input; input += os * step; /* do the x loop out->Xsize / step times */ cpline = line; for (x = 0; x < out->Xsize; x += step) { cp2input = cpinput; cpinput += step * out->Bands; /* ??? */ for (z = 0; z < out->Bands; z++) { pnt = cp2input + z; sum = 0; for (j = 0; j < step; j++) { cpnt = pnt; pnt += os; for (i = 0; i < step; i++) { sum += (int) *cpnt; cpnt += out->Bands; } } *(values + z) = (PEL) ((sum + rounding) / step2); } /* for this x, write step*bands data */ for (j = 0; j < step; j++) for (z = 0; z < out->Bands; z++) *cpline++ = *(values + z); } /* line is now ready. Write now step lines */ for (j = 0; j < step; j++) if (im_writeline(y + j, out, (PEL *) line) == -1) { free((char *) line); free((char *) values); return -1; } } /* end of the for (..y..) loop */ free((char *) line); free((char *) values); return 0; } libvips-8.15.1/libvips/deprecated/im_stretch3.c000066400000000000000000000161611454007373500214330ustar00rootroot00000000000000/* Function to stretch an image by 3%, and displace in x and y. Cubic * interpolation with a seperable mask. Displacements are: * * 0 <= xdisp < 1.0. * 0 <= ydisp < 1.0. * * Each horizontal block of 33 pixels is stretched to 34. * * Written by Ahmed Abbood * August-1994 * * Any unsigned short image. Output image is 3 pixels smaller because of * convolution, but x is larger by 3%: * * out->Xsize = 34*(in->Xsize / 33) + in->Xsize%33 - 3; * out->Ysize = in->Ysize - 3; * * 20/10/95 JC * - was not freeing regions correctly * - tidied up * 29/3/96 JC * - completely rewritten ... now produces correct result, and is 2x * faster * 18/9/97 JC * - added to VIPS library as im_stretch3 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include /* Data for the cubic interpolation function. */ typedef struct { IMAGE *in; double dx, dy; int xoff, yoff; /* Mask we start with for this disp. */ int mask[34][4]; /* Fixed-point masks for each output pixel */ } StretchInfo; /* Per-thread info. */ typedef struct seq_info { StretchInfo *sin; REGION *ir; unsigned short *buf; int lsk; } SeqInfo; static int stretch_stop(void *vseq, void *a, void *b) { SeqInfo *seq = (SeqInfo *) vseq; IM_FREEF(im_region_free, seq->ir); return 0; } static void * stretch_start(IMAGE *out, void *a, void *b) { IMAGE *in = (IMAGE *) a; StretchInfo *sin = (StretchInfo *) b; SeqInfo *seq; if (!(seq = IM_NEW(out, SeqInfo))) return NULL; seq->sin = sin; seq->ir = im_region_create(in); seq->lsk = IM_IMAGE_N_ELEMENTS(out); seq->buf = IM_ARRAY(out, 4 * seq->lsk, unsigned short); if (!seq->buf || !seq->ir) { stretch_stop(seq, NULL, NULL); return NULL; } return (void *) seq; } /* Stretch a line of pels into a line in the buffer. */ static void make_xline(StretchInfo *sin, unsigned short *p, unsigned short *q, int w, int m) { int bands = sin->in->Bands; int tot; int x, b; /* Offsets for subsequent pixels. */ int o1 = 1 * bands; int o2 = 2 * bands; int o3 = 3 * bands; for (x = 0; x < w; x++) { int *mask = &sin->mask[m][0]; unsigned short *p1 = p; /* Loop for this pel. */ for (b = 0; b < bands; b++) { tot = p1[0] * mask[0] + p1[o1] * mask[1] + p1[o2] * mask[2] + p1[o3] * mask[3]; tot = IM_MAX(0, tot); p1++; *q++ = (tot + 16384) >> 15; } /* Move to next mask. */ m++; if (m == 34) /* Back to mask 0, reuse this input pel. */ m = 0; else /* Move to next input pel. */ p += bands; } } /* As above, but do the vertical resample. lsk is how much we add to move down * a line in p, boff is [0,1,2,3] for which buffer line is mask[3]. */ static void make_yline(StretchInfo *sin, int lsk, int boff, unsigned short *p, unsigned short *q, int w, int m) { int bands = sin->in->Bands; int we = w * bands; int *mask = &sin->mask[m][0]; int tot; int x; /* Offsets for subsequent pixels. Down a line each time. */ int o0 = lsk * boff; int o1 = lsk * ((boff + 1) % 4); int o2 = lsk * ((boff + 2) % 4); int o3 = lsk * ((boff + 3) % 4); for (x = 0; x < we; x++) { tot = p[o0] * mask[0] + p[o1] * mask[1] + p[o2] * mask[2] + p[o3] * mask[3]; tot = IM_MAX(0, tot); p++; *q++ = (tot + 16384) >> 15; } } static int stretch_gen(REGION *out_region, void *vseq, void *a, void *b) { SeqInfo *seq = (SeqInfo *) vseq; StretchInfo *sin = (StretchInfo *) b; REGION *ir = seq->ir; Rect *r = &out_region->valid; Rect r1; int x, y; /* What mask do we start with? */ int xstart = (r->left + sin->xoff) % 34; /* What part of input do we need for this output? */ r1.left = r->left - (r->left + sin->xoff) / 34; r1.top = r->top; x = IM_RECT_RIGHT(r); x = x - (x + sin->xoff) / 34 + 3; r1.width = x - r1.left; r1.height = r->height + 3; if (im_prepare(ir, &r1)) return -1; /* Fill the first three lines of the buffer. */ for (y = 0; y < 3; y++) { unsigned short *p = (unsigned short *) IM_REGION_ADDR(ir, r1.left, y + r1.top); unsigned short *q = seq->buf + seq->lsk * y; make_xline(sin, p, q, r->width, xstart); } /* Loop for subsequent lines: stretch a new line of x pels, and * interpolate a line of output from the 3 previous xes plus this new * one. */ for (y = 0; y < r->height; y++) { /* Next line of fresh input pels. */ unsigned short *p = (unsigned short *) IM_REGION_ADDR(ir, r1.left, y + r1.top + 3); /* Next line we fill in the buffer. */ int boff = (y + 3) % 4; unsigned short *q = seq->buf + boff * seq->lsk; /* Line we write in output. */ unsigned short *q1 = (unsigned short *) IM_REGION_ADDR(out_region, r->left, y + r->top); /* Process this new xline. */ make_xline(sin, p, q, r->width, xstart); /* Generate new output line. */ make_yline(sin, seq->lsk, boff, seq->buf, q1, r->width, sin->yoff); } return 0; } int im_stretch3(IMAGE *in, IMAGE *out, double dx, double dy) { StretchInfo *sin; int i; /* Check our args. */ if (in->Coding != IM_CODING_NONE || in->BandFmt != IM_BANDFMT_USHORT) { im_error("im_stretch3", "%s", _("not uncoded unsigned short")); return -1; } if (dx < 0 || dx >= 1.0 || dy < 0 || dy >= 1.0) { im_error("im_stretch3", "%s", _("displacements out of range [0,1)")); return -1; } if (im_piocheck(in, out)) return -1; /* Prepare the output image. */ if (im_cp_desc(out, in)) return -1; out->Xsize = 34 * (in->Xsize / 33) + in->Xsize % 33 - 3; out->Ysize = in->Ysize - 3; if (im_demand_hint(out, IM_FATSTRIP, in, NULL)) return -1; if (!(sin = IM_NEW(out, StretchInfo))) return -1; /* Save parameters. */ sin->in = in; sin->dx = dx; sin->dy = dy; /* Generate masks. */ for (i = 0; i < 34; i++) { double d = (34.0 - i) / 34.0; double y0 = 2.0 * d * d - d - d * d * d; double y1 = 1.0 - 2.0 * d * d + d * d * d; double y2 = d + d * d - d * d * d; double y3 = -d * d + d * d * d; sin->mask[i][0] = IM_RINT(y0 * 32768); sin->mask[i][1] = IM_RINT(y1 * 32768); sin->mask[i][2] = IM_RINT(y2 * 32768); sin->mask[i][3] = IM_RINT(y3 * 32768); } /* Which mask do we start with to apply these offsets? */ sin->xoff = (dx * 33.0) + 0.5; sin->yoff = (dy * 33.0) + 0.5; if (im_generate(out, stretch_start, stretch_gen, stretch_stop, in, sin)) return -1; return 0; } libvips-8.15.1/libvips/deprecated/im_thresh.c000066400000000000000000000064201454007373500211660ustar00rootroot00000000000000/* @(#) Thresholds an image. Works for any non-complex type. * @(#) Output is a binary image with 0 and 255 only * @(#) Input is either memory mapped or in a buffer. * @(#) * @(#) int im_thresh(imin, imout, threshold) * @(#) IMAGE *imin, *imout; * @(#) double threshold; * @(#) * @(#) Returns 0 on success and -1 on error * * Copyright: 1991, N. Dessipris, J Cupitt * * Author: N. Dessipris, J. Cupitt * Written on: 15/03/1991 * Modified on : */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include /* Useful: Call a macro with the name, type pairs for all VIPS functions. */ #define BRIGHT 255 #define DARK 0 #define im_for_all_types(A) \ case IM_BANDFMT_UCHAR: \ A(unsigned char); \ break; \ case IM_BANDFMT_CHAR: \ A(signed char); \ break; \ case IM_BANDFMT_USHORT: \ A(unsigned short); \ break; \ case IM_BANDFMT_SHORT: \ A(signed short); \ break; \ case IM_BANDFMT_UINT: \ A(unsigned int); \ break; \ case IM_BANDFMT_INT: \ A(signed int); \ break; \ case IM_BANDFMT_FLOAT: \ A(float); \ break; \ case IM_BANDFMT_DOUBLE: \ A(double); \ break; /* Replacement for im_thresh */ int im_thresh(IMAGE *in, IMAGE *out, double threshold) { int x, y; PEL *bu; /* Buffer we write to */ int s, epl; /* Size and els per line */ /* Check our args. */ if (im_iocheck(in, out)) return -1; if (in->Coding != IM_CODING_NONE) { im_error("im_thresh", "%s", _("input should be uncoded")); return -1; } /* Set up the output header. */ if (im_cp_desc(out, in)) return -1; out->BandFmt = IM_BANDFMT_UCHAR; if (im_setupout(out)) return -1; /* Make buffer for building o/p in. */ epl = in->Xsize * in->Bands; s = epl * sizeof(PEL); if ((bu = (PEL *) im_malloc(out, (unsigned) s)) == NULL) return -1; /* Define what we do for each band element type. */ #define im_thresh_loop(TYPE) \ { \ TYPE *a = (TYPE *) in->data; \ \ for (y = 0; y < in->Ysize; y++) { \ PEL *b = bu; \ \ for (x = 0; x < epl; x++) { \ double f = (double) *a++; \ if (f >= threshold) \ *b++ = (PEL) BRIGHT; \ else \ *b++ = (PEL) DARK; \ } \ \ if (im_writeline(y, out, bu)) \ return -1; \ } \ } /* Do the above for all image types. */ switch (in->BandFmt) { im_for_all_types(im_thresh_loop); default: im_error("im_thresh", "%s", _("Unknown input format")); return -1; } return 0; } libvips-8.15.1/libvips/deprecated/im_tiff2vips.c000066400000000000000000000116041454007373500216050ustar00rootroot00000000000000/* vips7 compat stub for tiff loading ... see foreign/tiff2vips for the * replacement * * 6/12/11 * - just a stub */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "../foreign/pforeign.h" #ifdef HAVE_TIFF static gboolean im_istifftiled(const char *filename) { VipsSource *source; gboolean result; if (!(source = vips_source_new_from_file(filename))) return FALSE; result = vips__istiff_source(source); VIPS_UNREF(source); return result; } static int im_tiff_read_header(const char *filename, VipsImage *out, int page, int n, gboolean autorotate) { VipsSource *source; if (!(source = vips_source_new_from_file(filename))) return -1; if (vips__tiff_read_header_source(source, out, page, n, autorotate, -1, VIPS_FAIL_ON_ERROR)) { VIPS_UNREF(source); return -1; } VIPS_UNREF(source); return 0; } static int im_tiff_read(const char *filename, VipsImage *out, int page, int n, gboolean autorotate) { VipsSource *source; if (!(source = vips_source_new_from_file(filename))) return -1; if (vips__tiff_read_source(source, out, page, n, autorotate, -1, VIPS_FAIL_ON_ERROR)) { VIPS_UNREF(source); return -1; } VIPS_UNREF(source); return 0; } #endif /*HAVE_TIFF*/ static int tiff2vips(const char *name, IMAGE *out, gboolean header_only) { #ifdef HAVE_TIFF char filename[FILENAME_MAX]; char mode[FILENAME_MAX]; char *p, *q; int page; int seq; im_filename_split(name, filename, mode); page = 0; seq = 0; p = &mode[0]; if ((q = im_getnextoption(&p))) { page = atoi(q); } if ((q = im_getnextoption(&p))) { if (im_isprefix("seq", q)) seq = 1; } /* We need to be compatible with the pre-sequential mode * im_tiff2vips(). This returned a "t" if given a "p" image, since it * used writeline. * * If we're writing the image to a "p", switch it to a "t". And only * for non-tiled (strip) images which we write with writeline. * * Don't do this for header read, since we don't want to force a * malloc if all we are doing is looking at fields. */ if (!header_only && !seq && !im_istifftiled(filename) && out->dtype == VIPS_IMAGE_PARTIAL) { if (vips__image_wio_output(out)) return -1; } if (header_only) { if (im_tiff_read_header(filename, out, page, 1, FALSE)) return -1; } else { if (im_tiff_read(filename, out, page, 1, FALSE)) return -1; } #else vips_error("im_tiff2vips", "%s", _("no TIFF support in your libvips")); return -1; #endif /*HAVE_TIFF*/ return 0; } int im_tiff2vips(const char *name, IMAGE *out) { return tiff2vips(name, out, FALSE); } /* By having a separate header func, we get lazy.c to open via disc/mem. */ static int im_tiff2vips_header(const char *name, IMAGE *out) { return tiff2vips(name, out, TRUE); } static VipsFormatFlags tiff_flags(const char *name) { char filename[FILENAME_MAX]; char mode[FILENAME_MAX]; im_filename_split(name, filename, mode); return (VipsFormatFlags) vips_foreign_flags("tiffload", filename); } static int istiff(const char *name) { char filename[FILENAME_MAX]; char mode[FILENAME_MAX]; im_filename_split(name, filename, mode); return vips_foreign_is_a("tiffload", filename); } static const char *tiff_suffs[] = { ".tif", ".tiff", NULL }; typedef VipsFormat VipsFormatTiff; typedef VipsFormatClass VipsFormatTiffClass; static void vips_format_tiff_class_init(VipsFormatTiffClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsFormatClass *format_class = (VipsFormatClass *) class; object_class->nickname = "tiff"; object_class->description = _("TIFF"); format_class->is_a = istiff; format_class->header = im_tiff2vips_header; format_class->load = im_tiff2vips; format_class->save = im_vips2tiff; format_class->get_flags = tiff_flags; format_class->suffs = tiff_suffs; } static void vips_format_tiff_init(VipsFormatTiff *object) { } G_DEFINE_TYPE(VipsFormatTiff, vips_format_tiff, VIPS_TYPE_FORMAT); libvips-8.15.1/libvips/deprecated/im_video_test.c000066400000000000000000000027361454007373500220440ustar00rootroot00000000000000/* test video grabber ... just generates noise and optional errors */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include /** * im_video_test: * @im: write image here * @brightness: brightness setting * @error: set this to make the function return an error * * Make a test video image. Set @error to trigger an error. * * Returns: 0 on success, -1 on error */ int im_video_test(IMAGE *im, int brightness, int error) { if (error) { im_error("im_video_test", "%s", _("error requested")); return -1; } else return im_gaussnoise(im, 720, 576, brightness, 20); } libvips-8.15.1/libvips/deprecated/im_vips2csv.c000066400000000000000000000026771454007373500214620ustar00rootroot00000000000000/* Write a csv file. * * 16/12/11 * - just a stub */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include int im_vips2csv(IMAGE *in, const char *filename) { char *separator = "\t"; char name[FILENAME_MAX]; char mode[FILENAME_MAX]; char *p, *q, *r; /* Parse mode string. */ im_filename_split(filename, name, mode); p = &mode[0]; while ((q = im_getnextoption(&p))) { if (im_isprefix("sep", q) && (r = im_getsuboption(q))) separator = r; } if (vips_csvsave(in, name, "separator", separator, NULL)) return -1; return 0; } libvips-8.15.1/libvips/deprecated/im_vips2dz.c000066400000000000000000000055441454007373500213000ustar00rootroot00000000000000/* vips7 compat stub for vips_dzsave() * * 11/6/13 * - from im_vips2tiff() */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Turn on IM_REGION_ADDR() range checks, don't delete intermediates. #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include int im_vips2dz(IMAGE *in, const char *filename) { char *p, *q; char name[FILENAME_MAX]; char mode[FILENAME_MAX]; char buf[FILENAME_MAX]; int i; VipsForeignDzLayout layout = VIPS_FOREIGN_DZ_LAYOUT_DZ; char *suffix = ".jpeg"; int overlap = 0; int tile_size = 256; VipsForeignDzDepth depth = VIPS_FOREIGN_DZ_DEPTH_ONEPIXEL; gboolean centre = FALSE; VipsAngle angle = VIPS_ANGLE_D0; /* We can't use im_filename_split() --- it assumes that we have a * filename with an extension before the ':', and filename here is * actually a dirname. * * Just split on the first ':'. */ im_strncpy(name, filename, FILENAME_MAX); if ((p = strchr(name, ':'))) { *p = '\0'; im_strncpy(mode, p + 1, FILENAME_MAX); } else strcpy(mode, ""); strcpy(buf, mode); p = &buf[0]; if ((q = im_getnextoption(&p))) { if ((i = vips_enum_from_nick("im_vips2dz", VIPS_TYPE_FOREIGN_DZ_LAYOUT, q)) < 0) return -1; layout = i; } if ((q = im_getnextoption(&p))) suffix = g_strdup(q); if ((q = im_getnextoption(&p))) overlap = atoi(q); if ((q = im_getnextoption(&p))) tile_size = atoi(q); if ((q = im_getnextoption(&p))) { if ((i = vips_enum_from_nick("im_vips2dz", VIPS_TYPE_FOREIGN_DZ_DEPTH, q)) < 0) return -1; depth = i; } if ((q = im_getnextoption(&p))) { if (im_isprefix("cen", q)) centre = TRUE; } if ((q = im_getnextoption(&p))) { if ((i = vips_enum_from_nick("im_vips2dz", VIPS_TYPE_ANGLE, q)) < 0) return -1; angle = i; } if (vips_dzsave(in, name, "layout", layout, "suffix", suffix, "overlap", overlap, "tile_size", tile_size, "depth", depth, "centre", centre, "angle", angle, NULL)) return -1; return 0; } libvips-8.15.1/libvips/deprecated/im_vips2jpeg.c000066400000000000000000000045541454007373500216100ustar00rootroot00000000000000/* Convert 8-bit VIPS images to/from JPEG. * * 30/11/11 * - now just a stub calling the new system */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include int im_vips2jpeg(IMAGE *in, const char *filename) { int qfac = 75; /* profile has to default to NULL, meaning "no param". If we default * to "none" we will not attach the profile from the metadata. */ char *profile = NULL; char *p, *q; char name[FILENAME_MAX]; char mode[FILENAME_MAX]; char buf[FILENAME_MAX]; /* Parse mode from filename. */ im_filename_split(filename, name, mode); strcpy(buf, mode); p = &buf[0]; if ((q = im_getnextoption(&p))) { if (strcmp(q, "") != 0) qfac = atoi(mode); } if ((q = im_getnextoption(&p))) { if (strcmp(q, "") != 0) profile = q; } if ((q = im_getnextoption(&p))) { im_error("im_vips2jpeg", _("unknown extra options \"%s\""), q); return -1; } return vips_jpegsave(in, name, "Q", qfac, "profile", profile, NULL); } int im_vips2bufjpeg(IMAGE *in, IMAGE *out, int qfac, char **obuf, int *olen) { size_t len; if (vips_jpegsave_buffer(in, (void **) obuf, &len, "Q", qfac, NULL)) return -1; if (out) im_add_callback(out, "close", (im_callback_fn) vips_free, obuf, NULL); if (olen) *olen = len; return 0; } int im_vips2mimejpeg(IMAGE *in, int qfac) { return vips_jpegsave_mime(in, "Q", qfac, NULL); } libvips-8.15.1/libvips/deprecated/im_vips2mask.c000066400000000000000000000130161454007373500216070ustar00rootroot00000000000000/* im_vips2mask * * Author: J.Cupitt * Written on: 6/6/94 * Modified on: * * 16/10/06 * - allow 1xn-band images too * 23/2/07 * - oop, broken for nx1 m-band images * - now casts to double for you * 1/2/10 * - gtkdoc */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include /** * im_vips2mask: * @in: input image * @filename: name for output mask * * Make a mask from an image. All images are cast to %IM_BANDFMT_DOUBLE * before processing. There are two cases for handling bands: * * If the image has a single band, im_vips2mask() will write a mask the same * size as the image. * * If the image has more than one band, it must be one pixel high or wide. In * this case the output mask uses that axis to represent band values. * * See also: im_mask2vips(), im_measure_area(). * * Returns: a #DOUBLEMASK with @outname set as the name, or NULL on error */ DOUBLEMASK * im_vips2mask(IMAGE *in, const char *filename) { int width, height; DOUBLEMASK *out; /* double* only: cast if necessary. */ if (in->BandFmt != IM_BANDFMT_DOUBLE) { IMAGE *t; if (!(t = im_open("im_vips2mask", "p"))) return NULL; if (im_clip2fmt(in, t, IM_BANDFMT_DOUBLE) || !(out = im_vips2mask(t, filename))) { im_close(t); return NULL; } im_close(t); return out; } /* Check the image. */ if (im_incheck(in) || im_check_uncoded("im_vips2mask", in)) return NULL; if (in->Bands == 1) { width = in->Xsize; height = in->Ysize; } else if (in->Xsize == 1) { width = in->Bands; height = in->Ysize; } else if (in->Ysize == 1) { width = in->Xsize; height = in->Bands; } else { im_error("im_vips2mask", "%s", _("one band, nx1, or 1xn images only")); return NULL; } if (!(out = im_create_dmask(filename, width, height))) return NULL; if (in->Bands > 1 && in->Ysize == 1) { double *data = (double *) in->data; int x, y; /* Need to transpose: the image is RGBRGBRGB, we need RRRGGGBBB. */ for (y = 0; y < height; y++) for (x = 0; x < width; x++) out->coeff[x + y * width] = data[x * height + y]; } else memcpy(out->coeff, in->data, width * height * sizeof(double)); out->scale = vips_image_get_scale(in); out->offset = vips_image_get_offset(in); return out; } INTMASK * im_vips2imask(IMAGE *in, const char *filename) { int width, height; INTMASK *out; double *data; int x, y; double double_result; int int_result; /* double* only: cast if necessary. */ if (in->BandFmt != IM_BANDFMT_DOUBLE) { IMAGE *t; if (!(t = im_open("im_vips2imask", "p"))) return NULL; if (im_clip2fmt(in, t, IM_BANDFMT_DOUBLE) || !(out = im_vips2imask(t, filename))) { im_close(t); return NULL; } im_close(t); return out; } /* Check the image. */ if (im_incheck(in) || im_check_uncoded("im_vips2imask", in)) return NULL; if (in->Bands == 1) { width = in->Xsize; height = in->Ysize; } else if (in->Xsize == 1) { width = in->Bands; height = in->Ysize; } else if (in->Ysize == 1) { width = in->Xsize; height = in->Bands; } else { im_error("im_vips2imask", "%s", _("one band, nx1, or 1xn images only")); return NULL; } data = (double *) in->data; if (!(out = im_create_imask(filename, width, height))) return NULL; /* We want to make an intmask which has the same input to output ratio * as the double image. * * Imagine convolving with the double image, what's the ratio of * brightness between input and output? We want the same ratio for the * int version, if we can. * * Imagine an input image where every pixel is 1, what will the output * be? */ double_result = 0; for (y = 0; y < height; y++) for (x = 0; x < width; x++) double_result += data[x + width * y]; double_result /= vips_image_get_scale(in); for (y = 0; y < height; y++) for (x = 0; x < width; x++) if (in->Bands > 1 && in->Ysize == 1) /* Need to transpose: the image is RGBRGBRGB, * we need RRRGGGBBB. */ out->coeff[x + y * width] = VIPS_RINT(data[x * height + y]); else out->coeff[x + y * width] = VIPS_RINT(data[x + y * width]); out->scale = VIPS_RINT(vips_image_get_scale(in)); if (out->scale == 0) out->scale = 1; out->offset = VIPS_RINT(vips_image_get_offset(in)); /* Now convolve a 1 everywhere image with the int version we've made, * what do we get? */ int_result = 0; for (y = 0; y < height; y++) for (x = 0; x < width; x++) int_result += out->coeff[x + width * y]; int_result /= out->scale; /* And adjust the scale to get as close to a match as we can. */ out->scale = VIPS_RINT(out->scale + (int_result - double_result)); if (out->scale == 0) out->scale = 1; return out; } libvips-8.15.1/libvips/deprecated/im_vips2png.c000066400000000000000000000040651454007373500214440ustar00rootroot00000000000000/* Convert 1 to 4-band 8 or 16-bit VIPS images to/from PNG. * * 19/12/11 * - just a stub */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include int im_vips2png(IMAGE *in, const char *filename) { int compression; int interlace; char *p, *q; char name[FILENAME_MAX]; char mode[FILENAME_MAX]; char buf[FILENAME_MAX]; /* Extract write mode from filename and parse. */ im_filename_split(filename, name, mode); strcpy(buf, mode); p = &buf[0]; compression = 6; interlace = 0; if ((q = im_getnextoption(&p))) compression = atoi(q); if ((q = im_getnextoption(&p))) interlace = atoi(q); return vips_pngsave(in, name, "compression", compression, "interlace", interlace, NULL); } int im_vips2bufpng(IMAGE *in, IMAGE *out, int compression, int interlace, char **obuf, size_t *olen) { if (vips_pngsave_buffer(in, (void **) obuf, olen, "compression", compression, "interlace", interlace, NULL)) return -1; if (out) im_add_callback(out, "close", (im_callback_fn) vips_free, obuf, NULL); return 0; } libvips-8.15.1/libvips/deprecated/im_vips2ppm.c000066400000000000000000000031641454007373500214530ustar00rootroot00000000000000/* Write a ppm file. * * 20/12/11 * - just a compat stub */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include int im_vips2ppm(IMAGE *in, const char *filename) { int ascii; char name[FILENAME_MAX]; char mode[FILENAME_MAX]; /* Default to binary output ... much smaller. */ ascii = 0; /* Extract write mode from filename. */ im_filename_split(filename, name, mode); if (strcmp(mode, "") != 0) { if (im_isprefix("binary", mode)) ascii = 0; else if (im_isprefix("ascii", mode)) ascii = 1; else { im_error("im_vips2ppm", "%s", _("bad mode string, " "should be \"binary\" or \"ascii\"")); return -1; } } return vips_ppmsave(in, name, "ascii", ascii, NULL); } libvips-8.15.1/libvips/deprecated/im_vips2tiff.c000066400000000000000000000136031454007373500216060ustar00rootroot00000000000000/* vips7 compat stub for im_vips2tiff.c * * 4/12/11 * - just a stub calling vips_tiffsave() */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Turn on IM_REGION_ADDR() range checks, don't delete intermediates. #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include int im_vips2tiff(IMAGE *in, const char *filename) { char *p, *q, *r; char name[FILENAME_MAX]; char mode[FILENAME_MAX]; char buf[FILENAME_MAX]; VipsForeignTiffCompression compression = VIPS_FOREIGN_TIFF_COMPRESSION_NONE; int Q = 75; VipsForeignTiffPredictor predictor = VIPS_FOREIGN_TIFF_PREDICTOR_NONE; char *profile = NULL; gboolean tile = FALSE; int tile_width = 128; int tile_height = 128; gboolean pyramid = FALSE; gboolean squash = FALSE; VipsForeignTiffResunit resunit = VIPS_FOREIGN_TIFF_RESUNIT_CM; double xres = in->Xres * 10.0; double yres = in->Yres * 10.0; gboolean bigtiff = FALSE; im_filename_split(filename, name, mode); strcpy(buf, mode); p = &buf[0]; if ((q = im_getnextoption(&p))) { if (im_isprefix("none", q)) compression = VIPS_FOREIGN_TIFF_COMPRESSION_NONE; else if (im_isprefix("packbits", q)) compression = VIPS_FOREIGN_TIFF_COMPRESSION_PACKBITS; else if (im_isprefix("ccittfax4", q)) compression = VIPS_FOREIGN_TIFF_COMPRESSION_CCITTFAX4; else if (im_isprefix("lzw", q)) { compression = VIPS_FOREIGN_TIFF_COMPRESSION_LZW; if ((r = im_getsuboption(q))) { int i; if (sscanf(r, "%d", &i) != 1) { im_error("im_vips2tiff", "%s", _("bad predictor " "parameter")); return -1; } predictor = i; } } else if (im_isprefix("deflate", q)) { compression = VIPS_FOREIGN_TIFF_COMPRESSION_DEFLATE; if ((r = im_getsuboption(q))) { int i; if (sscanf(r, "%d", &i) != 1) { im_error("im_vips2tiff", "%s", _("bad predictor " "parameter")); return -1; } predictor = i; } } else if (im_isprefix("jpeg", q)) { compression = VIPS_FOREIGN_TIFF_COMPRESSION_JPEG; if ((r = im_getsuboption(q))) if (sscanf(r, "%d", &Q) != 1) { im_error("im_vips2tiff", "%s", _("bad JPEG quality " "parameter")); return -1; } } else { im_error("im_vips2tiff", _("unknown compression mode " "\"%s\"\nshould be one of \"none\", " "\"packbits\", \"ccittfax4\", \"lzw\", " "\"deflate\" or \"jpeg\""), q); return -1; } } if ((q = im_getnextoption(&p))) { if (im_isprefix("tile", q)) { tile = TRUE; if ((r = im_getsuboption(q))) { if (sscanf(r, "%dx%d", &tile_width, &tile_height) != 2) { im_error("im_vips2tiff", "%s", _("bad tile sizes")); return -1; } } } else if (im_isprefix("strip", q)) tile = FALSE; else { im_error("im_vips2tiff", _("unknown layout mode " "\"%s\"\nshould be one of \"tile\" or " "\"strip\""), q); return -1; } } if ((q = im_getnextoption(&p))) { if (im_isprefix("pyramid", q)) pyramid = TRUE; else if (im_isprefix("flat", q)) pyramid = FALSE; else { im_error("im_vips2tiff", _("unknown multi-res mode " "\"%s\"\nshould be one of \"flat\" or " "\"pyramid\""), q); return -1; } } if ((q = im_getnextoption(&p))) { if (im_isprefix("onebit", q)) squash = TRUE; else if (im_isprefix("manybit", q)) squash = FALSE; else { im_error("im_vips2tiff", _("unknown format " "\"%s\"\nshould be one of \"onebit\" or " "\"manybit\""), q); return -1; } } if ((q = im_getnextoption(&p))) { if (im_isprefix("res_cm", q)) resunit = VIPS_FOREIGN_TIFF_RESUNIT_CM; else if (im_isprefix("res_inch", q)) resunit = VIPS_FOREIGN_TIFF_RESUNIT_INCH; else { im_error("im_vips2tiff", _("unknown resolution unit " "\"%s\"\nshould be one of \"res_cm\" or " "\"res_inch\""), q); return -1; } if ((r = im_getsuboption(q))) { if (sscanf(r, "%lfx%lf", &xres, &yres) != 2) { if (sscanf(r, "%lf", &xres) != 1) { im_error("im_vips2tiff", "%s", _("bad resolution values")); return -1; } yres = xres; } /* vips resolutions are always in pixels/mm. If the * user specifies ",res_inch:72x72" then they are * using pixels/inch instead and we must convert. */ if (resunit == VIPS_FOREIGN_TIFF_RESUNIT_INCH) { xres /= 2.54; yres /= 2.54; } } } if ((q = im_getnextoption(&p)) && strcmp(q, "") != 0) profile = im_strdup(NULL, q); if ((q = im_getnextoption(&p)) && strcmp(q, "8") == 0) bigtiff = TRUE; if ((q = im_getnextoption(&p))) { im_error("im_vips2tiff", _("unknown extra options \"%s\""), q); return -1; } if (vips_tiffsave(in, name, "compression", compression, "Q", Q, "predictor", predictor, "profile", profile, "tile", tile, "tile_width", tile_width, "tile_height", tile_height, "pyramid", pyramid, "squash", squash, "resunit", resunit, "xres", xres, "yres", yres, "bigtiff", bigtiff, NULL)) return -1; return 0; } libvips-8.15.1/libvips/deprecated/im_vips2webp.c000066400000000000000000000030771454007373500216170ustar00rootroot00000000000000/* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include int im_vips2webp(IMAGE *in, const char *filename) { int compression; int lossless; char *p, *q; char name[FILENAME_MAX]; char mode[FILENAME_MAX]; char buf[FILENAME_MAX]; im_filename_split(filename, name, mode); strcpy(buf, mode); p = &buf[0]; compression = 6; lossless = 0; if ((q = im_getnextoption(&p))) compression = atoi(q); if ((q = im_getnextoption(&p))) lossless = atoi(q); return vips_webpsave(in, name, "Q", compression, "lossless", lossless, NULL); } libvips-8.15.1/libvips/deprecated/im_webp2vips.c000066400000000000000000000057011454007373500216130ustar00rootroot00000000000000/* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "../foreign/pforeign.h" static int webp2vips(const char *name, IMAGE *out, gboolean header_only) { char filename[FILENAME_MAX]; char mode[FILENAME_MAX]; im_filename_split(name, filename, mode); #ifdef HAVE_LIBWEBP { VipsSource *source; int result; if (!(source = vips_source_new_from_file(filename))) return -1; if (header_only) result = vips__webp_read_header_source(source, out, 0, 1, 1); else result = vips__webp_read_source(source, out, 0, 1, 1); VIPS_UNREF(source); if (result) return result; } #else vips_error("im_webp2vips", "%s", _("no webp support in your libvips")); return -1; #endif /*HAVE_LIBWEBP*/ return 0; } static gboolean vips__iswebp(const char *filename) { gboolean result; #ifdef HAVE_LIBWEBP VipsSource *source; if (!(source = vips_source_new_from_file(filename))) return FALSE; result = vips__iswebp_source(source); VIPS_UNREF(source); #else /*!HAVE_LIBWEBP*/ result = -1; #endif /*HAVE_LIBWEBP*/ return result; } int im_webp2vips(const char *name, IMAGE *out) { return webp2vips(name, out, FALSE); } #ifdef HAVE_LIBWEBP static int im_webp2vips_header(const char *name, IMAGE *out) { return webp2vips(name, out, TRUE); } static const char *webp_suffs[] = { ".webp", NULL }; typedef VipsFormat VipsFormatWebp; typedef VipsFormatClass VipsFormatWebpClass; static void vips_format_webp_class_init(VipsFormatWebpClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsFormatClass *format_class = (VipsFormatClass *) class; object_class->nickname = "webp"; object_class->description = _("webp"); format_class->is_a = vips__iswebp; format_class->header = im_webp2vips_header; format_class->load = im_webp2vips; format_class->save = im_vips2webp; format_class->suffs = webp_suffs; } static void vips_format_webp_init(VipsFormatWebp *object) { } G_DEFINE_TYPE(VipsFormatWebp, vips_format_webp, VIPS_TYPE_FORMAT); #endif /*HAVE_LIBWEBP*/ libvips-8.15.1/libvips/deprecated/im_zerox.c000066400000000000000000000103501454007373500210350ustar00rootroot00000000000000/* detect zero-crossings * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 12/02/1990 * Modified on : * 1/2/95 JC * - rewritten for PIO * - some bugs removed * 11/5/06 * - small clean ups * 11/11/10 * - small cleanups * - gtkdoc */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #define LOOP(TYPE) \ { \ for (i = 0; i < ne; i++) { \ TYPE p1 = ((TYPE *) p)[i]; \ TYPE p2 = ((TYPE *) p)[i + ba]; \ \ if (flag == 1 && p1 > 0 && p2 <= 0) \ q[i] = 255; \ else if (flag == -1 && p1 < 0 && p2 >= 0) \ q[i] = 255; \ else \ q[i] = 0; \ } \ } /* Zerox generate function. */ static int zerox_gen(REGION *out_region, void *seq, void *a, void *b) { REGION *ir = (REGION *) seq; IMAGE *in = (IMAGE *) a; int flag = GPOINTER_TO_INT(b); Rect irect; Rect *r = &out_region->valid; /* Range of pixels we loop over. */ int le = r->left; int to = r->top; int bo = IM_RECT_BOTTOM(r); int ba = in->Bands; int ne = ba * r->width; int i, y; /* We need to be able to see one pixel to the right. */ irect.top = r->top; irect.left = r->left; irect.width = r->width + 1; irect.height = r->height; if (im_prepare(ir, &irect)) return -1; for (y = to; y < bo; y++) { VipsPel *p = IM_REGION_ADDR(ir, le, y); VipsPel *q = IM_REGION_ADDR(out_region, le, y); switch (in->BandFmt) { case IM_BANDFMT_CHAR: LOOP(signed char); break; case IM_BANDFMT_SHORT: LOOP(signed short); break; case IM_BANDFMT_INT: LOOP(signed int); break; case IM_BANDFMT_FLOAT: LOOP(float); break; case IM_BANDFMT_DOUBLE: LOOP(double); break; default: g_assert(0); } } return 0; } /** * im_zerox: * @in: input image * @out: output image * @sign: detect positive or negative zero crossings * * im_zerox() detects the positive or negative zero crossings @in, * depending on @sign. If @sign is -1, negative zero crossings are returned, * if @sign is 1, positive zero crossings are returned. * * The output image is byte with zero crossing set to 255 and all other values * set to zero. Input can have any number of channels, and be any non-complex * type. * * See also: im_conv(), im_rot90. * * Returns: 0 on success, -1 on error */ int im_zerox(IMAGE *in, IMAGE *out, int sign) { IMAGE *t1; if (sign != -1 && sign != 1) { im_error("im_zerox", "%s", _("flag not -1 or 1")); return -1; } if (in->Xsize < 2) { im_error("im_zerox", "%s", _("image too narrow")); return -1; } if (!(t1 = im_open_local(out, "im_zerox", "p")) || im_piocheck(in, t1) || im_check_uncoded("im_zerox", in) || im_check_noncomplex("im_zerox", in)) return -1; if (vips_bandfmt_isuint(in->BandFmt)) /* Unsigned type, therefore there will be no zero-crossings. */ return im_black(out, in->Xsize, in->Ysize, in->Bands); /* Force output to be BYTE. Output is narrower than input by 1 pixel. */ if (im_cp_desc(t1, in)) return -1; t1->BandFmt = IM_BANDFMT_UCHAR; t1->Xsize -= 1; /* Set hints - THINSTRIP is ok with us. */ if (im_demand_hint(t1, IM_THINSTRIP, NULL)) return -1; /* Generate image. */ if (im_generate(t1, im_start_one, zerox_gen, im_stop_one, in, GINT_TO_POINTER(sign))) return -1; /* Now embed it in a larger image. */ if (im_embed(t1, out, 0, 0, 0, in->Xsize, in->Ysize)) return -1; return 0; } libvips-8.15.1/libvips/deprecated/inplace_dispatch.c000066400000000000000000000330261454007373500225000ustar00rootroot00000000000000/* Function dispatch tables for inplace. * * J. Cupitt, 8/2/95 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include /* Calculate a pixel for an image from a vec of double. Valid while im is * valid. */ VipsPel * im__vector_to_ink(const char *domain, IMAGE *im, int n, double *vec) { IMAGE *t[3]; double *zeros; int i; if (im_check_vector(domain, n, im)) return NULL; if (im_open_local_array(im, t, 3, domain, "t") || !(zeros = IM_ARRAY(im, n, double))) return NULL; for (i = 0; i < n; i++) zeros[i] = 0.0; if (im_black(t[0], 1, 1, im->Bands) || im_lintra_vec(n, zeros, t[0], vec, t[1]) || im_clip2fmt(t[1], t[2], im->BandFmt)) return NULL; return t[2]->data; } double * im__ink_to_vector(const char *domain, IMAGE *im, VipsPel *ink) { double *vec; int i; if (im_check_uncoded("im__ink_to_vector", im) || im_check_noncomplex("im__ink_to_vector", im)) return NULL; if (!(vec = IM_ARRAY(NULL, im->Bands, double))) return NULL; #define READ(TYPE) \ vec[i] = ((TYPE *) ink)[i]; for (i = 0; i < im->Bands; i++) switch (im->BandFmt) { case IM_BANDFMT_UCHAR: READ(unsigned char); break; case IM_BANDFMT_CHAR: READ(signed char); break; case IM_BANDFMT_USHORT: READ(unsigned short); break; case IM_BANDFMT_SHORT: READ(signed short); break; case IM_BANDFMT_UINT: READ(unsigned int); break; case IM_BANDFMT_INT: READ(signed int); break; case IM_BANDFMT_FLOAT: READ(float); break; case IM_BANDFMT_DOUBLE: READ(double); break; default: g_assert(0); } return vec; } /* Args for im_draw_image. */ static im_arg_desc draw_image_args[] = { IM_RW_IMAGE("image"), IM_INPUT_IMAGE("sub"), IM_INPUT_INT("x"), IM_INPUT_INT("y") }; /* Call im_draw_image via arg vector. */ static int draw_image_vec(im_object *argv) { int x = *((int *) argv[2]); int y = *((int *) argv[3]); return im_draw_image(argv[0], argv[1], x, y); } /* Description of im_draw_image. */ static im_function draw_image_desc = { "im_draw_image", /* Name */ "draw image sub inside image main at position (x,y)", 0, /* Flags */ draw_image_vec, /* Dispatch function */ IM_NUMBER(draw_image_args), /* Size of arg list */ draw_image_args /* Arg list */ }; /* Args for im_lineset. */ static im_arg_desc lineset_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_IMAGE("mask"), IM_INPUT_IMAGE("ink"), IM_INPUT_INTVEC("x1"), IM_INPUT_INTVEC("y1"), IM_INPUT_INTVEC("x2"), IM_INPUT_INTVEC("y2") }; /* Call im_lineset via arg vector. */ static int lineset_vec(im_object *argv) { im_intvec_object *x1v = (im_intvec_object *) argv[4]; im_intvec_object *y1v = (im_intvec_object *) argv[5]; im_intvec_object *x2v = (im_intvec_object *) argv[6]; im_intvec_object *y2v = (im_intvec_object *) argv[7]; if (x1v->n != y1v->n || x1v->n != x2v->n || x1v->n != y2v->n) { im_error("im_lineset", "%s", _("vectors not same length")); return -1; } return im_lineset(argv[0], argv[1], argv[2], argv[3], x1v->n, x1v->vec, y1v->vec, x2v->vec, y2v->vec); } /* Description of im_lineset. */ static im_function lineset_desc = { "im_lineset", /* Name */ "draw line between points (x1,y1) and (x2,y2)", 0, /* Flags */ lineset_vec, /* Dispatch function */ IM_NUMBER(lineset_args), /* Size of arg list */ lineset_args /* Arg list */ }; /* Args for im_draw_mask. */ static im_arg_desc draw_mask_args[] = { IM_RW_IMAGE("image"), IM_INPUT_IMAGE("mask"), IM_INPUT_INT("x"), IM_INPUT_INT("y"), IM_INPUT_DOUBLEVEC("ink") }; /* Call im_draw_mask via arg vector. */ static int draw_mask_vec(im_object *argv) { IMAGE *image = argv[0]; IMAGE *mask = argv[1]; int x = *((int *) argv[2]); int y = *((int *) argv[3]); im_doublevec_object *dv = (im_doublevec_object *) argv[4]; VipsPel *ink; if (!(ink = im__vector_to_ink("im_draw_mask", image, dv->n, dv->vec))) return -1; return im_draw_mask(image, mask, x, y, ink); } /* Description of im_draw_mask. */ static im_function draw_mask_desc = { "im_draw_mask", /* Name */ "draw mask sub inside image main at position (x,y)", 0, /* Flags */ draw_mask_vec, /* Dispatch function */ IM_NUMBER(draw_mask_args), /* Size of arg list */ draw_mask_args /* Arg list */ }; /* Args for im_draw_flood_blob(). */ static im_arg_desc draw_flood_blob_args[] = { IM_RW_IMAGE("image"), IM_INPUT_INT("x"), IM_INPUT_INT("y"), IM_INPUT_DOUBLEVEC("ink") }; /* Call im_draw_flood_blob() via arg vector. */ static int draw_flood_blob_vec(im_object *argv) { IMAGE *image = argv[0]; int x = *((int *) argv[1]); int y = *((int *) argv[2]); im_doublevec_object *dv = (im_doublevec_object *) argv[3]; VipsPel *ink; if (!(ink = im__vector_to_ink("im_draw_flood_blob", image, dv->n, dv->vec))) return -1; return im_draw_flood_blob(image, x, y, ink, NULL); } /* Description of im_draw_flood_blob(). */ static im_function draw_flood_blob_desc = { "im_draw_flood_blob", /* Name */ "flood with ink from x, y while pixel == start", 0, /* Flags */ draw_flood_blob_vec, /* Dispatch function */ IM_NUMBER(draw_flood_blob_args), /* Size of arg list */ draw_flood_blob_args /* Arg list */ }; /* Args for im_draw_flood(). */ static im_arg_desc draw_flood_args[] = { IM_RW_IMAGE("image"), IM_INPUT_INT("x"), IM_INPUT_INT("y"), IM_INPUT_DOUBLEVEC("ink") }; /* Call im_draw_flood() via arg vector. */ static int draw_flood_vec(im_object *argv) { IMAGE *image = argv[0]; int x = *((int *) argv[1]); int y = *((int *) argv[2]); im_doublevec_object *dv = (im_doublevec_object *) argv[3]; VipsPel *ink; if (!(ink = im__vector_to_ink("im_draw_flood", image, dv->n, dv->vec))) return -1; return im_draw_flood(image, x, y, ink, NULL); } /* Description of im_draw_flood(). */ static im_function draw_flood_desc = { "im_draw_flood", /* Name */ "flood with ink from x, y while pixel != ink", 0, /* Flags */ draw_flood_vec, /* Dispatch function */ IM_NUMBER(draw_flood_args), /* Size of arg list */ draw_flood_args /* Arg list */ }; /* Args for im_draw_flood_other(). */ static im_arg_desc draw_flood_other_args[] = { IM_RW_IMAGE("image"), IM_INPUT_IMAGE("test"), IM_INPUT_INT("x"), IM_INPUT_INT("y"), IM_INPUT_INT("serial") }; /* Call im_draw_flood_other() via arg vector. */ static int draw_flood_other_vec(im_object *argv) { IMAGE *image = argv[0]; IMAGE *test = argv[1]; int x = *((int *) argv[2]); int y = *((int *) argv[3]); int serial = *((int *) argv[4]); return im_draw_flood_other(image, test, x, y, serial, NULL); } /* Description of im_draw_flood_other(). */ static im_function draw_flood_other_desc = { "im_draw_flood_other", /* Name */ "flood image with serial from x, y while pixel == start", 0, /* Flags */ draw_flood_other_vec, /* Dispatch function */ IM_NUMBER(draw_flood_other_args), /* Size of arg list */ draw_flood_other_args /* Arg list */ }; /* Args for im_draw_point. */ static im_arg_desc draw_point_args[] = { IM_RW_IMAGE("image"), IM_INPUT_INT("x"), IM_INPUT_INT("y"), IM_INPUT_DOUBLEVEC("ink") }; /* Call im_draw_point via arg vector. */ static int draw_point_vec(im_object *argv) { IMAGE *image = argv[0]; int x = *((int *) argv[1]); int y = *((int *) argv[2]); im_doublevec_object *dv = (im_doublevec_object *) argv[3]; VipsPel *ink; if (!(ink = im__vector_to_ink("im_draw_point", image, dv->n, dv->vec))) return -1; return im_draw_point(image, x, y, ink); } /* Description of im_draw_point. */ static im_function draw_point_desc = { "im_draw_point", /* Name */ "draw point on image", 0, /* Flags */ draw_point_vec, /* Dispatch function */ IM_NUMBER(draw_point_args), /* Size of arg list */ draw_point_args /* Arg list */ }; /* Args for im_read_point. */ static im_arg_desc read_point_args[] = { IM_INPUT_IMAGE("image"), IM_INPUT_INT("x"), IM_INPUT_INT("y"), IM_OUTPUT_DOUBLEVEC("ink") }; /* Call im_read_point via arg vector. */ static int read_point_vec(im_object *argv) { IMAGE *image = argv[0]; int x = *((int *) argv[1]); int y = *((int *) argv[2]); im_doublevec_object *dv = (im_doublevec_object *) argv[3]; VipsPel *ink; if (!(ink = IM_ARRAY(image, IM_IMAGE_SIZEOF_PEL(image), VipsPel)) || im_read_point(image, x, y, ink) || !(dv->vec = im__ink_to_vector("im_read_point", image, ink))) return -1; dv->n = image->Bands; return 0; } /* Description of im_read_point. */ static im_function read_point_desc = { "im_read_point", /* Name */ "read point from image", 0, /* Flags */ read_point_vec, /* Dispatch function */ IM_NUMBER(read_point_args), /* Size of arg list */ read_point_args /* Arg list */ }; /* Args for im_draw_line. */ static im_arg_desc draw_line_args[] = { IM_RW_IMAGE("image"), IM_INPUT_INT("x1"), IM_INPUT_INT("y1"), IM_INPUT_INT("x2"), IM_INPUT_INT("y2"), IM_INPUT_DOUBLEVEC("ink") }; /* Call im_draw_line via arg vector. */ static int draw_line_vec(im_object *argv) { IMAGE *image = argv[0]; int x1 = *((int *) argv[1]); int y1 = *((int *) argv[2]); int x2 = *((int *) argv[3]); int y2 = *((int *) argv[4]); im_doublevec_object *dv = (im_doublevec_object *) argv[5]; VipsPel *ink; if (!(ink = im__vector_to_ink("im_draw_line", image, dv->n, dv->vec))) return -1; return im_draw_line(image, x1, y1, x2, y2, ink); } /* Description of im_draw_line. */ static im_function draw_line_desc = { "im_draw_line", /* Name */ "draw line on image", 0, /* Flags */ draw_line_vec, /* Dispatch function */ IM_NUMBER(draw_line_args), /* Size of arg list */ draw_line_args /* Arg list */ }; /* Args for im_draw_smudge. */ static im_arg_desc draw_smudge_args[] = { IM_RW_IMAGE("image"), IM_INPUT_INT("left"), IM_INPUT_INT("top"), IM_INPUT_INT("width"), IM_INPUT_INT("height") }; /* Call im_draw_smudge via arg vector. */ static int draw_smudge_vec(im_object *argv) { IMAGE *image = argv[0]; int left = *((int *) argv[1]); int top = *((int *) argv[2]); int width = *((int *) argv[3]); int height = *((int *) argv[4]); return im_draw_smudge(image, left, top, width, height); } /* Description of im_draw_smudge. */ static im_function draw_smudge_desc = { "im_draw_smudge", /* Name */ "smudge part of an image", 0, /* Flags */ draw_smudge_vec, /* Dispatch function */ IM_NUMBER(draw_smudge_args), /* Size of arg list */ draw_smudge_args /* Arg list */ }; /* Args for im_draw_rect. */ static im_arg_desc draw_rect_args[] = { IM_RW_IMAGE("image"), IM_INPUT_INT("left"), IM_INPUT_INT("top"), IM_INPUT_INT("width"), IM_INPUT_INT("height"), IM_INPUT_INT("fill"), IM_INPUT_DOUBLEVEC("ink") }; /* Call im_draw_rect via arg vector. */ static int draw_rect_vec(im_object *argv) { IMAGE *image = argv[0]; int left = *((int *) argv[1]); int top = *((int *) argv[2]); int width = *((int *) argv[3]); int height = *((int *) argv[4]); int fill = *((int *) argv[5]); im_doublevec_object *dv = (im_doublevec_object *) argv[6]; VipsPel *ink; if (!(ink = im__vector_to_ink("im_draw_rect", image, dv->n, dv->vec))) return -1; return im_draw_rect(image, left, top, width, height, fill, ink); } /* Description of im_draw_rect. */ static im_function draw_rect_desc = { "im_draw_rect", /* Name */ "draw rect on image", 0, /* Flags */ draw_rect_vec, /* Dispatch function */ IM_NUMBER(draw_rect_args), /* Size of arg list */ draw_rect_args /* Arg list */ }; /* Args for im_draw_circle. */ static im_arg_desc draw_circle_args[] = { IM_RW_IMAGE("image"), IM_INPUT_INT("cx"), IM_INPUT_INT("cy"), IM_INPUT_INT("radius"), IM_INPUT_INT("fill"), IM_INPUT_DOUBLEVEC("ink") }; /* Call im_draw_circle via arg vector. */ static int draw_circle_vec(im_object *argv) { IMAGE *image = argv[0]; int cx = *((int *) argv[1]); int cy = *((int *) argv[2]); int radius = *((int *) argv[3]); int fill = *((int *) argv[4]); im_doublevec_object *dv = (im_doublevec_object *) argv[5]; VipsPel *ink; if (!(ink = im__vector_to_ink("im_draw_circle", image, dv->n, dv->vec))) return -1; return im_draw_circle(image, cx, cy, radius, fill, ink); } /* Description of im_draw_circle. */ static im_function draw_circle_desc = { "im_draw_circle", /* Name */ "draw circle on image", 0, /* Flags */ draw_circle_vec, /* Dispatch function */ IM_NUMBER(draw_circle_args), /* Size of arg list */ draw_circle_args /* Arg list */ }; /* Package up all these functions. */ static im_function *inplace_list[] = { &draw_circle_desc, &draw_rect_desc, &draw_line_desc, &draw_point_desc, &read_point_desc, &draw_smudge_desc, &draw_flood_desc, &draw_flood_blob_desc, &draw_flood_other_desc, &draw_image_desc, &draw_mask_desc, &lineset_desc }; /* Package of functions. */ im_package im__inplace = { "inplace", IM_NUMBER(inplace_list), inplace_list }; libvips-8.15.1/libvips/deprecated/lazy.c000066400000000000000000000166321454007373500201710ustar00rootroot00000000000000/* lazy open/save ... compat funcs for old im_open() behaviour * * 30/11/11 * - cut from old image.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include static gboolean vips_format_is_vips(VipsFormatClass *format) { return strcmp(VIPS_OBJECT_CLASS(format)->nickname, "vips") == 0; } /* Lazy open. */ /* What we track during a delayed open. */ typedef struct { VipsImage *image; VipsFormatClass *format; /* Read in pixels with this */ char *filename; /* Get pixels from here */ gboolean sequential; /* Sequential read requested */ VipsImage *real; /* The real decompressed image */ } Lazy; static void lazy_free_cb(VipsImage *image, Lazy *lazy) { VIPS_DEBUG_MSG("lazy_free: %p \"%s\"\n", lazy, lazy->filename); g_free(lazy->filename); VIPS_UNREF(lazy->real); g_free(lazy); } static Lazy * lazy_new(VipsImage *image, VipsFormatClass *format, const char *filename, gboolean sequential) { Lazy *lazy; lazy = g_new(Lazy, 1); VIPS_DEBUG_MSG("lazy_new: %p \"%s\"\n", lazy, filename); lazy->image = image; lazy->format = format; lazy->filename = g_strdup(filename); lazy->sequential = sequential; lazy->real = NULL; g_signal_connect(image, "close", G_CALLBACK(lazy_free_cb), lazy); return lazy; } static size_t disc_threshold(void) { static gboolean done = FALSE; static size_t threshold; if (!done) { const char *env; done = TRUE; /* 100mb default. */ threshold = 100 * 1024 * 1024; if ((env = g_getenv("IM_DISC_THRESHOLD"))) threshold = vips__parse_size(env); if (vips__disc_threshold) threshold = vips__parse_size(vips__disc_threshold); VIPS_DEBUG_MSG("disc_threshold: %zd bytes\n", threshold); } return threshold; } /* Make the real underlying image: either a direct disc file, or a temp file * somewhere. */ static VipsImage * lazy_real_image(Lazy *lazy) { VipsImage *real; /* We open via disc if: * - 'sequential' is not set * - disc_threshold() has not been set to zero * - the format does not support lazy read * - the uncompressed image will be larger than disc_threshold() */ real = NULL; if (!lazy->sequential && disc_threshold() && !(vips_format_get_flags(lazy->format, lazy->filename) & VIPS_FORMAT_PARTIAL) && VIPS_IMAGE_SIZEOF_IMAGE(lazy->image) > disc_threshold()) if (!(real = vips_image_new_temp_file("%s.v"))) return NULL; /* Otherwise, fall back to a "p". */ if (!real && !(real = vips_image_new())) return NULL; return real; } /* Our start function ... do the lazy open, if necessary, and return a region * on the new image. */ static void * open_lazy_start(VipsImage *out, void *a, void *dummy) { Lazy *lazy = (Lazy *) a; if (!lazy->real) { if (!(lazy->real = lazy_real_image(lazy)) || lazy->format->load(lazy->filename, lazy->real) || vips_image_pio_input(lazy->real)) { VIPS_UNREF(lazy->real); return NULL; } } return vips_region_new(lazy->real); } /* Just copy. */ static int open_lazy_generate(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsRect *r = &out_region->valid; /* Ask for input we need. */ if (vips_region_prepare(ir, r)) return -1; /* Attach output region to that. */ if (vips_region_region(out_region, ir, r, r->left, r->top)) return -1; return 0; } /* Lazy open ... init the header with the first OpenLazyFn, delay actually * decoding pixels with the second OpenLazyFn until the first generate(). */ static int vips_image_open_lazy(VipsImage *image, VipsFormatClass *format, const char *filename, gboolean sequential) { Lazy *lazy; lazy = lazy_new(image, format, filename, sequential); /* Is there a ->header() function? We need to do a lazy load. */ if (format->header) { /* Read header fields to init the return image. */ if (format->header(filename, image)) return -1; /* Then 'start' creates the real image and 'gen' paints 'image' * with pixels from the real image on demand. */ if (vips_image_pipelinev(image, image->dhint, NULL) || vips_image_generate(image, open_lazy_start, open_lazy_generate, vips_stop_one, lazy, NULL)) return -1; } else if (format->load) { if (format->load(filename, image)) return -1; } else g_assert(0); return 0; } /* Lazy save. */ /* If we write to (eg.) TIFF, actually do the write * to a "p" and on "written" do im_vips2tiff() or whatever. Track save * parameters here. */ typedef int (*VipsSaveFn)(VipsImage *image, const char *filename); typedef struct { VipsSaveFn save_fn; /* Save function */ char *filename; /* Save args */ } SaveBlock; /* From "written" callback: invoke a delayed save. */ static void vips_image_save_cb(VipsImage *image, int *result, SaveBlock *sb) { if (sb->save_fn(image, sb->filename)) *result = -1; g_free(sb->filename); g_free(sb); } static void vips_attach_save(VipsImage *image, VipsSaveFn save_fn, const char *filename) { SaveBlock *sb; sb = g_new(SaveBlock, 1); sb->save_fn = save_fn; sb->filename = g_strdup(filename); g_signal_connect(image, "written", G_CALLBACK(vips_image_save_cb), sb); } IMAGE * vips__deprecated_open_read(const char *filename, gboolean sequential) { VipsFormatClass *format; if (!(format = vips_format_for_file(filename))) return NULL; if (vips_format_is_vips(format)) { /* For vips format, we can just the main vips path. */ return vips_image_new_mode(filename, "rd"); } else { /* For non-vips formats we must go via the old VipsFormat * system to make sure we support the "filename:options" * syntax. */ IMAGE *image; image = vips_image_new(); if (vips_image_open_lazy(image, format, filename, sequential)) { g_object_unref(image); return NULL; } /* Yuk. Can't g_object_set() filename since it's after * construct. Just zap the new filename in. */ VIPS_SETSTR(image->filename, filename); return image; } } IMAGE * vips__deprecated_open_write(const char *filename) { VipsFormatClass *format; if (!(format = vips_format_for_name(filename))) return NULL; if (vips_format_is_vips(format)) /* For vips format, we can just the main vips path. */ return vips_image_new_mode(filename, "w"); else { /* For non-vips formats we must go via the old VipsFormat * system to make sure we support the "filename:options" * syntax. */ IMAGE *image; if (!(image = vips_image_new())) return NULL; vips_attach_save(image, format->save, filename); return image; } } libvips-8.15.1/libvips/deprecated/mask_dispatch.c000066400000000000000000000317611454007373500220240ustar00rootroot00000000000000/* VIPS function dispatch tables for matrices. * * J. Cupitt, 14/2/95. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include /* One matrix in, one out. */ static im_arg_desc one_in_one_out[] = { IM_INPUT_DMASK("in"), IM_OUTPUT_DMASK("out") }; /* Two matrices in, one out. */ static im_arg_desc two_in_one_out[] = { IM_INPUT_DMASK("in1"), IM_INPUT_DMASK("in2"), IM_OUTPUT_DMASK("out") }; /* Call im_matinv via arg vector. */ static int matinv_vec(im_object *argv) { im_mask_object *in = argv[0]; im_mask_object *out = argv[1]; if (!(out->mask = im_matinv(in->mask, out->name))) return -1; return 0; } /* Description of im_matinv. */ static im_function matinv_desc = { "im_matinv", /* Name */ "invert matrix", 0, /* Flags */ matinv_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_mattrn via arg vector. */ static int mattrn_vec(im_object *argv) { im_mask_object *in = argv[0]; im_mask_object *out = argv[1]; if (!(out->mask = im_mattrn(in->mask, out->name))) return -1; return 0; } /* Description of im_mattrn. */ static im_function mattrn_desc = { "im_mattrn", /* Name */ "transpose matrix", 0, /* Flags */ mattrn_vec, /* Dispatch function */ IM_NUMBER(one_in_one_out), /* Size of arg list */ one_in_one_out /* Arg list */ }; /* Call im_matcat via arg vector. */ static int matcat_vec(im_object *argv) { im_mask_object *in1 = argv[0]; im_mask_object *in2 = argv[1]; im_mask_object *out = argv[2]; if (!(out->mask = im_matcat(in1->mask, in2->mask, out->name))) return -1; return 0; } /* Description of im_matcat. */ static im_function matcat_desc = { "im_matcat", /* Name */ "append matrix in2 to the end of matrix in1", 0, /* Flags */ matcat_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Call im_matmul via arg vector. */ static int matmul_vec(im_object *argv) { im_mask_object *in1 = argv[0]; im_mask_object *in2 = argv[1]; im_mask_object *out = argv[2]; if (!(out->mask = im_matmul(in1->mask, in2->mask, out->name))) return -1; return 0; } /* Description of im_matmul. */ static im_function matmul_desc = { "im_matmul", /* Name */ "multiply matrix in1 by matrix in2", 0, /* Flags */ matmul_vec, /* Dispatch function */ IM_NUMBER(two_in_one_out), /* Size of arg list */ two_in_one_out /* Arg list */ }; /* Args for im_read_dmask() */ static im_arg_desc read_dmask_args[] = { IM_INPUT_STRING("filename"), IM_OUTPUT_DMASK("mask") }; /* Call im_read_dmask via arg vector. */ static int read_dmask_vec(im_object *argv) { im_mask_object *mo = argv[1]; if (!(mo->mask = im_read_dmask(argv[0]))) return -1; return 0; } /* Description of im_read_dmask(). */ static im_function read_dmask_desc = { "im_read_dmask", /* Name */ "read matrix of double from file", 0, /* Flags */ read_dmask_vec, /* Dispatch function */ IM_NUMBER(read_dmask_args), /* Size of arg list */ read_dmask_args /* Arg list */ }; /* Args for im_gauss_dmask. */ static im_arg_desc gauss_dmask_args[] = { IM_OUTPUT_DMASK("mask"), IM_INPUT_DOUBLE("sigma"), IM_INPUT_DOUBLE("min_amp") }; /* Call im_gauss_dmask via arg vector. */ static int gauss_dmask_vec(im_object *argv) { im_mask_object *mo = argv[0]; double sigma = *((double *) argv[1]); double min_amp = *((double *) argv[2]); if (!(mo->mask = im_gauss_dmask(mo->name, sigma, min_amp))) return -1; return 0; } /* Description of im_gauss_dmask. */ static im_function gauss_dmask_desc = { "im_gauss_dmask", /* Name */ "generate gaussian DOUBLEMASK", 0, /* Flags */ gauss_dmask_vec, /* Dispatch function */ IM_NUMBER(gauss_dmask_args), /* Size of arg list */ gauss_dmask_args /* Arg list */ }; /* Call im_gauss_dmask_sep via arg vector. */ static int gauss_dmask_sep_vec(im_object *argv) { im_mask_object *mo = argv[0]; double sigma = *((double *) argv[1]); double min_amp = *((double *) argv[2]); if (!(mo->mask = im_gauss_dmask_sep(mo->name, sigma, min_amp))) return -1; return 0; } /* Description of im_gauss_dmask_sep. */ static im_function gauss_dmask_sep_desc = { "im_gauss_dmask_sep", /* Name */ "generate separable gaussian DOUBLEMASK", 0, /* Flags */ gauss_dmask_sep_vec, /* Dispatch function */ IM_NUMBER(gauss_dmask_args), /* Size of arg list */ gauss_dmask_args /* Arg list */ }; /* Args for im_gauss_imask. */ static im_arg_desc gauss_imask_args[] = { IM_OUTPUT_IMASK("mask"), IM_INPUT_DOUBLE("sigma"), IM_INPUT_DOUBLE("min_amp") }; /* Call im_gauss_imask via arg vector. */ static int gauss_imask_vec(im_object *argv) { im_mask_object *mo = argv[0]; double sigma = *((double *) argv[1]); double min_amp = *((double *) argv[2]); if (!(mo->mask = im_gauss_imask(mo->name, sigma, min_amp))) return -1; return 0; } /* Description of im_gauss_imask. */ static im_function gauss_imask_desc = { "im_gauss_imask", /* Name */ "generate gaussian INTMASK", 0, /* Flags */ gauss_imask_vec, /* Dispatch function */ IM_NUMBER(gauss_imask_args), /* Size of arg list */ gauss_imask_args /* Arg list */ }; /* Call im_gauss_imask_sep via arg vector. */ static int gauss_imask_sep_vec(im_object *argv) { im_mask_object *mo = argv[0]; double sigma = *((double *) argv[1]); double min_amp = *((double *) argv[2]); if (!(mo->mask = im_gauss_imask_sep(mo->name, sigma, min_amp))) return -1; return 0; } /* Description of im_gauss_imask_sep. */ static im_function gauss_imask_sep_desc = { "im_gauss_imask_sep", /* Name */ "generate separable gaussian INTMASK", 0, /* Flags */ gauss_imask_sep_vec, /* Dispatch function */ IM_NUMBER(gauss_imask_args), /* Size of arg list */ gauss_imask_args /* Arg list */ }; /* Args for im_log_imask. */ static im_arg_desc log_imask_args[] = { IM_OUTPUT_IMASK("mask"), IM_INPUT_DOUBLE("sigma"), IM_INPUT_DOUBLE("min_amp") }; /* Call im_log_imask via arg vector. */ static int log_imask_vec(im_object *argv) { im_mask_object *mo = argv[0]; double sigma = *((double *) argv[1]); double min_amp = *((double *) argv[2]); if (!(mo->mask = im_log_imask(mo->name, sigma, min_amp))) return -1; return 0; } /* Description of im_log_imask. */ static im_function log_imask_desc = { "im_log_imask", /* Name */ "generate laplacian of gaussian INTMASK", 0, /* Flags */ log_imask_vec, /* Dispatch function */ IM_NUMBER(log_imask_args), /* Size of arg list */ log_imask_args /* Arg list */ }; /* Args for im_log_dmask. */ static im_arg_desc log_dmask_args[] = { IM_OUTPUT_DMASK("maskfile"), IM_INPUT_DOUBLE("sigma"), IM_INPUT_DOUBLE("min_amp") }; /* Call im_log_dmask via arg vector. */ static int log_dmask_vec(im_object *argv) { im_mask_object *mo = argv[0]; double sigma = *((double *) argv[1]); double min_amp = *((double *) argv[2]); if (!(mo->mask = im_log_dmask(mo->name, sigma, min_amp))) return -1; return 0; } /* Description of im_log_dmask. */ static im_function log_dmask_desc = { "im_log_dmask", /* Name */ "generate laplacian of gaussian DOUBLEMASK", 0, /* Flags */ log_dmask_vec, /* Dispatch function */ IM_NUMBER(log_dmask_args), /* Size of arg list */ log_dmask_args /* Arg list */ }; static im_arg_desc imask_args[] = { IM_INPUT_IMASK("in"), IM_OUTPUT_IMASK("out") }; static im_arg_desc dmask_args[] = { IM_INPUT_DMASK("in"), IM_OUTPUT_DMASK("out") }; /* Call im_rotate_imask45 via arg vector. */ static int rotate_imask45_vec(im_object *argv) { im_mask_object *min = argv[0]; im_mask_object *mout = argv[1]; if (!(mout->mask = im_rotate_imask45(min->mask, mout->name))) return -1; return 0; } /* Description of im_rotate_imask45. */ static im_function rotate_imask45_desc = { "im_rotate_imask45", /* Name */ "rotate INTMASK clockwise by 45 degrees", 0, /* Flags */ rotate_imask45_vec, /* Dispatch function */ IM_NUMBER(imask_args), /* Size of arg list */ imask_args /* Arg list */ }; /* Call im_rotate_imask90 via arg vector. */ static int rotate_imask90_vec(im_object *argv) { im_mask_object *min = argv[0]; im_mask_object *mout = argv[1]; if (!(mout->mask = im_rotate_imask90(min->mask, mout->name))) return -1; return 0; } /* Description of im_rotate_imask90. */ static im_function rotate_imask90_desc = { "im_rotate_imask90", /* Name */ "rotate INTMASK clockwise by 90 degrees", 0, /* Flags */ rotate_imask90_vec, /* Dispatch function */ IM_NUMBER(imask_args), /* Size of arg list */ imask_args /* Arg list */ }; /* Call im_rotate_dmask45 via arg vector. */ static int rotate_dmask45_vec(im_object *argv) { im_mask_object *min = argv[0]; im_mask_object *mout = argv[1]; if (!(mout->mask = im_rotate_dmask45(min->mask, mout->name))) return -1; return 0; } /* Description of im_rotate_dmask45. */ static im_function rotate_dmask45_desc = { "im_rotate_dmask45", /* Name */ "rotate DOUBLEMASK clockwise by 45 degrees", 0, /* Flags */ rotate_dmask45_vec, /* Dispatch function */ IM_NUMBER(dmask_args), /* Size of arg list */ dmask_args /* Arg list */ }; /* Call im_rotate_dmask90 via arg vector. */ static int rotate_dmask90_vec(im_object *argv) { im_mask_object *min = argv[0]; im_mask_object *mout = argv[1]; if (!(mout->mask = im_rotate_dmask90(min->mask, mout->name))) return -1; return 0; } /* Description of im_rotate_dmask90. */ static im_function rotate_dmask90_desc = { "im_rotate_dmask90", /* Name */ "rotate DOUBLEMASK clockwise by 90 degrees", 0, /* Flags */ rotate_dmask90_vec, /* Dispatch function */ IM_NUMBER(dmask_args), /* Size of arg list */ dmask_args /* Arg list */ }; static int imask_xsize_vec(im_object *argv) { *((int *) argv[1]) = ((INTMASK *) (((im_mask_object *) argv[0])->mask))->xsize; return 0; } static int imask_ysize_vec(im_object *argv) { *((int *) argv[1]) = ((INTMASK *) (((im_mask_object *) argv[0])->mask))->ysize; return 0; } static int dmask_xsize_vec(im_object *argv) { *((int *) argv[1]) = ((DOUBLEMASK *) (((im_mask_object *) argv[0])->mask))->xsize; return 0; } static int dmask_ysize_vec(im_object *argv) { *((int *) argv[1]) = ((DOUBLEMASK *) (((im_mask_object *) argv[0])->mask))->ysize; return 0; } static im_arg_desc imask_size_args[] = { IM_INPUT_IMASK("mask"), IM_OUTPUT_INT("size") }; static im_arg_desc dmask_size_args[] = { IM_INPUT_DMASK("mask"), IM_OUTPUT_INT("size") }; static im_function imask_xsize_desc = { "im_imask_xsize", /* Name */ "horizontal size of an intmask", /* Description */ 0, /* Flags */ imask_xsize_vec, /* Dispatch function */ IM_NUMBER(imask_size_args), /* Size of arg list */ imask_size_args /* Arg list */ }; static im_function imask_ysize_desc = { "im_imask_ysize", /* Name */ "vertical size of an intmask", /* Description */ 0, /* Flags */ imask_ysize_vec, /* Dispatch function */ IM_NUMBER(imask_size_args), /* Size of arg list */ imask_size_args /* Arg list */ }; static im_function dmask_xsize_desc = { "im_dmask_xsize", /* Name */ "horizontal size of a doublemask", /* Description */ 0, /* Flags */ dmask_xsize_vec, /* Dispatch function */ IM_NUMBER(dmask_size_args), /* Size of arg list */ dmask_size_args /* Arg list */ }; static im_function dmask_ysize_desc = { "im_dmask_ysize", /* Name */ "vertical size of a doublemask", /* Description */ 0, /* Flags */ dmask_ysize_vec, /* Dispatch function */ IM_NUMBER(dmask_size_args), /* Size of arg list */ dmask_size_args /* Arg list */ }; /* Package up all these functions. */ static im_function *mask_list[] = { &gauss_dmask_desc, &gauss_dmask_sep_desc, &log_dmask_desc, &log_imask_desc, &gauss_imask_desc, &gauss_imask_sep_desc, &dmask_xsize_desc, &dmask_ysize_desc, &imask_xsize_desc, &imask_ysize_desc, &read_dmask_desc, &rotate_dmask45_desc, &rotate_dmask90_desc, &rotate_imask45_desc, &rotate_imask90_desc, &matcat_desc, &matinv_desc, &matmul_desc, &mattrn_desc }; /* Package of functions. */ im_package im__mask = { "mask", IM_NUMBER(mask_list), mask_list }; libvips-8.15.1/libvips/deprecated/matalloc.c000066400000000000000000000112341454007373500207770ustar00rootroot00000000000000/* @(#) Programs for allocating and freeing matrices * @(#) pages 705- of numerical recipes in C 1998 * @(#) */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #define TINY 1.0e-200 /* @(#) Allocates and returns an pointer at the beginning of * @(#) an integer array array[nl,nh] or * @(#) float array array[nl,nh] or * @(#) double array array[nl,nh] * @(#) * @(#) Right call * @(#) int *im_ivector(nl, nh) * @(#) int nl, nh; * @(#) returns a pointer to an int array or NULL on error * @(#) * @(#) Right call * @(#) float *im_fvector(nl, nh) * @(#) int nl, nh; * @(#) returns a pointer to a float array or NULL on error * @(#) * @(#) Right call * @(#) double *im_dvector(nl, nh) * @(#) int nl, nh; * @(#) returns a pointer to a double array or NULL on error * @(#) * @(#) The following functions free the array allocated by the functions above * @(#) * @(#) void im_free_ivector(v, nl, nh) * @(#) int *v; * @(#) int nl, nh; * @(#) * @(#) void im_free_fvector(v, nl, nh) * @(#) float *v; * @(#) int nl, nh; * @(#) * @(#) void im_free_dvector(v, nl, nh) * @(#) double *v; * @(#) int nl, nh; * @(#) */ int * im_ivector(int nl, int nh) { int *v; v = (int *) im_malloc(NULL, (unsigned) (nh - nl + 1) * sizeof(int)); if (v == NULL) return NULL; else return v - nl; } float * im_fvector(int nl, int nh) { float *v; v = (float *) im_malloc(NULL, (unsigned) (nh - nl + 1) * sizeof(float)); if (v == NULL) return NULL; else return v - nl; } double * im_dvector(int nl, int nh) { double *v; v = (double *) im_malloc(NULL, (unsigned) (nh - nl + 1) * sizeof(double)); if (v == NULL) return NULL; else return v - nl; } void im_free_ivector(int *v, int nl, int nh) { im_free((char *) (v + nl)); } void im_free_fvector(float *v, int nl, int nh) { im_free((char *) (v + nl)); } void im_free_dvector(double *v, int nl, int nh) { im_free((char *) (v + nl)); } /* @(#) Allocates and returns an pointer at the beginning of * @(#) an int, float or double, two dimensional matrix[nrl,nrh][ncl,nch] * @(#) * @(#) Right call * @(#) int **im_imat_alloc(nrl, nrh, ncl, nch) * @(#) int nrl, nrh, ncl, nch; * @(#) returns a pointer to an int matrix or NULL on error * @(#) * @(#) float **im_fmat_alloc(nrl, nrh, ncl, nch) * @(#) int nrl, nrh, ncl, nch; * @(#) returns a pointer to an int matrix or NULL on error * @(#) * @(#) double **im_dmat_alloc(nrl, nrh, ncl, nch) * @(#) int nrl, nrh, ncl, nch; * @(#) returns a pointer to a double matrix or NULL on error * @(#) * @(#) The following routines free the matrix allocated by the functions above * @(#) void im_free_imat(m, nrl, nrh, ncl, nch) * @(#) int **m; * @(#) int nrl, nrh, ncl, nch; * @(#) * @(#) void im_free_fmat(m, nrl, nrh, ncl, nch) * @(#) float **m; * @(#) int nrl, nrh, ncl, nch; * @(#) * @(#) void im_free_dmat(m, nrl, nrh, ncl, nch) * @(#) double **m; * @(#) int nrl, nrh, ncl, nch; * @(#) */ int ** im_imat_alloc(int nrl, int nrh, int ncl, int nch) { int i; int **m; m = (int **) im_malloc(NULL, (unsigned) (nrh - nrl + 1) * sizeof(int *)); if (m == NULL) return NULL; m -= nrl; for (i = nrl; i <= nrh; i++) { m[i] = (int *) im_malloc(NULL, (unsigned) (nch - ncl + 1) * sizeof(int)); if (m[i] == NULL) return NULL; m[i] -= ncl; } return m; } void im_free_imat(int **m, int nrl, int nrh, int ncl, int nch) { int i; for (i = nrh; i >= nrl; i--) im_free((char *) (m[i] + ncl)); im_free((char *) (m + nrl)); } float ** im_fmat_alloc(int nrl, int nrh, int ncl, int nch) { int i; float **m; m = (float **) im_malloc(NULL, (unsigned) (nrh - nrl + 1) * sizeof(float *)); if (m == NULL) return NULL; m -= nrl; for (i = nrl; i <= nrh; i++) { m[i] = (float *) im_malloc(NULL, (unsigned) (nch - ncl + 1) * sizeof(float)); if (m[i] == NULL) return NULL; m[i] -= ncl; } return m; } void im_free_fmat(float **m, int nrl, int nrh, int ncl, int nch) { int i; for (i = nrh; i >= nrl; i--) im_free((char *) (m[i] + ncl)); im_free((char *) (m + nrl)); } double ** im_dmat_alloc(int nrl, int nrh, int ncl, int nch) { int i; double **m; m = (double **) im_malloc(NULL, (unsigned) (nrh - nrl + 1) * sizeof(double *)); if (m == NULL) return NULL; m -= nrl; for (i = nrl; i <= nrh; i++) { m[i] = (double *) im_malloc(NULL, (unsigned) (nch - ncl + 1) * sizeof(double)); if (m[i] == NULL) return NULL; m[i] -= ncl; } return m; } void im_free_dmat(double **m, int nrl, int nrh, int ncl, int nch) { int i; for (i = nrh; i >= nrl; i--) im_free((char *) (m[i] + ncl)); im_free((char *) (m + nrl)); } libvips-8.15.1/libvips/deprecated/matlab.c000066400000000000000000000037551454007373500204540ustar00rootroot00000000000000/* Read matlab save files with libmatio * * 20/12/11 * - just a compat stub */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include int im_mat2vips(const char *filename, IMAGE *out) { VipsImage *t; if (vips_matload(filename, &t, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } static int ismat(const char *filename) { return vips_foreign_is_a("matload", filename); } static const char *mat_suffs[] = { ".mat", NULL }; typedef VipsFormat VipsFormatMat; typedef VipsFormatClass VipsFormatMatClass; static void vips_format_mat_class_init(VipsFormatMatClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsFormatClass *format_class = (VipsFormatClass *) class; object_class->nickname = "mat"; object_class->description = _("Matlab"); format_class->is_a = ismat; format_class->load = im_mat2vips; format_class->save = NULL; format_class->suffs = mat_suffs; } static void vips_format_mat_init(VipsFormatMat *object) { } G_DEFINE_TYPE(VipsFormatMat, vips_format_mat, VIPS_TYPE_FORMAT); libvips-8.15.1/libvips/deprecated/meson.build000066400000000000000000000041721454007373500212040ustar00rootroot00000000000000deprecated_sources = files( 'video_dispatch.c', 'im_video_test.c', 'cimg_dispatch.c', 'inplace_dispatch.c', 'tone.c', 'freq_dispatch.c', 'im_linreg.c', 'im_point_bilinear.c', 'resample_dispatch.c', 'im_openslide2vips.c', 'im_nifti2vips.c', 'im_lab_morph.c', 'deprecated_dispatch.c', 'mosaicing_dispatch.c', 'im_maxpos_subpel.c', 'im_align_bands.c', 'morph_dispatch.c', 'colour_dispatch.c', 'convol_dispatch.c', 'im_zerox.c', 'arith_dispatch.c', 'hist_dispatch.c', 'other_dispatch.c', 'im_maxpos_avg.c', 'lazy.c', 'im_dif_std.c', 'im_simcontr.c', 'im_spatres.c', 'im_stretch3.c', 'im_clamp.c', 'cooc_funcs.c', 'glds_funcs.c', 'im_fav4.c', 'im_benchmark.c', 'im_gadd.c', 'im_gaddim.c', 'im_gradcor.c', 'im_cmulnorm.c', 'im_printlines.c', 'im_convsub.c', 'im_line.c', 'im_measure.c', 'im_resize_linear.c', 'im_debugim.c', 'im_gfadd.c', 'im_setbox.c', 'rename.c', 'vips7compat.c', 'dispatch_types.c', 'package.c', 'im_bernd.c', 'im_thresh.c', 'im_slice.c', 'im_print.c', 'im_litecor.c', 'im_mask2vips.c', 'im_vips2mask.c', 'rotmask.c', 'rw_mask.c', 'im_matcat.c', 'im_matinv.c', 'im_matmul.c', 'im_mattrn.c', 'matalloc.c', 'mask_dispatch.c', 'fits.c', 'format.c', 'format_dispatch.c', 'im_analyze2vips.c', 'im_csv2vips.c', 'im_exr2vips.c', 'im_jpeg2vips.c', 'im_magick2vips.c', 'im_png2vips.c', 'im_webp2vips.c', 'im_ppm2vips.c', 'im_tiff2vips.c', 'im_vips2csv.c', 'im_vips2jpeg.c', 'im_vips2png.c', 'im_vips2webp.c', 'im_vips2ppm.c', 'im_vips2tiff.c', 'conver_dispatch.c', 'im_vips2dz.c', 'im_freq_mask.c', 'matlab.c', 'radiance.c', 'raw.c' ) libvips_sources += deprecated_sources deprecated_lib = static_library('deprecated', deprecated_sources, dependencies: libvips_deps, c_args: [ '-DVIPS_DISABLE_DEPRECATION_WARNINGS' ], gnu_symbol_visibility: 'hidden', ) libvips_components += deprecated_lib libvips-8.15.1/libvips/deprecated/morph_dispatch.c000066400000000000000000000153231454007373500222120ustar00rootroot00000000000000/* VIPS function dispatch tables for morphology. * * J. Cupitt, 19/9/95 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include /* Args to im_profile. */ static im_arg_desc profile_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("direction") }; /* Call im_profile via arg vector. */ static int profile_vec(im_object *argv) { int dir = *((int *) argv[2]); return im_profile(argv[0], argv[1], dir); } /* Description of im_profile. */ static im_function profile_desc = { "im_profile", /* Name */ "find first horizontal/vertical edge", /* Descr. */ IM_FN_TRANSFORM, /* Flags */ profile_vec, /* Dispatch function */ IM_NUMBER(profile_args), /* Size of arg list */ profile_args /* Arg list */ }; /* Args to im_erode. */ static im_arg_desc erode_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_IMASK("mask") }; /* Call im_dilate via arg vector. */ static int dilate_vec(im_object *argv) { im_mask_object *mo = argv[2]; return im_dilate(argv[0], argv[1], mo->mask); } /* Description of im_dilate. */ static im_function dilate_desc = { "im_dilate", /* Name */ "dilate image with mask, adding a black border", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ dilate_vec, /* Dispatch function */ IM_NUMBER(erode_args), /* Size of arg list */ erode_args /* Arg list */ }; /* Call im_erode via arg vector. */ static int erode_vec(im_object *argv) { im_mask_object *mo = argv[2]; return im_erode(argv[0], argv[1], mo->mask); } /* Description of im_erode. */ static im_function erode_desc = { "im_erode", /* Name */ "erode image with mask, adding a black border", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ erode_vec, /* Dispatch function */ IM_NUMBER(erode_args), /* Size of arg list */ erode_args /* Arg list */ }; /* Args to im_cntlines. */ static im_arg_desc cntlines_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_DOUBLE("nlines"), IM_INPUT_INT("direction") }; /* Call im_cntlines via arg vector. */ static int cntlines_vec(im_object *argv) { double *out = (double *) argv[1]; int dir = *((int *) argv[2]); return im_cntlines(argv[0], out, dir); } /* Description of im_cntlines. */ static im_function cntlines_desc = { "im_cntlines", /* Name */ "count horizontal or vertical lines", 0, /* Flags */ cntlines_vec, /* Dispatch function */ IM_NUMBER(cntlines_args), /* Size of arg list */ cntlines_args /* Arg list */ }; /* Args to im_rank. */ static im_arg_desc rank_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("xsize"), IM_INPUT_INT("ysize"), IM_INPUT_INT("n") }; /* Call im_rank via arg vector. */ static int rank_vec(im_object *argv) { int xsize = *((int *) argv[2]); int ysize = *((int *) argv[3]); int n = *((int *) argv[4]); return im_rank(argv[0], argv[1], xsize, ysize, n); } /* Description of im_rank. */ static im_function rank_desc = { "im_rank", /* Name */ "rank filter nth element of xsize/ysize window", IM_FN_PIO, /* Flags */ rank_vec, /* Dispatch function */ IM_NUMBER(rank_args), /* Size of arg list */ rank_args /* Arg list */ }; /* Args for im_zerox. */ static im_arg_desc zerox_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("flag") }; /* Call im_zerox via arg vector. */ static int zerox_vec(im_object *argv) { int flag = *((int *) argv[2]); return im_zerox(argv[0], argv[1], flag); } /* Description of im_zerox. */ static im_function zerox_desc = { "im_zerox", /* Name */ "find +ve or -ve zero crossings in image", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ zerox_vec, /* Dispatch function */ IM_NUMBER(zerox_args), /* Size of arg list */ zerox_args /* Arg list */ }; static im_arg_desc maxvalue_args[] = { IM_INPUT_IMAGEVEC("in"), IM_OUTPUT_IMAGE("out") }; static int maxvalue_vec(im_object *argv) { im_imagevec_object *iv = (im_imagevec_object *) argv[0]; return im_maxvalue(iv->vec, argv[1], iv->n); } static im_function maxvalue_desc = { "im_maxvalue", /* Name */ "point-wise maximum value", /* Description */ IM_FN_PIO, /* Flags */ maxvalue_vec, /* Dispatch function */ IM_NUMBER(maxvalue_args), /* Size of arg list */ maxvalue_args /* Arg list */ }; static im_arg_desc rank_image_args[] = { IM_INPUT_IMAGEVEC("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("index") }; static int rank_image_vec(im_object *argv) { im_imagevec_object *iv = (im_imagevec_object *) argv[0]; int index = *((int *) argv[2]); return im_rank_image(iv->vec, argv[1], iv->n, index); } static im_function rank_image_desc = { "im_rank_image", /* Name */ "point-wise pixel rank", /* Description */ IM_FN_PIO, /* Flags */ rank_image_vec, /* Dispatch function */ IM_NUMBER(rank_image_args), /* Size of arg list */ rank_image_args /* Arg list */ }; /* Args for im_label_regions(). */ static im_arg_desc label_regions_args[] = { IM_INPUT_IMAGE("test"), IM_OUTPUT_IMAGE("mask"), IM_OUTPUT_INT("segments") }; /* Call im_label_regions() via arg vector. */ static int label_regions_vec(im_object *argv) { IMAGE *test = argv[0]; IMAGE *mask = argv[1]; int *serial = (int *) argv[2]; return im_label_regions(test, mask, serial); } /* Description of im_label_regions(). */ static im_function label_regions_desc = { "im_label_regions", /* Name */ "number continuous regions in an image", 0, /* Flags */ label_regions_vec, /* Dispatch function */ IM_NUMBER(label_regions_args), /* Size of arg list */ label_regions_args /* Arg list */ }; /* Package up all these functions. */ static im_function *morph_list[] = { &cntlines_desc, &dilate_desc, &rank_desc, &rank_image_desc, &maxvalue_desc, &label_regions_desc, &zerox_desc, &erode_desc, &profile_desc }; /* Package of functions. */ im_package im__morphology = { "morphology", IM_NUMBER(morph_list), morph_list }; libvips-8.15.1/libvips/deprecated/mosaicing_dispatch.c000066400000000000000000000442551454007373500230440ustar00rootroot00000000000000/* Function dispatch tables for mosaicing. * * J. Cupitt, 23/2/95 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include /* Merge args. */ static im_arg_desc merge_args[] = { IM_INPUT_IMAGE("ref"), IM_INPUT_IMAGE("sec"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("dx"), IM_INPUT_INT("dy"), IM_INPUT_INT("mwidth") }; /* Merge1 args. */ static im_arg_desc merge1_args[] = { IM_INPUT_IMAGE("ref"), IM_INPUT_IMAGE("sec"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("xr1"), IM_INPUT_INT("yr1"), IM_INPUT_INT("xs1"), IM_INPUT_INT("ys1"), IM_INPUT_INT("xr2"), IM_INPUT_INT("yr2"), IM_INPUT_INT("xs2"), IM_INPUT_INT("ys2"), IM_INPUT_INT("mwidth") }; /* Mosaic args. */ static im_arg_desc mosaic_args[] = { IM_INPUT_IMAGE("ref"), IM_INPUT_IMAGE("sec"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("bandno"), IM_INPUT_INT("xr"), IM_INPUT_INT("yr"), IM_INPUT_INT("xs"), IM_INPUT_INT("ys"), IM_INPUT_INT("halfcorrelation"), IM_INPUT_INT("halfarea"), IM_INPUT_INT("balancetype"), // Deprecated IM_INPUT_INT("mwidth") }; /* Mosaic1 args. */ static im_arg_desc mosaic1_args[] = { IM_INPUT_IMAGE("ref"), IM_INPUT_IMAGE("sec"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("bandno"), // Deprecated IM_INPUT_INT("xr1"), IM_INPUT_INT("yr1"), IM_INPUT_INT("xs1"), IM_INPUT_INT("ys1"), IM_INPUT_INT("xr2"), IM_INPUT_INT("yr2"), IM_INPUT_INT("xs2"), IM_INPUT_INT("ys2"), IM_INPUT_INT("halfcorrelation"), IM_INPUT_INT("halfarea"), IM_INPUT_INT("balancetype"), // Deprecated IM_INPUT_INT("mwidth") }; /* Call im_lrmosaic via arg vector. */ static int lrmosaic_vec(im_object *argv) { int bandno = *((int *) argv[3]); int xr = *((int *) argv[4]); int yr = *((int *) argv[5]); int xs = *((int *) argv[6]); int ys = *((int *) argv[7]); int halfcorrelation = *((int *) argv[8]); int halfarea = *((int *) argv[9]); int mwidth = *((int *) argv[11]); return vips__lrmosaic(argv[0], argv[1], argv[2], bandno, xr, yr, xs, ys, halfcorrelation, halfarea, mwidth); } /* Call im_lrmosaic1 via arg vector. */ static int lrmosaic1_vec(im_object *argv) { int xr1 = *((int *) argv[4]); int yr1 = *((int *) argv[5]); int xs1 = *((int *) argv[6]); int ys1 = *((int *) argv[7]); int xr2 = *((int *) argv[8]); int yr2 = *((int *) argv[9]); int xs2 = *((int *) argv[10]); int ys2 = *((int *) argv[11]); int halfcorrelation = *((int *) argv[12]); int halfarea = *((int *) argv[13]); int mwidth = *((int *) argv[15]); return im_lrmosaic1(argv[0], argv[1], argv[2], 0, xr1, yr1, xs1, ys1, xr2, yr2, xs2, ys2, halfcorrelation, halfarea, 0, mwidth); } /* Description of im_lrmosaic. */ static im_function lrmosaic_desc = { "im_lrmosaic", /* Name */ "left-right mosaic of ref and sec", /* Description */ IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ lrmosaic_vec, /* Dispatch function */ IM_NUMBER(mosaic_args), /* Size of arg list */ mosaic_args /* Arg list */ }; static im_arg_desc find_overlap_args[] = { IM_INPUT_IMAGE("ref"), IM_INPUT_IMAGE("sec"), IM_INPUT_INT("bandno"), IM_INPUT_INT("xr"), IM_INPUT_INT("yr"), IM_INPUT_INT("xs"), IM_INPUT_INT("ys"), IM_INPUT_INT("halfcorrelation"), IM_INPUT_INT("halfarea"), IM_OUTPUT_INT("dx0"), IM_OUTPUT_INT("dy0"), IM_OUTPUT_DOUBLE("scale1"), IM_OUTPUT_DOUBLE("angle1"), IM_OUTPUT_DOUBLE("dx1"), IM_OUTPUT_DOUBLE("dy1") }; /* Call im__find_lroverlap via arg vector. */ static int find_lroverlap_vec(im_object *argv) { int bandno = *((int *) argv[2]); int xr = *((int *) argv[3]); int yr = *((int *) argv[4]); int xs = *((int *) argv[5]); int ys = *((int *) argv[6]); int halfcorrelation = *((int *) argv[7]); int halfarea = *((int *) argv[8]); int *dx0 = (int *) argv[9]; int *dy0 = (int *) argv[10]; double *scale1 = (double *) argv[11]; double *angle1 = (double *) argv[12]; double *dx1 = (double *) argv[13]; double *dy1 = (double *) argv[14]; IMAGE *t; int result; if (!(t = im_open("find_lroverlap_vec", "p"))) return -1; result = vips__find_lroverlap(argv[0], argv[1], t, bandno, xr, yr, xs, ys, halfcorrelation, halfarea, dx0, dy0, scale1, angle1, dx1, dy1); im_close(t); return result; } /* Description of im__find_lroverlap. */ static im_function find_lroverlap_desc = { "im__find_lroverlap", /* Name */ "search for left-right overlap of ref and sec", /* Description */ IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ find_lroverlap_vec, /* Dispatch function */ IM_NUMBER(find_overlap_args), /* Size of arg list */ find_overlap_args /* Arg list */ }; /* Description of im_lrmosaic1. */ static im_function lrmosaic1_desc = { "im_lrmosaic1", /* Name */ "first-order left-right mosaic of ref and sec", /* Description */ IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ lrmosaic1_vec, /* Dispatch function */ IM_NUMBER(mosaic1_args), /* Size of arg list */ mosaic1_args /* Arg list */ }; /* Call im_tbmosaic via arg vector. */ static int tbmosaic_vec(im_object *argv) { int bandno = *((int *) argv[3]); int x1 = *((int *) argv[4]); int y1 = *((int *) argv[5]); int x2 = *((int *) argv[6]); int y2 = *((int *) argv[7]); int halfcorrelation = *((int *) argv[8]); int halfarea = *((int *) argv[9]); int mwidth = *((int *) argv[11]); return vips__tbmosaic(argv[0], argv[1], argv[2], bandno, x1, y1, x2, y2, halfcorrelation, halfarea, mwidth); } /* Call im_tbmosaic1 via arg vector. */ static int tbmosaic1_vec(im_object *argv) { int xr1 = *((int *) argv[4]); int yr1 = *((int *) argv[5]); int xs1 = *((int *) argv[6]); int ys1 = *((int *) argv[7]); int xr2 = *((int *) argv[8]); int yr2 = *((int *) argv[9]); int xs2 = *((int *) argv[10]); int ys2 = *((int *) argv[11]); int halfcorrelation = *((int *) argv[12]); int halfarea = *((int *) argv[13]); int mwidth = *((int *) argv[15]); return im_tbmosaic1(argv[0], argv[1], argv[2], 0, xr1, yr1, xs1, ys1, xr2, yr2, xs2, ys2, halfcorrelation, halfarea, 0, mwidth); } /* Call im__find_tboverlap via arg vector. */ static int find_tboverlap_vec(im_object *argv) { int bandno = *((int *) argv[2]); int xr = *((int *) argv[3]); int yr = *((int *) argv[4]); int xs = *((int *) argv[5]); int ys = *((int *) argv[6]); int halfcorrelation = *((int *) argv[7]); int halfarea = *((int *) argv[8]); int *dx0 = (int *) argv[9]; int *dy0 = (int *) argv[10]; double *scale1 = (double *) argv[11]; double *angle1 = (double *) argv[12]; double *dx1 = (double *) argv[13]; double *dy1 = (double *) argv[14]; IMAGE *t; int result; if (!(t = im_open("find_tboverlap_vec", "p"))) return -1; result = vips__find_tboverlap(argv[0], argv[1], t, bandno, xr, yr, xs, ys, halfcorrelation, halfarea, dx0, dy0, scale1, angle1, dx1, dy1); im_close(t); return result; } /* Description of im__find_tboverlap. */ static im_function find_tboverlap_desc = { "im__find_tboverlap", /* Name */ "search for top-bottom overlap of ref and sec", /* Description */ IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ find_tboverlap_vec, /* Dispatch function */ IM_NUMBER(find_overlap_args), /* Size of arg list */ find_overlap_args /* Arg list */ }; /* Description of im_tbmosaic. */ static im_function tbmosaic_desc = { "im_tbmosaic", /* Name */ "top-bottom mosaic of in1 and in2", /* Description */ IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ tbmosaic_vec, /* Dispatch function */ IM_NUMBER(mosaic_args), /* Size of arg list */ mosaic_args /* Arg list */ }; /* Description of im_tbmosaic1. */ static im_function tbmosaic1_desc = { "im_tbmosaic1", /* Name */ "first-order top-bottom mosaic of ref and sec", /* Description */ IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ tbmosaic1_vec, /* Dispatch function */ IM_NUMBER(mosaic1_args), /* Size of arg list */ mosaic1_args /* Arg list */ }; /* Call im_lrmerge via arg vector. */ static int lrmerge_vec(im_object *argv) { int dx = *((int *) argv[3]); int dy = *((int *) argv[4]); int mwidth = *((int *) argv[5]); return im_lrmerge(argv[0], argv[1], argv[2], dx, dy, mwidth); } /* Call im_lrmerge1 via arg vector. */ static int lrmerge1_vec(im_object *argv) { int xr1 = *((int *) argv[3]); int yr1 = *((int *) argv[4]); int xs1 = *((int *) argv[5]); int ys1 = *((int *) argv[6]); int xr2 = *((int *) argv[7]); int yr2 = *((int *) argv[8]); int xs2 = *((int *) argv[9]); int ys2 = *((int *) argv[10]); int mwidth = *((int *) argv[11]); return im_lrmerge1(argv[0], argv[1], argv[2], xr1, yr1, xs1, ys1, xr2, yr2, xs2, ys2, mwidth); } /* Description of im_lrmerge. */ static im_function lrmerge_desc = { "im_lrmerge", /* Name */ "left-right merge of in1 and in2", /* Description */ IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ lrmerge_vec, /* Dispatch function */ IM_NUMBER(merge_args), /* Size of arg list */ merge_args /* Arg list */ }; /* Description of im_lrmerge1. */ static im_function lrmerge1_desc = { "im_lrmerge1", /* Name */ "first-order left-right merge of ref and sec", /* Description */ IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ lrmerge1_vec, /* Dispatch function */ IM_NUMBER(merge1_args), /* Size of arg list */ merge1_args /* Arg list */ }; /* Call im_tbmerge via arg vector. */ static int tbmerge_vec(im_object *argv) { int dx = *((int *) argv[3]); int dy = *((int *) argv[4]); int mwidth = *((int *) argv[5]); return im_tbmerge(argv[0], argv[1], argv[2], dx, dy, mwidth); } /* Call im_tbmerge1 via arg vector. */ static int tbmerge1_vec(im_object *argv) { int xr1 = *((int *) argv[3]); int yr1 = *((int *) argv[4]); int xs1 = *((int *) argv[5]); int ys1 = *((int *) argv[6]); int xr2 = *((int *) argv[7]); int yr2 = *((int *) argv[8]); int xs2 = *((int *) argv[9]); int ys2 = *((int *) argv[10]); int mwidth = *((int *) argv[11]); return im_tbmerge1(argv[0], argv[1], argv[2], xr1, yr1, xs1, ys1, xr2, yr2, xs2, ys2, mwidth); } /* Description of im_tbmerge. */ static im_function tbmerge_desc = { "im_tbmerge", /* Name */ "top-bottom merge of in1 and in2", /* Description */ IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ tbmerge_vec, /* Dispatch function */ IM_NUMBER(merge_args), /* Size of arg list */ merge_args /* Arg list */ }; /* Description of im_tbmerge1. */ static im_function tbmerge1_desc = { "im_tbmerge1", /* Name */ "first-order top-bottom merge of in1 and in2", /* Description */ IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ tbmerge1_vec, /* Dispatch function */ IM_NUMBER(merge1_args), /* Size of arg list */ merge1_args /* Arg list */ }; /* match_linear args */ static im_arg_desc match_linear_args[] = { IM_INPUT_IMAGE("ref"), IM_INPUT_IMAGE("sec"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("xref1"), IM_INPUT_INT("yref1"), IM_INPUT_INT("xsec1"), IM_INPUT_INT("ysec1"), IM_INPUT_INT("xref2"), IM_INPUT_INT("yref2"), IM_INPUT_INT("xsec2"), IM_INPUT_INT("ysec2") }; /* Call im_match_linear via arg vector. */ static int match_linear_vec(im_object *argv) { int xref1 = *((int *) argv[3]); int yref1 = *((int *) argv[4]); int xsec1 = *((int *) argv[5]); int ysec1 = *((int *) argv[6]); int xref2 = *((int *) argv[7]); int yref2 = *((int *) argv[8]); int xsec2 = *((int *) argv[9]); int ysec2 = *((int *) argv[10]); return im_match_linear(argv[0], argv[1], argv[2], xref1, yref1, xsec1, ysec1, xref2, yref2, xsec2, ysec2); } /* Description of im_match_linear. */ static im_function match_linear_desc = { "im_match_linear", /* Name */ "resample ref so that tie-points match", IM_FN_PIO, /* Flags */ match_linear_vec, /* Dispatch function */ IM_NUMBER(match_linear_args), /* Size of arg list */ match_linear_args /* Arg list */ }; /* match_linear_search args */ static im_arg_desc match_linear_search_args[] = { IM_INPUT_IMAGE("ref"), IM_INPUT_IMAGE("sec"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("xref1"), IM_INPUT_INT("yref1"), IM_INPUT_INT("xsec1"), IM_INPUT_INT("ysec1"), IM_INPUT_INT("xref2"), IM_INPUT_INT("yref2"), IM_INPUT_INT("xsec2"), IM_INPUT_INT("ysec2"), IM_INPUT_INT("hwindowsize"), IM_INPUT_INT("hsearchsize") }; /* Call im_match_linear_search via arg vector. */ static int match_linear_search_vec(im_object *argv) { int xref1 = *((int *) argv[3]); int yref1 = *((int *) argv[4]); int xsec1 = *((int *) argv[5]); int ysec1 = *((int *) argv[6]); int xref2 = *((int *) argv[7]); int yref2 = *((int *) argv[8]); int xsec2 = *((int *) argv[9]); int ysec2 = *((int *) argv[10]); int hwin = *((int *) argv[11]); int hsrch = *((int *) argv[12]); return im_match_linear_search(argv[0], argv[1], argv[2], xref1, yref1, xsec1, ysec1, xref2, yref2, xsec2, ysec2, hwin, hsrch); } /* Description of im_match_linear_search. */ static im_function match_linear_search_desc = { "im_match_linear_search", /* Name */ "search sec, then resample so that tie-points match", IM_FN_PIO, /* Flags */ match_linear_search_vec, /* Dispatch function */ IM_NUMBER(match_linear_search_args), /* Size of arg list */ match_linear_search_args /* Arg list */ }; /* correl args */ static im_arg_desc correl_args[] = { IM_INPUT_IMAGE("ref"), IM_INPUT_IMAGE("sec"), IM_INPUT_INT("xref"), IM_INPUT_INT("yref"), IM_INPUT_INT("xsec"), IM_INPUT_INT("ysec"), IM_INPUT_INT("hwindowsize"), IM_INPUT_INT("hsearchsize"), IM_OUTPUT_DOUBLE("correlation"), IM_OUTPUT_INT("x"), IM_OUTPUT_INT("y") }; /* Call im_correl via arg vector. */ static int correl_vec(im_object *argv) { int xref = *((int *) argv[2]); int yref = *((int *) argv[3]); int xsec = *((int *) argv[4]); int ysec = *((int *) argv[5]); int cor = *((int *) argv[6]); int area = *((int *) argv[7]); int *x = (int *) argv[8]; int *y = (int *) argv[9]; double *correlation = (double *) argv[10]; return vips__correl(argv[0], argv[1], xref, yref, xsec, ysec, cor, area, correlation, x, y); } /* Description of im_correl. */ static im_function correl_desc = { "im_correl", /* Name */ "search area around sec for match for area around ref", IM_FN_PIO, /* Flags */ correl_vec, /* Dispatch function */ IM_NUMBER(correl_args), /* Size of arg list */ correl_args /* Arg list */ }; /* global_balance args */ static im_arg_desc global_balance_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DOUBLE("gamma") }; /* Call im_global_balance via arg vector. */ static int global_balance_vec(im_object *argv) { double gamma = *((double *) argv[2]); return im_global_balance(argv[0], argv[1], gamma); } /* Description of im_global_balance. */ static im_function global_balance_desc = { "im_global_balance", /* Name */ "automatically rebuild mosaic with balancing", IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ global_balance_vec, /* Dispatch function */ IM_NUMBER(global_balance_args), /* Size of arg list */ global_balance_args /* Arg list */ }; /* Call im_global_balancef via arg vector. */ static int global_balancef_vec(im_object *argv) { double gamma = *((double *) argv[2]); return im_global_balancef(argv[0], argv[1], gamma); } /* Description of im_global_balancef. */ static im_function global_balancef_desc = { "im_global_balancef", /* Name */ "automatically rebuild mosaic with balancing, float output", IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ global_balancef_vec, /* Dispatch function */ IM_NUMBER(global_balance_args), /* Size of arg list */ global_balance_args /* Arg list */ }; /* remosaic args */ static im_arg_desc remosaic_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_STRING("old_str"), IM_INPUT_STRING("new_str") }; /* Call im_remosaic via arg vector. */ static int remosaic_vec(im_object *argv) { return im_remosaic(argv[0], argv[1], argv[2], argv[3]); } /* Description of im_remosaic. */ static im_function remosaic_desc = { "im_remosaic", /* Name */ "automatically rebuild mosaic with new files", IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ remosaic_vec, /* Dispatch function */ IM_NUMBER(remosaic_args), /* Size of arg list */ remosaic_args /* Arg list */ }; static int align_bands_vec(im_object *argv) { return im_align_bands((IMAGE *) argv[0], (IMAGE *) argv[1]); } static im_arg_desc align_bands_arg_types[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out") }; static im_function align_bands_desc = { "im_align_bands", "align the bands of an image", 0, align_bands_vec, IM_NUMBER(align_bands_arg_types), align_bands_arg_types }; static int maxpos_subpel_vec(im_object *argv) { return im_maxpos_subpel((IMAGE *) argv[0], (double *) argv[1], (double *) argv[2]); } static im_arg_desc maxpos_subpel_arg_types[] = { IM_INPUT_IMAGE("im"), IM_OUTPUT_DOUBLE("x"), IM_OUTPUT_DOUBLE("y") }; static im_function maxpos_subpel_desc = { "im_maxpos_subpel", "subpixel position of maximum of (phase correlation) image", IM_FN_PIO, maxpos_subpel_vec, IM_NUMBER(maxpos_subpel_arg_types), maxpos_subpel_arg_types }; /* Package up all these functions. */ static im_function *mos_list[] = { &align_bands_desc, &correl_desc, &find_lroverlap_desc, &find_tboverlap_desc, &global_balance_desc, &global_balancef_desc, &lrmerge_desc, &lrmerge1_desc, &lrmosaic_desc, &lrmosaic1_desc, &match_linear_desc, &match_linear_search_desc, &maxpos_subpel_desc, &remosaic_desc, &tbmerge_desc, &tbmerge1_desc, &tbmosaic_desc, &tbmosaic1_desc }; /* Package of functions. */ im_package im__mosaicing = { "mosaicing", IM_NUMBER(mos_list), mos_list }; libvips-8.15.1/libvips/deprecated/other_dispatch.c000066400000000000000000000176361454007373500222170ustar00rootroot00000000000000/* Function dispatch tables for other. * * J. Cupitt, 8/2/95 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include /* Args for im_sines. */ static im_arg_desc sines_args[] = { IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("xsize"), IM_INPUT_INT("ysize"), IM_INPUT_DOUBLE("horfreq"), IM_INPUT_DOUBLE("verfreq") }; /* Call im_sines via arg vector. */ static int sines_vec(im_object *argv) { int xsize = *((int *) argv[1]); int ysize = *((int *) argv[2]); double horfreq = *((double *) argv[3]); double verfreq = *((double *) argv[4]); return im_sines(argv[0], xsize, ysize, horfreq, verfreq); } /* Description of im_sines. */ static im_function sines_desc = { "im_sines", /* Name */ "generate 2D sine image", 0, /* Flags */ sines_vec, /* Dispatch function */ IM_NUMBER(sines_args), /* Size of arg list */ sines_args /* Arg list */ }; /* Args for im_eye. */ static im_arg_desc eye_args[] = { IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("xsize"), IM_INPUT_INT("ysize"), IM_INPUT_DOUBLE("factor") }; /* Call im_eye via arg vector. */ static int eye_vec(im_object *argv) { int xsize = *((int *) argv[1]); int ysize = *((int *) argv[2]); double factor = *((double *) argv[3]); return im_eye(argv[0], xsize, ysize, factor); } /* Description of im_eye. */ static im_function eye_desc = { "im_eye", /* Name */ "generate IM_BANDFMT_UCHAR [0,255] frequency/amplitude image", 0, /* Flags */ eye_vec, /* Dispatch function */ IM_NUMBER(eye_args), /* Size of arg list */ eye_args /* Arg list */ }; /* Call im_feye via arg vector. */ static int feye_vec(im_object *argv) { int xsize = *((int *) argv[1]); int ysize = *((int *) argv[2]); double factor = *((double *) argv[3]); return im_feye(argv[0], xsize, ysize, factor); } /* Description of im_feye. */ static im_function feye_desc = { "im_feye", /* Name */ "generate IM_BANDFMT_FLOAT [-1,1] frequency/amplitude image", 0, /* Flags */ feye_vec, /* Dispatch function */ IM_NUMBER(eye_args), /* Size of arg list */ eye_args /* Arg list */ }; /* Args for im_zone. */ static im_arg_desc zone_args[] = { IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("size") }; /* Call im_zone via arg vector. */ static int zone_vec(im_object *argv) { int size = *((int *) argv[1]); return im_zone(argv[0], size); } /* Description of im_zone. */ static im_function zone_desc = { "im_zone", /* Name */ "generate IM_BANDFMT_UCHAR [0,255] zone plate image", /* Description */ 0, /* Flags */ zone_vec, /* Dispatch function */ IM_NUMBER(zone_args), /* Size of arg list */ zone_args /* Arg list */ }; /* Call im_fzone via arg vector. */ static int fzone_vec(im_object *argv) { int size = *((int *) argv[1]); return im_fzone(argv[0], size); } /* Description of im_fzone. */ static im_function fzone_desc = { "im_fzone", /* Name */ "generate IM_BANDFMT_FLOAT [-1,1] zone plate image", /* Description */ 0, /* Flags */ fzone_vec, /* Dispatch function */ IM_NUMBER(zone_args), /* Size of arg list */ zone_args /* Arg list */ }; /* Args for im_benchmark. */ static im_arg_desc benchmark_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out") }; /* Call im_benchmark via arg vector. */ static int benchmark_vec(im_object *argv) { return im_benchmarkn(argv[0], argv[1], 1); } /* Description of im_benchmark. */ static im_function benchmark_desc = { "im_benchmark", /* Name */ "do something complicated for testing", /* Description */ IM_FN_PIO, /* Flags */ benchmark_vec, /* Dispatch function */ IM_NUMBER(benchmark_args), /* Size of arg list */ benchmark_args /* Arg list */ }; /* Args for im_benchmark2. */ static im_arg_desc benchmark2_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_DOUBLE("value") }; /* Call im_benchmark2 via arg vector. */ static int benchmark2_vec(im_object *argv) { double f; if (im_benchmark2(argv[0], &f)) return -1; *((double *) argv[1]) = f; return 0; } /* Description of im_benchmark2. */ static im_function benchmark2_desc = { "im_benchmark2", /* Name */ "do something complicated for testing", /* Description */ IM_FN_PIO, /* Flags */ benchmark2_vec, /* Dispatch function */ IM_NUMBER(benchmark2_args), /* Size of arg list */ benchmark2_args /* Arg list */ }; /* Args for im_benchmarkn. */ static im_arg_desc benchmarkn_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("n") }; /* Call im_benchmarkn via arg vector. */ static int benchmarkn_vec(im_object *argv) { int n = *((int *) argv[2]); return im_benchmarkn(argv[0], argv[1], n); } /* Description of im_benchmarkn. */ static im_function benchmarkn_desc = { "im_benchmarkn", /* Name */ "do something complicated for testing", /* Description */ IM_FN_PIO, /* Flags */ benchmarkn_vec, /* Dispatch function */ IM_NUMBER(benchmarkn_args), /* Size of arg list */ benchmarkn_args /* Arg list */ }; /* Args for im_grey. */ static im_arg_desc grey_args[] = { IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("xsize"), IM_INPUT_INT("ysize") }; /* Call im_grey via arg vector. */ static int grey_vec(im_object *argv) { int xsize = *((int *) argv[1]); int ysize = *((int *) argv[2]); return im_grey(argv[0], xsize, ysize); } /* Description of im_grey. */ static im_function grey_desc = { "im_grey", /* Name */ "generate IM_BANDFMT_UCHAR [0,255] grey scale image", /* Description */ 0, /* Flags */ grey_vec, /* Dispatch function */ IM_NUMBER(grey_args), /* Size of arg list */ grey_args /* Arg list */ }; /* Call im_fgrey via arg vector. */ static int fgrey_vec(im_object *argv) { int xsize = *((int *) argv[1]); int ysize = *((int *) argv[2]); return im_fgrey(argv[0], xsize, ysize); } /* Description of im_fgrey. */ static im_function fgrey_desc = { "im_fgrey", /* Name */ "generate IM_BANDFMT_FLOAT [0,1] grey scale image", /* Description */ 0, /* Flags */ fgrey_vec, /* Dispatch function */ IM_NUMBER(grey_args), /* Size of arg list */ grey_args /* Arg list */ }; /* Call im_make_xy via arg vector. */ static int make_xy_vec(im_object *argv) { int xsize = *((int *) argv[1]); int ysize = *((int *) argv[2]); return im_make_xy(argv[0], xsize, ysize); } /* Description of im_make_xy. */ static im_function make_xy_desc = { "im_make_xy", /* Name */ "generate image with pixel value equal to coordinate", /* Description */ 0, /* Flags */ make_xy_vec, /* Dispatch function */ IM_NUMBER(grey_args), /* Size of arg list */ grey_args /* Arg list */ }; /* Package up all these functions. */ static im_function *other_list[] = { &benchmark_desc, &benchmark2_desc, &benchmarkn_desc, &eye_desc, &grey_desc, &feye_desc, &fgrey_desc, &fzone_desc, &make_xy_desc, &sines_desc, &zone_desc }; /* Package of functions. */ im_package im__other = { "other", IM_NUMBER(other_list), other_list }; libvips-8.15.1/libvips/deprecated/package.c000066400000000000000000000612551454007373500206060ustar00rootroot00000000000000/* VIPS package handling. * * J. Cupitt, 8/4/93. * * 18/2/04 JC * - now uses g_module_*() instead of dlopen() * 9/8/04 * - uses glib dir scanning stuff instead of dirent.h * 20/5/08 * - note_dependencies() does IMAGEVEC as well as IMAGE * 5/8/08 * - silent success in loading plugins if the dir isn't there */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #ifdef HAVE_SYS_PARAM_H #include #endif /*HAVE_SYS_PARAM_H*/ #include #include #include #include #include #include #include /* Standard VIPS packages. */ extern im_package im__arithmetic; extern im_package im__cimg; extern im_package im__colour; extern im_package im__conversion; extern im_package im__convolution; extern im_package im__deprecated; extern im_package im__format; extern im_package im__freq_filt; extern im_package im__histograms_lut; extern im_package im__inplace; extern im_package im__mask; extern im_package im__morphology; extern im_package im__mosaicing; extern im_package im__other; extern im_package im__resample; extern im_package im__video; /* im_guess_prefix() args. */ static im_arg_desc guess_prefix_args[] = { IM_INPUT_STRING("argv0"), IM_INPUT_STRING("env_name"), IM_OUTPUT_STRING("PREFIX") }; /* Call im_guess_prefix() via arg vector. */ static int guess_prefix_vec(im_object *argv) { const char *prefix = vips_guess_prefix(argv[0], argv[1]); if (!prefix) { argv[2] = NULL; return -1; } argv[2] = im_strdup(NULL, prefix); return 0; } /* Description of im_guess_prefix. */ static im_function guess_prefix_desc = { "im_guess_prefix", /* Name */ "guess install area", /* Description */ 0, /* Flags */ guess_prefix_vec, /* Dispatch function */ VIPS_NUMBER(guess_prefix_args), /* Size of arg list */ guess_prefix_args /* Arg list */ }; /* im_guess_libdir() args. */ static im_arg_desc guess_libdir_args[] = { IM_INPUT_STRING("argv0"), IM_INPUT_STRING("env_name"), IM_OUTPUT_STRING("LIBDIR") }; /* Call im_guess_libdir() via arg vector. */ static int guess_libdir_vec(im_object *argv) { const char *libdir = vips_guess_libdir(argv[0], argv[1]); if (!libdir) { argv[2] = NULL; return -1; } argv[2] = im_strdup(NULL, libdir); return 0; } /* Description of im_guess_libdir. */ static im_function guess_libdir_desc = { "im_guess_libdir", /* Name */ "guess library area", /* Description */ 0, /* Flags */ guess_libdir_vec, /* Dispatch function */ VIPS_NUMBER(guess_libdir_args), /* Size of arg list */ guess_libdir_args /* Arg list */ }; /* im_header_int() args. */ static im_arg_desc header_int_args[] = { IM_INPUT_STRING("field"), IM_INPUT_IMAGE("image"), IM_OUTPUT_INT("value") }; /* Call im_header_int() via arg vector. */ static int header_int_vec(im_object *argv) { return im_header_int((IMAGE *) argv[1], (const char *) argv[0], (int *) argv[2]); } /* Description of im_header_int(). */ static im_function header_int_desc = { "im_header_int", /* Name */ "extract int fields from header", /* Description */ 0, /* Flags */ header_int_vec, /* Dispatch function */ VIPS_NUMBER(header_int_args), /* Size of arg list */ header_int_args /* Arg list */ }; /* im_header_get_typeof() args. */ static im_arg_desc header_get_typeof_args[] = { IM_INPUT_STRING("field"), IM_INPUT_IMAGE("image"), IM_OUTPUT_INT("gtype") }; /* Call im_header_get_typeof() via arg vector. */ static int header_get_typeof_vec(im_object *argv) { int *out = (int *) argv[2]; *out = im_header_get_typeof((IMAGE *) argv[1], (const char *) argv[0]); return 0; } /* Description of im_header_get_typeof(). */ static im_function header_get_typeof_desc = { "im_header_get_typeof", /* Name */ "return field type", /* Description */ 0, /* Flags */ header_get_typeof_vec, /* Dispatch function */ VIPS_NUMBER(header_get_typeof_args), /* Size of arg list */ header_get_typeof_args /* Arg list */ }; /* im_header_double() args. */ static im_arg_desc header_double_args[] = { IM_INPUT_STRING("field"), IM_INPUT_IMAGE("image"), IM_OUTPUT_DOUBLE("value") }; /* Call im_header_double() via arg vector. */ static int header_double_vec(im_object *argv) { return im_header_double((IMAGE *) argv[1], (const char *) argv[0], (double *) argv[2]); } /* Description of im_header_double(). */ static im_function header_double_desc = { "im_header_double", /* Name */ "extract double fields from header", /* Description */ 0, /* Flags */ header_double_vec, /* Dispatch function */ VIPS_NUMBER(header_double_args), /* Size of arg list */ header_double_args /* Arg list */ }; /* im_header_string() args. */ static im_arg_desc header_string_args[] = { IM_INPUT_STRING("field"), IM_INPUT_IMAGE("image"), IM_OUTPUT_STRING("value") }; /* Call im_header_string() via arg vector. */ static int header_string_vec(im_object *argv) { char **out = (char **) &argv[2]; /* Actually, we call im_header_as_string(), so we can do any field and * not just the string-valued ones. */ if (im_header_as_string((IMAGE *) argv[1], (const char *) argv[0], out)) return -1; return 0; } /* Description of im_header_string(). */ static im_function header_string_desc = { "im_header_string", /* Name */ "extract fields from headers as strings", /* Description */ 0, /* Flags */ header_string_vec, /* Dispatch function */ VIPS_NUMBER(header_string_args), /* Size of arg list */ header_string_args /* Arg list */ }; /* im_history_get() args. */ static im_arg_desc history_get_args[] = { IM_INPUT_IMAGE("image"), IM_OUTPUT_STRING("history") }; /* Call im_history_get() via arg vector. */ static int history_get_vec(im_object *argv) { char **out = (char **) &argv[1]; const char *str; if (!(str = im_history_get((IMAGE *) argv[0])) || !(*out = im_strdup(NULL, str))) return -1; return 0; } /* Description of im_history_get(). */ static im_function history_get_desc = { "im_history_get", /* Name */ "return the image history as a string", /* Description */ 0, /* Flags */ history_get_vec, /* Dispatch function */ VIPS_NUMBER(history_get_args), /* Size of arg list */ history_get_args /* Arg list */ }; /* im_getext() args. */ static im_arg_desc getext_args[] = { IM_INPUT_IMAGE("image"), IM_OUTPUT_STRING("history") }; /* Call im_getext() via arg vector. */ static int getext_vec(im_object *argv) { void **out = (void **) &argv[1]; int size; /* void/char confusion is fine. */ if (!(*out = im__read_extension_block((IMAGE *) argv[0], &size))) return -1; return 0; } /* Description of im_getext(). */ static im_function getext_desc = { "im_getext", /* Name */ "return the image metadata XML as a string", /* Description */ 0, /* Flags */ getext_vec, /* Dispatch function */ VIPS_NUMBER(getext_args), /* Size of arg list */ getext_args /* Arg list */ }; /* im_printdesc() args. */ static im_arg_desc printdesc_args[] = { IM_INPUT_IMAGE("image"), }; /* Call im_printdesc() via arg vector. */ static int printdesc_vec(im_object *argv) { vips_object_print_dump(VIPS_OBJECT(argv[0])); return 0; } /* Description of im_printdesc(). */ static im_function printdesc_desc = { "im_printdesc", /* Name */ "print an image header to stdout", /* Description */ 0, /* Flags */ printdesc_vec, /* Dispatch function */ VIPS_NUMBER(printdesc_args), /* Size of arg list */ printdesc_args /* Arg list */ }; /* im_version_string() args. */ static im_arg_desc version_string_args[] = { IM_OUTPUT_STRING("version") }; /* Call im_version_string() via arg vector. */ static int version_string_vec(im_object *argv) { if (!(argv[0] = im_strdup(NULL, vips_version_string()))) return -1; return 0; } /* Description of im_version_string. */ static im_function version_string_desc = { "im_version_string", /* Name */ "VIPS version string", /* Description */ 0, /* Flags */ version_string_vec, /* Dispatch function */ VIPS_NUMBER(version_string_args), /* Size of arg list */ version_string_args /* Arg list */ }; /* im_version() args. */ static im_arg_desc version_args[] = { IM_INPUT_INT("flag"), IM_OUTPUT_INT("version") }; /* Call im_version() via arg vector. */ static int version_vec(im_object *argv) { int flag = *((int *) argv[0]); int *out = ((int *) argv[1]); int version = vips_version(flag); if (version < 0) return -1; *out = version; return 0; } /* Description of im_version. */ static im_function version_desc = { "im_version", /* Name */ "VIPS version number", /* Description */ 0, /* Flags */ version_vec, /* Dispatch function */ VIPS_NUMBER(version_args), /* Size of arg list */ version_args /* Arg list */ }; /* im_concurrency_get() args. */ static im_arg_desc concurrency_get_args[] = { IM_OUTPUT_INT("concurrency") }; /* Call im_concurrency_get() via arg vector. */ static int concurrency_get_vec(im_object *argv) { int *out = ((int *) argv[0]); *out = vips_concurrency_get(); return 0; } /* Description of im_concurrency_get. */ static im_function concurrency_get_desc = { "im_concurrency_get", /* Name */ "get concurrency level", /* Description */ 0, /* Flags */ concurrency_get_vec, /* Dispatch function */ VIPS_NUMBER(concurrency_get_args), /* Size of arg list */ concurrency_get_args /* Arg list */ }; /* im_cache() args. */ static im_arg_desc cache_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("tile_width"), IM_INPUT_INT("tile_height"), IM_INPUT_INT("max_tiles") }; /* Call im_cache() via arg vector. */ static int cache_vec(im_object *argv) { int tile_width = *((int *) argv[2]); int tile_height = *((int *) argv[3]); int max_tiles = *((int *) argv[4]); return im_cache(argv[0], argv[1], tile_width, tile_height, max_tiles); } /* Description of im_cache. */ static im_function cache_desc = { "im_cache", /* Name */ "cache results of an operation", /* Description */ 0, /* Flags */ cache_vec, /* Dispatch function */ VIPS_NUMBER(cache_args), /* Size of arg list */ cache_args /* Arg list */ }; static int tile_cache_random_vec(im_object *argv) { int tile_width = *((int *) argv[2]); int tile_height = *((int *) argv[3]); int max_tiles = *((int *) argv[4]); return im_tile_cache_random(argv[0], argv[1], tile_width, tile_height, max_tiles); } /* Description of im_cache. */ static im_function tile_cache_random_desc = { "im_tile_cache_random", /* Name */ "cache results of an operation", /* Description */ 0, /* Flags */ tile_cache_random_vec, /* Dispatch function */ VIPS_NUMBER(cache_args), /* Size of arg list */ cache_args /* Arg list */ }; /* im_binfile() args. */ static im_arg_desc binfile_args[] = { IM_INPUT_STRING("filename"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("width"), IM_INPUT_INT("height"), IM_INPUT_INT("bands"), IM_INPUT_INT("offset") }; /* Call im_binfile() via arg vector. */ static int binfile_vec(im_object *argv) { int width = *((int *) argv[2]); int height = *((int *) argv[3]); int bands = *((int *) argv[4]); int offset = *((int *) argv[5]); VipsImage *im; if (!(im = vips_image_new_from_file_raw(argv[0], width, height, bands, offset))) return -1; vips_object_local(argv[1], im); if (im_copy(im, argv[1])) return -1; return 0; } /* Description of im_binfile. */ static im_function binfile_desc = { "im_binfile", /* Name */ "open a headerless binary file", /* Description */ 0, /* Flags */ binfile_vec, /* Dispatch function */ VIPS_NUMBER(binfile_args), /* Size of arg list */ binfile_args /* Arg list */ }; /* Package up iofuncs functions. */ static im_function *iofuncs_list[] = { &binfile_desc, &cache_desc, &tile_cache_random_desc, &concurrency_get_desc, &getext_desc, &guess_prefix_desc, &guess_libdir_desc, &header_get_typeof_desc, &header_int_desc, &header_double_desc, &header_string_desc, &history_get_desc, &printdesc_desc, &version_desc, &version_string_desc }; /* Package of io functions. */ static im_package im__iofuncs = { "iofuncs", VIPS_NUMBER(iofuncs_list), iofuncs_list }; /* List of built-in VIPS packages. */ static im_package *built_in[] = { &im__arithmetic, &im__cimg, &im__colour, &im__conversion, &im__convolution, &im__deprecated, &im__format, &im__freq_filt, &im__histograms_lut, &im__inplace, &im__iofuncs, &im__mask, &im__morphology, &im__mosaicing, &im__other, &im__resample, &im__video }; #ifdef ENABLE_MODULES /* How we represent a loaded plugin. */ typedef struct _Plugin { GModule *module; /* As loaded by g_module_open() */ char *name; /* Name we loaded */ im_package *pack; /* Package table */ } Plugin; /* List of loaded plugins. */ static GSList *plugin_list = NULL; /* Free a plugin. */ static int plugin_free(Plugin *plug) { char *name = plug->name ? plug->name : ""; if (plug->module) { if (!g_module_close(plug->module)) { vips_error("plugin", _("unable to close plugin \"%s\""), name); vips_error("plugin", "%s", g_module_error()); return -1; } plug->module = NULL; } VIPS_FREE(plug->name); plug->pack = NULL; g_free(plug); plugin_list = g_slist_remove(plugin_list, plug); return 0; } #endif /*ENABLE_MODULES*/ /* Load a plugin. */ im_package * im_load_plugin(const char *name) { #ifdef ENABLE_MODULES Plugin *plug; g_info("im_load_plugin: loading \"%s\" ...", name); if (!g_module_supported()) { vips_error("plugin", "%s", _("plugins not supported on this platform")); return NULL; } /* Build a new plugin. */ plug = VIPS_NEW(NULL, Plugin); plug->module = NULL; plug->name = g_strdup(name); plug->pack = NULL; plugin_list = g_slist_prepend(plugin_list, plug); /* Open library. */ if (!(plug->module = g_module_open(name, 0))) { vips_error("plugin", _("unable to open plugin \"%s\""), name); vips_error("plugin", "%s", g_module_error()); plugin_free(plug); return NULL; } /* Find package. */ /* Bizarre double-cast stops a bogus gcc 4.1 compiler warning. */ if (!g_module_symbol(plug->module, "package_table", (gpointer *) ((void *) &plug->pack))) { vips_error("plugin", _("unable to find symbol \"package_table\" " "in plugin \"%s\""), name); vips_error("plugin", "%s", g_module_error()); plugin_free(plug); return NULL; } /* Sanity check. */ if (!plug->pack->name || plug->pack->nfuncs < 0 || plug->pack->nfuncs > 10000) { vips_error("plugin", _("corrupted package table in plugin \"%s\""), name); plugin_free(plug); return NULL; } g_info("im_load_plugin: added package \"%s\"", plug->pack->name); return plug->pack; #else /*!ENABLE_MODULES*/ vips_error("plugin", "%s", _("libvips built without modules support")); return NULL; #endif /*ENABLE_MODULES*/ } /* Load all plugins in a directory ... look for '.plg' suffix. Error if we had * any probs. */ int im_load_plugins(const char *fmt, ...) { #ifdef ENABLE_MODULES va_list ap; char dir_name[VIPS_PATH_MAX]; GDir *dir; const char *name; int result; /* Silently succeed if we can't do modules. */ if (!g_module_supported()) return 0; va_start(ap, fmt); (void) im_vsnprintf(dir_name, VIPS_PATH_MAX - 1, fmt, ap); va_end(ap); g_info("im_load_plugins: searching \"%s\"\n", dir_name); if (!(dir = g_dir_open(dir_name, 0, NULL))) /* Silent success for dir not there. */ return 0; result = 0; while ((name = g_dir_read_name(dir))) if (im_ispostfix(name, ".plg")) { char path[VIPS_PATH_MAX]; im_snprintf(path, VIPS_PATH_MAX - 1, "%s" G_DIR_SEPARATOR_S "%s", dir_name, name); if (!im_load_plugin(path)) result = -1; } g_dir_close(dir); return result; #else /*!ENABLE_MODULES*/ /* Silently succeed if we can't do modules. */ return 0; #endif /*ENABLE_MODULES*/ } /* Close all loaded plugins. */ int im_close_plugins(void) { #ifdef ENABLE_MODULES while (plugin_list) if (plugin_free((Plugin *) plugin_list->data)) return -1; #endif /*ENABLE_MODULES*/ return 0; } #ifdef ENABLE_MODULES /* Apply a user-function to a plugin package. */ static void * apply_plugin(Plugin *plug, VSListMap2Fn fn, void *a) { if (!plug->pack) return NULL; else return fn(plug->pack, a, NULL); } #endif /*ENABLE_MODULES*/ /* Map a function over all packages. Map over plugins first, to allow * overriding of VIPS functions. */ void * im_map_packages(VSListMap2Fn fn, void *a) { #ifdef ENABLE_MODULES void *r = im_slist_map2(plugin_list, (VSListMap2Fn) apply_plugin, (void *) fn, a); #else /*!ENABLE_MODULES*/ void *r = NULL; #endif /*ENABLE_MODULES*/ /* If not there, try main VIPS package list. */ if (!r) { int i; for (i = 0; i < VIPS_NUMBER(built_in); i++) if ((r = fn(built_in[i], a, NULL))) return r; } return r; } /* Search a package for a function. */ static im_function * search_package(im_package *pack, const char *name) { int i; for (i = 0; i < pack->nfuncs; i++) if (strcmp(pack->table[i]->name, name) == 0) return pack->table[i]; return NULL; } /* Search all packages for a function. */ im_function * im_find_function(const char *name) { im_function *fn = im_map_packages( (VSListMap2Fn) search_package, (void *) name); if (!fn) { vips_error("im_find_function", _("\"%s\" not found"), name); return NULL; } return fn; } /* Test for package is of name. */ static im_package * package_name(im_package *pack, const char *name) { if (strcmp(pack->name, name) == 0) return pack; return NULL; } /* Find a package. */ im_package * im_find_package(const char *name) { im_package *pack = im_map_packages( (VSListMap2Fn) package_name, (void *) name); if (!pack) { vips_error("im_find_package", _("\"%s\" not found"), name); return NULL; } return pack; } /* Test for package contains a function. */ static im_package * package_function(im_package *pack, const char *name) { if (search_package(pack, name)) return pack; else return NULL; } /* Find a function's package by name. */ im_package * im_package_of_function(const char *name) { im_package *pack = im_map_packages( (VSListMap2Fn) package_function, (void *) name); if (!pack) { vips_error("im_package_of_function", _("\"%s\" not found"), name); return NULL; } return pack; } /* Free any store we allocated for the argument list. */ int im_free_vargv(im_function *fn, im_object *vargv) { int i; int vargc = fn->argc; /* Free all elements. */ for (i = 0; i < vargc; i++) if (vargv[i]) { /* If there is local storage, free it. */ if (fn->argv[i].desc->size != 0) g_free(vargv[i]); /* NULL out pointer. */ vargv[i] = NULL; } return 0; } /* Allocate any local store the args will need; NULL out all others. */ int im_allocate_vargv(im_function *fn, im_object *vargv) { int i; int vargc = fn->argc; /* NULL out all pointers. */ for (i = 0; i < vargc; i++) vargv[i] = NULL; /* Allocate any space we will need. */ for (i = 0; i < vargc; i++) { int sz = fn->argv[i].desc->size; if (sz != 0) if (!(vargv[i] = vips_malloc(NULL, sz))) { /* Free anything we did allocate. */ (void) im_free_vargv(fn, vargv); return -1; } /* Zero memory. */ memset(vargv[i], 0, sz); } return 0; } /* Destroy the objects in the arg list. */ static int destroy_args(im_function *fn, im_object *vargv) { int i; int vargc = fn->argc; /* Destroy all elements with destroy functions. */ for (i = 0; i < vargc; i++) if (vargv[i]) /* If there's a destroy function for this type, * trigger it. */ if (fn->argv[i].desc->dest && fn->argv[i].desc->dest(vargv[i])) return -1; return 0; } /* Init an im_object array from a set of command-line arguments. */ static int build_args(im_function *fn, im_object *vargv, int argc, char **argv) { im_arg_desc *arg = fn->argv; int vargc = fn->argc; char *str; int i, j; /* Loop, constructing each im_arg. */ for (i = 0, j = 0; i < vargc; i++) { /* Find type for this arg. */ im_type_desc *type = arg[i].desc; /* Do we need to use up a command line argument? */ if (type->flags & IM_TYPE_ARG) { if (!argv[j]) { vips_error("im_run_command", "%s", _("too few arguments")); return -1; } str = argv[j++]; /* Init object. */ if (type->init && type->init(&vargv[i], str)) return -1; } else { /* Init object with no arg. */ if (type->init && type->init(&vargv[i], "no arg")) return -1; } } /* Have we used up all the command-line args? */ if (argv[j]) { vips_error("im_run_command", "%s", _("too many arguments")); return -1; } return 0; } /* Make a region on sub, closed by callback on main. */ static int region_local_image(IMAGE *main, IMAGE *sub) { VipsRegion *reg; if (!(reg = vips_region_new(sub))) return -1; vips_object_local(main, reg); return 0; } /* vargv[i] is an output image on a PIO function ... make all input images * depend on it. */ static int note_dependencies(im_function *fn, im_object *vargv, int i) { int j; for (j = 0; j < fn->argc; j++) { im_type_desc *type = fn->argv[j].desc; if (!(type->flags & IM_TYPE_OUTPUT)) { if (strcmp(type->type, IM_TYPE_IMAGE) == 0) { if (region_local_image(vargv[i], vargv[j])) return -1; } else if (strcmp(type->type, IM_TYPE_IMAGEVEC) == 0) { im_imagevec_object *iv = vargv[j]; int k; for (k = 0; k < iv->n; k++) if (region_local_image(vargv[i], iv->vec[k])) return -1; } } } return 0; } /* Call all defined print functions. */ static int print_args(im_function *fn, im_object *vargv) { int i; int vargc = fn->argc; /* Print all elements. */ for (i = 0; i < vargc; i++) if (fn->argv[i].print && vargv[i]) if (fn->argv[i].print(vargv[i])) return -1; return 0; } /* Add to the hist of all output images. */ static int add_hist(im_function *fn, im_object *vargv, int argc, char **argv) { int i; int vargc = fn->argc; /* Search for output images. */ for (i = 0; i < vargc; i++) if (strcmp(fn->argv[i].desc->type, IM_TYPE_IMAGE) == 0 && (fn->argv[i].desc->flags & IM_TYPE_OUTPUT)) if (im_updatehist(vargv[i], fn->name, argc, argv)) return -1; return 0; } /* Call a VIPS function. */ static int dispatch_function(im_function *fn, im_object *vargv, int argc, char **argv) { /* Init memory from command line arguments. */ if (build_args(fn, vargv, argc, argv)) return -1; /* If this is a PIO function, we need to make sure that we close * the input images after the output images, since the output image * may include delayed image conversion filters which will not run * until the output is closed. * * Do this by: * - for each output image * - for each input image * - create a region on the input, closed by a * close callback on the output image */ if (fn->flags & IM_FN_PIO) { int i; for (i = 0; i < fn->argc; i++) { im_type_desc *type = fn->argv[i].desc; if (type->flags & IM_TYPE_OUTPUT && strcmp(type->type, IM_TYPE_IMAGE) == 0) if (note_dependencies(fn, vargv, i)) return -1; } } /* Call function. */ if (fn->disp(vargv)) return -1; /* Print output. */ if (print_args(fn, vargv)) return -1; /* Add to history of all output images. */ if (add_hist(fn, vargv, argc, argv)) return -1; /* All ok! */ return 0; } /* Run a command. */ int im_run_command(char *name, int argc, char **argv) { static im_object object_array[IM_MAX_ARGS]; im_object *vargv = object_array; im_function *fn; /* Search packages for a matching function. */ if (!(fn = im_find_function(name))) return -1; /* Allocate space for arguments. */ if (im_allocate_vargv(fn, vargv)) return -1; /* Call it. */ if (dispatch_function(fn, vargv, argc, argv)) { destroy_args(fn, vargv); im_free_vargv(fn, vargv); return -1; } /* Clean up and exit. */ if (destroy_args(fn, vargv)) return -1; im_free_vargv(fn, vargv); return 0; } libvips-8.15.1/libvips/deprecated/radiance.c000066400000000000000000000041141454007373500207500ustar00rootroot00000000000000/* Read Radiance (.hdr) files * * 20/12/11 * - just a compat stub */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include int im_rad2vips(const char *filename, IMAGE *out) { VipsImage *t; if (vips_radload(filename, &t, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } static int israd(const char *filename) { return vips_foreign_is_a("radload", filename); } int im_vips2rad(IMAGE *in, const char *filename) { return vips_radsave(in, filename, NULL); } static const char *rad_suffs[] = { ".hdr", NULL }; typedef VipsFormat VipsFormatRad; typedef VipsFormatClass VipsFormatRadClass; static void vips_format_rad_class_init(VipsFormatRadClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsFormatClass *format_class = (VipsFormatClass *) class; object_class->nickname = "rad"; object_class->description = _("Radiance"); format_class->is_a = israd; format_class->load = im_rad2vips; format_class->save = im_vips2rad; format_class->suffs = rad_suffs; } static void vips_format_rad_init(VipsFormatRad *object) { } G_DEFINE_TYPE(VipsFormatRad, vips_format_rad, VIPS_TYPE_FORMAT); libvips-8.15.1/libvips/deprecated/raw.c000066400000000000000000000027241454007373500200000ustar00rootroot00000000000000/* Read raw image. Just a wrapper over im_binfile(). * * 15/12/11 * - just a compat stub now */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include int im_raw2vips(const char *filename, IMAGE *out, int width, int height, int bpp, int offset) { VipsImage *t; if (vips_rawload(filename, &t, width, height, bpp, "offset", offset, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_vips2raw(IMAGE *in, int fd) { return vips_rawsave_fd(in, fd, NULL); } libvips-8.15.1/libvips/deprecated/rename.c000066400000000000000000000360251454007373500204570ustar00rootroot00000000000000/* rename.c --- wrappers for various renamed functions * * 20/9/09 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include int im_remainderconst_vec(IMAGE *in, IMAGE *out, int n, double *c) { return im_remainder_vec(in, out, n, c); } int im_and_vec(IMAGE *in, IMAGE *out, int n, double *c) { return im_andimage_vec(in, out, n, c); } int im_or_vec(IMAGE *in, IMAGE *out, int n, double *c) { return im_orimage_vec(in, out, n, c); } int im_eor_vec(IMAGE *in, IMAGE *out, int n, double *c) { return im_eorimage_vec(in, out, n, c); } int im_andconst(IMAGE *in, IMAGE *out, double c) { return im_andimageconst(in, out, c); } int im_orconst(IMAGE *in, IMAGE *out, double c) { return im_orimageconst(in, out, c); } int im_eorconst(IMAGE *in, IMAGE *out, double c) { return im_eorimageconst(in, out, c); } void im_errormsg(const char *fmt, ...) { va_list ap; va_start(ap, fmt); im_verror("untranslated", fmt, ap); va_end(ap); } void im_verrormsg(const char *fmt, va_list ap) { im_verror("untranslated", fmt, ap); } void im_errormsg_system(int err, const char *fmt, ...) { va_list ap; va_start(ap, fmt); im_verror_system(err, "untranslated", fmt, ap); va_end(ap); } void im_diagnostics(const char *fmt, ...) { va_list ap; va_start(ap, fmt); im_vdiag("untranslated", fmt, ap); va_end(ap); } void im_warning(const char *fmt, ...) { va_list ap; va_start(ap, fmt); im_vwarn("untranslated", fmt, ap); va_end(ap); } void * vips_g_thread_join(GThread *thread) { return g_thread_join(thread); } int im_affine(IMAGE *in, IMAGE *out, double a, double b, double c, double d, double dx, double dy, int ox, int oy, int ow, int oh) { return im_affinei(in, out, vips_interpolate_bilinear_static(), a, b, c, d, dx, dy, ox, oy, ow, oh); } int im_similarity_area(IMAGE *in, IMAGE *out, double a, double b, double dx, double dy, int ox, int oy, int ow, int oh) { return im_affinei(in, out, vips_interpolate_bilinear_static(), a, -b, b, a, dx, dy, ox, oy, ow, oh); } int im_similarity(IMAGE *in, IMAGE *out, double a, double b, double dx, double dy) { return im_affinei_all(in, out, vips_interpolate_bilinear_static(), a, -b, b, a, dx, dy); } DOUBLEMASK * im_measure(IMAGE *im, IMAGE_BOX *box, int h, int v, int *sel, int nsel, const char *name) { return im_measure_area(im, box->xstart, box->ystart, box->xsize, box->ysize, h, v, sel, nsel, name); } int im_extract(IMAGE *in, IMAGE *out, IMAGE_BOX *box) { if (box->chsel == -1) return im_extract_areabands(in, out, box->xstart, box->ystart, box->xsize, box->ysize, 0, in->Bands); else return im_extract_areabands(in, out, box->xstart, box->ystart, box->xsize, box->ysize, box->chsel, 1); } /* The public proto has this in the argument. */ typedef void (*notify_fn)(IMAGE *, Rect *, void *); int im_render_fade(IMAGE *in, IMAGE *out, IMAGE *mask, int width, int height, int max, int fps, int steps, int priority, notify_fn notify, void *client) { return im_render_priority(in, out, mask, width, height, max, priority, notify, client); } int im_render(IMAGE *in, IMAGE *out, IMAGE *mask, int width, int height, int max, notify_fn notify, void *client) { return im_render_priority( in, out, mask, width, height, max, 0, notify, client); } int im_makerw(IMAGE *im) { return im_rwcheck(im); } int im_icc_export(IMAGE *in, IMAGE *out, const char *output_profile_filename, int intent) { return im_icc_export_depth(in, out, 8, output_profile_filename, (VipsIntent) intent); } int im_segment(IMAGE *test, IMAGE *mask, int *segments) { return im_label_regions(test, mask, segments); } int im_convf(IMAGE *in, IMAGE *out, DOUBLEMASK *mask) { return im_conv_f(in, out, mask); } int im_convf_raw(IMAGE *in, IMAGE *out, DOUBLEMASK *mask) { return im_conv_f_raw(in, out, mask); } int im_convsepf(IMAGE *in, IMAGE *out, DOUBLEMASK *mask) { return im_convsep_f(in, out, mask); } int im_convsepf_raw(IMAGE *in, IMAGE *out, DOUBLEMASK *mask) { return im_convsep_f_raw(in, out, mask); } gboolean im_isint(IMAGE *im) { return vips_bandfmt_isint(im->BandFmt); } gboolean im_isuint(IMAGE *im) { return vips_bandfmt_isuint(im->BandFmt); } gboolean im_isfloat(IMAGE *im) { return vips_bandfmt_isfloat(im->BandFmt); } gboolean im_iscomplex(IMAGE *im) { return vips_band_format_iscomplex(im->BandFmt); } gboolean im_isscalar(IMAGE *im) { return !im_iscomplex(im); } int im_c2ps(IMAGE *in, IMAGE *out) { return im_abs(in, out); } int im_clip(IMAGE *in, IMAGE *out) { return im_clip2fmt(in, out, IM_BANDFMT_UCHAR); } int im_clip2c(IMAGE *in, IMAGE *out) { return im_clip2fmt(in, out, IM_BANDFMT_CHAR); } int im_clip2us(IMAGE *in, IMAGE *out) { return im_clip2fmt(in, out, IM_BANDFMT_USHORT); } int im_clip2s(IMAGE *in, IMAGE *out) { return im_clip2fmt(in, out, IM_BANDFMT_SHORT); } int im_clip2ui(IMAGE *in, IMAGE *out) { return im_clip2fmt(in, out, IM_BANDFMT_UINT); } int im_clip2i(IMAGE *in, IMAGE *out) { return im_clip2fmt(in, out, IM_BANDFMT_INT); } int im_clip2f(IMAGE *in, IMAGE *out) { return im_clip2fmt(in, out, IM_BANDFMT_FLOAT); } int im_clip2d(IMAGE *in, IMAGE *out) { return im_clip2fmt(in, out, IM_BANDFMT_DOUBLE); } int im_clip2cm(IMAGE *in, IMAGE *out) { return im_clip2fmt(in, out, IM_BANDFMT_COMPLEX); } int im_clip2dcm(IMAGE *in, IMAGE *out) { return im_clip2fmt(in, out, IM_BANDFMT_DPCOMPLEX); } int im_copy_from(IMAGE *in, IMAGE *out, im_arch_type architecture) { switch (architecture) { case IM_ARCH_NATIVE: return im_copy(in, out); case IM_ARCH_BYTE_SWAPPED: return im_copy_swap(in, out); case IM_ARCH_LSB_FIRST: return im_amiMSBfirst() ? im_copy_swap(in, out) : im_copy(in, out); case IM_ARCH_MSB_FIRST: return im_amiMSBfirst() ? im_copy(in, out) : im_copy_swap(in, out); default: im_error("im_copy_from", _("bad architecture: %d"), architecture); return -1; } } /* Check whether arch corresponds to native byte order. */ gboolean im_isnative(im_arch_type arch) { switch (arch) { case IM_ARCH_NATIVE: return TRUE; case IM_ARCH_BYTE_SWAPPED: return FALSE; case IM_ARCH_LSB_FIRST: return !im_amiMSBfirst(); case IM_ARCH_MSB_FIRST: return im_amiMSBfirst(); default: g_assert(0); } /* Keep -Wall happy. */ return -1; } int im_iterate(IMAGE *im, im_start_fn start, im_generate_fn generate, im_stop_fn stop, void *b, void *c) { return vips_sink(im, start, (VipsGenerateFn) generate, stop, b, c); } int im_render_priority(IMAGE *in, IMAGE *out, IMAGE *mask, int width, int height, int max, int priority, notify_fn notify, void *client) { return vips_sink_screen(in, out, mask, width, height, max, priority, notify, client); } /** * im_circle: * @im: image to draw on * @cx: centre of circle * @cy: centre of circle * @radius: circle radius * @intensity: value to draw * * Draws a circle on a 1-band 8-bit image. * * This an inplace operation, so @im is changed. It does not thread and will * not work well as part of a pipeline. On 32-bit machines it will be limited * to 2GB images. * * See also: im_fastline(). * * Returns: 0 on success, or -1 on error. */ int im_circle(IMAGE *im, int cx, int cy, int radius, int intensity) { PEL ink[1]; if (im_rwcheck(im) || im_check_uncoded("im_circle", im) || im_check_mono("im_circle", im) || im_check_format("im_circle", im, IM_BANDFMT_UCHAR)) return -1; ink[0] = intensity; return im_draw_circle(im, cx, cy, radius, FALSE, ink); } /* A flood blob we can call from nip. Grr! Should be a way to wrap these * automatically. Maybe nip could do it if it sees a RW image argument? */ int im_flood_copy(IMAGE *in, IMAGE *out, int x, int y, PEL *ink) { IMAGE *t; if (!(t = im_open_local(out, "im_flood_blob_copy", "t")) || im_copy(in, t) || im_flood(t, x, y, ink, NULL) || im_copy(t, out)) return -1; return 0; } int im_flood_blob_copy(IMAGE *in, IMAGE *out, int x, int y, PEL *ink) { IMAGE *t; if (!(t = im_open_local(out, "im_flood_blob_copy", "t")) || im_copy(in, t) || im_flood_blob(t, x, y, ink, NULL) || im_copy(t, out)) return -1; return 0; } int im_flood_other_copy(IMAGE *test, IMAGE *mark, IMAGE *out, int x, int y, int serial) { IMAGE *t; if (!(t = im_open_local(out, "im_flood_other_copy", "t")) || im_copy(mark, t) || im_flood_other(test, t, x, y, serial, NULL) || im_copy(t, out)) return -1; return 0; } int im_paintrect(IMAGE *im, Rect *r, PEL *ink) { return im_draw_rect(im, r->left, r->top, r->width, r->height, 1, ink); } int im_insertplace(IMAGE *main, IMAGE *sub, int x, int y) { return im_draw_image(main, sub, x, y); } int im_fastline(IMAGE *im, int x1, int y1, int x2, int y2, PEL *pel) { return im_draw_line(im, x1, y1, x2, y2, pel); } int im_fastlineuser(IMAGE *im, int x1, int y1, int x2, int y2, VipsPlotFn fn, void *client1, void *client2, void *client3) { return im_draw_line_user(im, x1, y1, x2, y2, fn, client1, client2, client3); } int im_plotmask(IMAGE *im, int ix, int iy, PEL *ink, PEL *mask, Rect *r) { IMAGE *mask_im; if (!(mask_im = im_image(mask, r->width, r->height, 1, IM_BANDFMT_UCHAR))) return -1; if (im_draw_mask(im, mask_im, ix + r->left, iy + r->top, ink)) { im_close(mask_im); return -1; } im_close(mask_im); return 0; } int im_readpoint(IMAGE *im, int x, int y, PEL *pel) { return im_read_point(im, x, y, pel); } int im_plotpoint(IMAGE *im, int x, int y, PEL *pel) { return im_draw_point(im, x, y, pel); } /* Smear a section of an IMAGE. As above, but shift it left a bit. */ int im_smear(IMAGE *im, int ix, int iy, Rect *r) { int x, y, a, b, c; int ba = im->Bands; int el = ba * im->Xsize; Rect area, image, clipped; double total[256]; if (im_rwcheck(im)) return -1; /* Don't do the margins. */ area = *r; area.left += ix; area.top += iy; image.left = 0; image.top = 0; image.width = im->Xsize; image.height = im->Ysize; im_rect_marginadjust(&image, -1); image.left--; im_rect_intersectrect(&area, &image, &clipped); /* Any left? */ if (im_rect_isempty(&clipped)) return 0; /* What we do for each type. */ #define SMEAR(TYPE) \ for (y = clipped.top; y < clipped.top + clipped.height; y++) \ for (x = clipped.left; \ x < clipped.left + clipped.width; x++) { \ TYPE *to = (TYPE *) im->data + x * ba + y * el; \ TYPE *from = to - el; \ TYPE *f; \ \ for (a = 0; a < ba; a++) \ total[a] = 0.0; \ \ for (a = 0; a < 3; a++) { \ f = from; \ for (b = 0; b < 3; b++) \ for (c = 0; c < ba; c++) \ total[c] += *f++; \ from += el; \ } \ \ for (a = 0; a < ba; a++) \ to[a] = (40 * (double) to[a + ba] + total[a]) / 49.0; \ } /* Loop through the remaining pixels. */ switch (im->BandFmt) { case IM_BANDFMT_UCHAR: SMEAR(unsigned char); break; case IM_BANDFMT_CHAR: SMEAR(char); break; case IM_BANDFMT_USHORT: SMEAR(unsigned short); break; case IM_BANDFMT_SHORT: SMEAR(short); break; case IM_BANDFMT_UINT: SMEAR(unsigned int); break; case IM_BANDFMT_INT: SMEAR(int); break; case IM_BANDFMT_FLOAT: SMEAR(float); break; case IM_BANDFMT_DOUBLE: SMEAR(double); break; /* Do complex types too. Just treat as float and double, but with * twice the number of bands. */ case IM_BANDFMT_COMPLEX: /* Twice number of bands: double size and bands. */ ba *= 2; el *= 2; SMEAR(float); break; case IM_BANDFMT_DPCOMPLEX: /* Twice number of bands: double size and bands. */ ba *= 2; el *= 2; SMEAR(double); break; default: im_error("im_smear", "%s", _("unknown band format")); return -1; } return 0; } int im_smudge(VipsImage *image, int ix, int iy, Rect *r) { return im_draw_smudge(image, r->left + ix, r->top + iy, r->width, r->height); } int im_flood(IMAGE *im, int x, int y, PEL *ink, Rect *dout) { return im_draw_flood(im, x, y, ink, dout); } int im_flood_blob(IMAGE *im, int x, int y, PEL *ink, Rect *dout) { return im_draw_flood_blob(im, x, y, ink, dout); } int im_flood_other(IMAGE *test, IMAGE *mark, int x, int y, int serial, Rect *dout) { return im_draw_flood_other(mark, test, x, y, serial, dout); } int vips_check_coding_rad(const char *domain, VipsImage *im) { return vips_check_coding(domain, im, VIPS_CODING_RAD); } int vips_check_coding_labq(const char *domain, VipsImage *im) { return vips_check_coding(domain, im, VIPS_CODING_LABQ); } int vips_check_bands_3ormore(const char *domain, VipsImage *im) { return vips_check_bands_atleast(domain, im, 3); } /* The old vips_info() stuff, now replaced by g_warning() / g_info(). */ int vips__info = 0; void vips_info_set(gboolean info) { vips__info = info; if (info) { const char *old; char *new; old = g_getenv("G_MESSAGES_DEBUG"); if (!old) old = ""; new = g_strdup_printf("%s VIPS", old); g_setenv("G_MESSAGES_DEBUG", new, TRUE); g_free(new); } } void vips_vinfo(const char *domain, const char *fmt, va_list ap) { if (vips__info) { g_mutex_lock(vips__global_lock); (void) fprintf(stderr, _("%s: "), _("info")); if (domain) (void) fprintf(stderr, _("%s: "), domain); (void) vfprintf(stderr, fmt, ap); (void) fprintf(stderr, "\n"); g_mutex_unlock(vips__global_lock); } } void vips_info(const char *domain, const char *fmt, ...) { va_list ap; va_start(ap, fmt); vips_vinfo(domain, fmt, ap); va_end(ap); } void vips_vwarn(const char *domain, const char *fmt, va_list ap) { if (!g_getenv("IM_WARNING") && !g_getenv("VIPS_WARNING")) { g_mutex_lock(vips__global_lock); (void) fprintf(stderr, _("%s: "), _("vips warning")); if (domain) (void) fprintf(stderr, _("%s: "), domain); (void) vfprintf(stderr, fmt, ap); (void) fprintf(stderr, "\n"); g_mutex_unlock(vips__global_lock); } if (vips__fatal) vips_error_exit("vips__fatal"); } void vips_warn(const char *domain, const char *fmt, ...) { va_list ap; va_start(ap, fmt); vips_vwarn(domain, fmt, ap); va_end(ap); } /** * vips_autorot_get_angle: * @image: image to fetch orientation from * * This function is deprecated. Use vips_autorot() instead. */ VipsAngle vips_autorot_get_angle(VipsImage *im) { return VIPS_ANGLE_D0; } /* The old vips_free(), now replaced by g_free() and vips_area_free_cb(). */ int vips_free(void *buf) { g_free(buf); return 0; } /* Use vips_thread_isvips() instead. */ gboolean vips_thread_isworker(void) { return vips_thread_isvips(); } libvips-8.15.1/libvips/deprecated/resample_dispatch.c000066400000000000000000000135141454007373500226750ustar00rootroot00000000000000/* Function dispatch tables for mosaicing. * * J. Cupitt, 23/2/95 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include /* Args to im_rightshift_size. */ static im_arg_desc rightshift_size_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("xshift"), IM_INPUT_INT("yshift"), IM_INPUT_INT("band_fmt") }; /* Call im_rightshift_size via arg vector. */ static int rightshift_size_vec(im_object *argv) { IMAGE *in = (IMAGE *) argv[0]; IMAGE *out = (IMAGE *) argv[1]; int *xshift = (int *) argv[2]; int *yshift = (int *) argv[3]; int *band_fmt = (int *) argv[4]; return im_rightshift_size(in, out, *xshift, *yshift, *band_fmt); } /* Description of im_rightshift_size. */ static im_function rightshift_size_desc = { "im_rightshift_size", /* Name */ "decrease size by a power-of-two factor", IM_FN_PIO | IM_FN_TRANSFORM, /* Flags */ rightshift_size_vec, /* Dispatch function */ IM_NUMBER(rightshift_size_args), /* Size of arg list */ rightshift_size_args /* Arg list */ }; /* affinei args */ static im_arg_desc affinei_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INTERPOLATE("interpolate"), IM_INPUT_DOUBLE("a"), IM_INPUT_DOUBLE("b"), IM_INPUT_DOUBLE("c"), IM_INPUT_DOUBLE("d"), IM_INPUT_DOUBLE("dx"), IM_INPUT_DOUBLE("dy"), IM_INPUT_INT("x"), IM_INPUT_INT("y"), IM_INPUT_INT("w"), IM_INPUT_INT("h") }; /* Call im_affinei via arg vector. */ static int affinei_vec(im_object *argv) { VipsInterpolate *interpolate = VIPS_INTERPOLATE(argv[2]); double a = *((double *) argv[3]); double b = *((double *) argv[4]); double c = *((double *) argv[5]); double d = *((double *) argv[6]); double dx = *((double *) argv[7]); double dy = *((double *) argv[8]); int x = *((int *) argv[9]); int y = *((int *) argv[10]); int w = *((int *) argv[11]); int h = *((int *) argv[12]); return im_affinei(argv[0], argv[1], interpolate, a, b, c, d, dx, dy, x, y, w, h); } /* Description of im_affinei. */ static im_function affinei_desc = { "im_affinei", /* Name */ "affine transform", IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ affinei_vec, /* Dispatch function */ IM_NUMBER(affinei_args), /* Size of arg list */ affinei_args /* Arg list */ }; /* affinei_all args */ static im_arg_desc affinei_all_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_INTERPOLATE("interpolate"), IM_INPUT_DOUBLE("a"), IM_INPUT_DOUBLE("b"), IM_INPUT_DOUBLE("c"), IM_INPUT_DOUBLE("d"), IM_INPUT_DOUBLE("dx"), IM_INPUT_DOUBLE("dy") }; /* Call im_affinei_all via arg vector. */ static int affinei_all_vec(im_object *argv) { VipsInterpolate *interpolate = VIPS_INTERPOLATE(argv[2]); double a = *((double *) argv[3]); double b = *((double *) argv[4]); double c = *((double *) argv[5]); double d = *((double *) argv[6]); double dx = *((double *) argv[7]); double dy = *((double *) argv[8]); return im_affinei_all(argv[0], argv[1], interpolate, a, b, c, d, dx, dy); } /* Description of im_affinei_all. */ static im_function affinei_all_desc = { "im_affinei_all", /* Name */ "affine transform of whole image", IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ affinei_all_vec, /* Dispatch function */ IM_NUMBER(affinei_all_args), /* Size of arg list */ affinei_all_args /* Arg list */ }; /* Args for im_shrink. */ static im_arg_desc shrink_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DOUBLE("xfac"), IM_INPUT_DOUBLE("yfac") }; /* Call im_shrink via arg vector. */ static int shrink_vec(im_object *argv) { double xshrink = *((double *) argv[2]); double yshrink = *((double *) argv[3]); return im_shrink(argv[0], argv[1], xshrink, yshrink); } /* Description of im_shrink. */ static im_function shrink_desc = { "im_shrink", /* Name */ "shrink image by xfac, yfac times", IM_FN_TRANSFORM | IM_FN_PIO, /* Flags */ shrink_vec, /* Dispatch function */ IM_NUMBER(shrink_args), /* Size of arg list */ shrink_args /* Arg list */ }; /* Args to im_stretch3. */ static im_arg_desc stretch3_args[] = { IM_INPUT_IMAGE("in"), IM_OUTPUT_IMAGE("out"), IM_INPUT_DOUBLE("xdisp"), IM_INPUT_DOUBLE("ydisp") }; /* Call im_stretch3 via arg vector. */ static int stretch3_vec(im_object *argv) { double xdisp = *((int *) argv[2]); double ydisp = *((int *) argv[3]); return im_stretch3(argv[0], argv[1], xdisp, ydisp); } /* Description of im_stretch3. */ static im_function stretch3_desc = { "im_stretch3", /* Name */ "stretch 3%, sub-pixel displace by xdisp/ydisp", IM_FN_PIO, /* Flags */ stretch3_vec, /* Dispatch function */ IM_NUMBER(stretch3_args), /* Size of arg list */ stretch3_args /* Arg list */ }; /* Package up all these functions. */ static im_function *resample_list[] = { &rightshift_size_desc, &shrink_desc, &stretch3_desc, &affinei_desc, &affinei_all_desc }; /* Package of functions. */ im_package im__resample = { "resample", IM_NUMBER(resample_list), resample_list }; libvips-8.15.1/libvips/deprecated/rotmask.c000066400000000000000000000064151454007373500206700ustar00rootroot00000000000000/* Functions to create offsets for rotating square masks. * * Author: N. Dessipris (Copyright, N. Dessipris 1991) * Written on: 08/05/1991 * Modified on: 28/05/1991 * 12/10/95 JC * - small revisions, needs rewriting really * 7/8/96 JC * - absolutely foul desp code revised * - many bugs and mem leaks fixed * 1/3/99 JC * - oops, fns were not preserving scale and offset * 1/12/10 * - allow any size mask for the 90 degree rotates by using im_rot90(). */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define PIM_RINT 1 */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include /* The type of the vips operations we support. */ typedef int (*vips_fn)(IMAGE *in, IMAGE *out); /* Pass a mask through a vips operation, eg. im_rot90(). */ static INTMASK * vapplyimask(INTMASK *in, const char *name, vips_fn fn) { IMAGE *x; IMAGE *t[2]; DOUBLEMASK *d[2]; INTMASK *out; if (!(x = im_open(name, "p"))) return NULL; if (!(d[0] = im_local_dmask(x, im_imask2dmask(in, name))) || im_open_local_array(x, t, 2, name, "p") || im_mask2vips(d[0], t[0]) || fn(t[0], t[1]) || !(d[1] = im_local_dmask(x, im_vips2mask(t[1], name))) || !(out = im_dmask2imask(d[1], name))) { im_close(x); return NULL; } im_close(x); out->scale = in->scale; out->offset = in->offset; return out; } static DOUBLEMASK * vapplydmask(DOUBLEMASK *in, const char *name, vips_fn fn) { IMAGE *x; IMAGE *t[2]; DOUBLEMASK *out; if (!(x = im_open(name, "p"))) return NULL; if (im_open_local_array(x, t, 2, name, "p") || im_mask2vips(in, t[0]) || fn(t[0], t[1]) || !(out = im_vips2mask(t[1], name))) { im_close(x); return NULL; } im_close(x); out->scale = in->scale; out->offset = in->offset; return out; } INTMASK * im_rotate_imask90(INTMASK *in, const char *filename) { return vapplyimask(in, filename, im_rot90); } DOUBLEMASK * im_rotate_dmask90(DOUBLEMASK *in, const char *filename) { return vapplydmask(in, filename, im_rot90); } static int im_rot45(IMAGE *in, IMAGE *out) { VipsImage *t; if (vips_rot45(in, &t, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } INTMASK * im_rotate_imask45(INTMASK *in, const char *filename) { return vapplyimask(in, filename, im_rot45); } DOUBLEMASK * im_rotate_dmask45(DOUBLEMASK *in, const char *filename) { return vapplydmask(in, filename, im_rot45); } libvips-8.15.1/libvips/deprecated/rw_mask.c000066400000000000000000000545351454007373500206610ustar00rootroot00000000000000/* read and write masks */ /* Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 29/04/1991 * Modified on: 10/8/1992, J.Cupitt * - Mask reading routines no longer fail if scale and offset are missing. * Instead, they set default values of scale=1, offset=0. * - Code tidied up, better error recovery. * - Bugs fixed in im_dup_*mask. No longer coredump. * - Bugs fixed in im_write_*mask. Now work for non-square matrices. * - im_copy_*mask_matrix, im_copy_matrix_*mask added: copy VIPS mask * structures into Numerical Recipies in C style matrices and vice * versa. Both structures should have been built before copy attempted. * See im_create_*mask, im_*mat_alloc. The matrix should be indexed by 0 * to size-1. * 9/7/93 JC * - some ANSIfication and tidies * - im_free_*mask() now return zero, so they can be used as close * callbacks. * 7/10/94 JC * - new IM_NEW(), IM_ARRAY() macros added * 27/4/95 JC * - oops! forgot to init IM_ARRAY() memory to zero * 7/8/96 JC * - im_scale_dmask() rewritten * 7/5/98 JC * - im_read_*mask() rewritten, now more robust * - im_write_*mask() rewritten * - new functions im_write_*mask_name() * 28/7/99 JC * - im_create_imaskv(), im_create_dmaskv() make masks and init from * varargs * - tabs allowed as column separators * 9/2/05 * - "," allowed as column separator ... helps CSV read * 31/5/06 * - use g_ascii_strtod() and friends * 2006-09-08 tcv * - add im_norm_dmask() * 1/9/09 * - move im_print_*mask() here * 12/11/09 * - reading a float mask with im_read_imask() produced an incorrect * error messagge * 21/10/10 * - gtk-doc * - you can use commas to separate header fields * - small cleanups * 30/11/10 * - im_scale_dmask() normalises to 20, not 100 ... we hit the fast * conv path more often * 24/1/10 * - oops, missing braces in write dmask removed spaces between items */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include /** * INTMASK: * @xsize: mask width * @ysize: mask height * @scale: mask scale factor * @offset: mask offset * @coeff: array of mask elements * @filename: the file this mask was read from, or should be written to * * An integer mask. * * @scale lets the mask represent fractional values: for * example, in integer convolution (see im_conv()) the result of the * convolution is divided by @scale and then added to @offset before being * written to the output image. * * @scale and @offset default to 1 and 0. Various functions, such as * im_conv(), will fail if @scale is zero. * * You can read and write the matrix elements in @coeff. */ /** * DOUBLEMASK: * @xsize: mask width * @ysize: mask height * @scale: mask scale factor * @offset: mask offset * @coeff: array of mask elements * @filename: the file this mask was read from, or should be written to * * A floating-point mask. * * As with #INTMASK, in convolution (see im_convf()) the result of the * convolution is divided by @scale and then added to @offset before being * written to the output image. * * @scale and @offset default to 1.0 and 0.0. Various functions, such as * im_conv(), will fail if @scale is zero. * * You can read and write the matrix elements in @coeff. */ /* Size of line buffer for reading. */ #define MAX_LINE (32768) /** * im_free_imask: * @in: mask to free * * Free mask structure and any attached arrays. Return zero, so we can use * these functions as close callbacks. * * See also: im_free_dmask(). * * Returns: zero. */ int im_free_imask(INTMASK *in) { if (!in) return 0; IM_FREE(in->coeff); IM_FREE(in->filename); IM_FREE(in); return 0; } /** * im_free_dmask: * @in: mask to free * * Free mask structure and any attached arrays. Return zero, so we can use * these functions as close callbacks. * * See also: im_free_dmask(). * * Returns: zero. */ int im_free_dmask(DOUBLEMASK *in) { if (!in) return 0; IM_FREE(in->coeff); IM_FREE(in->filename); IM_FREE(in); return 0; } /** * im_create_imask: * @filename: set mask filename to this * @xsize: mask width * @ysize: mask height * * Create an empty imask. You need to loop over @coeff to set the values. * * See also: im_create_imaskv(). * * Returns: The newly-allocated mask. */ INTMASK * im_create_imask(const char *filename, int xsize, int ysize) { INTMASK *out; int size = xsize * ysize; /* Check args. */ if (xsize <= 0 || ysize <= 0 || filename == NULL) { im_error("im_create_imask", "%s", _("bad arguments")); return NULL; } /* Allocate and initialise structure. */ if (!(out = IM_NEW(NULL, INTMASK))) return NULL; out->coeff = NULL; out->filename = NULL; out->scale = 1; out->offset = 0; out->xsize = 0; out->ysize = 0; if (!(out->coeff = IM_ARRAY(NULL, size, int))) { im_free_imask(out); return NULL; } (void) memset((char *) out->coeff, 0, size * sizeof(int)); if (!(out->filename = im_strdup(NULL, filename))) { im_free_imask(out); return NULL; } out->xsize = xsize; out->ysize = ysize; return out; } /** * im_create_imaskv: * @filename: set mask filename to this * @xsize: mask width * @ysize: mask height * @...: values to set for the mask * * Create an imask and initialise it from the function parameter list. * * See also: im_create_imask(). * * Returns: The newly-allocated mask. */ INTMASK * im_create_imaskv(const char *filename, int xsize, int ysize, ...) { va_list ap; INTMASK *out; int i; if (!(out = im_create_imask(filename, xsize, ysize))) return NULL; va_start(ap, ysize); for (i = 0; i < xsize * ysize; i++) out->coeff[i] = va_arg(ap, int); va_end(ap); return out; } /** * im_create_dmask: * @filename: set mask filename to this * @xsize: mask width * @ysize: mask height * * Create an empty dmask. You need to loop over @coeff to set the values. * * See also: im_create_dmaskv(), im_vips2mask(). * * Returns: The newly-allocated mask. */ DOUBLEMASK * im_create_dmask(const char *filename, int xsize, int ysize) { DOUBLEMASK *out; int size = xsize * ysize; /* Check args. */ if (xsize <= 0 || ysize <= 0 || filename == NULL) { im_error("im_create_dmask", "%s", _("bad arguments")); return NULL; } /* Allocate and initialise structure. */ if (!(out = IM_NEW(NULL, DOUBLEMASK))) return NULL; out->coeff = NULL; out->filename = NULL; out->scale = 1.0; out->offset = 0.0; out->xsize = 0; out->ysize = 0; if (!(out->coeff = IM_ARRAY(NULL, size, double))) { im_free_dmask(out); return NULL; } (void) memset((char *) out->coeff, 0, size * sizeof(double)); if (!(out->filename = im_strdup(NULL, filename))) { im_free_dmask(out); return NULL; } out->xsize = xsize; out->ysize = ysize; return out; } /** * im_create_dmaskv: * @filename: set mask filename to this * @xsize: mask width * @ysize: mask height * @...: values to set for the mask * * Create a dmask and initialise it from the function parameter list. * * See also: im_create_dmask(). * * Returns: The newly-allocated mask. */ DOUBLEMASK * im_create_dmaskv(const char *filename, int xsize, int ysize, ...) { va_list ap; DOUBLEMASK *out; int i; if (!(out = im_create_dmask(filename, xsize, ysize))) return NULL; va_start(ap, ysize); for (i = 0; i < xsize * ysize; i++) out->coeff[i] = va_arg(ap, double); va_end(ap); return out; } /* Read a line from a file! */ static int get_line(FILE *fp, char *buf) { if (!fgets(buf, MAX_LINE, fp)) { im_error("read_mask", "%s", _("unexpected EOF")); return -1; } return 0; } /* width, height, optional scale, optional offset. */ static int read_header(FILE *fp, int *xs, int *ys, double *scale, double *offset) { char buf[MAX_LINE]; char *p, *q; double v[4]; int i; /* Read the first line: should contain size and optional * scale + offset. */ if (get_line(fp, buf)) return -1; /* Read as space separated doubles. \n is in the break list because * our line will (usually) have a trailing \n which we want to count * as whitespace. */ p = buf; for (i = 0, p = buf; i < 4 && (q = im_break_token(p, " \";,\t\n")); i++, p = q) v[i] = g_ascii_strtod(p, NULL); if ((i != 2 && i != 4) || ceil(v[0]) != v[0] || ceil(v[1]) != v[1] || v[0] <= 0 || v[1] <= 0) { im_error("read_header", "%s", _("error reading matrix header")); return -1; } if (i == 4 && v[2] == 0) { im_error("read_header", "%s", _("scale should be non-zero")); return -1; } *xs = v[0]; *ys = v[1]; if (i == 2) { *scale = 1.0; *offset = 0.0; } else { *scale = v[2]; *offset = v[3]; } return 0; } /** * im_read_dmask: * @filename: read matrix from this file * * Reads a matrix from a file. * * Matrix files have a simple format that's supposed to be easy to create with * a text editor or a spreadsheet. * * The first line has four numbers for width, height, scale and * offset (scale and offset may be omitted, in which case they default to 1.0 * and 0.0). Scale must be non-zero. Width and height must be positive * integers. The numbers are separated by any mixture of spaces, commas, * tabs and quotation marks ("). The scale and offset fields may be * floating-point, and must use '.' * as a decimal separator. * * Subsequent lines each hold one line of matrix data, with numbers again * separated by any mixture of spaces, commas, * tabs and quotation marks ("). The numbers may be floating-point, and must * use '.' * as a decimal separator. * * Extra characters at the ends of lines or at the end of the file are * ignored. * * See also: im_read_imask(), im_gauss_dmask(). * * Returns: the loaded mask on success, or NULL on error. */ DOUBLEMASK * im_read_dmask(const char *filename) { FILE *fp; double sc, off; int xs, ys; DOUBLEMASK *out; int x, y, i; char buf[MAX_LINE]; if (!(fp = im__file_open_read(filename, NULL, TRUE))) return NULL; if (read_header(fp, &xs, &ys, &sc, &off)) { fclose(fp); return NULL; } if (!(out = im_create_dmask(filename, xs, ys))) { fclose(fp); return NULL; } out->scale = sc; out->offset = off; for (i = 0, y = 0; y < ys; y++) { char *p; if (get_line(fp, buf)) { im_free_dmask(out); fclose(fp); return NULL; } for (p = buf, x = 0; p && x < xs; x++, i++, p = im_break_token(p, " \t,\";")) out->coeff[i] = g_ascii_strtod(p, NULL); } fclose(fp); return out; } /** * im_read_imask: * @filename: read matrix from this file * * Reads an integer matrix from a file. * * This function works exactly as im_read_dmask(), but the loaded matrix is * checked for 'int-ness'. All coefficients must be integers, and scale and * offset must be integers. * * See also: im_read_dmask(). * * Returns: the loaded mask on success, or NULL on error. */ INTMASK * im_read_imask(const char *filename) { DOUBLEMASK *dmask; INTMASK *imask; int i; if (!(dmask = im_read_dmask(filename))) return NULL; if (ceil(dmask->scale) != dmask->scale || ceil(dmask->offset) != dmask->offset) { im_error("im_read_imask", "%s", _("scale and offset should be int")); im_free_dmask(dmask); return NULL; } for (i = 0; i < dmask->xsize * dmask->ysize; i++) if (ceil(dmask->coeff[i]) != dmask->coeff[i]) { im_error("im_read_imask", _("ceofficient at " "position (%d, %d) is not int"), i % dmask->xsize, i / dmask->xsize); im_free_dmask(dmask); return NULL; } if (!(imask = im_create_imask(filename, dmask->xsize, dmask->ysize))) { im_free_dmask(dmask); return NULL; } imask->scale = dmask->scale; imask->offset = dmask->offset; for (i = 0; i < dmask->xsize * dmask->ysize; i++) imask->coeff[i] = dmask->coeff[i]; im_free_dmask(dmask); return imask; } /** * im_scale_dmask: * @in: mask to scale * @filename: filename for returned mask * * Scale the dmask to make an imask with a maximum value of 20. * * See also: im_norm_dmask(). * * Returns: the converted mask, or NULL on error. */ INTMASK * im_scale_dmask(DOUBLEMASK *in, const char *filename) { const int size = in->xsize * in->ysize; INTMASK *out; double maxval, dsum; int i; int isum; if (im_check_dmask("im_scale_dmask", in) || !(out = im_create_imask(filename, in->xsize, in->ysize))) return NULL; /* Find mask max. */ maxval = in->coeff[0]; for (i = 0; i < size; i++) if (in->coeff[i] > maxval) maxval = in->coeff[i]; /* Copy and scale, setting max to 20. */ for (i = 0; i < size; i++) out->coeff[i] = IM_RINT(in->coeff[i] * 20.0 / maxval); out->offset = in->offset; /* Set the scale to match the adjustment to max. */ isum = 0; dsum = 0.0; for (i = 0; i < size; i++) { isum += out->coeff[i]; dsum += in->coeff[i]; } if (dsum == in->scale) out->scale = isum; else if (dsum == 0.0) out->scale = 1.0; else out->scale = IM_RINT(in->scale * isum / dsum); return out; } /** * im_dmask2imask: * @in: mask to convert * @filename: filename for returned mask * * Make an imask from the dmask, rounding to nearest. * * See also: im_scale_dmask(). * * Returns: the converted mask, or NULL on error. */ INTMASK * im_dmask2imask(DOUBLEMASK *in, const char *filename) { const int size = in->xsize * in->ysize; INTMASK *out; int i; if (im_check_dmask("im_dmask2imask", in) || !(out = im_create_imask(filename, in->xsize, in->ysize))) return NULL; for (i = 0; i < size; i++) out->coeff[i] = IM_RINT(in->coeff[i]); out->offset = IM_RINT(in->offset); out->scale = IM_RINT(in->scale); return out; } /** * im_imask2dmask: * @in: mask to convert * @filename: filename for returned mask * * Make a dmask from the imask. * * See also: im_dmask2imask(). * * Returns: the converted mask, or NULL on error. */ DOUBLEMASK * im_imask2dmask(INTMASK *in, const char *filename) { const int size = in->xsize * in->ysize; DOUBLEMASK *out; int i; if (im_check_imask("im_imask2dmask", in) || !(out = im_create_dmask(filename, in->xsize, in->ysize))) return NULL; for (i = 0; i < size; i++) out->coeff[i] = in->coeff[i]; out->offset = in->offset; out->scale = in->scale; return out; } /** * im_norm_dmask: * @mask: mask to scale * * Normalise the dmask. Apply the scale and offset to each element to make * a mask with scale 1, offset zero. * * See also: im_scale_dmask(). * * Returns: 0 on success, or -1 on error. */ void im_norm_dmask(DOUBLEMASK *mask) { const int n = mask->xsize * mask->ysize; const double scale = (mask->scale == 0) ? 0 : (1.0 / mask->scale); int i; if (im_check_dmask("im_norm_dmask", mask) || (1.0 == scale && 0.0 == mask->offset)) return; for (i = 0; i < n; i++) mask->coeff[i] = mask->coeff[i] * scale + mask->offset; mask->scale = 1.0; mask->offset = 0.0; } /** * im_dup_imask: * @in: mask to duplicate * @filename: filename to set for the new mask * * Duplicate an imask. * * See also: im_dup_dmask(). * * Returns: the mask copy, or NULL on error. */ INTMASK * im_dup_imask(INTMASK *in, const char *filename) { INTMASK *out; int i; if (im_check_imask("im_dup_imask", in) || !(out = im_create_imask(filename, in->xsize, in->ysize))) return NULL; out->offset = in->offset; out->scale = in->scale; for (i = 0; i < in->xsize * in->ysize; i++) out->coeff[i] = in->coeff[i]; return out; } /** * im_dup_dmask: * @in: mask to duplicate * @filename: filename to set for the new mask * * Duplicate a dmask. * * See also: im_dup_imask(). * * Returns: the mask copy, or NULL on error. */ DOUBLEMASK * im_dup_dmask(DOUBLEMASK *in, const char *filename) { DOUBLEMASK *out; int i; if (im_check_dmask("im_dup_dmask", in) || !(out = im_create_dmask(filename, in->xsize, in->ysize))) return NULL; out->offset = in->offset; out->scale = in->scale; for (i = 0; i < in->xsize * in->ysize; i++) out->coeff[i] = in->coeff[i]; return out; } /* Write to file. */ static int write_line(FILE *fp, const char *fmt, ...) { va_list ap; va_start(ap, fmt); if (!vfprintf(fp, fmt, ap)) { im_error("write_mask", "%s", _("write error, disc full?")); return -1; } va_end(ap); return 0; } static int write_double(FILE *fp, double d) { char buf[G_ASCII_DTOSTR_BUF_SIZE]; fprintf(fp, "%s", g_ascii_dtostr(buf, sizeof(buf), d)); return 0; } /** * im_write_imask_name: * @in: mask to write * @filename: filename to write to * * Write an imask to a file. See im_read_dmask() for a description of the mask * file format. * * See also: im_write_imask(). * * Returns: 0 on success, or -1 on error. */ int im_write_imask_name(INTMASK *in, const char *filename) { FILE *fp; int x, y, i; if (im_check_imask("im_write_imask_name", in) || !(fp = im__file_open_write(filename, TRUE))) return -1; if (write_line(fp, "%d %d", in->xsize, in->ysize)) { fclose(fp); return -1; } if (in->scale != 1 || in->offset != 0) write_line(fp, " %d %d", in->scale, in->offset); write_line(fp, "\n"); for (i = 0, y = 0; y < in->ysize; y++) { for (x = 0; x < in->xsize; x++, i++) write_line(fp, "%d ", in->coeff[i]); if (write_line(fp, "\n")) { fclose(fp); return -1; } } fclose(fp); return 0; } /** * im_write_imask: * @in: mask to write * * Write an imask to a file. * * See also: im_write_imask_name(). * * Returns: 0 on success, or -1 on error. */ int im_write_imask(INTMASK *in) { if (!in->filename) { im_error("im_write_imask", "%s", _("filename not set")); return -1; } return im_write_imask_name(in, in->filename); } /** * im_write_dmask_name: * @in: mask to write * @filename: filename to write to * * Write a dmask to a file. See im_read_dmask() for a description of the mask * file format. * * See also: im_write_dmask(). * * Returns: 0 on success, or -1 on error. */ int im_write_dmask_name(DOUBLEMASK *in, const char *filename) { FILE *fp; int x, y, i; if (im_check_dmask("im_write_dmask_name", in) || !(fp = im__file_open_write(filename, TRUE))) return -1; if (write_line(fp, "%d %d", in->xsize, in->ysize)) { fclose(fp); return -1; } if (in->scale != 1.0 || in->offset != 0.0) { write_line(fp, " "); write_double(fp, in->scale); write_line(fp, " "); write_double(fp, in->offset); } write_line(fp, "\n"); for (i = 0, y = 0; y < in->ysize; y++) { for (x = 0; x < in->xsize; x++, i++) { write_double(fp, in->coeff[i]); write_line(fp, " "); } if (write_line(fp, "\n")) { fclose(fp); return -1; } } fclose(fp); return 0; } /** * im_write_dmask: * @in: mask to write * * Write a dmask to a file. See im_read_dmask() for a description of the mask * file format. * * See also: im_write_dmask_name(). * * Returns: 0 on success, or -1 on error. */ int im_write_dmask(DOUBLEMASK *in) { if (!in->filename) { im_error("im_write_dmask", "%s", _("filename not set")); return -1; } return im_write_dmask_name(in, in->filename); } /* Copy an imask into a matrix. Only used internally by matrix package for * invert. */ void im_copy_imask_matrix(INTMASK *mask, int **matrix) { int x, y; int *p = mask->coeff; for (y = 0; y < mask->ysize; y++) for (x = 0; x < mask->xsize; x++) matrix[x][y] = *p++; } /* Copy a matrix into an imask. */ void im_copy_matrix_imask(int **matrix, INTMASK *mask) { int x, y; int *p = mask->coeff; for (y = 0; y < mask->ysize; y++) for (x = 0; x < mask->xsize; x++) *p++ = matrix[x][y]; } /* Copy a dmask into a matrix. */ void im_copy_dmask_matrix(DOUBLEMASK *mask, double **matrix) { int x, y; double *p = mask->coeff; for (y = 0; y < mask->ysize; y++) for (x = 0; x < mask->xsize; x++) matrix[x][y] = *p++; } /* Copy a matrix to a dmask. */ void im_copy_matrix_dmask(double **matrix, DOUBLEMASK *mask) { int x, y; double *p = mask->coeff; for (y = 0; y < mask->ysize; y++) for (x = 0; x < mask->xsize; x++) *p++ = matrix[x][y]; } /** * im_print_imask: * @in: mask to print * * Print an imask to stdout. * * See also: im_print_dmask(). */ void im_print_imask(INTMASK *in) { int i, j, k; printf("%s: %d %d %d %d\n", in->filename, in->xsize, in->ysize, in->scale, in->offset); for (k = 0, j = 0; j < in->ysize; j++) { for (i = 0; i < in->xsize; i++, k++) printf("%d\t", in->coeff[k]); printf("\n"); } } /** * im_print_dmask: * @in: mask to print * * Print a dmask to stdout. * * See also: im_print_imask(). */ void im_print_dmask(DOUBLEMASK *in) { int i, j, k; printf("%s: %d %d %f %f\n", in->filename, in->xsize, in->ysize, in->scale, in->offset); for (k = 0, j = 0; j < in->ysize; j++) { for (i = 0; i < in->xsize; i++, k++) printf("%f\t", in->coeff[k]); printf("\n"); } } /** * im_local_dmask: * @out: image to make the mask local to * @mask: mask to local-ize * * @out takes ownership of @mask: when @out is closed, @mask will be closed * for you. If im_local_dmask() itself fails, the mask is also freed. * * See also: im_local_imask(). * * Returns: the mask, or NULL on error. */ DOUBLEMASK * im_local_dmask(VipsImage *out, DOUBLEMASK *mask) { if (im_check_dmask("im_local_dmask", mask)) return NULL; if (im_add_close_callback(out, (im_callback_fn) im_free_dmask, mask, NULL)) { im_free_dmask(mask); return NULL; } return mask; } /** * im_local_imask: * @out: image to make the mask local to * @mask: mask to local-ize * * @out takes ownership of @mask: when @out is closed, @mask will be closed * for you. If im_local_imask() itself fails, the mask is also freed. * * See also: im_local_dmask(). * * Returns: the mask, or NULL on error. */ INTMASK * im_local_imask(VipsImage *out, INTMASK *mask) { if (im_check_imask("im_local_dmask", mask)) return NULL; if (im_add_close_callback(out, (im_callback_fn) im_free_imask, mask, NULL)) { im_free_imask(mask); return NULL; } return mask; } libvips-8.15.1/libvips/deprecated/tone.c000066400000000000000000000077651454007373500201660ustar00rootroot00000000000000/* Various functions relating to tone curve adjustment. * * Author: John Cupitt * Written on: 18/7/1995 * 17/9/96 JC * - restrictions on Ps, Pm, Ph relaxed * - restrictions on S, M, H relaxed * 25/7/01 JC * - patched for im_extract_band() change * 11/7/04 * - generalised to im_tone_build_range() ... so you can use it for any * image, not just LabS * 26/3/10 * - cleanups * - gtkdoc */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include /** * im_tone_map: * @in: input image * @out: output image * @lut: look-up table * * Map the first channel of @in through @lut. If @in is IM_CODING_LABQ, unpack * to LABS, map L and then repack. * * @in should be a LABS or LABQ image for this to work * sensibly. * * See also: im_maplut(). * * Returns: 0 on success, -1 on error */ int im_tone_map(IMAGE *in, IMAGE *out, IMAGE *lut) { IMAGE *t[8]; if (im_check_hist("im_tone_map", lut) || im_open_local_array(out, t, 8, "im_tone_map", "p")) return -1; /* If in is IM_CODING_LABQ, unpack. */ if (in->Coding == IM_CODING_LABQ) { if (im_LabQ2LabS(in, t[0])) return -1; } else t[0] = in; /* Split into bands. */ if (im_extract_band(t[0], t[1], 0)) return -1; if (t[0]->Bands > 1) { if (im_extract_bands(t[0], t[2], 1, t[0]->Bands - 1)) return -1; } /* Map L. */ if (im_maplut(t[1], t[3], lut)) return -1; /* Recombine bands. */ if (t[0]->Bands > 1) { if (im_bandjoin(t[3], t[2], t[4])) return -1; } else t[4] = t[3]; /* If input was LabQ, repack. */ if (in->Coding == IM_CODING_LABQ) { if (im_LabS2LabQ(t[4], t[5])) return -1; } else t[5] = t[4]; return im_copy(t[4], out); } /** * im_tone_analyse: * @in: input image * @out: output image * @Ps: shadow point (eg. 0.2) * @Pm: mid-tone point (eg. 0.5) * @Ph: highlight point (eg. 0.8) * @S: shadow adjustment (+/- 30) * @M: mid-tone adjustment (+/- 30) * @H: highlight adjustment (+/- 30) * * As im_tone_build(), but analyse the histogram of @in and use it to * pick the 0.1% and 99.9% points for @Lb and @Lw. * * See also: im_tone_build(). * * Returns: 0 on success, -1 on error */ int im_tone_analyse( IMAGE *in, IMAGE *out, double Ps, double Pm, double Ph, double S, double M, double H) { IMAGE *t[4]; int low, high; double Lb, Lw; if (im_open_local_array(out, t, 4, "im_tone_map", "p")) return -1; /* If in is IM_CODING_LABQ, unpack. */ if (in->Coding == IM_CODING_LABQ) { if (im_LabQ2LabS(in, t[0])) return -1; } else t[0] = in; /* Should now be 3-band short. */ if (im_check_uncoded("im_tone_analyse", t[0]) || im_check_bands("im_tone_analyse", t[0], 3) || im_check_format("im_tone_analyse", t[0], IM_BANDFMT_SHORT)) return -1; if (im_extract_band(t[0], t[1], 0) || im_clip2fmt(t[1], t[2], IM_BANDFMT_USHORT)) return -1; if (im_mpercent(t[2], 0.1 / 100.0, &high) || im_mpercent(t[2], 99.9 / 100.0, &low)) return -1; Lb = 100 * low / 32768; Lw = 100 * high / 32768; im_diag("im_tone_analyse", "set Lb = %g, Lw = %g", Lb, Lw); return im_tone_build(out, Lb, Lw, Ps, Pm, Ph, S, M, H); } libvips-8.15.1/libvips/deprecated/video_dispatch.c000066400000000000000000000057261454007373500222010ustar00rootroot00000000000000/* function dispatch tables for video */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include /** * SECTION: video * @short_description: various video grabbers * @see_also: image * @stability: Stable * @include: vips/vips.h * * Read an image from a video source. */ static int video_v4l1_vec(im_object *argv) { IMAGE *out = argv[0]; char *device = (char *) argv[1]; int channel = *((int *) argv[2]); int brightness = *((int *) argv[3]); int colour = *((int *) argv[4]); int contrast = *((int *) argv[5]); int hue = *((int *) argv[6]); int ngrabs = *((int *) argv[7]); return im_video_v4l1(out, device, channel, brightness, colour, contrast, hue, ngrabs); } static im_arg_desc video_v4l1_arg_types[] = { IM_OUTPUT_IMAGE("out"), IM_INPUT_STRING("device"), IM_INPUT_INT("channel"), IM_INPUT_INT("brightness"), IM_INPUT_INT("colour"), IM_INPUT_INT("contrast"), IM_INPUT_INT("hue"), IM_INPUT_INT("ngrabs") }; static im_function video_v4l1_desc = { "im_video_v4l1", /* Name */ "grab a video frame with v4l1", /* Description */ IM_FN_NOCACHE, /* Flags */ video_v4l1_vec, /* Dispatch function */ IM_NUMBER(video_v4l1_arg_types), /* Size of arg list */ video_v4l1_arg_types /* Arg list */ }; static int video_test_vec(im_object *argv) { IMAGE *out = argv[0]; int brightness = *((int *) argv[1]); int error = *((int *) argv[2]); return im_video_test(out, brightness, error); } static im_arg_desc video_test_arg_types[] = { IM_OUTPUT_IMAGE("out"), IM_INPUT_INT("brightness"), IM_INPUT_INT("error") }; static im_function video_test_desc = { "im_video_test", /* Name */ "test video grabber", /* Description */ IM_FN_NOCACHE, /* Flags */ video_test_vec, /* Dispatch function */ IM_NUMBER(video_test_arg_types), /* Size of arg list */ video_test_arg_types /* Arg list */ }; static im_function *video_list[] = { &video_test_desc, &video_v4l1_desc }; im_package im__video = { "video", /* Package name */ IM_NUMBER(video_list), /* Function list */ video_list }; libvips-8.15.1/libvips/deprecated/vips7compat.c000066400000000000000000003107411454007373500214640ustar00rootroot00000000000000/* compat stuff for vips7 * * 4/3/11 * - hacked up */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include #include /* Split filename into name / mode components. name and mode should both be * FILENAME_MAX chars. * * We look for the ':' splitting the name and mode by searching for the * rightmost occurrence of the regexp "\.[A-Za-z0-9]+:". The initial dot can * be missing if there's a dirsep or start of string, meaning this is a * filename without an extension. * * Examples: * * c:\silly:dir:name\fr:ed.tif:jpeg:95,,,,c:\icc\srgb.icc * -> c:\silly:dir:name\fr:ed.tif jpeg:95,,,,c:\icc\srgb.icc * I180: * -> I180 "" * c:\silly: * -> c:\silly "" * c:\silly * -> c:\silly "" * C:\fixtures\2569067123_aca715a2ee_o.jpg * -> C:\fixtures\2569067123_aca715a2ee_o.jpg "" * * vips8 handles this in a much better way :( */ void im_filename_split(const char *path, char *name, char *mode) { char *p; size_t len; vips_strncpy(name, path, FILENAME_MAX); strcpy(mode, ""); if ((len = strlen(name)) == 0) return; /* Search backwards towards start, stopping at each ':' char. */ for (p = name + len - 1; p > name; p -= 1) if (*p == ':') { char *q; /* We are skipping back over the file extension, * isalnum() is probably sufficient. */ for (q = p - 1; isalnum(*q) && q > name; q -= 1) ; if (*q == '.') { break; } /* All the way back to the start? We probably have a * filename with no extension, eg. "I180:" */ if (q == name) break; /* .. or we could hit a dirsep. Allow win or nix * separators. */ if (*q == '/' || *q == '\\') break; } /* Ignore a ':' in column 1, it's probably a drive letter on a * Windows path. */ if (*p == ':' && p - name != 1) { vips_strncpy(mode, p + 1, FILENAME_MAX); *p = '\0'; } } /** * vips_path_filename7: * @path: path to split * * Return the filename part of a vips7 path. For testing only. */ char * vips_path_filename7(const char *path) { char name[FILENAME_MAX]; char mode[FILENAME_MAX]; im_filename_split(path, name, mode); return g_strdup(name); } /** * vips_path_mode7: * @path: path to split * * Return the mode part of a vips7 path. For testing only. */ char * vips_path_mode7(const char *path) { char name[FILENAME_MAX]; char mode[FILENAME_MAX]; im_filename_split(path, name, mode); return g_strdup(mode); } /* Skip any leading path stuff. Horrible: if this is a filename which came * from win32 and we're a *nix machine, it'll have '\\' not '/' as the * separator :-( * * Try to fudge this ... if the file doesn't contain any of our native * separators, look for the opposite one as well. If there are none of those * either, just return the filename. */ const char * im_skip_dir(const char *path) { char name[FILENAME_MAX]; char mode[FILENAME_MAX]; const char *p; const char *q; const char native_dir_sep = G_DIR_SEPARATOR; const char non_native_dir_sep = native_dir_sep == '/' ? '\\' : '/'; /* Remove any trailing save modifiers: we don't want '/' or '\' in the * modifier confusing us. */ im_filename_split(path, name, mode); /* The '\0' char at the end of the string. */ p = name + strlen(name); /* Search back for the first native dir sep, or failing that, the first * non-native dir sep. */ for (q = p; q > name && q[-1] != native_dir_sep; q--) ; if (q == name) for (q = p; q > name && q[-1] != non_native_dir_sep; q--) ; return path + (q - name); } /* Extract suffix from filename, ignoring any mode string. Suffix should be * FILENAME_MAX chars. Include the "." character, if any. */ void im_filename_suffix(const char *path, char *suffix) { char name[FILENAME_MAX]; char mode[FILENAME_MAX]; char *p; im_filename_split(path, name, mode); if ((p = strrchr(name, '.'))) strcpy(suffix, p); else strcpy(suffix, ""); } /* Does a filename have one of a set of suffixes. Ignore case. */ int im_filename_suffix_match(const char *path, const char *suffixes[]) { char suffix[FILENAME_MAX]; const char **p; im_filename_suffix(path, suffix); for (p = suffixes; *p; p++) if (g_ascii_strcasecmp(suffix, *p) == 0) return 1; return 0; } /* p points to the start of a buffer ... move it on through the buffer (ready * for the next call), and return the current option (or NULL for option * missing). ',' characters inside options can be escaped with a '\'. */ char * im_getnextoption(char **in) { char *p; char *q; p = *in; q = p; if (!p || !*p) return NULL; /* Find the next ',' not prefixed with a '\'. If the first character * of p is ',', there can't be a previous escape character. */ for (;;) { if (!(p = strchr(p, ','))) break; if (p == q) break; if (p[-1] != '\\') break; p += 1; } if (p) { /* Another option follows this one .. set up to pick that out * next time. */ *p = '\0'; *in = p + 1; } else { /* This is the last one. */ *in = NULL; } if (strlen(q) > 0) return q; else return NULL; } /* Get a suboption string, or NULL. */ char * im_getsuboption(const char *buf) { char *p, *q, *r; if (!(p = strchr(buf, ':'))) /* No suboption. */ return NULL; /* Step over the ':'. */ p += 1; /* Need to unescape any \, pairs. Shift stuff down one if we find one. */ for (q = p; *q; q++) if (q[0] == '\\' && q[1] == ',') for (r = q; *r; r++) r[0] = r[1]; return p; } VipsImage * im_open(const char *filename, const char *mode) { VipsImage *image; vips_check_init(); /* We have to go via the old VipsFormat system so we can support the * "filename:option" syntax. * * Use "rs" to turn on seq mode. */ if (strcmp(mode, "r") == 0 || strcmp(mode, "rd") == 0) { if (!(image = vips__deprecated_open_read(filename, FALSE))) return NULL; } else if (strcmp(mode, "rs") == 0) { if (!(image = vips__deprecated_open_read(filename, TRUE))) return NULL; } else if (strcmp(mode, "w") == 0) { if (!(image = vips__deprecated_open_write(filename))) return NULL; } else { if (!(image = vips_image_new_mode(filename, mode))) return NULL; } return image; } /* Just for compatibility. New code should use vips_object_local() directly. */ VipsImage * im_open_local(VipsImage *parent, const char *filename, const char *mode) { VipsImage *image; if (!(image = im_open(filename, mode))) return NULL; vips_object_local(parent, image); return image; } /* Just for compatibility. New code should use vips_object_local_array(). */ int im_open_local_array(VipsImage *parent, VipsImage **images, int n, const char *filename, const char *mode) { int i; for (i = 0; i < n; i++) if (!(images[i] = im_open_local(parent, filename, mode))) return -1; return 0; } typedef struct { im_callback_fn fn; void *a; void *b; } Callback; static void im_add_callback_cb(VipsImage *im, Callback *callback) { if (callback->fn(callback->a, callback->b)) vips_image_set_kill(im, TRUE); } int im_add_callback(VipsImage *im, const char *name, im_callback_fn fn, void *a, void *b) { Callback *callback; callback = VIPS_NEW(VIPS_OBJECT(im), Callback); callback->fn = fn; callback->a = a; callback->b = b; g_signal_connect(im, name, G_CALLBACK(im_add_callback_cb), callback); return 0; } static void im_add_callback_cb1(VipsImage *im, void *x, Callback *callback) { if (callback->fn(callback->a, callback->b)) vips_image_set_kill(im, TRUE); } int im_add_callback1(VipsImage *im, const char *name, im_callback_fn fn, void *a, void *b) { Callback *callback; callback = VIPS_NEW(VIPS_OBJECT(im), Callback); callback->fn = fn; callback->a = a; callback->b = b; g_signal_connect(im, name, G_CALLBACK(im_add_callback_cb1), callback); return 0; } /* Make something local to an image descriptor ... pass in a constructor * and a destructor, plus three args. */ void * im_local(IMAGE *im, im_construct_fn cons, im_callback_fn dest, void *a, void *b, void *c) { void *obj; if (!im) { im_error("im_local", "%s", _("NULL image descriptor")); return NULL; } if (!(obj = cons(a, b, c))) return NULL; if (im_add_close_callback(im, (im_callback_fn) dest, obj, a)) { dest(obj, a); return NULL; } return obj; } /* Make an array of things local to a descriptor ... eg. make 6 local temp * images. */ int im_local_array(IMAGE *im, void **out, int n, im_construct_fn cons, im_callback_fn dest, void *a, void *b, void *c) { int i; for (i = 0; i < n; i++) if (!(out[i] = im_local(im, cons, dest, a, b, c))) return -1; return 0; } int im_close(VipsImage *im) { g_object_unref(im); return 0; } /* edvips.c needs this */ VipsImage * im_init(const char *filename) { VipsImage *image; image = vips_image_new(); IM_SETSTR(image->filename, filename); return image; } /* We can't do this with a rename macro since the C++ interface needs * this entrypoint, see VImage.h. * * As a result our fancy ABI check will not work with the vips7 interface. */ int im_init_world(const char *argv0) { return vips_init(argv0); } /* Prettyprint various header fields. Just for vips7 compat, use * vips_enum_value() instead. */ const char * im_Type2char(VipsInterpretation type) { return vips_enum_string(VIPS_TYPE_INTERPRETATION, type); } const char * im_BandFmt2char(VipsBandFormat format) { return vips_enum_string(VIPS_TYPE_BAND_FORMAT, format); } const char * im_Coding2char(VipsCoding coding) { return vips_enum_string(VIPS_TYPE_CODING, coding); } const char * im_dtype2char(VipsImageType n) { return vips_enum_string(VIPS_TYPE_IMAGE_TYPE, n); } const char * im_dhint2char(VipsDemandStyle style) { return vips_enum_string(VIPS_TYPE_DEMAND_STYLE, style); } /* Old names for enums, for compat. */ static const char *im_Type[] = { "IM_TYPE_MULTIBAND", /* 0 */ "IM_TYPE_B_W", /* 1 */ "LUMINACE", /* 2 */ "XRAY", /* 3 */ "IR", /* 4 */ "YUV", /* 5 */ "RED_ONLY", /* 6 */ "GREEN_ONLY", /* 7 */ "BLUE_ONLY", /* 8 */ "POWER_SPECTRUM", /* 9 */ "IM_TYPE_HISTOGRAM", /* 10 */ "LUT", /* 11 */ "IM_TYPE_XYZ", /* 12 */ "IM_TYPE_LAB", /* 13 */ "CMC", /* 14 */ "IM_TYPE_CMYK", /* 15 */ "IM_TYPE_LABQ", /* 15 */ "IM_TYPE_RGB", /* 17 */ "IM_TYPE_UCS", /* 18 */ "IM_TYPE_LCH", /* 19 */ "IM_TYPE_LABS", /* 20 */ "", /* 21 */ "IM_TYPE_sRGB", /* 22 */ "IM_TYPE_YXY", /* 23 */ "IM_TYPE_FOURIER", /* 24 */ "IM_TYPE_RGB16", /* 25 */ "IM_TYPE_GREY16", /* 26 */ NULL }; static const char *im_BandFmt[] = { "IM_BANDFMT_UCHAR", "IM_BANDFMT_CHAR", "IM_BANDFMT_USHORT", "IM_BANDFMT_SHORT", "IM_BANDFMT_UINT", "IM_BANDFMT_INT", "IM_BANDFMT_FLOAT", "IM_BANDFMT_COMPLEX", "IM_BANDFMT_DOUBLE", "IM_BANDFMT_DPCOMPLEX", NULL }; static const char *im_Coding[] = { "IM_CODING_NONE", "COLQUANT8", "IM_CODING_LABQ", "IM_CODING_LABQ_COMPRESSED", "RGB_COMPRESSED", "LUM_COMPRESSED", "IM_CODING_RAD", NULL }; static const char *im_dtype[] = { "IM_NONE", "IM_SETBUF", "IM_SETBUF_FOREIGN", "IM_OPENIN", "IM_MMAPIN", "IM_MMAPINRW", "IM_OPENOUT", "IM_PARTIAL", NULL }; static const char *im_dhint[] = { "IM_SMALLTILE", "IM_FATSTRIP", "IM_THINSTRIP", "IM_ANY", NULL }; /* enum string to int, try the GEnum first, then use a compat *char[] for old * names. */ static int lookup_enum(GType type, const char *names[], const char *name) { GEnumClass *class; GEnumValue *value; int i; class = g_type_class_ref(type); if ((value = g_enum_get_value_by_nick(class, name))) return value->value; if ((value = g_enum_get_value_by_name(class, name))) return value->value; for (i = 0; names[i]; i++) if (g_ascii_strcasecmp(names[i], name) == 0) return i; return -1; } VipsInterpretation im_char2Type(const char *str) { return lookup_enum(VIPS_TYPE_INTERPRETATION, im_Type, str); } VipsBandFormat im_char2BandFmt(const char *str) { return lookup_enum(VIPS_TYPE_BAND_FORMAT, im_BandFmt, str); } VipsCoding im_char2Coding(const char *str) { return lookup_enum(VIPS_TYPE_CODING, im_Coding, str); } VipsImageType im_char2dtype(const char *str) { return lookup_enum(VIPS_TYPE_IMAGE_TYPE, im_dtype, str); } VipsDemandStyle im_char2dhint(const char *str) { return lookup_enum(VIPS_TYPE_DEMAND_STYLE, im_dhint, str); } /* Totally useless now. */ const char * im_Compression2char(int n) { return "NONE"; } int im_char2Compression(const char *str) { return -1; } /* Wrap one / many is being replaced by a class thing. */ typedef struct { im_wrapmany_fn fn; /* Function we call */ void *a, *b; /* User values for function */ } Bundle; /* Maximum number of input images -- why not? */ #define MAX_INPUT_IMAGES (64) /* Convert a VipsRegion. */ static int process_region(VipsRegion *out_region, void *seq, void *a, void *b) { VipsRegion **ir = (VipsRegion **) seq; Bundle *bun = (Bundle *) b; PEL *p[MAX_INPUT_IMAGES], *q; int i, y; /* Prepare all input regions and make buffer pointers. */ if (vips_reorder_prepare_many(out_region->im, ir, &out_region->valid)) return -1; for (i = 0; ir[i]; i++) p[i] = (PEL *) VIPS_REGION_ADDR(ir[i], out_region->valid.left, out_region->valid.top); p[i] = NULL; q = (PEL *) VIPS_REGION_ADDR(out_region, out_region->valid.left, out_region->valid.top); /* Convert linewise. */ for (y = 0; y < out_region->valid.height; y++) { PEL *p1[MAX_INPUT_IMAGES]; /* Make a copy of p[] which the buffer function can mess up if * it wants. */ for (i = 0; ir[i]; i++) p1[i] = p[i]; /* Bizarre double-cast stops a bogus gcc 4.1 compiler warning. */ bun->fn((void **) ((void *) p1), q, out_region->valid.width, bun->a, bun->b); /* Move pointers on. */ for (i = 0; ir[i]; i++) p[i] += VIPS_REGION_LSKIP(ir[i]); q += VIPS_REGION_LSKIP(out_region); } return 0; } /* Make a copy of an array of input images. */ static IMAGE ** dupims(IMAGE *out, IMAGE **in) { IMAGE **new; int i, n; for (n = 0; in[n]; n++) ; new = VIPS_ARRAY(VIPS_OBJECT(out), n + 1, IMAGE *); for (i = 0; i < n; i++) new[i] = in[i]; new[n] = NULL; return new; } int im_wrapmany(IMAGE **in, IMAGE *out, im_wrapmany_fn fn, void *a, void *b) { Bundle *bun; int i, n; /* Count input images. */ for (n = 0; in[n]; n++) ; if (n >= MAX_INPUT_IMAGES - 1) { vips_error("im_wrapmany", "%s", _("too many input images")); return -1; } /* Save args. */ bun = VIPS_NEW(VIPS_OBJECT(out), Bundle); if (!(in = dupims(out, in))) return -1; bun->fn = fn; bun->a = a; bun->b = b; /* Check descriptors --- make sure that our caller has done this * correctly. */ for (i = 0; i < n; i++) { if (in[i]->Xsize != out->Xsize || in[i]->Ysize != out->Ysize) { vips_error("im_wrapmany", "%s", _("descriptors differ in size")); return -1; } /* Check io style. */ if (vips_image_pio_input(in[i])) return -1; } /* Don't call vips_image_pipeline_array(), we don't want to copy * fields. */ vips__demand_hint_array(out, VIPS_DEMAND_STYLE_THINSTRIP, in); if (vips__reorder_set_input(out, in)) return -1; /* Generate! */ if (vips_image_generate(out, vips_start_many, (VipsGenerateFn) process_region, vips_stop_many, in, bun)) return -1; return 0; } static void wrapone_gen(void **ins, void *out, int width, Bundle *bun, void *dummy) { ((im_wrapone_fn) (bun->fn))(ins[0], out, width, bun->a, bun->b); } int im_wrapone(IMAGE *in, IMAGE *out, im_wrapone_fn fn, void *a, void *b) { Bundle *bun; IMAGE *invec[2]; /* Heh, yuk. We cast back above. */ bun = VIPS_NEW(VIPS_OBJECT(out), Bundle); bun->fn = (im_wrapmany_fn) fn; bun->a = a; bun->b = b; invec[0] = in; invec[1] = NULL; return im_wrapmany(invec, out, (im_wrapmany_fn) wrapone_gen, bun, NULL); } static void wraptwo_gen(void **ins, void *out, int width, Bundle *bun, void *dummy) { ((im_wraptwo_fn) (bun->fn))(ins[0], ins[1], out, width, bun->a, bun->b); } int im_wraptwo(IMAGE *in1, IMAGE *in2, IMAGE *out, im_wraptwo_fn fn, void *a, void *b) { Bundle *bun; IMAGE *invec[3]; bun = VIPS_NEW(VIPS_OBJECT(out), Bundle); bun->fn = (im_wrapmany_fn) fn; bun->a = a; bun->b = b; invec[0] = in1; invec[1] = in2; invec[2] = NULL; return im_wrapmany(invec, out, (im_wrapmany_fn) wraptwo_gen, bun, NULL); } /* Save a bit of typing. */ #define UC IM_BANDFMT_UCHAR #define C IM_BANDFMT_CHAR #define US IM_BANDFMT_USHORT #define S IM_BANDFMT_SHORT #define UI IM_BANDFMT_UINT #define I IM_BANDFMT_INT #define F IM_BANDFMT_FLOAT #define X IM_BANDFMT_COMPLEX #define D IM_BANDFMT_DOUBLE #define DX IM_BANDFMT_DPCOMPLEX /* For two integer types, the "largest", ie. one which can represent the * full range of both. */ static int bandfmt_largest[6][6] = { /* UC C US S UI I */ /* UC */ { UC, S, US, S, UI, I }, /* C */ { S, C, I, S, I, I }, /* US */ { US, I, US, I, UI, I }, /* S */ { S, S, I, S, I, I }, /* UI */ { UI, I, UI, I, UI, I }, /* I */ { I, I, I, I, I, I } }; /* For two formats, find one which can represent the full range of both. */ static VipsBandFmt im__format_common(VipsBandFmt in1, VipsBandFmt in2) { if (vips_band_format_iscomplex(in1) || vips_band_format_iscomplex(in2)) { /* What kind of complex? */ if (in1 == IM_BANDFMT_DPCOMPLEX || in2 == IM_BANDFMT_DPCOMPLEX) /* Output will be DPCOMPLEX. */ return IM_BANDFMT_DPCOMPLEX; else return IM_BANDFMT_COMPLEX; } else if (vips_bandfmt_isfloat(in1) || vips_bandfmt_isfloat(in2)) { /* What kind of float? */ if (in1 == IM_BANDFMT_DOUBLE || in2 == IM_BANDFMT_DOUBLE) return IM_BANDFMT_DOUBLE; else return IM_BANDFMT_FLOAT; } else /* Must be int+int -> int. */ return bandfmt_largest[in1][in2]; } int im__formatalike_vec(IMAGE **in, IMAGE **out, int n) { int i; VipsBandFmt fmt; g_assert(n >= 1); fmt = in[0]->BandFmt; for (i = 1; i < n; i++) fmt = im__format_common(fmt, in[i]->BandFmt); for (i = 0; i < n; i++) if (im_clip2fmt(in[i], out[i], fmt)) return -1; return 0; } int im__formatalike(IMAGE *in1, IMAGE *in2, IMAGE *out1, IMAGE *out2) { IMAGE *in[2]; IMAGE *out[2]; in[0] = in1; in[1] = in2; out[0] = out1; out[1] = out2; return im__formatalike_vec(in, out, 2); } /* Make an n-band image. Input 1 or n bands. */ int im__bandup(const char *domain, IMAGE *in, IMAGE *out, int n) { IMAGE *bands[256]; int i; if (in->Bands == n) return vips_image_write(in, out); if (in->Bands != 1) { im_error(domain, _("not one band or %d bands"), n); return -1; } if (n > 256 || n < 1) { im_error(domain, "%s", _("bad bands")); return -1; } for (i = 0; i < n; i++) bands[i] = in; return im_gbandjoin(bands, out, n); } int im__bandalike_vec(const char *domain, IMAGE **in, IMAGE **out, int n) { int i; int max_bands; g_assert(n >= 1); max_bands = in[0]->Bands; for (i = 1; i < n; i++) max_bands = IM_MAX(max_bands, in[i]->Bands); for (i = 0; i < n; i++) if (im__bandup(domain, in[i], out[i], max_bands)) return -1; return 0; } int im__bandalike(const char *domain, IMAGE *in1, IMAGE *in2, IMAGE *out1, IMAGE *out2) { IMAGE *in[2]; IMAGE *out[2]; in[0] = in1; in[1] = in2; out[0] = out1; out[1] = out2; if (im__bandalike_vec(domain, in, out, 2)) return -1; return 0; } /* This is deprecated to make room for highway. */ void vips_vector_init(void) { vips_error("vips_vector_init", "%s", _("deprecated")); } void vips_vector_free(VipsVector *vector) { vips_error("vips_vector_free", "%s", _("deprecated")); } VipsVector * vips_vector_new(const char *name, int dsize) { vips_error("vips_vector_new", "%s", _("deprecated")); return NULL; } void vips_vector_asm2(VipsVector *vector, const char *op, const char *a, const char *b) { vips_error("vips_vector_asm2", "%s", _("deprecated")); } void vips_vector_asm3(VipsVector *vector, const char *op, const char *a, const char *b, const char *c) { vips_error("vips_vector_asm3", "%s", _("deprecated")); } void vips_vector_constant(VipsVector *vector, char *name, int value, int size) { vips_error("vips_vector_constant", "%s", _("deprecated")); } void vips_vector_source_scanline(VipsVector *vector, char *name, int line, int size) { vips_error("vips_vector_source_scanline", "%s", _("deprecated")); } int vips_vector_source_name(VipsVector *vector, const char *name, int size) { vips_error("vips_vector_source_name", "%s", _("deprecated")); return -1; } void vips_vector_temporary(VipsVector *vector, const char *name, int size) { vips_error("vips_vector_temporary", "%s", _("deprecated")); } int vips_vector_parameter(VipsVector *vector, const char *name, int size) { vips_error("vips_vector_parameter", "%s", _("deprecated")); return -1; } int vips_vector_destination(VipsVector *vector, const char *name, int size) { vips_error("vips_vector_destination", "%s", _("deprecated")); return -1; } gboolean vips_vector_full(VipsVector *vector) { vips_error("vips_vector_full", "%s", _("deprecated")); return FALSE; } gboolean vips_vector_compile(VipsVector *vector) { vips_error("vips_vector_compile", "%s", _("deprecated")); return TRUE; } void vips_vector_print(VipsVector *vector) { vips_error("vips_vector_print", "%s", _("deprecated")); } void vips_executor_set_program(VipsExecutor *executor, VipsVector *vector, int n) { vips_error("vips_executor_set_program", "%s", _("deprecated")); } void vips_executor_set_array(VipsExecutor *executor, int var, void *value) { vips_error("vips_executor_set_array", "%s", _("deprecated")); } void vips_executor_set_parameter(VipsExecutor *executor, int var, int value) { vips_error("vips_executor_set_parameter", "%s", _("deprecated")); } void vips_executor_set_scanline(VipsExecutor *executor, VipsRegion *ir, int x, int y) { vips_error("vips_executor_set_scanline", "%s", _("deprecated")); } void vips_executor_set_destination(VipsExecutor *executor, void *value) { vips_error("vips_executor_set_destination", "%s", _("deprecated")); } void vips_executor_run(VipsExecutor *executor) { vips_error("vips_executor_run", "%s", _("deprecated")); } void vips_vector_to_fixed_point(double *in, int *out, int n, int scale) { vips_error("vips_vector_to_fixed_point", "%s", _("deprecated")); } int im_add(IMAGE *in1, IMAGE *in2, IMAGE *out) { VipsImage *x; if (vips_call("add", in1, in2, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_subtract(IMAGE *in1, IMAGE *in2, IMAGE *out) { VipsImage *x; if (vips_call("subtract", in1, in2, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_multiply(IMAGE *in1, IMAGE *in2, IMAGE *out) { VipsImage *x; if (vips_call("multiply", in1, in2, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_divide(IMAGE *in1, IMAGE *in2, IMAGE *out) { VipsImage *x; if (vips_call("divide", in1, in2, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_avg(IMAGE *in, double *out) { return vips_avg(in, out, NULL); } int im_deviate(IMAGE *in, double *out) { return vips_deviate(in, out, NULL); } int im_generate(VipsImage *im, im_start_fn start, im_generate_fn generate, im_stop_fn stop, void *a, void *b) { return vips_image_generate(im, start, (VipsGenerateFn) generate, stop, a, b); } int im_minpos(IMAGE *in, int *xpos, int *ypos, double *out) { return vips_min(in, out, "x", xpos, "y", ypos, NULL); } int im_min(IMAGE *in, double *out) { return im_minpos(in, NULL, NULL, out); } int im_maxpos(IMAGE *in, int *xpos, int *ypos, double *out) { return vips_max(in, out, "x", xpos, "y", ypos, NULL); } int im_max(IMAGE *in, double *out) { return im_maxpos(in, NULL, NULL, out); } #define MAX_IMAGES 100 int im_demand_hint(IMAGE *im, VipsDemandStyle hint, ...) { va_list ap; int i; IMAGE *ar[MAX_IMAGES]; va_start(ap, hint); for (i = 0; i < MAX_IMAGES && (ar[i] = va_arg(ap, IMAGE *)); i++) ; va_end(ap); if (i == MAX_IMAGES) { im_error("im_demand_hint", "%s", _("too many images")); return -1; } vips__demand_hint_array(im, hint, ar); return 0; } int im_cp_descv(IMAGE *im, ...) { va_list ap; int i; IMAGE *ar[MAX_IMAGES]; va_start(ap, im); for (i = 0; i < MAX_IMAGES && (ar[i] = va_arg(ap, IMAGE *)); i++) ; va_end(ap); if (i == MAX_IMAGES) { im_error("im_cp_descv", "%s", _("too many images")); return -1; } return vips__image_copy_fields_array(im, ar); } int im_cp_desc(IMAGE *out, IMAGE *in) { return im_cp_descv(out, in, NULL); } int im_copy_set(IMAGE *in, IMAGE *out, VipsType type, float xres, float yres, int xoffset, int yoffset) { VipsImage *x; if (vips_copy(in, &x, "interpretation", type, "xres", xres, "yres", yres, "xoffset", xoffset, "yoffset", yoffset, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_copy_morph(IMAGE *in, IMAGE *out, int bands, VipsBandFmt bandfmt, VipsCoding coding) { VipsImage *x; if (vips_copy(in, &x, "bands", bands, "format", bandfmt, "coding", coding, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_copy(IMAGE *in, IMAGE *out) { return vips_image_write(in, out); } int im_copy_swap(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_byteswap(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_copy_set_meta(IMAGE *in, IMAGE *out, const char *field, GValue *value) { if (vips_image_write(in, out)) return -1; (void) im_meta_set(out, field, value); return 0; } int im_copy_native(IMAGE *in, IMAGE *out, gboolean is_msb_first) { if (is_msb_first != im_amiMSBfirst()) return im_copy_swap(in, out); else return vips_image_write(in, out); } int im_embed(IMAGE *in, IMAGE *out, int type, int x, int y, int width, int height) { VipsImage *t; if (vips_embed(in, &t, x, y, width, height, "extend", type, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_fliphor(IMAGE *in, IMAGE *out) { VipsImage *t; if (vips_flip(in, &t, VIPS_DIRECTION_HORIZONTAL, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_rot90(IMAGE *in, IMAGE *out) { VipsImage *t; if (vips_rot(in, &t, VIPS_ANGLE_D90, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_rot180(IMAGE *in, IMAGE *out) { VipsImage *t; if (vips_rot(in, &t, VIPS_ANGLE_D180, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_rot270(IMAGE *in, IMAGE *out) { VipsImage *t; if (vips_rot(in, &t, VIPS_ANGLE_D270, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_flipver(IMAGE *in, IMAGE *out) { VipsImage *t; if (vips_flip(in, &t, VIPS_DIRECTION_VERTICAL, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_insert(IMAGE *main, IMAGE *sub, IMAGE *out, int x, int y) { VipsImage *t; if (vips_insert(main, sub, &t, x, y, "expand", TRUE, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_insert_noexpand(IMAGE *main, IMAGE *sub, IMAGE *out, int x, int y) { VipsImage *t; if (vips_insert(main, sub, &t, x, y, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_lrjoin(IMAGE *left, IMAGE *right, IMAGE *out) { VipsImage *t; if (vips_join(left, right, &t, VIPS_DIRECTION_HORIZONTAL, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_tbjoin(IMAGE *left, IMAGE *right, IMAGE *out) { VipsImage *t; if (vips_join(left, right, &t, VIPS_DIRECTION_VERTICAL, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_extract_area(IMAGE *in, IMAGE *out, int left, int top, int width, int height) { VipsImage *t; if (vips_extract_area(in, &t, left, top, width, height, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_extract_bands(IMAGE *in, IMAGE *out, int band, int nbands) { VipsImage *t; if (vips_extract_band(in, &t, band, "n", nbands, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_extract_band(IMAGE *in, IMAGE *out, int band) { return im_extract_bands(in, out, band, 1); } int im_extract_areabands(IMAGE *in, IMAGE *out, int left, int top, int width, int height, int band, int nbands) { VipsImage *t1, *t2; if (vips_extract_area(in, &t1, left, top, width, height, NULL)) return -1; if (vips_extract_band(t1, &t2, band, "n", nbands, NULL)) { g_object_unref(t1); return -1; } g_object_unref(t1); if (vips_image_write(t2, out)) { g_object_unref(t2); return -1; } g_object_unref(t2); return 0; } int im_replicate(IMAGE *in, IMAGE *out, int across, int down) { VipsImage *t; if (vips_replicate(in, &t, across, down, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_clip2fmt(IMAGE *in, IMAGE *out, VipsBandFmt fmt) { VipsImage *t; if (vips_cast(in, &t, fmt, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } size_t im_ref_string_get_length(const GValue *value) { size_t length; (void) vips_value_get_ref_string(value, &length); return length; } int im_bandjoin(VipsImage *in1, VipsImage *in2, VipsImage *out) { VipsImage *t; if (vips_bandjoin2(in1, in2, &t, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_gbandjoin(VipsImage **in, VipsImage *out, int n) { VipsImage *t; if (vips_bandjoin(in, &t, n, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_rank_image(VipsImage **in, VipsImage *out, int n, int index) { VipsImage *t; if (vips_bandrank(in, &t, n, "index", index, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_maxvalue(IMAGE **in, IMAGE *out, int n) { return im_rank_image(in, out, n, n - 1); } int im_invert(IMAGE *in, IMAGE *out) { VipsImage *t; if (vips_invert(in, &t, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_sign(IMAGE *in, IMAGE *out) { VipsImage *t; if (vips_sign(in, &t, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_abs(IMAGE *in, IMAGE *out) { VipsImage *t; if (vips_abs(in, &t, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_bandmean(IMAGE *in, IMAGE *out) { VipsImage *t; if (vips_bandmean(in, &t, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_lintra(double a, IMAGE *in, double b, IMAGE *out) { VipsImage *t; if (vips_linear1(in, &t, a, b, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_lintra_vec(int n, double *a, IMAGE *in, double *b, IMAGE *out) { VipsImage *t; if (vips_linear(in, &t, a, b, n, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_black(IMAGE *out, int x, int y, int bands) { VipsImage *t; if (vips_black(&t, x, y, "bands", bands, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_identity_ushort(VipsImage *lut, int bands, int sz) { VipsImage *t; if (vips_identity(&t, "bands", bands, "ushort", TRUE, "size", sz, NULL)) return -1; if (vips_image_write(t, lut)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_identity(VipsImage *lut, int bands) { VipsImage *t; if (vips_identity(&t, "bands", bands, NULL)) return -1; if (vips_image_write(t, lut)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_gaussnoise(VipsImage *out, int x, int y, double mean, double sigma) { VipsImage *t; if (vips_gaussnoise(&t, x, y, "mean", mean, "sigma", sigma, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_grid(VipsImage *in, VipsImage *out, int tile_height, int across, int down) { VipsImage *t; if (vips_grid(in, &t, tile_height, across, down, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_scale(VipsImage *in, VipsImage *out) { VipsImage *t; if (vips_scale(in, &t, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_msb(VipsImage *in, VipsImage *out) { VipsImage *t; if (vips_msb(in, &t, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_msb_band(VipsImage *in, VipsImage *out, int band) { VipsImage *t; if (vips_msb(in, &t, "band", band, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_make_xy(IMAGE *out, const int xsize, const int ysize) { VipsImage *t; if (vips_xyz(&t, xsize, ysize, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_zone(IMAGE *out, int size) { VipsImage *t; if (vips_zone(&t, size, size, "uchar", TRUE, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_fzone(IMAGE *out, int size) { VipsImage *t; if (vips_zone(&t, size, size, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_sines(IMAGE *out, int xsize, int ysize, double horfreq, double verfreq) { VipsImage *t; if (vips_sines(&t, xsize, ysize, "hfreq", horfreq, "vfreq", verfreq, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_text(IMAGE *out, const char *text, const char *font, int width, int align, int dpi) { VipsImage *t; if (vips_text(&t, text, "font", font, "width", width, "align", align, "dpi", dpi, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_system(VipsImage *im, const char *cmd, char **out) { VipsArea *area; VipsImage **array; char *str; area = vips_area_new_array_object(1); array = (VipsImage **) area->data; array[0] = im; if (vips_system(cmd, "in", area, "in_format", "%s.v", "log", &str, NULL)) { vips_area_unref(area); return -1; } vips_area_unref(area); if (out) *out = str; return 0; } VipsImage * im_system_image(VipsImage *im, const char *in_format, const char *out_format, const char *cmd_format, char **log) { VipsArrayImage *array; char *str; VipsImage *out; array = vips_array_image_newv(1, im); /* im will be unreffed when area is unreffed. */ g_object_ref(im); if (vips_system(cmd_format, "in", array, "out", &out, "in_format", in_format, "out_format", out_format, "log", &str, NULL)) { vips_area_unref(VIPS_AREA(array)); return NULL; } vips_area_unref(VIPS_AREA(array)); if (log) *log = str; else g_free(str); return out; } int im_wrap(IMAGE *in, IMAGE *out, int x, int y) { VipsImage *t; if (vips_wrap(in, &t, "x", x, "y", y, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_rotquad(IMAGE *in, IMAGE *out) { return im_wrap(in, out, in->Xsize / 2, in->Ysize / 2); } int im_scaleps(VipsImage *in, VipsImage *out) { VipsImage *t; if (vips_scale(in, &t, "log", TRUE, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_zoom(VipsImage *in, VipsImage *out, int xfac, int yfac) { VipsImage *t; if (vips_zoom(in, &t, xfac, yfac, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_subsample(VipsImage *in, VipsImage *out, int xfac, int yfac) { VipsImage *t; if (vips_subsample(in, &t, xfac, yfac, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } static int vips__math(VipsImage *in, VipsImage *out, VipsOperationMath math) { VipsImage *t; if (vips_math(in, &t, math, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_sintra(IMAGE *in, IMAGE *out) { return vips__math(in, out, VIPS_OPERATION_MATH_SIN); } int im_costra(IMAGE *in, IMAGE *out) { return vips__math(in, out, VIPS_OPERATION_MATH_COS); } int im_tantra(IMAGE *in, IMAGE *out) { return vips__math(in, out, VIPS_OPERATION_MATH_TAN); } int im_asintra(IMAGE *in, IMAGE *out) { return vips__math(in, out, VIPS_OPERATION_MATH_ASIN); } int im_acostra(IMAGE *in, IMAGE *out) { return vips__math(in, out, VIPS_OPERATION_MATH_ACOS); } int im_atantra(IMAGE *in, IMAGE *out) { return vips__math(in, out, VIPS_OPERATION_MATH_ATAN); } int im_logtra(IMAGE *in, IMAGE *out) { return vips__math(in, out, VIPS_OPERATION_MATH_LOG); } int im_log10tra(IMAGE *in, IMAGE *out) { return vips__math(in, out, VIPS_OPERATION_MATH_LOG10); } int im_exptra(IMAGE *in, IMAGE *out) { return vips__math(in, out, VIPS_OPERATION_MATH_EXP); } int im_exp10tra(IMAGE *in, IMAGE *out) { return vips__math(in, out, VIPS_OPERATION_MATH_EXP10); } DOUBLEMASK * im_stats(VipsImage *in) { VipsImage *t; DOUBLEMASK *msk; if (vips_stats(in, &t, NULL)) return NULL; if (!(msk = im_vips2mask(t, "im_stats"))) { g_object_unref(t); return NULL; } g_object_unref(t); return msk; } DOUBLEMASK * im_gauss_dmask(const char *filename, double sigma, double min_ampl) { VipsImage *t; DOUBLEMASK *msk; if (vips_gaussmat(&t, sigma, min_ampl, "precision", VIPS_PRECISION_FLOAT, NULL)) return NULL; if (!(msk = im_vips2mask(t, filename))) { g_object_unref(t); return NULL; } g_object_unref(t); return msk; } DOUBLEMASK * im_gauss_dmask_sep(const char *filename, double sigma, double min_ampl) { VipsImage *t; DOUBLEMASK *msk; if (vips_gaussmat(&t, sigma, min_ampl, "precision", VIPS_PRECISION_FLOAT, "separable", TRUE, NULL)) return NULL; if (!(msk = im_vips2mask(t, filename))) { g_object_unref(t); return NULL; } g_object_unref(t); return msk; } INTMASK * im_gauss_imask(const char *filename, double sigma, double min_ampl) { VipsImage *t; INTMASK *msk; if (vips_gaussmat(&t, sigma, min_ampl, NULL)) return NULL; if (!(msk = im_vips2imask(t, filename))) { g_object_unref(t); return NULL; } g_object_unref(t); return msk; } INTMASK * im_gauss_imask_sep(const char *filename, double sigma, double min_ampl) { VipsImage *t; INTMASK *msk; if (vips_gaussmat(&t, sigma, min_ampl, "separable", TRUE, NULL)) return NULL; if (!(msk = im_vips2imask(t, filename))) { g_object_unref(t); return NULL; } g_object_unref(t); return msk; } INTMASK * im_log_imask(const char *filename, double sigma, double min_ampl) { VipsImage *t; INTMASK *msk; if (vips_logmat(&t, sigma, min_ampl, NULL)) return NULL; if (!(msk = im_vips2imask(t, filename))) { g_object_unref(t); return NULL; } g_object_unref(t); return msk; } DOUBLEMASK * im_log_dmask(const char *filename, double sigma, double min_ampl) { VipsImage *t; DOUBLEMASK *msk; if (vips_logmat(&t, sigma, min_ampl, "precision", VIPS_PRECISION_FLOAT, NULL)) return NULL; if (!(msk = im_vips2mask(t, filename))) { g_object_unref(t); return NULL; } g_object_unref(t); return msk; } int im_recomb(IMAGE *in, IMAGE *out, DOUBLEMASK *recomb) { VipsImage *t1, *t2; if (!(t1 = vips_image_new()) || im_mask2vips(recomb, t1)) return -1; if (vips_recomb(in, &t2, t1, NULL)) { g_object_unref(t1); return -1; } g_object_unref(t1); if (vips_image_write(t2, out)) { g_object_unref(t2); return -1; } g_object_unref(t2); return 0; } int im_compass(VipsImage *in, VipsImage *out, INTMASK *mask) { VipsImage *t1, *t2; if (!(t1 = vips_image_new()) || im_imask2vips(mask, t1)) return -1; if (vips_compass(in, &t2, t1, "times", 8, "angle", VIPS_ANGLE45_D45, "precision", VIPS_PRECISION_INTEGER, NULL)) { g_object_unref(t1); return -1; } g_object_unref(t1); if (vips_image_write(t2, out)) { g_object_unref(t2); return -1; } g_object_unref(t2); return 0; } int im_lindetect(IMAGE *in, IMAGE *out, INTMASK *mask) { VipsImage *t1, *t2; if (!(t1 = vips_image_new()) || im_imask2vips(mask, t1)) return -1; if (vips_compass(in, &t2, t1, "times", 4, "angle", VIPS_ANGLE45_D45, "precision", VIPS_PRECISION_INTEGER, NULL)) { g_object_unref(t1); return -1; } g_object_unref(t1); if (vips_image_write(t2, out)) { g_object_unref(t2); return -1; } g_object_unref(t2); return 0; } int im_gradient(IMAGE *in, IMAGE *out, INTMASK *mask) { VipsImage *t1, *t2; if (!(t1 = vips_image_new()) || im_imask2vips(mask, t1)) return -1; if (vips_compass(in, &t2, t1, "times", 2, "angle", VIPS_ANGLE45_D90, "combine", VIPS_COMBINE_SUM, "precision", VIPS_PRECISION_INTEGER, NULL)) { g_object_unref(t1); return -1; } g_object_unref(t1); if (vips_image_write(t2, out)) { g_object_unref(t2); return -1; } g_object_unref(t2); return 0; } int im_convsep_raw(IMAGE *in, IMAGE *out, INTMASK *mask) { im_error("im_convsep_raw", "no compat function"); return -1; } int im_convsep(IMAGE *in, IMAGE *out, INTMASK *mask) { VipsImage *t1, *t2; if (!(t1 = vips_image_new()) || im_imask2vips(mask, t1)) return -1; if (vips_convsep(in, &t2, t1, "precision", VIPS_PRECISION_INTEGER, NULL)) { g_object_unref(t1); return -1; } g_object_unref(t1); if (vips_image_write(t2, out)) { g_object_unref(t2); return -1; } g_object_unref(t2); return 0; } int im_convsep_f_raw(IMAGE *in, IMAGE *out, DOUBLEMASK *mask) { im_error("im_convsep_raw", "no compat function"); return -1; } int im_convsep_f(IMAGE *in, IMAGE *out, DOUBLEMASK *mask) { VipsImage *t1, *t2; if (!(t1 = vips_image_new()) || im_mask2vips(mask, t1)) return -1; if (vips_convsep(in, &t2, t1, NULL)) { g_object_unref(t1); return -1; } g_object_unref(t1); if (vips_image_write(t2, out)) { g_object_unref(t2); return -1; } g_object_unref(t2); return 0; } int im_conv(VipsImage *in, VipsImage *out, INTMASK *mask) { VipsImage *t1, *t2; if (!(t1 = vips_image_new()) || im_imask2vips(mask, t1)) return -1; if (vips_convi(in, &t2, t1, NULL)) { g_object_unref(t1); return -1; } g_object_unref(t1); if (vips_image_write(t2, out)) { g_object_unref(t2); return -1; } g_object_unref(t2); return 0; } int im_conv_raw(VipsImage *in, VipsImage *out, INTMASK *mask) { im_error("im_conv_raw", "no compat function"); return -1; } int im_conv_f(VipsImage *in, VipsImage *out, DOUBLEMASK *mask) { VipsImage *t1, *t2; if (!(t1 = vips_image_new()) || im_mask2vips(mask, t1)) return -1; if (vips_convf(in, &t2, t1, NULL)) { g_object_unref(t1); return -1; } g_object_unref(t1); if (vips_image_write(t2, out)) { g_object_unref(t2); return -1; } g_object_unref(t2); return 0; } int im_aconvsep(VipsImage *in, VipsImage *out, DOUBLEMASK *mask, int n_layers) { VipsImage *t1, *t2; if (!(t1 = vips_image_new()) || im_mask2vips(mask, t1)) return -1; if (vips_convasep(in, &t2, t1, "layers", n_layers, NULL)) { g_object_unref(t1); return -1; } g_object_unref(t1); if (vips_image_write(t2, out)) { g_object_unref(t2); return -1; } g_object_unref(t2); return 0; } int im_aconv(VipsImage *in, VipsImage *out, DOUBLEMASK *mask, int n_layers, int cluster) { VipsImage *t1, *t2; if (!(t1 = vips_image_new()) || im_mask2vips(mask, t1)) return -1; if (vips_conva(in, &t2, t1, "layers", n_layers, "cluster", cluster, NULL)) { g_object_unref(t1); return -1; } g_object_unref(t1); if (vips_image_write(t2, out)) { g_object_unref(t2); return -1; } g_object_unref(t2); return 0; } int im_conv_f_raw(VipsImage *in, VipsImage *out, DOUBLEMASK *mask) { im_error("im_conv_f_raw", "no compat function"); return -1; } int im_addgnoise(IMAGE *in, IMAGE *out, double sigma) { IMAGE *t; if (!(t = im_open_local(out, "im_addgnoise", "p")) || im_gaussnoise(t, in->Xsize, in->Ysize, 0, sigma) || im_add(in, t, out)) return -1; return 0; } int im_contrast_surface_raw(IMAGE *in, IMAGE *out, int half_win_size, int spacing) { im_error("im_contrast_surface_raw", "no compat function"); return -1; } /* This replaces some custom code in 7.36 and earlier. The hand-made one was * slower for spacing == 1, though faster for large values of spacing. * * Not worth maintaining a special operator for. */ int im_contrast_surface(IMAGE *in, IMAGE *out, int half_win_size, int spacing) { VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(out), 10); int size = half_win_size * 2; int x, y; t[0] = vips_image_new_matrixv(1, 2, -1.0, 1.0); t[1] = vips_image_new_matrixv(2, 1, -1.0, 1.0); t[8] = vips_image_new_matrix(size, size); for (y = 0; y < size; y++) for (x = 0; x < size; x++) *VIPS_MATRIX(t[8], x, y) = 1.0; if (vips_conv(in, &t[2], t[0], "precision", VIPS_PRECISION_INTEGER, NULL) || vips_conv(in, &t[3], t[1], "precision", VIPS_PRECISION_INTEGER, NULL) || vips_abs(t[2], &t[4], NULL) || vips_abs(t[3], &t[5], NULL) || vips_add(t[4], t[5], &t[6], NULL) || vips_conv(t[6], &t[7], t[8], "precision", VIPS_PRECISION_INTEGER, NULL) || vips_subsample(t[7], &t[9], spacing, spacing, NULL) || vips_image_write(t[9], out)) return -1; return 0; } int im_spcor_raw(IMAGE *in, IMAGE *ref, IMAGE *out) { im_error("im_spcor_raw", "no compat function"); return -1; } int im_spcor(IMAGE *in, IMAGE *ref, IMAGE *out) { VipsImage *x; if (vips_call("spcor", in, ref, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_fastcor_raw(IMAGE *in, IMAGE *ref, IMAGE *out) { im_error("im_fastcor_raw", "no compat function"); return -1; } int im_fastcor(IMAGE *in, IMAGE *ref, IMAGE *out) { VipsImage *x; if (vips_call("fastcor", in, ref, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_sharpen(IMAGE *in, IMAGE *out, int mask_size, double x1, double y2, double y3, double m1, double m2) { VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(out), 2); /* im_sharpen() always recoded as labq and im_benchmark() depends * upon this behaviour. */ if (vips_call("sharpen", in, &t[0], "sigma", mask_size / 4.0, "x1", x1, "y2", y2, "y3", y3, "m1", m1, "m2", m2, NULL) || vips_colourspace(t[0], &t[1], VIPS_INTERPRETATION_LABQ, NULL) || vips_image_write(t[1], out)) return -1; return 0; } static int vips__round(VipsImage *in, VipsImage *out, VipsOperationRound round) { VipsImage *t; if (vips_round(in, &t, round, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_rint(IMAGE *in, IMAGE *out) { return vips__round(in, out, VIPS_OPERATION_ROUND_RINT); } int im_floor(IMAGE *in, IMAGE *out) { return vips__round(in, out, VIPS_OPERATION_ROUND_FLOOR); } int im_ceil(IMAGE *in, IMAGE *out) { return vips__round(in, out, VIPS_OPERATION_ROUND_CEIL); } static int vips__relational(IMAGE *in1, IMAGE *in2, IMAGE *out, VipsOperationRelational relational) { VipsImage *t; if (vips_relational(in1, in2, &t, relational, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_equal(IMAGE *in1, IMAGE *in2, IMAGE *out) { return vips__relational(in1, in2, out, VIPS_OPERATION_RELATIONAL_EQUAL); } int im_notequal(IMAGE *in1, IMAGE *in2, IMAGE *out) { return vips__relational(in1, in2, out, VIPS_OPERATION_RELATIONAL_NOTEQ); } int im_less(IMAGE *in1, IMAGE *in2, IMAGE *out) { return vips__relational(in1, in2, out, VIPS_OPERATION_RELATIONAL_LESS); } int im_lesseq(IMAGE *in1, IMAGE *in2, IMAGE *out) { return vips__relational(in1, in2, out, VIPS_OPERATION_RELATIONAL_LESSEQ); } int im_more(IMAGE *in1, IMAGE *in2, IMAGE *out) { return vips__relational(in1, in2, out, VIPS_OPERATION_RELATIONAL_MORE); } int im_moreeq(IMAGE *in1, IMAGE *in2, IMAGE *out) { return vips__relational(in1, in2, out, VIPS_OPERATION_RELATIONAL_MOREEQ); } static int vips__relational_vec(IMAGE *in, IMAGE *out, VipsOperationRelational relational, double *c, int n) { VipsImage *t; if (vips_relational_const(in, &t, relational, c, n, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_equal_vec(VipsImage *in, VipsImage *out, int n, double *c) { return vips__relational_vec(in, out, VIPS_OPERATION_RELATIONAL_EQUAL, c, n); } int im_notequal_vec(VipsImage *in, VipsImage *out, int n, double *c) { return vips__relational_vec(in, out, VIPS_OPERATION_RELATIONAL_NOTEQ, c, n); } int im_less_vec(VipsImage *in, VipsImage *out, int n, double *c) { return vips__relational_vec(in, out, VIPS_OPERATION_RELATIONAL_LESS, c, n); } int im_lesseq_vec(VipsImage *in, VipsImage *out, int n, double *c) { return vips__relational_vec(in, out, VIPS_OPERATION_RELATIONAL_LESSEQ, c, n); } int im_more_vec(VipsImage *in, VipsImage *out, int n, double *c) { return vips__relational_vec(in, out, VIPS_OPERATION_RELATIONAL_MORE, c, n); } int im_moreeq_vec(VipsImage *in, VipsImage *out, int n, double *c) { return vips__relational_vec(in, out, VIPS_OPERATION_RELATIONAL_MOREEQ, c, n); } int im_equalconst(IMAGE *in, IMAGE *out, double c) { return im_equal_vec(in, out, 1, &c); } int im_notequalconst(IMAGE *in, IMAGE *out, double c) { return im_notequal_vec(in, out, 1, &c); } int im_lessconst(IMAGE *in, IMAGE *out, double c) { return im_less_vec(in, out, 1, &c); } int im_lesseqconst(IMAGE *in, IMAGE *out, double c) { return im_lesseq_vec(in, out, 1, &c); } int im_moreconst(IMAGE *in, IMAGE *out, double c) { return im_more_vec(in, out, 1, &c); } int im_moreeqconst(IMAGE *in, IMAGE *out, double c) { return im_moreeq_vec(in, out, 1, &c); } int im_remainder(IMAGE *in1, IMAGE *in2, IMAGE *out) { VipsImage *t; if (vips_remainder(in1, in2, &t, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_remainder_vec(IMAGE *in, IMAGE *out, int n, double *c) { VipsImage *t; if (vips_remainder_const(in, &t, c, n, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_remainderconst(IMAGE *in, IMAGE *out, double c) { return im_remainder_vec(in, out, 1, &c); } static int vips__boolean(IMAGE *in1, IMAGE *in2, IMAGE *out, VipsOperationBoolean boolean) { VipsImage *t; if (vips_boolean(in1, in2, &t, boolean, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_andimage(VipsImage *in1, VipsImage *in2, VipsImage *out) { return vips__boolean(in1, in2, out, VIPS_OPERATION_BOOLEAN_AND); } int im_orimage(VipsImage *in1, VipsImage *in2, VipsImage *out) { return vips__boolean(in1, in2, out, VIPS_OPERATION_BOOLEAN_OR); } int im_eorimage(VipsImage *in1, VipsImage *in2, VipsImage *out) { return vips__boolean(in1, in2, out, VIPS_OPERATION_BOOLEAN_EOR); } static int vips__boolean_vec(IMAGE *in, IMAGE *out, VipsOperationBoolean boolean, double *c, int n) { VipsImage *t; if (vips_boolean_const(in, &t, boolean, c, n, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_andimage_vec(VipsImage *in, VipsImage *out, int n, double *c) { return vips__boolean_vec(in, out, VIPS_OPERATION_BOOLEAN_AND, c, n); } int im_orimage_vec(VipsImage *in, VipsImage *out, int n, double *c) { return vips__boolean_vec(in, out, VIPS_OPERATION_BOOLEAN_OR, c, n); } int im_eorimage_vec(VipsImage *in, VipsImage *out, int n, double *c) { return vips__boolean_vec(in, out, VIPS_OPERATION_BOOLEAN_EOR, c, n); } int im_shiftleft_vec(IMAGE *in, IMAGE *out, int n, double *c) { return vips__boolean_vec(in, out, VIPS_OPERATION_BOOLEAN_LSHIFT, c, n); } int im_shiftright_vec(IMAGE *in, IMAGE *out, int n, double *c) { return vips__boolean_vec(in, out, VIPS_OPERATION_BOOLEAN_RSHIFT, c, n); } int im_andimageconst(IMAGE *in, IMAGE *out, double c) { return im_andimage_vec(in, out, 1, &c); } int im_orimageconst(IMAGE *in, IMAGE *out, double c) { return im_orimage_vec(in, out, 1, &c); } int im_eorimageconst(IMAGE *in, IMAGE *out, double c) { return im_eorimage_vec(in, out, 1, &c); } int im_shiftleft(IMAGE *in, IMAGE *out, int n) { double c = n; return im_shiftleft_vec(in, out, 1, &c); } int im_shiftright(IMAGE *in, IMAGE *out, int n) { double c = n; return im_shiftright_vec(in, out, 1, &c); } static int vips__math2_vec(IMAGE *in, IMAGE *out, VipsOperationMath2 math2, double *c, int n) { VipsImage *t; if (vips_math2_const(in, &t, math2, c, n, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_powtra_vec(VipsImage *in, VipsImage *out, int n, double *c) { return vips__math2_vec(in, out, VIPS_OPERATION_MATH2_POW, c, n); } int im_powtra(IMAGE *in, IMAGE *out, double c) { return im_powtra_vec(in, out, 1, &c); } int im_expntra_vec(IMAGE *in, IMAGE *out, int n, double *c) { return vips__math2_vec(in, out, VIPS_OPERATION_MATH2_WOP, c, n); } int im_expntra(IMAGE *in, IMAGE *out, double c) { return im_expntra_vec(in, out, 1, &c); } int im_ifthenelse(VipsImage *c, VipsImage *a, VipsImage *b, VipsImage *out) { VipsImage *t; if (vips_ifthenelse(c, a, b, &t, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_blend(VipsImage *c, VipsImage *a, VipsImage *b, VipsImage *out) { VipsImage *t; if (vips_ifthenelse(c, a, b, &t, "blend", TRUE, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } static int vips__complex(VipsImage *in, VipsImage *out, VipsOperationComplex cmplx) { VipsImage *t; if (vips_complex(in, &t, cmplx, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_c2amph(IMAGE *in, IMAGE *out) { return vips__complex(in, out, VIPS_OPERATION_COMPLEX_POLAR); } int im_c2rect(IMAGE *in, IMAGE *out) { return vips__complex(in, out, VIPS_OPERATION_COMPLEX_RECT); } static int vips__complexget(VipsImage *in, VipsImage *out, VipsOperationComplexget get) { VipsImage *t; if (vips_complexget(in, &t, get, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_c2real(IMAGE *in, IMAGE *out) { return vips__complexget(in, out, VIPS_OPERATION_COMPLEXGET_REAL); } int im_c2imag(IMAGE *in, IMAGE *out) { return vips__complexget(in, out, VIPS_OPERATION_COMPLEXGET_IMAG); } int im_ri2c(IMAGE *in1, IMAGE *in2, IMAGE *out) { VipsImage *x; if (vips_call("complexform", in1, in2, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_cache(VipsImage *in, VipsImage *out, int width, int height, int max) { return vips_sink_screen(in, out, NULL, width, height, max, 0, NULL, NULL); } int im_argb2rgba(VipsImage *in, VipsImage *out) { /* No longer exists, just a null op. */ return vips_image_write(in, out); } int im_shrink(VipsImage *in, VipsImage *out, double xshrink, double yshrink) { VipsImage *x; if (vips_shrink(in, &x, xshrink, yshrink, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_eye(IMAGE *out, const int xsize, const int ysize, const double factor) { VipsImage *x; if (vips_eye(&x, xsize, ysize, "factor", factor, "uchar", TRUE, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_feye(IMAGE *out, const int xsize, const int ysize, const double factor) { VipsImage *x; if (vips_eye(&x, xsize, ysize, "factor", factor, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_grey(IMAGE *out, const int xsize, const int ysize) { VipsImage *x; if (vips_grey(&x, xsize, ysize, "uchar", TRUE, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_fgrey(IMAGE *out, const int xsize, const int ysize) { VipsImage *x; if (vips_grey(&x, xsize, ysize, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_buildlut(DOUBLEMASK *input, VipsImage *out) { VipsImage *mat; VipsImage *x; mat = vips_image_new(); if (im_mask2vips(input, mat)) return -1; if (vips_buildlut(mat, &x, NULL)) { g_object_unref(mat); return -1; } g_object_unref(mat); if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_invertlut(DOUBLEMASK *input, VipsImage *out, int size) { VipsImage *mat; VipsImage *x; mat = vips_image_new(); if (im_mask2vips(input, mat)) return -1; if (vips_invertlut(mat, &x, "size", size, NULL)) { g_object_unref(mat); return -1; } g_object_unref(mat); if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_tone_build_range(IMAGE *out, int in_max, int out_max, double Lb, double Lw, double Ps, double Pm, double Ph, double S, double M, double H) { VipsImage *t; if (vips_tonelut(&t, "in_max", in_max, "out_max", out_max, "Lb", Lb, "Lw", Lw, "Ps", Ps, "Pm", Pm, "Ph", Ph, "S", S, "M", M, "H", H, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_tone_build(IMAGE *out, double Lb, double Lw, double Ps, double Pm, double Ph, double S, double M, double H) { IMAGE *t1; if (!(t1 = im_open_local(out, "im_tone_build", "p")) || im_tone_build_range(t1, 32767, 32767, Lb, Lw, Ps, Pm, Ph, S, M, H) || im_clip2fmt(t1, out, IM_BANDFMT_SHORT)) return -1; return 0; } int im_rightshift_size(IMAGE *in, IMAGE *out, int xshift, int yshift, int band_fmt) { VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(out), 2); if (vips_shrink(in, &t[0], 1 << xshift, 1 << yshift, NULL) || vips_cast(t[0], &t[1], band_fmt, NULL) || vips_image_write(t[1], out)) return -1; return 0; } int im_Lab2XYZ_temp(IMAGE *in, IMAGE *out, double X0, double Y0, double Z0) { VipsArea *temp; VipsImage *x; temp = VIPS_AREA(vips_array_double_newv(3, X0, Y0, Z0)); if (vips_Lab2XYZ(in, &x, "temp", temp, NULL)) { vips_area_unref(temp); return -1; } vips_area_unref(temp); if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_Lab2XYZ(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_Lab2XYZ(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_XYZ2Lab_temp(IMAGE *in, IMAGE *out, double X0, double Y0, double Z0) { double ary[3]; VipsArea *temp; VipsImage *x; ary[0] = X0; ary[1] = Y0; ary[2] = Z0; temp = VIPS_AREA(vips_array_double_new(ary, 3)); if (vips_XYZ2Lab(in, &x, "temp", temp, NULL)) { vips_area_unref(temp); return -1; } vips_area_unref(temp); if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_XYZ2Lab(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_XYZ2Lab(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_Lab2LCh(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_Lab2LCh(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_LCh2Lab(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_LCh2Lab(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_LCh2UCS(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_LCh2CMC(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_UCS2LCh(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_CMC2LCh(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_XYZ2Yxy(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_XYZ2Yxy(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_Yxy2XYZ(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_Yxy2XYZ(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_float2rad(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_float2rad(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_rad2float(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_rad2float(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_Lab2LabQ(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_Lab2LabQ(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_LabQ2Lab(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_LabQ2Lab(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_Lab2LabS(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_Lab2LabS(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_LabS2Lab(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_LabS2Lab(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_LabQ2LabS(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_LabQ2LabS(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_LabS2LabQ(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_LabS2LabQ(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_Lab2disp(IMAGE *in, IMAGE *out, struct im_col_display *disp) { IMAGE *t[1]; if (im_open_local_array(out, t, 1, "im_Lab2disp:1", "p") || im_Lab2XYZ(in, t[0]) || im_XYZ2disp(t[0], out, disp)) return -1; return 0; } int im_dECMC_fromdisp(IMAGE *im1, IMAGE *im2, IMAGE *out, struct im_col_display *d) { IMAGE *t[4]; if (im_open_local_array(out, t, 4, "im_dECMC_fromdisp:1", "p") || im_disp2XYZ(im1, t[0], d) || im_XYZ2Lab(t[0], t[1]) || im_disp2XYZ(im2, t[2], d) || im_XYZ2Lab(t[2], t[3]) || im_dECMC_fromLab(t[1], t[3], out)) return -1; return 0; } int im_dE_fromdisp(IMAGE *im1, IMAGE *im2, IMAGE *out, struct im_col_display *d) { IMAGE *t[2]; if (im_open_local_array(out, t, 2, "im_dE_fromdisp:1", "p") || im_disp2XYZ(im1, t[0], d) || im_disp2XYZ(im2, t[1], d) || im_dE_fromXYZ(t[0], t[1], out)) return -1; return 0; } int im_disp2Lab(IMAGE *in, IMAGE *out, struct im_col_display *d) { VipsImage *t[1]; if (im_open_local_array(out, t, 1, "im_disp2Lab:1", "p") || im_disp2XYZ(in, t[0], d) || im_XYZ2Lab(t[0], out)) return -1; return 0; } int im_sRGB2XYZ(IMAGE *in, IMAGE *out) { VipsImage **t = (VipsImage **) vips_object_local_array((VipsObject *) out, 2); if (vips_sRGB2scRGB(in, &t[0], NULL) || vips_scRGB2XYZ(t[0], &t[1], NULL) || vips_image_write(t[1], out)) return -1; return 0; } int im_XYZ2sRGB(IMAGE *in, IMAGE *out) { VipsImage **t = (VipsImage **) vips_object_local_array((VipsObject *) out, 2); if (vips_XYZ2scRGB(in, &t[0], NULL) || vips_scRGB2sRGB(t[0], &t[1], NULL) || vips_image_write(t[1], out)) return -1; return 0; } int im_LabQ2sRGB(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_LabQ2sRGB(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_icc_transform(VipsImage *in, VipsImage *out, const char *input_profile_filename, const char *output_profile_filename, VipsIntent intent) { VipsImage *x; if (vips_icc_transform(in, &x, output_profile_filename, "input_profile", input_profile_filename, "intent", intent, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_icc_import(VipsImage *in, VipsImage *out, const char *input_profile_filename, VipsIntent intent) { VipsImage *x; if (vips_icc_import(in, &x, "input_profile", input_profile_filename, "intent", intent, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_icc_import_embedded(VipsImage *in, VipsImage *out, VipsIntent intent) { VipsImage *x; if (vips_icc_import(in, &x, "embedded", TRUE, "intent", intent, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_icc_export_depth(VipsImage *in, VipsImage *out, int depth, const char *output_profile_filename, VipsIntent intent) { VipsImage *x; if (vips_icc_export(in, &x, "output_profile", output_profile_filename, "depth", depth, "intent", intent, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } /** * im_LabQ2XYZ: * @in: input image * @out: output image * * Convert an image from LabQ (Coding == IM_CODING_LABQ) to XYZ. * * Returns: 0 on success, -1 on error. */ int im_LabQ2XYZ(IMAGE *in, IMAGE *out) { IMAGE *t[1]; if (im_open_local_array(out, t, 1, "im_LabQ2XYZ:1", "p") || im_LabQ2Lab(in, t[0]) || im_Lab2XYZ(t[0], out)) return -1; return 0; } int im_Lab2UCS(IMAGE *in, IMAGE *out) { IMAGE *t[1]; if (im_open_local_array(out, t, 1, "im_Lab2UCS:1", "p") || im_Lab2LCh(in, t[0]) || im_LCh2UCS(t[0], out)) return -1; return 0; } int im_UCS2Lab(IMAGE *in, IMAGE *out) { IMAGE *t[1]; if (im_open_local_array(out, t, 1, "im_UCS2Lab:1", "p") || im_UCS2LCh(in, t[0]) || im_LCh2Lab(t[0], out)) return -1; return 0; } int im_UCS2XYZ(IMAGE *in, IMAGE *out) { IMAGE *t[1]; if (im_open_local_array(out, t, 1, "im_UCS2XYZ:1", "p") || im_UCS2Lab(in, t[0]) || im_Lab2XYZ(t[0], out)) return -1; return 0; } int im_XYZ2UCS(IMAGE *in, IMAGE *out) { IMAGE *t[1]; if (im_open_local_array(out, t, 1, "im_XYZ2UCS:1", "p") || im_XYZ2Lab(in, t[0]) || im_Lab2UCS(t[0], out)) return -1; return 0; } int im_dE_fromXYZ(IMAGE *in1, IMAGE *in2, IMAGE *out) { IMAGE *t[2]; if (im_open_local_array(out, t, 2, "im_dE_fromXYZ:1", "p") || im_XYZ2Lab(in1, t[0]) || im_XYZ2Lab(in2, t[1]) || im_dE_fromLab(t[0], t[1], out)) return -1; return 0; } int im_dE_fromLab(IMAGE *in1, IMAGE *in2, IMAGE *out) { VipsImage *x; if (vips_dE76(in1, in2, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_dECMC_fromLab(IMAGE *in1, IMAGE *in2, IMAGE *out) { VipsImage *x; if (vips_dECMC(in1, in2, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_dE00_fromLab(IMAGE *in1, IMAGE *in2, IMAGE *out) { VipsImage *x; if (vips_dE00(in1, in2, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_icc_ac2rc(VipsImage *in, VipsImage *out, const char *profile_filename) { VipsImage *x; if (vips_icc_ac2rc(in, &x, profile_filename)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_quadratic(IMAGE *in, IMAGE *out, IMAGE *coeff) { VipsImage *x; if (vips_quadratic(in, &x, coeff, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_maxpos_vec(VipsImage *im, int *xpos, int *ypos, double *maxima, int n) { double max; VipsArrayDouble *out_array; VipsArrayInt *x_array; VipsArrayInt *y_array; if (vips_max(im, &max, "size", n, "out_array", &out_array, "x_array", &x_array, "y_array", &y_array, NULL)) return -1; memcpy(xpos, VIPS_ARRAY_ADDR(x_array, 0), n * sizeof(int)); memcpy(ypos, VIPS_ARRAY_ADDR(y_array, 0), n * sizeof(int)); memcpy(maxima, VIPS_ARRAY_ADDR(out_array, 0), n * sizeof(double)); vips_area_unref(VIPS_AREA(out_array)); vips_area_unref(VIPS_AREA(x_array)); vips_area_unref(VIPS_AREA(y_array)); return 0; } int im_minpos_vec(VipsImage *im, int *xpos, int *ypos, double *minima, int n) { double min; VipsArrayDouble *out_array; VipsArrayInt *x_array; VipsArrayInt *y_array; if (vips_min(im, &min, "size", n, "out_array", &out_array, "x_array", &x_array, "y_array", &y_array, NULL)) return -1; memcpy(xpos, VIPS_ARRAY_ADDR(x_array, 0), n * sizeof(int)); memcpy(ypos, VIPS_ARRAY_ADDR(y_array, 0), n * sizeof(int)); memcpy(minima, VIPS_ARRAY_ADDR(out_array, 0), n * sizeof(double)); vips_area_unref(VIPS_AREA(out_array)); vips_area_unref(VIPS_AREA(x_array)); vips_area_unref(VIPS_AREA(y_array)); return 0; } int im_cross_phase(IMAGE *in1, IMAGE *in2, IMAGE *out) { VipsImage *x; if (vips_call("cross_phase", in1, in2, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_maplut(IMAGE *in, IMAGE *out, IMAGE *lut) { VipsImage *x; if (vips_maplut(in, &x, lut, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_ismonotonic(IMAGE *lut, int *out) { gboolean monotonic; if (vips_hist_ismonotonic(lut, &monotonic, NULL)) return -1; *out = monotonic ? 255 : 0; return 0; } int im_histcum(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_hist_cum(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_histnorm(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_hist_norm(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_histeq(IMAGE *in, IMAGE *out) { IMAGE *t1; if (!(t1 = im_open_local(out, "im_histeq", "p")) || im_histcum(in, t1) || im_histnorm(t1, out)) return -1; return 0; } int im_heq(VipsImage *in, VipsImage *out, int bandno) { VipsImage *x; if (vips_hist_equal(in, &x, "band", bandno, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_hist(IMAGE *in, IMAGE *out, int bandno) { IMAGE *hist; if (!(hist = im_open_local(out, "im_hist", "p")) || im_histgr(in, hist, bandno) || im_histplot(hist, out)) return -1; return 0; } int im_histgr(IMAGE *in, IMAGE *out, int bandno) { VipsImage *x; if (vips_hist_find(in, &x, "band", bandno, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_stdif(IMAGE *in, IMAGE *out, double a, double m0, double b, double s0, int width, int height) { VipsImage *x; if (vips_stdif(in, &x, width, height, "a", a, "b", b, "m0", m0, "s0", s0, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_lhisteq(VipsImage *in, VipsImage *out, int width, int height) { VipsImage *x; if (vips_hist_local(in, &x, width, height, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_histnD(VipsImage *in, VipsImage *out, int bins) { VipsImage *x; if (vips_hist_find_ndim(in, &x, "bins", bins, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_hist_indexed(VipsImage *index, VipsImage *value, VipsImage *out) { VipsImage *x; if (vips_hist_find_indexed(value, index, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_project(IMAGE *in, IMAGE *hout, IMAGE *vout) { VipsImage *x, *y; if (vips_project(in, &x, &y, NULL)) return -1; if (vips_image_write(x, hout)) { g_object_unref(x); g_object_unref(y); return -1; } g_object_unref(x); if (vips_image_write(y, vout)) { g_object_unref(y); return -1; } g_object_unref(y); return 0; } int im_profile(IMAGE *in, IMAGE *out, int dir) { VipsImage *columns, *rows; VipsImage *t1, *t2; if (vips_profile(in, &columns, &rows, NULL)) return -1; if (dir == 0) { t1 = columns; g_object_unref(rows); } else { t1 = rows; g_object_unref(columns); } if (vips_cast(t1, &t2, VIPS_FORMAT_USHORT, NULL)) { g_object_unref(t1); return -1; } g_object_unref(t1); if (vips_image_write(t2, out)) { g_object_unref(t2); return -1; } g_object_unref(t2); return 0; } int im_erode(IMAGE *in, IMAGE *out, INTMASK *mask) { VipsImage *t1, *t2; if (!(t1 = vips_image_new()) || im_imask2vips(mask, t1)) return -1; if (vips_morph(in, &t2, t1, VIPS_OPERATION_MORPHOLOGY_ERODE, NULL)) { g_object_unref(t1); return -1; } g_object_unref(t1); if (vips_image_write(t2, out)) { g_object_unref(t2); return -1; } g_object_unref(t2); return 0; } int im_erode_raw(IMAGE *in, IMAGE *out, INTMASK *m) { return im_erode(in, out, m); } int im_dilate(IMAGE *in, IMAGE *out, INTMASK *mask) { VipsImage *t1, *t2; if (!(t1 = vips_image_new()) || im_imask2vips(mask, t1)) return -1; if (vips_morph(in, &t2, t1, VIPS_OPERATION_MORPHOLOGY_DILATE, NULL)) { g_object_unref(t1); return -1; } g_object_unref(t1); if (vips_image_write(t2, out)) { g_object_unref(t2); return -1; } g_object_unref(t2); return 0; } int im_dilate_raw(IMAGE *in, IMAGE *out, INTMASK *m) { return im_dilate(in, out, m); } int im_mpercent(IMAGE *in, double percent, int *out) { if (vips_percent(in, percent * 100.0, out, NULL)) return -1; return 0; } int im_mpercent_hist(IMAGE *in, double percent, int *out) { /* Hard to do this in a wrapper. */ vips_error("im_mpercent_hist", "%s", _("no compat implemented")); return -1; } int im_hsp(IMAGE *in, IMAGE *ref, IMAGE *out) { IMAGE *t[3]; if (im_open_local_array(out, t, 3, "im_hsp", "p") || im_histgr(in, t[0], -1) || im_histgr(ref, t[1], -1) || im_histspec(t[0], t[1], t[2]) || im_maplut(in, out, t[2])) return -1; return 0; } static int match(VipsImage *in, VipsImage *ref, VipsImage *out) { VipsImage *x; if (vips_hist_match(in, ref, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_histspec(IMAGE *in, IMAGE *ref, IMAGE *out) { IMAGE *t[5]; guint64 px; int fmt; if (im_check_uint("im_histspec", in) || im_check_uint("im_histspec", ref)) return -1; if (im_open_local_array(out, t, 5, "im_histspec", "p") || im_histeq(in, t[0]) || im_histeq(ref, t[2]) || match(t[0], t[2], t[4])) return -1; px = VIPS_IMAGE_N_PELS(t[4]); if (px <= 256) fmt = IM_BANDFMT_UCHAR; else if (px <= 65536) fmt = IM_BANDFMT_USHORT; else fmt = IM_BANDFMT_UINT; if (im_clip2fmt(t[4], out, fmt)) return -1; return 0; } int im_falsecolour(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_falsecolour(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_gammacorrect(IMAGE *in, IMAGE *out, double exponent) { VipsImage *x; if (vips_gamma(in, &x, "exponent", 1.0 / exponent, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } /* This is used by the carrierwave shrinker to cache the * output of shrink before doing the final affine. * * We use the vips8 threaded tilecache to avoid a deadlock: suppose thread1, * evaluating the top block of the output is delayed, and thread2, evaluating * the second block gets here first (this can happen on a heavily-loaded * system). * * With an unthreaded tilecache (as we had before), thread2 will get * the cache lock and start evaling the second block of the shrink. When it * reaches the png reader it will stall until the first block has been used ... * but it never will, since thread1 will block on this cache lock. * * This function is only used in this place (I think), so it's OK to * hard-wire this to be a sequential threaded cache. */ int im_tile_cache(IMAGE *in, IMAGE *out, int tile_width, int tile_height, int max_tiles) { VipsImage *x; if (vips_tilecache(in, &x, "tile_width", tile_width, "tile_height", tile_height, "max_tiles", max_tiles, "access", VIPS_ACCESS_SEQUENTIAL, "threaded", TRUE, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } /* This is the one used by nip2's menu for caching images. Random access and * persistent. */ int im_tile_cache_random(IMAGE *in, IMAGE *out, int tile_width, int tile_height, int max_tiles) { VipsImage *x; if (vips_tilecache(in, &x, "tile_width", tile_width, "tile_height", tile_height, "max_tiles", max_tiles, "access", VIPS_ACCESS_RANDOM, "persistent", TRUE, "threaded", TRUE, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } static int im__affinei(VipsImage *in, VipsImage *out, VipsInterpolate *interpolate, VipsTransformation *trn) { VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(out), 2); VipsArea *oarea; gboolean repack; oarea = VIPS_AREA(vips_array_int_newv(4, trn->oarea.left, trn->oarea.top, trn->oarea.width, trn->oarea.height)); /* vips7 affine would repack labq and im_benchmark() depends upon * this. */ repack = in->Coding == IM_CODING_LABQ; if (vips_affine(in, &t[0], trn->a, trn->b, trn->c, trn->d, "interpolate", interpolate, "oarea", oarea, "odx", trn->odx, "ody", trn->ody, NULL)) { vips_area_unref(oarea); return -1; } vips_area_unref(oarea); in = t[0]; if (repack) { if (vips_colourspace(in, &t[1], VIPS_INTERPRETATION_LABQ, NULL)) return -1; in = t[1]; } if (vips_image_write(in, out)) return -1; return 0; } int im_affinei(VipsImage *in, VipsImage *out, VipsInterpolate *interpolate, double a, double b, double c, double d, double odx, double ody, int ox, int oy, int ow, int oh) { VipsTransformation trn; trn.iarea.left = 0; trn.iarea.top = 0; trn.iarea.width = in->Xsize; trn.iarea.height = in->Ysize; trn.oarea.left = ox; trn.oarea.top = oy; trn.oarea.width = ow; trn.oarea.height = oh; trn.a = a; trn.b = b; trn.c = c; trn.d = d; trn.idx = 0; trn.idy = 0; trn.odx = odx; trn.ody = ody; return im__affinei(in, out, interpolate, &trn); } int im_affinei_all(VipsImage *in, VipsImage *out, VipsInterpolate *interpolate, double a, double b, double c, double d, double odx, double ody) { VipsTransformation trn; trn.iarea.left = 0; trn.iarea.top = 0; trn.iarea.width = in->Xsize; trn.iarea.height = in->Ysize; trn.a = a; trn.b = b; trn.c = c; trn.d = d; trn.idx = 0; trn.idy = 0; trn.odx = odx; trn.ody = ody; vips__transform_set_area(&trn); return im__affinei(in, out, interpolate, &trn); } /* Still needed by some parts of mosaic. */ int vips__affine(VipsImage *in, VipsImage *out, VipsTransformation *trn) { return im__affinei(in, out, vips_interpolate_bilinear_static(), trn); } int im_copy_file(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_copy_file(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_video_v4l1(IMAGE *im, const char *device, int channel, int brightness, int colour, int contrast, int hue, int ngrabs) { im_error("im_video_v4l1", "%s", _("compiled without im_video_v4l1 support")); return -1; } int im_fwfft(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_fwfft(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_invfft(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_invfft(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_invfftr(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_invfft(in, &x, "real", TRUE, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_freqflt(IMAGE *in, IMAGE *mask, IMAGE *out) { VipsImage *x; if (vips_freqmult(in, mask, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_disp_ps(IMAGE *in, IMAGE *out) { VipsImage *t; if (vips_spectrum(in, &t, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_fractsurf(IMAGE *out, int size, double frd) { VipsImage *t; if (vips_fractsurf(&t, size, size, frd, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } int im_phasecor_fft(IMAGE *in1, IMAGE *in2, IMAGE *out) { VipsImage *x; if (vips_phasecor(in1, in2, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_cntlines(VipsImage *im, double *nolines, int flag) { return vips_countlines(im, nolines, flag == 0 ? VIPS_DIRECTION_HORIZONTAL : VIPS_DIRECTION_VERTICAL, NULL); } int im_label_regions(IMAGE *test, IMAGE *mask, int *segments) { VipsImage *x; if (vips_labelregions(test, &x, "segments", segments, NULL)) return -1; if (vips_image_write(x, mask)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_rank(IMAGE *in, IMAGE *out, int width, int height, int index) { VipsImage *x; if (vips_rank(in, &x, width, height, index, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_rank_raw(IMAGE *in, IMAGE *out, int width, int height, int index) { im_error("im_rank_raw", "no compat function"); return -1; } int im_draw_circle(VipsImage *image, int x, int y, int radius, gboolean fill, VipsPel *ink) { double *vec; int n; if (!(vec = vips__ink_to_vector("im_draw_circle", image, ink, &n))) return -1; return vips_draw_circle(image, vec, n, x, y, radius, "fill", fill, NULL); } int im_draw_line(VipsImage *image, int x1, int y1, int x2, int y2, VipsPel *ink) { double *vec; int n; if (!(vec = vips__ink_to_vector("im_draw_line", image, ink, &n))) return -1; return vips_draw_line(image, vec, n, x1, y1, x2, y2, NULL); } typedef struct _Line { VipsPlotFn plot; void *a; void *b; void *c; } Line; static void draw_line_wrapper(VipsImage *image, int x, int y, void *client) { Line *line = (Line *) client; line->plot(image, x, y, line->a, line->b, line->c); } int im_draw_line_user(VipsImage *image, int x1, int y1, int x2, int y2, VipsPlotFn plot, void *a, void *b, void *c) { Line line; line.plot = plot; line.a = a; line.b = b; line.c = c; vips__draw_line_direct(image, x1, y1, x2, y2, draw_line_wrapper, &line); return 0; } int im_draw_mask(VipsImage *image, VipsImage *mask, int x, int y, VipsPel *ink) { /* Direct call, since this has to be very quick. */ return vips__draw_mask_direct(image, mask, ink, x, y); } int im_draw_image(VipsImage *image, VipsImage *sub, int x, int y) { return vips_draw_image(image, sub, x, y, NULL); } int im_draw_rect(IMAGE *image, int left, int top, int width, int height, int fill, VipsPel *ink) { double *vec; int n; if (!(vec = vips__ink_to_vector("im_draw_rect", image, ink, &n))) return -1; return vips_draw_rect(image, vec, n, left, top, width, height, "fill", fill, NULL); } int im_draw_point(VipsImage *image, int x, int y, VipsPel *ink) { double *vec; int n; if (!(vec = vips__ink_to_vector("im_draw_rect", image, ink, &n))) return -1; return vips_draw_point(image, vec, n, x, y, NULL); } int im_draw_smudge(VipsImage *im, int left, int top, int width, int height) { return vips_draw_smudge(im, left, top, width, height, NULL); } int im_read_point(VipsImage *image, int x, int y, VipsPel *ink) { double *vector; int n; VipsPel *pixel_vector; if (vips_getpoint(image, &vector, &n, x, y, NULL)) return -1; if (!(pixel_vector = vips__vector_to_ink("im_read_point", image, vector, NULL, n))) { g_free(vector); return -1; } memcpy(ink, pixel_vector, VIPS_IMAGE_SIZEOF_PEL(image)); g_free(vector); return 0; } int im_draw_flood(IMAGE *image, int x, int y, VipsPel *ink, Rect *dout) { double *vec; int n; int left; int top; int width; int height; if (!(vec = vips__ink_to_vector("im_draw_flood", image, ink, &n))) return -1; if (vips_draw_flood(image, vec, n, x, y, "left", &left, "top", &top, "width", &width, "height", &height, NULL)) return -1; if (dout) { dout->left = left; dout->top = top; dout->width = width; dout->height = height; } return 0; } int im_draw_flood_blob(IMAGE *image, int x, int y, VipsPel *ink, Rect *dout) { double *vec; int n; int left; int top; int width; int height; if (!(vec = vips__ink_to_vector("im_draw_flood", image, ink, &n))) return -1; if (vips_draw_flood(image, vec, n, x, y, "equal", TRUE, "left", &left, "top", &top, "width", &width, "height", &height, NULL)) return -1; if (dout) { dout->left = left; dout->top = top; dout->width = width; dout->height = height; } return 0; } int im_draw_flood_other(IMAGE *image, IMAGE *test, int x, int y, int serial, Rect *dout) { int left; int top; int width; int height; if (vips_draw_flood1(image, serial, x, y, "test", test, "equal", TRUE, "left", &left, "top", &top, "width", &width, "height", &height, NULL)) return -1; if (dout) { dout->left = left; dout->top = top; dout->width = width; dout->height = height; } return 0; } int im_lineset(IMAGE *in, IMAGE *out, IMAGE *mask, IMAGE *ink, int n, int *x1v, int *y1v, int *x2v, int *y2v) { Rect mask_rect; int i; if (mask->Bands != 1 || mask->BandFmt != IM_BANDFMT_UCHAR || mask->Coding != IM_CODING_NONE) { im_error("im_lineset", "%s", _("mask image not 1 band 8 bit uncoded")); return -1; } if (ink->Bands != in->Bands || ink->BandFmt != in->BandFmt || ink->Coding != in->Coding) { im_error("im_lineset", "%s", _("ink image does not match in image")); return -1; } if (ink->Xsize != 1 || ink->Ysize != 1) { im_error("im_lineset", "%s", _("ink image not 1x1 pixels")); return -1; } /* Copy the image then fastline to it ... this will render to a "t" * usually. */ if (vips_image_write(in, out)) return -1; mask_rect.left = mask->Xsize / 2; mask_rect.top = mask->Ysize / 2; mask_rect.width = mask->Xsize; mask_rect.height = mask->Ysize; if (im_incheck(ink) || im_incheck(mask)) return -1; for (i = 0; i < n; i++) { if (im_fastlineuser(out, x1v[i], y1v[i], x2v[i], y2v[i], (VipsPlotFn) im_plotmask, ink->data, mask->data, &mask_rect)) return -1; } return 0; } int im_match_linear_search(IMAGE *ref, IMAGE *sec, IMAGE *out, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, int hwindowsize, int hsearchsize) { VipsImage *x; if (vips_match(ref, sec, &x, xr1, yr1, xs1, ys1, xr2, yr2, xs2, ys2, "search", TRUE, "hwindow", hwindowsize, "harea", hsearchsize, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_match_linear(IMAGE *ref, IMAGE *sec, IMAGE *out, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2) { VipsImage *x; if (vips_match(ref, sec, &x, xr1, yr1, xs1, ys1, xr2, yr2, xs2, ys2, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_global_balance(IMAGE *in, IMAGE *out, double gamma) { VipsImage *x; if (vips_globalbalance(in, &x, "gamma", gamma, "int_output", TRUE, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_histplot(IMAGE *in, IMAGE *out) { VipsImage *x; if (vips_hist_plot(in, &x, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_global_balancef(IMAGE *in, IMAGE *out, double gamma) { VipsImage *x; if (vips_globalbalance(in, &x, "gamma", gamma, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_remosaic(IMAGE *in, IMAGE *out, const char *old_str, const char *new_str) { VipsImage *x; if (vips_remosaic(in, &x, old_str, new_str, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_lrmosaic(IMAGE *ref, IMAGE *sec, IMAGE *out, int bandno, int xref, int yref, int xsec, int ysec, int hwindowsize, int hsearchsize, int balancetype, int mwidth) { VipsImage *x; if (vips_mosaic(ref, sec, &x, VIPS_DIRECTION_HORIZONTAL, xref, yref, xsec, ysec, "hwindow", hwindowsize, "harea", hsearchsize, "mblend", mwidth, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_lrmosaic1(IMAGE *ref, IMAGE *sec, IMAGE *out, int bandno, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, int hwindowsize, int hsearchsize, int balancetype, int mwidth) { VipsImage *x; if (vips_mosaic1(ref, sec, &x, VIPS_DIRECTION_HORIZONTAL, xr1, yr1, xs1, ys1, xr2, yr2, xs2, ys2, "search", TRUE, "hwindow", hwindowsize, "harea", hsearchsize, "mblend", mwidth, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_tbmosaic(IMAGE *ref, IMAGE *sec, IMAGE *out, int bandno, int xref, int yref, int xsec, int ysec, int hwindowsize, int hsearchsize, int balancetype, int mwidth) { VipsImage *x; if (vips_mosaic(ref, sec, &x, VIPS_DIRECTION_VERTICAL, xref, yref, xsec, ysec, "hwindow", hwindowsize, "harea", hsearchsize, "mblend", mwidth, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_tbmosaic1(IMAGE *ref, IMAGE *sec, IMAGE *out, int bandno, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, int hwindowsize, int hsearchsize, int balancetype, int mwidth) { VipsImage *x; if (vips_mosaic1(ref, sec, &x, VIPS_DIRECTION_VERTICAL, xr1, yr1, xs1, ys1, xr2, yr2, xs2, ys2, "search", TRUE, "hwindow", hwindowsize, "harea", hsearchsize, "mblend", mwidth, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_correl(VipsImage *ref, VipsImage *sec, int xref, int yref, int xsec, int ysec, int hwindowsize, int hsearchsize, double *correlation, int *x, int *y) { return vips__correl(ref, sec, xref, yref, xsec, ysec, hwindowsize, hsearchsize, correlation, x, y); } int im_lrmerge(IMAGE *ref, IMAGE *sec, IMAGE *out, int dx, int dy, int mwidth) { VipsImage *x; if (vips_merge(ref, sec, &x, VIPS_DIRECTION_HORIZONTAL, dx, dy, "mblend", mwidth, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_lrmerge1(IMAGE *ref, IMAGE *sec, IMAGE *out, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, int mwidth) { VipsImage *x; if (vips_mosaic1(ref, sec, &x, VIPS_DIRECTION_HORIZONTAL, xr1, yr1, xs1, ys1, xr2, yr2, xs2, ys2, "mblend", mwidth, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_tbmerge(IMAGE *ref, IMAGE *sec, IMAGE *out, int dx, int dy, int mwidth) { VipsImage *x; if (vips_merge(ref, sec, &x, VIPS_DIRECTION_VERTICAL, dx, dy, "mblend", mwidth, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } int im_tbmerge1(IMAGE *ref, IMAGE *sec, IMAGE *out, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, int mwidth) { VipsImage *x; if (vips_mosaic1(ref, sec, &x, VIPS_DIRECTION_VERTICAL, xr1, yr1, xs1, ys1, xr2, yr2, xs2, ys2, "mblend", mwidth, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } /* The common part of most binary conversion * operators. We: * * - check in and out * - cast in1 and in2 up to a common format * - equalise bands * - make an input array * - return the matched images in vec[0] and vec[1] * * A left-over, remove soon. */ IMAGE ** im__insert_base(const char *domain, IMAGE *in1, IMAGE *in2, IMAGE *out) { IMAGE *t[4]; IMAGE **vec; if (im_piocheck(in1, out) || im_pincheck(in2) || im_check_bands_1orn(domain, in1, in2) || im_check_coding_known(domain, in1) || im_check_coding_same(domain, in1, in2)) return NULL; /* Cast our input images up to a common format and bands. */ if (im_open_local_array(out, t, 4, domain, "p") || im__formatalike(in1, in2, t[0], t[1]) || im__bandalike(domain, t[0], t[1], t[2], t[3]) || !(vec = im_allocate_input_array(out, t[2], t[3], NULL))) return NULL; /* Generate the output. */ if (im_cp_descv(out, vec[0], vec[1], NULL) || im_demand_hint_array(out, IM_SMALLTILE, vec)) return NULL; return vec; } /** * im_insertset: * @main: big image * @sub: small image * @out: output image * @n: number of positions * @x: left positions of @sub * @y: top positions of @sub * * Insert @sub repeatedly into @main at the positions listed in the arrays @x, * @y of length @n. @out is the same * size as @main. @sub is clipped against the edges of @main. * * This operation is fast for large @n, but will use a memory buffer the size * of @out. It's useful for things like making scatter plots. * * If the number of bands differs, one of the images * must have one band. In this case, an n-band image is formed from the * one-band image by joining n copies of the one-band image together, and then * the two n-band images are operated upon. * * The two input images are cast up to the smallest common type (see table * Smallest common format in * arithmetic). * * See also: im_insert(), im_lrjoin(). * * Returns: 0 on success, -1 on error */ int im_insertset(IMAGE *main, IMAGE *sub, IMAGE *out, int n, int *x, int *y) { IMAGE **vec; IMAGE *t; int i; if (!(vec = im__insert_base("im_insert", main, sub, out))) return -1; /* Copy to a memory image, zap that, then copy to out. */ if (!(t = im_open_local(out, "im_insertset", "t")) || im_copy(vec[0], t)) return -1; for (i = 0; i < n; i++) if (im_insertplace(t, vec[1], x[i], y[i])) return -1; if (im_copy(t, out)) return -1; return 0; } /* We had this entry point in earlier libvipses, hilariously. */ int vips__init(const char *argv0) { return vips_init(argv0); } int im_greyc_mask(IMAGE *in, IMAGE *out, IMAGE *mask, int iterations, float amplitude, float sharpness, float anisotropy, float alpha, float sigma, float dl, float da, float gauss_prec, int interpolation, int fast_approx) { vips_error("im_greyc_mask", "This function is no longer in the core library"); return -1; } int vips_check_imask(const char *domain, INTMASK *mask) { if (!mask || mask->xsize > 1000 || mask->ysize > 1000 || mask->xsize <= 0 || mask->ysize <= 0 || mask->scale == 0 || !mask->coeff) { vips_error(domain, "%s", _("nonsense mask parameters")); return -1; } return 0; } int vips_check_dmask(const char *domain, DOUBLEMASK *mask) { if (!mask || mask->xsize > 1000 || mask->ysize > 1000 || mask->xsize <= 0 || mask->ysize <= 0 || mask->scale == 0 || !mask->coeff) { vips_error(domain, "%s", _("nonsense mask parameters")); return -1; } return 0; } int vips_check_dmask_1d(const char *domain, DOUBLEMASK *mask) { if (vips_check_dmask(domain, mask)) return -1; if (mask->xsize != 1 && mask->ysize != 1) { vips_error(domain, "%s", _("mask must be 1D")); return -1; } return 0; } GOptionGroup * vips_get_option_group(void) { static GOptionGroup *option_group = NULL; if (!option_group) { option_group = g_option_group_new("vips", _("VIPS Options"), _("Show VIPS options"), NULL, NULL); vips_add_option_entries(option_group); } return option_group; } /* We used to use this for system() back in the day. But it's awkward to make * it work properly on win32, so this is now deprecated. */ FILE * vips_popenf(const char *fmt, const char *mode, ...) { vips_error("popenf", "%s", _("deprecated")); return NULL; } /* We used to use this for getpoint(), but since it was the only caller in * vips8 it's now deprecated. */ double * vips__ink_to_vector(const char *domain, VipsImage *im, VipsPel *ink, int *n) { VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(im), 6); double *result; #ifdef VIPS_DEBUG printf("vips__ink_to_vector: starting\n"); #endif /*VIPS_DEBUG*/ /* Wrap a VipsImage around ink. */ t[0] = vips_image_new_from_memory(ink, VIPS_IMAGE_SIZEOF_PEL(im), 1, 1, VIPS_IMAGE_SIZEOF_PEL(im), VIPS_FORMAT_UCHAR); if (vips_copy(t[0], &t[1], "bands", im->Bands, "format", im->BandFmt, "coding", im->Coding, "interpretation", im->Type, NULL)) return NULL; /* The image may be coded .. unpack to double. */ if (vips_image_decode(t[1], &t[2]) || vips_cast(t[2], &t[3], VIPS_FORMAT_DOUBLE, NULL)) return NULL; /* To a mem buffer, then copy to out. */ if (!(t[4] = vips_image_new_memory()) || vips_image_write(t[3], t[4])) return NULL; if (!(result = VIPS_ARRAY(im, t[4]->Bands, double))) return NULL; memcpy(result, t[4]->data, VIPS_IMAGE_SIZEOF_PEL(t[4])); *n = t[4]->Bands; #ifdef VIPS_DEBUG { int i; printf("vips__ink_to_vector:\n"); printf("\tink = "); for (i = 0; i < n; i++) printf("%d ", ink[i]); printf("\n"); printf("\tvec = "); for (i = 0; i < *n; i++) printf("%g ", result[i]); printf("\n"); } #endif /*VIPS_DEBUG*/ return result; } /* Old API. Just a compat stub now. */ VipsWindow * vips_window_ref(VipsImage *im, int top, int height) { return NULL; } /* Deprecated. */ size_t vips__get_sizeof_vipsobject(void) { return sizeof(VipsObject); } libvips-8.15.1/libvips/draw/000077500000000000000000000000001454007373500156735ustar00rootroot00000000000000libvips-8.15.1/libvips/draw/draw.c000066400000000000000000000112211454007373500167710ustar00rootroot00000000000000/* base class for drawing operations * * 27/9/10 * - from im_draw_circle() * 17/11/10 * - oops, scanline clipping was off by 1 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pdraw.h" /** * SECTION: draw * @short_description: drawing operations: flood, paste, line, circle * @stability: Stable * @include: vips/vips.h * * These operations directly modify the image. They do not thread, on 32-bit * machines they will be limited to 2GB images, and a little care needs to be * taken if you use them as part of an image pipeline. * They are mostly supposed to be useful for paintbox-style programs. * * libvips operations are all functional: they take zero or more existing input * images and generate zero or more new output images. Images are * never altered, you always create new images. This means libvips can cache * and thread very aggressively. * * The downside is that creating entirely fresh images each time can be very * slow. libvips has a range of tricks to avoid these problems, but there are * still times when you really have to be able to modify an image. An example * might be drawing a curved line from a set of straight line segments: if you * need to draw 1,000 straight lines, a 1,000 operation-deep pipeline is going * to be a slow way to do it. This is where the draw operations come in. * * To use these operations, use vips_image_copy_memory() to make a private * memory copy of the image you want to modify, then call a * series of draw operations. * * Once you are done drawing, return to normal use of vips operations. Any time * you want to start drawing again, you'll need to copy again. */ /** * VipsCombineMode: * @VIPS_COMBINE_MODE_SET: set pixels to the new value * @VIPS_COMBINE_MODE_ADD: add pixels * * See vips_draw_image() and so on. * * Operations like vips_draw_image() need to be told how to combine images * from two sources. * * See also: vips_join(). */ G_DEFINE_ABSTRACT_TYPE(VipsDraw, vips_draw, VIPS_TYPE_OPERATION); static int vips_draw_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsDraw *draw = VIPS_DRAW(object); #ifdef DEBUG printf("vips_draw_build: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ if (VIPS_OBJECT_CLASS(vips_draw_parent_class)->build(object)) return -1; if (vips_check_coding_known(class->nickname, draw->image) || vips_image_inplace(draw->image)) return -1; draw->lsize = VIPS_IMAGE_SIZEOF_LINE(draw->image); draw->psize = VIPS_IMAGE_SIZEOF_PEL(draw->image); draw->noclip = FALSE; return 0; } static void vips_draw_class_init(VipsDrawClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "draw"; vobject_class->description = _("draw operations"); vobject_class->build = vips_draw_build; VIPS_ARG_IMAGE(class, "image", 1, _("Image"), _("Image to draw on"), VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_MODIFY, G_STRUCT_OFFSET(VipsDraw, image)); } static void vips_draw_init(VipsDraw *draw) { } void vips_draw_operation_init(void) { extern GType vips_draw_rect_get_type(void); extern GType vips_draw_image_get_type(void); extern GType vips_draw_mask_get_type(void); extern GType vips_draw_line_get_type(void); extern GType vips_draw_circle_get_type(void); extern GType vips_draw_flood_get_type(void); extern GType vips_draw_smudge_get_type(void); vips_draw_rect_get_type(); vips_draw_image_get_type(); vips_draw_mask_get_type(); vips_draw_line_get_type(); vips_draw_circle_get_type(); vips_draw_flood_get_type(); vips_draw_smudge_get_type(); } libvips-8.15.1/libvips/draw/draw_circle.c000066400000000000000000000177551454007373500203340ustar00rootroot00000000000000/* draw a draw_circle on an image * * Author N. Dessipris * Written on 30/05/1990 * Updated on: * 22/7/93 JC * - im_incheck() call added * 16/8/94 JC * - im_incheck() changed to im_makerw() * 5/12/06 * - im_invalidate() after paint * 6/3/10 * - don't im_invalidate() after paint, this now needs to be at a higher * level * 18/8/10 * - gtkdoc * - rewritten: clips, fills, any bands, any format * 27/9/10 * - break base out to Draw * 3/2/14 * - redo as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "drawink.h" typedef struct _VipsDrawCircle { VipsDrawink parent_object; int cx; int cy; int radius; gboolean fill; } VipsDrawCircle; typedef struct _VipsDrawCircleClass { VipsDrawinkClass parent_class; } VipsDrawCircleClass; G_DEFINE_TYPE(VipsDrawCircle, vips_draw_circle, VIPS_TYPE_DRAWINK); void vips__draw_circle_direct(VipsImage *image, int cx, int cy, int r, VipsDrawScanline draw_scanline, void *client) { int x, y, d; y = r; d = 3 - 2 * r; for (x = 0; x < y; x++) { draw_scanline(image, cy + y, cx - x, cx + x, 0, client); draw_scanline(image, cy - y, cx - x, cx + x, 1, client); draw_scanline(image, cy + x, cx - y, cx + y, 2, client); draw_scanline(image, cy - x, cx - y, cx + y, 3, client); if (d < 0) d += 4 * x + 6; else { d += 4 * (x - y) + 10; y--; } } if (x == y) { draw_scanline(image, cy + y, cx - x, cx + x, 0, client); draw_scanline(image, cy - y, cx - x, cx + x, 1, client); draw_scanline(image, cy + x, cx - y, cx + y, 2, client); draw_scanline(image, cy - x, cx - y, cx + y, 3, client); } } static inline void vips_draw_circle_draw_point(VipsImage *image, int x, int y, void *client) { VipsPel *ink = (VipsPel *) client; VipsPel *q = VIPS_IMAGE_ADDR(image, x, y); int psize = VIPS_IMAGE_SIZEOF_PEL(image); int j; /* Faster than memcopy() for n < about 20. */ for (j = 0; j < psize; j++) q[j] = ink[j]; } /* Paint endpoints, with clip. */ static void vips_draw_circle_draw_endpoints_clip(VipsImage *image, int y, int x1, int x2, int quadrant, void *client) { if (y >= 0 && y < image->Ysize) { if (x1 >= 0 && x1 < image->Xsize) vips_draw_circle_draw_point(image, x1, y, client); if (x2 >= 0 && x2 < image->Xsize) vips_draw_circle_draw_point(image, x2, y, client); } } /* Paint endpoints, no clip. */ static void vips_draw_circle_draw_endpoints_noclip(VipsImage *image, int y, int x1, int x2, int quadrant, void *client) { vips_draw_circle_draw_point(image, x1, y, client); vips_draw_circle_draw_point(image, x2, y, client); } /* Paint scanline. */ static void vips_draw_circle_draw_scanline(VipsImage *image, int y, int x1, int x2, int quadrant, void *client) { VipsPel *ink = (VipsPel *) client; int psize = VIPS_IMAGE_SIZEOF_PEL(image); VipsPel *q; int len; int i, j; g_assert(x1 <= x2); if (y < 0 || y >= image->Ysize) return; if (x1 < 0 && x2 < 0) return; if (x1 >= image->Xsize && x2 >= image->Xsize) return; x1 = VIPS_CLIP(0, x1, image->Xsize - 1); x2 = VIPS_CLIP(0, x2, image->Xsize - 1); q = VIPS_IMAGE_ADDR(image, x1, y); len = x2 - x1 + 1; for (i = 0; i < len; i++) { for (j = 0; j < psize; j++) q[j] = ink[j]; q += psize; } } static int vips_draw_circle_build(VipsObject *object) { VipsDraw *draw = VIPS_DRAW(object); VipsDrawink *drawink = VIPS_DRAWINK(object); VipsDrawCircle *circle = (VipsDrawCircle *) object; VipsDrawScanline draw_scanline; if (VIPS_OBJECT_CLASS(vips_draw_circle_parent_class)->build(object)) return -1; if (circle->fill) draw_scanline = vips_draw_circle_draw_scanline; else if (circle->cx - circle->radius >= 0 && circle->cx + circle->radius < draw->image->Xsize && circle->cy - circle->radius >= 0 && circle->cy + circle->radius < draw->image->Ysize) draw_scanline = vips_draw_circle_draw_endpoints_noclip; else draw_scanline = vips_draw_circle_draw_endpoints_clip; vips__draw_circle_direct(draw->image, circle->cx, circle->cy, circle->radius, draw_scanline, drawink->pixel_ink); return 0; } static void vips_draw_circle_class_init(VipsDrawCircleClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "draw_circle"; vobject_class->description = _("draw a circle on an image"); vobject_class->build = vips_draw_circle_build; VIPS_ARG_INT(class, "cx", 3, _("cx"), _("Centre of draw_circle"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawCircle, cx), -1000000000, 1000000000, 0); VIPS_ARG_INT(class, "cy", 4, _("cy"), _("Centre of draw_circle"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawCircle, cy), -1000000000, 1000000000, 0); VIPS_ARG_INT(class, "radius", 5, _("Radius"), _("Radius in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawCircle, radius), 0, 1000000000, 0); VIPS_ARG_BOOL(class, "fill", 6, _("Fill"), _("Draw a solid object"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsDrawCircle, fill), FALSE); } static void vips_draw_circle_init(VipsDrawCircle *circle) { circle->fill = FALSE; } static int vips_draw_circlev(VipsImage *image, double *ink, int n, int cx, int cy, int radius, va_list ap) { VipsArea *area_ink; int result; area_ink = VIPS_AREA(vips_array_double_new(ink, n)); result = vips_call_split("draw_circle", ap, image, area_ink, cx, cy, radius); vips_area_unref(area_ink); return result; } /** * vips_draw_circle: (method) * @image: image to draw on * @ink: (array length=n): value to draw * @n: length of ink array * @cx: centre of draw_circle * @cy: centre of draw_circle * @radius: draw_circle radius * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @fill: fill the draw_circle * * Draws a circle on @image. If @fill is %TRUE then the circle is filled, * otherwise a 1-pixel-wide perimeter is drawn. * * @ink is an array of double containing values to draw. * * See also: vips_draw_circle1(), vips_draw_line(). * * Returns: 0 on success, or -1 on error. */ int vips_draw_circle(VipsImage *image, double *ink, int n, int cx, int cy, int radius, ...) { va_list ap; int result; va_start(ap, radius); result = vips_draw_circlev(image, ink, n, cx, cy, radius, ap); va_end(ap); return result; } /** * vips_draw_circle1: (method) * @image: image to draw on * @ink: value to draw * @cx: centre of draw_circle * @cy: centre of draw_circle * @radius: draw_circle radius * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @fill: fill the draw_circle * * As vips_draw_circle(), but just takes a single double for @ink. * * See also: vips_draw_circle(). * * Returns: 0 on success, or -1 on error. */ int vips_draw_circle1(VipsImage *image, double ink, int cx, int cy, int radius, ...) { double array_ink[1]; va_list ap; int result; array_ink[0] = ink; va_start(ap, radius); result = vips_draw_circlev(image, array_ink, 1, cx, cy, radius, ap); va_end(ap); return result; } libvips-8.15.1/libvips/draw/draw_flood.c000066400000000000000000000426571454007373500201750ustar00rootroot00000000000000/* draw_flood-fill * * JC 30/8/97 * - VIPSified, cleaned up, from "John Robinson's prog to fill * enclosed areas" * - something Kirk gave me, so thanks John * JC 1/10/97 * - swapped inner memcmp/cpy for a loop ... faster for small pixels * 13/7/02 JC * - im_draw_flood_blob() added * 5/12/06 * - im_invalidate() after paint * 24/3/09 * - added IM_CODING_RAD support * 28/9/09 * - ooops, tiny memleak * 17/12/09 * - use inline rather than defines, so we can add scanline fills more * easily * - gtk-doc comments * 21/12/09 * - rewrite for a scanline based fill, about 4x faster! * - allow separate test and mark images * 22/1/10 * - draw_flood_blob could loop if start point == ink * 6/3/10 * - don't im_invalidate() after paint, this now needs to be at a higher * level * 27/9/10 * - use Draw base class * 21/1/14 * - redo as a class * 5/4/20 * - could fail to complete for some very complex shapes */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "drawink.h" /* Size of a scanline buffer. We allocate a list of these to hold scanlines * we need to visit. */ #define PBUFSIZE (1000) /* A scanline we know could contain pixels connected to us. * * Dir is the direction of connection: +1 means y is increasing, ie. the line * above this one is filled. -1 if y is decreasing. */ typedef struct { int x1, x2; int y; int dir; } Scan; /* A buffer of scanlines, and how many of them have been used. If ->next is * non-NULL, the next block could contain more of them. * * We keep a pair of these, then loop over one and write to the other. */ typedef struct _Buffer { struct _Buffer *next; int n; Scan scan[PBUFSIZE]; } Buffer; /* What we track during a flood. We have this in a separate struct so that we * can support vips__draw_flood_direct() ... a fast path for * vips_labelregions() that avoids all of the GObject call overhead. This * gives a huge speedup, >x10 in many cases. */ typedef struct _Flood { /* Test pixels here. */ VipsImage *test; /* Draw pixels here, can be equal to test. */ VipsImage *image; /* Sizeof pel in test. */ int tsize; /* Pixel we compare test to for edges. */ VipsPel *edge; /* True for flood while test == edge, false for flood while test != * edge. */ gboolean equal; /* Sizeof pel in @image. */ int psize; /* Ink we write to @image. */ VipsPel *ink; /* Add to move down a line in @image. */ int lsize; /* Record bounding box of modified pixels. */ int left; int right; int top; int bottom; /* Our todo list. */ Buffer *in; Buffer *out; } Flood; /* Alloc a new buffer. */ static Buffer * buffer_build(void) { Buffer *buf; buf = g_new(Buffer, 1); buf->next = NULL; buf->n = 0; return buf; } /* Free a chain of buffers. */ static void buffer_free(Buffer *buf) { while (buf) { Buffer *p; p = buf->next; g_free(buf); buf = p; } } /* Add a scanline to a buffer, prepending a new buffer if necessary. Return * the new head buffer. */ static Buffer * buffer_add(Buffer *buf, Flood *flood, int x1, int x2, int y, int dir) { /* Clip against image size. */ if (y < 0 || y >= flood->test->Ysize) return buf; x1 = VIPS_CLIP(0, x1, flood->test->Xsize - 1); x2 = VIPS_CLIP(0, x2, flood->test->Xsize - 1); if (x2 - x1 < 0) return buf; if (buf->n == PBUFSIZE) { Buffer *new; new = buffer_build(); new->next = buf; buf = new; } buf->scan[buf->n].x1 = x1; buf->scan[buf->n].x2 = x2; buf->scan[buf->n].y = y; buf->scan[buf->n].dir = dir; buf->n += 1; return buf; } /* Is p "connected"? ie. is equal to or not equal to flood->edge, depending on * whether we are flooding to the edge boundary or flooding edge-coloured * pixels. p is a pel in @test. */ static gboolean flood_connected(Flood *flood, VipsPel *p) { int j; for (j = 0; j < flood->tsize; j++) if (p[j] != flood->edge[j]) break; /* If flood->equal, true if point == edge. */ return flood->equal ^ (j < flood->tsize); } /* Is p painted? p is a pel in @image. */ static gboolean flood_painted(Flood *flood, VipsPel *p) { int j; for (j = 0; j < flood->psize; j++) if (p[j] != flood->ink[j]) break; return j == flood->psize; } static void flood_pel(Flood *flood, VipsPel *q) { int j; /* Faster than memcopy() for n < about 20. */ for (j = 0; j < flood->psize; j++) q[j] = flood->ink[j]; } /* Fill a scanline between points x1 and x2 inclusive. x1 < x2. */ static void flood_draw_scanline(Flood *flood, int y, int x1, int x2) { VipsPel *p; int i; int len; g_assert(x1 <= x2); if (y < 0 || y >= flood->image->Ysize) return; if (x1 < 0 && x2 < 0) return; if (x1 >= flood->image->Xsize && x2 >= flood->image->Xsize) return; x1 = VIPS_CLIP(0, x1, flood->image->Xsize - 1); x2 = VIPS_CLIP(0, x2, flood->image->Xsize - 1); p = VIPS_IMAGE_ADDR(flood->image, x1, y); len = x2 - x1 + 1; for (i = 0; i < len; i++) { flood_pel(flood, p); p += flood->psize; } } /* Fill left and right, return the endpoints. The start point (x, y) must be * connected and unpainted. */ static void flood_scanline(Flood *flood, int x, int y, int *x1, int *x2) { const int width = flood->test->Xsize; int i; g_assert(flood_connected(flood, VIPS_IMAGE_ADDR(flood->test, x, y))); g_assert(!flood_painted(flood, VIPS_IMAGE_ADDR(flood->image, x, y))); /* Search to the right for the first non-connected pixel. If the start * pixel is unpainted, we know all the intervening pixels must be * unpainted too. */ if (x < width) { VipsPel *p = VIPS_IMAGE_ADDR(flood->test, x + 1, y); for (i = x + 1; i < width; i++) { if (!flood_connected(flood, p)) break; p += flood->tsize; } *x2 = i - 1; } else *x2 = width; /* Search left. */ if (x > 0) { VipsPel *p = VIPS_IMAGE_ADDR(flood->test, x - 1, y); for (i = x - 1; i >= 0; i--) { if (!flood_connected(flood, p)) break; p -= flood->tsize; } *x1 = i + 1; } else *x1 = 0; /* Paint the range we discovered. */ flood_draw_scanline(flood, y, *x1, *x2); flood->left = VIPS_MIN(flood->left, *x1); flood->right = VIPS_MAX(flood->right, *x2); flood->top = VIPS_MIN(flood->top, y); flood->bottom = VIPS_MAX(flood->bottom, y); } /* We know the line below or above us is filled between x1 and x2. Search our * line in this range looking for an edge pixel we can flood from. */ static void flood_around(Flood *flood, Scan *scan) { VipsPel *p; int x; g_assert(scan->dir == 1 || scan->dir == -1); for (p = VIPS_IMAGE_ADDR(flood->test, scan->x1, scan->y), x = scan->x1; x <= scan->x2; p += flood->tsize, x++) { if (flood_connected(flood, p)) { int x1a; int x2a; /* If mark and test are different images, we also need * to check for painted. Otherwise we can get stuck in * connected loops. */ if (flood->image != flood->test) { VipsPel *mp = VIPS_IMAGE_ADDR( flood->image, x, scan->y); if (flood_painted(flood, mp)) continue; } flood_scanline(flood, x, scan->y, &x1a, &x2a); /* Our new scanline can have up to three more * scanlines connected to it: above, below left, below * right. */ if (x1a < scan->x1 - 1) flood->out = buffer_add(flood->out, flood, x1a, scan->x1 - 2, scan->y - scan->dir, -scan->dir); if (x2a > scan->x2 + 1) flood->out = buffer_add(flood->out, flood, scan->x2 + 2, x2a, scan->y - scan->dir, -scan->dir); flood->out = buffer_add(flood->out, flood, x1a, x2a, scan->y + scan->dir, scan->dir); x = x2a + 1; p = VIPS_IMAGE_ADDR(flood->test, x, scan->y); } } } static void flood_all(Flood *flood, int x, int y) { int x1, x2; /* Test start pixel ... nothing to do? */ if (!flood_connected(flood, VIPS_IMAGE_ADDR(flood->test, x, y))) return; flood->in = buffer_build(); flood->out = buffer_build(); flood_scanline(flood, x, y, &x1, &x2); flood->in = buffer_add(flood->in, flood, x1, x2, y + 1, 1); flood->in = buffer_add(flood->in, flood, x1, x2, y - 1, -1); while (flood->in->n) { Buffer *p; for (p = flood->in; p; p = p->next) { int i; for (i = 0; i < p->n; i++) flood_around(flood, &p->scan[i]); p->n = 0; } VIPS_SWAP(Buffer *, flood->in, flood->out); } VIPS_FREEF(buffer_free, flood->in); VIPS_FREEF(buffer_free, flood->out); } /* Base class. */ typedef struct _VipsDrawFlood { VipsDrawink parent_object; /* Parameters. */ int x; int y; VipsImage *test; gboolean equal; int left; int top; int width; int height; } VipsDrawFlood; typedef VipsDrawinkClass VipsDrawFloodClass; G_DEFINE_TYPE(VipsDrawFlood, vips_draw_flood, VIPS_TYPE_DRAWINK); static int vips_draw_flood_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsDraw *draw = VIPS_DRAW(object); VipsDrawink *drawink = VIPS_DRAWINK(object); VipsDrawFlood *drawflood = (VipsDrawFlood *) object; Flood flood; int j; if (VIPS_OBJECT_CLASS(vips_draw_flood_parent_class)->build(object)) return -1; /* @test defaults to @image. */ if (!vips_object_argument_isset(object, "test")) /* Setting input params like this will break caching, but we * don't cache draw ops anyway. */ g_object_set(object, "test", draw->image, NULL); if (vips_image_wio_input(drawflood->test) || vips_check_coding_known(class->nickname, drawflood->test) || vips_check_size_same(class->nickname, drawflood->test, draw->image)) return -1; flood.test = drawflood->test; flood.image = draw->image; flood.tsize = VIPS_IMAGE_SIZEOF_PEL(flood.test); flood.equal = drawflood->equal; flood.psize = VIPS_IMAGE_SIZEOF_PEL(flood.image); flood.ink = drawink->pixel_ink; flood.lsize = VIPS_IMAGE_SIZEOF_LINE(flood.image); flood.left = drawflood->x; flood.right = drawflood->x; flood.top = drawflood->y; flood.bottom = drawflood->y; if (flood.equal) { /* Edge is set by colour of the start pixel in @test. */ if (!(flood.edge = VIPS_ARRAY(object, flood.tsize, VipsPel))) return -1; memcpy(flood.edge, VIPS_IMAGE_ADDR(flood.test, drawflood->x, drawflood->y), flood.tsize); /* If @test and @image are the same and edge == ink, we'll * never stop :-( or rather, there's nothing to do. */ if (flood.test == flood.image) { for (j = 0; j < flood.tsize; j++) if (flood.edge[j] != flood.ink[j]) break; if (j != flood.tsize) flood_all(&flood, drawflood->x, drawflood->y); } else flood_all(&flood, drawflood->x, drawflood->y); } else { /* Flood to ink colour. We need to be able to compare @test to * @ink. */ if (!(flood.edge = vips__vector_to_ink(class->nickname, flood.test, VIPS_ARRAY_ADDR(drawink->ink, 0), NULL, VIPS_AREA(drawink->ink)->n))) return -1; flood_all(&flood, drawflood->x, drawflood->y); } g_object_set(object, "left", flood.left, "top", flood.top, "width", flood.right - flood.left + 1, "height", flood.bottom - flood.top + 1, NULL); return 0; } static void vips_draw_flood_class_init(VipsDrawFloodClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "draw_flood"; vobject_class->description = _("flood-fill an area"); vobject_class->build = vips_draw_flood_build; VIPS_ARG_INT(class, "x", 3, _("x"), _("DrawFlood start point"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawFlood, x), 0, 1000000000, 0); VIPS_ARG_INT(class, "y", 4, _("y"), _("DrawFlood start point"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawFlood, y), 0, 1000000000, 0); VIPS_ARG_IMAGE(class, "test", 5, _("Test"), _("Test pixels in this image"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsDrawFlood, test)); VIPS_ARG_BOOL(class, "equal", 6, _("Equal"), _("DrawFlood while equal to edge"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsDrawFlood, equal), FALSE); VIPS_ARG_INT(class, "left", 7, _("Left"), _("Left edge of modified area"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsDrawFlood, left), 0, 1000000000, 0); VIPS_ARG_INT(class, "top", 8, _("Top"), _("Top edge of modified area"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsDrawFlood, top), 0, 1000000000, 0); VIPS_ARG_INT(class, "width", 9, _("Width"), _("Width of modified area"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsDrawFlood, width), 0, 1000000000, 0); VIPS_ARG_INT(class, "height", 10, _("Height"), _("Height of modified area"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsDrawFlood, height), 0, 1000000000, 0); } static void vips_draw_flood_init(VipsDrawFlood *draw_flood) { } /* Direct path to flood for vips_labelregions(). We need to avoid the function * dispatch system for speed. * * Equivalent to: * * vips_draw_flood1(image, serial, x, y, * "test", test, * "equal", TRUE, * NULL); * * image must be 1-band int. */ int vips__draw_flood_direct(VipsImage *image, VipsImage *test, int serial, int x, int y) { Flood flood; if (vips_check_format("vips__draw_flood_direct", image, VIPS_FORMAT_INT) || vips_check_mono("vips__draw_flood_direct", image) || vips_check_coding_known("vips__draw_flood_direct", test) || vips_check_size_same("vips__draw_flood_direct", test, image) || vips_image_wio_input(test) || vips_image_inplace(image)) return -1; flood.test = test; flood.image = image; flood.tsize = VIPS_IMAGE_SIZEOF_PEL(test); flood.equal = TRUE; flood.psize = VIPS_IMAGE_SIZEOF_PEL(image); flood.ink = (VipsPel *) &serial; flood.lsize = VIPS_IMAGE_SIZEOF_LINE(image); flood.left = x; flood.right = x; flood.top = y; flood.bottom = y; if (!(flood.edge = VIPS_ARRAY(image, flood.tsize, VipsPel))) return -1; memcpy(flood.edge, VIPS_IMAGE_ADDR(test, x, y), flood.tsize); flood_all(&flood, x, y); return 0; } static int vips_draw_floodv(VipsImage *image, double *ink, int n, int x, int y, va_list ap) { VipsArea *area_ink; int result; area_ink = VIPS_AREA(vips_array_double_new(ink, n)); result = vips_call_split("draw_flood", ap, image, area_ink, x, y); vips_area_unref(area_ink); return result; } /** * vips_draw_flood: (method) * @image: image to draw on * @ink: (array length=n): value to draw * @n: length of ink array * @x: centre of circle * @y: centre of circle * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @test: test this image * * @equal: fill while equal to edge * * @left: output left edge of bounding box of modified area * * @top: output top edge of bounding box of modified area * * @width: output width of bounding box of modified area * * @height: output height of bounding box of modified area * * Flood-fill @image with @ink, starting at position @x, @y. The filled area is * bounded by pixels that are equal to the ink colour, in other words, it * searches for pixels enclosed by an edge of @ink. * * If @equal is set, it instead searches for pixels which are equal to the * start point and fills them with @ink. * * Normally it will test and set pixels in @image. If @test is set, it will * test pixels in @test and set pixels in @image. This lets you search an * image (@test) for continuous areas of pixels without modifying it. * * @left, @top, @width, @height output the bounding box of the modified * pixels. * * @ink is an array of double containing values to draw. * * See also: vips_draw_flood1(). * * Returns: 0 on success, or -1 on error. */ int vips_draw_flood(VipsImage *image, double *ink, int n, int x, int y, ...) { va_list ap; int result; va_start(ap, y); result = vips_draw_floodv(image, ink, n, x, y, ap); va_end(ap); return result; } /** * vips_draw_flood1: (method) * @image: image to draw on * @ink: value to draw * @x: centre of circle * @y: centre of circle * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @test: test this image * * @equal: fill while equal to edge * * @left: output left edge of bounding box of modified area * * @top: output top edge of bounding box of modified area * * @width: output width of bounding box of modified area * * @height: output height of bounding box of modified area * * As vips_draw_flood(), but just takes a single double for @ink. * * See also: vips_draw_flood(). * * Returns: 0 on success, or -1 on error. */ int vips_draw_flood1(VipsImage *image, double ink, int x, int y, ...) { double array_ink[1]; va_list ap; int result; array_ink[0] = ink; va_start(ap, y); result = vips_draw_floodv(image, array_ink, 1, x, y, ap); va_end(ap); return result; } libvips-8.15.1/libvips/draw/draw_image.c000066400000000000000000000173151454007373500201450ustar00rootroot00000000000000/* in-place insert * * Copyright: J. Cupitt * Written: 15/06/1992 * 22/7/93 JC * - im_incheck() added * 16/8/94 JC * - im_incheck() changed to im_makerw() * 1/9/04 JC * - checks bands/types/etc match (thanks Matt) * - smarter pixel size calculations * 5/12/06 * - im_invalidate() after paint * 24/3/09 * - added IM_CODING_RAD support * 21/10/09 * - allow sub to be outside main * - gtkdoc * 6/3/10 * - don't im_invalidate() after paint, this now needs to be at a higher * level * 25/8/10 * - cast and bandalike sub to main * 22/9/10 * - rename to im_draw_image() * - gtk-doc * 9/2/14 * - redo as a class, based on draw_image * 28/3/14 * - add "mode" param */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pdraw.h" typedef struct _VipsDrawImage { VipsDraw parent_object; /* Parameters. */ VipsImage *sub; int x; int y; VipsCombineMode mode; } VipsDrawImage; typedef struct _VipsDrawImageClass { VipsDrawClass parent_class; } VipsDrawImageClass; G_DEFINE_TYPE(VipsDrawImage, vips_draw_image, VIPS_TYPE_DRAW); #define LOOP(TYPE, TEMP, MIN, MAX) \ { \ TYPE *restrict pt = (TYPE *) p; \ TYPE *restrict qt = (TYPE *) q; \ \ for (x = 0; x < sz; x++) { \ TEMP v; \ \ v = pt[x] + qt[x]; \ \ qt[x] = VIPS_CLIP(MIN, v, MAX); \ } \ } #define LOOPF(TYPE) \ { \ TYPE *restrict pt = (TYPE *) p; \ TYPE *restrict qt = (TYPE *) q; \ \ for (x = 0; x < sz; x++) \ qt[x] += pt[x]; \ } static void vips_draw_image_mode_add(VipsDrawImage *draw_image, VipsImage *im, VipsPel *q, VipsPel *p, int n) { /* Complex just doubles the size. */ const int sz = n * im->Bands * (vips_band_format_iscomplex(im->BandFmt) ? 2 : 1); int x; switch (im->BandFmt) { case VIPS_FORMAT_UCHAR: LOOP(unsigned char, int, 0, UCHAR_MAX); break; case VIPS_FORMAT_CHAR: LOOP(signed char, int, SCHAR_MIN, SCHAR_MAX); break; case VIPS_FORMAT_USHORT: LOOP(unsigned short, int, 0, USHRT_MAX); break; case VIPS_FORMAT_SHORT: LOOP(signed short, int, SCHAR_MIN, SCHAR_MAX); break; case VIPS_FORMAT_UINT: LOOP(unsigned int, gint64, 0, UINT_MAX); break; case VIPS_FORMAT_INT: LOOP(signed int, gint64, INT_MIN, INT_MAX); break; case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_COMPLEX: LOOPF(float); break; case VIPS_FORMAT_DOUBLE: case VIPS_FORMAT_DPCOMPLEX: LOOPF(double); break; default: g_assert_not_reached(); } } static int vips_draw_image_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsDraw *draw = VIPS_DRAW(object); VipsDrawImage *draw_image = (VipsDrawImage *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 3); VipsImage *im; VipsRect image_rect; VipsRect sub_rect; VipsRect clip_rect; if (VIPS_OBJECT_CLASS(vips_draw_image_parent_class)->build(object)) return -1; if (vips_check_coding_known(class->nickname, draw->image) || vips_check_coding_same(class->nickname, draw->image, draw_image->sub) || vips_check_bands_1orn_unary(class->nickname, draw_image->sub, draw->image->Bands)) return -1; /* SET will work for any matching coding, but every other mode needs * uncoded images. */ if (draw_image->mode != VIPS_COMBINE_MODE_SET && vips_check_uncoded(class->nickname, draw->image)) return -1; /* Cast sub to match main in bands and format. */ im = draw_image->sub; if (im->Coding == VIPS_CODING_NONE) { if (vips__bandup(class->nickname, im, &t[0], draw->image->Bands) || vips_cast(t[0], &t[1], draw->image->BandFmt, NULL)) return -1; im = t[1]; } /* Make rects for main and sub and clip. */ image_rect.left = 0; image_rect.top = 0; image_rect.width = draw->image->Xsize; image_rect.height = draw->image->Ysize; sub_rect.left = draw_image->x; sub_rect.top = draw_image->y; sub_rect.width = im->Xsize; sub_rect.height = im->Ysize; vips_rect_intersectrect(&image_rect, &sub_rect, &clip_rect); if (!vips_rect_isempty(&clip_rect)) { VipsPel *p, *q; int y; if (vips_image_wio_input(im)) return -1; p = VIPS_IMAGE_ADDR(im, clip_rect.left - draw_image->x, clip_rect.top - draw_image->y); q = VIPS_IMAGE_ADDR(draw->image, clip_rect.left, clip_rect.top); for (y = 0; y < clip_rect.height; y++) { switch (draw_image->mode) { case VIPS_COMBINE_MODE_SET: memcpy((char *) q, (char *) p, clip_rect.width * VIPS_IMAGE_SIZEOF_PEL(im)); break; case VIPS_COMBINE_MODE_ADD: vips_draw_image_mode_add(draw_image, im, q, p, clip_rect.width); break; default: g_assert_not_reached(); } p += VIPS_IMAGE_SIZEOF_LINE(im); q += VIPS_IMAGE_SIZEOF_LINE(draw->image); } } return 0; } static void vips_draw_image_class_init(VipsDrawImageClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "draw_image"; vobject_class->description = _("paint an image into another image"); vobject_class->build = vips_draw_image_build; VIPS_ARG_IMAGE(class, "sub", 5, _("Sub-image"), _("Sub-image to insert into main image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawImage, sub)); VIPS_ARG_INT(class, "x", 6, _("x"), _("Draw image here"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawImage, x), -1000000000, 1000000000, 0); VIPS_ARG_INT(class, "y", 7, _("y"), _("Draw image here"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawImage, y), -1000000000, 1000000000, 0); VIPS_ARG_ENUM(class, "mode", 8, _("Mode"), _("Combining mode"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsDrawImage, mode), VIPS_TYPE_COMBINE_MODE, VIPS_COMBINE_MODE_SET); } static void vips_draw_image_init(VipsDrawImage *draw_image) { draw_image->mode = VIPS_COMBINE_MODE_SET; } /** * vips_draw_image: (method) * @image: image to draw on * @sub: image to paint * @x: draw @sub here * @y: draw @sub here * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @mode: how to combine pixels * * Draw @sub on top of @image at position @x, @y. The two images must have the * same Coding. If @sub has 1 band, the bands will be duplicated to match the * number of bands in @image. @sub will be converted to @image's format, see * vips_cast(). * * Use @mode to set how pixels are combined. If you use * #VIPS_COMBINE_MODE_ADD, both images muct be uncoded. * * See also: vips_draw_mask(), vips_insert(). * * Returns: 0 on success, or -1 on error. */ int vips_draw_image(VipsImage *image, VipsImage *sub, int x, int y, ...) { va_list ap; int result; va_start(ap, y); result = vips_call_split("draw_image", ap, image, sub, x, y); va_end(ap); return result; } libvips-8.15.1/libvips/draw/draw_line.c000066400000000000000000000205421454007373500200060ustar00rootroot00000000000000/* draw straight draw_lines * * Copyright: J. Cupitt * Written: 15/06/1992 * Modified : 22/10/92 - clipping constraints changed * 22/7/93 JC * - im_incheck() added * 16/8/94 JC * - im_incheck() changed to im_makerw() * 5/12/06 * - im_invalidate() after paint * 1/3/10 * - oops, draw_lineset needs to ask for WIO of mask and ink * 6/3/10 * - don't im_invalidate() after paint, this now needs to be at a higher * level * 27/9/10 * - gtk-doc * - use draw.c base class * - do pointwise clipping * - rename as im_draw_line() for consistency * - cleanups! * 6/2/14 * - redo as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "drawink.h" typedef struct _VipsDrawLine { VipsDrawink parent_object; int x1; int y1; int x2; int y2; } VipsDrawLine; typedef struct _VipsDrawLineClass { VipsDrawinkClass parent_class; } VipsDrawLineClass; G_DEFINE_TYPE(VipsDrawLine, vips_draw_line, VIPS_TYPE_DRAWINK); void vips__draw_line_direct(VipsImage *image, int x1, int y1, int x2, int y2, VipsDrawPoint draw_point, void *client) { int dx, dy; int x, y, err; dx = x2 - x1; dy = y2 - y1; /* Swap endpoints to reduce number of cases. */ if (abs(dx) >= abs(dy) && dx < 0) { /* Swap to get all x greater or equal cases going to the * right. Do diagonals here .. just have up and right and down * and right now. */ VIPS_SWAP(int, x1, x2); VIPS_SWAP(int, y1, y2); } else if (abs(dx) < abs(dy) && dy < 0) { /* Swap to get all y greater cases going down the screen. */ VIPS_SWAP(int, x1, x2); VIPS_SWAP(int, y1, y2); } dx = x2 - x1; dy = y2 - y1; x = x1; y = y1; /* Special case: zero width and height is single point. */ if (dx == 0 && dy == 0) draw_point(image, x, y, client); /* Special case vertical and horizontal lines for speed. */ else if (dx == 0) { /* Vertical line going down. */ for (; y <= y2; y++) draw_point(image, x, y, client); } else if (dy == 0) { /* Horizontal line to the right. */ for (; x <= x2; x++) draw_point(image, x, y, client); } /* Special case diagonal lines. */ else if (abs(dy) == abs(dx) && dy > 0) { /* Diagonal line going down and right. */ for (; x <= x2; x++, y++) draw_point(image, x, y, client); } else if (abs(dy) == abs(dx) && dy < 0) { /* Diagonal line going up and right. */ for (; x <= x2; x++, y--) draw_point(image, x, y, client); } else if (abs(dy) < abs(dx) && dy > 0) { /* Between -45 and 0 degrees. */ for (err = 0; x <= x2; x++) { draw_point(image, x, y, client); err += dy; if (err >= dx) { err -= dx; y++; } } } else if (abs(dy) < abs(dx) && dy < 0) { /* Between 0 and 45 degrees. */ for (err = 0; x <= x2; x++) { draw_point(image, x, y, client); err -= dy; if (err >= dx) { err -= dx; y--; } } } else if (abs(dy) > abs(dx) && dx > 0) { /* Between -45 and -90 degrees. */ for (err = 0; y <= y2; y++) { draw_point(image, x, y, client); err += dx; if (err >= dy) { err -= dy; x++; } } } else if (abs(dy) > abs(dx) && dx < 0) { /* Between -90 and -135 degrees. */ for (err = 0; y <= y2; y++) { draw_point(image, x, y, client); err -= dx; if (err >= dy) { err -= dy; x--; } } } else g_assert_not_reached(); } static void vips_draw_line_draw_point_noclip(VipsImage *image, int x, int y, void *client) { VipsPel *ink = (VipsPel *) client; VipsPel *q = VIPS_IMAGE_ADDR(image, x, y); int psize = VIPS_IMAGE_SIZEOF_PEL(image); int j; /* Faster than memcopy() for n < about 20. */ for (j = 0; j < psize; j++) q[j] = ink[j]; } static void vips_draw_line_draw_point_clip(VipsImage *image, int x, int y, void *client) { if (x >= 0 && x < image->Xsize && y >= 0 && y < image->Ysize) vips_draw_line_draw_point_noclip(image, x, y, client); } static int vips_draw_line_build(VipsObject *object) { VipsDraw *draw = VIPS_DRAW(object); VipsDrawink *drawink = VIPS_DRAWINK(object); VipsDrawLine *line = (VipsDrawLine *) object; VipsDrawPoint draw_point; if (VIPS_OBJECT_CLASS(vips_draw_line_parent_class)->build(object)) return -1; if (line->x1 < draw->image->Xsize && line->x1 >= 0 && line->x2 < draw->image->Xsize && line->x2 >= 0 && line->y1 < draw->image->Ysize && line->y1 >= 0 && line->y2 < draw->image->Ysize && line->y2 >= 0) draw_point = vips_draw_line_draw_point_noclip; else draw_point = vips_draw_line_draw_point_clip; vips__draw_line_direct(draw->image, line->x1, line->y1, line->x2, line->y2, draw_point, drawink->pixel_ink); return 0; } static void vips_draw_line_class_init(VipsDrawLineClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "draw_line"; vobject_class->description = _("draw a line on an image"); vobject_class->build = vips_draw_line_build; VIPS_ARG_INT(class, "x1", 3, _("x1"), _("Start of draw_line"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawLine, x1), -1000000000, 1000000000, 0); VIPS_ARG_INT(class, "y1", 4, _("y1"), _("Start of draw_line"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawLine, y1), -1000000000, 1000000000, 0); VIPS_ARG_INT(class, "x2", 5, _("x2"), _("End of draw_line"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawLine, x2), -1000000000, 1000000000, 0); VIPS_ARG_INT(class, "y2", 6, _("y2"), _("End of draw_line"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawLine, y2), -1000000000, 1000000000, 0); } static void vips_draw_line_init(VipsDrawLine *draw_line) { } static int vips_draw_linev(VipsImage *image, double *ink, int n, int x1, int y1, int x2, int y2, va_list ap) { VipsArea *area_ink; int result; area_ink = VIPS_AREA(vips_array_double_new(ink, n)); result = vips_call_split("draw_line", ap, image, area_ink, x1, y1, x2, y2); vips_area_unref(area_ink); return result; } /** * vips_draw_line: (method) * @image: image to draw on * @ink: (array length=n): value to draw * @n: length of ink array * @x1: start of draw_line * @y1: start of draw_line * @x2: end of draw_line * @y2: end of draw_line * @...: %NULL-terminated list of optional named arguments * * Draws a 1-pixel-wide line on an image. * * @ink is an array of double containing values to draw. * * See also: vips_draw_line1(), vips_draw_circle(), vips_draw_mask(). * * Returns: 0 on success, or -1 on error. */ int vips_draw_line(VipsImage *image, double *ink, int n, int x1, int y1, int x2, int y2, ...) { va_list ap; int result; va_start(ap, y2); result = vips_draw_linev(image, ink, n, x1, y1, x2, y2, ap); va_end(ap); return result; } /** * vips_draw_line1: (method) * @image: image to draw on * @ink: value to draw * @x1: start of draw_line * @y1: start of draw_line * @x2: end of draw_line * @y2: end of draw_line * @...: %NULL-terminated list of optional named arguments * * As vips_draw_line(), but just take a single double for @ink. * * See also: vips_draw_line(). * * Returns: 0 on success, or -1 on error. */ int vips_draw_line1(VipsImage *image, double ink, int x1, int y1, int x2, int y2, ...) { double array_ink[1]; va_list ap; int result; array_ink[0] = ink; va_start(ap, y2); result = vips_draw_linev(image, array_ink, 1, x1, y1, x2, y2, ap); va_end(ap); return result; } libvips-8.15.1/libvips/draw/draw_mask.c000066400000000000000000000230141454007373500200070ustar00rootroot00000000000000/* Draw a mask on an image. * * Copyright: J. Cupitt * Written: 15/06/1992 * 22/7/93 JC * - im_incheck() added * 16/8/94 JC * - im_incheck() changed to im_makerw() * 24/10/03 JC * - now blends with 0-255 mask * 5/12/06 * - im_invalidate() after paint * 6/3/10 * - don't im_invalidate() after paint, this now needs to be at a higher * level * 28/9/10 * - gtk-doc * - renamed as im_draw_mask() * - use Draw base class * 7/2/14 * - redo as a class * - now it's VipsDrawMask */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "drawink.h" typedef struct _VipsDrawMask { VipsDrawink parent_object; /* Parameters. */ VipsImage *mask; int x; int y; /* Derived. */ VipsRect image_clip; VipsRect mask_clip; } VipsDrawMask; typedef struct _VipsDrawMaskClass { VipsDrawinkClass parent_class; } VipsDrawMaskClass; G_DEFINE_TYPE(VipsDrawMask, vips_draw_mask, VIPS_TYPE_DRAWINK); /* Paint ink into an 8 or 16 bit integer image. */ #define IBLEND(TYPE, TO, INK) \ { \ TYPE *tto = (TYPE *) (TO); \ TYPE *tink = (TYPE *) (INK); \ \ int x, i, j; \ \ for (j = 0, x = 0; x < width; x++) \ for (i = 0; i < bands; i++, j++) \ tto[j] = \ (tink[i] * m[x] + \ tto[j] * (255 - m[x])) / \ 255; \ } /* Do the blend with doubles. */ #define DBLEND(TYPE, TO, INK) \ { \ TYPE *tto = (TYPE *) (TO); \ TYPE *tink = (TYPE *) (INK); \ \ int x, i, j; \ \ for (j = 0, x = 0; x < width; x++) \ for (i = 0; i < bands; i++, j++) \ tto[j] = ((double) tink[i] * m[x] + \ (double) tto[j] * (255 - m[x])) / \ 255; \ } /* Blend of complex. */ #define CBLEND(TYPE, TO, INK) \ { \ TYPE *tto = (TYPE *) (TO); \ TYPE *tink = (TYPE *) (INK); \ \ int x, i, j; \ \ for (j = 0, x = 0; x < width; x++) \ for (i = 0; i < bands * 2; i += 2, j += 2) { \ tto[j] = \ ((double) tink[i] * m[x] + \ (double) tto[j] * (255 - m[x])) / \ 255; \ tto[j + 1] = \ ((double) tink[i + 1] * m[x] + \ (double) tto[j + 1] * (255 - m[x])) / \ 255; \ } \ } static int vips_draw_mask_draw_labq(VipsImage *image, VipsImage *mask, VipsPel *ink, VipsRect *image_clip, VipsRect *mask_clip) { int width = image_clip->width; int height = image_clip->height; int bands = image->Bands; float *lab_buffer; int y; if (!(lab_buffer = VIPS_ARRAY(NULL, width * 3, float))) return -1; for (y = 0; y < height; y++) { VipsPel *to = VIPS_IMAGE_ADDR(image, image_clip->left, y + image_clip->top); VipsPel *m = VIPS_IMAGE_ADDR(mask, mask_clip->left, y + mask_clip->top); vips__LabQ2Lab_vec(lab_buffer, to, width); DBLEND(float, lab_buffer, (double *) ink); vips__Lab2LabQ_vec(to, lab_buffer, width); } g_free(lab_buffer); return 0; } static int vips_draw_mask_draw(VipsImage *image, VipsImage *mask, VipsPel *ink, VipsRect *image_clip, VipsRect *mask_clip) { int width = image_clip->width; int height = image_clip->height; int bands = image->Bands; int y; for (y = 0; y < height; y++) { VipsPel *to = VIPS_IMAGE_ADDR(image, image_clip->left, y + image_clip->top); VipsPel *m = VIPS_IMAGE_ADDR(mask, mask_clip->left, y + mask_clip->top); switch (image->BandFmt) { case VIPS_FORMAT_UCHAR: IBLEND(unsigned char, to, ink); break; case VIPS_FORMAT_CHAR: IBLEND(signed char, to, ink); break; case VIPS_FORMAT_USHORT: IBLEND(unsigned short, to, ink); break; case VIPS_FORMAT_SHORT: IBLEND(signed short, to, ink); break; case VIPS_FORMAT_UINT: DBLEND(unsigned int, to, ink); break; case VIPS_FORMAT_INT: DBLEND(signed int, to, ink); break; case VIPS_FORMAT_FLOAT: DBLEND(float, to, ink); break; case VIPS_FORMAT_DOUBLE: DBLEND(double, to, ink); break; case VIPS_FORMAT_COMPLEX: CBLEND(float, to, ink); break; case VIPS_FORMAT_DPCOMPLEX: CBLEND(double, to, ink); break; default: g_assert_not_reached(); } } return 0; } /* Direct path for draw-mask-along-line or draw-mask-along-circle. We want to * avoid function dispatch overhead. * * The vips7 im_draw_mask() wrapper calls this as well. */ int vips__draw_mask_direct(VipsImage *image, VipsImage *mask, VipsPel *ink, int x, int y) { VipsRect image_rect; VipsRect area_rect; VipsRect image_clip; VipsRect mask_clip; if (vips_check_coding_noneorlabq("draw_mask_direct", image) || vips_image_inplace(image) || vips_image_wio_input(mask) || vips_check_mono("draw_mask_direct", mask) || vips_check_uncoded("draw_mask_direct", mask) || vips_check_format("draw_mask_direct", mask, VIPS_FORMAT_UCHAR)) return -1; /* Find the area we draw on the image. */ area_rect.left = x; area_rect.top = y; area_rect.width = mask->Xsize; area_rect.height = mask->Ysize; image_rect.left = 0; image_rect.top = 0; image_rect.width = image->Xsize; image_rect.height = image->Ysize; vips_rect_intersectrect(&area_rect, &image_rect, &image_clip); /* And the area of the mask image we use. */ mask_clip = image_clip; mask_clip.left -= x; mask_clip.top -= y; if (!vips_rect_isempty(&image_clip)) switch (image->Coding) { case VIPS_CODING_LABQ: if (vips_draw_mask_draw_labq(image, mask, ink, &image_clip, &mask_clip)) return -1; break; case VIPS_CODING_NONE: if (vips_draw_mask_draw(image, mask, ink, &image_clip, &mask_clip)) return -1; break; default: g_assert_not_reached(); } return 0; } static int vips_draw_mask_build(VipsObject *object) { VipsDraw *draw = VIPS_DRAW(object); VipsDrawink *drawink = VIPS_DRAWINK(object); VipsDrawMask *mask = (VipsDrawMask *) object; if (VIPS_OBJECT_CLASS(vips_draw_mask_parent_class)->build(object)) return -1; if (vips__draw_mask_direct(draw->image, mask->mask, drawink->pixel_ink, mask->x, mask->y)) return -1; return 0; } static void vips_draw_mask_class_init(VipsDrawMaskClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "draw_mask"; vobject_class->description = _("draw a mask on an image"); vobject_class->build = vips_draw_mask_build; VIPS_ARG_IMAGE(class, "mask", 5, _("Mask"), _("Mask of pixels to draw"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawMask, mask)); VIPS_ARG_INT(class, "x", 6, _("x"), _("Draw mask here"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawMask, x), -1000000000, 1000000000, 0); VIPS_ARG_INT(class, "y", 7, _("y"), _("Draw mask here"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawMask, y), -1000000000, 1000000000, 0); } static void vips_draw_mask_init(VipsDrawMask *draw_mask) { } static int vips_draw_maskv(VipsImage *image, double *ink, int n, VipsImage *mask, int x, int y, va_list ap) { VipsArea *area_ink; int result; area_ink = VIPS_AREA(vips_array_double_new(ink, n)); result = vips_call_split("draw_mask", ap, image, area_ink, mask, x, y); vips_area_unref(area_ink); return result; } /** * vips_draw_mask: (method) * @image: image to draw on * @ink: (array length=n): value to draw * @n: size of ink array * @mask: mask of 0/255 values showing where to plot * @x: draw mask here * @y: draw mask here * @...: %NULL-terminated list of optional named arguments * * Draw @mask on the image. @mask is a monochrome 8-bit image with 0/255 * for transparent or @ink coloured points. Intermediate values blend the ink * with the pixel. Use with vips_text() to draw text on an image. Use in a * vips_draw_line() subclass to draw an object along a line. * * @ink is an array of double containing values to draw. * * See also: vips_text(), vips_draw_line(). * * Returns: 0 on success, or -1 on error. */ int vips_draw_mask(VipsImage *image, double *ink, int n, VipsImage *mask, int x, int y, ...) { va_list ap; int result; va_start(ap, y); result = vips_draw_maskv(image, ink, n, mask, x, y, ap); va_end(ap); return result; } /** * vips_draw_mask1: (method) * @image: image to draw on * @ink: value to draw * @mask: mask of 0/255 values showing where to plot * @x: draw mask here * @y: draw mask here * @...: %NULL-terminated list of optional named arguments * * As vips_draw_mask(), but just takes a single double for @ink. * * See also: vips_draw_mask(). * * Returns: 0 on success, or -1 on error. */ int vips_draw_mask1(VipsImage *image, double ink, VipsImage *mask, int x, int y, ...) { double array_ink[1]; va_list ap; int result; array_ink[0] = ink; va_start(ap, y); result = vips_draw_maskv(image, array_ink, 1, mask, x, y, ap); va_end(ap); return result; } libvips-8.15.1/libvips/draw/draw_rect.c000066400000000000000000000175751454007373500200300ustar00rootroot00000000000000/* Fill Rect r of image im with pels of colour ink. * * Copyright: J. Cupitt * Written: 15/06/1992 * 22/7/93 JC * - im_incheck() added * 16/8/94 JC * - im_incheck() changed to im_makerw() * 5/12/06 * - im_invalidate() after paint * 6/3/10 * - don't im_invalidate() after paint, this now needs to be at a higher * level * 22/9/10 * - gtk-doc * - added 'fill' * - renamed as im_draw_rect() for consistency * 27/9/10 * - memcpy() subsequent lines of the rect * 10/2/14 * - redo as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "drawink.h" typedef struct _VipsDrawRect { VipsDrawink parent_object; /* Parameters. */ int left; int top; int width; int height; gboolean fill; } VipsDrawRect; typedef struct _VipsDrawRectClass { VipsDrawinkClass parent_class; } VipsDrawRectClass; G_DEFINE_TYPE(VipsDrawRect, vips_draw_rect, VIPS_TYPE_DRAWINK); static int vips_draw_rect_build(VipsObject *object) { VipsDraw *draw = VIPS_DRAW(object); VipsDrawink *drawink = VIPS_DRAWINK(object); VipsArea *ink = VIPS_AREA(drawink->ink); VipsDrawRect *draw_rect = (VipsDrawRect *) object; int left = draw_rect->left; int top = draw_rect->top; int width = draw_rect->width; int height = draw_rect->height; VipsRect image; VipsRect rect; VipsRect clip; if (VIPS_OBJECT_CLASS(vips_draw_rect_parent_class)->build(object)) return -1; /* Also use a solid fill for very narrow unfilled rects. */ if (!draw_rect->fill && width > 2 && height > 2) return vips_draw_rect(draw->image, ink->data, ink->n, left, top, width, 1, NULL) || vips_draw_rect(draw->image, ink->data, ink->n, left + width - 1, top, 1, height, NULL) || vips_draw_rect(draw->image, ink->data, ink->n, left, top + height - 1, width, 1, NULL) || vips_draw_rect(draw->image, ink->data, ink->n, left, top, 1, height, NULL); image.left = 0; image.top = 0; image.width = draw->image->Xsize; image.height = draw->image->Ysize; rect.left = left; rect.top = top; rect.width = width; rect.height = height; vips_rect_intersectrect(&rect, &image, &clip); if (!vips_rect_isempty(&clip)) { VipsPel *to = VIPS_IMAGE_ADDR(draw->image, clip.left, clip.top); VipsPel *q; int x, y; /* We plot the first line pointwise, then memcpy() it for the * subsequent lines. */ q = to; for (x = 0; x < clip.width; x++) { vips__drawink_pel(drawink, q); q += draw->psize; } q = to + draw->lsize; for (y = 1; y < clip.height; y++) { memcpy(q, to, clip.width * draw->psize); q += draw->lsize; } } return 0; } static void vips_draw_rect_class_init(VipsDrawRectClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "draw_rect"; vobject_class->description = _("paint a rectangle on an image"); vobject_class->build = vips_draw_rect_build; VIPS_ARG_INT(class, "left", 6, _("Left"), _("Rect to fill"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawRect, left), -1000000000, 1000000000, 0); VIPS_ARG_INT(class, "top", 7, _("Top"), _("Rect to fill"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawRect, top), -1000000000, 1000000000, 0); VIPS_ARG_INT(class, "width", 8, _("Width"), _("Rect to fill"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawRect, width), -1000000000, 1000000000, 0); VIPS_ARG_INT(class, "height", 9, _("Height"), _("Rect to fill"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawRect, height), -1000000000, 1000000000, 0); VIPS_ARG_BOOL(class, "fill", 10, _("Fill"), _("Draw a solid object"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsDrawRect, fill), FALSE); } static void vips_draw_rect_init(VipsDrawRect *draw_rect) { } static int vips_draw_rectv(VipsImage *image, double *ink, int n, int left, int top, int width, int height, va_list ap) { VipsArea *area_ink; int result; area_ink = VIPS_AREA(vips_array_double_new(ink, n)); result = vips_call_split("draw_rect", ap, image, area_ink, left, top, width, height); vips_area_unref(area_ink); return result; } /** * vips_draw_rect: (method) * @image: image to draw on * @ink: (array length=n): value to draw * @n: length of ink array * @left: area to paint * @top: area to paint * @width: area to paint * @height: area to paint * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @fill: fill the rect * * Paint pixels within @left, @top, @width, @height in @image with @ink. If * @fill is zero, just paint a 1-pixel-wide outline. * * See also: vips_draw_circle(). * * Returns: 0 on success, or -1 on error. */ int vips_draw_rect(VipsImage *image, double *ink, int n, int left, int top, int width, int height, ...) { va_list ap; int result; va_start(ap, height); result = vips_draw_rectv(image, ink, n, left, top, width, height, ap); va_end(ap); return result; } /** * vips_draw_rect1: (method) * @image: image to draw on * @ink: value to draw * @left: area to paint * @top: area to paint * @width: area to paint * @height: area to paint * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @fill: fill the rect * * As vips_draw_rect(), but just take a single double for @ink. * * See also: vips_draw_rect(). * * Returns: 0 on success, or -1 on error. */ int vips_draw_rect1(VipsImage *image, double ink, int left, int top, int width, int height, ...) { double array_ink[1]; va_list ap; int result; array_ink[0] = ink; va_start(ap, height); result = vips_draw_rectv(image, array_ink, 1, left, top, width, height, ap); va_end(ap); return result; } /** * vips_draw_point: (method) * @image: image to draw on * @ink: (array length=n): value to draw * @n: length of ink array * @x: point to paint * @y: point to paint * @...: %NULL-terminated list of optional named arguments * * As vips_draw_rect(), but draw a single pixel at @x, @y. * * See also: vips_draw_rect(). * * Returns: 0 on success, or -1 on error. */ int vips_draw_point(VipsImage *image, double *ink, int n, int x, int y, ...) { va_list ap; int result; va_start(ap, y); result = vips_draw_rectv(image, ink, n, x, y, 1, 1, ap); va_end(ap); return result; } /** * vips_draw_point1: (method) * @image: image to draw on * @ink: value to draw * @x: point to draw * @y: point to draw * @...: %NULL-terminated list of optional named arguments * * As vips_draw_point(), but just take a single double for @ink. * * See also: vips_draw_point(). * * Returns: 0 on success, or -1 on error. */ int vips_draw_point1(VipsImage *image, double ink, int x, int y, ...) { double array_ink[1]; va_list ap; int result; array_ink[0] = ink; va_start(ap, y); result = vips_draw_rectv(image, array_ink, 1, x, y, 1, 1, ap); va_end(ap); return result; } libvips-8.15.1/libvips/draw/draw_smudge.c000066400000000000000000000137431454007373500203500ustar00rootroot00000000000000/* Smudge a piece of image. * * Copyright: J. Cupitt * Written: 15/06/1992 * 22/7/93 JC * - im_incheck() added * 16/8/94 JC * - im_incheck() changed to im_makerw() * ? JC * - im_makerw() changed to im_rwcheck() * 5/12/06 * - im_invalidate() after paint * 6/3/10 * - don't im_invalidate() after paint, this now needs to be at a higher * level * 30/9/10 * - gtk-doc * - deprecate im_smear() * 30/1/12 * - back to the custom smear, the conv one was too slow * 11/2/14 * - redo as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pdraw.h" typedef struct _VipsDrawSmudge { VipsDraw parent_object; /* Parameters. */ int left; int top; int width; int height; } VipsDrawSmudge; typedef struct _VipsDrawSmudgeClass { VipsDrawClass parent_class; } VipsDrawSmudgeClass; G_DEFINE_TYPE(VipsDrawSmudge, vips_draw_smudge, VIPS_TYPE_DRAW); static int vips_draw_smudge_build(VipsObject *object) { VipsDraw *draw = VIPS_DRAW(object); VipsImage *im = draw->image; VipsDrawSmudge *smudge = (VipsDrawSmudge *) object; int left = smudge->left; int top = smudge->top; int width = smudge->width; int height = smudge->height; /* Double bands for complex images. */ int bands = vips_image_get_bands(draw->image) * (vips_band_format_iscomplex(vips_image_get_format(im)) ? 2 : 1); int elements = bands * vips_image_get_width(im); VipsRect area, image, clipped; double *total; int x, y, i, j, b; if (VIPS_OBJECT_CLASS(vips_draw_smudge_parent_class)->build(object)) return -1; area.left = left; area.top = top; area.width = width; area.height = height; /* Don't do the margins. */ image.left = 0; image.top = 0; image.width = im->Xsize; image.height = im->Ysize; vips_rect_marginadjust(&image, -1); vips_rect_intersectrect(&area, &image, &clipped); if (vips_rect_isempty(&clipped)) return 0; if (!(total = VIPS_ARRAY(im, bands, double))) return -1; /* What we do for each type. */ #define SMUDGE(TYPE) \ for (y = 0; y < clipped.height; y++) { \ TYPE *q; \ TYPE *p; \ \ q = (TYPE *) VIPS_IMAGE_ADDR(im, \ clipped.left, clipped.top + y); \ p = q - elements - bands; \ for (x = 0; x < clipped.width; x++) { \ TYPE *p1, *p2; \ \ for (b = 0; b < bands; b++) \ total[b] = 0.0; \ \ p1 = p; \ for (i = 0; i < 3; i++) { \ p2 = p1; \ for (j = 0; j < 3; j++) \ for (b = 0; b < bands; b++) \ total[b] += *p2++; \ \ p1 += elements; \ } \ \ for (b = 0; b < bands; b++) \ q[b] = (16 * (double) q[b] + total[b]) / 25.0; \ \ p += bands; \ q += bands; \ } \ } switch (vips_image_get_format(im)) { case VIPS_FORMAT_UCHAR: SMUDGE(unsigned char); break; case VIPS_FORMAT_CHAR: SMUDGE(char); break; case VIPS_FORMAT_USHORT: SMUDGE(unsigned short); break; case VIPS_FORMAT_SHORT: SMUDGE(short); break; case VIPS_FORMAT_UINT: SMUDGE(unsigned int); break; case VIPS_FORMAT_INT: SMUDGE(int); break; case VIPS_FORMAT_FLOAT: SMUDGE(float); break; case VIPS_FORMAT_DOUBLE: SMUDGE(double); break; case VIPS_FORMAT_COMPLEX: SMUDGE(float); break; case VIPS_FORMAT_DPCOMPLEX: SMUDGE(double); break; default: g_assert_not_reached(); } return 0; } static void vips_draw_smudge_class_init(VipsDrawSmudgeClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "draw_smudge"; vobject_class->description = _("blur a rectangle on an image"); vobject_class->build = vips_draw_smudge_build; VIPS_ARG_INT(class, "left", 6, _("Left"), _("Rect to fill"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawSmudge, left), -1000000000, 1000000000, 0); VIPS_ARG_INT(class, "top", 7, _("Top"), _("Rect to fill"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawSmudge, top), -1000000000, 1000000000, 0); VIPS_ARG_INT(class, "width", 8, _("Width"), _("Rect to fill"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawSmudge, width), -1000000000, 1000000000, 0); VIPS_ARG_INT(class, "height", 9, _("Height"), _("Rect to fill"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawSmudge, height), -1000000000, 1000000000, 0); } static void vips_draw_smudge_init(VipsDrawSmudge *draw_smudge) { } /** * vips_draw_smudge: (method) * @image: image to draw on * @left: point to paint * @top: point to paint * @width: area to paint * @height: area to paint * @...: %NULL-terminated list of optional named arguments * * Smudge a section of @image. Each pixel in the area @left, @top, @width, * @height is replaced by the average of the surrounding 3x3 pixels. * * See also: vips_draw_line(). * * Returns: 0 on success, or -1 on error. */ int vips_draw_smudge(VipsImage *image, int left, int top, int width, int height, ...) { va_list ap; int result; va_start(ap, height); result = vips_call_split("draw_smudge", ap, image, left, top, width, height); va_end(ap); return result; } libvips-8.15.1/libvips/draw/drawink.c000066400000000000000000000061631454007373500175040ustar00rootroot00000000000000/* drawink with a constant ink * * 27/9/10 * - from im_drawink_circle() * 17/11/10 * - oops, scanline clipping was off by 1 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "drawink.h" G_DEFINE_ABSTRACT_TYPE(VipsDrawink, vips_drawink, VIPS_TYPE_DRAW); static int vips_drawink_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsDraw *draw = VIPS_DRAW(object); VipsDrawink *drawink = VIPS_DRAWINK(object); #ifdef DEBUG printf("vips_drawink_build: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ if (VIPS_OBJECT_CLASS(vips_drawink_parent_class)->build(object)) return -1; if (drawink->ink && !(drawink->pixel_ink = vips__vector_to_ink(class->nickname, draw->image, VIPS_ARRAY_ADDR(drawink->ink, 0), NULL, VIPS_AREA(drawink->ink)->n))) return -1; return 0; } static void vips_drawink_class_init(VipsDrawinkClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "drawink"; vobject_class->description = _("draw with ink operations"); vobject_class->build = vips_drawink_build; VIPS_ARG_BOXED(class, "ink", 2, _("Ink"), _("Color for pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsDrawink, ink), VIPS_TYPE_ARRAY_DOUBLE); } static void vips_drawink_init(VipsDrawink *drawink) { drawink->ink = vips_array_double_newv(1, 0.0); } /* Fill a scanline between points x1 and x2 inclusive. x1 < x2. */ int vips__drawink_scanline(VipsDrawink *drawink, int y, int x1, int x2) { VipsDraw *draw = (VipsDraw *) drawink; VipsPel *mp; int i; int len; g_assert(x1 <= x2); if (y < 0 || y >= draw->image->Ysize) return 0; if (x1 < 0 && x2 < 0) return 0; if (x1 >= draw->image->Xsize && x2 >= draw->image->Xsize) return 0; x1 = VIPS_CLIP(0, x1, draw->image->Xsize - 1); x2 = VIPS_CLIP(0, x2, draw->image->Xsize - 1); mp = VIPS_IMAGE_ADDR(draw->image, x1, y); len = x2 - x1 + 1; for (i = 0; i < len; i++) { vips__drawink_pel(drawink, mp); mp += draw->psize; } return 0; } libvips-8.15.1/libvips/draw/drawink.h000066400000000000000000000054131454007373500175060ustar00rootroot00000000000000/* a drawink operation with an ink param */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_DRAWINK_H #define VIPS_DRAWINK_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #include "pdraw.h" #define VIPS_TYPE_DRAWINK (vips_drawink_get_type()) #define VIPS_DRAWINK(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_DRAWINK, VipsDrawink)) #define VIPS_DRAWINK_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_DRAWINK, VipsDrawinkClass)) #define VIPS_IS_DRAWINK(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_DRAWINK)) #define VIPS_IS_DRAWINK_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_DRAWINK)) #define VIPS_DRAWINK_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_DRAWINK, VipsDrawinkClass)) typedef struct _VipsDrawink { VipsDraw parent_instance; VipsArrayDouble *ink; /* Ink cast to pixel type. */ VipsPel *pixel_ink; } VipsDrawink; typedef struct _VipsDrawinkClass { VipsDrawClass parent_class; } VipsDrawinkClass; GType vips_drawink_get_type(void); static inline int vips__drawink_pel(VipsDrawink *drawink, VipsPel *q) { VipsDraw *draw = (VipsDraw *) drawink; int j; /* Faster than memcopy() for n < about 20. */ for (j = 0; j < draw->psize; j++) q[j] = drawink->pixel_ink[j]; return 0; } /* Paint, with clip. */ static inline int vips__drawink_pel_clip(VipsDrawink *drawink, int x, int y) { VipsDraw *draw = (VipsDraw *) drawink; if (x < 0 || x >= draw->image->Xsize) return 0; if (y < 0 || y >= draw->image->Ysize) return 0; vips__drawink_pel(drawink, VIPS_IMAGE_ADDR(draw->image, x, y)); return 0; } /* Is p painted? */ static inline gboolean vips__drawink_painted(VipsDrawink *drawink, VipsPel *p) { VipsDraw *draw = (VipsDraw *) drawink; int j; for (j = 0; j < draw->psize; j++) if (p[j] != drawink->pixel_ink[j]) break; return j == draw->psize; } int vips__drawink_scanline(VipsDrawink *drawink, int y, int x1, int x2); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_DRAWINK_H*/ libvips-8.15.1/libvips/draw/meson.build000066400000000000000000000007121454007373500200350ustar00rootroot00000000000000draw_sources = files( 'draw.c', 'drawink.c', 'draw_circle.c', 'draw_flood.c', 'draw_mask.c', 'draw_image.c', 'draw_rect.c', 'draw_line.c', 'draw_smudge.c', ) draw_headers = files( 'pdraw.h', 'drawink.h', ) libvips_sources += draw_sources draw_lib = static_library('draw', draw_sources, draw_headers, dependencies: libvips_deps, gnu_symbol_visibility: 'hidden', ) libvips_components += draw_lib libvips-8.15.1/libvips/draw/pdraw.h000066400000000000000000000036631454007373500171710ustar00rootroot00000000000000/* base class for drawing operations */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_PDRAW_H #define VIPS_PDRAW_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #define VIPS_TYPE_DRAW (vips_draw_get_type()) #define VIPS_DRAW(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_DRAW, VipsDraw)) #define VIPS_DRAW_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_DRAW, VipsDrawClass)) #define VIPS_IS_DRAW(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_DRAW)) #define VIPS_IS_DRAW_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_DRAW)) #define VIPS_DRAW_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_DRAW, VipsDrawClass)) typedef struct _VipsDraw { VipsOperation parent_instance; /* Parameters. */ VipsImage *image; /* Draw here */ /* Derived stuff. */ size_t lsize; size_t psize; /* If the object to draw is entirely within the image, we have a * faster noclip path. */ gboolean noclip; } VipsDraw; typedef struct _VipsDrawClass { VipsOperationClass parent_class; } VipsDrawClass; GType vips_draw_get_type(void); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_PDRAW_H*/ libvips-8.15.1/libvips/foreign/000077500000000000000000000000001454007373500163675ustar00rootroot00000000000000libvips-8.15.1/libvips/foreign/analyze2vips.c000066400000000000000000000356431454007373500211750ustar00rootroot00000000000000/* Read a Analyze file. Old-style header (so called 7.5 format). * * 3/8/05 * - dbh.h header from Ralph Myers * 22/8/05 * - better byteswapper * 12/5/09 * - fix signed/unsigned warning * 13/1/09 * - try harder not to generate error messages in "isanalyze" * 4/2/10 * - gtkdoc * 14/12/11 * - redo as a set of fns ready for wrapping in a new-style class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #ifdef HAVE_ANALYZE #include #include #include #include #include #include #include #include "dbh.h" #include "pforeign.h" /* The things we can have in header fields. Can't use GType, since we want a * static value we can use in a declaration. */ typedef enum { BYTE, SHORT, INT, FLOAT, STRING } Type; /* A field in the dsr header. */ typedef struct { const char *name; /* Eg. "header_key.sizeof_hdr" */ Type type; glong offset; /* Offset in struct */ int len; /* Sizeof ... useful for string types */ } Field; static Field dsr_header[] = { { "dsr-header_key.sizeof_hdr", INT, G_STRUCT_OFFSET(struct dsr, hk.sizeof_hdr), 4 }, { "dsr-header_key.data_type", STRING, G_STRUCT_OFFSET(struct dsr, hk.data_type), 10 }, { "dsr-header_key.db_name", STRING, G_STRUCT_OFFSET(struct dsr, hk.db_name), 18 }, { "dsr-header_key.extents", INT, G_STRUCT_OFFSET(struct dsr, hk.extents), 4 }, { "dsr-header_key.session_error", SHORT, G_STRUCT_OFFSET(struct dsr, hk.session_error), 2 }, { "dsr-header_key.regular", BYTE, G_STRUCT_OFFSET(struct dsr, hk.regular), 1 }, { "dsr-header_key.hkey_un0", BYTE, G_STRUCT_OFFSET(struct dsr, hk.hkey_un0), 1 }, { "dsr-image_dimension.dim[0]", SHORT, G_STRUCT_OFFSET(struct dsr, dime.dim[0]), 2 }, { "dsr-image_dimension.dim[1]", SHORT, G_STRUCT_OFFSET(struct dsr, dime.dim[1]), 2 }, { "dsr-image_dimension.dim[2]", SHORT, G_STRUCT_OFFSET(struct dsr, dime.dim[2]), 2 }, { "dsr-image_dimension.dim[3]", SHORT, G_STRUCT_OFFSET(struct dsr, dime.dim[3]), 2 }, { "dsr-image_dimension.dim[4]", SHORT, G_STRUCT_OFFSET(struct dsr, dime.dim[4]), 2 }, { "dsr-image_dimension.dim[5]", SHORT, G_STRUCT_OFFSET(struct dsr, dime.dim[5]), 2 }, { "dsr-image_dimension.dim[6]", SHORT, G_STRUCT_OFFSET(struct dsr, dime.dim[6]), 2 }, { "dsr-image_dimension.dim[7]", SHORT, G_STRUCT_OFFSET(struct dsr, dime.dim[7]), 2 }, { "dsr-image_dimension.vox_units[0]", BYTE, G_STRUCT_OFFSET(struct dsr, dime.vox_units[0]), 1 }, { "dsr-image_dimension.vox_units[1]", BYTE, G_STRUCT_OFFSET(struct dsr, dime.vox_units[1]), 1 }, { "dsr-image_dimension.vox_units[2]", BYTE, G_STRUCT_OFFSET(struct dsr, dime.vox_units[2]), 1 }, { "dsr-image_dimension.vox_units[3]", BYTE, G_STRUCT_OFFSET(struct dsr, dime.vox_units[3]), 1 }, { "dsr-image_dimension.cal_units[0]", BYTE, G_STRUCT_OFFSET(struct dsr, dime.cal_units[0]), 1 }, { "dsr-image_dimension.cal_units[1]", BYTE, G_STRUCT_OFFSET(struct dsr, dime.cal_units[1]), 1 }, { "dsr-image_dimension.cal_units[2]", BYTE, G_STRUCT_OFFSET(struct dsr, dime.cal_units[2]), 1 }, { "dsr-image_dimension.cal_units[3]", BYTE, G_STRUCT_OFFSET(struct dsr, dime.cal_units[3]), 1 }, { "dsr-image_dimension.cal_units[4]", BYTE, G_STRUCT_OFFSET(struct dsr, dime.cal_units[4]), 1 }, { "dsr-image_dimension.cal_units[5]", BYTE, G_STRUCT_OFFSET(struct dsr, dime.cal_units[5]), 1 }, { "dsr-image_dimension.cal_units[6]", BYTE, G_STRUCT_OFFSET(struct dsr, dime.cal_units[6]), 1 }, { "dsr-image_dimension.cal_units[7]", BYTE, G_STRUCT_OFFSET(struct dsr, dime.cal_units[7]), 1 }, { "dsr-image_dimension.data_type", SHORT, G_STRUCT_OFFSET(struct dsr, dime.datatype), 2 }, { "dsr-image_dimension.bitpix", SHORT, G_STRUCT_OFFSET(struct dsr, dime.bitpix), 2 }, { "dsr-image_dimension.dim_un0", SHORT, G_STRUCT_OFFSET(struct dsr, dime.dim_un0), 2 }, { "dsr-image_dimension.pixdim[0]", FLOAT, G_STRUCT_OFFSET(struct dsr, dime.pixdim[0]), 4 }, { "dsr-image_dimension.pixdim[1]", FLOAT, G_STRUCT_OFFSET(struct dsr, dime.pixdim[1]), 4 }, { "dsr-image_dimension.pixdim[2]", FLOAT, G_STRUCT_OFFSET(struct dsr, dime.pixdim[2]), 4 }, { "dsr-image_dimension.pixdim[3]", FLOAT, G_STRUCT_OFFSET(struct dsr, dime.pixdim[3]), 4 }, { "dsr-image_dimension.pixdim[4]", FLOAT, G_STRUCT_OFFSET(struct dsr, dime.pixdim[4]), 4 }, { "dsr-image_dimension.pixdim[5]", FLOAT, G_STRUCT_OFFSET(struct dsr, dime.pixdim[5]), 4 }, { "dsr-image_dimension.pixdim[6]", FLOAT, G_STRUCT_OFFSET(struct dsr, dime.pixdim[6]), 4 }, { "dsr-image_dimension.pixdim[7]", FLOAT, G_STRUCT_OFFSET(struct dsr, dime.pixdim[7]), 4 }, { "dsr-image_dimension.vox_offset", FLOAT, G_STRUCT_OFFSET(struct dsr, dime.vox_offset), 4 }, { "dsr-image_dimension.cal_max", FLOAT, G_STRUCT_OFFSET(struct dsr, dime.cal_max), 4 }, { "dsr-image_dimension.cal_min", FLOAT, G_STRUCT_OFFSET(struct dsr, dime.cal_min), 4 }, { "dsr-image_dimension.compressed", INT, G_STRUCT_OFFSET(struct dsr, dime.compressed), 4 }, { "dsr-image_dimension.verified", INT, G_STRUCT_OFFSET(struct dsr, dime.verified), 4 }, { "dsr-image_dimension.glmax", INT, G_STRUCT_OFFSET(struct dsr, dime.glmax), 4 }, { "dsr-image_dimension.glmin", INT, G_STRUCT_OFFSET(struct dsr, dime.glmin), 4 }, { "dsr-data_history.descrip", STRING, G_STRUCT_OFFSET(struct dsr, hist.descrip), 80 }, { "dsr-data_history.aux_file", STRING, G_STRUCT_OFFSET(struct dsr, hist.aux_file), 24 }, { "dsr-data_history.orient", BYTE, G_STRUCT_OFFSET(struct dsr, hist.orient), 1 }, { "dsr-data_history.originator", STRING, G_STRUCT_OFFSET(struct dsr, hist.originator), 10 }, { "dsr-data_history.generated", STRING, G_STRUCT_OFFSET(struct dsr, hist.generated), 10 }, { "dsr-data_history.scannum", STRING, G_STRUCT_OFFSET(struct dsr, hist.scannum), 10 }, { "dsr-data_history.patient_id", STRING, G_STRUCT_OFFSET(struct dsr, hist.patient_id), 10 }, { "dsr-data_history.exp_date", STRING, G_STRUCT_OFFSET(struct dsr, hist.exp_date), 10 }, { "dsr-data_history.exp_time", STRING, G_STRUCT_OFFSET(struct dsr, hist.exp_time), 10 }, { "dsr-data_history.hist_un0", STRING, G_STRUCT_OFFSET(struct dsr, hist.hist_un0), 3 }, { "dsr-data_history.views", INT, G_STRUCT_OFFSET(struct dsr, hist.views), 4 }, { "dsr-data_history.vols_added", INT, G_STRUCT_OFFSET(struct dsr, hist.vols_added), 4 }, { "dsr-data_history.start_field", INT, G_STRUCT_OFFSET(struct dsr, hist.start_field), 4 }, { "dsr-data_history.field_skip", INT, G_STRUCT_OFFSET(struct dsr, hist.field_skip), 4 }, { "dsr-data_history.omax", INT, G_STRUCT_OFFSET(struct dsr, hist.omax), 4 }, { "dsr-data_history.omin", INT, G_STRUCT_OFFSET(struct dsr, hist.omin), 4 }, { "dsr-data_history.smax", INT, G_STRUCT_OFFSET(struct dsr, hist.smax), 4 }, { "dsr-data_history.smin", INT, G_STRUCT_OFFSET(struct dsr, hist.smin), 4 } }; /* Given a filename, generate the names for the header and the image data. * * Eg. * "fred" -> "fred.hdr", "fred.img" * "fred.img" -> "fred.hdr", "fred.img" */ static void generate_filenames(const char *path, char *header, char *image) { const char *olds[] = { ".img", ".hdr" }; vips__change_suffix(path, header, FILENAME_MAX, ".hdr", olds, 2); vips__change_suffix(path, image, FILENAME_MAX, ".img", olds, 2); } /* str is a str which may not be NULL-terminated. Return a pointer to a static * buffer with a NULL-terminated version so we can safely printf() the string. * Also, make sure the string is plain ascii. */ static char * getstr(int mx, const char *str) { static char buf[256]; int i; g_assert(mx < 256); vips_strncpy(buf, str, mx); buf[mx] = '\0'; /* How annoying, patient_id has some funny ctrlchars in that mess up * xml encode later. */ for (i = 0; i < mx && buf[i]; i++) if (!isascii(buf[i]) || buf[i] < 32) buf[i] = '@'; return buf; } #ifdef DEBUG static void print_dsr(struct dsr *d) { int i; for (i = 0; i < VIPS_NUMBER(dsr_header); i++) { printf("%s = ", dsr_header[i].name); switch (dsr_header[i].type) { case BYTE: printf("%d\n", G_STRUCT_MEMBER(char, d, dsr_header[i].offset)); break; case SHORT: printf("%d\n", G_STRUCT_MEMBER(short, d, dsr_header[i].offset)); break; case INT: printf("%d\n", G_STRUCT_MEMBER(int, d, dsr_header[i].offset)); break; case FLOAT: printf("%g\n", G_STRUCT_MEMBER(float, d, dsr_header[i].offset)); break; case STRING: printf("\"%s\"\n", getstr(dsr_header[i].len, &G_STRUCT_MEMBER(char, d, dsr_header[i].offset))); break; default: g_assert_not_reached(); } } } #endif /*DEBUG*/ static struct dsr * read_header(const char *header) { struct dsr *d; size_t len; if (!(d = (struct dsr *) vips__file_read_name(header, NULL, &len))) return NULL; if (len != sizeof(struct dsr)) { vips_error("analyze2vips", "%s", _("header file size incorrect")); g_free(d); return NULL; } /* Ouch! Should check at configure time I guess. */ g_assert(sizeof(struct dsr) == 348); /* dsr headers are always SPARC byte order (MSB first). Do we need to * swap? */ if (!vips_amiMSBfirst()) { int i; for (i = 0; i < VIPS_NUMBER(dsr_header); i++) { unsigned char *p; switch (dsr_header[i].type) { case SHORT: p = &G_STRUCT_MEMBER(unsigned char, d, dsr_header[i].offset); vips__copy_2byte(TRUE, p, p); break; case INT: case FLOAT: p = &G_STRUCT_MEMBER(unsigned char, d, dsr_header[i].offset); vips__copy_4byte(TRUE, p, p); break; case BYTE: case STRING: break; default: g_assert_not_reached(); } } } if ((int) len != d->hk.sizeof_hdr) { vips_error("analyze2vips", "%s", _("header size incorrect")); g_free(d); return NULL; } return d; } /* Try to get VIPS header properties from a dsr. */ static int get_vips_properties(struct dsr *d, int *width, int *height, int *bands, VipsBandFormat *fmt) { int i; if (d->dime.dim[0] < 2 || d->dime.dim[0] > 7) { vips_error("analyze2vips", _("%d-dimensional images not supported"), d->dime.dim[0]); return -1; } /* Size of base 2d images. */ *width = d->dime.dim[1]; *height = d->dime.dim[2]; for (i = 3; i <= d->dime.dim[0]; i++) *height *= d->dime.dim[i]; /* Check it's a datatype we can handle. */ switch (d->dime.datatype) { case DT_UNSIGNED_CHAR: *bands = 1; *fmt = VIPS_FORMAT_UCHAR; break; case DT_SIGNED_SHORT: *bands = 1; *fmt = VIPS_FORMAT_SHORT; break; case DT_SIGNED_INT: *bands = 1; *fmt = VIPS_FORMAT_INT; break; case DT_FLOAT: *bands = 1; *fmt = VIPS_FORMAT_FLOAT; break; case DT_COMPLEX: *bands = 1; *fmt = VIPS_FORMAT_COMPLEX; break; case DT_DOUBLE: *bands = 1; *fmt = VIPS_FORMAT_DOUBLE; break; case DT_RGB: *bands = 3; *fmt = VIPS_FORMAT_UCHAR; break; default: vips_error("analyze2vips", _("datatype %d not supported"), d->dime.datatype); return -1; } #ifdef DEBUG printf("get_vips_properties: width = %d\n", *width); printf("get_vips_properties: height = %d\n", *height); printf("get_vips_properties: bands = %d\n", *bands); printf("get_vips_properties: fmt = %d\n", *fmt); #endif /*DEBUG*/ return 0; } static void attach_meta(VipsImage *out, struct dsr *d) { int i; vips_image_set_blob(out, "dsr", (VipsCallbackFn) vips_area_free_cb, d, d->hk.sizeof_hdr); for (i = 0; i < VIPS_NUMBER(dsr_header); i++) { switch (dsr_header[i].type) { case BYTE: vips_image_set_int(out, dsr_header[i].name, G_STRUCT_MEMBER(char, d, dsr_header[i].offset)); break; case SHORT: vips_image_set_int(out, dsr_header[i].name, G_STRUCT_MEMBER(short, d, dsr_header[i].offset)); break; case INT: vips_image_set_int(out, dsr_header[i].name, G_STRUCT_MEMBER(int, d, dsr_header[i].offset)); break; case FLOAT: vips_image_set_double(out, dsr_header[i].name, G_STRUCT_MEMBER(float, d, dsr_header[i].offset)); break; case STRING: vips_image_set_string(out, dsr_header[i].name, getstr(dsr_header[i].len, &G_STRUCT_MEMBER(char, d, dsr_header[i].offset))); break; default: g_assert_not_reached(); } } } int vips__isanalyze(const char *filename) { char header[FILENAME_MAX]; char image[FILENAME_MAX]; struct dsr *d; int width, height; int bands; VipsBandFormat fmt; int result; generate_filenames(filename, header, image); if (!vips_existsf("%s", header)) return 0; vips_error_freeze(); d = read_header(header); vips_error_thaw(); if (!d) return 0; #ifdef DEBUG print_dsr(d); #endif /*DEBUG*/ vips_error_freeze(); result = get_vips_properties(d, &width, &height, &bands, &fmt); vips_error_thaw(); g_free(d); return result == 0; } int vips__analyze_read_header(const char *filename, VipsImage *out) { char header[FILENAME_MAX]; char image[FILENAME_MAX]; struct dsr *d; int width, height; int bands; VipsBandFormat fmt; generate_filenames(filename, header, image); if (!(d = read_header(header))) return -1; #ifdef DEBUG print_dsr(d); #endif /*DEBUG*/ if (get_vips_properties(d, &width, &height, &bands, &fmt)) { g_free(d); return -1; } vips_image_init_fields(out, width, height, bands, fmt, VIPS_CODING_NONE, bands == 1 ? VIPS_INTERPRETATION_B_W : VIPS_INTERPRETATION_sRGB, 1.0, 1.0); attach_meta(out, d); if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_THINSTRIP, NULL)) return -1; return 0; } int vips__analyze_read(const char *filename, VipsImage *out) { char header[FILENAME_MAX]; char image[FILENAME_MAX]; struct dsr *d; VipsImage *x = vips_image_new(); VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(x), 3); int width, height; int bands; VipsBandFormat fmt; generate_filenames(filename, header, image); if (!(d = read_header(header))) { g_object_unref(x); return -1; } attach_meta(out, d); #ifdef DEBUG print_dsr(d); #endif /*DEBUG*/ if (get_vips_properties(d, &width, &height, &bands, &fmt) || !(t[0] = vips_image_new_from_file_raw(image, width, height, bands * vips_format_sizeof(fmt), 0))) { g_object_unref(x); return -1; } if (vips_copy(t[0], &t[1], "bands", bands, "format", fmt, NULL) || vips__byteswap_bool(t[1], &t[2], !vips_amiMSBfirst()) || vips_image_write(t[2], out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } #endif /*HAVE_ANALYZE*/ libvips-8.15.1/libvips/foreign/analyzeload.c000066400000000000000000000106761454007373500210500ustar00rootroot00000000000000/* load analyze from a file * * 5/12/11 * - from openslideload.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #ifdef HAVE_ANALYZE #include "pforeign.h" typedef struct _VipsForeignLoadAnalyze { VipsForeignLoad parent_object; /* Filename for load. */ char *filename; } VipsForeignLoadAnalyze; typedef VipsForeignLoadClass VipsForeignLoadAnalyzeClass; G_DEFINE_TYPE(VipsForeignLoadAnalyze, vips_foreign_load_analyze, VIPS_TYPE_FOREIGN_LOAD); static VipsForeignFlags vips_foreign_load_analyze_get_flags_filename(const char *filename) { return VIPS_FOREIGN_PARTIAL; } static VipsForeignFlags vips_foreign_load_analyze_get_flags(VipsForeignLoad *load) { return VIPS_FOREIGN_PARTIAL; } static int vips_foreign_load_analyze_header(VipsForeignLoad *load) { VipsForeignLoadAnalyze *analyze = (VipsForeignLoadAnalyze *) load; if (vips__analyze_read_header(analyze->filename, load->out)) return -1; VIPS_SETSTR(load->out->filename, analyze->filename); return 0; } static int vips_foreign_load_analyze_load(VipsForeignLoad *load) { VipsForeignLoadAnalyze *analyze = (VipsForeignLoadAnalyze *) load; if (vips__analyze_read(analyze->filename, load->real)) return -1; return 0; } static const char *vips_foreign_analyze_suffs[] = { ".img", ".hdr", NULL }; static void vips_foreign_load_analyze_class_init(VipsForeignLoadAnalyzeClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "analyzeload"; object_class->description = _("load an Analyze6 image"); /* This is fuzzed, but you're unlikely to want to use it on * untrusted files. */ operation_class->flags |= VIPS_OPERATION_UNTRUSTED; foreign_class->suffs = vips_foreign_analyze_suffs; /* is_a() is not that quick ... lower the priority. */ foreign_class->priority = -50; load_class->is_a = vips__isanalyze; load_class->get_flags_filename = vips_foreign_load_analyze_get_flags_filename; load_class->get_flags = vips_foreign_load_analyze_get_flags; load_class->header = vips_foreign_load_analyze_header; load_class->load = vips_foreign_load_analyze_load; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadAnalyze, filename), NULL); } static void vips_foreign_load_analyze_init(VipsForeignLoadAnalyze *analyze) { } #endif /*HAVE_ANALYZE*/ /** * vips_analyzeload: * @filename: file to load * @out: (out): decompressed image * @...: %NULL-terminated list of optional named arguments * * Load an Analyze 6.0 file. If @filename is "fred.img", this will look for * an image header called "fred.hdr" and pixel data in "fred.img". You can * also load "fred" or "fred.hdr". * * Images are * loaded lazilly and byte-swapped, if necessary. The Analyze metadata is read * and attached. * * See also: vips_image_new_from_file(). * * Returns: 0 on success, -1 on error. */ int vips_analyzeload(const char *filename, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("analyzeload", ap, filename, out); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/archive.c000066400000000000000000000160771454007373500201670ustar00rootroot00000000000000/* wrapper around libarchive * * 8/9/23 * - extracted from dzsave */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define VIPS_DEBUG #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pforeign.h" #ifdef HAVE_LIBARCHIVE #include #include static GMutex *vips_libarchive_mutex = NULL; struct _VipsArchive { // prepend filenames with this for filesystem output char *base_dirname; // write a zip to a target struct archive *archive; VipsTarget *target; }; void vips__archive_free(VipsArchive *archive) { // flush any pending writes to zip output if (archive->archive) archive_write_close(archive->archive); VIPS_FREE(archive->base_dirname); VIPS_FREEF(archive_write_free, archive->archive); VIPS_FREE(archive); } static ssize_t zip_write_target_cb(struct archive *a, void *client_data, const void *data, size_t length) { VipsArchive *archive = (VipsArchive *) client_data; if (vips_target_write(archive->target, data, length)) return -1; return length; } static int zip_close_target_cb(struct archive *a, void *client_data) { VipsArchive *archive = (VipsArchive *) client_data; if (vips_target_end(archive->target)) return ARCHIVE_FATAL; return ARCHIVE_OK; } static void * vips__archive_once_init(void *client) { vips_libarchive_mutex = vips_g_mutex_new(); return NULL; } static void vips__archive_init(void) { static GOnce once = G_ONCE_INIT; VIPS_ONCE(&once, vips__archive_once_init, NULL); } // write to a filesystem directory VipsArchive * vips__archive_new_to_dir(const char *base_dirname) { VipsArchive *archive; vips__archive_init(); if (!(archive = VIPS_NEW(NULL, VipsArchive))) return NULL; archive->base_dirname = g_strdup(base_dirname); return archive; } // write a zip to a target VipsArchive * vips__archive_new_to_target(VipsTarget *target, const char *base_dirname, int compression) { VipsArchive *archive; #ifdef DEBUG printf("vips__archive_new_to_target: base_dirname = %s, compression = %d\n", base_dirname, compression); #endif /*DEBUG*/ vips__archive_init(); if (!(archive = VIPS_NEW(NULL, VipsArchive))) return NULL; archive->target = target; archive->base_dirname = g_strdup(base_dirname); if (!(archive->archive = archive_write_new())) { vips_error("archive", "%s", _("unable to create archive")); vips__archive_free(archive); return NULL; } /* Set format to zip. */ if (archive_write_set_format(archive->archive, ARCHIVE_FORMAT_ZIP)) { vips_error("archive", "%s", _("unable to set zip format")); vips__archive_free(archive); return NULL; } /* Remap compression=-1 to compression=6. */ if (compression == -1) compression = 6; /* Z_DEFAULT_COMPRESSION */ #if ARCHIVE_VERSION_NUMBER >= 3002000 /* Deflate compression requires libarchive >= v3.2.0. * https://github.com/libarchive/libarchive/pull/84 */ char compression_string[2] = { '0' + compression, 0 }; if (archive_write_set_format_option(archive->archive, "zip", "compression-level", compression_string)) { vips_error("archive", "%s", _("unable to set compression")); vips__archive_free(archive); return NULL; } #else if (compression > 0) g_warning("libarchive >= v3.2.0 required for Deflate compression"); #endif /* Do not pad last block. */ if (archive_write_set_bytes_in_last_block(archive->archive, 1)) { vips_error("archive", "%s", _("unable to set padding")); vips__archive_free(archive); return NULL; } /* Register target callback functions. */ if (archive_write_open(archive->archive, archive, NULL, zip_write_target_cb, zip_close_target_cb)) { vips_error("archive", "%s", _("unable to open for write")); vips__archive_free(archive); return NULL; } return archive; } static int vips__archive_mkdir_file(VipsArchive *archive, const char *dirname) { char *path; path = g_build_filename(archive->base_dirname, dirname, NULL); if (g_mkdir_with_parents(path, 0777) && errno != EEXIST) { int save_errno = errno; char *utf8name; utf8name = g_filename_display_name(path); vips_error("archive", _("unable to create directory \"%s\", %s"), utf8name, g_strerror(save_errno)); g_free(utf8name); g_free(path); return -1; } g_free(path); return 0; } int vips__archive_mkdir(VipsArchive *archive, const char *dirname) { /* The ZIP format maintains a hierarchical structure, avoiding * the need to create individual entries for each (sub-)directory. */ if (archive->archive) return 0; return vips__archive_mkdir_file(archive, dirname); } static int vips__archive_mkfile_zip(VipsArchive *archive, const char *filename, void *buf, size_t len) { struct archive_entry *entry; vips__worker_lock(vips_libarchive_mutex); if (!(entry = archive_entry_new())) { vips_error("archive", "%s", _("unable to create entry")); g_mutex_unlock(vips_libarchive_mutex); return -1; } char *path; path = g_build_filename(archive->base_dirname, filename, NULL); archive_entry_set_pathname(entry, path); archive_entry_set_mode(entry, S_IFREG | 0664); archive_entry_set_size(entry, len); g_free(path); if (archive_write_header(archive->archive, entry)) { vips_error("archive", "%s", _("unable to write header")); archive_entry_free(entry); g_mutex_unlock(vips_libarchive_mutex); return -1; } archive_entry_free(entry); if (archive_write_data(archive->archive, buf, len) != len) { vips_error("archive", "%s", _("unable to write data")); g_mutex_unlock(vips_libarchive_mutex); return -1; } g_mutex_unlock(vips_libarchive_mutex); return 0; } static int vips__archive_mkfile_file(VipsArchive *archive, const char *filename, void *buf, size_t len) { char *path; FILE *f; path = g_build_filename(archive->base_dirname, filename, NULL); if (!(f = vips__file_open_write(path, FALSE))) { g_free(path); return -1; } if (vips__file_write(buf, sizeof(char), len, f)) { g_free(path); fclose(f); return -1; } fclose(f); g_free(path); return 0; } int vips__archive_mkfile(VipsArchive *archive, const char *filename, void *buf, size_t len) { return ((archive->archive) ? vips__archive_mkfile_zip : vips__archive_mkfile_file)(archive, filename, buf, len); } #endif /*HAVE_LIBARCHIVE*/ libvips-8.15.1/libvips/foreign/cairo.c000066400000000000000000000052311454007373500176310ustar00rootroot00000000000000/* Shared code for cairo based loaders like svgload and pdfload. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include /* Convert from Cairo-style premultiplied BGRA to RGBA. * * See also openslide's argb2rgba(). */ void vips__premultiplied_bgra2rgba(guint32 *restrict p, int n) { int x; for (x = 0; x < n; x++) { guint32 bgra = GUINT32_FROM_BE(p[x]); guint8 a = bgra & 0xff; guint32 rgba; if (a == 0 || a == 255) rgba = (bgra & 0x00ff00ff) | (bgra & 0x0000ff00) << 16 | (bgra & 0xff000000) >> 16; else /* Undo premultiplication. */ rgba = ((255 * ((bgra >> 8) & 0xff) / a) << 24) | ((255 * ((bgra >> 16) & 0xff) / a) << 16) | ((255 * ((bgra >> 24) & 0xff) / a) << 8) | a; p[x] = GUINT32_TO_BE(rgba); } } /* Unpremultiplied RGBA (vips convention) to cairo-style premul BGRA. */ void vips__rgba2bgra_premultiplied(guint32 *restrict p, int n) { int x; for (x = 0; x < n; x++) { guint32 rgba = GUINT32_FROM_BE(p[x]); guint8 a = rgba & 0xff; guint32 bgra; if (a == 0) bgra = 0; else if (a == 255) bgra = (rgba & 0x00ff00ff) | (rgba & 0x0000ff00) << 16 | (rgba & 0xff000000) >> 16; else { int r = (rgba >> 24) & 0xff; int g = (rgba >> 16) & 0xff; int b = (rgba >> 8) & 0xff; r = ((r * a) + 128) >> 8; g = ((g * a) + 128) >> 8; b = ((b * a) + 128) >> 8; bgra = (b << 24) | (g << 16) | (r << 8) | a; } p[x] = GUINT32_TO_BE(bgra); } } /* Convert from PDFium-style BGRA to RGBA. */ void vips__bgra2rgba(guint32 *restrict p, int n) { int x; for (x = 0; x < n; x++) { guint32 bgra = GUINT32_FROM_BE(p[x]); guint rgba; /* Leave G and A, swap R and B. */ rgba = (bgra & 0x00ff00ff) | (bgra & 0x0000ff00) << 16 | (bgra & 0xff000000) >> 16; p[x] = GUINT32_TO_BE(rgba); } } libvips-8.15.1/libvips/foreign/cgifsave.c000066400000000000000000001040671454007373500203320ustar00rootroot00000000000000/* save as GIF * * 22/8/21 lovell * 18/1/22 TheEssem * - fix change detector * 3/12/22 * - deprecate reoptimise, add reuse */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pforeign.h" #include "quantise.h" #if defined(HAVE_CGIF) && defined(HAVE_QUANTIZATION) #include /* The modes we work in. * * VIPS_FOREIGN_SAVE_CGIF_MODE_LOCAL: * * We find a global palette from the first frame, then write subsequent * frames with a local palette if they start to drift too far from the * first frame. * * VIPS_FOREIGN_SAVE_CGIF_MODE_GLOBAL: * * Each frame is dithered to single global colour table taken from the * input image "gif-palette" metadata item. * * We use LOCAL by default. We use GLOBAL if @reuse is set and there's * a palette attached to the image to be saved. */ typedef enum _VipsForeignSaveCgifMode { VIPS_FOREIGN_SAVE_CGIF_MODE_GLOBAL, VIPS_FOREIGN_SAVE_CGIF_MODE_LOCAL } VipsForeignSaveCgifMode; typedef struct _VipsForeignSaveCgif { VipsForeignSave parent_object; double dither; int effort; int bitdepth; double interframe_maxerror; gboolean reuse; gboolean interlace; double interpalette_maxerror; VipsTarget *target; /* Derived write params. */ VipsForeignSaveCgifMode mode; VipsImage *in; /* Not a reference */ int *delay; int delay_length; int loop; /* The RGBA palette attached to the input image (if any). */ int *palette; int n_colours; /* The frame we are building, the y position in the frame. */ int frame_width; int frame_height; VipsPel *frame_bytes; int write_y; int page_number; /* The current frame as seen by libimagequant. */ VipsQuantiseAttr *attr; VipsQuantiseResult *quantisation_result; /* The palette we used for the previous frame. This can be equal to * quantisation_result if we used the global palette for the previous * frame, so don't free this. */ VipsQuantiseResult *previous_quantisation_result; /* ... and a palette we will need to free. */ VipsQuantiseResult *free_quantisation_result; /* The index frame we get libimagequant to generate. */ VipsPel *index; /* The previous RGBA frame (needed for transparency trick). */ VipsPel *previous_frame; /* The frame as written by libcgif. */ CGIF *cgif_context; CGIF_Config cgif_config; int n_palettes_generated; /* Deprecated. */ gboolean reoptimise; } VipsForeignSaveCgif; typedef VipsForeignSaveClass VipsForeignSaveCgifClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignSaveCgif, vips_foreign_save_cgif, VIPS_TYPE_FOREIGN_SAVE); static void vips_foreign_save_cgif_dispose(GObject *gobject) { VipsForeignSaveCgif *cgif = (VipsForeignSaveCgif *) gobject; g_info("cgifsave: %d frames", cgif->page_number); g_info("cgifsave: %d unique palettes", cgif->n_palettes_generated); VIPS_FREEF(cgif_close, cgif->cgif_context); VIPS_FREEF(vips__quantise_result_destroy, cgif->quantisation_result); VIPS_FREEF(vips__quantise_result_destroy, cgif->free_quantisation_result); VIPS_FREEF(vips__quantise_attr_destroy, cgif->attr); VIPS_UNREF(cgif->target); VIPS_FREE(cgif->index); VIPS_FREE(cgif->frame_bytes); VIPS_FREE(cgif->previous_frame); G_OBJECT_CLASS(vips_foreign_save_cgif_parent_class)->dispose(gobject); } static int vips__cgif_write(void *client, const uint8_t *buffer, const size_t length) { VipsTarget *target = VIPS_TARGET(client); return vips_target_write(target, (const void *) buffer, (size_t) length); } #define TRANS_STATE_NONE 0 #define TRANS_STATE_SINGLE 1 #define TRANS_STATE_ROW 2 /* Set pixels in index transparent if they are equal RGB to the previous * frame. * * In combination with the GIF transparency optimization this leads to * less difference between frames and therefore improves the compression ratio. */ static void vips_foreign_save_cgif_set_transparent(VipsForeignSaveCgif *cgif, VipsPel *old, VipsPel *new, VipsPel *index, int n_pels, int width, int trans) { int sq_maxerror = cgif->interframe_maxerror * cgif->interframe_maxerror; int i; gboolean this_trans = FALSE; int trans_state = TRANS_STATE_NONE; int trans_count = 0; int same_count = 0; VipsPel *trans_start_index = index; VipsPel *trans_start_old = old; VipsPel *trans_start_new = new; for (i = 0; i < n_pels; i++) { /* Alpha must match */ if (old[3] == new[3]) { /* Both transparent ... no need to check RGB. */ if (!old[3] && !new[3]) { *index = trans; this_trans = TRUE; } else { /* Compare RGB. */ const int dR = old[0] - new[0]; const int dG = old[1] - new[1]; const int dB = old[2] - new[2]; this_trans = dR * dR + dG * dG + dB * dB <= sq_maxerror; } } if (i && index[-1] == *index) same_count++; else same_count = 1; if (!this_trans) { /* Found an opaque pixel. * If we found a single transparent pixel before, * we haven't been copying new to old since then. * Time to do it now */ if (trans_state == TRANS_STATE_SINGLE) memcpy(trans_start_old, trans_start_new, old - trans_start_old); /* And reset the transparent pixels state */ trans_state = TRANS_STATE_NONE; trans_count = 0; } else { int x = i % width; trans_count++; if (trans_state == TRANS_STATE_NONE) { /* Found the first pixel that should be * transparent */ if (x == 0) /* If we are at the start of the row, * start making pixels transparent * right away to help CGIF to trim the * frame */ trans_state = TRANS_STATE_ROW; else { /* Otherwise, just mark the * point where we found it and update * the transparent pixels state */ trans_start_index = index; trans_start_old = old; trans_start_new = new; trans_state = TRANS_STATE_SINGLE; } /* We don't want to break a row of identical * indexes with a transparent pixel because * this would be unoptimal for LZW. * The only exception is if we are at the end of the * row. In this case, transparent pixels will help CGIF * to trim the frame */ } else if (trans_state == TRANS_STATE_SINGLE && (trans_count * 2 >= same_count + 32 || x == width - 1 || *index != index[-1])) { /* We found a transparent pixel before * and the previous index doesn't match the * current index. Make all pixels from the * marked point to the current point * transparent and update the transparent * pixels state */ trans_state = TRANS_STATE_ROW; memset(trans_start_index, trans, index - trans_start_index); } } if (trans_state == TRANS_STATE_ROW) /* Since we have more than one transparent pixel in * a row, it's safe to make the current pixel * transparent */ *index = trans; else if (trans_state == TRANS_STATE_NONE) { /* We did not find a pixel that should be transparent * before. Just copy new to old */ old[0] = new[0]; old[1] = new[1]; old[2] = new[2]; old[3] = new[3]; } old += 4; new += 4; index += 1; this_trans = FALSE; } /* If we are still in the single transparent pixel state, make the rest * of pixels transparent */ if (trans_state == TRANS_STATE_SINGLE) memset(trans_start_index, trans, index - trans_start_index); } static double vips__cgif_compare_palettes(const VipsQuantisePalette *new, const VipsQuantisePalette *old) { int i, j; double best_dist, dist, rd, gd, bd; double total_dist; g_assert(new->count <= 256); g_assert(old->count <= 256); total_dist = 0; for (i = 0; i < new->count; i++) { best_dist = 255 * 255 * 3; for (j = 0; j < old->count; j++) { if (new->entries[i].a) { /* The new entry is solid. * If the old entry is transparent, ignore it. * Otherwise, compare RGB. */ if (!old->entries[j].a) continue; rd = new->entries[i].r - old->entries[j].r; gd = new->entries[i].g - old->entries[j].g; bd = new->entries[i].b - old->entries[j].b; dist = rd * rd + gd * gd + bd * bd; best_dist = VIPS_MIN(best_dist, dist); /* We found the closest entry */ if (best_dist == 0) break; } else { /* The new entry is transparent. * If the old entry is transparent too, it's * the closest color. Otherwise, ignore it. */ if (!old->entries[j].a) { best_dist = 0; break; } } } total_dist += best_dist; } return sqrt(total_dist / (3 * new->count)); } /* Extract the generated palette as RGB. */ static void vips_foreign_save_cgif_get_rgb_palette(VipsForeignSaveCgif *cgif, VipsQuantiseResult *quantisation_result, VipsPel *rgb) { const VipsQuantisePalette *lp = vips__quantise_get_palette(quantisation_result); int i; g_assert(lp->count <= 256); for (i = 0; i < lp->count; i++) { rgb[0] = lp->entries[i].r; rgb[1] = lp->entries[i].g; rgb[2] = lp->entries[i].b; rgb += 3; } } int vips_foreign_save_cgif_pick_quantiser(VipsForeignSaveCgif *cgif, VipsQuantiseImage *image, VipsQuantiseResult **result, gboolean *use_local) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(cgif); VipsQuantiseResult *this_result; if (vips__quantise_image_quantize_fixed(image, cgif->attr, &this_result)) { vips_error(class->nickname, "%s", _("quantisation failed")); return -1; } /* No global quantiser set up yet? Use this result. */ if (!cgif->quantisation_result) { #ifdef DEBUG_VERBOSE printf("vips_foreign_save_cgif_pick_quantiser: " "global palette from first frame\n"); #endif /*DEBUG_VERBOSE*/ cgif->quantisation_result = this_result; cgif->n_palettes_generated += 1; *result = this_result; *use_local = FALSE; } else { /* Compare the palette we just made to the palette * for the previous frame, and to the global palette. */ const VipsQuantisePalette *global = vips__quantise_get_palette( cgif->quantisation_result); const VipsQuantisePalette *this = vips__quantise_get_palette( this_result); const VipsQuantisePalette *prev = vips__quantise_get_palette( cgif->previous_quantisation_result); double global_diff = vips__cgif_compare_palettes(this, global); double prev_diff = prev == global ? global_diff : vips__cgif_compare_palettes(this, prev); #ifdef DEBUG_VERBOSE printf("vips_foreign_save_cgif_write_frame: " "this -> global distance = %g\n", global_diff); printf("vips_foreign_save_cgif_write_frame: " "this -> prev distance = %g\n", prev_diff); printf("vips_foreign_save_cgif_write_frame: " "threshold = %g\n", cgif->interpalette_maxerror); #endif /*DEBUG_VERBOSE*/ if (global_diff <= prev_diff && global_diff < cgif->interpalette_maxerror) { /* Global is good enough, use that. */ #ifdef DEBUG_VERBOSE printf("vips_foreign_save_cgif_write_frame: " "using global palette\n"); #endif /*DEBUG_VERBOSE*/ VIPS_FREEF(vips__quantise_result_destroy, this_result); VIPS_FREEF(vips__quantise_result_destroy, cgif->free_quantisation_result); *result = cgif->quantisation_result; *use_local = FALSE; } else if (prev_diff < cgif->interpalette_maxerror) { /* Previous is good enough, use that again. */ #ifdef DEBUG_VERBOSE printf("vips_foreign_save_cgif_write_frame: " "using previous palette\n"); #endif /*DEBUG_VERBOSE*/ VIPS_FREEF(vips__quantise_result_destroy, this_result); *result = cgif->previous_quantisation_result; *use_local = TRUE; } else { /* Nothing else works, we need a new local * palette. */ #ifdef DEBUG_VERBOSE printf("vips_foreign_save_cgif_write_frame: " "using new local palette\n"); #endif /*DEBUG_VERBOSE*/ VIPS_FREEF(vips__quantise_result_destroy, cgif->free_quantisation_result); cgif->free_quantisation_result = this_result; cgif->n_palettes_generated += 1; *result = this_result; *use_local = TRUE; } } cgif->previous_quantisation_result = *result; return 0; } /* We have a complete frame --- write! */ static int vips_foreign_save_cgif_write_frame(VipsForeignSaveCgif *cgif) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(cgif); int n_pels = cgif->frame_height * cgif->frame_width; gboolean has_transparency; gboolean has_alpha_constraint; VipsPel *restrict p; int i; VipsQuantiseImage *image; gboolean use_local; VipsQuantiseResult *quantisation_result; const VipsQuantisePalette *lp; CGIF_FrameConfig frame_config = { 0 }; int n_colours; VipsPel palette_rgb[256 * 3]; #ifdef DEBUG_VERBOSE printf("vips_foreign_save_cgif_write_frame: %d\n", cgif->page_number); #endif /*DEBUG_VERBOSE*/ /* Threshold the alpha channel. * * Also, check if the alpha channel of the current frame matches the * frame before. * * If the current frame has an alpha component which is not identical * to the previous frame we are forced to use the transparency index * for the alpha channel instead of for the transparency size * optimization (maxerror). */ p = cgif->frame_bytes; has_alpha_constraint = FALSE; for (i = 0; i < n_pels; i++) { if (p[3] >= 128) p[3] = 255; else { /* Helps the quantiser generate a better palette. */ p[0] = 0; p[1] = 0; p[2] = 0; p[3] = 0; if (cgif->page_number > 0 && cgif->previous_frame[i * 4 + 3]) has_alpha_constraint = TRUE; } p += 4; } /* Set up new frame for libimagequant. */ image = vips__quantise_image_create_rgba(cgif->attr, cgif->frame_bytes, cgif->frame_width, cgif->frame_height, 0); if (cgif->mode == VIPS_FOREIGN_SAVE_CGIF_MODE_LOCAL || !cgif->quantisation_result) { /* Reoptimising each frame, or no global palette set up yet. */ if (vips_foreign_save_cgif_pick_quantiser(cgif, image, &quantisation_result, &use_local)) return -1; } else { quantisation_result = cgif->quantisation_result; use_local = FALSE; } lp = vips__quantise_get_palette(quantisation_result); /* If there's a transparent pixel, it's always first. */ has_transparency = lp->entries[0].a == 0; n_colours = lp->count; vips_foreign_save_cgif_get_rgb_palette(cgif, quantisation_result, palette_rgb); /* Dither frame into @index. */ vips__quantise_set_dithering_level(quantisation_result, cgif->dither); if (vips__quantise_write_remapped_image(quantisation_result, image, cgif->index, n_pels)) { vips_error(class->nickname, "%s", _("dither failed")); VIPS_FREEF(vips__quantise_image_destroy, image); return -1; } VIPS_FREEF(vips__quantise_image_destroy, image); /* Set up cgif on first use. */ if (!cgif->cgif_context) { #ifdef HAVE_CGIF_ATTR_NO_LOOP cgif->cgif_config.attrFlags = CGIF_ATTR_IS_ANIMATED | (cgif->loop == 1 ? CGIF_ATTR_NO_LOOP : 0); cgif->cgif_config.numLoops = cgif->loop > 1 ? cgif->loop - 1 : cgif->loop; #else /*!HAVE_CGIF_ATTR_NO_LOOP*/ cgif->cgif_config.attrFlags = CGIF_ATTR_IS_ANIMATED; cgif->cgif_config.numLoops = cgif->loop; #endif /*HAVE_CGIF_ATTR_NO_LOOP*/ cgif->cgif_config.width = cgif->frame_width; cgif->cgif_config.height = cgif->frame_height; cgif->cgif_config.pGlobalPalette = palette_rgb; cgif->cgif_config.numGlobalPaletteEntries = n_colours; cgif->cgif_config.pWriteFn = vips__cgif_write; cgif->cgif_config.pContext = (void *) cgif->target; cgif->cgif_context = cgif_newgif(&cgif->cgif_config); } /* Allow cgif to optimise by adding transparency. These optimisations * will be automatically disabled if they are not possible. */ frame_config.genFlags = CGIF_FRAME_GEN_USE_TRANSPARENCY | CGIF_FRAME_GEN_USE_DIFF_WINDOW; frame_config.attrFlags = 0; /* Switch per-frame alpha channel on. Index 0 is used for pixels * with alpha channel. */ if (has_transparency) { frame_config.attrFlags |= CGIF_FRAME_ATTR_HAS_ALPHA; frame_config.transIndex = 0; } /* Pixels which are equal to pixels in the previous frame can be made * transparent, provided no alpha channel constraint is present. */ if (cgif->page_number > 0 && !has_alpha_constraint) { int trans = has_transparency ? 0 : n_colours; vips_foreign_save_cgif_set_transparent(cgif, cgif->previous_frame, cgif->frame_bytes, cgif->index, n_pels, cgif->frame_width, trans); if (has_transparency) frame_config.attrFlags &= ~CGIF_FRAME_ATTR_HAS_ALPHA; frame_config.attrFlags |= CGIF_FRAME_ATTR_HAS_SET_TRANS; frame_config.transIndex = trans; } else { /* Take a copy of the RGBA frame. */ memcpy(cgif->previous_frame, cgif->frame_bytes, 4 * n_pels); } if (cgif->delay && cgif->page_number < cgif->delay_length) frame_config.delay = VIPS_RINT(cgif->delay[cgif->page_number] / 10.0); /* Attach a local palette, if we need one. */ if (use_local) { frame_config.attrFlags |= CGIF_FRAME_ATTR_USE_LOCAL_TABLE; frame_config.pLocalPalette = palette_rgb; frame_config.numLocalPaletteEntries = n_colours; } /* Write an interlaced GIF, if requested. */ if (cgif->interlace) { #ifdef HAVE_CGIF_FRAME_ATTR_INTERLACED frame_config.attrFlags |= CGIF_FRAME_ATTR_INTERLACED; #else /*!HAVE_CGIF_FRAME_ATTR_INTERLACED*/ g_warning("%s: cgif >= v0.3.0 required for interlaced GIF write", class->nickname); #endif /*HAVE_CGIF_FRAME_ATTR_INTERLACED*/ } /* Write frame to cgif. */ frame_config.pImageData = cgif->index; cgif_addframe(cgif->cgif_context, &frame_config); return 0; } /* Another chunk of pixels have arrived from the pipeline. Add to frame, and * if the frame completes, compress and write to the target. */ static int vips_foreign_save_cgif_sink_disc(VipsRegion *region, VipsRect *area, void *a) { VipsForeignSaveCgif *cgif = (VipsForeignSaveCgif *) a; int line_size = cgif->frame_width * 4; int y; #ifdef DEBUG_VERBOSE printf("vips_foreign_save_cgif_sink_disc: strip at %d, height %d\n", area->top, area->height); #endif /*DEBUG_VERBOSE*/ for (y = 0; y < area->height; y++) { memcpy(cgif->frame_bytes + cgif->write_y * line_size, VIPS_REGION_ADDR(region, 0, area->top + y), line_size); cgif->write_y += 1; if (cgif->write_y >= cgif->frame_height) { if (vips_foreign_save_cgif_write_frame(cgif)) return -1; cgif->write_y = 0; cgif->page_number += 1; } } return 0; } static int vips_foreign_save_cgif_build(VipsObject *object) { VipsForeignSave *save = (VipsForeignSave *) object; VipsForeignSaveCgif *cgif = (VipsForeignSaveCgif *) object; VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(cgif); VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(cgif), 2); if (VIPS_OBJECT_CLASS(vips_foreign_save_cgif_parent_class)->build(object)) return -1; cgif->in = save->ready; /* libimagequant only works with RGBA images. */ if (!vips_image_hasalpha(cgif->in)) { if (vips_addalpha(cgif->in, &t[1], NULL)) return -1; cgif->in = t[1]; } /* Animation properties. */ if (vips_image_get_typeof(cgif->in, "delay")) vips_image_get_array_int(cgif->in, "delay", &cgif->delay, &cgif->delay_length); if (vips_image_get_typeof(cgif->in, "loop")) vips_image_get_int(cgif->in, "loop", &cgif->loop); cgif->frame_height = vips_image_get_page_height(cgif->in); cgif->frame_width = cgif->in->Xsize; /* Reject images that exceed the pixel limit of libimagequant, * or that exceed the GIF limit of 64k per axis. * * Frame width * height will fit in an int, though frame size will * need at least a uint. */ if ((guint64) cgif->frame_width * cgif->frame_height > INT_MAX / 4 || cgif->frame_width > 65535 || cgif->frame_height > 65535) { vips_error(class->nickname, "%s", _("frame too large")); return -1; } /* This RGBA frame as a contiguous buffer. */ cgif->frame_bytes = g_malloc0((size_t) 4 * cgif->frame_width * cgif->frame_height); /* The previous RGBA frame (for spotting pixels which haven't changed). */ cgif->previous_frame = g_malloc0((size_t) 4 * cgif->frame_width * cgif->frame_height); /* The frame index buffer. */ cgif->index = g_malloc0((size_t) cgif->frame_width * cgif->frame_height); /* Set up libimagequant. */ cgif->attr = vips__quantise_attr_create(); /* Limit the number of colours to 255 so there is always one index * free for transparency optimization. */ vips__quantise_set_max_colors(cgif->attr, VIPS_MIN(255, 1 << cgif->bitdepth)); vips__quantise_set_quality(cgif->attr, 0, 100); vips__quantise_set_speed(cgif->attr, 11 - cgif->effort); /* Read the palette on the input if we've not been asked to * reoptimise. */ if (cgif->reuse && vips_image_get_typeof(cgif->in, "gif-palette")) { if (vips_image_get_array_int(cgif->in, "gif-palette", &cgif->palette, &cgif->n_colours)) return -1; if (cgif->n_colours > 256) { vips_error(class->nickname, "%s", _("gif-palette too large")); return -1; } } if (cgif->palette) { /* Make a fake image from the input palette, and quantise that. * Add a zero pixel (transparent) in case the input image has * transparency. * * We know palette fits in 256 entries. */ guint32 fake_image[257]; VipsQuantiseImage *image; memcpy(fake_image, cgif->palette, cgif->n_colours * sizeof(int)); fake_image[cgif->n_colours] = 0; image = vips__quantise_image_create_rgba(cgif->attr, fake_image, cgif->n_colours + 1, 1, 0); if (vips__quantise_image_quantize_fixed(image, cgif->attr, &cgif->quantisation_result)) { vips_error(class->nickname, "%s", _("quantisation failed")); return -1; } VIPS_FREEF(vips__quantise_image_destroy, image); } /* Global mode if there's an input palette, or palette maxerror is * huge. */ if (cgif->palette || cgif->interpalette_maxerror > 255) cgif->mode = VIPS_FOREIGN_SAVE_CGIF_MODE_GLOBAL; else cgif->mode = VIPS_FOREIGN_SAVE_CGIF_MODE_LOCAL; if (vips_sink_disc(cgif->in, vips_foreign_save_cgif_sink_disc, cgif)) return -1; VIPS_FREEF(cgif_close, cgif->cgif_context); if (vips_target_end(cgif->target)) return -1; return 0; } static const char *vips__save_cgif_suffs[] = { ".gif", NULL }; #define UC VIPS_FORMAT_UCHAR /* Type promotion for save ... just always go to uchar. */ static VipsBandFormat bandfmt_gif[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, UC, UC, UC, UC, UC, UC, UC, UC, UC }; static void vips_foreign_save_cgif_class_init(VipsForeignSaveCgifClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class; gobject_class->dispose = vips_foreign_save_cgif_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "gifsave_base"; object_class->description = _("save as gif"); object_class->build = vips_foreign_save_cgif_build; foreign_class->suffs = vips__save_cgif_suffs; save_class->saveable = VIPS_SAVEABLE_RGBA_ONLY; save_class->format_table = bandfmt_gif; VIPS_ARG_DOUBLE(class, "dither", 10, _("Dithering"), _("Amount of dithering"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveCgif, dither), 0.0, 1.0, 1.0); VIPS_ARG_INT(class, "effort", 11, _("Effort"), _("Quantisation effort"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveCgif, effort), 1, 10, 7); VIPS_ARG_INT(class, "bitdepth", 12, _("Bit depth"), _("Number of bits per pixel"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveCgif, bitdepth), 1, 8, 8); VIPS_ARG_DOUBLE(class, "interframe_maxerror", 13, _("Maximum inter-frame error"), _("Maximum inter-frame error for transparency"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveCgif, interframe_maxerror), 0, 32, 0.0); VIPS_ARG_BOOL(class, "reuse", 14, _("Reuse palette"), _("Reuse palette from input"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveCgif, reuse), FALSE); VIPS_ARG_DOUBLE(class, "interpalette_maxerror", 15, _("Maximum inter-palette error"), _("Maximum inter-palette error for palette reusage"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveCgif, interpalette_maxerror), 0, 256, 3.0); VIPS_ARG_BOOL(class, "interlace", 16, _("Interlaced"), _("Generate an interlaced (progressive) GIF"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveCgif, interlace), FALSE); /* Not a good thing to have enabled by default since it can cause very * mysterious behaviour that varies with the input image. */ VIPS_ARG_BOOL(class, "reoptimise", 17, _("Reoptimise palettes"), _("Reoptimise colour palettes"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsForeignSaveCgif, reoptimise), FALSE); } static void vips_foreign_save_cgif_init(VipsForeignSaveCgif *gif) { gif->dither = 1.0; gif->effort = 7; gif->bitdepth = 8; gif->interframe_maxerror = 0.0; gif->reuse = FALSE; gif->interlace = FALSE; gif->interpalette_maxerror = 3.0; gif->mode = VIPS_FOREIGN_SAVE_CGIF_MODE_GLOBAL; } typedef struct _VipsForeignSaveCgifTarget { VipsForeignSaveCgif parent_object; VipsTarget *target; } VipsForeignSaveCgifTarget; typedef VipsForeignSaveCgifClass VipsForeignSaveCgifTargetClass; G_DEFINE_TYPE(VipsForeignSaveCgifTarget, vips_foreign_save_cgif_target, vips_foreign_save_cgif_get_type()); static int vips_foreign_save_cgif_target_build(VipsObject *object) { VipsForeignSaveCgif *gif = (VipsForeignSaveCgif *) object; VipsForeignSaveCgifTarget *target = (VipsForeignSaveCgifTarget *) object; gif->target = target->target; g_object_ref(gif->target); if (VIPS_OBJECT_CLASS(vips_foreign_save_cgif_target_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_save_cgif_target_class_init( VipsForeignSaveCgifTargetClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "gifsave_target"; object_class->build = vips_foreign_save_cgif_target_build; VIPS_ARG_OBJECT(class, "target", 1, _("Target"), _("Target to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveCgifTarget, target), VIPS_TYPE_TARGET); } static void vips_foreign_save_cgif_target_init(VipsForeignSaveCgifTarget *target) { } typedef struct _VipsForeignSaveCgifFile { VipsForeignSaveCgif parent_object; char *filename; } VipsForeignSaveCgifFile; typedef VipsForeignSaveCgifClass VipsForeignSaveCgifFileClass; G_DEFINE_TYPE(VipsForeignSaveCgifFile, vips_foreign_save_cgif_file, vips_foreign_save_cgif_get_type()); static int vips_foreign_save_cgif_file_build(VipsObject *object) { VipsForeignSaveCgif *gif = (VipsForeignSaveCgif *) object; VipsForeignSaveCgifFile *file = (VipsForeignSaveCgifFile *) object; if (!(gif->target = vips_target_new_to_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_save_cgif_file_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_save_cgif_file_class_init(VipsForeignSaveCgifFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "gifsave"; object_class->build = vips_foreign_save_cgif_file_build; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveCgifFile, filename), NULL); } static void vips_foreign_save_cgif_file_init(VipsForeignSaveCgifFile *file) { } typedef struct _VipsForeignSaveCgifBuffer { VipsForeignSaveCgif parent_object; VipsArea *buf; } VipsForeignSaveCgifBuffer; typedef VipsForeignSaveCgifClass VipsForeignSaveCgifBufferClass; G_DEFINE_TYPE(VipsForeignSaveCgifBuffer, vips_foreign_save_cgif_buffer, vips_foreign_save_cgif_get_type()); static int vips_foreign_save_cgif_buffer_build(VipsObject *object) { VipsForeignSaveCgif *gif = (VipsForeignSaveCgif *) object; VipsForeignSaveCgifBuffer *buffer = (VipsForeignSaveCgifBuffer *) object; VipsBlob *blob; if (!(gif->target = vips_target_new_to_memory())) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_save_cgif_buffer_parent_class) ->build(object)) return -1; g_object_get(gif->target, "blob", &blob, NULL); g_object_set(buffer, "buffer", blob, NULL); vips_area_unref(VIPS_AREA(blob)); return 0; } static void vips_foreign_save_cgif_buffer_class_init( VipsForeignSaveCgifBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "gifsave_buffer"; object_class->build = vips_foreign_save_cgif_buffer_build; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to save to"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsForeignSaveCgifBuffer, buf), VIPS_TYPE_BLOB); } static void vips_foreign_save_cgif_buffer_init(VipsForeignSaveCgifBuffer *buffer) { } #endif /*defined(HAVE_CGIF) && defined(HAVE_IMAGEQUANT)*/ /** * vips_gifsave: (method) * @in: image to save * @filename: file to write to * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @dither: %gdouble, quantisation dithering level * * @effort: %gint, quantisation CPU effort * * @bitdepth: %gint, number of bits per pixel * * @interframe_maxerror: %gdouble, maximum inter-frame error for transparency * * @reuse: %gboolean, reuse palette from input * * @interlace: %gboolean, write an interlaced (progressive) GIF * * @interpalette_maxerror: %gdouble, maximum inter-palette error for palette * reusage * * Write to a file in GIF format. * * Use @dither to set the degree of Floyd-Steinberg dithering * and @effort to control the CPU effort (1 is the fastest, * 10 is the slowest, 7 is the default). * * Use @bitdepth (from 1 to 8, default 8) to control the number * of colours in the palette. The first entry in the palette is * always reserved for transparency. For example, a bitdepth of * 4 will allow the output to contain up to 15 colours. * * Use @interframe_maxerror to set the threshold below which pixels are * considered equal. * Pixels which don't change from frame to frame can be made transparent, * improving the compression rate. Default 0. * * Use @interpalette_maxerror to set the threshold below which the * previously generated palette will be reused. * * If @reuse is TRUE, the GIF will be saved with a single global * palette taken from the metadata in @in, and no new palette optimisation * will be done. * * If @interlace is TRUE, the GIF file will be interlaced (progressive GIF). * These files may be better for display over a slow network * connection, but need more memory to encode. * * See also: vips_image_new_from_file(). * * Returns: 0 on success, -1 on error. */ int vips_gifsave(VipsImage *in, const char *filename, ...) { va_list ap; int result; va_start(ap, filename); result = vips_call_split("gifsave", ap, in, filename); va_end(ap); return result; } /** * vips_gifsave_buffer: (method) * @in: image to save * @buf: (array length=len) (element-type guint8): return output buffer here * @len: (type gsize): return output length here * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @dither: %gdouble, quantisation dithering level * * @effort: %gint, quantisation CPU effort * * @bitdepth: %gint, number of bits per pixel * * @interframe_maxerror: %gdouble, maximum inter-frame error for transparency * * @reuse: %gboolean, reuse palette from input * * @interlace: %gboolean, write an interlaced (progressive) GIF * * @interpalette_maxerror: %gdouble, maximum inter-palette error for palette * reusage * * As vips_gifsave(), but save to a memory buffer. * * The address of the buffer is returned in @buf, the length of the buffer in * @len. You are responsible for freeing the buffer with g_free() when you * are done with it. * * See also: vips_gifsave(), vips_image_write_to_file(). * * Returns: 0 on success, -1 on error. */ int vips_gifsave_buffer(VipsImage *in, void **buf, size_t *len, ...) { va_list ap; VipsArea *area; int result; area = NULL; va_start(ap, len); result = vips_call_split("gifsave_buffer", ap, in, &area); va_end(ap); if (!result && area) { if (buf) { *buf = area->data; area->free_fn = NULL; } if (len) *len = area->length; vips_area_unref(area); } return result; } /** * vips_gifsave_target: (method) * @in: image to save * @target: save image to this target * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @dither: %gdouble, quantisation dithering level * * @effort: %gint, quantisation CPU effort * * @bitdepth: %gint, number of bits per pixel * * @interframe_maxerror: %gdouble, maximum inter-frame error for transparency * * @reuse: %gboolean, reuse palette from input * * @interlace: %gboolean, write an interlaced (progressive) GIF * * @interpalette_maxerror: %gdouble, maximum inter-palette error for palette * reusage * * As vips_gifsave(), but save to a target. * * See also: vips_gifsave(), vips_image_write_to_target(). * * Returns: 0 on success, -1 on error. */ int vips_gifsave_target(VipsImage *in, VipsTarget *target, ...) { va_list ap; int result; va_start(ap, target); result = vips_call_split("gifsave_target", ap, in, target); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/csvload.c000066400000000000000000000427231454007373500201760ustar00rootroot00000000000000/* load csv from a file * * 5/12/11 * - from csvload.c * 21/2/20 * - rewrite for new source API */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "pforeign.h" /* The largest item we can read. It only needs to be big enough for a double. */ #define MAX_ITEM_SIZE (256) typedef struct _VipsForeignLoadCsv { VipsForeignLoad parent_object; /* Set by subclasses. */ VipsSource *source; /* Buffered source. */ VipsSbuf *sbuf; /* Load options. */ int skip; int lines; const char *whitespace; const char *separator; /* Current position in file for error messages. */ int lineno; int colno; /* Our whitespace and separator strings turned into LUTs. */ char whitemap[256]; char sepmap[256]; /* Fetch items into this buffer. It just needs to be large enough for * a double. */ char item[MAX_ITEM_SIZE]; /* A line of pixels. */ double *linebuf; } VipsForeignLoadCsv; typedef VipsForeignLoadClass VipsForeignLoadCsvClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignLoadCsv, vips_foreign_load_csv, VIPS_TYPE_FOREIGN_LOAD); static void vips_foreign_load_csv_dispose(GObject *gobject) { VipsForeignLoadCsv *csv = (VipsForeignLoadCsv *) gobject; VIPS_UNREF(csv->source); VIPS_UNREF(csv->sbuf); VIPS_FREE(csv->linebuf); G_OBJECT_CLASS(vips_foreign_load_csv_parent_class)->dispose(gobject); } static int vips_foreign_load_csv_build(VipsObject *object) { VipsForeignLoadCsv *csv = (VipsForeignLoadCsv *) object; int i; const char *p; if (!(csv->sbuf = vips_sbuf_new_from_source(csv->source))) return -1; /* Make our char maps. */ for (i = 0; i < 256; i++) { csv->whitemap[i] = 0; csv->sepmap[i] = 0; } for (p = csv->whitespace; *p; p++) csv->whitemap[(int) *p] = 1; for (p = csv->separator; *p; p++) csv->sepmap[(int) *p] = 1; /* \n must not be in the maps or we'll get very confused. */ csv->sepmap[(int) '\n'] = 0; csv->whitemap[(int) '\n'] = 0; if (VIPS_OBJECT_CLASS(vips_foreign_load_csv_parent_class)->build(object)) return -1; return 0; } static VipsForeignFlags vips_foreign_load_csv_get_flags(VipsForeignLoad *load) { return 0; } /* Skip to the start of the next block of non-whitespace. * * Result: !white, \n, EOF */ static int vips_foreign_load_csv_skip_white(VipsForeignLoadCsv *csv) { int ch; do { ch = VIPS_SBUF_GETC(csv->sbuf); } while (ch != EOF && ch != '\n' && csv->whitemap[ch]); VIPS_SBUF_UNGETC(csv->sbuf); return ch; } /* We have just seen " (open quotes). Skip to just after the matching close * quotes. * * If there is no matching close quotes before the end of the line, don't * skip to the next line. * * Result: ", \n, EOF */ static int vips_foreign_load_csv_skip_quoted(VipsForeignLoadCsv *csv) { int ch; do { ch = VIPS_SBUF_GETC(csv->sbuf); /* Ignore \" (actually \anything) in strings. */ if (ch == '\\') ch = VIPS_SBUF_GETC(csv->sbuf); else if (ch == '"') break; } while (ch != EOF && ch != '\n'); if (ch == '\n') VIPS_SBUF_UNGETC(csv->sbuf); return ch; } /* Fetch the next item (not whitespace, separator or \n), as a string. The * returned string is valid until the next call to fetch item. NULL for EOF. */ static const char * vips_foreign_load_csv_fetch_item(VipsForeignLoadCsv *csv) { int write_point; int space_remaining; int ch; /* -1 so there's space for the \0 terminator. */ space_remaining = MAX_ITEM_SIZE - 1; write_point = 0; while ((ch = VIPS_SBUF_GETC(csv->sbuf)) != -1 && ch != '\n' && !csv->whitemap[ch] && !csv->sepmap[ch] && space_remaining > 0) { csv->item[write_point] = ch; write_point += 1; space_remaining -= 1; } csv->item[write_point] = '\0'; /* If we hit EOF immediately, return EOF. */ if (ch == -1 && write_point == 0) return NULL; /* If we filled the item buffer without seeing the end of the item, * read up to the item end. */ while (ch != -1 && ch != '\n' && !csv->whitemap[ch] && !csv->sepmap[ch]) ch = VIPS_SBUF_GETC(csv->sbuf); /* We've (probably) read the end of item character. Push it back. */ if (ch == '\n' || csv->whitemap[ch] || csv->sepmap[ch]) VIPS_SBUF_UNGETC(csv->sbuf); return csv->item; } /* Read a single item. The syntax is: * * element : * whitespace* item whitespace* [EOF|EOL|separator] * * item : * double | * "anything" | * empty * * the anything in quotes can contain " escaped with \, and can contain * separator and whitespace characters. * * Result: sep, \n, EOF */ static int vips_foreign_load_csv_read_double(VipsForeignLoadCsv *csv, double *out) { int ch; /* The strtod() may change this ... but all other cases need a zero. */ *out = 0; ch = vips_foreign_load_csv_skip_white(csv); if (ch == EOF || ch == '\n') return ch; if (ch == '"') { (void) VIPS_SBUF_GETC(csv->sbuf); ch = vips_foreign_load_csv_skip_quoted(csv); } else if (!csv->sepmap[ch]) { const char *item; item = vips_foreign_load_csv_fetch_item(csv); if (!item) return EOF; if (vips_strtod(item, out)) /* Only a warning, since (for example) exported * spreadsheets will often have text or date fields. */ g_warning(_("bad number, line %d, column %d"), csv->lineno, csv->colno); } ch = vips_foreign_load_csv_skip_white(csv); if (ch == EOF || ch == '\n') return ch; /* If it's a separator, we have to step over it. */ if (csv->sepmap[ch]) (void) VIPS_SBUF_GETC(csv->sbuf); return ch; } static int vips_foreign_load_csv_header(VipsForeignLoad *load) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load); VipsForeignLoadCsv *csv = (VipsForeignLoadCsv *) load; int i; double value; int ch; int width; int height; /* Rewind. */ vips_sbuf_unbuffer(csv->sbuf); if (vips_source_rewind(csv->source)) return -1; /* Skip the first few lines. */ for (i = 0; i < csv->skip; i++) if (!vips_sbuf_get_line(csv->sbuf)) { vips_error(class->nickname, "%s", _("unexpected end of file")); return -1; } /* Parse the first line to get the number of columns. */ csv->lineno = csv->skip + 1; csv->colno = 0; do { csv->colno += 1; ch = vips_foreign_load_csv_read_double(csv, &value); } while (ch != '\n' && ch != EOF); width = csv->colno; if (!(csv->linebuf = VIPS_ARRAY(NULL, width, double))) return -1; /* If @lines is -1, we must scan the whole file to get the height. */ if (csv->lines == -1) for (height = 0; vips_sbuf_get_line(csv->sbuf); height++) ; else height = csv->lines; vips_image_init_fields(load->out, width, height, 1, VIPS_FORMAT_DOUBLE, VIPS_CODING_NONE, VIPS_INTERPRETATION_B_W, 1.0, 1.0); if (vips_image_pipelinev(load->out, VIPS_DEMAND_STYLE_THINSTRIP, NULL)) return -1; VIPS_SETSTR(load->out->filename, vips_connection_filename(VIPS_CONNECTION(csv->source))); return 0; } static int vips_foreign_load_csv_load(VipsForeignLoad *load) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load); VipsForeignLoadCsv *csv = (VipsForeignLoadCsv *) load; int i; int x, y; int ch; /* Rewind. */ vips_sbuf_unbuffer(csv->sbuf); if (vips_source_rewind(csv->source)) return -1; /* Skip the first few lines. */ for (i = 0; i < csv->skip; i++) if (!vips_sbuf_get_line(csv->sbuf)) { vips_error(class->nickname, "%s", _("unexpected end of file")); return -1; } vips_image_init_fields(load->real, load->out->Xsize, load->out->Ysize, 1, VIPS_FORMAT_DOUBLE, VIPS_CODING_NONE, VIPS_INTERPRETATION_B_W, 1.0, 1.0); if (vips_image_pipelinev(load->real, VIPS_DEMAND_STYLE_THINSTRIP, NULL)) return -1; csv->lineno = csv->skip + 1; for (y = 0; y < load->real->Ysize; y++) { csv->colno = 0; /* Not needed, but stops a used-before-set compiler warning. */ ch = EOF; /* Some lines may be shorter. */ memset(csv->linebuf, 0, load->real->Xsize * sizeof(double)); for (x = 0; x < load->real->Xsize; x++) { double value; csv->colno += 1; ch = vips_foreign_load_csv_read_double(csv, &value); if (ch == EOF && load->fail_on >= VIPS_FAIL_ON_TRUNCATED) { vips_error(class->nickname, "%s", _("unexpected end of file")); return -1; } if (ch == '\n' && x != load->real->Xsize - 1) { vips_error(class->nickname, _("line %d has only %d columns"), csv->lineno, csv->colno); /* Unequal length lines, but no EOF. */ if (load->fail_on >= VIPS_FAIL_ON_ERROR) return -1; } csv->linebuf[x] = value; } /* Step over the line separator. */ if (ch == '\n') { (void) VIPS_SBUF_GETC(csv->sbuf); csv->lineno += 1; } if (vips_image_write_line(load->real, y, (VipsPel *) csv->linebuf)) return -1; } return 0; } static void vips_foreign_load_csv_class_init(VipsForeignLoadCsvClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->dispose = vips_foreign_load_csv_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "csvload_base"; object_class->description = _("load csv"); object_class->build = vips_foreign_load_csv_build; /* This is fuzzed, but you're unlikely to want to use it on * untrusted files. */ operation_class->flags |= VIPS_OPERATION_UNTRUSTED; load_class->get_flags = vips_foreign_load_csv_get_flags; load_class->header = vips_foreign_load_csv_header; load_class->load = vips_foreign_load_csv_load; VIPS_ARG_INT(class, "skip", 20, _("Skip"), _("Skip this many lines at the start of the file"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadCsv, skip), 0, 10000000, 0); VIPS_ARG_INT(class, "lines", 21, _("Lines"), _("Read this many lines from the file"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadCsv, lines), -1, 10000000, 0); VIPS_ARG_STRING(class, "whitespace", 22, _("Whitespace"), _("Set of whitespace characters"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadCsv, whitespace), " "); VIPS_ARG_STRING(class, "separator", 23, _("Separator"), _("Set of separator characters"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadCsv, separator), ";,\t"); } static void vips_foreign_load_csv_init(VipsForeignLoadCsv *csv) { csv->lines = -1; csv->whitespace = g_strdup(" "); csv->separator = g_strdup(";,\t"); } typedef struct _VipsForeignLoadCsvFile { VipsForeignLoadCsv parent_object; /* Filename for load. */ char *filename; } VipsForeignLoadCsvFile; typedef VipsForeignLoadCsvClass VipsForeignLoadCsvFileClass; G_DEFINE_TYPE(VipsForeignLoadCsvFile, vips_foreign_load_csv_file, vips_foreign_load_csv_get_type()); static VipsForeignFlags vips_foreign_load_csv_file_get_flags_filename(const char *filename) { return 0; } static int vips_foreign_load_csv_file_build(VipsObject *object) { VipsForeignLoadCsv *csv = (VipsForeignLoadCsv *) object; VipsForeignLoadCsvFile *file = (VipsForeignLoadCsvFile *) object; if (file->filename) if (!(csv->source = vips_source_new_from_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_csv_file_parent_class)->build(object)) return -1; return 0; } static const char *vips_foreign_load_csv_suffs[] = { ".csv", NULL }; static void vips_foreign_load_csv_file_class_init(VipsForeignLoadCsvFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "csvload"; object_class->build = vips_foreign_load_csv_file_build; foreign_class->suffs = vips_foreign_load_csv_suffs; load_class->get_flags_filename = vips_foreign_load_csv_file_get_flags_filename; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadCsvFile, filename), NULL); } static void vips_foreign_load_csv_file_init(VipsForeignLoadCsvFile *file) { } typedef struct _VipsForeignLoadCsvSource { VipsForeignLoadCsv parent_object; VipsSource *source; } VipsForeignLoadCsvSource; typedef VipsForeignLoadCsvClass VipsForeignLoadCsvSourceClass; G_DEFINE_TYPE(VipsForeignLoadCsvSource, vips_foreign_load_csv_source, vips_foreign_load_csv_get_type()); static int vips_foreign_load_csv_source_build(VipsObject *object) { VipsForeignLoadCsv *csv = (VipsForeignLoadCsv *) object; VipsForeignLoadCsvSource *source = (VipsForeignLoadCsvSource *) object; if (source->source) { csv->source = source->source; g_object_ref(csv->source); } if (VIPS_OBJECT_CLASS(vips_foreign_load_csv_source_parent_class) ->build(object)) return -1; return 0; } static gboolean vips_foreign_load_csv_source_is_a_source(VipsSource *source) { /* Detecting CSV files automatically is tricky. Define this method to * prevent a warning, but users will need to run the csv loader * explicitly. */ return FALSE; } static void vips_foreign_load_csv_source_class_init(VipsForeignLoadCsvFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "csvload_source"; object_class->build = vips_foreign_load_csv_source_build; operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_csv_source_is_a_source; VIPS_ARG_OBJECT(class, "source", 1, _("Source"), _("Source to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadCsvSource, source), VIPS_TYPE_SOURCE); } static void vips_foreign_load_csv_source_init(VipsForeignLoadCsvSource *source) { } /** * vips_csvload: * @filename: file to load * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @skip: skip this many lines at start of file * * @lines: read this many lines from file * * @whitespace: set of whitespace characters * * @separator: set of separator characters * * @fail_on: #VipsFailOn, types of read error to fail on * * Load a CSV (comma-separated values) file. The output image is always 1 * band (monochrome), #VIPS_FORMAT_DOUBLE. Use vips_bandfold() to turn * RGBRGBRGB mono images into colour images. * * Items in lines can be either floating point numbers in the C locale, or * strings enclosed in double-quotes ("), or empty. * You can use a backslash (\) within the quotes to escape special characters, * such as quote marks. * * @skip sets the number of lines to skip at the start of the file. * Default zero. * * @lines sets the number of lines to read from the file. Default -1, * meaning read all lines to end of file. * * @whitespace sets the skippable whitespace characters. * Default space. * Whitespace characters are always run together. * * @separator sets the characters that separate fields. * Default ;,tab. Separators are never run together. * * Use @fail_on to set the type of error that will cause load to fail. By * default, loaders are permissive, that is, #VIPS_FAIL_ON_NONE. * * See also: vips_image_new_from_file(), vips_bandfold(). * * Returns: 0 on success, -1 on error. */ int vips_csvload(const char *filename, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("csvload", ap, filename, out); va_end(ap); return result; } /** * vips_csvload_source: * @source: source to load * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @skip: skip this many lines at start of file * * @lines: read this many lines from file * * @whitespace: set of whitespace characters * * @separator: set of separator characters * * @fail_on: #VipsFailOn, types of read error to fail on * * Exactly as vips_csvload(), but read from a source. * * See also: vips_csvload(). * * Returns: 0 on success, -1 on error. */ int vips_csvload_source(VipsSource *source, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("csvload_source", ap, source, out); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/csvsave.c000066400000000000000000000227271454007373500202170ustar00rootroot00000000000000/* save to csv * * 2/12/11 * - wrap a class around the csv writer * 21/2/20 * - rewrite for the VipsTarget API */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pforeign.h" typedef struct _VipsForeignSaveCsv { VipsForeignSave parent_object; VipsTarget *target; const char *separator; } VipsForeignSaveCsv; typedef VipsForeignSaveClass VipsForeignSaveCsvClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignSaveCsv, vips_foreign_save_csv, VIPS_TYPE_FOREIGN_SAVE); static void vips_foreign_save_csv_dispose(GObject *gobject) { VipsForeignSaveCsv *csv = (VipsForeignSaveCsv *) gobject; VIPS_UNREF(csv->target); G_OBJECT_CLASS(vips_foreign_save_csv_parent_class)->dispose(gobject); } #define PRINT_INT(TYPE) \ { \ TYPE *pt = (TYPE *) p; \ \ for (x = 0; x < image->Xsize; x++) { \ if (x > 0) \ vips_target_writes(csv->target, csv->separator); \ vips_target_writef(csv->target, "%d", pt[x]); \ } \ } #define PRINT_FLOAT(TYPE) \ { \ TYPE *pt = (TYPE *) p; \ char buf[G_ASCII_DTOSTR_BUF_SIZE]; \ \ for (x = 0; x < image->Xsize; x++) { \ if (x > 0) \ vips_target_writes(csv->target, csv->separator); \ g_ascii_dtostr(buf, G_ASCII_DTOSTR_BUF_SIZE, pt[x]); \ vips_target_writes(csv->target, buf); \ } \ } #define PRINT_COMPLEX(TYPE) \ { \ TYPE *pt = (TYPE *) p; \ char buf[G_ASCII_DTOSTR_BUF_SIZE]; \ \ for (x = 0; x < image->Xsize; x++) { \ if (x > 0) \ vips_target_writes(csv->target, csv->separator); \ VIPS_TARGET_PUTC(csv->target, '('); \ g_ascii_dtostr(buf, G_ASCII_DTOSTR_BUF_SIZE, pt[0]); \ vips_target_writes(csv->target, buf); \ VIPS_TARGET_PUTC(csv->target, ','); \ g_ascii_dtostr(buf, G_ASCII_DTOSTR_BUF_SIZE, pt[1]); \ vips_target_writes(csv->target, buf); \ VIPS_TARGET_PUTC(csv->target, ')'); \ pt += 2; \ } \ } static int vips_foreign_save_csv_block(VipsRegion *region, VipsRect *area, void *a) { VipsForeignSaveCsv *csv = (VipsForeignSaveCsv *) a; VipsImage *image = region->im; int x, y; for (y = 0; y < area->height; y++) { VipsPel *p = VIPS_REGION_ADDR(region, 0, area->top + y); switch (image->BandFmt) { case VIPS_FORMAT_UCHAR: PRINT_INT(unsigned char); break; case VIPS_FORMAT_CHAR: PRINT_INT(char); break; case VIPS_FORMAT_USHORT: PRINT_INT(unsigned short); break; case VIPS_FORMAT_SHORT: PRINT_INT(short); break; case VIPS_FORMAT_UINT: PRINT_INT(unsigned int); break; case VIPS_FORMAT_INT: PRINT_INT(int); break; case VIPS_FORMAT_FLOAT: PRINT_FLOAT(float); break; case VIPS_FORMAT_DOUBLE: PRINT_FLOAT(double); break; case VIPS_FORMAT_COMPLEX: PRINT_COMPLEX(float); break; case VIPS_FORMAT_DPCOMPLEX: PRINT_COMPLEX(double); break; default: g_assert_not_reached(); } if (vips_target_writes(csv->target, "\n")) return -1; } return 0; } static int vips_foreign_save_csv_build(VipsObject *object) { VipsForeignSave *save = (VipsForeignSave *) object; VipsForeignSaveCsv *csv = (VipsForeignSaveCsv *) object; VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); if (VIPS_OBJECT_CLASS(vips_foreign_save_csv_parent_class)->build(object)) return -1; if (vips_check_mono(class->nickname, save->ready) || vips_check_uncoded(class->nickname, save->ready)) return -1; if (vips_sink_disc(save->ready, vips_foreign_save_csv_block, csv)) return -1; if (vips_target_end(csv->target)) return -1; return 0; } static const char *vips_foreign_save_csv_suffs[] = { ".csv", NULL }; static void vips_foreign_save_csv_class_init(VipsForeignSaveCsvClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class; gobject_class->dispose = vips_foreign_save_csv_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "csvsave_base"; object_class->description = _("save image to csv"); object_class->build = vips_foreign_save_csv_build; foreign_class->suffs = vips_foreign_save_csv_suffs; save_class->saveable = VIPS_SAVEABLE_MONO; VIPS_ARG_STRING(class, "separator", 13, _("Separator"), _("Separator characters"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveCsv, separator), "\t"); } static void vips_foreign_save_csv_init(VipsForeignSaveCsv *csv) { csv->separator = g_strdup("\t"); } typedef struct _VipsForeignSaveCsvFile { VipsForeignSaveCsv parent_object; char *filename; } VipsForeignSaveCsvFile; typedef VipsForeignSaveCsvClass VipsForeignSaveCsvFileClass; G_DEFINE_TYPE(VipsForeignSaveCsvFile, vips_foreign_save_csv_file, vips_foreign_save_csv_get_type()); static int vips_foreign_save_csv_file_build(VipsObject *object) { VipsForeignSaveCsv *csv = (VipsForeignSaveCsv *) object; VipsForeignSaveCsvFile *file = (VipsForeignSaveCsvFile *) object; if (file->filename && !(csv->target = vips_target_new_to_file(file->filename))) return -1; return VIPS_OBJECT_CLASS(vips_foreign_save_csv_file_parent_class) ->build(object); } static void vips_foreign_save_csv_file_class_init(VipsForeignSaveCsvFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "csvsave"; object_class->build = vips_foreign_save_csv_file_build; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveCsvFile, filename), NULL); } static void vips_foreign_save_csv_file_init(VipsForeignSaveCsvFile *file) { } typedef struct _VipsForeignSaveCsvTarget { VipsForeignSaveCsv parent_object; VipsTarget *target; } VipsForeignSaveCsvTarget; typedef VipsForeignSaveCsvClass VipsForeignSaveCsvTargetClass; G_DEFINE_TYPE(VipsForeignSaveCsvTarget, vips_foreign_save_csv_target, vips_foreign_save_csv_get_type()); static int vips_foreign_save_csv_target_build(VipsObject *object) { VipsForeignSaveCsv *csv = (VipsForeignSaveCsv *) object; VipsForeignSaveCsvTarget *target = (VipsForeignSaveCsvTarget *) object; if (target->target) { csv->target = target->target; g_object_ref(csv->target); } return VIPS_OBJECT_CLASS(vips_foreign_save_csv_target_parent_class) ->build(object); } static void vips_foreign_save_csv_target_class_init(VipsForeignSaveCsvTargetClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "csvsave_target"; object_class->build = vips_foreign_save_csv_target_build; VIPS_ARG_OBJECT(class, "target", 1, _("Target"), _("Target to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveCsvTarget, target), VIPS_TYPE_TARGET); } static void vips_foreign_save_csv_target_init(VipsForeignSaveCsvTarget *target) { } /** * vips_csvsave: (method) * @in: image to save * @filename: file to write to * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @separator: separator string * * Writes the pixels in @in to the @filename as CSV (comma-separated values). * The image is written * one line of text per scanline. Complex numbers are written as * "(real,imaginary)" and will need extra parsing I guess. Only the first band * is written. * * @separator gives the string to use to separate numbers in the output. * The default is "\\t" (tab). * * See also: vips_image_write_to_file(). * * Returns: 0 on success, -1 on error. */ int vips_csvsave(VipsImage *in, const char *filename, ...) { va_list ap; int result; va_start(ap, filename); result = vips_call_split("csvsave", ap, in, filename); va_end(ap); return result; } /** * vips_csvsave_target: (method) * @in: image to save * @target: save image to this target * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @separator: separator string * * As vips_csvsave(), but save to a target. * * See also: vips_csvsave(). * * Returns: 0 on success, -1 on error. */ int vips_csvsave_target(VipsImage *in, VipsTarget *target, ...) { va_list ap; int result; va_start(ap, target); result = vips_call_split("csvsave_target", ap, in, target); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/dbh.h000066400000000000000000000056241454007373500173040ustar00rootroot00000000000000/* * * (c) Copyright, 1986-1991 * Biodynamics Research Unit * Mayo Foundation * * dbh.h * * * database sub-definitions */ /* * * The previous-generation header for Analyze images. Although (c) Mayo * Foundation, it has been in the public domain for many years. * * Analyze images have a 348 byte header stored in a file with a .hdr suffix, * and a corresponding .img file containing just the pixel data. * */ struct header_key /* header_key */ { /* off + size*/ int sizeof_hdr; /* 0 + 4 */ char data_type[10]; /* 4 + 10 */ char db_name[18]; /* 14 + 18 */ int extents; /* 32 + 4 */ short int session_error; /* 36 + 2 */ char regular; /* 38 + 1 */ char hkey_un0; /* 39 + 1 */ }; /* total=40 */ struct image_dimension /* image_dimension */ { /* off + size*/ short int dim[8]; /* 0 + 16 */ char vox_units[4]; /* 16 + 4 */ char cal_units[8]; /* 20 + 4 */ short int unused1; /* 24 + 2 */ short int datatype; /* 30 + 2 */ short int bitpix; /* 32 + 2 */ short int dim_un0; /* 34 + 2 */ float pixdim[8]; /* 36 + 32 */ /* pixdim[] specifies the voxel dimensions: pixdim[1] - voxel width pixdim[2] - voxel height pixdim[3] - interslice distance ..etc */ float vox_offset; /* 68 + 4 */ float funused1; /* 72 + 4 */ float funused2; /* 76 + 4 */ float funused3; /* 80 + 4 */ float cal_max; /* 84 + 4 */ float cal_min; /* 88 + 4 */ int compressed; /* 92 + 4 */ int verified; /* 96 + 4 */ int glmax, glmin; /* 100 + 8 */ }; struct data_history /* data_history */ { /* off + size*/ char descrip[80]; /* 0 + 80 */ char aux_file[24]; /* 80 + 24 */ char orient; /* 104 + 1 */ char originator[10]; /* 105 + 10 */ char generated[10]; /* 115 + 10 */ char scannum[10]; /* 125 + 10 */ char patient_id[10]; /* 135 + 10 */ char exp_date[10]; /* 145 + 10 */ char exp_time[10]; /* 155 + 10 */ char hist_un0[3]; /* 165 + 3 */ int views; /* 168 + 4 */ int vols_added; /* 172 + 4 */ int start_field; /* 176 + 4 */ int field_skip; /* 180 + 4 */ int omax, omin; /* 184 + 8 */ int smax, smin; /* 192 + 8 */ }; /* total=200 */ struct dsr /* dsr */ { /* off + size*/ struct header_key hk; /* 0 + 40 */ struct image_dimension dime; /* 40 + 108 */ struct data_history hist; /* 148 + 200 */ }; /* total=348 */ /* Acceptable values for hdr.dime.datatype */ /* * commented this one out: we don't use it, and dirent.h defines this on some * platforms. * #define DT_UNKNOWN 0 */ #define DT_BINARY 1 #define DT_UNSIGNED_CHAR 2 #define DT_SIGNED_SHORT 4 #define DT_SIGNED_INT 8 #define DT_FLOAT 16 #define DT_COMPLEX 32 #define DT_DOUBLE 64 #define DT_RGB 128 libvips-8.15.1/libvips/foreign/dzsave.c000066400000000000000000002151341454007373500200350ustar00rootroot00000000000000/* save to deep zoom format * * 21/3/12 * - from the tiff pyramid writer * 5/7/12 (thanks Alexander Koshman) * - make tiles down to 1x1 pixels * - oop make right-hand edge tiles * - improve overlap handling * 7/7/12 * - threaded write * 6/8/12 (thanks to Benjamin Gilbert for pointing out the errors) * - shrink down to a 1x1 pixel tile, even for very long and thin images * - round image size up on shrink * - write a .dzi file with the pyramid params * - default tile size and overlap now matches the openslide writer * 7/8/12 (thanks to Benjamin Gilbert again for more testing) * - reorganise the directory structure * - rename to basename and tile_size * - deprecate tile_width/_height and dirname * 1/10/12 * - did not write low pyramid levels for images with an odd number of * scan lines (thanks Martin) * 2/10/12 * - remove filename options from format string in .dzi (thanks Martin) * 3/10/12 * - add zoomify and google maps output * 10/10/12 * - add @background option * 1/11/12 * - add @depth option * 21/1/13 * - add @centre option * 26/2/13 * - fix another corner case, thanks Martin * 29/5/13 * - add --angle option * 19/6/13 * - faster --centre logic, thanks Kacey * 18/4/14 * - use libgsf for output so we can write to .zip etc. as well as the * filesystem * 8/5/14 * - set Type on strips so we can convert for save correctly, thanks * philipgiuliani * 25/6/14 * - stop on zip write >4gb, thanks bgilbert * - save metadata, see https://github.com/libvips/libvips/issues/137 * 18/8/14 * - use g_ date funcs, helps Windows * 14/2/15 * - use vips_region_shrink() * 22/2/15 * - use a better temp dir name for fs dz output * 8/8/15 * - allow zip > 4gb if we have a recent libgsf * 9/9/15 * - better overlap handling, thanks robclouth * 24/11/15 * - don't write almost blank tiles in google mode * 25/11/15 * - always strip tile metadata * 16/12/15 * - fix overlap handling again, thanks erdmann * 8/6/16 Felix Bünemann * - add @compression option * 5/9/16 * - more overlap changes to help gmaps mode * 8/9/16 Felix Bünemann * - move vips-properties out of subdir for gm and zoomify layouts * 15/10/16 * - add dzsave_buffer * 11/11/16 Felix Bünemann * - better >4gb detection for zip output on older libgsfs * 18/8/17 * - shut down the output earlier to flush zip output * 24/11/17 * - output overlap-only tiles on edges for better deepzoom spec * compliance * 6/1/18 * - add scan-properties.xml for szi output * - write all associated images * 19/12/18 * - add @skip_blanks * 21/10/19 * - add @no_strip * 9/11/19 * - add IIIF layout * 24/4/20 [IllyaMoskvin] * - better IIIF tile naming * 15/10/21 martimpassos * - add IIIF3 layout * 21/12/21 whalehub * - remove trailing comma from IIIFv3 folder names * 29/3/22 * - always write a properties file * - add .szi as a registered suffix * 9/5/22 * - add dzsave_target * 8/9/23 * - add direct mode */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* This is difficult to test, there are so many options. It's failed in the past in these cases. These have levels with strips which exactly align with image edges, or which have orphan scanlines which need adding for the shrink. 1. $ header test.v test.v: 14016x16448 uchar, 3 bands, srgb, openin VipsImage (0x11e7060) $ time vips dzsave test.v x --overlap 0 Not all levels written. 2. $ header ~/Desktop/leicaimage.scn /home/john/Desktop/leicaimage.scn: 4225x7905 uchar, 4 bands, rgb Not all levels written. 3. $ header ~/leicatest1.scn /home/john/leicatest1.scn: 11585x8449 uchar, 4 bands, rgb Not all levels written. various combinations of odd and even tile-size and overlap need testing too. Overlap handling For deepzoom, tile-size == 254 and overlap == 1 means that edge tiles are 255 x 255 (though less at the bottom right) and non-edge tiles are 256 x 256. Tiles are positioned across the image in tile-size steps. This means (confusingly) that two adjoining tiles will have two pixels in common. This has caused bugs in the past. */ /* #define DEBUG_VERBOSE #define VIPS_DEBUG #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pforeign.h" #ifdef HAVE_LIBARCHIVE typedef struct _VipsForeignSaveDz VipsForeignSaveDz; typedef struct _Level Level; /* A level in the pyramid. */ struct _Level { VipsForeignSaveDz *dz; /* The size of this image in pixels. @image can be a bit bigger since it * gets padded up to an even size. */ int width; int height; /* Number of tiles across and down in width/height. Zoomify needs this * to calculate the directory to put each tile in. */ int tiles_across; int tiles_down; /* The rect we save. It can be a lot smaller than @image, and * not at (0, 0), if we're skipping blank tiles. */ VipsRect save_area; /* The image for this level. Might be bigger than width/height since it's * always rounded up to even. */ VipsImage *image; /* The top of this strip of tiles. */ int y; /* The next line we write to in this strip. */ int write_y; VipsRegion *strip; /* The current strip of pixels */ VipsRegion *copy; /* Pixels we copy to the next strip */ int sub; /* Subsample factor for this level */ int n; /* Level number ... 0 for smallest */ Level *below; /* Tiles go to here */ Level *above; /* Tiles come from here */ }; struct _VipsForeignSaveDz { VipsForeignSave parent_object; /* The target we are writing to. This is set by our subclasses. */ VipsTarget *target; /* Alternatively, the filename, for filesystem output. */ char *filename; char *suffix; int overlap; int tile_size; VipsForeignDzLayout layout; VipsForeignDzDepth depth; gboolean centre; gboolean properties; VipsAngle angle; VipsForeignDzContainer container; int compression; VipsRegionShrink region_shrink; int skip_blanks; gboolean no_strip; char *id; int Q; /* In direct save mode, we write regions of pixels to the output and * avoid creating a pipeline for each tile. This must be disabled if * --suffix has been used. */ gboolean direct; /* Tile and overlap geometry. The members above are the parameters we * accept, this next set are the derived values which are actually * used in pyramid generation. * * Tiles have a base tile_size. Imagine a square placed at the top left. * This is the size of that square. * * Tiles have a margin. The square from tile_size is expanded outward * up/down/left/right by this amount. Parts going off the image are * clipped. * * Each time we write a new tile, we step the position by tile_step * pixels. * * We need all three of tile_size, tile_margin and tile_step since * deepzoom and google maps have different meanings for overlap and we * want to be able to support both models. * * For deepzoom: * * tile_margin = overlap * tile_step = tile_size * * For google maps: * * tile_margin = 0 * tile_step = tile_size - overlap */ int tile_margin; int tile_step; Level *level; /* x2 shrink pyr level */ /* Count zoomify tiles we write. */ int tile_count; /* Where we write ... can be the filesystem, or a zip. */ VipsArchive *archive; /* The name to save as, eg. deepzoom tiles go into ${imagename}_files. * No suffix, no path at the start. */ char *imagename; /* The directory we write the output to. */ char *dirname; /* The name of the directory containing the levels ... eg. perhaps * $(imagename)_files, etc. */ char *root_name; /* @suffix, but without any options. So @suffix == ".jpg[Q=90]" * becomes ".jpg". */ char *file_suffix; /* save->background turned into a pixel that matches the image we are * saving .. used to test for blank tiles. */ VipsPel *ink; }; typedef VipsForeignSaveClass VipsForeignSaveDzClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignSaveDz, vips_foreign_save_dz, VIPS_TYPE_FOREIGN_SAVE); /* ZIP and SZI are both written as zip files. */ static gboolean iszip(VipsForeignDzContainer container) { switch (container) { case VIPS_FOREIGN_DZ_CONTAINER_ZIP: case VIPS_FOREIGN_DZ_CONTAINER_SZI: return TRUE; default: return FALSE; } } static int write_image(VipsForeignSaveDz *dz, VipsImage *image, const char *filename, const char *format) { VipsForeignSave *save = VIPS_FOREIGN_SAVE(dz); VipsImage *t; /* We need to block progress signalling on individual image write, so * we need a copy of the tile in case it's shared (eg. associated * images). */ if (vips_copy(image, &t, NULL)) return -1; vips_image_set_int(t, "hide-progress", 1); void *buf; size_t len; if (vips_image_write_to_buffer(t, format, &buf, &len, "keep", save->keep, NULL)) { VIPS_UNREF(t); return -1; } VIPS_UNREF(t); if (vips__archive_mkfile(dz->archive, filename, buf, len)) { g_free(buf); return -1; } g_free(buf); return 0; } /* Free a pyramid. */ static void level_free(Level *level) { VIPS_FREEF(g_object_unref, level->strip); VIPS_FREEF(g_object_unref, level->copy); VIPS_FREEF(g_object_unref, level->image); VIPS_FREEF(level_free, level->below); } static void vips_foreign_save_dz_dispose(GObject *gobject) { VipsForeignSaveDz *dz = (VipsForeignSaveDz *) gobject; VIPS_FREEF(vips__archive_free, dz->archive); VIPS_UNREF(dz->target); VIPS_FREEF(level_free, dz->level); VIPS_FREE(dz->imagename); VIPS_FREE(dz->dirname); VIPS_FREE(dz->root_name); VIPS_FREE(dz->file_suffix); G_OBJECT_CLASS(vips_foreign_save_dz_parent_class)->dispose(gobject); } /* Build a pyramid. * * width/height is the size of this level, real_* the subsection of the level * which is real pixels (as opposed to background). left/top of save_area * can be >0 if we are centring. */ static Level * pyramid_build(VipsForeignSaveDz *dz, Level *above, int width, int height, VipsRect *save_area) { VipsForeignSave *save = VIPS_FOREIGN_SAVE(dz); Level *level; VipsRect strip; int limit; if (!(level = VIPS_NEW(dz, Level))) return NULL; level->dz = dz; level->width = width; level->height = height; /* We need to output all possible tiles, even if they give no new * pixels. */ level->tiles_across = VIPS_ROUND_UP(width, dz->tile_step) / dz->tile_step; level->tiles_down = VIPS_ROUND_UP(height, dz->tile_step) / dz->tile_step; level->save_area = *save_area; level->image = NULL; level->strip = NULL; level->copy = NULL; if (!above) /* Top of pyramid. */ level->sub = 1; else level->sub = above->sub * 2; level->below = NULL; level->above = above; /* We round the image size up to an even number to make x2 shrink * easy. */ level->image = vips_image_new(); if (vips_image_pipelinev(level->image, VIPS_DEMAND_STYLE_ANY, save->ready, NULL)) { level_free(level); return NULL; } level->image->Xsize = width + (width & 1); level->image->Ysize = height + (height & 1); level->strip = vips_region_new(level->image); level->copy = vips_region_new(level->image); /* The regions will get used in the bg thread callback, so make sure * we don't own them. */ vips__region_no_ownership(level->strip); vips__region_no_ownership(level->copy); /* Build a line of tiles here. * * Expand the strip if necessary to make sure we have an even * number of lines. * * This is just the height of the first row of tiles, so only add 1* * tile_margin. */ level->y = 0; level->write_y = 0; strip.left = 0; strip.top = 0; strip.width = level->image->Xsize; strip.height = dz->tile_size + dz->tile_margin; if ((strip.height & 1) == 1) strip.height += 1; if (vips_region_buffer(level->strip, &strip)) { level_free(level); return NULL; } switch (dz->depth) { case VIPS_FOREIGN_DZ_DEPTH_ONEPIXEL: limit = 1; break; case VIPS_FOREIGN_DZ_DEPTH_ONETILE: limit = dz->tile_size; break; case VIPS_FOREIGN_DZ_DEPTH_ONE: limit = VIPS_MAX(width, height); break; default: g_assert_not_reached(); /* Stop compiler warnings. */ limit = 1; } if (width > limit || height > limit) { /* Round up, so eg. a 5 pixel wide image becomes 3 a level * down. */ VipsRect half; half.left = (save_area->left + 1) / 2; half.top = (save_area->top + 1) / 2; half.width = (save_area->width + 1) / 2; half.height = (save_area->height + 1) / 2; if (!(level->below = pyramid_build(dz, level, (width + 1) / 2, (height + 1) / 2, &half))) { level_free(level); return NULL; } level->n = level->below->n + 1; } else level->n = 0; #ifdef DEBUG printf("pyramid_build:\n"); printf("\tn = %d\n", level->n); printf("\twidth = %d, height = %d\n", width, height); printf("\tXsize = %d, Ysize = %d\n", level->image->Xsize, level->image->Ysize); printf("\ttiles_across = %d, tiles_down = %d\n", level->tiles_across, level->tiles_down); printf("\tsave_area.left = %d, save_area.top = %d\n", save_area->left, save_area->top); printf("\tsave_area.width = %d, save_area.height = %d\n", save_area->width, save_area->height); #endif /*DEBUG*/ return level; } static int write_dzi(VipsForeignSaveDz *dz) { VipsDbuf dbuf; char filename[VIPS_PATH_MAX]; char format[VIPS_PATH_MAX]; char *p; void *buf; size_t len; vips_snprintf(filename, VIPS_PATH_MAX, "%s.dzi", dz->imagename); vips_dbuf_init(&dbuf); vips_snprintf(format, VIPS_PATH_MAX, "%s", dz->suffix + 1); if ((p = (char *) vips__find_rightmost_brackets(format))) *p = '\0'; vips_dbuf_writef(&dbuf, "\n"); vips_dbuf_writef(&dbuf, "overlap); vips_dbuf_writef(&dbuf, " TileSize=\"%d\"\n", dz->tile_size); vips_dbuf_writef(&dbuf, " >\n"); vips_dbuf_writef(&dbuf, " level->height); vips_dbuf_writef(&dbuf, " Width=\"%d\"\n", dz->level->width); vips_dbuf_writef(&dbuf, " />\n"); vips_dbuf_writef(&dbuf, "\n"); if ((buf = vips_dbuf_steal(&dbuf, &len))) { if (vips__archive_mkfile(dz->archive, filename, buf, len)) { g_free(buf); return -1; } g_free(buf); } return 0; } static int write_properties(VipsForeignSaveDz *dz) { VipsDbuf dbuf; char *filename; void *buf; size_t len; filename = g_build_filename(dz->root_name, "ImageProperties.xml", NULL); vips_dbuf_init(&dbuf); vips_dbuf_writef(&dbuf, "\n", dz->level->width, dz->level->height, dz->tile_count, dz->tile_size); if ((buf = vips_dbuf_steal(&dbuf, &len))) { if (vips__archive_mkfile(dz->archive, filename, buf, len)) { g_free(buf); g_free(filename); return -1; } g_free(buf); } g_free(filename); return 0; } static int write_blank(VipsForeignSaveDz *dz) { VipsForeignSave *save = (VipsForeignSave *) dz; VipsImage *x, *t; int n; VipsArea *ones; double *d; double *bg; int i; char *filename; /* Number of bands we will end up making. We need to set this in * vips_black() to make sure we set Type correctly, otherwise we can * try saving a B_W image as PNG, with disastrous results. */ bg = (double *) vips_area_get_data(VIPS_AREA(save->background), NULL, &n, NULL, NULL); if (vips_black(&x, dz->tile_size, dz->tile_size, "bands", n, NULL)) return -1; ones = vips_area_new_array(G_TYPE_DOUBLE, sizeof(double), n); d = (double *) vips_area_get_data(ones, NULL, NULL, NULL, NULL); for (i = 0; i < n; i++) d[i] = 1.0; if (vips_linear(x, &t, d, bg, n, NULL)) { vips_area_unref(ones); g_object_unref(x); return -1; } vips_area_unref(ones); g_object_unref(x); x = t; filename = g_build_filename(dz->root_name, "blank.png", NULL); if (write_image(dz, x, filename, ".png")) { g_free(filename); g_object_unref(x); return -1; } g_free(filename); g_object_unref(x); return 0; } /* Write IIIF/IIF3 JSON metadata. */ static int write_json(VipsForeignSaveDz *dz) { /* dz->file_suffix has a leading "." character. */ const char *suffix = dz->file_suffix[0] == '.' ? dz->file_suffix + 1 : dz->file_suffix; VipsDbuf dbuf; char *filename; void *buf; size_t len; int i; filename = g_build_filename(dz->root_name, "info.json", NULL); vips_dbuf_init(&dbuf); if (dz->layout == VIPS_FOREIGN_DZ_LAYOUT_IIIF3) vips_dbuf_writef(&dbuf, "{\n" " \"@context\": " "\"http://iiif.io/api/image/3/context.json\",\n" " \"id\": \"%s/%s\",\n" " \"type\": \"ImageService3\",\n" " \"profile\": \"level0\",\n" " \"protocol\": \"http://iiif.io/api/image\",\n", dz->id ? dz->id : "https://example.com/iiif", dz->imagename); else vips_dbuf_writef(&dbuf, "{\n" " \"@context\": " "\"http://iiif.io/api/image/2/context.json\",\n" " \"@id\": \"%s/%s\",\n" " \"profile\": [\n" " \"http://iiif.io/api/image/2/level0.json\",\n" " {\n" " \"formats\": [\n" " \"%s\"\n" " ],\n" " \"qualities\": [\n" " \"default\"\n" " ]\n" " }\n" " ],\n" " \"protocol\": \"http://iiif.io/api/image\",\n", dz->id ? dz->id : "https://example.com/iiif", dz->imagename, suffix); /* "sizes" is needed for the full/ set of untiled images, which we * don't yet support. Leave this commented out for now. vips_dbuf_writef(&dbuf, " \"sizes\": [\n"); for (i = 0; i < dz->level->n + 5; i++) { vips_dbuf_writef(&dbuf, " {\n" " \"width\": %d,\n" " \"height\": \"full\"\n" " }", 1 << (i + 4)); if (i != dz->level->n - 4) vips_dbuf_writef(&dbuf, ","); vips_dbuf_writef(&dbuf, "\n"); } vips_dbuf_writef(&dbuf, " ],\n"); */ /* The set of pyramid levels we have written. */ vips_dbuf_writef(&dbuf, " \"tiles\": [\n" " {\n" " \"scaleFactors\": [\n"); for (i = 0; i < dz->level->n; i++) { vips_dbuf_writef(&dbuf, " %d", 1 << i); if (i != dz->level->n - 1) vips_dbuf_writef(&dbuf, ","); vips_dbuf_writef(&dbuf, "\n"); } vips_dbuf_writef(&dbuf, " ],\n" " \"width\": %d\n" " }\n" " ],\n", dz->tile_size); vips_dbuf_writef(&dbuf, " \"width\": %d,\n" " \"height\": %d\n", dz->level->width, dz->level->height); vips_dbuf_writef(&dbuf, "}\n"); if ((buf = vips_dbuf_steal(&dbuf, &len))) { if (vips__archive_mkfile(dz->archive, filename, buf, len)) { g_free(filename); g_free(buf); return -1; } g_free(buf); } g_free(filename); return 0; } static int write_vips_meta(VipsForeignSaveDz *dz) { VipsForeignSave *save = (VipsForeignSave *) dz; char *filename; char *dump; /* For deepzoom the props must go inside the ${name}_files subdir, for * gm and zoomify it can sit in the main folder. */ if (dz->layout == VIPS_FOREIGN_DZ_LAYOUT_DZ) filename = g_build_filename(dz->root_name, "vips-properties.xml", NULL); else filename = g_strdup("vips-properties.xml"); if (filename == NULL) return -1; if (!(dump = vips__xml_properties(save->ready))) { g_free(filename); return -1; } if (vips__archive_mkfile(dz->archive, filename, dump, strlen(dump))) { g_free(filename); g_free(dump); return -1; } g_free(filename); g_free(dump); return 0; } static void build_scan_property(VipsDbuf *dbuf, VipsImage *image, const char *vips_name, const char *szi_name) { char *str; GValue value = G_VALUE_INIT; GValue save_value = G_VALUE_INIT; GType type; if (!vips_image_get_typeof(image, vips_name)) return; if (vips_image_get(image, vips_name, &value)) return; type = G_VALUE_TYPE(&value); if (!g_value_type_transformable(type, VIPS_TYPE_SAVE_STRING)) { g_value_unset(&value); return; } g_value_init(&save_value, VIPS_TYPE_SAVE_STRING); if (!g_value_transform(&value, &save_value)) { g_value_unset(&value); return; } g_value_unset(&value); if (!(str = g_utf8_make_valid( vips_value_get_save_string(&save_value), -1))) { g_value_unset(&save_value); return; } vips_dbuf_writef(dbuf, " \n"); vips_dbuf_writef(dbuf, " "); vips_dbuf_write_amp(dbuf, szi_name); vips_dbuf_writef(dbuf, "\n"); vips_dbuf_writef(dbuf, " ", g_type_name(type)); vips_dbuf_write_amp(dbuf, str); vips_dbuf_writef(dbuf, "\n"); vips_dbuf_writef(dbuf, " \n"); g_free(str); g_value_unset(&save_value); } static char *scan_property_names[][2] = { { "openslide.vendor", "Vendor" }, { "openslide.objective-power", "ObjectiveMagnification" }, { "openslide.mpp-x", "MicronsPerPixelX" }, { "openslide.mpp-y", "MicronsPerPixelY" }, { "width", "ImageWidth" }, { "height", "ImageHeight" } }; /* Make the xml we write to scan-properties.xml in szi write. * Free with g_free(). */ static char * build_scan_properties(VipsImage *image, size_t *len) { VipsDbuf dbuf; char *date; int i; date = vips__get_iso8601(); vips_dbuf_init(&dbuf); vips_dbuf_writef(&dbuf, "\n"); vips_dbuf_writef(&dbuf, "\n", date); vips_dbuf_writef(&dbuf, " \n"); g_free(date); for (i = 0; i < VIPS_NUMBER(scan_property_names); i++) build_scan_property(&dbuf, image, scan_property_names[i][0], scan_property_names[i][1]); vips_dbuf_writef(&dbuf, " \n"); vips_dbuf_writef(&dbuf, "\n"); return (char *) vips_dbuf_steal(&dbuf, len); } static int write_scan_properties(VipsForeignSaveDz *dz) { VipsForeignSave *save = (VipsForeignSave *) dz; char *dump; size_t len; if (!(dump = build_scan_properties(save->ready, &len))) return -1; if (vips__archive_mkfile(dz->archive, "scan-properties.xml", dump, len)) { g_free(dump); return -1; } g_free(dump); return 0; } static void * write_associated_images(VipsImage *image, const char *field, GValue *value, void *a) { VipsForeignSaveDz *dz = (VipsForeignSaveDz *) a; if (vips_isprefix("openslide.associated.", field)) { VipsImage *associated; const char *p; const char *q; char *out; char buf[VIPS_PATH_MAX]; p = field + strlen("openslide.associated."); /* Make sure there are no '/' in the filename. */ if ((q = strrchr(p, '/'))) p = q + 1; if (vips_image_get_image(image, field, &associated)) return image; if (vips__archive_mkdir(dz->archive, "associated_images")) return image; vips_snprintf(buf, VIPS_PATH_MAX, "%s.jpg", p); out = g_build_filename("associated_images", buf, NULL); if (write_image(dz, associated, out, ".jpg")) { g_free(out); g_object_unref(associated); return image; } g_free(out); g_object_unref(associated); } return NULL; } static int write_associated(VipsForeignSaveDz *dz) { VipsForeignSave *save = (VipsForeignSave *) dz; if (vips_image_map(save->ready, write_associated_images, dz)) return -1; return 0; } /* Our state during a threaded write of a strip using the image API. */ typedef struct _Strip { Level *level; VipsImage *image; /* Allocate the next tile on this boundary. */ int x; } ImageStrip; static void image_strip_free(ImageStrip *strip) { g_object_unref(strip->image); } static void image_strip_init(ImageStrip *strip, Level *level) { VipsForeignSaveDz *dz = level->dz; VipsRect line, image; strip->level = level; strip->image = NULL; strip->x = 0; /* The image we wrap around our pixel buffer must be the full width, * including any rounding up, since we must have contiguous pixels. * We can trim the height down though. * * When we loop across the strip writing tiles we have to look out for * the smaller width. */ image.left = 0; image.top = 0; image.width = level->image->Xsize; image.height = level->height; line.left = 0; line.top = level->y; line.width = image.width; line.height = dz->tile_size; vips_rect_marginadjust(&line, dz->tile_margin); vips_rect_intersectrect(&image, &line, &line); if (!(strip->image = vips_image_new_from_memory( VIPS_REGION_ADDR(level->strip, 0, line.top), VIPS_IMAGE_SIZEOF_LINE(level->image) * line.height, line.width, line.height, level->image->Bands, level->image->BandFmt))) { image_strip_free(strip); return; } /* The strip needs to inherit the level's metadata. */ if (vips__image_meta_copy(strip->image, level->image)) { image_strip_free(strip); return; } /* Type needs to be set so we know how to convert for save correctly. */ strip->image->Type = level->image->Type; } static int image_strip_allocate(VipsThreadState *state, void *a, gboolean *stop) { ImageStrip *strip = (ImageStrip *) a; Level *level = strip->level; VipsForeignSaveDz *dz = level->dz; VipsRect image; #ifdef DEBUG_VERBOSE printf("image_strip_allocate\n"); #endif /*DEBUG_VERBOSE*/ /* We can't test for allocated area empty, since it might just have * bits of the left-hand overlap in and no new pixels. Safest to count * tiles across. */ if (strip->x / dz->tile_step >= level->tiles_across) { *stop = TRUE; #ifdef DEBUG_VERBOSE printf("image_strip_allocate: done\n"); #endif /*DEBUG_VERBOSE*/ return 0; } image.left = 0; image.top = 0; image.width = level->width; image.height = level->height; /* Position this tile. */ state->pos.left = strip->x; state->pos.top = level->y; state->pos.width = dz->tile_size; state->pos.height = dz->tile_size; vips_rect_marginadjust(&state->pos, dz->tile_margin); vips_rect_intersectrect(&image, &state->pos, &state->pos); state->x = strip->x; state->y = level->y; strip->x += dz->tile_step; return 0; } /* Make a name for a tile in the current layout. */ static char * tile_name(Level *level, int x, int y) { VipsForeignSaveDz *dz = level->dz; VipsForeignSave *save = (VipsForeignSave *) dz; char *out; char *dirname; char name[VIPS_PATH_MAX]; char subdir[VIPS_PATH_MAX]; Level *p; int n; switch (dz->layout) { case VIPS_FOREIGN_DZ_LAYOUT_DZ: vips_snprintf(subdir, VIPS_PATH_MAX, "%d", level->n); vips_snprintf(name, VIPS_PATH_MAX, "%d_%d%s", x, y, dz->file_suffix); break; case VIPS_FOREIGN_DZ_LAYOUT_ZOOMIFY: /* We need to work out the tile number so we can calculate the * directory to put this tile in. * * Tiles are numbered from 0 for the most-zoomed-out tile. */ n = 0; /* Count all tiles in levels below this one. */ for (p = level->below; p; p = p->below) n += p->tiles_across * p->tiles_down; /* And count tiles so far in this level. */ n += y * level->tiles_across + x; vips_snprintf(subdir, VIPS_PATH_MAX, "TileGroup%d", n / 256); vips_snprintf(name, VIPS_PATH_MAX, "%d-%d-%d%s", level->n, x, y, dz->file_suffix); /* Used at the end in ImageProperties.xml */ dz->tile_count += 1; break; case VIPS_FOREIGN_DZ_LAYOUT_GOOGLE: vips_snprintf(subdir, VIPS_PATH_MAX, "%d" G_DIR_SEPARATOR_S "%d", level->n, y); vips_snprintf(name, VIPS_PATH_MAX, "%d%s", x, dz->file_suffix); break; case VIPS_FOREIGN_DZ_LAYOUT_IIIF: case VIPS_FOREIGN_DZ_LAYOUT_IIIF3: { /* Tiles are addressed in full resolution coordinates, so * scale up by level->sub and dz->tile_size * * We always clip against the full-sized image, not the scaled * up level. * * This will break for overlap != 0, but hopefully no one will * ever use that. */ int left = x * dz->tile_size * level->sub; int top = y * dz->tile_size * level->sub; int width = VIPS_MIN(dz->tile_size * level->sub, save->ready->Xsize - left); int height = VIPS_MIN(dz->tile_size * level->sub, save->ready->Ysize - top); /* Rotation is always 0. */ int rotation = 0; if (dz->layout == VIPS_FOREIGN_DZ_LAYOUT_IIIF3) { int xsize = VIPS_MIN(dz->tile_size, level->width - x * dz->tile_size); int ysize = VIPS_MIN(dz->tile_size, level->height - y * dz->tile_size); vips_snprintf(subdir, VIPS_PATH_MAX, "%d,%d,%d,%d" G_DIR_SEPARATOR_S "%d,%d" G_DIR_SEPARATOR_S "%d", left, top, width, height, xsize, ysize, rotation); } else { /* IIIF2 "size" is just real tile width, I think. */ int size = VIPS_MIN(dz->tile_size, level->width - x * dz->tile_size); vips_snprintf(subdir, VIPS_PATH_MAX, "%d,%d,%d,%d" G_DIR_SEPARATOR_S "%d," G_DIR_SEPARATOR_S "%d", left, top, width, height, size, rotation); } vips_snprintf(name, VIPS_PATH_MAX, "default%s", dz->file_suffix); } break; default: g_assert_not_reached(); } dirname = g_build_filename(dz->root_name, subdir, NULL); if (vips__archive_mkdir(dz->archive, dirname)) { g_free(dirname); return NULL; } out = g_build_filename(dirname, name, NULL); g_free(dirname); #ifdef DEBUG_VERBOSE printf("tile_name: writing to %s\n", out); #endif /*DEBUG_VERBOSE*/ return out; } /* Test for region nearly equal to background colour. In google maps mode, we * skip blank background tiles. * * Don't use exactly equality since compression artefacts or noise can upset * this. */ static gboolean region_tile_equal(VipsRegion *region, VipsRect *rect, int threshold, VipsPel *restrict ink) { int bytes = VIPS_REGION_SIZEOF_PEL(region); int x, y, b; for (y = 0; y < rect->height; y++) { VipsPel *restrict p = VIPS_REGION_ADDR(region, rect->left, rect->top + y); for (x = 0; x < rect->width; x++) { for (b = 0; b < bytes; b++) if (VIPS_ABS(p[b] - ink[b]) > threshold) return FALSE; p += bytes; } } return TRUE; } static gboolean image_tile_equal(VipsImage *image, int threshold, VipsPel *restrict ink) { VipsRect rect; VipsRegion *region; region = vips_region_new(image); /* We know @image is part of a memory buffer, so this will be quick. */ rect.left = 0; rect.top = 0; rect.width = image->Xsize; rect.height = image->Ysize; if (vips_region_prepare(region, &rect)) { g_object_unref(region); return FALSE; } if (!region_tile_equal(region, &rect, threshold, ink)) { g_object_unref(region); return FALSE; } g_object_unref(region); return TRUE; } static int image_strip_work(VipsThreadState *state, void *a) { ImageStrip *strip = (ImageStrip *) a; Level *level = strip->level; VipsForeignSaveDz *dz = level->dz; VipsForeignSave *save = (VipsForeignSave *) dz; int tile_x = state->x / dz->tile_step; int tile_y = state->y / dz->tile_step; VipsRect tile; VipsImage *x; char *out; #ifdef DEBUG_VERBOSE printf("image_strip_work\n"); #endif /*DEBUG_VERBOSE*/ /* killed is checked by sink_disc, but that's only once per strip, and * they can be huge. Check per output tile as well. */ if (vips_image_iskilled(save->in)) return -1; /* We may be outside the real pixels. */ tile.left = state->x; tile.top = state->y; tile.width = dz->tile_size; tile.height = dz->tile_size; if (!vips_rect_overlapsrect(&tile, &level->save_area)) { #ifdef DEBUG_VERBOSE printf("image_strip_work: skipping tile %d x %d\n", tile_x, tile_y); #endif /*DEBUG_VERBOSE*/ return 0; } g_assert(vips_object_sanity(VIPS_OBJECT(strip->image))); /* Extract relative to the strip top-left corner. */ if (vips_extract_area(strip->image, &x, state->pos.left, 0, state->pos.width, state->pos.height, NULL)) return -1; if (dz->skip_blanks >= 0 && image_tile_equal(x, dz->skip_blanks, dz->ink)) { g_object_unref(x); #ifdef DEBUG_VERBOSE printf("image_strip_work: skipping blank tile %d x %d\n", tile_x, tile_y); #endif /*DEBUG_VERBOSE*/ return 0; } if (!(out = tile_name(level, tile_x, tile_y))) { g_object_unref(x); return -1; } /* Don't do a threaded write -- this pipeline is too small to have useful * concurrency, and we are already writing tiles in parallel. */ vips_image_set_int(x, VIPS_META_CONCURRENCY, 1); if (write_image(dz, x, out, dz->suffix)) { g_free(out); g_object_unref(x); return -1; } g_free(out); g_object_unref(x); #ifdef DEBUG_VERBOSE printf("image_strip_work: success\n"); #endif /*DEBUG_VERBOSE*/ return 0; } /* Our state during a direct write of a strip. */ typedef struct _DirectStrip { Level *level; /* Allocate the next tile on this boundary. */ int x; } DirectStrip; static int direct_strip_allocate(VipsThreadState *state, void *a, gboolean *stop) { DirectStrip *strip = (DirectStrip *) a; Level *level = strip->level; VipsForeignSaveDz *dz = level->dz; VipsRect image; #ifdef DEBUG_VERBOSE printf("direct_strip_allocate\n"); #endif /*DEBUG_VERBOSE*/ /* We can't test for allocated area empty, since it might just have * bits of the left-hand overlap in and no new pixels. Safest to count * tiles across. */ if (strip->x / dz->tile_step >= level->tiles_across) { *stop = TRUE; #ifdef DEBUG_VERBOSE printf("direct_strip_allocate: done\n"); #endif /*DEBUG_VERBOSE*/ return 0; } /* Position this tile. */ image.left = 0; image.top = 0; image.width = level->width; image.height = level->height; state->pos.left = strip->x; state->pos.top = level->y; state->pos.width = dz->tile_size; state->pos.height = dz->tile_size; vips_rect_marginadjust(&state->pos, dz->tile_margin); vips_rect_intersectrect(&image, &state->pos, &state->pos); state->x = strip->x; state->y = level->y; strip->x += dz->tile_step; return 0; } static int direct_image_write(VipsForeignSaveDz *dz, VipsRegion *region, VipsRect *rect, const char *filename) { VipsForeignSave *save = VIPS_FOREIGN_SAVE(dz); VipsTarget *target; if (!(target = vips_target_new_to_memory())) return -1; if (vips__jpeg_region_write_target(region, rect, target, dz->Q, NULL, FALSE, FALSE, save->keep, FALSE, FALSE, FALSE, 0, 0, 0)) { g_object_unref(target); return -1; } VipsBlob *blob; const void *buf; size_t len; g_object_get(target, "blob", &blob, NULL); buf = vips_blob_get(blob, &len); if (vips__archive_mkfile(dz->archive, filename, (void *) buf, len)) { vips_area_unref(VIPS_AREA(blob)); g_object_unref(target); return -1; } vips_area_unref(VIPS_AREA(blob)); g_object_unref(target); return 0; } static int direct_strip_work(VipsThreadState *state, void *a) { DirectStrip *strip = (DirectStrip *) a; Level *level = strip->level; VipsForeignSaveDz *dz = level->dz; VipsForeignSave *save = (VipsForeignSave *) dz; int tile_x = state->x / dz->tile_step; int tile_y = state->y / dz->tile_step; VipsRect tile; /* killed is checked by sink_disc, but that's only once per strip, and * they can be huge. Check per output tile as well. */ if (vips_image_iskilled(save->in)) return -1; /* We may be outside the real pixels. */ tile.left = state->x; tile.top = state->y; tile.width = dz->tile_size; tile.height = dz->tile_size; if (!vips_rect_overlapsrect(&tile, &level->save_area)) { #ifdef DEBUG_VERBOSE printf("direct_strip_work: level %d, skipping tile %d x %d\n", level->n, tile_x, tile_y); #endif /*DEBUG_VERBOSE*/ return 0; } if (dz->skip_blanks >= 0 && region_tile_equal(level->strip, &state->pos, dz->skip_blanks, dz->ink)) { #ifdef DEBUG_VERBOSE printf("direct_strip_work: level %d, skipping blank tile %d x %d\n", level->n, tile_x, tile_y); #endif /*DEBUG_VERBOSE*/ return 0; } char *name; if (!(name = tile_name(level, tile_x, tile_y))) return -1; if (direct_image_write(dz, level->strip, &state->pos, name)) { g_free(name); return -1; } g_free(name); return 0; } /* Write a line of tiles with a threadpool. */ static int strip_save(Level *level) { #ifdef DEBUG_VERBOSE printf("strip_save: n = %d, y = %d\n", level->n, level->y); #endif /*DEBUG_VERBOSE*/ if (level->dz->direct) { DirectStrip strip = { level, 0 }; /* We don't want threadpoolrun to minimise on completion -- we need to * keep the cache on the pipeline before us. */ vips_image_set_int(level->image, "vips-no-minimise", 1); if (vips_threadpool_run(level->image, vips_thread_state_new, direct_strip_allocate, direct_strip_work, NULL, &strip)) return -1; } else { ImageStrip strip; image_strip_init(&strip, level); vips_image_set_int(strip.image, "vips-no-minimise", 1); if (vips_threadpool_run(strip.image, vips_thread_state_new, image_strip_allocate, image_strip_work, NULL, &strip)) { image_strip_free(&strip); return -1; } image_strip_free(&strip); } #ifdef DEBUG_VERBOSE printf("strip_save: success\n"); #endif /*DEBUG_VERBOSE*/ return 0; } /* A strip has filled, but the rightmost column and the bottom-most row may * not have been if we've rounded the size up. * * Fill them, if necessary, by copying the previous row/column. */ static void level_generate_extras(Level *level) { VipsRegion *strip = level->strip; /* We only work for full-width strips. */ g_assert(strip->valid.width == level->image->Xsize); if (level->width < level->image->Xsize) { int ps = VIPS_IMAGE_SIZEOF_PEL(strip->im); int b, y; /* Need to add a right-most column. */ for (y = 0; y < strip->valid.height; y++) { VipsPel *p = VIPS_REGION_ADDR(strip, level->width - 1, strip->valid.top + y); VipsPel *q = p + ps; for (b = 0; b < ps; b++) q[b] = p[b]; } } if (level->height < level->image->Ysize) { VipsRect last; /* The last two lines of the image. */ last.left = 0; last.top = level->image->Ysize - 2; last.width = level->image->Xsize; last.height = 2; /* Do we have them both? Fill the last with the next-to-last. */ vips_rect_intersectrect(&last, &strip->valid, &last); if (last.height == 2) { last.height = 1; vips_region_copy(strip, strip, &last, 0, last.top + 1); } } } static int strip_arrived(Level *level); /* Shrink what pixels we can from this strip into the level below. If the * strip below fills, recurse. */ static int strip_shrink(Level *level) { Level *below = level->below; VipsRegion *from = level->strip; VipsRegion *to = below->strip; VipsForeignSaveDz *dz = level->dz; VipsRegionShrink region_shrink = dz->region_shrink; VipsRect target; VipsRect source; #ifdef DEBUG_VERBOSE printf("strip_shrink: %d lines in level %d to level %d\n", from->valid.height, level->n, below->n); #endif /*DEBUG_VERBOSE*/ /* We may have an extra column of pixels on the right or * bottom that need filling: generate them. */ level_generate_extras(level); /* Our pixels might cross a strip boundary in the level below, so we * have to write repeatedly until we run out of pixels. */ for (;;) { /* The pixels the level below needs. */ target.left = 0; target.top = below->write_y; target.width = below->image->Xsize; target.height = to->valid.height; vips_rect_intersectrect(&target, &to->valid, &target); /* Those pixels need this area of this level. */ source.left = target.left * 2; source.top = target.top * 2; source.width = target.width * 2; source.height = target.height * 2; /* Of which we have these available. */ vips_rect_intersectrect(&source, &from->valid, &source); /* So these are the pixels in the level below we can provide. */ target.left = source.left / 2; target.top = source.top / 2; target.width = source.width / 2; target.height = source.height / 2; /* None? All done. */ if (vips_rect_isempty(&target)) break; (void) vips_region_shrink_method(from, to, &target, region_shrink); below->write_y += target.height; /* If we've filled the strip below, let it know. * We can either fill the region, if it's somewhere half-way * down the image, or, if it's at the bottom, get to the last * real line of pixels. */ if (below->write_y == VIPS_RECT_BOTTOM(&to->valid) || below->write_y == below->height) { if (strip_arrived(below)) return -1; } } return 0; } /* A new strip has arrived! The strip has enough pixels in to write a line of * tiles. * * - write a line of tiles * - shrink what we can to the level below * - move our strip down by the tile step * - copy the overlap with the previous strip */ static int strip_arrived(Level *level) { VipsForeignSaveDz *dz = level->dz; VipsRect new_strip; VipsRect overlap; VipsRect image_area; #ifdef DEBUG_VERBOSE printf("strip_arrived: level %d, strip at %d, height %d\n", level->n, level->y, level->strip->valid.height); #endif /*DEBUG_VERBOSE*/ if (strip_save(level)) return -1; if (level->below && strip_shrink(level)) return -1; /* Position our strip down the image. * * Expand the strip if necessary to make sure we have an even * number of lines. */ level->y += dz->tile_step; new_strip.left = 0; new_strip.top = level->y - dz->tile_margin; new_strip.width = level->image->Xsize; new_strip.height = dz->tile_size + 2 * dz->tile_margin; image_area.left = 0; image_area.top = 0; image_area.width = level->image->Xsize; image_area.height = level->image->Ysize; vips_rect_intersectrect(&new_strip, &image_area, &new_strip); if ((new_strip.height & 1) == 1) new_strip.height += 1; /* We may exactly hit the bottom of the real image (ie. before borders * have been possibly expanded by 1 pixel). In this case, we'll not * be able to do the expansion in level_generate_extras(), since the * region won't be large enough, and we'll not get another chance * since this is the bottom. * * Add another scanline if this has happened. */ if (VIPS_RECT_BOTTOM(&new_strip) == level->height) new_strip.height = level->image->Ysize - new_strip.top; /* What pixels that we will need do we already have? Save them in * overlap. */ vips_rect_intersectrect(&new_strip, &level->strip->valid, &overlap); if (!vips_rect_isempty(&overlap)) { if (vips_region_buffer(level->copy, &overlap)) return -1; vips_region_copy(level->strip, level->copy, &overlap, overlap.left, overlap.top); } if (!vips_rect_isempty(&new_strip)) { if (vips_region_buffer(level->strip, &new_strip)) return -1; /* And copy back again. */ if (!vips_rect_isempty(&overlap)) vips_region_copy(level->copy, level->strip, &overlap, overlap.left, overlap.top); } return 0; } /* The image has been completely written. Flush any strips which might have * overlaps in. */ static int strip_flush(Level *level) { if (level->y < level->height) if (strip_save(level)) return -1; if (level->below) if (strip_flush(level->below)) return -1; return 0; } /* Another strip of image pixels from vips_sink_disc(). Write into the top * pyramid level. */ static int pyramid_strip(VipsRegion *region, VipsRect *area, void *a) { VipsForeignSaveDz *dz = (VipsForeignSaveDz *) a; Level *level = dz->level; #ifdef DEBUG_VERBOSE printf("pyramid_strip: strip at %d, height %d\n", area->top, area->height); #endif /*DEBUG_VERBOSE*/ for (;;) { VipsRect *to = &level->strip->valid; VipsRect target; /* The bit of strip that needs filling. */ target.left = 0; target.top = level->write_y; target.width = level->image->Xsize; target.height = to->height; vips_rect_intersectrect(&target, to, &target); /* Clip against what we have available. */ vips_rect_intersectrect(&target, area, &target); /* Have we written all the pixels we were given? We are done. */ if (vips_rect_isempty(&target)) break; /* And copy those pixels in. * * FIXME: If the strip fits inside the region we've just * received, we could skip the copy. Will this happen very * often? Unclear. */ vips_region_copy(region, level->strip, &target, target.left, target.top); level->write_y += target.height; /* We can either fill the strip, if it's somewhere half-way * down the image, or, if it's at the bottom, get to the last * real line of pixels. */ if (level->write_y == VIPS_RECT_BOTTOM(to) || level->write_y == level->height) { if (strip_arrived(level)) return -1; } } /* If we've reached the bottom of the image, we won't get called again. * * However, there may be some unwritten pixels in the pyramid still! * Suppose a level is exactly a multiple of tile_step in height. * When we finished that last strip, we will have copied the last few * lines of overlap over into the top of the next row. Deepzoom says we * must flush these half-written strips to the output. */ if (level->write_y == level->height) { #ifdef DEBUG printf("pyramid_strip: flushing ..\n"); #endif /*DEBUG*/ if (strip_flush(level)) return -1; } return 0; } static int vips_foreign_save_dz_build(VipsObject *object) { VipsForeignSave *save = (VipsForeignSave *) object; VipsForeignSaveDz *dz = (VipsForeignSaveDz *) object; VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(dz); VipsRect save_area; char *p; // direct mode won't work if the suffix has been set if (!vips_object_argument_isset(object, "suffix")) dz->direct = TRUE; /* We default to stripping all metadata as most people * don't want metadata on every tile. Setting "keep" * or the deprecated "no_strip" turns this off. */ if (!vips_object_argument_isset(object, "keep") && !vips_object_argument_isset(object, "no_strip")) save->keep = VIPS_FOREIGN_KEEP_NONE; /* Google, zoomify and iiif default to zero overlap, ".jpg". */ if (dz->layout == VIPS_FOREIGN_DZ_LAYOUT_ZOOMIFY || dz->layout == VIPS_FOREIGN_DZ_LAYOUT_GOOGLE || dz->layout == VIPS_FOREIGN_DZ_LAYOUT_IIIF || dz->layout == VIPS_FOREIGN_DZ_LAYOUT_IIIF3) { if (!vips_object_argument_isset(object, "overlap")) dz->overlap = 0; if (!vips_object_argument_isset(object, "suffix")) VIPS_SETSTR(dz->suffix, ".jpg"); } /* Google and zoomify default to 256 pixel tiles. */ if (dz->layout == VIPS_FOREIGN_DZ_LAYOUT_ZOOMIFY || dz->layout == VIPS_FOREIGN_DZ_LAYOUT_GOOGLE) { if (!vips_object_argument_isset(object, "tile_size")) dz->tile_size = 256; } /* Some iiif writers default to 256, some to 512. We pick 512. */ if (dz->layout == VIPS_FOREIGN_DZ_LAYOUT_IIIF || dz->layout == VIPS_FOREIGN_DZ_LAYOUT_IIIF3) { if (!vips_object_argument_isset(object, "tile_size")) dz->tile_size = 512; } /* skip_blanks defaults to 5 in google mode. */ if (dz->layout == VIPS_FOREIGN_DZ_LAYOUT_GOOGLE && !vips_object_argument_isset(object, "skip_blanks")) dz->skip_blanks = 5; /* Our tile layout. */ if (dz->layout == VIPS_FOREIGN_DZ_LAYOUT_DZ) { dz->tile_margin = dz->overlap; dz->tile_step = dz->tile_size; } else { dz->tile_margin = 0; dz->tile_step = dz->tile_size - dz->overlap; } if (dz->tile_step <= 0) { vips_error("dzsave", "%s", _("overlap too large")); return -1; } /* Default to white background. vips_foreign_save_init() defaults to * black. */ if (!vips_object_argument_isset(object, "background")) { VipsArrayDouble *background; /* Using g_object_set() to set an input param in build will * change the hash and confuse caching, but we don't cache * savers, so it's fine. */ background = vips_array_double_newv(1, 255.0); g_object_set(object, "background", background, NULL); vips_area_unref(VIPS_AREA(background)); } /* DeepZoom stops at 1x1 pixels, others when the image fits within a * tile. */ if (dz->layout == VIPS_FOREIGN_DZ_LAYOUT_DZ) { if (!vips_object_argument_isset(object, "depth")) dz->depth = VIPS_FOREIGN_DZ_DEPTH_ONEPIXEL; } else if (!vips_object_argument_isset(object, "depth")) dz->depth = VIPS_FOREIGN_DZ_DEPTH_ONETILE; /* We don't support onepixel pyramids in gmaps mode. It doesn't make a lot * of sense anyway, since gmaps tiles are never clipped, so you can't have * a 1x1 pixel tile. */ if (dz->layout == VIPS_FOREIGN_DZ_LAYOUT_GOOGLE && dz->depth == VIPS_FOREIGN_DZ_DEPTH_ONEPIXEL) dz->depth = VIPS_FOREIGN_DZ_DEPTH_ONETILE; if (VIPS_OBJECT_CLASS(vips_foreign_save_dz_parent_class)->build(object)) return -1; /* Optional rotate. */ { VipsImage *z; if (vips_rot(save->ready, &z, dz->angle, NULL)) return -1; VIPS_UNREF(save->ready); save->ready = z; } /* We use ink to check for blank tiles. */ if (dz->skip_blanks >= 0) { if (!(dz->ink = vips__vector_to_ink( class->nickname, save->ready, VIPS_AREA(save->background)->data, NULL, VIPS_AREA(save->background)->n))) return -1; } /* The real (not background) pixels we have. save->ready can be a lot * bigger. left/top are moved if we centre. */ save_area.left = 0; save_area.top = 0; save_area.width = save->ready->Xsize; save_area.height = save->ready->Ysize; /* In google mode, we expand the image so we have complete tiles in every * level. We shrink to fit in one tile, then expand those dimensions out * again. */ if (dz->layout == VIPS_FOREIGN_DZ_LAYOUT_GOOGLE) { VipsImage *z; Level *level; Level *p; int width; int height; if (!(level = pyramid_build(dz, NULL, save->ready->Xsize, save->ready->Ysize, &save_area))) return -1; // find the deepest (smallest) level for (p = level; p->below; p = p->below) ; // round image size up so we have complete tiles in the base level width = VIPS_ROUND_UP(p->width, dz->tile_step) + dz->overlap; height = VIPS_ROUND_UP(p->height, dz->tile_step) + dz->overlap; // and scale up by 2^depth ... we'll have complete tiles in every // level width *= 1 << level->n; height *= 1 << level->n; level_free(level); #ifdef DEBUG printf("vips_foreign_save_dz_build: " "google mode outputs a %d x %d pixel image\n", width, height); #endif /*DEBUG*/ if (dz->centre) { #ifdef DEBUG printf("vips_foreign_save_dz_build: centring\n"); #endif /*DEBUG*/ save_area.left = (width - save->ready->Xsize) / 2; save_area.top = (height - save->ready->Ysize) / 2; } if (vips_embed(save->ready, &z, save_area.left, save_area.top, width, height, "background", save->background, NULL)) return -1; VIPS_UNREF(save->ready); save->ready = z; } #ifdef DEBUG printf("vips_foreign_save_dz_build: tile_size == %d\n", dz->tile_size); printf("vips_foreign_save_dz_build: overlap == %d\n", dz->overlap); printf("vips_foreign_save_dz_build: tile_margin == %d\n", dz->tile_margin); printf("vips_foreign_save_dz_build: tile_step == %d\n", dz->tile_step); #endif /*DEBUG*/ /* Init imagename and dirname from the associated filesystem names, if * we can. */ { const char *filename = dz->filename ? dz->filename : vips_connection_filename(VIPS_CONNECTION(dz->target)); if (!vips_object_argument_isset(object, "imagename") && !vips_object_argument_isset(object, "basename")) { if (filename) { dz->imagename = g_path_get_basename(filename); /* Remove any [options] we may have picked up from the * filename. */ if ((p = (char *) vips__find_rightmost_brackets(dz->imagename))) *p = '\0'; } else dz->imagename = g_strdup("untitled"); } if (!vips_object_argument_isset(object, "dirname")) { if (filename) dz->dirname = g_path_get_dirname(filename); else dz->dirname = g_strdup("."); } } /* If we're writing thing.zip or thing.szi, default to zip * container. */ if ((p = strrchr(dz->imagename, '.'))) { if (!vips_object_argument_isset(object, "container")) { if (g_ascii_strcasecmp(p + 1, "zip") == 0) dz->container = VIPS_FOREIGN_DZ_CONTAINER_ZIP; if (g_ascii_strcasecmp(p + 1, "szi") == 0) dz->container = VIPS_FOREIGN_DZ_CONTAINER_SZI; } /* Remove any legal suffix. We don't remove all suffixes * since we might be writing to a dirname with a dot in. */ if (g_ascii_strcasecmp(p + 1, "zip") == 0 || g_ascii_strcasecmp(p + 1, "szi") == 0 || g_ascii_strcasecmp(p + 1, "dz") == 0) *p = '\0'; } /* Build the skeleton of the image pyramid. */ if (!(dz->level = pyramid_build(dz, NULL, save->ready->Xsize, save->ready->Ysize, &save_area))) return -1; if (dz->layout == VIPS_FOREIGN_DZ_LAYOUT_DZ) dz->root_name = g_strdup_printf("%s_files", dz->imagename); else dz->root_name = g_strdup(dz->imagename); /* Drop any [options] from @suffix. */ dz->file_suffix = g_strdup(dz->suffix); if ((p = (char *) vips__find_rightmost_brackets(dz->file_suffix))) *p = '\0'; /* Make the zip archive we write the tiles into. */ if (iszip(dz->container)) { /* We can have dzsave("x.zip", container="fs"), ie. zip output * from write to file. Make a target if we need one. */ if (!dz->target) { if (!(dz->target = vips_target_new_to_file(dz->filename))) return -1; } // SZI needs an enclosing folder named after the image, according to // the spec char *path = dz->container == VIPS_FOREIGN_DZ_CONTAINER_SZI ? dz->imagename : ""; if (!(dz->archive = vips__archive_new_to_target(dz->target, path, dz->compression))) return -1; } else { if (!(dz->archive = vips__archive_new_to_dir(dz->dirname))) return -1; } if (vips_sink_disc(save->ready, pyramid_strip, dz)) return -1; switch (dz->layout) { case VIPS_FOREIGN_DZ_LAYOUT_DZ: if (write_dzi(dz)) return -1; break; case VIPS_FOREIGN_DZ_LAYOUT_ZOOMIFY: if (write_properties(dz)) return -1; break; case VIPS_FOREIGN_DZ_LAYOUT_GOOGLE: if (write_blank(dz)) return -1; break; case VIPS_FOREIGN_DZ_LAYOUT_IIIF: case VIPS_FOREIGN_DZ_LAYOUT_IIIF3: if (write_json(dz)) return -1; break; default: g_assert_not_reached(); } if (write_vips_meta(dz)) return -1; if (dz->container == VIPS_FOREIGN_DZ_CONTAINER_SZI && write_scan_properties(dz)) return -1; if (dz->container == VIPS_FOREIGN_DZ_CONTAINER_SZI && write_associated(dz)) return -1; /* Shut down the output to flush everything. */ VIPS_FREEF(vips__archive_free, dz->archive); return 0; } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX static VipsBandFormat bandfmt_dz[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, C, US, S, UI, I, F, F, D, D }; static const char *dz_suffs[] = { ".dz", ".szi", NULL }; static void vips_foreign_save_dz_class_init(VipsForeignSaveDzClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class; gobject_class->dispose = vips_foreign_save_dz_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "dzsave_base"; object_class->description = _("save image to deep zoom format"); object_class->build = vips_foreign_save_dz_build; foreign_class->suffs = dz_suffs; save_class->saveable = VIPS_SAVEABLE_ANY; save_class->format_table = bandfmt_dz; save_class->coding[VIPS_CODING_LABQ] = TRUE; VIPS_ARG_STRING(class, "imagename", 2, _("Image name"), _("Image name"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveDz, imagename), NULL); VIPS_ARG_ENUM(class, "layout", 8, _("Layout"), _("Directory layout"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveDz, layout), VIPS_TYPE_FOREIGN_DZ_LAYOUT, VIPS_FOREIGN_DZ_LAYOUT_DZ); VIPS_ARG_STRING(class, "suffix", 9, _("Suffix"), _("Filename suffix for tiles"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveDz, suffix), ".jpeg"); VIPS_ARG_INT(class, "overlap", 10, _("Overlap"), _("Tile overlap in pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveDz, overlap), 0, 8192, 1); VIPS_ARG_INT(class, "tile_size", 11, _("Tile size"), _("Tile size in pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveDz, tile_size), 1, 8192, 254); VIPS_ARG_ENUM(class, "depth", 13, _("Depth"), _("Pyramid depth"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveDz, depth), VIPS_TYPE_FOREIGN_DZ_DEPTH, VIPS_FOREIGN_DZ_DEPTH_ONEPIXEL); VIPS_ARG_BOOL(class, "centre", 13, _("Center"), _("Center image in tile"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveDz, centre), FALSE); VIPS_ARG_ENUM(class, "angle", 14, _("Angle"), _("Rotate image during save"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveDz, angle), VIPS_TYPE_ANGLE, VIPS_ANGLE_D0); VIPS_ARG_ENUM(class, "container", 15, _("Container"), _("Pyramid container type"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveDz, container), VIPS_TYPE_FOREIGN_DZ_CONTAINER, VIPS_FOREIGN_DZ_CONTAINER_FS); VIPS_ARG_INT(class, "compression", 17, _("Compression"), _("ZIP deflate compression level"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveDz, compression), -1, 9, 0); VIPS_ARG_ENUM(class, "region_shrink", 18, _("Region shrink"), _("Method to shrink regions"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveDz, region_shrink), VIPS_TYPE_REGION_SHRINK, VIPS_REGION_SHRINK_MEAN); VIPS_ARG_INT(class, "skip_blanks", 19, _("Skip blanks"), _("Skip tiles which are nearly equal to the background"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveDz, skip_blanks), -1, 65535, -1); VIPS_ARG_STRING(class, "id", 20, _("id"), _("Resource ID"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveDz, id), "https://example.com/iiif"); VIPS_ARG_INT(class, "Q", 21, _("Q"), _("Q factor"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveDz, Q), 1, 100, 75); /* How annoying. We stupidly had these in earlier versions. */ VIPS_ARG_BOOL(class, "no_strip", 22, _("No strip"), _("Don't strip tile metadata"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsForeignSaveDz, no_strip), FALSE); VIPS_ARG_STRING(class, "basename", 23, _("Base name"), _("Base name to save to"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsForeignSaveDz, imagename), NULL); VIPS_ARG_STRING(class, "dirname", 1, _("Directory name"), _("Directory name to save to"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsForeignSaveDz, dirname), NULL); VIPS_ARG_INT(class, "tile_width", 12, _("Tile width"), _("Tile width in pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsForeignSaveDz, tile_size), 1, 8192, 254); VIPS_ARG_INT(class, "tile_height", 12, _("Tile height"), _("Tile height in pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsForeignSaveDz, tile_size), 1, 8192, 254); VIPS_ARG_BOOL(class, "properties", 16, _("Properties"), _("Write a properties file to the output directory"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsForeignSaveDz, properties), FALSE); } static void vips_foreign_save_dz_init(VipsForeignSaveDz *dz) { VIPS_SETSTR(dz->suffix, ".jpeg"); dz->layout = VIPS_FOREIGN_DZ_LAYOUT_DZ; dz->overlap = 1; dz->tile_size = 254; dz->tile_count = 0; dz->depth = VIPS_FOREIGN_DZ_DEPTH_ONEPIXEL; dz->angle = VIPS_ANGLE_D0; dz->container = VIPS_FOREIGN_DZ_CONTAINER_FS; dz->compression = 0; dz->region_shrink = VIPS_REGION_SHRINK_MEAN; dz->skip_blanks = -1; dz->Q = 75; } typedef struct _VipsForeignSaveDzTarget { VipsForeignSaveDz parent_object; VipsTarget *target; } VipsForeignSaveDzTarget; typedef VipsForeignSaveDzClass VipsForeignSaveDzTargetClass; G_DEFINE_TYPE(VipsForeignSaveDzTarget, vips_foreign_save_dz_target, vips_foreign_save_dz_get_type()); static int vips_foreign_save_dz_target_build(VipsObject *object) { VipsForeignSaveDz *dz = (VipsForeignSaveDz *) object; VipsForeignSaveDzTarget *target = (VipsForeignSaveDzTarget *) object; dz->target = target->target; g_object_ref(dz->target); if (VIPS_OBJECT_CLASS(vips_foreign_save_dz_target_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_save_dz_target_class_init(VipsForeignSaveDzTargetClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "dzsave_target"; object_class->description = _("save image to deepzoom target"); object_class->build = vips_foreign_save_dz_target_build; VIPS_ARG_OBJECT(class, "target", 1, _("Target"), _("Target to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveDzTarget, target), VIPS_TYPE_TARGET); } static void vips_foreign_save_dz_target_init(VipsForeignSaveDzTarget *target) { VipsForeignSaveDz *dz = (VipsForeignSaveDz *) target; /* zip default for target output. */ dz->container = VIPS_FOREIGN_DZ_CONTAINER_ZIP; } typedef struct _VipsForeignSaveDzFile { VipsForeignSaveDz parent_object; /* Filename for save. */ char *filename; } VipsForeignSaveDzFile; typedef VipsForeignSaveDzClass VipsForeignSaveDzFileClass; G_DEFINE_TYPE(VipsForeignSaveDzFile, vips_foreign_save_dz_file, vips_foreign_save_dz_get_type()); static int vips_foreign_save_dz_file_build(VipsObject *object) { VipsForeignSaveDz *dz = (VipsForeignSaveDz *) object; VipsForeignSaveDzFile *file = (VipsForeignSaveDzFile *) object; dz->filename = file->filename; if (VIPS_OBJECT_CLASS(vips_foreign_save_dz_file_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_save_dz_file_class_init(VipsForeignSaveDzFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "dzsave"; object_class->description = _("save image to deepzoom file"); object_class->build = vips_foreign_save_dz_file_build; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveDzFile, filename), NULL); } static void vips_foreign_save_dz_file_init(VipsForeignSaveDzFile *file) { } typedef struct _VipsForeignSaveDzBuffer { VipsForeignSaveDz parent_object; VipsArea *buf; } VipsForeignSaveDzBuffer; typedef VipsForeignSaveDzClass VipsForeignSaveDzBufferClass; G_DEFINE_TYPE(VipsForeignSaveDzBuffer, vips_foreign_save_dz_buffer, vips_foreign_save_dz_get_type()); static int vips_foreign_save_dz_buffer_build(VipsObject *object) { VipsForeignSaveDz *dz = (VipsForeignSaveDz *) object; VipsForeignSaveDzBuffer *buffer = (VipsForeignSaveDzBuffer *) object; VipsBlob *blob; if (!(dz->target = vips_target_new_to_memory())) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_save_dz_buffer_parent_class) ->build(object)) return -1; g_object_get(dz->target, "blob", &blob, NULL); g_object_set(buffer, "buffer", blob, NULL); vips_area_unref(VIPS_AREA(blob)); return 0; } static void vips_foreign_save_dz_buffer_class_init(VipsForeignSaveDzBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "dzsave_buffer"; object_class->description = _("save image to dz buffer"); object_class->build = vips_foreign_save_dz_buffer_build; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to save to"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsForeignSaveDzBuffer, buf), VIPS_TYPE_BLOB); } static void vips_foreign_save_dz_buffer_init(VipsForeignSaveDzBuffer *buffer) { VipsForeignSaveDz *dz = (VipsForeignSaveDz *) buffer; /* zip default for memory output. */ dz->container = VIPS_FOREIGN_DZ_CONTAINER_ZIP; } #endif /*HAVE_LIBARCHIVE*/ /** * vips_dzsave: (method) * @in: image to save * @name: name to save to * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @basename: %gchar base part of name * * @layout: #VipsForeignDzLayout directory layout convention * * @suffix: %gchar suffix for tiles * * @overlap: %gint set tile overlap * * @tile_size: %gint set tile size * * @background: #VipsArrayDouble background colour * * @depth: #VipsForeignDzDepth how deep to make the pyramid * * @centre: %gboolean centre the tiles * * @angle: #VipsAngle rotate the image by this much * * @container: #VipsForeignDzContainer set container type * * @compression: %gint zip deflate compression level * * @region_shrink: #VipsRegionShrink how to shrink each 2x2 region * * @skip_blanks: %gint skip tiles which are nearly equal to the background * * @id: %gchar id for IIIF properties * * @Q: %gint, quality factor * * Save an image as a set of tiles at various resolutions. By default dzsave * uses DeepZoom layout -- use @layout to pick other conventions. * * vips_dzsave() creates a directory called @name to hold the tiles. If @name * ends `.zip`, vips_dzsave() will create a zip file called @name to hold the * tiles. You can use @container to force zip file output. * * Use @basename to set the name of the image we are creating. The * default value is set from @name. * * By default, tiles are written as JPEGs. Use @Q set set the JPEG quality * factor. * * You can set @suffix to something like `".png[bitdepth=4]"` to write tiles * in another format. * * In Google layout mode, edge tiles are expanded to @tile_size by @tile_size * pixels. Normally they are filled with white, but you can set another colour * with @background. Images are usually placed at the top-left of the tile, * but you can have them centred by turning on @centre. * * You can set the size and overlap of tiles with @tile_size and @overlap. * They default to the correct settings for the selected @layout. The deepzoom * defaults produce 256x256 jpeg files for centre tiles, the most efficient * size. * * Use @depth to control how low the pyramid goes. This defaults to the * correct setting for the @layout you select. * * You can rotate the image during write with the @angle argument. However, * this will only work for images which support random access, like openslide, * and not for things like JPEG. You'll need to rotate those images * yourself with vips_rot(). Note that the `autorotate` option to the loader * may do what you need. * * By default, all tiles are stripped since usually you do not want a copy of * all metadata in every tile. Set @keep if you want to keep metadata. * * If @container is set to `zip`, you can set a compression level from -1 * (use zlib default), 0 (store, compression disabled) to 9 (max compression). * If no value is given, the default is to store files without compression. * * You can use @region_shrink to control the method for shrinking each 2x2 * region. This defaults to using the average of the 4 input pixels but you can * also use the median in cases where you want to preserve the range of values. * * If you set @skip_blanks to a value greater than or equal to zero, tiles * which are all within that many pixel values to the background are skipped. * This can save a lot of space for some image types. This option defaults to * 5 in Google layout mode, -1 otherwise. * * In IIIF layout, you can set the base of the `id` property in `info.json` * with @id. The default is `https://example.com/iiif`. * * Use @layout #VIPS_FOREIGN_DZ_LAYOUT_IIIF3 for IIIF v3 layout. * * See also: vips_tiffsave(). * * Returns: 0 on success, -1 on error. */ int vips_dzsave(VipsImage *in, const char *name, ...) { va_list ap; int result; va_start(ap, name); result = vips_call_split("dzsave", ap, in, name); va_end(ap); return result; } /** * vips_dzsave_buffer: (method) * @in: image to save * @buf: (array length=len) (element-type guint8): return output buffer here * @len: (type gsize): return output length here * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @basename: %gchar base part of name * * @layout: #VipsForeignDzLayout directory layout convention * * @suffix: %gchar suffix for tiles * * @overlap: %gint set tile overlap * * @tile_size: %gint set tile size * * @background: #VipsArrayDouble background colour * * @depth: #VipsForeignDzDepth how deep to make the pyramid * * @centre: %gboolean centre the tiles * * @angle: #VipsAngle rotate the image by this much * * @container: #VipsForeignDzContainer set container type * * @compression: %gint zip deflate compression level * * @region_shrink: #VipsRegionShrink how to shrink each 2x2 region. * * @skip_blanks: %gint skip tiles which are nearly equal to the background * * @id: %gchar id for IIIF properties * * @Q: %gint, quality factor * * As vips_dzsave(), but save to a memory buffer. * * Output is always in a zip container. Use @basename to set the name of the * directory that the zip will create when unzipped. * * The address of the buffer is returned in @buf, the length of the buffer in * @len. You are responsible for freeing the buffer with g_free() when you * are done with it. * * See also: vips_dzsave(), vips_image_write_to_file(). * * Returns: 0 on success, -1 on error. */ int vips_dzsave_buffer(VipsImage *in, void **buf, size_t *len, ...) { va_list ap; VipsArea *area; int result; area = NULL; va_start(ap, len); result = vips_call_split("dzsave_buffer", ap, in, &area); va_end(ap); if (!result && area) { if (buf) { *buf = area->data; area->free_fn = NULL; } if (len) *len = area->length; vips_area_unref(area); } return result; } /** * vips_dzsave_target: (method) * @in: image to save * @target: save image to this target * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @basename: %gchar base part of name * * @layout: #VipsForeignDzLayout directory layout convention * * @suffix: %gchar suffix for tiles * * @overlap: %gint set tile overlap * * @tile_size: %gint set tile size * * @background: #VipsArrayDouble background colour * * @depth: #VipsForeignDzDepth how deep to make the pyramid * * @centre: %gboolean centre the tiles * * @angle: #VipsAngle rotate the image by this much * * @container: #VipsForeignDzContainer set container type * * @compression: %gint zip deflate compression level * * @region_shrink: #VipsRegionShrink how to shrink each 2x2 region. * * @skip_blanks: %gint skip tiles which are nearly equal to the background * * @id: %gchar id for IIIF properties * * @Q: %gint, quality factor * * As vips_dzsave(), but save to a target. * * See also: vips_dzsave(), vips_image_write_to_target(). * * Returns: 0 on success, -1 on error. */ int vips_dzsave_target(VipsImage *in, VipsTarget *target, ...) { va_list ap; int result; va_start(ap, target); result = vips_call_split("dzsave_target", ap, in, target); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/exif.c000066400000000000000000001070051454007373500174710ustar00rootroot00000000000000/* parse EXIF metadata block out into a set of fields, and reassemble EXIF * block from original block, plus modified fields * * 7/11/16 * - from jpeg2vips * 14/10/17 * - only read orientation from ifd0 * 1/2/18 * - remove exif thumbnail if "jpeg-thumbnail-data" has been removed * 3/7/18 * - add support for writing string-valued fields * 9/7/18 [@Nan619] * - get tag name from tag plus ifd * 13/11/21 * - better handling of strings with embedded metacharacters */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include #ifdef HAVE_EXIF #ifdef UNTAGGED_EXIF #include #include #include #include #else /*!UNTAGGED_EXIF*/ #include #include #include #include #endif /*UNTAGGED_EXIF*/ #include "pforeign.h" #ifdef DEBUG_VERBOSE /* Print exif for debugging ... hacked from exif-0.6.9/actions.c */ static void show_tags(ExifData *data) { int i; unsigned int tag; const char *name; printf("show EXIF tags:\n"); for (i = 0; i < EXIF_IFD_COUNT; i++) printf("%-7.7s", exif_ifd_get_name(i)); printf("\n"); for (tag = 0; tag < 0xffff; tag++) { name = exif_tag_get_title(tag); if (!name) continue; printf(" 0x%04x %-29.29s", tag, name); for (i = 0; i < EXIF_IFD_COUNT; i++) if (exif_content_get_entry(data->ifd[i], tag)) printf(" * "); else printf(" - "); printf("\n"); } } static void show_entry(ExifEntry *entry, void *client) { char exif_text[256]; printf("%s", exif_tag_get_title(entry->tag)); printf("|"); printf("%s", exif_entry_get_value(entry, exif_text, 256)); printf("|"); printf("%s", exif_format_get_name(entry->format)); printf("|"); printf("%d bytes", entry->size); printf("\n"); } static void show_ifd(ExifContent *content, void *client) { int *ifd = (int *) client; printf("- ifd %d\n", *ifd); exif_content_foreach_entry(content, show_entry, client); *ifd += 1; } static void show_values(ExifData *data) { ExifByteOrder order; int ifd; order = exif_data_get_byte_order(data); printf("EXIF tags in '%s' byte order\n", exif_byte_order_get_name(order)); printf("Title|Value|Format|Size\n"); ifd = 0; exif_data_foreach_content(data, show_ifd, &ifd); if (data->size) printf("contains thumbnail of %d bytes\n", data->size); } #endif /*DEBUG_VERBOSE*/ /* Like exif_data_new_from_data(), but don't default missing fields. * * If we do exif_data_new_from_data(), then missing fields are set to * their default value and we won't know about it. */ static ExifData * vips_exif_load_data_without_fix(const void *data, size_t length) { ExifData *ed; /* exif_data_load_data() only allows uint for length. Limit it to less * than that: 2**20 should be enough for anyone. */ if (length < 4) { vips_error("exif", "%s", _("exif too small")); return NULL; } if (length > 1 << 20) { vips_error("exif", "%s", _("exif too large")); return NULL; } if (!(ed = exif_data_new())) { vips_error("exif", "%s", _("unable to init exif")); return NULL; } exif_data_unset_option(ed, EXIF_DATA_OPTION_FOLLOW_SPECIFICATION); if (!vips_isprefix("Exif", (char *) data)) { /* Ensure "Exif" prefix as loaders may not provide it. */ void *data_with_prefix; data_with_prefix = g_malloc0(length + 6); memcpy(data_with_prefix, "Exif\0\0", 6); memcpy((char *) data_with_prefix + 6, data, length); exif_data_load_data(ed, data_with_prefix, length + 6); g_free(data_with_prefix); } else exif_data_load_data(ed, data, length); return ed; } static int vips_exif_get_int(ExifData *ed, ExifEntry *entry, unsigned long component, int *out) { ExifByteOrder bo = exif_data_get_byte_order(ed); size_t sizeof_component = entry->size / entry->components; size_t offset = component * sizeof_component; if (entry->format == EXIF_FORMAT_SHORT) *out = exif_get_short(entry->data + offset, bo); else if (entry->format == EXIF_FORMAT_SSHORT) *out = exif_get_sshort(entry->data + offset, bo); else if (entry->format == EXIF_FORMAT_LONG) /* This won't work for huge values, but who cares. */ *out = (int) exif_get_long(entry->data + offset, bo); else if (entry->format == EXIF_FORMAT_SLONG) *out = exif_get_slong(entry->data + offset, bo); else return -1; return 0; } static int vips_exif_get_rational(ExifData *ed, ExifEntry *entry, unsigned long component, ExifRational *out) { if (entry->format == EXIF_FORMAT_RATIONAL) { ExifByteOrder bo = exif_data_get_byte_order(ed); size_t sizeof_component = entry->size / entry->components; size_t offset = component * sizeof_component; *out = exif_get_rational(entry->data + offset, bo); } else return -1; return 0; } static int vips_exif_get_srational(ExifData *ed, ExifEntry *entry, unsigned long component, ExifSRational *out) { if (entry->format == EXIF_FORMAT_SRATIONAL) { ExifByteOrder bo = exif_data_get_byte_order(ed); size_t sizeof_component = entry->size / entry->components; size_t offset = component * sizeof_component; *out = exif_get_srational(entry->data + offset, bo); } else return -1; return 0; } static int vips_exif_get_double(ExifData *ed, ExifEntry *entry, unsigned long component, double *out) { ExifRational rv; ExifSRational srv; double value; if (!vips_exif_get_rational(ed, entry, component, &rv)) { if (rv.denominator == 0) value = 0; else value = (double) rv.numerator / rv.denominator; } else if (!vips_exif_get_srational(ed, entry, component, &srv)) { if (srv.denominator == 0) value = 0; else value = (double) srv.numerator / srv.denominator; } else return -1; *out = value; return 0; } /* Save an exif value to a string in a way that we can restore. We only bother * for the simple formats (that a client might try to change) though. * * Keep in sync with vips_exif_from_s() below. */ static void vips_exif_to_s(ExifData *ed, ExifEntry *entry, VipsBuf *buf) { unsigned long i; int iv; ExifRational rv; ExifSRational srv; char txt[256], *value; value = g_utf8_make_valid( exif_entry_get_value(entry, txt, 256), -1); if (entry->format == EXIF_FORMAT_ASCII) { /* libexif does not null-terminate strings. Copy out and add * the \0 ourselves. */ int len = VIPS_MIN(254, entry->size); memcpy(txt, entry->data, len); txt[len] = '\0'; char *utf8 = g_utf8_make_valid(txt, -1); vips_buf_appendf(buf, "%s ", utf8); g_free(utf8); } else if (entry->components < 10 && !vips_exif_get_int(ed, entry, 0, &iv)) { for (i = 0; i < entry->components; i++) { vips_exif_get_int(ed, entry, i, &iv); vips_buf_appendf(buf, "%d ", iv); } } else if (entry->components < 10 && !vips_exif_get_rational(ed, entry, 0, &rv)) { for (i = 0; i < entry->components; i++) { vips_exif_get_rational(ed, entry, i, &rv); vips_buf_appendf(buf, "%u/%u ", rv.numerator, rv.denominator); } } else if (entry->components < 10 && !vips_exif_get_srational(ed, entry, 0, &srv)) { for (i = 0; i < entry->components; i++) { vips_exif_get_srational(ed, entry, i, &srv); vips_buf_appendf(buf, "%d/%d ", srv.numerator, srv.denominator); } } else vips_buf_appendf(buf, "%s ", value); vips_buf_appendf(buf, "(%s, %s, %lu components, %d bytes)", value, exif_format_get_name(entry->format), entry->components, entry->size); g_free(value); } typedef struct _VipsExifParams { VipsImage *image; ExifData *ed; } VipsExifParams; /* tags do not uniquely set tag names: the same tag can have different * names in different ifds. * * As long as this entry has been linked to an ifd, get the tag name. */ static const char * vips_exif_entry_get_name(ExifEntry *entry) { if (!entry->parent) return NULL; return exif_tag_get_name_in_ifd(entry->tag, exif_entry_get_ifd(entry)); } static void vips_exif_attach_entry(ExifEntry *entry, VipsExifParams *params) { const char *tag_name; char vips_name_txt[256]; VipsBuf vips_name = VIPS_BUF_STATIC(vips_name_txt); char value_txt[256]; VipsBuf value = VIPS_BUF_STATIC(value_txt); if (!(tag_name = vips_exif_entry_get_name(entry))) return; vips_buf_appendf(&vips_name, "exif-ifd%d-%s", exif_entry_get_ifd(entry), tag_name); vips_exif_to_s(params->ed, entry, &value); /* Can't do anything sensible with the error return. */ (void) vips_image_set_string(params->image, vips_buf_all(&vips_name), vips_buf_all(&value)); } static void vips_exif_get_content(ExifContent *content, VipsExifParams *params) { exif_content_foreach_entry(content, (ExifContentForeachEntryFunc) vips_exif_attach_entry, params); } static int vips_exif_entry_get_double(ExifData *ed, int ifd, ExifTag tag, double *out) { ExifEntry *entry; if (!(entry = exif_content_get_entry(ed->ifd[ifd], tag)) || entry->components != 1) return -1; return vips_exif_get_double(ed, entry, 0, out); } static int vips_exif_entry_get_int(ExifData *ed, int ifd, ExifTag tag, int *out) { ExifEntry *entry; if (!(entry = exif_content_get_entry(ed->ifd[ifd], tag)) || entry->components != 1) return -1; return vips_exif_get_int(ed, entry, 0, out); } /* Set the image resolution from the EXIF tags. */ static int vips_image_resolution_from_exif(VipsImage *image, ExifData *ed) { double xres, yres; int unit; /* The main image xres/yres are in ifd0. ifd1 has xres/yres of the * image thumbnail, if any. * * Don't warn about missing res fields, it's very common, especially for * things like webp. */ if (vips_exif_entry_get_double(ed, 0, EXIF_TAG_X_RESOLUTION, &xres) || vips_exif_entry_get_double(ed, 0, EXIF_TAG_Y_RESOLUTION, &yres)) return -1; /* resuint is optional and defaults to inch. */ unit = 2; (void) vips_exif_entry_get_int(ed, 0, EXIF_TAG_RESOLUTION_UNIT, &unit); #ifdef DEBUG printf("vips_image_resolution_from_exif: seen exif tags " "xres = %g, yres = %g, unit = %d\n", xres, yres, unit); #endif /*DEBUG*/ switch (unit) { case 1: /* No units, instead xres / yres gives the pixel aspect ratio. */ break; case 2: /* In inches. */ xres /= 25.4; yres /= 25.4; vips_image_set_string(image, VIPS_META_RESOLUTION_UNIT, "in"); break; case 3: /* In cm. */ xres /= 10.0; yres /= 10.0; vips_image_set_string(image, VIPS_META_RESOLUTION_UNIT, "cm"); break; default: g_warning("%s", _("unknown EXIF resolution unit")); return -1; } #ifdef DEBUG printf("vips_image_resolution_from_exif: " "seen exif resolution %g, %g p/mm\n", xres, yres); #endif /*DEBUG*/ /* Don't allow negative resolution. */ image->Xres = VIPS_MAX(0, xres); image->Yres = VIPS_MAX(0, yres); return 0; } /* Need to fwd ref this. */ static int vips_exif_resolution_from_image(ExifData *ed, VipsImage *image); /* Scan the exif block on the image, if any, and make a set of vips metadata * tags for what we find. */ int vips__exif_parse(VipsImage *image) { const void *data; size_t size; ExifData *ed; VipsExifParams params; const char *str; if (!vips_image_get_typeof(image, VIPS_META_EXIF_NAME)) return 0; if (vips_image_get_blob(image, VIPS_META_EXIF_NAME, &data, &size)) return -1; if (!(ed = vips_exif_load_data_without_fix(data, size))) return -1; #ifdef DEBUG_VERBOSE show_tags(ed); show_values(ed); #endif /*DEBUG_VERBOSE*/ /* Look for resolution fields and use them to set the VIPS xres/yres * fields. * * If the fields are missing, set them from the image, which will have * previously had them set from something like JFIF. */ if (vips_image_resolution_from_exif(image, ed) && vips_exif_resolution_from_image(ed, image)) { exif_data_free(ed); return -1; } /* Make sure all required fields are there before we attach the vips * metadata. */ exif_data_fix(ed); /* Attach informational fields for what we find. */ params.image = image; params.ed = ed; exif_data_foreach_content(ed, (ExifDataForeachContentFunc) vips_exif_get_content, ¶ms); vips_image_set_blob_copy(image, "jpeg-thumbnail-data", ed->data, ed->size); exif_data_free(ed); /* Orientation handling. ifd0 has the Orientation tag for the main * image. */ if (vips_image_get_typeof(image, "exif-ifd0-Orientation") != 0 && !vips_image_get_string(image, "exif-ifd0-Orientation", &str)) { int orientation; orientation = atoi(str); if (orientation < 1 || orientation > 8) orientation = 1; vips_image_set_int(image, VIPS_META_ORIENTATION, orientation); } return 0; } static void vips_exif_set_int(ExifData *ed, ExifEntry *entry, unsigned long component, void *data) { int value = *((int *) data); ExifByteOrder bo; size_t sizeof_component; size_t offset = component; if (entry->components <= component) { VIPS_DEBUG_MSG("vips_exif_set_int: too few components\n"); return; } /* Wait until after the component check to make sure we can't get /0. */ bo = exif_data_get_byte_order(ed); sizeof_component = entry->size / entry->components; offset = component * sizeof_component; VIPS_DEBUG_MSG("vips_exif_set_int: %s = %d\n", vips_exif_entry_get_name(entry), value); if (entry->format == EXIF_FORMAT_SHORT) exif_set_short(entry->data + offset, bo, value); else if (entry->format == EXIF_FORMAT_SSHORT) exif_set_sshort(entry->data + offset, bo, value); else if (entry->format == EXIF_FORMAT_LONG) exif_set_long(entry->data + offset, bo, value); else if (entry->format == EXIF_FORMAT_SLONG) exif_set_slong(entry->data + offset, bo, value); } static void vips_exif_double_to_rational(double value, ExifRational *rv) { /* We will usually set factors of 10, so use 1000 as the denominator * and it'll probably be OK. */ rv->numerator = value * 1000; rv->denominator = 1000; } static void vips_exif_double_to_srational(double value, ExifSRational *srv) { /* We will usually set factors of 10, so use 1000 as the denominator * and it'll probably be OK. */ srv->numerator = value * 1000; srv->denominator = 1000; } /* Parse a char * into an ExifRational. We allow floats as well. */ static void vips_exif_parse_rational(const char *str, ExifRational *rv) { if (sscanf(str, " %u / %u ", &rv->numerator, &rv->denominator) == 2) return; vips_exif_double_to_rational(g_ascii_strtod(str, NULL), rv); } /* Parse a char * into an ExifSRational. We allow floats as well. */ static void vips_exif_parse_srational(const char *str, ExifSRational *srv) { if (sscanf(str, " %d / %d ", &srv->numerator, &srv->denominator) == 2) return; vips_exif_double_to_srational(g_ascii_strtod(str, NULL), srv); } /* Does both signed and unsigned rationals from a char *. */ static void vips_exif_set_rational(ExifData *ed, ExifEntry *entry, unsigned long component, void *data) { char *value = (char *) data; ExifByteOrder bo; size_t sizeof_component; size_t offset; if (entry->components <= component) { VIPS_DEBUG_MSG("vips_exif_set_rational: too few components\n"); return; } /* Wait until after the component check to make sure we can't get /0. */ bo = exif_data_get_byte_order(ed); sizeof_component = entry->size / entry->components; offset = component * sizeof_component; VIPS_DEBUG_MSG("vips_exif_set_rational: %s = \"%s\"\n", vips_exif_entry_get_name(entry), value); if (entry->format == EXIF_FORMAT_RATIONAL) { ExifRational rv; vips_exif_parse_rational(value, &rv); VIPS_DEBUG_MSG("vips_exif_set_rational: %u / %u\n", rv.numerator, rv.denominator); exif_set_rational(entry->data + offset, bo, rv); } else if (entry->format == EXIF_FORMAT_SRATIONAL) { ExifSRational srv; vips_exif_parse_srational(value, &srv); VIPS_DEBUG_MSG("vips_exif_set_rational: %d / %d\n", srv.numerator, srv.denominator); exif_set_srational(entry->data + offset, bo, srv); } } /* Does both signed and unsigned rationals from a double*. * * Don't change the exit entry if the value currently there is a good * approximation of the double we are trying to set. */ static void vips_exif_set_double(ExifData *ed, ExifEntry *entry, unsigned long component, void *data) { double value = *((double *) data); ExifByteOrder bo; size_t sizeof_component; size_t offset; double old_value; if (entry->components <= component) { VIPS_DEBUG_MSG("vips_exif_set_double: too few components\n"); return; } /* Wait until after the component check to make sure we can't get /0. */ bo = exif_data_get_byte_order(ed); sizeof_component = entry->size / entry->components; offset = component * sizeof_component; VIPS_DEBUG_MSG("vips_exif_set_double: %s = %g\n", vips_exif_entry_get_name(entry), value); if (entry->format == EXIF_FORMAT_RATIONAL) { ExifRational rv; rv = exif_get_rational(entry->data + offset, bo); if (rv.denominator == 0) old_value = 0; else old_value = (double) rv.numerator / rv.denominator; if (VIPS_FABS(old_value - value) > 0.0001) { vips_exif_double_to_rational(value, &rv); VIPS_DEBUG_MSG("vips_exif_set_double: %u / %u\n", rv.numerator, rv.denominator); exif_set_rational(entry->data + offset, bo, rv); } } else if (entry->format == EXIF_FORMAT_SRATIONAL) { ExifSRational srv; srv = exif_get_srational(entry->data + offset, bo); if (srv.denominator == 0) old_value = 0; else old_value = (double) srv.numerator / srv.denominator; if (VIPS_FABS(old_value - value) > 0.0001) { vips_exif_double_to_srational(value, &srv); VIPS_DEBUG_MSG("vips_exif_set_double: %d / %d\n", srv.numerator, srv.denominator); exif_set_srational(entry->data + offset, bo, srv); } } } typedef void (*write_fn)(ExifData *ed, ExifEntry *entry, unsigned long component, void *data); /* String-valued tags need special treatment, sadly. * * Strings are written in three ways: * * 1. As ASCII, but with an 8-byte preamble giving the encoding (it's always * ASCII though) and the format undefined. * 2. As plain ASCII, with the format giving the encoding. * 3. As UTF16 in the MS tags. */ static gboolean tag_is_encoding(ExifTag tag) { return tag == EXIF_TAG_USER_COMMENT; } static gboolean tag_is_ascii(ExifTag tag) { return tag == EXIF_TAG_MAKE || tag == EXIF_TAG_MODEL || tag == EXIF_TAG_IMAGE_DESCRIPTION || tag == EXIF_TAG_ARTIST || tag == EXIF_TAG_SOFTWARE || tag == EXIF_TAG_COPYRIGHT || tag == EXIF_TAG_DATE_TIME || tag == EXIF_TAG_DATE_TIME_ORIGINAL || tag == EXIF_TAG_DATE_TIME_DIGITIZED || tag == EXIF_TAG_SUB_SEC_TIME || tag == EXIF_TAG_SUB_SEC_TIME_ORIGINAL || tag == EXIF_TAG_SUB_SEC_TIME_DIGITIZED #ifdef HAVE_EXIF_0_6_22 || tag == EXIF_TAG_CAMERA_OWNER_NAME || tag == EXIF_TAG_BODY_SERIAL_NUMBER || tag == EXIF_TAG_LENS_MAKE || tag == EXIF_TAG_LENS_MODEL || tag == EXIF_TAG_LENS_SERIAL_NUMBER #endif #ifdef HAVE_EXIF_0_6_23 || tag == EXIF_TAG_OFFSET_TIME || tag == EXIF_TAG_OFFSET_TIME_ORIGINAL || tag == EXIF_TAG_OFFSET_TIME_DIGITIZED || tag == EXIF_TAG_GPS_LATITUDE_REF || tag == EXIF_TAG_GPS_LONGITUDE_REF || tag == EXIF_TAG_GPS_SATELLITES || tag == EXIF_TAG_GPS_STATUS || tag == EXIF_TAG_GPS_MEASURE_MODE || tag == EXIF_TAG_GPS_SPEED_REF || tag == EXIF_TAG_GPS_TRACK_REF || tag == EXIF_TAG_GPS_IMG_DIRECTION_REF || tag == EXIF_TAG_GPS_MAP_DATUM || tag == EXIF_TAG_GPS_DEST_LATITUDE_REF || tag == EXIF_TAG_GPS_DEST_LONGITUDE_REF || tag == EXIF_TAG_GPS_DEST_BEARING_REF || tag == EXIF_TAG_GPS_DEST_DISTANCE_REF || tag == EXIF_TAG_GPS_DATE_STAMP #endif ; } static gboolean tag_is_utf16(ExifTag tag) { return tag == EXIF_TAG_XP_TITLE || tag == EXIF_TAG_XP_COMMENT || tag == EXIF_TAG_XP_AUTHOR || tag == EXIF_TAG_XP_KEYWORDS || tag == EXIF_TAG_XP_SUBJECT; } /* Set a libexif-formatted string entry. */ static void vips_exif_alloc_string(ExifEntry *entry, unsigned long components) { ExifMem *mem; g_assert(!entry->data); /* The string in the entry must be allocated with the same allocator * that was used to allocate the entry itself. We can't do this * because the allocator is private :( so we must assume the entry was * created with the default one. */ mem = exif_mem_new_default(); /* EXIF_FORMAT_UNDEFINED is correct for EXIF_TAG_USER_COMMENT, our * caller should change this if it wishes. */ entry->data = exif_mem_alloc(mem, components); entry->size = components; entry->components = components; entry->format = EXIF_FORMAT_UNDEFINED; VIPS_FREEF(exif_mem_unref, mem); } /* The final " (xx, yy, zz, kk)" part of the string (if present) was * added by us in _to_s(), we must remove it before setting the string * back again. * * It may not be there if the user has changed the string. */ static char * drop_tail(const char *data) { char *str; char *p; str = g_strdup(data); p = str + strlen(str); if (p > str && *g_utf8_prev_char(p) == ')' && (p = g_utf8_strrchr(str, -1, (gunichar) '(')) && p > str && *(p = g_utf8_prev_char(p)) == ' ') *p = '\0'; return str; } /* special header required for EXIF_TAG_USER_COMMENT. */ #define ASCII_COMMENT "ASCII\0\0\0" /* Write a libvips NULL-terminated utf-8 string into a entry tagged with a * encoding. UserComment is like this, for example. */ static void vips_exif_set_string_encoding(ExifData *ed, ExifEntry *entry, unsigned long component, const char *data) { char *str; char *ascii; int len; str = drop_tail(data); /* libexif can only really save ASCII to things like UserComment. */ ascii = g_str_to_ascii(str, NULL); g_free(str); str = ascii; /* libexif comment strings are not NULL-terminated, and have an * encoding tag (always ASCII) in the first 8 bytes. */ len = strlen(str); vips_exif_alloc_string(entry, sizeof(ASCII_COMMENT) - 1 + len); memcpy(entry->data, ASCII_COMMENT, sizeof(ASCII_COMMENT) - 1); memcpy(entry->data + sizeof(ASCII_COMMENT) - 1, str, len); g_free(str); } /* Write a libvips NULL-terminated utf-8 string into an ASCII entry. Tags like * ImageDescription work like this. */ static void vips_exif_set_string_ascii(ExifData *ed, ExifEntry *entry, unsigned long component, const char *data) { char *str; char *ascii; int len; str = drop_tail(data); /* libexif can only really save ASCII to things like UserComment. */ ascii = g_str_to_ascii(str, NULL); g_free(str); str = ascii; /* ASCII strings are NULL-terminated. */ len = strlen(str); vips_exif_alloc_string(entry, len + 1); memcpy(entry->data, str, len + 1); entry->format = EXIF_FORMAT_ASCII; g_free(str); } /* Write a libvips NULL-terminated utf-8 string into a utf16 entry. */ static void vips_exif_set_string_utf16(ExifData *ed, ExifEntry *entry, unsigned long component, const char *data) { char *str; gunichar2 *utf16; glong len; str = drop_tail(data); utf16 = g_utf8_to_utf16(str, -1, NULL, &len, NULL); /* libexif utf16 strings are NULL-terminated. */ vips_exif_alloc_string(entry, (len + 1) * 2); memcpy(entry->data, utf16, (len + 1) * 2); entry->format = EXIF_FORMAT_BYTE; g_free(utf16); g_free(str); } /* Write a tag. Update what's there, or make a new one. */ static void vips_exif_set_tag(ExifData *ed, int ifd, ExifTag tag, write_fn fn, void *data) { ExifEntry *entry; if ((entry = exif_content_get_entry(ed->ifd[ifd], tag))) { fn(ed, entry, 0, data); } else { entry = exif_entry_new(); /* tag must be set before calling exif_content_add_entry. */ entry->tag = tag; exif_content_add_entry(ed->ifd[ifd], entry); exif_entry_unref(entry); /* libexif makes us have a special path for string-valued * fields :( */ if (tag_is_encoding(tag)) vips_exif_set_string_encoding(ed, entry, 0, data); else if (tag_is_ascii(tag)) vips_exif_set_string_ascii(ed, entry, 0, data); else if (tag_is_utf16(tag)) vips_exif_set_string_utf16(ed, entry, 0, data); else { exif_entry_initialize(entry, tag); fn(ed, entry, 0, data); } } } /* Set the EXIF resolution from the vips xres/yres tags. */ static int vips_exif_resolution_from_image(ExifData *ed, VipsImage *image) { double xres, yres; const char *p; int unit; VIPS_DEBUG_MSG("vips_exif_resolution_from_image: vips res of %g, %g\n", image->Xres, image->Yres); /* Default to inches, more progs support it. */ unit = 2; if (vips_image_get_typeof(image, VIPS_META_RESOLUTION_UNIT) && !vips_image_get_string(image, VIPS_META_RESOLUTION_UNIT, &p)) { if (vips_isprefix("cm", p)) unit = 3; else if (vips_isprefix("none", p)) unit = 1; } switch (unit) { case 1: xres = image->Xres; yres = image->Yres; break; case 2: xres = image->Xres * 25.4; yres = image->Yres * 25.4; break; case 3: xres = image->Xres * 10.0; yres = image->Yres * 10.0; break; default: g_warning("%s", _("unknown EXIF resolution unit")); return 0; } /* Main image xres/yres/unit are in ifd0. ifd1 has the thumbnail * xres/yres/unit. */ vips_exif_set_tag(ed, 0, EXIF_TAG_X_RESOLUTION, vips_exif_set_double, (void *) &xres); vips_exif_set_tag(ed, 0, EXIF_TAG_Y_RESOLUTION, vips_exif_set_double, (void *) &yres); vips_exif_set_tag(ed, 0, EXIF_TAG_RESOLUTION_UNIT, vips_exif_set_int, (void *) &unit); return 0; } /* Exif also tracks image dimensions. */ static int vips_exif_set_dimensions(ExifData *ed, VipsImage *im) { VIPS_DEBUG_MSG("vips_exif_set_dimensions: vips size of %d, %d\n", im->Xsize, im->Ysize); vips_exif_set_tag(ed, 2, EXIF_TAG_PIXEL_X_DIMENSION, vips_exif_set_int, (void *) &im->Xsize); vips_exif_set_tag(ed, 2, EXIF_TAG_PIXEL_Y_DIMENSION, vips_exif_set_int, (void *) &im->Ysize); return 0; } /* And orientation. */ static int vips_exif_set_orientation(ExifData *ed, VipsImage *im) { int orientation; /* We set the tag, even if it's been deleted, since it's a required * field. */ if (!vips_image_get_typeof(im, VIPS_META_ORIENTATION) || vips_image_get_int(im, VIPS_META_ORIENTATION, &orientation)) orientation = 1; VIPS_DEBUG_MSG("set_exif_orientation: %d\n", orientation); vips_exif_set_tag(ed, 0, EXIF_TAG_ORIENTATION, vips_exif_set_int, (void *) &orientation); return 0; } /* And thumbnail. */ static int vips_exif_set_thumbnail(ExifData *ed, VipsImage *im) { /* Delete any old thumbnail data. We should use the exif free func, * but the memory allocator is not exposed by libexif! Hopefully they * are just using free(). * * exif.c makes this assumption too when it tries to update a * thumbnail. */ if (ed->data) { free(ed->data); ed->data = NULL; } ed->size = 0; /* Update EXIF thumbnail from metadata, if any. */ if (vips_image_get_typeof(im, "jpeg-thumbnail-data")) { const void *data; size_t size; if (vips_image_get_blob(im, "jpeg-thumbnail-data", &data, &size)) return -1; /* Again, we should use the exif allocator attached to this * entry, but it is not exposed! */ if (size > 0 && data) { ed->data = malloc(size); memcpy(ed->data, data, size); ed->size = size; } } return 0; } /* Skip any spaces. */ static const char * skip_space(const char *p) { while (p && *p == ' ') p += 1; return p; } /* Skip to the end of this non-space sequence. */ static const char * skip_nonspace(const char *p) { while (p && *p && *p != ' ') p += 1; return p; } /* See also vips_exif_to_s() ... keep in sync. Only the numeric types are * handled here, since they can be updated. For string types, we have to * destroy and recreate, see above. */ static void vips_exif_from_s(ExifData *ed, ExifEntry *entry, const char *value) { unsigned long i; const char *p; int v; if (entry->format == EXIF_FORMAT_SHORT || entry->format == EXIF_FORMAT_SSHORT || entry->format == EXIF_FORMAT_LONG || entry->format == EXIF_FORMAT_SLONG) { if (entry->components >= 10) return; p = value; for (i = 0; i < entry->components; i++) { if (!(p = skip_space(p))) break; v = atof(p); vips_exif_set_int(ed, entry, i, &v); p = skip_nonspace(p); } } else if (entry->format == EXIF_FORMAT_RATIONAL || entry->format == EXIF_FORMAT_SRATIONAL) { if (entry->components >= 10) return; p = value; for (i = 0; i < entry->components; i++) { if (!(p = skip_space(p))) break; vips_exif_set_rational(ed, entry, i, (void *) p); p = skip_nonspace(p); } } } static void vips_exif_set_entry(ExifData *ed, ExifEntry *entry, unsigned long component, void *data) { const char *string = (const char *) data; vips_exif_from_s(ed, entry, string); } static void * vips_exif_image_field(VipsImage *image, const char *field, GValue *value, void *data) { ExifData *ed = (ExifData *) data; const char *string; int ifd; const char *p; ExifTag tag; if (!vips_isprefix("exif-ifd", field)) return NULL; /* value must be a string. */ if (vips_image_get_string(image, field, &string)) { g_warning(_("bad exif meta \"%s\""), field); return NULL; } p = field + strlen("exif-ifd"); ifd = atoi(p); for (; isdigit(*p); p++) ; if (*p != '-') { g_warning(_("bad exif meta \"%s\""), field); return NULL; } /* GPSVersionID is tag 0 (the error return) so we have to * test the name too. */ if (!(tag = exif_tag_from_name(p + 1)) && strcmp(p + 1, "GPSVersionID") != 0) { g_warning(_("bad exif meta \"%s\""), field); return NULL; } vips_exif_set_tag(ed, ifd, tag, vips_exif_set_entry, (void *) string); return NULL; } typedef struct _VipsExifRemove { VipsImage *image; ExifData *ed; ExifContent *content; GSList *to_remove; } VipsExifRemove; static void vips_exif_exif_entry(ExifEntry *entry, VipsExifRemove *ve) { const char *tag_name; char vips_name_txt[256]; VipsBuf vips_name_buf = VIPS_BUF_STATIC(vips_name_txt); const char *vips_name; const char *vips_value; if (!(tag_name = vips_exif_entry_get_name(entry))) return; vips_buf_appendf(&vips_name_buf, "exif-ifd%d-%s", exif_entry_get_ifd(entry), tag_name); vips_name = vips_buf_all(&vips_name_buf); /* Is there a image metadata item for this tag? */ vips_value = NULL; if (vips_image_get_typeof(ve->image, vips_name)) { /* No easy way to return an error code from here, sadly. */ if (vips_image_get_string(ve->image, vips_name, &vips_value)) g_warning(_("bad exif meta \"%s\""), vips_name); } /* Does this field exist on the image? If not, schedule it for * removal. */ if (!vips_value) ve->to_remove = g_slist_prepend(ve->to_remove, entry); /* Orientation is really set from the vips * VIPS_META_ORIENTATION tag. If that's been deleted, we must delete * any matching EXIF tags too. */ if (strcmp(tag_name, "Orientation") == 0 && vips_value) ve->to_remove = g_slist_prepend(ve->to_remove, entry); /* If this is a string tag with a new value, we must also remove it * ready for recreation, see the comment below. */ if (vips_value && (tag_is_encoding(entry->tag) || tag_is_ascii(entry->tag) || tag_is_utf16(entry->tag))) { char value_txt[256]; VipsBuf value = VIPS_BUF_STATIC(value_txt); /* Render the original exif-data value to a string and see * if the user has changed it. If they have, remove it ready * for re-adding. * * Leaving it there prevents it being recreated. */ vips_exif_to_s(ve->ed, entry, &value); if (strcmp(vips_buf_all(&value), vips_value) != 0) ve->to_remove = g_slist_prepend(ve->to_remove, entry); } } static void * vips_exif_exif_remove(ExifEntry *entry, VipsExifRemove *ve, void *b) { #ifdef DEBUG { const char *tag_name; char vips_name_txt[256]; VipsBuf vips_name = VIPS_BUF_STATIC(vips_name_txt); tag_name = vips_exif_entry_get_name(entry); vips_buf_appendf(&vips_name, "exif-ifd%d-%s", exif_entry_get_ifd(entry), tag_name); printf("vips_exif_exif_remove: %s\n", vips_buf_all(&vips_name)); } #endif /*DEBUG*/ exif_content_remove_entry(ve->content, entry); return NULL; } static void vips_exif_exif_content(ExifContent *content, VipsExifRemove *ve) { ve->content = content; ve->to_remove = NULL; exif_content_foreach_entry(content, (ExifContentForeachEntryFunc) vips_exif_exif_entry, ve); vips_slist_map2(ve->to_remove, (VipsSListMap2Fn) vips_exif_exif_remove, ve, NULL); VIPS_FREEF(g_slist_free, ve->to_remove); } static void vips_exif_update(ExifData *ed, VipsImage *image) { VipsExifRemove ve; VIPS_DEBUG_MSG("vips_exif_update: \n"); /* If this exif came from the image (rather than being an exif block we * have made afresh), then any fields which are in the block but not on * the image must have been deliberately removed. Remove them from the * block as well. * * Any string-valued fields (eg. comment etc.) which exist as libvips * metadata tags with changed whose values have changed must also be * removed. * * libexif does not allow you to change string lengths (you must make * new tags) so we have to remove ready to re-add. */ if (vips_image_get_typeof(image, VIPS_META_EXIF_NAME)) { ve.image = image; ve.ed = ed; exif_data_foreach_content(ed, (ExifDataForeachContentFunc) vips_exif_exif_content, &ve); } /* Walk the image and add any exif- that's set in image metadata. */ vips_image_map(image, vips_exif_image_field, ed); } /* Examine the metadata tags on the image and update the EXIF block. */ int vips__exif_update(VipsImage *image) { unsigned char *data; size_t length; unsigned int idl; ExifData *ed; /* Either parse from the embedded EXIF, or if there's none, make * some fresh EXIF we can write the resolution to. */ if (vips_image_get_typeof(image, VIPS_META_EXIF_NAME)) { if (vips_image_get_blob(image, VIPS_META_EXIF_NAME, (void *) &data, &length)) return -1; if (!(ed = vips_exif_load_data_without_fix(data, length))) return -1; } else { ed = exif_data_new(); exif_data_set_option(ed, EXIF_DATA_OPTION_FOLLOW_SPECIFICATION); exif_data_set_data_type(ed, EXIF_DATA_TYPE_COMPRESSED); exif_data_set_byte_order(ed, EXIF_BYTE_ORDER_INTEL); } /* Make sure all required fields are there before we attach the vips * metadata. */ exif_data_fix(ed); /* Update EXIF tags from the image metadata. */ vips_exif_update(ed, image); /* Update EXIF resolution from the vips image header. */ if (vips_exif_resolution_from_image(ed, image)) { exif_data_free(ed); return -1; } /* Update EXIF image dimensions from the vips image header. */ if (vips_exif_set_dimensions(ed, image)) { exif_data_free(ed); return -1; } /* Update EXIF orientation from the vips image header. */ if (vips_exif_set_orientation(ed, image)) { exif_data_free(ed); return -1; } /* Update the thumbnail. */ if (vips_exif_set_thumbnail(ed, image)) { exif_data_free(ed); return -1; } /* Reserialise and write. exif_data_save_data() returns an int for some * reason. */ exif_data_save_data(ed, &data, &idl); if (!idl) { vips_error("exif", "%s", _("error saving EXIF")); exif_data_free(ed); return -1; } length = idl; #ifdef DEBUG printf("vips__exif_update: generated %zd bytes of EXIF\n", length); #endif /*DEBUG*/ vips_image_set_blob(image, VIPS_META_EXIF_NAME, (VipsCallbackFn) vips_area_free_cb, data, length); exif_data_free(ed); return 0; } #else /*!HAVE_EXIF*/ int vips__exif_parse(VipsImage *image) { return 0; } int vips__exif_update(VipsImage *image) { return 0; } #endif /*!HAVE_EXIF*/ libvips-8.15.1/libvips/foreign/fits.c000066400000000000000000000441671454007373500175140ustar00rootroot00000000000000/* Read FITS files with cfitsio * * 26/10/10 * - from matlab.c * 27/10/10 * - oops, forgot to init status in close * 30/11/10 * - set RGB16/GREY16 if appropriate * - allow up to 10 dimensions as long as they are empty * 27/1/11 * - lazy read * 31/1/11 * - read in planes and combine with im_bandjoin() * - read whole tiles with fits_read_subset() when we can * 17/3/11 * - renames, updates etc. ready for adding fits write * - fits write! * 21/3/11 * - read/write metadata as whole records to avoid changing things * - cast input to a supported format * - bandsplit for write * 13/12/11 * - redo as a set of fns ready for wrapping in a new-style class * 23/6/13 * - fix ushort save with values >32k, thanks weaverwb * 4/1/17 * - load to equivalent data type, not raw image data type ... improves * support for BSCALE / BZERO settings * 17/1/17 * - invalidate operation on read error * 26/1/17 aferrero2707 * - use fits_open_diskfile(), not fits_open_file() ... we don't want the * extended filename syntax * 15/4/17 * - skip HDUs with zero dimensions, thanks benepo * 27/10/22 * - band interleave ourselves on read * - don't duplicate metadata * 6/1/23 ewelot * - save mono images as NAXIS=2 * 18/1/23 ewelot * - dedupe header fields */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #ifdef HAVE_CFITSIO #include #include #include #include #include #include #include #include "pforeign.h" /* vips only supports 3 dimensions, but we allow up to MAX_DIMENSIONS as long * as the higher dimensions are all empty. If you change this value, change * fits2vips_get_header() as well. */ #define MAX_DIMENSIONS (10) /* What we track during a cfitsio-file read or write. */ typedef struct { char *filename; VipsImage *image; fitsfile *fptr; int datatype; int naxis; long long int naxes[MAX_DIMENSIONS]; GMutex *lock; /* Lock fits_*() calls with this */ /* One line of pels ready for scatter/gather. */ VipsPel *line; /* All the lines or part lines we've written so we can dedupe * metadata. */ GSList *dedupe; } VipsFits; const char *vips__fits_suffs[] = { ".fits", ".fit", ".fts", NULL }; static void vips_fits_error(int status) { char buf[80]; fits_get_errstatus(status, buf); vips_error("fits", "%s", buf); } /* Shut down. Can be called many times. */ static void vips_fits_close(VipsFits *fits) { VIPS_FREE(fits->filename); VIPS_FREEF(vips_g_mutex_free, fits->lock); VIPS_FREEF(vips_slist_free_all, fits->dedupe); if (fits->fptr) { int status; status = 0; if (fits_close_file(fits->fptr, &status)) vips_fits_error(status); fits->fptr = NULL; } VIPS_FREE(fits->line); } static void vips_fits_close_cb(VipsImage *image, VipsFits *fits) { vips_fits_close(fits); } static VipsFits * vips_fits_new_read(const char *filename, VipsImage *out) { VipsFits *fits; int status; if (!(fits = VIPS_NEW(out, VipsFits))) return NULL; fits->filename = vips_strdup(NULL, filename); fits->image = out; fits->fptr = NULL; fits->lock = NULL; fits->line = NULL; g_signal_connect(out, "close", G_CALLBACK(vips_fits_close_cb), fits); status = 0; if (fits_open_diskfile(&fits->fptr, filename, READONLY, &status)) { vips_error("fits", _("unable to open \"%s\""), filename); vips_fits_error(status); return NULL; } fits->lock = vips_g_mutex_new(); return fits; } /* fits image types -> VIPS band formats. VIPS doesn't have 64-bit int, so no * entry for LONGLONG_IMG (64). */ static int fits2vips_formats[][3] = { { BYTE_IMG, VIPS_FORMAT_UCHAR, TBYTE }, { SHORT_IMG, VIPS_FORMAT_SHORT, TSHORT }, { USHORT_IMG, VIPS_FORMAT_USHORT, TUSHORT }, { LONG_IMG, VIPS_FORMAT_INT, TINT }, { ULONG_IMG, VIPS_FORMAT_UINT, TUINT }, { FLOAT_IMG, VIPS_FORMAT_FLOAT, TFLOAT }, { DOUBLE_IMG, VIPS_FORMAT_DOUBLE, TDOUBLE } }; static int vips_fits_get_header(VipsFits *fits, VipsImage *out) { int status; int bitpix; int width, height, bands; VipsBandFormat format; VipsInterpretation interpretation; int keysexist; int i; status = 0; /* Some FITS images have the first HDU for extra metadata ... skip * forward until we find a header unit we can load as an image. */ for (;;) { if (fits_get_img_paramll(fits->fptr, 10, &bitpix, &fits->naxis, fits->naxes, &status)) { vips_fits_error(status); return -1; } if (fits->naxis > 0) break; if (fits_movrel_hdu(fits->fptr, 1, NULL, &status)) { vips_fits_error(status); vips_error("fits", "%s", _("no HDU found with naxes > 0")); return -1; } } /* cfitsio does automatic conversion from the format stored in * the file to the equivalent type after scale/offset. We need * to allocate a vips image of the equivalent type, not the original * type. */ if (fits_get_img_equivtype(fits->fptr, &bitpix, &status)) { vips_fits_error(status); return -1; } #ifdef VIPS_DEBUG VIPS_DEBUG_MSG("naxis = %d\n", fits->naxis); for (i = 0; i < fits->naxis; i++) VIPS_DEBUG_MSG("%d) %lld\n", i, fits->naxes[i]); VIPS_DEBUG_MSG("fits2vips: bitpix = %d\n", bitpix); #endif /*VIPS_DEBUG*/ height = 1; bands = 1; switch (fits->naxis) { /* If you add more dimensions here, adjust data read below. See also * the definition of MAX_DIMENSIONS above. */ case 10: case 9: case 8: case 7: case 6: case 5: case 4: for (i = fits->naxis; i > 3; i--) if (fits->naxes[i - 1] != 1) { vips_error("fits", "%s", _("dimensions above 3 must be size 1")); return -1; } case 3: bands = fits->naxes[2]; case 2: height = fits->naxes[1]; case 1: width = fits->naxes[0]; break; default: vips_error("fits", _("bad number of axis %d"), fits->naxis); return -1; } /* Get image format. This is the equivalent format, or the format * stored in the file. */ for (i = 0; i < VIPS_NUMBER(fits2vips_formats); i++) if (fits2vips_formats[i][0] == bitpix) break; if (i == VIPS_NUMBER(fits2vips_formats)) { vips_error("fits", _("unsupported bitpix %d\n"), bitpix); return -1; } format = fits2vips_formats[i][1]; fits->datatype = fits2vips_formats[i][2]; if (bands == 1) { if (format == VIPS_FORMAT_USHORT) interpretation = VIPS_INTERPRETATION_GREY16; else interpretation = VIPS_INTERPRETATION_B_W; } else if (bands == 3) { if (format == VIPS_FORMAT_USHORT) interpretation = VIPS_INTERPRETATION_RGB16; else interpretation = VIPS_INTERPRETATION_sRGB; } else interpretation = VIPS_INTERPRETATION_MULTIBAND; vips_image_init_fields(out, width, height, bands, format, VIPS_CODING_NONE, interpretation, 1.0, 1.0); /* We read in lines, so SMALLTILE ends up being too small. */ if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_FATSTRIP, NULL)) return -1; /* We need to be able to hold one scanline of one band for * scatter/gather. */ if (!(fits->line = VIPS_ARRAY(NULL, VIPS_IMAGE_SIZEOF_ELEMENT(out) * out->Xsize, VipsPel))) return -1; /* Read all keys into meta. */ if (fits_get_hdrspace(fits->fptr, &keysexist, NULL, &status)) { vips_fits_error(status); return -1; } for (i = 0; i < keysexist; i++) { char record[81]; char vipsname[100]; if (fits_read_record(fits->fptr, i + 1, record, &status)) { vips_fits_error(status); return -1; } VIPS_DEBUG_MSG("fits2vips: setting meta on vips image:\n"); VIPS_DEBUG_MSG(" record == \"%s\"\n", record); /* FITS lets keys repeat. For example, HISTORY appears many * times, each time with a fresh line of history attached. We * have to include the key index in the vips name we assign. */ vips_snprintf(vipsname, 100, "fits-%d", i); vips_image_set_string(out, vipsname, record); } return 0; } int vips__fits_read_header(const char *filename, VipsImage *out) { VipsFits *fits; VIPS_DEBUG_MSG("fits2vips_header: reading \"%s\"\n", filename); if (!(fits = vips_fits_new_read(filename, out))) return -1; if (vips_fits_get_header(fits, out)) { vips_fits_close(fits); return -1; } vips_fits_close(fits); return 0; } static int vips_fits_read_subset(VipsFits *fits, long *fpixel, long *lpixel, long *inc, VipsPel *q) { int status; /* We must zero this or fits_read_subset() fails. */ status = 0; /* Break on ffgsv() for this call. */ if (fits_read_subset(fits->fptr, fits->datatype, fpixel, lpixel, inc, NULL, q, NULL, &status)) { vips_fits_error(status); vips_foreign_load_invalidate(fits->image); return -1; } return 0; } #define SCATTER(TYPE) \ { \ TYPE *tp = (TYPE *) p; \ TYPE *tq = ((TYPE *) q) + band; \ \ for (int x = 0; x < width; x++) { \ *tq = tp[x]; \ tq += bands; \ } \ } static void vips_fits_scatter(VipsFits *fits, VipsPel *q, VipsPel *p, int width, int band) { int bands = fits->image->Bands; switch (fits->image->BandFmt) { case VIPS_FORMAT_UCHAR: case VIPS_FORMAT_CHAR: SCATTER(guchar); break; case VIPS_FORMAT_SHORT: case VIPS_FORMAT_USHORT: SCATTER(gushort); break; case VIPS_FORMAT_INT: case VIPS_FORMAT_UINT: case VIPS_FORMAT_FLOAT: SCATTER(guint); break; case VIPS_FORMAT_DOUBLE: SCATTER(double); break; default: g_assert_not_reached(); } } static int vips_fits_generate(VipsRegion *out, void *seq, void *a, void *b, gboolean *stop) { VipsFits *fits = (VipsFits *) a; VipsRect *r = &out->valid; VIPS_DEBUG_MSG("fits2vips_generate: " "generating left = %d, top = %d, width = %d, height = %d\n", r->left, r->top, r->width, r->height); vips__worker_lock(fits->lock); for (int w = 0; w < out->im->Bands; w++) { for (int y = r->top; y < VIPS_RECT_BOTTOM(r); y++) { long fpixel[MAX_DIMENSIONS]; long lpixel[MAX_DIMENSIONS]; long inc[MAX_DIMENSIONS]; for (int z = 0; z < MAX_DIMENSIONS; z++) fpixel[z] = 1; fpixel[0] = r->left + 1; fpixel[1] = y + 1; fpixel[2] = w + 1; for (int z = 0; z < MAX_DIMENSIONS; z++) lpixel[z] = 1; lpixel[0] = VIPS_RECT_RIGHT(r); lpixel[1] = y + 1; lpixel[2] = w + 1; for (int z = 0; z < MAX_DIMENSIONS; z++) inc[z] = 1; /* We're inside a lock, so it's OK to write to ->line. */ if (vips_fits_read_subset(fits, fpixel, lpixel, inc, fits->line)) { g_mutex_unlock(fits->lock); return -1; } vips_fits_scatter(fits, VIPS_REGION_ADDR(out, r->left, y), fits->line, r->width, w); } } g_mutex_unlock(fits->lock); return 0; } int vips__fits_read(const char *filename, VipsImage *out) { VipsFits *fits; if (!(fits = vips_fits_new_read(filename, out))) return -1; if (vips_fits_get_header(fits, out) || vips_image_generate(out, NULL, vips_fits_generate, NULL, fits, NULL)) { vips_fits_close(fits); return -1; } return 0; } int vips__fits_isfits(const char *filename) { fitsfile *fptr; int status; VIPS_DEBUG_MSG("isfits: testing \"%s\"\n", filename); status = 0; if (fits_open_diskfile(&fptr, filename, READONLY, &status)) { VIPS_DEBUG_MSG("isfits: error reading \"%s\"\n", filename); #ifdef VIPS_DEBUG vips_fits_error(status); VIPS_DEBUG_MSG("isfits: %s\n", vips_error_buffer()); #endif /*VIPS_DEBUG*/ return 0; } fits_close_file(fptr, &status); return 1; } static VipsFits * vips_fits_new_write(VipsImage *in, const char *filename) { VipsFits *fits; int status; status = 0; if (!(fits = VIPS_NEW(in, VipsFits))) return NULL; fits->filename = vips_strdup(VIPS_OBJECT(in), filename); fits->image = in; fits->fptr = NULL; fits->lock = NULL; fits->line = NULL; g_signal_connect(in, "close", G_CALLBACK(vips_fits_close_cb), fits); if (!(fits->filename = vips_strdup(NULL, filename))) return NULL; /* We need to be able to hold one scanline of one band. */ if (!(fits->line = VIPS_ARRAY(NULL, VIPS_IMAGE_SIZEOF_ELEMENT(in) * in->Xsize, VipsPel))) return NULL; /* fits_create_file() will fail if there's a file of thet name, unless * we put a "!" in front of the filename. This breaks conventions with * the rest of vips, so just unlink explicitly. */ g_unlink(filename); if (fits_create_file(&fits->fptr, filename, &status)) { vips_error("fits", _("unable to write to \"%s\""), filename); vips_fits_error(status); return NULL; } fits->lock = vips_g_mutex_new(); return fits; } /* Header fields which cfitsio 4.1 writes for us start like this. It'll use * BZERO and BSCALE for 16- and 32-bit signed data. */ const char *vips_fits_basic[] = { "SIMPLE ", "BITPIX ", "NAXIS ", "NAXIS1 ", "NAXIS2 ", "NAXIS3 ", "EXTEND ", "BZERO ", "BSCALE ", "COMMENT FITS (Flexible Image Transport System) format", "COMMENT and Astrophysics', volume 376, page 359; bibcode:", // may be present in a multi HDU file, but not allowed in a single HDU // file "XTENSION", "PCOUNT ", "GCOUNT ", }; /* Header fields which can be duplicated start like this. */ const char *vips_fits_duplicate[] = { " ", "COMMENT ", "HISTORY ", "CONTINUE", }; /* Write a line of header text. Lines can be eg.: * * "EXTEND = T / FITS dataset may contain extensions" * "COMMENT FITS (Flexible Image Transport System) format is defined * "" * * - always left justified * - keyword is always 8 characters, right padded with spaces * - "= ", if present, is cols 9 and 10 * - lines are variable length, can be zero length for blank lines */ static int vips_fits_write_record(VipsFits *fits, const char *line) { char keyword[9]; int i; GSList *p; int status; VIPS_DEBUG_MSG("vips_fits_write_record: %s\n", line); /* cfitsio writes lines like these for us, don't write them again. */ for (i = 0; i < VIPS_NUMBER(vips_fits_basic); i++) if (vips_isprefix(vips_fits_basic[i], line)) return 0; /* Dedupe on the keyword, with some exceptions (see below). */ vips_strncpy(keyword, line, 9); for (p = fits->dedupe; p; p = p->next) { const char *written = (const char *) p->data; if (strcmp(keyword, written) == 0) return 0; } status = 0; if (fits_write_record(fits->fptr, line, &status)) { vips_fits_error(status); return -1; } /* Add this keyword to the dedupe list if it's not on the allowed * dupe table, or a blank line. */ if (strcmp(line, "") != 0) { for (i = 0; i < VIPS_NUMBER(vips_fits_duplicate); i++) if (vips_isprefix(vips_fits_duplicate[i], keyword)) break; if (i == VIPS_NUMBER(vips_fits_duplicate)) fits->dedupe = g_slist_prepend(fits->dedupe, g_strdup(keyword)); } return 0; } static void * vips_fits_write_meta(VipsImage *image, const char *field, GValue *value, void *a) { VipsFits *fits = (VipsFits *) a; const char *value_str; /* We want fields which start "fits-". */ if (!vips_isprefix("fits-", field)) return NULL; /* The value should be a refstring, since we wrote it in fits2vips * above ^^. */ value_str = vips_value_get_ref_string(value, NULL); if (vips_fits_write_record(fits, value_str)) return a; return NULL; } static int vips_fits_set_header(VipsFits *fits, VipsImage *in) { int status; int bitpix; int i; status = 0; fits->naxis = in->Bands == 1 ? 2 : 3; fits->naxes[0] = in->Xsize; fits->naxes[1] = in->Ysize; fits->naxes[2] = in->Bands; for (i = 0; i < VIPS_NUMBER(fits2vips_formats); i++) if (fits2vips_formats[i][1] == in->BandFmt) break; if (i == VIPS_NUMBER(fits2vips_formats)) { vips_error("fits", _("unsupported BandFmt %d\n"), in->BandFmt); return -1; } bitpix = fits2vips_formats[i][0]; fits->datatype = fits2vips_formats[i][2]; #ifdef VIPS_DEBUG VIPS_DEBUG_MSG("naxis = %d\n", fits->naxis); for (i = 0; i < fits->naxis; i++) VIPS_DEBUG_MSG("%d) %lld\n", i, fits->naxes[i]); VIPS_DEBUG_MSG("bitpix = %d\n", bitpix); #endif /*VIPS_DEBUG*/ if (fits_create_imgll(fits->fptr, bitpix, fits->naxis, fits->naxes, &status)) { vips_fits_error(status); return -1; } if (vips_image_map(in, (VipsImageMapFn) vips_fits_write_meta, fits)) return -1; return 0; } static int vips_fits_write(VipsRegion *region, VipsRect *area, void *a) { VipsFits *fits = (VipsFits *) a; VipsImage *image = fits->image; int es = VIPS_IMAGE_SIZEOF_ELEMENT(image); int ps = VIPS_IMAGE_SIZEOF_PEL(image); int status; int y, b, x, k; status = 0; VIPS_DEBUG_MSG("vips_fits_write: " "writing left = %d, top = %d, width = %d, height = %d\n", area->left, area->top, area->width, area->height); /* We need to write a band at a time. We can't bandsplit in vips, * since vips_sink_disc() can't loop over many images at once, sadly. */ for (y = 0; y < area->height; y++) { VipsPel *p = VIPS_REGION_ADDR(region, area->left, area->top + y); for (b = 0; b < image->Bands; b++) { VipsPel *p1, *q; long fpixel[3]; p1 = p + b * es; q = fits->line; for (x = 0; x < area->width; x++) { for (k = 0; k < es; k++) q[k] = p1[k]; q += es; p1 += ps; } fpixel[0] = area->left + 1; fpixel[1] = area->top + y + 1; fpixel[2] = b + 1; /* No need to lock, write functions are single-threaded. */ if (fits_write_pix(fits->fptr, fits->datatype, fpixel, area->width, fits->line, &status)) { vips_fits_error(status); return -1; } } } return 0; } int vips__fits_write(VipsImage *in, const char *filename) { VipsFits *fits; VIPS_DEBUG_MSG("vips2fits: writing \"%s\"\n", filename); if (!(fits = vips_fits_new_write(in, filename))) return -1; if (vips_fits_set_header(fits, fits->image) || vips_sink_disc(fits->image, vips_fits_write, fits)) { vips_fits_close(fits); return -1; } vips_fits_close(fits); return 0; } #endif /*HAVE_CFITSIO*/ libvips-8.15.1/libvips/foreign/fitsload.c000066400000000000000000000234621454007373500203470ustar00rootroot00000000000000/* load fits from a file * * 5/12/11 * - from openslideload.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #ifdef HAVE_CFITSIO #include "pforeign.h" typedef struct _VipsForeignLoadFits { VipsForeignLoad parent_object; /* Set by subclasses. */ VipsSource *source; /* Filename from source. */ const char *filename; } VipsForeignLoadFits; typedef VipsForeignLoadClass VipsForeignLoadFitsClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignLoadFits, vips_foreign_load_fits, VIPS_TYPE_FOREIGN_LOAD); static void vips_foreign_load_fits_dispose(GObject *gobject) { VipsForeignLoadFits *fits = (VipsForeignLoadFits *) gobject; VIPS_UNREF(fits->source); G_OBJECT_CLASS(vips_foreign_load_fits_parent_class)->dispose(gobject); } static int vips_foreign_load_fits_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsForeignLoadFits *fits = (VipsForeignLoadFits *) object; /* We can only open sources which have an associated filename, since * the fits library works in terms of filenames. */ if (fits->source) { VipsConnection *connection = VIPS_CONNECTION(fits->source); const char *filename; if (!vips_source_is_file(fits->source) || !(filename = vips_connection_filename(connection))) { vips_error(class->nickname, "%s", _("no filename available")); return -1; } fits->filename = filename; } if (VIPS_OBJECT_CLASS(vips_foreign_load_fits_parent_class)->build(object)) return -1; return 0; } static VipsForeignFlags vips_foreign_load_fits_get_flags_source(VipsSource *source) { return VIPS_FOREIGN_PARTIAL; } static VipsForeignFlags vips_foreign_load_fits_get_flags(VipsForeignLoad *load) { return VIPS_FOREIGN_PARTIAL; } static VipsForeignFlags vips_foreign_load_fits_get_flags_filename(const char *filename) { VipsSource *source; VipsForeignFlags flags; if (!(source = vips_source_new_from_file(filename))) return 0; flags = vips_foreign_load_fits_get_flags_source(source); VIPS_UNREF(source); return flags; } static int vips_foreign_load_fits_header(VipsForeignLoad *load) { VipsForeignLoadFits *fits = (VipsForeignLoadFits *) load; if (vips__fits_read_header(fits->filename, load->out)) return -1; VIPS_SETSTR(load->out->filename, fits->filename); return 0; } static int vips_foreign_load_fits_load(VipsForeignLoad *load) { VipsForeignLoadFits *fits = (VipsForeignLoadFits *) load; VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(fits), 2); t[0] = vips_image_new(); if (vips__fits_read(fits->filename, t[0]) || vips_flip(t[0], &t[1], VIPS_DIRECTION_VERTICAL, NULL) || vips_image_write(t[1], load->real)) return -1; return 0; } static void vips_foreign_load_fits_class_init(VipsForeignLoadFitsClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->dispose = vips_foreign_load_fits_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "fitsload_base"; object_class->description = _("FITS loader base class"); object_class->build = vips_foreign_load_fits_build; /* cfitsio has not been fuzzed, so should not be used with * untrusted input unless you are very careful. */ operation_class->flags |= VIPS_OPERATION_UNTRUSTED; /* is_a() is not that quick ... lower the priority. */ foreign_class->priority = -50; load_class->get_flags_filename = vips_foreign_load_fits_get_flags_filename; load_class->get_flags = vips_foreign_load_fits_get_flags; load_class->is_a = vips__fits_isfits; load_class->header = vips_foreign_load_fits_header; load_class->load = vips_foreign_load_fits_load; } static void vips_foreign_load_fits_init(VipsForeignLoadFits *fits) { } typedef struct _VipsForeignLoadFitsFile { VipsForeignLoadFits parent_object; /* Filename for load. */ char *filename; } VipsForeignLoadFitsFile; typedef VipsForeignLoadFitsClass VipsForeignLoadFitsFileClass; G_DEFINE_TYPE(VipsForeignLoadFitsFile, vips_foreign_load_fits_file, vips_foreign_load_fits_get_type()); static int vips_foreign_load_fits_file_build(VipsObject *object) { VipsForeignLoadFits *fits = (VipsForeignLoadFits *) object; VipsForeignLoadFitsFile *file = (VipsForeignLoadFitsFile *) object; if (file->filename && !(fits->source = vips_source_new_from_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_fits_file_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_load_fits_file_class_init(VipsForeignLoadFitsFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "fitsload"; object_class->description = _("load a FITS image"); object_class->build = vips_foreign_load_fits_file_build; foreign_class->suffs = vips__fits_suffs; load_class->is_a = vips__fits_isfits; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadFitsFile, filename), NULL); } static void vips_foreign_load_fits_file_init(VipsForeignLoadFitsFile *file) { } typedef struct _VipsForeignLoadFitsSource { VipsForeignLoadFits parent_object; /* Load from a source. */ VipsSource *source; } VipsForeignLoadFitsSource; typedef VipsForeignLoadFitsClass VipsForeignLoadFitsSourceClass; G_DEFINE_TYPE(VipsForeignLoadFitsSource, vips_foreign_load_fits_source, vips_foreign_load_fits_get_type()); static int vips_foreign_load_fits_source_build(VipsObject *object) { VipsForeignLoadFits *fits = (VipsForeignLoadFits *) object; VipsForeignLoadFitsSource *source = (VipsForeignLoadFitsSource *) object; if (source->source) { fits->source = source->source; g_object_ref(fits->source); } if (VIPS_OBJECT_CLASS(vips_foreign_load_fits_source_parent_class) ->build(object)) return -1; return 0; } static gboolean vips_foreign_load_fits_source_is_a_source(VipsSource *source) { VipsConnection *connection = VIPS_CONNECTION(source); const char *filename; return vips_source_is_file(source) && (filename = vips_connection_filename(connection)) && vips__fits_isfits(filename); } static void vips_foreign_load_fits_source_class_init( VipsForeignLoadFitsSourceClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "fitsload_source"; object_class->description = _("load FITS from a source"); object_class->build = vips_foreign_load_fits_source_build; operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_fits_source_is_a_source; VIPS_ARG_OBJECT(class, "source", 1, _("Source"), _("Source to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadFitsSource, source), VIPS_TYPE_SOURCE); } static void vips_foreign_load_fits_source_init(VipsForeignLoadFitsSource *fits) { } #endif /*HAVE_CFITSIO*/ /** * vips_fitsload: * @filename: file to load * @out: (out): decompressed image * @...: %NULL-terminated list of optional named arguments * * Read a FITS image file into a VIPS image. * * This operation can read images with up to three dimensions. Any higher * dimensions must be empty. * * It can read 8, 16 and 32-bit integer images, signed and unsigned, float and * double. * * FITS metadata is attached with the "fits-" prefix. * * See also: vips_image_new_from_file(). * * Returns: 0 on success, -1 on error. */ int vips_fitsload(const char *filename, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("fitsload", ap, filename, out); va_end(ap); return result; } /** * vips_fitsload_source: * @source: source to load from * @out: (out): decompressed image * @...: %NULL-terminated list of optional named arguments * * Exactly as vips_fitsload(), but read from a source. * * Returns: 0 on success, -1 on error. */ int vips_fitsload_source(VipsSource *source, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("fitsload_source", ap, source, out); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/fitssave.c000066400000000000000000000107411454007373500203620ustar00rootroot00000000000000/* save to fits * * 2/12/11 * - wrap a class around the fits writer * 2/7/14 * - cache the image before write so we are sequential */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #ifdef HAVE_CFITSIO #include "pforeign.h" typedef struct _VipsForeignSaveFits { VipsForeignSave parent_object; /* Filename for save. */ char *filename; } VipsForeignSaveFits; typedef VipsForeignSaveClass VipsForeignSaveFitsClass; G_DEFINE_TYPE(VipsForeignSaveFits, vips_foreign_save_fits, VIPS_TYPE_FOREIGN_SAVE); static int vips_foreign_save_fits_build(VipsObject *object) { VipsForeignSave *save = (VipsForeignSave *) object; VipsForeignSaveFits *fits = (VipsForeignSaveFits *) object; VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(fits), 2); if (VIPS_OBJECT_CLASS(vips_foreign_save_fits_parent_class)->build(object)) return -1; /* FITS is written bottom-to-top, so we must flip. * * But all vips readers must work top-to-bottom (or vips_copy()'s seq * hint won't work) so we must cache the input image. * * We cache to RAM, but perhaps we should use something like * vips_get_disc_threshold() and copy to a tempfile. */ t[0] = vips_image_new_memory(); if (vips_image_write(save->ready, t[0]) || vips_flip(t[0], &t[1], VIPS_DIRECTION_VERTICAL, NULL) || vips__fits_write(t[1], fits->filename)) return -1; return 0; } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX static VipsBandFormat bandfmt_fits[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, UC, US, US, UI, UI, F, X, D, DX }; static void vips_foreign_save_fits_class_init(VipsForeignSaveFitsClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "fitssave"; object_class->description = _("save image to fits file"); object_class->build = vips_foreign_save_fits_build; /* cfitsio has not been fuzzed, so should not be used with * untrusted input unless you are very careful. */ operation_class->flags |= VIPS_OPERATION_UNTRUSTED; foreign_class->suffs = vips__fits_suffs; save_class->saveable = VIPS_SAVEABLE_ANY; save_class->format_table = bandfmt_fits; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveFits, filename), NULL); } static void vips_foreign_save_fits_init(VipsForeignSaveFits *fits) { } #endif /*HAVE_CFITSIO*/ /** * vips_fitssave: (method) * @in: image to save * @filename: file to write to * @...: %NULL-terminated list of optional named arguments * * Write a VIPS image to a file in FITS format. * * See also: vips_image_write_to_file(). * * Returns: 0 on success, -1 on error. */ int vips_fitssave(VipsImage *in, const char *filename, ...) { va_list ap; int result; va_start(ap, filename); result = vips_call_split("fitssave", ap, in, filename); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/foreign.c000066400000000000000000002607301454007373500201740ustar00rootroot00000000000000/* foreign file formats base class * * 7/2/12 * - add support for sequential reads * 18/6/12 * - flatten alpha with vips_flatten() * 28/5/13 * - auto rshift down to 8 bits during save * 19/1/14 * - pack and unpack rad to scrgb * 18/8/14 * - fix conversion to 16-bit RGB, thanks John * 18/6/15 * - forward progress signals from load * 23/5/16 * - remove max-alpha stuff, this is now automatic * 12/6/17 * - transform cmyk->rgb if there's an embedded profile * 16/6/17 * - add page_height * 1/1/18 * - META_SEQ support moved here * 5/3/18 * - block _start if one start fails, see #893 * 1/4/18 * - drop incompatible ICC profiles before save * 24/7/21 * - add fail_on */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pforeign.h" /** * SECTION: foreign * @short_description: load and save images in a variety of formats * @stability: Stable * @see_also: image * @include: vips/vips.h * @title: VipsForeign * * This set of operations load and save images in a variety of formats. * * # Load and save * * You can load and save from and to files, memory areas, and the libvips IO * abstractions, #VipsSource and #VipsTarget. * * Use vips_foreign_find_load(), vips_foreign_find_load_buffer() and * vips_foreign_find_load_source() to find a loader for an object. Use * vips_foreign_find_save(), vips_foreign_find_save_buffer() and * vips_foreign_find_save_target() to find a saver for a format. You can then * run these operations using vips_call() and friends to perform the load or * save. * * vips_image_write_to_file() and vips_image_new_from_file() and friends use * these functions to automate file load and save. * * You can also invoke the operations directly, for example: * * |[ * vips_tiffsave(my_image, "frank.anything", * "compression", VIPS_FOREIGN_TIFF_COMPRESSION_JPEG, * NULL); * ]| * * # Image metadata * * All loaders attach all image metadata as libvips properties on load. * * You can change metadata with vips_image_set_int() and friends. * * During save, you can use @keep to specify which metadata to retain, * defaults to all, see #VipsForeignKeep. Setting @profile will * automatically keep the ICC profile. * * # Many page images * * By default, libvips will only load the first page of many page or animated * images. Use @page and @n to set the start page and the number of pages to * load. Set @n to -1 to load all pages. * * Many page images are loaded as a tall, thin strip of pages. * * Use vips_image_get_page_height() and vips_image_get_n_pages() to find the * page height and number of pages of a loaded image. * * Use @page_height to set the page height for image save. * * # Alpha save * * Not all image formats support alpha. If you try to save an image with an * alpha channel to a format that does not support it, the alpha will be * automatically flattened out. Use @background (default 0) to set the colour * that alpha should be flattened against. * * # Adding new formats * * To add support for a new file format to vips, simply define a new subclass * of #VipsForeignLoad or #VipsForeignSave. * * If you define a new operation which is a subclass of #VipsForeign, support * for it automatically appears in all VIPS user-interfaces. It will also be * transparently supported by vips_image_new_from_file() and friends. * * ## Writing a new loader * * Add a new loader to VIPS by subclassing #VipsForeignLoad. Subclasses need to * implement at least @header(). * * @header() must set at least the header fields of @out. @load(), if defined, * must load the pixels to @real. * * The suffix list is used to select a format to save a file in, and to pick a * loader if you don't define is_a(). * * You should also define @nickname and @description in #VipsObject. * * As a complete example, here's code for a PNG loader, minus the actual * calls to libpng. * * |[ * typedef struct _VipsForeignLoadPng { * VipsForeignLoad parent_object; * * char *filename; * } VipsForeignLoadPng; * * typedef VipsForeignLoadClass VipsForeignLoadPngClass; * * G_DEFINE_TYPE(VipsForeignLoadPng, vips_foreign_load_png, * VIPS_TYPE_FOREIGN_LOAD); * * static VipsForeignFlags * vips_foreign_load_png_get_flags_filename(const char *filename) * { * VipsForeignFlags flags; * * flags = 0; * if (vips__png_isinterlaced(filename)) * flags = VIPS_FOREIGN_PARTIAL; * else * flags = VIPS_FOREIGN_SEQUENTIAL; * * return flags; * } * * static VipsForeignFlags * vips_foreign_load_png_get_flags(VipsForeignLoad *load) * { * VipsForeignLoadPng *png = (VipsForeignLoadPng *) load; * * return vips_foreign_load_png_get_flags_filename(png->filename); * } * * static int * vips_foreign_load_png_header(VipsForeignLoad *load) * { * VipsForeignLoadPng *png = (VipsForeignLoadPng *) load; * * if (vips__png_header(png->filename, load->out)) * return -1; * * return 0; * } * * static int * vips_foreign_load_png_load(VipsForeignLoad *load) * { * VipsForeignLoadPng *png = (VipsForeignLoadPng *) load; * * if (vips__png_read(png->filename, load->real)) * return -1; * * return 0; * } * * static void * vips_foreign_load_png_class_init(VipsForeignLoadPngClass *class) * { * GObjectClass *gobject_class = G_OBJECT_CLASS(class); * VipsObjectClass *object_class = (VipsObjectClass *) class; * VipsForeignClass *foreign_class = (VipsForeignClass *) class; * VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; * * gobject_class->set_property = vips_object_set_property; * gobject_class->get_property = vips_object_get_property; * * object_class->nickname = "pngload"; * object_class->description = _("load png from file"); * * foreign_class->suffs = vips__png_suffs; * * load_class->is_a = vips__png_ispng; * load_class->get_flags_filename = * vips_foreign_load_png_get_flags_filename; * load_class->get_flags = vips_foreign_load_png_get_flags; * load_class->header = vips_foreign_load_png_header; * load_class->load = vips_foreign_load_png_load; * * VIPS_ARG_STRING(class, "filename", 1, * _("Filename"), * _("Filename to load from"), * VIPS_ARGUMENT_REQUIRED_INPUT, * G_STRUCT_OFFSET(VipsForeignLoadPng, filename), * NULL); * } * * static void * vips_foreign_load_png_init(VipsForeignLoadPng *png) * { * } * ]| * * ## Writing a new saver * * Call your saver in the class' @build() method after chaining up. The * prepared image should be ready for you to save in @ready. * * As a complete example, here's the code for the CSV saver, minus the calls * to the actual save routines. * * |[ * typedef struct _VipsForeignSaveCsv { * VipsForeignSave parent_object; * * char *filename; * const char *separator; * } VipsForeignSaveCsv; * * typedef VipsForeignSaveClass VipsForeignSaveCsvClass; * * G_DEFINE_TYPE(VipsForeignSaveCsv, vips_foreign_save_csv, * VIPS_TYPE_FOREIGN_SAVE); * * static int * vips_foreign_save_csv_build(VipsObject *object) * { * VipsForeignSave *save = (VipsForeignSave *) object; * VipsForeignSaveCsv *csv = (VipsForeignSaveCsv *) object; * * if (VIPS_OBJECT_CLASS(vips_foreign_save_csv_parent_class) * ->build(object)) * return -1; * * if (vips__csv_write(save->ready, csv->filename, csv->separator)) * return -1; * * return 0; * } * * static void * vips_foreign_save_csv_class_init(VipsForeignSaveCsvClass *class) * { * GObjectClass *gobject_class = G_OBJECT_CLASS(class); * VipsObjectClass *object_class = (VipsObjectClass *) class; * VipsForeignClass *foreign_class = (VipsForeignClass *) class; * VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class; * * gobject_class->set_property = vips_object_set_property; * gobject_class->get_property = vips_object_get_property; * * object_class->nickname = "csvsave"; * object_class->description = _("save image to csv file"); * object_class->build = vips_foreign_save_csv_build; * * foreign_class->suffs = vips__foreign_csv_suffs; * * save_class->saveable = VIPS_SAVEABLE_MONO; * // no need to define ->format_table, we don't want the input * // cast for us * * VIPS_ARG_STRING(class, "filename", 1, * _("Filename"), * _("Filename to save to"), * VIPS_ARGUMENT_REQUIRED_INPUT, * G_STRUCT_OFFSET(VipsForeignSaveCsv, filename), * NULL); * * VIPS_ARG_STRING(class, "separator", 13, * _("Separator"), * _("Separator characters"), * VIPS_ARGUMENT_OPTIONAL_INPUT, * G_STRUCT_OFFSET(VipsForeignSaveCsv, separator), * "\t"); * } * * static void * vips_foreign_save_csv_init(VipsForeignSaveCsv *csv) * { * csv->separator = g_strdup("\t"); * } * ]| */ /* Use this to link images to the load operation that made them. */ static GQuark vips__foreign_load_operation = 0; /** * VipsForeignFlags: * @VIPS_FOREIGN_NONE: no flags set * @VIPS_FOREIGN_PARTIAL: the image may be read lazilly * @VIPS_FOREIGN_BIGENDIAN: image pixels are most-significant byte first * @VIPS_FOREIGN_SEQUENTIAL: top-to-bottom lazy reading * * Some hints about the image loader. * * #VIPS_FOREIGN_PARTIAL means that the image can be read directly from the * file without needing to be unpacked to a temporary image first. * * #VIPS_FOREIGN_SEQUENTIAL means that the loader supports lazy reading, but * only top-to-bottom (sequential) access. Formats like PNG can read sets of * scanlines, for example, but only in order. * * If neither PARTIAL or SEQUENTIAL is set, the loader only supports whole * image read. Setting both PARTIAL and SEQUENTIAL is an error. * * #VIPS_FOREIGN_BIGENDIAN means that image pixels are most-significant byte * first. Depending on the native byte order of the host machine, you may * need to swap bytes. See vips_copy(). */ G_DEFINE_ABSTRACT_TYPE(VipsForeign, vips_foreign, VIPS_TYPE_OPERATION); static void vips_foreign_summary_class(VipsObjectClass *object_class, VipsBuf *buf) { VipsForeignClass *class = VIPS_FOREIGN_CLASS(object_class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(object_class); VIPS_OBJECT_CLASS(vips_foreign_parent_class) ->summary_class(object_class, buf); if (class->suffs) { const char **p; vips_buf_appends(buf, " ("); for (p = class->suffs; *p; p++) { vips_buf_appendf(buf, "%s", *p); if (p[1]) vips_buf_appends(buf, ", "); } vips_buf_appends(buf, ")"); } vips_buf_appendf(buf, ", priority=%d", class->priority); if (operation_class->flags & VIPS_OPERATION_UNTRUSTED) vips_buf_appendf(buf, ", untrusted"); if (operation_class->flags & VIPS_OPERATION_BLOCKED) vips_buf_appendf(buf, ", blocked"); } static void vips_foreign_class_init(VipsForeignClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "foreign"; object_class->description = _("load and save image files"); object_class->summary_class = vips_foreign_summary_class; } static void vips_foreign_init(VipsForeign *object) { } /* To iterate over supported files we build a temp list of subclasses of * VipsForeign, sort by priority, iterate, and free. */ static void * file_add_class(VipsForeignClass *class, GSList **files) { VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); // don't consider blocked classes ... we don't want eg. sniffers to run if (operation_class->flags & VIPS_OPERATION_BLOCKED) return NULL; // exclude "rawload" as it has a different API. if (vips_isprefix("rawload", VIPS_OBJECT_CLASS(class)->nickname)) return NULL; /* Append so we don't reverse the list of files. Sort will * not reorder items of equal priority. */ *files = g_slist_append(*files, class); return NULL; } static gint file_compare(VipsForeignClass *a, VipsForeignClass *b, void *user_data) { return b->priority - a->priority; } /** * vips_foreign_map: * @base: base class to search below (eg. "VipsForeignLoad") * @fn: (scope call): function to apply to each #VipsForeignClass * @a: user data * @b: user data * * Apply a function to every #VipsForeignClass that VIPS knows about. Foreigns * are presented to the function in priority order. * * Like all VIPS map functions, if @fn returns %NULL, iteration continues. If * it returns non-%NULL, iteration terminates and that value is returned. The * map function returns %NULL if all calls return %NULL. * * See also: vips_slist_map(). * * Returns: (transfer none): the result of iteration */ void * vips_foreign_map(const char *base, VipsSListMap2Fn fn, void *a, void *b) { GSList *files; void *result; files = NULL; (void) vips_class_map_all(g_type_from_name(base), (VipsClassMapFn) file_add_class, (void *) &files); files = g_slist_sort(files, (GCompareFunc) file_compare); #ifdef DEBUG { GSList *p; printf("vips_foreign_map: search order\n"); for (p = files; p; p = p->next) { VipsForeignClass *class = (VipsForeignClass *) p->data; printf("\t%s\n", VIPS_OBJECT_CLASS(class)->nickname); } } #endif /*DEBUG*/ result = vips_slist_map2(files, fn, a, b); g_slist_free(files); return result; } /* Abstract base class for image load. */ G_DEFINE_ABSTRACT_TYPE(VipsForeignLoad, vips_foreign_load, VIPS_TYPE_FOREIGN); static void vips_foreign_load_dispose(GObject *gobject) { VipsForeignLoad *load = VIPS_FOREIGN_LOAD(gobject); VIPS_UNREF(load->real); G_OBJECT_CLASS(vips_foreign_load_parent_class)->dispose(gobject); } static void vips_foreign_load_summary_class(VipsObjectClass *object_class, VipsBuf *buf) { VipsForeignLoadClass *class = VIPS_FOREIGN_LOAD_CLASS(object_class); VIPS_OBJECT_CLASS(vips_foreign_load_parent_class) ->summary_class(object_class, buf); if (!G_TYPE_IS_ABSTRACT(G_TYPE_FROM_CLASS(class))) { if (class->is_a) vips_buf_appends(buf, ", is_a"); if (class->is_a_buffer) vips_buf_appends(buf, ", is_a_buffer"); if (class->is_a_source) vips_buf_appends(buf, ", is_a_source"); if (class->get_flags) vips_buf_appends(buf, ", get_flags"); if (class->get_flags_filename) vips_buf_appends(buf, ", get_flags_filename"); if (class->header) vips_buf_appends(buf, ", header"); if (class->load) vips_buf_appends(buf, ", load"); /* You can omit ->load(), you must not omit ->header(). */ g_assert(class->header); } } /* Can this VipsForeign open this file? */ static void * vips_foreign_find_load_sub(VipsForeignLoadClass *load_class, const char *filename, void *b) { VipsObjectClass *object_class = VIPS_OBJECT_CLASS(load_class); VipsForeignClass *class = VIPS_FOREIGN_CLASS(load_class); /* Ignore the buffer and source loaders. */ if (vips_ispostfix(object_class->nickname, "_buffer") || vips_ispostfix(object_class->nickname, "_source")) return NULL; #ifdef DEBUG printf("vips_foreign_find_load_sub: %s\n", VIPS_OBJECT_CLASS(class)->nickname); #endif /*DEBUG*/ /* Try to sniff the filetype from the first few bytes, if we can, * otherwise fall back to checking the filename suffix. */ if (load_class->is_a) { if (load_class->is_a(filename)) return load_class; #ifdef DEBUG printf("vips_foreign_find_load_sub: is_a failed\n"); #endif /*DEBUG*/ } else if (class->suffs) { if (vips_filename_suffix_match(filename, class->suffs)) return load_class; } else g_warning("loader %s has no is_a method and no suffix list", object_class->nickname); return NULL; } /** * vips_foreign_find_load: * @filename: file to find a loader for * * Searches for an operation you could use to load @filename. Any trailing * options on @filename are stripped and ignored. * * See also: vips_foreign_find_load_buffer(), vips_image_new_from_file(). * * Returns: the name of an operation on success, %NULL on error */ const char * vips_foreign_find_load(const char *name) { char filename[VIPS_PATH_MAX]; char option_string[VIPS_PATH_MAX]; VipsForeignLoadClass *load_class; vips__filename_split8(name, filename, option_string); /* Very common, so make a better error message for this case. */ if (!vips_existsf("%s", filename)) { vips_error("VipsForeignLoad", _("file \"%s\" does not exist"), name); return NULL; } if (vips_isdirf("%s", filename)) { vips_error("VipsForeignLoad", _("\"%s\" is a directory"), name); return NULL; } if (!(load_class = (VipsForeignLoadClass *) vips_foreign_map( "VipsForeignLoad", (VipsSListMap2Fn) vips_foreign_find_load_sub, (void *) filename, NULL))) { vips_error("VipsForeignLoad", _("\"%s\" is not a known file format"), name); return NULL; } #ifdef DEBUG printf("vips_foreign_find_load: selected %s\n", VIPS_OBJECT_CLASS(load_class)->nickname); #endif /*DEBUG*/ return G_OBJECT_CLASS_NAME(load_class); } /* Kept for compat with earlier version of the vip8 API. Use * vips_image_new_from_file() now. */ int vips_foreign_load(const char *name, VipsImage **out, ...) { char filename[VIPS_PATH_MAX]; char option_string[VIPS_PATH_MAX]; const char *operation_name; va_list ap; int result; vips__filename_split8(name, filename, option_string); if (!(operation_name = vips_foreign_find_load(filename))) return -1; va_start(ap, out); result = vips_call_split_option_string(operation_name, option_string, ap, filename, out); va_end(ap); return result; } /* Can this VipsForeign open this buffer? */ static void * vips_foreign_find_load_buffer_sub(VipsForeignLoadClass *load_class, const void **buf, size_t *len) { VipsObjectClass *object_class = VIPS_OBJECT_CLASS(load_class); /* Skip non-buffer loaders. */ if (!vips_ispostfix(object_class->nickname, "_buffer")) return NULL; if (load_class->is_a_buffer) { if (load_class->is_a_buffer(*buf, *len)) return load_class; } else g_warning("loader %s has no is_a_buffer method", object_class->nickname); return NULL; } /** * vips_foreign_find_load_buffer: * @data: (array length=size) (element-type guint8) (transfer none): start of * memory buffer * @size: (type gsize): number of bytes in @data * * Searches for an operation you could use to load a memory buffer. To see the * range of buffer loaders supported by your vips, try something like: * * vips -l | grep load_buffer * * See also: vips_image_new_from_buffer(). * * Returns: (transfer none): the name of an operation on success, %NULL on * error. */ const char * vips_foreign_find_load_buffer(const void *data, size_t size) { VipsForeignLoadClass *load_class; if (!(load_class = (VipsForeignLoadClass *) vips_foreign_map( "VipsForeignLoad", (VipsSListMap2Fn) vips_foreign_find_load_buffer_sub, &data, &size))) { vips_error("VipsForeignLoad", "%s", _("buffer is not in a known format")); return NULL; } return G_OBJECT_CLASS_NAME(load_class); } /* Can this VipsForeign open this source? */ static void * vips_foreign_find_load_source_sub(void *item, void *a, void *b) { VipsObjectClass *object_class = VIPS_OBJECT_CLASS(item); VipsForeignLoadClass *load_class = VIPS_FOREIGN_LOAD_CLASS(item); VipsSource *source = VIPS_SOURCE(a); /* Skip non-source loaders. */ if (!vips_ispostfix(object_class->nickname, "_source")) return NULL; if (load_class->is_a_source) { /* We may have done a _read() rather than a _sniff() in one of * the is_a testers. Always rewind. */ (void) vips_source_rewind(source); if (load_class->is_a_source(source)) return load_class; } else g_warning("loader %s has no is_a_source method", object_class->nickname); return NULL; } /** * vips_foreign_find_load_source: * @source: source to load from * * Searches for an operation you could use to load a source. To see the * range of source loaders supported by your vips, try something like: * * vips -l | grep load_source * * See also: vips_image_new_from_source(). * * Returns: (transfer none): the name of an operation on success, %NULL on * error. */ const char * vips_foreign_find_load_source(VipsSource *source) { VipsForeignLoadClass *load_class; if (!(load_class = (VipsForeignLoadClass *) vips_foreign_map( "VipsForeignLoad", vips_foreign_find_load_source_sub, source, NULL))) { vips_error("VipsForeignLoad", "%s", _("source is not in a known format")); return NULL; } /* All source loaders should be NOCACHE. */ g_assert(VIPS_OPERATION_CLASS(load_class)->flags & VIPS_OPERATION_NOCACHE); return G_OBJECT_CLASS_NAME(load_class); } /** * vips_foreign_is_a: * @loader: name of loader to use for test * @filename: file to test * * Return %TRUE if @filename can be loaded by @loader. @loader is something * like "tiffload" or "VipsForeignLoadTiff". * * Returns: %TRUE if @filename can be loaded by @loader. */ gboolean vips_foreign_is_a(const char *loader, const char *filename) { const VipsObjectClass *class; VipsForeignLoadClass *load_class; if (!(class = vips_class_find("VipsForeignLoad", loader))) return FALSE; load_class = VIPS_FOREIGN_LOAD_CLASS(class); if (load_class->is_a && load_class->is_a(filename)) return TRUE; return FALSE; } /** * vips_foreign_is_a_buffer: * @loader: name of loader to use for test * @data: (array length=size) (element-type guint8): pointer to the buffer to test * @size: (type gsize): size of the buffer to test * * Return %TRUE if @data can be loaded by @loader. @loader is something * like "tiffload_buffer" or "VipsForeignLoadTiffBuffer". * * Returns: %TRUE if @data can be loaded by @loader. */ gboolean vips_foreign_is_a_buffer(const char *loader, const void *data, size_t size) { const VipsObjectClass *class; VipsForeignLoadClass *load_class; if (!(class = vips_class_find("VipsForeignLoad", loader))) return FALSE; load_class = VIPS_FOREIGN_LOAD_CLASS(class); if (load_class->is_a_buffer && load_class->is_a_buffer(data, size)) return TRUE; return FALSE; } /** * vips_foreign_is_a_source: * @loader: name of loader to use for test * @source: source to test * * Return %TRUE if @source can be loaded by @loader. @loader is something * like "tiffload_source" or "VipsForeignLoadTiffSource". * * Returns: %TRUE if @data can be loaded by @source. */ gboolean vips_foreign_is_a_source(const char *loader, VipsSource *source) { const VipsObjectClass *class; VipsForeignLoadClass *load_class; if (!(class = vips_class_find("VipsForeignLoad", loader))) return FALSE; load_class = VIPS_FOREIGN_LOAD_CLASS(class); if (load_class->is_a_source && load_class->is_a_source(source)) return TRUE; return FALSE; } /** * vips_foreign_flags: * @loader: name of loader to use for test * @filename: file to test * * Return the flags for @filename using @loader. * @loader is something like "tiffload" or "VipsForeignLoadTiff". * * Returns: the flags for @filename. */ VipsForeignFlags vips_foreign_flags(const char *loader, const char *filename) { const VipsObjectClass *class; if ((class = vips_class_find("VipsForeignLoad", loader))) { VipsForeignLoadClass *load_class = VIPS_FOREIGN_LOAD_CLASS(class); if (load_class->get_flags_filename) return load_class->get_flags_filename(filename); } return 0; } static VipsObject * vips_foreign_load_new_from_string(const char *string) { const char *file_op; GType type; VipsForeignLoad *load; if (!(file_op = vips_foreign_find_load(string))) return NULL; type = g_type_from_name(file_op); g_assert(type); load = VIPS_FOREIGN_LOAD(g_object_new(type, NULL)); g_object_set(load, "filename", string, NULL); return VIPS_OBJECT(load); } static VipsImage * vips_foreign_load_temp(VipsForeignLoad *load) { const guint64 disc_threshold = vips_get_disc_threshold(); const guint64 image_size = VIPS_IMAGE_SIZEOF_IMAGE(load->out); /* ->memory used to be called ->disc and default TRUE. If it's been * forced FALSE, set memory TRUE. */ if (!load->disc) load->memory = TRUE; if (load->memory) { #ifdef DEBUG printf("vips_foreign_load_temp: forced memory temp\n"); #endif /*DEBUG*/ return vips_image_new_memory(); } /* If this is a partial operation, we can open directly. */ if (load->flags & VIPS_FOREIGN_PARTIAL) { #ifdef DEBUG printf("vips_foreign_load_temp: partial temp\n"); #endif /*DEBUG*/ return vips_image_new(); } /* If it can do sequential access and it's been requested, we can open * directly. */ if ((load->flags & VIPS_FOREIGN_SEQUENTIAL) && load->access != VIPS_ACCESS_RANDOM) { #ifdef DEBUG printf("vips_foreign_load_temp: partial sequential temp\n"); #endif /*DEBUG*/ return vips_image_new(); } /* We open via disc if the uncompressed image will be larger than * vips_get_disc_threshold() */ if (image_size > disc_threshold) { #ifdef DEBUG printf("vips_foreign_load_temp: disc temp\n"); #endif /*DEBUG*/ return vips_image_new_temp_file("%s.v"); } #ifdef DEBUG printf("vips_foreign_load_temp: fallback memory temp\n"); #endif /*DEBUG*/ /* Otherwise, fall back to a memory buffer. */ return vips_image_new_memory(); } /* Check two images for compatibility: their geometries need to match. */ static gboolean vips_foreign_load_iscompat(VipsImage *a, VipsImage *b) { if (a->Xsize != b->Xsize || a->Ysize != b->Ysize || a->Bands != b->Bands || a->Coding != b->Coding || a->BandFmt != b->BandFmt) { vips_error("VipsForeignLoad", "%s", _("images do not match between header and load")); return FALSE; } return TRUE; } /* Our start function ... do the lazy open, if necessary, and return a region * on the new image. */ static void * vips_foreign_load_start(VipsImage *out, void *a, void *b) { VipsForeignLoad *load = VIPS_FOREIGN_LOAD(b); VipsForeignLoadClass *class = VIPS_FOREIGN_LOAD_GET_CLASS(load); /* If this start has failed before in another thread, we can fail now. */ if (load->error) return NULL; if (!load->real) { if (!(load->real = vips_foreign_load_temp(load))) return NULL; #ifdef DEBUG printf("vips_foreign_load_start: triggering ->load()\n"); #endif /*DEBUG*/ /* Read the image in. This may involve a long computation and * will finish with load->real holding the decompressed image. * * We want our caller to be able to see this computation on * @out, so eval signals on ->real need to appear on ->out. */ load->real->progress_signal = load->out; /* Note the load object on the image. Loaders can use * this to signal invalidate if they hit a load error. See * vips_foreign_load_invalidate() below. */ g_object_set_qdata(G_OBJECT(load->real), vips__foreign_load_operation, load); /* Load the image and check the result. * * ->header() read the header into @out, load will read the * image into @real. They must match exactly in size, bands, * format and coding for the copy to work. * * Some versions of ImageMagick give different results between * Ping and Load for some formats, for example. * * If the load fails, we need to stop */ if (class->load(load) || vips_image_pio_input(load->real) || !vips_foreign_load_iscompat(load->real, out)) { vips_operation_invalidate(VIPS_OPERATION(load)); load->error = TRUE; return NULL; } /* We have to tell vips that out depends on real. We've set * the demand hint below, but not given an input there. */ if (vips_image_pipelinev(load->out, load->out->dhint, load->real, NULL)) return NULL; } return vips_region_new(load->real); } /* Just pointer-copy. */ static int vips_foreign_load_generate(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsRect *r = &out_region->valid; /* Ask for input we need. */ if (vips_region_prepare(ir, r)) return -1; /* Attach output region to that. */ if (vips_region_region(out_region, ir, r, r->left, r->top)) return -1; return 0; } static int vips_foreign_load_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsForeignLoad *load = VIPS_FOREIGN_LOAD(object); VipsForeignLoadClass *fclass = VIPS_FOREIGN_LOAD_GET_CLASS(object); VipsForeignFlags flags; #ifdef DEBUG printf("vips_foreign_load_build:\n"); #endif /*DEBUG*/ flags = 0; if (fclass->get_flags) flags |= fclass->get_flags(load); if ((flags & VIPS_FOREIGN_PARTIAL) && (flags & VIPS_FOREIGN_SEQUENTIAL)) { g_warning("%s", _("VIPS_FOREIGN_PARTIAL and VIPS_FOREIGN_SEQUENTIAL " "both set -- using SEQUENTIAL")); flags ^= VIPS_FOREIGN_PARTIAL; } g_object_set(load, "flags", flags, NULL); /* We must block caching of seq loaders running in seq mode. A seq * loader in random mode is fine, since we'll read to ram or a temp * file. */ if ((load->flags & VIPS_FOREIGN_SEQUENTIAL) && load->access != VIPS_ACCESS_RANDOM) load->nocache = TRUE; /* The deprecated "fail" field sets fail_on warning. */ if (vips_object_argument_isset(object, "fail") && !vips_object_argument_isset(object, "fail_on")) load->fail_on = load->fail ? VIPS_FAIL_ON_WARNING : VIPS_FAIL_ON_NONE; if (VIPS_OBJECT_CLASS(vips_foreign_load_parent_class)->build(object)) return -1; if (load->sequential) g_warning("%s", _("ignoring deprecated \"sequential\" mode -- " "please use \"access\" instead")); g_object_set(object, "out", vips_image_new(), NULL); vips_image_set_string(load->out, VIPS_META_LOADER, class->nickname); #ifdef DEBUG printf("vips_foreign_load_build: triggering ->header()\n"); #endif /*DEBUG*/ /* Read the header into @out. */ if (fclass->header && fclass->header(load)) return -1; /* If there's no ->load() method then the header read has done * everything. Otherwise, it's just set fields and we must also * load pixels. * * Delay the load until the first pixel is requested by doing the work * in the start function of the copy. */ if (fclass->load) { #ifdef DEBUG printf("vips_foreign_load_build: delaying read ...\n"); #endif /*DEBUG*/ /* ->header() should set the dhint. It'll default to the safe * SMALLTILE if header() did not set it. */ if (vips_image_pipelinev(load->out, load->out->dhint, NULL)) return -1; /* Then 'start' creates the real image and 'gen' fetches * pixels for @out from @real on demand. */ if (vips_image_generate(load->out, vips_foreign_load_start, vips_foreign_load_generate, vips_stop_one, NULL, load)) return -1; } /* Tell downstream if seq mode was requested. */ if (load->access != VIPS_ACCESS_RANDOM) vips_image_set_int(load->out, VIPS_META_SEQUENTIAL, 1); return 0; } static VipsOperationFlags vips_foreign_load_operation_get_flags(VipsOperation *operation) { VipsForeignLoad *load = VIPS_FOREIGN_LOAD(operation); VipsOperationFlags flags; flags = VIPS_OPERATION_CLASS(vips_foreign_load_parent_class) ->get_flags(operation); if (load->nocache) flags |= VIPS_OPERATION_NOCACHE; if (load->revalidate) flags |= VIPS_OPERATION_REVALIDATE; return flags; } static void vips_foreign_load_class_init(VipsForeignLoadClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = (VipsOperationClass *) class; gobject_class->dispose = vips_foreign_load_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->build = vips_foreign_load_build; object_class->summary_class = vips_foreign_load_summary_class; object_class->new_from_string = vips_foreign_load_new_from_string; object_class->nickname = "load"; object_class->description = _("loaders"); operation_class->get_flags = vips_foreign_load_operation_get_flags; VIPS_ARG_IMAGE(class, "out", 2, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsForeignLoad, out)); VIPS_ARG_FLAGS(class, "flags", 106, _("Flags"), _("Flags for this file"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsForeignLoad, flags), VIPS_TYPE_FOREIGN_FLAGS, VIPS_FOREIGN_NONE); VIPS_ARG_BOOL(class, "memory", 107, _("Memory"), _("Force open via memory"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoad, memory), FALSE); VIPS_ARG_ENUM(class, "access", 108, _("Access"), _("Required access pattern for this file"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoad, access), VIPS_TYPE_ACCESS, VIPS_ACCESS_RANDOM); VIPS_ARG_ENUM(class, "fail_on", 109, _("Fail on"), _("Error level to fail on"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoad, fail_on), VIPS_TYPE_FAIL_ON, VIPS_FAIL_ON_NONE); VIPS_ARG_BOOL(class, "revalidate", 110, _("Revalidate"), _("Don't use a cached result for this operation"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_NON_HASHABLE, G_STRUCT_OFFSET(VipsForeignLoad, revalidate), FALSE); VIPS_ARG_BOOL(class, "sequential", 111, _("Sequential"), _("Sequential read only"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsForeignLoad, sequential), FALSE); VIPS_ARG_BOOL(class, "fail", 112, _("Fail"), _("Fail on first warning"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsForeignLoad, fail), FALSE); VIPS_ARG_BOOL(class, "disc", 113, _("Disc"), _("Open to disc"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsForeignLoad, disc), TRUE); } static void vips_foreign_load_init(VipsForeignLoad *load) { load->disc = TRUE; load->access = VIPS_ACCESS_RANDOM; load->fail_on = VIPS_FAIL_ON_NONE; } /* * Loaders can call this */ /** * vips_foreign_load_invalidate: (method) * @image: image to invalidate * * Loaders can call this on the image they are making if they see a read error * from the load library. It signals "invalidate" on the load operation and * will cause it to be dropped from cache. * * If we know a file will cause a read error, we don't want to cache the * failing operation, we want to make sure the image will really be opened * again if our caller tries again. For example, a broken file might be * replaced by a working one. */ void vips_foreign_load_invalidate(VipsImage *image) { VipsOperation *operation; #ifdef DEBUG printf("vips_foreign_load_invalidate: %p\n", image); #endif /*DEBUG*/ if ((operation = g_object_get_qdata(G_OBJECT(image), vips__foreign_load_operation))) { vips_operation_invalidate(operation); } } /* Abstract base class for image savers. */ G_DEFINE_ABSTRACT_TYPE(VipsForeignSave, vips_foreign_save, VIPS_TYPE_FOREIGN); static void vips_foreign_save_dispose(GObject *gobject) { VipsForeignSave *save = VIPS_FOREIGN_SAVE(gobject); VIPS_UNREF(save->ready); G_OBJECT_CLASS(vips_foreign_save_parent_class)->dispose(gobject); } static void vips_foreign_save_summary_class(VipsObjectClass *object_class, VipsBuf *buf) { VipsForeignSaveClass *class = VIPS_FOREIGN_SAVE_CLASS(object_class); VIPS_OBJECT_CLASS(vips_foreign_save_parent_class) ->summary_class(object_class, buf); vips_buf_appendf(buf, ", %s", vips_enum_nick(VIPS_TYPE_SAVEABLE, class->saveable)); } static VipsObject * vips_foreign_save_new_from_string(const char *string) { const char *file_op; GType type; VipsForeignSave *save; if (!(file_op = vips_foreign_find_save(string))) return NULL; type = g_type_from_name(file_op); g_assert(type); save = VIPS_FOREIGN_SAVE(g_object_new(type, NULL)); g_object_set(save, "filename", string, NULL); return VIPS_OBJECT(save); } /* Convert an image for saving. */ int vips__foreign_convert_saveable(VipsImage *in, VipsImage **ready, VipsSaveable saveable, VipsBandFormat *format, VipsCoding *coding, VipsArrayDouble *background) { /* in holds a reference to the output of our chain as we build it. */ g_object_ref(in); /* For coded images, can this class save the coding we are in now? * Nothing to do. */ if (in->Coding != VIPS_CODING_NONE && coding[in->Coding]) { *ready = in; return 0; } /* For uncoded images, if this saver supports ANY bands and this * format we have nothing to do. */ if (in->Coding == VIPS_CODING_NONE && saveable == VIPS_SAVEABLE_ANY && format[in->BandFmt] == in->BandFmt) { *ready = in; return 0; } /* Otherwise ... we need to decode and then (possibly) recode at the * end. */ /* If this is an VIPS_CODING_LABQ, we can go straight to RGB. */ if (in->Coding == VIPS_CODING_LABQ) { VipsImage *out; if (vips_LabQ2sRGB(in, &out, NULL)) { g_object_unref(in); return -1; } g_object_unref(in); in = out; } /* If this is an VIPS_CODING_RAD, we unpack to float. This could be * scRGB or XYZ. */ if (in->Coding == VIPS_CODING_RAD) { VipsImage *out; if (vips_rad2float(in, &out, NULL)) { g_object_unref(in); return -1; } g_object_unref(in); in = out; } /* If the saver supports RAD, we need to go to scRGB or XYZ. */ if (coding[VIPS_CODING_RAD]) { if (in->Type != VIPS_INTERPRETATION_scRGB && in->Type != VIPS_INTERPRETATION_XYZ) { VipsImage *out; if (vips_colourspace(in, &out, VIPS_INTERPRETATION_scRGB, NULL)) { g_object_unref(in); return -1; } g_object_unref(in); in = out; } } /* If this image is CMYK and the saver is RGB-only, use lcms to try to * import to XYZ. */ if (in->Type == VIPS_INTERPRETATION_CMYK && in->Bands >= 4 && (saveable == VIPS_SAVEABLE_RGB || saveable == VIPS_SAVEABLE_RGBA || saveable == VIPS_SAVEABLE_RGBA_ONLY)) { VipsImage *out; if (vips_icc_import(in, &out, "pcs", VIPS_PCS_XYZ, "embedded", TRUE, "input_profile", "cmyk", NULL)) { g_object_unref(in); return -1; } g_object_unref(in); in = out; } /* If this is something other than CMYK or RAD, and it's not already * an RGB image, eg. maybe a LAB image, we need to transform * to RGB. */ if (!coding[VIPS_CODING_RAD] && in->Bands >= 3 && in->Type != VIPS_INTERPRETATION_CMYK && in->Type != VIPS_INTERPRETATION_sRGB && in->Type != VIPS_INTERPRETATION_RGB16 && vips_colourspace_issupported(in) && (saveable == VIPS_SAVEABLE_RGB || saveable == VIPS_SAVEABLE_RGBA || saveable == VIPS_SAVEABLE_RGBA_ONLY || saveable == VIPS_SAVEABLE_RGB_CMYK)) { VipsImage *out; VipsInterpretation interpretation; /* Do we make RGB or RGB16? We don't want to squash a 16-bit * RGB down to 8 bits if the saver supports 16. */ if (vips_band_format_is8bit(format[in->BandFmt])) interpretation = VIPS_INTERPRETATION_sRGB; else interpretation = VIPS_INTERPRETATION_RGB16; if (vips_colourspace(in, &out, interpretation, NULL)) { g_object_unref(in); return -1; } g_object_unref(in); in = out; } /* VIPS_SAVEABLE_RGBA_ONLY does not support mono types ... convert * to sRGB. */ if (!coding[VIPS_CODING_RAD] && in->Bands < 3 && saveable == VIPS_SAVEABLE_RGBA_ONLY) { VipsImage *out; VipsInterpretation interpretation; /* Do we make RGB or RGB16? We don't want to squash a 16-bit * RGB down to 8 bits if the saver supports 16. */ if (vips_band_format_is8bit(format[in->BandFmt])) interpretation = VIPS_INTERPRETATION_sRGB; else interpretation = VIPS_INTERPRETATION_RGB16; if (vips_colourspace(in, &out, interpretation, NULL)) { g_object_unref(in); return -1; } g_object_unref(in); in = out; } /* Get the bands right. We must do this after all colourspace * transforms, since they can change the number of bands. */ if (in->Coding == VIPS_CODING_NONE) { /* Do we need to flatten out an alpha channel? There needs to * be an alpha there now, and this writer needs to not support * alpha. */ if ((in->Bands == 2 || (in->Bands == 4 && in->Type != VIPS_INTERPRETATION_CMYK)) && (saveable == VIPS_SAVEABLE_MONO || saveable == VIPS_SAVEABLE_RGB || saveable == VIPS_SAVEABLE_RGB_CMYK)) { VipsImage *out; if (vips_flatten(in, &out, "background", background, NULL)) { g_object_unref(in); return -1; } g_object_unref(in); in = out; } /* Other alpha removal strategies ... just drop the extra * bands. */ else if (in->Bands > 3 && (saveable == VIPS_SAVEABLE_RGB || (saveable == VIPS_SAVEABLE_RGB_CMYK && in->Type != VIPS_INTERPRETATION_CMYK))) { VipsImage *out; /* Don't let 4 bands though unless the image really is * a CMYK. * * Consider a RGBA png being saved as JPG. We can * write CMYK jpg, but we mustn't do that for RGBA * images. */ if (vips_extract_band(in, &out, 0, "n", 3, NULL)) { g_object_unref(in); return -1; } g_object_unref(in); in = out; } else if (in->Bands > 4 && ((saveable == VIPS_SAVEABLE_RGB_CMYK && in->Type == VIPS_INTERPRETATION_CMYK) || saveable == VIPS_SAVEABLE_RGBA || saveable == VIPS_SAVEABLE_RGBA_ONLY)) { VipsImage *out; if (vips_extract_band(in, &out, 0, "n", 4, NULL)) { g_object_unref(in); return -1; } g_object_unref(in); in = out; } else if (in->Bands > 1 && saveable == VIPS_SAVEABLE_MONO) { VipsImage *out; if (vips_extract_band(in, &out, 0, NULL)) { g_object_unref(in); return -1; } g_object_unref(in); in = out; } /* Else we have VIPS_SAVEABLE_ANY and we don't chop bands down. */ } /* Handle the ushort interpretations. * * RGB16 and GREY16 use 0-65535 for black-white. If we have an image * tagged like this, and it has more than 8 bits (we leave crazy uchar * images tagged as RGB16 alone), we'll need to get it ready for the * saver. */ if ((in->Type == VIPS_INTERPRETATION_RGB16 || in->Type == VIPS_INTERPRETATION_GREY16) && !vips_band_format_is8bit(in->BandFmt)) { /* If the saver supports ushort, cast to ushort. It may be * float at the moment, for example. * * If the saver does not support ushort, automatically shift * it down. This is the behaviour we want for saving an RGB16 * image as JPG, for example. */ if (format[VIPS_FORMAT_USHORT] == VIPS_FORMAT_USHORT) { VipsImage *out; if (vips_cast(in, &out, VIPS_FORMAT_USHORT, NULL)) { g_object_unref(in); return -1; } g_object_unref(in); in = out; } else { VipsImage *out; if (vips_rshift_const1(in, &out, 8, NULL)) { g_object_unref(in); return -1; } g_object_unref(in); in = out; /* That could have produced an int image ... make sure * we are now uchar. */ if (vips_cast(in, &out, VIPS_FORMAT_UCHAR, NULL)) { g_object_unref(in); return -1; } g_object_unref(in); in = out; } } /* Cast to the output format. */ { VipsImage *out; if (vips_cast(in, &out, format[in->BandFmt], NULL)) { g_object_unref(in); return -1; } g_object_unref(in); in = out; } /* Does this class want a coded image? Search the coding table for the * first one. */ if (coding[VIPS_CODING_NONE]) { /* Already NONE, nothing to do. */ } else if (coding[VIPS_CODING_LABQ]) { VipsImage *out; if (vips_Lab2LabQ(in, &out, NULL)) { g_object_unref(in); return -1; } g_object_unref(in); in = out; } else if (coding[VIPS_CODING_RAD]) { VipsImage *out; if (vips_float2rad(in, &out, NULL)) { g_object_unref(in); return -1; } g_object_unref(in); in = out; } *ready = in; return 0; } static void * vips_foreign_save_remove_metadata(VipsImage *image, const char *field, GValue *value, void *user_data) { VipsForeignKeep keep = *((VipsForeignKeep *) user_data); // we are only interested in metadata if (!vips_isprefix(field, "png-comment-") && !vips_isprefix(field, "magickprofile-") && strcmp(field, VIPS_META_IMAGEDESCRIPTION) != 0 && !vips_ispostfix(field, "-data")) return NULL; if ((strcmp(field, VIPS_META_EXIF_NAME) == 0 && (keep & VIPS_FOREIGN_KEEP_EXIF)) || (strcmp(field, VIPS_META_XMP_NAME) == 0 && (keep & VIPS_FOREIGN_KEEP_XMP)) || (strcmp(field, VIPS_META_IPTC_NAME) == 0 && (keep & VIPS_FOREIGN_KEEP_IPTC)) || (strcmp(field, VIPS_META_ICC_NAME) == 0 && (keep & VIPS_FOREIGN_KEEP_ICC)) || (keep & VIPS_FOREIGN_KEEP_OTHER)) return NULL; if (!vips_image_remove(image, field)) return image; return NULL; } int vips__foreign_update_metadata(VipsImage *in, VipsForeignKeep keep) { /* Rebuild exif from tags, if we'll be saving it. */ if ((keep & VIPS_FOREIGN_KEEP_EXIF) && vips__exif_update(in)) return -1; /* Remove metadata, if any. */ if (keep != VIPS_FOREIGN_KEEP_ALL && vips_image_map(in, vips_foreign_save_remove_metadata, &keep)) return -1; /* Some format libraries, like libpng, will throw a hard error if the * profile is inappropriate for this image type. With profiles inherited * from a source image, this can happen all the time, so we * want to silently drop the profile in this case. */ if ((keep & VIPS_FOREIGN_KEEP_ICC) && vips_image_get_typeof(in, VIPS_META_ICC_NAME)) { const void *data; size_t length; if (!vips_image_get_blob(in, VIPS_META_ICC_NAME, &data, &length) && !vips_icc_is_compatible_profile(in, data, length) && !vips_image_remove(in, VIPS_META_ICC_NAME)) return -1; } return 0; } static int vips_foreign_save_build(VipsObject *object) { VipsForeignSave *save = VIPS_FOREIGN_SAVE(object); /* The deprecated "strip" field sets "keep" to none. */ if (vips_object_argument_isset(object, "strip") && !vips_object_argument_isset(object, "keep")) save->keep = save->strip ? VIPS_FOREIGN_KEEP_NONE : VIPS_FOREIGN_KEEP_ALL; /* Keep ICC profile by default when a user profile has been set. */ if ((save->keep & VIPS_FOREIGN_KEEP_ICC) == 0 && vips_object_argument_isset(object, "profile")) save->keep |= VIPS_FOREIGN_KEEP_ICC; if (save->in) { VipsForeignSaveClass *class = VIPS_FOREIGN_SAVE_GET_CLASS(save); VipsImage *ready; VipsImage *x; if (vips__foreign_convert_saveable(save->in, &ready, class->saveable, class->format_table, class->coding, save->background)) return -1; /* Updating metadata, need to copy the image. */ if (vips_copy(ready, &x, NULL)) { VIPS_UNREF(ready); return -1; } VIPS_UNREF(ready); ready = x; if (vips__foreign_update_metadata(ready, save->keep)) { VIPS_UNREF(ready); return -1; } if (save->page_height) vips_image_set_int(ready, VIPS_META_PAGE_HEIGHT, save->page_height); VIPS_UNREF(save->ready); save->ready = ready; } if (VIPS_OBJECT_CLASS(vips_foreign_save_parent_class)->build(object)) return -1; return 0; } #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX static VipsBandFormat vips_foreign_save_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, C, US, S, UI, I, F, X, D, DX }; static void vips_foreign_save_class_init(VipsForeignSaveClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = (VipsOperationClass *) class; int i; gobject_class->dispose = vips_foreign_save_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->build = vips_foreign_save_build; object_class->summary_class = vips_foreign_save_summary_class; object_class->new_from_string = vips_foreign_save_new_from_string; object_class->nickname = "save"; object_class->description = _("savers"); /* All savers are sequential by definition. Things like tiled tiff * write and interlaced png write, which are not, add extra caches * on their input. */ operation_class->flags |= VIPS_OPERATION_SEQUENTIAL; /* Must not cache savers. */ operation_class->flags |= VIPS_OPERATION_NOCACHE; /* Default to no coding allowed. */ for (i = 0; i < VIPS_CODING_LAST; i++) class->coding[i] = FALSE; class->coding[VIPS_CODING_NONE] = TRUE; /* Default to no cast on save. */ class->format_table = vips_foreign_save_format_table; VIPS_ARG_IMAGE(class, "in", 0, _("Input"), _("Image to save"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSave, in)); VIPS_ARG_FLAGS(class, "keep", 100, _("Keep"), _("Which metadata to retain"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSave, keep), VIPS_TYPE_FOREIGN_KEEP, VIPS_FOREIGN_KEEP_ALL); VIPS_ARG_BOXED(class, "background", 101, _("Background"), _("Background value"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSave, background), VIPS_TYPE_ARRAY_DOUBLE); VIPS_ARG_INT(class, "page_height", 102, _("Page height"), _("Set page height for multipage save"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSave, page_height), 0, VIPS_MAX_COORD, 0); VIPS_ARG_STRING(class, "profile", 103, _("Profile"), _("Filename of ICC profile to embed"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSave, profile), NULL); VIPS_ARG_BOOL(class, "strip", 104, _("Strip"), _("Strip all metadata from image"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsForeignSave, strip), FALSE); } static void vips_foreign_save_init(VipsForeignSave *save) { save->keep = VIPS_FOREIGN_KEEP_ALL; save->background = vips_array_double_newv(1, 0.0); } /* Can we write this filename with this class? */ static void * vips_foreign_find_save_sub(VipsForeignSaveClass *save_class, const char *filename, void *b) { VipsObjectClass *object_class = VIPS_OBJECT_CLASS(save_class); VipsForeignClass *class = VIPS_FOREIGN_CLASS(save_class); const char **p; /* All savers needs suffs defined since we use the suff to pick the * saver. */ if (!class->suffs) g_warning("no suffix defined for %s", object_class->nickname); /* Skip non-file savers. */ if (vips_ispostfix(object_class->nickname, "_buffer") || vips_ispostfix(object_class->nickname, "_target")) return NULL; /* vips_foreign_find_save() has already removed any options from the * end of the filename, so we can test directly against the suffix. */ for (p = class->suffs; *p; p++) if (vips_iscasepostfix(filename, *p)) return save_class; return NULL; } /** * vips_foreign_find_save: * @filename: name to find a saver for * * Searches for an operation you could use to write to @filename. * Any trailing options on @filename are stripped and ignored. * * See also: vips_foreign_find_save_buffer(), vips_image_write_to_file(). * * Returns: (nullable): the name of an operation on success, %NULL on error */ const char * vips_foreign_find_save(const char *name) { char filename[VIPS_PATH_MAX]; char option_string[VIPS_PATH_MAX]; VipsForeignSaveClass *save_class; vips__filename_split8(name, filename, option_string); if (!(save_class = (VipsForeignSaveClass *) vips_foreign_map( "VipsForeignSave", (VipsSListMap2Fn) vips_foreign_find_save_sub, (void *) filename, NULL))) { vips_error("VipsForeignSave", _("\"%s\" is not a known file format"), name); return NULL; } return G_OBJECT_CLASS_NAME(save_class); } static void * vips_foreign_get_suffixes_count_cb(VipsForeignSaveClass *save_class, void *a, void *b) { VipsForeignClass *foreign_class = VIPS_FOREIGN_CLASS(save_class); int *n_fields = (int *) a; int i; if (foreign_class->suffs) for (i = 0; foreign_class->suffs[i]; i++) *n_fields += 1; return NULL; } static void * vips_foreign_get_suffixes_add_cb(VipsForeignSaveClass *save_class, void *a, void *b) { VipsForeignClass *foreign_class = VIPS_FOREIGN_CLASS(save_class); gchar ***p = (gchar ***) a; int i; if (foreign_class->suffs) for (i = 0; foreign_class->suffs[i]; i++) { **p = g_strdup(foreign_class->suffs[i]); *p += 1; } return NULL; } /** * vips_foreign_get_suffixes: * * Get a %NULL-terminated array listing all the supported suffixes. * * This is not the same as all the supported file types, since libvips * detects image format for load by testing the first few bytes. * * Use vips_foreign_find_load() to detect type for a specific file. * * Free the return result with g_strfreev(). * * Returns: (transfer full) (array): all supported file extensions, as a * %NULL-terminated array. */ gchar ** vips_foreign_get_suffixes(void) { int n_suffs; gchar **suffs; gchar **p; n_suffs = 0; (void) vips_foreign_map( "VipsForeignSave", (VipsSListMap2Fn) vips_foreign_get_suffixes_count_cb, &n_suffs, NULL); suffs = g_new0(gchar *, n_suffs + 1); p = suffs; (void) vips_foreign_map( "VipsForeignSave", (VipsSListMap2Fn) vips_foreign_get_suffixes_add_cb, &p, NULL); return suffs; } /* Kept for early vips8 API compat. */ int vips_foreign_save(VipsImage *in, const char *name, ...) { char filename[VIPS_PATH_MAX]; char option_string[VIPS_PATH_MAX]; const char *operation_name; va_list ap; int result; vips__filename_split8(name, filename, option_string); if (!(operation_name = vips_foreign_find_save(filename))) return -1; va_start(ap, name); result = vips_call_split_option_string(operation_name, option_string, ap, in, filename); va_end(ap); return result; } /* Can this class write this filetype to a target? */ static void * vips_foreign_find_save_target_sub(VipsForeignSaveClass *save_class, const char *suffix, void *b) { VipsObjectClass *object_class = VIPS_OBJECT_CLASS(save_class); VipsForeignClass *class = VIPS_FOREIGN_CLASS(save_class); /* All concrete savers needs suffs, since we use the suff to pick the * saver. */ if (!G_TYPE_IS_ABSTRACT(G_TYPE_FROM_CLASS(class)) && !class->suffs) g_warning("no suffix defined for %s", object_class->nickname); if (!G_TYPE_IS_ABSTRACT(G_TYPE_FROM_CLASS(class)) && class->suffs && vips_ispostfix(object_class->nickname, "_target") && vips_filename_suffix_match(suffix, class->suffs)) return save_class; return NULL; } /** * vips_foreign_find_save_target: * @suffix: format to find a saver for * * Searches for an operation you could use to write to a target in @suffix * format. * * See also: vips_image_write_to_buffer(). * * Returns: (nullable): the name of an operation on success, %NULL on error */ const char * vips_foreign_find_save_target(const char *name) { char suffix[VIPS_PATH_MAX]; char option_string[VIPS_PATH_MAX]; VipsForeignSaveClass *save_class; vips__filename_split8(name, suffix, option_string); if (!(save_class = (VipsForeignSaveClass *) vips_foreign_map( "VipsForeignSave", (VipsSListMap2Fn) vips_foreign_find_save_target_sub, (void *) suffix, NULL))) { vips_error("VipsForeignSave", _("\"%s\" is not a known target format"), name); return NULL; } return G_OBJECT_CLASS_NAME(save_class); } /* Can we write this buffer with this file type? */ static void * vips_foreign_find_save_buffer_sub(VipsForeignSaveClass *save_class, const char *suffix, void *b) { VipsObjectClass *object_class = VIPS_OBJECT_CLASS(save_class); VipsForeignClass *class = VIPS_FOREIGN_CLASS(save_class); /* All concrete savers needs suffs, since we use the suff to pick the * saver. */ if (!G_TYPE_IS_ABSTRACT(G_TYPE_FROM_CLASS(class)) && !class->suffs) g_warning("no suffix defined for %s", object_class->nickname); if (!G_TYPE_IS_ABSTRACT(G_TYPE_FROM_CLASS(class)) && class->suffs && vips_ispostfix(object_class->nickname, "_buffer") && vips_filename_suffix_match(suffix, class->suffs)) return save_class; return NULL; } /** * vips_foreign_find_save_buffer: * @suffix: name to find a saver for * * Searches for an operation you could use to write to a buffer in @suffix * format. * * See also: vips_image_write_to_buffer(). * * Returns: (nullable): the name of an operation on success, %NULL on error */ const char * vips_foreign_find_save_buffer(const char *name) { char suffix[VIPS_PATH_MAX]; char option_string[VIPS_PATH_MAX]; VipsForeignSaveClass *save_class; vips__filename_split8(name, suffix, option_string); if (!(save_class = (VipsForeignSaveClass *) vips_foreign_map( "VipsForeignSave", (VipsSListMap2Fn) vips_foreign_find_save_buffer_sub, (void *) suffix, NULL))) { vips_error("VipsForeignSave", _("\"%s\" is not a known buffer format"), name); return NULL; } return G_OBJECT_CLASS_NAME(save_class); } /* C API wrappers for loadable modules go here. */ /** * vips_heifload: * @filename: file to load * @out: (out): decompressed image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @page: %gint, page (top-level image number) to read * * @n: %gint, load this many pages * * @thumbnail: %gboolean, fetch thumbnail instead of image * * @unlimited: %gboolean, remove all denial of service limits * * Read a HEIF image file into a VIPS image. * * Use @page to select a page to render, numbering from zero. If neither @n * nor @page are set, @page defaults to the primary page, otherwise to 0. * * Use @n to select the number of pages to render. The default is 1. Pages are * rendered in a vertical column. Set to -1 to mean "until the end of the * document". Use vips_grid() to reorganise pages. * * HEIF images have a primary image. The metadata item `heif-primary` gives * the page number of the primary. * * If @thumbnail is %TRUE, then fetch a stored thumbnail rather than the * image. * * By default, input image dimensions are limited to 16384x16384. * If @unlimited is %TRUE, this increases to the maximum of 65535x65535. * * The bitdepth of the heic image is recorded in the metadata item * `heif-bitdepth`. * * See also: vips_image_new_from_file(). * * Returns: 0 on success, -1 on error. */ int vips_heifload(const char *filename, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("heifload", ap, filename, out); va_end(ap); return result; } /** * vips_heifload_buffer: * @buf: (array length=len) (element-type guint8): memory area to load * @len: (type gsize): size of memory area * @out: (out): image to write * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @page: %gint, page (top-level image number) to read * * @n: %gint, load this many pages * * @thumbnail: %gboolean, fetch thumbnail instead of image * * @unlimited: %gboolean, remove all denial of service limits * * Read a HEIF image file into a VIPS image. * Exactly as vips_heifload(), but read from a memory buffer. * * You must not free the buffer while @out is active. The * #VipsObject::postclose signal on @out is a good place to free. * * See also: vips_heifload(). * * Returns: 0 on success, -1 on error. */ int vips_heifload_buffer(void *buf, size_t len, VipsImage **out, ...) { va_list ap; VipsBlob *blob; int result; /* We don't take a copy of the data or free it. */ blob = vips_blob_new(NULL, buf, len); va_start(ap, out); result = vips_call_split("heifload_buffer", ap, blob, out); va_end(ap); vips_area_unref(VIPS_AREA(blob)); return result; } /** * vips_heifload_source: * @source: source to load from * @out: (out): image to write * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @page: %gint, page (top-level image number) to read * * @n: %gint, load this many pages * * @thumbnail: %gboolean, fetch thumbnail instead of image * * @unlimited: %gboolean, remove all denial of service limits * * Exactly as vips_heifload(), but read from a source. * * See also: vips_heifload(). * * Returns: 0 on success, -1 on error. */ int vips_heifload_source(VipsSource *source, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("heifload_source", ap, source, out); va_end(ap); return result; } /** * vips_heifsave: (method) * @in: image to save * @filename: file to write to * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @Q: %gint, quality factor * * @bitdepth: %gint, set write bit depth to 8, 10, or 12 bits * * @lossless: %gboolean, enable lossless encoding * * @compression: #VipsForeignHeifCompression, write with this compression * * @effort: %gint, encoding effort * * @subsample_mode: #VipsForeignSubsample, chroma subsampling mode * * @encoder: #VipsForeignHeifEncoder, select encoder to use * * Write a VIPS image to a file in HEIF format. * * Use @Q to set the compression factor. Default 50, which seems to be roughly * what the iphone uses. Q 30 gives about the same quality as JPEG Q 75. * * Set @lossless %TRUE to switch to lossless compression. * * Use @compression to set the compression format e.g. HEVC, AVC, AV1 to use. It defaults to AV1 * if the target filename ends with ".avif", otherwise HEVC. * * Use @effort to control the CPU effort spent improving compression. * This is currently only applicable to AV1 encoders. Defaults to 4, 0 is * fastest, 9 is slowest. * * Chroma subsampling is normally automatically disabled for Q >= 90. You can * force the subsampling mode with @subsample_mode. * * Use @bitdepth to set the bitdepth of the output file. HEIC supports at * least 8, 10 and 12 bits; other codecs may support more or fewer options. * * Use @encoder to set the encode library to use, e.g. aom, SVT-AV1, rav1e etc. * * See also: vips_image_write_to_file(), vips_heifload(). * * Returns: 0 on success, -1 on error. */ int vips_heifsave(VipsImage *in, const char *filename, ...) { va_list ap; int result; va_start(ap, filename); result = vips_call_split("heifsave", ap, in, filename); va_end(ap); return result; } /** * vips_heifsave_buffer: (method) * @in: image to save * @buf: (array length=len) (element-type guint8): return output buffer here * @len: (type gsize): return output length here * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @Q: %gint, quality factor * * @bitdepth: %gint, set write bit depth to 8, 10, or 12 bits * * @lossless: %gboolean, enable lossless encoding * * @compression: #VipsForeignHeifCompression, write with this compression * * @effort: %gint, encoding effort * * @subsample_mode: #VipsForeignSubsample, chroma subsampling mode * * @encoder: #VipsForeignHeifEncoder, select encoder to use * * As vips_heifsave(), but save to a memory buffer. * * The address of the buffer is returned in @obuf, the length of the buffer in * @olen. You are responsible for freeing the buffer with g_free() when you * are done with it. * * See also: vips_heifsave(), vips_image_write_to_file(). * * Returns: 0 on success, -1 on error. */ int vips_heifsave_buffer(VipsImage *in, void **buf, size_t *len, ...) { va_list ap; VipsArea *area; int result; area = NULL; va_start(ap, len); result = vips_call_split("heifsave_buffer", ap, in, &area); va_end(ap); if (!result && area) { if (buf) { *buf = area->data; area->free_fn = NULL; } if (len) *len = area->length; vips_area_unref(area); } return result; } /** * vips_heifsave_target: (method) * @in: image to save * @target: save image to this target * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @Q: %gint, quality factor * * @bitdepth: %gint, set write bit depth to 8, 10, or 12 bits * * @lossless: %gboolean, enable lossless encoding * * @compression: #VipsForeignHeifCompression, write with this compression * * @effort: %gint, encoding effort * * @subsample_mode: #VipsForeignSubsample, chroma subsampling mode * * @encoder: #VipsForeignHeifEncoder, select encoder to use * * As vips_heifsave(), but save to a target. * * See also: vips_heifsave(), vips_image_write_to_target(). * * Returns: 0 on success, -1 on error. */ int vips_heifsave_target(VipsImage *in, VipsTarget *target, ...) { va_list ap; int result; va_start(ap, target); result = vips_call_split("heifsave_target", ap, in, target); va_end(ap); return result; } /** * vips_jxlload: * @filename: file to load * @out: (out): decompressed image * @...: %NULL-terminated list of optional named arguments * * Read a JPEG-XL image. * * The JPEG-XL loader and saver are experimental features and may change * in future libvips versions. * * See also: vips_image_new_from_file(). * * Returns: 0 on success, -1 on error. */ int vips_jxlload(const char *filename, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("jxlload", ap, filename, out); va_end(ap); return result; } /** * vips_jxlload_buffer: * @buf: (array length=len) (element-type guint8): memory area to load * @len: (type gsize): size of memory area * @out: (out): image to write * @...: %NULL-terminated list of optional named arguments * * Exactly as vips_jxlload(), but read from a buffer. * * Returns: 0 on success, -1 on error. */ int vips_jxlload_buffer(void *buf, size_t len, VipsImage **out, ...) { va_list ap; VipsBlob *blob; int result; /* We don't take a copy of the data or free it. */ blob = vips_blob_new(NULL, buf, len); va_start(ap, out); result = vips_call_split("jxlload_buffer", ap, blob, out); va_end(ap); vips_area_unref(VIPS_AREA(blob)); return result; } /** * vips_jxlload_source: * @source: source to load from * @out: (out): decompressed image * @...: %NULL-terminated list of optional named arguments * * Exactly as vips_jxlload(), but read from a source. * * Returns: 0 on success, -1 on error. */ int vips_jxlload_source(VipsSource *source, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("jxlload_source", ap, source, out); va_end(ap); return result; } /** * vips_jxlsave: (method) * @in: image to save * @filename: file to write to * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @tier: %gint, decode speed tier * * @distance: %gdouble, maximum encoding error * * @effort: %gint, encoding effort * * @lossless: %gboolean, enables lossless compression * * @Q: %gint, quality setting * * Write a VIPS image to a file in JPEG-XL format. * * The JPEG-XL loader and saver are experimental features and may change * in future libvips versions. * * @tier sets the overall decode speed the encoder will target. Minimum is 0 * (highest quality), and maximum is 4 (lowest quality). Default is 0. * * @distance sets the target maximum encoding error. Minimum is 0 * (highest quality), and maximum is 15 (lowest quality). Default is 1.0 * (visually lossless). * * As a convenience, you can also use @Q to set @distance. @Q uses * approximately the same scale as regular JPEG. * * Set @lossless to enable lossless compression. * * Returns: 0 on success, -1 on error. */ int vips_jxlsave(VipsImage *in, const char *filename, ...) { va_list ap; int result; va_start(ap, filename); result = vips_call_split("jxlsave", ap, in, filename); va_end(ap); return result; } /** * vips_jxlsave_buffer: (method) * @in: image to save * @buf: (array length=len) (element-type guint8): return output buffer here * @len: (type gsize): return output length here * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @tier: %gint, decode speed tier * * @distance: %gdouble, maximum encoding error * * @effort: %gint, encoding effort * * @lossless: %gboolean, enables lossless compression * * @Q: %gint, quality setting * * As vips_jxlsave(), but save to a memory buffer. * * See also: vips_jxlsave(), vips_image_write_to_target(). * * Returns: 0 on success, -1 on error. */ int vips_jxlsave_buffer(VipsImage *in, void **buf, size_t *len, ...) { va_list ap; VipsArea *area; int result; area = NULL; va_start(ap, len); result = vips_call_split("jxlsave_buffer", ap, in, &area); va_end(ap); if (!result && area) { if (buf) { *buf = area->data; area->free_fn = NULL; } if (len) *len = area->length; vips_area_unref(area); } return result; } /** * vips_jxlsave_target: (method) * @in: image to save * @target: save image to this target * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @tier: %gint, decode speed tier * * @distance: %gdouble, maximum encoding error * * @effort: %gint, encoding effort * * @lossless: %gboolean, enables lossless compression * * @Q: %gint, quality setting * * As vips_jxlsave(), but save to a target. * * See also: vips_jxlsave(), vips_image_write_to_target(). * * Returns: 0 on success, -1 on error. */ int vips_jxlsave_target(VipsImage *in, VipsTarget *target, ...) { va_list ap; int result; va_start(ap, target); result = vips_call_split("jxlsave_target", ap, in, target); va_end(ap); return result; } /** * vips_pdfload: * @filename: file to load * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @page: %gint, load this page, numbered from zero * * @n: %gint, load this many pages * * @dpi: %gdouble, render at this DPI * * @scale: %gdouble, scale render by this factor * * @background: #VipsArrayDouble background colour * * @password: %gchararray background colour * * Render a PDF file into a VIPS image. * * The output image is always RGBA --- CMYK PDFs will be * converted. If you need CMYK bitmaps, you should use vips_magickload() * instead. * * Use @page to select a page to render, numbering from zero. * * Use @n to select the number of pages to render. The default is 1. Pages are * rendered in a vertical column, with each individual page aligned to the * left. Set to -1 to mean "until the end of the document". Use vips_grid() * to change page layout. * * Use @dpi to set the rendering resolution. The default is 72. Additionally, * you can scale by setting @scale. If you set both, they combine. * * Use @background to set the background RGBA colour. The default is 255 * (solid white), use eg. 0 for a transparent background. * * Use @password to supply a decryption password. * * The operation fills a number of header fields with metadata, for example * "pdf-author". They may be useful. * * This function only reads the image header and does not render any pixel * data. Rendering occurs when pixels are accessed. * * See also: vips_image_new_from_file(), vips_magickload(). * * Returns: 0 on success, -1 on error. */ int vips_pdfload(const char *filename, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("pdfload", ap, filename, out); va_end(ap); return result; } /** * vips_pdfload_buffer: * @buf: (array length=len) (element-type guint8): memory area to load * @len: (type gsize): size of memory area * @out: (out): image to write * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @page: %gint, load this page, numbered from zero * * @n: %gint, load this many pages * * @dpi: %gdouble, render at this DPI * * @scale: %gdouble, scale render by this factor * * @background: #VipsArrayDouble background colour * * Read a PDF-formatted memory buffer into a VIPS image. Exactly as * vips_pdfload(), but read from memory. * * You must not free the buffer while @out is active. The * #VipsObject::postclose signal on @out is a good place to free. * * See also: vips_pdfload(). * * Returns: 0 on success, -1 on error. */ int vips_pdfload_buffer(void *buf, size_t len, VipsImage **out, ...) { va_list ap; VipsBlob *blob; int result; /* We don't take a copy of the data or free it. */ blob = vips_blob_new(NULL, buf, len); va_start(ap, out); result = vips_call_split("pdfload_buffer", ap, blob, out); va_end(ap); vips_area_unref(VIPS_AREA(blob)); return result; } /** * vips_pdfload_source: * @source: source to load from * @out: (out): image to write * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @page: %gint, load this page, numbered from zero * * @n: %gint, load this many pages * * @dpi: %gdouble, render at this DPI * * @scale: %gdouble, scale render by this factor * * @background: #VipsArrayDouble background colour * * Exactly as vips_pdfload(), but read from a source. * * See also: vips_pdfload() * * Returns: 0 on success, -1 on error. */ int vips_pdfload_source(VipsSource *source, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("pdfload_source", ap, source, out); va_end(ap); return result; } /** * vips_openslideload: * @filename: file to load * @out: (out): decompressed image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @level: %gint, load this level * * @associated: %gchararray, load this associated image * * @attach_associated: %gboolean, attach all associated images as metadata * * @autocrop: %gboolean, crop to image bounds * * @rgb: %gboolean, output RGB (not RGBA) pixels * * Read a virtual slide supported by the OpenSlide library into a VIPS image. * OpenSlide supports images in Aperio, Hamamatsu, MIRAX, Sakura, Trestle, * and Ventana formats. * * To facilitate zooming, virtual slide formats include multiple scaled-down * versions of the high-resolution image. These are typically called * "levels". By default, vips_openslideload() reads the highest-resolution * level (level 0). Set @level to the level number you want. * * In addition to the slide image itself, virtual slide formats sometimes * include additional images, such as a scan of the slide's barcode. * OpenSlide calls these "associated images". To read an associated image, * set @associated to the image's name. * A slide's associated images are listed in the * "slide-associated-images" metadata item. * * If you set @attach_associated, then all associated images are attached as * metadata items. Use vips_image_get_image() on @out to retrieve them. Images * are attached as "openslide-associated-XXXXX", where XXXXX is the name of the * associated image. * * By default, the output of this operator is RGBA. Set @rgb to enable RGB * output. * * See also: vips_image_new_from_file(). * * Returns: 0 on success, -1 on error. */ int vips_openslideload(const char *filename, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("openslideload", ap, filename, out); va_end(ap); return result; } /** * vips_openslideload_source: * @source: source to load from * @out: (out): decompressed image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @level: %gint, load this level * * @associated: %gchararray, load this associated image * * @attach_associated: %gboolean, attach all associated images as metadata * * @autocrop: %gboolean, crop to image bounds * * @rgb: %gboolean, output RGB (not RGBA) pixels * * Exactly as vips_openslideload(), but read from a source. * * Returns: 0 on success, -1 on error. */ int vips_openslideload_source(VipsSource *source, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("openslideload_source", ap, source, out); va_end(ap); return result; } /* Called from iofuncs to init all operations in this dir. Use a plugin system * instead? */ void vips_foreign_operation_init(void) { extern GType vips_foreign_load_rad_file_get_type(void); extern GType vips_foreign_load_rad_buffer_get_type(void); extern GType vips_foreign_load_rad_source_get_type(void); extern GType vips_foreign_save_rad_file_get_type(void); extern GType vips_foreign_save_rad_buffer_get_type(void); extern GType vips_foreign_save_rad_target_get_type(void); extern GType vips_foreign_load_mat_get_type(void); extern GType vips_foreign_load_ppm_file_get_type(void); extern GType vips_foreign_load_ppm_source_get_type(void); extern GType vips_foreign_save_ppm_file_get_type(void); extern GType vips_foreign_save_pbm_target_get_type(void); extern GType vips_foreign_save_pgm_target_get_type(void); extern GType vips_foreign_save_ppm_target_get_type(void); extern GType vips_foreign_save_pfm_target_get_type(void); extern GType vips_foreign_save_pnm_target_get_type(void); extern GType vips_foreign_load_png_file_get_type(void); extern GType vips_foreign_load_png_buffer_get_type(void); extern GType vips_foreign_load_png_source_get_type(void); extern GType vips_foreign_save_png_file_get_type(void); extern GType vips_foreign_save_png_buffer_get_type(void); extern GType vips_foreign_save_png_target_get_type(void); extern GType vips_foreign_save_spng_file_get_type(void); extern GType vips_foreign_save_spng_buffer_get_type(void); extern GType vips_foreign_save_spng_target_get_type(void); extern GType vips_foreign_load_csv_file_get_type(void); extern GType vips_foreign_load_csv_source_get_type(void); extern GType vips_foreign_save_csv_file_get_type(void); extern GType vips_foreign_save_csv_target_get_type(void); extern GType vips_foreign_load_matrix_file_get_type(void); extern GType vips_foreign_load_matrix_source_get_type(void); extern GType vips_foreign_save_matrix_file_get_type(void); extern GType vips_foreign_save_matrix_target_get_type(void); extern GType vips_foreign_print_matrix_get_type(void); extern GType vips_foreign_load_fits_file_get_type(void); extern GType vips_foreign_load_fits_source_get_type(void); extern GType vips_foreign_save_fits_get_type(void); extern GType vips_foreign_load_analyze_get_type(void); extern GType vips_foreign_load_openexr_get_type(void); extern GType vips_foreign_load_openslide_file_get_type(void); extern GType vips_foreign_load_openslide_source_get_type(void); extern GType vips_foreign_load_vips_file_get_type(void); extern GType vips_foreign_load_vips_source_get_type(void); extern GType vips_foreign_save_vips_file_get_type(void); extern GType vips_foreign_save_vips_target_get_type(void); extern GType vips_foreign_load_jpeg_file_get_type(void); extern GType vips_foreign_load_jpeg_buffer_get_type(void); extern GType vips_foreign_load_jpeg_source_get_type(void); extern GType vips_foreign_save_jpeg_file_get_type(void); extern GType vips_foreign_save_jpeg_buffer_get_type(void); extern GType vips_foreign_save_jpeg_target_get_type(void); extern GType vips_foreign_save_jpeg_mime_get_type(void); extern GType vips_foreign_load_tiff_file_get_type(void); extern GType vips_foreign_load_tiff_buffer_get_type(void); extern GType vips_foreign_load_tiff_source_get_type(void); extern GType vips_foreign_save_tiff_file_get_type(void); extern GType vips_foreign_save_tiff_buffer_get_type(void); extern GType vips_foreign_save_tiff_target_get_type(void); extern GType vips_foreign_load_raw_get_type(void); extern GType vips_foreign_save_raw_get_type(void); extern GType vips_foreign_save_raw_fd_get_type(void); extern GType vips_foreign_load_magick_file_get_type(void); extern GType vips_foreign_load_magick_buffer_get_type(void); extern GType vips_foreign_load_magick7_file_get_type(void); extern GType vips_foreign_load_magick7_buffer_get_type(void); extern GType vips_foreign_save_magick_file_get_type(void); extern GType vips_foreign_save_magick_buffer_get_type(void); extern GType vips_foreign_save_magick_bmp_file_get_type(void); extern GType vips_foreign_save_magick_bmp_buffer_get_type(void); extern GType vips_foreign_save_magick_gif_file_get_type(void); extern GType vips_foreign_save_magick_gif_buffer_get_type(void); extern GType vips_foreign_save_dz_file_get_type(void); extern GType vips_foreign_save_dz_buffer_get_type(void); extern GType vips_foreign_save_dz_target_get_type(void); extern GType vips_foreign_load_webp_file_get_type(void); extern GType vips_foreign_load_webp_buffer_get_type(void); extern GType vips_foreign_load_webp_source_get_type(void); extern GType vips_foreign_save_webp_file_get_type(void); extern GType vips_foreign_save_webp_buffer_get_type(void); extern GType vips_foreign_save_webp_target_get_type(void); extern GType vips_foreign_save_webp_mime_get_type(void); extern GType vips_foreign_load_pdf_file_get_type(void); extern GType vips_foreign_load_pdf_buffer_get_type(void); extern GType vips_foreign_load_pdf_source_get_type(void); extern GType vips_foreign_load_svg_file_get_type(void); extern GType vips_foreign_load_svg_buffer_get_type(void); extern GType vips_foreign_load_svg_source_get_type(void); extern GType vips_foreign_load_jp2k_file_get_type(void); extern GType vips_foreign_load_jp2k_buffer_get_type(void); extern GType vips_foreign_load_jp2k_source_get_type(void); extern GType vips_foreign_save_jp2k_file_get_type(void); extern GType vips_foreign_save_jp2k_buffer_get_type(void); extern GType vips_foreign_save_jp2k_target_get_type(void); extern GType vips_foreign_load_jxl_file_get_type(void); extern GType vips_foreign_load_jxl_buffer_get_type(void); extern GType vips_foreign_load_jxl_source_get_type(void); extern GType vips_foreign_save_jxl_file_get_type(void); extern GType vips_foreign_save_jxl_buffer_get_type(void); extern GType vips_foreign_save_jxl_target_get_type(void); extern GType vips_foreign_load_heif_file_get_type(void); extern GType vips_foreign_load_heif_buffer_get_type(void); extern GType vips_foreign_load_heif_source_get_type(void); extern GType vips_foreign_save_heif_file_get_type(void); extern GType vips_foreign_save_heif_buffer_get_type(void); extern GType vips_foreign_save_heif_target_get_type(void); extern GType vips_foreign_save_avif_target_get_type(void); extern GType vips_foreign_load_nifti_file_get_type(void); extern GType vips_foreign_load_nifti_source_get_type(void); extern GType vips_foreign_save_nifti_get_type(void); extern GType vips_foreign_load_nsgif_file_get_type(void); extern GType vips_foreign_load_nsgif_buffer_get_type(void); extern GType vips_foreign_load_nsgif_source_get_type(void); extern GType vips_foreign_save_cgif_file_get_type(void); extern GType vips_foreign_save_cgif_buffer_get_type(void); extern GType vips_foreign_save_cgif_target_get_type(void); vips_foreign_load_csv_file_get_type(); vips_foreign_load_csv_source_get_type(); vips_foreign_save_csv_file_get_type(); vips_foreign_save_csv_target_get_type(); vips_foreign_load_matrix_file_get_type(); vips_foreign_load_matrix_source_get_type(); vips_foreign_save_matrix_file_get_type(); vips_foreign_save_matrix_target_get_type(); vips_foreign_print_matrix_get_type(); vips_foreign_load_raw_get_type(); vips_foreign_save_raw_get_type(); vips_foreign_save_raw_fd_get_type(); vips_foreign_load_vips_file_get_type(); vips_foreign_load_vips_source_get_type(); vips_foreign_save_vips_file_get_type(); vips_foreign_save_vips_target_get_type(); #ifdef HAVE_ANALYZE vips_foreign_load_analyze_get_type(); #endif /*HAVE_ANALYZE*/ #ifdef HAVE_PPM vips_foreign_load_ppm_file_get_type(); vips_foreign_load_ppm_source_get_type(); vips_foreign_save_ppm_file_get_type(); vips_foreign_save_pbm_target_get_type(); vips_foreign_save_pgm_target_get_type(); vips_foreign_save_ppm_target_get_type(); vips_foreign_save_pfm_target_get_type(); vips_foreign_save_pnm_target_get_type(); #endif /*HAVE_PPM*/ #ifdef HAVE_RADIANCE vips_foreign_load_rad_file_get_type(); vips_foreign_load_rad_buffer_get_type(); vips_foreign_load_rad_source_get_type(); vips_foreign_save_rad_file_get_type(); vips_foreign_save_rad_buffer_get_type(); vips_foreign_save_rad_target_get_type(); #endif /*HAVE_RADIANCE*/ #if defined(HAVE_POPPLER) && !defined(POPPLER_MODULE) vips_foreign_load_pdf_file_get_type(); vips_foreign_load_pdf_buffer_get_type(); vips_foreign_load_pdf_source_get_type(); #endif /*defined(HAVE_POPPLER) && !defined(POPPLER_MODULE)*/ #ifdef HAVE_PDFIUM vips_foreign_load_pdf_file_get_type(); vips_foreign_load_pdf_buffer_get_type(); vips_foreign_load_pdf_source_get_type(); #endif /*HAVE_PDFIUM*/ #ifdef HAVE_RSVG vips_foreign_load_svg_file_get_type(); vips_foreign_load_svg_buffer_get_type(); vips_foreign_load_svg_source_get_type(); #endif /*HAVE_RSVG*/ #if defined(HAVE_LIBJXL) && !defined(LIBJXL_MODULE) vips_foreign_load_jxl_file_get_type(); vips_foreign_load_jxl_buffer_get_type(); vips_foreign_load_jxl_source_get_type(); vips_foreign_save_jxl_file_get_type(); vips_foreign_save_jxl_buffer_get_type(); vips_foreign_save_jxl_target_get_type(); #endif /*defined(HAVE_LIBJXL) && !defined(LIBJXL_MODULE)*/ #ifdef HAVE_LIBOPENJP2 vips_foreign_load_jp2k_file_get_type(); vips_foreign_load_jp2k_buffer_get_type(); vips_foreign_load_jp2k_source_get_type(); vips_foreign_save_jp2k_file_get_type(); vips_foreign_save_jp2k_buffer_get_type(); vips_foreign_save_jp2k_target_get_type(); #endif /*HAVE_LIBOPENJP2*/ #ifdef HAVE_NSGIF vips_foreign_load_nsgif_file_get_type(); vips_foreign_load_nsgif_buffer_get_type(); vips_foreign_load_nsgif_source_get_type(); #endif /*HAVE_NSGIF*/ #ifdef HAVE_CGIF vips_foreign_save_cgif_file_get_type(); vips_foreign_save_cgif_buffer_get_type(); vips_foreign_save_cgif_target_get_type(); #endif /*HAVE_CGIF*/ #ifdef HAVE_LIBARCHIVE vips_foreign_save_dz_file_get_type(); vips_foreign_save_dz_buffer_get_type(); vips_foreign_save_dz_target_get_type(); #endif /*HAVE_LIBARCHIVE*/ #ifdef HAVE_PNG vips_foreign_load_png_file_get_type(); vips_foreign_load_png_buffer_get_type(); vips_foreign_load_png_source_get_type(); vips_foreign_save_png_file_get_type(); vips_foreign_save_png_buffer_get_type(); vips_foreign_save_png_target_get_type(); #endif /*HAVE_PNG*/ #ifdef HAVE_SPNG vips_foreign_load_png_file_get_type(); vips_foreign_load_png_buffer_get_type(); vips_foreign_load_png_source_get_type(); vips_foreign_save_spng_file_get_type(); vips_foreign_save_spng_buffer_get_type(); vips_foreign_save_spng_target_get_type(); #endif /*HAVE_SPNG*/ #ifdef HAVE_MATIO vips_foreign_load_mat_get_type(); #endif /*HAVE_MATIO*/ #ifdef HAVE_JPEG vips_foreign_load_jpeg_file_get_type(); vips_foreign_load_jpeg_buffer_get_type(); vips_foreign_load_jpeg_source_get_type(); vips_foreign_save_jpeg_file_get_type(); vips_foreign_save_jpeg_buffer_get_type(); vips_foreign_save_jpeg_target_get_type(); vips_foreign_save_jpeg_mime_get_type(); #endif /*HAVE_JPEG*/ #ifdef HAVE_LIBWEBP vips_foreign_load_webp_file_get_type(); vips_foreign_load_webp_buffer_get_type(); vips_foreign_load_webp_source_get_type(); vips_foreign_save_webp_file_get_type(); vips_foreign_save_webp_buffer_get_type(); vips_foreign_save_webp_target_get_type(); vips_foreign_save_webp_mime_get_type(); #endif /*HAVE_LIBWEBP*/ #ifdef HAVE_TIFF vips_foreign_load_tiff_file_get_type(); vips_foreign_load_tiff_buffer_get_type(); vips_foreign_load_tiff_source_get_type(); vips_foreign_save_tiff_file_get_type(); vips_foreign_save_tiff_buffer_get_type(); vips_foreign_save_tiff_target_get_type(); #endif /*HAVE_TIFF*/ #if defined(HAVE_OPENSLIDE) && !defined(OPENSLIDE_MODULE) vips_foreign_load_openslide_file_get_type(); vips_foreign_load_openslide_source_get_type(); #endif /*defined(HAVE_OPENSLIDE) && !defined(OPENSLIDE_MODULE)*/ #if defined(ENABLE_MAGICKLOAD) && !defined(MAGICK_MODULE) #ifdef HAVE_MAGICK6 vips_foreign_load_magick_file_get_type(); vips_foreign_load_magick_buffer_get_type(); #endif /*HAVE_MAGICK6*/ #ifdef HAVE_MAGICK7 vips_foreign_load_magick7_file_get_type(); vips_foreign_load_magick7_buffer_get_type(); #endif /*HAVE_MAGICK7*/ #endif /*defined(ENABLE_MAGICKLOAD) && !defined(MAGICK_MODULE)*/ #if defined(ENABLE_MAGICKSAVE) && !defined(MAGICK_MODULE) vips_foreign_save_magick_file_get_type(); vips_foreign_save_magick_buffer_get_type(); vips_foreign_save_magick_bmp_file_get_type(); vips_foreign_save_magick_bmp_buffer_get_type(); vips_foreign_save_magick_gif_file_get_type(); vips_foreign_save_magick_gif_buffer_get_type(); #endif /*defined(ENABLE_MAGICKSAVE) && !defined(MAGICK_MODULE)*/ #ifdef HAVE_CFITSIO vips_foreign_load_fits_file_get_type(); vips_foreign_load_fits_source_get_type(); vips_foreign_save_fits_get_type(); #endif /*HAVE_CFITSIO*/ #ifdef HAVE_OPENEXR vips_foreign_load_openexr_get_type(); #endif /*HAVE_OPENEXR*/ #ifdef HAVE_NIFTI vips_foreign_load_nifti_file_get_type(); vips_foreign_load_nifti_source_get_type(); vips_foreign_save_nifti_get_type(); #endif /*HAVE_NIFTI*/ #if defined(HAVE_HEIF) && !defined(HEIF_MODULE) vips_foreign_load_heif_file_get_type(); vips_foreign_load_heif_buffer_get_type(); vips_foreign_load_heif_source_get_type(); vips_foreign_save_heif_file_get_type(); vips_foreign_save_heif_buffer_get_type(); vips_foreign_save_heif_target_get_type(); vips_foreign_save_avif_target_get_type(); #endif /*defined(HAVE_HEIF) && !defined(HEIF_MODULE)*/ vips__foreign_load_operation = g_quark_from_static_string("vips-foreign-load-operation"); } libvips-8.15.1/libvips/foreign/heifload.c000066400000000000000000001066141454007373500203160ustar00rootroot00000000000000/* load heif images with libheif * * 19/1/19 * - from niftiload.c * 24/7/19 [zhoux2016] * - always fetch metadata from the main image (thumbs don't have it) * 24/7/19 * - close early on minimise * - close early on error * 1/9/19 [meyermarcel] * - handle alpha * 30/9/19 * - much faster handling of thumbnail=TRUE and missing thumbnail ... we * were reselecting the image for each scanline * 3/10/19 * - restart after minimise * 15/3/20 * - revise for new VipsSource API * 10/5/20 * - deprecate autorotate -- it's too difficult to support properly * 31/7/20 * - block broken thumbnails, if we can * 14/2/21 kleisauke * - move GObject part to heif2vips.c * 22/12/21 * - add >8 bit support * 23/2/22 lovell * - add @unlimited * 13/03/23 MathemanFlo * - add bits per sample metadata */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define VIPS_DEBUG #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include /* These are shared with the encoder. */ #ifdef HAVE_HEIF #include "pforeign.h" const char *vips__heic_suffs[] = { ".heic", ".heif", NULL }; const char *vips__avif_suffs[] = { ".avif", NULL }; const char *vips__heif_suffs[] = { ".heic", ".heif", ".avif", NULL }; #include #define VIPS_TYPE_FOREIGN_LOAD_HEIF (vips_foreign_load_heif_get_type()) #define VIPS_FOREIGN_LOAD_HEIF(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_FOREIGN_LOAD_HEIF, VipsForeignLoadHeif)) #define VIPS_FOREIGN_LOAD_HEIF_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_FOREIGN_LOAD_HEIF, VipsForeignLoadHeifClass)) #define VIPS_IS_FOREIGN_LOAD_HEIF(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_FOREIGN_LOAD_HEIF)) #define VIPS_IS_FOREIGN_LOAD_HEIF_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_FOREIGN_LOAD_HEIF)) #define VIPS_FOREIGN_LOAD_HEIF_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_FOREIGN_LOAD_HEIF, VipsForeignLoadHeifClass)) typedef struct _VipsForeignLoadHeif { VipsForeignLoad parent_object; /* Pages to load. */ int page; int n; /* Fetch the thumbnail instead of the image. If there is no thumbnail, * just fetch the image. */ gboolean thumbnail; /* Apply any orientation tags in the header. * * This is deprecated and does nothing. Non-autorotated reads from * libheif are surprisingly hard to support well, since orientation can * be represented in several different ways in HEIC files and devices * vary in how they do this. */ gboolean autorotate; /* remove all denial of service limits. */ gboolean unlimited; /* Context for this image. */ struct heif_context *ctx; /* Number of top-level images in this file. */ int n_top; /* TRUE for RGBA ... otherwise, RGB. */ gboolean has_alpha; /* Size of final output image. */ int width; int height; /* Size of each page. */ int page_width; int page_height; /* Eg. 8 or 12, typically. */ int bits_per_pixel; /* The page number currently in @handle. */ int page_no; /* TRUE if @handle has selected the thumbnail rather than the main * image. */ gboolean thumbnail_set; /* The page number of the primary image. */ int primary_page; /* Array of top-level image IDs. */ heif_item_id *id; /* Handle for the currently selected image. */ struct heif_image_handle *handle; /* Decoded pixel data for the current image. */ struct heif_image *img; /* Valid until img is released. */ int stride; const uint8_t *data; /* Set from subclasses. */ VipsSource *source; /* The reader struct. We use this to attach to our VipsSource. This * has to be alloced rather than in our struct, since it may change * size in libheif API versions. */ struct heif_reader *reader; } VipsForeignLoadHeif; #ifdef HAVE_HEIF_INIT static void * vips__heif_init_once(void *client) { struct heif_error error; error = heif_init(NULL); if (error.code) g_warning("heif_init: %s (%d.%d)\n", error.message ? error.message : "(null)", error.code, error.subcode); return NULL; } #endif /*HAVE_HEIF_INIT*/ void vips__heif_init(void) { #ifdef HAVE_HEIF_INIT static GOnce once = G_ONCE_INIT; VIPS_ONCE(&once, vips__heif_init_once, NULL); #endif /*HAVE_HEIF_INIT*/ } void vips__heif_error(struct heif_error *error) { if (error->code) vips_error("heif", "%s (%d.%d)", error->message ? error->message : "(null)", error->code, error->subcode); } #ifdef DEBUG void vips__heif_image_print(struct heif_image *img) { const static enum heif_channel channel[] = { heif_channel_Y, heif_channel_Cb, heif_channel_Cr, heif_channel_R, heif_channel_G, heif_channel_B, heif_channel_Alpha, heif_channel_interleaved }; const static char *channel_name[] = { "heif_channel_Y", "heif_channel_Cb", "heif_channel_Cr", "heif_channel_R", "heif_channel_G", "heif_channel_B", "heif_channel_Alpha", "heif_channel_interleaved" }; int i; printf("vips__heif_image_print:\n"); for (i = 0; i < VIPS_NUMBER(channel); i++) { if (!heif_image_has_channel(img, channel[i])) continue; printf("\t%s:\n", channel_name[i]); printf("\t\twidth = %d\n", heif_image_get_width(img, channel[i])); printf("\t\theight = %d\n", heif_image_get_height(img, channel[i])); printf("\t\tbits = %d\n", heif_image_get_bits_per_pixel(img, channel[i])); } } #endif /*DEBUG*/ /* Pick a chroma format. Shared with heifsave. */ int vips__heif_chroma(int bits_per_pixel, gboolean has_alpha) { if (bits_per_pixel == 8) { if (has_alpha) return heif_chroma_interleaved_RGBA; else return heif_chroma_interleaved_RGB; } else { if (has_alpha) return heif_chroma_interleaved_RRGGBBAA_BE; else return heif_chroma_interleaved_RRGGBB_BE; } } typedef struct _VipsForeignLoadHeifClass { VipsForeignLoadClass parent_class; } VipsForeignLoadHeifClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignLoadHeif, vips_foreign_load_heif, VIPS_TYPE_FOREIGN_LOAD); static void vips_foreign_load_heif_dispose(GObject *gobject) { VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) gobject; heif->data = NULL; VIPS_FREEF(heif_image_release, heif->img); VIPS_FREEF(heif_image_handle_release, heif->handle); VIPS_FREEF(heif_context_free, heif->ctx); VIPS_FREE(heif->id); VIPS_FREE(heif->reader); VIPS_UNREF(heif->source); G_OBJECT_CLASS(vips_foreign_load_heif_parent_class)->dispose(gobject); } static int vips_foreign_load_heif_build(VipsObject *object) { VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) object; #ifdef DEBUG printf("vips_foreign_load_heif_build:\n"); #endif /*DEBUG*/ if (heif->source && vips_source_rewind(heif->source)) return -1; if (!heif->ctx) { struct heif_error error; heif->ctx = heif_context_alloc(); #ifdef HAVE_HEIF_SET_MAX_IMAGE_SIZE_LIMIT heif_context_set_maximum_image_size_limit(heif->ctx, heif->unlimited ? USHRT_MAX : 0x4000); #endif /* HAVE_HEIF_SET_MAX_IMAGE_SIZE_LIMIT */ error = heif_context_read_from_reader(heif->ctx, heif->reader, heif, NULL); if (error.code) { vips__heif_error(&error); return -1; } } if (VIPS_OBJECT_CLASS(vips_foreign_load_heif_parent_class)->build(object)) return -1; return 0; } static const char *heif_magic[] = { "ftypheic", /* A regular heif image */ "ftypheix", /* Extended range (>8 bit) image */ "ftyphevc", /* Image sequence */ "ftypheim", /* Image sequence */ "ftypheis", /* Scalable image */ "ftyphevm", /* Multiview sequence */ "ftyphevs", /* Scalable sequence */ "ftypmif1", /* Nokia alpha_ image */ "ftypmsf1", /* Nokia animation image */ "ftypavif" /* AV1 image format */ }; /* The API has: * * enum heif_filetype_result result = heif_check_filetype(buf, 12); * * but it's very conservative and seems to be missing some of the Nokia heif * types. */ static int vips_foreign_load_heif_is_a(const char *buf, int len) { if (len >= 12) { unsigned char *p = (unsigned char *) buf; guint32 chunk_len = VIPS_LSHIFT_INT(p[0], 24) | VIPS_LSHIFT_INT(p[1], 16) | VIPS_LSHIFT_INT(p[2], 8) | VIPS_LSHIFT_INT(p[3], 0); int i; /* chunk_len can be pretty big for eg. animated AVIF. */ if (chunk_len > 2048 || chunk_len % 4 != 0) return 0; for (i = 0; i < VIPS_NUMBER(heif_magic); i++) if (strncmp(buf + 4, heif_magic[i], 8) == 0) return 1; } return 0; } static VipsForeignFlags vips_foreign_load_heif_get_flags(VipsForeignLoad *load) { /* FIXME .. could support random access for grid images. */ return VIPS_FOREIGN_SEQUENTIAL; } /* We've selected the page. Try to select the associated thumbnail instead, * if we can. */ static int vips_foreign_load_heif_set_thumbnail(VipsForeignLoadHeif *heif) { heif_item_id thumb_ids[1]; int n_thumbs; struct heif_image_handle *thumb_handle; struct heif_image *thumb_img; struct heif_error error; double main_aspect; double thumb_aspect; #ifdef DEBUG printf("vips_foreign_load_heif_set_thumbnail:\n"); #endif /*DEBUG*/ n_thumbs = heif_image_handle_get_list_of_thumbnail_IDs( heif->handle, thumb_ids, 1); if (n_thumbs == 0) return 0; error = heif_image_handle_get_thumbnail(heif->handle, thumb_ids[0], &thumb_handle); if (error.code) { vips__heif_error(&error); return -1; } /* Just checking the width and height of the handle isn't * enough -- we have to experimentally decode it and test the * decoded dimensions. */ error = heif_decode_image(thumb_handle, &thumb_img, heif_colorspace_RGB, heif_chroma_interleaved_RGB, NULL); if (error.code) { VIPS_FREEF(heif_image_handle_release, thumb_handle); vips__heif_error(&error); return -1; } thumb_aspect = (double) heif_image_get_width(thumb_img, heif_channel_interleaved) / heif_image_get_height(thumb_img, heif_channel_interleaved); VIPS_FREEF(heif_image_release, thumb_img); main_aspect = (double) heif_image_handle_get_width(heif->handle) / heif_image_handle_get_height(heif->handle); /* The bug we are working around has decoded thumbs as 512x512 * with the main image as 6kx4k, so a 0.1 threshold is more * than tight enough to spot the error. */ if (fabs(main_aspect - thumb_aspect) > 0.1) { VIPS_FREEF(heif_image_handle_release, thumb_handle); return 0; } VIPS_FREEF(heif_image_handle_release, heif->handle); heif->handle = thumb_handle; return 0; } /* Select a page. If thumbnail is set, select the thumbnail for that page, if * there is one. */ static int vips_foreign_load_heif_set_page(VipsForeignLoadHeif *heif, int page_no, gboolean thumbnail) { if (!heif->handle || page_no != heif->page_no || thumbnail != heif->thumbnail_set) { struct heif_error error; #ifdef DEBUG printf("vips_foreign_load_heif_set_page: %d, thumbnail = %d\n", page_no, thumbnail); #endif /*DEBUG*/ VIPS_FREEF(heif_image_handle_release, heif->handle); VIPS_FREEF(heif_image_release, heif->img); heif->data = NULL; heif->thumbnail_set = FALSE; error = heif_context_get_image_handle(heif->ctx, heif->id[page_no], &heif->handle); if (error.code) { vips__heif_error(&error); return -1; } if (thumbnail) { if (vips_foreign_load_heif_set_thumbnail(heif)) return -1; /* If we were asked to select the thumbnail, say we * did, even if there are no thumbnails and we just * selected the main image. * * If we don't do this, next time around in _generate * we'll try to select the thumbnail again, which will * be horribly slow. */ heif->thumbnail_set = TRUE; } heif->page_no = page_no; } return 0; } static int vips_foreign_load_heif_set_header(VipsForeignLoadHeif *heif, VipsImage *out) { VipsForeignLoad *load = (VipsForeignLoad *) heif; int bands; int i; /* Surely, 16 metadata items will be enough for anyone. */ heif_item_id id[16]; int n_metadata; struct heif_error error; VipsForeignHeifCompression compression; VipsInterpretation interpretation; VipsBandFormat format; /* We take the metadata from the non-thumbnail first page. HEIC * thumbnails don't have metadata. */ if (vips_foreign_load_heif_set_page(heif, heif->page, FALSE)) return -1; /* Verify dimensions */ if (heif->page_width < 1 || heif->page_height < 1) { vips_error("heifload", "%s", _("bad dimensions")); return -1; } heif->has_alpha = heif_image_handle_has_alpha_channel(heif->handle); #ifdef DEBUG printf("heif_image_handle_has_alpha_channel() = %d\n", heif->has_alpha); #endif /*DEBUG*/ bands = heif->has_alpha ? 4 : 3; #ifdef DEBUG printf("heif_image_handle_get_luma_bits_per_pixel() = %d\n", heif_image_handle_get_luma_bits_per_pixel(heif->handle)); #endif /*DEBUG*/ /* FIXME .. IPTC as well? */ n_metadata = heif_image_handle_get_list_of_metadata_block_IDs( heif->handle, NULL, id, VIPS_NUMBER(id)); for (i = 0; i < n_metadata; i++) { size_t length = heif_image_handle_get_metadata_size(heif->handle, id[i]); const char *type = heif_image_handle_get_metadata_type(heif->handle, id[i]); const char *content_type = heif_image_handle_get_metadata_content_type(heif->handle, id[i]); unsigned char *data; char name[256]; #ifdef DEBUG printf("metadata type = %s, length = %zu\n", type, length); #endif /*DEBUG*/ if (!length) continue; if (!(data = VIPS_ARRAY(NULL, length, unsigned char))) return -1; error = heif_image_handle_get_metadata(heif->handle, id[i], data); if (error.code) { VIPS_FREE(data); vips__heif_error(&error); return -1; } /* We need to skip the first four bytes of EXIF, they just * contain the offset. */ if (length > 4 && g_ascii_strcasecmp(type, "exif") == 0) { length -= 4; memmove(data, data + 4, length); } /* Exif data will have the type string "exif". * * For XMP, the content type is "application/rdf+xml". */ if (g_ascii_strcasecmp(type, "exif") == 0) vips_snprintf(name, 256, VIPS_META_EXIF_NAME); else if (g_ascii_strcasecmp(content_type, "application/rdf+xml") == 0) vips_snprintf(name, 256, VIPS_META_XMP_NAME); else vips_snprintf(name, 256, "heif-%s-%d", type, i); vips_image_set_blob(out, name, (VipsCallbackFn) vips_area_free_cb, data, length); /* image_set will automatically parse EXIF, if necessary. */ } /* We use libheif's autorotate, so we need to remove any EXIF * orientation tags. * * According to the HEIF standard, EXIF orientation tags are only * informational and images should not be rotated because of them. * Unless we strip these tags, there's a danger downstream processing * could double-rotate. */ vips_autorot_remove_angle(out); #ifdef HAVE_HEIF_COLOR_PROFILE enum heif_color_profile_type profile_type = heif_image_handle_get_color_profile_type(heif->handle); #ifdef DEBUG { printf("profile type = "); switch (profile_type) { case heif_color_profile_type_not_present: printf("none"); break; case heif_color_profile_type_nclx: printf("nclx"); break; case heif_color_profile_type_rICC: printf("rICC"); break; case heif_color_profile_type_prof: printf("prof"); break; default: printf("unknown"); break; } printf("\n"); } #endif /*DEBUG*/ /* lcms can load standard (prof) and reduced (rICC) profiles */ if (profile_type == heif_color_profile_type_prof || profile_type == heif_color_profile_type_rICC) { size_t length = heif_image_handle_get_raw_color_profile_size( heif->handle); unsigned char *data; if (!(data = VIPS_ARRAY(NULL, length, unsigned char))) return -1; error = heif_image_handle_get_raw_color_profile(heif->handle, data); if (error.code) { VIPS_FREE(data); vips__heif_error(&error); return -1; } #ifdef DEBUG printf("profile data, length = %zd\n", length); #endif /*DEBUG*/ vips_image_set_blob(out, VIPS_META_ICC_NAME, (VipsCallbackFn) vips_area_free_cb, data, length); } else if (profile_type == heif_color_profile_type_nclx) { g_warning("heifload: ignoring nclx profile"); } #endif /*HAVE_HEIF_COLOR_PROFILE*/ vips_image_set_int(out, "heif-primary", heif->primary_page); vips_image_set_int(out, VIPS_META_N_PAGES, heif->n_top); /* Only set page-height if we have more than one page, or this could * accidentally turn into an animated image later. */ if (heif->n > 1) vips_image_set_int(out, VIPS_META_PAGE_HEIGHT, heif->page_height); /* Determine compression from HEIF "brand". heif_avif and heif_avis * were added in v1.7. */ compression = VIPS_FOREIGN_HEIF_COMPRESSION_HEVC; #ifdef HAVE_HEIF_AVIF { const unsigned char *brand_data; if ((brand_data = vips_source_sniff(heif->source, 12))) { enum heif_brand brand; brand = heif_main_brand(brand_data, 12); if (brand == heif_avif || brand == heif_avis) compression = VIPS_FOREIGN_HEIF_COMPRESSION_AV1; } } #endif /*HAVE_HEIF_AVIF*/ vips_image_set_string(out, "heif-compression", vips_enum_nick(VIPS_TYPE_FOREIGN_HEIF_COMPRESSION, compression)); vips_image_set_int(out, VIPS_META_BITS_PER_SAMPLE, heif->bits_per_pixel); /* Deprecated "heif-bitdepth" use "bits-per-sample" instead. */ vips_image_set_int(out, "heif-bitdepth", heif->bits_per_pixel); if (heif->bits_per_pixel > 8) { interpretation = VIPS_INTERPRETATION_RGB16; format = VIPS_FORMAT_USHORT; } else { interpretation = VIPS_INTERPRETATION_sRGB; format = VIPS_FORMAT_UCHAR; } /* FIXME .. we always decode to RGB in generate. We should check for * all grey images, perhaps. */ if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_THINSTRIP, NULL)) return -1; vips_image_init_fields(out, heif->page_width, heif->page_height * heif->n, bands, format, VIPS_CODING_NONE, interpretation, 1.0, 1.0); VIPS_SETSTR(load->out->filename, vips_connection_filename(VIPS_CONNECTION(heif->source))); return 0; } static int vips_foreign_load_heif_header(VipsForeignLoad *load) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load); VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) load; struct heif_error error; heif_item_id primary_id; int i; #ifdef DEBUG printf("vips_foreign_load_heif_header:\n"); #endif /*DEBUG*/ heif->n_top = heif_context_get_number_of_top_level_images(heif->ctx); heif->id = VIPS_ARRAY(NULL, heif->n_top, heif_item_id); heif_context_get_list_of_top_level_image_IDs(heif->ctx, heif->id, heif->n_top); /* Note page number of primary image. */ error = heif_context_get_primary_image_ID(heif->ctx, &primary_id); if (error.code) { vips__heif_error(&error); return -1; } for (i = 0; i < heif->n_top; i++) if (heif->id[i] == primary_id) heif->primary_page = i; /* If @n and @page have not been set, @page defaults to the primary * page. */ if (!vips_object_argument_isset(VIPS_OBJECT(load), "page") && !vips_object_argument_isset(VIPS_OBJECT(load), "n")) heif->page = heif->primary_page; if (heif->n == -1) heif->n = heif->n_top - heif->page; if (heif->page < 0 || heif->n <= 0 || heif->page + heif->n > heif->n_top) { vips_error(class->nickname, "%s", _("bad page number")); return -1; } #ifdef DEBUG for (i = heif->page; i < heif->page + heif->n; i++) { heif_item_id thumb_ids[1]; int n_items; int n_thumbs; int j; if (vips_foreign_load_heif_set_page(heif, i, FALSE)) return -1; n_thumbs = heif_image_handle_get_number_of_thumbnails(heif->handle); n_items = heif_image_handle_get_list_of_thumbnail_IDs(heif->handle, thumb_ids, 1); printf("page = %d\n", i); printf("n_thumbs = %d\n", n_thumbs); printf("n_items = %d\n", n_items); for (j = 0; j < n_items; j++) { struct heif_image_handle *thumb_handle; error = heif_image_handle_get_thumbnail(heif->handle, thumb_ids[j], &thumb_handle); if (error.code) { vips__heif_error(&error); return -1; } printf(" thumb %d\n", j); printf(" width = %d\n", heif_image_handle_get_width(thumb_handle)); printf(" height = %d\n", heif_image_handle_get_height(thumb_handle)); printf(" bits_per_pixel = %d\n", heif_image_handle_get_luma_bits_per_pixel(thumb_handle)); } } #endif /*DEBUG*/ /* All pages must be the same size for libvips toilet roll images. */ if (vips_foreign_load_heif_set_page(heif, heif->page, heif->thumbnail)) return -1; heif->page_width = heif_image_handle_get_width(heif->handle); heif->page_height = heif_image_handle_get_height(heif->handle); heif->bits_per_pixel = heif_image_handle_get_luma_bits_per_pixel(heif->handle); if (heif->bits_per_pixel < 0) { vips_error(class->nickname, "%s", _("undefined bits per pixel")); return -1; } for (i = heif->page + 1; i < heif->page + heif->n; i++) { if (vips_foreign_load_heif_set_page(heif, i, heif->thumbnail)) return -1; if (heif_image_handle_get_width(heif->handle) != heif->page_width || heif_image_handle_get_height(heif->handle) != heif->page_height || heif_image_handle_get_luma_bits_per_pixel(heif->handle) != heif->bits_per_pixel) { vips_error(class->nickname, "%s", _("not all pages are the same size")); return -1; } } #ifdef DEBUG printf("page_width = %d\n", heif->page_width); printf("page_height = %d\n", heif->page_height); printf("bits_per_pixel = %d\n", heif->bits_per_pixel); printf("n_top = %d\n", heif->n_top); for (i = 0; i < heif->n_top; i++) { printf(" id[%d] = %d\n", i, heif->id[i]); if (vips_foreign_load_heif_set_page(heif, i, FALSE)) return -1; printf(" width = %d\n", heif_image_handle_get_width(heif->handle)); printf(" height = %d\n", heif_image_handle_get_height(heif->handle)); printf(" bits_per_pixel = %d\n", heif_image_handle_get_luma_bits_per_pixel(heif->handle)); printf(" has_depth = %d\n", heif_image_handle_has_depth_image(heif->handle)); printf(" has_alpha = %d\n", heif_image_handle_has_alpha_channel(heif->handle)); printf(" n_metadata = %d\n", heif_image_handle_get_number_of_metadata_blocks( heif->handle, NULL)); #ifdef HAVE_HEIF_COLOR_PROFILE printf(" colour profile type = 0x%xd\n", heif_image_handle_get_color_profile_type(heif->handle)); #endif /*HAVE_HEIF_COLOR_PROFILE*/ } #endif /*DEBUG*/ if (vips_foreign_load_heif_set_header(heif, load->out)) return -1; vips_source_minimise(heif->source); return 0; } static int vips_foreign_load_heif_generate(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) a; VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(heif); VipsRect *r = &out_region->valid; int page = r->top / heif->page_height + heif->page; int line = r->top % heif->page_height; #ifdef DEBUG_VERBOSE printf("vips_foreign_load_heif_generate: line %d\n", r->top); #endif /*DEBUG_VERBOSE*/ g_assert(r->height == 1); if (vips_foreign_load_heif_set_page(heif, page, heif->thumbnail)) return -1; if (!heif->img) { enum heif_chroma chroma = vips__heif_chroma(heif->bits_per_pixel, heif->has_alpha); struct heif_error error; struct heif_decoding_options *options; options = heif_decoding_options_alloc(); error = heif_decode_image(heif->handle, &heif->img, heif_colorspace_RGB, chroma, options); heif_decoding_options_free(options); if (error.code) { vips__heif_error(&error); return -1; } #ifdef DEBUG vips__heif_image_print(heif->img); #endif /*DEBUG*/ } if (!heif->data) { int image_width = heif_image_get_width(heif->img, heif_channel_interleaved); int image_height = heif_image_get_height(heif->img, heif_channel_interleaved); /* We can sometimes get inconsistency between the dimensions * reported on the handle, and the final image we fetch. Error * out to prevent a segv. */ if (image_width != heif->page_width || image_height != heif->page_height) { vips_error(class->nickname, "%s", _("bad image dimensions on decode")); return -1; } if (!(heif->data = heif_image_get_plane_readonly(heif->img, heif_channel_interleaved, &heif->stride))) { vips_error(class->nickname, "%s", _("unable to get image data")); return -1; } } memcpy(VIPS_REGION_ADDR(out_region, 0, r->top), heif->data + heif->stride * line, VIPS_IMAGE_SIZEOF_LINE(out_region->im)); /* We may need to swap bytes and shift to fill 16 bits. */ if (heif->bits_per_pixel > 8) { int shift = 16 - heif->bits_per_pixel; int ne = VIPS_REGION_N_ELEMENTS(out_region); int i; VipsPel *p; p = VIPS_REGION_ADDR(out_region, 0, r->top); for (i = 0; i < ne; i++) { /* We've asked for big endian, we must write native. */ guint16 v = ((p[0] << 8) | p[1]) << shift; *((guint16 *) p) = v; p += 2; } } return 0; } static void vips_foreign_load_heif_minimise(VipsObject *object, VipsForeignLoadHeif *heif) { vips_source_minimise(heif->source); } static int vips_foreign_load_heif_load(VipsForeignLoad *load) { VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) load; VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(load), 3); #ifdef DEBUG printf("vips_foreign_load_heif_load: loading image\n"); #endif /*DEBUG*/ t[0] = vips_image_new(); if (vips_foreign_load_heif_set_header(heif, t[0])) return -1; /* Close input immediately at end of read. */ g_signal_connect(t[0], "minimise", G_CALLBACK(vips_foreign_load_heif_minimise), heif); if (vips_image_generate(t[0], NULL, vips_foreign_load_heif_generate, NULL, heif, NULL) || vips_sequential(t[0], &t[1], NULL) || vips_image_write(t[1], load->real)) return -1; if (vips_source_decode(heif->source)) return -1; return 0; } static void vips_foreign_load_heif_class_init(VipsForeignLoadHeifClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; vips__heif_init(); gobject_class->dispose = vips_foreign_load_heif_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "heifload_base"; object_class->description = _("load a HEIF image"); object_class->build = vips_foreign_load_heif_build; load_class->get_flags = vips_foreign_load_heif_get_flags; load_class->header = vips_foreign_load_heif_header; load_class->load = vips_foreign_load_heif_load; VIPS_ARG_INT(class, "page", 2, _("Page"), _("First page to load"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadHeif, page), 0, 100000, 0); VIPS_ARG_INT(class, "n", 3, _("n"), _("Number of pages to load, -1 for all"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadHeif, n), -1, 100000, 1); VIPS_ARG_BOOL(class, "thumbnail", 4, _("Thumbnail"), _("Fetch thumbnail image"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadHeif, thumbnail), FALSE); VIPS_ARG_BOOL(class, "autorotate", 21, _("Autorotate"), _("Rotate image using exif orientation"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsForeignLoadHeif, autorotate), FALSE); VIPS_ARG_BOOL(class, "unlimited", 22, _("Unlimited"), _("Remove all denial of service limits"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadHeif, unlimited), FALSE); } static gint64 vips_foreign_load_heif_get_position(void *userdata) { VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) userdata; return vips_source_seek(heif->source, 0L, SEEK_CUR); } /* libheif read() does not work like unix read(). * * This method is cannot return EOF. Instead, the separate wait_for_file_size() * is called beforehand to make sure that there's enough data there. */ static int vips_foreign_load_heif_read(void *data, size_t size, void *userdata) { VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) userdata; while (size > 0) { gint64 bytes_read; bytes_read = vips_source_read(heif->source, data, size); if (bytes_read <= 0) return -1; size -= bytes_read; data = (char *) data + bytes_read; } return 0; } static int vips_foreign_load_heif_seek(gint64 position, void *userdata) { VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) userdata; /* Return 0 on success. */ return vips_source_seek(heif->source, position, SEEK_SET) == -1; } /* libheif calls this to mean "I intend to read() to this position, please * check it is OK". */ static enum heif_reader_grow_status vips_foreign_load_heif_wait_for_file_size(gint64 target_size, void *userdata) { VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) userdata; gint64 old_position; gint64 result; enum heif_reader_grow_status status; /* We seek the VipsSource to the position and check for errors. */ old_position = vips_source_seek(heif->source, 0L, SEEK_CUR); result = vips_source_seek(heif->source, target_size, SEEK_SET); vips_source_seek(heif->source, old_position, SEEK_SET); if (result < 0) /* Unable to seek to this point, so it's beyond EOF. */ status = heif_reader_grow_status_size_beyond_eof; else /* Successfully read to the requested point, but the requested * point is not necessarily EOF. */ status = heif_reader_grow_status_size_reached; return status; } static void vips_foreign_load_heif_init(VipsForeignLoadHeif *heif) { heif->n = 1; heif->reader = VIPS_ARRAY(NULL, 1, struct heif_reader); /* The first version to support heif_reader. */ heif->reader->reader_api_version = 1; heif->reader->get_position = vips_foreign_load_heif_get_position; heif->reader->read = vips_foreign_load_heif_read; heif->reader->seek = vips_foreign_load_heif_seek; heif->reader->wait_for_file_size = vips_foreign_load_heif_wait_for_file_size; } typedef struct _VipsForeignLoadHeifFile { VipsForeignLoadHeif parent_object; /* Filename for load. */ char *filename; } VipsForeignLoadHeifFile; typedef VipsForeignLoadHeifClass VipsForeignLoadHeifFileClass; G_DEFINE_TYPE(VipsForeignLoadHeifFile, vips_foreign_load_heif_file, vips_foreign_load_heif_get_type()); static int vips_foreign_load_heif_file_build(VipsObject *object) { VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) object; VipsForeignLoadHeifFile *file = (VipsForeignLoadHeifFile *) object; if (file->filename && !(heif->source = vips_source_new_from_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_heif_file_parent_class) ->build(object)) return -1; return 0; } static int vips_foreign_load_heif_file_is_a(const char *filename) { char buf[12]; if (vips__get_bytes(filename, (unsigned char *) buf, 12) != 12) return 0; return vips_foreign_load_heif_is_a(buf, 12); } static void vips_foreign_load_heif_file_class_init(VipsForeignLoadHeifFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "heifload"; object_class->build = vips_foreign_load_heif_file_build; foreign_class->suffs = vips__heif_suffs; load_class->is_a = vips_foreign_load_heif_file_is_a; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadHeifFile, filename), NULL); } static void vips_foreign_load_heif_file_init(VipsForeignLoadHeifFile *file) { } typedef struct _VipsForeignLoadHeifBuffer { VipsForeignLoadHeif parent_object; /* Load from a buffer. */ VipsArea *buf; } VipsForeignLoadHeifBuffer; typedef VipsForeignLoadHeifClass VipsForeignLoadHeifBufferClass; G_DEFINE_TYPE(VipsForeignLoadHeifBuffer, vips_foreign_load_heif_buffer, vips_foreign_load_heif_get_type()); static int vips_foreign_load_heif_buffer_build(VipsObject *object) { VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) object; VipsForeignLoadHeifBuffer *buffer = (VipsForeignLoadHeifBuffer *) object; if (buffer->buf && !(heif->source = vips_source_new_from_memory( VIPS_AREA(buffer->buf)->data, VIPS_AREA(buffer->buf)->length))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_heif_file_parent_class) ->build(object)) return -1; return 0; } static gboolean vips_foreign_load_heif_buffer_is_a(const void *buf, size_t len) { return vips_foreign_load_heif_is_a(buf, len); } static void vips_foreign_load_heif_buffer_class_init( VipsForeignLoadHeifBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "heifload_buffer"; object_class->build = vips_foreign_load_heif_buffer_build; load_class->is_a_buffer = vips_foreign_load_heif_buffer_is_a; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadHeifBuffer, buf), VIPS_TYPE_BLOB); } static void vips_foreign_load_heif_buffer_init(VipsForeignLoadHeifBuffer *buffer) { } typedef struct _VipsForeignLoadHeifSource { VipsForeignLoadHeif parent_object; /* Load from a source. */ VipsSource *source; } VipsForeignLoadHeifSource; typedef VipsForeignLoadHeifClass VipsForeignLoadHeifSourceClass; G_DEFINE_TYPE(VipsForeignLoadHeifSource, vips_foreign_load_heif_source, vips_foreign_load_heif_get_type()); static int vips_foreign_load_heif_source_build(VipsObject *object) { VipsForeignLoadHeif *heif = (VipsForeignLoadHeif *) object; VipsForeignLoadHeifSource *source = (VipsForeignLoadHeifSource *) object; if (source->source) { heif->source = source->source; g_object_ref(heif->source); } if (VIPS_OBJECT_CLASS(vips_foreign_load_heif_source_parent_class) ->build(object)) return -1; return 0; } static gboolean vips_foreign_load_heif_source_is_a_source(VipsSource *source) { const char *p; return (p = (const char *) vips_source_sniff(source, 12)) && vips_foreign_load_heif_is_a(p, 12); } static void vips_foreign_load_heif_source_class_init( VipsForeignLoadHeifSourceClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "heifload_source"; object_class->build = vips_foreign_load_heif_source_build; operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_heif_source_is_a_source; VIPS_ARG_OBJECT(class, "source", 1, _("Source"), _("Source to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadHeifSource, source), VIPS_TYPE_SOURCE); } static void vips_foreign_load_heif_source_init(VipsForeignLoadHeifSource *source) { } #endif /*HAVE_HEIF*/ /* The C API wrappers are defined in foreign.c. */ libvips-8.15.1/libvips/foreign/heifsave.c000066400000000000000000000567051454007373500203420ustar00rootroot00000000000000/* save to heif * * 5/7/18 * - from niftisave.c * 3/7/19 [lovell] * - add "compression" option * 1/9/19 [meyermarcel] * - save alpha when necessary * 15/3/20 * - revise for new VipsTarget API * 14/2/21 kleisauke * - move GObject part to vips2heif.c * 30/7/21 * - rename "speed" as "effort" for consistency with other savers * 22/12/21 * - add >8 bit support * 22/10/11 * - improve rules for 16-bit write [johntrunc] */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #ifdef HAVE_HEIF #include #include #include #include #include #include "pforeign.h" #include typedef struct _VipsForeignSaveHeif { VipsForeignSave parent_object; /* Where to write (set by subclasses). */ VipsTarget *target; /* Coding quality factor (1 - 100). */ int Q; /* bitdepth to save at for >8 bit images. */ int bitdepth; /* Lossless compression. */ gboolean lossless; /* Compression format */ VipsForeignHeifCompression compression; /* CPU effort (0 - 9). */ int effort; /* Chroma subsampling. */ VipsForeignSubsample subsample_mode; /* Encoder to use. For instance: aom, svt etc. */ VipsForeignHeifEncoder selected_encoder; int page_width; int page_height; int n_pages; struct heif_context *ctx; struct heif_encoder *encoder; /* The current page we are writing. */ struct heif_image_handle *handle; /* The current page in memory which we build as we scan down the * image. */ struct heif_image *img; /* The libheif memory area we fill with pixels from the libvips * pipe. */ uint8_t *data; int stride; /* Deprecated ... this is now called effort for consistency with the * other encoders. */ int speed; } VipsForeignSaveHeif; typedef VipsForeignSaveClass VipsForeignSaveHeifClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignSaveHeif, vips_foreign_save_heif, VIPS_TYPE_FOREIGN_SAVE); static void vips_foreign_save_heif_dispose(GObject *gobject) { VipsForeignSaveHeif *heif = (VipsForeignSaveHeif *) gobject; VIPS_UNREF(heif->target); VIPS_FREEF(heif_image_release, heif->img); VIPS_FREEF(heif_image_handle_release, heif->handle); VIPS_FREEF(heif_encoder_release, heif->encoder); VIPS_FREEF(heif_context_free, heif->ctx); G_OBJECT_CLASS(vips_foreign_save_heif_parent_class)->dispose(gobject); } typedef struct heif_error (*libheif_metadata_fn)(struct heif_context *, const struct heif_image_handle *, const void *, int); /* String-based metadata fields we add. */ typedef struct _VipsForeignSaveHeifMetadata { const char *name; /* as understood by libvips */ libheif_metadata_fn saver; /* as understood by libheif */ } VipsForeignSaveHeifMetadata; static VipsForeignSaveHeifMetadata libheif_metadata[] = { { VIPS_META_EXIF_NAME, heif_context_add_exif_metadata }, { VIPS_META_XMP_NAME, heif_context_add_XMP_metadata } }; static int vips_foreign_save_heif_write_metadata(VipsForeignSaveHeif *heif) { VipsForeignSave *save = (VipsForeignSave *) heif; struct heif_error error; for (int i = 0; i < VIPS_NUMBER(libheif_metadata); i++) { const char *vips_name = libheif_metadata[i].name; libheif_metadata_fn heif_saver = libheif_metadata[i].saver; if (vips_image_get_typeof(save->ready, vips_name)) { const void *data; size_t length; #ifdef DEBUG printf("attaching %s ..\n", vips_name); #endif /*DEBUG*/ if (vips_image_get_blob(save->ready, vips_name, &data, &length)) return -1; error = heif_saver(heif->ctx, heif->handle, data, length); if (error.code) { vips__heif_error(&error); return -1; } } } return 0; } #ifdef HAVE_HEIF_COLOR_PROFILE static int vips_foreign_save_heif_add_icc(VipsForeignSaveHeif *heif, const void *profile, size_t length) { #ifdef DEBUG printf("attaching profile ..\n"); #endif /*DEBUG*/ struct heif_error error; error = heif_image_set_raw_color_profile(heif->img, "rICC", profile, length); if (error.code) { vips__heif_error(&error); return -1; } return 0; } static int vips_foreign_save_heif_add_custom_icc(VipsForeignSaveHeif *heif, const char *profile) { VipsBlob *blob; if (vips_profile_load(profile, &blob, NULL)) return -1; if (blob) { size_t length; const void *data = vips_blob_get(blob, &length); if (vips_foreign_save_heif_add_icc(heif, data, length)) { vips_area_unref((VipsArea *) blob); return -1; } vips_area_unref((VipsArea *) blob); } return 0; } static int vips_foreign_save_heif_add_orig_icc(VipsForeignSaveHeif *heif) { VipsForeignSave *save = (VipsForeignSave *) heif; const void *data; size_t length; if (vips_image_get_blob(save->ready, VIPS_META_ICC_NAME, &data, &length)) return -1; if (vips_foreign_save_heif_add_icc(heif, data, length)) return -1; return 0; } #endif /*HAVE_HEIF_COLOR_PROFILE*/ static int vips_foreign_save_heif_write_page(VipsForeignSaveHeif *heif, int page) { VipsForeignSave *save = (VipsForeignSave *) heif; struct heif_error error; struct heif_encoding_options *options; #ifdef HAVE_HEIF_COLOR_PROFILE /* A profile supplied as an argument overrides an embedded * profile. */ if (save->profile) { if (vips_foreign_save_heif_add_custom_icc(heif, save->profile)) return -1; } else if (vips_image_get_typeof(save->ready, VIPS_META_ICC_NAME)) { if (vips_foreign_save_heif_add_orig_icc(heif)) return -1; } #endif /*HAVE_HEIF_COLOR_PROFILE*/ options = heif_encoding_options_alloc(); if (vips_image_hasalpha(save->ready)) options->save_alpha_channel = 1; #ifdef DEBUG { GTimer *timer = g_timer_new(); printf("calling heif_context_encode_image() ...\n"); #endif /*DEBUG*/ error = heif_context_encode_image(heif->ctx, heif->img, heif->encoder, options, &heif->handle); #ifdef DEBUG printf("... libheif took %.2g seconds\n", g_timer_elapsed(timer, NULL)); g_timer_destroy(timer); } #endif /*DEBUG*/ heif_encoding_options_free(options); if (error.code) { vips__heif_error(&error); return -1; } if (vips_image_get_typeof(save->ready, "heif-primary")) { int primary; if (vips_image_get_int(save->ready, "heif-primary", &primary)) return -1; if (page == primary) { error = heif_context_set_primary_image(heif->ctx, heif->handle); if (error.code) { vips__heif_error(&error); return -1; } } } if (vips_foreign_save_heif_write_metadata(heif)) return -1; VIPS_FREEF(heif_image_handle_release, heif->handle); return 0; } static int vips_foreign_save_heif_pack(VipsForeignSaveHeif *heif, VipsPel *q, VipsPel *p, int ne) { VipsForeignSave *save = (VipsForeignSave *) heif; int i; if (save->ready->BandFmt == VIPS_FORMAT_UCHAR && heif->bitdepth == 8) /* Most common case -- 8 bit to 8 bit. */ memcpy(q, p, ne); else if (save->ready->BandFmt == VIPS_FORMAT_UCHAR && heif->bitdepth > 8) { /* 8-bit source, write a bigendian short, shifted up. */ int shift = heif->bitdepth - 8; for (i = 0; i < ne; i++) { guint16 v = p[i] << shift; q[0] = v >> 8; q[1] = v; q += 2; } } else if (save->ready->BandFmt == VIPS_FORMAT_USHORT && heif->bitdepth <= 8) { /* 16-bit native byte order source, 8 bit write. * * Pick the high or low bits of the source. */ int vips_bitdepth = save->ready->Type == VIPS_INTERPRETATION_RGB16 || save->ready->Type == VIPS_INTERPRETATION_GREY16 ? 16 : 8; int shift = vips_bitdepth - heif->bitdepth; for (i = 0; i < ne; i++) { guint16 v = *((gushort *) p) >> shift; q[i] = v; p += 2; } } else if (save->ready->BandFmt == VIPS_FORMAT_USHORT && heif->bitdepth > 8) { /* 16-bit native byte order source, 16 bit bigendian write. */ int vips_bitdepth = save->ready->Type == VIPS_INTERPRETATION_RGB16 || save->ready->Type == VIPS_INTERPRETATION_GREY16 ? 16 : 8; int shift = vips_bitdepth - heif->bitdepth; for (i = 0; i < ne; i++) { guint16 v = *((gushort *) p) >> shift; q[0] = v >> 8; q[1] = v; p += 2; q += 2; } } else { VipsObjectClass *class = VIPS_OBJECT_CLASS(heif); vips_error(class->nickname, "%s", _("unimplemeted format conversion")); return -1; } return 0; } static int vips_foreign_save_heif_write_block(VipsRegion *region, VipsRect *area, void *a) { VipsForeignSaveHeif *heif = (VipsForeignSaveHeif *) a; int y; #ifdef DEBUG printf("vips_foreign_save_heif_write_block: y = %d\n", area->top); #endif /*DEBUG*/ /* Copy a line at a time into our output image, write each time the * image fills. */ for (y = 0; y < area->height; y++) { /* Y in page. */ int page = (area->top + y) / heif->page_height; int line = (area->top + y) % heif->page_height; VipsPel *p = VIPS_REGION_ADDR(region, 0, area->top + y); VipsPel *q = heif->data + line * heif->stride; if (vips_foreign_save_heif_pack(heif, q, p, VIPS_REGION_N_ELEMENTS(region))) return -1; /* Did we just write the final line? Write as a new page * into the output. */ if (line == heif->page_height - 1) if (vips_foreign_save_heif_write_page(heif, page)) return -1; } return 0; } struct heif_error vips_foreign_save_heif_write(struct heif_context *ctx, const void *data, size_t length, void *userdata) { VipsForeignSaveHeif *heif = (VipsForeignSaveHeif *) userdata; struct heif_error error; #ifdef HAVE_HEIF_ERROR_SUCCESS error = heif_error_success; #else error.code = heif_error_Ok; #endif /*HAVE_HEIF_ERROR_SUCCESS*/ if (vips_target_write(heif->target, data, length)) { error.code = heif_error_Encoding_error; error.subcode = heif_suberror_Cannot_write_output_data; error.message = "Cannot write output data"; } return error; } static int vips_foreign_save_heif_build(VipsObject *object) { VipsForeignSave *save = (VipsForeignSave *) object; VipsForeignSaveHeif *heif = (VipsForeignSaveHeif *) object; struct heif_error error; struct heif_writer writer; char *chroma; const struct heif_encoder_descriptor *out_encoder; if (VIPS_OBJECT_CLASS(vips_foreign_save_heif_parent_class)->build(object)) return -1; /* If the old, deprecated "speed" param is being used and the new * "effort" param is not, use speed to init effort. */ if (vips_object_argument_isset(object, "speed") && !vips_object_argument_isset(object, "effort")) heif->effort = 9 - heif->speed; /* Default 12 bit save for 16-bit images. HEIC (for example) implements * 8 / 10 / 12. */ if (!vips_object_argument_isset(object, "bitdepth")) heif->bitdepth = save->ready->Type == VIPS_INTERPRETATION_RGB16 || save->ready->Type == VIPS_INTERPRETATION_GREY16 ? 12 : 8; /* Try to find the selected encoder. */ if (heif->selected_encoder != VIPS_FOREIGN_HEIF_ENCODER_AUTO) { const int count = heif_context_get_encoder_descriptors( heif->ctx, (enum heif_compression_format) heif->compression, vips_enum_nick(VIPS_TYPE_FOREIGN_HEIF_ENCODER, heif->selected_encoder), &out_encoder, 1); if (count > 0) error = heif_context_get_encoder(heif->ctx, out_encoder, &heif->encoder); else g_warning("heifsave: could not find %s", vips_enum_nick(VIPS_TYPE_FOREIGN_HEIF_ENCODER, heif->selected_encoder)); } /* Fallback to default encoder. */ if (!heif->encoder) error = heif_context_get_encoder_for_format(heif->ctx, (enum heif_compression_format) heif->compression, &heif->encoder); if (error.code) { if (error.code == heif_error_Unsupported_filetype) vips_error("heifsave", "%s", _("Unsupported compression")); else vips__heif_error(&error); return -1; } error = heif_encoder_set_lossy_quality(heif->encoder, heif->Q); if (error.code) { vips__heif_error(&error); return -1; } error = heif_encoder_set_lossless(heif->encoder, heif->lossless); if (error.code) { vips__heif_error(&error); return -1; } error = heif_encoder_set_parameter_integer(heif->encoder, "speed", 9 - heif->effort); if (error.code && error.subcode != heif_suberror_Unsupported_parameter) { vips__heif_error(&error); return -1; } chroma = heif->subsample_mode == VIPS_FOREIGN_SUBSAMPLE_OFF || (heif->subsample_mode == VIPS_FOREIGN_SUBSAMPLE_AUTO && heif->Q >= 90) ? "444" : "420"; error = heif_encoder_set_parameter_string(heif->encoder, "chroma", chroma); if (error.code && error.subcode != heif_suberror_Unsupported_parameter) { vips__heif_error(&error); return -1; } /* TODO .. support extra per-encoder params with * heif_encoder_list_parameters(). */ heif->page_width = save->ready->Xsize; heif->page_height = vips_image_get_page_height(save->ready); heif->n_pages = save->ready->Ysize / heif->page_height; if (heif->page_width > 16384 || heif->page_height > 16384) { vips_error("heifsave", _("image too large")); return -1; } /* Make a heif image the size of a page. We send sink_disc() output * here and write a frame each time it fills. */ #ifdef DEBUG printf("vips_foreign_save_heif_build:\n"); printf("\twidth = %d\n", heif->page_width); printf("\theight = %d\n", heif->page_height); printf("\talpha = %d\n", vips_image_hasalpha(save->ready)); #endif /*DEBUG*/ error = heif_image_create(heif->page_width, heif->page_height, heif_colorspace_RGB, vips__heif_chroma(heif->bitdepth, vips_image_hasalpha(save->ready)), &heif->img); if (error.code) { vips__heif_error(&error); return -1; } error = heif_image_add_plane(heif->img, heif_channel_interleaved, heif->page_width, heif->page_height, heif->bitdepth); if (error.code) { vips__heif_error(&error); return -1; } #ifdef DEBUG vips__heif_image_print(heif->img); #endif /*DEBUG*/ heif->data = heif_image_get_plane(heif->img, heif_channel_interleaved, &heif->stride); /* Write data. */ if (vips_sink_disc(save->ready, vips_foreign_save_heif_write_block, heif)) return -1; /* This has to come right at the end :-( so there's no support for * incremental writes. */ writer.writer_api_version = 1; writer.write = vips_foreign_save_heif_write; error = heif_context_write(heif->ctx, &writer, heif); if (error.code) { vips__heif_error(&error); return -1; } if (vips_target_end(heif->target)) return -1; return 0; } #define UC VIPS_FORMAT_UCHAR #define US VIPS_FORMAT_USHORT /* Except for 8-bit inputs, we send everything else to 16. We decide on 8-bit * vs. 12 bit save based on Type in_build(), see above. */ static VipsBandFormat vips_heif_bandfmt[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, UC, US, US, US, US, US, US, US, US }; static void vips_foreign_save_heif_class_init(VipsForeignSaveHeifClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class; vips__heif_init(); gobject_class->dispose = vips_foreign_save_heif_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "heifsave_base"; object_class->description = _("save image in HEIF format"); object_class->build = vips_foreign_save_heif_build; save_class->saveable = VIPS_SAVEABLE_RGBA_ONLY; save_class->format_table = vips_heif_bandfmt; VIPS_ARG_INT(class, "Q", 10, _("Q"), _("Q factor"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveHeif, Q), 1, 100, 50); VIPS_ARG_INT(class, "bitdepth", 11, _("Bit depth"), _("Number of bits per pixel"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveHeif, bitdepth), 1, 16, 12); VIPS_ARG_BOOL(class, "lossless", 13, _("Lossless"), _("Enable lossless compression"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveHeif, lossless), FALSE); VIPS_ARG_ENUM(class, "compression", 14, _("Compression"), _("Compression format"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveHeif, compression), VIPS_TYPE_FOREIGN_HEIF_COMPRESSION, VIPS_FOREIGN_HEIF_COMPRESSION_HEVC); VIPS_ARG_INT(class, "effort", 15, _("Effort"), _("CPU effort"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveHeif, effort), 0, 9, 4); VIPS_ARG_ENUM(class, "subsample_mode", 16, _("Subsample mode"), _("Select chroma subsample operation mode"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveHeif, subsample_mode), VIPS_TYPE_FOREIGN_SUBSAMPLE, VIPS_FOREIGN_SUBSAMPLE_AUTO); VIPS_ARG_INT(class, "speed", 17, _("Speed"), _("CPU effort"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsForeignSaveHeif, speed), 0, 9, 5); VIPS_ARG_ENUM(class, "encoder", 18, _("Encoder"), _("Select encoder to use"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveHeif, selected_encoder), VIPS_TYPE_FOREIGN_HEIF_ENCODER, VIPS_FOREIGN_HEIF_ENCODER_AUTO); } static void vips_foreign_save_heif_init(VipsForeignSaveHeif *heif) { heif->ctx = heif_context_alloc(); heif->Q = 50; heif->bitdepth = 12; heif->compression = VIPS_FOREIGN_HEIF_COMPRESSION_HEVC; heif->effort = 4; heif->subsample_mode = VIPS_FOREIGN_SUBSAMPLE_AUTO; /* Deprecated. */ heif->speed = 5; } typedef struct _VipsForeignSaveHeifFile { VipsForeignSaveHeif parent_object; /* Filename for save. */ char *filename; } VipsForeignSaveHeifFile; typedef VipsForeignSaveHeifClass VipsForeignSaveHeifFileClass; G_DEFINE_TYPE(VipsForeignSaveHeifFile, vips_foreign_save_heif_file, vips_foreign_save_heif_get_type()); static int vips_foreign_save_heif_file_build(VipsObject *object) { VipsForeignSaveHeif *heif = (VipsForeignSaveHeif *) object; VipsForeignSaveHeifFile *file = (VipsForeignSaveHeifFile *) object; if (!(heif->target = vips_target_new_to_file(file->filename))) return -1; if (vips_iscasepostfix(file->filename, ".avif")) heif->compression = VIPS_FOREIGN_HEIF_COMPRESSION_AV1; if (VIPS_OBJECT_CLASS(vips_foreign_save_heif_file_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_save_heif_file_class_init(VipsForeignSaveHeifFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "heifsave"; object_class->build = vips_foreign_save_heif_file_build; foreign_class->suffs = vips__heif_suffs; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveHeifFile, filename), NULL); } static void vips_foreign_save_heif_file_init(VipsForeignSaveHeifFile *file) { } typedef struct _VipsForeignSaveHeifBuffer { VipsForeignSaveHeif parent_object; /* Save to a buffer. */ VipsArea *buf; } VipsForeignSaveHeifBuffer; typedef VipsForeignSaveHeifClass VipsForeignSaveHeifBufferClass; G_DEFINE_TYPE(VipsForeignSaveHeifBuffer, vips_foreign_save_heif_buffer, vips_foreign_save_heif_get_type()); static int vips_foreign_save_heif_buffer_build(VipsObject *object) { VipsForeignSaveHeif *heif = (VipsForeignSaveHeif *) object; VipsForeignSaveHeifBuffer *buffer = (VipsForeignSaveHeifBuffer *) object; VipsBlob *blob; if (!(heif->target = vips_target_new_to_memory())) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_save_heif_buffer_parent_class) ->build(object)) return -1; g_object_get(heif->target, "blob", &blob, NULL); g_object_set(buffer, "buffer", blob, NULL); vips_area_unref(VIPS_AREA(blob)); return 0; } static void vips_foreign_save_heif_buffer_class_init( VipsForeignSaveHeifBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "heifsave_buffer"; object_class->build = vips_foreign_save_heif_buffer_build; foreign_class->suffs = vips__heic_suffs; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to save to"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsForeignSaveHeifBuffer, buf), VIPS_TYPE_BLOB); } static void vips_foreign_save_heif_buffer_init(VipsForeignSaveHeifBuffer *buffer) { } typedef struct _VipsForeignSaveHeifTarget { VipsForeignSaveHeif parent_object; VipsTarget *target; } VipsForeignSaveHeifTarget; typedef VipsForeignSaveHeifClass VipsForeignSaveHeifTargetClass; G_DEFINE_TYPE(VipsForeignSaveHeifTarget, vips_foreign_save_heif_target, vips_foreign_save_heif_get_type()); static int vips_foreign_save_heif_target_build(VipsObject *object) { VipsForeignSaveHeif *heif = (VipsForeignSaveHeif *) object; VipsForeignSaveHeifTarget *target = (VipsForeignSaveHeifTarget *) object; if (target->target) { heif->target = target->target; g_object_ref(heif->target); } if (VIPS_OBJECT_CLASS(vips_foreign_save_heif_target_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_save_heif_target_class_init( VipsForeignSaveHeifTargetClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "heifsave_target"; object_class->build = vips_foreign_save_heif_target_build; foreign_class->suffs = vips__heic_suffs; VIPS_ARG_OBJECT(class, "target", 1, _("Target"), _("Target to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveHeifTarget, target), VIPS_TYPE_TARGET); } static void vips_foreign_save_heif_target_init(VipsForeignSaveHeifTarget *target) { } typedef VipsForeignSaveHeifTarget VipsForeignSaveAvifTarget; typedef VipsForeignSaveHeifTargetClass VipsForeignSaveAvifTargetClass; G_DEFINE_TYPE(VipsForeignSaveAvifTarget, vips_foreign_save_avif_target, vips_foreign_save_heif_target_get_type()); static void vips_foreign_save_avif_target_class_init( VipsForeignSaveAvifTargetClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsOperationClass *operation_class = (VipsOperationClass *) class; object_class->nickname = "avifsave_target"; object_class->description = _("save image in AVIF format"); foreign_class->suffs = vips__avif_suffs; /* Hide from UI. */ operation_class->flags |= VIPS_OPERATION_DEPRECATED; } static void vips_foreign_save_avif_target_init(VipsForeignSaveAvifTarget *target) { VipsForeignSaveHeif *heif = (VipsForeignSaveHeif *) target; heif->compression = VIPS_FOREIGN_HEIF_COMPRESSION_AV1; } #endif /*HAVE_HEIF*/ /* The C API wrappers are defined in foreign.c. */ libvips-8.15.1/libvips/foreign/jp2kload.c000066400000000000000000001126231454007373500202460ustar00rootroot00000000000000/* load jpeg2000 * * 18/3/20 * - from heifload.c * 4/11/21 * - add untiled load * 17/1/22 * - left-justify bits for eg. 12-bit read * 13/3/23 MathemanFlo * - add bits per sample metadata */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #ifdef HAVE_LIBOPENJP2 #include #include "pforeign.h" /* Surely enough ... does anyone do multispectral imaging with jp2k? */ #define MAX_BANDS (100) typedef struct _VipsForeignLoadJp2k { VipsForeignLoad parent_object; /* Source to load from (set by subclasses). */ VipsSource *source; /* Page set by user, then we translate that into shrink factor. */ int page; int shrink; /* Decompress state. */ opj_stream_t *stream; /* Source as an opj stream */ OPJ_CODEC_FORMAT format; /* libopenjp2 format */ opj_codec_t *codec; /* Decompress codec */ opj_dparameters_t parameters; /* Core decompress params */ opj_image_t *image; /* Read image to here */ opj_codestream_info_v2_t *info; /* Tile geometry */ /* Number of errors reported during load -- use this to block load of * corrupted images. */ int n_errors; /* If we need to upsample tiles read from opj. */ gboolean upsample; /* If we need to do ycc->rgb conversion on load. */ gboolean ycc_to_rgb; } VipsForeignLoadJp2k; typedef VipsForeignLoadClass VipsForeignLoadJp2kClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignLoadJp2k, vips_foreign_load_jp2k, VIPS_TYPE_FOREIGN_LOAD); static void vips_foreign_load_jp2k_dispose(GObject *gobject) { VipsForeignLoadJp2k *jp2k = (VipsForeignLoadJp2k *) gobject; #ifdef DEBUG printf("vips_foreign_load_jp2k_dispose:\n"); #endif /*DEBUG*/ /* * FIXME ... do we need this? seems to just cause warnings * if (jp2k->codec && jp2k->stream) opj_end_decompress(jp2k->codec, jp2k->stream); * */ if (jp2k->info) opj_destroy_cstr_info(&jp2k->info); VIPS_FREEF(opj_destroy_codec, jp2k->codec); VIPS_FREEF(opj_stream_destroy, jp2k->stream); VIPS_FREEF(opj_image_destroy, jp2k->image); VIPS_UNREF(jp2k->source); G_OBJECT_CLASS(vips_foreign_load_jp2k_parent_class)->dispose(gobject); } static OPJ_SIZE_T vips_foreign_load_jp2k_read_source(void *buffer, size_t length, void *client) { VipsSource *source = VIPS_SOURCE(client); gint64 bytes_read = vips_source_read(source, buffer, length); /* openjpeg read uses -1 for both EOF and error return. */ return bytes_read == 0 ? -1 : bytes_read; } static OPJ_OFF_T vips_foreign_load_jp2k_skip_source(OPJ_OFF_T n_bytes, void *client) { VipsSource *source = VIPS_SOURCE(client); if (vips_source_seek(source, n_bytes, SEEK_CUR) == -1) /* openjpeg skip uses -1 for both end of stream and error. */ return -1; return n_bytes; } static OPJ_BOOL vips_foreign_load_jp2k_seek_source(OPJ_OFF_T position, void *client) { VipsSource *source = VIPS_SOURCE(client); if (vips_source_seek(source, position, SEEK_SET) == -1) /* openjpeg seek uses FALSE for both end of stream and error. */ return OPJ_FALSE; return OPJ_TRUE; } /* Make a libopenjp2 stream that wraps a VipsSource. */ static opj_stream_t * vips_foreign_load_jp2k_stream(VipsSource *source) { opj_stream_t *stream; /* TRUE means a read stream. */ if (!(stream = opj_stream_create(OPJ_J2K_STREAM_CHUNK_SIZE, TRUE))) return NULL; opj_stream_set_user_data(stream, source, NULL); /* Unfortunately, jp2k requires the length, so pipe sources will have * to buffer in memory. */ opj_stream_set_user_data_length(stream, vips_source_length(source)); opj_stream_set_read_function(stream, vips_foreign_load_jp2k_read_source); opj_stream_set_skip_function(stream, vips_foreign_load_jp2k_skip_source); opj_stream_set_seek_function(stream, vips_foreign_load_jp2k_seek_source); return stream; } static int vips_foreign_load_jp2k_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsForeignLoadJp2k *jp2k = (VipsForeignLoadJp2k *) object; #ifdef DEBUG printf("vips_foreign_load_jp2k_build:\n"); #endif /*DEBUG*/ /* Default parameters. */ jp2k->parameters.decod_format = -1; jp2k->parameters.cod_format = -1; opj_set_default_decoder_parameters(&jp2k->parameters); /* Link the openjpeg stream to our VipsSource. */ if (jp2k->source) { jp2k->stream = vips_foreign_load_jp2k_stream(jp2k->source); if (!jp2k->stream) { vips_error(class->nickname, "%s", _("unable to create jp2k stream")); return -1; } } if (VIPS_OBJECT_CLASS(vips_foreign_load_jp2k_parent_class)->build(object)) return -1; return 0; } #define JP2_RFC3745_MAGIC "\x00\x00\x00\x0c\x6a\x50\x20\x20\x0d\x0a\x87\x0a" #define JP2_MAGIC "\x0d\x0a\x87\x0a" /* position 45: "\xff\x52" */ #define J2K_CODESTREAM_MAGIC "\xff\x4f\xff\x51" /* Return the image format. OpenJPEG supports several different image types. */ static OPJ_CODEC_FORMAT vips_foreign_load_jp2k_get_format(VipsSource *source) { unsigned char *data; if (vips_source_sniff_at_most(source, &data, 12) < 12) return -1; /* There's also OPJ_CODEC_JPT for xxx.jpt files, but we don't support * that. */ if (memcmp(data, JP2_RFC3745_MAGIC, 12) == 0 || memcmp(data, JP2_MAGIC, 4) == 0) return OPJ_CODEC_JP2; else if (memcmp(data, J2K_CODESTREAM_MAGIC, 4) == 0) return OPJ_CODEC_J2K; else return -1; } static gboolean vips_foreign_load_jp2k_is_a_source(VipsSource *source) { return vips_foreign_load_jp2k_get_format(source) != -1; } static VipsForeignFlags vips_foreign_load_jp2k_get_flags(VipsForeignLoad *load) { return VIPS_FOREIGN_PARTIAL; } /* The openjpeg info and warning callbacks are incredibly chatty. */ static void vips_foreign_load_jp2k_info_callback(const char *msg, void *client) { #ifdef DEBUG VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(client); g_info("%s: %s", class->nickname, msg); #endif /*DEBUG*/ } /* The openjpeg info and warning callbacks are incredibly chatty. */ static void vips_foreign_load_jp2k_warning_callback(const char *msg, void *client) { #ifdef DEBUG VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(client); g_warning("%s: %s", class->nickname, msg); #endif /*DEBUG*/ } static void vips_foreign_load_jp2k_error_callback(const char *msg, void *client) { VipsForeignLoadJp2k *jp2k = (VipsForeignLoadJp2k *) client; VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(jp2k); #ifdef DEBUG printf("%s: %s", class->nickname, msg); #endif /*DEBUG*/ vips_error(class->nickname, "%s", msg); jp2k->n_errors += 1; } static void vips_foreign_load_jp2k_attach_handlers(VipsForeignLoadJp2k *jp2k, opj_codec_t *codec) { opj_set_info_handler(codec, vips_foreign_load_jp2k_info_callback, jp2k); opj_set_warning_handler(codec, vips_foreign_load_jp2k_warning_callback, jp2k); opj_set_error_handler(codec, vips_foreign_load_jp2k_error_callback, jp2k); } #ifdef DEBUG static void vips_foreign_load_jp2k_print_image(opj_image_t *image) { printf("image:\n"); printf("x0 = %u, y0 = %u, x1 = %u, y1 = %u, numcomps = %u, " "color_space = %u\n", image->x0, image->y0, image->x1, image->y1, image->numcomps, image->color_space); printf("icc_profile_buf = %p, icc_profile_len = %x\n", image->icc_profile_buf, image->icc_profile_len); } static void vips_foreign_load_jp2k_print(VipsForeignLoadJp2k *jp2k) { int i; vips_foreign_load_jp2k_print_image(jp2k->image); printf("components:\n"); for (i = 0; i < jp2k->image->numcomps; i++) { opj_image_comp_t *this = &jp2k->image->comps[i]; printf("%i) dx = %u, dy = %u, w = %u, h = %u, " "x0 = %u, y0 = %u\n", i, this->dx, this->dy, this->w, this->h, this->x0, this->y0); printf(" prec = %d, sgnd = %x, " "resno_decoded = %u, factor = %u\n", this->prec, this->sgnd, this->resno_decoded, this->factor); printf(" data = %p, alpha = %u\n", this->data, this->alpha); } printf("info:\n"); printf("tx0 = %u, ty0 = %d, tdx = %u, tdy = %u, tw = %u, th = %u\n", jp2k->info->tx0, jp2k->info->ty0, jp2k->info->tdx, jp2k->info->tdy, jp2k->info->tw, jp2k->info->th); printf("nbcomps = %u, tile_info = %p\n", jp2k->info->nbcomps, jp2k->info->tile_info); if (jp2k->info->tw == 1 && jp2k->info->th == 1) printf("untiled\n"); } #endif /*DEBUG*/ static int vips_foreign_load_jp2k_set_header(VipsForeignLoadJp2k *jp2k, VipsImage *out) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(jp2k); opj_image_comp_t *first = &jp2k->image->comps[0]; VipsBandFormat format; VipsInterpretation interpretation; /* OpenJPEG only supports up to 31 bits per pixel. Treat it as 32. */ if (first->prec <= 8) format = first->sgnd ? VIPS_FORMAT_CHAR : VIPS_FORMAT_UCHAR; else if (first->prec <= 16) format = first->sgnd ? VIPS_FORMAT_SHORT : VIPS_FORMAT_USHORT; else format = first->sgnd ? VIPS_FORMAT_INT : VIPS_FORMAT_UINT; switch (jp2k->image->color_space) { case OPJ_CLRSPC_SYCC: case OPJ_CLRSPC_EYCC: /* Map these to RGB. */ interpretation = vips_format_sizeof(format) == 1 ? VIPS_INTERPRETATION_sRGB : VIPS_INTERPRETATION_RGB16; jp2k->ycc_to_rgb = TRUE; break; case OPJ_CLRSPC_GRAY: interpretation = vips_format_sizeof(format) == 1 ? VIPS_INTERPRETATION_B_W : VIPS_INTERPRETATION_GREY16; break; case OPJ_CLRSPC_SRGB: interpretation = vips_format_sizeof(format) == 1 ? VIPS_INTERPRETATION_sRGB : VIPS_INTERPRETATION_RGB16; break; case OPJ_CLRSPC_CMYK: interpretation = VIPS_INTERPRETATION_CMYK; break; case OPJ_CLRSPC_UNSPECIFIED: /* Try to guess something sensible. */ if (jp2k->image->numcomps < 3) interpretation = vips_format_sizeof(format) == 1 ? VIPS_INTERPRETATION_B_W : VIPS_INTERPRETATION_GREY16; else interpretation = vips_format_sizeof(format) == 1 ? VIPS_INTERPRETATION_sRGB : VIPS_INTERPRETATION_RGB16; /* Unspecified with three bands and subsampling on bands 2 and * 3 is usually YCC. */ if (jp2k->image->numcomps == 3 && jp2k->image->comps[0].dx == 1 && jp2k->image->comps[0].dy == 1 && jp2k->image->comps[1].dx > 1 && jp2k->image->comps[1].dy > 1 && jp2k->image->comps[2].dx > 1 && jp2k->image->comps[2].dy > 1) jp2k->ycc_to_rgb = TRUE; break; default: vips_error(class->nickname, _("unsupported colourspace %d"), jp2k->image->color_space); return -1; } /* We use a tilecache on our output. */ if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_SMALLTILE, NULL)) return -1; vips_image_init_fields(out, first->w, first->h, jp2k->image->numcomps, format, VIPS_CODING_NONE, interpretation, 1.0, 1.0); /* openjpeg allows left and top of the coordinate grid to be * non-zero. These are always in unshrunk coordinates. */ out->Xoffset = -VIPS_ROUND_INT((double) jp2k->image->x0 / jp2k->shrink); out->Yoffset = -VIPS_ROUND_INT((double) jp2k->image->y0 / jp2k->shrink); if (jp2k->image->icc_profile_buf && jp2k->image->icc_profile_len > 0) vips_image_set_blob_copy(out, VIPS_META_ICC_NAME, jp2k->image->icc_profile_buf, jp2k->image->icc_profile_len); /* Map number of layers in image to pages. */ if (jp2k->info && jp2k->info->m_default_tile_info.tccp_info) vips_image_set_int(out, VIPS_META_N_PAGES, jp2k->info->m_default_tile_info.tccp_info->numresolutions); vips_image_set_int(out, VIPS_META_BITS_PER_SAMPLE, first->prec); return 0; } static int vips_foreign_load_jp2k_header(VipsForeignLoad *load) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load); VipsForeignLoadJp2k *jp2k = (VipsForeignLoadJp2k *) load; opj_image_comp_t *first; int i; #ifdef DEBUG printf("vips_foreign_load_jp2k_header:\n"); #endif /*DEBUG*/ jp2k->format = vips_foreign_load_jp2k_get_format(jp2k->source); vips_source_rewind(jp2k->source); if (!(jp2k->codec = opj_create_decompress(jp2k->format))) return -1; vips_foreign_load_jp2k_attach_handlers(jp2k, jp2k->codec); jp2k->shrink = 1 << jp2k->page; jp2k->parameters.cp_reduce = jp2k->page; if (!opj_setup_decoder(jp2k->codec, &jp2k->parameters)) return -1; opj_codec_set_threads(jp2k->codec, vips_concurrency_get()); if (!opj_read_header(jp2k->stream, jp2k->codec, &jp2k->image)) return -1; if (!(jp2k->info = opj_get_cstr_info(jp2k->codec))) return -1; #ifdef DEBUG vips_foreign_load_jp2k_print(jp2k); #endif /*DEBUG*/ /* We only allow images where all components have the same format. */ if (jp2k->image->numcomps > MAX_BANDS) { vips_error(class->nickname, "%s", _("too many image bands")); return -1; } if (jp2k->image->numcomps == 0) { vips_error(class->nickname, "%s", _("no image components")); return -1; } first = &jp2k->image->comps[0]; for (i = 1; i < jp2k->image->numcomps; i++) { opj_image_comp_t *this = &jp2k->image->comps[i]; if (this->x0 != first->x0 || this->y0 != first->y0 || this->w * this->dx != first->w * first->dx || this->h * this->dy != first->h * first->dy || this->resno_decoded != first->resno_decoded || this->factor != first->factor) { vips_error(class->nickname, "%s", _("components differ in geometry")); return -1; } if (this->prec != first->prec || this->sgnd != first->sgnd) { vips_error(class->nickname, "%s", _("components differ in precision")); return -1; } /* If dx/dy are not 1, we'll need to upsample components during * tile packing. */ if (this->dx != first->dx || this->dy != first->dy || first->dx != 1 || first->dy != 1) jp2k->upsample = TRUE; } if (vips_foreign_load_jp2k_set_header(jp2k, load->out)) return -1; VIPS_SETSTR(load->out->filename, vips_connection_filename(VIPS_CONNECTION(jp2k->source))); return 0; } #define PACK(TYPE) \ { \ TYPE *tq = (TYPE *) q; \ \ for (x = 0; x < length; x++) { \ for (i = 0; i < b; i++) \ tq[i] = planes[i][x]; \ \ tq += b; \ } \ } #define PACK_UPSAMPLE(TYPE) \ { \ TYPE *tq = (TYPE *) q; \ \ for (x = 0; x < length; x++) { \ for (i = 0; i < b; i++) { \ int dx = image->comps[i].dx; \ int pixel = planes[i][x / dx]; \ \ tq[i] = pixel; \ } \ \ tq += b; \ } \ } /* Pack a line of openjpeg pixels into libvips format. left/top are the * offsets into the opj image in pixel coordinates where we should start * reading. * * Set upsample if any opj component is subsampled. */ static void vips_foreign_load_jp2k_pack(gboolean upsample, opj_image_t *image, VipsImage *im, VipsPel *q, int left, int top, int length) { int *planes[MAX_BANDS]; int b = image->numcomps; int x, i; #ifdef DEBUG_VERBOSE printf("vips_foreign_load_jp2k_pack: " "upsample = %d, left = %d, top = %d, length = %d\n", upsample, left, top, length); #endif /*DEBUG_VERBOSE*/ for (i = 0; i < b; i++) { opj_image_comp_t *comp = &image->comps[i]; planes[i] = comp->data + (top / comp->dy) * comp->w + (left / comp->dx); } if (upsample) switch (im->BandFmt) { case VIPS_FORMAT_CHAR: case VIPS_FORMAT_UCHAR: PACK_UPSAMPLE(unsigned char); break; case VIPS_FORMAT_SHORT: case VIPS_FORMAT_USHORT: PACK_UPSAMPLE(unsigned short); break; case VIPS_FORMAT_INT: case VIPS_FORMAT_UINT: PACK_UPSAMPLE(unsigned int); break; default: g_assert_not_reached(); break; } else /* Fast no-upsample path. */ switch (im->BandFmt) { case VIPS_FORMAT_CHAR: case VIPS_FORMAT_UCHAR: PACK(unsigned char); break; case VIPS_FORMAT_SHORT: case VIPS_FORMAT_USHORT: PACK(unsigned short); break; case VIPS_FORMAT_INT: case VIPS_FORMAT_UINT: PACK(unsigned int); break; default: g_assert_not_reached(); break; } } /* ycc->rgb conversion adapted from openjpeg src/bin/common/color.c * * See also https://en.wikipedia.org/wiki/YCbCr#JPEG_conversion */ #define YCC_TO_RGB(TYPE) \ { \ TYPE *tq = (TYPE *) q; \ \ for (x = 0; x < length; x++) { \ int y = tq[0]; \ int cb = tq[1] - offset; \ int cr = tq[2] - offset; \ \ int r, g, b; \ \ r = y + (int) (1.402 * (float) cr); \ tq[0] = VIPS_CLIP(0, r, upb); \ \ g = y - (int) (0.344 * (float) cb + 0.714 * (float) cr); \ tq[1] = VIPS_CLIP(0, g, upb); \ \ b = y + (int) (1.772 * (float) cb); \ tq[2] = VIPS_CLIP(0, b, upb); \ \ tq += 3; \ } \ } /* YCC->RGB for a line of pels. */ static void vips_foreign_load_jp2k_ycc_to_rgb(opj_image_t *image, VipsImage *im, VipsPel *q, int length) { int prec = image->comps[0].prec; int offset = 1 << (prec - 1); int upb = (1 << prec) - 1; int x; switch (im->BandFmt) { case VIPS_FORMAT_CHAR: case VIPS_FORMAT_UCHAR: YCC_TO_RGB(unsigned char); break; case VIPS_FORMAT_SHORT: case VIPS_FORMAT_USHORT: YCC_TO_RGB(unsigned short); break; case VIPS_FORMAT_INT: case VIPS_FORMAT_UINT: YCC_TO_RGB(unsigned int); break; default: g_assert_not_reached(); break; } } #define LSHIFT(TYPE) \ { \ TYPE *tq = (TYPE *) q; \ \ for (x = 0; x < n_elements; x++) \ tq[x] = VIPS_LSHIFT_INT(tq[x], shift); \ } /* Left-justify to the libvips pixel bits. We need 12 bit precision images * (for example) to fill 0-65535. */ static void vips_foreign_load_jp2k_ljust(opj_image_t *image, VipsImage *im, VipsPel *q, int length) { int prec = image->comps[0].prec; int shift = VIPS_IMAGE_SIZEOF_ELEMENT(im) * 8 - prec; if (shift != 0) { int n_elements = length * im->Bands; int x; switch (im->BandFmt) { case VIPS_FORMAT_CHAR: case VIPS_FORMAT_UCHAR: LSHIFT(unsigned char); break; case VIPS_FORMAT_SHORT: case VIPS_FORMAT_USHORT: LSHIFT(unsigned short); break; case VIPS_FORMAT_INT: case VIPS_FORMAT_UINT: LSHIFT(unsigned int); break; default: g_assert_not_reached(); break; } } } /* Read a tile from an untiled jp2k file. */ static int vips_foreign_load_jp2k_generate_untiled(VipsRegion *out, void *seq, void *a, void *b, gboolean *stop) { VipsForeignLoad *load = (VipsForeignLoad *) a; VipsForeignLoadJp2k *jp2k = (VipsForeignLoadJp2k *) load; VipsRect *r = &out->valid; VipsRect opj; VipsRect image; int y; #ifdef DEBUG_VERBOSE printf("vips_foreign_load_jp2k_generate_untiled: " "left = %d, top = %d, width = %d, height = %d\n", r->left, r->top, r->width, r->height); #endif /*DEBUG_VERBOSE*/ /* If openjpeg has flagged an error, the library is not in a known * state and it's not safe to call again. */ if (jp2k->n_errors) return 0; /* Coordinates are always in the highest res level. */ opj.left = r->left * jp2k->shrink; opj.top = r->top * jp2k->shrink; opj.width = r->width * jp2k->shrink; opj.height = r->height * jp2k->shrink; /* And must be clipped against the image size. */ image.left = 0; image.top = 0; image.width = jp2k->info->tdx; image.height = jp2k->info->tdy; vips_rect_intersectrect(&opj, &image, &opj); if (!opj_set_decode_area(jp2k->codec, jp2k->image, opj.left, opj.top, VIPS_RECT_RIGHT(&opj), VIPS_RECT_BOTTOM(&opj))) return -1; if (!opj_decode(jp2k->codec, jp2k->stream, jp2k->image)) return -1; /* Unpack decoded pixels to buffer in vips layout. */ for (y = 0; y < r->height; y++) { VipsPel *q = VIPS_REGION_ADDR(out, r->left, r->top + y); vips_foreign_load_jp2k_pack(jp2k->upsample, jp2k->image, out->im, q, 0, y, r->width); if (jp2k->ycc_to_rgb) vips_foreign_load_jp2k_ycc_to_rgb(jp2k->image, out->im, q, r->width); vips_foreign_load_jp2k_ljust(jp2k->image, out->im, q, r->width); } /* jp2k files can't be truncated (they fail to open), so all we can * spot is errors. */ if (load->fail_on >= VIPS_FAIL_ON_ERROR && jp2k->n_errors > 0) return -1; return 0; } /* Read a tile from the file. libvips tiles can be much larger or smaller than * openjpeg tiles, so we must loop over the output region, painting in * tiles from the file. */ static int vips_foreign_load_jp2k_generate_tiled(VipsRegion *out, void *seq, void *a, void *b, gboolean *stop) { VipsForeignLoad *load = (VipsForeignLoad *) a; VipsForeignLoadJp2k *jp2k = (VipsForeignLoadJp2k *) load; VipsRect *r = &out->valid; /* jp2k get smaller with the layer size. */ int tile_width = VIPS_ROUND_UINT( (double) jp2k->info->tdx / jp2k->shrink); int tile_height = VIPS_ROUND_UINT( (double) jp2k->info->tdy / jp2k->shrink); /* ... so tiles_across is always the same. */ int tiles_across = jp2k->info->tw; int x, y, z; #ifdef DEBUG_VERBOSE printf("vips_foreign_load_jp2k_generate: " "left = %d, top = %d, width = %d, height = %d\n", r->left, r->top, r->width, r->height); #endif /*DEBUG_VERBOSE*/ /* If openjpeg has flagged an error, the library is not in a known * state and it's not safe to call again. */ if (jp2k->n_errors) return 0; y = 0; while (y < r->height) { VipsRect tile, hit; /* Not necessary, but it stops static analyzers complaining * about a used-before-set. */ hit.height = 0; x = 0; while (x < r->width) { /* Tile the xy falls in, in tile numbers. */ int tx = (r->left + x) / tile_width; int ty = (r->top + y) / tile_height; /* Pixel coordinates of the tile that xy falls in. */ int xs = tx * tile_width; int ys = ty * tile_height; int tile_index = ty * tiles_across + tx; /* Fetch the tile. */ #ifdef DEBUG_VERBOSE printf(" fetch tile %d\n", tile_index); #endif /*DEBUG_VERBOSE*/ if (!opj_get_decoded_tile(jp2k->codec, jp2k->stream, jp2k->image, tile_index)) return -1; /* Intersect tile with request to get pixels we need * to copy out. */ tile.left = xs; tile.top = ys; tile.width = tile_width; tile.height = tile_height; vips_rect_intersectrect(&tile, r, &hit); /* Unpack hit pixels to buffer in vips layout. */ for (z = 0; z < hit.height; z++) { VipsPel *q = VIPS_REGION_ADDR(out, hit.left, hit.top + z); vips_foreign_load_jp2k_pack(jp2k->upsample, jp2k->image, out->im, q, hit.left - tile.left, hit.top - tile.top + z, hit.width); if (jp2k->ycc_to_rgb) vips_foreign_load_jp2k_ycc_to_rgb( jp2k->image, out->im, q, hit.width); vips_foreign_load_jp2k_ljust(jp2k->image, out->im, q, hit.width); } x += hit.width; } /* This will be the same for all tiles in the row we've just * done. */ y += hit.height; } /* jp2k files can't be truncated (they fail to open), so all we can * spot is errors. */ if (load->fail_on >= VIPS_FAIL_ON_ERROR && jp2k->n_errors > 0) return -1; return 0; } static int vips_foreign_load_jp2k_load(VipsForeignLoad *load) { VipsForeignLoadJp2k *jp2k = (VipsForeignLoadJp2k *) load; VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(load), 3); int vips_tile_width; int vips_tile_height; int vips_tiles_across; #ifdef DEBUG printf("vips_foreign_load_jp2k_load:\n"); #endif /*DEBUG*/ t[0] = vips_image_new(); if (vips_foreign_load_jp2k_set_header(jp2k, t[0])) return -1; /* Untiled jp2k images need a different read API. */ if (jp2k->info->tw == 1 && jp2k->info->th == 1) { vips_tile_width = 512; vips_tile_height = 512; vips_tiles_across = VIPS_ROUND_UP(t[0]->Xsize, vips_tile_width) / vips_tile_width; if (vips_image_generate(t[0], NULL, vips_foreign_load_jp2k_generate_untiled, NULL, jp2k, NULL)) return -1; } else { vips_tile_width = jp2k->info->tdx; vips_tile_height = jp2k->info->tdy; vips_tiles_across = jp2k->info->tw; if (vips_image_generate(t[0], NULL, vips_foreign_load_jp2k_generate_tiled, NULL, jp2k, NULL)) return -1; } /* Copy to out, adding a cache. Enough tiles for two complete * rows, plus 50%. */ if (vips_tilecache(t[0], &t[1], "tile_width", vips_tile_width, "tile_height", vips_tile_height, "max_tiles", 3 * vips_tiles_across, NULL)) return -1; if (vips_image_write(t[1], load->real)) return -1; return 0; } static void vips_foreign_load_jp2k_class_init(VipsForeignLoadJp2kClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->dispose = vips_foreign_load_jp2k_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jp2kload_base"; object_class->description = _("load JPEG2000 image"); object_class->build = vips_foreign_load_jp2k_build; /* OpenJPEG is fuzzed, but not by us. */ operation_class->flags |= VIPS_OPERATION_UNTRUSTED; load_class->get_flags = vips_foreign_load_jp2k_get_flags; load_class->header = vips_foreign_load_jp2k_header; load_class->load = vips_foreign_load_jp2k_load; VIPS_ARG_INT(class, "page", 20, _("Page"), _("Load this page from the image"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadJp2k, page), 0, 100000, 0); } static void vips_foreign_load_jp2k_init(VipsForeignLoadJp2k *jp2k) { } typedef struct _VipsForeignLoadJp2kFile { VipsForeignLoadJp2k parent_object; /* Filename for load. */ char *filename; } VipsForeignLoadJp2kFile; typedef VipsForeignLoadJp2kClass VipsForeignLoadJp2kFileClass; G_DEFINE_TYPE(VipsForeignLoadJp2kFile, vips_foreign_load_jp2k_file, vips_foreign_load_jp2k_get_type()); static int vips_foreign_load_jp2k_file_build(VipsObject *object) { VipsForeignLoadJp2k *jp2k = (VipsForeignLoadJp2k *) object; VipsForeignLoadJp2kFile *file = (VipsForeignLoadJp2kFile *) object; if (file->filename && !(jp2k->source = vips_source_new_from_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_jp2k_file_parent_class) ->build(object)) return -1; return 0; } const char *vips__jp2k_suffs[] = { ".j2k", ".jp2", ".jpt", ".j2c", ".jpc", NULL }; static int vips_foreign_load_jp2k_is_a(const char *filename) { VipsSource *source; gboolean result; if (!(source = vips_source_new_from_file(filename))) return FALSE; result = vips_foreign_load_jp2k_is_a_source(source); VIPS_UNREF(source); return result; } static void vips_foreign_load_jp2k_file_class_init( VipsForeignLoadJp2kFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jp2kload"; object_class->build = vips_foreign_load_jp2k_file_build; foreign_class->suffs = vips__jp2k_suffs; load_class->is_a = vips_foreign_load_jp2k_is_a; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadJp2kFile, filename), NULL); } static void vips_foreign_load_jp2k_file_init(VipsForeignLoadJp2kFile *jp2k) { } typedef struct _VipsForeignLoadJp2kBuffer { VipsForeignLoadJp2k parent_object; /* Load from a buffer. */ VipsArea *buf; } VipsForeignLoadJp2kBuffer; typedef VipsForeignLoadJp2kClass VipsForeignLoadJp2kBufferClass; G_DEFINE_TYPE(VipsForeignLoadJp2kBuffer, vips_foreign_load_jp2k_buffer, vips_foreign_load_jp2k_get_type()); static int vips_foreign_load_jp2k_buffer_build(VipsObject *object) { VipsForeignLoadJp2k *jp2k = (VipsForeignLoadJp2k *) object; VipsForeignLoadJp2kBuffer *buffer = (VipsForeignLoadJp2kBuffer *) object; if (buffer->buf) if (!(jp2k->source = vips_source_new_from_memory( VIPS_AREA(buffer->buf)->data, VIPS_AREA(buffer->buf)->length))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_jp2k_file_parent_class) ->build(object)) return -1; return 0; } static gboolean vips_foreign_load_jp2k_buffer_is_a(const void *buf, size_t len) { VipsSource *source; gboolean result; if (!(source = vips_source_new_from_memory(buf, len))) return FALSE; result = vips_foreign_load_jp2k_is_a_source(source); VIPS_UNREF(source); return result; } static void vips_foreign_load_jp2k_buffer_class_init( VipsForeignLoadJp2kBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jp2kload_buffer"; object_class->build = vips_foreign_load_jp2k_buffer_build; load_class->is_a_buffer = vips_foreign_load_jp2k_buffer_is_a; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadJp2kBuffer, buf), VIPS_TYPE_BLOB); } static void vips_foreign_load_jp2k_buffer_init(VipsForeignLoadJp2kBuffer *buffer) { } typedef struct _VipsForeignLoadJp2kSource { VipsForeignLoadJp2k parent_object; /* Load from a source. */ VipsSource *source; } VipsForeignLoadJp2kSource; typedef VipsForeignLoadJp2kClass VipsForeignLoadJp2kSourceClass; G_DEFINE_TYPE(VipsForeignLoadJp2kSource, vips_foreign_load_jp2k_source, vips_foreign_load_jp2k_get_type()); static int vips_foreign_load_jp2k_source_build(VipsObject *object) { VipsForeignLoadJp2k *jp2k = (VipsForeignLoadJp2k *) object; VipsForeignLoadJp2kSource *source = (VipsForeignLoadJp2kSource *) object; if (source->source) { jp2k->source = source->source; g_object_ref(jp2k->source); } if (VIPS_OBJECT_CLASS(vips_foreign_load_jp2k_source_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_load_jp2k_source_class_init( VipsForeignLoadJp2kSourceClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jp2kload_source"; object_class->build = vips_foreign_load_jp2k_source_build; operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_jp2k_is_a_source; VIPS_ARG_OBJECT(class, "source", 1, _("Source"), _("Source to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadJp2kSource, source), VIPS_TYPE_SOURCE); } static void vips_foreign_load_jp2k_source_init( VipsForeignLoadJp2kSource *jp2k) { } static void info_callback(const char *msg G_GNUC_UNUSED, void *data G_GNUC_UNUSED) { /* There's a lot of info as well ... */ #ifdef DEBUG printf("info_callback: %s\n", msg); #endif /*DEBUG*/ } static void warning_callback(const char *msg G_GNUC_UNUSED, void *data G_GNUC_UNUSED) { /* There are a lot of warnings ... */ #ifdef DEBUG printf("warning_callback: %s\n", msg); #endif /*DEBUG*/ } static void error_callback(const char *msg, void *data) { #ifdef DEBUG printf("error_callback: %s\n", msg); #endif /*DEBUG*/ vips_error("OpenJPEG", "%s", msg); } typedef struct _TileDecompress { VipsSource *source; opj_stream_t *stream; opj_codec_t *codec; opj_image_t *image; } TileDecompress; static void vips__foreign_load_jp2k_decompress_free(TileDecompress *decompress) { VIPS_FREEF(opj_destroy_codec, decompress->codec); VIPS_FREEF(opj_image_destroy, decompress->image); VIPS_FREEF(opj_stream_destroy, decompress->stream); VIPS_UNREF(decompress->source); } /* Called from tiff2vips to decode a jp2k-compressed tile. * * width/height is the tile size. If this is an edge tile, and smaller than * this, we still write a full-size tile and our caller will clip. */ int vips__foreign_load_jp2k_decompress(VipsImage *out, int width, int height, gboolean ycc_to_rgb, void *from, size_t from_length, void *to, size_t to_length) { size_t pel_size = VIPS_IMAGE_SIZEOF_PEL(out); size_t line_size = pel_size * width; TileDecompress decompress = { 0 }; opj_dparameters_t parameters; int i; gboolean upsample; VipsPel *q; int y; #ifdef DEBUG printf("vips__foreign_load_jp2k_decompress: width = %d, height = %d, " "ycc_to_rgb = %d, from_length = %zd, to_length = %zd\n", width, height, ycc_to_rgb, from_length, to_length); #endif /*DEBUG*/ /* Our ycc->rgb only works for exactly 3 bands. */ ycc_to_rgb = ycc_to_rgb && out->Bands == 3; opj_set_default_decoder_parameters(¶meters); decompress.codec = opj_create_decompress(OPJ_CODEC_J2K); opj_set_info_handler(decompress.codec, info_callback, NULL); opj_set_warning_handler(decompress.codec, warning_callback, NULL); opj_set_error_handler(decompress.codec, error_callback, NULL); opj_setup_decoder(decompress.codec, ¶meters); decompress.source = vips_source_new_from_memory(from, from_length); decompress.stream = vips_foreign_load_jp2k_stream(decompress.source); if (!opj_read_header(decompress.stream, decompress.codec, &decompress.image)) { vips_error("jp2kload", "%s", ("header error")); vips__foreign_load_jp2k_decompress_free(&decompress); return -1; } if (decompress.image->x1 > width || decompress.image->y1 > height || line_size * height > to_length) { vips_error("jp2kload", "%s", ("bad dimensions")); vips__foreign_load_jp2k_decompress_free(&decompress); return -1; } if (!opj_decode(decompress.codec, decompress.stream, decompress.image)) { vips_error("jp2kload", "%s", ("decode error")); vips__foreign_load_jp2k_decompress_free(&decompress); return -1; } /* Do any components need upsampling? */ upsample = FALSE; for (i = 0; i < decompress.image->numcomps; i++) { opj_image_comp_t *this = &decompress.image->comps[i]; if (this->dx > 1 || this->dy > 1) upsample = TRUE; } /* Unpack hit pixels to buffer in vips layout. */ q = to; for (y = 0; y < height; y++) { vips_foreign_load_jp2k_pack(upsample, decompress.image, out, q, 0, y, width); if (ycc_to_rgb) vips_foreign_load_jp2k_ycc_to_rgb( decompress.image, out, q, width); vips_foreign_load_jp2k_ljust(decompress.image, out, q, width); q += line_size; } vips__foreign_load_jp2k_decompress_free(&decompress); return 0; } #else /*!HAVE_LIBOPENJP2*/ int vips__foreign_load_jp2k_decompress(VipsImage *out, int width, int height, gboolean ycc_to_rgb, void *from, size_t from_length, void *to, size_t to_length) { vips_error("jp2k", "%s", _("libvips built without JPEG2000 support")); return -1; } #endif /*HAVE_LIBOPENJP2*/ /** * vips_jp2kload: * @filename: file to load * @out: (out): decompressed image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @page: %gint, load this page * * @fail_on: #VipsFailOn, types of read error to fail on * * Read a JPEG2000 image. The loader supports 8, 16 and 32-bit int pixel * values, signed and unsigned. It supports greyscale, RGB, YCC, CMYK and * multispectral colour spaces. It will read any ICC profile on the image. * * It will only load images where all channels have the same format. * * Use @page to set the page to load, where page 0 is the base resolution * image and higher-numbered pages are x2 reductions. Use the metadata item * "n-pages" to find the number of pyramid layers. * * Use @fail_on to set the type of error that will cause load to fail. By * default, loaders are permissive, that is, #VIPS_FAIL_ON_NONE. * * See also: vips_image_new_from_file(). * * Returns: 0 on success, -1 on error. */ int vips_jp2kload(const char *filename, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("jp2kload", ap, filename, out); va_end(ap); return result; } /** * vips_jp2kload_buffer: * @buf: (array length=len) (element-type guint8): memory area to load * @len: (type gsize): size of memory area * @out: (out): image to write * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @page: %gint, load this page * * @fail_on: #VipsFailOn, types of read error to fail on * * Exactly as vips_jp2kload(), but read from a buffer. * * You must not free the buffer while @out is active. The * #VipsObject::postclose signal on @out is a good place to free. * * Returns: 0 on success, -1 on error. */ int vips_jp2kload_buffer(void *buf, size_t len, VipsImage **out, ...) { va_list ap; VipsBlob *blob; int result; /* We don't take a copy of the data or free it. */ blob = vips_blob_new(NULL, buf, len); va_start(ap, out); result = vips_call_split("jp2kload_buffer", ap, blob, out); va_end(ap); vips_area_unref(VIPS_AREA(blob)); return result; } /** * vips_jp2kload_source: * @source: source to load from * @out: (out): decompressed image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @page: %gint, load this page * * @fail_on: #VipsFailOn, types of read error to fail on * * Exactly as vips_jp2kload(), but read from a source. * * Returns: 0 on success, -1 on error. */ int vips_jp2kload_source(VipsSource *source, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("jp2kload_source", ap, source, out); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/jp2ksave.c000066400000000000000000001110571454007373500202650ustar00rootroot00000000000000/* save as jpeg2000 * * 18/3/20 * - from jp2kload.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ /* TODO * * - could support tiff-like depth parameter * * - could support png-like bitdepth parameter * * - could support cp_comment field? not very useful * */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #ifdef HAVE_LIBOPENJP2 #include #include "pforeign.h" /* Surely enough ... does anyone do multispectral imaging with jp2k? */ #define MAX_BANDS (100) typedef struct _VipsForeignSaveJp2k { VipsForeignSave parent_object; /* Where to write (set by subclasses). */ VipsTarget *target; int tile_width; int tile_height; /* Lossless mode. */ gboolean lossless; /* Quality factor. */ int Q; /* Chroma subsample mode. */ VipsForeignSubsample subsample_mode; /* Encoder state. */ opj_stream_t *stream; opj_codec_t *codec; opj_cparameters_t parameters; opj_image_t *image; /* The line of tiles we are building, and the buffer we * unpack to for output. */ VipsRegion *strip; VipsPel *tile_buffer; /* If we need to subsample during unpacking. */ gboolean subsample; /* If we convert RGB to YCC during save. */ gboolean save_as_ycc; /* Accumulate a line of sums here during chroma subsample. */ VipsPel *accumulate; } VipsForeignSaveJp2k; typedef VipsForeignSaveClass VipsForeignSaveJp2kClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignSaveJp2k, vips_foreign_save_jp2k, VIPS_TYPE_FOREIGN_SAVE); static void vips_foreign_save_jp2k_dispose(GObject *gobject) { VipsForeignSaveJp2k *jp2k = (VipsForeignSaveJp2k *) gobject; VIPS_FREEF(opj_destroy_codec, jp2k->codec); VIPS_FREEF(opj_stream_destroy, jp2k->stream); VIPS_FREEF(opj_image_destroy, jp2k->image); VIPS_UNREF(jp2k->target); VIPS_UNREF(jp2k->strip); VIPS_FREE(jp2k->tile_buffer); VIPS_FREE(jp2k->accumulate); G_OBJECT_CLASS(vips_foreign_save_jp2k_parent_class)->dispose(gobject); } static OPJ_SIZE_T vips_foreign_save_jp2k_target_write(void *buffer, size_t length, void *client) { VipsTarget *target = VIPS_TARGET(client); if (vips_target_write(target, buffer, length)) return 0; return length; } static OPJ_BOOL vips_foreign_save_jp2k_target_seek(off_t position, void *client) { VipsTarget *target = VIPS_TARGET(client); if (vips_target_seek(target, position, SEEK_SET) < 0) return FALSE; return TRUE; } static OPJ_OFF_T vips_foreign_save_jp2k_target_skip(off_t offset, void *client) { VipsTarget *target = VIPS_TARGET(client); if (vips_target_seek(target, offset, SEEK_CUR) < 0) return -1; return offset; } /* Make a libopenjp2 output stream that wraps a VipsTarget. */ static opj_stream_t * vips_foreign_save_jp2k_target(VipsTarget *target) { opj_stream_t *stream; /* FALSE means a write stream. */ if (!(stream = opj_stream_create(OPJ_J2K_STREAM_CHUNK_SIZE, FALSE))) return NULL; opj_stream_set_user_data(stream, target, NULL); opj_stream_set_write_function(stream, vips_foreign_save_jp2k_target_write); opj_stream_set_seek_function(stream, vips_foreign_save_jp2k_target_seek); opj_stream_set_skip_function(stream, vips_foreign_save_jp2k_target_skip); return stream; } static void vips_foreign_save_jp2k_error_callback(const char *msg, void *client) { vips_error("jp2ksave", "%s", msg); } /* The openjpeg info and warning callbacks are incredibly chatty. */ static void vips_foreign_save_jp2k_warning_callback(const char *msg, void *client) { #ifdef DEBUG #endif /*DEBUG*/ g_warning("jp2ksave: %s", msg); } static void vips_foreign_save_jp2k_info_callback(const char *msg, void *client) { #ifdef DEBUG #endif /*DEBUG*/ g_info("jp2ksave: %s", msg); } static void vips_foreign_save_jp2k_attach_handlers(opj_codec_t *codec) { opj_set_info_handler(codec, vips_foreign_save_jp2k_info_callback, NULL); opj_set_warning_handler(codec, vips_foreign_save_jp2k_warning_callback, NULL); opj_set_error_handler(codec, vips_foreign_save_jp2k_error_callback, NULL); } /* See also https://en.wikipedia.org/wiki/YCbCr#JPEG_conversion */ #define RGB_TO_YCC(TYPE) \ { \ TYPE *tq = (TYPE *) q; \ \ for (x = 0; x < tile->width; x++) { \ int r = tq[0]; \ int g = tq[1]; \ int b = tq[2]; \ \ int y, cb, cr; \ \ y = 0.299 * r + 0.587 * g + 0.114 * b; \ tq[0] = VIPS_CLIP(0, y, upb); \ \ cb = offset - (int) (0.168736 * r + 0.331264 * g - 0.5 * b); \ tq[1] = VIPS_CLIP(0, cb, upb); \ \ cr = offset - (int) (-0.5 * r + 0.418688 * g + 0.081312 * b); \ tq[2] = VIPS_CLIP(0, cr, upb); \ \ tq += 3; \ } \ } /* In-place RGB->YCC for a line of pels. */ static void vips_foreign_save_jp2k_rgb_to_ycc(VipsRegion *region, VipsRect *tile, int prec) { VipsImage *im = region->im; int offset = 1 << (prec - 1); int upb = (1 << prec) - 1; int x, y; g_assert(im->Bands == 3); for (y = 0; y < tile->height; y++) { VipsPel *q = VIPS_REGION_ADDR(region, tile->left, tile->top + y); switch (im->BandFmt) { case VIPS_FORMAT_CHAR: case VIPS_FORMAT_UCHAR: RGB_TO_YCC(unsigned char); break; case VIPS_FORMAT_SHORT: case VIPS_FORMAT_USHORT: RGB_TO_YCC(unsigned short); break; case VIPS_FORMAT_INT: case VIPS_FORMAT_UINT: RGB_TO_YCC(unsigned int); break; default: g_assert_not_reached(); break; } } } /* Shrink in three stages: * 1. copy the first line of input pels to acc * 2. add subsequent lines in comp.dy. * 3. horizontal average to output line */ #define SHRINK(OUTPUT_TYPE, ACC_TYPE, PIXEL_TYPE) \ { \ ACC_TYPE *acc = (ACC_TYPE *) accumulate; \ OUTPUT_TYPE *tq = (OUTPUT_TYPE *) q; \ const int n_pels = comp->dx * comp->dy; \ \ PIXEL_TYPE *tp; \ ACC_TYPE *ap; \ \ tp = (PIXEL_TYPE *) p; \ for (x = 0; x < tile->width; x++) { \ acc[x] = *tp; \ tp += n_bands; \ } \ \ for (z = 1; z < comp->dy; z++) { \ tp = (PIXEL_TYPE *) (p + z * lskip); \ for (x = 0; x < tile->width; x++) { \ acc[x] += *tp; \ tp += n_bands; \ } \ } \ \ ap = acc; \ for (x = 0; x < output_width; x++) { \ ACC_TYPE sum; \ \ sum = 0; \ for (z = 0; z < comp->dx; z++) \ sum += ap[z]; \ \ tq[x] = (sum + n_pels / 2) / n_pels; \ ap += comp->dx; \ } \ } static void vips_foreign_save_jp2k_unpack_subsample(VipsRegion *region, VipsRect *tile, opj_image_t *image, VipsPel *tile_buffer, VipsPel *accumulate) { VipsImage *im = region->im; size_t sizeof_element = VIPS_REGION_SIZEOF_ELEMENT(region); size_t lskip = VIPS_REGION_LSKIP(region); int n_bands = im->Bands; VipsPel *q; int x, y, z, i; q = tile_buffer; for (i = 0; i < n_bands; i++) { opj_image_comp_t *comp = &image->comps[i]; /* The number of pixels we write for this component. No * padding. */ int output_width = VIPS_ROUND_UINT( (double) tile->width / comp->dx); int output_height = VIPS_ROUND_UINT( (double) tile->height / comp->dy); ; for (y = 0; y < output_height; y++) { VipsPel *p = i * sizeof_element + VIPS_REGION_ADDR(region, tile->left, tile->top + y * comp->dy); /* Shrink a line of pels to q. */ switch (im->BandFmt) { case VIPS_FORMAT_CHAR: SHRINK(signed char, int, signed char); break; case VIPS_FORMAT_UCHAR: SHRINK(unsigned char, int, unsigned char); break; case VIPS_FORMAT_SHORT: SHRINK(signed short, int, signed short); break; case VIPS_FORMAT_USHORT: SHRINK(unsigned short, int, unsigned short); break; case VIPS_FORMAT_INT: SHRINK(signed int, gint64, signed int); break; case VIPS_FORMAT_UINT: SHRINK(unsigned int, gint64, unsigned int); break; default: g_assert_not_reached(); break; } q += sizeof_element * output_width; } } } #define UNPACK(OUT, IN) \ { \ OUT *tq = (OUT *) q; \ IN *tp = (IN *) p + i; \ \ for (x = 0; x < tile->width; x++) { \ tq[x] = *tp; \ tp += b; \ } \ } static void vips_foreign_save_jp2k_unpack(VipsRegion *region, VipsRect *tile, opj_image_t *image, VipsPel *tile_buffer) { VipsImage *im = region->im; size_t sizeof_element = VIPS_REGION_SIZEOF_ELEMENT(region); size_t sizeof_line = sizeof_element * tile->width; size_t sizeof_tile = sizeof_line * tile->height; int b = im->Bands; int x, y, i; for (y = 0; y < tile->height; y++) { VipsPel *p = VIPS_REGION_ADDR(region, tile->left, tile->top + y); for (i = 0; i < b; i++) { VipsPel *q = tile_buffer + i * sizeof_tile + y * sizeof_line; switch (im->BandFmt) { case VIPS_FORMAT_CHAR: case VIPS_FORMAT_UCHAR: UNPACK(unsigned char, unsigned char); break; case VIPS_FORMAT_SHORT: case VIPS_FORMAT_USHORT: UNPACK(unsigned short, unsigned short); break; case VIPS_FORMAT_INT: case VIPS_FORMAT_UINT: UNPACK(unsigned int, unsigned int); break; default: g_assert_not_reached(); break; } } } } static size_t vips_foreign_save_jp2k_sizeof_tile(VipsForeignSaveJp2k *jp2k, VipsRect *tile) { VipsForeignSave *save = (VipsForeignSave *) jp2k; size_t sizeof_element = VIPS_IMAGE_SIZEOF_ELEMENT(save->ready); size_t size; int i; size = 0; for (i = 0; i < jp2k->image->numcomps; i++) { opj_image_comp_t *comp = &jp2k->image->comps[i]; /* The number of pixels we write for this component. Round to * nearest, and we may have to write half-pixels at the edges. */ int output_width = VIPS_ROUND_UINT( (double) tile->width / comp->dx); int output_height = VIPS_ROUND_UINT( (double) tile->height / comp->dy); ; size += output_width * output_height * sizeof_element; } return size; } static int vips_foreign_save_jp2k_write_tiles(VipsForeignSaveJp2k *jp2k) { VipsForeignSave *save = (VipsForeignSave *) jp2k; VipsImage *im = save->ready; int tiles_across = VIPS_ROUND_UP(im->Xsize, jp2k->tile_width) / jp2k->tile_width; int x; for (x = 0; x < im->Xsize; x += jp2k->tile_width) { VipsRect tile; size_t sizeof_tile; int tile_index; tile.left = x; tile.top = jp2k->strip->valid.top; tile.width = jp2k->tile_width; tile.height = jp2k->tile_height; vips_rect_intersectrect(&tile, &jp2k->strip->valid, &tile); if (jp2k->save_as_ycc) vips_foreign_save_jp2k_rgb_to_ycc(jp2k->strip, &tile, jp2k->image->comps[0].prec); if (jp2k->subsample) vips_foreign_save_jp2k_unpack_subsample(jp2k->strip, &tile, jp2k->image, jp2k->tile_buffer, jp2k->accumulate); else vips_foreign_save_jp2k_unpack(jp2k->strip, &tile, jp2k->image, jp2k->tile_buffer); sizeof_tile = vips_foreign_save_jp2k_sizeof_tile(jp2k, &tile); tile_index = tiles_across * tile.top / jp2k->tile_height + x / jp2k->tile_width; if (!opj_write_tile(jp2k->codec, tile_index, (VipsPel *) jp2k->tile_buffer, sizeof_tile, jp2k->stream)) return -1; } return 0; } static int vips_foreign_save_jp2k_write_block(VipsRegion *region, VipsRect *area, void *a) { VipsForeignSaveJp2k *jp2k = (VipsForeignSaveJp2k *) a; VipsForeignSave *save = (VipsForeignSave *) jp2k; #ifdef DEBUG_VERBOSE printf("vips_foreign_save_jp2k_write_block: y = %d, nlines = %d\n", area->top, area->height); #endif /*DEBUG_VERBOSE*/ for (;;) { VipsRect *to = &jp2k->strip->valid; VipsRect hit; VipsRect new; VipsRect image; /* The intersection with the strip is the fresh pixels we * have. */ vips_rect_intersectrect(area, to, &hit); /* Write the new pixels into the strip. */ vips_region_copy(region, jp2k->strip, &hit, hit.left, hit.top); /* Have we failed to reach the bottom of the strip? We must * have run out of fresh pixels, so we are done. */ if (VIPS_RECT_BOTTOM(&hit) != VIPS_RECT_BOTTOM(&jp2k->strip->valid)) break; /* We have reached the bottom of the strip. Write this line of * pixels and move the strip down. */ if (vips_foreign_save_jp2k_write_tiles(jp2k)) return -1; new.left = 0; new.top = jp2k->strip->valid.top + jp2k->tile_height; new.width = save->ready->Xsize; new.height = jp2k->tile_height; image.left = 0; image.top = 0; image.width = save->ready->Xsize; image.height = save->ready->Ysize; vips_rect_intersectrect(&new, &image, &new); /* End of image? */ if (vips_rect_isempty(&new)) break; if (vips_region_buffer(jp2k->strip, &new)) return -1; } return 0; } /* We can't call opj_calloc on win, sadly. */ #define VIPS_OPJ_CALLOC(N, TYPE) \ ((TYPE *) calloc((N), sizeof(TYPE))) /* Allocate an openjpeg image structure. Openjpeg has opj_image_create(), but * that always allocates memory for each channel, and we don't want that when * we are doing tiled write. */ static opj_image_t * vips_opj_image_create(OPJ_UINT32 numcmpts, opj_image_cmptparm_t *cmptparms, OPJ_COLOR_SPACE clrspc, gboolean allocate) { OPJ_UINT32 compno; opj_image_t *image = NULL; if (!(image = VIPS_OPJ_CALLOC(1, opj_image_t))) return NULL; image->color_space = clrspc; image->numcomps = numcmpts; image->comps = VIPS_OPJ_CALLOC(image->numcomps, opj_image_comp_t); if (!image->comps) { opj_image_destroy(image); return NULL; } for (compno = 0; compno < numcmpts; compno++) { opj_image_comp_t *comp = &image->comps[compno]; comp->dx = cmptparms[compno].dx; comp->dy = cmptparms[compno].dy; comp->w = cmptparms[compno].w; comp->h = cmptparms[compno].h; comp->x0 = cmptparms[compno].x0; comp->y0 = cmptparms[compno].y0; comp->prec = cmptparms[compno].prec; comp->sgnd = cmptparms[compno].sgnd; if (comp->h != 0 && (OPJ_SIZE_T) comp->w > SIZE_MAX / comp->h / sizeof(OPJ_INT32)) { opj_image_destroy(image); return NULL; } /* Allocation is optional. */ if (allocate) { size_t bytes = (size_t) comp->w * comp->h * sizeof(OPJ_INT32); comp->data = (OPJ_INT32 *) opj_image_data_alloc(bytes); if (!comp->data) { opj_image_destroy(image); return NULL; } memset(comp->data, 0, bytes); } } return image; } static opj_image_t * vips_foreign_save_jp2k_new_image(VipsImage *im, int width, int height, gboolean subsample, gboolean save_as_ycc, gboolean allocate) { OPJ_COLOR_SPACE color_space; int expected_bands; int bits_per_pixel; opj_image_cmptparm_t comps[MAX_BANDS]; opj_image_t *image; int i; if (im->Bands > MAX_BANDS) return NULL; /* CIELAB etc. do not seem to be well documented. */ switch (im->Type) { case VIPS_INTERPRETATION_B_W: case VIPS_INTERPRETATION_GREY16: color_space = OPJ_CLRSPC_GRAY; expected_bands = 1; break; case VIPS_INTERPRETATION_sRGB: case VIPS_INTERPRETATION_RGB16: color_space = save_as_ycc ? OPJ_CLRSPC_SYCC : OPJ_CLRSPC_SRGB; expected_bands = 3; break; case VIPS_INTERPRETATION_CMYK: color_space = OPJ_CLRSPC_CMYK; expected_bands = 4; break; default: color_space = OPJ_CLRSPC_UNSPECIFIED; expected_bands = im->Bands; break; } switch (im->BandFmt) { case VIPS_FORMAT_CHAR: case VIPS_FORMAT_UCHAR: bits_per_pixel = 8; break; case VIPS_FORMAT_SHORT: case VIPS_FORMAT_USHORT: bits_per_pixel = 16; break; case VIPS_FORMAT_INT: case VIPS_FORMAT_UINT: /* OpenJPEG only supports up to 31. */ bits_per_pixel = 31; break; default: g_assert_not_reached(); break; } for (i = 0; i < im->Bands; i++) { comps[i].dx = (subsample && i > 0) ? 2 : 1; comps[i].dy = (subsample && i > 0) ? 2 : 1; comps[i].w = width; comps[i].h = height; comps[i].x0 = 0; comps[i].y0 = 0; comps[i].prec = bits_per_pixel; comps[i].sgnd = !vips_band_format_isuint(im->BandFmt); } image = vips_opj_image_create(im->Bands, comps, color_space, allocate); image->x1 = width; image->y1 = height; /* Tag alpha channels. */ for (i = 0; i < im->Bands; i++) image->comps[i].alpha = i >= expected_bands; return image; } /* Compression profile derived from the BM's recommendations, see: * * https://purl.pt/24107/1/iPres2013_PDF/An%20Analysis%20of%20Contemporary%20JPEG2000%20Codecs%20for%20Image%20Format%20Migration.pdf * * Some of these settings (eg. numresolution) are overridden later. */ static void vips_foreign_save_jp2k_set_profile(opj_cparameters_t *parameters, gboolean lossless, int Q) { if (lossless) parameters->irreversible = FALSE; else { int i; /* Equivalent command-line flags: * * -I -p RPCL -n 7 \ * -c[256,256],[256,256],[256,256],[256,256],[256,256],[256,256],[256,256] \ * -b 64,64 */ parameters->irreversible = TRUE; parameters->prog_order = OPJ_RPCL; parameters->cblockw_init = 64; parameters->cblockh_init = 64; parameters->cp_disto_alloc = 1; parameters->cp_fixed_quality = TRUE; parameters->tcp_numlayers = 1; parameters->numresolution = 7; /* No idea what this does, but opj_compress sets it. */ parameters->csty = 1; parameters->res_spec = 7; for (i = 0; i < parameters->res_spec; i++) { parameters->prch_init[i] = 256; parameters->prcw_init[i] = 256; parameters->tcp_distoratio[i] = Q + 10 * i; } } } static int vips_foreign_save_jp2k_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsForeignSave *save = (VipsForeignSave *) object; VipsForeignSaveJp2k *jp2k = (VipsForeignSaveJp2k *) object; size_t sizeof_tile; size_t sizeof_line; VipsRect strip_position; if (VIPS_OBJECT_CLASS(vips_foreign_save_jp2k_parent_class)->build(object)) return -1; /* Analyze our arguments. */ if (!vips_band_format_isint(save->ready->BandFmt)) { vips_error(class->nickname, "%s", _("not an integer format")); return -1; } switch (jp2k->subsample_mode) { case VIPS_FOREIGN_SUBSAMPLE_AUTO: jp2k->subsample = !jp2k->lossless && jp2k->Q < 90 && (save->ready->Type == VIPS_INTERPRETATION_sRGB || save->ready->Type == VIPS_INTERPRETATION_RGB16) && save->ready->Bands == 3; break; case VIPS_FOREIGN_SUBSAMPLE_ON: jp2k->subsample = TRUE; break; case VIPS_FOREIGN_SUBSAMPLE_OFF: jp2k->subsample = FALSE; break; default: g_assert_not_reached(); break; } if (jp2k->subsample) jp2k->save_as_ycc = TRUE; /* Set parameters for compressor. */ opj_set_default_encoder_parameters(&jp2k->parameters); /* Set compression profile. */ vips_foreign_save_jp2k_set_profile(&jp2k->parameters, jp2k->lossless, jp2k->Q); /* Always tile. */ jp2k->parameters.tile_size_on = OPJ_TRUE; jp2k->parameters.cp_tdx = jp2k->tile_width; jp2k->parameters.cp_tdy = jp2k->tile_height; /* Makes many-band, non-subsampled images smaller, somehow. */ jp2k->parameters.tcp_mct = save->ready->Bands >= 3 && !jp2k->subsample; /* Number of layers to write. Smallest layer is c. 2^5 on the smallest * axis. */ jp2k->parameters.numresolution = VIPS_MAX(1, log(VIPS_MIN(save->ready->Xsize, save->ready->Ysize)) / log(2) - 5); #ifdef DEBUG printf("vips_foreign_save_jp2k_build: numresolutions = %d\n", jp2k->parameters.numresolution); #endif /*DEBUG*/ /* Set up compressor. */ /* Save as a jp2 file. */ jp2k->codec = opj_create_compress(OPJ_CODEC_JP2); vips_foreign_save_jp2k_attach_handlers(jp2k->codec); /* FALSE means don't alloc memory for image planes (we write in * tiles, not whole images). */ if (!(jp2k->image = vips_foreign_save_jp2k_new_image(save->ready, save->ready->Xsize, save->ready->Ysize, jp2k->subsample, jp2k->save_as_ycc, FALSE))) return -1; if (!opj_setup_encoder(jp2k->codec, &jp2k->parameters, jp2k->image)) return -1; opj_codec_set_threads(jp2k->codec, vips_concurrency_get()); if (!(jp2k->stream = vips_foreign_save_jp2k_target(jp2k->target))) return -1; if (!opj_start_compress(jp2k->codec, jp2k->image, jp2k->stream)) return -1; /* The buffer we repack tiles to for write. Large enough for one * complete tile. */ sizeof_tile = VIPS_IMAGE_SIZEOF_PEL(save->ready) * jp2k->tile_width * jp2k->tile_height; if (!(jp2k->tile_buffer = VIPS_ARRAY(NULL, sizeof_tile, VipsPel))) return -1; /* We need a line of sums for chroma subsample. At worst, gint64. */ sizeof_line = sizeof(gint64) * jp2k->tile_width; if (!(jp2k->accumulate = VIPS_ARRAY(NULL, sizeof_line, VipsPel))) return -1; /* The line of tiles we are building. It's used by the bg thread, so * no ownership. */ jp2k->strip = vips_region_new(save->ready); vips__region_no_ownership(jp2k->strip); /* Position strip at the top of the image, the height of a row of * tiles. */ strip_position.left = 0; strip_position.top = 0; strip_position.width = save->ready->Xsize; strip_position.height = jp2k->tile_height; if (vips_region_buffer(jp2k->strip, &strip_position)) return -1; /* Write data. */ if (vips_sink_disc(save->ready, vips_foreign_save_jp2k_write_block, jp2k)) return -1; opj_end_compress(jp2k->codec, jp2k->stream); if (vips_target_end(jp2k->target)) return -1; return 0; } static void vips_foreign_save_jp2k_class_init(VipsForeignSaveJp2kClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class; gobject_class->dispose = vips_foreign_save_jp2k_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jp2ksave_base"; object_class->description = _("save image in JPEG2000 format"); object_class->build = vips_foreign_save_jp2k_build; foreign_class->suffs = vips__jp2k_suffs; save_class->saveable = VIPS_SAVEABLE_ANY; VIPS_ARG_INT(class, "tile_width", 11, _("Tile width"), _("Tile width in pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJp2k, tile_width), 1, 32768, 512); VIPS_ARG_INT(class, "tile_height", 12, _("Tile height"), _("Tile height in pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJp2k, tile_height), 1, 32768, 512); VIPS_ARG_BOOL(class, "lossless", 13, _("Lossless"), _("Enable lossless compression"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJp2k, lossless), FALSE); VIPS_ARG_ENUM(class, "subsample_mode", 19, _("Subsample mode"), _("Select chroma subsample operation mode"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJp2k, subsample_mode), VIPS_TYPE_FOREIGN_SUBSAMPLE, VIPS_FOREIGN_SUBSAMPLE_OFF); VIPS_ARG_INT(class, "Q", 14, _("Q"), _("Q factor"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJp2k, Q), 1, 100, 48); } static void vips_foreign_save_jp2k_init(VipsForeignSaveJp2k *jp2k) { jp2k->tile_width = 512; jp2k->tile_height = 512; /* Chosen to give about the same filesize as regular jpg Q75. */ jp2k->Q = 48; jp2k->subsample_mode = VIPS_FOREIGN_SUBSAMPLE_OFF; } typedef struct _VipsForeignSaveJp2kFile { VipsForeignSaveJp2k parent_object; /* Filename for save. */ char *filename; } VipsForeignSaveJp2kFile; typedef VipsForeignSaveJp2kClass VipsForeignSaveJp2kFileClass; G_DEFINE_TYPE(VipsForeignSaveJp2kFile, vips_foreign_save_jp2k_file, vips_foreign_save_jp2k_get_type()); static int vips_foreign_save_jp2k_file_build(VipsObject *object) { VipsForeignSaveJp2k *jp2k = (VipsForeignSaveJp2k *) object; VipsForeignSaveJp2kFile *file = (VipsForeignSaveJp2kFile *) object; if (!(jp2k->target = vips_target_new_to_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_save_jp2k_file_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_save_jp2k_file_class_init(VipsForeignSaveJp2kFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jp2ksave"; object_class->build = vips_foreign_save_jp2k_file_build; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJp2kFile, filename), NULL); } static void vips_foreign_save_jp2k_file_init(VipsForeignSaveJp2kFile *file) { } typedef struct _VipsForeignSaveJp2kBuffer { VipsForeignSaveJp2k parent_object; /* Save to a buffer. */ VipsArea *buf; } VipsForeignSaveJp2kBuffer; typedef VipsForeignSaveJp2kClass VipsForeignSaveJp2kBufferClass; G_DEFINE_TYPE(VipsForeignSaveJp2kBuffer, vips_foreign_save_jp2k_buffer, vips_foreign_save_jp2k_get_type()); static int vips_foreign_save_jp2k_buffer_build(VipsObject *object) { VipsForeignSaveJp2k *jp2k = (VipsForeignSaveJp2k *) object; VipsForeignSaveJp2kBuffer *buffer = (VipsForeignSaveJp2kBuffer *) object; VipsBlob *blob; if (!(jp2k->target = vips_target_new_to_memory())) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_save_jp2k_buffer_parent_class) ->build(object)) return -1; g_object_get(jp2k->target, "blob", &blob, NULL); g_object_set(buffer, "buffer", blob, NULL); vips_area_unref(VIPS_AREA(blob)); return 0; } static void vips_foreign_save_jp2k_buffer_class_init( VipsForeignSaveJp2kBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jp2ksave_buffer"; object_class->build = vips_foreign_save_jp2k_buffer_build; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to save to"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsForeignSaveJp2kBuffer, buf), VIPS_TYPE_BLOB); } static void vips_foreign_save_jp2k_buffer_init(VipsForeignSaveJp2kBuffer *buffer) { } typedef struct _VipsForeignSaveJp2kTarget { VipsForeignSaveJp2k parent_object; VipsTarget *target; } VipsForeignSaveJp2kTarget; typedef VipsForeignSaveJp2kClass VipsForeignSaveJp2kTargetClass; G_DEFINE_TYPE(VipsForeignSaveJp2kTarget, vips_foreign_save_jp2k_target, vips_foreign_save_jp2k_get_type()); static int vips_foreign_save_jp2k_target_build(VipsObject *object) { VipsForeignSaveJp2k *jp2k = (VipsForeignSaveJp2k *) object; VipsForeignSaveJp2kTarget *target = (VipsForeignSaveJp2kTarget *) object; if (target->target) { jp2k->target = target->target; g_object_ref(jp2k->target); } if (VIPS_OBJECT_CLASS(vips_foreign_save_jp2k_target_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_save_jp2k_target_class_init( VipsForeignSaveJp2kTargetClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jp2ksave_target"; object_class->build = vips_foreign_save_jp2k_target_build; VIPS_ARG_OBJECT(class, "target", 1, _("Target"), _("Target to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJp2kTarget, target), VIPS_TYPE_TARGET); } static void vips_foreign_save_jp2k_target_init(VipsForeignSaveJp2kTarget *target) { } /* Stuff we track during tile compress. */ typedef struct _TileCompress { opj_codec_t *codec; opj_image_t *image; opj_stream_t *stream; VipsPel *accumulate; } TileCompress; /* Unpack from @tile within @region to the int data pointers on @image with * subsampling. */ static void vips_foreign_save_jp2k_unpack_subsample_image(VipsRegion *region, VipsRect *tile, opj_image_t *image, VipsPel *accumulate) { VipsImage *im = region->im; size_t sizeof_element = VIPS_REGION_SIZEOF_ELEMENT(region); size_t lskip = VIPS_REGION_LSKIP(region); int n_bands = im->Bands; int x, y, z, i; for (i = 0; i < n_bands; i++) { opj_image_comp_t *comp = &image->comps[i]; int *q = comp->data; /* The number of pixels we write for this component. Lines * align to scanlines on comp. */ int output_width = VIPS_ROUND_UINT( (double) comp->w / comp->dx); int output_height = VIPS_ROUND_UINT( (double) comp->h / comp->dy); for (y = 0; y < output_height; y++) { VipsPel *p = i * sizeof_element + VIPS_REGION_ADDR(region, tile->left, tile->top + y * comp->dy); /* Shrink a line of pels to q. */ switch (im->BandFmt) { case VIPS_FORMAT_CHAR: SHRINK(int, int, signed char); break; case VIPS_FORMAT_UCHAR: SHRINK(int, int, unsigned char); break; case VIPS_FORMAT_SHORT: SHRINK(int, int, signed short); break; case VIPS_FORMAT_USHORT: SHRINK(int, int, unsigned short); break; case VIPS_FORMAT_INT: SHRINK(int, gint64, signed int); break; case VIPS_FORMAT_UINT: SHRINK(int, gint64, unsigned int); break; default: g_assert_not_reached(); break; } q += output_width; } } } /* Unpack from @tile within @region to the int data pointers on @image. No * subsampling. */ static void vips_foreign_save_jp2k_unpack_image(VipsRegion *region, VipsRect *tile, opj_image_t *image) { VipsImage *im = region->im; int b = im->Bands; int x, y, i; for (y = 0; y < tile->height; y++) { VipsPel *p = VIPS_REGION_ADDR(region, tile->left, tile->top + y); for (i = 0; i < b; i++) { opj_image_comp_t *comp = &image->comps[i]; int *q = comp->data + y * comp->w; switch (im->BandFmt) { case VIPS_FORMAT_CHAR: case VIPS_FORMAT_UCHAR: UNPACK(int, unsigned char); break; case VIPS_FORMAT_SHORT: case VIPS_FORMAT_USHORT: UNPACK(int, unsigned short); break; case VIPS_FORMAT_INT: case VIPS_FORMAT_UINT: UNPACK(int, unsigned int); break; default: g_assert_not_reached(); break; } } } } static void vips__foreign_save_jp2k_compress_free(TileCompress *compress) { VIPS_FREEF(opj_destroy_codec, compress->codec); VIPS_FREEF(opj_image_destroy, compress->image); VIPS_FREEF(opj_stream_destroy, compress->stream); VIPS_FREE(compress->accumulate); } /* Compress area @tile within @region and write to @target as a @tile_width by * @tile_height jp2k compressed image. This is called from eg. vips2tiff to * write jp2k-compressed tiles. * * You'd think we could reuse things like the encoder between calls but ... * nope, openjpeg does not allow that. */ int vips__foreign_save_jp2k_compress(VipsRegion *region, VipsRect *tile, VipsTarget *target, int tile_width, int tile_height, gboolean save_as_ycc, gboolean subsample, gboolean lossless, int Q) { TileCompress compress = { 0 }; opj_cparameters_t parameters; size_t sizeof_line; /* Our rgb->ycc only works for exactly 3 bands. */ save_as_ycc = save_as_ycc && region->im->Bands == 3; subsample = subsample && save_as_ycc; /* Set compression params. */ opj_set_default_encoder_parameters(¶meters); /* Set compression profile. */ vips_foreign_save_jp2k_set_profile(¶meters, lossless, Q); /* Makes three band images smaller, somehow. */ parameters.tcp_mct = region->im->Bands >= 3 ? 1 : 0; /* Create output image. TRUE means we alloc memory for the image * planes. */ if (!(compress.image = vips_foreign_save_jp2k_new_image(region->im, tile_width, tile_height, subsample, save_as_ycc, TRUE))) { vips__foreign_save_jp2k_compress_free(&compress); return -1; } /* We need a line of sums for chroma subsample. At worst, gint64. */ sizeof_line = sizeof(gint64) * tile->width; if (!(compress.accumulate = VIPS_ARRAY(NULL, sizeof_line, VipsPel))) { vips__foreign_save_jp2k_compress_free(&compress); return -1; } /* tiff needs a jpeg2000 codestream, not a jp2 file. */ compress.codec = opj_create_compress(OPJ_CODEC_J2K); vips_foreign_save_jp2k_attach_handlers(compress.codec); if (!opj_setup_encoder(compress.codec, ¶meters, compress.image)) { vips__foreign_save_jp2k_compress_free(&compress); return -1; } opj_codec_set_threads(compress.codec, vips_concurrency_get()); if (save_as_ycc) vips_foreign_save_jp2k_rgb_to_ycc(region, tile, compress.image->comps[0].prec); /* we need to unpack to the int arrays on comps[i].data */ if (subsample) vips_foreign_save_jp2k_unpack_subsample_image(region, tile, compress.image, compress.accumulate); else vips_foreign_save_jp2k_unpack_image(region, tile, compress.image); if (!(compress.stream = vips_foreign_save_jp2k_target(target))) { vips__foreign_save_jp2k_compress_free(&compress); return -1; } if (!opj_start_compress(compress.codec, compress.image, compress.stream)) { vips__foreign_save_jp2k_compress_free(&compress); return -1; } if (!opj_encode(compress.codec, compress.stream)) { vips__foreign_save_jp2k_compress_free(&compress); return -1; } opj_end_compress(compress.codec, compress.stream); vips__foreign_save_jp2k_compress_free(&compress); return 0; } #else /*!HAVE_LIBOPENJP2*/ int vips__foreign_save_jp2k_compress(VipsRegion *region, VipsRect *tile, VipsTarget *target, int tile_width, int tile_height, gboolean save_as_ycc, gboolean subsample, gboolean lossless, int Q) { vips_error("jp2k", "%s", _("libvips built without JPEG2000 support")); return -1; } #endif /*HAVE_LIBOPENJP2*/ /** * vips_jp2ksave: (method) * @in: image to save * @filename: file to write to * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @Q: %gint, quality factor * * @lossless: %gboolean, enables lossless compression * * @tile_width: %gint for tile size * * @tile_height: %gint for tile size * * @subsample_mode: #VipsForeignSubsample, chroma subsampling mode * * Write a VIPS image to a file in JPEG2000 format. * The saver supports 8, 16 and 32-bit int pixel * values, signed and unsigned. It supports greyscale, RGB, CMYK and * multispectral images. * * Use @Q to set the compression quality factor. The default value * produces file with approximately the same size as regular JPEG Q 75. * * Set @lossless to enable lossless compression. * * Use @tile_width and @tile_height to set the tile size. The default is 512. * * Chroma subsampling is normally disabled for compatibility. Set * @subsample_mode to auto to enable chroma subsample for Q < 90. Subsample * mode uses YCC rather than RGB colourspace, and many jpeg2000 decoders do * not support this. * * This operation always writes a pyramid. * * See also: vips_image_write_to_file(), vips_jp2kload(). * * Returns: 0 on success, -1 on error. */ int vips_jp2ksave(VipsImage *in, const char *filename, ...) { va_list ap; int result; va_start(ap, filename); result = vips_call_split("jp2ksave", ap, in, filename); va_end(ap); return result; } /** * vips_jp2ksave_buffer: (method) * @in: image to save * @buf: (array length=len) (element-type guint8): return output buffer here * @len: (type gsize): return output length here * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @Q: %gint, quality factor * * @lossless: %gboolean, enables lossless compression * * @tile_width: %gint for tile size * * @tile_height: %gint for tile size * * @subsample_mode: #VipsForeignSubsample, chroma subsampling mode * * As vips_jp2ksave(), but save to a target. * * See also: vips_jp2ksave(), vips_image_write_to_target(). * * Returns: 0 on success, -1 on error. */ int vips_jp2ksave_buffer(VipsImage *in, void **buf, size_t *len, ...) { va_list ap; VipsArea *area; int result; area = NULL; va_start(ap, len); result = vips_call_split("jp2ksave_buffer", ap, in, &area); va_end(ap); if (!result && area) { if (buf) { *buf = area->data; area->free_fn = NULL; } if (len) *len = area->length; vips_area_unref(area); } return result; } /** * vips_jp2ksave_target: (method) * @in: image to save * @target: save image to this target * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @Q: %gint, quality factor * * @lossless: %gboolean, enables lossless compression * * @tile_width: %gint for tile size * * @tile_height: %gint for tile size * * @subsample_mode: #VipsForeignSubsample, chroma subsampling mode * * As vips_jp2ksave(), but save to a target. * * See also: vips_jp2ksave(), vips_image_write_to_target(). * * Returns: 0 on success, -1 on error. */ int vips_jp2ksave_target(VipsImage *in, VipsTarget *target, ...) { va_list ap; int result; va_start(ap, target); result = vips_call_split("jp2ksave_target", ap, in, target); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/jpeg.h000066400000000000000000000037221454007373500174710ustar00rootroot00000000000000/* common defs for jpeg read/write */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_JPEG_H #define VIPS_JPEG_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ /* jpeglib includes jconfig.h, which can define HAVE_STDLIB_H ... which we * also define. Make sure it's turned off. */ #ifdef HAVE_STDLIB_H #undef HAVE_STDLIB_H #endif /*HAVE_STDLIB_H*/ /* jpeglib defines its own boolean type as an enum which then clashes with * everyone elses. Rename it as jboolean. */ #define boolean jboolean /* Any TRUE/FALSE macros which have crept in will cause terrible confusion as * well. */ #ifdef TRUE #undef TRUE #endif /*TRUE*/ #ifdef FALSE #undef FALSE #endif /*FALSE*/ #include #include #include /* Define a new error handler for when we bomb out. */ typedef struct { /* Public fields. */ struct jpeg_error_mgr pub; /* Private stuff for us. */ jmp_buf jmp; /* longjmp() here to get back to VIPS */ FILE *fp; /* fclose() if non-NULL */ } ErrorManager; void vips__new_output_message(j_common_ptr cinfo); void vips__new_error_exit(j_common_ptr cinfo); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_JPEG_H*/ libvips-8.15.1/libvips/foreign/jpeg2vips.c000066400000000000000000000624641454007373500204600ustar00rootroot00000000000000/* wrap jpeg library for read * * 28/11/03 JC * - better no-overshoot on tile loop * 12/11/04 * - better demand size choice for eval * 30/6/05 JC * - update im_error()/im_warn() * - now loads and saves exif data * 30/7/05 * - now loads ICC profiles * - now saves ICC profiles from the VIPS header * 24/8/05 * - jpeg load sets vips xres/yres from exif, if possible * - jpeg save sets exif xres/yres from vips, if possible * 29/8/05 * - cut from old vips_jpeg.c * 13/10/06 * - add #endif /*HAVE_CONFIG_H*/ #include #ifdef HAVE_JPEG #include #include #include #include #include #include #include "pforeign.h" #include "jpeg.h" /* Stuff we track during a read. */ typedef struct _ReadJpeg { VipsImage *out; /* Shrink by this much during load. 1, 2, 4, 8. */ int shrink; /* Types of error to cause failure. */ VipsFailOn fail_on; struct jpeg_decompress_struct cinfo; ErrorManager eman; gboolean invert_pels; /* Track the y pos during a read with this. */ int y_pos; /* Use orientation tag to automatically rotate and flip image * during load. */ gboolean autorotate; /* Remove DoS limits. */ gboolean unlimited; /* cinfo->output_width and height can be larger than we want since * libjpeg rounds up on shrink-on-load. This is the real size we will * output, as opposed to the size we decompress to. */ int output_width; int output_height; /* The source we read from. */ VipsSource *source; } ReadJpeg; #define SOURCE_BUFFER_SIZE (4096) /* Private struct for source input. */ typedef struct { /* Public jpeg fields. */ struct jpeg_source_mgr pub; /* Private stuff during read. */ ReadJpeg *jpeg; VipsSource *source; unsigned char buf[SOURCE_BUFFER_SIZE]; } Source; static void source_init_source(j_decompress_ptr cinfo) { /* No work necessary here. */ } /* Fill the input buffer --- called whenever buffer is emptied. */ static boolean source_fill_input_buffer(j_decompress_ptr cinfo) { Source *src = (Source *) cinfo->src; gint64 n_bytes; if ((n_bytes = vips_source_read(src->source, src->buf, SOURCE_BUFFER_SIZE)) <= 0) { if (src->jpeg->fail_on >= VIPS_FAIL_ON_TRUNCATED) { /* Knock the output out of cache. */ vips_foreign_load_invalidate(src->jpeg->out); ERREXIT(cinfo, JERR_INPUT_EOF); } else WARNMS(cinfo, JWRN_JPEG_EOF); /* Insert a fake EOI marker. */ src->buf[0] = (JOCTET) 0xFF; src->buf[1] = (JOCTET) JPEG_EOI; n_bytes = 2; } src->pub.next_input_byte = src->buf; src->pub.bytes_in_buffer = n_bytes; return TRUE; } static boolean source_fill_input_buffer_mappable(j_decompress_ptr cinfo) { Source *src = (Source *) cinfo->src; if (src->jpeg->fail_on >= VIPS_FAIL_ON_TRUNCATED) { /* Knock the output out of cache. */ vips_foreign_load_invalidate(src->jpeg->out); ERREXIT(cinfo, JERR_INPUT_EOF); } else WARNMS(cinfo, JWRN_JPEG_EOF); /* Insert a fake EOI marker. */ src->buf[0] = (JOCTET) 0xFF; src->buf[1] = (JOCTET) JPEG_EOI; src->pub.next_input_byte = src->buf; src->pub.bytes_in_buffer = 2; return TRUE; } static void skip_input_data(j_decompress_ptr cinfo, long num_bytes) { Source *src = (Source *) cinfo->src; if (num_bytes > 0) { while (num_bytes > (long) src->pub.bytes_in_buffer) { num_bytes -= (long) src->pub.bytes_in_buffer; (void) (*src->pub.fill_input_buffer)(cinfo); /* note we assume that fill_input_buffer will never * return FALSE, so suspension need not be handled. */ } src->pub.next_input_byte += (size_t) num_bytes; src->pub.bytes_in_buffer -= (size_t) num_bytes; } } static void skip_input_data_mappable(j_decompress_ptr cinfo, long num_bytes) { Source *src = (Source *) cinfo->src; if (num_bytes > (long) src->pub.bytes_in_buffer) { src->pub.next_input_byte += src->pub.bytes_in_buffer; src->pub.bytes_in_buffer = 0; } else { src->pub.next_input_byte += (size_t) num_bytes; src->pub.bytes_in_buffer -= (size_t) num_bytes; } } static int readjpeg_open_input(ReadJpeg *jpeg) { j_decompress_ptr cinfo = &jpeg->cinfo; if (jpeg->source && !cinfo->src) { Source *src; if (vips_source_rewind(jpeg->source)) return -1; cinfo->src = (struct jpeg_source_mgr *) (*cinfo->mem->alloc_small)( (j_common_ptr) cinfo, JPOOL_PERMANENT, sizeof(Source)); src = (Source *) cinfo->src; src->jpeg = jpeg; src->source = jpeg->source; src->pub.init_source = source_init_source; /* Use default method. */ src->pub.resync_to_restart = jpeg_resync_to_restart; if (vips_source_is_mappable(jpeg->source)) { size_t src_len; const unsigned char *src_data = vips_source_map( jpeg->source, &src_len); src->pub.fill_input_buffer = source_fill_input_buffer_mappable; src->pub.skip_input_data = skip_input_data_mappable; src->pub.bytes_in_buffer = src_len; src->pub.next_input_byte = src_data; } else { src->pub.fill_input_buffer = source_fill_input_buffer; src->pub.skip_input_data = skip_input_data; /* Forces fill_input_buffer on first read. */ src->pub.bytes_in_buffer = 0; /* Until buffer loaded. */ src->pub.next_input_byte = NULL; } } return 0; } static void readjpeg_emit_message(j_common_ptr cinfo, int msg_level) { ReadJpeg *jpeg = (ReadJpeg *) cinfo->client_data; long num_warnings; if (msg_level < 0) { /* Always count warnings in num_warnings. */ num_warnings = ++cinfo->err->num_warnings; /* Corrupt files may give many warnings, the policy here is to * show only the first warning and treat many warnings as fatal, * unless unlimited is set. */ if (num_warnings == 1) (*cinfo->err->output_message)(cinfo); else if (!jpeg || (!jpeg->unlimited && num_warnings >= 100)) cinfo->err->error_exit(cinfo); } else if (cinfo->err->trace_level >= msg_level) /* It's a trace message. Show it if trace_level >= msg_level. */ (*cinfo->err->output_message)(cinfo); } /* This can be called many times. */ static int readjpeg_free(ReadJpeg *jpeg) { if (jpeg->eman.pub.num_warnings != 0) { g_warning(_("read gave %ld warnings"), jpeg->eman.pub.num_warnings); g_warning("%s", vips_error_buffer()); /* Make the message only appear once. */ jpeg->eman.pub.num_warnings = 0; } /* Don't call jpeg_finish_decompress(). It just checks the tail of the * file and who cares about that. All mem is freed in * jpeg_destroy_decompress(). */ /* I don't think this can fail. It's harmless to call many times. */ jpeg_destroy_decompress(&jpeg->cinfo); VIPS_UNREF(jpeg->source); return 0; } static void readjpeg_close_cb(VipsImage *image, ReadJpeg *jpeg) { (void) readjpeg_free(jpeg); } static void readjpeg_minimise_cb(VipsImage *image, ReadJpeg *jpeg) { vips_source_minimise(jpeg->source); } static ReadJpeg * readjpeg_new(VipsSource *source, VipsImage *out, int shrink, VipsFailOn fail_on, gboolean autorotate, gboolean unlimited) { ReadJpeg *jpeg; if (!(jpeg = VIPS_NEW(out, ReadJpeg))) return NULL; jpeg->out = out; jpeg->source = source; g_object_ref(source); jpeg->shrink = shrink; jpeg->fail_on = fail_on; jpeg->cinfo.err = jpeg_std_error(&jpeg->eman.pub); jpeg->eman.pub.error_exit = vips__new_error_exit; jpeg->eman.pub.emit_message = readjpeg_emit_message; jpeg->eman.pub.output_message = vips__new_output_message; jpeg->eman.fp = NULL; jpeg->y_pos = 0; jpeg->autorotate = autorotate; jpeg->unlimited = unlimited; jpeg->cinfo.client_data = jpeg; /* jpeg_create_decompress() can fail on some sanity checks. Don't * readjpeg_free() since we don't want to jpeg_destroy_decompress(). */ if (setjmp(jpeg->eman.jmp)) return NULL; jpeg_create_decompress(&jpeg->cinfo); g_signal_connect(out, "close", G_CALLBACK(readjpeg_close_cb), jpeg); g_signal_connect(out, "minimise", G_CALLBACK(readjpeg_minimise_cb), jpeg); return jpeg; } static const char * find_chroma_subsample(struct jpeg_decompress_struct *cinfo) { /* libjpeg only uses 4:4:4 and 4:2:0, confusingly. * * http://poynton.ca/PDFs/Chroma_subsampling_notation.pdf */ gboolean has_subsample = cinfo->max_h_samp_factor > 1 || cinfo->max_v_samp_factor > 1; gboolean is_cmyk = cinfo->num_components > 3; return is_cmyk ? (has_subsample ? "4:2:0:4" : "4:4:4:4") : (has_subsample ? "4:2:0" : "4:4:4"); } static int attach_blob(VipsImage *im, const char *field, void *data, size_t data_length) { /* Only use the first one. */ if (vips_image_get_typeof(im, field)) { #ifdef DEBUG printf("attach_blob: second %s block, ignoring\n", field); #endif /*DEBUG*/ return 0; } #ifdef DEBUG printf("attach_blob: attaching %zd bytes of %s\n", data_length, field); #endif /*DEBUG*/ vips_image_set_blob_copy(im, field, data, data_length); return 0; } /* data is the XMP string ... it'll have something like * "http://ns.adobe.com/xap/1.0/" at the front, then a null character, then * the real XMP. */ static int attach_xmp_blob(VipsImage *im, void *data, size_t data_length) { char *p = (char *) data; int i; if (data_length < 4 || !vips_isprefix("http", p)) return 0; /* Search for a null char within the first few characters. 80 * should be plenty for a basic URL. * * -2 for the extra null. */ for (i = 0; i < VIPS_MIN(80, data_length - 2); i++) if (!p[i]) break; if (p[i]) return 0; return attach_blob(im, VIPS_META_XMP_NAME, p + i + 1, data_length - i - 1); } /* Number of app2 sections we can capture. Each one can be 64k, so 6400k should * be enough for anyone (haha). */ #define MAX_APP2_SECTIONS (100) /* Read a cinfo to a VIPS image. Set invert_pels if the pixel reader needs to * do 255-pel. */ static int read_jpeg_header(ReadJpeg *jpeg, VipsImage *out) { struct jpeg_decompress_struct *cinfo = &jpeg->cinfo; jpeg_saved_marker_ptr p; VipsInterpretation interpretation; double xres, yres; /* Capture app2 sections here for assembly. */ void *app2_data[MAX_APP2_SECTIONS] = { 0 }; size_t app2_data_length[MAX_APP2_SECTIONS] = { 0 }; size_t data_length; int i; /* Read JPEG header. libjpeg will set out_color_space sanely for us * for YUV YCCK etc. */ jpeg_read_header(cinfo, TRUE); cinfo->scale_denom = jpeg->shrink; cinfo->scale_num = 1; jpeg_calc_output_dimensions(cinfo); jpeg->invert_pels = FALSE; switch (cinfo->out_color_space) { case JCS_GRAYSCALE: interpretation = VIPS_INTERPRETATION_B_W; break; case JCS_CMYK: interpretation = VIPS_INTERPRETATION_CMYK; /* CMYKs are almost always returned inverted, but see below. */ jpeg->invert_pels = TRUE; break; case JCS_RGB: default: interpretation = VIPS_INTERPRETATION_sRGB; break; } #ifdef DEBUG if (cinfo->saw_JFIF_marker) printf("read_jpeg_header: jfif _density %d, %d, unit %d\n", cinfo->X_density, cinfo->Y_density, cinfo->density_unit); #endif /*DEBUG*/ /* Get the jfif resolution. exif may overwrite this later. Default to * 72dpi (as EXIF does). */ xres = 72.0 / 25.4; yres = 72.0 / 25.4; if (cinfo->saw_JFIF_marker && cinfo->X_density != 1U && cinfo->Y_density != 1U) { switch (cinfo->density_unit) { case 0: /* X_density / Y_density gives the pixel aspect ratio. * Leave xres, but adjust yres. */ if (cinfo->Y_density > 0) yres = xres * cinfo->X_density / cinfo->Y_density; break; case 1: /* Pixels per inch. */ xres = cinfo->X_density / 25.4; yres = cinfo->Y_density / 25.4; vips_image_set_string(out, VIPS_META_RESOLUTION_UNIT, "in"); break; case 2: /* Pixels per cm. */ xres = cinfo->X_density / 10.0; yres = cinfo->Y_density / 10.0; vips_image_set_string(out, VIPS_META_RESOLUTION_UNIT, "cm"); break; default: g_warning("%s", _("unknown JFIF resolution unit")); break; } #ifdef DEBUG printf("read_jpeg_header: seen jfif resolution %g, %g p/mm\n", xres, yres); #endif /*DEBUG*/ } /* Set VIPS header. */ vips_image_init_fields(out, cinfo->output_width, cinfo->output_height, cinfo->output_components, VIPS_FORMAT_UCHAR, VIPS_CODING_NONE, interpretation, xres, yres); VIPS_SETSTR(out->filename, vips_connection_filename(VIPS_CONNECTION(jpeg->source))); if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_FATSTRIP, NULL)) return -1; /* cinfo->output_width and cinfo->output_height round up with * shrink-on-load. For example, if the image is 1801 pixels across and * we shrink by 4, the output will be 450.25 pixels across, * cinfo->output_width with be 451, and libjpeg will write a black * column of pixels down the right. * * We must strictly round down, since we don't want fractional pixels * along the bottom and right. */ jpeg->output_width = cinfo->image_width / jpeg->shrink; jpeg->output_height = cinfo->image_height / jpeg->shrink; /* Interlaced jpegs need lots of memory to read, so our caller needs * to know. */ (void) vips_image_set_int(out, "jpeg-multiscan", jpeg_has_multiple_scans(cinfo)); /* 8.7 adds this for PNG as well, so we have a new format-neutral name. */ if (jpeg_has_multiple_scans(cinfo)) vips_image_set_int(out, "interlaced", 1); (void) vips_image_set_string(out, "jpeg-chroma-subsample", find_chroma_subsample(cinfo)); /* Look for EXIF and ICC profile. */ for (p = cinfo->marker_list; p; p = p->next) { #ifdef DEBUG { printf("read_jpeg_header: seen %u bytes of APP%d\n", p->data_length, p->marker - JPEG_APP0); for (i = 0; i < 10; i++) printf("\t%d) '%c' (%d)\n", i, p->data[i], p->data[i]); } #endif /*DEBUG*/ switch (p->marker) { case JPEG_APP0 + 1: /* Possible EXIF or XMP data. */ if (p->data_length > 4 && vips_isprefix("Exif", (char *) p->data) && attach_blob(out, VIPS_META_EXIF_NAME, p->data, p->data_length)) return -1; if (p->data_length > 4 && vips_isprefix("http", (char *) p->data) && attach_xmp_blob(out, p->data, p->data_length)) return -1; break; case JPEG_APP0 + 2: /* Possible ICC profile. */ if (p->data_length > 14 && vips_isprefix("ICC_PROFILE", (char *) p->data)) { /* cur_marker numbers from 1, according to * spec. */ int cur_marker = p->data[12] - 1; if (cur_marker >= 0 && cur_marker < MAX_APP2_SECTIONS) { app2_data[cur_marker] = p->data + 14; app2_data_length[cur_marker] = p->data_length - 14; } } break; case JPEG_APP0 + 13: /* Possible IPTC data block. */ if (p->data_length > 5 && vips_isprefix("Photo", (char *) p->data)) { if (attach_blob(out, VIPS_META_IPTC_NAME, p->data, p->data_length)) return -1; /* Older versions of libvips used this misspelt * name :-( attach under this name too for * compatibility. */ if (attach_blob(out, "ipct-data", p->data, p->data_length)) return -1; } break; case JPEG_APP0 + 14: /* Adobe block. There's a lot of confusion about * whether or not CMYK jpg images are inverted. For * the images we have, it seems they should always * invert. * * See: https://sno.phy.queensu.ca/~phil/exiftool/\ * TagNames/JPEG.html#Adobe * * data[11] == 0 - unknown * data[11] == 1 - YCbCr * data[11] == 2 - YCCK * * Leave this code here in case we come up with a * better rule. */ if (p->data_length >= 12 && vips_isprefix("Adobe", (char *) p->data)) { if (p->data[11] == 0) { #ifdef DEBUG printf("complete Adobe block, not YCCK image\n"); #endif /*DEBUG*/ // jpeg->invert_pels = FALSE; } } break; default: #ifdef DEBUG printf("read_jpeg_header: " "ignoring %u byte APP%d block\n", p->data_length, p->marker - JPEG_APP0); #endif /*DEBUG*/ break; } } /* Assemble ICC sections. */ data_length = 0; for (i = 0; i < MAX_APP2_SECTIONS && app2_data[i]; i++) data_length += app2_data_length[i]; if (data_length) { unsigned char *data; int p; #ifdef DEBUG printf("read_jpeg_header: assembled %zd byte ICC profile\n", data_length); #endif /*DEBUG*/ if (!(data = vips_malloc(NULL, data_length))) return -1; p = 0; for (i = 0; i < MAX_APP2_SECTIONS && app2_data[i]; i++) { memcpy(data + p, app2_data[i], app2_data_length[i]); p += app2_data_length[i]; } vips_image_set_blob(out, VIPS_META_ICC_NAME, (VipsCallbackFn) vips_area_free_cb, data, data_length); } return 0; } static int read_jpeg_generate(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRect *r = &out_region->valid; ReadJpeg *jpeg = (ReadJpeg *) a; struct jpeg_decompress_struct *cinfo = &jpeg->cinfo; int sz = cinfo->output_width * cinfo->output_components; int y; #ifdef DEBUG_VERBOSE printf("read_jpeg_generate: %p line %d, %d rows\n", g_thread_self(), r->top, r->height); #endif /*DEBUG_VERBOSE*/ VIPS_GATE_START("read_jpeg_generate: work"); /* We're inside a tilecache where tiles are the full image width, so * this should always be true. */ g_assert(r->left == 0); g_assert(r->width == out_region->im->Xsize); g_assert(VIPS_RECT_BOTTOM(r) <= out_region->im->Ysize); /* Tiles should always be on a 8-pixel boundary. */ g_assert(r->top % 8 == 0); /* Tiles should always be a strip in height, unless it's the final * strip. */ g_assert(r->height == VIPS_MIN(8, out_region->im->Ysize - r->top)); /* And check that y_pos is correct. It should be, since we are inside * a vips_sequential(). */ if (r->top != jpeg->y_pos) { VIPS_GATE_STOP("read_jpeg_generate: work"); vips_error("VipsJpeg", _("out of order read at line %d"), jpeg->y_pos); return -1; } /* Here for longjmp() from vips__new_error_exit() during * jpeg_read_scanlines(). */ if (setjmp(jpeg->eman.jmp)) { VIPS_GATE_STOP("read_jpeg_generate: work"); #ifdef DEBUG printf("read_jpeg_generate: longjmp() exit\n"); #endif /*DEBUG*/ return -1; } if (jpeg->eman.pub.num_warnings > 0 && jpeg->fail_on >= VIPS_FAIL_ON_WARNING) { VIPS_GATE_STOP("read_jpeg_generate: work"); /* Only fail once. */ jpeg->eman.pub.num_warnings = 0; return -1; } for (y = 0; y < r->height; y++) { JSAMPROW row_pointer[1]; row_pointer[0] = (JSAMPLE *) VIPS_REGION_ADDR(out_region, 0, r->top + y); jpeg_read_scanlines(cinfo, &row_pointer[0], 1); if (jpeg->invert_pels) { int x; for (x = 0; x < sz; x++) row_pointer[0][x] = 255 - row_pointer[0][x]; } jpeg->y_pos += 1; } VIPS_GATE_STOP("read_jpeg_generate: work"); return 0; } /* Read a cinfo to a VIPS image. */ static int read_jpeg_image(ReadJpeg *jpeg, VipsImage *out) { struct jpeg_decompress_struct *cinfo = &jpeg->cinfo; VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(out), 5); VipsImage *im; /* Here for longjmp() from vips__new_error_exit() during * jpeg_read_header() or jpeg_start_decompress(). */ if (setjmp(jpeg->eman.jmp)) return -1; t[0] = vips_image_new(); if (read_jpeg_header(jpeg, t[0])) return -1; /* Switch to pixel decode. */ if (vips_source_decode(jpeg->source)) return -1; jpeg_start_decompress(cinfo); #ifdef DEBUG printf("read_jpeg_image: starting decompress\n"); #endif /*DEBUG*/ /* We must crop after the seq, or our generate may not be asked for * full lines of pixels and will attempt to write beyond the buffer. */ if (vips_image_generate(t[0], NULL, read_jpeg_generate, NULL, jpeg, NULL) || vips_sequential(t[0], &t[1], "tile_height", 8, NULL) || vips_extract_area(t[1], &t[2], 0, 0, jpeg->output_width, jpeg->output_height, NULL)) return -1; im = t[2]; if (jpeg->autorotate && vips_image_get_orientation(im) != 1) { /* We have to copy to memory before calling autorot, since it * needs random access. */ if (!(t[3] = vips_image_copy_memory(im)) || vips_autorot(t[3], &t[4], NULL)) return -1; im = t[4]; } if (vips_image_write(im, out)) return -1; return 0; } static int vips__jpeg_read(ReadJpeg *jpeg, VipsImage *out, gboolean header_only) { /* Need to read in APP1 (EXIF metadata), APP2 (ICC profile), APP13 * (photoshop IPTC) and APP14 (Adobe flags). */ jpeg_save_markers(&jpeg->cinfo, JPEG_APP0 + 1, 0xffff); jpeg_save_markers(&jpeg->cinfo, JPEG_APP0 + 2, 0xffff); jpeg_save_markers(&jpeg->cinfo, JPEG_APP0 + 13, 0xffff); jpeg_save_markers(&jpeg->cinfo, JPEG_APP0 + 14, 0xffff); #ifdef DEBUG { int i; /* Handy for debugging ... spot any extra markers. */ for (i = 0; i < 16; i++) jpeg_save_markers(&jpeg->cinfo, JPEG_APP0 + i, 0xffff); } #endif /*DEBUG*/ /* Convert! */ if (header_only) { if (read_jpeg_header(jpeg, out)) return -1; /* Patch in the correct size. */ out->Xsize = jpeg->output_width; out->Ysize = jpeg->output_height; /* Swap width and height if we're going to rotate this image. */ if (jpeg->autorotate) { if (vips_image_get_orientation_swap(out)) VIPS_SWAP(int, out->Xsize, out->Ysize); vips_autorot_remove_angle(out); } } else { if (read_jpeg_image(jpeg, out)) return -1; } return 0; } int vips__jpeg_read_source(VipsSource *source, VipsImage *out, gboolean header_only, int shrink, VipsFailOn fail_on, gboolean autorotate, gboolean unlimited) { ReadJpeg *jpeg; if (!(jpeg = readjpeg_new(source, out, shrink, fail_on, autorotate, unlimited))) return -1; /* Here for longjmp() from vips__new_error_exit() during * cinfo->mem->alloc_small() or jpeg_read_header(). */ if (setjmp(jpeg->eman.jmp)) return -1; if (readjpeg_open_input(jpeg) || vips__jpeg_read(jpeg, out, header_only)) return -1; if (header_only) vips_source_minimise(source); return 0; } int vips__isjpeg_source(VipsSource *source) { const unsigned char *p; if ((p = vips_source_sniff(source, 2)) && p[0] == 0xff && p[1] == 0xd8) return 1; return 0; } #endif /*HAVE_JPEG*/ libvips-8.15.1/libvips/foreign/jpegload.c000066400000000000000000000366021454007373500203270ustar00rootroot00000000000000/* load jpeg from a file * * 24/11/11 * - wrap a class around the jpeg writer * 29/11/11 * - split to make load, load from buffer and load from file * 24/7/21 * - add fail_on support */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "pforeign.h" #ifdef HAVE_JPEG #ifdef HAVE_EXIF #ifdef UNTAGGED_EXIF #include #include #include #include #else /*!UNTAGGED_EXIF*/ #include #include #include #include #endif /*UNTAGGED_EXIF*/ #endif /*HAVE_EXIF*/ typedef struct _VipsForeignLoadJpeg { VipsForeignLoad parent_object; /* Set by subclasses. */ VipsSource *source; /* Remove DoS limits. */ gboolean unlimited; /* Shrink by this much during load. */ int shrink; /* Autorotate using exif orientation tag. */ gboolean autorotate; } VipsForeignLoadJpeg; typedef VipsForeignLoadClass VipsForeignLoadJpegClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignLoadJpeg, vips_foreign_load_jpeg, VIPS_TYPE_FOREIGN_LOAD); static void vips_foreign_load_jpeg_dispose(GObject *gobject) { VipsForeignLoadJpeg *jpeg = (VipsForeignLoadJpeg *) gobject; VIPS_UNREF(jpeg->source); G_OBJECT_CLASS(vips_foreign_load_jpeg_parent_class)->dispose(gobject); } static int vips_foreign_load_jpeg_build(VipsObject *object) { VipsForeignLoadJpeg *jpeg = (VipsForeignLoadJpeg *) object; if (jpeg->shrink != 1 && jpeg->shrink != 2 && jpeg->shrink != 4 && jpeg->shrink != 8) { vips_error("VipsFormatLoadJpeg", _("bad shrink factor %d"), jpeg->shrink); return -1; } if (VIPS_OBJECT_CLASS(vips_foreign_load_jpeg_parent_class)->build(object)) return -1; return 0; } static VipsForeignFlags vips_foreign_load_jpeg_get_flags(VipsForeignLoad *load) { return VIPS_FOREIGN_SEQUENTIAL; } static VipsForeignFlags vips_foreign_load_jpeg_get_flags_filename(const char *filename) { return VIPS_FOREIGN_SEQUENTIAL; } static int vips_foreign_load_jpeg_header(VipsForeignLoad *load) { VipsForeignLoadJpeg *jpeg = (VipsForeignLoadJpeg *) load; if (vips__jpeg_read_source(jpeg->source, load->out, TRUE, jpeg->shrink, load->fail_on, jpeg->autorotate, jpeg->unlimited)) return -1; return 0; } static int vips_foreign_load_jpeg_load(VipsForeignLoad *load) { VipsForeignLoadJpeg *jpeg = (VipsForeignLoadJpeg *) load; if (vips__jpeg_read_source(jpeg->source, load->real, FALSE, jpeg->shrink, load->fail_on, jpeg->autorotate, jpeg->unlimited)) return -1; return 0; } static void vips_foreign_load_jpeg_class_init(VipsForeignLoadJpegClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->dispose = vips_foreign_load_jpeg_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jpegload_base"; object_class->description = _("load jpeg"); object_class->build = vips_foreign_load_jpeg_build; /* We are fast at is_a(), so high priority. */ foreign_class->priority = 50; load_class->get_flags_filename = vips_foreign_load_jpeg_get_flags_filename; load_class->get_flags = vips_foreign_load_jpeg_get_flags; load_class->header = vips_foreign_load_jpeg_header; load_class->load = vips_foreign_load_jpeg_load; VIPS_ARG_INT(class, "shrink", 20, _("Shrink"), _("Shrink factor on load"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadJpeg, shrink), 1, 16, 1); VIPS_ARG_BOOL(class, "autorotate", 21, _("Autorotate"), _("Rotate image using exif orientation"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadJpeg, autorotate), FALSE); VIPS_ARG_BOOL(class, "unlimited", 22, _("Unlimited"), _("Remove all denial of service limits"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadJpeg, unlimited), FALSE); } static void vips_foreign_load_jpeg_init(VipsForeignLoadJpeg *jpeg) { jpeg->shrink = 1; } typedef struct _VipsForeignLoadJpegSource { VipsForeignLoadJpeg parent_object; VipsSource *source; } VipsForeignLoadJpegSource; typedef VipsForeignLoadJpegClass VipsForeignLoadJpegSourceClass; G_DEFINE_TYPE(VipsForeignLoadJpegSource, vips_foreign_load_jpeg_source, vips_foreign_load_jpeg_get_type()); static int vips_foreign_load_jpeg_source_build(VipsObject *object) { VipsForeignLoadJpeg *jpeg = (VipsForeignLoadJpeg *) object; VipsForeignLoadJpegSource *source = (VipsForeignLoadJpegSource *) object; if (source->source) { jpeg->source = source->source; g_object_ref(jpeg->source); } if (VIPS_OBJECT_CLASS(vips_foreign_load_jpeg_source_parent_class) ->build(object)) return -1; return 0; } static gboolean vips_foreign_load_jpeg_source_is_a_source(VipsSource *source) { return vips__isjpeg_source(source); } static void vips_foreign_load_jpeg_source_class_init( VipsForeignLoadJpegSourceClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jpegload_source"; object_class->description = _("load image from jpeg source"); object_class->build = vips_foreign_load_jpeg_source_build; operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_jpeg_source_is_a_source; VIPS_ARG_OBJECT(class, "source", 1, _("Source"), _("Source to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadJpegSource, source), VIPS_TYPE_SOURCE); } static void vips_foreign_load_jpeg_source_init(VipsForeignLoadJpegSource *source) { } typedef struct _VipsForeignLoadJpegFile { VipsForeignLoadJpeg parent_object; char *filename; } VipsForeignLoadJpegFile; typedef VipsForeignLoadJpegClass VipsForeignLoadJpegFileClass; G_DEFINE_TYPE(VipsForeignLoadJpegFile, vips_foreign_load_jpeg_file, vips_foreign_load_jpeg_get_type()); static int vips_foreign_load_jpeg_file_build(VipsObject *object) { VipsForeignLoadJpeg *jpeg = (VipsForeignLoadJpeg *) object; VipsForeignLoadJpegFile *file = (VipsForeignLoadJpegFile *) object; if (file->filename && !(jpeg->source = vips_source_new_from_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_jpeg_file_parent_class) ->build(object)) return -1; return 0; } static gboolean vips_foreign_load_jpeg_file_is_a(const char *filename) { VipsSource *source; gboolean result; if (!(source = vips_source_new_from_file(filename))) return FALSE; result = vips_foreign_load_jpeg_source_is_a_source(source); VIPS_UNREF(source); return result; } static void vips_foreign_load_jpeg_file_class_init(VipsForeignLoadJpegFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jpegload"; object_class->description = _("load jpeg from file"); object_class->build = vips_foreign_load_jpeg_file_build; foreign_class->suffs = vips__jpeg_suffs; load_class->is_a = vips_foreign_load_jpeg_file_is_a; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadJpegFile, filename), NULL); } static void vips_foreign_load_jpeg_file_init(VipsForeignLoadJpegFile *file) { } typedef struct _VipsForeignLoadJpegBuffer { VipsForeignLoadJpeg parent_object; VipsBlob *blob; } VipsForeignLoadJpegBuffer; typedef VipsForeignLoadJpegClass VipsForeignLoadJpegBufferClass; G_DEFINE_TYPE(VipsForeignLoadJpegBuffer, vips_foreign_load_jpeg_buffer, vips_foreign_load_jpeg_get_type()); static int vips_foreign_load_jpeg_buffer_build(VipsObject *object) { VipsForeignLoadJpeg *jpeg = (VipsForeignLoadJpeg *) object; VipsForeignLoadJpegBuffer *buffer = (VipsForeignLoadJpegBuffer *) object; if (buffer->blob && !(jpeg->source = vips_source_new_from_memory( VIPS_AREA(buffer->blob)->data, VIPS_AREA(buffer->blob)->length))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_jpeg_buffer_parent_class) ->build(object)) return -1; return 0; } static gboolean vips_foreign_load_jpeg_buffer_is_a_buffer(const void *buf, size_t len) { VipsSource *source; gboolean result; if (!(source = vips_source_new_from_memory(buf, len))) return FALSE; result = vips_foreign_load_jpeg_source_is_a_source(source); VIPS_UNREF(source); return result; } static void vips_foreign_load_jpeg_buffer_class_init( VipsForeignLoadJpegBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jpegload_buffer"; object_class->description = _("load jpeg from buffer"); object_class->build = vips_foreign_load_jpeg_buffer_build; load_class->is_a_buffer = vips_foreign_load_jpeg_buffer_is_a_buffer; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadJpegBuffer, blob), VIPS_TYPE_BLOB); } static void vips_foreign_load_jpeg_buffer_init(VipsForeignLoadJpegBuffer *buffer) { } #endif /*HAVE_JPEG*/ /** * vips_jpegload: * @filename: file to load * @out: (out): decompressed image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @shrink: %gint, shrink by this much on load * * @fail_on: #VipsFailOn, types of read error to fail on * * @autorotate: %gboolean, rotate image upright during load * * Read a JPEG file into a VIPS image. It can read most 8-bit JPEG images, * including CMYK and YCbCr. * * @shrink means shrink by this integer factor during load. Possible values * are 1, 2, 4 and 8. Shrinking during read is very much faster than * decompressing the whole image and then shrinking later. * * Use @fail_on to set the type of error that will cause load to fail. By * default, loaders are permissive, that is, #VIPS_FAIL_ON_NONE. * * Setting @autorotate to %TRUE will make the loader interpret the * orientation tag and automatically rotate the image appropriately during * load. * * If @autorotate is %FALSE, the metadata field #VIPS_META_ORIENTATION is set * to the value of the orientation tag. Applications may read and interpret * this field * as they wish later in processing. See vips_autorot(). Save * operations will use #VIPS_META_ORIENTATION, if present, to set the * orientation of output images. * * Example: * * |[ * vips_jpegload("fred.jpg", &out, * "shrink", 8, * "fail_on", VIPS_FAIL_ON_TRUNCATED, * NULL); * ]| * * Any embedded ICC profiles are ignored: you always just get the RGB from * the file. Instead, the embedded profile will be attached to the image as * #VIPS_META_ICC_NAME. You need to use something like * vips_icc_import() to get CIE values from the file. * * EXIF metadata is attached as #VIPS_META_EXIF_NAME, IPTC as * #VIPS_META_IPTC_NAME, and XMP as #VIPS_META_XMP_NAME. * * The int metadata item "jpeg-multiscan" is set to the result of * jpeg_has_multiple_scans(). Interlaced jpeg images need a large amount of * memory to load, so this field gives callers a chance to handle these * images differently. * * The string-valued field "jpeg-chroma-subsample" gives the chroma subsample * in standard notation. 4:4:4 means no subsample, 4:2:0 means YCbCr with * Cb and Cr subsampled horizontally and vertically, 4:4:4:4 means a CMYK * image with no subsampling. * * The EXIF thumbnail, if present, is attached to the image as * "jpeg-thumbnail-data". See vips_image_get_blob(). * * See also: vips_jpegload_buffer(), vips_image_new_from_file(), vips_autorot(). * * Returns: 0 on success, -1 on error. */ int vips_jpegload(const char *filename, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("jpegload", ap, filename, out); va_end(ap); return result; } /** * vips_jpegload_buffer: * @buf: (array length=len) (element-type guint8): memory area to load * @len: (type gsize): size of memory area * @out: (out): image to write * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @shrink: %gint, shrink by this much on load * * @fail_on: #VipsFailOn, types of read error to fail on * * @autorotate: %gboolean, use exif Orientation tag to rotate the image * during load * * Read a JPEG-formatted memory block into a VIPS image. Exactly as * vips_jpegload(), but read from a memory buffer. * * You must not free the buffer while @out is active. The * #VipsObject::postclose signal on @out is a good place to free. * * See also: vips_jpegload(). * * Returns: 0 on success, -1 on error. */ int vips_jpegload_buffer(void *buf, size_t len, VipsImage **out, ...) { va_list ap; VipsBlob *blob; int result; /* We don't take a copy of the data or free it. */ blob = vips_blob_new(NULL, buf, len); va_start(ap, out); result = vips_call_split("jpegload_buffer", ap, blob, out); va_end(ap); vips_area_unref(VIPS_AREA(blob)); return result; } /** * vips_jpegload_source: * @source: source to load * @out: (out): image to write * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @shrink: %gint, shrink by this much on load * * @fail_on: #VipsFailOn, types of read error to fail on * * @autorotate: %gboolean, use exif Orientation tag to rotate the image * during load * * Read a JPEG-formatted memory block into a VIPS image. Exactly as * vips_jpegload(), but read from a source. * * See also: vips_jpegload(). * * Returns: 0 on success, -1 on error. */ int vips_jpegload_source(VipsSource *source, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("jpegload_source", ap, source, out); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/jpegsave.c000066400000000000000000000536411454007373500203500ustar00rootroot00000000000000/* save to jpeg * * 24/11/11 * - wrap a class around the jpeg writer * 18/2/20 Elad-Laufer * - add subsample_mode, deprecate no_subsample */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "pforeign.h" #ifdef HAVE_JPEG typedef struct _VipsForeignSaveJpeg { VipsForeignSave parent_object; /* Quality factor. */ int Q; /* Compute optimal Huffman coding tables. */ gboolean optimize_coding; /* Generate an interlaced (progressive, in jpg terminology) file. */ gboolean interlace; /* Deprecated: Disable chroma subsampling. Use subsample_mode instead. */ gboolean no_subsample; /* Select chroma subsampling mode: * auto will disable subsampling for Q >= 90 * on will always enable subsampling * off will always disable subsampling */ VipsForeignSubsample subsample_mode; /* Apply trellis quantisation to each 8x8 block. */ gboolean trellis_quant; /* Apply overshooting to samples with extreme values e.g. 0 & 255 * for 8-bit. */ gboolean overshoot_deringing; /* Split the spectrum of DCT coefficients into separate scans. */ gboolean optimize_scans; /* Use predefined quantization table with given index. */ int quant_table; /* Use an MCU restart interval. */ int restart_interval; } VipsForeignSaveJpeg; typedef VipsForeignSaveClass VipsForeignSaveJpegClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignSaveJpeg, vips_foreign_save_jpeg, VIPS_TYPE_FOREIGN_SAVE); #define UC VIPS_FORMAT_UCHAR /* Type promotion for save ... just always go to uchar. */ static VipsBandFormat bandfmt_jpeg[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, UC, UC, UC, UC, UC, UC, UC, UC, UC }; static int vips_foreign_save_jpeg_build(VipsObject *object) { VipsForeignSaveJpeg *jpeg = (VipsForeignSaveJpeg *) object; if (VIPS_OBJECT_CLASS(vips_foreign_save_jpeg_parent_class)->build(object)) return -1; /* no_subsample is deprecated, but we retain backwards compatibility * new code should use subsample_mode */ if (vips_object_argument_isset(object, "no_subsample")) jpeg->subsample_mode = jpeg->no_subsample ? VIPS_FOREIGN_SUBSAMPLE_OFF : VIPS_FOREIGN_SUBSAMPLE_AUTO; return 0; } static void vips_foreign_save_jpeg_class_init(VipsForeignSaveJpegClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jpegsave_base"; object_class->description = _("save jpeg"); object_class->build = vips_foreign_save_jpeg_build; foreign_class->suffs = vips__jpeg_suffs; /* See also vips_foreign_save_tiff_build() when saving JPEG in TIFF. */ save_class->saveable = VIPS_SAVEABLE_RGB_CMYK; save_class->format_table = bandfmt_jpeg; VIPS_ARG_INT(class, "Q", 10, _("Q"), _("Q factor"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJpeg, Q), 1, 100, 75); VIPS_ARG_BOOL(class, "optimize_coding", 12, _("Optimize coding"), _("Compute optimal Huffman coding tables"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJpeg, optimize_coding), FALSE); VIPS_ARG_BOOL(class, "interlace", 13, _("Interlace"), _("Generate an interlaced (progressive) jpeg"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJpeg, interlace), FALSE); VIPS_ARG_BOOL(class, "no_subsample", 14, _("No subsample"), _("Disable chroma subsample"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsForeignSaveJpeg, no_subsample), FALSE); VIPS_ARG_BOOL(class, "trellis_quant", 15, _("Trellis quantisation"), _("Apply trellis quantisation to each 8x8 block"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJpeg, trellis_quant), FALSE); VIPS_ARG_BOOL(class, "overshoot_deringing", 16, _("Overshoot de-ringing"), _("Apply overshooting to samples with extreme values"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJpeg, overshoot_deringing), FALSE); VIPS_ARG_BOOL(class, "optimize_scans", 17, _("Optimize scans"), _("Split spectrum of DCT coefficients into separate scans"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJpeg, optimize_scans), FALSE); VIPS_ARG_INT(class, "quant_table", 18, _("Quantization table"), _("Use predefined quantization table with given index"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJpeg, quant_table), 0, 8, 0); VIPS_ARG_ENUM(class, "subsample_mode", 19, _("Subsample mode"), _("Select chroma subsample operation mode"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJpeg, subsample_mode), VIPS_TYPE_FOREIGN_SUBSAMPLE, VIPS_FOREIGN_SUBSAMPLE_AUTO); VIPS_ARG_INT(class, "restart_interval", 20, _("Restart interval"), _("Add restart markers every specified number of mcu"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJpeg, restart_interval), 0, INT_MAX, 0); } static void vips_foreign_save_jpeg_init(VipsForeignSaveJpeg *jpeg) { jpeg->Q = 75; jpeg->subsample_mode = VIPS_FOREIGN_SUBSAMPLE_AUTO; } typedef struct _VipsForeignSaveJpegTarget { VipsForeignSaveJpeg parent_object; VipsTarget *target; } VipsForeignSaveJpegTarget; typedef VipsForeignSaveJpegClass VipsForeignSaveJpegTargetClass; G_DEFINE_TYPE(VipsForeignSaveJpegTarget, vips_foreign_save_jpeg_target, vips_foreign_save_jpeg_get_type()); static int vips_foreign_save_jpeg_target_build(VipsObject *object) { VipsForeignSave *save = (VipsForeignSave *) object; VipsForeignSaveJpeg *jpeg = (VipsForeignSaveJpeg *) object; VipsForeignSaveJpegTarget *target = (VipsForeignSaveJpegTarget *) object; if (VIPS_OBJECT_CLASS(vips_foreign_save_jpeg_target_parent_class) ->build(object)) return -1; if (vips__jpeg_write_target(save->ready, target->target, jpeg->Q, save->profile, jpeg->optimize_coding, jpeg->interlace, jpeg->trellis_quant, jpeg->overshoot_deringing, jpeg->optimize_scans, jpeg->quant_table, jpeg->subsample_mode, jpeg->restart_interval)) return -1; return 0; } static void vips_foreign_save_jpeg_target_class_init( VipsForeignSaveJpegTargetClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jpegsave_target"; object_class->description = _("save image to jpeg target"); object_class->build = vips_foreign_save_jpeg_target_build; VIPS_ARG_OBJECT(class, "target", 1, _("Target"), _("Target to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJpegTarget, target), VIPS_TYPE_TARGET); } static void vips_foreign_save_jpeg_target_init(VipsForeignSaveJpegTarget *target) { } typedef struct _VipsForeignSaveJpegFile { VipsForeignSaveJpeg parent_object; /* Filename for save. */ char *filename; } VipsForeignSaveJpegFile; typedef VipsForeignSaveJpegClass VipsForeignSaveJpegFileClass; G_DEFINE_TYPE(VipsForeignSaveJpegFile, vips_foreign_save_jpeg_file, vips_foreign_save_jpeg_get_type()); static int vips_foreign_save_jpeg_file_build(VipsObject *object) { VipsForeignSave *save = (VipsForeignSave *) object; VipsForeignSaveJpeg *jpeg = (VipsForeignSaveJpeg *) object; VipsForeignSaveJpegFile *file = (VipsForeignSaveJpegFile *) object; VipsTarget *target; if (VIPS_OBJECT_CLASS(vips_foreign_save_jpeg_file_parent_class) ->build(object)) return -1; if (!(target = vips_target_new_to_file(file->filename))) return -1; if (vips__jpeg_write_target(save->ready, target, jpeg->Q, save->profile, jpeg->optimize_coding, jpeg->interlace, jpeg->trellis_quant, jpeg->overshoot_deringing, jpeg->optimize_scans, jpeg->quant_table, jpeg->subsample_mode, jpeg->restart_interval)) { VIPS_UNREF(target); return -1; } VIPS_UNREF(target); return 0; } static void vips_foreign_save_jpeg_file_class_init(VipsForeignSaveJpegFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jpegsave"; object_class->description = _("save image to jpeg file"); object_class->build = vips_foreign_save_jpeg_file_build; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJpegFile, filename), NULL); } static void vips_foreign_save_jpeg_file_init(VipsForeignSaveJpegFile *file) { } typedef struct _VipsForeignSaveJpegBuffer { VipsForeignSaveJpeg parent_object; /* Save to a buffer. */ VipsArea *buf; } VipsForeignSaveJpegBuffer; typedef VipsForeignSaveJpegClass VipsForeignSaveJpegBufferClass; G_DEFINE_TYPE(VipsForeignSaveJpegBuffer, vips_foreign_save_jpeg_buffer, vips_foreign_save_jpeg_get_type()); static int vips_foreign_save_jpeg_buffer_build(VipsObject *object) { VipsForeignSave *save = (VipsForeignSave *) object; VipsForeignSaveJpeg *jpeg = (VipsForeignSaveJpeg *) object; VipsForeignSaveJpegBuffer *buffer = (VipsForeignSaveJpegBuffer *) object; VipsTarget *target; VipsBlob *blob; if (VIPS_OBJECT_CLASS(vips_foreign_save_jpeg_buffer_parent_class) ->build(object)) return -1; if (!(target = vips_target_new_to_memory())) return -1; if (vips__jpeg_write_target(save->ready, target, jpeg->Q, save->profile, jpeg->optimize_coding, jpeg->interlace, jpeg->trellis_quant, jpeg->overshoot_deringing, jpeg->optimize_scans, jpeg->quant_table, jpeg->subsample_mode, jpeg->restart_interval)) { VIPS_UNREF(target); return -1; } g_object_get(target, "blob", &blob, NULL); g_object_set(buffer, "buffer", blob, NULL); vips_area_unref(VIPS_AREA(blob)); VIPS_UNREF(target); return 0; } static void vips_foreign_save_jpeg_buffer_class_init( VipsForeignSaveJpegBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jpegsave_buffer"; object_class->description = _("save image to jpeg buffer"); object_class->build = vips_foreign_save_jpeg_buffer_build; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to save to"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsForeignSaveJpegBuffer, buf), VIPS_TYPE_BLOB); } static void vips_foreign_save_jpeg_buffer_init(VipsForeignSaveJpegBuffer *file) { } typedef struct _VipsForeignSaveJpegMime { VipsForeignSaveJpeg parent_object; } VipsForeignSaveJpegMime; typedef VipsForeignSaveJpegClass VipsForeignSaveJpegMimeClass; G_DEFINE_TYPE(VipsForeignSaveJpegMime, vips_foreign_save_jpeg_mime, vips_foreign_save_jpeg_get_type()); static int vips_foreign_save_jpeg_mime_build(VipsObject *object) { VipsForeignSave *save = (VipsForeignSave *) object; VipsForeignSaveJpeg *jpeg = (VipsForeignSaveJpeg *) object; VipsTarget *target; VipsBlob *blob; const unsigned char *obuf; size_t olen; if (VIPS_OBJECT_CLASS(vips_foreign_save_jpeg_mime_parent_class) ->build(object)) return -1; if (!(target = vips_target_new_to_memory())) return -1; if (vips__jpeg_write_target(save->ready, target, jpeg->Q, save->profile, jpeg->optimize_coding, jpeg->interlace, jpeg->trellis_quant, jpeg->overshoot_deringing, jpeg->optimize_scans, jpeg->quant_table, jpeg->subsample_mode, jpeg->restart_interval)) { VIPS_UNREF(target); return -1; } g_object_get(target, "blob", &blob, NULL); obuf = vips_blob_get(blob, &olen); printf("Content-length: %zu\r\n", olen); printf("Content-type: image/jpeg\r\n"); printf("\r\n"); (void) fwrite(obuf, sizeof(char), olen, stdout); fflush(stdout); vips_area_unref(VIPS_AREA(blob)); VIPS_UNREF(target); return 0; } static void vips_foreign_save_jpeg_mime_class_init(VipsForeignSaveJpegMimeClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; object_class->nickname = "jpegsave_mime"; object_class->description = _("save image to jpeg mime"); object_class->build = vips_foreign_save_jpeg_mime_build; } static void vips_foreign_save_jpeg_mime_init(VipsForeignSaveJpegMime *mime) { } #endif /*HAVE_JPEG*/ /** * vips_jpegsave: (method) * @in: image to save * @filename: file to write to * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @Q: %gint, quality factor * * @optimize_coding: %gboolean, compute optimal Huffman coding tables * * @interlace: %gboolean, write an interlaced (progressive) jpeg * * @subsample_mode: #VipsForeignSubsample, chroma subsampling mode * * @trellis_quant: %gboolean, apply trellis quantisation to each 8x8 block * * @overshoot_deringing: %gboolean, overshoot samples with extreme values * * @optimize_scans: %gboolean, split DCT coefficients into separate scans * * @quant_table: %gint, quantization table index * * @restart_interval: %gint, restart interval in mcu * * Write a VIPS image to a file as JPEG. * * Use @Q to set the JPEG compression factor. Default 75. * * If @optimize_coding is set, the Huffman tables are optimized. This is * slightly slower and produces slightly smaller files. * * If @interlace is set, the jpeg files will be interlaced (progressive jpeg, * in jpg parlance). These files may be better for display over a slow network * connection, but need much more memory to encode and decode. * * Chroma subsampling is normally automatically disabled for Q >= 90. You can * force the subsampling mode with @subsample_mode. * * If @trellis_quant is set and the version of libjpeg supports it * (e.g. mozjpeg >= 3.0), apply trellis quantisation to each 8x8 block. * Reduces file size but increases compression time. * * If @overshoot_deringing is set and the version of libjpeg supports it * (e.g. mozjpeg >= 3.0), apply overshooting to samples with extreme values * for example 0 and 255 for 8-bit. Overshooting may reduce ringing artifacts * from compression, in particular in areas where black text appears on a * white background. * * If @optimize_scans is set and the version of libjpeg supports it * (e.g. mozjpeg >= 3.0), split the spectrum of DCT coefficients into * separate scans. Reduces file size but increases compression time. * * If @quant_table is set and the version of libjpeg supports it * (e.g. mozjpeg >= 3.0) it selects the quantization table to use: * * * 0 — Tables from JPEG Annex K (vips and libjpeg default) * * 1 — Flat table * * 2 — Table tuned for MSSIM on Kodak image set * * 3 — Table from ImageMagick by N. Robidoux (current mozjpeg default) * * 4 — Table tuned for PSNR-HVS-M on Kodak image set * * 5 — Table from Relevance of Human Vision to JPEG-DCT Compression (1992) * * 6 — Table from DCTune Perceptual Optimization of Compressed Dental * X-Rays (1997) * * 7 — Table from A Visual Detection Model for DCT Coefficient * Quantization (1993) * * 8 — Table from An Improved Detection Model for DCT Coefficient * Quantization (1993) * * Quantization table 0 is the default in vips and libjpeg(-turbo), but it * tends to favor detail over color accuracy, producing colored patches and * stripes as well as heavy banding in flat areas at high compression ratios. * Quantization table 2 is a good candidate to try if the default quantization * table produces banding or color shifts and is well suited for hires images. * Quantization table 3 is the default in mozjpeg and has been tuned to produce * good results at the default quality setting; banding at high compression. * Quantization table 4 is the most accurate at the cost of compression ratio. * Tables 5-7 are based on older research papers, but generally achieve worse * compression ratios and/or quality than 2 or 4. * * For maximum compression with mozjpeg, a useful set of options is `strip, * optimize-coding, interlace, optimize-scans, trellis-quant, quant_table=3`. * * By default, the output stream won't have restart markers. If a non-zero * restart_interval is specified, a restart marker will be added after each * specified number of MCU blocks. This makes the stream more recoverable * if there are transmission errors, but also allows for some decoders to read * part of the JPEG without decoding the whole stream. * * The image is automatically converted to RGB, Monochrome or CMYK before * saving. * * EXIF data is constructed from #VIPS_META_EXIF_NAME, then * modified with any other related tags on the image before being written to * the file. #VIPS_META_RESOLUTION_UNIT is used to set the EXIF resolution * unit. #VIPS_META_ORIENTATION is used to set the EXIF orientation tag. * * IPTC as #VIPS_META_IPTC_NAME and XMP as #VIPS_META_XMP_NAME * are coded and attached. * * See also: vips_jpegsave_buffer(), vips_image_write_to_file(). * * Returns: 0 on success, -1 on error. */ int vips_jpegsave(VipsImage *in, const char *filename, ...) { va_list ap; int result; va_start(ap, filename); result = vips_call_split("jpegsave", ap, in, filename); va_end(ap); return result; } /** * vips_jpegsave_target: (method) * @in: image to save * @target: save image to this target * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @Q: %gint, quality factor * * @optimize_coding: %gboolean, compute optimal Huffman coding tables * * @interlace: %gboolean, write an interlaced (progressive) jpeg * * @subsample_mode: #VipsForeignSubsample, chroma subsampling mode * * @trellis_quant: %gboolean, apply trellis quantisation to each 8x8 block * * @overshoot_deringing: %gboolean, overshoot samples with extreme values * * @optimize_scans: %gboolean, split DCT coefficients into separate scans * * @quant_table: %gint, quantization table index * * @restart_interval: %gint, restart interval in mcu * * As vips_jpegsave(), but save to a target. * * See also: vips_jpegsave(), vips_image_write_to_target(). * * Returns: 0 on success, -1 on error. */ int vips_jpegsave_target(VipsImage *in, VipsTarget *target, ...) { va_list ap; int result; va_start(ap, target); result = vips_call_split("jpegsave_target", ap, in, target); va_end(ap); return result; } /** * vips_jpegsave_buffer: (method) * @in: image to save * @buf: (array length=len) (element-type guint8): return output buffer here * @len: (type gsize): return output length here * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @Q: %gint, quality factor * * @optimize_coding: %gboolean, compute optimal Huffman coding tables * * @interlace: %gboolean, write an interlaced (progressive) jpeg * * @subsample_mode: #VipsForeignSubsample, chroma subsampling mode * * @trellis_quant: %gboolean, apply trellis quantisation to each 8x8 block * * @overshoot_deringing: %gboolean, overshoot samples with extreme values * * @optimize_scans: %gboolean, split DCT coefficients into separate scans * * @quant_table: %gint, quantization table index * * @restart_interval: %gint, restart interval in mcu * * As vips_jpegsave(), but save to a memory buffer. * * The address of the buffer is returned in @obuf, the length of the buffer in * @olen. You are responsible for freeing the buffer with g_free() when you * are done with it. * * See also: vips_jpegsave(), vips_image_write_to_file(). * * Returns: 0 on success, -1 on error. */ int vips_jpegsave_buffer(VipsImage *in, void **buf, size_t *len, ...) { va_list ap; VipsArea *area; int result; area = NULL; va_start(ap, len); result = vips_call_split("jpegsave_buffer", ap, in, &area); va_end(ap); if (!result && area) { if (buf) { *buf = area->data; area->free_fn = NULL; } if (len) *len = area->length; vips_area_unref(area); } return result; } /** * vips_jpegsave_mime: (method) * @in: image to save * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @Q: %gint, quality factor * * @optimize_coding: %gboolean, compute optimal Huffman coding tables * * @interlace: %gboolean, write an interlaced (progressive) jpeg * * @subsample_mode: #VipsForeignSubsample, chroma subsampling mode * * @trellis_quant: %gboolean, apply trellis quantisation to each 8x8 block * * @overshoot_deringing: %gboolean, overshoot samples with extreme values * * @optimize_scans: %gboolean, split DCT coefficients into separate scans * * @quant_table: %gint, quantization table index * * @restart_interval: %gint, restart interval in mcu * * As vips_jpegsave(), but save as a mime jpeg on stdout. * * See also: vips_jpegsave(), vips_image_write_to_file(). * * Returns: 0 on success, -1 on error. */ int vips_jpegsave_mime(VipsImage *in, ...) { va_list ap; int result; va_start(ap, in); result = vips_call_split("jpegsave_mime", ap, in); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/jxlload.c000066400000000000000000000546001454007373500201750ustar00rootroot00000000000000/* load jpeg-xl * * 18/3/20 * - from heifload.c * 1/10/21 * - reset read point for _load * 13/3/23 MathemanFlo * - add bits per sample metadata */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #ifdef HAVE_LIBJXL #include #include #include "pforeign.h" /* TODO: * * - add metadata support * * - add animation support * * - add "shrink" option to read out 8x shrunk image? * * - fix scRGB gamma */ #define INPUT_BUFFER_SIZE (4096) typedef struct _VipsForeignLoadJxl { VipsForeignLoad parent_object; /* Source to load from (set by subclasses). */ VipsSource *source; /* Page set by user, then we translate that into shrink factor. */ int page; int shrink; /* Base image properties. */ JxlBasicInfo info; JxlPixelFormat format; size_t icc_size; uint8_t *icc_data; /* Decompress state. */ void *runner; JxlDecoder *decoder; /* Our input buffer. */ uint8_t input_buffer[INPUT_BUFFER_SIZE]; size_t bytes_in_buffer; /* Number of errors reported during load -- use this to block load of * corrupted images. */ int n_errors; /* If we need to upsample tiles read from opj. */ gboolean upsample; /* If we need to do ycc->rgb conversion on load. */ gboolean ycc_to_rgb; } VipsForeignLoadJxl; typedef VipsForeignLoadClass VipsForeignLoadJxlClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignLoadJxl, vips_foreign_load_jxl, VIPS_TYPE_FOREIGN_LOAD); static void vips_foreign_load_jxl_dispose(GObject *gobject) { VipsForeignLoadJxl *jxl = (VipsForeignLoadJxl *) gobject; #ifdef DEBUG printf("vips_foreign_load_jxl_dispose:\n"); #endif /*DEBUG*/ VIPS_FREEF(JxlThreadParallelRunnerDestroy, jxl->runner); VIPS_FREEF(JxlDecoderDestroy, jxl->decoder); VIPS_FREE(jxl->icc_data); VIPS_UNREF(jxl->source); G_OBJECT_CLASS(vips_foreign_load_jxl_parent_class)->dispose(gobject); } static void vips_foreign_load_jxl_error(VipsForeignLoadJxl *jxl, const char *details) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(jxl); /* TODO ... jxl has no way to get error messages at the moment. */ vips_error(class->nickname, "error %s", details); } static int vips_foreign_load_jxl_build(VipsObject *object) { VipsForeignLoadJxl *jxl = (VipsForeignLoadJxl *) object; #ifdef DEBUG printf("vips_foreign_load_jxl_build:\n"); #endif /*DEBUG*/ jxl->runner = JxlThreadParallelRunnerCreate(NULL, vips_concurrency_get()); jxl->decoder = JxlDecoderCreate(NULL); if (JxlDecoderSetParallelRunner(jxl->decoder, JxlThreadParallelRunner, jxl->runner)) { vips_foreign_load_jxl_error(jxl, "JxlDecoderSetParallelRunner"); return -1; } if (VIPS_OBJECT_CLASS(vips_foreign_load_jxl_parent_class)->build(object)) return -1; return 0; } static gboolean vips_foreign_load_jxl_is_a_source(VipsSource *source) { const unsigned char *p; JxlSignature sig; return (p = vips_source_sniff(source, 12)) && (sig = JxlSignatureCheck(p, 12)) != JXL_SIG_INVALID && sig != JXL_SIG_NOT_ENOUGH_BYTES; } static VipsForeignFlags vips_foreign_load_jxl_get_flags(VipsForeignLoad *load) { return VIPS_FOREIGN_PARTIAL; } static int vips_foreign_load_jxl_fill_input(VipsForeignLoadJxl *jxl, size_t bytes_remaining) { gint64 bytes_read; #ifdef DEBUG_VERBOSE printf("vips_foreign_load_jxl_fill_input: %zd bytes requested\n", INPUT_BUFFER_SIZE - bytes_remaining); #endif /*DEBUG_VERBOSE*/ memmove(jxl->input_buffer, jxl->input_buffer + jxl->bytes_in_buffer - bytes_remaining, bytes_remaining); bytes_read = vips_source_read(jxl->source, jxl->input_buffer + bytes_remaining, INPUT_BUFFER_SIZE - bytes_remaining); /* Read error, or unexpected end of input. */ if (bytes_read <= 0) return -1; jxl->bytes_in_buffer = bytes_read + bytes_remaining; #ifdef DEBUG_VERBOSE printf("vips_foreign_load_jxl_fill_input: %zd bytes read\n", bytes_read); #endif /*DEBUG_VERBOSE*/ return 0; } #ifdef DEBUG static void vips_foreign_load_jxl_print_status(JxlDecoderStatus status) { switch (status) { case JXL_DEC_SUCCESS: printf("JXL_DEC_SUCCESS\n"); break; case JXL_DEC_ERROR: printf("JXL_DEC_ERROR\n"); break; case JXL_DEC_NEED_MORE_INPUT: printf("JXL_DEC_NEED_MORE_INPUT\n"); break; case JXL_DEC_NEED_PREVIEW_OUT_BUFFER: printf("JXL_DEC_NEED_PREVIEW_OUT_BUFFER\n"); break; case JXL_DEC_NEED_DC_OUT_BUFFER: printf("JXL_DEC_NEED_DC_OUT_BUFFER\n"); break; case JXL_DEC_NEED_IMAGE_OUT_BUFFER: printf("JXL_DEC_NEED_IMAGE_OUT_BUFFER\n"); break; case JXL_DEC_JPEG_NEED_MORE_OUTPUT: printf("JXL_DEC_JPEG_NEED_MORE_OUTPUT\n"); break; case JXL_DEC_BASIC_INFO: printf("JXL_DEC_BASIC_INFO\n"); break; case JXL_DEC_EXTENSIONS: printf("JXL_DEC_EXTENSIONS\n"); break; case JXL_DEC_COLOR_ENCODING: printf("JXL_DEC_COLOR_ENCODING\n"); break; case JXL_DEC_PREVIEW_IMAGE: printf("JXL_DEC_PREVIEW_IMAGE\n"); break; case JXL_DEC_FRAME: printf("JXL_DEC_FRAME\n"); break; case JXL_DEC_DC_IMAGE: printf("JXL_DEC_DC_IMAGE\n"); break; case JXL_DEC_FULL_IMAGE: printf("JXL_DEC_FULL_IMAGE\n"); break; case JXL_DEC_JPEG_RECONSTRUCTION: printf("JXL_DEC_JPEG_RECONSTRUCTION\n"); break; default: printf("JXL_DEC_\n"); break; } } static void vips_foreign_load_jxl_print_info(JxlBasicInfo *info) { printf("JxlBasicInfo:\n"); printf(" have_container = %d\n", info->have_container); printf(" xsize = %d\n", info->xsize); printf(" ysize = %d\n", info->ysize); printf(" bits_per_sample = %d\n", info->bits_per_sample); printf(" exponent_bits_per_sample = %d\n", info->exponent_bits_per_sample); printf(" intensity_target = %g\n", info->intensity_target); printf(" min_nits = %g\n", info->min_nits); printf(" relative_to_max_display = %d\n", info->relative_to_max_display); printf(" linear_below = %g\n", info->linear_below); printf(" uses_original_profile = %d\n", info->uses_original_profile); printf(" have_preview = %d\n", info->have_preview); printf(" have_animation = %d\n", info->have_animation); printf(" orientation = %d\n", info->orientation); printf(" num_color_channels = %d\n", info->num_color_channels); printf(" num_extra_channels = %d\n", info->num_extra_channels); printf(" alpha_bits = %d\n", info->alpha_bits); printf(" alpha_exponent_bits = %d\n", info->alpha_exponent_bits); printf(" alpha_premultiplied = %d\n", info->alpha_premultiplied); printf(" preview.xsize = %d\n", info->preview.xsize); printf(" preview.ysize = %d\n", info->preview.ysize); printf(" animation.tps_numerator = %d\n", info->animation.tps_numerator); printf(" animation.tps_denominator = %d\n", info->animation.tps_denominator); printf(" animation.num_loops = %d\n", info->animation.num_loops); printf(" animation.have_timecodes = %d\n", info->animation.have_timecodes); } static void vips_foreign_load_jxl_print_format(JxlPixelFormat *format) { printf("JxlPixelFormat:\n"); printf(" data_type = "); switch (format->data_type) { case JXL_TYPE_UINT8: printf("JXL_TYPE_UINT8"); break; case JXL_TYPE_UINT16: printf("JXL_TYPE_UINT16"); break; case JXL_TYPE_FLOAT: printf("JXL_TYPE_FLOAT"); break; default: printf("(unknown)"); break; } printf("\n"); printf(" num_channels = %d\n", format->num_channels); printf(" endianness = %d\n", format->endianness); printf(" align = %zd\n", format->align); } #endif /*DEBUG*/ static JxlDecoderStatus vips_foreign_load_jxl_process(VipsForeignLoadJxl *jxl) { JxlDecoderStatus status; #ifdef DEBUG printf("vips_foreign_load_jxl_process: starting ...\n"); #endif /*DEBUG*/ while ((status = JxlDecoderProcessInput(jxl->decoder)) == JXL_DEC_NEED_MORE_INPUT) { size_t bytes_remaining; #ifdef DEBUG printf("vips_foreign_load_jxl_process: reading ...\n"); #endif /*DEBUG*/ bytes_remaining = JxlDecoderReleaseInput(jxl->decoder); if (vips_foreign_load_jxl_fill_input(jxl, bytes_remaining)) return JXL_DEC_ERROR; JxlDecoderSetInput(jxl->decoder, jxl->input_buffer, jxl->bytes_in_buffer); } #ifdef DEBUG printf("vips_foreign_load_jxl_process: seen "); vips_foreign_load_jxl_print_status(status); #endif /*DEBUG*/ return status; } static int vips_foreign_load_jxl_set_header(VipsForeignLoadJxl *jxl, VipsImage *out) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(jxl); VipsBandFormat format; VipsInterpretation interpretation; if (jxl->info.xsize >= VIPS_MAX_COORD || jxl->info.ysize >= VIPS_MAX_COORD) { vips_error(class->nickname, "%s", _("image size out of bounds")); return -1; } switch (jxl->format.data_type) { case JXL_TYPE_UINT8: format = VIPS_FORMAT_UCHAR; break; case JXL_TYPE_UINT16: format = VIPS_FORMAT_USHORT; break; case JXL_TYPE_FLOAT: format = VIPS_FORMAT_FLOAT; break; default: g_assert_not_reached(); } switch (jxl->info.num_color_channels) { case 1: switch (format) { case VIPS_FORMAT_UCHAR: interpretation = VIPS_INTERPRETATION_B_W; break; case VIPS_FORMAT_USHORT: interpretation = VIPS_INTERPRETATION_GREY16; break; default: interpretation = VIPS_INTERPRETATION_B_W; break; } break; case 3: switch (format) { case VIPS_FORMAT_UCHAR: interpretation = VIPS_INTERPRETATION_sRGB; break; case VIPS_FORMAT_USHORT: interpretation = VIPS_INTERPRETATION_RGB16; break; case VIPS_FORMAT_FLOAT: interpretation = VIPS_INTERPRETATION_scRGB; break; default: interpretation = VIPS_INTERPRETATION_sRGB; break; } break; default: interpretation = VIPS_INTERPRETATION_MULTIBAND; break; } vips_image_init_fields(out, jxl->info.xsize, jxl->info.ysize, jxl->format.num_channels, format, VIPS_CODING_NONE, interpretation, 1.0, 1.0); /* Even though this is a full image reader, we hint thinstrip since * we are quite happy serving that if anything downstream * would like it. */ if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_THINSTRIP, NULL)) return -1; if (jxl->icc_data && jxl->icc_size > 0) { vips_image_set_blob(out, VIPS_META_ICC_NAME, (VipsCallbackFn) vips_area_free_cb, jxl->icc_data, jxl->icc_size); jxl->icc_data = NULL; jxl->icc_size = 0; } vips_image_set_int(out, VIPS_META_ORIENTATION, jxl->info.orientation); vips_image_set_int(out, VIPS_META_BITS_PER_SAMPLE, jxl->info.bits_per_sample); return 0; } static int vips_foreign_load_jxl_header(VipsForeignLoad *load) { VipsForeignLoadJxl *jxl = (VipsForeignLoadJxl *) load; JxlDecoderStatus status; #ifdef DEBUG printf("vips_foreign_load_jxl_header:\n"); #endif /*DEBUG*/ if (vips_source_rewind(jxl->source)) return -1; JxlDecoderRewind(jxl->decoder); if (JxlDecoderSubscribeEvents(jxl->decoder, JXL_DEC_COLOR_ENCODING | JXL_DEC_BASIC_INFO)) { vips_foreign_load_jxl_error(jxl, "JxlDecoderSubscribeEvents"); return -1; } if (vips_foreign_load_jxl_fill_input(jxl, 0)) return -1; JxlDecoderSetInput(jxl->decoder, jxl->input_buffer, jxl->bytes_in_buffer); /* Read to the end of the header. */ do { switch ((status = vips_foreign_load_jxl_process(jxl))) { case JXL_DEC_ERROR: vips_foreign_load_jxl_error(jxl, "JxlDecoderProcessInput"); return -1; case JXL_DEC_BASIC_INFO: if (JxlDecoderGetBasicInfo(jxl->decoder, &jxl->info)) { vips_foreign_load_jxl_error(jxl, "JxlDecoderGetBasicInfo"); return -1; } #ifdef DEBUG vips_foreign_load_jxl_print_info(&jxl->info); #endif /*DEBUG*/ /* Pick a pixel format to decode to. */ jxl->format.num_channels = jxl->info.num_color_channels + jxl->info.num_extra_channels; if (jxl->info.exponent_bits_per_sample > 0 || jxl->info.alpha_exponent_bits > 0) jxl->format.data_type = JXL_TYPE_FLOAT; else if (jxl->info.bits_per_sample > 8) jxl->format.data_type = JXL_TYPE_UINT16; else jxl->format.data_type = JXL_TYPE_UINT8; jxl->format.endianness = JXL_NATIVE_ENDIAN; jxl->format.align = 0; #ifdef DEBUG vips_foreign_load_jxl_print_format(&jxl->format); #endif /*DEBUG*/ break; case JXL_DEC_COLOR_ENCODING: if (JxlDecoderGetICCProfileSize(jxl->decoder, #ifndef HAVE_LIBJXL_0_9 &jxl->format, #endif JXL_COLOR_PROFILE_TARGET_DATA, &jxl->icc_size)) { vips_foreign_load_jxl_error(jxl, "JxlDecoderGetICCProfileSize"); return -1; } #ifdef DEBUG printf( "vips_foreign_load_jxl_header: " "%zd byte profile\n", jxl->icc_size); #endif /*DEBUG*/ if (!(jxl->icc_data = vips_malloc(NULL, jxl->icc_size))) return -1; if (JxlDecoderGetColorAsICCProfile(jxl->decoder, #ifndef HAVE_LIBJXL_0_9 &jxl->format, #endif JXL_COLOR_PROFILE_TARGET_DATA, jxl->icc_data, jxl->icc_size)) { vips_foreign_load_jxl_error(jxl, "JxlDecoderGetColorAsICCProfile"); return -1; } break; default: break; } /* JXL_DEC_COLOR_ENCODING is always the last status signal before * pixel decoding starts. */ } while (status != JXL_DEC_COLOR_ENCODING); if (vips_foreign_load_jxl_set_header(jxl, load->out)) return -1; VIPS_SETSTR(load->out->filename, vips_connection_filename(VIPS_CONNECTION(jxl->source))); return 0; } static int vips_foreign_load_jxl_load(VipsForeignLoad *load) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load); VipsForeignLoadJxl *jxl = (VipsForeignLoadJxl *) load; VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(load), 3); size_t buffer_size; JxlDecoderStatus status; #ifdef DEBUG printf("vips_foreign_load_jxl_load:\n"); #endif /*DEBUG*/ t[0] = vips_image_new(); if (vips_foreign_load_jxl_set_header(jxl, t[0])) return -1; /* We have to rewind ... we can't be certain the header * decoder left the input in the correct place. */ if (vips_source_rewind(jxl->source)) return -1; JxlDecoderRewind(jxl->decoder); if (JxlDecoderSubscribeEvents(jxl->decoder, JXL_DEC_FULL_IMAGE)) { vips_foreign_load_jxl_error(jxl, "JxlDecoderSubscribeEvents"); return -1; } if (vips_foreign_load_jxl_fill_input(jxl, 0)) return -1; JxlDecoderSetInput(jxl->decoder, jxl->input_buffer, jxl->bytes_in_buffer); /* Read to the end of the image. */ do { switch ((status = vips_foreign_load_jxl_process(jxl))) { case JXL_DEC_ERROR: vips_foreign_load_jxl_error(jxl, "JxlDecoderProcessInput"); return -1; case JXL_DEC_NEED_IMAGE_OUT_BUFFER: if (vips_image_write_prepare(t[0])) return -1; if (JxlDecoderImageOutBufferSize(jxl->decoder, &jxl->format, &buffer_size)) { vips_foreign_load_jxl_error(jxl, "JxlDecoderImageOutBufferSize"); return -1; } if (buffer_size != VIPS_IMAGE_SIZEOF_IMAGE(t[0])) { vips_error(class->nickname, "%s", _("bad buffer size")); return -1; } if (JxlDecoderSetImageOutBuffer(jxl->decoder, &jxl->format, VIPS_IMAGE_ADDR(t[0], 0, 0), VIPS_IMAGE_SIZEOF_IMAGE(t[0]))) { vips_foreign_load_jxl_error(jxl, "JxlDecoderSetImageOutBuffer"); return -1; } break; case JXL_DEC_FULL_IMAGE: /* Image decoded. */ break; default: break; } } while (status != JXL_DEC_SUCCESS); if (vips_image_write(t[0], load->real)) return -1; return 0; } static void vips_foreign_load_jxl_class_init(VipsForeignLoadJxlClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->dispose = vips_foreign_load_jxl_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jxlload_base"; object_class->description = _("load JPEG-XL image"); object_class->build = vips_foreign_load_jxl_build; /* libjxl is fuzzed, but it's relatively young and bugs are * still being found in jan 2022. Revise this status soon. */ operation_class->flags |= VIPS_OPERATION_UNTRUSTED; load_class->get_flags = vips_foreign_load_jxl_get_flags; load_class->header = vips_foreign_load_jxl_header; load_class->load = vips_foreign_load_jxl_load; } static void vips_foreign_load_jxl_init(VipsForeignLoadJxl *jxl) { } typedef struct _VipsForeignLoadJxlFile { VipsForeignLoadJxl parent_object; /* Filename for load. */ char *filename; } VipsForeignLoadJxlFile; typedef VipsForeignLoadJxlClass VipsForeignLoadJxlFileClass; G_DEFINE_TYPE(VipsForeignLoadJxlFile, vips_foreign_load_jxl_file, vips_foreign_load_jxl_get_type()); static int vips_foreign_load_jxl_file_build(VipsObject *object) { VipsForeignLoadJxl *jxl = (VipsForeignLoadJxl *) object; VipsForeignLoadJxlFile *file = (VipsForeignLoadJxlFile *) object; if (file->filename && !(jxl->source = vips_source_new_from_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_jxl_file_parent_class)->build(object)) return -1; return 0; } const char *vips__jxl_suffs[] = { ".jxl", NULL }; static int vips_foreign_load_jxl_is_a(const char *filename) { VipsSource *source; gboolean result; if (!(source = vips_source_new_from_file(filename))) return FALSE; result = vips_foreign_load_jxl_is_a_source(source); VIPS_UNREF(source); return result; } static void vips_foreign_load_jxl_file_class_init(VipsForeignLoadJxlFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jxlload"; object_class->build = vips_foreign_load_jxl_file_build; foreign_class->suffs = vips__jxl_suffs; load_class->is_a = vips_foreign_load_jxl_is_a; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadJxlFile, filename), NULL); } static void vips_foreign_load_jxl_file_init(VipsForeignLoadJxlFile *jxl) { } typedef struct _VipsForeignLoadJxlBuffer { VipsForeignLoadJxl parent_object; /* Load from a buffer. */ VipsArea *buf; } VipsForeignLoadJxlBuffer; typedef VipsForeignLoadJxlClass VipsForeignLoadJxlBufferClass; G_DEFINE_TYPE(VipsForeignLoadJxlBuffer, vips_foreign_load_jxl_buffer, vips_foreign_load_jxl_get_type()); static int vips_foreign_load_jxl_buffer_build(VipsObject *object) { VipsForeignLoadJxl *jxl = (VipsForeignLoadJxl *) object; VipsForeignLoadJxlBuffer *buffer = (VipsForeignLoadJxlBuffer *) object; if (buffer->buf) if (!(jxl->source = vips_source_new_from_memory( VIPS_AREA(buffer->buf)->data, VIPS_AREA(buffer->buf)->length))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_jxl_file_parent_class)->build(object)) return -1; return 0; } static gboolean vips_foreign_load_jxl_buffer_is_a(const void *buf, size_t len) { VipsSource *source; gboolean result; if (!(source = vips_source_new_from_memory(buf, len))) return FALSE; result = vips_foreign_load_jxl_is_a_source(source); VIPS_UNREF(source); return result; } static void vips_foreign_load_jxl_buffer_class_init(VipsForeignLoadJxlBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jxlload_buffer"; object_class->build = vips_foreign_load_jxl_buffer_build; load_class->is_a_buffer = vips_foreign_load_jxl_buffer_is_a; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadJxlBuffer, buf), VIPS_TYPE_BLOB); } static void vips_foreign_load_jxl_buffer_init(VipsForeignLoadJxlBuffer *buffer) { } typedef struct _VipsForeignLoadJxlSource { VipsForeignLoadJxl parent_object; /* Load from a source. */ VipsSource *source; } VipsForeignLoadJxlSource; typedef VipsForeignLoadJxlClass VipsForeignLoadJxlSourceClass; G_DEFINE_TYPE(VipsForeignLoadJxlSource, vips_foreign_load_jxl_source, vips_foreign_load_jxl_get_type()); static int vips_foreign_load_jxl_source_build(VipsObject *object) { VipsForeignLoadJxl *jxl = (VipsForeignLoadJxl *) object; VipsForeignLoadJxlSource *source = (VipsForeignLoadJxlSource *) object; if (source->source) { jxl->source = source->source; g_object_ref(jxl->source); } if (VIPS_OBJECT_CLASS(vips_foreign_load_jxl_source_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_load_jxl_source_class_init(VipsForeignLoadJxlSourceClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jxlload_source"; object_class->build = vips_foreign_load_jxl_source_build; operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_jxl_is_a_source; VIPS_ARG_OBJECT(class, "source", 1, _("Source"), _("Source to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadJxlSource, source), VIPS_TYPE_SOURCE); } static void vips_foreign_load_jxl_source_init(VipsForeignLoadJxlSource *jxl) { } #endif /*HAVE_LIBJXL*/ /* The C API wrappers are defined in foreign.c. */ libvips-8.15.1/libvips/foreign/jxlsave.c000066400000000000000000000461561454007373500202230ustar00rootroot00000000000000/* save as jpeg-xl * * 18/3/20 * - from heifload.c * 21/5/22 * - add ICC profile support */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #ifdef HAVE_LIBJXL #include #include #include #include #include #include #include #include "pforeign.h" /* TODO: * * - libjxl encode only works in one shot mode, so there's no way to write in * chunks * * - add metadata support EXIF, XMP, etc. api for this is on the way * * - add animation support * * - libjxl is currently missing error messages (I think) * * - add support encoding images with > 4 bands. */ #define OUTPUT_BUFFER_SIZE (4096) typedef struct _VipsForeignSaveJxl { VipsForeignSave parent_object; /* Where to write (set by subclasses). */ VipsTarget *target; /* Encoder options. */ int tier; double distance; int effort; gboolean lossless; int Q; /* Base image properties. */ JxlBasicInfo info; JxlColorEncoding color_encoding; JxlPixelFormat format; /* Encoder state. */ void *runner; JxlEncoder *encoder; /* Write buffer. */ uint8_t output_buffer[OUTPUT_BUFFER_SIZE]; } VipsForeignSaveJxl; typedef VipsForeignSaveClass VipsForeignSaveJxlClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignSaveJxl, vips_foreign_save_jxl, VIPS_TYPE_FOREIGN_SAVE); static void vips_foreign_save_jxl_dispose(GObject *gobject) { VipsForeignSaveJxl *jxl = (VipsForeignSaveJxl *) gobject; VIPS_FREEF(JxlThreadParallelRunnerDestroy, jxl->runner); VIPS_FREEF(JxlEncoderDestroy, jxl->encoder); VIPS_UNREF(jxl->target); G_OBJECT_CLASS(vips_foreign_save_jxl_parent_class)->dispose(gobject); } static void vips_foreign_save_jxl_error(VipsForeignSaveJxl *jxl, const char *details) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(jxl); /* TODO ... jxl has no way to get error messages at the moment. */ vips_error(class->nickname, "error %s", details); } #ifdef DEBUG static void vips_foreign_save_jxl_print_info(JxlBasicInfo *info) { printf("JxlBasicInfo:\n"); printf(" have_container = %d\n", info->have_container); printf(" xsize = %d\n", info->xsize); printf(" ysize = %d\n", info->ysize); printf(" bits_per_sample = %d\n", info->bits_per_sample); printf(" exponent_bits_per_sample = %d\n", info->exponent_bits_per_sample); printf(" intensity_target = %g\n", info->intensity_target); printf(" min_nits = %g\n", info->min_nits); printf(" relative_to_max_display = %d\n", info->relative_to_max_display); printf(" linear_below = %g\n", info->linear_below); printf(" uses_original_profile = %d\n", info->uses_original_profile); printf(" have_preview = %d\n", info->have_preview); printf(" have_animation = %d\n", info->have_animation); printf(" orientation = %d\n", info->orientation); printf(" num_color_channels = %d\n", info->num_color_channels); printf(" num_extra_channels = %d\n", info->num_extra_channels); printf(" alpha_bits = %d\n", info->alpha_bits); printf(" alpha_exponent_bits = %d\n", info->alpha_exponent_bits); printf(" alpha_premultiplied = %d\n", info->alpha_premultiplied); printf(" preview.xsize = %d\n", info->preview.xsize); printf(" preview.ysize = %d\n", info->preview.ysize); printf(" animation.tps_numerator = %d\n", info->animation.tps_numerator); printf(" animation.tps_denominator = %d\n", info->animation.tps_denominator); printf(" animation.num_loops = %d\n", info->animation.num_loops); printf(" animation.have_timecodes = %d\n", info->animation.have_timecodes); } static void vips_foreign_save_jxl_print_format(JxlPixelFormat *format) { printf("JxlPixelFormat:\n"); printf(" num_channels = %d\n", format->num_channels); printf(" data_type = "); switch (format->data_type) { case JXL_TYPE_UINT8: printf("JXL_TYPE_UINT8"); break; case JXL_TYPE_UINT16: printf("JXL_TYPE_UINT16"); break; case JXL_TYPE_FLOAT: printf("JXL_TYPE_FLOAT"); break; default: printf("(unknown)"); break; } printf("\n"); printf(" endianness = %d\n", format->endianness); printf(" align = %zd\n", format->align); } static void vips_foreign_save_jxl_print_status(JxlEncoderStatus status) { switch (status) { case JXL_ENC_SUCCESS: printf("JXL_ENC_SUCCESS\n"); break; case JXL_ENC_ERROR: printf("JXL_ENC_ERROR\n"); break; case JXL_ENC_NEED_MORE_OUTPUT: printf("JXL_ENC_NEED_MORE_OUTPUT\n"); break; case JXL_ENC_NOT_SUPPORTED: printf("JXL_ENC_NOT_SUPPORTED\n"); break; default: printf("JXL_ENC_\n"); break; } } #endif /*DEBUG*/ static int vips_foreign_save_jxl_build(VipsObject *object) { VipsForeignSave *save = (VipsForeignSave *) object; VipsForeignSaveJxl *jxl = (VipsForeignSaveJxl *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); #ifdef HAVE_LIBJXL_0_7 JxlEncoderFrameSettings *frame_settings; #else JxlEncoderOptions *frame_settings; #endif JxlEncoderStatus status; VipsImage *in; VipsBandFormat format; if (VIPS_OBJECT_CLASS(vips_foreign_save_jxl_parent_class)->build(object)) return -1; /* If Q is set and distance is not, use Q to set a rough distance * value. */ if (!vips_object_argument_isset(object, "distance")) #ifdef HAVE_LIBJXL_0_9 jxl->distance = JxlEncoderDistanceFromQuality((float) jxl->Q); #else jxl->distance = jxl->Q >= 30 ? 0.1 + (100 - jxl->Q) * 0.09 : 53.0 / 3000.0 * jxl->Q * jxl->Q - 23.0 / 20.0 * jxl->Q + 25.0; #endif /* Distance 0 is lossless. libjxl will fail for lossy distance 0. */ if (jxl->distance == 0) jxl->lossless = TRUE; jxl->runner = JxlThreadParallelRunnerCreate(NULL, vips_concurrency_get()); jxl->encoder = JxlEncoderCreate(NULL); if (JxlEncoderSetParallelRunner(jxl->encoder, JxlThreadParallelRunner, jxl->runner)) { vips_foreign_save_jxl_error(jxl, "JxlDecoderSetParallelRunner"); return -1; } in = save->ready; /* Fix the input image format. JXL uses float for 0-1 linear (ie. * scRGB) only. We must convert eg. sRGB float to 8-bit for save. */ if (in->Type == VIPS_INTERPRETATION_scRGB) format = VIPS_FORMAT_FLOAT; else if (in->Type == VIPS_INTERPRETATION_RGB16 || in->Type == VIPS_INTERPRETATION_GREY16) format = VIPS_FORMAT_USHORT; else format = VIPS_FORMAT_UCHAR; if (vips_cast(in, &t[0], format, NULL)) return -1; in = t[0]; /* Mimics VIPS_SAVEABLE_RGBA. * FIXME: add support encoding images with > 4 bands. */ if (in->Bands > 4) { if (vips_extract_band(in, &t[1], 0, "n", 4, NULL)) return -1; in = t[1]; } JxlEncoderInitBasicInfo(&jxl->info); switch (in->BandFmt) { case VIPS_FORMAT_UCHAR: jxl->info.bits_per_sample = 8; jxl->info.exponent_bits_per_sample = 0; jxl->format.data_type = JXL_TYPE_UINT8; break; case VIPS_FORMAT_USHORT: jxl->info.bits_per_sample = 16; jxl->info.exponent_bits_per_sample = 0; jxl->format.data_type = JXL_TYPE_UINT16; break; case VIPS_FORMAT_FLOAT: jxl->info.bits_per_sample = 32; jxl->info.exponent_bits_per_sample = 8; jxl->format.data_type = JXL_TYPE_FLOAT; break; default: g_assert_not_reached(); break; } switch (in->Type) { case VIPS_INTERPRETATION_B_W: case VIPS_INTERPRETATION_GREY16: jxl->info.num_color_channels = VIPS_MIN(1, in->Bands); break; case VIPS_INTERPRETATION_sRGB: case VIPS_INTERPRETATION_scRGB: case VIPS_INTERPRETATION_RGB16: jxl->info.num_color_channels = VIPS_MIN(3, in->Bands); break; default: jxl->info.num_color_channels = in->Bands; } jxl->info.num_extra_channels = VIPS_MAX(0, in->Bands - jxl->info.num_color_channels); jxl->info.xsize = in->Xsize; jxl->info.ysize = in->Ysize; jxl->format.num_channels = in->Bands; jxl->format.endianness = JXL_NATIVE_ENDIAN; jxl->format.align = 0; if (vips_image_hasalpha(in)) { jxl->info.alpha_bits = jxl->info.bits_per_sample; jxl->info.alpha_exponent_bits = jxl->info.exponent_bits_per_sample; } else { jxl->info.alpha_exponent_bits = 0; jxl->info.alpha_bits = 0; } if (vips_image_get_typeof(in, "stonits")) { double stonits; if (vips_image_get_double(in, "stonits", &stonits)) return -1; jxl->info.intensity_target = stonits; } /* uses_original_profile forces libjxl to not use lossy XYB * colourspace. The name is very confusing. */ jxl->info.uses_original_profile = jxl->lossless; if (JxlEncoderSetBasicInfo(jxl->encoder, &jxl->info)) { vips_foreign_save_jxl_error(jxl, "JxlEncoderSetBasicInfo"); return -1; } /* Set any ICC profile. */ if (vips_image_get_typeof(in, VIPS_META_ICC_NAME)) { const void *data; size_t length; if (vips_image_get_blob(in, VIPS_META_ICC_NAME, &data, &length)) return -1; #ifdef DEBUG printf("attaching %zd bytes of ICC\n", length); #endif /*DEBUG*/ if (JxlEncoderSetICCProfile(jxl->encoder, (guint8 *) data, length)) { vips_foreign_save_jxl_error(jxl, "JxlEncoderSetColorEncoding"); return -1; } } else { /* If there's no ICC profile, we must set the colour encoding * ourselves. */ if (in->Type == VIPS_INTERPRETATION_scRGB) { #ifdef DEBUG printf("setting scRGB colourspace\n"); #endif /*DEBUG*/ JxlColorEncodingSetToLinearSRGB(&jxl->color_encoding, jxl->format.num_channels < 3); } else { #ifdef DEBUG printf("setting sRGB colourspace\n"); #endif /*DEBUG*/ JxlColorEncodingSetToSRGB(&jxl->color_encoding, jxl->format.num_channels < 3); } if (JxlEncoderSetColorEncoding(jxl->encoder, &jxl->color_encoding)) { vips_foreign_save_jxl_error(jxl, "JxlEncoderSetColorEncoding"); return -1; } } /* Render the entire image in memory. libjxl seems to be missing * tile-based write at the moment. */ if (vips_image_wio_input(in)) return -1; #ifdef HAVE_LIBJXL_0_7 frame_settings = JxlEncoderFrameSettingsCreate(jxl->encoder, NULL); JxlEncoderFrameSettingsSetOption(frame_settings, JXL_ENC_FRAME_SETTING_DECODING_SPEED, jxl->tier); JxlEncoderSetFrameDistance(frame_settings, jxl->distance); JxlEncoderFrameSettingsSetOption(frame_settings, JXL_ENC_FRAME_SETTING_EFFORT, jxl->effort); JxlEncoderSetFrameLossless(frame_settings, jxl->lossless); #else frame_settings = JxlEncoderOptionsCreate(jxl->encoder, NULL); JxlEncoderOptionsSetDecodingSpeed(frame_settings, jxl->tier); JxlEncoderOptionsSetDistance(frame_settings, jxl->distance); JxlEncoderOptionsSetEffort(frame_settings, jxl->effort); JxlEncoderOptionsSetLossless(frame_settings, jxl->lossless); #endif #ifdef DEBUG vips_foreign_save_jxl_print_info(&jxl->info); vips_foreign_save_jxl_print_format(&jxl->format); printf("JxlEncoderFrameSettings:\n"); printf(" tier = %d\n", jxl->tier); printf(" distance = %g\n", jxl->distance); printf(" effort = %d\n", jxl->effort); printf(" lossless = %d\n", jxl->lossless); #endif /*DEBUG*/ if (JxlEncoderAddImageFrame(frame_settings, &jxl->format, VIPS_IMAGE_ADDR(in, 0, 0), VIPS_IMAGE_SIZEOF_IMAGE(in))) { vips_foreign_save_jxl_error(jxl, "JxlEncoderAddImageFrame"); return -1; } /* This function must be called after the final frame and/or box, * otherwise the codestream will not be encoded correctly. */ JxlEncoderCloseInput(jxl->encoder); do { uint8_t *out; size_t avail_out; out = jxl->output_buffer; avail_out = OUTPUT_BUFFER_SIZE; status = JxlEncoderProcessOutput(jxl->encoder, &out, &avail_out); switch (status) { case JXL_ENC_SUCCESS: case JXL_ENC_NEED_MORE_OUTPUT: if (vips_target_write(jxl->target, jxl->output_buffer, OUTPUT_BUFFER_SIZE - avail_out)) return -1; break; default: vips_foreign_save_jxl_error(jxl, "JxlEncoderProcessOutput"); #ifdef DEBUG vips_foreign_save_jxl_print_status(status); #endif /*DEBUG*/ return -1; } } while (status != JXL_ENC_SUCCESS); if (vips_target_end(jxl->target)) return -1; return 0; } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define US VIPS_FORMAT_USHORT #define F VIPS_FORMAT_FLOAT /* Type promotion for save ... unsigned ints + float + double. */ static VipsBandFormat bandfmt_jxl[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, UC, US, US, F, F, F, F, F, F }; static void vips_foreign_save_jxl_class_init(VipsForeignSaveJxlClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class; gobject_class->dispose = vips_foreign_save_jxl_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jxlsave_base"; object_class->description = _("save image in JPEG-XL format"); object_class->build = vips_foreign_save_jxl_build; /* libjxl is fuzzed, but it's still relatively young and bugs are * still being found in jan 2022. Revise this status soon. */ operation_class->flags |= VIPS_OPERATION_UNTRUSTED; foreign_class->suffs = vips__jxl_suffs; save_class->saveable = VIPS_SAVEABLE_ANY; save_class->format_table = bandfmt_jxl; VIPS_ARG_INT(class, "tier", 10, _("Tier"), _("Decode speed tier"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJxl, tier), 0, 4, 0); VIPS_ARG_DOUBLE(class, "distance", 11, _("Distance"), _("Target butteraugli distance"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJxl, distance), 0.0, 25.0, 1.0); VIPS_ARG_INT(class, "effort", 12, _("Effort"), _("Encoding effort"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJxl, effort), 1, 9, 7); VIPS_ARG_BOOL(class, "lossless", 13, _("Lossless"), _("Enable lossless compression"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJxl, lossless), FALSE); VIPS_ARG_INT(class, "Q", 14, _("Q"), _("Quality factor"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJxl, Q), 0, 100, 75); } static void vips_foreign_save_jxl_init(VipsForeignSaveJxl *jxl) { jxl->tier = 0; jxl->distance = 1.0; jxl->effort = 7; jxl->lossless = FALSE; jxl->Q = 75; } typedef struct _VipsForeignSaveJxlFile { VipsForeignSaveJxl parent_object; /* Filename for save. */ char *filename; } VipsForeignSaveJxlFile; typedef VipsForeignSaveJxlClass VipsForeignSaveJxlFileClass; G_DEFINE_TYPE(VipsForeignSaveJxlFile, vips_foreign_save_jxl_file, vips_foreign_save_jxl_get_type()); static int vips_foreign_save_jxl_file_build(VipsObject *object) { VipsForeignSaveJxl *jxl = (VipsForeignSaveJxl *) object; VipsForeignSaveJxlFile *file = (VipsForeignSaveJxlFile *) object; if (!(jxl->target = vips_target_new_to_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_save_jxl_file_parent_class)->build(object)) return -1; return 0; } static void vips_foreign_save_jxl_file_class_init(VipsForeignSaveJxlFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jxlsave"; object_class->build = vips_foreign_save_jxl_file_build; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJxlFile, filename), NULL); } static void vips_foreign_save_jxl_file_init(VipsForeignSaveJxlFile *file) { } typedef struct _VipsForeignSaveJxlBuffer { VipsForeignSaveJxl parent_object; /* Save to a buffer. */ VipsArea *buf; } VipsForeignSaveJxlBuffer; typedef VipsForeignSaveJxlClass VipsForeignSaveJxlBufferClass; G_DEFINE_TYPE(VipsForeignSaveJxlBuffer, vips_foreign_save_jxl_buffer, vips_foreign_save_jxl_get_type()); static int vips_foreign_save_jxl_buffer_build(VipsObject *object) { VipsForeignSaveJxl *jxl = (VipsForeignSaveJxl *) object; VipsForeignSaveJxlBuffer *buffer = (VipsForeignSaveJxlBuffer *) object; VipsBlob *blob; if (!(jxl->target = vips_target_new_to_memory())) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_save_jxl_buffer_parent_class) ->build(object)) return -1; g_object_get(jxl->target, "blob", &blob, NULL); g_object_set(buffer, "buffer", blob, NULL); vips_area_unref(VIPS_AREA(blob)); return 0; } static void vips_foreign_save_jxl_buffer_class_init( VipsForeignSaveJxlBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jxlsave_buffer"; object_class->build = vips_foreign_save_jxl_buffer_build; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to save to"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsForeignSaveJxlBuffer, buf), VIPS_TYPE_BLOB); } static void vips_foreign_save_jxl_buffer_init(VipsForeignSaveJxlBuffer *buffer) { } typedef struct _VipsForeignSaveJxlTarget { VipsForeignSaveJxl parent_object; VipsTarget *target; } VipsForeignSaveJxlTarget; typedef VipsForeignSaveJxlClass VipsForeignSaveJxlTargetClass; G_DEFINE_TYPE(VipsForeignSaveJxlTarget, vips_foreign_save_jxl_target, vips_foreign_save_jxl_get_type()); static int vips_foreign_save_jxl_target_build(VipsObject *object) { VipsForeignSaveJxl *jxl = (VipsForeignSaveJxl *) object; VipsForeignSaveJxlTarget *target = (VipsForeignSaveJxlTarget *) object; if (target->target) { jxl->target = target->target; g_object_ref(jxl->target); } if (VIPS_OBJECT_CLASS(vips_foreign_save_jxl_target_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_save_jxl_target_class_init( VipsForeignSaveJxlTargetClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "jxlsave_target"; object_class->build = vips_foreign_save_jxl_target_build; VIPS_ARG_OBJECT(class, "target", 1, _("Target"), _("Target to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveJxlTarget, target), VIPS_TYPE_TARGET); } static void vips_foreign_save_jxl_target_init(VipsForeignSaveJxlTarget *target) { } #endif /*HAVE_LIBJXL*/ /* The C API wrappers are defined in foreign.c. */ libvips-8.15.1/libvips/foreign/libnsgif/000077500000000000000000000000001454007373500201645ustar00rootroot00000000000000libvips-8.15.1/libvips/foreign/libnsgif/COPYING000066400000000000000000000021551454007373500212220ustar00rootroot00000000000000Copyright (C) 2004 Richard Wilson Copyright (C) 2008 Sean Fox Copyright (C) 2013-2021 Michael Drake 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. libvips-8.15.1/libvips/foreign/libnsgif/README-ns.md000066400000000000000000000126601454007373500220660ustar00rootroot00000000000000LibNSGIF: NetSurf GIF decoder ============================= LibNSGIF is a C library for decoding GIF format images and animations. It is licenced under the MIT licence. This library aims to provide a simple API for robust decoding of GIF files. Details ------- The GIF source data is scanned prior to decoding, allowing for efficient decoding. The scanning phase will scan currently available data and will resume from where it left off when called with additional data. Only one frame is ever fully decoded to a bitmap at a time, reducing memory usage for large GIFs. Using ----- LibNSGIF allows the client to allocate the bitmap into which the GIF is decoded. The client can have an arbitrary bitmap structure, that is simply a void pointer to LibNSGIF. The client must provide a callback table for interacting with bitmaps, and the required client bitmap pixel format. The bitmap table must include as a minimum functions to create and destroy bitmaps, and a function to get a pointer to the bitmap's pixel data buffer. LibNSGIF always decodes to a 32bpp, 8 bits per channel bitmap pixel format, however it allows the client to control the colour component ordering. To load a GIF, first create an nsgif object with `nsgif_create()`. ```c err = nsgif_create(&bitmap_callbacks, NSGIF_BITMAP_FMT_R8G8B8A8, &gif); if (err != NSGIF_OK) { fprintf(stderr, "%s\n", nsgif_strerror(err)); // Handle error } ``` Now you can load the GIF source data into the nsgif object with `nsgif_data_scan()`: ```c err = nsgif_data_scan(gif, size, data); if (err != NSGIF_OK) { fprintf(stderr, "%s\n", nsgif_strerror(err)); // Handle error } ``` This scans the source data and decodes information about each frame, however it doesn't decode any of the bitmap data for the frames. The client may call `nsgif_data_scan()` multiple times as source data is fetched. The early frames can be decoded before the later frames are scanned. Frames have to be scanned before they can be decoded. This function will sometimes return an error. That is OK, and even expected. It is fine to proceed to decoding any frames that are available after a scan. Some errors indicate that there is a flaw in the source GIF data (not at all uncommon, GIF is an ancient format that has had many broken encoders), or that it has reached the end of the source data. > **Note**: The client must not free the data until after calling > `nsgif_destroy()`. You can move the data, e.g. if you realloc to a bigger > buffer. Just be sure to call `nsgif_data_scan()` again with the new pointer > before making any other calls against that nsgif object. When all the source data has been provided to `nsgif_data_scan()` it is advisable to call `nsgif_data_complete()` (see below), although this is not necessary to start decoding frames. To decode the frames, you can call `nsgif_get_info()` to get the frame_count, and then call `nsgif_frame_decode()` for each frame, and manage the animation, and non-displayable frames yourself, or you can use the helper function, `nsgif_frame_prepare()`: ```c err = nsgif_frame_prepare(gif, &area, &delay_cs, &frame_new); if (err != NSGIF_OK) { fprintf(stderr, "%s\n", nsgif_strerror(err)); // Handle error } // Update our bitmap to know it should be showing `frame_new` now. // Trigger redraw of `area` of image. if (delay_cs != NSGIF_INFINITE) { // Schedule next frame in delay_cs. } ``` This will return the number of the next frame to be decoded, the delay in cs before the next frame should be decoded, and the area of the bitmap that needs to be redrawn. > **Note**: GIF frames may only occupy a portion of the overall bitmap, and only > redrawing the area that has changed may be more efficient than redrawing the > whole thing. The returned area comprises both any region that has been > changed in the disposal of the previous frame and the new frame. GIF files can limit the number of animation loops to a finite number or they may only have one frame. In either of these cases, the returned delay is `NSGIF_INFINITE` indicating that the animation is complete. Subsequent calls to `nsgif_frame_prepare()` will return `NSGIF_ERR_ANIMATION_END`. To force the repeat of an animation, call `nsgif_reset()`. One reason for the two-step decoding of frames is that it enables deferred decoding. You can call `nsgif_frame_prepare()` and cause a redraw of that portion of your document. If the GIF is off screen (another tab, or scrolled out of sight), there is no need to decode it at all. Once the bitmap is needed for a redraw, you can decode the correct frame on-demand with: ```c err = nsgif_frame_decode(gif, frame_new, &bitmap); if (err != NSGIF_OK) { fprintf(stderr, "%s\n", nsgif_strerror(err)); // Handle error } ``` Note that this will be a no-op if the requested frame already happens to be the decoded frame. You can call `nsgif_frame_prepare()` and `nsgif_frame_decode()` before all of the GIF data has been provided using `nsgif_data_scan()` calls. For example if you want to make a start decoding and displaying the early frames of the GIF before the entire animation file has been downloaded. When you do this, `nsgif_frame_prepare()` will not loop the animation back to the start unless you call `nsgif_data_complete()` to indicate all of the data has been fetched. Calling `nsgif_data_complete()` also lets libnsgif display any trailing truncated frame. ```c nsgif_data_complete(gif); ``` Once you are done with the GIF, free up the nsgif object with: ```c nsgif_destroy(gif); ``` libvips-8.15.1/libvips/foreign/libnsgif/README.md000066400000000000000000000006471454007373500214520ustar00rootroot00000000000000# libnsgif This is [libnsgif](https://www.netsurf-browser.org/projects/libnsgif/), but within the libvips build system. # To update Run `./update.sh` to update this copy of libnsgif from the upstream repo. It will also patch libnsgif.c to prevent it modifying the input. Last updated 22 Jan 2023. # To do No attempt made to run tests or build docs. Though the gif loader is tested as part of the libvips test suite. libvips-8.15.1/libvips/foreign/libnsgif/gif.c000066400000000000000000001432721454007373500211060ustar00rootroot00000000000000/* * Copyright 2004 Richard Wilson * Copyright 2008 Sean Fox * Copyright 2013-2022 Michael Drake * * This file is part of NetSurf's libnsgif, http://www.netsurf-browser.org/ * Licenced under the MIT License, * http://www.opensource.org/licenses/mit-license.php */ #include #include #include #include #include #include "lzw.h" #include "nsgif.h" /** Default minimum allowable frame delay in cs. */ #define NSGIF_FRAME_DELAY_MIN 2 /** * Default frame delay to apply. * * Used when a frame delay lower than the minimum is requested. */ #define NSGIF_FRAME_DELAY_DEFAULT 10 /** GIF frame data */ typedef struct nsgif_frame { struct nsgif_frame_info info; /** offset (in bytes) to the GIF frame data */ size_t frame_offset; /** whether the frame has previously been decoded. */ bool decoded; /** whether the frame is totally opaque */ bool opaque; /** whether a full image redraw is required */ bool redraw_required; /** Amount of LZW data found in scan */ uint32_t lzw_data_length; /** the index designating a transparent pixel */ uint32_t transparency_index; /** offset to frame colour table */ uint32_t colour_table_offset; /* Frame flags */ uint32_t flags; } nsgif_frame; /** Pixel format: colour component order. */ struct nsgif_colour_layout { uint8_t r; /**< Byte offset within pixel to red component. */ uint8_t g; /**< Byte offset within pixel to green component. */ uint8_t b; /**< Byte offset within pixel to blue component. */ uint8_t a; /**< Byte offset within pixel to alpha component. */ }; /** GIF animation data */ struct nsgif { struct nsgif_info info; /** LZW decode context */ void *lzw_ctx; /** callbacks for bitmap functions */ nsgif_bitmap_cb_vt bitmap; /** decoded frames */ nsgif_frame *frames; /** current frame */ uint32_t frame; /** current frame decoded to bitmap */ uint32_t decoded_frame; /** currently decoded image; stored as bitmap from bitmap_create callback */ nsgif_bitmap_t *frame_image; /** Row span of frame_image in pixels. */ uint32_t rowspan; /** Minimum allowable frame delay. */ uint16_t delay_min; /** Frame delay to apply when delay is less than \ref delay_min. */ uint16_t delay_default; /** number of animation loops so far */ int loop_count; /** number of frames partially decoded */ uint32_t frame_count_partial; /** * Whether all the GIF data has been supplied, or if there may be * more to come. */ bool data_complete; /** pointer to GIF data */ const uint8_t *buf; /** current index into GIF data */ size_t buf_pos; /** total number of bytes of GIF data available */ size_t buf_len; /** current number of frame holders */ uint32_t frame_holders; /** background index */ uint32_t bg_index; /** image aspect ratio (ignored) */ uint32_t aspect_ratio; /** size of global colour table (in entries) */ uint32_t colour_table_size; /** current colour table */ uint32_t *colour_table; /** Client's colour component order. */ struct nsgif_colour_layout colour_layout; /** global colour table */ uint32_t global_colour_table[NSGIF_MAX_COLOURS]; /** local colour table */ uint32_t local_colour_table[NSGIF_MAX_COLOURS]; /** previous frame for NSGIF_FRAME_RESTORE */ void *prev_frame; /** previous frame index */ uint32_t prev_index; }; /** * Helper macro to get number of elements in an array. * * \param[in] _a Array to count elements of. * \return NUlber of elements in array. */ #define NSGIF_ARRAY_LEN(_a) ((sizeof(_a)) / (sizeof(*_a))) /** * * \file * \brief GIF image decoder * * The GIF format is thoroughly documented; a full description can be found at * http://www.w3.org/Graphics/GIF/spec-gif89a.txt * * \todo Plain text and comment extensions should be implemented. */ /** Internal flag that the colour table needs to be processed */ #define NSGIF_PROCESS_COLOURS 0xaa000000 /** Internal flag that a frame is invalid/unprocessed */ #define NSGIF_FRAME_INVALID UINT32_MAX /** Transparent colour */ #define NSGIF_TRANSPARENT_COLOUR 0x00 /** No transparency */ #define NSGIF_NO_TRANSPARENCY (0xFFFFFFFFu) /* GIF Flags */ #define NSGIF_COLOUR_TABLE_MASK 0x80 #define NSGIF_COLOUR_TABLE_SIZE_MASK 0x07 #define NSGIF_BLOCK_TERMINATOR 0x00 #define NSGIF_TRAILER 0x3b /** * Convert an LZW result code to equivalent GIF result code. * * \param[in] l_res LZW response code. * \return GIF result code. */ static nsgif_error nsgif__error_from_lzw(lzw_result l_res) { static const nsgif_error g_res[] = { [LZW_OK] = NSGIF_OK, [LZW_NO_MEM] = NSGIF_ERR_OOM, [LZW_OK_EOD] = NSGIF_ERR_END_OF_DATA, [LZW_NO_DATA] = NSGIF_ERR_END_OF_DATA, [LZW_EOI_CODE] = NSGIF_ERR_DATA_FRAME, [LZW_BAD_ICODE] = NSGIF_ERR_DATA_FRAME, [LZW_BAD_CODE] = NSGIF_ERR_DATA_FRAME, }; assert(l_res != LZW_BAD_PARAM); assert(l_res != LZW_NO_COLOUR); return g_res[l_res]; } /** * Updates the sprite memory size * * \param gif The animation context * \param width The width of the sprite * \param height The height of the sprite * \return NSGIF_ERR_OOM for a memory error NSGIF_OK for success */ static nsgif_error nsgif__initialise_sprite( struct nsgif *gif, uint32_t width, uint32_t height) { /* Already allocated? */ if (gif->frame_image) { return NSGIF_OK; } assert(gif->bitmap.create); gif->frame_image = gif->bitmap.create(width, height); if (gif->frame_image == NULL) { return NSGIF_ERR_OOM; } return NSGIF_OK; } /** * Helper to get the rendering bitmap for a gif. * * \param[in] gif The gif object we're decoding. * \return Client pixel buffer for rendering into. */ static inline uint32_t* nsgif__bitmap_get( struct nsgif *gif) { nsgif_error ret; /* Make sure we have a buffer to decode to. */ ret = nsgif__initialise_sprite(gif, gif->info.width, gif->info.height); if (ret != NSGIF_OK) { return NULL; } gif->rowspan = gif->info.width; if (gif->bitmap.get_rowspan) { gif->rowspan = gif->bitmap.get_rowspan(gif->frame_image); } /* Get the frame data */ assert(gif->bitmap.get_buffer); return (void *)gif->bitmap.get_buffer(gif->frame_image); } /** * Helper to tell the client that their bitmap was modified. * * \param[in] gif The gif object we're decoding. */ static inline void nsgif__bitmap_modified( const struct nsgif *gif) { if (gif->bitmap.modified) { gif->bitmap.modified(gif->frame_image); } } /** * Helper to tell the client that whether the bitmap is opaque. * * \param[in] gif The gif object we're decoding. * \param[in] frame The frame that has been decoded. */ static inline void nsgif__bitmap_set_opaque( const struct nsgif *gif, const struct nsgif_frame *frame) { if (gif->bitmap.set_opaque) { gif->bitmap.set_opaque( gif->frame_image, frame->opaque); } } /** * Helper to get the client to determine if the bitmap is opaque. * * \todo: We don't really need to get the client to do this for us. * * \param[in] gif The gif object we're decoding. * \return true if the bitmap is opaque, false otherwise. */ static inline bool nsgif__bitmap_get_opaque( const struct nsgif *gif) { if (gif->bitmap.test_opaque) { return gif->bitmap.test_opaque( gif->frame_image); } return false; } static void nsgif__record_frame( struct nsgif *gif, const uint32_t *bitmap) { size_t pixel_bytes = sizeof(*bitmap); size_t height = gif->info.height; size_t width = gif->info.width; uint32_t *prev_frame; if (gif->decoded_frame == NSGIF_FRAME_INVALID || gif->decoded_frame == gif->prev_index) { /* No frame to copy, or already have this frame recorded. */ return; } bitmap = nsgif__bitmap_get(gif); if (bitmap == NULL) { return; } if (gif->prev_frame == NULL) { prev_frame = realloc(gif->prev_frame, width * height * pixel_bytes); if (prev_frame == NULL) { return; } } else { prev_frame = gif->prev_frame; } memcpy(prev_frame, bitmap, width * height * pixel_bytes); gif->prev_frame = prev_frame; gif->prev_index = gif->decoded_frame; } static nsgif_error nsgif__recover_frame( const struct nsgif *gif, uint32_t *bitmap) { const uint32_t *prev_frame = gif->prev_frame; size_t pixel_bytes = sizeof(*bitmap); size_t height = gif->info.height; size_t width = gif->info.width; memcpy(bitmap, prev_frame, height * width * pixel_bytes); return NSGIF_OK; } /** * Get the next line for GIF decode. * * Note that the step size must be initialised to 24 at the start of the frame * (when y == 0). This is because of the first two passes of the frame have * the same step size of 8, and the step size is used to determine the current * pass. * * \param[in] height Frame height in pixels. * \param[in,out] y Current row, starting from 0, updated on exit. * \param[in,out] step Current step starting with 24, updated on exit. * \return true if there is a row to process, false at the end of the frame. */ static inline bool nsgif__deinterlace(uint32_t height, uint32_t *y, uint8_t *step) { *y += *step & 0xf; if (*y < height) return true; switch (*step) { case 24: *y = 4; *step = 8; if (*y < height) return true; /* Fall through. */ case 8: *y = 2; *step = 4; if (*y < height) return true; /* Fall through. */ case 4: *y = 1; *step = 2; if (*y < height) return true; /* Fall through. */ default: break; } return false; } /** * Get the next line for GIF decode. * * \param[in] interlace Non-zero if the frame is not interlaced. * \param[in] height Frame height in pixels. * \param[in,out] y Current row, starting from 0, updated on exit. * \param[in,out] step Current step starting with 24, updated on exit. * \return true if there is a row to process, false at the end of the frame. */ static inline bool nsgif__next_row(uint32_t interlace, uint32_t height, uint32_t *y, uint8_t *step) { if (!interlace) { return (++*y != height); } else { return nsgif__deinterlace(height, y, step); } } /** * Get any frame clip adjustment for the image extent. * * \param[in] frame_off Frame's X or Y offset. * \param[in] frame_dim Frame width or height. * \param[in] image_ext Image width or height constraint. * \return the amount the frame needs to be clipped to fit the image in given * dimension. */ static inline uint32_t gif__clip( uint32_t frame_off, uint32_t frame_dim, uint32_t image_ext) { uint32_t frame_ext = frame_off + frame_dim; if (frame_ext <= image_ext) { return 0; } return frame_ext - image_ext; } /** * Perform any jump over decoded data, to accommodate clipped portion of frame. * * \param[in,out] skip Number of pixels of data to jump. * \param[in,out] available Number of pixels of data currently available. * \param[in,out] pos Position in decoded pixel value data. */ static inline void gif__jump_data( uint32_t *skip, uint32_t *available, const uint8_t **pos) { uint32_t jump = (*skip < *available) ? *skip : *available; *skip -= jump; *available -= jump; *pos += jump; } static nsgif_error nsgif__decode_complex( struct nsgif *gif, uint32_t width, uint32_t height, uint32_t offset_x, uint32_t offset_y, uint32_t interlace, const uint8_t *data, uint32_t transparency_index, uint32_t *restrict frame_data, uint32_t *restrict colour_table) { lzw_result res; nsgif_error ret = NSGIF_OK; uint32_t clip_x = gif__clip(offset_x, width, gif->info.width); uint32_t clip_y = gif__clip(offset_y, height, gif->info.height); const uint8_t *uncompressed; uint32_t available = 0; uint8_t step = 24; uint32_t skip = 0; uint32_t y = 0; if (offset_x >= gif->info.width || offset_y >= gif->info.height) { return NSGIF_OK; } width -= clip_x; height -= clip_y; if (width == 0 || height == 0) { return NSGIF_OK; } /* Initialise the LZW decoding */ res = lzw_decode_init(gif->lzw_ctx, data[0], gif->buf, gif->buf_len, data + 1 - gif->buf); if (res != LZW_OK) { return nsgif__error_from_lzw(res); } do { uint32_t x; uint32_t *frame_scanline; frame_scanline = frame_data + offset_x + (y + offset_y) * gif->rowspan; x = width; while (x > 0) { unsigned row_available; while (available == 0) { if (res != LZW_OK) { /* Unexpected end of frame, try to recover */ if (res == LZW_OK_EOD || res == LZW_EOI_CODE) { ret = NSGIF_OK; } else { ret = nsgif__error_from_lzw(res); } return ret; } res = lzw_decode(gif->lzw_ctx, &uncompressed, &available); if (available == 0) { return NSGIF_OK; } gif__jump_data(&skip, &available, &uncompressed); } row_available = x < available ? x : available; x -= row_available; available -= row_available; if (transparency_index > 0xFF) { while (row_available-- > 0) { *frame_scanline++ = colour_table[*uncompressed++]; } } else { while (row_available-- > 0) { register uint32_t colour; colour = *uncompressed++; if (colour != transparency_index) { *frame_scanline = colour_table[colour]; } frame_scanline++; } } } skip = clip_x; gif__jump_data(&skip, &available, &uncompressed); } while (nsgif__next_row(interlace, height, &y, &step)); return ret; } static nsgif_error nsgif__decode_simple( struct nsgif *gif, uint32_t height, uint32_t offset_y, const uint8_t *data, uint32_t transparency_index, uint32_t *restrict frame_data, uint32_t *restrict colour_table) { uint32_t pixels; uint32_t written = 0; nsgif_error ret = NSGIF_OK; lzw_result res; if (offset_y >= gif->info.height) { return NSGIF_OK; } height -= gif__clip(offset_y, height, gif->info.height); if (height == 0) { return NSGIF_OK; } /* Initialise the LZW decoding */ res = lzw_decode_init_map(gif->lzw_ctx, data[0], transparency_index, colour_table, gif->buf, gif->buf_len, data + 1 - gif->buf); if (res != LZW_OK) { return nsgif__error_from_lzw(res); } frame_data += (offset_y * gif->info.width); pixels = gif->info.width * height; while (pixels > 0) { res = lzw_decode_map(gif->lzw_ctx, frame_data, pixels, &written); pixels -= written; frame_data += written; if (res != LZW_OK) { /* Unexpected end of frame, try to recover */ if (res == LZW_OK_EOD || res == LZW_EOI_CODE) { ret = NSGIF_OK; } else { ret = nsgif__error_from_lzw(res); } break; } } if (pixels == 0) { ret = NSGIF_OK; } return ret; } static inline nsgif_error nsgif__decode( struct nsgif *gif, struct nsgif_frame *frame, const uint8_t *data, uint32_t *restrict frame_data) { nsgif_error ret; uint32_t width = frame->info.rect.x1 - frame->info.rect.x0; uint32_t height = frame->info.rect.y1 - frame->info.rect.y0; uint32_t offset_x = frame->info.rect.x0; uint32_t offset_y = frame->info.rect.y0; uint32_t transparency_index = frame->transparency_index; uint32_t *restrict colour_table = gif->colour_table; if (frame->info.interlaced == false && offset_x == 0 && width == gif->info.width && width == gif->rowspan) { ret = nsgif__decode_simple(gif, height, offset_y, data, transparency_index, frame_data, colour_table); } else { ret = nsgif__decode_complex(gif, width, height, offset_x, offset_y, frame->info.interlaced, data, transparency_index, frame_data, colour_table); } if (gif->data_complete && ret == NSGIF_ERR_END_OF_DATA) { /* This is all the data there is, so make do. */ ret = NSGIF_OK; } return ret; } /** * Restore a GIF to the background colour. * * \param[in] gif The gif object we're decoding. * \param[in] frame The frame to clear, or NULL. * \param[in] bitmap The bitmap to clear the frame in. */ static void nsgif__restore_bg( struct nsgif *gif, struct nsgif_frame *frame, uint32_t *bitmap) { size_t pixel_bytes = sizeof(*bitmap); if (frame == NULL) { size_t width = gif->info.width; size_t height = gif->info.height; memset(bitmap, NSGIF_TRANSPARENT_COLOUR, width * height * pixel_bytes); } else { uint32_t width = frame->info.rect.x1 - frame->info.rect.x0; uint32_t height = frame->info.rect.y1 - frame->info.rect.y0; uint32_t offset_x = frame->info.rect.x0; uint32_t offset_y = frame->info.rect.y0; if (frame->info.display == false || frame->info.rect.x0 >= gif->info.width || frame->info.rect.y0 >= gif->info.height) { return; } width -= gif__clip(offset_x, width, gif->info.width); height -= gif__clip(offset_y, height, gif->info.height); if (frame->info.transparency) { for (uint32_t y = 0; y < height; y++) { uint32_t *scanline = bitmap + offset_x + (offset_y + y) * gif->info.width; memset(scanline, NSGIF_TRANSPARENT_COLOUR, width * pixel_bytes); } } else { for (uint32_t y = 0; y < height; y++) { uint32_t *scanline = bitmap + offset_x + (offset_y + y) * gif->info.width; for (uint32_t x = 0; x < width; x++) { scanline[x] = gif->info.background; } } } } } static nsgif_error nsgif__update_bitmap( struct nsgif *gif, struct nsgif_frame *frame, const uint8_t *data, uint32_t frame_idx) { nsgif_error ret; uint32_t *bitmap; gif->decoded_frame = frame_idx; bitmap = nsgif__bitmap_get(gif); if (bitmap == NULL) { return NSGIF_ERR_OOM; } /* Handle any bitmap clearing/restoration required before decoding this * frame. */ if (frame_idx == 0 || gif->decoded_frame == NSGIF_FRAME_INVALID) { nsgif__restore_bg(gif, NULL, bitmap); } else { struct nsgif_frame *prev = &gif->frames[frame_idx - 1]; if (prev->info.disposal == NSGIF_DISPOSAL_RESTORE_BG) { nsgif__restore_bg(gif, prev, bitmap); } else if (prev->info.disposal == NSGIF_DISPOSAL_RESTORE_PREV) { ret = nsgif__recover_frame(gif, bitmap); if (ret != NSGIF_OK) { nsgif__restore_bg(gif, prev, bitmap); } } } if (frame->info.disposal == NSGIF_DISPOSAL_RESTORE_PREV) { /* Store the previous frame for later restoration */ nsgif__record_frame(gif, bitmap); } ret = nsgif__decode(gif, frame, data, bitmap); nsgif__bitmap_modified(gif); if (!frame->decoded) { frame->opaque = nsgif__bitmap_get_opaque(gif); frame->decoded = true; } nsgif__bitmap_set_opaque(gif, frame); return ret; } /** * Parse the graphic control extension * * \param[in] frame The gif frame object we're decoding. * \param[in] data The data to decode. * \param[in] len Byte length of data. * \return NSGIF_ERR_END_OF_DATA if more data is needed, * NSGIF_OK for success. */ static nsgif_error nsgif__parse_extension_graphic_control( struct nsgif_frame *frame, const uint8_t *data, size_t len) { enum { GIF_MASK_TRANSPARENCY = 0x01, GIF_MASK_DISPOSAL = 0x1c, }; /* 6-byte Graphic Control Extension is: * * +0 CHAR Graphic Control Label * +1 CHAR Block Size * +2 CHAR __Packed Fields__ * 3BITS Reserved * 3BITS Disposal Method * 1BIT User Input Flag * 1BIT Transparent Color Flag * +3 SHORT Delay Time * +5 CHAR Transparent Color Index */ if (len < 6) { return NSGIF_ERR_END_OF_DATA; } frame->info.delay = data[3] | (data[4] << 8); if (data[2] & GIF_MASK_TRANSPARENCY) { frame->info.transparency = true; frame->transparency_index = data[5]; } frame->info.disposal = ((data[2] & GIF_MASK_DISPOSAL) >> 2); /* I have encountered documentation and GIFs in the * wild that use 0x04 to restore the previous frame, * rather than the officially documented 0x03. I * believe some (older?) software may even actually * export this way. We handle this as a type of * "quirks" mode. */ if (frame->info.disposal == NSGIF_DISPOSAL_RESTORE_QUIRK) { frame->info.disposal = NSGIF_DISPOSAL_RESTORE_PREV; } /* if we are clearing the background then we need to * redraw enough to cover the previous frame too. */ frame->redraw_required = frame->info.disposal == NSGIF_DISPOSAL_RESTORE_BG || frame->info.disposal == NSGIF_DISPOSAL_RESTORE_PREV; return NSGIF_OK; } /** * Check an app ext identifier and authentication code for loop count extension. * * \param[in] data The data to decode. * \param[in] len Byte length of data. * \return true if extension is a loop count extension. */ static bool nsgif__app_ext_is_loop_count( const uint8_t *data, size_t len) { enum { EXT_LOOP_COUNT_BLOCK_SIZE = 0x0b, }; assert(len > 13); (void)(len); if (data[1] == EXT_LOOP_COUNT_BLOCK_SIZE) { if (strncmp((const char *)data + 2, "NETSCAPE2.0", 11) == 0 || strncmp((const char *)data + 2, "ANIMEXTS1.0", 11) == 0) { return true; } } return false; } /** * Parse the application extension * * \param[in] gif The gif object we're decoding. * \param[in] data The data to decode. * \param[in] len Byte length of data. * \return NSGIF_ERR_END_OF_DATA if more data is needed, * NSGIF_OK for success. */ static nsgif_error nsgif__parse_extension_application( struct nsgif *gif, const uint8_t *data, size_t len) { /* 14-byte+ Application Extension is: * * +0 CHAR Application Extension Label * +1 CHAR Block Size * +2 8CHARS Application Identifier * +10 3CHARS Appl. Authentication Code * +13 1-256 Application Data (Data sub-blocks) */ if (len < 17) { return NSGIF_ERR_END_OF_DATA; } if (nsgif__app_ext_is_loop_count(data, len)) { enum { EXT_LOOP_COUNT_SUB_BLOCK_SIZE = 0x03, EXT_LOOP_COUNT_SUB_BLOCK_ID = 0x01, }; if ((data[13] == EXT_LOOP_COUNT_SUB_BLOCK_SIZE) && (data[14] == EXT_LOOP_COUNT_SUB_BLOCK_ID)) { gif->info.loop_max = data[15] | (data[16] << 8); /* The value in the source data means repeat N times * after the first implied play. A value of zero has * the special meaning of loop forever. (The only way * to play the animation once is not to have this * extension at all. */ if (gif->info.loop_max > 0) { gif->info.loop_max++; } } } return NSGIF_OK; } /** * Parse the frame's extensions * * \param[in] gif The gif object we're decoding. * \param[in] frame The frame to parse extensions for. * \param[in] pos Current position in data, updated on exit. * \param[in] decode Whether to decode or skip over the extension. * \return NSGIF_ERR_END_OF_DATA if more data is needed, * NSGIF_OK for success. */ static nsgif_error nsgif__parse_frame_extensions( struct nsgif *gif, struct nsgif_frame *frame, const uint8_t **pos, bool decode) { enum { GIF_EXT_INTRODUCER = 0x21, GIF_EXT_GRAPHIC_CONTROL = 0xf9, GIF_EXT_COMMENT = 0xfe, GIF_EXT_PLAIN_TEXT = 0x01, GIF_EXT_APPLICATION = 0xff, }; const uint8_t *nsgif_data = *pos; const uint8_t *nsgif_end = gif->buf + gif->buf_len; int nsgif_bytes = nsgif_end - nsgif_data; /* Initialise the extensions */ while (nsgif_bytes > 0 && nsgif_data[0] == GIF_EXT_INTRODUCER) { bool block_step = true; nsgif_error ret; nsgif_data++; nsgif_bytes--; if (nsgif_bytes == 0) { return NSGIF_ERR_END_OF_DATA; } /* Switch on extension label */ switch (nsgif_data[0]) { case GIF_EXT_GRAPHIC_CONTROL: if (decode) { ret = nsgif__parse_extension_graphic_control( frame, nsgif_data, nsgif_bytes); if (ret != NSGIF_OK) { return ret; } } break; case GIF_EXT_APPLICATION: if (decode) { ret = nsgif__parse_extension_application( gif, nsgif_data, nsgif_bytes); if (ret != NSGIF_OK) { return ret; } } break; case GIF_EXT_COMMENT: /* Move the pointer to the first data sub-block Skip 1 * byte for the extension label. */ ++nsgif_data; block_step = false; break; default: break; } if (block_step) { /* Move the pointer to the first data sub-block Skip 2 * bytes for the extension label and size fields Skip * the extension size itself */ if (nsgif_bytes < 2) { return NSGIF_ERR_END_OF_DATA; } nsgif_data += 2 + nsgif_data[1]; } /* Repeatedly skip blocks until we get a zero block or run out * of data. This data is ignored by this gif decoder. */ while (nsgif_data < nsgif_end && nsgif_data[0] != NSGIF_BLOCK_TERMINATOR) { nsgif_data += nsgif_data[0] + 1; if (nsgif_data >= nsgif_end) { return NSGIF_ERR_END_OF_DATA; } } nsgif_data++; nsgif_bytes = nsgif_end - nsgif_data; } if (nsgif_data > nsgif_end) { nsgif_data = nsgif_end; } /* Set buffer position and return */ *pos = nsgif_data; return NSGIF_OK; } /** * Parse a GIF Image Descriptor. * * The format is: * * +0 CHAR Image Separator (0x2c) * +1 SHORT Image Left Position * +3 SHORT Image Top Position * +5 SHORT Width * +7 SHORT Height * +9 CHAR __Packed Fields__ * 1BIT Local Colour Table Flag * 1BIT Interlace Flag * 1BIT Sort Flag * 2BITS Reserved * 3BITS Size of Local Colour Table * * \param[in] gif The gif object we're decoding. * \param[in] frame The frame to parse an image descriptor for. * \param[in] pos Current position in data, updated on exit. * \param[in] decode Whether to decode the image descriptor. * \return NSGIF_OK on success, appropriate error otherwise. */ static nsgif_error nsgif__parse_image_descriptor( struct nsgif *gif, struct nsgif_frame *frame, const uint8_t **pos, bool decode) { const uint8_t *data = *pos; size_t len = gif->buf + gif->buf_len - data; enum { NSGIF_IMAGE_DESCRIPTOR_LEN = 10u, NSGIF_IMAGE_SEPARATOR = 0x2Cu, NSGIF_MASK_INTERLACE = 0x40u, }; assert(gif != NULL); assert(frame != NULL); if (len < NSGIF_IMAGE_DESCRIPTOR_LEN) { return NSGIF_ERR_END_OF_DATA; } if (decode) { uint32_t x, y, w, h; if (data[0] != NSGIF_IMAGE_SEPARATOR) { return NSGIF_ERR_DATA_FRAME; } x = data[1] | (data[2] << 8); y = data[3] | (data[4] << 8); w = data[5] | (data[6] << 8); h = data[7] | (data[8] << 8); frame->flags = data[9]; frame->info.rect.x0 = x; frame->info.rect.y0 = y; frame->info.rect.x1 = x + w; frame->info.rect.y1 = y + h; frame->info.interlaced = frame->flags & NSGIF_MASK_INTERLACE; /* Allow first frame to grow image dimensions. */ if (gif->info.frame_count == 0) { if (x + w > gif->info.width) { gif->info.width = x + w; } if (y + h > gif->info.height) { gif->info.height = y + h; } } } *pos += NSGIF_IMAGE_DESCRIPTOR_LEN; return NSGIF_OK; } /** * Extract a GIF colour table into a LibNSGIF colour table buffer. * * \param[in] colour_table The colour table to populate. * \param[in] layout la. * \param[in] colour_table_entries The number of colour table entries. * \param[in] data Raw colour table data. */ static void nsgif__colour_table_decode( uint32_t colour_table[NSGIF_MAX_COLOURS], const struct nsgif_colour_layout *layout, size_t colour_table_entries, const uint8_t *data) { uint8_t *entry = (uint8_t *)colour_table; while (colour_table_entries--) { /* Gif colour map contents are r,g,b. * * We want to pack them bytewise into the colour table, * according to the client colour layout. */ entry[layout->r] = *data++; entry[layout->g] = *data++; entry[layout->b] = *data++; entry[layout->a] = 0xff; entry += sizeof(uint32_t); } } /** * Extract a GIF colour table into a LibNSGIF colour table buffer. * * \param[in] colour_table The colour table to populate. * \param[in] layout The target pixel format to decode to. * \param[in] colour_table_entries The number of colour table entries. * \param[in] data Current position in data. * \param[in] data_len The available length of `data`. * \param[out] used Number of colour table bytes read. * \param[in] decode Whether to decode the colour table. * \return NSGIF_OK on success, appropriate error otherwise. */ static inline nsgif_error nsgif__colour_table_extract( uint32_t colour_table[NSGIF_MAX_COLOURS], const struct nsgif_colour_layout *layout, size_t colour_table_entries, const uint8_t *data, size_t data_len, size_t *used, bool decode) { if (data_len < colour_table_entries * 3) { return NSGIF_ERR_END_OF_DATA; } if (decode) { nsgif__colour_table_decode(colour_table, layout, colour_table_entries, data); } *used = colour_table_entries * 3; return NSGIF_OK; } /** * Get a frame's colour table. * * Sets up gif->colour_table for the frame. * * \param[in] gif The gif object we're decoding. * \param[in] frame The frame to get the colour table for. * \param[in] pos Current position in data, updated on exit. * \param[in] decode Whether to decode the colour table. * \return NSGIF_OK on success, appropriate error otherwise. */ static nsgif_error nsgif__parse_colour_table( struct nsgif *gif, struct nsgif_frame *frame, const uint8_t **pos, bool decode) { nsgif_error ret; const uint8_t *data = *pos; size_t len = gif->buf + gif->buf_len - data; size_t used_bytes; assert(gif != NULL); assert(frame != NULL); if ((frame->flags & NSGIF_COLOUR_TABLE_MASK) == 0) { gif->colour_table = gif->global_colour_table; return NSGIF_OK; } if (decode == false) { frame->colour_table_offset = *pos - gif->buf; } ret = nsgif__colour_table_extract( gif->local_colour_table, &gif->colour_layout, 2 << (frame->flags & NSGIF_COLOUR_TABLE_SIZE_MASK), data, len, &used_bytes, decode); if (ret != NSGIF_OK) { return ret; } *pos += used_bytes; if (decode) { gif->colour_table = gif->local_colour_table; } else { frame->info.local_palette = true; } return NSGIF_OK; } /** * Parse the image data for a gif frame. * * Sets up gif->colour_table for the frame. * * \param[in] gif The gif object we're decoding. * \param[in] frame The frame to parse image data for. * \param[in] pos Current position in data, updated on exit. * \param[in] decode Whether to decode the image data. * \return NSGIF_OK on success, appropriate error otherwise. */ static nsgif_error nsgif__parse_image_data( struct nsgif *gif, struct nsgif_frame *frame, const uint8_t **pos, bool decode) { const uint8_t *data = *pos; size_t len = gif->buf + gif->buf_len - data; uint32_t frame_idx = frame - gif->frames; uint8_t minimum_code_size; nsgif_error ret; assert(gif != NULL); assert(frame != NULL); if (!decode) { gif->frame_count_partial = frame_idx + 1; } /* Ensure sufficient data remains. A gif trailer or a minimum lzw code * followed by a gif trailer is treated as OK, although without any * image data. */ switch (len) { default: if (data[0] == NSGIF_TRAILER) return NSGIF_OK; break; case 2: if (data[1] == NSGIF_TRAILER) return NSGIF_OK; /* Fall through. */ case 1: if (data[0] == NSGIF_TRAILER) return NSGIF_OK; /* Fall through. */ case 0: return NSGIF_ERR_END_OF_DATA; } minimum_code_size = data[0]; if (minimum_code_size >= LZW_CODE_MAX) { return NSGIF_ERR_DATA_FRAME; } if (decode) { ret = nsgif__update_bitmap(gif, frame, data, frame_idx); } else { uint32_t block_size = 0; /* Skip the minimum code size. */ data++; len--; while (block_size != 1) { if (len < 1) { return NSGIF_ERR_END_OF_DATA; } block_size = data[0] + 1; /* Check if the frame data runs off the end of the file */ if (block_size > len) { frame->lzw_data_length += len; return NSGIF_ERR_END_OF_DATA; } len -= block_size; data += block_size; frame->lzw_data_length += block_size; } *pos = data; gif->info.frame_count = frame_idx + 1; gif->frames[frame_idx].info.display = true; return NSGIF_OK; } return ret; } static struct nsgif_frame *nsgif__get_frame( struct nsgif *gif, uint32_t frame_idx) { struct nsgif_frame *frame; if (gif->frame_holders > frame_idx) { frame = &gif->frames[frame_idx]; } else { /* Allocate more memory */ size_t count = frame_idx + 1; struct nsgif_frame *temp; temp = realloc(gif->frames, count * sizeof(*frame)); if (temp == NULL) { return NULL; } gif->frames = temp; gif->frame_holders = count; frame = &gif->frames[frame_idx]; frame->info.local_palette = false; frame->info.transparency = false; frame->info.display = false; frame->info.disposal = 0; frame->info.delay = 10; frame->transparency_index = NSGIF_NO_TRANSPARENCY; frame->frame_offset = gif->buf_pos; frame->redraw_required = false; frame->lzw_data_length = 0; frame->decoded = false; } return frame; } /** * Attempts to initialise the next frame * * \param[in] gif The animation context * \param[in] frame_idx The frame number to decode. * \param[in] decode Whether to decode the graphical image data. * \return NSGIF_OK on success, appropriate error otherwise. */ static nsgif_error nsgif__process_frame( struct nsgif *gif, uint32_t frame_idx, bool decode) { nsgif_error ret; const uint8_t *pos; const uint8_t *end; struct nsgif_frame *frame; frame = nsgif__get_frame(gif, frame_idx); if (frame == NULL) { return NSGIF_ERR_OOM; } end = gif->buf + gif->buf_len; if (decode) { pos = gif->buf + frame->frame_offset; /* Ensure this frame is supposed to be decoded */ if (frame->info.display == false) { return NSGIF_OK; } /* Ensure the frame is in range to decode */ if (frame_idx > gif->frame_count_partial) { return NSGIF_ERR_END_OF_DATA; } /* Done if frame is already decoded */ if (frame_idx == gif->decoded_frame) { return NSGIF_OK; } } else { pos = gif->buf + gif->buf_pos; /* Check if we've finished */ if (pos < end && pos[0] == NSGIF_TRAILER) { return NSGIF_OK; } } ret = nsgif__parse_frame_extensions(gif, frame, &pos, !decode); if (ret != NSGIF_OK) { goto cleanup; } ret = nsgif__parse_image_descriptor(gif, frame, &pos, !decode); if (ret != NSGIF_OK) { goto cleanup; } ret = nsgif__parse_colour_table(gif, frame, &pos, decode); if (ret != NSGIF_OK) { goto cleanup; } ret = nsgif__parse_image_data(gif, frame, &pos, decode); if (ret != NSGIF_OK) { goto cleanup; } cleanup: if (!decode) { gif->buf_pos = pos - gif->buf; } return ret; } /* exported function documented in nsgif.h */ void nsgif_destroy(nsgif_t *gif) { if (gif == NULL) { return; } /* Release all our memory blocks */ if (gif->frame_image) { assert(gif->bitmap.destroy); gif->bitmap.destroy(gif->frame_image); gif->frame_image = NULL; } free(gif->frames); gif->frames = NULL; free(gif->prev_frame); gif->prev_frame = NULL; lzw_context_destroy(gif->lzw_ctx); gif->lzw_ctx = NULL; free(gif); } /** * Check whether the host is little endian. * * Checks whether least significant bit is in the first byte of a `uint16_t`. * * \return true if host is little endian. */ static inline bool nsgif__host_is_little_endian(void) { const uint16_t test = 1; return ((const uint8_t *) &test)[0]; } static struct nsgif_colour_layout nsgif__bitmap_fmt_to_colour_layout( nsgif_bitmap_fmt_t bitmap_fmt) { bool le = nsgif__host_is_little_endian(); /* Map endian-dependant formats to byte-wise format for the host. */ switch (bitmap_fmt) { case NSGIF_BITMAP_FMT_RGBA8888: bitmap_fmt = (le) ? NSGIF_BITMAP_FMT_A8B8G8R8 : NSGIF_BITMAP_FMT_R8G8B8A8; break; case NSGIF_BITMAP_FMT_BGRA8888: bitmap_fmt = (le) ? NSGIF_BITMAP_FMT_A8R8G8B8 : NSGIF_BITMAP_FMT_B8G8R8A8; break; case NSGIF_BITMAP_FMT_ARGB8888: bitmap_fmt = (le) ? NSGIF_BITMAP_FMT_B8G8R8A8 : NSGIF_BITMAP_FMT_A8R8G8B8; break; case NSGIF_BITMAP_FMT_ABGR8888: bitmap_fmt = (le) ? NSGIF_BITMAP_FMT_R8G8B8A8 : NSGIF_BITMAP_FMT_A8B8G8R8; break; default: break; } /* Set up colour component order for bitmap format. */ switch (bitmap_fmt) { default: /* Fall through. */ case NSGIF_BITMAP_FMT_R8G8B8A8: return (struct nsgif_colour_layout) { .r = 0, .g = 1, .b = 2, .a = 3, }; case NSGIF_BITMAP_FMT_B8G8R8A8: return (struct nsgif_colour_layout) { .b = 0, .g = 1, .r = 2, .a = 3, }; case NSGIF_BITMAP_FMT_A8R8G8B8: return (struct nsgif_colour_layout) { .a = 0, .r = 1, .g = 2, .b = 3, }; case NSGIF_BITMAP_FMT_A8B8G8R8: return (struct nsgif_colour_layout) { .a = 0, .b = 1, .g = 2, .r = 3, }; } } /* exported function documented in nsgif.h */ nsgif_error nsgif_create( const nsgif_bitmap_cb_vt *bitmap_vt, nsgif_bitmap_fmt_t bitmap_fmt, nsgif_t **gif_out) { nsgif_t *gif; gif = calloc(1, sizeof(*gif)); if (gif == NULL) { return NSGIF_ERR_OOM; } gif->bitmap = *bitmap_vt; gif->decoded_frame = NSGIF_FRAME_INVALID; gif->prev_index = NSGIF_FRAME_INVALID; gif->delay_min = NSGIF_FRAME_DELAY_MIN; gif->delay_default = NSGIF_FRAME_DELAY_DEFAULT; gif->colour_layout = nsgif__bitmap_fmt_to_colour_layout(bitmap_fmt); *gif_out = gif; return NSGIF_OK; } /* exported function documented in nsgif.h */ void nsgif_set_frame_delay_behaviour( nsgif_t *gif, uint16_t delay_min, uint16_t delay_default) { gif->delay_min = delay_min; gif->delay_default = delay_default; } /** * Read GIF header. * * 6-byte GIF file header is: * * +0 3CHARS Signature ('GIF') * +3 3CHARS Version ('87a' or '89a') * * \param[in] gif The GIF object we're decoding. * \param[in,out] pos The current buffer position, updated on success. * \param[in] strict Whether to require a known GIF version. * \return NSGIF_OK on success, appropriate error otherwise. */ static nsgif_error nsgif__parse_header( struct nsgif *gif, const uint8_t **pos, bool strict) { const uint8_t *data = *pos; size_t len = gif->buf + gif->buf_len - data; if (len < 6) { return NSGIF_ERR_END_OF_DATA; } if (strncmp((const char *) data, "GIF", 3) != 0) { return NSGIF_ERR_DATA; } data += 3; if (strict == true) { if ((strncmp((const char *) data, "87a", 3) != 0) && (strncmp((const char *) data, "89a", 3) != 0)) { return NSGIF_ERR_DATA; } } data += 3; *pos = data; return NSGIF_OK; } /** * Read Logical Screen Descriptor. * * 7-byte Logical Screen Descriptor is: * * +0 SHORT Logical Screen Width * +2 SHORT Logical Screen Height * +4 CHAR __Packed Fields__ * 1BIT Global Colour Table Flag * 3BITS Colour Resolution * 1BIT Sort Flag * 3BITS Size of Global Colour Table * +5 CHAR Background Colour Index * +6 CHAR Pixel Aspect Ratio * * \param[in] gif The GIF object we're decoding. * \param[in,out] pos The current buffer position, updated on success. * \return NSGIF_OK on success, appropriate error otherwise. */ static nsgif_error nsgif__parse_logical_screen_descriptor( struct nsgif *gif, const uint8_t **pos) { const uint8_t *data = *pos; size_t len = gif->buf + gif->buf_len - data; if (len < 7) { return NSGIF_ERR_END_OF_DATA; } gif->info.width = data[0] | (data[1] << 8); gif->info.height = data[2] | (data[3] << 8); gif->info.global_palette = data[4] & NSGIF_COLOUR_TABLE_MASK; gif->colour_table_size = 2 << (data[4] & NSGIF_COLOUR_TABLE_SIZE_MASK); gif->bg_index = data[5]; gif->aspect_ratio = data[6]; gif->info.loop_max = 1; *pos += 7; return NSGIF_OK; } /* exported function documented in nsgif.h */ nsgif_error nsgif_data_scan( nsgif_t *gif, size_t size, const uint8_t *data) { const uint8_t *nsgif_data; nsgif_error ret; uint32_t frames; if (gif->data_complete) { return NSGIF_ERR_DATA_COMPLETE; } /* Initialize values */ gif->buf_len = size; gif->buf = data; /* Get our current processing position */ nsgif_data = gif->buf + gif->buf_pos; /* See if we should initialise the GIF */ if (gif->buf_pos == 0) { /* We want everything to be NULL before we start so we've no * chance of freeing bad pointers (paranoia) */ gif->frame_image = NULL; gif->frames = NULL; gif->frame_holders = 0; /* The caller may have been lazy and not reset any values */ gif->info.frame_count = 0; gif->frame_count_partial = 0; gif->decoded_frame = NSGIF_FRAME_INVALID; gif->frame = NSGIF_FRAME_INVALID; ret = nsgif__parse_header(gif, &nsgif_data, false); if (ret != NSGIF_OK) { return ret; } ret = nsgif__parse_logical_screen_descriptor(gif, &nsgif_data); if (ret != NSGIF_OK) { return ret; } /* Remember we've done this now */ gif->buf_pos = nsgif_data - gif->buf; /* Some broken GIFs report the size as the screen size they * were created in. As such, we detect for the common cases and * set the sizes as 0 if they are found which results in the * GIF being the maximum size of the frames. */ if (((gif->info.width == 640) && (gif->info.height == 480)) || ((gif->info.width == 640) && (gif->info.height == 512)) || ((gif->info.width == 800) && (gif->info.height == 600)) || ((gif->info.width == 1024) && (gif->info.height == 768)) || ((gif->info.width == 1280) && (gif->info.height == 1024)) || ((gif->info.width == 1600) && (gif->info.height == 1200)) || ((gif->info.width == 0) || (gif->info.height == 0)) || ((gif->info.width > 2048) || (gif->info.height > 2048))) { gif->info.width = 1; gif->info.height = 1; } /* Set the first colour to a value that will never occur in * reality so we know if we've processed it */ gif->global_colour_table[0] = NSGIF_PROCESS_COLOURS; /* Check if the GIF has no frame data (13-byte header + 1-byte * termination block) Although generally useless, the GIF * specification does not expressly prohibit this */ if (gif->buf_len == gif->buf_pos + 1) { if (nsgif_data[0] == NSGIF_TRAILER) { return NSGIF_OK; } } } /* Do the colour map if we haven't already. As the top byte is always * 0xff or 0x00 depending on the transparency we know if it's been * filled in. */ if (gif->global_colour_table[0] == NSGIF_PROCESS_COLOURS) { /* Check for a global colour map signified by bit 7 */ if (gif->info.global_palette) { size_t remaining = gif->buf + gif->buf_len - nsgif_data; size_t used; ret = nsgif__colour_table_extract( gif->global_colour_table, &gif->colour_layout, gif->colour_table_size, nsgif_data, remaining, &used, true); if (ret != NSGIF_OK) { return ret; } nsgif_data += used; gif->buf_pos = (nsgif_data - gif->buf); } else { /* Create a default colour table with the first two * colours as black and white. */ uint8_t *entry = (uint8_t *)gif->global_colour_table; /* Black */ entry[gif->colour_layout.r] = 0x00; entry[gif->colour_layout.g] = 0x00; entry[gif->colour_layout.b] = 0x00; entry[gif->colour_layout.a] = 0xFF; entry += sizeof(uint32_t); /* White */ entry[gif->colour_layout.r] = 0xFF; entry[gif->colour_layout.g] = 0xFF; entry[gif->colour_layout.b] = 0xFF; entry[gif->colour_layout.a] = 0xFF; gif->colour_table_size = 2; } if (gif->info.global_palette && gif->bg_index < gif->colour_table_size) { size_t bg_idx = gif->bg_index; gif->info.background = gif->global_colour_table[bg_idx]; } else { gif->info.background = gif->global_colour_table[0]; } } if (gif->lzw_ctx == NULL) { lzw_result res = lzw_context_create( (struct lzw_ctx **)&gif->lzw_ctx); if (res != LZW_OK) { return nsgif__error_from_lzw(res); } } /* Try to initialise all frames. */ do { frames = gif->info.frame_count; ret = nsgif__process_frame(gif, frames, false); } while (gif->info.frame_count > frames); if (ret == NSGIF_ERR_END_OF_DATA && gif->info.frame_count > 0) { ret = NSGIF_OK; } return ret; } /* exported function documented in nsgif.h */ void nsgif_data_complete( nsgif_t *gif) { if (gif->data_complete == false) { uint32_t start = gif->info.frame_count; uint32_t end = gif->frame_count_partial; for (uint32_t f = start; f < end; f++) { nsgif_frame *frame = &gif->frames[f]; if (frame->lzw_data_length > 0) { frame->info.display = true; gif->info.frame_count = f + 1; if (f == 0) { frame->info.transparency = true; } break; } } } gif->data_complete = true; } static void nsgif__redraw_rect_extend( const nsgif_rect_t *frame, nsgif_rect_t *redraw) { if (redraw->x1 == 0 || redraw->y1 == 0) { *redraw = *frame; } else { if (redraw->x0 > frame->x0) { redraw->x0 = frame->x0; } if (redraw->x1 < frame->x1) { redraw->x1 = frame->x1; } if (redraw->y0 > frame->y0) { redraw->y0 = frame->y0; } if (redraw->y1 < frame->y1) { redraw->y1 = frame->y1; } } } static uint32_t nsgif__frame_next( const nsgif_t *gif, bool partial, uint32_t frame) { uint32_t frames = partial ? gif->frame_count_partial : gif->info.frame_count; if (frames == 0) { return NSGIF_FRAME_INVALID; } frame++; return (frame >= frames) ? 0 : frame; } static nsgif_error nsgif__next_displayable_frame( const nsgif_t *gif, uint32_t *frame, uint32_t *delay) { uint32_t next = *frame; do { next = nsgif__frame_next(gif, false, next); if (next <= *frame && *frame != NSGIF_FRAME_INVALID && gif->data_complete == false) { return NSGIF_ERR_END_OF_DATA; } else if (next == *frame || next == NSGIF_FRAME_INVALID) { return NSGIF_ERR_FRAME_DISPLAY; } if (delay != NULL) { *delay += gif->frames[next].info.delay; } } while (gif->frames[next].info.display == false); *frame = next; return NSGIF_OK; } static inline bool nsgif__animation_complete(int count, int max) { if (max == 0) { return false; } return (count >= max); } nsgif_error nsgif_reset( nsgif_t *gif) { gif->loop_count = 0; gif->frame = NSGIF_FRAME_INVALID; return NSGIF_OK; } /* exported function documented in nsgif.h */ nsgif_error nsgif_frame_prepare( nsgif_t *gif, nsgif_rect_t *area, uint32_t *delay_cs, uint32_t *frame_new) { nsgif_error ret; nsgif_rect_t rect = { .x1 = 0, .y1 = 0, }; uint32_t delay = 0; uint32_t frame = gif->frame; if (gif->frame != NSGIF_FRAME_INVALID && gif->frame < gif->info.frame_count && gif->frames[gif->frame].info.display) { rect = gif->frames[gif->frame].info.rect; } if (nsgif__animation_complete( gif->loop_count, gif->info.loop_max)) { return NSGIF_ERR_ANIMATION_END; } ret = nsgif__next_displayable_frame(gif, &frame, &delay); if (ret != NSGIF_OK) { return ret; } if (gif->frame != NSGIF_FRAME_INVALID && frame < gif->frame) { gif->loop_count++; } if (gif->data_complete) { /* Check for last frame, which has infinite delay. */ if (gif->info.frame_count == 1) { delay = NSGIF_INFINITE; } else if (gif->info.loop_max != 0) { uint32_t frame_next = frame; ret = nsgif__next_displayable_frame(gif, &frame_next, NULL); if (ret != NSGIF_OK) { return ret; } if (gif->data_complete && frame_next < frame) { if (nsgif__animation_complete( gif->loop_count + 1, gif->info.loop_max)) { delay = NSGIF_INFINITE; } } } } gif->frame = frame; nsgif__redraw_rect_extend(&gif->frames[frame].info.rect, &rect); if (delay < gif->delay_min) { delay = gif->delay_default; } *frame_new = gif->frame; *delay_cs = delay; *area = rect; return NSGIF_OK; } /* exported function documented in nsgif.h */ nsgif_error nsgif_frame_decode( nsgif_t *gif, uint32_t frame, nsgif_bitmap_t **bitmap) { uint32_t start_frame; nsgif_error ret = NSGIF_OK; if (frame >= gif->info.frame_count) { return NSGIF_ERR_BAD_FRAME; } if (gif->decoded_frame == frame) { *bitmap = gif->frame_image; return NSGIF_OK; } else if (gif->decoded_frame >= frame || gif->decoded_frame == NSGIF_FRAME_INVALID) { /* Can skip to first frame or restart. */ start_frame = 0; } else { start_frame = nsgif__frame_next( gif, false, gif->decoded_frame); } for (uint32_t f = start_frame; f <= frame; f++) { ret = nsgif__process_frame(gif, f, true); if (ret != NSGIF_OK) { return ret; } } *bitmap = gif->frame_image; return ret; } /* exported function documented in nsgif.h */ const nsgif_info_t *nsgif_get_info(const nsgif_t *gif) { return &gif->info; } /* exported function documented in nsgif.h */ const nsgif_frame_info_t *nsgif_get_frame_info( const nsgif_t *gif, uint32_t frame) { if (frame >= gif->info.frame_count) { return NULL; } return &gif->frames[frame].info; } /* exported function documented in nsgif.h */ void nsgif_global_palette( const nsgif_t *gif, uint32_t table[NSGIF_MAX_COLOURS], size_t *entries) { size_t len = sizeof(*table) * NSGIF_MAX_COLOURS; memcpy(table, gif->global_colour_table, len); *entries = gif->colour_table_size; } /* exported function documented in nsgif.h */ bool nsgif_local_palette( const nsgif_t *gif, uint32_t frame, uint32_t table[NSGIF_MAX_COLOURS], size_t *entries) { const nsgif_frame *f; if (frame >= gif->frame_count_partial) { return false; } f = &gif->frames[frame]; if (f->info.local_palette == false) { return false; } *entries = 2 << (f->flags & NSGIF_COLOUR_TABLE_SIZE_MASK); nsgif__colour_table_decode(table, &gif->colour_layout, *entries, gif->buf + f->colour_table_offset); return true; } /* exported function documented in nsgif.h */ const char *nsgif_strerror(nsgif_error err) { static const char *const str[] = { [NSGIF_OK] = "Success", [NSGIF_ERR_OOM] = "Out of memory", [NSGIF_ERR_DATA] = "Invalid source data", [NSGIF_ERR_BAD_FRAME] = "Requested frame does not exist", [NSGIF_ERR_DATA_FRAME] = "Invalid frame data", [NSGIF_ERR_END_OF_DATA] = "Unexpected end of GIF source data", [NSGIF_ERR_DATA_COMPLETE] = "Can't add data to completed GIF", [NSGIF_ERR_FRAME_DISPLAY] = "Frame can't be displayed", [NSGIF_ERR_ANIMATION_END] = "Animation complete", }; if (err >= NSGIF_ARRAY_LEN(str) || str[err] == NULL) { return "Unknown error"; } return str[err]; } /* exported function documented in nsgif.h */ const char *nsgif_str_disposal(enum nsgif_disposal disposal) { static const char *const str[] = { [NSGIF_DISPOSAL_UNSPECIFIED] = "Unspecified", [NSGIF_DISPOSAL_NONE] = "None", [NSGIF_DISPOSAL_RESTORE_BG] = "Restore background", [NSGIF_DISPOSAL_RESTORE_PREV] = "Restore previous", [NSGIF_DISPOSAL_RESTORE_QUIRK] = "Restore quirk", }; if (disposal >= NSGIF_ARRAY_LEN(str) || str[disposal] == NULL) { return "Unspecified"; } return str[disposal]; } libvips-8.15.1/libvips/foreign/libnsgif/lzw.c000066400000000000000000000405071454007373500211520ustar00rootroot00000000000000/* * This file is part of NetSurf's LibNSGIF, http://www.netsurf-browser.org/ * Licensed under the MIT License, * http://www.opensource.org/licenses/mit-license.php * * Copyright 2017 Michael Drake * Copyright 2021 Michael Drake */ #include #include #include #include #include "lzw.h" /** * \file * \brief LZW decompression (implementation) * * Decoder for GIF LZW data. */ /** Maximum number of lzw table entries. */ #define LZW_TABLE_ENTRY_MAX (1u << LZW_CODE_MAX) /** * Context for reading LZW data. * * LZW data is split over multiple sub-blocks. Each sub-block has a * byte at the start, which says the sub-block size, and then the data. * Zero-size sub-blocks have no data, and the biggest sub-block size is * 255, which means there are 255 bytes of data following the sub-block * size entry. * * Note that an individual LZW code can be split over up to three sub-blocks. */ struct lzw_read_ctx { const uint8_t *restrict data; /**< Pointer to start of input data */ size_t data_len; /**< Input data length */ size_t data_sb_next; /**< Offset to sub-block size */ const uint8_t *sb_data; /**< Pointer to current sub-block in data */ size_t sb_bit; /**< Current bit offset in sub-block */ uint32_t sb_bit_count; /**< Bit count in sub-block */ }; /** * LZW table entry. * * Records in the table are composed of 1 or more entries. * Entries refer to the entry they extend which can be followed to compose * the complete record. To compose the record in reverse order, take * the `value` from each entry, and move to the entry it extends. * If the extended entries index is < the current clear_code, then it * is the last entry in the record. */ struct lzw_table_entry { uint8_t value; /**< Last value for record ending at entry. */ uint8_t first; /**< First value in entry's entire record. */ uint16_t count; /**< Count of values in this entry's record. */ uint16_t extends; /**< Offset in table to previous entry. */ }; /** * LZW decompression context. */ struct lzw_ctx { struct lzw_read_ctx input; /**< Input reading context */ uint16_t prev_code; /**< Code read from input previously. */ uint16_t prev_code_first; /**< First value of previous code. */ uint16_t prev_code_count; /**< Total values for previous code. */ uint8_t initial_code_size; /**< Starting LZW code size. */ uint8_t code_size; /**< Current LZW code size. */ uint16_t code_max; /**< Max code value for current code size. */ uint16_t clear_code; /**< Special Clear code value */ uint16_t eoi_code; /**< Special End of Information code value */ uint16_t table_size; /**< Next position in table to fill. */ uint16_t output_code; /**< Code that has been partially output. */ uint16_t output_left; /**< Number of values left for output_code. */ bool has_transparency; /**< Whether the image is opaque. */ uint8_t transparency_idx; /**< Index representing transparency. */ const uint32_t *restrict colour_map; /**< Index to colour mapping. */ /** LZW code table. Generated during decode. */ struct lzw_table_entry table[LZW_TABLE_ENTRY_MAX]; /** Output value stack. */ uint8_t stack_base[LZW_TABLE_ENTRY_MAX]; }; /* Exported function, documented in lzw.h */ lzw_result lzw_context_create(struct lzw_ctx **ctx) { struct lzw_ctx *c = malloc(sizeof(*c)); if (c == NULL) { return LZW_NO_MEM; } *ctx = c; return LZW_OK; } /* Exported function, documented in lzw.h */ void lzw_context_destroy(struct lzw_ctx *ctx) { free(ctx); } /** * Advance the context to the next sub-block in the input data. * * \param[in] ctx LZW reading context, updated on success. * \return LZW_OK or LZW_OK_EOD on success, appropriate error otherwise. */ static lzw_result lzw__block_advance(struct lzw_read_ctx *restrict ctx) { size_t block_size; size_t next_block_pos = ctx->data_sb_next; const uint8_t *data_next = ctx->data + next_block_pos; if (next_block_pos >= ctx->data_len) { return LZW_NO_DATA; } block_size = *data_next; if ((next_block_pos + block_size) >= ctx->data_len) { return LZW_NO_DATA; } ctx->sb_bit = 0; ctx->sb_bit_count = block_size * 8; if (block_size == 0) { ctx->data_sb_next += 1; return LZW_OK_EOD; } ctx->sb_data = data_next + 1; ctx->data_sb_next += block_size + 1; return LZW_OK; } /** * Get the next LZW code of given size from the raw input data. * * Reads codes from the input data stream coping with GIF data sub-blocks. * * \param[in] ctx LZW reading context, updated. * \param[in] code_size Size of LZW code to get from data. * \param[out] code_out Returns an LZW code on success. * \return LZW_OK or LZW_OK_EOD on success, appropriate error otherwise. */ static inline lzw_result lzw__read_code( struct lzw_read_ctx *restrict ctx, uint16_t code_size, uint16_t *restrict code_out) { uint32_t code = 0; uint32_t current_bit = ctx->sb_bit & 0x7; if (ctx->sb_bit + 24 <= ctx->sb_bit_count) { /* Fast path: read three bytes from this sub-block */ const uint8_t *data = ctx->sb_data + (ctx->sb_bit >> 3); code |= *data++ << 0; code |= *data++ << 8; code |= *data << 16; ctx->sb_bit += code_size; } else { /* Slow path: code spans sub-blocks */ uint8_t byte_advance = (current_bit + code_size) >> 3; uint8_t byte = 0; uint8_t bits_remaining_0 = (code_size < (8u - current_bit)) ? code_size : (8u - current_bit); uint8_t bits_remaining_1 = code_size - bits_remaining_0; uint8_t bits_used[3] = { [0] = bits_remaining_0, [1] = bits_remaining_1 < 8 ? bits_remaining_1 : 8, [2] = bits_remaining_1 - 8, }; assert(byte_advance <= 2); while (true) { const uint8_t *data = ctx->sb_data; lzw_result res; /* Get any data from end of this sub-block */ while (byte <= byte_advance && ctx->sb_bit < ctx->sb_bit_count) { code |= data[ctx->sb_bit >> 3] << (byte << 3); ctx->sb_bit += bits_used[byte]; byte++; } /* Check if we have all we need */ if (byte > byte_advance) { break; } /* Move to next sub-block */ res = lzw__block_advance(ctx); if (res != LZW_OK) { return res; } } } *code_out = (code >> current_bit) & ((1 << code_size) - 1); return LZW_OK; } /** * Handle clear code. * * \param[in] ctx LZW reading context, updated. * \param[out] code_out Returns next code after a clear code. * \return LZW_OK or error code. */ static inline lzw_result lzw__handle_clear( struct lzw_ctx *ctx, uint16_t *code_out) { uint16_t code; /* Reset table building context */ ctx->code_size = ctx->initial_code_size; ctx->code_max = (1 << ctx->initial_code_size) - 1; ctx->table_size = ctx->eoi_code + 1; /* There might be a sequence of clear codes, so process them all */ do { lzw_result res = lzw__read_code(&ctx->input, ctx->code_size, &code); if (res != LZW_OK) { return res; } } while (code == ctx->clear_code); /* The initial code must be from the initial table. */ if (code > ctx->clear_code) { return LZW_BAD_ICODE; } *code_out = code; return LZW_OK; } /* Exported function, documented in lzw.h */ lzw_result lzw_decode_init( struct lzw_ctx *ctx, uint8_t minimum_code_size, const uint8_t *input_data, size_t input_length, size_t input_pos) { struct lzw_table_entry *table = ctx->table; lzw_result res; uint16_t code; if (minimum_code_size >= LZW_CODE_MAX) { return LZW_BAD_ICODE; } /* Initialise the input reading context */ ctx->input.data = input_data; ctx->input.data_len = input_length; ctx->input.data_sb_next = input_pos; ctx->input.sb_bit = 0; ctx->input.sb_bit_count = 0; /* Initialise the table building context */ ctx->initial_code_size = minimum_code_size + 1; ctx->clear_code = (1 << minimum_code_size) + 0; ctx->eoi_code = (1 << minimum_code_size) + 1; ctx->output_left = 0; /* Initialise the standard table entries */ for (uint16_t i = 0; i < ctx->clear_code; i++) { table[i].first = i; table[i].value = i; table[i].count = 1; } res = lzw__handle_clear(ctx, &code); if (res != LZW_OK) { return res; } /* Store details of this code as "previous code" to the context. */ ctx->prev_code_first = ctx->table[code].first; ctx->prev_code_count = ctx->table[code].count; ctx->prev_code = code; /* Add code to context for immediate output. */ ctx->output_code = code; ctx->output_left = 1; ctx->has_transparency = false; ctx->transparency_idx = 0; ctx->colour_map = NULL; return LZW_OK; } /* Exported function, documented in lzw.h */ lzw_result lzw_decode_init_map( struct lzw_ctx *ctx, uint8_t minimum_code_size, uint32_t transparency_idx, const uint32_t *colour_table, const uint8_t *input_data, size_t input_length, size_t input_pos) { lzw_result res; if (colour_table == NULL) { return LZW_BAD_PARAM; } res = lzw_decode_init(ctx, minimum_code_size, input_data, input_length, input_pos); if (res != LZW_OK) { return res; } ctx->has_transparency = (transparency_idx <= 0xFF); ctx->transparency_idx = transparency_idx; ctx->colour_map = colour_table; return LZW_OK; } /** * Create new table entry. * * \param[in] ctx LZW reading context, updated. * \param[in] code Last value code for new table entry. */ static inline void lzw__table_add_entry( struct lzw_ctx *ctx, uint16_t code) { struct lzw_table_entry *entry = &ctx->table[ctx->table_size]; entry->value = code; entry->first = ctx->prev_code_first; entry->count = ctx->prev_code_count + 1; entry->extends = ctx->prev_code; ctx->table_size++; } typedef uint32_t (*lzw_writer_fn)( struct lzw_ctx *ctx, void *restrict output_data, uint32_t output_length, uint32_t output_pos, uint16_t code, uint16_t left); /** * Get the next LZW code and write its value(s) to output buffer. * * \param[in] ctx LZW reading context, updated. * \param[in] write_fn Function for writing pixels to output. * \param[in] output_data Array to write output values into. * \param[in] output_length Size of output array. * \param[in,out] output_written Number of values written. Updated on exit. * \return LZW_OK on success, or appropriate error code otherwise. */ static inline lzw_result lzw__decode( struct lzw_ctx *ctx, lzw_writer_fn write_fn, void *restrict output_data, uint32_t output_length, uint32_t *restrict output_written) { lzw_result res; uint16_t code; /* Get a new code from the input */ res = lzw__read_code(&ctx->input, ctx->code_size, &code); if (res != LZW_OK) { return res; } /* Handle the new code */ if (code == ctx->eoi_code) { /* Got End of Information code */ return LZW_EOI_CODE; } else if (code > ctx->table_size) { /* Code is invalid */ return LZW_BAD_CODE; } else if (code == ctx->clear_code) { res = lzw__handle_clear(ctx, &code); if (res != LZW_OK) { return res; } } else if (ctx->table_size < LZW_TABLE_ENTRY_MAX) { uint16_t size = ctx->table_size; lzw__table_add_entry(ctx, (code < size) ? ctx->table[code].first : ctx->prev_code_first); /* Ensure code size is increased, if needed. */ if (size == ctx->code_max && ctx->code_size < LZW_CODE_MAX) { ctx->code_size++; ctx->code_max = (1 << ctx->code_size) - 1; } } *output_written += write_fn(ctx, output_data, output_length, *output_written, code, ctx->table[code].count); /* Store details of this code as "previous code" to the context. */ ctx->prev_code_first = ctx->table[code].first; ctx->prev_code_count = ctx->table[code].count; ctx->prev_code = code; return LZW_OK; } /** * Write values for this code to the output stack. * * If there isn't enough space in the output stack, this function will write * the as many as it can into the output. If `ctx->output_left > 0` after * this call, then there is more data for this code left to output. The code * is stored to the context as `ctx->output_code`. * * \param[in] ctx LZW reading context, updated. * \param[in] output_data Array to write output values into. * \param[in] output_length length Size of output array. * \param[in] output_used Current position in output array. * \param[in] code LZW code to output values for. * \param[in] left Number of values remaining to output for this code. * \return Number of pixel values written. */ static inline uint32_t lzw__write_fn(struct lzw_ctx *ctx, void *restrict output_data, uint32_t output_length, uint32_t output_used, uint16_t code, uint16_t left) { uint8_t *restrict output_pos = (uint8_t *)output_data + output_used; const struct lzw_table_entry * const table = ctx->table; uint32_t space = output_length - output_used; uint16_t count = left; if (count > space) { left = count - space; count = space; } else { left = 0; } ctx->output_code = code; ctx->output_left = left; /* Skip over any values we don't have space for. */ for (unsigned i = left; i != 0; i--) { const struct lzw_table_entry *entry = table + code; code = entry->extends; } output_pos += count; for (unsigned i = count; i != 0; i--) { const struct lzw_table_entry *entry = table + code; *--output_pos = entry->value; code = entry->extends; } return count; } /* Exported function, documented in lzw.h */ lzw_result lzw_decode(struct lzw_ctx *ctx, const uint8_t *restrict *const restrict output_data, uint32_t *restrict output_written) { const uint32_t output_length = sizeof(ctx->stack_base); *output_written = 0; *output_data = ctx->stack_base; if (ctx->output_left != 0) { *output_written += lzw__write_fn(ctx, ctx->stack_base, output_length, *output_written, ctx->output_code, ctx->output_left); } while (*output_written != output_length) { lzw_result res = lzw__decode(ctx, lzw__write_fn, ctx->stack_base, output_length, output_written); if (res != LZW_OK) { return res; } } return LZW_OK; } /** * Write colour mapped values for this code to the output. * * If there isn't enough space in the output stack, this function will write * the as many as it can into the output. If `ctx->output_left > 0` after * this call, then there is more data for this code left to output. The code * is stored to the context as `ctx->output_code`. * * \param[in] ctx LZW reading context, updated. * \param[in] output_data Array to write output values into. * \param[in] output_length Size of output array. * \param[in] output_used Current position in output array. * \param[in] code LZW code to output values for. * \param[in] left Number of values remaining to output for code. * \return Number of pixel values written. */ static inline uint32_t lzw__map_write_fn(struct lzw_ctx *ctx, void *restrict output_data, uint32_t output_length, uint32_t output_used, uint16_t code, uint16_t left) { uint32_t *restrict output_pos = (uint32_t *)output_data + output_used; const struct lzw_table_entry * const table = ctx->table; uint32_t space = output_length - output_used; uint16_t count = left; if (count > space) { left = count - space; count = space; } else { left = 0; } ctx->output_code = code; ctx->output_left = left; for (unsigned i = left; i != 0; i--) { const struct lzw_table_entry *entry = table + code; code = entry->extends; } output_pos += count; if (ctx->has_transparency) { for (unsigned i = count; i != 0; i--) { const struct lzw_table_entry *entry = table + code; --output_pos; if (entry->value != ctx->transparency_idx) { *output_pos = ctx->colour_map[entry->value]; } code = entry->extends; } } else { for (unsigned i = count; i != 0; i--) { const struct lzw_table_entry *entry = table + code; *--output_pos = ctx->colour_map[entry->value]; code = entry->extends; } } return count; } /* Exported function, documented in lzw.h */ lzw_result lzw_decode_map(struct lzw_ctx *ctx, uint32_t *restrict output_data, uint32_t output_length, uint32_t *restrict output_written) { *output_written = 0; if (ctx->colour_map == NULL) { return LZW_NO_COLOUR; } if (ctx->output_left != 0) { *output_written += lzw__map_write_fn(ctx, output_data, output_length, *output_written, ctx->output_code, ctx->output_left); } while (*output_written != output_length) { lzw_result res = lzw__decode(ctx, lzw__map_write_fn, output_data, output_length, output_written); if (res != LZW_OK) { return res; } } return LZW_OK; } libvips-8.15.1/libvips/foreign/libnsgif/lzw.h000066400000000000000000000114161454007373500211540ustar00rootroot00000000000000/* * This file is part of NetSurf's LibNSGIF, http://www.netsurf-browser.org/ * Licensed under the MIT License, * http://www.opensource.org/licenses/mit-license.php * * Copyright 2017 Michael Drake * Copyright 2021 Michael Drake */ #ifndef LZW_H_ #define LZW_H_ /** * \file * \brief LZW decompression (interface) * * Decoder for GIF LZW data. */ /** Maximum LZW code size in bits */ #define LZW_CODE_MAX 12 /* Declare lzw internal context structure */ struct lzw_ctx; /** LZW decoding response codes */ typedef enum lzw_result { LZW_OK, /**< Success */ LZW_OK_EOD, /**< Success; reached zero-length sub-block */ LZW_NO_MEM, /**< Error: Out of memory */ LZW_NO_DATA, /**< Error: Out of data */ LZW_EOI_CODE, /**< Error: End of Information code */ LZW_NO_COLOUR, /**< Error: No colour map provided. */ LZW_BAD_ICODE, /**< Error: Bad initial LZW code */ LZW_BAD_PARAM, /**< Error: Bad function parameter. */ LZW_BAD_CODE, /**< Error: Bad LZW code */ } lzw_result; /** * Create an LZW decompression context. * * \param[out] ctx Returns an LZW decompression context. Caller owned, * free with lzw_context_destroy(). * \return LZW_OK on success, or appropriate error code otherwise. */ lzw_result lzw_context_create( struct lzw_ctx **ctx); /** * Destroy an LZW decompression context. * * \param[in] ctx The LZW decompression context to destroy. */ void lzw_context_destroy( struct lzw_ctx *ctx); /** * Initialise an LZW decompression context for decoding. * * \param[in] ctx The LZW decompression context to initialise. * \param[in] minimum_code_size The LZW Minimum Code Size. * \param[in] input_data The compressed data. * \param[in] input_length Byte length of compressed data. * \param[in] input_pos Start position in data. Must be position * of a size byte at sub-block start. * \return LZW_OK on success, or appropriate error code otherwise. */ lzw_result lzw_decode_init( struct lzw_ctx *ctx, uint8_t minimum_code_size, const uint8_t *input_data, size_t input_length, size_t input_pos); /** * Read input codes until end of LZW context owned output buffer. * * Ensure anything in output is used before calling this, as anything * there before this call will be trampled. * * \param[in] ctx LZW reading context, updated. * \param[out] output_data Returns pointer to array of output values. * \param[out] output_written Returns the number of values written to data. * \return LZW_OK on success, or appropriate error code otherwise. */ lzw_result lzw_decode(struct lzw_ctx *ctx, const uint8_t *restrict *const restrict output_data, uint32_t *restrict output_written); /** * Initialise an LZW decompression context for decoding to colour map values. * * For transparency to work correctly, the given client buffer must have * the values from the previous frame. The transparency_idx should be a value * of 256 or above, if the frame does not have transparency. * * \param[in] ctx The LZW decompression context to initialise. * \param[in] minimum_code_size The LZW Minimum Code Size. * \param[in] transparency_idx Index representing transparency. * \param[in] colour_table Index to pixel colour mapping. * \param[in] input_data The compressed data. * \param[in] input_length Byte length of compressed data. * \param[in] input_pos Start position in data. Must be position * of a size byte at sub-block start. * \return LZW_OK on success, or appropriate error code otherwise. */ lzw_result lzw_decode_init_map( struct lzw_ctx *ctx, uint8_t minimum_code_size, uint32_t transparency_idx, const uint32_t *colour_table, const uint8_t *input_data, size_t input_length, size_t input_pos); /** * Read LZW codes into client buffer, mapping output to colours. * * The context must have been initialised using \ref lzw_decode_init_map * before calling this function, in order to provide the colour mapping table * and any transparency index. * * Ensure anything in output is used before calling this, as anything * there before this call will be trampled. * * \param[in] ctx LZW reading context, updated. * \param[in] output_data Client buffer to fill with colour mapped values. * \param[in] output_length Size of output array. * \param[out] output_written Returns the number of values written to data. * \return LZW_OK on success, or appropriate error code otherwise. */ lzw_result lzw_decode_map(struct lzw_ctx *ctx, uint32_t *restrict output_data, uint32_t output_length, uint32_t *restrict output_written); #endif libvips-8.15.1/libvips/foreign/libnsgif/meson.build000066400000000000000000000001751454007373500223310ustar00rootroot00000000000000nsgif_lib = static_library('nsgif', 'nsgif.h', 'gif.c', 'lzw.c', 'lzw.h', ) libvips_components += nsgif_lib libvips-8.15.1/libvips/foreign/libnsgif/nsgif.h000066400000000000000000000357261454007373500214600ustar00rootroot00000000000000/* * Copyright 2004 Richard Wilson * Copyright 2008 Sean Fox * Copyright 2013-2022 Michael Drake * * This file is part of NetSurf's libnsgif, http://www.netsurf-browser.org/ * Licenced under the MIT License, * http://www.opensource.org/licenses/mit-license.php */ /** * \file * Interface to progressive animated GIF file decoding. */ #ifndef NSNSGIF_H #define NSNSGIF_H #include #include #include /** Representation of infinity. */ #define NSGIF_INFINITE (UINT32_MAX) /** Maximum colour table size */ #define NSGIF_MAX_COLOURS 256 /** * Opaque type used by LibNSGIF to represent a GIF object in memory. */ typedef struct nsgif nsgif_t; /** * LibNSGIF rectangle structure. * * * Top left coordinate is `(x0, y0)`. * * Width is `x1 - x0`. * * Height is `y1 - y0`. * * Units are pixels. */ typedef struct nsgif_rect { /** x co-ordinate of redraw rectangle, left */ uint32_t x0; /** y co-ordinate of redraw rectangle, top */ uint32_t y0; /** x co-ordinate of redraw rectangle, right */ uint32_t x1; /** y co-ordinate of redraw rectangle, bottom */ uint32_t y1; } nsgif_rect_t; /** * LibNSGIF return codes. */ typedef enum { /** * Success. */ NSGIF_OK, /** * Out of memory error. */ NSGIF_ERR_OOM, /** * GIF source data is invalid, and no frames are recoverable. */ NSGIF_ERR_DATA, /** * Frame number is not valid. */ NSGIF_ERR_BAD_FRAME, /** * GIF source data contained an error in a frame. */ NSGIF_ERR_DATA_FRAME, /** * Unexpected end of GIF source data. */ NSGIF_ERR_END_OF_DATA, /** * Can't supply more data after calling \ref nsgif_data_complete. */ NSGIF_ERR_DATA_COMPLETE, /** * The current frame cannot be displayed. */ NSGIF_ERR_FRAME_DISPLAY, /** * Indicates an animation is complete, and \ref nsgif_reset must be * called to restart the animation from the beginning. */ NSGIF_ERR_ANIMATION_END, } nsgif_error; /** * NSGIF \ref nsgif_bitmap_t pixel format. * * All pixel formats are 32 bits per pixel (bpp). The different formats * allow control over the ordering of the colour channels. All colour * channels are 8 bits wide. * * Note that the GIF file format only supports an on/off mask, so the * alpha (A) component (opacity) will always have a value of `0` (fully * transparent) or `255` (fully opaque). */ typedef enum nsgif_bitmap_fmt { /** Bite-wise RGBA: Byte order: 0xRR, 0xGG, 0xBB, 0xAA. */ NSGIF_BITMAP_FMT_R8G8B8A8, /** Bite-wise BGRA: Byte order: 0xBB, 0xGG, 0xRR, 0xAA. */ NSGIF_BITMAP_FMT_B8G8R8A8, /** Bite-wise ARGB: Byte order: 0xAA, 0xRR, 0xGG, 0xBB. */ NSGIF_BITMAP_FMT_A8R8G8B8, /** Bite-wise ABGR: Byte order: 0xAA, 0xBB, 0xGG, 0xRR. */ NSGIF_BITMAP_FMT_A8B8G8R8, /** * 32-bit RGBA (0xRRGGBBAA). * * * On little endian host, same as \ref NSGIF_BITMAP_FMT_A8B8G8R8. * * On big endian host, same as \ref NSGIF_BITMAP_FMT_R8G8B8A8. */ NSGIF_BITMAP_FMT_RGBA8888, /** * 32-bit BGRA (0xBBGGRRAA). * * * On little endian host, same as \ref NSGIF_BITMAP_FMT_A8R8G8B8. * * On big endian host, same as \ref NSGIF_BITMAP_FMT_B8G8R8A8. */ NSGIF_BITMAP_FMT_BGRA8888, /** * 32-bit ARGB (0xAARRGGBB). * * * On little endian host, same as \ref NSGIF_BITMAP_FMT_B8G8R8A8. * * On big endian host, same as \ref NSGIF_BITMAP_FMT_A8R8G8B8. */ NSGIF_BITMAP_FMT_ARGB8888, /** * 32-bit BGRA (0xAABBGGRR). * * * On little endian host, same as \ref NSGIF_BITMAP_FMT_R8G8B8A8. * * On big endian host, same as \ref NSGIF_BITMAP_FMT_A8B8G8R8. */ NSGIF_BITMAP_FMT_ABGR8888, } nsgif_bitmap_fmt_t; /** * Client bitmap type. * * These are client-created and destroyed, via the \ref nsgif_bitmap_cb_vt * callbacks, but they are owned by a \ref nsgif_t. * * See \ref nsgif_bitmap_fmt for pixel format information. * * The bitmap may have a row_span greater than the bitmap width, but the * difference between row span and width must be a whole number of pixels * (a multiple of four bytes). */ typedef void nsgif_bitmap_t; /** Bitmap callbacks function table */ typedef struct nsgif_bitmap_cb_vt { /** * Callback to create a bitmap with the given dimensions. * * \param[in] width Required bitmap width in pixels. * \param[in] height Required bitmap height in pixels. * \return pointer to client's bitmap structure or NULL on error. */ nsgif_bitmap_t* (*create)(int width, int height); /** * Callback to free a bitmap. * * \param[in] bitmap The bitmap to destroy. */ void (*destroy)(nsgif_bitmap_t *bitmap); /** * Get pointer to pixel buffer in a bitmap. * * The pixel buffer must be `(width + N) * height * sizeof(uint32_t)`. * Where `N` is any number greater than or equal to 0. * Note that the returned pointer to uint8_t must be 4-byte aligned. * * \param[in] bitmap The bitmap. * \return pointer to bitmap's pixel buffer. */ uint8_t* (*get_buffer)(nsgif_bitmap_t *bitmap); /* The following functions are optional. */ /** * Set whether a bitmap can be plotted opaque. * * \param[in] bitmap The bitmap. * \param[in] opaque Whether the current frame is opaque. */ void (*set_opaque)(nsgif_bitmap_t *bitmap, bool opaque); /** * Tests whether a bitmap has an opaque alpha channel. * * \param[in] bitmap The bitmap. * \return true if the bitmap is opaque, false otherwise. */ bool (*test_opaque)(nsgif_bitmap_t *bitmap); /** * Bitmap modified notification. * * \param[in] bitmap The bitmap. */ void (*modified)(nsgif_bitmap_t *bitmap); /** * Get row span in pixels. * * If this callback is not provided, LibNSGIF will use the width. * * If row span is greater than width, this callback must be provided. * * \param[in] bitmap The bitmap. */ uint32_t (*get_rowspan)(nsgif_bitmap_t *bitmap); } nsgif_bitmap_cb_vt; /** * Convert an error code to a string. * * \param[in] err The error code to convert. * \return String representation of given error code. */ const char *nsgif_strerror(nsgif_error err); /** * Create the NSGIF object. * * \param[in] bitmap_vt Bitmap operation functions v-table. * \param[in] bitmap_fmt Bitmap pixel format specification. * \param[out] gif_out Return \ref nsgif_t object on success. * * \return NSGIF_OK on success, or appropriate error otherwise. */ nsgif_error nsgif_create( const nsgif_bitmap_cb_vt *bitmap_vt, nsgif_bitmap_fmt_t bitmap_fmt, nsgif_t **gif_out); /** * Free a NSGIF object. * * \param[in] gif The NSGIF to free. */ void nsgif_destroy(nsgif_t *gif); /** * Scan the source image data. * * This is used to feed the source data into LibNSGIF. This must be called * before calling \ref nsgif_frame_decode. * * It can be called multiple times with, with increasing sizes. If it is called * several times, as more data is available (e.g. slow network fetch) the data * already given to \ref nsgif_data_scan must be provided each time. * * Once all the data has been provided, call \ref nsgif_data_complete. * * For example, if you call \ref nsgif_data_scan with 25 bytes of data, and then * fetch another 10 bytes, you would need to call \ref nsgif_data_scan with a * size of 35 bytes, and the whole 35 bytes must be contiguous memory. It is * safe to `realloc` the source buffer between calls to \ref nsgif_data_scan. * (The actual data pointer is allowed to be different.) * * If an error occurs, all previously scanned frames are retained. * * Note that an error returned from this function is purely informational. * So long as at least one frame is available, you can display frames. * * \param[in] gif The \ref nsgif_t object. * \param[in] size Number of bytes in data. * \param[in] data Raw source GIF data. * * \return NSGIF_OK on success, or appropriate error otherwise. */ nsgif_error nsgif_data_scan( nsgif_t *gif, size_t size, const uint8_t *data); /** * Tell libnsgif that all the gif data has been provided. * * Call this after calling \ref nsgif_data_scan with the the entire GIF * source data. You can call \ref nsgif_data_scan multiple times up until * this is called, and after this is called, \ref nsgif_data_scan will * return an error. * * You can decode a GIF before this is called, however, it will fail to * decode any truncated final frame data and will not perform loops when * driven via \ref nsgif_frame_prepare (because it doesn't know if there * will be more frames supplied in future data). * * \param[in] gif The \ref nsgif_t object. */ void nsgif_data_complete( nsgif_t *gif); /** * Prepare to show a frame. * * If this is the last frame of an animation with a finite loop count, the * returned `delay_cs` will be \ref NSGIF_INFINITE, indicating that the frame * should be shown forever. * * Note that if \ref nsgif_data_complete has not been called on this gif, * animated GIFs will not loop back to the start. Instead it will return * \ref NSGIF_ERR_END_OF_DATA. * * \param[in] gif The \ref nsgif_t object. * \param[out] area The area in pixels that must be redrawn. * \param[out] delay_cs Time to wait after frame_new before next frame in cs. * \param[out] frame_new The frame to decode. * * \return NSGIF_OK on success, or appropriate error otherwise. */ nsgif_error nsgif_frame_prepare( nsgif_t *gif, nsgif_rect_t *area, uint32_t *delay_cs, uint32_t *frame_new); /** * Decodes a GIF frame. * * \param[in] gif The \ref nsgif_t object. * \param[in] frame The frame number to decode. * \param[out] bitmap On success, returns pointer to the client-allocated, * nsgif-owned client bitmap structure. * * \return NSGIF_OK on success, or appropriate error otherwise. */ nsgif_error nsgif_frame_decode( nsgif_t *gif, uint32_t frame, nsgif_bitmap_t **bitmap); /** * Reset a GIF animation. * * Some animations are only meant to loop N times, and then show the * final frame forever. This function resets the loop and frame counters, * so that the animation can be replayed without the overhead of recreating * the \ref nsgif_t object and rescanning the raw data. * * \param[in] gif A \ref nsgif_t object. * * \return NSGIF_OK on success, or appropriate error otherwise. */ nsgif_error nsgif_reset( nsgif_t *gif); /** * Information about a GIF. */ typedef struct nsgif_info { /** width of GIF (may increase during decoding) */ uint32_t width; /** height of GIF (may increase during decoding) */ uint32_t height; /** number of frames decoded */ uint32_t frame_count; /** number of times to play animation (zero means loop forever) */ int loop_max; /** background colour in same pixel format as \ref nsgif_bitmap_t. */ uint32_t background; /** whether the GIF has a global colour table */ bool global_palette; } nsgif_info_t; /** * Frame disposal method. * * Clients do not need to know about this, it is provided purely for dumping * raw information about GIF frames. */ enum nsgif_disposal { NSGIF_DISPOSAL_UNSPECIFIED, /**< No disposal method specified. */ NSGIF_DISPOSAL_NONE, /**< Frame remains. */ NSGIF_DISPOSAL_RESTORE_BG, /**< Clear frame to background colour. */ NSGIF_DISPOSAL_RESTORE_PREV, /**< Restore previous frame. */ NSGIF_DISPOSAL_RESTORE_QUIRK, /**< Alias for NSGIF_DISPOSAL_RESTORE_PREV. */ }; /** * Convert a disposal method to a string. * * \param[in] disposal The disposal method to convert. * \return String representation of given disposal method. */ const char *nsgif_str_disposal(enum nsgif_disposal disposal); /** * Information about a GIF frame. */ typedef struct nsgif_frame_info { /** whether the frame should be displayed/animated */ bool display; /** whether the frame may have transparency */ bool transparency; /** whether the frame has a local colour table */ bool local_palette; /** whether the frame is interlaced */ bool interlaced; /** Disposal method for previous frame; affects plotting */ uint8_t disposal; /** delay (in cs) before animating the frame */ uint32_t delay; /** Frame's redraw rectangle. */ nsgif_rect_t rect; } nsgif_frame_info_t; /** * Get information about a GIF from an \ref nsgif_t object. * * \param[in] gif The \ref nsgif_t object to get info for. * * \return The gif info, or NULL on error. */ const nsgif_info_t *nsgif_get_info(const nsgif_t *gif); /** * Get information about a GIF from an \ref nsgif_t object. * * \param[in] gif The \ref nsgif_t object to get frame info for. * \param[in] frame The frame number to get info for. * * \return The gif frame info, or NULL on error. */ const nsgif_frame_info_t *nsgif_get_frame_info( const nsgif_t *gif, uint32_t frame); /** * Get the global colour palette. * * If the GIF has no global colour table, this will return the default * colour palette. * * Colours in same pixel format as \ref nsgif_bitmap_t. * * \param[in] gif The \ref nsgif_t object. * \param[out] table Client buffer to hold the colour table. * \param[out] entries The number of used entries in the colour table. */ void nsgif_global_palette( const nsgif_t *gif, uint32_t table[NSGIF_MAX_COLOURS], size_t *entries); /** * Get the local colour palette for a frame. * * Frames may have no local palette. In this case they use the global palette. * This function returns false if the frame has no local palette. * * Colours in same pixel format as \ref nsgif_bitmap_t. * * \param[in] gif The \ref nsgif_t object. * \param[in] frame The frame to get the palette for. * \param[out] table Client buffer to hold the colour table. * \param[out] entries The number of used entries in the colour table. * \return true if a palette is returned, false otherwise. */ bool nsgif_local_palette( const nsgif_t *gif, uint32_t frame, uint32_t table[NSGIF_MAX_COLOURS], size_t *entries); /** * Configure handling of small frame delays. * * Historically people created GIFs with a tiny frame delay, however the slow * hardware of the time meant they actually played much slower. As computers * sped up, to prevent animations playing faster than intended, decoders came * to ignore overly small frame delays. * * By default a \ref nsgif_frame_prepare() managed animation will override * frame delays of less than 2 centiseconds with a default frame delay of * 10 centiseconds. This matches the behaviour of web browsers and other * renderers. * * Both the minimum and the default values can be overridden for a given GIF * by the client. To get frame delays exactly as specified by the GIF file, set * `delay_min` to zero. * * Note that this does not affect the frame delay in the frame info * (\ref nsgif_frame_info_t) structure, which will always contain values * specified by the GIF. * * \param[in] gif The \ref nsgif_t object to configure. * \param[in] delay_min The minimum frame delay in centiseconds. * \param[in] delay_default The delay to use if a frame delay is less than * `delay_min`. */ void nsgif_set_frame_delay_behaviour( nsgif_t *gif, uint16_t delay_min, uint16_t delay_default); #endif libvips-8.15.1/libvips/foreign/libnsgif/patches/000077500000000000000000000000001454007373500216135ustar00rootroot00000000000000libvips-8.15.1/libvips/foreign/libnsgif/patches/.gitkeep000066400000000000000000000000001454007373500232320ustar00rootroot00000000000000libvips-8.15.1/libvips/foreign/libnsgif/test/000077500000000000000000000000001454007373500211435ustar00rootroot00000000000000libvips-8.15.1/libvips/foreign/libnsgif/test/cli.c000066400000000000000000000460501454007373500220630ustar00rootroot00000000000000/* * SPDX-License-Identifier: ISC * * Copyright (C) 2021-2022 Michael Drake */ /** * \file * \brief Command line argument handling. */ #include #include #include #include #include #include "cli.h" /** * CLI parsing context. */ struct cli_ctx { const struct cli_table *cli; /**< Client CLI spec. */ size_t pos_count; /**< The number of positional arguments found. */ bool no_pos; /**< Have an argument that negates min_positional. */ }; /** * Check whether a CLI argument type should have a numerical value. * * \param[in] type An argument type. * \return true if the argument needs a numerical value, or false otherwise. */ static inline bool cli__arg_is_numerical(enum cli_arg_type type) { return (type != CLI_STRING && type != CLI_BOOL); } /** * Parse a signed integer value from an argument. * * \param[in] str String containing value to parse. * \param[out] i Pointer to place to store parsed value. * \param[in,out] pos Current position in str, updated on exit. * \return true on success, or false otherwise. */ static bool cli__parse_value_int( const char *str, int64_t *i, size_t *pos) { long long temp; char *end = NULL; str += *pos; errno = 0; temp = strtoll(str, &end, 0); if (end == str || errno == ERANGE || temp > INT64_MAX || temp < INT64_MIN) { fprintf(stderr, "Failed to parse integer from '%s'\n", str); return false; } *i = (int64_t)temp; *pos += (size_t)(end - str); return true; } /** * Parse an unsigned integer value from an argument. * * \param[in] str String containing value to parse. * \param[out] u Pointer to place to store parsed value. * \param[in,out] pos Current position in str, updated on exit. * \return true on success, or false otherwise. */ static bool cli__parse_value_uint( const char *str, uint64_t *u, size_t *pos) { unsigned long long temp; char *end = NULL; str += *pos; errno = 0; temp = strtoull(str, &end, 0); if (end == str || errno == ERANGE || temp > UINT64_MAX) { fprintf(stderr, "Failed to parse unsigned from '%s'\n", str); return false; } *u = (uint64_t)temp; *pos += (size_t)(end - str); return true; } /** * Parse an enum value from an argument. * * \param[in] str String containing value to parse. * \param[out] e Enum details. * \param[in,out] pos Current position in str, updated on exit. * \return true on success, or false otherwise. */ static bool cli__parse_value_enum( const char *str, const struct cli_enum *e, size_t *pos) { str += *pos; *pos += strlen(str); for (const struct cli_str_val *sv = e->desc; sv->str != NULL; sv++) { if (strcmp(str, sv->str) == 0) { *e->e = sv->val; return true; } } fprintf(stderr, "ERROR: Unknown enum value '%s'.\n", str); return false; } /** * Parse a string value from an argument. * * \param[in] str String containing value to parse. * \param[out] s Pointer to place to store parsed value. * \param[in,out] pos Current position in str, updated on exit. * \return true on success, or false otherwise. */ static bool cli__parse_value_string( const char *str, const char **s, size_t *pos) { *s = str + *pos; *pos += strlen(*s); return true; } /** * Parse a value from an argument. * * \param[in] entry Client command line interface argument specification. * \param[in] arg Argument to parse a value from. * \param[in,out] pos Current position in argument, updated on exit. * \return true on success, or false otherwise. */ static bool cli__parse_value( const struct cli_table_entry *entry, const char *arg, size_t *pos) { switch (entry->t) { case CLI_CMD: if (strcmp(arg + *pos, entry->l) == 0) { *pos += strlen(arg); return true; } return false; case CLI_INT: return cli__parse_value_int(arg, entry->v.i, pos); case CLI_UINT: return cli__parse_value_uint(arg, entry->v.u, pos); case CLI_ENUM: return cli__parse_value_enum(arg, &entry->v.e, pos); case CLI_STRING: return cli__parse_value_string(arg, entry->v.s, pos); default: fprintf(stderr, "Unexpected value for '%s': %s\n", entry->l, arg); break; } return false; } /** * Parse a value from an argument. * * \param[in] entry Client command line interface argument specification. * \param[in] argc Number of command line arguments. * \param[in] argv String vector containing command line arguments. * \param[in] arg_pos Current position in argv. * \param[in,out] pos Current pos in current argument, updated on exit. * \return true on success, or false otherwise. */ static bool cli__parse_argv_value(const struct cli_table_entry *entry, int argc, const char **argv, int arg_pos, size_t *pos) { const char *arg = argv[arg_pos]; if (arg_pos >= argc) { fprintf(stderr, "Value not given for '%s'\n", entry->l); return false; } return cli__parse_value(entry, arg, pos); } /** * Check whether a CLI argument is a positional value. * * \param[in] entry Client command line interface argument specification. * \return true if the argument is positional, or false otherwise. */ static inline bool cli__entry_is_positional(const struct cli_table_entry *entry) { return entry->p; } /** * Look up a short argument flag. * * \param[in] cli Client command line interface specification. * \param[in] s Argument flag to look up in client CLI spec. * \return Client CLI spec entry on success, or NULL otherwise. */ static const struct cli_table_entry *cli__lookup_short( const struct cli_table *cli, char s) { for (size_t i = 0; i < cli->count; i++) { if (cli__entry_is_positional(&cli->entries[i])) { continue; } if (cli->entries[i].s == s) { return &cli->entries[i]; } } fprintf(stderr, "Unknown flag: '%c'\n", s); return NULL; } /** * Handle an argument with a type that requires a value. * * This can handle the value being in the current argument, optionally split by * a separator, or in the next argument. * * \param[in] entry Client command line interface argument specification. * \param[in] argc Number of command line arguments. * \param[in] argv String vector containing command line arguments. * \param[in,out] arg_pos Current position in argv, updated on exit. * \param[in] pos Current position in current argument string. * \param[in] sep Name/value separator character, or '\0' if none. * \return true on success, or false otherwise. */ static bool cli__handle_arg_value(const struct cli_table_entry *entry, int argc, const char **argv, int *arg_pos, size_t pos, char sep) { const char *arg = argv[*arg_pos]; size_t orig_pos; bool ret; if (arg[pos] == '\0') { (*arg_pos)++; pos = 0; } else if (arg[pos] == sep) { pos++; } else if (cli__arg_is_numerical(entry->t) == false) { fprintf(stderr, "Separator required for non-numerical value\n"); return false; } if (isspace(argv[*arg_pos][pos])) { fprintf(stderr, "Unexpected white space in '%s' " "for argument '%s'\n", &argv[*arg_pos][pos], entry->l); return false; } orig_pos = pos; ret = cli__parse_argv_value(entry, argc, argv, *arg_pos, &pos); if (ret != true) { return ret; } if (argv[*arg_pos][pos] != '\0') { fprintf(stderr, "Invalid value '%s' for argument '%s'\n", &argv[*arg_pos][orig_pos], entry->l); return false; } return true; } static inline bool cli__is_negative(const char *arg) { int64_t i; size_t pos = 0; return cli__parse_value_int(arg, &i, &pos) && pos == strlen(arg) && i < 0; } /** * Parse a positional argument according to the given CLI spec entry. * * \param[in] ctx Command line interface parsing context. * \param[in] entry Client command line interface argument specification. * \param[in] arg Argument to parse. * \return true on success, or false otherwise. */ static bool cli__parse_positional_entry(struct cli_ctx *ctx, const struct cli_table_entry *entry, const char *arg) { size_t pos = 0; bool ret; ret = cli__parse_value(entry, arg, &pos); if (ret != true) { return ret; } else if (arg[pos] != '\0') { fprintf(stderr, "Failed to parse value '%s' for arg '%s'\n", arg, entry->l); return false; } ctx->pos_count++; return true; } /** * Parse a positional argument. * * \param[in] ctx Command line interface parsing context. * \param[in] arg Argument to parse. * \return true on success, or false otherwise. */ static bool cli__parse_positional(struct cli_ctx *ctx, const char *arg) { const struct cli_table *cli = ctx->cli; size_t positional = 0; for (size_t i = 0; i < cli->count; i++) { if (cli__entry_is_positional(&cli->entries[i])) { if (positional == ctx->pos_count) { return cli__parse_positional_entry(ctx, &cli->entries[i], arg); } positional++; } } fprintf(stderr, "Unexpected positional argument: '%s'\n", arg); return false; } /** * Parse a flags argument. * * \param[in] ctx Command line interface parsing context. * \param[in] argc Number of command line arguments. * \param[in] argv String vector containing command line arguments. * \param[out] arg_pos Current position in argv, updated on exit. * \return true on success, or false otherwise. */ static bool cli__parse_short(struct cli_ctx *ctx, int argc, const char **argv, int *arg_pos) { const char *arg = argv[*arg_pos]; size_t pos = 1; if (arg[0] != '-') { return false; } while (arg[pos] != '\0') { const struct cli_table_entry *entry; entry = cli__lookup_short(ctx->cli, arg[pos]); if (entry == NULL) { if (cli__is_negative(argv[pos])) { return cli__parse_positional(ctx, argv[pos]); } return false; } if (entry->no_pos) { ctx->no_pos = true; } if (entry->t == CLI_BOOL) { *entry->v.b = true; } else { return cli__handle_arg_value(entry, argc, argv, arg_pos, pos + 1, '\0'); } pos++; } return true; } /** * Look up a long argument name. * * \param[in] cli Client command line interface specification. * \param[in] arg Argument name to look up in cli spec. * \param[in,out] pos Current position in arg, updated on exit. * \return Client CLI spec entry on success, or NULL otherwise. */ static const struct cli_table_entry *cli__lookup_long( const struct cli_table *cli, const char *arg, size_t *pos) { arg += *pos; for (size_t i = 0; i < cli->count; i++) { if (cli__entry_is_positional(&cli->entries[i]) == false) { const char *name = cli->entries[i].l; size_t name_len = strlen(cli->entries[i].l); if (strncmp(name, arg, name_len) == 0) { if (arg[name_len] != '\0' && arg[name_len] != '=') { continue; } *pos += name_len; return &cli->entries[i]; } } } fprintf(stderr, "Unknown argument: '%s'\n", arg); return NULL; } /** * Parse a long argument. * * \param[in] ctx Command line interface parsing context. * \param[in] argc Number of command line arguments. * \param[in] argv String vector containing command line arguments. * \param[out] arg_pos Current position in argv, updated on exit. * \return true on success, or false otherwise. */ static bool cli__parse_long(struct cli_ctx *ctx, int argc, const char **argv, int *arg_pos) { const struct cli_table_entry *entry; const char *arg = argv[*arg_pos]; size_t pos = 2; if (arg[0] != '-' || arg[1] != '-') { return false; } entry = cli__lookup_long(ctx->cli, arg, &pos); if (entry == NULL) { return false; } if (entry->no_pos) { ctx->no_pos = true; } if (entry->t == CLI_BOOL) { if (arg[pos] != '\0') { fprintf(stderr, "Unexpected value for argument '%s'\n", arg); return false; } *entry->v.b = true; } else { bool ret; ret = cli__handle_arg_value(entry, argc, argv, arg_pos, pos, '='); if (ret != true) { return ret; } } return true; } /** * Get the string to indicate type of value expected for an argument. * * \param[in] type The argument type. * \return String for value type. */ static const char *cli__string_from_type(enum cli_arg_type type) { static const char *const strings[] = { [CLI_BOOL] = "", [CLI_INT] = "INT", [CLI_UINT] = "UINT", [CLI_ENUM] = "ENUM", [CLI_STRING] = "STRING", }; if (type >= CLI_ARRAY_LEN(strings) || strings[type] == NULL) { return ""; } return strings[type]; } /** * Helper to update a maximum adjusted string length if new values is greater. * * \param[in] str String to check. * \param[in] adjustment Amount to modify length of string by (bytes). * \param[out] len Returns the maximum of existing and this length. */ static void cli__max_len(const char *str, size_t adjustment, size_t *len) { size_t str_len = strlen(str) + adjustment; if (str_len > *len) { *len = str_len; } } /** * Count up various properties of the client CLI interface specification. * * \param[in] cli Client command line interface specification. * \param[out] count Returns number of non-positional arguments. * \param[out] pcount Returns number of positional arguments. * \param[out] max_len Returns max string length of non-positional arguments. * \param[out] pmax_len Returns max string length of positional arguments. * \param[out] phas_desc Returns number of positional args with descriptions. */ static void cli__count(const struct cli_table *cli, size_t *count, size_t *pcount, size_t *max_len, size_t *pmax_len, size_t *phas_desc) { if (count != NULL) *count = 0; if (pcount != NULL) *pcount = 0; if (max_len != NULL) *max_len = 0; if (pmax_len != NULL) *pmax_len = 0; if (phas_desc != NULL) *phas_desc = 0; for (size_t i = 0; i < cli->count; i++) { const struct cli_table_entry *entry = &cli->entries[i]; if (cli__entry_is_positional(entry)) { if (pcount != NULL) { (*pcount)++; } if (pmax_len != NULL) { cli__max_len(entry->l, 0, pmax_len); } if (phas_desc != NULL) { (*phas_desc)++; } } else { if (count != NULL) { (*count)++; } if (max_len != NULL) { const char *type_str; size_t type_len; type_str = cli__string_from_type(entry->t); type_len = strlen(type_str); cli__max_len(entry->l, type_len, max_len); } } } } /* Documented in cli.h */ bool cli_parse(const struct cli_table *cli, int argc, const char **argv) { struct cli_ctx ctx = { .cli = cli, }; enum { ARG_PROG_NAME, ARG_FIRST, }; for (int i = ARG_FIRST; i < argc; i++) { const char *arg = argv[i]; bool ret; if (arg[0] == '-') { if (arg[1] == '-') { ret = cli__parse_long(&ctx, argc, argv, &i); } else { ret = cli__parse_short(&ctx, argc, argv, &i); } } else { ret = cli__parse_positional(&ctx, argv[i]); } if (ret != true) { return ret; } } if (ctx.no_pos == false && ctx.pos_count < cli->min_positional) { fprintf(stderr, "Insufficient positional arguments found.\n"); return false; } return true; } /** * Get terminal width. * * \return terminal width in characters. */ static size_t cli__terminal_width(void) { return 80; } /** * Print a wrapped string, with a given indent. * * The indent is assumed to already be applied for the first line of the * output by the caller. * * \param[in] str The string to print. * \param[in] indent The number of spaces to pad the left margin with. */ static void cli__print_wrapping_string(const char *str, size_t indent) { size_t terminal_width = cli__terminal_width(); size_t avail = (indent > terminal_width) ? 0 : terminal_width - indent; size_t space = avail; while (*str != '\0') { size_t word_len = strcspn(str, " \n\t"); if (word_len <= space || space == avail) { fprintf(stderr, "%*.*s", (int)word_len, (int)word_len, str); str += word_len; if (word_len <= space) { space -= word_len; } if (space > 0) { fprintf(stderr, " "); space--; } } else { fprintf(stderr, "\n%*s", (int)indent, ""); space = avail; } str += strspn(str, " \n\t"); } } /** * Print an entry's description, with a given indent. * * The indent is assumed to already be applied for the first line of the * output by the caller. * * \param[in] entry The entry to print the description for. * \param[in] indent The number of spaces to pad the left margin with. */ static void cli__print_description(const struct cli_table_entry *entry, size_t indent) { if (entry->d != NULL) { cli__print_wrapping_string(entry->d, indent); } fprintf(stderr, "\n"); if (entry->t == CLI_ENUM) { size_t max_len = 0; for (const struct cli_str_val *e = entry->v.e.desc; e->str != NULL; e++) { size_t len = strlen(e->str); if (max_len < len) { max_len = len; } } fprintf(stderr, "\n"); for (const struct cli_str_val *e = entry->v.e.desc; e->str != NULL; e++) { fprintf(stderr, " "); if (e->d == NULL || e->d[0] == '\0') { fprintf(stderr, "%s\n", e->str); } else { fprintf(stderr, "%-*s - ", (int)(max_len), e->str); cli__print_wrapping_string(e->d, 8 + max_len + 3); fprintf(stderr, "\n"); } } } } /* Documented in cli.h */ void cli_help(const struct cli_table *cli, const char *prog_name) { size_t count; size_t pcount; size_t max_len; size_t pmax_len; size_t phas_desc; size_t required = 0; enum { ARG_PROG_NAME, }; cli__count(cli, &count, &pcount, &max_len, &pmax_len, &phas_desc); if (cli->d != NULL) { fprintf(stderr, "\n"); cli__print_wrapping_string(cli->d, 0); fprintf(stderr, "\n"); } fprintf(stderr, "\nUsage: %s", prog_name); if (pcount > 0) { for (size_t i = 0; i < cli->count; i++) { if (cli__entry_is_positional(&cli->entries[i])) { const char *punctuation = (required == cli->min_positional) ? " [" : " "; if (cli->entries[i].t == CLI_CMD) { fprintf(stderr, "%s%s", punctuation, cli->entries[i].l); } else { fprintf(stderr, "%s<%s>", punctuation, cli->entries[i].l); } required++; } } if (required == pcount && required > cli->min_positional) { fprintf(stderr, "]"); } } if (count > 0) { fprintf(stderr, " [options]"); } fprintf(stderr, "\n\n"); if (phas_desc > 0) { fprintf(stderr, "Where:\n\n"); for (size_t i = 0; i < cli->count; i++) { const struct cli_table_entry *entry = &cli->entries[i]; if (entry->d == NULL) { continue; } if (cli__entry_is_positional(entry)) { fprintf(stderr, " %*.*s ", (int)pmax_len, (int)pmax_len, entry->l); cli__print_description(entry, pmax_len + 4); fprintf(stderr, "\n"); } } } if (count > 0) { fprintf(stderr, "Options:\n\n"); for (size_t i = 0; i < cli->count; i++) { const struct cli_table_entry *entry = &cli->entries[i]; const char *type_str; size_t type_len; size_t arg_len; if (cli__entry_is_positional(entry)) { continue; } if (entry->s != '\0') { fprintf(stderr, " -%c", entry->s); } else { fprintf(stderr, " "); } type_str = cli__string_from_type(entry->t); type_len = strlen(type_str); arg_len = strlen(entry->l); fprintf(stderr, " --%s %s%*.s ", entry->l, type_str, (int)(max_len - arg_len - type_len), ""); cli__print_description(entry, max_len + 11); fprintf(stderr, "\n"); } } } libvips-8.15.1/libvips/foreign/libnsgif/test/cli.h000066400000000000000000000055461454007373500220750ustar00rootroot00000000000000/* * SPDX-License-Identifier: ISC * * Copyright (C) 2021-2022 Michael Drake */ /** * \file * \brief Command line argument handling API. */ #ifndef _PELTAR_CLI_H_ #define _PELTAR_CLI_H_ #include #include /** * Helper to get element count for an array, * * \param[in] _a Array to get number of elements for. */ #define CLI_ARRAY_LEN(_a) ((sizeof(_a))/(sizeof(*(_a)))) /** * CLI argument type. */ enum cli_arg_type { CLI_CMD, /**< A sub-command. Must match long argument name. */ CLI_BOOL, /**< Has no value; presence of flag indicates true. */ CLI_INT, /**< Has signed integer value. */ CLI_UINT, /**< Has unsigned integer value. */ CLI_ENUM, /**< Has enumeration value. */ CLI_STRING, /**< Has string value. */ }; /** Enum value descriptor. */ struct cli_str_val { const char *str; /**< String for the enum value name. */ int64_t val; /**< The value for this string. */ const char *d; /**< Description of this value for help output. */ }; /** Enum data. */ struct cli_enum { const struct cli_str_val *desc; /**< Array describing enum values. */ int64_t *e; /**< Location to store \ref CLI_ENUM value. */ }; /** * Client description for a command line argument. */ struct cli_table_entry { const char *l; /**< Long argument name. */ const char s; /**< Short flag name. (Non-positional arguments.) */ bool p; /**< Whether the argument is a positional argument. */ bool no_pos; /**< When present, no positional arguments are required. */ enum cli_arg_type t; /**< Argument type. */ union { bool *b; /**< Location to store \ref CLI_BOOL value. */ int64_t *i; /**< Location to store \ref CLI_INT value. */ uint64_t *u; /**< Location to store \ref CLI_UINT value. */ const char **s; /**< Location to store \ref CLI_STRING value. */ struct cli_enum e; /**< \ref CLI_ENUM value details. */ } v; /**< Where to store type-specific values. */ const char *d; /**< Description of this argument for help output. */ }; /** * Client command line interface specification. */ struct cli_table { const struct cli_table_entry *entries; size_t count; size_t min_positional; const char *d; /**< Description of this application for help output. */ }; /** * Parse the command line arguments. * * \param[in] cli Client command line interface specification. * \param[in] argc Number of command line arguments. * \param[in] argv String vector containing command line arguments. * \return true on success, false on error. */ bool cli_parse(const struct cli_table *cli, int argc, const char **argv); /** * Print usage and help output. * * Note: Assumes non-Unicode. (One byte per character.) * * \param[in] cli Client command line interface specification. * \param[in] prog_name Program name. */ void cli_help(const struct cli_table *cli, const char *prog_name); #endif libvips-8.15.1/libvips/foreign/libnsgif/test/nsgif.c000066400000000000000000000237011454007373500224200ustar00rootroot00000000000000/* * Copyright 2008 Sean Fox * Copyright 2008 James Bursa * Copyright 2022 Michael Drake * * This file is part of NetSurf's libnsgif, http://www.netsurf-browser.org/ * Licenced under the MIT License, * http://www.opensource.org/licenses/mit-license.php */ #include #include #include #include #include #include #include #include "../include/nsgif.h" #include "cli.h" #include "cli.c" #define STR_VAL(_S) STR(_S) #define STR(_S) #_S #define BYTES_PER_PIXEL 4 static struct nsgif_options { const char *file; const char *ppm; uint64_t loops; bool palette; bool version; bool info; bool help; } nsgif_options; static const struct cli_table_entry cli_entries[] = { { .s = 'h', .l = "help", .t = CLI_BOOL, .no_pos = true, .v.b = &nsgif_options.help, .d = "Print this text.", }, { .s = 'i', .l = "info", .t = CLI_BOOL, .v.b = &nsgif_options.info, .d = "Dump GIF info to stdout." }, { .s = 'l', .l = "loops", .t = CLI_UINT, .v.u = &nsgif_options.loops, .d = "Loop through decoding all frames N times. " "The default is 1." }, { .s = 'm', .l = "ppm", .t = CLI_STRING, .v.s = &nsgif_options.ppm, .d = "Convert frames to PPM image at given path." }, { .s = 'p', .l = "palette", .t = CLI_BOOL, .v.b = &nsgif_options.palette, .d = "Save palette images." }, { .s = 'V', .l = "version", .t = CLI_BOOL, .no_pos = true, .v.b = &nsgif_options.version, .d = "Print version number." }, { .p = true, .l = "FILE", .t = CLI_STRING, .v.s = &nsgif_options.file, .d = "Path to GIF file to load." }, }; const struct cli_table cli = { .entries = cli_entries, .count = (sizeof(cli_entries))/(sizeof(*cli_entries)), .min_positional = 1, .d = "NSGIF - A utility for inspecting and decoding GIFs with libnsgif", }; static void *bitmap_create(int width, int height) { /* Ensure a stupidly large bitmap is not created */ if (width > 4096 || height > 4096) { return NULL; } return calloc(width * height, BYTES_PER_PIXEL); } static unsigned char *bitmap_get_buffer(void *bitmap) { return bitmap; } static void bitmap_destroy(void *bitmap) { free(bitmap); } static uint8_t *load_file(const char *path, size_t *data_size) { FILE *fd; struct stat sb; unsigned char *buffer; size_t size; size_t n; fd = fopen(path, "rb"); if (!fd) { perror(path); exit(EXIT_FAILURE); } if (stat(path, &sb)) { perror(path); exit(EXIT_FAILURE); } size = sb.st_size; buffer = malloc(size); if (!buffer) { fprintf(stderr, "Unable to allocate %lld bytes\n", (long long) size); exit(EXIT_FAILURE); } n = fread(buffer, 1, size, fd); if (n != size) { perror(path); exit(EXIT_FAILURE); } fclose(fd); *data_size = size; return buffer; } static void warning(const char *context, nsgif_error err) { fprintf(stderr, "%s: %s\n", context, nsgif_strerror(err)); } static void print_gif_info(const nsgif_info_t *info) { const uint8_t *bg = (uint8_t *) &info->background; fprintf(stdout, "gif:\n"); fprintf(stdout, " width: %"PRIu32"\n", info->width); fprintf(stdout, " height: %"PRIu32"\n", info->height); fprintf(stdout, " max-loops: %"PRIu32"\n", info->loop_max); fprintf(stdout, " frame-count: %"PRIu32"\n", info->frame_count); fprintf(stdout, " global palette: %s\n", info->global_palette ? "yes" : "no"); fprintf(stdout, " background:\n"); fprintf(stdout, " red: 0x%"PRIx8"\n", bg[0]); fprintf(stdout, " green: 0x%"PRIx8"\n", bg[1]); fprintf(stdout, " blue: 0x%"PRIx8"\n", bg[2]); fprintf(stdout, " frames:\n"); } static void print_gif_frame_info(const nsgif_frame_info_t *info, uint32_t i) { const char *disposal = nsgif_str_disposal(info->disposal); fprintf(stdout, " - frame: %"PRIu32"\n", i); fprintf(stdout, " local palette: %s\n", info->local_palette ? "yes" : "no"); fprintf(stdout, " disposal-method: %s\n", disposal); fprintf(stdout, " transparency: %s\n", info->transparency ? "yes" : "no"); fprintf(stdout, " interlaced: %s\n", info->interlaced ? "yes" : "no"); fprintf(stdout, " display: %s\n", info->display ? "yes" : "no"); fprintf(stdout, " delay: %"PRIu32"\n", info->delay); fprintf(stdout, " rect:\n"); fprintf(stdout, " x: %"PRIu32"\n", info->rect.x0); fprintf(stdout, " y: %"PRIu32"\n", info->rect.y0); fprintf(stdout, " w: %"PRIu32"\n", info->rect.x1 - info->rect.x0); fprintf(stdout, " h: %"PRIu32"\n", info->rect.y1 - info->rect.y0); } static bool save_palette( const char *img_filename, const char *palette_filename, const uint32_t palette[NSGIF_MAX_COLOURS], size_t used_entries) { enum { SIZE = 32, COUNT = 16, }; FILE *f; int size = COUNT * SIZE + 1; f = fopen(palette_filename, "w+"); if (f == NULL) { fprintf(stderr, "Unable to open %s for writing\n", palette_filename); return false; } fprintf(f, "P3\n"); fprintf(f, "# %s: %s\n", img_filename, palette_filename); fprintf(f, "# Colour count: %zu\n", used_entries); fprintf(f, "%u %u 256\n", size, size); for (int y = 0; y < size; y++) { for (int x = 0; x < size; x++) { if (x % SIZE == 0 || y % SIZE == 0) { fprintf(f, "0 0 0 "); } else { size_t offset = y / SIZE * COUNT + x / SIZE; uint8_t *entry = (uint8_t *)&palette[offset]; fprintf(f, "%u %u %u ", entry[0], entry[1], entry[2]); } } fprintf(f, "\n"); } fclose(f); return true; } static bool save_global_palette(const nsgif_t *gif) { uint32_t table[NSGIF_MAX_COLOURS]; size_t entries; nsgif_global_palette(gif, table, &entries); return save_palette(nsgif_options.file, "global-palette.ppm", table, entries); } static bool save_local_palette(const nsgif_t *gif, uint32_t frame) { static uint32_t table[NSGIF_MAX_COLOURS]; char filename[64]; size_t entries; snprintf(filename, sizeof(filename), "local-palette-%"PRIu32".ppm", frame); if (!nsgif_local_palette(gif, frame, table, &entries)) { return false; } return save_palette(nsgif_options.file, filename, table, entries); } static void decode(FILE* ppm, const char *name, nsgif_t *gif, bool first) { nsgif_error err; uint32_t frame_prev = 0; const nsgif_info_t *info; info = nsgif_get_info(gif); if (first && ppm != NULL) { fprintf(ppm, "P3\n"); fprintf(ppm, "# %s\n", name); fprintf(ppm, "# width %u \n", info->width); fprintf(ppm, "# height %u \n", info->height); fprintf(ppm, "# frame_count %u \n", info->frame_count); fprintf(ppm, "# loop_max %u \n", info->loop_max); fprintf(ppm, "%u %u 256\n", info->width, info->height * info->frame_count); } if (first && nsgif_options.info) { print_gif_info(info); } if (first && nsgif_options.palette && info->global_palette) { save_global_palette(gif); } /* decode the frames */ while (true) { nsgif_bitmap_t *bitmap; const uint8_t *image; uint32_t frame_new; uint32_t delay_cs; nsgif_rect_t area; err = nsgif_frame_prepare(gif, &area, &delay_cs, &frame_new); if (err != NSGIF_OK) { warning("nsgif_frame_prepare", err); return; } if (frame_new < frame_prev) { /* Must be an animation that loops. We only care about * decoding each frame once in this utility. */ return; } frame_prev = frame_new; if (first && nsgif_options.info) { const nsgif_frame_info_t *f_info; f_info = nsgif_get_frame_info(gif, frame_new); if (f_info != NULL) { print_gif_frame_info(f_info, frame_new); } } if (first && nsgif_options.palette) { save_local_palette(gif, frame_new); } err = nsgif_frame_decode(gif, frame_new, &bitmap); if (err != NSGIF_OK) { fprintf(stderr, "Frame %"PRIu32": " "nsgif_decode_frame failed: %s\n", frame_new, nsgif_strerror(err)); /* Continue decoding the rest of the frames. */ } else if (first && ppm != NULL) { fprintf(ppm, "# frame %u:\n", frame_new); image = (const uint8_t *) bitmap; for (uint32_t y = 0; y != info->height; y++) { for (uint32_t x = 0; x != info->width; x++) { size_t z = (y * info->width + x) * 4; fprintf(ppm, "%u %u %u ", image[z], image[z + 1], image[z + 2]); } fprintf(ppm, "\n"); } } if (delay_cs == NSGIF_INFINITE) { /** This frame is the last. */ return; } } } int main(int argc, char *argv[]) { const nsgif_bitmap_cb_vt bitmap_callbacks = { .create = bitmap_create, .destroy = bitmap_destroy, .get_buffer = bitmap_get_buffer, }; size_t size; nsgif_t *gif; uint8_t *data; nsgif_error err; FILE *ppm = NULL; /* Override default options with any command line args */ if (!cli_parse(&cli, argc, (void *)argv)) { cli_help(&cli, argv[0]); return EXIT_FAILURE; } if (nsgif_options.help) { cli_help(&cli, argv[0]); return EXIT_SUCCESS; } if (nsgif_options.version) { printf("%s %s\n", STR_VAL(NSGIF_NAME), STR_VAL(NSGIF_VERSION)); return EXIT_SUCCESS; } if (nsgif_options.ppm != NULL) { ppm = fopen(nsgif_options.ppm, "w+"); if (ppm == NULL) { fprintf(stderr, "Unable to open %s for writing\n", nsgif_options.ppm); return EXIT_FAILURE; } } /* create our gif animation */ err = nsgif_create(&bitmap_callbacks, NSGIF_BITMAP_FMT_R8G8B8A8, &gif); if (err != NSGIF_OK) { warning("nsgif_create", err); return EXIT_FAILURE; } /* load file into memory */ data = load_file(nsgif_options.file, &size); /* Scan the raw data */ err = nsgif_data_scan(gif, size, data); if (err != NSGIF_OK) { /* Not fatal; some GIFs are nasty. Can still try to decode * any frames that were decoded successfully. */ warning("nsgif_data_scan", err); } nsgif_data_complete(gif); if (nsgif_options.loops == 0) { nsgif_options.loops = 1; } for (uint64_t i = 0; i < nsgif_options.loops; i++) { decode(ppm, nsgif_options.file, gif, i == 0); /* We want to ignore any loop limit in the GIF. */ nsgif_reset(gif); } if (ppm != NULL) { fclose(ppm); } /* clean up */ nsgif_destroy(gif); free(data); return 0; } libvips-8.15.1/libvips/foreign/libnsgif/update.sh000077500000000000000000000010701454007373500220030ustar00rootroot00000000000000#!/bin/bash # attempt to update our copy of libnsgif from the upstream repo set -e git clone git://git.netsurf-browser.org/libnsgif.git echo copying out source files ... cp libnsgif/README.md README-ns.md cp libnsgif/COPYING . cp libnsgif/include/nsgif.h . cp libnsgif/src/lzw.[ch] . cp libnsgif/src/gif.c . cp libnsgif/test/cli.[ch] test/ cp libnsgif/test/nsgif.c test/ if [ -d patches ]; then echo applying patches ... for patch in patches/*.patch; do [ -f "$patch" ] || continue patch -p0 <$patch done fi echo cleaning up ... rm -rf libnsgif libvips-8.15.1/libvips/foreign/magick.c000066400000000000000000000526131454007373500177750ustar00rootroot00000000000000/* Common functions for interfacing with ImageMagick. * * 22/12/17 dlemstra * * 24/7/18 * - add the sniffer * 16/10/20 [bfriesen] * - set matte and depth appropriately for GM in magick_import_pixels() */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pforeign.h" #include "magick.h" #if defined(HAVE_MAGICK6) || defined(HAVE_MAGICK7) /* ImageMagick can't detect some formats (eg. ICO and TGA) by examining the * contents -- ico.c and tga.c simply do not have recognisers. * * For these formats, do the detection ourselves. * Return an IM format specifier, or NULL to let IM do the detection. * * For sniffing TGAs, we check that there is at least enough room for the * header and that the preamble contains valid values: * * ----------------------------------------------------------- * |0x00 | 0-255 idlength, skip | * |0x01 | 0-1, color map present | * |0x02 | Any of (0, 1, 2, 3, 9, 10, 11), Image type | * ----------------------------------------------------------- * * However, this would catch ISOBMFF formats, so we must also check for the * 'ftyp' signature at offset 4. * * References: * * https://www.dca.fee.unicamp.br/~martino/disciplinas/ea978/tgaffs.pdf * * http://www.paulbourke.net/dataformats/tga/ * * https://en.wikipedia.org/wiki/Truevision_TGA#Technical_details * * https://en.wikipedia.org/wiki/ISO_base_media_file_format#Technical_details */ static const char * magick_sniff(const unsigned char *bytes, size_t length) { if (length >= 5 && bytes[0] == 0 && bytes[1] == 1 && bytes[2] == 0 && bytes[3] == 0 && bytes[4] == 0) return "TTF"; if (length >= 6 && bytes[0] == 0 && bytes[1] == 0 && (bytes[2] == 1 || bytes[2] == 2) && bytes[3] == 0 && (bytes[4] != 0 || bytes[5] != 0)) return "ICO"; if (length >= 18 && (bytes[1] == 0 || bytes[1] == 1) && (bytes[2] == 0 || bytes[2] == 1 || bytes[2] == 2 || bytes[2] == 3 || bytes[2] == 9 || bytes[2] == 10 || bytes[2] == 11) && memcmp(bytes + 4, "ftyp", 4) != 0) return "TGA"; #if defined(HAVE_GETMAGICINFO) || defined(HAVE_MAGICK7) /* Try to search the internal magic list for a match. */ ExceptionInfo *exception = magick_acquire_exception(); const MagicInfo *magic_info = GetMagicInfo(bytes, length, exception); magick_destroy_exception(exception); if (magic_info) { const char *magic_name = GetMagicName(magic_info); /* Avoid using TIFF as a format hint since RAW/DNG images often * share the same magic signature as TIFF. */ if (magic_name && g_ascii_strcasecmp(magic_name, "TIFF") != 0) { return magic_name; } } #endif return NULL; } void magick_sniff_bytes(ImageInfo *image_info, const unsigned char *bytes, size_t length) { const char *format; if ((format = magick_sniff(bytes, length))) vips_strncpy(image_info->magick, format, MaxTextExtent); } void magick_sniff_file(ImageInfo *image_info, const char *filename) { unsigned char bytes[256]; size_t length; if ((length = vips__get_bytes(filename, bytes, 256)) >= 4) magick_sniff_bytes(image_info, bytes, length); } #endif /*defined(HAVE_MAGICK6) || defined(HAVE_MAGICK7)*/ #ifdef HAVE_MAGICK7 Image * magick_acquire_image(const ImageInfo *image_info, ExceptionInfo *exception) { return AcquireImage(image_info, exception); } void magick_acquire_next_image(const ImageInfo *image_info, Image *image, ExceptionInfo *exception) { AcquireNextImage(image_info, image, exception); } int magick_set_image_size(Image *image, const size_t width, const size_t height, ExceptionInfo *exception) { return SetImageExtent(image, width, height, exception); } int magick_import_pixels(Image *image, const gssize x, const gssize y, const size_t width, const size_t height, const char *map, const StorageType type, const void *pixels, ExceptionInfo *exception) { return ImportImagePixels(image, x, y, width, height, map, type, pixels, exception); } void * magick_images_to_blob(const ImageInfo *image_info, Image *images, size_t *length, ExceptionInfo *exception) { return ImagesToBlob(image_info, images, length, exception); } void magick_set_property(Image *image, const char *property, const char *value, ExceptionInfo *exception) { (void) SetImageProperty(image, property, value, exception); } int magick_set_profile(Image *image, const char *name, const void *data, size_t length, ExceptionInfo *exception) { StringInfo *string; MagickBooleanType result; string = BlobToStringInfo(data, length); result = SetImageProfile(image, name, string, exception); DestroyStringInfo(string); return result; } void * magick_profile_map(Image *image, MagickMapProfileFn fn, void *a) { char *name; ResetImageProfileIterator(image); while ((name = GetNextImageProfile(image))) { const StringInfo *profile; void *data; size_t length; void *result; profile = GetImageProfile(image, name); data = GetStringInfoDatum(profile); length = GetStringInfoLength(profile); if ((result = fn(image, name, data, length, a))) return result; } return NULL; } ExceptionInfo * magick_acquire_exception(void) { return AcquireExceptionInfo(); } void magick_destroy_exception(ExceptionInfo *exception) { VIPS_FREEF(DestroyExceptionInfo, exception); } void magick_inherit_exception(ExceptionInfo *exception, Image *image) { (void) exception; (void) image; } void magick_set_number_scenes(ImageInfo *image_info, int scene, int number_scenes) { /* I can't find docs for these fields, but this seems to work. */ char page[256]; image_info->scene = scene; image_info->number_scenes = number_scenes; /* Some IMs must have the string version set as well. */ vips_snprintf(page, 256, "%d-%d", scene, scene + number_scenes); image_info->scenes = g_strdup(page); } int magick_optimize_image_layers(Image **images, ExceptionInfo *exception) { Image *tmp; tmp = OptimizePlusImageLayers(*images, exception); if (exception->severity != UndefinedException) { VIPS_FREEF(DestroyImageList, tmp); return MagickFalse; } VIPS_FREEF(DestroyImageList, *images); *images = tmp; return MagickTrue; } int magick_optimize_image_transparency(const Image *images, ExceptionInfo *exception) { OptimizeImageTransparency(images, exception); return exception->severity == UndefinedException; } /* Does a few bytes look like a file IM can handle? */ gboolean magick_ismagick(const unsigned char *bytes, size_t length) { char format[MagickPathExtent]; magick_genesis(); /* Try with our custom sniffers first. */ return magick_sniff(bytes, length) || GetImageMagick(bytes, length, format); } int magick_quantize_images(Image *images, const size_t depth, ExceptionInfo *exception) { QuantizeInfo info; GetQuantizeInfo(&info); info.number_colors = 1 << depth; QuantizeImages(&info, images, exception); return exception->severity == UndefinedException; } #endif /*HAVE_MAGICK7*/ #ifdef HAVE_MAGICK6 Image * magick_acquire_image(const ImageInfo *image_info, ExceptionInfo *exception) { (void) exception; #ifdef HAVE_ACQUIREIMAGE return AcquireImage(image_info); #else /*!HAVE_ACQUIREIMAGE*/ /* IM5-ish and GraphicsMagick use AllocateImage(). */ return AllocateImage(image_info); #endif } void magick_acquire_next_image(const ImageInfo *image_info, Image *image, ExceptionInfo *exception) { (void) exception; #ifdef HAVE_ACQUIREIMAGE AcquireNextImage(image_info, image); #else /*!HAVE_ACQUIREIMAGE*/ /* IM5-ish and GraphicsMagick use AllocateNextImage(). */ AllocateNextImage(image_info, image); #endif } int magick_set_image_size(Image *image, const size_t width, const size_t height, ExceptionInfo *exception) { #ifdef HAVE_SETIMAGEEXTENT int result = SetImageExtent(image, width, height); /* IM6 sets the exception on the image. */ if (!result) magick_inherit_exception(exception, image); return result; #else /*!HAVE_SETIMAGEEXTENT*/ (void) exception; image->columns = width; image->rows = height; /* imagemagick does a SyncImagePixelCache() at the end of * SetImageExtent(), but GM does not really have an equivalent. Just * always return True. */ return MagickTrue; #endif /*HAVE_SETIMAGEEXTENT*/ } int magick_import_pixels(Image *image, const gssize x, const gssize y, const size_t width, const size_t height, const char *map, const StorageType type, const void *pixels, ExceptionInfo *exception) { #ifdef HAVE_IMPORTIMAGEPIXELS return ImportImagePixels(image, x, y, width, height, map, type, pixels); #else /*!HAVE_IMPORTIMAGEPIXELS*/ Image *constitute_image; unsigned int storage_type_depth; g_assert(image); g_assert(image->signature == MagickSignature); constitute_image = ConstituteImage(width, height, map, type, pixels, &image->exception); if (!constitute_image) return MagickFalse; /* image needs to inherit these fields from constitute_image. */ switch (type) { case CharPixel: storage_type_depth = sizeof(unsigned char) * 8; break; case ShortPixel: storage_type_depth = sizeof(unsigned short) * 8; break; case IntegerPixel: storage_type_depth = sizeof(unsigned short) * 8; break; case LongPixel: storage_type_depth = sizeof(unsigned long) * 8; break; case FloatPixel: storage_type_depth = sizeof(float) * 8; break; case DoublePixel: storage_type_depth = sizeof(double) * 8; break; default: storage_type_depth = QuantumDepth; break; } image->depth = VIPS_MIN(storage_type_depth, QuantumDepth); image->matte = constitute_image->matte; (void) CompositeImage(image, CopyCompositeOp, constitute_image, x, y); DestroyImage(constitute_image); return image->exception.severity == UndefinedException; #endif /*HAVE_IMPORTIMAGEPIXELS*/ } void * magick_images_to_blob(const ImageInfo *image_info, Image *images, size_t *length, ExceptionInfo *exception) { #ifdef HAVE_IMAGESTOBLOB return ImagesToBlob(image_info, images, length, exception); #else return ImageToBlob(image_info, images, length, exception); #endif /*HAVE_IMAGESTOBLOB*/ } void magick_set_property(Image *image, const char *property, const char *value, ExceptionInfo *exception) { (void) exception; #ifdef HAVE_SETIMAGEPROPERTY (void) SetImageProperty(image, property, value); #else /*!HAVE_SETIMAGEPROPERTY*/ (void) SetImageAttribute(image, property, value); #endif /*HAVE_SETIMAGEPROPERTY*/ } int magick_set_profile(Image *image, const char *name, const void *data, size_t length, ExceptionInfo *exception) { int result; #ifdef HAVE_BLOBTOSTRINGINFO StringInfo *string; string = BlobToStringInfo(data, length); result = SetImageProfile(image, name, string); DestroyStringInfo(string); #else /*!HAVE_BLOBTOSTRINGINFO*/ result = SetImageProfile(image, name, data, length); #endif /*HAVE_BLOBTOSTRINGINFO*/ return result; } void * magick_profile_map(Image *image, MagickMapProfileFn fn, void *a) { const char *name; const void *data; size_t length; void *result; #ifdef HAVE_RESETIMAGEPROFILEITERATOR ResetImageProfileIterator(image); while ((name = GetNextImageProfile(image))) { const StringInfo *profile; profile = GetImageProfile(image, name); data = GetStringInfoDatum(profile); length = GetStringInfoLength(profile); if ((result = fn(image, name, data, length, a))) return result; } #else /*!HAVE_RESETIMAGEPROFILEITERATOR*/ { ImageProfileIterator *iter; iter = AllocateImageProfileIterator(image); while (NextImageProfile(iter, &name, (const unsigned char **) &data, &length)) { if ((result = fn(image, name, data, length, a))) { DeallocateImageProfileIterator(iter); return result; } } DeallocateImageProfileIterator(iter); } #endif /*HAVE_RESETIMAGEPROFILEITERATOR*/ return NULL; } ExceptionInfo * magick_acquire_exception(void) { ExceptionInfo *exception; #ifdef HAVE_ACQUIREEXCEPTIONINFO /* IM6+ */ exception = AcquireExceptionInfo(); #else /*!HAVE_ACQUIREEXCEPTIONINFO*/ /* gm */ exception = g_new(ExceptionInfo, 1); GetExceptionInfo(exception); #endif /*HAVE_ACQUIREEXCEPTIONINFO*/ return exception; } void magick_destroy_exception(ExceptionInfo *exception) { #ifdef HAVE_ACQUIREEXCEPTIONINFO /* IM6+ will free the exception in destroy. */ VIPS_FREEF(DestroyExceptionInfo, exception); #else /*!HAVE_ACQUIREEXCEPTIONINFO*/ /* gm and very old IM need to free the memory too. */ if (exception) { DestroyExceptionInfo(exception); g_free(exception); } #endif /*HAVE_ACQUIREEXCEPTIONINFO*/ } void magick_inherit_exception(ExceptionInfo *exception, Image *image) { #ifdef HAVE_INHERITEXCEPTION InheritException(exception, &image->exception); #endif /*HAVE_INHERITEXCEPTION*/ } void magick_set_number_scenes(ImageInfo *image_info, int scene, int number_scenes) { #ifdef HAVE_NUMBER_SCENES /* I can't find docs for these fields, but this seems to work. */ char page[256]; image_info->scene = scene; image_info->number_scenes = number_scenes; /* Some IMs must have the string version set as well. */ vips_snprintf(page, 256, "%d-%d", scene, scene + number_scenes); image_info->scenes = g_strdup(page); #else /*!HAVE_NUMBER_SCENES*/ /* This works with GM 1.2.31 and probably others. */ image_info->subimage = scene; image_info->subrange = number_scenes; #endif } int magick_optimize_image_layers(Image **images, ExceptionInfo *exception) { #ifdef HAVE_OPTIMIZEPLUSIMAGELAYERS Image *tmp; tmp = OptimizePlusImageLayers(*images, exception); if (exception->severity != UndefinedException) return MagickFalse; VIPS_FREEF(DestroyImageList, *images); *images = tmp; return MagickTrue; #else /*!HAVE_OPTIMIZEPLUSIMAGELAYERS*/ g_warning("%s", _("layer optimization is not supported by " "your version of libMagick")); return MagickTrue; #endif /*HAVE_OPTIMIZEPLUSIMAGELAYERS*/ } int magick_optimize_image_transparency(const Image *images, ExceptionInfo *exception) { #ifdef HAVE_OPTIMIZEIMAGETRANSPARENCY OptimizeImageTransparency(images, exception); return exception->severity == UndefinedException; #else /*!HAVE_OPTIMIZEIMAGETRANSPARENCY*/ g_warning("%s", _("transparency optimization is not supported by " "your version of libMagick")); return MagickTrue; #endif /*HAVE_OPTIMIZEIMAGETRANSPARENCY*/ } /* Does a few bytes look like a file IM can handle? */ gboolean magick_ismagick(const unsigned char *bytes, size_t length) { magick_genesis(); /* Try with our custom sniffers first. */ #ifdef HAVE_GETIMAGEMAGICK3 { char format[MaxTextExtent]; return magick_sniff(bytes, length) || GetImageMagick(bytes, length, format); } #else /*!HAVE_GETIMAGEMAGICK3*/ /* The GM one returns a static string. */ return magick_sniff(bytes, length) || GetImageMagick(bytes, length); #endif } int magick_quantize_images(Image *images, const size_t depth, ExceptionInfo *exception) { QuantizeInfo info; GetQuantizeInfo(&info); info.number_colors = (1 << depth); return QuantizeImages(&info, images); } #endif /*HAVE_MAGICK6*/ #if defined(HAVE_MAGICK6) || defined(HAVE_MAGICK7) void magick_set_image_option(ImageInfo *image_info, const char *name, const char *value) { #ifdef HAVE_SETIMAGEOPTION SetImageOption(image_info, name, value); #endif /*HAVE_SETIMAGEOPTION*/ } typedef struct _MagickColorspaceTypeNames { ColorspaceType colorspace; const char *name; } MagickColorspaceTypeNames; static MagickColorspaceTypeNames magick_colorspace_names[] = { { UndefinedColorspace, "UndefinedColorspace" }, { CMYKColorspace, "CMYKColorspace" }, { GRAYColorspace, "GRAYColorspace" }, { HSLColorspace, "HSLColorspace" }, { HWBColorspace, "HWBColorspace" }, { OHTAColorspace, "OHTAColorspace" }, { Rec601YCbCrColorspace, "Rec601YCbCrColorspace" }, { Rec709YCbCrColorspace, "Rec709YCbCrColorspace" }, { RGBColorspace, "RGBColorspace" }, { sRGBColorspace, "sRGBColorspace" }, { TransparentColorspace, "TransparentColorspace" }, { XYZColorspace, "XYZColorspace" }, { YCbCrColorspace, "YCbCrColorspace" }, { YCCColorspace, "YCCColorspace" }, { YIQColorspace, "YIQColorspace" }, { YPbPrColorspace, "YPbPrColorspace" }, { YUVColorspace, "YUVColorspace" }, /* More recent imagemagicks add these. */ #ifdef HAVE_CMYCOLORSPACE { CMYColorspace, "CMYColorspace" }, { HCLColorspace, "HCLColorspace" }, { HSBColorspace, "HSBColorspace" }, { LabColorspace, "LabColorspace" }, { LogColorspace, "LogColorspace" }, { LuvColorspace, "LuvColorspace" }, #endif /*HAVE_CMYCOLORSPACE*/ #ifdef HAVE_HCLPCOLORSPACE { HCLpColorspace, "HCLpColorspace" }, { HSIColorspace, "HSIColorspace" }, { HSVColorspace, "HSVColorspace" }, { LCHColorspace, "LCHColorspace" }, { LCHabColorspace, "LCHabColorspace" }, { LCHuvColorspace, "LCHuvColorspace" }, { LMSColorspace, "LMSColorspace" }, { scRGBColorspace, "scRGBColorspace" }, { xyYColorspace, "xyYColorspace" }, { YDbDrColorspace, "YDbDrColorspace" }, #endif /*HAVE_HCLPCOLORSPACE*/ /* im7 has this, I think * { LinearGRAYColorspace, "LinearGRAYColorspace" } * */ }; const char * magick_ColorspaceType2str(ColorspaceType colorspace) { int i; for (i = 0; i < VIPS_NUMBER(magick_colorspace_names); i++) if (magick_colorspace_names[i].colorspace == colorspace) return magick_colorspace_names[i].name; return ""; } void magick_vips_error(const char *domain, ExceptionInfo *exception) { if (exception) { if (exception->reason && exception->description) vips_error(domain, _("libMagick error: %s %s"), exception->reason, exception->description); else if (exception->reason) vips_error(domain, _("libMagick error: %s"), exception->reason); else vips_error(domain, "%s", _("libMagick error:")); } } static void * magick_genesis_cb(void *client) { ExceptionInfo *exception; #ifdef DEBUG printf("magick_genesis_cb:\n"); #endif /*DEBUG*/ #if defined(HAVE_MAGICKCOREGENESIS) || defined(HAVE_MAGICK7) MagickCoreGenesis(vips_get_argv0(), MagickFalse); #else /*!HAVE_MAGICKCOREGENESIS*/ InitializeMagick(vips_get_argv0()); #endif /*HAVE_MAGICKCOREGENESIS*/ /* This forces *magick to init all loaders. We have to do this so we * can sniff files with GetImageMagick(). * * We don't care about errors from magickinit. */ exception = magick_acquire_exception(); (void) GetMagickInfo("*", exception); magick_destroy_exception(exception); return NULL; } void magick_genesis(void) { static GOnce once = G_ONCE_INIT; VIPS_ONCE(&once, magick_genesis_cb, NULL); } /* Set vips metadata from a magick profile. */ static void * magick_set_vips_profile_cb(Image *image, const char *name, const void *data, size_t length, void *a) { VipsImage *im = (VipsImage *) a; char name_text[256]; VipsBuf vips_name = VIPS_BUF_STATIC(name_text); if (g_ascii_strcasecmp(name, "XMP") == 0) vips_buf_appendf(&vips_name, VIPS_META_XMP_NAME); else if (g_ascii_strcasecmp(name, "IPTC") == 0) vips_buf_appendf(&vips_name, VIPS_META_IPTC_NAME); else if (g_ascii_strcasecmp(name, "ICC") == 0) vips_buf_appendf(&vips_name, VIPS_META_ICC_NAME); else if (g_ascii_strcasecmp(name, "EXIF") == 0) vips_buf_appendf(&vips_name, VIPS_META_EXIF_NAME); else vips_buf_appendf(&vips_name, "magickprofile-%s", name); vips_image_set_blob_copy(im, vips_buf_all(&vips_name), data, length); if (strcmp(name, "exif") == 0) (void) vips__exif_parse(im); return NULL; } /* Set vips metadata from ImageMagick profiles. */ int magick_set_vips_profile(VipsImage *im, Image *image) { if (magick_profile_map(image, magick_set_vips_profile_cb, im)) return -1; return 0; } typedef struct { Image *image; ExceptionInfo *exception; } CopyProfileInfo; static void * magick_set_magick_profile_cb(VipsImage *im, const char *name, GValue *value, CopyProfileInfo *info) { char txt[256]; VipsBuf buf = VIPS_BUF_STATIC(txt); const void *data; size_t length; if (strcmp(name, VIPS_META_XMP_NAME) == 0) vips_buf_appendf(&buf, "XMP"); else if (strcmp(name, VIPS_META_IPTC_NAME) == 0) vips_buf_appendf(&buf, "IPTC"); else if (strcmp(name, VIPS_META_ICC_NAME) == 0) vips_buf_appendf(&buf, "ICC"); else if (strcmp(name, VIPS_META_EXIF_NAME) == 0) vips_buf_appendf(&buf, "EXIF"); else if (vips_isprefix("magickprofile-", name)) vips_buf_appendf(&buf, "%s", name + strlen("magickprofile-")); if (vips_buf_is_empty(&buf)) return NULL; if (!vips_image_get_typeof(im, name)) return NULL; if (vips_image_get_blob(im, name, &data, &length)) return im; if (!magick_set_profile(info->image, vips_buf_all(&buf), data, length, info->exception)) return im; return NULL; } /* Set magick metadata from a VipsImage. */ int magick_set_magick_profile(Image *image, VipsImage *im, ExceptionInfo *exception) { CopyProfileInfo info; info.image = image; info.exception = exception; if (vips_image_map(im, (VipsImageMapFn) magick_set_magick_profile_cb, &info)) return -1; return 0; } #endif /*defined(HAVE_MAGICK6) || defined(HAVE_MAGICK7)*/ libvips-8.15.1/libvips/foreign/magick.h000066400000000000000000000064711454007373500200030ustar00rootroot00000000000000/* Common functions for interfacing with ImageMagick. * * 22/12/17 dlemstra */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #if defined(HAVE_MAGICK6) || defined(HAVE_MAGICK7) #ifdef HAVE_MAGICK6 #include #define MaxPathExtent MaxTextExtent #endif /*HAVE_MAGICK6*/ #ifdef HAVE_MAGICK7 #include #define MaxPathExtent MagickPathExtent #endif /*HAVE_MAGICK7*/ Image *magick_acquire_image(const ImageInfo *image_info, ExceptionInfo *exception); void magick_acquire_next_image(const ImageInfo *image_info, Image *image, ExceptionInfo *exception); int magick_set_image_size(Image *image, const size_t width, const size_t height, ExceptionInfo *exception); int magick_import_pixels(Image *image, const gssize x, const gssize y, const size_t width, const size_t height, const char *map, const StorageType type, const void *pixels, ExceptionInfo *exception); void *magick_images_to_blob(const ImageInfo *image_info, Image *images, size_t *length, ExceptionInfo *exception); void magick_set_property(Image *image, const char *property, const char *value, ExceptionInfo *exception); typedef void *(*MagickMapProfileFn)(Image *image, const char *name, const void *data, size_t length, void *a); void *magick_profile_map(Image *image, MagickMapProfileFn fn, void *a); int magick_set_profile(Image *image, const char *name, const void *data, size_t length, ExceptionInfo *exception); void magick_set_image_option(ImageInfo *image_info, const char *name, const char *value); void magick_set_number_scenes(ImageInfo *image_info, int scene, int number_scenes); const char *magick_ColorspaceType2str(ColorspaceType colorspace); ExceptionInfo *magick_acquire_exception(void); void magick_destroy_exception(ExceptionInfo *exception); void magick_inherit_exception(ExceptionInfo *exception, Image *image); void magick_sniff_bytes(ImageInfo *image_info, const unsigned char *bytes, size_t length); void magick_sniff_file(ImageInfo *image_info, const char *filename); void magick_vips_error(const char *domain, ExceptionInfo *exception); void magick_genesis(void); int magick_set_vips_profile(VipsImage *im, Image *image); int magick_set_magick_profile(Image *image, VipsImage *im, ExceptionInfo *exception); int magick_optimize_image_layers(Image **images, ExceptionInfo *exception); int magick_optimize_image_transparency(const Image *images, ExceptionInfo *exception); int magick_quantize_images(Image *images, const size_t depth, ExceptionInfo *exception); gboolean magick_ismagick(const unsigned char *bytes, size_t length); #endif /*HAVE_MAGICK6*/ libvips-8.15.1/libvips/foreign/magick2vips.c000066400000000000000000000523361454007373500207630ustar00rootroot00000000000000/* Read a file using libMagick * * 7/1/03 JC * - from im_tiff2vips * 3/2/03 JC * - some InitializeMagick() fail with NULL arg * 2/11/04 * - im_magick2vips_header() also checks sensible width/height * 28/10/05 * - copy attributes to meta * - write many-frame images as a big column if all frames have identical * width/height/bands/depth * 31/3/06 * - test for magick attr support * 8/5/06 * - set RGB16/GREY16 if appropriate * 10/8/07 * - support 32/64 bit imagemagick too * 21/2/08 * - use MaxRGB if QuantumRange is missing (thanks Bob) * - look for MAGICKCORE_HDRI_SUPPORT (thanks Marcel) * - use image->attributes if GetNextImageAttribute() is missing * 3/3/09 * - allow funky bit depths, like 14 (thanks Mikkel) * 17/3/09 * - reset dcm:display-range to help DICOM read * 20/4/09 * - argh libMagick uses 255 == transparent ... we must invert all * alpha channels * 12/5/09 * - fix signed/unsigned warnings * 23/7/09 * - SetImageOption() is optional (to help GM) * 4/2/10 * - gtkdoc * 30/4/10 * - better number of bands detection with GetImageType() * - use new API stuff, argh * 17/12/11 * - turn into a set of read fns ready to be called from a class * 11/6/13 * - add @all_frames option, off by default * 4/12/14 Lovell * - add @density option * 16/2/15 mcuelenaere * - add blob read * 26/2/15 * - close the read down early for a header read ... this saves an * fd during file read, handy for large numbers of input images * 14/2/16 * - add @page option, 0 by default * 18/4/16 * - fix @page with graphicsmagick * 25/11/16 * - remove @all_frames, add @n * 23/2/17 * - try using GetImageChannelDepth() instead of ->depth * 25/5/18 * - don't use Ping, it's too unreliable * 24/7/18 * - sniff extra filetypes * 4/1/19 kleisauke * - we did not chain exceptions correctly, causing a memory leak * - added wrapper funcs for exception handling * 4/2/19 * - add profile (xmp, ipct, etc.) read * 12/11/21 * - set "orientation" * 26/8/22 * - set "magick-format" * 13/3/23 MathemanFlo * - add bits per sample metadata */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Turn on debugging output. #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #ifdef ENABLE_MAGICKLOAD #ifdef HAVE_MAGICK6 #include #include #include #include #include #include #include #include "pforeign.h" #include "magick.h" /* pre-float Magick used to call this MaxRGB. */ #if !defined(QuantumRange) #define QuantumRange MaxRGB #endif /* And this used to be UseHDRI. */ #if MAGICKCORE_HDRI_SUPPORT #define UseHDRI 1 #endif /* What we track during a read call. */ typedef struct _Read { char *filename; VipsImage *im; const void *buf; size_t len; int page; int n; Image *image; ImageInfo *image_info; ExceptionInfo *exception; /* Number of pages in image. */ int n_pages; /* Number of pages we will read. */ int n_frames; Image **frames; int frame_height; /* Mutex to serialise calls to libMagick during threaded read. */ GMutex *lock; } Read; /* Can be called many times. */ static void read_free(Read *read) { #ifdef DEBUG printf("magick2vips: read_free: %s\n", read->filename); #endif /*DEBUG*/ VIPS_FREE(read->filename); VIPS_FREEF(DestroyImageList, read->image); VIPS_FREEF(DestroyImageInfo, read->image_info); VIPS_FREE(read->frames); VIPS_FREEF(magick_destroy_exception, read->exception); VIPS_FREEF(vips_g_mutex_free, read->lock); } /* Can be called many times. */ static int read_close(VipsImage *im, Read *read) { read_free(read); return 0; } static Read * read_new(const char *filename, VipsImage *im, const void *buf, const size_t len, const char *density, int page, int n) { Read *read; magick_genesis(); /* IM doesn't use the -1 means end-of-file convention, change it to a * very large number. */ if (n == -1) n = 10000000; if (!(read = VIPS_NEW(im, Read))) return NULL; read->filename = filename ? g_strdup(filename) : NULL; read->buf = buf; read->len = len; read->page = page; read->n = n; read->im = im; read->image = NULL; read->image_info = CloneImageInfo(NULL); read->exception = magick_acquire_exception(); read->n_pages = 0; read->n_frames = 0; read->frames = NULL; read->frame_height = 0; read->lock = vips_g_mutex_new(); g_signal_connect(im, "close", G_CALLBACK(read_close), read); if (!read->image_info) return NULL; if (filename) vips_strncpy(read->image_info->filename, filename, MaxTextExtent); /* Any extra file format detection. */ if (filename) magick_sniff_file(read->image_info, filename); if (buf) magick_sniff_bytes(read->image_info, buf, len); /* Canvas resolution for rendering vector formats like SVG. */ VIPS_SETSTR(read->image_info->density, density); /* When reading DICOM images, we want to ignore any * window_center/_width setting, since it may put pixels outside the * 0-65535 range and lose data. * * These window settings are attached as vips metadata, so our caller * can interpret them if it wants. */ magick_set_image_option(read->image_info, "dcm:display-range", "reset"); if (read->page > 0) magick_set_number_scenes(read->image_info, read->page, read->n); #ifdef DEBUG printf("magick2vips: read_new: %s\n", read->filename); #endif /*DEBUG*/ return read; } static int get_bands(Image *image) { int bands; ImageType type = GetImageType(image, &image->exception); switch (type) { case BilevelType: case GrayscaleType: bands = 1; break; case GrayscaleMatteType: /* ImageMagick also has PaletteBilevelMatteType, but GraphicsMagick * does not. Skip for portability. */ bands = 2; break; case PaletteType: case TrueColorType: bands = 3; break; case PaletteMatteType: case TrueColorMatteType: case ColorSeparationType: bands = 4; break; case ColorSeparationMatteType: bands = 5; break; default: vips_error("magick2vips", _("unsupported image type %d"), (int) type); return -1; } return bands; } static int parse_header(Read *read) { VipsImage *im = read->im; Image *image = read->image; int depth; Image *p; int i; #ifdef DEBUG printf("parse_header: filename = %s\n", read->filename); printf("GetImageChannelDepth(AllChannels) = %zd\n", GetImageChannelDepth(image, AllChannels, &image->exception)); printf("GetImageDepth() = %zd\n", GetImageDepth(image, &image->exception)); printf("image->depth = %zd\n", image->depth); printf("GetImageType() = %d\n", GetImageType(image, &image->exception)); printf("IsGrayImage() = %d\n", IsGrayImage(image, &image->exception)); printf("IsMonochromeImage() = %d\n", IsMonochromeImage(image, &image->exception)); printf("IsOpaqueImage() = %d\n", IsOpaqueImage(image, &image->exception)); printf("image->columns = %zd\n", image->columns); printf("image->rows = %zd\n", image->rows); #endif /*DEBUG*/ im->Coding = VIPS_CODING_NONE; im->Xsize = image->columns; im->Ysize = image->rows; read->frame_height = image->rows; im->Bands = get_bands(image); if (im->Xsize <= 0 || im->Ysize <= 0 || im->Bands <= 0 || im->Xsize >= VIPS_MAX_COORD || im->Ysize >= VIPS_MAX_COORD || im->Bands >= VIPS_MAX_COORD) { vips_error("magick2vips", _("bad image dimensions %d x %d pixels, %d bands"), im->Xsize, im->Ysize, im->Bands); return -1; } /* Depth can be 'fractional'. * * You'd think we should use * GetImageDepth() but that seems unreliable. 16-bit mono DICOM images * are reported as depth 1, for example. * * Try GetImageChannelDepth(), maybe that works. */ depth = GetImageChannelDepth(image, AllChannels, &image->exception); im->BandFmt = -1; if (depth >= 1 && depth <= 8) im->BandFmt = VIPS_FORMAT_UCHAR; if (depth >= 9 && depth <= 16) im->BandFmt = VIPS_FORMAT_USHORT; #ifdef UseHDRI if (depth == 32) im->BandFmt = VIPS_FORMAT_FLOAT; if (depth == 64) im->BandFmt = VIPS_FORMAT_DOUBLE; #else /*!UseHDRI*/ if (depth == 32) im->BandFmt = VIPS_FORMAT_UINT; #endif /*UseHDRI*/ if (im->BandFmt == -1) { vips_error("magick2vips", _("unsupported bit depth %d"), (int) depth); return -1; } switch (image->units) { case PixelsPerInchResolution: im->Xres = image->x_resolution / 25.4; im->Yres = image->y_resolution / 25.4; break; case PixelsPerCentimeterResolution: im->Xres = image->x_resolution / 10.0; im->Yres = image->y_resolution / 10.0; break; default: im->Xres = 1.0; im->Yres = 1.0; break; } // this can be wrong for some GM versions and must be sanity checked (see // below) switch (image->colorspace) { case GRAYColorspace: if (im->BandFmt == VIPS_FORMAT_USHORT) im->Type = VIPS_INTERPRETATION_GREY16; else im->Type = VIPS_INTERPRETATION_B_W; break; case sRGBColorspace: case RGBColorspace: if (im->BandFmt == VIPS_FORMAT_USHORT) im->Type = VIPS_INTERPRETATION_RGB16; else im->Type = VIPS_INTERPRETATION_sRGB; break; case CMYKColorspace: im->Type = VIPS_INTERPRETATION_CMYK; break; default: im->Type = VIPS_INTERPRETATION_ERROR; break; } // revise the interpretation if it seems crazy im->Type = vips_image_guess_interpretation(im); if (vips_image_pipelinev(im, VIPS_DEMAND_STYLE_SMALLTILE, NULL)) return -1; /* Set vips metadata from ImageMagick profiles. */ if (magick_set_vips_profile(im, image)) return -1; #ifdef HAVE_RESETIMAGEPROPERTYITERATOR { char *key; /* This is the most recent imagemagick API, test for this first. */ ResetImagePropertyIterator(image); while ((key = GetNextImageProperty(image))) { char name_text[256]; VipsBuf name = VIPS_BUF_STATIC(name_text); vips_buf_appendf(&name, "magick-%s", key); vips_image_set_string(im, vips_buf_all(&name), GetImageProperty(image, key)); } } #elif defined(HAVE_RESETIMAGEATTRIBUTEITERATOR) { const ImageAttribute *attr; /* magick6.1-ish and later, deprecated in 6.5ish. */ ResetImageAttributeIterator(image); while ((attr = GetNextImageAttribute(image))) { char name_text[256]; VipsBuf name = VIPS_BUF_STATIC(name_text); vips_buf_appendf(&name, "magick-%s", attr->key); vips_image_set_string(im, vips_buf_all(&name), attr->value); } } #else { const ImageAttribute *attr; /* GraphicsMagick is missing the iterator: we have to loop ourselves. * ->attributes is marked as private in the header, but there's no * getter so we have to access it directly. */ for (attr = image->attributes; attr; attr = attr->next) { char name_text[256]; VipsBuf name = VIPS_BUF_STATIC(name_text); vips_buf_appendf(&name, "magick-%s", attr->key); vips_image_set_string(im, vips_buf_all(&name), attr->value); } } #endif /* Something like "BMP". */ if (strlen(read->image->magick) > 0) vips_image_set_string(im, "magick-format", read->image->magick); /* Do we have a set of equal-sized frames? Append them. FIXME ... there must be an attribute somewhere from dicom read which says this is a volumetric image */ read->n_pages = GetImageListLength(image); read->n_frames = 0; for (p = image; p; (p = GetNextImageInList(p))) { int p_depth = GetImageChannelDepth(p, AllChannels, &p->exception); if (p->columns != (unsigned int) im->Xsize || p->rows != (unsigned int) im->Ysize || get_bands(p) != im->Bands || p_depth != depth) { #ifdef DEBUG printf("frame %d differs\n", read->n_frames); printf("%zdx%zd, %d bands\n", p->columns, p->rows, get_bands(p)); printf("first frame is %dx%d, %d bands\n", im->Xsize, im->Ysize, im->Bands); #endif /*DEBUG*/ break; } read->n_frames += 1; } if (p) /* Nope ... just do the first image in the list. */ read->n_frames = 1; #ifdef DEBUG printf("will read %d frames\n", read->n_frames); #endif /*DEBUG*/ if (read->n != -1) read->n_frames = VIPS_MIN(read->n_frames, read->n); /* Record frame pointers. */ if (!(read->frames = VIPS_ARRAY(NULL, read->n_frames, Image *))) return -1; p = image; for (i = 0; i < read->n_frames; i++) { read->frames[i] = p; p = GetNextImageInList(p); } if (read->n_frames > 1) { vips_image_set_int(im, VIPS_META_PAGE_HEIGHT, im->Ysize); im->Ysize *= read->n_frames; } vips_image_set_int(im, VIPS_META_N_PAGES, read->n_pages); vips_image_set_int(im, VIPS_META_ORIENTATION, VIPS_CLIP(1, image->orientation, 8)); vips_image_set_int(im, VIPS_META_BITS_PER_SAMPLE, depth); return 0; } /* Divide by this to get 0 - MAX from a Quantum. Eg. consider QuantumRange == * 65535, MAX == 255 (a Q16 ImageMagic representing an 8-bit image). Make sure * this can't be zero (if QuantumRange < MAX) .. can happen if we have a Q8 * ImageMagick trying to represent a 16-bit image. */ #define SCALE(MAX) \ (QuantumRange < (MAX) \ ? 1 \ : ((QuantumRange + 1) / ((MAX) + 1))) #define GRAY_LOOP(TYPE, MAX) \ { \ TYPE *q = (TYPE *) q8; \ \ for (x = 0; x < n; x++) \ q[x] = pixels[x].green / SCALE(MAX); \ } #define GRAYA_LOOP(TYPE, MAX) \ { \ TYPE *q = (TYPE *) q8; \ \ for (x = 0; x < n; x++) { \ q[0] = pixels[x].green / SCALE(MAX); \ q[1] = MAX - pixels[x].opacity / SCALE(MAX); \ \ q += 2; \ } \ } #define RGB_LOOP(TYPE, MAX) \ { \ TYPE *q = (TYPE *) q8; \ \ for (x = 0; x < n; x++) { \ q[0] = pixels[x].red / SCALE(MAX); \ q[1] = pixels[x].green / SCALE(MAX); \ q[2] = pixels[x].blue / SCALE(MAX); \ \ q += 3; \ } \ } #define RGBA_LOOP(TYPE, MAX) \ { \ TYPE *q = (TYPE *) q8; \ \ for (x = 0; x < n; x++) { \ q[0] = pixels[x].red / SCALE(MAX); \ q[1] = pixels[x].green / SCALE(MAX); \ q[2] = pixels[x].blue / SCALE(MAX); \ q[3] = MAX - pixels[x].opacity / SCALE(MAX); \ \ q += 4; \ } \ } static void unpack_pixels(VipsImage *im, VipsPel *q8, PixelPacket *pixels, int n) { int x; switch (im->Bands) { case 1: /* Gray. */ switch (im->BandFmt) { case VIPS_FORMAT_UCHAR: GRAY_LOOP(unsigned char, 255); break; case VIPS_FORMAT_USHORT: GRAY_LOOP(unsigned short, 65535); break; case VIPS_FORMAT_UINT: GRAY_LOOP(unsigned int, 4294967295UL); break; case VIPS_FORMAT_DOUBLE: GRAY_LOOP(double, QuantumRange); break; default: g_assert_not_reached(); } break; case 2: /* Gray plus alpha. */ switch (im->BandFmt) { case VIPS_FORMAT_UCHAR: GRAYA_LOOP(unsigned char, 255); break; case VIPS_FORMAT_USHORT: GRAYA_LOOP(unsigned short, 65535); break; case VIPS_FORMAT_UINT: GRAYA_LOOP(unsigned int, 4294967295UL); break; case VIPS_FORMAT_DOUBLE: GRAYA_LOOP(double, QuantumRange); break; default: g_assert_not_reached(); } break; case 3: /* RGB. */ switch (im->BandFmt) { case VIPS_FORMAT_UCHAR: RGB_LOOP(unsigned char, 255); break; case VIPS_FORMAT_USHORT: RGB_LOOP(unsigned short, 65535); break; case VIPS_FORMAT_UINT: RGB_LOOP(unsigned int, 4294967295UL); break; case VIPS_FORMAT_DOUBLE: RGB_LOOP(double, QuantumRange); break; default: g_assert_not_reached(); } break; case 4: /* RGBA or CMYK. */ switch (im->BandFmt) { case VIPS_FORMAT_UCHAR: RGBA_LOOP(unsigned char, 255); break; case VIPS_FORMAT_USHORT: RGBA_LOOP(unsigned short, 65535); break; case VIPS_FORMAT_UINT: RGBA_LOOP(unsigned int, 4294967295UL); break; case VIPS_FORMAT_DOUBLE: RGBA_LOOP(double, QuantumRange); break; default: g_assert_not_reached(); } break; default: g_assert_not_reached(); } } static PixelPacket * get_pixels(Image *image, int left, int top, int width, int height) { PixelPacket *pixels; #ifdef HAVE_GETVIRTUALPIXELS if (!(pixels = (PixelPacket *) GetVirtualPixels(image, left, top, width, height, &image->exception))) #else if (!(pixels = GetImagePixels(image, left, top, width, height))) #endif return NULL; /* Can't happen if red/green/blue are doubles. */ #ifndef UseHDRI /* Unpack palette. */ if (image->storage_class == PseudoClass) { #ifdef HAVE_GETVIRTUALPIXELS IndexPacket *indexes = (IndexPacket *) GetVirtualIndexQueue(image); #else /* Was GetIndexes(), but that's now deprecated. */ IndexPacket *indexes = AccessMutableIndexes(image); #endif int i; for (i = 0; i < width * height; i++) { IndexPacket x = indexes[i]; if (x < image->colors) { pixels[i].red = image->colormap[x].red; pixels[i].green = image->colormap[x].green; pixels[i].blue = image->colormap[x].blue; } } } #endif /*UseHDRI*/ return pixels; } static int magick_fill_region(VipsRegion *out, void *seq, void *a, void *b, gboolean *stop) { Read *read = (Read *) a; VipsRect *r = &out->valid; int y; for (y = 0; y < r->height; y++) { int top = r->top + y; int frame = top / read->frame_height; int line = top % read->frame_height; PixelPacket *pixels; vips__worker_lock(read->lock); pixels = get_pixels(read->frames[frame], r->left, line, r->width, 1); g_mutex_unlock(read->lock); if (!pixels) { vips_foreign_load_invalidate(read->im); vips_error("magick2vips", "%s", _("unable to read pixels")); return -1; } unpack_pixels(read->im, VIPS_REGION_ADDR(out, r->left, top), pixels, r->width); } return 0; } int vips__magick_read(const char *filename, VipsImage *out, const char *density, int page, int n) { Read *read; #ifdef DEBUG printf("magick2vips: vips__magick_read: %s\n", filename); #endif /*DEBUG*/ if (!(read = read_new(filename, out, NULL, n, density, page, n))) return -1; #ifdef DEBUG printf("magick2vips: calling ReadImage() ...\n"); #endif /*DEBUG*/ read->image = ReadImage(read->image_info, read->exception); if (!read->image) { magick_vips_error("magick2vips", read->exception); vips_error("magick2vips", _("unable to read file \"%s\""), filename); return -1; } if (parse_header(read)) return -1; if (vips_image_generate(out, NULL, magick_fill_region, NULL, read, NULL)) return -1; return 0; } int vips__magick_read_header(const char *filename, VipsImage *out, const char *density, int page, int n) { Read *read; #ifdef DEBUG printf("vips__magick_read_header: %s\n", filename); #endif /*DEBUG*/ if (!(read = read_new(filename, out, NULL, 0, density, page, n))) return -1; #ifdef DEBUG printf("vips__magick_read_header: reading image ...\n"); #endif /*DEBUG*/ /* It would be great if we could PingImage and just read the header, * but sadly many IM coders do not support ping. The critical one for * us is DICOM. TGA also has issues. */ read->image = ReadImage(read->image_info, read->exception); if (!read->image) { magick_vips_error("magick2vips", read->exception); vips_error("magick2vips", _("unable to read file \"%s\""), filename); return -1; } if (parse_header(read)) return -1; if (out->Xsize <= 0 || out->Ysize <= 0) { vips_error("magick2vips", "%s", _("bad image size")); return -1; } /* Just a header read: we can free the read early and save an fd. */ read_free(read); return 0; } int vips__magick_read_buffer(const void *buf, const size_t len, VipsImage *out, const char *density, int page, int n) { Read *read; #ifdef DEBUG printf("magick2vips: vips__magick_read_buffer: %p %zu\n", buf, len); #endif /*DEBUG*/ if (!(read = read_new(NULL, out, buf, len, density, page, n))) return -1; #ifdef DEBUG printf("magick2vips: calling BlobToImage() ...\n"); #endif /*DEBUG*/ read->image = BlobToImage(read->image_info, buf, len, read->exception); if (!read->image) { magick_vips_error("magick2vips", read->exception); vips_error("magick2vips", "%s", _("unable to read buffer")); return -1; } if (parse_header(read)) return -1; if (vips_image_generate(out, NULL, magick_fill_region, NULL, read, NULL)) return -1; return 0; } int vips__magick_read_buffer_header(const void *buf, const size_t len, VipsImage *out, const char *density, int page, int n) { Read *read; #ifdef DEBUG printf("vips__magick_read_buffer_header: %p %zu\n", buf, len); #endif /*DEBUG*/ if (!(read = read_new(NULL, out, buf, len, density, page, n))) return -1; #ifdef DEBUG printf("vips__magick_read_buffer_header: pinging blob ...\n"); #endif /*DEBUG*/ /* It would be great if we could PingBlob and just read the header, * but sadly many IM coders do not support ping well. The critical one * for us is DICOM. TGA also has issues. */ read->image = BlobToImage(read->image_info, buf, len, read->exception); if (!read->image) { magick_vips_error("magick2vips", read->exception); vips_error("magick2vips", "%s", _("unable to ping blob")); return -1; } if (parse_header(read)) return -1; if (out->Xsize <= 0 || out->Ysize <= 0) { vips_error("magick2vips", "%s", _("bad image size")); return -1; } return 0; } #endif /*HAVE_MAGICK6*/ #endif /*ENABLE_MAGICKLOAD*/ libvips-8.15.1/libvips/foreign/magick6load.c000066400000000000000000000207341454007373500207220ustar00rootroot00000000000000/* load with libMagick * * 5/12/11 * - from openslideload.c * 17/1/12 * - remove header-only loads * 11/6/13 * - add @all_frames option, off by default * 14/2/16 * - add @page option, 0 by default * 25/11/16 * - add @n, deprecate @all_frames (just sets n = -1) * 8/9/17 * - don't cache magickload * 21/4/21 kleisauke * - include GObject part from magickload.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #ifdef ENABLE_MAGICKLOAD #ifdef HAVE_MAGICK6 #include "pforeign.h" #include "magick.h" typedef struct _VipsForeignLoadMagick { VipsForeignLoad parent_object; /* Deprecated. Just sets n = -1. */ gboolean all_frames; char *density; /* Load at this resolution */ int page; /* Load this page (frame) */ int n; /* Load this many pages */ } VipsForeignLoadMagick; typedef VipsForeignLoadClass VipsForeignLoadMagickClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignLoadMagick, vips_foreign_load_magick, VIPS_TYPE_FOREIGN_LOAD); static VipsForeignFlags vips_foreign_load_magick_get_flags_filename(const char *filename) { return VIPS_FOREIGN_PARTIAL; } static VipsForeignFlags vips_foreign_load_magick_get_flags(VipsForeignLoad *load) { return VIPS_FOREIGN_PARTIAL; } static void vips_foreign_load_magick_class_init(VipsForeignLoadMagickClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "magickload_base"; object_class->description = _("load with ImageMagick"); /* Don't cache magickload: it can gobble up memory and disc. */ operation_class->flags |= VIPS_OPERATION_NOCACHE; /* *magick is fuzzed, but it's such a huge thing it's safer to * disable it. */ operation_class->flags |= VIPS_OPERATION_UNTRUSTED; /* We need to be well to the back of the queue since vips's * dedicated loaders are usually preferable. */ foreign_class->priority = -100; load_class->get_flags_filename = vips_foreign_load_magick_get_flags_filename; load_class->get_flags = vips_foreign_load_magick_get_flags; VIPS_ARG_STRING(class, "density", 21, _("Density"), _("Canvas resolution for rendering vector formats like SVG"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadMagick, density), NULL); VIPS_ARG_INT(class, "page", 22, _("Page"), _("First page to load"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadMagick, page), 0, 100000, 0); VIPS_ARG_INT(class, "n", 23, _("n"), _("Number of pages to load, -1 for all"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadMagick, n), -1, 100000, 1); VIPS_ARG_BOOL(class, "all_frames", 20, _("All frames"), _("Read all frames from an image"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsForeignLoadMagick, all_frames), FALSE); } static void vips_foreign_load_magick_init(VipsForeignLoadMagick *magick) { magick->n = 1; } typedef struct _VipsForeignLoadMagickFile { VipsForeignLoadMagick parent_object; char *filename; } VipsForeignLoadMagickFile; typedef VipsForeignLoadMagickClass VipsForeignLoadMagickFileClass; G_DEFINE_TYPE(VipsForeignLoadMagickFile, vips_foreign_load_magick_file, vips_foreign_load_magick_get_type()); static gboolean ismagick(const char *filename) { /* Fetch up to the first 100 bytes. Hopefully that'll be enough. */ unsigned char buf[100]; int len; return (len = vips__get_bytes(filename, buf, 100)) > 10 && magick_ismagick(buf, len); } /* Unfortunately, libMagick does not support header-only reads very well. See * * http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=20017 * * Test especially with BMP, GIF, TGA. So we are forced to read the entire * image in the @header() method. */ static int vips_foreign_load_magick_file_header(VipsForeignLoad *load) { VipsForeignLoadMagick *magick = (VipsForeignLoadMagick *) load; VipsForeignLoadMagickFile *magick_file = (VipsForeignLoadMagickFile *) load; if (magick->all_frames) magick->n = -1; if (vips__magick_read(magick_file->filename, load->out, magick->density, magick->page, magick->n)) return -1; VIPS_SETSTR(load->out->filename, magick_file->filename); return 0; } static void vips_foreign_load_magick_file_class_init( VipsForeignLoadMagickFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "magickload"; object_class->description = _("load file with ImageMagick"); load_class->is_a = ismagick; load_class->header = vips_foreign_load_magick_file_header; load_class->load = NULL; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadMagickFile, filename), NULL); } static void vips_foreign_load_magick_file_init(VipsForeignLoadMagickFile *magick_file) { } typedef struct _VipsForeignLoadMagickBuffer { VipsForeignLoadMagick parent_object; VipsArea *buf; } VipsForeignLoadMagickBuffer; typedef VipsForeignLoadMagickClass VipsForeignLoadMagickBufferClass; G_DEFINE_TYPE(VipsForeignLoadMagickBuffer, vips_foreign_load_magick_buffer, vips_foreign_load_magick_get_type()); static gboolean vips_foreign_load_magick_buffer_is_a_buffer(const void *buf, size_t len) { return len > 10 && magick_ismagick((const unsigned char *) buf, len); } /* Unfortunately, libMagick does not support header-only reads very well. See * * http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=20017 * * Test especially with BMP, GIF, TGA. So we are forced to read the entire * image in the @header() method. */ static int vips_foreign_load_magick_buffer_header(VipsForeignLoad *load) { VipsForeignLoadMagick *magick = (VipsForeignLoadMagick *) load; VipsForeignLoadMagickBuffer *magick_buffer = (VipsForeignLoadMagickBuffer *) load; if (magick->all_frames) magick->n = -1; if (vips__magick_read_buffer( magick_buffer->buf->data, magick_buffer->buf->length, load->out, magick->density, magick->page, magick->n)) return -1; return 0; } static void vips_foreign_load_magick_buffer_class_init( VipsForeignLoadMagickBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "magickload_buffer"; object_class->description = _("load buffer with ImageMagick"); load_class->is_a_buffer = vips_foreign_load_magick_buffer_is_a_buffer; load_class->header = vips_foreign_load_magick_buffer_header; load_class->load = NULL; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadMagickBuffer, buf), VIPS_TYPE_BLOB); } static void vips_foreign_load_magick_buffer_init(VipsForeignLoadMagickBuffer *buffer) { } #endif /*HAVE_MAGICK6*/ #endif /*ENABLE_MAGICKLOAD*/ libvips-8.15.1/libvips/foreign/magick7load.c000066400000000000000000000557021454007373500207260ustar00rootroot00000000000000/* load with libMagick7 * * 8/7/16 * - from magickload * 25/11/16 * - add @n, deprecate @all_frames (just sets n = -1) * 24/7/18 * - sniff extra filetypes * 4/2/19 * - add profile (xmp, ipct, etc.) read * 12/11/21 * - set "orientation" * 22/3/23 MathemanFlo * - add bits per sample metadata */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #ifdef ENABLE_MAGICKLOAD #ifdef HAVE_MAGICK7 #include #include "magick.h" typedef struct _VipsForeignLoadMagick7 { VipsForeignLoad parent_object; /* Deprecated. Just sets n = -1. */ gboolean all_frames; char *density; /* Load at this resolution */ int page; /* Load this page (frame) */ int n; /* Load this many pages */ Image *image; ImageInfo *image_info; ExceptionInfo *exception; /* Number of pages in image. */ int n_pages; int n_frames; /* Number of frames we will read */ Image **frames; /* An Image* for each frame */ CacheView **cache_view; /* A CacheView for each frame */ int frame_height; /* Mutex to serialise calls to libMagick during threaded read. */ GMutex *lock; } VipsForeignLoadMagick7; typedef VipsForeignLoadClass VipsForeignLoadMagick7Class; G_DEFINE_ABSTRACT_TYPE(VipsForeignLoadMagick7, vips_foreign_load_magick7, VIPS_TYPE_FOREIGN_LOAD); #ifdef DEBUG static void vips_magick7_print_traits(Image *image) { static const int trait_bits[] = { CopyPixelTrait, UpdatePixelTrait, BlendPixelTrait }; static const char *trait_names[] = { "CopyPixelTrait", "UpdatePixelTrait", "BlendPixelTrait" }; int b; int i; printf("vips_magick7_print_traits: channel traits:\n"); for (b = 0; b < GetPixelChannels(image); b++) { PixelChannel channel = GetPixelChannelChannel(image, b); PixelTrait traits = GetPixelChannelTraits(image, channel); printf("\t%d) ", b); for (i = 0; i < VIPS_NUMBER(trait_bits); i++) if (traits & trait_bits[i]) printf("%s ", trait_names[i]); if (traits == 0) printf("undefined"); printf("\n"); } } static void vips_magick7_print_channel_names(Image *image) { static const int pixel_channels[] = { UndefinedPixelChannel, RedPixelChannel, CyanPixelChannel, GrayPixelChannel, LPixelChannel, LabelPixelChannel, YPixelChannel, aPixelChannel, GreenPixelChannel, MagentaPixelChannel, CbPixelChannel, bPixelChannel, BluePixelChannel, YellowPixelChannel, CrPixelChannel, BlackPixelChannel, AlphaPixelChannel, IndexPixelChannel, ReadMaskPixelChannel, WriteMaskPixelChannel, MetaPixelChannel, IntensityPixelChannel, CompositePixelChannel, SyncPixelChannel }; static const char *pixel_channel_names[] = { "UndefinedPixelChannel", "RedPixelChannel", "CyanPixelChannel", "GrayPixelChannel", "LPixelChannel", "LabelPixelChannel", "YPixelChannel", "aPixelChannel", "GreenPixelChannel", "MagentaPixelChannel", "CbPixelChannel", "bPixelChannel", "BluePixelChannel", "YellowPixelChannel", "CrPixelChannel", "BlackPixelChannel", "AlphaPixelChannel", "IndexPixelChannel", "ReadMaskPixelChannel", "WriteMaskPixelChannel", "MetaPixelChannel", "IntensityPixelChannel", "CompositePixelChannel", "SyncPixelChannel", }; int b; int i; printf("vips_magick7_print_channel_names: channel names:\n"); for (b = 0; b < GetPixelChannels(image); b++) { PixelChannel channel = GetPixelChannelChannel(image, b); printf("\t%d) ", b); for (i = 0; i < VIPS_NUMBER(pixel_channels); i++) /* Don't break on found, many channel names repeat. */ if (channel == pixel_channels[i]) printf("%s ", pixel_channel_names[i]); printf("\n"); } } static void vips_magick7_print_image_type(Image *image) { static const int image_types[] = { UndefinedType, BilevelType, GrayscaleType, GrayscaleAlphaType, PaletteType, PaletteAlphaType, TrueColorType, TrueColorAlphaType, ColorSeparationType, ColorSeparationAlphaType, OptimizeType, PaletteBilevelAlphaType }; static const char *image_type_names[] = { "UndefinedType", "BilevelType", "GrayscaleType", "GrayscaleAlphaType", "PaletteType", "PaletteAlphaType", "TrueColorType", "TrueColorAlphaType", "ColorSeparationType", "ColorSeparationAlphaType", "OptimizeType", "PaletteBilevelAlphaType" }; int i; for (i = 0; i < VIPS_NUMBER(image_types); i++) if (GetImageType(image) == image_types[i]) { printf("\t%s\n", image_type_names[i]); break; } if (i == VIPS_NUMBER(image_types)) printf("\tunknown GetImageType()\n"); } #endif /*DEBUG*/ static VipsForeignFlags vips_foreign_load_magick7_get_flags_filename(const char *filename) { return VIPS_FOREIGN_PARTIAL; } static VipsForeignFlags vips_foreign_load_magick7_get_flags(VipsForeignLoad *load) { return VIPS_FOREIGN_PARTIAL; } static void vips_foreign_load_magick7_dispose(GObject *gobject) { VipsForeignLoadMagick7 *magick7 = (VipsForeignLoadMagick7 *) gobject; int i; #ifdef DEBUG printf("vips_foreign_load_magick7_dispose: %p\n", gobject); #endif /*DEBUG*/ for (i = 0; i < magick7->n_frames; i++) { VIPS_FREEF(DestroyCacheView, magick7->cache_view[i]); } VIPS_FREEF(DestroyImageList, magick7->image); VIPS_FREEF(DestroyImageInfo, magick7->image_info); VIPS_FREE(magick7->frames); VIPS_FREE(magick7->cache_view); VIPS_FREEF(magick_destroy_exception, magick7->exception); VIPS_FREEF(vips_g_mutex_free, magick7->lock); G_OBJECT_CLASS(vips_foreign_load_magick7_parent_class)->dispose(gobject); } static int vips_foreign_load_magick7_build(VipsObject *object) { VipsForeignLoadMagick7 *magick7 = (VipsForeignLoadMagick7 *) object; #ifdef DEBUG printf("vips_foreign_load_magick7_build: %p\n", object); #endif /*DEBUG*/ magick_genesis(); magick7->image_info = CloneImageInfo(NULL); magick7->exception = magick_acquire_exception(); magick7->lock = vips_g_mutex_new(); if (!magick7->image_info) return -1; if (magick7->all_frames) magick7->n = -1; /* Canvas resolution for rendering vector formats like SVG. */ VIPS_SETSTR(magick7->image_info->density, magick7->density); /* When reading DICOM images, we want to ignore any * window_center/_width setting, since it may put pixels outside the * 0-65535 range and lose data. * * These window settings are attached as vips metadata, so our caller * can interpret them if it wants. */ magick_set_image_option(magick7->image_info, "dcm:display-range", "reset"); if (magick7->page > 0) magick_set_number_scenes(magick7->image_info, magick7->page, magick7->n); if (VIPS_OBJECT_CLASS(vips_foreign_load_magick7_parent_class)->build(object)) return -1; return 0; } static void vips_foreign_load_magick7_class_init(VipsForeignLoadMagick7Class *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->dispose = vips_foreign_load_magick7_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "magickload_base"; object_class->description = _("load with ImageMagick7"); object_class->build = vips_foreign_load_magick7_build; /* Don't cache magickload: it can gobble up memory and disc. */ operation_class->flags |= VIPS_OPERATION_NOCACHE; /* *magick is fuzzed, but it's such a huge thing it's safer to * disable it. */ operation_class->flags |= VIPS_OPERATION_UNTRUSTED; /* We need to be well to the back of the queue since vips's * dedicated loaders are usually preferable. */ foreign_class->priority = -100; load_class->get_flags_filename = vips_foreign_load_magick7_get_flags_filename; load_class->get_flags = vips_foreign_load_magick7_get_flags; VIPS_ARG_STRING(class, "density", 20, _("Density"), _("Canvas resolution for rendering vector formats like SVG"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadMagick7, density), NULL); VIPS_ARG_INT(class, "page", 21, _("Page"), _("First page to load"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadMagick7, page), 0, 100000, 0); VIPS_ARG_INT(class, "n", 22, _("n"), _("Number of pages to load, -1 for all"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadMagick7, n), -1, 100000, 1); VIPS_ARG_BOOL(class, "all_frames", 23, _("All frames"), _("Read all frames from an image"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsForeignLoadMagick7, all_frames), FALSE); } static void vips_foreign_load_magick7_init(VipsForeignLoadMagick7 *magick7) { magick7->n = 1; } static void vips_foreign_load_magick7_error(VipsForeignLoadMagick7 *magick7) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(magick7); vips_error(class->nickname, _("Magick: %s %s"), magick7->exception->reason, magick7->exception->description); } static int magick7_get_bands(Image *image) { int bands; int i; /* We skip all index channels. Lots of images can have these, it's not * just the palette ones. */ bands = 0; for (i = 0; i < GetPixelChannels(image); i++) { PixelChannel channel = GetPixelChannelChannel(image, i); if (channel != IndexPixelChannel) bands += 1; } return bands; } static int vips_foreign_load_magick7_parse(VipsForeignLoadMagick7 *magick7, Image *image, VipsImage *out) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(magick7); const char *key; Image *p; #ifdef DEBUG printf("image->depth = %zd\n", image->depth); printf("GetImageType() = %d\n", GetImageType(image)); vips_magick7_print_image_type(image); printf("GetPixelChannels() = %zd\n", GetPixelChannels(image)); printf("image->columns = %zd\n", image->columns); printf("image->rows = %zd\n", image->rows); #endif /*DEBUG*/ /* Ysize updated below once we have worked out how many frames to load. */ out->Coding = VIPS_CODING_NONE; out->Xsize = image->columns; out->Ysize = image->rows; magick7->frame_height = image->rows; out->Bands = magick7_get_bands(image); if (out->Xsize <= 0 || out->Ysize <= 0 || out->Bands <= 0 || out->Xsize >= VIPS_MAX_COORD || out->Ysize >= VIPS_MAX_COORD || out->Bands >= VIPS_MAX_COORD) { vips_error(class->nickname, _("bad image dimensions %d x %d pixels, %d bands"), out->Xsize, out->Ysize, out->Bands); return -1; } /* Depth can be 'fractional'. You'd think we should use * GetImageDepth() but that seems to compute something very complex. */ out->BandFmt = -1; if (image->depth >= 1 && image->depth <= 8) out->BandFmt = VIPS_FORMAT_UCHAR; if (image->depth >= 9 && image->depth <= 16) out->BandFmt = VIPS_FORMAT_USHORT; if (image->depth == 32) out->BandFmt = VIPS_FORMAT_FLOAT; if (image->depth == 64) out->BandFmt = VIPS_FORMAT_DOUBLE; if (out->BandFmt == -1) { vips_error(class->nickname, _("unsupported bit depth %zd"), image->depth); return -1; } switch (image->units) { case PixelsPerInchResolution: out->Xres = image->resolution.x / 25.4; out->Yres = image->resolution.y / 25.4; vips_image_set_string(out, VIPS_META_RESOLUTION_UNIT, "in"); break; case PixelsPerCentimeterResolution: out->Xres = image->resolution.x / 10.0; out->Yres = image->resolution.y / 10.0; vips_image_set_string(out, VIPS_META_RESOLUTION_UNIT, "cm"); break; default: /* Things like GIF have no resolution info. */ out->Xres = 1.0; out->Yres = 1.0; break; } switch (image->colorspace) { case GRAYColorspace: if (out->BandFmt == VIPS_FORMAT_USHORT) out->Type = VIPS_INTERPRETATION_GREY16; else out->Type = VIPS_INTERPRETATION_B_W; break; case sRGBColorspace: case RGBColorspace: if (out->BandFmt == VIPS_FORMAT_USHORT) out->Type = VIPS_INTERPRETATION_RGB16; else out->Type = VIPS_INTERPRETATION_sRGB; break; case CMYKColorspace: out->Type = VIPS_INTERPRETATION_CMYK; break; default: out->Type = VIPS_INTERPRETATION_ERROR; break; } // revise the interpretation if it seems crazy out->Type = vips_image_guess_interpretation(out); if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_SMALLTILE, NULL)) return -1; /* Get all the string metadata. */ ResetImagePropertyIterator(image); while ((key = GetNextImageProperty(image))) { char name_text[256]; VipsBuf name = VIPS_BUF_STATIC(name_text); const char *value; value = GetImageProperty(image, key, magick7->exception); if (!value) { vips_foreign_load_magick7_error(magick7); return -1; } vips_buf_appendf(&name, "magick-%s", key); vips_image_set_string(out, vips_buf_all(&name), value); } /* Set vips metadata from ImageMagick profiles. */ if (magick_set_vips_profile(out, image)) return -1; /* Something like "BMP". */ if (strlen(magick7->image->magick) > 0) vips_image_set_string(out, "magick-format", magick7->image->magick); magick7->n_pages = GetImageListLength(GetFirstImageInList(image)); #ifdef DEBUG printf("image has %d pages\n", magick7->n_pages); #endif /*DEBUG*/ /* Do we have a set of equal-sized frames? Append them. FIXME ... there must be an attribute somewhere from dicom read which says this is a volumetric image */ magick7->n_frames = 0; for (p = image; p; (p = GetNextImageInList(p))) { if (p->columns != (unsigned int) out->Xsize || p->rows != (unsigned int) out->Ysize || magick7_get_bands(p) != out->Bands || p->depth != image->depth) { #ifdef DEBUG printf("frame %d differs\n", magick7->n_frames); printf("%zdx%zd, %d bands\n", p->columns, p->rows, magick7_get_bands(p)); printf("first frame is %dx%d, %d bands\n", out->Xsize, out->Ysize, out->Bands); #endif /*DEBUG*/ break; } magick7->n_frames += 1; } if (p) /* Nope ... just do the first image in the list. */ magick7->n_frames = 1; #ifdef DEBUG printf("will read %d frames\n", magick7->n_frames); #endif /*DEBUG*/ if (magick7->n != -1) magick7->n_frames = VIPS_MIN(magick7->n_frames, magick7->n); /* So we can finally set the height. */ if (magick7->n_frames > 1) { vips_image_set_int(out, VIPS_META_PAGE_HEIGHT, out->Ysize); out->Ysize *= magick7->n_frames; } vips_image_set_int(out, VIPS_META_N_PAGES, magick7->n_pages); vips_image_set_int(out, VIPS_META_ORIENTATION, VIPS_CLIP(1, image->orientation, 8)); vips_image_set_int(out, VIPS_META_BITS_PER_SAMPLE, image->depth); return 0; } /* We don't bother with GetPixelReadMask(), assume it's everywhere. Don't * bother with traits, assume that's always updated. * * We do skip index channels. Palette images add extra index channels * containing the index value from the file before colourmap lookup. */ #define UNPACK(TYPE) \ { \ TYPE *restrict tq = (TYPE *) q; \ int x; \ int b; \ \ for (x = 0; x < r->width; x++) { \ for (b = 0; b < GetPixelChannels(image); b++) { \ PixelChannel channel = \ GetPixelChannelChannel(image, b); \ \ if (channel != IndexPixelChannel) \ *tq++ = p[b]; \ } \ \ p += GetPixelChannels(image); \ } \ } static int vips_foreign_load_magick7_fill_region(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsForeignLoadMagick7 *magick7 = (VipsForeignLoadMagick7 *) a; VipsRect *r = &out_region->valid; VipsImage *im = out_region->im; int y; for (y = 0; y < r->height; y++) { int top = r->top + y; int frame = top / magick7->frame_height; int line = top % magick7->frame_height; Image *image = magick7->frames[frame]; Quantum *restrict p; VipsPel *restrict q; vips__worker_lock(magick7->lock); p = GetCacheViewAuthenticPixels(magick7->cache_view[frame], r->left, line, r->width, 1, magick7->exception); g_mutex_unlock(magick7->lock); if (!p) /* This can happen if, for example, some frames of a * gif are shorter than others. It's not always * an error. */ continue; q = VIPS_REGION_ADDR(out_region, r->left, top); switch (im->BandFmt) { case VIPS_FORMAT_UCHAR: UNPACK(unsigned char); break; case VIPS_FORMAT_USHORT: UNPACK(unsigned short); break; case VIPS_FORMAT_FLOAT: UNPACK(float); break; case VIPS_FORMAT_DOUBLE: UNPACK(double); break; default: g_assert_not_reached(); } } return 0; } static int vips_foreign_load_magick7_load(VipsForeignLoadMagick7 *magick7) { VipsForeignLoad *load = (VipsForeignLoad *) magick7; Image *p; int i; #ifdef DEBUG printf("vips_foreign_load_magick7_load: %p\n", magick7); #endif /*DEBUG*/ if (vips_foreign_load_magick7_parse(magick7, magick7->image, load->out)) return -1; /* Record frame pointers. */ g_assert(!magick7->frames); if (!(magick7->frames = VIPS_ARRAY(NULL, magick7->n_frames, Image *))) return -1; p = magick7->image; for (i = 0; i < magick7->n_frames; i++) { magick7->frames[i] = p; p = GetNextImageInList(p); } /* And a cache_view for each frame. */ g_assert(!magick7->cache_view); if (!(magick7->cache_view = VIPS_ARRAY(NULL, magick7->n_frames, CacheView *))) return -1; for (i = 0; i < magick7->n_frames; i++) { magick7->cache_view[i] = AcquireAuthenticCacheView( magick7->frames[i], magick7->exception); } #ifdef DEBUG /* Only display the traits from frame0, they should all be the same. */ vips_magick7_print_traits(magick7->frames[0]); vips_magick7_print_channel_names(magick7->frames[0]); #endif /*DEBUG*/ if (vips_image_generate(load->out, NULL, vips_foreign_load_magick7_fill_region, NULL, magick7, NULL)) return -1; return 0; } typedef struct _VipsForeignLoadMagick7File { VipsForeignLoadMagick7 parent_object; char *filename; } VipsForeignLoadMagick7File; typedef VipsForeignLoadMagick7Class VipsForeignLoadMagick7FileClass; G_DEFINE_TYPE(VipsForeignLoadMagick7File, vips_foreign_load_magick7_file, vips_foreign_load_magick7_get_type()); static gboolean ismagick7(const char *filename) { /* Fetch up to the first 100 bytes. Hopefully that'll be enough. */ unsigned char buf[100]; int len; return (len = vips__get_bytes(filename, buf, 100)) > 10 && magick_ismagick(buf, len); } static int vips_foreign_load_magick7_file_header(VipsForeignLoad *load) { VipsForeignLoadMagick7 *magick7 = (VipsForeignLoadMagick7 *) load; VipsForeignLoadMagick7File *file = (VipsForeignLoadMagick7File *) load; #ifdef DEBUG printf("vips_foreign_load_magick7_file_header: %p\n", load); #endif /*DEBUG*/ vips_strncpy(magick7->image_info->filename, file->filename, MagickPathExtent); magick_sniff_file(magick7->image_info, file->filename); /* It would be great if we could PingImage and just read the header, * but sadly many IM coders do not support ping. The critical one for * us is DICOM. * * We have to read the whole image in _header. */ magick7->image = ReadImage(magick7->image_info, magick7->exception); if (!magick7->image) { vips_foreign_load_magick7_error(magick7); return -1; } if (vips_foreign_load_magick7_load(magick7)) return -1; VIPS_SETSTR(load->out->filename, file->filename); return 0; } static void vips_foreign_load_magick7_file_class_init( VipsForeignLoadMagick7FileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "magickload"; object_class->description = _("load file with ImageMagick7"); load_class->is_a = ismagick7; load_class->header = vips_foreign_load_magick7_file_header; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadMagick7File, filename), NULL); } static void vips_foreign_load_magick7_file_init(VipsForeignLoadMagick7File *magick7_file) { } typedef struct _VipsForeignLoadMagick7Buffer { VipsForeignLoadMagick7 parent_object; VipsArea *buf; } VipsForeignLoadMagick7Buffer; typedef VipsForeignLoadMagick7Class VipsForeignLoadMagick7BufferClass; G_DEFINE_TYPE(VipsForeignLoadMagick7Buffer, vips_foreign_load_magick7_buffer, vips_foreign_load_magick7_get_type()); static gboolean vips_foreign_load_magick7_buffer_is_a_buffer(const void *buf, size_t len) { return len > 10 && magick_ismagick((const unsigned char *) buf, len); } static int vips_foreign_load_magick7_buffer_header(VipsForeignLoad *load) { VipsForeignLoadMagick7 *magick7 = (VipsForeignLoadMagick7 *) load; VipsForeignLoadMagick7Buffer *magick7_buffer = (VipsForeignLoadMagick7Buffer *) load; #ifdef DEBUG printf("vips_foreign_load_magick7_buffer_header: %p\n", load); #endif /*DEBUG*/ /* It would be great if we could PingBlob and just read the header, * but sadly many IM coders do not support ping. The critical one for * us is DICOM. * * We have to read the whole image in _header. */ magick_sniff_bytes(magick7->image_info, magick7_buffer->buf->data, magick7_buffer->buf->length); magick7->image = BlobToImage(magick7->image_info, magick7_buffer->buf->data, magick7_buffer->buf->length, magick7->exception); if (!magick7->image) { vips_foreign_load_magick7_error(magick7); return -1; } if (vips_foreign_load_magick7_load(magick7)) return -1; return 0; } static void vips_foreign_load_magick7_buffer_class_init( VipsForeignLoadMagick7BufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "magickload_buffer"; object_class->description = _("load buffer with ImageMagick7"); load_class->is_a_buffer = vips_foreign_load_magick7_buffer_is_a_buffer; load_class->header = vips_foreign_load_magick7_buffer_header; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadMagick7Buffer, buf), VIPS_TYPE_BLOB); } static void vips_foreign_load_magick7_buffer_init(VipsForeignLoadMagick7Buffer *buffer) { } #endif /*HAVE_MAGICK7*/ #endif /*ENABLE_MAGICKLOAD*/ libvips-8.15.1/libvips/foreign/magickload.c000066400000000000000000000102231454007373500206240ustar00rootroot00000000000000/* load with libMagick * * 5/12/11 * - from openslideload.c * 17/1/12 * - remove header-only loads * 11/6/13 * - add @all_frames option, off by default * 14/2/16 * - add @page option, 0 by default * 25/11/16 * - add @n, deprecate @all_frames (just sets n = -1) * 8/9/17 * - don't cache magickload * 21/4/21 kleisauke * - move GObject part to magick6load.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include /** * vips_magickload: * @filename: file to load * @out: (out): decompressed image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @page: %gint, load from this page * * @n: %gint, load this many pages * * @density: string, canvas resolution for rendering vector formats like SVG * * Read in an image using libMagick, the ImageMagick library. This library can * read more than 80 file formats, including SVG, BMP, EPS, DICOM and many * others. * The reader can handle any ImageMagick image, including the float and double * formats. It will work with any quantum size, including HDR. Any metadata * attached to the libMagick image is copied on to the VIPS image. * * The reader should also work with most versions of GraphicsMagick. See the * "--with-magickpackage" configure option. * * The file format is usually guessed from the filename suffix, or sniffed * from the file contents. * * Normally it will only load the first image in a many-image sequence (such * as a GIF or a PDF). Use @page and @n to set the start page and number of * pages to load. Set @n to -1 to load all pages from @page onwards. * * @density is "WxH" in DPI, e.g. "600x300" or "600" (default is "72x72"). See * the [density * docs](http://www.imagemagick.org/script/command-line-options.php#density) * on the imagemagick website. * * See also: vips_image_new_from_file(). * * Returns: 0 on success, -1 on error. */ int vips_magickload(const char *filename, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("magickload", ap, filename, out); va_end(ap); return result; } /** * vips_magickload_buffer: * @buf: (array length=len) (element-type guint8): memory area to load * @len: size of memory area * @out: (out): image to write * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @page: %gint, load from this page * * @n: %gint, load this many pages * * @density: string, canvas resolution for rendering vector formats like SVG * * Read an image memory block using libMagick into a VIPS image. Exactly as * vips_magickload(), but read from a memory source. * * You must not free the buffer while @out is active. The * #VipsObject::postclose signal on @out is a good place to free. * * See also: vips_magickload(). * * Returns: 0 on success, -1 on error. */ int vips_magickload_buffer(void *buf, size_t len, VipsImage **out, ...) { va_list ap; VipsBlob *blob; int result; /* We don't take a copy of the data or free it. */ blob = vips_blob_new(NULL, buf, len); va_start(ap, out); result = vips_call_split("magickload_buffer", ap, blob, out); va_end(ap); vips_area_unref(VIPS_AREA(blob)); return result; } libvips-8.15.1/libvips/foreign/magicksave.c000066400000000000000000000104031454007373500206430ustar00rootroot00000000000000/* save with libMagick * * 22/12/17 dlemstra * 6/2/19 DarthSim * - fix GraphicsMagick support * 17/2/19 * - support ICC, XMP, EXIF, IPTC metadata * - write with a single call to vips_sink_disc() * 29/6/19 * - support "strip" option * 6/7/19 [deftomat] * - support array of delays * 5/8/19 DarthSim * - support GIF optimization * 21/4/21 kleisauke * - move GObject part to vips2magick.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include /** * vips_magicksave: (method) * @in: image to save * @filename: file to write to * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @quality: %gint, quality factor * * @format: %gchararray, format to save as * * @optimize_gif_frames: %gboolean, apply GIF frames optimization * * @optimize_gif_transparency: %gboolean, apply GIF transparency optimization * * @bitdepth: %gint, number of bits per pixel * * Write an image using libMagick. * * Use @quality to set the quality factor. Default 0. * * Use @format to explicitly set the save format, for example, "BMP". Otherwise * the format is guessed from the filename suffix. * * If @optimize_gif_frames is set, GIF frames are cropped to the smallest size * while preserving the results of the GIF animation. This takes some time for * computation but saves some time on encoding and produces smaller files in * some cases. * * If @optimize_gif_transparency is set, pixels that don't change the image * through animation are made transparent. This takes some time for computation * but saves some time on encoding and produces smaller files in some cases. * * @bitdepth specifies the number of bits per pixel. The image will be quantized * and dithered if the value is within the valid range (1 to 8). * * See also: vips_magicksave_buffer(), vips_magickload(). * * Returns: 0 on success, -1 on error. */ int vips_magicksave(VipsImage *in, const char *filename, ...) { va_list ap; int result; va_start(ap, filename); result = vips_call_split("magicksave", ap, in, filename); va_end(ap); return result; } /** * vips_magicksave_buffer: (method) * @in: image to save * @buf: (array length=len) (element-type guint8): return output buffer here * @len: (type gsize): return output length here * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @quality: %gint, quality factor * * @format: %gchararray, format to save as * * @optimize_gif_frames: %gboolean, apply GIF frames optimization * * @optimize_gif_transparency: %gboolean, apply GIF transparency optimization * * @bitdepth: %gint, number of bits per pixel * * As vips_magicksave(), but save to a memory buffer. * * The address of the buffer is returned in @obuf, the length of the buffer in * @olen. You are responsible for freeing the buffer with g_free() when you * are done with it. * * See also: vips_magicksave(), vips_image_write_to_file(). * * Returns: 0 on success, -1 on error. */ int vips_magicksave_buffer(VipsImage *in, void **buf, size_t *len, ...) { va_list ap; VipsArea *area; int result; area = NULL; va_start(ap, len); result = vips_call_split("magicksave_buffer", ap, in, &area); va_end(ap); if (!result && area) { if (buf) { *buf = area->data; area->free_fn = NULL; } if (len) *len = area->length; vips_area_unref(area); } return result; } libvips-8.15.1/libvips/foreign/matlab.c000066400000000000000000000153461454007373500200040ustar00rootroot00000000000000/* Read matlab save files with libmatio * * 4/8/09 * - transpose on load, assemble planes into bands (thanks Mikhail) * 20/12/11 * - reworked as some fns ready for new-style classes * 21/8/14 * - swap width/height * - set interpretation to rgb16 etc. * 16/2/16 * - more specific is_a test */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Remaining issues: + it will not do complex images + it will not handle sparse matrices + it loads the first variable in the file with between 1 and 3 dimensions, is this sensible behaviour? + load only, no save */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #ifdef HAVE_MATIO #include #include #include #include #include #include #include "pforeign.h" /* What we track during a Mat-file read. */ typedef struct { char *filename; VipsImage *out; mat_t *mat; matvar_t *var; } Read; static void read_destroy(Read *read) { VIPS_FREE(read->filename); VIPS_FREEF(Mat_VarFree, read->var); VIPS_FREEF(Mat_Close, read->mat); g_free(read); } static Read * read_new(const char *filename, VipsImage *out) { Read *read; if (!(read = VIPS_NEW(NULL, Read))) return NULL; read->filename = vips_strdup(NULL, filename); read->out = out; read->mat = NULL; read->var = NULL; if (!(read->mat = Mat_Open(filename, MAT_ACC_RDONLY))) { vips_error("mat2vips", _("unable to open \"%s\""), filename); read_destroy(read); return NULL; } for (;;) { if (!(read->var = Mat_VarReadNextInfo(read->mat))) { vips_error("mat2vips", _("no matrix variables in \"%s\""), filename); read_destroy(read); return NULL; } #ifdef DEBUG printf("mat2vips: seen:\n"); printf("var->name == %s\n", read->var->name); printf("var->class_type == %d\n", read->var->class_type); printf("var->rank == %d\n", read->var->rank); #endif /*DEBUG*/ /* Vector to colour image is OK for us. */ if (read->var->rank >= 1 && read->var->rank <= 3) break; VIPS_FREEF(Mat_VarFree, read->var); } return read; } /* Matlab classes -> VIPS band formats. */ static int mat2vips_formats[][2] = { { MAT_C_UINT8, VIPS_FORMAT_UCHAR }, { MAT_C_INT8, VIPS_FORMAT_CHAR }, { MAT_C_UINT16, VIPS_FORMAT_USHORT }, { MAT_C_INT16, VIPS_FORMAT_SHORT }, { MAT_C_UINT32, VIPS_FORMAT_UINT }, { MAT_C_INT32, VIPS_FORMAT_INT }, { MAT_C_SINGLE, VIPS_FORMAT_FLOAT }, { MAT_C_DOUBLE, VIPS_FORMAT_DOUBLE } }; /* Pick an interpretation. */ static VipsInterpretation mat2vips_pick_interpretation(int bands, VipsBandFormat format) { if (bands == 3 && vips_band_format_is8bit(format)) return VIPS_INTERPRETATION_sRGB; if (bands == 3 && (format == VIPS_FORMAT_USHORT || format == VIPS_FORMAT_SHORT)) return VIPS_INTERPRETATION_RGB16; if (bands == 1 && (format == VIPS_FORMAT_USHORT || format == VIPS_FORMAT_SHORT)) return VIPS_INTERPRETATION_GREY16; if (bands > 1) return VIPS_INTERPRETATION_MULTIBAND; return VIPS_INTERPRETATION_MULTIBAND; } static int mat2vips_get_header(matvar_t *var, VipsImage *im) { int width, height, bands; VipsBandFormat format; VipsInterpretation interpretation; int i; width = 1; bands = 1; switch (var->rank) { case 3: bands = var->dims[2]; case 2: width = var->dims[1]; case 1: height = var->dims[0]; break; default: vips_error("mat2vips", _("unsupported rank %d\n"), var->rank); return -1; } for (i = 0; i < VIPS_NUMBER(mat2vips_formats); i++) if (mat2vips_formats[i][0] == var->class_type) break; if (i == VIPS_NUMBER(mat2vips_formats)) { vips_error("mat2vips", _("unsupported class type %d\n"), var->class_type); return -1; } format = mat2vips_formats[i][1]; interpretation = mat2vips_pick_interpretation(bands, format); vips_image_init_fields(im, width, height, bands, format, VIPS_CODING_NONE, interpretation, 1.0, 1.0); /* We read to a huge memory area. */ if (vips_image_pipelinev(im, VIPS_DEMAND_STYLE_ANY, NULL)) return -1; return 0; } int vips__mat_header(const char *filename, VipsImage *out) { Read *read; #ifdef DEBUG printf("mat2vips_header: reading \"%s\"\n", filename); #endif /*DEBUG*/ if (!(read = read_new(filename, out))) return -1; if (mat2vips_get_header(read->var, read->out)) { read_destroy(read); return -1; } read_destroy(read); return 0; } static int mat2vips_get_data(mat_t *mat, matvar_t *var, VipsImage *im) { int y; VipsPel *buffer; const int es = VIPS_IMAGE_SIZEOF_ELEMENT(im); /* Matlab images are plane-separate, so we have to assemble bands in * image-size chunks. */ const guint64 is = es * VIPS_IMAGE_N_PELS(im); if (Mat_VarReadDataAll(mat, var)) { vips_error("mat2vips", "%s", _("Mat_VarReadDataAll failed")); return -1; } /* Matlab images are in columns, so we have to transpose into * scanlines with this buffer. */ if (!(buffer = VIPS_ARRAY(im, VIPS_IMAGE_SIZEOF_LINE(im), VipsPel))) return -1; for (y = 0; y < im->Ysize; y++) { const VipsPel *p = (VipsPel *) var->data + y * es; int x; VipsPel *q; q = buffer; for (x = 0; x < im->Xsize; x++) { int b; for (b = 0; b < im->Bands; b++) { const VipsPel *p2 = p + b * is; int z; for (z = 0; z < es; z++) q[z] = p2[z]; q += es; } p += es * im->Ysize; } if (vips_image_write_line(im, y, buffer)) return -1; } return 0; } int vips__mat_load(const char *filename, VipsImage *out) { Read *read; #ifdef DEBUG printf("mat2vips: reading \"%s\"\n", filename); #endif /*DEBUG*/ if (!(read = read_new(filename, out))) return -1; if (mat2vips_get_header(read->var, read->out) || mat2vips_get_data(read->mat, read->var, read->out)) { read_destroy(read); return -1; } read_destroy(read); return 0; } int vips__mat_ismat(const char *filename) { unsigned char buf[15]; if (vips__get_bytes(filename, buf, 10) == 10 && vips_isprefix("MATLAB 5.0", (char *) buf)) return 1; return 0; } const char *vips__mat_suffs[] = { ".mat", NULL }; #endif /*HAVE_MATIO*/ libvips-8.15.1/libvips/foreign/matload.c000066400000000000000000000102351454007373500201550ustar00rootroot00000000000000/* load matlab from a file * * 5/12/11 * - from tiffload.c * 3/7/13 * - lower priority to reduce segvs from Mat_Open() */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #ifdef HAVE_MATIO #include "pforeign.h" typedef struct _VipsForeignLoadMat { VipsForeignLoad parent_object; /* Filename for load. */ char *filename; } VipsForeignLoadMat; typedef VipsForeignLoadClass VipsForeignLoadMatClass; G_DEFINE_TYPE(VipsForeignLoadMat, vips_foreign_load_mat, VIPS_TYPE_FOREIGN_LOAD); static VipsForeignFlags vips_foreign_load_mat_get_flags_filename(const char *filename) { return 0; } static VipsForeignFlags vips_foreign_load_mat_get_flags(VipsForeignLoad *load) { VipsForeignLoadMat *mat = (VipsForeignLoadMat *) load; return vips_foreign_load_mat_get_flags_filename(mat->filename); } static int vips_foreign_load_mat_header(VipsForeignLoad *load) { VipsForeignLoadMat *mat = (VipsForeignLoadMat *) load; if (vips__mat_header(mat->filename, load->out)) return -1; VIPS_SETSTR(load->out->filename, mat->filename); return 0; } static int vips_foreign_load_mat_load(VipsForeignLoad *load) { VipsForeignLoadMat *mat = (VipsForeignLoadMat *) load; if (vips__mat_load(mat->filename, load->real)) return -1; return 0; } static void vips_foreign_load_mat_class_init(VipsForeignLoadMatClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "matload"; object_class->description = _("load mat from file"); /* libmatio is fuzzed, but not by us. */ operation_class->flags |= VIPS_OPERATION_UNTRUSTED; foreign_class->suffs = vips__mat_suffs; load_class->is_a = vips__mat_ismat; load_class->get_flags_filename = vips_foreign_load_mat_get_flags_filename; load_class->get_flags = vips_foreign_load_mat_get_flags; load_class->header = vips_foreign_load_mat_header; load_class->load = vips_foreign_load_mat_load; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadMat, filename), NULL); } static void vips_foreign_load_mat_init(VipsForeignLoadMat *mat) { } #endif /*HAVE_MATIO*/ /** * vips_matload: * @filename: file to load * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Read a Matlab save file into a VIPS image. * * This operation searches the save * file for the first array variable with between 1 and 3 dimensions and loads * it as an image. It will not handle complex images. It does not handle * sparse matrices. * * See also: vips_image_new_from_file(). * * Returns: 0 on success, -1 on error. */ int vips_matload(const char *filename, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("matload", ap, filename, out); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/matrixload.c000066400000000000000000000310361454007373500207020ustar00rootroot00000000000000/* load matrix from a file * * 5/12/11 * - from csvload.c * 22/2/20 * - rewrite for source API */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pforeign.h" typedef struct _VipsForeignLoadMatrix { VipsForeignLoad parent_object; /* Set by subclasses. */ VipsSource *source; /* Buffered source. */ VipsSbuf *sbuf; /* A line of pixels. */ double *linebuf; } VipsForeignLoadMatrix; typedef VipsForeignLoadClass VipsForeignLoadMatrixClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignLoadMatrix, vips_foreign_load_matrix, VIPS_TYPE_FOREIGN_LOAD); static void vips_foreign_load_matrix_dispose(GObject *gobject) { VipsForeignLoadMatrix *matrix = (VipsForeignLoadMatrix *) gobject; VIPS_UNREF(matrix->source); VIPS_UNREF(matrix->sbuf); VIPS_FREE(matrix->linebuf); G_OBJECT_CLASS(vips_foreign_load_matrix_parent_class)->dispose(gobject); } static int vips_foreign_load_matrix_build(VipsObject *object) { VipsForeignLoadMatrix *matrix = (VipsForeignLoadMatrix *) object; if (!(matrix->sbuf = vips_sbuf_new_from_source(matrix->source))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_matrix_parent_class)->build(object)) return -1; return 0; } static VipsForeignFlags vips_foreign_load_matrix_get_flags(VipsForeignLoad *load) { return 0; } /* Parse a header line. Two numbers for width and height, and two optional * numbers for scale and offset. * * We can have scale and no offset, in which case we assume offset = 0. */ static int parse_matrix_header(char *line, int *width, int *height, double *scale, double *offset) { double header[4]; char *p, *q; int i; for (i = 0, p = line; (q = vips_break_token(p, " \t")) && i < 4; i++, p = q) if (vips_strtod(p, &header[i])) { vips_error("matload", _("bad number \"%s\""), p); return -1; } if (i < 4) header[3] = 0.0; if (i < 3) header[2] = 1.0; if (i < 2) { vips_error("matload", "%s", _("no width / height")); return -1; } if (VIPS_FLOOR(header[0]) != header[0] || VIPS_FLOOR(header[1]) != header[1]) { vips_error("mask2vips", "%s", _("width / height not int")); return -1; } /* Width / height can be 65536 for a 16-bit LUT, for example. */ *width = header[0]; *height = header[1]; if (*width <= 0 || *width > 100000 || *height <= 0 || *height > 100000) { vips_error("mask2vips", "%s", _("width / height out of range")); return -1; } if (header[2] == 0.0) { vips_error("mask2vips", "%s", _("zero scale")); return -1; } *scale = header[2]; *offset = header[3]; return 0; } static int vips_foreign_load_matrix_header(VipsForeignLoad *load) { VipsForeignLoadMatrix *matrix = (VipsForeignLoadMatrix *) load; char *line; int width; int height; double scale; double offset; int result; /* Rewind. */ vips_sbuf_unbuffer(matrix->sbuf); if (vips_source_rewind(matrix->source)) return -1; line = vips_sbuf_get_line_copy(matrix->sbuf); result = parse_matrix_header(line, &width, &height, &scale, &offset); g_free(line); if (result) return -1; if (vips_image_pipelinev(load->out, VIPS_DEMAND_STYLE_THINSTRIP, NULL)) return -1; vips_image_init_fields(load->out, width, height, 1, VIPS_FORMAT_DOUBLE, VIPS_CODING_NONE, VIPS_INTERPRETATION_B_W, 1.0, 1.0); vips_image_set_double(load->out, "scale", scale); vips_image_set_double(load->out, "offset", offset); VIPS_SETSTR(load->out->filename, vips_connection_filename(VIPS_CONNECTION(matrix->source))); if (!(matrix->linebuf = VIPS_ARRAY(NULL, width, double))) return -1; return 0; } static int vips_foreign_load_matrix_load(VipsForeignLoad *load) { VipsForeignLoadMatrix *matrix = (VipsForeignLoadMatrix *) load; VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load); int x, y; if (vips_image_pipelinev(load->real, VIPS_DEMAND_STYLE_THINSTRIP, NULL)) return -1; vips_image_init_fields(load->real, load->out->Xsize, load->out->Ysize, 1, VIPS_FORMAT_DOUBLE, VIPS_CODING_NONE, VIPS_INTERPRETATION_B_W, 1.0, 1.0); for (y = 0; y < load->real->Ysize; y++) { char *line; char *p, *q; line = vips_sbuf_get_line_copy(matrix->sbuf); for (x = 0, p = line; (q = vips_break_token(p, " \t")) && x < load->out->Xsize; x++, p = q) if (vips_strtod(p, &matrix->linebuf[x])) { vips_error(class->nickname, _("bad number \"%s\""), p); g_free(line); return -1; } g_free(line); if (x != load->out->Xsize) { vips_error(class->nickname, _("line %d too short"), y); return -1; } if (vips_image_write_line(load->real, y, (VipsPel *) matrix->linebuf)) return -1; } return 0; } static void vips_foreign_load_matrix_class_init(VipsForeignLoadMatrixClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->dispose = vips_foreign_load_matrix_dispose; object_class->nickname = "matrixload_base"; object_class->description = _("load matrix"); object_class->build = vips_foreign_load_matrix_build; load_class->get_flags = vips_foreign_load_matrix_get_flags; load_class->header = vips_foreign_load_matrix_header; load_class->load = vips_foreign_load_matrix_load; } static void vips_foreign_load_matrix_init(VipsForeignLoadMatrix *matrix) { } typedef struct _VipsForeignLoadMatrixFile { VipsForeignLoadMatrix parent_object; /* Filename for load. */ char *filename; } VipsForeignLoadMatrixFile; typedef VipsForeignLoadMatrixClass VipsForeignLoadMatrixFileClass; G_DEFINE_TYPE(VipsForeignLoadMatrixFile, vips_foreign_load_matrix_file, vips_foreign_load_matrix_get_type()); static VipsForeignFlags vips_foreign_load_matrix_file_get_flags_filename(const char *filename) { return 0; } static int vips_foreign_load_matrix_file_build(VipsObject *object) { VipsForeignLoadMatrix *matrix = (VipsForeignLoadMatrix *) object; VipsForeignLoadMatrixFile *file = (VipsForeignLoadMatrixFile *) object; if (file->filename) if (!(matrix->source = vips_source_new_from_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_matrix_file_parent_class) ->build(object)) return -1; return 0; } static const char *vips_foreign_load_matrix_suffs[] = { ".mat", NULL }; static gboolean vips_foreign_load_matrix_file_is_a(const char *filename) { unsigned char line[80]; guint64 bytes; int width; int height; double scale; double offset; int result; if ((bytes = vips__get_bytes(filename, line, 79)) <= 0) return FALSE; line[bytes] = '\0'; vips_error_freeze(); result = parse_matrix_header((char *) line, &width, &height, &scale, &offset); vips_error_thaw(); return result == 0; } static void vips_foreign_load_matrix_file_class_init( VipsForeignLoadMatrixFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "matrixload"; object_class->build = vips_foreign_load_matrix_file_build; foreign_class->suffs = vips_foreign_load_matrix_suffs; load_class->is_a = vips_foreign_load_matrix_file_is_a; load_class->get_flags_filename = vips_foreign_load_matrix_file_get_flags_filename; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadMatrixFile, filename), NULL); } static void vips_foreign_load_matrix_file_init(VipsForeignLoadMatrixFile *file) { } typedef struct _VipsForeignLoadMatrixSource { VipsForeignLoadMatrix parent_object; VipsSource *source; } VipsForeignLoadMatrixSource; typedef VipsForeignLoadMatrixClass VipsForeignLoadMatrixSourceClass; G_DEFINE_TYPE(VipsForeignLoadMatrixSource, vips_foreign_load_matrix_source, vips_foreign_load_matrix_get_type()); static int vips_foreign_load_matrix_source_build(VipsObject *object) { VipsForeignLoadMatrix *matrix = (VipsForeignLoadMatrix *) object; VipsForeignLoadMatrixSource *source = (VipsForeignLoadMatrixSource *) object; if (source->source) { matrix->source = source->source; g_object_ref(matrix->source); } if (VIPS_OBJECT_CLASS(vips_foreign_load_matrix_source_parent_class) ->build(object)) return -1; return 0; } static int vips_foreign_load_matrix_source_is_a_source(VipsSource *source) { unsigned char *data; gint64 bytes_read; char line[80]; int width; int height; double scale; double offset; int result; if ((bytes_read = vips_source_sniff_at_most(source, &data, 79)) <= 0) return FALSE; vips_strncpy(line, (const char *) data, 80); vips_error_freeze(); result = parse_matrix_header(line, &width, &height, &scale, &offset); vips_error_thaw(); return result == 0; } static void vips_foreign_load_matrix_source_class_init( VipsForeignLoadMatrixFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "matrixload_source"; object_class->build = vips_foreign_load_matrix_source_build; operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_matrix_source_is_a_source; VIPS_ARG_OBJECT(class, "source", 1, _("Source"), _("Source to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadMatrixSource, source), VIPS_TYPE_SOURCE); } static void vips_foreign_load_matrix_source_init(VipsForeignLoadMatrixSource *source) { } /** * vips_matrixload: * @filename: file to load * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Reads a matrix from a file. * * Matrix files have a simple format that's supposed to be easy to create with * a text editor or a spreadsheet. * * The first line has four numbers for width, height, scale and * offset (scale and offset may be omitted, in which case they default to 1.0 * and 0.0). Scale must be non-zero. Width and height must be positive * integers. The numbers are separated by any mixture of spaces, commas, * tabs and quotation marks ("). The scale and offset fields may be * floating-point, and must use '.' * as a decimal separator. * * Subsequent lines each hold one row of matrix data, with numbers again * separated by any mixture of spaces, commas, * tabs and quotation marks ("). The numbers may be floating-point, and must * use '.' * as a decimal separator. * * Extra characters at the ends of lines or at the end of the file are * ignored. * * See also: vips_matrixload(). * * Returns: 0 on success, -1 on error. */ int vips_matrixload(const char *filename, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("matrixload", ap, filename, out); va_end(ap); return result; } /** * vips_matrixload_source: * @source: source to load * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Exactly as vips_matrixload(), but read from a source. * * See also: vips_matrixload(). * * Returns: 0 on success, -1 on error. */ int vips_matrixload_source(VipsSource *source, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("matrixload_source", ap, source, out); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/matrixsave.c000066400000000000000000000233661454007373500207300ustar00rootroot00000000000000/* save to matrix * * 2/12/11 * - wrap a class around the matrix writer * 21/2/20 * - rewrite for the VipsTarget API */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pforeign.h" typedef struct _VipsForeignSaveMatrix { VipsForeignSave parent_object; VipsTarget *target; const char *separator; } VipsForeignSaveMatrix; typedef VipsForeignSaveClass VipsForeignSaveMatrixClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignSaveMatrix, vips_foreign_save_matrix, VIPS_TYPE_FOREIGN_SAVE); static void vips_foreign_save_matrix_dispose(GObject *gobject) { VipsForeignSaveMatrix *matrix = (VipsForeignSaveMatrix *) gobject; VIPS_UNREF(matrix->target); G_OBJECT_CLASS(vips_foreign_save_matrix_parent_class)->dispose(gobject); } static int vips_foreign_save_matrix_block(VipsRegion *region, VipsRect *area, void *a) { VipsForeignSaveMatrix *matrix = (VipsForeignSaveMatrix *) a; int x, y; for (y = 0; y < area->height; y++) { double *p = (double *) VIPS_REGION_ADDR(region, 0, area->top + y); char buf[G_ASCII_DTOSTR_BUF_SIZE]; for (x = 0; x < area->width; x++) { if (x > 0) vips_target_writes(matrix->target, " "); g_ascii_dtostr(buf, G_ASCII_DTOSTR_BUF_SIZE, p[x]); vips_target_writes(matrix->target, buf); } if (vips_target_writes(matrix->target, "\n")) return -1; } return 0; } static int vips_foreign_save_matrix_build(VipsObject *object) { VipsForeignSave *save = (VipsForeignSave *) object; VipsForeignSaveMatrix *matrix = (VipsForeignSaveMatrix *) object; VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); double scale; double offset; if (VIPS_OBJECT_CLASS(vips_foreign_save_matrix_parent_class)->build(object)) return -1; if (vips_check_mono(class->nickname, save->ready) || vips_check_uncoded(class->nickname, save->ready)) return -1; vips_target_writef(matrix->target, "%d %d", save->ready->Xsize, save->ready->Ysize); scale = vips_image_get_scale(save->ready); offset = vips_image_get_offset(save->ready); if (scale != 1.0 || offset != 0.0) vips_target_writef(matrix->target, " %g %g", scale, offset); if (vips_target_writes(matrix->target, "\n")) return -1; if (vips_sink_disc(save->ready, vips_foreign_save_matrix_block, matrix)) return -1; if (vips_target_end(matrix->target)) return -1; return 0; } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX static VipsBandFormat bandfmt_matrix[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ D, D, D, D, D, D, D, D, D, D }; static const char *vips_foreign_save_matrix_suffs[] = { ".mat", NULL }; static void vips_foreign_save_matrix_class_init(VipsForeignSaveMatrixClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class; gobject_class->dispose = vips_foreign_save_matrix_dispose; object_class->nickname = "matrixsave_base"; object_class->description = _("save image to matrix"); object_class->build = vips_foreign_save_matrix_build; foreign_class->suffs = vips_foreign_save_matrix_suffs; save_class->saveable = VIPS_SAVEABLE_MONO; save_class->format_table = bandfmt_matrix; } static void vips_foreign_save_matrix_init(VipsForeignSaveMatrix *matrix) { } typedef struct _VipsForeignSaveMatrixFile { VipsForeignSaveMatrix parent_object; char *filename; } VipsForeignSaveMatrixFile; typedef VipsForeignSaveMatrixClass VipsForeignSaveMatrixFileClass; G_DEFINE_TYPE(VipsForeignSaveMatrixFile, vips_foreign_save_matrix_file, vips_foreign_save_matrix_get_type()); static int vips_foreign_save_matrix_file_build(VipsObject *object) { VipsForeignSaveMatrix *matrix = (VipsForeignSaveMatrix *) object; VipsForeignSaveMatrixFile *file = (VipsForeignSaveMatrixFile *) object; if (file->filename && !(matrix->target = vips_target_new_to_file(file->filename))) return -1; return VIPS_OBJECT_CLASS(vips_foreign_save_matrix_file_parent_class) ->build(object); } static void vips_foreign_save_matrix_file_class_init( VipsForeignSaveMatrixFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "matrixsave"; object_class->build = vips_foreign_save_matrix_file_build; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveMatrixFile, filename), NULL); } static void vips_foreign_save_matrix_file_init(VipsForeignSaveMatrixFile *file) { } typedef struct _VipsForeignSaveMatrixTarget { VipsForeignSaveMatrix parent_object; VipsTarget *target; } VipsForeignSaveMatrixTarget; typedef VipsForeignSaveMatrixClass VipsForeignSaveMatrixTargetClass; G_DEFINE_TYPE(VipsForeignSaveMatrixTarget, vips_foreign_save_matrix_target, vips_foreign_save_matrix_get_type()); static int vips_foreign_save_matrix_target_build(VipsObject *object) { VipsForeignSaveMatrix *matrix = (VipsForeignSaveMatrix *) object; VipsForeignSaveMatrixTarget *target = (VipsForeignSaveMatrixTarget *) object; if (target->target) { matrix->target = target->target; g_object_ref(matrix->target); } return VIPS_OBJECT_CLASS(vips_foreign_save_matrix_target_parent_class) ->build(object); } static void vips_foreign_save_matrix_target_class_init( VipsForeignSaveMatrixTargetClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "matrixsave_target"; object_class->build = vips_foreign_save_matrix_target_build; VIPS_ARG_OBJECT(class, "target", 1, _("Target"), _("Target to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveMatrixTarget, target), VIPS_TYPE_TARGET); } static void vips_foreign_save_matrix_target_init(VipsForeignSaveMatrixTarget *target) { } typedef struct _VipsForeignPrintMatrix { VipsForeignSaveMatrix parent_object; } VipsForeignPrintMatrix; typedef VipsForeignSaveClass VipsForeignPrintMatrixClass; G_DEFINE_TYPE(VipsForeignPrintMatrix, vips_foreign_print_matrix, vips_foreign_save_matrix_get_type()); static int vips_foreign_print_matrix_build(VipsObject *object) { VipsForeignSaveMatrix *matrix = (VipsForeignSaveMatrix *) object; if (!(matrix->target = vips_target_new_to_descriptor(0))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_print_matrix_parent_class)->build(object)) return -1; return 0; } static void vips_foreign_print_matrix_class_init(VipsForeignPrintMatrixClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; object_class->nickname = "matrixprint"; object_class->description = _("print matrix"); object_class->build = vips_foreign_print_matrix_build; } static void vips_foreign_print_matrix_init(VipsForeignPrintMatrix *matrix) { } /** * vips_matrixsave: (method) * @in: image to save * @filename: file to write to * @...: %NULL-terminated list of optional named arguments * * Write @in to @filename in matrix format. See vips_matrixload() for a * description of the format. * * See also: vips_matrixload(). * * Returns: 0 on success, -1 on error. */ int vips_matrixsave(VipsImage *in, const char *filename, ...) { va_list ap; int result; va_start(ap, filename); result = vips_call_split("matrixsave", ap, in, filename); va_end(ap); return result; } /** * vips_matrixsave_target: (method) * @in: image to save * @target: save image to this target * @...: %NULL-terminated list of optional named arguments * * As vips_matrixsave(), but save to a target. * * See also: vips_matrixsave(). * * Returns: 0 on success, -1 on error. */ int vips_matrixsave_target(VipsImage *in, VipsTarget *target, ...) { va_list ap; int result; va_start(ap, target); result = vips_call_split("matrixsave_target", ap, in, target); va_end(ap); return result; } /** * vips_matrixprint: (method) * @in: image to print * @...: %NULL-terminated list of optional named arguments * * Print @in to %stdout in matrix format. See vips_matrixload() for a * description of the format. * * See also: vips_matrixload(). * * Returns: 0 on success, -1 on error. */ int vips_matrixprint(VipsImage *in, ...) { va_list ap; int result; va_start(ap, in); result = vips_call_split("matrixprint", ap, in); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/meson.build000066400000000000000000000045051454007373500205350ustar00rootroot00000000000000if get_option('nsgif') subdir('libnsgif') endif foreign_sources = files( 'archive.c', 'analyze2vips.c', 'analyzeload.c', 'cairo.c', 'cgifsave.c', 'csvload.c', 'csvsave.c', 'dzsave.c', 'exif.c', 'fits.c', 'fitsload.c', 'fitssave.c', 'foreign.c', 'jp2kload.c', 'jp2ksave.c', 'jpeg2vips.c', 'jpegload.c', 'jpegsave.c', 'magickload.c', 'magicksave.c', 'matlab.c', 'matload.c', 'matrixload.c', 'matrixsave.c', 'niftiload.c', 'niftisave.c', 'nsgifload.c', 'openexr2vips.c', 'openexrload.c', 'pdfiumload.c', 'pngload.c', 'pngsave.c', 'ppmload.c', 'ppmsave.c', 'quantise.c', 'radiance.c', 'radload.c', 'radsave.c', 'rawload.c', 'rawsave.c', 'spngload.c', 'spngsave.c', 'svgload.c', 'tiff2vips.c', 'tiff.c', 'tiffload.c', 'tiffsave.c', 'vips2jpeg.c', 'vips2tiff.c', 'vipsload.c', 'vipspng.c', 'vipssave.c', 'webp2vips.c', 'webpload.c', 'webpsave.c', ) foreign_headers = files( 'dbh.h', 'jpeg.h', 'pforeign.h', 'quantise.h', 'tiff.h', ) # We still need to include the GObject part of a loader/saver # if it is not built as a dynamically loadable module. magick_module_sources = files( 'magick.c', 'magick2vips.c', 'magick6load.c', 'magick7load.c', 'vips2magick.c', ) magick_module_headers = files( 'magick.h', ) if not magick_module foreign_sources += magick_module_sources foreign_headers += magick_module_headers endif jpeg_xl_module_sources = files( 'jxlload.c', 'jxlsave.c', ) if not libjxl_module foreign_sources += jpeg_xl_module_sources endif heif_module_sources = files( 'heifload.c', 'heifsave.c', ) if not libheif_module foreign_sources += heif_module_sources endif poppler_module_sources = files( 'popplerload.c', ) if not libpoppler_module foreign_sources += poppler_module_sources endif openslide_module_sources = files( 'openslideload.c', ) if not openslide_module foreign_sources += openslide_module_sources endif libvips_sources += foreign_sources foreign_lib = static_library('foreign', foreign_sources, foreign_headers, dependencies: libvips_deps, gnu_symbol_visibility: 'hidden', ) libvips_components += foreign_lib libvips-8.15.1/libvips/foreign/niftiload.c000066400000000000000000000535441454007373500205170ustar00rootroot00000000000000/* load nifti from a file * * 29/6/18 * - from fitsload.c * 9/9/19 * - use double for all floating point scalar metadata, like other loaders * - remove stray use of "n" property */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG #define VIPS_DEBUG */ /* TODO * * - for uncompressed images, we could do direct mapping of the input * - perhaps we could stream compressed images? but only if ext is defined at * the start of the file * (yes, file format is magic number, 348-byte header, extension data, * pixel data, then all gz'd) * - we could use the much faster byteswap in glib? * - I have not been able to test the ext stuff :( * * There should be at least a x2 speedup possible. */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #ifdef HAVE_NIFTI #include #include "pforeign.h" typedef struct _VipsForeignLoadNifti { VipsForeignLoad parent_object; /* Source to load from (set by subclasses). */ VipsSource *source; /* Filename from source. */ const char *filename; /* The NIFTI image loaded to memory. */ nifti_image *nim; /* Wrap this VipsImage around the NIFTI pointer, then redirect read * requests to that. Saves a copy. */ VipsImage *memory; } VipsForeignLoadNifti; typedef VipsForeignLoadClass VipsForeignLoadNiftiClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignLoadNifti, vips_foreign_load_nifti, VIPS_TYPE_FOREIGN_LOAD); static void vips_foreign_load_nifti_dispose(GObject *gobject) { VipsForeignLoadNifti *nifti = (VipsForeignLoadNifti *) gobject; VIPS_UNREF(nifti->source); VIPS_UNREF(nifti->memory); VIPS_FREEF(nifti_image_free, nifti->nim); G_OBJECT_CLASS(vips_foreign_load_nifti_parent_class)->dispose(gobject); } static int vips_foreign_load_nifti_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsForeignLoadNifti *nifti = (VipsForeignLoadNifti *) object; /* We can only open source which have an associated filename, since * the nifti library works in terms of filenames. */ if (nifti->source) { VipsConnection *connection = VIPS_CONNECTION(nifti->source); const char *filename; if (!vips_source_is_file(nifti->source) || !(filename = vips_connection_filename(connection))) { vips_error(class->nickname, "%s", _("no filename available")); return -1; } nifti->filename = filename; } if (VIPS_OBJECT_CLASS(vips_foreign_load_nifti_parent_class)->build(object)) return -1; return 0; } /* Map DT_* datatype values to VipsBandFormat. */ typedef struct _VipsForeignDT2Vips { int datatype; VipsBandFormat fmt; } VipsForeignDT2Vips; static VipsForeignDT2Vips vips_foreign_nifti_DT2Vips[] = { { DT_UINT8, VIPS_FORMAT_UCHAR }, { DT_INT8, VIPS_FORMAT_CHAR }, { DT_UINT16, VIPS_FORMAT_USHORT }, { DT_INT16, VIPS_FORMAT_SHORT }, { DT_UINT32, VIPS_FORMAT_UINT }, { DT_INT32, VIPS_FORMAT_INT }, { DT_FLOAT32, VIPS_FORMAT_FLOAT }, { DT_FLOAT64, VIPS_FORMAT_DOUBLE }, { DT_COMPLEX64, VIPS_FORMAT_COMPLEX }, { DT_COMPLEX128, VIPS_FORMAT_DPCOMPLEX }, { DT_RGB, VIPS_FORMAT_UCHAR }, { DT_RGBA32, VIPS_FORMAT_UCHAR } }; VipsBandFormat vips__foreign_nifti_datatype2BandFmt(int datatype) { int i; for (i = 0; i < VIPS_NUMBER(vips_foreign_nifti_DT2Vips); i++) if (vips_foreign_nifti_DT2Vips[i].datatype == datatype) return vips_foreign_nifti_DT2Vips[i].fmt; return VIPS_FORMAT_NOTSET; } int vips__foreign_nifti_BandFmt2datatype(VipsBandFormat fmt) { int i; for (i = 0; i < VIPS_NUMBER(vips_foreign_nifti_DT2Vips); i++) if (vips_foreign_nifti_DT2Vips[i].fmt == fmt) return vips_foreign_nifti_DT2Vips[i].datatype; return -1; } /* All the header fields we attach as metadata. */ typedef struct _VipsForeignNiftiFields { char *name; GType type; glong offset; } VipsForeignNiftiFields; static VipsForeignNiftiFields vips_foreign_nifti_fields[] = { /* The first 8 must be the dims[] fields, see * vips_foreign_save_nifti_make_nim(). */ { "ndim", G_TYPE_INT, G_STRUCT_OFFSET(nifti_image, ndim) }, { "nx", G_TYPE_INT, G_STRUCT_OFFSET(nifti_image, nx) }, { "ny", G_TYPE_INT, G_STRUCT_OFFSET(nifti_image, ny) }, { "nz", G_TYPE_INT, G_STRUCT_OFFSET(nifti_image, nz) }, { "nt", G_TYPE_INT, G_STRUCT_OFFSET(nifti_image, nt) }, { "nu", G_TYPE_INT, G_STRUCT_OFFSET(nifti_image, nu) }, { "nv", G_TYPE_INT, G_STRUCT_OFFSET(nifti_image, nv) }, { "nw", G_TYPE_INT, G_STRUCT_OFFSET(nifti_image, nw) }, { "dx", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, dx) }, { "dy", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, dy) }, { "dz", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, dz) }, { "dt", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, dt) }, { "du", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, du) }, { "dv", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, dv) }, { "dw", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, dw) }, { "scl_slope", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, scl_slope) }, { "scl_inter", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, scl_inter) }, { "cal_min", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, cal_min) }, { "cal_max", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, cal_max) }, { "qform_code", G_TYPE_INT, G_STRUCT_OFFSET(nifti_image, qform_code) }, { "sform_code", G_TYPE_INT, G_STRUCT_OFFSET(nifti_image, sform_code) }, { "freq_dim", G_TYPE_INT, G_STRUCT_OFFSET(nifti_image, freq_dim) }, { "phase_dim", G_TYPE_INT, G_STRUCT_OFFSET(nifti_image, phase_dim) }, { "slice_dim", G_TYPE_INT, G_STRUCT_OFFSET(nifti_image, slice_dim) }, { "slice_code", G_TYPE_INT, G_STRUCT_OFFSET(nifti_image, slice_code) }, { "slice_start", G_TYPE_INT, G_STRUCT_OFFSET(nifti_image, slice_start) }, { "slice_end", G_TYPE_INT, G_STRUCT_OFFSET(nifti_image, slice_end) }, { "slice_duration", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, slice_duration) }, { "quatern_b", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, quatern_b) }, { "quatern_c", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, quatern_c) }, { "quatern_d", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, quatern_d) }, { "qoffset_x", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, qoffset_x) }, { "qoffset_y", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, qoffset_y) }, { "qoffset_z", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, qoffset_z) }, { "qfac", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, qfac) }, { "sto_xyz00", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, sto_xyz.m[0][0]) }, { "sto_xyz01", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, sto_xyz.m[0][1]) }, { "sto_xyz02", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, sto_xyz.m[0][2]) }, { "sto_xyz03", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, sto_xyz.m[0][3]) }, { "sto_xyz10", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, sto_xyz.m[1][0]) }, { "sto_xyz11", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, sto_xyz.m[1][1]) }, { "sto_xyz12", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, sto_xyz.m[1][2]) }, { "sto_xyz13", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, sto_xyz.m[1][3]) }, { "sto_xyz20", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, sto_xyz.m[2][0]) }, { "sto_xyz21", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, sto_xyz.m[2][1]) }, { "sto_xyz22", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, sto_xyz.m[2][2]) }, { "sto_xyz23", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, sto_xyz.m[2][3]) }, { "sto_xyz30", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, sto_xyz.m[3][0]) }, { "sto_xyz31", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, sto_xyz.m[3][1]) }, { "sto_xyz32", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, sto_xyz.m[3][2]) }, { "sto_xyz33", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, sto_xyz.m[3][3]) }, { "toffset", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, toffset) }, { "xyz_units", G_TYPE_INT, G_STRUCT_OFFSET(nifti_image, xyz_units) }, { "time_units", G_TYPE_INT, G_STRUCT_OFFSET(nifti_image, time_units) }, { "nifti_type", G_TYPE_INT, G_STRUCT_OFFSET(nifti_image, nifti_type) }, { "intent_code", G_TYPE_INT, G_STRUCT_OFFSET(nifti_image, intent_code) }, { "intent_p1", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, intent_p1) }, { "intent_p2", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, intent_p2) }, { "intent_p3", G_TYPE_DOUBLE, G_STRUCT_OFFSET(nifti_image, intent_p3) }, }; void * vips__foreign_nifti_map(VipsNiftiMapFn fn, void *a, void *b) { int i; void *result; for (i = 0; i < VIPS_NUMBER(vips_foreign_nifti_fields); i++) { GValue value = G_VALUE_INIT; g_value_init(&value, vips_foreign_nifti_fields[i].type); result = fn(vips_foreign_nifti_fields[i].name, &value, vips_foreign_nifti_fields[i].offset, a, b); g_value_unset(&value); if (result) return result; } return NULL; } /* How I wish glib had something like this :( Just implement the ones we need * for vips_foreign_nifti_fields above. */ static void vips_gvalue_read(GValue *value, void *p) { switch (G_VALUE_TYPE(value)) { case G_TYPE_INT: g_value_set_int(value, *((int *) p)); break; case G_TYPE_DOUBLE: /* We set as double rather than float, as things like pyvips * expect double for metadata items. */ g_value_set_double(value, *((float *) p)); break; default: g_warning("vips_gvalue_read: unsupported GType %s", g_type_name(G_VALUE_TYPE(value))); } } static void * vips_foreign_load_nifti_set(const char *name, GValue *value, glong offset, void *a, void *b) { nifti_image *nim = (nifti_image *) a; VipsImage *out = VIPS_IMAGE(b); char vips_name[256]; vips_gvalue_read(value, (char *) nim + offset); vips_snprintf(vips_name, 256, "nifti-%s", name); vips_image_set(out, vips_name, value); return NULL; } static int vips_foreign_load_nifti_set_header(VipsForeignLoadNifti *nifti, nifti_image *nim, VipsImage *out) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(nifti); guint width; guint height; guint bands; VipsBandFormat fmt; double xres; double yres; int i; char txt[256]; if (nim->ndim < 1 || nim->ndim > 7) { vips_error(class->nickname, _("%d-dimensional images not supported"), nim->ndim); return 0; } for (i = 1; i < 8 && i < nim->ndim + 1; i++) { if (nim->dim[i] <= 0) { vips_error(class->nickname, "%s", _("invalid dimension")); return 0; } /* If we have several images in a dimension, the spacing must * be non-zero or we'll get a /0 error in resolution * calculation. */ if (nim->dim[i] > 1 && nim->pixdim[i] == 0) { vips_error(class->nickname, "%s", _("invalid resolution")); return 0; } } /* Unfold higher dimensions vertically. bands is updated below for * DT_RGB. Be careful to avoid height going over 2^31. */ bands = 1; width = (guint) nim->nx; height = (guint) nim->ny; for (i = 3; i < 8 && i < nim->ndim + 1; i++) if (!g_uint_checked_mul(&height, height, nim->dim[i])) { vips_error(class->nickname, "%s", _("dimension overflow")); return 0; } if (height > INT_MAX) { vips_error(class->nickname, "%s", _("dimension overflow")); return 0; } fmt = vips__foreign_nifti_datatype2BandFmt(nim->datatype); if (fmt == VIPS_FORMAT_NOTSET) { vips_error(class->nickname, _("datatype %d not supported"), nim->datatype); return -1; } if (nim->datatype == DT_RGB) bands = 3; if (nim->datatype == DT_RGBA32) bands = 4; /* We fold y and z together, so they must have the same resolution.. */ xres = 1.0; yres = 1.0; if (nim->nz == 1 || nim->dz == nim->dy) switch (nim->xyz_units) { case NIFTI_UNITS_METER: xres = 1000.0 / nim->dx; yres = 1000.0 / nim->dy; break; case NIFTI_UNITS_MM: xres = 1.0 / nim->dx; yres = 1.0 / nim->dy; break; case NIFTI_UNITS_MICRON: xres = 1.0 / (1000.0 * nim->dx); yres = 1.0 / (1000.0 * nim->dy); break; default: break; } #ifdef DEBUG printf("get_vips_properties: width = %d\n", width); printf("get_vips_properties: height = %d\n", height); printf("get_vips_properties: bands = %d\n", bands); printf("get_vips_properties: fmt = %d\n", fmt); #endif /*DEBUG*/ /* We load to memory then write to out, so we'll hint THINSTRIP. */ vips_image_pipelinev(out, VIPS_DEMAND_STYLE_THINSTRIP, NULL); vips_image_init_fields(out, width, height, bands, fmt, VIPS_CODING_NONE, bands == 1 ? VIPS_INTERPRETATION_B_W : VIPS_INTERPRETATION_sRGB, xres, yres); /* Set some vips metadata for every nifti header field. */ if (vips__foreign_nifti_map(vips_foreign_load_nifti_set, nim, out)) return -1; /* One byte longer than the spec to leave space for any extra * '\0' termination. */ vips_strncpy(txt, nim->intent_name, 17); vips_image_set_string(out, "nifti-intent_name", txt); vips_strncpy(txt, nim->descrip, 81); vips_image_set_string(out, "nifti-descrip", txt); for (i = 0; i < nim->num_ext; i++) { nifti1_extension *ext = &nim->ext_list[i]; vips_snprintf(txt, 256, "nifti-ext-%d-%d", i, ext->ecode); vips_image_set_blob_copy(out, txt, ext->edata, ext->esize); } vips_image_set_int(out, VIPS_META_PAGE_HEIGHT, nim->ny); return 0; } static int vips_foreign_load_nifti_header(VipsForeignLoad *load) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load); VipsForeignLoadNifti *nifti = (VipsForeignLoadNifti *) load; /* We can't use the (much faster) nifti_read_header() since it just * reads the 348 bytes of the analyze struct and does not read any of * the extension fields. */ /* FALSE means don't read data, just the header. Use * nifti_image_load() later to pull the data in. */ if (!(nifti->nim = nifti_image_read(nifti->filename, FALSE))) { vips_error(class->nickname, "%s", _("unable to read NIFTI header")); return 0; } if (vips_foreign_load_nifti_set_header(nifti, nifti->nim, load->out)) { return -1; } VIPS_SETSTR(load->out->filename, nifti->filename); return 0; } static int vips_foreign_load_nifti_load(VipsForeignLoad *load) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load); VipsForeignLoadNifti *nifti = (VipsForeignLoadNifti *) load; #ifdef DEBUG printf("vips_foreign_load_nifti_load: loading image\n"); #endif /*DEBUG*/ /* We just read the entire image to memory. */ if (nifti_image_load(nifti->nim)) { vips_error(class->nickname, "%s", _("unable to load NIFTI file")); return -1; } if (!(nifti->memory = vips_image_new_from_memory( nifti->nim->data, VIPS_IMAGE_SIZEOF_IMAGE(load->out), load->out->Xsize, load->out->Ysize, load->out->Bands, load->out->BandFmt))) return -1; if (vips_image_write(nifti->memory, load->real)) return -1; return 0; } static void vips_foreign_load_nifti_class_init(VipsForeignLoadNiftiClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->dispose = vips_foreign_load_nifti_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "niftiload_base"; object_class->description = _("load a NIFTI image"); object_class->build = vips_foreign_load_nifti_build; /* nificlib has not been fuzzed, so should not be used with * untrusted input unless you are very careful. */ operation_class->flags |= VIPS_OPERATION_UNTRUSTED; /* is_a() is not that quick ... lower the priority. */ foreign_class->priority = -50; load_class->header = vips_foreign_load_nifti_header; load_class->load = vips_foreign_load_nifti_load; } static void vips_foreign_load_nifti_init(VipsForeignLoadNifti *nifti) { } typedef struct _VipsForeignLoadNiftiFile { VipsForeignLoadNifti parent_object; /* Filename for load. */ char *filename; } VipsForeignLoadNiftiFile; typedef VipsForeignLoadNiftiClass VipsForeignLoadNiftiFileClass; G_DEFINE_TYPE(VipsForeignLoadNiftiFile, vips_foreign_load_nifti_file, vips_foreign_load_nifti_get_type()); static int vips_foreign_load_nifti_file_build(VipsObject *object) { VipsForeignLoadNifti *nifti = (VipsForeignLoadNifti *) object; VipsForeignLoadNiftiFile *file = (VipsForeignLoadNiftiFile *) object; if (file->filename && !(nifti->source = vips_source_new_from_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_nifti_file_parent_class) ->build(object)) return -1; return 0; } const char *vips_foreign_nifti_suffs[] = { ".nii", ".nii.gz", ".hdr", ".hdr.gz", ".img", ".img.gz", ".nia", ".nia.gz", NULL }; static int vips_foreign_load_nifti_is_a(const char *filename) { char *hfile; znzFile fp; nifti_1_header nhdr; /* Unfortunately is_nifti_file() is very slow and produces lots of * output. We have to make our own. */ if (!(hfile = nifti_findhdrname(filename))) return 0; fp = znzopen(hfile, "rb", nifti_is_gzfile(hfile)); if (znz_isnull(fp)) { free(hfile); return 0; } free(hfile); (void) znzread(&nhdr, 1, sizeof(nhdr), fp); znzclose(fp); /* Test for sanity both ways around. There's a thing to test for byte * order in niftilib, but it's static :( */ if (nifti_hdr_looks_good(&nhdr)) return 1; swap_nifti_header(&nhdr, FALSE); if (nifti_hdr_looks_good(&nhdr)) return 1; return 0; } static void vips_foreign_load_nifti_file_class_init( VipsForeignLoadNiftiFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "niftiload"; object_class->description = _("load NIfTI volume"); object_class->build = vips_foreign_load_nifti_file_build; foreign_class->suffs = vips_foreign_nifti_suffs; load_class->is_a = vips_foreign_load_nifti_is_a; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadNiftiFile, filename), NULL); } static void vips_foreign_load_nifti_file_init(VipsForeignLoadNiftiFile *nifti) { } typedef struct _VipsForeignLoadNiftiSource { VipsForeignLoadNifti parent_object; /* Load from a source. */ VipsSource *source; } VipsForeignLoadNiftiSource; typedef VipsForeignLoadNiftiClass VipsForeignLoadNiftiSourceClass; G_DEFINE_TYPE(VipsForeignLoadNiftiSource, vips_foreign_load_nifti_source, vips_foreign_load_nifti_get_type()); static int vips_foreign_load_nifti_source_build(VipsObject *object) { VipsForeignLoadNifti *nifti = (VipsForeignLoadNifti *) object; VipsForeignLoadNiftiSource *source = (VipsForeignLoadNiftiSource *) object; if (source->source) { nifti->source = source->source; g_object_ref(nifti->source); } if (VIPS_OBJECT_CLASS(vips_foreign_load_nifti_source_parent_class) ->build(object)) return -1; return 0; } static gboolean vips_foreign_load_nifti_source_is_a_source(VipsSource *source) { VipsConnection *connection = VIPS_CONNECTION(source); const char *filename; return vips_source_is_file(source) && (filename = vips_connection_filename(connection)) && vips_foreign_load_nifti_is_a(filename); } static void vips_foreign_load_nifti_source_class_init( VipsForeignLoadNiftiSourceClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "niftiload_source"; object_class->description = _("load NIfTI volumes"); object_class->build = vips_foreign_load_nifti_source_build; operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_nifti_source_is_a_source; VIPS_ARG_OBJECT(class, "source", 1, _("Source"), _("Source to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadNiftiSource, source), VIPS_TYPE_SOURCE); } static void vips_foreign_load_nifti_source_init( VipsForeignLoadNiftiSource *nifti) { } #endif /*HAVE_NIFTI*/ /** * vips_niftiload: * @filename: file to load * @out: (out): decompressed image * @...: %NULL-terminated list of optional named arguments * * Read a NIFTI image file into a VIPS image. * * NIFTI metadata is attached with the "nifti-" prefix. * * See also: vips_image_new_from_file(). * * Returns: 0 on success, -1 on error. */ int vips_niftiload(const char *filename, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("niftiload", ap, filename, out); va_end(ap); return result; } /** * vips_niftiload_source: * @source: source to load from * @out: (out): decompressed image * @...: %NULL-terminated list of optional named arguments * * Exactly as vips_niftiload(), but read from a source. * * Returns: 0 on success, -1 on error. */ int vips_niftiload_source(VipsSource *source, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("niftiload_source", ap, source, out); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/niftisave.c000066400000000000000000000254731454007373500205360ustar00rootroot00000000000000/* save to nifti * * 5/7/18 * - from fitssave.c * 9/9/19 * - use double for all floating point scalar metadata, like other loaders */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #ifdef HAVE_NIFTI #include #include "pforeign.h" typedef struct _VipsForeignSaveNifti { VipsForeignSave parent_object; /* Filename for save. */ char *filename; nifti_image *nim; } VipsForeignSaveNifti; typedef VipsForeignSaveClass VipsForeignSaveNiftiClass; G_DEFINE_TYPE(VipsForeignSaveNifti, vips_foreign_save_nifti, VIPS_TYPE_FOREIGN_SAVE); static void vips_foreign_save_nifti_dispose(GObject *gobject) { VipsForeignSaveNifti *nifti = (VipsForeignSaveNifti *) gobject; VIPS_FREEF(nifti_image_free, nifti->nim); G_OBJECT_CLASS(vips_foreign_save_nifti_parent_class)->dispose(gobject); } /* Make ->nim from the vips header fields. */ static int vips_foreign_save_nifti_header_vips(VipsForeignSaveNifti *nifti, VipsImage *image) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(nifti); int dims[8]; int datatype; int i; /* Most nifti images have this defaulted as 1. */ for (i = 0; i < VIPS_NUMBER(dims); i++) dims[i] = 1; dims[0] = 2; dims[1] = image->Xsize; dims[2] = vips_image_get_page_height(image); /* Multipage image? */ if (dims[2] < image->Ysize) { dims[0] = 3; dims[3] = image->Ysize / dims[2]; } datatype = vips__foreign_nifti_BandFmt2datatype(image->BandFmt); if (datatype == -1) { vips_error(class->nickname, "%s", _("unsupported libvips image type")); return -1; } if (image->Bands > 1) { if (image->BandFmt != VIPS_FORMAT_UCHAR) { vips_error(class->nickname, "%s", _("8-bit colour images only")); return -1; } if (image->Bands == 3) datatype = DT_RGB; else if (image->Bands == 4) datatype = DT_RGBA32; else { vips_error(class->nickname, "%s", _("3 or 4 band colour images only")); return -1; } } if (!(nifti->nim = nifti_make_new_nim(dims, datatype, FALSE))) return -1; nifti->nim->dx = 1.0 / image->Xres; nifti->nim->dy = 1.0 / image->Yres; nifti->nim->dz = 1.0 / image->Yres; nifti->nim->xyz_units = NIFTI_UNITS_MM; vips_snprintf(nifti->nim->descrip, sizeof(nifti->nim->descrip), "libvips-%s", VIPS_VERSION); /* All other fields can stay at their default value. */ return 0; } typedef struct _VipsNdimInfo { VipsImage *image; nifti_image *nim; int *dims; int n; } VipsNdimInfo; static void * vips_foreign_save_nifti_set_dims(const char *name, GValue *value, glong offset, void *a, void *b) { VipsNdimInfo *info = (VipsNdimInfo *) a; /* The first 8 members are the dims fields. */ if (info->n < 8) { char vips_name[256]; int i; vips_snprintf(vips_name, 256, "nifti-%s", name); if (vips_image_get_int(info->image, vips_name, &i) || i <= 0 || i >= VIPS_MAX_COORD) return info; info->dims[info->n] = i; } info->n += 1; return NULL; } /* How I wish glib had something like this :( Just implement the ones we need * for vips_foreign_nifti_fields above. */ static void vips_gvalue_write(GValue *value, void *p) { switch (G_VALUE_TYPE(value)) { case G_TYPE_INT: *((int *) p) = g_value_get_int(value); break; case G_TYPE_DOUBLE: *((float *) p) = g_value_get_double(value); break; default: g_warning("vips_gvalue_write: unsupported GType %s", g_type_name(G_VALUE_TYPE(value))); } } static void * vips_foreign_save_nifti_set_fields(const char *name, GValue *value, glong offset, void *a, void *b) { VipsNdimInfo *info = (VipsNdimInfo *) a; /* The first 8 members are the dims fields. We set them above ^^^ -- * do the others in this pass. */ if (info->n >= 8) { char vips_name[256]; GValue value_copy = G_VALUE_INIT; vips_snprintf(vips_name, 256, "nifti-%s", name); if (vips_image_get(info->image, vips_name, &value_copy)) return info; vips_gvalue_write(&value_copy, (char *) info->nim + offset); g_value_unset(&value_copy); } info->n += 1; return NULL; } static void * vips_foreign_save_nifti_ext(VipsImage *image, const char *field, GValue *value, void *a) { nifti_image *nim = (nifti_image *) a; int i; int ecode; char *data; size_t length; if (!vips_isprefix("nifti-ext-", field)) return NULL; /* The name is "nifti-ext-N-XX" where N is the index (discard this) * and XX is the nifti ext ecode. */ if (sscanf(field, "nifti-ext-%d-%d", &i, &ecode) != 2) { vips_error("niftisave", "%s", _("bad nifti-ext- field name")); return image; } if (vips_image_get_blob(image, field, (void *) &data, &length)) return image; if (nifti_add_extension(nim, data, length, ecode)) { vips_error("niftisave", "%s", _("unable to attach nifti ext")); return image; } return NULL; } /* Make ->nim from the nifti- fields. */ static int vips_foreign_save_nifti_header_nifti(VipsForeignSaveNifti *nifti, VipsImage *image) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(nifti); VipsNdimInfo info; int dims[8]; int datatype; guint height; int i; /* Most nifti images have this defaulted as 1. */ for (i = 0; i < VIPS_NUMBER(dims); i++) dims[i] = 1; info.image = image; info.dims = dims; info.n = 0; if (vips__foreign_nifti_map( vips_foreign_save_nifti_set_dims, &info, NULL)) return -1; /* page-height overrides ny if it makes sense. This might not be * correct :( */ dims[2] = vips_image_get_page_height(image); /* Multipage image? */ if (dims[2] < image->Ysize) { dims[0] = 3; dims[3] = image->Ysize / dims[2]; } height = 1; for (i = 2; i < VIPS_NUMBER(dims) && i < dims[0] + 1; i++) if (!g_uint_checked_mul(&height, height, dims[i])) { vips_error(class->nickname, "%s", _("dimension overflow")); return 0; } if (image->Xsize != dims[1] || image->Ysize != height) { vips_error(class->nickname, "%s", _("bad image dimensions")); return -1; } datatype = vips__foreign_nifti_BandFmt2datatype(image->BandFmt); if (datatype == -1) { vips_error(class->nickname, "%s", _("unsupported libvips image type")); return -1; } if (!(nifti->nim = nifti_make_new_nim(dims, datatype, FALSE))) return -1; info.image = image; info.nim = nifti->nim; info.n = 0; if (vips__foreign_nifti_map( vips_foreign_save_nifti_set_fields, &info, NULL)) return -1; /* Attach any ext blocks. */ if (vips_image_map(image, (VipsImageMapFn) vips_foreign_save_nifti_ext, nifti->nim)) return -1; return 0; } static int vips_foreign_save_nifti_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsForeignSave *save = (VipsForeignSave *) object; VipsForeignSaveNifti *nifti = (VipsForeignSaveNifti *) object; if (VIPS_OBJECT_CLASS(vips_foreign_save_nifti_parent_class)->build(object)) return -1; /* This could be an image (indirectly) from niftiload, or something * like OME_TIFF, which does not have all the "nifti-ndim" fields. * * If it doesn't look like a nifti, try to make a nifti header from * what we have. */ if (vips_image_get_typeof(save->ready, "nifti-ndim")) { if (vips_foreign_save_nifti_header_nifti(nifti, save->ready)) return -1; } else { if (vips_foreign_save_nifti_header_vips(nifti, save->ready)) return -1; } /* set ext, plus other stuff */ if (nifti_set_filenames(nifti->nim, nifti->filename, FALSE, TRUE)) { vips_error(class->nickname, "%s", _("unable to set nifti filename")); return -1; } if (!(nifti->nim->data = vips_image_write_to_memory(save->ready, NULL))) return -1; /* No return code!??!?!! */ nifti_image_write(nifti->nim); /* We must free and NULL the pointer or nifti will try to free it for * us. */ VIPS_FREE(nifti->nim->data); return 0; } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX static VipsBandFormat vips_nifti_bandfmt[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, C, US, S, UI, I, F, X, D, DX }; static void vips_foreign_save_nifti_class_init(VipsForeignSaveNiftiClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class; gobject_class->dispose = vips_foreign_save_nifti_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "niftisave"; object_class->description = _("save image to nifti file"); object_class->build = vips_foreign_save_nifti_build; /* nificlib has not been fuzzed, so should not be used with * untrusted input unless you are very careful. */ operation_class->flags |= VIPS_OPERATION_UNTRUSTED; foreign_class->suffs = vips_foreign_nifti_suffs; save_class->saveable = VIPS_SAVEABLE_ANY; save_class->format_table = vips_nifti_bandfmt; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveNifti, filename), NULL); } static void vips_foreign_save_nifti_init(VipsForeignSaveNifti *nifti) { } #endif /*HAVE_NIFTI*/ /** * vips_niftisave: (method) * @in: image to save * @filename: file to write to * @...: %NULL-terminated list of optional named arguments * * Write a VIPS image to a file in NIFTI format. * * Use the various NIFTI suffixes to pick the nifti save format. * * See also: vips_image_write_to_file(), vips_niftiload(). * * Returns: 0 on success, -1 on error. */ int vips_niftisave(VipsImage *in, const char *filename, ...) { va_list ap; int result; va_start(ap, filename); result = vips_call_split("niftisave", ap, in, filename); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/nsgifload.c000066400000000000000000000613571454007373500205150ustar00rootroot00000000000000/* load a GIF with libnsgif * * 6/10/18 * - from gifload.c * 3/3/22 tlsa * - update libnsgif API * 9/5/22 * - attach GIF palette as metadata * 26/11/22 kleisauke * - avoid minimise after mapping -- not reliable on Win32 * 25/1/23 kleisauke * - set interlaced=1 for interlaced images * 13/3/23 MathemanFlo * - add bits per sample metadata */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VERBOSE #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include #include /* TODO: * * - libnsgif does not seem to support comment metadata * * - it always loads the entire source file into memory * * Notes: * * - hard to detect mono images -- local_colour_table in libnsgif is only set * when we decode a frame, so we can't tell just from init whether any * frames have colour info */ #ifdef HAVE_NSGIF #include #define VIPS_TYPE_FOREIGN_LOAD_GIF (vips_foreign_load_nsgif_get_type()) #define VIPS_FOREIGN_LOAD_GIF(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_FOREIGN_LOAD_GIF, VipsForeignLoadNsgif)) #define VIPS_FOREIGN_LOAD_GIF_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_FOREIGN_LOAD_GIF, VipsForeignLoadNsgifClass)) #define VIPS_IS_FOREIGN_LOAD_GIF(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_FOREIGN_LOAD_GIF)) #define VIPS_IS_FOREIGN_LOAD_GIF_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_FOREIGN_LOAD_GIF)) #define VIPS_FOREIGN_LOAD_GIF_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_FOREIGN_LOAD_GIF, VipsForeignLoadNsgifClass)) typedef struct _VipsForeignLoadNsgif { VipsForeignLoad parent_object; /* Load this page (frame number). */ int page; /* Load this many pages. */ int n; /* Load from this source (set by subclasses). */ VipsSource *source; /* The animation created by libnsgif. */ nsgif_t *anim; /* The data/size pair we pass to libnsgif. */ unsigned char *data; size_t size; /* Information about the current GIF. */ const nsgif_info_t *info; /* Delays between frames (in milliseconds). Array of length * @info->frame_count. */ int *delay; /* A single centisecond value for compatibility. */ int gif_delay; /* If the GIF contains any frames with transparent elements. */ gboolean has_transparency; /* If the GIF has any interlaced frames. */ gboolean interlaced; /* If the GIF has any local palettes. */ gboolean local_palette; /* The current frame bitmap and the frame number for it. */ nsgif_bitmap_t *bitmap; int frame_number; } VipsForeignLoadNsgif; typedef VipsForeignLoadClass VipsForeignLoadNsgifClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignLoadNsgif, vips_foreign_load_nsgif, VIPS_TYPE_FOREIGN_LOAD); static void vips_foreign_load_nsgif_error(VipsForeignLoadNsgif *gif, nsgif_error result) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(gif); vips_error(class->nickname, "%s", nsgif_strerror(result)); } static void vips_foreign_load_nsgif_dispose(GObject *gobject) { VipsForeignLoadNsgif *gif = (VipsForeignLoadNsgif *) gobject; VIPS_DEBUG_MSG("vips_foreign_load_nsgif_dispose:\n"); VIPS_FREEF(nsgif_destroy, gif->anim); VIPS_UNREF(gif->source); VIPS_FREE(gif->delay); G_OBJECT_CLASS(vips_foreign_load_nsgif_parent_class)->dispose(gobject); } static VipsForeignFlags vips_foreign_load_nsgif_get_flags_filename(const char *filename) { return VIPS_FOREIGN_SEQUENTIAL; } static VipsForeignFlags vips_foreign_load_nsgif_get_flags(VipsForeignLoad *load) { return VIPS_FOREIGN_SEQUENTIAL; } static gboolean vips_foreign_load_nsgif_is_a_source(VipsSource *source) { const unsigned char *data; if ((data = vips_source_sniff(source, 4)) && data[0] == 'G' && data[1] == 'I' && data[2] == 'F' && data[3] == '8') return TRUE; return FALSE; } #ifdef VERBOSE static void print_frame(const nsgif_frame_info_t *frame_info) { if (frame_info == NULL) return; printf("frame_info:\n"); printf(" display = %d\n", frame_info->display); printf(" local_palette = %d\n", frame_info->local_palette); printf(" transparency = %d\n", frame_info->transparency); printf(" interlaced = %d\n", frame_info->interlaced); printf(" disposal = %d (%s)\n", frame_info->disposal, nsgif_str_disposal(frame_info->disposal)); printf(" delay = %d\n", frame_info->delay); printf(" rect.x0 = %u\n", frame_info->rect.x0); printf(" rect.y0 = %u\n", frame_info->rect.y0); printf(" rect.x1 = %u\n", frame_info->rect.x1); printf(" rect.y1 = %u\n", frame_info->rect.y1); } static void print_animation(nsgif_t *anim, const nsgif_info_t *info) { int i; const uint8_t *bg = (uint8_t *) &info->background; printf("animation:\n"); printf(" width = %d\n", info->width); printf(" height = %d\n", info->height); printf(" frame_count = %d\n", info->frame_count); printf(" global_palette = %d\n", info->global_palette); printf(" loop_max = %d\n", info->loop_max); printf(" background = %d %d %d %d\n", bg[0], bg[1], bg[2], bg[3]); for (i = 0; i < info->frame_count; i++) { printf("%d ", i); print_frame(nsgif_get_frame_info(anim, i)); } } #endif /*VERBOSE*/ static int vips_foreign_load_nsgif_set_header(VipsForeignLoadNsgif *gif, VipsImage *image) { double array[3]; const uint8_t *bg; size_t entries; uint32_t table[NSGIF_MAX_COLOURS]; int colours; VIPS_DEBUG_MSG("vips_foreign_load_nsgif_set_header:\n"); vips_image_init_fields(image, gif->info->width, gif->info->height * gif->n, gif->has_transparency ? 4 : 3, VIPS_FORMAT_UCHAR, VIPS_CODING_NONE, VIPS_INTERPRETATION_sRGB, 1.0, 1.0); vips_image_pipelinev(image, VIPS_DEMAND_STYLE_FATSTRIP, NULL); /* Only set page-height if we have more than one page, or this could * accidentally turn into an animated image later. */ if (gif->n > 1) vips_image_set_int(image, VIPS_META_PAGE_HEIGHT, gif->info->height); vips_image_set_int(image, VIPS_META_N_PAGES, gif->info->frame_count); vips_image_set_int(image, "loop", gif->info->loop_max); vips_image_set_array_int(image, "delay", gif->delay, gif->info->frame_count); bg = (uint8_t *) &gif->info->background; array[0] = bg[0]; array[1] = bg[1]; array[2] = bg[2]; vips_image_set_array_double(image, "background", array, 3); VIPS_SETSTR(image->filename, vips_connection_filename(VIPS_CONNECTION(gif->source))); /* DEPRECATED "gif-loop" * * Not the correct behavior as loop=1 became gif-loop=0 * but we want to keep the old behavior untouched! */ vips_image_set_int(image, "gif-loop", gif->info->loop_max == 0 ? 0 : gif->info->loop_max - 1); /* The deprecated gif-delay field is in centiseconds. */ vips_image_set_int(image, "gif-delay", gif->gif_delay); /* If there are no local palettes, we can attach the global palette as * metadata. */ if (!gif->local_palette) { nsgif_global_palette(gif->anim, table, &entries); vips_image_set_array_int(image, "gif-palette", (const int *) table, entries); colours = entries; } else { int i; colours = 0; if (gif->info->global_palette) { nsgif_global_palette(gif->anim, table, &entries); colours = entries; } for (i = 0; i < gif->info->frame_count; i++) { if (nsgif_local_palette(gif->anim, i, table, &entries)) colours = VIPS_MAX(colours, entries); } } vips_image_set_int(image, VIPS_META_BITS_PER_SAMPLE, ceil(log2(colours))); /* Deprecated "palette-bit-depth" use "bits-per-sample" instead. */ vips_image_set_int(image, "palette-bit-depth", ceil(log2(colours))); /* Let our caller know if the GIF is interlaced. */ if (gif->interlaced) vips_image_set_int(image, "interlaced", 1); return 0; } /* Scan the GIF as quickly as we can and extract transparency, bands, pages, * etc. * * Don't flag any errors unless we have to: we want to work for corrupt or * malformed GIFs. */ static int vips_foreign_load_nsgif_header(VipsForeignLoad *load) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load); VipsForeignLoadNsgif *gif = (VipsForeignLoadNsgif *) load; const void *data; size_t size; nsgif_error result; int i; VIPS_DEBUG_MSG("vips_foreign_load_nsgif_header:\n"); /* Map the whole source into memory. */ if (!(data = vips_source_map(gif->source, &size))) return -1; /* Treat errors from _scan() as warnings. If libnsgif really can't do * something it'll fail gracefully later when we try to read out * frame data. */ result = nsgif_data_scan(gif->anim, size, (void *) data); VIPS_DEBUG_MSG("nsgif_data_scan() = %s\n", nsgif_strerror(result)); switch (result) { case NSGIF_ERR_END_OF_DATA: if (load->fail_on >= VIPS_FAIL_ON_TRUNCATED) { vips_foreign_load_nsgif_error(gif, result); return -1; } else g_warning("%s", nsgif_strerror(result)); break; case NSGIF_OK: break; default: if (load->fail_on >= VIPS_FAIL_ON_WARNING) { vips_foreign_load_nsgif_error(gif, result); return -1; } else g_warning("%s", nsgif_strerror(result)); break; } /* Tell libnsgif that that's all the data we have. This will let us * read out any truncated final frames. */ nsgif_data_complete(gif->anim); gif->info = nsgif_get_info(gif->anim); #ifdef VERBOSE print_animation(gif->anim, gif->info); #endif /*VERBOSE*/ if (!gif->info->frame_count) { vips_error(class->nickname, "%s", _("no frames in GIF")); return -1; } /* Update our global struct based on the information in the * individual frames. */ for (i = 0; i < gif->info->frame_count; i++) { const nsgif_frame_info_t *frame_info; if ((frame_info = nsgif_get_frame_info(gif->anim, i))) { if (frame_info->transparency) gif->has_transparency = TRUE; if (frame_info->interlaced) gif->interlaced = TRUE; if (frame_info->local_palette) gif->local_palette = TRUE; } } if (gif->n == -1) gif->n = gif->info->frame_count - gif->page; if (gif->page < 0 || gif->n <= 0 || gif->page + gif->n > gif->info->frame_count) { vips_error(class->nickname, "%s", _("bad page number")); return -1; } /* In ms, frame_delay in cs. */ VIPS_FREE(gif->delay); if (!(gif->delay = VIPS_ARRAY(NULL, gif->info->frame_count, int))) return -1; for (i = 0; i < gif->info->frame_count; i++) { const nsgif_frame_info_t *frame_info; frame_info = nsgif_get_frame_info(gif->anim, i); if (frame_info == NULL) { vips_error(class->nickname, "%s", _("bad frame")); return -1; } gif->delay[i] = 10 * frame_info->delay; } gif->gif_delay = gif->delay[0] / 10; vips_foreign_load_nsgif_set_header(gif, load->out); return 0; } static int vips_foreign_load_nsgif_generate(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRect *r = &out_region->valid; VipsForeignLoadNsgif *gif = (VipsForeignLoadNsgif *) a; int y; #ifdef VERBOSE VIPS_DEBUG_MSG("vips_foreign_load_nsgif_generate: " "top = %d, height = %d\n", r->top, r->height); #endif /*VERBOSE*/ for (y = 0; y < r->height; y++) { /* The page for this output line, and the line number in page. */ int page = (r->top + y) / gif->info->height + gif->page; int line = (r->top + y) % gif->info->height; nsgif_error result; VipsPel *p, *q; g_assert(line >= 0 && line < gif->info->height); g_assert(page >= 0 && page < gif->info->frame_count); if (gif->frame_number != page) { result = nsgif_frame_decode(gif->anim, page, &gif->bitmap); VIPS_DEBUG_MSG(" nsgif_frame_decode(%d) = %d\n", page, result); if (result != NSGIF_OK) { vips_foreign_load_nsgif_error(gif, result); return -1; } #ifdef VERBOSE print_frame(nsgif_get_frame_info(gif->anim, page)); #endif /*VERBOSE*/ gif->frame_number = page; } p = (VipsPel *) gif->bitmap + line * gif->info->width * sizeof(int); q = VIPS_REGION_ADDR(out_region, 0, r->top + y); if (gif->has_transparency) memcpy(q, p, VIPS_REGION_SIZEOF_LINE(out_region)); else { int i; for (i = 0; i < r->width; i++) { q[0] = p[0]; q[1] = p[1]; q[2] = p[2]; q += 3; p += 4; } } } return 0; } int vips_foreign_load_nsgif_tile_height(VipsForeignLoadNsgif *gif) { int height = gif->info->height; int i; /* First, check the perfect size. */ if (height % 16 == 0) return 16; /* Next, check larger and smaller sizes. */ for (i = 1; i < 16; i++) { if (height % (16 + i) == 0) return 16 + i; if (height % (16 - i) == 0) return 16 - i; } return 1; } static int vips_foreign_load_nsgif_load(VipsForeignLoad *load) { VipsForeignLoadNsgif *gif = (VipsForeignLoadNsgif *) load; VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(load), 2); VIPS_DEBUG_MSG("vips_foreign_load_nsgif_load:\n"); /* Make the output pipeline. */ t[0] = vips_image_new(); if (vips_foreign_load_nsgif_set_header(gif, t[0])) return -1; /* Strips 8 pixels high to avoid too many tiny regions. */ if (vips_image_generate(t[0], NULL, vips_foreign_load_nsgif_generate, NULL, gif, NULL) || vips_sequential(t[0], &t[1], "tile_height", vips_foreign_load_nsgif_tile_height(gif), NULL) || vips_image_write(t[1], load->real)) return -1; return 0; } static void vips_foreign_load_nsgif_class_init(VipsForeignLoadNsgifClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->dispose = vips_foreign_load_nsgif_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "gifload_base"; object_class->description = _("load GIF with libnsgif"); /* High priority, so that we handle vipsheader etc. */ foreign_class->priority = 50; load_class->get_flags_filename = vips_foreign_load_nsgif_get_flags_filename; load_class->get_flags = vips_foreign_load_nsgif_get_flags; load_class->header = vips_foreign_load_nsgif_header; load_class->load = vips_foreign_load_nsgif_load; VIPS_ARG_INT(class, "page", 10, _("Page"), _("First page to load"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadNsgif, page), 0, 100000, 0); VIPS_ARG_INT(class, "n", 6, _("n"), _("Number of pages to load, -1 for all"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadNsgif, n), -1, 100000, 1); } static void * vips_foreign_load_nsgif_bitmap_create(int width, int height) { /* GIF has a limit of 64k per axis -- double-check this. */ if (width <= 0 || width > 65536 || height <= 0 || height > 65536) { vips_error("gifload", "%s", _("bad image dimensions")); return NULL; } return g_malloc0((gsize) width * height * 4); } static unsigned char * vips_foreign_load_nsgif_bitmap_get_buffer(void *bitmap) { g_assert(bitmap); return bitmap; } static void vips_foreign_load_nsgif_bitmap_destroy(void *bitmap) { g_assert(bitmap); g_free(bitmap); } static nsgif_bitmap_cb_vt vips_foreign_load_nsgif_bitmap_callbacks = { vips_foreign_load_nsgif_bitmap_create, vips_foreign_load_nsgif_bitmap_destroy, vips_foreign_load_nsgif_bitmap_get_buffer, }; static void vips_foreign_load_nsgif_init(VipsForeignLoadNsgif *gif) { nsgif_error result = nsgif_create( &vips_foreign_load_nsgif_bitmap_callbacks, NSGIF_BITMAP_FMT_R8G8B8A8, &gif->anim); if (result != NSGIF_OK) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(gif); vips_error(class->nickname, "%s", nsgif_strerror(result)); return; } gif->n = 1; gif->frame_number = -1; gif->bitmap = NULL; } typedef struct _VipsForeignLoadNsgifFile { VipsForeignLoadNsgif parent_object; /* Filename for load. */ char *filename; } VipsForeignLoadNsgifFile; typedef VipsForeignLoadNsgifClass VipsForeignLoadNsgifFileClass; G_DEFINE_TYPE(VipsForeignLoadNsgifFile, vips_foreign_load_nsgif_file, vips_foreign_load_nsgif_get_type()); static int vips_foreign_load_gif_file_build(VipsObject *object) { VipsForeignLoadNsgif *gif = (VipsForeignLoadNsgif *) object; VipsForeignLoadNsgifFile *file = (VipsForeignLoadNsgifFile *) object; if (file->filename) if (!(gif->source = vips_source_new_from_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_nsgif_file_parent_class) ->build(object)) return -1; return 0; } static const char *vips_foreign_nsgif_suffs[] = { ".gif", NULL }; static gboolean vips_foreign_load_nsgif_file_is_a(const char *filename) { VipsSource *source; gboolean result; if (!(source = vips_source_new_from_file(filename))) return FALSE; result = vips_foreign_load_nsgif_is_a_source(source); VIPS_UNREF(source); return result; } static void vips_foreign_load_nsgif_file_class_init( VipsForeignLoadNsgifFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "gifload"; object_class->description = _("load GIF with libnsgif"); object_class->build = vips_foreign_load_gif_file_build; foreign_class->suffs = vips_foreign_nsgif_suffs; load_class->is_a = vips_foreign_load_nsgif_file_is_a; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadNsgifFile, filename), NULL); } static void vips_foreign_load_nsgif_file_init(VipsForeignLoadNsgifFile *file) { } typedef struct _VipsForeignLoadNsgifBuffer { VipsForeignLoadNsgif parent_object; /* Load from a buffer. */ VipsArea *blob; } VipsForeignLoadNsgifBuffer; typedef VipsForeignLoadNsgifClass VipsForeignLoadNsgifBufferClass; G_DEFINE_TYPE(VipsForeignLoadNsgifBuffer, vips_foreign_load_nsgif_buffer, vips_foreign_load_nsgif_get_type()); static int vips_foreign_load_nsgif_buffer_build(VipsObject *object) { VipsForeignLoadNsgif *gif = (VipsForeignLoadNsgif *) object; VipsForeignLoadNsgifBuffer *buffer = (VipsForeignLoadNsgifBuffer *) object; if (buffer->blob && !(gif->source = vips_source_new_from_memory( buffer->blob->data, buffer->blob->length))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_nsgif_buffer_parent_class) ->build(object)) return -1; return 0; } static gboolean vips_foreign_load_nsgif_buffer_is_a_buffer(const void *buf, size_t len) { VipsSource *source; gboolean result; if (!(source = vips_source_new_from_memory(buf, len))) return FALSE; result = vips_foreign_load_nsgif_is_a_source(source); VIPS_UNREF(source); return result; } static void vips_foreign_load_nsgif_buffer_class_init( VipsForeignLoadNsgifBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "gifload_buffer"; object_class->description = _("load GIF with libnsgif"); object_class->build = vips_foreign_load_nsgif_buffer_build; load_class->is_a_buffer = vips_foreign_load_nsgif_buffer_is_a_buffer; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadNsgifBuffer, blob), VIPS_TYPE_BLOB); } static void vips_foreign_load_nsgif_buffer_init(VipsForeignLoadNsgifBuffer *buffer) { } typedef struct _VipsForeignLoadNsgifSource { VipsForeignLoadNsgif parent_object; /* Load from a source. */ VipsSource *source; } VipsForeignLoadNsgifSource; typedef VipsForeignLoadClass VipsForeignLoadNsgifSourceClass; G_DEFINE_TYPE(VipsForeignLoadNsgifSource, vips_foreign_load_nsgif_source, vips_foreign_load_nsgif_get_type()); static int vips_foreign_load_nsgif_source_build(VipsObject *object) { VipsForeignLoadNsgif *gif = (VipsForeignLoadNsgif *) object; VipsForeignLoadNsgifSource *source = (VipsForeignLoadNsgifSource *) object; if (source->source) { gif->source = source->source; g_object_ref(gif->source); } if (VIPS_OBJECT_CLASS(vips_foreign_load_nsgif_source_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_load_nsgif_source_class_init( VipsForeignLoadNsgifSourceClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "gifload_source"; object_class->description = _("load gif from source"); object_class->build = vips_foreign_load_nsgif_source_build; operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_nsgif_is_a_source; VIPS_ARG_OBJECT(class, "source", 1, _("Source"), _("Source to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadNsgifSource, source), VIPS_TYPE_SOURCE); } static void vips_foreign_load_nsgif_source_init(VipsForeignLoadNsgifSource *source) { } #endif /*HAVE_NSGIF*/ /** * vips_gifload: * @filename: file to load * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @page: %gint, page (frame) to read * * @n: %gint, load this many pages * * @fail_on: #VipsFailOn, types of read error to fail on * * Read a GIF file into a libvips image. * * Use @page to select a page to render, numbering from zero. * * Use @n to select the number of pages to render. The default is 1. Pages are * rendered in a vertical column. Set to -1 to mean "until the end of the * document". Use vips_grid() to change page layout. * * Use @fail_on to set the type of error that will cause load to fail. By * default, loaders are permissive, that is, #VIPS_FAIL_ON_NONE. * * The output image is RGBA for GIFs containing transparent elements, RGB * otherwise. * * See also: vips_image_new_from_file(). * * Returns: 0 on success, -1 on error. */ int vips_gifload(const char *filename, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("gifload", ap, filename, out); va_end(ap); return result; } /** * vips_gifload_buffer: * @buf: (array length=len) (element-type guint8): memory area to load * @len: (type gsize): size of memory area * @out: (out): image to write * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @page: %gint, page (frame) to read * * @n: %gint, load this many pages * * @fail_on: #VipsFailOn, types of read error to fail on * * Exactly as vips_gifload(), but read from a memory buffer. * * You must not free the buffer while @out is active. The * #VipsObject::postclose signal on @out is a good place to free. * * See also: vips_gifload(). * * Returns: 0 on success, -1 on error. */ int vips_gifload_buffer(void *buf, size_t len, VipsImage **out, ...) { va_list ap; VipsBlob *blob; int result; /* We don't take a copy of the data or free it. */ blob = vips_blob_new(NULL, buf, len); va_start(ap, out); result = vips_call_split("gifload_buffer", ap, blob, out); va_end(ap); vips_area_unref(VIPS_AREA(blob)); return result; } /** * vips_gifload_source: * @source: source to load * @out: (out): image to write * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @page: %gint, page (frame) to read * * @n: %gint, load this many pages * * @fail_on: #VipsFailOn, types of read error to fail on * * Exactly as vips_gifload(), but read from a source. * * See also: vips_gifload(). * * Returns: 0 on success, -1 on error. */ int vips_gifload_source(VipsSource *source, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("gifload_source", ap, source, out); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/openexr2vips.c000066400000000000000000000215331454007373500212030ustar00rootroot00000000000000/* Convert OpenEXR to VIPS * * 1/5/06 * - from im_png2vips.c * 17/5/06 * - oops, buffer calcs were wrong * 19/5/06 * - added tiled read, with a separate cache * - removed *255 we had before, better to do something clever with * chromaticities * 4/2/10 * - gtkdoc * 12/12/11 * - redo as a set of fns ready for wrapping in a new-style class * 17/9/16 * - tag output as scRGB * 16/8/18 * - shut down the input file as soon as we can [kleisauke] */ /* TODO - colour management - attributes - more of OpenEXR's pixel formats - more than just RGBA channels - turn alpha to vips 0 - 255 from exr 0 - 1 the openexr C API is very limited ... it seems RGBA half pixels is all you can do openexr lets you have different formats in different channels :-( there's no API to read the "chromaticities" attribute :-( best redo with the C++ API now we support C++ operations */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #ifdef HAVE_OPENEXR #include #include #include #include #include #include #include #include #include "pforeign.h" /* What we track during a OpenEXR read. */ typedef struct { char *filename; VipsImage *out; ImfTiledInputFile *tiles; ImfInputFile *lines; const ImfHeader *header; VipsRect window; int tile_width; int tile_height; } Read; gboolean vips__openexr_isexr(const char *filename) { unsigned char buf[4]; if (vips__get_bytes(filename, buf, 4) == 4) if (buf[0] == 0x76 && buf[1] == 0x2f && buf[2] == 0x31 && buf[3] == 0x01) return TRUE; return FALSE; } static void get_imf_error(void) { vips_error("exr2vips", _("EXR error: %s"), ImfErrorMessage()); } static void read_close(Read *read) { VIPS_FREEF(ImfCloseTiledInputFile, read->tiles); VIPS_FREEF(ImfCloseInputFile, read->lines); } static void read_destroy(VipsImage *out, Read *read) { VIPS_FREE(read->filename); read_close(read); g_free(read); } static Read * read_new(const char *filename, VipsImage *out) { Read *read; int xmin, ymin; int xmax, ymax; if (!(read = VIPS_NEW(NULL, Read))) return NULL; read->filename = vips_strdup(NULL, filename); read->out = out; read->tiles = NULL; read->lines = NULL; if (out) g_signal_connect(out, "close", G_CALLBACK(read_destroy), read); /* Try to open tiled first ... if that fails, fall back to scanlines. FIXME ... seems a bit ugly, but how else can you spot a tiled EXR image? */ if (!(read->tiles = ImfOpenTiledInputFile(read->filename))) { if (!(read->lines = ImfOpenInputFile(read->filename))) { get_imf_error(); return NULL; } } #ifdef DEBUG if (read->tiles) printf("exr2vips: opening in tiled mode\n"); else printf("exr2vips: opening in scanline mode\n"); #endif /*DEBUG*/ if (read->tiles) { read->header = ImfTiledInputHeader(read->tiles); read->tile_width = ImfTiledInputTileXSize(read->tiles); read->tile_height = ImfTiledInputTileYSize(read->tiles); } else read->header = ImfInputHeader(read->lines); ImfHeaderDataWindow(read->header, &xmin, &ymin, &xmax, &ymax); read->window.left = xmin; read->window.top = ymin; read->window.width = xmax - xmin + 1; read->window.height = ymax - ymin + 1; return read; } gboolean vips__openexr_istiled(const char *filename) { Read *read; gboolean tiled; if (!(read = read_new(filename, NULL))) return FALSE; tiled = read->tiles != NULL; read_destroy(NULL, read); return tiled; } /* Read a OpenEXR file (header) into a VIPS (header). */ static void read_header(Read *read, VipsImage *out) { VipsDemandStyle hint; /* FIXME ... not really scRGB, you should get the chromaticities from the header and transform */ vips_image_init_fields(out, read->window.width, read->window.height, 4, VIPS_FORMAT_FLOAT, VIPS_CODING_NONE, VIPS_INTERPRETATION_scRGB, 1.0, 1.0); if (read->tiles) /* Even though this is a tiled reader, we hint thinstrip * since with the cache we are quite happy serving that if * anything downstream would like it. */ hint = VIPS_DEMAND_STYLE_THINSTRIP; else hint = VIPS_DEMAND_STYLE_FATSTRIP; (void) vips_image_pipelinev(out, hint, NULL); } int vips__openexr_read_header(const char *filename, VipsImage *out) { Read *read; if (!(read = read_new(filename, out))) return -1; read_header(read, out); read_close(read); return 0; } /* Allocate a tile buffer. */ static void * vips__openexr_start(VipsImage *out, void *a, void *b) { Read *read = (Read *) a; ImfRgba *imf_buffer; if (!(imf_buffer = VIPS_ARRAY(out, read->tile_width * read->tile_height, ImfRgba))) return NULL; return imf_buffer; } static int vips__openexr_generate(VipsRegion *out, void *seq, void *a, void *b, gboolean *top) { ImfRgba *imf_buffer = (ImfRgba *) seq; Read *read = (Read *) a; VipsRect *r = &out->valid; const int tw = read->tile_width; const int th = read->tile_height; /* Find top left of tiles we need. */ const int xs = (r->left / tw) * tw; const int ys = (r->top / th) * th; int x, y, z; VipsRect image; /* Area of image. */ image.left = 0; image.top = 0; image.width = read->out->Xsize; image.height = read->out->Ysize; for (y = ys; y < VIPS_RECT_BOTTOM(r); y += th) for (x = xs; x < VIPS_RECT_RIGHT(r); x += tw) { VipsRect tile; VipsRect hit; int result; if (!ImfTiledInputSetFrameBuffer(read->tiles, imf_buffer - (read->window.left + x) - (read->window.top + y) * tw, 1, tw)) { vips_foreign_load_invalidate(read->out); get_imf_error(); return -1; } #ifdef DEBUG printf("exr2vips: requesting tile %d x %d\n", x / tw, y / th); #endif /*DEBUG*/ result = ImfTiledInputReadTile(read->tiles, x / tw, y / th, 0, 0); if (!result) { get_imf_error(); return -1; } /* The tile in the file, in VIPS coordinates. */ tile.left = x; tile.top = y; tile.width = tw; tile.height = th; vips_rect_intersectrect(&tile, &image, &tile); /* The part of this tile that hits the region. */ vips_rect_intersectrect(&tile, r, &hit); /* Convert to float and write to the region. */ for (z = 0; z < hit.height; z++) { ImfRgba *p = imf_buffer + (hit.left - tile.left) + (hit.top - tile.top + z) * tw; float *q = (float *) VIPS_REGION_ADDR(out, hit.left, hit.top + z); ImfHalfToFloatArray(4 * hit.width, (ImfHalf *) p, q); } } return 0; } int vips__openexr_read(const char *filename, VipsImage *out) { Read *read; if (!(read = read_new(filename, out))) return -1; if (read->tiles) { VipsImage *raw; VipsImage *t; /* Tile cache: keep enough for two complete rows of tiles, * plus 50%. */ raw = vips_image_new(); vips_object_local(out, raw); read_header(read, raw); if (vips_image_generate(raw, vips__openexr_start, vips__openexr_generate, NULL, read, NULL)) return -1; if (vips_tilecache(raw, &t, "tile_width", read->tile_width, "tile_height", read->tile_height, "max_tiles", (int) (2.5 * (1 + raw->Xsize / read->tile_width)), NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); } else { const int left = read->window.left; const int top = read->window.top; const int width = read->window.width; const int height = read->window.height; ImfRgba *imf_buffer; float *vips_buffer; int y; if (!(imf_buffer = VIPS_ARRAY(out, width, ImfRgba)) || !(vips_buffer = VIPS_ARRAY(out, 4 * width, float))) return -1; read_header(read, out); for (y = 0; y < height; y++) { if (!ImfInputSetFrameBuffer(read->lines, imf_buffer - left - (top + y) * width, 1, width)) { get_imf_error(); return -1; } if (!ImfInputReadPixels(read->lines, top + y, top + y)) { get_imf_error(); return -1; } ImfHalfToFloatArray(4 * width, (ImfHalf *) imf_buffer, vips_buffer); if (vips_image_write_line(out, y, (VipsPel *) vips_buffer)) return -1; } read_close(read); } return 0; } #endif /*HAVE_OPENEXR*/ libvips-8.15.1/libvips/foreign/openexrload.c000066400000000000000000000111451454007373500210550ustar00rootroot00000000000000/* load openexr from a file * * 5/12/11 * - from openslideload.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #ifdef HAVE_OPENEXR #include "pforeign.h" typedef struct _VipsForeignLoadOpenexr { VipsForeignLoad parent_object; /* Filename for load. */ char *filename; } VipsForeignLoadOpenexr; typedef VipsForeignLoadClass VipsForeignLoadOpenexrClass; G_DEFINE_TYPE(VipsForeignLoadOpenexr, vips_foreign_load_openexr, VIPS_TYPE_FOREIGN_LOAD); static VipsForeignFlags vips_foreign_load_openexr_get_flags_filename(const char *filename) { VipsForeignFlags flags; flags = 0; if (vips__openexr_istiled(filename)) flags |= VIPS_FOREIGN_PARTIAL; return flags; } static VipsForeignFlags vips_foreign_load_openexr_get_flags(VipsForeignLoad *load) { VipsForeignLoadOpenexr *openexr = (VipsForeignLoadOpenexr *) load; return vips_foreign_load_openexr_get_flags_filename( openexr->filename); } static int vips_foreign_load_openexr_header(VipsForeignLoad *load) { VipsForeignLoadOpenexr *openexr = (VipsForeignLoadOpenexr *) load; if (vips__openexr_read_header(openexr->filename, load->out)) return -1; VIPS_SETSTR(load->out->filename, openexr->filename); return 0; } static int vips_foreign_load_openexr_load(VipsForeignLoad *load) { VipsForeignLoadOpenexr *openexr = (VipsForeignLoadOpenexr *) load; if (vips__openexr_read(openexr->filename, load->real)) return -1; return 0; } static const char *vips_foreign_openexr_suffs[] = { ".exr", NULL }; static void vips_foreign_load_openexr_class_init(VipsForeignLoadOpenexrClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "openexrload"; object_class->description = _("load an OpenEXR image"); /* OpenEXR is fuzzed, but not by us. */ operation_class->flags |= VIPS_OPERATION_UNTRUSTED; foreign_class->suffs = vips_foreign_openexr_suffs; /* We are fast at is_a(), so high priority. */ foreign_class->priority = 200; load_class->is_a = vips__openexr_isexr; load_class->get_flags_filename = vips_foreign_load_openexr_get_flags_filename; load_class->get_flags = vips_foreign_load_openexr_get_flags; load_class->header = vips_foreign_load_openexr_header; load_class->load = vips_foreign_load_openexr_load; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadOpenexr, filename), NULL); } static void vips_foreign_load_openexr_init(VipsForeignLoadOpenexr *openexr) { } #endif /*HAVE_OPENEXR*/ /** * vips_openexrload: * @filename: file to load * @out: (out): decompressed image * @...: %NULL-terminated list of optional named arguments * * Read a OpenEXR file into a VIPS image. * * The reader can handle scanline and tiled OpenEXR images. It can't handle * OpenEXR colour management, image attributes, many pixel formats, anything * other than RGBA. * * This reader uses the rather limited OpenEXR C API. It should really be * redone in C++. * * See also: vips_image_new_from_file(). * * Returns: 0 on success, -1 on error. */ int vips_openexrload(const char *filename, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("openexrload", ap, filename, out); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/openslideload.c000066400000000000000000000751421454007373500213660ustar00rootroot00000000000000/* Read a virtual microscope slide using OpenSlide. * * Benjamin Gilbert * * Copyright (c) 2011-2015 Carnegie Mellon University * * 26/11/11 * - initial version * 27/11/11 * - fix black background in transparent areas * - no need to set *stop on fill_region() error return * - add OpenSlide properties to image metadata * - consolidate setup into one function * - support reading arbitrary layers * - use VIPS_ARRAY() * - add helper to copy a line of pixels * - support reading associated images * 7/12/11 * - redirect OpenSlide error logging to vips_error() * 8/12/11 * - add more exposition to documentation * 9/12/11 * - unpack to a tile cache * 11/12/11 * - move argb->rgba into conversion * - turn into a set of read fns ready to be called from a class * 28/2/12 * - convert "layer" to "level" where externally visible * 9/4/12 * - move argb2rgba back in here, we don't have a use for coded pixels * - small cleanups * 11/4/12 * - fail if both level and associated image are specified * 20/9/12 * - update openslide_open error handling for 3.3.0 semantics * - switch from deprecated _layer_ functions * 11/10/12 * - look for tile-width and tile-height properties * - use threaded tile cache * 6/8/13 * - always output solid (not transparent) pixels * 25/1/14 * - use openslide_detect_vendor() on >= 3.4.0 * 30/7/14 * - add autocrop toggle * 9/8/14 * - do argb -> rgba for associated as well * 27/1/15 * - unpremultiplication speedups for fully opaque/transparent pixels * 18/1/17 * - reorganise to support invalidate on read error * 27/1/18 * - option to attach associated images as metadata * 22/6/20 adamu * - set libvips xres/yres from openslide mpp-x/mpp-y * 13/2/21 kleisauke * - include GObject part from openslideload.c * 2/10/22 * - add "rgb" option * 1/10/23 * - add openslide4 icc profile support */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #ifdef HAVE_OPENSLIDE #include #include #include #include #include #include #include "pforeign.h" #include typedef struct { /* Params. */ char *filename; VipsImage *out; int32_t level; gboolean autocrop; char *associated; gboolean attach_associated; gboolean rgb; openslide_t *osr; /* Crop to image bounds if @autocrop is set. */ VipsRect bounds; /* Only valid if associated == NULL. */ double downsample; uint32_t bg; /* Try to get these from openslide properties. */ int tile_width; int tile_height; } ReadSlide; static int vips__openslide_isslide(const char *filename) { #ifdef HAVE_OPENSLIDE_3_4 const char *vendor; int ok; vendor = openslide_detect_vendor(filename); /* Generic tiled tiff images can be opened by openslide as well. * Only offer to load this file if it's not a generic tiff since * we want vips_tiffload() to handle these. */ ok = (vendor && strcmp(vendor, "generic-tiff") != 0); VIPS_DEBUG_MSG("vips__openslide_isslide: %s - %d\n", filename, ok); return ok; #else openslide_t *osr; int ok; ok = 0; osr = openslide_open(filename); if (osr) { const char *vendor; /* Generic tiled tiff images can be opened by openslide as * well. Only offer to load this file if it's not a generic * tiff since we want vips_tiffload() to handle these. */ vendor = openslide_get_property_value(osr, OPENSLIDE_PROPERTY_NAME_VENDOR); /* vendor will be NULL if osr is in error state. */ if (vendor && strcmp(vendor, "generic-tiff") != 0) ok = 1; openslide_close(osr); } VIPS_DEBUG_MSG("vips__openslide_isslide: %s - %d\n", filename, ok); return ok; #endif } static void readslide_destroy_cb(VipsImage *image, ReadSlide *rslide) { VIPS_FREEF(openslide_close, rslide->osr); VIPS_FREE(rslide->associated); VIPS_FREE(rslide->filename); VIPS_FREE(rslide); } static int check_associated_image(openslide_t *osr, const char *name) { const char *const *associated; for (associated = openslide_get_associated_image_names(osr); *associated != NULL; associated++) if (strcmp(*associated, name) == 0) return 0; vips_error("openslide2vips", "%s", _("invalid associated image name")); return -1; } static gboolean get_bounds(openslide_t *osr, VipsRect *rect) { static const char *openslide_names[] = { "openslide.bounds-x", "openslide.bounds-y", "openslide.bounds-width", "openslide.bounds-height" }; static int vips_offsets[] = { G_STRUCT_OFFSET(VipsRect, left), G_STRUCT_OFFSET(VipsRect, top), G_STRUCT_OFFSET(VipsRect, width), G_STRUCT_OFFSET(VipsRect, height) }; const char *value; int i; for (i = 0; i < 4; i++) { if (!(value = openslide_get_property_value(osr, openslide_names[i]))) return FALSE; G_STRUCT_MEMBER(int, rect, vips_offsets[i]) = atoi(value); } return TRUE; } static ReadSlide * readslide_new(const char *filename, VipsImage *out, int level, gboolean autocrop, const char *associated, gboolean attach_associated, gboolean rgb) { ReadSlide *rslide; if (level && associated) { vips_error("openslide2vips", "%s", _("specify only one of level and associated image")); return NULL; } if (attach_associated && associated) { vips_error("openslide2vips", "%s", _("specify only one of attach_assicated and associated image")); return NULL; } rslide = VIPS_NEW(NULL, ReadSlide); memset(rslide, 0, sizeof(*rslide)); g_signal_connect(out, "close", G_CALLBACK(readslide_destroy_cb), rslide); rslide->filename = g_strdup(filename); rslide->out = out; rslide->level = level; rslide->autocrop = autocrop; rslide->associated = g_strdup(associated); rslide->attach_associated = attach_associated; rslide->rgb = rgb; /* Non-crazy defaults, override in _parse() if we can. */ rslide->tile_width = 256; rslide->tile_height = 256; return rslide; } /* Convert from ARGB to RGBA and undo premultiplication. * * We throw away transparency. Formats like Mirax use transparent + bg * colour for areas with no useful pixels. But if we output * transparent pixels and then convert to RGB for jpeg write later, we * would have to pass the bg colour down the pipe somehow. The * structure of dzsave makes this tricky. * * We could output plain RGB instead, but that would break * compatibility with older vipses. */ static void argb2rgba(uint32_t *restrict buf, int64_t n, uint32_t bg) { const uint32_t pbg = GUINT32_TO_BE((bg << 8) | 255); int64_t i; for (i = 0; i < n; i++) { uint32_t *restrict p = buf + i; uint32_t x = *p; uint8_t a = x >> 24; VipsPel *restrict out = (VipsPel *) p; if (a == 255) *p = GUINT32_TO_BE((x << 8) | 255); else if (a == 0) /* Use background color. */ *p = pbg; else { /* Undo premultiplication. */ out[0] = 255 * ((x >> 16) & 255) / a; out[1] = 255 * ((x >> 8) & 255) / a; out[2] = 255 * (x & 255) / a; out[3] = 255; } } } /* Convert from ARGB to RGB. In RGB mode, assume a is always 255. */ static void argb2rgb(uint32_t *restrict buf, VipsPel *restrict q, int64_t n) { int64_t i; for (i = 0; i < n; i++) { uint32_t x = buf[i]; q[0] = ((x >> 16) & 0xff); q[1] = ((x >> 8) & 0xff); q[2] = (x & 0xff); q += 3; } } static VipsImage * vips__openslide_get_associated(ReadSlide *rslide, const char *associated_name) { VipsImage *associated; int64_t w, h; const char *error; associated = vips_image_new_memory(); openslide_get_associated_image_dimensions(rslide->osr, associated_name, &w, &h); /* Always 4 bands, since this is the image that gets the ARGB from * cairo. */ vips_image_init_fields(associated, w, h, 4, VIPS_FORMAT_UCHAR, VIPS_CODING_NONE, VIPS_INTERPRETATION_sRGB, 1.0, 1.0); #ifdef HAVE_OPENSLIDE_ICC int64_t len; if ((len = openslide_get_associated_image_icc_profile_size(rslide->osr, associated_name)) > 0) { void *data; if (!(data = VIPS_MALLOC(NULL, len))) { g_object_unref(associated); return NULL; } openslide_read_associated_image_icc_profile(rslide->osr, associated_name, data); error = openslide_get_error(rslide->osr); if (error) { g_free(data); g_object_unref(associated); vips_error("openslide2vips", _( "opening slide: %s" ), error); return NULL; } vips_image_set_blob(associated, VIPS_META_ICC_NAME, (VipsCallbackFn) g_free, data, len); } #endif /*HAVE_OPENSLIDE_ICC*/ if (vips_image_pipelinev(associated, VIPS_DEMAND_STYLE_THINSTRIP, NULL) || vips_image_write_prepare(associated)) { g_object_unref(associated); return NULL; } openslide_read_associated_image(rslide->osr, associated_name, (uint32_t *) VIPS_IMAGE_ADDR(associated, 0, 0)); error = openslide_get_error(rslide->osr); if (error) { vips_error("openslide2vips", _("reading associated image: %s"), error); g_object_unref(associated); return NULL; } /* In RGB mode we make a second RGB image and repack to that. */ if (rslide->rgb) { VipsImage *rgb; rgb = vips_image_new_memory(); vips_object_local(rgb, associated); vips_image_init_fields(rgb, w, h, 3, VIPS_FORMAT_UCHAR, VIPS_CODING_NONE, VIPS_INTERPRETATION_sRGB, 1.0, 1.0); if (vips_image_pipelinev(rgb, VIPS_DEMAND_STYLE_THINSTRIP, NULL) || vips_image_write_prepare(rgb)) { g_object_unref(rgb); return NULL; } argb2rgb((uint32_t *) VIPS_IMAGE_ADDR(associated, 0, 0), VIPS_IMAGE_ADDR(rgb, 0, 0), w * h); associated = rgb; } else /* We can do this in place. */ argb2rgba((uint32_t *) VIPS_IMAGE_ADDR(associated, 0, 0), w * h, rslide->bg); return associated; } static int readslide_attach_associated(ReadSlide *rslide, VipsImage *image) { const char *const *associated_name; for (associated_name = openslide_get_associated_image_names(rslide->osr); *associated_name != NULL; associated_name++) { VipsImage *associated; char buf[256]; if (!(associated = vips__openslide_get_associated(rslide, *associated_name))) return -1; vips_snprintf(buf, 256, "openslide.associated.%s", *associated_name); vips_image_set_image(image, buf, associated); g_object_unref(associated); } return 0; } /* Read out a resolution field, converting to pixels per mm. */ static double readslice_parse_res(ReadSlide *rslide, const char *name) { const char *value = openslide_get_property_value(rslide->osr, name); double mpp = g_ascii_strtod(value, NULL); return mpp == 0 ? 1.0 : 1000.0 / mpp; } static int readslide_parse(ReadSlide *rslide, VipsImage *image) { int64_t w, h; const char *error; const char *background; const char *const *properties; char *associated_names; double xres; double yres; rslide->osr = openslide_open(rslide->filename); if (!rslide->osr) { vips_error("openslide2vips", "%s", _("unsupported slide format")); return -1; } error = openslide_get_error(rslide->osr); if (error) { vips_error("openslide2vips", _("opening slide: %s"), error); return -1; } if (rslide->level < 0 || rslide->level >= openslide_get_level_count(rslide->osr)) { vips_error("openslide2vips", "%s", _("invalid slide level")); return -1; } if (rslide->associated && check_associated_image(rslide->osr, rslide->associated)) return -1; if (rslide->associated) { openslide_get_associated_image_dimensions(rslide->osr, rslide->associated, &w, &h); vips_image_set_string(image, "slide-associated-image", rslide->associated); if (vips_image_pipelinev(image, VIPS_DEMAND_STYLE_THINSTRIP, NULL)) return -1; } else { char buf[256]; const char *value; openslide_get_level_dimensions(rslide->osr, rslide->level, &w, &h); rslide->downsample = openslide_get_level_downsample( rslide->osr, rslide->level); vips_image_set_int(image, "slide-level", rslide->level); if (vips_image_pipelinev(image, VIPS_DEMAND_STYLE_SMALLTILE, NULL)) return -1; /* Try to get tile width/height. An undocumented, experimental * feature. */ vips_snprintf(buf, 256, "openslide.level[%d].tile-width", rslide->level); if ((value = openslide_get_property_value(rslide->osr, buf))) rslide->tile_width = atoi(value); vips_snprintf(buf, 256, "openslide.level[%d].tile-height", rslide->level); if ((value = openslide_get_property_value(rslide->osr, buf))) rslide->tile_height = atoi(value); if (value) VIPS_DEBUG_MSG("readslide_new: found tile-size\n"); /* Some images have a bounds in the header. Crop to * that if autocrop is set. */ if (rslide->autocrop) if (!get_bounds(rslide->osr, &rslide->bounds)) rslide->autocrop = FALSE; if (rslide->autocrop) { VipsRect whole; rslide->bounds.left /= rslide->downsample; rslide->bounds.top /= rslide->downsample; rslide->bounds.width /= rslide->downsample; rslide->bounds.height /= rslide->downsample; /* Clip against image size. */ whole.left = 0; whole.top = 0; whole.width = w; whole.height = h; vips_rect_intersectrect(&rslide->bounds, &whole, &rslide->bounds); /* If we've clipped to nothing, ignore bounds. */ if (vips_rect_isempty(&rslide->bounds)) rslide->autocrop = FALSE; } if (rslide->autocrop) { w = rslide->bounds.width; h = rslide->bounds.height; } /* Attach all associated images. */ if (rslide->attach_associated && readslide_attach_associated(rslide, image)) return -1; } rslide->bg = 0xffffff; if ((background = openslide_get_property_value(rslide->osr, OPENSLIDE_PROPERTY_NAME_BACKGROUND_COLOR))) rslide->bg = strtoul(background, NULL, 16); if (w <= 0 || h <= 0 || rslide->downsample < 0) { vips_error("openslide2vips", _("getting dimensions: %s"), openslide_get_error(rslide->osr)); return -1; } if (w > INT_MAX || h > INT_MAX) { vips_error("openslide2vips", "%s", _("image dimensions overflow int")); return -1; } if (!rslide->autocrop) { rslide->bounds.left = 0; rslide->bounds.top = 0; rslide->bounds.width = w; rslide->bounds.height = h; } /* Try to get resolution from openslide properties. */ xres = 1.0; yres = 1.0; for (properties = openslide_get_property_names(rslide->osr); *properties != NULL; properties++) { const char *name = *properties; const char *value = openslide_get_property_value(rslide->osr, name); /* Can be NULL for some openslides with some images. */ if (value) { vips_image_set_string(image, name, value); if (strcmp(*properties, "openslide.mpp-x") == 0) xres = readslice_parse_res(rslide, name); if (strcmp(*properties, "openslide.mpp-y") == 0) yres = readslice_parse_res(rslide, name); } } associated_names = g_strjoinv(", ", (char **) openslide_get_associated_image_names(rslide->osr)); vips_image_set_string(image, "slide-associated-images", associated_names); VIPS_FREE(associated_names); vips_image_init_fields(image, w, h, rslide->rgb ? 3 : 4, VIPS_FORMAT_UCHAR, VIPS_CODING_NONE, VIPS_INTERPRETATION_sRGB, xres, yres); #ifdef HAVE_OPENSLIDE_ICC int64_t len; if ((len = openslide_get_icc_profile_size(rslide->osr)) > 0) { void *data; if (!(data = VIPS_MALLOC(NULL, len))) return -1; openslide_read_icc_profile(rslide->osr, data); error = openslide_get_error(rslide->osr); if (error) { g_free(data); vips_error("openslide2vips", _( "opening slide: %s" ), error); return -1; } vips_image_set_blob(image, VIPS_META_ICC_NAME, (VipsCallbackFn) g_free, data, len); } #endif /*HAVE_OPENSLIDE_ICC*/ return 0; } static int vips__openslide_read_header(const char *filename, VipsImage *out, int level, gboolean autocrop, char *associated, gboolean attach_associated, gboolean rgb) { ReadSlide *rslide; if (!(rslide = readslide_new(filename, out, level, autocrop, associated, attach_associated, rgb)) || readslide_parse(rslide, out)) return -1; return 0; } /* Allocate a tile buffer. Have one of these for each thread so we can unpack * to vips in parallel. */ static void * vips__openslide_start(VipsImage *out, void *a, void *b) { ReadSlide *rslide = (ReadSlide *) a; uint32_t *tile_buffer; if (!(tile_buffer = VIPS_MALLOC(NULL, (size_t) rslide->tile_width * rslide->tile_height * 4))) return NULL; return (void *) tile_buffer; } static int vips__openslide_generate(VipsRegion *out, void *_seq, void *_rslide, void *unused, gboolean *stop) { uint32_t *tile_buffer = (uint32_t *) _seq; ReadSlide *rslide = _rslide; uint32_t bg = rslide->bg; VipsRect *r = &out->valid; int n = r->width * r->height; uint32_t *buf; const char *error; VIPS_DEBUG_MSG("vips__openslide_generate: %dx%d @ %dx%d\n", r->width, r->height, r->left, r->top); /* We're inside a cache, so requests should always be * tile_width by tile_height pixels and on a tile boundary. */ g_assert((r->left % rslide->tile_width) == 0); g_assert((r->top % rslide->tile_height) == 0); g_assert(r->width <= rslide->tile_width); g_assert(r->height <= rslide->tile_height); /* The memory on the region should be contiguous. */ g_assert(VIPS_REGION_LSKIP(out) == r->width * out->im->Bands); /* In RGB mode we need to read to the tile buffer. */ if (rslide->rgb) { g_assert(tile_buffer); g_assert(rslide->tile_width >= r->width); g_assert(rslide->tile_height >= r->height); buf = tile_buffer; } else buf = (uint32_t *) VIPS_REGION_ADDR(out, r->left, r->top); openslide_read_region(rslide->osr, buf, (r->left + rslide->bounds.left) * rslide->downsample, (r->top + rslide->bounds.top) * rslide->downsample, rslide->level, r->width, r->height); /* openslide errors are terminal. To support * @fail we'd have to close the openslide_t and reopen, perhaps * somehow marking this tile as unreadable. * * See * https://github.com/libvips/libvips/commit/bb0a6643f94e69294e36d2b253f9bdd60c8c40ed#commitcomment-19838911 */ error = openslide_get_error(rslide->osr); if (error) { vips_error("openslide2vips", _("reading region: %s"), error); return -1; } if (rslide->rgb) argb2rgb(tile_buffer, VIPS_REGION_ADDR(out, r->left, r->top), n); else argb2rgba(buf, n, bg); return 0; } static int vips__openslide_stop(void *_seq, void *a, void *b) { uint32_t *tile_buffer = (uint32_t *) _seq; VIPS_FREE(tile_buffer); return 0; } static int vips__openslide_read(const char *filename, VipsImage *out, int level, gboolean autocrop, gboolean attach_associated, gboolean rgb) { ReadSlide *rslide; VipsImage *raw; VipsImage *t; VIPS_DEBUG_MSG("vips__openslide_read: %s %d\n", filename, level); if (!(rslide = readslide_new(filename, out, level, autocrop, NULL, attach_associated, rgb))) return -1; raw = vips_image_new(); vips_object_local(out, raw); if (readslide_parse(rslide, raw) || vips_image_generate(raw, vips__openslide_start, vips__openslide_generate, vips__openslide_stop, rslide, NULL)) return -1; /* Copy to out, adding a cache. Enough tiles for two complete rows, * plus 50%. We need at least two rows, or we'll constantly reload * tiles if they cross a tile boundary. */ if (vips_tilecache(raw, &t, "tile_width", rslide->tile_width, "tile_height", rslide->tile_height, "max_tiles", (int) (2.5 * (1 + raw->Xsize / rslide->tile_width)), "threaded", TRUE, NULL)) return -1; if (vips_image_write(t, out)) { g_object_unref(t); return -1; } g_object_unref(t); return 0; } static int vips__openslide_read_associated(const char *filename, VipsImage *out, const char *associated_name, gboolean rgb) { ReadSlide *rslide; VipsImage *associated; VIPS_DEBUG_MSG("vips__openslide_read_associated: %s %s\n", filename, associated_name); if (!(rslide = readslide_new(filename, out, 0, FALSE, associated_name, FALSE, rgb))) return -1; rslide->osr = openslide_open(rslide->filename); if (!(associated = vips__openslide_get_associated(rslide, associated_name))) return -1; if (vips_image_write(associated, out)) { VIPS_UNREF(associated); return -1; } VIPS_UNREF(associated); return 0; } typedef struct _VipsForeignLoadOpenslide { VipsForeignLoad parent_object; /* Source to load from (set by subclasses). */ VipsSource *source; /* Filename from source. */ const char *filename; /* Load this level. */ int level; /* Crop to image bounds. */ gboolean autocrop; /* Load just this associated image. */ char *associated; /* Attach all associated images as metadata items. */ gboolean attach_associated; /* Read as RGB, not RGBA. */ gboolean rgb; } VipsForeignLoadOpenslide; typedef VipsForeignLoadClass VipsForeignLoadOpenslideClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignLoadOpenslide, vips_foreign_load_openslide, VIPS_TYPE_FOREIGN_LOAD); static void vips_foreign_load_openslide_dispose(GObject *gobject) { VipsForeignLoadOpenslide *openslide = (VipsForeignLoadOpenslide *) gobject; VIPS_UNREF(openslide->source); G_OBJECT_CLASS(vips_foreign_load_openslide_parent_class)->dispose(gobject); } static int vips_foreign_load_openslide_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsForeignLoadOpenslide *openslide = (VipsForeignLoadOpenslide *) object; /* We can only open source which have an associated filename, since * the openslide library works in terms of filenames. */ if (openslide->source) { VipsConnection *connection = VIPS_CONNECTION(openslide->source); const char *filename; if (!vips_source_is_file(openslide->source) || !(filename = vips_connection_filename(connection))) { vips_error(class->nickname, "%s", _("no filename available")); return -1; } openslide->filename = filename; } if (VIPS_OBJECT_CLASS(vips_foreign_load_openslide_parent_class) ->build(object)) return -1; return 0; } static VipsForeignFlags vips_foreign_load_openslide_get_flags_source(VipsSource *source) { /* We can't tell from just the source, we need to know what part of * the file the user wants. But it'll usually be partial. */ return VIPS_FOREIGN_PARTIAL; } static VipsForeignFlags vips_foreign_load_openslide_get_flags(VipsForeignLoad *load) { VipsForeignLoadOpenslide *openslide = (VipsForeignLoadOpenslide *) load; VipsForeignFlags flags; flags = 0; if (!openslide->associated) flags |= VIPS_FOREIGN_PARTIAL; return flags; } static VipsForeignFlags vips_foreign_load_openslide_get_flags_filename(const char *filename) { VipsSource *source; VipsForeignFlags flags; if (!(source = vips_source_new_from_file(filename))) return 0; flags = vips_foreign_load_openslide_get_flags_source(source); VIPS_UNREF(source); return flags; } static int vips_foreign_load_openslide_header(VipsForeignLoad *load) { VipsForeignLoadOpenslide *openslide = (VipsForeignLoadOpenslide *) load; if (vips__openslide_read_header(openslide->filename, load->out, openslide->level, openslide->autocrop, openslide->associated, openslide->attach_associated, openslide->rgb)) return -1; VIPS_SETSTR(load->out->filename, openslide->filename); return 0; } static int vips_foreign_load_openslide_load(VipsForeignLoad *load) { VipsForeignLoadOpenslide *openslide = (VipsForeignLoadOpenslide *) load; if (!openslide->associated) { if (vips__openslide_read(openslide->filename, load->real, openslide->level, openslide->autocrop, openslide->attach_associated, openslide->rgb)) return -1; } else { if (vips__openslide_read_associated(openslide->filename, load->real, openslide->associated, openslide->rgb)) return -1; } return 0; } static void vips_foreign_load_openslide_class_init(VipsForeignLoadOpenslideClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->dispose = vips_foreign_load_openslide_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "openslideload_base"; object_class->description = _("load OpenSlide base class"); object_class->build = vips_foreign_load_openslide_build; /* We need to be ahead of the tiff sniffer since many OpenSlide * formats are tiff derivatives. If we see a tiff which would be * better handled by the vips tiff loader we are careful to say no. * * We need to be ahead of JPEG, since MRXS images are also * JPEGs. */ foreign_class->priority = 100; /* libopenslide does not try to recover from errors, so it's not safe * to cache. */ operation_class->flags |= VIPS_OPERATION_NOCACHE; /* openslide has not been fuzzed and is largly unmaintained, so should * not be used with untrusted input unless you are very careful. */ operation_class->flags |= VIPS_OPERATION_UNTRUSTED; load_class->get_flags_filename = vips_foreign_load_openslide_get_flags_filename; load_class->get_flags = vips_foreign_load_openslide_get_flags; load_class->header = vips_foreign_load_openslide_header; load_class->load = vips_foreign_load_openslide_load; VIPS_ARG_INT(class, "level", 20, _("Level"), _("Load this level from the file"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadOpenslide, level), 0, 100000, 0); VIPS_ARG_BOOL(class, "autocrop", 21, _("Autocrop"), _("Crop to image bounds"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadOpenslide, autocrop), FALSE); VIPS_ARG_STRING(class, "associated", 22, _("Associated"), _("Load this associated image"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadOpenslide, associated), NULL); VIPS_ARG_BOOL(class, "attach_associated", 23, _("Attach associated"), _("Attach all associated images"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadOpenslide, attach_associated), FALSE); VIPS_ARG_BOOL(class, "rgb", 24, _("RGB"), _("Output RGB (not RGBA)"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadOpenslide, rgb), FALSE); } static void vips_foreign_load_openslide_init(VipsForeignLoadOpenslide *openslide) { } typedef struct _VipsForeignLoadOpenslideFile { VipsForeignLoadOpenslide parent_object; /* Filename for load. */ char *filename; } VipsForeignLoadOpenslideFile; typedef VipsForeignLoadOpenslideClass VipsForeignLoadOpenslideFileClass; G_DEFINE_TYPE(VipsForeignLoadOpenslideFile, vips_foreign_load_openslide_file, vips_foreign_load_openslide_get_type()); static int vips_foreign_load_openslide_file_build(VipsObject *object) { VipsForeignLoadOpenslide *openslide = (VipsForeignLoadOpenslide *) object; VipsForeignLoadOpenslideFile *file = (VipsForeignLoadOpenslideFile *) object; if (file->filename && !(openslide->source = vips_source_new_from_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_openslide_file_parent_class) ->build(object)) return -1; return 0; } static const char *vips_foreign_openslide_suffs[] = { ".svs", /* Aperio */ ".vms", ".vmu", ".ndpi", /* Hamamatsu */ ".scn", /* Leica */ ".mrxs", /* MIRAX */ ".svslide", /* Sakura */ ".tif", /* Trestle */ ".bif", /* Ventana */ NULL }; static void vips_foreign_load_openslide_file_class_init( VipsForeignLoadOpenslideFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "openslideload"; object_class->description = _("load file with OpenSlide"); object_class->build = vips_foreign_load_openslide_file_build; foreign_class->suffs = vips_foreign_openslide_suffs; load_class->is_a = vips__openslide_isslide; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadOpenslideFile, filename), NULL); } static void vips_foreign_load_openslide_file_init(VipsForeignLoadOpenslideFile *openslide) { } typedef struct _VipsForeignLoadOpenslideSource { VipsForeignLoadOpenslide parent_object; /* Load from a source. */ VipsSource *source; } VipsForeignLoadOpenslideSource; typedef VipsForeignLoadOpenslideClass VipsForeignLoadOpenslideSourceClass; G_DEFINE_TYPE(VipsForeignLoadOpenslideSource, vips_foreign_load_openslide_source, vips_foreign_load_openslide_get_type()); static int vips_foreign_load_openslide_source_build(VipsObject *object) { VipsForeignLoadOpenslide *openslide = (VipsForeignLoadOpenslide *) object; VipsForeignLoadOpenslideSource *source = (VipsForeignLoadOpenslideSource *) object; if (source->source) { openslide->source = source->source; g_object_ref(openslide->source); } if (VIPS_OBJECT_CLASS(vips_foreign_load_openslide_source_parent_class) ->build(object)) return -1; return 0; } static gboolean vips_foreign_load_openslide_source_is_a_source(VipsSource *source) { VipsConnection *connection = VIPS_CONNECTION(source); const char *filename; return vips_source_is_file(source) && (filename = vips_connection_filename(connection)) && vips__openslide_isslide(filename); } static void vips_foreign_load_openslide_source_class_init( VipsForeignLoadOpenslideSourceClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "openslideload_source"; object_class->description = _("load source with OpenSlide"); object_class->build = vips_foreign_load_openslide_source_build; load_class->is_a_source = vips_foreign_load_openslide_source_is_a_source; VIPS_ARG_OBJECT(class, "source", 1, _("Source"), _("Source to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadOpenslideSource, source), VIPS_TYPE_SOURCE); } static void vips_foreign_load_openslide_source_init( VipsForeignLoadOpenslideSource *openslide) { } #endif /*HAVE_OPENSLIDE*/ /* The C API wrappers are defined in foreign.c. */ libvips-8.15.1/libvips/foreign/pdfiumload.c000066400000000000000000000571561454007373500206750ustar00rootroot00000000000000/* load PDF with PDFium * * 5/4/18 * - from pdfload.c * 8/6/18 * - add background param * 16/8/18 * - shut down the input file as soon as we can [kleisauke] * 8/8/19 * - add locks, since pdfium is not threadsafe in any way * 13/10/20 * - have a lock just for pdfium [DarthSim] * - update for current pdfium * - add _source input * 28/1/22 * - add password * 21/5/22 * - improve transparency handling [DarthSim] * 21/4/23 * - add support for forms [kleisauke] */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* TODO * * - what about filename encodings? * - need to test on Windows */ /* How to build against PDFium: * * Download the prebuilt binary from: * * https://github.com/bblanchon/pdfium-binaries * * Untar to the libvips install prefix, for example: * * cd ~/vips * tar xf ~/pdfium-linux.tgz * * Create a pdfium.pc like this (update the version number): * VIPSHOME=/home/john/vips cat > $VIPSHOME/lib/pkgconfig/pdfium.pc << EOF prefix=$VIPSHOME exec_prefix=\${prefix} libdir=\${exec_prefix}/lib includedir=\${prefix}/include Name: pdfium Description: pdfium Version: 4290 Requires: Libs: -L\${libdir} -lpdfium Cflags: -I\${includedir} EOF * */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "pforeign.h" #ifdef HAVE_PDFIUM #include #include #include #include #define TILE_SIZE (4000) typedef struct _VipsForeignLoadPdf { VipsForeignLoad parent_object; /* Set by subclasses. */ VipsSource *source; /* Load this page. */ int page_no; /* Load this many pages. */ int n; /* Render at this DPI. */ double dpi; /* Calculate this from DPI. At 72 DPI, we render 1:1. */ double scale; /* Background colour. */ VipsArrayDouble *background; /* Decrypt with this. */ const char *password; FPDF_FILEACCESS file_access; FPDF_DOCUMENT doc; FPDF_PAGE page; FPDF_FORMFILLINFO form_callbacks; FPDF_FORMHANDLE form; int current_page; /* Doc has this many pages. */ int n_pages; /* We need to read out the size of each page we will render, and lay * them out in the final image. */ VipsRect image; VipsRect *pages; /* The [double] background converted to image format. */ VipsPel *ink; } VipsForeignLoadPdf; typedef VipsForeignLoadClass VipsForeignLoadPdfClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignLoadPdf, vips_foreign_load_pdf, VIPS_TYPE_FOREIGN_LOAD); static char *vips_pdfium_errors[] = { "no error", "unknown error", "file not found or could not be opened", "file not in PDF format or corrupted", "password required or incorrect password", "unsupported security scheme", "page not found or content error" }; static GMutex *vips_pdfium_mutex = NULL; static void vips_pdfium_error(void) { int err = FPDF_GetLastError(); if (err >= 0 && err < VIPS_NUMBER(vips_pdfium_errors)) vips_error("pdfload", "%s", _(vips_pdfium_errors[err])); else vips_error("pdfload", "%s", _("unknown error")); } static void vips_foreign_load_pdf_close(VipsForeignLoadPdf *pdf) { g_mutex_lock(vips_pdfium_mutex); VIPS_FREEF(FPDF_ClosePage, pdf->page); VIPS_FREEF(FPDFDOC_ExitFormFillEnvironment, pdf->form); VIPS_FREEF(FPDF_CloseDocument, pdf->doc); VIPS_UNREF(pdf->source); g_mutex_unlock(vips_pdfium_mutex); } static void vips_foreign_load_pdf_dispose(GObject *gobject) { VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) gobject; vips_foreign_load_pdf_close(pdf); G_OBJECT_CLASS(vips_foreign_load_pdf_parent_class)->dispose(gobject); } static void * vips_pdfium_init_cb(void *dummy) { FPDF_LIBRARY_CONFIG config; config.version = 2; config.m_pUserFontPaths = NULL; config.m_pIsolate = NULL; config.m_v8EmbedderSlot = 0; FPDF_InitLibraryWithConfig(&config); return NULL; } /* This is the m_GetBlock function for FPDF_FILEACCESS. */ static gboolean vips_pdfium_GetBlock(void *param, unsigned long position, unsigned char *pBuf, unsigned long size) { VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) param; /* PDFium guarantees these. */ g_assert(size > 0); g_assert(position >= 0); g_assert(position + size <= pdf->file_access.m_FileLen); if (vips_source_seek(pdf->source, position, SEEK_SET) < 0) return FALSE; while (size > 0) { gint64 bytes_read; if ((bytes_read = vips_source_read(pdf->source, pBuf, size)) < 0) return FALSE; pBuf += bytes_read; size -= bytes_read; } return TRUE; } static int vips_foreign_load_pdf_build(VipsObject *object) { static GOnce once = G_ONCE_INIT; VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) object; VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(pdf); gint64 length; VIPS_ONCE(&once, vips_pdfium_init_cb, NULL); if (!vips_object_argument_isset(object, "scale")) pdf->scale = pdf->dpi / 72.0; pdf->form_callbacks.version = 2; /* pdfium must know the file length, unfortunately. */ if (pdf->source) { if ((length = vips_source_length(pdf->source)) <= 0) return -1; if (length > 1 << 30) { vips_error(class->nickname, _("%s: too large for pdfium"), vips_connection_nick( VIPS_CONNECTION(pdf->source))); return -1; } pdf->file_access.m_FileLen = length; pdf->file_access.m_GetBlock = vips_pdfium_GetBlock; pdf->file_access.m_Param = pdf; g_mutex_lock(vips_pdfium_mutex); if (!(pdf->doc = FPDF_LoadCustomDocument(&pdf->file_access, pdf->password))) { g_mutex_unlock(vips_pdfium_mutex); vips_pdfium_error(); vips_error("pdfload", _("%s: unable to load"), vips_connection_nick( VIPS_CONNECTION(pdf->source))); return -1; } if (!(pdf->form = FPDFDOC_InitFormFillEnvironment(pdf->doc, &pdf->form_callbacks))) { g_mutex_unlock(vips_pdfium_mutex); vips_pdfium_error(); vips_error("pdfload", _("%s: unable to initialize form fill environment"), vips_connection_nick( VIPS_CONNECTION(pdf->source))); return -1; } g_mutex_unlock(vips_pdfium_mutex); } if (VIPS_OBJECT_CLASS(vips_foreign_load_pdf_parent_class)->build(object)) return -1; return 0; } static VipsForeignFlags vips_foreign_load_pdf_get_flags_filename(const char *filename) { /* We can render any part of the page on demand. */ return VIPS_FOREIGN_PARTIAL; } static VipsForeignFlags vips_foreign_load_pdf_get_flags(VipsForeignLoad *load) { return VIPS_FOREIGN_PARTIAL; } static int vips_foreign_load_pdf_get_page(VipsForeignLoadPdf *pdf, int page_no) { if (pdf->current_page != page_no) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(pdf); g_mutex_lock(vips_pdfium_mutex); VIPS_FREEF(FPDF_ClosePage, pdf->page); pdf->current_page = -1; #ifdef DEBUG printf("vips_foreign_load_pdf_get_page: %d\n", page_no); #endif /*DEBUG*/ if (!(pdf->page = FPDF_LoadPage(pdf->doc, page_no))) { g_mutex_unlock(vips_pdfium_mutex); vips_pdfium_error(); vips_error(class->nickname, _("unable to load page %d"), page_no); return -1; } pdf->current_page = page_no; g_mutex_unlock(vips_pdfium_mutex); } return 0; } /* String-based metadata fields we extract. */ typedef struct _VipsForeignLoadPdfMetadata { char *tag; /* as understood by PDFium */ char *field; /* as understood by libvips */ } VipsForeignLoadPdfMetadata; static VipsForeignLoadPdfMetadata vips_foreign_load_pdf_metadata[] = { { "Title", "pdf-title" }, { "Author", "pdf-author" }, { "Subject", "pdf-subject" }, { "Keywords", "pdf-keywords" }, { "Creator", "pdf-creator" }, { "Producer", "pdf-producer" }, /* poppler has "metadata" as well, but pdfium does not support this */ }; static int n_metadata = VIPS_NUMBER(vips_foreign_load_pdf_metadata); static int vips_foreign_load_pdf_set_image(VipsForeignLoadPdf *pdf, VipsImage *out) { int i; double res; #ifdef DEBUG printf("vips_foreign_load_pdf_set_image: %p\n", pdf); #endif /*DEBUG*/ /* We render to a tilecache, so it has to be SMALLTILE. */ if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_SMALLTILE, NULL)) return -1; /* Extract and attach metadata. Set the old name too for compat. */ vips_image_set_int(out, "pdf-n_pages", pdf->n_pages); vips_image_set_int(out, VIPS_META_N_PAGES, pdf->n_pages); g_mutex_lock(vips_pdfium_mutex); for (i = 0; i < n_metadata; i++) { VipsForeignLoadPdfMetadata *metadata = &vips_foreign_load_pdf_metadata[i]; char text[1024]; int len; len = FPDF_GetMetaText(pdf->doc, metadata->tag, text, 1024); if (len > 0) { char *str; /* Silently ignore coding errors. */ if ((str = g_utf16_to_utf8((gunichar2 *) text, len, NULL, NULL, NULL))) { vips_image_set_string(out, metadata->field, str); g_free(str); } } } g_mutex_unlock(vips_pdfium_mutex); /* We need pixels/mm for vips. */ res = pdf->dpi / 25.4; vips_image_init_fields(out, pdf->image.width, pdf->image.height, 4, VIPS_FORMAT_UCHAR, VIPS_CODING_NONE, VIPS_INTERPRETATION_sRGB, res, res); return 0; } static int vips_foreign_load_pdf_header(VipsForeignLoad *load) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load); VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) load; int top; int i; #ifdef DEBUG printf("vips_foreign_load_pdf_header: %p\n", pdf); #endif /*DEBUG*/ g_mutex_lock(vips_pdfium_mutex); pdf->n_pages = FPDF_GetPageCount(pdf->doc); g_mutex_unlock(vips_pdfium_mutex); /* @n == -1 means until the end of the doc. */ if (pdf->n == -1) pdf->n = pdf->n_pages - pdf->page_no; if (pdf->page_no + pdf->n > pdf->n_pages || pdf->page_no < 0 || pdf->n <= 0) { vips_error(class->nickname, "%s", _("pages out of range")); return -1; } /* Lay out the pages in our output image. */ if (!(pdf->pages = VIPS_ARRAY(pdf, pdf->n, VipsRect))) return -1; top = 0; pdf->image.left = 0; pdf->image.top = 0; pdf->image.width = 0; pdf->image.height = 0; for (i = 0; i < pdf->n; i++) { if (vips_foreign_load_pdf_get_page(pdf, pdf->page_no + i)) return -1; pdf->pages[i].left = 0; pdf->pages[i].top = top; /* We do round to nearest, in the same way that vips_resize() * does round to nearest. Without this, things like * shrink-on-load will break. */ pdf->pages[i].width = VIPS_RINT( FPDF_GetPageWidth(pdf->page) * pdf->scale); pdf->pages[i].height = VIPS_RINT( FPDF_GetPageHeight(pdf->page) * pdf->scale); /* PDFium allows page width or height to be less than 1 (!!). */ if (pdf->pages[i].width < 1 || pdf->pages[i].height < 1 || pdf->pages[i].width > VIPS_MAX_COORD || pdf->pages[i].height > VIPS_MAX_COORD) { vips_error(class->nickname, "%s", _("page size out of range")); return -1; } if (pdf->pages[i].width > pdf->image.width) pdf->image.width = pdf->pages[i].width; pdf->image.height += pdf->pages[i].height; top += pdf->pages[i].height; } /* If all pages are the same height, we can tag this as a toilet roll * image. */ for (i = 1; i < pdf->n; i++) if (pdf->pages[i].height != pdf->pages[0].height) break; /* Only set page-height if we have more than one page, or this could * accidentally turn into an animated image later. */ if (pdf->n > 1) vips_image_set_int(load->out, VIPS_META_PAGE_HEIGHT, pdf->pages[0].height); vips_foreign_load_pdf_set_image(pdf, load->out); /* Convert the background to the image format. */ if (!(pdf->ink = vips__vector_to_ink(class->nickname, load->out, VIPS_AREA(pdf->background)->data, NULL, VIPS_AREA(pdf->background)->n))) return -1; vips__bgra2rgba((guint32 *) pdf->ink, 1); return 0; } static void vips_foreign_load_pdf_minimise(VipsObject *object, VipsForeignLoadPdf *pdf) { vips_source_minimise(pdf->source); } static int vips_foreign_load_pdf_generate(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) a; VipsRect *r = &out_region->valid; int top; int i; int y; /* printf("vips_foreign_load_pdf_generate: " "left = %d, top = %d, width = %d, height = %d\n", r->left, r->top, r->width, r->height); */ /* Search through the pages we are drawing for the first containing * this rect. This could be quicker, perhaps a binary search, but who * cares. */ for (i = 0; i < pdf->n; i++) if (VIPS_RECT_BOTTOM(&pdf->pages[i]) > r->top) break; /* Reset out region. Otherwise there might be parts of previous pages * left. */ vips_region_black(out_region); top = r->top; while (top < VIPS_RECT_BOTTOM(r)) { VipsRect rect; FPDF_BITMAP bitmap; vips_rect_intersectrect(r, &pdf->pages[i], &rect); if (vips_foreign_load_pdf_get_page(pdf, pdf->page_no + i)) return -1; vips__worker_lock(vips_pdfium_mutex); /* 4 means RGBA. */ bitmap = FPDFBitmap_CreateEx(rect.width, rect.height, 4, VIPS_REGION_ADDR(out_region, rect.left, rect.top), VIPS_REGION_LSKIP(out_region)); /* Only paint the background if there's no transparency. */ if (!FPDFPage_HasTransparency(pdf->page)) { FPDF_DWORD ink = *((guint32 *) pdf->ink); FPDFBitmap_FillRect(bitmap, 0, 0, rect.width, rect.height, ink); } FPDF_RenderPageBitmap(bitmap, pdf->page, pdf->pages[i].left - rect.left, pdf->pages[i].top - rect.top, pdf->pages[i].width, pdf->pages[i].height, 0, 0); FPDF_FFLDraw(pdf->form, bitmap, pdf->page, pdf->pages[i].left - rect.left, pdf->pages[i].top - rect.top, pdf->pages[i].width, pdf->pages[i].height, 0, 0); FPDFBitmap_Destroy(bitmap); g_mutex_unlock(vips_pdfium_mutex); top += rect.height; i += 1; } /* PDFium writes BGRA, we must swap. */ for (y = 0; y < r->height; y++) vips__bgra2rgba( (guint32 *) VIPS_REGION_ADDR(out_region, r->left, r->top + y), r->width); return 0; } static int vips_foreign_load_pdf_load(VipsForeignLoad *load) { VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) load; VipsImage **t = (VipsImage **) vips_object_local_array((VipsObject *) load, 2); #ifdef DEBUG printf("vips_foreign_load_pdf_load: %p\n", pdf); #endif /*DEBUG*/ /* Read to this image, then cache to out, see below. */ t[0] = vips_image_new(); /* Close input immediately at end of read. */ g_signal_connect(t[0], "minimise", G_CALLBACK(vips_foreign_load_pdf_minimise), pdf); vips_foreign_load_pdf_set_image(pdf, t[0]); if (vips_image_generate(t[0], NULL, vips_foreign_load_pdf_generate, NULL, pdf, NULL) || vips_tilecache(t[0], &t[1], "tile_width", TILE_SIZE, "tile_height", TILE_SIZE, "max_tiles", 2 * (1 + t[0]->Xsize / TILE_SIZE), NULL) || vips_image_write(t[1], load->real)) return -1; return 0; } static void * vips_foreign_load_pdf_once_init(void *client) { /* We must make the mutex on class init (not _build) since we * can lock even if build is not called. */ vips_pdfium_mutex = vips_g_mutex_new(); return NULL; } static void vips_foreign_load_pdf_class_init(VipsForeignLoadPdfClass *class) { static GOnce once = G_ONCE_INIT; GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; VIPS_ONCE(&once, vips_foreign_load_pdf_once_init, NULL); gobject_class->dispose = vips_foreign_load_pdf_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "pdfload_base"; object_class->description = _("load PDF with PDFium"); object_class->build = vips_foreign_load_pdf_build; load_class->get_flags_filename = vips_foreign_load_pdf_get_flags_filename; load_class->get_flags = vips_foreign_load_pdf_get_flags; load_class->header = vips_foreign_load_pdf_header; load_class->load = vips_foreign_load_pdf_load; VIPS_ARG_INT(class, "page", 10, _("Page"), _("First page to load"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPdf, page_no), 0, 100000, 0); VIPS_ARG_INT(class, "n", 11, _("n"), _("Number of pages to load, -1 for all"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPdf, n), -1, 100000, 1); VIPS_ARG_DOUBLE(class, "dpi", 12, _("DPI"), _("DPI to render at"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPdf, dpi), 0.001, 100000.0, 72.0); VIPS_ARG_DOUBLE(class, "scale", 13, _("Scale"), _("Factor to scale by"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPdf, scale), 0.001, 100000.0, 1.0); VIPS_ARG_BOXED(class, "background", 14, _("Background"), _("Background colour"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPdf, background), VIPS_TYPE_ARRAY_DOUBLE); VIPS_ARG_STRING(class, "password", 25, _("Password"), _("Password to decrypt with"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPdf, password), NULL); } static void vips_foreign_load_pdf_init(VipsForeignLoadPdf *pdf) { pdf->dpi = 72.0; pdf->scale = 1.0; pdf->n = 1; pdf->current_page = -1; pdf->background = vips_array_double_newv(1, 255.0); } typedef struct _VipsForeignLoadPdfFile { VipsForeignLoadPdf parent_object; /* Filename for load. */ char *filename; } VipsForeignLoadPdfFile; typedef VipsForeignLoadPdfClass VipsForeignLoadPdfFileClass; G_DEFINE_TYPE(VipsForeignLoadPdfFile, vips_foreign_load_pdf_file, vips_foreign_load_pdf_get_type()); static int vips_foreign_load_pdf_file_header(VipsForeignLoad *load) { VipsForeignLoadPdfFile *file = (VipsForeignLoadPdfFile *) load; VIPS_SETSTR(load->out->filename, file->filename); return VIPS_FOREIGN_LOAD_CLASS(vips_foreign_load_pdf_file_parent_class) ->header(load); } static const char *vips_foreign_pdf_suffs[] = { ".pdf", NULL }; static int vips_foreign_load_pdf_file_build(VipsObject *object) { VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) object; VipsForeignLoadPdfFile *file = (VipsForeignLoadPdfFile *) pdf; #ifdef DEBUG printf("vips_foreign_load_pdf_file_build: %s\n", file->filename); #endif /*DEBUG*/ if (file->filename && !(pdf->source = vips_source_new_from_file(file->filename))) return -1; return VIPS_OBJECT_CLASS(vips_foreign_load_pdf_file_parent_class) ->build(object); } static gboolean vips_foreign_load_pdf_is_a_buffer(const void *buf, size_t len) { const guchar *str = (const guchar *) buf; if (len >= 4 && str[0] == '%' && str[1] == 'P' && str[2] == 'D' && str[3] == 'F') return 1; return 0; } static gboolean vips_foreign_load_pdf_is_a(const char *filename) { unsigned char buf[4]; if (vips__get_bytes(filename, buf, 4) == 4 && vips_foreign_load_pdf_is_a_buffer(buf, 4)) return 1; return 0; } static void vips_foreign_load_pdf_file_class_init( VipsForeignLoadPdfFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "pdfload"; object_class->description = _("load PDF from file"); object_class->build = vips_foreign_load_pdf_file_build; foreign_class->suffs = vips_foreign_pdf_suffs; load_class->is_a = vips_foreign_load_pdf_is_a; load_class->header = vips_foreign_load_pdf_file_header; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPdfFile, filename), NULL); } static void vips_foreign_load_pdf_file_init(VipsForeignLoadPdfFile *file) { } typedef struct _VipsForeignLoadPdfBuffer { VipsForeignLoadPdf parent_object; /* Load from a buffer. */ VipsArea *buf; } VipsForeignLoadPdfBuffer; typedef VipsForeignLoadPdfClass VipsForeignLoadPdfBufferClass; G_DEFINE_TYPE(VipsForeignLoadPdfBuffer, vips_foreign_load_pdf_buffer, vips_foreign_load_pdf_get_type()); static int vips_foreign_load_pdf_buffer_build(VipsObject *object) { VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) object; VipsForeignLoadPdfBuffer *buffer = (VipsForeignLoadPdfBuffer *) pdf; if (buffer->buf && !(pdf->source = vips_source_new_from_memory( VIPS_AREA(buffer->buf)->data, VIPS_AREA(buffer->buf)->length))) return -1; return VIPS_OBJECT_CLASS(vips_foreign_load_pdf_buffer_parent_class) ->build(object); } static void vips_foreign_load_pdf_buffer_class_init( VipsForeignLoadPdfBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "pdfload_buffer"; object_class->description = _("load PDF from buffer"); object_class->build = vips_foreign_load_pdf_buffer_build; load_class->is_a_buffer = vips_foreign_load_pdf_is_a_buffer; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPdfBuffer, buf), VIPS_TYPE_BLOB); } static void vips_foreign_load_pdf_buffer_init(VipsForeignLoadPdfBuffer *buffer) { } typedef struct _VipsForeignLoadPdfSource { VipsForeignLoadPdf parent_object; VipsSource *source; } VipsForeignLoadPdfSource; typedef VipsForeignLoadPdfClass VipsForeignLoadPdfSourceClass; G_DEFINE_TYPE(VipsForeignLoadPdfSource, vips_foreign_load_pdf_source, vips_foreign_load_pdf_get_type()); static int vips_foreign_load_pdf_source_build(VipsObject *object) { VipsForeignLoadPdf *pdf = (VipsForeignLoadPdf *) object; VipsForeignLoadPdfSource *source = (VipsForeignLoadPdfSource *) pdf; if (source->source) { pdf->source = source->source; g_object_ref(pdf->source); } return VIPS_OBJECT_CLASS(vips_foreign_load_pdf_source_parent_class) ->build(object); } static gboolean vips_foreign_load_pdf_source_is_a_source(VipsSource *source) { const unsigned char *p; return (p = vips_source_sniff(source, 4)) && p[0] == '%' && p[1] == 'P' && p[2] == 'D' && p[3] == 'F'; } static void vips_foreign_load_pdf_source_class_init( VipsForeignLoadPdfSourceClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "pdfload_source"; object_class->description = _("load PDF from source"); object_class->build = vips_foreign_load_pdf_source_build; operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_pdf_source_is_a_source; VIPS_ARG_OBJECT(class, "source", 1, _("Source"), _("Source to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPdfSource, source), VIPS_TYPE_SOURCE); } static void vips_foreign_load_pdf_source_init(VipsForeignLoadPdfSource *source) { } #endif /*HAVE_PDFIUM*/ libvips-8.15.1/libvips/foreign/pforeign.h000066400000000000000000000200061454007373500203470ustar00rootroot00000000000000/* Private decls shared by all foreign. */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_PFOREIGN_H #define VIPS_PFOREIGN_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ /* We've seen real images with 28 chunks, so set 50. */ #define MAX_PNG_TEXT_CHUNKS 50 int vips__foreign_update_metadata(VipsImage *in, VipsForeignKeep keep); void vips__tiff_init(void); int vips__tiff_write_target(VipsImage *in, VipsTarget *target, VipsForeignTiffCompression compression, int Q, VipsForeignTiffPredictor predictor, const char *profile, gboolean tile, int tile_width, int tile_height, gboolean pyramid, int bitdepth, gboolean miniswhite, VipsForeignTiffResunit resunit, double xres, double yres, gboolean bigtiff, gboolean rgbjpeg, gboolean properties, VipsRegionShrink region_shrink, int level, gboolean lossless, VipsForeignDzDepth depth, gboolean subifd, gboolean premultiply, int page_height); gboolean vips__istiff_source(VipsSource *source); gboolean vips__istifftiled_source(VipsSource *source); int vips__tiff_read_header_source(VipsSource *source, VipsImage *out, int page, int n, gboolean autorotate, int subifd, VipsFailOn fail_on); int vips__tiff_read_source(VipsSource *source, VipsImage *out, int page, int n, gboolean autorotate, int subifd, VipsFailOn fail_on); extern const char *vips__foreign_tiff_suffs[]; int vips__isanalyze(const char *filename); int vips__analyze_read_header(const char *filename, VipsImage *out); int vips__analyze_read(const char *filename, VipsImage *out); extern const char *vips__foreign_csv_suffs[]; int vips__matrix_read_header(const char *filename, int *width, int *height, double *scale, double *offset); int vips__matrix_ismatrix(const char *filename); VipsImage *vips__matrix_read_file(FILE *fp); VipsImage *vips__matrix_read(const char *filename); int vips__matrix_write(VipsImage *in, const char *filename); int vips__matrix_write_file(VipsImage *in, FILE *fp); extern const char *vips__foreign_matrix_suffs[]; int vips__openexr_isexr(const char *filename); gboolean vips__openexr_istiled(const char *filename); int vips__openexr_read_header(const char *filename, VipsImage *out); int vips__openexr_read(const char *filename, VipsImage *out); extern const char *vips__fits_suffs[]; int vips__fits_isfits(const char *filename); int vips__fits_read_header(const char *filename, VipsImage *out); int vips__fits_read(const char *filename, VipsImage *out); int vips__fits_write(VipsImage *in, const char *filename); int vips__magick_read(const char *filename, VipsImage *out, const char *density, int page, int n); int vips__magick_read_header(const char *filename, VipsImage *out, const char *density, int page, int n); int vips__magick_read_buffer(const void *buf, const size_t len, VipsImage *out, const char *density, int page, int n); int vips__magick_read_buffer_header(const void *buf, const size_t len, VipsImage *out, const char *density, int page, int n); extern const char *vips__mat_suffs[]; int vips__mat_load(const char *filename, VipsImage *out); int vips__mat_header(const char *filename, VipsImage *out); int vips__mat_ismat(const char *filename); extern const char *vips__ppm_suffs[]; extern const char *vips__save_pbm_suffs[]; extern const char *vips__save_pgm_suffs[]; extern const char *vips__save_ppm_suffs[]; extern const char *vips__save_pfm_suffs[]; extern const char *vips__save_pnm_suffs[]; int vips__ppm_save_target(VipsImage *in, VipsTarget *target, gboolean ascii, gboolean squash); int vips__rad_israd(VipsSource *source); int vips__rad_header(VipsSource *source, VipsImage *out); int vips__rad_load(VipsSource *source, VipsImage *out); int vips__rad_save(VipsImage *in, VipsTarget *target); extern const char *vips__rad_suffs[]; extern const char *vips__jpeg_suffs[]; int vips__jpeg_write_target(VipsImage *in, VipsTarget *target, int Q, const char *profile, gboolean optimize_coding, gboolean progressive, gboolean trellis_quant, gboolean overshoot_deringing, gboolean optimize_scans, int quant_table, VipsForeignSubsample subsample_mode, int restart_interval); int vips__jpeg_region_write_target(VipsRegion *region, VipsRect *rect, VipsTarget *target, int Q, const char *profile, gboolean optimize_coding, gboolean progressive, VipsForeignKeep keep, gboolean trellis_quant, gboolean overshoot_deringing, gboolean optimize_scans, int quant_table, VipsForeignSubsample subsample_mode, int restart_interval); int vips__jpeg_read_source(VipsSource *source, VipsImage *out, gboolean header_only, int shrink, VipsFailOn fail_on, gboolean autorotate, gboolean unlimited); int vips__isjpeg_source(VipsSource *source); int vips__png_ispng_source(VipsSource *source); int vips__png_header_source(VipsSource *source, VipsImage *out, gboolean unlimited); int vips__png_read_source(VipsSource *source, VipsImage *out, VipsFailOn fail_on, gboolean unlimited); gboolean vips__png_isinterlaced_source(VipsSource *source); extern const char *vips__png_suffs[]; int vips__png_write_target(VipsImage *in, VipsTarget *target, int compress, int interlace, const char *profile, VipsForeignPngFilter filter, gboolean palette, int Q, double dither, int bitdepth, int effort); /* Map WEBP metadata names to vips names. */ typedef struct _VipsWebPNames { const char *vips; const char *webp; int flags; } VipsWebPNames; extern const VipsWebPNames vips__webp_names[]; extern const int vips__n_webp_names; extern const char *vips__webp_suffs[]; int vips__iswebp_source(VipsSource *source); int vips__webp_read_header_source(VipsSource *source, VipsImage *out, int page, int n, double scale); int vips__webp_read_source(VipsSource *source, VipsImage *out, int page, int n, double scale); extern const char *vips_foreign_nifti_suffs[]; VipsBandFormat vips__foreign_nifti_datatype2BandFmt(int datatype); int vips__foreign_nifti_BandFmt2datatype(VipsBandFormat fmt); typedef void *(*VipsNiftiMapFn)(const char *name, GValue *value, glong offset, void *a, void *b); void *vips__foreign_nifti_map(VipsNiftiMapFn fn, void *a, void *b); extern const char *vips__heic_suffs[]; extern const char *vips__avif_suffs[]; extern const char *vips__heif_suffs[]; struct heif_image; struct heif_error; void vips__heif_init(void); int vips__heif_chroma(int bits_per_pixel, gboolean has_alpha); void vips__heif_image_print(struct heif_image *img); void vips__heif_error(struct heif_error *error); extern const char *vips__jp2k_suffs[]; int vips__foreign_load_jp2k_decompress(VipsImage *out, int width, int height, gboolean ycc_to_rgb, void *from, size_t from_length, void *to, size_t to_length); int vips__foreign_save_jp2k_compress(VipsRegion *region, VipsRect *tile, VipsTarget *target, int tile_width, int tile_height, gboolean save_as_ycc, gboolean subsample, gboolean lossless, int Q); extern const char *vips__jxl_suffs[]; struct _VipsArchive; typedef struct _VipsArchive VipsArchive; void vips__archive_free(VipsArchive *archive); VipsArchive *vips__archive_new_to_dir(const char *base_dirname); VipsArchive *vips__archive_new_to_target(VipsTarget *target, const char *base_dirname, int compression); int vips__archive_mkdir(VipsArchive *archive, const char *dirname); int vips__archive_mkfile(VipsArchive *archive, const char *filename, void *buf, size_t len); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_PFOREIGN_H*/ libvips-8.15.1/libvips/foreign/pngload.c000066400000000000000000000311061454007373500201600ustar00rootroot00000000000000/* load png from a file * * 5/12/11 * - from tiffload.c * 29/8/21 joshuamsager * - add "unlimited" flag to png load */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pforeign.h" #if defined(HAVE_PNG) typedef struct _VipsForeignLoadPng { VipsForeignLoad parent_object; /* Set by subclasses. */ VipsSource *source; /* remove all denial of service limits. */ gboolean unlimited; } VipsForeignLoadPng; typedef VipsForeignLoadClass VipsForeignLoadPngClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignLoadPng, vips_foreign_load_png, VIPS_TYPE_FOREIGN_LOAD); static void vips_foreign_load_png_dispose(GObject *gobject) { VipsForeignLoadPng *png = (VipsForeignLoadPng *) gobject; VIPS_UNREF(png->source); G_OBJECT_CLASS(vips_foreign_load_png_parent_class)->dispose(gobject); } static VipsForeignFlags vips_foreign_load_png_get_flags_source(VipsSource *source) { VipsForeignFlags flags; flags = 0; if (vips__png_isinterlaced_source(source)) flags |= VIPS_FOREIGN_PARTIAL; else flags |= VIPS_FOREIGN_SEQUENTIAL; return flags; } static VipsForeignFlags vips_foreign_load_png_get_flags(VipsForeignLoad *load) { VipsForeignLoadPng *png = (VipsForeignLoadPng *) load; return vips_foreign_load_png_get_flags_source(png->source); } static VipsForeignFlags vips_foreign_load_png_get_flags_filename(const char *filename) { VipsSource *source; VipsForeignFlags flags; if (!(source = vips_source_new_from_file(filename))) return 0; flags = vips_foreign_load_png_get_flags_source(source); VIPS_UNREF(source); return flags; } static int vips_foreign_load_png_header(VipsForeignLoad *load) { VipsForeignLoadPng *png = (VipsForeignLoadPng *) load; if (vips__png_header_source(png->source, load->out, png->unlimited)) return -1; return 0; } static int vips_foreign_load_png_load(VipsForeignLoad *load) { VipsForeignLoadPng *png = (VipsForeignLoadPng *) load; if (vips__png_read_source(png->source, load->real, load->fail_on, png->unlimited)) return -1; return 0; } static void vips_foreign_load_png_class_init(VipsForeignLoadPngClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->dispose = vips_foreign_load_png_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "pngload_base"; object_class->description = _("load png base class"); /* We are fast at is_a(), so high priority. */ foreign_class->priority = 200; load_class->get_flags_filename = vips_foreign_load_png_get_flags_filename; load_class->get_flags = vips_foreign_load_png_get_flags; load_class->header = vips_foreign_load_png_header; load_class->load = vips_foreign_load_png_load; VIPS_ARG_BOOL(class, "unlimited", 23, _("Unlimited"), _("Remove all denial of service limits"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPng, unlimited), FALSE); } static void vips_foreign_load_png_init(VipsForeignLoadPng *png) { } typedef struct _VipsForeignLoadPngSource { VipsForeignLoadPng parent_object; /* Load from a source. */ VipsSource *source; } VipsForeignLoadPngSource; typedef VipsForeignLoadPngClass VipsForeignLoadPngSourceClass; G_DEFINE_TYPE(VipsForeignLoadPngSource, vips_foreign_load_png_source, vips_foreign_load_png_get_type()); static int vips_foreign_load_png_source_build(VipsObject *object) { VipsForeignLoadPng *png = (VipsForeignLoadPng *) object; VipsForeignLoadPngSource *source = (VipsForeignLoadPngSource *) object; if (source->source) { png->source = source->source; g_object_ref(png->source); } if (VIPS_OBJECT_CLASS(vips_foreign_load_png_source_parent_class) ->build(object)) return -1; return 0; } static gboolean vips_foreign_load_png_source_is_a_source(VipsSource *source) { return vips__png_ispng_source(source); } static void vips_foreign_load_png_source_class_init(VipsForeignLoadPngSourceClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "pngload_source"; object_class->description = _("load png from source"); object_class->build = vips_foreign_load_png_source_build; operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_png_source_is_a_source; VIPS_ARG_OBJECT(class, "source", 1, _("Source"), _("Source to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPngSource, source), VIPS_TYPE_SOURCE); } static void vips_foreign_load_png_source_init(VipsForeignLoadPngSource *source) { } typedef struct _VipsForeignLoadPngFile { VipsForeignLoadPng parent_object; /* Filename for load. */ char *filename; } VipsForeignLoadPngFile; typedef VipsForeignLoadPngClass VipsForeignLoadPngFileClass; G_DEFINE_TYPE(VipsForeignLoadPngFile, vips_foreign_load_png_file, vips_foreign_load_png_get_type()); static int vips_foreign_load_png_file_build(VipsObject *object) { VipsForeignLoadPng *png = (VipsForeignLoadPng *) object; VipsForeignLoadPngFile *file = (VipsForeignLoadPngFile *) object; if (file->filename && !(png->source = vips_source_new_from_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_png_file_parent_class)->build(object)) return -1; return 0; } static gboolean vips_foreign_load_png_file_is_a(const char *filename) { VipsSource *source; gboolean result; if (!(source = vips_source_new_from_file(filename))) return FALSE; result = vips_foreign_load_png_source_is_a_source(source); VIPS_UNREF(source); return result; } static void vips_foreign_load_png_file_class_init(VipsForeignLoadPngFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "pngload"; object_class->description = _("load png from file"); object_class->build = vips_foreign_load_png_file_build; foreign_class->suffs = vips__png_suffs; load_class->is_a = vips_foreign_load_png_file_is_a; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPngFile, filename), NULL); } static void vips_foreign_load_png_file_init(VipsForeignLoadPngFile *file) { } typedef struct _VipsForeignLoadPngBuffer { VipsForeignLoadPng parent_object; /* Load from a buffer. */ VipsBlob *blob; } VipsForeignLoadPngBuffer; typedef VipsForeignLoadPngClass VipsForeignLoadPngBufferClass; G_DEFINE_TYPE(VipsForeignLoadPngBuffer, vips_foreign_load_png_buffer, vips_foreign_load_png_get_type()); static int vips_foreign_load_png_buffer_build(VipsObject *object) { VipsForeignLoadPng *png = (VipsForeignLoadPng *) object; VipsForeignLoadPngBuffer *buffer = (VipsForeignLoadPngBuffer *) object; if (buffer->blob && !(png->source = vips_source_new_from_memory( VIPS_AREA(buffer->blob)->data, VIPS_AREA(buffer->blob)->length))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_png_buffer_parent_class) ->build(object)) return -1; return 0; } static gboolean vips_foreign_load_png_buffer_is_a_buffer(const void *buf, size_t len) { VipsSource *source; gboolean result; if (!(source = vips_source_new_from_memory(buf, len))) return FALSE; result = vips_foreign_load_png_source_is_a_source(source); VIPS_UNREF(source); return result; } static void vips_foreign_load_png_buffer_class_init(VipsForeignLoadPngBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "pngload_buffer"; object_class->description = _("load png from buffer"); object_class->build = vips_foreign_load_png_buffer_build; load_class->is_a_buffer = vips_foreign_load_png_buffer_is_a_buffer; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPngBuffer, blob), VIPS_TYPE_BLOB); } static void vips_foreign_load_png_buffer_init(VipsForeignLoadPngBuffer *buffer) { } #endif /*HAVE_PNG*/ /** * vips_pngload: * @filename: file to load * @out: (out): decompressed image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @fail_on: #VipsFailOn, types of read error to fail on * * @unlimited: %gboolean, remove all denial of service limits * * Read a PNG file into a VIPS image. It can read all png images, including 8- * and 16-bit images, 1 and 3 channel, with and without an alpha channel. * * Any ICC profile is read and attached to the VIPS image. It also supports * XMP metadata. * * Use @fail_on to set the type of error that will cause load to fail. By * default, loaders are permissive, that is, #VIPS_FAIL_ON_NONE. * * By default, the PNG loader limits the number of text and data chunks to * block some denial of service attacks. Set @unlimited to disable these * limits. * * See also: vips_image_new_from_file(). * * Returns: 0 on success, -1 on error. */ int vips_pngload(const char *filename, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("pngload", ap, filename, out); va_end(ap); return result; } /** * vips_pngload_buffer: * @buf: (array length=len) (element-type guint8): memory area to load * @len: (type gsize): size of memory area * @out: (out): image to write * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @fail_on: #VipsFailOn, types of read error to fail on * * @unlimited: %gboolean, Remove all denial of service limits * * Exactly as vips_pngload(), but read from a PNG-formatted memory block. * * You must not free the buffer while @out is active. The * #VipsObject::postclose signal on @out is a good place to free. * * See also: vips_pngload(). * * Returns: 0 on success, -1 on error. */ int vips_pngload_buffer(void *buf, size_t len, VipsImage **out, ...) { va_list ap; VipsBlob *blob; int result; /* We don't take a copy of the data or free it. */ blob = vips_blob_new(NULL, buf, len); va_start(ap, out); result = vips_call_split("pngload_buffer", ap, blob, out); va_end(ap); vips_area_unref(VIPS_AREA(blob)); return result; } /** * vips_pngload_source: * @source: source to load from * @out: (out): image to write * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @fail_on: #VipsFailOn, types of read error to fail on * * @unlimited: %gboolean, Remove all denial of service limits * * Exactly as vips_pngload(), but read from a source. * * See also: vips_pngload(). * * Returns: 0 on success, -1 on error. */ int vips_pngload_source(VipsSource *source, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("pngload_source", ap, source, out); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/pngsave.c000066400000000000000000000370241454007373500202040ustar00rootroot00000000000000/* save to png * * 2/12/11 * - wrap a class around the png writer * 16/7/12 * - compression should be 0-9, not 1-10 * 20/6/18 [felixbuenemann] * - support png8 palette write with palette, colours, Q, dither * 24/6/20 * - add @bitdepth, deprecate @colours * 15/7/22 [lovell] * - default filter to none */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pforeign.h" #ifdef HAVE_PNG typedef struct _VipsForeignSavePng { VipsForeignSave parent_object; int compression; gboolean interlace; VipsForeignPngFilter filter; gboolean palette; int Q; double dither; int bitdepth; int effort; /* Set by subclasses. */ VipsTarget *target; /* Deprecated. */ int colours; } VipsForeignSavePng; typedef VipsForeignSaveClass VipsForeignSavePngClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignSavePng, vips_foreign_save_png, VIPS_TYPE_FOREIGN_SAVE); static void vips_foreign_save_png_dispose(GObject *gobject) { VipsForeignSavePng *png = (VipsForeignSavePng *) gobject; VIPS_UNREF(png->target); G_OBJECT_CLASS(vips_foreign_save_png_parent_class)->dispose(gobject); } static int vips_foreign_save_png_build(VipsObject *object) { VipsForeignSave *save = (VipsForeignSave *) object; VipsForeignSavePng *png = (VipsForeignSavePng *) object; VipsImage *in; if (VIPS_OBJECT_CLASS(vips_foreign_save_png_parent_class)->build(object)) return -1; in = save->ready; g_object_ref(in); /* If no output bitdepth has been specified, use input Type to pick. */ if (!vips_object_argument_isset(object, "bitdepth")) png->bitdepth = in->Type == VIPS_INTERPRETATION_RGB16 || in->Type == VIPS_INTERPRETATION_GREY16 ? 16 : 8; /* Deprecated "colours" arg just sets bitdepth large enough to hold * that many colours. */ if (vips_object_argument_isset(object, "colours")) png->bitdepth = ceil(log2(png->colours)); /* Cast in down to 8 bit if we can. */ if (png->bitdepth <= 8) { VipsImage *x; if (vips_cast(in, &x, VIPS_FORMAT_UCHAR, NULL)) { g_object_unref(in); return -1; } g_object_unref(in); in = x; } /* If this is a RGB or RGBA image and a low bit depth has been * requested, enable palettization. */ if (in->Bands > 2 && png->bitdepth < 8) png->palette = TRUE; /* Disable palettization for >8 bit save. */ if (png->bitdepth > 8) png->palette = FALSE; if (vips__png_write_target(in, png->target, png->compression, png->interlace, save->profile, png->filter, png->palette, png->Q, png->dither, png->bitdepth, png->effort)) { g_object_unref(in); return -1; } if (vips_target_end(png->target)) return -1; g_object_unref(in); return 0; } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX /* Except for 8-bit inputs, we send everything else to 16. We decide on png8 * vs. png16 based on Type in_build(), see above. */ static VipsBandFormat bandfmt_png[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, UC, US, US, US, US, US, US, US, US }; static void vips_foreign_save_png_class_init(VipsForeignSavePngClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class; gobject_class->dispose = vips_foreign_save_png_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "pngsave_base"; object_class->description = _("save png"); object_class->build = vips_foreign_save_png_build; foreign_class->suffs = vips__png_suffs; save_class->saveable = VIPS_SAVEABLE_RGBA; save_class->format_table = bandfmt_png; VIPS_ARG_INT(class, "compression", 6, _("Compression"), _("Compression factor"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSavePng, compression), 0, 9, 6); VIPS_ARG_BOOL(class, "interlace", 7, _("Interlace"), _("Interlace image"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSavePng, interlace), FALSE); VIPS_ARG_FLAGS(class, "filter", 12, _("Filter"), _("libpng row filter flag(s)"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSavePng, filter), VIPS_TYPE_FOREIGN_PNG_FILTER, VIPS_FOREIGN_PNG_FILTER_NONE); VIPS_ARG_BOOL(class, "palette", 13, _("Palette"), _("Quantise to 8bpp palette"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSavePng, palette), FALSE); VIPS_ARG_INT(class, "Q", 15, _("Quality"), _("Quantisation quality"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSavePng, Q), 0, 100, 100); VIPS_ARG_DOUBLE(class, "dither", 16, _("Dithering"), _("Amount of dithering"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSavePng, dither), 0.0, 1.0, 1.0); VIPS_ARG_INT(class, "bitdepth", 17, _("Bit depth"), _("Write as a 1, 2, 4, 8 or 16 bit image"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSavePng, bitdepth), 1, 16, 8); VIPS_ARG_INT(class, "effort", 18, _("Effort"), _("Quantisation CPU effort"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSavePng, effort), 1, 10, 7); VIPS_ARG_INT(class, "colours", 14, _("Colours"), _("Max number of palette colours"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsForeignSavePng, colours), 2, 256, 256); } static void vips_foreign_save_png_init(VipsForeignSavePng *png) { png->compression = 6; png->filter = VIPS_FOREIGN_PNG_FILTER_NONE; png->Q = 100; png->dither = 1.0; png->effort = 7; } typedef struct _VipsForeignSavePngTarget { VipsForeignSavePng parent_object; VipsTarget *target; } VipsForeignSavePngTarget; typedef VipsForeignSavePngClass VipsForeignSavePngTargetClass; G_DEFINE_TYPE(VipsForeignSavePngTarget, vips_foreign_save_png_target, vips_foreign_save_png_get_type()); static int vips_foreign_save_png_target_build(VipsObject *object) { VipsForeignSavePng *png = (VipsForeignSavePng *) object; VipsForeignSavePngTarget *target = (VipsForeignSavePngTarget *) object; png->target = target->target; g_object_ref(png->target); if (VIPS_OBJECT_CLASS(vips_foreign_save_png_target_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_save_png_target_class_init(VipsForeignSavePngTargetClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "pngsave_target"; object_class->description = _("save image to target as PNG"); object_class->build = vips_foreign_save_png_target_build; VIPS_ARG_OBJECT(class, "target", 1, _("Target"), _("Target to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSavePngTarget, target), VIPS_TYPE_TARGET); } static void vips_foreign_save_png_target_init(VipsForeignSavePngTarget *target) { } typedef struct _VipsForeignSavePngFile { VipsForeignSavePng parent_object; char *filename; } VipsForeignSavePngFile; typedef VipsForeignSavePngClass VipsForeignSavePngFileClass; G_DEFINE_TYPE(VipsForeignSavePngFile, vips_foreign_save_png_file, vips_foreign_save_png_get_type()); static int vips_foreign_save_png_file_build(VipsObject *object) { VipsForeignSavePng *png = (VipsForeignSavePng *) object; VipsForeignSavePngFile *file = (VipsForeignSavePngFile *) object; if (!(png->target = vips_target_new_to_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_save_png_file_parent_class)->build(object)) return -1; return 0; } static void vips_foreign_save_png_file_class_init(VipsForeignSavePngFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "pngsave"; object_class->description = _("save image to png file"); object_class->build = vips_foreign_save_png_file_build; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSavePngFile, filename), NULL); } static void vips_foreign_save_png_file_init(VipsForeignSavePngFile *file) { } typedef struct _VipsForeignSavePngBuffer { VipsForeignSavePng parent_object; VipsArea *buf; } VipsForeignSavePngBuffer; typedef VipsForeignSavePngClass VipsForeignSavePngBufferClass; G_DEFINE_TYPE(VipsForeignSavePngBuffer, vips_foreign_save_png_buffer, vips_foreign_save_png_get_type()); static int vips_foreign_save_png_buffer_build(VipsObject *object) { VipsForeignSavePng *png = (VipsForeignSavePng *) object; VipsForeignSavePngBuffer *buffer = (VipsForeignSavePngBuffer *) object; VipsBlob *blob; if (!(png->target = vips_target_new_to_memory())) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_save_png_buffer_parent_class) ->build(object)) return -1; g_object_get(png->target, "blob", &blob, NULL); g_object_set(buffer, "buffer", blob, NULL); vips_area_unref(VIPS_AREA(blob)); return 0; } static void vips_foreign_save_png_buffer_class_init(VipsForeignSavePngBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "pngsave_buffer"; object_class->description = _("save image to png buffer"); object_class->build = vips_foreign_save_png_buffer_build; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to save to"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsForeignSavePngBuffer, buf), VIPS_TYPE_BLOB); } static void vips_foreign_save_png_buffer_init(VipsForeignSavePngBuffer *buffer) { } #endif /*HAVE_PNG*/ /** * vips_pngsave: (method) * @in: image to save * @filename: file to write to * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @compression: %gint, compression level * * @interlace: %gboolean, interlace image * * @filter: #VipsForeignPngFilter row filter flag(s) * * @palette: %gboolean, enable quantisation to 8bpp palette * * @Q: %gint, quality for 8bpp quantisation * * @dither: %gdouble, amount of dithering for 8bpp quantization * * @bitdepth: %gint, set write bit depth to 1, 2, 4, 8 or 16 * * @effort: %gint, quantisation CPU effort * * Write a VIPS image to a file as PNG. * * @compression means compress with this much effort (0 - 9). Default 6. * * Set @interlace to %TRUE to interlace the image with ADAM7 * interlacing. Beware * than an interlaced PNG can be up to 7 times slower to write than a * non-interlaced image. * * Use @filter to specify one or more filters, defaults to none, * see #VipsForeignPngFilter. * * The image is automatically converted to RGB, RGBA, Monochrome or Mono + * alpha before saving. Images with more than one byte per band element are * saved as 16-bit PNG, others are saved as 8-bit PNG. * * Set @palette to %TRUE to enable palette mode for RGB or RGBA images. A * palette will be computed with enough space for @bitdepth (1, 2, 4 or 8) * bits. Use @Q to set the optimisation effort, @dither to set the degree of * Floyd-Steinberg dithering and @effort to control the CPU effort * (1 is the fastest, 10 is the slowest, 7 is the default). * This feature requires libvips to be compiled with libimagequant. * * The default @bitdepth is either 8 or 16 depending on the interpretation. * You can also set @bitdepth for mono and mono + alpha images, and the image * will be quantized. * * XMP metadata is written to the XMP chunk. PNG comments are written to * separate text chunks. * * See also: vips_image_new_from_file(). * * Returns: 0 on success, -1 on error. */ int vips_pngsave(VipsImage *in, const char *filename, ...) { va_list ap; int result; va_start(ap, filename); result = vips_call_split("pngsave", ap, in, filename); va_end(ap); return result; } /** * vips_pngsave_buffer: (method) * @in: image to save * @buf: (array length=len) (element-type guint8): return output buffer here * @len: (type gsize): return output length here * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @compression: %gint, compression level * * @interlace: %gboolean, interlace image * * @filter: #VipsForeignPngFilter row filter flag(s) * * @palette: %gboolean, enable quantisation to 8bpp palette * * @Q: %gint, quality for 8bpp quantisation * * @dither: %gdouble, amount of dithering for 8bpp quantization * * @bitdepth: %gint, set write bit depth to 1, 2, 4, 8 or 16 * * @effort: %gint, quantisation CPU effort * * As vips_pngsave(), but save to a memory buffer. * * The address of the buffer is returned in @buf, the length of the buffer in * @len. You are responsible for freeing the buffer with g_free() when you * are done with it. * * See also: vips_pngsave(), vips_image_write_to_file(). * * Returns: 0 on success, -1 on error. */ int vips_pngsave_buffer(VipsImage *in, void **buf, size_t *len, ...) { va_list ap; VipsArea *area; int result; area = NULL; va_start(ap, len); result = vips_call_split("pngsave_buffer", ap, in, &area); va_end(ap); if (!result && area) { if (buf) { *buf = area->data; area->free_fn = NULL; } if (len) *len = area->length; vips_area_unref(area); } return result; } /** * vips_pngsave_target: (method) * @in: image to save * @target: save image to this target * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @compression: compression level * * @interlace: interlace image * * @filter: libpng row filter flag(s) * * @palette: enable quantisation to 8bpp palette * * @Q: quality for 8bpp quantisation * * @dither: amount of dithering for 8bpp quantization * * @bitdepth: %gint, set write bit depth to 1, 2, 4, 8 or 16 * * @effort: %gint, quantisation CPU effort * * As vips_pngsave(), but save to a target. * * See also: vips_pngsave(), vips_image_write_to_target(). * * Returns: 0 on success, -1 on error. */ int vips_pngsave_target(VipsImage *in, VipsTarget *target, ...) { va_list ap; int result; va_start(ap, target); result = vips_call_split("pngsave_target", ap, in, target); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/popplerload.c000066400000000000000000000524211454007373500210600ustar00rootroot00000000000000/* load PDF with libpoppler * * 7/2/16 * - from openslideload.c * 12/5/16 * - add @n ... number of pages to load * 23/11/16 * - set page-height, if we can * 28/6/17 * - use a much larger strip size, thanks bubba * 8/6/18 * - add background param * 16/8/18 [kleisauke] * - shut down the input file as soon as we can * 19/9/19 * - reopen the input if we minimised too early * 11/3/20 * - move on top of VipsSource * 21/9/20 * - allow dpi and scale to both be set [le0daniel] * 21/4/21 kleisauke * - include GObject part from pdfload.c * 28/1/22 * - add password */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "pforeign.h" #ifdef HAVE_POPPLER #include #include /* Render PDFs with tiles this size. They need to be pretty big to limit * overcomputation. * * An A4 page at 300dpi is 3508 pixels, so this should be enough to prevent * most rerendering. */ #define TILE_SIZE (4000) #define VIPS_TYPE_FOREIGN_LOAD_PDF (vips_foreign_load_pdf_get_type()) #define VIPS_FOREIGN_LOAD_PDF(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_FOREIGN_LOAD_PDF, VipsForeignLoadPdf)) #define VIPS_FOREIGN_LOAD_PDF_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_FOREIGN_LOAD_PDF, VipsForeignLoadPdfClass)) #define VIPS_IS_FOREIGN_LOAD_PDF(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_FOREIGN_LOAD_PDF)) #define VIPS_IS_FOREIGN_LOAD_PDF_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_FOREIGN_LOAD_PDF)) #define VIPS_FOREIGN_LOAD_PDF_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_FOREIGN_LOAD_PDF, VipsForeignLoadPdfClass)) typedef struct _VipsForeignLoadPdf { VipsForeignLoad parent_object; /* The VipsSource we load from, and the GInputStream we wrap around * it. Set from subclasses. */ VipsSource *source; GInputStream *stream; /* Load this page. */ int page_no; /* Load this many pages. */ int n; /* Render at this DPI. */ double dpi; /* Scale by this factor. */ double scale; /* The total scale factor we render with. */ double total_scale; /* Background colour. */ VipsArrayDouble *background; /* Decrypt with this. */ const char *password; /* Poppler is not thread-safe, so we run inside a single-threaded * cache. On the plus side, this means we only need one @page pointer, * even though we change this during _generate(). */ PopplerDocument *doc; PopplerPage *page; int current_page; /* Doc has this many pages. */ int n_pages; /* We need to read out the size of each page we will render, and lay * them out in the final image. */ VipsRect image; VipsRect *pages; /* The [double] background converted to the image format. */ VipsPel *ink; } VipsForeignLoadPdf; typedef struct _VipsForeignLoadPdfClass { VipsForeignLoadClass parent_class; } VipsForeignLoadPdfClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignLoadPdf, vips_foreign_load_pdf, VIPS_TYPE_FOREIGN_LOAD); static void vips_foreign_load_pdf_dispose(GObject *gobject) { VipsForeignLoadPdf *pdf = VIPS_FOREIGN_LOAD_PDF(gobject); VIPS_UNREF(pdf->page); VIPS_UNREF(pdf->doc); VIPS_UNREF(pdf->source); VIPS_UNREF(pdf->stream); G_OBJECT_CLASS(vips_foreign_load_pdf_parent_class)->dispose(gobject); } static int vips_foreign_load_pdf_build(VipsObject *object) { VipsForeignLoadPdf *pdf = VIPS_FOREIGN_LOAD_PDF(object); GError *error = NULL; if (vips_source_rewind(pdf->source)) return -1; pdf->total_scale = pdf->scale * pdf->dpi / 72.0; pdf->stream = vips_g_input_stream_new_from_source(pdf->source); if (!(pdf->doc = poppler_document_new_from_stream(pdf->stream, vips_source_length(pdf->source), pdf->password, NULL, &error))) { vips_g_error(&error); return -1; } if (VIPS_OBJECT_CLASS(vips_foreign_load_pdf_parent_class)->build(object)) return -1; return 0; } static VipsForeignFlags vips_foreign_load_pdf_get_flags_filename(const char *filename) { /* We can render any part of the page on demand. */ return VIPS_FOREIGN_PARTIAL; } static VipsForeignFlags vips_foreign_load_pdf_get_flags(VipsForeignLoad *load) { return VIPS_FOREIGN_PARTIAL; } static int vips_foreign_load_pdf_get_page(VipsForeignLoadPdf *pdf, int page_no) { if (pdf->current_page != page_no || !pdf->page) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(pdf); VIPS_UNREF(pdf->page); pdf->current_page = -1; #ifdef DEBUG printf("vips_foreign_load_pdf_get_page: %d\n", page_no); #endif /*DEBUG*/ if (!(pdf->page = poppler_document_get_page(pdf->doc, page_no))) { vips_error(class->nickname, _("unable to load page %d"), page_no); return -1; } pdf->current_page = page_no; } return 0; } /* String-based metadata fields we extract. */ typedef struct _VipsForeignLoadPdfMetadata { char *(*pdf_fetch)(PopplerDocument *doc); char *field; } VipsForeignLoadPdfMetadata; static VipsForeignLoadPdfMetadata vips_foreign_load_pdf_metadata[] = { { poppler_document_get_title, "pdf-title" }, { poppler_document_get_author, "pdf-author" }, { poppler_document_get_subject, "pdf-subject" }, { poppler_document_get_keywords, "pdf-keywords" }, { poppler_document_get_creator, "pdf-creator" }, { poppler_document_get_producer, "pdf-producer" }, { poppler_document_get_metadata, "pdf-metadata" }, }; static int n_metadata = VIPS_NUMBER(vips_foreign_load_pdf_metadata); static int vips_foreign_load_pdf_set_image(VipsForeignLoadPdf *pdf, VipsImage *out) { int i; double res; #ifdef DEBUG printf("vips_foreign_load_pdf_set_image: %p\n", pdf); #endif /*DEBUG*/ /* Extract and attach metadata. Set the old name too for compat. */ vips_image_set_int(out, "pdf-n_pages", pdf->n_pages); vips_image_set_int(out, VIPS_META_N_PAGES, pdf->n_pages); for (i = 0; i < n_metadata; i++) { VipsForeignLoadPdfMetadata *metadata = &vips_foreign_load_pdf_metadata[i]; char *str; if ((str = metadata->pdf_fetch(pdf->doc))) { vips_image_set_string(out, metadata->field, str); g_free(str); } } /* We need pixels/mm for vips. */ res = pdf->dpi / 25.4; vips_image_init_fields(out, pdf->image.width, pdf->image.height, 4, VIPS_FORMAT_UCHAR, VIPS_CODING_NONE, VIPS_INTERPRETATION_sRGB, res, res); /* We render to a tilecache, so it has to be SMALLTILE. */ if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_SMALLTILE, NULL)) return -1; return 0; } static int vips_foreign_load_pdf_header(VipsForeignLoad *load) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load); VipsForeignLoadPdf *pdf = VIPS_FOREIGN_LOAD_PDF(load); int top; int i; #ifdef DEBUG printf("vips_foreign_load_pdf_header: %p\n", pdf); #endif /*DEBUG*/ pdf->n_pages = poppler_document_get_n_pages(pdf->doc); /* @n == -1 means until the end of the doc. */ if (pdf->n == -1) pdf->n = pdf->n_pages - pdf->page_no; if (pdf->page_no + pdf->n > pdf->n_pages || pdf->page_no < 0 || pdf->n <= 0) { vips_error(class->nickname, "%s", _("pages out of range")); return -1; } /* Lay out the pages in our output image. */ if (!(pdf->pages = VIPS_ARRAY(pdf, pdf->n, VipsRect))) return -1; top = 0; pdf->image.left = 0; pdf->image.top = 0; pdf->image.width = 0; pdf->image.height = 0; for (i = 0; i < pdf->n; i++) { double width; double height; if (vips_foreign_load_pdf_get_page(pdf, pdf->page_no + i)) return -1; poppler_page_get_size(pdf->page, &width, &height); pdf->pages[i].left = 0; pdf->pages[i].top = top; /* We do round to nearest, in the same way that vips_resize() * does round to nearest. Without this, things like * shrink-on-load will break. */ pdf->pages[i].width = VIPS_RINT(width * pdf->total_scale); pdf->pages[i].height = VIPS_RINT(height * pdf->total_scale); if (pdf->pages[i].width > pdf->image.width) pdf->image.width = pdf->pages[i].width; pdf->image.height += pdf->pages[i].height; top += pdf->pages[i].height; } /* If all pages are the same height, we can tag this as a toilet roll * image. */ for (i = 1; i < pdf->n; i++) if (pdf->pages[i].height != pdf->pages[0].height) break; /* Only set page-height if we have more than one page, or this could * accidentally turn into an animated image later. */ if (pdf->n > 1) vips_image_set_int(load->out, VIPS_META_PAGE_HEIGHT, pdf->pages[0].height); vips_foreign_load_pdf_set_image(pdf, load->out); /* Convert the background to the image format. */ if (!(pdf->ink = vips__vector_to_ink(class->nickname, load->out, VIPS_AREA(pdf->background)->data, NULL, VIPS_AREA(pdf->background)->n))) return -1; /* Swap to cairo-style premultiplied bgra. */ vips__rgba2bgra_premultiplied((guint32 *) pdf->ink, 1); vips_source_minimise(pdf->source); return 0; } static void vips_foreign_load_pdf_minimise(VipsImage *image, VipsForeignLoadPdf *pdf) { vips_source_minimise(pdf->source); } static int vips_foreign_load_pdf_generate(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsForeignLoadPdf *pdf = VIPS_FOREIGN_LOAD_PDF(a); VipsRect *r = &out_region->valid; int top; int i; int y; /* printf("vips_foreign_load_pdf_generate: " "left = %d, top = %d, width = %d, height = %d\n", r->left, r->top, r->width, r->height); */ /* Poppler won't always paint the background. */ vips_region_paint_pel(out_region, r, pdf->ink); /* Search through the pages we are drawing for the first containing * this rect. This could be quicker, perhaps a binary search, but who * cares. */ for (i = 0; i < pdf->n; i++) if (VIPS_RECT_BOTTOM(&pdf->pages[i]) > r->top) break; top = r->top; while (top < VIPS_RECT_BOTTOM(r)) { VipsRect rect; cairo_surface_t *surface; cairo_t *cr; vips_rect_intersectrect(r, &pdf->pages[i], &rect); surface = cairo_image_surface_create_for_data( VIPS_REGION_ADDR(out_region, rect.left, rect.top), CAIRO_FORMAT_ARGB32, rect.width, rect.height, VIPS_REGION_LSKIP(out_region)); cr = cairo_create(surface); cairo_surface_destroy(surface); cairo_scale(cr, pdf->total_scale, pdf->total_scale); cairo_translate(cr, (pdf->pages[i].left - rect.left) / pdf->total_scale, (pdf->pages[i].top - rect.top) / pdf->total_scale); /* poppler is single-threaded, but we don't need to lock since * we're running inside a non-threaded tilecache. */ if (vips_foreign_load_pdf_get_page(pdf, pdf->page_no + i)) return -1; poppler_page_render(pdf->page, cr); cairo_destroy(cr); top += rect.height; i += 1; } /* Cairo makes pre-multipled BRGA, we must byteswap and unpremultiply. */ for (y = 0; y < r->height; y++) vips__premultiplied_bgra2rgba( (guint32 *) VIPS_REGION_ADDR(out_region, r->left, r->top + y), r->width); return 0; } static int vips_foreign_load_pdf_load(VipsForeignLoad *load) { VipsForeignLoadPdf *pdf = VIPS_FOREIGN_LOAD_PDF(load); VipsImage **t = (VipsImage **) vips_object_local_array((VipsObject *) load, 2); #ifdef DEBUG printf("vips_foreign_load_pdf_load: %p\n", pdf); #endif /*DEBUG*/ /* Read to this image, then cache to out, see below. */ t[0] = vips_image_new(); /* Close input immediately at end of read. */ g_signal_connect(t[0], "minimise", G_CALLBACK(vips_foreign_load_pdf_minimise), pdf); vips_foreign_load_pdf_set_image(pdf, t[0]); if (vips_image_generate(t[0], NULL, vips_foreign_load_pdf_generate, NULL, pdf, NULL) || vips_tilecache(t[0], &t[1], "tile_width", TILE_SIZE, "tile_height", TILE_SIZE, "max_tiles", 2 * (1 + t[0]->Xsize / TILE_SIZE), NULL) || vips_image_write(t[1], load->real)) return -1; return 0; } static void vips_foreign_load_pdf_class_init(VipsForeignLoadPdfClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->dispose = vips_foreign_load_pdf_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "pdfload_base"; object_class->description = _("load PDF with libpoppler"); object_class->build = vips_foreign_load_pdf_build; /* libpoppler is fuzzed, but not by us. */ operation_class->flags |= VIPS_OPERATION_UNTRUSTED; load_class->get_flags_filename = vips_foreign_load_pdf_get_flags_filename; load_class->get_flags = vips_foreign_load_pdf_get_flags; load_class->header = vips_foreign_load_pdf_header; load_class->load = vips_foreign_load_pdf_load; VIPS_ARG_INT(class, "page", 20, _("Page"), _("First page to load"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPdf, page_no), 0, 100000, 0); VIPS_ARG_INT(class, "n", 21, _("n"), _("Number of pages to load, -1 for all"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPdf, n), -1, 100000, 1); VIPS_ARG_DOUBLE(class, "dpi", 22, _("DPI"), _("DPI to render at"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPdf, dpi), 0.001, 100000.0, 72.0); VIPS_ARG_DOUBLE(class, "scale", 23, _("Scale"), _("Factor to scale by"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPdf, scale), 0.001, 100000.0, 1.0); VIPS_ARG_BOXED(class, "background", 24, _("Background"), _("Background colour"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPdf, background), VIPS_TYPE_ARRAY_DOUBLE); VIPS_ARG_STRING(class, "password", 25, _("Password"), _("Password to decrypt with"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPdf, password), NULL); } static void vips_foreign_load_pdf_init(VipsForeignLoadPdf *pdf) { pdf->dpi = 72.0; pdf->scale = 1.0; pdf->n = 1; pdf->current_page = -1; pdf->background = vips_array_double_newv(1, 255.0); } typedef struct _VipsForeignLoadPdfFile { VipsForeignLoadPdf parent_object; /* Filename for load. */ char *filename; char *uri; } VipsForeignLoadPdfFile; typedef VipsForeignLoadPdfClass VipsForeignLoadPdfFileClass; G_DEFINE_TYPE(VipsForeignLoadPdfFile, vips_foreign_load_pdf_file, vips_foreign_load_pdf_get_type()); static void vips_foreign_load_pdf_file_dispose(GObject *gobject) { VipsForeignLoadPdfFile *file = (VipsForeignLoadPdfFile *) gobject; VIPS_FREE(file->uri); G_OBJECT_CLASS(vips_foreign_load_pdf_file_parent_class)->dispose(gobject); } static int vips_foreign_load_pdf_file_header(VipsForeignLoad *load) { VipsForeignLoadPdfFile *file = (VipsForeignLoadPdfFile *) load; VIPS_SETSTR(load->out->filename, file->filename); return VIPS_FOREIGN_LOAD_CLASS(vips_foreign_load_pdf_file_parent_class) ->header(load); } static const char *vips_foreign_pdf_suffs[] = { ".pdf", NULL }; static int vips_foreign_load_pdf_file_build(VipsObject *object) { VipsForeignLoadPdf *pdf = VIPS_FOREIGN_LOAD_PDF(object); VipsForeignLoadPdfFile *file = (VipsForeignLoadPdfFile *) pdf; #ifdef DEBUG printf("vips_foreign_load_pdf_file_build: %s\n", file->filename); #endif /*DEBUG*/ if (file->filename) { char *path; GError *error = NULL; /* We need an absolute path for a URI. */ path = vips_realpath(file->filename); if (!(file->uri = g_filename_to_uri(path, NULL, &error))) { g_free(path); vips_g_error(&error); return -1; } g_free(path); if (!(pdf->source = vips_source_new_from_file(file->filename))) return -1; } return VIPS_OBJECT_CLASS(vips_foreign_load_pdf_file_parent_class) ->build(object); } static gboolean vips_foreign_load_pdf_is_a_buffer(const void *buf, size_t len) { const guchar *str = (const guchar *) buf; if (len >= 4 && str[0] == '%' && str[1] == 'P' && str[2] == 'D' && str[3] == 'F') return 1; return 0; } static gboolean vips_foreign_load_pdf_is_a(const char *filename) { unsigned char buf[4]; if (vips__get_bytes(filename, buf, 4) == 4 && vips_foreign_load_pdf_is_a_buffer(buf, 4)) return 1; return 0; } static void vips_foreign_load_pdf_file_class_init( VipsForeignLoadPdfFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->dispose = vips_foreign_load_pdf_file_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "pdfload"; object_class->description = _("load PDF from file"); object_class->build = vips_foreign_load_pdf_file_build; foreign_class->suffs = vips_foreign_pdf_suffs; load_class->is_a = vips_foreign_load_pdf_is_a; load_class->header = vips_foreign_load_pdf_file_header; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPdfFile, filename), NULL); } static void vips_foreign_load_pdf_file_init(VipsForeignLoadPdfFile *file) { } typedef struct _VipsForeignLoadPdfBuffer { VipsForeignLoadPdf parent_object; /* Load from a buffer. */ VipsArea *buf; } VipsForeignLoadPdfBuffer; typedef VipsForeignLoadPdfClass VipsForeignLoadPdfBufferClass; G_DEFINE_TYPE(VipsForeignLoadPdfBuffer, vips_foreign_load_pdf_buffer, vips_foreign_load_pdf_get_type()); static int vips_foreign_load_pdf_buffer_build(VipsObject *object) { VipsForeignLoadPdf *pdf = VIPS_FOREIGN_LOAD_PDF(object); VipsForeignLoadPdfBuffer *buffer = (VipsForeignLoadPdfBuffer *) pdf; if (buffer->buf && !(pdf->source = vips_source_new_from_memory( VIPS_AREA(buffer->buf)->data, VIPS_AREA(buffer->buf)->length))) return -1; return VIPS_OBJECT_CLASS(vips_foreign_load_pdf_buffer_parent_class) ->build(object); } static void vips_foreign_load_pdf_buffer_class_init( VipsForeignLoadPdfBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "pdfload_buffer"; object_class->description = _("load PDF from buffer"); object_class->build = vips_foreign_load_pdf_buffer_build; load_class->is_a_buffer = vips_foreign_load_pdf_is_a_buffer; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPdfBuffer, buf), VIPS_TYPE_BLOB); } static void vips_foreign_load_pdf_buffer_init(VipsForeignLoadPdfBuffer *buffer) { } typedef struct _VipsForeignLoadPdfSource { VipsForeignLoadPdf parent_object; VipsSource *source; } VipsForeignLoadPdfSource; typedef VipsForeignLoadPdfClass VipsForeignLoadPdfSourceClass; G_DEFINE_TYPE(VipsForeignLoadPdfSource, vips_foreign_load_pdf_source, vips_foreign_load_pdf_get_type()); static int vips_foreign_load_pdf_source_build(VipsObject *object) { VipsForeignLoadPdf *pdf = VIPS_FOREIGN_LOAD_PDF(object); VipsForeignLoadPdfSource *source = (VipsForeignLoadPdfSource *) pdf; if (source->source) { pdf->source = source->source; g_object_ref(pdf->source); } return VIPS_OBJECT_CLASS(vips_foreign_load_pdf_source_parent_class) ->build(object); } static gboolean vips_foreign_load_pdf_source_is_a_source(VipsSource *source) { const unsigned char *p; return (p = vips_source_sniff(source, 4)) && p[0] == '%' && p[1] == 'P' && p[2] == 'D' && p[3] == 'F'; } static void vips_foreign_load_pdf_source_class_init( VipsForeignLoadPdfSourceClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "pdfload_source"; object_class->description = _("load PDF from source"); object_class->build = vips_foreign_load_pdf_source_build; operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_pdf_source_is_a_source; VIPS_ARG_OBJECT(class, "source", 1, _("Source"), _("Source to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPdfSource, source), VIPS_TYPE_SOURCE); } static void vips_foreign_load_pdf_source_init(VipsForeignLoadPdfSource *source) { } #endif /*defined(HAVE_POPPLER)*/ /* The C API wrappers are defined in foreign.c. */ libvips-8.15.1/libvips/foreign/ppmload.c000066400000000000000000000532761454007373500202040ustar00rootroot00000000000000/* load ppm from a file * * Stephen Chan ... original code * * 21/11/00 JC * - hacked for VIPS * - reads ppm/pgm/pbm * - mmaps binary pgm/ppm * - reads all ascii formats (slowly!) * 22/11/00 JC * - oops, ascii read was broken * - does 16/32 bit ascii now as well * 24/5/01 * - im_ppm2vips_header() added * 28/11/03 JC * - better no-overshoot on tile loop * 22/5/04 * - does 16/32 bit binary too * - tiny fix for missing file close on read error * 19/8/05 * - use im_raw2vips() for binary read * 9/9/05 * - tiny cleanups * 3/11/07 * - use im_wbuffer() for bg writes * 1/5/10 * - add PFM (portable float map) support * 19/12/11 * - rework as a set of fns ready to be called from a class * 8/11/14 * - add 1 bit write * 29/7/19 Kyle-Kyle * - fix a loop with malformed ppm * 13/11/19 * - redone with source/target * - sequential load, plus mmap for filename sources * - faster plus lower memory use * 02/02/20 * - ban max_vaue < 0 * 27/6/20 * - add ppmload_source * 22/11/20 * - fix msb_first default [ewelot] * 26/12/20 * - don't byteswap ascii formats * - set metadata for map loads * - byteswap binary loads */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pforeign.h" #ifdef HAVE_PPM typedef struct _VipsForeignLoadPpm { VipsForeignLoad parent_object; /* The source we load from, and the buffered wrapper for it. */ VipsSource *source; VipsSbuf *sbuf; /* Properties of this ppm, from the header. */ int width; int height; int bands; VipsBandFormat format; VipsInterpretation interpretation; float scale; int max_value; int index; /* ppm type .. index in magic_names[] */ int bits; /* 1, 8, 16 or 32 */ gboolean ascii; /* TRUE for ascii encoding */ gboolean msb_first; /* TRUE if most sig byte is first */ gboolean have_read_header; } VipsForeignLoadPpm; typedef VipsForeignLoadClass VipsForeignLoadPpmClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignLoadPpm, vips_foreign_load_ppm, VIPS_TYPE_FOREIGN_LOAD); /* ppm types. */ static char *magic_names[] = { "P1", /* pbm ... 1 band 1 bit, ascii */ "P2", /* pgm ... 1 band many bit, ascii */ "P3", /* ppm ... 3 band many bit, ascii */ "P4", /* pbm ... 1 band 1 bit, binary */ "P5", /* pgm ... 1 band 8 bit, binary */ "P6", /* ppm ... 3 band 8 bit, binary */ "PF", /* pfm ... 3 band 32 bit, binary */ "Pf" /* pfm ... 1 band 32 bit, binary */ }; /* Shared with ppmsave. */ const char *vips__ppm_suffs[] = { ".pbm", ".pgm", ".ppm", ".pfm", ".pnm", NULL }; const char *vips__save_pbm_suffs[] = { ".pbm", NULL }; const char *vips__save_pgm_suffs[] = { ".pgm", NULL }; const char *vips__save_ppm_suffs[] = { ".ppm", NULL }; const char *vips__save_pfm_suffs[] = { ".pfm", NULL }; const char *vips__save_pnm_suffs[] = { ".pnm", NULL }; static gboolean vips_foreign_load_ppm_is_a_source(VipsSource *source) { const unsigned char *data; if ((data = vips_source_sniff(source, 2))) { int i; for (i = 0; i < VIPS_NUMBER(magic_names); i++) if (vips_isprefix(magic_names[i], (char *) data)) return TRUE; } return FALSE; } static int get_int(VipsSbuf *sbuf, int *i) { const char *txt; if (vips_sbuf_skip_whitespace(sbuf) || !(txt = vips_sbuf_get_non_whitespace(sbuf))) return -1; *i = atoi(txt); return 0; } static int get_float(VipsSbuf *sbuf, float *f) { const char *txt; if (vips_sbuf_skip_whitespace(sbuf) || !(txt = vips_sbuf_get_non_whitespace(sbuf))) return -1; /* We don't want the locale str -> float conversion. */ *f = g_ascii_strtod(txt, NULL); return 0; } static void vips_foreign_load_ppm_dispose(GObject *gobject) { VipsForeignLoadPpm *ppm = (VipsForeignLoadPpm *) gobject; #ifdef DEBUG printf("vips_foreign_load_ppm_dispose: %p\n", ppm); #endif /*DEBUG*/ VIPS_UNREF(ppm->sbuf); VIPS_UNREF(ppm->source); G_OBJECT_CLASS(vips_foreign_load_ppm_parent_class)->dispose(gobject); } static int vips_foreign_load_ppm_build(VipsObject *object) { VipsForeignLoadPpm *ppm = (VipsForeignLoadPpm *) object; if (ppm->source) ppm->sbuf = vips_sbuf_new_from_source(ppm->source); if (VIPS_OBJECT_CLASS(vips_foreign_load_ppm_parent_class)->build(object)) return -1; return 0; } /* Scan the header into our class. */ static int vips_foreign_load_ppm_parse_header(VipsForeignLoadPpm *ppm) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(ppm); int i; char buf[2]; /* Characteristics, indexed by ppm type. */ static int lookup_bits[] = { 1, 8, 8, 1, 8, 8, 32, 32 }; static int lookup_bands[] = { 1, 1, 3, 1, 1, 3, 3, 1 }; static int lookup_ascii[] = { 1, 1, 1, 0, 0, 0, 0, 0 }; if (vips_source_rewind(ppm->source)) return -1; /* Read in the magic number. */ buf[0] = VIPS_SBUF_GETC(ppm->sbuf); buf[1] = VIPS_SBUF_GETC(ppm->sbuf); for (i = 0; i < VIPS_NUMBER(magic_names); i++) if (vips_isprefix(magic_names[i], buf)) break; if (i == VIPS_NUMBER(magic_names)) { vips_error(class->nickname, "%s", _("bad magic number")); return -1; } ppm->index = i; ppm->bits = lookup_bits[i]; ppm->bands = lookup_bands[i]; ppm->ascii = lookup_ascii[i]; /* Default ... can be changed below for PFM images. */ ppm->msb_first = 1; /* Read in size. */ if (get_int(ppm->sbuf, &ppm->width) || get_int(ppm->sbuf, &ppm->height)) return -1; /* Read in max value / scale for >1 bit images. */ if (ppm->bits > 1) { if (ppm->index == 6 || ppm->index == 7) { if (get_float(ppm->sbuf, &ppm->scale)) return -1; /* Scale > 0 means big-endian. */ ppm->msb_first = ppm->scale > 0; } else { if (get_int(ppm->sbuf, &ppm->max_value)) return -1; /* max_value must be > 0 and <= 65535, according to * the spec, but we allow up to 32 bits per pixel. */ if (ppm->max_value < 0) ppm->max_value = 0; if (ppm->max_value > 255) ppm->bits = 16; if (ppm->max_value > 65535) ppm->bits = 32; } } /* For binary images, there is always exactly 1 more whitespace * character before the data starts. */ if (!ppm->ascii && !isspace(VIPS_SBUF_GETC(ppm->sbuf))) { vips_error(class->nickname, "%s", _("no whitespace before start of binary data")); return -1; } /* Choose a VIPS bandfmt. */ switch (ppm->bits) { case 1: case 8: ppm->format = VIPS_FORMAT_UCHAR; break; case 16: ppm->format = VIPS_FORMAT_USHORT; break; case 32: if (ppm->index == 6 || ppm->index == 7) ppm->format = VIPS_FORMAT_FLOAT; else ppm->format = VIPS_FORMAT_UINT; break; default: g_assert_not_reached(); /* Stop compiler warnings. */ ppm->format = VIPS_FORMAT_UCHAR; } if (ppm->bands == 1) { if (ppm->format == VIPS_FORMAT_USHORT) ppm->interpretation = VIPS_INTERPRETATION_GREY16; else ppm->interpretation = VIPS_INTERPRETATION_B_W; } else { if (ppm->format == VIPS_FORMAT_USHORT) ppm->interpretation = VIPS_INTERPRETATION_RGB16; else ppm->interpretation = VIPS_INTERPRETATION_sRGB; } ppm->have_read_header = TRUE; #ifdef DEBUG printf("vips_foreign_load_ppm_parse_header:\n"); printf("\twidth = %d\n", ppm->width); printf("\theight = %d\n", ppm->height); printf("\tbands = %d\n", ppm->bands); printf("\tformat = %s\n", vips_enum_nick(VIPS_TYPE_BAND_FORMAT, ppm->format)); printf("\tinterpretation = %s\n", vips_enum_nick(VIPS_TYPE_INTERPRETATION, ppm->interpretation)); printf("\tscale = %g\n", ppm->scale); printf("\tmax_value = %d\n", ppm->max_value); printf("\tbits = %d\n", ppm->bits); printf("\tacsii = %d\n", ppm->ascii); printf("\tmsb_first = %d\n", ppm->msb_first); #endif /*DEBUG*/ return 0; } static VipsForeignFlags vips_foreign_load_ppm_get_flags(VipsForeignLoad *load) { VipsForeignLoadPpm *ppm = (VipsForeignLoadPpm *) load; VipsForeignFlags flags; flags = 0; /* If this source supports fast mmap and this PPM is >=8 bit binary, * then we can mmap the file and support partial load. Otherwise, * it's sequential. */ if (!ppm->have_read_header && vips_foreign_load_ppm_parse_header(ppm)) return 0; if (vips_source_is_mappable(ppm->source) && !ppm->ascii && ppm->bits >= 8) flags |= VIPS_FOREIGN_PARTIAL; else flags |= VIPS_FOREIGN_SEQUENTIAL; return flags; } static void vips_foreign_load_ppm_set_image_metadata(VipsForeignLoadPpm *ppm, VipsImage *image) { image->Type = ppm->interpretation; if (ppm->index == 6 || ppm->index == 7) vips_image_set_double(image, "pfm-scale", VIPS_FABS(ppm->scale)); else vips_image_set_double(image, "ppm-max-value", VIPS_ABS(ppm->max_value)); VIPS_SETSTR(image->filename, vips_connection_filename(VIPS_CONNECTION(ppm->sbuf->source))); #ifdef DEBUG printf("vips_foreign_load_ppm_set_image: "); vips_object_print_summary(VIPS_OBJECT(image)); #endif /*DEBUG*/ } static void vips_foreign_load_ppm_set_image(VipsForeignLoadPpm *ppm, VipsImage *image) { vips_image_init_fields(image, ppm->width, ppm->height, ppm->bands, ppm->format, VIPS_CODING_NONE, ppm->interpretation, 1.0, 1.0); (void) vips_image_pipelinev(image, VIPS_DEMAND_STYLE_THINSTRIP, NULL); vips_foreign_load_ppm_set_image_metadata(ppm, image); #ifdef DEBUG printf("vips_foreign_load_ppm_set_image: "); vips_object_print_summary(VIPS_OBJECT(image)); #endif /*DEBUG*/ } static int vips_foreign_load_ppm_header(VipsForeignLoad *load) { VipsForeignLoadPpm *ppm = (VipsForeignLoadPpm *) load; if (!ppm->have_read_header && vips_foreign_load_ppm_parse_header(ppm)) return 0; vips_foreign_load_ppm_set_image(ppm, load->out); vips_source_minimise(ppm->source); return 0; } /* Read a ppm/pgm file using mmap(). */ static VipsImage * vips_foreign_load_ppm_map(VipsForeignLoadPpm *ppm) { gint64 header_offset; size_t length; const void *data; VipsImage *out; #ifdef DEBUG printf("vips_foreign_load_ppm_map:\n"); #endif /*DEBUG*/ vips_sbuf_unbuffer(ppm->sbuf); header_offset = vips_source_seek(ppm->source, 0, SEEK_CUR); data = vips_source_map(ppm->source, &length); if (header_offset < 0 || !data) return NULL; data = (char *) data + header_offset; length -= header_offset; if (!(out = vips_image_new_from_memory(data, length, ppm->width, ppm->height, ppm->bands, ppm->format))) return NULL; vips_foreign_load_ppm_set_image_metadata(ppm, out); return out; } static int vips_foreign_load_ppm_generate_binary(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRect *r = &out_region->valid; VipsForeignLoadPpm *ppm = (VipsForeignLoadPpm *) a; VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(ppm); VipsImage *image = out_region->im; size_t sizeof_line = VIPS_IMAGE_SIZEOF_LINE(image); int y; for (y = 0; y < r->height; y++) { VipsPel *q = VIPS_REGION_ADDR(out_region, 0, r->top + y); size_t n_bytes; n_bytes = sizeof_line; while (n_bytes > 0) { gint64 bytes_read; bytes_read = vips_source_read(ppm->source, q, n_bytes); if (bytes_read < 0) return -1; if (bytes_read == 0) { vips_error(class->nickname, "%s", _("file truncated")); return -1; } q += bytes_read; n_bytes -= bytes_read; } } return 0; } static int vips_foreign_load_ppm_generate_1bit_ascii(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRect *r = &out_region->valid; VipsForeignLoadPpm *ppm = (VipsForeignLoadPpm *) a; VipsImage *image = out_region->im; int x, y; for (y = 0; y < r->height; y++) { VipsPel *q = VIPS_REGION_ADDR(out_region, 0, r->top + y); for (x = 0; x < image->Xsize; x++) { int val; if (get_int(ppm->sbuf, &val)) return -1; if (val) q[x] = 0; else q[x] = 255; } } return 0; } static int vips_foreign_load_ppm_generate_1bit_binary(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRect *r = &out_region->valid; VipsForeignLoadPpm *ppm = (VipsForeignLoadPpm *) a; VipsImage *image = out_region->im; int x, y; for (y = 0; y < r->height; y++) { VipsPel *q = VIPS_REGION_ADDR(out_region, 0, r->top + y); int bits; /* Not needed, but stop a compiler warning. */ bits = 0; for (x = 0; x < image->Xsize; x++) { if ((x & 7) == 0) bits = VIPS_SBUF_GETC(ppm->sbuf); q[x] = (bits & 128) ? 0 : 255; bits = VIPS_LSHIFT_INT(bits, 1); } } return 0; } static int vips_foreign_load_ppm_generate_ascii_int(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRect *r = &out_region->valid; VipsForeignLoadPpm *ppm = (VipsForeignLoadPpm *) a; VipsImage *image = out_region->im; int n_elements = image->Xsize * image->Bands; int i, y; for (y = 0; y < r->height; y++) { VipsPel *q = VIPS_REGION_ADDR(out_region, r->left, r->top + y); for (i = 0; i < n_elements; i++) { int val; if (get_int(ppm->sbuf, &val)) return -1; switch (image->BandFmt) { case VIPS_FORMAT_UCHAR: q[i] = VIPS_CLIP(0, val, 255); break; case VIPS_FORMAT_USHORT: ((unsigned short *) q)[i] = VIPS_CLIP(0, val, 65535); break; case VIPS_FORMAT_UINT: ((unsigned int *) q)[i] = val; break; default: g_assert_not_reached(); } } } return 0; } static VipsImage * vips_foreign_load_ppm_scan(VipsForeignLoadPpm *ppm) { VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(ppm), 2); VipsImage *out; VipsGenerateFn generate; /* What sort of read are we doing? */ if (!ppm->ascii && ppm->bits >= 8) { #ifdef DEBUG printf("vips_foreign_load_ppm_source: >1 bit binary load\n"); #endif /*DEBUG*/ generate = vips_foreign_load_ppm_generate_binary; /* The binary loader does not use the buffered IO * object. */ vips_sbuf_unbuffer(ppm->sbuf); } else if (!ppm->ascii && ppm->bits == 1) { #ifdef DEBUG printf("vips_foreign_load_ppm_source: 1-bit binary load\n"); #endif /*DEBUG*/ generate = vips_foreign_load_ppm_generate_1bit_binary; } else if (ppm->ascii && ppm->bits == 1) { #ifdef DEBUG printf("vips_foreign_load_ppm_source: 1-bit ascii load\n"); #endif /*DEBUG*/ generate = vips_foreign_load_ppm_generate_1bit_ascii; } else { #ifdef DEBUG printf("vips_foreign_load_ppm_source: >1-bit ascii load\n"); #endif /*DEBUG*/ generate = vips_foreign_load_ppm_generate_ascii_int; } t[0] = vips_image_new(); vips_foreign_load_ppm_set_image(ppm, t[0]); if (vips_image_generate(t[0], NULL, generate, NULL, ppm, NULL) || vips_sequential(t[0], &out, NULL)) return NULL; return out; } static int vips_foreign_load_ppm_load(VipsForeignLoad *load) { VipsForeignLoadPpm *ppm = (VipsForeignLoadPpm *) load; VipsImage **t = (VipsImage **) vips_object_local_array((VipsObject *) load, 2); if (!ppm->have_read_header && vips_foreign_load_ppm_parse_header(ppm)) return 0; /* If the source is mappable and this is a binary file, we can map it. */ if (vips_source_is_mappable(ppm->source) && !ppm->ascii && ppm->bits >= 8) { if (!(t[0] = vips_foreign_load_ppm_map(ppm))) return -1; } else { if (!(t[0] = vips_foreign_load_ppm_scan(ppm))) return -1; } #ifdef DEBUG printf("vips_foreign_load_ppm: byteswap = %d\n", vips_amiMSBfirst() != ppm->msb_first); #endif /*DEBUG*/ /* Don't byteswap the ascii formats. */ if (vips__byteswap_bool(t[0], &t[1], !ppm->ascii && vips_amiMSBfirst() != ppm->msb_first) || vips_image_write(t[1], load->real)) return -1; if (vips_source_decode(ppm->source)) return -1; return 0; } static void vips_foreign_load_ppm_class_init(VipsForeignLoadPpmClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->dispose = vips_foreign_load_ppm_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "ppmload_base"; object_class->description = _("load ppm base class"); object_class->build = vips_foreign_load_ppm_build; /* You're unlikely to want to use this on untrusted files. */ operation_class->flags |= VIPS_OPERATION_UNTRUSTED; foreign_class->suffs = vips__ppm_suffs; /* We are fast at is_a(), so high priority. */ foreign_class->priority = 200; load_class->get_flags = vips_foreign_load_ppm_get_flags; load_class->header = vips_foreign_load_ppm_header; load_class->load = vips_foreign_load_ppm_load; } static void vips_foreign_load_ppm_init(VipsForeignLoadPpm *ppm) { ppm->scale = 1.0; } typedef struct _VipsForeignLoadPpmFile { VipsForeignLoadPpm parent_object; char *filename; } VipsForeignLoadPpmFile; typedef VipsForeignLoadPpmClass VipsForeignLoadPpmFileClass; G_DEFINE_TYPE(VipsForeignLoadPpmFile, vips_foreign_load_ppm_file, vips_foreign_load_ppm_get_type()); static gboolean vips_foreign_load_ppm_file_is_a(const char *filename) { VipsSource *source; gboolean result; if (!(source = vips_source_new_from_file(filename))) return FALSE; result = vips_foreign_load_ppm_is_a_source(source); VIPS_UNREF(source); return result; } static int vips_foreign_load_ppm_file_build(VipsObject *object) { VipsForeignLoadPpmFile *file = (VipsForeignLoadPpmFile *) object; VipsForeignLoadPpm *ppm = (VipsForeignLoadPpm *) object; if (file->filename && !(ppm->source = vips_source_new_from_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_ppm_file_parent_class)->build(object)) return -1; return 0; } static void vips_foreign_load_ppm_file_class_init(VipsForeignLoadPpmClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "ppmload"; object_class->description = _("load ppm from file"); object_class->build = vips_foreign_load_ppm_file_build; load_class->is_a = vips_foreign_load_ppm_file_is_a; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPpmFile, filename), NULL); } static void vips_foreign_load_ppm_file_init(VipsForeignLoadPpmFile *file) { } typedef struct _VipsForeignLoadPpmSource { VipsForeignLoadPpm parent_object; VipsSource *source; } VipsForeignLoadPpmSource; typedef VipsForeignLoadPpmClass VipsForeignLoadPpmSourceClass; G_DEFINE_TYPE(VipsForeignLoadPpmSource, vips_foreign_load_ppm_source, vips_foreign_load_ppm_get_type()); static int vips_foreign_load_ppm_source_build(VipsObject *object) { VipsForeignLoadPpm *ppm = (VipsForeignLoadPpm *) object; VipsForeignLoadPpmSource *source = (VipsForeignLoadPpmSource *) object; if (source->source) { ppm->source = source->source; g_object_ref(ppm->source); } if (VIPS_OBJECT_CLASS(vips_foreign_load_ppm_source_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_load_ppm_source_class_init(VipsForeignLoadPpmFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "ppmload_source"; object_class->build = vips_foreign_load_ppm_source_build; operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_ppm_is_a_source; VIPS_ARG_OBJECT(class, "source", 1, _("Source"), _("Source to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPpmSource, source), VIPS_TYPE_SOURCE); } static void vips_foreign_load_ppm_source_init(VipsForeignLoadPpmSource *source) { } #endif /*HAVE_PPM*/ /** * vips_ppmload: * @filename: file to load * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Read a PPM/PBM/PGM/PFM file into a VIPS image. * * It can read 1, 8, 16 and 32 bit images, colour or monochrome, * stored in binary or in ASCII. One bit images become 8 bit VIPS images, * with 0 and 255 for 0 and 1. * * See also: vips_image_new_from_file(). * * Returns: 0 on success, -1 on error. */ int vips_ppmload(const char *filename, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("ppmload", ap, filename, out); va_end(ap); return result; } /** * vips_ppmload_source: * @source: source to load * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Exactly as vips_ppmload(), but read from a source. * * See also: vips_ppmload(). * * Returns: 0 on success, -1 on error. */ int vips_ppmload_source(VipsSource *source, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("ppmload_source", ap, source, out); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/ppmsave.c000066400000000000000000000476121454007373500202200ustar00rootroot00000000000000/* save to ppm * * 2/12/11 * - wrap a class around the ppm writer * 13/11/19 * - redone with targets * 18/6/20 * - add "bitdepth" param, cf. tiffsave * 27/6/20 * - add ppmsave_target * 20/11/20 * - byteswap on save, if necessary [ewelot] * 2/12/20 * - don't add date with @strip [ewelot] * 28/10/21 * - add @format, default type by filename * 30/8/22 * - add ".pnm", save as image format [ewelot] */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pforeign.h" #ifdef HAVE_PPM typedef struct _VipsForeignSavePpm VipsForeignSavePpm; typedef int (*VipsSavePpmFn)(VipsForeignSavePpm *, VipsImage *, VipsPel *); struct _VipsForeignSavePpm { VipsForeignSave parent_object; VipsTarget *target; VipsForeignPpmFormat format; gboolean ascii; int bitdepth; VipsSavePpmFn fn; /* Deprecated. */ gboolean squash; }; typedef VipsForeignSaveClass VipsForeignSavePpmClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignSavePpm, vips_foreign_save_ppm, VIPS_TYPE_FOREIGN_SAVE); static void vips_foreign_save_ppm_dispose(GObject *gobject) { VipsForeignSavePpm *ppm = (VipsForeignSavePpm *) gobject; VIPS_UNREF(ppm->target); G_OBJECT_CLASS(vips_foreign_save_ppm_parent_class)->dispose(gobject); } static int vips_foreign_save_ppm_line_ascii(VipsForeignSavePpm *ppm, VipsImage *image, VipsPel *p) { const int n_elements = image->Xsize * image->Bands; int i; for (i = 0; i < n_elements; i++) { switch (image->BandFmt) { case VIPS_FORMAT_UCHAR: vips_target_writef(ppm->target, "%d ", p[i]); break; case VIPS_FORMAT_USHORT: vips_target_writef(ppm->target, "%d ", ((unsigned short *) p)[i]); break; case VIPS_FORMAT_UINT: vips_target_writef(ppm->target, "%d ", ((unsigned int *) p)[i]); break; default: g_assert_not_reached(); } } if (vips_target_writes(ppm->target, "\n")) return -1; return 0; } static int vips_foreign_save_ppm_line_ascii_1bit(VipsForeignSavePpm *ppm, VipsImage *image, VipsPel *p) { int x; for (x = 0; x < image->Xsize; x++) vips_target_writef(ppm->target, "%d ", p[x] ? 0 : 1); if (vips_target_writes(ppm->target, "\n")) return -1; return 0; } static int vips_foreign_save_ppm_line_binary(VipsForeignSavePpm *ppm, VipsImage *image, VipsPel *p) { if (vips_target_write(ppm->target, p, VIPS_IMAGE_SIZEOF_LINE(image))) return -1; return 0; } static int vips_foreign_save_ppm_line_binary_1bit(VipsForeignSavePpm *ppm, VipsImage *image, VipsPel *p) { int x; int bits; int n_bits; bits = 0; n_bits = 0; for (x = 0; x < image->Xsize; x++) { bits = VIPS_LSHIFT_INT(bits, 1); n_bits += 1; bits |= p[x] > 128 ? 0 : 1; if (n_bits == 8) { if (VIPS_TARGET_PUTC(ppm->target, bits)) return -1; bits = 0; n_bits = 0; } } /* Flush any remaining bits in this line. */ if (n_bits && VIPS_TARGET_PUTC(ppm->target, bits)) return -1; return 0; } static int vips_foreign_save_ppm_block(VipsRegion *region, VipsRect *area, void *a) { VipsForeignSavePpm *ppm = (VipsForeignSavePpm *) a; VipsImage *image = region->im; int y; for (y = 0; y < area->height; y++) { VipsPel *p = VIPS_REGION_ADDR(region, 0, area->top + y); if (ppm->fn(ppm, image, p)) return -1; } return 0; } static int vips_foreign_save_ppm_build(VipsObject *object) { VipsForeignSave *save = (VipsForeignSave *) object; VipsForeignSavePpm *ppm = (VipsForeignSavePpm *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); VipsImage *image; char *magic; char *date; VipsBandFormat target_format; VipsInterpretation target_interpretation; if (VIPS_OBJECT_CLASS(vips_foreign_save_ppm_parent_class)->build(object)) return -1; image = save->ready; target_format = image->BandFmt; target_interpretation = image->Type; /* ppm types to set the defaults for bitdepth etc. * * pbm ... 1 band 1 bit * pgm ... 1 band many bit * ppm ... 3 band many bit * pfm ... 1 or 3 bands, 32 bit * pnm ... pick from input */ switch (ppm->format) { case VIPS_FOREIGN_PPM_FORMAT_PBM: if (!vips_object_argument_isset(object, "bitdepth")) ppm->bitdepth = 1; target_interpretation = VIPS_INTERPRETATION_B_W; break; case VIPS_FOREIGN_PPM_FORMAT_PGM: if (target_format == VIPS_FORMAT_USHORT) target_interpretation = VIPS_INTERPRETATION_GREY16; else target_interpretation = VIPS_INTERPRETATION_B_W; break; case VIPS_FOREIGN_PPM_FORMAT_PPM: if (target_format == VIPS_FORMAT_USHORT) target_interpretation = VIPS_INTERPRETATION_RGB16; else target_interpretation = VIPS_INTERPRETATION_sRGB; break; case VIPS_FOREIGN_PPM_FORMAT_PFM: target_format = VIPS_FORMAT_FLOAT; break; case VIPS_FOREIGN_PPM_FORMAT_PNM: default: /* Just use the input format and interpretation. */ break; } if (vips_cast(image, &t[0], target_format, NULL)) return -1; image = t[0]; if (image->Type != target_interpretation) { if (vips_colourspace(image, &t[1], target_interpretation, NULL)) return -1; image = t[1]; } /* Handle the deprecated squash parameter. */ if (vips_object_argument_isset(object, "squash")) ppm->bitdepth = 1; if (vips_check_uintorf("vips2ppm", image) || vips_check_bands_1or3("vips2ppm", image) || vips_check_uncoded("vips2ppm", image) || vips_image_pio_input(image)) return -1; if (ppm->ascii && image->BandFmt == VIPS_FORMAT_FLOAT) { g_warning("%s", _("float images must be binary -- disabling ascii")); ppm->ascii = FALSE; } /* One bit images must come from a 8 bit, one band source. */ if (ppm->bitdepth && (image->Bands != 1 || image->BandFmt != VIPS_FORMAT_UCHAR)) { g_warning("%s", _("can only save 1 band uchar images as 1 bit -- " "disabling 1 bit save")); ppm->bitdepth = 0; } magic = "unset"; if (image->BandFmt == VIPS_FORMAT_FLOAT && image->Bands == 3) magic = "PF"; else if (image->BandFmt == VIPS_FORMAT_FLOAT && image->Bands == 1) magic = "Pf"; else if (image->Bands == 1 && ppm->ascii && ppm->bitdepth) magic = "P1"; else if (image->Bands == 1 && ppm->ascii) magic = "P2"; else if (image->Bands == 1 && !ppm->ascii && ppm->bitdepth) magic = "P4"; else if (image->Bands == 1 && !ppm->ascii) magic = "P5"; else if (image->Bands == 3 && ppm->ascii) magic = "P3"; else if (image->Bands == 3 && !ppm->ascii) magic = "P6"; else g_assert_not_reached(); vips_target_writef(ppm->target, "%s\n", magic); if (save->keep & VIPS_FOREIGN_KEEP_OTHER) { date = vips__get_iso8601(); vips_target_writef(ppm->target, "#vips2ppm - %s\n", date); g_free(date); } vips_target_writef(ppm->target, "%d %d\n", image->Xsize, image->Ysize); if (!ppm->bitdepth) switch (image->BandFmt) { case VIPS_FORMAT_UCHAR: vips_target_writef(ppm->target, "%d\n", UCHAR_MAX); break; case VIPS_FORMAT_USHORT: vips_target_writef(ppm->target, "%d\n", USHRT_MAX); break; case VIPS_FORMAT_UINT: vips_target_writef(ppm->target, "%d\n", UINT_MAX); break; case VIPS_FORMAT_FLOAT: { double scale; char buf[G_ASCII_DTOSTR_BUF_SIZE]; scale = 1; if (vips_image_get_typeof(image, "pfm-scale") && !vips_image_get_double(image, "pfm-scale", &scale)) ; if (!vips_amiMSBfirst()) scale *= -1; /* Need to be locale independent. */ g_ascii_dtostr(buf, G_ASCII_DTOSTR_BUF_SIZE, scale); vips_target_writes(ppm->target, buf); vips_target_writes(ppm->target, "\n"); } break; default: g_assert_not_reached(); } if (ppm->bitdepth) ppm->fn = ppm->ascii ? vips_foreign_save_ppm_line_ascii_1bit : vips_foreign_save_ppm_line_binary_1bit; else ppm->fn = ppm->ascii ? vips_foreign_save_ppm_line_ascii : vips_foreign_save_ppm_line_binary; /* 16 and 32-bit binary write might need byteswapping. */ if (!ppm->ascii && (image->BandFmt == VIPS_FORMAT_USHORT || image->BandFmt == VIPS_FORMAT_UINT)) { VipsImage *x; if (vips__byteswap_bool(image, &x, !vips_amiMSBfirst())) return -1; image = x; /* image must now be unreffed on exit. */ vips_object_local(VIPS_OBJECT(ppm->target), image); } if (vips_sink_disc(image, vips_foreign_save_ppm_block, ppm)) return -1; if (vips_target_end(ppm->target)) return -1; return 0; } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX static VipsBandFormat bandfmt_ppm[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, UC, US, US, UI, UI, F, F, F, F }; static void vips_foreign_save_ppm_class_init(VipsForeignSavePpmClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class; gobject_class->dispose = vips_foreign_save_ppm_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "ppmsave_base"; object_class->description = _("save to ppm"); object_class->build = vips_foreign_save_ppm_build; save_class->saveable = VIPS_SAVEABLE_RGB; save_class->format_table = bandfmt_ppm; VIPS_ARG_ENUM(class, "format", 2, _("Format"), _("Format to save in"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSavePpm, format), VIPS_TYPE_FOREIGN_PPM_FORMAT, VIPS_FOREIGN_PPM_FORMAT_PPM); VIPS_ARG_BOOL(class, "ascii", 10, _("ASCII"), _("Save as ascii"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSavePpm, ascii), FALSE); VIPS_ARG_INT(class, "bitdepth", 15, _("Bit depth"), _("Set to 1 to write as a 1 bit image"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSavePpm, bitdepth), 0, 1, 0); VIPS_ARG_BOOL(class, "squash", 11, _("Squash"), _("Save as one bit"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsForeignSavePpm, squash), FALSE); } static void vips_foreign_save_ppm_init(VipsForeignSavePpm *ppm) { ppm->format = VIPS_FOREIGN_PPM_FORMAT_PPM; } typedef struct _VipsForeignSavePpmFile { VipsForeignSavePpm parent_object; char *filename; } VipsForeignSavePpmFile; typedef VipsForeignSavePpmClass VipsForeignSavePpmFileClass; G_DEFINE_TYPE(VipsForeignSavePpmFile, vips_foreign_save_ppm_file, vips_foreign_save_ppm_get_type()); static int vips_foreign_save_ppm_file_build(VipsObject *object) { VipsForeignSavePpm *ppm = (VipsForeignSavePpm *) object; VipsForeignSavePpmFile *file = (VipsForeignSavePpmFile *) object; if (file->filename && !(ppm->target = vips_target_new_to_file(file->filename))) return -1; if (vips_iscasepostfix(file->filename, ".pbm")) ppm->format = VIPS_FOREIGN_PPM_FORMAT_PBM; else if (vips_iscasepostfix(file->filename, ".pgm")) ppm->format = VIPS_FOREIGN_PPM_FORMAT_PGM; else if (vips_iscasepostfix(file->filename, ".pfm")) ppm->format = VIPS_FOREIGN_PPM_FORMAT_PFM; else if (vips_iscasepostfix(file->filename, ".pnm")) ppm->format = VIPS_FOREIGN_PPM_FORMAT_PNM; return VIPS_OBJECT_CLASS(vips_foreign_save_ppm_file_parent_class) ->build(object); } static void vips_foreign_save_ppm_file_class_init(VipsForeignSavePpmFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "ppmsave"; object_class->description = _("save image to ppm file"); object_class->build = vips_foreign_save_ppm_file_build; foreign_class->suffs = vips__ppm_suffs; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSavePpmFile, filename), NULL); } static void vips_foreign_save_ppm_file_init(VipsForeignSavePpmFile *file) { } typedef struct _VipsForeignSavePpmTarget { VipsForeignSavePpm parent_object; VipsTarget *target; } VipsForeignSavePpmTarget; typedef VipsForeignSavePpmClass VipsForeignSavePpmTargetClass; G_DEFINE_TYPE(VipsForeignSavePpmTarget, vips_foreign_save_ppm_target, vips_foreign_save_ppm_get_type()); static int vips_foreign_save_ppm_target_build(VipsObject *object) { VipsForeignSavePpm *ppm = (VipsForeignSavePpm *) object; VipsForeignSavePpmTarget *target = (VipsForeignSavePpmTarget *) object; if (target->target) { ppm->target = target->target; g_object_ref(ppm->target); } return VIPS_OBJECT_CLASS(vips_foreign_save_ppm_target_parent_class) ->build(object); } static void vips_foreign_save_ppm_target_class_init( VipsForeignSavePpmTargetClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "ppmsave_target"; object_class->build = vips_foreign_save_ppm_target_build; foreign_class->suffs = vips__save_ppm_suffs; VIPS_ARG_OBJECT(class, "target", 1, _("Target"), _("Target to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSavePpmTarget, target), VIPS_TYPE_TARGET); } static void vips_foreign_save_ppm_target_init(VipsForeignSavePpmTarget *target) { } typedef VipsForeignSavePpmTarget VipsForeignSavePbmTarget; typedef VipsForeignSavePpmTargetClass VipsForeignSavePbmTargetClass; G_DEFINE_TYPE(VipsForeignSavePbmTarget, vips_foreign_save_pbm_target, vips_foreign_save_ppm_target_get_type()); static void vips_foreign_save_pbm_target_class_init( VipsForeignSavePbmTargetClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsOperationClass *operation_class = (VipsOperationClass *) class; object_class->nickname = "pbmsave_target"; object_class->description = _("save image in pbm format"); foreign_class->suffs = vips__save_pbm_suffs; /* Hide from UI. */ operation_class->flags |= VIPS_OPERATION_DEPRECATED; } static void vips_foreign_save_pbm_target_init(VipsForeignSavePbmTarget *target) { VipsForeignSavePpm *ppm = (VipsForeignSavePpm *) target; ppm->format = VIPS_FOREIGN_PPM_FORMAT_PBM; } typedef VipsForeignSavePpmTarget VipsForeignSavePgmTarget; typedef VipsForeignSavePpmTargetClass VipsForeignSavePgmTargetClass; G_DEFINE_TYPE(VipsForeignSavePgmTarget, vips_foreign_save_pgm_target, vips_foreign_save_ppm_target_get_type()); static void vips_foreign_save_pgm_target_class_init( VipsForeignSavePgmTargetClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsOperationClass *operation_class = (VipsOperationClass *) class; object_class->nickname = "pgmsave_target"; object_class->description = _("save image in pgm format"); foreign_class->suffs = vips__save_pgm_suffs; /* Hide from UI. */ operation_class->flags |= VIPS_OPERATION_DEPRECATED; } static void vips_foreign_save_pgm_target_init(VipsForeignSavePgmTarget *target) { VipsForeignSavePpm *ppm = (VipsForeignSavePpm *) target; ppm->format = VIPS_FOREIGN_PPM_FORMAT_PGM; } typedef VipsForeignSavePpmTarget VipsForeignSavePfmTarget; typedef VipsForeignSavePpmTargetClass VipsForeignSavePfmTargetClass; G_DEFINE_TYPE(VipsForeignSavePfmTarget, vips_foreign_save_pfm_target, vips_foreign_save_ppm_target_get_type()); static void vips_foreign_save_pfm_target_class_init( VipsForeignSavePfmTargetClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsOperationClass *operation_class = (VipsOperationClass *) class; object_class->nickname = "pfmsave_target"; object_class->description = _("save image in pfm format"); foreign_class->suffs = vips__save_pfm_suffs; /* Hide from UI. */ operation_class->flags |= VIPS_OPERATION_DEPRECATED; } static void vips_foreign_save_pfm_target_init(VipsForeignSavePfmTarget *target) { VipsForeignSavePpm *ppm = (VipsForeignSavePpm *) target; ppm->format = VIPS_FOREIGN_PPM_FORMAT_PFM; } typedef VipsForeignSavePpmTarget VipsForeignSavePnmTarget; typedef VipsForeignSavePpmTargetClass VipsForeignSavePnmTargetClass; G_DEFINE_TYPE(VipsForeignSavePnmTarget, vips_foreign_save_pnm_target, vips_foreign_save_ppm_target_get_type()); static void vips_foreign_save_pnm_target_class_init( VipsForeignSavePfmTargetClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsOperationClass *operation_class = (VipsOperationClass *) class; object_class->nickname = "pnmsave_target"; object_class->description = _("save image in pnm format"); foreign_class->suffs = vips__save_pnm_suffs; /* Hide from UI. */ operation_class->flags |= VIPS_OPERATION_DEPRECATED; } static void vips_foreign_save_pnm_target_init(VipsForeignSavePfmTarget *target) { VipsForeignSavePpm *ppm = (VipsForeignSavePpm *) target; ppm->format = VIPS_FOREIGN_PPM_FORMAT_PNM; } #endif /*HAVE_PPM*/ /** * vips_ppmsave: (method) * @in: image to save * @filename: file to write to * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @format: #VipsForeignPpmFormat, format to save in * * @ascii: %gboolean, save as ASCII rather than binary * * @bitdepth: %gint, bitdepth to save at * * Write a VIPS image to a file as PPM. It can write 1, 8, 16 or * 32 bit unsigned integer images, float images, colour or monochrome, * stored as binary or ASCII. * Integer images of more than 8 bits can only be stored in ASCII. * * When writing float (PFM) images the scale factor is set from the * "pfm-scale" metadata. * * Set @ascii to %TRUE to write as human-readable ASCII. Normally data is * written in binary. * * Set @bitdepth to 1 to write a one-bit image. * * @format defaults to the sub-type for this filename suffix. * * See also: vips_image_write_to_file(). * * Returns: 0 on success, -1 on error. */ int vips_ppmsave(VipsImage *in, const char *filename, ...) { va_list ap; int result; va_start(ap, filename); result = vips_call_split("ppmsave", ap, in, filename); va_end(ap); return result; } /** * vips_ppmsave_target: (method) * @in: image to save * @target: save image to this target * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @format: #VipsForeignPpmFormat, format to save in * * @ascii: %gboolean, save as ASCII rather than binary * * @bitdepth: %gint, bitdepth to save at * * As vips_ppmsave(), but save to a target. * * See also: vips_ppmsave(). * * Returns: 0 on success, -1 on error. */ int vips_ppmsave_target(VipsImage *in, VipsTarget *target, ...) { va_list ap; int result; va_start(ap, target); result = vips_call_split("ppmsave_target", ap, in, target); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/quantise.c000066400000000000000000000256641454007373500204010ustar00rootroot00000000000000/* quantise an image * * 20/6/18 * - from vipspng.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include "quantise.h" #ifdef HAVE_QUANTIZATION #ifdef HAVE_IMAGEQUANT VipsQuantiseAttr * vips__quantise_attr_create() { return liq_attr_create(); } VipsQuantiseError vips__quantise_set_max_colors(VipsQuantiseAttr *attr, int colors) { return liq_set_max_colors(attr, colors); } VipsQuantiseError vips__quantise_set_quality(VipsQuantiseAttr *attr, int minimum, int maximum) { return liq_set_quality(attr, minimum, maximum); } VipsQuantiseError vips__quantise_set_speed(VipsQuantiseAttr *attr, int speed) { return liq_set_speed(attr, speed); } VipsQuantiseImage * vips__quantise_image_create_rgba(const VipsQuantiseAttr *attr, const void *bitmap, int width, int height, double gamma) { return liq_image_create_rgba(attr, bitmap, width, height, gamma); } VipsQuantiseError vips__quantise_image_quantize(VipsQuantiseImage *const input_image, VipsQuantiseAttr *const options, VipsQuantiseResult **result_output) { return liq_image_quantize(input_image, options, result_output); } /* Like vips__quantise_image_quantize(), but make a fixed palette that won't * get remapped during dithering. */ VipsQuantiseError vips__quantise_image_quantize_fixed(VipsQuantiseImage *const input_image, VipsQuantiseAttr *const options, VipsQuantiseResult **result_output) { int i; liq_result *result; const liq_palette *palette; liq_error err; liq_image *fake_image; char fake_image_pixels[4] = { 0 }; /* First, quantize the image and get its palette. */ err = liq_image_quantize(input_image, options, &result); if (err != LIQ_OK) return err; palette = liq_get_palette(result); /* Now, we need a fake 1 pixel image that will be quantized on the * next step. Its pixel color doesn't matter since we'll add all the * colors from the palette further. */ fake_image = liq_image_create_rgba(options, fake_image_pixels, 1, 1, 0); if (!fake_image) { liq_result_destroy(result); return LIQ_OUT_OF_MEMORY; } /* Add all the colors from the palette as fixed colors to the fake * image. Since the fixed colors number is the same as required colors * number, no new colors will be added. */ for (i = 0; i < palette->count; i++) liq_image_add_fixed_color(fake_image, palette->entries[i]); liq_result_destroy(result); /* Finally, quantize the fake image with fixed colors to make a * VipsQuantiseResult with a fixed palette. */ err = liq_image_quantize(fake_image, options, result_output); liq_image_destroy(fake_image); return err; } VipsQuantiseError vips__quantise_set_dithering_level(VipsQuantiseResult *res, float dither_level) { return liq_set_dithering_level(res, dither_level); } const VipsQuantisePalette * vips__quantise_get_palette(VipsQuantiseResult *result) { return liq_get_palette(result); } VipsQuantiseError vips__quantise_write_remapped_image(VipsQuantiseResult *result, VipsQuantiseImage *input_image, void *buffer, size_t buffer_size) { return liq_write_remapped_image( result, input_image, buffer, buffer_size); } void vips__quantise_result_destroy(VipsQuantiseResult *result) { liq_result_destroy(result); } void vips__quantise_image_destroy(VipsQuantiseImage *img) { liq_image_destroy(img); } void vips__quantise_attr_destroy(VipsQuantiseAttr *attr) { liq_attr_destroy(attr); } #elif defined(HAVE_QUANTIZR) /*!HAVE_IMAGEQUANT*/ VipsQuantiseAttr * vips__quantise_attr_create() { return quantizr_new_options(); } VipsQuantiseError vips__quantise_set_max_colors(VipsQuantiseAttr *attr, int colors) { return quantizr_set_max_colors(attr, colors); } VipsQuantiseError vips__quantise_set_quality(VipsQuantiseAttr *attr, int minimum, int maximum) { /* Not supported by quantizr */ return 0; } VipsQuantiseError vips__quantise_set_speed(VipsQuantiseAttr *attr, int speed) { /* Not supported by quantizr */ return 0; } VipsQuantiseImage * vips__quantise_image_create_rgba(const VipsQuantiseAttr *attr, const void *bitmap, int width, int height, double gamma) { /* attr and gamma ununused by quantizr */ return quantizr_create_image_rgba( (unsigned char *) bitmap, width, height); } VipsQuantiseError vips__quantise_image_quantize(VipsQuantiseImage *const input_image, VipsQuantiseAttr *const options, VipsQuantiseResult **result_output) { *result_output = quantizr_quantize(input_image, options); return 0; } VipsQuantiseError vips__quantise_image_quantize_fixed(VipsQuantiseImage *const input_image, VipsQuantiseAttr *const options, VipsQuantiseResult **result_output) { /* Quantizr doesn't change the palette during remapping, so we don't * need a special implementation for this */ return vips__quantise_image_quantize(input_image, options, result_output); } VipsQuantiseError vips__quantise_set_dithering_level(VipsQuantiseResult *res, float dither_level) { return quantizr_set_dithering_level(res, dither_level); } const VipsQuantisePalette * vips__quantise_get_palette(VipsQuantiseResult *result) { return quantizr_get_palette(result); } VipsQuantiseError vips__quantise_write_remapped_image(VipsQuantiseResult *result, VipsQuantiseImage *input_image, void *buffer, size_t buffer_size) { return quantizr_remap(result, input_image, buffer, buffer_size); } void vips__quantise_result_destroy(VipsQuantiseResult *result) { quantizr_free_result(result); } void vips__quantise_image_destroy(VipsQuantiseImage *img) { quantizr_free_image(img); } void vips__quantise_attr_destroy(VipsQuantiseAttr *attr) { quantizr_free_options(attr); } #endif /*HAVE_IMAGEQUANT*/ /* Track during a quantisation. */ typedef struct _Quantise { VipsImage *in; VipsImage **index_out; VipsImage **palette_out; int colours; int Q; double dither; int effort; VipsQuantiseAttr *attr; VipsQuantiseImage *input_image; VipsQuantiseResult *quantisation_result; VipsImage *t[5]; } Quantise; static void vips__quantise_free(Quantise *quantise) { int i; VIPS_FREEF(vips__quantise_result_destroy, quantise->quantisation_result); VIPS_FREEF(vips__quantise_image_destroy, quantise->input_image); VIPS_FREEF(vips__quantise_attr_destroy, quantise->attr); for (i = 0; i < VIPS_NUMBER(quantise->t); i++) VIPS_UNREF(quantise->t[i]); VIPS_FREE(quantise); } static Quantise * vips__quantise_new(VipsImage *in, VipsImage **index_out, VipsImage **palette_out, int colours, int Q, double dither, int effort) { Quantise *quantise; int i; quantise = VIPS_NEW(NULL, Quantise); quantise->in = in; quantise->index_out = index_out; quantise->palette_out = palette_out; quantise->colours = colours; quantise->Q = Q; quantise->dither = dither; quantise->effort = effort; for (i = 0; i < VIPS_NUMBER(quantise->t); i++) quantise->t[i] = NULL; return quantise; } int vips__quantise_image(VipsImage *in, VipsImage **index_out, VipsImage **palette_out, int colours, int Q, double dither, int effort, gboolean threshold_alpha) { Quantise *quantise; VipsImage *index; VipsImage *palette; const VipsQuantisePalette *lp; gint64 i; VipsPel *restrict p; gboolean added_alpha; quantise = vips__quantise_new(in, index_out, palette_out, colours, Q, dither, effort); /* Ensure input is sRGB. */ if (in->Type != VIPS_INTERPRETATION_sRGB) { if (vips_colourspace(in, &quantise->t[0], VIPS_INTERPRETATION_sRGB, NULL)) { vips__quantise_free(quantise); return -1; } in = quantise->t[0]; } /* Add alpha channel if missing. */ added_alpha = FALSE; if (!vips_image_hasalpha(in)) { if (vips_bandjoin_const1(in, &quantise->t[1], 255, NULL)) { vips__quantise_free(quantise); return -1; } added_alpha = TRUE; in = quantise->t[1]; } if (!(quantise->t[2] = vips_image_copy_memory(in))) { vips__quantise_free(quantise); return -1; } in = quantise->t[2]; /* Threshold alpha channel. */ if (threshold_alpha && !added_alpha) { const guint64 n_pels = VIPS_IMAGE_N_PELS(in); p = VIPS_IMAGE_ADDR(in, 0, 0); for (i = 0; i < n_pels; i++) { p[3] = p[3] > 128 ? 255 : 0; p += 4; } } quantise->attr = vips__quantise_attr_create(); vips__quantise_set_max_colors(quantise->attr, colours); vips__quantise_set_quality(quantise->attr, 0, Q); vips__quantise_set_speed(quantise->attr, 11 - effort); quantise->input_image = vips__quantise_image_create_rgba(quantise->attr, VIPS_IMAGE_ADDR(in, 0, 0), in->Xsize, in->Ysize, 0); if (vips__quantise_image_quantize(quantise->input_image, quantise->attr, &quantise->quantisation_result)) { vips_error("quantise", "%s", _("quantisation failed")); vips__quantise_free(quantise); return -1; } vips__quantise_set_dithering_level(quantise->quantisation_result, dither); index = quantise->t[3] = vips_image_new_memory(); vips_image_init_fields(index, in->Xsize, in->Ysize, 1, VIPS_FORMAT_UCHAR, VIPS_CODING_NONE, VIPS_INTERPRETATION_B_W, 1.0, 1.0); if (vips_image_write_prepare(index)) { vips__quantise_free(quantise); return -1; } if (vips__quantise_write_remapped_image(quantise->quantisation_result, quantise->input_image, VIPS_IMAGE_ADDR(index, 0, 0), VIPS_IMAGE_N_PELS(index))) { vips_error("quantise", "%s", _("quantisation failed")); vips__quantise_free(quantise); return -1; } lp = vips__quantise_get_palette(quantise->quantisation_result); palette = quantise->t[4] = vips_image_new_memory(); vips_image_init_fields(palette, lp->count, 1, 4, VIPS_FORMAT_UCHAR, VIPS_CODING_NONE, VIPS_INTERPRETATION_sRGB, 1.0, 1.0); if (vips_image_write_prepare(palette)) { vips__quantise_free(quantise); return -1; } p = VIPS_IMAGE_ADDR(palette, 0, 0); for (i = 0; i < lp->count; i++) { p[0] = lp->entries[i].r; p[1] = lp->entries[i].g; p[2] = lp->entries[i].b; p[3] = lp->entries[i].a; p += 4; } *index_out = index; g_object_ref(index); *palette_out = palette; g_object_ref(palette); vips__quantise_free(quantise); return 0; } #else /*!HAVE_QUANTIZATION*/ int vips__quantise_image(VipsImage *in, VipsImage **index_out, VipsImage **palette_out, int colours, int Q, double dither, int effort, gboolean threshold_alpha) { vips_error("vips__quantise_image", "%s", _("libvips not built with quantisation support")); return -1; } #endif /*HAVE_QUANTIZATION*/ libvips-8.15.1/libvips/foreign/quantise.h000066400000000000000000000060601454007373500203730ustar00rootroot00000000000000/* common defs for image quantisation */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_QUANTISE_H #define VIPS_QUANTISE_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #if defined(HAVE_IMAGEQUANT) #define HAVE_QUANTIZATION #include #define VipsQuantiseAttr liq_attr #define VipsQuantiseImage liq_image #define VipsQuantiseResult liq_result #define VipsQuantisePalette liq_palette #define VipsQuantiseError liq_error #elif defined(HAVE_QUANTIZR) #define HAVE_QUANTIZATION #include #define VipsQuantiseAttr QuantizrOptions #define VipsQuantiseImage QuantizrImage #define VipsQuantiseResult QuantizrResult #define VipsQuantisePalette QuantizrPalette #define VipsQuantiseError QuantizrError #endif #ifdef HAVE_QUANTIZATION VipsQuantiseAttr *vips__quantise_attr_create(); VipsQuantiseError vips__quantise_set_max_colors(VipsQuantiseAttr *attr, int colors); VipsQuantiseError vips__quantise_set_quality(VipsQuantiseAttr *attr, int minimum, int maximum); VipsQuantiseError vips__quantise_set_speed(VipsQuantiseAttr *attr, int speed); VipsQuantiseImage *vips__quantise_image_create_rgba(const VipsQuantiseAttr *attr, const void *bitmap, int width, int height, double gamma); VipsQuantiseError vips__quantise_image_quantize(VipsQuantiseImage *input_image, VipsQuantiseAttr *options, VipsQuantiseResult **result_output); VipsQuantiseError vips__quantise_image_quantize_fixed(VipsQuantiseImage *input_image, VipsQuantiseAttr *options, VipsQuantiseResult **result_output); VipsQuantiseError vips__quantise_set_dithering_level(VipsQuantiseResult *res, float dither_level); const VipsQuantisePalette *vips__quantise_get_palette(VipsQuantiseResult *result); VipsQuantiseError vips__quantise_write_remapped_image(VipsQuantiseResult *result, VipsQuantiseImage *input_image, void *buffer, size_t buffer_size); void vips__quantise_result_destroy(VipsQuantiseResult *result); void vips__quantise_image_destroy(VipsQuantiseImage *img); void vips__quantise_attr_destroy(VipsQuantiseAttr *attr); #endif /*HAVE_QUANTIZATION*/ int vips__quantise_image(VipsImage *in, VipsImage **index_out, VipsImage **palette_out, int colours, int Q, double dither, int effort, gboolean threshold_alpha); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_QUANTISE_H*/ libvips-8.15.1/libvips/foreign/radiance.c000066400000000000000000000572151454007373500203130ustar00rootroot00000000000000/* Read Radiance (.hdr) files * * 3/3/09 * - write packed data, a separate im_rad2float() operation can unpack * 23/3/09 * - add radiance write * 20/12/11 * - reworked as some fns ready for new-style classes * 13/12/12 * - tag RGB rad images as scRGB * 4/11/13 * - support sequential read * 5/11/13 * - rewritten scanline encode and decode, now much faster * 23/1/14 * - put the reader globals into a struct so we can have many active * readers * 23/5/16 * - add buffer save functions * 28/2/17 * - use dbuf for buffer output * 4/4/17 * - reduce stack use to help musl * 22/7/18 * - update code from radiance ... pasted in from rad5R1 * - expand fs[] buffer to prevent out of bounds write [HongxuChen] * 23/7/18 * - fix a buffer overflow for incorrectly coded old-style RLE * [HongxuChen] * 6/11/19 * - revise for VipsConnection * 28/1/23 kleisauke * - clean-up unused macros/externs * - sync with radiance 5.3 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Remaining issues: + it ignores some header fields, like VIEW and DATE + it will not rotate/flip as the FORMAT string asks */ /* Sections of this reader from Greg Ward and Radiance with kind permission. The Radience copyright notice appears below. */ /* ==================================================================== * The Radiance Software License, Version 1.0 * * Copyright (c) 1990 - 2009 The Regents of the University of California, * through Lawrence Berkeley National Laboratory. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. 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. * * 3. The end-user documentation included with the redistribution, * if any, must include the following acknowledgment: * "This product includes Radiance software * (http://radsite.lbl.gov/) * developed by the Lawrence Berkeley National Laboratory * (http://www.lbl.gov/)." * Alternately, this acknowledgment may appear in the software itself, * if and wherever such third-party acknowledgments normally appear. * * 4. The names "Radiance," "Lawrence Berkeley National Laboratory" * and "The Regents of the University of California" must * not be used to endorse or promote products derived from this * software without prior written permission. For written * permission, please contact radiance@radsite.lbl.gov. * * 5. Products derived from this software may not be called "Radiance", * nor may "Radiance" appear in their name, without prior written * permission of Lawrence Berkeley National Laboratory. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 Lawrence Berkeley National Laboratory OR * ITS 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. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of Lawrence Berkeley National Laboratory. For more * information on Lawrence Berkeley National Laboratory, please see * . */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #ifdef HAVE_RADIANCE #include #include #include #include #include #include #include #include #include #include #include "pforeign.h" /* Begin copy-paste from Radiance sources. * * To update: * * 1. Download and unpack latest stable radiance * 2. ray/src/common has the files we need ... copy in this order: * color.h * resolu.h * rtio.h * fputword.c * color.c * resolu.c * header.c * 3. trim each one down, removing extern decls * 4. make all functions static * 5. reorder to remove forward refs * 6. remove unused funcs/macros, mostly related to HDR write */ #define RED 0 #define GRN 1 #define BLU 2 #define CIEX 0 /* or, if input is XYZ... */ #define CIEY 1 #define EXP 3 /* exponent same for either format */ #define COLXS 128 /* excess used for exponent */ #define WHT 3 /* used for RGBPRIMS type */ typedef unsigned char COLR[4]; /* red, green, blue (or X,Y,Z), exponent */ typedef float COLOR[3]; /* red, green, blue (or X,Y,Z) */ typedef float RGBPRIMS[4][2]; /* (x,y) chromaticities for RGBW */ #define copycolr(c1, c2) (c1[0] = c2[0], c1[1] = c2[1], \ c1[2] = c2[2], c1[3] = c2[3]) #define CIE_x_r 0.640 /* nominal CRT primaries */ #define CIE_y_r 0.330 #define CIE_x_g 0.290 #define CIE_y_g 0.600 #define CIE_x_b 0.150 #define CIE_y_b 0.060 #define CIE_x_w (1. / 3.) /* use true white */ #define CIE_y_w (1. / 3.) /* picture format identifier */ #define COLRFMT "32-bit_rle_rgbe" #define CIEFMT "32-bit_rle_xyze" /* macros for exposures */ #define EXPOSSTR "EXPOSURE=" #define LEXPOSSTR 9 #define isexpos(hl) (!strncmp(hl, EXPOSSTR, LEXPOSSTR)) #define exposval(hl) atof((hl) + LEXPOSSTR) /* macros for pixel aspect ratios */ #define ASPECTSTR "PIXASPECT=" #define LASPECTSTR 10 #define isaspect(hl) (!strncmp(hl, ASPECTSTR, LASPECTSTR)) #define aspectval(hl) atof((hl) + LASPECTSTR) /* macros for primary specifications */ #define PRIMARYSTR "PRIMARIES=" #define LPRIMARYSTR 10 #define isprims(hl) (!strncmp(hl, PRIMARYSTR, LPRIMARYSTR)) #define primsval(p, hl) (sscanf((hl) + LPRIMARYSTR, \ "%f %f %f %f %f %f %f %f", \ &(p)[RED][CIEX], &(p)[RED][CIEY], \ &(p)[GRN][CIEX], &(p)[GRN][CIEY], \ &(p)[BLU][CIEX], &(p)[BLU][CIEY], \ &(p)[WHT][CIEX], &(p)[WHT][CIEY]) == 8) /* macros for color correction */ #define COLCORSTR "COLORCORR=" #define LCOLCORSTR 10 #define iscolcor(hl) (!strncmp(hl, COLCORSTR, LCOLCORSTR)) #define colcorval(cc, hl) sscanf((hl) + LCOLCORSTR, "%f %f %f", \ &(cc)[RED], &(cc)[GRN], &(cc)[BLU]) #define MINELEN 8 /* minimum scanline length for encoding */ #define MAXELEN 0x7fff /* maximum scanline length for encoding */ #define MINRUN 4 /* minimum run length */ /* flags for scanline ordering */ #define XDECR 1 #define YDECR 2 #define YMAJOR 4 /* structure for image dimensions */ typedef struct { int rt; /* orientation (from flags above) */ int xr, yr; /* x and y resolution */ } RESOLU; /* macros to get scanline length and number */ #define scanlen(rs) ((rs)->rt & YMAJOR ? (rs)->xr : (rs)->yr) #define numscans(rs) ((rs)->rt & YMAJOR ? (rs)->yr : (rs)->xr) /* resolution string buffer and its size */ #define RESOLU_BUFLEN 32 static char resolu_buf[RESOLU_BUFLEN]; /* resolution line buffer */ /* identify header lines */ #define isformat(s) formatval(NULL, s) typedef int gethfunc(char *s, void *p); /* callback to process header lines */ /* convert resolution struct to line */ static char * resolu2str(char *buf, register RESOLU *rp) { if (rp->rt & YMAJOR) sprintf(buf, "%cY %d %cX %d\n", rp->rt & YDECR ? '-' : '+', rp->yr, rp->rt & XDECR ? '-' : '+', rp->xr); else sprintf(buf, "%cX %d %cY %d\n", rp->rt & XDECR ? '-' : '+', rp->xr, rp->rt & YDECR ? '-' : '+', rp->yr); return buf; } /* convert resolution line to struct */ static int str2resolu(register RESOLU *rp, char *buf) { register char *xndx, *yndx; register char *cp; if (buf == NULL) return 0; xndx = yndx = NULL; for (cp = buf; *cp; cp++) if (*cp == 'X') xndx = cp; else if (*cp == 'Y') yndx = cp; if (xndx == NULL || yndx == NULL) return 0; rp->rt = 0; if (xndx > yndx) rp->rt |= YMAJOR; if (xndx[-1] == '-') rp->rt |= XDECR; if (yndx[-1] == '-') rp->rt |= YDECR; if ((rp->xr = atoi(xndx + 1)) <= 0) return 0; if ((rp->yr = atoi(yndx + 1)) <= 0) return 0; return 1; } #define MAXFMTLEN 64 static const char FMTSTR[] = "FORMAT="; /* format identifier */ /* get format value (return true if format) */ static int formatval(char fmt[MAXFMTLEN], const char *s) { const char *cp = FMTSTR; char *r = fmt; while (*cp) if (*cp++ != *s++) return 0; while (isspace(*s)) s++; if (!*s) return 0; if (r == NULL) return 1; do *r++ = *s++; while (*s && !isspace(*s) && r - fmt < MAXFMTLEN - 1); *r = '\0'; return 1; } /* Get header from source. */ static int getheader(VipsSbuf *sbuf, gethfunc *f, void *p) { for (;;) { const char *line; if (!(line = vips_sbuf_get_line(sbuf))) return -1; if (strcmp(line, "") == 0) /* Blank line. We've parsed the header successfully. */ break; if (f != NULL && (*f)((char *) line, p) < 0) return -1; } return 0; } /* Read a single scanline, encoded in the old style. */ static int scanline_read_old(VipsSbuf *sbuf, COLR *scanline, int width) { int rshift; rshift = 0; while (width > 0) { if (VIPS_SBUF_REQUIRE(sbuf, 4)) return -1; scanline[0][RED] = VIPS_SBUF_FETCH(sbuf); scanline[0][GRN] = VIPS_SBUF_FETCH(sbuf); scanline[0][BLU] = VIPS_SBUF_FETCH(sbuf); scanline[0][EXP] = VIPS_SBUF_FETCH(sbuf); if (scanline[0][RED] == 1 && scanline[0][GRN] == 1 && scanline[0][BLU] == 1) { guint i; for (i = ((guint32) scanline[0][EXP] << rshift); i > 0 && width > 0; i--) { copycolr(scanline[0], scanline[-1]); scanline += 1; width -= 1; } rshift += 8; /* This can happen with badly-formed input files. */ if (rshift > 24) return -1; } else { scanline += 1; width -= 1; rshift = 0; } } return 0; } /* Read a single encoded scanline. */ static int scanline_read(VipsSbuf *sbuf, COLR *scanline, int width) { int i, j; /* Detect old-style scanlines. */ if (width < MINELEN || width > MAXELEN) return scanline_read_old(sbuf, scanline, width); if (VIPS_SBUF_REQUIRE(sbuf, 4)) return -1; if (VIPS_SBUF_PEEK(sbuf)[0] != 2) return scanline_read_old(sbuf, scanline, width); scanline[0][RED] = VIPS_SBUF_FETCH(sbuf); scanline[0][GRN] = VIPS_SBUF_FETCH(sbuf); scanline[0][BLU] = VIPS_SBUF_FETCH(sbuf); scanline[0][EXP] = VIPS_SBUF_FETCH(sbuf); if (scanline[0][GRN] != 2 || scanline[0][BLU] & 128) return scanline_read_old(sbuf, scanline + 1, width - 1); if (((scanline[0][BLU] << 8) | scanline[0][EXP]) != width) { vips_error("rad2vips", "%s", _("scanline length mismatch")); return -1; } for (i = 0; i < 4; i++) for (j = 0; j < width;) { int code, len; gboolean run; if (VIPS_SBUF_REQUIRE(sbuf, 2)) return -1; code = VIPS_SBUF_FETCH(sbuf); run = code > 128; len = run ? code & 127 : code; if (j + len > width) { vips_error("rad2vips", "%s", _("overrun")); return -1; } if (run) { int val; val = VIPS_SBUF_FETCH(sbuf); while (len--) scanline[j++][i] = val; } else { if (VIPS_SBUF_REQUIRE(sbuf, len)) return -1; while (len--) scanline[j++][i] = VIPS_SBUF_FETCH(sbuf); } } return 0; } /* An encoded scanline can't be larger than this. */ #define MAX_LINE (2 * MAXELEN * sizeof(COLR)) /* write an RLE scanline. Write magic header. */ static void rle_scanline_write(COLR *scanline, int width, unsigned char *buffer, int *length) { int i, j, beg, cnt; #define PUTC(CH) \ { \ buffer[(*length)++] = (CH); \ g_assert(*length <= MAX_LINE); \ } *length = 0; PUTC(2); PUTC(2); PUTC(width >> 8); PUTC(width & 255); for (i = 0; i < 4; i++) { for (j = 0; j < width;) { /* Not needed, but keeps gcc used-before-set warning * quiet. */ cnt = 1; /* Set beg / cnt to the start and length of the next * run longer than MINRUN. */ for (beg = j; beg < width; beg += cnt) { for (cnt = 1; cnt < 127 && beg + cnt < width && scanline[beg + cnt][i] == scanline[beg][i]; cnt++) ; if (cnt >= MINRUN) break; } /* Code pixels leading up to the run as a set of * non-runs. */ while (j < beg) { int len = VIPS_MIN(128, beg - j); COLR *p = scanline + j; int k; PUTC(len); for (k = 0; k < len; k++) PUTC(p[k][i]); j += len; } /* Code the run we found, if any */ if (cnt >= MINRUN) { PUTC(128 + cnt); PUTC(scanline[j][i]); j += cnt; } } } } /* What we track during radiance file read. */ typedef struct { VipsSbuf *sbuf; VipsImage *out; char format[256]; double expos; COLOR colcor; double aspect; RGBPRIMS prims; RESOLU rs; } Read; int vips__rad_israd(VipsSource *source) { VipsSbuf *sbuf; const char *line; int result; /* Just test that the first line is the magic string. */ sbuf = vips_sbuf_new_from_source(source); result = (line = vips_sbuf_get_line(sbuf)) && strcmp(line, "#?RADIANCE") == 0; VIPS_UNREF(sbuf); return result; } static void read_destroy(VipsImage *image, Read *read) { VIPS_UNREF(read->sbuf); } static void read_minimise_cb(VipsImage *image, Read *read) { if (read->sbuf) vips_source_minimise(read->sbuf->source); } static Read * read_new(VipsSource *source, VipsImage *out) { Read *read; int i; if (vips_source_rewind(source)) return NULL; if (!(read = VIPS_NEW(out, Read))) return NULL; read->sbuf = vips_sbuf_new_from_source(source); read->out = out; strcpy(read->format, COLRFMT); read->expos = 1.0; for (i = 0; i < 3; i++) read->colcor[i] = 1.0; read->aspect = 1.0; read->prims[0][0] = CIE_x_r; read->prims[0][1] = CIE_y_r; read->prims[1][0] = CIE_x_g; read->prims[1][1] = CIE_y_g; read->prims[2][0] = CIE_x_b; read->prims[2][1] = CIE_y_b; read->prims[3][0] = CIE_x_w; read->prims[3][1] = CIE_y_w; g_signal_connect(out, "close", G_CALLBACK(read_destroy), read); g_signal_connect(out, "minimise", G_CALLBACK(read_minimise_cb), read); return read; } static int rad2vips_process_line(char *line, Read *read) { if (isformat(line)) { if (formatval(line, read->format)) return -1; } else if (isexpos(line)) { read->expos *= exposval(line); } else if (iscolcor(line)) { COLOR cc; int i; (void) colcorval(cc, line); for (i = 0; i < 3; i++) read->colcor[i] *= cc[i]; } else if (isaspect(line)) { read->aspect *= aspectval(line); } else if (isprims(line)) { (void) primsval(read->prims, line); } return 0; } static const char *prims_name[4][2] = { { "rad-prims-rx", "rad-prims-ry" }, { "rad-prims-gx", "rad-prims-gy" }, { "rad-prims-bx", "rad-prims-by" }, { "rad-prims-wx", "rad-prims-wy" } }; static const char *colcor_name[3] = { "rad-colcor-r", "rad-colcor-g", "rad-colcor-b" }; static int rad2vips_get_header(Read *read, VipsImage *out) { VipsInterpretation interpretation; const char *line; int width; int height; int i, j; if (getheader(read->sbuf, (gethfunc *) rad2vips_process_line, read) || !(line = vips_sbuf_get_line(read->sbuf)) || !str2resolu(&read->rs, (char *) line)) { vips_error("rad2vips", "%s", _("error reading radiance header")); return -1; } if (strcmp(read->format, COLRFMT) == 0) interpretation = VIPS_INTERPRETATION_scRGB; else if (strcmp(read->format, CIEFMT) == 0) interpretation = VIPS_INTERPRETATION_XYZ; else interpretation = VIPS_INTERPRETATION_MULTIBAND; width = scanlen(&read->rs); height = numscans(&read->rs); if (width <= 0 || width >= VIPS_MAX_COORD || height <= 0 || height >= VIPS_MAX_COORD) { vips_error("rad2vips", "%s", _("image size out of bounds")); return -1; } vips_image_init_fields(out, width, height, 4, VIPS_FORMAT_UCHAR, VIPS_CODING_RAD, interpretation, 1, read->aspect); VIPS_SETSTR(out->filename, vips_connection_filename( VIPS_CONNECTION(read->sbuf->source))); if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_THINSTRIP, NULL)) return -1; vips_image_set_string(out, "rad-format", read->format); vips_image_set_double(out, "rad-expos", read->expos); for (i = 0; i < 3; i++) vips_image_set_double(out, colcor_name[i], read->colcor[i]); vips_image_set_double(out, "rad-aspect", read->aspect); for (i = 0; i < 4; i++) for (j = 0; j < 2; j++) vips_image_set_double(out, prims_name[i][j], read->prims[i][j]); return 0; } int vips__rad_header(VipsSource *source, VipsImage *out) { Read *read; if (!(read = read_new(source, out))) return -1; if (rad2vips_get_header(read, read->out)) return -1; vips_source_minimise(source); return 0; } static int rad2vips_generate(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRect *r = &out_region->valid; Read *read = (Read *) a; int y; #ifdef DEBUG printf("rad2vips_generate: line %d, %d rows\n", r->top, r->height); #endif /*DEBUG*/ VIPS_GATE_START("rad2vips_generate: work"); for (y = 0; y < r->height; y++) { COLR *buf = (COLR *) VIPS_REGION_ADDR(out_region, 0, r->top + y); if (scanline_read(read->sbuf, buf, out_region->im->Xsize)) { vips_error("rad2vips", _("read error line %d"), r->top + y); VIPS_GATE_STOP("rad2vips_generate: work"); return -1; } } VIPS_GATE_STOP("rad2vips_generate: work"); return 0; } int vips__rad_load(VipsSource *source, VipsImage *out) { VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(out), 3); Read *read; #ifdef DEBUG printf("rad2vips: reading \"%s\"\n", vips_connection_nick(VIPS_CONNECTION(source))); #endif /*DEBUG*/ if (!(read = read_new(source, out))) return -1; t[0] = vips_image_new(); if (rad2vips_get_header(read, t[0])) return -1; if (vips_image_generate(t[0], NULL, rad2vips_generate, NULL, read, NULL) || vips_sequential(t[0], &t[1], "tile_height", VIPS__FATSTRIP_HEIGHT, NULL) || vips_image_write(t[1], out)) return -1; if (vips_source_decode(source)) return -1; return 0; } /* What we track during a radiance write. */ typedef struct { VipsImage *in; VipsTarget *target; char format[256]; double expos; COLOR colcor; double aspect; RGBPRIMS prims; RESOLU rs; unsigned char *line; } Write; static void write_destroy(Write *write) { VIPS_FREE(write->line); VIPS_UNREF(write->target); g_free(write); } static Write * write_new(VipsImage *in, VipsTarget *target) { Write *write; int i; if (!(write = VIPS_NEW(NULL, Write))) return NULL; write->in = in; write->target = target; g_object_ref(target); strcpy(write->format, COLRFMT); write->expos = 1.0; for (i = 0; i < 3; i++) write->colcor[i] = 1.0; write->aspect = 1.0; write->prims[0][0] = CIE_x_r; write->prims[0][1] = CIE_y_r; write->prims[1][0] = CIE_x_g; write->prims[1][1] = CIE_y_g; write->prims[2][0] = CIE_x_b; write->prims[2][1] = CIE_y_b; write->prims[3][0] = CIE_x_w; write->prims[3][1] = CIE_y_w; if (!(write->line = VIPS_ARRAY(NULL, MAX_LINE, unsigned char))) { write_destroy(write); return NULL; } return write; } static void vips2rad_make_header(Write *write) { const char *str; int i, j; double d; if (vips_image_get_typeof(write->in, "rad-expos")) vips_image_get_double(write->in, "rad-expos", &write->expos); if (vips_image_get_typeof(write->in, "rad-aspect")) vips_image_get_double(write->in, "rad-aspect", &write->aspect); if (vips_image_get_typeof(write->in, "rad-format") && !vips_image_get_string(write->in, "rad-format", &str)) vips_strncpy(write->format, str, 256); if (write->in->Type == VIPS_INTERPRETATION_scRGB) strcpy(write->format, COLRFMT); if (write->in->Type == VIPS_INTERPRETATION_XYZ) strcpy(write->format, CIEFMT); for (i = 0; i < 3; i++) if (vips_image_get_typeof(write->in, colcor_name[i]) && !vips_image_get_double(write->in, colcor_name[i], &d)) write->colcor[i] = d; for (i = 0; i < 4; i++) for (j = 0; j < 2; j++) { const char *name = prims_name[i][j]; if (vips_image_get_typeof(write->in, name) && !vips_image_get_double(write->in, name, &d)) write->prims[i][j] = d; } /* Make y decreasing for consistency with vips. */ write->rs.rt = YDECR | YMAJOR; write->rs.xr = write->in->Xsize; write->rs.yr = write->in->Ysize; } static int vips2rad_put_header(Write *write) { vips2rad_make_header(write); vips_target_writes(write->target, "#?RADIANCE\n"); vips_target_writef(write->target, "%s%s\n", FMTSTR, write->format); vips_target_writef(write->target, "%s%e\n", EXPOSSTR, write->expos); vips_target_writef(write->target, "%s %f %f %f\n", COLCORSTR, write->colcor[RED], write->colcor[GRN], write->colcor[BLU]); vips_target_writef(write->target, "SOFTWARE=vips %s\n", vips_version_string()); vips_target_writef(write->target, "%s%f\n", ASPECTSTR, write->aspect); vips_target_writef(write->target, "%s %.4f %.4f %.4f %.4f %.4f %.4f %.4f %.4f\n", PRIMARYSTR, write->prims[RED][CIEX], write->prims[RED][CIEY], write->prims[GRN][CIEX], write->prims[GRN][CIEY], write->prims[BLU][CIEX], write->prims[BLU][CIEY], write->prims[WHT][CIEX], write->prims[WHT][CIEY]); vips_target_writes(write->target, "\n"); vips_target_writes(write->target, resolu2str(resolu_buf, &write->rs)); return 0; } /* Write a single scanline to buffer. */ static int scanline_write(Write *write, COLR *scanline, int width) { if (width < MINELEN || width > MAXELEN) { /* Too large or small for RLE ... do a simple write. */ if (vips_target_write(write->target, scanline, sizeof(COLR) * width)) return -1; } else { int length; /* An RLE scanline. */ rle_scanline_write(scanline, width, write->line, &length); if (vips_target_write(write->target, write->line, length)) return -1; } return 0; } static int vips2rad_put_data_block(VipsRegion *region, VipsRect *area, void *a) { Write *write = (Write *) a; int i; for (i = 0; i < area->height; i++) { VipsPel *p = VIPS_REGION_ADDR(region, 0, area->top + i); if (scanline_write(write, (COLR *) p, area->width)) return -1; } return 0; } static int vips2rad_put_data(Write *write) { if (vips_sink_disc(write->in, vips2rad_put_data_block, write)) return -1; return 0; } int vips__rad_save(VipsImage *in, VipsTarget *target) { Write *write; #ifdef DEBUG printf("vips2rad: writing to buffer\n"); #endif /*DEBUG*/ if (vips_image_pio_input(in) || vips_check_coding("vips2rad", in, VIPS_CODING_RAD)) return -1; if (!(write = write_new(in, target))) return -1; if (vips2rad_put_header(write) || vips2rad_put_data(write)) { write_destroy(write); return -1; } if (vips_target_end(target)) return -1; write_destroy(write); return 0; } const char *vips__rad_suffs[] = { ".hdr", NULL }; #endif /*HAVE_RADIANCE*/ libvips-8.15.1/libvips/foreign/radload.c000066400000000000000000000266451454007373500201560ustar00rootroot00000000000000/* load radlab from a file * * 5/12/11 * - from tiffload.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pforeign.h" #ifdef HAVE_RADIANCE typedef struct _VipsForeignLoadRad { VipsForeignLoad parent_object; /* Set by subclasses. */ VipsSource *source; } VipsForeignLoadRad; typedef VipsForeignLoadClass VipsForeignLoadRadClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignLoadRad, vips_foreign_load_rad, VIPS_TYPE_FOREIGN_LOAD); static void vips_foreign_load_rad_dispose(GObject *gobject) { VipsForeignLoadRad *rad = (VipsForeignLoadRad *) gobject; VIPS_UNREF(rad->source); G_OBJECT_CLASS(vips_foreign_load_rad_parent_class)->dispose(gobject); } static VipsForeignFlags vips_foreign_load_rad_get_flags(VipsForeignLoad *load) { return VIPS_FOREIGN_SEQUENTIAL; } static VipsForeignFlags vips_foreign_load_rad_get_flags_filename(const char *filename) { return VIPS_FOREIGN_SEQUENTIAL; } static int vips_foreign_load_rad_header(VipsForeignLoad *load) { VipsForeignLoadRad *rad = (VipsForeignLoadRad *) load; if (vips__rad_header(rad->source, load->out)) return -1; return 0; } static int vips_foreign_load_rad_load(VipsForeignLoad *load) { VipsForeignLoadRad *rad = (VipsForeignLoadRad *) load; if (vips__rad_load(rad->source, load->real)) return -1; return 0; } static void vips_foreign_load_rad_class_init(VipsForeignLoadRadClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->dispose = vips_foreign_load_rad_dispose; object_class->nickname = "radload_base"; object_class->description = _("load rad base class"); /* You're unlikely to want to use this on untrusted files. */ operation_class->flags |= VIPS_OPERATION_UNTRUSTED; /* is_a() is not that quick ... lower the priority. */ foreign_class->priority = -50; load_class->get_flags_filename = vips_foreign_load_rad_get_flags_filename; load_class->get_flags = vips_foreign_load_rad_get_flags; load_class->header = vips_foreign_load_rad_header; load_class->load = vips_foreign_load_rad_load; } static void vips_foreign_load_rad_init(VipsForeignLoadRad *rad) { } typedef struct _VipsForeignLoadRadSource { VipsForeignLoadRad parent_object; /* Load from a source. */ VipsSource *source; } VipsForeignLoadRadSource; typedef VipsForeignLoadRadClass VipsForeignLoadRadSourceClass; G_DEFINE_TYPE(VipsForeignLoadRadSource, vips_foreign_load_rad_source, vips_foreign_load_rad_get_type()); static int vips_foreign_load_rad_source_build(VipsObject *object) { VipsForeignLoadRad *rad = (VipsForeignLoadRad *) object; VipsForeignLoadRadSource *source = (VipsForeignLoadRadSource *) object; if (source->source) { rad->source = source->source; g_object_ref(rad->source); } if (VIPS_OBJECT_CLASS(vips_foreign_load_rad_source_parent_class) ->build(object)) return -1; return 0; } static gboolean vips_foreign_load_rad_source_is_a_source(VipsSource *source) { return vips__rad_israd(source); } static void vips_foreign_load_rad_source_class_init(VipsForeignLoadRadSourceClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "radload_source"; object_class->description = _("load rad from source"); object_class->build = vips_foreign_load_rad_source_build; operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_rad_source_is_a_source; VIPS_ARG_OBJECT(class, "source", 1, _("Source"), _("Source to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadRadSource, source), VIPS_TYPE_SOURCE); } static void vips_foreign_load_rad_source_init(VipsForeignLoadRadSource *source) { } typedef struct _VipsForeignLoadRadFile { VipsForeignLoadRad parent_object; /* Filename for load. */ char *filename; } VipsForeignLoadRadFile; typedef VipsForeignLoadRadClass VipsForeignLoadRadFileClass; G_DEFINE_TYPE(VipsForeignLoadRadFile, vips_foreign_load_rad_file, vips_foreign_load_rad_get_type()); static int vips_foreign_load_rad_file_build(VipsObject *object) { VipsForeignLoadRad *rad = (VipsForeignLoadRad *) object; VipsForeignLoadRadFile *file = (VipsForeignLoadRadFile *) object; if (file->filename && !(rad->source = vips_source_new_from_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_rad_file_parent_class)->build(object)) return -1; return 0; } static int vips_foreign_load_rad_file_is_a(const char *filename) { VipsSource *source; int result; if (!(source = vips_source_new_from_file(filename))) return -1; result = vips_foreign_load_rad_source_is_a_source(source); VIPS_UNREF(source); return result; } static void vips_foreign_load_rad_file_class_init(VipsForeignLoadRadFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "radload"; object_class->description = _("load a Radiance image from a file"); object_class->build = vips_foreign_load_rad_file_build; foreign_class->suffs = vips__rad_suffs; load_class->is_a = vips_foreign_load_rad_file_is_a; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadRadFile, filename), NULL); } static void vips_foreign_load_rad_file_init(VipsForeignLoadRadFile *file) { } typedef struct _VipsForeignLoadRadBuffer { VipsForeignLoadRad parent_object; /* Load from a buffer. */ VipsBlob *blob; } VipsForeignLoadRadBuffer; typedef VipsForeignLoadRadClass VipsForeignLoadRadBufferClass; G_DEFINE_TYPE(VipsForeignLoadRadBuffer, vips_foreign_load_rad_buffer, vips_foreign_load_rad_get_type()); static int vips_foreign_load_rad_buffer_build(VipsObject *object) { VipsForeignLoadRad *rad = (VipsForeignLoadRad *) object; VipsForeignLoadRadBuffer *buffer = (VipsForeignLoadRadBuffer *) object; if (buffer->blob && !(rad->source = vips_source_new_from_memory( VIPS_AREA(buffer->blob)->data, VIPS_AREA(buffer->blob)->length))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_rad_file_parent_class)->build(object)) return -1; return 0; } static gboolean vips_foreign_load_rad_buffer_is_a_buffer(const void *buf, size_t len) { VipsSource *source; gboolean result; if (!(source = vips_source_new_from_memory(buf, len))) return FALSE; result = vips_foreign_load_rad_source_is_a_source(source); VIPS_UNREF(source); return result; } static void vips_foreign_load_rad_buffer_class_init(VipsForeignLoadRadBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "radload_buffer"; object_class->description = _("load rad from buffer"); object_class->build = vips_foreign_load_rad_buffer_build; load_class->is_a_buffer = vips_foreign_load_rad_buffer_is_a_buffer; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadRadBuffer, blob), VIPS_TYPE_BLOB); } static void vips_foreign_load_rad_buffer_init(VipsForeignLoadRadBuffer *buffer) { } #endif /*HAVE_RADIANCE*/ /** * vips_radload: * @filename: file to load * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Read a Radiance (HDR) file into a VIPS image. * * Radiance files are read as #VIPS_CODING_RAD. They have one byte for each of * red, green and blue, and one byte of shared exponent. Some operations (like * vips_extract_area()) can work directly with images in this format, but * mmany (all the arithmetic operations, for example) will not. Unpack * #VIPS_CODING_RAD images to 3 band float with vips_rad2float() if * you want to do arithmetic on them. * * This operation ignores some header fields, like VIEW and DATE. It will not * rotate/flip as the FORMAT string asks. * * Sections of this reader from Greg Ward and Radiance with kind permission. * * See also: vips_image_new_from_file(). * * Returns: 0 on success, -1 on error. */ int vips_radload(const char *filename, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("radload", ap, filename, out); va_end(ap); return result; } /** * vips_radload_buffer: * @buf: (array length=len) (element-type guint8): memory area to load * @len: (type gsize): size of memory area * @out: (out): image to write * @...: %NULL-terminated list of optional named arguments * * Exactly as vips_radload(), but read from a HDR-formatted memory block. * * You must not free the buffer while @out is active. The * #VipsObject::postclose signal on @out is a good place to free. * * See also: vips_radload(). * * Returns: 0 on success, -1 on error. */ int vips_radload_buffer(void *buf, size_t len, VipsImage **out, ...) { va_list ap; VipsBlob *blob; int result; /* We don't take a copy of the data or free it. */ blob = vips_blob_new(NULL, buf, len); va_start(ap, out); result = vips_call_split("radload_buffer", ap, blob, out); va_end(ap); vips_area_unref(VIPS_AREA(blob)); return result; } /** * vips_radload_source: * @source: source to load from * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Exactly as vips_radload(), but read from a source. * * See also: vips_radload(). * * Returns: 0 on success, -1 on error. */ int vips_radload_source(VipsSource *source, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("radload_source", ap, source, out); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/radsave.c000066400000000000000000000220501454007373500201570ustar00rootroot00000000000000/* save to rad * * 2/12/11 * - wrap a class around the rad writer * 23/5/16 * - split into file and buffer save classes */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pforeign.h" #ifdef HAVE_RADIANCE typedef struct _VipsForeignSaveRad { VipsForeignSave parent_object; } VipsForeignSaveRad; typedef VipsForeignSaveClass VipsForeignSaveRadClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignSaveRad, vips_foreign_save_rad, VIPS_TYPE_FOREIGN_SAVE); /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX static VipsBandFormat vips_foreign_save_rad_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ F, F, F, F, F, F, F, F, F, F }; static void vips_foreign_save_rad_class_init(VipsForeignSaveRadClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class; object_class->nickname = "radsave_base"; object_class->description = _("save Radiance"); foreign_class->suffs = vips__rad_suffs; save_class->saveable = VIPS_SAVEABLE_RGB; save_class->format_table = vips_foreign_save_rad_format_table; save_class->coding[VIPS_CODING_NONE] = FALSE; save_class->coding[VIPS_CODING_RAD] = TRUE; } static void vips_foreign_save_rad_init(VipsForeignSaveRad *rad) { } typedef struct _VipsForeignSaveRadFile { VipsForeignSaveRad parent_object; char *filename; } VipsForeignSaveRadFile; typedef VipsForeignSaveRadClass VipsForeignSaveRadFileClass; G_DEFINE_TYPE(VipsForeignSaveRadFile, vips_foreign_save_rad_file, vips_foreign_save_rad_get_type()); static int vips_foreign_save_rad_file_build(VipsObject *object) { VipsForeignSave *save = (VipsForeignSave *) object; VipsForeignSaveRadFile *file = (VipsForeignSaveRadFile *) object; VipsTarget *target; if (VIPS_OBJECT_CLASS(vips_foreign_save_rad_file_parent_class)->build(object)) return -1; if (!(target = vips_target_new_to_file(file->filename))) return -1; if (vips__rad_save(save->ready, target)) { VIPS_UNREF(target); return -1; } VIPS_UNREF(target); return 0; } static void vips_foreign_save_rad_file_class_init(VipsForeignSaveRadFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "radsave"; object_class->description = _("save image to Radiance file"); object_class->build = vips_foreign_save_rad_file_build; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveRadFile, filename), NULL); } static void vips_foreign_save_rad_file_init(VipsForeignSaveRadFile *file) { } typedef struct _VipsForeignSaveRadTarget { VipsForeignSaveRad parent_object; VipsTarget *target; } VipsForeignSaveRadTarget; typedef VipsForeignSaveRadClass VipsForeignSaveRadTargetClass; G_DEFINE_TYPE(VipsForeignSaveRadTarget, vips_foreign_save_rad_target, vips_foreign_save_rad_get_type()); static int vips_foreign_save_rad_target_build(VipsObject *object) { VipsForeignSave *save = (VipsForeignSave *) object; VipsForeignSaveRadTarget *target = (VipsForeignSaveRadTarget *) object; if (VIPS_OBJECT_CLASS(vips_foreign_save_rad_target_parent_class) ->build(object)) return -1; if (vips__rad_save(save->ready, target->target)) return -1; return 0; } static void vips_foreign_save_rad_target_class_init(VipsForeignSaveRadTargetClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "radsave_target"; object_class->description = _("save image to Radiance target"); object_class->build = vips_foreign_save_rad_target_build; VIPS_ARG_OBJECT(class, "target", 1, _("Target"), _("Target to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveRadTarget, target), VIPS_TYPE_TARGET); } static void vips_foreign_save_rad_target_init(VipsForeignSaveRadTarget *target) { } typedef struct _VipsForeignSaveRadBuffer { VipsForeignSaveRad parent_object; VipsArea *buf; } VipsForeignSaveRadBuffer; typedef VipsForeignSaveRadClass VipsForeignSaveRadBufferClass; G_DEFINE_TYPE(VipsForeignSaveRadBuffer, vips_foreign_save_rad_buffer, vips_foreign_save_rad_get_type()); static int vips_foreign_save_rad_buffer_build(VipsObject *object) { VipsForeignSave *save = (VipsForeignSave *) object; VipsTarget *target; VipsBlob *blob; if (VIPS_OBJECT_CLASS(vips_foreign_save_rad_buffer_parent_class) ->build(object)) return -1; if (!(target = vips_target_new_to_memory())) return -1; if (vips__rad_save(save->ready, target)) { VIPS_UNREF(target); return -1; } g_object_get(target, "blob", &blob, NULL); g_object_set(save, "buffer", blob, NULL); vips_area_unref(VIPS_AREA(blob)); VIPS_UNREF(target); return 0; } static void vips_foreign_save_rad_buffer_class_init(VipsForeignSaveRadBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "radsave_buffer"; object_class->description = _("save image to Radiance buffer"); object_class->build = vips_foreign_save_rad_buffer_build; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to save to"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsForeignSaveRadBuffer, buf), VIPS_TYPE_BLOB); } static void vips_foreign_save_rad_buffer_init(VipsForeignSaveRadBuffer *buffer) { } #endif /*HAVE_RADIANCE*/ /** * vips_radsave: (method) * @in: image to save * @filename: file to write to * @...: %NULL-terminated list of optional named arguments * * Write a VIPS image in Radiance (HDR) format. * * Sections of this reader from Greg Ward and Radiance with kind permission. * * See also: vips_image_write_to_file(). * * Returns: 0 on success, -1 on error. */ int vips_radsave(VipsImage *in, const char *filename, ...) { va_list ap; int result; va_start(ap, filename); result = vips_call_split("radsave", ap, in, filename); va_end(ap); return result; } /** * vips_radsave_buffer: (method) * @in: image to save * @buf: (array length=len) (element-type guint8): return output buffer here * @len: (type gsize): return output length here * @...: %NULL-terminated list of optional named arguments * * As vips_radsave(), but save to a memory buffer. * * The address of the buffer is returned in @buf, the length of the buffer in * @len. You are responsible for freeing the buffer with g_free() when you * are done with it. * * See also: vips_radsave(), vips_image_write_to_file(). * * Returns: 0 on success, -1 on error. */ int vips_radsave_buffer(VipsImage *in, void **buf, size_t *len, ...) { va_list ap; VipsArea *area; int result; area = NULL; va_start(ap, len); result = vips_call_split("radsave_buffer", ap, in, &area); va_end(ap); if (!result && area) { if (buf) { *buf = area->data; area->free_fn = NULL; } if (len) *len = area->length; vips_area_unref(area); } return result; } /** * vips_radsave_target: (method) * @in: image to save * @target: save image to this target * @...: %NULL-terminated list of optional named arguments * * As vips_radsave(), but save to a target. * * See also: vips_radsave(). * * Returns: 0 on success, -1 on error. */ int vips_radsave_target(VipsImage *in, VipsTarget *target, ...) { va_list ap; int result; va_start(ap, target); result = vips_call_split("radsave_target", ap, in, target); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/rawload.c000066400000000000000000000136311454007373500201700ustar00rootroot00000000000000/* load raw data from a file * * 14/12/11 * 5/8/19 * - add @format and @interpretation */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include typedef struct _VipsForeignLoadRaw { VipsForeignLoad parent_object; char *filename; int width; int height; int bands; guint64 offset; VipsBandFormat format; VipsInterpretation interpretation; } VipsForeignLoadRaw; typedef VipsForeignLoadClass VipsForeignLoadRawClass; G_DEFINE_TYPE(VipsForeignLoadRaw, vips_foreign_load_raw, VIPS_TYPE_FOREIGN_LOAD); static VipsForeignFlags vips_foreign_load_raw_get_flags(VipsForeignLoad *load) { return VIPS_FOREIGN_PARTIAL; } static VipsForeignFlags vips_foreign_load_raw_get_flags_filename(const char *filename) { return VIPS_FOREIGN_PARTIAL; } static int vips_foreign_load_raw_header(VipsForeignLoad *load) { VipsForeignLoadRaw *raw = (VipsForeignLoadRaw *) load; VipsImage *out; VipsImage *x; if (!(out = vips_image_new_from_file_raw(raw->filename, raw->width, raw->height, vips_format_sizeof_unsafe(raw->format) * raw->bands, raw->offset))) return -1; if (vips_copy(out, &x, "interpretation", raw->interpretation, "format", raw->format, "bands", raw->bands, NULL)) { g_object_unref(out); return -1; } g_object_unref(out); out = x; /* Remove the @out that's there now. */ g_object_get(load, "out", &x, NULL); g_object_unref(x); g_object_unref(x); g_object_set(load, "out", out, NULL); return 0; } static void vips_foreign_load_raw_class_init(VipsForeignLoadRawClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; /* You're unlikely to want to use this on untrusted files. */ operation_class->flags |= VIPS_OPERATION_UNTRUSTED; object_class->nickname = "rawload"; object_class->description = _("load raw data from a file"); load_class->get_flags = vips_foreign_load_raw_get_flags; load_class->get_flags_filename = vips_foreign_load_raw_get_flags_filename; load_class->header = vips_foreign_load_raw_header; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadRaw, filename), NULL); VIPS_ARG_INT(class, "width", 20, _("Width"), _("Image width in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadRaw, width), 0, VIPS_MAX_COORD, 0); VIPS_ARG_INT(class, "height", 21, _("Height"), _("Image height in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadRaw, height), 0, VIPS_MAX_COORD, 0); VIPS_ARG_INT(class, "bands", 22, _("Bands"), _("Number of bands in image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadRaw, bands), 0, VIPS_MAX_COORD, 0); VIPS_ARG_UINT64(class, "offset", 23, _("Size of header"), _("Offset in bytes from start of file"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadRaw, offset), 0, 100000000000, 0); VIPS_ARG_ENUM(class, "format", 24, _("Format"), _("Pixel format in image"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadRaw, format), VIPS_TYPE_BAND_FORMAT, VIPS_FORMAT_UCHAR); VIPS_ARG_ENUM(class, "interpretation", 25, _("Interpretation"), _("Pixel interpretation"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadRaw, interpretation), VIPS_TYPE_INTERPRETATION, VIPS_INTERPRETATION_MULTIBAND); } static void vips_foreign_load_raw_init(VipsForeignLoadRaw *raw) { raw->format = VIPS_FORMAT_UCHAR; raw->interpretation = VIPS_INTERPRETATION_MULTIBAND; } /** * vips_rawload: * @filename: file to load * @out: (out): output image * @width: width of image in pixels * @height: height of image in pixels * @bands: number of image bands * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @offset: %guint64, offset in bytes from start of file * * @format: #VipsBandFormat, set image format * * @interpretation: #VipsInterpretation, set image interpretation * * This operation mmaps the file, setting up @out so that access to that * image will read from the file. * * By default, it assumes uchar pixels. Use @format to select something else. * * The image will be tagged as #VIPS_INTERPRETATION_MULTIBAND. Use * @interpretation to select something else. * * Use vips_byteswap() to reverse the byte ordering if necessary. * * See also: vips_image_new_from_file(), vips_copy(), vips_byteswap(). * * Returns: 0 on success, -1 on error. */ int vips_rawload(const char *filename, VipsImage **out, int width, int height, int bands, ...) { va_list ap; int result; va_start(ap, bands); result = vips_call_split("rawload", ap, filename, out, width, height, bands); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/rawsave.c000066400000000000000000000157161454007373500202150ustar00rootroot00000000000000/* save to raw * * Write raw image data to file. Useful when defining new formats... * * Jesper Friis * * 10/06/08 JF * - initial code based on im_vips2ppm() * * 04/07/08 JF * - replaced FILE with plain file handlers for reducing * confusion about binary vs. non-binary file modes. * 4/2/10 * - gtkdoc * 15/12/11 * - rework as a class * - added save raw to filename */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #ifdef HAVE_UNISTD_H #include #endif #include #include #include typedef struct _VipsForeignSaveRaw { VipsForeignSave parent_object; char *filename; int fd; } VipsForeignSaveRaw; typedef VipsForeignSaveClass VipsForeignSaveRawClass; G_DEFINE_TYPE(VipsForeignSaveRaw, vips_foreign_save_raw, VIPS_TYPE_FOREIGN_SAVE); static void vips_foreign_save_raw_dispose(GObject *gobject) { VipsForeignSaveRaw *raw = (VipsForeignSaveRaw *) gobject; VIPS_FREEF(vips_tracked_close, raw->fd); G_OBJECT_CLASS(vips_foreign_save_raw_parent_class)->dispose(gobject); } static int vips_foreign_save_raw_write(VipsRegion *region, VipsRect *area, void *a) { VipsForeignSave *save = (VipsForeignSave *) a; VipsForeignSaveRaw *raw = (VipsForeignSaveRaw *) a; int i; for (i = 0; i < area->height; i++) { VipsPel *p = VIPS_REGION_ADDR(region, area->left, area->top + i); if (vips__write(raw->fd, p, VIPS_IMAGE_SIZEOF_PEL(save->in) * area->width)) return -1; } return 0; } static int vips_foreign_save_raw_build(VipsObject *object) { VipsForeignSave *save = (VipsForeignSave *) object; VipsForeignSaveRaw *raw = (VipsForeignSaveRaw *) object; if (VIPS_OBJECT_CLASS(vips_foreign_save_raw_parent_class)->build(object)) return -1; if ((raw->fd = vips__open_image_write(raw->filename, FALSE)) < 0 || vips_image_pio_input(save->in) || vips_sink_disc(save->in, vips_foreign_save_raw_write, raw)) return -1; return 0; } static const char *vips_foreign_save_raw_suffs[] = { ".raw", NULL }; static void vips_foreign_save_raw_class_init(VipsForeignSaveRawClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class; gobject_class->dispose = vips_foreign_save_raw_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "rawsave"; object_class->description = _("save image to raw file"); object_class->build = vips_foreign_save_raw_build; foreign_class->suffs = vips_foreign_save_raw_suffs; save_class->saveable = VIPS_SAVEABLE_ANY; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveRaw, filename), NULL); } static void vips_foreign_save_raw_init(VipsForeignSaveRaw *raw) { } /** * vips_rawsave: (method) * @in: image to save * @filename: file to write to * @...: %NULL-terminated list of optional named arguments * * Writes the pixels in @in to the file @filename with no header or other * metadata. * * See also: vips_image_write_to_file(). * * Returns: 0 on success, -1 on error. */ int vips_rawsave(VipsImage *in, const char *filename, ...) { va_list ap; int result; va_start(ap, filename); result = vips_call_split("rawsave", ap, in, filename); va_end(ap); return result; } /* And with an fd rather than a filename. */ typedef struct _VipsForeignSaveRawFd { VipsForeignSave parent_object; int fd; } VipsForeignSaveRawFd; typedef VipsForeignSaveClass VipsForeignSaveRawFdClass; G_DEFINE_TYPE(VipsForeignSaveRawFd, vips_foreign_save_raw_fd, VIPS_TYPE_FOREIGN_SAVE); static int vips_foreign_save_raw_fd_write(VipsRegion *region, VipsRect *area, void *a) { VipsForeignSave *save = (VipsForeignSave *) a; VipsForeignSaveRawFd *fd = (VipsForeignSaveRawFd *) a; int i; for (i = 0; i < area->height; i++) { VipsPel *p = VIPS_REGION_ADDR(region, area->left, area->top + i); if (vips__write(fd->fd, p, VIPS_IMAGE_SIZEOF_PEL(save->in) * area->width)) return -1; } return 0; } static int vips_foreign_save_raw_fd_build(VipsObject *object) { VipsForeignSave *save = (VipsForeignSave *) object; VipsForeignSaveRawFd *fd = (VipsForeignSaveRawFd *) object; if (VIPS_OBJECT_CLASS(vips_foreign_save_raw_fd_parent_class)->build(object)) return -1; if (vips_image_pio_input(save->in) || vips_sink_disc(save->in, vips_foreign_save_raw_fd_write, fd)) return -1; return 0; } static void vips_foreign_save_raw_fd_class_init(VipsForeignSaveRawFdClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "rawsave_fd"; object_class->description = _("write raw image to file descriptor"); object_class->build = vips_foreign_save_raw_fd_build; foreign_class->suffs = vips_foreign_save_raw_suffs; save_class->saveable = VIPS_SAVEABLE_ANY; VIPS_ARG_INT(class, "fd", 1, _("File descriptor"), _("File descriptor to write to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveRawFd, fd), 0, 10000, 0); } static void vips_foreign_save_raw_fd_init(VipsForeignSaveRawFd *fd) { } /** * vips_rawsave_fd: (method) * @in: image to save * @fd: file to write to * @...: %NULL-terminated list of optional named arguments * * Writes the pixels in @in to the @fd with no header or other * metadata. Handy for implementing other savers. * * See also: vips_rawsave(). * * Returns: 0 on success, -1 on error. */ int vips_rawsave_fd(VipsImage *in, int fd, ...) { va_list ap; int result; va_start(ap, fd); result = vips_call_split("rawsave_fd", ap, in, fd); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/spngload.c000066400000000000000000000550051454007373500203470ustar00rootroot00000000000000/* load PNG with libspng * * 1/5/20 * - from pngload.c * 19/2/21 781545872 * - read out background, if we can * 29/8/21 joshuamsager * - add "unlimited" flag to png load * 3/2/23 MathemanFlo * - add bits per sample metadata */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pforeign.h" #ifdef HAVE_SPNG #include typedef struct _VipsForeignLoadPng { VipsForeignLoad parent_object; /* Set by subclasses. */ VipsSource *source; /* Remove DoS limits. */ gboolean unlimited; spng_ctx *ctx; struct spng_ihdr ihdr; enum spng_format fmt; int bands; VipsInterpretation interpretation; VipsBandFormat format; int y_pos; } VipsForeignLoadPng; typedef VipsForeignLoadClass VipsForeignLoadPngClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignLoadPng, vips_foreign_load_png, VIPS_TYPE_FOREIGN_LOAD); static void vips_foreign_load_png_dispose(GObject *gobject) { VipsForeignLoadPng *png = (VipsForeignLoadPng *) gobject; VIPS_FREEF(spng_ctx_free, png->ctx); VIPS_UNREF(png->source); G_OBJECT_CLASS(vips_foreign_load_png_parent_class)->dispose(gobject); } static int vips_foreign_load_png_stream(spng_ctx *ctx, void *user, void *dest, size_t length) { VipsSource *source = VIPS_SOURCE(user); while (length > 0) { gint64 bytes_read; bytes_read = vips_source_read(source, dest, length); if (bytes_read < 0) return SPNG_IO_ERROR; if (bytes_read == 0) return SPNG_IO_EOF; dest = (char *) dest + bytes_read; length -= bytes_read; } return 0; } static VipsForeignFlags vips_foreign_load_png_get_flags_source(VipsSource *source) { spng_ctx *ctx; struct spng_ihdr ihdr; VipsForeignFlags flags; ctx = spng_ctx_new(SPNG_CTX_IGNORE_ADLER32); spng_set_crc_action(ctx, SPNG_CRC_USE, SPNG_CRC_USE); if (vips_source_rewind(source)) return 0; spng_set_png_stream(ctx, vips_foreign_load_png_stream, source); if (spng_get_ihdr(ctx, &ihdr)) { spng_ctx_free(ctx); return 0; } spng_ctx_free(ctx); flags = 0; if (ihdr.interlace_method != SPNG_INTERLACE_NONE) flags |= VIPS_FOREIGN_PARTIAL; else flags |= VIPS_FOREIGN_SEQUENTIAL; return flags; } static VipsForeignFlags vips_foreign_load_png_get_flags(VipsForeignLoad *load) { VipsForeignLoadPng *png = (VipsForeignLoadPng *) load; return vips_foreign_load_png_get_flags_source(png->source); } static VipsForeignFlags vips_foreign_load_png_get_flags_filename(const char *filename) { VipsSource *source; VipsForeignFlags flags; if (!(source = vips_source_new_from_file(filename))) return 0; flags = vips_foreign_load_png_get_flags_source(source); VIPS_UNREF(source); return flags; } /* Set the png text data as metadata on the vips image. These are always * null-terminated strings. */ static void vips_foreign_load_png_set_text(VipsImage *out, int i, const char *key, const char *value) { #ifdef DEBUG printf("vips_foreign_load_png_set_text: key %s, value %s\n", key, value); #endif /*DEBUG*/ if (strcmp(key, "XML:com.adobe.xmp") == 0) { /* Save as an XMP tag. This must be a BLOB, for compatibility * for things like the XMP blob that the tiff loader adds. * * Note that this will remove the null-termination from the * string. We must carefully reattach this. */ vips_image_set_blob_copy(out, VIPS_META_XMP_NAME, value, strlen(value)); } else { char name[256]; /* Save as a string comment. Some PNGs have EXIF data as * text segments, unfortunately. */ vips_snprintf(name, 256, "png-comment-%d-%s", i, key); vips_image_set_string(out, name, value); } } static int vips_foreign_load_png_set_header(VipsForeignLoadPng *png, VipsImage *image) { double xres, yres; struct spng_iccp iccp; struct spng_exif exif; struct spng_phys phys; struct spng_bkgd bkgd; guint32 n_text; /* Get resolution. Default to 72 pixels per inch. */ xres = 72.0 / 25.4; yres = 72.0 / 25.4; if (!spng_get_phys(png->ctx, &phys)) { /* unit 1 means pixels per metre, otherwise unspecified. */ xres = phys.unit_specifier == 1 ? phys.ppu_x / 1000.0 : phys.ppu_x; yres = phys.unit_specifier == 1 ? phys.ppu_y / 1000.0 : phys.ppu_y; } vips_image_init_fields(image, png->ihdr.width, png->ihdr.height, png->bands, png->format, VIPS_CODING_NONE, png->interpretation, xres, yres); VIPS_SETSTR(image->filename, vips_connection_filename(VIPS_CONNECTION(png->source))); if (vips_image_pipelinev(image, VIPS_DEMAND_STYLE_THINSTRIP, NULL)) return -1; if (!spng_get_iccp(png->ctx, &iccp)) vips_image_set_blob_copy(image, VIPS_META_ICC_NAME, iccp.profile, iccp.profile_len); if (!spng_get_text(png->ctx, NULL, &n_text)) { struct spng_text *text; /* Very large numbers of text chunks are used in DoS * attacks. */ if (!png->unlimited && n_text > MAX_PNG_TEXT_CHUNKS) { g_warning(_("%d text chunks, only %d text chunks will be loaded"), n_text, MAX_PNG_TEXT_CHUNKS); n_text = MAX_PNG_TEXT_CHUNKS; } text = VIPS_ARRAY(VIPS_OBJECT(png), n_text, struct spng_text); if (!spng_get_text(png->ctx, text, &n_text)) { guint32 i; for (i = 0; i < n_text; i++) /* .text is always a null-terminated C string. */ vips_foreign_load_png_set_text(image, i, text[i].keyword, text[i].text); } } if (!spng_get_exif(png->ctx, &exif)) vips_image_set_blob_copy(image, VIPS_META_EXIF_NAME, exif.data, exif.length); vips_image_set_int(image, VIPS_META_BITS_PER_SAMPLE, png->ihdr.bit_depth); /* Deprecated "palette-bit-depth" use "bits-per-sample" instead. */ if (png->ihdr.color_type == SPNG_COLOR_TYPE_INDEXED) vips_image_set_int(image, "palette-bit-depth", png->ihdr.bit_depth); /* Let our caller know. These are very expensive to decode. */ if (png->ihdr.interlace_method != SPNG_INTERLACE_NONE) vips_image_set_int(image, "interlaced", 1); if (!spng_get_bkgd(png->ctx, &bkgd)) { const int scale = image->BandFmt == VIPS_FORMAT_UCHAR ? 1 : 256; double array[3]; int n; switch (png->ihdr.color_type) { case SPNG_COLOR_TYPE_GRAYSCALE: case SPNG_COLOR_TYPE_GRAYSCALE_ALPHA: array[0] = bkgd.gray / scale; n = 1; break; case SPNG_COLOR_TYPE_TRUECOLOR: case SPNG_COLOR_TYPE_TRUECOLOR_ALPHA: array[0] = bkgd.red / scale; array[1] = bkgd.green / scale; array[2] = bkgd.blue / scale; n = 3; break; case SPNG_COLOR_TYPE_INDEXED: default: /* Not sure what to do here. I suppose we should read * the palette. */ n = 0; break; } if (n > 0) vips_image_set_array_double(image, "background", array, n); } return 0; } static int vips_foreign_load_png_header(VipsForeignLoad *load) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load); VipsForeignLoadPng *png = (VipsForeignLoadPng *) load; int flags; int error; struct spng_trns trns; /* In non-fail mode, ignore CRC errors. */ flags = 0; if (load->fail_on >= VIPS_FAIL_ON_ERROR) flags |= SPNG_CTX_IGNORE_ADLER32; png->ctx = spng_ctx_new(flags); if (load->fail_on >= VIPS_FAIL_ON_ERROR) /* Ignore and don't calculate checksums. */ spng_set_crc_action(png->ctx, SPNG_CRC_USE, SPNG_CRC_USE); /* Set limits to avoid decompression bombs. Set chunk limits to 60mb * -- we've seen 50mb XMP blocks in the wild. * * No need to test the decoded image size -- the user can do that if * they wish. */ if (!png->unlimited) { spng_set_image_limits(png->ctx, VIPS_MAX_COORD, VIPS_MAX_COORD); spng_set_chunk_limits(png->ctx, 60 * 1024 * 1024, 60 * 1024 * 1024); } if (vips_source_rewind(png->source)) return -1; spng_set_png_stream(png->ctx, vips_foreign_load_png_stream, png->source); if ((error = spng_get_ihdr(png->ctx, &png->ihdr))) { vips_error(class->nickname, "%s", spng_strerror(error)); return -1; } #ifdef DEBUG printf("width: %d\nheight: %d\nbit depth: %d\ncolor type: %d\n", png->ihdr.width, png->ihdr.height, png->ihdr.bit_depth, png->ihdr.color_type); printf("compression method: %d\nfilter method: %d\n" "interlace method: %d\n", png->ihdr.compression_method, png->ihdr.filter_method, png->ihdr.interlace_method); #endif /*DEBUG*/ /* Just convert to host-endian if nothing else applies. */ png->fmt = SPNG_FMT_PNG; switch (png->ihdr.color_type) { case SPNG_COLOR_TYPE_INDEXED: png->bands = 3; break; case SPNG_COLOR_TYPE_GRAYSCALE_ALPHA: case SPNG_COLOR_TYPE_GRAYSCALE: png->bands = 1; break; case SPNG_COLOR_TYPE_TRUECOLOR: case SPNG_COLOR_TYPE_TRUECOLOR_ALPHA: png->bands = 3; break; default: vips_error(class->nickname, "%s", _("unknown color type")); return -1; } /* Set libvips format and interpretation. */ if (png->ihdr.bit_depth > 8) { if (png->bands < 3) png->interpretation = VIPS_INTERPRETATION_GREY16; else png->interpretation = VIPS_INTERPRETATION_RGB16; png->format = VIPS_FORMAT_USHORT; } else { if (png->bands < 3) png->interpretation = VIPS_INTERPRETATION_B_W; else png->interpretation = VIPS_INTERPRETATION_sRGB; png->format = VIPS_FORMAT_UCHAR; } /* Expand palette images. */ if (png->ihdr.color_type == SPNG_COLOR_TYPE_INDEXED) png->fmt = SPNG_FMT_RGB8; /* Expand <8 bit images to full bytes. */ if (png->ihdr.color_type == SPNG_COLOR_TYPE_GRAYSCALE && png->ihdr.bit_depth < 8) png->fmt = SPNG_FMT_G8; /* Try reading the optional transparency chunk. This will cause all * chunks up to the first IDAT to be read in, so it can fail if any * chunk has an error. */ error = spng_get_trns(png->ctx, &trns); if (error && error != SPNG_ECHUNKAVAIL) { vips_error(class->nickname, "%s", spng_strerror(error)); return -1; } /* Expand transparency. * * The _ALPHA types should not have the optional trns chunk (they * always have a transparent band), see * https://www.w3.org/TR/2003/REC-PNG-20031110/#11tRNS * * It's quick and safe to call spng_get_trns() again, and we now know * it will only fail for no transparency chunk. */ if (png->ihdr.color_type == SPNG_COLOR_TYPE_GRAYSCALE_ALPHA || png->ihdr.color_type == SPNG_COLOR_TYPE_TRUECOLOR_ALPHA) png->bands += 1; else if (!spng_get_trns(png->ctx, &trns)) { png->bands += 1; if (png->ihdr.color_type == SPNG_COLOR_TYPE_TRUECOLOR) { if (png->ihdr.bit_depth == 16) png->fmt = SPNG_FMT_RGBA16; else png->fmt = SPNG_FMT_RGBA8; } else if (png->ihdr.color_type == SPNG_COLOR_TYPE_INDEXED) png->fmt = SPNG_FMT_RGBA8; else if (png->ihdr.color_type == SPNG_COLOR_TYPE_GRAYSCALE) { if (png->ihdr.bit_depth == 16) png->fmt = SPNG_FMT_GA16; else png->fmt = SPNG_FMT_GA8; } } vips_source_minimise(png->source); if (vips_foreign_load_png_set_header(png, load->out)) return -1; return 0; } static void vips_foreign_load_png_minimise(VipsObject *object, VipsForeignLoadPng *png) { vips_source_minimise(png->source); } static int vips_foreign_load_png_generate(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRect *r = &out_region->valid; VipsForeignLoad *load = VIPS_FOREIGN_LOAD(a); VipsForeignLoadPng *png = (VipsForeignLoadPng *) load; VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(png); int y; int error; #ifdef DEBUG printf("vips_foreign_load_png_generate: line %d, %d rows\n", r->top, r->height); printf("vips_foreign_load_png_generate: y_top = %d\n", png->y_pos); #endif /*DEBUG*/ /* We're inside a tilecache where tiles are the full image width, so * this should always be true. */ g_assert(r->left == 0); g_assert(r->width == out_region->im->Xsize); g_assert(VIPS_RECT_BOTTOM(r) <= out_region->im->Ysize); /* Tiles should always be a strip in height, unless it's the final * strip. */ g_assert(r->height == VIPS_MIN(VIPS__FATSTRIP_HEIGHT, out_region->im->Ysize - r->top)); /* And check that y_pos is correct. It should be, since we are inside * a vips_sequential(). */ if (r->top != png->y_pos) { vips_error(class->nickname, _("out of order read at line %d"), png->y_pos); return -1; } for (y = 0; y < r->height; y++) { /* libspng returns EOI when successfully reading the * final line of input. */ error = spng_decode_row(png->ctx, VIPS_REGION_ADDR(out_region, 0, r->top + y), VIPS_REGION_SIZEOF_LINE(out_region)); if (error != 0 && error != SPNG_EOI) { /* We've failed to read some pixels. Knock this * operation out of cache. */ vips_operation_invalidate(VIPS_OPERATION(png)); #ifdef DEBUG printf("vips_foreign_load_png_generate:\n"); printf(" spng_decode_row() failed, line %d\n", r->top + y); printf(" thread %p\n", g_thread_self()); printf(" error %s\n", spng_strerror(error)); #endif /*DEBUG*/ g_warning("%s: %s", class->nickname, spng_strerror(error)); /* And bail if trunc is on. */ if (load->fail_on >= VIPS_FAIL_ON_TRUNCATED) { vips_error(class->nickname, "%s", _("libspng read error")); return -1; } } png->y_pos += 1; } return 0; } static int vips_foreign_load_png_load(VipsForeignLoad *load) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load); VipsForeignLoadPng *png = (VipsForeignLoadPng *) load; VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(load), 3); enum spng_decode_flags flags; int error; if (vips_source_decode(png->source)) return -1; /* Decode transparency, if available. */ flags = SPNG_DECODE_TRNS; if (png->ihdr.interlace_method != SPNG_INTERLACE_NONE) { /* Arg awful interlaced image. We have to load to a huge mem * buffer, then copy to out. */ t[0] = vips_image_new_memory(); if (vips_foreign_load_png_set_header(png, t[0]) || vips_image_write_prepare(t[0])) return -1; if ((error = spng_decode_image(png->ctx, VIPS_IMAGE_ADDR(t[0], 0, 0), VIPS_IMAGE_SIZEOF_IMAGE(t[0]), png->fmt, flags))) { vips_error(class->nickname, "%s", spng_strerror(error)); return -1; } /* We've now finished reading the file. */ vips_source_minimise(png->source); if (vips_image_write(t[0], load->real)) return -1; } else { t[0] = vips_image_new(); if (vips_foreign_load_png_set_header(png, t[0])) return -1; /* We can decode these progressively. */ flags |= SPNG_DECODE_PROGRESSIVE; if ((error = spng_decode_image(png->ctx, NULL, 0, png->fmt, flags))) { vips_error(class->nickname, "%s", spng_strerror(error)); return -1; } /* Close input immediately at end of read. */ g_signal_connect(t[0], "minimise", G_CALLBACK(vips_foreign_load_png_minimise), png); if (vips_image_generate(t[0], NULL, vips_foreign_load_png_generate, NULL, png, NULL) || vips_sequential(t[0], &t[1], "tile_height", VIPS__FATSTRIP_HEIGHT, NULL) || vips_image_write(t[1], load->real)) return -1; } return 0; } static void vips_foreign_load_png_class_init(VipsForeignLoadPngClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->dispose = vips_foreign_load_png_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "pngload_base"; object_class->description = _("load png base class"); /* We are fast at is_a(), so high priority. */ foreign_class->priority = 200; load_class->get_flags_filename = vips_foreign_load_png_get_flags_filename; load_class->get_flags = vips_foreign_load_png_get_flags; load_class->header = vips_foreign_load_png_header; load_class->load = vips_foreign_load_png_load; VIPS_ARG_BOOL(class, "unlimited", 23, _("Unlimited"), _("Remove all denial of service limits"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPng, unlimited), FALSE); } static void vips_foreign_load_png_init(VipsForeignLoadPng *png) { } typedef struct _VipsForeignLoadPngSource { VipsForeignLoadPng parent_object; /* Load from a source. */ VipsSource *source; } VipsForeignLoadPngSource; typedef VipsForeignLoadPngClass VipsForeignLoadPngSourceClass; G_DEFINE_TYPE(VipsForeignLoadPngSource, vips_foreign_load_png_source, vips_foreign_load_png_get_type()); static int vips_foreign_load_png_source_build(VipsObject *object) { VipsForeignLoadPng *png = (VipsForeignLoadPng *) object; VipsForeignLoadPngSource *source = (VipsForeignLoadPngSource *) object; if (source->source) { png->source = source->source; g_object_ref(png->source); } if (VIPS_OBJECT_CLASS(vips_foreign_load_png_source_parent_class) ->build(object)) return -1; return 0; } static gboolean vips_foreign_load_png_source_is_a_source(VipsSource *source) { static unsigned char signature[8] = { 137, 80, 78, 71, 13, 10, 26, 10 }; const unsigned char *p; if ((p = vips_source_sniff(source, 8)) && memcmp(p, signature, 8) == 0) return TRUE; return FALSE; } static void vips_foreign_load_png_source_class_init(VipsForeignLoadPngSourceClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "pngload_source"; object_class->description = _("load png from source"); object_class->build = vips_foreign_load_png_source_build; operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_png_source_is_a_source; VIPS_ARG_OBJECT(class, "source", 1, _("Source"), _("Source to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPngSource, source), VIPS_TYPE_SOURCE); } static void vips_foreign_load_png_source_init(VipsForeignLoadPngSource *source) { } typedef struct _VipsForeignLoadPngFile { VipsForeignLoadPng parent_object; /* Filename for load. */ char *filename; } VipsForeignLoadPngFile; typedef VipsForeignLoadPngClass VipsForeignLoadPngFileClass; G_DEFINE_TYPE(VipsForeignLoadPngFile, vips_foreign_load_png_file, vips_foreign_load_png_get_type()); static int vips_foreign_load_png_file_build(VipsObject *object) { VipsForeignLoadPng *png = (VipsForeignLoadPng *) object; VipsForeignLoadPngFile *file = (VipsForeignLoadPngFile *) object; if (file->filename && !(png->source = vips_source_new_from_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_png_file_parent_class)->build(object)) return -1; return 0; } static gboolean vips_foreign_load_png_file_is_a(const char *filename) { VipsSource *source; gboolean result; if (!(source = vips_source_new_from_file(filename))) return FALSE; result = vips_foreign_load_png_source_is_a_source(source); VIPS_UNREF(source); return result; } const char *vips_foreign_load_png_file_suffs[] = { ".png", NULL }; static void vips_foreign_load_png_file_class_init(VipsForeignLoadPngFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "pngload"; object_class->description = _("load png from file"); object_class->build = vips_foreign_load_png_file_build; foreign_class->suffs = vips_foreign_load_png_file_suffs; load_class->is_a = vips_foreign_load_png_file_is_a; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPngFile, filename), NULL); } static void vips_foreign_load_png_file_init(VipsForeignLoadPngFile *file) { } typedef struct _VipsForeignLoadPngBuffer { VipsForeignLoadPng parent_object; /* Load from a buffer. */ VipsBlob *blob; } VipsForeignLoadPngBuffer; typedef VipsForeignLoadPngClass VipsForeignLoadPngBufferClass; G_DEFINE_TYPE(VipsForeignLoadPngBuffer, vips_foreign_load_png_buffer, vips_foreign_load_png_get_type()); static int vips_foreign_load_png_buffer_build(VipsObject *object) { VipsForeignLoadPng *png = (VipsForeignLoadPng *) object; VipsForeignLoadPngBuffer *buffer = (VipsForeignLoadPngBuffer *) object; if (buffer->blob && !(png->source = vips_source_new_from_memory( VIPS_AREA(buffer->blob)->data, VIPS_AREA(buffer->blob)->length))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_png_buffer_parent_class) ->build(object)) return -1; return 0; } static gboolean vips_foreign_load_png_buffer_is_a_buffer(const void *buf, size_t len) { VipsSource *source; gboolean result; if (!(source = vips_source_new_from_memory(buf, len))) return FALSE; result = vips_foreign_load_png_source_is_a_source(source); VIPS_UNREF(source); return result; } static void vips_foreign_load_png_buffer_class_init(VipsForeignLoadPngBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "pngload_buffer"; object_class->description = _("load png from buffer"); object_class->build = vips_foreign_load_png_buffer_build; load_class->is_a_buffer = vips_foreign_load_png_buffer_is_a_buffer; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadPngBuffer, blob), VIPS_TYPE_BLOB); } static void vips_foreign_load_png_buffer_init(VipsForeignLoadPngBuffer *buffer) { } #endif /*HAVE_SPNG*/ libvips-8.15.1/libvips/foreign/spngsave.c000066400000000000000000000533401454007373500203660ustar00rootroot00000000000000/* save to spng * * 2/12/11 * - wrap a class around the spng writer * 16/7/12 * - compression should be 0-9, not 1-10 * 20/6/18 [felixbuenemann] * - support spng8 palette write with palette, colours, Q, dither * 24/6/20 * - add @bitdepth, deprecate @colours * 11/11/21 * - use libspng for save * 15/7/22 [lovell] * - default filter to none * 17/11/22 * - add exif save */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pforeign.h" #include "quantise.h" #ifdef HAVE_SPNG #include typedef struct _VipsForeignSaveSpng { VipsForeignSave parent_object; int compression; gboolean interlace; VipsForeignPngFilter filter; gboolean palette; int Q; double dither; int bitdepth; int effort; /* Set by subclasses. */ VipsTarget *target; /* Write state. */ spng_ctx *ctx; GSList *text_chunks; VipsImage *memory; size_t sizeof_line; VipsPel *line; /* Deprecated. */ int colours; } VipsForeignSaveSpng; typedef VipsForeignSaveClass VipsForeignSaveSpngClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignSaveSpng, vips_foreign_save_spng, VIPS_TYPE_FOREIGN_SAVE); static void vips_foreign_save_spng_dispose(GObject *gobject) { VipsForeignSaveSpng *spng = (VipsForeignSaveSpng *) gobject; GSList *p; VIPS_UNREF(spng->target); VIPS_UNREF(spng->memory); VIPS_FREEF(spng_ctx_free, spng->ctx); for (p = spng->text_chunks; p; p = p->next) { struct spng_text *text = (struct spng_text *) p->data; VIPS_FREE(text->text); VIPS_FREE(text); } VIPS_FREEF(g_slist_free, spng->text_chunks); VIPS_FREE(spng->line); G_OBJECT_CLASS(vips_foreign_save_spng_parent_class)->dispose(gobject); } static int vips_foreign_save_spng_text(VipsForeignSaveSpng *spng, const char *keyword, const char *value) { struct spng_text *text = VIPS_NEW(NULL, struct spng_text); vips_strncpy(text->keyword, keyword, sizeof(text->keyword)); /* FIXME ... is this right? */ text->type = SPNG_TEXT; text->length = strlen(value); text->text = g_strdup(value); spng->text_chunks = g_slist_prepend(spng->text_chunks, text); return 0; } static void * vips_foreign_save_spng_comment(VipsImage *image, const char *field, GValue *value, void *user_data) { VipsForeignSaveSpng *spng = (VipsForeignSaveSpng *) user_data; if (vips_isprefix("png-comment-", field)) { const char *value; int i; char key[256]; if (vips_image_get_string(image, field, &value)) return image; if (strlen(field) > 256 || sscanf(field, "png-comment-%d-%80s", &i, key) != 2) { vips_error("vips2png", "%s", _("bad png comment key")); return image; } vips_foreign_save_spng_text(spng, key, value); } return NULL; } static int vips_foreign_save_spng_profile(VipsForeignSaveSpng *spng, VipsImage *in) { VipsForeignSave *save = (VipsForeignSave *) spng; struct spng_iccp iccp; /* A profile supplied as an argument overrides an embedded * profile. */ if (save->profile) { VipsBlob *blob; if (vips_profile_load(save->profile, &blob, NULL)) return -1; if (blob) { size_t length; const void *data = vips_blob_get(blob, &length); char *basename = g_path_get_basename(save->profile); #ifdef DEBUG printf("write_vips: attaching %zd bytes of ICC profile\n", length); #endif /*DEBUG*/ vips_strncpy(iccp.profile_name, basename, sizeof(iccp.profile_name)); iccp.profile_len = length; iccp.profile = (void *) data; spng_set_iccp(spng->ctx, &iccp); vips_area_unref((VipsArea *) blob); g_free(basename); } } else if (vips_image_get_typeof(in, VIPS_META_ICC_NAME)) { const void *data; size_t length; if (vips_image_get_blob(in, VIPS_META_ICC_NAME, &data, &length)) return -1; #ifdef DEBUG printf("write_vips: attaching %zd bytes of ICC profile\n", length); #endif /*DEBUG*/ vips_strncpy(iccp.profile_name, "icc", sizeof(iccp.profile_name)); iccp.profile_len = length; iccp.profile = (void *) data; spng_set_iccp(spng->ctx, &iccp); } return 0; } static int vips_foreign_save_spng_metadata(VipsForeignSaveSpng *spng, VipsImage *in) { uint32_t n_text; struct spng_text *text_chunk_array; struct spng_exif exif; int i; GSList *p; if (vips_image_get_typeof(in, VIPS_META_XMP_NAME)) { const void *data; size_t length; char *str; if (vips_image_get_blob(in, VIPS_META_XMP_NAME, &data, &length)) return -1; /* The blob form of the XMP metadata is missing the * terminating \0 bytes, we have to paste it back, * unfortunately. See pngload. */ str = g_malloc(length + 1); vips_strncpy(str, data, length + 1); vips_foreign_save_spng_text(spng, "XML:com.adobe.xmp", str); g_free(str); } if (vips_image_get_typeof(in, VIPS_META_EXIF_NAME)) { if (vips_image_get_blob(in, VIPS_META_EXIF_NAME, (const void **) &exif.data, &exif.length)) return -1; /* libspng does not want the JFIF "Exif\0\0" prefix. */ if (exif.length >= 6 && vips_isprefix("Exif", exif.data)) { exif.data += 6; exif.length -= 6; } spng_set_exif(spng->ctx, &exif); } if (vips_image_map(in, vips_foreign_save_spng_comment, spng)) return -1; n_text = g_slist_length(spng->text_chunks); text_chunk_array = VIPS_ARRAY(NULL, n_text, struct spng_text); for (i = 0, p = spng->text_chunks; p; p = p->next, i++) { struct spng_text *text = (struct spng_text *) p->data; text_chunk_array[i] = *text; } #ifdef DEBUG printf("attaching %u text items\n", n_text); #endif /*DEBUG*/ spng_set_text(spng->ctx, text_chunk_array, n_text); VIPS_FREE(text_chunk_array); return 0; } /* Pack a line of 1/2/4 bit index values. */ static void vips_foreign_save_spng_pack(VipsForeignSaveSpng *spng, VipsPel *q, VipsPel *p, size_t n) { int pixel_mask = 8 / spng->bitdepth - 1; int shift = spng->palette ? 0 : 8 - spng->bitdepth; VipsPel bits; size_t x; bits = 0; for (x = 0; x < n; x++) { bits <<= spng->bitdepth; bits |= p[x] >> shift; if ((x & pixel_mask) == pixel_mask) *q++ = bits; } /* Any left-over bits? Need to be left-aligned. */ if ((x & pixel_mask) != 0) { /* The number of bits we've collected and must * left-align and flush. */ int collected_bits = (x & pixel_mask) << (spng->bitdepth - 1); *q++ = bits << (8 - collected_bits); } } static int vips_foreign_save_spng_write_fn(spng_ctx *ctx, void *user, void *data, size_t n) { VipsForeignSaveSpng *spng = (VipsForeignSaveSpng *) user; if (vips_target_write(spng->target, data, n)) return SPNG_IO_ERROR; return 0; } static int vips_foreign_save_spng_write_block(VipsRegion *region, VipsRect *area, void *user) { VipsForeignSaveSpng *spng = (VipsForeignSaveSpng *) user; VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(spng); int y; int error; /* The area to write is always a set of complete scanlines. */ g_assert(area->left == 0); g_assert(area->width == region->im->Xsize); g_assert(area->top + area->height <= region->im->Ysize); for (y = 0; y < area->height; y++) { VipsPel *line; size_t sizeof_line; line = VIPS_REGION_ADDR(region, 0, area->top + y); sizeof_line = VIPS_REGION_SIZEOF_LINE(region); if (spng->bitdepth < 8) { vips_foreign_save_spng_pack(spng, spng->line, line, sizeof_line); line = spng->line; sizeof_line = spng->sizeof_line; } if ((error = spng_encode_row(spng->ctx, line, sizeof_line))) break; } /* You can get SPNG_EOI for the final scanline. */ if (error && error != SPNG_EOI) { vips_error(class->nickname, "%s", spng_strerror(error)); return -1; } return 0; } static int vips_foreign_save_spng_write(VipsForeignSaveSpng *spng, VipsImage *in) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(spng); int error; struct spng_ihdr ihdr; struct spng_phys phys; int fmt; enum spng_encode_flags encode_flags; spng->ctx = spng_ctx_new(SPNG_CTX_ENCODER); if ((error = spng_set_png_stream(spng->ctx, vips_foreign_save_spng_write_fn, spng))) { vips_error(class->nickname, "%s", spng_strerror(error)); return -1; } ihdr.width = in->Xsize; ihdr.height = in->Ysize; ihdr.bit_depth = spng->bitdepth; switch (in->Bands) { case 1: ihdr.color_type = SPNG_COLOR_TYPE_GRAYSCALE; break; case 2: ihdr.color_type = SPNG_COLOR_TYPE_GRAYSCALE_ALPHA; break; case 3: ihdr.color_type = SPNG_COLOR_TYPE_TRUECOLOR; break; case 4: ihdr.color_type = SPNG_COLOR_TYPE_TRUECOLOR_ALPHA; break; default: vips_error(class->nickname, "%s", _("bad bands")); return -1; } #ifdef HAVE_QUANTIZATION /* Enable image quantisation to paletted 8bpp PNG if palette is set. */ if (spng->palette) ihdr.color_type = SPNG_COLOR_TYPE_INDEXED; #else if (spng->palette) g_warning("%s", _("ignoring palette (no quantisation support)")); #endif /*HAVE_QUANTIZATION*/ ihdr.compression_method = 0; ihdr.filter_method = 0; ihdr.interlace_method = spng->interlace ? 1 : 0; if ((error = spng_set_ihdr(spng->ctx, &ihdr))) { vips_error(class->nickname, "%s", spng_strerror(error)); return -1; } spng_set_option(spng->ctx, SPNG_IMG_COMPRESSION_LEVEL, spng->compression); spng_set_option(spng->ctx, SPNG_TEXT_COMPRESSION_LEVEL, spng->compression); spng_set_option(spng->ctx, SPNG_FILTER_CHOICE, spng->filter); /* Set resolution. spng uses pixels per meter. */ phys.unit_specifier = 1; phys.ppu_x = VIPS_RINT(in->Xres * 1000.0); phys.ppu_y = VIPS_RINT(in->Xres * 1000.0); spng_set_phys(spng->ctx, &phys); /* Metadata. */ if (vips_foreign_save_spng_profile(spng, in) || vips_foreign_save_spng_metadata(spng, in)) return -1; #ifdef HAVE_QUANTIZATION if (spng->palette) { struct spng_plte plte = { 0 }; struct spng_trns trns = { 0 }; VipsImage *im_index; VipsImage *im_palette; int palette_count; int i; if (vips__quantise_image(in, &im_index, &im_palette, 1 << spng->bitdepth, spng->Q, spng->dither, spng->effort, FALSE)) return -1; /* PNG is 8-bit index only. */ palette_count = im_palette->Xsize; g_assert(palette_count <= 256); for (i = 0; i < palette_count; i++) { VipsPel *p = (VipsPel *) VIPS_IMAGE_ADDR(im_palette, i, 0); struct spng_plte_entry *entry = &plte.entries[plte.n_entries]; entry->red = p[0]; entry->green = p[1]; entry->blue = p[2]; plte.n_entries += 1; trns.type3_alpha[i] = p[3]; if (p[3] != 255) { trns.n_type3_entries = i + 1; } } #ifdef DEBUG printf("attaching %d entry palette\n", plte.n_entries); if (trns.n_type3_entries) printf("attaching %d transparency values\n", trns.n_type3_entries); #endif /*DEBUG*/ VIPS_UNREF(im_palette); spng_set_plte(spng->ctx, &plte); if (trns.n_type3_entries) spng_set_trns(spng->ctx, &trns); in = spng->memory = im_index; } #endif /*HAVE_QUANTIZATION*/ /* Low-bitdepth write needs an extra buffer for packing pixels. */ if (spng->bitdepth < 8) { spng->sizeof_line = 1 + VIPS_IMAGE_SIZEOF_LINE(in) / (8 / spng->bitdepth); if (!(spng->line = vips_malloc(NULL, VIPS_IMAGE_SIZEOF_LINE(in)))) return -1; } /* SPNG_FMT_PNG is a special value that matches the format in ihdr */ fmt = SPNG_FMT_PNG; encode_flags = SPNG_ENCODE_PROGRESSIVE | SPNG_ENCODE_FINALIZE; if ((error = spng_encode_image(spng->ctx, NULL, -1, fmt, encode_flags))) { vips_error(class->nickname, "%s", spng_strerror(error)); return -1; } if (spng->interlace) { /* Force the input into memory, if it's not there already. */ if (!spng->memory) { if (!(spng->memory = vips_image_copy_memory(in))) return -1; in = spng->memory; } do { struct spng_row_info row_info; VipsPel *line; size_t sizeof_line; if ((error = spng_get_row_info(spng->ctx, &row_info))) break; line = VIPS_IMAGE_ADDR(in, 0, row_info.row_num); sizeof_line = VIPS_IMAGE_SIZEOF_LINE(in); if (spng->bitdepth < 8) { vips_foreign_save_spng_pack(spng, spng->line, line, sizeof_line); line = spng->line; sizeof_line = spng->sizeof_line; } error = spng_encode_row(spng->ctx, line, sizeof_line); } while (!error); if (error != SPNG_EOI) { vips_error(class->nickname, "%s", spng_strerror(error)); return -1; } } else { if (vips_sink_disc(in, vips_foreign_save_spng_write_block, spng)) return -1; } if (vips_target_end(spng->target)) return -1; return 0; } static int vips_foreign_save_spng_build(VipsObject *object) { VipsForeignSave *save = (VipsForeignSave *) object; VipsForeignSaveSpng *spng = (VipsForeignSaveSpng *) object; VipsImage *in; if (VIPS_OBJECT_CLASS(vips_foreign_save_spng_parent_class)->build(object)) return -1; in = save->ready; g_object_ref(in); /* If no output bitdepth has been specified, use input Type to pick. */ if (!vips_object_argument_isset(object, "bitdepth")) spng->bitdepth = in->Type == VIPS_INTERPRETATION_RGB16 || in->Type == VIPS_INTERPRETATION_GREY16 ? 16 : 8; /* Deprecated "colours" arg just sets bitdepth large enough to hold * that many colours. */ if (vips_object_argument_isset(object, "colours")) spng->bitdepth = ceil(log2(spng->colours)); /* Cast in down to 8 bit if we can. */ if (spng->bitdepth <= 8) { VipsImage *x; if (vips_cast(in, &x, VIPS_FORMAT_UCHAR, NULL)) { g_object_unref(in); return -1; } g_object_unref(in); in = x; } /* If this is a RGB or RGBA image and a low bit depth has been * requested, enable palettisation. */ if (in->Bands > 2 && spng->bitdepth < 8) spng->palette = TRUE; /* Disable palettization for >8 bit save. */ if (spng->bitdepth > 8) spng->palette = FALSE; if (vips_foreign_save_spng_write(spng, in)) { g_object_unref(in); return -1; } g_object_unref(in); return 0; } #define UC VIPS_FORMAT_UCHAR #define US VIPS_FORMAT_USHORT /* Except for 8-bit inputs, we send everything else to 16. We decide on png8 * vs. png16 based on Type in_build(), see above. */ static VipsBandFormat bandfmt_spng[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, UC, US, US, US, US, US, US, US, US }; static void vips_foreign_save_spng_class_init(VipsForeignSaveSpngClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class; gobject_class->dispose = vips_foreign_save_spng_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "spngsave_base"; object_class->description = _("save spng"); object_class->build = vips_foreign_save_spng_build; foreign_class->suffs = vips__png_suffs; save_class->saveable = VIPS_SAVEABLE_RGBA; save_class->format_table = bandfmt_spng; VIPS_ARG_INT(class, "compression", 6, _("Compression"), _("Compression factor"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveSpng, compression), 0, 9, 6); VIPS_ARG_BOOL(class, "interlace", 7, _("Interlace"), _("Interlace image"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveSpng, interlace), FALSE); VIPS_ARG_FLAGS(class, "filter", 12, _("Filter"), _("libspng row filter flag(s)"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveSpng, filter), VIPS_TYPE_FOREIGN_PNG_FILTER, VIPS_FOREIGN_PNG_FILTER_NONE); VIPS_ARG_BOOL(class, "palette", 13, _("Palette"), _("Quantise to 8bpp palette"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveSpng, palette), FALSE); VIPS_ARG_INT(class, "Q", 15, _("Quality"), _("Quantisation quality"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveSpng, Q), 0, 100, 100); VIPS_ARG_DOUBLE(class, "dither", 16, _("Dithering"), _("Amount of dithering"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveSpng, dither), 0.0, 1.0, 1.0); VIPS_ARG_INT(class, "bitdepth", 17, _("Bit depth"), _("Write as a 1, 2, 4, 8 or 16 bit image"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveSpng, bitdepth), 1, 16, 8); VIPS_ARG_INT(class, "effort", 18, _("Effort"), _("Quantisation CPU effort"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveSpng, effort), 1, 10, 7); VIPS_ARG_INT(class, "colours", 14, _("Colours"), _("Max number of palette colours"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsForeignSaveSpng, colours), 2, 256, 256); } static void vips_foreign_save_spng_init(VipsForeignSaveSpng *spng) { spng->compression = 6; spng->filter = VIPS_FOREIGN_PNG_FILTER_NONE; spng->Q = 100; spng->dither = 1.0; spng->effort = 7; } typedef struct _VipsForeignSaveSpngTarget { VipsForeignSaveSpng parent_object; VipsTarget *target; } VipsForeignSaveSpngTarget; typedef VipsForeignSaveSpngClass VipsForeignSaveSpngTargetClass; G_DEFINE_TYPE(VipsForeignSaveSpngTarget, vips_foreign_save_spng_target, vips_foreign_save_spng_get_type()); static int vips_foreign_save_spng_target_build(VipsObject *object) { VipsForeignSaveSpng *spng = (VipsForeignSaveSpng *) object; VipsForeignSaveSpngTarget *target = (VipsForeignSaveSpngTarget *) object; spng->target = target->target; g_object_ref(spng->target); if (VIPS_OBJECT_CLASS(vips_foreign_save_spng_target_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_save_spng_target_class_init(VipsForeignSaveSpngTargetClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "pngsave_target"; object_class->description = _("save image to target as PNG"); object_class->build = vips_foreign_save_spng_target_build; VIPS_ARG_OBJECT(class, "target", 1, _("Target"), _("Target to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveSpngTarget, target), VIPS_TYPE_TARGET); } static void vips_foreign_save_spng_target_init(VipsForeignSaveSpngTarget *target) { } typedef struct _VipsForeignSaveSpngFile { VipsForeignSaveSpng parent_object; char *filename; } VipsForeignSaveSpngFile; typedef VipsForeignSaveSpngClass VipsForeignSaveSpngFileClass; G_DEFINE_TYPE(VipsForeignSaveSpngFile, vips_foreign_save_spng_file, vips_foreign_save_spng_get_type()); static int vips_foreign_save_spng_file_build(VipsObject *object) { VipsForeignSaveSpng *spng = (VipsForeignSaveSpng *) object; VipsForeignSaveSpngFile *file = (VipsForeignSaveSpngFile *) object; if (!(spng->target = vips_target_new_to_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_save_spng_file_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_save_spng_file_class_init(VipsForeignSaveSpngFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "pngsave"; object_class->description = _("save image to file as PNG"); object_class->build = vips_foreign_save_spng_file_build; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveSpngFile, filename), NULL); } static void vips_foreign_save_spng_file_init(VipsForeignSaveSpngFile *file) { } typedef struct _VipsForeignSaveSpngBuffer { VipsForeignSaveSpng parent_object; VipsArea *buf; } VipsForeignSaveSpngBuffer; typedef VipsForeignSaveSpngClass VipsForeignSaveSpngBufferClass; G_DEFINE_TYPE(VipsForeignSaveSpngBuffer, vips_foreign_save_spng_buffer, vips_foreign_save_spng_get_type()); static int vips_foreign_save_spng_buffer_build(VipsObject *object) { VipsForeignSaveSpng *spng = (VipsForeignSaveSpng *) object; VipsForeignSaveSpngBuffer *buffer = (VipsForeignSaveSpngBuffer *) object; VipsBlob *blob; if (!(spng->target = vips_target_new_to_memory())) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_save_spng_buffer_parent_class) ->build(object)) return -1; g_object_get(spng->target, "blob", &blob, NULL); g_object_set(buffer, "buffer", blob, NULL); vips_area_unref(VIPS_AREA(blob)); return 0; } static void vips_foreign_save_spng_buffer_class_init(VipsForeignSaveSpngBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "pngsave_buffer"; object_class->description = _("save image to buffer as PNG"); object_class->build = vips_foreign_save_spng_buffer_build; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to save to"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsForeignSaveSpngBuffer, buf), VIPS_TYPE_BLOB); } static void vips_foreign_save_spng_buffer_init(VipsForeignSaveSpngBuffer *buffer) { } #endif /*HAVE_SPNG*/ libvips-8.15.1/libvips/foreign/svgload.c000066400000000000000000000676021454007373500202050ustar00rootroot00000000000000/* load SVG with librsvg * * 7/2/16 * - from svgload.c * 1/8/16 felixbuenemann * - add svgz support * 18/1/17 * - invalidate operation on read error * 8/7/17 * - fix DPI mixup, thanks Fosk * 9/9/17 * - limit max tile width to 30k pixels to prevent overflow in render * 17/9/17 lovell * - handle scaling of svg files missing width and height attributes * 22/3/18 lovell * - svgload was missing is_a * 28/6/19 * - add "unlimited" * - requires us to use the gio API to librsvg * 11/9/19 * - rework as a sequential loader to reduce overcomputation * 11/6/21 * - switch to rsvg_handle_render_document() * - librsvg can no longer render very large images :( * 14/10/21 * - allow utf-8 headers for svg detection * 28/4/22 * - support rsvg_handle_get_intrinsic_size_in_pixels() * 5/6/22 * - allow random access */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include #if defined(HAVE_RSVG) #include #include /* Render SVGs with tiles this size. They need to be pretty big to limit * overcomputation. */ #define TILE_SIZE (2000) /* The #endif typedef struct _VipsForeignLoadSvg { VipsForeignLoad parent_object; /* Render at this DPI. */ double dpi; /* Calculate this from DPI. At 72 DPI, we render 1:1 with cairo. */ double scale; /* Scale using cairo when SVG has no width and height attributes. */ double cairo_scale; /* Allow SVGs of any size. */ gboolean unlimited; RsvgHandle *page; } VipsForeignLoadSvg; typedef VipsForeignLoadClass VipsForeignLoadSvgClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignLoadSvg, vips_foreign_load_svg, VIPS_TYPE_FOREIGN_LOAD); #ifdef HANDLE_SVGZ static void * vips_foreign_load_svg_zalloc(void *opaque, unsigned items, unsigned size) { return g_malloc0_n(items, size); } static void vips_foreign_load_svg_zfree(void *opaque, void *ptr) { return g_free(ptr); } #endif /*HANDLE_SVGZ*/ /* Find a utf-8 substring within the first len_bytes (not characters). * * - case-insensitive * - needle must be zero-terminated, but haystack need not be * - haystack can be null-terminated * - if haystack is shorter than len bytes, that'll end the search * - if we hit invalid utf-8, we return NULL */ static const char * vips_utf8_strcasestr(const char *haystack_start, const char *needle_start, int len_bytes) { int needle_len = g_utf8_strlen(needle_start, -1); int needle_len_bytes = strlen(needle_start); const char *haystack; for (haystack = haystack_start; haystack - haystack_start <= len_bytes - needle_len_bytes; haystack = g_utf8_find_next_char(haystack, NULL)) { const char *needle_char; const char *haystack_char; int i; haystack_char = haystack; needle_char = needle_start; for (i = 0; i < needle_len; i++) { /* Haystack isn't necessarily null-terminated and * might end half-way through a utf-8 character, so we * need to be careful not to run off the end. */ gunichar a = g_utf8_get_char_validated(haystack_char, haystack_start + len_bytes - haystack); gunichar b = g_utf8_get_char_validated(needle_char, -1); /* Invalid utf8? * * gunichar is a uint32, so we can't compare < 0, we * have to look for -1 and -2 (the two possible error * values). */ if (a == (gunichar) -1 || a == (gunichar) -2 || b == (gunichar) -1 || b == (gunichar) -2) return NULL; #if !GLIB_CHECK_VERSION(2, 63, 0) /* Disallow codepoint U+0000 as it's a nul byte. * This is redundant with GLib >= 2.63.0, see: * https://gitlab.gnome.org/GNOME/glib/-/merge_requests/967 */ if (a == (gunichar) 0) return NULL; #endif /* Mismatch. */ if (g_unichar_tolower(a) != g_unichar_tolower(b)) break; haystack_char = g_utf8_find_next_char(haystack_char, haystack_start + len_bytes); /* End of haystack. There can't be a complete needle * anywhere. */ if (haystack_char == NULL) return NULL; /* needle_char will never be NULL. */ needle_char = g_utf8_find_next_char(needle_char, NULL); } if (i == needle_len) /* Walked the whole of needle, so we must have found a * complete match. */ return haystack; } /* Walked the whole of haystack without finding a match. */ return NULL; } /* This is used by both the file and buffer subclasses. */ static gboolean vips_foreign_load_svg_is_a(const void *buf, size_t len) { char *str; #ifdef HANDLE_SVGZ /* If the buffer looks like a zip, deflate to here and then search * that for = 18 && str[0] == '\037' && str[1] == '\213') { z_stream zs; size_t opos; zs.zalloc = (alloc_func) vips_foreign_load_svg_zalloc; zs.zfree = (free_func) vips_foreign_load_svg_zfree; zs.opaque = Z_NULL; zs.next_in = (unsigned char *) str; zs.avail_in = len; /* There isn't really an error return from is_a_buffer() */ if (inflateInit2(&zs, 15 | 32) != Z_OK) return FALSE; opos = 0; do { zs.avail_out = sizeof(obuf) - opos; zs.next_out = (unsigned char *) obuf + opos; if (inflate(&zs, Z_NO_FLUSH) < Z_OK) { inflateEnd(&zs); return FALSE; } opos = sizeof(obuf) - zs.avail_out; } while (opos < sizeof(obuf) && zs.avail_in > 0); inflateEnd(&zs); str = obuf; len = opos; } #endif /*HANDLE_SVGZ*/ /* SVG documents are very freeform. They normally look like: * * * page); G_OBJECT_CLASS(vips_foreign_load_svg_parent_class)->dispose(gobject); } static VipsForeignFlags vips_foreign_load_svg_get_flags_filename(const char *filename) { /* We can render any part of the page on demand. */ return VIPS_FOREIGN_PARTIAL; } static VipsForeignFlags vips_foreign_load_svg_get_flags(VipsForeignLoad *load) { return VIPS_FOREIGN_PARTIAL; } #if LIBRSVG_CHECK_VERSION(2, 52, 0) /* Derived from `CssLength::to_user` in librsvg. * https://gitlab.gnome.org/GNOME/librsvg/-/blob/e6607c9ae8d8409d4efff6b12993717400b3356e/src/length.rs#L368 */ static double svg_css_length_to_pixels(RsvgLength length, double dpi) { double value = length.length; /* The following implies that our default font size is 12, which * matches the default in librsvg. */ double font_size = 12.0; switch (length.unit) { case RSVG_UNIT_PX: /* Already a pixel value. */ break; case RSVG_UNIT_EM: value *= font_size; break; case RSVG_UNIT_EX: value *= font_size / 2.0; break; case RSVG_UNIT_IN: value *= dpi; break; case RSVG_UNIT_CM: /* 2.54 cm in an inch. */ value = dpi * value / 2.54; break; case RSVG_UNIT_MM: /* 25.4 mm in an inch. */ value = dpi * value / 25.4; break; case RSVG_UNIT_PT: /* 72 points in an inch. */ value = dpi * value / 72; break; case RSVG_UNIT_PC: /* 6 picas in an inch. */ value = dpi * value / 6; break; default: /* Probably RSVG_UNIT_PERCENT. We can't know what the * pixel value is without more information. */ value = 0; } return value; } #endif static int vips_foreign_load_svg_get_natural_size(VipsForeignLoadSvg *svg, double *out_width, double *out_height) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(svg); double width; double height; #if LIBRSVG_CHECK_VERSION(2, 52, 0) if (!rsvg_handle_get_intrinsic_size_in_pixels(svg->page, &width, &height)) { RsvgRectangle viewbox; /* Try the intrinsic dimensions first. */ gboolean has_width, has_height; RsvgLength iwidth, iheight; gboolean has_viewbox; rsvg_handle_get_intrinsic_dimensions(svg->page, &has_width, &iwidth, &has_height, &iheight, &has_viewbox, &viewbox); #if LIBRSVG_CHECK_VERSION(2, 54, 0) /* After librsvg 2.54.0, the `has_width` and `has_height` * arguments always returns `TRUE`, since with SVG2 all * documents *have* a default width and height of `100%`. */ width = svg_css_length_to_pixels(iwidth, svg->dpi); height = svg_css_length_to_pixels(iheight, svg->dpi); has_width = width > 0.0; has_height = height > 0.0; if (has_width && has_height) { /* Success! Taking the viewbox into account is not * needed. */ } else if (has_width && has_viewbox) { height = width * viewbox.height / viewbox.width; } else if (has_height && has_viewbox) { width = height * viewbox.width / viewbox.height; } else if (has_viewbox) { width = viewbox.width; height = viewbox.height; } #else /*!LIBRSVG_CHECK_VERSION(2, 54, 0)*/ if (has_width && has_height) { /* We can use these values directly. */ width = svg_css_length_to_pixels(iwidth, svg->dpi); height = svg_css_length_to_pixels(iheight, svg->dpi); } else if (has_width && has_viewbox) { width = svg_css_length_to_pixels(iwidth, svg->dpi); height = width * viewbox.height / viewbox.width; } else if (has_height && has_viewbox) { height = svg_css_length_to_pixels(iheight, svg->dpi); width = height * viewbox.width / viewbox.height; } else if (has_viewbox) { width = viewbox.width; height = viewbox.height; } #endif /*!LIBRSVG_CHECK_VERSION(2, 54, 0)*/ if (width <= 0.0 || height <= 0.0) { /* We haven't found a usable set of sizes, so try * working out the visible area. */ rsvg_handle_get_geometry_for_element(svg->page, NULL, &viewbox, NULL, NULL); width = viewbox.x + viewbox.width; height = viewbox.y + viewbox.height; } } #else /*!LIBRSVG_CHECK_VERSION(2, 52, 0)*/ { RsvgDimensionData dimensions; rsvg_handle_get_dimensions(svg->page, &dimensions); width = dimensions.width; height = dimensions.height; } #endif /*LIBRSVG_CHECK_VERSION(2, 52, 0)*/ /* width or height below 0.5 can't be rounded to 1. */ if (width < 0.5 || height < 0.5) { vips_error(class->nickname, "%s", _("bad dimensions")); return -1; } *out_width = width; *out_height = height; return 0; } static int vips_foreign_load_svg_get_scaled_size(VipsForeignLoadSvg *svg, int *out_width, int *out_height) { double width; double height; /* Get dimensions with the default dpi. */ rsvg_handle_set_dpi(svg->page, 72.0); if (vips_foreign_load_svg_get_natural_size(svg, &width, &height)) return -1; /* We scale up with cairo --- scaling with rsvg_handle_set_dpi() will * fail for SVGs with absolute sizes. */ svg->cairo_scale = svg->scale * svg->dpi / 72.0; width *= svg->cairo_scale; height *= svg->cairo_scale; *out_width = VIPS_ROUND_UINT(width); *out_height = VIPS_ROUND_UINT(height); return 0; } static int vips_foreign_load_svg_parse(VipsForeignLoadSvg *svg, VipsImage *out) { int width; int height; double res; if (vips_foreign_load_svg_get_scaled_size(svg, &width, &height)) return -1; /* We need pixels/mm for vips. */ res = svg->dpi / 25.4; vips_image_init_fields(out, width, height, 4, VIPS_FORMAT_UCHAR, VIPS_CODING_NONE, VIPS_INTERPRETATION_sRGB, res, res); /* We use a tilecache, so it's smalltile. */ if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_SMALLTILE, NULL)) return -1; return 0; } static int vips_foreign_load_svg_header(VipsForeignLoad *load) { VipsForeignLoadSvg *svg = (VipsForeignLoadSvg *) load; return vips_foreign_load_svg_parse(svg, load->out); } static int vips_foreign_load_svg_generate(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { const VipsForeignLoadSvg *svg = (VipsForeignLoadSvg *) a; const VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(svg); const VipsRect *r = &out_region->valid; cairo_surface_t *surface; cairo_t *cr; int y; #ifdef DEBUG printf("vips_foreign_load_svg_generate: %p \n " "left = %d, top = %d, width = %d, height = %d\n", svg, r->left, r->top, r->width, r->height); #endif /*DEBUG*/ /* rsvg won't always paint the background. */ vips_region_black(out_region); surface = cairo_image_surface_create_for_data( VIPS_REGION_ADDR(out_region, r->left, r->top), CAIRO_FORMAT_ARGB32, r->width, r->height, VIPS_REGION_LSKIP(out_region)); cr = cairo_create(surface); cairo_surface_destroy(surface); /* rsvg is single-threaded, but we don't need to lock since we're * running inside a non-threaded tilecache. */ #if LIBRSVG_CHECK_VERSION(2, 46, 0) { RsvgRectangle viewport; GError *error = NULL; /* No need to scale -- we always set the viewport to the * whole image, and set the region to draw on the surface. */ cairo_translate(cr, -r->left, -r->top); viewport.x = 0; viewport.y = 0; viewport.width = out_region->im->Xsize; viewport.height = out_region->im->Ysize; if (!rsvg_handle_render_document(svg->page, cr, &viewport, &error)) { cairo_destroy(cr); vips_operation_invalidate(VIPS_OPERATION(svg)); vips_error(class->nickname, "%s", _("SVG rendering failed")); vips_g_error(&error); return -1; } cairo_destroy(cr); } #else /*!LIBRSVG_CHECK_VERSION(2, 46, 0)*/ cairo_scale(cr, svg->cairo_scale, svg->cairo_scale); cairo_translate(cr, -r->left / svg->cairo_scale, -r->top / svg->cairo_scale); if (!rsvg_handle_render_cairo(svg->page, cr)) { cairo_destroy(cr); vips_operation_invalidate(VIPS_OPERATION(svg)); vips_error(class->nickname, "%s", _("SVG rendering failed")); return -1; } cairo_destroy(cr); #endif /*LIBRSVG_CHECK_VERSION(2, 46, 0)*/ /* Cairo makes pre-multipled BRGA -- we must byteswap and unpremultiply. */ for (y = 0; y < r->height; y++) vips__premultiplied_bgra2rgba( (guint32 *) VIPS_REGION_ADDR(out_region, r->left, r->top + y), r->width); return 0; } static int vips_foreign_load_svg_load(VipsForeignLoad *load) { VipsForeignLoadSvg *svg = (VipsForeignLoadSvg *) load; VipsImage **t = (VipsImage **) vips_object_local_array((VipsObject *) load, 3); /* Enough tiles for two complete rows. */ t[0] = vips_image_new(); if (vips_foreign_load_svg_parse(svg, t[0]) || vips_image_generate(t[0], NULL, vips_foreign_load_svg_generate, NULL, svg, NULL) || vips_tilecache(t[0], &t[1], "tile_width", TILE_SIZE, "tile_height", TILE_SIZE, "max_tiles", 2 * (1 + t[0]->Xsize / TILE_SIZE), NULL) || vips_image_write(t[1], load->real)) return -1; return 0; } static void vips_foreign_load_svg_class_init(VipsForeignLoadSvgClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->dispose = vips_foreign_load_svg_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "svgload_base"; object_class->description = _("load SVG with rsvg"); /* librsvg has not been fuzzed, so should not be used with * untrusted input unless you are very careful. */ operation_class->flags |= VIPS_OPERATION_UNTRUSTED; /* is_a() is not that quick ... lower the priority. */ foreign_class->priority = -5; load_class->get_flags_filename = vips_foreign_load_svg_get_flags_filename; load_class->get_flags = vips_foreign_load_svg_get_flags; load_class->load = vips_foreign_load_svg_load; VIPS_ARG_DOUBLE(class, "dpi", 21, _("DPI"), _("Render at this DPI"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadSvg, dpi), 0.001, 100000.0, 72.0); VIPS_ARG_DOUBLE(class, "scale", 22, _("Scale"), _("Scale output by this factor"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadSvg, scale), 0.001, 100000.0, 1.0); VIPS_ARG_BOOL(class, "unlimited", 23, _("Unlimited"), _("Allow SVG of any size"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadSvg, unlimited), FALSE); } static void vips_foreign_load_svg_init(VipsForeignLoadSvg *svg) { svg->dpi = 72.0; svg->scale = 1.0; svg->cairo_scale = 1.0; } typedef struct _VipsForeignLoadSvgSource { VipsForeignLoadSvg parent_object; /* Load from a source. */ VipsSource *source; } VipsForeignLoadSvgSource; typedef VipsForeignLoadClass VipsForeignLoadSvgSourceClass; G_DEFINE_TYPE(VipsForeignLoadSvgSource, vips_foreign_load_svg_source, vips_foreign_load_svg_get_type()); gboolean vips_foreign_load_svg_source_is_a_source(VipsSource *source) { unsigned char *data; gint64 bytes_read; if ((bytes_read = vips_source_sniff_at_most(source, &data, SVG_HEADER_SIZE)) <= 0) return FALSE; return vips_foreign_load_svg_is_a(data, bytes_read); } static int vips_foreign_load_svg_source_header(VipsForeignLoad *load) { VipsForeignLoadSvg *svg = (VipsForeignLoadSvg *) load; VipsForeignLoadSvgSource *source = (VipsForeignLoadSvgSource *) load; RsvgHandleFlags flags = svg->unlimited ? RSVG_HANDLE_FLAG_UNLIMITED : 0; GError *error = NULL; GInputStream *gstream; if (vips_source_rewind(source->source)) return -1; gstream = vips_g_input_stream_new_from_source(source->source); if (!(svg->page = rsvg_handle_new_from_stream_sync( gstream, NULL, flags, NULL, &error))) { g_object_unref(gstream); vips_g_error(&error); return -1; } g_object_unref(gstream); return vips_foreign_load_svg_header(load); } static int vips_foreign_load_svg_source_load(VipsForeignLoad *load) { VipsForeignLoadSvgSource *source = (VipsForeignLoadSvgSource *) load; if (vips_source_rewind(source->source) || vips_foreign_load_svg_load(load) || vips_source_decode(source->source)) return -1; return 0; } static void vips_foreign_load_svg_source_class_init(VipsForeignLoadSvgSourceClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "svgload_source"; object_class->description = _("load svg from source"); operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_svg_source_is_a_source; load_class->header = vips_foreign_load_svg_source_header; load_class->load = vips_foreign_load_svg_source_load; VIPS_ARG_OBJECT(class, "source", 1, _("Source"), _("Source to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadSvgSource, source), VIPS_TYPE_SOURCE); } static void vips_foreign_load_svg_source_init(VipsForeignLoadSvgSource *source) { } typedef struct _VipsForeignLoadSvgFile { VipsForeignLoadSvg parent_object; /* Filename for load. */ char *filename; } VipsForeignLoadSvgFile; typedef VipsForeignLoadSvgClass VipsForeignLoadSvgFileClass; G_DEFINE_TYPE(VipsForeignLoadSvgFile, vips_foreign_load_svg_file, vips_foreign_load_svg_get_type()); static gboolean vips_foreign_load_svg_file_is_a(const char *filename) { unsigned char buf[SVG_HEADER_SIZE]; guint64 bytes; return (bytes = vips__get_bytes(filename, buf, SVG_HEADER_SIZE)) > 0 && vips_foreign_load_svg_is_a(buf, bytes); } static int vips_foreign_load_svg_file_header(VipsForeignLoad *load) { VipsForeignLoadSvg *svg = (VipsForeignLoadSvg *) load; VipsForeignLoadSvgFile *file = (VipsForeignLoadSvgFile *) load; RsvgHandleFlags flags = svg->unlimited ? RSVG_HANDLE_FLAG_UNLIMITED : 0; GError *error = NULL; GFile *gfile; gfile = g_file_new_for_path(file->filename); if (!(svg->page = rsvg_handle_new_from_gfile_sync( gfile, flags, NULL, &error))) { g_object_unref(gfile); vips_g_error(&error); return -1; } g_object_unref(gfile); VIPS_SETSTR(load->out->filename, file->filename); return vips_foreign_load_svg_header(load); } static const char *vips_foreign_svg_suffs[] = { ".svg", /* librsvg supports svgz directly, no need to check for zlib here. */ #if LIBRSVG_CHECK_FEATURE(SVGZ) ".svgz", ".svg.gz", #endif NULL }; static void vips_foreign_load_svg_file_class_init( VipsForeignLoadSvgFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "svgload"; foreign_class->suffs = vips_foreign_svg_suffs; load_class->is_a = vips_foreign_load_svg_file_is_a; load_class->header = vips_foreign_load_svg_file_header; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadSvgFile, filename), NULL); } static void vips_foreign_load_svg_file_init(VipsForeignLoadSvgFile *file) { } typedef struct _VipsForeignLoadSvgBuffer { VipsForeignLoadSvg parent_object; /* Load from a buffer. */ VipsArea *buf; } VipsForeignLoadSvgBuffer; typedef VipsForeignLoadSvgClass VipsForeignLoadSvgBufferClass; G_DEFINE_TYPE(VipsForeignLoadSvgBuffer, vips_foreign_load_svg_buffer, vips_foreign_load_svg_get_type()); static int vips_foreign_load_svg_buffer_header(VipsForeignLoad *load) { VipsForeignLoadSvg *svg = (VipsForeignLoadSvg *) load; VipsForeignLoadSvgBuffer *buffer = (VipsForeignLoadSvgBuffer *) load; RsvgHandleFlags flags = svg->unlimited ? RSVG_HANDLE_FLAG_UNLIMITED : 0; GError *error = NULL; GInputStream *gstream; gstream = g_memory_input_stream_new_from_data( buffer->buf->data, buffer->buf->length, NULL); if (!(svg->page = rsvg_handle_new_from_stream_sync( gstream, NULL, flags, NULL, &error))) { g_object_unref(gstream); vips_g_error(&error); return -1; } g_object_unref(gstream); return vips_foreign_load_svg_header(load); } static void vips_foreign_load_svg_buffer_class_init( VipsForeignLoadSvgBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "svgload_buffer"; load_class->is_a_buffer = vips_foreign_load_svg_is_a; load_class->header = vips_foreign_load_svg_buffer_header; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadSvgBuffer, buf), VIPS_TYPE_BLOB); } static void vips_foreign_load_svg_buffer_init(VipsForeignLoadSvgBuffer *buffer) { } #endif /*HAVE_RSVG*/ /** * vips_svgload: * @filename: file to load * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @dpi: %gdouble, render at this DPI * * @scale: %gdouble, scale render by this factor * * @unlimited: %gboolean, allow SVGs of any size * * Render a SVG file into a VIPS image. Rendering uses the librsvg library * and should be fast. * * Use @dpi to set the rendering resolution. The default is 72. You can also * scale the rendering by @scale. * * This function only reads the image header and does not render any pixel * data. Rendering occurs when pixels are accessed. * * SVGs larger than 10MB are normally blocked for security. Set @unlimited to * allow SVGs of any size. * * See also: vips_image_new_from_file(). * * Returns: 0 on success, -1 on error. */ int vips_svgload(const char *filename, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("svgload", ap, filename, out); va_end(ap); return result; } /** * vips_svgload_buffer: * @buf: (array length=len) (element-type guint8): memory area to load * @len: (type gsize): size of memory area * @out: (out): image to write * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @dpi: %gdouble, render at this DPI * * @scale: %gdouble, scale render by this factor * * @unlimited: %gboolean, allow SVGs of any size * * Read a SVG-formatted memory block into a VIPS image. Exactly as * vips_svgload(), but read from a memory buffer. * * You must not free the buffer while @out is active. The * #VipsObject::postclose signal on @out is a good place to free. * * See also: vips_svgload(). * * Returns: 0 on success, -1 on error. */ int vips_svgload_buffer(void *buf, size_t len, VipsImage **out, ...) { va_list ap; VipsBlob *blob; int result; /* We don't take a copy of the data or free it. */ blob = vips_blob_new(NULL, buf, len); va_start(ap, out); result = vips_call_split("svgload_buffer", ap, blob, out); va_end(ap); vips_area_unref(VIPS_AREA(blob)); return result; } /** * vips_svgload_string: * @str: string to load * @out: (out): image to write * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @dpi: %gdouble, render at this DPI * * @scale: %gdouble, scale render by this factor * * @unlimited: %gboolean, allow SVGs of any size * * Exactly as vips_svgload(), but read from a string. This function takes a * copy of the string. * * See also: vips_svgload(). * * Returns: 0 on success, -1 on error. */ int vips_svgload_string(const char *str, VipsImage **out, ...) { va_list ap; VipsBlob *blob; int result; /* Copy the string. */ blob = vips_blob_copy((const void *) str, strlen(str)); va_start(ap, out); result = vips_call_split("svgload_buffer", ap, blob, out); va_end(ap); vips_area_unref(VIPS_AREA(blob)); return result; } /** * vips_svgload_source: * @source: source to load from * @out: (out): image to write * @...: %NULL-terminated list of optional named arguments * * Exactly as vips_svgload(), but read from a source. * * See also: vips_svgload(). * * Returns: 0 on success, -1 on error. */ int vips_svgload_source(VipsSource *source, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("svgload_source", ap, source, out); va_end(ap); return result; } ������������������������������������������������������������������������������������������������������������������������������libvips-8.15.1/libvips/foreign/tiff.c���������������������������������������������������������������0000664�0000000�0000000�00000013556�14540073735�0017475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Some shared TIFF utilities. * * 14/10/16 * - from vips2tiff.c * * 26/8/17 * - add openout_read, to help tiffsave_buffer for pyramids */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #ifdef HAVE_TIFF #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #include #include #include #include #include "tiff.h" /* Handle TIFF errors here. Shared with vips2tiff.c. These can be called from * more than one thread. */ static void vips__thandler_error(const char *module, const char *fmt, va_list ap) { vips_verror(module, fmt, ap); } /* It'd be nice to be able to support the @fail option for the tiff loader, but * there's no easy way to do this, since libtiff has a global warning handler. */ static void vips__thandler_warning(const char *module, const char *fmt, va_list ap) { g_logv(G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, fmt, ap); } /* Called during library init. * * libtiff error and warning handlers may be called from other threads * running in other libs. Other libs may install error handlers and capture * messages caused by us. */ void vips__tiff_init(void) { TIFFSetErrorHandler(vips__thandler_error); TIFFSetWarningHandler(vips__thandler_warning); } /* TIFF input from a vips source. */ static tsize_t openin_source_read(thandle_t st, tdata_t data, tsize_t size) { VipsSource *source = VIPS_SOURCE(st); return vips_source_read(source, data, size); } static tsize_t openin_source_write(thandle_t st, tdata_t buffer, tsize_t size) { g_assert_not_reached(); return 0; } static toff_t openin_source_seek(thandle_t st, toff_t offset, int whence) { VipsSource *source = VIPS_SOURCE(st); return (toff_t) vips_source_seek(source, offset, whence); } static int openin_source_close(thandle_t st) { VipsSource *source = VIPS_SOURCE(st); VIPS_UNREF(source); return 0; } static toff_t openin_source_length(thandle_t st) { VipsSource *source = VIPS_SOURCE(st); /* libtiff will use this to get file size if tags like StripByteCounts * are missing. * * toff_t is usually uint64, with -1 cast to uint64 to indicate error. */ return (toff_t) vips_source_length(source); } static int openin_source_map(thandle_t st, tdata_t *start, toff_t *len) { g_assert_not_reached(); return 0; } static void openin_source_unmap(thandle_t st, tdata_t start, toff_t len) { g_assert_not_reached(); return; } TIFF * vips__tiff_openin_source(VipsSource *source) { TIFF *tiff; #ifdef DEBUG printf("vips__tiff_openin_source:\n"); #endif /*DEBUG*/ if (vips_source_rewind(source)) return NULL; /* Disable memory mapped input -- it chews up VM and the performance * gain is very small. * * C enables strip chopping: very large uncompressed strips are * chopped into c. 8kb chunks. This can reduce peak memory use for * this type of file. */ if (!(tiff = TIFFClientOpen("source input", "rmC", (thandle_t) source, openin_source_read, openin_source_write, openin_source_seek, openin_source_close, openin_source_length, openin_source_map, openin_source_unmap))) { vips_error("vips__tiff_openin_source", "%s", _("unable to open source for input")); return NULL; } /* Unreffed on close(), see above. */ g_object_ref(source); return tiff; } /* TIFF output to a target. */ /* libtiff needs this (!!?!?!) for writing multipage images. */ static tsize_t openout_target_read(thandle_t st, tdata_t data, tsize_t size) { VipsTarget *target = (VipsTarget *) st; return vips_target_read(target, data, size); } static tsize_t openout_target_write(thandle_t st, tdata_t data, tsize_t size) { VipsTarget *target = (VipsTarget *) st; if (vips_target_write(target, data, size)) return (tsize_t) -1; return size; } static toff_t openout_target_seek(thandle_t st, toff_t offset, int whence) { VipsTarget *target = (VipsTarget *) st; return vips_target_seek(target, offset, whence); } static int openout_target_close(thandle_t st) { VipsTarget *target = (VipsTarget *) st; if (vips_target_end(target)) return -1; return 0; } static toff_t openout_target_length(thandle_t st) { g_assert_not_reached(); return (toff_t) -1; } static int openout_target_map(thandle_t st, tdata_t *start, toff_t *len) { g_assert_not_reached(); return -1; } static void openout_target_unmap(thandle_t st, tdata_t start, toff_t len) { g_assert_not_reached(); return; } TIFF * vips__tiff_openout_target(VipsTarget *target, gboolean bigtiff) { const char *mode = bigtiff ? "w8" : "w"; TIFF *tiff; #ifdef DEBUG printf("vips__tiff_openout_buffer:\n"); #endif /*DEBUG*/ if (!(tiff = TIFFClientOpen("target output", mode, (thandle_t) target, openout_target_read, openout_target_write, openout_target_seek, openout_target_close, openout_target_length, openout_target_map, openout_target_unmap))) { vips_error("vips__tiff_openout_target", "%s", _("unable to open target for output")); return NULL; } return tiff; } #endif /*HAVE_TIFF*/ ��������������������������������������������������������������������������������������������������������������������������������������������������libvips-8.15.1/libvips/foreign/tiff.h���������������������������������������������������������������0000664�0000000�0000000�00000002364�14540073735�0017475�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* common defs for tiff read/write */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_TIFF_H #define VIPS_TIFF_H #include #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ TIFF *vips__tiff_openin_source(VipsSource *source); TIFF *vips__tiff_openout(const char *path, gboolean bigtiff); TIFF *vips__tiff_openout_target(VipsTarget *target, gboolean bigtiff); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_TIFF_H*/ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libvips-8.15.1/libvips/foreign/tiff2vips.c����������������������������������������������������������0000664�0000000�0000000�00000234207�14540073735�0020457�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* TIFF parts: Copyright (c) 1988, 1990 by Sam Leffler. * All rights reserved. * * This file is provided for unrestricted use provided that this * legend is included on all tape media and as a part of the * software program in whole or part. Users may copy, modify or * distribute this file at will. * ----------------------------- * Modifications for VIPS: Kirk Martinez 1994 * 22/11/94 JC * - more general * - memory leaks fixed * 20/3/95 JC * - TIFF error handler added * - read errors detected correctly * * Modified to handle LAB in tiff format. * It convert LAB-tiff format to VIPS_INTERPRETATION_LABQ in vips format. * Copyright July-1995 Ahmed Abbood. * * * 19/9/95 JC * - now calls TIFFClose ... stupid * 25/1/96 JC * - typo on MINISBLACK ... * 7/4/97 JC * - completely redone for TIFF 6 * - now full baseline TIFF 6 reader, and does CIELAB as well * 11/4/97 JC * - added partial read for tiled images * 23/4/97 JC * - extra subsample parameter * - im_istiffpyramid() added * 5/12/97 JC * - if loading YCbCr, convert to VIPS_CODING_LABQ * 1/5/98 JC * - now reads 16-bit greyscale and RGB * 26/10/98 JC * - now used "rb" mode on systems that need binary open * 12/11/98 JC * - no sub-sampling if sub == 1 * 26/2/99 JC * - ooops, else missing for subsample stuff above * 2/10/99 JC * - tiled 16-bit greyscale read was broken * - added mutex for TIFFReadTile() calls * 11/5/00 JC * - removed TIFFmalloc/TIFFfree usage * 23/4/01 JC * - HAVE_TIFF turns on TIFF goodness * 24/5/01 JC * - im_tiff2vips_header() added * 11/7/01 JC * - subsample now in input filename * - ... and it's a page number (from 0) instead * 21/8/02 JC * - now reads CMYK * - hmm, dpi -> ppm conversion was wrong! * 10/9/02 JC * - oops, handle TIFF errors better * 2/12/02 JC * - reads 8-bit RGBA * 12/12/02 JC * - reads 16-bit LAB * 13/2/03 JC * - pixels/cm res read was wrong * 17/11/03 Andrey Kiselev * - read 32-bit float greyscale and rgb * 5/4/04 * - better handling of edge tiles (thanks Ruven) * 16/4/04 * - cleanup * - added broken tile read mode * 18/5/04 Andrey Kiselev * - better no resolution diagnostic * 26/5/04 * - reads 16 bit RGBA * 28/7/04 * - arrg, 16bit RGB was broken, thanks haida * 26/11/04 * - add a TIFF warning handler, stops occasional libMagick exceptions * 9/3/05 * - load 32-bit float LAB * 8/4/05 * - onebit read no longer reads one byte too many on multiple of 8 wide * images * 22/6/05 * - 16 bit LAB read was broken * 9/9/05 * - read any ICCPROFILE tag * 8/5/06 * - set RGB16 and GREY16 Type * 21/5/06 * - use external im_tile_cache() operation for great code shrinkage * - less RAM usage too, esp. with >1 CPU * - should be slightly faster * - removed 'broken' read option * 18/7/07 Andrey Kiselev * - remove "b" option on TIFFOpen() * 9/4/08 * - set VIPS_META_RESOLUTION_UNIT * 17/4/08 * - allow CMYKA (thanks Doron) * 17/7/08 * - convert YCbCr to RGB on read (thanks Ole) * 15/8/08 * - reorganise for image format system * 20/12/08 * - dont read with mmap: no performance advantage with libtiff, chews up * VM wastefully * 13/1/09 * - read strip-wise, not scanline-wise ... works with more compression / * subsampling schemes (esp. subsampled YCbCr), and it's a bit quicker * 4/2/10 * - gtkdoc * 12/12/10 * - oops, we can just memcpy() now heh * - avoid unpacking via buffers if we can: either read a tile directly * into the output region, or writeline directly from the tiff buffer * 4/4/11 * - argh int/uint mixup for rows_per_strip, thanks Bubba * 21/4/11 * - palette read can do 1,2,4,8 bits per sample * - palette read can do mono images * 5/12/11 * - make into a simple function call ready to be wrapped as a new-style * VipsForeign class * 18/2/12 * - switch to sequential read * - remove the lock ... tilecache does this for us * 3/6/12 * - always offer THINSTRIP ... later stages can ask for something more * relaxed if they wish * 7/6/12 * - clip rows_per_strip down to image height to avoid overflows for huge * values (thanks Nicolas) * - better error msg for not PLANARCONFIG_CONTIG images * 16/9/13 * - support alpha for 8, 16 and 32-bit greyscale images, thanks Robert * 17/9/13 * - support separate planes for strip read * - big cleanup * - support for many more formats, eg. 32-bit int etc. * 11/4/14 * - support 16 bits per sample palette images * - palette images can have an alpha * 22/4/14 * - add read from buffer * 30/4/14 * - 1/2/4 bit palette images can have alpha * 27/10/14 Lovell * - better istiff detector spots bigtiff * 3/12/14 * - read any XMP metadata * 19/1/15 * - try to handle 8-bit colormaps * 26/2/15 * - close the read down early for a header read ... this saves an * fd during file read, handy for large numbers of input images * 29/9/15 * - load IPTC metadata * - load photoshop metadata * 21/12/15 * - load TIFFTAG_IMAGEDESCRIPTION * 11/4/16 * - non-int RGB images are tagged as scRGB ... matches photoshop * convention * 26/5/16 * - add autorotate support * 17/11/16 * - add multi-page read * 17/1/17 * - invalidate operation on read error * 27/1/17 * - if rows_per_strip is large, read with scanline API instead * 9/5/17 * - remove missing res warning * 19/5/17 * - page > 0 could break edge tiles or strips * 26/4/18 * - add n-pages metadata item * 21/7/18 * - check for non-byte-multiple bits_per_sample [HongxuChen] * 16/8/18 * - shut down the input file as soon as we can [kleisauke] * 28/3/19 omira-sch * - better buffer sizing * - ban chroma-subsampled, non-jpg compressed images * 7/6/19 * - istiff reads the first directory rather than just testing the magic * number, so it ignores more TIFF-like, but not TIFF images * 17/10/19 * - switch to source input * 18/11/19 * - support ASSOCALPHA in any alpha band * 27/1/20 * - read logluv images as XYZ * 11/4/20 petoor * - better handling of aligned reads in multipage tiffs * 28/5/20 * - add subifd * 6/6/20 MathemanFlo * - support 2 and 4 bit greyscale load * 27/3/21 * - add jp2k decompression * 24/7/21 * - add fail_on * 30/9/21 * - fix tiled + packed formats * 31/7/22 * - move jp2k decompress outside the lock * - move jpeg decode outside the lock * - fix demand hinting * 3/2/23 MathemanFlo * - add bits per sample metadata */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #ifdef HAVE_TIFF #include #include #include #include #include #include #include #include "pforeign.h" #include "tiff.h" /* We do jpeg decompress ourselves, if we can. */ #ifdef HAVE_JPEG #include "jpeg.h" #endif /*HAVE_JPEG*/ /* Aperio TIFFs (svs) use these compression types for jp2k-compressed tiles. */ #define JP2K_YCC 33003 #define JP2K_RGB 33005 /* Bioformats uses this tag for jp2k compressed tiles. */ #define JP2K_LOSSY 33004 /* Compression types we handle ourselves. */ static int rtiff_we_decompress[] = { #ifdef HAVE_JPEG COMPRESSION_JPEG, #endif /*HAVE_JPEG*/ JP2K_YCC, JP2K_RGB, JP2K_LOSSY }; /* What we read from the tiff dir to set our read strategy. For multipage * read, we need to read and compare lots of these, so it needs to be broken * out as a separate thing. */ typedef struct _RtiffHeader { guint32 width; guint32 height; int samples_per_pixel; int bits_per_sample; int photometric_interpretation; int inkset; int sample_format; gboolean separate; int orientation; /* If there's a premultiplied alpha, the band we need to * unpremultiply with. -1 for no unpremultiplication. */ int alpha_band; guint16 compression; /* Is this directory tiled. */ gboolean tiled; /* Fields for tiled images, as returned by libtiff. */ guint32 tile_width; guint32 tile_height; tsize_t tile_size; tsize_t tile_row_size; /* Fields for strip images, as returned by libtiff. */ guint32 rows_per_strip; tsize_t strip_size; tsize_t scanline_size; int number_of_strips; /* If read_scanlinewise is TRUE, the strips are too large to read in a * single lump and we will use the scanline API. */ gboolean read_scanlinewise; /* Strip read geometry. Number of lines we read at once (whole strip * or 1) and size of the buffer we read to (a scanline, or a strip in * size). */ guint32 read_height; tsize_t read_size; /* Scale factor to get absolute cd/m2 from XYZ. */ double stonits; /* Number of subifds, 0 for none. */ int subifd_count; /* Optional IMAGEDESCRIPTION. */ char *image_description; /* TRUE if we decompress ourselves rather than relying on libtiff. */ gboolean we_decompress; } RtiffHeader; /* Scanline-type process function. */ struct _Rtiff; typedef void (*scanline_process_fn)(struct _Rtiff *, VipsPel *q, VipsPel *p, int n, void *client); /* Stuff we track during a read. */ typedef struct _Rtiff { /* Parameters. */ VipsSource *source; VipsImage *out; int page; int n; gboolean autorotate; int subifd; VipsFailOn fail_on; /* We decompress some compression types in parallel, so we need to * lock tile get. */ GRecMutex lock; /* The TIFF we read. */ TIFF *tiff; /* Number of pages (directories) in image. */ int n_pages; /* The current page we have set. */ int current_page; /* Process for this image type. */ scanline_process_fn sfn; void *client; /* Set this is the processfn is just doing a memcpy. */ gboolean memcpy; /* Geometry as read from the TIFF header. This is read for the first * page, and equal for all other pages. */ RtiffHeader header; /* Hold a single strip or tile, possibly just an image plane. */ tdata_t plane_buf; /* Hold a plane-assembled strip or tile ... a set of samples_per_pixel * strips or tiles interleaved. */ tdata_t contig_buf; /* The Y we are reading at. Used to verify strip read is sequential. */ int y_pos; } Rtiff; /* Convert IEEE 754-2008 16-bit float to 32-bit float */ static inline float half_2_float(gushort h) { const float sign = (h >> 15) * -2 + 1; const int exp = ((h & 0x7C00) >> 10) - 15; const float prec = (h & 0x03FF); switch (exp) { case 16: return INFINITY * sign; case -15: return sign / (float) (1 << 14) * (prec / 1024.0); default: return exp > 0 ? sign * (float) (1 << exp) * (1.0 + prec / 1024.0) : sign / (float) (1 << -exp) * (1.0 + prec / 1024.0); } } /* Test for field exists. */ static int tfexists(TIFF *tif, ttag_t tag) { guint32 a, b; if (TIFFGetField(tif, tag, &a, &b)) return 1; else return 0; } /* Get a guint32 field. */ static int tfget32(TIFF *tif, ttag_t tag, guint32 *out) { guint32 fld; if (!TIFFGetFieldDefaulted(tif, tag, &fld)) { vips_error("tiff2vips", _("required field %d missing"), tag); return 0; } *out = fld; return 1; } /* Get a guint16 field. */ static int tfget16(TIFF *tif, ttag_t tag, int *out) { guint16 fld; if (!TIFFGetFieldDefaulted(tif, tag, &fld)) { vips_error("tiff2vips", _("required field %d missing"), tag); return 0; } *out = fld; return 1; } static int get_resolution(TIFF *tiff, VipsImage *out) { float x, y; int ru; if (TIFFGetFieldDefaulted(tiff, TIFFTAG_XRESOLUTION, &x) && TIFFGetFieldDefaulted(tiff, TIFFTAG_YRESOLUTION, &y) && tfget16(tiff, TIFFTAG_RESOLUTIONUNIT, &ru)) { switch (ru) { case RESUNIT_NONE: break; case RESUNIT_INCH: /* In pixels-per-inch ... convert to mm. */ x /= 10.0 * 2.54; y /= 10.0 * 2.54; vips_image_set_string(out, VIPS_META_RESOLUTION_UNIT, "in"); break; case RESUNIT_CENTIMETER: /* In pixels-per-centimetre ... convert to mm. */ x /= 10.0; y /= 10.0; vips_image_set_string(out, VIPS_META_RESOLUTION_UNIT, "cm"); break; default: vips_error("tiff2vips", "%s", _("unknown resolution unit")); return -1; } } else { /* We used to warn about missing res data, but it happens so * often and is so harmless, why bother. */ x = 1.0; y = 1.0; } out->Xres = x; out->Yres = y; return 0; } static int get_sample_format(TIFF *tiff) { int sample_format; guint16 v; sample_format = SAMPLEFORMAT_INT; if (TIFFGetFieldDefaulted(tiff, TIFFTAG_SAMPLEFORMAT, &v)) { /* Some images have this set to void, bizarre. */ if (v == SAMPLEFORMAT_VOID) v = SAMPLEFORMAT_UINT; sample_format = v; } return sample_format; } static int get_orientation(TIFF *tiff) { int orientation; guint16 v; orientation = ORIENTATION_TOPLEFT; if (TIFFGetFieldDefaulted(tiff, TIFFTAG_ORIENTATION, &v)) /* Can have mad values. */ orientation = VIPS_CLIP(1, v, 8); return orientation; } /* Can be called many times. */ static void rtiff_free(Rtiff *rtiff) { VIPS_FREEF(TIFFClose, rtiff->tiff); g_rec_mutex_clear(&rtiff->lock); VIPS_UNREF(rtiff->source); } static void rtiff_close_cb(VipsImage *image, Rtiff *rtiff) { rtiff_free(rtiff); } static void rtiff_minimise_cb(VipsImage *image, Rtiff *rtiff) { /* We must not minimised tiled images. These can be read from many * threads, and this minimise handler is not inside the lock. */ if (!rtiff->header.tiled && rtiff->source) vips_source_minimise(rtiff->source); } static Rtiff * rtiff_new(VipsSource *source, VipsImage *out, int page, int n, gboolean autorotate, int subifd, VipsFailOn fail_on) { Rtiff *rtiff; if (!(rtiff = VIPS_NEW(out, Rtiff))) return NULL; g_object_ref(source); rtiff->source = source; rtiff->out = out; rtiff->page = page; rtiff->n = n; rtiff->autorotate = autorotate; rtiff->subifd = subifd; rtiff->fail_on = fail_on; g_rec_mutex_init(&rtiff->lock); rtiff->tiff = NULL; rtiff->n_pages = 0; rtiff->current_page = -1; rtiff->sfn = NULL; rtiff->client = NULL; rtiff->memcpy = FALSE; rtiff->plane_buf = NULL; rtiff->contig_buf = NULL; rtiff->y_pos = 0; g_signal_connect(out, "close", G_CALLBACK(rtiff_close_cb), rtiff); g_signal_connect(out, "minimise", G_CALLBACK(rtiff_minimise_cb), rtiff); if (rtiff->page < 0 || rtiff->page > 1000000) { vips_error("tiff2vips", _("bad page number %d"), rtiff->page); return NULL; } /* We allow n == -1, meaning all pages. It gets swapped for a real n * value when we open the TIFF. */ if (rtiff->n != -1 && (rtiff->n < 1 || rtiff->n > 1000000)) { vips_error("tiff2vips", _("bad number of pages %d"), rtiff->n); return NULL; } if (!(rtiff->tiff = vips__tiff_openin_source(source))) return NULL; return rtiff; } static int rtiff_strip_read(Rtiff *rtiff, int strip, tdata_t buf) { tsize_t length; #ifdef DEBUG_VERBOSE printf("rtiff_strip_read: reading strip %d\n", strip); #endif /*DEBUG_VERBOSE*/ if (rtiff->header.read_scanlinewise) length = TIFFReadScanline(rtiff->tiff, buf, strip, (tsample_t) 0); else length = TIFFReadEncodedStrip(rtiff->tiff, strip, buf, (tsize_t) -1); if (length == -1) { vips_foreign_load_invalidate(rtiff->out); vips_error("tiff2vips", "%s", _("read error")); return -1; } return 0; } /* We need to hint to libtiff what format we'd like pixels in. */ static void rtiff_set_decode_format(Rtiff *rtiff) { /* Ask for YCbCr->RGB for jpg data. */ if (rtiff->header.compression == COMPRESSION_JPEG) TIFFSetField(rtiff->tiff, TIFFTAG_JPEGCOLORMODE, JPEGCOLORMODE_RGB); /* Ask for SGI LOGLUV as 3xfloat. */ if (rtiff->header.photometric_interpretation == PHOTOMETRIC_LOGLUV) TIFFSetField(rtiff->tiff, TIFFTAG_SGILOGDATAFMT, SGILOGDATAFMT_FLOAT); } static int rtiff_set_page(Rtiff *rtiff, int page) { if (rtiff->current_page != page) { #ifdef DEBUG printf("rtiff_set_page: selecting page %d, subifd %d\n", page, rtiff->subifd); #endif /*DEBUG*/ if (!TIFFSetDirectory(rtiff->tiff, page)) { vips_error("tiff2vips", _("TIFF does not contain page %d"), page); return -1; } if (rtiff->subifd >= 0) { guint16 subifd_count; toff_t *subifd_offsets; if (!TIFFGetField(rtiff->tiff, TIFFTAG_SUBIFD, &subifd_count, &subifd_offsets)) { vips_error("tiff2vips", "%s", _("no SUBIFD tag")); return -1; } if (rtiff->subifd >= subifd_count) { vips_error("tiff2vips", _("subifd %d out of range, only 0-%d available"), rtiff->subifd, subifd_count - 1); return -1; } if (!TIFFSetSubDirectory(rtiff->tiff, subifd_offsets[rtiff->subifd])) { vips_error("tiff2vips", "%s", _("subdirectory unreadable")); return -1; } } rtiff->current_page = page; /* These can get unset when we change directories. Make sure * they are set again. */ rtiff_set_decode_format(rtiff); } return 0; } static int rtiff_n_pages(Rtiff *rtiff) { int n; (void) TIFFSetDirectory(rtiff->tiff, 0); for (n = 1; TIFFReadDirectory(rtiff->tiff); n++) ; /* Make sure the nest set_page() will set the directory. */ rtiff->current_page = -1; #ifdef DEBUG printf("rtiff_n_pages: found %d pages\n", n); #endif /*DEBUG*/ return n; } static int rtiff_check_samples(Rtiff *rtiff, int samples_per_pixel) { if (rtiff->header.samples_per_pixel != samples_per_pixel) { vips_error("tiff2vips", _("not %d bands"), samples_per_pixel); return -1; } return 0; } /* Check n and n+1 so we can have an alpha. */ static int rtiff_check_min_samples(Rtiff *rtiff, int samples_per_pixel) { if (rtiff->header.samples_per_pixel < samples_per_pixel) { vips_error("tiff2vips", _("not at least %d samples per pixel"), samples_per_pixel); return -1; } return 0; } /* Only allow samples which are whole bytes in size. */ static int rtiff_non_fractional(Rtiff *rtiff) { if (rtiff->header.bits_per_sample % 8 != 0 || rtiff->header.bits_per_sample == 0) { vips_error("tiff2vips", "%s", _("samples_per_pixel " "not a whole number of bytes")); return -1; } return 0; } static int rtiff_check_interpretation(Rtiff *rtiff, int photometric_interpretation) { if (rtiff->header.photometric_interpretation != photometric_interpretation) { vips_error("tiff2vips", _("not photometric interpretation %d"), photometric_interpretation); return -1; } return 0; } static int rtiff_check_bits(Rtiff *rtiff, int bits_per_sample) { if (rtiff->header.bits_per_sample != bits_per_sample) { vips_error("tiff2vips", _("not %d bits per sample"), bits_per_sample); return -1; } return 0; } static int rtiff_check_bits_palette(Rtiff *rtiff) { if (rtiff->header.bits_per_sample != 16 && rtiff->header.bits_per_sample != 8 && rtiff->header.bits_per_sample != 4 && rtiff->header.bits_per_sample != 2 && rtiff->header.bits_per_sample != 1) { vips_error("tiff2vips", _("%d bits per sample palette image not supported"), rtiff->header.bits_per_sample); return -1; } return 0; } static VipsBandFormat rtiff_guess_format(Rtiff *rtiff) { int bits_per_sample = rtiff->header.bits_per_sample; int sample_format = rtiff->header.sample_format; switch (bits_per_sample) { case 1: case 2: case 4: case 8: if (sample_format == SAMPLEFORMAT_INT) return VIPS_FORMAT_CHAR; if (sample_format == SAMPLEFORMAT_UINT) return VIPS_FORMAT_UCHAR; break; case 16: if (sample_format == SAMPLEFORMAT_INT) return VIPS_FORMAT_SHORT; if (sample_format == SAMPLEFORMAT_UINT) return VIPS_FORMAT_USHORT; if (sample_format == SAMPLEFORMAT_IEEEFP) return VIPS_FORMAT_FLOAT; break; case 32: if (sample_format == SAMPLEFORMAT_INT) return VIPS_FORMAT_INT; if (sample_format == SAMPLEFORMAT_UINT) return VIPS_FORMAT_UINT; if (sample_format == SAMPLEFORMAT_IEEEFP) return VIPS_FORMAT_FLOAT; break; case 64: if (sample_format == SAMPLEFORMAT_IEEEFP) return VIPS_FORMAT_DOUBLE; if (sample_format == SAMPLEFORMAT_COMPLEXIEEEFP) return VIPS_FORMAT_COMPLEX; break; case 128: if (sample_format == SAMPLEFORMAT_COMPLEXIEEEFP) return VIPS_FORMAT_DPCOMPLEX; break; default: break; } vips_error("tiff2vips", "%s", _("unsupported tiff image type\n")); return VIPS_FORMAT_NOTSET; } /* Per-scanline process function for VIPS_CODING_LABQ. */ static void rtiff_labpack_line(Rtiff *rtiff, VipsPel *q, VipsPel *p, int n, void *dummy) { int samples_per_pixel = rtiff->header.samples_per_pixel; int x; for (x = 0; x < n; x++) { q[0] = p[0]; q[1] = p[1]; q[2] = p[2]; q[3] = 0; q += 4; p += samples_per_pixel; } } /* Read an 8-bit LAB image. */ static int rtiff_parse_labpack(Rtiff *rtiff, VipsImage *out) { if (rtiff_check_min_samples(rtiff, 3) || rtiff_check_bits(rtiff, 8) || rtiff_check_interpretation(rtiff, PHOTOMETRIC_CIELAB)) return -1; out->Bands = 4; out->BandFmt = VIPS_FORMAT_UCHAR; out->Coding = VIPS_CODING_LABQ; out->Type = VIPS_INTERPRETATION_LAB; rtiff->sfn = rtiff_labpack_line; return 0; } /* Per-scanline process function for 8-bit VIPS_CODING_LAB to 16-bit LabS with * alpha. */ static void rtiff_lab_with_alpha_line(Rtiff *rtiff, VipsPel *q, VipsPel *p, int n, void *dummy) { int samples_per_pixel = rtiff->header.samples_per_pixel; unsigned char *p1; short *q1; int x; p1 = (unsigned char *) p; q1 = (short *) q; for (x = 0; x < n; x++) { int i; q1[0] = ((unsigned int) p1[0]) * 32767 / 255; q1[1] = ((short) p1[1]) << 8; q1[2] = ((short) p1[2]) << 8; for (i = 3; i < samples_per_pixel; i++) q1[i] = (p1[i] << 8) + p1[i]; q1 += samples_per_pixel; p1 += samples_per_pixel; } } /* Read an 8-bit LAB image with alpha bands into 16-bit LabS. */ static int rtiff_parse_lab_with_alpha(Rtiff *rtiff, VipsImage *out) { if (rtiff_check_min_samples(rtiff, 4) || rtiff_check_bits(rtiff, 8) || rtiff_check_interpretation(rtiff, PHOTOMETRIC_CIELAB)) return -1; out->Bands = rtiff->header.samples_per_pixel; out->BandFmt = VIPS_FORMAT_SHORT; out->Coding = VIPS_CODING_NONE; out->Type = VIPS_INTERPRETATION_LABS; rtiff->sfn = rtiff_lab_with_alpha_line; return 0; } /* Per-scanline process function for LABS. */ static void rtiff_labs_line(Rtiff *rtiff, VipsPel *q, VipsPel *p, int n, void *dummy) { int samples_per_pixel = rtiff->header.samples_per_pixel; unsigned short *p1; short *q1; int x; int i; p1 = (unsigned short *) p; q1 = (short *) q; for (x = 0; x < n; x++) { /* We use signed int16 for L. */ q1[0] = p1[0] >> 1; for (i = 1; i < samples_per_pixel; i++) q1[i] = p1[i]; q1 += samples_per_pixel; p1 += samples_per_pixel; } } /* Read a 16-bit LAB image. */ static int rtiff_parse_labs(Rtiff *rtiff, VipsImage *out) { if (rtiff_check_min_samples(rtiff, 3) || rtiff_check_bits(rtiff, 16) || rtiff_check_interpretation(rtiff, PHOTOMETRIC_CIELAB)) return -1; out->Bands = rtiff->header.samples_per_pixel; out->BandFmt = VIPS_FORMAT_SHORT; out->Coding = VIPS_CODING_NONE; out->Type = VIPS_INTERPRETATION_LABS; rtiff->sfn = rtiff_labs_line; return 0; } /* libtiff delivers logluv as illuminant-free 0-1 XYZ in 3 x float. */ static void rtiff_logluv_line(Rtiff *rtiff, VipsPel *q, VipsPel *p, int n, void *dummy) { int samples_per_pixel = rtiff->header.samples_per_pixel; float *p1; float *q1; int x; int i; p1 = (float *) p; q1 = (float *) q; for (x = 0; x < n; x++) { q1[0] = VIPS_D65_X0 * p1[0]; q1[1] = VIPS_D65_Y0 * p1[1]; q1[2] = VIPS_D65_Z0 * p1[2]; for (i = 3; i < samples_per_pixel; i++) q1[i] = p1[i]; q1 += samples_per_pixel; p1 += samples_per_pixel; } } /* LOGLUV images arrive from libtiff as float xyz. */ static int rtiff_parse_logluv(Rtiff *rtiff, VipsImage *out) { if (rtiff_check_min_samples(rtiff, 3) || rtiff_check_interpretation(rtiff, PHOTOMETRIC_LOGLUV)) return -1; out->Bands = rtiff->header.samples_per_pixel; out->BandFmt = VIPS_FORMAT_FLOAT; out->Coding = VIPS_CODING_NONE; out->Type = VIPS_INTERPRETATION_XYZ; rtiff->sfn = rtiff_logluv_line; return 0; } /* Make a N-bit scanline process function. We pass in the code to expand the * bits down the byte since this does not generalize well. */ #define NBIT_LINE(N, EXPAND) \ static void \ rtiff_##N##bit_line(Rtiff *rtiff, \ VipsPel *q, VipsPel *p, int n, void *flg) \ { \ int photometric = rtiff->header.photometric_interpretation; \ int mask = photometric == PHOTOMETRIC_MINISBLACK ? 0 : 0xff; \ int bps = rtiff->header.bits_per_sample; \ int load = 8 / bps - 1; \ \ int x; \ VipsPel bits; \ \ /* Stop a compiler warning. \ */ \ bits = 0; \ \ for (x = 0; x < n; x++) { \ if ((x & load) == 0) \ /* Flip the bits for miniswhite. \ */ \ bits = *p++ ^ mask; \ \ EXPAND(q[x], bits); \ \ bits <<= bps; \ } \ } /* Expand the top bit down a byte. Use a sign-extending shift. */ #define EXPAND1(Q, BITS) \ G_STMT_START \ { \ (Q) = (((signed char) (BITS & 128)) >> 7); \ } \ G_STMT_END /* Expand the top two bits down a byte. Shift down, then expand up. */ #define EXPAND2(Q, BITS) \ G_STMT_START \ { \ VipsPel twobits = BITS >> 6; \ VipsPel fourbits = twobits | (twobits << 2); \ Q = fourbits | (fourbits << 4); \ } \ G_STMT_END /* Expand the top four bits down a byte. */ #define EXPAND4(Q, BITS) \ G_STMT_START \ { \ Q = (BITS & 0xf0) | (BITS >> 4); \ } \ G_STMT_END NBIT_LINE(1, EXPAND1) NBIT_LINE(2, EXPAND2) NBIT_LINE(4, EXPAND4) /* Read a 1-bit TIFF image. */ static int rtiff_parse_onebit(Rtiff *rtiff, VipsImage *out) { if (rtiff_check_samples(rtiff, 1) || rtiff_check_bits(rtiff, 1)) return -1; out->Bands = 1; out->BandFmt = VIPS_FORMAT_UCHAR; out->Coding = VIPS_CODING_NONE; out->Type = VIPS_INTERPRETATION_B_W; rtiff->sfn = rtiff_1bit_line; return 0; } /* Read a 2-bit TIFF image. */ static int rtiff_parse_twobit(Rtiff *rtiff, VipsImage *out) { if (rtiff_check_samples(rtiff, 1) || rtiff_check_bits(rtiff, 2)) return -1; out->Bands = 1; out->BandFmt = VIPS_FORMAT_UCHAR; out->Coding = VIPS_CODING_NONE; out->Type = VIPS_INTERPRETATION_B_W; rtiff->sfn = rtiff_2bit_line; return 0; } /* Read a 4-bit TIFF image. */ static int rtiff_parse_fourbit(Rtiff *rtiff, VipsImage *out) { if (rtiff_check_samples(rtiff, 1) || rtiff_check_bits(rtiff, 4)) return -1; out->Bands = 1; out->BandFmt = VIPS_FORMAT_UCHAR; out->Coding = VIPS_CODING_NONE; out->Type = VIPS_INTERPRETATION_B_W; rtiff->sfn = rtiff_4bit_line; return 0; } /* Swap the sense of the first channel, if necessary. */ #define GREY_LOOP(TYPE, MAX) \ { \ TYPE *p1; \ TYPE *q1; \ \ p1 = (TYPE *) p; \ q1 = (TYPE *) q; \ for (x = 0; x < n; x++) { \ if (invert) \ q1[0] = MAX - p1[0]; \ else \ q1[0] = p1[0]; \ \ for (i = 1; i < samples_per_pixel; i++) \ q1[i] = p1[i]; \ \ q1 += samples_per_pixel; \ p1 += samples_per_pixel; \ } \ } /* GREY_LOOP implementation for 16-bit float */ #define GREY_LOOP_F16 \ { \ gushort *p1; \ float *q1; \ \ p1 = (gushort *) p; \ q1 = (float *) q; \ for (x = 0; x < n; x++) { \ if (invert) \ q1[0] = 1.0 - half_2_float(p1[0]); \ else \ q1[0] = half_2_float(p1[0]); \ \ for (i = 1; i < samples_per_pixel; i++) \ q1[i] = half_2_float(p1[i]); \ \ q1 += samples_per_pixel; \ p1 += samples_per_pixel; \ } \ } /* Per-scanline process function for greyscale images. */ static void rtiff_greyscale_line(Rtiff *rtiff, VipsPel *q, VipsPel *p, int n, void *client) { int samples_per_pixel = rtiff->header.samples_per_pixel; int bits_per_sample = rtiff->header.bits_per_sample; int photometric_interpretation = rtiff->header.photometric_interpretation; VipsBandFormat format = rtiff_guess_format(rtiff); /* Swapping black and white doesn't make sense for the signed formats. */ gboolean invert = photometric_interpretation == PHOTOMETRIC_MINISWHITE && vips_band_format_isuint(format); int x, i; switch (format) { case VIPS_FORMAT_CHAR: GREY_LOOP(gchar, 0); break; case VIPS_FORMAT_UCHAR: GREY_LOOP(guchar, UCHAR_MAX); break; case VIPS_FORMAT_SHORT: GREY_LOOP(gshort, 0); break; case VIPS_FORMAT_USHORT: GREY_LOOP(gushort, USHRT_MAX); break; case VIPS_FORMAT_INT: GREY_LOOP(gint, 0); break; case VIPS_FORMAT_UINT: GREY_LOOP(guint, UINT_MAX); break; case VIPS_FORMAT_FLOAT: if (bits_per_sample == 16) { GREY_LOOP_F16; } else { GREY_LOOP(float, 1.0); } break; case VIPS_FORMAT_DOUBLE: GREY_LOOP(double, 1.0); break; default: g_assert_not_reached(); } } /* Read a grey-scale TIFF image. We have to invert the first band if * PHOTOMETRIC_MINISBLACK is set. */ static int rtiff_parse_greyscale(Rtiff *rtiff, VipsImage *out) { if (rtiff_check_min_samples(rtiff, 1) || rtiff_non_fractional(rtiff)) return -1; out->Bands = rtiff->header.samples_per_pixel; out->BandFmt = rtiff_guess_format(rtiff); if (out->BandFmt == VIPS_FORMAT_NOTSET) return -1; out->Coding = VIPS_CODING_NONE; if (rtiff->header.bits_per_sample == 16) out->Type = VIPS_INTERPRETATION_GREY16; else out->Type = VIPS_INTERPRETATION_B_W; /* rtiff_greyscale_line() doesn't do complex. */ if (vips_check_noncomplex("tiff2vips", out)) return -1; rtiff->sfn = rtiff_greyscale_line; return 0; } typedef struct { /* LUTs mapping image indexes to RGB. */ VipsPel *red8; VipsPel *green8; VipsPel *blue8; guint16 *red16; guint16 *green16; guint16 *blue16; /* All maps equal, so we write mono. */ gboolean mono; } PaletteRead; /* 1/2/4 bit samples with an 8-bit palette. */ static void rtiff_palette_line_bit(Rtiff *rtiff, VipsPel *q, VipsPel *p, int n, void *client) { PaletteRead *read = (PaletteRead *) client; int samples_per_pixel = rtiff->header.samples_per_pixel; int bits_per_sample = rtiff->header.bits_per_sample; int bit; VipsPel data; int x; bit = 0; data = 0; for (x = 0; x < n * samples_per_pixel; x++) { int i; if (bit <= 0) { data = *p++; bit = 8; } i = data >> (8 - bits_per_sample); data <<= bits_per_sample; bit -= bits_per_sample; /* The first band goes through the LUT, subsequent bands are * left-justified and copied. */ if (x % samples_per_pixel == 0) { if (read->mono) *q++ = read->red8[i]; else { q[0] = read->red8[i]; q[1] = read->green8[i]; q[2] = read->blue8[i]; q += 3; } } else *q++ = VIPS_LSHIFT_INT(i, 8 - bits_per_sample); } } /* 8-bit samples with an 8-bit palette. */ static void rtiff_palette_line8(Rtiff *rtiff, VipsPel *q, VipsPel *p, int n, void *client) { PaletteRead *read = (PaletteRead *) client; int samples_per_pixel = rtiff->header.samples_per_pixel; int x; int s; for (x = 0; x < n; x++) { int i = p[0]; if (read->mono) q[0] = read->red8[i]; else { q[0] = read->red8[i]; q[1] = read->green8[i]; q[2] = read->blue8[i]; q += 2; } for (s = 1; s < samples_per_pixel; s++) q[s] = p[s]; q += samples_per_pixel; p += samples_per_pixel; } } /* 16-bit samples with 16-bit data in the palette. */ static void rtiff_palette_line16(Rtiff *rtiff, VipsPel *q, VipsPel *p, int n, void *client) { PaletteRead *read = (PaletteRead *) client; int samples_per_pixel = rtiff->header.samples_per_pixel; guint16 *p16, *q16; int x; int s; q16 = (guint16 *) q; p16 = (guint16 *) p; for (x = 0; x < n; x++) { int i = p16[0]; if (read->mono) q16[0] = read->red16[i]; else { q16[0] = read->red16[i]; q16[1] = read->green16[i]; q16[2] = read->blue16[i]; q16 += 2; } for (s = 1; s < samples_per_pixel; s++) q16[s] = p16[s]; q16 += samples_per_pixel; p16 += samples_per_pixel; } } /* Read a palette-ised TIFF image. */ static int rtiff_parse_palette(Rtiff *rtiff, VipsImage *out) { int samples_per_pixel = rtiff->header.samples_per_pixel; int bits_per_sample = rtiff->header.bits_per_sample; int len; PaletteRead *read; int i; if (rtiff_check_bits_palette(rtiff) || rtiff_check_min_samples(rtiff, 1)) return -1; len = 1 << bits_per_sample; if (!(read = VIPS_NEW(out, PaletteRead)) || !(read->red8 = VIPS_ARRAY(out, len, VipsPel)) || !(read->green8 = VIPS_ARRAY(out, len, VipsPel)) || !(read->blue8 = VIPS_ARRAY(out, len, VipsPel))) return -1; /* Get maps, convert to 8-bit data. */ if (!TIFFGetField(rtiff->tiff, TIFFTAG_COLORMAP, &read->red16, &read->green16, &read->blue16)) { vips_error("tiff2vips", "%s", _("bad colormap")); return -1; } /* Old-style colourmaps were 8-bit. If all the top bytes are zero, * assume we have one of these. * * See: https://github.com/libvips/libvips/issues/220 */ for (i = 0; i < len; i++) if ((read->red16[i] >> 8) | (read->green16[i] >> 8) | (read->blue16[i] >> 8)) break; if (i < len) for (i = 0; i < len; i++) { read->red8[i] = read->red16[i] >> 8; read->green8[i] = read->green16[i] >> 8; read->blue8[i] = read->blue16[i] >> 8; } else { g_warning("%s", _("assuming 8-bit palette")); for (i = 0; i < len; i++) { read->red8[i] = read->red16[i] & 0xff; read->green8[i] = read->green16[i] & 0xff; read->blue8[i] = read->blue16[i] & 0xff; } } /* Are all the maps equal? We have a mono image. */ read->mono = TRUE; for (i = 0; i < len; i++) if (read->red16[i] != read->green16[i] || read->green16[i] != read->blue16[i]) { read->mono = FALSE; break; } /* There's a TIFF extension, INDEXED, that is the preferred way to * encode mono palette images, but few applications support it. So we * just search the colormap. */ if (bits_per_sample <= 8) out->BandFmt = VIPS_FORMAT_UCHAR; else out->BandFmt = VIPS_FORMAT_USHORT; out->Coding = VIPS_CODING_NONE; if (read->mono) { out->Bands = samples_per_pixel; if (bits_per_sample <= 8) out->Type = VIPS_INTERPRETATION_B_W; else out->Type = VIPS_INTERPRETATION_GREY16; } else { out->Bands = samples_per_pixel + 2; if (bits_per_sample <= 8) out->Type = VIPS_INTERPRETATION_sRGB; else out->Type = VIPS_INTERPRETATION_RGB16; } rtiff->client = read; if (bits_per_sample < 8) rtiff->sfn = rtiff_palette_line_bit; else if (bits_per_sample == 8) rtiff->sfn = rtiff_palette_line8; else if (bits_per_sample == 16) rtiff->sfn = rtiff_palette_line16; else g_assert_not_reached(); return 0; } /* Per-scanline process function when we just need to copy. */ static void rtiff_memcpy_line(Rtiff *rtiff, VipsPel *q, VipsPel *p, int n, void *client) { VipsImage *im = (VipsImage *) client; size_t len = n * VIPS_IMAGE_SIZEOF_PEL(im); memcpy(q, p, len); } /* Per-scanline process function when we just need to copy. */ static void rtiff_memcpy_f16_line(Rtiff *rtiff, VipsPel *q, VipsPel *p, int n, void *client) { VipsImage *im = (VipsImage *) client; size_t len = n * im->Bands; if (im->BandFmt == VIPS_FORMAT_COMPLEX || im->BandFmt == VIPS_FORMAT_DPCOMPLEX) len *= 2; int i; gushort *restrict hp = (gushort *) p; float *restrict fq = (float *) q; for (i = 0; i < len; i++) fq[i] = half_2_float(hp[i]); } /* Read a regular multiband image where we can just copy pixels from the tiff * buffer. */ static int rtiff_parse_copy(Rtiff *rtiff, VipsImage *out) { int samples_per_pixel = rtiff->header.samples_per_pixel; int photometric_interpretation = rtiff->header.photometric_interpretation; int bits_per_sample = rtiff->header.bits_per_sample; int sample_format = rtiff->header.sample_format; int inkset = rtiff->header.inkset; if (rtiff_non_fractional(rtiff)) return -1; out->Bands = samples_per_pixel; out->BandFmt = rtiff_guess_format(rtiff); if (out->BandFmt == VIPS_FORMAT_NOTSET) return -1; out->Coding = VIPS_CODING_NONE; if (samples_per_pixel >= 3 && (photometric_interpretation == PHOTOMETRIC_RGB || photometric_interpretation == PHOTOMETRIC_YCBCR)) { if (out->BandFmt == VIPS_FORMAT_USHORT) out->Type = VIPS_INTERPRETATION_RGB16; else if (!vips_band_format_isint(out->BandFmt)) /* Most float images use 0 - 1 for black - white. * Photoshop uses 0 - 1 and no gamma. */ out->Type = VIPS_INTERPRETATION_scRGB; else out->Type = VIPS_INTERPRETATION_sRGB; } else if (samples_per_pixel >= 3 && photometric_interpretation == PHOTOMETRIC_CIELAB) out->Type = VIPS_INTERPRETATION_LAB; else if (photometric_interpretation == PHOTOMETRIC_SEPARATED && samples_per_pixel >= 4 && inkset == INKSET_CMYK) out->Type = VIPS_INTERPRETATION_CMYK; else out->Type = VIPS_INTERPRETATION_MULTIBAND; rtiff->client = out; if (bits_per_sample == 16 && sample_format == SAMPLEFORMAT_IEEEFP) { rtiff->sfn = rtiff_memcpy_f16_line; } else { rtiff->sfn = rtiff_memcpy_line; /* We expand YCBCR images to RGB using JPEGCOLORMODE_RGB, and this * means we need a slightly larger read buffer for the edge pixels. In * turn, this means we can't just memcpy to libvips regions. */ rtiff->memcpy = photometric_interpretation != PHOTOMETRIC_YCBCR; } return 0; } typedef int (*reader_fn)(Rtiff *rtiff, VipsImage *out); /* We have a range of output paths. Look at the tiff header and try to * route the input image to the best output path. */ static reader_fn rtiff_pick_reader(Rtiff *rtiff) { int bits_per_sample = rtiff->header.bits_per_sample; int photometric_interpretation = rtiff->header.photometric_interpretation; int samples_per_pixel = rtiff->header.samples_per_pixel; if (photometric_interpretation == PHOTOMETRIC_CIELAB) { if (bits_per_sample == 8) { if (samples_per_pixel > 3) return rtiff_parse_lab_with_alpha; else return rtiff_parse_labpack; } if (bits_per_sample == 16) return rtiff_parse_labs; } if (photometric_interpretation == PHOTOMETRIC_LOGLUV) return rtiff_parse_logluv; if (photometric_interpretation == PHOTOMETRIC_MINISWHITE || photometric_interpretation == PHOTOMETRIC_MINISBLACK) { if (bits_per_sample == 1) return rtiff_parse_onebit; else if (bits_per_sample == 2) return rtiff_parse_twobit; else if (bits_per_sample == 4) return rtiff_parse_fourbit; else return rtiff_parse_greyscale; } if (photometric_interpretation == PHOTOMETRIC_PALETTE) return rtiff_parse_palette; return rtiff_parse_copy; } /* Set the header on @out from our rtiff. rtiff_header_read() has already been * called. */ static int rtiff_set_header(Rtiff *rtiff, VipsImage *out) { guint32 data_len; void *data; rtiff_set_decode_format(rtiff); if (rtiff->header.photometric_interpretation == PHOTOMETRIC_LOGLUV) vips_image_set_double(out, "stonits", rtiff->header.stonits); out->Xsize = rtiff->header.width; out->Ysize = rtiff->header.height * rtiff->n; VIPS_SETSTR(out->filename, vips_connection_filename(VIPS_CONNECTION(rtiff->source))); if (rtiff->n > 1) vips_image_set_int(out, VIPS_META_PAGE_HEIGHT, rtiff->header.height); if (rtiff->header.subifd_count > 0) vips_image_set_int(out, VIPS_META_N_SUBIFDS, rtiff->header.subifd_count); vips_image_set_int(out, VIPS_META_N_PAGES, rtiff->n_pages); /* We have a range of output paths. Look at the tiff header and try to * route the input image to the best output path. */ if (rtiff_pick_reader(rtiff)(rtiff, out)) return -1; /* Read any ICC profile. */ if (TIFFGetField(rtiff->tiff, TIFFTAG_ICCPROFILE, &data_len, &data)) vips_image_set_blob_copy(out, VIPS_META_ICC_NAME, data, data_len); /* Read any XMP metadata. */ if (TIFFGetField(rtiff->tiff, TIFFTAG_XMLPACKET, &data_len, &data)) vips_image_set_blob_copy(out, VIPS_META_XMP_NAME, data, data_len); /* Read any IPTC metadata. */ if (TIFFGetField(rtiff->tiff, TIFFTAG_RICHTIFFIPTC, &data_len, &data)) { vips_image_set_blob_copy(out, VIPS_META_IPTC_NAME, data, data_len); /* Older versions of libvips used this misspelt name :-( attach * under this name too for compatibility. */ vips_image_set_blob_copy(out, "ipct-data", data, data_len); } /* Read any photoshop metadata. */ if (TIFFGetField(rtiff->tiff, TIFFTAG_PHOTOSHOP, &data_len, &data)) vips_image_set_blob_copy(out, VIPS_META_PHOTOSHOP_NAME, data, data_len); if (rtiff->header.image_description) vips_image_set_string(out, VIPS_META_IMAGEDESCRIPTION, rtiff->header.image_description); if (get_resolution(rtiff->tiff, out)) return -1; vips_image_set_int(out, VIPS_META_BITS_PER_SAMPLE, rtiff->header.bits_per_sample); /* Set the "orientation" tag. This is picked up later by autorot, if * requested. */ vips_image_set_int(out, VIPS_META_ORIENTATION, rtiff->header.orientation); /* Hint smalltile for tiled images, since we may be decompressing * outside the lock and THINSTRIP would prevent parallel tile decode. */ vips_image_pipelinev(out, rtiff->header.tiled ? VIPS_DEMAND_STYLE_SMALLTILE : VIPS_DEMAND_STYLE_THINSTRIP, NULL); return 0; } /* Tilewise read sequence value. */ typedef struct _RtiffSeq { Rtiff *rtiff; /* Decompressed tile here. */ tdata_t *buf; /* If we are decompressing, we need a buffer to read the raw tile to * before running the decompressor. This needs to be per-thread, since * we decompress in parallel. */ tdata_t compressed_buf; tsize_t compressed_buf_length; } RtiffSeq; /* Allocate a tile buffer. Have one of these for each thread so we can unpack * to vips in parallel. */ static void * rtiff_seq_start(VipsImage *out, void *a, void *b) { Rtiff *rtiff = (Rtiff *) a; RtiffSeq *seq; if (!(seq = VIPS_NEW(out, RtiffSeq))) return NULL; seq->rtiff = rtiff; if (!(seq->buf = vips_malloc(NULL, rtiff->header.tile_size))) return NULL; /* If we will be decompressing, we need a buffer large enough to hold * the largest compressed tile in any page. * * Allocate a buffer 2x the uncompressed tile size ... much simpler * than searching every page for the largest tile with * TIFFTAG_TILEBYTECOUNTS. */ if (rtiff->header.we_decompress) { seq->compressed_buf_length = 2 * rtiff->header.tile_size; if (!(seq->compressed_buf = VIPS_MALLOC(NULL, seq->compressed_buf_length))) return NULL; } return (void *) seq; } #ifdef HAVE_JPEG static void rtiff_decompress_jpeg_init_source(j_decompress_ptr cinfo) { /* Nothing. */ } static boolean rtiff_decompress_jpeg_fill_input_buffer(j_decompress_ptr cinfo) { static const JOCTET mybuffer[4] = { (JOCTET) 0xFF, (JOCTET) JPEG_EOI, 0, 0 }; /* The whole JPEG data is expected to reside in the supplied memory * buffer, so any request for more data beyond the given buffer size * is treated as an error. */ WARNMS(cinfo, JWRN_JPEG_EOF); /* Insert a fake EOI marker */ cinfo->src->next_input_byte = mybuffer; cinfo->src->bytes_in_buffer = 2; return TRUE; } /* Skip data --- used to skip over a potentially large amount of * uninteresting data (such as an APPn marker). * * Writers of suspendable-input applications must note that skip_input_data * is not granted the right to give a suspension return. If the skip extends * beyond the data currently in the buffer, the buffer can be marked empty so * that the next read will cause a fill_input_buffer call that can suspend. * Arranging for additional bytes to be discarded before reloading the input * buffer is the application writer's problem. */ static void rtiff_decompress_jpeg_skip_input_data(j_decompress_ptr cinfo, long num_bytes) { struct jpeg_source_mgr *src = cinfo->src; /* Just a dumb implementation for now. Could use fseek() except * it doesn't work on pipes. Not clear that being smart is worth * any trouble anyway --- large skips are infrequent. */ if (num_bytes > 0) { while (num_bytes > (long) src->bytes_in_buffer) { num_bytes -= (long) src->bytes_in_buffer; (void) (*src->fill_input_buffer)(cinfo); /* note we assume that fill_input_buffer will never * return FALSE, so suspension need not be handled. */ } src->next_input_byte += (size_t) num_bytes; src->bytes_in_buffer -= (size_t) num_bytes; } } static void rtiff_decompress_jpeg_set_memory(j_decompress_ptr cinfo, void *data, size_t data_len) { if (!cinfo->src) cinfo->src = (struct jpeg_source_mgr *) (*cinfo->mem->alloc_small)( (j_common_ptr) cinfo, JPOOL_PERMANENT, sizeof(struct jpeg_source_mgr)); /* Present the whole of data as one chunk. */ cinfo->src->bytes_in_buffer = data_len; cinfo->src->next_input_byte = (JOCTET *) data; cinfo->src->init_source = rtiff_decompress_jpeg_init_source; cinfo->src->fill_input_buffer = rtiff_decompress_jpeg_fill_input_buffer; cinfo->src->skip_input_data = rtiff_decompress_jpeg_skip_input_data; cinfo->src->resync_to_restart = jpeg_resync_to_restart; } static int rtiff_decompress_jpeg_run(Rtiff *rtiff, j_decompress_ptr cinfo, void *data, size_t data_len, void *out) { void *tables; uint32_t tables_len; int bytes_per_pixel; size_t bytes_per_scanline; VipsPel *q; int y; #ifdef DEBUG_VERBOSE printf("rtiff_decompress_jpeg_run: decompressing %zd bytes of jpg\n", data_len); #endif /*DEBUG_VERBOSE*/ /* Tables are optional. */ tables = NULL; tables_len = 0; (void) TIFFGetField(rtiff->tiff, TIFFTAG_JPEGTABLES, &tables_len, &tables); if (tables) { rtiff_decompress_jpeg_set_memory(cinfo, tables, tables_len); if (jpeg_read_header(cinfo, FALSE) != JPEG_HEADER_TABLES_ONLY) return -1; } rtiff_decompress_jpeg_set_memory(cinfo, data, data_len); if (jpeg_read_header(cinfo, TRUE) != JPEG_HEADER_OK) return -1; /* This isn't stored in the tile -- we have to set it from the * enclosing TIFF. */ switch (rtiff->header.photometric_interpretation) { case PHOTOMETRIC_SEPARATED: cinfo->jpeg_color_space = JCS_CMYK; bytes_per_pixel = 4; break; case PHOTOMETRIC_YCBCR: cinfo->jpeg_color_space = JCS_YCbCr; bytes_per_pixel = 3; break; case PHOTOMETRIC_RGB: cinfo->jpeg_color_space = JCS_RGB; bytes_per_pixel = 3; break; case PHOTOMETRIC_MINISWHITE: case PHOTOMETRIC_MINISBLACK: cinfo->jpeg_color_space = JCS_GRAYSCALE; bytes_per_pixel = 1; break; default: cinfo->jpeg_color_space = JCS_UNKNOWN; bytes_per_pixel = 1; break; } jpeg_calc_output_dimensions(cinfo); bytes_per_scanline = cinfo->output_width * bytes_per_pixel; /* Double-check tile dimensions. */ if (cinfo->output_width > rtiff->header.tile_width || cinfo->output_height > rtiff->header.tile_height || bytes_per_scanline > rtiff->header.tile_row_size) return -1; jpeg_start_decompress(cinfo); q = (VipsPel *) out; for (y = 0; y < cinfo->output_height; y++) { JSAMPROW row_pointer[1]; row_pointer[0] = (JSAMPLE *) q; jpeg_read_scanlines(cinfo, &row_pointer[0], 1); q += bytes_per_scanline; } return 0; } static void rtiff_decompress_jpeg_emit_message(j_common_ptr cinfo, int msg_level) { if (msg_level < 0) { long num_warnings; /* Always count warnings in num_warnings. */ num_warnings = ++cinfo->err->num_warnings; /* Corrupt files may give many warnings, the policy here is to * show only the first warning and treat many warnings as fatal, * unless unlimited is set. */ if (num_warnings == 1) (*cinfo->err->output_message)(cinfo); } else if (cinfo->err->trace_level >= msg_level) /* It's a trace message. Show it if trace_level >= msg_level. */ (*cinfo->err->output_message)(cinfo); } /* Decompress a tile of size coefficients into out. */ static int rtiff_decompress_jpeg(Rtiff *rtiff, void *data, size_t data_len, void *out) { struct jpeg_decompress_struct cinfo = { 0 }; ErrorManager eman; if (setjmp(eman.jmp) == 0) { cinfo.err = jpeg_std_error(&eman.pub); eman.pub.error_exit = vips__new_error_exit; eman.pub.emit_message = rtiff_decompress_jpeg_emit_message; eman.pub.output_message = vips__new_output_message; eman.fp = NULL; jpeg_create_decompress(&cinfo); if (rtiff_decompress_jpeg_run(rtiff, &cinfo, data, data_len, out)) { jpeg_destroy_decompress(&cinfo); return -1; } } else { #ifdef DEBUG_VERBOSE printf("rtiff_decompress_jpeg: error return\n"); #endif /*DEBUG_VERBOSE*/ jpeg_destroy_decompress(&cinfo); return -1; } jpeg_destroy_decompress(&cinfo); return 0; } #endif /*HAVE_JPEG*/ static int rtiff_decompress_tile(Rtiff *rtiff, tdata_t *in, tsize_t size, tdata_t *out) { g_assert(rtiff->header.we_decompress); switch (rtiff->header.compression) { case JP2K_YCC: case JP2K_RGB: case JP2K_LOSSY: if (vips__foreign_load_jp2k_decompress( rtiff->out, rtiff->header.tile_width, rtiff->header.tile_height, TRUE, in, size, out, rtiff->header.tile_size)) return -1; break; #ifdef HAVE_JPEG case COMPRESSION_JPEG: if (rtiff_decompress_jpeg(rtiff, in, size, out)) return -1; break; #endif /*HAVE_JPEG*/ default: g_assert_not_reached(); break; } return 0; } /* Select a page and decompress a tile. This has to be a single operation, * since it changes the current page number in TIFF. */ static int rtiff_read_tile(RtiffSeq *seq, tdata_t *buf, int page, int x, int y) { Rtiff *rtiff = seq->rtiff; tsize_t size; #ifdef DEBUG_VERBOSE printf("rtiff_read_tile: page = %d, x = %d, y = %d, " "we_decompress = %d\n", page, x, y, rtiff->header.we_decompress); #endif /*DEBUG_VERBOSE*/ /* Compressed tiles load to compressed_buf. */ if (rtiff->header.we_decompress) { ttile_t tile_no; g_rec_mutex_lock(&rtiff->lock); if (rtiff_set_page(rtiff, page)) { g_rec_mutex_unlock(&rtiff->lock); return -1; } tile_no = TIFFComputeTile(rtiff->tiff, x, y, 0, 0); size = TIFFReadRawTile(rtiff->tiff, tile_no, seq->compressed_buf, seq->compressed_buf_length); if (size <= 0) { vips_foreign_load_invalidate(rtiff->out); g_rec_mutex_unlock(&rtiff->lock); return -1; } g_rec_mutex_unlock(&rtiff->lock); /* Decompress outside the lock, so we get parallelism. */ if (rtiff_decompress_tile(rtiff, seq->compressed_buf, size, buf)) { vips_error("tiff2vips", _("decompress error tile %d x %d"), x, y); return -1; } } else { g_rec_mutex_lock(&rtiff->lock); if (rtiff_set_page(rtiff, page)) { g_rec_mutex_unlock(&rtiff->lock); return -1; } if (TIFFReadTile(rtiff->tiff, buf, x, y, 0, 0) < 0) { vips_foreign_load_invalidate(rtiff->out); g_rec_mutex_unlock(&rtiff->lock); return -1; } g_rec_mutex_unlock(&rtiff->lock); } return 0; } /* Paint a tile from the file. This is a * special-case for when a region is exactly a tiff tile, and pixels need no * conversion. In this case, libtiff can read tiles directly to our output * region. */ static int rtiff_fill_region_aligned(VipsRegion *out, void *vseq, void *a, void *b, gboolean *stop) { RtiffSeq *seq = (RtiffSeq *) vseq; Rtiff *rtiff = (Rtiff *) a; VipsRect *r = &out->valid; int page_height = rtiff->header.height; int page_no = r->top / page_height; int page_y = r->top % page_height; g_assert((r->left % rtiff->header.tile_width) == 0); g_assert((r->top % rtiff->header.tile_height) == 0); g_assert(r->width == rtiff->header.tile_width); g_assert(r->height == rtiff->header.tile_height); g_assert(VIPS_REGION_LSKIP(out) == VIPS_REGION_SIZEOF_LINE(out)); #ifdef DEBUG_VERBOSE printf("rtiff_fill_region_aligned:\n"); #endif /*DEBUG_VERBOSE*/ /* Read that tile directly into the vips tile. */ if (rtiff_read_tile(seq, (tdata_t *) VIPS_REGION_ADDR(out, r->left, r->top), rtiff->page + page_no, r->left, page_y)) return -1; return 0; } /* Loop over the output region, painting in tiles from the file. */ static int rtiff_fill_region_unaligned(VipsRegion *out, void *vseq, void *a, void *b, gboolean *stop) { RtiffSeq *seq = (RtiffSeq *) vseq; Rtiff *rtiff = (Rtiff *) a; int tile_width = rtiff->header.tile_width; int tile_height = rtiff->header.tile_height; int page_height = rtiff->header.height; int tile_row_size = rtiff->header.tile_row_size; VipsRect *r = &out->valid; int x, y, z; #ifdef DEBUG_VERBOSE printf("rtiff_fill_region_unaligned:\n"); #endif /*DEBUG_VERBOSE*/ y = 0; while (y < r->height) { VipsRect tile, page, hit; /* Not necessary, but it stops static analyzers complaining * about a used-before-set. */ hit.height = 0; x = 0; while (x < r->width) { /* page_no is within this toilet roll image, not tiff * file page number ... add the number of the start * page to get that. */ int page_no = (r->top + y) / page_height; int page_y = (r->top + y) % page_height; /* Coordinate of the tile on this page that xy falls in. */ int xs = ((r->left + x) / tile_width) * tile_width; int ys = (page_y / tile_height) * tile_height; if (rtiff_read_tile(seq, seq->buf, rtiff->page + page_no, xs, ys)) return -1; /* Position of tile on the page. */ tile.left = xs; tile.top = ys; tile.width = tile_width; tile.height = tile_height; /* It'll be clipped by this page. */ page.left = 0; page.top = 0; page.width = rtiff->header.width; page.height = rtiff->header.height; vips_rect_intersectrect(&tile, &page, &tile); /* To image coordinates. */ tile.top += page_no * page_height; /* And clip again by this region. */ vips_rect_intersectrect(&tile, r, &hit); /* We are inside a tilecache, so requests will always * be aligned left-right to tile boundaries. * * this is not true vertically for toilet-roll images. */ g_assert(hit.left == tile.left); /* Unpack to VIPS format. * Just unpack the section of the tile we need. */ for (z = 0; z < hit.height; z++) { VipsPel *p = (VipsPel *) seq->buf + (hit.top - tile.top + z) * tile_row_size; VipsPel *q = VIPS_REGION_ADDR(out, hit.left, hit.top + z); rtiff->sfn(rtiff, q, p, hit.width, rtiff->client); } x += hit.width; } /* This will be the same for all tiles in the row we've just * done. */ y += hit.height; } return 0; } /* Loop over the output region, painting in tiles from the file. */ static int rtiff_fill_region(VipsRegion *out, void *vseq, void *a, void *b, gboolean *stop) { Rtiff *rtiff = (Rtiff *) a; int tile_width = rtiff->header.tile_width; int tile_height = rtiff->header.tile_height; int page_width = rtiff->header.width; int page_height = rtiff->header.height; VipsRect *r = &out->valid; int page_no = r->top / page_height; int page_y = r->top % page_height; VipsGenerateFn generate; #ifdef DEBUG_VERBOSE printf("rtiff_fill_region: left = %d, top = %d, " "width = %d, height = %d\n", r->left, r->top, r->width, r->height); #endif /*DEBUG_VERBOSE*/ /* Special case: we are filling a single cache tile exactly sized to * match the tiff tile, and we have no repacking to do for this format. * * If we are not on the first page, pages must be a multiple of the * tile size of we'll miss alignment. */ if ((page_no == 0 || page_height % tile_height == 0) && r->left % tile_width == 0 && r->top % tile_height == 0 && r->width == tile_width && r->height == tile_height && r->left + tile_width <= page_width && page_y + tile_height <= page_height && VIPS_REGION_LSKIP(out) == VIPS_REGION_SIZEOF_LINE(out) && rtiff->memcpy) generate = rtiff_fill_region_aligned; else generate = rtiff_fill_region_unaligned; VIPS_GATE_START("rtiff_fill_region: work"); if (generate(out, vseq, a, b, stop)) { VIPS_GATE_STOP("rtiff_fill_region: work"); return -1; } VIPS_GATE_STOP("rtiff_fill_region: work"); return 0; } static int rtiff_seq_stop(void *vseq, void *a, void *b) { RtiffSeq *seq = (RtiffSeq *) vseq; VIPS_FREE(seq->buf); VIPS_FREE(seq->compressed_buf); return 0; } /* Unpremultiply associative alpha, if any. */ static int rtiff_unpremultiply(Rtiff *rtiff, VipsImage *in, VipsImage **out) { if (rtiff->header.alpha_band != -1) { VipsImage *x; if ( vips_unpremultiply(in, &x, "alpha_band", rtiff->header.alpha_band, NULL) || vips_cast(x, out, in->BandFmt, NULL)) { g_object_unref(x); return -1; } g_object_unref(x); } else { *out = in; g_object_ref(in); } return 0; } /* Tile-type TIFF reader core - pass in a per-tile transform. Generate into * the im and do it all partially. */ static int rtiff_read_tilewise(Rtiff *rtiff, VipsImage *out) { int tile_width = rtiff->header.tile_width; int tile_height = rtiff->header.tile_height; VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(out), 4); VipsImage *in; #ifdef DEBUG printf("tiff2vips: rtiff_read_tilewise\n"); #endif /*DEBUG*/ /* I don't have a sample images for tiled + separate, ban it for now. */ if (rtiff->header.separate) { vips_error("tiff2vips", "%s", _("tiled separate planes not supported")); return -1; } /* Read to this image, then cache to out, see below. */ t[0] = vips_image_new(); if (rtiff_set_header(rtiff, t[0])) return -1; /* Double check: in memcpy mode, the vips tilesize should exactly * match the tifftile size. */ if (rtiff->memcpy) { size_t vips_tile_size = VIPS_IMAGE_SIZEOF_PEL(t[0]) * tile_width * tile_height; if (rtiff->header.tile_size != vips_tile_size) { vips_error("tiff2vips", "%s", _("unsupported tiff image type")); return -1; } } /* Generate to out, adding a cache. Enough tiles for two complete rows. * Set "threaded", so we allow many tiles to be read at once. We lock * around each tile read. */ if ( vips_image_generate(t[0], rtiff_seq_start, rtiff_fill_region, rtiff_seq_stop, rtiff, NULL) || vips_tilecache(t[0], &t[1], "tile_width", tile_width, "tile_height", tile_height, "max_tiles", 2 * (1 + t[0]->Xsize / tile_width), "threaded", TRUE, NULL) || rtiff_unpremultiply(rtiff, t[1], &t[2])) return -1; in = t[2]; /* Only do this if we have to. */ if (rtiff->autorotate && vips_image_get_orientation(in) != 1) { if (vips_autorot(in, &t[3], NULL)) return -1; in = t[3]; } if (vips_image_write(in, out)) return -1; return 0; } /* Read a strip from a page. If the image is in separate planes, read each * plane and interleave to the output. * * No need to lock -- this is inside a sequential. */ static int rtiff_strip_read_interleaved(Rtiff *rtiff, int page, tstrip_t strip, tdata_t buf) { int samples_per_pixel = rtiff->header.samples_per_pixel; int read_height = rtiff->header.read_height; int bits_per_sample = rtiff->header.bits_per_sample; int strip_y = strip * read_height; if (rtiff_set_page(rtiff, page)) return -1; if (rtiff->header.separate) { int page_width = rtiff->header.width; int page_height = rtiff->header.height; int strips_per_plane = 1 + (page_height - 1) / read_height; int strip_height = VIPS_MIN(read_height, page_height - strip_y); int pels_per_strip = page_width * strip_height; int bytes_per_sample = bits_per_sample >> 3; int i, j, k; for (i = 0; i < samples_per_pixel; i++) { VipsPel *p; VipsPel *q; if (rtiff_strip_read(rtiff, strips_per_plane * i + strip, rtiff->plane_buf)) return -1; p = (VipsPel *) rtiff->plane_buf; q = i * bytes_per_sample + (VipsPel *) buf; for (j = 0; j < pels_per_strip; j++) { for (k = 0; k < bytes_per_sample; k++) q[k] = p[k]; p += bytes_per_sample; q += bytes_per_sample * samples_per_pixel; } } } else { if (rtiff_strip_read(rtiff, strip, buf)) return -1; } return 0; } static int rtiff_stripwise_generate(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsImage *out = out_region->im; Rtiff *rtiff = (Rtiff *) a; int read_height = rtiff->header.read_height; int page_height = rtiff->header.height; tsize_t scanline_size = rtiff->header.scanline_size; VipsRect *r = &out_region->valid; int y; #ifdef DEBUG_VERBOSE printf("rtiff_stripwise_generate: top = %d, height = %d\n", r->top, r->height); printf("rtiff_stripwise_generate: y_top = %d\n", rtiff->y_pos); #endif /*DEBUG_VERBOSE*/ /* We're inside a tilecache where tiles are the full image width, so * this should always be true. */ g_assert(r->left == 0); g_assert(r->width == out_region->im->Xsize); g_assert(VIPS_RECT_BOTTOM(r) <= out_region->im->Ysize); /* If we're reading more than one page, tiles won't fall on strip * boundaries. Tiles may be contain several strips. */ /* Check that y_pos is correct. It should be, since we are inside * a vips_sequential(). */ if (r->top != rtiff->y_pos) { vips_error("tiff2vips", _("out of order read -- at line %d, but line %d requested"), rtiff->y_pos, r->top); return -1; } VIPS_GATE_START("rtiff_stripwise_generate: work"); y = 0; while (y < r->height) { /* page_no is within this toilet roll image, not tiff * file page number ... add the number of the start * page to get that. */ int page_no = (r->top + y) / page_height; int y_page = (r->top + y) % page_height; /* Strip number. */ tstrip_t strip_no = y_page / read_height; VipsRect image, page, strip, hit; /* Our four (including the output region) rects, all in * output image coordinates. */ image.left = 0; image.top = 0; image.width = out->Xsize; image.height = out->Ysize; page.left = 0; page.top = page_height * ((r->top + y) / page_height); page.width = out->Xsize; page.height = page_height; strip.left = 0; strip.top = page.top + strip_no * read_height; strip.width = out->Xsize; strip.height = read_height; /* Clip strip against page and image ... the final strip will * be smaller. */ vips_rect_intersectrect(&strip, &image, &strip); vips_rect_intersectrect(&strip, &page, &strip); /* Now the bit that overlaps with the region we are filling. */ vips_rect_intersectrect(&strip, r, &hit); g_assert(hit.height > 0); /* Read directly into the image if we can. Otherwise, we must * read to a temp buffer then unpack into the image. * * We need to read via a buffer if we need to reformat pixels, * or if this strip is not aligned on a tile boundary. */ if (rtiff->memcpy && hit.top == strip.top && hit.height == strip.height) { if (rtiff_strip_read_interleaved(rtiff, rtiff->page + page_no, strip_no, VIPS_REGION_ADDR(out_region, 0, r->top + y))) { VIPS_GATE_STOP( "rtiff_stripwise_generate: work"); return -1; } } else { VipsPel *p; VipsPel *q; int z; /* Read and interleave the entire strip. */ if (rtiff_strip_read_interleaved(rtiff, rtiff->page + page_no, strip_no, rtiff->contig_buf)) { VIPS_GATE_STOP( "rtiff_stripwise_generate: work"); return -1; } /* Do any repacking to generate pixels in vips layout. */ p = (VipsPel *) rtiff->contig_buf + (hit.top - strip.top) * scanline_size; q = VIPS_REGION_ADDR(out_region, 0, r->top + y); for (z = 0; z < hit.height; z++) { rtiff->sfn(rtiff, q, p, out_region->im->Xsize, rtiff->client); p += scanline_size; q += VIPS_REGION_LSKIP(out_region); } } y += hit.height; rtiff->y_pos += hit.height; } VIPS_GATE_STOP("rtiff_stripwise_generate: work"); return 0; } /* Stripwise reading. * * We could potentially read strips in any order, but this would give * catastrophic performance for operations like 90 degrees rotate on a * large image. Only offer sequential read. */ static int rtiff_read_stripwise(Rtiff *rtiff, VipsImage *out) { VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(out), 4); VipsImage *in; int tile_height; #ifdef DEBUG printf("tiff2vips: rtiff_read_stripwise\n"); #endif /*DEBUG*/ t[0] = vips_image_new(); if (rtiff_set_header(rtiff, t[0])) return -1; /* Double check: in memcpy mode, the vips linesize should exactly * match the tiff line size. */ if (rtiff->memcpy) { size_t vips_line_size; /* Lines are smaller in plane-separated mode. */ if (rtiff->header.separate) vips_line_size = VIPS_IMAGE_SIZEOF_ELEMENT(t[0]) * t[0]->Xsize; else vips_line_size = VIPS_IMAGE_SIZEOF_LINE(t[0]); if (rtiff->header.bits_per_sample == 16 && rtiff->header.sample_format == SAMPLEFORMAT_IEEEFP) vips_line_size /= 2; if (vips_line_size != rtiff->header.scanline_size) { vips_error("tiff2vips", "%s", _("unsupported tiff image type")); return -1; } } /* If we have separate image planes, we must read to a plane buffer, * then interleave to the output. * * We don't need a separate buffer per thread since the _generate() * function runs inside the cache lock. */ if (rtiff->header.separate) { if (!(rtiff->plane_buf = VIPS_MALLOC(out, rtiff->header.read_size))) return -1; } /* If we need to manipulate pixels, we must read to an interleaved * plane buffer before repacking to the output. * * If we are doing a multi-page read, we need a strip buffer, since * strips may not be aligned on tile boundaries. * * We don't need a separate buffer per thread since the _generate() * function runs inside the cache lock. */ if (!rtiff->memcpy || rtiff->n > 1) { tsize_t size; size = rtiff->header.read_size; if (rtiff->header.separate) size *= rtiff->header.samples_per_pixel; if (!(rtiff->contig_buf = VIPS_MALLOC(out, size))) return -1; } /* rows_per_strip can be very large if this is a separate plane image, * beware. * * Some images have very small rowsperstrip which will cause a lot of * work for the tilecache -- set a min size for tiles which is a * multiple of rowsperstrip. */ tile_height = VIPS_MAX( VIPS_ROUND_DOWN(16, rtiff->header.read_height), rtiff->header.read_height); if ( vips_image_generate(t[0], NULL, rtiff_stripwise_generate, NULL, rtiff, NULL) || vips_sequential(t[0], &t[1], "tile_height", tile_height, NULL) || rtiff_unpremultiply(rtiff, t[1], &t[2])) return -1; in = t[2]; /* Only do this if we have to. */ if (rtiff->autorotate && vips_image_get_orientation(in) != 1) { if (vips_autorot(in, &t[3], NULL)) return -1; in = t[3]; } if (vips_image_write(in, out)) return -1; return 0; } /* Load from a tiff dir into one of our tiff header structs. */ static int rtiff_header_read(Rtiff *rtiff, RtiffHeader *header) { int i; guint16 extra_samples_count; guint16 *extra_samples_types; guint16 subifd_count; toff_t *subifd_offsets; char *image_description; guint32 max_tile_dimension; if (!tfget32(rtiff->tiff, TIFFTAG_IMAGEWIDTH, &header->width) || !tfget32(rtiff->tiff, TIFFTAG_IMAGELENGTH, &header->height) || !tfget16(rtiff->tiff, TIFFTAG_SAMPLESPERPIXEL, &header->samples_per_pixel) || !tfget16(rtiff->tiff, TIFFTAG_BITSPERSAMPLE, &header->bits_per_sample) || !tfget16(rtiff->tiff, TIFFTAG_PHOTOMETRIC, &header->photometric_interpretation) || !tfget16(rtiff->tiff, TIFFTAG_INKSET, &header->inkset)) return -1; TIFFGetFieldDefaulted(rtiff->tiff, TIFFTAG_COMPRESSION, &header->compression); /* One of the types we decompress? */ for (i = 0; i < VIPS_NUMBER(rtiff_we_decompress); i++) if (header->compression == rtiff_we_decompress[i]) { #ifdef DEBUG printf("rtiff_header_read: compression %d handled by us\n", header->compression); #endif /*DEBUG*/ header->we_decompress = TRUE; break; } /* We must set this here since it'll change the value of scanline_size. */ rtiff_set_decode_format(rtiff); /* Request YCbCr expansion. libtiff complains if you do this for * non-jpg images. We must set this here since it changes the result * of scanline_size. */ if (header->compression != COMPRESSION_JPEG && header->photometric_interpretation == PHOTOMETRIC_YCBCR) { /* We rely on the jpg decompressor to upsample chroma * subsampled images. If there is chroma subsampling but * no jpg compression, we have to give up. * * tiffcp fails for images like this too. */ guint16 hsub, vsub; TIFFGetFieldDefaulted(rtiff->tiff, TIFFTAG_YCBCRSUBSAMPLING, &hsub, &vsub); if (hsub != 1 || vsub != 1) { vips_error("tiff2vips", "%s", _("subsampled images not supported")); return -1; } } if (header->photometric_interpretation == PHOTOMETRIC_LOGLUV) { if (header->compression != COMPRESSION_SGILOG && header->compression != COMPRESSION_SGILOG24) { vips_error("tiff2vips", "%s", _("not SGI-compressed LOGLUV")); return -1; } } /* For logluv, the calibration factor to get to absolute luminance. */ if (!TIFFGetField(rtiff->tiff, TIFFTAG_STONITS, &header->stonits)) header->stonits = 1.0; /* Arbitrary sanity-checking limits. */ if (header->width <= 0 || header->width >= VIPS_MAX_COORD || header->height <= 0 || header->height >= VIPS_MAX_COORD) { vips_error("tiff2vips", "%s", _("width/height out of range")); return -1; } if (header->samples_per_pixel <= 0 || header->samples_per_pixel > 10000 || header->bits_per_sample <= 0 || header->bits_per_sample > 32) { vips_error("tiff2vips", "%s", _("samples out of range")); return -1; } header->sample_format = get_sample_format(rtiff->tiff); header->orientation = get_orientation(rtiff->tiff); header->separate = FALSE; if (tfexists(rtiff->tiff, TIFFTAG_PLANARCONFIG)) { int v; if (!tfget16(rtiff->tiff, TIFFTAG_PLANARCONFIG, &v)) return -1; if (v == PLANARCONFIG_SEPARATE) header->separate = TRUE; } /* TIFFGetField needs a guint16 to write count to. */ if (TIFFGetField(rtiff->tiff, TIFFTAG_SUBIFD, &subifd_count, &subifd_offsets)) header->subifd_count = subifd_count; /* IMAGEDESCRIPTION often has useful metadata. libtiff makes sure * that data is null-terminated and contains no embedded null * characters. */ if (TIFFGetField(rtiff->tiff, TIFFTAG_IMAGEDESCRIPTION, &image_description)) header->image_description = vips_strdup(VIPS_OBJECT(rtiff->out), image_description); /* Tiles and strip images have slightly different fields. */ header->tiled = TIFFIsTiled(rtiff->tiff); #ifdef DEBUG printf("rtiff_header_read: header.width = %d\n", header->width); printf("rtiff_header_read: header.height = %d\n", header->height); printf("rtiff_header_read: header.samples_per_pixel = %d\n", header->samples_per_pixel); printf("rtiff_header_read: header.bits_per_sample = %d\n", header->bits_per_sample); printf("rtiff_header_read: header.sample_format = %d\n", header->sample_format); printf("rtiff_header_read: header.orientation = %d\n", header->orientation); printf("rtiff_header_read: header.tiled = %d\n", header->tiled); #endif /*DEBUG*/ if (header->tiled) { if (!tfget32(rtiff->tiff, TIFFTAG_TILEWIDTH, &header->tile_width) || !tfget32(rtiff->tiff, TIFFTAG_TILELENGTH, &header->tile_height)) return -1; #ifdef DEBUG printf("rtiff_header_read: header.tile_width = %d\n", header->tile_width); printf("rtiff_header_read: header.tile_height = %d\n", header->tile_height); #endif /*DEBUG*/ /* Arbitrary sanity-checking limits. */ max_tile_dimension = VIPS_MIN(8192, VIPS_ROUND_UP(2 * VIPS_MAX(header->width, header->height), 256)); if (header->tile_width <= 0 || header->tile_width > max_tile_dimension || header->tile_width % 16 != 0 || header->tile_height <= 0 || header->tile_height > max_tile_dimension || header->tile_height % 16 != 0) { vips_error("tiff2vips", "%s", _("tile size out of range")); return -1; } header->tile_size = TIFFTileSize(rtiff->tiff); header->tile_row_size = TIFFTileRowSize(rtiff->tiff); #ifdef DEBUG printf("rtiff_header_read: header.tile_size = %zd\n", header->tile_size); printf("rtiff_header_read: header.tile_row_size = %zd\n", header->tile_row_size); #endif /*DEBUG*/ /* Fuzzed TIFFs can give crazy values for tile_size. Sanity * check at 100mb per tile. */ if (header->tile_size <= 0 || header->tile_size > 100 * 1000 * 1000 || header->tile_row_size <= 0 || header->tile_row_size > 100 * 1000 * 1000) { vips_error("tiff2vips", "%s", _("tile size out of range")); return -1; } /* Stop some compiler warnings. */ header->rows_per_strip = 0; header->strip_size = 0; header->number_of_strips = 0; header->read_height = 0; header->read_size = 0; } else { if (!tfget32(rtiff->tiff, TIFFTAG_ROWSPERSTRIP, &header->rows_per_strip)) return -1; header->strip_size = TIFFStripSize(rtiff->tiff); header->scanline_size = TIFFScanlineSize(rtiff->tiff); header->number_of_strips = TIFFNumberOfStrips(rtiff->tiff); #ifdef DEBUG printf("rtiff_header_read: header.rows_per_strip = %d\n", header->rows_per_strip); printf("rtiff_header_read: header.strip_size = %zd\n", header->strip_size); printf("rtiff_header_read: header.scanline_size = %zd\n", header->scanline_size); printf("rtiff_header_read: header.number_of_strips = %d\n", header->number_of_strips); #endif /*DEBUG*/ /* libtiff has two strip-wise readers. TIFFReadEncodedStrip() * decompresses an entire strip to memory. It's fast, but it * will need a lot of ram if the strip is large. * TIFFReadScanline() reads a single scanline. It's slower, but * will save a lot of memory if strips are large. * * If this image has a strip size of over 128 lines, fall back * to TIFFReadScanline(), otherwise use TIFFReadEncodedStrip(). * * Don't do this in plane-separate mode. TIFFReadScanline() is * too fiddly to use in this case. * * Don't try scanline reading for YCbCr images. * TIFFScanlineSize() will not work in this case due to * chroma subsampling. */ if (header->rows_per_strip > 128 && !header->separate && header->photometric_interpretation != PHOTOMETRIC_YCBCR) { header->read_scanlinewise = TRUE; header->read_height = 1; header->read_size = rtiff->header.scanline_size; } else { header->read_scanlinewise = FALSE; /* rows_per_strip can be 2 ** 32 - 1, meaning the * whole image. Clip this down to height to avoid * confusing vips. * * And it mustn't be zero. */ header->read_height = VIPS_CLIP(1, header->rows_per_strip, header->height); header->read_size = header->strip_size; } #ifdef DEBUG printf("rtiff_header_read: header.read_scanlinewise = %d\n", header->read_scanlinewise); printf("rtiff_header_read: header.read_height = %d\n", header->read_height); printf("rtiff_header_read: header.read_size = %zd\n", header->read_size); #endif /*DEBUG*/ /* Stop some compiler warnings. */ header->tile_width = 0; header->tile_height = 0; header->tile_size = 0; header->tile_row_size = 0; } TIFFGetFieldDefaulted(rtiff->tiff, TIFFTAG_EXTRASAMPLES, &extra_samples_count, &extra_samples_types); header->alpha_band = -1; if (extra_samples_count > 0) { /* There must be exactly one band which is * EXTRASAMPLE_ASSOCALPHA. Note which one it is so we can * unpremultiply with the right channel. */ int i; for (i = 0; i < extra_samples_count; i++) if (extra_samples_types[i] == EXTRASAMPLE_ASSOCALPHA) { if (header->alpha_band != -1) g_warning("%s", _("more than one alpha -- ignoring")); header->alpha_band = header->samples_per_pixel - extra_samples_count + i; } } return 0; } static int rtiff_header_equal(RtiffHeader *h1, RtiffHeader *h2) { if (h1->width != h2->width || h1->height != h2->height || h1->samples_per_pixel != h2->samples_per_pixel || h1->bits_per_sample != h2->bits_per_sample || h1->photometric_interpretation != h2->photometric_interpretation || h1->sample_format != h2->sample_format || h1->compression != h2->compression || h1->separate != h2->separate || h1->tiled != h2->tiled || h1->orientation != h2->orientation) return 0; if (h1->tiled) { if (h1->tile_width != h2->tile_width || h1->tile_height != h2->tile_height) return 0; } else { if (h1->read_height != h2->read_height || h1->read_size != h2->read_size || h1->number_of_strips != h2->number_of_strips) return 0; } return 1; } static int rtiff_header_read_all(Rtiff *rtiff) { #ifdef DEBUG printf("rtiff_header_read_all: reading header for page %d ...\n", rtiff->page); #endif /*DEBUG*/ /* -1 means "to the end". * * We must count pages before selecting and reading the header of the * first page, since scanning a TIFF can change the value of libtiff's * internal header fields in strange ways, especially if the TIFF is * corrupt. */ rtiff->n_pages = rtiff_n_pages(rtiff); if (rtiff_set_page(rtiff, rtiff->page) || rtiff_header_read(rtiff, &rtiff->header)) return -1; /* If we're to read many pages, verify that they are all identical. */ if (rtiff->n == -1) rtiff->n = rtiff->n_pages - rtiff->page; if (rtiff->n > 1) { int i; for (i = 1; i < rtiff->n; i++) { RtiffHeader header; #ifdef DEBUG printf("rtiff_header_read_all: verifying header for page %d ...\n", rtiff->page + i); #endif /*DEBUG*/ if (rtiff_set_page(rtiff, rtiff->page + i) || rtiff_header_read(rtiff, &header)) return -1; if (!rtiff_header_equal(&rtiff->header, &header)) { vips_error("tiff2vips", _("page %d differs from page %d"), rtiff->page + i, rtiff->page); return -1; } } /* Make sure the next set_page() will reread the directory. */ rtiff->current_page = -1; } return 0; } typedef gboolean (*TiffPropertyFn)(TIFF *tif); static gboolean vips__testtiff_source(VipsSource *source, TiffPropertyFn fn) { TIFF *tif; gboolean property; vips__tiff_init(); if (!(tif = vips__tiff_openin_source(source))) { vips_error_clear(); return FALSE; } property = fn ? fn(tif) : TRUE; TIFFClose(tif); return property; } gboolean vips__istiff_source(VipsSource *source) { return vips__testtiff_source(source, NULL); } gboolean vips__istifftiled_source(VipsSource *source) { return vips__testtiff_source(source, TIFFIsTiled); } int vips__tiff_read_header_source(VipsSource *source, VipsImage *out, int page, int n, gboolean autorotate, int subifd, VipsFailOn fail_on) { Rtiff *rtiff; vips__tiff_init(); if (!(rtiff = rtiff_new(source, out, page, n, autorotate, subifd, fail_on)) || rtiff_header_read_all(rtiff)) return -1; if (rtiff_set_header(rtiff, out)) return -1; if (rtiff->autorotate && vips_image_get_orientation_swap(out)) { VIPS_SWAP(int, out->Xsize, out->Ysize); vips_autorot_remove_angle(out); } /* We never call vips_source_decode() since we need to be able to * seek() the whole way through the file. Just minimise instead, */ vips_source_minimise(source); return 0; } int vips__tiff_read_source(VipsSource *source, VipsImage *out, int page, int n, gboolean autorotate, int subifd, VipsFailOn fail_on) { Rtiff *rtiff; #ifdef DEBUG printf("tiff2vips: libtiff version is \"%s\"\n", TIFFGetVersion()); #endif /*DEBUG*/ vips__tiff_init(); if (!(rtiff = rtiff_new(source, out, page, n, autorotate, subifd, fail_on)) || rtiff_header_read_all(rtiff)) return -1; if (rtiff->header.tiled) { if (rtiff_read_tilewise(rtiff, out)) return -1; } else { if (rtiff_read_stripwise(rtiff, out)) return -1; } /* We never call vips_source_decode() since we need to be able to * seek() the whole way through the file. Just minimise instead, */ vips_source_minimise(source); return 0; } #endif /*HAVE_TIFF*/ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libvips-8.15.1/libvips/foreign/tiffload.c�����������������������������������������������������������0000664�0000000�0000000�00000036451�14540073735�0020334�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* load tiff from a file * * 5/12/11 * - from tiffload.c * 27/1/17 * - add get_flags for buffer loader */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pforeign.h" #ifdef HAVE_TIFF typedef struct _VipsForeignLoadTiff { VipsForeignLoad parent_object; /* Set by subclasses. */ VipsSource *source; /* Load this page. */ int page; /* Load this many pages. */ int n; /* Select subifd index. -1 for main image. */ int subifd; /* Autorotate using orientation tag. */ gboolean autorotate; } VipsForeignLoadTiff; typedef VipsForeignLoadClass VipsForeignLoadTiffClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignLoadTiff, vips_foreign_load_tiff, VIPS_TYPE_FOREIGN_LOAD); static void vips_foreign_load_tiff_dispose(GObject *gobject) { VipsForeignLoadTiff *tiff = (VipsForeignLoadTiff *) gobject; VIPS_UNREF(tiff->source); G_OBJECT_CLASS(vips_foreign_load_tiff_parent_class)->dispose(gobject); } static VipsForeignFlags vips_foreign_load_tiff_get_flags_source(VipsSource *source) { VipsForeignFlags flags; flags = 0; if (vips__istifftiled_source(source)) flags |= VIPS_FOREIGN_PARTIAL; else flags |= VIPS_FOREIGN_SEQUENTIAL; return flags; } static VipsForeignFlags vips_foreign_load_tiff_get_flags_filename(const char *filename) { VipsSource *source; VipsForeignFlags flags; if (!(source = vips_source_new_from_file(filename))) return 0; flags = vips_foreign_load_tiff_get_flags_source(source); VIPS_UNREF(source); return flags; } static VipsForeignFlags vips_foreign_load_tiff_get_flags(VipsForeignLoad *load) { VipsForeignLoadTiff *tiff = (VipsForeignLoadTiff *) load; return vips_foreign_load_tiff_get_flags_source(tiff->source); } static int vips_foreign_load_tiff_header(VipsForeignLoad *load) { VipsForeignLoadTiff *tiff = (VipsForeignLoadTiff *) load; if (vips__tiff_read_header_source(tiff->source, load->out, tiff->page, tiff->n, tiff->autorotate, tiff->subifd, load->fail_on)) return -1; return 0; } static int vips_foreign_load_tiff_load(VipsForeignLoad *load) { VipsForeignLoadTiff *tiff = (VipsForeignLoadTiff *) load; if (vips__tiff_read_source(tiff->source, load->real, tiff->page, tiff->n, tiff->autorotate, tiff->subifd, load->fail_on)) return -1; return 0; } static void vips_foreign_load_tiff_class_init(VipsForeignLoadTiffClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; /* Other libraries may be using libtiff, we want to capture tiff * warning and error as soon as we can. * * This class init will be triggered during startup. */ vips__tiff_init(); gobject_class->dispose = vips_foreign_load_tiff_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "tiffload_base"; object_class->description = _("load tiff"); /* We are fast, but must test after openslideload. */ foreign_class->priority = 50; load_class->get_flags_filename = vips_foreign_load_tiff_get_flags_filename; load_class->get_flags = vips_foreign_load_tiff_get_flags; load_class->header = vips_foreign_load_tiff_header; load_class->load = vips_foreign_load_tiff_load; VIPS_ARG_INT(class, "page", 20, _("Page"), _("First page to load"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadTiff, page), 0, 100000, 0); VIPS_ARG_INT(class, "n", 21, _("n"), _("Number of pages to load, -1 for all"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadTiff, n), -1, 100000, 1); VIPS_ARG_BOOL(class, "autorotate", 22, _("Autorotate"), _("Rotate image using orientation tag"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadTiff, autorotate), FALSE); VIPS_ARG_INT(class, "subifd", 21, _("subifd"), _("Subifd index"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadTiff, subifd), -1, 100000, -1); } static void vips_foreign_load_tiff_init(VipsForeignLoadTiff *tiff) { tiff->page = 0; tiff->n = 1; tiff->subifd = -1; } typedef struct _VipsForeignLoadTiffSource { VipsForeignLoadTiff parent_object; /* Load from a source. */ VipsSource *source; } VipsForeignLoadTiffSource; typedef VipsForeignLoadTiffClass VipsForeignLoadTiffSourceClass; G_DEFINE_TYPE(VipsForeignLoadTiffSource, vips_foreign_load_tiff_source, vips_foreign_load_tiff_get_type()); static int vips_foreign_load_tiff_source_build(VipsObject *object) { VipsForeignLoadTiff *tiff = (VipsForeignLoadTiff *) object; VipsForeignLoadTiffSource *source = (VipsForeignLoadTiffSource *) object; if (source->source) { tiff->source = source->source; g_object_ref(tiff->source); } if (VIPS_OBJECT_CLASS(vips_foreign_load_tiff_source_parent_class) ->build(object)) return -1; return 0; } static gboolean vips_foreign_load_tiff_source_is_a_source(VipsSource *source) { return vips__istiff_source(source); } static void vips_foreign_load_tiff_source_class_init( VipsForeignLoadTiffSourceClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "tiffload_source"; object_class->description = _("load tiff from source"); object_class->build = vips_foreign_load_tiff_source_build; operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_tiff_source_is_a_source; VIPS_ARG_OBJECT(class, "source", 1, _("Source"), _("Source to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadTiffSource, source), VIPS_TYPE_SOURCE); } static void vips_foreign_load_tiff_source_init(VipsForeignLoadTiffSource *source) { } typedef struct _VipsForeignLoadTiffFile { VipsForeignLoadTiff parent_object; /* Filename for load. */ char *filename; } VipsForeignLoadTiffFile; typedef VipsForeignLoadTiffClass VipsForeignLoadTiffFileClass; G_DEFINE_TYPE(VipsForeignLoadTiffFile, vips_foreign_load_tiff_file, vips_foreign_load_tiff_get_type()); static int vips_foreign_load_tiff_file_build(VipsObject *object) { VipsForeignLoadTiff *tiff = (VipsForeignLoadTiff *) object; VipsForeignLoadTiffFile *file = (VipsForeignLoadTiffFile *) object; if (file->filename && !(tiff->source = vips_source_new_from_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_tiff_file_parent_class) ->build(object)) return -1; return 0; } static gboolean vips_foreign_load_tiff_file_is_a(const char *filename) { VipsSource *source; gboolean result; if (!(source = vips_source_new_from_file(filename))) return FALSE; result = vips_foreign_load_tiff_source_is_a_source(source); VIPS_UNREF(source); return result; } const char *vips__foreign_tiff_suffs[] = { ".tif", ".tiff", NULL }; static void vips_foreign_load_tiff_file_class_init(VipsForeignLoadTiffFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "tiffload"; object_class->description = _("load tiff from file"); object_class->build = vips_foreign_load_tiff_file_build; foreign_class->suffs = vips__foreign_tiff_suffs; load_class->is_a = vips_foreign_load_tiff_file_is_a; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadTiffFile, filename), NULL); } static void vips_foreign_load_tiff_file_init(VipsForeignLoadTiffFile *file) { } typedef struct _VipsForeignLoadTiffBuffer { VipsForeignLoadTiff parent_object; /* Load from a buffer. */ VipsBlob *blob; } VipsForeignLoadTiffBuffer; typedef VipsForeignLoadTiffClass VipsForeignLoadTiffBufferClass; G_DEFINE_TYPE(VipsForeignLoadTiffBuffer, vips_foreign_load_tiff_buffer, vips_foreign_load_tiff_get_type()); static int vips_foreign_load_tiff_buffer_build(VipsObject *object) { VipsForeignLoadTiff *tiff = (VipsForeignLoadTiff *) object; VipsForeignLoadTiffBuffer *buffer = (VipsForeignLoadTiffBuffer *) object; if (buffer->blob && !(tiff->source = vips_source_new_from_memory( VIPS_AREA(buffer->blob)->data, VIPS_AREA(buffer->blob)->length))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_tiff_buffer_parent_class) ->build(object)) return -1; return 0; } static gboolean vips_foreign_load_tiff_buffer_is_a_buffer(const void *buf, size_t len) { VipsSource *source; gboolean result; if (!(source = vips_source_new_from_memory(buf, len))) return FALSE; result = vips_foreign_load_tiff_source_is_a_source(source); VIPS_UNREF(source); return result; } static void vips_foreign_load_tiff_buffer_class_init( VipsForeignLoadTiffBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "tiffload_buffer"; object_class->description = _("load tiff from buffer"); object_class->build = vips_foreign_load_tiff_buffer_build; load_class->is_a_buffer = vips_foreign_load_tiff_buffer_is_a_buffer; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadTiffBuffer, blob), VIPS_TYPE_BLOB); } static void vips_foreign_load_tiff_buffer_init(VipsForeignLoadTiffBuffer *buffer) { } #endif /*HAVE_TIFF*/ /** * vips_tiffload: * @filename: file to load * @out: (out): decompressed image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @page: %gint, load this page * * @n: %gint, load this many pages * * @autorotate: %gboolean, use orientation tag to rotate the image * during load * * @subifd: %gint, select this subifd index * * Read a TIFF file into a VIPS image. It is a full baseline TIFF 6 reader, * with extensions for tiled images, multipage images, XYZ and LAB colour * space, pyramidal images and JPEG compression, including CMYK and YCbCr. * * @page means load this page from the file. By default the first page (page * 0) is read. * * @n means load this many pages. By default a single page is read. All the * pages must have the same dimensions, and they are loaded as a tall, thin * "toilet roll" image. The #VIPS_META_PAGE_HEIGHT metadata * tag gives the height in pixels of each page. Use -1 to load all pages. * * Setting @autorotate to %TRUE will make the loader interpret the * orientation tag and automatically rotate the image appropriately during * load. * * If @autorotate is %FALSE, the metadata field #VIPS_META_ORIENTATION is set * to the value of the orientation tag. Applications may read and interpret * this field * as they wish later in processing. See vips_autorot(). Save * operations will use #VIPS_META_ORIENTATION, if present, to set the * orientation of output images. * * If @autorotate is TRUE, the image will be rotated upright during load and * no metadata attached. This can be very slow. * * If @subifd is -1 (the default), the main image is selected for each page. * If it is 0 or greater and there is a SUBIFD tag, the indexed SUBIFD is * selected. This can be used to read lower resolution layers from * bioformats-style image pyramids. * * Any ICC profile is read and attached to the VIPS image as * #VIPS_META_ICC_NAME. Any XMP metadata is read and attached to the image * as #VIPS_META_XMP_NAME. Any IPTC is attached as #VIPS_META_IPTC_NAME. The * image description is * attached as #VIPS_META_IMAGEDESCRIPTION. Data in the photoshop tag is * attached as #VIPS_META_PHOTOSHOP_NAME. * * See also: vips_image_new_from_file(), vips_autorot(). * * Returns: 0 on success, -1 on error. */ int vips_tiffload(const char *filename, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("tiffload", ap, filename, out); va_end(ap); return result; } /** * vips_tiffload_buffer: * @buf: (array length=len) (element-type guint8): memory area to load * @len: (type gsize): size of memory area * @out: (out): image to write * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @page: %gint, load this page * * @n: %gint, load this many pages * * @autorotate: %gboolean, use orientation tag to rotate the image * during load * * @subifd: %gint, select this subifd index * * Read a TIFF-formatted memory block into a VIPS image. Exactly as * vips_tiffload(), but read from a memory source. * * You must not free the buffer while @out is active. The * #VipsObject::postclose signal on @out is a good place to free. * * See also: vips_tiffload(). * * Returns: 0 on success, -1 on error. */ int vips_tiffload_buffer(void *buf, size_t len, VipsImage **out, ...) { va_list ap; VipsBlob *blob; int result; /* We don't take a copy of the data or free it. */ blob = vips_blob_new(NULL, buf, len); va_start(ap, out); result = vips_call_split("tiffload_buffer", ap, blob, out); va_end(ap); vips_area_unref(VIPS_AREA(blob)); return result; } /** * vips_tiffload_source: * @source: source to load * @out: (out): image to write * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @page: %gint, load this page * * @n: %gint, load this many pages * * @autorotate: %gboolean, use orientation tag to rotate the image * during load * * @subifd: %gint, select this subifd index * * Exactly as vips_tiffload(), but read from a source. * * See also: vips_tiffload(). * * Returns: 0 on success, -1 on error. */ int vips_tiffload_source(VipsSource *source, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("tiffload_source", ap, source, out); va_end(ap); return result; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������libvips-8.15.1/libvips/foreign/tiffsave.c�����������������������������������������������������������0000664�0000000�0000000�00000060756�14540073735�0020360�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* save to tiff * * 2/12/11 * - wrap a class around the tiff writer * 17/3/12 * - argh xres/yres macro was wrong * 26/1/14 * - add rgbjpeg flag * 21/12/15 * - add properties flag * 31/5/16 * - convert for jpg if jpg compression is on * 19/10/17 * - predictor defaults to horizontal, reducing file size, usually * 13/6/18 * - add region_shrink * 8/7/19 * - add webp and zstd support * - add @level and @lossless * 4/9/18 [f--f] * - xres/yres params were in pixels/cm * 26/1/20 * - add "depth" to set pyr depth * 12/5/20 * - add "subifd" to create pyr layers as sub-directories * 8/6/20 * - add bitdepth support for 2 and 4 bit greyscale images * - deprecate "squash" * 1/5/21 * - add "premultiply" flag * 10/5/22 * - add vips_tiffsave_target() */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pforeign.h" #ifdef HAVE_TIFF #include "tiff.h" typedef struct _VipsForeignSaveTiff { VipsForeignSave parent_object; /* Set by subclasses. */ VipsTarget *target; /* Many options argh. */ VipsForeignTiffCompression compression; int Q; VipsForeignTiffPredictor predictor; gboolean tile; int tile_width; int tile_height; gboolean pyramid; gboolean squash; int bitdepth; gboolean miniswhite; VipsForeignTiffResunit resunit; double xres; double yres; gboolean bigtiff; gboolean rgbjpeg; gboolean properties; VipsRegionShrink region_shrink; int level; gboolean lossless; VipsForeignDzDepth depth; gboolean subifd; gboolean premultiply; } VipsForeignSaveTiff; typedef VipsForeignSaveClass VipsForeignSaveTiffClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignSaveTiff, vips_foreign_save_tiff, VIPS_TYPE_FOREIGN_SAVE); static void vips_foreign_save_tiff_dispose(GObject *gobject) { VipsForeignSaveTiff *tiff = (VipsForeignSaveTiff *) gobject; VIPS_UNREF(tiff->target); G_OBJECT_CLASS(vips_foreign_save_tiff_parent_class)->dispose(gobject); } #define UC VIPS_FORMAT_UCHAR /* Type promotion for jpeg-in-tiff save ... just always go to uchar. */ static VipsBandFormat bandfmt_jpeg[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, UC, UC, UC, UC, UC, UC, UC, UC, UC }; static int vips_foreign_save_tiff_build(VipsObject *object) { VipsForeignSaveClass *class = VIPS_FOREIGN_SAVE_GET_CLASS(object); VipsForeignSave *save = (VipsForeignSave *) object; VipsForeignSaveTiff *tiff = (VipsForeignSaveTiff *) object; const char *p; /* If we are saving jpeg-in-tiff, we need a different convert_saveable * path. The regular tiff one will let through things like float and * 16-bit and alpha for example, which will make the jpeg saver choke. */ if (save->in && tiff->compression == VIPS_FOREIGN_TIFF_COMPRESSION_JPEG) { VipsImage *x; /* See also vips_foreign_save_jpeg_class_init(). */ if (vips__foreign_convert_saveable(save->in, &x, VIPS_SAVEABLE_RGB_CMYK, bandfmt_jpeg, class->coding, save->background)) return -1; g_object_set(object, "in", x, NULL); g_object_unref(x); } if (VIPS_OBJECT_CLASS(vips_foreign_save_tiff_parent_class)->build(object)) return -1; /* Default xres/yres to the values from the image. This is always * pixels/mm. */ if (!vips_object_argument_isset(object, "xres")) tiff->xres = save->ready->Xres; if (!vips_object_argument_isset(object, "yres")) tiff->yres = save->ready->Yres; /* We default to pixels/cm. */ tiff->xres *= 10.0; tiff->yres *= 10.0; /* resunit param overrides resunit metadata. */ if (!vips_object_argument_isset(object, "resunit") && vips_image_get_typeof(save->ready, VIPS_META_RESOLUTION_UNIT) && !vips_image_get_string(save->ready, VIPS_META_RESOLUTION_UNIT, &p) && vips_isprefix("in", p)) tiff->resunit = VIPS_FOREIGN_TIFF_RESUNIT_INCH; if (tiff->resunit == VIPS_FOREIGN_TIFF_RESUNIT_INCH) { tiff->xres *= 2.54; tiff->yres *= 2.54; } /* Handle the deprecated squash parameter. */ if (tiff->squash) /* We set that even in the case of LAB to LABQ. */ tiff->bitdepth = 1; if (vips__tiff_write_target(save->ready, tiff->target, tiff->compression, tiff->Q, tiff->predictor, save->profile, tiff->tile, tiff->tile_width, tiff->tile_height, tiff->pyramid, tiff->bitdepth, tiff->miniswhite, tiff->resunit, tiff->xres, tiff->yres, tiff->bigtiff, tiff->rgbjpeg, tiff->properties, tiff->region_shrink, tiff->level, tiff->lossless, tiff->depth, tiff->subifd, tiff->premultiply, save->page_height)) return -1; if (vips_target_end(tiff->target)) return -1; return 0; } static void vips_foreign_save_tiff_class_init(VipsForeignSaveTiffClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class; gobject_class->dispose = vips_foreign_save_tiff_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "tiffsave_base"; object_class->description = _("save image as tiff"); object_class->build = vips_foreign_save_tiff_build; foreign_class->suffs = vips__foreign_tiff_suffs; save_class->saveable = VIPS_SAVEABLE_ANY; save_class->coding[VIPS_CODING_LABQ] = TRUE; VIPS_ARG_ENUM(class, "compression", 6, _("Compression"), _("Compression for this file"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveTiff, compression), VIPS_TYPE_FOREIGN_TIFF_COMPRESSION, VIPS_FOREIGN_TIFF_COMPRESSION_NONE); VIPS_ARG_INT(class, "Q", 7, _("Q"), _("Q factor"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveTiff, Q), 1, 100, 75); VIPS_ARG_ENUM(class, "predictor", 8, _("Predictor"), _("Compression prediction"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveTiff, predictor), VIPS_TYPE_FOREIGN_TIFF_PREDICTOR, VIPS_FOREIGN_TIFF_PREDICTOR_HORIZONTAL); VIPS_ARG_BOOL(class, "tile", 10, _("Tile"), _("Write a tiled tiff"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveTiff, tile), FALSE); VIPS_ARG_INT(class, "tile_width", 11, _("Tile width"), _("Tile width in pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveTiff, tile_width), 1, 32768, 128); VIPS_ARG_INT(class, "tile_height", 12, _("Tile height"), _("Tile height in pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveTiff, tile_height), 1, 32768, 128); VIPS_ARG_BOOL(class, "pyramid", 13, _("Pyramid"), _("Write a pyramidal tiff"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveTiff, pyramid), FALSE); VIPS_ARG_BOOL(class, "miniswhite", 14, _("Miniswhite"), _("Use 0 for white in 1-bit images"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveTiff, miniswhite), FALSE); VIPS_ARG_INT(class, "bitdepth", 15, _("Bit depth"), _("Write as a 1, 2, 4 or 8 bit image"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveTiff, bitdepth), 0, 8, 0); VIPS_ARG_ENUM(class, "resunit", 16, _("Resolution unit"), _("Resolution unit"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveTiff, resunit), VIPS_TYPE_FOREIGN_TIFF_RESUNIT, VIPS_FOREIGN_TIFF_RESUNIT_CM); VIPS_ARG_DOUBLE(class, "xres", 17, _("Xres"), _("Horizontal resolution in pixels/mm"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveTiff, xres), 0.001, 1000000, 1); VIPS_ARG_DOUBLE(class, "yres", 18, _("Yres"), _("Vertical resolution in pixels/mm"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveTiff, yres), 0.001, 1000000, 1); VIPS_ARG_BOOL(class, "bigtiff", 19, _("Bigtiff"), _("Write a bigtiff image"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveTiff, bigtiff), FALSE); VIPS_ARG_BOOL(class, "properties", 21, _("Properties"), _("Write a properties document to IMAGEDESCRIPTION"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveTiff, properties), FALSE); VIPS_ARG_ENUM(class, "region_shrink", 22, _("Region shrink"), _("Method to shrink regions"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveTiff, region_shrink), VIPS_TYPE_REGION_SHRINK, VIPS_REGION_SHRINK_MEAN); VIPS_ARG_INT(class, "level", 23, _("Level"), _("ZSTD compression level"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveTiff, level), 1, 22, 10); VIPS_ARG_BOOL(class, "lossless", 24, _("Lossless"), _("Enable WEBP lossless mode"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveTiff, lossless), FALSE); VIPS_ARG_ENUM(class, "depth", 25, _("Depth"), _("Pyramid depth"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveTiff, depth), VIPS_TYPE_FOREIGN_DZ_DEPTH, VIPS_FOREIGN_DZ_DEPTH_ONETILE); VIPS_ARG_BOOL(class, "subifd", 26, _("Sub-IFD"), _("Save pyr layers as sub-IFDs"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveTiff, subifd), FALSE); VIPS_ARG_BOOL(class, "premultiply", 27, _("Premultiply"), _("Save with premultiplied alpha"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveTiff, premultiply), FALSE); VIPS_ARG_BOOL(class, "rgbjpeg", 28, _("RGB JPEG"), _("Output RGB JPEG rather than YCbCr"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsForeignSaveTiff, rgbjpeg), FALSE); VIPS_ARG_BOOL(class, "squash", 29, _("Squash"), _("Squash images down to 1 bit"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsForeignSaveTiff, squash), FALSE); } static void vips_foreign_save_tiff_init(VipsForeignSaveTiff *tiff) { tiff->compression = VIPS_FOREIGN_TIFF_COMPRESSION_NONE; tiff->Q = 75; tiff->predictor = VIPS_FOREIGN_TIFF_PREDICTOR_HORIZONTAL; tiff->tile_width = 128; tiff->tile_height = 128; tiff->resunit = VIPS_FOREIGN_TIFF_RESUNIT_CM; tiff->xres = 1.0; tiff->yres = 1.0; tiff->region_shrink = VIPS_REGION_SHRINK_MEAN; tiff->level = 10; tiff->lossless = FALSE; tiff->depth = VIPS_FOREIGN_DZ_DEPTH_ONETILE; tiff->bitdepth = 0; } typedef struct _VipsForeignSaveTiffTarget { VipsForeignSaveTiff parent_object; VipsTarget *target; } VipsForeignSaveTiffTarget; typedef VipsForeignSaveTiffClass VipsForeignSaveTiffTargetClass; G_DEFINE_TYPE(VipsForeignSaveTiffTarget, vips_foreign_save_tiff_target, vips_foreign_save_tiff_get_type()); static int vips_foreign_save_tiff_target_build(VipsObject *object) { VipsForeignSaveTiff *tiff = (VipsForeignSaveTiff *) object; VipsForeignSaveTiffTarget *target = (VipsForeignSaveTiffTarget *) object; tiff->target = target->target; g_object_ref(tiff->target); if (VIPS_OBJECT_CLASS(vips_foreign_save_tiff_target_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_save_tiff_target_class_init( VipsForeignSaveTiffTargetClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "tiffsave_target"; object_class->description = _("save image to tiff target"); object_class->build = vips_foreign_save_tiff_target_build; VIPS_ARG_OBJECT(class, "target", 1, _("Target"), _("Target to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveTiffTarget, target), VIPS_TYPE_TARGET); } static void vips_foreign_save_tiff_target_init(VipsForeignSaveTiffTarget *target) { } typedef struct _VipsForeignSaveTiffFile { VipsForeignSaveTiff parent_object; char *filename; } VipsForeignSaveTiffFile; typedef VipsForeignSaveTiffClass VipsForeignSaveTiffFileClass; G_DEFINE_TYPE(VipsForeignSaveTiffFile, vips_foreign_save_tiff_file, vips_foreign_save_tiff_get_type()); static int vips_foreign_save_tiff_file_build(VipsObject *object) { VipsForeignSaveTiff *tiff = (VipsForeignSaveTiff *) object; VipsForeignSaveTiffFile *file = (VipsForeignSaveTiffFile *) object; if (!(tiff->target = vips_target_new_to_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_save_tiff_file_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_save_tiff_file_class_init(VipsForeignSaveTiffFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "tiffsave"; object_class->description = _("save image to tiff file"); object_class->build = vips_foreign_save_tiff_file_build; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveTiffFile, filename), NULL); } static void vips_foreign_save_tiff_file_init(VipsForeignSaveTiffFile *file) { } typedef struct _VipsForeignSaveTiffBuffer { VipsForeignSaveTiff parent_object; VipsArea *buf; } VipsForeignSaveTiffBuffer; typedef VipsForeignSaveTiffClass VipsForeignSaveTiffBufferClass; G_DEFINE_TYPE(VipsForeignSaveTiffBuffer, vips_foreign_save_tiff_buffer, vips_foreign_save_tiff_get_type()); static int vips_foreign_save_tiff_buffer_build(VipsObject *object) { VipsForeignSaveTiff *tiff = (VipsForeignSaveTiff *) object; VipsForeignSaveTiffBuffer *buffer = (VipsForeignSaveTiffBuffer *) object; VipsBlob *blob; if (!(tiff->target = vips_target_new_to_memory())) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_save_tiff_buffer_parent_class) ->build(object)) return -1; g_object_get(tiff->target, "blob", &blob, NULL); g_object_set(buffer, "buffer", blob, NULL); vips_area_unref(VIPS_AREA(blob)); return 0; } static void vips_foreign_save_tiff_buffer_class_init( VipsForeignSaveTiffBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "tiffsave_buffer"; object_class->description = _("save image to tiff buffer"); object_class->build = vips_foreign_save_tiff_buffer_build; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to save to"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsForeignSaveTiffBuffer, buf), VIPS_TYPE_BLOB); } static void vips_foreign_save_tiff_buffer_init(VipsForeignSaveTiffBuffer *buffer) { } #endif /*HAVE_TIFF*/ /** * vips_tiffsave: (method) * @in: image to save * @filename: file to write to * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @compression: use this #VipsForeignTiffCompression * * @Q: %gint quality factor * * @predictor: use this #VipsForeignTiffPredictor * * @tile: %gboolean, set %TRUE to write a tiled tiff * * @tile_width: %gint for tile size * * @tile_height: %gint for tile size * * @pyramid: %gboolean, write an image pyramid * * @bitdepth: %int, change bit depth to 1,2, or 4 bit * * @miniswhite: %gboolean, write 1-bit images as MINISWHITE * * @resunit: #VipsForeignTiffResunit for resolution unit * * @xres: %gdouble horizontal resolution in pixels/mm * * @yres: %gdouble vertical resolution in pixels/mm * * @bigtiff: %gboolean, write a BigTiff file * * @properties: %gboolean, set %TRUE to write an IMAGEDESCRIPTION tag * * @region_shrink: #VipsRegionShrink How to shrink each 2x2 region. * * @level: %gint, Zstd compression level * * @lossless: %gboolean, WebP lossless mode * * @depth: #VipsForeignDzDepth how deep to make the pyramid * * @subifd: %gboolean write pyr layers as sub-ifds * * @premultiply: %gboolean write premultiplied alpha * * Write a VIPS image to a file as TIFF. * * If @in has the #VIPS_META_PAGE_HEIGHT metadata item, this is assumed to be a * "toilet roll" image. It will be * written as series of pages, each #VIPS_META_PAGE_HEIGHT pixels high. * * Use @compression to set the tiff compression. Currently jpeg, packbits, * fax4, lzw, none, deflate, webp and zstd are supported. The default is no * compression. * JPEG compression is a good lossy compressor for photographs, packbits is * good for 1-bit images, and deflate is the best lossless compression TIFF * can do. * * XYZ images are automatically saved as libtiff LOGLUV with SGILOG compression. * Float LAB images are saved as float CIELAB. Set @bitdepth to save as 8-bit * CIELAB. * * Use @Q to set the JPEG compression factor. Default 75. * * User @level to set the ZSTD compression level. Use @lossless to * set WEBP lossless mode on. Use @Q to set the WEBP compression level. * * Use @predictor to set the predictor for lzw, deflate and zstd compression. * It defaults to #VIPS_FOREIGN_TIFF_PREDICTOR_HORIZONTAL, meaning horizontal * differencing. Please refer to the libtiff * specifications for further discussion of various predictors. * * Set @tile to TRUE to write a tiled tiff. By default tiff are written in * strips. Use @tile_width and @tile_height to set the tile size. The defaiult * is 128 by 128. * * Set @pyramid to write the image as a set of images, one per page, of * decreasing size. Use @region_shrink to set how images will be shrunk: by * default each 2x2 block is just averaged, but you can set MODE or MEDIAN as * well. * * By default, the pyramid stops when the image is small enough to fit in one * tile. Use @depth to stop when the image fits in one pixel, or to only write * a single layer. * * Set @bitdepth to save 8-bit uchar images as 1, 2 or 4-bit TIFFs. * In case of depth 1: Values >128 are written as white, values <=128 as black. * Normally vips will write MINISBLACK TIFFs where black is a 0 bit, but if you * set @miniswhite, it will use 0 for a white bit. Many pre-press applications * only work with images which use this sense. @miniswhite only affects one-bit * images, it does nothing for greyscale images. * In case of depth 2: The same holds but values < 64 are written as black. * For 64 <= values < 128 they are written as dark grey, for 128 <= values < 192 * they are written as light gray and values above are written as white. * In case @miniswhite is set to true this behavior is inverted. * In case of depth 4: values < 16 are written as black, and so on for the * lighter shades. In case @miniswhite is set to true this behavior is inverted. * * Use @resunit to override the default resolution unit. * The default * resolution unit is taken from the header field * #VIPS_META_RESOLUTION_UNIT. If this field is not set, then * VIPS defaults to cm. * * Use @xres and @yres to override the default horizontal and vertical * resolutions. By default these values are taken from the VIPS image header. * libvips resolution is always in pixels per millimetre. * * Set @bigtiff to attempt to write a bigtiff. Bigtiff is a variant of the TIFF * format that allows more than 4GB in a file. * * Set @properties to write all vips metadata to the IMAGEDESCRIPTION tag as * xml. If @properties is not set, the value of #VIPS_META_IMAGEDESCRIPTION is * used instead. * * The value of #VIPS_META_XMP_NAME is written to * the XMP tag. #VIPS_META_ORIENTATION (if set) is used to set the value of * the orientation * tag. #VIPS_META_IPTC (if set) is used to set the value of the IPTC tag. * #VIPS_META_PHOTOSHOP_NAME (if set) is used to set the value of the PHOTOSHOP * tag. * * By default, pyramid layers are saved as consecutive pages. * Set @subifd to save pyramid layers as sub-directories of the main image. * Setting this option can improve compatibility with formats like OME. * * Set @premultiply to save with premultiplied alpha. Some programs, such as * InDesign, will only work with premultiplied alpha. * * See also: vips_tiffload(), vips_image_write_to_file(). * * Returns: 0 on success, -1 on error. */ int vips_tiffsave(VipsImage *in, const char *filename, ...) { va_list ap; int result; va_start(ap, filename); result = vips_call_split("tiffsave", ap, in, filename); va_end(ap); return result; } /** * vips_tiffsave_buffer: (method) * @in: image to save * @buf: (array length=len) (element-type guint8): return output buffer here * @len: (type gsize): return output length here * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @compression: use this #VipsForeignTiffCompression * * @Q: %gint quality factor * * @predictor: use this #VipsForeignTiffPredictor * * @tile: %gboolean, set %TRUE to write a tiled tiff * * @tile_width: %gint for tile size * * @tile_height: %gint for tile size * * @pyramid: %gboolean, write an image pyramid * * @bitdepth: %int, set write bit depth to 1, 2, 4 or 8 * * @miniswhite: %gboolean, write 1-bit images as MINISWHITE * * @resunit: #VipsForeignTiffResunit for resolution unit * * @xres: %gdouble horizontal resolution in pixels/mm * * @yres: %gdouble vertical resolution in pixels/mm * * @bigtiff: %gboolean, write a BigTiff file * * @properties: %gboolean, set %TRUE to write an IMAGEDESCRIPTION tag * * @region_shrink: #VipsRegionShrink How to shrink each 2x2 region. * * @level: %gint, Zstd compression level * * @lossless: %gboolean, WebP lossless mode * * @depth: #VipsForeignDzDepth how deep to make the pyramid * * @subifd: %gboolean write pyr layers as sub-ifds * * @premultiply: %gboolean write premultiplied alpha * * As vips_tiffsave(), but save to a memory buffer. * * The address of the buffer is returned in @buf, the length of the buffer in * @len. You are responsible for freeing the buffer with g_free() when you * are done with it. * * See also: vips_tiffsave(), vips_image_write_to_file(). * * Returns: 0 on success, -1 on error. */ int vips_tiffsave_buffer(VipsImage *in, void **buf, size_t *len, ...) { va_list ap; VipsArea *area; int result; area = NULL; va_start(ap, len); result = vips_call_split("tiffsave_buffer", ap, in, &area); va_end(ap); if (!result && area) { if (buf) { *buf = area->data; area->free_fn = NULL; } if (len) *len = area->length; vips_area_unref(area); } return result; } /** * vips_tiffsave_target: (method) * @in: image to save * @target: save image to this target * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @compression: use this #VipsForeignTiffCompression * * @Q: %gint quality factor * * @predictor: use this #VipsForeignTiffPredictor * * @tile: %gboolean, set %TRUE to write a tiled tiff * * @tile_width: %gint for tile size * * @tile_height: %gint for tile size * * @pyramid: %gboolean, write an image pyramid * * @bitdepth: %int, set write bit depth to 1, 2, 4 or 8 * * @miniswhite: %gboolean, write 1-bit images as MINISWHITE * * @resunit: #VipsForeignTiffResunit for resolution unit * * @xres: %gdouble horizontal resolution in pixels/mm * * @yres: %gdouble vertical resolution in pixels/mm * * @bigtiff: %gboolean, write a BigTiff file * * @properties: %gboolean, set %TRUE to write an IMAGEDESCRIPTION tag * * @region_shrink: #VipsRegionShrink How to shrink each 2x2 region. * * @level: %gint, Zstd compression level * * @lossless: %gboolean, WebP lossless mode * * @depth: #VipsForeignDzDepth how deep to make the pyramid * * @subifd: %gboolean write pyr layers as sub-ifds * * @premultiply: %gboolean write premultiplied alpha * * As vips_tiffsave(), but save to a target. * * See also: vips_tiffsave(), vips_image_write_to_target(). * * Returns: 0 on success, -1 on error. */ int vips_tiffsave_target(VipsImage *in, VipsTarget *target, ...) { va_list ap; int result; va_start(ap, target); result = vips_call_split("tiffsave_target", ap, in, target); va_end(ap); return result; } ������������������libvips-8.15.1/libvips/foreign/vips2jpeg.c����������������������������������������������������������0000664�0000000�0000000�00000061657�14540073735�0020463�0����������������������������������������������������������������������������������������������������ustar�00root����������������������������root����������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* wrap jpeg library for write * * 28/11/03 JC * - better no-overshoot on tile loop * 12/11/04 * - better demand size choice for eval * 30/6/05 JC * - update im_error()/im_warn() * - now loads and saves exif data * 30/7/05 * - now loads ICC profiles * - now saves ICC profiles from the VIPS header * 24/8/05 * - jpeg load sets vips xres/yres from exif, if possible * - jpeg save sets exif xres/yres from vips, if possible * 29/8/05 * - cut from old vips_jpeg.c * 20/4/06 * - auto convert to sRGB/mono for save * 13/10/06 * - add = 90 * 7/11/16 * - move exif handling out to exif.c * 27/2/17 * - use dbuf for memory output * 19/12/17 Lovell * - fix a leak with an error during buffer output * 19/4/19 * - fix another leak with error during buffer output * 19/7/19 * - ignore large XMP * 14/10/19 * - revise for target IO * 18/2/20 Elad-Laufer * - add subsample_mode, deprecate no_subsample * 13/9/20 * - only write JFIF resolution if we don't have EXIF * 7/10/21 Manthey * - add restart_interval * 21/10/21 usualuse * - raise single-chunk limit on APP to 65533 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "pforeign.h" #ifdef HAVE_JPEG #include "jpeg.h" #define ICC_MARKER (JPEG_APP0 + 2) /* JPEG marker code for ICC */ #define ICC_OVERHEAD_LEN 14 /* size of non-profile data in APP2 */ #define MAX_BYTES_IN_MARKER 65533 /* maximum data len of a JPEG marker */ #define MAX_DATA_BYTES_IN_MARKER (MAX_BYTES_IN_MARKER - ICC_OVERHEAD_LEN) /* New output message method - send to VIPS. */ void vips__new_output_message(j_common_ptr cinfo) { char buffer[JMSG_LENGTH_MAX]; (*cinfo->err->format_message)(cinfo, buffer); vips_error("VipsJpeg", _("%s"), buffer); #ifdef DEBUG printf("vips__new_output_message: \"%s\"\n", buffer); #endif /*DEBUG*/ } /* New error_exit handler. */ void vips__new_error_exit(j_common_ptr cinfo) { ErrorManager *eman = (ErrorManager *) cinfo->err; #ifdef DEBUG printf("vips__new_error_exit:\n"); #endif /*DEBUG*/ /* Close the fp if necessary. */ if (eman->fp) { (void) fclose(eman->fp); eman->fp = NULL; } /* Send the error message to VIPS. This method is overridden above. */ (*cinfo->err->output_message)(cinfo); /* Jump back. */ longjmp(eman->jmp, 1); } /* What we track during a JPEG write. */ typedef struct { struct jpeg_compress_struct cinfo; ErrorManager eman; JSAMPROW *row_pointer; gboolean invert; } Write; static void write_destroy(Write *write) { jpeg_destroy_compress(&write->cinfo); VIPS_FREE(write->row_pointer); g_free(write); } static Write * write_new(void) { Write *write; if (!(write = g_new0(Write, 1))) return NULL; write->row_pointer = NULL; write->cinfo.err = jpeg_std_error(&write->eman.pub); write->cinfo.dest = NULL; write->eman.pub.error_exit = vips__new_error_exit; write->eman.pub.output_message = vips__new_output_message; write->eman.fp = NULL; write->invert = FALSE; return write; } static int write_blob(Write *write, VipsImage *image, const char *field, int app) { unsigned char *data; size_t data_length; if (!vips_image_get_typeof(image, field)) return 0; if (vips_image_get_blob(image, field, (void *) &data, &data_length)) return -1; /* Single jpeg markers can only hold 64kb, large objects must * be split into multiple markers. * * Unfortunately, how this splitting is done depends on the * data type. For example, ICC and XMP have completely * different ways of doing this. * * For now, just ignore oversize objects and warn. */ if (data_length > MAX_BYTES_IN_MARKER) g_warning(_("field \"%s\" is too large " "for a single JPEG marker, ignoring"), field); else { #ifdef DEBUG printf("write_blob: attaching %zd bytes of %s\n", data_length, field); #endif /*DEBUG*/ jpeg_write_marker(&write->cinfo, app, data, data_length); } return 0; } #define XML_URL "http://ns.adobe.com/xap/1.0/" static int write_xmp(Write *write, VipsImage *in) { unsigned char *data; size_t data_length; char *p; if (!vips_image_get_typeof(in, VIPS_META_XMP_NAME)) return 0; if (vips_image_get_blob(in, VIPS_META_XMP_NAME, (void *) &data, &data_length)) return -1; /* To write >64kb XMP it you need to parse the whole XMP object, * pull out the most important fields, code just them into the main * XMP block, then write any remaining XMP objects into a set of * extended XMP markers. * * http://wwwimages.adobe.com/content/dam/Adobe/en/devnet/xmp/pdfs/ \ * XMPSpecificationPart3.pdf * * jpeg_write_marker() with some libjpeg versions will throw a fatal * error with large chunks. */ if (data_length > 60000) { g_warning("%s", _("VipsJpeg: large XMP not saved")); return 0; } /* We need to add the magic XML URL to the start, then a null * character, then the data. */ p = g_malloc(data_length + strlen(XML_URL) + 1); strcpy(p, XML_URL); memcpy(p + strlen(XML_URL) + 1, data, data_length); jpeg_write_marker(&write->cinfo, JPEG_APP0 + 1, (unsigned char *) p, data_length + strlen(XML_URL) + 1); g_free(p); return 0; } static int write_exif(Write *write, VipsImage *image) { if (write_blob(write, image, VIPS_META_EXIF_NAME, JPEG_APP0 + 1)) return -1; return 0; } /* ICC writer from lcms, slight tweaks. */ /* * This routine writes the given ICC profile data into a JPEG file. * It *must* be called AFTER calling jpeg_start_compress() and BEFORE * the first call to jpeg_write_scanlines(). * (This ordering ensures that the APP2 marker(s) will appear after the * SOI and JFIF or Adobe markers, but before all else.) */ static void write_profile_data(j_compress_ptr cinfo, const JOCTET *icc_data_ptr, unsigned int icc_data_len) { unsigned int num_markers; /* total number of markers we'll write */ int cur_marker = 1; /* per spec, counting starts at 1 */ unsigned int length; /* number of bytes to write in this marker */ /* rounding up will fail for length == 0 */ g_assert(icc_data_len > 0); /* Calculate the number of markers we'll need, rounding up of course */ num_markers = (icc_data_len + MAX_DATA_BYTES_IN_MARKER - 1) / MAX_DATA_BYTES_IN_MARKER; while (icc_data_len > 0) { /* length of profile to put in this marker */ length = icc_data_len; if (length > MAX_DATA_BYTES_IN_MARKER) length = MAX_DATA_BYTES_IN_MARKER; icc_data_len -= length; /* Write the JPEG marker header (APP2 code and marker length) */ jpeg_write_m_header(cinfo, ICC_MARKER, (unsigned int) (length + ICC_OVERHEAD_LEN)); /* Write the marker identifying string "ICC_PROFILE" (null-terminated). * We code it in this less-than-transparent way so that the code works * even if the local character set is not ASCII. */ jpeg_write_m_byte(cinfo, 0x49); jpeg_write_m_byte(cinfo, 0x43); jpeg_write_m_byte(cinfo, 0x43); jpeg_write_m_byte(cinfo, 0x5F); jpeg_write_m_byte(cinfo, 0x50); jpeg_write_m_byte(cinfo, 0x52); jpeg_write_m_byte(cinfo, 0x4F); jpeg_write_m_byte(cinfo, 0x46); jpeg_write_m_byte(cinfo, 0x49); jpeg_write_m_byte(cinfo, 0x4C); jpeg_write_m_byte(cinfo, 0x45); jpeg_write_m_byte(cinfo, 0x0); /* Add the sequencing info */ jpeg_write_m_byte(cinfo, cur_marker); jpeg_write_m_byte(cinfo, (int) num_markers); /* Add the profile data */ while (length--) { jpeg_write_m_byte(cinfo, *icc_data_ptr); icc_data_ptr++; } cur_marker++; } } #ifndef HAVE_EXIF /* Set the JFIF resolution from the vips xres/yres tags. */ static void vips_jfif_resolution_from_image(struct jpeg_compress_struct *cinfo, VipsImage *image) { int xres, yres; const char *p; int unit; /* Default to inches, more progs support it. */ unit = 1; if (vips_image_get_typeof(image, VIPS_META_RESOLUTION_UNIT) && !vips_image_get_string(image, VIPS_META_RESOLUTION_UNIT, &p)) { if (vips_isprefix("cm", p)) unit = 2; else if (vips_isprefix("none", p)) unit = 0; } switch (unit) { case 0: xres = VIPS_RINT(image->Xres); yres = VIPS_RINT(image->Yres); break; case 1: xres = VIPS_RINT(image->Xres * 25.4); yres = VIPS_RINT(image->Yres * 25.4); break; case 2: xres = VIPS_RINT(image->Xres * 10.0); yres = VIPS_RINT(image->Yres * 10.0); break; default: g_assert_not_reached(); break; } VIPS_DEBUG_MSG("vips_jfif_resolution_from_image: " "setting xres = %d, yres = %d, unit = %d\n", xres, yres, unit); cinfo->density_unit = unit; cinfo->X_density = xres; cinfo->Y_density = yres; } #endif /*HAVE_EXIF*/ /* Write an ICC Profile from a file into the JPEG stream. */ static int write_profile_file(Write *write, const char *profile) { VipsBlob *blob; if (vips_profile_load(profile, &blob, NULL)) return -1; if (blob) { size_t length; const void *data = vips_blob_get(blob, &length); write_profile_data(&write->cinfo, (JOCTET *) data, length); #ifdef DEBUG printf("write_profile_file: attached profile \"%s\"\n", profile); #endif /*DEBUG*/ vips_area_unref((VipsArea *) blob); } return 0; } static int write_profile_meta(Write *write, VipsImage *in) { const void *data; size_t length; if (vips_image_get_blob(in, VIPS_META_ICC_NAME, &data, &length)) return -1; write_profile_data(&write->cinfo, data, length); #ifdef DEBUG printf("write_profile_meta: attached %zd byte profile from header\n", length); #endif /*DEBUG*/ return 0; } static int write_jpeg_block(VipsRegion *region, VipsRect *area, void *a) { Write *write = (Write *) a; for (int y = 0; y < area->height; y++) write->row_pointer[y] = (JSAMPROW) VIPS_REGION_ADDR(region, area->left, area->top + y); /* Catch any longjmp()s from jpeg_write_scanlines() here. */ if (setjmp(write->eman.jmp)) return -1; if (write->invert) { int n_elements = region->im->Bands * area->width; for (int y = 0; y < area->height; y++) { unsigned char *line = write->row_pointer[y]; for (int x = 0; x < n_elements; x++) line[x] = 255 - line[x]; } } jpeg_write_scanlines(&write->cinfo, write->row_pointer, area->height); return 0; } /* Set up cinfo. Pass width and height separately so we can be * used for region write. */ static void set_cinfo(struct jpeg_compress_struct *cinfo, VipsImage *in, int width, int height, int qfac, gboolean optimize_coding, gboolean progressive, gboolean trellis_quant, gboolean overshoot_deringing, gboolean optimize_scans, int quant_table, VipsForeignSubsample subsample_mode, int restart_interval) { J_COLOR_SPACE space; /* Set compression parameters. */ cinfo->image_width = width; cinfo->image_height = height; cinfo->input_components = in->Bands; if (in->Bands == 4 && in->Type == VIPS_INTERPRETATION_CMYK) { space = JCS_CMYK; } else if (in->Bands == 3) space = JCS_RGB; else if (in->Bands == 1) space = JCS_GRAYSCALE; else /* Use luminance compression for all channels. */ space = JCS_UNKNOWN; cinfo->in_color_space = space; #ifdef HAVE_JPEG_EXT_PARAMS /* Reset compression profile to libjpeg defaults */ if (jpeg_c_int_param_supported(cinfo, JINT_COMPRESS_PROFILE)) jpeg_c_set_int_param(cinfo, JINT_COMPRESS_PROFILE, JCP_FASTEST); #endif /* Reset to default. */ jpeg_set_defaults(cinfo); /* Compute optimal Huffman coding tables. */ cinfo->optimize_coding = optimize_coding; /* Use a restart interval. */ if (restart_interval > 0) cinfo->restart_interval = restart_interval; #ifdef HAVE_JPEG_EXT_PARAMS /* Apply trellis quantisation to each 8x8 block. Implies * "optimize_coding". */ if (trellis_quant) { if (jpeg_c_bool_param_supported(cinfo, JBOOLEAN_TRELLIS_QUANT)) { jpeg_c_set_bool_param(cinfo, JBOOLEAN_TRELLIS_QUANT, TRUE); cinfo->optimize_coding = TRUE; } else g_warning("%s", _("trellis_quant unsupported")); } /* Apply overshooting to samples with extreme values e.g. 0 & 255 * for 8-bit. */ if (overshoot_deringing) { if (jpeg_c_bool_param_supported(cinfo, JBOOLEAN_OVERSHOOT_DERINGING)) jpeg_c_set_bool_param(cinfo, JBOOLEAN_OVERSHOOT_DERINGING, TRUE); else g_warning("%s", _("overshoot_deringing unsupported")); } /* Split the spectrum of DCT coefficients into separate scans. * Requires progressive output. Must be set before * jpeg_simple_progression. */ if (optimize_scans) { if (progressive) { if (jpeg_c_bool_param_supported(cinfo, JBOOLEAN_OPTIMIZE_SCANS)) jpeg_c_set_bool_param(cinfo, JBOOLEAN_OPTIMIZE_SCANS, TRUE); else g_warning("%s", _("ignoring optimize_scans")); } else g_warning("%s", _("ignoring optimize_scans for baseline")); } /* Use predefined quantization table. */ if (quant_table > 0) { if (jpeg_c_int_param_supported(cinfo, JINT_BASE_QUANT_TBL_IDX)) jpeg_c_set_int_param(cinfo, JINT_BASE_QUANT_TBL_IDX, quant_table); else g_warning("%s", _("setting quant_table unsupported")); } #else /* Using jpeglib.h without extension parameters, warn of ignored * options. */ if (trellis_quant) g_warning("%s", _("ignoring trellis_quant")); if (overshoot_deringing) g_warning("%s", _("ignoring overshoot_deringing")); if (optimize_scans) g_warning("%s", _("ignoring optimize_scans")); if (quant_table > 0) g_warning("%s", _("ignoring quant_table")); #endif /* Set compression quality. Must be called after setting params above. */ jpeg_set_quality(cinfo, qfac, TRUE); /* Enable progressive write. */ if (progressive) jpeg_simple_progression(cinfo); if (subsample_mode == VIPS_FOREIGN_SUBSAMPLE_OFF || (subsample_mode == VIPS_FOREIGN_SUBSAMPLE_AUTO && qfac >= 90)) { int i; for (i = 0; i < in->Bands; i++) { cinfo->comp_info[i].h_samp_factor = 1; cinfo->comp_info[i].v_samp_factor = 1; } } /* Only write the JFIF headers if we have no EXIF. * Some readers get confused if you set both. */ cinfo->write_JFIF_header = FALSE; #ifndef HAVE_EXIF vips_jfif_resolution_from_image(cinfo, in); cinfo->write_JFIF_header = TRUE; #endif /*HAVE_EXIF*/ } static int write_metadata(Write *write, VipsImage *in, const char *profile) { if (write_exif(write, in) || write_xmp(write, in) || write_blob(write, in, VIPS_META_IPTC_NAME, JPEG_APP0 + 13)) return -1; /* A profile supplied as an argument overrides an embedded * profile. */ if (profile) { if (write_profile_file(write, profile)) return -1; } else if (vips_image_get_typeof(in, VIPS_META_ICC_NAME)) { if (write_profile_meta(write, in)) return -1; } return 0; } /* Write a VIPS image to a JPEG compress struct. */ static int write_vips(Write *write, VipsImage *in, int Q, const char *profile, gboolean optimize_coding, gboolean progressive, gboolean trellis_quant, gboolean overshoot_deringing, gboolean optimize_scans, int quant_table, VipsForeignSubsample subsample_mode, int restart_interval) { /* Should have been converted for save. */ g_assert(in->BandFmt == VIPS_FORMAT_UCHAR); g_assert(in->Coding == VIPS_CODING_NONE); g_assert(in->Bands == 1 || in->Bands == 3 || in->Bands == 4); /* Check input image. */ if (vips_image_pio_input(in)) return -1; set_cinfo(&write->cinfo, in, in->Xsize, in->Ysize, Q, optimize_coding, progressive, trellis_quant, overshoot_deringing, optimize_scans, quant_table, subsample_mode, restart_interval); if (in->Bands == 4 && in->Type == VIPS_INTERPRETATION_CMYK) /* IJG always sets an Adobe marker, so we should invert CMYK. */ write->invert = TRUE; /* Build VIPS output stuff now we know the image we'll be writing. */ if (!(write->row_pointer = VIPS_ARRAY(NULL, in->Ysize, JSAMPROW))) return -1; /* Write app0 and build compress tables. */ jpeg_start_compress(&write->cinfo, TRUE); /* All the other APP chunks come next. */ if (write_metadata(write, in, profile)) return -1; /* Write data. Note that the write function grabs the longjmp()! */ if (vips_sink_disc(in, write_jpeg_block, write)) return -1; /* We have to reinstate the setjmp() before we jpeg_finish_compress(). */ if (setjmp(write->eman.jmp)) return -1; /* This should only be called on a successful write. */ jpeg_finish_compress(&write->cinfo); return 0; } #define TARGET_BUFFER_SIZE (4096) typedef struct { /* Public jpeg fields. */ struct jpeg_destination_mgr pub; /* Private stuff during write. */ /* Build the output area here. */ VipsTarget *target; /* Our output buffer. */ unsigned char buf[TARGET_BUFFER_SIZE]; } Dest; /* Buffer full method. This is only called when the output area is exactly * full. */ static jboolean empty_output_buffer(j_compress_ptr cinfo) { Dest *dest = (Dest *) cinfo->dest; if (vips_target_write(dest->target, dest->buf, TARGET_BUFFER_SIZE)) ERREXIT(cinfo, JERR_FILE_WRITE); dest->pub.next_output_byte = dest->buf; dest->pub.free_in_buffer = TARGET_BUFFER_SIZE; return TRUE; } /* Init dest method. */ static void init_destination(j_compress_ptr cinfo) { Dest *dest = (Dest *) cinfo->dest; dest->pub.next_output_byte = dest->buf; dest->pub.free_in_buffer = TARGET_BUFFER_SIZE; } /* Flush any remaining bytes to the output. */ static void term_destination(j_compress_ptr cinfo) { Dest *dest = (Dest *) cinfo->dest; if (vips_target_write(dest->target, dest->buf, TARGET_BUFFER_SIZE - dest->pub.free_in_buffer)) ERREXIT(cinfo, JERR_FILE_WRITE); } /* Set dest to one of our objects. */ void vips__jpeg_target_dest(j_compress_ptr cinfo, VipsTarget *target) { Dest *dest; if (!cinfo->dest) /* first time for this JPEG object? */ cinfo->dest = (struct jpeg_destination_mgr *) (*cinfo->mem->alloc_small)( (j_common_ptr) cinfo, JPOOL_PERMANENT, sizeof(Dest)); dest = (Dest *) cinfo->dest; dest->pub.init_destination = init_destination; dest->pub.empty_output_buffer = empty_output_buffer; dest->pub.term_destination = term_destination; dest->target = target; } int vips__jpeg_write_target(VipsImage *in, VipsTarget *target, int Q, const char *profile, gboolean optimize_coding, gboolean progressive, gboolean trellis_quant, gboolean overshoot_deringing, gboolean optimize_scans, int quant_table, VipsForeignSubsample subsample_mode, int restart_interval) { Write *write; if (!(write = write_new())) return -1; /* Make jpeg compression object. */ if (setjmp(write->eman.jmp)) { /* Here for longjmp() during write_vips(). */ write_destroy(write); return -1; } jpeg_create_compress(&write->cinfo); /* Attach output. */ vips__jpeg_target_dest(&write->cinfo, target); /* Convert! Write errors come back here as an error return. */ if (write_vips(write, in, Q, profile, optimize_coding, progressive, trellis_quant, overshoot_deringing, optimize_scans, quant_table, subsample_mode, restart_interval)) { write_destroy(write); return -1; } write_destroy(write); if (vips_target_end(target)) return -1; return 0; } /* Some people want to be able to save as xxx.jfif. libjpeg will write as * JFIF if it can, but if you use features like CMYK or YCCK, you'll get a * regular JPEG. So saving as .jfif won't (by itself) guarantee strict JFIF * conformance. */ const char *vips__jpeg_suffs[] = { ".jpg", ".jpeg", ".jpe", ".jfif", NULL }; /* Write a region to a JPEG compress struct. */ static int write_vips_region(Write *write, VipsRegion *region, VipsRect *rect, int Q, const char *profile, gboolean optimize_coding, gboolean progressive, VipsForeignKeep keep, gboolean trellis_quant, gboolean overshoot_deringing, gboolean optimize_scans, int quant_table, VipsForeignSubsample subsample_mode, int restart_interval) { // the image we'll be writing VipsImage *in = region->im; VipsImage *x; set_cinfo(&write->cinfo, in, rect->width, rect->height, Q, optimize_coding, progressive, trellis_quant, overshoot_deringing, optimize_scans, quant_table, subsample_mode, restart_interval); /* Should have been converted for save. */ g_assert(in->BandFmt == VIPS_FORMAT_UCHAR); g_assert(in->Coding == VIPS_CODING_NONE); g_assert(in->Bands == 1 || in->Bands == 3 || in->Bands == 4); if (in->Bands == 4 && in->Type == VIPS_INTERPRETATION_CMYK) // FIXME ... need to invert on the fly as we send pixels to // libjpeg write->invert = TRUE; /* Build VIPS output stuff now we know the image we'll be writing. */ if (!(write->row_pointer = VIPS_ARRAY(NULL, rect->height, JSAMPROW))) return -1; /* Write app0 and build compress tables. */ jpeg_start_compress(&write->cinfo, TRUE); /* Updating metadata, need to copy the image. */ if (vips_copy(in, &x, NULL)) return -1; /* All the other APP chunks come next. */ if (vips__foreign_update_metadata(x, keep) || write_metadata(write, x, profile)) { g_object_unref(x); return -1; } g_object_unref(x); /* Write data. Note that the write function grabs the longjmp()! */ if (write_jpeg_block(region, rect, write)) return -1; /* We have to reinstate the setjmp() before we jpeg_finish_compress(). */ if (setjmp(write->eman.jmp)) return -1; /* This should only be called on a successful write. */ jpeg_finish_compress(&write->cinfo); return 0; } int vips__jpeg_region_write_target(VipsRegion *region, VipsRect *rect, VipsTarget *target, int Q, const char *profile, gboolean optimize_coding, gboolean progressive, VipsForeignKeep keep, gboolean trellis_quant, gboolean overshoot_deringing, gboolean optimize_scans, int quant_table, VipsForeignSubsample subsample_mode, int restart_interval) { Write *write; if (!(write = write_new())) return -1; /* Make jpeg compression object. */ if (setjmp(write->eman.jmp)) { /* Here for longjmp() during write_vips(). */ write_destroy(write); return -1; } jpeg_create_compress(&write->cinfo); /* Attach output. */ vips__jpeg_target_dest(&write->cinfo, target); /* Convert! Write errors come back here as an error return. */ if (write_vips_region(write, region, rect, Q, profile, optimize_coding, progressive, keep, trellis_quant, overshoot_deringing, optimize_scans, quant_table, subsample_mode, restart_interval)) { write_destroy(write); return -1; } write_destroy(write); if (vips_target_end(target)) return -1; return 0; } #else /*!HAVE_JPEG*/ int vips__jpeg_region_write_target(VipsRegion *region, VipsRect *rect, VipsTarget *target, int Q, const char *profile, gboolean optimize_coding, gboolean progressive, VipsForeignKeep keep, gboolean trellis_quant, gboolean overshoot_deringing, gboolean optimize_scans, int quant_table, VipsForeignSubsample subsample_mode, int restart_interval) { vips_error("vips2jpeg", "%s", _("libvips built without JPEG support")); return -1; } #endif /*HAVE_JPEG*/ libvips-8.15.1/libvips/foreign/vips2magick.c000066400000000000000000000514361454007373500207630ustar00rootroot00000000000000/* save with libMagick * * 22/12/17 dlemstra * 6/2/19 DarthSim * - fix GraphicsMagick support * 17/2/19 * - support ICC, XMP, EXIF, IPTC metadata * - write with a single call to vips_sink_disc() * 29/6/19 * - support "strip" option * 6/7/19 [deftomat] * - support array of delays * 5/8/19 DarthSim * - support GIF optimization * 21/4/21 kleisauke * - include GObject part from magicksave.c * 9/12/21 [erik-frontify] * - add gif save subclass */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #ifdef ENABLE_MAGICKSAVE #include "pforeign.h" #include "magick.h" typedef struct _VipsForeignSaveMagick { VipsForeignSave parent_object; /* Parameters. */ char *filename; /* NULL during buffer output */ char *format; int quality; int bitdepth; gboolean optimize_gif_frames; gboolean optimize_gif_transparency; ImageInfo *image_info; ExceptionInfo *exception; char *map; StorageType storage_type; Image *images; Image *current_image; int page_height; GValue delay_gvalue; int *delays; int delays_length; /* The position of current_image in the output. */ VipsRect position; } VipsForeignSaveMagick; typedef VipsForeignSaveClass VipsForeignSaveMagickClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignSaveMagick, vips_foreign_save_magick, VIPS_TYPE_FOREIGN_SAVE); static void vips_foreign_save_magick_dispose(GObject *gobject) { VipsForeignSaveMagick *magick = (VipsForeignSaveMagick *) gobject; #ifdef DEBUG printf("vips_foreign_save_magick_dispose: %p\n", gobject); #endif /*DEBUG*/ VIPS_FREE(magick->filename); VIPS_FREE(magick->map); VIPS_FREEF(DestroyImageList, magick->images); VIPS_FREEF(DestroyImageInfo, magick->image_info); VIPS_FREEF(magick_destroy_exception, magick->exception); g_value_unset(&magick->delay_gvalue); G_OBJECT_CLASS(vips_foreign_save_magick_parent_class)->dispose(gobject); } /* Move current_image on to the next image we will write. */ static int vips_foreign_save_magick_next_image(VipsForeignSaveMagick *magick) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(magick); VipsForeignSave *save = (VipsForeignSave *) magick; VipsImage *im = save->ready; Image *image; int number; const char *str; int page_index; g_assert(!magick->current_image); if (magick->images == NULL) { if (!(image = magick_acquire_image(magick->image_info, magick->exception))) return -1; magick->images = image; magick->position.top = 0; magick->position.left = 0; magick->position.width = im->Xsize; magick->position.height = magick->page_height; } else { image = GetLastImageInList(magick->images); magick_acquire_next_image(magick->image_info, image, magick->exception); if (GetNextImageInList(image) == NULL) return -1; image = SyncNextImageInList(image); magick->position.top += magick->page_height; } if (!magick_set_image_size(image, im->Xsize, magick->page_height, magick->exception)) { magick_vips_error(class->nickname, magick->exception); return -1; } /* Delay must be converted from milliseconds into centiseconds * as GIF image requires centiseconds. */ if (magick->delays) { page_index = magick->position.top / magick->page_height; if (page_index < magick->delays_length) image->delay = VIPS_RINT(magick->delays[page_index] / 10.0); } /* ImageMagick uses iterations like this (at least in gif save): * 0 - set 0 loops (infinite) * 1 - don't write the netscape extension block * 2 - loop once * 3 - loop twice etc. */ if (vips_image_get_typeof(im, "loop") && !vips_image_get_int(im, "loop", &number)) { image->iterations = (size_t) number; } else { /* DEPRECATED "gif-loop" * * We have the simple gif meaning, so we must add one unless * it's zero. */ if (vips_image_get_typeof(im, "gif-loop") && !vips_image_get_int(im, "gif-loop", &number)) image->iterations = (size_t) (number ? number + 1 : 0); } if (vips_image_get_typeof(im, "gif-comment") && !vips_image_get_string(im, "gif-comment", &str)) magick_set_property(image, "comment", str, magick->exception); /* libvips keeps animations as a set of independent frames, so we want * to clear to the background between each one. */ image->dispose = BackgroundDispose; if (magick_set_magick_profile(image, im, magick->exception)) { magick_vips_error(class->nickname, magick->exception); return -1; } magick->current_image = image; return 0; } /* We've written all the pixels to current_image ... finish it off ready to * move on. */ static void vips_foreign_save_magick_end_image(VipsForeignSaveMagick *magick) { if (magick->current_image) { magick_inherit_exception(magick->exception, magick->current_image); magick->current_image = NULL; } } /* Another block of pixels have arrived from libvips. */ static int vips_foreign_save_magick_write_block(VipsRegion *region, VipsRect *area, void *a) { VipsForeignSaveMagick *magick = (VipsForeignSaveMagick *) a; VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(magick); VipsRect pixels; pixels = region->valid; do { VipsRect hit; void *p; if (!magick->current_image && vips_foreign_save_magick_next_image(magick)) return -1; vips_rect_intersectrect(&pixels, &magick->position, &hit); p = VIPS_REGION_ADDR(region, hit.left, hit.top); if (!magick_import_pixels(magick->current_image, hit.left, hit.top - magick->position.top, hit.width, hit.height, magick->map, magick->storage_type, p, magick->exception)) { magick_vips_error(class->nickname, magick->exception); return -1; } /* Have we filled the page. */ if (VIPS_RECT_BOTTOM(&hit) == VIPS_RECT_BOTTOM(&magick->position)) vips_foreign_save_magick_end_image(magick); pixels.top += hit.height; pixels.height -= hit.height; } while (pixels.height > 0); return 0; } static int vips_foreign_save_magick_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsForeignSave *save = (VipsForeignSave *) object; VipsForeignSaveMagick *magick = (VipsForeignSaveMagick *) object; VipsImage *im; #ifdef DEBUG printf("vips_foreign_save_magick_build: %p\n", object); #endif /*DEBUG*/ if (VIPS_OBJECT_CLASS(vips_foreign_save_magick_parent_class)->build(object)) return -1; magick_genesis(); /* The image to save. */ im = save->ready; magick->exception = magick_acquire_exception(); magick->image_info = CloneImageInfo(NULL); switch (im->BandFmt) { case VIPS_FORMAT_UCHAR: magick->storage_type = CharPixel; break; case VIPS_FORMAT_USHORT: magick->storage_type = ShortPixel; break; case VIPS_FORMAT_UINT: magick->storage_type = LongPixel; break; case VIPS_FORMAT_FLOAT: magick->storage_type = FloatPixel; break; case VIPS_FORMAT_DOUBLE: magick->storage_type = DoublePixel; break; default: vips_error(class->nickname, "%s", _("unsupported image format")); return -1; } switch (im->Bands) { case 1: magick->map = g_strdup("I"); break; case 2: magick->map = g_strdup("IA"); break; case 3: magick->map = g_strdup("RGB"); break; case 4: if (im->Type == VIPS_INTERPRETATION_CMYK) magick->map = g_strdup("CMYK"); else magick->map = g_strdup("RGBA"); break; case 5: magick->map = g_strdup("CMYKA"); break; default: vips_error(class->nickname, "%s", _("unsupported number of image bands")); return -1; } if (magick->format) { vips_strncpy(magick->image_info->magick, magick->format, MaxPathExtent); if (magick->filename) (void) vips_snprintf(magick->image_info->filename, MaxPathExtent, "%s:%s", magick->format, magick->filename); } else if (magick->filename) { vips_strncpy(magick->image_info->filename, magick->filename, MaxPathExtent); } if (magick->quality > 0) magick->image_info->quality = magick->quality; magick->page_height = vips_image_get_page_height(im); /* Get as a gvalue so we can keep a ref to the delay array while we * need it. */ if (vips_image_get_typeof(im, "delay")) { g_value_unset(&magick->delay_gvalue); if (vips_image_get(im, "delay", &magick->delay_gvalue)) return -1; magick->delays = vips_value_get_array_int( &magick->delay_gvalue, &magick->delays_length); } if (vips_sink_disc(im, vips_foreign_save_magick_write_block, magick)) return -1; if (magick->optimize_gif_frames) { if (!magick_optimize_image_layers(&magick->images, magick->exception)) { magick_inherit_exception(magick->exception, magick->images); magick_vips_error(class->nickname, magick->exception); return -1; } } if (magick->optimize_gif_transparency) { if (!magick_optimize_image_transparency(magick->images, magick->exception)) { magick_inherit_exception(magick->exception, magick->images); magick_vips_error(class->nickname, magick->exception); return -1; } } /* Bitdepth <= 8 requested? Quantize/Dither images. * ImageMagick then selects the appropriate bit depth when writing * the actual image (e.g. BMP or GIF). */ if (magick->bitdepth) { if (!magick_quantize_images(magick->images, magick->bitdepth, magick->exception)) { magick_inherit_exception(magick->exception, magick->images); magick_vips_error(class->nickname, magick->exception); return -1; } } return 0; } /* We could call into libMagick and discover what save formats it supports, but * that would mean starting up libMagick on libvips init, and that would add a * lot of time. * * Instead, just list the commonly-used formats that all libMagicks support and * that libvips does not. */ static const char *vips__save_magick_suffs[] = { NULL }; static const char *vips__save_magick_bmp_suffs[] = { ".bmp", NULL }; static const char *vips__save_magick_gif_suffs[] = { ".gif", NULL }; /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define US VIPS_FORMAT_USHORT #define UI VIPS_FORMAT_UINT #define F VIPS_FORMAT_FLOAT #define D VIPS_FORMAT_DOUBLE static VipsBandFormat bandfmt_magick[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, UC, US, US, UI, UI, F, F, D, D }; static void vips_foreign_save_magick_class_init(VipsForeignSaveMagickClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = (VipsOperationClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class; gobject_class->dispose = vips_foreign_save_magick_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "magicksave_base"; object_class->description = _("save with ImageMagick"); object_class->build = vips_foreign_save_magick_build; /* *magick is fuzzed, but it's such a huge thing it's safer to * disable it. */ operation_class->flags |= VIPS_OPERATION_UNTRUSTED; /* We need to be well to the back of the queue since vips's * dedicated savers are usually preferable. */ foreign_class->priority = -100; foreign_class->suffs = vips__save_magick_suffs; save_class->saveable = VIPS_SAVEABLE_ANY; save_class->format_table = bandfmt_magick; VIPS_ARG_STRING(class, "format", 2, _("Format"), _("Format to save in"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveMagick, format), NULL); VIPS_ARG_INT(class, "quality", 3, _("Quality"), _("Quality to use"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveMagick, quality), 0, 100, 0); VIPS_ARG_BOOL(class, "optimize_gif_frames", 4, _("Optimize_gif_frames"), _("Apply GIF frames optimization"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveMagick, optimize_gif_frames), FALSE); VIPS_ARG_BOOL(class, "optimize_gif_transparency", 5, _("Optimize_gif_transparency"), _("Apply GIF transparency optimization"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveMagick, optimize_gif_transparency), FALSE); VIPS_ARG_INT(class, "bitdepth", 6, _("Bit depth"), _("Number of bits per pixel"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveMagick, bitdepth), 0, 8, 0); } static void vips_foreign_save_magick_init(VipsForeignSaveMagick *magick) { /* Init to an int just to have something there. It is swapped for an * int array later. */ g_value_init(&magick->delay_gvalue, G_TYPE_INT); magick->bitdepth = 0; } typedef struct _VipsForeignSaveMagickFile { VipsForeignSaveMagick parent_object; char *filename; } VipsForeignSaveMagickFile; typedef VipsForeignSaveMagickClass VipsForeignSaveMagickFileClass; G_DEFINE_TYPE(VipsForeignSaveMagickFile, vips_foreign_save_magick_file, vips_foreign_save_magick_get_type()); static int vips_foreign_save_magick_file_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsForeignSaveMagick *magick = (VipsForeignSaveMagick *) object; VipsForeignSaveMagickFile *file = (VipsForeignSaveMagickFile *) object; magick->filename = g_strdup(file->filename); if (VIPS_OBJECT_CLASS(vips_foreign_save_magick_file_parent_class) ->build(object)) return -1; if (!WriteImages(magick->image_info, magick->images, magick->image_info->filename, magick->exception)) { magick_inherit_exception(magick->exception, magick->images); magick_vips_error(class->nickname, magick->exception); return -1; } return 0; } static void vips_foreign_save_magick_file_class_init( VipsForeignSaveMagickFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "magicksave"; object_class->description = _("save file with ImageMagick"); object_class->build = vips_foreign_save_magick_file_build; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveMagickFile, filename), NULL); } static void vips_foreign_save_magick_file_init(VipsForeignSaveMagickFile *file) { } typedef struct _VipsForeignSaveMagickBuffer { VipsForeignSaveMagick parent_object; /* Save to a buffer. */ VipsArea *buf; } VipsForeignSaveMagickBuffer; typedef VipsForeignSaveMagickClass VipsForeignSaveMagickBufferClass; G_DEFINE_TYPE(VipsForeignSaveMagickBuffer, vips_foreign_save_magick_buffer, vips_foreign_save_magick_get_type()); static int vips_foreign_save_magick_buffer_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsForeignSaveMagick *magick = (VipsForeignSaveMagick *) object; VipsForeignSaveMagickBuffer *buffer = (VipsForeignSaveMagickBuffer *) object; void *obuf; size_t olen; VipsBlob *blob; if (VIPS_OBJECT_CLASS(vips_foreign_save_magick_buffer_parent_class) ->build(object)) return -1; if (!(obuf = magick_images_to_blob(magick->image_info, magick->images, &olen, magick->exception))) { magick_inherit_exception(magick->exception, magick->images); magick_vips_error(class->nickname, magick->exception); return -1; } blob = vips_blob_new((VipsCallbackFn) vips_area_free_cb, obuf, olen); g_object_set(buffer, "buffer", blob, NULL); vips_area_unref(VIPS_AREA(blob)); return 0; } static void vips_foreign_save_magick_buffer_class_init( VipsForeignSaveMagickBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "magicksave_buffer"; object_class->description = _("save image to magick buffer"); object_class->build = vips_foreign_save_magick_buffer_build; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to save to"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsForeignSaveMagickBuffer, buf), VIPS_TYPE_BLOB); } static void vips_foreign_save_magick_buffer_init(VipsForeignSaveMagickBuffer *buffer) { } typedef VipsForeignSaveMagickFile VipsForeignSaveMagickBmpFile; typedef VipsForeignSaveMagickFileClass VipsForeignSaveMagickBmpFileClass; G_DEFINE_TYPE(VipsForeignSaveMagickBmpFile, vips_foreign_save_magick_bmp_file, vips_foreign_save_magick_file_get_type()); static void vips_foreign_save_magick_bmp_file_class_init( VipsForeignSaveMagickBmpFileClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsOperationClass *operation_class = (VipsOperationClass *) class; object_class->nickname = "magicksave_bmp"; object_class->description = _("save bmp image with ImageMagick"); foreign_class->suffs = vips__save_magick_bmp_suffs; /* Hide from UI. */ operation_class->flags |= VIPS_OPERATION_DEPRECATED; } static void vips_foreign_save_magick_bmp_file_init(VipsForeignSaveMagickBmpFile *file) { VipsForeignSaveMagick *magick = (VipsForeignSaveMagick *) file; VIPS_SETSTR(magick->format, "bmp"); } typedef VipsForeignSaveMagickBuffer VipsForeignSaveMagickBmpBuffer; typedef VipsForeignSaveMagickBufferClass VipsForeignSaveMagickBmpBufferClass; G_DEFINE_TYPE(VipsForeignSaveMagickBmpBuffer, vips_foreign_save_magick_bmp_buffer, vips_foreign_save_magick_buffer_get_type()); static void vips_foreign_save_magick_bmp_buffer_class_init( VipsForeignSaveMagickBmpBufferClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsOperationClass *operation_class = (VipsOperationClass *) class; object_class->nickname = "magicksave_bmp_buffer"; object_class->description = _("save bmp image to magick buffer"); foreign_class->suffs = vips__save_magick_bmp_suffs; /* Hide from UI. */ operation_class->flags |= VIPS_OPERATION_DEPRECATED; } static void vips_foreign_save_magick_bmp_buffer_init( VipsForeignSaveMagickBmpBuffer *buffer) { VipsForeignSaveMagick *magick = (VipsForeignSaveMagick *) buffer; VIPS_SETSTR(magick->format, "bmp"); } typedef VipsForeignSaveMagickFile VipsForeignSaveMagickGifFile; typedef VipsForeignSaveMagickFileClass VipsForeignSaveMagickGifFileClass; G_DEFINE_TYPE(VipsForeignSaveMagickGifFile, vips_foreign_save_magick_gif_file, vips_foreign_save_magick_file_get_type()); static void vips_foreign_save_magick_gif_file_class_init( VipsForeignSaveMagickGifFileClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsOperationClass *operation_class = (VipsOperationClass *) class; object_class->nickname = "magicksave_gif"; object_class->description = _("save gif image with ImageMagick"); foreign_class->suffs = vips__save_magick_gif_suffs; /* Hide from UI. */ operation_class->flags |= VIPS_OPERATION_DEPRECATED; } static void vips_foreign_save_magick_gif_file_init(VipsForeignSaveMagickGifFile *file) { VipsForeignSaveMagick *magick = (VipsForeignSaveMagick *) file; VIPS_SETSTR(magick->format, "gif"); } typedef VipsForeignSaveMagickBuffer VipsForeignSaveMagickGifBuffer; typedef VipsForeignSaveMagickBufferClass VipsForeignSaveMagickGifBufferClass; G_DEFINE_TYPE(VipsForeignSaveMagickGifBuffer, vips_foreign_save_magick_gif_buffer, vips_foreign_save_magick_buffer_get_type()); static void vips_foreign_save_magick_gif_buffer_class_init( VipsForeignSaveMagickGifBufferClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsOperationClass *operation_class = (VipsOperationClass *) class; object_class->nickname = "magicksave_gif_buffer"; object_class->description = _("save gif image to magick buffer"); foreign_class->suffs = vips__save_magick_gif_suffs; /* Hide from UI. */ operation_class->flags |= VIPS_OPERATION_DEPRECATED; } static void vips_foreign_save_magick_gif_buffer_init( VipsForeignSaveMagickGifBuffer *buffer) { VipsForeignSaveMagick *magick = (VipsForeignSaveMagick *) buffer; VIPS_SETSTR(magick->format, "gif"); } #endif /*ENABLE_MAGICKSAVE*/ libvips-8.15.1/libvips/foreign/vips2tiff.c000066400000000000000000001726141454007373500204620ustar00rootroot00000000000000/* TIFF PARTS: * Copyright (c) 1988, 1990 by Sam Leffler. * All rights reserved. * * This file is provided for unrestricted use provided that this * legend is included on all tape media and as a part of the * software program in whole or part. Users may copy, modify or * distribute this file at will. * * MODIFICATION FOR VIPS Copyright 1991, K.Martinez * * software may be distributed FREE, with these copyright notices * no responsibility/warrantee is implied or given * * * Modified and added im_LabQ2LabC() function. It can write IM_TYPE_LABQ image * in vips format to LAB in tiff format. * Copyright 1994 Ahmed Abbood. * * 19/9/95 JC * - calls TIFFClose() more reliably * - tidied up * 12/4/97 JC * - thrown away and rewritten for TIFF 6 lib * 22/4/97 JC * - writes a pyramid! * - to separate TIFF files tho' * 23/4/97 JC * - does 2nd gather pass to put pyramid into a single TIFF file * - ... and shrinks IM_CODING_LABQ too * 26/10/98 JC * - binary open for stupid systems * 7/6/99 JC * - 16bit TIFF write too * 9/7/99 JC * - ZIP tiff added * 11/5/00 JC * - removed TIFFmalloc/TIFFfree * 5/8/00 JC * - mode string now part of filename * 23/4/01 JC * - HAVE_TIFF turns on TIFFness * 19/3/02 ruven * - pyramid stops at tile size, not 64x64 * 29/4/02 JC * - write any number of bands (but still with photometric RGB, so not * very useful) * 10/9/02 JC * - oops, handle TIFF errors better * - now writes CMYK correctly * 13/2/03 JC * - tries not to write mad resolutions * 7/5/03 JC * - only write CMYK if Type == CMYK * - writes EXTRASAMPLES ALPHA for bands == 2 or 4 (if we're writing RGB) * 17/11/03 JC * - write float too * 28/11/03 JC * - read via a "p" so we work from mmap window images * - uses threadgroups for speedup * 9/3/04 JC * - 1 bit write mode added * 5/4/04 * - better handling of edge tiles (thanks Ruven) * 18/5/04 Andrey Kiselev * - added res_inch/res_cm option * 20/5/04 JC * - allow single res number too * 19/7/04 * - write several scanlines at once, good speed up for some cases * 22/9/04 * - got rid of wrapper image so nip gets progress feedback * - fixed tiny read-beyond-buffer issue for edge tiles * 7/10/04 * - added ICC profile embedding * 13/12/04 * - can now pyramid any non-complex type (thanks Ruven) * 27/1/05 * - added ccittfax4 as a compression option * 9/3/05 * - set PHOTOMETRIC_CIELAB for vips TYPE_LAB images ... so we can write * float LAB as well as float RGB * - also LABS images * 22/6/05 * - 16 bit LAB write was broken * 9/9/05 * - write any icc profile from meta * 3/3/06 * - raise tile buffer limit (thanks Ruven) * 11/11/06 * - set ORIENTATION_TOPLEFT (thanks Josef) * 18/7/07 Andrey Kiselev * - remove "b" option on TIFFOpen() * - support TIFFTAG_PREDICTOR types for lzw and deflate compression * 3/11/07 * - use im_wbuffer() for background writes * 15/2/08 * - set TIFFTAG_JPEGQUALITY explicitly when we copy TIFF files, since * libtiff doesn't keep this in the header (thanks Joe) * 20/2/08 * - use tiff error handler from im_tiff2vips.c * 27/2/08 * - don't try to copy icc profiles when building pyramids (thanks Joe) * 9/4/08 * - use IM_META_RESOLUTION_UNIT to set default resunit * 17/4/08 * - allow CMYKA (thanks Doron) * 5/9/08 * - trigger eval callbacks during tile write * 4/2/10 * - gtkdoc * 26/2/10 * - option to turn on bigtiff output * 16/4/10 * - use vips_sink_*() instead of threadgroup and friends * 22/6/10 * - make no-owner regions for the tile cache, since we share these * between threads * 12/7/11 * - use im__temp_name() for intermediates rather than polluting the * output directory * 5/9/11 * - enable YCbCr compression for jpeg write * 23/11/11 * - set reduced-resolution subfile type on pyramid layers * 2/12/11 * - make into a simple function call ready to be wrapped as a new-style * VipsForeign class * 21/3/12 * - bump max layer buffer up * 2/6/12 * - copy jpeg pyramid in gather in RGB mode ... tiff4 doesn't do ycbcr * mode * 7/8/12 * - be more cautious enabling YCbCr mode * 24/9/13 * - support many more vips formats, eg. complex, 32-bit int, any number * of bands, etc., see the tiff loader * 26/1/14 * - add RGB as well as YCbCr write * 20/11/14 * - cache input in tile write mode to keep us sequential * 3/12/14 * - embed XMP in output * 10/12/14 * - zero out edge tile buffers before jpeg wtiff, thanks iwbh15 * 19/1/15 * - disable chroma subsample if Q >= 90 * 13/2/15 * - append later layers, don't copy the base image * - use the nice dzsave pyramid code, much faster and simpler * - we now allow strip pyramids * 27/3/15 * - squash >128 rather than >0, nicer results for shrink * - add miniswhite option * 29/9/15 * - try to write IPTC metadata * - try to write photoshop metadata * 11/11/15 * - better alpha handling, thanks sadaqatullahn * 21/12/15 * - write TIFFTAG_IMAGEDESCRIPTION * 2/6/16 * - support strip option * 4/7/16 * - tag alpha as UNASSALPHA since it's not pre-multiplied, thanks Peter * 17/8/16 * - use wchar_t TIFFOpen on Windows * 14/10/16 * - add buffer output * 29/1/17 * - enable bigtiff automatically for large, uncompressed writes, thanks * AndreasSchmid1 * 26/8/17 * - support pyramid creation to buffer, thanks bubba * 24/10/17 * - no error on page-height not a factor of image height, just don't * write multipage * 13/6/18 * - add region_shrink * 2/7/18 * - copy EXTRASAMPLES to pyramid layers * 21/12/18 * - stop pyr layers if width or height drop to 1 * 8/7/19 * - add webp and zstd support * - add @level and @lossless * 18/12/19 * - "squash" now squashes 3-band float LAB down to LABQ * 26/1/20 * - add "depth" to set pyr depth * 27/1/20 * - write XYZ images as logluv * 7/2/20 [jclavoie-jive] * - add PAGENUMBER support * 23/5/20 * - add support for subifd pyramid layers * 6/6/20 MathemanFlo * - add bitdepth support for 2 and 4 bit greyscale images * 29/9/21 LionelArn2 * - loop for the whole output image, rather than per page * 20/10/21 [jacopoabramo] * - subifd enables pyramid * - add support for page_height param * 11/5/22 * - switch to terget API for output * 24/9/23 * - add threaded write of tiled JPEG and JP2K */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #ifdef HAVE_TIFF #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #include #include #include #include "pforeign.h" #include "tiff.h" /* We do jpeg compress ourselves, if we can. */ #ifdef HAVE_JPEG #include "jpeg.h" #endif /*HAVE_JPEG*/ /* TODO: * * - add a flag for plane-separate write * * At the moment, we write bioformats-style TIFFs by splitting bands up, * making a toilet-roll image and writing out in pages. The TIFFs we make * are not tagged as plane-separate and do not have (eg.) RGB photometric * interpretation. Moreover, when working from an RGB source, we'll end * up reading the input three times. * * A write-plane-separate flag to the TIFF writer could let us set the * photometric interpretation correctly, and save all planes in a single * pass before doing a final gather sweep. */ /* Max number of alpha channels we allow. */ #define MAX_ALPHA (64) /* Bioformats uses this tag for lossy jp2k compressed tiles. */ #define JP2K_LOSSY 33004 /* Compression types we handle ourselves. */ static int wtiff_we_compress[] = { #ifdef HAVE_JPEG COMPRESSION_JPEG, #endif /*HAVE_JPEG*/ JP2K_LOSSY }; typedef struct _Layer Layer; typedef struct _Wtiff Wtiff; /* A layer in the pyramid. */ struct _Layer { Wtiff *wtiff; /* Main wtiff struct */ /* The temp target for this layer. */ VipsTarget *target; int width, height; /* Layer size */ int sub; /* Subsample factor for this layer */ TIFF *tif; /* TIFF file we write this layer to */ /* The image we build. We only keep a few scanlines of this around in * strip. */ VipsImage *image; /* The y position of strip in image. */ int y; /* The next line we write to in strip. */ int write_y; VipsRegion *strip; /* The current strip of pixels */ VipsRegion *copy; /* Pixels we copy to the next strip */ Layer *below; /* The smaller layer below us */ Layer *above; /* The larger layer above */ }; /* A TIFF image in the process of being written. */ struct _Wtiff { VipsImage *input; /* Original input image */ /* Image transformed ready for write. */ VipsImage *ready; /* Target to write to. */ VipsTarget *target; Layer *layer; /* Top of pyramid */ VipsPel *tbuf; /* TIFF output buffer */ int tls; /* Tile line size */ int compression; /* libtiff compression type */ int Q; /* JPEG q-factor, webp level */ int predictor; /* libtiff predictor type */ int tile; /* Tile or not */ int tilew, tileh; /* Tile size */ int pyramid; /* Wtiff pyramid */ int bitdepth; /* Write as 1, 2 or 4 bit */ int miniswhite; /* Wtiff as 0 == white */ int resunit; /* Resolution unit (inches or cm) */ double xres; /* Resolution in X */ double yres; /* Resolution in Y */ const char *profile; /* Profile to embed */ int bigtiff; /* True for bigtiff write */ int rgbjpeg; /* True for RGB not YCbCr */ int properties; /* Set to save XML props */ VipsRegionShrink region_shrink; /* How to shrink regions */ int level; /* zstd compression level */ gboolean lossless; /* lossless mode */ VipsForeignDzDepth depth; /* Pyr depth */ gboolean subifd; /* Write pyr layers into subifds */ gboolean premultiply; /* Premultiply alpha */ /* True if we've detected a toilet-roll image, plus the page height, * which has been checked to be a factor of im->Ysize. page_number * starts at zero and ticks up as we write each page. */ gboolean toilet_roll; int page_height; int page_number; int n_pages; /* The height of the TIFF we write. Equal to page_height in toilet * roll mode. */ int image_height; /* TRUE if we compress ourselves outside the libtiff lock. */ gboolean we_compress; /* Lock thread calls into libtiff with this. */ GMutex *lock; }; /* Write an ICC Profile from a file into the JPEG stream. */ static int embed_profile_file(TIFF *tif, const char *profile) { VipsBlob *blob; if (vips_profile_load(profile, &blob, NULL)) return -1; if (blob) { size_t length; const void *data = vips_blob_get(blob, &length); TIFFSetField(tif, TIFFTAG_ICCPROFILE, length, data); #ifdef DEBUG printf("vips2tiff: attached profile \"%s\"\n", profile); #endif /*DEBUG*/ vips_area_unref((VipsArea *) blob); } return 0; } /* Embed an ICC profile from VipsImage metadata. */ static int embed_profile_meta(TIFF *tif, VipsImage *im) { const void *data; size_t length; if (vips_image_get_blob(im, VIPS_META_ICC_NAME, &data, &length)) return -1; TIFFSetField(tif, TIFFTAG_ICCPROFILE, length, data); #ifdef DEBUG printf("vips2tiff: attached profile from meta\n"); #endif /*DEBUG*/ return 0; } static void wtiff_layer_init(Wtiff *wtiff, Layer **layer, Layer *above, int width, int height) { if (!*layer) { *layer = VIPS_NEW(wtiff->ready, Layer); (*layer)->wtiff = wtiff; (*layer)->width = width; (*layer)->height = height; if (!above) /* Top of pyramid. */ (*layer)->sub = 1; else (*layer)->sub = above->sub * 2; (*layer)->tif = NULL; (*layer)->image = NULL; (*layer)->write_y = 0; (*layer)->y = 0; (*layer)->strip = NULL; (*layer)->copy = NULL; (*layer)->below = NULL; (*layer)->above = above; /* The target we write to. The base layer writes to the main * output, each layer smaller writes to a memory temp. */ if (!above) { (*layer)->target = wtiff->target; g_object_ref((*layer)->target); } else (*layer)->target = vips_target_new_temp(wtiff->target); /* printf("wtiff_layer_init: sub = %d, width = %d, height = %d\n", (*layer)->sub, width, height); */ } if (wtiff->pyramid) { int limitw, limith; switch (wtiff->depth) { case VIPS_FOREIGN_DZ_DEPTH_ONEPIXEL: limitw = limith = 1; break; case VIPS_FOREIGN_DZ_DEPTH_ONETILE: limitw = wtiff->tilew; limith = wtiff->tileh; break; case VIPS_FOREIGN_DZ_DEPTH_ONE: limitw = wtiff->ready->Xsize; limith = wtiff->ready->Ysize; break; default: g_assert_not_reached(); } /* We make another layer if the image is too large to fit in a * single tile, and if neither axis is greater than 1. * * Very tall or wide images might end up with a smallest layer * larger than one tile. */ if (((*layer)->width > limitw || (*layer)->height > limith) && (*layer)->width > 1 && (*layer)->height > 1) wtiff_layer_init(wtiff, &(*layer)->below, *layer, width / 2, height / 2); } } static int wtiff_embed_profile(Wtiff *wtiff, TIFF *tif) { /* A profile supplied as an argument overrides an embedded * profile. */ if (wtiff->profile) { if (embed_profile_file(tif, wtiff->profile)) return -1; } else if (vips_image_get_typeof(wtiff->ready, VIPS_META_ICC_NAME)) { if (embed_profile_meta(tif, wtiff->ready)) return -1; } return 0; } static int wtiff_embed_xmp(Wtiff *wtiff, TIFF *tif) { const void *data; size_t size; if (!vips_image_get_typeof(wtiff->ready, VIPS_META_XMP_NAME)) return 0; if (vips_image_get_blob(wtiff->ready, VIPS_META_XMP_NAME, &data, &size)) return -1; TIFFSetField(tif, TIFFTAG_XMLPACKET, size, data); #ifdef DEBUG printf("vips2tiff: attached XMP from meta\n"); #endif /*DEBUG*/ return 0; } static int wtiff_embed_iptc(Wtiff *wtiff, TIFF *tif) { const void *data; size_t size; if (!vips_image_get_typeof(wtiff->ready, VIPS_META_IPTC_NAME)) return 0; if (vips_image_get_blob(wtiff->ready, VIPS_META_IPTC_NAME, &data, &size)) return -1; /* For no very good reason, libtiff stores IPTC as an array of * long, not byte. */ if (size & 3) { g_warning("%s", _("rounding up IPTC data length")); size /= 4; size += 1; } else size /= 4; TIFFSetField(tif, TIFFTAG_RICHTIFFIPTC, size, data); #ifdef DEBUG printf("vips2tiff: attached IPTC from meta\n"); #endif /*DEBUG*/ return 0; } static int wtiff_embed_photoshop(Wtiff *wtiff, TIFF *tif) { const void *data; size_t size; if (!vips_image_get_typeof(wtiff->ready, VIPS_META_PHOTOSHOP_NAME)) return 0; if (vips_image_get_blob(wtiff->ready, VIPS_META_PHOTOSHOP_NAME, &data, &size)) return -1; TIFFSetField(tif, TIFFTAG_PHOTOSHOP, size, data); #ifdef DEBUG printf("vips2tiff: attached photoshop data from meta\n"); #endif /*DEBUG*/ return 0; } /* Set IMAGEDESCRIPTION, if it's there. If @properties is TRUE, set from * vips' metadata. */ static int wtiff_embed_imagedescription(Wtiff *wtiff, TIFF *tif) { if (wtiff->properties) { char *doc; if (!(doc = vips__xml_properties(wtiff->ready))) return -1; TIFFSetField(tif, TIFFTAG_IMAGEDESCRIPTION, doc); g_free(doc); } else { const char *imagedescription; if (!vips_image_get_typeof(wtiff->ready, VIPS_META_IMAGEDESCRIPTION)) return 0; if (vips_image_get_string(wtiff->ready, VIPS_META_IMAGEDESCRIPTION, &imagedescription)) return -1; TIFFSetField(tif, TIFFTAG_IMAGEDESCRIPTION, imagedescription); } #ifdef DEBUG printf("vips2tiff: attached imagedescription from meta\n"); #endif /*DEBUG*/ return 0; } #ifdef HAVE_JPEG // in vips2jpeg.c void vips__jpeg_target_dest(j_compress_ptr cinfo, VipsTarget *target); static void wtiff_compress_jpeg_header(Wtiff *wtiff, struct jpeg_compress_struct *cinfo, VipsImage *image) { J_COLOR_SPACE space; cinfo->image_width = wtiff->tilew; cinfo->image_height = wtiff->tileh; cinfo->input_components = image->Bands; if (image->Bands == 4 && image->Type == VIPS_INTERPRETATION_CMYK) { space = JCS_CMYK; } else if (image->Bands == 3) space = JCS_RGB; else if (image->Bands == 1) space = JCS_GRAYSCALE; else /* Use luminance compression for all channels. */ space = JCS_UNKNOWN; cinfo->in_color_space = space; #ifdef HAVE_JPEG_EXT_PARAMS /* Reset compression profile to libjpeg defaults */ if (jpeg_c_int_param_supported(cinfo, JINT_COMPRESS_PROFILE)) jpeg_c_set_int_param(cinfo, JINT_COMPRESS_PROFILE, JCP_FASTEST); #endif jpeg_set_defaults(cinfo); // use RGB mode (no chroma subsample) for high Q if (wtiff->Q >= 90) jpeg_set_colorspace(cinfo, JCS_RGB); /* Set compression quality. Must be called after setting params above. */ jpeg_set_quality(cinfo, wtiff->Q, TRUE); // Avoid writing the JFIF APP0 marker. cinfo->write_JFIF_header = FALSE; } static int wtiff_compress_jpeg(Wtiff *wtiff, VipsRegion *strip, VipsRect *tile, VipsTarget *target) { size_t sizeof_pel = VIPS_REGION_SIZEOF_PEL(strip); struct jpeg_compress_struct cinfo; ErrorManager eman; VipsPel *line; #ifdef DEBUG printf("wtiff_compress_jpeg: " "left = %d, top = %d, width = %d, height = %d\n", tile->left, tile->top, tile->width, tile->height); #endif /*DEBUG*/ // we could have one of these per thread and reuse it for a small speedup cinfo.err = jpeg_std_error(&eman.pub); cinfo.dest = NULL; eman.pub.error_exit = vips__new_error_exit; eman.pub.output_message = vips__new_output_message; eman.fp = NULL; // we need a line buffer to pad edge tiles line = VIPS_MALLOC(NULL, wtiff->tilew * sizeof_pel); /* Error handling. The error message will have ben set by our handlers. */ if (setjmp(eman.jmp)) { jpeg_destroy_compress(&cinfo); VIPS_FREE(line); return -1; } /* Make jpeg compression object. */ jpeg_create_compress(&cinfo); /* Attach output. */ vips__jpeg_target_dest(&cinfo, target); wtiff_compress_jpeg_header(wtiff, &cinfo, strip->im); // don't output tables, just coefficients jpeg_suppress_tables(&cinfo, TRUE); // FALSE means we are outputting an abbreviated (no tables) datastream jpeg_start_compress(&cinfo, FALSE); if (tile->width < wtiff->tilew || tile->height < wtiff->tileh) { JSAMPROW row_pointer[1] = { line }; for (int y = 0; y < tile->height; y++) { memcpy(line, VIPS_REGION_ADDR(strip, tile->left, tile->top + y), tile->width * sizeof_pel); jpeg_write_scanlines(&cinfo, row_pointer, 1); } memset(line, 0, wtiff->tilew * sizeof_pel); for (int y = tile->height; y < wtiff->tileh; y++) { jpeg_write_scanlines(&cinfo, row_pointer, 1); } } else { for (int y = 0; y < tile->height; y++) { JSAMPROW row_pointer[1]; row_pointer[0] = VIPS_REGION_ADDR(strip, tile->left, tile->top + y); jpeg_write_scanlines(&cinfo, row_pointer, 1); } } jpeg_finish_compress(&cinfo); jpeg_destroy_compress(&cinfo); VIPS_FREE(line); return 0; } static int wtiff_compress_jpeg_tables(Wtiff *wtiff, VipsImage *image, int width, int height, VipsTarget *target) { struct jpeg_compress_struct cinfo; struct jpeg_error_mgr jerr; cinfo.err = jpeg_std_error(&jerr); jpeg_create_compress(&cinfo); /* Attach output. */ vips__jpeg_target_dest(&cinfo, target); wtiff_compress_jpeg_header(wtiff, &cinfo, image); // write just the header tables jpeg_write_tables(&cinfo); jpeg_destroy_compress(&cinfo); return 0; } #endif /*HAVE_JPEG*/ /* Write a TIFF header for this layer. */ static int wtiff_write_header(Wtiff *wtiff, Layer *layer) { TIFF *tif = layer->tif; int i; int orientation; #ifdef DEBUG printf("wtiff_write_header: sub %d, width %d, height %d\n", layer->sub, layer->width, layer->height); #endif /*DEBUG*/ /* Output base header fields. */ TIFFSetField(tif, TIFFTAG_IMAGEWIDTH, layer->width); TIFFSetField(tif, TIFFTAG_IMAGELENGTH, layer->height); TIFFSetField(tif, TIFFTAG_PLANARCONFIG, PLANARCONFIG_CONTIG); TIFFSetField(tif, TIFFTAG_ORIENTATION, ORIENTATION_TOPLEFT); TIFFSetField(tif, TIFFTAG_COMPRESSION, wtiff->compression); if (wtiff->compression == COMPRESSION_JPEG) TIFFSetField(tif, TIFFTAG_JPEGQUALITY, wtiff->Q); #ifdef HAVE_TIFF_COMPRESSION_WEBP if (wtiff->compression == COMPRESSION_WEBP) { TIFFSetField(tif, TIFFTAG_WEBP_LEVEL, wtiff->Q); TIFFSetField(tif, TIFFTAG_WEBP_LOSSLESS, wtiff->lossless); } if (wtiff->compression == COMPRESSION_ZSTD) { TIFFSetField(tif, TIFFTAG_ZSTD_LEVEL, wtiff->level); if (wtiff->predictor != VIPS_FOREIGN_TIFF_PREDICTOR_NONE) TIFFSetField(tif, TIFFTAG_PREDICTOR, wtiff->predictor); } #endif /*HAVE_TIFF_COMPRESSION_WEBP*/ if ((wtiff->compression == COMPRESSION_ADOBE_DEFLATE || wtiff->compression == COMPRESSION_LZW) && wtiff->predictor != VIPS_FOREIGN_TIFF_PREDICTOR_NONE) TIFFSetField(tif, TIFFTAG_PREDICTOR, wtiff->predictor); for (i = 0; i < VIPS_NUMBER(wtiff_we_compress); i++) if (wtiff->compression == wtiff_we_compress[i]) { wtiff->we_compress = TRUE; break; } /* Special case: we don't compress JPEG strip images, they are best left * to libtiff. */ if (wtiff->compression == COMPRESSION_JPEG && !wtiff->tile) wtiff->we_compress = FALSE; /* Don't write mad resolutions (eg. zero), it confuses some programs. */ TIFFSetField(tif, TIFFTAG_RESOLUTIONUNIT, wtiff->resunit); TIFFSetField(tif, TIFFTAG_XRESOLUTION, VIPS_FCLIP(0.01, wtiff->xres, 1000000)); TIFFSetField(tif, TIFFTAG_YRESOLUTION, VIPS_FCLIP(0.01, wtiff->yres, 1000000)); if (wtiff_embed_xmp(wtiff, tif) || wtiff_embed_iptc(wtiff, tif) || wtiff_embed_photoshop(wtiff, tif) || wtiff_embed_imagedescription(wtiff, tif) || wtiff_embed_profile(wtiff, tif)) return -1; if (vips_image_get_typeof(wtiff->ready, VIPS_META_ORIENTATION) && !vips_image_get_int(wtiff->ready, VIPS_META_ORIENTATION, &orientation)) TIFFSetField(tif, TIFFTAG_ORIENTATION, orientation); /* And colour fields. */ if (wtiff->ready->Coding == VIPS_CODING_LABQ) { TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 3); TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, 8); TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, PHOTOMETRIC_CIELAB); } else if (wtiff->bitdepth == 1 || wtiff->bitdepth == 2 || wtiff->bitdepth == 4) { TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, 1); TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, wtiff->bitdepth); TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, wtiff->miniswhite ? PHOTOMETRIC_MINISWHITE : PHOTOMETRIC_MINISBLACK); } else { int photometric; /* Number of bands that have colour in .. other bands are saved * as alpha. */ int colour_bands; int alpha_bands; TIFFSetField(tif, TIFFTAG_SAMPLESPERPIXEL, wtiff->ready->Bands); TIFFSetField(tif, TIFFTAG_BITSPERSAMPLE, vips_format_sizeof(wtiff->ready->BandFmt) << 3); if (wtiff->ready->Type == VIPS_INTERPRETATION_B_W || wtiff->ready->Type == VIPS_INTERPRETATION_GREY16 || wtiff->ready->Bands < 3) { /* Mono or mono + alpha. */ photometric = wtiff->miniswhite ? PHOTOMETRIC_MINISWHITE : PHOTOMETRIC_MINISBLACK; colour_bands = 1; } else if (wtiff->ready->Type == VIPS_INTERPRETATION_LAB || wtiff->ready->Type == VIPS_INTERPRETATION_LABS) { photometric = PHOTOMETRIC_CIELAB; colour_bands = 3; } else if (wtiff->input->Type == VIPS_INTERPRETATION_XYZ) { double stonits; photometric = PHOTOMETRIC_LOGLUV; /* Tell libtiff we will write as float XYZ. */ TIFFSetField(tif, TIFFTAG_SGILOGDATAFMT, SGILOGDATAFMT_FLOAT); stonits = 1.0; if (vips_image_get_typeof(wtiff->ready, "stonits")) vips_image_get_double(wtiff->ready, "stonits", &stonits); TIFFSetField(tif, TIFFTAG_STONITS, stonits); colour_bands = 3; } else if (wtiff->ready->Type == VIPS_INTERPRETATION_CMYK && wtiff->ready->Bands >= 4) { photometric = PHOTOMETRIC_SEPARATED; TIFFSetField(tif, TIFFTAG_INKSET, INKSET_CMYK); colour_bands = 4; } else if (wtiff->compression == COMPRESSION_JPEG && wtiff->ready->Bands == 3 && wtiff->ready->BandFmt == VIPS_FORMAT_UCHAR && (!wtiff->rgbjpeg && wtiff->Q < 90)) { /* This signals to libjpeg that it can do * YCbCr chrominance subsampling from RGB, not * that we will supply the image as YCbCr. */ photometric = PHOTOMETRIC_YCBCR; TIFFSetField(tif, TIFFTAG_JPEGCOLORMODE, JPEGCOLORMODE_RGB); colour_bands = 3; } else { /* Some kind of generic multi-band image with three or * more bands ... save the first three bands as RGB, * the rest as alpha. */ photometric = PHOTOMETRIC_RGB; colour_bands = 3; } alpha_bands = VIPS_CLIP(0, wtiff->ready->Bands - colour_bands, MAX_ALPHA); if (alpha_bands > 0) { guint16 v[MAX_ALPHA]; int i; /* EXTRASAMPLE_UNASSALPHA means generic extra * alpha-like channels. ASSOCALPHA means pre-multipled * alpha only. * * Make the first channel the premultiplied alpha, if * we are premultiplying. */ for (i = 0; i < alpha_bands; i++) v[i] = i == 0 && wtiff->premultiply ? EXTRASAMPLE_ASSOCALPHA : EXTRASAMPLE_UNASSALPHA; TIFFSetField(tif, TIFFTAG_EXTRASAMPLES, alpha_bands, v); } TIFFSetField(tif, TIFFTAG_PHOTOMETRIC, photometric); } /* Layout. */ if (wtiff->tile) { TIFFSetField(tif, TIFFTAG_TILEWIDTH, wtiff->tilew); TIFFSetField(tif, TIFFTAG_TILELENGTH, wtiff->tileh); } else TIFFSetField(tif, TIFFTAG_ROWSPERSTRIP, wtiff->tileh); if (layer->above) /* Pyramid layer. */ TIFFSetField(tif, TIFFTAG_SUBFILETYPE, FILETYPE_REDUCEDIMAGE); else if (wtiff->toilet_roll) { /* One page of many. */ TIFFSetField(tif, TIFFTAG_SUBFILETYPE, FILETYPE_PAGE); TIFFSetField(tif, TIFFTAG_PAGENUMBER, wtiff->page_number, wtiff->n_pages); } /* Sample format. * * Don't set for logluv: libtiff does this for us. */ if (wtiff->input->Type != VIPS_INTERPRETATION_XYZ) { int format; format = SAMPLEFORMAT_UINT; if (vips_band_format_isuint(wtiff->ready->BandFmt)) format = SAMPLEFORMAT_UINT; else if (vips_band_format_isint(wtiff->ready->BandFmt)) format = SAMPLEFORMAT_INT; else if (vips_band_format_isfloat(wtiff->ready->BandFmt)) format = SAMPLEFORMAT_IEEEFP; else if (vips_band_format_iscomplex(wtiff->ready->BandFmt)) format = SAMPLEFORMAT_COMPLEXIEEEFP; TIFFSetField(tif, TIFFTAG_SAMPLEFORMAT, format); } #ifdef HAVE_JPEG // we have to write the tables ourselves for JPEG we_compress if (wtiff->we_compress && wtiff->compression == COMPRESSION_JPEG) { VipsTarget *target; int result; unsigned char *buffer; size_t length; target = vips_target_new_to_memory(); result = wtiff_compress_jpeg_tables(wtiff, wtiff->input, wtiff->input->Xsize, wtiff->input->Ysize, target); if (result) { g_object_unref(target); return -1; } buffer = vips_target_steal(target, &length); g_object_unref(target); #ifdef DEBUG printf("setting %zd bytes of table data\n", length); #endif /*DEBUG*/ TIFFSetField(tif, TIFFTAG_JPEGTABLES, length, buffer); g_free(buffer); } #endif /*HAVE_JPEG*/ return 0; } static int wtiff_layer_rewind(Wtiff *wtiff, Layer *layer) { VipsRect strip_size; /* Build a line of tiles here. * * Expand the strip if necessary to make sure we have an even * number of lines. */ strip_size.left = 0; strip_size.top = 0; strip_size.width = layer->image->Xsize; strip_size.height = wtiff->tileh; if ((strip_size.height & 1) == 1) strip_size.height += 1; if (vips_region_buffer(layer->strip, &strip_size)) return -1; layer->y = 0; layer->write_y = 0; return 0; } static int wtiff_allocate_layers(Wtiff *wtiff) { Layer *layer; g_assert(wtiff->layer); for (layer = wtiff->layer; layer; layer = layer->below) { if (!layer->image) { layer->image = vips_image_new(); if (vips_image_pipelinev(layer->image, VIPS_DEMAND_STYLE_ANY, wtiff->ready, NULL)) return -1; layer->image->Xsize = layer->width; layer->image->Ysize = layer->height; layer->strip = vips_region_new(layer->image); layer->copy = vips_region_new(layer->image); /* The regions will get used in the bg thread callback, * so make sure we don't own them. */ vips__region_no_ownership(layer->strip); vips__region_no_ownership(layer->copy); layer->tif = vips__tiff_openout_target(layer->target, wtiff->bigtiff); if (!layer->tif) return -1; } if (wtiff_layer_rewind(wtiff, layer)) return -1; if (wtiff_write_header(wtiff, layer)) return -1; } if (!wtiff->tbuf) { if (wtiff->tile) wtiff->tbuf = vips_malloc(NULL, TIFFTileSize(wtiff->layer->tif)); else wtiff->tbuf = vips_malloc(NULL, TIFFScanlineSize(wtiff->layer->tif)); if (!wtiff->tbuf) return -1; } return 0; } /* Free a single pyramid layer. */ static void layer_free(Layer *layer) { /* Don't unref the target for this layer -- we'll need it for gather. */ VIPS_FREEF(TIFFClose, layer->tif); VIPS_UNREF(layer->strip); VIPS_UNREF(layer->copy); VIPS_UNREF(layer->image); } static void wtiff_free(Wtiff *wtiff) { Layer *layer; /* Free all pyramid resources. */ for (layer = wtiff->layer; layer; layer = layer->below) { layer_free(layer); VIPS_UNREF(layer->target); } VIPS_UNREF(wtiff->ready); VIPS_FREE(wtiff->tbuf); VIPS_FREEF(vips_g_mutex_free, wtiff->lock); VIPS_FREE(wtiff); } static int get_compression(VipsForeignTiffCompression compression) { switch (compression) { case VIPS_FOREIGN_TIFF_COMPRESSION_NONE: return COMPRESSION_NONE; case VIPS_FOREIGN_TIFF_COMPRESSION_JPEG: return COMPRESSION_JPEG; case VIPS_FOREIGN_TIFF_COMPRESSION_DEFLATE: return COMPRESSION_ADOBE_DEFLATE; case VIPS_FOREIGN_TIFF_COMPRESSION_PACKBITS: return COMPRESSION_PACKBITS; case VIPS_FOREIGN_TIFF_COMPRESSION_CCITTFAX4: return COMPRESSION_CCITTFAX4; case VIPS_FOREIGN_TIFF_COMPRESSION_LZW: return COMPRESSION_LZW; #ifdef HAVE_TIFF_COMPRESSION_WEBP case VIPS_FOREIGN_TIFF_COMPRESSION_WEBP: return COMPRESSION_WEBP; case VIPS_FOREIGN_TIFF_COMPRESSION_ZSTD: return COMPRESSION_ZSTD; #endif /*HAVE_TIFF_COMPRESSION_WEBP*/ case VIPS_FOREIGN_TIFF_COMPRESSION_JP2K: return JP2K_LOSSY; default: return COMPRESSION_NONE; } } static int get_resunit(VipsForeignTiffResunit resunit) { switch (resunit) { case VIPS_FOREIGN_TIFF_RESUNIT_CM: return RESUNIT_CENTIMETER; case VIPS_FOREIGN_TIFF_RESUNIT_INCH: return RESUNIT_INCH; default: g_assert_not_reached(); } /* Keep -Wall happy. */ return -1; } /* Get the image ready to be written. */ static int ready_to_write(Wtiff *wtiff) { VipsImage *input; VipsImage *x; input = wtiff->input; g_object_ref(input); if (vips_check_coding_known("vips2tiff", input)) { VIPS_UNREF(input); return -1; } /* Premultiply any alpha, if necessary. */ if (wtiff->premultiply && vips_image_hasalpha(input)) { VipsBandFormat start_format = input->BandFmt; if (vips_premultiply(input, &x, NULL)) { VIPS_UNREF(input); return -1; } VIPS_UNREF(input); input = x; /* Premultiply always makes a float -- cast back again. */ if (vips_cast(input, &x, start_format, NULL)) { VIPS_UNREF(input); return -1; } VIPS_UNREF(input); input = x; } /* "squash" float LAB down to LABQ. */ if (wtiff->bitdepth && input->Bands == 3 && input->BandFmt == VIPS_FORMAT_FLOAT && input->Type == VIPS_INTERPRETATION_LAB) { if (vips_Lab2LabQ(input, &x, NULL)) { VIPS_UNREF(input); return -1; } VIPS_UNREF(input); input = x; } wtiff->ready = input; return 0; } static Wtiff * wtiff_new(VipsImage *input, VipsTarget *target, VipsForeignTiffCompression compression, int Q, VipsForeignTiffPredictor predictor, const char *profile, gboolean tile, int tile_width, int tile_height, gboolean pyramid, int bitdepth, gboolean miniswhite, VipsForeignTiffResunit resunit, double xres, double yres, gboolean bigtiff, gboolean rgbjpeg, gboolean properties, VipsRegionShrink region_shrink, int level, gboolean lossless, VipsForeignDzDepth depth, gboolean subifd, gboolean premultiply, int page_height) { Wtiff *wtiff; if (!(wtiff = VIPS_NEW(NULL, Wtiff))) return NULL; wtiff->input = input; wtiff->ready = NULL; wtiff->target = target; wtiff->layer = NULL; wtiff->tbuf = NULL; wtiff->compression = get_compression(compression); wtiff->Q = Q; wtiff->predictor = predictor; wtiff->tile = tile; wtiff->tilew = tile_width; wtiff->tileh = tile_height; wtiff->pyramid = pyramid; wtiff->bitdepth = bitdepth; wtiff->miniswhite = miniswhite; wtiff->resunit = get_resunit(resunit); wtiff->xres = xres; wtiff->yres = yres; wtiff->profile = profile; wtiff->bigtiff = bigtiff; wtiff->rgbjpeg = rgbjpeg; wtiff->properties = properties; wtiff->region_shrink = region_shrink; wtiff->level = level; wtiff->lossless = lossless; wtiff->depth = depth; wtiff->subifd = subifd; wtiff->premultiply = premultiply; wtiff->toilet_roll = FALSE; wtiff->page_height = page_height; wtiff->page_number = 0; wtiff->n_pages = 1; wtiff->image_height = input->Ysize; wtiff->lock = vips_g_mutex_new(); /* Any pre-processing on the image. */ if (ready_to_write(wtiff)) { wtiff_free(wtiff); return NULL; } /* XYZ images are written as libtiff LOGLUV. */ if (wtiff->ready->Type == VIPS_INTERPRETATION_XYZ) wtiff->compression = COMPRESSION_SGILOG; /* Multipage image? 0 is the default for this argument. */ if (wtiff->page_height == 0) wtiff->page_height = vips_image_get_page_height(input); if (wtiff->page_height > 0 && wtiff->page_height < wtiff->ready->Ysize && wtiff->ready->Ysize % wtiff->page_height == 0) { #ifdef DEBUG printf("wtiff_new: detected toilet roll image, page-height=%d\n", wtiff->page_height); printf("wtiff_new: pages=%d\n", wtiff->ready->Ysize / wtiff->page_height); #endif /*DEBUG*/ wtiff->toilet_roll = TRUE; wtiff->image_height = wtiff->page_height; wtiff->n_pages = wtiff->ready->Ysize / wtiff->page_height; } /* subifd turns on pyramid mode. */ if (wtiff->subifd) wtiff->pyramid = TRUE; /* Pyramid images must be tiled. */ if (wtiff->pyramid) wtiff->tile = TRUE; /* Multi-page pyramids must be in subifd mode. */ if (wtiff->pyramid && wtiff->toilet_roll) wtiff->subifd = TRUE; /* We can only pyramid LABQ and non-complex images. */ if (wtiff->pyramid) { if (wtiff->ready->Coding == VIPS_CODING_NONE && vips_band_format_iscomplex(wtiff->ready->BandFmt)) { wtiff_free(wtiff); vips_error("vips2tiff", "%s", _("can only pyramid LABQ and non-complex images")); return NULL; } } /* If compression is off and we're writing a >4gb image, automatically * enable bigtiff. * * This won't always work. If the image data is just under 4gb but * there's a lot of metadata, we could be pushed over the 4gb limit. */ if (wtiff->compression == COMPRESSION_NONE && VIPS_IMAGE_SIZEOF_IMAGE(wtiff->ready) > UINT_MAX) wtiff->bigtiff = TRUE; /* In strip mode we use tileh to set rowsperstrip, and that does not * have the multiple-of-16 restriction. */ if (wtiff->tile) { if ((wtiff->tilew & 0xf) != 0 || (wtiff->tileh & 0xf) != 0) { wtiff_free(wtiff); vips_error("vips2tiff", "%s", _("tile size not a multiple of 16")); return NULL; } } /* Depth 8 is handled above. */ if (wtiff->bitdepth && !(wtiff->bitdepth == 1 || wtiff->bitdepth == 2 || wtiff->bitdepth == 4)) { g_warning("%s", _("bitdepth 1, 2 or 4 only -- disabling bitdepth")); wtiff->bitdepth = 0; } /* Can only have byte fractional bit depths for 8 bit mono. * 3-band float should have been packed above. */ if (wtiff->bitdepth && !(wtiff->ready->Coding == VIPS_CODING_NONE && wtiff->ready->BandFmt == VIPS_FORMAT_UCHAR && wtiff->ready->Bands == 1)) { g_warning("%s", ("can only set bitdepth for 1-band uchar and " "3-band float lab -- disabling bitdepth")); wtiff->bitdepth = 0; } if (wtiff->bitdepth && wtiff->compression == COMPRESSION_JPEG) { g_warning("%s", _("can't have <8 bit JPEG -- disabling JPEG")); wtiff->compression = COMPRESSION_NONE; } /* We can only MINISWHITE non-complex images of 1 or 2 bands. */ if (wtiff->miniswhite && (wtiff->ready->Coding != VIPS_CODING_NONE || vips_band_format_iscomplex(wtiff->ready->BandFmt) || wtiff->ready->Bands > 2)) { g_warning("%s", _("can only save non-complex greyscale images " "as miniswhite -- disabling miniswhite")); wtiff->miniswhite = FALSE; } /* Sizeof a line of bytes in the TIFF tile. */ if (wtiff->ready->Coding == VIPS_CODING_LABQ) wtiff->tls = wtiff->tilew * 3; else if (wtiff->bitdepth == 1) wtiff->tls = VIPS_ROUND_UP(wtiff->tilew, 8) / 8; else if (wtiff->bitdepth == 2) wtiff->tls = VIPS_ROUND_UP(wtiff->tilew, 4) / 4; else if (wtiff->bitdepth == 4) wtiff->tls = VIPS_ROUND_UP(wtiff->tilew, 2) / 2; else wtiff->tls = VIPS_IMAGE_SIZEOF_PEL(wtiff->ready) * wtiff->tilew; return wtiff; } /* Convert VIPS LabQ to TIFF LAB. Just take the first three bands. */ static void LabQ2LabC(VipsPel *q, VipsPel *p, int n) { int x; for (x = 0; x < n; x++) { /* Get most significant 8 bits of lab. */ q[0] = p[0]; q[1] = p[1]; q[2] = p[2]; p += 4; q += 3; } } /* Pack 8 bit VIPS to N bit TIFF. */ static void eightbit2nbit(Wtiff *wtiff, VipsPel *q, VipsPel *p, int n) { /* Invert in miniswhite mode. */ VipsPel mask = wtiff->miniswhite ? 255 : 0; int pixel_mask = 8 / wtiff->bitdepth - 1; int shift = 8 - wtiff->bitdepth; VipsPel bits; int x; bits = 0; for (x = 0; x < n; x++) { bits <<= wtiff->bitdepth; bits |= p[x] >> shift; if ((x & pixel_mask) == pixel_mask) *q++ = bits ^ mask; } /* Any left-over bits? Need to be left-aligned. */ if ((x & pixel_mask) != 0) { /* The number of bits we've collected in bits and must * left-align and flush. */ int collected_bits = (x & pixel_mask) << (wtiff->bitdepth - 1); *q++ = (bits ^ mask) << (8 - collected_bits); } } /* Swap the sense of the first channel, if necessary. */ #define GREY_LOOP(TYPE, MAX) \ { \ TYPE *p1; \ TYPE *q1; \ \ p1 = (TYPE *) p; \ q1 = (TYPE *) q; \ for (x = 0; x < n; x++) { \ if (invert) \ q1[0] = MAX - p1[0]; \ else \ q1[0] = p1[0]; \ \ for (i = 1; i < im->Bands; i++) \ q1[i] = p1[i]; \ \ q1 += im->Bands; \ p1 += im->Bands; \ } \ } /* If we're writing a 1 or 2 band image as a greyscale and MINISWHITE, we need * to swap the sense of the first band. See tiff2vips.c, greyscale_line() for * the opposite conversion. */ static void invert_band0(Wtiff *wtiff, VipsPel *q, VipsPel *p, int n) { VipsImage *im = wtiff->ready; gboolean invert = wtiff->miniswhite; int x, i; switch (im->BandFmt) { case VIPS_FORMAT_UCHAR: case VIPS_FORMAT_CHAR: GREY_LOOP(guchar, UCHAR_MAX); break; case VIPS_FORMAT_SHORT: GREY_LOOP(gshort, SHRT_MAX); break; case VIPS_FORMAT_USHORT: GREY_LOOP(gushort, USHRT_MAX); break; case VIPS_FORMAT_INT: GREY_LOOP(gint, INT_MAX); break; case VIPS_FORMAT_UINT: GREY_LOOP(guint, UINT_MAX); break; case VIPS_FORMAT_FLOAT: GREY_LOOP(float, 1.0); break; case VIPS_FORMAT_DOUBLE: GREY_LOOP(double, 1.0); break; default: g_assert_not_reached(); } } /* Convert VIPS LABS to TIFF 16 bit LAB. */ static void LabS2Lab16(VipsPel *q, VipsPel *p, int n, int samples_per_pixel) { short *p1 = (short *) p; unsigned short *q1 = (unsigned short *) q; int x; for (x = 0; x < n; x++) { int i; /* LABS L can be negative. */ q1[0] = VIPS_LSHIFT_INT(VIPS_MAX(0, p1[0]), 1); for (i = 1; i < samples_per_pixel; i++) q1[i] = p1[i]; q1 += samples_per_pixel; p1 += samples_per_pixel; } } /* Convert VIPS D65 XYZ to TIFF scaled float illuminant-free xyz. */ static void XYZ2tiffxyz(VipsPel *q, VipsPel *p, int n, int samples_per_pixel) { float *p1 = (float *) p; float *q1 = (float *) q; int x; for (x = 0; x < n; x++) { int i; q1[0] = p1[0] / VIPS_D65_X0; q1[1] = p1[1] / VIPS_D65_Y0; q1[2] = p1[2] / VIPS_D65_Z0; for (i = 3; i < samples_per_pixel; i++) q1[i] = p1[i]; q1 += samples_per_pixel; p1 += samples_per_pixel; } } /* Pack the pixels in @area from @in into a TIFF tile buffer. */ static void wtiff_pack2tiff(Wtiff *wtiff, Layer *layer, VipsRegion *in, VipsRect *area, VipsPel *q) { int y; /* JPEG compression can read outside the pixel area for edge tiles. It * always compresses 8x8 blocks, so if the image width or height is * not a multiple of 8, it can look beyond the pixels we will write. * * Black out the tile first to make sure these edge pixels are always * zero. */ if (wtiff->compression == COMPRESSION_JPEG && (area->width < wtiff->tilew || area->height < wtiff->tileh)) memset(q, 0, TIFFTileSize(layer->tif)); for (y = area->top; y < VIPS_RECT_BOTTOM(area); y++) { VipsPel *p = (VipsPel *) VIPS_REGION_ADDR(in, area->left, y); if (wtiff->ready->Coding == VIPS_CODING_LABQ) LabQ2LabC(q, p, area->width); else if (wtiff->bitdepth > 0) eightbit2nbit(wtiff, q, p, area->width); else if (wtiff->input->Type == VIPS_INTERPRETATION_XYZ) XYZ2tiffxyz(q, p, area->width, in->im->Bands); else if ((in->im->Bands == 1 || in->im->Bands == 2) && wtiff->miniswhite) invert_band0(wtiff, q, p, area->width); else if (wtiff->ready->BandFmt == VIPS_FORMAT_SHORT && wtiff->ready->Type == VIPS_INTERPRETATION_LABS) LabS2Lab16(q, p, area->width, in->im->Bands); else memcpy(q, p, area->width * VIPS_IMAGE_SIZEOF_PEL(wtiff->ready)); q += wtiff->tls; } } // a compressed (raw) tile waiting to be written typedef struct _WtiffTile { // x position (sort by this) int x; int y; // compressed data unsigned char *buffer; size_t length; } WtiffTile; // the state for a row of tiles being compressed in parallel typedef struct _WtiffRow { Wtiff *wtiff; VipsRegion *strip; Layer *layer; int x; // set of compressed tiles we have accumulated GSList *tiles; } WtiffRow; static int wtiff_row_add_tile(WtiffRow *row, int x, int y, unsigned char *buffer, size_t length) { WtiffTile *tile; if (!(tile = VIPS_NEW(NULL, WtiffTile))) return -1; tile->x = x; tile->y = y; tile->buffer = buffer; tile->length = length; g_mutex_lock(row->wtiff->lock); row->tiles = g_slist_prepend(row->tiles, tile); g_mutex_unlock(row->wtiff->lock); return 0; } static void wtiff_row_free(WtiffRow *row) { GSList *p; for (p = row->tiles; p; p = p->next) { WtiffTile *tile = (WtiffTile *) p->data; VIPS_FREE(tile->buffer); VIPS_FREE(tile); } VIPS_FREEF(g_slist_free, row->tiles); } static int wtiff_tile_compare(WtiffTile *a, WtiffTile *b, void *user_data) { return b->x - a->x; } static int wtiff_row_write(WtiffRow *row, TIFF *tif) { GSList *p; row->tiles = g_slist_sort(row->tiles, (GCompareFunc) wtiff_tile_compare); for (p = row->tiles; p; p = p->next) { WtiffTile *tile = (WtiffTile *) p->data; ttile_t tile_no = TIFFComputeTile(tif, tile->x, tile->y, 0, 0); if (TIFFWriteRawTile(tif, tile_no, tile->buffer, tile->length) == -1) { vips_error("vips2tiff", "%s", _("TIFF write tile failed")); return -1; } } return 0; } static int wtiff_layer_row_allocate(VipsThreadState *state, void *a, gboolean *stop) { WtiffRow *row = (WtiffRow *) a; Wtiff *wtiff = row->wtiff; VipsImage *im = row->layer->image; VipsRegion *strip = row->strip; VipsRect *valid = &strip->valid; #ifdef DEBUG_VERBOSE printf("wtiff_layer_row_allocate:\n"); #endif /*DEBUG_VERBOSE*/ if (row->x >= im->Xsize) { *stop = TRUE; #ifdef DEBUG_VERBOSE printf("wtiff_layer_row_allocate: done\n"); #endif /*DEBUG_VERBOSE*/ return 0; } state->x = row->x; state->y = valid->top; row->x += wtiff->tilew; return 0; } /* Compress a tile from a threadpool. */ static int wtiff_layer_row_work(VipsThreadState *state, void *a) { WtiffRow *row = (WtiffRow *) a; Wtiff *wtiff = row->wtiff; Layer *layer = row->layer; VipsImage *im = layer->image; VipsRegion *strip = row->strip; VipsRect *valid = &strip->valid; VipsRect image; VipsRect tile; VipsTarget *target; int result; unsigned char *buffer; size_t length; image.left = 0; image.top = 0; image.width = im->Xsize; image.height = im->Ysize; tile.left = state->x; tile.top = valid->top; tile.width = wtiff->tilew; tile.height = wtiff->tileh; vips_rect_intersectrect(&tile, &image, &tile); #ifdef DEBUG_VERBOSE printf("Compressing %dx%d tile at position %dx%d\n", tile.width, tile.height, tile.left, tile.top); #endif /*DEBUG_VERBOSE*/ target = vips_target_new_to_memory(); switch (wtiff->compression) { case JP2K_LOSSY: /* Sadly, chroma subsample seems not to work for edge tiles in tiff * with jp2k compression, so we always pass FALSE instead of: * * !wtiff->rgbjpeg && wtiff->Q < 90, * * I've verified that the libvips jp2k encode and decode subsample * operations fill the comps[i].data arrays correctly, so it * seems to be a openjpeg bug. * * FIXME ... try again with openjpeg 2.5, when that comes. */ result = vips__foreign_save_jp2k_compress( strip, &tile, target, wtiff->tilew, wtiff->tileh, !wtiff->rgbjpeg, // !wtiff->rgbjpeg && wtiff->Q < 90, FALSE, wtiff->lossless, wtiff->Q); break; #ifdef HAVE_JPEG case COMPRESSION_JPEG: result = wtiff_compress_jpeg(wtiff, strip, &tile, target); break; #endif /*HAVE_JPEG*/ default: result = -1; g_assert_not_reached(); break; } if (result) { g_object_unref(target); return -1; } buffer = vips_target_steal(target, &length); if (wtiff_row_add_tile(row, tile.left, tile.top, buffer, length)) { g_object_unref(target); g_free(buffer); return -1; } g_object_unref(target); return 0; } /* Write a set of tiles across the strip. */ static int wtiff_layer_write_tiles(Wtiff *wtiff, Layer *layer, VipsRegion *strip) { VipsImage *im = layer->image; VipsRect *area = &strip->valid; VipsRect image; int x; image.left = 0; image.top = 0; image.width = im->Xsize; image.height = im->Ysize; if (wtiff->we_compress) { /* If we're compressing ourselves, we can do the whole strip in * parallel. */ WtiffRow row = { wtiff, strip, layer, 0 }; /* We don't want threadpool_run to minimise on completion -- we need to * keep the cache on the pipeline before us. */ vips_image_set_int(im, "vips-no-minimise", 1); if (vips_threadpool_run(im, vips_thread_state_new, wtiff_layer_row_allocate, wtiff_layer_row_work, NULL, &row)) { wtiff_row_free(&row); return -1; } if (wtiff_row_write(&row, layer->tif)) { wtiff_row_free(&row); return -1; } wtiff_row_free(&row); } else { /* If we're using libtiff compression, we have to be serial. */ for (x = 0; x < im->Xsize; x += wtiff->tilew) { VipsRect tile; tile.left = x; tile.top = area->top; tile.width = wtiff->tilew; tile.height = wtiff->tileh; vips_rect_intersectrect(&tile, &image, &tile); /* Have to repack pixels for libtiff. */ wtiff_pack2tiff(wtiff, layer, strip, &tile, wtiff->tbuf); if (TIFFWriteTile(layer->tif, wtiff->tbuf, tile.left, tile.top, 0, 0) < 0) { vips_error("vips2tiff", "%s", _("TIFF write tile failed")); return -1; } } } return 0; } /* Write tileh scanlines, less for the last strip. */ static int wtiff_layer_write_strip(Wtiff *wtiff, Layer *layer, VipsRegion *strip) { VipsImage *im = layer->image; VipsRect *area = &strip->valid; int height = VIPS_MIN(wtiff->tileh, area->height); int y; #ifdef DEBUG_VERBOSE printf("wtiff_layer_write_strip: top %d, height %d, file %s\n", area->top, height, TIFFFileName(layer->tif)); #endif /*DEBUG_VERBOSE*/ for (y = 0; y < height; y++) { VipsPel *p = VIPS_REGION_ADDR(strip, 0, area->top + y); /* Any repacking necessary. */ if (im->Coding == VIPS_CODING_LABQ) { LabQ2LabC(wtiff->tbuf, p, im->Xsize); p = wtiff->tbuf; } else if (im->BandFmt == VIPS_FORMAT_SHORT && im->Type == VIPS_INTERPRETATION_LABS) { LabS2Lab16(wtiff->tbuf, p, im->Xsize, im->Bands); p = wtiff->tbuf; } else if (wtiff->input->Type == VIPS_INTERPRETATION_XYZ) { XYZ2tiffxyz(wtiff->tbuf, p, im->Xsize, im->Bands); p = wtiff->tbuf; } else if (wtiff->bitdepth > 0) { eightbit2nbit(wtiff, wtiff->tbuf, p, im->Xsize); p = wtiff->tbuf; } else if ((im->Bands == 1 || im->Bands == 2) && wtiff->miniswhite) { invert_band0(wtiff, wtiff->tbuf, p, im->Xsize); p = wtiff->tbuf; } if (TIFFWriteScanline(layer->tif, p, area->top + y, 0) < 0) return -1; } return 0; } static int layer_strip_arrived(Layer *layer); /* Shrink what pixels we can from this strip into the layer below. If the * strip below fills, recurse. */ static int layer_strip_shrink(Layer *layer) { Layer *below = layer->below; VipsRegion *from = layer->strip; VipsRegion *to = below->strip; VipsRect target; VipsRect source; /* Our pixels might cross a strip boundary in the layer below, so we * have to write repeatedly until we run out of pixels. */ for (;;) { /* The pixels the layer below needs. */ target.left = 0; target.top = below->write_y; target.width = below->image->Xsize; target.height = to->valid.height; vips_rect_intersectrect(&target, &to->valid, &target); /* Those pixels need this area of this layer. */ source.left = target.left * 2; source.top = target.top * 2; source.width = target.width * 2; source.height = target.height * 2; /* Of which we have these available. */ vips_rect_intersectrect(&source, &from->valid, &source); /* So these are the pixels in the layer below we can provide. */ target.left = source.left / 2; target.top = source.top / 2; target.width = source.width / 2; target.height = source.height / 2; /* None? All done. */ if (vips_rect_isempty(&target)) break; (void) vips_region_shrink_method(from, to, &target, layer->wtiff->region_shrink); below->write_y += target.height; /* If we've filled the strip below, let it know. * We can either fill the region, if it's somewhere half-way * down the image, or, if it's at the bottom, get to the last * real line of pixels. */ if (below->write_y == VIPS_RECT_BOTTOM(&to->valid) || below->write_y == below->height) { if (layer_strip_arrived(below)) return -1; } } return 0; } /* A new strip has arrived! The strip has at least enough pixels in to * write a line of tiles or a set of scanlines. * * - write a line of tiles / set of scanlines * - shrink what we can to the layer below * - move our strip down by the tile height * - copy the overlap with the previous strip */ static int layer_strip_arrived(Layer *layer) { Wtiff *wtiff = layer->wtiff; int result; VipsRect new_strip; VipsRect overlap; VipsRect image_area; if (wtiff->tile) result = wtiff_layer_write_tiles(wtiff, layer, layer->strip); else result = wtiff_layer_write_strip(wtiff, layer, layer->strip); if (result) return -1; if (layer->below && layer_strip_shrink(layer)) return -1; /* Position our strip down the image. * * Expand the strip if necessary to make sure we have an even * number of lines. */ layer->y += wtiff->tileh; new_strip.left = 0; new_strip.top = layer->y; new_strip.width = layer->image->Xsize; new_strip.height = wtiff->tileh; image_area.left = 0; image_area.top = 0; image_area.width = layer->image->Xsize; image_area.height = layer->image->Ysize; vips_rect_intersectrect(&new_strip, &image_area, &new_strip); if ((new_strip.height & 1) == 1) new_strip.height += 1; /* What pixels that we will need do we already have? Save them in * overlap. */ vips_rect_intersectrect(&new_strip, &layer->strip->valid, &overlap); if (!vips_rect_isempty(&overlap)) { if (vips_region_buffer(layer->copy, &overlap)) return -1; vips_region_copy(layer->strip, layer->copy, &overlap, overlap.left, overlap.top); } if (!vips_rect_isempty(&new_strip)) { if (vips_region_buffer(layer->strip, &new_strip)) return -1; /* And copy back again. */ if (!vips_rect_isempty(&overlap)) vips_region_copy(layer->copy, layer->strip, &overlap, overlap.left, overlap.top); } return 0; } /* Another few scanlines of pixels. We know the scanlines are all within the * current page. */ static int wtiff_write_lines(Wtiff *wtiff, VipsRegion *region, VipsRect *lines) { Layer *layer = wtiff->layer; int page_top = wtiff->page_number * wtiff->page_height; #ifdef DEBUG_VERBOSE printf("wtiff_write_lines: top %d, height %d\n", lines->top, lines->height); #endif /*DEBUG_VERBOSE*/ /* Keep filling the current strip of the top layer. Each time it * fills, write a chunk of pyramid. * * lines is in */ for (;;) { VipsRect *to = &layer->strip->valid; VipsRect target; VipsRect page_lines; /* The bit of strip that needs filling. */ target.left = 0; target.top = layer->write_y; target.width = layer->image->Xsize; target.height = to->height; vips_rect_intersectrect(&target, to, &target); /* region and lines are in world coordinates, we must subtract * the top of the current page to get layer coordinates. */ page_lines = *lines; page_lines.top -= page_top; /* Clip against the lines we've been given. */ vips_rect_intersectrect(&target, &page_lines, &target); /* Are we empty? All done. */ if (vips_rect_isempty(&target)) break; /* And copy those pixels in. * * FIXME: If the strip fits inside the region we've just * received, we could skip the copy. Will this happen very * often? Unclear. */ target.top += page_top; vips_region_copy(region, layer->strip, &target, target.left, target.top - page_top); layer->write_y += target.height; /* We can either fill the strip, if it's somewhere half-way * down the image, or, if it's at the bottom, get to the last * real line of pixels. */ if (layer->write_y == VIPS_RECT_BOTTOM(to) || layer->write_y == layer->height) { if (layer_strip_arrived(layer)) return -1; } } return 0; } /* Copy fields. */ #define CopyField(tag, v) \ if (TIFFGetField(in, tag, &v)) \ TIFFSetField(out, tag, v) static int wtiff_copy_tiles(Wtiff *wtiff, TIFF *out, TIFF *in) { const ttile_t n_tiles = TIFFNumberOfTiles(in); tsize_t tile_size; tdata_t buf; ttile_t i; /* If we will be copying raw tiles we need a buffer large * enough to hold the largest compressed tile in any page. * * Allocate a buffer 2x the uncompressed tile size ... much * simpler than searching every page for the largest tile with * TIFFTAG_TILEBYTECOUNTS. */ tile_size = 2 * wtiff->tls * wtiff->tileh; buf = vips_malloc(NULL, tile_size); for (i = 0; i < n_tiles; i++) { tsize_t len = TIFFReadRawTile(in, i, buf, tile_size); if (len <= 0 || TIFFWriteRawTile(out, i, buf, len) < 0) { g_free(buf); return -1; } } g_free(buf); return 0; } /* Copy a TIFF file ... we know we wrote it, so just copy the tags we know * we might have set. */ static int wtiff_copy_tiff(Wtiff *wtiff, TIFF *out, TIFF *in) { guint32 ui32; guint16 ui16; guint16 ui16_2; float f; guint16 *a; /* All the fields we might have set. */ CopyField(TIFFTAG_IMAGEWIDTH, ui32); CopyField(TIFFTAG_IMAGELENGTH, ui32); CopyField(TIFFTAG_PLANARCONFIG, ui16); CopyField(TIFFTAG_ORIENTATION, ui16); CopyField(TIFFTAG_XRESOLUTION, f); CopyField(TIFFTAG_YRESOLUTION, f); CopyField(TIFFTAG_RESOLUTIONUNIT, ui16); CopyField(TIFFTAG_COMPRESSION, ui16); CopyField(TIFFTAG_SAMPLESPERPIXEL, ui16); CopyField(TIFFTAG_BITSPERSAMPLE, ui16); CopyField(TIFFTAG_PHOTOMETRIC, ui16); CopyField(TIFFTAG_ORIENTATION, ui16); CopyField(TIFFTAG_TILEWIDTH, ui32); CopyField(TIFFTAG_TILELENGTH, ui32); CopyField(TIFFTAG_ROWSPERSTRIP, ui32); CopyField(TIFFTAG_SUBFILETYPE, ui32); if (TIFFGetField(in, TIFFTAG_EXTRASAMPLES, &ui16, &a)) TIFFSetField(out, TIFFTAG_EXTRASAMPLES, ui16, a); if (TIFFGetField(in, TIFFTAG_PAGENUMBER, &ui16, &ui16_2)) TIFFSetField(out, TIFFTAG_PAGENUMBER, ui16, ui16_2); unsigned char *buffer; guint32 length; if (TIFFGetField(in, TIFFTAG_JPEGTABLES, &length, &buffer)) TIFFSetField(out, TIFFTAG_JPEGTABLES, length, buffer); /* No need to set any of the pseudo tags that control compression since * we copy raw tiles. */ /* We can't copy profiles or xmp :( Set again from wtiff. */ if (wtiff_embed_xmp(wtiff, out) || wtiff_embed_iptc(wtiff, out) || wtiff_embed_photoshop(wtiff, out) || wtiff_embed_imagedescription(wtiff, out) || wtiff_embed_profile(wtiff, out)) return -1; if (wtiff_copy_tiles(wtiff, out, in)) return -1; return 0; } /* Append all of the layers we wrote to the output. */ static int wtiff_gather(Wtiff *wtiff) { Layer *layer; #ifdef DEBUG printf("wtiff_gather:\n"); #endif /*DEBUG*/ if (wtiff->layer && wtiff->layer->below) for (layer = wtiff->layer->below; layer; layer = layer->below) { VipsSource *source; TIFF *in; #ifdef DEBUG printf("appending layer sub = %d ...\n", layer->sub); #endif /*DEBUG*/ if (!(source = vips_source_new_from_target(layer->target))) return -1; if (!(in = vips__tiff_openin_source(source))) { VIPS_UNREF(source); return -1; } VIPS_UNREF(source); if (wtiff_copy_tiff(wtiff, wtiff->layer->tif, in)) { TIFFClose(in); return -1; } TIFFClose(in); if (!TIFFWriteDirectory(wtiff->layer->tif)) return -1; } return 0; } static int wtiff_page_start(Wtiff *wtiff) { #ifdef DEBUG printf("wtiff_page_start: page %d\n", wtiff->page_number); #endif /*DEBUG*/ /* Init the pyramid framework for this page. This will just make a * single layer if we're not pyramiding. */ wtiff_layer_init(wtiff, &wtiff->layer, NULL, wtiff->ready->Xsize, wtiff->page_height); /* Fill all the layers and write the TIFF headers. */ if (wtiff_allocate_layers(wtiff)) return -1; /* In ifd mode, we write the pyramid layers as subdirectories of this * page. */ if (wtiff->subifd) { int n_layers; Layer *p; #ifdef DEBUG printf("wtiff_write_page: OME pyr mode\n"); #endif /*DEBUG*/ for (n_layers = 0, p = wtiff->layer->below; p; p = p->below) n_layers += 1; if (n_layers > 0) { toff_t *subifd_offsets; /* This magic tag makes the n_layers directories we * write after this one into subdirectories. We set * the offsets to 0 and libtiff will fill them in * automatically. */ subifd_offsets = VIPS_ARRAY(NULL, n_layers, toff_t); memset(subifd_offsets, 0, n_layers * sizeof(toff_t)); TIFFSetField(wtiff->layer->tif, TIFFTAG_SUBIFD, n_layers, subifd_offsets); g_free(subifd_offsets); } } return 0; } static int wtiff_page_end(Wtiff *wtiff) { #ifdef DEBUG printf("wtiff_page_end: page %d\n", wtiff->page_number); #endif /*DEBUG*/ if (!TIFFWriteDirectory(wtiff->layer->tif)) return -1; /* Append any pyr layers, if necessary. */ if (wtiff->layer->below) { Layer *layer; /* Free any lower pyramid resources ... this will * TIFFClose() (but not delete) the smaller layers * ready for us to read from them again. */ for (layer = wtiff->layer->below; layer; layer = layer->below) layer_free(layer); /* Append smaller layers to the main file. */ if (wtiff_gather(wtiff)) return -1; /* unref all the lower targets. */ for (layer = wtiff->layer->below; layer; layer = layer->below) VIPS_UNREF(layer->target); /* ... ready for the next page. */ wtiff->layer->below = NULL; } wtiff->page_number += 1; return 0; } /* A strip of pixels has come in from libvips. Split these strips into pages, * and run the page start / end code. */ static int wtiff_sink_disc_strip(VipsRegion *region, VipsRect *area, void *a) { Wtiff *wtiff = (Wtiff *) a; VipsRect pixels; #ifdef DEBUG_VERBOSE printf("wtiff_sink_disc_strip: top %d, height %d\n", area->top, area->height); #endif /*DEBUG_VERBOSE*/ g_assert(area->width == wtiff->ready->Xsize); /* Loop down this as we write scanlines into pages. */ pixels = *area; do { VipsRect page; VipsRect lines; /* The rect for the current page. */ page.left = 0; page.top = wtiff->page_height * wtiff->page_number; page.width = wtiff->ready->Xsize; page.height = wtiff->page_height; /* The scanlines we have for this page. */ vips_rect_intersectrect(&page, &pixels, &lines); /* At the top of the page? Run the page start code. */ if (lines.top == page.top && wtiff_page_start(wtiff)) return -1; /* Write the scanlines into the page. */ if (wtiff_write_lines(wtiff, region, &lines)) return -1; /* Hit the end of the page? Run the page end code. */ if (VIPS_RECT_BOTTOM(&page) == VIPS_RECT_BOTTOM(&lines) && wtiff_page_end(wtiff)) return -1; /* Remove the pixels we've written and loop if we have some * still to write. */ pixels.top += lines.height; pixels.height -= lines.height; } while (!vips_rect_isempty(&pixels)); return 0; } int vips__tiff_write_target(VipsImage *input, VipsTarget *target, VipsForeignTiffCompression compression, int Q, VipsForeignTiffPredictor predictor, const char *profile, gboolean tile, int tile_width, int tile_height, gboolean pyramid, int bitdepth, gboolean miniswhite, VipsForeignTiffResunit resunit, double xres, double yres, gboolean bigtiff, gboolean rgbjpeg, gboolean properties, VipsRegionShrink region_shrink, int level, gboolean lossless, VipsForeignDzDepth depth, gboolean subifd, gboolean premultiply, int page_height) { Wtiff *wtiff; vips__tiff_init(); if (!(wtiff = wtiff_new(input, target, compression, Q, predictor, profile, tile, tile_width, tile_height, pyramid, bitdepth, miniswhite, resunit, xres, yres, bigtiff, rgbjpeg, properties, region_shrink, level, lossless, depth, subifd, premultiply, page_height))) return -1; if (vips_sink_disc(wtiff->ready, wtiff_sink_disc_strip, wtiff)) { wtiff_free(wtiff); return -1; } wtiff_free(wtiff); return 0; } #endif /*HAVE_TIFF*/ libvips-8.15.1/libvips/foreign/vipsload.c000066400000000000000000000215571454007373500203660ustar00rootroot00000000000000/* load vips from a file * * 24/11/11 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include typedef struct _VipsForeignLoadVips { VipsForeignLoad parent_object; /* Source to load from (set by subclasses). */ VipsSource *source; } VipsForeignLoadVips; typedef VipsForeignLoadClass VipsForeignLoadVipsClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignLoadVips, vips_foreign_load_vips, VIPS_TYPE_FOREIGN_LOAD); static void vips_foreign_load_vips_dispose(GObject *gobject) { VipsForeignLoadVips *vips = (VipsForeignLoadVips *) gobject; VIPS_UNREF(vips->source); G_OBJECT_CLASS(vips_foreign_load_vips_parent_class)->dispose(gobject); } static VipsForeignFlags vips_foreign_load_vips_get_flags_source(VipsSource *source) { unsigned char *data; VipsForeignFlags flags; flags = VIPS_FOREIGN_PARTIAL; if (vips_source_sniff_at_most(source, &data, 4) == 4 && *((guint32 *) data) == VIPS_MAGIC_SPARC) flags |= VIPS_FOREIGN_BIGENDIAN; return flags; } static VipsForeignFlags vips_foreign_load_vips_get_flags(VipsForeignLoad *load) { VipsForeignLoadVips *vips = (VipsForeignLoadVips *) load; return vips_foreign_load_vips_get_flags_source(vips->source); } static VipsForeignFlags vips_foreign_load_vips_get_flags_filename(const char *filename) { VipsSource *source; VipsForeignFlags flags; if (!(source = vips_source_new_from_file(filename))) return 0; flags = vips_foreign_load_vips_get_flags_source(source); VIPS_UNREF(source); return flags; } static int vips_foreign_load_vips_header(VipsForeignLoad *load) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(load); VipsForeignLoadVips *vips = (VipsForeignLoadVips *) load; VipsConnection *connection = VIPS_CONNECTION(vips->source); const char *filename; VipsImage *image; VipsImage *x; if (!vips_source_is_file(vips->source) || !(filename = vips_connection_filename(connection))) { vips_error(class->nickname, "%s", _("no filename associated with source")); return -1; } if (!(image = vips_image_new_mode(filename, "r"))) return -1; /* What a hack. Remove the @out that's there now and replace it with * our image. */ g_object_get(load, "out", &x, NULL); g_object_unref(x); g_object_unref(x); g_object_set(load, "out", image, NULL); return 0; } static void vips_foreign_load_vips_class_init(VipsForeignLoadVipsClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->dispose = vips_foreign_load_vips_dispose; object_class->nickname = "vipsload_base"; object_class->description = _("load vips base class"); /* You're unlikely to want to use this on untrusted files. */ operation_class->flags |= VIPS_OPERATION_UNTRUSTED; /* We are fast at is_a(), so high priority. */ foreign_class->priority = 200; load_class->get_flags = vips_foreign_load_vips_get_flags; load_class->get_flags_filename = vips_foreign_load_vips_get_flags_filename; load_class->header = vips_foreign_load_vips_header; load_class->load = NULL; } static void vips_foreign_load_vips_init(VipsForeignLoadVips *vips) { } typedef struct _VipsForeignLoadVipsFile { VipsForeignLoadVips parent_object; char *filename; } VipsForeignLoadVipsFile; typedef VipsForeignLoadVipsClass VipsForeignLoadVipsFileClass; G_DEFINE_TYPE(VipsForeignLoadVipsFile, vips_foreign_load_vips_file, vips_foreign_load_vips_get_type()); static int vips_foreign_load_vips_file_build(VipsObject *object) { VipsForeignLoadVips *vips = (VipsForeignLoadVips *) object; VipsForeignLoadVipsFile *file = (VipsForeignLoadVipsFile *) object; if (file->filename && !(vips->source = vips_source_new_from_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_vips_file_parent_class) ->build(object)) return -1; return 0; } const char *vips__suffs[] = { ".v", ".vips", NULL }; static gboolean vips_foreign_load_vips_file_is_a(const char *filename) { return vips__file_magic(filename); } static void vips_foreign_load_vips_file_class_init(VipsForeignLoadVipsClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "vipsload"; object_class->description = _("load vips from file"); object_class->build = vips_foreign_load_vips_file_build; foreign_class->suffs = vips__suffs; load_class->is_a = vips_foreign_load_vips_file_is_a; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadVipsFile, filename), NULL); } static void vips_foreign_load_vips_file_init(VipsForeignLoadVipsFile *file) { } typedef struct _VipsForeignLoadVipsSource { VipsForeignLoadVips parent_object; VipsSource *source; } VipsForeignLoadVipsSource; typedef VipsForeignLoadVipsClass VipsForeignLoadVipsSourceClass; G_DEFINE_TYPE(VipsForeignLoadVipsSource, vips_foreign_load_vips_source, vips_foreign_load_vips_get_type()); static int vips_foreign_load_vips_source_build(VipsObject *object) { VipsForeignLoadVips *vips = (VipsForeignLoadVips *) object; VipsForeignLoadVipsSource *source = (VipsForeignLoadVipsSource *) object; if (source->source) { vips->source = source->source; g_object_ref(vips->source); } if (VIPS_OBJECT_CLASS(vips_foreign_load_vips_source_parent_class) ->build(object)) return -1; return 0; } static gboolean vips_foreign_load_vips_source_is_a_source(VipsSource *source) { VipsConnection *connection = VIPS_CONNECTION(source); const char *filename; return vips_source_is_file(source) && (filename = vips_connection_filename(connection)) && vips__file_magic(filename); } static void vips_foreign_load_vips_source_class_init(VipsForeignLoadVipsClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "vipsload_source"; object_class->description = _("load vips from source"); object_class->build = vips_foreign_load_vips_source_build; operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips_foreign_load_vips_source_is_a_source; VIPS_ARG_OBJECT(class, "source", 1, _("Source"), _("Source to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadVipsSource, source), VIPS_TYPE_SOURCE); } static void vips_foreign_load_vips_source_init(VipsForeignLoadVipsSource *source) { } /** * vips_vipsload: * @filename: file to load * @out: (out): decompressed image * @...: %NULL-terminated list of optional named arguments * * Read in a vips image. * * See also: vips_vipssave(). * * Returns: 0 on success, -1 on error. */ int vips_vipsload(const char *filename, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("vipsload", ap, filename, out); va_end(ap); return result; } /** * vips_vipsload_source: * @source: source to load from * @out: (out): decompressed image * @...: %NULL-terminated list of optional named arguments * * Exactly as vips_vipsload(), but read from a source. * * Returns: 0 on success, -1 on error. */ int vips_vipsload_source(VipsSource *source, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("vipsload_source", ap, source, out); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/vipspng.c000066400000000000000000000752651454007373500202400ustar00rootroot00000000000000/* Load/save png image with libpng * * 28/11/03 JC * - better no-overshoot on tile loop * 22/2/05 * - read non-interlaced PNG with a line buffer (thanks Michel Brabants) * 11/1/06 * - read RGBA palette-ized images more robustly (thanks Tom) * 20/4/06 * - auto convert to sRGB/mono (with optional alpha) for save * 1/5/06 * - from vips_png.c * 8/5/06 * - set RGB16/GREY16 if appropriate * 2/11/07 * - use im_wbuffer() API for BG writes * 28/2/09 * - small cleanups * 4/2/10 * - gtkdoc * - fixed 16-bit save * 12/5/10 * - lololo but broke 8-bit save, fixed again * 20/7/10 Tim Elliott * - added im_vips2bufpng() * 8/1/11 * - get set png resolution (thanks Zhiyu Wu) * 17/3/11 * - update for libpng-1.5 API changes * - better handling of palette and 1-bit images * - ... but we are now png 1.2.9 and later only :-( argh * 28/3/11 * - argh gamma was wrong when viewed in firefox * 19/12/11 * - rework as a set of fns ready for wrapping as a class * 7/2/12 * - mild refactoring * - add support for sequential reads * 23/2/12 * - add a longjmp() to our error handler to stop the default one running * 13/3/12 * - add ICC profile read/write * 15/3/12 * - better alpha handling * - sanity check pixel geometry before allowing read * 17/6/12 * - more alpha fixes ... some images have no transparency chunk but * still set color_type to alpha * 16/7/13 * - more robust error handling from libpng * 9/8/14 * - don't check profiles, helps with libpng >=1.6.11 * 27/10/14 Lovell * - add @filter option * 26/2/15 * - close the read down early for a header read ... this saves an * fd during file read, handy for large numbers of input images * 31/7/16 * - support --strip option * 17/1/17 * - invalidate operation on read error * 27/2/17 * - use dbuf for buffer output * 30/3/17 * - better behaviour for truncated png files, thanks Yury * 26/4/17 * - better @fail handling with truncated PNGs * 9/4/18 * - set interlaced=1 for interlaced images * 20/6/18 [felixbuenemann] * - support png8 palette write with palette, colours, Q, dither * 25/8/18 * - support xmp read/write * 20/4/19 * - allow huge xmp metadata * 7/10/19 * - restart after minimise * 14/10/19 * - revise for connection IO * 11/5/20 * - only warn for saving bad profiles, don't fail * 19/2/21 781545872 * - read out background, if we can * 29/8/21 joshuamsager * - add "unlimited" flag to png load * 13/1/22 * - raise libpng pixel size limit to VIPS_MAX_COORD * 17/11/22 * - add exif read/write * 3/2/23 MathemanFlo * - add bits per sample metadata */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pforeign.h" #include "quantise.h" /* Shared with spng load/save. */ const char *vips__png_suffs[] = { ".png", NULL }; #ifdef HAVE_PNG #include #if PNG_LIBPNG_VER < 10003 #error "PNG library too old." #endif static void user_error_function(png_structp png_ptr, png_const_charp error_msg) { #ifdef DEBUG printf("user_error_function: %s\n", error_msg); #endif /*DEBUG*/ g_warning("%s", error_msg); /* This function must not return or the default error handler will be * invoked. */ longjmp(png_jmpbuf(png_ptr), -1); } static void user_warning_function(png_structp png_ptr, png_const_charp warning_msg) { #ifdef DEBUG printf("user_warning_function: %s\n", warning_msg); #endif /*DEBUG*/ g_warning("%s", warning_msg); } #define INPUT_BUFFER_SIZE (4096) /* What we track during a PNG read. */ typedef struct { char *name; VipsImage *out; VipsFailOn fail_on; gboolean unlimited; int y_pos; png_structp pPng; png_infop pInfo; png_bytep *row_pointer; VipsSource *source; /* read() to this buffer, copy to png as required. libpng does many * very small reads and we want to avoid a syscall for each one. */ unsigned char input_buffer[INPUT_BUFFER_SIZE]; unsigned char *next_byte; gint64 bytes_in_buffer; } Read; /* Can be called many times. */ static void read_destroy(Read *read) { /* We never call png_read_end(), perhaps we should. It can fail on * truncated files, so we'd need a setjmp(). */ if (read->pPng) png_destroy_read_struct(&read->pPng, &read->pInfo, NULL); VIPS_UNREF(read->source); VIPS_FREE(read->row_pointer); } static void read_close_cb(VipsImage *out, Read *read) { read_destroy(read); } static void read_minimise_cb(VipsImage *image, Read *read) { if (read->source) vips_source_minimise(read->source); } static void vips_png_read_source(png_structp pPng, png_bytep data, png_size_t length) { Read *read = png_get_io_ptr(pPng); #ifdef DEBUG printf("vips_png_read_source: read %zd bytes\n", length); #endif /*DEBUG*/ /* libpng makes many small reads, which hurts performance if you do a * syscall for each one. Read via our own buffer. */ while (length > 0) { gint64 bytes_available; if (read->bytes_in_buffer <= 0) { gint64 bytes_read; bytes_read = vips_source_read(read->source, read->input_buffer, INPUT_BUFFER_SIZE); if (bytes_read <= 0) png_error(pPng, "not enough data"); read->next_byte = read->input_buffer; read->bytes_in_buffer = bytes_read; } bytes_available = VIPS_MIN(read->bytes_in_buffer, length); memcpy(data, read->next_byte, bytes_available); data += bytes_available; length -= bytes_available; read->next_byte += bytes_available; read->bytes_in_buffer -= bytes_available; } } static Read * read_new(VipsSource *source, VipsImage *out, VipsFailOn fail_on, gboolean unlimited) { Read *read; if (!(read = VIPS_NEW(out, Read))) return NULL; read->name = NULL; read->fail_on = fail_on; read->out = out; read->y_pos = 0; read->pPng = NULL; read->pInfo = NULL; read->row_pointer = NULL; read->source = source; read->unlimited = unlimited; g_object_ref(source); g_signal_connect(out, "close", G_CALLBACK(read_close_cb), read); g_signal_connect(out, "minimise", G_CALLBACK(read_minimise_cb), read); if (!(read->pPng = png_create_read_struct( PNG_LIBPNG_VER_STRING, NULL, user_error_function, user_warning_function))) return NULL; /* Prevent libpng (>=1.6.11) verifying sRGB profiles. Many PNGs have * broken profiles, but we still want to be able to open them. */ #ifdef PNG_SKIP_sRGB_CHECK_PROFILE png_set_option(read->pPng, PNG_SKIP_sRGB_CHECK_PROFILE, PNG_OPTION_ON); #endif /*PNG_SKIP_sRGB_CHECK_PROFILE*/ /* Don't verify ADLER32 checksums (this can produce a lot of * warnings). */ #ifdef PNG_IGNORE_ADLER32 png_set_option(read->pPng, PNG_IGNORE_ADLER32, PNG_OPTION_ON); #endif /*PNG_IGNORE_ADLER32*/ /* Disable CRC checking in fuzzing mode. Most fuzzed images will have * bad CRCs so this check would break fuzzing. */ #ifdef FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION png_set_crc_action(read->pPng, PNG_CRC_QUIET_USE, PNG_CRC_QUIET_USE); #endif /*FUZZING_BUILD_MODE_UNSAFE_FOR_PRODUCTION*/ /* libpng has a default soft limit of 1m pixels per axis. */ png_set_user_limits(read->pPng, VIPS_MAX_COORD, VIPS_MAX_COORD); if (vips_source_rewind(source)) return NULL; png_set_read_fn(read->pPng, read, vips_png_read_source); /* Catch PNG errors from png_read_info() etc. */ if (setjmp(png_jmpbuf(read->pPng))) return NULL; if (!(read->pInfo = png_create_info_struct(read->pPng))) return NULL; #ifdef HAVE_PNG_SET_CHUNK_MALLOC_MAX /* By default, libpng refuses to open files with a metadata chunk * larger than 8mb. We've seen real files with 20mb, so set 50mb. */ png_set_chunk_malloc_max(read->pPng, 50 * 1024 * 1024); /* This limits the number of chunks. The limit from * png_set_chunk_malloc_max() times this value is the maximum * memory use. * * libnpng defaults to 1000, which is rather high. */ png_set_chunk_cache_max(read->pPng, 100); #endif /*HAVE_PNG_SET_CHUNK_MALLOC_MAX*/ png_read_info(read->pPng, read->pInfo); return read; } /* Set the png text data as metadata on the vips image. These are always * null-terminated strings. */ static int vips__set_text(VipsImage *out, int i, const char *key, const char *text) { char name[256]; if (strcmp(key, "XML:com.adobe.xmp") == 0) { /* Save as an XMP tag. This must be a BLOB, for compatibility * for things like the XMP blob that the tiff loader adds. * * Note that this will remove the null-termination from the * string. We must carefully reattach this. */ vips_image_set_blob_copy(out, VIPS_META_XMP_NAME, text, strlen(text)); } else { /* Save as a string comment. Some PNGs have EXIF data as * text segments, but the correct way to support this is with * png_get_eXIf_1(). */ vips_snprintf(name, 256, "png-comment-%d-%s", i, key); vips_image_set_string(out, name, text); } return 0; } /* Read a png header. */ static int png2vips_header(Read *read, VipsImage *out) { png_uint_32 width, height; int bitdepth, color_type; int interlace_type; png_uint_32 res_x, res_y; int unit_type; png_charp name; int compression_type; png_textp text_ptr; int num_text; /* Well thank you, libpng. */ #if PNG_LIBPNG_VER < 10400 png_charp profile; #else png_bytep profile; #endif png_uint_32 proflen; int bands; VipsInterpretation interpretation; double Xres, Yres; if (setjmp(png_jmpbuf(read->pPng))) return -1; png_get_IHDR(read->pPng, read->pInfo, &width, &height, &bitdepth, &color_type, &interlace_type, NULL, NULL); /* png_get_channels() gives us 1 band for palette images ... so look * at colour_type for output bands. * * Ignore alpha, we detect that separately below. */ switch (color_type) { case PNG_COLOR_TYPE_PALETTE: bands = 3; break; case PNG_COLOR_TYPE_GRAY_ALPHA: case PNG_COLOR_TYPE_GRAY: bands = 1; break; case PNG_COLOR_TYPE_RGB: case PNG_COLOR_TYPE_RGB_ALPHA: bands = 3; break; default: vips_error("png2vips", "%s", _("unsupported color type")); return -1; } if (bitdepth > 8) { if (bands < 3) interpretation = VIPS_INTERPRETATION_GREY16; else interpretation = VIPS_INTERPRETATION_RGB16; } else { if (bands < 3) interpretation = VIPS_INTERPRETATION_B_W; else interpretation = VIPS_INTERPRETATION_sRGB; } /* Expand palette images. */ if (color_type == PNG_COLOR_TYPE_PALETTE) png_set_palette_to_rgb(read->pPng); /* Expand transparency. */ if (png_get_valid(read->pPng, read->pInfo, PNG_INFO_tRNS)) { png_set_tRNS_to_alpha(read->pPng); bands += 1; } else if (color_type == PNG_COLOR_TYPE_GRAY_ALPHA || color_type == PNG_COLOR_TYPE_RGB_ALPHA) { /* Some images have no transparency chunk, but still set * color_type to alpha. */ bands += 1; } /* Expand <8 bit images to full bytes. */ if (color_type == PNG_COLOR_TYPE_GRAY && bitdepth < 8) png_set_expand_gray_1_2_4_to_8(read->pPng); /* If we're an INTEL byte order machine and this is 16bits, we need * to swap bytes. */ if (bitdepth > 8 && !vips_amiMSBfirst()) png_set_swap(read->pPng); /* Get resolution. Default to 72 pixels per inch, the usual png value. */ unit_type = PNG_RESOLUTION_METER; res_x = 72.0 / 2.54 * 100.0; res_y = 72.0 / 2.54 * 100.0; png_get_pHYs(read->pPng, read->pInfo, &res_x, &res_y, &unit_type); switch (unit_type) { case PNG_RESOLUTION_METER: Xres = res_x / 1000.0; Yres = res_y / 1000.0; break; default: Xres = res_x; Yres = res_y; break; } /* Set VIPS header. */ vips_image_init_fields(out, width, height, bands, bitdepth > 8 ? VIPS_FORMAT_USHORT : VIPS_FORMAT_UCHAR, VIPS_CODING_NONE, interpretation, Xres, Yres); VIPS_SETSTR(out->filename, vips_connection_filename(VIPS_CONNECTION(read->source))); if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_THINSTRIP, NULL)) return -1; /* Fetch the ICC profile. @name is useless, something like "icc" or * "ICC Profile" etc. Ignore it. * * @profile was png_charpp in libpngs < 1.5, png_bytepp is the * modern one. Ignore the warning, if any. */ if (png_get_iCCP(read->pPng, read->pInfo, &name, &compression_type, &profile, &proflen)) { #ifdef DEBUG printf("png2vips_header: attaching %d bytes of ICC profile\n", proflen); printf("png2vips_header: name = \"%s\"\n", name); #endif /*DEBUG*/ vips_image_set_blob_copy(out, VIPS_META_ICC_NAME, profile, proflen); } /* Some libpng warn you to call png_set_interlace_handling(); here, but * that can actually break interlace on older libpngs. * * Only set this for libpng 1.6+. */ #if PNG_LIBPNG_VER > 10600 (void) png_set_interlace_handling(read->pPng); #endif /* Sanity-check line size. */ png_read_update_info(read->pPng, read->pInfo); if (png_get_rowbytes(read->pPng, read->pInfo) != VIPS_IMAGE_SIZEOF_LINE(out)) { vips_error("vipspng", "%s", _("unable to read PNG header")); return -1; } /* Let our caller know. These are very expensive to decode. */ if (interlace_type != PNG_INTERLACE_NONE) vips_image_set_int(out, "interlaced", 1); if (png_get_text(read->pPng, read->pInfo, &text_ptr, &num_text) > 0) { int i; /* Very large numbers of text chunks are used in DoS * attacks. */ if (!read->unlimited && num_text > MAX_PNG_TEXT_CHUNKS) { g_warning(_("%d text chunks, only %d text chunks will be loaded"), num_text, MAX_PNG_TEXT_CHUNKS); num_text = MAX_PNG_TEXT_CHUNKS; } for (i = 0; i < num_text; i++) /* .text is always a null-terminated C string. */ if (vips__set_text(out, i, text_ptr[i].key, text_ptr[i].text)) return -1; } vips_image_set_int(out, VIPS_META_BITS_PER_SAMPLE, bitdepth); /* Deprecated "palette-bit-depth" use "bits-per-sample" instead. */ if (color_type == PNG_COLOR_TYPE_PALETTE) vips_image_set_int(out, "palette-bit-depth", bitdepth); /* Note the PNG background colour, if any. */ #ifdef PNG_bKGD_SUPPORTED { png_color_16 *background; if (png_get_bKGD(read->pPng, read->pInfo, &background)) { const int scale = out->BandFmt == VIPS_FORMAT_UCHAR ? 1 : 256; double array[3]; int n; switch (color_type) { case PNG_COLOR_TYPE_GRAY: case PNG_COLOR_TYPE_GRAY_ALPHA: array[0] = background->gray / scale; n = 1; break; case PNG_COLOR_TYPE_RGB: case PNG_COLOR_TYPE_RGB_ALPHA: array[0] = background->red / scale; array[1] = background->green / scale; array[2] = background->blue / scale; n = 3; break; case PNG_COLOR_TYPE_PALETTE: default: /* Not sure what to do here. I suppose we should read * the palette. */ n = 0; break; } if (n > 0) vips_image_set_array_double(out, "background", array, n); } } #endif /*PNG_bKGD_SUPPORTED*/ #ifdef PNG_eXIf_SUPPORTED { png_uint_32 num_exif; png_bytep exif; if (png_get_eXIf_1(read->pPng, read->pInfo, &num_exif, &exif)) vips_image_set_blob_copy(out, VIPS_META_EXIF_NAME, exif, num_exif); } #endif /*PNG_eXIf_SUPPORTED*/ return 0; } /* Out is a huge "t" buffer we decompress to. */ static int png2vips_interlace(Read *read, VipsImage *out) { int y; #ifdef DEBUG printf("png2vips_interlace: reading whole image\n"); #endif /*DEBUG*/ if (vips_image_write_prepare(out)) return -1; if (setjmp(png_jmpbuf(read->pPng))) return -1; if (!(read->row_pointer = VIPS_ARRAY(NULL, out->Ysize, png_bytep))) return -1; for (y = 0; y < out->Ysize; y++) read->row_pointer[y] = VIPS_IMAGE_ADDR(out, 0, y); png_read_image(read->pPng, read->row_pointer); read_destroy(read); return 0; } static int png2vips_generate(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRect *r = &out_region->valid; Read *read = (Read *) a; int y; #ifdef DEBUG printf("png2vips_generate: line %d, %d rows\n", r->top, r->height); printf("png2vips_generate: y_top = %d\n", read->y_pos); #endif /*DEBUG*/ /* We're inside a tilecache where tiles are the full image width, so * this should always be true. */ g_assert(r->left == 0); g_assert(r->width == out_region->im->Xsize); g_assert(VIPS_RECT_BOTTOM(r) <= out_region->im->Ysize); /* Tiles should always be a strip in height, unless it's the final * strip. */ g_assert(r->height == VIPS_MIN(VIPS__FATSTRIP_HEIGHT, out_region->im->Ysize - r->top)); /* And check that y_pos is correct. It should be, since we are inside * a vips_sequential(). */ if (r->top != read->y_pos) { vips_error("vipspng", _("out of order read at line %d"), read->y_pos); return -1; } for (y = 0; y < r->height; y++) { png_bytep q = (png_bytep) VIPS_REGION_ADDR(out_region, 0, r->top + y); /* We need to catch errors from read_row(). */ if (!setjmp(png_jmpbuf(read->pPng))) png_read_row(read->pPng, q, NULL); else { /* We've failed to read some pixels. Knock this * operation out of cache. */ vips_foreign_load_invalidate(read->out); #ifdef DEBUG printf( "png2vips_generate: png_read_row() failed, " "line %d\n", r->top + y); printf("png2vips_generate: file %s\n", read->name); printf("png2vips_generate: thread %p\n", g_thread_self()); #endif /*DEBUG*/ /* And bail if fail is on. We have to add an error * message, since the handler we install just does * g_warning(). */ if (read->fail_on >= VIPS_FAIL_ON_TRUNCATED) { vips_error("vipspng", "%s", _("libpng read error")); return -1; } } read->y_pos += 1; } return 0; } static int png2vips_image(Read *read, VipsImage *out) { int interlace_type = png_get_interlace_type(read->pPng, read->pInfo); VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(out), 3); if (interlace_type != PNG_INTERLACE_NONE) { /* Arg awful interlaced image. We have to load to a huge mem * buffer, then copy to out. */ t[0] = vips_image_new_memory(); if (png2vips_header(read, t[0]) || png2vips_interlace(read, t[0]) || vips_image_write(t[0], out)) return -1; } else { t[0] = vips_image_new(); if (png2vips_header(read, t[0]) || vips_image_generate(t[0], NULL, png2vips_generate, NULL, read, NULL) || vips_sequential(t[0], &t[1], "tile_height", VIPS__FATSTRIP_HEIGHT, NULL) || vips_image_write(t[1], out)) return -1; } return 0; } gboolean vips__png_ispng_source(VipsSource *source) { const unsigned char *p; if ((p = vips_source_sniff(source, 8)) && !png_sig_cmp((png_bytep) p, 0, 8)) return TRUE; return FALSE; } int vips__png_header_source(VipsSource *source, VipsImage *out, gboolean unlimited) { Read *read; if (!(read = read_new(source, out, TRUE, unlimited)) || png2vips_header(read, out)) return -1; vips_source_minimise(source); return 0; } int vips__png_read_source(VipsSource *source, VipsImage *out, VipsFailOn fail_on, gboolean unlimited) { Read *read; if (!(read = read_new(source, out, fail_on, unlimited)) || png2vips_image(read, out) || vips_source_decode(source)) return -1; return 0; } /* Interlaced PNGs need to be entirely decompressed into memory then can be * served partially from there. Non-interlaced PNGs may be read sequentially. */ gboolean vips__png_isinterlaced_source(VipsSource *source) { VipsImage *image; Read *read; int interlace_type; image = vips_image_new(); if (!(read = read_new(source, image, TRUE, FALSE))) { g_object_unref(image); return -1; } interlace_type = png_get_interlace_type(read->pPng, read->pInfo); g_object_unref(image); return interlace_type != PNG_INTERLACE_NONE; } /* What we track during a PNG write. */ typedef struct { VipsImage *in; VipsImage *memory; VipsTarget *target; png_structp pPng; png_infop pInfo; png_bytep *row_pointer; } Write; static void write_destroy(Write *write) { #ifdef DEBUG printf("write_destroy: %p\n", write); #endif /*DEBUG*/ VIPS_UNREF(write->memory); if (write->pPng) png_destroy_write_struct(&write->pPng, &write->pInfo); VIPS_FREE(write->row_pointer); VIPS_FREE(write); } static void user_write_data(png_structp pPng, png_bytep data, png_size_t length) { Write *write = (Write *) png_get_io_ptr(pPng); if (vips_target_write(write->target, data, length)) png_error(pPng, "not enough data"); } static Write * write_new(VipsImage *in, VipsTarget *target) { Write *write; if (!(write = VIPS_NEW(NULL, Write))) return NULL; write->in = in; write->target = target; #ifdef DEBUG printf("write_new: %p\n", write); #endif /*DEBUG*/ if (!(write->row_pointer = VIPS_ARRAY(NULL, in->Ysize, png_bytep))) return NULL; if (!(write->pPng = png_create_write_struct( PNG_LIBPNG_VER_STRING, NULL, user_error_function, user_warning_function))) { write_destroy(write); return NULL; } /* Prevent libpng (>=1.6.11) verifying sRGB profiles. We are often * asked to copy images containing bad profiles, and this check would * prevent that. */ #ifdef PNG_SKIP_sRGB_CHECK_PROFILE png_set_option(write->pPng, PNG_SKIP_sRGB_CHECK_PROFILE, PNG_OPTION_ON); #endif /*PNG_SKIP_sRGB_CHECK_PROFILE*/ png_set_write_fn(write->pPng, write, user_write_data, NULL); /* Catch PNG errors from png_create_info_struct(). */ if (setjmp(png_jmpbuf(write->pPng))) { write_destroy(write); return NULL; } if (!(write->pInfo = png_create_info_struct(write->pPng))) { write_destroy(write); return NULL; } return write; } static int write_png_block(VipsRegion *region, VipsRect *area, void *a) { Write *write = (Write *) a; int i; /* The area to write is always a set of complete scanlines. */ g_assert(area->left == 0); g_assert(area->width == region->im->Xsize); g_assert(area->top + area->height <= region->im->Ysize); /* Catch PNG errors. */ if (setjmp(png_jmpbuf(write->pPng))) return -1; for (i = 0; i < area->height; i++) write->row_pointer[i] = (png_bytep) VIPS_REGION_ADDR(region, 0, area->top + i); png_write_rows(write->pPng, write->row_pointer, area->height); return 0; } static void vips__png_set_text(png_structp pPng, png_infop pInfo, const char *key, const char *value) { png_text text; text.compression = 0; text.key = (char *) key; text.text = (char *) value; text.text_length = strlen(value); /* Before 1.4, these fields were only there if explicitly enabled. */ #if PNG_LIBPNG_VER > 10400 text.itxt_length = 0; text.lang = NULL; #endif png_set_text(pPng, pInfo, &text, 1); } static void * write_png_comment(VipsImage *image, const char *field, GValue *value, void *data) { Write *write = (Write *) data; if (vips_isprefix("png-comment-", field)) { const char *str; int i; char key[256]; if (vips_image_get_string(write->in, field, &str)) return image; if (strlen(field) > 256 || sscanf(field, "png-comment-%d-%80s", &i, key) != 2) { vips_error("vips2png", "%s", _("bad png comment key")); return image; } vips__png_set_text(write->pPng, write->pInfo, key, str); } return NULL; } static int vips_png_add_icc(Write *write, const void *data, size_t length) { if (setjmp(png_jmpbuf(write->pPng))) g_debug("bad ICC profile not saved"); else png_set_iCCP(write->pPng, write->pInfo, "icc", PNG_COMPRESSION_TYPE_BASE, (void *) data, length); return 0; } static int vips_png_add_custom_icc(Write *write, const char *profile) { VipsBlob *blob; if (vips_profile_load(profile, &blob, NULL)) return -1; if (blob) { size_t length; const void *data = vips_blob_get(blob, &length); vips_png_add_icc(write, data, length); vips_area_unref((VipsArea *) blob); } return 0; } static int vips_png_add_original_icc(Write *write) { const void *data; size_t length; if (vips_image_get_blob(write->in, VIPS_META_ICC_NAME, &data, &length)) return -1; vips_png_add_icc(write, data, length); return 0; } /* Write a VIPS image to PNG. */ static int write_vips(Write *write, int compress, int interlace, const char *profile, VipsForeignPngFilter filter, gboolean palette, int Q, double dither, int bitdepth, int effort) { VipsImage *in = write->in; int color_type; int interlace_type; int i, nb_passes; g_assert(in->BandFmt == VIPS_FORMAT_UCHAR || in->BandFmt == VIPS_FORMAT_USHORT); g_assert(in->Coding == VIPS_CODING_NONE); g_assert(in->Bands > 0 && in->Bands < 5); /* Catch PNG errors. */ if (setjmp(png_jmpbuf(write->pPng))) return -1; /* Check input image. If we are writing interlaced, we need to make 7 * passes over the image. We advertise ourselves as seq, so to ensure * we only suck once from upstream, switch to WIO. */ if (interlace) { if (!(write->memory = vips_image_copy_memory(in))) return -1; in = write->memory; } else { if (vips_image_pio_input(in)) return -1; } if (compress < 0 || compress > 9) { vips_error("vips2png", "%s", _("compress should be in [0,9]")); return -1; } /* Set compression parameters. */ png_set_compression_level(write->pPng, compress); /* Set row filter. */ png_set_filter(write->pPng, 0, filter); switch (in->Bands) { case 1: color_type = PNG_COLOR_TYPE_GRAY; break; case 2: color_type = PNG_COLOR_TYPE_GRAY_ALPHA; break; case 3: color_type = PNG_COLOR_TYPE_RGB; break; case 4: color_type = PNG_COLOR_TYPE_RGB_ALPHA; break; default: vips_error("vips2png", _("can't save %d band image as png"), in->Bands); return -1; } #ifdef HAVE_QUANTIZATION /* Enable image quantisation to paletted 8bpp PNG if palette is set. */ if (palette) color_type = PNG_COLOR_TYPE_PALETTE; #else if (palette) g_warning("%s", _("ignoring palette (no quantisation support)")); #endif /*HAVE_QUANTIZATION*/ interlace_type = interlace ? PNG_INTERLACE_ADAM7 : PNG_INTERLACE_NONE; /* libpng has a default soft limit of 1m pixels per axis. */ png_set_user_limits(write->pPng, VIPS_MAX_COORD, VIPS_MAX_COORD); png_set_IHDR(write->pPng, write->pInfo, in->Xsize, in->Ysize, bitdepth, color_type, interlace_type, PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT); /* Set resolution. libpng uses pixels per meter. */ png_set_pHYs(write->pPng, write->pInfo, VIPS_RINT(in->Xres * 1000), VIPS_RINT(in->Yres * 1000), PNG_RESOLUTION_METER); /* Metadata */ if (vips_image_get_typeof(in, VIPS_META_XMP_NAME)) { const void *data; size_t length; char *str; /* XMP is attached as a BLOB with no null-termination. * We must re-add this. */ if (vips_image_get_blob(in, VIPS_META_XMP_NAME, &data, &length)) return -1; str = g_malloc(length + 1); vips_strncpy(str, data, length + 1); vips__png_set_text(write->pPng, write->pInfo, "XML:com.adobe.xmp", str); g_free(str); } #ifdef PNG_eXIf_SUPPORTED if (vips_image_get_typeof(in, VIPS_META_EXIF_NAME)) { const void *data; size_t length; if (vips_image_get_blob(in, VIPS_META_EXIF_NAME, &data, &length)) return -1; /* libpng does not want the JFIF "Exif\0\0" prefix. */ if (length >= 6 && vips_isprefix("Exif", (char *) data)) { data = (char *) data + 6; length -= 6; } png_set_eXIf_1(write->pPng, write->pInfo, length, (png_bytep) data); } #endif /*PNG_eXIf_SUPPORTED*/ if (vips_image_map(in, write_png_comment, write)) return -1; /* A profile supplied as an argument overrides an embedded * profile. */ if (profile) { if (vips_png_add_custom_icc(write, profile)) return -1; } else if (vips_image_get_typeof(in, VIPS_META_ICC_NAME)) { if (vips_png_add_original_icc(write)) return -1; } // the profile writers grab the setjmp, restore it if (setjmp(png_jmpbuf(write->pPng))) return -1; #ifdef HAVE_QUANTIZATION if (palette) { VipsImage *im_index; VipsImage *im_palette; int palette_count; png_color *png_palette; png_byte *png_trans; int trans_count; if (vips__quantise_image(in, &im_index, &im_palette, 1 << bitdepth, Q, dither, effort, FALSE)) return -1; palette_count = im_palette->Xsize; g_assert(palette_count <= PNG_MAX_PALETTE_LENGTH); png_palette = (png_color *) png_malloc(write->pPng, palette_count * sizeof(png_color)); png_trans = (png_byte *) png_malloc(write->pPng, palette_count * sizeof(png_byte)); trans_count = 0; for (i = 0; i < palette_count; i++) { VipsPel *p = (VipsPel *) VIPS_IMAGE_ADDR(im_palette, i, 0); png_color *col = &png_palette[i]; col->red = p[0]; col->green = p[1]; col->blue = p[2]; png_trans[i] = p[3]; if (p[3] != 255) trans_count = i + 1; #ifdef DEBUG printf("write_vips: palette[%d] %d %d %d %d\n", i + 1, p[0], p[1], p[2], p[3]); #endif /*DEBUG*/ } #ifdef DEBUG printf("write_vips: attaching %d color palette\n", palette_count); #endif /*DEBUG*/ png_set_PLTE(write->pPng, write->pInfo, png_palette, palette_count); if (trans_count) { #ifdef DEBUG printf("write_vips: attaching %d alpha values\n", trans_count); #endif /*DEBUG*/ png_set_tRNS(write->pPng, write->pInfo, png_trans, trans_count, NULL); } png_free(write->pPng, (void *) png_palette); png_free(write->pPng, (void *) png_trans); VIPS_UNREF(im_palette); VIPS_UNREF(write->memory); write->memory = im_index; in = write->memory; } #endif /*HAVE_QUANTIZATION*/ png_write_info(write->pPng, write->pInfo); /* If we're an intel byte order CPU and this is a 16bit image, we need * to swap bytes. */ if (bitdepth > 8 && !vips_amiMSBfirst()) png_set_swap(write->pPng); /* If bitdepth is 1/2/4, pack pixels into bytes. */ png_set_packing(write->pPng); if (interlace) nb_passes = png_set_interlace_handling(write->pPng); else nb_passes = 1; /* Write data. */ for (i = 0; i < nb_passes; i++) if (vips_sink_disc(in, write_png_block, write)) return -1; /* The setjmp() was held by our background writer: reset it. */ if (setjmp(png_jmpbuf(write->pPng))) return -1; png_write_end(write->pPng, write->pInfo); return 0; } int vips__png_write_target(VipsImage *in, VipsTarget *target, int compression, int interlace, const char *profile, VipsForeignPngFilter filter, gboolean palette, int Q, double dither, int bitdepth, int effort) { Write *write; if (!(write = write_new(in, target))) return -1; if (write_vips(write, compression, interlace, profile, filter, palette, Q, dither, bitdepth, effort)) { write_destroy(write); vips_error("vips2png", _("unable to write to target %s"), vips_connection_nick(VIPS_CONNECTION(target))); return -1; } write_destroy(write); if (vips_target_end(target)) return -1; return 0; } #endif /*HAVE_PNG*/ libvips-8.15.1/libvips/foreign/vipssave.c000066400000000000000000000164341454007373500204030ustar00rootroot00000000000000/* save to vips * * 24/11/11 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include typedef struct _VipsForeignSaveVips { VipsForeignSave parent_object; VipsTarget *target; } VipsForeignSaveVips; typedef VipsForeignSaveClass VipsForeignSaveVipsClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignSaveVips, vips_foreign_save_vips, VIPS_TYPE_FOREIGN_SAVE); static void vips_foreign_save_vips_dispose(GObject *gobject) { VipsForeignSaveVips *vips = (VipsForeignSaveVips *) gobject; VIPS_UNREF(vips->target); G_OBJECT_CLASS(vips_foreign_save_vips_parent_class)->dispose(gobject); } static int vips_foreign_save_vips_build(VipsObject *object) { VipsForeignSaveVips *vips = (VipsForeignSaveVips *) object; const char *filename; if (VIPS_OBJECT_CLASS(vips_foreign_save_vips_parent_class)->build(object)) return -1; if ((filename = vips_connection_filename(VIPS_CONNECTION(vips->target)))) { VipsForeignSave *save = (VipsForeignSave *) object; VipsImage *x; /* vips_image_build() has some magic for "w" * preventing recursion and sending this directly to the * saver built into iofuncs. */ if (!(x = vips_image_new_mode(filename, "w"))) return -1; if (vips_image_write(save->ready, x)) { g_object_unref(x); return -1; } g_object_unref(x); } else { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); /* We could add load vips from memory, fd, via mmap etc. here. * We should perhaps move iofuncs/vips.c into this file. * * For now, just fail unless there's a filename associated * with this source. */ vips_error(class->nickname, "%s", _("no filename associated with target")); return -1; } if (vips_target_end(vips->target)) return -1; return 0; } /* From vipsload.c. */ extern const char *vips__suffs[]; static void vips_foreign_save_vips_class_init(VipsForeignSaveVipsClass *class) { int i; GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class; gobject_class->dispose = vips_foreign_save_vips_dispose; object_class->nickname = "vipssave_base"; object_class->description = _("save vips base class"); object_class->build = vips_foreign_save_vips_build; foreign_class->suffs = vips__suffs; save_class->saveable = VIPS_SAVEABLE_ANY; for (i = 0; i < VIPS_CODING_LAST; i++) save_class->coding[i] = TRUE; } static void vips_foreign_save_vips_init(VipsForeignSaveVips *vips) { } typedef struct _VipsForeignSaveVipsFile { VipsForeignSaveVips parent_object; char *filename; } VipsForeignSaveVipsFile; typedef VipsForeignSaveVipsClass VipsForeignSaveVipsFileClass; G_DEFINE_TYPE(VipsForeignSaveVipsFile, vips_foreign_save_vips_file, vips_foreign_save_vips_get_type()); static int vips_foreign_save_vips_file_build(VipsObject *object) { VipsForeignSaveVips *vips = (VipsForeignSaveVips *) object; VipsForeignSaveVipsFile *file = (VipsForeignSaveVipsFile *) object; if (!(vips->target = vips_target_new_to_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_save_vips_file_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_save_vips_file_class_init(VipsForeignSaveVipsFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "vipssave"; object_class->description = _("save image to file in vips format"); object_class->build = vips_foreign_save_vips_file_build; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveVipsFile, filename), NULL); } static void vips_foreign_save_vips_file_init(VipsForeignSaveVipsFile *file) { } typedef struct _VipsForeignSaveVipsTarget { VipsForeignSaveVips parent_object; VipsTarget *target; } VipsForeignSaveVipsTarget; typedef VipsForeignSaveVipsClass VipsForeignSaveVipsTargetClass; G_DEFINE_TYPE(VipsForeignSaveVipsTarget, vips_foreign_save_vips_target, vips_foreign_save_vips_get_type()); static int vips_foreign_save_vips_target_build(VipsObject *object) { VipsForeignSaveVips *vips = (VipsForeignSaveVips *) object; VipsForeignSaveVipsTarget *target = (VipsForeignSaveVipsTarget *) object; vips->target = target->target; g_object_ref(vips->target); if (VIPS_OBJECT_CLASS(vips_foreign_save_vips_target_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_save_vips_target_class_init( VipsForeignSaveVipsTargetClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "vipssave_target"; object_class->description = _("save image to target in vips format"); object_class->build = vips_foreign_save_vips_target_build; VIPS_ARG_OBJECT(class, "target", 1, _("Target"), _("Target to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveVipsTarget, target), VIPS_TYPE_TARGET); } static void vips_foreign_save_vips_target_init(VipsForeignSaveVipsTarget *target) { } /** * vips_vipssave: (method) * @in: image to save * @filename: file to write to * @...: %NULL-terminated list of optional named arguments * * Write @in to @filename in VIPS format. * * See also: vips_vipsload(). * * Returns: 0 on success, -1 on error. */ int vips_vipssave(VipsImage *in, const char *filename, ...) { va_list ap; int result; va_start(ap, filename); result = vips_call_split("vipssave", ap, in, filename); va_end(ap); return result; } /** * vips_vipssave_target: (method) * @in: image to save * @target: save image to this target * @...: %NULL-terminated list of optional named arguments * * As vips_vipssave(), but save to a target. * * Returns: 0 on success, -1 on error. */ int vips_vipssave_target(VipsImage *in, VipsTarget *target, ...) { va_list ap; int result; va_start(ap, target); result = vips_call_split("vipssave_target", ap, in, target); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/webp2vips.c000066400000000000000000000463431454007373500204660ustar00rootroot00000000000000/* read with libwebp * * 6/8/13 * - from png2vips.c * 24/2/14 * - oops, buffer path was broken, thanks Lovell * 28/2/16 * - add @shrink * 7/11/16 * - support XMP/ICC/EXIF metadata * 18/10/17 * - sniff file type from magic number * 2/11/18 * - rework for demux API * - add animated read * 19/4/19 * - could memleak on some read errors * 24/4/19 * - fix bg handling in animations * 30/4/19 * - deprecate shrink, use scale instead, and make it a double ... this * lets us do faster and more accurate thumbnailing * 27/6/19 * - disable alpha output if all frame fill the canvas and are solid * 6/7/19 [deftomat] * - support array of delays * 14/10/19 * - revise for source IO * 27/10/21 * - disable shrink-on-load if we need subpixel accuracy in animations */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #ifdef HAVE_LIBWEBP #include #include #include #include #include #include #include "pforeign.h" /* What we track during a read. */ typedef struct { VipsImage *out; VipsSource *source; /* The data we load, as a webp object. */ WebPData data; /* Load this page (frame number). */ int page; /* Load this many pages. */ int n; /* Scale-on-load factor. Use this to set frame_width. */ double scale; /* Size of each frame in input image coordinates. */ int canvas_width; int canvas_height; /* Size of each frame, in scaled output image coordinates, */ int frame_width; int frame_height; /* Size of final output image. */ int width; int height; /* TRUE if we will save the final image as RGBA. */ int alpha; /* Number of frames in file. */ int frame_count; /* Delays between frames (in milliseconds). */ int *delays; /* Parse with this. */ WebPDemuxer *demux; /* Decoder config. */ WebPDecoderConfig config; /* The current accumulated frame as a VipsImage. These are the pixels * we send to the output. It's a frame_width * frame_height memory * image. */ VipsImage *frame; /* The frame number currently in @frame. Numbered from 1, so 0 means * before the first frame. */ int frame_no; /* Iterate through the frames with this. iter.frame_num is the number * of the currently loaded frame. */ WebPIterator iter; /* How to junk the current frame when we move on. */ WebPMuxAnimDispose dispose_method; VipsRect dispose_rect; } Read; const char * vips__error_webp(VP8StatusCode code) { switch (code) { case VP8_STATUS_OK: return "VP8_STATUS_OK"; case VP8_STATUS_OUT_OF_MEMORY: return "VP8_STATUS_OUT_OF_MEMORY"; case VP8_STATUS_INVALID_PARAM: return "VP8_STATUS_INVALID_PARAM"; case VP8_STATUS_BITSTREAM_ERROR: return "VP8_STATUS_BITSTREAM_ERROR"; case VP8_STATUS_UNSUPPORTED_FEATURE: return "VP8_STATUS_UNSUPPORTED_FEATURE"; case VP8_STATUS_SUSPENDED: return "VP8_STATUS_SUSPENDED"; case VP8_STATUS_USER_ABORT: return "VP8_STATUS_USER_ABORT"; case VP8_STATUS_NOT_ENOUGH_DATA: return "VP8_STATUS_NOT_ENOUGH_DATA"; default: return ""; } } static void vips_image_paint_area(VipsImage *image, const VipsRect *r, const VipsPel *ink) { VipsRect valid = { 0, 0, image->Xsize, image->Ysize }; VipsRect ovl; vips_rect_intersectrect(r, &valid, &ovl); if (!vips_rect_isempty(&ovl)) { int ps = VIPS_IMAGE_SIZEOF_PEL(image); int ls = VIPS_IMAGE_SIZEOF_LINE(image); int ws = ovl.width * ps; VipsPel *to, *q; int x, y, z; /* We plot the first line pointwise, then memcpy() it for the * subsequent lines. We need to work for RGB and RGBA, so we * can't just write uint32s. */ to = VIPS_IMAGE_ADDR(image, ovl.left, ovl.top); q = to; for (x = 0; x < ovl.width; x++) { /* Faster than memcpy() for about ps < 20. */ for (z = 0; z < ps; z++) q[z] = ink[z]; q += ps; } q = to + ls; for (y = 1; y < ovl.height; y++) { memcpy(q, to, ws); q += ls; } } } /* Blend two guint8. */ #define BLEND(X, aX, Y, aY, scale) \ (((X * aX + Y * aY) * scale + (1 << 12)) >> 24) /* Extract R, G, B, A, assuming little-endian. */ #define getR(V) (V & 0xff) #define getG(V) ((V >> 8) & 0xff) #define getB(V) ((V >> 16) & 0xff) #define getA(V) ((V >> 24) & 0xff) /* Rebuild RGBA, assuming little-endian. */ #define setRGBA(R, G, B, A) \ (R | (G << 8) | (B << 16) | ((guint32) A << 24)) /* OVER blend of two unpremultiplied RGBA guint32 * * We assume little-endian (x86), add a byteswap before this if necessary. */ static guint32 blend_pixel(guint32 A, guint32 B) { guint8 aA = getA(A); if (aA == 0) return B; guint8 aB = getA(B); guint8 fac = (aB * (255 - aA) + 127) >> 8; guint8 aR = aA + fac; int scale = aR == 0 ? 0 : (1 << 24) / aR; guint8 rR = BLEND(getR(A), aA, getR(B), fac, scale); guint8 gR = BLEND(getG(A), aA, getG(B), fac, scale); guint8 bR = BLEND(getB(A), aA, getB(B), fac, scale); return setRGBA(rR, gR, bR, aR); } /* Blend sub into frame at left, top. */ static void vips_image_paint_image(VipsImage *frame, VipsImage *sub, int left, int top, gboolean blend) { VipsRect frame_rect = { 0, 0, frame->Xsize, frame->Ysize }; VipsRect sub_rect = { left, top, sub->Xsize, sub->Ysize }; int ps = VIPS_IMAGE_SIZEOF_PEL(frame); VipsRect ovl; g_assert(VIPS_IMAGE_SIZEOF_PEL(sub) == ps); vips_rect_intersectrect(&frame_rect, &sub_rect, &ovl); if (!vips_rect_isempty(&ovl)) { VipsPel *p, *q; int x, y; p = VIPS_IMAGE_ADDR(sub, ovl.left - left, ovl.top - top); q = VIPS_IMAGE_ADDR(frame, ovl.left, ovl.top); for (y = 0; y < ovl.height; y++) { if (blend) { guint32 *A = (guint32 *) p; guint32 *B = (guint32 *) q; for (x = 0; x < ovl.width; x++) B[x] = blend_pixel(A[x], B[x]); } else memcpy((char *) q, (char *) p, ovl.width * ps); p += VIPS_IMAGE_SIZEOF_LINE(sub); q += VIPS_IMAGE_SIZEOF_LINE(frame); } } } int vips__iswebp_source(VipsSource *source) { const unsigned char *p; /* WebP is "RIFF xxxx WEBP" at the start, so we need 12 bytes. */ if ((p = vips_source_sniff(source, 12)) && vips_isprefix("RIFF", (char *) p) && vips_isprefix("WEBP", (char *) p + 8)) return 1; return 0; } static int read_free(Read *read) { WebPDemuxReleaseIterator(&read->iter); VIPS_UNREF(read->frame); VIPS_FREEF(WebPDemuxDelete, read->demux); WebPFreeDecBuffer(&read->config.output); VIPS_UNREF(read->source); VIPS_FREE(read->delays); VIPS_FREE(read); return 0; } static void read_close_cb(VipsImage *image, Read *read) { read_free(read); } static Read * read_new(VipsImage *out, VipsSource *source, int page, int n, double scale) { Read *read; if (!(read = VIPS_NEW(NULL, Read))) return NULL; read->out = out; read->source = source; g_object_ref(source); read->page = page; read->n = n; read->scale = scale; read->delays = NULL; read->demux = NULL; read->frame = NULL; read->dispose_method = WEBP_MUX_DISPOSE_NONE; read->frame_no = 0; /* Everything has to stay open until read has finished, unfortunately, * since webp relies on us mapping the whole source. */ g_signal_connect(out, "close", G_CALLBACK(read_close_cb), read); WebPInitDecoderConfig(&read->config); read->config.options.use_threads = 1; read->config.output.is_external_memory = 1; /* Map the whole source into memory. */ if (!(read->data.bytes = vips_source_map(source, &read->data.size))) return NULL; return read; } /* Map vips metadata names to webp names. */ const VipsWebPNames vips__webp_names[] = { { VIPS_META_ICC_NAME, "ICCP", ICCP_FLAG }, { VIPS_META_EXIF_NAME, "EXIF", EXIF_FLAG }, { VIPS_META_XMP_NAME, "XMP ", XMP_FLAG } }; const int vips__n_webp_names = VIPS_NUMBER(vips__webp_names); static int read_header(Read *read, VipsImage *out) { int flags; int i; if (!(read->demux = WebPDemux(&read->data))) { vips_error("webp", "%s", _("unable to parse image")); return -1; } flags = WebPDemuxGetI(read->demux, WEBP_FF_FORMAT_FLAGS); read->alpha = flags & ALPHA_FLAG; /* We do everything as RGBA and then, if we can, drop the alpha on * save. */ read->config.output.colorspace = MODE_RGBA; read->canvas_width = WebPDemuxGetI(read->demux, WEBP_FF_CANVAS_WIDTH); read->canvas_height = WebPDemuxGetI(read->demux, WEBP_FF_CANVAS_HEIGHT); if (flags & ANIMATION_FLAG) { int loop_count; WebPIterator iter; loop_count = WebPDemuxGetI(read->demux, WEBP_FF_LOOP_COUNT); read->frame_count = WebPDemuxGetI(read->demux, WEBP_FF_FRAME_COUNT); #ifdef DEBUG printf("webp2vips: animation\n"); printf("webp2vips: loop_count = %d\n", loop_count); printf("webp2vips: frame_count = %d\n", read->frame_count); #endif /*DEBUG*/ vips_image_set_int(out, "loop", loop_count); /* DEPRECATED "gif-loop" * * Not the correct behavior as loop=1 became gif-loop=0 * but we want to keep the old behavior untouched! */ vips_image_set_int(out, "gif-loop", loop_count == 0 ? 0 : loop_count - 1); if (WebPDemuxGetFrame(read->demux, 1, &iter)) { int i; read->delays = (int *) g_malloc0(read->frame_count * sizeof(int)); for (i = 0; i < read->frame_count; i++) read->delays[i] = 40; do { g_assert(iter.frame_num >= 1 && iter.frame_num <= read->frame_count); read->delays[iter.frame_num - 1] = iter.duration; /* We need the alpha in an animation if: * - any frame has transparent pixels * - any frame doesn't fill the whole canvas. */ if (iter.has_alpha || iter.width != read->canvas_width || iter.height != read->canvas_height) read->alpha = TRUE; /* We must disable shrink-on-load if any frame * does not fill the whole canvas. We won't be * able to shrink-on-load it to the exact * position in a downsized canvas. */ if (iter.width != read->canvas_width || iter.height != read->canvas_height) read->scale = 1.0; } while (WebPDemuxNextFrame(&iter)); vips_image_set_array_int(out, "delay", read->delays, read->frame_count); /* webp uses ms for delays, gif uses centiseconds. */ vips_image_set_int(out, "gif-delay", VIPS_RINT(read->delays[0] / 10.0)); } WebPDemuxReleaseIterator(&iter); if (read->n == -1) read->n = read->frame_count - read->page; if (read->page < 0 || read->n <= 0 || read->page + read->n > read->frame_count) { vips_error("webp", "%s", _("bad page number")); return -1; } /* Note that n-pages is the number of pages in the original, * not the number of pages in the image we are writing. */ vips_image_set_int(out, VIPS_META_N_PAGES, read->frame_count); } /* We round-to-nearest cf. pdfload etc. */ read->frame_width = VIPS_RINT(read->canvas_width * read->scale); read->frame_height = VIPS_RINT(read->canvas_height * read->scale); #ifdef DEBUG printf("webp2vips: canvas_width = %d\n", read->canvas_width); printf("webp2vips: canvas_height = %d\n", read->canvas_height); printf("webp2vips: frame_width = %d\n", read->frame_width); printf("webp2vips: frame_height = %d\n", read->frame_height); #endif /*DEBUG*/ if (flags & ANIMATION_FLAG) { /* Only set page-height if we have more than one page, or * this could accidentally turn into an animated image later. */ if (read->n > 1) vips_image_set_int(out, VIPS_META_PAGE_HEIGHT, read->frame_height); read->width = read->frame_width; read->height = read->n * read->frame_height; } else { read->width = read->frame_width; read->height = read->frame_height; read->frame_count = 1; } /* height can be huge if this is an animated webp image. */ if (read->width <= 0 || read->height <= 0 || read->width > 0x3FFF || read->height >= VIPS_MAX_COORD || read->frame_width <= 0 || read->frame_height <= 0 || read->frame_width > 0x3FFF || read->frame_height > 0x3FFF) { vips_error("webp", "%s", _("bad image dimensions")); return -1; } for (i = 0; i < vips__n_webp_names; i++) { const char *vips = vips__webp_names[i].vips; const char *webp = vips__webp_names[i].webp; if (flags & vips__webp_names[i].flags) { WebPChunkIterator iter; WebPDemuxGetChunk(read->demux, webp, 1, &iter); vips_image_set_blob_copy(out, vips, iter.chunk.bytes, iter.chunk.size); WebPDemuxReleaseChunkIterator(&iter); } } /* The canvas is always RGBA, we drop alpha to RGB on output if we * can. */ read->frame = vips_image_new_memory(); vips_image_init_fields(read->frame, read->frame_width, read->frame_height, 4, VIPS_FORMAT_UCHAR, VIPS_CODING_NONE, VIPS_INTERPRETATION_sRGB, 1.0, 1.0); if (vips_image_pipelinev(read->frame, VIPS_DEMAND_STYLE_THINSTRIP, NULL) || vips_image_write_prepare(read->frame)) return -1; vips_image_init_fields(out, read->width, read->height, read->alpha ? 4 : 3, VIPS_FORMAT_UCHAR, VIPS_CODING_NONE, VIPS_INTERPRETATION_sRGB, 1.0, 1.0); if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_THINSTRIP, NULL)) return -1; VIPS_SETSTR(out->filename, vips_connection_filename(VIPS_CONNECTION(read->source))); if (!WebPDemuxGetFrame(read->demux, 1, &read->iter)) { vips_error("webp", "%s", _("unable to loop through frames")); return -1; } return 0; } /* Read a single frame -- a width * height block of pixels. This will get * blended into the accumulator at some offset. */ static VipsImage * read_frame(Read *read, int width, int height, const guint8 *data, size_t length) { VipsImage *frame; #ifdef DEBUG printf("read_frame:\n"); #endif /*DEBUG*/ frame = vips_image_new_memory(); vips_image_init_fields(frame, width, height, 4, VIPS_FORMAT_UCHAR, VIPS_CODING_NONE, VIPS_INTERPRETATION_sRGB, 1.0, 1.0); if (vips_image_pipelinev(frame, VIPS_DEMAND_STYLE_THINSTRIP, NULL) || vips_image_write_prepare(frame)) { g_object_unref(frame); return NULL; } read->config.output.u.RGBA.rgba = VIPS_IMAGE_ADDR(frame, 0, 0); read->config.output.u.RGBA.stride = VIPS_IMAGE_SIZEOF_LINE(frame); read->config.output.u.RGBA.size = VIPS_IMAGE_SIZEOF_IMAGE(frame); if (read->scale != 1.0) { read->config.options.use_scaling = 1; read->config.options.scaled_width = width; read->config.options.scaled_height = height; } if (WebPDecode(data, length, &read->config) != VP8_STATUS_OK) { g_object_unref(frame); vips_error("webp2vips", "%s", _("unable to read pixels")); return NULL; } return frame; } static int read_next_frame(Read *read) { VipsImage *frame; VipsRect area; #ifdef DEBUG printf("read_next_frame:\n"); #endif /*DEBUG*/ /* Area of this frame, in output image coordinates. We must rint(), * since we need the same rules as the overall image scale, or we'll * sometimes have missing pixels on edges. */ area.left = VIPS_RINT(read->iter.x_offset * read->scale); area.top = VIPS_RINT(read->iter.y_offset * read->scale); area.width = VIPS_RINT(read->iter.width * read->scale); area.height = VIPS_RINT(read->iter.height * read->scale); /* Dispose from the previous frame. */ if (read->dispose_method == WEBP_MUX_DISPOSE_BACKGROUND) { /* We must clear the pixels occupied by the previous webp * frame (not the whole of the read frame) to 0 (transparent). * * We do not clear to WEBP_FF_BACKGROUND_COLOR. That's only * used to composite down to RGB. Perhaps we * should attach background as metadata. */ guint32 zero = 0; vips_image_paint_area(read->frame, &read->dispose_rect, (VipsPel *) &zero); } /* Note this frame's dispose for next time. */ read->dispose_method = read->iter.dispose_method; read->dispose_rect = area; #ifdef DEBUG printf("webp2vips: frame_num = %d\n", read->iter.frame_num); printf(" left = %d\n", area.left); printf(" top = %d\n", area.top); printf(" width = %d\n", area.width); printf(" height = %d\n", area.height); printf(" duration = %d\n", read->iter.duration); printf(" dispose = "); if (read->iter.dispose_method == WEBP_MUX_DISPOSE_BACKGROUND) printf("clear to background\n"); else printf("none\n"); printf(" has_alpha = %d\n", read->iter.has_alpha); printf(" blend_method = "); if (read->iter.blend_method == WEBP_MUX_BLEND) printf("blend with previous\n"); else printf("don't blend\n"); #endif /*DEBUG*/ if (!(frame = read_frame(read, area.width, area.height, read->iter.fragment.bytes, read->iter.fragment.size))) return -1; /* Now blend or copy the new pixels into our accumulator. */ vips_image_paint_image(read->frame, frame, area.left, area.top, read->iter.frame_num > 1 && read->iter.blend_method == WEBP_MUX_BLEND); g_object_unref(frame); /* If there's another frame, move on. */ if (read->iter.frame_num < read->frame_count) { if (!WebPDemuxNextFrame(&read->iter)) { vips_error("webp2vips", "%s", _("not enough frames")); return -1; } } return 0; } static int read_webp_generate(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRect *r = &out_region->valid; Read *read = (Read *) a; /* iter.frame_num numbers from 1. */ int frame = 1 + r->top / read->frame_height + read->page; int line = r->top % read->frame_height; #ifdef DEBUG_VERBOSE printf("read_webp_generate: line %d\n", r->top); #endif /*DEBUG_VERBOSE*/ g_assert(r->height == 1); while (read->frame_no < frame) { if (read_next_frame(read)) return -1; read->frame_no += 1; } if (out_region->im->Bands == 4) memcpy(VIPS_REGION_ADDR(out_region, 0, r->top), VIPS_IMAGE_ADDR(read->frame, 0, line), VIPS_IMAGE_SIZEOF_LINE(read->frame)); else { int x; VipsPel *p; VipsPel *q; /* We know that alpha is solid, so we can just drop the 4th * band. */ p = VIPS_IMAGE_ADDR(read->frame, 0, line); q = VIPS_REGION_ADDR(out_region, 0, r->top); for (x = 0; x < r->width; x++) { q[0] = p[0]; q[1] = p[1]; q[2] = p[2]; q += 3; p += 4; } } return 0; } static int read_image(Read *read, VipsImage *out) { VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(out), 2); /* Make the output pipeline. */ t[0] = vips_image_new(); if (read_header(read, t[0])) return -1; if (vips_image_generate(t[0], NULL, read_webp_generate, NULL, read, NULL) || vips_sequential(t[0], &t[1], NULL) || vips_image_write(t[1], out)) return -1; return 0; } int vips__webp_read_header_source(VipsSource *source, VipsImage *out, int page, int n, double scale) { Read *read; if (!(read = read_new(out, source, page, n, scale)) || read_header(read, out)) return -1; return 0; } int vips__webp_read_source(VipsSource *source, VipsImage *out, int page, int n, double scale) { Read *read; if (!(read = read_new(out, source, page, n, scale)) || read_image(read, out)) return -1; return 0; } #endif /*HAVE_LIBWEBP*/ libvips-8.15.1/libvips/foreign/webpload.c000066400000000000000000000324601454007373500203350ustar00rootroot00000000000000/* load webp images * * 6/8/13 * - from pngload.c * 28/2/16 * - add @shrink * 1/11/18 * - add @page, @n * 30/4/19 * - deprecate @shrink, use @scale instead */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include "pforeign.h" #ifdef HAVE_LIBWEBP typedef struct _VipsForeignLoadWebp { VipsForeignLoad parent_object; /* Set by subclasses. */ VipsSource *source; /* Load this page (frame number). */ int page; /* Load this many pages. */ int n; /* Scale by this much during load. */ double scale; /* Old and deprecated scaling path. */ int shrink; } VipsForeignLoadWebp; typedef VipsForeignLoadClass VipsForeignLoadWebpClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignLoadWebp, vips_foreign_load_webp, VIPS_TYPE_FOREIGN_LOAD); static void vips_foreign_load_webp_dispose(GObject *gobject) { VipsForeignLoadWebp *webp = (VipsForeignLoadWebp *) gobject; VIPS_UNREF(webp->source); G_OBJECT_CLASS(vips_foreign_load_webp_parent_class)->dispose(gobject); } static int vips_foreign_load_webp_build(VipsObject *object) { VipsForeignLoadWebp *webp = (VipsForeignLoadWebp *) object; /* BC for the old API. */ if (!vips_object_argument_isset(VIPS_OBJECT(webp), "scale") && vips_object_argument_isset(VIPS_OBJECT(webp), "shrink") && webp->shrink != 0) webp->scale = 1.0 / webp->shrink; if (VIPS_OBJECT_CLASS(vips_foreign_load_webp_parent_class)->build(object)) return -1; return 0; } static VipsForeignFlags vips_foreign_load_webp_get_flags(VipsForeignLoad *load) { return 0; } static VipsForeignFlags vips_foreign_load_webp_get_flags_filename(const char *filename) { return 0; } static int vips_foreign_load_webp_header(VipsForeignLoad *load) { VipsForeignLoadWebp *webp = (VipsForeignLoadWebp *) load; if (vips__webp_read_header_source(webp->source, load->out, webp->page, webp->n, webp->scale)) return -1; return 0; } static int vips_foreign_load_webp_load(VipsForeignLoad *load) { VipsForeignLoadWebp *webp = (VipsForeignLoadWebp *) load; if (vips__webp_read_source(webp->source, load->real, webp->page, webp->n, webp->scale)) return -1; return 0; } static void vips_foreign_load_webp_class_init(VipsForeignLoadWebpClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->dispose = vips_foreign_load_webp_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "webpload_base"; object_class->description = _("load webp"); object_class->build = vips_foreign_load_webp_build; /* We are fast at is_a(), so high priority. */ foreign_class->priority = 200; load_class->get_flags_filename = vips_foreign_load_webp_get_flags_filename; load_class->get_flags = vips_foreign_load_webp_get_flags; load_class->header = vips_foreign_load_webp_header; load_class->load = vips_foreign_load_webp_load; VIPS_ARG_INT(class, "page", 20, _("Page"), _("First page to load"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadWebp, page), 0, 100000, 0); VIPS_ARG_INT(class, "n", 21, _("n"), _("Number of pages to load, -1 for all"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadWebp, n), -1, 100000, 1); VIPS_ARG_DOUBLE(class, "scale", 22, _("Scale"), _("Factor to scale by"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignLoadWebp, scale), 0.0, 1024.0, 1.0); VIPS_ARG_INT(class, "shrink", 23, _("Shrink"), _("Shrink factor on load"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsForeignLoadWebp, shrink), 1, 1024, 1); } static void vips_foreign_load_webp_init(VipsForeignLoadWebp *webp) { webp->n = 1; webp->shrink = 1; webp->scale = 1.0; } typedef struct _VipsForeignLoadWebpSource { VipsForeignLoadWebp parent_object; VipsSource *source; } VipsForeignLoadWebpSource; typedef VipsForeignLoadWebpClass VipsForeignLoadWebpSourceClass; G_DEFINE_TYPE(VipsForeignLoadWebpSource, vips_foreign_load_webp_source, vips_foreign_load_webp_get_type()); static int vips_foreign_load_webp_source_build(VipsObject *object) { VipsForeignLoadWebp *webp = (VipsForeignLoadWebp *) object; VipsForeignLoadWebpSource *source = (VipsForeignLoadWebpSource *) object; if (source->source) { webp->source = source->source; g_object_ref(webp->source); } if (VIPS_OBJECT_CLASS(vips_foreign_load_webp_source_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_load_webp_source_class_init( VipsForeignLoadWebpSourceClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "webpload_source"; object_class->description = _("load webp from source"); object_class->build = vips_foreign_load_webp_source_build; operation_class->flags |= VIPS_OPERATION_NOCACHE; load_class->is_a_source = vips__iswebp_source; VIPS_ARG_OBJECT(class, "source", 1, _("Source"), _("Source to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadWebpSource, source), VIPS_TYPE_SOURCE); } static void vips_foreign_load_webp_source_init(VipsForeignLoadWebpSource *buffer) { } typedef struct _VipsForeignLoadWebpFile { VipsForeignLoadWebp parent_object; /* Filename for load. */ char *filename; } VipsForeignLoadWebpFile; typedef VipsForeignLoadWebpClass VipsForeignLoadWebpFileClass; G_DEFINE_TYPE(VipsForeignLoadWebpFile, vips_foreign_load_webp_file, vips_foreign_load_webp_get_type()); static int vips_foreign_load_webp_file_build(VipsObject *object) { VipsForeignLoadWebp *webp = (VipsForeignLoadWebp *) object; VipsForeignLoadWebpFile *file = (VipsForeignLoadWebpFile *) object; if (file->filename && !(webp->source = vips_source_new_from_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_webp_file_parent_class) ->build(object)) return -1; return 0; } static gboolean vips_foreign_load_webp_file_is_a(const char *filename) { VipsSource *source; gboolean result; if (!(source = vips_source_new_from_file(filename))) return FALSE; result = vips__iswebp_source(source); VIPS_UNREF(source); return result; } const char *vips__webp_suffs[] = { ".webp", NULL }; static void vips_foreign_load_webp_file_class_init(VipsForeignLoadWebpFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "webpload"; object_class->description = _("load webp from file"); object_class->build = vips_foreign_load_webp_file_build; foreign_class->suffs = vips__webp_suffs; load_class->is_a = vips_foreign_load_webp_file_is_a; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadWebpFile, filename), NULL); } static void vips_foreign_load_webp_file_init(VipsForeignLoadWebpFile *file) { } typedef struct _VipsForeignLoadWebpBuffer { VipsForeignLoadWebp parent_object; /* Load from a buffer. */ VipsBlob *blob; } VipsForeignLoadWebpBuffer; typedef VipsForeignLoadWebpClass VipsForeignLoadWebpBufferClass; G_DEFINE_TYPE(VipsForeignLoadWebpBuffer, vips_foreign_load_webp_buffer, vips_foreign_load_webp_get_type()); static int vips_foreign_load_webp_buffer_build(VipsObject *object) { VipsForeignLoadWebp *webp = (VipsForeignLoadWebp *) object; VipsForeignLoadWebpBuffer *buffer = (VipsForeignLoadWebpBuffer *) object; if (buffer->blob && !(webp->source = vips_source_new_from_memory( VIPS_AREA(buffer->blob)->data, VIPS_AREA(buffer->blob)->length))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_load_webp_buffer_parent_class) ->build(object)) return -1; return 0; } static gboolean vips_foreign_load_webp_buffer_is_a_buffer(const void *buf, size_t len) { VipsSource *source; gboolean result; if (!(source = vips_source_new_from_memory(buf, len))) return FALSE; result = vips__iswebp_source(source); VIPS_UNREF(source); return result; } static void vips_foreign_load_webp_buffer_class_init( VipsForeignLoadWebpBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignLoadClass *load_class = (VipsForeignLoadClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "webpload_buffer"; object_class->description = _("load webp from buffer"); object_class->build = vips_foreign_load_webp_buffer_build; load_class->is_a_buffer = vips_foreign_load_webp_buffer_is_a_buffer; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignLoadWebpBuffer, blob), VIPS_TYPE_BLOB); } static void vips_foreign_load_webp_buffer_init(VipsForeignLoadWebpBuffer *buffer) { } #endif /*HAVE_LIBWEBP*/ /** * vips_webpload: * @filename: file to load * @out: (out): decompressed image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @page: %gint, page (frame) to read * * @n: %gint, load this many pages * * @scale: %gdouble, scale by this much on load * * Read a WebP file into a VIPS image. * * Use @page to select a page to render, numbering from zero. * * Use @n to select the number of pages to render. The default is 1. Pages are * rendered in a vertical column, with each individual page aligned to the * left. Set to -1 to mean "until the end of the document". Use vips_grid() * to change page layout. * * Use @scale to specify a scale-on-load factor. For example, 2.0 to double * the size on load. Animated webp images don't support shrink-on-load, so a * further resize may be necessary. * * The loader supports ICC, EXIF and XMP metadata. * * See also: vips_image_new_from_file(). * * Returns: 0 on success, -1 on error. */ int vips_webpload(const char *filename, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("webpload", ap, filename, out); va_end(ap); return result; } /** * vips_webpload_buffer: * @buf: (array length=len) (element-type guint8): memory area to load * @len: (type gsize): size of memory area * @out: (out): image to write * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @page: %gint, page (frame) to read * * @n: %gint, load this many pages * * @scale: %gdouble, scale by this much on load * * Read a WebP-formatted memory block into a VIPS image. Exactly as * vips_webpload(), but read from a memory buffer. * * You must not free the buffer while @out is active. The * #VipsObject::postclose signal on @out is a good place to free. * * See also: vips_webpload() * * Returns: 0 on success, -1 on error. */ int vips_webpload_buffer(void *buf, size_t len, VipsImage **out, ...) { va_list ap; VipsBlob *blob; int result; /* We don't take a copy of the data or free it. */ blob = vips_blob_new(NULL, buf, len); va_start(ap, out); result = vips_call_split("webpload_buffer", ap, blob, out); va_end(ap); vips_area_unref(VIPS_AREA(blob)); return result; } /** * vips_webpload_source: * @source: source to load from * @out: (out): image to write * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @page: %gint, page (frame) to read * * @n: %gint, load this many pages * * @scale: %gdouble, scale by this much on load * * Exactly as vips_webpload(), but read from a source. * * See also: vips_webpload() * * Returns: 0 on success, -1 on error. */ int vips_webpload_source(VipsSource *source, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("webpload_source", ap, source, out); va_end(ap); return result; } libvips-8.15.1/libvips/foreign/webpsave.c000066400000000000000000001024331454007373500203520ustar00rootroot00000000000000/* save to webp * * 24/11/11 * - wrap a class around the webp writer * 6/8/13 * - from vips2jpeg.c * 31/5/16 * - buffer write ignored lossless, thanks aaron42net * 2/5/16 Felix Bünemann * - used advanced encoding API, expose controls * 8/11/16 * - add metadata write * 29/10/18 * - add animated webp support * 29/10/18 * - target libwebp 0.5+ and remove some ifdefs * - add animated webp write * - use libwebpmux instead of our own thing, phew * 15/1/19 lovell * - add @effort * 6/7/19 [deftomat] * - support array of delays * 8/7/19 * - set loop even if we strip * 14/10/19 * - revise for target IO * 18/7/20 * - add @profile param to match tiff, jpg, etc. * 30/7/21 * - rename "reduction_effort" as "effort" * 7/9/22 dloebl * - switch to sink_disc */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pforeign.h" #ifdef HAVE_LIBWEBP #include #include #include typedef int (*webp_import)(WebPPicture *picture, const uint8_t *rgb, int stride); typedef enum _VipsForeignSaveWebpMode { VIPS_FOREIGN_SAVE_WEBP_MODE_SINGLE, VIPS_FOREIGN_SAVE_WEBP_MODE_ANIM } VipsForeignSaveWebpMode; typedef struct _VipsForeignSaveWebp { VipsForeignSave parent_object; VipsTarget *target; /* Animated or single image write mode? * Important, because we use a different API * for animated WebP write. */ VipsForeignSaveWebpMode mode; int timestamp_ms; /* Quality factor. */ int Q; /* Turn on lossless encode. */ gboolean lossless; /* Lossy compression preset. */ VipsForeignWebpPreset preset; /* Enable smart chroma subsampling. */ gboolean smart_subsample; /* Use preprocessing in lossless mode. */ gboolean near_lossless; /* Alpha quality. */ int alpha_q; /* Level of CPU effort to reduce file size. */ int effort; /* Animated webp options. */ int gif_delay; int *delay; int delay_length; /* Attempt to minimise size */ gboolean min_size; /* Allow mixed encoding (might reduce file size) */ gboolean mixed; /* Min between key frames. */ int kmin; /* Max between keyframes. */ int kmax; WebPConfig config; /* Output is written here. We can only support memory write, since we * handle metadata. */ WebPMemoryWriter memory_writer; /* Write animated webp here. */ WebPAnimEncoder *enc; /* Add metadata with this. */ WebPMux *mux; /* The current y position in the frame and the current page index. */ int write_y; int page_number; /* VipsRegion is not always contiguous, but we need contiguous RGB(A) * for libwebp. We need to copy each frame to a local buffer. */ VipsPel *frame_bytes; } VipsForeignSaveWebp; typedef VipsForeignSaveClass VipsForeignSaveWebpClass; G_DEFINE_ABSTRACT_TYPE(VipsForeignSaveWebp, vips_foreign_save_webp, VIPS_TYPE_FOREIGN_SAVE); static int vips_foreign_save_webp_progress_hook(int percent, const WebPPicture *picture) { VipsImage *in = (VipsImage *) picture->user_data; /* Trigger any eval callbacks on the image and * check if we need to abort the WebP encoding. */ vips_image_eval(in, VIPS_IMAGE_N_PELS(in)); /* Abort WebP encoding if requested. */ if (vips_image_iskilled(in)) return 0; return 1; } static void vips_foreign_save_webp_unset(VipsForeignSaveWebp *write) { WebPMemoryWriterClear(&write->memory_writer); VIPS_FREEF(WebPAnimEncoderDelete, write->enc); VIPS_FREEF(WebPMuxDelete, write->mux); } static void vips_foreign_save_webp_dispose(GObject *gobject) { VipsForeignSaveWebp *webp = (VipsForeignSaveWebp *) gobject; VIPS_UNREF(webp->target); VIPS_FREE(webp->frame_bytes); G_OBJECT_CLASS(vips_foreign_save_webp_parent_class)->dispose(gobject); } static gboolean vips_foreign_save_webp_pic_init(VipsForeignSaveWebp *write, WebPPicture *pic) { VipsForeignSave *save = (VipsForeignSave *) write; if (!WebPPictureInit(pic)) { vips_error("webpsave", "%s", _("picture version error")); return FALSE; } pic->writer = WebPMemoryWrite; pic->custom_ptr = (void *) &write->memory_writer; pic->progress_hook = vips_foreign_save_webp_progress_hook; pic->user_data = (void *) save->in; /* Smart subsampling needs use_argb because it is applied during * RGB to YUV conversion. */ pic->use_argb = write->lossless || write->near_lossless || write->smart_subsample; return TRUE; } /* Write a VipsImage into an uninitialised pic. */ static int vips_foreign_save_webp_write_webp_image(VipsForeignSaveWebp *write, const VipsPel *imagedata, WebPPicture *pic) { VipsForeignSave *save = (VipsForeignSave *) write; webp_import import; int page_height = vips_image_get_page_height(save->ready); if (!vips_foreign_save_webp_pic_init(write, pic)) return -1; pic->width = save->ready->Xsize; pic->height = page_height; if (save->ready->Bands == 4) import = WebPPictureImportRGBA; else import = WebPPictureImportRGB; if (!import(pic, imagedata, save->ready->Xsize * save->ready->Bands)) { WebPPictureFree(pic); vips_error("webpsave", "%s", _("picture memory error")); return -1; } return 0; } /* We have a complete frame --- write! */ static int vips_foreign_save_webp_write_frame(VipsForeignSaveWebp *webp) { WebPPicture pic; VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(webp); if (vips_foreign_save_webp_write_webp_image(webp, webp->frame_bytes, &pic)) return -1; /* Animated write */ if (webp->mode == VIPS_FOREIGN_SAVE_WEBP_MODE_ANIM) { if (!WebPAnimEncoderAdd(webp->enc, &pic, webp->timestamp_ms, &webp->config)) { WebPPictureFree(&pic); vips_error(class->nickname, "%s", _("anim add error")); return -1; } /* Adjust current timestamp */ if (webp->delay && webp->page_number < webp->delay_length) webp->timestamp_ms += webp->delay[webp->page_number]; else webp->timestamp_ms += webp->gif_delay * 10; } else { /* Single image write */ if (!WebPEncode(&webp->config, &pic)) { WebPPictureFree(&pic); vips_error("webpsave", "%s", _("unable to encode")); return -1; } } WebPPictureFree(&pic); return 0; } /* Another chunk of pixels have arrived from the pipeline. Add to frame, and * if the frame completes, compress and write to the target. */ static int vips_foreign_save_webp_sink_disc(VipsRegion *region, VipsRect *area, void *a) { VipsForeignSave *save = (VipsForeignSave *) a; VipsForeignSaveWebp *webp = (VipsForeignSaveWebp *) a; int i; int page_height = vips_image_get_page_height(save->ready); /* Write the new pixels into the frame. */ for (i = 0; i < area->height; i++) { memcpy(webp->frame_bytes + area->width * webp->write_y * save->ready->Bands, VIPS_REGION_ADDR(region, 0, area->top + i), area->width * save->ready->Bands); webp->write_y += 1; /* If we've filled the frame, write and move it down. */ if (webp->write_y == page_height) { if (vips_foreign_save_webp_write_frame(webp)) return -1; webp->write_y = 0; webp->page_number += 1; } } return 0; } static WebPPreset get_preset(VipsForeignWebpPreset preset) { switch (preset) { case VIPS_FOREIGN_WEBP_PRESET_DEFAULT: return WEBP_PRESET_DEFAULT; case VIPS_FOREIGN_WEBP_PRESET_PICTURE: return WEBP_PRESET_PICTURE; case VIPS_FOREIGN_WEBP_PRESET_PHOTO: return WEBP_PRESET_PHOTO; case VIPS_FOREIGN_WEBP_PRESET_DRAWING: return WEBP_PRESET_DRAWING; case VIPS_FOREIGN_WEBP_PRESET_ICON: return WEBP_PRESET_ICON; case VIPS_FOREIGN_WEBP_PRESET_TEXT: return WEBP_PRESET_TEXT; default: g_assert_not_reached(); } /* Keep -Wall happy. */ return -1; } static void vips_webp_set_count(VipsForeignSaveWebp *write, int loop_count) { uint32_t features; if (WebPMuxGetFeatures(write->mux, &features) == WEBP_MUX_OK && (features & ANIMATION_FLAG)) { WebPMuxAnimParams params; if (WebPMuxGetAnimationParams(write->mux, ¶ms) == WEBP_MUX_OK) { params.loop_count = loop_count; WebPMuxSetAnimationParams(write->mux, ¶ms); } } } static int vips_webp_set_chunk(VipsForeignSaveWebp *write, const char *webp_name, const void *data, size_t length) { WebPData chunk; chunk.bytes = data; chunk.size = length; if (WebPMuxSetChunk(write->mux, webp_name, &chunk, 1) != WEBP_MUX_OK) { vips_error("webpsave", "%s", _("chunk add error")); return -1; } return 0; } static int vips_webp_add_original_meta(VipsForeignSaveWebp *write) { VipsForeignSave *save = (VipsForeignSave *) write; for (int i = 0; i < vips__n_webp_names; i++) { const char *vips_name = vips__webp_names[i].vips; const char *webp_name = vips__webp_names[i].webp; if (strcmp(vips_name, VIPS_META_ICC_NAME) == 0) continue; if (vips_image_get_typeof(save->ready, vips_name)) { const void *data; size_t length; if (vips_image_get_blob(save->ready, vips_name, &data, &length) || vips_webp_set_chunk(write, webp_name, data, length)) return -1; } } return 0; } static const char * vips_webp_get_webp_name(const char *vips_name) { for (int i = 0; i < vips__n_webp_names; i++) if (strcmp(vips_name, vips__webp_names[i].vips) == 0) return vips__webp_names[i].webp; return ""; } static int vips_webp_add_icc(VipsForeignSaveWebp *webp, const void *profile, size_t length) { const char *webp_name = vips_webp_get_webp_name(VIPS_META_ICC_NAME); if (vips_webp_set_chunk(webp, webp_name, profile, length)) return -1; return 0; } static int vips_webp_add_custom_icc(VipsForeignSaveWebp *webp, const char *profile) { VipsBlob *blob; if (vips_profile_load(profile, &blob, NULL)) return -1; if (blob) { size_t length; const void *data = vips_blob_get(blob, &length); if (vips_webp_add_icc(webp, data, length)) { vips_area_unref((VipsArea *) blob); return -1; } vips_area_unref((VipsArea *) blob); } return 0; } static int vips_webp_add_original_icc(VipsForeignSaveWebp *webp) { VipsForeignSave *save = (VipsForeignSave *) webp; const void *data; size_t length; if (vips_image_get_blob(save->ready, VIPS_META_ICC_NAME, &data, &length)) return -1; vips_webp_add_icc(webp, data, length); return 0; } static int vips_webp_add_metadata(VipsForeignSaveWebp *webp) { VipsForeignSave *save = (VipsForeignSave *) webp; WebPData data; data.bytes = webp->memory_writer.mem; data.size = webp->memory_writer.size; /* Parse what we have. */ if (!(webp->mux = WebPMuxCreate(&data, 1))) { vips_error("webpsave", "%s", _("mux error")); return -1; } if (vips_image_get_typeof(save->ready, "loop")) { int loop; if (vips_image_get_int(save->ready, "loop", &loop)) return -1; vips_webp_set_count(webp, loop); } else if (vips_image_get_typeof(save->ready, "gif-loop")) { /* DEPRECATED "gif-loop" */ int gif_loop; if (vips_image_get_int(save->ready, "gif-loop", &gif_loop)) return -1; vips_webp_set_count(webp, gif_loop == 0 ? 0 : gif_loop + 1); } /* Metadata */ if (vips_webp_add_original_meta(webp)) return -1; /* A profile supplied as an argument overrides an embedded * profile. */ if (save->profile) { if (vips_webp_add_custom_icc(webp, save->profile)) return -1; } else if (vips_image_get_typeof(save->ready, VIPS_META_ICC_NAME)) { if (vips_webp_add_original_icc(webp)) return -1; } if (WebPMuxAssemble(webp->mux, &data) != WEBP_MUX_OK) { vips_error("webpsave", "%s", _("mux error")); return -1; } /* Free old stuff, reinit with new stuff. */ WebPMemoryWriterClear(&webp->memory_writer); webp->memory_writer.mem = (uint8_t *) data.bytes; webp->memory_writer.size = data.size; return 0; } static int vips_foreign_save_webp_init_config(VipsForeignSaveWebp *webp) { /* Init WebP config. */ WebPMemoryWriterInit(&webp->memory_writer); if (!WebPConfigInit(&webp->config)) { vips_foreign_save_webp_unset(webp); vips_error("webpsave", "%s", _("config version error")); return -1; } /* These presets are only for lossy compression. There seems to be * separate API for lossless or near-lossless, see * WebPConfigLosslessPreset(). */ if (!(webp->lossless || webp->near_lossless) && !WebPConfigPreset(&webp->config, get_preset(webp->preset), webp->Q)) { vips_foreign_save_webp_unset(webp); vips_error("webpsave", "%s", _("config version error")); return -1; } webp->config.lossless = webp->lossless || webp->near_lossless; webp->config.alpha_quality = webp->alpha_q; webp->config.method = webp->effort; if (webp->lossless) webp->config.quality = webp->Q; if (webp->near_lossless) webp->config.near_lossless = webp->Q; if (webp->smart_subsample) webp->config.use_sharp_yuv = 1; if (!WebPValidateConfig(&webp->config)) { vips_foreign_save_webp_unset(webp); vips_error("webpsave", "%s", _("invalid configuration")); return -1; } return 0; } static int vips_foreign_save_webp_init_anim_enc(VipsForeignSaveWebp *webp) { VipsForeignSave *save = (VipsForeignSave *) webp; WebPAnimEncoderOptions anim_config; int i; int page_height = vips_image_get_page_height(save->ready); /* Init config for animated write */ if (!WebPAnimEncoderOptionsInit(&anim_config)) { vips_error("webpsave", "%s", _("config version error")); return -1; } anim_config.minimize_size = webp->min_size; anim_config.allow_mixed = webp->mixed; anim_config.kmin = webp->kmin; anim_config.kmax = webp->kmax; webp->enc = WebPAnimEncoderNew(save->ready->Xsize, page_height, &anim_config); if (!webp->enc) { vips_error("webpsave", "%s", _("unable to init animation")); return -1; } /* Get delay array * * There might just be the old gif-delay field. This is centiseconds. */ webp->gif_delay = 10; if (vips_image_get_typeof(save->ready, "gif-delay") && vips_image_get_int(save->ready, "gif-delay", &webp->gif_delay)) return -1; /* New images have an array of ints instead. */ webp->delay = NULL; if (vips_image_get_typeof(save->ready, "delay") && vips_image_get_array_int(save->ready, "delay", &webp->delay, &webp->delay_length)) return -1; /* Force frames with a small or no duration to 100ms * to be consistent with web browsers and other * transcoding tools. */ if (webp->gif_delay <= 1) webp->gif_delay = 10; for (i = 0; i < webp->delay_length; i++) if (webp->delay[i] <= 10) webp->delay[i] = 100; return 0; } static int vips_foreign_save_webp_finish_anim(VipsForeignSaveWebp *webp) { WebPData webp_data; /* Closes animated encoder and adds last frame delay. */ if (!WebPAnimEncoderAdd(webp->enc, NULL, webp->timestamp_ms, NULL)) { vips_error("webpsave", "%s", _("anim close error")); return -1; } if (!WebPAnimEncoderAssemble(webp->enc, &webp_data)) { vips_error("webpsave", "%s", _("anim build error")); return -1; } /* Terrible. This will only work if the output buffer is currently * empty. */ if (webp->memory_writer.mem != NULL) { vips_error("webpsave", "%s", _("internal error")); return -1; } webp->memory_writer.mem = (uint8_t *) webp_data.bytes; webp->memory_writer.size = webp_data.size; return 0; } static int vips_foreign_save_webp_build(VipsObject *object) { VipsForeignSave *save = (VipsForeignSave *) object; VipsForeignSaveWebp *webp = (VipsForeignSaveWebp *) object; int page_height; if (VIPS_OBJECT_CLASS(vips_foreign_save_webp_parent_class)->build(object)) return -1; page_height = vips_image_get_page_height(save->ready); if (save->ready->Xsize > 16383 || page_height > 16383) { vips_error("webpsave", _("image too large")); vips_foreign_save_webp_unset(webp); return -1; } /* RGB(A) frame as a contiguous buffer. */ size_t frame_size = (size_t) save->ready->Bands * save->ready->Xsize * page_height; webp->frame_bytes = g_try_malloc(frame_size); if (webp->frame_bytes == NULL) { vips_error("webpsave", _("failed to allocate %zu bytes"), frame_size); vips_foreign_save_webp_unset(webp); return -1; } /* Init generic WebP config */ if (vips_foreign_save_webp_init_config(webp)) return -1; /* Determine the write mode (single image or animated write) */ webp->mode = VIPS_FOREIGN_SAVE_WEBP_MODE_SINGLE; if (page_height != save->ready->Ysize) webp->mode = VIPS_FOREIGN_SAVE_WEBP_MODE_ANIM; /* Init config for animated write (if necessary) */ if (webp->mode == VIPS_FOREIGN_SAVE_WEBP_MODE_ANIM) if (vips_foreign_save_webp_init_anim_enc(webp)) return -1; if (vips_sink_disc(save->ready, vips_foreign_save_webp_sink_disc, webp)) return -1; /* Finish animated write */ if (webp->mode == VIPS_FOREIGN_SAVE_WEBP_MODE_ANIM) if (vips_foreign_save_webp_finish_anim(webp)) return -1; if (vips_webp_add_metadata(webp)) { vips_foreign_save_webp_unset(webp); return -1; } if (vips_target_write(webp->target, webp->memory_writer.mem, webp->memory_writer.size)) { vips_foreign_save_webp_unset(webp); return -1; } if (vips_target_end(webp->target)) return -1; vips_foreign_save_webp_unset(webp); return 0; } static const char *vips__save_webp_suffs[] = { ".webp", NULL }; #define UC VIPS_FORMAT_UCHAR /* Type promotion for save ... just always go to uchar. */ static VipsBandFormat bandfmt_webp[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, UC, UC, UC, UC, UC, UC, UC, UC, UC }; static void vips_foreign_save_webp_class_init(VipsForeignSaveWebpClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsForeignClass *foreign_class = (VipsForeignClass *) class; VipsForeignSaveClass *save_class = (VipsForeignSaveClass *) class; gobject_class->dispose = vips_foreign_save_webp_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "webpsave_base"; object_class->description = _("save as WebP"); object_class->build = vips_foreign_save_webp_build; foreign_class->suffs = vips__save_webp_suffs; save_class->saveable = VIPS_SAVEABLE_RGBA_ONLY; save_class->format_table = bandfmt_webp; VIPS_ARG_INT(class, "Q", 10, _("Q"), _("Q factor"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveWebp, Q), 0, 100, 75); VIPS_ARG_BOOL(class, "lossless", 11, _("Lossless"), _("Enable lossless compression"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveWebp, lossless), FALSE); VIPS_ARG_ENUM(class, "preset", 12, _("Preset"), _("Preset for lossy compression"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveWebp, preset), VIPS_TYPE_FOREIGN_WEBP_PRESET, VIPS_FOREIGN_WEBP_PRESET_DEFAULT); VIPS_ARG_BOOL(class, "smart_subsample", 13, _("Smart subsampling"), _("Enable high quality chroma subsampling"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveWebp, smart_subsample), FALSE); VIPS_ARG_BOOL(class, "near_lossless", 14, _("Near lossless"), _("Enable preprocessing in lossless mode (uses Q)"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveWebp, near_lossless), FALSE); VIPS_ARG_INT(class, "alpha_q", 15, _("Alpha quality"), _("Change alpha plane fidelity for lossy compression"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveWebp, alpha_q), 0, 100, 100); VIPS_ARG_BOOL(class, "min_size", 16, _("Minimise size"), _("Optimise for minimum size"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveWebp, min_size), FALSE); VIPS_ARG_INT(class, "kmin", 17, _("Minimum keyframe spacing"), _("Minimum number of frames between key frames"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveWebp, kmin), 0, INT_MAX, INT_MAX - 1); VIPS_ARG_INT(class, "kmax", 18, _("Maximum keyframe spacing"), _("Maximum number of frames between key frames"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveWebp, kmax), 0, INT_MAX, INT_MAX); VIPS_ARG_INT(class, "effort", 19, _("Effort"), _("Level of CPU effort to reduce file size"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveWebp, effort), 0, 6, 4); VIPS_ARG_INT(class, "reduction_effort", 21, _("Reduction effort"), _("Level of CPU effort to reduce file size"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsForeignSaveWebp, effort), 0, 6, 4); VIPS_ARG_BOOL(class, "mixed", 22, _("Mixed encoding"), _("Allow mixed encoding (might reduce file size)"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsForeignSaveWebp, mixed), FALSE); } static void vips_foreign_save_webp_init(VipsForeignSaveWebp *webp) { webp->Q = 75; webp->alpha_q = 100; webp->effort = 4; /* ie. keyframes disabled by default. */ webp->kmin = INT_MAX - 1; webp->kmax = INT_MAX; } typedef struct _VipsForeignSaveWebpTarget { VipsForeignSaveWebp parent_object; VipsTarget *target; } VipsForeignSaveWebpTarget; typedef VipsForeignSaveWebpClass VipsForeignSaveWebpTargetClass; G_DEFINE_TYPE(VipsForeignSaveWebpTarget, vips_foreign_save_webp_target, vips_foreign_save_webp_get_type()); static int vips_foreign_save_webp_target_build(VipsObject *object) { VipsForeignSaveWebp *webp = (VipsForeignSaveWebp *) object; VipsForeignSaveWebpTarget *target = (VipsForeignSaveWebpTarget *) object; webp->target = target->target; g_object_ref(webp->target); if (VIPS_OBJECT_CLASS(vips_foreign_save_webp_target_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_save_webp_target_class_init( VipsForeignSaveWebpTargetClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "webpsave_target"; object_class->build = vips_foreign_save_webp_target_build; VIPS_ARG_OBJECT(class, "target", 1, _("Target"), _("Target to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveWebpTarget, target), VIPS_TYPE_TARGET); } static void vips_foreign_save_webp_target_init(VipsForeignSaveWebpTarget *target) { } typedef struct _VipsForeignSaveWebpFile { VipsForeignSaveWebp parent_object; char *filename; } VipsForeignSaveWebpFile; typedef VipsForeignSaveWebpClass VipsForeignSaveWebpFileClass; G_DEFINE_TYPE(VipsForeignSaveWebpFile, vips_foreign_save_webp_file, vips_foreign_save_webp_get_type()); static int vips_foreign_save_webp_file_build(VipsObject *object) { VipsForeignSaveWebp *webp = (VipsForeignSaveWebp *) object; VipsForeignSaveWebpFile *file = (VipsForeignSaveWebpFile *) object; if (!(webp->target = vips_target_new_to_file(file->filename))) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_save_webp_file_parent_class) ->build(object)) return -1; return 0; } static void vips_foreign_save_webp_file_class_init(VipsForeignSaveWebpFileClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "webpsave"; object_class->build = vips_foreign_save_webp_file_build; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to save to"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsForeignSaveWebpFile, filename), NULL); } static void vips_foreign_save_webp_file_init(VipsForeignSaveWebpFile *file) { } typedef struct _VipsForeignSaveWebpBuffer { VipsForeignSaveWebp parent_object; VipsArea *buf; } VipsForeignSaveWebpBuffer; typedef VipsForeignSaveWebpClass VipsForeignSaveWebpBufferClass; G_DEFINE_TYPE(VipsForeignSaveWebpBuffer, vips_foreign_save_webp_buffer, vips_foreign_save_webp_get_type()); static int vips_foreign_save_webp_buffer_build(VipsObject *object) { VipsForeignSaveWebp *webp = (VipsForeignSaveWebp *) object; VipsForeignSaveWebpBuffer *buffer = (VipsForeignSaveWebpBuffer *) object; VipsBlob *blob; if (!(webp->target = vips_target_new_to_memory())) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_save_webp_buffer_parent_class) ->build(object)) return -1; g_object_get(webp->target, "blob", &blob, NULL); g_object_set(buffer, "buffer", blob, NULL); vips_area_unref(VIPS_AREA(blob)); return 0; } static void vips_foreign_save_webp_buffer_class_init( VipsForeignSaveWebpBufferClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "webpsave_buffer"; object_class->build = vips_foreign_save_webp_buffer_build; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to save to"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsForeignSaveWebpBuffer, buf), VIPS_TYPE_BLOB); } static void vips_foreign_save_webp_buffer_init(VipsForeignSaveWebpBuffer *buffer) { } typedef struct _VipsForeignSaveWebpMime { VipsForeignSaveWebp parent_object; } VipsForeignSaveWebpMime; typedef VipsForeignSaveWebpClass VipsForeignSaveWebpMimeClass; G_DEFINE_TYPE(VipsForeignSaveWebpMime, vips_foreign_save_webp_mime, vips_foreign_save_webp_get_type()); static int vips_foreign_save_webp_mime_build(VipsObject *object) { VipsForeignSaveWebp *webp = (VipsForeignSaveWebp *) object; VipsBlob *blob; void *data; size_t len; if (!(webp->target = vips_target_new_to_memory())) return -1; if (VIPS_OBJECT_CLASS(vips_foreign_save_webp_mime_parent_class) ->build(object)) return -1; g_object_get(webp->target, "blob", &blob, NULL); data = VIPS_AREA(blob)->data; len = VIPS_AREA(blob)->length; vips_area_unref(VIPS_AREA(blob)); printf("Content-length: %zu\r\n", len); printf("Content-type: image/webp\r\n"); printf("\r\n"); (void) fwrite(data, sizeof(char), len, stdout); fflush(stdout); VIPS_UNREF(webp->target); return 0; } static void vips_foreign_save_webp_mime_class_init(VipsForeignSaveWebpMimeClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; object_class->nickname = "webpsave_mime"; object_class->description = _("save image to webp mime"); object_class->build = vips_foreign_save_webp_mime_build; } static void vips_foreign_save_webp_mime_init(VipsForeignSaveWebpMime *mime) { } #endif /*HAVE_LIBWEBP*/ /** * vips_webpsave: (method) * @in: image to save * @filename: file to write to * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @Q: %gint, quality factor * * @lossless: %gboolean, enables lossless compression * * @preset: #VipsForeignWebpPreset, choose lossy compression preset * * @smart_subsample: %gboolean, enables high quality chroma subsampling * * @near_lossless: %gboolean, preprocess in lossless mode (controlled by Q) * * @alpha_q: %gint, set alpha quality in lossless mode * * @effort: %gint, level of CPU effort to reduce file size * * @min_size: %gboolean, minimise size * * @mixed: %gboolean, allow both lossy and lossless encoding * * @kmin: %gint, minimum number of frames between keyframes * * @kmax: %gint, maximum number of frames between keyframes * * Write an image to a file in WebP format. * * By default, images are saved in lossy format, with * @Q giving the WebP quality factor. It has the range 0 - 100, with the * default 75. * * Use @preset to hint the image type to the lossy compressor. The default is * #VIPS_FOREIGN_WEBP_PRESET_DEFAULT. * * Set @smart_subsample to enable high quality chroma subsampling. * * Use @alpha_q to set the quality for the alpha channel in lossy mode. It has * the range 1 - 100, with the default 100. * * Use @effort to control how much CPU time to spend attempting to * reduce file size. A higher value means more effort and therefore CPU time * should be spent. It has the range 0-6 and a default value of 4. * * Set @lossless to use lossless compression, or combine @near_lossless * with @Q 80, 60, 40 or 20 to apply increasing amounts of preprocessing * which improves the near-lossless compression ratio by up to 50%. * * For animated webp output, @min_size will try to optimize for minimum size. * * For animated webp output, @kmax sets the maximum number of frames between * keyframes. Setting 0 means only keyframes. @kmin sets the minimum number of * frames between frames. Setting 0 means no keyframes. By default, keyframes * are disabled. * * For animated webp output, @mixed tries to improve the file size by mixing * both lossy and lossless encoding. * * Use the metadata items `loop` and `delay` to set the number of * loops for the animation and the frame delays. * * See also: vips_webpload(), vips_image_write_to_file(). * * Returns: 0 on success, -1 on error. */ int vips_webpsave(VipsImage *in, const char *filename, ...) { va_list ap; int result; va_start(ap, filename); result = vips_call_split("webpsave", ap, in, filename); va_end(ap); return result; } /** * vips_webpsave_buffer: (method) * @in: image to save * @buf: (out) (array length=len) (element-type guint8): return output buffer here * @len: return output length here * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @Q: %gint, quality factor * * @lossless: %gboolean, enables lossless compression * * @preset: #VipsForeignWebpPreset, choose lossy compression preset * * @smart_subsample: %gboolean, enables high quality chroma subsampling * * @near_lossless: %gboolean, preprocess in lossless mode (controlled by Q) * * @alpha_q: %gint, set alpha quality in lossless mode * * @effort: %gint, level of CPU effort to reduce file size * * @min_size: %gboolean, minimise size * * @mixed: %gboolean, allow both lossy and lossless encoding * * @kmin: %gint, minimum number of frames between keyframes * * @kmax: %gint, maximum number of frames between keyframes * * As vips_webpsave(), but save to a memory buffer. * * The address of the buffer is returned in @buf, the length of the buffer in * @len. You are responsible for freeing the buffer with g_free() when you * are done with it. * * See also: vips_webpsave(). * * Returns: 0 on success, -1 on error. */ int vips_webpsave_buffer(VipsImage *in, void **buf, size_t *len, ...) { va_list ap; VipsArea *area; int result; area = NULL; va_start(ap, len); result = vips_call_split("webpsave_buffer", ap, in, &area); va_end(ap); if (!result && area) { if (buf) { *buf = area->data; area->free_fn = NULL; } if (len) *len = area->length; vips_area_unref(area); } return result; } /** * vips_webpsave_mime: (method) * @in: image to save * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @Q: %gint, quality factor * * @lossless: %gboolean, enables lossless compression * * @preset: #VipsForeignWebpPreset, choose lossy compression preset * * @smart_subsample: %gboolean, enables high quality chroma subsampling * * @near_lossless: %gboolean, preprocess in lossless mode (controlled by Q) * * @alpha_q: %gint, set alpha quality in lossless mode * * @effort: %gint, level of CPU effort to reduce file size * * @min_size: %gboolean, minimise size * * @mixed: %gboolean, allow both lossy and lossless encoding * * @kmin: %gint, minimum number of frames between keyframes * * @kmax: %gint, maximum number of frames between keyframes * * As vips_webpsave(), but save as a mime webp on stdout. * * See also: vips_webpsave(), vips_image_write_to_file(). * * Returns: 0 on success, -1 on error. */ int vips_webpsave_mime(VipsImage *in, ...) { va_list ap; int result; va_start(ap, in); result = vips_call_split("webpsave_mime", ap, in); va_end(ap); return result; } /** * vips_webpsave_target: (method) * @in: image to save * @target: save image to this target * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @Q: %gint, quality factor * * @lossless: %gboolean, enables lossless compression * * @preset: #VipsForeignWebpPreset, choose lossy compression preset * * @smart_subsample: %gboolean, enables high quality chroma subsampling * * @near_lossless: %gboolean, preprocess in lossless mode (controlled by Q) * * @alpha_q: %gint, set alpha quality in lossless mode * * @effort: %gint, level of CPU effort to reduce file size * * @min_size: %gboolean, minimise size * * @mixed: %gboolean, allow both lossy and lossless encoding * * @kmin: %gint, minimum number of frames between keyframes * * @kmax: %gint, maximum number of frames between keyframes * * As vips_webpsave(), but save to a target. * * See also: vips_webpsave(). * * Returns: 0 on success, -1 on error. */ int vips_webpsave_target(VipsImage *in, VipsTarget *target, ...) { va_list ap; int result; va_start(ap, target); result = vips_call_split("webpsave_target", ap, in, target); va_end(ap); return result; } libvips-8.15.1/libvips/freqfilt/000077500000000000000000000000001454007373500165525ustar00rootroot00000000000000libvips-8.15.1/libvips/freqfilt/freqfilt.c000066400000000000000000000106251454007373500205360ustar00rootroot00000000000000/* base class for all Fourier stuff * * properties: * - single output image */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pfreqfilt.h" /** * SECTION: freqfilt * @short_description: fourier transforms and frequency-domin filters * @stability: Stable * @see_also: image * @include: vips/vips.h * * To and from Fourier space, filter in Fourier space, convert Fourier-space * images to a displayable form. */ G_DEFINE_ABSTRACT_TYPE(VipsFreqfilt, vips_freqfilt, VIPS_TYPE_OPERATION); static int vips_freqfilt_build(VipsObject *object) { VipsFreqfilt *freqfilt = VIPS_FREQFILT(object); #ifdef DEBUG printf("vips_freqfilt_build: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ g_object_set(freqfilt, "out", vips_image_new(), NULL); if (VIPS_OBJECT_CLASS(vips_freqfilt_parent_class)->build(object)) return -1; return 0; } static void vips_freqfilt_class_init(VipsFreqfiltClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "freqfilt"; vobject_class->description = _("frequency-domain filter operations"); vobject_class->build = vips_freqfilt_build; VIPS_ARG_IMAGE(class, "in", -1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsFreqfilt, in)); VIPS_ARG_IMAGE(class, "out", 1, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsFreqfilt, out)); } static void vips_freqfilt_init(VipsFreqfilt *freqfilt) { } /* Transform an n-band image with a 1-band processing function. * * Memory strategy: we need memory buffers for the input and the output of * fftw. In some modes fftw generates only half the output and we construct * the rest. * * input pipeline -> * bandsplit -> * full memory image, freed when im_*fft*() exits -> * fftw -> * half memory image, freed when im_*fft*() exits -> * full memory image, freed when @out is freed -> * partial bandjoin -> * output pipeline * * vips__fftproc() needs to just call VipsFftProcessFn directly for 1 band images, * so we can't cache the output in this fn. */ int vips__fftproc(VipsObject *context, VipsImage *in, VipsImage **out, VipsFftProcessFn fn) { VipsImage **bands = (VipsImage **) vips_object_local_array(context, in->Bands); VipsImage **fft = (VipsImage **) vips_object_local_array(context, in->Bands); int b; if (in->Bands == 1) return fn(context, in, out); for (b = 0; b < in->Bands; b++) if (vips_extract_band(in, &bands[b], b, NULL) || fn(context, bands[b], &fft[b])) return -1; if (vips_bandjoin(fft, out, in->Bands, NULL)) return -1; return 0; } /* Called from iofuncs to init all operations in this dir. Use a plugin system * instead? */ void vips_freqfilt_operation_init(void) { #ifdef HAVE_FFTW extern GType vips_fwfft_get_type(void); extern GType vips_invfft_get_type(void); #endif /*HAVE_FFTW*/ extern GType vips_freqmult_get_type(void); extern GType vips_spectrum_get_type(void); extern GType vips_phasecor_get_type(void); #ifdef HAVE_FFTW vips_fwfft_get_type(); vips_invfft_get_type(); #endif /*HAVE_FFTW*/ vips_freqmult_get_type(); vips_spectrum_get_type(); vips_phasecor_get_type(); } libvips-8.15.1/libvips/freqfilt/freqmult.c000066400000000000000000000102011454007373500205470ustar00rootroot00000000000000/* frequency-domain filter an image * * Author: Nicos Dessipris * Written on: 02/05/1990 * Modified on : 08/03/1991 * 16/6/93 J.Cupitt * - im_multiply() called, rather than im_cmultim() * 27/10/93 JC * - im_clip2*() called, rather than im_any2*() * 20/9/95 JC * - rewritten * 10/9/98 JC * - frees memory more quickly * 4/3/03 JC * - use im_invfftr() to get real back for speedup * 3/1/14 * - redone as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pfreqfilt.h" typedef struct _VipsFreqmult { VipsFreqfilt parent_instance; VipsImage *mask; } VipsFreqmult; typedef VipsFreqfiltClass VipsFreqmultClass; G_DEFINE_TYPE(VipsFreqmult, vips_freqmult, VIPS_TYPE_FREQFILT); static int vips_freqmult_build(VipsObject *object) { VipsFreqfilt *freqfilt = VIPS_FREQFILT(object); VipsFreqmult *freqmult = (VipsFreqmult *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 5); VipsImage *in; if (VIPS_OBJECT_CLASS(vips_freqmult_parent_class)->build(object)) return -1; in = freqfilt->in; if (vips_band_format_iscomplex(in->BandFmt)) { if (vips_multiply(in, freqmult->mask, &t[0], NULL) || vips_invfft(t[0], &t[1], "real", TRUE, NULL)) return -1; in = t[1]; } else { /* Optimisation: output of vips_invfft() is double, we * will usually cast to char, so rather than keeping a * large double buffer and partial to char from that, * cast to a memory buffer and copy to out from that. * * FIXME does this actually work now we're a class? test * perhaps we need a temporary object */ t[4] = vips_image_new_memory(); if (vips_fwfft(in, &t[0], NULL) || vips_multiply(t[0], freqmult->mask, &t[1], NULL) || vips_invfft(t[1], &t[2], "real", TRUE, NULL) || vips_cast(t[2], &t[3], in->BandFmt, NULL) || vips_image_write(t[3], t[4])) return -1; in = t[4]; } if (vips_image_write(in, freqfilt->out)) return -1; return 0; } static void vips_freqmult_class_init(VipsFreqmultClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "freqmult"; vobject_class->description = _("frequency-domain filtering"); vobject_class->build = vips_freqmult_build; VIPS_ARG_IMAGE(class, "mask", 0, _("Mask"), _("Input mask image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsFreqmult, mask)); } static void vips_freqmult_init(VipsFreqmult *freqmult) { } /** * vips_freqmult: (method) * @in: input image * @mask: mask image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Multiply @in by @mask in Fourier space. * * @in is transformed to Fourier space, multiplied with @mask, then * transformed back to real space. If @in is already a complex image, just * multiply then inverse transform. * * See also: vips_invfft(), vips_mask_ideal(). * * Returns: 0 on success, -1 on error. */ int vips_freqmult(VipsImage *in, VipsImage *mask, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("freqmult", ap, in, mask, out); va_end(ap); return result; } libvips-8.15.1/libvips/freqfilt/fwfft.c000066400000000000000000000224311454007373500200340ustar00rootroot00000000000000/* forward FFT * * Author: Nicos Dessipris * Written on: 12/04/1990 * Modified on : 09/05/1990 to cope with float input * Modified on : 08/03/1991 history removed * Modified on : 03/04/1991 to cope with any input * * 28/6/95 JC * - rewritten to use im_clip2f() rather than own code * - memory leaks fixed * 10/9/98 JC * - frees memory more quickly * 2/4/02 JC * - fftw code added * 13/7/02 JC * - output Type set to IM_TYPE_FOURIER to help nip * 27/2/03 JC * - exploits real_to_complex() path in libfftw for real input (thanks * Matt) for a 2x speed-up * 17/11/03 JC * - fix a segv for wider than high images in the real_to_complex() path * (thanks Andrey) * - fixes to real_to_complex() path to give the correct result for * non-square images, including odd widths and heights * 3/11/04 * - added fftw3 support * 7/2/10 * - cleanups * - gtkdoc * 25/3/10 * - have a "t" image linked to out to keep the image alive for longer * 27/1/12 * - better setting of interpretation * - remove own fft fallback code * - remove fftw2 path * - reduce memuse * 3/1/14 * - redone as a class * 15/12/23 [akash-akya] * - add locks */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pfreqfilt.h" #ifdef HAVE_FFTW #include typedef struct _VipsFwfft { VipsFreqfilt parent_instance; } VipsFwfft; typedef VipsFreqfiltClass VipsFwfftClass; G_DEFINE_TYPE(VipsFwfft, vips_fwfft, VIPS_TYPE_FREQFILT); /* Everything in fftw3 except execute has to be behind a mutex. */ GMutex *vips__fft_lock = NULL; static void * vips__fft_thread_init(void *data) { vips__fft_lock = vips_g_mutex_new(); return NULL; } void vips__fft_init(void) { static GOnce once = G_ONCE_INIT; VIPS_ONCE(&once, vips__fft_thread_init, NULL); } /* Real to complex forward transform. */ static int rfwfft1(VipsObject *object, VipsImage *in, VipsImage **out) { VipsFwfft *fwfft = (VipsFwfft *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 4); VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(fwfft); const guint64 size = VIPS_IMAGE_N_PELS(in); const int half_width = in->Xsize / 2 + 1; double *half_complex; double *planner_scratch; fftw_plan plan; double *buf, *q, *p; int x, y; if (vips_check_mono(class->nickname, in) || vips_check_uncoded(class->nickname, in)) return -1; /* Convert input to a real double membuffer. */ t[1] = vips_image_new_memory(); if (vips_cast_double(in, &t[0], NULL) || vips_image_write(t[0], t[1])) return -1; /* Make the plan for the transform. Yes, they really do use nx for * height and ny for width. Use a separate scratch buffer for the * planner, we can't overwrite real->data */ if (!(planner_scratch = VIPS_ARRAY(fwfft, VIPS_IMAGE_N_PELS(in), double))) return -1; if (!(half_complex = VIPS_ARRAY(fwfft, in->Ysize * half_width * 2, double))) return -1; g_mutex_lock(vips__fft_lock); if (!(plan = fftw_plan_dft_r2c_2d(in->Ysize, in->Xsize, planner_scratch, (fftw_complex *) half_complex, 0))) { g_mutex_unlock(vips__fft_lock); vips_error(class->nickname, "%s", _("unable to create transform plan")); return -1; } g_mutex_unlock(vips__fft_lock); fftw_execute_dft_r2c(plan, (double *) t[1]->data, (fftw_complex *) half_complex); g_mutex_lock(vips__fft_lock); fftw_destroy_plan(plan); g_mutex_unlock(vips__fft_lock); /* Write to out as another memory buffer. */ *out = vips_image_new_memory(); if (vips_image_pipelinev(*out, VIPS_DEMAND_STYLE_ANY, in, NULL)) return -1; (*out)->BandFmt = VIPS_FORMAT_DPCOMPLEX; (*out)->Type = VIPS_INTERPRETATION_FOURIER; if (!(buf = VIPS_ARRAY(fwfft, VIPS_IMAGE_N_PELS(*out), double))) return -1; /* Copy and normalise. The right half is the up/down and * left/right flip of the left, but conjugated. Do the first * row separately, then mirror around the centre row. */ p = half_complex; q = buf; for (x = 0; x < half_width; x++) { q[0] = p[0] / size; q[1] = p[1] / size; p += 2; q += 2; } p = half_complex + ((in->Xsize + 1) / 2 - 1) * 2; for (x = half_width; x < (*out)->Xsize; x++) { q[0] = p[0] / size; q[1] = -1.0 * p[1] / size; p -= 2; q += 2; } if (vips_image_write_line(*out, 0, (VipsPel *) buf)) return -1; for (y = 1; y < (*out)->Ysize; y++) { p = half_complex + y * half_width * 2; q = buf; for (x = 0; x < half_width; x++) { q[0] = p[0] / size; q[1] = p[1] / size; p += 2; q += 2; } /* Good grief. */ p = half_complex + 2 * /* clang-format off */ (((*out)->Ysize - y + 1) * half_width - 2 + (in->Xsize & 1)); /* clang-format on */ for (x = half_width; x < (*out)->Xsize; x++) { q[0] = p[0] / size; q[1] = -1.0 * p[1] / size; p -= 2; q += 2; } if (vips_image_write_line(*out, y, (VipsPel *) buf)) return -1; } return 0; } /* Complex to complex forward transform. */ static int cfwfft1(VipsObject *object, VipsImage *in, VipsImage **out) { VipsFwfft *fwfft = (VipsFwfft *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 4); VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(fwfft); fftw_plan plan; double *planner_scratch; double *buf, *q, *p; int x, y; if (vips_check_mono(class->nickname, in) || vips_check_uncoded(class->nickname, in)) return -1; /* Convert input to a complex double membuffer. */ t[1] = vips_image_new_memory(); if (vips_cast_dpcomplex(in, &t[0], NULL) || vips_image_write(t[0], t[1])) return -1; /* We have to have a separate buffer for the planner to work on. */ if (!(planner_scratch = VIPS_ARRAY(fwfft, VIPS_IMAGE_N_PELS(in) * 2, double))) return -1; /* Make the plan for the transform. */ g_mutex_lock(vips__fft_lock); if (!(plan = fftw_plan_dft_2d(in->Ysize, in->Xsize, (fftw_complex *) planner_scratch, (fftw_complex *) planner_scratch, FFTW_FORWARD, 0))) { g_mutex_unlock(vips__fft_lock); vips_error(class->nickname, "%s", _("unable to create transform plan")); return -1; } g_mutex_unlock(vips__fft_lock); fftw_execute_dft(plan, (fftw_complex *) t[1]->data, (fftw_complex *) t[1]->data); g_mutex_lock(vips__fft_lock); fftw_destroy_plan(plan); g_mutex_unlock(vips__fft_lock); /* Write to out as another memory buffer. */ *out = vips_image_new_memory(); if (vips_image_pipelinev(*out, VIPS_DEMAND_STYLE_ANY, in, NULL)) return -1; (*out)->BandFmt = VIPS_FORMAT_DPCOMPLEX; (*out)->Type = VIPS_INTERPRETATION_FOURIER; if (!(buf = VIPS_ARRAY(fwfft, VIPS_IMAGE_N_PELS(*out), double))) return -1; /* Copy to out, normalise. */ p = (double *) t[1]->data; for (y = 0; y < (*out)->Ysize; y++) { guint64 size = VIPS_IMAGE_N_PELS(*out); q = buf; for (x = 0; x < (*out)->Xsize; x++) { q[0] = p[0] / size; q[1] = p[1] / size; p += 2; q += 2; } if (vips_image_write_line(*out, y, (VipsPel *) buf)) return -1; } return 0; } static int vips_fwfft_build(VipsObject *object) { VipsFreqfilt *freqfilt = VIPS_FREQFILT(object); VipsFwfft *fwfft = (VipsFwfft *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 4); VipsImage *in; vips__fft_init(); if (VIPS_OBJECT_CLASS(vips_fwfft_parent_class)->build(object)) return -1; in = freqfilt->in; if (vips_image_decode(in, &t[0])) return -1; in = t[0]; if (vips_band_format_iscomplex(in->BandFmt)) { if (vips__fftproc(VIPS_OBJECT(fwfft), in, &t[1], cfwfft1)) return -1; } else { if (vips__fftproc(VIPS_OBJECT(fwfft), in, &t[1], rfwfft1)) return -1; } if (vips_image_write(t[1], freqfilt->out)) return -1; return 0; } static void vips_fwfft_class_init(VipsFwfftClass *class) { VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); vobject_class->nickname = "fwfft"; vobject_class->description = _("forward FFT"); vobject_class->build = vips_fwfft_build; } static void vips_fwfft_init(VipsFwfft *fwfft) { } #endif /*HAVE_FFTW*/ /** * vips_fwfft: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Transform an image to Fourier space. * * VIPS uses the fftw Fourier Transform library. If this library was not * available when VIPS was configured, these functions will fail. * * See also: vips_invfft(). * * Returns: 0 on success, -1 on error. */ int vips_fwfft(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("fwfft", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/freqfilt/invfft.c000066400000000000000000000163711454007373500202220ustar00rootroot00000000000000/* Inverse FFT * * Author: Nicos Dessipris * Written on: 12/04/1990 * Modified on : * 28/6/95 JC * - rewritten, based on new im_invfft() code * 10/9/98 JC * - frees memory more quickly * 2/4/02 JC * - fftw code added * 13/7/02 JC * - Type reset * 27/2/03 JC * - tiny speed-up ... save 1 copy on write * 22/1/04 JC * - oops, fix for segv on wider than high fftw transforms * 3/11/04 * - added fftw3 support * 7/2/10 * - gtkdoc * 27/1/12 * - better setting of interpretation * - remove own fft fallback code * - remove fftw2 path * - reduce memuse * 3/1/14 * - redone as a class * 15/12/23 [akash-akya] * - add locks */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pfreqfilt.h" #ifdef HAVE_FFTW #include typedef struct _VipsInvfft { VipsFreqfilt parent_instance; gboolean real; } VipsInvfft; typedef VipsFreqfiltClass VipsInvfftClass; G_DEFINE_TYPE(VipsInvfft, vips_invfft, VIPS_TYPE_FREQFILT); /* Complex to complex inverse transform. */ static int cinvfft1(VipsObject *object, VipsImage *in, VipsImage **out) { VipsImage **t = (VipsImage **) vips_object_local_array(object, 4); VipsInvfft *invfft = (VipsInvfft *) object; VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(invfft); fftw_plan plan; double *planner_scratch; if (vips_check_mono(class->nickname, in) || vips_check_uncoded(class->nickname, in)) return -1; /* Convert input to a complex double membuffer. */ *out = vips_image_new_memory(); if (vips_cast_dpcomplex(in, &t[0], NULL) || vips_image_write(t[0], *out)) return -1; /* Make the plan for the transform. Yes, they really do use nx for * height and ny for width. */ if (!(planner_scratch = VIPS_ARRAY(invfft, VIPS_IMAGE_N_PELS(in) * 2, double))) return -1; g_mutex_lock(vips__fft_lock); if (!(plan = fftw_plan_dft_2d(in->Ysize, in->Xsize, (fftw_complex *) planner_scratch, (fftw_complex *) planner_scratch, FFTW_BACKWARD, 0))) { g_mutex_unlock(vips__fft_lock); vips_error(class->nickname, "%s", _("unable to create transform plan")); return -1; } g_mutex_unlock(vips__fft_lock); fftw_execute_dft(plan, (fftw_complex *) (*out)->data, (fftw_complex *) (*out)->data); g_mutex_lock(vips__fft_lock); fftw_destroy_plan(plan); g_mutex_unlock(vips__fft_lock); (*out)->Type = VIPS_INTERPRETATION_B_W; return 0; } /* Complex to real inverse transform. */ static int rinvfft1(VipsObject *object, VipsImage *in, VipsImage **out) { VipsImage **t = (VipsImage **) vips_object_local_array(object, 4); VipsInvfft *invfft = (VipsInvfft *) object; VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(invfft); const int half_width = in->Xsize / 2 + 1; double *half_complex; double *planner_scratch; fftw_plan plan; int x, y; double *q, *p; /* Convert input to a complex double membuffer. */ t[1] = vips_image_new_memory(); if (vips_cast_dpcomplex(in, &t[0], NULL) || vips_image_write(t[0], t[1])) return -1; /* Build half-complex image. */ if (!(half_complex = VIPS_ARRAY(invfft, t[1]->Ysize * half_width * 2, double))) return -1; q = half_complex; for (y = 0; y < t[1]->Ysize; y++) { p = ((double *) t[1]->data) + (guint64) y * t[1]->Xsize * 2; for (x = 0; x < half_width; x++) { q[0] = p[0]; q[1] = p[1]; p += 2; q += 2; } } /* Make mem buffer real image for output. */ *out = vips_image_new_memory(); if (vips_image_pipelinev(*out, VIPS_DEMAND_STYLE_ANY, t[1], NULL)) return -1; (*out)->BandFmt = VIPS_FORMAT_DOUBLE; (*out)->Type = VIPS_INTERPRETATION_B_W; if (vips_image_write_prepare(*out)) return -1; /* Make the plan for the transform. Yes, they really do use nx for * height and ny for width. */ if (!(planner_scratch = VIPS_ARRAY(invfft, t[1]->Ysize * half_width * 2, double))) return -1; g_mutex_lock(vips__fft_lock); if (!(plan = fftw_plan_dft_c2r_2d(t[1]->Ysize, t[1]->Xsize, (fftw_complex *) planner_scratch, (double *) (*out)->data, 0))) { g_mutex_unlock(vips__fft_lock); vips_error(class->nickname, "%s", _("unable to create transform plan")); return -1; } g_mutex_unlock(vips__fft_lock); fftw_execute_dft_c2r(plan, (fftw_complex *) half_complex, (double *) (*out)->data); g_mutex_lock(vips__fft_lock); fftw_destroy_plan(plan); g_mutex_unlock(vips__fft_lock); return 0; } static int vips_invfft_build(VipsObject *object) { VipsFreqfilt *freqfilt = VIPS_FREQFILT(object); VipsInvfft *invfft = (VipsInvfft *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 4); VipsImage *in; vips__fft_init(); if (VIPS_OBJECT_CLASS(vips_invfft_parent_class)->build(object)) return -1; in = freqfilt->in; if (vips_image_decode(in, &t[0])) return -1; in = t[0]; if (invfft->real) { if (vips__fftproc(VIPS_OBJECT(invfft), in, &t[1], rinvfft1)) return -1; } else { if (vips__fftproc(VIPS_OBJECT(invfft), in, &t[1], cinvfft1)) return -1; } if (vips_image_write(t[1], freqfilt->out)) return -1; return 0; } static void vips_invfft_class_init(VipsInvfftClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "invfft"; vobject_class->description = _("inverse FFT"); vobject_class->build = vips_invfft_build; VIPS_ARG_BOOL(class, "real", 4, _("Real"), _("Output only the real part of the transform"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsInvfft, real), FALSE); } static void vips_invfft_init(VipsInvfft *invfft) { } #endif /*HAVE_FFTW*/ /** * vips_invfft: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @real: only output the real part * * Transform an image from Fourier space to real space. The result is complex. * If you are OK with a real result, set @real, it's quicker. * * VIPS uses the fftw Fourier Transform library. If this library was not * available when VIPS was configured, these functions will fail. * * See also: vips_fwfft(). * * Returns: 0 on success, -1 on error. */ int vips_invfft(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("invfft", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/freqfilt/meson.build000066400000000000000000000006321454007373500207150ustar00rootroot00000000000000freqfilt_sources = files( 'freqfilt.c', 'fwfft.c', 'invfft.c', 'freqmult.c', 'spectrum.c', 'phasecor.c', ) freqfilt_headers = files( 'pfreqfilt.h', ) libvips_sources += freqfilt_sources freqfilt_lib = static_library('freqfilt', freqfilt_sources, freqfilt_headers, dependencies: libvips_deps, gnu_symbol_visibility: 'hidden', ) libvips_components += freqfilt_lib libvips-8.15.1/libvips/freqfilt/pfreqfilt.h000066400000000000000000000042221454007373500207170ustar00rootroot00000000000000/* base class for all freqfilt operations */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_PFREQFILT_H #define VIPS_PFREQFILT_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ /* All fftw3 calls except execute() need to be locked. */ extern GMutex *vips__fft_lock; void vips__fft_init(void); #define VIPS_TYPE_FREQFILT (vips_freqfilt_get_type()) #define VIPS_FREQFILT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_FREQFILT, VipsFreqfilt)) #define VIPS_FREQFILT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_FREQFILT, VipsFreqfiltClass)) #define VIPS_IS_FREQFILT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_FREQFILT)) #define VIPS_IS_FREQFILT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_FREQFILT)) #define VIPS_FREQFILT_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_FREQFILT, VipsFreqfiltClass)) typedef struct _VipsFreqfilt { VipsOperation parent_instance; VipsImage *in; VipsImage *out; } VipsFreqfilt; typedef struct _VipsFreqfiltClass { VipsOperationClass parent_class; } VipsFreqfiltClass; GType vips_freqfilt_get_type(void); typedef int (*VipsFftProcessFn)(VipsObject *, VipsImage *, VipsImage **); int vips__fftproc(VipsObject *context, VipsImage *in, VipsImage **out, VipsFftProcessFn fn); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_PFREQFILT_H*/ libvips-8.15.1/libvips/freqfilt/phasecor.c000066400000000000000000000066021454007373500205260ustar00rootroot00000000000000/* Like spcor, but calculates phase correlation in the Fourier domain. * * Copyright: 2008, Nottingham Trent University * * Author: Tom Vajzovic * Written on: 2008-01-16 * 7/2/10 * - cleanups * - gtkdoc * 3/1/14 * - redone as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pfreqfilt.h" typedef struct _VipsPhasecor { VipsFreqfilt parent_instance; VipsImage *in2; } VipsPhasecor; typedef VipsFreqfiltClass VipsPhasecorClass; G_DEFINE_TYPE(VipsPhasecor, vips_phasecor, VIPS_TYPE_FREQFILT); static int vips_phasecor_build(VipsObject *object) { VipsFreqfilt *freqfilt = VIPS_FREQFILT(object); VipsPhasecor *phasecor = (VipsPhasecor *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 5); VipsImage *in1, *in2; if (VIPS_OBJECT_CLASS(vips_phasecor_parent_class)->build(object)) return -1; in1 = freqfilt->in; in2 = phasecor->in2; if (in1->BandFmt != VIPS_FORMAT_COMPLEX) { if (vips_fwfft(in1, &t[0], NULL)) return -1; in1 = t[0]; } if (in2->BandFmt != VIPS_FORMAT_COMPLEX) { if (vips_fwfft(in2, &t[1], NULL)) return -1; in2 = t[1]; } if (vips_cross_phase(in1, in2, &t[2], NULL) || vips_invfft(t[2], &t[3], "real", TRUE, NULL) || vips_image_write(t[3], freqfilt->out)) return -1; return 0; } static void vips_phasecor_class_init(VipsPhasecorClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "phasecor"; vobject_class->description = _("calculate phase correlation"); vobject_class->build = vips_phasecor_build; VIPS_ARG_IMAGE(class, "in2", 0, _("in2"), _("Second input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsPhasecor, in2)); } static void vips_phasecor_init(VipsPhasecor *phasecor) { } /** * vips_phasecor: * @in1: first input image * @in2: second input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Convert the two input images to Fourier space, calculate phase-correlation, * back to real space. * * See also: vips_fwfft(), vips_cross_phase(), * * Returns: 0 on success, -1 on error. */ int vips_phasecor(VipsImage *in1, VipsImage *in2, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("phasecor", ap, in1, in2, out); va_end(ap); return result; } libvips-8.15.1/libvips/freqfilt/spectrum.c000066400000000000000000000060721454007373500205650ustar00rootroot00000000000000/* make a displayable power spectrum for an image * * Author: Nicos Dessipris * Written on: 27/03/1991 * Modified on : * 16/6/93 J.Cupitt * - im_ioflag() changed to im_iocheck() * 23/2/95 JC * - rewritten for partials * 10/9/98 JC * - frees memory more quickly * 2/4/02 JC * - any number of bands * 7/2/10 * - gtkdoc * - cleanups * 3/1/14 * - redone as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pfreqfilt.h" typedef VipsFreqfilt VipsSpectrum; typedef VipsFreqfiltClass VipsSpectrumClass; G_DEFINE_TYPE(VipsSpectrum, vips_spectrum, VIPS_TYPE_FREQFILT); static int vips_spectrum_build(VipsObject *object) { VipsFreqfilt *freqfilt = VIPS_FREQFILT(object); VipsImage **t = (VipsImage **) vips_object_local_array(object, 5); VipsImage *in; if (VIPS_OBJECT_CLASS(vips_spectrum_parent_class)->build(object)) return -1; in = freqfilt->in; if (in->BandFmt != VIPS_FORMAT_COMPLEX) { if (vips_fwfft(in, &t[0], NULL)) return -1; in = t[0]; } if (vips_abs(in, &t[1], NULL) || vips_scale(t[1], &t[2], "log", TRUE, NULL) || vips_wrap(t[2], &t[3], NULL)) return -1; if (vips_image_write(t[3], freqfilt->out)) return -1; return 0; } static void vips_spectrum_class_init(VipsSpectrumClass *class) { VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); vobject_class->nickname = "spectrum"; vobject_class->description = _("make displayable power spectrum"); vobject_class->build = vips_spectrum_build; } static void vips_spectrum_init(VipsSpectrum *spectrum) { } /** * vips_spectrum: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Make a displayable (ie. 8-bit unsigned int) power spectrum. * * If @in is non-complex, it is transformed to Fourier space. Then the * absolute value is passed through vips_scale() in log mode, and vips_wrap(). * * See also: vips_fwfft(), vips_scale(), vips_wrap(). * * Returns: 0 on success, -1 on error. */ int vips_spectrum(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("spectrum", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/histogram/000077500000000000000000000000001454007373500167335ustar00rootroot00000000000000libvips-8.15.1/libvips/histogram/case.c000066400000000000000000000165711454007373500200240ustar00rootroot00000000000000/* use pixel values to pick cases from an array of images * * 28/7/19 * - from maplut.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include typedef struct _VipsCase { VipsOperation parent_instance; VipsImage *index; VipsArrayImage *cases; VipsImage *out; int n; } VipsCase; typedef VipsOperationClass VipsCaseClass; G_DEFINE_TYPE(VipsCase, vips_case, VIPS_TYPE_OPERATION); static int vips_case_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion **ar = (VipsRegion **) seq; VipsCase *cas = (VipsCase *) b; VipsRect *r = &out_region->valid; VipsRegion *index = ar[cas->n]; int x, y, i; VipsPel *restrict ip; VipsPel *restrict q; size_t ils; size_t qls; int hist[256]; VipsPel *restrict p[256]; size_t ls[256]; size_t ps; if (vips_region_prepare(index, r)) return -1; g_assert(index->im->BandFmt == VIPS_FORMAT_UCHAR); g_assert(index->im->Bands == 1); /* Histogram of index region, so we know which of our inputs we will * need to prepare. */ memset(hist, 0, cas->n * sizeof(int)); ip = VIPS_REGION_ADDR(index, r->left, r->top); ils = VIPS_REGION_LSKIP(index); for (y = 0; y < r->height; y++) { for (x = 0; x < r->width; x++) { int v = VIPS_MIN(ip[x], cas->n - 1); hist[v] += 1; } ip += ils; } for (i = 0; i < cas->n; i++) if (hist[i]) { if (vips_region_prepare(ar[i], r)) return -1; p[i] = VIPS_REGION_ADDR(ar[i], r->left, r->top); ls[i] = VIPS_REGION_LSKIP(ar[i]); } ip = VIPS_REGION_ADDR(index, r->left, r->top); q = VIPS_REGION_ADDR(out_region, r->left, r->top); qls = VIPS_REGION_LSKIP(out_region); ps = VIPS_IMAGE_SIZEOF_PEL(out_region->im); for (y = 0; y < r->height; y++) { int k; k = 0; for (x = 0; x < r->width; x++) { int v = VIPS_MIN(ip[x], cas->n - 1); VipsPel *restrict pv = p[v]; int j; for (j = 0; j < ps; j++) { q[k] = pv[k]; k += 1; } } ip += ils; q += qls; for (i = 0; i < cas->n; i++) if (hist[i]) p[i] += ls[i]; } return 0; } static int vips_case_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsCase *cas = (VipsCase *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); VipsImage *index; VipsImage **cases; VipsImage **decode; VipsImage **format; VipsImage **band; VipsImage **size; int i; g_object_set(object, "out", vips_image_new(), NULL); if (VIPS_OBJECT_CLASS(vips_case_parent_class)->build(object)) return -1; index = cas->index; cases = vips_area_get_data(&cas->cases->area, NULL, &cas->n, NULL, NULL); if (cas->n > 256 || cas->n < 1) { vips_error(class->nickname, "%s", _("bad number of cases")); return -1; } if (index->Bands > 1) { vips_error(class->nickname, "%s", _("index image not 1-band")); return -1; } /* Cast @index to u8 to make the index image. */ if (vips_cast(index, &t[0], VIPS_FORMAT_UCHAR, NULL)) return -1; index = t[0]; decode = (VipsImage **) vips_object_local_array(object, cas->n); format = (VipsImage **) vips_object_local_array(object, cas->n); band = (VipsImage **) vips_object_local_array(object, cas->n + 1); size = (VipsImage **) vips_object_local_array(object, cas->n + 1); /* Decode RAD/LABQ etc. */ for (i = 0; i < cas->n; i++) if (vips_image_decode(cases[i], &decode[i])) return -1; cases = decode; /* case images must match in format, size and bands. * * We want everything sized up to the size of the index image, so add * that to the end of the set of images for sizealike. */ band[cas->n] = index; g_object_ref(index); if (vips__formatalike_vec(cases, format, cas->n) || vips__bandalike_vec(class->nickname, format, band, cas->n, 1) || vips__sizealike_vec(band, size, cas->n + 1)) return -1; cases = size; if (vips_image_pipeline_array(cas->out, VIPS_DEMAND_STYLE_THINSTRIP, cases)) return -1; cas->out->BandFmt = cases[0]->BandFmt; cas->out->Bands = cases[0]->Bands; cas->out->Type = cases[0]->Type; if (vips_image_generate(cas->out, vips_start_many, vips_case_gen, vips_stop_many, cases, cas)) return -1; return 0; } static void vips_case_class_init(VipsCaseClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "case"; object_class->description = _("use pixel values to pick cases from an array of images"); object_class->build = vips_case_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "index", 1, _("Index"), _("Index image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsCase, index)); VIPS_ARG_BOXED(class, "cases", 2, _("Cases"), _("Array of case images"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsCase, cases), VIPS_TYPE_ARRAY_IMAGE); VIPS_ARG_IMAGE(class, "out", 3, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsCase, out)); } static void vips_case_init(VipsCase *cas) { } static int vips_casev(VipsImage *index, VipsImage **cases, VipsImage **out, int n, va_list ap) { VipsArrayImage *array; int result; array = vips_array_image_new(cases, n); result = vips_call_split("case", ap, index, array, out); vips_area_unref(VIPS_AREA(array)); return result; } /** * vips_case: (method) * @index: index image * @cases: (array length=n): array of case images * @out: (out): output image * @n: number of case images * @...: %NULL-terminated list of optional named arguments * * Use values in @index to select pixels from @cases. * * @index must have one band. @cases can have up to 256 elements. Values in * @index greater than or equal to @n use the final image in @cases. The * images in @cases must have either one band or the same number of bands. * The output image is the same size as @index. Images in @cases are * expanded to the smallest common format and number of bands. * * Combine this with vips_switch() to make something like a case statement or * a multi-way vips_ifthenelse(). * * See also: vips_maplut(), vips_switch(), vips_ifthenelse(). * * Returns: 0 on success, -1 on error */ int vips_case(VipsImage *index, VipsImage **cases, VipsImage **out, int n, ...) { va_list ap; int result; va_start(ap, n); result = vips_casev(index, cases, out, n, ap); va_end(ap); return result; } libvips-8.15.1/libvips/histogram/hist_cum.c000066400000000000000000000105441454007373500207160ustar00rootroot00000000000000/* histogram cumulativisation * * Author: N. Dessipris * Written on: 02/08/1990 * 24/5/95 JC * - tidied up and ANSIfied * 20/7/95 JC * - smartened up again * - now works for hists >256 elements * 3/3/01 JC * - broken into cum and norm ... helps im_histspec() * - better behaviour for >8 bit hists * 31/10/05 JC * - was broken for vertical histograms, gah * - neater im_histnorm() * 23/7/07 * - eek, off by 1 for more than 1 band hists * 12/5/08 * - histcum works for signed hists now as well * 24/3/10 * - gtkdoc * - small cleanups * 12/8/13 * - redone im_histcum() as a class, vips_hist_cum() */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include "phistogram.h" #include "hist_unary.h" typedef VipsHistUnary VipsHistCum; typedef VipsHistUnaryClass VipsHistCumClass; G_DEFINE_TYPE(VipsHistCum, vips_hist_cum, VIPS_TYPE_HIST_UNARY); #define ACCUMULATE(ITYPE, OTYPE) \ { \ for (b = 0; b < nb; b++) { \ ITYPE *p = (ITYPE *) in[0]; \ OTYPE *q = (OTYPE *) out; \ OTYPE total; \ \ total = 0; \ for (x = b; x < mx; x += nb) { \ total += p[x]; \ q[x] = total; \ } \ } \ } static void vips_hist_cum_process(VipsHistogram *histogram, VipsPel *out, VipsPel **in, int width) { const int bands = vips_image_get_bands(histogram->ready[0]); const int nb = vips_band_format_iscomplex(histogram->ready[0]->BandFmt) ? bands * 2 : bands; int mx = width * nb; int x, b; switch (vips_image_get_format(histogram->ready[0])) { case VIPS_FORMAT_CHAR: ACCUMULATE(signed char, signed int); break; case VIPS_FORMAT_UCHAR: ACCUMULATE(unsigned char, unsigned int); break; case VIPS_FORMAT_SHORT: ACCUMULATE(signed short, signed int); break; case VIPS_FORMAT_USHORT: ACCUMULATE(unsigned short, unsigned int); break; case VIPS_FORMAT_INT: ACCUMULATE(signed int, signed int); break; case VIPS_FORMAT_UINT: ACCUMULATE(unsigned int, unsigned int); break; case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_COMPLEX: ACCUMULATE(float, float); break; case VIPS_FORMAT_DOUBLE: case VIPS_FORMAT_DPCOMPLEX: ACCUMULATE(double, double); break; default: g_assert_not_reached(); } } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define C VIPS_FORMAT_CHAR #define US VIPS_FORMAT_USHORT #define S VIPS_FORMAT_SHORT #define UI VIPS_FORMAT_UINT #define I VIPS_FORMAT_INT #define F VIPS_FORMAT_FLOAT #define X VIPS_FORMAT_COMPLEX #define D VIPS_FORMAT_DOUBLE #define DX VIPS_FORMAT_DPCOMPLEX static const VipsBandFormat vips_hist_cum_format_table[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UI, I, UI, I, UI, I, F, F, D, D }; static void vips_hist_cum_class_init(VipsHistCumClass *class) { VipsObjectClass *object_class = (VipsObjectClass *) class; VipsHistogramClass *hclass = VIPS_HISTOGRAM_CLASS(class); object_class->nickname = "hist_cum"; object_class->description = _("form cumulative histogram"); hclass->format_table = vips_hist_cum_format_table; hclass->process = vips_hist_cum_process; } static void vips_hist_cum_init(VipsHistCum *hist_cum) { } /** * vips_hist_cum: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Form cumulative histogram. * * See also: vips_hist_norm(). * * Returns: 0 on success, -1 on error */ int vips_hist_cum(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("hist_cum", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/histogram/hist_entropy.c000066400000000000000000000072661454007373500216410ustar00rootroot00000000000000/* estimate entropy * * Author: John Cupitt * 11/8/15 * - from hist_ismonotonic.c * 6/3/16 * - vips_log() call was mangled, thanks Lovell */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include typedef struct _VipsHistEntropy { VipsOperation parent_instance; VipsImage *in; double out; } VipsHistEntropy; typedef VipsOperationClass VipsHistEntropyClass; G_DEFINE_TYPE(VipsHistEntropy, vips_hist_entropy, VIPS_TYPE_OPERATION); static int vips_hist_entropy_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsHistEntropy *entropy = (VipsHistEntropy *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 4); double avg; double sum; if (VIPS_OBJECT_CLASS(vips_hist_entropy_parent_class)->build(object)) return -1; if (vips_check_hist(class->nickname, entropy->in)) return -1; /* Compute: * norm_hist = hist / sum(hist) * entropy = -sum(norm_hist * log2(norm_hist)) */ if (vips_avg(entropy->in, &avg, NULL)) return -1; sum = avg * VIPS_IMAGE_N_PELS(entropy->in) * entropy->in->Bands; if (vips_linear1(entropy->in, &t[0], 1.0 / sum, 0, NULL) || vips_log(t[0], &t[1], NULL) || vips_linear1(t[1], &t[2], 1.0 / log(2.0), 0, NULL) || vips_multiply(t[0], t[2], &t[3], NULL) || vips_avg(t[3], &avg, NULL)) return -1; g_object_set(entropy, "out", -avg * VIPS_IMAGE_N_PELS(entropy->in) * entropy->in->Bands, NULL); return 0; } static void vips_hist_entropy_class_init(VipsHistEntropyClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "hist_entropy"; object_class->description = _("estimate image entropy"); object_class->build = vips_hist_entropy_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input histogram image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsHistEntropy, in)); VIPS_ARG_DOUBLE(class, "out", 2, _("Output"), _("Output value"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsHistEntropy, out), -INFINITY, INFINITY, 0.0); } static void vips_hist_entropy_init(VipsHistEntropy *entropy) { } /** * vips_hist_entropy: (method) * @in: input histogram * @out: (out): image entropy * @...: %NULL-terminated list of optional named arguments * * Estimate image entropy from a histogram. Entropy is calculated as: * * |[ * -sum(p * log2(p)) * ]| * * where p is histogram-value / sum-of-histogram-values. * * Returns: 0 on success, -1 on error */ int vips_hist_entropy(VipsImage *in, double *out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("hist_entropy", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/histogram/hist_equal.c000066400000000000000000000077141454007373500212460ustar00rootroot00000000000000/* Histogram-equalise an image. * * Copyright: 1991, N. Dessipris. * * Author: Nicos Dessipris * Written on: 27/03/1991 * Modified on : * 16/6/93 J.Cupitt * - im_ioflag() changed to im_iocheck() * 24/5/95 JC * - ANSIfied and tidied up * 3/3/01 JC * - more cleanup * 23/3/10 * - gtkdoc * 12/8/13 * - redone as a class * 19/6/17 * - make output format always == input format, thanks Simon */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include typedef struct _VipsHistEqual { VipsOperation parent_instance; VipsImage *in; VipsImage *out; /* -1 for all bands, or the band we scan. */ int which; } VipsHistEqual; typedef VipsOperationClass VipsHistEqualClass; G_DEFINE_TYPE(VipsHistEqual, vips_hist_equal, VIPS_TYPE_OPERATION); static int vips_hist_equal_build(VipsObject *object) { VipsHistEqual *equal = (VipsHistEqual *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 5); g_object_set(equal, "out", vips_image_new(), NULL); if (VIPS_OBJECT_CLASS(vips_hist_equal_parent_class)->build(object)) return -1; /* norm can return a uchar output for a ushort input if the range is * small, so make sure we cast back to the input type again. */ if (vips_hist_find(equal->in, &t[0], "band", equal->which, NULL) || vips_hist_cum(t[0], &t[1], NULL) || vips_hist_norm(t[1], &t[2], NULL) || vips_cast(t[2], &t[3], equal->in->BandFmt, NULL) || vips_maplut(equal->in, &t[4], t[3], NULL) || vips_image_write(t[4], equal->out)) return -1; return 0; } static void vips_hist_equal_class_init(VipsHistEqualClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "hist_equal"; object_class->description = _("histogram equalisation"); object_class->build = vips_hist_equal_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsHistEqual, in)); VIPS_ARG_IMAGE(class, "out", 2, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsHistEqual, out)); VIPS_ARG_INT(class, "band", 110, _("Band"), _("Equalise with this band"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsHistEqual, which), -1, 100000, -1); } static void vips_hist_equal_init(VipsHistEqual *equal) { equal->which = -1; } /** * vips_hist_equal: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @band: band to equalise * * Histogram-equalise @in. Equalise using band @bandno, or if @bandno is -1, * equalise bands independently. The output format is always the same as the * input format. * * See also: * * Returns: 0 on success, -1 on error */ int vips_hist_equal(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("hist_equal", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/histogram/hist_ismonotonic.c000066400000000000000000000075731454007373500225030ustar00rootroot00000000000000/* test for monotonicity * * Author: John Cupitt * Written on: 18/7/1995 * 17/9/96 JC * - restrictions on Ps, Pm, Ph relaxed * - restrictions on S, M, H relaxed * 25/7/01 JC * - patched for im_extract_band() change * 11/7/04 * - generalised to im_tone_build_range() ... so you can use it for any * image, not just LabS * 26/3/10 * - cleanups * - gtkdoc * 20/9/13 * - redone as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include typedef struct _VipsHistIsmonotonic { VipsOperation parent_instance; VipsImage *in; gboolean monotonic; } VipsHistIsmonotonic; typedef VipsOperationClass VipsHistIsmonotonicClass; G_DEFINE_TYPE(VipsHistIsmonotonic, vips_hist_ismonotonic, VIPS_TYPE_OPERATION); static int vips_hist_ismonotonic_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsHistIsmonotonic *ismonotonic = (VipsHistIsmonotonic *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 4); double m; if (VIPS_OBJECT_CLASS(vips_hist_ismonotonic_parent_class)->build(object)) return -1; if (vips_check_hist(class->nickname, ismonotonic->in)) return -1; if (ismonotonic->in->Xsize == 1) t[0] = vips_image_new_matrixv(1, 2, -1.0, 1.0); else t[0] = vips_image_new_matrixv(2, 1, -1.0, 1.0); vips_image_set_double(t[0], "offset", 128); /* We want >=128 everywhere, ie. no -ve transitions. */ if (vips_conv(ismonotonic->in, &t[1], t[0], "precision", VIPS_PRECISION_INTEGER, NULL) || vips_moreeq_const1(t[1], &t[2], 128, NULL) || vips_min(t[2], &m, NULL)) return -1; g_object_set(ismonotonic, "monotonic", (int) m == 255, NULL); return 0; } static void vips_hist_ismonotonic_class_init(VipsHistIsmonotonicClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "hist_ismonotonic"; object_class->description = _("test for monotonicity"); object_class->build = vips_hist_ismonotonic_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input histogram image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsHistIsmonotonic, in)); VIPS_ARG_BOOL(class, "monotonic", 2, _("Monotonic"), _("true if in is monotonic"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsHistIsmonotonic, monotonic), FALSE); } static void vips_hist_ismonotonic_init(VipsHistIsmonotonic *ismonotonic) { } /** * vips_hist_ismonotonic: (method) * @in: lookup-table to test * @out: (out): set non-zero if @in is monotonic * @...: %NULL-terminated list of optional named arguments * * Test @in for monotonicity. @out is set non-zero if @in is monotonic. * * Returns: 0 on success, -1 on error */ int vips_hist_ismonotonic(VipsImage *in, gboolean *out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("hist_ismonotonic", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/histogram/hist_local.c000066400000000000000000000241641454007373500212270ustar00rootroot00000000000000/* local histogram equalisation * * Copyright: 1991, N. Dessipris * * Author: N. Dessipris * Written on: 24/10/1991 * Modified on : * 25/1/96 JC * - rewritten, adapting im_spcor() * - correct result, 2x faster, partial, simpler, better arg checking * 8/7/04 * - expand input rather than output with new im_embed() mode * - _raw() output is one pixel larger * - sets Xoffset/Yoffset * 23/6/08 * - check for window too small as well * 25/3/10 * - gtkdoc * - small cleanups * 5/9/13 * - redo as a class * 9/9/13 * - any number of bands * 20/1/17 * - add contrast limit * - sum to <= target, not < target, since cumulative hists include the * current value * - scale result by 255, not 256, to avoid overflow * - off by 1 fix for odd window widths */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include typedef struct _VipsHistLocal { VipsOperation parent_instance; VipsImage *in; VipsImage *out; int width; int height; int max_slope; } VipsHistLocal; typedef VipsOperationClass VipsHistLocalClass; G_DEFINE_TYPE(VipsHistLocal, vips_hist_local, VIPS_TYPE_OPERATION); /* Our sequence value: the region this sequence is using, and local stats. */ typedef struct { VipsRegion *ir; /* Input region */ /* A 256-element hist for every band. */ unsigned int **hist; } VipsHistLocalSequence; static int vips_hist_local_stop(void *vseq, void *a, void *b) { VipsHistLocalSequence *seq = (VipsHistLocalSequence *) vseq; VipsImage *in = (VipsImage *) a; VIPS_UNREF(seq->ir); if (seq->hist && in) { int i; for (i = 0; i < in->Bands; i++) VIPS_FREE(seq->hist[i]); } VIPS_FREE(seq->hist); VIPS_FREE(seq); return 0; } static void * vips_hist_local_start(VipsImage *out, void *a, void *b) { VipsImage *in = (VipsImage *) a; VipsHistLocalSequence *seq; int i; if (!(seq = VIPS_NEW(NULL, VipsHistLocalSequence))) return NULL; seq->ir = NULL; seq->hist = NULL; if (!(seq->ir = vips_region_new(in)) || !(seq->hist = VIPS_ARRAY(NULL, in->Bands, unsigned int *))) { vips_hist_local_stop(seq, NULL, NULL); return NULL; } for (i = 0; i < in->Bands; i++) if (!(seq->hist[i] = VIPS_ARRAY(NULL, 256, unsigned int))) { vips_hist_local_stop(seq, NULL, NULL); return NULL; } return seq; } static int vips_hist_local_generate(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsHistLocalSequence *seq = (VipsHistLocalSequence *) vseq; VipsImage *in = (VipsImage *) a; const VipsHistLocal *local = (VipsHistLocal *) b; VipsRect *r = &out_region->valid; const int bands = in->Bands; const int max_slope = local->max_slope; VipsRect irect; int y; int lsk; int centre; /* Offset to move to centre of window */ /* What part of ir do we need? */ irect.left = r->left; irect.top = r->top; irect.width = r->width + local->width; irect.height = r->height + local->height; if (vips_region_prepare(seq->ir, &irect)) return -1; lsk = VIPS_REGION_LSKIP(seq->ir); centre = lsk * (local->height / 2) + bands * (local->width / 2); for (y = 0; y < r->height; y++) { /* Get input and output pointers for this line. */ VipsPel *restrict p = VIPS_REGION_ADDR(seq->ir, r->left, r->top + y); VipsPel *restrict q = VIPS_REGION_ADDR(out_region, r->left, r->top + y); VipsPel *restrict p1; int x, i, j, b; /* Find histogram for the start of this line. */ for (b = 0; b < bands; b++) memset(seq->hist[b], 0, 256 * sizeof(unsigned int)); p1 = p; for (j = 0; j < local->height; j++) { for (i = 0, x = 0; x < local->width; x++) for (b = 0; b < bands; b++, i++) seq->hist[b][p1[i]] += 1; p1 += lsk; } /* Loop for output pels. */ for (x = 0; x < r->width; x++) { for (b = 0; b < bands; b++) { /* Sum histogram up to current pel. */ unsigned int *restrict hist = seq->hist[b]; const int target = p[centre + b]; int sum; sum = 0; /* For CLAHE we need to limit the height of the * hist to limit the amount we boost the * contrast by. */ if (max_slope > 0) { int sum_over; sum_over = 0; /* Must be <= target, since a cum hist * always includes the current element. */ for (i = 0; i <= target; i++) { if (hist[i] > max_slope) { sum_over += hist[i] - max_slope; sum += max_slope; } else sum += hist[i]; } for (; i < 256; i++) { if (hist[i] > max_slope) sum_over += hist[i] - max_slope; } /* The extra clipped off bit from the * top of the hist is spread over all * bins equally, then summed to target. */ sum += (target + 1) * sum_over / 256; } else { sum = 0; for (i = 0; i <= target; i++) sum += hist[i]; } /* This can't overflow, even in * contrast-limited mode. * * Scale by 255, not 256, or we'll get * overflow. */ q[b] = 255 * sum / (local->width * local->height); /* Adapt histogram --- remove the pels from * the left hand column, add in pels for a * new right-hand column. */ p1 = p + b; for (j = 0; j < local->height; j++) { hist[p1[0]] -= 1; hist[p1[bands * local->width]] += 1; p1 += lsk; } } p += bands; q += bands; } } return 0; } static int vips_hist_local_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsHistLocal *local = (VipsHistLocal *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 3); VipsImage *in; if (VIPS_OBJECT_CLASS(vips_hist_local_parent_class)->build(object)) return -1; in = local->in; if (vips_image_decode(in, &t[0])) return -1; in = t[0]; if (vips_check_format(class->nickname, in, VIPS_FORMAT_UCHAR)) return -1; if (local->width > in->Xsize || local->height > in->Ysize) { vips_error(class->nickname, "%s", _("window too large")); return -1; } /* Expand the input. */ if (vips_embed(in, &t[1], local->width / 2, local->height / 2, in->Xsize + local->width - 1, in->Ysize + local->height - 1, "extend", VIPS_EXTEND_MIRROR, NULL)) return -1; in = t[1]; g_object_set(object, "out", vips_image_new(), NULL); /* Set demand hints. FATSTRIP is good for us, as THINSTRIP will cause * too many recalculations on overlaps. */ if (vips_image_pipelinev(local->out, VIPS_DEMAND_STYLE_FATSTRIP, in, NULL)) return -1; local->out->Xsize -= local->width - 1; local->out->Ysize -= local->height - 1; if (vips_image_generate(local->out, vips_hist_local_start, vips_hist_local_generate, vips_hist_local_stop, in, local)) return -1; local->out->Xoffset = 0; local->out->Yoffset = 0; vips_reorder_margin_hint(local->out, local->width * local->height); return 0; } static void vips_hist_local_class_init(VipsHistLocalClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "hist_local"; object_class->description = _("local histogram equalisation"); object_class->build = vips_hist_local_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsHistLocal, in)); VIPS_ARG_IMAGE(class, "out", 2, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsHistLocal, out)); VIPS_ARG_INT(class, "width", 4, _("Width"), _("Window width in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsHistLocal, width), 1, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "height", 5, _("Height"), _("Window height in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsHistLocal, height), 1, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "max_slope", 6, _("Max slope"), _("Maximum slope (CLAHE)"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsHistLocal, max_slope), 0, 100, 0); } static void vips_hist_local_init(VipsHistLocal *local) { } /** * vips_hist_local: (method) * @in: input image * @out: (out): output image * @width: width of region * @height: height of region * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @max_slope: maximum brightening * * Performs local histogram equalisation on @in using a * window of size @width by @height centered on the input pixel. * * The output image is the same size as the input image. The edge pixels are * created by mirroring the input image outwards. * * If @max_slope is greater than 0, it sets the maximum value for the slope of * the cumulative histogram, that is, the maximum brightening that is * performed. A value of 3 is often used. Local histogram equalization with * contrast limiting is usually called CLAHE. * * See also: vips_hist_equal(). * * Returns: 0 on success, -1 on error */ int vips_hist_local(VipsImage *in, VipsImage **out, int width, int height, ...) { va_list ap; int result; va_start(ap, height); result = vips_call_split("hist_local", ap, in, out, width, height); va_end(ap); return result; } libvips-8.15.1/libvips/histogram/hist_match.c000066400000000000000000000113041454007373500212210ustar00rootroot00000000000000/* Match two normalised, cumulative histograms. * * Copyright: 1991, N. Dessipris. * * Author: Nicos Dessipris * Written on: 19/07/1990 * Modified on: 26/03/1991 * * 1/3/01 JC * - bleurg! rewritten, now does 16 bits as well, bugs removed, faster, * smaller * 24/3/10 * - gtkdoc * - small cleanups * 12/8/13 * - redone im_histspec() as a class, vips_hist_match() * 19/12/13 * - oop, upcast input */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "phistogram.h" /* #define DEBUG */ typedef struct _VipsHistMatch { VipsHistogram parent_instance; VipsImage *in; VipsImage *ref; } VipsHistMatch; typedef VipsHistogramClass VipsHistMatchClass; G_DEFINE_TYPE(VipsHistMatch, vips_hist_match, VIPS_TYPE_HISTOGRAM); static void vips_hist_match_process(VipsHistogram *histogram, VipsPel *out, VipsPel **in, int width) { VipsHistMatch *match = (VipsHistMatch *) histogram; const int bands = match->in->Bands; const int max = width * bands; unsigned int *inbuf = (unsigned int *) in[0]; unsigned int *refbuf = (unsigned int *) in[1]; unsigned int *outbuf = (unsigned int *) out; int i, j; for (j = 0; j < bands; j++) { /* Track up refbuf[] with this. */ int ri = j; int limit = max - bands; for (i = j; i < max; i += bands) { unsigned int inv = inbuf[i]; for (; ri < limit; ri += bands) if (inv <= refbuf[ri]) break; if (ri < limit) { /* Simple rounding. */ double mid = refbuf[ri] + refbuf[ri + bands] / 2.0; if (inv < mid) outbuf[i] = ri / bands; else outbuf[i] = ri / bands + 1; } else outbuf[i] = refbuf[ri]; } } } static int vips_hist_match_build(VipsObject *object) { VipsHistogram *histogram = VIPS_HISTOGRAM(object); VipsHistMatch *match = (VipsHistMatch *) object; histogram->n = 2; histogram->in = (VipsImage **) vips_object_local_array(object, 2); histogram->in[0] = match->in; histogram->in[1] = match->ref; if (histogram->in[0]) g_object_ref(histogram->in[0]); if (histogram->in[1]) g_object_ref(histogram->in[1]); if (VIPS_OBJECT_CLASS(vips_hist_match_parent_class)->build(object)) return -1; return 0; } static void vips_hist_match_class_init(VipsHistMatchClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsHistogramClass *hclass = VIPS_HISTOGRAM_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "hist_match"; vobject_class->description = _("match two histograms"); vobject_class->build = vips_hist_match_build; hclass->input_format = VIPS_FORMAT_UINT; hclass->process = vips_hist_match_process; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input histogram"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsHistMatch, in)); VIPS_ARG_IMAGE(class, "ref", 2, _("Reference"), _("Reference histogram"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsHistMatch, ref)); } static void vips_hist_match_init(VipsHistMatch *match) { } /** * vips_hist_match: (method) * @in: input histogram * @ref: reference histogram * @out: (out): output histogram * @...: %NULL-terminated list of optional named arguments * * Adjust @in to match @ref. If @in and @ref are normalised * cumulative histograms, @out will be a LUT that adjusts the PDF of the image * from which @in was made to match the PDF of @ref's image. * * See also: vips_maplut(), vips_hist_find(), vips_hist_norm(), * vips_hist_cum(). * * Returns: 0 on success, -1 on error */ int vips_hist_match(VipsImage *in, VipsImage *ref, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("hist_match", ap, in, ref, out); va_end(ap); return result; } libvips-8.15.1/libvips/histogram/hist_norm.c000066400000000000000000000103701454007373500211020ustar00rootroot00000000000000/* histogram normalisation * * Author: N. Dessipris * Written on: 02/08/1990 * 24/5/95 JC * - tidied up and ANSIfied * 20/7/95 JC * - smartened up again * - now works for hists >256 elements * 3/3/01 JC * - broken into norm and norm ... helps im_histspec() * - better behaviour for >8 bit hists * 31/10/05 JC * - was broken for vertical histograms, gah * - neater im_histnorm() * 23/7/07 * - eek, off by 1 for more than 1 band hists * 12/5/08 * - histnorm works for signed hists now as well * 24/3/10 * - gtkdoc * - small cleanups * 12/8/13 * - redone im_histnorm() as a class, vips_hist_norm() */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include typedef struct _VipsHistNorm { VipsOperation parent_instance; VipsImage *in; VipsImage *out; } VipsHistNorm; typedef VipsOperationClass VipsHistNormClass; G_DEFINE_TYPE(VipsHistNorm, vips_hist_norm, VIPS_TYPE_OPERATION); static int vips_hist_norm_build(VipsObject *object) { VipsHistNorm *norm = (VipsHistNorm *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 3); guint64 new_max; int bands; double *a, *b; int y; VipsBandFormat fmt; g_object_set(object, "out", vips_image_new(), NULL); if (VIPS_OBJECT_CLASS(vips_hist_norm_parent_class)->build(object)) return -1; /* Need max for each channel. */ if (vips_stats(norm->in, &t[0], NULL)) return -1; /* Scale each channel by px / channel max */ new_max = VIPS_IMAGE_N_PELS(norm->in) - 1; bands = norm->in->Bands; if (!(a = VIPS_ARRAY(object, bands, double)) || !(b = VIPS_ARRAY(object, bands, double))) return -1; for (y = 0; y < bands; y++) { a[y] = new_max / *VIPS_MATRIX(t[0], 1, y + 1); b[y] = 0; } if (vips_linear(norm->in, &t[1], a, b, bands, NULL)) return -1; /* Make output format as small as we can. */ if (new_max <= 255) fmt = VIPS_FORMAT_UCHAR; else if (new_max <= 65535) fmt = VIPS_FORMAT_USHORT; else fmt = VIPS_FORMAT_UINT; if (vips_cast(t[1], &t[2], fmt, NULL) || vips_image_write(t[2], norm->out)) return -1; return 0; } static void vips_hist_norm_class_init(VipsHistNormClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "hist_norm"; object_class->description = _("normalise histogram"); object_class->build = vips_hist_norm_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsHistNorm, in)); VIPS_ARG_IMAGE(class, "out", 2, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsHistNorm, out)); } static void vips_hist_norm_init(VipsHistNorm *hist_norm) { } /** * vips_hist_norm: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Normalise histogram. The maximum of each band becomes equal to the maximum * index, so for example the max for a uchar image becomes 255. * Normalise each band separately. * * See also: vips_hist_cum(). * * Returns: 0 on success, -1 on error */ int vips_hist_norm(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("hist_norm", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/histogram/hist_plot.c000066400000000000000000000200301454007373500210770ustar00rootroot00000000000000/* draw a histogram * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris. * Written on: 09/07/1990 * Modified on : 12/03/1991 * 20/6/95 JC * - rules rationalised * - im_lineprof removed * - rewritten * 13/8/99 JC * - rewritten again for partial, rules redone * 19/9/99 JC * - oooops, broken for >1 band * 26/9/99 JC * - oooops, graph float was wrong * 17/11/99 JC * - oops, failed for all 0's histogram * 14/12/05 * - redone plot function in C, also use incheck() to cache calcs * - much, much faster! * 12/5/09 * - fix signed/unsigned warning * 24/3/10 * - gtkdoc * - small cleanups * - oop, would fail for signed int histograms * 19/8/13 * - wrap as a class, left a rewrite for now */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "phistogram.h" typedef struct _VipsHistPlot { VipsOperation parent_instance; VipsImage *in; VipsImage *out; } VipsHistPlot; typedef VipsOperationClass VipsHistPlotClass; G_DEFINE_TYPE(VipsHistPlot, vips_hist_plot, VIPS_TYPE_OPERATION); #define VERT(TYPE) \ { \ TYPE *p1 = (TYPE *) p; \ \ for (x = le; x < ri; x++) { \ for (z = 0; z < nb; z++) \ q[z] = p1[z] < ((TYPE) x) ? 0 : 255; \ \ q += nb; \ } \ } /* Generate function. */ static int vips_hist_plot_vert_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsImage *in = (VipsImage *) a; VipsRect *r = &out_region->valid; int le = r->left; int to = r->top; int ri = VIPS_RECT_RIGHT(r); int bo = VIPS_RECT_BOTTOM(r); int nb = in->Bands; int x, y, z; for (y = to; y < bo; y++) { VipsPel *q = VIPS_REGION_ADDR(out_region, le, y); VipsPel *p = VIPS_IMAGE_ADDR(in, 0, y); switch (in->BandFmt) { case VIPS_FORMAT_UCHAR: VERT(unsigned char); break; case VIPS_FORMAT_CHAR: VERT(signed char); break; case VIPS_FORMAT_USHORT: VERT(unsigned short); break; case VIPS_FORMAT_SHORT: VERT(signed short); break; case VIPS_FORMAT_UINT: VERT(unsigned int); break; case VIPS_FORMAT_INT: VERT(signed int); break; case VIPS_FORMAT_FLOAT: VERT(float); break; case VIPS_FORMAT_DOUBLE: VERT(double); break; default: g_assert_not_reached(); } } return 0; } #define HORZ(TYPE) \ { \ TYPE *p1 = (TYPE *) p; \ \ for (y = to; y < bo; y++) { \ for (z = 0; z < nb; z++) \ q[z] = p1[z] < ((TYPE) (ht - y)) ? 0 : 255; \ \ q += lsk; \ } \ } /* Generate function. */ static int vips_hist_plot_horz_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsImage *in = (VipsImage *) a; VipsRect *r = &out_region->valid; int le = r->left; int to = r->top; int ri = VIPS_RECT_RIGHT(r); int bo = VIPS_RECT_BOTTOM(r); int nb = in->Bands; int lsk = VIPS_REGION_LSKIP(out_region); int ht = out_region->im->Ysize; int x, y, z; for (x = le; x < ri; x++) { VipsPel *q = VIPS_REGION_ADDR(out_region, x, to); VipsPel *p = VIPS_IMAGE_ADDR(in, x, 0); switch (in->BandFmt) { case VIPS_FORMAT_UCHAR: HORZ(unsigned char); break; case VIPS_FORMAT_CHAR: HORZ(signed char); break; case VIPS_FORMAT_USHORT: HORZ(unsigned short); break; case VIPS_FORMAT_SHORT: HORZ(signed short); break; case VIPS_FORMAT_UINT: HORZ(unsigned int); break; case VIPS_FORMAT_INT: HORZ(signed int); break; case VIPS_FORMAT_FLOAT: HORZ(float); break; case VIPS_FORMAT_DOUBLE: HORZ(double); break; default: g_assert_not_reached(); } } return 0; } static int vips_hist_plot_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsHistPlot *plot = (VipsHistPlot *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); VipsImage *in; double min, max; int width, height, tsize; VipsGenerateFn generate_fn; g_object_set(plot, "out", vips_image_new(), NULL); if (VIPS_OBJECT_CLASS(vips_hist_plot_parent_class)->build(object)) return -1; in = plot->in; if (vips_check_uncoded(class->nickname, in) || vips_check_noncomplex(class->nickname, in) || vips_check_hist(class->nickname, in)) return -1; if (!vips_band_format_isuint(in->BandFmt) && vips_band_format_isint(in->BandFmt)) { /* A signed int type. Move min up to 0. */ double min; if (vips_min(in, &min, NULL) || vips_linear1(in, &t[0], 1.0, -min, NULL)) return -1; in = t[0]; } else if (vips_band_format_isfloat(in->BandFmt)) { /* Float image: scale min--max to 0--any. Output square * graph. */ int any = in->Xsize * in->Ysize; if (vips_stats(in, &t[0], NULL)) return -1; min = *VIPS_MATRIX(t[0], 0, 0); max = *VIPS_MATRIX(t[0], 1, 0); if (vips_linear1(in, &t[1], any / (max - min), -min * any / (max - min), NULL)) return -1; in = t[1]; } if (vips_image_wio_input(in)) return -1; /* Find range we will plot. */ if (vips_max(in, &max, NULL)) return -1; g_assert(max >= 0); if (in->BandFmt == VIPS_FORMAT_UCHAR) tsize = 256; else tsize = VIPS_CEIL(max); /* Make sure we don't make a zero height image. */ if (tsize == 0) tsize = 1; if (in->Xsize == 1) { /* Vertical graph. */ width = tsize; height = in->Ysize; generate_fn = vips_hist_plot_vert_gen; } else { /* Horizontal graph. */ width = in->Xsize; height = tsize; generate_fn = vips_hist_plot_horz_gen; } /* Set image. */ vips_image_init_fields(plot->out, width, height, in->Bands, VIPS_FORMAT_UCHAR, VIPS_CODING_NONE, VIPS_INTERPRETATION_HISTOGRAM, 1.0, 1.0); if (vips_image_pipelinev(plot->out, VIPS_DEMAND_STYLE_ANY, NULL) || vips_image_generate(plot->out, NULL, generate_fn, NULL, in, NULL)) return -1; return 0; } static void vips_hist_plot_class_init(VipsHistPlotClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "hist_plot"; object_class->description = _("plot histogram"); object_class->build = vips_hist_plot_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsHistPlot, in)); VIPS_ARG_IMAGE(class, "out", 2, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsHistPlot, out)); } static void vips_hist_plot_init(VipsHistPlot *hist_plot) { } /** * vips_hist_plot: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Plot a 1 by any or any by 1 image file as a max by any or * any by max image using these rules: * * unsigned char max is always 256 * * other unsigned integer types output 0 - maximum * value of @in. * * signed int types min moved to 0, max moved to max + min. * * float types min moved to 0, max moved to any * (square output) * * Returns: 0 on success, -1 on error */ int vips_hist_plot(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("hist_plot", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/histogram/hist_unary.c000066400000000000000000000045351454007373500212730ustar00rootroot00000000000000/* a hist operation implemented as a unary processor * * properties: * - single hist to single hist */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "phistogram.h" #include "hist_unary.h" G_DEFINE_ABSTRACT_TYPE(VipsHistUnary, vips_hist_unary, VIPS_TYPE_HISTOGRAM); static int vips_hist_unary_build(VipsObject *object) { VipsHistogram *histogram = VIPS_HISTOGRAM(object); VipsHistUnary *unary = VIPS_HIST_UNARY(object); histogram->n = 1; histogram->in = (VipsImage **) vips_object_local_array(object, 1); histogram->in[0] = unary->in; if (histogram->in[0]) g_object_ref(histogram->in[0]); if (VIPS_OBJECT_CLASS(vips_hist_unary_parent_class)->build(object)) return -1; return 0; } static void vips_hist_unary_class_init(VipsHistUnaryClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "hist_unary"; vobject_class->description = _("hist_unary operations"); vobject_class->build = vips_hist_unary_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsHistUnary, in)); } static void vips_hist_unary_init(VipsHistUnary *hist_unary) { } libvips-8.15.1/libvips/histogram/hist_unary.h000066400000000000000000000036111454007373500212720ustar00rootroot00000000000000/* base class for all hist_unary operations */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_PHIST_UNARY_H #define VIPS_PHIST_UNARY_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #define VIPS_TYPE_HIST_UNARY (vips_hist_unary_get_type()) #define VIPS_HIST_UNARY(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_HIST_UNARY, VipsHistUnary)) #define VIPS_HIST_UNARY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_HIST_UNARY, VipsHistUnaryClass)) #define VIPS_IS_HIST_UNARY(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_HIST_UNARY)) #define VIPS_IS_HIST_UNARY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_HIST_UNARY)) #define VIPS_HIST_UNARY_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_HIST_UNARY, VipsHistUnaryClass)) typedef struct _VipsHistUnary { VipsHistogram parent_instance; VipsImage *in; } VipsHistUnary; typedef struct _VipsHistUnaryClass { VipsHistogramClass parent_class; } VipsHistUnaryClass; GType vips_hist_unary_get_type(void); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_PHIST_UNARY_H*/ libvips-8.15.1/libvips/histogram/histogram.c000066400000000000000000000170321454007373500210770ustar00rootroot00000000000000/* base class for all histogram operations */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "phistogram.h" /** * SECTION: histogram * @short_description: find, manipulate and apply histograms and lookup tables * @stability: Stable * @see_also: image * arithmetic * create * @include: vips/vips.h * * Histograms and look-up tables are 1xn or nx1 images, where n is less than * 256 or less than 65536, corresponding to 8- and 16-bit unsigned int images. * They are tagged with a #VipsInterpretation of * #VIPS_INTERPRETATION_HISTOGRAM and usually displayed by user-interfaces * such as nip2 as plots rather than images. * * These functions can be broadly grouped as things to find or build * histograms (vips_hist_find(), vips_hist_find_indexed(), * vips_hist_find_ndim(), vips_buildlut(), vips_identity()), * operations that * manipulate histograms in some way (vips_hist_cum(), vips_hist_norm()), * operations to apply histograms (vips_maplut()), and a variety of utility * operations. * * A final group of operations build tone curves. These are useful in * pre-press work for adjusting the appearance of images. They are designed * for CIELAB images, but might be useful elsewhere. */ G_DEFINE_ABSTRACT_TYPE(VipsHistogram, vips_histogram, VIPS_TYPE_OPERATION); /* sizealike by expanding in just one dimension and copying the final element. */ static int vips__hist_sizealike_vec(VipsImage **in, VipsImage **out, int n) { int i; int max_size; g_assert(n >= 1); max_size = VIPS_MAX(in[0]->Xsize, in[0]->Ysize); for (i = 1; i < n; i++) max_size = VIPS_MAX(max_size, VIPS_MAX(in[0]->Xsize, in[0]->Ysize)); for (i = 0; i < n; i++) if (in[i]->Ysize == 1) { if (vips_embed(in[i], &out[i], 0, 0, max_size, 1, "extend", VIPS_EXTEND_COPY, NULL)) return -1; } else { if (vips_embed(in[i], &out[i], 0, 0, 1, max_size, "extend", VIPS_EXTEND_COPY, NULL)) return -1; } return 0; } static int vips_histogram_build(VipsObject *object) { VipsHistogram *histogram = VIPS_HISTOGRAM(object); VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsHistogramClass *hclass = VIPS_HISTOGRAM_GET_CLASS(histogram); VipsImage **decode; VipsImage **format; VipsImage **band; VipsImage **size; VipsImage **memory; VipsPel *outbuf; VipsPel **inbuf; int i; #ifdef DEBUG printf("vips_histogram_build: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ if (VIPS_OBJECT_CLASS(vips_histogram_parent_class)->build(object)) return -1; g_assert(histogram->n > 0); /* Must be NULL-terminated. */ g_assert(!histogram->in[histogram->n]); decode = (VipsImage **) vips_object_local_array(object, histogram->n); format = (VipsImage **) vips_object_local_array(object, histogram->n); band = (VipsImage **) vips_object_local_array(object, histogram->n); size = (VipsImage **) vips_object_local_array(object, histogram->n); memory = (VipsImage **) vips_object_local_array(object, histogram->n); g_object_set(histogram, "out", vips_image_new(), NULL); for (i = 0; i < histogram->n; i++) if (vips_image_decode(histogram->in[i], &decode[i]) || vips_check_hist(class->nickname, decode[i])) return -1; /* Cast our input images up to a common format, bands and size. If * input_format is set, cast to a fixed input type. */ if (hclass->input_format != VIPS_FORMAT_NOTSET) { for (i = 0; i < histogram->n; i++) if (vips_cast(decode[i], &format[i], hclass->input_format, NULL)) return -1; } else { if (vips__formatalike_vec(decode, format, histogram->n)) return -1; } if (vips__bandalike_vec(class->nickname, format, band, histogram->n, 1) || vips__hist_sizealike_vec(band, size, histogram->n)) return -1; if (vips_image_pipeline_array(histogram->out, VIPS_DEMAND_STYLE_THINSTRIP, size)) return -1; /* Need a copy of the inputs in memory. */ if (!(inbuf = VIPS_ARRAY(object, histogram->n + 1, VipsPel *))) return -1; for (i = 0; i < histogram->n; i++) { if (!(memory[i] = vips_image_copy_memory(size[i]))) return -1; inbuf[i] = VIPS_IMAGE_ADDR(memory[i], 0, 0); } inbuf[i] = NULL; /* Keep a copy of the memory images here for subclasses. */ histogram->ready = memory; histogram->out->Xsize = VIPS_IMAGE_N_PELS(histogram->ready[0]); histogram->out->Ysize = 1; if (hclass->format_table) histogram->out->BandFmt = hclass->format_table[histogram->ready[0]->BandFmt]; histogram->out->Type = VIPS_INTERPRETATION_HISTOGRAM; if (!(outbuf = vips_malloc(object, VIPS_IMAGE_SIZEOF_LINE(histogram->out)))) return -1; hclass->process(histogram, outbuf, inbuf, histogram->ready[0]->Xsize); if (vips_image_write_line(histogram->out, 0, outbuf)) return -1; return 0; } static void vips_histogram_class_init(VipsHistogramClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "histogram"; vobject_class->description = _("histogram operations"); vobject_class->build = vips_histogram_build; class->input_format = VIPS_FORMAT_NOTSET; /* Inputs set by subclassess. */ VIPS_ARG_IMAGE(class, "out", 10, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsHistogram, out)); } static void vips_histogram_init(VipsHistogram *histogram) { /* Sanity check this above. */ histogram->n = -1; } /* Called from iofuncs to init all operations in this dir. Use a plugin system * instead? */ void vips_histogram_operation_init(void) { extern GType vips_maplut_get_type(void); extern GType vips_case_get_type(void); extern GType vips_percent_get_type(void); extern GType vips_hist_cum_get_type(void); extern GType vips_hist_norm_get_type(void); extern GType vips_hist_equal_get_type(void); extern GType vips_hist_plot_get_type(void); extern GType vips_hist_match_get_type(void); extern GType vips_hist_local_get_type(void); extern GType vips_hist_ismonotonic_get_type(void); extern GType vips_hist_entropy_get_type(void); extern GType vips_stdif_get_type(void); vips_maplut_get_type(); vips_case_get_type(); vips_percent_get_type(); vips_stdif_get_type(); vips_hist_cum_get_type(); vips_hist_norm_get_type(); vips_hist_equal_get_type(); vips_hist_plot_get_type(); vips_hist_match_get_type(); vips_hist_local_get_type(); vips_hist_ismonotonic_get_type(); vips_hist_entropy_get_type(); } libvips-8.15.1/libvips/histogram/maplut.c000066400000000000000000000451171454007373500204110ustar00rootroot00000000000000/* map though a LUT * * Modified: * 18/6/93 JC * - oops! im_incheck() added for LUT image * - some ANSIfication * 15/7/93 JC * - adapted for partial v2 * - ANSIfied * - now does complex LUTs too * 10/3/94 JC * - more helpful error messages, slight reformatting * 24/8/94 JC * - now allows non-uchar image input * 7/10/94 JC * - uses im_malloc(), IM_NEW() etc. * 13/3/95 JC * - now takes a private copy of LUT, so user can im_close() LUT image * after im_maplut() without fear of coredumps * 23/6/95 JC * - lut may now have many bands if image has just one band * 3/3/01 JC * - small speed ups * 30/6/04 * - heh, 1 band image + 3 band lut + >8bit output has been broken for 9 * years :-) * 7/11/07 * - new eval start/end system * 25/3/10 * - gtkdoc * - small cleanups * 5/7/13 * - convert to a class * 2/10/13 * - add --band arg, replacing im_tone_map() */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include typedef struct _VipsMaplut { VipsOperation parent_instance; VipsImage *in; VipsImage *out; VipsImage *lut; int band; int fmt; /* LUT image BandFmt */ int nb; /* Number of bands in lut */ int es; /* VIPS_IMAGE_SIZEOF_ELEMENT() for lut image */ int sz; /* Number of elements in minor dimension */ int clp; /* Value we clip against */ VipsPel **table; /* Lut converted to 2d array */ int overflow; /* Number of overflows for non-uchar lut */ } VipsMaplut; typedef VipsOperationClass VipsMaplutClass; G_DEFINE_TYPE(VipsMaplut, vips_maplut, VIPS_TYPE_OPERATION); static void vips_maplut_preeval(VipsImage *image, VipsProgress *progress, VipsMaplut *maplut) { maplut->overflow = 0; } static void vips_maplut_posteval(VipsImage *image, VipsProgress *progress, VipsMaplut *maplut) { if (maplut->overflow) g_warning(_("%d overflows detected"), maplut->overflow); } /* Our sequence value: the region this sequence is using, and local stats. */ typedef struct { VipsRegion *ir; /* Input region */ int overflow; /* Number of overflows */ } VipsMaplutSequence; /* Our start function. */ static void * vips_maplut_start(VipsImage *out, void *a, void *b) { VipsImage *in = (VipsImage *) a; VipsMaplutSequence *seq; if (!(seq = VIPS_NEW(out, VipsMaplutSequence))) return NULL; /* Init! */ seq->ir = NULL; seq->overflow = 0; if (!(seq->ir = vips_region_new(in))) return NULL; return seq; } /* Map through n non-complex luts. */ #define loop(OUT) \ { \ int b = maplut->nb; \ \ for (y = to; y < bo; y++) { \ for (z = 0; z < b; z++) { \ VipsPel *p = VIPS_REGION_ADDR(ir, le, y); \ OUT *q = (OUT *) VIPS_REGION_ADDR(out_region, le, y); \ OUT *tlut = (OUT *) maplut->table[z]; \ \ for (x = z; x < ne; x += b) \ q[x] = tlut[p[x]]; \ } \ } \ } /* Map through n complex luts. */ #define loopc(OUT) \ { \ int b = in->Bands; \ \ for (y = to; y < bo; y++) { \ for (z = 0; z < b; z++) { \ VipsPel *p = VIPS_REGION_ADDR(ir, le, y) + z; \ OUT *q = (OUT *) VIPS_REGION_ADDR(out_region, le, y) + z * 2; \ OUT *tlut = (OUT *) maplut->table[z]; \ \ for (x = 0; x < ne; x += b) { \ int n = p[x] * 2; \ \ q[0] = tlut[n]; \ q[1] = tlut[n + 1]; \ q += b * 2; \ } \ } \ } \ } #define loopg(IN, OUT) \ { \ int b = maplut->nb; \ \ for (y = to; y < bo; y++) { \ for (z = 0; z < b; z++) { \ IN *p = (IN *) VIPS_REGION_ADDR(ir, le, y); \ OUT *q = (OUT *) VIPS_REGION_ADDR(out_region, le, y); \ OUT *tlut = (OUT *) maplut->table[z]; \ \ for (x = z; x < ne; x += b) { \ int index = p[x]; \ \ if (index > maplut->clp) { \ index = maplut->clp; \ seq->overflow++; \ } \ \ q[x] = tlut[index]; \ } \ } \ } \ } #define loopcg(IN, OUT) \ { \ int b = in->Bands; \ \ for (y = to; y < bo; y++) { \ for (z = 0; z < b; z++) { \ IN *p = (IN *) VIPS_REGION_ADDR(ir, le, y) + z; \ OUT *q = (OUT *) VIPS_REGION_ADDR(out_region, le, y) + z * 2; \ OUT *tlut = (OUT *) maplut->table[z]; \ \ for (x = 0; x < ne; x += b) { \ int index = p[x]; \ \ if (index > maplut->clp) { \ index = maplut->clp; \ seq->overflow++; \ } \ \ q[0] = tlut[index * 2]; \ q[1] = tlut[index * 2 + 1]; \ \ q += b * 2; \ } \ } \ } \ } /* Map image through one non-complex lut. */ #define loop1(OUT) \ { \ OUT *tlut = (OUT *) maplut->table[0]; \ \ for (y = to; y < bo; y++) { \ OUT *q = (OUT *) VIPS_REGION_ADDR(out_region, le, y); \ VipsPel *p = VIPS_REGION_ADDR(ir, le, y); \ \ for (x = 0; x < ne; x++) \ q[x] = tlut[p[x]]; \ } \ } /* Map image through one complex lut. */ #define loop1c(OUT) \ { \ OUT *tlut = (OUT *) maplut->table[0]; \ \ for (y = to; y < bo; y++) { \ OUT *q = (OUT *) VIPS_REGION_ADDR(out_region, le, y); \ VipsPel *p = VIPS_REGION_ADDR(ir, le, y); \ \ for (x = 0; x < ne; x++) { \ int n = p[x] * 2; \ \ q[0] = tlut[n]; \ q[1] = tlut[n + 1]; \ q += 2; \ } \ } \ } /* As above, but the input image may be any unsigned integer type. We have to * index the lut carefully, and record the number of overflows we detect. */ #define loop1g(IN, OUT) \ { \ OUT *tlut = (OUT *) maplut->table[0]; \ \ for (y = to; y < bo; y++) { \ OUT *q = (OUT *) VIPS_REGION_ADDR(out_region, le, y); \ IN *p = (IN *) VIPS_REGION_ADDR(ir, le, y); \ \ for (x = 0; x < ne; x++) { \ int index = p[x]; \ \ if (index > maplut->clp) { \ index = maplut->clp; \ seq->overflow++; \ } \ \ q[x] = tlut[index]; \ } \ } \ } #define loop1cg(IN, OUT) \ { \ OUT *tlut = (OUT *) maplut->table[0]; \ \ for (y = to; y < bo; y++) { \ OUT *q = (OUT *) VIPS_REGION_ADDR(out_region, le, y); \ IN *p = (IN *) VIPS_REGION_ADDR(ir, le, y); \ \ for (x = 0; x < ne; x++) { \ int index = p[x]; \ \ if (index > maplut->clp) { \ index = maplut->clp; \ seq->overflow++; \ } \ \ q[0] = tlut[index * 2]; \ q[1] = tlut[index * 2 + 1]; \ q += 2; \ } \ } \ } /* Map 1-band image through a many-band non-complex lut. */ #define loop1m(OUT) \ { \ OUT **tlut = (OUT **) maplut->table; \ \ for (y = to; y < bo; y++) { \ OUT *q = (OUT *) VIPS_REGION_ADDR(out_region, le, y); \ VipsPel *p = VIPS_REGION_ADDR(ir, le, y); \ \ for (i = 0, x = 0; x < np; x++) { \ int n = p[x]; \ \ for (z = 0; z < maplut->nb; z++, i++) \ q[i] = tlut[z][n]; \ } \ } \ } /* Map 1-band image through many-band complex lut. */ #define loop1cm(OUT) \ { \ OUT **tlut = (OUT **) maplut->table; \ \ for (y = to; y < bo; y++) { \ OUT *q = (OUT *) VIPS_REGION_ADDR(out_region, le, y); \ VipsPel *p = VIPS_REGION_ADDR(ir, le, y); \ \ for (x = 0; x < np; x++) { \ int n = p[x] * 2; \ \ for (z = 0; z < maplut->nb; z++) { \ q[0] = tlut[z][n]; \ q[1] = tlut[z][n + 1]; \ q += 2; \ } \ } \ } \ } /* Map 1-band uint or ushort image through a many-band non-complex LUT. */ #define loop1gm(IN, OUT) \ { \ OUT **tlut = (OUT **) maplut->table; \ \ for (y = to; y < bo; y++) { \ IN *p = (IN *) VIPS_REGION_ADDR(ir, le, y); \ OUT *q = (OUT *) VIPS_REGION_ADDR(out_region, le, y); \ \ for (i = 0, x = 0; x < np; x++) { \ int n = p[x]; \ \ if (n > maplut->clp) { \ n = maplut->clp; \ seq->overflow++; \ } \ \ for (z = 0; z < maplut->nb; z++, i++) \ q[i] = tlut[z][n]; \ } \ } \ } /* Map 1-band uint or ushort image through a many-band complex LUT. */ #define loop1cgm(IN, OUT) \ { \ OUT **tlut = (OUT **) maplut->table; \ \ for (y = to; y < bo; y++) { \ IN *p = (IN *) VIPS_REGION_ADDR(ir, le, y); \ OUT *q = (OUT *) VIPS_REGION_ADDR(out_region, le, y); \ \ for (x = 0; x < np; x++) { \ int n = p[x]; \ \ if (n > maplut->clp) { \ n = maplut->clp; \ seq->overflow++; \ } \ \ for (z = 0; z < maplut->nb; z++) { \ q[0] = tlut[z][n * 2]; \ q[1] = tlut[z][n * 2 + 1]; \ q += 2; \ } \ } \ } \ } /* Switch for input types. Has to be uint type! */ #define inner_switch(UCHAR, GEN, OUT) \ switch (ir->im->BandFmt) { \ case VIPS_FORMAT_UCHAR: \ UCHAR(OUT); \ break; \ case VIPS_FORMAT_USHORT: \ GEN(unsigned short, OUT); \ break; \ case VIPS_FORMAT_UINT: \ GEN(unsigned int, OUT); \ break; \ default: \ g_assert_not_reached(); \ } /* Switch for LUT types. One function for non-complex images, a * variant for complex ones. Another pair as well, in case the input is not * uchar. */ #define outer_switch(UCHAR_F, UCHAR_FC, GEN_F, GEN_FC) \ switch (maplut->fmt) { \ case VIPS_FORMAT_UCHAR: \ inner_switch(UCHAR_F, GEN_F, unsigned char); \ break; \ case VIPS_FORMAT_CHAR: \ inner_switch(UCHAR_F, GEN_F, char); \ break; \ case VIPS_FORMAT_USHORT: \ inner_switch(UCHAR_F, GEN_F, unsigned short); \ break; \ case VIPS_FORMAT_SHORT: \ inner_switch(UCHAR_F, GEN_F, short); \ break; \ case VIPS_FORMAT_UINT: \ inner_switch(UCHAR_F, GEN_F, unsigned int); \ break; \ case VIPS_FORMAT_INT: \ inner_switch(UCHAR_F, GEN_F, int); \ break; \ case VIPS_FORMAT_FLOAT: \ inner_switch(UCHAR_F, GEN_F, float); \ break; \ case VIPS_FORMAT_DOUBLE: \ inner_switch(UCHAR_F, GEN_F, double); \ break; \ case VIPS_FORMAT_COMPLEX: \ inner_switch(UCHAR_FC, GEN_FC, float); \ break; \ case VIPS_FORMAT_DPCOMPLEX: \ inner_switch(UCHAR_FC, GEN_FC, double); \ break; \ default: \ g_assert_not_reached(); \ } /* Do a map. */ static int vips_maplut_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsMaplutSequence *seq = (VipsMaplutSequence *) vseq; VipsImage *in = (VipsImage *) a; VipsMaplut *maplut = (VipsMaplut *) b; VipsRegion *ir = seq->ir; VipsRect *r = &out_region->valid; int le = r->left; int to = r->top; int bo = VIPS_RECT_BOTTOM(r); int np = r->width; /* Pels across region */ int ne = VIPS_REGION_N_ELEMENTS(out_region); /* Number of elements */ int x, y, z, i; if (vips_region_prepare(ir, r)) return -1; /* clang-format off */ if (maplut->nb == 1) /* One band lut. */ outer_switch(loop1, loop1c, loop1g, loop1cg) else /* Many band lut. */ if (in->Bands == 1) /* ... but 1 band input. */ outer_switch(loop1m, loop1cm, loop1gm, loop1cgm) else outer_switch(loop, loopc, loopg, loopcg) return 0; /* clang-format on */ } /* Destroy a sequence value. */ static int vips_maplut_stop(void *vseq, void *a, void *b) { VipsMaplutSequence *seq = (VipsMaplutSequence *) vseq; VipsMaplut *maplut = (VipsMaplut *) b; /* Add to global stats. */ maplut->overflow += seq->overflow; VIPS_UNREF(seq->ir); return 0; } /* Save a bit of typing. */ #define UC VIPS_FORMAT_UCHAR #define US VIPS_FORMAT_USHORT #define UI VIPS_FORMAT_UINT /* Type mapping: go to uchar / ushort / uint to make an index. */ static const VipsBandFormat bandfmt_maplut[10] = { /* Band format: UC C US S UI I F X D DX */ /* Promotion: */ UC, UC, US, US, UI, UI, UI, UI, UI, UI }; /* Repack lut into a set of band arrays. If we're just passing one band of the * image through the lut, put the identity function in the other bands. */ #define PACK_TABLE(TYPE) \ { \ TYPE *data = (TYPE *) lut->data; \ int x, b; \ \ for (x = 0; x < maplut->sz; x++) \ for (b = 0; b < maplut->nb; b++) { \ TYPE *q = (TYPE *) maplut->table[b]; \ \ if (maplut->band >= 0 && \ lut->Bands == 1) { \ if (b == maplut->band) \ q[x] = data[x]; \ else \ q[x] = x; \ } \ else \ q[x] = data[x * lut->Bands + b]; \ } \ } #define PACK_TABLEC(TYPE) \ { \ TYPE *data = (TYPE *) lut->data; \ int x, b; \ \ for (x = 0; x < maplut->sz; x++) \ for (b = 0; b < maplut->nb; b++) { \ TYPE *q = (TYPE *) maplut->table[b]; \ \ if (maplut->band >= 0 && \ lut->Bands == 1) { \ if (b == maplut->band) { \ q[2 * x] = data[2 * x]; \ q[2 * x + 1] = data[2 * x + 1]; \ } \ else { \ q[2 * x] = x; \ q[2 * x + 1] = 0; \ } \ } \ else { \ q[2 * x] = data[2 * (x * lut->Bands + b)]; \ q[2 * x + 1] = \ data[2 * (x * lut->Bands + b) + 1]; \ } \ } \ } static int vips_maplut_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsMaplut *maplut = (VipsMaplut *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); VipsImage *in; VipsImage *lut; int i; g_object_set(object, "out", vips_image_new(), NULL); if (VIPS_OBJECT_CLASS(vips_maplut_parent_class)->build(object)) return -1; in = maplut->in; lut = maplut->lut; if (vips_check_hist(class->nickname, lut) || vips_check_uncoded(class->nickname, lut)) return -1; /* Cast @in to u8/u16/u32 to make the index image. */ if (vips_cast(in, &t[0], bandfmt_maplut[in->BandFmt], NULL)) return -1; in = t[0]; if (vips_check_uncoded(class->nickname, in) || vips_check_bands_1orn(class->nickname, in, lut) || vips_image_pio_input(in)) return -1; if (vips_image_pipelinev(maplut->out, VIPS_DEMAND_STYLE_THINSTRIP, in, lut, NULL)) return -1; maplut->out->BandFmt = lut->BandFmt; /* Output has same number of bands as LUT, unless LUT has 1 band, in * which case output has same number of bands as input. */ if (lut->Bands != 1) maplut->out->Bands = lut->Bands; /* The Type comes from the image with many bands. A B_W index image, * for example, needs to become an RGB image when it goes through a * three-band LUT. */ if (lut->Bands != 1) maplut->out->Type = lut->Type; g_signal_connect(in, "preeval", G_CALLBACK(vips_maplut_preeval), maplut); g_signal_connect(in, "posteval", G_CALLBACK(vips_maplut_posteval), maplut); /* Make luts. We unpack the LUT image into a 2D C array to speed * processing. */ if (!(t[1] = vips_image_copy_memory(lut))) return -1; lut = t[1]; maplut->fmt = lut->BandFmt; maplut->es = VIPS_IMAGE_SIZEOF_ELEMENT(lut); maplut->sz = lut->Xsize * lut->Ysize; maplut->clp = maplut->sz - 1; /* If @bands is >= 0, we need to expand the lut to the number of bands * in the input image. */ if (maplut->band >= 0 && lut->Bands == 1) maplut->nb = in->Bands; else maplut->nb = lut->Bands; /* Attach tables. */ if (!(maplut->table = VIPS_ARRAY(maplut, maplut->nb, VipsPel *))) return -1; for (i = 0; i < maplut->nb; i++) if (!(maplut->table[i] = VIPS_ARRAY(maplut, maplut->sz * maplut->es, VipsPel))) return -1; /* Scan LUT and fill table. */ switch (lut->BandFmt) { case VIPS_FORMAT_UCHAR: PACK_TABLE(unsigned char); break; case VIPS_FORMAT_CHAR: PACK_TABLE(char); break; case VIPS_FORMAT_USHORT: PACK_TABLE(unsigned short); break; case VIPS_FORMAT_SHORT: PACK_TABLE(short); break; case VIPS_FORMAT_UINT: PACK_TABLE(unsigned int); break; case VIPS_FORMAT_INT: PACK_TABLE(int); break; case VIPS_FORMAT_FLOAT: PACK_TABLE(float); break; case VIPS_FORMAT_DOUBLE: PACK_TABLE(double); break; case VIPS_FORMAT_COMPLEX: PACK_TABLEC(float); break; case VIPS_FORMAT_DPCOMPLEX: PACK_TABLEC(double); break; default: g_assert_not_reached(); } if (vips_image_generate(maplut->out, vips_maplut_start, vips_maplut_gen, vips_maplut_stop, in, maplut)) return -1; return 0; } static void vips_maplut_class_init(VipsMaplutClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "maplut"; object_class->description = _("map an image though a lut"); object_class->build = vips_maplut_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaplut, in)); VIPS_ARG_IMAGE(class, "out", 2, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsMaplut, out)); VIPS_ARG_IMAGE(class, "lut", 3, _("LUT"), _("Look-up table image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMaplut, lut)); VIPS_ARG_INT(class, "band", 4, _("Band"), _("Apply one-band lut to this band of in"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMaplut, band), -1, 10000, -1); } static void vips_maplut_init(VipsMaplut *maplut) { maplut->band = -1; } /** * vips_maplut: (method) * @in: input image * @out: (out): output image * @lut: look-up table * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @band: apply one-band @lut to this band of @in * * Map an image through another image acting as a LUT (Look Up Table). * The lut may have any type and the output image will be that type. * * The input image will be cast to one of the unsigned integer types, that is, * VIPS_FORMAT_UCHAR, VIPS_FORMAT_USHORT or VIPS_FORMAT_UINT. * * If @lut is too small for the input type (for example, if @in is * VIPS_FORMAT_UCHAR but @lut only has 100 elements), the lut is padded out * by copying the last element. Overflows are reported at the end of * computation. * If @lut is too large, extra values are ignored. * * If @lut has one band and @band is -1 (the default), then all bands of @in * pass through @lut. If @band is >= 0, then just that band of @in passes * through @lut and other bands are just copied. * * If @lut * has same number of bands as @in, then each band is mapped * separately. If @in has one band, then @lut may have many bands and * the output will have the same number of bands as @lut. * * See also: vips_hist_find(), vips_identity(). * * Returns: 0 on success, -1 on error */ int vips_maplut(VipsImage *in, VipsImage **out, VipsImage *lut, ...) { va_list ap; int result; va_start(ap, lut); result = vips_call_split("maplut", ap, in, out, lut); va_end(ap); return result; } libvips-8.15.1/libvips/histogram/meson.build000066400000000000000000000011311454007373500210710ustar00rootroot00000000000000histogram_sources = files( 'histogram.c', 'maplut.c', 'case.c', 'hist_unary.c', 'hist_cum.c', 'hist_norm.c', 'hist_equal.c', 'hist_plot.c', 'hist_match.c', 'hist_local.c', 'percent.c', 'hist_ismonotonic.c', 'hist_entropy.c', 'stdif.c', ) histogram_headers = files( 'phistogram.h', 'hist_unary.h', ) libvips_sources += histogram_sources histogram_lib = static_library('histogram', histogram_sources, histogram_headers, dependencies: libvips_deps, gnu_symbol_visibility: 'hidden', ) libvips_components += histogram_lib libvips-8.15.1/libvips/histogram/percent.c000066400000000000000000000101011454007373500205300ustar00rootroot00000000000000/* find percent of pixels * * Copyright: 1990, N. Dessipris * * Author: N. Dessipris * Written on: 02/08/1990 * Modified on : 29/4/93 K.Martinez for Sys5 * 20/2/95 JC * - now returns result through parameter * - ANSIfied a little * 19/1/07 * - redone with the vips hist operators * 25/3/10 * - gtkdoc * 20/9/13 * - wrap as a class * - more accurate */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include typedef struct _VipsPercent { VipsOperation parent_instance; VipsImage *in; double percent; int threshold; } VipsPercent; typedef VipsOperationClass VipsPercentClass; G_DEFINE_TYPE(VipsPercent, vips_percent, VIPS_TYPE_OPERATION); static int vips_percent_build(VipsObject *object) { VipsPercent *percent = (VipsPercent *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 7); double threshold; if (VIPS_OBJECT_CLASS(vips_percent_parent_class)->build(object)) return -1; if (vips_hist_find(percent->in, &t[0], NULL) || vips_hist_cum(t[0], &t[1], NULL) || vips_hist_norm(t[1], &t[2], NULL) || vips_more_const1(t[2], &t[3], (percent->percent / 100.0) * t[2]->Xsize, NULL) || vips_profile(t[3], &t[5], &t[6], NULL) || vips_avg(t[6], &threshold, NULL)) return -1; g_object_set(object, "threshold", (int) threshold, NULL); return 0; } static void vips_percent_class_init(VipsPercentClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "percent"; object_class->description = _("find threshold for percent of pixels"); object_class->build = vips_percent_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsPercent, in)); VIPS_ARG_DOUBLE(class, "percent", 2, _("Percent"), _("Percent of pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsPercent, percent), 0, 100, 50); VIPS_ARG_INT(class, "threshold", 3, _("Threshold"), _("Threshold above which lie percent of pixels"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsPercent, threshold), 0, 65535, 0); } static void vips_percent_init(VipsPercent *percent) { } /** * vips_percent: (method) * @in: input image * @percent: threshold percentage * @threshold: (out): output threshold value * @...: %NULL-terminated list of optional named arguments * * vips_percent() returns (through the @threshold parameter) the threshold * below which there are @percent values of @in. For example: * * |[ * $ vips percent k2.jpg 90 * 214 * ]| * * Means that 90% of pixels in `k2.jpg` have a value less than 214. * * The function works for uchar and ushort images only. It can be used * to threshold the scaled result of a filtering operation. * * See also: vips_hist_find(), vips_profile(). * * Returns: 0 on success, -1 on error */ int vips_percent(VipsImage *in, double percent, int *threshold, ...) { va_list ap; int result; va_start(ap, threshold); result = vips_call_split("percent", ap, in, percent, threshold); va_end(ap); return result; } libvips-8.15.1/libvips/histogram/phistogram.h000066400000000000000000000046611454007373500212700ustar00rootroot00000000000000/* base class for all histogram operations * * many hists in, one hist out, a buffer processing function in the class */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_PHISTOGRAM_H #define VIPS_PHISTOGRAM_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #define VIPS_TYPE_HISTOGRAM (vips_histogram_get_type()) #define VIPS_HISTOGRAM(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_HISTOGRAM, VipsHistogram)) #define VIPS_HISTOGRAM_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_HISTOGRAM, VipsHistogramClass)) #define VIPS_IS_HISTOGRAM(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_HISTOGRAM)) #define VIPS_IS_HISTOGRAM_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_HISTOGRAM)) #define VIPS_HISTOGRAM_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_HISTOGRAM, VipsHistogramClass)) typedef struct _VipsHistogram VipsHistogram; typedef void (*VipsHistogramProcessFn)(VipsHistogram *histogram, VipsPel *out, VipsPel **in, int width); struct _VipsHistogram { VipsOperation parent_instance; VipsImage *out; /* NULL-terminated array of input images. */ VipsImage **in; int n; /* ... and transformed ready for processing. */ VipsImage **ready; }; typedef struct _VipsHistogramClass { VipsOperationClass parent_class; /* For each input format, what output format. */ const VipsBandFormat *format_table; /* If not VIPS_FORMAT_NOTSET, upcast all ins to this. */ VipsBandFormat input_format; VipsHistogramProcessFn process; } VipsHistogramClass; GType vips_histogram_get_type(void); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_PHISTOGRAM_H*/ libvips-8.15.1/libvips/histogram/stdif.c000066400000000000000000000231301454007373500202070ustar00rootroot00000000000000/* statistical difference * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 02/05/1990 * Modified on : * 6/8/93 JC * - now works for odd window sizes * - ANSIfication * 25/5/95 JC * - new IM_ARRAY() macro * 25/1/96 JC * - im_lhisteq() adapted to make new im_stdif() * - now partial, plus rolling window * - 5x faster, amazingly * - works * 7/4/04 * - now uses im_embed() with edge stretching on the input, not * the output * 25/3/10 * - gtkdoc * - small cleanups * 10/8/13 * - wrapped as a class using hist_local.c * - many bands */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include typedef struct _VipsStdif { VipsOperation parent_instance; VipsImage *in; VipsImage *out; int width; int height; double a; double m0; double b; double s0; } VipsStdif; typedef VipsOperationClass VipsStdifClass; G_DEFINE_TYPE(VipsStdif, vips_stdif, VIPS_TYPE_OPERATION); /* How ugly and stupid. */ #define MAX_BANDS (100) static int vips_stdif_generate(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsRect *r = &out_region->valid; VipsRegion *ir = (VipsRegion *) vseq; VipsImage *in = (VipsImage *) a; VipsStdif *stdif = (VipsStdif *) b; int bands = in->Bands; int npel = stdif->width * stdif->width; VipsRect irect; int y; int lsk; int centre; /* Offset to move to centre of window */ /* What part of ir do we need? */ irect.left = out_region->valid.left; irect.top = out_region->valid.top; irect.width = out_region->valid.width + stdif->width; irect.height = out_region->valid.height + stdif->height; if (vips_region_prepare(ir, &irect)) return -1; lsk = VIPS_REGION_LSKIP(ir); centre = lsk * (stdif->height / 2) + stdif->width / 2; for (y = 0; y < r->height; y++) { /* Get input and output pointers for this line. */ VipsPel *p = VIPS_REGION_ADDR(ir, r->left, r->top + y); VipsPel *q = VIPS_REGION_ADDR(out_region, r->left, r->top + y); double f1 = stdif->a * stdif->m0; double f2 = 1.0 - stdif->a; double f3 = stdif->b * stdif->s0; VipsPel *p1; int x, i, j, b; /* We will get int overflow for windows larger than about 256 * x 256, sadly. */ unsigned int sum[MAX_BANDS]; unsigned int sum2[MAX_BANDS]; /* Find sum, sum of squares for the start of this line. */ for (b = 0; b < bands; b++) { memset(sum, 0, bands * sizeof(unsigned int)); memset(sum2, 0, bands * sizeof(unsigned int)); } p1 = p; for (j = 0; j < stdif->height; j++) { i = 0; for (x = 0; x < stdif->width; x++) { for (b = 0; b < bands; b++) { int t = p1[i++]; sum[b] += t; sum2[b] += t * t; } } p1 += lsk; } /* Loop for output pels. */ for (x = 0; x < r->width; x++) { for (b = 0; b < bands; b++) { /* Find stats. */ double mean = (double) sum[b] / npel; double var = (double) sum2[b] / npel - (mean * mean); double sig = sqrt(var); /* Transform. */ double res = f1 + f2 * mean + ((double) p[centre] - mean) * (f3 / (stdif->s0 + stdif->b * sig)); /* And write. */ if (res < 0.0) *q++ = 0; else if (res >= 256.0) *q++ = 255; else *q++ = res + 0.5; /* Adapt sums - remove the pels from the left * hand column, add in pels for a new * right-hand column. */ p1 = p; for (j = 0; j < stdif->height; j++) { int t1 = p1[0]; int t2 = p1[bands * stdif->width]; sum[b] -= t1; sum2[b] -= t1 * t1; sum[b] += t2; sum2[b] += t2 * t2; p1 += lsk; } p += 1; } } } return 0; } static int vips_stdif_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsStdif *stdif = (VipsStdif *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 3); VipsImage *in; if (VIPS_OBJECT_CLASS(vips_stdif_parent_class)->build(object)) return -1; in = stdif->in; if (vips_image_decode(in, &t[0])) return -1; in = t[0]; if (vips_check_format(class->nickname, in, VIPS_FORMAT_UCHAR)) return -1; if (stdif->width > in->Xsize || stdif->height > in->Ysize) { vips_error(class->nickname, "%s", _("window too large")); return -1; } if (in->Bands > MAX_BANDS) { vips_error(class->nickname, "%s", _("too many bands")); return -1; } /* Expand the input. */ if (vips_embed(in, &t[1], stdif->width / 2, stdif->height / 2, in->Xsize + stdif->width - 1, in->Ysize + stdif->height - 1, "extend", VIPS_EXTEND_COPY, NULL)) return -1; in = t[1]; g_object_set(object, "out", vips_image_new(), NULL); /* Set demand hints. FATSTRIP is good for us, as THINSTRIP will cause * too many recalculations on overlaps. */ if (vips_image_pipelinev(stdif->out, VIPS_DEMAND_STYLE_FATSTRIP, in, NULL)) return -1; stdif->out->Xsize -= stdif->width - 1; stdif->out->Ysize -= stdif->height - 1; if (vips_image_generate(stdif->out, vips_start_one, vips_stdif_generate, vips_stop_one, in, stdif)) return -1; stdif->out->Xoffset = 0; stdif->out->Yoffset = 0; vips_reorder_margin_hint(stdif->out, stdif->width * stdif->height); return 0; } static void vips_stdif_class_init(VipsStdifClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "stdif"; object_class->description = _("statistical difference"); object_class->build = vips_stdif_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsStdif, in)); VIPS_ARG_IMAGE(class, "out", 2, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsStdif, out)); /* Windows larger than 256x256 will overflow sum2, see above. */ VIPS_ARG_INT(class, "width", 4, _("Width"), _("Window width in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsStdif, width), 1, 256, 11); VIPS_ARG_INT(class, "height", 5, _("Height"), _("Window height in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsStdif, height), 1, 256, 11); VIPS_ARG_DOUBLE(class, "a", 2, _("Mean weight"), _("Weight of new mean"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsStdif, a), 0.0, 1.0, 0.5); VIPS_ARG_DOUBLE(class, "m0", 2, _("Mean"), _("New mean"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsStdif, m0), -INFINITY, INFINITY, 128); VIPS_ARG_DOUBLE(class, "b", 2, _("Deviation weight"), _("Weight of new deviation"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsStdif, b), 0.0, 2.0, 0.5); VIPS_ARG_DOUBLE(class, "s0", 2, _("Deviation"), _("New deviation"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsStdif, s0), -INFINITY, INFINITY, 50); } static void vips_stdif_init(VipsStdif *stdif) { stdif->width = 11; stdif->height = 11; stdif->a = 0.5; stdif->m0 = 128.0; stdif->b = 0.5; stdif->s0 = 50.0; } /** * vips_stdif: (method) * @in: input image * @out: (out): output image * @width: width of region * @height: height of region * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @a: weight of new mean * * @m0: target mean * * @b: weight of new deviation * * @s0: target deviation * * vips_stdif() performs statistical differencing according to the formula * given in page 45 of the book "An Introduction to Digital Image * Processing" by Wayne Niblack. This transformation emphasises the way in * which a pel differs statistically from its neighbours. It is useful for * enhancing low-contrast images with lots of detail, such as X-ray plates. * * At point (i,j) the output is given by the equation: * * |[ * vout(i,j) = @a * @m0 + (1 - @a) * meanv + * (vin(i,j) - meanv) * (@b * @s0) / (@s0 + @b * stdv) * ]| * * Values @a, @m0, @b and @s0 are entered, while meanv and stdv are the values * calculated over a moving window of size @width, @height centred on pixel * (i,j). @m0 is the new mean, @a is the weight given to it. @s0 is the new * standard deviation, @b is the weight given to it. * * Try: * * |[ * vips stdif $VIPSHOME/pics/huysum.v fred.v 0.5 128 0.5 50 11 11 * ]| * * The operation works on one-band uchar images only, and writes a one-band * uchar image as its result. The output image has the same size as the * input. * * See also: vips_hist_local(). * * Returns: 0 on success, -1 on error */ int vips_stdif(VipsImage *in, VipsImage **out, int width, int height, ...) { va_list ap; int result; va_start(ap, height); result = vips_call_split("stdif", ap, in, out, width, height); va_end(ap); return result; } libvips-8.15.1/libvips/include/000077500000000000000000000000001454007373500163615ustar00rootroot00000000000000libvips-8.15.1/libvips/include/vips/000077500000000000000000000000001454007373500173425ustar00rootroot00000000000000libvips-8.15.1/libvips/include/vips/almostdeprecated.h000066400000000000000000000310341454007373500230340ustar00rootroot00000000000000/* Old and broken stuff that we still enable by default, but don't document * and certainly don't recommend. * * 30/6/09 * - from vips.h */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef IM_ALMOSTDEPRECATED_H #define IM_ALMOSTDEPRECATED_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ /* Was public, now deprecated. */ typedef enum { IM_BBITS_BYTE = 8, IM_BBITS_SHORT = 16, IM_BBITS_INT = 32, IM_BBITS_FLOAT = 32, IM_BBITS_COMPLEX = 64, IM_BBITS_DOUBLE = 64, IM_BBITS_DPCOMPLEX = 128 } VipsBBits; /* Used to define a region of interest for im_extract() etc. Too boring to be * public API, see im_extract_area() etc. */ typedef struct { int xstart; int ystart; int xsize; int ysize; int chsel; /* 1 2 3 or 0, for r g b or all respectively *(channel select) */ } IMAGE_BOX; VIPS_DEPRECATED int im_extract(IMAGE *, IMAGE *, IMAGE_BOX *); VIPS_DEPRECATED DOUBLEMASK *im_measure(IMAGE *im, IMAGE_BOX *box, int h, int v, int *sel, int nsel, const char *name); VIPS_DEPRECATED gboolean im_isuint(IMAGE *im); VIPS_DEPRECATED gboolean im_isint(IMAGE *im); VIPS_DEPRECATED gboolean im_isfloat(IMAGE *im); VIPS_DEPRECATED gboolean im_isscalar(IMAGE *im); VIPS_DEPRECATED gboolean im_iscomplex(IMAGE *im); VIPS_DEPRECATED int im_c2ps(IMAGE *in, IMAGE *out); VIPS_DEPRECATED int im_clip(IMAGE *in, IMAGE *out); #define MASK_IDEAL_HIGHPASS IM_MASK_IDEAL_HIGHPASS #define MASK_IDEAL_LOWPASS IM_MASK_IDEAL_LOWPASS #define MASK_BUTTERWORTH_HIGHPASS IM_MASK_BUTTERWORTH_HIGHPASS #define MASK_BUTTERWORTH_LOWPASS IM_MASK_BUTTERWORTH_LOWPASS #define MASK_GAUSS_HIGHPASS IM_MASK_GAUSS_HIGHPASS #define MASK_GAUSS_LOWPASS IM_MASK_GAUSS_LOWPASS #define MASK_IDEAL_RINGPASS IM_MASK_IDEAL_RINGPASS #define MASK_IDEAL_RINGREJECT IM_MASK_IDEAL_RINGREJECT #define MASK_BUTTERWORTH_RINGPASS IM_MASK_BUTTERWORTH_RINGPASS #define MASK_BUTTERWORTH_RINGREJECT IM_MASK_BUTTERWORTH_RINGREJECT #define MASK_GAUSS_RINGPASS IM_MASK_GAUSS_RINGPASS #define MASK_GAUSS_RINGREJECT IM_MASK_GAUSS_RINGREJECT #define MASK_IDEAL_BANDPASS IM_MASK_IDEAL_BANDPASS #define MASK_IDEAL_BANDREJECT IM_MASK_IDEAL_BANDREJECT #define MASK_BUTTERWORTH_BANDPASS IM_MASK_BUTTERWORTH_BANDPASS #define MASK_BUTTERWORTH_BANDREJECT IM_MASK_BUTTERWORTH_BANDREJECT #define MASK_GAUSS_BANDPASS IM_MASK_GAUSS_BANDPASS #define MASK_GAUSS_BANDREJECT IM_MASK_GAUSS_BANDREJECT #define MASK_FRACTAL_FLT IM_MASK_FRACTAL_FLT #define MaskType ImMaskType /* Copy and swap types. */ typedef enum { IM_ARCH_NATIVE, IM_ARCH_BYTE_SWAPPED, IM_ARCH_LSB_FIRST, IM_ARCH_MSB_FIRST } im_arch_type; VIPS_DEPRECATED gboolean im_isnative(im_arch_type arch); VIPS_DEPRECATED int im_copy_from(IMAGE *in, IMAGE *out, im_arch_type architecture); /* Backwards compatibility macros. */ #define im_clear_error_string() im_error_clear() #define im_errorstring() im_error_buffer() /* Deprecated API. */ VIPS_DEPRECATED_FOR(vips_error) void im_errormsg(const char *fmt, ...) G_GNUC_PRINTF(1, 2); VIPS_DEPRECATED_FOR(vips_verror) void im_verrormsg(const char *fmt, va_list ap); VIPS_DEPRECATED_FOR(vips_error_system) void im_errormsg_system(int err, const char *fmt, ...) G_GNUC_PRINTF(2, 3); VIPS_DEPRECATED_FOR(g_info) void im_diagnostics(const char *fmt, ...) G_GNUC_PRINTF(1, 2); VIPS_DEPRECATED_FOR(g_warning) void im_warning(const char *fmt, ...) G_GNUC_PRINTF(1, 2); VIPS_DEPRECATED_FOR(g_thread_join) void *vips_g_thread_join(GThread *thread); VIPS_DEPRECATED int im_iterate(VipsImage *im, VipsStartFn start, im_generate_fn generate, VipsStopFn stop, void *a, void *b); /* Async rendering. */ VIPS_DEPRECATED_FOR(vips_sink_screen) int im_render_priority(VipsImage *in, VipsImage *out, VipsImage *mask, int width, int height, int max, int priority, void (*notify)(VipsImage *, VipsRect *, void *), void *client); VIPS_DEPRECATED_FOR(vips_sink_screen) int im_cache(VipsImage *in, VipsImage *out, int width, int height, int max); /* Deprecated operations. */ VIPS_DEPRECATED int im_cmulnorm(IMAGE *in1, IMAGE *in2, IMAGE *out); VIPS_DEPRECATED int im_fav4(IMAGE **, IMAGE *); VIPS_DEPRECATED int im_gadd(double, IMAGE *, double, IMAGE *, double, IMAGE *); VIPS_DEPRECATED int im_litecor(IMAGE *, IMAGE *, IMAGE *, int, double); VIPS_DEPRECATED_FOR(vips_sink_screen) int im_render_fade(IMAGE *in, IMAGE *out, IMAGE *mask, int width, int height, int max, int fps, int steps, int priority, void (*notify)(IMAGE *, VipsRect *, void *), void *client); VIPS_DEPRECATED_FOR(vips_sink_screen) int im_render(IMAGE *in, IMAGE *out, IMAGE *mask, int width, int height, int max, void (*notify)(IMAGE *, VipsRect *, void *), void *client); VIPS_DEPRECATED int im_cooc_matrix(IMAGE *im, IMAGE *m, int xp, int yp, int xs, int ys, int dx, int dy, int flag); VIPS_DEPRECATED int im_cooc_asm(IMAGE *m, double *asmoment); VIPS_DEPRECATED int im_cooc_contrast(IMAGE *m, double *contrast); VIPS_DEPRECATED int im_cooc_correlation(IMAGE *m, double *correlation); VIPS_DEPRECATED int im_cooc_entropy(IMAGE *m, double *entropy); VIPS_DEPRECATED int im_glds_matrix(IMAGE *im, IMAGE *m, int xpos, int ypos, int xsize, int ysize, int dx, int dy); VIPS_DEPRECATED int im_glds_asm(IMAGE *m, double *asmoment); VIPS_DEPRECATED int im_glds_contrast(IMAGE *m, double *contrast); VIPS_DEPRECATED int im_glds_entropy(IMAGE *m, double *entropy); VIPS_DEPRECATED int im_glds_mean(IMAGE *m, double *mean); VIPS_DEPRECATED int im_dif_std(IMAGE *im, int xpos, int ypos, int xsize, int ysize, int dx, int dy, double *pmean, double *pstd); VIPS_DEPRECATED int im_simcontr(IMAGE *out, int xsize, int ysize); VIPS_DEPRECATED int im_spatres(IMAGE *in, IMAGE *out, int step); VIPS_DEPRECATED int im_stretch3(IMAGE *in, IMAGE *out, double dx, double dy); /* Renamed operations. */ /* arithmetic */ VIPS_DEPRECATED_FOR(vips_remainder_const) int im_remainderconst_vec(IMAGE *in, IMAGE *out, int n, double *c); /* boolean */ VIPS_DEPRECATED_FOR(vips_andimage_const1) int im_andconst(IMAGE *, IMAGE *, double); VIPS_DEPRECATED_FOR(vips_andimage_const) int im_and_vec(IMAGE *, IMAGE *, int, double *); VIPS_DEPRECATED_FOR(vips_orimage_const1) int im_orconst(IMAGE *, IMAGE *, double); VIPS_DEPRECATED_FOR(vips_orimage_const) int im_or_vec(IMAGE *, IMAGE *, int, double *); VIPS_DEPRECATED_FOR(vips_eorimage_const1) int im_eorconst(IMAGE *, IMAGE *, double); VIPS_DEPRECATED_FOR(vips_eorimage_const) int im_eor_vec(IMAGE *, IMAGE *, int, double *); /* mosaicing */ VIPS_DEPRECATED_FOR(vips_affine) int im_affine(IMAGE *in, IMAGE *out, double a, double b, double c, double d, double dx, double dy, int ox, int oy, int ow, int oh); VIPS_DEPRECATED_FOR(vips_similarity) int im_similarity(IMAGE *in, IMAGE *out, double a, double b, double dx, double dy); VIPS_DEPRECATED_FOR(vips_similarity) int im_similarity_area(IMAGE *in, IMAGE *out, double a, double b, double dx, double dy, int ox, int oy, int ow, int oh); /* colour */ VIPS_DEPRECATED_FOR(vips_icc_export) int im_icc_export(IMAGE *in, IMAGE *out, const char *output_profile_filename, int intent); /* conversion */ VIPS_DEPRECATED_FOR(vips_cast) int im_clip2dcm(IMAGE *in, IMAGE *out); VIPS_DEPRECATED_FOR(vips_cast) int im_clip2cm(IMAGE *in, IMAGE *out); VIPS_DEPRECATED_FOR(vips_cast) int im_clip2us(IMAGE *in, IMAGE *out); VIPS_DEPRECATED_FOR(vips_cast) int im_clip2ui(IMAGE *in, IMAGE *out); VIPS_DEPRECATED_FOR(vips_cast) int im_clip2s(IMAGE *in, IMAGE *out); VIPS_DEPRECATED_FOR(vips_cast) int im_clip2i(IMAGE *in, IMAGE *out); VIPS_DEPRECATED_FOR(vips_cast) int im_clip2d(IMAGE *in, IMAGE *out); VIPS_DEPRECATED_FOR(vips_cast) int im_clip2f(IMAGE *in, IMAGE *out); VIPS_DEPRECATED_FOR(vips_cast) int im_clip2c(IMAGE *in, IMAGE *out); VIPS_DEPRECATED int im_slice(IMAGE *in, IMAGE *out, double, double); VIPS_DEPRECATED int im_thresh(IMAGE *in, IMAGE *out, double); VIPS_DEPRECATED_FOR(printf) int im_print(const char *message); VIPS_DEPRECATED int im_convsub(IMAGE *in, IMAGE *out, INTMASK *mask, int xskip, int yskip); VIPS_DEPRECATED int im_bernd(const char *tiffname, int x, int y, int w, int h); VIPS_DEPRECATED int im_resize_linear(IMAGE *, IMAGE *, int, int); VIPS_DEPRECATED_FOR(vips_convf) int im_convf(IMAGE *in, IMAGE *out, DOUBLEMASK *mask); VIPS_DEPRECATED_FOR(vips_convsep) int im_convsepf(IMAGE *in, IMAGE *out, DOUBLEMASK *mask); VIPS_DEPRECATED int im_conv_raw(IMAGE *in, IMAGE *out, INTMASK *mask); VIPS_DEPRECATED int im_convf_raw(IMAGE *in, IMAGE *out, DOUBLEMASK *mask); VIPS_DEPRECATED int im_convsep_raw(IMAGE *in, IMAGE *out, INTMASK *mask); VIPS_DEPRECATED int im_convsepf_raw(IMAGE *in, IMAGE *out, DOUBLEMASK *mask); VIPS_DEPRECATED int im_fastcor_raw(IMAGE *in, IMAGE *ref, IMAGE *out); VIPS_DEPRECATED int im_spcor_raw(IMAGE *in, IMAGE *ref, IMAGE *out); VIPS_DEPRECATED int im_gradcor_raw(IMAGE *in, IMAGE *ref, IMAGE *out); VIPS_DEPRECATED int im_contrast_surface_raw(IMAGE *in, IMAGE *out, int half_win_size, int spacing); VIPS_DEPRECATED_FOR(vips_stdif) int im_stdif_raw(IMAGE *in, IMAGE *out, double a, double m0, double b, double s0, int xwin, int ywin); VIPS_DEPRECATED_FOR(vips_hist_local) int im_lhisteq_raw(IMAGE *in, IMAGE *out, int xwin, int ywin); VIPS_DEPRECATED_FOR(vips_morph) int im_erode_raw(IMAGE *in, IMAGE *out, INTMASK *m); VIPS_DEPRECATED_FOR(vips_morph) int im_dilate_raw(IMAGE *in, IMAGE *out, INTMASK *m); VIPS_DEPRECATED int im_rank_raw(IMAGE *in, IMAGE *out, int xsize, int ysize, int order); /* inplace */ VIPS_DEPRECATED_FOR(vips_draw_circle) int im_circle(IMAGE *im, int cx, int cy, int radius, int intensity); VIPS_DEPRECATED_FOR(vips_draw_line1) int im_line(IMAGE *, int, int, int, int, int); VIPS_DEPRECATED_FOR(vips_labelregions) int im_segment(IMAGE *test, IMAGE *mask, int *segments); VIPS_DEPRECATED_FOR(vips_draw_rect) int im_paintrect(IMAGE *im, VipsRect *r, PEL *ink); VIPS_DEPRECATED_FOR(vips_draw_image) int im_insertplace(IMAGE *main, IMAGE *sub, int x, int y); VIPS_DEPRECATED_FOR(vips_draw_flood) int im_flood_copy(IMAGE *in, IMAGE *out, int x, int y, PEL *ink); VIPS_DEPRECATED_FOR(vips_draw_flood) int im_flood_blob_copy(IMAGE *in, IMAGE *out, int x, int y, PEL *ink); VIPS_DEPRECATED_FOR(vips_draw_flood) int im_flood_other_copy(IMAGE *test, IMAGE *mark, IMAGE *out, int x, int y, int serial); VIPS_DEPRECATED_FOR(vips_draw_flood) int im_flood(IMAGE *im, int x, int y, PEL *ink, VipsRect *dout); VIPS_DEPRECATED_FOR(vips_draw_flood) int im_flood_blob(IMAGE *im, int x, int y, PEL *ink, VipsRect *dout); VIPS_DEPRECATED_FOR(vips_draw_flood) int im_flood_other(IMAGE *test, IMAGE *mark, int x, int y, int serial, VipsRect *dout); VIPS_DEPRECATED_FOR(vips_draw_line) int im_fastline(IMAGE *im, int x1, int y1, int x2, int y2, PEL *pel); VIPS_DEPRECATED_FOR(vips_draw_line) int im_fastlineuser(IMAGE *im, int x1, int y1, int x2, int y2, VipsPlotFn fn, void *client1, void *client2, void *client3); VIPS_DEPRECATED_FOR(vips_draw_mask) int im_plotmask(IMAGE *im, int ix, int iy, PEL *ink, PEL *mask, VipsRect *r); VIPS_DEPRECATED_FOR(vips_getpoint) int im_readpoint(IMAGE *im, int x, int y, PEL *pel); VIPS_DEPRECATED_FOR(vips_draw_point) int im_plotpoint(IMAGE *im, int x, int y, PEL *pel); VIPS_DEPRECATED_FOR(vips_draw_smudge) int im_smudge(IMAGE *image, int ix, int iy, VipsRect *r); VIPS_DEPRECATED int im_smear(IMAGE *im, int ix, int iy, VipsRect *r); VIPS_DEPRECATED_FOR(g_warning) void vips_warn(const char *domain, const char *fmt, ...) G_GNUC_PRINTF(2, 3); VIPS_DEPRECATED_FOR(g_warning) void vips_vwarn(const char *domain, const char *fmt, va_list ap); VIPS_DEPRECATED void vips_info_set(gboolean info); VIPS_DEPRECATED_FOR(g_info) void vips_info(const char *domain, const char *fmt, ...) G_GNUC_PRINTF(2, 3); VIPS_DEPRECATED_FOR(g_info) void vips_vinfo(const char *domain, const char *fmt, va_list ap); VIPS_DEPRECATED_FOR(vips_autorot) VipsAngle vips_autorot_get_angle(VipsImage *image); VIPS_DEPRECATED_FOR(vips_thread_isvips) gboolean vips_thread_isworker(void); /* iofuncs */ VIPS_DEPRECATED_FOR(g_free) int vips_free(void *buf); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*IM_ALMOSTDEPRECATED_H*/ libvips-8.15.1/libvips/include/vips/arithmetic.h000066400000000000000000000407321454007373500216520ustar00rootroot00000000000000/* Headers for arithmetic * * 30/6/09 * - from proto.h */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_ARITHMETIC_H #define VIPS_ARITHMETIC_H #include #include #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ /** * VipsOperationMath: * @VIPS_OPERATION_MATH_SIN: sin(), angles in degrees * @VIPS_OPERATION_MATH_COS: cos(), angles in degrees * @VIPS_OPERATION_MATH_TAN: tan(), angles in degrees * @VIPS_OPERATION_MATH_ASIN: asin(), angles in degrees * @VIPS_OPERATION_MATH_ACOS: acos(), angles in degrees * @VIPS_OPERATION_MATH_ATAN: atan(), angles in degrees * @VIPS_OPERATION_MATH_LOG: log base e * @VIPS_OPERATION_MATH_LOG10: log base 10 * @VIPS_OPERATION_MATH_EXP: e to the something * @VIPS_OPERATION_MATH_EXP10: 10 to the something * @VIPS_OPERATION_MATH_SINH: sinh(), angles in radians * @VIPS_OPERATION_MATH_COSH: cosh(), angles in radians * @VIPS_OPERATION_MATH_TANH: tanh(), angles in radians * @VIPS_OPERATION_MATH_ASINH: asinh(), angles in radians * @VIPS_OPERATION_MATH_ACOSH: acosh(), angles in radians * @VIPS_OPERATION_MATH_ATANH: atanh(), angles in radians * * See also: vips_math(). */ typedef enum { VIPS_OPERATION_MATH_SIN, VIPS_OPERATION_MATH_COS, VIPS_OPERATION_MATH_TAN, VIPS_OPERATION_MATH_ASIN, VIPS_OPERATION_MATH_ACOS, VIPS_OPERATION_MATH_ATAN, VIPS_OPERATION_MATH_LOG, VIPS_OPERATION_MATH_LOG10, VIPS_OPERATION_MATH_EXP, VIPS_OPERATION_MATH_EXP10, VIPS_OPERATION_MATH_SINH, VIPS_OPERATION_MATH_COSH, VIPS_OPERATION_MATH_TANH, VIPS_OPERATION_MATH_ASINH, VIPS_OPERATION_MATH_ACOSH, VIPS_OPERATION_MATH_ATANH, VIPS_OPERATION_MATH_LAST } VipsOperationMath; /** * VipsOperationMath2: * @VIPS_OPERATION_MATH2_POW: pow(left, right) * @VIPS_OPERATION_MATH2_WOP: pow(right, left) * @VIPS_OPERATION_MATH2_ATAN2: atan2(left, right) * * See also: vips_math(). */ typedef enum { VIPS_OPERATION_MATH2_POW, VIPS_OPERATION_MATH2_WOP, VIPS_OPERATION_MATH2_ATAN2, VIPS_OPERATION_MATH2_LAST } VipsOperationMath2; /** * VipsOperationRound: * @VIPS_OPERATION_ROUND_RINT: round to nearest * @VIPS_OPERATION_ROUND_FLOOR: largest integral value not greater than * @VIPS_OPERATION_ROUND_CEIL: the smallest integral value not less than * * See also: vips_round(). */ typedef enum { VIPS_OPERATION_ROUND_RINT, VIPS_OPERATION_ROUND_CEIL, VIPS_OPERATION_ROUND_FLOOR, VIPS_OPERATION_ROUND_LAST } VipsOperationRound; /** * VipsOperationRelational: * @VIPS_OPERATION_RELATIONAL_EQUAL: == * @VIPS_OPERATION_RELATIONAL_NOTEQ: != * @VIPS_OPERATION_RELATIONAL_LESS: < * @VIPS_OPERATION_RELATIONAL_LESSEQ: <= * @VIPS_OPERATION_RELATIONAL_MORE: > * @VIPS_OPERATION_RELATIONAL_MOREEQ: >= * * See also: vips_relational(). */ typedef enum { VIPS_OPERATION_RELATIONAL_EQUAL, VIPS_OPERATION_RELATIONAL_NOTEQ, VIPS_OPERATION_RELATIONAL_LESS, VIPS_OPERATION_RELATIONAL_LESSEQ, VIPS_OPERATION_RELATIONAL_MORE, VIPS_OPERATION_RELATIONAL_MOREEQ, VIPS_OPERATION_RELATIONAL_LAST } VipsOperationRelational; /** * VipsOperationBoolean: * @VIPS_OPERATION_BOOLEAN_AND: & * @VIPS_OPERATION_BOOLEAN_OR: | * @VIPS_OPERATION_BOOLEAN_EOR: ^ * @VIPS_OPERATION_BOOLEAN_LSHIFT: >> * @VIPS_OPERATION_BOOLEAN_RSHIFT: << * * See also: vips_boolean(). */ typedef enum { VIPS_OPERATION_BOOLEAN_AND, VIPS_OPERATION_BOOLEAN_OR, VIPS_OPERATION_BOOLEAN_EOR, VIPS_OPERATION_BOOLEAN_LSHIFT, VIPS_OPERATION_BOOLEAN_RSHIFT, VIPS_OPERATION_BOOLEAN_LAST } VipsOperationBoolean; /** * VipsOperationComplex: * @VIPS_OPERATION_COMPLEX_POLAR: convert to polar coordinates * @VIPS_OPERATION_COMPLEX_RECT: convert to rectangular coordinates * @VIPS_OPERATION_COMPLEX_CONJ: complex conjugate * * See also: vips_complex(). */ typedef enum { VIPS_OPERATION_COMPLEX_POLAR, VIPS_OPERATION_COMPLEX_RECT, VIPS_OPERATION_COMPLEX_CONJ, VIPS_OPERATION_COMPLEX_LAST } VipsOperationComplex; /** * VipsOperationComplex2: * @VIPS_OPERATION_COMPLEX2_CROSS_PHASE: convert to polar coordinates * * See also: vips_complex2(). */ typedef enum { VIPS_OPERATION_COMPLEX2_CROSS_PHASE, VIPS_OPERATION_COMPLEX2_LAST } VipsOperationComplex2; /** * VipsOperationComplexget: * @VIPS_OPERATION_COMPLEXGET_REAL: get real component * @VIPS_OPERATION_COMPLEXGET_IMAG: get imaginary component * * See also: vips_complexget(). */ typedef enum { VIPS_OPERATION_COMPLEXGET_REAL, VIPS_OPERATION_COMPLEXGET_IMAG, VIPS_OPERATION_COMPLEXGET_LAST } VipsOperationComplexget; VIPS_API int vips_add(VipsImage *left, VipsImage *right, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_sum(VipsImage **in, VipsImage **out, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_subtract(VipsImage *in1, VipsImage *in2, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_multiply(VipsImage *left, VipsImage *right, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_divide(VipsImage *left, VipsImage *right, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_linear(VipsImage *in, VipsImage **out, const double *a, const double *b, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_linear1(VipsImage *in, VipsImage **out, double a, double b, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_remainder(VipsImage *left, VipsImage *right, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_remainder_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_remainder_const1(VipsImage *in, VipsImage **out, double c, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_invert(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_abs(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_sign(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_round(VipsImage *in, VipsImage **out, VipsOperationRound round, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_floor(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_ceil(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_rint(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_math(VipsImage *in, VipsImage **out, VipsOperationMath math, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_sin(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_cos(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_tan(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_asin(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_acos(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_atan(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_exp(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_exp10(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_log(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_log10(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_sinh(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_cosh(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_tanh(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_asinh(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_acosh(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_atanh(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_complex(VipsImage *in, VipsImage **out, VipsOperationComplex cmplx, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_polar(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_rect(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_conj(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_complex2(VipsImage *left, VipsImage *right, VipsImage **out, VipsOperationComplex2 cmplx, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_cross_phase(VipsImage *left, VipsImage *right, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_complexget(VipsImage *in, VipsImage **out, VipsOperationComplexget get, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_real(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_imag(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_complexform(VipsImage *left, VipsImage *right, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_relational(VipsImage *left, VipsImage *right, VipsImage **out, VipsOperationRelational relational, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_equal(VipsImage *left, VipsImage *right, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_notequal(VipsImage *left, VipsImage *right, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_less(VipsImage *left, VipsImage *right, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_lesseq(VipsImage *left, VipsImage *right, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_more(VipsImage *left, VipsImage *right, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_moreeq(VipsImage *left, VipsImage *right, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_relational_const(VipsImage *in, VipsImage **out, VipsOperationRelational relational, const double *c, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_equal_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_notequal_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_less_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_lesseq_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_more_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_moreeq_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_relational_const1(VipsImage *in, VipsImage **out, VipsOperationRelational relational, double c, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_equal_const1(VipsImage *in, VipsImage **out, double c, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_notequal_const1(VipsImage *in, VipsImage **out, double c, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_less_const1(VipsImage *in, VipsImage **out, double c, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_lesseq_const1(VipsImage *in, VipsImage **out, double c, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_more_const1(VipsImage *in, VipsImage **out, double c, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_moreeq_const1(VipsImage *in, VipsImage **out, double c, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_boolean(VipsImage *left, VipsImage *right, VipsImage **out, VipsOperationBoolean boolean, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_andimage(VipsImage *left, VipsImage *right, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_orimage(VipsImage *left, VipsImage *right, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_eorimage(VipsImage *left, VipsImage *right, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_lshift(VipsImage *left, VipsImage *right, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_rshift(VipsImage *left, VipsImage *right, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_boolean_const(VipsImage *in, VipsImage **out, VipsOperationBoolean boolean, const double *c, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_andimage_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_orimage_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_eorimage_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_lshift_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_rshift_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_boolean_const1(VipsImage *in, VipsImage **out, VipsOperationBoolean boolean, double c, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_andimage_const1(VipsImage *in, VipsImage **out, double c, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_orimage_const1(VipsImage *in, VipsImage **out, double c, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_eorimage_const1(VipsImage *in, VipsImage **out, double c, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_lshift_const1(VipsImage *in, VipsImage **out, double c, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_rshift_const1(VipsImage *in, VipsImage **out, double c, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_math2(VipsImage *left, VipsImage *right, VipsImage **out, VipsOperationMath2 math2, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_pow(VipsImage *left, VipsImage *right, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_wop(VipsImage *left, VipsImage *right, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_atan2(VipsImage *left, VipsImage *right, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_math2_const(VipsImage *in, VipsImage **out, VipsOperationMath2 math2, const double *c, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_pow_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_wop_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_atan2_const(VipsImage *in, VipsImage **out, const double *c, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_math2_const1(VipsImage *in, VipsImage **out, VipsOperationMath2 math2, double c, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_pow_const1(VipsImage *in, VipsImage **out, double c, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_wop_const1(VipsImage *in, VipsImage **out, double c, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_atan2_const1(VipsImage *in, VipsImage **out, double c, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_avg(VipsImage *in, double *out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_deviate(VipsImage *in, double *out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_min(VipsImage *in, double *out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_max(VipsImage *in, double *out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_stats(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_measure(VipsImage *in, VipsImage **out, int h, int v, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_find_trim(VipsImage *in, int *left, int *top, int *width, int *height, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_getpoint(VipsImage *in, double **vector, int *n, int x, int y, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_hist_find(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_hist_find_ndim(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_hist_find_indexed(VipsImage *in, VipsImage *index, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_hough_line(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_hough_circle(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_project(VipsImage *in, VipsImage **columns, VipsImage **rows, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_profile(VipsImage *in, VipsImage **columns, VipsImage **rows, ...) G_GNUC_NULL_TERMINATED; #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_ARITHMETIC_H*/ libvips-8.15.1/libvips/include/vips/basic.h000066400000000000000000000051171454007373500206000ustar00rootroot00000000000000/* A few basic types needed everywhere. * * 27/10/11 * - from type.h */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_BASIC_H #define VIPS_BASIC_H /* Defined in config.h */ #ifdef _VIPS_PUBLIC #define VIPS_API _VIPS_PUBLIC extern #else #define VIPS_API extern #endif /* VIPS_DISABLE_DEPRECATION_WARNINGS: * * Disable deprecation warnings from VIPS API. * * Must be defined before including `vips/vips.h`. */ #ifdef VIPS_DISABLE_DEPRECATION_WARNINGS #define VIPS_DEPRECATED VIPS_API #define VIPS_DEPRECATED_FOR(f) VIPS_API #else #define VIPS_DEPRECATED G_DEPRECATED VIPS_API #define VIPS_DEPRECATED_FOR(f) G_DEPRECATED_FOR(f) VIPS_API #endif #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ /** * VipsPel: * * A picture element. Cast this to whatever the associated VipsBandFormat says * to get the value. */ typedef unsigned char VipsPel; /* Also used for eg. vips_local() and friends. */ typedef int (*VipsCallbackFn)(void *a, void *b); /* Like GFunc, but return a value. */ typedef void *(*VipsSListMap2Fn)(void *item, void *a, void *b); typedef void *(*VipsSListMap4Fn)(void *item, void *a, void *b, void *c, void *d); typedef void *(*VipsSListFold2Fn)(void *item, void *a, void *b, void *c); typedef enum { VIPS_PRECISION_INTEGER, VIPS_PRECISION_FLOAT, VIPS_PRECISION_APPROXIMATE, VIPS_PRECISION_LAST } VipsPrecision; /* Just for testing. */ VIPS_API char *vips_path_filename7(const char *path); VIPS_API char *vips_path_mode7(const char *path); struct _VipsImage; typedef struct _VipsImage VipsImage; struct _VipsRegion; typedef struct _VipsRegion VipsRegion; struct _VipsBuf; typedef struct _VipsBuf VipsBuf; struct _VipsSource; typedef struct _VipsSource VipsSource; struct _VipsTarget; typedef struct _VipsTarget VipsTarget; #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_BASIC_H*/ libvips-8.15.1/libvips/include/vips/buf.h000066400000000000000000000062161454007373500202740ustar00rootroot00000000000000/* A static string buffer, with overflow protection. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_BUF_H #define VIPS_BUF_H #include #include #include #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ /* A string in the process of being written to ... multiple calls to * vips_buf_append add to it. On overflow append "..." and block further * writes. */ struct _VipsBuf { /* All fields are private. */ /*< private >*/ char *base; /* String base */ int mx; /* Maximum length */ int i; /* Current write point */ gboolean full; /* String has filled, block writes */ int lasti; /* For read-recent */ gboolean dynamic; /* We own the string with malloc() */ }; #define VIPS_BUF_STATIC(TEXT) \ { \ &TEXT[0], sizeof(TEXT), 0, FALSE, 0, FALSE \ } /* Init and append to one of the above. */ VIPS_API void vips_buf_rewind(VipsBuf *buf); VIPS_API void vips_buf_destroy(VipsBuf *buf); VIPS_API void vips_buf_init(VipsBuf *buf); VIPS_API void vips_buf_set_static(VipsBuf *buf, char *base, int mx); VIPS_API void vips_buf_set_dynamic(VipsBuf *buf, int mx); VIPS_API void vips_buf_init_static(VipsBuf *buf, char *base, int mx); VIPS_API void vips_buf_init_dynamic(VipsBuf *buf, int mx); VIPS_API gboolean vips_buf_appendns(VipsBuf *buf, const char *str, int sz); VIPS_API gboolean vips_buf_appends(VipsBuf *buf, const char *str); VIPS_API gboolean vips_buf_appendf(VipsBuf *buf, const char *fmt, ...) G_GNUC_PRINTF(2, 3); VIPS_API gboolean vips_buf_vappendf(VipsBuf *buf, const char *fmt, va_list ap); VIPS_API gboolean vips_buf_appendc(VipsBuf *buf, char ch); VIPS_API gboolean vips_buf_appendsc(VipsBuf *buf, gboolean quote, const char *str); VIPS_API gboolean vips_buf_appendgv(VipsBuf *buf, GValue *value); VIPS_API gboolean vips_buf_append_size(VipsBuf *buf, size_t n); VIPS_API gboolean vips_buf_removec(VipsBuf *buf, char ch); VIPS_API gboolean vips_buf_change(VipsBuf *buf, const char *o, const char *n); VIPS_API gboolean vips_buf_is_empty(VipsBuf *buf); VIPS_API gboolean vips_buf_is_full(VipsBuf *buf); VIPS_API const char *vips_buf_all(VipsBuf *buf); VIPS_API const char *vips_buf_firstline(VipsBuf *buf); VIPS_API gboolean vips_buf_appendg(VipsBuf *buf, double g); VIPS_API gboolean vips_buf_appendd(VipsBuf *buf, int d); VIPS_API int vips_buf_len(VipsBuf *buf); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_BUF_H*/ libvips-8.15.1/libvips/include/vips/colour.h000066400000000000000000000172641454007373500210300ustar00rootroot00000000000000/* Definitions for VIPS colour package. * * J.Cupitt, 8/4/93 * 15/7/96 JC * - C++ stuff added * 20/2/98 JC * - new display calibration added * 26/9/05 * - added IM_ prefix to colour temps */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_COLOUR_H #define VIPS_COLOUR_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ /* Areas under curves for Dxx. 2 degree observer. */ #define VIPS_D93_X0 (89.7400) #define VIPS_D93_Y0 (100.0) #define VIPS_D93_Z0 (130.7700) #define VIPS_D75_X0 (94.9682) #define VIPS_D75_Y0 (100.0) #define VIPS_D75_Z0 (122.5710) /* D65 temp 6504. */ #define VIPS_D65_X0 (95.0470) #define VIPS_D65_Y0 (100.0) #define VIPS_D65_Z0 (108.8827) #define VIPS_D55_X0 (95.6831) #define VIPS_D55_Y0 (100.0) #define VIPS_D55_Z0 (92.0871) #define VIPS_D50_X0 (96.4250) #define VIPS_D50_Y0 (100.0) #define VIPS_D50_Z0 (82.4680) /* A temp 2856k. */ #define VIPS_A_X0 (109.8503) #define VIPS_A_Y0 (100.0) #define VIPS_A_Z0 (35.5849) /* B temp 4874k. */ #define VIPS_B_X0 (99.0720) #define VIPS_B_Y0 (100.0) #define VIPS_B_Z0 (85.2230) /* C temp 6774k. */ #define VIPS_C_X0 (98.0700) #define VIPS_C_Y0 (100.0) #define VIPS_C_Z0 (118.2300) #define VIPS_E_X0 (100.0) #define VIPS_E_Y0 (100.0) #define VIPS_E_Z0 (100.0) #define VIPS_D3250_X0 (105.6590) #define VIPS_D3250_Y0 (100.0) #define VIPS_D3250_Z0 (45.8501) typedef enum { VIPS_INTENT_PERCEPTUAL = 0, VIPS_INTENT_RELATIVE, VIPS_INTENT_SATURATION, VIPS_INTENT_ABSOLUTE, VIPS_INTENT_LAST } VipsIntent; typedef enum { VIPS_PCS_LAB, VIPS_PCS_XYZ, VIPS_PCS_LAST } VipsPCS; VIPS_API gboolean vips_colourspace_issupported(const VipsImage *image); VIPS_API int vips_colourspace(VipsImage *in, VipsImage **out, VipsInterpretation space, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_LabQ2sRGB(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_rad2float(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_float2rad(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_LabS2LabQ(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_LabQ2LabS(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_LabQ2Lab(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_Lab2LabQ(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_LCh2Lab(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_Lab2LCh(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_Yxy2Lab(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_CMC2XYZ(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_Lab2XYZ(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_XYZ2Lab(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_XYZ2scRGB(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_scRGB2sRGB(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_scRGB2BW(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_sRGB2scRGB(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_scRGB2XYZ(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_HSV2sRGB(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_sRGB2HSV(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_LCh2CMC(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_CMC2LCh(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_XYZ2Yxy(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_Yxy2XYZ(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_LabS2Lab(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_Lab2LabS(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_CMYK2XYZ(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_XYZ2CMYK(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_profile_load(const char *name, VipsBlob **profile, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_icc_present(void); VIPS_API int vips_icc_transform(VipsImage *in, VipsImage **out, const char *output_profile, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_icc_import(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_icc_export(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_icc_ac2rc(VipsImage *in, VipsImage **out, const char *profile_filename); VIPS_API gboolean vips_icc_is_compatible_profile(VipsImage *image, const void *data, size_t data_length); VIPS_API int vips_dE76(VipsImage *left, VipsImage *right, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_dE00(VipsImage *left, VipsImage *right, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_dECMC(VipsImage *left, VipsImage *right, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API void vips_col_Lab2XYZ(float L, float a, float b, float *X, float *Y, float *Z); VIPS_API void vips_col_XYZ2Lab(float X, float Y, float Z, float *L, float *a, float *b); VIPS_API double vips_col_ab2h(double a, double b); VIPS_API void vips_col_ab2Ch(float a, float b, float *C, float *h); VIPS_API void vips_col_Ch2ab(float C, float h, float *a, float *b); VIPS_API float vips_col_L2Lcmc(float L); VIPS_API float vips_col_C2Ccmc(float C); VIPS_API float vips_col_Ch2hcmc(float C, float h); VIPS_API void vips_col_make_tables_CMC(void); VIPS_API float vips_col_Lcmc2L(float Lcmc); VIPS_API float vips_col_Ccmc2C(float Ccmc); VIPS_API float vips_col_Chcmc2h(float C, float hcmc); VIPS_API int vips_col_sRGB2scRGB_8(int r, int g, int b, float *R, float *G, float *B); VIPS_API int vips_col_sRGB2scRGB_16(int r, int g, int b, float *R, float *G, float *B); VIPS_API int vips_col_sRGB2scRGB_8_noclip(int r, int g, int b, float *R, float *G, float *B); VIPS_API int vips_col_sRGB2scRGB_16_noclip(int r, int g, int b, float *R, float *G, float *B); VIPS_API int vips_col_scRGB2XYZ(float R, float G, float B, float *X, float *Y, float *Z); VIPS_API int vips_col_XYZ2scRGB(float X, float Y, float Z, float *R, float *G, float *B); VIPS_API int vips_col_scRGB2sRGB_8(float R, float G, float B, int *r, int *g, int *b, int *og); VIPS_API int vips_col_scRGB2sRGB_16(float R, float G, float B, int *r, int *g, int *b, int *og); VIPS_API int vips_col_scRGB2BW_16(float R, float G, float B, int *g, int *og); VIPS_API int vips_col_scRGB2BW_8(float R, float G, float B, int *g, int *og); VIPS_API float vips_pythagoras(float L1, float a1, float b1, float L2, float a2, float b2); VIPS_API float vips_col_dE00( float L1, float a1, float b1, float L2, float a2, float b2); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_COLOUR_H*/ libvips-8.15.1/libvips/include/vips/connection.h000066400000000000000000000400121454007373500216470ustar00rootroot00000000000000/* A byte source/sink .. it can be a pipe, socket, or perhaps a node.js stream. * * J.Cupitt, 19/6/14 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_CONNECTION_H #define VIPS_CONNECTION_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #define VIPS_TYPE_CONNECTION (vips_connection_get_type()) #define VIPS_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_CONNECTION, VipsConnection)) #define VIPS_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_CONNECTION, VipsConnectionClass)) #define VIPS_IS_CONNECTION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_CONNECTION)) #define VIPS_IS_CONNECTION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_CONNECTION)) #define VIPS_CONNECTION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_CONNECTION, VipsConnectionClass)) /* Communicate with something like a socket or pipe. */ typedef struct _VipsConnection { VipsObject parent_object; /*< private >*/ /* Read/write this fd if connected to a system pipe/socket. Override * ::read() and ::write() to do something else. */ int descriptor; /* A descriptor we close with vips_tracked_close(). */ int tracked_descriptor; /* A descriptor we close with close(). */ int close_descriptor; /* If descriptor is a file, the filename we opened. Handy for error * messages. */ char *filename; } VipsConnection; typedef struct _VipsConnectionClass { VipsObjectClass parent_class; } VipsConnectionClass; VIPS_API GType vips_connection_get_type(void); VIPS_API const char *vips_connection_filename(VipsConnection *connection); VIPS_API const char *vips_connection_nick(VipsConnection *connection); VIPS_API void vips_pipe_read_limit_set(gint64 limit); #define VIPS_TYPE_SOURCE (vips_source_get_type()) #define VIPS_SOURCE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_SOURCE, VipsSource)) #define VIPS_SOURCE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_SOURCE, VipsSourceClass)) #define VIPS_IS_SOURCE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_SOURCE)) #define VIPS_IS_SOURCE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_SOURCE)) #define VIPS_SOURCE_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_SOURCE, VipsSourceClass)) /* Read from something like a socket, file or memory area and present the data * with a unified seek / read / map interface. * * During the header phase, we save data from unseekable sources in a buffer * so readers can rewind and read again. We don't buffer data during the * decode stage. */ struct _VipsSource { VipsConnection parent_object; /* We have two phases: * * During the header phase, we save bytes read from the input (if this * is an unseekable source) so that we can rewind and try again, if * necessary. * * Once we reach decode phase, we no longer support rewind and the * buffer of saved data is discarded. */ gboolean decode; /* TRUE if this input is something like a pipe. These don't support * seek or map -- all you can do is read() bytes sequentially. * * If you attempt to map or get the size of a pipe-style input, it'll * get read entirely into memory. Seeks will cause read up to the seek * point. */ gboolean have_tested_seek; gboolean is_pipe; /* The current read point and length. * * length is -1 for is_pipe sources. * * off_t can be 32 bits on some platforms, so make sure we have a * full 64. */ gint64 read_position; gint64 length; /*< private >*/ /* For sources where we have the whole image in memory (from a memory * buffer, from mmaping the file, from reading the pipe into memory), * a pointer to the start. */ const void *data; /* For is_pipe sources, save data read during header phase here. If * we rewind and try again, serve data from this until it runs out. * * If we need to force the whole pipe into memory, read everything to * this and put a copy of the pointer in data. */ GByteArray *header_bytes; /* Save the first few bytes here for file type sniffing. */ GByteArray *sniff; /* For a memory source, the blob we read from. */ VipsBlob *blob; /* If we mmaped the file, what we need to unmmap on finalize. */ void *mmap_baseaddr; size_t mmap_length; }; typedef struct _VipsSourceClass { VipsConnectionClass parent_class; /* Subclasses can define these to implement other source methods. */ /* Read from the source into the supplied buffer, args exactly as * read(2). Set errno on error. * * We must return gint64, since ssize_t is often defined as unsigned * on Windows. */ gint64 (*read)(VipsSource *, void *, size_t); /* Seek to a certain position, args exactly as lseek(2). Set errno on * error. * * Unseekable sources should always return -1. VipsSource will then * seek by _read()ing bytes into memory as required. * * We have to use int64 rather than off_t, since we must work on * Windows, where off_t can be 32-bits. */ gint64 (*seek)(VipsSource *, gint64, int); } VipsSourceClass; VIPS_API GType vips_source_get_type(void); VIPS_API VipsSource *vips_source_new_from_descriptor(int descriptor); VIPS_API VipsSource *vips_source_new_from_file(const char *filename); VIPS_API VipsSource *vips_source_new_from_blob(VipsBlob *blob); VIPS_API VipsSource *vips_source_new_from_target(VipsTarget *target); VIPS_API VipsSource *vips_source_new_from_memory(const void *data, size_t size); VIPS_API VipsSource *vips_source_new_from_options(const char *options); VIPS_API void vips_source_minimise(VipsSource *source); VIPS_API int vips_source_unminimise(VipsSource *source); VIPS_API int vips_source_decode(VipsSource *source); VIPS_API gint64 vips_source_read(VipsSource *source, void *data, size_t length); VIPS_API gboolean vips_source_is_mappable(VipsSource *source); VIPS_API gboolean vips_source_is_file(VipsSource *source); VIPS_API const void *vips_source_map(VipsSource *source, size_t *length); VIPS_API VipsBlob *vips_source_map_blob(VipsSource *source); VIPS_API gint64 vips_source_seek(VipsSource *source, gint64 offset, int whence); VIPS_API int vips_source_rewind(VipsSource *source); VIPS_API gint64 vips_source_sniff_at_most(VipsSource *source, unsigned char **data, size_t length); VIPS_API unsigned char *vips_source_sniff(VipsSource *source, size_t length); VIPS_API gint64 vips_source_length(VipsSource *source); #define VIPS_TYPE_SOURCE_CUSTOM (vips_source_custom_get_type()) #define VIPS_SOURCE_CUSTOM(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_SOURCE_CUSTOM, VipsSourceCustom)) #define VIPS_SOURCE_CUSTOM_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_SOURCE_CUSTOM, VipsSourceCustomClass)) #define VIPS_IS_SOURCE_CUSTOM(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_SOURCE_CUSTOM)) #define VIPS_IS_SOURCE_CUSTOM_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_SOURCE_CUSTOM)) #define VIPS_SOURCE_CUSTOM_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_SOURCE_CUSTOM, VipsSourceCustomClass)) /* Subclass of source_custom with signals for handlers. This is supposed to be * useful for language bindings. */ typedef struct _VipsSourceCustom { VipsSource parent_object; } VipsSourceCustom; typedef struct _VipsSourceCustomClass { VipsSourceClass parent_class; /* The action signals clients can use to implement read and seek. * We must use gint64 everywhere since there's no G_TYPE_SIZE. */ gint64 (*read)(VipsSourceCustom *, void *, gint64); gint64 (*seek)(VipsSourceCustom *, gint64, int); } VipsSourceCustomClass; VIPS_API GType vips_source_custom_get_type(void); VIPS_API VipsSourceCustom *vips_source_custom_new(void); /* A GInputStream that wraps a VipsSource. This lets us eg. * hook librsvg up to libvips using their GInputStream interface. */ #define VIPS_TYPE_G_INPUT_STREAM (vips_g_input_stream_get_type()) #define VIPS_G_INPUT_STREAM(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_G_INPUT_STREAM, VipsGInputStream)) #define VIPS_G_INPUT_STREAM_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_G_INPUT_STREAM, VipsGInputStreamClass)) #define VIPS_IS_G_INPUT_STREAM(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_G_INPUT_STREAM)) #define VIPS_IS_G_INPUT_STREAM_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_G_INPUT_STREAM)) #define VIPS_G_INPUT_STREAM_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_G_INPUT_STREAM, VipsGInputStreamClass)) typedef struct _VipsGInputStream { GInputStream parent_instance; /*< private >*/ /* The VipsSource we wrap. */ VipsSource *source; } VipsGInputStream; typedef struct _VipsGInputStreamClass { GInputStreamClass parent_class; } VipsGInputStreamClass; VIPS_API GInputStream *vips_g_input_stream_new_from_source(VipsSource *source); /* A VipsSource that wraps a GInputStream. This lets us eg. load PNGs from * GFile objects. */ #define VIPS_TYPE_SOURCE_G_INPUT_STREAM (vips_source_g_input_stream_get_type()) #define VIPS_SOURCE_G_INPUT_STREAM(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_SOURCE_G_INPUT_STREAM, VipsSourceGInputStream)) #define VIPS_SOURCE_G_INPUT_STREAM_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_SOURCE_G_INPUT_STREAM, VipsSourceGInputStreamClass)) #define VIPS_IS_SOURCE_G_INPUT_STREAM(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_SOURCE_G_INPUT_STREAM)) #define VIPS_IS_SOURCE_G_INPUT_STREAM_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_SOURCE_G_INPUT_STREAM)) #define VIPS_SOURCE_G_INPUT_STREAM_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_SOURCE_G_INPUT_STREAM, VipsSourceGInputStreamClass)) typedef struct _VipsSourceGInputStream { VipsSource parent_instance; /*< private >*/ /* The GInputStream we wrap. */ GInputStream *stream; GSeekable *seekable; GFileInfo *info; } VipsSourceGInputStream; typedef struct _VipsSourceGInputStreamClass { VipsSourceClass parent_class; } VipsSourceGInputStreamClass; VIPS_API VipsSourceGInputStream *vips_source_g_input_stream_new(GInputStream *stream); #define VIPS_TYPE_TARGET (vips_target_get_type()) #define VIPS_TARGET(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_TARGET, VipsTarget)) #define VIPS_TARGET_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_TARGET, VipsTargetClass)) #define VIPS_IS_TARGET(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_TARGET)) #define VIPS_IS_TARGET_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_TARGET)) #define VIPS_TARGET_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_TARGET, VipsTargetClass)) /* PNG writes in 8kb chunks, so we need to be a little larger than that. */ #define VIPS_TARGET_BUFFER_SIZE (8500) /* Output to something like a socket, pipe or memory area. */ struct _VipsTarget { VipsConnection parent_object; /*< private >*/ /* This target should write to memory. */ gboolean memory; /* The target has been ended and can no longer be written. */ gboolean ended; /* Write memory output here. We use a GString rather than a * GByteArray since we need eg. g_string_overwrite_len(). * @position tracks the current write position in this. */ GString *memory_buffer; /* And return memory via this blob. */ VipsBlob *blob; /* Buffer small writes here. write_point is the index of the next * character to write. */ unsigned char output_buffer[VIPS_TARGET_BUFFER_SIZE]; int write_point; /* Write position in memory_buffer. */ off_t position; /* Temp targets on the filesystem need deleting, sometimes. */ gboolean delete_on_close; char *delete_on_close_filename; }; typedef struct _VipsTargetClass { VipsConnectionClass parent_class; /* Write to output. Args exactly as write(2). * * We must return gint64, since ssize_t is often defined as unsigned * on Windows. */ gint64 (*write)(VipsTarget *, const void *, size_t); /* Deprecated in favour of ::end. */ void (*finish)(VipsTarget *); /* libtiff needs to be able to seek and read on targets, * unfortunately. * * This will not work for eg. pipes, of course. */ /* Read from the target into the supplied buffer, args exactly as * read(2). Set errno on error. * * We must return gint64, since ssize_t is often defined as unsigned * on Windows. */ gint64 (*read)(VipsTarget *, void *, size_t); /* Seek output. Args exactly as lseek(2). */ off_t (*seek)(VipsTarget *, off_t offset, int whence); /* Output has been generated, so do any clearing up, * eg. copy the bytes we saved in memory to the target blob. */ int (*end)(VipsTarget *); } VipsTargetClass; VIPS_API GType vips_target_get_type(void); VIPS_API VipsTarget *vips_target_new_to_descriptor(int descriptor); VIPS_API VipsTarget *vips_target_new_to_file(const char *filename); VIPS_API VipsTarget *vips_target_new_to_memory(void); VIPS_API VipsTarget *vips_target_new_temp(VipsTarget *target); VIPS_API int vips_target_write(VipsTarget *target, const void *data, size_t length); VIPS_API gint64 vips_target_read(VipsTarget *target, void *buffer, size_t length); VIPS_API off_t vips_target_seek(VipsTarget *target, off_t offset, int whence); VIPS_API int vips_target_end(VipsTarget *target); VIPS_DEPRECATED_FOR(vips_target_end) void vips_target_finish(VipsTarget *target); VIPS_API unsigned char *vips_target_steal(VipsTarget *target, size_t *length); VIPS_API char *vips_target_steal_text(VipsTarget *target); VIPS_API int vips_target_putc(VipsTarget *target, int ch); #define VIPS_TARGET_PUTC(S, C) ( \ (S)->write_point < VIPS_TARGET_BUFFER_SIZE \ ? ((S)->output_buffer[(S)->write_point++] = (C), 0) \ : vips_target_putc((S), (C))) VIPS_API int vips_target_writes(VipsTarget *target, const char *str); VIPS_API int vips_target_writef(VipsTarget *target, const char *fmt, ...) G_GNUC_PRINTF(2, 3); VIPS_API int vips_target_write_amp(VipsTarget *target, const char *str); #define VIPS_TYPE_TARGET_CUSTOM (vips_target_custom_get_type()) #define VIPS_TARGET_CUSTOM(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_TARGET_CUSTOM, VipsTargetCustom)) #define VIPS_TARGET_CUSTOM_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_TARGET_CUSTOM, VipsTargetCustomClass)) #define VIPS_IS_TARGET_CUSTOM(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_TARGET_CUSTOM)) #define VIPS_IS_TARGET_CUSTOM_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_TARGET_CUSTOM)) #define VIPS_TARGET_CUSTOM_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_TARGET_CUSTOM, VipsTargetCustomClass)) #define VIPS_TARGET_CUSTOM_BUFFER_SIZE (4096) /* Output to something like a socket, pipe or memory area. */ typedef struct _VipsTargetCustom { VipsTarget parent_object; } VipsTargetCustom; typedef struct _VipsTargetCustomClass { VipsTargetClass parent_class; /* The action signals clients can use to implement write and finish. * We must use gint64 everywhere since there's no G_TYPE_SIZE. */ gint64 (*write)(VipsTargetCustom *, const void *, gint64); void (*finish)(VipsTargetCustom *); gint64 (*read)(VipsTargetCustom *, void *, gint64); gint64 (*seek)(VipsTargetCustom *, gint64, int); int (*end)(VipsTargetCustom *); } VipsTargetCustomClass; VIPS_API GType vips_target_custom_get_type(void); VIPS_API VipsTargetCustom *vips_target_custom_new(void); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_CONNECTION_H*/ libvips-8.15.1/libvips/include/vips/conversion.h000066400000000000000000000226001454007373500217000ustar00rootroot00000000000000/* conversion.h * * 20/9/09 * - from proto.h */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_CONVERSION_H #define VIPS_CONVERSION_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ typedef enum { VIPS_EXTEND_BLACK, VIPS_EXTEND_COPY, VIPS_EXTEND_REPEAT, VIPS_EXTEND_MIRROR, VIPS_EXTEND_WHITE, VIPS_EXTEND_BACKGROUND, VIPS_EXTEND_LAST } VipsExtend; typedef enum { VIPS_COMPASS_DIRECTION_CENTRE, VIPS_COMPASS_DIRECTION_NORTH, VIPS_COMPASS_DIRECTION_EAST, VIPS_COMPASS_DIRECTION_SOUTH, VIPS_COMPASS_DIRECTION_WEST, VIPS_COMPASS_DIRECTION_NORTH_EAST, VIPS_COMPASS_DIRECTION_SOUTH_EAST, VIPS_COMPASS_DIRECTION_SOUTH_WEST, VIPS_COMPASS_DIRECTION_NORTH_WEST, VIPS_COMPASS_DIRECTION_LAST } VipsCompassDirection; typedef enum { VIPS_DIRECTION_HORIZONTAL, VIPS_DIRECTION_VERTICAL, VIPS_DIRECTION_LAST } VipsDirection; typedef enum { VIPS_ALIGN_LOW, VIPS_ALIGN_CENTRE, VIPS_ALIGN_HIGH, VIPS_ALIGN_LAST } VipsAlign; typedef enum { VIPS_ANGLE_D0, VIPS_ANGLE_D90, VIPS_ANGLE_D180, VIPS_ANGLE_D270, VIPS_ANGLE_LAST } VipsAngle; typedef enum { VIPS_ANGLE45_D0, VIPS_ANGLE45_D45, VIPS_ANGLE45_D90, VIPS_ANGLE45_D135, VIPS_ANGLE45_D180, VIPS_ANGLE45_D225, VIPS_ANGLE45_D270, VIPS_ANGLE45_D315, VIPS_ANGLE45_LAST } VipsAngle45; typedef enum { VIPS_INTERESTING_NONE, VIPS_INTERESTING_CENTRE, VIPS_INTERESTING_ENTROPY, VIPS_INTERESTING_ATTENTION, VIPS_INTERESTING_LOW, VIPS_INTERESTING_HIGH, VIPS_INTERESTING_ALL, VIPS_INTERESTING_LAST } VipsInteresting; typedef enum { VIPS_BLEND_MODE_CLEAR, VIPS_BLEND_MODE_SOURCE, VIPS_BLEND_MODE_OVER, VIPS_BLEND_MODE_IN, VIPS_BLEND_MODE_OUT, VIPS_BLEND_MODE_ATOP, VIPS_BLEND_MODE_DEST, VIPS_BLEND_MODE_DEST_OVER, VIPS_BLEND_MODE_DEST_IN, VIPS_BLEND_MODE_DEST_OUT, VIPS_BLEND_MODE_DEST_ATOP, VIPS_BLEND_MODE_XOR, VIPS_BLEND_MODE_ADD, VIPS_BLEND_MODE_SATURATE, VIPS_BLEND_MODE_MULTIPLY, VIPS_BLEND_MODE_SCREEN, VIPS_BLEND_MODE_OVERLAY, VIPS_BLEND_MODE_DARKEN, VIPS_BLEND_MODE_LIGHTEN, VIPS_BLEND_MODE_COLOUR_DODGE, VIPS_BLEND_MODE_COLOUR_BURN, VIPS_BLEND_MODE_HARD_LIGHT, VIPS_BLEND_MODE_SOFT_LIGHT, VIPS_BLEND_MODE_DIFFERENCE, VIPS_BLEND_MODE_EXCLUSION, VIPS_BLEND_MODE_LAST } VipsBlendMode; VIPS_API int vips_copy(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_tilecache(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_linecache(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_sequential(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_cache(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_copy_file(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_embed(VipsImage *in, VipsImage **out, int x, int y, int width, int height, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_gravity(VipsImage *in, VipsImage **out, VipsCompassDirection direction, int width, int height, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_flip(VipsImage *in, VipsImage **out, VipsDirection direction, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_insert(VipsImage *main, VipsImage *sub, VipsImage **out, int x, int y, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_join(VipsImage *in1, VipsImage *in2, VipsImage **out, VipsDirection direction, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_arrayjoin(VipsImage **in, VipsImage **out, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_extract_area(VipsImage *in, VipsImage **out, int left, int top, int width, int height, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_crop(VipsImage *in, VipsImage **out, int left, int top, int width, int height, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_smartcrop(VipsImage *in, VipsImage **out, int width, int height, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_extract_band(VipsImage *in, VipsImage **out, int band, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_replicate(VipsImage *in, VipsImage **out, int across, int down, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_grid(VipsImage *in, VipsImage **out, int tile_height, int across, int down, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_transpose3d(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_wrap(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_rot(VipsImage *in, VipsImage **out, VipsAngle angle, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_rot90(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_rot180(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_rot270(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_rot45(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API void vips_autorot_remove_angle(VipsImage *image); VIPS_API int vips_autorot(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_zoom(VipsImage *in, VipsImage **out, int xfac, int yfac, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_subsample(VipsImage *in, VipsImage **out, int xfac, int yfac, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_cast(VipsImage *in, VipsImage **out, VipsBandFormat format, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_cast_uchar(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_cast_char(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_cast_ushort(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_cast_short(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_cast_uint(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_cast_int(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_cast_float(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_cast_double(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_cast_complex(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_cast_dpcomplex(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_scale(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_msb(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_byteswap(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_bandjoin(VipsImage **in, VipsImage **out, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_bandjoin2(VipsImage *in1, VipsImage *in2, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_bandjoin_const(VipsImage *in, VipsImage **out, double *c, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_bandjoin_const1(VipsImage *in, VipsImage **out, double c, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_bandrank(VipsImage **in, VipsImage **out, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_bandfold(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_bandunfold(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_bandbool(VipsImage *in, VipsImage **out, VipsOperationBoolean boolean, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_bandand(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_bandor(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_bandeor(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_bandmean(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_recomb(VipsImage *in, VipsImage **out, VipsImage *m, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_ifthenelse(VipsImage *cond, VipsImage *in1, VipsImage *in2, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_switch(VipsImage **tests, VipsImage **out, int n, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_flatten(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_addalpha(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_premultiply(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_unpremultiply(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_composite(VipsImage **in, VipsImage **out, int n, int *mode, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_composite2(VipsImage *base, VipsImage *overlay, VipsImage **out, VipsBlendMode mode, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_falsecolour(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_gamma(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_CONVERSION_H*/ libvips-8.15.1/libvips/include/vips/convolution.h000066400000000000000000000051331454007373500220740ustar00rootroot00000000000000/* convolution.h * * 20/9/09 * - from proto.h */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_CONVOLUTION_H #define VIPS_CONVOLUTION_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ typedef enum { VIPS_COMBINE_MAX, VIPS_COMBINE_SUM, VIPS_COMBINE_MIN, VIPS_COMBINE_LAST } VipsCombine; VIPS_API int vips_conv(VipsImage *in, VipsImage **out, VipsImage *mask, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_convf(VipsImage *in, VipsImage **out, VipsImage *mask, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_convi(VipsImage *in, VipsImage **out, VipsImage *mask, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_conva(VipsImage *in, VipsImage **out, VipsImage *mask, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_convsep(VipsImage *in, VipsImage **out, VipsImage *mask, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_convasep(VipsImage *in, VipsImage **out, VipsImage *mask, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_compass(VipsImage *in, VipsImage **out, VipsImage *mask, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_gaussblur(VipsImage *in, VipsImage **out, double sigma, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_sharpen(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_spcor(VipsImage *in, VipsImage *ref, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_fastcor(VipsImage *in, VipsImage *ref, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_sobel(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_scharr(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_prewitt(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_canny(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_CONVOLUTION_H*/ libvips-8.15.1/libvips/include/vips/create.h000066400000000000000000000106201454007373500207550ustar00rootroot00000000000000/* create.h * * 20/9/09 * - from proto.h */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_CREATE_H #define VIPS_CREATE_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ typedef enum { VIPS_TEXT_WRAP_WORD = 0, VIPS_TEXT_WRAP_CHAR, VIPS_TEXT_WRAP_WORD_CHAR, VIPS_TEXT_WRAP_NONE, VIPS_TEXT_WRAP_LAST } VipsTextWrap; VIPS_API int vips_black(VipsImage **out, int width, int height, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_xyz(VipsImage **out, int width, int height, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_grey(VipsImage **out, int width, int height, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_gaussmat(VipsImage **out, double sigma, double min_ampl, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_logmat(VipsImage **out, double sigma, double min_ampl, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_text(VipsImage **out, const char *text, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_gaussnoise(VipsImage **out, int width, int height, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_eye(VipsImage **out, int width, int height, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_sines(VipsImage **out, int width, int height, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_zone(VipsImage **out, int width, int height, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_identity(VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_buildlut(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_invertlut(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_tonelut(VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_mask_ideal(VipsImage **out, int width, int height, double frequency_cutoff, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_mask_ideal_ring(VipsImage **out, int width, int height, double frequency_cutoff, double ringwidth, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_mask_ideal_band(VipsImage **out, int width, int height, double frequency_cutoff_x, double frequency_cutoff_y, double radius, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_mask_butterworth(VipsImage **out, int width, int height, double order, double frequency_cutoff, double amplitude_cutoff, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_mask_butterworth_ring(VipsImage **out, int width, int height, double order, double frequency_cutoff, double amplitude_cutoff, double ringwidth, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_mask_butterworth_band(VipsImage **out, int width, int height, double order, double frequency_cutoff_x, double frequency_cutoff_y, double radius, double amplitude_cutoff, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_mask_gaussian(VipsImage **out, int width, int height, double frequency_cutoff, double amplitude_cutoff, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_mask_gaussian_ring(VipsImage **out, int width, int height, double frequency_cutoff, double amplitude_cutoff, double ringwidth, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_mask_gaussian_band(VipsImage **out, int width, int height, double frequency_cutoff_x, double frequency_cutoff_y, double radius, double amplitude_cutoff, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_mask_fractal(VipsImage **out, int width, int height, double fractal_dimension, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_fractsurf(VipsImage **out, int width, int height, double fractal_dimension, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_worley(VipsImage **out, int width, int height, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_perlin(VipsImage **out, int width, int height, ...) G_GNUC_NULL_TERMINATED; #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_CREATE_H*/ libvips-8.15.1/libvips/include/vips/dbuf.h000066400000000000000000000047621454007373500204440ustar00rootroot00000000000000/* A dynamic memory buffer that expands as you write. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_DBUF_H #define VIPS_DBUF_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #include /* A buffer in the process of being written to. */ typedef struct _VipsDbuf { /* All fields are private. */ /*< private >*/ /* The current base, and the size of the allocated memory area. */ unsigned char *data; size_t allocated_size; /* The size of the actual data that's been written. This will usually * be <= allocated_size, but always >= write_point. */ size_t data_size; /* The write point. */ size_t write_point; } VipsDbuf; VIPS_API void vips_dbuf_init(VipsDbuf *dbuf); VIPS_API gboolean vips_dbuf_minimum_size(VipsDbuf *dbuf, size_t size); VIPS_API gboolean vips_dbuf_allocate(VipsDbuf *dbuf, size_t size); VIPS_API size_t vips_dbuf_read(VipsDbuf *dbuf, unsigned char *data, size_t size); VIPS_API unsigned char *vips_dbuf_get_write(VipsDbuf *dbuf, size_t *size); VIPS_API gboolean vips_dbuf_write(VipsDbuf *dbuf, const unsigned char *data, size_t size); VIPS_API gboolean vips_dbuf_writef(VipsDbuf *dbuf, const char *fmt, ...) G_GNUC_PRINTF(2, 3); VIPS_API gboolean vips_dbuf_write_amp(VipsDbuf *dbuf, const char *str); VIPS_API void vips_dbuf_reset(VipsDbuf *dbuf); VIPS_API void vips_dbuf_destroy(VipsDbuf *dbuf); VIPS_API gboolean vips_dbuf_seek(VipsDbuf *dbuf, off_t offset, int whence); VIPS_API void vips_dbuf_truncate(VipsDbuf *dbuf); VIPS_API off_t vips_dbuf_tell(VipsDbuf *dbuf); VIPS_API unsigned char *vips_dbuf_string(VipsDbuf *dbuf, size_t *size); VIPS_API unsigned char *vips_dbuf_steal(VipsDbuf *dbuf, size_t *size); #endif /*VIPS_DBUF_H*/ #ifdef __cplusplus } #endif /*__cplusplus*/ libvips-8.15.1/libvips/include/vips/debug.h000066400000000000000000000037011454007373500206020ustar00rootroot00000000000000/* Support for debug.c in iofuncs. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_DEBUG_H #define VIPS_DEBUG_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #ifdef VIPS_DEBUG #define VIPS_DEBUG_MSG(...) \ G_STMT_START \ { \ printf(__VA_ARGS__); \ } \ G_STMT_END #else #define VIPS_DEBUG_MSG(...) \ G_STMT_START \ { \ ; \ } \ G_STMT_END #endif /*VIPS_DEBUG*/ #ifdef VIPS_DEBUG_RED #define VIPS_DEBUG_MSG_RED(...) \ G_STMT_START \ { \ printf("red: " __VA_ARGS__); \ } \ G_STMT_END #else #define VIPS_DEBUG_MSG_RED(...) \ G_STMT_START \ { \ ; \ } \ G_STMT_END #endif /*VIPS_DEBUG_RED*/ #ifdef VIPS_DEBUG_AMBER #define VIPS_DEBUG_MSG_AMBER(...) \ G_STMT_START \ { \ printf("amber: " __VA_ARGS__); \ } \ G_STMT_END #else #define VIPS_DEBUG_MSG_AMBER(...) \ G_STMT_START \ { \ ; \ } \ G_STMT_END #endif /*VIPS_DEBUG_AMBER*/ #ifdef VIPS_DEBUG_GREEN #define VIPS_DEBUG_MSG_GREEN(...) \ G_STMT_START \ { \ printf("green: " __VA_ARGS__); \ } \ G_STMT_END #else #define VIPS_DEBUG_MSG_GREEN(...) \ G_STMT_START \ { \ ; \ } \ G_STMT_END #endif /*VIPS_DEBUG_GREEN*/ #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /* VIPS_DEBUG_H */ libvips-8.15.1/libvips/include/vips/deprecated.h000066400000000000000000000074231454007373500216210ustar00rootroot00000000000000/* Old and broken stuff we do not enable by default * * 30/6/09 * - from vips.h */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef IM_DEPRECATED_H #define IM_DEPRECATED_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ /* On win32, need to override the wingdi defs for these. Yuk! */ #ifdef G_OS_WIN32 #ifdef RGB #undef RGB #endif #ifdef CMYK #undef CMYK #endif #endif /*G_OS_WIN32*/ /* Bits per Band */ #define BBBYTE 8 #define BBSHORT 16 #define BBINT 32 #define BBFLOAT 32 #define BBCOMPLEX 64 /* complex consisting of two floats */ #define BBDOUBLE 64 #define BBDPCOMPLEX 128 /* complex consisting of two doubles */ /* picture Type */ #define MULTIBAND 0 #define B_W 1 #define LUMINACE 2 #define XRAY 3 #define IR 4 #define YUV 5 #define RED_ONLY 6 /* red channel only */ #define GREEN_ONLY 7 /* green channel only */ #define BLUE_ONLY 8 /* blue channel only */ #define POWER_SPECTRUM 9 #define HISTOGRAM 10 #define FOURIER 24 /* Colour spaces. */ #define LUT 11 #define XYZ 12 #define LAB 13 #define CMC 14 #define CMYK 15 #define LABQ 16 #define RGB 17 #define UCS 18 #define LCH 19 #define LABS 21 #define sRGB 22 #define YXY 23 /* BandFmt */ #define FMTNOTSET -1 #define FMTUCHAR 0 /* pels interpreted as unsigned chars */ #define FMTCHAR 1 /* pels interpreted as signed chars */ #define FMTUSHORT 2 /* pels interpreted as unsigned shorts */ #define FMTSHORT 3 /* pels interpreted as signed shorts */ #define FMTUINT 4 /* pels interpreted as unsigned ints */ #define FMTINT 5 /* pels interpreted as signed ints */ #define FMTFLOAT 6 /* pels interpreted as floats */ #define FMTCOMPLEX 7 /* pels interpreted as complex (2 float each) */ #define FMTDOUBLE 8 /* pels interpreted as unsigned double */ #define FMTDPCOMPLEX 9 /* pels interpreted as complex (2 double each)*/ /* Coding type */ #define NOCODING 0 #define COLQUANT 1 #define LABPACK 2 #define LABPACK_COMPRESSED 3 #define RGB_COMPRESSED 4 #define LUM_COMPRESSED 5 /* Compression type */ #define NO_COMPRESSION 0 #define TCSF_COMPRESSION 1 #define JPEG_COMPRESSION 2 #define esize(I) IM_IMAGE_SIZEOF_ELEMENT(I) #define psize(I) IM_IMAGE_SIZEOF_PEL(I) #define lsize(I) IM_IMAGE_SIZEOF_LINE(I) #define niele(I) IM_IMAGE_N_ELEMENTS(I) #define lskip(B) IM_REGION_LSKIP(B) #define nele(B) IM_REGION_N_ELEMENTS(B) #define rsize(B) IM_REGION_SIZEOF_LINE(B) #define addr(B, X, Y) IM_REGION_ADDR(B, X, Y) #ifndef MAX #define MAX(A, B) IM_MAX(A, B) #define MIN(A, B) IM_MIN(A, B) #endif /*MAX*/ #define CLIP(A, V, B) IM_CLIP(A, V, B) #define NEW(IM, A) IM_NEW(IM, A) #define NUMBER(R) IM_NUMBER(R) #define ARRAY(IM, N, T) IM_ARRAY(IM, N, T) #define RINT(R) IM_RINT(R) #define CLIP_UCHAR(V, SEQ) IM_CLIP_UCHAR(V, SEQ) #define CLIP_USHORT(V, SEQ) IM_CLIP_USHORT(V, SEQ) #define CLIP_CHAR(V, SEQ) IM_CLIP_CHAR(V, SEQ) #define CLIP_SHORT(V, SEQ) IM_CLIP_SHORT(V, SEQ) #define CLIP_NONE(V, SEQ) IM_CLIP_NONE(V, SEQ) #define right(R) IM_RECT_RIGHT(R) #define bottom(R) IM_RECT_BOTTOM(R) #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*IM_DEPRECATED_H*/ libvips-8.15.1/libvips/include/vips/dispatch.h000066400000000000000000000242771454007373500213260ustar00rootroot00000000000000/* VIPS function dispatch. * * J. Cupitt, 8/4/93. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef IM_DISPATCH_H #define IM_DISPATCH_H #include #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #include #include /* Type names. You may define your own, but if you use one of these, then * you should use the built-in VIPS type converters. */ #define IM_TYPE_IMAGEVEC "imagevec" /* im_object is ptr to IMAGE[] */ #define IM_TYPE_DOUBLEVEC "doublevec" /* im_object is ptr to double[] */ #define IM_TYPE_INTVEC "intvec" /* im_object is ptr to int[] */ #define IM_TYPE_DOUBLE "double" /* im_object is ptr to double */ #define IM_TYPE_INT "integer" /* 32-bit integer */ #define IM_TYPE_COMPLEX "complex" /* Pair of doubles */ #define IM_TYPE_STRING "string" /* Zero-terminated char array */ #define IM_TYPE_IMASK "intmask" /* Integer mask type */ #define IM_TYPE_DMASK "doublemask" /* Double mask type */ #define IM_TYPE_IMAGE "image" /* IMAGE descriptor */ #define IM_TYPE_DISPLAY "display" /* Display descriptor */ #define IM_TYPE_GVALUE "gvalue" /* GValue wrapper */ #define IM_TYPE_INTERPOLATE "interpolate" /* A subclass of VipsInterpolate */ typedef char *im_arg_type; /* Type of argument id */ /* Internal representation of an argument to an image processing function. */ typedef void *im_object; /* These bits are ored together to make the flags in a type descriptor. * * IM_TYPE_OUTPUT: set to indicate output, otherwise input. If the IM_TYPE_RW * bit is set and IM_TYPE_OUTPUT is not set, both input and output (ie. the * operation side-effects this argument). * * IM_TYPE_ARG: Two ways of making an im_object --- with and without a * command-line string to help you along. Arguments with a string are thing * like IMAGE descriptors, which require a filename to initialise. * Arguments without are things like output numbers, where making the object * simply involves allocating storage. */ typedef enum { IM_TYPE_NONE = 0, /* No flags */ IM_TYPE_OUTPUT = 0x1, /* Output/input object */ IM_TYPE_ARG = 0x2, /* Uses a str arg in construction */ IM_TYPE_RW = 0x4 /* Read-write */ } im_type_flags; /* Initialise, destroy and write objects. The "str" argument to the * init function will not be supplied if this is not an ARG type. The * write function writes to the GString. */ typedef int (*im_init_obj_fn)(im_object *obj, char *str); typedef int (*im_dest_obj_fn)(im_object obj); /* Describe a VIPS type. */ typedef struct { im_arg_type type; /* Type of argument */ int size; /* sizeof(im_object repres.) */ im_type_flags flags; /* Flags */ im_init_obj_fn init; /* Operation functions */ im_dest_obj_fn dest; /* Destroy object */ } im_type_desc; /* Success on an argument. This is called if the image processing function * succeeds and should be used to (for example) print output. */ typedef int (*im_print_obj_fn)(im_object obj); /* Describe a VIPS command argument. */ typedef struct { char *name; /* eg. "width" */ im_type_desc *desc; /* Type description */ im_print_obj_fn print; /* Print some output objects */ } im_arg_desc; /* Type of VIPS dispatch function. */ typedef int (*im_dispatch_fn)(im_object *argv); /* Maximum size of arg table. */ #define IM_MAX_ARGS (1000) /* Flags for functions. These are for information only, and more may be * added. */ typedef enum { IM_FN_NONE = 0, /* No flags set */ IM_FN_PIO = 0x1, /* Is a partial function */ IM_FN_TRANSFORM = 0x2, /* Performs coordinate transformations */ IM_FN_PTOP = 0x4, /* Point-to-point ... can be done with a LUT */ IM_FN_NOCACHE = 0x8 /* Result should not be cached */ } im_fn_flags; /* Describe a VIPS function. */ typedef struct { char *name; /* eg "im_invert" */ char *desc; /* Description - eg "photographic negative" */ im_fn_flags flags; /* Flags for this function */ im_dispatch_fn disp; /* Dispatch */ int argc; /* Number of args */ im_arg_desc *argv; /* Arg table */ } im_function; /* A set of VIPS functions forming a package. */ typedef struct { char *name; /* Package name (eg "arithmetic") */ int nfuncs; /* Number of functions in package */ im_function **table; /* Array of function descriptors */ } im_package; /* Externs for dispatch. */ /* Struct for mask IO to a file. */ typedef struct { char *name; /* Command-line name in */ void *mask; /* Mask --- DOUBLE or INT */ } im_mask_object; /* Struct for doublevec IO */ typedef struct { int n; /* Vector length */ double *vec; /* Vector */ } im_doublevec_object; /* Struct for intvec IO */ typedef struct { int n; /* Vector length */ int *vec; /* Vector */ } im_intvec_object; /* Struct for imagevec IO */ typedef struct { int n; /* Vector length */ IMAGE **vec; /* Vector */ } im_imagevec_object; /* Built-in VIPS types. */ VIPS_DEPRECATED im_type_desc im__input_int; VIPS_DEPRECATED im_type_desc im__input_intvec; VIPS_DEPRECATED im_type_desc im__input_imask; VIPS_DEPRECATED im_type_desc im__output_int; VIPS_DEPRECATED im_type_desc im__output_intvec; VIPS_DEPRECATED im_type_desc im__output_imask; VIPS_DEPRECATED im_type_desc im__input_double; VIPS_DEPRECATED im_type_desc im__input_doublevec; VIPS_DEPRECATED im_type_desc im__input_dmask; VIPS_DEPRECATED im_type_desc im__output_double; VIPS_DEPRECATED im_type_desc im__output_doublevec; VIPS_DEPRECATED im_type_desc im__output_dmask; VIPS_DEPRECATED im_type_desc im__output_dmask_screen; VIPS_DEPRECATED im_type_desc im__output_complex; VIPS_DEPRECATED im_type_desc im__input_string; VIPS_DEPRECATED im_type_desc im__output_string; VIPS_DEPRECATED im_type_desc im__input_imagevec; VIPS_DEPRECATED im_type_desc im__input_image; VIPS_DEPRECATED im_type_desc im__output_image; VIPS_DEPRECATED im_type_desc im__rw_image; VIPS_DEPRECATED im_type_desc im__input_display; VIPS_DEPRECATED im_type_desc im__output_display; VIPS_DEPRECATED im_type_desc im__input_gvalue; VIPS_DEPRECATED im_type_desc im__output_gvalue; VIPS_DEPRECATED im_type_desc im__input_interpolate; /* VIPS print functions. */ VIPS_DEPRECATED int im__iprint(im_object obj); /* int */ VIPS_DEPRECATED int im__ivprint(im_object obj); /* intvec */ VIPS_DEPRECATED int im__dprint(im_object obj); /* double */ VIPS_DEPRECATED int im__dvprint(im_object obj); /* doublevec */ VIPS_DEPRECATED int im__dmsprint(im_object obj); /* DOUBLEMASK as stats */ VIPS_DEPRECATED int im__cprint(im_object obj); /* complex */ VIPS_DEPRECATED int im__sprint(im_object obj); /* string */ VIPS_DEPRECATED int im__displayprint(im_object obj);/* im_col_display */ VIPS_DEPRECATED int im__gprint(im_object obj); /* GValue */ /* Macros for convenient creation. */ #define IM_INPUT_INT(S) \ { \ S, &im__input_int, NULL \ } #define IM_INPUT_INTVEC(S) \ { \ S, &im__input_intvec, NULL \ } #define IM_INPUT_IMASK(S) \ { \ S, &im__input_imask, NULL \ } #define IM_OUTPUT_INT(S) \ { \ S, &im__output_int, im__iprint \ } #define IM_OUTPUT_INTVEC(S) \ { \ S, &im__output_intvec, im__ivprint \ } #define IM_OUTPUT_IMASK(S) \ { \ S, &im__output_imask, NULL \ } #define IM_INPUT_DOUBLE(S) \ { \ S, &im__input_double, NULL \ } #define IM_INPUT_DOUBLEVEC(S) \ { \ S, &im__input_doublevec, NULL \ } #define IM_INPUT_DMASK(S) \ { \ S, &im__input_dmask, NULL \ } #define IM_OUTPUT_DOUBLE(S) \ { \ S, &im__output_double, im__dprint \ } #define IM_OUTPUT_DOUBLEVEC(S) \ { \ S, &im__output_doublevec, im__dvprint \ } #define IM_OUTPUT_DMASK(S) \ { \ S, &im__output_dmask, NULL \ } #define IM_OUTPUT_DMASK_STATS(S) \ { \ S, &im__output_dmask_screen, im__dmsprint \ } #define IM_OUTPUT_COMPLEX(S) \ { \ S, &im__output_complex, im__cprint \ } #define IM_INPUT_STRING(S) \ { \ S, &im__input_string, NULL \ } #define IM_OUTPUT_STRING(S) \ { \ S, &im__output_string, im__sprint \ } #define IM_INPUT_IMAGE(S) \ { \ S, &im__input_image, NULL \ } #define IM_INPUT_IMAGEVEC(S) \ { \ S, &im__input_imagevec, NULL \ } #define IM_OUTPUT_IMAGE(S) \ { \ S, &im__output_image, NULL \ } #define IM_RW_IMAGE(S) \ { \ S, &im__rw_image, NULL \ } #define IM_INPUT_DISPLAY(S) \ { \ S, &im__input_display, NULL \ } #define IM_OUTPUT_DISPLAY(S) \ { \ S, &im__output_display, im__displayprint \ } #define IM_INPUT_GVALUE(S) \ { \ S, &im__input_gvalue, NULL \ } #define IM_OUTPUT_GVALUE(S) \ { \ S, &im__output_gvalue, im__gprint \ } #define IM_INPUT_INTERPOLATE(S) \ { \ S, &im__input_interpolate, NULL \ } /* Add a plug-in package. */ VIPS_DEPRECATED im_package *im_load_plugin(const char *name); VIPS_DEPRECATED int im_load_plugins(const char *fmt, ...) G_GNUC_PRINTF(1, 2); /* Close all plug-ins. */ VIPS_DEPRECATED int im_close_plugins(void); /* Loop over all loaded packages. */ VIPS_DEPRECATED void *im_map_packages(VipsSListMap2Fn fn, void *a); /* Convenience functions for finding packages, functions, etc. */ VIPS_DEPRECATED im_function *im_find_function(const char *name); VIPS_DEPRECATED im_package *im_find_package(const char *name); VIPS_DEPRECATED im_package *im_package_of_function(const char *name); /* Allocate space for, and free im_object argument lists. */ VIPS_DEPRECATED int im_free_vargv(im_function *fn, im_object *vargv); VIPS_DEPRECATED int im_allocate_vargv(im_function *fn, im_object *vargv); /* Run a VIPS command by name. */ VIPS_DEPRECATED int im_run_command(char *name, int argc, char **argv); VIPS_DEPRECATED int vips__input_interpolate_init(im_object *obj, char *str); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*IM_DISPATCH_H*/ libvips-8.15.1/libvips/include/vips/draw.h000066400000000000000000000055231454007373500204550ustar00rootroot00000000000000/* draw.h * * 3/11/09 * - from proto.h */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_DRAW_H #define VIPS_DRAW_H #include #include #include #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ typedef enum { VIPS_COMBINE_MODE_SET, VIPS_COMBINE_MODE_ADD, VIPS_COMBINE_MODE_LAST } VipsCombineMode; VIPS_API int vips_draw_rect(VipsImage *image, double *ink, int n, int left, int top, int width, int height, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_draw_rect1(VipsImage *image, double ink, int left, int top, int width, int height, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_draw_point(VipsImage *image, double *ink, int n, int x, int y, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_draw_point1(VipsImage *image, double ink, int x, int y, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_draw_image(VipsImage *image, VipsImage *sub, int x, int y, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_draw_mask(VipsImage *image, double *ink, int n, VipsImage *mask, int x, int y, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_draw_mask1(VipsImage *image, double ink, VipsImage *mask, int x, int y, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_draw_line(VipsImage *image, double *ink, int n, int x1, int y1, int x2, int y2, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_draw_line1(VipsImage *image, double ink, int x1, int y1, int x2, int y2, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_draw_circle(VipsImage *image, double *ink, int n, int cx, int cy, int radius, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_draw_circle1(VipsImage *image, double ink, int cx, int cy, int radius, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_draw_flood(VipsImage *image, double *ink, int n, int x, int y, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_draw_flood1(VipsImage *image, double ink, int x, int y, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_draw_smudge(VipsImage *image, int left, int top, int width, int height, ...) G_GNUC_NULL_TERMINATED; #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_DRAW_H*/ libvips-8.15.1/libvips/include/vips/enumtypes.c.in000066400000000000000000000015311454007373500221440ustar00rootroot00000000000000/*** BEGIN file-header ***/ /* auto-generated enums for vips introspection */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include /*** END file-header ***/ /*** BEGIN file-production ***/ /* enumerations from "@basename@" */ /*** END file-production ***/ /*** BEGIN value-header ***/ GType @enum_name@_get_type(void) { static gsize gtype_id = 0; if (g_once_init_enter(>ype_id)) { static const G@Type@Value values[] = { /*** END value-header ***/ /*** BEGIN value-production ***/ { @VALUENAME@, "@VALUENAME@", "@valuenick@" }, /*** END value-production ***/ /*** BEGIN value-tail ***/ { 0, NULL, NULL } }; GType new_type = g_@type@_register_static(g_intern_static_string("@EnumName@"), values); g_once_init_leave(>ype_id, new_type); } return (GType) gtype_id; } /*** END value-tail ***/ libvips-8.15.1/libvips/include/vips/enumtypes.h.in000066400000000000000000000007431454007373500221550ustar00rootroot00000000000000/*** BEGIN file-header ***/ #ifndef VIPS_ENUM_TYPES_H #define VIPS_ENUM_TYPES_H G_BEGIN_DECLS /*** END file-header ***/ /*** BEGIN file-production ***/ /* enumerations from "@basename@" */ /*** END file-production ***/ /*** BEGIN value-header ***/ VIPS_API GType @enum_name@_get_type(void) G_GNUC_CONST; #define VIPS_TYPE_@ENUMSHORT@ (@enum_name@_get_type()) /*** END value-header ***/ /*** BEGIN file-tail ***/ G_END_DECLS #endif /*VIPS_ENUM_TYPES_H*/ /*** END file-tail ***/ libvips-8.15.1/libvips/include/vips/error.h000066400000000000000000000102131454007373500206410ustar00rootroot00000000000000/* Error handling. */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_ERROR_H #define VIPS_ERROR_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ VIPS_API const char *vips_error_buffer(void); VIPS_API char *vips_error_buffer_copy(void); VIPS_API void vips_error_clear(void); VIPS_API void vips_error_freeze(void); VIPS_API void vips_error_thaw(void); VIPS_API void vips_error(const char *domain, const char *fmt, ...) G_GNUC_PRINTF(2, 3); VIPS_API void vips_verror(const char *domain, const char *fmt, va_list ap); VIPS_API void vips_error_system(int err, const char *domain, const char *fmt, ...) G_GNUC_PRINTF(3, 4); VIPS_API void vips_verror_system(int err, const char *domain, const char *fmt, va_list ap); VIPS_API void vips_error_g(GError **error); VIPS_API void vips_g_error(GError **error); VIPS_API void vips_error_exit(const char *fmt, ...) G_GNUC_NORETURN G_GNUC_PRINTF(1, 2); VIPS_API int vips_check_uncoded(const char *domain, VipsImage *im); VIPS_API int vips_check_coding(const char *domain, VipsImage *im, VipsCoding coding); VIPS_API int vips_check_coding_known(const char *domain, VipsImage *im); VIPS_API int vips_check_coding_noneorlabq(const char *domain, VipsImage *im); VIPS_API int vips_check_coding_same(const char *domain, VipsImage *im1, VipsImage *im2); VIPS_API int vips_check_mono(const char *domain, VipsImage *im); VIPS_API int vips_check_bands(const char *domain, VipsImage *im, int bands); VIPS_API int vips_check_bands_1or3(const char *domain, VipsImage *im); VIPS_API int vips_check_bands_atleast(const char *domain, VipsImage *im, int bands); VIPS_API int vips_check_bands_1orn(const char *domain, VipsImage *im1, VipsImage *im2); VIPS_API int vips_check_bands_1orn_unary(const char *domain, VipsImage *im, int n); VIPS_API int vips_check_bands_same(const char *domain, VipsImage *im1, VipsImage *im2); VIPS_API int vips_check_bandno(const char *domain, VipsImage *im, int bandno); VIPS_API int vips_check_int(const char *domain, VipsImage *im); VIPS_API int vips_check_uint(const char *domain, VipsImage *im); VIPS_API int vips_check_uintorf(const char *domain, VipsImage *im); VIPS_API int vips_check_noncomplex(const char *domain, VipsImage *im); VIPS_API int vips_check_complex(const char *domain, VipsImage *im); VIPS_API int vips_check_twocomponents(const char *domain, VipsImage *im); VIPS_API int vips_check_format(const char *domain, VipsImage *im, VipsBandFormat fmt); VIPS_API int vips_check_u8or16(const char *domain, VipsImage *im); VIPS_API int vips_check_8or16(const char *domain, VipsImage *im); VIPS_API int vips_check_u8or16orf(const char *domain, VipsImage *im); VIPS_API int vips_check_format_same(const char *domain, VipsImage *im1, VipsImage *im2); VIPS_API int vips_check_size_same(const char *domain, VipsImage *im1, VipsImage *im2); VIPS_API int vips_check_oddsquare(const char *domain, VipsImage *im); VIPS_API int vips_check_vector_length(const char *domain, int n, int len); VIPS_API int vips_check_vector(const char *domain, int n, VipsImage *im); VIPS_API int vips_check_hist(const char *domain, VipsImage *im); VIPS_API int vips_check_matrix(const char *domain, VipsImage *im, VipsImage **out); VIPS_API int vips_check_separable(const char *domain, VipsImage *im); VIPS_API int vips_check_precision_intfloat(const char *domain, VipsPrecision precision); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_ERROR_H*/ libvips-8.15.1/libvips/include/vips/foreign.h000066400000000000000000000734021454007373500211520ustar00rootroot00000000000000/* Base type for supported image formats. Subclass this to add a new * format. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_FOREIGN_H #define VIPS_FOREIGN_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #define VIPS_TYPE_FOREIGN (vips_foreign_get_type()) #define VIPS_FOREIGN(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_FOREIGN, VipsForeign)) #define VIPS_FOREIGN_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_FOREIGN, VipsForeignClass)) #define VIPS_IS_FOREIGN(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_FOREIGN)) #define VIPS_IS_FOREIGN_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_FOREIGN)) #define VIPS_FOREIGN_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_FOREIGN, VipsForeignClass)) typedef struct _VipsForeign { VipsOperation parent_object; /*< public >*/ } VipsForeign; typedef struct _VipsForeignClass { VipsOperationClass parent_class; /*< public >*/ /* Loop over formats in this order, default 0. We need this because * some formats can be read by several loaders (eg. tiff can be read * by the libMagick loader as well as by the tiff loader), and we want * to make sure the better loader comes first. */ int priority; /* Null-terminated list of recommended suffixes, eg. ".tif", ".tiff". * This can be used by both load and save, so it's in the base class. */ const char **suffs; } VipsForeignClass; /* Don't put spaces around void here, it breaks gtk-doc. */ VIPS_API GType vips_foreign_get_type(void); /* Map over and find formats. This uses type introspection to loop over * subclasses of VipsForeign. */ VIPS_API void *vips_foreign_map(const char *base, VipsSListMap2Fn fn, void *a, void *b); /* Image file load properties. * * Keep in sync with the deprecated VipsFormatFlags, we need to be able to * cast between them. */ typedef enum /*< flags >*/ { VIPS_FOREIGN_NONE = 0, /* No flags set */ VIPS_FOREIGN_PARTIAL = 1, /* Lazy read OK (eg. tiled tiff) */ VIPS_FOREIGN_BIGENDIAN = 2, /* Most-significant byte first */ VIPS_FOREIGN_SEQUENTIAL = 4, /* Top-to-bottom lazy read OK */ VIPS_FOREIGN_ALL = 7 /* All flags set */ } VipsForeignFlags; /** * VipsFailOn: * @VIPS_FAIL_ON_NONE: never stop * @VIPS_FAIL_ON_TRUNCATED: stop on image truncated, nothing else * @VIPS_FAIL_ON_ERROR: stop on serious error or truncation * @VIPS_FAIL_ON_WARNING: stop on anything, even warnings * * How sensitive loaders are to errors, from never stop (very insensitive), to * stop on the smallest warning (very sensitive). * * Each one implies the ones before it, so #VIPS_FAIL_ON_ERROR implies * #VIPS_FAIL_ON_TRUNCATED. */ typedef enum { VIPS_FAIL_ON_NONE, VIPS_FAIL_ON_TRUNCATED, VIPS_FAIL_ON_ERROR, VIPS_FAIL_ON_WARNING, VIPS_FAIL_ON_LAST } VipsFailOn; #define VIPS_TYPE_FOREIGN_LOAD (vips_foreign_load_get_type()) #define VIPS_FOREIGN_LOAD(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_FOREIGN_LOAD, VipsForeignLoad)) #define VIPS_FOREIGN_LOAD_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_FOREIGN_LOAD, VipsForeignLoadClass)) #define VIPS_IS_FOREIGN_LOAD(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_FOREIGN_LOAD)) #define VIPS_IS_FOREIGN_LOAD_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_FOREIGN_LOAD)) #define VIPS_FOREIGN_LOAD_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_FOREIGN_LOAD, VipsForeignLoadClass)) typedef struct _VipsForeignLoad { VipsForeign parent_object; /*< private >*/ /* Set TRUE to force open via memory. */ gboolean memory; /* Type of access upstream wants and the loader must supply. */ VipsAccess access; /* Flags for this load operation. */ VipsForeignFlags flags; /* Behaviour on error. */ VipsFailOn fail_on; /* Deprecated and unused. Just here for compat. */ gboolean fail; gboolean sequential; /*< public >*/ /* The image we generate. This must be set by ->header(). */ VipsImage *out; /* The behind-the-scenes real image we decompress to. This can be a * disc file or a memory buffer. This must be set by ->load(). */ VipsImage *real; /* Set this to tag the operation as nocache. */ gboolean nocache; /* Deprecated: the memory option used to be called disc and default * TRUE. */ gboolean disc; /* Set if a start function fails. We want to prevent the other starts * from also triggering the load. */ gboolean error; /* Set by "revalidate": set the REVALIDATE flag for this operation to * force it to execute. */ gboolean revalidate; } VipsForeignLoad; typedef struct _VipsForeignLoadClass { VipsForeignClass parent_class; /*< public >*/ /* Is a file in this format. * * This function should return %TRUE if the file contains an image of * this type. If you don't define this function, #VipsForeignLoad * will use @suffs instead. */ gboolean (*is_a)(const char *filename); /* Is a buffer in this format. * * This function should return %TRUE if the buffer contains an image of * this type. */ gboolean (*is_a_buffer)(const void *data, size_t size); /* Is a stream in this format. * * This function should return %TRUE if the stream contains an image of * this type. */ gboolean (*is_a_source)(VipsSource *source); /* Get the flags from a filename. * * This function should examine the file and return a set * of flags. If you don't define it, vips will default to 0 (no flags * set). * * This method is necessary for vips7 compatibility. Don't define * it if you don't need vips7. */ VipsForeignFlags (*get_flags_filename)(const char *filename); /* Get the flags for this load operation. Images can be loaded from * (for example) memory areas rather than files, so you can't just use * @get_flags_filename(). */ VipsForeignFlags (*get_flags)(VipsForeignLoad *load); /* Do the minimum read we can. * * Set the header fields in @out from @filename. If you can read the * whole image as well with no performance cost (as with vipsload), * or if your loader does not support reading only the header, read * the entire image in this method and leave @load() NULL. * * @header() needs to set the dhint on the image .. otherwise you get * the default SMALLTILE. * * Return 0 for success, -1 for error, setting vips_error(). */ int (*header)(VipsForeignLoad *load); /* Read the whole image into @real. The pixels will get copied to @out * later. * * You can omit this method if you define a @header() method which * loads the whole file. * * Return 0 for success, -1 for error, setting * vips_error(). */ int (*load)(VipsForeignLoad *load); } VipsForeignLoadClass; /* Don't put spaces around void here, it breaks gtk-doc. */ VIPS_API GType vips_foreign_load_get_type(void); VIPS_API const char *vips_foreign_find_load(const char *filename); VIPS_API const char *vips_foreign_find_load_buffer(const void *data, size_t size); VIPS_API const char *vips_foreign_find_load_source(VipsSource *source); VIPS_API VipsForeignFlags vips_foreign_flags(const char *loader, const char *filename); VIPS_API gboolean vips_foreign_is_a(const char *loader, const char *filename); VIPS_API gboolean vips_foreign_is_a_buffer(const char *loader, const void *data, size_t size); VIPS_API gboolean vips_foreign_is_a_source(const char *loader, VipsSource *source); VIPS_API void vips_foreign_load_invalidate(VipsImage *image); #define VIPS_TYPE_FOREIGN_SAVE (vips_foreign_save_get_type()) #define VIPS_FOREIGN_SAVE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_FOREIGN_SAVE, VipsForeignSave)) #define VIPS_FOREIGN_SAVE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_FOREIGN_SAVE, VipsForeignSaveClass)) #define VIPS_IS_FOREIGN_SAVE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_FOREIGN_SAVE)) #define VIPS_IS_FOREIGN_SAVE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_FOREIGN_SAVE)) #define VIPS_FOREIGN_SAVE_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_FOREIGN_SAVE, VipsForeignSaveClass)) /** * VipsSaveable: * @VIPS_SAVEABLE_MONO: 1 band (eg. CSV) * @VIPS_SAVEABLE_RGB: 1 or 3 bands (eg. PPM) * @VIPS_SAVEABLE_RGBA: 1, 2, 3 or 4 bands (eg. PNG) * @VIPS_SAVEABLE_RGBA_ONLY: 3 or 4 bands (eg. WEBP) * @VIPS_SAVEABLE_RGB_CMYK: 1, 3 or 4 bands (eg. JPEG) * @VIPS_SAVEABLE_ANY: any number of bands (eg. TIFF) * * See also: #VipsForeignSave. */ typedef enum { VIPS_SAVEABLE_MONO, VIPS_SAVEABLE_RGB, VIPS_SAVEABLE_RGBA, VIPS_SAVEABLE_RGBA_ONLY, VIPS_SAVEABLE_RGB_CMYK, VIPS_SAVEABLE_ANY, VIPS_SAVEABLE_LAST } VipsSaveable; /** * VipsForeignKeep: * @VIPS_FOREIGN_KEEP_NONE: don't attach metadata * @VIPS_FOREIGN_KEEP_EXIF: keep Exif metadata * @VIPS_FOREIGN_KEEP_XMP: keep XMP metadata * @VIPS_FOREIGN_KEEP_IPTC: keep IPTC metadata * @VIPS_FOREIGN_KEEP_ICC: keep ICC metadata * @VIPS_FOREIGN_KEEP_OTHER: keep other metadata (e.g. PNG comments and some TIFF tags) * @VIPS_FOREIGN_KEEP_ALL: keep all metadata * * Which metadata to retain. */ typedef enum /*< flags >*/ { VIPS_FOREIGN_KEEP_NONE = 0, VIPS_FOREIGN_KEEP_EXIF = 1 << 0, VIPS_FOREIGN_KEEP_XMP = 1 << 1, VIPS_FOREIGN_KEEP_IPTC = 1 << 2, VIPS_FOREIGN_KEEP_ICC = 1 << 3, VIPS_FOREIGN_KEEP_OTHER = 1 << 4, VIPS_FOREIGN_KEEP_ALL = (VIPS_FOREIGN_KEEP_EXIF | VIPS_FOREIGN_KEEP_XMP | VIPS_FOREIGN_KEEP_IPTC | VIPS_FOREIGN_KEEP_ICC | VIPS_FOREIGN_KEEP_OTHER), } VipsForeignKeep; typedef struct _VipsForeignSave { VipsForeign parent_object; /* Deprecated in favor of [keep=none] */ gboolean strip; /* Which metadata to retain. */ VipsForeignKeep keep; /* Filename of profile to embed. */ char *profile; /* If flattening out alpha, the background colour to use. Default to * 0 (black). */ VipsArrayDouble *background; /* Set to non-zero to set the page size for multi-page save. */ int page_height; /*< public >*/ /* The image we are to save, as supplied by our caller. */ VipsImage *in; /* @in converted to a saveable format (eg. 8-bit RGB) according to the * instructions you give in the class fields below. * * This is the image you should actually write to the output. */ VipsImage *ready; } VipsForeignSave; typedef struct _VipsForeignSaveClass { VipsForeignClass parent_class; /*< public >*/ /* How this format treats bands. * * @saveable describes the bands that your saver can handle. For * example, PPM images can have 1 or 3 bands (mono or RGB), so it * uses #VIPS_SAVEABLE_RGB. */ VipsSaveable saveable; /* How this format treats band formats. * * @format_table describes the band formats that your saver can * handle. For each of the 10 #VipsBandFormat values, the array * should give the format your saver will accept. */ VipsBandFormat *format_table; /* The set of coding types this format can save. For example, jpeg can * only save NONE, so has NONE TRUE and RAD and LABQ FALSE. * * Default NONE TRUE, RAD and LABQ FALSE. */ gboolean coding[VIPS_CODING_LAST]; } VipsForeignSaveClass; /* Don't put spaces around void here, it breaks gtk-doc. */ VIPS_API GType vips_foreign_save_get_type(void); VIPS_API const char *vips_foreign_find_save(const char *filename); VIPS_API gchar **vips_foreign_get_suffixes(void); VIPS_API const char *vips_foreign_find_save_buffer(const char *suffix); VIPS_API const char *vips_foreign_find_save_target(const char *suffix); VIPS_API int vips_vipsload(const char *filename, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_vipsload_source(VipsSource *source, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_vipssave(VipsImage *in, const char *filename, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_vipssave_target(VipsImage *in, VipsTarget *target, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_openslideload(const char *filename, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_openslideload_source(VipsSource *source, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; /** * VipsForeignSubsample: * @VIPS_FOREIGN_SUBSAMPLE_AUTO: prevent subsampling when quality >= 90 * @VIPS_FOREIGN_SUBSAMPLE_ON: always perform subsampling * @VIPS_FOREIGN_SUBSAMPLE_OFF: never perform subsampling * * Set subsampling mode. */ typedef enum { VIPS_FOREIGN_SUBSAMPLE_AUTO, VIPS_FOREIGN_SUBSAMPLE_ON, VIPS_FOREIGN_SUBSAMPLE_OFF, VIPS_FOREIGN_SUBSAMPLE_LAST } VipsForeignSubsample; /** * VipsForeignJpegSubsample: * @VIPS_FOREIGN_JPEG_SUBSAMPLE_AUTO: default preset * @VIPS_FOREIGN_JPEG_SUBSAMPLE_ON: always perform subsampling * @VIPS_FOREIGN_JPEG_SUBSAMPLE_OFF: never perform subsampling * * Set jpeg subsampling mode. * * DEPRECATED: use #VipsForeignSubsample */ typedef enum { VIPS_FOREIGN_JPEG_SUBSAMPLE_AUTO, VIPS_FOREIGN_JPEG_SUBSAMPLE_ON, VIPS_FOREIGN_JPEG_SUBSAMPLE_OFF, VIPS_FOREIGN_JPEG_SUBSAMPLE_LAST } VipsForeignJpegSubsample; VIPS_API int vips_jpegload(const char *filename, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_jpegload_buffer(void *buf, size_t len, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_jpegload_source(VipsSource *source, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_jpegsave_target(VipsImage *in, VipsTarget *target, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_jpegsave(VipsImage *in, const char *filename, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_jpegsave_buffer(VipsImage *in, void **buf, size_t *len, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_jpegsave_mime(VipsImage *in, ...) G_GNUC_NULL_TERMINATED; /** * VipsForeignWebpPreset: * @VIPS_FOREIGN_WEBP_PRESET_DEFAULT: default preset * @VIPS_FOREIGN_WEBP_PRESET_PICTURE: digital picture, like portrait, inner shot * @VIPS_FOREIGN_WEBP_PRESET_PHOTO: outdoor photograph, with natural lighting * @VIPS_FOREIGN_WEBP_PRESET_DRAWING: hand or line drawing, with high-contrast details * @VIPS_FOREIGN_WEBP_PRESET_ICON: small-sized colorful images * @VIPS_FOREIGN_WEBP_PRESET_TEXT: text-like * * Tune lossy encoder settings for different image types. */ typedef enum { VIPS_FOREIGN_WEBP_PRESET_DEFAULT, VIPS_FOREIGN_WEBP_PRESET_PICTURE, VIPS_FOREIGN_WEBP_PRESET_PHOTO, VIPS_FOREIGN_WEBP_PRESET_DRAWING, VIPS_FOREIGN_WEBP_PRESET_ICON, VIPS_FOREIGN_WEBP_PRESET_TEXT, VIPS_FOREIGN_WEBP_PRESET_LAST } VipsForeignWebpPreset; VIPS_API int vips_webpload_source(VipsSource *source, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_webpload(const char *filename, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_webpload_buffer(void *buf, size_t len, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_webpsave_target(VipsImage *in, VipsTarget *target, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_webpsave(VipsImage *in, const char *filename, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_webpsave_buffer(VipsImage *in, void **buf, size_t *len, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_webpsave_mime(VipsImage *in, ...) G_GNUC_NULL_TERMINATED; /** * VipsForeignTiffCompression: * @VIPS_FOREIGN_TIFF_COMPRESSION_NONE: no compression * @VIPS_FOREIGN_TIFF_COMPRESSION_JPEG: jpeg compression * @VIPS_FOREIGN_TIFF_COMPRESSION_DEFLATE: deflate (zip) compression * @VIPS_FOREIGN_TIFF_COMPRESSION_PACKBITS: packbits compression * @VIPS_FOREIGN_TIFF_COMPRESSION_CCITTFAX4: fax4 compression * @VIPS_FOREIGN_TIFF_COMPRESSION_LZW: LZW compression * @VIPS_FOREIGN_TIFF_COMPRESSION_WEBP: WEBP compression * @VIPS_FOREIGN_TIFF_COMPRESSION_ZSTD: ZSTD compression * @VIPS_FOREIGN_TIFF_COMPRESSION_JP2K: JP2K compression * * The compression types supported by the tiff writer. * * Use @Q to set the jpeg compression level, default 75. * * Use @predictor to set the lzw or deflate prediction, default horizontal. * * Use @lossless to set WEBP lossless compression. * * Use @level to set webp and zstd compression level. */ typedef enum { VIPS_FOREIGN_TIFF_COMPRESSION_NONE, VIPS_FOREIGN_TIFF_COMPRESSION_JPEG, VIPS_FOREIGN_TIFF_COMPRESSION_DEFLATE, VIPS_FOREIGN_TIFF_COMPRESSION_PACKBITS, VIPS_FOREIGN_TIFF_COMPRESSION_CCITTFAX4, VIPS_FOREIGN_TIFF_COMPRESSION_LZW, VIPS_FOREIGN_TIFF_COMPRESSION_WEBP, VIPS_FOREIGN_TIFF_COMPRESSION_ZSTD, VIPS_FOREIGN_TIFF_COMPRESSION_JP2K, VIPS_FOREIGN_TIFF_COMPRESSION_LAST } VipsForeignTiffCompression; /** * VipsForeignTiffPredictor: * @VIPS_FOREIGN_TIFF_PREDICTOR_NONE: no prediction * @VIPS_FOREIGN_TIFF_PREDICTOR_HORIZONTAL: horizontal differencing * @VIPS_FOREIGN_TIFF_PREDICTOR_FLOAT: float predictor * * The predictor can help deflate and lzw compression. The values are fixed by * the tiff library. */ typedef enum { VIPS_FOREIGN_TIFF_PREDICTOR_NONE = 1, VIPS_FOREIGN_TIFF_PREDICTOR_HORIZONTAL = 2, VIPS_FOREIGN_TIFF_PREDICTOR_FLOAT = 3, VIPS_FOREIGN_TIFF_PREDICTOR_LAST } VipsForeignTiffPredictor; /** * VipsForeignTiffResunit: * @VIPS_FOREIGN_TIFF_RESUNIT_CM: use centimeters * @VIPS_FOREIGN_TIFF_RESUNIT_INCH: use inches * * Use inches or centimeters as the resolution unit for a tiff file. */ typedef enum { VIPS_FOREIGN_TIFF_RESUNIT_CM, VIPS_FOREIGN_TIFF_RESUNIT_INCH, VIPS_FOREIGN_TIFF_RESUNIT_LAST } VipsForeignTiffResunit; VIPS_API int vips_tiffload(const char *filename, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_tiffload_buffer(void *buf, size_t len, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_tiffload_source(VipsSource *source, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_tiffsave(VipsImage *in, const char *filename, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_tiffsave_buffer(VipsImage *in, void **buf, size_t *len, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_tiffsave_target(VipsImage *in, VipsTarget *target, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_openexrload(const char *filename, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_fitsload(const char *filename, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_fitssave(VipsImage *in, const char *filename, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_analyzeload(const char *filename, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_rawload(const char *filename, VipsImage **out, int width, int height, int bands, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_rawsave(VipsImage *in, const char *filename, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_rawsave_fd(VipsImage *in, int fd, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_csvload(const char *filename, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_csvload_source(VipsSource *source, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_csvsave(VipsImage *in, const char *filename, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_csvsave_target(VipsImage *in, VipsTarget *target, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_matrixload(const char *filename, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_matrixload_source(VipsSource *source, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_matrixsave(VipsImage *in, const char *filename, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_matrixsave_target(VipsImage *in, VipsTarget *target, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_matrixprint(VipsImage *in, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_magickload(const char *filename, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_magickload_buffer(void *buf, size_t len, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_magicksave(VipsImage *in, const char *filename, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_magicksave_buffer(VipsImage *in, void **buf, size_t *len, ...) G_GNUC_NULL_TERMINATED; /** * VipsForeignPngFilter: * @VIPS_FOREIGN_PNG_FILTER_NONE: no filtering * @VIPS_FOREIGN_PNG_FILTER_SUB: difference to the left * @VIPS_FOREIGN_PNG_FILTER_UP: difference up * @VIPS_FOREIGN_PNG_FILTER_AVG: average of left and up * @VIPS_FOREIGN_PNG_FILTER_PAETH: pick best neighbor predictor automatically * @VIPS_FOREIGN_PNG_FILTER_ALL: adaptive * * http://www.w3.org/TR/PNG-Filters.html * The values mirror those of png.h in libpng. */ typedef enum /*< flags >*/ { VIPS_FOREIGN_PNG_FILTER_NONE = 0x08, VIPS_FOREIGN_PNG_FILTER_SUB = 0x10, VIPS_FOREIGN_PNG_FILTER_UP = 0x20, VIPS_FOREIGN_PNG_FILTER_AVG = 0x40, VIPS_FOREIGN_PNG_FILTER_PAETH = 0x80, VIPS_FOREIGN_PNG_FILTER_ALL = 0xF8 } VipsForeignPngFilter; VIPS_API int vips_pngload_source(VipsSource *source, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_pngload(const char *filename, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_pngload_buffer(void *buf, size_t len, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_pngsave_target(VipsImage *in, VipsTarget *target, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_pngsave(VipsImage *in, const char *filename, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_pngsave_buffer(VipsImage *in, void **buf, size_t *len, ...) G_GNUC_NULL_TERMINATED; /** * VipsForeignPpmFormat: * @VIPS_FOREIGN_PPM_FORMAT_PBM: portable bitmap * @VIPS_FOREIGN_PPM_FORMAT_PGM: portable greymap * @VIPS_FOREIGN_PPM_FORMAT_PPM: portable pixmap * @VIPS_FOREIGN_PPM_FORMAT_PFM: portable float map * @VIPS_FOREIGN_PPM_FORMAT_PNM: portable anymap * * The netpbm file format to save as. * * #VIPS_FOREIGN_PPM_FORMAT_PBM images are single bit. * * #VIPS_FOREIGN_PPM_FORMAT_PGM images are 8, 16, or 32-bits, one band. * * #VIPS_FOREIGN_PPM_FORMAT_PPM images are 8, 16, or 32-bits, three bands. * * #VIPS_FOREIGN_PPM_FORMAT_PFM images are 32-bit float pixels. * * #VIPS_FOREIGN_PPM_FORMAT_PNM images are anymap images -- the image format * is used to pick the saver. * */ typedef enum { VIPS_FOREIGN_PPM_FORMAT_PBM, VIPS_FOREIGN_PPM_FORMAT_PGM, VIPS_FOREIGN_PPM_FORMAT_PPM, VIPS_FOREIGN_PPM_FORMAT_PFM, VIPS_FOREIGN_PPM_FORMAT_PNM, VIPS_FOREIGN_PPM_FORMAT_LAST } VipsForeignPpmFormat; VIPS_API int vips_ppmload(const char *filename, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_ppmload_source(VipsSource *source, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_ppmsave(VipsImage *in, const char *filename, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_ppmsave_target(VipsImage *in, VipsTarget *target, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_matload(const char *filename, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_radload_source(VipsSource *source, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_radload(const char *filename, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_radload_buffer(void *buf, size_t len, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_radsave(VipsImage *in, const char *filename, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_radsave_buffer(VipsImage *in, void **buf, size_t *len, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_radsave_target(VipsImage *in, VipsTarget *target, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_pdfload(const char *filename, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_pdfload_buffer(void *buf, size_t len, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_pdfload_source(VipsSource *source, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_svgload(const char *filename, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_svgload_buffer(void *buf, size_t len, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_svgload_string(const char *str, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_svgload_source(VipsSource *source, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_gifload(const char *filename, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_gifload_buffer(void *buf, size_t len, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_gifload_source(VipsSource *source, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_gifsave(VipsImage *in, const char *filename, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_gifsave_buffer(VipsImage *in, void **buf, size_t *len, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_gifsave_target(VipsImage *in, VipsTarget *target, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_heifload(const char *filename, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_heifload_buffer(void *buf, size_t len, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_heifload_source(VipsSource *source, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_heifsave(VipsImage *in, const char *filename, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_heifsave_buffer(VipsImage *in, void **buf, size_t *len, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_heifsave_target(VipsImage *in, VipsTarget *target, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_niftiload(const char *filename, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_niftiload_source(VipsSource *source, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_niftisave(VipsImage *in, const char *filename, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_jp2kload(const char *filename, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_jp2kload_buffer(void *buf, size_t len, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_jp2kload_source(VipsSource *source, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_jp2ksave(VipsImage *in, const char *filename, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_jp2ksave_buffer(VipsImage *in, void **buf, size_t *len, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_jp2ksave_target(VipsImage *in, VipsTarget *target, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_jxlload_source(VipsSource *source, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_jxlload_buffer(void *buf, size_t len, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_jxlload(const char *filename, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_jxlsave(VipsImage *in, const char *filename, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_jxlsave_buffer(VipsImage *in, void **buf, size_t *len, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_jxlsave_target(VipsImage *in, VipsTarget *target, ...) G_GNUC_NULL_TERMINATED; /** * VipsForeignDzLayout: * @VIPS_FOREIGN_DZ_LAYOUT_DZ: use DeepZoom directory layout * @VIPS_FOREIGN_DZ_LAYOUT_ZOOMIFY: use Zoomify directory layout * @VIPS_FOREIGN_DZ_LAYOUT_GOOGLE: use Google maps directory layout * @VIPS_FOREIGN_DZ_LAYOUT_IIIF: use IIIF v2 directory layout * @VIPS_FOREIGN_DZ_LAYOUT_IIIF3: use IIIF v3 directory layout * * What directory layout and metadata standard to use. */ typedef enum { VIPS_FOREIGN_DZ_LAYOUT_DZ, VIPS_FOREIGN_DZ_LAYOUT_ZOOMIFY, VIPS_FOREIGN_DZ_LAYOUT_GOOGLE, VIPS_FOREIGN_DZ_LAYOUT_IIIF, VIPS_FOREIGN_DZ_LAYOUT_IIIF3, VIPS_FOREIGN_DZ_LAYOUT_LAST } VipsForeignDzLayout; /** * VipsForeignDzDepth: * @VIPS_FOREIGN_DZ_DEPTH_ONEPIXEL: create layers down to 1x1 pixel * @VIPS_FOREIGN_DZ_DEPTH_ONETILE: create layers down to 1x1 tile * @VIPS_FOREIGN_DZ_DEPTH_ONE: only create a single layer * * How many pyramid layers to create. */ typedef enum { VIPS_FOREIGN_DZ_DEPTH_ONEPIXEL, VIPS_FOREIGN_DZ_DEPTH_ONETILE, VIPS_FOREIGN_DZ_DEPTH_ONE, VIPS_FOREIGN_DZ_DEPTH_LAST } VipsForeignDzDepth; /** * VipsForeignDzContainer: * @VIPS_FOREIGN_DZ_CONTAINER_FS: write tiles to the filesystem * @VIPS_FOREIGN_DZ_CONTAINER_ZIP: write tiles to a zip file * @VIPS_FOREIGN_DZ_CONTAINER_SZI: write to a szi file * * How many pyramid layers to create. */ typedef enum { VIPS_FOREIGN_DZ_CONTAINER_FS, VIPS_FOREIGN_DZ_CONTAINER_ZIP, VIPS_FOREIGN_DZ_CONTAINER_SZI, VIPS_FOREIGN_DZ_CONTAINER_LAST } VipsForeignDzContainer; VIPS_API int vips_dzsave(VipsImage *in, const char *name, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_dzsave_buffer(VipsImage *in, void **buf, size_t *len, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_dzsave_target(VipsImage *in, VipsTarget *target, ...) G_GNUC_NULL_TERMINATED; /** * VipsForeignHeifCompression: * @VIPS_FOREIGN_HEIF_COMPRESSION_HEVC: x265 * @VIPS_FOREIGN_HEIF_COMPRESSION_AVC: x264 * @VIPS_FOREIGN_HEIF_COMPRESSION_JPEG: jpeg * @VIPS_FOREIGN_HEIF_COMPRESSION_AV1: aom * * The compression format to use inside a HEIF container. * * This is assumed to use the same numbering as %heif_compression_format. */ typedef enum { VIPS_FOREIGN_HEIF_COMPRESSION_HEVC = 1, VIPS_FOREIGN_HEIF_COMPRESSION_AVC = 2, VIPS_FOREIGN_HEIF_COMPRESSION_JPEG = 3, VIPS_FOREIGN_HEIF_COMPRESSION_AV1 = 4, VIPS_FOREIGN_HEIF_COMPRESSION_LAST } VipsForeignHeifCompression; /** * VipsForeignHeifEncoder: * @VIPS_FOREIGN_HEIF_ENCODER_AUTO: auto * @VIPS_FOREIGN_HEIF_ENCODER_AOM: aom * @VIPS_FOREIGN_HEIF_ENCODER_RAV1E: RAV1E * @VIPS_FOREIGN_HEIF_ENCODER_SVT: SVT-AV1 * @VIPS_FOREIGN_HEIF_ENCODER_X265: x265 * * The selected encoder to use. * If libheif hasn't been compiled with the selected encoder, * we will fallback to the default encoder for the compression format. * */ typedef enum { VIPS_FOREIGN_HEIF_ENCODER_AUTO, VIPS_FOREIGN_HEIF_ENCODER_AOM, VIPS_FOREIGN_HEIF_ENCODER_RAV1E, VIPS_FOREIGN_HEIF_ENCODER_SVT, VIPS_FOREIGN_HEIF_ENCODER_X265, VIPS_FOREIGN_HEIF_ENCODER_LAST } VipsForeignHeifEncoder; #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_FOREIGN_H*/ libvips-8.15.1/libvips/include/vips/format.h000066400000000000000000000067651454007373500210210ustar00rootroot00000000000000/* Base type for supported image formats. Subclass this to add a new * format. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_FORMAT_H #define VIPS_FORMAT_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #define VIPS_TYPE_FORMAT (vips_format_get_type()) #define VIPS_FORMAT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_FORMAT, VipsFormat)) #define VIPS_FORMAT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_FORMAT, VipsFormatClass)) #define VIPS_IS_FORMAT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_FORMAT)) #define VIPS_IS_FORMAT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_FORMAT)) #define VIPS_FORMAT_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_FORMAT, VipsFormatClass)) /* Image file properties. */ typedef enum { VIPS_FORMAT_NONE = 0, /* No flags set */ VIPS_FORMAT_PARTIAL = 1, /* Lazy read OK (eg. tiled tiff) */ VIPS_FORMAT_BIGENDIAN = 2 /* Most-significant byte first */ } VipsFormatFlags; /* Don't instantiate these things, just use the class stuff. */ typedef struct _VipsFormat { VipsObject parent_object; /*< public >*/ } VipsFormat; typedef struct _VipsFormatClass { VipsObjectClass parent_class; /*< public >*/ /* Is a file in this format. */ gboolean (*is_a)(const char *); /* Read just the header into the VipsImage. */ int (*header)(const char *, VipsImage *); /* Load the whole image. */ int (*load)(const char *, VipsImage *); /* Write the VipsImage to the file in this format. */ int (*save)(VipsImage *, const char *); /* Get the flags for this file in this format. */ VipsFormatFlags (*get_flags)(const char *); /* Loop over formats in this order, default 0. We need this because * some formats can be read by several loaders (eg. tiff can be read * by the libMagick loader as well as by the tiff loader), and we want * to make sure the better loader comes first. */ int priority; /* Null-terminated list of allowed suffixes, eg. ".tif", ".tiff". */ const char **suffs; } VipsFormatClass; VIPS_API GType vips_format_get_type(void); /* Map over and find formats. This uses type introspection to loop over * subclasses of VipsFormat. */ VIPS_API void *vips_format_map(VipsSListMap2Fn fn, void *a, void *b); VIPS_API VipsFormatClass *vips_format_for_file(const char *filename); VIPS_API VipsFormatClass *vips_format_for_name(const char *filename); VIPS_API VipsFormatFlags vips_format_get_flags(VipsFormatClass *format, const char *filename); /* Read/write an image convenience functions. */ VIPS_API int vips_format_read(const char *filename, VipsImage *out); VIPS_API int vips_format_write(VipsImage *in, const char *filename); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_FORMAT_H*/ libvips-8.15.1/libvips/include/vips/freqfilt.h000066400000000000000000000027771454007373500213440ustar00rootroot00000000000000/* freq_filt.h * * 2/11/09 * - from proto.h */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_FREQFILT_H #define VIPS_FREQFILT_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ VIPS_API int vips_fwfft(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_invfft(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_freqmult(VipsImage *in, VipsImage *mask, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_spectrum(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_phasecor(VipsImage *in1, VipsImage *in2, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_FREQFILT_H*/ libvips-8.15.1/libvips/include/vips/gate.h000066400000000000000000000037121454007373500204360ustar00rootroot00000000000000/* Thread profiling. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_GATE_H #define VIPS_GATE_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #include #define VIPS_GATE_START(NAME) \ G_STMT_START \ { \ if (vips__thread_profile) \ vips__thread_gate_start(NAME); \ } \ G_STMT_END #define VIPS_GATE_STOP(NAME) \ G_STMT_START \ { \ if (vips__thread_profile) \ vips__thread_gate_stop(NAME); \ } \ G_STMT_END #define VIPS_GATE_MALLOC(SIZE) \ G_STMT_START \ { \ if (vips__thread_profile) \ vips__thread_malloc_free((gint64) (SIZE)); \ } \ G_STMT_END #define VIPS_GATE_FREE(SIZE) \ G_STMT_START \ { \ if (vips__thread_profile) \ vips__thread_malloc_free(-((gint64) (SIZE))); \ } \ G_STMT_END extern gboolean vips__thread_profile; VIPS_API void vips_profile_set(gboolean profile); void vips__thread_profile_attach(const char *thread_name); void vips__thread_profile_detach(void); void vips__thread_profile_stop(void); void vips__thread_gate_start(const char *gate_name); void vips__thread_gate_stop(const char *gate_name); void vips__thread_malloc_free(gint64 size); #endif /*VIPS_GATE_H*/ #ifdef __cplusplus } #endif /*__cplusplus*/ libvips-8.15.1/libvips/include/vips/generate.h000066400000000000000000000046731454007373500213170ustar00rootroot00000000000000/* Generate pixels. * * J.Cupitt, 8/4/93 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_GENERATE_H #define VIPS_GENERATE_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ typedef int (*VipsRegionWrite)(VipsRegion *region, VipsRect *area, void *a); VIPS_API int vips_sink_disc(VipsImage *im, VipsRegionWrite write_fn, void *a); VIPS_API int vips_sink(VipsImage *im, VipsStartFn start_fn, VipsGenerateFn generate_fn, VipsStopFn stop_fn, void *a, void *b); VIPS_API int vips_sink_tile(VipsImage *im, int tile_width, int tile_height, VipsStartFn start_fn, VipsGenerateFn generate_fn, VipsStopFn stop_fn, void *a, void *b); typedef void (*VipsSinkNotify)(VipsImage *im, VipsRect *rect, void *a); VIPS_API int vips_sink_screen(VipsImage *in, VipsImage *out, VipsImage *mask, int tile_width, int tile_height, int max_tiles, int priority, VipsSinkNotify notify_fn, void *a); VIPS_API int vips_sink_memory(VipsImage *im); VIPS_API void *vips_start_one(VipsImage *out, void *a, void *b); VIPS_API int vips_stop_one(void *seq, void *a, void *b); VIPS_API void *vips_start_many(VipsImage *out, void *a, void *b); VIPS_API int vips_stop_many(void *seq, void *a, void *b); VIPS_API VipsImage **vips_allocate_input_array(VipsImage *out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_image_generate(VipsImage *image, VipsStartFn start_fn, VipsGenerateFn generate_fn, VipsStopFn stop_fn, void *a, void *b); VIPS_API int vips_image_pipeline_array(VipsImage *image, VipsDemandStyle hint, VipsImage **in); VIPS_API int vips_image_pipelinev(VipsImage *image, VipsDemandStyle hint, ...) G_GNUC_NULL_TERMINATED; #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_GENERATE_H*/ libvips-8.15.1/libvips/include/vips/header.h000066400000000000000000000223521454007373500207470ustar00rootroot00000000000000/* image header funcs * * 20/9/09 * - from proto.h */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_HEADER_H #define VIPS_HEADER_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ /** * VIPS_META_EXIF_NAME: * * The name that read and write operations use for the image's EXIF data. */ #define VIPS_META_EXIF_NAME "exif-data" /** * VIPS_META_XMP_NAME: * * The name that read and write operations use for the image's XMP data. */ #define VIPS_META_XMP_NAME "xmp-data" /** * VIPS_META_IPTC_NAME: * * The name that read and write operations use for the image's IPTC data. */ #define VIPS_META_IPTC_NAME "iptc-data" /** * VIPS_META_PHOTOSHOP_NAME: * * The name that TIFF read and write operations use for the image's * TIFFTAG_PHOTOSHOP data. */ #define VIPS_META_PHOTOSHOP_NAME "photoshop-data" /** * VIPS_META_ICC_NAME: * * The name we use to attach an ICC profile. The file read and write * operations for TIFF, JPEG, PNG and others use this item of metadata to * attach and save ICC profiles. The profile is updated by the * vips_icc_transform() operations. */ #define VIPS_META_ICC_NAME "icc-profile-data" /** * VIPS_META_IMAGEDESCRIPTION: * * The IMAGEDESCRIPTION tag. Often has useful metadata. */ #define VIPS_META_IMAGEDESCRIPTION "image-description" /** * VIPS_META_RESOLUTION_UNIT: * * The JPEG and TIFF read and write operations use this to record the * file's preferred unit for resolution. */ #define VIPS_META_RESOLUTION_UNIT "resolution-unit" /** * VIPS_META_BITS_PER_SAMPLE: * * The bits per sample for each channel. */ #define VIPS_META_BITS_PER_SAMPLE "bits-per-sample" /** * VIPS_META_LOADER: * * Record the name of the original loader here. Handy for hinting file formats * and for debugging. */ #define VIPS_META_LOADER "vips-loader" /** * VIPS_META_SEQUENTIAL: * * Images loaded via vips_sequential() have this int field defined. Some * operations (eg. vips_shrinkv()) add extra caches if they see it on their * input. */ #define VIPS_META_SEQUENTIAL "vips-sequential" /** * VIPS_META_ORIENTATION: * * The orientation tag for this image. An int from 1 - 8 using the standard * exif/tiff meanings. * * * 1 - The 0th row represents the visual top of the image, and the 0th column * represents the visual left-hand side. * * 2 - The 0th row represents the visual top of the image, and the 0th column * represents the visual right-hand side. * * 3 - The 0th row represents the visual bottom of the image, and the 0th * column represents the visual right-hand side. * * 4 - The 0th row represents the visual bottom of the image, and the 0th * column represents the visual left-hand side. * * 5 - The 0th row represents the visual left-hand side of the image, and the * 0th column represents the visual top. * * 6 - The 0th row represents the visual right-hand side of the image, and the * 0th column represents the visual top. * * 7 - The 0th row represents the visual right-hand side of the image, and the * 0th column represents the visual bottom. * * 8 - The 0th row represents the visual left-hand side of the image, and the * 0th column represents the visual bottom. */ #define VIPS_META_ORIENTATION "orientation" /** * VIPS_META_PAGE_HEIGHT: * * If set, the height of each page when this image was loaded. If you save an * image with "page-height" set to a format that supports multiple pages, such * as tiff, the image will be saved as a series of pages. */ #define VIPS_META_PAGE_HEIGHT "page-height" /** * VIPS_META_N_PAGES: * * If set, the number of pages in the original file. */ #define VIPS_META_N_PAGES "n-pages" /** * VIPS_META_N_SUBIFDS: * * If set, the number of subifds in the first page of the file. */ #define VIPS_META_N_SUBIFDS "n-subifds" /** * VIPS_META_CONCURRENCY: * * If set, the suggested concurrency for this image. */ #define VIPS_META_CONCURRENCY "concurrency" VIPS_API guint64 vips_format_sizeof(VipsBandFormat format); VIPS_API guint64 vips_format_sizeof_unsafe(VipsBandFormat format); VIPS_API double vips_interpretation_max_alpha(VipsInterpretation interpretation); VIPS_API int vips_image_get_width(const VipsImage *image); VIPS_API int vips_image_get_height(const VipsImage *image); VIPS_API int vips_image_get_bands(const VipsImage *image); VIPS_API VipsBandFormat vips_image_get_format(const VipsImage *image); VIPS_API double vips_image_get_format_max(VipsBandFormat format); VIPS_API VipsBandFormat vips_image_guess_format(const VipsImage *image); VIPS_API VipsCoding vips_image_get_coding(const VipsImage *image); VIPS_API VipsInterpretation vips_image_get_interpretation(const VipsImage *image); VIPS_API VipsInterpretation vips_image_guess_interpretation(const VipsImage *image); VIPS_API double vips_image_get_xres(const VipsImage *image); VIPS_API double vips_image_get_yres(const VipsImage *image); VIPS_API int vips_image_get_xoffset(const VipsImage *image); VIPS_API int vips_image_get_yoffset(const VipsImage *image); VIPS_API const char *vips_image_get_filename(const VipsImage *image); VIPS_API const char *vips_image_get_mode(const VipsImage *image); VIPS_API double vips_image_get_scale(const VipsImage *image); VIPS_API double vips_image_get_offset(const VipsImage *image); VIPS_API int vips_image_get_page_height(VipsImage *image); VIPS_API int vips_image_get_n_pages(VipsImage *image); VIPS_API int vips_image_get_n_subifds(VipsImage *image); VIPS_API int vips_image_get_orientation(VipsImage *image); VIPS_API gboolean vips_image_get_orientation_swap(VipsImage *image); VIPS_API int vips_image_get_concurrency(VipsImage *image, int default_concurrency); VIPS_API const void *vips_image_get_data(VipsImage *image); VIPS_API void vips_image_init_fields(VipsImage *image, int xsize, int ysize, int bands, VipsBandFormat format, VipsCoding coding, VipsInterpretation interpretation, double xres, double yres); VIPS_API void vips_image_set(VipsImage *image, const char *name, GValue *value); VIPS_API int vips_image_get(const VipsImage *image, const char *name, GValue *value_copy); VIPS_API int vips_image_get_as_string(const VipsImage *image, const char *name, char **out); VIPS_API GType vips_image_get_typeof(const VipsImage *image, const char *name); VIPS_API gboolean vips_image_remove(VipsImage *image, const char *name); typedef void *(*VipsImageMapFn)(VipsImage *image, const char *name, GValue *value, void *a); VIPS_API void *vips_image_map(VipsImage *image, VipsImageMapFn fn, void *a); VIPS_API gchar **vips_image_get_fields(VipsImage *image); VIPS_API void vips_image_set_area(VipsImage *image, const char *name, VipsCallbackFn free_fn, void *data); VIPS_API int vips_image_get_area(const VipsImage *image, const char *name, const void **data); VIPS_API void vips_image_set_blob(VipsImage *image, const char *name, VipsCallbackFn free_fn, const void *data, size_t length); VIPS_API void vips_image_set_blob_copy(VipsImage *image, const char *name, const void *data, size_t length); VIPS_API int vips_image_get_blob(const VipsImage *image, const char *name, const void **data, size_t *length); VIPS_API int vips_image_get_int(const VipsImage *image, const char *name, int *out); VIPS_API void vips_image_set_int(VipsImage *image, const char *name, int i); VIPS_API int vips_image_get_double(const VipsImage *image, const char *name, double *out); VIPS_API void vips_image_set_double(VipsImage *image, const char *name, double d); VIPS_API int vips_image_get_string(const VipsImage *image, const char *name, const char **out); VIPS_API void vips_image_set_string(VipsImage *image, const char *name, const char *str); VIPS_API void vips_image_print_field(const VipsImage *image, const char *name); VIPS_API int vips_image_get_image(const VipsImage *image, const char *name, VipsImage **out); VIPS_API void vips_image_set_image(VipsImage *image, const char *name, VipsImage *im); VIPS_API void vips_image_set_array_int(VipsImage *image, const char *name, const int *array, int n); VIPS_API int vips_image_get_array_int(VipsImage *image, const char *name, int **out, int *n); VIPS_API int vips_image_get_array_double(VipsImage *image, const char *name, double **out, int *n); VIPS_API void vips_image_set_array_double(VipsImage *image, const char *name, const double *array, int n); VIPS_API int vips_image_history_printf(VipsImage *image, const char *format, ...) G_GNUC_PRINTF(2, 3); VIPS_API int vips_image_history_args(VipsImage *image, const char *name, int argc, char *argv[]); VIPS_API const char *vips_image_get_history(VipsImage *image); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_HEADER_H*/ libvips-8.15.1/libvips/include/vips/histogram.h000066400000000000000000000043271454007373500215160ustar00rootroot00000000000000/* histograms_lut.h * * 3/11/09 * - from proto.h */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_HISTOGRAM_H #define VIPS_HISTOGRAM_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ VIPS_API int vips_maplut(VipsImage *in, VipsImage **out, VipsImage *lut, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_percent(VipsImage *in, double percent, int *threshold, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_stdif(VipsImage *in, VipsImage **out, int width, int height, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_hist_cum(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_hist_norm(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_hist_equal(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_hist_plot(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_hist_match(VipsImage *in, VipsImage *ref, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_hist_local(VipsImage *in, VipsImage **out, int width, int height, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_hist_ismonotonic(VipsImage *in, gboolean *out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_hist_entropy(VipsImage *in, double *out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_case(VipsImage *index, VipsImage **cases, VipsImage **out, int n, ...) G_GNUC_NULL_TERMINATED; #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_HISTOGRAM_H*/ libvips-8.15.1/libvips/include/vips/image.h000066400000000000000000000424741454007373500206100ustar00rootroot00000000000000/* VIPS image class. * * 7/7/09 * - from vips.h * 2/3/11 * - move to GObject */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_IMAGE_H #define VIPS_IMAGE_H #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ /* If you read MSB first, you get these two values. * intel order: byte 0 = b6 * SPARC order: byte 0 = 08 */ #define VIPS_MAGIC_INTEL (0xb6a6f208U) #define VIPS_MAGIC_SPARC (0x08f2a6b6U) /* We have a maximum value for a coordinate at various points for sanity * checking. For example, vips_black() has a max with and height. We use int * for width/height so we could go up to 2bn, but it's good to have a lower * value set so we can see crazy numbers early. * * This was 1m for a while, but someone found a use for a 4m wide image. */ #define VIPS_MAX_COORD (10000000) typedef enum { VIPS_DEMAND_STYLE_ERROR = -1, VIPS_DEMAND_STYLE_SMALLTILE, VIPS_DEMAND_STYLE_FATSTRIP, VIPS_DEMAND_STYLE_THINSTRIP, VIPS_DEMAND_STYLE_ANY } VipsDemandStyle; /* Types of image descriptor we may have. The type field is advisory only: it * does not imply that any fields in IMAGE have valid data. */ typedef enum { VIPS_IMAGE_ERROR = -1, VIPS_IMAGE_NONE, /* no type set */ VIPS_IMAGE_SETBUF, /* malloced memory array */ VIPS_IMAGE_SETBUF_FOREIGN, /* memory array, don't free on close */ VIPS_IMAGE_OPENIN, /* input from fd with a window */ VIPS_IMAGE_MMAPIN, /* memory mapped input file */ VIPS_IMAGE_MMAPINRW, /* memory mapped read/write file */ VIPS_IMAGE_OPENOUT, /* output to fd */ VIPS_IMAGE_PARTIAL /* partial image */ } VipsImageType; typedef enum { VIPS_INTERPRETATION_ERROR = -1, VIPS_INTERPRETATION_MULTIBAND = 0, VIPS_INTERPRETATION_B_W = 1, VIPS_INTERPRETATION_HISTOGRAM = 10, VIPS_INTERPRETATION_XYZ = 12, VIPS_INTERPRETATION_LAB = 13, VIPS_INTERPRETATION_CMYK = 15, VIPS_INTERPRETATION_LABQ = 16, VIPS_INTERPRETATION_RGB = 17, VIPS_INTERPRETATION_CMC = 18, VIPS_INTERPRETATION_LCH = 19, VIPS_INTERPRETATION_LABS = 21, VIPS_INTERPRETATION_sRGB = 22, VIPS_INTERPRETATION_YXY = 23, VIPS_INTERPRETATION_FOURIER = 24, VIPS_INTERPRETATION_RGB16 = 25, VIPS_INTERPRETATION_GREY16 = 26, VIPS_INTERPRETATION_MATRIX = 27, VIPS_INTERPRETATION_scRGB = 28, VIPS_INTERPRETATION_HSV = 29, VIPS_INTERPRETATION_LAST = 30 } VipsInterpretation; typedef enum { VIPS_FORMAT_NOTSET = -1, VIPS_FORMAT_UCHAR = 0, VIPS_FORMAT_CHAR = 1, VIPS_FORMAT_USHORT = 2, VIPS_FORMAT_SHORT = 3, VIPS_FORMAT_UINT = 4, VIPS_FORMAT_INT = 5, VIPS_FORMAT_FLOAT = 6, VIPS_FORMAT_COMPLEX = 7, VIPS_FORMAT_DOUBLE = 8, VIPS_FORMAT_DPCOMPLEX = 9, VIPS_FORMAT_LAST = 10 } VipsBandFormat; typedef enum { VIPS_CODING_ERROR = -1, VIPS_CODING_NONE = 0, VIPS_CODING_LABQ = 2, VIPS_CODING_RAD = 6, VIPS_CODING_LAST = 7 } VipsCoding; typedef enum { VIPS_ACCESS_RANDOM, VIPS_ACCESS_SEQUENTIAL, VIPS_ACCESS_SEQUENTIAL_UNBUFFERED, VIPS_ACCESS_LAST } VipsAccess; typedef void *(*VipsStartFn)(VipsImage *out, void *a, void *b); typedef int (*VipsGenerateFn)(VipsRegion *out, void *seq, void *a, void *b, gboolean *stop); typedef int (*VipsStopFn)(void *seq, void *a, void *b); /* Struct we keep a record of execution time in. Passed to eval signal so * it can assess progress. */ typedef struct _VipsProgress { /*< private >*/ VipsImage *im; /* Image we are part of */ /*< public >*/ int run; /* Time we have been running */ int eta; /* Estimated seconds of computation left */ gint64 tpels; /* Number of pels we expect to calculate */ gint64 npels; /* Number of pels calculated so far */ int percent; /* Percent complete */ GTimer *start; /* Start time */ } VipsProgress; #define VIPS_TYPE_IMAGE (vips_image_get_type()) #define VIPS_IMAGE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_IMAGE, VipsImage)) #define VIPS_IMAGE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_IMAGE, VipsImageClass)) #define VIPS_IS_IMAGE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_IMAGE)) #define VIPS_IS_IMAGE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_IMAGE)) #define VIPS_IMAGE_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_IMAGE, VipsImageClass)) /* Matching typedef in basic.h. */ struct _VipsImage { VipsObject parent_instance; /*< private >*/ /* We have to keep these names for compatibility with the old API. * Don't use them though, use vips_image_get_width() and friends. */ int Xsize; /* image width, in pixels */ int Ysize; /* image height, in pixels */ int Bands; /* number of image bands */ VipsBandFormat BandFmt; /* pixel format */ VipsCoding Coding; /* pixel coding */ VipsInterpretation Type; /* pixel interpretation */ double Xres; /* horizontal pixels per millimetre */ double Yres; /* vertical pixels per millimetre */ int Xoffset; /* image origin hint */ int Yoffset; /* image origin hint */ /* No longer used, the names are here for compat with very, very old * code. */ int Length; short Compression; short Level; int Bbits; /* was number of bits in this format */ /* Old code expects to see this member, newer code has a param on * eval(). */ VipsProgress *time; /* Derived fields that some code can fiddle with. New code should use * vips_image_get_history() and friends. */ char *Hist; /* don't use, see vips_image_get_history() */ char *filename; /* pointer to copy of filename */ VipsPel *data; /* start of image data for WIO */ int kill; /* set to non-zero to block eval */ /* Everything below this private and only used internally by * VipsImage. */ /* During vips image read and write we need temporary float-sized * fields in the struct for staging xres/yres. Don't use these any * other time. */ float Xres_float; float Yres_float; char *mode; /* mode string passed to _new() */ VipsImageType dtype; /* descriptor type */ int fd; /* file descriptor */ void *baseaddr; /* pointer to the start of an mmap file */ size_t length; /* size of mmap area */ guint32 magic; /* magic from header, endian-ness of image */ /* Partial image stuff. All these fields are initialised * to NULL and ignored unless set by vips_image_generate() etc. */ VipsStartFn start_fn; VipsGenerateFn generate_fn; VipsStopFn stop_fn; void *client1; /* user arguments */ void *client2; GMutex *sslock; /* start-stop lock */ GSList *regions; /* list of regions current for this image */ VipsDemandStyle dhint; /* demand style hint */ /* Extra user-defined fields ... see vips_image_get() etc. */ GHashTable *meta; /* GhashTable of GValue */ GSList *meta_traverse; /* traverse order for Meta */ /* Part of mmap() read ... the sizeof() the header we skip from the * file start. Usually VIPS_SIZEOF_HEADER, but can be something else * for binary file read. * * guint64 so that we can guarantee to work even on systems with * strange ideas about large files. */ gint64 sizeof_header; /* If this is a large disc image, don't map the whole thing, instead * have a set of windows shared between the regions active on the * image. List of VipsWindow. */ GSList *windows; /* Upstream/downstream relationships, built from args to * vips_demand_hint(). * * We use these to invalidate downstream pixel buffers. * Use 'serial' to spot circular dependencies. * * See also hint_set below. */ GSList *upstream; GSList *downstream; int serial; /* Keep a list of recounted GValue strings so we can share hist * efficiently. */ GSList *history_list; /* The VipsImage (if any) we should signal eval progress on. */ VipsImage *progress_signal; /* Record the file length here. We use this to stop ourselves mapping * things beyond the end of the file in the case that the file has * been truncated. * * gint64 so that we can guarantee to work even on systems with * strange ideas about large files. */ gint64 file_length; /* Set this when vips_demand_hint_array() is called, and check in any * operation that will demand pixels from the image. * * We use vips_demand_hint_array() to build the tree of * upstream/downstream relationships, so it's a mandatory thing. */ gboolean hint_set; /* Delete-on-close is hard to do with signals and callbacks since we * really need to do this in finalize after the fd has been closed, * but you can't emit signals then. * * Also keep a private copy of the filename string to be deleted, * since image->filename will be freed in _dispose(). */ gboolean delete_on_close; char *delete_on_close_filename; }; typedef struct _VipsImageClass { VipsObjectClass parent_class; /* Signals we emit. */ /* Evaluation is starting. */ void (*preeval)(VipsImage *image, VipsProgress *progress, void *data); /* Evaluation progress. */ void (*eval)(VipsImage *image, VipsProgress *progress, void *data); /* Evaluation is ending. */ void (*posteval)(VipsImage *image, VipsProgress *progress, void *data); /* An image has been written to. * Used by eg. vips_image_new_mode("x.jpg", "w") to do the * final write to jpeg. * Set *result to non-zero to indicate an error on write. */ void (*written)(VipsImage *image, int *result, void *data); /* An image has been modified in some way and all caches * need dropping. */ void (*invalidate)(VipsImage *image, void *data); /* Minimise this pipeline. * * This is triggered (sometimes) at the end of eval to signal that * we're probably done and that operations involved should try to * minimise memory use by, for example, dropping caches. * * See vips_tilecache(). */ void (*minimise)(VipsImage *image, void *data); } VipsImageClass; /* Don't put spaces around void here, it breaks gtk-doc. */ VIPS_API GType vips_image_get_type(void); /* Has to be guint64 and not size_t/off_t since we have to be able to address * huge images on platforms with 32-bit files. */ /* Pixel address calculation macros. */ #define VIPS_IMAGE_SIZEOF_ELEMENT(I) \ (vips_format_sizeof_unsafe((I)->BandFmt)) #define VIPS_IMAGE_SIZEOF_PEL(I) \ (VIPS_IMAGE_SIZEOF_ELEMENT(I) * (I)->Bands) #define VIPS_IMAGE_SIZEOF_LINE(I) \ (VIPS_IMAGE_SIZEOF_PEL(I) * (I)->Xsize) #define VIPS_IMAGE_SIZEOF_IMAGE(I) \ (VIPS_IMAGE_SIZEOF_LINE(I) * (I)->Ysize) #define VIPS_IMAGE_N_ELEMENTS(I) \ ((I)->Bands * (I)->Xsize) #define VIPS_IMAGE_N_PELS(I) \ ((guint64) (I)->Xsize * (I)->Ysize) /* If VIPS_DEBUG is defined, add bounds checking. */ #ifdef VIPS_DEBUG #define VIPS_IMAGE_ADDR(I, X, Y) \ (((X) >= 0 && (X) < VIPS_IMAGE(I)->Xsize && \ (Y) >= 0 && (Y) < VIPS_IMAGE(I)->Ysize && \ VIPS_IMAGE(I)->data) \ ? (VIPS_IMAGE(I)->data + \ (Y) *VIPS_IMAGE_SIZEOF_LINE(I) + \ (X) *VIPS_IMAGE_SIZEOF_PEL(I)) \ : (fprintf(stderr, \ "VIPS_IMAGE_ADDR: point out of bounds, " \ "file \"%s\", line %d\n" \ "(point x=%d, y=%d\n" \ " should have been within VipsRect left=%d, top=%d, " \ "width=%d, height=%d)\n", \ __FILE__, __LINE__, \ (X), (Y), \ 0, 0, \ VIPS_IMAGE(I)->Xsize, \ VIPS_IMAGE(I)->Ysize), \ (VipsPel *) NULL)) #else /*!VIPS_DEBUG*/ #define VIPS_IMAGE_ADDR(I, X, Y) \ ((I)->data + \ (Y) *VIPS_IMAGE_SIZEOF_LINE(I) + \ (X) *VIPS_IMAGE_SIZEOF_PEL(I)) #endif /*VIPS_DEBUG*/ #ifdef VIPS_DEBUG #define VIPS_MATRIX(I, X, Y) \ ((VIPS_IMAGE(I)->BandFmt == VIPS_FORMAT_DOUBLE && \ VIPS_IMAGE(I)->Bands == 1) \ ? ((double *) VIPS_IMAGE_ADDR(I, X, Y)) \ : (fprintf(stderr, "VIPS_MATRIX: not a matrix image\n"), \ (double *) NULL)) #else /*!VIPS_DEBUG*/ #define VIPS_MATRIX(I, X, Y) \ ((double *) VIPS_IMAGE_ADDR(I, X, Y)) #endif /*VIPS_DEBUG*/ VIPS_API void vips_progress_set(gboolean progress); VIPS_API void vips_image_invalidate_all(VipsImage *image); VIPS_API void vips_image_minimise_all(VipsImage *image); VIPS_API gboolean vips_image_is_sequential(VipsImage *image); VIPS_API void vips_image_set_progress(VipsImage *image, gboolean progress); VIPS_API gboolean vips_image_iskilled(VipsImage *image); VIPS_API void vips_image_set_kill(VipsImage *image, gboolean kill); VIPS_API char *vips_filename_get_filename(const char *vips_filename); VIPS_API char *vips_filename_get_options(const char *vips_filename); VIPS_API VipsImage *vips_image_new(void); VIPS_API VipsImage *vips_image_new_memory(void); VIPS_API VipsImage *vips_image_memory(void); VIPS_API VipsImage *vips_image_new_from_file(const char *name, ...) G_GNUC_NULL_TERMINATED; VIPS_API VipsImage *vips_image_new_from_file_RW(const char *filename); VIPS_API VipsImage *vips_image_new_from_file_raw(const char *filename, int xsize, int ysize, int bands, guint64 offset); VIPS_API VipsImage *vips_image_new_from_memory(const void *data, size_t size, int width, int height, int bands, VipsBandFormat format); VIPS_API VipsImage *vips_image_new_from_memory_copy(const void *data, size_t size, int width, int height, int bands, VipsBandFormat format); VIPS_API VipsImage *vips_image_new_from_buffer(const void *buf, size_t len, const char *option_string, ...) G_GNUC_NULL_TERMINATED; VIPS_API VipsImage *vips_image_new_from_source(VipsSource *source, const char *option_string, ...) G_GNUC_NULL_TERMINATED; VIPS_API VipsImage *vips_image_new_matrix(int width, int height); VIPS_API VipsImage *vips_image_new_matrixv(int width, int height, ...); VIPS_API VipsImage *vips_image_new_matrix_from_array(int width, int height, const double *array, int size); VIPS_API VipsImage *vips_image_matrix_from_array(int width, int height, const double *array, int size); VIPS_API VipsImage *vips_image_new_from_image(VipsImage *image, const double *c, int n); VIPS_API VipsImage *vips_image_new_from_image1(VipsImage *image, double c); VIPS_API void vips_image_set_delete_on_close(VipsImage *image, gboolean delete_on_close); VIPS_API guint64 vips_get_disc_threshold(void); VIPS_API VipsImage *vips_image_new_temp_file(const char *format); VIPS_API int vips_image_write(VipsImage *image, VipsImage *out); VIPS_API int vips_image_write_to_file(VipsImage *image, const char *name, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_image_write_to_buffer(VipsImage *in, const char *suffix, void **buf, size_t *size, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_image_write_to_target(VipsImage *in, const char *suffix, VipsTarget *target, ...) G_GNUC_NULL_TERMINATED; VIPS_API void *vips_image_write_to_memory(VipsImage *in, size_t *size); VIPS_API int vips_image_decode_predict(VipsImage *in, int *bands, VipsBandFormat *format); VIPS_API int vips_image_decode(VipsImage *in, VipsImage **out); VIPS_API int vips_image_encode(VipsImage *in, VipsImage **out, VipsCoding coding); VIPS_API gboolean vips_image_isMSBfirst(VipsImage *image); VIPS_API gboolean vips_image_isfile(VipsImage *image); VIPS_API gboolean vips_image_ispartial(VipsImage *image); VIPS_API gboolean vips_image_hasalpha(VipsImage *image); VIPS_API VipsImage *vips_image_copy_memory(VipsImage *image); VIPS_API int vips_image_wio_input(VipsImage *image); VIPS_API int vips_image_pio_input(VipsImage *image); VIPS_API int vips_image_pio_output(VipsImage *image); VIPS_API int vips_image_inplace(VipsImage *image); VIPS_API int vips_image_write_prepare(VipsImage *image); VIPS_API int vips_image_write_line(VipsImage *image, int ypos, VipsPel *linebuffer); VIPS_API gboolean vips_band_format_isint(VipsBandFormat format); VIPS_API gboolean vips_band_format_isuint(VipsBandFormat format); VIPS_API gboolean vips_band_format_is8bit(VipsBandFormat format); VIPS_API gboolean vips_band_format_isfloat(VipsBandFormat format); VIPS_API gboolean vips_band_format_iscomplex(VipsBandFormat format); VIPS_API int vips_system(const char *cmd_format, ...) G_GNUC_NULL_TERMINATED; /* Defined in type.c but declared here, since they use VipsImage. */ VIPS_API VipsArrayImage *vips_array_image_new(VipsImage **array, int n); VIPS_API VipsArrayImage *vips_array_image_newv(int n, ...); VIPS_API VipsArrayImage *vips_array_image_new_from_string(const char *string, VipsAccess flags); VIPS_API VipsArrayImage *vips_array_image_empty(void); VIPS_API VipsArrayImage *vips_array_image_append(VipsArrayImage *array, VipsImage *image); VIPS_API VipsImage **vips_array_image_get(VipsArrayImage *array, int *n); VIPS_API VipsImage **vips_value_get_array_image(const GValue *value, int *n); VIPS_API void vips_value_set_array_image(GValue *value, int n); /* Defined in reorder.c, but really a function on image. */ VIPS_API int vips_reorder_prepare_many(VipsImage *image, VipsRegion **regions, VipsRect *r); VIPS_API void vips_reorder_margin_hint(VipsImage *image, int margin); VIPS_API void vips_image_free_buffer(VipsImage *image, void *buffer); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_IMAGE_H*/ libvips-8.15.1/libvips/include/vips/inlines.h000066400000000000000000000026671454007373500211670ustar00rootroot00000000000000/* Inline maths functions if they are missing from libm */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_INLINE_H #define VIPS_INLINE_H /* glib promises to define inline in a portable way */ #include #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #ifdef HAVE_HYPOT #define vips__hypot hypot #else /* HAVE_HYPOT */ static inline double vips__hypot(double a, double b) { double ta = fabs(a); double tb = fabs(b); if (ta > tb) { tb = b / a; return ta * sqrt(1.0 + tb * tb); } else { ta = a / b; return tb * sqrt(1.0 + ta * ta); } } #endif /* HAVE_HYPOT */ #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_INLINE_H*/ libvips-8.15.1/libvips/include/vips/internal.h000066400000000000000000000264741454007373500213440ustar00rootroot00000000000000/* Declarations only used internally to vips. See private.h for declarations * which are not public, but which have to be publicly visible. * * 11/9/06 * - cut from proto.h */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_INTERNAL_H #define VIPS_INTERNAL_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ /* Try to make an O_BINARY and O_NOINHERIT ... sometimes need the leading '_'. */ #if defined(G_PLATFORM_WIN32) || defined(G_WITH_CYGWIN) #ifndef O_BINARY #ifdef _O_BINARY #define O_BINARY _O_BINARY #endif /*_O_BINARY*/ #endif /*!O_BINARY*/ #ifndef O_NOINHERIT #ifdef _O_NOINHERIT #define O_NOINHERIT _O_NOINHERIT #endif /*_O_NOINHERIT*/ #endif /*!O_NOINHERIT*/ #endif /*defined(G_PLATFORM_WIN32) || defined(G_WITH_CYGWIN)*/ /* If we have O_BINARY, add it to a mode flags set. */ #ifdef O_BINARY #define BINARYIZE(M) ((M) | O_BINARY) #else /*!O_BINARY*/ #define BINARYIZE(M) (M) #endif /*O_BINARY*/ /* If we have O_CLOEXEC or O_NOINHERIT, add it to a mode flags set. */ #ifdef O_CLOEXEC #define CLOEXEC(M) ((M) | O_CLOEXEC) #elif defined(O_NOINHERIT) #define CLOEXEC(M) ((M) | O_NOINHERIT) #else /*!O_CLOEXEC && !O_NOINHERIT*/ #define CLOEXEC(M) (M) #endif /*O_CLOEXEC*/ /* C99 restrict keyword */ #ifdef __cplusplus #define restrict __restrict #endif /* << on an int is undefined in C if the int is negative. Imagine a machine * that uses 1s complement, for example. * * Fuzzers find and warn about this, so we must use this macro instead. Cast * to uint, shift, and cast back. */ #define VIPS_LSHIFT_INT(I, N) ((int) ((unsigned int) (I) << (N))) /* What we store in the Meta hash table. We can't just use GHashTable's * key/value pairs, since we need to iterate over meta in Meta_traverse order. * * We don't refcount at this level ... large meta values are refcounted by * their GValue implementation, see eg. MetaArea. */ typedef struct _VipsMeta { VipsImage *im; char *name; /* strdup() of field name */ GValue value; /* copy of value */ } VipsMeta; /* TODO(kleisauke): VIPS_API is required by the magick module. */ VIPS_API int vips__exif_parse(VipsImage *image); int vips__exif_update(VipsImage *image); void vips_check_init(void); void vips__vector_init(void); void vips__meta_init_types(void); void vips__meta_destroy(VipsImage *im); int vips__meta_cp(VipsImage *, const VipsImage *); /* Default tile geometry. */ extern int vips__tile_width; extern int vips__tile_height; extern int vips__fatstrip_height; extern int vips__thinstrip_height; /* Default n threads. */ extern int vips__concurrency; /* abort() on any error. */ extern int vips__fatal; /* Enable leak check. */ extern int vips__leak; /* Give progress feedback. */ extern int vips__progress; /* Show info messages. Handy for debugging. */ extern int vips__info; /* A string giving the image size (in bytes of uncompressed image) above which * we decompress to disc on open. */ extern char *vips__disc_threshold; extern gboolean vips__cache_dump; extern gboolean vips__cache_trace; void vips__thread_init(void); void vips__threadpool_init(void); void vips__threadpool_shutdown(void); int vips__thread_execute(const char *name, GFunc func, gpointer data); VIPS_API void vips__worker_lock(GMutex *mutex); void vips__cache_init(void); int vips__print_renders(void); int vips__type_leak(void); int vips__object_leak(void); /* iofuncs */ int vips__open_image_read(const char *filename); int vips__open_image_write(const char *filename, gboolean temp); /* im_image_open_input() needs to have this visible. */ #if VIPS_ENABLE_DEPRECATED VIPS_API #endif int vips_image_open_input(VipsImage *image); /* im_image_open_output() needs to have this visible. */ #if VIPS_ENABLE_DEPRECATED VIPS_API #endif int vips_image_open_output(VipsImage *image); void vips__link_break_all(VipsImage *im); void *vips__link_map(VipsImage *image, gboolean upstream, VipsSListMap2Fn fn, void *a, void *b); gboolean vips__mmap_supported(int fd); void *vips__mmap(int fd, int writeable, size_t length, gint64 offset); int vips__munmap(const void *start, size_t length); /* im_mapfile() needs to have this visible. */ #if VIPS_ENABLE_DEPRECATED VIPS_API #endif int vips_mapfile(VipsImage *image); /* im_mapfilerw() needs to have this visible. */ #if VIPS_ENABLE_DEPRECATED VIPS_API #endif int vips_mapfilerw(VipsImage *image); /* im_remapfilerw() needs to have this visible. */ #if VIPS_ENABLE_DEPRECATED VIPS_API #endif int vips_remapfilerw(VipsImage *image); void vips__buffer_init(void); void vips__buffer_shutdown(void); void vips__copy_4byte(int swap, unsigned char *to, unsigned char *from); void vips__copy_2byte(gboolean swap, unsigned char *to, unsigned char *from); guint32 vips__file_magic(const char *filename); /* TODO(kleisauke): VIPS_API is required by vipsheader. */ VIPS_API int vips__has_extension_block(VipsImage *im); /* TODO(kleisauke): VIPS_API is required by vipsheader. */ VIPS_API void *vips__read_extension_block(VipsImage *im, int *size); /* TODO(kleisauke): VIPS_API is required by vipsedit. */ VIPS_API int vips__write_extension_block(VipsImage *im, void *buf, int size); int vips__writehist(VipsImage *image); /* TODO(kleisauke): VIPS_API is required by vipsedit. */ VIPS_API int vips__read_header_bytes(VipsImage *im, unsigned char *from); /* TODO(kleisauke): VIPS_API is required by vipsedit. */ VIPS_API int vips__write_header_bytes(VipsImage *im, unsigned char *to); int vips__image_meta_copy(VipsImage *dst, const VipsImage *src); extern GMutex *vips__global_lock; int vips_image_written(VipsImage *image); void vips_image_preeval(VipsImage *image); void vips_image_eval(VipsImage *image, guint64 processed); void vips_image_posteval(VipsImage *image); /* im_openout() needs to have this visible. */ #if VIPS_ENABLE_DEPRECATED VIPS_API #endif VipsImage *vips_image_new_mode(const char *filename, const char *mode); int vips__formatalike_vec(VipsImage **in, VipsImage **out, int n); int vips__sizealike_vec(VipsImage **in, VipsImage **out, int n); int vips__bandup(const char *domain, VipsImage *in, VipsImage **out, int n); int vips__bandalike_vec(const char *domain, VipsImage **in, VipsImage **out, int n, int base_bands); int vips__formatalike(VipsImage *in1, VipsImage *in2, VipsImage **out1, VipsImage **out2); int vips__sizealike(VipsImage *in1, VipsImage *in2, VipsImage **out1, VipsImage **out2); int vips__bandalike(const char *domain, VipsImage *in1, VipsImage *in2, VipsImage **out1, VipsImage **out2); /* draw */ VipsPel *vips__vector_to_pels(const char *domain, int bands, VipsBandFormat format, VipsCoding coding, double *real, double *imag, int n); /* TODO(kleisauke): VIPS_API is required by the poppler module. */ VIPS_API VipsPel *vips__vector_to_ink(const char *domain, VipsImage *im, double *real, double *imag, int n); int vips__draw_flood_direct(VipsImage *image, VipsImage *test, int serial, int x, int y); int vips__draw_mask_direct(VipsImage *image, VipsImage *mask, VipsPel *ink, int x, int y); typedef void (*VipsDrawPoint)(VipsImage *image, int x, int y, void *client); typedef void (*VipsDrawScanline)(VipsImage *image, int y, int x1, int x2, int quadrant, void *client); void vips__draw_line_direct(VipsImage *image, int x1, int y1, int x2, int y2, VipsDrawPoint draw_point, void *client); void vips__draw_circle_direct(VipsImage *image, int cx, int cy, int r, VipsDrawScanline draw_scanline, void *client); int vips__insert_just_one(VipsRegion *out, VipsRegion *in, int x, int y); int vips__insert_paste_region(VipsRegion *out, VipsRegion *in, VipsRect *pos); /* Register base vips interpolators, called during startup. */ void vips__interpolate_init(void); /* Start up various packages. */ void vips_arithmetic_operation_init(void); void vips_conversion_operation_init(void); void vips_resample_operation_init(void); void vips_foreign_operation_init(void); void vips_colour_operation_init(void); void vips_histogram_operation_init(void); void vips_freqfilt_operation_init(void); void vips_create_operation_init(void); void vips_morphology_operation_init(void); void vips_convolution_operation_init(void); void vips_draw_operation_init(void); void vips_mosaicing_operation_init(void); void vips_cimg_operation_init(void); guint64 vips__parse_size(const char *size_string); /* TODO(kleisauke): VIPS_API is required by vipsthumbnail. */ VIPS_API int vips__substitute(char *buf, size_t len, char *sub); int vips_check_coding_labq(const char *domain, VipsImage *im); int vips_check_coding_rad(const char *domain, VipsImage *im); int vips_check_bands_3ormore(const char *domain, VipsImage *im); int vips__byteswap_bool(VipsImage *in, VipsImage **out, gboolean swap); char *vips__xml_properties(VipsImage *image); /* TODO(kleisauke): VIPS_API is required by the poppler module. */ VIPS_API void vips__premultiplied_bgra2rgba(guint32 *restrict p, int n); VIPS_API void vips__rgba2bgra_premultiplied(guint32 *restrict p, int n); void vips__bgra2rgba(guint32 *restrict p, int n); void vips__Lab2LabQ_vec(VipsPel *out, float *in, int width); void vips__LabQ2Lab_vec(float *out, VipsPel *in, int width); #ifdef DEBUG_LEAK extern GQuark vips__image_pixels_quark; #endif /*DEBUG_LEAK*/ /* With DEBUG_LEAK, hang one of these off each image and count pixels * calculated. */ typedef struct _VipsImagePixels { const char *nickname; gint64 tpels; /* Number of pels we expect to calculate */ gint64 npels; /* Number of pels calculated so far */ } VipsImagePixels; int vips__foreign_convert_saveable(VipsImage *in, VipsImage **ready, VipsSaveable saveable, VipsBandFormat *format, VipsCoding *coding, VipsArrayDouble *background); int vips_foreign_load(const char *filename, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; int vips_foreign_save(VipsImage *in, const char *filename, ...) G_GNUC_NULL_TERMINATED; int vips__image_intize(VipsImage *in, VipsImage **out); void vips__reorder_init(void); int vips__reorder_set_input(VipsImage *image, VipsImage **in); void vips__reorder_clear(VipsImage *image); /* Window manager API. */ VipsWindow *vips_window_take(VipsWindow *window, VipsImage *im, int top, int height); int vips__profile_set(VipsImage *image, const char *name); int vips__lrmosaic(VipsImage *ref, VipsImage *sec, VipsImage *out, int bandno, int xref, int yref, int xsec, int ysec, int hwindowsize, int hsearchsize, int mwidth); int vips__tbmosaic(VipsImage *ref, VipsImage *sec, VipsImage *out, int bandno, int xref, int yref, int xsec, int ysec, int hwindowsize, int hsearchsize, int mwidth); int vips__correl(VipsImage *ref, VipsImage *sec, int xref, int yref, int xsec, int ysec, int hwindowsize, int hsearchsize, double *correlation, int *x, int *y); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_INTERNAL_H*/ libvips-8.15.1/libvips/include/vips/interpolate.h000066400000000000000000000102201454007373500220340ustar00rootroot00000000000000/* Various interpolators. * * J.Cupitt, 15/10/08 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_INTERPOLATE_H #define VIPS_INTERPOLATE_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #define VIPS_TYPE_INTERPOLATE (vips_interpolate_get_type()) #define VIPS_INTERPOLATE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_INTERPOLATE, VipsInterpolate)) #define VIPS_INTERPOLATE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_INTERPOLATE, VipsInterpolateClass)) #define VIPS_IS_INTERPOLATE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_INTERPOLATE)) #define VIPS_IS_INTERPOLATE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_INTERPOLATE)) #define VIPS_INTERPOLATE_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_INTERPOLATE, VipsInterpolateClass)) typedef struct _VipsInterpolate { VipsObject parent_object; } VipsInterpolate; /* An interpolation function. This is a class method, but we have a lookup * function for it to speed up dispatch. Write to the memory at "out", * interpolate the value at position (x, y) in "in". */ typedef void (*VipsInterpolateMethod)(VipsInterpolate *interpolate, void *out, VipsRegion *in, double x, double y); typedef struct _VipsInterpolateClass { VipsObjectClass parent_class; /* Write to pixel out(x,y), interpolating from in(x,y). The caller has * to set the regions up. */ VipsInterpolateMethod interpolate; /* This interpolator needs a window this many pixels across and down. */ int (*get_window_size)(VipsInterpolate *interpolate); /* Or just set this if you want a constant. */ int window_size; /* Stencils are offset by this much. Default to window_size / 2 - 1 * (centering) if get_window_offset is NULL and window_offset is -1. */ int (*get_window_offset)(VipsInterpolate *interpolate); int window_offset; } VipsInterpolateClass; /* Don't put spaces around void here, it breaks gtk-doc. */ VIPS_API GType vips_interpolate_get_type(void); VIPS_API void vips_interpolate(VipsInterpolate *interpolate, void *out, VipsRegion *in, double x, double y); VIPS_API VipsInterpolateMethod vips_interpolate_get_method(VipsInterpolate *interpolate); VIPS_API int vips_interpolate_get_window_size(VipsInterpolate *interpolate); VIPS_API int vips_interpolate_get_window_offset(VipsInterpolate *interpolate); /* How many bits of precision we keep for transformations, ie. how many * pre-computed matrices we have. */ #define VIPS_TRANSFORM_SHIFT (6) #define VIPS_TRANSFORM_SCALE (1 << VIPS_TRANSFORM_SHIFT) /* How many bits of precision we keep for interpolation, ie. where the decimal * is in the fixed-point tables. For 16-bit pixels, we need 16 bits for the * data and 4 bits to add 16 values together. That leaves 12 bits for the * fractional part. */ #define VIPS_INTERPOLATE_SHIFT (12) #define VIPS_INTERPOLATE_SCALE (1 << VIPS_INTERPOLATE_SHIFT) /* Convenience: return static interpolators, no need to unref. */ VIPS_API VipsInterpolate *vips_interpolate_nearest_static(void); VIPS_API VipsInterpolate *vips_interpolate_bilinear_static(void); /* Convenience: make an interpolator from a nickname. g_object_unref() when * you're done with it. */ VIPS_API VipsInterpolate *vips_interpolate_new(const char *nickname); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_INTERPOLATE_H*/ libvips-8.15.1/libvips/include/vips/intl.h000066400000000000000000000004311454007373500204570ustar00rootroot00000000000000/* i18n stuff for vips. Deprecated in favour of glib/gi18n.h. */ #ifndef VIPS_INTL_H #define VIPS_INTL_H #ifdef ENABLE_NLS #include #else /*!ENABLE_NLS*/ #define _(String) (String) #define N_(String) (String) #endif /* ENABLE_NLS */ #endif /* VIPS_INTL_H */ libvips-8.15.1/libvips/include/vips/mask.h000066400000000000000000000105051454007373500204470ustar00rootroot00000000000000/* mask.h * * 20/9/09 * - from proto.h */ /* All deprecated. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef IM_MASK_H #define IM_MASK_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ typedef struct im__INTMASK { int xsize; int ysize; int scale; int offset; int *coeff; char *filename; } INTMASK; typedef struct im__DOUBLEMASK { int xsize; int ysize; double scale; double offset; double *coeff; char *filename; } DOUBLEMASK; #define IM_MASK(M, X, Y) ((M)->coeff[(X) + (Y) * (M)->xsize]) VIPS_DEPRECATED INTMASK *im_create_imask(const char *filename, int xsize, int ysize); VIPS_DEPRECATED INTMASK *im_create_imaskv(const char *filename, int xsize, int ysize, ...); VIPS_DEPRECATED DOUBLEMASK *im_create_dmask(const char *filename, int xsize, int ysize); VIPS_DEPRECATED DOUBLEMASK *im_create_dmaskv(const char *filename, int xsize, int ysize, ...); VIPS_DEPRECATED INTMASK *im_read_imask(const char *filename); VIPS_DEPRECATED DOUBLEMASK *im_read_dmask(const char *filename); VIPS_DEPRECATED void im_print_imask(INTMASK *in); VIPS_DEPRECATED void im_print_dmask(DOUBLEMASK *in); VIPS_DEPRECATED int im_write_imask(INTMASK *in); VIPS_DEPRECATED int im_write_dmask(DOUBLEMASK *in); VIPS_DEPRECATED int im_write_imask_name(INTMASK *in, const char *filename); VIPS_DEPRECATED int im_write_dmask_name(DOUBLEMASK *in, const char *filename); VIPS_DEPRECATED int im_free_imask(INTMASK *in); VIPS_DEPRECATED int im_free_dmask(DOUBLEMASK *in); VIPS_DEPRECATED INTMASK *im_log_imask(const char *filename, double sigma, double min_ampl); VIPS_DEPRECATED DOUBLEMASK *im_log_dmask(const char *filename, double sigma, double min_ampl); VIPS_DEPRECATED INTMASK *im_gauss_imask(const char *filename, double sigma, double min_ampl); VIPS_DEPRECATED INTMASK *im_gauss_imask_sep(const char *filename, double sigma, double min_ampl); VIPS_DEPRECATED DOUBLEMASK *im_gauss_dmask(const char *filename, double sigma, double min_ampl); VIPS_DEPRECATED DOUBLEMASK *im_gauss_dmask_sep(const char *filename, double sigma, double min_ampl); VIPS_DEPRECATED INTMASK *im_dup_imask(INTMASK *in, const char *filename); VIPS_DEPRECATED DOUBLEMASK *im_dup_dmask(DOUBLEMASK *in, const char *filename); VIPS_DEPRECATED INTMASK *im_scale_dmask(DOUBLEMASK *in, const char *filename); VIPS_DEPRECATED void im_norm_dmask(DOUBLEMASK *mask); VIPS_DEPRECATED DOUBLEMASK *im_imask2dmask(INTMASK *in, const char *filename); VIPS_DEPRECATED INTMASK *im_dmask2imask(DOUBLEMASK *in, const char *filename); VIPS_DEPRECATED INTMASK *im_rotate_imask90(INTMASK *in, const char *filename); VIPS_DEPRECATED INTMASK *im_rotate_imask45(INTMASK *in, const char *filename); VIPS_DEPRECATED DOUBLEMASK *im_rotate_dmask90(DOUBLEMASK *in, const char *filename); VIPS_DEPRECATED DOUBLEMASK *im_rotate_dmask45(DOUBLEMASK *in, const char *filename); VIPS_DEPRECATED DOUBLEMASK *im_mattrn(DOUBLEMASK *in, const char *filename); VIPS_DEPRECATED DOUBLEMASK *im_matcat(DOUBLEMASK *top, DOUBLEMASK *bottom, const char *filename); VIPS_DEPRECATED DOUBLEMASK *im_matmul(DOUBLEMASK *in1, DOUBLEMASK *in2, const char *filename); VIPS_DEPRECATED DOUBLEMASK *im_lu_decomp(const DOUBLEMASK *mat, const char *filename); VIPS_DEPRECATED int im_lu_solve(const DOUBLEMASK *lu, double *vec); VIPS_DEPRECATED DOUBLEMASK *im_matinv(const DOUBLEMASK *mat, const char *filename); VIPS_DEPRECATED int im_matinv_inplace(DOUBLEMASK *mat); VIPS_DEPRECATED DOUBLEMASK *im_local_dmask(struct _VipsImage *out, DOUBLEMASK *mask); VIPS_DEPRECATED INTMASK *im_local_imask(struct _VipsImage *out, INTMASK *mask); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*IM_MASK_H*/ libvips-8.15.1/libvips/include/vips/memory.h000066400000000000000000000043771454007373500210360ustar00rootroot00000000000000/* memory utilities * * J.Cupitt, 8/4/93 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_MEMORY_H #define VIPS_MEMORY_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #define VIPS_FREEF(F, S) \ G_STMT_START \ { \ if (S) { \ (void) F((S)); \ (S) = 0; \ } \ } \ G_STMT_END #define VIPS_FREE(S) VIPS_FREEF(g_free, (S)); #define VIPS_SETSTR(S, V) \ G_STMT_START \ { \ const char *sst = (V); \ \ if ((S) != sst) { \ if (!(S) || !sst || strcmp((S), sst) != 0) { \ VIPS_FREE(S); \ if (sst) \ (S) = g_strdup(sst); \ } \ } \ } \ G_STMT_END #define VIPS_MALLOC(OBJ, S) \ (vips_malloc(VIPS_OBJECT(OBJ), S)) #define VIPS_NEW(OBJ, T) \ ((T *) VIPS_MALLOC(OBJ, sizeof(T))) #define VIPS_ARRAY(OBJ, N, T) \ ((T *) VIPS_MALLOC(OBJ, (N) * sizeof(T))) VIPS_API void *vips_malloc(VipsObject *object, size_t size); VIPS_API char *vips_strdup(VipsObject *object, const char *str); VIPS_API void vips_tracked_free(void *s); VIPS_API void vips_tracked_aligned_free(void *s); VIPS_API void *vips_tracked_malloc(size_t size); VIPS_API void *vips_tracked_aligned_alloc(size_t size, size_t align); VIPS_API size_t vips_tracked_get_mem(void); VIPS_API size_t vips_tracked_get_mem_highwater(void); VIPS_API int vips_tracked_get_allocs(void); VIPS_API int vips_tracked_open(const char *pathname, int flags, int mode); VIPS_API int vips_tracked_close(int fd); VIPS_API int vips_tracked_get_files(void); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_MEMORY_H*/ libvips-8.15.1/libvips/include/vips/meson.build000066400000000000000000000064111454007373500215060ustar00rootroot00000000000000public_other_headers = files( 'buf.h', 'connection.h', 'dbuf.h', 'debug.h', 'format.h', 'gate.h', 'generate.h', 'private.h', 'sbuf.h', 'semaphore.h', 'thread.h', 'threadpool.h', 'transform.h', 'util.h', 'vector.h', ) public_deprecated_headers = files( 'almostdeprecated.h', 'deprecated.h', 'dispatch.h', 'intl.h', 'mask.h', 'video.h', 'vips7compat.h', ) if get_option('deprecated') public_other_headers += public_deprecated_headers endif public_headers = files( 'arithmetic.h', 'basic.h', 'colour.h', 'conversion.h', 'convolution.h', 'create.h', 'draw.h', 'error.h', 'foreign.h', 'freqfilt.h', 'header.h', 'histogram.h', 'image.h', 'interpolate.h', 'memory.h', 'morphology.h', 'mosaicing.h', 'object.h', 'operation.h', 'rect.h', 'region.h', 'resample.h', 'type.h', 'vips.h', ) enumtypes = gnome.mkenums( 'enumtypes', sources: files( 'resample.h', 'memory.h', 'create.h', 'foreign.h', 'arithmetic.h', 'conversion.h', 'util.h', 'image.h', 'colour.h', 'operation.h', 'convolution.h', 'morphology.h', 'draw.h', 'basic.h', 'object.h', 'region.h' ), h_template: 'enumtypes.h.in', c_template: 'enumtypes.c.in', install_header: true, install_dir: get_option('prefix') / get_option('includedir') / 'vips' ) vips_verbose_config = [] foreach _, section : build_summary foreach key, arr : section if key.contains('gtk-doc') or \ key.contains('doxygen') or \ key.contains('introspection') or \ key.contains('examples') continue endif vips_verbose_config += '@0@: @1@@2@@3@@4@'.format(key, arr[0], arr.length() > 1 ? arr[1] : '', arr.length() > 2 ? arr[2] : '', arr.length() > 3 ? arr[3] : '') endforeach endforeach version_data = configuration_data() version_data.set('VIPS_VERSION', meson.project_version()) version_data.set('VIPS_VERSION_STRING', meson.project_version()) version_data.set('VIPS_MAJOR_VERSION', version_major) version_data.set('VIPS_MINOR_VERSION', version_minor) version_data.set('VIPS_MICRO_VERSION', version_patch) version_data.set('LIBRARY_CURRENT', library_current) version_data.set('LIBRARY_REVISION', library_revision) version_data.set('LIBRARY_AGE', library_age) version_data.set('VIPS_CONFIG', '\\n'.join(vips_verbose_config)) version_data.set10('VIPS_ENABLE_DEPRECATED', get_option('deprecated')) version_header = configure_file( input: 'version.h.in', output: 'version.h', configuration: version_data, install: true, install_dir: get_option('prefix') / get_option('includedir') / 'vips' ) libvips_sources += public_headers libvips_sources += enumtypes libvips_sources += version_header install_headers( public_other_headers, public_headers, subdir: 'vips' ) libvips_includedir = include_directories('..') libvips_headers_dep = declare_dependency( sources: [ public_headers, enumtypes[1], version_header, ], include_directories: libvips_includedir ) libvips_deps += libvips_headers_dep libvips-8.15.1/libvips/include/vips/morphology.h000066400000000000000000000035111454007373500217120ustar00rootroot00000000000000/* morphology.h * * 20/9/09 * - from proto.h */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_MORPHOLOGY_H #define VIPS_MORPHOLOGY_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ typedef enum { VIPS_OPERATION_MORPHOLOGY_ERODE, VIPS_OPERATION_MORPHOLOGY_DILATE, VIPS_OPERATION_MORPHOLOGY_LAST } VipsOperationMorphology; VIPS_API int vips_morph(VipsImage *in, VipsImage **out, VipsImage *mask, VipsOperationMorphology morph, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_rank(VipsImage *in, VipsImage **out, int width, int height, int index, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_median(VipsImage *in, VipsImage **out, int size, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_countlines(VipsImage *in, double *nolines, VipsDirection direction, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_labelregions(VipsImage *in, VipsImage **mask, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_fill_nearest(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_MORPHOLOGY_H*/ libvips-8.15.1/libvips/include/vips/mosaicing.h000066400000000000000000000040401454007373500214620ustar00rootroot00000000000000/* mosaicing.h * * 20/9/09 * - from proto.h */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_MOSAICING_H #define VIPS_MOSAICING_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ VIPS_API int vips_merge(VipsImage *ref, VipsImage *sec, VipsImage **out, VipsDirection direction, int dx, int dy, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_mosaic(VipsImage *ref, VipsImage *sec, VipsImage **out, VipsDirection direction, int xref, int yref, int xsec, int ysec, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_mosaic1(VipsImage *ref, VipsImage *sec, VipsImage **out, VipsDirection direction, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_match(VipsImage *ref, VipsImage *sec, VipsImage **out, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_globalbalance(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_remosaic(VipsImage *in, VipsImage **out, const char *old_str, const char *new_str, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_matrixinvert(VipsImage *m, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_MOSAICING_H*/ libvips-8.15.1/libvips/include/vips/object.h000066400000000000000000000515131454007373500207660ustar00rootroot00000000000000/* abstract base class for all vips objects */ /* Copyright (C) 1991-2003 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_OBJECT_H #define VIPS_OBJECT_H #include #include #include #include #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ /* Handy! */ #ifdef VIPS_DEBUG #define VIPS_UNREF(X) \ G_STMT_START \ { \ if (X) { \ g_assert(G_OBJECT(X)->ref_count > 0); \ g_object_unref(X); \ (X) = 0; \ } \ } \ G_STMT_END #else /*!VIPS_DEBUG*/ #define VIPS_UNREF(X) VIPS_FREEF(g_object_unref, (X)) #endif /*VIPS_DEBUG*/ typedef struct _VipsObject VipsObject; typedef struct _VipsObjectClass VipsObjectClass; /* Track extra stuff for arguments to objects */ typedef enum /*< flags >*/ { VIPS_ARGUMENT_NONE = 0, VIPS_ARGUMENT_REQUIRED = 1, VIPS_ARGUMENT_CONSTRUCT = 2, VIPS_ARGUMENT_SET_ONCE = 4, VIPS_ARGUMENT_SET_ALWAYS = 8, VIPS_ARGUMENT_INPUT = 16, VIPS_ARGUMENT_OUTPUT = 32, VIPS_ARGUMENT_DEPRECATED = 64, VIPS_ARGUMENT_MODIFY = 128, VIPS_ARGUMENT_NON_HASHABLE = 256 } VipsArgumentFlags; /* Useful flag combinations. User-visible ones are: * * VIPS_ARGUMENT_REQUIRED_INPUT Eg. the "left" argument for an add operation * * VIPS_ARGUMENT_OPTIONAL_INPUT Eg. the "caption" for an object * * VIPS_ARGUMENT_REQUIRED_OUTPUT Eg. the "result" of an add operation * * VIPS_ARGUMENT_OPTIONAL_OUTPUT Eg. the x pos of the image minimum * * Other combinations are used internally, eg. supplying the cast-table for an * arithmetic operation */ #define VIPS_ARGUMENT_REQUIRED_INPUT \ (VIPS_ARGUMENT_INPUT | \ VIPS_ARGUMENT_REQUIRED | \ VIPS_ARGUMENT_CONSTRUCT) #define VIPS_ARGUMENT_OPTIONAL_INPUT \ (VIPS_ARGUMENT_INPUT | \ VIPS_ARGUMENT_CONSTRUCT) #define VIPS_ARGUMENT_REQUIRED_OUTPUT \ (VIPS_ARGUMENT_OUTPUT | \ VIPS_ARGUMENT_REQUIRED | \ VIPS_ARGUMENT_CONSTRUCT) #define VIPS_ARGUMENT_OPTIONAL_OUTPUT \ (VIPS_ARGUMENT_OUTPUT | \ VIPS_ARGUMENT_CONSTRUCT) #define VIPS_ARG_IMAGE(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET) \ { \ GParamSpec *pspec; \ \ pspec = g_param_spec_object((NAME), (LONG), (DESC), \ VIPS_TYPE_IMAGE, \ (GParamFlags) (G_PARAM_READWRITE)); \ g_object_class_install_property(G_OBJECT_CLASS(CLASS), \ vips_argument_get_id(), pspec); \ vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \ pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \ } #define VIPS_ARG_OBJECT(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, TYPE) \ { \ GParamSpec *pspec; \ \ pspec = g_param_spec_object((NAME), (LONG), (DESC), \ TYPE, \ (GParamFlags) (G_PARAM_READWRITE)); \ g_object_class_install_property(G_OBJECT_CLASS(CLASS), \ vips_argument_get_id(), pspec); \ vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \ pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \ } #define VIPS_ARG_INTERPOLATE(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET) \ VIPS_ARG_OBJECT(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, VIPS_TYPE_INTERPOLATE) #define VIPS_ARG_BOOL(CLASS, NAME, PRIORITY, LONG, DESC, \ FLAGS, OFFSET, VALUE) \ { \ GParamSpec *pspec; \ \ pspec = g_param_spec_boolean((NAME), (LONG), (DESC), \ (VALUE), \ (GParamFlags) (G_PARAM_READWRITE)); \ g_object_class_install_property(G_OBJECT_CLASS(CLASS), \ vips_argument_get_id(), pspec); \ vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \ pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \ } #define VIPS_ARG_DOUBLE(CLASS, NAME, PRIORITY, LONG, DESC, \ FLAGS, OFFSET, MIN, MAX, VALUE) \ { \ GParamSpec *pspec; \ \ pspec = g_param_spec_double((NAME), (LONG), (DESC), \ (MIN), (MAX), (VALUE), \ (GParamFlags) (G_PARAM_READWRITE)); \ g_object_class_install_property(G_OBJECT_CLASS(CLASS), \ vips_argument_get_id(), pspec); \ vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \ pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \ } #define VIPS_ARG_BOXED(CLASS, NAME, PRIORITY, LONG, DESC, \ FLAGS, OFFSET, TYPE) \ { \ GParamSpec *pspec; \ \ pspec = g_param_spec_boxed((NAME), (LONG), (DESC), \ (TYPE), \ (GParamFlags) (G_PARAM_READWRITE)); \ g_object_class_install_property(G_OBJECT_CLASS(CLASS), \ vips_argument_get_id(), pspec); \ vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \ pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \ } #define VIPS_ARG_INT(CLASS, NAME, PRIORITY, LONG, DESC, \ FLAGS, OFFSET, MIN, MAX, VALUE) \ { \ GParamSpec *pspec; \ \ pspec = g_param_spec_int((NAME), (LONG), (DESC), \ (MIN), (MAX), (VALUE), \ (GParamFlags) (G_PARAM_READWRITE)); \ g_object_class_install_property(G_OBJECT_CLASS(CLASS), \ vips_argument_get_id(), pspec); \ vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \ pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \ } #define VIPS_ARG_UINT64(CLASS, NAME, PRIORITY, LONG, DESC, \ FLAGS, OFFSET, MIN, MAX, VALUE) \ { \ GParamSpec *pspec; \ \ pspec = g_param_spec_uint64((NAME), (LONG), (DESC), \ (MIN), (MAX), (VALUE), \ (GParamFlags) (G_PARAM_READWRITE)); \ g_object_class_install_property(G_OBJECT_CLASS(CLASS), \ vips_argument_get_id(), pspec); \ vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \ pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \ } #define VIPS_ARG_ENUM(CLASS, NAME, PRIORITY, LONG, DESC, \ FLAGS, OFFSET, TYPE, VALUE) \ { \ GParamSpec *pspec; \ \ pspec = g_param_spec_enum((NAME), (LONG), (DESC), \ (TYPE), (VALUE), \ (GParamFlags) (G_PARAM_READWRITE)); \ g_object_class_install_property(G_OBJECT_CLASS(CLASS), \ vips_argument_get_id(), pspec); \ vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \ pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \ } #define VIPS_ARG_FLAGS(CLASS, NAME, PRIORITY, LONG, DESC, \ FLAGS, OFFSET, TYPE, VALUE) \ { \ GParamSpec *pspec; \ \ pspec = g_param_spec_flags((NAME), (LONG), (DESC), \ (TYPE), (VALUE), \ (GParamFlags) (G_PARAM_READWRITE)); \ g_object_class_install_property(G_OBJECT_CLASS(CLASS), \ vips_argument_get_id(), pspec); \ vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \ pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \ } #define VIPS_ARG_STRING(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET, \ VALUE) \ { \ GParamSpec *pspec; \ \ pspec = g_param_spec_string((NAME), (LONG), (DESC), \ (VALUE), \ (GParamFlags) (G_PARAM_READWRITE)); \ g_object_class_install_property(G_OBJECT_CLASS(CLASS), \ vips_argument_get_id(), pspec); \ vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \ pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \ } #define VIPS_ARG_POINTER(CLASS, NAME, PRIORITY, LONG, DESC, FLAGS, OFFSET) \ { \ GParamSpec *pspec; \ \ pspec = g_param_spec_pointer((NAME), (LONG), (DESC), \ (GParamFlags) (G_PARAM_READWRITE)); \ g_object_class_install_property(G_OBJECT_CLASS(CLASS), \ vips_argument_get_id(), pspec); \ vips_object_class_install_argument(VIPS_OBJECT_CLASS(CLASS), \ pspec, (VipsArgumentFlags) (FLAGS), (PRIORITY), (OFFSET)); \ } /* Keep one of these for every argument. */ typedef struct _VipsArgument { GParamSpec *pspec; /* pspec for this argument */ /* More stuff, see below */ } VipsArgument; /* Keep one of these in the class struct for every argument. */ typedef struct _VipsArgumentClass { VipsArgument parent; /* The class of the object we are an arg for. */ VipsObjectClass *object_class; VipsArgumentFlags flags; int priority; /* Order args by this */ guint offset; /* G_STRUCT_OFFSET of member in object */ } VipsArgumentClass; /* Keep one of these in the object struct for every argument instance. */ typedef struct _VipsArgumentInstance { VipsArgument parent; /* The class we are part of. */ VipsArgumentClass *argument_class; /* The object we are attached to. */ VipsObject *object; /* Has been set. */ gboolean assigned; /* If this is an output argument, keep the id of our "close" handler * here. */ gulong close_id; /* We need to listen for "invalidate" on input images and send our own * "invalidate" out. If we go, we need to disconnect. */ gulong invalidate_id; } VipsArgumentInstance; /* Need to look up our VipsArgument structs from a pspec. Just hash the * pointer (ie. we assume pspecs are never shared, is this correct?) */ typedef GHashTable VipsArgumentTable; VIPS_API int vips_argument_get_id(void); void vips__object_set_member(VipsObject *object, GParamSpec *pspec, GObject **member, GObject *argument); typedef void *(*VipsArgumentMapFn)(VipsObject *object, GParamSpec *pspec, VipsArgumentClass *argument_class, VipsArgumentInstance *argument_instance, void *a, void *b); VIPS_API void *vips_argument_map(VipsObject *object, VipsArgumentMapFn fn, void *a, void *b); VIPS_API int vips_object_get_args(VipsObject *object, const char ***names, int **flags, int *n_args); typedef void *(*VipsArgumentClassMapFn)(VipsObjectClass *object_class, GParamSpec *pspec, VipsArgumentClass *argument_class, void *a, void *b); VIPS_API void *vips_argument_class_map(VipsObjectClass *object_class, VipsArgumentClassMapFn fn, void *a, void *b); VIPS_API gboolean vips_argument_class_needsstring(VipsArgumentClass *argument_class); VIPS_API int vips_object_get_argument(VipsObject *object, const char *name, GParamSpec **pspec, VipsArgumentClass **argument_class, VipsArgumentInstance **argument_instance); VIPS_API gboolean vips_object_argument_isset(VipsObject *object, const char *name); VIPS_API VipsArgumentFlags vips_object_get_argument_flags(VipsObject *object, const char *name); VIPS_API int vips_object_get_argument_priority(VipsObject *object, const char *name); /* We have to loop over an objects args in several places, and we can't always * use vips_argument_map(), the preferred looper. Have the loop code as a * macro as well for these odd cases. */ #define VIPS_ARGUMENT_FOR_ALL(OBJECT, PSPEC, ARG_CLASS, ARG_INSTANCE) \ { \ VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(OBJECT); \ GSList *p; \ \ for (p = object_class->argument_table_traverse; p; p = p->next) { \ VipsArgumentClass *ARG_CLASS = \ (VipsArgumentClass *) p->data; \ VipsArgument *argument = (VipsArgument *) argument_class; \ GParamSpec *PSPEC = argument->pspec; \ VipsArgumentInstance *ARG_INSTANCE G_GNUC_UNUSED = \ vips__argument_get_instance(argument_class, \ VIPS_OBJECT(OBJECT)); #define VIPS_ARGUMENT_FOR_ALL_END \ } \ } /* And some macros to collect args from a va list. * * Use something like this: * * GParamSpec *pspec; * VipsArgumentClass *argument_class; * VipsArgumentInstance *argument_instance; * * if (vips_object_get_argument(VIPS_OBJECT(operation), name, * &pspec, &argument_class, &argument_instance)) * return -1; * * VIPS_ARGUMENT_COLLECT_SET(pspec, argument_class, ap); * * GValue value holds the value of an input argument, do * something with it * * VIPS_ARGUMENT_COLLECT_GET(pspec, argument_class, ap); * * void **arg points to where to write an output argument * * VIPS_ARGUMENT_COLLECT_END */ #define VIPS_ARGUMENT_COLLECT_SET(PSPEC, ARG_CLASS, AP) \ if ((ARG_CLASS->flags & VIPS_ARGUMENT_INPUT)) { \ GValue value = G_VALUE_INIT; \ gchar *error = NULL; \ \ /* Input args are given inline, eg. ("factor", 12.0) \ * and must be collected. \ */ \ G_VALUE_COLLECT_INIT(&value, \ G_PARAM_SPEC_VALUE_TYPE(PSPEC), AP, 0, &error); \ \ /* Don't bother with the error message. \ */ \ if (error) { \ VIPS_DEBUG_MSG("VIPS_OBJECT_COLLECT_SET: err\n"); \ g_free(error); \ } #define VIPS_ARGUMENT_COLLECT_GET(PSPEC, ARG_CLASS, AP) \ g_value_unset(&value); \ } \ else if ((ARG_CLASS->flags & VIPS_ARGUMENT_OUTPUT)) \ { \ void **arg G_GNUC_UNUSED; \ \ /* Output args are a pointer to where to send the \ * result. \ */ \ arg = va_arg(AP, void **); #define VIPS_ARGUMENT_COLLECT_END \ } #define VIPS_TYPE_OBJECT (vips_object_get_type()) #define VIPS_OBJECT(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_OBJECT, VipsObject)) #define VIPS_OBJECT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), VIPS_TYPE_OBJECT, VipsObjectClass)) #define VIPS_IS_OBJECT(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_OBJECT)) #define VIPS_IS_OBJECT_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_OBJECT)) #define VIPS_OBJECT_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), VIPS_TYPE_OBJECT, VipsObjectClass)) struct _VipsObject { GObject parent_instance; /* Set after ->build() has run successfully: construct is fully done * and checked. */ gboolean constructed; /* Set for static objects which are allocated at startup and never * freed. These objects are omitted from leak reports. */ gboolean static_object; /* Table of argument instances for this class and any derived classes. */ VipsArgumentTable *argument_table; /* Class properties (see below), duplicated in the instance so we can * get at them easily via the property system. */ char *nickname; char *description; /* The pre/post/close callbacks are all fire-once. */ gboolean preclose; gboolean close; gboolean postclose; /* Total memory allocated relative to this object, handy for * profiling. */ size_t local_memory; }; struct _VipsObjectClass { GObjectClass parent_class; /* Build the object ... all argument properties have been set, * now build the thing. */ int (*build)(VipsObject *object); /* Just after build ... the object is fully ready for work. */ int (*postbuild)(VipsObject *object, void *data); /* Try to print something about the class, handy for help displays. * Keep to one line. */ void (*summary_class)(struct _VipsObjectClass *cls, VipsBuf *buf); /* Try to print a one-line summary for the object, the user can see * this output via things like "header fred.tif", --vips-cache-trace, * etc. */ void (*summary)(VipsObject *object, VipsBuf *buf); /* Try to print everything about the object, handy for debugging. */ void (*dump)(VipsObject *object, VipsBuf *buf); /* Sanity-check the object. Print messages and stuff. * Handy for debugging. */ void (*sanity)(VipsObject *object, VipsBuf *buf); /* Rewind. Save and restore any stuff that needs to survive a * dispose(). */ void (*rewind)(VipsObject *object); /* Just before close, everything is still alive. */ void (*preclose)(VipsObject *object); /* Close, time to free stuff. */ void (*close)(VipsObject *object); /* Post-close, everything is dead, except the VipsObject pointer. * Useful for eg. deleting the file associated with a temp image. */ void (*postclose)(VipsObject *object); /* The CLI interface. Implement these four to get CLI input and output * for your object. */ /* Given a command-line arg (eg. a filename), make an instance of the * object. Just do the g_object_new(), don't call _build(). * * Don't call this directly, see vips_object_new_from_string(). */ VipsObject *(*new_from_string)(const char *string); /* The inverse of ^^. Given an object, output what ->new_from_string() * would have been given to make that object. */ void (*to_string)(VipsObject *object, VipsBuf *buf); /* Does this output arg need an arg from the command line? Image * output, for example, needs a filename to write to. */ gboolean output_needs_arg; /* Write the object to the string. Return 0 for success, or -1 on * error, setting vips_error(). string is NULL if output_needs_arg() * was FALSE. */ int (*output_to_arg)(VipsObject *object, const char *string); /* Class nickname, eg. "VipsInterpolateBicubic" has "bicubic" as a * nickname. Not internationalised. */ const char *nickname; /* Class description. Used for help messages, so internationalised. */ const char *description; /* Hash from pspec to VipsArgumentClass. * * This records the VipsArgumentClass for every pspec used in * VipsObject and any subclass (ie. everywhere), so it's huge. Don't * loop over this hash! Fine for lookups though. */ VipsArgumentTable *argument_table; /* A sorted (by priority) list of the VipsArgumentClass for this class * and any superclasses. This is small and specific to this class. * * Use the stored GType to work out when to restart the list for a * subclass. */ GSList *argument_table_traverse; GType argument_table_traverse_gtype; /* This class is deprecated and therefore hidden from various UI bits. * * VipsOperation has a deprecated flag, use that in preference to this * if you can. */ gboolean deprecated; /* Reserved for future expansion. */ void (*_vips_reserved1)(void); void (*_vips_reserved2)(void); void (*_vips_reserved3)(void); void (*_vips_reserved4)(void); }; VIPS_API gboolean vips_value_is_null(GParamSpec *psoec, const GValue *value); VIPS_API void vips_object_set_property(GObject *gobject, guint property_id, const GValue *value, GParamSpec *pspec); VIPS_API void vips_object_get_property(GObject *gobject, guint property_id, GValue *value, GParamSpec *pspec); VIPS_API void vips_object_preclose(VipsObject *object); VIPS_API int vips_object_build(VipsObject *object); VIPS_API void vips_object_summary_class(VipsObjectClass *klass, VipsBuf *buf); VIPS_API void vips_object_summary(VipsObject *object, VipsBuf *buf); VIPS_API void vips_object_dump(VipsObject *object, VipsBuf *buf); VIPS_API void vips_object_print_summary_class(VipsObjectClass *klass); VIPS_API void vips_object_print_summary(VipsObject *object); VIPS_API void vips_object_print_dump(VipsObject *object); VIPS_API void vips_object_print_name(VipsObject *object); VIPS_API gboolean vips_object_sanity(VipsObject *object); /* Don't put spaces around void here, it breaks gtk-doc. */ VIPS_API GType vips_object_get_type(void); VIPS_API void vips_object_class_install_argument(VipsObjectClass *cls, GParamSpec *pspec, VipsArgumentFlags flags, int priority, guint offset); VIPS_API int vips_object_set_argument_from_string(VipsObject *object, const char *name, const char *value); VIPS_API gboolean vips_object_argument_needsstring(VipsObject *object, const char *name); VIPS_API int vips_object_get_argument_to_string(VipsObject *object, const char *name, const char *arg); VIPS_API int vips_object_set_required(VipsObject *object, const char *value); typedef void *(*VipsObjectSetArguments)(VipsObject *object, void *a, void *b); VIPS_API VipsObject *vips_object_new(GType type, VipsObjectSetArguments set, void *a, void *b); VIPS_API int vips_object_set_valist(VipsObject *object, va_list ap); VIPS_API int vips_object_set(VipsObject *object, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_object_set_from_string(VipsObject *object, const char *string); VIPS_API VipsObject *vips_object_new_from_string(VipsObjectClass *object_class, const char *p); VIPS_API void vips_object_to_string(VipsObject *object, VipsBuf *buf); VIPS_API void *vips_object_map(VipsSListMap2Fn fn, void *a, void *b); typedef void *(*VipsTypeMapFn)(GType type, void *a); typedef void *(*VipsTypeMap2Fn)(GType type, void *a, void *b); typedef void *(*VipsClassMapFn)(VipsObjectClass *cls, void *a); VIPS_API void *vips_type_map(GType base, VipsTypeMap2Fn fn, void *a, void *b); VIPS_API void *vips_type_map_all(GType base, VipsTypeMapFn fn, void *a); VIPS_API int vips_type_depth(GType type); VIPS_API GType vips_type_find(const char *basename, const char *nickname); VIPS_API const char *vips_nickname_find(GType type); VIPS_API void *vips_class_map_all(GType type, VipsClassMapFn fn, void *a); VIPS_API const VipsObjectClass *vips_class_find(const char *basename, const char *nickname); VIPS_API VipsObject **vips_object_local_array(VipsObject *parent, int n); VIPS_API void vips_object_local_cb(VipsObject *vobject, GObject *gobject); #define vips_object_local(V, G) \ (g_signal_connect(V, "close", G_CALLBACK(vips_object_local_cb), G)) VIPS_API void vips_object_set_static(VipsObject *object, gboolean static_object); VIPS_API void vips_object_print_all(void); VIPS_API void vips_object_sanity_all(void); VIPS_API void vips_object_rewind(VipsObject *object); VIPS_API void vips_object_unref_outputs(VipsObject *object); VIPS_API const char *vips_object_get_description(VipsObject *object); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_OBJECT_H*/ libvips-8.15.1/libvips/include/vips/operation.h000066400000000000000000000117031454007373500215150ustar00rootroot00000000000000/* base class for all vips operations */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_OPERATION_H #define VIPS_OPERATION_H #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ typedef enum /*< flags >*/ { VIPS_OPERATION_NONE = 0, VIPS_OPERATION_SEQUENTIAL = 1, VIPS_OPERATION_SEQUENTIAL_UNBUFFERED = 2, VIPS_OPERATION_NOCACHE = 4, VIPS_OPERATION_DEPRECATED = 8, VIPS_OPERATION_UNTRUSTED = 16, VIPS_OPERATION_BLOCKED = 32, VIPS_OPERATION_REVALIDATE = 64 } VipsOperationFlags; #define VIPS_TYPE_OPERATION (vips_operation_get_type()) #define VIPS_OPERATION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_OPERATION, VipsOperation)) #define VIPS_OPERATION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_OPERATION, VipsOperationClass)) #define VIPS_IS_OPERATION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_OPERATION)) #define VIPS_IS_OPERATION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_OPERATION)) #define VIPS_OPERATION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_OPERATION, VipsOperationClass)) typedef gboolean (*VipsOperationBuildFn)(VipsObject *object); typedef struct _VipsOperation { VipsObject parent_instance; /* Keep the hash here. */ guint hash; gboolean found_hash; /* Pixels calculated ... handy for measuring over-calculation. */ int pixels; } VipsOperation; typedef struct _VipsOperationClass { VipsObjectClass parent_class; /* Print the usage message. */ void (*usage)(struct _VipsOperationClass *cls, VipsBuf *buf); /* Return a set of operation flags. */ VipsOperationFlags (*get_flags)(VipsOperation *operation); VipsOperationFlags flags; /* One of our input images has signalled "invalidate". The cache uses * VipsOperation::invalidate to drop dirty ops. */ void (*invalidate)(VipsOperation *operation); } VipsOperationClass; /* Don't put spaces around void here, it breaks gtk-doc. */ VIPS_API GType vips_operation_get_type(void); VIPS_API VipsOperationFlags vips_operation_get_flags(VipsOperation *operation); VIPS_API void vips_operation_class_print_usage(VipsOperationClass *operation_class); VIPS_API void vips_operation_invalidate(VipsOperation *operation); VIPS_API int vips_operation_call_valist(VipsOperation *operation, va_list ap); VIPS_API VipsOperation *vips_operation_new(const char *name); VIPS_API int vips_call_required_optional(VipsOperation **operation, va_list required, va_list optional); VIPS_API int vips_call(const char *operation_name, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_call_split(const char *operation_name, va_list optional, ...); VIPS_API int vips_call_split_option_string(const char *operation_name, const char *option_string, va_list optional, ...); VIPS_API void vips_call_options(GOptionGroup *group, VipsOperation *operation); VIPS_API int vips_call_argv(VipsOperation *operation, int argc, char **argv); VIPS_API void vips_cache_drop_all(void); VIPS_DEPRECATED_FOR(vips_cache_operation_buildp) VipsOperation *vips_cache_operation_lookup(VipsOperation *operation); VIPS_DEPRECATED_FOR(vips_cache_operation_buildp) void vips_cache_operation_add(VipsOperation *operation); VIPS_API int vips_cache_operation_buildp(VipsOperation **operation); VIPS_API VipsOperation *vips_cache_operation_build(VipsOperation *operation); VIPS_API void vips_cache_print(void); VIPS_API void vips_cache_set_max(int max); VIPS_API void vips_cache_set_max_mem(size_t max_mem); VIPS_API int vips_cache_get_max(void); VIPS_API int vips_cache_get_size(void); VIPS_API size_t vips_cache_get_max_mem(void); VIPS_API int vips_cache_get_max_files(void); VIPS_API void vips_cache_set_max_files(int max_files); VIPS_API void vips_cache_set_dump(gboolean dump); VIPS_API void vips_cache_set_trace(gboolean trace); /* Part of threadpool, really, but we want these in a header that gets scanned * for our typelib. */ VIPS_API void vips_concurrency_set(int concurrency); VIPS_API int vips_concurrency_get(void); VIPS_API void vips_operation_block_set(const char *name, gboolean state); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_OPERATION_H*/ libvips-8.15.1/libvips/include/vips/private.h000066400000000000000000000145661454007373500212010ustar00rootroot00000000000000/* Declarations which are public-facing, but private. See internal.h for * declarations which are only used internally by vips and which are not * externally visible. * * 6/7/09 * - from vips.h */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_PRIVATE_H #define VIPS_PRIVATE_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #define VIPS_SPARE (8) /* Private to iofuncs: the minimum number of scanlines we add above and below * the window as a margin for slop. */ #define VIPS__WINDOW_MARGIN_PIXELS (128) /* Private to iofuncs: add at least this many bytes above and below the window. * There's no point mapping just a few KB of a small image. */ #define VIPS__WINDOW_MARGIN_BYTES (1024 * 1024 * 10) /* sizeof() a VIPS header on disc. */ #define VIPS_SIZEOF_HEADER (64) /* What we track for each mmap window. Have a list of these on an openin * VipsImage. */ typedef struct { int ref_count; /* # of regions referencing us */ struct _VipsImage *im; /* VipsImage we are attached to */ int top; /* Area of image we have mapped, in pixels */ int height; VipsPel *data; /* First pixel of line 'top' */ void *baseaddr; /* Base of window */ size_t length; /* Size of window */ } VipsWindow; VIPS_API int vips_window_unref(VipsWindow *window); VIPS_API void vips_window_print(VipsWindow *window); /* Per-thread buffer state. Held in a GPrivate. */ typedef struct { GHashTable *hash; /* VipsImage -> VipsBufferCache* */ GThread *thread; /* Just for sanity checking */ } VipsBufferThread; /* Per-image buffer cache. This keeps a list of "done" VipsBuffer that this * worker has generated. We use this to reuse results within a thread. * * Hash to this from VipsBufferThread::hash. * We can't store the GSList directly in the hash table as GHashTable lacks an * update operation and we'd need to _remove() and _insert() on every list * operation. */ typedef struct _VipsBufferCache { GSList *buffers; /* GSList of "done" VipsBuffer* */ GThread *thread; /* Just for sanity checking */ struct _VipsImage *im; VipsBufferThread *buffer_thread; GSList *reserve; /* VipsBuffer kept in reserve */ int n_reserve; /* Number in reserve */ } VipsBufferCache; /* What we track for each pixel buffer. These can move between caches and * between threads, but not between images. * * Moving between threads is difficult, use region ownership stuff. */ typedef struct _VipsBuffer { int ref_count; /* # of regions referencing us */ struct _VipsImage *im; /* VipsImage we are attached to */ VipsRect area; /* Area this pixel buffer covers */ gboolean done; /* Calculated and in a cache */ VipsBufferCache *cache; /* The cache this buffer is published on */ VipsPel *buf; /* Private malloc() area */ size_t bsize; /* Size of private malloc() */ } VipsBuffer; VIPS_API void vips_buffer_dump_all(void); VIPS_API void vips_buffer_done(VipsBuffer *buffer); VIPS_API void vips_buffer_undone(VipsBuffer *buffer); VIPS_API void vips_buffer_unref(VipsBuffer *buffer); VIPS_API VipsBuffer *vips_buffer_new(struct _VipsImage *im, VipsRect *area); VIPS_API VipsBuffer *vips_buffer_ref(struct _VipsImage *im, VipsRect *area); VIPS_API VipsBuffer *vips_buffer_unref_ref(VipsBuffer *buffer, struct _VipsImage *im, VipsRect *area); VIPS_API void vips_buffer_print(VipsBuffer *buffer); void vips__render_shutdown(void); /* Sections of region.h that are private to VIPS. */ /* Region types. */ typedef enum _RegionType { VIPS_REGION_NONE, VIPS_REGION_BUFFER, /* A VipsBuffer */ VIPS_REGION_OTHER_REGION, /* Memory on another region */ VIPS_REGION_OTHER_IMAGE, /* Memory on another image */ VIPS_REGION_WINDOW /* A VipsWindow on fd */ } RegionType; /* Private to iofuncs: the size of the `tiles' requested by * vips_image_generate() when acting as a data sink. */ #define VIPS__TILE_WIDTH (128) #define VIPS__TILE_HEIGHT (128) /* The height of the strips for the other two request styles. */ #define VIPS__THINSTRIP_HEIGHT (1) #define VIPS__FATSTRIP_HEIGHT (16) /* Functions on regions. */ struct _VipsRegion; void vips__region_take_ownership(struct _VipsRegion *reg); void vips__region_check_ownership(struct _VipsRegion *reg); /* TODO(kleisauke): VIPS_API is required by vipsdisp. */ VIPS_API void vips__region_no_ownership(struct _VipsRegion *reg); typedef int (*VipsRegionFillFn)(struct _VipsRegion *, void *); VIPS_API int vips_region_fill(struct _VipsRegion *reg, const VipsRect *r, VipsRegionFillFn fn, void *a); int vips__image_wio_output(struct _VipsImage *image); int vips__image_pio_output(struct _VipsImage *image); /* VIPS_ARGUMENT_FOR_ALL() needs to have this visible. */ VIPS_API VipsArgumentInstance *vips__argument_get_instance( VipsArgumentClass *argument_class, VipsObject *object); VipsArgument *vips__argument_table_lookup(VipsArgumentTable *table, GParamSpec *pspec); /* im_demand_hint_array() needs to have this visible. */ #if VIPS_ENABLE_DEPRECATED VIPS_API #endif void vips__demand_hint_array(struct _VipsImage *image, int hint, struct _VipsImage **in); /* im_cp_desc_array() needs to have this visible. */ #if VIPS_ENABLE_DEPRECATED VIPS_API #endif int vips__image_copy_fields_array(struct _VipsImage *out, struct _VipsImage *in[]); void vips__region_count_pixels(struct _VipsRegion *region, const char *nickname); VIPS_API void vips_region_dump_all(void); VIPS_API int vips_region_prepare_many(struct _VipsRegion **reg, const VipsRect *r); /* Handy for debugging. */ int vips__view_image(struct _VipsImage *image); /* Pre 8.7 libvipses used this for allocating argument ids. */ VIPS_API int _vips__argument_id; void vips__meta_init(void); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_PRIVATE_H*/ libvips-8.15.1/libvips/include/vips/rect.h000066400000000000000000000040531454007373500204520ustar00rootroot00000000000000/* Simple rectangle algebra. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_RECT_H #define VIPS_RECT_H #include #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ typedef struct _VipsRect { /*< public >*/ int left; int top; int width; int height; } VipsRect; #define VIPS_RECT_RIGHT(R) ((R)->left + (R)->width) #define VIPS_RECT_BOTTOM(R) ((R)->top + (R)->height) #define VIPS_RECT_HCENTRE(R) ((R)->left + (R)->width / 2) #define VIPS_RECT_VCENTRE(R) ((R)->top + (R)->height / 2) VIPS_API gboolean vips_rect_isempty(const VipsRect *r); VIPS_API gboolean vips_rect_includespoint(const VipsRect *r, int x, int y); VIPS_API gboolean vips_rect_includesrect(const VipsRect *r1, const VipsRect *r2); VIPS_API gboolean vips_rect_equalsrect(const VipsRect *r1, const VipsRect *r2); VIPS_API gboolean vips_rect_overlapsrect(const VipsRect *r1, const VipsRect *r2); VIPS_API void vips_rect_marginadjust(VipsRect *r, int n); VIPS_API void vips_rect_intersectrect(const VipsRect *r1, const VipsRect *r2, VipsRect *out); VIPS_API void vips_rect_unionrect(const VipsRect *r1, const VipsRect *r2, VipsRect *out); VIPS_API VipsRect *vips_rect_dup(const VipsRect *r); VIPS_API void vips_rect_normalise(VipsRect *r); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_RECT_H*/ libvips-8.15.1/libvips/include/vips/region.h000066400000000000000000000146041454007373500210030ustar00rootroot00000000000000/* Definitions for partial image regions. * * J.Cupitt, 8/4/93 * * 2/3/11 * - move to GObject */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_REGION_H #define VIPS_REGION_H #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #define VIPS_TYPE_REGION (vips_region_get_type()) #define VIPS_REGION(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_REGION, VipsRegion)) #define VIPS_REGION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_REGION, VipsRegionClass)) #define VIPS_IS_REGION(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_REGION)) #define VIPS_IS_REGION_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_REGION)) #define VIPS_REGION_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_REGION, VipsRegionClass)) /** * VipsRegionShrink: * @VIPS_REGION_SHRINK_MEAN: use the average * @VIPS_REGION_SHRINK_MEDIAN: use the median * @VIPS_REGION_SHRINK_MODE: use the mode * @VIPS_REGION_SHRINK_MAX: use the maximum * @VIPS_REGION_SHRINK_MIN: use the minimum * @VIPS_REGION_SHRINK_NEAREST: use the top-left pixel * * How to calculate the output pixels when shrinking a 2x2 region. */ typedef enum { VIPS_REGION_SHRINK_MEAN, VIPS_REGION_SHRINK_MEDIAN, VIPS_REGION_SHRINK_MODE, VIPS_REGION_SHRINK_MAX, VIPS_REGION_SHRINK_MIN, VIPS_REGION_SHRINK_NEAREST, VIPS_REGION_SHRINK_LAST } VipsRegionShrink; /* Sub-area of image. * * Matching typedef in basic.h. */ struct _VipsRegion { VipsObject parent_object; /*< public >*/ /* Users may read these two fields. */ VipsImage *im; /* Link back to parent image */ VipsRect valid; /* Area of parent we can see */ /* The rest of VipsRegion is private. */ /*< private >*/ RegionType type; /* What kind of attachment */ VipsPel *data; /* Off here to get data */ int bpl; /* Bytes-per-line for data */ void *seq; /* Sequence we are using to fill region */ /* The thread that made this region. Used to assert() test that * regions are not being shared between threads. */ GThread *thread; /* Ref to the window we use for this region, if any. */ VipsWindow *window; /* Ref to the buffer we use for this region, if any. */ VipsBuffer *buffer; /* The image this region is on has changed and caches need to be * dropped. */ gboolean invalid; }; typedef struct _VipsRegionClass { VipsObjectClass parent_class; } VipsRegionClass; /* Don't put spaces around void here, it breaks gtk-doc. */ VIPS_API GType vips_region_get_type(void); VIPS_API VipsRegion *vips_region_new(VipsImage *image); VIPS_API int vips_region_buffer(VipsRegion *reg, const VipsRect *r); VIPS_API int vips_region_image(VipsRegion *reg, const VipsRect *r); VIPS_API int vips_region_region(VipsRegion *reg, VipsRegion *dest, const VipsRect *r, int x, int y); VIPS_API int vips_region_equalsregion(VipsRegion *reg1, VipsRegion *reg2); VIPS_API int vips_region_position(VipsRegion *reg, int x, int y); VIPS_API void vips_region_paint(VipsRegion *reg, const VipsRect *r, int value); VIPS_API void vips_region_paint_pel(VipsRegion *reg, const VipsRect *r, const VipsPel *ink); VIPS_API void vips_region_black(VipsRegion *reg); VIPS_API void vips_region_copy(VipsRegion *reg, VipsRegion *dest, const VipsRect *r, int x, int y); VIPS_API int vips_region_shrink_method(VipsRegion *from, VipsRegion *to, const VipsRect *target, VipsRegionShrink method); VIPS_API int vips_region_shrink(VipsRegion *from, VipsRegion *to, const VipsRect *target); VIPS_API int vips_region_prepare(VipsRegion *reg, const VipsRect *r); VIPS_API int vips_region_prepare_to(VipsRegion *reg, VipsRegion *dest, const VipsRect *r, int x, int y); VIPS_API VipsPel *vips_region_fetch(VipsRegion *region, int left, int top, int width, int height, size_t *len); VIPS_API int vips_region_width(VipsRegion *region); VIPS_API int vips_region_height(VipsRegion *region); VIPS_API void vips_region_invalidate(VipsRegion *reg); /* Use this to count pixels passing through key points. Handy for spotting bad * overcomputation. */ #ifdef DEBUG_LEAK #define VIPS_COUNT_PIXELS(R, N) vips__region_count_pixels(R, N) #else /*!DEBUG_LEAK*/ #define VIPS_COUNT_PIXELS(R, N) #endif /*DEBUG_LEAK*/ #define VIPS_REGION_LSKIP(R) \ ((size_t) ((R)->bpl)) #define VIPS_REGION_N_ELEMENTS(R) \ ((size_t) ((R)->valid.width * (R)->im->Bands)) #define VIPS_REGION_SIZEOF_ELEMENT(R) \ (VIPS_IMAGE_SIZEOF_ELEMENT((R)->im)) #define VIPS_REGION_SIZEOF_PEL(R) \ (VIPS_IMAGE_SIZEOF_PEL((R)->im)) #define VIPS_REGION_SIZEOF_LINE(R) \ ((size_t) ((R)->valid.width * VIPS_REGION_SIZEOF_PEL(R))) /* If DEBUG is defined, add bounds checking. */ #ifdef DEBUG #define VIPS_REGION_ADDR(R, X, Y) \ ((vips_rect_includespoint(&(R)->valid, (X), (Y))) \ ? ((R)->data + ((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \ ((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R)) \ : (fprintf(stderr, \ "VIPS_REGION_ADDR: point out of bounds, " \ "file \"%s\", line %d\n" \ "(point x=%d, y=%d\n" \ " should have been within VipsRect left=%d, top=%d, " \ "width=%d, height=%d)\n", \ __FILE__, __LINE__, \ (X), (Y), \ (R)->valid.left, \ (R)->valid.top, \ (R)->valid.width, \ (R)->valid.height), \ abort(), (VipsPel *) NULL)) #else /*DEBUG*/ #define VIPS_REGION_ADDR(R, X, Y) \ ((R)->data + \ ((Y) - (R)->valid.top) * VIPS_REGION_LSKIP(R) + \ ((X) - (R)->valid.left) * VIPS_REGION_SIZEOF_PEL(R)) #endif /*DEBUG*/ #define VIPS_REGION_ADDR_TOPLEFT(R) ((R)->data) #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_REGION_H*/ libvips-8.15.1/libvips/include/vips/resample.h000066400000000000000000000060131454007373500213230ustar00rootroot00000000000000/* resample.h * * 20/9/09 * - from proto.h */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_RESAMPLE_H #define VIPS_RESAMPLE_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ typedef enum { VIPS_KERNEL_NEAREST, VIPS_KERNEL_LINEAR, VIPS_KERNEL_CUBIC, VIPS_KERNEL_MITCHELL, VIPS_KERNEL_LANCZOS2, VIPS_KERNEL_LANCZOS3, VIPS_KERNEL_LAST } VipsKernel; typedef enum { VIPS_SIZE_BOTH, VIPS_SIZE_UP, VIPS_SIZE_DOWN, VIPS_SIZE_FORCE, VIPS_SIZE_LAST } VipsSize; VIPS_API int vips_shrink(VipsImage *in, VipsImage **out, double hshrink, double vshrink, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_shrinkh(VipsImage *in, VipsImage **out, int hshrink, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_shrinkv(VipsImage *in, VipsImage **out, int vshrink, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_reduce(VipsImage *in, VipsImage **out, double hshrink, double vshrink, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_reduceh(VipsImage *in, VipsImage **out, double hshrink, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_reducev(VipsImage *in, VipsImage **out, double vshrink, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_thumbnail(const char *filename, VipsImage **out, int width, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_thumbnail_buffer(void *buf, size_t len, VipsImage **out, int width, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_thumbnail_image(VipsImage *in, VipsImage **out, int width, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_thumbnail_source(VipsSource *source, VipsImage **out, int width, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_similarity(VipsImage *in, VipsImage **out, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_rotate(VipsImage *in, VipsImage **out, double angle, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_affine(VipsImage *in, VipsImage **out, double a, double b, double c, double d, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_resize(VipsImage *in, VipsImage **out, double scale, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_mapim(VipsImage *in, VipsImage **out, VipsImage *index, ...) G_GNUC_NULL_TERMINATED; VIPS_API int vips_quadratic(VipsImage *in, VipsImage **out, VipsImage *coeff, ...) G_GNUC_NULL_TERMINATED; #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_RESAMPLE_H*/ libvips-8.15.1/libvips/include/vips/sbuf.h000066400000000000000000000070361454007373500204600ustar00rootroot00000000000000/* Buffered inputput from a VipsSource * * J.Cupitt, 18/11/19 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_SBUF_H #define VIPS_SBUF_H #include #include #include #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #define VIPS_TYPE_SBUF (vips_sbuf_get_type()) #define VIPS_SBUF(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_SBUF, VipsSbuf)) #define VIPS_SBUF_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_SBUF, VipsSbufClass)) #define VIPS_IS_SBUF(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_SBUF)) #define VIPS_IS_SBUF_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_SBUF)) #define VIPS_SBUF_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_SBUF, VipsSbufClass)) #define VIPS_SBUF_BUFFER_SIZE (4096) /* Layer over source: read with an input buffer. * * Libraries like libjpeg do their own input buffering and need raw IO, but * others, like radiance, need to parse the input into lines. A buffered read * class is very convenient. */ typedef struct _VipsSbuf { VipsObject parent_object; /*< private >*/ /* The VipsSource we wrap. */ VipsSource *source; /* The +1 means there's always a \0 byte at the end. * * Unsigned char, since we don't want >127 to be -ve. * * chars_in_buffer is how many chars we have in input_buffer, * read_point is the current read position in that buffer. */ unsigned char input_buffer[VIPS_SBUF_BUFFER_SIZE + 1]; int chars_in_buffer; int read_point; /* Build lines of text here. */ unsigned char line[VIPS_SBUF_BUFFER_SIZE + 1]; } VipsSbuf; typedef struct _VipsSbufClass { VipsObjectClass parent_class; } VipsSbufClass; VIPS_API GType vips_sbuf_get_type(void); VIPS_API VipsSbuf *vips_sbuf_new_from_source(VipsSource *source); VIPS_API void vips_sbuf_unbuffer(VipsSbuf *sbuf); VIPS_API int vips_sbuf_getc(VipsSbuf *sbuf); #define VIPS_SBUF_GETC(S) ( \ (S)->read_point < (S)->chars_in_buffer \ ? (S)->input_buffer[(S)->read_point++] \ : vips_sbuf_getc(S)) VIPS_API void vips_sbuf_ungetc(VipsSbuf *sbuf); #define VIPS_SBUF_UNGETC(S) \ { \ if ((S)->read_point > 0) \ (S)->read_point -= 1; \ } VIPS_API int vips_sbuf_require(VipsSbuf *sbuf, int require); #define VIPS_SBUF_REQUIRE(S, R) ( \ (S)->read_point + (R) <= (S)->chars_in_buffer \ ? 0 \ : vips_sbuf_require((S), (R))) #define VIPS_SBUF_PEEK(S) ((S)->input_buffer + (S)->read_point) #define VIPS_SBUF_FETCH(S) ((S)->input_buffer[(S)->read_point++]) VIPS_API const char *vips_sbuf_get_line(VipsSbuf *sbuf); VIPS_API char *vips_sbuf_get_line_copy(VipsSbuf *sbuf); VIPS_API const char *vips_sbuf_get_non_whitespace(VipsSbuf *sbuf); VIPS_API int vips_sbuf_skip_whitespace(VipsSbuf *sbuf); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_SBUF_H*/ libvips-8.15.1/libvips/include/vips/semaphore.h000066400000000000000000000034031454007373500214760ustar00rootroot00000000000000/* Definitions for thread support. * * JC, 9/5/94 * 30/7/99 RP, JC * - reworked for posix/solaris threads * 28/9/99 JC * - restructured, made part of public API */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_SEMAPHORE_H #define VIPS_SEMAPHORE_H #include #include #include #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ /* Implement our own semaphores. */ typedef struct { char *name; int v; GMutex *mutex; GCond *cond; } VipsSemaphore; VIPS_API int vips_semaphore_up(VipsSemaphore *s); VIPS_API int vips_semaphore_upn(VipsSemaphore *s, int n); VIPS_API int vips_semaphore_down(VipsSemaphore *s); VIPS_API int vips_semaphore_downn(VipsSemaphore *s, int n); VIPS_API int vips_semaphore_down_timeout(VipsSemaphore *s, gint64 timeout); VIPS_API void vips_semaphore_destroy(VipsSemaphore *s); VIPS_API void vips_semaphore_init(VipsSemaphore *s, int v, char *name); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_SEMAPHORE_H*/ libvips-8.15.1/libvips/include/vips/thread.h000066400000000000000000000035601454007373500207660ustar00rootroot00000000000000/* Private include file ... if we've been configured without gthread, we need * to point the g_thread_*() and g_mutex_*() functions at our own stubs. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_THREAD_H #define VIPS_THREAD_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ /* We need wrappers over g_mutex_new(), it was replaced by g_mutex_init() in * glib 2.32+ */ VIPS_API GMutex *vips_g_mutex_new(void); VIPS_API void vips_g_mutex_free(GMutex *); /* Same for GCond. */ VIPS_API GCond *vips_g_cond_new(void); VIPS_API void vips_g_cond_free(GCond *); /* ... and for GThread. */ VIPS_API GThread *vips_g_thread_new(const char *, GThreadFunc, gpointer); VIPS_API gboolean vips_thread_isvips(void); VIPS_API int vips_thread_execute(const char *domain, GFunc func, gpointer data); typedef struct _VipsThreadset VipsThreadset; VipsThreadset *vips_threadset_new(int max_threads); int vips_threadset_run(VipsThreadset *set, const char *domain, GFunc func, gpointer data); void vips_threadset_free(VipsThreadset *set); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_THREAD_H*/ libvips-8.15.1/libvips/include/vips/threadpool.h000066400000000000000000000101141454007373500216510ustar00rootroot00000000000000/* Thread eval for VIPS. * * 29/9/99 JC * - from thread.h * 17/3/10 * - from threadgroup * - rework with a simpler distributed work allocation model * 02/02/20 kleisauke * - reuse threads by using GLib's threadpool */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_THREADPOOL_H #define VIPS_THREADPOOL_H #include #include #include #include #include #include #include #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ /* Per-thread state. Allocate functions can use these members to * communicate with work functions. */ #define VIPS_TYPE_THREAD_STATE (vips_thread_state_get_type()) #define VIPS_THREAD_STATE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_THREAD_STATE, VipsThreadState)) #define VIPS_THREAD_STATE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_THREAD_STATE, VipsThreadStateClass)) #define VIPS_IS_THREAD_STATE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_THREAD_STATE)) #define VIPS_IS_THREAD_STATE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_THREAD_STATE)) #define VIPS_THREAD_STATE_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_THREAD_STATE, VipsThreadStateClass)) typedef struct _VipsThreadState { VipsObject parent_object; /*< public >*/ /* Image we run on. */ VipsImage *im; /* This region is created and destroyed by the threadpool for the * use of the worker. */ VipsRegion *reg; /* Neither used nor set, do what you like with them. */ VipsRect pos; int x, y; /* Set in work to get the allocate to signal stop. */ gboolean stop; /* The client data passed to the enclosing vips_threadpool_run(). */ void *a; /* Set in allocate to stall this thread for a moment. Handy for * debugging race conditions. */ gboolean stall; } VipsThreadState; typedef struct _VipsThreadStateClass { VipsObjectClass parent_class; /*< public >*/ } VipsThreadStateClass; VIPS_API void *vips_thread_state_set(VipsObject *object, void *a, void *b); /* Don't put spaces around void here, it breaks gtk-doc. */ VIPS_API GType vips_thread_state_get_type(void); VIPS_API VipsThreadState *vips_thread_state_new(VipsImage *im, void *a); /* Constructor for per-thread state. */ typedef VipsThreadState *(*VipsThreadStartFn)(VipsImage *im, void *a); /* A work allocate function. This is run single-threaded by a worker to * set up a new work unit. * Return non-zero for errors. Set *stop for "no more work to do" */ typedef int (*VipsThreadpoolAllocateFn)(VipsThreadState *state, void *a, gboolean *stop); /* A work function. This does a unit of work (eg. processing a tile or * whatever). Return non-zero for errors. */ typedef int (*VipsThreadpoolWorkFn)(VipsThreadState *state, void *a); /* A progress function. This is run by the main thread once for every * allocation. Return an error to kill computation early. */ typedef int (*VipsThreadpoolProgressFn)(void *a); VIPS_API int vips_threadpool_run(VipsImage *im, VipsThreadStartFn start, VipsThreadpoolAllocateFn allocate, VipsThreadpoolWorkFn work, VipsThreadpoolProgressFn progress, void *a); VIPS_API void vips_get_tile_size(VipsImage *im, int *tile_width, int *tile_height, int *n_lines); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_THREADPOOL_H*/ libvips-8.15.1/libvips/include/vips/transform.h000066400000000000000000000047611454007373500215360ustar00rootroot00000000000000/* Affine transforms. */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_TRANSFORM_H #define VIPS_TRANSFORM_H #include #include #include #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ /* Params for an affine transformation. */ typedef struct { /* Area of input we can use. This can be smaller than the real input * image: we expand the input to add extra pixels for interpolation. */ VipsRect iarea; /* The area of the output we've been asked to generate. left/top can * be negative. */ VipsRect oarea; /* The transform. */ double a, b, c, d; double idx, idy; double odx, ody; double ia, ib, ic, id; /* Inverse of matrix abcd */ } VipsTransformation; void vips__transform_init(VipsTransformation *trn); int vips__transform_calc_inverse(VipsTransformation *trn); int vips__transform_isidentity(const VipsTransformation *trn); int vips__transform_add(const VipsTransformation *in1, const VipsTransformation *in2, VipsTransformation *out); void vips__transform_print(const VipsTransformation *trn); void vips__transform_forward_point(const VipsTransformation *trn, const double x, const double y, double *ox, double *oy); void vips__transform_invert_point(const VipsTransformation *trn, const double x, const double y, double *ox, double *oy); void vips__transform_forward_rect(const VipsTransformation *trn, const VipsRect *in, VipsRect *out); void vips__transform_invert_rect(const VipsTransformation *trn, const VipsRect *in, VipsRect *out); void vips__transform_set_area(VipsTransformation *); int vips__affine(VipsImage *in, VipsImage *out, VipsTransformation *trn); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_TRANSFORM_H*/ libvips-8.15.1/libvips/include/vips/type.h000066400000000000000000000166671454007373500205140ustar00rootroot00000000000000/* the GTypes we define * * 27/10/11 * - from header.h */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_TYPE_H #define VIPS_TYPE_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ /* A very simple boxed type for testing. Just holds an int. */ typedef struct _VipsThing { int i; } VipsThing; /** * VIPS_TYPE_THING: * * The #GType for a #VipsThing. */ #define VIPS_TYPE_THING (vips_thing_get_type()) VIPS_API GType vips_thing_get_type(void); VIPS_API VipsThing *vips_thing_new(int i); /* A ref-counted area of memory. Can hold arrays of things as well. */ typedef struct _VipsArea { void *data; size_t length; /* 0 if not known */ /* If this area represents an array, the number of elements in the * array. Equal to length / sizeof(element). */ int n; /*< private >*/ /* Reference count and lock. * * We could use an atomic int, but this is not a high-traffic data * structure, so a simple GMutex is OK. */ int count; GMutex *lock; /* Things like ICC profiles need their own free functions. * * Set client to anything you like -- VipsArea doesn't use this. */ VipsCallbackFn free_fn; void *client; /* If we are holding an array (for example, an array of double), the * GType of the elements and their size. 0 for not known. * * n is always length / sizeof_type, we keep it as a member for * convenience. */ GType type; size_t sizeof_type; } VipsArea; VIPS_API VipsArea *vips_area_copy(VipsArea *area); VIPS_API int vips_area_free_cb(void *mem, VipsArea *area); VIPS_API void vips_area_unref(VipsArea *area); VIPS_API VipsArea *vips_area_new(VipsCallbackFn free_fn, void *data); VIPS_API VipsArea *vips_area_new_array(GType type, size_t sizeof_type, int n); VIPS_API VipsArea *vips_area_new_array_object(int n); VIPS_API void *vips_area_get_data(VipsArea *area, size_t *length, int *n, GType *type, size_t *sizeof_type); #ifdef VIPS_DEBUG #define VIPS_ARRAY_ADDR(X, I) \ (((I) >= 0 && (I) < VIPS_AREA(X)->n) \ ? (void *) ((VipsPel *) VIPS_AREA(X)->data + \ VIPS_AREA(X)->sizeof_type * (I)) \ : (fprintf(stderr, \ "VIPS_ARRAY_ADDR: index out of bounds, " \ "file \"%s\", line %d\n" \ "(index %d should have been within [0,%d])\n", \ __FILE__, __LINE__, \ (I), VIPS_AREA(X)->n), \ NULL)) #else /*!VIPS_DEBUG*/ #define VIPS_ARRAY_ADDR(X, I) \ ((void *) ((VipsPel *) VIPS_AREA(X)->data + \ VIPS_AREA(X)->sizeof_type * (I))) #endif /*VIPS_DEBUG*/ /** * VIPS_TYPE_AREA: * * The #GType for a #VipsArea. */ #define VIPS_TYPE_AREA (vips_area_get_type()) #define VIPS_AREA(X) ((VipsArea *) (X)) VIPS_API GType vips_area_get_type(void); /** * VIPS_TYPE_SAVE_STRING: * * The #GType for a #VipsSaveString. */ #define VIPS_TYPE_SAVE_STRING (vips_save_string_get_type()) VIPS_API GType vips_save_string_get_type(void); typedef struct _VipsSaveString { char *s; } VipsSaveString; /** * VIPS_TYPE_REF_STRING: * * The #GType for a #VipsRefString. */ #define VIPS_TYPE_REF_STRING (vips_ref_string_get_type()) typedef struct _VipsRefString { VipsArea area; } VipsRefString; VIPS_API VipsRefString *vips_ref_string_new(const char *str); VIPS_API const char *vips_ref_string_get(VipsRefString *refstr, size_t *length); VIPS_API GType vips_ref_string_get_type(void); /** * VIPS_TYPE_BLOB: * * The %GType for a #VipsBlob. */ #define VIPS_TYPE_BLOB (vips_blob_get_type()) typedef struct _VipsBlob { VipsArea area; } VipsBlob; VIPS_API VipsBlob *vips_blob_new(VipsCallbackFn free_fn, const void *data, size_t length); VIPS_API VipsBlob *vips_blob_copy(const void *data, size_t length); VIPS_API const void *vips_blob_get(VipsBlob *blob, size_t *length); VIPS_API void vips_blob_set(VipsBlob *blob, VipsCallbackFn free_fn, const void *data, size_t length); VIPS_API GType vips_blob_get_type(void); /** * VIPS_TYPE_ARRAY_DOUBLE: * * The #GType for a #VipsArrayDouble. */ #define VIPS_TYPE_ARRAY_DOUBLE (vips_array_double_get_type()) typedef struct _VipsArrayDouble { VipsArea area; } VipsArrayDouble; VIPS_API VipsArrayDouble *vips_array_double_new(const double *array, int n); VIPS_API VipsArrayDouble *vips_array_double_newv(int n, ...); VIPS_API double *vips_array_double_get(VipsArrayDouble *array, int *n); VIPS_API GType vips_array_double_get_type(void); /** * VIPS_TYPE_ARRAY_INT: * * The #GType for a #VipsArrayInt. */ #define VIPS_TYPE_ARRAY_INT (vips_array_int_get_type()) typedef struct _VipsArrayInt { VipsArea area; } VipsArrayInt; VIPS_API VipsArrayInt *vips_array_int_new(const int *array, int n); VIPS_API VipsArrayInt *vips_array_int_newv(int n, ...); VIPS_API int *vips_array_int_get(VipsArrayInt *array, int *n); VIPS_API GType vips_array_int_get_type(void); /** * VIPS_TYPE_ARRAY_IMAGE: * * The #GType for a #VipsArrayImage. */ #define VIPS_TYPE_ARRAY_IMAGE (vips_array_image_get_type()) typedef struct _VipsArrayImage { VipsArea area; } VipsArrayImage; /* See image.h for vips_array_image_new() etc., they need to be declared after * VipsImage. */ VIPS_API GType vips_array_image_get_type(void); VIPS_API void vips_value_set_area(GValue *value, VipsCallbackFn free_fn, void *data); VIPS_API void *vips_value_get_area(const GValue *value, size_t *length); VIPS_API const char *vips_value_get_save_string(const GValue *value); VIPS_API void vips_value_set_save_string(GValue *value, const char *str); VIPS_API void vips_value_set_save_stringf(GValue *value, const char *fmt, ...) G_GNUC_PRINTF(2, 3); VIPS_API const char *vips_value_get_ref_string(const GValue *value, size_t *length); VIPS_API void vips_value_set_ref_string(GValue *value, const char *str); VIPS_API void *vips_value_get_blob(const GValue *value, size_t *length); VIPS_API void vips_value_set_blob(GValue *value, VipsCallbackFn free_fn, const void *data, size_t length); VIPS_API void vips_value_set_blob_free(GValue *value, void *data, size_t length); VIPS_API void vips_value_set_array(GValue *value, int n, GType type, size_t sizeof_type); VIPS_API void *vips_value_get_array(const GValue *value, int *n, GType *type, size_t *sizeof_type); VIPS_API double *vips_value_get_array_double(const GValue *value, int *n); VIPS_API void vips_value_set_array_double(GValue *value, const double *array, int n); VIPS_API int *vips_value_get_array_int(const GValue *value, int *n); VIPS_API void vips_value_set_array_int(GValue *value, const int *array, int n); VIPS_API GObject **vips_value_get_array_object(const GValue *value, int *n); VIPS_API void vips_value_set_array_object(GValue *value, int n); /* See also image.h, that has vips_array_image_get(), vips_array_image_new(), * vips_value_get_array_image() and vips_value_set_array_image(). They need * to be declared after VipsImage. */ #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_TYPE_H*/ libvips-8.15.1/libvips/include/vips/util.h000066400000000000000000000262751454007373500205040ustar00rootroot00000000000000/* Various useful definitions. * * J.Cupitt, 8/4/93 * 15/7/96 JC * - C++ stuff added */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_UTIL_H #define VIPS_UTIL_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #include #include /* Some platforms don't have M_PI :-( */ #define VIPS_PI (3.14159265358979323846) /* Convert degrees->rads and vice-versa. */ #define VIPS_RAD(R) (((R) / 360.0) * 2.0 * VIPS_PI) #define VIPS_DEG(A) (((A) / (2.0 * VIPS_PI)) * 360.0) #define VIPS_MAX(A, B) ((A) > (B) ? (A) : (B)) #define VIPS_MIN(A, B) ((A) < (B) ? (A) : (B)) #define VIPS_CLIP(A, V, B) VIPS_MAX((A), VIPS_MIN((B), (V))) #define VIPS_FCLIP(A, V, B) VIPS_FMAX((A), VIPS_FMIN((B), (V))) #define VIPS_NUMBER(R) ((int) (sizeof(R) / sizeof(R[0]))) #define VIPS_ABS(X) (((X) >= 0) ? (X) : -(X)) /* The built-in isnan and isinf functions provided by gcc 4+ and clang are * up to 7x faster than their libc equivalent included from . */ #if defined(__clang__) || (__GNUC__ >= 4) #define VIPS_ISNAN(V) __builtin_isnan(V) #define VIPS_FLOOR(V) __builtin_floor(V) #define VIPS_CEIL(V) __builtin_ceil(V) #define VIPS_RINT(V) __builtin_rint(V) #define VIPS_ROUND(V) __builtin_round(V) #define VIPS_FABS(V) __builtin_fabs(V) #define VIPS_FMAX(A, B) __builtin_fmax(A, B) #define VIPS_FMIN(A, B) __builtin_fmin(A, B) #else #define VIPS_ISNAN(V) isnan(V) #define VIPS_FLOOR(V) floor(V) #define VIPS_CEIL(V) ceil(V) #define VIPS_RINT(V) rint(V) #define VIPS_ROUND(V) round(V) #define VIPS_FABS(V) VIPS_ABS(V) #define VIPS_FMAX(A, B) VIPS_MAX(A, B) #define VIPS_FMIN(A, B) VIPS_MIN(A, B) #endif /* Testing status before the function call saves a lot of time. */ #define VIPS_ONCE(ONCE, FUNC, CLIENT) \ G_STMT_START \ { \ if (G_UNLIKELY((ONCE)->status != G_ONCE_STATUS_READY)) \ (void) g_once(ONCE, FUNC, CLIENT); \ } \ G_STMT_END /* VIPS_RINT() does "bankers rounding", it rounds to the nearest even integer. * For things like image geometry, we want strict nearest int. * * If you know it's unsigned, _UINT is a little faster. */ #define VIPS_ROUND_INT(R) ((int) ((R) > 0 ? ((R) + 0.5) : ((R) -0.5))) #define VIPS_ROUND_UINT(R) ((int) ((R) + 0.5)) /* Round N down and up to the nearest multiple of P. */ #define VIPS_ROUND_DOWN(N, P) ((N) - ((N) % (P))) #define VIPS_ROUND_UP(N, P) (VIPS_ROUND_DOWN((N) + (P) -1, (P))) #define VIPS_SWAP(TYPE, A, B) \ G_STMT_START \ { \ TYPE t = (A); \ (A) = (B); \ (B) = t; \ } \ G_STMT_END /* Duff's device. Do OPERation N times in a 16-way unrolled loop. */ #define VIPS_UNROLL(N, OPER) \ G_STMT_START \ { \ if ((N)) { \ int duff_count = ((N) + 15) / 16; \ \ switch ((N) % 16) { \ case 0: \ do { \ OPER; \ case 15: \ OPER; \ case 14: \ OPER; \ case 13: \ OPER; \ case 12: \ OPER; \ case 11: \ OPER; \ case 10: \ OPER; \ case 9: \ OPER; \ case 8: \ OPER; \ case 7: \ OPER; \ case 6: \ OPER; \ case 5: \ OPER; \ case 4: \ OPER; \ case 3: \ OPER; \ case 2: \ OPER; \ case 1: \ OPER; \ } while (--duff_count > 0); \ } \ } \ } \ G_STMT_END /* The g_info() macro was added in 2.40. */ #ifndef g_info /* Hopefully we have varargs macros. Maybe revisit this. */ #define g_info(...) \ g_log(G_LOG_DOMAIN, G_LOG_LEVEL_INFO, __VA_ARGS__) #endif /* Various integer range clips. Record over/under flows. */ #define VIPS_CLIP_UCHAR(V, SEQ) \ G_STMT_START \ { \ if ((V) < 0) { \ (SEQ)->underflow++; \ (V) = 0; \ } \ else if ((V) > UCHAR_MAX) { \ (SEQ)->overflow++; \ (V) = UCHAR_MAX; \ } \ } \ G_STMT_END #define VIPS_CLIP_CHAR(V, SEQ) \ G_STMT_START \ { \ if ((V) < SCHAR_MIN) { \ (SEQ)->underflow++; \ (V) = SCHAR_MIN; \ } \ else if ((V) > SCHAR_MAX) { \ (SEQ)->overflow++; \ (V) = SCHAR_MAX; \ } \ } \ G_STMT_END #define VIPS_CLIP_USHORT(V, SEQ) \ G_STMT_START \ { \ if ((V) < 0) { \ (SEQ)->underflow++; \ (V) = 0; \ } \ else if ((V) > USHRT_MAX) { \ (SEQ)->overflow++; \ (V) = USHRT_MAX; \ } \ } \ G_STMT_END #define VIPS_CLIP_SHORT(V, SEQ) \ G_STMT_START \ { \ if ((V) < SHRT_MIN) { \ (SEQ)->underflow++; \ (V) = SHRT_MIN; \ } \ else if ((V) > SHRT_MAX) { \ (SEQ)->overflow++; \ (V) = SHRT_MAX; \ } \ } \ G_STMT_END #define VIPS_CLIP_UINT(V, SEQ) \ G_STMT_START \ { \ if ((V) < 0) { \ (SEQ)->underflow++; \ (V) = 0; \ } \ } \ G_STMT_END #define VIPS_CLIP_NONE(V, SEQ) \ { \ } /* Not all platforms have PATH_MAX (eg. Hurd) and we don't need a platform one * anyway, just a static buffer big enough for almost any path. */ #define VIPS_PATH_MAX (4096) /* Create multiple copies of a function targeted at groups of SIMD intrinsics, * with the most suitable selected at runtime via dynamic dispatch. */ #ifdef HAVE_TARGET_CLONES #define VIPS_TARGET_CLONES(TARGETS) \ __attribute__((target_clones(TARGETS))) #else #define VIPS_TARGET_CLONES(TARGETS) #endif VIPS_API const char *vips_enum_string(GType enm, int value); VIPS_API const char *vips_enum_nick(GType enm, int value); VIPS_API int vips_enum_from_nick(const char *domain, GType type, const char *str); VIPS_API int vips_flags_from_nick(const char *domain, GType type, const char *nick); VIPS_API gboolean vips_slist_equal(GSList *l1, GSList *l2); VIPS_API void *vips_slist_map2(GSList *list, VipsSListMap2Fn fn, void *a, void *b); VIPS_API void *vips_slist_map2_rev(GSList *list, VipsSListMap2Fn fn, void *a, void *b); VIPS_API void *vips_slist_map4(GSList *list, VipsSListMap4Fn fn, void *a, void *b, void *c, void *d); VIPS_API void *vips_slist_fold2(GSList *list, void *start, VipsSListFold2Fn fn, void *a, void *b); VIPS_API GSList *vips_slist_filter(GSList *list, VipsSListMap2Fn fn, void *a, void *b); VIPS_API void vips_slist_free_all(GSList *list); VIPS_API void *vips_map_equal(void *a, void *b); VIPS_API void *vips_hash_table_map(GHashTable *hash, VipsSListMap2Fn fn, void *a, void *b); VIPS_API char *vips_strncpy(char *dest, const char *src, int n); VIPS_API char *vips_strrstr(const char *haystack, const char *needle); VIPS_API gboolean vips_ispostfix(const char *a, const char *b); VIPS_API gboolean vips_iscasepostfix(const char *a, const char *b); VIPS_API gboolean vips_isprefix(const char *a, const char *b); VIPS_API char *vips_break_token(char *str, const char *brk); void vips__chomp(char *str); VIPS_API int vips_vsnprintf(char *str, size_t size, const char *format, va_list ap); VIPS_API int vips_snprintf(char *str, size_t size, const char *format, ...) G_GNUC_PRINTF(3, 4); VIPS_API int vips_filename_suffix_match(const char *path, const char *suffixes[]); VIPS_API gint64 vips_file_length(int fd); /* TODO(kleisauke): VIPS_API is required by vipsedit. */ VIPS_API int vips__write(int fd, const void *buf, size_t count); /* TODO(kleisauke): VIPS_API is required by test_connections. */ VIPS_API int vips__open(const char *filename, int flags, int mode); int vips__open_read(const char *filename); FILE *vips__fopen(const char *filename, const char *mode); FILE *vips__file_open_read(const char *filename, const char *fallback_dir, gboolean text_mode); FILE *vips__file_open_write(const char *filename, gboolean text_mode); /* TODO(kleisauke): VIPS_API is required by vipsedit. */ VIPS_API char *vips__file_read(FILE *fp, const char *name, size_t *length_out); char *vips__file_read_name(const char *name, const char *fallback_dir, size_t *length_out); int vips__file_write(void *data, size_t size, size_t nmemb, FILE *stream); /* TODO(kleisauke): VIPS_API is required by the magick module. */ VIPS_API gint64 vips__get_bytes(const char *filename, unsigned char buf[], gint64 len); int vips__fgetc(FILE *fp); GValue *vips__gvalue_ref_string_new(const char *text); void vips__gslist_gvalue_free(GSList *list); GSList *vips__gslist_gvalue_copy(const GSList *list); GSList *vips__gslist_gvalue_merge(GSList *a, const GSList *b); char *vips__gslist_gvalue_get(const GSList *list); gint64 vips__seek_no_error(int fd, gint64 pos, int whence); /* TODO(kleisauke): VIPS_API is required by vipsedit. */ VIPS_API gint64 vips__seek(int fd, gint64 pos, int whence); int vips__ftruncate(int fd, gint64 pos); VIPS_API int vips_existsf(const char *name, ...) G_GNUC_PRINTF(1, 2); VIPS_API int vips_isdirf(const char *name, ...) G_GNUC_PRINTF(1, 2); VIPS_API int vips_mkdirf(const char *name, ...) G_GNUC_PRINTF(1, 2); VIPS_API int vips_rmdirf(const char *name, ...) G_GNUC_PRINTF(1, 2); VIPS_API int vips_rename(const char *old_name, const char *new_name); /** * VipsToken: * @VIPS_TOKEN_LEFT: left bracket * @VIPS_TOKEN_RIGHT: right bracket * @VIPS_TOKEN_STRING: string constant * @VIPS_TOKEN_EQUALS: equals sign * @VIPS_TOKEN_COMMA: comma * * Tokens returned by the vips lexical analyzer, see vips__token_get(). This * is used to parse option strings for arguments. * * Left and right brackets can be any of (, {, [, <. * * Strings may be in double quotes, and may contain escaped quote characters, * for example string, "string" and "str\"ing". * */ typedef enum { VIPS_TOKEN_LEFT = 1, VIPS_TOKEN_RIGHT, VIPS_TOKEN_STRING, VIPS_TOKEN_EQUALS, VIPS_TOKEN_COMMA } VipsToken; const char *vips__token_get(const char *buffer, VipsToken *token, char *string, int size); const char *vips__token_must(const char *buffer, VipsToken *token, char *string, int size); const char *vips__token_need(const char *buffer, VipsToken need_token, char *string, int size); const char *vips__token_segment(const char *p, VipsToken *token, char *string, int size); const char *vips__token_segment_need(const char *p, VipsToken need_token, char *string, int size); const char *vips__find_rightmost_brackets(const char *p); /* TODO(kleisauke): VIPS_API is required by libvips-cpp and vipsheader. */ VIPS_API void vips__filename_split8(const char *name, char *filename, char *option_string); VIPS_API int vips_ispoweroftwo(int p); VIPS_API int vips_amiMSBfirst(void); /* TODO(kleisauke): VIPS_API is required by jpegsave_file_fuzzer. */ VIPS_API char *vips__temp_name(const char *format); void vips__change_suffix(const char *name, char *out, int mx, const char *new_suff, const char **olds, int nolds); VIPS_API char *vips_realpath(const char *path); guint32 vips__random(guint32 seed); guint32 vips__random_add(guint32 seed, int value); const char *vips__icc_dir(void); const char *vips__windows_prefix(void); char *vips__get_iso8601(void); VIPS_API int vips_strtod(const char *str, double *out); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_UTIL_H*/ libvips-8.15.1/libvips/include/vips/vector.h000066400000000000000000000027271454007373500210250ustar00rootroot00000000000000/* helper stuff for Highway * * 16/03/21 kleisauke * - from vector.h */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_VECTOR_H #define VIPS_VECTOR_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ /* Set from the command-line. */ extern gboolean vips__vector_enabled; VIPS_API gboolean vips_vector_isenabled(void); VIPS_API void vips_vector_set_enabled(gboolean enabled); VIPS_API gint64 vips_vector_get_builtin_targets(void); VIPS_API gint64 vips_vector_get_supported_targets(void); VIPS_API const char *vips_vector_target_name(gint64 target); VIPS_API void vips_vector_disable_targets(gint64 disabled_targets); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_VECTOR_H*/ libvips-8.15.1/libvips/include/vips/version.h.in000066400000000000000000000013351454007373500216070ustar00rootroot00000000000000/* Macros for the header version. */ #ifndef VIPS_VERSION_H #define VIPS_VERSION_H #define VIPS_VERSION "@VIPS_VERSION@" #define VIPS_VERSION_STRING "@VIPS_VERSION_STRING@" #define VIPS_MAJOR_VERSION (@VIPS_MAJOR_VERSION@) #define VIPS_MINOR_VERSION (@VIPS_MINOR_VERSION@) #define VIPS_MICRO_VERSION (@VIPS_MICRO_VERSION@) /* The ABI version, as used for library versioning. */ #define VIPS_LIBRARY_CURRENT (@LIBRARY_CURRENT@) #define VIPS_LIBRARY_REVISION (@LIBRARY_REVISION@) #define VIPS_LIBRARY_AGE (@LIBRARY_AGE@) #define VIPS_CONFIG "@VIPS_CONFIG@" /* Not really anything to do with versions, but this is a handy place to put * it. */ #define VIPS_ENABLE_DEPRECATED @VIPS_ENABLE_DEPRECATED@ #endif /*VIPS_VERSION_H*/ libvips-8.15.1/libvips/include/vips/video.h000066400000000000000000000023601454007373500206220ustar00rootroot00000000000000/* video.h * * 20/9/09 * - from proto.h */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef IM_VIDEO_H #define IM_VIDEO_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ VIPS_DEPRECATED int im_video_v4l1(VipsImage *im, const char *device, int channel, int brightness, int colour, int contrast, int hue, int ngrabs); VIPS_DEPRECATED int im_video_test(VipsImage *im, int brightness, int error); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*IM_VIDEO_H*/ libvips-8.15.1/libvips/include/vips/vips.h000066400000000000000000000112001454007373500204660ustar00rootroot00000000000000/* @(#) Header file for Birkbeck/VIPS Image Processing Library * Authors: N. Dessipris, K. Martinez, Birkbeck College, London. * Sept 94 * * 15/7/96 JC * - now does C++ extern stuff * - many more protos * 15/4/97 JC * - protos split out * 4/3/98 JC * - IM_ANY added * - sRGB colourspace added * 28/10/98 JC * - VASARI_MAGIC_INTEL and VASARI_MAGIC_SPARC added * 29/9/99 JC * - new locks for threading, no more threadgroup stuff in IMAGE * 30/11/00 JC * - override RGB/CMYK macros on cygwin * 21/9/02 JC * - new Xoffset/Yoffset fields * - rationalized macro names * 6/6/05 Markus Wollgarten * - added Meta header field * 31/7/05 * - added meta.h for new metadata API * 22/8/05 * - scrapped stupid VAS_HD * 30/9/05 * - added sizeof_header field for mmap window read of RAW files * 4/10/05 * - now you have to define IM_ENABLE_DEPRECATED to get broken #defined * 5/10/05 * - added GNUC attributes * 8/5/06 * - added RGB16, GREY16 * 30/10/06 * - added im_window_t * 7/11/07 * - added preclose and evalstart callbacks * - brought time struct in here * 7/3/08 * - MAGIC values should be unsigned * 2/7/08 * - added invalidate callbacks * 7/8/08 * - include , thanks nicola * 30/6/09 * - move deprecated stuff to its own header * 16/5/18 * - remove old vips7 stuff, you must explicitly include it now */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_VIPS_H #define VIPS_VIPS_H #include #include #include #include /* Needed for VipsGInputStream. */ #include #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #include #include #include #include #include #include #include #include #include #include #include #include #if VIPS_ENABLE_DEPRECATED #include #endif #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #if VIPS_ENABLE_DEPRECATED #include #endif /* We can't use _ here since this will be compiled by our clients and they may * not have _(). */ #define VIPS_INIT(ARGV0) \ (vips_version(3) - vips_version(5) != \ VIPS_LIBRARY_CURRENT - VIPS_LIBRARY_AGE \ ? ( \ g_warning("ABI mismatch"), \ g_warning("library has ABI version %d", \ vips_version(3) - vips_version(5)), \ g_warning("application needs ABI version %d", \ VIPS_LIBRARY_CURRENT - VIPS_LIBRARY_AGE), \ vips_error("vips_init", "ABI mismatch"), \ -1) \ : vips_init(ARGV0)) VIPS_API int vips_init(const char *argv0); VIPS_API const char *vips_get_argv0(void); VIPS_API const char *vips_get_prgname(void); VIPS_API void vips_shutdown(void); VIPS_API void vips_thread_shutdown(void); VIPS_API void vips_add_option_entries(GOptionGroup *option_group); VIPS_API void vips_leak_set(gboolean leak); VIPS_API void vips_block_untrusted_set(gboolean state); VIPS_API const char *vips_version_string(void); VIPS_API int vips_version(int flag); VIPS_API const char *vips_guess_prefix(const char *argv0, const char *env_name); VIPS_API const char *vips_guess_libdir(const char *argv0, const char *env_name); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_VIPS_H*/ libvips-8.15.1/libvips/include/vips/vips7compat.h000066400000000000000000001705211454007373500217750ustar00rootroot00000000000000/* compat with the vips7 API * * 4/3/11 * - hacked up */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_VIPS7COMPAT_H #define VIPS_VIPS7COMPAT_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ /* Renamed types. */ /* We have this misspelt in earlier versions :( */ #define VIPS_META_IPCT_NAME VIPS_META_IPTC_NAME #define IM_D93_X0 VIPS_D93_X0 #define IM_D93_Y0 VIPS_D93_Y0 #define IM_D93_Z0 VIPS_D93_Z0 #define IM_D75_X0 VIPS_D75_X0 #define IM_D75_Y0 VIPS_D75_Y0 #define IM_D75_Z0 VIPS_D75_Z0 #define IM_D65_X0 VIPS_D65_X0 #define IM_D65_Y0 VIPS_D65_Y0 #define IM_D65_Z0 VIPS_D65_Z0 #define IM_D55_X0 VIPS_D55_X0 #define IM_D55_Y0 VIPS_D55_Y0 #define IM_D55_Z0 VIPS_D55_Z0 #define IM_D50_X0 VIPS_D50_X0 #define IM_D50_Y0 VIPS_D50_Y0 #define IM_D50_Z0 VIPS_D50_Z0 #define IM_A_X0 VIPS_A_X0 #define IM_A_Y0 VIPS_A_Y0 #define IM_A_Z0 VIPS_A_Z0 #define IM_B_X0 VIPS_B_X0 #define IM_B_Y0 VIPS_B_Y0 #define IM_B_Z0 VIPS_B_Z0 #define IM_C_X0 VIPS_C_X0 #define IM_C_Y0 VIPS_C_Y0 #define IM_C_Z0 VIPS_C_Z0 #define IM_E_X0 VIPS_E_X0 #define IM_E_Y0 VIPS_E_Y0 #define IM_E_Z0 VIPS_E_Z0 #define IM_D3250_X0 VIPS_D3250_X0 #define IM_D3250_Y0 VIPS_D3250_Y0 #define IM_D3250_Z0 VIPS_D3250_Z0 #define im_col_Lab2XYZ vips_col_Lab2XYZ #define im_col_XYZ2Lab vips_col_XYZ2Lab #define im_col_ab2h vips_col_ab2h #define im_col_ab2Ch vips_col_ab2Ch #define im_col_Ch2ab vips_col_Ch2ab #define im_col_L2Lucs vips_col_L2Lcmc #define im_col_C2Cucs vips_col_C2Ccmc #define im_col_Ch2hucs vips_col_Ch2hcmc #define im_col_pythagoras vips_pythagoras #define im_col_make_tables_UCS vips_col_make_tables_CMC #define im_col_Lucs2L vips_col_Lcmc2L #define im_col_Cucs2C vips_col_Ccmc2C #define im_col_Chucs2h vips_col_Chcmc2h #define PEL VipsPel #define IM_BANDFMT_NOTSET VIPS_FORMAT_NOTSET #define IM_BANDFMT_UCHAR VIPS_FORMAT_UCHAR #define IM_BANDFMT_CHAR VIPS_FORMAT_CHAR #define IM_BANDFMT_USHORT VIPS_FORMAT_USHORT #define IM_BANDFMT_SHORT VIPS_FORMAT_SHORT #define IM_BANDFMT_UINT VIPS_FORMAT_UINT #define IM_BANDFMT_INT VIPS_FORMAT_INT #define IM_BANDFMT_FLOAT VIPS_FORMAT_FLOAT #define IM_BANDFMT_COMPLEX VIPS_FORMAT_COMPLEX #define IM_BANDFMT_DOUBLE VIPS_FORMAT_DOUBLE #define IM_BANDFMT_DPCOMPLEX VIPS_FORMAT_DPCOMPLEX #define IM_BANDFMT_LAST VIPS_FORMAT_LAST #define VipsBandFmt VipsBandFormat #define IM_SMALLTILE VIPS_DEMAND_STYLE_SMALLTILE #define IM_FATSTRIP VIPS_DEMAND_STYLE_FATSTRIP #define IM_THINSTRIP VIPS_DEMAND_STYLE_THINSTRIP #define IM_ANY VIPS_DEMAND_STYLE_ANY #define IM_CODING_NONE VIPS_CODING_NONE #define IM_CODING_LABQ VIPS_CODING_LABQ #define IM_CODING_RAD VIPS_CODING_RAD #define IM_TYPE_MULTIBAND VIPS_INTERPRETATION_MULTIBAND #define IM_TYPE_B_W VIPS_INTERPRETATION_B_W #define IM_TYPE_HISTOGRAM VIPS_INTERPRETATION_HISTOGRAM #define IM_TYPE_FOURIER VIPS_INTERPRETATION_FOURIER #define IM_TYPE_XYZ VIPS_INTERPRETATION_XYZ #define IM_TYPE_LAB VIPS_INTERPRETATION_LAB #define IM_TYPE_CMYK VIPS_INTERPRETATION_CMYK #define IM_TYPE_LABQ VIPS_INTERPRETATION_LABQ #define IM_TYPE_RGB VIPS_INTERPRETATION_RGB #define IM_TYPE_UCS VIPS_INTERPRETATION_CMC #define IM_TYPE_LCH VIPS_INTERPRETATION_LCH #define IM_TYPE_LABS VIPS_INTERPRETATION_LABS #define IM_TYPE_sRGB VIPS_INTERPRETATION_sRGB #define IM_TYPE_YXY VIPS_INTERPRETATION_YXY #define IM_TYPE_RGB16 VIPS_INTERPRETATION_RGB16 #define IM_TYPE_GREY16 VIPS_INTERPRETATION_GREY16 #define VipsType VipsInterpretation #define IMAGE VipsImage #define REGION VipsRegion #define IM_INTENT_PERCEPTUAL VIPS_INTENT_PERCEPTUAL #define IM_INTENT_RELATIVE_COLORIMETRIC VIPS_INTENT_RELATIVE #define IM_INTENT_SATURATION VIPS_INTENT_SATURATION #define IM_INTENT_ABSOLUTE_COLORIMETRIC VIPS_INTENT_ABSOLUTE /* Renamed macros. */ #define IM_MAX VIPS_MAX #define IM_MIN VIPS_MIN #define IM_RAD VIPS_RAD #define IM_DEG VIPS_DEG #define IM_PI VIPS_PI #define IM_RINT VIPS_RINT #define IM_ABS VIPS_ABS #define IM_NUMBER VIPS_NUMBER #define IM_CLIP VIPS_CLIP #define IM_CLIP_UCHAR VIPS_CLIP_UCHAR #define IM_CLIP_CHAR VIPS_CLIP_CHAR #define IM_CLIP_USHORT VIPS_CLIP_USHORT #define IM_CLIP_SHORT VIPS_CLIP_SHORT #define IM_CLIP_NONE VIPS_CLIP_NONE #define IM_SWAP VIPS_SWAP #define IM_IMAGE_ADDR VIPS_IMAGE_ADDR #define IM_IMAGE_N_ELEMENTS VIPS_IMAGE_N_ELEMENTS #define IM_IMAGE_SIZEOF_ELEMENT VIPS_IMAGE_SIZEOF_ELEMENT #define IM_IMAGE_SIZEOF_PEL VIPS_IMAGE_SIZEOF_PEL #define IM_IMAGE_SIZEOF_LINE VIPS_IMAGE_SIZEOF_LINE #define IM_REGION_LSKIP VIPS_REGION_LSKIP #define IM_REGION_ADDR VIPS_REGION_ADDR #define IM_REGION_ADDR_TOPLEFT VIPS_REGION_ADDR_TOPLEFT #define IM_REGION_N_ELEMENTS VIPS_REGION_N_ELEMENTS #define IM_REGION_SIZEOF_LINE VIPS_REGION_SIZEOF_LINE /* Renamed externs. */ VIPS_DEPRECATED_FOR(vips_format_sizeof_unsafe) const guint64 vips__image_sizeof_bandformat[]; #define im__sizeof_bandfmt vips__image_sizeof_bandformat /* Renamed functions. */ #define im_error vips_error #define im_verror vips_verror #define im_verror_system vips_verror_system #define im_error_system vips_error_system #define im_error_buffer vips_error_buffer #define im_error_clear vips_error_clear #define im_warn vips_warn #define im_vwarn vips_vwarn #define im_diag vips_info #define im_vdiag vips_vinfo #define error_exit vips_error_exit #define im_get_argv0 vips_get_argv0 #define im_version_string vips_version_string #define im_version vips_version #define im_get_option_group vips_get_option_group #define im_guess_prefix vips_guess_prefix #define im_guess_libdir vips_guess_libdir #define im__global_lock vips__global_lock VIPS_DEPRECATED int im_cp_desc(IMAGE *out, IMAGE *in); VIPS_DEPRECATED int im_cp_descv(IMAGE *im, ...); #define im_cp_desc_array(I, A) vips__image_copy_fields_array(I, A) VIPS_DEPRECATED int im_demand_hint(IMAGE *im, VipsDemandStyle hint, ...); #define im_demand_hint_array(A, B, C) (vips__demand_hint_array(A, B, C), 0) #define im_image(P, W, H, B, F) \ vips_image_new_from_memory((P), 0, (W), (H), (B), (F)) #define im_binfile vips_image_new_from_file_raw #define im__open_temp vips_image_new_temp_file #define im__test_kill(I) (vips_image_iskilled(I)) #define im__start_eval(I) (vips_image_preeval(I), vips_image_iskilled(I)) #define im__handle_eval(I, W, H) \ (vips_image_eval(I, W, H), vips_image_iskilled(I)) #define im__end_eval vips_image_posteval #define im_invalidate vips_image_invalidate_all #define im_isfile vips_image_isfile #define im_printdesc(I) vips_object_print_dump(VIPS_OBJECT(I)) /* im_openout() needs to have this visible. */ VIPS_DEPRECATED VipsImage *vips_image_new_mode(const char *filename, const char *mode); /* im_image_open_input() needs to have this visible. */ VIPS_DEPRECATED int vips_image_open_input(VipsImage *image); /* im_image_open_output() needs to have this visible. */ VIPS_DEPRECATED int vips_image_open_output(VipsImage *image); /* im_mapfile() needs to have this visible. */ VIPS_DEPRECATED int vips_mapfile(VipsImage *image); /* im_mapfilerw() needs to have this visible. */ VIPS_DEPRECATED int vips_mapfilerw(VipsImage *image); /* im_remapfilerw() needs to have this visible. */ VIPS_DEPRECATED int vips_remapfilerw(VipsImage *image); #define im_openout(F) vips_image_new_mode(F, "w") #define im_setbuf(F) vips_image_new("t") #define im_initdesc(image, \ xsize, ysize, bands, bandbits, bandfmt, coding, \ type, xres, yres, xo, yo) \ vips_image_init_fields(image, \ xsize, ysize, bands, bandfmt, coding, \ type, xres, yres) #define im__open_image_file vips__open_image_read #define im_setupout vips_image_write_prepare #define im_writeline(Y, IM, P) vips_image_write_line(IM, Y, P) #define im_prepare vips_region_prepare #define im_prepare_to vips_region_prepare_to #define im_region_create vips_region_new #define im_region_free g_object_unref #define im_region_region vips_region_region #define im_region_buffer vips_region_buffer #define im_region_black vips_region_black #define im_region_paint vips_region_paint #define im_prepare_many vips_region_prepare_many #define im__region_no_ownership vips__region_no_ownership #define im_image_sanity(I) (!vips_object_sanity(VIPS_OBJECT(I))) #define im_image_sanity_all vips_object_sanity_all #define im__print_all vips_object_print_all /* Compat functions. */ VIPS_DEPRECATED_FOR(vips_init) int im_init_world(const char *argv0); VIPS_DEPRECATED_FOR(vips_image_new_mode) VipsImage *im_open(const char *filename, const char *mode); VIPS_DEPRECATED VipsImage *im_open_local(VipsImage *parent, const char *filename, const char *mode); VIPS_DEPRECATED int im_open_local_array(VipsImage *parent, VipsImage **images, int n, const char *filename, const char *mode); #define im_callback_fn VipsCallbackFn VIPS_DEPRECATED_FOR(g_signal_connect) int im_add_callback(VipsImage *im, const char *callback, im_callback_fn fn, void *a, void *b); VIPS_DEPRECATED_FOR(g_signal_connect) int im_add_callback1(VipsImage *im, const char *callback, im_callback_fn fn, void *a, void *b); #define im_add_close_callback(IM, FN, A, B) \ im_add_callback(IM, "close", FN, A, B) #define im_add_postclose_callback(IM, FN, A, B) \ im_add_callback(IM, "postclose", FN, A, B) #define im_add_preclose_callback(IM, FN, A, B) \ im_add_callback(IM, "preclose", FN, A, B) #define im_add_evalstart_callback(IM, FN, A, B) \ im_add_callback1(IM, "preeval", FN, A, B) #define im_add_evalend_callback(IM, FN, A, B) \ im_add_callback1(IM, "posteval", FN, A, B) #define im_add_eval_callback(IM, FN, A, B) \ (vips_image_set_progress(IM, TRUE), \ im_add_callback1(IM, "eval", FN, A, B)) #define im_add_invalidate_callback(IM, FN, A, B) \ im_add_callback(IM, "invalidate", FN, A, B) #define im_bits_of_fmt(fmt) (vips_format_sizeof(fmt) << 3) typedef void *(*im_construct_fn)(void *, void *, void *); VIPS_DEPRECATED_FOR(vips_object_local) void *im_local(VipsImage *im, im_construct_fn cons, im_callback_fn dest, void *a, void *b, void *c); VIPS_DEPRECATED_FOR(vips_object_local_array) int im_local_array(VipsImage *im, void **out, int n, im_construct_fn cons, im_callback_fn dest, void *a, void *b, void *c); VIPS_DEPRECATED_FOR(g_object_unref) int im_close(VipsImage *im); VIPS_DEPRECATED_FOR(vips_image_new_from_file) VipsImage *im_init(const char *filename); VIPS_DEPRECATED_FOR(vips_enum_string) const char *im_Type2char(VipsInterpretation type); VIPS_DEPRECATED_FOR(vips_enum_string) const char *im_BandFmt2char(VipsBandFormat fmt); VIPS_DEPRECATED_FOR(vips_enum_string) const char *im_Coding2char(VipsCoding coding); VIPS_DEPRECATED_FOR(vips_enum_string) const char *im_Compression2char(int n); VIPS_DEPRECATED_FOR(vips_enum_string) const char *im_dtype2char(VipsImageType n); VIPS_DEPRECATED_FOR(vips_enum_string) const char *im_dhint2char(VipsDemandStyle style); VIPS_DEPRECATED_FOR(vips_enum_from_nick) VipsInterpretation im_char2Type(const char *str); VIPS_DEPRECATED_FOR(vips_enum_from_nick) VipsBandFormat im_char2BandFmt(const char *str); VIPS_DEPRECATED_FOR(vips_enum_from_nick) VipsCoding im_char2Coding(const char *str); VIPS_DEPRECATED_FOR(vips_enum_from_nick) VipsImageType im_char2dtype(const char *str); VIPS_DEPRECATED_FOR(vips_enum_from_nick) VipsDemandStyle im_char2dhint(const char *str); #define Rect VipsRect #define IM_RECT_RIGHT VIPS_RECT_RIGHT #define IM_RECT_BOTTOM VIPS_RECT_BOTTOM #define IM_RECT_HCENTRE VIPS_RECT_HCENTRE #define IM_RECT_VCENTRE VIPS_RECT_VCENTRE #define im_rect_marginadjust vips_rect_marginadjust #define im_rect_includespoint vips_rect_includespoint #define im_rect_includesrect vips_rect_includesrect #define im_rect_intersectrect vips_rect_intersectrect #define im_rect_isempty vips_rect_isempty #define im_rect_unionrect vips_rect_unionrect #define im_rect_equalsrect vips_rect_equalsrect #define im_rect_dup vips_rect_dup #define im_rect_normalise vips_rect_normalise #define im_start_one vips_start_one #define im_stop_one vips_stop_one #define im_start_many vips_start_many #define im_stop_many vips_stop_many #define im_allocate_input_array vips_allocate_input_array #define im_start_fn VipsStartFn typedef int (*im_generate_fn)(VipsRegion *out, void *seq, void *a, void *b); #define im_stop_fn VipsStopFn VIPS_DEPRECATED_FOR(vips_image_generate) int im_generate(VipsImage *im, im_start_fn start, im_generate_fn generate, im_stop_fn stop, void *a, void *b); #define im__mmap vips__mmap #define im__munmap vips__munmap #define im_mapfile vips_mapfile #define im_mapfilerw vips_mapfilerw #define im_remapfilerw vips_remapfilerw #define im__print_renders vips__print_renders VIPS_DEPRECATED_FOR(vips_sink_screen) int im_cache(IMAGE *in, IMAGE *out, int width, int height, int max); #define IM_FREEF(F, S) \ G_STMT_START \ { \ if (S) { \ (void) F((S)); \ (S) = 0; \ } \ } \ G_STMT_END /* Can't just use VIPS_FREEF(), we want the extra cast to void on the argument * to vips_free() to make sure we can work for "const char *" variables. */ #define IM_FREE(S) \ G_STMT_START \ { \ if (S) { \ (void) im_free((void *) (S)); \ (S) = 0; \ } \ } \ G_STMT_END #define IM_SETSTR(S, V) \ G_STMT_START \ { \ const char *sst = (V); \ \ if ((S) != sst) { \ if (!(S) || !sst || strcmp((S), sst) != 0) { \ IM_FREE(S); \ if (sst) \ (S) = im_strdup(NULL, sst); \ } \ } \ } \ G_STMT_END #define im_malloc(IM, SZ) \ (vips_malloc(VIPS_OBJECT(IM), (SZ))) #define im_free vips_free #define im_strdup(IM, STR) \ (vips_strdup(VIPS_OBJECT(IM), (STR))) #define IM_NEW(IM, T) ((T *) im_malloc((IM), sizeof(T))) #define IM_ARRAY(IM, N, T) ((T *) im_malloc((IM), (N) * sizeof(T))) #define im_incheck vips_image_wio_input #define im_outcheck(I) (0) #define im_rwcheck vips_image_inplace #define im_pincheck vips_image_pio_input #define im_poutcheck(I) (0) #define im_iocheck(I, O) im_incheck(I) #define im_piocheck(I, O) im_pincheck(I) #define im_check_uncoded vips_check_uncoded #define im_check_coding_known vips_check_coding_known #define im_check_coding_labq vips_check_coding_labq #define im_check_coding_rad vips_check_coding_rad #define im_check_coding_noneorlabq vips_check_coding_noneorlabq #define im_check_coding_same vips_check_coding_same #define im_check_mono vips_check_mono #define im_check_bands_1or3 vips_check_bands_1or3 #define im_check_bands vips_check_bands #define im_check_bands_1orn vips_check_bands_1orn #define im_check_bands_1orn_unary vips_check_bands_1orn_unary #define im_check_bands_same vips_check_bands_same #define im_check_bandno vips_check_bandno #define im_check_int vips_check_int #define im_check_uint vips_check_uint #define im_check_uintorf vips_check_uintorf #define im_check_noncomplex vips_check_noncomplex #define im_check_complex vips_check_complex #define im_check_format vips_check_format #define im_check_u8or16 vips_check_u8or16 #define im_check_8or16 vips_check_8or16 #define im_check_u8or16orf vips_check_u8or16orf #define im_check_format_same vips_check_format_same #define im_check_size_same vips_check_size_same #define im_check_vector vips_check_vector #define im_check_hist vips_check_hist #define im_check_imask vips_check_imask #define im_check_dmask vips_check_dmask #define vips_bandfmt_isint vips_band_format_isint #define vips_bandfmt_isuint vips_band_format_isuint #define vips_bandfmt_isfloat vips_band_format_isfloat #define vips_bandfmt_iscomplex vips_band_format_iscomplex #define im__change_suffix vips__change_suffix /* Buffer processing. */ typedef void (*im_wrapone_fn)(void *in, void *out, int width, void *a, void *b); VIPS_DEPRECATED int im_wrapone(VipsImage *in, VipsImage *out, im_wrapone_fn fn, void *a, void *b); typedef void (*im_wraptwo_fn)(void *in1, void *in2, void *out, int width, void *a, void *b); VIPS_DEPRECATED int im_wraptwo(VipsImage *in1, VipsImage *in2, VipsImage *out, im_wraptwo_fn fn, void *a, void *b); typedef void (*im_wrapmany_fn)(void **in, void *out, int width, void *a, void *b); VIPS_DEPRECATED int im_wrapmany(VipsImage **in, VipsImage *out, im_wrapmany_fn fn, void *a, void *b); #define IM_META_EXIF_NAME VIPS_META_EXIF_NAME #define IM_META_ICC_NAME VIPS_META_ICC_NAME #define IM_META_RESOLUTION_UNIT VIPS_META_RESOLUTION_UNIT #define IM_TYPE_SAVE_STRING VIPS_TYPE_SAVE_STRING #define IM_TYPE_BLOB VIPS_TYPE_BLOB #define IM_TYPE_AREA VIPS_TYPE_AREA #define IM_TYPE_REF_STRING VIPS_TYPE_REF_STRING #define im_header_map_fn VipsImageMapFn #define im_header_map vips_image_map #define im_header_int vips_image_get_int #define im_header_double vips_image_get_double #define im_header_string(IMAGE, FIELD, STRING) \ vips_image_get_string(IMAGE, FIELD, (const char **) STRING) #define im_header_as_string vips_image_get_as_string #define im_header_get_typeof vips_image_get_typeof #define im_header_get vips_image_get #define im_histlin vips_image_history_printf #define im_updatehist vips_image_history_args #define im_history_get vips_image_get_history #define im_save_string_get vips_value_get_save_string #define im_save_string_set vips_value_set_save_string #define im_save_string_setf vips_value_set_save_stringf #define im_ref_string_set vips_value_set_ref_string #define im_ref_string_get(V) vips_value_get_ref_string(V, NULL) VIPS_DEPRECATED_FOR(vips_value_get_ref_string) size_t im_ref_string_get_length(const GValue *value); #define im_blob_get vips_value_get_blob #define im_blob_set vips_value_set_blob #define im_meta_set(A, B, C) (vips_image_set(A, B, C), 0) #define im_meta_remove vips_image_remove #define im_meta_get vips_image_get #define im_meta_get_typeof vips_image_get_typeof #define im_meta_set_int(A, B, C) (vips_image_set_int(A, B, C), 0) #define im_meta_get_int vips_image_get_int #define im_meta_set_double(A, B, C) (vips_image_set_double(A, B, C), 0) #define im_meta_get_double vips_image_get_double #define im_meta_set_area(A, B, C, D) (vips_image_set_area(A, B, C, D), 0) #define im_meta_get_area vips_image_get_area #define im_meta_set_string(A, B, C) (vips_image_set_string(A, B, C), 0) #define im_meta_get_string vips_image_get_string #define im_meta_set_blob(A, B, C, D, E) \ (vips_image_set_blob(A, B, C, D, E), 0) #define im_meta_get_blob vips_image_get_blob #define im_semaphore_t VipsSemaphore #define im_semaphore_up vips_semaphore_up #define im_semaphore_down vips_semaphore_down #define im_semaphore_upn vips_semaphore_upn #define im_semaphore_downn vips_semaphore_downn #define im_semaphore_destroy vips_semaphore_destroy #define im_semaphore_init vips_semaphore_init #define im__open_image_read vips__open_image_read #define im_image_open_input vips_image_open_input #define im_image_open_output vips_image_open_output #define im__has_extension_block vips__has_extension_block #define im__read_extension_block vips__read_extension_block #define im__write_extension_block vips__write_extension_block #define im__writehist vips__writehist #define im__read_header_bytes vips__read_header_bytes #define im__write_header_bytes vips__write_header_bytes #define VSListMap2Fn VipsSListMap2Fn #define VSListMap4Fn VipsSListMap4Fn #define VSListFold2Fn VipsSListFold2Fn #define im_slist_equal vips_slist_equal #define im_slist_map2 vips_slist_map2 #define im_slist_map2_rev vips_slist_map2_rev #define im_slist_map4 vips_slist_map4 #define im_slist_fold2 vips_slist_fold2 #define im_slist_filter vips_slist_filter #define im_slist_free_all vips_slist_free_all #define im_map_equal vips_map_equal #define im_hash_table_map vips_hash_table_map #define im_strncpy vips_strncpy #define im_strrstr vips_strrstr #define im_ispostfix vips_ispostfix #define im_isprefix vips_isprefix #define im_break_token vips_break_token #define im_vsnprintf vips_vsnprintf #define im_snprintf vips_snprintf #define im_file_length vips_file_length #define im__write vips__write #define im__file_open_read vips__file_open_read #define im__file_open_write vips__file_open_write #define im__file_read vips__file_read #define im__file_read_name vips__file_read_name #define im__file_write vips__file_write #define im__get_bytes vips__get_bytes #define im__gvalue_ref_string_new vips__gvalue_ref_string_new #define im__gslist_gvalue_free vips__gslist_gvalue_free #define im__gslist_gvalue_copy vips__gslist_gvalue_copy #define im__gslist_gvalue_merge vips__gslist_gvalue_merge #define im__gslist_gvalue_get vips__gslist_gvalue_get #define im__seek vips__seek #define im__ftruncate vips__ftruncate #define im_existsf vips_existsf #define im_popenf vips_popenf #define im_ispoweroftwo vips_ispoweroftwo #define im_amiMSBfirst vips_amiMSBfirst #define im__temp_name vips__temp_name #define IM_VERSION_STRING VIPS_VERSION_STRING #define IM_MAJOR_VERSION VIPS_MAJOR_VERSION #define IM_MINOR_VERSION VIPS_MINOR_VERSION #define IM_MICRO_VERSION VIPS_MICRO_VERSION #if defined(G_PLATFORM_WIN32) || defined(G_WITH_CYGWIN) #define VIPS_EXEEXT ".exe" #else /* !defined(G_PLATFORM_WIN32) && !defined(G_WITH_CYGWIN) */ #define VIPS_EXEEXT "" #endif /* defined(G_PLATFORM_WIN32) || defined(G_WITH_CYGWIN) */ #define IM_EXEEXT VIPS_EXEEXT #define IM_SIZEOF_HEADER VIPS_SIZEOF_HEADER #define im_concurrency_set vips_concurrency_set #define im_concurrency_get vips_concurrency_get VIPS_DEPRECATED_FOR(vips_add) int im_add(VipsImage *in1, VipsImage *in2, VipsImage *out); VIPS_DEPRECATED_FOR(vips_subtract) int im_subtract(VipsImage *in1, VipsImage *in2, VipsImage *out); VIPS_DEPRECATED_FOR(vips_multiply) int im_multiply(VipsImage *in1, VipsImage *in2, VipsImage *out); VIPS_DEPRECATED_FOR(vips_divide) int im_divide(VipsImage *in1, VipsImage *in2, VipsImage *out); VIPS_DEPRECATED_FOR(vips_min) int im_min(VipsImage *in, double *out); VIPS_DEPRECATED_FOR(vips_min) int im_minpos(VipsImage *in, int *xpos, int *ypos, double *out); VIPS_DEPRECATED_FOR(vips_max) int im_max(VipsImage *in, double *out); VIPS_DEPRECATED_FOR(vips_max) int im_maxpos(VipsImage *in, int *xpos, int *ypos, double *out); VIPS_DEPRECATED_FOR(vips_avg) int im_avg(VipsImage *in, double *out); VIPS_DEPRECATED_FOR(vips_deviate) int im_deviate(VipsImage *in, double *out); VIPS_DEPRECATED_FOR(vips_invert) int im_invert(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_linear1) int im_lintra(double a, VipsImage *in, double b, VipsImage *out); VIPS_DEPRECATED_FOR(vips_linear) int im_lintra_vec(int n, double *a, VipsImage *in, double *b, VipsImage *out); VIPS_DEPRECATED_FOR(vips_abs) int im_abs(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_sign) int im_sign(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_stats) DOUBLEMASK *im_stats(VipsImage *in); VIPS_DEPRECATED_FOR(vips_measure) DOUBLEMASK *im_measure_area(VipsImage *im, int left, int top, int width, int height, int h, int v, int *sel, int nsel, const char *name); VIPS_DEPRECATED_FOR(vips_sin) int im_sintra(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_cos) int im_costra(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_tan) int im_tantra(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_asin) int im_asintra(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_acos) int im_acostra(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_atan) int im_atantra(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_log) int im_logtra(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_log10) int im_log10tra(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_exp) int im_exptra(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_exp10) int im_exp10tra(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_floor) int im_floor(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_rint) int im_rint(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_ceil) int im_ceil(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_equal) int im_equal(VipsImage *in1, VipsImage *in2, VipsImage *out); VIPS_DEPRECATED_FOR(vips_notequal) int im_notequal(VipsImage *in1, VipsImage *in2, VipsImage *out); VIPS_DEPRECATED_FOR(vips_less) int im_less(VipsImage *in1, VipsImage *in2, VipsImage *out); VIPS_DEPRECATED_FOR(vips_lesseq) int im_lesseq(VipsImage *in1, VipsImage *in2, VipsImage *out); VIPS_DEPRECATED_FOR(vips_more) int im_more(VipsImage *in1, VipsImage *in2, VipsImage *out); VIPS_DEPRECATED_FOR(vips_moreeq) int im_moreeq(VipsImage *in1, VipsImage *in2, VipsImage *out); VIPS_DEPRECATED_FOR(vips_andimage) int im_andimage(VipsImage *in1, VipsImage *in2, VipsImage *out); VIPS_DEPRECATED_FOR(vips_orimage) int im_orimage(VipsImage *in1, VipsImage *in2, VipsImage *out); VIPS_DEPRECATED_FOR(vips_eorimage) int im_eorimage(VipsImage *in1, VipsImage *in2, VipsImage *out); VIPS_DEPRECATED_FOR(vips_andimage_const) int im_andimage_vec(VipsImage *in, VipsImage *out, int n, double *c); VIPS_DEPRECATED_FOR(vips_orimage_const) int im_orimage_vec(VipsImage *in, VipsImage *out, int n, double *c); VIPS_DEPRECATED_FOR(vips_eorimage_const) int im_eorimage_vec(VipsImage *in, VipsImage *out, int n, double *c); VIPS_DEPRECATED_FOR(vips_andimage_const1) int im_andimageconst(VipsImage *in, VipsImage *out, double c); VIPS_DEPRECATED_FOR(vips_orimage_const1) int im_orimageconst(VipsImage *in, VipsImage *out, double c); VIPS_DEPRECATED_FOR(vips_eorimage_const1) int im_eorimageconst(VipsImage *in, VipsImage *out, double c); VIPS_DEPRECATED_FOR(vips_lshift_const) int im_shiftleft_vec(VipsImage *in, VipsImage *out, int n, double *c); VIPS_DEPRECATED_FOR(vips_lshift) int im_shiftleft(VipsImage *in, VipsImage *out, int n); VIPS_DEPRECATED_FOR(vips_rshift_const) int im_shiftright_vec(VipsImage *in, VipsImage *out, int n, double *c); VIPS_DEPRECATED_FOR(vips_rshift) int im_shiftright(VipsImage *in, VipsImage *out, int n); VIPS_DEPRECATED_FOR(vips_remainder) int im_remainder(VipsImage *in1, VipsImage *in2, VipsImage *out); VIPS_DEPRECATED_FOR(vips_remainder_const) int im_remainder_vec(VipsImage *in, VipsImage *out, int n, double *c); VIPS_DEPRECATED_FOR(vips_remainder_const1) int im_remainderconst(VipsImage *in, VipsImage *out, double c); VIPS_DEPRECATED_FOR(vips_pow) int im_powtra(VipsImage *in, VipsImage *out, double e); VIPS_DEPRECATED_FOR(vips_pow_const) int im_powtra_vec(VipsImage *in, VipsImage *out, int n, double *e); VIPS_DEPRECATED_FOR(vips_exp) int im_expntra(VipsImage *in, VipsImage *out, double e); VIPS_DEPRECATED_FOR(vips_exp_const) int im_expntra_vec(VipsImage *in, VipsImage *out, int n, double *e); VIPS_DEPRECATED_FOR(vips_equal_const) int im_equal_vec(VipsImage *in, VipsImage *out, int n, double *c); VIPS_DEPRECATED_FOR(vips_notequal_const) int im_notequal_vec(VipsImage *in, VipsImage *out, int n, double *c); VIPS_DEPRECATED_FOR(vips_less_const) int im_less_vec(VipsImage *in, VipsImage *out, int n, double *c); VIPS_DEPRECATED_FOR(vips_lesseq_const) int im_lesseq_vec(VipsImage *in, VipsImage *out, int n, double *c); VIPS_DEPRECATED_FOR(vips_more_const) int im_more_vec(VipsImage *in, VipsImage *out, int n, double *c); VIPS_DEPRECATED_FOR(vips_moreeq_const) int im_moreeq_vec(VipsImage *in, VipsImage *out, int n, double *c); VIPS_DEPRECATED_FOR(vips_equal_const1) int im_equalconst(VipsImage *in, VipsImage *out, double c); VIPS_DEPRECATED_FOR(vips_notequal_const1) int im_notequalconst(VipsImage *in, VipsImage *out, double c); VIPS_DEPRECATED_FOR(vips_less_const1) int im_lessconst(VipsImage *in, VipsImage *out, double c); VIPS_DEPRECATED_FOR(vips_lesseq_const1) int im_lesseqconst(VipsImage *in, VipsImage *out, double c); VIPS_DEPRECATED_FOR(vips_more_const1) int im_moreconst(VipsImage *in, VipsImage *out, double c); VIPS_DEPRECATED_FOR(vips_moreeq_const1) int im_moreeqconst(VipsImage *in, VipsImage *out, double c); VIPS_DEPRECATED_FOR(vips_max) int im_maxpos_vec(VipsImage *im, int *xpos, int *ypos, double *maxima, int n); VIPS_DEPRECATED_FOR(vips_min) int im_minpos_vec(VipsImage *im, int *xpos, int *ypos, double *minima, int n); VIPS_DEPRECATED int im_maxpos_avg(VipsImage *im, double *xpos, double *ypos, double *out); VIPS_DEPRECATED int im_linreg(VipsImage **ins, VipsImage *out, double *xs); VIPS_DEPRECATED_FOR(vips_cross_phase) int im_cross_phase(VipsImage *a, VipsImage *b, VipsImage *out); VIPS_DEPRECATED int im_point(VipsImage *im, VipsInterpolate *interpolate, double x, double y, int band, double *out); VIPS_DEPRECATED int im_point_bilinear(VipsImage *im, double x, double y, int band, double *out); VIPS_DEPRECATED_FOR(vips_image_write) int im_copy(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_copy) int im_copy_set(VipsImage *in, VipsImage *out, VipsInterpretation interpretation, float xres, float yres, int xoffset, int yoffset); VIPS_DEPRECATED int im_copy_set_meta(VipsImage *in, VipsImage *out, const char *field, GValue *value); VIPS_DEPRECATED_FOR(vips_copy) int im_copy_morph(VipsImage *in, VipsImage *out, int bands, VipsBandFormat format, VipsCoding coding); VIPS_DEPRECATED_FOR(vips_byteswap) int im_copy_swap(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_copy_file) int im_copy_file(VipsImage *in, VipsImage *out); VIPS_DEPRECATED int im_copy_native(VipsImage *in, VipsImage *out, gboolean is_msb_first); VIPS_DEPRECATED_FOR(vips_embed) int im_embed(VipsImage *in, VipsImage *out, int type, int x, int y, int width, int height); VIPS_DEPRECATED_FOR(vips_flip) int im_fliphor(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_flip) int im_flipver(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_insert) int im_insert(VipsImage *main, VipsImage *sub, VipsImage *out, int x, int y); VIPS_DEPRECATED_FOR(vips_insert) int im_insert_noexpand(VipsImage *main, VipsImage *sub, VipsImage *out, int x, int y); VIPS_DEPRECATED_FOR(vips_join) int im_lrjoin(VipsImage *left, VipsImage *right, VipsImage *out); VIPS_DEPRECATED_FOR(vips_join) int im_tbjoin(VipsImage *top, VipsImage *bottom, VipsImage *out); VIPS_DEPRECATED_FOR(vips_extract_area) int im_extract_area(VipsImage *in, VipsImage *out, int left, int top, int width, int height); VIPS_DEPRECATED_FOR(vips_extract_band) int im_extract_band(VipsImage *in, VipsImage *out, int band); VIPS_DEPRECATED_FOR(vips_extract_band) int im_extract_bands(VipsImage *in, VipsImage *out, int band, int nbands); VIPS_DEPRECATED int im_extract_areabands(VipsImage *in, VipsImage *out, int left, int top, int width, int height, int band, int nbands); VIPS_DEPRECATED_FOR(vips_replicate) int im_replicate(VipsImage *in, VipsImage *out, int across, int down); VIPS_DEPRECATED_FOR(vips_wrap) int im_wrap(VipsImage *in, VipsImage *out, int x, int y); VIPS_DEPRECATED_FOR(vips_wrap) int im_rotquad(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_cast) int im_clip2fmt(VipsImage *in, VipsImage *out, VipsBandFormat fmt); VIPS_DEPRECATED_FOR(vips_bandjoin2) int im_bandjoin(VipsImage *in1, VipsImage *in2, VipsImage *out); VIPS_DEPRECATED_FOR(vips_bandjoin) int im_gbandjoin(VipsImage **in, VipsImage *out, int n); VIPS_DEPRECATED_FOR(vips_bandrank) int im_rank_image(VipsImage **in, VipsImage *out, int n, int index); VIPS_DEPRECATED_FOR(vips_bandrank) int im_maxvalue(VipsImage **in, VipsImage *out, int n); VIPS_DEPRECATED_FOR(vips_grid) int im_grid(VipsImage *in, VipsImage *out, int tile_height, int across, int down); VIPS_DEPRECATED_FOR(vips_scale) int im_scale(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_scale) int im_scaleps(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_msb) int im_msb(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_msb) int im_msb_band(VipsImage *in, VipsImage *out, int band); VIPS_DEPRECATED_FOR(vips_zoom) int im_zoom(VipsImage *in, VipsImage *out, int xfac, int yfac); VIPS_DEPRECATED_FOR(vips_subsample) int im_subsample(VipsImage *in, VipsImage *out, int xshrink, int yshrink); VIPS_DEPRECATED_FOR(vips_gaussnoise) int im_gaussnoise(VipsImage *out, int x, int y, double mean, double sigma); VIPS_DEPRECATED_FOR(vips_text) int im_text(VipsImage *out, const char *text, const char *font, int width, int alignment, int dpi); VIPS_DEPRECATED_FOR(vips_black) int im_black(VipsImage *out, int x, int y, int bands); VIPS_DEPRECATED_FOR(vips_xyz) int im_make_xy(VipsImage *out, const int xsize, const int ysize); VIPS_DEPRECATED_FOR(vips_zone) int im_zone(VipsImage *out, int size); VIPS_DEPRECATED_FOR(vips_zone) int im_fzone(VipsImage *out, int size); VIPS_DEPRECATED_FOR(vips_eye) int im_feye(VipsImage *out, const int xsize, const int ysize, const double factor); VIPS_DEPRECATED_FOR(vips_eye) int im_eye(VipsImage *out, const int xsize, const int ysize, const double factor); VIPS_DEPRECATED_FOR(vips_grey) int im_grey(VipsImage *out, const int xsize, const int ysize); VIPS_DEPRECATED_FOR(vips_grey) int im_fgrey(VipsImage *out, const int xsize, const int ysize); VIPS_DEPRECATED_FOR(vips_sines) int im_sines(VipsImage *out, int xsize, int ysize, double horfreq, double verfreq); VIPS_DEPRECATED_FOR(vips_buildlut) int im_buildlut(DOUBLEMASK *input, VipsImage *output); VIPS_DEPRECATED_FOR(vips_invertlut) int im_invertlut(DOUBLEMASK *input, VipsImage *output, int lut_size); VIPS_DEPRECATED_FOR(vips_identity) int im_identity(VipsImage *lut, int bands); VIPS_DEPRECATED_FOR(vips_identity) int im_identity_ushort(VipsImage *lut, int bands, int sz); VIPS_DEPRECATED_FOR(vips_tonelut) int im_tone_build_range(VipsImage *out, int in_max, int out_max, double Lb, double Lw, double Ps, double Pm, double Ph, double S, double M, double H); VIPS_DEPRECATED_FOR(vips_tonelut) int im_tone_build(VipsImage *out, double Lb, double Lw, double Ps, double Pm, double Ph, double S, double M, double H); VIPS_DEPRECATED_FOR(vips_system) int im_system(VipsImage *im, const char *cmd, char **out); VIPS_DEPRECATED_FOR(vips_system) VipsImage *im_system_image(VipsImage *im, const char *in_format, const char *out_format, const char *cmd_format, char **log); VIPS_DEPRECATED_FOR(vips_complex) int im_c2amph(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_complex) int im_c2rect(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_imag) int im_c2imag(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_real) int im_c2real(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_complexform) int im_ri2c(VipsImage *in1, VipsImage *in2, VipsImage *out); VIPS_DEPRECATED_FOR(vips_rot90) int im_rot90(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_rot180) int im_rot180(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_rot270) int im_rot270(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_ifthenelse) int im_ifthenelse(VipsImage *c, VipsImage *a, VipsImage *b, VipsImage *out); VIPS_DEPRECATED_FOR(vips_ifthenelse) int im_blend(VipsImage *c, VipsImage *a, VipsImage *b, VipsImage *out); VIPS_DEPRECATED DOUBLEMASK *im_vips2mask(VipsImage *in, const char *filename); VIPS_DEPRECATED INTMASK *im_vips2imask(IMAGE *in, const char *filename); VIPS_DEPRECATED int im_mask2vips(DOUBLEMASK *in, VipsImage *out); VIPS_DEPRECATED int im_imask2vips(INTMASK *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_bandmean) int im_bandmean(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_recomb) int im_recomb(VipsImage *in, VipsImage *out, DOUBLEMASK *recomb); VIPS_DEPRECATED int im_argb2rgba(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_falsecolour) int im_falsecolour(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_gamma) int im_gammacorrect(VipsImage *in, VipsImage *out, double exponent); VIPS_DEPRECATED_FOR(vips_tilecache) int im_tile_cache_random(IMAGE *in, IMAGE *out, int tile_width, int tile_height, int max_tiles); VIPS_DEPRECATED_FOR(vips_shrink) int im_shrink(VipsImage *in, VipsImage *out, double xshrink, double yshrink); VIPS_DEPRECATED_FOR(vips_affine) int im_affinei(VipsImage *in, VipsImage *out, VipsInterpolate *interpolate, double a, double b, double c, double d, double dx, double dy, int ox, int oy, int ow, int oh); VIPS_DEPRECATED_FOR(vips_affine) int im_affinei_all(VipsImage *in, VipsImage *out, VipsInterpolate *interpolate, double a, double b, double c, double d, double dx, double dy); VIPS_DEPRECATED_FOR(vips_shrink) int im_rightshift_size(VipsImage *in, VipsImage *out, int xshift, int yshift, int band_fmt); VIPS_DEPRECATED_FOR(vips_Lab2XYZ) int im_Lab2XYZ_temp(IMAGE *in, IMAGE *out, double X0, double Y0, double Z0); VIPS_DEPRECATED_FOR(vips_Lab2XYZ) int im_Lab2XYZ(IMAGE *in, IMAGE *out); VIPS_DEPRECATED_FOR(vips_XYZ2Lab) int im_XYZ2Lab(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_XYZ2Lab) int im_XYZ2Lab_temp(VipsImage *in, VipsImage *out, double X0, double Y0, double Z0); VIPS_DEPRECATED_FOR(vips_Lab2LCh) int im_Lab2LCh(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_LCh2Lab) int im_LCh2Lab(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_LCh2CMC) int im_LCh2UCS(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_CMC2LCh) int im_UCS2LCh(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_XYZ2Yxy) int im_XYZ2Yxy(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_Yxy2XYZ) int im_Yxy2XYZ(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_float2rad) int im_float2rad(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_rad2float) int im_rad2float(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_Lab2LabQ) int im_Lab2LabQ(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_LabQ2Lab) int im_LabQ2Lab(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_Lab2LabS) int im_Lab2LabS(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_LabS2Lab) int im_LabS2Lab(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_LabQ2LabS) int im_LabQ2LabS(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_LabS2LabQ) int im_LabS2LabQ(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_LabQ2sRGB) int im_LabQ2sRGB(VipsImage *in, VipsImage *out); VIPS_DEPRECATED int im_XYZ2sRGB(IMAGE *in, IMAGE *out); VIPS_DEPRECATED int im_sRGB2XYZ(IMAGE *in, IMAGE *out); struct im_col_display; #define im_col_displays(S) (NULL) #define im_LabQ2disp_build_table(A, B) (NULL) #define im_LabQ2disp_table(A, B, C) (im_LabQ2disp(A, B, C)) VIPS_DEPRECATED int im_Lab2disp(IMAGE *in, IMAGE *out, struct im_col_display *disp); VIPS_DEPRECATED int im_disp2Lab(IMAGE *in, IMAGE *out, struct im_col_display *disp); VIPS_DEPRECATED int im_dE_fromdisp(IMAGE *, IMAGE *, IMAGE *, struct im_col_display *); VIPS_DEPRECATED int im_dECMC_fromdisp(IMAGE *, IMAGE *, IMAGE *, struct im_col_display *); #define im_disp2XYZ(A, B, C) (im_sRGB2XYZ(A, B)) #define im_XYZ2disp(A, B, C) (im_XYZ2sRGB(A, B)) #define im_LabQ2disp(A, B, C) (im_LabQ2sRGB(A, B)) VIPS_DEPRECATED_FOR(vips_icc_transform) int im_icc_transform(VipsImage *in, VipsImage *out, const char *input_profile_filename, const char *output_profile_filename, VipsIntent intent); #define im_icc_present vips_icc_present VIPS_DEPRECATED_FOR(vips_icc_import) int im_icc_import(VipsImage *in, VipsImage *out, const char *input_profile_filename, VipsIntent intent); VIPS_DEPRECATED_FOR(vips_icc_import) int im_icc_import_embedded(VipsImage *in, VipsImage *out, VipsIntent intent); VIPS_DEPRECATED_FOR(vips_icc_export) int im_icc_export_depth(VipsImage *in, VipsImage *out, int depth, const char *output_profile_filename, VipsIntent intent); VIPS_DEPRECATED_FOR(vips_icc_ac2rc) int im_icc_ac2rc(VipsImage *in, VipsImage *out, const char *profile_filename); VIPS_DEPRECATED int im_LabQ2XYZ(VipsImage *in, VipsImage *out); VIPS_DEPRECATED int im_UCS2XYZ(VipsImage *in, VipsImage *out); VIPS_DEPRECATED int im_UCS2Lab(VipsImage *in, VipsImage *out); VIPS_DEPRECATED int im_Lab2UCS(VipsImage *in, VipsImage *out); VIPS_DEPRECATED int im_XYZ2UCS(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_dE76) int im_dE_fromLab(VipsImage *in1, VipsImage *in2, VipsImage *out); VIPS_DEPRECATED_FOR(vips_dECMC) int im_dECMC_fromLab(VipsImage *in1, VipsImage *in2, VipsImage *out); VIPS_DEPRECATED int im_dE_fromXYZ(VipsImage *in1, VipsImage *in2, VipsImage *out); VIPS_DEPRECATED_FOR(vips_dE00) int im_dE00_fromLab(VipsImage *in1, VipsImage *in2, VipsImage *out); VIPS_DEPRECATED int im_lab_morph(VipsImage *in, VipsImage *out, DOUBLEMASK *mask, double L_offset, double L_scale, double a_scale, double b_scale); #define im_col_dE00 vips_col_dE00 VIPS_DEPRECATED_FOR(vips_quadratic) int im_quadratic(IMAGE *in, IMAGE *out, IMAGE *coeff); VIPS_DEPRECATED_FOR(vips_maplut) int im_maplut(VipsImage *in, VipsImage *out, VipsImage *lut); VIPS_DEPRECATED int im_hist(VipsImage *in, VipsImage *out, int bandno); VIPS_DEPRECATED_FOR(vips_hist_find) int im_histgr(VipsImage *in, VipsImage *out, int bandno); VIPS_DEPRECATED_FOR(vips_hist_cum) int im_histcum(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_hist_norm) int im_histnorm(VipsImage *in, VipsImage *out); VIPS_DEPRECATED int im_histeq(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_hist_equal) int im_heq(VipsImage *in, VipsImage *out, int bandno); VIPS_DEPRECATED_FOR(vips_hist_find_ndim) int im_histnD(VipsImage *in, VipsImage *out, int bins); VIPS_DEPRECATED_FOR(vips_hist_find_indexed) int im_hist_indexed(VipsImage *index, VipsImage *value, VipsImage *out); VIPS_DEPRECATED_FOR(vips_hist_plot) int im_histplot(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_project) int im_project(VipsImage *in, VipsImage *hout, VipsImage *vout); VIPS_DEPRECATED_FOR(vips_profile) int im_profile(IMAGE *in, IMAGE *out, int dir); VIPS_DEPRECATED int im_hsp(VipsImage *in, VipsImage *ref, VipsImage *out); VIPS_DEPRECATED int im_histspec(VipsImage *in, VipsImage *ref, VipsImage *out); VIPS_DEPRECATED_FOR(vips_hist_local) int im_lhisteq(VipsImage *in, VipsImage *out, int xwin, int ywin); VIPS_DEPRECATED_FOR(vips_stdif) int im_stdif(VipsImage *in, VipsImage *out, double a, double m0, double b, double s0, int xwin, int ywin); VIPS_DEPRECATED_FOR(vips_percent) int im_mpercent(VipsImage *in, double percent, int *out); VIPS_DEPRECATED int im_mpercent_hist(VipsImage *hist, double percent, int *out); VIPS_DEPRECATED_FOR(vips_hist_ismonotonic) int im_ismonotonic(VipsImage *lut, int *out); VIPS_DEPRECATED int im_tone_analyse(VipsImage *in, VipsImage *out, double Ps, double Pm, double Ph, double S, double M, double H); VIPS_DEPRECATED int im_tone_map(VipsImage *in, VipsImage *out, VipsImage *lut); /* Not really correct, but who uses these. */ #define im_lhisteq_raw im_lhisteq #define im_stdif_raw im_stdif /* ruby-vips uses this */ #define vips_class_map_concrete_all vips_class_map_all VIPS_DEPRECATED_FOR(vips_morph) int im_dilate(VipsImage *in, VipsImage *out, INTMASK *mask); VIPS_DEPRECATED_FOR(vips_morph) int im_erode(VipsImage *in, VipsImage *out, INTMASK *mask); VIPS_DEPRECATED_FOR(vips_conva) int im_aconv(VipsImage *in, VipsImage *out, DOUBLEMASK *mask, int n_layers, int cluster); VIPS_DEPRECATED_FOR(vips_convi) int im_conv(VipsImage *in, VipsImage *out, INTMASK *mask); VIPS_DEPRECATED_FOR(vips_convf) int im_conv_f(VipsImage *in, VipsImage *out, DOUBLEMASK *mask); VIPS_DEPRECATED_FOR(vips_convasep) int im_aconvsep(VipsImage *in, VipsImage *out, DOUBLEMASK *mask, int n_layers); VIPS_DEPRECATED_FOR(vips_convsep) int im_convsep(VipsImage *in, VipsImage *out, INTMASK *mask); VIPS_DEPRECATED_FOR(vips_convsep) int im_convsep_f(VipsImage *in, VipsImage *out, DOUBLEMASK *mask); VIPS_DEPRECATED_FOR(vips_compass) int im_compass(VipsImage *in, VipsImage *out, INTMASK *mask); VIPS_DEPRECATED_FOR(vips_compass) int im_gradient(VipsImage *in, VipsImage *out, INTMASK *mask); VIPS_DEPRECATED_FOR(vips_compass) int im_lindetect(VipsImage *in, VipsImage *out, INTMASK *mask); VIPS_DEPRECATED int im_addgnoise(VipsImage *in, VipsImage *out, double sigma); VIPS_DEPRECATED int im_contrast_surface_raw(IMAGE *in, IMAGE *out, int half_win_size, int spacing); VIPS_DEPRECATED int im_contrast_surface(VipsImage *in, VipsImage *out, int half_win_size, int spacing); VIPS_DEPRECATED int im_grad_x(VipsImage *in, VipsImage *out); VIPS_DEPRECATED int im_grad_y(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_fastcor) int im_fastcor(VipsImage *in, VipsImage *ref, VipsImage *out); VIPS_DEPRECATED_FOR(vips_spcor) int im_spcor(VipsImage *in, VipsImage *ref, VipsImage *out); VIPS_DEPRECATED int im_gradcor(VipsImage *in, VipsImage *ref, VipsImage *out); VIPS_DEPRECATED_FOR(vips_sharpen) int im_sharpen(VipsImage *in, VipsImage *out, int mask_size, double x1, double y2, double y3, double m1, double m2); typedef enum { IM_MASK_IDEAL_HIGHPASS = 0, IM_MASK_IDEAL_LOWPASS = 1, IM_MASK_BUTTERWORTH_HIGHPASS = 2, IM_MASK_BUTTERWORTH_LOWPASS = 3, IM_MASK_GAUSS_HIGHPASS = 4, IM_MASK_GAUSS_LOWPASS = 5, IM_MASK_IDEAL_RINGPASS = 6, IM_MASK_IDEAL_RINGREJECT = 7, IM_MASK_BUTTERWORTH_RINGPASS = 8, IM_MASK_BUTTERWORTH_RINGREJECT = 9, IM_MASK_GAUSS_RINGPASS = 10, IM_MASK_GAUSS_RINGREJECT = 11, IM_MASK_IDEAL_BANDPASS = 12, IM_MASK_IDEAL_BANDREJECT = 13, IM_MASK_BUTTERWORTH_BANDPASS = 14, IM_MASK_BUTTERWORTH_BANDREJECT = 15, IM_MASK_GAUSS_BANDPASS = 16, IM_MASK_GAUSS_BANDREJECT = 17, IM_MASK_FRACTAL_FLT = 18 } ImMaskType; /* We had them in the VIPS namespace for a while before deprecating them. */ #define VIPS_MASK_IDEAL_HIGHPASS IM_MASK_IDEAL_HIGHPASS #define VIPS_MASK_IDEAL_LOWPASS IM_MASK_IDEAL_LOWPASS #define VIPS_MASK_BUTTERWORTH_HIGHPASS IM_MASK_BUTTERWORTH_HIGHPASS #define VIPS_MASK_BUTTERWORTH_LOWPASS IM_MASK_BUTTERWORTH_LOWPASS #define VIPS_MASK_GAUSS_HIGHPASS IM_MASK_GAUSS_HIGHPASS #define VIPS_MASK_GAUSS_LOWPASS IM_MASK_GAUSS_LOWPASS #define VIPS_MASK_IDEAL_RINGPASS IM_MASK_IDEAL_RINGPASS #define VIPS_MASK_IDEAL_RINGREJECT IM_MASK_IDEAL_RINGREJECT #define VIPS_MASK_BUTTERWORTH_RINGPASS IM_MASK_BUTTERWORTH_RINGPASS #define VIPS_MASK_BUTTERWORTH_RINGREJECT IM_MASK_BUTTERWORTH_RINGREJECT #define VIPS_MASK_GAUSS_RINGPASS IM_MASK_GAUSS_RINGPASS #define VIPS_MASK_GAUSS_RINGREJECT IM_MASK_GAUSS_RINGREJECT #define VIPS_MASK_IDEAL_BANDPASS IM_MASK_IDEAL_BANDPASS #define VIPS_MASK_IDEAL_BANDREJECT IM_MASK_IDEAL_BANDREJECT #define VIPS_MASK_BUTTERWORTH_BANDPASS IM_MASK_BUTTERWORTH_BANDPASS #define VIPS_MASK_BUTTERWORTH_BANDREJECT IM_MASK_BUTTERWORTH_BANDREJECT #define VIPS_MASK_GAUSS_BANDPASS IM_MASK_GAUSS_BANDPASS #define VIPS_MASK_GAUSS_BANDREJECT IM_MASK_GAUSS_BANDREJECT #define VIPS_MASK_FRACTAL_FLT IM_MASK_FRACTAL_FLT #define VIPS_MASK IM_MASK VIPS_DEPRECATED int im_flt_image_freq(VipsImage *in, VipsImage *out, ImMaskType flag, ...); VIPS_DEPRECATED int im_create_fmask(VipsImage *out, int xsize, int ysize, ImMaskType flag, ...); VIPS_DEPRECATED_FOR(vips_fwfft) int im_fwfft(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_invfft) int im_invfft(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_invfft) int im_invfftr(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_freqmult) int im_freqflt(VipsImage *in, VipsImage *mask, VipsImage *out); VIPS_DEPRECATED_FOR(vips_spectrum) int im_disp_ps(VipsImage *in, VipsImage *out); VIPS_DEPRECATED_FOR(vips_fractsurf) int im_fractsurf(VipsImage *out, int size, double frd); VIPS_DEPRECATED_FOR(vips_phasecor) int im_phasecor_fft(VipsImage *in1, VipsImage *in2, VipsImage *out); VIPS_DEPRECATED_FOR(vips_countlines) int im_cntlines(VipsImage *im, double *nolines, int flag); VIPS_DEPRECATED_FOR(vips_labelregions) int im_label_regions(VipsImage *test, VipsImage *mask, int *segments); VIPS_DEPRECATED_FOR(vips_rank) int im_rank(VipsImage *in, VipsImage *out, int width, int height, int index); VIPS_DEPRECATED int im_zerox(VipsImage *in, VipsImage *out, int sign); VIPS_DEPRECATED int im_benchmarkn(VipsImage *in, VipsImage *out, int n); VIPS_DEPRECATED int im_benchmark2(VipsImage *in, double *out); VIPS_DEPRECATED_FOR(vips_draw_circle) int im_draw_circle(VipsImage *image, int x, int y, int radius, gboolean fill, VipsPel *ink); VIPS_DEPRECATED_FOR(vips_draw_mask) int im_draw_mask(VipsImage *image, VipsImage *mask_im, int x, int y, VipsPel *ink); VIPS_DEPRECATED_FOR(vips_draw_image) int im_draw_image(VipsImage *image, VipsImage *sub, int x, int y); VIPS_DEPRECATED_FOR(vips_draw_rect) int im_draw_rect(VipsImage *image, int left, int top, int width, int height, int fill, VipsPel *ink); typedef int (*VipsPlotFn)(VipsImage *image, int x, int y, void *a, void *b, void *c); VIPS_DEPRECATED_FOR(vips_draw_line) int im_draw_line_user(VipsImage *image, int x1, int y1, int x2, int y2, VipsPlotFn plot, void *a, void *b, void *c); VIPS_DEPRECATED_FOR(vips_draw_line) int im_draw_line(VipsImage *image, int x1, int y1, int x2, int y2, VipsPel *ink); VIPS_DEPRECATED int im_lineset(VipsImage *in, VipsImage *out, VipsImage *mask, VipsImage *ink, int n, int *x1v, int *y1v, int *x2v, int *y2v); VIPS_DEPRECATED int im_insertset(VipsImage *main, VipsImage *sub, VipsImage *out, int n, int *x, int *y); VIPS_DEPRECATED_FOR(vips_draw_flood) int im_draw_flood(VipsImage *image, int x, int y, VipsPel *ink, VipsRect *dout); VIPS_DEPRECATED_FOR(vips_draw_flood) int im_draw_flood_blob(VipsImage *image, int x, int y, VipsPel *ink, VipsRect *dout); VIPS_DEPRECATED_FOR(vips_draw_flood1) int im_draw_flood_other(VipsImage *image, VipsImage *test, int x, int y, int serial, VipsRect *dout); VIPS_DEPRECATED_FOR(vips_draw_point) int im_draw_point(VipsImage *image, int x, int y, VipsPel *ink); VIPS_DEPRECATED_FOR(vips_getpoint) int im_read_point(VipsImage *image, int x, int y, VipsPel *ink); VIPS_DEPRECATED_FOR(vips_draw_smudge) int im_draw_smudge(VipsImage *image, int left, int top, int width, int height); VIPS_DEPRECATED void im_filename_split(const char *path, char *name, char *mode); VIPS_DEPRECATED_FOR(g_path_get_basename) const char *im_skip_dir(const char *filename); VIPS_DEPRECATED void im_filename_suffix(const char *path, char *suffix); VIPS_DEPRECATED int im_filename_suffix_match(const char *path, const char *suffixes[]); VIPS_DEPRECATED char *im_getnextoption(char **in); VIPS_DEPRECATED char *im_getsuboption(const char *buf); VIPS_DEPRECATED_FOR(vips_match) int im_match_linear(VipsImage *ref, VipsImage *sec, VipsImage *out, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2); VIPS_DEPRECATED_FOR(vips_match) int im_match_linear_search(VipsImage *ref, VipsImage *sec, VipsImage *out, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, int hwindowsize, int hsearchsize); VIPS_DEPRECATED_FOR(vips_globalbalance) int im_global_balance(VipsImage *in, VipsImage *out, double gamma); VIPS_DEPRECATED_FOR(vips_globalbalance) int im_global_balancef(VipsImage *in, VipsImage *out, double gamma); VIPS_DEPRECATED_FOR(vips_remosaic) int im_remosaic(VipsImage *in, VipsImage *out, const char *old_str, const char *new_str); VIPS_DEPRECATED_FOR(vips_merge) int im_lrmerge(VipsImage *ref, VipsImage *sec, VipsImage *out, int dx, int dy, int mwidth); VIPS_DEPRECATED_FOR(vips_mosaic1) int im_lrmerge1(VipsImage *ref, VipsImage *sec, VipsImage *out, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, int mwidth); VIPS_DEPRECATED_FOR(vips_merge) int im_tbmerge(VipsImage *ref, VipsImage *sec, VipsImage *out, int dx, int dy, int mwidth); VIPS_DEPRECATED_FOR(vips_mosaic1) int im_tbmerge1(VipsImage *ref, VipsImage *sec, VipsImage *out, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, int mwidth); VIPS_DEPRECATED_FOR(vips_mosaic) int im_lrmosaic(VipsImage *ref, VipsImage *sec, VipsImage *out, int bandno, int xref, int yref, int xsec, int ysec, int hwindowsize, int hsearchsize, int balancetype, int mwidth); VIPS_DEPRECATED_FOR(vips_mosaic1) int im_lrmosaic1(VipsImage *ref, VipsImage *sec, VipsImage *out, int bandno, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, int hwindowsize, int hsearchsize, int balancetype, int mwidth); VIPS_DEPRECATED_FOR(vips_mosaic) int im_tbmosaic(VipsImage *ref, VipsImage *sec, VipsImage *out, int bandno, int xref, int yref, int xsec, int ysec, int hwindowsize, int hsearchsize, int balancetype, int mwidth); VIPS_DEPRECATED_FOR(vips_mosaic1) int im_tbmosaic1(VipsImage *ref, VipsImage *sec, VipsImage *out, int bandno, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, int hwindowsize, int hsearchsize, int balancetype, int mwidth); VIPS_DEPRECATED int im_correl(VipsImage *ref, VipsImage *sec, int xref, int yref, int xsec, int ysec, int hwindowsize, int hsearchsize, double *correlation, int *x, int *y); VIPS_DEPRECATED int im_align_bands(VipsImage *in, VipsImage *out); VIPS_DEPRECATED int im_maxpos_subpel(VipsImage *in, double *x, double *y); VipsImage *vips__deprecated_open_read(const char *filename, gboolean sequential); VipsImage *vips__deprecated_open_write(const char *filename); void im__format_init(void); /* Low-level read/write operations. */ VIPS_DEPRECATED int im_jpeg2vips(const char *filename, VipsImage *out); VIPS_DEPRECATED int im_bufjpeg2vips(void *buf, size_t len, VipsImage *out, gboolean header_only); VIPS_DEPRECATED int im_vips2jpeg(VipsImage *in, const char *filename); VIPS_DEPRECATED int im_vips2mimejpeg(VipsImage *in, int qfac); VIPS_DEPRECATED int im_vips2bufjpeg(VipsImage *in, VipsImage *out, int qfac, char **obuf, int *olen); VIPS_DEPRECATED int im_tiff2vips(const char *filename, VipsImage *out); VIPS_DEPRECATED int im_vips2tiff(VipsImage *in, const char *filename); VIPS_DEPRECATED int im_tile_cache(VipsImage *in, VipsImage *out, int tile_width, int tile_height, int max_tiles); VIPS_DEPRECATED int im_magick2vips(const char *filename, VipsImage *out); VIPS_DEPRECATED int im_bufmagick2vips(void *buf, size_t len, VipsImage *out, gboolean header_only); VIPS_DEPRECATED int im_exr2vips(const char *filename, VipsImage *out); VIPS_DEPRECATED int im_ppm2vips(const char *filename, VipsImage *out); VIPS_DEPRECATED int im_vips2ppm(VipsImage *in, const char *filename); VIPS_DEPRECATED int im_analyze2vips(const char *filename, VipsImage *out); VIPS_DEPRECATED int im_csv2vips(const char *filename, VipsImage *out); VIPS_DEPRECATED int im_vips2csv(VipsImage *in, const char *filename); VIPS_DEPRECATED int im_png2vips(const char *filename, VipsImage *out); VIPS_DEPRECATED int im_vips2png(VipsImage *in, const char *filename); VIPS_DEPRECATED int im_vips2bufpng(VipsImage *in, VipsImage *out, int compression, int interlace, char **obuf, size_t *olen); VIPS_DEPRECATED int im_webp2vips(const char *filename, VipsImage *out); VIPS_DEPRECATED int im_vips2webp(VipsImage *in, const char *filename); VIPS_DEPRECATED int im_raw2vips(const char *filename, VipsImage *out, int width, int height, int bpp, int offset); VIPS_DEPRECATED int im_vips2raw(VipsImage *in, int fd); VIPS_DEPRECATED int im_mat2vips(const char *filename, VipsImage *out); VIPS_DEPRECATED int im_rad2vips(const char *filename, VipsImage *out); VIPS_DEPRECATED int im_vips2rad(VipsImage *in, const char *filename); VIPS_DEPRECATED int im_fits2vips(const char *filename, VipsImage *out); VIPS_DEPRECATED int im_vips2fits(VipsImage *in, const char *filename); VIPS_DEPRECATED int im_vips2dz(VipsImage *in, const char *filename); int im__bandup(const char *domain, VipsImage *in, VipsImage *out, int n); int im__bandalike_vec(const char *domain, VipsImage **in, VipsImage **out, int n); int im__bandalike(const char *domain, VipsImage *in1, VipsImage *in2, VipsImage *out1, VipsImage *out2); int im__formatalike_vec(VipsImage **in, VipsImage **out, int n); int im__formatalike(VipsImage *in1, VipsImage *in2, VipsImage *out1, VipsImage *out2); int im__colour_unary(const char *domain, VipsImage *in, VipsImage *out, VipsInterpretation interpretation, im_wrapone_fn buffer_fn, void *a, void *b); VipsImage **im__insert_base(const char *domain, VipsImage *in1, VipsImage *in2, VipsImage *out); /* TODO(kleisauke): These are also defined in pmosaicing.h */ int vips__find_lroverlap(VipsImage *ref_in, VipsImage *sec_in, VipsImage *out, int bandno_in, int xref, int yref, int xsec, int ysec, int halfcorrelation, int halfarea, int *dx0, int *dy0, double *scale1, double *angle1, double *dx1, double *dy1); int vips__find_tboverlap(VipsImage *ref_in, VipsImage *sec_in, VipsImage *out, int bandno_in, int xref, int yref, int xsec, int ysec, int halfcorrelation, int halfarea, int *dx0, int *dy0, double *scale1, double *angle1, double *dx1, double *dy1); /* A colour temperature. */ typedef struct { double X0, Y0, Z0; } im_colour_temperature; VIPS_DEPRECATED void im_copy_dmask_matrix(DOUBLEMASK *mask, double **matrix); VIPS_DEPRECATED void im_copy_matrix_dmask(double **matrix, DOUBLEMASK *mask); VIPS_DEPRECATED int *im_ivector(int nl, int nh); VIPS_DEPRECATED float *im_fvector(int nl, int nh); VIPS_DEPRECATED double *im_dvector(int nl, int nh); VIPS_DEPRECATED void im_free_ivector(int *v, int nl, int nh); VIPS_DEPRECATED void im_free_fvector(float *v, int nl, int nh); VIPS_DEPRECATED void im_free_dvector(double *v, int nl, int nh); VIPS_DEPRECATED int **im_imat_alloc(int nrl, int nrh, int ncl, int nch); VIPS_DEPRECATED void im_free_imat(int **m, int nrl, int nrh, int ncl, int nch); VIPS_DEPRECATED float **im_fmat_alloc(int nrl, int nrh, int ncl, int nch); VIPS_DEPRECATED void im_free_fmat(float **m, int nrl, int nrh, int ncl, int nch); VIPS_DEPRECATED double **im_dmat_alloc(int nrl, int nrh, int ncl, int nch); VIPS_DEPRECATED void im_free_dmat(double **m, int nrl, int nrh, int ncl, int nch); VIPS_DEPRECATED int im_invmat(double **, int); VIPS_DEPRECATED int im_conv_f_raw(VipsImage *in, VipsImage *out, DOUBLEMASK *mask); VIPS_DEPRECATED int im_convsep_f_raw(VipsImage *in, VipsImage *out, DOUBLEMASK *mask); VIPS_DEPRECATED int im_greyc_mask(VipsImage *in, VipsImage *out, VipsImage *mask, int iterations, float amplitude, float sharpness, float anisotropy, float alpha, float sigma, float dl, float da, float gauss_prec, int interpolation, int fast_approx); VIPS_DEPRECATED int vips_check_imask(const char *domain, INTMASK *mask); VIPS_DEPRECATED int vips_check_dmask(const char *domain, DOUBLEMASK *mask); VIPS_DEPRECATED int vips_check_dmask_1d(const char *domain, DOUBLEMASK *mask); VIPS_DEPRECATED GOptionGroup *vips_get_option_group(void); /* old window manager API */ VIPS_DEPRECATED VipsWindow *vips_window_ref(VipsImage *im, int top, int height); VIPS_DEPRECATED FILE *vips_popenf(const char *fmt, const char *mode, ...) G_GNUC_PRINTF(1, 3); double *vips__ink_to_vector(const char *domain, VipsImage *im, VipsPel *ink, int *n); VipsPel *im__vector_to_ink(const char *domain, VipsImage *im, int n, double *vec); int vips__init(const char *argv0); size_t vips__get_sizeof_vipsobject(void); /* This is deprecated to make room for highway. */ typedef struct _OrcProgram { /* Opaque */ } OrcProgram; typedef struct _OrcExecutor { char data[808]; } OrcExecutor; #define VIPS_VECTOR_SOURCE_MAX (10) typedef struct { const char *name; char *unique_name; int n_temp; int n_scanline; int n_source; int n_destination; int n_constant; int n_parameter; int n_instruction; int sl[VIPS_VECTOR_SOURCE_MAX]; int line[VIPS_VECTOR_SOURCE_MAX]; int s[VIPS_VECTOR_SOURCE_MAX]; int d1; OrcProgram *program; gboolean compiled; } VipsVector; typedef struct { OrcExecutor executor; VipsVector *vector; } VipsExecutor; VIPS_DEPRECATED void vips_vector_init(void); VIPS_DEPRECATED void vips_vector_free(VipsVector *vector); VIPS_DEPRECATED VipsVector *vips_vector_new(const char *name, int dsize); VIPS_DEPRECATED void vips_vector_constant(VipsVector *vector, char *name, int value, int size); VIPS_DEPRECATED void vips_vector_source_scanline(VipsVector *vector, char *name, int line, int size); VIPS_DEPRECATED int vips_vector_source_name(VipsVector *vector, const char *name, int size); VIPS_DEPRECATED void vips_vector_temporary(VipsVector *vector, const char *name, int size); VIPS_DEPRECATED int vips_vector_parameter(VipsVector *vector, const char *name, int size); VIPS_DEPRECATED int vips_vector_destination(VipsVector *vector, const char *name, int size); VIPS_DEPRECATED void vips_vector_asm2(VipsVector *vector, const char *op, const char *a, const char *b); VIPS_DEPRECATED void vips_vector_asm3(VipsVector *vector, const char *op, const char *a, const char *b, const char *c); VIPS_DEPRECATED gboolean vips_vector_full(VipsVector *vector); VIPS_DEPRECATED gboolean vips_vector_compile(VipsVector *vector); VIPS_DEPRECATED void vips_vector_print(VipsVector *vector); VIPS_DEPRECATED void vips_executor_set_program(VipsExecutor *executor, VipsVector *vector, int n); VIPS_DEPRECATED void vips_executor_set_scanline(VipsExecutor *executor, VipsRegion *ir, int x, int y); VIPS_DEPRECATED void vips_executor_set_destination(VipsExecutor *executor, void *value); VIPS_DEPRECATED void vips_executor_set_parameter(VipsExecutor *executor, int var, int value); VIPS_DEPRECATED void vips_executor_set_array(VipsExecutor *executor, int var, void *value); VIPS_DEPRECATED void vips_executor_run(VipsExecutor *executor); VIPS_DEPRECATED void vips_vector_to_fixed_point(double *in, int *out, int n, int scale); /* This stuff is very, very old and should not be used by anyone now. */ #ifdef VIPS_ENABLE_ANCIENT #include #endif /*VIPS_ENABLE_ANCIENT*/ #include #include #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_VIPS7COMPAT_H*/ libvips-8.15.1/libvips/iofuncs/000077500000000000000000000000001454007373500164045ustar00rootroot00000000000000libvips-8.15.1/libvips/iofuncs/buf.c000066400000000000000000000355341454007373500173360ustar00rootroot00000000000000/* string buffers */ /* Copyright (C) 1991-2003 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include /** * SECTION: buf * @short_description: a string you can append to * @stability: Stable * @see_also: #vips * @include: vips/vips.h * * A message buffer you can append stuff to safely and quickly. If the message * gets too long, you get "..." and truncation. Message buffers can be on the * stack or heap. * * For example: * * |[ * char txt[256]; * VipsBuf buf = VIPS_BUF_STATIC(txt); * int i; * * vips_buf_appends(&buf, "Numbers are: "); * for (i = 0; i < array_length; i++) { * if (i > 0) * vips_buf_appends(&buf, ", "); * vips_buf_appendg(&buf, array[i]); * } * printf("%s", vips_buf_all(&buf)); * ]| */ /** * VIPS_BUF_STATIC: * @TEXT: the storage area to use * * Initialize a heap buffer. For example: * * |[ * char txt[256]; * VipsBuf buf = VIPS_BUF_STATIC(txt); * ]| */ /** * vips_buf_rewind: * @buf: the buffer * * Reset the buffer to the empty string. */ void vips_buf_rewind(VipsBuf *buf) { buf->i = 0; buf->lasti = 0; buf->full = FALSE; if (buf->base) buf->base[0] = '\0'; } /** * vips_buf_init: * @buf: the buffer * * Initialize a buffer. */ void vips_buf_init(VipsBuf *buf) { buf->base = NULL; buf->mx = 0; buf->dynamic = FALSE; vips_buf_rewind(buf); } /** * vips_buf_destroy: * @buf: the buffer * * Destroy a buffer. Only needed for heap buffers. Leaves the buffer in the * _init state. */ void vips_buf_destroy(VipsBuf *buf) { if (buf->dynamic) { VIPS_FREE(buf->base); } vips_buf_init(buf); } /** * vips_buf_set_static: * @buf: the buffer * @base: the start of the memory area to use for storage * @mx: the size of the storage area * * Attach the buffer to a static memory area. The buffer needs to have been * initialised. The memory area needs to be at least 4 bytes long. */ void vips_buf_set_static(VipsBuf *buf, char *base, int mx) { g_assert(mx >= 4); vips_buf_destroy(buf); buf->base = base; buf->mx = mx; buf->dynamic = FALSE; vips_buf_rewind(buf); } /** * vips_buf_init_static: * @buf: the buffer * @base: the start of the memory area to use for storage * @mx: the size of the storage area * * Initialise and attach to a static memory area. VIPS_BUF_STATIC() is usually * more convenient. * * For example: * * |[ * char txt[256]; * VipsBuf buf; * * vips_buf_init_static(&buf, txt, 256); * ]| * * Static buffers don't need to be freed when they go out of scope, but their * size must be set at compile-time. */ void vips_buf_init_static(VipsBuf *buf, char *base, int mx) { vips_buf_init(buf); vips_buf_set_static(buf, base, mx); } /** * vips_buf_set_dynamic: * @buf: the buffer * @mx: the size of the storage area * * Attach the buffer to a heap memory area. The buffer needs to have been * initialised. The memory area needs to be at least 4 bytes long. */ void vips_buf_set_dynamic(VipsBuf *buf, int mx) { g_assert(mx >= 4); if (buf->mx == mx && buf->dynamic) /* No change? */ vips_buf_rewind(buf); else { vips_buf_destroy(buf); if (!(buf->base = VIPS_ARRAY(NULL, mx, char))) /* No error return, so just block writes. */ buf->full = TRUE; else { buf->mx = mx; buf->dynamic = TRUE; vips_buf_rewind(buf); } } } /** * vips_buf_init_dynamic: * @buf: the buffer * @mx: the size of the storage area * * Initialise and attach to a heap memory area. * The memory area needs to be at least 4 bytes long. * * |[ * VipsBuf buf; * * vips_buf_init_synamic(&buf, 256); * ]| * * Dynamic buffers must be freed with vips_buf_destroy(), but their size can * be set at runtime. */ void vips_buf_init_dynamic(VipsBuf *buf, int mx) { vips_buf_init(buf); vips_buf_set_dynamic(buf, mx); } /** * vips_buf_appendns: * @buf: the buffer * @str: the string to append to the buffer * @sz: the size of the string to append * * Append at most @sz chars from @str to @buf. @sz < 0 means unlimited. This * is the low-level append operation: functions like vips_buf_appendf() build * on top of this. * * Returns: %FALSE on overflow, %TRUE otherwise. */ gboolean vips_buf_appendns(VipsBuf *buf, const char *str, int sz) { int len; int n; int avail; int cpy; if (buf->full) return FALSE; if (!str) return TRUE; /* Amount we want to copy. */ len = strlen(str); if (sz >= 0) n = VIPS_MIN(sz, len); else n = len; /* Space available. */ avail = buf->mx - buf->i - 4; cpy = VIPS_MIN(n, avail); /* Can't use vips_strncpy() here, we don't want to drop the end of the * string. * * gcc10.3 (I think?) issues a false-positive warning about this. */ strncpy(buf->base + buf->i, str, cpy); buf->i += cpy; if (buf->i >= buf->mx - 4) { buf->full = TRUE; strcpy(buf->base + buf->mx - 4, "..."); buf->i = buf->mx - 1; return FALSE; } return TRUE; } /** * vips_buf_appends: * @buf: the buffer * @str: the string to append to the buffer * * Append the whole of @str to @buf. * * Returns: %FALSE on overflow, %TRUE otherwise. */ gboolean vips_buf_appends(VipsBuf *buf, const char *str) { return vips_buf_appendns(buf, str, -1); } /** * vips_buf_appendc: * @buf: the buffer * @ch: the character to append to the buffer * * Append a single character @ch to @buf. * * Returns: %FALSE on overflow, %TRUE otherwise. */ gboolean vips_buf_appendc(VipsBuf *buf, char ch) { char tiny[2]; tiny[0] = ch; tiny[1] = '\0'; return vips_buf_appendns(buf, tiny, 1); } /** * vips_buf_change: * @buf: the buffer * @o: the string to search for * @n: the string to substitute * * Swap the rightmost occurrence of @o for @n. * * Returns: %FALSE on overflow, %TRUE otherwise. */ gboolean vips_buf_change(VipsBuf *buf, const char *old, const char *new) { int olen = strlen(old); int nlen = strlen(new); int i; if (buf->full) return FALSE; if (buf->i - olen + nlen > buf->mx - 4) { buf->full = TRUE; return FALSE; } /* Find pos of old. */ for (i = buf->i - olen; i > 0; i--) if (vips_isprefix(old, buf->base + i)) break; g_assert(i >= 0); /* Move tail of buffer to make right-size space for new. */ memmove(buf->base + i + nlen, buf->base + i + olen, buf->i - i - olen); /* Copy new in. */ memcpy(buf->base + i, new, nlen); buf->i = i + nlen + (buf->i - i - olen); return TRUE; } /** * vips_buf_removec: * @buf: the buffer * @ch: the character to remove * * Remove the last character, if it's @ch. * * Returns: %FALSE on failure, %TRUE otherwise. */ gboolean vips_buf_removec(VipsBuf *buf, char ch) { if (buf->full) return FALSE; if (buf->i <= 0) return FALSE; if (buf->base[buf->i - 1] == ch) buf->i -= 1; return TRUE; } /** * vips_buf_vappendf: * @buf: the buffer * @fmt: printf()-style format string * @ap: arguments to format string * * Append to @buf, args as vprintf(). * * Returns: %FALSE on overflow, %TRUE otherwise. */ gboolean vips_buf_vappendf(VipsBuf *buf, const char *fmt, va_list ap) { int avail; char *p; if (buf->full) return FALSE; avail = buf->mx - buf->i - 4; p = buf->base + buf->i; (void) vips_vsnprintf(p, avail, fmt, ap); buf->i += strlen(p); if (buf->i >= buf->mx - 4) { buf->full = TRUE; strcpy(buf->base + buf->mx - 4, "..."); buf->i = buf->mx - 1; return FALSE; } return TRUE; } /** * vips_buf_appendf: * @buf: the buffer * @fmt: printf()-style format string * @...: arguments to format string * * Format the string and append to @buf. * * Returns: %FALSE on overflow, %TRUE otherwise. */ gboolean vips_buf_appendf(VipsBuf *buf, const char *fmt, ...) { va_list ap; gboolean result; va_start(ap, fmt); result = vips_buf_vappendf(buf, fmt, ap); va_end(ap); return result; } /** * vips_buf_appendg: * @buf: the buffer * @g: value to format and append * * Append a double, non-localised. Useful for config files etc. * * Returns: %FALSE on overflow, %TRUE otherwise. */ gboolean vips_buf_appendg(VipsBuf *buf, double g) { char text[G_ASCII_DTOSTR_BUF_SIZE]; g_ascii_dtostr(text, sizeof(text), g); return vips_buf_appends(buf, text); } /** * vips_buf_appendd: * @buf: the buffer * @d: value to format and append * * Append a number. If the number is -ve, add brackets. Needed for * building function arguments. * * Returns: %FALSE on overflow, %TRUE otherwise. */ gboolean vips_buf_appendd(VipsBuf *buf, int d) { if (d < 0) return vips_buf_appendf(buf, " (%d)", d); else return vips_buf_appendf(buf, " %d", d); } /** * vips_buf_appendgv: * @buf: the buffer * @value: #GValue to format and append * * Format and append a #GValue as a printable thing. We display text line "3144 * bytes of binary data" for BLOBs like icc-profile-data. * * Use vips_image_get_as_string() to make a text representation of a field. * That will base64-encode blobs, for example. * * Returns: %FALSE on overflow, %TRUE otherwise. */ gboolean vips_buf_appendgv(VipsBuf *buf, GValue *value) { GType type = G_VALUE_TYPE(value); GType fundamental = g_type_fundamental(type); gboolean handled; gboolean result; result = FALSE; handled = FALSE; switch (fundamental) { case G_TYPE_STRING: { const char *str; /* These are GStrings (gchararray). vips refstrings are * handled by boxed, see below. */ str = g_value_get_string(value); result = vips_buf_appends(buf, str); handled = TRUE; } break; case G_TYPE_OBJECT: { GObject *object; object = g_value_get_object(value); if (VIPS_IS_OBJECT(object)) { vips_object_summary(VIPS_OBJECT(object), buf); result = TRUE; handled = TRUE; } } break; case G_TYPE_INT: result = vips_buf_appendf(buf, "%d", g_value_get_int(value)); handled = TRUE; break; case G_TYPE_UINT64: result = vips_buf_appendf(buf, "%" G_GINT64_FORMAT, g_value_get_uint64(value)); handled = TRUE; break; case G_TYPE_DOUBLE: result = vips_buf_appendf(buf, "%g", g_value_get_double(value)); handled = TRUE; break; case G_TYPE_BOOLEAN: result = vips_buf_appends(buf, g_value_get_boolean(value) ? "true" : "false"); handled = TRUE; break; case G_TYPE_ENUM: result = vips_buf_appends(buf, vips_enum_nick(type, g_value_get_enum(value))); handled = TRUE; break; case G_TYPE_FLAGS: { GFlagsClass *flags_class = g_type_class_ref(type); GFlagsValue *v; int flags; flags = g_value_get_flags(value); while (flags && (v = g_flags_get_first_value(flags_class, flags))) { result = vips_buf_appendf(buf, "%s ", v->value_nick); flags &= ~v->value; } handled = TRUE; } break; case G_TYPE_BOXED: if (type == VIPS_TYPE_REF_STRING) { const char *str; size_t str_len; /* These should be printable. */ str = vips_value_get_ref_string(value, &str_len); result = vips_buf_appends(buf, str); handled = TRUE; } else if (type == VIPS_TYPE_BLOB) { size_t str_len; /* Binary data and not printable. */ (void) vips_value_get_ref_string(value, &str_len); result = vips_buf_appendf(buf, _("%zd bytes of binary data"), str_len); handled = TRUE; } else if (type == VIPS_TYPE_ARRAY_DOUBLE) { double *arr; int n; int i; arr = vips_value_get_array_double(value, &n); for (i = 0; i < n; i++) result = vips_buf_appendf(buf, "%g ", arr[i]); handled = TRUE; } else if (type == VIPS_TYPE_ARRAY_INT) { int *arr; int n; int i; arr = vips_value_get_array_int(value, &n); for (i = 0; i < n; i++) result = vips_buf_appendf(buf, "%d ", arr[i]); handled = TRUE; } else if (type == VIPS_TYPE_ARRAY_IMAGE) { VipsImage **arr; int n; int i; arr = vips_value_get_array_image(value, &n); for (i = 0; i < n; i++) { vips_object_summary(VIPS_OBJECT(arr[i]), buf); result = vips_buf_appends(buf, " "); } handled = TRUE; } break; default: break; } if (!handled) { char *str_value; str_value = g_strdup_value_contents(value); result = vips_buf_appends(buf, str_value); g_free(str_value); } return result; } /** * vips_buf_append_size: * @buf: the buffer * @n: the number of bytes * * Turn a number of bytes into a sensible string ... eg "12", "12KB", "12MB", * "12GB" etc. * * Returns: %FALSE on overflow, %TRUE otherwise. */ gboolean vips_buf_append_size(VipsBuf *buf, size_t n) { const static char *names[] = { /* File length unit. */ N_("bytes"), /* Kilobyte unit. */ N_("KB"), /* Megabyte unit. */ N_("MB"), /* Gigabyte unit. */ N_("GB"), /* Terabyte unit. */ N_("TB") }; double sz = n; int i; /* -1, since we want to stop at TB, not run off the end. */ for (i = 0; sz > 1024 && i < VIPS_NUMBER(names) - 1; sz /= 1024, i++) ; if (i == 0) /* No decimal places for bytes. */ return vips_buf_appendf(buf, "%g %s", sz, _(names[i])); else return vips_buf_appendf(buf, "%.2f %s", sz, _(names[i])); } /** * vips_buf_all: * @buf: the buffer * * Return the contents of the buffer as a C string. * * Returns: the %NULL-terminated contents of the buffer. This is a pointer to * the memory managed by the buffer and must not be freed. */ const char * vips_buf_all(VipsBuf *buf) { buf->base[buf->i] = '\0'; return buf->base; } /** * vips_buf_firstline: * @buf: the buffer * * Trim to just the first line (excluding "\n"). * * Returns: the %NULL-terminated contents of the buffer. This is a pointer to * the memory managed by the buffer and must not be freed. */ const char * vips_buf_firstline(VipsBuf *buf) { char *p; if ((p = strchr(vips_buf_all(buf), '\n'))) *p = '\0'; return vips_buf_all(buf); } /** * vips_buf_is_empty: * @buf: the buffer * * Returns: %TRUE if the buffer is empty. */ gboolean vips_buf_is_empty(VipsBuf *buf) { return buf->i == 0; } /** * vips_buf_is_full: * @buf: the buffer * * Returns: %TRUE if the buffer is full. */ gboolean vips_buf_is_full(VipsBuf *buf) { return buf->full; } /** * vips_buf_len: * @buf: the buffer * * Returns: the number of characters currently in the buffer. */ int vips_buf_len(VipsBuf *buf) { return buf->i; } libvips-8.15.1/libvips/iofuncs/buffer.c000066400000000000000000000402641454007373500200270ustar00rootroot00000000000000/* Manage sets of pixel buffers on an image. * * 30/10/06 * - from window.c * 2/2/07 * - speed up the search, use our own lock (thanks Christian) * 5/2/07 * - split to many buffer lists per image * 11/2/07 * - split to a buffer hash per thread * - reuse buffer mallocs when we can * 20/2/07 * - add VipsBufferCacheList and we can avoid some hash ops on * done/undone * 5/3/10 * - move invalid stuff to region * - move link maintenance to im_demand_hint * 21/9/11 * - switch to vips_tracked_malloc() * 18/12/13 * - keep a few buffers in reserve per image, stops malloc/free * cycling when sharing is repeatedly discovered * 6/6/16 * - free buffers on image close as well as thread exit, so main thread * buffers don't clog up the system * 13/10/16 * - better solution: don't keep a buffercache for non-workers */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG_CREATE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #ifdef DEBUG /* Track all buffers here for debugging. */ static GSList *vips__buffer_all = NULL; #endif /*DEBUG*/ #ifdef DEBUG_CREATE static GSList *vips__buffer_cache_all = NULL; #endif /*DEBUG_CREATE*/ /* The maximum numbers of buffers we hold in reserve per image. */ static const int buffer_cache_max_reserve = 2; /* Workers have a BufferThread (and BufferCache) in a GPrivate they have * exclusive access to. */ static GPrivate *buffer_thread_key = NULL; void vips_buffer_print(VipsBuffer *buffer) { printf("VipsBuffer: %p ref_count = %d, ", buffer, buffer->ref_count); printf("im = %p, ", buffer->im); printf("area.left = %d, ", buffer->area.left); printf("area.top = %d, ", buffer->area.top); printf("area.width = %d, ", buffer->area.width); printf("area.height = %d, ", buffer->area.height); printf("done = %d, ", buffer->done); printf("cache = %p, ", buffer->cache); printf("buf = %p, ", buffer->buf); printf("bsize = %zd\n", buffer->bsize); } #ifdef DEBUG static void * vips_buffer_dump(VipsBuffer *buffer, size_t *reserve, size_t *alive) { vips_buffer_print(buffer); g_assert(buffer->im); g_assert(buffer->buf); if (!buffer->cache && !buffer->done) { /* Global buffer, not linked to any cache. */ printf("global buffer %p, %.3g MB\n", buffer, buffer->bsize / (1024 * 1024.0)); *alive += buffer->bsize; } else if (buffer->cache && buffer->done && !vips_rect_isempty(&buffer->area) && g_slist_find(buffer->cache->buffers, buffer)) { /* Published on a thread. */ printf("thread buffer %p, %.3g MB\n", buffer, buffer->bsize / (1024 * 1024.0)); *alive += buffer->bsize; } else if (buffer->ref_count == 0 && buffer->cache && !buffer->done && vips_rect_isempty(&buffer->area) && g_slist_find(buffer->cache->reserve, buffer)) /* Held in reserve. */ *reserve += buffer->bsize; else printf("buffer craziness!\n"); return NULL; } #endif /*DEBUG*/ #ifdef DEBUG_CREATE static void * vips_buffer_cache_dump(VipsBufferCache *cache, void *a, void *b) { printf("VipsBufferCache: %p\n", cache); printf("\t%d buffers\n", g_slist_length(cache->buffers)); printf("\tthread %p\n", cache->thread); printf("\timage %p\n", cache->im); printf("\tbuffer_thread %p\n", cache->buffer_thread); printf("\t%d in reserve\n", g_slist_length(cache->reserve)); return NULL; } #endif /*DEBUG_CREATE*/ void vips_buffer_dump_all(void) { #ifdef DEBUG if (vips__buffer_all) { size_t reserve; size_t alive; printf("buffers:\n"); reserve = 0; alive = 0; vips_slist_map2(vips__buffer_all, (VipsSListMap2Fn) vips_buffer_dump, &reserve, &alive); printf("%.3g MB alive\n", alive / (1024 * 1024.0)); printf("%.3g MB in reserve\n", reserve / (1024 * 1024.0)); } #ifdef DEBUG_CREATE if (vips__buffer_cache_all) { printf("buffers: %d buffer cache still alive\n", g_slist_length(vips__buffer_cache_all)); vips_slist_map2(vips__buffer_cache_all, (VipsSListMap2Fn) vips_buffer_cache_dump, NULL, NULL); printf("g_thread_self() == %p\n", g_thread_self()); } #endif /*DEBUG_CREATE*/ #endif /*DEBUG*/ } static void vips_buffer_free(VipsBuffer *buffer) { VIPS_FREEF(vips_tracked_aligned_free, buffer->buf); buffer->bsize = 0; g_free(buffer); #ifdef DEBUG g_mutex_lock(vips__global_lock); g_assert(g_slist_find(vips__buffer_all, buffer)); vips__buffer_all = g_slist_remove(vips__buffer_all, buffer); g_mutex_unlock(vips__global_lock); #endif /*DEBUG*/ #ifdef DEBUG_VERBOSE printf("vips_buffer_free: freeing buffer %p\n", buffer); #endif /*DEBUG_VERBOSE*/ } static void buffer_thread_free(VipsBufferThread *buffer_thread) { VIPS_FREEF(g_hash_table_destroy, buffer_thread->hash); VIPS_FREE(buffer_thread); } /* Run for GDestroyNotify on the VipsBufferThread hash. */ static void buffer_cache_free(VipsBufferCache *cache) { GSList *p; #ifdef DEBUG_CREATE g_mutex_lock(vips__global_lock); vips__buffer_cache_all = g_slist_remove(vips__buffer_cache_all, cache); g_mutex_unlock(vips__global_lock); printf("buffer_cache_free: freeing cache %p on thread %p\n", cache, g_thread_self()); printf("\t(%d caches left)\n", g_slist_length(vips__buffer_cache_all)); #endif /*DEBUG_CREATE*/ /* Need to mark undone so we don't try and take them off this cache on * unref. */ for (p = cache->buffers; p; p = p->next) { VipsBuffer *buffer = (VipsBuffer *) p->data; g_assert(buffer->done); g_assert(buffer->cache == cache); buffer->done = FALSE; buffer->cache = NULL; } VIPS_FREEF(g_slist_free, cache->buffers); for (p = cache->reserve; p; p = p->next) { VipsBuffer *buffer = (VipsBuffer *) p->data; vips_buffer_free(buffer); } VIPS_FREEF(g_slist_free, cache->reserve); g_free(cache); } static VipsBufferCache * buffer_cache_new(VipsBufferThread *buffer_thread, VipsImage *im) { VipsBufferCache *cache; cache = g_new(VipsBufferCache, 1); cache->buffers = NULL; cache->thread = g_thread_self(); cache->im = im; cache->buffer_thread = buffer_thread; cache->reserve = NULL; cache->n_reserve = 0; #ifdef DEBUG_CREATE g_mutex_lock(vips__global_lock); vips__buffer_cache_all = g_slist_prepend(vips__buffer_cache_all, cache); g_mutex_unlock(vips__global_lock); printf("buffer_cache_new: new cache %p for thread %p on image %p\n", cache, g_thread_self(), im); printf("\t(%d caches now)\n", g_slist_length(vips__buffer_cache_all)); #endif /*DEBUG_CREATE*/ return cache; } static VipsBufferThread * buffer_thread_new(void) { VipsBufferThread *buffer_thread; buffer_thread = g_new(VipsBufferThread, 1); buffer_thread->hash = g_hash_table_new_full( g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) buffer_cache_free); buffer_thread->thread = g_thread_self(); return buffer_thread; } /* Get our private VipsBufferThread. NULL for non-worker threads. */ static VipsBufferThread * buffer_thread_get(void) { VipsBufferThread *buffer_thread; if (vips_thread_isvips()) { /* Our threads get a set of private buffers, since we know we * will be calling vips_thread_shutdown() on thread * termination. */ if (!(buffer_thread = g_private_get(buffer_thread_key))) { buffer_thread = buffer_thread_new(); g_private_set(buffer_thread_key, buffer_thread); } g_assert(buffer_thread->thread == g_thread_self()); } else /* Non-vips threads don't have one. */ buffer_thread = NULL; return buffer_thread; } /* Get the VipsBufferCache for this image, or NULL for a non-worker. */ static VipsBufferCache * buffer_cache_get(VipsImage *im) { VipsBufferThread *buffer_thread; VipsBufferCache *cache; if ((buffer_thread = buffer_thread_get())) { if (!(cache = (VipsBufferCache *) g_hash_table_lookup(buffer_thread->hash, im))) { cache = buffer_cache_new(buffer_thread, im); g_hash_table_insert(buffer_thread->hash, im, cache); } g_assert(cache->thread == g_thread_self()); } else cache = NULL; return cache; } /* Pixels have been calculated: publish for other parts of this thread to see. */ void vips_buffer_done(VipsBuffer *buffer) { VipsImage *im = buffer->im; VipsBufferCache *cache; if (!buffer->done && (cache = buffer_cache_get(im))) { g_assert(!g_slist_find(cache->buffers, buffer)); g_assert(!buffer->cache); buffer->done = TRUE; buffer->cache = cache; cache->buffers = g_slist_prepend(cache->buffers, buffer); #ifdef DEBUG_VERBOSE printf("vips_buffer_done: thread %p adding buffer %p to cache %p\n", g_thread_self(), buffer, cache); vips_buffer_print(buffer); #endif /*DEBUG_VERBOSE*/ } } /* Take off the public 'done' list. Make sure it has no calculated pixels in. */ void vips_buffer_undone(VipsBuffer *buffer) { if (buffer->done) { VipsBufferCache *cache = buffer->cache; #ifdef DEBUG_VERBOSE printf("vips_buffer_undone: thread %p removing " "buffer %p from cache %p\n", g_thread_self(), buffer, cache); #endif /*DEBUG_VERBOSE*/ g_assert(cache->thread == g_thread_self()); g_assert(cache->buffer_thread->thread == cache->thread); g_assert(g_slist_find(cache->buffers, buffer)); g_assert(buffer_thread_get()); g_assert(cache->buffer_thread == buffer_thread_get()); cache->buffers = g_slist_remove(cache->buffers, buffer); buffer->done = FALSE; #ifdef DEBUG_VERBOSE printf("vips_buffer_undone: %d buffers left\n", g_slist_length(cache->buffers)); #endif /*DEBUG_VERBOSE*/ } buffer->cache = NULL; buffer->area.width = 0; buffer->area.height = 0; } void vips_buffer_unref(VipsBuffer *buffer) { #ifdef DEBUG_VERBOSE printf("** vips_buffer_unref: left = %d, top = %d, " "width = %d, height = %d (%p)\n", buffer->area.left, buffer->area.top, buffer->area.width, buffer->area.height, buffer); #endif /*DEBUG_VERBOSE*/ g_assert(buffer->ref_count > 0); buffer->ref_count -= 1; if (buffer->ref_count == 0) { VipsBufferCache *cache; #ifdef DEBUG_VERBOSE if (!buffer->done) printf("vips_buffer_unref: buffer was not done\n"); #endif /*DEBUG_VERBOSE*/ vips_buffer_undone(buffer); /* Place on this thread's reserve list for reuse. */ if ((cache = buffer_cache_get(buffer->im)) && cache->n_reserve < buffer_cache_max_reserve) { g_assert(!buffer->cache); cache->reserve = g_slist_prepend(cache->reserve, buffer); cache->n_reserve += 1; buffer->cache = cache; buffer->area.width = 0; buffer->area.height = 0; } else vips_buffer_free(buffer); } } static int buffer_move(VipsBuffer *buffer, VipsRect *area) { VipsImage *im = buffer->im; size_t new_bsize; size_t align; g_assert(buffer->ref_count == 1); vips_buffer_undone(buffer); g_assert(!buffer->done); buffer->area = *area; new_bsize = (size_t) VIPS_IMAGE_SIZEOF_PEL(im) * area->width * area->height; /* Need to pad buffer size to be aligned-up to * 64 bytes for the vips_reduce{h,v} highway path. */ #ifdef HAVE_HWY if (im->BandFmt == VIPS_FORMAT_UCHAR) { new_bsize += /*HWY_ALIGNMENT*/ 64 - 1; align = /*HWY_ALIGNMENT*/ 64; } else #endif /*HAVE_HWY*/ align = 16; if (buffer->bsize < new_bsize || !buffer->buf) { buffer->bsize = new_bsize; VIPS_FREEF(vips_tracked_aligned_free, buffer->buf); if (!(buffer->buf = vips_tracked_aligned_alloc(buffer->bsize, align))) return -1; } return 0; } /* Make a new buffer. */ VipsBuffer * vips_buffer_new(VipsImage *im, VipsRect *area) { VipsBufferCache *cache; VipsBuffer *buffer; if ((cache = buffer_cache_get(im)) && cache->reserve) { buffer = (VipsBuffer *) cache->reserve->data; cache->reserve = g_slist_remove(cache->reserve, buffer); cache->n_reserve -= 1; g_assert(buffer->im == im); g_assert(buffer->done == FALSE); g_assert(buffer->cache); buffer->ref_count = 1; buffer->done = FALSE; buffer->cache = NULL; } else { buffer = g_new0(VipsBuffer, 1); buffer->ref_count = 1; buffer->im = im; buffer->done = FALSE; buffer->cache = NULL; buffer->buf = NULL; buffer->bsize = 0; #ifdef DEBUG g_mutex_lock(vips__global_lock); vips__buffer_all = g_slist_prepend(vips__buffer_all, buffer); g_mutex_unlock(vips__global_lock); #endif /*DEBUG*/ } if (buffer_move(buffer, area)) { vips_buffer_free(buffer); return NULL; } return buffer; } /* Find an existing buffer that encloses area and return a ref. Or NULL for no * existing buffer. */ static VipsBuffer * buffer_find(VipsImage *im, VipsRect *r) { VipsBufferCache *cache; VipsBuffer *buffer; GSList *p; VipsRect *area; if (!(cache = buffer_cache_get(im))) return NULL; /* This needs to be quick :-( don't use * vips_slist_map2()/vips_rect_includesrect(), do the search * inline. * * FIXME we return the first enclosing buffer, perhaps we should * search for the largest? */ for (p = cache->buffers; p; p = p->next) { buffer = (VipsBuffer *) p->data; area = &buffer->area; if (area->left <= r->left && area->top <= r->top && area->left + area->width >= r->left + r->width && area->top + area->height >= r->top + r->height) { buffer->ref_count += 1; #ifdef DEBUG_VERBOSE printf("buffer_find: left = %d, top = %d, " "width = %d, height = %d, count = %d (%p)\n", buffer->area.left, buffer->area.top, buffer->area.width, buffer->area.height, buffer->ref_count, buffer); #endif /*DEBUG_VERBOSE*/ return buffer; } } return NULL; } /* Return a ref to a buffer that encloses area. The buffer we return might be * done. */ VipsBuffer * vips_buffer_ref(VipsImage *im, VipsRect *area) { VipsBuffer *buffer; if ((buffer = buffer_find(im, area))) return buffer; else return vips_buffer_new(im, area); } /* Unref old, ref new, in a single operation. Reuse stuff if we can. The * buffer we return might or might not be done. */ VipsBuffer * vips_buffer_unref_ref(VipsBuffer *old_buffer, VipsImage *im, VipsRect *area) { VipsBuffer *buffer; g_assert(!old_buffer || old_buffer->im == im); /* Is the current buffer OK? */ if (old_buffer && vips_rect_includesrect(&old_buffer->area, area)) return old_buffer; /* Does the new area already have a buffer? */ if ((buffer = buffer_find(im, area))) { VIPS_FREEF(vips_buffer_unref, old_buffer); return buffer; } /* Is the current buffer unshared? We can just move it. */ if (old_buffer && old_buffer->ref_count == 1) { if (buffer_move(old_buffer, area)) { vips_buffer_unref(old_buffer); return NULL; } return old_buffer; } /* Fallback ... unref the old one, make a new one. */ VIPS_FREEF(vips_buffer_unref, old_buffer); if (!(buffer = vips_buffer_new(im, area))) return NULL; return buffer; } static void buffer_thread_destroy_notify(VipsBufferThread *buffer_thread) { /* We only come here if vips_thread_shutdown() was not called for this * thread. Do our best to clean up. * * GPrivate has stopped working by this point in destruction, be * careful not to touch that. */ buffer_thread_free(buffer_thread); } /* Init the buffer cache system. This is called during vips_init. */ void vips__buffer_init(void) { static GPrivate private = G_PRIVATE_INIT((GDestroyNotify) buffer_thread_destroy_notify); buffer_thread_key = &private; if (buffer_cache_max_reserve < 1) printf("vips__buffer_init: buffer reserve disabled\n"); #ifdef DEBUG printf("vips__buffer_init: DEBUG enabled\n"); #endif /*DEBUG*/ #ifdef DEBUG_CREATE printf("vips__buffer_init: DEBUG_CREATE enabled\n"); #endif /*DEBUG_CREATE*/ } void vips__buffer_shutdown(void) { VipsBufferThread *buffer_thread; if ((buffer_thread = g_private_get(buffer_thread_key))) { buffer_thread_free(buffer_thread); g_private_set(buffer_thread_key, NULL); } } libvips-8.15.1/libvips/iofuncs/cache.c000066400000000000000000000623661454007373500176300ustar00rootroot00000000000000/* cache vips operations * * 20/6/12 * - try to make it compile on centos5 * 7/7/12 * - add a lock so we can run operations from many threads * 28/11/19 [MaxKellermann] * - make invalidate advisory rather than immediate */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* TODO what about delayed writes ... do we ever write in close? we shouldn't, should do in evalend or written or somesuch use g_param_values_cmp() instead of value_equal()? */ /* #define DEBUG #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #include #include #include #include /* Set by GOption from the command line, eg. "12m". */ gboolean vips__cache_dump = FALSE; gboolean vips__cache_trace = FALSE; /* Max number of cached operations. * * It was 10,000, but this was too high for batch-style applications with * little reuse. */ static int vips_cache_max = 100; /* How many tracked open files we allow before we start dropping cache. */ static int vips_cache_max_files = 100; /* How much RAM we spend on caches before we start dropping cached operations * ... default 100mb. * * It was 1gb, but that's a lot of memory for things like vipsthumbnail where * there will be (almost) no reuse. Default low and let apps raise it if it'd * be useful. */ static size_t vips_cache_max_mem = 100 * 1024 * 1024; /* Hold a ref to all "recent" operations. */ static GHashTable *vips_cache_table = NULL; /* A 'time' counter: increment on all cache ops. Use this to detect LRU. */ static int vips_cache_time = 0; /* Protect cache access with this. */ static GMutex *vips_cache_lock = NULL; /* A cache entry. */ typedef struct _VipsOperationCacheEntry { VipsOperation *operation; /* When we added this operation to cache .. used to find LRU for * flush. */ int time; /* We listen for "invalidate" from the operation. Track the id here so * we can disconnect when we drop an operation. */ gulong invalidate_id; /* Set if someone thinks this cache entry should be dropped. */ gboolean invalid; } VipsOperationCacheEntry; /* Pass in the pspec so we can get the generic type. For example, a * held in a GParamSpec allowing OBJECT, but the value could be of type * VipsImage. generics are much faster to compare. */ static unsigned int vips_value_hash(GParamSpec *pspec, GValue *value) { GType generic = G_PARAM_SPEC_TYPE(pspec); /* Not compile-time constants, so we have to use a set of if()s. Could * make a table at run time I guess. */ if (generic == G_TYPE_PARAM_BOOLEAN) return (unsigned int) g_value_get_boolean(value); else if (generic == G_TYPE_PARAM_CHAR) return (unsigned int) g_value_get_schar(value); else if (generic == G_TYPE_PARAM_UCHAR) return (unsigned int) g_value_get_uchar(value); else if (generic == G_TYPE_PARAM_INT) return (unsigned int) g_value_get_int(value); else if (generic == G_TYPE_PARAM_UINT) return (unsigned int) g_value_get_uint(value); else if (generic == G_TYPE_PARAM_LONG) return (unsigned int) g_value_get_long(value); else if (generic == G_TYPE_PARAM_ULONG) return (unsigned int) g_value_get_ulong(value); else if (generic == G_TYPE_PARAM_ENUM) return (unsigned int) g_value_get_enum(value); else if (generic == G_TYPE_PARAM_FLAGS) return (unsigned int) g_value_get_flags(value); else if (generic == G_TYPE_PARAM_UINT64) { guint64 i = g_value_get_uint64(value); return g_int64_hash((gint64 *) &i); } else if (generic == G_TYPE_PARAM_INT64) { gint64 i = g_value_get_int64(value); return g_int64_hash(&i); } else if (generic == G_TYPE_PARAM_FLOAT) { float f = g_value_get_float(value); return g_direct_hash((void *) &f); } else if (generic == G_TYPE_PARAM_DOUBLE) { double d = g_value_get_double(value); return g_double_hash(&d); } else if (generic == G_TYPE_PARAM_STRING) { const char *s = g_value_get_string(value); return s ? g_str_hash(s) : 0; } else if (generic == G_TYPE_PARAM_BOXED) { void *p = g_value_get_boxed(value); return p ? g_direct_hash(p) : 0; } else if (generic == G_TYPE_PARAM_POINTER) { void *p = g_value_get_pointer(value); return p ? g_direct_hash(p) : 0; } else if (generic == G_TYPE_PARAM_OBJECT) { void *p = g_value_get_object(value); return p ? g_direct_hash(p) : 0; } else { /* Fallback: convert to a string and hash that. * This is very slow, print a warning if we use it * so we can add another case. */ char *s; unsigned int hash; s = g_strdup_value_contents(value); hash = g_str_hash(s); printf("vips_value_hash: no case for %s\n", s); printf("\ttype %d, %s\n", (int) G_VALUE_TYPE(value), g_type_name(G_VALUE_TYPE(value))); printf("\tgeneric %d, %s\n", (int) G_VALUE_TYPE(generic), g_type_name(generic)); g_free(s); return hash; } } /* Pass in the pspec so we can get the generic type. For example, a * value could be held in a GParamSpec allowing OBJECT, but the value * could be of type VipsImage. generics are much faster to compare. */ static gboolean vips_value_equal(GParamSpec *pspec, GValue *v1, GValue *v2) { GType generic = G_PARAM_SPEC_TYPE(pspec); GType t1 = G_VALUE_TYPE(v1); GType t2 = G_VALUE_TYPE(v2); if (t1 != t2) return FALSE; /* Not compile-time constants, so we have to use a set of if()s. Could * make a table at run time I guess. */ if (generic == G_TYPE_PARAM_BOOLEAN) return g_value_get_boolean(v1) == g_value_get_boolean(v2); else if (generic == G_TYPE_PARAM_CHAR) return g_value_get_schar(v1) == g_value_get_schar(v2); if (generic == G_TYPE_PARAM_UCHAR) return g_value_get_uchar(v1) == g_value_get_uchar(v2); if (generic == G_TYPE_PARAM_INT) return g_value_get_int(v1) == g_value_get_int(v2); if (generic == G_TYPE_PARAM_UINT) return g_value_get_uint(v1) == g_value_get_uint(v2); if (generic == G_TYPE_PARAM_LONG) return g_value_get_long(v1) == g_value_get_long(v2); if (generic == G_TYPE_PARAM_ULONG) return g_value_get_ulong(v1) == g_value_get_ulong(v2); if (generic == G_TYPE_PARAM_ENUM) return g_value_get_enum(v1) == g_value_get_enum(v2); if (generic == G_TYPE_PARAM_FLAGS) return g_value_get_flags(v1) == g_value_get_flags(v2); if (generic == G_TYPE_PARAM_UINT64) return g_value_get_uint64(v1) == g_value_get_uint64(v2); if (generic == G_TYPE_PARAM_INT64) return g_value_get_int64(v1) == g_value_get_int64(v2); if (generic == G_TYPE_PARAM_FLOAT) return g_value_get_float(v1) == g_value_get_float(v2); if (generic == G_TYPE_PARAM_DOUBLE) return g_value_get_double(v1) == g_value_get_double(v2); if (generic == G_TYPE_PARAM_STRING) { const char *s1 = g_value_get_string(v1); const char *s2 = g_value_get_string(v2); if (s1 == s2) return TRUE; else return s1 && s2 && strcmp(s1, s2) == 0; } if (generic == G_TYPE_PARAM_BOXED) return g_value_get_boxed(v1) == g_value_get_boxed(v2); if (generic == G_TYPE_PARAM_POINTER) return g_value_get_pointer(v1) == g_value_get_pointer(v2); if (generic == G_TYPE_PARAM_OBJECT) return g_value_get_object(v1) == g_value_get_object(v2); else { /* Fallback: convert to a string and compare that. * This is very slow, print a warning if we use it * so we can add another case. */ char *s1; char *s2; gboolean equal; s1 = g_strdup_value_contents(v1); s2 = g_strdup_value_contents(v2); equal = strcmp(s1, s2) == 0; printf("vips_value_equal: no case for %s, %s\n", s1, s2); printf("\tt1 %d, %s\n", (int) t1, g_type_name(t1)); printf("\tt2 %d, %s\n", (int) t2, g_type_name(t2)); printf("\tgeneric %d, %s\n", (int) G_VALUE_TYPE(generic), g_type_name(generic)); g_free(s1); g_free(s2); return equal; } } static void * vips_object_hash_arg(VipsObject *object, GParamSpec *pspec, VipsArgumentClass *argument_class, VipsArgumentInstance *argument_instance, void *a, void *b) { unsigned int *hash = (unsigned int *) a; if ((argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) && (argument_class->flags & VIPS_ARGUMENT_INPUT) && !(argument_class->flags & VIPS_ARGUMENT_NON_HASHABLE) && argument_instance->assigned) { const char *name = g_param_spec_get_name(pspec); GType type = G_PARAM_SPEC_VALUE_TYPE(pspec); GValue value = G_VALUE_INIT; g_value_init(&value, type); g_object_get_property(G_OBJECT(object), name, &value); *hash = (*hash << 1) ^ vips_value_hash(pspec, &value); g_value_unset(&value); } return NULL; } /* Find a hash from the input arguments to a VipsOperstion. */ static unsigned int vips_operation_hash(VipsOperation *operation) { if (!operation->found_hash) { guint hash; /* Include the operation type in the hash. */ hash = (guint) G_OBJECT_TYPE(operation); (void) vips_argument_map(VIPS_OBJECT(operation), vips_object_hash_arg, &hash, NULL); /* Make sure we can't have a zero hash value. */ hash |= 1; operation->hash = hash; operation->found_hash = TRUE; } return operation->hash; } static void * vips_object_equal_arg(VipsObject *object, GParamSpec *pspec, VipsArgumentClass *argument_class, VipsArgumentInstance *argument_instance, void *a, void *b) { VipsObject *other = (VipsObject *) a; const char *name = g_param_spec_get_name(pspec); GType type = G_PARAM_SPEC_VALUE_TYPE(pspec); GValue v1 = G_VALUE_INIT; GValue v2 = G_VALUE_INIT; gboolean equal; /* Only test assigned input constructor args. Avoid the nohash args as * well. */ if (!(argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) || !(argument_class->flags & VIPS_ARGUMENT_INPUT) || (argument_class->flags & VIPS_ARGUMENT_NON_HASHABLE) || !argument_instance->assigned) return NULL; /* If this is an optional arg, we need to check that this was * assigned on @other as well. */ if (!(argument_class->flags & VIPS_ARGUMENT_REQUIRED) && !vips_object_argument_isset(other, name)) /* Optional and was not set on other ... we've found a * difference! */ return object; g_value_init(&v1, type); g_value_init(&v2, type); g_object_get_property(G_OBJECT(object), name, &v1); g_object_get_property(G_OBJECT(other), name, &v2); equal = vips_value_equal(pspec, &v1, &v2); g_value_unset(&v1); g_value_unset(&v2); /* Stop (return non-NULL) if we've found a difference. */ return !equal ? object : NULL; } /* Are two objects equal, ie. have the same inputs. */ static gboolean vips_operation_equal(VipsOperation *a, VipsOperation *b) { if (a == b) return TRUE; if (G_OBJECT_TYPE(a) == G_OBJECT_TYPE(b) && vips_operation_hash(a) == vips_operation_hash(b) && !vips_argument_map(VIPS_OBJECT(a), vips_object_equal_arg, b, NULL)) return TRUE; return FALSE; } void * vips__cache_once_init(void *data) { vips_cache_lock = vips_g_mutex_new(); vips_cache_table = g_hash_table_new( (GHashFunc) vips_operation_hash, (GEqualFunc) vips_operation_equal); return NULL; } void vips__cache_init(void) { static GOnce once = G_ONCE_INIT; VIPS_ONCE(&once, vips__cache_once_init, NULL); } static void * vips_cache_print_fn(void *value, void *a, void *b) { VipsOperationCacheEntry *entry = value; char str[32768]; VipsBuf buf = VIPS_BUF_STATIC(str); vips_object_to_string(VIPS_OBJECT(entry->operation), &buf); printf("%p - %s\n", value, vips_buf_all(&buf)); return NULL; } static void vips_cache_print_nolock(void) { if (vips_cache_table) { printf("Operation cache:\n"); vips_hash_table_map(vips_cache_table, vips_cache_print_fn, NULL, NULL); } } /** * vips_cache_print: * * Print the whole operation cache to stdout. Handy for debugging. */ void vips_cache_print(void) { g_mutex_lock(vips_cache_lock); vips_cache_print_nolock(); g_mutex_unlock(vips_cache_lock); } static void * vips_object_unref_arg(VipsObject *object, GParamSpec *pspec, VipsArgumentClass *argument_class, VipsArgumentInstance *argument_instance, void *a, void *b) { if ((argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) && (argument_class->flags & VIPS_ARGUMENT_OUTPUT) && argument_instance->assigned && G_IS_PARAM_SPEC_OBJECT(pspec)) { GObject *value; /* This will up the ref count for us. */ g_object_get(G_OBJECT(object), g_param_spec_get_name(pspec), &value, NULL); /* Drop the ref we just got, then drop the ref we make when we * added to the cache. */ g_object_unref(value); g_object_unref(value); } return NULL; } static void vips_cache_unref(VipsOperation *operation) { #ifdef DEBUG printf("vips_cache_unref: "); vips_object_print_summary(VIPS_OBJECT(operation)); #endif /*DEBUG*/ (void) vips_argument_map(VIPS_OBJECT(operation), vips_object_unref_arg, NULL, NULL); g_object_unref(operation); } static VipsOperationCacheEntry * vips_cache_operation_get(VipsOperation *operation) { return g_hash_table_lookup(vips_cache_table, operation); } /* Remove an operation from the cache. */ static void vips_cache_remove(VipsOperation *operation) { VipsOperationCacheEntry *entry = vips_cache_operation_get(operation); #ifdef DEBUG printf("vips_cache_remove: "); vips_object_print_summary(VIPS_OBJECT(operation)); #endif /*DEBUG*/ g_assert(entry); if (entry->invalidate_id) { g_signal_handler_disconnect(operation, entry->invalidate_id); entry->invalidate_id = 0; } g_hash_table_remove(vips_cache_table, operation); vips_cache_unref(operation); g_free(entry); } static void * vips_object_ref_arg(VipsObject *object, GParamSpec *pspec, VipsArgumentClass *argument_class, VipsArgumentInstance *argument_instance, void *a, void *b) { if ((argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) && (argument_class->flags & VIPS_ARGUMENT_OUTPUT) && argument_instance->assigned && G_IS_PARAM_SPEC_OBJECT(pspec)) { GObject *value; /* This will up the ref count for us. */ g_object_get(G_OBJECT(object), g_param_spec_get_name(pspec), &value, NULL); } return NULL; } static void vips_operation_touch(VipsOperation *operation) { VipsOperationCacheEntry *entry = vips_cache_operation_get(operation); vips_cache_time += 1; /* Don't up the time for invalid items -- we want them to fall out of * cache. */ if (!entry->invalid) entry->time = vips_cache_time; } /* Ref an operation for the cache. The operation itself, plus all the output * objects it makes. */ static void vips_cache_ref(VipsOperation *operation) { #ifdef DEBUG printf("vips_cache_ref: "); vips_object_print_summary(VIPS_OBJECT(operation)); #endif /*DEBUG*/ g_object_ref(operation); (void) vips_argument_map(VIPS_OBJECT(operation), vips_object_ref_arg, NULL, NULL); vips_operation_touch(operation); } static void vips_cache_invalidate_cb(VipsOperation *operation, VipsOperationCacheEntry *entry) { #ifdef DEBUG printf("vips_cache_invalidate_cb: "); vips_object_print_summary(VIPS_OBJECT(operation)); #endif /*DEBUG*/ entry->invalid = TRUE; } static void vips_cache_insert(VipsOperation *operation) { VipsOperationCacheEntry *entry = g_new(VipsOperationCacheEntry, 1); #ifdef VIPS_DEBUG printf("vips_cache_insert: adding to cache"); vips_object_print_dump(VIPS_OBJECT(operation)); #endif /*VIPS_DEBUG*/ entry->operation = operation; entry->time = 0; entry->invalidate_id = 0; entry->invalid = FALSE; g_hash_table_insert(vips_cache_table, operation, entry); vips_cache_ref(operation); /* If the operation signals "invalidate", we must tag this cache entry * for removal. */ entry->invalidate_id = g_signal_connect(operation, "invalidate", G_CALLBACK(vips_cache_invalidate_cb), entry); } static void * vips_cache_get_first_fn(void *value, void *a, void *b) { return value; } /* Return the first item. */ static VipsOperation * vips_cache_get_first(void) { VipsOperationCacheEntry *entry; if (vips_cache_table && (entry = vips_hash_table_map(vips_cache_table, vips_cache_get_first_fn, NULL, NULL))) return VIPS_OPERATION(entry->operation); return NULL; } /** * vips_cache_drop_all: * * Drop the whole operation cache, handy for leak tracking. Also called * automatically on vips_shutdown(). */ void vips_cache_drop_all(void) { #ifdef VIPS_DEBUG printf("vips_cache_drop_all:\n"); #endif /*VIPS_DEBUG*/ g_mutex_lock(vips_cache_lock); if (vips_cache_table) { VipsOperation *operation; if (vips__cache_dump) vips_cache_print_nolock(); /* We can't modify the hash in the callback from * g_hash_table_foreach() and friends. Repeatedly drop the * first item instead. */ while ((operation = vips_cache_get_first())) vips_cache_remove(operation); VIPS_FREEF(g_hash_table_unref, vips_cache_table); } g_mutex_unlock(vips_cache_lock); } static void vips_cache_get_lru_cb(VipsOperation *key, VipsOperationCacheEntry *value, VipsOperationCacheEntry **best) { if (!*best || (*best)->time > value->time) *best = value; } /* Get the least-recently-used cache item. * * TODO ... will this be too expensive? probably not */ static VipsOperation * vips_cache_get_lru(void) { VipsOperationCacheEntry *entry; entry = NULL; g_hash_table_foreach(vips_cache_table, (GHFunc) vips_cache_get_lru_cb, &entry); if (entry) return entry->operation; return NULL; } /* Is the cache full? Drop until it's not. */ static void vips_cache_trim(void) { VipsOperation *operation; g_mutex_lock(vips_cache_lock); while (vips_cache_table && (g_hash_table_size(vips_cache_table) > vips_cache_max || vips_tracked_get_files() > vips_cache_max_files || vips_tracked_get_mem() > vips_cache_max_mem) && (operation = vips_cache_get_lru())) { #ifdef DEBUG printf("vips_cache_trim: trimming "); vips_object_print_summary(VIPS_OBJECT(operation)); #endif /*DEBUG*/ vips_cache_remove(operation); } g_mutex_unlock(vips_cache_lock); } /** * vips_cache_operation_buildp: (skip) * @operation: pointer to operation to lookup * * Look up @operation in the cache. If we get a hit, unref @operation, ref the * old one and return that through the argument pointer. * * If we miss, build and add @operation. * * Operators that have been tagged as invalid by the `invalidate` signal are * removed from cache. * * Operators with the #VIPS_OPERATION_BLOCKED flag are never executed. * * Operators with the #VIPS_OPERATION_REVALIDATE flag are always executed and * any old cache value is replaced. * * Operators with the #VIPS_OPERATION_NOCACHE flag are never cached. * * Returns: 0 on success, or -1 on error. */ int vips_cache_operation_buildp(VipsOperation **operation) { /* Any flags for this new operation we are building. */ VipsOperationFlags flags = vips_operation_get_flags(*operation); VipsOperationCacheEntry *hit; g_assert(VIPS_IS_OPERATION(*operation)); #ifdef VIPS_DEBUG printf("vips_cache_operation_buildp: %p %s\n", *operation, VIPS_OBJECT_GET_CLASS(*operation)->nickname); vips_object_print_dump(VIPS_OBJECT(*operation)); #endif /*VIPS_DEBUG*/ g_mutex_lock(vips_cache_lock); hit = vips_cache_operation_get(*operation); /* We need to remove the existing cache entry if it's been tagged * as invalid, if it's been blocked, or someone has requested * revalidation. */ if (hit) { if (hit->invalid || (flags & VIPS_OPERATION_BLOCKED) || (flags & VIPS_OPERATION_REVALIDATE)) { vips_cache_remove(hit->operation); hit = NULL; } } /* If we still have a hit, return that and junk the operation we were * passed. */ if (hit) { vips_cache_ref(hit->operation); g_object_unref(*operation); *operation = hit->operation; if (vips__cache_trace) { printf("vips cache*: "); vips_object_print_summary(VIPS_OBJECT(*operation)); } } g_mutex_unlock(vips_cache_lock); /* If there was a miss, we need to build this operation and add * it to the cache if appropriate. */ if (!hit) { if (vips_object_build(VIPS_OBJECT(*operation))) return -1; /* Retrieve the flags again, as vips_foreign_load_build() may * set load->nocache. */ flags = vips_operation_get_flags(*operation); g_mutex_lock(vips_cache_lock); /* If two threads build the same operation at the same time, * we can get multiple adds. Let the first one win. See * https://github.com/libvips/libvips/pull/181 */ if (!vips_cache_operation_get(*operation)) { /* Has to be after _build() so we can see output args. */ if (vips__cache_trace) { if (flags & VIPS_OPERATION_NOCACHE) printf("vips cache : "); else printf("vips cache+: "); vips_object_print_summary( VIPS_OBJECT(*operation)); } if (!(flags & VIPS_OPERATION_NOCACHE)) vips_cache_insert(*operation); } g_mutex_unlock(vips_cache_lock); } vips_cache_trim(); return 0; } /** * vips_cache_operation_build: * @operation: (transfer none): operation to lookup * * A binding-friendly version of vips_cache_operation_buildp(). * * After calling this, @operation has the same ref count as when it went in, * and the result must be freed with vips_object_unref_outputs() and * g_object_unref(). * * Returns: (transfer full): The built operation. */ VipsOperation * vips_cache_operation_build(VipsOperation *operation) { VipsOperation *orig_operation = operation; /* Stop it being unreffed for us on hit. */ g_object_ref(orig_operation); if (vips_cache_operation_buildp(&operation)) { g_object_unref(orig_operation); return NULL; } return operation; } /** * vips_cache_set_max: * @max: maximum number of operation to cache * * Set the maximum number of operations we keep in cache. */ void vips_cache_set_max(int max) { vips_cache_max = max; vips_cache_trim(); } /** * vips_cache_set_max_mem: * @max_mem: maximum amount of tracked memory we use * * Set the maximum amount of tracked memory we allow before we start dropping * cached operations. See vips_tracked_get_mem(). * * libvips only tracks memory it allocates, it can't track memory allocated by * external libraries. If you use an operation like vips_magickload(), most of * the memory it uses won't be included. * * See also: vips_tracked_get_mem(). */ void vips_cache_set_max_mem(size_t max_mem) { vips_cache_max_mem = max_mem; vips_cache_trim(); } /** * vips_cache_get_max: * * Get the maximum number of operations we keep in cache. * * Returns: the maximum number of operations we keep in cache */ int vips_cache_get_max(void) { return vips_cache_max; } /** * vips_cache_get_size: * * Get the current number of operations in cache. * * Returns: get the current number of operations in cache. */ int vips_cache_get_size(void) { guint size; g_mutex_lock(vips_cache_lock); size = 0; if (vips_cache_table) size = g_hash_table_size(vips_cache_table); g_mutex_unlock(vips_cache_lock); return size; } /** * vips_cache_get_max_mem: * * Get the maximum amount of tracked memory we allow before we start dropping * cached operations. See vips_tracked_get_mem(). * * See also: vips_tracked_get_mem(). * * Returns: the maximum amount of tracked memory we allow */ size_t vips_cache_get_max_mem(void) { return vips_cache_max_mem; } /** * vips_cache_get_max_files: * * Get the maximum number of tracked files we allow before we start dropping * cached operations. See vips_tracked_get_files(). * * libvips only tracks file descriptors it allocates, it can't track ones * allocated by external libraries. If you use an operation like * vips_magickload(), most of the descriptors it uses won't be included. * * See also: vips_tracked_get_files(). * * Returns: the maximum number of tracked files we allow */ int vips_cache_get_max_files(void) { return vips_cache_max_files; } /** * vips_cache_set_max_files: * @max_files: max open files we allow * * Set the maximum number of tracked files we allow before we start dropping * cached operations. See vips_tracked_get_files(). * * See also: vips_tracked_get_files(). */ void vips_cache_set_max_files(int max_files) { vips_cache_max_files = max_files; vips_cache_trim(); } /** * vips_cache_set_dump: * @dump: if %TRUE, dump the operation cache on exit * * Handy for debugging. Print the operation cache to stdout just before exit. * * See also: vips_cache_set_trace(). */ void vips_cache_set_dump(gboolean dump) { vips__cache_dump = dump; } /** * vips_cache_set_trace: * @trace: if %TRUE, trace the operation cache * * Handy for debugging. Print operation cache actions to stdout as we run. * * You can set the environment variable `VIPS_TRACE` to turn this option on, or * use the command-line flag `--vips-cache-trace`. * * See also: vips_cache_set_dump(). */ void vips_cache_set_trace(gboolean trace) { vips__cache_trace = trace; } /** * vips_cache_operation_add: (skip) * * No longer in the public API. */ void vips_cache_operation_add(VipsOperation *operation) { } /** * vips_cache_operation_lookup: (skip) * * No longer in the public API. */ VipsOperation * vips_cache_operation_lookup(VipsOperation *operation) { return NULL; } libvips-8.15.1/libvips/iofuncs/connection.c000066400000000000000000000105601454007373500207110ustar00rootroot00000000000000/* A byte source/sink .. it can be a pipe, file descriptor, memory area, * socket, node.js stream, etc. * * J.Cupitt, 19/6/14 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #include #include #include #include #include #include #include #include /** * SECTION: connection * @short_description: a source/sink of bytes, perhaps a network socket * @stability: Stable * @see_also: foreign * @include: vips/vips.h * @title: VipsConnection * * A #VipsConnection is a source or sink of bytes for something like jpeg * loading, see for example vips_jpegload_source(). * * It can be connected to a network socket, for example, or perhaps * a node.js stream, or to an area of memory. * * Subclass to add other input sources. Use #VipsSourceCustom and * #VipsTargetCustom to make a source or target with action signals for * ::read, ::write and ::seek. */ /** * VipsConnection: * * A #VipsConnection is a source or sink of bytes for something like jpeg * loading. It can be connected to a network socket, for example. */ G_DEFINE_ABSTRACT_TYPE(VipsConnection, vips_connection, VIPS_TYPE_OBJECT); static void vips_connection_finalize(GObject *gobject) { VipsConnection *connection = (VipsConnection *) gobject; #ifdef VIPS_DEBUG VIPS_DEBUG_MSG("vips_connection_finalize: "); vips_object_print_name(VIPS_OBJECT(gobject)); VIPS_DEBUG_MSG("\n"); #endif /*VIPS_DEBUG*/ if (connection->tracked_descriptor >= 0) { VIPS_DEBUG_MSG(" tracked_close()\n"); vips_tracked_close(connection->tracked_descriptor); connection->tracked_descriptor = -1; connection->descriptor = -1; } if (connection->close_descriptor >= 0) { VIPS_DEBUG_MSG(" close()\n"); close(connection->close_descriptor); connection->close_descriptor = -1; connection->descriptor = -1; } VIPS_FREE(connection->filename); G_OBJECT_CLASS(vips_connection_parent_class)->finalize(gobject); } static void vips_connection_class_init(VipsConnectionClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); gobject_class->finalize = vips_connection_finalize; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; VIPS_ARG_INT(class, "descriptor", 1, _("Descriptor"), _("File descriptor for read or write"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsConnection, descriptor), -1, 1000000000, 0); VIPS_ARG_STRING(class, "filename", 2, _("Filename"), _("Name of file to open"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsConnection, filename), NULL); } static void vips_connection_init(VipsConnection *connection) { connection->descriptor = -1; connection->tracked_descriptor = -1; connection->close_descriptor = -1; } /** * vips_connection_filename: * @connection: connection to operate on * * Returns: any filename associated with this connection, or NULL. */ const char * vips_connection_filename(VipsConnection *connection) { return connection->filename; } /** * vips_connection_nick: * @connection: connection to operate on * * Returns: a string describing this connection which could be displayed to a * user. */ const char * vips_connection_nick(VipsConnection *connection) { return connection->filename ? connection->filename : VIPS_OBJECT(connection)->nickname; } libvips-8.15.1/libvips/iofuncs/dbuf.c000066400000000000000000000225671454007373500175040ustar00rootroot00000000000000/* A dynamic memory buffer that expands as you write. */ /* Copyright (C) 1991-2003 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include /** * vips_dbuf_init: * @dbuf: the buffer * * Initialize @dbuf. */ void vips_dbuf_init(VipsDbuf *dbuf) { dbuf->data = NULL; dbuf->allocated_size = 0; dbuf->data_size = 0; dbuf->write_point = 0; } /** * vips_dbuf_minimum_size: * @dbuf: the buffer * @size: the minimum size * * Make sure @dbuf is at least @size bytes. * * Returns: %FALSE on out of memory, %TRUE otherwise. */ gboolean vips_dbuf_minimum_size(VipsDbuf *dbuf, size_t size) { if (size > dbuf->allocated_size) { const size_t new_allocated_size = 3 * (16 + size) / 2; unsigned char *new_data; if (!(new_data = g_try_realloc(dbuf->data, new_allocated_size))) { vips_error("VipsDbuf", "%s", _("out of memory")); return FALSE; } dbuf->data = new_data; dbuf->allocated_size = new_allocated_size; } return TRUE; } /** * vips_dbuf_allocate: * @dbuf: the buffer * @size: the size to allocate * * Make sure @dbuf has at least @size bytes available after the write point. * * Returns: %FALSE on out of memory, %TRUE otherwise. */ gboolean vips_dbuf_allocate(VipsDbuf *dbuf, size_t size) { return vips_dbuf_minimum_size(dbuf, dbuf->write_point + size); } /** * vips_dbuf_read: * @dbuf: the buffer * @data: read to this area * @size: read up to this many bytes * * Up to @size bytes are read from the buffer and copied to @data. The number * of bytes transferred is returned. * * Returns: the number of bytes transferred. */ size_t vips_dbuf_read(VipsDbuf *dbuf, unsigned char *data, size_t size) { const size_t available = dbuf->data_size - dbuf->write_point; const size_t copied = VIPS_MIN(size, available); memcpy(data, dbuf->data + dbuf->write_point, copied); dbuf->write_point += copied; return copied; } /** * vips_dbuf_get_write: * @dbuf: the buffer * @size: (allow-none): optionally return length in bytes here * * Return a pointer to an area you can write to, return length of area in * @size. Use vips_dbuf_allocate() before this call to set a minimum amount of * space to have available. * * The write point moves to just beyond the returned block. Use * vips_dbuf_seek() to move it back again. * * Returns: (transfer none): start of write area. */ unsigned char * vips_dbuf_get_write(VipsDbuf *dbuf, size_t *size) { unsigned char *write = dbuf->data + dbuf->write_point; const size_t available = dbuf->allocated_size - dbuf->write_point; memset(write, 0, available); dbuf->write_point = dbuf->allocated_size; dbuf->data_size = dbuf->allocated_size; if (size) *size = available; return write; } /** * vips_dbuf_write: * @dbuf: the buffer * @data: the data to write to the buffer * @size: the size of the len to write * * Append @size bytes from @data. @dbuf expands if necessary. * * Returns: %FALSE on out of memory, %TRUE otherwise. */ gboolean vips_dbuf_write(VipsDbuf *dbuf, const unsigned char *data, size_t size) { if (!vips_dbuf_allocate(dbuf, size)) return FALSE; memcpy(dbuf->data + dbuf->write_point, data, size); dbuf->write_point += size; dbuf->data_size = VIPS_MAX(dbuf->data_size, dbuf->write_point); return TRUE; } /** * vips_dbuf_writef: * @dbuf: the buffer * @fmt: printf()-style format string * @...: arguments to format string * * Format the string and write to @dbuf. * * Returns: %FALSE on out of memory, %TRUE otherwise. */ gboolean vips_dbuf_writef(VipsDbuf *dbuf, const char *fmt, ...) { va_list ap; char *line; va_start(ap, fmt); line = g_strdup_vprintf(fmt, ap); va_end(ap); if (vips_dbuf_write(dbuf, (unsigned char *) line, strlen(line))) { g_free(line); return FALSE; } g_free(line); return TRUE; } /** * vips_dbuf_write_amp: * @dbuf: the buffer * @str: string to write * * Write @str to @dbuf, but escape stuff that xml hates in text. Our * argument string is utf-8. * * XML rules: * * - We must escape &<> * - Don't escape \n, \t, \r * - Do escape the other ASCII codes. * * Returns: %FALSE on out of memory, %TRUE otherwise. */ gboolean vips_dbuf_write_amp(VipsDbuf *dbuf, const char *str) { const char *p; for (p = str; *p; p++) if (*p < 32 && *p != '\n' && *p != '\t' && *p != '\r') { /* You'd think we could output "%x;", but xml * 1.0 parsers barf on that. xml 1.1 allows this, but * there are almost no parsers. * * U+2400 onwards are unicode glyphs for the ASCII * control characters, so we can use them -- thanks * electroly. */ if (!vips_dbuf_writef(dbuf, "&#x%04x;", 0x2400 + *p)) return FALSE; } else if (*p == '<') { if (!vips_dbuf_write(dbuf, (guchar *) "<", 4)) return FALSE; } else if (*p == '>') { if (!vips_dbuf_write(dbuf, (guchar *) ">", 4)) return FALSE; } else if (*p == '&') { if (!vips_dbuf_write(dbuf, (guchar *) "&", 5)) return FALSE; } else { if (!vips_dbuf_write(dbuf, (guchar *) p, 1)) return FALSE; } return TRUE; } /** * vips_dbuf_reset: * @dbuf: the buffer * * Reset the buffer to empty. No memory is freed, just the data size and * write point are reset. */ void vips_dbuf_reset(VipsDbuf *dbuf) { dbuf->write_point = 0; dbuf->data_size = 0; } /** * vips_dbuf_destroy: * @dbuf: the buffer * * Destroy @dbuf. This frees any allocated memory. */ void vips_dbuf_destroy(VipsDbuf *dbuf) { vips_dbuf_reset(dbuf); VIPS_FREE(dbuf->data); dbuf->allocated_size = 0; } /** * vips_dbuf_seek: * @dbuf: the buffer * @offset: how to move the write point * @whence: from start, from end, from current * * Move the write point. @whence can be %SEEK_SET, %SEEK_CUR, %SEEK_END, with * the usual meaning. */ gboolean vips_dbuf_seek(VipsDbuf *dbuf, off_t offset, int whence) { off_t new_write_point; switch (whence) { case SEEK_SET: new_write_point = offset; break; case SEEK_END: new_write_point = dbuf->data_size + offset; break; case SEEK_CUR: new_write_point = dbuf->write_point + offset; break; default: g_assert(0); new_write_point = dbuf->write_point; break; } if (new_write_point < 0) { vips_error("VipsDbuf", "%s", "negative seek"); return FALSE; } /* Possibly need to grow the buffer */ if (!vips_dbuf_minimum_size(dbuf, new_write_point)) return FALSE; dbuf->write_point = new_write_point; if (dbuf->data_size < dbuf->write_point) { memset(dbuf->data + dbuf->data_size, 0, dbuf->write_point - dbuf->data_size); dbuf->data_size = dbuf->write_point; } return TRUE; } /** * vips_dbuf_truncate: * @dbuf: the buffer * * Truncate the data so that it ends at the write point. No memory is freed. */ void vips_dbuf_truncate(VipsDbuf *dbuf) { dbuf->data_size = dbuf->write_point; } /** * vips_dbuf_tell: * @dbuf: the buffer * * Returns: the current write point */ off_t vips_dbuf_tell(VipsDbuf *dbuf) { return dbuf->write_point; } /** * vips_dbuf_null_terminate: * @dbuf: the buffer * * Make sure the byte after the last data byte is `\0`. This extra byte is not * included in the data size and the write point is not moved. * * This makes it safe to treat the dbuf contents as a C string. * * Returns: %FALSE on out of memory, %TRUE otherwise. */ static gboolean vips_dbuf_null_terminate(VipsDbuf *dbuf) { if (!vips_dbuf_minimum_size(dbuf, dbuf->data_size + 1)) return FALSE; dbuf->data[dbuf->data_size] = 0; return TRUE; } /** * vips_dbuf_steal: * @dbuf: the buffer * @size: (allow-none): optionally return length in bytes here * * Destroy a buffer, but rather than freeing memory, a pointer is returned. * This must be freed with g_free(). * * A `\0` is appended, but not included in the character count. This is so the * pointer can be safely treated as a C string. * * Returns: (transfer full): The pointer held by @dbuf. */ unsigned char * vips_dbuf_steal(VipsDbuf *dbuf, size_t *size) { unsigned char *data; vips_dbuf_null_terminate(dbuf); data = dbuf->data; if (size) *size = dbuf->data_size; dbuf->data = NULL; vips_dbuf_destroy(dbuf); return data; } /** * vips_dbuf_string: * @dbuf: the buffer * @size: (allow-none): optionally return length in bytes here * * Return a pointer to @dbuf's internal data. * * A `\0` is appended, but not included in the character count. This is so the * pointer can be safely treated as a C string. * * Returns: (transfer none): The pointer held by @dbuf. */ unsigned char * vips_dbuf_string(VipsDbuf *dbuf, size_t *size) { vips_dbuf_null_terminate(dbuf); if (size) *size = dbuf->data_size; return dbuf->data; } libvips-8.15.1/libvips/iofuncs/error.c000066400000000000000000000711261454007373500177100ustar00rootroot00000000000000/* error.c --- error message handling * * Copyright: N. Dessipris * Written on: 18/03/1991 * Updated on: 9/7/92 KM * 20/12/2003 JC * - i18n added, domain now separate arg * 14/2/07 * - lock around error buffer changes * 20/2/08 * - lock around warnings and diagnostics too, why not * 2/10/09 * - error_exit() moved here * - gtkdoc comments * 24/6/10 * - fmt to error_exit() may be NULL * 12/9/19 [dineshkannaa] * - add vips_error_buffer_copy() */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include #include #ifdef G_OS_WIN32 #include #include #endif /*G_OS_WIN32*/ /** * SECTION: errors * @short_description: error messages and error handling * @stability: Stable * @include: vips/vips.h * * VIPS maintains an error buffer (a log of localised text messages), * a set of functions * for adding messages, and a way to access and clear the buffer. * * The error buffer is global, that is, it is shared between all threads. You * can add to the buffer from any thread (there is a lock to prevent * corruption), but it's sensible to only read and clear the buffer from the * main thread of execution. * * The general principle is: if you detect an error, log a message for the * user. If a function you call detects an error, just propagate it and don't * add another message. * * |[ * VipsImage *im; * * if (!(im = vips_image_new_from_file(filename, NULL))) * // vips_image_new_from_file() will set a message, we don't need to * return -1; * * if (vips_image_get_width(im) < 100) { * // we have detected an error, we must set a message * vips_error("myprogram", "%s", _("width too small")); * return -1; * } * ]| * * The domain argument most of these functions take is not localised and is * supposed to indicate the component which failed. * * libvips uses g_warning() and g_info() to send warning and information * messages to the user. You can use the usual glib mechanisms to display or * divert these messages. For example, info messages are hidden by default, but * you can see them with: * * |[ * $ G_MESSAGES_DEBUG=VIPS vipsthumbnail k2.jpg * VIPS-INFO: thumbnailing k2.jpg * VIPS-INFO: selected loader is VipsForeignLoadJpegFile * VIPS-INFO: input size is 1450 x 2048 * VIPS-INFO: loading jpeg with factor 8 pre-shrink * VIPS-INFO: converting to processing space srgb * VIPS-INFO: residual reducev by 0.5 * VIPS-INFO: 13 point mask * VIPS-INFO: using vector path * VIPS-INFO: residual reduceh by 0.5 * VIPS-INFO: 13 point mask * VIPS-INFO: thumbnailing k2.jpg as ./tn_k2.jpg * ]| * */ /* Make global array to keep the error message buffer. */ #define VIPS_MAX_ERROR (10240) static char vips_error_text[VIPS_MAX_ERROR] = ""; static VipsBuf vips_error_buf = VIPS_BUF_STATIC(vips_error_text); static int vips_error_freeze_count = 0; /** * vips_error_freeze: * * Stop errors being logged. Use vips_error_thaw() to unfreeze. You can * nest freeze/thaw pairs. */ void vips_error_freeze(void) { g_mutex_lock(vips__global_lock); g_assert(vips_error_freeze_count >= 0); vips_error_freeze_count += 1; g_mutex_unlock(vips__global_lock); } /** * vips_error_thaw: * * Re-enable error logging. */ void vips_error_thaw(void) { g_mutex_lock(vips__global_lock); vips_error_freeze_count -= 1; g_assert(vips_error_freeze_count >= 0); g_mutex_unlock(vips__global_lock); } /** * vips_error_buffer: * * Get a pointer to the start of the error buffer as a C string. * The string is owned by the error system and must not be freed. * * See also: vips_error_clear(). * * Returns: the error buffer as a C string which must not be freed */ const char * vips_error_buffer(void) { const char *msg; g_mutex_lock(vips__global_lock); msg = vips_buf_all(&vips_error_buf); g_mutex_unlock(vips__global_lock); return msg; } /** * vips_error_buffer_copy: * * Return a copy of the vips error buffer, and clear it. * * Returns: a copy of the libvips error buffer */ char * vips_error_buffer_copy(void) { char *msg; g_mutex_lock(vips__global_lock); msg = g_strdup(vips_buf_all(&vips_error_buf)); vips_buf_rewind(&vips_error_buf); g_mutex_unlock(vips__global_lock); return msg; } /* Some systems do not have va_copy() ... this might work (it does on MSVC, * apparently). * * FIXME ... this should be in configure.in */ #ifndef va_copy #define va_copy(d, s) ((d) = (s)) #endif /** * vips_verror: * @domain: the source of the error * @fmt: printf()-style format string for the error * @ap: arguments to the format string * * Append a message to the error buffer. * * See also: vips_error(). */ void vips_verror(const char *domain, const char *fmt, va_list ap) { #ifdef VIPS_DEBUG { char txt[256]; VipsBuf buf = VIPS_BUF_STATIC(txt); va_list ap2; vips_buf_appendf(&buf, "%s: ", domain); va_copy(ap2, ap); vips_buf_vappendf(&buf, fmt, ap2); vips_buf_appends(&buf, "\n"); VIPS_DEBUG_MSG("vips_verror: %s", vips_buf_all(&buf)); } #endif /*VIPS_DEBUG*/ g_mutex_lock(vips__global_lock); g_assert(vips_error_freeze_count >= 0); if (!vips_error_freeze_count) { if (domain) vips_buf_appendf(&vips_error_buf, "%s: ", domain); vips_buf_vappendf(&vips_error_buf, fmt, ap); vips_buf_appends(&vips_error_buf, "\n"); } g_mutex_unlock(vips__global_lock); if (vips__fatal) vips_error_exit("vips__fatal"); } /** * vips_error: * @domain: the source of the error * @fmt: printf()-style format string for the error * @...: arguments to the format string * * Format the string in the style of printf() and append to the error buffer. * * See also: vips_error_system(), vips_verror(). */ void vips_error(const char *domain, const char *fmt, ...) { va_list ap; va_start(ap, fmt); vips_verror(domain, fmt, ap); va_end(ap); } /** * vips_verror_system: * @err: the system error code * @domain: the source of the error * @fmt: printf()-style format string for the error * @ap: arguments to the format string * * Format the string in the style of printf() and append to the error buffer. * Then create and append a localised message based on the system error code, * usually the value of errno. * * See also: vips_error_system(). */ void vips_verror_system(int err, const char *domain, const char *fmt, va_list ap) { vips_verror(domain, fmt, ap); #ifdef G_OS_WIN32 { char *buf; if (FormatMessageA( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM, NULL, err, MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPSTR) &buf, 0, NULL)) { vips_error(_("windows error"), "%s", buf); LocalFree(buf); } } #else /*!G_OS_WIN32*/ { char *buf; buf = g_locale_to_utf8(strerror(err), -1, NULL, NULL, NULL); vips_error(_("unix error"), "%s", buf); g_free(buf); } #endif /*G_OS_WIN32*/ } /** * vips_error_system: * @err: the system error code * @domain: the source of the error * @fmt: printf()-style format string for the error * @...: arguments to the format string * * Format the string in the style of printf() and append to the error buffer. * Then create and append a localised message based on the system error code, * usually the value of errno. * * See also: vips_verror_system(). */ void vips_error_system(int err, const char *domain, const char *fmt, ...) { va_list ap; va_start(ap, fmt); vips_verror_system(err, domain, fmt, ap); va_end(ap); } /** * vips_error_g: * @error: (out): glib error pointer * * This function sets the glib error pointer from the vips error buffer and * clears it. It's handy for returning errors to glib functions from vips. * * See vips_g_error() for the inverse operation. * * See also: g_set_error(), vips_g_error(). */ void vips_error_g(GError **error) { static GQuark vips_domain = 0; if (!vips_domain) vips_domain = g_quark_from_string("libvips"); /* glib does not expect a trailing '\n' and vips always has one. */ g_mutex_lock(vips__global_lock); vips_buf_removec(&vips_error_buf, '\n'); g_mutex_unlock(vips__global_lock); g_set_error(error, vips_domain, -1, "%s", vips_error_buffer()); vips_error_clear(); } /** * vips_g_error: * @error: glib error pointer * * This function adds the %GError to the vips error buffer and clears it. It's * the opposite of vips_error_g(). * * See also: vips_error_g(). */ void vips_g_error(GError **error) { if (error && *error) { vips_error("glib", "%s\n", (*error)->message); g_error_free(*error); *error = NULL; } } /** * vips_error_clear: * * Clear and reset the error buffer. This is typically called after presenting * an error to the user. * * See also: vips_error_buffer(). */ void vips_error_clear(void) { g_mutex_lock(vips__global_lock); vips_buf_rewind(&vips_error_buf); g_mutex_unlock(vips__global_lock); } /** * vips_error_exit: * @fmt: printf()-style format string for the message * @...: arguments to the format string * * Sends a formatted error message to stderr, then sends the contents of the * error buffer, if any, then shuts down vips and terminates the program with * an error code. * * @fmt may be %NULL, in which case only the error buffer is printed before * exiting. * * See also: vips_error(). */ void vips_error_exit(const char *fmt, ...) { if (fmt) { va_list ap; fprintf(stderr, "%s: ", vips_get_prgname()); va_start(ap, fmt); (void) vfprintf(stderr, fmt, ap); va_end(ap); fprintf(stderr, "\n"); } fprintf(stderr, "%s", vips_error_buffer()); vips_shutdown(); if (vips__fatal) abort(); else exit(1); } /** * vips_check_uncoded: * @domain: the originating domain for the error message * @im: image to check * * Check that the image is not coded. * If not, set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 on OK, or -1 on error. */ int vips_check_uncoded(const char *domain, VipsImage *im) { if (im->Coding != VIPS_CODING_NONE) { vips_error(domain, "%s", _("image must be uncoded")); return -1; } return 0; } /** * vips_check_coding_noneorlabq: * @domain: the originating domain for the error message * @im: image to check * * Check that the image is uncoded or LABQ coded. * If not, set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 on OK, or -1 on error. */ int vips_check_coding_noneorlabq(const char *domain, VipsImage *im) { /* These all have codings that extract/ifthenelse/etc can ignore. */ if (im->Coding != VIPS_CODING_NONE && im->Coding != VIPS_CODING_LABQ) { vips_error(domain, "%s", _("image coding must be 'none' or 'labq'")); return -1; } return 0; } /** * vips_check_coding_known: * @domain: the originating domain for the error message * @im: image to check * * Check that the image is uncoded, LABQ coded or RAD coded. * If not, set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 on OK, or -1 on error. */ int vips_check_coding_known(const char *domain, VipsImage *im) { /* These all have codings that extract/ifthenelse/etc can ignore. */ if (im->Coding != VIPS_CODING_NONE && im->Coding != VIPS_CODING_LABQ && im->Coding != VIPS_CODING_RAD) { vips_error(domain, "%s", _("unknown image coding")); return -1; } return 0; } /** * vips_check_coding: * @domain: the originating domain for the error message * @im: image to check * @coding: required coding * * Check that the image has the required @coding. * If not, set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 on OK, or -1 on error. */ int vips_check_coding(const char *domain, VipsImage *im, VipsCoding coding) { if (im->Coding != coding) { vips_error(domain, _("coding '%s' only"), vips_enum_nick(VIPS_TYPE_CODING, coding)); return -1; } return 0; } /** * vips_check_mono: * @domain: the originating domain for the error message * @im: image to check * * Check that the image has exactly one band. * Otherwise set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_mono(const char *domain, VipsImage *im) { if (im->Bands != 1) { vips_error(domain, "%s", _("image must one band")); return -1; } return 0; } /** * vips_check_bands: * @domain: the originating domain for the error message * @im: image to check * @bands: must have this many bands * * Check that the image has @bands bands. * Otherwise set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_bands(const char *domain, VipsImage *im, int bands) { if (im->Bands != bands) { vips_error(domain, _("image must have %d bands"), bands); return -1; } return 0; } /** * vips_check_bands_1or3: * @domain: the originating domain for the error message * @im: image to check * * Check that the image has either one or three bands. * Otherwise set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_bands_1or3(const char *domain, VipsImage *im) { if (im->Bands != 1 && im->Bands != 3) { vips_error(domain, "%s", _("image must have one or three bands")); return -1; } return 0; } /** * vips_check_bands_atleast: * @domain: the originating domain for the error message * @im: image to check * @bands: at least this many bands * * Check that the image has at least @bands bands. * Otherwise set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_bands_atleast(const char *domain, VipsImage *im, int bands) { if (im->Bands < bands) { vips_error(domain, _("image must have at least %d bands"), bands); return -1; } return 0; } /** * vips_check_bands_1orn: * @domain: the originating domain for the error message * @im1: first image to check * @im2: second image to check * * Check that the images have the same number of bands, or that one of the * images has just 1 band. * If not, set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 on OK, or -1 on error. */ int vips_check_bands_1orn(const char *domain, VipsImage *im1, VipsImage *im2) { if (im1->Bands != im2->Bands && (im1->Bands != 1 && im2->Bands != 1)) { vips_error(domain, "%s", _("images must have the same number of bands, " "or one must be single-band")); return -1; } return 0; } /** * vips_check_bands_1orn_unary: * @domain: the originating domain for the error message * @im: image to check * @n: number of bands, or 1 * * Check that an image has 1 or @n bands. Handy for unary operations, cf. * vips_check_bands_1orn(). * If not, set an error message * and return non-zero. * * See also: vips_check_bands_1orn(). * * Returns: 0 on OK, or -1 on error. */ int vips_check_bands_1orn_unary(const char *domain, VipsImage *im, int n) { if (im->Bands != 1 && im->Bands != n) { vips_error(domain, _("image must have 1 or %d bands"), n); return -1; } return 0; } /** * vips_check_noncomplex: * @domain: the originating domain for the error message * @im: image to check * * Check that the image is not complex. * Otherwise set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_noncomplex(const char *domain, VipsImage *im) { if (vips_band_format_iscomplex(im->BandFmt)) { vips_error(domain, "%s", _("image must be non-complex")); return -1; } return 0; } /** * vips_check_complex: * @domain: the originating domain for the error message * @im: image to check * * Check that the image is complex. * Otherwise set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_complex(const char *domain, VipsImage *im) { if (!vips_band_format_iscomplex(im->BandFmt)) { vips_error(domain, "%s", _("image must be complex")); return -1; } return 0; } /** * vips_check_twocomponents: * @domain: the originating domain for the error message * @im: image to check * * Check that the image is has two "components", ie. is a one-band complex or * a two-band non-complex. * Otherwise set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_twocomponents(const char *domain, VipsImage *im) { if (!vips_band_format_iscomplex(im->BandFmt) && im->Bands != 2) { vips_error(domain, "%s", _("image must be two-band or complex")); return -1; } return 0; } /** * vips_check_format: * @domain: the originating domain for the error message * @im: image to check * @fmt: format to test for * * Check that the image has the specified format. * Otherwise set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_format(const char *domain, VipsImage *im, VipsBandFormat fmt) { if (im->BandFmt != fmt) { vips_error(domain, _("image must be %s"), vips_enum_string(VIPS_TYPE_BAND_FORMAT, fmt)); return -1; } return 0; } /** * vips_check_int: * @domain: the originating domain for the error message * @im: image to check * * Check that the image is in one of the integer formats. * Otherwise set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_int(const char *domain, VipsImage *im) { if (!vips_band_format_isint(im->BandFmt)) { vips_error(domain, "%s", _("image must be integer")); return -1; } return 0; } /** * vips_check_uint: * @domain: the originating domain for the error message * @im: image to check * * Check that the image is in one of the unsigned integer formats. * Otherwise set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_uint(const char *domain, VipsImage *im) { if (!vips_band_format_isuint(im->BandFmt)) { vips_error(domain, "%s", _("image must be unsigned integer")); return -1; } return 0; } /** * vips_check_8or16: * @domain: the originating domain for the error message * @im: image to check * * Check that the image is 8 or 16-bit integer, signed or unsigned. * Otherwise set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_8or16(const char *domain, VipsImage *im) { if (im->BandFmt != VIPS_FORMAT_UCHAR && im->BandFmt != VIPS_FORMAT_USHORT && im->BandFmt != VIPS_FORMAT_CHAR && im->BandFmt != VIPS_FORMAT_SHORT) { vips_error(domain, "%s", _("image must be 8- or 16-bit integer, signed or unsigned")); return -1; } return 0; } /** * vips_check_u8or16: * @domain: the originating domain for the error message * @im: image to check * * Check that the image is 8 or 16-bit unsigned integer. * Otherwise set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_u8or16(const char *domain, VipsImage *im) { if (im->BandFmt != VIPS_FORMAT_UCHAR && im->BandFmt != VIPS_FORMAT_USHORT) { vips_error(domain, "%s", _("image must be 8- or 16-bit unsigned integer")); return -1; } return 0; } /** * vips_check_u8or16orf: * @domain: the originating domain for the error message * @im: image to check * * Check that the image is 8 or 16-bit unsigned integer, or float. * Otherwise set an error message and return non-zero. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_u8or16orf(const char *domain, VipsImage *im) { if (im->BandFmt != VIPS_FORMAT_UCHAR && im->BandFmt != VIPS_FORMAT_USHORT && im->BandFmt != VIPS_FORMAT_FLOAT) { vips_error(domain, "%s", _("image must be 8- or 16-bit unsigned integer, or float")); return -1; } return 0; } /** * vips_check_uintorf: * @domain: the originating domain for the error message * @im: image to check * * Check that the image is unsigned int or float. * Otherwise set an error message and return non-zero. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_uintorf(const char *domain, VipsImage *im) { if (im->BandFmt != VIPS_FORMAT_UCHAR && im->BandFmt != VIPS_FORMAT_USHORT && im->BandFmt != VIPS_FORMAT_UINT && im->BandFmt != VIPS_FORMAT_FLOAT) { vips_error(domain, "%s", _("image must be unsigned int or float")); return -1; } return 0; } /** * vips_check_size_same: * @domain: the originating domain for the error message * @im1: first image to check * @im2: second image to check * * Check that the images have the same size. * If not, set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_size_same(const char *domain, VipsImage *im1, VipsImage *im2) { if (im1->Xsize != im2->Xsize || im1->Ysize != im2->Ysize) { vips_error(domain, "%s", _("images must match in size")); return -1; } return 0; } /** * vips_check_oddsquare: * @domain: the originating domain for the error message * @im: image to check * * Check that the image is square and that the sides are odd. * If not, set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_oddsquare(const char *domain, VipsImage *im) { if (im->Xsize != im->Ysize || im->Xsize % 2 == 0) { vips_error(domain, "%s", _("images must be odd and square")); return -1; } return 0; } /** * vips_check_bands_same: * @domain: the originating domain for the error message * @im1: first image to check * @im2: second image to check * * Check that the images have the same number of bands. * If not, set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_bands_same(const char *domain, VipsImage *im1, VipsImage *im2) { if (im1->Bands != im2->Bands) { vips_error(domain, "%s", _("images must have the same number of bands")); return -1; } return 0; } /** * vips_check_bandno: * @domain: the originating domain for the error message * @im: image to check * @bandno: band number * * @bandno should be a valid band number (ie. 0 to im->Bands - 1), or can be * -1, meaning all bands. * If not, set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_bandno(const char *domain, VipsImage *im, int bandno) { if (bandno < -1 || bandno > im->Bands - 1) { vips_error(domain, "bandno must be -1, or less than %d", im->Bands); return -1; } return 0; } /** * vips_check_format_same: * @domain: the originating domain for the error message * @im1: first image to check * @im2: second image to check * * Check that the images have the same format. * If not, set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_format_same(const char *domain, VipsImage *im1, VipsImage *im2) { if (im1->BandFmt != im2->BandFmt) { vips_error(domain, "%s", _("images must have the same band format")); return -1; } return 0; } /** * vips_check_coding_same: * @domain: the originating domain for the error message * @im1: first image to check * @im2: second image to check * * Check that the images have the same coding. * If not, set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_coding_same(const char *domain, VipsImage *im1, VipsImage *im2) { if (im1->Coding != im2->Coding) { vips_error(domain, "%s", _("images must have the same coding")); return -1; } return 0; } /** * vips_check_vector_length: * @domain: the originating domain for the error message * @n: number of elements in vector * @len: number of elements vector should have * * Check that @n == @len. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_vector_length(const char *domain, int n, int len) { if (n != len) { vips_error(domain, _("vector must have %d elements"), len); return -1; } return 0; } /** * vips_check_vector: * @domain: the originating domain for the error message * @n: number of elements in vector * @im: image to check against * * Operations with a vector constant need a 1-element vector, or a vector with * the same number of elements as there are bands in the image, or a 1-band * image and a many-element vector. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_vector(const char *domain, int n, VipsImage *im) { /* Here it's clearer to list the cases that are OK. */ if (n == im->Bands) return 0; if (n == 1) return 0; if (im->Bands == 1 && n > 1) return 0; if (im->Bands == 1) vips_error(domain, "%s", _("vector must have 1 element")); else vips_error(domain, _("vector must have 1 or %d elements"), im->Bands); return -1; } /** * vips_check_hist: * @domain: the originating domain for the error message * @im: image to check * * Histogram images must have width or height 1, and must not have more than * 65536 elements. Return 0 if the image will pass as a histogram, or -1 and * set an error message otherwise. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_hist(const char *domain, VipsImage *im) { if (im->Xsize != 1 && im->Ysize != 1) { vips_error(domain, "%s", _("histograms must have width or height 1")); return -1; } if (VIPS_IMAGE_N_PELS(im) > 65536) { vips_error(domain, "%s", _("histograms must have not have more than 65536 elements")); return -1; } return 0; } /** * vips_check_matrix: * @domain: the originating domain for the error message * @im: image to check * @out: (out): put image as in-memory doubles here * * Matrix images must have width and height less than 100000 and have 1 band. * * Return 0 if the image will pass as a matrix, or -1 and set an error * message otherwise. * * @out is set to be @im cast to double and stored in memory. Use * VIPS_MATRIX() to address values in @out. * * You must unref @out when you are done with it. * * See also: VIPS_MATRIX(), vips_object_local() * * Returns: 0 if OK, -1 otherwise. */ int vips_check_matrix(const char *domain, VipsImage *im, VipsImage **out) { VipsImage *t; *out = NULL; if (im->Xsize > 100000 || im->Ysize > 100000) { vips_error(domain, "%s", _("matrix image too large")); return -1; } if (im->Bands != 1) { vips_error(domain, "%s", _("matrix image must have one band")); return -1; } if (vips_cast(im, &t, VIPS_FORMAT_DOUBLE, NULL)) return -1; if (!(*out = vips_image_copy_memory(t))) { VIPS_UNREF(t); return -1; } VIPS_UNREF(t); return 0; } /** * vips_check_separable: * @domain: the originating domain for the error message * @im: image to check * * Separable matrix images must have width or height 1. * Return 0 if the image will pass, or -1 and * set an error message otherwise. * * See also: vips_error(). * * Returns: 0 if OK, -1 otherwise. */ int vips_check_separable(const char *domain, VipsImage *im) { if (im->Xsize != 1 && im->Ysize != 1) { vips_error(domain, "%s", _("separable matrix images must have width or height 1")); return -1; } return 0; } /** * vips_check_precision_intfloat: * @domain: the originating domain for the error message * @precision: precision to check * * Check that @prec image is either float or int. * If not, set an error message * and return non-zero. * * See also: vips_error(). * * Returns: 0 on OK, or -1 on error. */ int vips_check_precision_intfloat(const char *domain, VipsPrecision precision) { if (precision != VIPS_PRECISION_INTEGER && precision != VIPS_PRECISION_FLOAT) { vips_error(domain, "%s", _("precision must be int or float")); return -1; } return 0; } libvips-8.15.1/libvips/iofuncs/gate.c000066400000000000000000000212761454007373500175000ustar00rootroot00000000000000/* gate.c --- thread profiling * * Written on: 18 nov 13 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Very verbose. #define VIPS_DEBUG_RED */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #define VIPS_GATE_SIZE (1000) /* A set of timing records. i is the index of the next slot we fill. */ typedef struct _VipsThreadGateBlock { struct _VipsThreadGateBlock *prev; gint64 time[VIPS_GATE_SIZE]; int i; } VipsThreadGateBlock; /* What we track for each gate-name. */ typedef struct _VipsThreadGate { const char *name; VipsThreadGateBlock *start; VipsThreadGateBlock *stop; } VipsThreadGate; /* One of these in per-thread private storage. */ typedef struct _VipsThreadProfile { /*< private >*/ const char *name; GThread *thread; GHashTable *gates; VipsThreadGate *memory; } VipsThreadProfile; gboolean vips__thread_profile = FALSE; static GPrivate *vips_thread_profile_key = NULL; static FILE *vips__thread_fp = NULL; /** * vips_profile_set: * @profile: %TRUE to enable profile recording * * If set, vips will record profiling information, and dump it on program * exit. These profiles can be analysed with the `vipsprofile` program. */ void vips_profile_set(gboolean profile) { vips__thread_profile = profile; } static void vips_thread_gate_block_save(VipsThreadGateBlock *block, FILE *fp) { int i; for (i = block->i - 1; i >= 0; i--) fprintf(fp, "%" G_GINT64_FORMAT " ", block->time[i]); fprintf(fp, "\n"); if (block->prev) vips_thread_gate_block_save(block->prev, fp); } static void vips_thread_profile_save_gate(VipsThreadGate *gate, FILE *fp) { if (gate->start->i || gate->start->prev) { fprintf(fp, "gate: %s\n", gate->name); fprintf(fp, "start:\n"); vips_thread_gate_block_save(gate->start, fp); fprintf(fp, "stop:\n"); vips_thread_gate_block_save(gate->stop, fp); } } static void vips_thread_profile_save_cb(gpointer key, gpointer value, gpointer data) { VipsThreadGate *gate = (VipsThreadGate *) value; FILE *fp = (FILE *) data; vips_thread_profile_save_gate(gate, fp); } static void vips_thread_profile_save(VipsThreadProfile *profile) { g_mutex_lock(vips__global_lock); VIPS_DEBUG_MSG("vips_thread_profile_save: %s\n", profile->name); if (!vips__thread_fp) { vips__thread_fp = vips__file_open_write("vips-profile.txt", TRUE); if (!vips__thread_fp) { g_mutex_unlock(vips__global_lock); g_warning("unable to create profile log"); return; } printf("recording profile in vips-profile.txt\n"); } fprintf(vips__thread_fp, "thread: %s (%p)\n", profile->name, profile); g_hash_table_foreach(profile->gates, vips_thread_profile_save_cb, vips__thread_fp); vips_thread_profile_save_gate(profile->memory, vips__thread_fp); g_mutex_unlock(vips__global_lock); } static void vips_thread_gate_block_free(VipsThreadGateBlock *block) { VIPS_FREEF(vips_thread_gate_block_free, block->prev); VIPS_FREE(block); } static void vips_thread_gate_free(VipsThreadGate *gate) { VIPS_FREEF(vips_thread_gate_block_free, gate->start); VIPS_FREEF(vips_thread_gate_block_free, gate->stop); VIPS_FREE(gate); } static void vips_thread_profile_free(VipsThreadProfile *profile) { VIPS_DEBUG_MSG("vips_thread_profile_free: %s\n", profile->name); VIPS_FREEF(g_hash_table_destroy, profile->gates); VIPS_FREEF(vips_thread_gate_free, profile->memory); VIPS_FREE(profile); } void vips__thread_profile_stop(void) { if (vips__thread_profile) VIPS_FREEF(fclose, vips__thread_fp); } static void vips__thread_profile_init_cb(VipsThreadProfile *profile) { /* We only come here if vips_thread_shutdown() was not called for this * thread. Do our best to clean up. * * GPrivate has stopped working, be careful not to touch that. * * Don't try to save: we must free all mem before saving and we * probably haven't done that because vips_thread_shutdown() has not * been called. */ if (vips__thread_profile) g_warning("discarding unsaved state for thread %p --- " "call vips_thread_shutdown() for this thread", profile->thread); vips_thread_profile_free(profile); } static void * vips__thread_profile_init(void *data) { static GPrivate private = G_PRIVATE_INIT((GDestroyNotify) vips__thread_profile_init_cb); vips_thread_profile_key = &private; return NULL; } static VipsThreadGate * vips_thread_gate_new(const char *gate_name) { VipsThreadGate *gate; gate = g_new(VipsThreadGate, 1); gate->name = gate_name; gate->start = g_new0(VipsThreadGateBlock, 1); gate->stop = g_new0(VipsThreadGateBlock, 1); return gate; } void vips__thread_profile_attach(const char *thread_name) { static GOnce once = G_ONCE_INIT; VipsThreadProfile *profile; VIPS_ONCE(&once, vips__thread_profile_init, NULL); VIPS_DEBUG_MSG("vips__thread_profile_attach: %s\n", thread_name); profile = g_new(VipsThreadProfile, 1); profile->name = thread_name; profile->gates = g_hash_table_new_full( g_direct_hash, g_str_equal, NULL, (GDestroyNotify) vips_thread_gate_free); profile->memory = vips_thread_gate_new("memory"); g_private_replace(vips_thread_profile_key, profile); } static VipsThreadProfile * vips_thread_profile_get(void) { return g_private_get(vips_thread_profile_key); } /* This usually happens automatically when a thread shuts down, see * vips__thread_profile_init() where we set a GDestroyNotify, but will not * happen for the main thread. * * Shut down any stats on the main thread with this, see vips_shutdown() */ void vips__thread_profile_detach(void) { VipsThreadProfile *profile; VIPS_DEBUG_MSG("vips__thread_profile_detach:\n"); if ((profile = vips_thread_profile_get())) { if (vips__thread_profile) vips_thread_profile_save(profile); vips_thread_profile_free(profile); g_private_set(vips_thread_profile_key, NULL); } } static void vips_thread_gate_block_add(VipsThreadGateBlock **block) { VipsThreadGateBlock *new_block; new_block = g_new0(VipsThreadGateBlock, 1); new_block->prev = *block; *block = new_block; } void vips__thread_gate_start(const char *gate_name) { VipsThreadProfile *profile; VIPS_DEBUG_MSG_RED("vips__thread_gate_start: %s\n", gate_name); if ((profile = vips_thread_profile_get())) { gint64 time = g_get_monotonic_time(); VipsThreadGate *gate; if (!(gate = g_hash_table_lookup(profile->gates, gate_name))) { gate = vips_thread_gate_new(gate_name); g_hash_table_insert(profile->gates, (char *) gate_name, gate); } if (gate->start->i >= VIPS_GATE_SIZE) vips_thread_gate_block_add(&gate->start); gate->start->time[gate->start->i++] = time; VIPS_DEBUG_MSG_RED("\t %" G_GINT64_FORMAT "\n", time); } } void vips__thread_gate_stop(const char *gate_name) { VipsThreadProfile *profile; VIPS_DEBUG_MSG_RED("vips__thread_gate_stop: %s\n", gate_name); if ((profile = vips_thread_profile_get())) { gint64 time = g_get_monotonic_time(); VipsThreadGate *gate; if (!(gate = g_hash_table_lookup(profile->gates, gate_name))) { gate = vips_thread_gate_new(gate_name); g_hash_table_insert(profile->gates, (char *) gate_name, gate); } if (gate->stop->i >= VIPS_GATE_SIZE) vips_thread_gate_block_add(&gate->stop); gate->stop->time[gate->stop->i++] = time; VIPS_DEBUG_MSG_RED("\t %" G_GINT64_FORMAT "\n", time); } } /* Record a malloc() or free(). Use -ve numbers for free. */ void vips__thread_malloc_free(gint64 size) { VipsThreadProfile *profile; VIPS_DEBUG_MSG_RED("vips__thread_malloc_free: %zd\n", size); #ifdef VIPS_DEBUG if (!(profile = vips_thread_profile_get())) printf("argh no block to record free() in!\n"); #endif /*VIPS_DEBUG*/ if ((profile = vips_thread_profile_get())) { gint64 time = g_get_monotonic_time(); VipsThreadGate *gate = profile->memory; if (gate->start->i >= VIPS_GATE_SIZE) { vips_thread_gate_block_add(&gate->start); vips_thread_gate_block_add(&gate->stop); } gate->start->time[gate->start->i++] = time; gate->stop->time[gate->stop->i++] = size; } } libvips-8.15.1/libvips/iofuncs/generate.c000066400000000000000000000435441454007373500203540ustar00rootroot00000000000000/* Manage pipelines of partial images. * * J.Cupitt, 17/4/93. * 1/7/93 JC * - adapted for partial v2 * - ANSIfied * 6/7/93 JC * - im_setupout() conventions clarified - see autorewind in * im_iocheck(). * 20/7/93 JC * - eval callbacks added * 7/9/93 JC * - demand hint mechanism added * 25/10/93 * - asynchronous output mechanisms removed, as no observable speed-up * 9/5/94 * - new thread stuff added, with a define to turn it off * 15/8/94 * - start & stop functions can now be NULL for no-op * 7/10/94 JC * - evalend callback system added * 23/12/94 JC * - IM_ARRAY uses added * 22/2/95 JC * - im_fill_copy() added * - im_region_region() uses modified * 24/4/95 JC & KM * - im_fill_lines() bug removed * 30/8/96 JC * - revised and simplified ... some code shared with im_iterate() * - new im_generate_region() added * 2/3/98 JC * - IM_ANY added * 20/7/99 JC * - tile geometry made into ints for easy tuning * 30/7/99 RP JC * - threads reorganised for POSIX * 29/9/99 JC * - threadgroup stuff added * 15/4/04 * - better how-many-pixels-calculated * 27/11/06 * - merge background write stuff * 7/11/07 * - new start/end eval callbacks * 7/10/09 * - gtkdoc comments * 16/4/10 * - remove threadgroup stuff * 24/3/11 * - move demand_hint stuff in here * - move to vips_ namespace * 7/7/12 * - lock around link make/break so we can process an image from many * threads */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #ifdef HAVE_IO_H #include #endif /*HAVE_IO_H*/ #include #include #include #include /** * SECTION: generate * @short_description: calculate pixels and pixel buffers * @stability: Stable * @see_also: VipsImage, * VipsRegion * @include: vips/vips.h * * These functions let you attach generate functions to images * and ask for regions of images to be calculated. */ /* Max number of images we can handle. */ #define MAX_IMAGES (1000) /* Make an upstream/downstream link. upstream is one of downstream's inputs. */ static void vips__link_make(VipsImage *image_up, VipsImage *image_down) { g_assert(image_up); g_assert(image_down); image_up->downstream = g_slist_prepend(image_up->downstream, image_down); image_down->upstream = g_slist_prepend(image_down->upstream, image_up); /* Propagate the progress indicator. */ if (image_up->progress_signal && !image_down->progress_signal) image_down->progress_signal = image_up->progress_signal; } static void * vips__link_break(VipsImage *image_up, VipsImage *image_down, void *b) { g_assert(image_up); g_assert(image_down); g_assert(g_slist_find(image_up->downstream, image_down)); g_assert(g_slist_find(image_down->upstream, image_up)); image_up->downstream = g_slist_remove(image_up->downstream, image_down); image_down->upstream = g_slist_remove(image_down->upstream, image_up); /* Unlink the progress chain. */ if (image_down->progress_signal && image_down->progress_signal == image_up->progress_signal) image_down->progress_signal = NULL; return NULL; } static void * vips__link_break_rev(VipsImage *image_down, VipsImage *image_up, void *b) { return vips__link_break(image_up, image_down, b); } /* A VipsImage is going ... break all links. */ void vips__link_break_all(VipsImage *image) { g_mutex_lock(vips__global_lock); vips_slist_map2(image->upstream, (VipsSListMap2Fn) vips__link_break, image, NULL); vips_slist_map2(image->downstream, (VipsSListMap2Fn) vips__link_break_rev, image, NULL); g_assert(!image->upstream); g_assert(!image->downstream); g_mutex_unlock(vips__global_lock); } typedef struct _LinkMap { gboolean upstream; int serial; VipsSListMap2Fn fn; void *a; void *b; } LinkMap; static void * vips__link_mapp(VipsImage *image, LinkMap *map, void *b) { void *res; /* Loop? */ if (image->serial == map->serial) return NULL; image->serial = map->serial; if ((res = map->fn(image, map->a, map->b))) return res; return vips_slist_map2(map->upstream ? image->upstream : image->downstream, (VipsSListMap2Fn) vips__link_mapp, map, NULL); } static void * vips__link_map_cb(VipsImage *image, GSList **images, void *b) { *images = g_slist_prepend(*images, image); return NULL; } /* Apply a function to an image and all upstream or downstream images, * direct and indirect. */ void * vips__link_map(VipsImage *image, gboolean upstream, VipsSListMap2Fn fn, void *a, void *b) { static int serial = 0; LinkMap map; GSList *images; GSList *p; void *result; images = NULL; /* The function might do anything, including removing images * or invalidating other images, so we can't trigger them from within * the image loop. Instead we collect a list of images, ref them, * run the functions, and unref. */ map.upstream = upstream; map.fn = (VipsSListMap2Fn) vips__link_map_cb; map.a = (void *) &images; map.b = NULL; /* We will be walking the tree of images and updating the ->serial * member. There will be intense confusion if two threads try to do * this at the same time. */ g_mutex_lock(vips__global_lock); serial += 1; map.serial = serial; vips__link_mapp(image, &map, NULL); for (p = images; p; p = p->next) g_object_ref(p->data); g_mutex_unlock(vips__global_lock); result = vips_slist_map2(images, fn, a, b); for (p = images; p; p = p->next) g_object_unref(p->data); g_slist_free(images); return result; } /* We have to have this as a separate entry point so we can support the old * vips7 API. */ void vips__demand_hint_array(VipsImage *image, int int_hint, VipsImage **in) { VipsDemandStyle hint = (VipsDemandStyle) int_hint; int i, len, nany; VipsDemandStyle set_hint; /* How many input images are there? And how many are ANY? */ for (i = 0, len = 0, nany = 0; in[i]; i++, len++) if (in[i]->dhint == VIPS_DEMAND_STYLE_ANY) nany++; /* Find the most restrictive of all the hints available to us. * * We have tried to be smarter about this in the past -- for example, * detecting all ANY inputs and ignoring the hint in this case, but * there are inevitably odd cases which cause problems. For example, * new_from_memory, resize, affine, write_to_memory would run with * FATSTRIP. */ set_hint = hint; for (i = 0; i < len; i++) set_hint = (VipsDemandStyle) VIPS_MIN( (int) set_hint, (int) in[i]->dhint); image->dhint = set_hint; #ifdef DEBUG printf("vips_image_pipeline_array: set dhint for \"%s\" to %s\n", image->filename, vips_enum_nick(VIPS_TYPE_DEMAND_STYLE, image->dhint)); printf("\toperation requested %s\n", vips_enum_nick(VIPS_TYPE_DEMAND_STYLE, hint)); printf("\tinputs were:\n"); printf("\t"); for (i = 0; in[i]; i++) printf("%s ", vips_enum_nick(VIPS_TYPE_DEMAND_STYLE, in[i]->dhint)); printf("\n"); #endif /*DEBUG*/ /* im depends on all these ims. */ g_mutex_lock(vips__global_lock); for (i = 0; i < len; i++) vips__link_make(in[i], image); g_mutex_unlock(vips__global_lock); /* Set a flag on the image to say we remembered to call this thing. * vips_image_generate() and friends check this. */ image->hint_set = TRUE; } /** * vips_image_pipeline_array: * @image: (out): output image * @hint: demand hint for @image * @in: (array zero-terminated=1): %NULL-terminated array of input images * * Add an image to a pipeline. @image depends on all of the images in @in, * @image prefers to supply pixels according to @hint. * * Operations can set demand hints, that is, hints to the VIPS IO system about * the type of region geometry they work best with. For example, * operations which transform coordinates will usually work best with * %VIPS_DEMAND_STYLE_SMALLTILE, operations which work on local windows of * pixels will like %VIPS_DEMAND_STYLE_FATSTRIP. * * Header fields in @image are set from the fields in @in, with lower-numbered * images in @in taking priority. * For example, if @in[0] and @in[1] both have an item * called "icc-profile", it's the profile attached to @in[0] that will end up * on @image. * Image history is completely copied from all @in. @image will have the history * of all the input images. * The array of input images can be empty, meaning @image is at the start of a * pipeline. * * VIPS uses the list of input images to build the tree of operations it needs * for the cache invalidation system. * * See also: vips_image_pipelinev(), vips_image_generate(). * * Returns: 0 on success, -1 on error. */ int vips_image_pipeline_array(VipsImage *image, VipsDemandStyle hint, VipsImage **in) { /* This function can be called more than once per output image. For * example, jpeg header load will call this once on ->out to set the * default hint, then later call it again to connect the output image * up to the real image. * * It's only ever called first time with in[0] == NULL and second time * with a real value for @in. */ vips__demand_hint_array(image, hint, in); if (in[0] && vips__image_copy_fields_array(image, in)) return -1; if (vips__reorder_set_input(image, in)) return -1; return 0; } /** * vips_image_pipelinev: * @image: output image of pipeline * @hint: hint for this image * @...: %NULL-terminated list of input images * * Build an array and call vips_image_pipeline_array(). * * See also: vips_image_generate(). */ int vips_image_pipelinev(VipsImage *image, VipsDemandStyle hint, ...) { va_list ap; int i; VipsImage *ar[MAX_IMAGES]; va_start(ap, hint); for (i = 0; i < MAX_IMAGES && (ar[i] = va_arg(ap, VipsImage *)); i++) ; va_end(ap); if (i == MAX_IMAGES) { g_warning("%s", _("too many images")); /* Make sure we have a sentinel there. */ ar[i - 1] = NULL; } return vips_image_pipeline_array(image, hint, ar); } /** * vips_start_one: * @out: image to generate * @a: user data * @b: user data * * Start function for one image in. Input image is @a. * * See also: vips_image_generate(). */ void * vips_start_one(VipsImage *out, void *a, void *b) { VipsImage *in = (VipsImage *) a; return vips_region_new(in); } /** * vips_stop_one: * @seq: sequence value * @a: user data * @b: user data * * Stop function for one image in. Input image is @a. * * See also: vips_image_generate(). */ int vips_stop_one(void *seq, void *a, void *b) { VipsRegion *reg = (VipsRegion *) seq; g_object_unref(reg); return 0; } /** * vips_stop_many: * @seq: sequence value * @a: user data * @b: user data * * Stop function for many images in. @a is a pointer to * a %NULL-terminated array of input images. * * See also: vips_image_generate(). */ int vips_stop_many(void *seq, void *a, void *b) { VipsRegion **ar = (VipsRegion **) seq; if (ar) { int i; for (i = 0; ar[i]; i++) g_object_unref(ar[i]); g_free((char *) ar); } return 0; } /** * vips_start_many: * @out: image to generate * @a: user data * @b: user data * * Start function for many images in. @a is a pointer to * a %NULL-terminated array of input images. * * See also: vips_image_generate(), vips_allocate_input_array() */ void * vips_start_many(VipsImage *out, void *a, void *b) { VipsImage **in = (VipsImage **) a; int i, n; VipsRegion **ar; /* How many images? */ for (n = 0; in[n]; n++) ; /* Allocate space for region array. */ if (!(ar = VIPS_ARRAY(NULL, n + 1, VipsRegion *))) return NULL; /* Create a set of regions. */ for (i = 0; i < n; i++) if (!(ar[i] = vips_region_new(in[i]))) { vips_stop_many(ar, NULL, NULL); return NULL; } ar[n] = NULL; return ar; } /** * vips_allocate_input_array: * @out: free array when this image closes * @...: %NULL-terminated list of input images * * Convenience function --- make a %NULL-terminated array of input images. * Use with vips_start_many(). * * See also: vips_image_generate(), vips_start_many(). * * Returns: %NULL-terminated array of images. Do not free the result. */ VipsImage ** vips_allocate_input_array(VipsImage *out, ...) { va_list ap; VipsImage **ar; int i, n; /* Count input images. */ va_start(ap, out); for (n = 0; va_arg(ap, VipsImage *); n++) ; va_end(ap); /* Allocate array. */ if (!(ar = VIPS_ARRAY(out, n + 1, VipsImage *))) return NULL; /* Fill array. */ va_start(ap, out); for (i = 0; i < n; i++) ar[i] = va_arg(ap, VipsImage *); va_end(ap); ar[n] = NULL; return ar; } /** * VipsStartFn: * @out: image being calculated * @a: user data * @b: user data * * Start a new processing sequence for this generate function. This allocates * per-thread state, such as an input region. * * See also: vips_start_one(), vips_start_many(). * * Returns: a new sequence value */ /** * VipsGenerateFn: * @out: #VipsRegion to fill * @seq: sequence value * @a: user data * @b: user data * @stop: set this to stop processing * * Fill @out->valid with pixels. @seq contains per-thread state, such as the * input regions. Set @stop to %TRUE to stop processing. * * See also: vips_image_generate(), vips_stop_many(). * * Returns: 0 on success, -1 on error. */ /** * VipsStopFn: * @seq: sequence value * @a: user data * @b: user data * * Stop a processing sequence. This frees * per-thread state, such as an input region. * * See also: vips_stop_one(), vips_stop_many(). * * Returns: 0 on success, -1 on error. */ /* A write function for VIPS images. Just write() the pixel data. */ static int write_vips(VipsRegion *region, VipsRect *area, void *a) { size_t nwritten, count; void *buf; count = (size_t) region->bpl * area->height; buf = VIPS_REGION_ADDR(region, 0, area->top); do { nwritten = write(region->im->fd, buf, count); if (nwritten == (size_t) -1) return errno; buf = (void *) ((char *) buf + nwritten); count -= nwritten; } while (count > 0); return 0; } /** * vips_image_generate: * @image: generate this image * @start_fn: start sequences with this function * @generate_fn: generate pixels with this function * @stop_fn: stop sequences with this function * @a: user data * @b: user data * * Generates an image. The action depends on the image type. * * For images created with vips_image_new(), vips_image_generate() just * attaches the start/generate/stop callbacks and returns. * * For images created with vips_image_new_memory(), memory is allocated for * the whole image and it is entirely generated using vips_sink_memory(). * * For images created with vips_image_new_temp_file() and friends, memory for * a few scanlines is allocated and * vips_sink_disc() used to generate the image in small chunks. As each * chunk is generated, it is written to disc. * * See also: vips_sink(), vips_image_new(), vips_region_prepare(). * * Returns: 0 on success, or -1 on error. */ int vips_image_generate(VipsImage *image, VipsStartFn start_fn, VipsGenerateFn generate_fn, VipsStopFn stop_fn, void *a, void *b) { int res; VIPS_DEBUG_MSG("vips_image_generate: %p\n", image); g_assert(generate_fn); g_assert(vips_object_sanity(VIPS_OBJECT(image))); if (!image->hint_set) { vips_error("vips_image_generate", "%s", _("demand hint not set")); return -1; } /* We don't use this, but make sure it's set in case any old binaries * are expecting it. */ image->Bbits = vips_format_sizeof(image->BandFmt) << 3; /* Look at output type to decide our action. */ switch (image->dtype) { case VIPS_IMAGE_PARTIAL: /* Output to partial image. Just attach functions and return. */ if (image->generate_fn || image->start_fn || image->stop_fn) { vips_error("VipsImage", "%s", _("generate() called twice")); return -1; } image->start_fn = start_fn; image->generate_fn = generate_fn; image->stop_fn = stop_fn; image->client1 = a; image->client2 = b; VIPS_DEBUG_MSG("vips_image_generate: " "attaching partial callbacks\n"); if (vips_image_written(image)) return -1; break; case VIPS_IMAGE_SETBUF: case VIPS_IMAGE_SETBUF_FOREIGN: case VIPS_IMAGE_MMAPINRW: case VIPS_IMAGE_OPENOUT: /* Eval now .. sanity check. */ if (image->generate_fn || image->start_fn || image->stop_fn) { vips_error("VipsImage", "%s", _("generate() called twice")); return -1; } /* Attach callbacks. */ image->start_fn = start_fn; image->generate_fn = generate_fn; image->stop_fn = stop_fn; image->client1 = a; image->client2 = b; if (vips_image_write_prepare(image)) return -1; if (image->dtype == VIPS_IMAGE_OPENOUT) res = vips_sink_disc(image, write_vips, NULL); else res = vips_sink_memory(image); /* Error? */ if (res) return -1; /* Must come before we rewind. */ if (vips_image_written(image)) return -1; /* We've written to image ... rewind it ready for reading. */ if (vips_image_pio_input(image)) return -1; break; default: /* Not a known output style. */ vips_error("VipsImage", _("unable to output to a %s image"), vips_enum_nick(VIPS_TYPE_IMAGE_TYPE, image->dtype)); return -1; } return 0; } libvips-8.15.1/libvips/iofuncs/ginputsource.c000066400000000000000000000154761454007373500213140ustar00rootroot00000000000000/* A GInputStream that links to a VipsSource under the hood. * * 10/11/19 kleisauke */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include #include static void vips_g_input_stream_seekable_iface_init(GSeekableIface *iface); G_DEFINE_TYPE_WITH_CODE(VipsGInputStream, vips_g_input_stream, G_TYPE_INPUT_STREAM, G_IMPLEMENT_INTERFACE(G_TYPE_SEEKABLE, vips_g_input_stream_seekable_iface_init)) enum { PROP_0, PROP_STREAM }; static void vips_g_input_stream_get_property(GObject *object, guint prop_id, GValue *value, GParamSpec *pspec) { VipsGInputStream *gstream = VIPS_G_INPUT_STREAM(object); switch (prop_id) { case PROP_STREAM: g_value_set_object(value, gstream->source); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); } } static void vips_g_input_stream_set_property(GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec) { VipsGInputStream *gstream = VIPS_G_INPUT_STREAM(object); switch (prop_id) { case PROP_STREAM: gstream->source = g_value_dup_object(value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); } } static void vips_g_input_stream_finalize(GObject *object) { VipsGInputStream *gstream = VIPS_G_INPUT_STREAM(object); VIPS_UNREF(gstream->source); G_OBJECT_CLASS(vips_g_input_stream_parent_class)->finalize(object); } static goffset vips_g_input_stream_tell(GSeekable *seekable) { VipsGInputStream *gstream = VIPS_G_INPUT_STREAM(seekable); goffset pos; VIPS_DEBUG_MSG("vips_g_input_stream_tell:\n"); pos = vips_source_seek(gstream->source, 0, SEEK_CUR); if (pos == -1) return 0; return pos; } static gboolean vips_g_input_stream_can_seek(GSeekable *seekable) { VipsGInputStream *gstream = VIPS_G_INPUT_STREAM(seekable); VIPS_DEBUG_MSG("vips_g_input_stream_can_seek: %d\n", !gstream->source->is_pipe); return !gstream->source->is_pipe; } static int seek_type_to_lseek(GSeekType type) { switch (type) { default: case G_SEEK_CUR: return SEEK_CUR; case G_SEEK_SET: return SEEK_SET; case G_SEEK_END: return SEEK_END; } } static gboolean vips_g_input_stream_seek(GSeekable *seekable, goffset offset, GSeekType type, GCancellable *cancellable, GError **error) { VipsGInputStream *gstream = VIPS_G_INPUT_STREAM(seekable); VIPS_DEBUG_MSG( "vips_g_input_stream_seek: offset = %" G_GINT64_FORMAT ", type = %d\n", offset, type); if (vips_source_seek(gstream->source, offset, seek_type_to_lseek(type)) == -1) { g_set_error(error, G_IO_ERROR, G_IO_ERROR_FAILED, _("Error while seeking: %s"), vips_error_buffer()); return FALSE; } return TRUE; } static gboolean vips_g_input_stream_can_truncate(GSeekable *seekable) { return FALSE; } static gboolean vips_g_input_stream_truncate(GSeekable *seekable, goffset offset, GCancellable *cancellable, GError **error) { g_set_error_literal(error, G_IO_ERROR, G_IO_ERROR_NOT_SUPPORTED, _("Cannot truncate VipsGInputStream")); return FALSE; } static gssize vips_g_input_stream_read(GInputStream *stream, void *buffer, gsize count, GCancellable *cancellable, GError **error) { VipsGInputStream *gstream = VIPS_G_INPUT_STREAM(stream); gssize res; VIPS_DEBUG_MSG("vips_g_input_stream_read: count: %zd\n", count); if (g_cancellable_set_error_if_cancelled(cancellable, error)) return -1; if ((res = vips_source_read(gstream->source, buffer, count)) == -1) g_set_error(error, G_IO_ERROR, G_IO_ERROR_FAILED, _("Error while reading: %s"), vips_error_buffer()); return res; } static gssize vips_g_input_stream_skip(GInputStream *stream, gsize count, GCancellable *cancellable, GError **error) { VipsGInputStream *gstream = VIPS_G_INPUT_STREAM(stream); gssize position; VIPS_DEBUG_MSG("vips_g_input_stream_skip: count: %zd\n", count); if (g_cancellable_set_error_if_cancelled(cancellable, error)) return -1; position = vips_source_seek(gstream->source, count, SEEK_CUR); if (position == -1) { g_set_error(error, G_IO_ERROR, G_IO_ERROR_FAILED, _("Error while seeking: %s"), vips_error_buffer()); return -1; } return position; } static gboolean vips_g_input_stream_close(GInputStream *stream, GCancellable *cancellable, GError **error) { VipsGInputStream *gstream = VIPS_G_INPUT_STREAM(stream); vips_source_minimise(gstream->source); return TRUE; } static void vips_g_input_stream_seekable_iface_init(GSeekableIface *iface) { iface->tell = vips_g_input_stream_tell; iface->can_seek = vips_g_input_stream_can_seek; iface->seek = vips_g_input_stream_seek; iface->can_truncate = vips_g_input_stream_can_truncate; iface->truncate_fn = vips_g_input_stream_truncate; } static void vips_g_input_stream_class_init(VipsGInputStreamClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); GInputStreamClass *istream_class = G_INPUT_STREAM_CLASS(class); gobject_class->finalize = vips_g_input_stream_finalize; gobject_class->get_property = vips_g_input_stream_get_property; gobject_class->set_property = vips_g_input_stream_set_property; istream_class->read_fn = vips_g_input_stream_read; istream_class->skip = vips_g_input_stream_skip; istream_class->close_fn = vips_g_input_stream_close; g_object_class_install_property(gobject_class, PROP_STREAM, g_param_spec_object("input", _("Input"), _("Stream to wrap"), VIPS_TYPE_SOURCE, G_PARAM_CONSTRUCT_ONLY | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); } static void vips_g_input_stream_init(VipsGInputStream *gstream) { } /** * vips_g_input_stream_new_from_source: * @source: vips source to wrap * * Create a new #GInputStream wrapping a #VipsSource. This is useful for * loaders like SVG and PDF which support GInput methods. * * Returns: a new #GInputStream */ GInputStream * vips_g_input_stream_new_from_source(VipsSource *source) { return g_object_new(VIPS_TYPE_G_INPUT_STREAM, "input", source, NULL); } libvips-8.15.1/libvips/iofuncs/header.c000066400000000000000000001540601454007373500200060ustar00rootroot00000000000000/* get, set and copy image header fields * * 9/7/02 JC * - first version * 7/6/05 * - now reads meta fields too * - cleaned up * - added im_header_exists(), im_header_map() * 1/8/05 * - now im_header_get_type() and im_header_get() rather than * im_header_exists() * 4/1/07 * - removed Hist from standard fields ... now a separate function * 29/8/09 * - im_header_get_type() renamed as im_header_get_typeof() to prevent * confusion with GObject-style type definers * 1/10/09 * - rename as header.c * - gtkdoc comments * 22/3/11 * - rename fields for vips8 * - move to vips_ prefix * 16/7/15 * - auto wrap GString as RefString * 20/10/16 * - return header enums as enums, not ints * - vips_image_get_*() all convert everything to target type if they can * - rename "field" as "name" in docs * 21/11/18 * - get_string will allow G_STRING and REF_STRING * 28/12/18 * - hide deprecated header fields from _map * 17/2/19 * - add vips_image_get_page_height() * 19/6/19 * - add vips_image_get_n_pages() * 20/6/19 * - add vips_image_get/set_array_int() * 31/1/19 * - lock for metadata changes */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #define VIPS_DISABLE_DEPRECATION_WARNINGS #include #include #include /* For the vips__image_sizeof_bandformat declaration. */ #if ENABLE_DEPRECATED #include #endif /** * SECTION: header * @short_description: get, set and walk image headers * @stability: Stable * @see_also: type * @include: vips/vips.h * * These functions let you get at image header data (including metadata) in a * uniform way. * * Use vips_image_get_typeof() to test for the * existence and #GType of a header field. * * You can attach arbitrary metadata to images. Metadata is copied as images * are processed, so all images which used this image as input, directly or * indirectly, will have this same bit of metadata attached to them. Copying * is implemented with reference-counted pointers, so it is efficient, even for * large items of data. This does however mean that metadata items need to be * immutable. Metadata is handy for things like ICC profiles or EXIF data. * * Various convenience functions (eg. vips_image_set_int()) let you easily * attach * simple types like * numbers, strings and memory blocks to images. Use vips_image_map() to loop * over an image's fields, including all metadata. * * Items of metadata are identified by strings. Some strings are reserved, for * example the ICC profile for an image is known by convention as * "icc-profile-data". * * If you save an image in VIPS format, all metadata (with a restriction, see * below) is automatically saved for you in a block of XML at the end of the * file. When you load a VIPS image, the metadata is restored. You can use the * `vipsedit` command-line tool to extract or replace this block of XML. * * VIPS metadata is based on %GValue. See the docs for that system if you want * to do fancy stuff such as defining a new metadata type. * VIPS defines a new %GValue called `vips_save_string`, a variety of string, * see vips_value_set_save_string(). * If your %GValue can be transformed to `vips_save_string`, it will be * saved and loaded to and from VIPS files for you. * * VIPS provides a couple of base classes which implement * reference-counted areas of memory. If you base your metadata on one of * these types, it can be copied between images efficiently. */ /* Use in various small places where we need a mutex and it's not worth * making a private one. */ static GMutex *vips__meta_lock = NULL; /* We have to keep the gtype as a string, since we statically init this. */ typedef struct _HeaderField { const char *name; const char *type; glong offset; } HeaderField; /* Built in fields and struct offsets. */ static HeaderField vips_header_fields[] = { { "width", "gint", G_STRUCT_OFFSET(VipsImage, Xsize) }, { "height", "gint", G_STRUCT_OFFSET(VipsImage, Ysize) }, { "bands", "gint", G_STRUCT_OFFSET(VipsImage, Bands) }, { "format", "VipsBandFormat", G_STRUCT_OFFSET(VipsImage, BandFmt) }, { "coding", "VipsCoding", G_STRUCT_OFFSET(VipsImage, Coding) }, { "interpretation", "VipsInterpretation", G_STRUCT_OFFSET(VipsImage, Type) }, { "xoffset", "gint", G_STRUCT_OFFSET(VipsImage, Xoffset) }, { "yoffset", "gint", G_STRUCT_OFFSET(VipsImage, Yoffset) }, { "xres", "gdouble", G_STRUCT_OFFSET(VipsImage, Xres) }, { "yres", "gdouble", G_STRUCT_OFFSET(VipsImage, Yres) }, { "filename", "gchararray", G_STRUCT_OFFSET(VipsImage, filename) } }; /* Old names we keep around for back-compat. We never loop over these with * map, but we do check them when we look up fields by name. */ static HeaderField vips_header_fields_old[] = { { "Xsize", "gint", G_STRUCT_OFFSET(VipsImage, Xsize) }, { "Ysize", "gint", G_STRUCT_OFFSET(VipsImage, Ysize) }, { "Bands", "gint", G_STRUCT_OFFSET(VipsImage, Bands) }, { "Bbits", "gint", G_STRUCT_OFFSET(VipsImage, Bbits) }, { "BandFmt", "gint", G_STRUCT_OFFSET(VipsImage, BandFmt) }, { "Coding", "gint", G_STRUCT_OFFSET(VipsImage, Coding) }, { "Type", "gint", G_STRUCT_OFFSET(VipsImage, Type) }, { "Xoffset", "gint", G_STRUCT_OFFSET(VipsImage, Xoffset) }, { "Yoffset", "gint", G_STRUCT_OFFSET(VipsImage, Yoffset) }, { "Xres", "gdouble", G_STRUCT_OFFSET(VipsImage, Xres) }, { "Yres", "gdouble", G_STRUCT_OFFSET(VipsImage, Yres) } }; /* This is used by (eg.) VIPS_IMAGE_SIZEOF_ELEMENT() to calculate object * size via vips_format_sizeof(). * * It needs to be guint64 and not size_t since we use this as the basis for * image address calcs and they have to be 64-bit, even on 32-bit machines. * * Can't be static, we need this to be visible for vips7 compat. */ const guint64 vips__image_sizeof_bandformat[] = { sizeof(unsigned char), /* VIPS_FORMAT_UCHAR */ sizeof(signed char), /* VIPS_FORMAT_CHAR */ sizeof(unsigned short), /* VIPS_FORMAT_USHORT */ sizeof(unsigned short), /* VIPS_FORMAT_SHORT */ sizeof(unsigned int), /* VIPS_FORMAT_UINT */ sizeof(unsigned int), /* VIPS_FORMAT_INT */ sizeof(float), /* VIPS_FORMAT_FLOAT */ 2 * sizeof(float), /* VIPS_FORMAT_COMPLEX */ sizeof(double), /* VIPS_FORMAT_DOUBLE */ 2 * sizeof(double) /* VIPS_FORMAT_DPCOMPLEX */ }; /** * vips_format_sizeof: * @format: format type * * Returns: number of bytes for a band format. */ guint64 vips_format_sizeof(VipsBandFormat format) { format = VIPS_CLIP(0, format, VIPS_FORMAT_DPCOMPLEX); return vips__image_sizeof_bandformat[format]; } /** * vips_format_sizeof_unsafe: (skip) * @format: format type * * A fast but dangerous version of vips_format_sizeof(). You must have * previously range-checked @format or you'll crash. * * Returns: number of bytes for a band format. */ guint64 vips_format_sizeof_unsafe(VipsBandFormat format) { g_assert(0 <= format && format <= VIPS_FORMAT_DPCOMPLEX); return vips__image_sizeof_bandformat[format]; } /** * vips_interpretation_max_alpha: * @interpretation: image interpretation * * Returns: the maximum alpha value for an interpretation. */ double vips_interpretation_max_alpha(VipsInterpretation interpretation) { switch (interpretation) { case VIPS_INTERPRETATION_GREY16: case VIPS_INTERPRETATION_RGB16: return 65535.0; case VIPS_INTERPRETATION_scRGB: return 1.0; default: return 255.0; } } #ifdef DEBUG /* Check that this meta is on the hash table. */ static void * meta_sanity_on_hash(VipsMeta *meta, VipsImage *im, void *b) { VipsMeta *found; if (meta->im != im) printf("*** field \"%s\" has incorrect im\n", meta->name); if (!(found = g_hash_table_lookup(im->meta, meta->name))) printf("*** field \"%s\" is on traverse but not in hash\n", meta->name); if (found != meta) printf("*** meta \"%s\" on traverse and hash do not match\n", meta->name); return NULL; } static void meta_sanity_on_traverse(const char *name, VipsMeta *meta, VipsImage *im) { if (meta->name != name) printf("*** field \"%s\" has incorrect name\n", meta->name); if (meta->im != im) printf("*** field \"%s\" has incorrect im\n", meta->name); if (!g_slist_find(im->meta_traverse, meta)) printf("*** field \"%s\" is in hash but not on traverse\n", meta->name); } static void meta_sanity(const VipsImage *im) { if (im->meta) g_hash_table_foreach(im->meta, (GHFunc) meta_sanity_on_traverse, (void *) im); vips_slist_map2(im->meta_traverse, (VipsSListMap2Fn) meta_sanity_on_hash, (void *) im, NULL); } #endif /*DEBUG*/ static void meta_free(VipsMeta *meta) { #ifdef DEBUG { char *str_value; str_value = g_strdup_value_contents(&meta->value); printf("meta_free: name %s, value = %s\n", meta->name, str_value); g_free(str_value); } #endif /*DEBUG*/ if (meta->im) meta->im->meta_traverse = g_slist_remove(meta->im->meta_traverse, meta); g_value_unset(&meta->value); g_free(meta->name); g_free(meta); } static VipsMeta * meta_new(VipsImage *image, const char *name, GValue *value) { VipsMeta *meta; meta = g_new(VipsMeta, 1); meta->im = image; meta->name = NULL; memset(&meta->value, 0, sizeof(GValue)); meta->name = g_strdup(name); /* Special case: we don't want to have G_STRING on meta. They will be * copied down pipelines, plus some of our API (like * vips_image_get_string()) assumes that the GValue is a refstring and * that read-only pointers can be handed out. * * Turn G_TYPE_STRING into VIPS_TYPE_REF_STRING. */ if (G_VALUE_TYPE(value) == G_TYPE_STRING) g_value_init(&meta->value, VIPS_TYPE_REF_STRING); else g_value_init(&meta->value, G_VALUE_TYPE(value)); /* We don't do any conversions that can fail. */ (void) g_value_transform(value, &meta->value); image->meta_traverse = g_slist_append(image->meta_traverse, meta); g_hash_table_replace(image->meta, meta->name, meta); #ifdef DEBUG { char *str_value; str_value = g_strdup_value_contents(value); printf("meta_new: name %s, value = %s\n", name, str_value); g_free(str_value); } #endif /*DEBUG*/ return meta; } /* Destroy all the meta on an image. */ void vips__meta_destroy(VipsImage *image) { VIPS_FREEF(g_hash_table_destroy, image->meta); g_assert(!image->meta_traverse); } static void meta_init(VipsImage *im) { if (!im->meta) { g_assert(!im->meta_traverse); im->meta = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, (GDestroyNotify) meta_free); } } /** * vips_image_get_width: * @image: image to get from * * Returns: the number of pixels across the image. */ int vips_image_get_width(const VipsImage *image) { return image->Xsize; } /** * vips_image_get_height: * @image: image to get from * * Returns: the number of pixels down the image. */ int vips_image_get_height(const VipsImage *image) { return image->Ysize; } /** * vips_image_get_bands: * @image: image to get from * * Returns: the number of bands (channels) in the image. */ int vips_image_get_bands(const VipsImage *image) { return image->Bands; } /** * vips_image_get_format: * @image: image to get from * * Returns: the format of each band element. */ VipsBandFormat vips_image_get_format(const VipsImage *image) { return image->BandFmt; } /** * vips_image_get_format_max: * @format: the format * * Returns: the maximum numeric value possible for this format. */ double vips_image_get_format_max(VipsBandFormat format) { switch (format) { case VIPS_FORMAT_UCHAR: return UCHAR_MAX; case VIPS_FORMAT_CHAR: return SCHAR_MAX; case VIPS_FORMAT_USHORT: return USHRT_MAX; case VIPS_FORMAT_SHORT: return SHRT_MAX; case VIPS_FORMAT_UINT: return UINT_MAX; case VIPS_FORMAT_INT: return INT_MAX; case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_COMPLEX: return FLT_MAX; case VIPS_FORMAT_DOUBLE: case VIPS_FORMAT_DPCOMPLEX: return DBL_MAX; default: return -1; } } /** * vips_image_guess_format: * @image: image to guess for * * Return the #VipsBandFormat for an image, guessing a sane value if * the set value looks crazy. * * For example, for a float image tagged as rgb16, we'd return ushort. * * Returns: a sensible #VipsBandFormat for the image. */ VipsBandFormat vips_image_guess_format(const VipsImage *image) { VipsBandFormat format; /* Stop a compiler warning. */ format = VIPS_FORMAT_UCHAR; switch (image->Type) { case VIPS_INTERPRETATION_B_W: case VIPS_INTERPRETATION_HISTOGRAM: case VIPS_INTERPRETATION_MULTIBAND: format = image->BandFmt; break; case VIPS_INTERPRETATION_FOURIER: if (image->BandFmt == VIPS_FORMAT_DOUBLE || image->BandFmt == VIPS_FORMAT_DPCOMPLEX) format = VIPS_FORMAT_DPCOMPLEX; else format = VIPS_FORMAT_COMPLEX; break; case VIPS_INTERPRETATION_sRGB: case VIPS_INTERPRETATION_RGB: format = VIPS_FORMAT_UCHAR; break; case VIPS_INTERPRETATION_XYZ: case VIPS_INTERPRETATION_LAB: case VIPS_INTERPRETATION_CMC: case VIPS_INTERPRETATION_LCH: case VIPS_INTERPRETATION_HSV: case VIPS_INTERPRETATION_scRGB: case VIPS_INTERPRETATION_YXY: format = VIPS_FORMAT_FLOAT; break; case VIPS_INTERPRETATION_CMYK: if (image->BandFmt == VIPS_FORMAT_USHORT) format = VIPS_FORMAT_USHORT; else format = VIPS_FORMAT_UCHAR; break; case VIPS_INTERPRETATION_LABQ: format = VIPS_FORMAT_UCHAR; break; case VIPS_INTERPRETATION_LABS: format = VIPS_FORMAT_SHORT; break; case VIPS_INTERPRETATION_GREY16: case VIPS_INTERPRETATION_RGB16: format = VIPS_FORMAT_USHORT; break; case VIPS_INTERPRETATION_MATRIX: if (image->BandFmt == VIPS_FORMAT_DOUBLE) format = VIPS_FORMAT_DOUBLE; else format = VIPS_FORMAT_FLOAT; break; default: format = VIPS_FORMAT_NOTSET; break; } return format; } /** * vips_image_get_coding: * @image: image to get from * * Returns: the image coding */ VipsCoding vips_image_get_coding(const VipsImage *image) { return image->Coding; } /** * vips_image_get_interpretation: * @image: image to get from * * Return the #VipsInterpretation set in the image header. * Use vips_image_guess_interpretation() if you want a sanity-checked value. * * Returns: the #VipsInterpretation from the image header. */ VipsInterpretation vips_image_get_interpretation(const VipsImage *image) { return image->Type; } /* Try to guess a sane value for interpretation. */ static VipsInterpretation vips_image_default_interpretation(const VipsImage *image) { switch (image->Coding) { case VIPS_CODING_LABQ: return VIPS_INTERPRETATION_LABQ; case VIPS_CODING_RAD: return VIPS_INTERPRETATION_sRGB; default: break; } switch (image->BandFmt) { case VIPS_FORMAT_UCHAR: case VIPS_FORMAT_SHORT: case VIPS_FORMAT_UINT: case VIPS_FORMAT_INT: switch (image->Bands) { case 1: case 2: return VIPS_INTERPRETATION_B_W; case 3: case 4: return VIPS_INTERPRETATION_sRGB; default: return VIPS_INTERPRETATION_MULTIBAND; } case VIPS_FORMAT_CHAR: switch (image->Bands) { case 1: return VIPS_INTERPRETATION_MATRIX; default: return VIPS_INTERPRETATION_MULTIBAND; } case VIPS_FORMAT_USHORT: switch (image->Bands) { case 1: case 2: return VIPS_INTERPRETATION_GREY16; case 3: case 4: return VIPS_INTERPRETATION_RGB16; default: return VIPS_INTERPRETATION_MULTIBAND; } case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_DOUBLE: switch (image->Bands) { case 1: case 2: return VIPS_INTERPRETATION_B_W; case 3: case 4: return VIPS_INTERPRETATION_scRGB; default: return VIPS_INTERPRETATION_MULTIBAND; } case VIPS_FORMAT_COMPLEX: case VIPS_FORMAT_DPCOMPLEX: return VIPS_INTERPRETATION_FOURIER; default: return VIPS_INTERPRETATION_MULTIBAND; } } /** * vips_image_guess_interpretation: * @image: image to guess for * * Return the #VipsInterpretation for an image, guessing a sane value if * the set value looks crazy. * * Returns: a sensible #VipsInterpretation for the image. */ VipsInterpretation vips_image_guess_interpretation(const VipsImage *image) { gboolean sane; sane = TRUE; /* Coding overrides interpretation. */ switch (image->Coding) { case VIPS_CODING_ERROR: sane = FALSE; break; case VIPS_CODING_LABQ: if (image->Type != VIPS_INTERPRETATION_LABQ) sane = FALSE; break; case VIPS_CODING_RAD: if (image->Type != VIPS_INTERPRETATION_sRGB) sane = FALSE; break; default: break; } switch (image->Type) { case VIPS_INTERPRETATION_ERROR: sane = FALSE; break; case VIPS_INTERPRETATION_MULTIBAND: /* This is a pretty useless generic tag. Always reset it. */ sane = FALSE; break; case VIPS_INTERPRETATION_B_W: /* Don't test bands, we allow bands after the first to be * unused extras, like alpha. */ break; case VIPS_INTERPRETATION_HISTOGRAM: if (image->Xsize > 1 && image->Ysize > 1) sane = FALSE; break; case VIPS_INTERPRETATION_FOURIER: if (!vips_band_format_iscomplex(image->BandFmt)) sane = FALSE; break; case VIPS_INTERPRETATION_XYZ: case VIPS_INTERPRETATION_LAB: case VIPS_INTERPRETATION_RGB: case VIPS_INTERPRETATION_CMC: case VIPS_INTERPRETATION_LCH: case VIPS_INTERPRETATION_sRGB: case VIPS_INTERPRETATION_HSV: if (image->Bands < 3) sane = FALSE; break; case VIPS_INTERPRETATION_scRGB: case VIPS_INTERPRETATION_YXY: /* Need float values in 0 - 1. */ if (!vips_band_format_isfloat(image->BandFmt) || image->Bands < 3) sane = FALSE; break; case VIPS_INTERPRETATION_CMYK: if (image->Bands < 4) sane = FALSE; break; case VIPS_INTERPRETATION_LABQ: if (image->Coding != VIPS_CODING_LABQ) sane = FALSE; break; case VIPS_INTERPRETATION_LABS: /* Needs to be able to express +/- 32767 */ if (vips_band_format_isuint(image->BandFmt) || vips_band_format_is8bit(image->BandFmt) || image->Bands < 3) sane = FALSE; break; case VIPS_INTERPRETATION_RGB16: if (vips_band_format_is8bit(image->BandFmt) || image->Bands < 3) sane = FALSE; break; case VIPS_INTERPRETATION_GREY16: if (vips_band_format_is8bit(image->BandFmt)) sane = FALSE; break; case VIPS_INTERPRETATION_MATRIX: if (image->Bands != 1) sane = FALSE; break; default: g_assert_not_reached(); } if (sane) return vips_image_get_interpretation(image); else return vips_image_default_interpretation(image); } /** * vips_image_get_xres: * @image: image to get from * * Returns: the horizontal image resolution in pixels per millimeter. */ double vips_image_get_xres(const VipsImage *image) { return image->Xres; } /** * vips_image_get_yres: * @image: image to get from * * Returns: the vertical image resolution in pixels per millimeter. */ double vips_image_get_yres(const VipsImage *image) { return image->Yres; } /** * vips_image_get_xoffset: * @image: image to get from * * Returns: the horizontal position of the image origin, in pixels. */ int vips_image_get_xoffset(const VipsImage *image) { return image->Xoffset; } /** * vips_image_get_yoffset: * @image: image to get from * * Returns: the vertical position of the image origin, in pixels. */ int vips_image_get_yoffset(const VipsImage *image) { return image->Yoffset; } /** * vips_image_get_filename: * @image: image to get from * * Returns: the name of the file the image was loaded from, or NULL if there * is no filename. */ const char * vips_image_get_filename(const VipsImage *image) { return image->filename; } /** * vips_image_get_mode: * @image: image to get from * * Image modes are things like `"t"`, meaning a memory buffer, and `"p"` * meaning a delayed computation. * * Returns: the image mode. */ const char * vips_image_get_mode(const VipsImage *image) { return image->mode; } /** * vips_image_get_scale: * @image: image to get from * * Matrix images can have an optional `scale` field for use by integer * convolution. * * Returns: the scale. */ double vips_image_get_scale(const VipsImage *image) { double scale; scale = 1.0; if (vips_image_get_typeof(image, "scale")) vips_image_get_double(image, "scale", &scale); return scale; } /** * vips_image_get_offset: * @image: image to get from * * Matrix images can have an optional `offset` field for use by integer * convolution. * * Returns: the offset. */ double vips_image_get_offset(const VipsImage *image) { double offset; offset = 0.0; if (vips_image_get_typeof(image, "offset")) vips_image_get_double(image, "offset", &offset); return offset; } /** * vips_image_get_page_height: * @image: image to get from * * Multi-page images can have a page height. Fetch it, and sanity check it. If * page-height is not set, it defaults to the image height. * * Returns: the page height. */ int vips_image_get_page_height(VipsImage *image) { int page_height; if (vips_image_get_typeof(image, VIPS_META_PAGE_HEIGHT) && !vips_image_get_int(image, VIPS_META_PAGE_HEIGHT, &page_height) && page_height > 0 && page_height < image->Ysize && image->Ysize % page_height == 0) return page_height; return image->Ysize; } /** * vips_image_get_n_pages: * @image: image to get from * * Fetch and sanity-check #VIPS_META_N_PAGES. Default to 1 if not present or * crazy. * * This is the number of pages in the image file, not the number of pages that * have been loaded into @image. * * Returns: the number of pages in the image file */ int vips_image_get_n_pages(VipsImage *image) { int n_pages; if (vips_image_get_typeof(image, VIPS_META_N_PAGES) && !vips_image_get_int(image, VIPS_META_N_PAGES, &n_pages) && n_pages > 1 && n_pages < 10000) return n_pages; return 1; } /** * vips_image_get_concurrency: * @image: image to get from * * Fetch and sanity-check #VIPS_CONCURRENCY. Default to 1 if not present or * crazy. * * Returns: the suggested concurrency for this image */ int vips_image_get_concurrency(VipsImage *image, int default_concurrency) { int concurrency; if (vips_image_get_typeof(image, VIPS_META_CONCURRENCY) && !vips_image_get_int(image, VIPS_META_CONCURRENCY, &concurrency) && concurrency >= 1 && concurrency < 100) return concurrency; return default_concurrency; } /** * vips_image_get_n_subifds: * @image: image to get from * * Fetch and sanity-check #VIPS_META_N_SUBIFDS. Default to 0 if not present or * crazy. * * Returns: the number of subifds in the image file */ int vips_image_get_n_subifds(VipsImage *image) { int n_subifds; if (vips_image_get_typeof(image, VIPS_META_N_SUBIFDS) && !vips_image_get_int(image, VIPS_META_N_SUBIFDS, &n_subifds) && n_subifds > 1 && n_subifds < 1000) return n_subifds; return 0; } /** * vips_image_get_orientation: * @image: image to get from * * Fetch and sanity-check #VIPS_META_ORIENTATION. Default to 1 (no rotate, * no flip) if not present or crazy. * * Returns: the image orientation. */ int vips_image_get_orientation(VipsImage *image) { int orientation; if (vips_image_get_typeof(image, VIPS_META_ORIENTATION) && !vips_image_get_int(image, VIPS_META_ORIENTATION, &orientation) && orientation > 0 && orientation < 9) return orientation; return 1; } /** * vips_image_get_orientation_swap: * @image: image to get from * * Return %TRUE if applying the orientation would swap width and height. * * Returns: if width/height will swap */ gboolean vips_image_get_orientation_swap(VipsImage *image) { int orientation = vips_image_get_orientation(image); return orientation >= 5 && orientation <= 8; } /** * vips_image_get_data: * @image: image to get data for * * Return a pointer to the image's pixel data, if possible. This can involve * allocating large amounts of memory and performing a long computation. Image * pixels are laid out in band-packed rows. * * Since this function modifies @image, it is not threadsafe. Only call it on * images which you are sure have not been shared with another thread. * * See also: vips_image_wio_input(), vips_image_copy_memory(). * * Returns: (transfer none): a pointer to pixel data, if possible. */ const void * vips_image_get_data(VipsImage *image) { if (vips_image_wio_input(image)) return NULL; return image->data; } /** * vips_image_init_fields: * @image: image to init * @xsize: image width * @ysize: image height * @bands: image bands * @format: band format * @coding: image coding * @interpretation: image type * @xres: horizontal resolution, pixels per millimetre * @yres: vertical resolution, pixels per millimetre * * A convenience function to set the header fields after creating an image. * Normally you copy the fields from your input images with * vips_image_pipelinev() and then make * any adjustments you need, but if you are creating an image from scratch, * for example vips_black() or vips_jpegload(), you do need to set all the * fields yourself. * * See also: vips_image_pipelinev(). */ void vips_image_init_fields(VipsImage *image, int xsize, int ysize, int bands, VipsBandFormat format, VipsCoding coding, VipsInterpretation interpretation, double xres, double yres) { g_object_set(image, "width", xsize, "height", ysize, "bands", bands, "format", format, NULL); image->Coding = coding; image->Type = interpretation; image->Xres = VIPS_MAX(0, xres); image->Yres = VIPS_MAX(0, yres); } static void * meta_cp_field(VipsMeta *meta, VipsImage *dst, void *b) { #ifdef DEBUG { char *str_value; str_value = g_strdup_value_contents(&meta->value); printf("vips__meta_cp: copying name %s, value = %s\n", meta->name, str_value); g_free(str_value); } #endif /*DEBUG*/ (void) meta_new(dst, meta->name, &meta->value); #ifdef DEBUG meta_sanity(dst); #endif /*DEBUG*/ return NULL; } /* Copy meta on to dst. */ int vips__image_meta_copy(VipsImage *dst, const VipsImage *src) { if (src->meta) { /* We lock with vips_image_set() to stop races in highly- * threaded applications. */ g_mutex_lock(vips__meta_lock); meta_init(dst); vips_slist_map2(src->meta_traverse, (VipsSListMap2Fn) meta_cp_field, dst, NULL); g_mutex_unlock(vips__meta_lock); } return 0; } /* We have to have this as a separate entry point so we can support the old * vips7 API. */ int vips__image_copy_fields_array(VipsImage *out, VipsImage *in[]) { int i; int ni; g_assert(in[0]); /* Copy magic too, handy for knowing the original image's byte order. */ out->magic = in[0]->magic; out->Xsize = in[0]->Xsize; out->Ysize = in[0]->Ysize; out->Bands = in[0]->Bands; out->Bbits = in[0]->Bbits; out->BandFmt = in[0]->BandFmt; out->Type = in[0]->Type; out->Coding = in[0]->Coding; out->Xres = in[0]->Xres; out->Yres = in[0]->Yres; out->Xoffset = in[0]->Xoffset; out->Yoffset = in[0]->Yoffset; /* Count number of images. */ for (ni = 0; in[ni]; ni++) ; /* Need to copy last-to-first so that in0 meta will override any * earlier meta. * * Don't destroy the meta on out. Things like foreign.c like setting * image properties before calling a subclass loader, and those * subclass loaders will sometimes write to an image. */ for (i = ni - 1; i >= 0; i--) if (vips__image_meta_copy(out, in[i])) return -1; /* Merge hists first to last. */ for (i = 0; in[i]; i++) out->history_list = vips__gslist_gvalue_merge( out->history_list, in[i]->history_list); return 0; } /** * vips_image_set: * @image: image to set the metadata on * @name: the name to give the metadata * @value: the %GValue to copy into the image * * Set a piece of metadata on @image. Any old metadata with that name is * destroyed. The %GValue is copied into the image, so you need to unset the * value when you're done with it. * * For example, to set an integer on an image (though you would use the * convenience function vips_image_set_int() in practice), you would do: * * |[ * GValue value = G_VALUE_INIT; * * g_value_init(&value, G_TYPE_INT); * g_value_set_int(&value, 42); * vips_image_set(image, name, &value); * g_value_unset(&value); * ]| * * See also: vips_image_get(). */ void vips_image_set(VipsImage *image, const char *name, GValue *value) { g_assert(name); g_assert(value); /* We lock between modifying metadata and copying metadata between * images, see vips__image_meta_copy(). * * This prevents modification of metadata by one thread racing with * metadata copy on another -- this can lead to crashes in * highly-threaded applications. */ g_mutex_lock(vips__meta_lock); meta_init(image); (void) meta_new(image, name, value); g_mutex_unlock(vips__meta_lock); /* If we're setting an EXIF data block, we need to automatically expand * out all the tags. This will set things like xres/yres too. * * We do this here rather than in meta_new() since we don't want to * trigger on copy_fields. */ if (strcmp(name, VIPS_META_EXIF_NAME) == 0) if (vips__exif_parse(image)) g_warning("image_set: bad exif data"); #ifdef DEBUG meta_sanity(image); #endif /*DEBUG*/ } /* Unfortunately gvalue seems to have no way of doing this. Just handle the vips * built-in types. */ static void vips_set_value_from_pointer(GValue *value, void *data) { GType type = G_VALUE_TYPE(value); /* The fundamental type ... eg. G_TYPE_ENUM for a VIPS_TYPE_KERNEL, * or G_TYPE_OBJECT for VIPS_TYPE_IMAGE(). */ GType fundamental = G_TYPE_FUNDAMENTAL(type); if (fundamental == G_TYPE_INT) g_value_set_int(value, *((int *) data)); else if (fundamental == G_TYPE_DOUBLE) g_value_set_double(value, *((double *) data)); else if (fundamental == G_TYPE_ENUM) g_value_set_enum(value, *((int *) data)); else if (fundamental == G_TYPE_STRING) g_value_set_string(value, *((char **) data)); else g_warning("%s: unimplemented vips_set_value_from_pointer() type %s", G_STRLOC, g_type_name(type)); } /** * vips_image_get: * @image: image to get the field from from * @name: the name to fetch * @value_copy: (transfer full) (out caller-allocates): the %GValue is copied into this * * Fill @value_copy with a copy of the header field. @value_copy must be zeroed * but uninitialised. * * This will return -1 and add a message to the error buffer if the field * does not exist. Use vips_image_get_typeof() to test for the * existence of a field first if you are not certain it will be there. * * For example, to read a double from an image (though of course you would use * vips_image_get_double() in practice): * * |[ * GValue value = G_VALUE_INIT; * double d; * * if (vips_image_get(image, name, &value)) * return -1; * * if (G_VALUE_TYPE(&value) != G_TYPE_DOUBLE) { * vips_error("mydomain", * _("field \"%s\" is of type %s, not double"), * name, * g_type_name(G_VALUE_TYPE(&value))); * g_value_unset(&value); * return -1; * } * * d = g_value_get_double(&value); * g_value_unset(&value); * ]| * * See also: vips_image_get_typeof(), vips_image_get_double(). * * Returns: (skip): 0 on success, -1 otherwise. */ int vips_image_get(const VipsImage *image, const char *name, GValue *value_copy) { int i; VipsMeta *meta; g_assert(name); g_assert(value_copy); for (i = 0; i < VIPS_NUMBER(vips_header_fields); i++) { HeaderField *field = &vips_header_fields[i]; if (strcmp(field->name, name) == 0) { GType gtype = g_type_from_name(field->type); g_value_init(value_copy, gtype); vips_set_value_from_pointer(value_copy, G_STRUCT_MEMBER_P(image, field->offset)); return 0; } } for (i = 0; i < VIPS_NUMBER(vips_header_fields_old); i++) { HeaderField *field = &vips_header_fields_old[i]; if (strcmp(field->name, name) == 0) { GType gtype = g_type_from_name(field->type); g_value_init(value_copy, gtype); vips_set_value_from_pointer(value_copy, G_STRUCT_MEMBER_P(image, field->offset)); return 0; } } if (image->meta && (meta = g_hash_table_lookup(image->meta, name))) { g_value_init(value_copy, G_VALUE_TYPE(&meta->value)); g_value_copy(&meta->value, value_copy); return 0; } vips_error("vips_image_get", _("field \"%s\" not found"), name); return -1; } /** * vips_image_get_typeof: * @image: image to test * @name: the name to search for * * Read the %GType for a header field. Returns zero if there is no * field of that name. * * See also: vips_image_get(). * * Returns: the %GType of the field, or zero if there is no * field of that name. */ GType vips_image_get_typeof(const VipsImage *image, const char *name) { int i; VipsMeta *meta; g_assert(name); for (i = 0; i < VIPS_NUMBER(vips_header_fields); i++) { HeaderField *field = &vips_header_fields[i]; if (strcmp(field->name, name) == 0) return g_type_from_name(field->type); } for (i = 0; i < VIPS_NUMBER(vips_header_fields_old); i++) { HeaderField *field = &vips_header_fields_old[i]; if (strcmp(field->name, name) == 0) return g_type_from_name(field->type); } if (image->meta && (meta = g_hash_table_lookup(image->meta, name))) return G_VALUE_TYPE(&meta->value); VIPS_DEBUG_MSG("vips_image_get_typeof: unknown field %s\n", name); return 0; } /** * vips_image_remove: * @image: image to test * @name: the name to search for * * Find and remove an item of metadata. Return %FALSE if no metadata of that * name was found. * * See also: vips_image_set(), vips_image_get_typeof(). * * Returns: %TRUE if an item of metadata of that name was found and removed */ gboolean vips_image_remove(VipsImage *image, const char *name) { gboolean result; result = FALSE; if (image->meta) { /* We lock between modifying metadata and copying metadata * between images, see vips__image_meta_copy(). * * This prevents modification of metadata by one thread * racing with metadata copy on another -- this can lead to * crashes in highly-threaded applications. */ g_mutex_lock(vips__meta_lock); result = g_hash_table_remove(image->meta, name); g_mutex_unlock(vips__meta_lock); } return result; } /* Deprecated header fields we hide from _map. */ static const char *vips_image_header_deprecated[] = { "ipct-data", "gif-delay", "gif-loop", "palette-bit-depth", "heif-bitdepth" }; static void * vips_image_map_fn(VipsMeta *meta, VipsImageMapFn fn, void *a) { int i; /* Hide deprecated fields. */ for (i = 0; i < VIPS_NUMBER(vips_image_header_deprecated); i++) if (strcmp(meta->name, vips_image_header_deprecated[i]) == 0) return NULL; return fn(meta->im, meta->name, &meta->value, a); } /** * vips_image_map: * @image: image to map over * @fn: (scope call): function to call for each header field * @a: (closure fn): user data for function * * This function calls @fn for every header field, including every item of * metadata. * * Like all _map functions, the user function should return %NULL to continue * iteration, or a non-%NULL pointer to indicate early termination. * * See also: vips_image_get_typeof(), vips_image_get(). * * Returns: (transfer none): %NULL on success, the failing pointer otherwise. */ void * vips_image_map(VipsImage *image, VipsImageMapFn fn, void *a) { int i; GValue value = G_VALUE_INIT; void *result; for (i = 0; i < VIPS_NUMBER(vips_header_fields); i++) { HeaderField *field = &vips_header_fields[i]; (void) vips_image_get(image, field->name, &value); result = fn(image, field->name, &value, a); g_value_unset(&value); if (result) return result; } if (image->meta_traverse && (result = vips_slist_map2(image->meta_traverse, (VipsSListMap2Fn) vips_image_map_fn, fn, a))) return result; return NULL; } static void * count_fields(VipsImage *image, const char *field, GValue *value, void *a) { int *n_fields = (int *) a; *n_fields += 1; return NULL; } static void * add_fields(VipsImage *image, const char *field, GValue *value, void *a) { gchar ***p = (gchar ***) a; **p = g_strdup(field); *p += 1; return NULL; } /** * vips_image_get_fields: * @image: image to get fields from * * Get a %NULL-terminated array listing all the metadata field names on @image. * Free the return result with g_strfreev(). * * This is handy for language bindings. From C, it's usually more convenient to * use vips_image_map(). * * Returns: (transfer full): metadata fields in image, as a %NULL-terminated * array. */ gchar ** vips_image_get_fields(VipsImage *image) { int n_fields; gchar **fields; gchar **p; n_fields = 0; (void) vips_image_map(image, count_fields, &n_fields); fields = g_new0(gchar *, n_fields + 1); p = fields; (void) vips_image_map(image, add_fields, &p); return fields; } /** * vips_image_set_area: * @image: image to attach the metadata to * @name: metadata name * @free_fn: (scope async) (nullable): free function for @data * @data: (transfer full): pointer to area of memory * * Attaches @data as a metadata item on @image under the name @name. When * VIPS no longer needs the metadata, it will be freed with @free_fn. * * See also: vips_image_get_double(), vips_image_set() */ void vips_image_set_area(VipsImage *image, const char *name, VipsCallbackFn free_fn, void *data) { GValue value = G_VALUE_INIT; vips_value_set_area(&value, free_fn, data); vips_image_set(image, name, &value); g_value_unset(&value); } static int meta_get_value(const VipsImage *image, const char *name, GType type, GValue *value_copy) { GValue value = G_VALUE_INIT; if (vips_image_get(image, name, &value)) return -1; g_value_init(value_copy, type); if (!g_value_transform(&value, value_copy)) { vips_error("VipsImage", _("field \"%s\" is of type %s, not %s"), name, g_type_name(G_VALUE_TYPE(&value)), g_type_name(type)); g_value_unset(&value); return -1; } g_value_unset(&value); return 0; } /** * vips_image_get_area: * @image: image to get the metadata from * @name: metadata name * @data: (out): return metadata value * * Gets @data from @image under the name @name. A convenience * function over vips_image_get(). Use vips_image_get_typeof() to test for * the existence of a piece of metadata. * * See also: vips_image_set_area(), vips_image_get(), * vips_image_get_typeof() * * Returns: 0 on success, -1 otherwise. */ int vips_image_get_area(const VipsImage *image, const char *name, const void **data) { GValue value_copy = G_VALUE_INIT; if (!meta_get_value(image, name, VIPS_TYPE_AREA, &value_copy)) { *data = vips_value_get_area(&value_copy, NULL); g_value_unset(&value_copy); return 0; } return -1; } /** * vips_image_set_blob: * @image: image to attach the metadata to * @name: metadata name * @free_fn: (scope async) (nullable): free function for @data * @data: (array length=length) (element-type guint8) (transfer full): pointer to area of * memory * @length: length of memory area * * Attaches @data as a metadata item on @image under the name @name. * * See also: vips_image_get_blob(), vips_image_set(). */ void vips_image_set_blob(VipsImage *image, const char *name, VipsCallbackFn free_fn, const void *data, size_t size) { GValue value = G_VALUE_INIT; g_value_init(&value, VIPS_TYPE_BLOB); vips_value_set_blob(&value, free_fn, data, size); vips_image_set(image, name, &value); g_value_unset(&value); } /** * vips_image_set_blob_copy: * @image: image to attach the metadata to * @name: metadata name * @data: (array length=length) (element-type guint8): pointer to area of memory * @length: length of memory area * * Attaches @data as a metadata item on @image under the name @name, taking * a copy of the memory area. * * See also: vips_image_get_blob(), vips_image_set(). */ void vips_image_set_blob_copy(VipsImage *image, const char *name, const void *data, size_t length) { void *data_copy; /* Cap at 100mb for sanity. */ if (!data || length == 0 || length > 100 * 1024 * 1024) return; /* We add an extra, secret null byte at the end, just in case this blob * is read as a C string. The libtiff reader attaches * XMP XML as a blob, for example. */ if (!(data_copy = vips_malloc(NULL, length + 1))) return; memcpy(data_copy, data, length); ((unsigned char *) data_copy)[length] = '\0'; vips_image_set_blob(image, name, (VipsCallbackFn) vips_area_free_cb, data_copy, length); } /** * vips_image_get_blob: * @image: image to get the metadata from * @name: metadata name * @data: (out) (array length=length) (element-type guint8): pointer to area of memory * @length: (out): return the blob length here, optionally * * Gets @data from @image under the name @name, optionally returns its * length in @length. Use vips_image_get_typeof() to test for the existence * of a piece of metadata. * * See also: vips_image_get(), vips_image_get_typeof(), vips_blob_get(), * * Returns: 0 on success, -1 otherwise. */ int vips_image_get_blob(const VipsImage *image, const char *name, const void **data, size_t *length) { GValue value_copy = G_VALUE_INIT; if (!meta_get_value(image, name, VIPS_TYPE_BLOB, &value_copy)) { *data = vips_value_get_blob(&value_copy, length); g_value_unset(&value_copy); return 0; } return -1; } /** * vips_image_get_int: * @image: image to get the header field from * @name: field name * @out: (out): return field value * * Gets @out from @im under the name @name. * The value will be transformed into * an int, if possible. * * See also: vips_image_get(), vips_image_get_typeof() * * Returns: 0 on success, -1 otherwise. */ int vips_image_get_int(const VipsImage *image, const char *name, int *out) { GValue value = G_VALUE_INIT; if (meta_get_value(image, name, G_TYPE_INT, &value)) return -1; *out = g_value_get_int(&value); g_value_unset(&value); return 0; } /** * vips_image_set_int: * @image: image to attach the metadata to * @name: metadata name * @i: metadata value * * Attaches @i as a metadata item on @image under the name @name. A * convenience * function over vips_image_set(). * * See also: vips_image_get_int(), vips_image_set() */ void vips_image_set_int(VipsImage *image, const char *name, int i) { GValue value = G_VALUE_INIT; g_value_init(&value, G_TYPE_INT); g_value_set_int(&value, i); vips_image_set(image, name, &value); g_value_unset(&value); } /** * vips_image_get_double: * @image: image to get the header field from * @name: field name * @out: (out): return field value * * Gets @out from @im under the name @name. * The value will be transformed into * a double, if possible. * * See also: vips_image_get(), vips_image_get_typeof() * * Returns: 0 on success, -1 otherwise. */ int vips_image_get_double(const VipsImage *image, const char *name, double *out) { GValue value = G_VALUE_INIT; if (meta_get_value(image, name, G_TYPE_DOUBLE, &value)) return -1; *out = g_value_get_double(&value); g_value_unset(&value); return 0; } /** * vips_image_set_double: * @image: image to attach the metadata to * @name: metadata name * @d: metadata value * * Attaches @d as a metadata item on @image as @name. A * convenience * function over vips_image_set(). * * See also: vips_image_get_double(), vips_image_set() */ void vips_image_set_double(VipsImage *image, const char *name, double d) { GValue value = G_VALUE_INIT; g_value_init(&value, G_TYPE_DOUBLE); g_value_set_double(&value, d); vips_image_set(image, name, &value); g_value_unset(&value); } /** * vips_image_get_string: * @image: image to get the header field from * @name: field name * @out: (out) (transfer none): return field value * * Gets @out from @im under the name @name. * The field must be of type * G_TYPE_STRING, VIPS_TYPE_REF_STRING. * * Do not free @out. * * Use vips_image_get_as_string() to fetch any field as a string. * * See also: vips_image_get(), vips_image_get_typeof() * * Returns: 0 on success, -1 otherwise. */ int vips_image_get_string(const VipsImage *image, const char *name, const char **out) { GValue value = G_VALUE_INIT; if (vips_image_get(image, name, &value)) return -1; if (G_VALUE_TYPE(&value) == VIPS_TYPE_REF_STRING) { VipsArea *area; area = g_value_get_boxed(&value); *out = area->data; } else if (G_VALUE_TYPE(&value) == G_TYPE_STRING) { *out = g_value_get_string(&value); } else { vips_error("VipsImage", _("field \"%s\" is of type %s, not VipsRefString"), name, g_type_name(G_VALUE_TYPE(&value))); g_value_unset(&value); return -1; } g_value_unset(&value); return 0; } /** * vips_image_set_string: * @image: image to attach the metadata to * @name: metadata name * @str: metadata value * * Attaches @str as a metadata item on @image as @name. * A convenience * function over vips_image_set() using #VIPS_TYPE_REF_STRING. * * See also: vips_image_get_double(), vips_image_set(). */ void vips_image_set_string(VipsImage *image, const char *name, const char *str) { GValue value = G_VALUE_INIT; g_value_init(&value, VIPS_TYPE_REF_STRING); vips_value_set_ref_string(&value, str); vips_image_set(image, name, &value); g_value_unset(&value); } /** * vips_image_get_as_string: * @image: image to get the header field from * @name: field name * @out: (out) (transfer full): return field value as string * * Returns @name from @image in @out. * This function will read any field, returning it as a printable string. * You need to free the string with g_free() when you are done with it. * * This will base64-encode BLOBs, for example. Use vips_buf_appendgv() to * make a string that's for humans. * * See also: vips_image_get(), vips_image_get_typeof(), vips_buf_appendgv(). * * Returns: 0 on success, -1 otherwise. */ int vips_image_get_as_string(const VipsImage *image, const char *name, char **out) { GValue value = G_VALUE_INIT; GType type; if (vips_image_get(image, name, &value)) return -1; /* Display the save form, if there is one. This way we display * something useful for ICC profiles, xml fields, etc. */ type = G_VALUE_TYPE(&value); if (g_value_type_transformable(type, VIPS_TYPE_SAVE_STRING)) { GValue save_value = G_VALUE_INIT; g_value_init(&save_value, VIPS_TYPE_SAVE_STRING); if (!g_value_transform(&value, &save_value)) return -1; *out = g_strdup(vips_value_get_save_string(&save_value)); g_value_unset(&save_value); } else *out = g_strdup_value_contents(&value); g_value_unset(&value); return 0; } /** * vips_image_print_field: * @image: image to get the header field from * @name: field name * * Prints field @name to stdout as ASCII. Handy for debugging. */ void vips_image_print_field(const VipsImage *image, const char *name) { char *str; if (vips_image_get_as_string(image, name, &str)) { printf("vips_image_print_field: unable to read field\n"); return; } printf(".%s: %s\n", name, str); g_free(str); } /** * vips_image_get_image: * @image: image to get the metadata from * @name: metadata name * @out: (out) (transfer full): return metadata value * * Gets @out from @im under the name @name. * The field must be of type * #VIPS_TYPE_IMAGE. You must unref @out with g_object_unref(). * * Use vips_image_get_typeof() to test for the * existence of a piece of metadata. * * See also: vips_image_get(), vips_image_set_image() * * Returns: 0 on success, -1 otherwise. */ int vips_image_get_image(const VipsImage *image, const char *name, VipsImage **out) { GValue value = G_VALUE_INIT; if (meta_get_value(image, name, VIPS_TYPE_IMAGE, &value)) return -1; *out = g_value_dup_object(&value); g_value_unset(&value); return 0; } /** * vips_image_set_image: * @image: image to attach the metadata to * @name: metadata name * @im: metadata value * * Attaches @im as a metadata item on @image as @name. * A convenience function over vips_image_set(). * * See also: vips_image_get_image(), vips_image_set(). */ void vips_image_set_image(VipsImage *image, const char *name, VipsImage *im) { GValue value = G_VALUE_INIT; g_value_init(&value, VIPS_TYPE_IMAGE); g_value_set_object(&value, im); vips_image_set(image, name, &value); g_value_unset(&value); } /** * vips_image_get_array_int: * @image: image to get the metadata from * @name: metadata name * @out: (out) (array length=n) (transfer none): return pointer to array * @n: (out) (optional): return the number of elements here, optionally * * Gets @out from @im under the name @name. * The field must be of type * #VIPS_TYPE_ARRAY_INT. * * Do not free @out. @out is valid as long as @image is valid. * * Use vips_image_get_typeof() to test for the * existence of a piece of metadata. * * See also: vips_image_get(), vips_image_set_image() * * Returns: 0 on success, -1 otherwise. */ int vips_image_get_array_int(VipsImage *image, const char *name, int **out, int *n) { GValue value = G_VALUE_INIT; if (meta_get_value(image, name, VIPS_TYPE_ARRAY_INT, &value)) return -1; *out = vips_value_get_array_int(&value, n); g_value_unset(&value); return 0; } /** * vips_image_set_array_int: * @image: image to attach the metadata to * @name: metadata name * @array: (array length=n) (allow-none): array of ints * @n: the number of elements * * Attaches @array as a metadata item on @image as @name. * A convenience function over vips_image_set(). * * See also: vips_image_get_image(), vips_image_set(). */ void vips_image_set_array_int(VipsImage *image, const char *name, const int *array, int n) { GValue value = G_VALUE_INIT; g_value_init(&value, VIPS_TYPE_ARRAY_INT); vips_value_set_array_int(&value, array, n); vips_image_set(image, name, &value); g_value_unset(&value); } /** * vips_image_get_array_double: * @image: image to get the metadata from * @name: metadata name * @out: (out) (array length=n) (transfer none): return pointer to array * @n: (out) (optional): return the number of elements here, optionally * * Gets @out from @im under the name @name. * The field must be of type * #VIPS_TYPE_ARRAY_INT. * * Do not free @out. @out is valid as long as @image is valid. * * Use vips_image_get_typeof() to test for the * existence of a piece of metadata. * * See also: vips_image_get(), vips_image_set_image() * * Returns: 0 on success, -1 otherwise. */ int vips_image_get_array_double(VipsImage *image, const char *name, double **out, int *n) { GValue value = G_VALUE_INIT; if (meta_get_value(image, name, VIPS_TYPE_ARRAY_DOUBLE, &value)) return -1; *out = vips_value_get_array_double(&value, n); g_value_unset(&value); return 0; } /** * vips_image_set_array_double: * @image: image to attach the metadata to * @name: metadata name * @array: (array length=n) (allow-none): array of doubles * @n: the number of elements * * Attaches @array as a metadata item on @image as @name. * A convenience function over vips_image_set(). * * See also: vips_image_get_image(), vips_image_set(). */ void vips_image_set_array_double(VipsImage *image, const char *name, const double *array, int n) { GValue value = G_VALUE_INIT; g_value_init(&value, VIPS_TYPE_ARRAY_DOUBLE); vips_value_set_array_double(&value, array, n); vips_image_set(image, name, &value); g_value_unset(&value); } /** * vips_image_history_printf: * @image: add history line to this image * @format: printf() format string * @...: arguments to format string * * Add a line to the image history. The @format and arguments are expanded, the * date and time is appended prefixed with a hash character, and the whole * string is appended to the image history and terminated with a newline. * * For example: * * |[ * vips_image_history_printf(image, "vips invert %s %s", * in->filename, out->filename); * ]| * * Might add the string * * |[ * "vips invert /home/john/fred.v /home/john/jim.v # Fri Apr 3 23:30:35 2009\n" * ]| * * VIPS operations don't add history lines for you because a single action at * the application level might involve many VIPS operations. History must be * recorded by the application. * * Returns: 0 on success, -1 on error. */ int vips_image_history_printf(VipsImage *image, const char *fmt, ...) { va_list args; char str[VIPS_PATH_MAX]; VipsBuf buf = VIPS_BUF_STATIC(str); time_t timebuf; va_start(args, fmt); (void) vips_buf_vappendf(&buf, fmt, args); va_end(args); vips_buf_appends(&buf, " # "); /* Add the date. ctime always attaches a '\n', gah. */ time(&timebuf); vips_buf_appends(&buf, ctime(&timebuf)); vips_buf_removec(&buf, '\n'); #ifdef DEBUG printf("vips_image_history_printf: " "adding:\n\t%s\nto history on image %p\n", vips_buf_all(&buf), image); #endif /*DEBUG*/ image->history_list = g_slist_append(image->history_list, vips__gvalue_ref_string_new(vips_buf_all(&buf))); return 0; } /** * vips_image_history_args: * @image: image to attach history line to * @name: program name * @argc: number of program arguments * @argv: (array length=argc) (element-type char*): program arguments * * Formats the name/argv as a single string and calls * vips_image_history_printf(). A * convenience function for command-line prorams. * * See also: vips_image_get_history(). * * Returns: 0 on success, -1 on error. */ int vips_image_history_args(VipsImage *image, const char *name, int argc, char *argv[]) { int i; char txt[1024]; VipsBuf buf = VIPS_BUF_STATIC(txt); vips_buf_appends(&buf, name); for (i = 0; i < argc; i++) { vips_buf_appends(&buf, " "); vips_buf_appends(&buf, argv[i]); } if (vips_image_history_printf(image, "%s", vips_buf_all(&buf))) return -1; return 0; } /** * vips_image_get_history: * @image: get history from here * * This function reads the image history as a C string. The string is owned * by VIPS and must not be freed. * * VIPS tracks the history of each image, that is, the sequence of operations * that generated that image. Applications built on VIPS need to call * vips_image_history_printf() for each action they perform, setting the * command-line equivalent for the action. * * See also: vips_image_history_printf(). * * Returns: (transfer none): The history of @image as a C string. Do not free! */ const char * vips_image_get_history(VipsImage *image) { if (!image->Hist) image->Hist = vips__gslist_gvalue_get(image->history_list); return image->Hist ? image->Hist : ""; } /* Called during vips_init(). */ void vips__meta_init(void) { if (!vips__meta_lock) vips__meta_lock = vips_g_mutex_new(); } libvips-8.15.1/libvips/iofuncs/image.c000066400000000000000000003000651454007373500176360ustar00rootroot00000000000000/* vips image class * * 4/2/11 * - hacked up from various places * 6/6/13 * - vips_image_write() didn't ref non-partial sources * 18/4/15 * - add vips_image_copy_memory() * 25/11/15 * - add vips_image_new_from_memory_copy() * 10/6/16 * - vips_image_write() does not ref input for non-partial images * 29/10/16 * - add vips_image_hasalpha() * 11/10/17 * - more severing for vips_image_write() * 3/4/18 * - better rules for hasalpha * 9/10/18 * - fix up vips_image_dump(), it was still using ints not enums * 10/12/19 * - add vips_image_new_from_source() / vips_image_write_to_target() */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #include #include #include #include /** * SECTION: image * @short_description: the VIPS image class * @stability: Stable * @see_also: header * VipsRegion * generate * VipsOperation * @include: vips/vips.h * * The image class and associated types and macros. * * Images can be created from formatted files on disc, from C-style arrays on * disc, from formatted areas of memory, or from C-style arrays in memory. See * vips_image_new_from_file() and friends. * Creating an image is fast. VIPS reads just enough of * the image to be able to get the various properties, such as width in * pixels. It delays reading any pixels until they are really needed. * * Once you have an image, you can get properties from it in the usual way. * You can use projection functions, like vips_image_get_width() or * g_object_get(), to get %GObject properties. * * VIPS images are three-dimensional arrays, the dimensions being width, * height and bands. Each dimension can be up to 2 ** 31 pixels (or band * elements). An image has a format, meaning the machine number type used * to represent each value. VIPS supports 10 formats, from 8-bit unsigned * integer up to 128-bit double complex, see vips_image_get_format(). * * In VIPS, images are uninterpreted arrays, meaning that from the point of * view of most operations, they are just large collections of numbers. * There's no difference between an RGBA (RGB with alpha) image and a CMYK * image, for example, they are both just four-band images. It's up to the * user of the library to pass the right sort of image to each operation. * * To take an example, VIPS has vips_Lab2XYZ(), an operation to transform * an image from CIE LAB colour space to CIE XYZ space. It assumes the * first three bands represent pixels in LAB colour space and returns an * image where the first three bands are transformed to XYZ and any * remaining bands are just copied. Pass it a RGB image by mistake and * you'll just get nonsense. * * VIPS has a feature to help (a little) with this: it sets a * #VipsInterpretation hint for each image (see * vips_image_get_interpretation()); a hint which says how pixels should * be interpreted. For example, vips_Lab2XYZ() will set the * interpretation of the output image to #VIPS_INTERPRETATION_XYZ. A * few utility operations will also use interpretation as a guide. For * example, you can give vips_colourspace() an input image and a desired * colourspace and it will use the input's interpretation hint to apply * the best sequence of colourspace transforms to get to the desired space. * * Use things like vips_invert() to manipulate your images. When you are done, * you can write images to disc files (with vips_image_write_to_file()), * to formatted memory buffers (with vips_image_write_to_buffer()) and to * C-style memory arrays (with vips_image_write_to_memory(). * * You can also write images to other images. Create, for example, a temporary * disc image with vips_image_new_temp_file(), then write your image to that * with vips_image_write(). You can create several other types of image and * write to them, see vips_image_new_memory(), for example. * * See operation for an introduction to * running operations on images, see header for getting and setting image * metadata. See object for a discussion of * the lower levels. */ /** * VIPS_MAGIC_INTEL: * * The first four bytes of a VIPS file in Intel byte ordering. */ /** * VIPS_MAGIC_SPARC: * * The first four bytes of a VIPS file in SPARC byte ordering. */ /** * VipsAccess: * @VIPS_ACCESS_RANDOM: can read anywhere * @VIPS_ACCESS_SEQUENTIAL: top-to-bottom reading only, but with a small buffer * * The type of access an operation has to supply. See vips_tilecache() * and #VipsForeign. * * @VIPS_ACCESS_RANDOM means requests can come in any order. * * @VIPS_ACCESS_SEQUENTIAL means requests will be top-to-bottom, but with some * amount of buffering behind the read point for small non-local accesses. */ /** * VipsDemandStyle: * @VIPS_DEMAND_STYLE_SMALLTILE: demand in small (typically 128x128 pixel) tiles * @VIPS_DEMAND_STYLE_FATSTRIP: demand in fat (typically 16 pixel high) strips * @VIPS_DEMAND_STYLE_THINSTRIP: demand in thin (typically 1 pixel high) strips * @VIPS_DEMAND_STYLE_ANY: demand geometry does not matter * * See vips_image_pipelinev(). Operations can hint * the kind of demand geometry they prefer * to the VIPS image IO system. * * These demand styles are given below in order of increasing * specialisation. When demanding output from a pipeline, * vips_image_generate() * will use the most general style requested by the operations * in the pipeline. * * #VIPS_DEMAND_STYLE_SMALLTILE --- This is the most general demand format. * Output is demanded in small (around 100x100 pel) sections. This style works * reasonably efficiently, even for bizarre operations like 45 degree rotate. * * #VIPS_DEMAND_STYLE_FATSTRIP --- This operation would like to output strips * the width of the image and as high as possible. This option is suitable * for area operations which do not violently transform coordinates, such * as vips_conv(). * * #VIPS_DEMAND_STYLE_THINSTRIP --- This operation would like to output strips * the width of the image and a few pels high. This option is suitable for * point-to-point operations, such as those in the arithmetic package. * * #VIPS_DEMAND_STYLE_ANY --- This image is not being demand-read from a disc * file (even indirectly) so any demand style is OK. It's used for things like * vips_black() where the pixels are calculated. * * See also: vips_image_pipelinev(). */ /** * VipsInterpretation: * @VIPS_INTERPRETATION_MULTIBAND: generic many-band image * @VIPS_INTERPRETATION_B_W: some kind of single-band image * @VIPS_INTERPRETATION_HISTOGRAM: a 1D image, eg. histogram or lookup table * @VIPS_INTERPRETATION_FOURIER: image is in fourier space * @VIPS_INTERPRETATION_XYZ: the first three bands are CIE XYZ * @VIPS_INTERPRETATION_LAB: pixels are in CIE Lab space * @VIPS_INTERPRETATION_CMYK: the first four bands are in CMYK space * @VIPS_INTERPRETATION_LABQ: implies #VIPS_CODING_LABQ * @VIPS_INTERPRETATION_RGB: generic RGB space * @VIPS_INTERPRETATION_CMC: a uniform colourspace based on CMC(1:1) * @VIPS_INTERPRETATION_LCH: pixels are in CIE LCh space * @VIPS_INTERPRETATION_LABS: CIE LAB coded as three signed 16-bit values * @VIPS_INTERPRETATION_sRGB: pixels are sRGB * @VIPS_INTERPRETATION_HSV: pixels are HSV * @VIPS_INTERPRETATION_scRGB: pixels are scRGB * @VIPS_INTERPRETATION_YXY: pixels are CIE Yxy * @VIPS_INTERPRETATION_RGB16: generic 16-bit RGB * @VIPS_INTERPRETATION_GREY16: generic 16-bit mono * @VIPS_INTERPRETATION_MATRIX: a matrix * * How the values in an image should be interpreted. For example, a * three-band float image of type #VIPS_INTERPRETATION_LAB should have its * pixels interpreted as coordinates in CIE Lab space. * * RGB and sRGB are treated in the same way. Use the colourspace functions if * you want some other behaviour. * * The gaps in numbering are historical and must be maintained. Allocate * new numbers from the end. */ /** * VipsBandFormat: * @VIPS_FORMAT_NOTSET: invalid setting * @VIPS_FORMAT_UCHAR: unsigned char format * @VIPS_FORMAT_CHAR: char format * @VIPS_FORMAT_USHORT: unsigned short format * @VIPS_FORMAT_SHORT: short format * @VIPS_FORMAT_UINT: unsigned int format * @VIPS_FORMAT_INT: int format * @VIPS_FORMAT_FLOAT: float format * @VIPS_FORMAT_COMPLEX: complex (two floats) format * @VIPS_FORMAT_DOUBLE: double float format * @VIPS_FORMAT_DPCOMPLEX: double complex (two double) format * * The format used for each band element. * * Each corresponds to a native C type for the current machine. For example, * #VIPS_FORMAT_USHORT is unsigned short. */ /** * VipsCoding: * @VIPS_CODING_NONE: pixels are not coded * @VIPS_CODING_LABQ: pixels encode 3 float CIELAB values as 4 uchar * @VIPS_CODING_RAD: pixels encode 3 float RGB as 4 uchar (Radiance coding) * * How pixels are coded. * * Normally, pixels are uncoded and can be manipulated as you would expect. * However some file formats code pixels for compression, and sometimes it's * useful to be able to manipulate images in the coded format. * * The gaps in the numbering are historical and must be maintained. Allocate * new numbers from the end. */ /** * VipsProgress: * @run: Time we have been running * @eta: Estimated seconds of computation left * @tpels: Number of pels we expect to calculate * @npels: Number of pels calculated so far * @percent: Percent complete * @start: Start time * * A structure available to eval callbacks giving information on evaluation * progress. See #VipsImage::eval. */ /** * VipsImage: * * An image. These can represent an image on disc, a memory buffer, an image * in the process of being written to disc or a partially evaluated image * in memory. */ /** * VIPS_IMAGE_SIZEOF_ELEMENT: * @I: a #VipsImage * * Returns: sizeof() a band element. */ /** * VIPS_IMAGE_SIZEOF_PEL: * @I: a #VipsImage * * Returns: sizeof() a pixel. */ /** * VIPS_IMAGE_SIZEOF_LINE: * @I: a #VipsImage * * Returns: sizeof() a scanline of pixels. */ /** * VIPS_IMAGE_N_ELEMENTS: * @I: a #VipsImage * * Returns: The number of band elements in a scanline. */ /** * VIPS_IMAGE_N_PELS: * @I: a #VipsImage * * Returns: The number of pels in an image. A 64-bit unsigned int. */ /** * VIPS_IMAGE_ADDR: * @I: a #VipsImage * @X: x coordinate * @Y: y coordinate * * This macro returns a pointer to a pixel in an image, cast to a #VipsPel *. * It only works for * images which are fully available in memory, so memory buffers and small * mapped images only. * * If VIPS_DEBUG is defined, you get a version that checks bounds for you. * * See also: vips_image_wio_input(), vips_image_inplace(), VIPS_REGION_ADDR(). * * Returns: The address of pixel (@X,@Y) in @I. */ /** * VIPS_MATRIX: * @I: a #VipsImage * @X: x coordinate * @Y: y coordinate * * This macro returns a pointer to a pixel in an image, cast to a double*. The * image must have a single band, be #VIPS_FORMAT_DOUBLE and be * fully available in memory, so memory buffers and small * mapped images only. * * If VIPS_DEBUG is defined, you get a version that checks bounds and image * type for you. * * See also: vips_image_wio_input(), vips_image_inplace(), vips_check_matrix(). * * Returns: The address of pixel (@X,@Y) in @I. */ /* Our signals. */ enum { SIG_PREEVAL, SIG_EVAL, SIG_POSTEVAL, SIG_WRITTEN, SIG_INVALIDATE, SIG_MINIMISE, SIG_LAST }; /* Progress feedback. Only really useful for testing, tbh. */ int vips__progress = 0; /* A string giving the image size (in bytes of uncompressed image) above which * we decompress to disc on open. Can be eg. "12m" for 12 megabytes. */ char *vips__disc_threshold = NULL; /* Minimise needs a lock. */ static GMutex *vips__minimise_lock = NULL; static guint vips_image_signals[SIG_LAST] = { 0 }; G_DEFINE_TYPE(VipsImage, vips_image, VIPS_TYPE_OBJECT); /** * vips_progress_set: * @progress: %TRUE to enable progress messages * * If set, vips will print messages about the progress of computation to * stdout. This can also be enabled with the --vips-progress option, or by * setting the environment variable VIPS_PROGRESS. */ void vips_progress_set(gboolean progress) { vips__progress = progress; } static void vips_image_delete(VipsImage *image) { if (image->delete_on_close) { g_assert(image->delete_on_close_filename); VIPS_DEBUG_MSG("vips_image_delete: removing temp %s\n", image->delete_on_close_filename); g_unlink(image->delete_on_close_filename); VIPS_FREE(image->delete_on_close_filename); image->delete_on_close = FALSE; } } static void vips_image_finalize(GObject *gobject) { VipsImage *image = VIPS_IMAGE(gobject); VIPS_DEBUG_MSG("vips_image_finalize: %p\n", gobject); /* Should be no regions defined on the image, since they all hold a * ref to their host image. */ g_assert(!image->regions); /* Therefore there should be no windows. */ g_assert(!image->windows); /* Junk generate functions. */ image->start_fn = NULL; image->generate_fn = NULL; image->stop_fn = NULL; image->client1 = NULL; image->client2 = NULL; /* No more upstream/downstream links. */ vips__link_break_all(image); if (image->time) { VIPS_FREEF(g_timer_destroy, image->time->start); VIPS_FREE(image->time); } /* Free attached memory. */ if (image->data) { if (image->dtype == VIPS_IMAGE_SETBUF) { VIPS_DEBUG_MSG("vips_image_finalize: freeing buffer\n"); vips_tracked_free(image->data); image->dtype = VIPS_IMAGE_NONE; } image->data = NULL; } /* Delete associated files. */ vips_image_delete(image); VIPS_FREEF(vips_g_mutex_free, image->sslock); VIPS_FREE(image->Hist); VIPS_FREEF(vips__gslist_gvalue_free, image->history_list); vips__meta_destroy(image); G_OBJECT_CLASS(vips_image_parent_class)->finalize(gobject); } static void vips_image_dispose(GObject *gobject) { VipsImage *image = VIPS_IMAGE(gobject); VIPS_DEBUG_MSG("vips_image_dispose: %p\n", gobject); #ifdef DEBUG_LEAK { VipsImagePixels *pixels = g_object_get_qdata(G_OBJECT(image), vips__image_pixels_quark); if (pixels && pixels->tpels) { int compute_percent = 100.0 * pixels->npels / pixels->tpels; if (compute_percent > 100) printf("vips_image_dispose: %s %s computed %d%%\n", image->filename, pixels->nickname, compute_percent); } } #endif /*DEBUG_LEAK*/ vips_object_preclose(VIPS_OBJECT(gobject)); /* We have to junk the fd in dispose, since we run this for rewind and * we must close and reopen the file when we switch from write to * read. */ /* Any file mapping? */ if (image->baseaddr) { /* MMAP file. */ VIPS_DEBUG_MSG("vips_image_dispose: unmapping file\n"); vips__munmap(image->baseaddr, image->length); image->baseaddr = NULL; image->length = 0; /* This must have been a pointer to the mmap region, rather * than a setbuf. */ image->data = NULL; } /* Is there a file descriptor? */ if (image->fd != -1) { VIPS_DEBUG_MSG("vips_image_dispose: closing output file\n"); if (vips_tracked_close(image->fd) == -1) vips_error("VipsImage", "%s", _("unable to close fd")); image->fd = -1; } G_OBJECT_CLASS(vips_image_parent_class)->dispose(gobject); } static VipsObject * vips_image_new_from_file_object(const char *string) { VipsImage *image; vips_check_init(); /* We mustn't _build() the object here, so we can't just call * vips_image_new_from_file(). */ image = VIPS_IMAGE(g_object_new(VIPS_TYPE_IMAGE, NULL)); g_object_set(image, "filename", string, "mode", "r", NULL); return VIPS_OBJECT(image); } static void vips_image_to_string(VipsObject *object, VipsBuf *buf) { VipsImage *image = VIPS_IMAGE(object); vips_buf_appends(buf, image->filename); } static int vips_image_write_object(VipsObject *object, const char *string) { return vips_image_write_to_file(VIPS_IMAGE(object), string, NULL); } static void * print_field_fn(VipsImage *image, const char *field, GValue *value, void *a) { VipsBuf *buf = (VipsBuf *) a; vips_buf_appendf(buf, "%s: ", field); vips_buf_appendgv(buf, value); vips_buf_appendf(buf, "\n"); return NULL; } static void vips_image_dump(VipsObject *object, VipsBuf *buf) { VipsImage *image = VIPS_IMAGE(object); vips_buf_appendf(buf, g_dngettext(GETTEXT_PACKAGE, "%dx%d %s, %d band, %s", "%dx%d %s, %d bands, %s", vips_image_get_bands(image)), vips_image_get_width(image), vips_image_get_height(image), vips_enum_nick(VIPS_TYPE_BAND_FORMAT, vips_image_get_format(image)), vips_image_get_bands(image), vips_enum_nick(VIPS_TYPE_INTERPRETATION, vips_image_get_interpretation(image))); vips_buf_appendf(buf, ", %s", vips_enum_nick(VIPS_TYPE_IMAGE_TYPE, image->dtype)); VIPS_OBJECT_CLASS(vips_image_parent_class)->dump(object, buf); vips_buf_appendf(buf, "\n"); (void) vips_image_map(image, print_field_fn, (void *) buf); vips_buf_appendf(buf, "Hist: %s", vips_image_get_history(image)); } static void vips_image_summary(VipsObject *object, VipsBuf *buf) { VipsImage *image = VIPS_IMAGE(object); const char *p; vips_buf_appendf(buf, "%dx%d", vips_image_get_width(image), vips_image_get_height(image)); if (vips_image_get_coding(image) == VIPS_CODING_NONE) { vips_buf_appendf(buf, g_dngettext(GETTEXT_PACKAGE, " %s, %d band, %s", " %s, %d bands, %s", vips_image_get_bands(image)), vips_enum_nick(VIPS_TYPE_BAND_FORMAT, vips_image_get_format(image)), vips_image_get_bands(image), vips_enum_nick(VIPS_TYPE_INTERPRETATION, vips_image_get_interpretation(image))); } else { vips_buf_appendf(buf, ", %s", vips_enum_nick(VIPS_TYPE_CODING, vips_image_get_coding(image))); } if (vips_image_get_typeof(image, VIPS_META_LOADER) && !vips_image_get_string(image, VIPS_META_LOADER, &p)) vips_buf_appendf(buf, ", %s", p); VIPS_OBJECT_CLASS(vips_image_parent_class)->summary(object, buf); } static void * vips_image_sanity_upstream(VipsImage *up, VipsImage *down, void *b) { if (!g_slist_find(up->downstream, down) || !g_slist_find(down->upstream, up)) return up; return NULL; } static void * vips_image_sanity_downstream(VipsImage *down, VipsImage *up, void *b) { return vips_image_sanity_upstream(up, down, b); } static void vips_image_sanity(VipsObject *object, VipsBuf *buf) { VipsImage *image = VIPS_IMAGE(object); /* All 0 means im has been inited but never used. */ if (image->Xsize != 0 || image->Ysize != 0 || image->Bands != 0) { if (image->Xsize <= 0 || image->Ysize <= 0 || image->Bands <= 0) vips_buf_appends(buf, "bad dimensions\n"); if (image->BandFmt < -1 || image->BandFmt > VIPS_FORMAT_DPCOMPLEX || (image->Coding != -1 && image->Coding != VIPS_CODING_NONE && image->Coding != VIPS_CODING_LABQ && image->Coding != VIPS_CODING_RAD) || image->Type >= VIPS_INTERPRETATION_LAST || image->dtype > VIPS_IMAGE_PARTIAL || image->dhint > VIPS_DEMAND_STYLE_ANY) vips_buf_appends(buf, "bad enum\n"); if (image->Xres < 0 || image->Yres < 0) vips_buf_appends(buf, "bad resolution\n"); } /* Must lock around inter-image links. */ g_mutex_lock(vips__global_lock); if (vips_slist_map2(image->upstream, (VipsSListMap2Fn) vips_image_sanity_upstream, image, NULL)) vips_buf_appends(buf, "upstream broken\n"); if (vips_slist_map2(image->downstream, (VipsSListMap2Fn) vips_image_sanity_downstream, image, NULL)) vips_buf_appends(buf, "downstream broken\n"); g_mutex_unlock(vips__global_lock); VIPS_OBJECT_CLASS(vips_image_parent_class)->sanity(object, buf); } static void vips_image_rewind(VipsObject *object) { VipsImage *image = VIPS_IMAGE(object); char *filename; char *mode; /* This triggers a dispose. Copy filename/mode across the dispose. */ filename = g_strdup(vips_image_get_filename(image)); mode = g_strdup(vips_image_get_mode(image)); VIPS_OBJECT_CLASS(vips_image_parent_class)->rewind(object); g_assert(image->filename == NULL); g_assert(image->mode == NULL); image->filename = filename; image->mode = mode; } /* Delayed save. */ /* From "written" callback: save to image->filename using VipsForeign. */ static void vips_image_save_cb(VipsImage *image, int *result, void *data) { if (vips_foreign_save(image, image->filename, NULL)) *result = -1; } /* Progress feedback. */ static void vips_image_preeval_cb(VipsImage *image, VipsProgress *progress, int *last) { int tile_width; int tile_height; int n_lines; *last = -1; vips_get_tile_size(image, &tile_width, &tile_height, &n_lines); printf(_("%s %s: %d x %d pixels, %d threads, %d x %d tiles, " "%d lines in buffer"), vips_get_prgname(), image->filename, image->Xsize, image->Ysize, vips_concurrency_get(), tile_width, tile_height, n_lines); printf("\n"); } static void vips_image_eval_cb(VipsImage *image, VipsProgress *progress, int *last) { if (progress->percent != *last) { printf(_("%s %s: %d%% complete"), vips_get_prgname(), image->filename, progress->percent); printf("\r"); fflush(stdout); *last = progress->percent; /* Needs DEBUG in region.c vips_region_dump_all(); */ } } static void vips_image_posteval_cb(VipsImage *image, VipsProgress *progress, void *data) { /* Spaces at end help to erase the %complete message we overwrite. */ printf(_("%s %s: done in %.3gs \n"), vips_get_prgname(), image->filename, g_timer_elapsed(progress->start, NULL)); } /* Attach progress feedback, if required. */ static void vips_image_add_progress(VipsImage *image) { if (vips__progress || g_getenv("VIPS_PROGRESS") #if ENABLE_DEPRECATED || g_getenv("IM_PROGRESS") #endif ) { /* Keep the %complete we displayed last time here. */ int *last = VIPS_NEW(image, int); g_signal_connect(image, "preeval", G_CALLBACK(vips_image_preeval_cb), last); g_signal_connect(image, "eval", G_CALLBACK(vips_image_eval_cb), last); g_signal_connect(image, "posteval", G_CALLBACK(vips_image_posteval_cb), NULL); vips_image_set_progress(image, TRUE); } } /* We have to do a lot of work in _build() so we can work with the stuff in * /deprecated to support the vips7 API. We could get rid of most of this * stuff if we were vips8-only. */ static int vips_image_build(VipsObject *object) { VipsImage *image = VIPS_IMAGE(object); const char *filename = image->filename; const char *mode = image->mode; guint32 magic; guint64 sizeof_image; VIPS_DEBUG_MSG("vips_image_build: %p\n", image); if (VIPS_OBJECT_CLASS(vips_image_parent_class)->build(object)) return -1; /* Parse the mode string. */ switch (mode[0]) { case 'v': /* Used by 'r' for native open of vips, see below. Also by * vips_image_rewind_output(). */ if (vips_image_open_input(image)) return -1; break; case 'r': if ((magic = vips__file_magic(filename))) { /* We may need to byteswap. */ if (GUINT_FROM_BE(magic) == image->magic) { /* Native open. */ if (vips_image_open_input(image)) return -1; } else { VipsImage *t; VipsImage *t2; /* Open the image in t, then byteswap to this * image. */ if (!(t = vips_image_new_mode(filename, "v"))) return -1; if (vips_byteswap(t, &t2, NULL)) { g_object_unref(t); return -1; } g_object_unref(t); image->dtype = VIPS_IMAGE_PARTIAL; if (vips_image_write(t2, image)) { g_object_unref(t2); return -1; } g_object_unref(t2); } } else { VipsImage *t; if (mode[1] == 's') { if (vips_foreign_load(filename, &t, "access", VIPS_ACCESS_SEQUENTIAL, NULL)) return -1; } else { if (vips_foreign_load(filename, &t, NULL)) return -1; } image->dtype = VIPS_IMAGE_PARTIAL; if (vips_image_write(t, image)) { g_object_unref(t); return -1; } g_object_unref(t); } break; case 'w': { const char *file_op; /* Make sure the vips saver is there ... strange things will * happen if this type is renamed or removed. */ g_assert(g_type_from_name("VipsForeignSaveVips")); if (!(file_op = vips_foreign_find_save(filename))) return -1; /* If this is the vips saver, just save directly ourselves. * Otherwise save with VipsForeign when the image has been * written to. */ if (vips_isprefix("VipsForeignSaveVips", file_op)) image->dtype = VIPS_IMAGE_OPENOUT; else { image->dtype = VIPS_IMAGE_PARTIAL; g_signal_connect(image, "written", G_CALLBACK(vips_image_save_cb), NULL); } } break; case 't': image->dtype = VIPS_IMAGE_SETBUF; image->dhint = VIPS_DEMAND_STYLE_ANY; break; case 'p': image->dtype = VIPS_IMAGE_PARTIAL; break; case 'a': if ((image->fd = vips__open_image_read(filename)) == -1) return -1; image->dtype = VIPS_IMAGE_OPENIN; image->dhint = VIPS_DEMAND_STYLE_THINSTRIP; if (image->Bands == 1) image->Type = VIPS_INTERPRETATION_B_W; else if (image->Bands == 3) image->Type = VIPS_INTERPRETATION_sRGB; else image->Type = VIPS_INTERPRETATION_MULTIBAND; /* Read the real file length and check against what we think * the size should be. */ if ((image->file_length = vips_file_length(image->fd)) == -1) return -1; /* Very common, so a special message. */ sizeof_image = VIPS_IMAGE_SIZEOF_IMAGE(image) + image->sizeof_header; if (image->file_length < sizeof_image) { vips_error("VipsImage", _("unable to open \"%s\", file too short"), image->filename); return -1; } /* Just weird. Only print a warning for this, since we should * still be able to process it without coredumps. */ if (image->file_length > sizeof_image) g_warning(_("%s is longer than expected"), image->filename); break; case 'm': if (image->Bands == 1) image->Type = VIPS_INTERPRETATION_B_W; else if (image->Bands == 3) image->Type = VIPS_INTERPRETATION_sRGB; else image->Type = VIPS_INTERPRETATION_MULTIBAND; image->dtype = VIPS_IMAGE_SETBUF_FOREIGN; image->dhint = VIPS_DEMAND_STYLE_ANY; break; default: vips_error("VipsImage", _("bad mode \"%s\""), mode); return -1; } vips_image_add_progress(image); return 0; } static void * vips_image_real_invalidate_cb(VipsRegion *reg, void *a, void *b) { vips_region_invalidate(reg); return NULL; } static void vips_image_real_invalidate(VipsImage *image, void *data) { VIPS_DEBUG_MSG("vips_image_real_invalidate: %p\n", image); VIPS_GATE_START("vips_image_real_invalidate: wait"); g_mutex_lock(image->sslock); VIPS_GATE_STOP("vips_image_real_invalidate: wait"); (void) vips_slist_map2(image->regions, (VipsSListMap2Fn) vips_image_real_invalidate_cb, NULL, NULL); g_mutex_unlock(image->sslock); } static void vips_image_real_minimise(VipsImage *image, void *data) { VIPS_DEBUG_MSG("vips_image_real_minimise: %p\n", image); } static void vips_image_real_written(VipsImage *image, int *result, void *data) { VIPS_DEBUG_MSG("vips_image_real_written: %p\n", image); /* For vips image write, append the xml after the data. */ if (image->dtype == VIPS_IMAGE_OPENOUT && vips__writehist(image)) *result = -1; } static void vips_image_class_init(VipsImageClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VIPS_DEBUG_MSG("vips_image_class_init:\n"); gobject_class->finalize = vips_image_finalize; gobject_class->dispose = vips_image_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->new_from_string = vips_image_new_from_file_object; vobject_class->to_string = vips_image_to_string; vobject_class->output_needs_arg = TRUE; vobject_class->output_to_arg = vips_image_write_object; vobject_class->nickname = "image"; vobject_class->description = _("image class"); vobject_class->dump = vips_image_dump; vobject_class->summary = vips_image_summary; vobject_class->sanity = vips_image_sanity; vobject_class->rewind = vips_image_rewind; vobject_class->build = vips_image_build; class->invalidate = vips_image_real_invalidate; class->written = vips_image_real_written; class->minimise = vips_image_real_minimise; /* Create properties. */ /* It'd be good to have these as set once at construct time, but we * can't :-( * * For example, a "p" image might be made with vips_image_new() and * constructed, then passed to vips_copy() of whatever to be written to. * That operation will then need to set width/height etc. * * We can't set_once either, since vips_copy() etc. need to update * xoffset and friends on the way through. */ VIPS_ARG_INT(class, "width", 2, _("Width"), _("Image width in pixels"), VIPS_ARGUMENT_SET_ALWAYS, G_STRUCT_OFFSET(VipsImage, Xsize), 1, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "height", 3, _("Height"), _("Image height in pixels"), VIPS_ARGUMENT_SET_ALWAYS, G_STRUCT_OFFSET(VipsImage, Ysize), 1, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "bands", 4, _("Bands"), _("Number of bands in image"), VIPS_ARGUMENT_SET_ALWAYS, G_STRUCT_OFFSET(VipsImage, Bands), 1, VIPS_MAX_COORD, 1); VIPS_ARG_ENUM(class, "format", 5, _("Format"), _("Pixel format in image"), VIPS_ARGUMENT_SET_ALWAYS, G_STRUCT_OFFSET(VipsImage, BandFmt), VIPS_TYPE_BAND_FORMAT, VIPS_FORMAT_UCHAR); VIPS_ARG_ENUM(class, "coding", 6, _("Coding"), _("Pixel coding"), VIPS_ARGUMENT_SET_ALWAYS, G_STRUCT_OFFSET(VipsImage, Coding), VIPS_TYPE_CODING, VIPS_CODING_NONE); VIPS_ARG_ENUM(class, "interpretation", 7, _("Interpretation"), _("Pixel interpretation"), VIPS_ARGUMENT_SET_ALWAYS, G_STRUCT_OFFSET(VipsImage, Type), VIPS_TYPE_INTERPRETATION, VIPS_INTERPRETATION_MULTIBAND); VIPS_ARG_DOUBLE(class, "xres", 8, _("Xres"), _("Horizontal resolution in pixels/mm"), VIPS_ARGUMENT_SET_ALWAYS, G_STRUCT_OFFSET(VipsImage, Xres), -0.0, 1000000, 0); VIPS_ARG_DOUBLE(class, "yres", 9, _("Yres"), _("Vertical resolution in pixels/mm"), VIPS_ARGUMENT_SET_ALWAYS, G_STRUCT_OFFSET(VipsImage, Yres), -0.0, 1000000, 0); VIPS_ARG_INT(class, "xoffset", 10, _("Xoffset"), _("Horizontal offset of origin"), VIPS_ARGUMENT_SET_ALWAYS, G_STRUCT_OFFSET(VipsImage, Xoffset), -VIPS_MAX_COORD, VIPS_MAX_COORD, 0); VIPS_ARG_INT(class, "yoffset", 11, _("Yoffset"), _("Vertical offset of origin"), VIPS_ARGUMENT_SET_ALWAYS, G_STRUCT_OFFSET(VipsImage, Yoffset), -VIPS_MAX_COORD, VIPS_MAX_COORD, 0); VIPS_ARG_STRING(class, "filename", 12, _("Filename"), _("Image filename"), VIPS_ARGUMENT_SET_ONCE | VIPS_ARGUMENT_CONSTRUCT, G_STRUCT_OFFSET(VipsImage, filename), NULL); VIPS_ARG_STRING(class, "mode", 13, _("Mode"), _("Open mode"), VIPS_ARGUMENT_SET_ONCE | VIPS_ARGUMENT_CONSTRUCT, G_STRUCT_OFFSET(VipsImage, mode), "p"); VIPS_ARG_BOOL(class, "kill", 14, _("Kill"), _("Block evaluation on this image"), VIPS_ARGUMENT_SET_ALWAYS, G_STRUCT_OFFSET(VipsImage, kill), FALSE); VIPS_ARG_ENUM(class, "demand", 15, _("Demand style"), _("Preferred demand style for this image"), VIPS_ARGUMENT_CONSTRUCT, G_STRUCT_OFFSET(VipsImage, dhint), VIPS_TYPE_DEMAND_STYLE, VIPS_DEMAND_STYLE_SMALLTILE); VIPS_ARG_UINT64(class, "sizeof_header", 16, _("Size of header"), _("Offset in bytes from start of file"), VIPS_ARGUMENT_SET_ONCE | VIPS_ARGUMENT_CONSTRUCT, G_STRUCT_OFFSET(VipsImage, sizeof_header), 0, 1000000000, VIPS_SIZEOF_HEADER); VIPS_ARG_POINTER(class, "foreign_buffer", 17, _("Foreign buffer"), _("Pointer to foreign pixels"), VIPS_ARGUMENT_SET_ONCE | VIPS_ARGUMENT_CONSTRUCT, G_STRUCT_OFFSET(VipsImage, data)); /* Create signals. */ /** * VipsImage::preeval: * @image: the image to be calculated * @progress: (type VipsProgress): #VipsProgress for this image * * The ::preeval signal is emitted once before computation of @image * starts. It's a good place to set up evaluation feedback. * * Use vips_image_set_progress() to turn on progress reporting for an * image. */ vips_image_signals[SIG_PREEVAL] = g_signal_new("preeval", G_TYPE_FROM_CLASS(class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(VipsImageClass, preeval), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); /** * VipsImage::eval: * @image: the image being calculated * @progress: (type VipsProgress): #VipsProgress for this image * * The ::eval signal is emitted once per work unit (typically a 128 x * 128 area of pixels) during image computation. * * You can use this signal to update user-interfaces with progress * feedback. Beware of updating too frequently: you will usually * need some throttling mechanism. * * Use vips_image_set_progress() to turn on progress reporting for an * image. */ vips_image_signals[SIG_EVAL] = g_signal_new("eval", G_TYPE_FROM_CLASS(class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(VipsImageClass, eval), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); /** * VipsImage::posteval: * @image: the image that was calculated * @progress: (type VipsProgress): #VipsProgress for this image * * The ::posteval signal is emitted once at the end of the computation * of @image. It's a good place to shut down evaluation feedback. * * Use vips_image_set_progress() to turn on progress reporting for an * image. */ vips_image_signals[SIG_POSTEVAL] = g_signal_new("posteval", G_TYPE_FROM_CLASS(class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(VipsImageClass, posteval), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); /** * VipsImage::written: * @image: the image that was calculated * @result: (out) (type gint): set to non-zero to indicate error * * The ::written signal is emitted just after an image has been * written to. It is * used by vips to implement things like write to foreign file * formats. */ vips_image_signals[SIG_WRITTEN] = g_signal_new("written", G_TYPE_FROM_CLASS(class), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET(VipsImageClass, written), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER); /** * VipsImage::invalidate: * @image: the image that has changed * * The ::invalidate signal is emitted when an image or one of it's * upstream data sources has been destructively modified. See * vips_image_invalidate_all(). */ vips_image_signals[SIG_INVALIDATE] = g_signal_new("invalidate", G_TYPE_FROM_CLASS(class), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET(VipsImageClass, invalidate), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * VipsImage::minimise: * @image: the image that is being minimised * * The ::minimise signal is emitted when an image has been asked to * minimise memory usage. All non-essential caches are dropped. * See vips_image_minimise_all(). */ vips_image_signals[SIG_MINIMISE] = g_signal_new("minimise", G_TYPE_FROM_CLASS(class), G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, G_STRUCT_OFFSET(VipsImageClass, minimise), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); vips__minimise_lock = vips_g_mutex_new(); } static void vips_image_init(VipsImage *image) { VIPS_DEBUG_MSG("vips_image_init: %p\n", image); /* Default to native order. */ image->magic = vips_amiMSBfirst() ? VIPS_MAGIC_SPARC : VIPS_MAGIC_INTEL; image->Xsize = 1; image->Ysize = 1; image->Bands = 1; image->Xres = 1.0; image->Yres = 1.0; image->fd = -1; /* since 0 is stdout */ image->sslock = vips_g_mutex_new(); image->sizeof_header = VIPS_SIZEOF_HEADER; image->mode = g_strdup("p"); #ifdef DEBUG_LEAK g_object_set_qdata_full(G_OBJECT(image), vips__image_pixels_quark, g_new0(VipsImagePixels, 1), (GDestroyNotify) g_free); #endif /*DEBUG_LEAK*/ } int vips_image_written(VipsImage *image) { int result; VIPS_DEBUG_MSG("vips_image_written: %p\n", image); result = 0; g_signal_emit(image, vips_image_signals[SIG_WRITTEN], 0, &result); return result; } static void vips_image_invalidate(VipsImage *image) { VIPS_DEBUG_MSG("vips_image_invalidate: %p\n", image); g_signal_emit(image, vips_image_signals[SIG_INVALIDATE], 0); } static void * vips_image_invalidate_all_cb(VipsImage *image, void *a, void *b) { vips_image_invalidate(image); return NULL; } /** * vips_image_invalidate_all: * @image: #VipsImage to invalidate * * Invalidate all pixel caches on @image and any downstream images, that * is, images which depend on this image. Additionally, all operations which * depend upon this image are dropped from the VIPS operation cache. * * You should call this function after * destructively modifying an image with something like vips_draw_circle(). * * The #VipsImage::invalidate signal is emitted for all invalidated images. * * See also: vips_region_invalidate(). */ void vips_image_invalidate_all(VipsImage *image) { VIPS_DEBUG_MSG("vips_image_invalidate_all: %p\n", image); (void) vips__link_map(image, FALSE, (VipsSListMap2Fn) vips_image_invalidate_all_cb, NULL, NULL); } static void vips_image_minimise(VipsImage *image) { VIPS_DEBUG_MSG("vips_image_minimise: %p\n", image); g_signal_emit(image, vips_image_signals[SIG_MINIMISE], 0); } static void * vips_image_minimise_all_cb(VipsImage *image, void *a, void *b) { vips_image_minimise(image); return NULL; } /** * vips_image_minimise_all: * @image: #VipsImage to minimise * * Minimise memory use on this image and any upstream images, that is, images * which this image depends upon. This function is called automatically at the * end of a computation, but it might be useful to call at other times. * * The #VipsImage::minimise signal is emitted for all minimised images. */ void vips_image_minimise_all(VipsImage *image) { /* Minimisation will modify things like sources, so we can't run it * from many threads. */ g_mutex_lock(vips__minimise_lock); (void) vips__link_map(image, TRUE, (VipsSListMap2Fn) vips_image_minimise_all_cb, NULL, NULL); g_mutex_unlock(vips__minimise_lock); } /** * vips_image_is_sequential: * @image: #VipsImage to minimise * * TRUE if any of the images upstream from @image were opened in sequential * mode. Some operations change behaviour slightly in sequential mode to * optimize memory behaviour. * * Returns: %TRUE if @image is in sequential mode. */ gboolean vips_image_is_sequential(VipsImage *image) { return vips_image_get_typeof(image, VIPS_META_SEQUENTIAL); } /* Attach a new time struct, if necessary, and reset it. */ static int vips_progress_add(VipsImage *image) { VipsProgress *progress; VIPS_DEBUG_MSG("vips_progress_add: %p\n", image); if (!(progress = image->time)) { if (!(image->time = VIPS_NEW(NULL, VipsProgress))) return -1; progress = image->time; progress->im = image; progress->start = NULL; } if (!progress->start) progress->start = g_timer_new(); g_timer_start(progress->start); progress->run = 0; progress->eta = 0; progress->tpels = VIPS_IMAGE_N_PELS(image); progress->npels = 0; progress->percent = 0; return 0; } static void vips_progress_update(VipsProgress *progress, guint64 processed) { float prop; VIPS_DEBUG_MSG("vips_progress_update: %p\n", progress); g_assert(progress); progress->run = g_timer_elapsed(progress->start, NULL); progress->npels = processed; prop = (float) progress->npels / (float) progress->tpels; progress->percent = 100 * prop; /* Don't estimate eta until we are 10% in. */ if (prop > 0.1) progress->eta = (1.0 / prop) * progress->run - progress->run; } void vips_image_preeval(VipsImage *image) { if (image->progress_signal) { VIPS_DEBUG_MSG("vips_image_preeval: %p\n", image); g_assert(vips_object_sanity( VIPS_OBJECT(image->progress_signal))); (void) vips_progress_add(image); /* For vips7 compat, we also have to make sure ->time on the * image that was originally marked with * vips_image_set_progress() is valid. */ (void) vips_progress_add(image->progress_signal); if (!vips_image_get_typeof(image, "hide-progress")) g_signal_emit(image->progress_signal, vips_image_signals[SIG_PREEVAL], 0, image->time); } } /* Updated the number of pixels that have been processed. */ void vips_image_eval(VipsImage *image, guint64 processed) { if (image->progress_signal && image->time) { VIPS_DEBUG_MSG("vips_image_eval: %p\n", image); g_assert(vips_object_sanity( VIPS_OBJECT(image->progress_signal))); vips_progress_update(image->time, processed); /* For vips7 compat, update the ->time on the signalling image * too, even though it may have a different width/height to * the image we are actually generating. */ if (image->progress_signal->time != image->time) vips_progress_update(image->progress_signal->time, processed); if (!vips_image_get_typeof(image, "hide-progress")) g_signal_emit(image->progress_signal, vips_image_signals[SIG_EVAL], 0, image->time); } } void vips_image_posteval(VipsImage *image) { if (image->progress_signal && image->progress_signal->time) { gint64 processed; VIPS_DEBUG_MSG("vips_image_posteval: %p\n", image); g_assert(vips_object_sanity( VIPS_OBJECT(image->progress_signal))); /* Make sure posteval sees a finished progress. */ processed = image->time->tpels; vips_progress_update(image->time, processed); /* For vips7 compat, update the ->time on the signalling image * too, even though it may have a different width/height to * the image we are actually generating. */ if (image->progress_signal->time != image->time) vips_progress_update(image->progress_signal->time, processed); if (!vips_image_get_typeof(image, "hide-progress")) g_signal_emit(image->progress_signal, vips_image_signals[SIG_POSTEVAL], 0, image->time); } } /** * vips_image_set_progress: * @image: image to signal progress on * @progress: turn progress reporting on or off * * vips signals evaluation progress via the #VipsImage::preeval, * #VipsImage::eval and #VipsImage::posteval * signals. Progress is signalled on the most-downstream image for which * vips_image_set_progress() was called. */ void vips_image_set_progress(VipsImage *image, gboolean progress) { if (progress && !image->progress_signal) { VIPS_DEBUG_MSG("vips_image_set_progress: %p %s\n", image, image->filename); image->progress_signal = image; } else if (!progress) image->progress_signal = NULL; } /** * vips_image_iskilled: * @image: image to test * * If @image has been killed (see vips_image_set_kill()), set an error message, * clear the #VipsImage.kill flag and return %TRUE. Otherwise return %FALSE. * * Handy for loops which need to run sets of threads which can fail. * * See also: vips_image_set_kill(). * * Returns: %TRUE if @image has been killed. */ gboolean vips_image_iskilled(VipsImage *image) { gboolean kill; kill = image->kill; /* Has kill been set for this image? If yes, abort evaluation. */ if (image->kill) { VIPS_DEBUG_MSG("vips_image_iskilled: %s (%p) killed\n", image->filename, image); vips_error("VipsImage", _("killed for image \"%s\""), image->filename); /* We've picked up the kill message, it's now our caller's * responsibility to pass the message up the chain. */ vips_image_set_kill(image, FALSE); } return kill; } /** * vips_image_set_kill: * @image: image to test * @kill: the kill state * * Set the #VipsImage.kill flag on an image. Handy for stopping sets of * threads. * * See also: vips_image_iskilled(). */ void vips_image_set_kill(VipsImage *image, gboolean kill) { if (image->kill != kill) VIPS_DEBUG_MSG("vips_image_set_kill: %s (%p) %d\n", image->filename, image, kill); image->kill = kill; } /* Fills the given buffer with a temporary filename. * Assuming that "int" might be 64 Bit wide a buffer size of 26 suffices. */ static void vips_image_temp_name(char *name, int size) { static int global_serial = 0; int serial = g_atomic_int_add(&global_serial, 1); vips_snprintf(name, size, "temp-%d", serial); } /** * vips_image_new: (constructor) * * vips_image_new() creates a new, empty #VipsImage. * If you write to one of these images, vips will just attach some callbacks, * no pixels will be generated. * * Write pixels to an image with vips_image_generate() or * vips_image_write_line(). Write a whole image to another image with * vips_image_write(). * * Returns: (transfer full): the new #VipsImage, or %NULL on error. */ VipsImage * vips_image_new(void) { VipsImage *image; char filename[26]; vips_check_init(); vips_image_temp_name(filename, sizeof(filename)); image = VIPS_IMAGE(g_object_new(VIPS_TYPE_IMAGE, NULL)); g_object_set(image, "filename", filename, "mode", "p", NULL); if (vips_object_build(VIPS_OBJECT(image))) { VIPS_UNREF(image); return NULL; } return image; } VipsImage * vips_image_new_mode(const char *filename, const char *mode) { VipsImage *image; g_assert(filename); g_assert(mode); vips_check_init(); image = VIPS_IMAGE(g_object_new(VIPS_TYPE_IMAGE, NULL)); g_object_set(image, "filename", filename, "mode", mode, NULL); if (vips_object_build(VIPS_OBJECT(image))) { VIPS_UNREF(image); return NULL; } return image; } /** * vips_image_new_memory: (skip) * * vips_image_new_memory() creates a new #VipsImage which, when written to, will * create a memory image. * * See also: vips_image_new(). * * Returns: (transfer full): the new #VipsImage, or %NULL on error. */ VipsImage * vips_image_new_memory(void) { char filename[26]; vips_image_temp_name(filename, sizeof(filename)); return vips_image_new_mode(filename, "t"); } /** * vips_image_memory: (constructor) * * A renamed vips_image_new_memory() ... Some gobject binding systems do not * like more than one _new() method. * * See also: vips_image_new_memory(). * * Returns: (transfer full): the new #VipsImage, or %NULL on error. */ VipsImage * vips_image_memory(void) { return vips_image_new_memory(); } /** * vips_filename_get_filename: * @vips_filename: a filename including a set of options * * Given a vips filename like "fred.jpg[Q=90]", return a new string of * just the filename part, "fred.jpg" in this case. * * Useful for language bindings. * * See also: vips_filename_get_options(). * * Returns: transfer full: just the filename component. */ char * vips_filename_get_filename(const char *vips_filename) { char filename[VIPS_PATH_MAX]; char options[VIPS_PATH_MAX]; vips__filename_split8(vips_filename, filename, options); return g_strdup(filename); } /** * vips_filename_get_options: * @vips_filename: a filename including a set of options * * Given a vips filename like "fred.jpg[Q=90]", return a new string of * just the options part, "[Q=90]" in this case. * * Useful for language bindings. * * See also: vips_filename_get_filename(). * * Returns: transfer full: just the options component. */ char * vips_filename_get_options(const char *vips_filename) { char filename[VIPS_PATH_MAX]; char options[VIPS_PATH_MAX]; vips__filename_split8(vips_filename, filename, options); return g_strdup(options); } /** * vips_image_new_from_file: (constructor) * @name: file to open * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @access: hint #VipsAccess mode to loader * * @memory: force load via memory * * vips_image_new_from_file() opens @name for reading. It can load files * in many image formats, including VIPS, TIFF, PNG, JPEG, FITS, Matlab, * OpenEXR, CSV, WebP, Radiance, RAW, PPM and others. * * Load options may be appended to @filename as "[name=value,...]" or given as * a NULL-terminated list of name-value pairs at the end of the arguments. * Options given in the function call override options given in the filename. * Many loaders add extra options, see vips_jpegload(), for example. * * vips_image_new_from_file() always returns immediately with the header * fields filled in. No pixels are actually read until you first access them. * * @access lets you set a #VipsAccess hint giving the expected access pattern * for this file. * #VIPS_ACCESS_RANDOM means you can fetch pixels randomly from the image. * This is the default mode. #VIPS_ACCESS_SEQUENTIAL means you will read the * whole image exactly once, top-to-bottom. In this mode, vips can avoid * converting the whole image in one go, for a large memory saving. You are * allowed to make small non-local references, so area operations like * convolution will work. * * In #VIPS_ACCESS_RANDOM mode, small images are decompressed to memory and * then processed from there. Large images are decompressed to temporary * random-access files on disc and then processed from there. * * Set @memory to %TRUE to force loading via memory. The default is to load * large random access images via temporary disc files. See * vips_image_new_temp_file() for an * explanation of how VIPS selects a location for the temporary file. * * The disc threshold can be set with the "--vips-disc-threshold" * command-line argument, or the `VIPS_DISC_THRESHOLD` environment variable. * The value is a simple integer, but can take a unit postfix of "k", * "m" or "g" to indicate kilobytes, megabytes or gigabytes. * The default threshold is 100 MB. * * For example: * * |[ * VipsImage *image = vips_image_new_from_file("fred.tif", * "page", 12, * NULL); * ]| * * Will open "fred.tif", reading page 12. * * |[ * VipsImage *image = vips_image_new_from_file("fred.jpg[shrink=2]", * NULL); * ]| * * Will open "fred.jpg", downsampling by a factor of two. * * Use vips_foreign_find_load() or vips_foreign_is_a() to see what format a * file is in and therefore what options are available. If you need more * control over the loading process, you can call loaders directly, see * vips_jpegload(), for example. * * See also: vips_foreign_find_load(), vips_foreign_is_a(), * vips_image_write_to_file(). * * Returns: (transfer full): the new #VipsImage, or %NULL on error. */ VipsImage * vips_image_new_from_file(const char *name, ...) { char filename[VIPS_PATH_MAX]; char option_string[VIPS_PATH_MAX]; const char *operation_name; va_list ap; int result; VipsImage *out; vips_check_init(); vips__filename_split8(name, filename, option_string); if (!(operation_name = vips_foreign_find_load(filename))) return NULL; va_start(ap, name); result = vips_call_split_option_string(operation_name, option_string, ap, filename, &out); va_end(ap); if (result) return NULL; return out; } /** * vips_image_new_from_file_RW: (constructor) * @filename: filename to open * * Opens the named file for simultaneous reading and writing. This will only * work for VIPS files in a format native to your machine. It is only for * paintbox-type applications. * * See also: vips_draw_circle(). * * Returns: (transfer full): the new #VipsImage, or %NULL on error. */ VipsImage * vips_image_new_from_file_RW(const char *filename) { return vips_image_new_mode(filename, "rw"); } /** * vips_image_new_from_file_raw: (constructor) * @filename: filename to open * @xsize: image width * @ysize: image height * @bands: image bands (or bytes per pixel) * @offset: bytes to skip at start of file * * This function maps the named file and returns a #VipsImage you can use to * read it. * * It returns an 8-bit image with @bands bands. If the image is not 8-bit, use * vips_copy() to transform the descriptor after loading it. * * See also: vips_copy(), vips_rawload(), vips_image_new_from_file(). * * Returns: (transfer full): the new #VipsImage, or %NULL on error. */ VipsImage * vips_image_new_from_file_raw(const char *filename, int xsize, int ysize, int bands, guint64 offset) { VipsImage *image; vips_check_init(); image = VIPS_IMAGE(g_object_new(VIPS_TYPE_IMAGE, NULL)); g_object_set(image, "filename", filename, "mode", "a", "width", xsize, "height", ysize, "bands", bands, "sizeof_header", offset, NULL); if (vips_object_build(VIPS_OBJECT(image))) { VIPS_UNREF(image); return NULL; } return image; } /** * vips_image_new_from_memory: (constructor) * @data: (array length=size) (element-type guint8) (transfer none): start of memory area * @size: (type gsize): length of memory area * @width: image width * @height: image height * @bands: image bands (or bytes per pixel) * @format: image format * * This function wraps a #VipsImage around a memory area. The memory area * must be a simple array, for example RGBRGBRGB, left-to-right, * top-to-bottom. Use vips_image_new_from_buffer() to load an area of memory * containing an image in a format. * * VIPS does not take * responsibility for the area of memory, it's up to you to make sure it's * freed when the image is closed. See for example #VipsObject::close. * * Because VIPS is "borrowing" @data from the caller, this function is * extremely dangerous. Unless you are very careful, you will get crashes or * memory corruption. Use vips_image_new_from_memory_copy() instead if you are * at all unsure. * * Use vips_copy() to set other image properties. * * See also: vips_image_new(), vips_image_write_to_memory(), * vips_image_new_from_memory_copy(). * * Returns: (transfer full): the new #VipsImage, or %NULL on error. */ VipsImage * vips_image_new_from_memory(const void *data, size_t size, int width, int height, int bands, VipsBandFormat format) { VipsImage *image; char filename[26]; vips_check_init(); vips_image_temp_name(filename, sizeof(filename)); image = VIPS_IMAGE(g_object_new(VIPS_TYPE_IMAGE, NULL)); g_object_set(image, "filename", filename, "mode", "m", "foreign_buffer", data, "width", width, "height", height, "bands", bands, "format", format, NULL); if (vips_object_build(VIPS_OBJECT(image))) { VIPS_UNREF(image); return NULL; } if (size < VIPS_IMAGE_SIZEOF_IMAGE(image)) { vips_error("VipsImage", _("memory area too small --- " "should be %" G_GINT64_FORMAT " bytes, you passed %zd"), VIPS_IMAGE_SIZEOF_IMAGE(image), size); VIPS_UNREF(image); return NULL; } return image; } static void vips_image_new_from_memory_copy_cb(VipsImage *image, void *data_copy) { vips_tracked_free(data_copy); } /** * vips_image_new_from_memory_copy: (constructor) * @data: (array length=size) (element-type guint8) (transfer none): start of memory area * @size: (type gsize): length of memory area * @width: image width * @height: image height * @bands: image bands (or bytes per pixel) * @format: image format * * Like vips_image_new_from_memory(), but VIPS will make a copy of the memory * area. This means more memory use and an extra copy operation, but is much * simpler and safer. * * See also: vips_image_new_from_memory(). * * Returns: (transfer full): the new #VipsImage, or %NULL on error. */ VipsImage * vips_image_new_from_memory_copy(const void *data, size_t size, int width, int height, int bands, VipsBandFormat format) { void *data_copy; VipsImage *image; vips_check_init(); if (!(data_copy = vips_tracked_malloc(size))) return NULL; memcpy(data_copy, data, size); if (!(image = vips_image_new_from_memory(data_copy, size, width, height, bands, format))) { vips_tracked_free(data_copy); return NULL; } g_signal_connect(image, "close", G_CALLBACK(vips_image_new_from_memory_copy_cb), data_copy); return image; } /** * vips_image_new_from_buffer: (constructor) * @buf: (array length=len) (element-type guint8) (transfer none): image data * @len: (type gsize): length of memory buffer * @option_string: set of extra options as a string * @...: %NULL-terminated list of optional named arguments * * Loads an image from the formatted area of memory @buf, @len using the * loader recommended by vips_foreign_find_load_buffer(). * To load an unformatted area of memory, use * vips_image_new_from_memory(). * * VIPS does not take * responsibility for the area of memory, it's up to you to make sure it's * freed when the image is closed. See for example #VipsObject::close. * * Load options may be given in @option_string as "[name=value,...]" or given as * a NULL-terminated list of name-value pairs at the end of the arguments. * Options given in the function call override options given in the filename. * * See also: vips_image_write_to_buffer(). * * Returns: (transfer full): the new #VipsImage, or %NULL on error. */ VipsImage * vips_image_new_from_buffer(const void *buf, size_t len, const char *option_string, ...) { const char *operation_name; va_list ap; int result; VipsImage *out; VipsBlob *blob; vips_check_init(); if (!(operation_name = vips_foreign_find_load_buffer(buf, len))) return NULL; /* We don't take a copy of the data or free it. */ blob = vips_blob_new(NULL, buf, len); va_start(ap, option_string); result = vips_call_split_option_string(operation_name, option_string, ap, blob, &out); va_end(ap); vips_area_unref(VIPS_AREA(blob)); if (result) return NULL; return out; } /** * vips_image_new_from_source: (constructor) * @source: (transfer none): source to fetch image from * @option_string: set of extra options as a string * @...: %NULL-terminated list of optional named arguments * * Loads an image from the formatted source @input, * loader recommended by vips_foreign_find_load_source(). * * Load options may be given in @option_string as "[name=value,...]" or given as * a NULL-terminated list of name-value pairs at the end of the arguments. * Options given in the function call override options given in the string. * * See also: vips_image_write_to_target(). * * Returns: (transfer full): the new #VipsImage, or %NULL on error. */ VipsImage * vips_image_new_from_source(VipsSource *source, const char *option_string, ...) { const char *filename = vips_connection_filename(VIPS_CONNECTION(source)); const char *operation_name; va_list ap; int result; VipsImage *out; vips_check_init(); vips_error_freeze(); operation_name = vips_foreign_find_load_source(source); vips_error_thaw(); if (operation_name) { va_start(ap, option_string); result = vips_call_split_option_string(operation_name, option_string, ap, source, &out); va_end(ap); } else if (filename) { /* Try with the old file-based loaders. */ if (!(operation_name = vips_foreign_find_load(filename))) return NULL; va_start(ap, option_string); result = vips_call_split_option_string(operation_name, option_string, ap, filename, &out); va_end(ap); } else if (vips_source_is_mappable(source)) { /* Try with the old buffer-based loaders. */ VipsBlob *blob; const void *buf; size_t len; if (!(blob = vips_source_map_blob(source))) return NULL; buf = vips_blob_get(blob, &len); if (!(operation_name = vips_foreign_find_load_buffer(buf, len))) { vips_area_unref(VIPS_AREA(blob)); return NULL; } va_start(ap, option_string); result = vips_call_split_option_string(operation_name, option_string, ap, blob, &out); va_end(ap); vips_area_unref(VIPS_AREA(blob)); } else { vips_error("VipsImage", "%s", _("unable to load source")); result = -1; } if (result) return NULL; return out; } /** * vips_image_new_matrix: (constructor) * @width: image width * @height: image height * * This convenience function makes an image which is a matrix: a one-band * #VIPS_FORMAT_DOUBLE image held in memory. * * Use VIPS_IMAGE_ADDR(), or VIPS_MATRIX() to address pixels in the image. * * Use vips_image_set_double() to set "scale" and "offset", if required. * * See also: vips_image_new_matrixv() * * Returns: (transfer full): the new #VipsImage, or %NULL on error. */ VipsImage * vips_image_new_matrix(int width, int height) { VipsImage *image; vips_check_init(); image = VIPS_IMAGE(g_object_new(VIPS_TYPE_IMAGE, NULL)); g_object_set(image, "filename", "vips_image_new_matrix", "mode", "t", "width", width, "height", height, "bands", 1, "format", VIPS_FORMAT_DOUBLE, "interpretation", VIPS_INTERPRETATION_MATRIX, NULL); if (vips_object_build(VIPS_OBJECT(image))) { VIPS_UNREF(image); return NULL; } if (vips_image_write_prepare(image)) { g_object_unref(image); return NULL; } return image; } /** * vips_image_new_matrixv: (constructor) * @width: image width * @height: image height * @...: matrix coefficients * * As vips_image_new_matrix(), but initialise the matrix from the argument * list. After @height should be @width * @height double constants which are * used to set the matrix elements. * * See also: vips_image_new_matrix() * * Returns: (transfer full): the new #VipsImage, or %NULL on error. */ VipsImage * vips_image_new_matrixv(int width, int height, ...) { va_list ap; VipsImage *matrix; int x, y; vips_check_init(); matrix = vips_image_new_matrix(width, height); va_start(ap, height); for (y = 0; y < height; y++) for (x = 0; x < width; x++) *VIPS_MATRIX(matrix, x, y) = va_arg(ap, double); va_end(ap); return matrix; } /** * vips_image_new_matrix_from_array: (constructor) * @width: image width * @height: image height * @array: (array length=size) (transfer none): array of elements * @size: (type gsize): number of elements * * A binding-friendly version of vips_image_new_matrixv(). * * Returns: (transfer full): the new #VipsImage, or %NULL on error. */ VipsImage * vips_image_new_matrix_from_array(int width, int height, const double *array, int size) { VipsImage *matrix; int x, y; int i; if (size != width * height) { vips_error("VipsImage", _("bad array length --- should be %d, you passed %d"), width * height, size); return NULL; } vips_check_init(); matrix = vips_image_new_matrix(width, height); i = 0; for (y = 0; y < height; y++) for (x = 0; x < width; x++) *VIPS_MATRIX(matrix, x, y) = array[i++]; return matrix; } /** * vips_image_matrix_from_array: (skip) * @width: image width * @height: image height * @array: (array length=size) (transfer none): array of elements * @size: (type gsize): number of elements * * A renamed vips_image_new_matrix_from_array(). Some gobject bindings do not * like more than one _new method. * * Returns: (transfer full): the new #VipsImage, or %NULL on error. */ VipsImage * vips_image_matrix_from_array(int width, int height, const double *array, int size) { return vips_image_new_matrix_from_array(width, height, array, size); } /** * vips_image_new_from_image: (constructor) * @image: image to copy * @c: (array length=n) (transfer none): array of constants * @n: number of constants * * Creates a new image with width, height, format, interpretation, resolution * and offset taken from @image, but with number of bands taken from @n and the * value of each band element set from @c. * * See also: vips_image_new_from_image1() * * Returns: (transfer full): the new #VipsImage, or %NULL on error. */ VipsImage * vips_image_new_from_image(VipsImage *image, const double *c, int n) { VipsObject *scope = (VipsObject *) vips_image_new(); VipsImage **t = (VipsImage **) vips_object_local_array(scope, 5); double *ones; int i; VipsImage *result; if (!(ones = VIPS_ARRAY(scope, n, double))) { g_object_unref(scope); return NULL; } for (i = 0; i < n; i++) ones[i] = 1.0; if (vips_black(&t[0], 1, 1, NULL) || vips_linear(t[0], &t[1], ones, (double *) c, n, NULL) || vips_cast(t[1], &t[2], image->BandFmt, NULL) || vips_embed(t[2], &t[3], 0, 0, image->Xsize, image->Ysize, "extend", VIPS_EXTEND_COPY, NULL) || vips_copy(t[3], &t[4], "interpretation", image->Type, "xres", image->Xres, "yres", image->Yres, "xoffset", image->Xoffset, "yoffset", image->Yoffset, NULL)) { g_object_unref(scope); return NULL; } result = t[4]; g_object_ref(result); g_object_unref(scope); return result; } /** * vips_image_new_from_image1: (constructor) * @image: image to copy * @c: constants * * Creates a new image with width, height, format, interpretation, resolution * and offset taken from @image, but with one band and each pixel having the * value @c. * * See also: vips_image_new_from_image() * * Returns: (transfer full): the new #VipsImage, or %NULL on error. */ VipsImage * vips_image_new_from_image1(VipsImage *image, double c) { return vips_image_new_from_image(image, (const double *) &c, 1); } /** * vips_image_set_delete_on_close: * @image: image to set * @delete_on_close: format of file * * Sets the delete_on_close flag for the image. If this flag is set, when * @image is finalized, the filename held in @image->filename at the time of * this call is deleted. * * This function is clearly extremely dangerous, use with great caution. * * See also: vips_image_new_temp_file(). */ void vips_image_set_delete_on_close(VipsImage *image, gboolean delete_on_close) { VIPS_DEBUG_MSG("vips_image_set_delete_on_close: %d %s\n", delete_on_close, image->filename); image->delete_on_close = delete_on_close; VIPS_FREE(image->delete_on_close_filename); if (delete_on_close) VIPS_SETSTR(image->delete_on_close_filename, image->filename); } /** * vips_get_disc_threshold: * * Return the number of bytes at which we flip between open via memory and * open via disc. This defaults to 100mb, but can be changed with the * VIPS_DISC_THRESHOLD environment variable or the --vips-disc-threshold * command-line flag. See vips_image_new_from_file(). * * Returns: disc threshold in bytes. */ guint64 vips_get_disc_threshold(void) { static gboolean done = FALSE; static guint64 threshold; if (!done) { const char *env; done = TRUE; /* 100mb default. */ threshold = 100 * 1024 * 1024; if ((env = g_getenv("VIPS_DISC_THRESHOLD")) #if ENABLE_DEPRECATED || (env = g_getenv("IM_DISC_THRESHOLD")) #endif ) threshold = vips__parse_size(env); if (vips__disc_threshold) threshold = vips__parse_size(vips__disc_threshold); #ifdef DEBUG printf("vips_get_disc_threshold: %zd bytes\n", threshold); #endif /*DEBUG*/ } return threshold; } /** * vips_image_new_temp_file: (constructor) * @format: format of file * * Make a #VipsImage which, when written to, will create a temporary file on * disc. The file will be automatically deleted when the image is destroyed. * @format is something like "%s.v" for a vips file. * * The file is created in the temporary directory. This is set with the * environment variable TMPDIR. If this is not set, then on Unix systems, vips * will default to /tmp. On Windows, vips uses GetTempPath() to find the * temporary directory. * * See also: vips_image_new(). * * Returns: the new #VipsImage, or %NULL on error. */ VipsImage * vips_image_new_temp_file(const char *format) { char *name; VipsImage *image; vips_check_init(); if (!(name = vips__temp_name(format))) return NULL; if (!(image = vips_image_new_mode(name, "w"))) { g_free(name); return NULL; } g_free(name); vips_image_set_delete_on_close(image, TRUE); return image; } static int vips_image_write_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; VipsRect *r = &out_region->valid; /* printf("vips_image_write_gen: %p " "left = %d, top = %d, width = %d, height = %d\n", out_region->im, r->left, r->top, r->width, r->height); */ /* Copy with pointers. */ if (vips_region_prepare(ir, r) || vips_region_region(out_region, ir, r, r->left, r->top)) return -1; return 0; } /** * vips_image_write: * @image: image to write * @out: (out): write to this image * * Write @image to @out. Use vips_image_new() and friends to create the * #VipsImage you want to write to. * * See also: vips_image_new(), vips_copy(), vips_image_write_to_file(). * * Returns: 0 on success, or -1 on error. */ int vips_image_write(VipsImage *image, VipsImage *out) { /* image needs to stay alive for this call. It can be unreffed during * the generate. */ g_object_ref(image); if (vips_image_pio_input(image) || vips_image_pipelinev(out, VIPS_DEMAND_STYLE_THINSTRIP, image, NULL)) { g_object_unref(image); return -1; } if (vips_image_generate(out, vips_start_one, vips_image_write_gen, vips_stop_one, image, NULL)) { g_object_unref(image); return -1; } /* If @out is a partial image, we need to unref @image when out is * unreffed. * * If it's not partial, perhaps a file we write to or a memory image, * we need to break any links between @image and @out created by * vips_image_pipelinev(). */ if (vips_image_ispartial(out)) { vips_object_local(out, image); } else { vips__reorder_clear(out); vips__link_break_all(out); g_object_unref(image); } return 0; } /** * vips_image_write_to_file: * @image: image to write * @name: write to this file * @...: %NULL-terminated list of optional named arguments * * Writes @in to @name using the saver recommended by * vips_foreign_find_save(). * * Save options may be appended to @filename as "[name=value,...]" or given as * a NULL-terminated list of name-value pairs at the end of the arguments. * Options given in the function call override options given in the filename. * * See also: vips_image_new_from_file(). * * Returns: 0 on success, or -1 on error. */ int vips_image_write_to_file(VipsImage *image, const char *name, ...) { char filename[VIPS_PATH_MAX]; char option_string[VIPS_PATH_MAX]; const char *operation_name; va_list ap; int result; /* Save with the new target API if we can. Fall back to the older * mechanism in case the saver we need has not been converted yet. * * We need to hide any errors from this first phase. */ vips__filename_split8(name, filename, option_string); vips_error_freeze(); operation_name = vips_foreign_find_save_target(filename); vips_error_thaw(); if (operation_name) { VipsTarget *target; if (!(target = vips_target_new_to_file(filename))) return -1; va_start(ap, name); result = vips_call_split_option_string(operation_name, option_string, ap, image, target); va_end(ap); VIPS_UNREF(target); } else if ((operation_name = vips_foreign_find_save(filename))) { va_start(ap, name); result = vips_call_split_option_string(operation_name, option_string, ap, image, filename); va_end(ap); } else return -1; return result; } /** * vips_image_write_to_buffer: * @in: image to write * @suffix: format to write * @buf: (array length=size) (element-type guint8) (transfer full): return buffer start here * @size: (type gsize): return buffer length here * @...: %NULL-terminated list of optional named arguments * * Writes @in to a memory buffer in a format specified by @suffix. * * Save options may be appended to @suffix as "[name=value,...]" or given as * a NULL-terminated list of name-value pairs at the end of the arguments. * Options given in the function call override options given in the filename. * * Currently only TIFF, JPEG and PNG formats are supported. * * You can call the various save operations directly if you wish, see * vips_jpegsave_buffer(), for example. * * See also: vips_image_write_to_memory(), vips_image_new_from_buffer(). * * Returns: 0 on success, -1 on error */ int vips_image_write_to_buffer(VipsImage *in, const char *suffix, void **buf, size_t *size, ...) { char filename[VIPS_PATH_MAX]; char option_string[VIPS_PATH_MAX]; const char *operation_name; VipsBlob *blob; va_list ap; int result; vips__filename_split8(suffix, filename, option_string); vips_error_freeze(); operation_name = vips_foreign_find_save_target(filename); vips_error_thaw(); if (operation_name) { VipsTarget *target; if (!(target = vips_target_new_to_memory())) return -1; va_start(ap, size); result = vips_call_split_option_string(operation_name, option_string, ap, in, target); va_end(ap); if (result) { VIPS_UNREF(target); return -1; } g_object_get(target, "blob", &blob, NULL); VIPS_UNREF(target); } else if ((operation_name = vips_foreign_find_save_buffer(filename))) { va_start(ap, size); result = vips_call_split_option_string(operation_name, option_string, ap, in, &blob); va_end(ap); if (result) return -1; } else return -1; *buf = NULL; if (size) *size = 0; if (blob) { if (buf) { *buf = VIPS_AREA(blob)->data; VIPS_AREA(blob)->free_fn = NULL; } if (size) *size = VIPS_AREA(blob)->length; vips_area_unref(VIPS_AREA(blob)); } return 0; } /** * vips_image_write_to_target: * @in: image to write * @suffix: format to write * @target: target to write to * @...: %NULL-terminated list of optional named arguments * * Writes @in to @output in format @suffix. * * Save options may be appended to @suffix as "[name=value,...]" or given as * a NULL-terminated list of name-value pairs at the end of the arguments. * Options given in the function call override options given in the filename. * * You can call the various save operations directly if you wish, see * vips_jpegsave_target(), for example. * * See also: vips_image_write_to_file(). * * Returns: 0 on success, -1 on error */ int vips_image_write_to_target(VipsImage *in, const char *suffix, VipsTarget *target, ...) { char filename[VIPS_PATH_MAX]; char option_string[VIPS_PATH_MAX]; const char *operation_name; va_list ap; int result; vips__filename_split8(suffix, filename, option_string); if (!(operation_name = vips_foreign_find_save_target(filename))) return -1; va_start(ap, target); result = vips_call_split_option_string(operation_name, option_string, ap, in, target); va_end(ap); if (result) return -1; return 0; } /** * vips_image_write_to_memory: * @in: image to write * @size: return buffer length here * * Writes @in to memory as a simple, unformatted C-style array. * * The caller is responsible for freeing this memory with g_free(). * * See also: vips_image_write_to_buffer(). * * Returns: (array length=size) (element-type guint8) (transfer full): return buffer start here */ void * vips_image_write_to_memory(VipsImage *in, size_t *size_out) { void *buf; size_t size; VipsImage *x; size = VIPS_IMAGE_SIZEOF_IMAGE(in); if (!(buf = g_try_malloc(size))) { vips_error("vips_image_write_to_memory", _("out of memory --- size == %dMB"), (int) (size / (1024.0 * 1024.0))); g_warning(_("out of memory --- size == %dMB"), (int) (size / (1024.0 * 1024.0))); return NULL; } x = vips_image_new_from_memory(buf, size, in->Xsize, in->Ysize, in->Bands, in->BandFmt); if (vips_image_write(in, x)) { g_object_unref(x); g_free(buf); return NULL; } g_object_unref(x); if (size_out) *size_out = size; return buf; } /** * vips_image_decode: * @in: image to decode * @out: (out): write to this image * * A convenience function to unpack to a format that we can compute with. * @out.coding is always #VIPS_CODING_NONE. * * This unpacks LABQ to plain LAB. Use vips_LabQ2LabS() for a bit more speed * if you need it. * * See also: vips_image_encode(), vips_LabQ2Lab(), vips_rad2float(). * * Returns: 0 on success, or -1 on error. */ int vips_image_decode(VipsImage *in, VipsImage **out) { /* Keep in sync with vips__vector_to_ink(). */ if (in->Coding == VIPS_CODING_LABQ) { if (vips_LabQ2Lab(in, out, NULL)) return -1; } else if (in->Coding == VIPS_CODING_RAD) { if (vips_rad2float(in, out, NULL)) return -1; } else { if (vips_copy(in, out, NULL)) return -1; } return 0; } /** * vips_image_decode_predict: * @in: image to decode * @bands: (out): predict bands here * @format: (out): predict format here * * We often need to know what an image will decode to without actually * decoding it, for example, in arg checking. * * See also: vips_image_decode(). */ int vips_image_decode_predict(VipsImage *in, int *out_bands, VipsBandFormat *out_format) { VipsBandFormat format; int bands; if (in->Coding == VIPS_CODING_LABQ) { bands = 3; format = VIPS_FORMAT_FLOAT; } else if (in->Coding == VIPS_CODING_RAD) { bands = 3; format = VIPS_FORMAT_FLOAT; } else { bands = in->Bands; format = in->BandFmt; } if (out_bands) *out_bands = bands; if (out_format) *out_format = format; return 0; } /** * vips_image_encode: * @in: image to encode * @out: (out): write to this image * @coding: coding to apply * * A convenience function to pack to a coding. The inverse of * vips_image_decode(). * * See also: vips_image_decode(). * * Returns: 0 on success, or -1 on error. */ int vips_image_encode(VipsImage *in, VipsImage **out, VipsCoding coding) { if (coding == VIPS_CODING_LABQ) { if (vips_Lab2LabQ(in, out, NULL)) return -1; } else if (coding == VIPS_CODING_RAD) { if (vips_float2rad(in, out, NULL)) return -1; } else { if (vips_copy(in, out, NULL)) return -1; } return 0; } /** * vips_image_isMSBfirst: * @image: image to test * * Return %TRUE if @image is in most-significant- * byte first form. This is the byte order used on the SPARC * architecture and others. */ gboolean vips_image_isMSBfirst(VipsImage *image) { if (image->magic == VIPS_MAGIC_SPARC) return 1; else return 0; } /** * vips_image_isfile: * @image: image to test * * Return %TRUE if @image represents a file on disc in some way. */ gboolean vips_image_isfile(VipsImage *image) { switch (image->dtype) { case VIPS_IMAGE_MMAPIN: case VIPS_IMAGE_MMAPINRW: case VIPS_IMAGE_OPENOUT: case VIPS_IMAGE_OPENIN: return 1; case VIPS_IMAGE_PARTIAL: case VIPS_IMAGE_SETBUF: case VIPS_IMAGE_SETBUF_FOREIGN: case VIPS_IMAGE_NONE: return 0; default: g_assert(FALSE); return 0; } } /** * vips_image_ispartial: * @image: image to test * * Return %TRUE if @im represents a partial image (a delayed calculation). */ gboolean vips_image_ispartial(VipsImage *image) { if (image->dtype == VIPS_IMAGE_PARTIAL) return 1; else return 0; } /** * vips_image_hasalpha: * @image: image to check * * Look at an image's interpretation and see if it has extra alpha bands. For * example, a 4-band #VIPS_INTERPRETATION_sRGB would, but a six-band * #VIPS_INTERPRETATION_MULTIBAND would not. * * Return %TRUE if @image has an alpha channel. */ gboolean vips_image_hasalpha(VipsImage *image) { /* The result of hasalpha is used to turn on things like * premultiplication, so we are rather conservative about when we * signal this. We don't want to premultiply things that should not be * premultiplied. */ switch (image->Type) { case VIPS_INTERPRETATION_B_W: case VIPS_INTERPRETATION_GREY16: return image->Bands > 1; case VIPS_INTERPRETATION_RGB: case VIPS_INTERPRETATION_CMC: case VIPS_INTERPRETATION_LCH: case VIPS_INTERPRETATION_LABS: case VIPS_INTERPRETATION_sRGB: case VIPS_INTERPRETATION_YXY: case VIPS_INTERPRETATION_XYZ: case VIPS_INTERPRETATION_LAB: case VIPS_INTERPRETATION_RGB16: case VIPS_INTERPRETATION_scRGB: case VIPS_INTERPRETATION_HSV: return image->Bands > 3; case VIPS_INTERPRETATION_CMYK: return image->Bands > 4; default: /* We can't really infer anything about bands from things like * HISTOGRAM or FOURIER. */ return FALSE; } } /** * vips_image_write_prepare: * @image: image to prepare * * Call this after setting header fields (width, height, and so on) to * allocate resources ready for writing. * * Normally this function is called for you by vips_image_generate() or * vips_image_write_line(). You will need to call it yourself if you plan to * write directly to the ->data member of a memory image. * * Returns: 0 on success, or -1 on error. */ int vips_image_write_prepare(VipsImage *image) { g_assert(vips_object_sanity(VIPS_OBJECT(image))); if (image->Xsize <= 0 || image->Ysize <= 0 || image->Bands <= 0) { vips_error("VipsImage", "%s", _("bad dimensions")); return -1; } /* We don't use this, but make sure it's set in case any old programs * are expecting it. */ image->Bbits = vips_format_sizeof(image->BandFmt) << 3; if (image->dtype == VIPS_IMAGE_PARTIAL) { VIPS_DEBUG_MSG("vips_image_write_prepare: old-style output for %s\n", image->filename); image->dtype = VIPS_IMAGE_SETBUF; } switch (image->dtype) { case VIPS_IMAGE_MMAPINRW: case VIPS_IMAGE_SETBUF_FOREIGN: break; case VIPS_IMAGE_SETBUF: if (!image->data && !(image->data = vips_tracked_malloc( VIPS_IMAGE_SIZEOF_IMAGE(image)))) return -1; break; case VIPS_IMAGE_OPENOUT: if (vips_image_open_output(image)) return -1; break; default: vips_error("VipsImage", "%s", _("bad image descriptor")); return -1; } return 0; } /** * vips_image_write_line: * @image: image to write to * @ypos: vertical position of scan-line to write * @linebuffer: scanline of pixels * * Write a line of pixels to an image. This function must be called repeatedly * with @ypos increasing from 0 to #VipsImage::height . * @linebuffer must be VIPS_IMAGE_SIZEOF_LINE() bytes long. * * See also: vips_image_generate(). * * Returns: 0 on success, or -1 on error. */ int vips_image_write_line(VipsImage *image, int ypos, VipsPel *linebuffer) { int linesize = VIPS_IMAGE_SIZEOF_LINE(image); /* Is this the start of eval? */ if (ypos == 0) { if (vips__image_wio_output(image)) return -1; /* Always clear kill before we start looping. See the * call to vips_image_iskilled() below. */ vips_image_set_kill(image, FALSE); vips_image_write_prepare(image); vips_image_preeval(image); } /* Possible cases for output: FILE or SETBUF. */ switch (image->dtype) { case VIPS_IMAGE_SETBUF: case VIPS_IMAGE_SETBUF_FOREIGN: memcpy(VIPS_IMAGE_ADDR(image, 0, ypos), linebuffer, linesize); break; case VIPS_IMAGE_OPENOUT: /* Don't use ypos for this. */ if (vips__write(image->fd, linebuffer, linesize)) return -1; break; default: vips_error("VipsImage", _("unable to output to a %s image"), vips_enum_string(VIPS_TYPE_IMAGE_TYPE, image->dtype)); return -1; } /* Trigger evaluation callbacks for this image. */ vips_image_eval(image, ypos * image->Xsize); if (vips_image_iskilled(image)) return -1; /* Is this the end of eval? */ if (ypos == image->Ysize - 1) { vips_image_posteval(image); if (vips_image_written(image)) return -1; } return 0; } /* Rewind an output file. VIPS images only. */ static int vips_image_rewind_output(VipsImage *image) { int fd; g_assert(image->dtype == VIPS_IMAGE_OPENOUT); #ifdef DEBUG_IO printf("vips_image_rewind_output: %s\n", image->filename); #endif /*DEBUG_IO*/ /* We want to keep the fd across rewind. * * On Windows, we open temp files with _O_TEMPORARY. We mustn't close * the file since this will delete it. * * We could open the file again to keep a reference to it alive, but * this is also problematic on Windows. */ fd = image->fd; image->fd = -1; /* Free any resources the image holds and reset to a base * state. */ vips_object_rewind(VIPS_OBJECT(image)); /* And reopen ... recurse to get a mmaped image. * * We use "v" mode to get it opened as a vips image, bypassing the * file type checks. They will fail on Windows because you can't open * fds more than once. */ image->fd = fd; g_object_set(image, "mode", "v", NULL); if (vips_object_build(VIPS_OBJECT(image))) { vips_error("VipsImage", _("auto-rewind for %s failed"), image->filename); return -1; } /* Now we've finished writing and reopened as read, we can * delete-on-close. * * On *nix-like systems, this will unlink the file from the * filesystem and when we exit, for whatever reason, the file * we be reclaimed. * * On Windows this will fail because the file is open and you can't * delete open files. However, on Windows we set _O_TEMPORARY, so the * file will be deleted when the fd is finally closed. */ vips_image_delete(image); return 0; } /** * vips_image_copy_memory: * @image: image to copy to a memory buffer * * This function allocates memory, renders @image into it, builds a new * image around the memory area, and returns that. * * If the image is already a simple area of memory, it just refs @image and * returns it. * * Call this before using the draw operations to make sure you have a * memory image that can be modified. * * vips_copy() adds a null "copy" node to a pipeline. Use that * instead if you want to change metadata and not pixels. * * This operation is thread-safe, unlike vips_image_wio_input(). * * If you are sure that @image is not shared with another thread (perhaps you * have made it yourself), use vips_image_wio_input() instead. * * See also: vips_image_wio_input(). * * Returns: (transfer full): the new #VipsImage, or %NULL on error. */ VipsImage * vips_image_copy_memory(VipsImage *image) { VipsImage *new; switch (image->dtype) { case VIPS_IMAGE_SETBUF: case VIPS_IMAGE_SETBUF_FOREIGN: case VIPS_IMAGE_MMAPIN: case VIPS_IMAGE_MMAPINRW: /* Can read from all these, in principle anyway. */ new = image; g_object_ref(new); break; case VIPS_IMAGE_OPENOUT: case VIPS_IMAGE_OPENIN: case VIPS_IMAGE_PARTIAL: new = vips_image_new_memory(); if (vips_image_write(image, new)) { g_object_unref(new); return NULL; } break; default: vips_error("vips_image_copy_memory", "%s", _("image not readable")); return NULL; } return new; } /** * vips_image_wio_input: * @image: image to transform * * Check that an image is readable via the VIPS_IMAGE_ADDR() macro, that is, * that the entire image is in memory and all pixels can be read with * VIPS_IMAGE_ADDR(). If it * isn't, try to transform it so that VIPS_IMAGE_ADDR() can work. * * Since this function modifies @image, it is not thread-safe. Only call it on * images which you are sure have not been shared with another thread. If the * image might have been shared, use the less efficient * vips_image_copy_memory() instead. * * See also: vips_image_copy_memory(), vips_image_pio_input(), * vips_image_inplace(), VIPS_IMAGE_ADDR(). * * Returns: 0 on success, or -1 on error. */ int vips_image_wio_input(VipsImage *image) { VipsImage *t1; g_assert(vips_object_sanity(VIPS_OBJECT(image))); #ifdef DEBUG_IO printf("vips_image_wio_input: wio input for %s\n", image->filename); #endif /*DEBUG_IO*/ switch (image->dtype) { case VIPS_IMAGE_SETBUF: case VIPS_IMAGE_SETBUF_FOREIGN: /* Should have been written to. */ if (!image->data) { vips_error("vips_image_wio_input", "%s", _("no image data")); return -1; } break; case VIPS_IMAGE_MMAPIN: case VIPS_IMAGE_MMAPINRW: /* Can read from all these, in principle anyway. */ break; case VIPS_IMAGE_PARTIAL: #ifdef DEBUG_IO printf("vips_image_wio_input: converting partial image to WIO\n"); #endif /*DEBUG_IO*/ /* Change to VIPS_IMAGE_SETBUF. First, make a memory * buffer and copy into that. */ t1 = vips_image_new_memory(); if (vips_image_write(image, t1)) { g_object_unref(t1); return -1; } /* Copy new stuff in. We can't unref and free stuff, as this * would kill of lots of regions and cause dangling pointers * elsewhere. */ image->dtype = VIPS_IMAGE_SETBUF; image->data = t1->data; t1->data = NULL; /* Close temp image. */ g_object_unref(t1); /* We need to zap any start/gen/stop callbacks. If we don't, * calling vips_region_prepare_to() later to read from this * image will fail, since it will think it needs to create the * image, not read from it. */ image->start_fn = NULL; image->generate_fn = NULL; image->stop_fn = NULL; image->client1 = NULL; image->client2 = NULL; /* ... and that may confuse any regions which are trying to * generate from this image. */ if (image->regions) g_warning("rewinding image with active regions"); break; case VIPS_IMAGE_OPENIN: #ifdef DEBUG_IO printf("vips_image_wio_input: " "converting openin image for wio input\n"); #endif /*DEBUG_IO*/ /* just mmap() the whole thing. */ if (vips_mapfile(image)) return -1; image->data = (VipsPel *) image->baseaddr + image->sizeof_header; image->dtype = VIPS_IMAGE_MMAPIN; break; case VIPS_IMAGE_OPENOUT: /* Close file down and reopen as input. I guess this will only * work for vips files? */ if (vips_image_rewind_output(image) || vips_image_wio_input(image)) return -1; break; default: vips_error("vips_image_wio_input", "%s", _("image not readable")); return -1; } return 0; } int vips__image_wio_output(VipsImage *image) { #ifdef DEBUG_IO printf("vips__image_wio_output: WIO output for %s\n", image->filename); #endif /*DEBUG_IO*/ switch (image->dtype) { case VIPS_IMAGE_PARTIAL: /* Make sure nothing is attached. */ if (image->generate_fn) { vips_error("vips__image_wio_output", "%s", _("image already written")); return -1; } /* Cannot do old-style write to PARTIAL. Turn to SETBUF. */ image->dtype = VIPS_IMAGE_SETBUF; break; case VIPS_IMAGE_SETBUF: case VIPS_IMAGE_OPENOUT: case VIPS_IMAGE_SETBUF_FOREIGN: /* Can write to this ok. * * We used to check that ->data was null and warn about * writing twice, but we no longer insist that this is called * before vips_image_write_prepare(), so we can't do that any * more. */ break; default: vips_error("vips__image_wio_output", "%s", _("image not writeable")); return -1; } return 0; } /** * vips_image_inplace: * @image: image to make read-write * * Gets @image ready for an in-place operation, such as vips_draw_circle(). * After calling this function you can both read and write the image with * VIPS_IMAGE_ADDR(). * * This method is called for you by the base class of the draw operations, * there's no need to call it yourself. * * Since this function modifies @image, it is not thread-safe. Only call it on * images which you are sure have not been shared with another thread. * All in-place operations are inherently not thread-safe, so you need to take * great care in any case. * * See also: vips_draw_circle(), vips_image_wio_input(). * * Returns: 0 on success, or -1 on error. */ int vips_image_inplace(VipsImage *image) { /* Do an vips_image_wio_input(). This will rewind, generate, etc. */ if (vips_image_wio_input(image)) return -1; /* Look at the type. */ switch (image->dtype) { case VIPS_IMAGE_SETBUF: case VIPS_IMAGE_SETBUF_FOREIGN: case VIPS_IMAGE_MMAPINRW: /* No action necessary. */ break; case VIPS_IMAGE_MMAPIN: /* Try to remap read-write. */ if (vips_remapfilerw(image)) return -1; break; default: vips_error("vips_image_inplace", "%s", _("bad file type")); return -1; } /* This image is about to be changed (probably). Make sure it's not * in cache. */ vips_image_invalidate_all(image); return 0; } /** * vips_image_pio_input: * @image: image to check * * Check that an image is readable with vips_region_prepare() and friends. * If it isn't, try to transform the image so that vips_region_prepare() can * work. * * See also: vips_image_pio_output(), vips_region_prepare(). * * Returns: 0 on success, or -1 on error. */ int vips_image_pio_input(VipsImage *image) { g_assert(vips_object_sanity(VIPS_OBJECT(image))); #ifdef DEBUG_IO printf("vips_image_pio_input: enabling partial input for %s\n", image->filename); #endif /*DEBUG_IO*/ switch (image->dtype) { case VIPS_IMAGE_SETBUF: case VIPS_IMAGE_SETBUF_FOREIGN: /* Should have been written to. */ if (!image->data) { vips_error("vips_image_pio_input", "%s", _("no image data")); return -1; } /* Should be no generate functions now. */ image->start_fn = NULL; image->generate_fn = NULL; image->stop_fn = NULL; break; case VIPS_IMAGE_PARTIAL: /* We can sometimes want to copy images with no generate func, * eg. if we are going to be manipulating metadata, so we * can't check for gen funcs. See dzsave direct mode. */ break; case VIPS_IMAGE_MMAPIN: case VIPS_IMAGE_MMAPINRW: case VIPS_IMAGE_OPENIN: break; case VIPS_IMAGE_OPENOUT: /* Free any resources the image holds and reset to a base * state. */ if (vips_image_rewind_output(image)) return -1; break; default: vips_error("vips_image_pio_input", "%s", _("image not readable")); return -1; } return 0; } /** * vips_image_pio_output: * @image: image to check * * Check that an image is writeable with vips_image_generate(). If it isn't, * try to transform the image so that vips_image_generate() can work. * * See also: vips_image_pio_input(). * * Returns: 0 on success, or -1 on error. */ int vips_image_pio_output(VipsImage *image) { #ifdef DEBUG_IO printf("vips_image_pio_output: enabling partial output for %s\n", image->filename); #endif /*DEBUG_IO*/ switch (image->dtype) { case VIPS_IMAGE_SETBUF: if (image->data) { vips_error("vips_image_pio_output", "%s", _("image already written")); return -1; } break; case VIPS_IMAGE_PARTIAL: if (image->generate_fn) { vips_error("vips_image_pio_output", "%s", _("image already written")); return -1; } break; case VIPS_IMAGE_OPENOUT: case VIPS_IMAGE_SETBUF_FOREIGN: break; default: vips_error("vips_image_pio_output", "%s", _("image not writeable")); return -1; } return 0; } /** * vips_band_format_isint: * @format: format to test * * Return %TRUE if @format is one of the integer types. */ gboolean vips_band_format_isint(VipsBandFormat format) { switch (format) { case VIPS_FORMAT_UCHAR: case VIPS_FORMAT_CHAR: case VIPS_FORMAT_USHORT: case VIPS_FORMAT_SHORT: case VIPS_FORMAT_UINT: case VIPS_FORMAT_INT: return TRUE; case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_DOUBLE: case VIPS_FORMAT_COMPLEX: case VIPS_FORMAT_DPCOMPLEX: return FALSE; default: g_assert_not_reached(); return FALSE; } } /** * vips_band_format_isuint: * @format: format to test * * Return %TRUE if @format is one of the unsigned integer types. */ gboolean vips_band_format_isuint(VipsBandFormat format) { switch (format) { case VIPS_FORMAT_UCHAR: case VIPS_FORMAT_USHORT: case VIPS_FORMAT_UINT: return TRUE; case VIPS_FORMAT_INT: case VIPS_FORMAT_SHORT: case VIPS_FORMAT_CHAR: case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_DOUBLE: case VIPS_FORMAT_COMPLEX: case VIPS_FORMAT_DPCOMPLEX: return FALSE; default: g_assert_not_reached(); return FALSE; } } /** * vips_band_format_is8bit: * @format: format to test * * Return %TRUE if @format is uchar or schar. */ gboolean vips_band_format_is8bit(VipsBandFormat format) { switch (format) { case VIPS_FORMAT_UCHAR: case VIPS_FORMAT_CHAR: return TRUE; case VIPS_FORMAT_USHORT: case VIPS_FORMAT_SHORT: case VIPS_FORMAT_UINT: case VIPS_FORMAT_INT: case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_DOUBLE: case VIPS_FORMAT_COMPLEX: case VIPS_FORMAT_DPCOMPLEX: return FALSE; default: g_assert_not_reached(); return FALSE; } } /** * vips_band_format_isfloat: * @format: format to test * * Return %TRUE if @format is one of the float types. */ gboolean vips_band_format_isfloat(VipsBandFormat format) { switch (format) { case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_DOUBLE: return TRUE; case VIPS_FORMAT_UCHAR: case VIPS_FORMAT_CHAR: case VIPS_FORMAT_USHORT: case VIPS_FORMAT_SHORT: case VIPS_FORMAT_UINT: case VIPS_FORMAT_INT: case VIPS_FORMAT_COMPLEX: case VIPS_FORMAT_DPCOMPLEX: return FALSE; default: g_assert_not_reached(); return FALSE; } } /** * vips_band_format_iscomplex: * @format: format to test * * Return %TRUE if @fmt is one of the complex types. */ gboolean vips_band_format_iscomplex(VipsBandFormat format) { switch (format) { case VIPS_FORMAT_COMPLEX: case VIPS_FORMAT_DPCOMPLEX: return TRUE; case VIPS_FORMAT_UCHAR: case VIPS_FORMAT_CHAR: case VIPS_FORMAT_USHORT: case VIPS_FORMAT_SHORT: case VIPS_FORMAT_UINT: case VIPS_FORMAT_INT: case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_DOUBLE: return FALSE; default: g_assert_not_reached(); return FALSE; } } /** * vips_image_free_buffer: * @image: the image that contains the buffer * @buffer: the original buffer that was stolen * * Free the externally allocated buffer found in the input image. This function * is intended to be used with g_signal_connect. */ void vips_image_free_buffer(VipsImage *image, void *buffer) { free(buffer); } /* Handy for debugging: view an image in nip2. */ int vips__view_image(VipsImage *image) { VipsArrayImage *array; int result; array = vips_array_image_new(&image, 1); result = vips_system("nip2 %s", "in", array, "in-format", "%s.v", NULL); vips_area_unref(VIPS_AREA(array)); return result; } libvips-8.15.1/libvips/iofuncs/init.c000066400000000000000000001005131454007373500175130ustar00rootroot00000000000000/* Start up the world of vips. * * 7/1/04 JC * - 1st version * 7/6/05 * - g_type_init() too, so we can use gobject * 2/9/06 * - also set g_prg_name() and load plugins * 8/12/06 * - add liboil support * 5/2/07 * - stop a loop if we're called recursively during VIPS startup ... it * can happen if (for example) vips_guess_prefix() fails and tries to * i18n an error message (thanks Christian) * 8/6/07 * - just warn if plugins fail to load correctly: too annoying to have * VIPS refuse to start because of a dodgy plugin * 7/11/07 * - progress feedback option * 5/8/08 * - load plugins from libdir/vips-x.x * 5/10/09 * - gtkdoc comments * 14/3/10 * - init image and region before we start, we need all types to be fully * constructed before we go parallel * 18/9/16 * - call _setmaxstdio() on win32 * 4/8/17 * - hide warnings is VIPS_WARNING is set * 20/4/19 * - set the min stack, if we can * 17/9/21 * - don't use atexit for cleanup, it's too unreliable ... users should * call vips_shutdown explicitly if they want a clean exit, though a * dirty exit is fine */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ /* pthread_setattr_default_np() is a non-portable GNU extension. */ #define _GNU_SOURCE #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #ifdef HAVE_PTHREAD_DEFAULT_NP #include #endif /*HAVE_PTHREAD_DEFAULT_NP*/ #include #include #ifdef HAVE_SYS_PARAM_H #include #endif /*HAVE_SYS_PARAM_H*/ #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #ifdef HAVE_DIRECT_H #include #endif /*HAVE_DIRECT_H*/ #include #include #define VIPS_DISABLE_DEPRECATION_WARNINGS #include #include #include #include #if ENABLE_DEPRECATED #include #endif /* abort() on the first warning or error. */ int vips__fatal = 0; /* Use in various small places where we need a mutex and it's not worth * making a private one. */ GMutex *vips__global_lock = NULL; /* A debugging timer, zero at library init. */ GTimer *vips__global_timer = NULL; /* Keep a copy of the argv0 here. */ static char *vips__argv0 = NULL; /* Keep a copy of the last component of argv0 here. */ static char *vips__prgname = NULL; /* Leak check on exit. */ int vips__leak = 0; #ifdef DEBUG_LEAK /* Count pixels processed per image here. */ GQuark vips__image_pixels_quark = 0; #endif /*DEBUG_LEAK*/ static gint64 vips_pipe_read_limit = 1024 * 1024 * 1024; /** * vips_get_argv0: * * See also: VIPS_INIT(). * * Returns: (transfer none): a pointer to an internal copy of the * argv0 string passed to * VIPS_INIT(). Do not free this value */ const char * vips_get_argv0(void) { return vips__argv0; } /** * vips_get_prgname: * * Return the program name. This can be useful for the user tio see,. * * See also: VIPS_INIT(). * * Returns: (transfer none): a pointer to an internal copy of the program * name. Do not free this value */ const char * vips_get_prgname(void) { const char *prgname; if ((prgname = g_get_prgname())) return prgname; else return vips__prgname; } /** * VIPS_INIT: * @ARGV0: name of application * * VIPS_INIT() starts up the world of VIPS. You should call this on * program startup before using any other VIPS operations. If you do not call * VIPS_INIT(), VIPS will call it for you when you use your first VIPS * operation, but it may not be able to get hold of @ARGV0 and VIPS may * therefore be unable to find its data files. It is much better to call * this macro yourself. * * @ARGV0 is used to help discover message catalogues if libvips has been * relocated. If you don't need a relocatable package, you can just pass `""` * and it'll be fine. * * Additionally, VIPS_INIT() can be run from any thread, but it must not be * called from more than one thread at the same time. This is much easier to * guarantee if you call it yourself. * * VIPS_INIT() is a macro, since it tries to check ABI compatibility * between the caller and the library. You can also call vips_init(), the * non-macro version, if macros are not available to you. * * You may call VIPS_INIT() many times and vips_shutdown() many times, but you * must not call VIPS_INIT() after vips_shutdown(). In other words, you cannot * stop and restart vips. * * Use the environment variable `VIPS_MIN_STACK_SIZE` to set the minimum stack * size. For example, `2m` for a minimum of two megabytes of stack. This can * be important for systems like musl where the default stack is very small. * * VIPS_INIT() does approximately the following: * * + checks that the libvips your program is expecting is * binary-compatible with the vips library you're running against * * + sets a minimum stack size, see above * * + initialises any libraries that VIPS is using, including GObject * and the threading system, if necessary * * + guesses where the VIPS data files are and sets up * internationalisation --- see vips_guess_prefix() * * + creates the main vips types, including #VipsImage and friends * * + loads any plugins from $libdir/vips-x.y/, where x and y are the * major and minor version numbers for this VIPS. * * Example: * * |[ * int main(int argc, char **argv) * { * if (VIPS_INIT(argv[0])) * vips_error_exit("unable to start VIPS"); * * vips_shutdown(); * * return 0; * } * ]| * * See also: vips_shutdown(), vips_add_option_entries(), vips_version(), * vips_guess_prefix(), vips_guess_libdir(). * * Returns: 0 on success, -1 otherwise */ #ifdef ENABLE_MODULES /* Load all plugins in a directory. */ static void vips_load_plugins(const char *fmt, ...) { va_list ap; char dir_name[VIPS_PATH_MAX]; GDir *dir; const char *name; /* Do nothing if modules aren't supported. */ if (!g_module_supported()) return; va_start(ap, fmt); (void) vips_vsnprintf(dir_name, VIPS_PATH_MAX - 1, fmt, ap); va_end(ap); g_info("searching \"%s\"", dir_name); /* Do nothing if directory is not present. */ if (!(dir = g_dir_open(dir_name, 0, NULL))) return; while ((name = g_dir_read_name(dir))) { char path[VIPS_PATH_MAX]; GModule *module; vips_snprintf(path, VIPS_PATH_MAX - 1, "%s" G_DIR_SEPARATOR_S "%s", dir_name, name); g_info("loading \"%s\"", path); module = g_module_open(path, G_MODULE_BIND_LAZY); if (module) /* Modules will almost certainly create new * types, so they can't be unloaded. */ g_module_make_resident(module); else g_warning(_("unable to load \"%s\" -- %s"), path, g_module_error()); } g_dir_close(dir); } #endif /*ENABLE_MODULES*/ /* Install this log handler to hide warning messages. */ static void empty_log_handler(const gchar *log_domain, GLogLevelFlags log_level, const gchar *message, gpointer user_data) { } /* Attempt to set a minimum stacksize. This can be important on systems with a * very low default, like musl. */ static void set_stacksize(guint64 size) { #ifdef HAVE_PTHREAD_DEFAULT_NP pthread_attr_t attr; size_t cur_stack_size; /* Don't allow stacks less than 2mb. */ size = VIPS_MAX(size, 2 * 1024 * 1024); if (pthread_attr_init(&attr) || pthread_attr_getstacksize(&attr, &cur_stack_size)) { g_warning("set_stacksize: unable to get stack size"); return; } if (cur_stack_size < size) { if (pthread_attr_setstacksize(&attr, size) || pthread_setattr_default_np(&attr)) g_warning("set_stacksize: unable to set stack size"); else g_info("set stack size to %" G_GUINT64_FORMAT "k", size / (guint64) 1024); } #endif /*HAVE_PTHREAD_DEFAULT_NP*/ } static void vips_verbose(void) { const char *old; old = g_getenv("G_MESSAGES_DEBUG"); if (!old) g_setenv("G_MESSAGES_DEBUG", G_LOG_DOMAIN, TRUE); else if (!g_str_equal(old, "all") && !g_strrstr(old, G_LOG_DOMAIN)) { char *new; new = g_strconcat(old, " ", G_LOG_DOMAIN, NULL); g_setenv("G_MESSAGES_DEBUG", new, TRUE); g_free(new); } } static int vips_leak(void) { char txt[1024]; VipsBuf buf = VIPS_BUF_STATIC(txt); int n_leaks; n_leaks = 0; n_leaks += vips__object_leak(); n_leaks += vips__type_leak(); n_leaks += vips_tracked_get_allocs(); n_leaks += vips_tracked_get_mem(); n_leaks += vips_tracked_get_files(); if (vips_tracked_get_allocs() || vips_tracked_get_mem() || vips_tracked_get_files()) { vips_buf_appendf(&buf, "memory: %d allocations, %zd bytes\n", vips_tracked_get_allocs(), vips_tracked_get_mem()); vips_buf_appendf(&buf, "files: %d open\n", vips_tracked_get_files()); } vips_buf_appendf(&buf, "memory: high-water mark "); vips_buf_append_size(&buf, vips_tracked_get_mem_highwater()); vips_buf_appends(&buf, "\n"); if (strlen(vips_error_buffer()) > 0) { vips_buf_appendf(&buf, "error buffer: %s", vips_error_buffer()); n_leaks += strlen(vips_error_buffer()); } fprintf(stderr, "%s", vips_buf_all(&buf)); n_leaks += vips__print_renders(); #ifdef DEBUG vips_buffer_dump_all(); #endif /*DEBUG*/ return n_leaks; } /** * vips_init: * @argv0: name of application * * This function starts up libvips, see VIPS_INIT(). * * This function is for bindings which need to start up vips. C programs * should use the VIPS_INIT() macro, which does some extra checks. * * See also: VIPS_INIT(). * * Returns: 0 on success, -1 otherwise */ int vips_init(const char *argv0) { extern GType vips_system_get_type(void); extern GType write_thread_state_get_type(void); extern GType sink_memory_thread_state_get_type(void); extern GType render_thread_state_get_type(void); extern GType vips_source_get_type(void); extern GType vips_source_custom_get_type(void); extern GType vips_target_get_type(void); extern GType vips_target_custom_get_type(void); extern GType vips_g_input_stream_get_type(void); static gboolean started = FALSE; static gboolean done = FALSE; const char *vips_min_stack_size; gint64 min_stack_size; const char *prefix; const char *libdir; #ifdef ENABLE_NLS char *locale; #endif /* ENABLE_NLS */ /* Two stage done handling: 'done' means we've completed, 'started' * means we're currently initialising. Use this to prevent recursive * invocation. */ if (done) /* Called more than once, we succeeded, just return OK. */ return 0; if (started) /* Recursive invocation, something has broken horribly. * Hopefully the first init will handle it. */ return 0; started = TRUE; /* Try to set a minimum stacksize, default 2mb. We need to do this * before any threads start. */ min_stack_size = 2 * 1024 * 1024; if ((vips_min_stack_size = g_getenv("VIPS_MIN_STACK_SIZE"))) min_stack_size = vips__parse_size(vips_min_stack_size); (void) set_stacksize(min_stack_size); if (g_getenv("VIPS_INFO") #if ENABLE_DEPRECATED || g_getenv("IM_INFO") #endif ) vips_verbose(); if (g_getenv("VIPS_PROFILE")) vips_profile_set(TRUE); if (g_getenv("VIPS_LEAK")) vips_leak_set(TRUE); if (g_getenv("VIPS_TRACE")) vips_cache_set_trace(TRUE); if (g_getenv("VIPS_PIPE_READ_LIMIT")) vips_pipe_read_limit = g_ascii_strtoll(g_getenv("VIPS_PIPE_READ_LIMIT"), NULL, 10); vips_pipe_read_limit_set(vips_pipe_read_limit); #ifdef G_OS_WIN32 /* Windows has a limit of 512 files open at once for the fopen() family * of functions, and 2048 for the _open() family. This raises the limit * of fopen() to the same level as _open(). * * It will not go any higher than this, unfortunately. */ (void) _setmaxstdio(2048); #endif /*G_OS_WIN32*/ vips__thread_init(); vips__threadpool_init(); vips__buffer_init(); vips__meta_init(); if (!vips__global_lock) vips__global_lock = vips_g_mutex_new(); if (!vips__global_timer) vips__global_timer = g_timer_new(); VIPS_SETSTR(vips__argv0, argv0); vips__prgname = g_path_get_basename(argv0); vips__thread_profile_attach("main"); /* We can't do VIPS_GATE_START() until command-line processing * happens, since vips__thread_profile may not be set yet. Call * directly. */ vips__thread_gate_start("init: main"); vips__thread_gate_start("init: startup"); /* Try to discover our prefix. */ if ((prefix = g_getenv("VIPSHOME"))) g_info("VIPSHOME = %s", prefix); if (!(prefix = vips_guess_prefix(argv0, "VIPSHOME")) || !(libdir = vips_guess_libdir(argv0, "VIPSHOME"))) return -1; g_info("VIPS_PREFIX = %s", VIPS_PREFIX); g_info("VIPS_LIBDIR = %s", VIPS_LIBDIR); g_info("prefix = %s", prefix); g_info("libdir = %s", libdir); /* Get i18n .mo files from $VIPSHOME/share/locale/. */ #ifdef ENABLE_NLS locale = g_build_filename(prefix, "share", "locale", NULL); bindtextdomain(GETTEXT_PACKAGE, locale); g_free(locale); #ifdef HAVE_BIND_TEXTDOMAIN_CODESET bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); #endif /* HAVE_BIND_TEXTDOMAIN_CODESET */ #endif /* ENABLE_NLS */ /* Register base vips types. */ (void) vips_image_get_type(); (void) vips_region_get_type(); (void) write_thread_state_get_type(); (void) sink_memory_thread_state_get_type(); (void) render_thread_state_get_type(); (void) vips_source_get_type(); (void) vips_source_custom_get_type(); (void) vips_target_get_type(); (void) vips_target_custom_get_type(); vips__meta_init_types(); vips__interpolate_init(); #if ENABLE_DEPRECATED im__format_init(); #endif /* Start up operator cache. */ vips__cache_init(); /* Recomp reordering system. */ vips__reorder_init(); /* Start up packages. */ (void) vips_system_get_type(); vips_arithmetic_operation_init(); vips_conversion_operation_init(); vips_create_operation_init(); vips_foreign_operation_init(); vips_resample_operation_init(); vips_colour_operation_init(); vips_histogram_operation_init(); vips_convolution_operation_init(); vips_freqfilt_operation_init(); vips_morphology_operation_init(); vips_draw_operation_init(); vips_mosaicing_operation_init(); vips_g_input_stream_get_type(); #ifdef ENABLE_MODULES /* Load any vips8 modules from the vips libdir. Keep going, even if * some modules fail to load. * * Only do this if we have been built as a set of loadable * modules, or we might try loading an operation into a library that * already has that operation built in. */ vips_load_plugins("%s/vips-modules-%d.%d", libdir, VIPS_MAJOR_VERSION, VIPS_MINOR_VERSION); #if ENABLE_DEPRECATED /* We had vips8 plugins for a while. */ vips_load_plugins("%s/vips-plugins-%d.%d", libdir, VIPS_MAJOR_VERSION, VIPS_MINOR_VERSION); /* Load up any vips7 plugins. We don't error on * failure, it's too annoying to have VIPS refuse to start because of * a broken plugin. */ if (im_load_plugins("%s/vips-%d.%d", libdir, VIPS_MAJOR_VERSION, VIPS_MINOR_VERSION)) { g_warning("%s", vips_error_buffer()); vips_error_clear(); } /* Also load from libdir :-( kept for back compat convenience. */ if (im_load_plugins("%s", libdir)) { g_warning("%s", vips_error_buffer()); vips_error_clear(); } #endif /*ENABLE_DEPRECATED*/ #endif /*ENABLE_MODULES*/ /* Detect SIMD features. */ vips__vector_init(); #ifdef DEBUG_LEAK vips__image_pixels_quark = g_quark_from_static_string("vips-image-pixels"); #endif /*DEBUG_LEAK*/ /* If VIPS_WARNING is defined, suppress all warning messages from vips. * * Libraries should not call g_log_set_handler(), it is * supposed to be for the application layer, but this can be awkward to * set up if you are using libvips from something like Ruby. Allow this * env var hack as a workaround. */ if (g_getenv("VIPS_WARNING") #if ENABLE_DEPRECATED || g_getenv("IM_WARNING") #endif ) g_log_set_handler(G_LOG_DOMAIN, G_LOG_LEVEL_WARNING, empty_log_handler, NULL); /* Block any untrusted operations. This must come after plugin load. */ if (g_getenv("VIPS_BLOCK_UNTRUSTED")) vips_block_untrusted_set(TRUE); done = TRUE; vips__thread_gate_stop("init: startup"); return 0; } /* Call this before vips stuff that uses stuff we need to have inited. */ void vips_check_init(void) { /* Pass in a nonsense name for argv0 ... this init path is only here * for old programs which are missing an vips_init() call. We need * i18n set up before we can translate. */ if (vips_init("vips")) vips_error_clear(); } /** * vips_thread_shutdown: * * Free any thread-private data and flush any profiling information. * * This function needs to be called when a thread that has been using vips * exits. It is called for you by vips_shutdown() and for any threads created * within the #VipsThreadPool. * * You will need to call it from threads created in * other ways or there will be memory leaks. If you do not call it, vips * will generate a warning message. * * It may be called many times, and you can continue using vips after * calling it. Calling it too often will reduce performance. */ void vips_thread_shutdown(void) { vips__thread_profile_detach(); vips__buffer_shutdown(); } /** * vips_shutdown: * * Call this to drop caches, close plugins, terminate background threads, and * finalize any internal library testing. * * vips_shutdown() is optional. If you don't call it, your platform will * clean up for you. The only negative consequences are that the leak checker * and the profiler will not work. * * You may call VIPS_INIT() many times and vips_shutdown() many times, but you * must not call VIPS_INIT() after vips_shutdown(). In other words, you cannot * stop and restart libvips. * * See also: vips_profile_set(), vips_leak_set(). */ void vips_shutdown(void) { #ifdef DEBUG printf("vips_shutdown:\n"); #endif /*DEBUG*/ vips_cache_drop_all(); #if ENABLE_DEPRECATED im_close_plugins(); #endif /* Mustn't run this more than once. Don't use the VIPS_GATE macro, * since we don't for gate start. */ { static gboolean done = FALSE; if (!done) vips__thread_gate_stop("init: main"); } vips__render_shutdown(); vips_thread_shutdown(); vips__thread_profile_stop(); vips__threadpool_shutdown(); /* Don't free vips__global_lock -- we want to be able to use * vips_error_buffer() after vips_shutdown(), since vips_leak() can * call it. */ VIPS_FREE(vips__argv0); VIPS_FREE(vips__prgname); VIPS_FREEF(g_timer_destroy, vips__global_timer); /* In dev releases, always show leaks. But not more than once, it's * annoying. */ #ifndef DEBUG_LEAK if (vips__leak) #endif /*DEBUG_LEAK*/ { static gboolean done = FALSE; if (!done) { done = TRUE; vips_leak(); } } } static gboolean vips_lib_info_cb(const gchar *option_name, const gchar *value, gpointer data, GError **error) { vips_verbose(); return TRUE; } static gboolean vips_set_fatal_cb(const gchar *option_name, const gchar *value, gpointer data, GError **error) { vips__fatal = 1; /* Set masks for debugging ... stop on any problem. */ g_log_set_always_fatal( G_LOG_FLAG_RECURSION | G_LOG_FLAG_FATAL | G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING); return TRUE; } static gboolean vips_lib_version_cb(const gchar *option_name, const gchar *value, gpointer data, GError **error) { printf("libvips %s\n", VIPS_VERSION_STRING); vips_shutdown(); exit(0); } static gboolean vips_lib_config_cb(const gchar *option_name, const gchar *value, gpointer data, GError **error) { printf("%s\n", VIPS_CONFIG); vips_shutdown(); exit(0); } static gboolean vips_cache_max_cb(const gchar *option_name, const gchar *value, gpointer data, GError **error) { vips_cache_set_max(vips__parse_size(value)); return TRUE; } static gboolean vips_cache_max_memory_cb(const gchar *option_name, const gchar *value, gpointer data, GError **error) { vips_cache_set_max_mem(vips__parse_size(value)); return TRUE; } static gboolean vips_cache_max_files_cb(const gchar *option_name, const gchar *value, gpointer data, GError **error) { vips_cache_set_max_files(vips__parse_size(value)); return TRUE; } static GOptionEntry option_entries[] = { { "vips-info", 0, G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &vips_lib_info_cb, N_("show informative messages"), NULL }, { "vips-fatal", 0, G_OPTION_FLAG_HIDDEN | G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &vips_set_fatal_cb, N_("abort on first error or warning"), NULL }, { "vips-concurrency", 0, 0, G_OPTION_ARG_INT, &vips__concurrency, N_("evaluate with N concurrent threads"), "N" }, { "vips-tile-width", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_INT, &vips__tile_width, N_("set tile width to N (DEBUG)"), "N" }, { "vips-tile-height", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_INT, &vips__tile_height, N_("set tile height to N (DEBUG)"), "N" }, { "vips-thinstrip-height", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_INT, &vips__thinstrip_height, N_("set thinstrip height to N (DEBUG)"), "N" }, { "vips-fatstrip-height", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_INT, &vips__fatstrip_height, N_("set fatstrip height to N (DEBUG)"), "N" }, { "vips-progress", 0, 0, G_OPTION_ARG_NONE, &vips__progress, N_("show progress feedback"), NULL }, { "vips-leak", 0, 0, G_OPTION_ARG_NONE, &vips__leak, N_("leak-check on exit"), NULL }, { "vips-profile", 0, 0, G_OPTION_ARG_NONE, &vips__thread_profile, N_("profile and dump timing on exit"), NULL }, { "vips-disc-threshold", 0, 0, G_OPTION_ARG_STRING, &vips__disc_threshold, N_("images larger than N are decompressed to disc"), "N" }, { "vips-novector", 0, G_OPTION_FLAG_REVERSE, G_OPTION_ARG_NONE, &vips__vector_enabled, N_("disable vectorised versions of operations"), NULL }, { "vips-cache-max", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &vips_cache_max_cb, N_("cache at most N operations"), "N" }, { "vips-cache-max-memory", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &vips_cache_max_memory_cb, N_("cache at most N bytes in memory"), "N" }, { "vips-cache-max-files", 0, 0, G_OPTION_ARG_CALLBACK, (gpointer) &vips_cache_max_files_cb, N_("allow at most N open files"), "N" }, { "vips-cache-trace", 0, 0, G_OPTION_ARG_NONE, &vips__cache_trace, N_("trace operation cache"), NULL }, { "vips-cache-dump", 0, 0, G_OPTION_ARG_NONE, &vips__cache_dump, N_("dump operation cache on exit"), NULL }, { "vips-version", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &vips_lib_version_cb, N_("print libvips version"), NULL }, { "vips-config", 0, G_OPTION_FLAG_NO_ARG, G_OPTION_ARG_CALLBACK, (gpointer) &vips_lib_config_cb, N_("print libvips config"), NULL }, { "vips-pipe-read-limit", 0, 0, G_OPTION_ARG_INT64, (gpointer) &vips_pipe_read_limit, N_("read at most this many bytes from a pipe"), NULL }, { NULL } }; /** * vips_add_option_entries: * @option_group: group to add to * * Add the standard vips %GOptionEntry to a %GOptionGroup. * * See also: g_option_group_new(). */ void vips_add_option_entries(GOptionGroup *option_group) { g_option_group_add_entries(option_group, option_entries); } /* Find the prefix part of a dir ... name is the name of this prog from argv0. * * dir name guess prefix * * /home/john/vips-7.6.4/bin/vips-7.6 vips-7.6 /home/john/vips-7.6.4 * /usr/local/bin/ip ip /usr/local * * all other forms ... return NULL. */ static char * extract_prefix(const char *dir, const char *name) { char edir[VIPS_PATH_MAX]; static char vname[VIPS_PATH_MAX]; int i; g_info("trying for dir = \"%s\", name = \"%s\"", dir, name); /* Is dir relative? Prefix with cwd. */ if (!g_path_is_absolute(dir)) { char *cwd; cwd = g_get_current_dir(); vips_snprintf(edir, VIPS_PATH_MAX, "%s" G_DIR_SEPARATOR_S "%s", cwd, dir); g_free(cwd); } else { vips_strncpy(edir, dir, VIPS_PATH_MAX); } /* Chop off the trailing prog name, plus the trailing * G_DIR_SEPARATOR_S. */ if (!vips_ispostfix(edir, name)) return NULL; vips_strncpy(vname, edir, VIPS_PATH_MAX); vname[strlen(edir) - strlen(name) - 1] = '\0'; /* Remove any "/./", any trailing "/.", any trailing "/". */ for (i = 0; i < (int) strlen(vname); i++) if (vips_isprefix(G_DIR_SEPARATOR_S "." G_DIR_SEPARATOR_S, vname + i)) memmove(vname + i, vname + i + 2, strlen(vname + i + 2) + 1); if (vips_ispostfix(vname, G_DIR_SEPARATOR_S ".")) vname[strlen(vname) - 2] = '\0'; if (vips_ispostfix(vname, G_DIR_SEPARATOR_S)) vname[strlen(vname) - 1] = '\0'; g_info("canonicalised path = \"%s\"", vname); /* Ought to be a "/bin" at the end now. */ if (!vips_ispostfix(vname, G_DIR_SEPARATOR_S "bin")) return NULL; vname[strlen(vname) - strlen(G_DIR_SEPARATOR_S "bin")] = '\0'; g_info("found \"%s\"", vname); return vname; } /* Search a path for a file ... we overwrite the PATH string passed in. */ static char * scan_path(char *path, const char *name) { char *p, *q; char *prefix; for (p = path; (q = vips_break_token(p, G_SEARCHPATH_SEPARATOR_S)); p = q) { char str[VIPS_PATH_MAX]; /* Form complete path. */ vips_snprintf(str, VIPS_PATH_MAX, "%s" G_DIR_SEPARATOR_S "%s", p, name); g_info("looking in \"%s\" for \"%s\"", p, name); if (vips_existsf("%s", str) && (prefix = extract_prefix(str, name))) { return prefix; } } return NULL; } /* Look for a file along PATH. If we find it, look for an enclosing prefix. */ static char * find_file(const char *name) { const char *path = g_getenv("PATH"); char *prefix; char full_path[VIPS_PATH_MAX]; if (!path) return NULL; g_info("g_getenv(\"PATH\") == \"%s\"", path); #ifdef G_OS_WIN32 { char *dir; /* Windows always searches '.' first, so prepend cwd to path. */ dir = g_get_current_dir(); vips_snprintf(full_path, VIPS_PATH_MAX, "%s" G_SEARCHPATH_SEPARATOR_S "%s", dir, path); g_free(dir); } #else /*!G_OS_WIN32*/ vips_strncpy(full_path, path, VIPS_PATH_MAX); #endif /*G_OS_WIN32*/ if ((prefix = scan_path(full_path, name))) return prefix; return NULL; } /* Guess a value for the install PREFIX. */ static const char * guess_prefix(const char *argv0, const char *name) { char *prefix; /* We've already checked for VIPSHOME. If the configure-time * library prefix looks OK, use the configure-time prefix. */ if (vips_existsf("%s/vips-modules-%d.%d", VIPS_LIBDIR, VIPS_MAJOR_VERSION, VIPS_MINOR_VERSION)) { g_info("found %s/vips-modules-%d.%d", VIPS_LIBDIR, VIPS_MAJOR_VERSION, VIPS_MINOR_VERSION); g_info("using configure-time prefix"); return VIPS_PREFIX; } /* Try to guess from argv0. */ if (argv0) { if (g_path_is_absolute(argv0)) { /* Must point to our executable. */ if ((prefix = extract_prefix(argv0, name))) { g_info("found \"%s\" from argv0", prefix); return prefix; } } /* Look along path for name. */ if ((prefix = find_file(name))) { g_info("found \"%s\" from PATH", prefix); return prefix; } } /* Try to guess from cwd. Only if this is a relative path, though. */ if (argv0 && !g_path_is_absolute(argv0)) { char *dir; char full_path[VIPS_PATH_MAX]; char *resolved; dir = g_get_current_dir(); vips_snprintf(full_path, VIPS_PATH_MAX, "%s" G_DIR_SEPARATOR_S "%s", dir, argv0); g_free(dir); if ((resolved = vips_realpath(full_path))) { prefix = extract_prefix(resolved, name); g_free(resolved); if (prefix) { g_info("found \"%s\" from cwd", prefix); return prefix; } } } /* Fall back to the configure-time prefix. */ return VIPS_PREFIX; } /** * vips_guess_prefix: * @argv0: program name (typically argv[0]) * @env_name: save prefix in this environment variable * * vips_guess_prefix() tries to guess the install directory. You should pass * in the value of argv[0] (the name your program was run as) as a clue to * help it out, plus the name of the environment variable you let the user * override your package install area with (eg. "VIPSHOME"). * * On success, vips_guess_prefix() returns the prefix it discovered, and as a * side effect, sets the environment variable (if it's not set). * * Don't free the return string! * * See also: vips_guess_libdir(). * * Returns: (transfer none): the install prefix as a static string, do not free. */ const char * vips_guess_prefix(const char *argv0, const char *env_name) { const char *prefix; /* Already set? */ if ((prefix = g_getenv(env_name))) return prefix; #ifdef G_OS_WIN32 prefix = vips__windows_prefix(); #else /*!G_OS_WIN32*/ { char *basename; basename = g_path_get_basename(argv0); prefix = guess_prefix(argv0, basename); g_free(basename); } #endif /*G_OS_WIN32*/ g_setenv(env_name, prefix, TRUE); return prefix; } /** * vips_guess_libdir: * @argv0: program name (typically argv[0]) * @env_name: save prefix in this environment variable * * vips_guess_libdir() tries to guess the install directory (usually the * configure libdir, or $prefix/lib). You should pass * in the value of argv[0] (the name your program was run as) as a clue to * help it out, plus the name of the environment variable you let the user * override your package install area with (eg. "VIPSHOME"). * * On success, vips_guess_libdir() returns the libdir it discovered, and as a * side effect, sets the prefix environment variable (if it's not set). * * Don't free the return string! * * See also: vips_guess_prefix(). * * Returns: (transfer none): the libdir as a static string, do not free. */ const char * vips_guess_libdir(const char *argv0, const char *env_name) { const char *prefix = vips_guess_prefix(argv0, env_name); static char *libdir = NULL; char *suffix; if (libdir) return libdir; /* Have we been moved since configure? If not, use the configure-time * libdir. * * The lib directory name can be eg. "lib", "lib64" etc. depending on * the platform, so copy that from the configure-time libdir if we can. * The configure-time LIBDIR is generated by autotools and always uses * '/', even on Windows. */ if (strcmp(prefix, VIPS_PREFIX) == 0) libdir = VIPS_LIBDIR; else if ((suffix = strrchr(VIPS_LIBDIR, '/'))) libdir = g_strdup_printf("%s%s", prefix, suffix); else libdir = g_strdup_printf("%s/lib", prefix); return libdir; } /** * vips_version_string: * * Get the VIPS version as a static string, including a build date and time. * Do not free. * * Returns: (transfer none): a static version string */ const char * vips_version_string(void) { return VIPS_VERSION_STRING; } /** * vips_version: * @flag: which field of the version to get * * Get the major, minor or micro library version, with @flag values 0, 1 and * 2. * * Get the ABI current, revision and age (as used by Meson) with @flag * values 3, 4, 5. * * Returns: library version number */ int vips_version(int flag) { switch (flag) { case 0: return VIPS_MAJOR_VERSION; case 1: return VIPS_MINOR_VERSION; case 2: return VIPS_MICRO_VERSION; case 3: return VIPS_LIBRARY_CURRENT; case 4: return VIPS_LIBRARY_REVISION; case 5: return VIPS_LIBRARY_AGE; default: vips_error("vips_version", "%s", _("flag not in [0, 5]")); return -1; } } /** * vips_leak_set: * @leak: turn leak checking on or off * * Turn on or off vips leak checking. See also --vips-leak, * vips_add_option_entries() and the `VIPS_LEAK` environment variable. * * You should call this very early in your program. */ void vips_leak_set(gboolean leak) { vips__leak = leak; } static void * vips_block_untrusted_set_operation(VipsOperationClass *class, gboolean *state) { g_assert(VIPS_IS_OPERATION_CLASS(class)); if (class->flags & VIPS_OPERATION_UNTRUSTED) vips_operation_block_set(G_OBJECT_CLASS_NAME(class), *state); return NULL; } /** * vips_block_untrusted_set: * @state: the block state to set * * Set the block state on all untrusted operations. * * |[ * vips_block_untrusted_set(TRUE); * ]| * * Will block all untrusted operations from running. * * Use `vips -l` at the command-line to see the class hierarchy and which * operations are marked as untrusted. * * Set the environment variable `VIPS_BLOCK_UNTRUSTED` to block all untrusted * operations on vips_init(). */ void vips_block_untrusted_set(gboolean state) { vips_class_map_all(g_type_from_name("VipsOperation"), (VipsClassMapFn) vips_block_untrusted_set_operation, &state); } libvips-8.15.1/libvips/iofuncs/mapfile.c000066400000000000000000000217221454007373500201710ustar00rootroot00000000000000/* map and unmap files in various ways * * Copyright: Nicos Dessipris * Wriiten on: 13/02/1990 * Updated on: * 10/5/93 J.Cupitt * - im_mapfilerw() added * 13/12/94 JC * - ANSIfied * 5/7/99 JC * - better error if unable to map rw * 31/3/02 JC * - better mmap() fails error * 19/9/02 JC * - added im__mmap()/im__munmap() with windows versions * 5/1/04 Lev Serebryakov * - patched for freebsd compatibility * 5/2/04 JC * - now records length as well as base, so we unmap the right amount of * memory even if files change behind our back * 1/1/10 * - set NOCACHE if we can ... helps OS X performance a lot * 25/3/11 * - move to vips_ namespace */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #ifdef HAVE_SYS_MMAN_H #include #endif /*HAVE_SYS_MMAN_H*/ #ifdef HAVE_SYS_FILE_H #include #endif /*HAVE_SYS_FILE_H*/ #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #include #include #ifdef G_OS_WIN32 #ifndef S_ISREG #define S_ISREG(m) (!!(m & _S_IFREG)) #endif #include #include #endif /*G_OS_WIN32*/ #ifdef _MSC_VER #define mode_t guint16 #endif /* Does this fd support mmap. Pipes won't, for example. * FIXME unused internal function */ gboolean vips__mmap_supported(int fd) { void *baseaddr; size_t length = 4096; off_t offset = 0; #ifdef G_OS_WIN32 { HANDLE hFile = (HANDLE) _get_osfhandle(fd); DWORD flProtect; HANDLE hMMFile; DWORD dwDesiredAccess; ULARGE_INTEGER quad; DWORD dwFileOffsetHigh; DWORD dwFileOffsetLow; flProtect = PAGE_READONLY; if (!(hMMFile = CreateFileMapping(hFile, NULL, flProtect, 0, 0, NULL))) return FALSE; dwDesiredAccess = FILE_MAP_READ; quad.QuadPart = offset; dwFileOffsetLow = quad.LowPart; dwFileOffsetHigh = quad.HighPart; if (!(baseaddr = (char *) MapViewOfFile(hMMFile, dwDesiredAccess, dwFileOffsetHigh, dwFileOffsetLow, length))) { CloseHandle(hMMFile); return FALSE; } CloseHandle(hMMFile); UnmapViewOfFile(baseaddr); } #else /*!G_OS_WIN32*/ { int prot = PROT_READ; int flags = MAP_SHARED; baseaddr = mmap(0, length, prot, flags, fd, (off_t) offset); if (baseaddr == MAP_FAILED) return FALSE; munmap(baseaddr, length); } #endif /*G_OS_WIN32*/ return TRUE; } void * vips__mmap(int fd, int writeable, size_t length, gint64 offset) { void *baseaddr; #ifdef DEBUG printf("vips__mmap: length = 0x%zx, offset = 0x%lx\n", length, offset); #endif /*DEBUG*/ #ifdef G_OS_WIN32 { HANDLE hFile = (HANDLE) _get_osfhandle(fd); DWORD flProtect; DWORD dwDesiredAccess; HANDLE hMMFile; ULARGE_INTEGER quad; DWORD dwFileOffsetHigh; DWORD dwFileOffsetLow; if (writeable) { flProtect = PAGE_READWRITE; dwDesiredAccess = FILE_MAP_WRITE; } else { flProtect = PAGE_READONLY; dwDesiredAccess = FILE_MAP_READ; } quad.QuadPart = offset; dwFileOffsetLow = quad.LowPart; dwFileOffsetHigh = quad.HighPart; if (!(hMMFile = CreateFileMapping(hFile, NULL, flProtect, 0, 0, NULL))) { vips_error_system(GetLastError(), "vips_mapfile", "%s", _("unable to CreateFileMapping")); printf("CreateFileMapping failed: %s\n", vips_error_buffer()); return NULL; } if (!(baseaddr = (char *) MapViewOfFile(hMMFile, dwDesiredAccess, dwFileOffsetHigh, dwFileOffsetLow, length))) { vips_error_system(GetLastError(), "vips_mapfile", "%s", _("unable to MapViewOfFile")); printf("MapViewOfFile failed: %s\n", vips_error_buffer()); CloseHandle(hMMFile); return NULL; } /* Can close mapping now ... view stays until UnmapViewOfFile(). FIXME ... is this a performance problem? */ CloseHandle(hMMFile); } #else /*!G_OS_WIN32*/ { int prot; int flags; if (writeable) prot = PROT_WRITE; else prot = PROT_READ; flags = MAP_SHARED; /* OS X caches mmapped files very aggressively if this flags is not * set. Scanning a large file without this flag will cause every other * process to get swapped out and kill performance. */ #ifdef MAP_NOCACHE flags |= MAP_NOCACHE; #endif /*MAP_NOCACHE*/ /* Casting gint64 to off_t should be safe, even on *nixes without * LARGEFILE. */ baseaddr = mmap(0, length, prot, flags, fd, (off_t) offset); if (baseaddr == MAP_FAILED) { vips_error_system(errno, "vips_mapfile", "%s", _("unable to mmap")); g_warning(_("map failed (%s), " "running very low on system resources, " "expect a crash soon"), strerror(errno)); return NULL; } } #endif /*G_OS_WIN32*/ return baseaddr; } int vips__munmap(const void *start, size_t length) { #ifdef G_OS_WIN32 if (!UnmapViewOfFile((void *) start)) { vips_error_system(GetLastError(), "vips_mapfile", "%s", _("unable to UnmapViewOfFile")); return -1; } #else /*!G_OS_WIN32*/ if (munmap((void *) start, length) < 0) { vips_error_system(errno, "vips_mapfile", "%s", _("unable to munmap file")); return -1; } #endif /*G_OS_WIN32*/ return 0; } int vips_mapfile(VipsImage *im) { struct stat st; mode_t m; assert(!im->baseaddr); /* Check the size of the file; if it is less than 64 bytes, then flag * an error, we won't be able to read the vips header without a segv. */ g_assert(im->file_length > 0); if (im->file_length < 64) { vips_error("vips_mapfile", "%s", _("file is less than 64 bytes")); return -1; } if (fstat(im->fd, &st) == -1) { vips_error("vips_mapfile", "%s", _("unable to get file status")); return -1; } m = (mode_t) st.st_mode; if (!S_ISREG(m)) { vips_error("vips_mapfile", "%s", _("not a regular file")); return -1; } if (!(im->baseaddr = vips__mmap(im->fd, 0, im->file_length, 0))) return -1; im->length = im->file_length; return 0; } /* As above, but map read/write. */ int vips_mapfilerw(VipsImage *im) { struct stat st; mode_t m; assert(!im->baseaddr); /* Check the size of the file if it is less than 64 bytes return * make also sure that it is a regular file */ g_assert(im->file_length > 0); if (fstat(im->fd, &st) == -1) { vips_error("vips_mapfilerw", "%s", _("unable to get file status")); return -1; } m = (mode_t) st.st_mode; if (im->file_length < 64 || !S_ISREG(m)) { vips_error("vips_mapfile", "%s", _("unable to read data")); return -1; } if (!(im->baseaddr = vips__mmap(im->fd, 1, im->file_length, 0))) return -1; im->length = im->file_length; return 0; } /* From im_rwcheck() ... image needs to be a completely mapped read-only file, * we try to remap it read-write. */ int vips_remapfilerw(VipsImage *image) { void *baseaddr; #ifdef DEBUG printf("vips_remapfilerw:\n"); #endif /*DEBUG*/ #ifdef G_OS_WIN32 { HANDLE hFile = (HANDLE) _get_osfhandle(image->fd); HANDLE hMMFile; if (!(hMMFile = CreateFileMapping(hFile, NULL, PAGE_READWRITE, 0, 0, NULL))) { vips_error_system(GetLastError(), "vips_mapfile", "%s", _("unable to CreateFileMapping")); return -1; } if (!UnmapViewOfFile(image->baseaddr)) { vips_error_system(GetLastError(), "vips_mapfile", "%s", _("unable to UnmapViewOfFile")); return -1; } if (!(baseaddr = (char *) MapViewOfFileEx(hMMFile, FILE_MAP_WRITE, 0, 0, 0, image->baseaddr))) { vips_error_system(GetLastError(), "vips_mapfile", "%s", _("unable to MapViewOfFile")); CloseHandle(hMMFile); return -1; } /* Can close mapping now ... view stays until UnmapViewOfFile(). FIXME ... is this a performance problem? */ CloseHandle(hMMFile); } #else /*!G_OS_WIN32*/ { assert(image->dtype == VIPS_IMAGE_MMAPIN); baseaddr = mmap(image->baseaddr, image->length, PROT_READ | PROT_WRITE, MAP_SHARED | MAP_FIXED, image->fd, 0); if (baseaddr == (void *) -1) { vips_error("vips_mapfile", _("unable to mmap: \"%s\" - %s"), image->filename, strerror(errno)); return -1; } } #endif /*G_OS_WIN32*/ image->dtype = VIPS_IMAGE_MMAPINRW; if (baseaddr != image->baseaddr) { vips_error("vips_mapfile", _("unable to mmap \"%s\" to same address"), image->filename); image->baseaddr = baseaddr; return -1; } return 0; } libvips-8.15.1/libvips/iofuncs/memory.c000066400000000000000000000340541454007373500200660ustar00rootroot00000000000000/* tracked memory * * 2/11/99 JC * - from im_open.c and callback.c * - malloc tracking stuff added * 11/3/01 JC * - im_strncpy() added * 20/4/01 JC * - im_(v)snprintf() added * 6/7/05 * - more tracking for DEBUGM * 20/10/06 * - return NULL for size <= 0 * 11/5/06 * - abort() on malloc() failure with DEBUG * 20/10/09 * - gtkdoc comment * 6/11/09 * - im_malloc()/im_free() now call g_try_malloc()/g_free() ... removes * confusion over whether to use im_free() or g_free() for things like * im_header_string() * 21/9/11 * - rename as vips_tracked_malloc() to emphasise difference from * g_malloc()/g_free() */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif #ifdef HAVE_IO_H #include #endif /*HAVE_IO_H*/ #include #include #include #include #if defined(HAVE__ALIGNED_MALLOC) || defined(HAVE_MEMALIGN) #include #endif #include #include /** * SECTION: memory * @short_description: memory utilities * @stability: Stable * @include: vips/vips.h * * These functions cover two main areas. * * First, some simple utility functions over the underlying * g_malloc()/g_free() functions. Memory allocated and freeded using these * functions is interchangeable with any other glib library. * * Second, a pair of functions, vips_tracked_malloc() and vips_tracked_free(), * which are NOT compatible. If you g_free() memory that has been allocated * with vips_tracked_malloc() you will see crashes. * * The tracked functions are * only suitable for large allocations internal to the library, for example * pixel buffers. libvips watches the total amount of live tracked memory and * uses this information to decide when to trim caches. */ /* g_assert_not_reached() on memory errors. #define DEBUG */ /* Track malloc/free and open/close. #define DEBUG_VERBOSE_MEM #define DEBUG_VERBOSE_FD */ #ifdef DEBUG #warning DEBUG on in libsrc/iofuncs/memory.c #endif /*DEBUG*/ static int vips_tracked_allocs = 0; static size_t vips_tracked_mem = 0; static int vips_tracked_files = 0; static size_t vips_tracked_mem_highwater = 0; static GMutex *vips_tracked_mutex = NULL; /** * VIPS_NEW: * @OBJ: allocate memory local to @OBJ, or %NULL for no auto-free * @T: type of thing to allocate * * Allocate memory for a thing of type @T. The memory is not * cleared. * * This macro cannot fail. See vips_tracked_malloc() if you are * allocating large amounts of memory. * * See also: vips_malloc(). * * Returns: A pointer of type @T *. */ /** * VIPS_ARRAY: * @OBJ: allocate memory local to @OBJ, or %NULL for no auto-free * @N: number of @T 's to allocate * @T: type of thing to allocate * * Allocate memory for an array of objects of type @T. The memory is not * cleared. * * This macro cannot fail. See vips_tracked_malloc() if you are * allocating large amounts of memory. * * See also: vips_malloc(). * * Returns: A pointer of type @T *. */ static void vips_malloc_cb(VipsObject *object, char *buf) { g_free(buf); } /** * vips_malloc: * @object: (nullable): allocate memory local to this #VipsObject, or %NULL * @size: number of bytes to allocate * * g_malloc() local to @object, that is, the memory will be automatically * freed for you when the object is closed. If @object is %NULL, you need to * free the memory explicitly with g_free(). * * This function cannot fail. See vips_tracked_malloc() if you are * allocating large amounts of memory. * * See also: vips_tracked_malloc(). * * Returns: (transfer full): a pointer to the allocated memory. */ void * vips_malloc(VipsObject *object, size_t size) { void *buf; buf = g_malloc0(size); if (object) { g_signal_connect(object, "postclose", G_CALLBACK(vips_malloc_cb), buf); object->local_memory += size; } return buf; } /** * vips_strdup: * @object: (nullable): allocate memory local to this #VipsObject, or %NULL * @str: string to copy * * g_strdup() a string. When @object is freed, the string will be freed for * you. If @object is %NULL, you need to * free the memory yourself with g_free(). * * This function cannot fail. * * See also: vips_malloc(). * * Returns: (transfer full): a pointer to the allocated memory */ char * vips_strdup(VipsObject *object, const char *str) { char *str_dup; str_dup = g_strdup(str); if (object) { g_signal_connect(object, "postclose", G_CALLBACK(vips_malloc_cb), str_dup); object->local_memory += strlen(str); } return str_dup; } /** * vips_tracked_free: * @s: (transfer full): memory to free * * Only use it to free memory that was * previously allocated with vips_tracked_malloc() * with a %NULL first argument. * * See also: vips_tracked_malloc(). */ void vips_tracked_free(void *s) { /* Keep the size of the alloc in the previous 16 bytes. Ensures * alignment rules are kept. */ void *start = (void *) ((char *) s - 16); size_t size = *((size_t *) start); g_mutex_lock(vips_tracked_mutex); #ifdef DEBUG_VERBOSE_MEM printf("vips_tracked_free: %p, %zd bytes\n", s, size); #endif /*DEBUG_VERBOSE_MEM*/ if (vips_tracked_allocs <= 0) g_warning("%s", _("vips_free: too many frees")); if (vips_tracked_mem < size) g_warning("%s", _("vips_free: too much free")); vips_tracked_mem -= size; vips_tracked_allocs -= 1; g_mutex_unlock(vips_tracked_mutex); g_free(start); VIPS_GATE_FREE(size); } /** * vips_tracked_aligned_free: * @s: (transfer full): memory to free * * Only use it to free memory that was * previously allocated with vips_tracked_aligned_alloc() * with a %NULL first argument. * * See also: vips_tracked_aligned_alloc(). */ void vips_tracked_aligned_free(void *s) { void *start = (size_t *) s - 1; size_t size = *((size_t *) start); g_mutex_lock(vips_tracked_mutex); #ifdef DEBUG_VERBOSE printf("vips_tracked_aligned_free: %p, %zd bytes\n", s, size); #endif /*DEBUG_VERBOSE*/ if (vips_tracked_allocs <= 0) g_warning("%s", _("vips_free: too many frees")); if (vips_tracked_mem < size) g_warning("%s", _("vips_free: too much free")); vips_tracked_mem -= size; vips_tracked_allocs -= 1; g_mutex_unlock(vips_tracked_mutex); #ifdef HAVE__ALIGNED_MALLOC _aligned_free(start); #else /*defined(HAVE_POSIX_MEMALIGN) || defined(HAVE_MEMALIGN)*/ free(start); #endif VIPS_GATE_FREE(size); } static void * vips_tracked_init_mutex(void *data) { vips_tracked_mutex = vips_g_mutex_new(); return NULL; } static void vips_tracked_init(void) { static GOnce vips_tracked_once = G_ONCE_INIT; VIPS_ONCE(&vips_tracked_once, vips_tracked_init_mutex, NULL); } /** * vips_tracked_malloc: * @size: number of bytes to allocate * * Allocate an area of memory that will be tracked by vips_tracked_get_mem() * and friends. * * If allocation fails, vips_tracked_malloc() returns %NULL and * sets an error message. * * You must only free the memory returned with vips_tracked_free(). * * See also: vips_tracked_free(), vips_malloc(). * * Returns: (transfer full): a pointer to the allocated memory, or %NULL on error. */ void * vips_tracked_malloc(size_t size) { void *buf; vips_tracked_init(); /* Need an extra sizeof(size_t) bytes to track * size of this block. Ask for an extra 16 to make sure we don't break * alignment rules. */ size += 16; if (!(buf = g_try_malloc0(size))) { #ifdef DEBUG g_assert_not_reached(); #endif /*DEBUG*/ vips_error("vips_tracked", _("out of memory --- size == %dMB"), (int) (size / (1024.0 * 1024.0))); g_warning(_("out of memory --- size == %dMB"), (int) (size / (1024.0 * 1024.0))); return NULL; } g_mutex_lock(vips_tracked_mutex); *((size_t *) buf) = size; buf = (void *) ((char *) buf + 16); vips_tracked_mem += size; if (vips_tracked_mem > vips_tracked_mem_highwater) vips_tracked_mem_highwater = vips_tracked_mem; vips_tracked_allocs += 1; #ifdef DEBUG_VERBOSE_MEM printf("vips_tracked_malloc: %p, %zd bytes\n", buf, size); #endif /*DEBUG_VERBOSE_MEM*/ g_mutex_unlock(vips_tracked_mutex); VIPS_GATE_MALLOC(size); return buf; } /** * vips_tracked_aligned_alloc: * @size: number of bytes to allocate * @align: specifies the alignment * * Allocate an area of memory aligned on a boundary specified * by @align that will be tracked by vips_tracked_get_mem() * and friends. * * If allocation fails, vips_tracked_aligned_alloc() returns %NULL * and sets an error message. * * You must only free the memory returned with vips_tracked_aligned_free(). * * See also: vips_tracked_malloc(), vips_tracked_aligned_free(), vips_malloc(). * * Returns: (transfer full): a pointer to the allocated memory, or %NULL on error. */ void * vips_tracked_aligned_alloc(size_t size, size_t align) { void *buf; vips_tracked_init(); g_assert(!(align & (align - 1))); /* Need an extra sizeof(size_t) bytes to track * size of this block. */ size += sizeof(size_t); #ifdef HAVE__ALIGNED_MALLOC if (!(buf = _aligned_malloc(size, align))) { #elif defined(HAVE_POSIX_MEMALIGN) if (posix_memalign(&buf, align, size)) { #elif defined(HAVE_MEMALIGN) if (!(buf = memalign(align, size))) { #else #error Missing aligned alloc implementation #endif #ifdef DEBUG g_assert_not_reached(); #endif /*DEBUG*/ vips_error("vips_tracked", _("out of memory --- size == %dMB"), (int) (size / (1024.0 * 1024.0))); g_warning(_("out of memory --- size == %dMB"), (int) (size / (1024.0 * 1024.0))); return NULL; } memset(buf, 0, size); g_mutex_lock(vips_tracked_mutex); *((size_t *) buf) = size; vips_tracked_mem += size; if (vips_tracked_mem > vips_tracked_mem_highwater) vips_tracked_mem_highwater = vips_tracked_mem; vips_tracked_allocs += 1; #ifdef DEBUG_VERBOSE printf("vips_tracked_aligned_alloc: %p, %zd bytes\n", buf, size); #endif /*DEBUG_VERBOSE*/ g_mutex_unlock(vips_tracked_mutex); VIPS_GATE_MALLOC(size); return (void *) ((size_t *) buf + 1); } /** * vips_tracked_open: * @pathname: name of file to open * @flags: flags for open() * @mode: open mode * * Exactly as open(2), but the number of files currently open via * vips_tracked_open() is available via vips_tracked_get_files(). This is used * by the vips operation cache to drop cache when the number of files * available is low. * * You must only close the file descriptor with vips_tracked_close(). * * @pathname should be utf8. * * See also: vips_tracked_close(), vips_tracked_get_files(). * * Returns: a file descriptor, or -1 on error. */ int vips_tracked_open(const char *pathname, int flags, int mode) { int fd; if ((fd = vips__open(pathname, flags, mode)) == -1) return -1; vips_tracked_init(); g_mutex_lock(vips_tracked_mutex); vips_tracked_files += 1; #ifdef DEBUG_VERBOSE_FD printf("vips_tracked_open: %s = %d (%d)\n", pathname, fd, vips_tracked_files); #endif /*DEBUG_VERBOSE_FD*/ g_mutex_unlock(vips_tracked_mutex); return fd; } /** * vips_tracked_close: * @fd: file to close() * * Exactly as close(2), but update the number of files currently open via * vips_tracked_get_files(). This is used * by the vips operation cache to drop cache when the number of files * available is low. * * You must only close file descriptors opened with vips_tracked_open(). * * See also: vips_tracked_open(), vips_tracked_get_files(). * * Returns: a file descriptor, or -1 on error. */ int vips_tracked_close(int fd) { int result; g_mutex_lock(vips_tracked_mutex); /* libvips uses fd -1 to mean invalid descriptor. */ g_assert(fd != -1); g_assert(vips_tracked_files > 0); vips_tracked_files -= 1; #ifdef DEBUG_VERBOSE_FD printf("vips_tracked_close: %d (%d)\n", fd, vips_tracked_files); printf(" from thread %p\n", g_thread_self()); #endif /*DEBUG_VERBOSE_FD*/ g_mutex_unlock(vips_tracked_mutex); result = close(fd); return result; } /** * vips_tracked_get_mem: * * Returns the number of bytes currently allocated via vips_malloc() and * friends. vips uses this figure to decide when to start dropping cache, see * #VipsOperation. * * Returns: the number of currently allocated bytes */ size_t vips_tracked_get_mem(void) { size_t mem; vips_tracked_init(); g_mutex_lock(vips_tracked_mutex); mem = vips_tracked_mem; g_mutex_unlock(vips_tracked_mutex); return mem; } /** * vips_tracked_get_mem_highwater: * * Returns the largest number of bytes simultaneously allocated via * vips_tracked_malloc(). Handy for estimating max memory requirements for a * program. * * Returns: the largest number of currently allocated bytes */ size_t vips_tracked_get_mem_highwater(void) { size_t mx; vips_tracked_init(); g_mutex_lock(vips_tracked_mutex); mx = vips_tracked_mem_highwater; g_mutex_unlock(vips_tracked_mutex); return mx; } /** * vips_tracked_get_allocs: * * Returns the number of active allocations. * * Returns: the number of active allocations */ int vips_tracked_get_allocs(void) { int n; vips_tracked_init(); g_mutex_lock(vips_tracked_mutex); n = vips_tracked_allocs; g_mutex_unlock(vips_tracked_mutex); return n; } /** * vips_tracked_get_files: * * Returns the number of open files. * * Returns: the number of open files */ int vips_tracked_get_files(void) { int n; vips_tracked_init(); g_mutex_lock(vips_tracked_mutex); n = vips_tracked_files; g_mutex_unlock(vips_tracked_mutex); return n; } libvips-8.15.1/libvips/iofuncs/meson.build000066400000000000000000000020631454007373500205470ustar00rootroot00000000000000iofuncs_sources = files( 'thread.c', 'threadset.c', 'threadpool.c', 'ginputsource.c', 'sourceginput.c', 'connection.c', 'source.c', 'sourcecustom.c', 'target.c', 'targetcustom.c', 'sbuf.c', 'dbuf.c', 'reorder.c', 'type.c', 'gate.c', 'object.c', 'error.c', 'image.c', 'vips.c', 'generate.c', 'mapfile.c', 'cache.c', 'sink.c', 'sinkmemory.c', 'sinkdisc.c', 'sinkscreen.c', 'memory.c', 'header.c', 'operation.c', 'region.c', 'rect.c', 'semaphore.c', 'util.c', 'init.c', 'buf.c', 'window.c', 'vector.cpp', 'system.c', 'buffer.c', ) iofuncs_headers = files( 'sink.h', ) vipsmarshal = gnome.genmarshal( 'vipsmarshal', prefix: 'vips', sources: 'vipsmarshal.list', ) libvips_sources += iofuncs_sources iofuncs_lib = static_library('iofuncs', iofuncs_sources, iofuncs_headers, vipsmarshal, dependencies: libvips_deps, gnu_symbol_visibility: 'hidden', ) libvips_components += iofuncs_lib libvips-8.15.1/libvips/iofuncs/object.c000066400000000000000000002377431454007373500200360ustar00rootroot00000000000000/* abstract base class for all vips objects * * Edited from nip's base class, 15/10/08 * * 29/5/18 * - added vips_argument_get_id() */ /* Copyright (C) 1991-2003 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG #define VIPS_DEBUG #define DEBUG_REF */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include #include "vipsmarshal.h" /** * SECTION: object * @short_description: the VIPS base object class * @stability: Stable * @see_also: operation * @include: vips/vips.h * * The #VipsObject class and associated types and macros. * * #VipsObject is the base class for all objects in libvips. It has the * following major features: * * Functional class creation Vips objects have a very * regular lifecycle: initialise, build, use, destroy. They behave rather like * function calls and are free of side-effects. * * Run-time introspection Vips objects can be fully * introspected at run-time. There is no need for separate source-code * analysis. * * Command-line interface Any vips object can be run from * the command-line with the `vips` driver program. * * ## The #VipsObject lifecycle * * #VipsObject s have a strictly defined lifecycle, split broadly as construct * and then use. In detail, the stages are: * * 1. g_object_new(). The #VipsObject is created with g_object_new(). Objects * in this state are blank slates and need to have their various parameters * set. * * 2. g_object_set(). You loop over the #VipsArgument that the object has * defined with vips_argument_map(). Arguments have a set of flags attached to * them for required, optional, input, output, type, and so on. You must set * all required arguments. * * 3. vips_object_build(). Call this to construct the object and get it ready * for use. Building an object happens in four stages, see below. * * 4. g_object_get(). The object has now been built. You can read out any * computed values. * * 5. g_object_unref(). When you are done with an object, you can unref it. * See the section on reference counting for an explanation of the convention * that #VipsObject uses. When the last ref to an object is released, the * object is closed. Objects close in three stages, see below. * * The stages inside vips_object_build() are: * * 1. Chain up through the object's @build class methods. At each stage, * each class does any initial setup and checking, then chains up to its * superclass. * * 2. The innermost @build method inside #VipsObject itself checks that all * input arguments have been set and then returns. * * 3. All object @build methods now finish executing, from innermost to * outermost. They know all input arguments have been checked and supplied, so * now they set all output arguments. * * 4. vips_object_build() finishes the process by checking that all output * objects have been set, and then triggering the #VipsObject::postbuild * signal. #VipsObject::postbuild only runs if the object has constructed * successfully. * * #VipsOperation has a cache of recent operation objects, see that class for * an explanation of vips_cache_operation_build(). * * Finally the stages inside close are: * * 1. #VipsObject::preclose. This is emitted at the start of * the #VipsObject dispose. The object is still functioning. * * 2. #VipsObject::close. This runs just after all #VipsArgument held by * the object have been released. * * 3. #VipsObject::postclose. This runs right at the end. The object * pointer is still valid, but nothing else is. * * ## #VipsArgument * * libvips has a simple mechanism for automating at least some aspects of * %GObject properties. You add a set of macros to your _class_init() which * describe the arguments, and set the get and set functions to the vips ones. * * See extending for a complete example. * * ## The #VipsObject reference counting convention * * #VipsObject has a set of conventions to simplify reference counting. * * 1. All input %GObject have a ref added to them, owned by the object. When a * #VipsObject is unreffed, all of these refs to input objects are * automatically dropped. * * 2. All output %GObject hold a ref to the object. When a %GObject which is an * output of a #VipsObject is disposed, it must drop this reference. * #VipsObject which are outputs of other #VipsObject will do this * automatically. * * See #VipsOperation for an example of #VipsObject reference counting. * */ /** * VipsArgumentFlags: * @VIPS_ARGUMENT_NONE: no flags * @VIPS_ARGUMENT_REQUIRED: must be set in the constructor * @VIPS_ARGUMENT_CONSTRUCT: can only be set in the constructor * @VIPS_ARGUMENT_SET_ONCE: can only be set once * @VIPS_ARGUMENT_SET_ALWAYS: don't do use-before-set checks * @VIPS_ARGUMENT_INPUT: is an input argument (one we depend on) * @VIPS_ARGUMENT_OUTPUT: is an output argument (depends on us) * @VIPS_ARGUMENT_DEPRECATED: just there for back-compat, hide * @VIPS_ARGUMENT_MODIFY: the input argument will be modified * @VIPS_ARGUMENT_NON_HASHABLE: the argument is non-hashable * * Flags we associate with each object argument. * * Have separate input & output flags. Both set is an error; neither set is OK. * * Input gobjects are automatically reffed, output gobjects automatically ref * us. We also automatically watch for "destroy" and unlink. * * @VIPS_ARGUMENT_SET_ALWAYS is handy for arguments which are set from C. For * example, VipsImage::width is a property that gives access to the Xsize * member of struct _VipsImage. We default its 'assigned' to TRUE * since the field is always set directly by C. * * @VIPS_ARGUMENT_DEPRECATED arguments are not shown in help text, are not * looked for if required, are not checked for "have-been-set". You can * deprecate a required argument, but you must obviously add a new required * argument if you do. * * Input args with @VIPS_ARGUMENT_MODIFY will be modified by the operation. * This is used for things like the in-place drawing operations. * * @VIPS_ARGUMENT_NON_HASHABLE stops the argument being used in hash and * equality tests. It's useful for arguments like `revalidate` which * control the behaviour of the operator cache. */ /* Our signals. */ enum { SIG_POSTBUILD, SIG_PRECLOSE, SIG_CLOSE, SIG_POSTCLOSE, SIG_LAST }; /* Table of all objects, handy for debugging. */ static GHashTable *vips__object_all = NULL; static GMutex *vips__object_all_lock = NULL; static guint vips_object_signals[SIG_LAST] = { 0 }; /* This has to be externally visible for compatibility with older libvipses. */ int _vips__argument_id = 1; /* Keep a cache of nickname -> GType lookups. */ static GHashTable *vips__object_nickname_table = NULL; G_DEFINE_ABSTRACT_TYPE(VipsObject, vips_object, G_TYPE_OBJECT); /** * vips_argument_get_id: (skip) * * Allocate a new property id. See g_object_class_install_property(). * * Returns: a new property id > 0 */ int vips_argument_get_id(void) { int id; /* We probably don't need to lock: glib seems to single-thread class * creation. */ id = _vips__argument_id++; return id; } /* Don't call this directly, see vips_object_build(). */ static int vips_object_postbuild(VipsObject *object) { int result; #ifdef DEBUG printf("vips_object_postbuild: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ g_signal_emit(object, vips_object_signals[SIG_POSTBUILD], 0, &result); return result; } void vips_object_preclose(VipsObject *object) { if (!object->preclose) { object->preclose = TRUE; #ifdef DEBUG printf("vips_object_preclose: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ g_signal_emit(object, vips_object_signals[SIG_PRECLOSE], 0); } } static void vips_object_close(VipsObject *object) { if (!object->close) { object->close = TRUE; #ifdef DEBUG printf("vips_object_close: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ g_signal_emit(object, vips_object_signals[SIG_CLOSE], 0); } } static void vips_object_postclose(VipsObject *object) { if (!object->postclose) { object->postclose = TRUE; #ifdef DEBUG printf("vips_object_postclose: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ g_signal_emit(object, vips_object_signals[SIG_POSTCLOSE], 0); } } static void * vips_object_check_required(VipsObject *object, GParamSpec *pspec, VipsArgumentClass *argument_class, VipsArgumentInstance *argument_instance, void *a, void *b) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); int *result = (int *) a; VipsArgumentFlags *iomask = (VipsArgumentFlags *) b; VIPS_DEBUG_MSG("vips_object_check_required: %s\n", g_param_spec_get_name(pspec)); VIPS_DEBUG_MSG("\trequired: %d\n", argument_class->flags & VIPS_ARGUMENT_REQUIRED); VIPS_DEBUG_MSG("\tconstruct: %d\n", argument_class->flags & VIPS_ARGUMENT_CONSTRUCT); VIPS_DEBUG_MSG("\tinput: %d\n", argument_class->flags & VIPS_ARGUMENT_INPUT); VIPS_DEBUG_MSG("\toutput: %d\n", argument_class->flags & VIPS_ARGUMENT_OUTPUT); VIPS_DEBUG_MSG("\tassigned: %d\n", argument_instance->assigned); if ((argument_class->flags & VIPS_ARGUMENT_REQUIRED) && (argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) && !(argument_class->flags & VIPS_ARGUMENT_DEPRECATED) && (argument_class->flags & *iomask) && !argument_instance->assigned) { vips_error(class->nickname, _("parameter %s not set"), g_param_spec_get_name(pspec)); *result = -1; } return NULL; } int vips_object_build(VipsObject *object) { VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(object); /* Input and output args must both be set. */ VipsArgumentFlags iomask = VIPS_ARGUMENT_INPUT | VIPS_ARGUMENT_OUTPUT; int result; #ifdef DEBUG printf("vips_object_build: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ if (object_class->build(object)) return -1; /* Check all required arguments have been supplied, don't stop on 1st * error. */ result = 0; (void) vips_argument_map(object, vips_object_check_required, &result, &iomask); /* ... more checks go here. */ object->constructed = TRUE; /* Only postbuild on success. */ if (!result) result = vips_object_postbuild(object); return result; } /** * vips_object_summary_class: (skip) * @klass: class to summarise * @buf: write summary here * * Generate a human-readable summary for a class. */ void vips_object_summary_class(VipsObjectClass *klass, VipsBuf *buf) { klass->summary_class(klass, buf); } /** * vips_object_summary: (skip) * @object: object to summarise * @buf: write summary here * * Generate a human-readable summary for an object. */ void vips_object_summary(VipsObject *object, VipsBuf *buf) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); class->summary(object, buf); } /** * vips_object_dump: (skip) * @object: object to dump * @buf: write dump here * * Dump everything that vips knows about an object to a string. */ void vips_object_dump(VipsObject *object, VipsBuf *buf) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); class->dump(object, buf); } void vips_object_print_summary_class(VipsObjectClass *klass) { char str[2048]; VipsBuf buf = VIPS_BUF_STATIC(str); vips_object_summary_class(klass, &buf); printf("%s\n", vips_buf_all(&buf)); } void vips_object_print_summary(VipsObject *object) { char str[2048]; VipsBuf buf = VIPS_BUF_STATIC(str); vips_object_summary(object, &buf); printf("%s\n", vips_buf_all(&buf)); } void vips_object_print_dump(VipsObject *object) { char str[32768]; VipsBuf buf = VIPS_BUF_STATIC(str); vips_object_dump(object, &buf); printf("%s\n", vips_buf_all(&buf)); } void vips_object_print_name(VipsObject *object) { printf("%s (%p)", G_OBJECT_TYPE_NAME(object), object); } gboolean vips_object_sanity(VipsObject *object) { VipsObjectClass *class; char str[1000]; VipsBuf buf = VIPS_BUF_STATIC(str); if (!object) { printf("vips_object_sanity: null object\n"); return FALSE; } class = VIPS_OBJECT_GET_CLASS(object); class->sanity(object, &buf); if (!vips_buf_is_empty(&buf)) { printf("sanity failure: "); vips_object_print_name(object); printf(" %s\n", vips_buf_all(&buf)); return FALSE; } return TRUE; } /* On a rewind, we dispose the old contents of the object and * reconstruct. This is used in things like im_pincheck() where a "w" * image has to be rewound and become a "p" image. * * Override in subclasses if you want to preserve some fields, see image.c. */ void vips_object_rewind(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); class->rewind(object); } /* Extra stuff we track for properties to do our argument handling. */ static void vips_argument_instance_detach(VipsArgumentInstance *argument_instance) { VipsObject *object = argument_instance->object; VipsArgumentClass *argument_class = argument_instance->argument_class; if (argument_instance->close_id) { /* If close_id is set, the argument must be a gobject of some * sort, so we can fetch it. */ GObject *member = G_STRUCT_MEMBER(GObject *, object, argument_class->offset); if (g_signal_handler_is_connected(member, argument_instance->close_id)) g_signal_handler_disconnect(member, argument_instance->close_id); argument_instance->close_id = 0; } if (argument_instance->invalidate_id) { GObject *member = G_STRUCT_MEMBER(GObject *, object, argument_class->offset); if (g_signal_handler_is_connected(member, argument_instance->invalidate_id)) g_signal_handler_disconnect(member, argument_instance->invalidate_id); argument_instance->invalidate_id = 0; } } /* Free a VipsArgumentInstance ... VipsArgumentClass can just be g_free()d. */ static void vips_argument_instance_free(VipsArgumentInstance *argument_instance) { vips_argument_instance_detach(argument_instance); g_free(argument_instance); } VipsArgument * vips__argument_table_lookup(VipsArgumentTable *table, GParamSpec *pspec) { VipsArgument *argument; g_mutex_lock(vips__global_lock); argument = (VipsArgument *) g_hash_table_lookup(table, pspec); g_mutex_unlock(vips__global_lock); return argument; } static void vips_argument_table_replace(VipsArgumentTable *table, VipsArgument *argument) { g_hash_table_replace(table, argument->pspec, argument); } static void vips_argument_table_destroy(VipsArgumentTable *table) { g_hash_table_destroy(table); } /** * vips_argument_map: (skip) * @object: object whose args should be enumerated * @fn: call this function for every argument * @a: client data * @b: client data * * Loop over the vips_arguments to an object. Stop when @fn returns non-%NULL * and return that value. * * Returns: %NULL if @fn returns %NULL for all arguments, otherwise the first * non-%NULL value from @fn. */ void * vips_argument_map(VipsObject *object, VipsArgumentMapFn fn, void *a, void *b) { /* Make sure we can't go during the loop. This can happen if eg. we * flush an arg that refs us. */ g_object_ref(object); VIPS_ARGUMENT_FOR_ALL(object, pspec, argument_class, argument_instance) { void *result; /* argument_instance should not be NULL. */ g_assert(argument_instance); if ((result = fn(object, pspec, argument_class, argument_instance, a, b))) { g_object_unref(object); return result; } } VIPS_ARGUMENT_FOR_ALL_END g_object_unref(object); return NULL; } /** * vips_argument_class_map: (skip) * * And loop over a class. Same as ^^, but with no VipsArgumentInstance. */ void * vips_argument_class_map(VipsObjectClass *object_class, VipsArgumentClassMapFn fn, void *a, void *b) { GSList *p; for (p = object_class->argument_table_traverse; p; p = p->next) { VipsArgumentClass *arg_class = (VipsArgumentClass *) p->data; VipsArgument *argument = (VipsArgument *) arg_class; GParamSpec *pspec = argument->pspec; void *result; if ((result = fn(object_class, pspec, arg_class, a, b))) return result; } return NULL; } /* Does an vipsargument need an argument to write to? For example, an image * output needs a filename, a double output just prints. */ gboolean vips_argument_class_needsstring(VipsArgumentClass *argument_class) { GParamSpec *pspec = ((VipsArgument *) argument_class)->pspec; GType otype; VipsObjectClass *oclass; if (G_IS_PARAM_SPEC_BOOLEAN(pspec)) /* Bools, input or output, don't need args. */ return FALSE; if (argument_class->flags & VIPS_ARGUMENT_INPUT) /* All other inputs need something. */ return TRUE; /* Just output objects. */ if ((otype = G_PARAM_SPEC_VALUE_TYPE(pspec)) && g_type_is_a(otype, VIPS_TYPE_OBJECT) && (oclass = g_type_class_ref(otype))) /* For now, only vipsobject subclasses can ask for args. */ return oclass->output_needs_arg; else return FALSE; } /* Create a VipsArgumentInstance for each installed argument property. Ideally * we'd do this during _init() but g_object_class_find_property() does not seem * to work then :-( so we have to delay it until first access. See * vips__argument_get_instance(). */ static void vips_argument_init(VipsObject *object) { if (!object->argument_table) { #ifdef DEBUG printf("vips_argument_init: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ object->argument_table = g_hash_table_new_full(g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) vips_argument_instance_free); /* Make a VipsArgumentInstance for each installed argument * property. We can't use vips_argument_map() since that does * some sanity checks that won't pass until all arg instance * are built. */ VIPS_ARGUMENT_FOR_ALL(object, pspec, argument_class, argument_instance) { #ifdef DEBUG printf("vips_argument_init: adding instance argument for %s\n", g_param_spec_get_name(pspec)); #endif /*DEBUG*/ /* argument_instance should be NULL since we've not * set it yet. */ g_assert(argument_instance == NULL); argument_instance = g_new(VipsArgumentInstance, 1); ((VipsArgument *) argument_instance)->pspec = pspec; argument_instance->argument_class = argument_class; argument_instance->object = object; /* SET_ALWAYS args default to assigned. */ argument_instance->assigned = argument_class->flags & VIPS_ARGUMENT_SET_ALWAYS; argument_instance->close_id = 0; argument_instance->invalidate_id = 0; vips_argument_table_replace(object->argument_table, (VipsArgument *) argument_instance); } VIPS_ARGUMENT_FOR_ALL_END } } /** * vips__argument_get_instance: (skip) * * Convenience ... given the VipsArgumentClass, get the VipsArgumentInstance. */ VipsArgumentInstance * vips__argument_get_instance(VipsArgumentClass *argument_class, VipsObject *object) { /* Make sure the instance args are built. */ vips_argument_init(object); return (VipsArgumentInstance *) vips__argument_table_lookup(object->argument_table, ((VipsArgument *) argument_class)->pspec); } /** * vips_object_get_argument: (skip) * @object: the object to fetch the args from * @name: arg to fetch * @pspec: (transfer none): the pspec for this arg * @argument_class: (transfer none): the argument_class for this arg * @argument_instance: (transfer none): the argument_instance for this arg * * Look up the three things you need to work with a vips argument. * * Returns: 0 on success, or -1 on error. */ int vips_object_get_argument(VipsObject *object, const char *name, GParamSpec **pspec, VipsArgumentClass **argument_class, VipsArgumentInstance **argument_instance) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); if (!(*pspec = g_object_class_find_property( G_OBJECT_CLASS(class), name))) { vips_error(class->nickname, _("no property named `%s'"), name); return -1; } if (!(*argument_class = (VipsArgumentClass *) vips__argument_table_lookup(class->argument_table, *pspec))) { vips_error(class->nickname, _("no vips argument named `%s'"), name); return -1; } if (!(*argument_instance = vips__argument_get_instance( *argument_class, object))) { vips_error(class->nickname, _("argument `%s' has no instance"), name); return -1; } return 0; } /** * vips_object_argument_isset: * @object: the object to fetch the args from * @name: arg to fetch * * Convenience: has an argument been assigned. Useful for bindings. * * Returns: %TRUE if the argument has been assigned. */ gboolean vips_object_argument_isset(VipsObject *object, const char *name) { GParamSpec *pspec; VipsArgumentClass *argument_class; VipsArgumentInstance *argument_instance; if (vips_object_get_argument(object, name, &pspec, &argument_class, &argument_instance)) return FALSE; return argument_instance->assigned; } /** * vips_object_get_argument_flags: * @object: the object to fetch the args from * @name: arg to fetch * * Convenience: get the flags for an argument. Useful for bindings. * * Returns: The #VipsArgumentFlags for this argument. */ VipsArgumentFlags vips_object_get_argument_flags(VipsObject *object, const char *name) { GParamSpec *pspec; VipsArgumentClass *argument_class; VipsArgumentInstance *argument_instance; if (vips_object_get_argument(object, name, &pspec, &argument_class, &argument_instance)) return 0; return argument_class->flags; } /** * vips_object_get_argument_priority: * @object: the object to fetch the args from * @name: arg to fetch * * Convenience: get the priority for an argument. Useful for bindings. * * Returns: The priority of this argument. */ int vips_object_get_argument_priority(VipsObject *object, const char *name) { GParamSpec *pspec; VipsArgumentClass *argument_class; VipsArgumentInstance *argument_instance; if (vips_object_get_argument(object, name, &pspec, &argument_class, &argument_instance)) return 0; return argument_class->priority; } static void vips_object_clear_member(VipsArgumentInstance *argument_instance) { VipsObject *object = argument_instance->object; VipsArgumentClass *argument_class = argument_instance->argument_class; GObject **member = &G_STRUCT_MEMBER(GObject *, object, argument_class->offset); vips_argument_instance_detach(argument_instance); if (*member) { if (argument_class->flags & VIPS_ARGUMENT_INPUT) { #ifdef DEBUG_REF printf("vips_object_clear_member: vips object: "); vips_object_print_name(object); printf(" no longer refers to gobject %s (%p)\n", G_OBJECT_TYPE_NAME(*member), *member); printf(" count down to %d\n", G_OBJECT(*member)->ref_count - 1); #endif /*DEBUG_REF*/ /* We reffed the object. */ g_object_unref(*member); } else if (argument_class->flags & VIPS_ARGUMENT_OUTPUT) { #ifdef DEBUG_REF printf("vips_object_clear_member: gobject %s (%p)\n", G_OBJECT_TYPE_NAME(*member), *member); printf(" no longer refers to vips object: "); vips_object_print_name(object); printf(" count down to %d\n", G_OBJECT(object)->ref_count - 1); #endif /*DEBUG_REF*/ g_object_unref(object); } *member = NULL; } } /* Free any args which are holding resources. */ static void * vips_object_dispose_argument(VipsObject *object, GParamSpec *pspec, VipsArgumentClass *argument_class, VipsArgumentInstance *argument_instance, void *a, void *b) { g_assert(((VipsArgument *) argument_class)->pspec == pspec); g_assert(((VipsArgument *) argument_instance)->pspec == pspec); if (G_IS_PARAM_SPEC_OBJECT(pspec) || G_IS_PARAM_SPEC_BOXED(pspec)) { #ifdef DEBUG printf("vips_object_dispose_argument: "); vips_object_print_name(object); printf(".%s\n", g_param_spec_get_name(pspec)); #endif /*DEBUG*/ g_object_set(object, g_param_spec_get_name(pspec), NULL, NULL); } return NULL; } /* Free all args on this object which may be holding resources. * * Note that this is not the same as vips_object_unref_outputs(). That * looks for output objects which may have been created during _build() which * hold refs to this object and unrefs them. * * This function looks for objects which this object holds refs to and which * may be holding sub-resources and zaps them. */ static void vips_argument_dispose_all(VipsObject *object) { #ifdef DEBUG printf("vips_argument_dispose_all: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ vips_argument_map(object, vips_object_dispose_argument, NULL, NULL); } /* Free any args which are holding memory. */ static void * vips_object_free_argument(VipsObject *object, GParamSpec *pspec, VipsArgumentClass *argument_class, VipsArgumentInstance *argument_instance, void *a, void *b) { g_assert(((VipsArgument *) argument_class)->pspec == pspec); g_assert(((VipsArgument *) argument_instance)->pspec == pspec); if (G_IS_PARAM_SPEC_STRING(pspec)) { #ifdef DEBUG printf("vips_object_free_argument: "); vips_object_print_name(object); printf(".%s\n", g_param_spec_get_name(pspec)); #endif /*DEBUG*/ g_object_set(object, g_param_spec_get_name(pspec), NULL, NULL); } return NULL; } /* Free args which hold memory. Things like strings need to be freed right at * the end in case anyone is still using them. */ static void vips_argument_free_all(VipsObject *object) { #ifdef DEBUG printf("vips_argument_free_all: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ vips_argument_map(object, vips_object_free_argument, NULL, NULL); } static void vips_object_dispose(GObject *gobject) { VipsObject *object = VIPS_OBJECT(gobject); #ifdef DEBUG printf("vips_object_dispose: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ /* Our subclasses should have already called this. Run it again, just * in case. */ #ifdef DEBUG if (!object->preclose) printf("vips_object_dispose: pre-close missing!\n"); #endif /*DEBUG*/ vips_object_preclose(object); /* Clear all our arguments: they may be holding resources we should * drop. */ vips_argument_dispose_all(object); vips_object_close(object); vips_object_postclose(object); vips_argument_free_all(object); VIPS_FREEF(vips_argument_table_destroy, object->argument_table); G_OBJECT_CLASS(vips_object_parent_class)->dispose(gobject); } static void vips_object_finalize(GObject *gobject) { VipsObject *object = VIPS_OBJECT(gobject); #ifdef DEBUG printf("vips_object_finalize: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ /* I'd like to have post-close in here, but you can't emit signals * from finalize, sadly. */ g_mutex_lock(vips__object_all_lock); g_hash_table_remove(vips__object_all, object); g_mutex_unlock(vips__object_all_lock); G_OBJECT_CLASS(vips_object_parent_class)->finalize(gobject); } static void vips_object_arg_invalidate(GObject *argument, VipsArgumentInstance *argument_instance) { /* Image @argument has signalled "invalidate" ... resignal on our * operation. */ if (VIPS_IS_OPERATION(argument_instance->object)) vips_operation_invalidate( VIPS_OPERATION(argument_instance->object)); } static void vips_object_arg_close(GObject *argument, VipsArgumentInstance *argument_instance) { VipsObject *object = argument_instance->object; GParamSpec *pspec = ((VipsArgument *) argument_instance)->pspec; /* Argument had reffed us ... now it's being closed, so we NULL out * the pointer to unref. */ g_object_set(object, g_param_spec_get_name(pspec), NULL, NULL); } /* Set a member to an object. Handle the ref counts and signal * connect/disconnect. */ void vips__object_set_member(VipsObject *object, GParamSpec *pspec, GObject **member, GObject *argument) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsArgumentClass *argument_class = (VipsArgumentClass *) vips__argument_table_lookup(class->argument_table, pspec); VipsArgumentInstance *argument_instance = vips__argument_get_instance(argument_class, object); GType otype = G_PARAM_SPEC_VALUE_TYPE(pspec); g_assert(argument_instance); vips_object_clear_member(argument_instance); g_assert(!*member); *member = argument; if (*member) { if (argument_class->flags & VIPS_ARGUMENT_INPUT) { #ifdef DEBUG_REF printf("vips__object_set_member: vips object: "); vips_object_print_name(object); printf(" refers to gobject %s (%p)\n", G_OBJECT_TYPE_NAME(*member), *member); printf(" count up to %d\n", G_OBJECT(*member)->ref_count); #endif /*DEBUG_REF*/ /* Ref the argument. */ g_object_ref(*member); } else if (argument_class->flags & VIPS_ARGUMENT_OUTPUT) { #ifdef DEBUG_REF printf("vips__object_set_member: gobject %s (%p)\n", G_OBJECT_TYPE_NAME(*member), *member); printf(" refers to vips object: "); vips_object_print_name(object); printf(" count up to %d\n", G_OBJECT(object)->ref_count); #endif /*DEBUG_REF*/ /* The argument reffs us. */ g_object_ref(object); } } if (*member && g_type_is_a(otype, VIPS_TYPE_IMAGE)) { if (argument_class->flags & VIPS_ARGUMENT_INPUT) { g_assert(!argument_instance->invalidate_id); argument_instance->invalidate_id = g_signal_connect(*member, "invalidate", G_CALLBACK( vips_object_arg_invalidate), argument_instance); } else if (argument_class->flags & VIPS_ARGUMENT_OUTPUT) { g_assert(!argument_instance->close_id); argument_instance->close_id = g_signal_connect(*member, "close", G_CALLBACK(vips_object_arg_close), argument_instance); } } } /* Is a value NULL? We allow multiple sets of NULL so props can be cleared. * The pspec gives the value type, for consistency with the way value types * are detected in set and get. */ gboolean vips_value_is_null(GParamSpec *pspec, const GValue *value) { if (G_IS_PARAM_SPEC_STRING(pspec) && !g_value_get_string(value)) return TRUE; if (G_IS_PARAM_SPEC_OBJECT(pspec) && !g_value_get_object(value)) return TRUE; if (G_IS_PARAM_SPEC_POINTER(pspec) && !g_value_get_pointer(value)) return TRUE; if (G_IS_PARAM_SPEC_BOXED(pspec) && !g_value_get_boxed(value)) return TRUE; return FALSE; } /* Also used by subclasses, so not static. */ void vips_object_set_property(GObject *gobject, guint property_id, const GValue *value, GParamSpec *pspec) { VipsObject *object = VIPS_OBJECT(gobject); VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(gobject); VipsArgumentClass *argument_class = (VipsArgumentClass *) vips__argument_table_lookup(class->argument_table, pspec); VipsArgumentInstance *argument_instance = vips__argument_get_instance(argument_class, object); g_assert(argument_instance); #ifdef DEBUG printf("vips_object_set_property: "); vips_object_print_name(object); printf(".%s\n", g_param_spec_get_name(pspec)); /* This can crash horribly with some values, have it as a separate * chunk so we can easily comment it out. */ { char *str_value; str_value = g_strdup_value_contents(value); printf("\t%s\n", str_value); g_free(str_value); } #endif /*DEBUG*/ g_assert(((VipsArgument *) argument_class)->pspec == pspec); g_assert(((VipsArgument *) argument_instance)->pspec == pspec); /* If this is a construct-only argument, we can only set before we've * built. */ if (argument_class->flags & VIPS_ARGUMENT_CONSTRUCT && object->constructed && !vips_value_is_null(pspec, value)) { g_warning("%s: %s can't assign '%s' after construct", G_STRLOC, G_OBJECT_TYPE_NAME(gobject), g_param_spec_get_name(pspec)); return; } /* If this is a set-once argument, check we've not set it before. */ if (argument_class->flags & VIPS_ARGUMENT_SET_ONCE && argument_instance->assigned && !vips_value_is_null(pspec, value)) { g_warning("%s: %s can only assign '%s' once", G_STRLOC, G_OBJECT_TYPE_NAME(gobject), g_param_spec_get_name(pspec)); return; } /* We can't use a switch since some param specs don't have fundamental * types and are hence not compile-time constants, argh. */ if (G_IS_PARAM_SPEC_STRING(pspec)) { char **member = &G_STRUCT_MEMBER(char *, object, argument_class->offset); if (*member) g_free(*member); *member = g_value_dup_string(value); } else if (G_IS_PARAM_SPEC_OBJECT(pspec)) { GObject **member = &G_STRUCT_MEMBER(GObject *, object, argument_class->offset); vips__object_set_member(object, pspec, member, g_value_get_object(value)); } else if (G_IS_PARAM_SPEC_INT(pspec)) { int *member = &G_STRUCT_MEMBER(int, object, argument_class->offset); *member = g_value_get_int(value); } else if (G_IS_PARAM_SPEC_UINT64(pspec)) { guint64 *member = &G_STRUCT_MEMBER(guint64, object, argument_class->offset); *member = g_value_get_uint64(value); } else if (G_IS_PARAM_SPEC_BOOLEAN(pspec)) { gboolean *member = &G_STRUCT_MEMBER(gboolean, object, argument_class->offset); *member = g_value_get_boolean(value); } else if (G_IS_PARAM_SPEC_ENUM(pspec)) { int *member = &G_STRUCT_MEMBER(int, object, argument_class->offset); *member = g_value_get_enum(value); } else if (G_IS_PARAM_SPEC_FLAGS(pspec)) { int *member = &G_STRUCT_MEMBER(int, object, argument_class->offset); *member = g_value_get_flags(value); } else if (G_IS_PARAM_SPEC_POINTER(pspec)) { gpointer *member = &G_STRUCT_MEMBER(gpointer, object, argument_class->offset); *member = g_value_get_pointer(value); } else if (G_IS_PARAM_SPEC_DOUBLE(pspec)) { double *member = &G_STRUCT_MEMBER(double, object, argument_class->offset); *member = g_value_get_double(value); } else if (G_IS_PARAM_SPEC_BOXED(pspec)) { gpointer *member = &G_STRUCT_MEMBER(gpointer, object, argument_class->offset); if (*member) { g_boxed_free(G_PARAM_SPEC_VALUE_TYPE(pspec), *member); *member = NULL; } /* Copy the boxed into our pointer (will use eg. * vips__object_vector_dup()). */ *member = g_value_dup_boxed(value); } else { g_warning("%s: %s.%s unimplemented property type %s", G_STRLOC, G_OBJECT_TYPE_NAME(gobject), g_param_spec_get_name(pspec), g_type_name(G_PARAM_SPEC_VALUE_TYPE(pspec))); } /* Note that it's now been set. */ argument_instance->assigned = TRUE; } /* Also used by subclasses, so not static. */ void vips_object_get_property(GObject *gobject, guint property_id, GValue *value, GParamSpec *pspec) { VipsObject *object = VIPS_OBJECT(gobject); VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(gobject); VipsArgumentClass *argument_class = (VipsArgumentClass *) vips__argument_table_lookup(class->argument_table, pspec); VipsArgumentInstance *argument_instance = vips__argument_get_instance(argument_class, object); g_assert(((VipsArgument *) argument_class)->pspec == pspec); if (!argument_instance->assigned) { /* Set the value to the default. Things like Ruby * gobject-introspection will walk objects during GC, and we * can find ourselves fetching object values between init and * build. */ g_param_value_set_default(pspec, value); return; } if (G_IS_PARAM_SPEC_STRING(pspec)) { char *member = G_STRUCT_MEMBER(char *, object, argument_class->offset); g_value_set_string(value, member); } else if (G_IS_PARAM_SPEC_OBJECT(pspec)) { GObject **member = &G_STRUCT_MEMBER(GObject *, object, argument_class->offset); g_value_set_object(value, *member); } else if (G_IS_PARAM_SPEC_INT(pspec)) { int *member = &G_STRUCT_MEMBER(int, object, argument_class->offset); g_value_set_int(value, *member); } else if (G_IS_PARAM_SPEC_UINT64(pspec)) { guint64 *member = &G_STRUCT_MEMBER(guint64, object, argument_class->offset); g_value_set_uint64(value, *member); } else if (G_IS_PARAM_SPEC_BOOLEAN(pspec)) { gboolean *member = &G_STRUCT_MEMBER(gboolean, object, argument_class->offset); g_value_set_boolean(value, *member); } else if (G_IS_PARAM_SPEC_ENUM(pspec)) { int *member = &G_STRUCT_MEMBER(int, object, argument_class->offset); g_value_set_enum(value, *member); } else if (G_IS_PARAM_SPEC_FLAGS(pspec)) { int *member = &G_STRUCT_MEMBER(int, object, argument_class->offset); g_value_set_flags(value, *member); } else if (G_IS_PARAM_SPEC_POINTER(pspec)) { gpointer *member = &G_STRUCT_MEMBER(gpointer, object, argument_class->offset); g_value_set_pointer(value, *member); } else if (G_IS_PARAM_SPEC_DOUBLE(pspec)) { double *member = &G_STRUCT_MEMBER(double, object, argument_class->offset); g_value_set_double(value, *member); } else if (G_IS_PARAM_SPEC_BOXED(pspec)) { gpointer *member = &G_STRUCT_MEMBER(gpointer, object, argument_class->offset); /* Copy the boxed into our pointer (will use eg. * vips__object_vector_dup ()). */ g_value_set_boxed(value, *member); } else { g_warning("%s: %s.%s unimplemented property type %s", G_STRLOC, G_OBJECT_TYPE_NAME(gobject), g_param_spec_get_name(pspec), g_type_name(G_PARAM_SPEC_VALUE_TYPE(pspec))); } } static int vips_object_real_build(VipsObject *object) { VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(object); /* Only test input args, output ones can be set by our subclasses as * they build. See vips_object_build() above. */ VipsArgumentFlags iomask = VIPS_ARGUMENT_INPUT; int result; #ifdef DEBUG printf("vips_object_real_build: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ g_assert(!object->constructed); /* It'd be nice if this just copied a pointer rather than did a * strdup(). Set these here rather than in object_init, so that the * class gets a chance to set them. */ g_object_set(object, "nickname", object_class->nickname, "description", object_class->description, NULL); /* Check all required input arguments have been supplied, don't stop * on 1st error. */ result = 0; (void) vips_argument_map(object, vips_object_check_required, &result, &iomask); return result; } static int vips_object_real_postbuild(VipsObject *object, void *data) { #ifdef DEBUG printf("vips_object_real_postbuild: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ g_assert(object->constructed); return 0; } static void vips_object_real_summary_class(VipsObjectClass *class, VipsBuf *buf) { vips_buf_appendf(buf, "%s", G_OBJECT_CLASS_NAME(class)); if (class->nickname) vips_buf_appendf(buf, " (%s)", class->nickname); if (class->description) vips_buf_appendf(buf, ", %s", class->description); } static void vips_object_real_summary(VipsObject *object, VipsBuf *buf) { } static void vips_object_real_dump(VipsObject *object, VipsBuf *buf) { vips_buf_appendf(buf, " %s (%p) count=%d", G_OBJECT_TYPE_NAME(object), object, G_OBJECT(object)->ref_count); if (object->local_memory) vips_buf_appendf(buf, " %zd bytes", object->local_memory); } static void vips_object_real_sanity(VipsObject *object, VipsBuf *buf) { } static void vips_object_real_rewind(VipsObject *object) { #ifdef DEBUG printf("vips_object_real_rewind\n"); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ g_object_run_dispose(G_OBJECT(object)); object->constructed = FALSE; object->preclose = FALSE; object->close = FALSE; object->postclose = FALSE; } static VipsObject * vips_object_real_new_from_string(const char *string) { GType type; vips_check_init(); /* The main arg selects the subclass. */ if (!(type = vips_type_find(NULL, string))) { vips_error("VipsObject", _("class \"%s\" not found"), string); return NULL; } return VIPS_OBJECT(g_object_new(type, NULL)); } static void vips_object_real_to_string(VipsObject *object, VipsBuf *buf) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); /* Just "bicubic" or whatever. */ vips_buf_appends(buf, class->nickname); } static void transform_string_double(const GValue *src_value, GValue *dest_value) { g_value_set_double(dest_value, g_ascii_strtod(g_value_get_string(src_value), NULL)); } static void vips_object_class_init(VipsObjectClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); /* We must have threads set up before we can process. */ vips_check_init(); if (!vips__object_all) { vips__object_all = g_hash_table_new( g_direct_hash, g_direct_equal); vips__object_all_lock = vips_g_mutex_new(); } gobject_class->dispose = vips_object_dispose; gobject_class->finalize = vips_object_finalize; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; class->build = vips_object_real_build; class->postbuild = vips_object_real_postbuild; class->summary_class = vips_object_real_summary_class; class->summary = vips_object_real_summary; class->dump = vips_object_real_dump; class->sanity = vips_object_real_sanity; class->rewind = vips_object_real_rewind; class->new_from_string = vips_object_real_new_from_string; class->to_string = vips_object_real_to_string; class->nickname = "object"; class->description = _("base class"); /* Table of VipsArgumentClass ... we can just g_free() them. */ class->argument_table = g_hash_table_new_full( g_direct_hash, g_direct_equal, NULL, (GDestroyNotify) g_free); class->argument_table_traverse = NULL; /* For setting double arguments from the command-line. */ g_value_register_transform_func(G_TYPE_STRING, G_TYPE_DOUBLE, transform_string_double); VIPS_ARG_STRING(class, "nickname", 1, _("Nickname"), _("Class nickname"), VIPS_ARGUMENT_SET_ONCE, G_STRUCT_OFFSET(VipsObject, nickname), ""); VIPS_ARG_STRING(class, "description", 2, _("Description"), _("Class description"), VIPS_ARGUMENT_SET_ONCE, G_STRUCT_OFFSET(VipsObject, description), ""); /** * VipsObject::postbuild: * @object: the object that has been built * * The ::postbuild signal is emitted once just after successful object * construction. Return non-zero to cause object construction to fail. */ vips_object_signals[SIG_POSTBUILD] = g_signal_new("postbuild", G_TYPE_FROM_CLASS(class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(VipsObjectClass, postbuild), NULL, NULL, vips_INT__VOID, G_TYPE_INT, 0); /** * VipsObject::preclose: * @object: the object that is to close * * The ::preclose signal is emitted once just before object close * starts. The object is still alive. */ vips_object_signals[SIG_PRECLOSE] = g_signal_new("preclose", G_TYPE_FROM_CLASS(class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(VipsObjectClass, preclose), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * VipsObject::close: * @object: the object that is closing * * The ::close signal is emitted once during object close. The object * is dying and may not work. */ vips_object_signals[SIG_CLOSE] = g_signal_new("close", G_TYPE_FROM_CLASS(class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(VipsObjectClass, close), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); /** * VipsObject::postclose: * @object: the object that has closed * * The ::postclose signal is emitted once after object close. The * object pointer is still valid, but nothing else. */ vips_object_signals[SIG_POSTCLOSE] = g_signal_new("postclose", G_TYPE_FROM_CLASS(class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(VipsObjectClass, postclose), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } static void vips_object_init(VipsObject *object) { #ifdef DEBUG printf("vips_object_init: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ g_mutex_lock(vips__object_all_lock); g_hash_table_insert(vips__object_all, object, object); g_mutex_unlock(vips__object_all_lock); } static void * traverse_find_required_priority(void *data, void *a, void *b) { VipsArgumentClass *argument_class = (VipsArgumentClass *) data; int priority = GPOINTER_TO_INT(a); if ((argument_class->flags & VIPS_ARGUMENT_REQUIRED) && !(argument_class->flags & VIPS_ARGUMENT_DEPRECATED) && argument_class->priority == priority) return argument_class; return NULL; } static int traverse_sort(VipsArgumentClass *class1, VipsArgumentClass *class2, void *user_data) { return class1->priority - class2->priority; } /* Add a vipsargument ... automate some stuff with this. */ void vips_object_class_install_argument(VipsObjectClass *object_class, GParamSpec *pspec, VipsArgumentFlags flags, int priority, guint offset) { VipsArgumentClass *argument_class = g_new(VipsArgumentClass, 1); GSList *argument_table_traverse; VipsArgumentClass *ac; #ifdef DEBUG printf("vips_object_class_install_argument: %p %s %s\n", object_class, g_type_name(G_TYPE_FROM_CLASS(object_class)), g_param_spec_get_name(pspec)); #endif /*DEBUG*/ /* object_class->argument* is shared, so we must lock. */ g_mutex_lock(vips__global_lock); /* Must be a new one. */ g_assert(!g_hash_table_lookup(object_class->argument_table, pspec)); /* Mustn't have INPUT and OUTPUT both set. */ g_assert(!( (flags & VIPS_ARGUMENT_INPUT) && (flags & VIPS_ARGUMENT_OUTPUT))); ((VipsArgument *) argument_class)->pspec = pspec; argument_class->object_class = object_class; argument_class->flags = flags; argument_class->priority = priority; argument_class->offset = offset; vips_argument_table_replace(object_class->argument_table, (VipsArgument *) argument_class); /* If this is the first argument for a new subclass, we need to clone * the traverse list we inherit. */ if (object_class->argument_table_traverse_gtype != G_TYPE_FROM_CLASS(object_class)) { #ifdef DEBUG printf("vips_object_class_install_argument: cloning traverse\n"); #endif /*DEBUG*/ object_class->argument_table_traverse = g_slist_copy(object_class->argument_table_traverse); object_class->argument_table_traverse_gtype = G_TYPE_FROM_CLASS(object_class); } /* We read argument_table_traverse without a lock (eg. see * vips_argument_map()), so we must be very careful updating it. */ argument_table_traverse = g_slist_copy(object_class->argument_table_traverse); /* We keep traverse sorted by priority, so we mustn't have duplicate * priority values in required args. */ if ((flags & VIPS_ARGUMENT_REQUIRED) && !(flags & VIPS_ARGUMENT_DEPRECATED) && (ac = vips_slist_map2(argument_table_traverse, traverse_find_required_priority, GINT_TO_POINTER(priority), NULL))) g_warning("vips_object_class_install_argument: " "%s.%s, %s.%s duplicate priority", g_type_name(G_TYPE_FROM_CLASS(object_class)), g_param_spec_get_name(pspec), g_type_name(G_TYPE_FROM_CLASS(ac->object_class)), g_param_spec_get_name(((VipsArgument *) ac)->pspec)); /* Warn about optional boolean args which default TRUE. These won't * work from the CLI, since simple GOption switches don't allow * `=false`. */ if (!(flags & VIPS_ARGUMENT_REQUIRED) && !(flags & VIPS_ARGUMENT_DEPRECATED) && G_IS_PARAM_SPEC_BOOLEAN(pspec) && G_PARAM_SPEC_BOOLEAN(pspec)->default_value) g_warning("vips_object_class_install_argument: " "default TRUE BOOL arg %s.%s", g_type_name(G_TYPE_FROM_CLASS(object_class)), g_param_spec_get_name(pspec)); argument_table_traverse = g_slist_prepend( argument_table_traverse, argument_class); argument_table_traverse = g_slist_sort( argument_table_traverse, (GCompareFunc) traverse_sort); VIPS_SWAP(GSList *, argument_table_traverse, object_class->argument_table_traverse); g_slist_free(argument_table_traverse); #ifdef DEBUG { GSList *p; printf("%d items on traverse %p\n", g_slist_length(object_class->argument_table_traverse), &object_class->argument_table_traverse); for (p = object_class->argument_table_traverse; p; p = p->next) { VipsArgumentClass *argument_class = (VipsArgumentClass *) p->data; printf("\t%p %s\n", argument_class, g_param_spec_get_name( ((VipsArgument *) argument_class)->pspec)); } } #endif /*DEBUG*/ g_mutex_unlock(vips__global_lock); } static void vips_object_no_value(VipsObject *object, const char *name) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); GParamSpec *pspec; VipsArgumentClass *argument_class; VipsArgumentInstance *argument_instance; if (vips_object_get_argument(object, name, &pspec, &argument_class, &argument_instance)) g_assert_not_reached(); if (strcmp(name, g_param_spec_get_name(pspec)) == 0) vips_error(class->nickname, _("no value supplied for argument '%s'"), name); else vips_error(class->nickname, _("no value supplied for argument '%s' ('%s')"), name, g_param_spec_get_name(pspec)); } /* Set a named arg from a string. */ int vips_object_set_argument_from_string(VipsObject *object, const char *name, const char *value) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); GParamSpec *pspec; VipsArgumentClass *argument_class; VipsArgumentInstance *argument_instance; VipsObjectClass *oclass; GType otype; GValue gvalue = G_VALUE_INIT; VIPS_DEBUG_MSG("vips_object_set_argument_from_string: %s = %s\n", name, value); if (vips_object_get_argument(object, name, &pspec, &argument_class, &argument_instance)) return -1; otype = G_PARAM_SPEC_VALUE_TYPE(pspec); g_assert(argument_class->flags & VIPS_ARGUMENT_INPUT); if (g_type_is_a(otype, VIPS_TYPE_IMAGE)) { VipsImage *out; VipsOperationFlags flags; VipsAccess access; char filename[VIPS_PATH_MAX]; char option_string[VIPS_PATH_MAX]; flags = 0; if (VIPS_IS_OPERATION(object)) flags = vips_operation_get_flags( VIPS_OPERATION(object)); if (flags & (VIPS_OPERATION_SEQUENTIAL_UNBUFFERED | VIPS_OPERATION_SEQUENTIAL)) access = VIPS_ACCESS_SEQUENTIAL; else access = VIPS_ACCESS_RANDOM; if (!value) { vips_object_no_value(object, name); return -1; } vips__filename_split8(value, filename, option_string); if (strcmp("stdin", filename) == 0) { VipsSource *source; if (!(source = vips_source_new_from_descriptor(0))) return -1; if (!(out = vips_image_new_from_source(source, option_string, "access", access, NULL))) { VIPS_UNREF(source); return -1; } VIPS_UNREF(source); } else { if (!(out = vips_image_new_from_file(value, "access", access, NULL))) return -1; } g_value_init(&gvalue, VIPS_TYPE_IMAGE); g_value_set_object(&gvalue, out); /* Setting gvalue will have upped @out's count again, * go back to 1 so that gvalue has the only ref. */ g_object_unref(out); } else if (g_type_is_a(otype, VIPS_TYPE_SOURCE)) { VipsSource *source; if (!value) { vips_object_no_value(object, name); return -1; } if (!(source = vips_source_new_from_options(value))) return -1; g_value_init(&gvalue, VIPS_TYPE_SOURCE); g_value_set_object(&gvalue, source); /* Setting gvalue will have upped @out's count again, * go back to 1 so that gvalue has the only ref. */ g_object_unref(source); } else if (g_type_is_a(otype, VIPS_TYPE_ARRAY_IMAGE)) { /* We have to have a special case for this, we can't just rely * on transform_g_string_array_image(), since we need to be * able to set the access hint on the image. */ VipsArrayImage *array_image; VipsOperationFlags flags; VipsAccess access; if (!value) { vips_object_no_value(object, name); return -1; } flags = 0; if (VIPS_IS_OPERATION(object)) flags = vips_operation_get_flags( VIPS_OPERATION(object)); if (flags & (VIPS_OPERATION_SEQUENTIAL_UNBUFFERED | VIPS_OPERATION_SEQUENTIAL)) access = VIPS_ACCESS_SEQUENTIAL; else access = VIPS_ACCESS_RANDOM; if (!(array_image = vips_array_image_new_from_string(value, access))) return -1; g_value_init(&gvalue, VIPS_TYPE_ARRAY_IMAGE); g_value_set_boxed(&gvalue, array_image); /* Setting gvalue will have upped @array_image's count again, * go back to 1 so that gvalue has the only ref. */ vips_area_unref(VIPS_AREA(array_image)); } else if (g_type_is_a(otype, VIPS_TYPE_OBJECT) && (oclass = g_type_class_ref(otype))) { VipsObject *new_object; if (!value) { vips_object_no_value(object, name); return -1; } if (!(new_object = vips_object_new_from_string(oclass, value))) return -1; /* Not necessarily a VipsOperation subclass so we don't use * the cache. We could have a separate case for this. */ if (vips_object_build(new_object)) { g_object_unref(new_object); return -1; } g_value_init(&gvalue, G_TYPE_OBJECT); g_value_set_object(&gvalue, new_object); /* The GValue now has a ref, we can drop ours. */ g_object_unref(new_object); } else if (G_IS_PARAM_SPEC_BOOLEAN(pspec)) { gboolean b; b = TRUE; if (value && (g_ascii_strcasecmp(value, "false") == 0 || g_ascii_strcasecmp(value, "no") == 0 || strcmp(value, "0") == 0)) b = FALSE; g_value_init(&gvalue, G_TYPE_BOOLEAN); g_value_set_boolean(&gvalue, b); } else if (G_IS_PARAM_SPEC_INT(pspec)) { int i; if (!value) { vips_object_no_value(object, name); return -1; } if (sscanf(value, "%d", &i) != 1) { vips_error(class->nickname, _("'%s' is not an integer"), value); return -1; } g_value_init(&gvalue, G_TYPE_INT); g_value_set_int(&gvalue, i); } else if (G_IS_PARAM_SPEC_UINT64(pspec)) { /* Not always the same as guint64 :-( argh. */ long long l; if (!value) { vips_object_no_value(object, name); return -1; } if (sscanf(value, "%lld", &l) != 1) { vips_error(class->nickname, _("'%s' is not an integer"), value); return -1; } g_value_init(&gvalue, G_TYPE_UINT64); g_value_set_uint64(&gvalue, l); } else if (G_IS_PARAM_SPEC_DOUBLE(pspec)) { double d; if (!value) { vips_object_no_value(object, name); return -1; } if (vips_strtod(value, &d)) return -1; g_value_init(&gvalue, G_TYPE_DOUBLE); g_value_set_double(&gvalue, d); } else if (G_IS_PARAM_SPEC_ENUM(pspec)) { int i; if (!value) { vips_object_no_value(object, name); return -1; } if ((i = vips_enum_from_nick(class->nickname, otype, value)) < 0) return -1; g_value_init(&gvalue, otype); g_value_set_enum(&gvalue, i); } else if (G_IS_PARAM_SPEC_FLAGS(pspec)) { int i; if (!value) { vips_object_no_value(object, name); return -1; } if ((i = vips_flags_from_nick(class->nickname, otype, value)) < 0) return -1; g_value_init(&gvalue, otype); g_value_set_flags(&gvalue, i); } else { if (!value) { vips_object_no_value(object, name); return -1; } g_value_init(&gvalue, G_TYPE_STRING); g_value_set_string(&gvalue, value); } g_object_set_property(G_OBJECT(object), name, &gvalue); g_value_unset(&gvalue); return 0; } /* Does an vipsargument need an argument to write to? For example, an image * output needs a filename, a double output just prints. */ gboolean vips_object_argument_needsstring(VipsObject *object, const char *name) { GParamSpec *pspec; VipsArgumentClass *argument_class; VipsArgumentInstance *argument_instance; #ifdef DEBUG printf("vips_object_argument_needsstring: %s\n", name); #endif /*DEBUG*/ if (vips_object_get_argument(object, name, &pspec, &argument_class, &argument_instance)) return -1; return vips_argument_class_needsstring(argument_class); } static void vips_object_print_arg(VipsObject *object, GParamSpec *pspec, VipsBuf *buf) { GType type = G_PARAM_SPEC_VALUE_TYPE(pspec); const char *name = g_param_spec_get_name(pspec); GValue value = G_VALUE_INIT; char *str_value; g_value_init(&value, type); g_object_get_property(G_OBJECT(object), name, &value); str_value = g_strdup_value_contents(&value); vips_buf_appends(buf, str_value); g_free(str_value); g_value_unset(&value); } /* Is a filename a target, ie. it is of the form ".jpg". Any trailing options * have already been stripped. Watch out for cases like "./x.jpg". */ static gboolean vips_filename_istarget(const char *filename) { const char *p; return (p = strrchr(filename, '.')) && p == filename; } /* Write a named arg to the string. If the arg does not need a string (see * above), arg will be NULL. */ int vips_object_get_argument_to_string(VipsObject *object, const char *name, const char *arg) { GParamSpec *pspec; GType otype; VipsArgumentClass *argument_class; VipsArgumentInstance *argument_instance; VipsObjectClass *oclass; #ifdef DEBUG printf("vips_object_get_argument_to_string: %s -> %s\n", name, arg); #endif /*DEBUG*/ if (vips_object_get_argument(object, name, &pspec, &argument_class, &argument_instance)) return -1; otype = G_PARAM_SPEC_VALUE_TYPE(pspec); g_assert(argument_class->flags & VIPS_ARGUMENT_OUTPUT); if (g_type_is_a(otype, VIPS_TYPE_IMAGE)) { VipsImage *in; char filename[VIPS_PATH_MAX]; char option_string[VIPS_PATH_MAX]; vips__filename_split8(arg, filename, option_string); if (vips_filename_istarget(filename)) { VipsTarget *target; if (!(target = vips_target_new_to_descriptor(1))) return -1; g_object_get(object, name, &in, NULL); if (vips_image_write_to_target(in, arg, target, NULL)) { VIPS_UNREF(in); VIPS_UNREF(target); return -1; } VIPS_UNREF(in); VIPS_UNREF(target); } else { /* Pull out the image and write it. */ g_object_get(object, name, &in, NULL); if (vips_image_write_to_file(in, arg, NULL)) { VIPS_UNREF(in); return -1; } VIPS_UNREF(in); } } else if (g_type_is_a(otype, VIPS_TYPE_OBJECT) && (oclass = g_type_class_ref(otype)) && oclass->output_to_arg) { VipsObject *value; g_object_get(object, name, &value, NULL); if (oclass->output_to_arg(value, arg)) { g_object_unref(value); return -1; } g_object_unref(value); } else { char str[1000]; VipsBuf buf = VIPS_BUF_STATIC(str); vips_object_print_arg(object, pspec, &buf); printf("%s\n", vips_buf_all(&buf)); } return 0; } static void * vips_argument_is_required(VipsObject *object, GParamSpec *pspec, VipsArgumentClass *argument_class, VipsArgumentInstance *argument_instance, void *a, void *b) { if ((argument_class->flags & VIPS_ARGUMENT_REQUIRED) && (argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) && (argument_class->flags & VIPS_ARGUMENT_INPUT) && !argument_instance->assigned) return pspec; return NULL; } /* Find the first unassigned required input arg. */ static GParamSpec * vips_object_find_required(VipsObject *object) { return (GParamSpec *) vips_argument_map(object, vips_argument_is_required, NULL, NULL); } typedef struct _VipsNameFlagsPair { const char **names; int *flags; } VipsNameFlagsPair; static void * vips_object_find_args(VipsObject *object, GParamSpec *pspec, VipsArgumentClass *argument_class, VipsArgumentInstance *argument_instance, void *a, void *b) { VipsNameFlagsPair *pair = (VipsNameFlagsPair *) a; int *i = (int *) b; pair->names[*i] = g_param_spec_get_name(pspec); pair->flags[*i] = (int) argument_class->flags; *i += 1; return NULL; } /** * vips_object_get_args: (skip) * @object: object whose args should be retrieved * @names: (transfer none) (array length=n_args) (allow-none): output array of %GParamSpec names * @flags: (transfer none) (array length=n_args) (allow-none): output array of #VipsArgumentFlags * @n_args: (allow-none): length of output arrays * * Get all %GParamSpec names and #VipsArgumentFlags for an object. * * This is handy for language bindings. From C, it's usually more convenient to * use vips_argument_map(). * * Returns: 0 on success, -1 on error */ int vips_object_get_args(VipsObject *object, const char ***names, int **flags, int *n_args) { VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(object); int n = g_slist_length(object_class->argument_table_traverse); VipsNameFlagsPair pair; int i; pair.names = VIPS_ARRAY(object, n, const char *); pair.flags = VIPS_ARRAY(object, n, int); if (!pair.names || !pair.flags) return -1; i = 0; (void) vips_argument_map(object, vips_object_find_args, &pair, &i); if (names) *names = pair.names; if (flags) *flags = pair.flags; if (n_args) *n_args = n; return 0; } /** * vips_object_new: (skip) * @type: object to create * @set: set arguments with this * @a: client data * @b: client data * * g_object_new() the object, set any arguments with @set, call * vips_object_build() and return the complete object. * * Returns: the new object */ VipsObject * vips_object_new(GType type, VipsObjectSetArguments set, void *a, void *b) { VipsObject *object; vips_check_init(); object = VIPS_OBJECT(g_object_new(type, NULL)); if (set && set(object, a, b)) { g_object_unref(object); return NULL; } if (vips_object_build(object)) { g_object_unref(object); return NULL; } return object; } /** * vips_object_set_valist: * @object: object to set arguments on * @ap: %NULL-terminated list of argument/value pairs * * See vips_object_set(). * * Returns: 0 on success, -1 on error */ int vips_object_set_valist(VipsObject *object, va_list ap) { char *name; VIPS_DEBUG_MSG("vips_object_set_valist:\n"); for (name = va_arg(ap, char *); name; name = va_arg(ap, char *)) { GParamSpec *pspec; VipsArgumentClass *argument_class; VipsArgumentInstance *argument_instance; VIPS_DEBUG_MSG("\tname = '%s' (%p)\n", name, name); if (vips_object_get_argument(VIPS_OBJECT(object), name, &pspec, &argument_class, &argument_instance)) return -1; VIPS_ARGUMENT_COLLECT_SET(pspec, argument_class, ap); g_object_set_property(G_OBJECT(object), name, &value); VIPS_ARGUMENT_COLLECT_GET(pspec, argument_class, ap); VIPS_ARGUMENT_COLLECT_END } return 0; } /** * vips_object_set: * @object: object to set arguments on * @...: %NULL-terminated list of argument/value pairs * * Set a list of vips object arguments. For example: * * |[ * vips_object_set(operation, * "input", in, * "output", &out, * NULL); * ]| * * Input arguments are given in-line, output arguments are given as pointers * to where the output value should be written. * * See also: vips_object_set_valist(), vips_object_set_from_string(). * * Returns: 0 on success, -1 on error */ int vips_object_set(VipsObject *object, ...) { va_list ap; int result; va_start(ap, object); result = vips_object_set_valist(object, ap); va_end(ap); return result; } /* Set object args from a string. @p should be the initial left bracket and * there should be no tokens after the matching right bracket. @p is modified. */ static int vips_object_set_args(VipsObject *object, const char *p) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsToken token; char string[VIPS_PATH_MAX]; char string2[VIPS_PATH_MAX]; GParamSpec *pspec; VipsArgumentClass *argument_class; VipsArgumentInstance *argument_instance; if (!(p = vips__token_need(p, VIPS_TOKEN_LEFT, string, VIPS_PATH_MAX))) return -1; if (!(p = vips__token_segment(p, &token, string, VIPS_PATH_MAX))) return -1; for (;;) { if (token == VIPS_TOKEN_RIGHT) break; if (token != VIPS_TOKEN_STRING) { vips_error(class->nickname, _("expected string or ), saw %s"), vips_enum_nick(VIPS_TYPE_TOKEN, token)); return -1; } /* We have to look for a '=', ']' or a ',' to see if string is * a param name or a value. */ if (!(p = vips__token_segment(p, &token, string2, VIPS_PATH_MAX))) return -1; if (token == VIPS_TOKEN_EQUALS) { if (!(p = vips__token_segment_need(p, VIPS_TOKEN_STRING, string2, VIPS_PATH_MAX))) return -1; if (vips_object_set_argument_from_string(object, string, string2)) return -1; if (!(p = vips__token_must(p, &token, string2, VIPS_PATH_MAX))) return -1; } else if (g_object_class_find_property( G_OBJECT_GET_CLASS(object), string) && !vips_object_get_argument(object, string, &pspec, &argument_class, &argument_instance) && (argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) && (argument_class->flags & VIPS_ARGUMENT_INPUT) && G_IS_PARAM_SPEC_BOOLEAN(pspec)) { /* The string is the name of an optional * input boolean ... set it! */ if (!argument_instance->assigned) g_object_set(object, string, TRUE, NULL); } else if ((pspec = vips_object_find_required(object))) { if (vips_object_set_argument_from_string(object, g_param_spec_get_name(pspec), string)) return -1; } else { vips_error(class->nickname, _("unable to set '%s'"), string); return -1; } /* Now must be a , or a ). */ if (token == VIPS_TOKEN_COMMA) { if (!(p = vips__token_must(p, &token, string, VIPS_PATH_MAX))) return -1; } else if (token != VIPS_TOKEN_RIGHT) { vips_error(class->nickname, "%s", _("not , or ) after parameter")); return -1; } } if ((p = vips__token_get(p, &token, string, VIPS_PATH_MAX))) { vips_error(class->nickname, "%s", _("extra tokens after ')'")); return -1; } return 0; } /** * vips_object_set_from_string: * @object: object to set arguments on * @string: arguments as a string * * Set object arguments from a string. The string can be something like * "a=12", or "a = 12, b = 13", or "fred". The string can optionally be * enclosed in brackets. * * You'd typically use this between creating the object and building it. * * See also: vips_object_set(), vips_object_build(), * vips_cache_operation_buildp(). * * Returns: 0 on success, -1 on error */ int vips_object_set_from_string(VipsObject *object, const char *string) { const char *q; VipsToken token; char buffer[VIPS_PATH_MAX]; char str[VIPS_PATH_MAX]; vips_strncpy(buffer, string, VIPS_PATH_MAX); /* Does string start with a bracket? If it doesn't, enclose the whole * thing in []. */ if (!(q = vips__token_get(buffer, &token, str, VIPS_PATH_MAX)) || token != VIPS_TOKEN_LEFT) vips_snprintf(buffer, VIPS_PATH_MAX, "[%s]", string); else vips_strncpy(buffer, string, VIPS_PATH_MAX); return vips_object_set_args(object, buffer); } VipsObject * vips_object_new_from_string(VipsObjectClass *object_class, const char *p) { const char *q; char str[VIPS_PATH_MAX]; VipsObject *object; g_assert(object_class); g_assert(object_class->new_from_string); /* Find the start of the optional args on the end of the string, take * everything before that as the principal arg for the constructor. */ if ((q = vips__find_rightmost_brackets(p))) vips_strncpy(str, p, VIPS_MIN(VIPS_PATH_MAX, q - p + 1)); else vips_strncpy(str, p, VIPS_PATH_MAX); if (!(object = object_class->new_from_string(str))) return NULL; /* More tokens there? Set any other args. */ if (q && vips_object_set_from_string(object, q)) { g_object_unref(object); return NULL; } return object; } static void * vips_object_to_string_required(VipsObject *object, GParamSpec *pspec, VipsArgumentClass *argument_class, VipsArgumentInstance *argument_instance, void *a, void *b) { VipsBuf *buf = (VipsBuf *) a; gboolean *first = (gboolean *) b; if ((argument_class->flags & VIPS_ARGUMENT_REQUIRED)) { if (*first) { vips_buf_appends(buf, "("); *first = FALSE; } else { vips_buf_appends(buf, ","); } vips_object_print_arg(object, pspec, buf); } return NULL; } static void * vips_object_to_string_optional(VipsObject *object, GParamSpec *pspec, VipsArgumentClass *argument_class, VipsArgumentInstance *argument_instance, void *a, void *b) { VipsBuf *buf = (VipsBuf *) a; gboolean *first = (gboolean *) b; if (!(argument_class->flags & VIPS_ARGUMENT_REQUIRED) && argument_instance->assigned) { if (*first) { vips_buf_appends(buf, "("); *first = FALSE; } else { vips_buf_appends(buf, ","); } vips_buf_appends(buf, g_param_spec_get_name(pspec)); vips_buf_appends(buf, "="); vips_object_print_arg(object, pspec, buf); } return NULL; } /** * vips_object_to_string: * @object: object to stringify * @buf: write string here * * The inverse of vips_object_new_from_string(): turn @object into eg. * "VipsInterpolateSnohalo1(blur=.333333)". */ void vips_object_to_string(VipsObject *object, VipsBuf *buf) { VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(object); gboolean first; g_assert(object_class->to_string); /* Nicknames are not guaranteed to be unique, so use the full type * name. */ object_class->to_string(object, buf); first = TRUE; (void) vips_argument_map(object, vips_object_to_string_required, buf, &first); (void) vips_argument_map(object, vips_object_to_string_optional, buf, &first); if (!first) vips_buf_appends(buf, ")"); } typedef struct { VipsSListMap2Fn fn; void *a; void *b; void *result; } VipsObjectMapArgs; static void vips_object_map_sub(VipsObject *key, VipsObject *value, VipsObjectMapArgs *args) { if (!args->result) args->result = args->fn(key, args->a, args->b); } /** * vips_object_map: (skip) * @fn: function to call for all objects * @a: client data * @b: client data * * Call a function for all alive objects. * Stop when @fn returns non-%NULL and return that value. * * Returns: %NULL if @fn returns %NULL for all arguments, otherwise the first * non-%NULL value from @fn. */ void * vips_object_map(VipsSListMap2Fn fn, void *a, void *b) { VipsObjectMapArgs args; args.fn = fn; args.a = a; args.b = b; args.result = NULL; /* We must test vips__object_all before we lock because the lock is * only created when the first object is created. */ if (vips__object_all) { g_mutex_lock(vips__object_all_lock); g_hash_table_foreach(vips__object_all, (GHFunc) vips_object_map_sub, &args); g_mutex_unlock(vips__object_all_lock); } return args.result; } /** * vips_type_map: (skip) * @base: base type * @fn: call this function for every type * @a: client data * @b: client data * * Map over a type's children. Stop when @fn returns non-%NULL * and return that value. * * Returns: %NULL if @fn returns %NULL for all arguments, otherwise the first * non-%NULL value from @fn. */ void * vips_type_map(GType base, VipsTypeMap2Fn fn, void *a, void *b) { GType *child; guint n_children; unsigned int i; void *result; child = g_type_children(base, &n_children); result = NULL; for (i = 0; i < n_children && !result; i++) result = fn(child[i], a, b); g_free(child); return result; } /** * vips_type_map_all: (skip) * @base: base type * @fn: call this function for every type * @a: client data * * Map over a type's children, direct and indirect. Stop when @fn returns * non-%NULL and return that value. * * Returns: %NULL if @fn returns %NULL for all arguments, otherwise the first * non-%NULL value from @fn. */ void * vips_type_map_all(GType base, VipsTypeMapFn fn, void *a) { void *result; if (!(result = fn(base, a))) result = vips_type_map(base, (VipsTypeMap2Fn) vips_type_map_all, fn, a); return result; } /** * vips_class_map_all: (skip) * @type: base type * @fn: call this function for every type * @a: client data * * Loop over all the subclasses of @type. Non-abstract classes only. * Stop when @fn returns * non-%NULL and return that value. * * Returns: %NULL if @fn returns %NULL for all arguments, otherwise the first * non-%NULL value from @fn. */ void * vips_class_map_all(GType type, VipsClassMapFn fn, void *a) { void *result; /* Avoid abstract classes. Use type_map_all for them. */ if (!G_TYPE_IS_ABSTRACT(type)) { /* We never unref this ref, but we never unload classes * anyway, so so what. */ if ((result = fn( VIPS_OBJECT_CLASS(g_type_class_ref(type)), a))) return result; } if ((result = vips_type_map(type, (VipsTypeMap2Fn) vips_class_map_all, fn, a))) return result; return NULL; } /* How deeply nested is a class ... used to indent class lists. */ int vips_type_depth(GType type) { int depth; depth = 0; while (type != VIPS_TYPE_OBJECT && (type = g_type_parent(type))) depth += 1; return depth; } static void * test_name(VipsObjectClass *class, const char *nickname) { if (g_ascii_strcasecmp(class->nickname, nickname) == 0) return class; /* Check the class name too, why not. */ if (g_ascii_strcasecmp(G_OBJECT_CLASS_NAME(class), nickname) == 0) return class; return NULL; } /** * vips_class_find: * @basename: name of base class * @nickname: search for a class with this nickname * * Search below @basename, return the first class whose name or @nickname * matches. * * See also: vips_type_find() * * Returns: (transfer none): the found class. */ const VipsObjectClass * vips_class_find(const char *basename, const char *nickname) { const char *classname = basename ? basename : "VipsObject"; VipsObjectClass *class; GType base; if (!(base = g_type_from_name(classname))) return NULL; class = vips_class_map_all(base, (VipsClassMapFn) test_name, (void *) nickname); return class; } /* What we store for each nickname. We can't just store the type with * GINT_TO_POINTER() since GType is 64 bits on some platforms. */ typedef struct _NicknameGType { const char *nickname; GType type; gboolean duplicate; } NicknameGType; static void * vips_class_add_hash(VipsObjectClass *class, GHashTable *table) { GType type = G_OBJECT_CLASS_TYPE(class); NicknameGType *hit; hit = (NicknameGType *) g_hash_table_lookup(table, (void *) class->nickname); /* If this is not a unique name, mark as a duplicate. In this case * we'll need to fall back to a search. */ if (hit) hit->duplicate = TRUE; else { hit = g_new(NicknameGType, 1); hit->nickname = class->nickname; hit->type = type; hit->duplicate = FALSE; g_hash_table_insert(table, (void *) hit->nickname, hit); } return NULL; } static void * vips_class_build_hash_cb(void *dummy) { GType base; vips__object_nickname_table = g_hash_table_new(g_str_hash, g_str_equal); base = g_type_from_name("VipsObject"); g_assert(base); vips_class_map_all(base, (VipsClassMapFn) vips_class_add_hash, (void *) vips__object_nickname_table); return NULL; } /** * vips_type_find: * @basename: name of base class * @nickname: search for a class with this nickname * * Search below @basename, return the %GType of the class whose name or * @nickname matches, or 0 for not found. * If @basename is NULL, the whole of #VipsObject is searched. * * This function uses a cache, so it should be quick. * * See also: vips_class_find() * * Returns: the %GType of the class, or 0 if the class is not found. */ GType vips_type_find(const char *basename, const char *nickname) { static GOnce once = G_ONCE_INIT; const char *classname = basename ? basename : "VipsObject"; NicknameGType *hit; GType base; GType type; VIPS_ONCE(&once, vips_class_build_hash_cb, NULL); hit = (NicknameGType *) g_hash_table_lookup(vips__object_nickname_table, (void *) nickname); /* We must only search below basename ... check that the cache hit is * in the right part of the tree. */ if (!(base = g_type_from_name(classname))) return 0; if (hit && !hit->duplicate && g_type_is_a(hit->type, base)) type = hit->type; else { const VipsObjectClass *class; if (!(class = vips_class_find(basename, nickname))) return 0; type = G_OBJECT_CLASS_TYPE(class); } return type; } /** * vips_nickname_find: * @type: #GType to search for * * Return the VIPS nickname for a %GType. Handy for language bindings. * * Returns: (transfer none): the class nickname. */ const char * vips_nickname_find(GType type) { gpointer p; VipsObjectClass *class; if (type && (p = g_type_class_ref(type)) && VIPS_IS_OBJECT_CLASS(p) && (class = VIPS_OBJECT_CLASS(p))) return class->nickname; return NULL; } /* The vips_object_local() macro uses this as its callback. */ void vips_object_local_cb(VipsObject *vobject, GObject *gobject) { VIPS_FREEF(g_object_unref, gobject); } typedef struct { VipsObject **array; int n; } VipsObjectLocal; static void vips_object_local_array_cb(VipsObject *parent, VipsObjectLocal *local) { int i; for (i = 0; i < local->n; i++) VIPS_FREEF(g_object_unref, local->array[i]); VIPS_FREEF(g_free, local->array); VIPS_FREEF(g_free, local); } /** * vips_object_local_array: (skip) * @parent: objects unref when this object unrefs * @n: array size * * Make an array of NULL VipsObject pointers. When @parent closes, every * non-NULL pointer in the array will be unreffed and the array will be * freed. Handy for creating a set of temporary images for a function. * * The array is NULL-terminated, ie. contains an extra NULL element at the * end. * * Example: * * |[ * VipsObject **t; * * t = vips_object_local_array(parent, 5); * if (vips_add(a, b, &t[0], NULL) || * vips_invert(t[0], &t[1], NULL) || * vips_add(t[1], t[0], &t[2], NULL) || * vips_costra(t[2], out, NULL)) * return -1; * ]| * * See also: vips_object_local(). * * Returns: an array of NULL pointers of length @n */ VipsObject ** vips_object_local_array(VipsObject *parent, int n) { VipsObjectLocal *local; local = g_new(VipsObjectLocal, 1); local->n = n; /* Make the array 1 too long so we can be sure there's a NULL * terminator. */ local->array = g_new0(VipsObject *, n + 1); g_signal_connect(parent, "close", G_CALLBACK(vips_object_local_array_cb), local); return local->array; } void vips_object_set_static(VipsObject *object, gboolean static_object) { object->static_object = static_object; } static void * vips_object_n_static_cb(VipsObject *object, int *n, void *b) { if (object->static_object) *n += 1; return NULL; } static int vips_object_n_static(void) { int n; n = 0; vips_object_map( (VipsSListMap2Fn) vips_object_n_static_cb, &n, NULL); return n; } static void * vips_object_print_all_cb(VipsObject *object, int *n, void *b) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); char str[32768]; VipsBuf buf = VIPS_BUF_STATIC(str); fprintf(stderr, "%d) %s (%p)", *n, G_OBJECT_TYPE_NAME(object), object); if (object->local_memory) fprintf(stderr, " %zd bytes", object->local_memory); fprintf(stderr, ", count=%d", G_OBJECT(object)->ref_count); fprintf(stderr, "\n"); vips_object_summary_class(class, &buf); vips_buf_appends(&buf, ", "); vips_object_summary(object, &buf); fprintf(stderr, "%s\n", vips_buf_all(&buf)); *n += 1; return NULL; } int vips__object_leak(void) { int n_leaks; n_leaks = 0; /* Don't count static objects. */ if (vips__object_all && g_hash_table_size(vips__object_all) > vips_object_n_static()) { fprintf(stderr, "%d objects alive:\n", g_hash_table_size(vips__object_all)); vips_object_map( (VipsSListMap2Fn) vips_object_print_all_cb, &n_leaks, NULL); } return n_leaks; } void vips_object_print_all(void) { (void) vips__object_leak(); (void) vips__type_leak(); } static void * vips_object_sanity_all_cb(VipsObject *object, void *a, void *b) { (void) vips_object_sanity(object); return NULL; } void vips_object_sanity_all(void) { vips_object_map( (VipsSListMap2Fn) vips_object_sanity_all_cb, NULL, NULL); } static void * vips_object_unref_outputs_sub(VipsObject *object, GParamSpec *pspec, VipsArgumentClass *argument_class, VipsArgumentInstance *argument_instance, void *a, void *b) { if ((argument_class->flags & VIPS_ARGUMENT_OUTPUT) && G_IS_PARAM_SPEC_OBJECT(pspec) && argument_instance->assigned) { GObject *value; g_object_get(object, g_param_spec_get_name(pspec), &value, NULL); /* Doing the get refs the object, so unref the get, then unref * again since this an an output object of the operation. */ g_object_unref(value); g_object_unref(value); } return NULL; } /** * vips_object_unref_outputs: * @object: object to drop output refs from * * Unref all assigned output objects. Useful for language bindings. * * After an object is built, all output args are owned by the caller. If * something goes wrong before then, we have to unref the outputs that have * been made so far. This function can also be useful for callers when * they've finished processing outputs themselves. * * See also: vips_cache_operation_build(). */ void vips_object_unref_outputs(VipsObject *object) { (void) vips_argument_map(object, vips_object_unref_outputs_sub, NULL, NULL); } /** * vips_object_get_description: * @object: object to fetch description from * * Fetch the object description. Useful for language bindings. * * @object.description is only available after _build(), which can be too * late. This function fetches from the instance, if possible, but falls back * to the class description if we are too early. * * Returns: the object description */ const char * vips_object_get_description(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); if (object->description) return object->description; else return class->description; } libvips-8.15.1/libvips/iofuncs/operation.c000066400000000000000000001176521454007373500205640ustar00rootroot00000000000000/* base class for all vips operations * * 30/12/14 * - display default/min/max for pspec in usage */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include /** * SECTION: operation * @short_description: the VIPS operation base object class * @stability: Stable * @see_also: object * @include: vips/vips.h * * The #VipsOperation class and associated types and macros. * * #VipsOperation is the base class for all operations in libvips. It builds * on #VipsObject to provide the introspection and command-line interface to * libvips. * * It also maintains a cache of recent operations. See below. * * vips_call(), vips_call_split() and vips_call_split_option_string() are used * by vips to implement the C API. They can execute any #VipsOperation, * passing in a set of required and optional arguments. Normally you would not * use these functions directly: every operation has a tiny wrapper function * which provides type-safety for the required arguments. For example, * vips_embed() is defined as: * * |[ * int * vips_embed(VipsImage *in, VipsImage **out, * int x, int y, int width, int height, ...) * { * va_list ap; * int result; * * va_start(ap, height); * result = vips_call_split("embed", ap, in, out, x, y, width, height); * va_end(ap); * * return result; * } * ]| * * Use vips_call_argv() to run any vips operation from a command-line style * argc/argv array. This is the thing used by the vips main program to * implement the vips command-line interface. * * ## #VipsOperation and reference counting * * After calling a #VipsOperation you are responsible for unreffing any output * objects. For example, consider: * * |[ * VipsImage *im = ...; * VipsImage *t1; * * if (vips_invert(im, &t1, NULL)) * error .. * ]| * * This will invert @im and return a new #VipsImage, @t1. As the caller * of vips_invert(), you are responsible for @t1 and must unref it when you no * longer need it. If vips_invert() fails, no @t1 is returned and you don't * need to do anything. * * If you don't need to use @im for another operation, * you can unref @im immediately after the call. If @im is needed to calculate * @t1, vips_invert() will add a ref to @im and automatically drop it when @t1 * is unreffed. * * Consider running two operations, one after the other. You could write: * * |[ * VipsImage *im = ...; * VipsImage *t1, *t2; * * if (vips_invert(im, &t1, NULL)) { * g_object_unref(im); * return -1; * } * g_object_unref(im); * * if (vips_flip(t1, &t2, VIPS_DIRECTION_HORIZONTAL, NULL)) { * g_object_unref(t1); * return -1; * } * g_object_unref(t1); * ]| * * This is correct, but rather long-winded. libvips provides a handy thing to * make a vector of auto-freeing object references. You can write this as: * * |[ * VipsObject *parent = ...; * VipsImage *im = ...; * VipsImage *t = (VipsImage **) vips_object_local_array(parent, 2); * * if (vips_invert(im, &t[0], NULL) || * vips_flip(t[0], &t[1], VIPS_DIRECTION_HORIZONTAL, NULL)) * return -1; * ]| * * where @parent is some enclosing object which will be unreffed when this * task is complete. vips_object_local_array() makes an array of #VipsObject * (or #VipsImage, in this case) where when @parent is freed, all non-NULL * #VipsObject in the array are also unreffed. * * ## The #VipsOperation cache * * Because all #VipsObject are immutable, they can be cached. The cache is * very simple to use: instead of calling vips_object_build(), call * vips_cache_operation_build(). This function calculates a hash from the * operations's input arguments and looks it up in table of all recent * operations. If there's a hit, the new operation is unreffed, the old * operation reffed, and the old operation returned in place of the new one. * * The cache size is controlled with vips_cache_set_max() and friends. */ /** * VipsOperationFlags: * @VIPS_OPERATION_NONE: no flags * @VIPS_OPERATION_SEQUENTIAL: can work sequentially with a small buffer * @VIPS_OPERATION_NOCACHE: must not be cached * @VIPS_OPERATION_DEPRECATED: a compatibility thing * @VIPS_OPERATION_UNTRUSTED: not hardened for untrusted input * @VIPS_OPERATION_BLOCKED: prevent this operation from running * @VIPS_OPERATION_REVALIDATE: force the operation to run * * Flags we associate with an operation. * * @VIPS_OPERATION_SEQUENTIAL means that the operation works like vips_conv(): * it can process images top-to-bottom with only small non-local * references. * * Every scan-line must be requested, you are not allowed to skip * ahead, but as a special case, the very first request can be for a region * not at the top of the image. In this case, the first part of the image will * be read and discarded * * Every scan-line must be requested, you are not allowed to skip * ahead, but as a special case, the very first request can be for a region * not at the top of the image. In this case, the first part of the image will * be read and discarded * * @VIPS_OPERATION_NOCACHE means that the operation must not be cached by * vips. * * @VIPS_OPERATION_DEPRECATED means this is an old operation kept in vips for * compatibility only and should be hidden from users. * * @VIPS_OPERATION_UNTRUSTED means the operation depends on external libraries * which have not been hardened against attack. It should probably not be used * on untrusted input. Use vips_block_untrusted_set() to block all * untrusted operations. * * @VIPS_OPERATION_BLOCKED means the operation is prevented from executing. Use * vips_operation_block_set() to enable and disable groups of operations. * * @VIPS_OPERATION_REVALIDATE force the operation to run, updating the cache * with the new value. This is used by eg. VipsForeignLoad to implement the * "revalidate" argument. */ /* Abstract base class for operations. */ /* Our signals. */ enum { SIG_INVALIDATE, SIG_LAST }; static guint vips_operation_signals[SIG_LAST] = { 0 }; G_DEFINE_ABSTRACT_TYPE(VipsOperation, vips_operation, VIPS_TYPE_OBJECT); static void vips_operation_finalize(GObject *gobject) { VipsOperation *operation = VIPS_OPERATION(gobject); VIPS_DEBUG_MSG("vips_operation_finalize: %p\n", gobject); if (operation->pixels) g_info(_("%d pixels calculated"), operation->pixels); G_OBJECT_CLASS(vips_operation_parent_class)->finalize(gobject); } static void vips_operation_dispose(GObject *gobject) { VIPS_DEBUG_MSG("vips_operation_dispose: %p\n", gobject); G_OBJECT_CLASS(vips_operation_parent_class)->dispose(gobject); } /* Three basic types of command-line argument. * * INPUTS: things like an input image, there is a filename argument on the * command-line which is used to construct the operation argument. * * NOARG_OUTPUT: things like the result of VipsMax, there's no correspondiong * command-line argument, we just print the value. * * OPTIONS: optional arguments. * * NONE: hide this thing. */ typedef enum { USAGE_INPUTS, USAGE_NOARG_OUTPUT, USAGE_OPTIONS, USAGE_NONE } UsageType; typedef struct { char *message; /* header message on first print */ UsageType type; /* Type of arg to select */ gboolean oftype; /* Show as "of type" */ int n; /* Arg number */ } VipsOperationClassUsage; /* Put an arg into one the categories above. */ static UsageType vips_operation_class_usage_classify(VipsArgumentClass *argument_class) { if (!(argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) || (argument_class->flags & VIPS_ARGUMENT_DEPRECATED)) return USAGE_NONE; if (!(argument_class->flags & VIPS_ARGUMENT_REQUIRED)) return USAGE_OPTIONS; if (vips_argument_class_needsstring(argument_class)) return USAGE_INPUTS; if ((argument_class->flags & VIPS_ARGUMENT_OUTPUT) && !vips_argument_class_needsstring(argument_class)) return USAGE_NOARG_OUTPUT; return USAGE_NONE; } /* Display a set of flags as "a:b:c" */ static void vips__flags_to_str(VipsBuf *buf, GType type, guint value) { GTypeClass *class = g_type_class_ref(type); GFlagsClass *flags = G_FLAGS_CLASS(class); gboolean first; first = TRUE; for (int i = 0; i < flags->n_values; i++) // can't be 0 (would match everything), and all bits // should match all bits in the value, or "all" would always match // everything if (flags->values[i].value && (value & flags->values[i].value) == flags->values[i].value) { if (!first) vips_buf_appends(buf, ":"); first = FALSE; vips_buf_appends(buf, flags->values[i].value_nick); } } static void vips_operation_pspec_usage(VipsBuf *buf, GParamSpec *pspec) { GType type = G_PARAM_SPEC_VALUE_TYPE(pspec); /* These are the pspecs that vips uses that have interesting values. */ if (G_IS_PARAM_SPEC_ENUM(pspec)) { GTypeClass *class = g_type_class_ref(type); GParamSpecEnum *pspec_enum = (GParamSpecEnum *) pspec; GEnumClass *genum; int i; /* Should be impossible, no need to warn. */ if (!class) return; genum = G_ENUM_CLASS(class); vips_buf_appendf(buf, "\t\t\t"); vips_buf_appendf(buf, "%s", _("default enum")); vips_buf_appendf(buf, ": %s\n", vips_enum_nick(type, pspec_enum->default_value)); vips_buf_appendf(buf, "\t\t\t"); vips_buf_appendf(buf, "%s", _("allowed enums")); vips_buf_appendf(buf, ": "); /* -1 since we always have a "last" member. */ for (i = 0; i < genum->n_values - 1; i++) { if (i > 0) vips_buf_appends(buf, ", "); vips_buf_appends(buf, genum->values[i].value_nick); } vips_buf_appendf(buf, "\n"); } if (G_IS_PARAM_SPEC_FLAGS(pspec)) { GTypeClass *class = g_type_class_ref(type); GParamSpecFlags *pspec_flags = (GParamSpecFlags *) pspec; GFlagsClass *gflags; int i; /* Should be impossible, no need to warn. */ if (!class) return; gflags = G_FLAGS_CLASS(class); vips_buf_appendf(buf, "\t\t\t"); vips_buf_appendf(buf, "%s", _("default flags")); vips_buf_appendf(buf, ": "); vips__flags_to_str(buf, type, pspec_flags->default_value); vips_buf_appendf(buf, "\n"); vips_buf_appendf(buf, "\t\t\t"); vips_buf_appendf(buf, "%s", _("allowed flags")); vips_buf_appendf(buf, ": "); for (i = 0; i < gflags->n_values; i++) { if (i > 0) vips_buf_appends(buf, ", "); vips_buf_appends(buf, gflags->values[i].value_nick); } vips_buf_appendf(buf, "\n"); } else if (G_IS_PARAM_SPEC_BOOLEAN(pspec)) { GParamSpecBoolean *pspec_boolean = (GParamSpecBoolean *) pspec; vips_buf_appendf(buf, "\t\t\t"); vips_buf_appendf(buf, "%s", _("default")); vips_buf_appendf(buf, ": %s\n", pspec_boolean->default_value ? "true" : "false"); } else if (G_IS_PARAM_SPEC_DOUBLE(pspec)) { GParamSpecDouble *pspec_double = (GParamSpecDouble *) pspec; vips_buf_appendf(buf, "\t\t\t"); vips_buf_appendf(buf, "%s", _("default")); vips_buf_appendf(buf, ": %g\n", pspec_double->default_value); vips_buf_appendf(buf, "\t\t\t"); vips_buf_appendf(buf, "%s", _("min")); vips_buf_appendf(buf, ": %g, ", pspec_double->minimum); vips_buf_appendf(buf, "%s", _("max")); vips_buf_appendf(buf, ": %g\n", pspec_double->maximum); } else if (G_IS_PARAM_SPEC_INT(pspec)) { GParamSpecInt *pspec_int = (GParamSpecInt *) pspec; vips_buf_appendf(buf, "\t\t\t"); vips_buf_appendf(buf, "%s", _("default")); vips_buf_appendf(buf, ": %d\n", pspec_int->default_value); vips_buf_appendf(buf, "\t\t\t"); vips_buf_appendf(buf, "%s", _("min")); vips_buf_appendf(buf, ": %d, ", pspec_int->minimum); vips_buf_appendf(buf, "%s", _("max")); vips_buf_appendf(buf, ": %d\n", pspec_int->maximum); } } static void * vips_operation_class_usage_arg(VipsObjectClass *object_class, GParamSpec *pspec, VipsArgumentClass *argument_class, VipsBuf *buf, VipsOperationClassUsage *usage) { if (usage->type == vips_operation_class_usage_classify(argument_class)) { if (usage->message && usage->n == 0) vips_buf_appendf(buf, "%s\n", usage->message); if (usage->oftype) { vips_buf_appendf(buf, " %-12s - %s, %s %s\n", g_param_spec_get_name(pspec), g_param_spec_get_blurb(pspec), (argument_class->flags & VIPS_ARGUMENT_INPUT) ? _("input") : _("output"), g_type_name( G_PARAM_SPEC_VALUE_TYPE(pspec))); vips_operation_pspec_usage(buf, pspec); } else { if (usage->n > 0) vips_buf_appends(buf, " "); vips_buf_appends(buf, g_param_spec_get_name(pspec)); } usage->n += 1; } return NULL; } static void vips_operation_usage(VipsOperationClass *class, VipsBuf *buf) { VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class); VipsOperationClassUsage usage; vips_buf_appendf(buf, "%s\n", object_class->description); vips_buf_appendf(buf, "usage:\n"); /* First pass through args: show the required names. */ vips_buf_appendf(buf, " %s ", object_class->nickname); usage.message = NULL; usage.type = USAGE_INPUTS; usage.oftype = FALSE; usage.n = 0; vips_argument_class_map(object_class, (VipsArgumentClassMapFn) vips_operation_class_usage_arg, buf, &usage); vips_buf_appends(buf, " [--option-name option-value ...]\n"); /* Show required types. */ usage.message = "where:"; usage.type = USAGE_INPUTS; usage.oftype = TRUE; usage.n = 0; vips_argument_class_map(object_class, (VipsArgumentClassMapFn) vips_operation_class_usage_arg, buf, &usage); /* Show outputs with no input arg (eg. output maximum value for * vips_max()). */ usage.message = "outputs:"; usage.type = USAGE_NOARG_OUTPUT; usage.oftype = TRUE; usage.n = 0; vips_argument_class_map(object_class, (VipsArgumentClassMapFn) vips_operation_class_usage_arg, buf, &usage); /* Show optional args. */ usage.message = "optional arguments:"; usage.type = USAGE_OPTIONS; usage.oftype = TRUE; usage.n = 0; vips_argument_class_map(object_class, (VipsArgumentClassMapFn) vips_operation_class_usage_arg, buf, &usage); /* Show flags. */ if (class->flags) { GFlagsValue *value; VipsOperationFlags flags; GFlagsClass *flags_class = g_type_class_ref(VIPS_TYPE_OPERATION_FLAGS); vips_buf_appendf(buf, "operation flags: "); flags = class->flags; while (flags && (value = g_flags_get_first_value(flags_class, flags))) { vips_buf_appendf(buf, "%s ", value->value_nick); flags &= ~value->value; } vips_buf_appends(buf, "\n"); } } static void * vips_operation_call_argument(VipsObject *object, GParamSpec *pspec, VipsArgumentClass *argument_class, VipsArgumentInstance *argument_instance, void *a, void *b) { VipsArgument *argument = (VipsArgument *) argument_class; printf(" %s: offset = %d ", g_param_spec_get_name(argument->pspec), argument_class->offset); if (argument_class->flags & VIPS_ARGUMENT_REQUIRED) printf("required "); if (argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) printf("construct "); if (argument_class->flags & VIPS_ARGUMENT_SET_ONCE) printf("set-once "); if (argument_instance->assigned) printf("assigned "); printf("\n"); return NULL; } static void vips_operation_dump(VipsObject *object, VipsBuf *buf) { VipsOperation *operation = VIPS_OPERATION(object); VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(object); if (operation->found_hash) printf("hash = %x\n", operation->hash); printf("%s args:\n", object_class->nickname); vips_argument_map(VIPS_OBJECT(operation), vips_operation_call_argument, NULL, NULL); VIPS_OBJECT_CLASS(vips_operation_parent_class)->dump(object, buf); } static void * vips_operation_vips_operation_print_summary_arg(VipsObject *object, GParamSpec *pspec, VipsArgumentClass *argument_class, VipsArgumentInstance *argument_instance, void *a, void *b) { VipsBuf *buf = (VipsBuf *) a; /* Just assigned input and output construct args. _summary() is used * for things like cache tracing, so it's useful to show output args. */ if (((argument_class->flags & VIPS_ARGUMENT_INPUT) || (argument_class->flags & VIPS_ARGUMENT_OUTPUT)) && (argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) && argument_instance->assigned) { const char *name = g_param_spec_get_name(pspec); GType type = G_PARAM_SPEC_VALUE_TYPE(pspec); GValue gvalue = G_VALUE_INIT; char *str; g_value_init(&gvalue, type); g_object_get_property(G_OBJECT(object), name, &gvalue); str = g_strdup_value_contents(&gvalue); vips_buf_appendf(buf, " %s=%s", name, str); g_free(str); g_value_unset(&gvalue); } return NULL; } static int vips_operation_build(VipsObject *object) { VipsOperationClass *class = VIPS_OPERATION_GET_CLASS(object); #ifdef VIPS_DEBUG printf("vips_operation_build: "); vips_object_print_name(object); printf("\n"); #endif /*VIPS_DEBUG*/ if (class->flags & VIPS_OPERATION_BLOCKED) { vips_error(VIPS_OBJECT_CLASS(class)->nickname, "%s", _("operation is blocked")); return -1; } if (VIPS_OBJECT_CLASS(vips_operation_parent_class)->build(object)) return -1; return 0; } static void vips_operation_summary(VipsObject *object, VipsBuf *buf) { VipsOperation *operation = VIPS_OPERATION(object); VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(object); vips_buf_appendf(buf, "%s", object_class->nickname); vips_argument_map(VIPS_OBJECT(operation), vips_operation_vips_operation_print_summary_arg, buf, NULL); vips_buf_appends(buf, " -"); VIPS_OBJECT_CLASS(vips_operation_parent_class)->summary(object, buf); } static VipsOperationFlags vips_operation_real_get_flags(VipsOperation *operation) { VipsOperationClass *class = VIPS_OPERATION_GET_CLASS(operation); return class->flags; } static void vips_operation_class_init(VipsOperationClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->finalize = vips_operation_finalize; gobject_class->dispose = vips_operation_dispose; vobject_class->build = vips_operation_build; vobject_class->summary = vips_operation_summary; vobject_class->dump = vips_operation_dump; vobject_class->nickname = "operation"; vobject_class->description = _("operations"); class->usage = vips_operation_usage; class->get_flags = vips_operation_real_get_flags; vips_operation_signals[SIG_INVALIDATE] = g_signal_new("invalidate", G_TYPE_FROM_CLASS(class), G_SIGNAL_RUN_LAST, G_STRUCT_OFFSET(VipsOperationClass, invalidate), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } static void vips_operation_init(VipsOperation *operation) { } /** * vips_operation_get_flags: * @operation: operation to fetch flags from * * Returns the set of flags for this operation. * * Returns: 0 on success, or -1 on error. */ VipsOperationFlags vips_operation_get_flags(VipsOperation *operation) { VipsOperationClass *class = VIPS_OPERATION_GET_CLASS(operation); return class->get_flags(operation); } /** * vips_operation_class_print_usage: (skip) * @operation_class: class to print usage for * * Print a usage message for the operation to stdout. */ void vips_operation_class_print_usage(VipsOperationClass *operation_class) { char str[4096]; VipsBuf buf = VIPS_BUF_STATIC(str); operation_class->usage(operation_class, &buf); printf("%s", vips_buf_all(&buf)); } void vips_operation_invalidate(VipsOperation *operation) { #ifdef VIPS_DEBUG printf("vips_operation_invalidate: %p\n", operation); vips_object_print_summary(VIPS_OBJECT(operation)); #endif /*VIPS_DEBUG*/ g_signal_emit(operation, vips_operation_signals[SIG_INVALIDATE], 0); } /** * vips_operation_new: (constructor) * @name: nickname of operation to create * * Return a new #VipsOperation with the specified nickname. Useful for * language bindings. * * You'll need to set any arguments and build the operation before you can use * it. See vips_call() for a higher-level way to make new operations. * * Returns: (transfer full): the new operation. */ VipsOperation * vips_operation_new(const char *name) { GType type; VipsObject *object; VipsOperation *operation; vips_check_init(); if (!(type = vips_type_find("VipsOperation", name))) { vips_error("VipsOperation", _("class \"%s\" not found"), name); return NULL; } if (!(object = g_object_new(type, NULL))) { vips_error("VipsOperation", _("\"%s\" is not an instantiable class"), name); return NULL; } operation = VIPS_OPERATION(object); VIPS_DEBUG_MSG("vips_operation_new: %s (%p)\n", name, operation); return operation; } /* Some systems do not have va_copy() ... this might work (it does on MSVC, * apparently). * * FIXME ... this should be in configure.in */ #ifndef va_copy #define va_copy(d, s) ((d) = (s)) #endif static int vips_operation_set_valist_required(VipsOperation *operation, va_list ap) { VIPS_DEBUG_MSG("vips_operation_set_valist_required:\n"); /* Set required input arguments. Can't use vips_argument_map here * :-( because passing va_list by reference is not portable. */ VIPS_ARGUMENT_FOR_ALL(operation, pspec, argument_class, argument_instance) { g_assert(argument_instance); /* We skip deprecated required args. There will be a new, * renamed arg in the same place. */ if ((argument_class->flags & VIPS_ARGUMENT_REQUIRED) && !(argument_class->flags & VIPS_ARGUMENT_DEPRECATED)) { VIPS_ARGUMENT_COLLECT_SET(pspec, argument_class, ap); #ifdef VIPS_DEBUG { char *str; str = g_strdup_value_contents(&value); VIPS_DEBUG_MSG("\t%s = %s\n", g_param_spec_get_name(pspec), str); g_free(str); } #endif /*VIPS_DEBUG */ g_object_set_property(G_OBJECT(operation), g_param_spec_get_name(pspec), &value); VIPS_ARGUMENT_COLLECT_GET(pspec, argument_class, ap); #ifdef VIPS_DEBUG printf("\tskipping arg %p for %s\n", arg, g_param_spec_get_name(pspec)); #endif /*VIPS_DEBUG */ VIPS_ARGUMENT_COLLECT_END } } VIPS_ARGUMENT_FOR_ALL_END return 0; } static int vips_operation_get_valist_required(VipsOperation *operation, va_list ap) { VIPS_DEBUG_MSG("vips_operation_get_valist_required:\n"); /* Extract output arguments. Can't use vips_argument_map here * :-( because passing va_list by reference is not portable. */ VIPS_ARGUMENT_FOR_ALL(operation, pspec, argument_class, argument_instance) { if ((argument_class->flags & VIPS_ARGUMENT_REQUIRED)) { VIPS_ARGUMENT_COLLECT_SET(pspec, argument_class, ap); VIPS_ARGUMENT_COLLECT_GET(pspec, argument_class, ap); if (!argument_instance->assigned) continue; #ifdef VIPS_DEBUG printf("\twriting %s to %p\n", g_param_spec_get_name(pspec), arg); #endif /*VIPS_DEBUG */ /* It'd be nice to be able to test for arg being a * valid gobject pointer, since passing in a valid * pointer (and having us destroy it) is a common * error and a cause of hard-to-find leaks. * * Unfortunately, G_IS_OBJECT() can't be given an * arbitrary pointer for testing -- you're very likely * to get coredumps. */ g_object_get(G_OBJECT(operation), g_param_spec_get_name(pspec), arg, NULL); /* If the pspec is an object, that will up the ref * count. We want to hand over the ref, so we have to * knock it down again. */ if (G_IS_PARAM_SPEC_OBJECT(pspec)) { GObject *object; object = *((GObject **) arg); g_object_unref(object); } VIPS_ARGUMENT_COLLECT_END } } VIPS_ARGUMENT_FOR_ALL_END return 0; } static int vips_operation_get_valist_optional(VipsOperation *operation, va_list ap) { char *name; VIPS_DEBUG_MSG("vips_operation_get_valist_optional:\n"); for (name = va_arg(ap, char *); name; name = va_arg(ap, char *)) { GParamSpec *pspec; VipsArgumentClass *argument_class; VipsArgumentInstance *argument_instance; VIPS_DEBUG_MSG("\tname = '%s' (%p)\n", name, name); if (vips_object_get_argument(VIPS_OBJECT(operation), name, &pspec, &argument_class, &argument_instance)) return -1; VIPS_ARGUMENT_COLLECT_SET(pspec, argument_class, ap); /* We must collect input args as we walk the name/value list, * but we don't do anything with them. */ VIPS_ARGUMENT_COLLECT_GET(pspec, argument_class, ap); /* Here's an output arg. */ #ifdef VIPS_DEBUG printf("\twriting %s to %p\n", g_param_spec_get_name(pspec), arg); #endif /*VIPS_DEBUG */ /* If the dest pointer is NULL, skip the read. */ if (arg) { g_object_get(G_OBJECT(operation), g_param_spec_get_name(pspec), arg, NULL); /* If the pspec is an object, that will up * the ref count. We want to hand over the * ref, so we have to knock it down again. */ if (G_IS_PARAM_SPEC_OBJECT(pspec)) { GObject *object; object = *((GObject **) arg); g_object_unref(object); } } VIPS_ARGUMENT_COLLECT_END } return 0; } /** * vips_call_required_optional: * @operation: the operation to execute * @required: %va_list of required arguments * @optional: NULL-terminated %va_list of name / value pairs * * This is the main entry point for the C and C++ varargs APIs. @operation * is executed, supplying @required and @optional arguments. * * Beware, this can change @operation to point at an old, cached one. * * Returns: 0 on success, -1 on error */ int vips_call_required_optional(VipsOperation **operation, va_list required, va_list optional) { int result; va_list a; va_list b; /* We need to be able to walk required and optional twice. On x64 gcc, * vips_operation_set_valist_required() etc. will destructively alter * the passed-in va_list. We make a copy and walk that instead. */ va_copy(a, required); va_copy(b, optional); result = vips_operation_set_valist_required(*operation, a) || vips_object_set_valist(VIPS_OBJECT(*operation), b); va_end(a); va_end(b); if (result) return -1; /* Build from cache. */ if (vips_cache_operation_buildp(operation)) return -1; /* Walk args again, writing output. */ va_copy(a, required); va_copy(b, optional); result = vips_operation_get_valist_required(*operation, required) || vips_operation_get_valist_optional(*operation, optional); va_end(a); va_end(b); return result; } static int vips_call_by_name(const char *operation_name, const char *option_string, va_list required, va_list optional) { VipsOperation *operation; int result; VIPS_DEBUG_MSG("vips_call_by_name: starting for %s ...\n", operation_name); if (!(operation = vips_operation_new(operation_name))) return -1; /* Set str options before vargs options, so the user can't override * things we set deliberately. */ if (option_string && vips_object_set_from_string(VIPS_OBJECT(operation), option_string)) { vips_object_unref_outputs(VIPS_OBJECT(operation)); g_object_unref(operation); return -1; } result = vips_call_required_optional(&operation, required, optional); /* Build failed: junk args and back out. */ if (result) { vips_object_unref_outputs(VIPS_OBJECT(operation)); g_object_unref(operation); return -1; } /* The operation we have built should now have been reffed by one of * its arguments or have finished its work. Either way, we can unref. */ g_object_unref(operation); return result; } /** * vips_call: * @operation_name: name of operation to call * @...: required args, then a %NULL-terminated list of argument/value pairs * * vips_call() calls the named operation, passing in required arguments and * then setting any optional ones from the remainder of the arguments as a set * of name/value pairs. * * For example, vips_embed() takes six required arguments, @in, @out, @x, @y, * @width, @height, and has two optional arguments, @extend and @background. * You can run it with vips_call() like this: * * |[ * VipsImage *in = ... * VipsImage *out; * * if (vips_call("embed", in, &out, 10, 10, 100, 100, * "extend", VIPS_EXTEND_COPY, * NULL)) * ... error * ]| * * Normally of course you'd just use the vips_embed() wrapper function and get * type-safety for the required arguments. * * See also: vips_call_split(), vips_call_options(). * * Returns: 0 on success, -1 on error */ int vips_call(const char *operation_name, ...) { VipsOperation *operation; int result; va_list required; va_list optional; if (!(operation = vips_operation_new(operation_name))) return -1; /* We have to break the va_list into separate required and optional * components. * * Note the start, grab the required, then copy and reuse. */ va_start(required, operation_name); va_copy(optional, required); VIPS_ARGUMENT_FOR_ALL(operation, pspec, argument_class, argument_instance) { g_assert(argument_instance); if ((argument_class->flags & VIPS_ARGUMENT_REQUIRED)) { VIPS_ARGUMENT_COLLECT_SET(pspec, argument_class, optional); VIPS_ARGUMENT_COLLECT_GET(pspec, argument_class, optional); VIPS_ARGUMENT_COLLECT_END } } VIPS_ARGUMENT_FOR_ALL_END /* We just needed this operation for the arg loop. */ g_object_unref(operation); result = vips_call_by_name(operation_name, NULL, required, optional); va_end(required); va_end(optional); return result; } int vips_call_split(const char *operation_name, va_list optional, ...) { int result; va_list required; va_start(required, optional); result = vips_call_by_name(operation_name, NULL, required, optional); va_end(required); return result; } int vips_call_split_option_string(const char *operation_name, const char *option_string, va_list optional, ...) { int result; va_list required; va_start(required, optional); result = vips_call_by_name(operation_name, option_string, required, optional); va_end(required); return result; } static void * vips_call_find_pspec(VipsObject *object, GParamSpec *pspec, VipsArgumentClass *argument_class, VipsArgumentInstance *argument_instance, void *a, void *b) { const char *name = (const char *) a; /* One char names we assume are "-x" style abbreviations, longer names * we match the whole string. */ if (!(argument_class->flags & VIPS_ARGUMENT_REQUIRED) && (argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) && !argument_instance->assigned) if ((strlen(name) == 1 && g_param_spec_get_name(pspec)[0] == name[0]) || strcmp(g_param_spec_get_name(pspec), name) == 0) return argument_instance; return NULL; } /* Keep this stuff around for output args. */ typedef struct _VipsCallOptionOutput { VipsArgumentInstance *argument_instance; char *value; } VipsCallOptionOutput; static int vips_call_option_output(VipsObject *object, VipsCallOptionOutput *output) { VipsArgumentInstance *argument_instance = output->argument_instance; GParamSpec *pspec = ((VipsArgument *) argument_instance)->pspec; int result; /* Don't look at the output arg if _build() hasn't run successfully, it * probably won't have been set. */ result = 0; if (object->constructed) result = vips_object_get_argument_to_string(object, g_param_spec_get_name(pspec), output->value); return result; } static void vips_call_option_output_free(VipsObject *object, VipsCallOptionOutput *output) { VIPS_FREE(output->value); g_free(output); } static gboolean vips_call_options_set(const gchar *option_name, const gchar *value, gpointer data, GError **error) { VipsOperation *operation = (VipsOperation *) data; const char *name; VipsArgumentInstance *argument_instance; VipsArgumentClass *argument_class; GParamSpec *pspec; VIPS_DEBUG_MSG("vips_call_options_set: %s = %s\n", option_name, value); /* Remove any leading "--" from the option name. */ for (name = option_name; *name == '-'; name++) ; if (!(argument_instance = (VipsArgumentInstance *) vips_argument_map( VIPS_OBJECT(operation), vips_call_find_pspec, (void *) name, NULL))) { vips_error(VIPS_OBJECT_GET_CLASS(operation)->nickname, _("unknown argument '%s'"), name); vips_error_g(error); return FALSE; } argument_class = argument_instance->argument_class; pspec = ((VipsArgument *) argument_instance)->pspec; if ((argument_class->flags & VIPS_ARGUMENT_INPUT)) { if (vips_object_set_argument_from_string( VIPS_OBJECT(operation), g_param_spec_get_name(pspec), value)) { vips_error_g(error); return FALSE; } #ifdef VIPS_DEBUG { GType type = G_PARAM_SPEC_VALUE_TYPE(pspec); GValue gvalue = G_VALUE_INIT; char *str; g_value_init(&gvalue, type); g_object_get_property(G_OBJECT(operation), g_param_spec_get_name(pspec), &gvalue); str = g_strdup_value_contents(&gvalue); VIPS_DEBUG_MSG("\tGValue %s = %s\n", g_param_spec_get_name(pspec), str); g_free(str); g_value_unset(&gvalue); } #endif /*VIPS_DEBUG*/ } else if ((argument_class->flags & VIPS_ARGUMENT_OUTPUT)) { VipsCallOptionOutput *output; /* We can't do output now, we have to attach a callback to do * the processing after the operation has run. */ output = g_new(VipsCallOptionOutput, 1); output->argument_instance = argument_instance; output->value = g_strdup(value); g_signal_connect(operation, "postbuild", G_CALLBACK(vips_call_option_output), output); g_signal_connect(operation, "close", G_CALLBACK(vips_call_option_output_free), output); } return TRUE; } static void * vips_call_options_add(VipsObject *object, GParamSpec *pspec, VipsArgumentClass *argument_class, VipsArgumentInstance *argument_instance, void *a, void *b) { GOptionGroup *group = (GOptionGroup *) a; if (!(argument_class->flags & VIPS_ARGUMENT_REQUIRED) && (argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) && !argument_instance->assigned) { const char *name = g_param_spec_get_name(pspec); gboolean needs_string = vips_object_argument_needsstring(object, name); GOptionEntry entry[2]; entry[0].long_name = name; entry[0].description = g_param_spec_get_blurb(pspec); /* Don't set short names for deprecated args. */ if (argument_class->flags & VIPS_ARGUMENT_DEPRECATED) entry[0].short_name = '\0'; else entry[0].short_name = name[0]; entry[0].flags = 0; if (!needs_string) entry[0].flags |= G_OPTION_FLAG_NO_ARG; if (argument_class->flags & VIPS_ARGUMENT_DEPRECATED) entry[0].flags |= G_OPTION_FLAG_HIDDEN; entry[0].arg = G_OPTION_ARG_CALLBACK; entry[0].arg_data = (gpointer) vips_call_options_set; if (needs_string) entry[0].arg_description = g_type_name(G_PARAM_SPEC_VALUE_TYPE(pspec)); else entry[0].arg_description = NULL; entry[1].long_name = NULL; VIPS_DEBUG_MSG("vips_call_options_add: adding %s\n", name); g_option_group_add_entries(group, &entry[0]); } return NULL; } void vips_call_options(GOptionGroup *group, VipsOperation *operation) { (void) vips_argument_map(VIPS_OBJECT(operation), vips_call_options_add, group, NULL); } /* What we track during an argv call. */ typedef struct _VipsCall { VipsOperation *operation; int argc; char **argv; int i; } VipsCall; static const char * vips_call_get_arg(VipsCall *call, int i) { if (i < 0 || i >= call->argc) { vips_error(VIPS_OBJECT_GET_CLASS(call->operation)->nickname, "%s", _("too few arguments")); return NULL; } return call->argv[i]; } static void * vips_call_argv_input(VipsObject *object, GParamSpec *pspec, VipsArgumentClass *argument_class, VipsArgumentInstance *argument_instance, void *a, void *b) { VipsCall *call = (VipsCall *) a; /* Loop over all required construct args. */ if ((argument_class->flags & VIPS_ARGUMENT_REQUIRED) && (argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) && !(argument_class->flags & VIPS_ARGUMENT_DEPRECATED)) { const char *name = g_param_spec_get_name(pspec); if ((argument_class->flags & VIPS_ARGUMENT_INPUT)) { const char *arg; if (!(arg = vips_call_get_arg(call, call->i)) || vips_object_set_argument_from_string(object, name, arg)) return pspec; call->i += 1; } else if ((argument_class->flags & VIPS_ARGUMENT_OUTPUT)) { if (vips_object_argument_needsstring(object, name)) call->i += 1; } } return NULL; } static void * vips_call_argv_output(VipsObject *object, GParamSpec *pspec, VipsArgumentClass *argument_class, VipsArgumentInstance *argument_instance, void *a, void *b) { VipsCall *call = (VipsCall *) a; /* Loop over all required construct args. */ if ((argument_class->flags & VIPS_ARGUMENT_REQUIRED) && (argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) && !(argument_class->flags & VIPS_ARGUMENT_DEPRECATED)) { if ((argument_class->flags & VIPS_ARGUMENT_INPUT)) call->i += 1; else if ((argument_class->flags & VIPS_ARGUMENT_OUTPUT)) { const char *name = g_param_spec_get_name(pspec); const char *arg; arg = NULL; if (vips_object_argument_needsstring(object, name)) { arg = vips_call_get_arg(call, call->i); if (!arg) return pspec; call->i += 1; } if (vips_object_get_argument_to_string(object, name, arg)) return pspec; } } return NULL; } /* Our main command-line entry point. Optional args should have been set by * the GOption parser already, see above. * * We don't create the operation, so we must not unref it. The caller must * unref on error too. The caller must also call vips_object_unref_outputs() on * all code paths. */ int vips_call_argv(VipsOperation *operation, int argc, char **argv) { VipsCall call; g_assert(argc >= 0); #ifdef VIPS_DEBUG printf("vips_call_argv: "); vips_object_print_name(VIPS_OBJECT(operation)); printf("\n"); { int i; for (i = 0; i < argc; i++) printf("%d) %s\n", i, argv[i]); } #endif /*VIPS_DEBUG*/ call.operation = operation; call.argc = argc; call.argv = argv; call.i = 0; if (vips_argument_map(VIPS_OBJECT(operation), vips_call_argv_input, &call, NULL)) return -1; /* Any unused arguments? We must fail. Consider eg. "vips bandjoin a b * c". This would overwrite b with a and ignore c, potentially * disastrous. */ if (argc > call.i) { vips_error(VIPS_OBJECT_GET_CLASS(operation)->nickname, "%s", _("too many arguments")); return -1; } /* We can't use the operation cache, we need to be able to change the * operation pointer. The cache probably wouldn't help anyway. */ if (vips_object_build(VIPS_OBJECT(operation))) return -1; /* We're not using the cache, so we need to print the trace line. */ if (vips__cache_trace) { printf("vips cache : "); vips_object_print_summary(VIPS_OBJECT(operation)); } call.i = 0; if (vips_argument_map(VIPS_OBJECT(operation), vips_call_argv_output, &call, NULL)) return -1; return 0; } static void * vips_operation_block_set_operation(VipsOperationClass *class, gboolean *state) { g_assert(VIPS_IS_OPERATION_CLASS(class)); #ifdef VIPS_DEBUG if (((class->flags & VIPS_OPERATION_BLOCKED) != 0) != *state) VIPS_DEBUG_MSG("vips_operation_block_set_operation: " "setting block state on %s = %d\n", VIPS_OBJECT_CLASS(class)->nickname, *state); #endif if (*state) class->flags |= VIPS_OPERATION_BLOCKED; else class->flags &= ~VIPS_OPERATION_BLOCKED; return NULL; } /** * vips_operation_block_set: * @name: set block state at this point and below * @state: the block state to set * * Set the block state on all operations in the libvips class hierarchy at * @name and below. * * For example: * * |[ * vips_operation_block_set("VipsForeignLoad", TRUE); * vips_operation_block_set("VipsForeignLoadJpeg", FALSE); * ]| * * Will block all load operations, except JPEG. * * Use `vips -l` at the command-line to see the class hierarchy. * * This call does nothing if the named operation is not found. * * See also: vips_block_untrusted_set(). */ void vips_operation_block_set(const char *name, gboolean state) { GType base; if ((base = g_type_from_name(name)) && g_type_is_a(base, VIPS_TYPE_OPERATION)) vips_class_map_all(base, (VipsClassMapFn) vips_operation_block_set_operation, &state); } libvips-8.15.1/libvips/iofuncs/rect.c000066400000000000000000000130551454007373500175110ustar00rootroot00000000000000/* Simple rectangle algebra. Should build rectangle list algebra on top of * this. * * J. Cupitt, 8/4/93. * * 17/3/11 * - move to vips_ prefix * - gtk-doc comments */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include /** * SECTION: rectangle * @short_description: the VIPS rectangle class * @stability: Stable * @see_also: region * @include: vips/vips.h * * The #VipsRect class and associated types and macros. */ /** * VipsRect: * @left: left edge of rectangle * @top: top edge of rectangle * @width: width of rectangle * @height: height of rectangle * * A #VipsRect is a rectangular area of pixels. This is a struct for * performing simple rectangle algebra. */ /** * vips_rect_includespoint: * @r: rectangle to test * @x: position to test for * @y: position to test for * * Does @r contain point (@x, @y)? * * Returns: %TRUE if @r contains (@x, @y). */ gboolean vips_rect_includespoint(const VipsRect *r, int x, int y) { return r->left <= x && r->top <= y && r->left + r->width > x && r->top + r->height > y; } /** * vips_rect_isempty: * @r: rectangle to test * * Is @r empty? ie. zero width or height. * * Returns: %TRUE if @r contains no pixels. */ gboolean vips_rect_isempty(const VipsRect *r) { return r->width <= 0 || r->height <= 0; } /** * vips_rect_includesrect: * @r1: outer rectangle * @r2: inner rectangle * * Is @r2 a subset of @r1? * * Returns: %TRUE if @r2 is a subset of @r1. */ gboolean vips_rect_includesrect(const VipsRect *r1, const VipsRect *r2) { return r1->left <= r2->left && r1->top <= r2->top && r1->left + r1->width >= r2->left + r2->width && r1->top + r1->height >= r2->top + r2->height; } /** * vips_rect_equalsrect: * @r1: first rectangle * @r2: second rectangle * * Is @r1 equal to @r2? * * Returns: %TRUE if @r1 is equal to @r2. */ gboolean vips_rect_equalsrect(const VipsRect *r1, const VipsRect *r2) { return r1->left == r2->left && r1->top == r2->top && r1->width == r2->width && r1->height == r2->height; } /** * vips_rect_overlapsrect: * @r1: first rectangle * @r2: second rectangle * * Do @r1 and @r2 have a non-empty intersection? * * Returns: %TRUE if @r2 and @r1 overlap. */ gboolean vips_rect_overlapsrect(const VipsRect *r1, const VipsRect *r2) { VipsRect intersection; vips_rect_intersectrect(r1, r2, &intersection); return !vips_rect_isempty(&intersection); } /** * vips_rect_marginadjust: * @r: rectangle to adjust * @n: enlarge by * * Enlarge @r by @n. +1 means out one pixel. */ void vips_rect_marginadjust(VipsRect *r, int n) { r->left -= n; r->top -= n; r->width += 2 * n; r->height += 2 * n; } /** * vips_rect_intersectrect: * @r1: input rectangle 1 * @r2: input rectangle 2 * @out: (out): output rectangle * * Fill @out with the intersection of @r1 and @r2. @out can equal @r1 or @r2. */ void vips_rect_intersectrect(const VipsRect *r1, const VipsRect *r2, VipsRect *out) { int left = VIPS_MAX(r1->left, r2->left); int top = VIPS_MAX(r1->top, r2->top); int right = VIPS_MIN(VIPS_RECT_RIGHT(r1), VIPS_RECT_RIGHT(r2)); int bottom = VIPS_MIN(VIPS_RECT_BOTTOM(r1), VIPS_RECT_BOTTOM(r2)); int width = VIPS_MAX(0, right - left); int height = VIPS_MAX(0, bottom - top); out->left = left; out->top = top; out->width = width; out->height = height; } /** * vips_rect_unionrect: * @r1: input rectangle 1 * @r2: input rectangle 2 * @out: (out): output rectangle * * Fill @out with the bounding box of @r1 and @r2. @out can equal @r1 or @r2. */ void vips_rect_unionrect(const VipsRect *r1, const VipsRect *r2, VipsRect *out) { if (vips_rect_isempty(r1)) *out = *r2; else if (vips_rect_isempty(r2)) *out = *r1; else { int left = VIPS_MIN(r1->left, r2->left); int top = VIPS_MIN(r1->top, r2->top); int width = VIPS_MAX(VIPS_RECT_RIGHT(r1), VIPS_RECT_RIGHT(r2)) - left; int height = VIPS_MAX(VIPS_RECT_BOTTOM(r1), VIPS_RECT_BOTTOM(r2)) - top; out->left = left; out->top = top; out->width = width; out->height = height; } } /** * vips_rect_dup: (skip) * @r: rectangle to duplicate * * Duplicate a rect to the heap. You need to free the result with g_free(). * * Returns: (transfer full): a pointer to copy of @r allocated on the heap. */ VipsRect * vips_rect_dup(const VipsRect *r) { VipsRect *out; if (!(out = VIPS_NEW(NULL, VipsRect))) return NULL; *out = *r; return out; } /** * vips_rect_normalise: * @r: rect to normalise * * Make sure width and height are >0 by moving the origin and flipping the * rect. */ void vips_rect_normalise(VipsRect *r) { if (r->width < 0) { r->left += r->width; r->width *= -1; } if (r->height < 0) { r->top += r->height; r->height *= -1; } } libvips-8.15.1/libvips/iofuncs/region.c000066400000000000000000001417241454007373500200440ustar00rootroot00000000000000/* Make and destroy partial image regions. * * J.Cupitt, 8/4/93. * 1/7/93 JC * - adapted for partial v2 * - ANSIfied * 15/8/94 JC * - start & stop can now be NULL for no-op * 12/5/94 JC * - threads v2.0 added * 22/2/95 JC * - im_region_region() args changed * 22/6/95 JC * - im_region_local() did not always reset the data pointer * 18/11/98 JC * - init a, b, c also now, to help rtc avoid spurious checks * 29/6/01 JC * - im_region_free() now frees immediately * 6/8/02 JC * - new mmap() window regions * 5/11/02 JC * - fix for mmap a local region * 28/2/05 * - shrink local region memory if required much-greater-than allocated * 3/6/05 * - im_region_region() allows Bands and BandFmt to differ, provided * sizeof( pel ) is the same ... makes im_copy_morph() work * 30/10/06 * - switch to im_window_t for mmap window stuff * 29/11/06 * - switch to im_buffer_t for local mem buffer stuff * 19/1/07 * - im_region_image() only sets r, not whole image * 1'2'07 * - gah, im_region_image() could still break (thanks Mikkel) * 23/7/08 * - added im_region_print() * 7/10/09 * - gtkdoc comments * 5/3/10 * - move invalid stuff to region * 3/3/11 * - move on top of VipsObject, rename as VipsRegion * 23/2/17 * - multiply transparent images through alpha in vips_region_shrink() * 13/6/18 harukizaemon * - add VipsRegionShrink parameter to vips_region_shrink() * 9/6/19 * - saner behaviour for vips_region_fetch() if the request is partly * outside the image * 22/2/21 f1ac * - fix int overflow in vips_region_copy(), could cause crashes with * very wide images */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_MOVE #define DEBUG_ENVIRONMENT 1 #define DEBUG_CREATE #define DEBUG #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #include #include #include #include #include /** * SECTION: region * @short_description: small, rectangular parts of images * @stability: Stable * @see_also: image, * generate * @include: vips/vips.h * * A #VipsRegion is a small part of an image. You use regions to * read pixels out of images without having to have the whole image in memory * at once. * * A region can be a memory buffer, part of a memory-mapped file, part of some * other image, or part of some other region. * * Regions must be created, used and freed all within the same thread, since * they can reference private per-thread caches. VIPS sanity-checks region * ownership in various places, so you are likely to see g_assert() errors if * you don't follow this rule. * * There * is API to transfer ownership of regions between threads, but hopefully this * is only needed within VIPS, so we don't expose it. Hopefully. */ /** * VipsRegion: * @im: the #VipsImage that this region is defined on * @valid: the #VipsRect of pixels that this region represents * * A small part of a #VipsImage. @valid holds the left/top/width/height of the * area of pixels that are available from the region. * * See also: VIPS_REGION_ADDR(), vips_region_new(), vips_region_prepare(). */ /** * VIPS_REGION_LSKIP: * @R: a #VipsRegion * * Returns: The number of bytes to add to move down a scanline. */ /** * VIPS_REGION_N_ELEMENTS: * @R: a #VipsRegion * * Returns: The number of band elements across a region. */ /** * VIPS_REGION_SIZEOF_LINE: * @R: a #VipsRegion * * Returns: The number of bytes across a region. */ /** * VIPS_REGION_ADDR: * @R: a #VipsRegion * @X: x coordinate * @Y: y coordinate * * This macro returns a pointer to a pixel in a region. The (@X, @Y) * coordinates need to be within the #VipsRect (@R->valid). * * If DEBUG is defined, you get a version that checks bounds for you. * * See also: vips_region_prepare(). * * Returns: The address of pixel (@X,@Y) in @R. */ /** * VIPS_REGION_ADDR_TOPLEFT: * @R: a #VipsRegion * * This macro returns a pointer to the top-left pixel in the #VipsRegion, that * is, the pixel at (@R->valid.left, @R->valid.top). * * See also: vips_region_prepare(). * * Returns: The address of the top-left pixel in the region. */ /* Properties. */ enum { PROP_IMAGE = 1, PROP_LAST }; G_DEFINE_TYPE(VipsRegion, vips_region, VIPS_TYPE_OBJECT); #ifdef VIPS_DEBUG static GSList *vips__regions_all = NULL; #endif /*VIPS_DEBUG*/ static void vips_region_finalize(GObject *gobject) { #ifdef VIPS_DEBUG VIPS_DEBUG_MSG("vips_region_finalize: "); vips_object_print_name(VIPS_OBJECT(gobject)); VIPS_DEBUG_MSG("\n"); #endif /*VIPS_DEBUG*/ #ifdef VIPS_DEBUG g_mutex_lock(vips__global_lock); vips__regions_all = g_slist_remove(vips__regions_all, gobject); g_mutex_unlock(vips__global_lock); #endif /*VIPS_DEBUG*/ G_OBJECT_CLASS(vips_region_parent_class)->finalize(gobject); } /* Call a start function if no sequence is running on this VipsRegion. */ int vips__region_start(VipsRegion *region) { VipsImage *image = region->im; if (!region->seq && image->start_fn) { VIPS_GATE_START("vips__region_start: wait"); g_mutex_lock(image->sslock); VIPS_GATE_STOP("vips__region_start: wait"); region->seq = image->start_fn(image, image->client1, image->client2); g_mutex_unlock(image->sslock); if (!region->seq) { #ifdef DEBUG printf("vips__region_start: start function failed for image %s", image->filename); #endif /*DEBUG*/ return -1; } } return 0; } /* Call a stop function if a sequence is running in this VipsRegion. */ void vips__region_stop(VipsRegion *region) { VipsImage *image = region->im; if (region->seq && image->stop_fn) { int result; VIPS_GATE_START("vips__region_stop: wait"); g_mutex_lock(image->sslock); VIPS_GATE_STOP("vips__region_stop: wait"); result = image->stop_fn(region->seq, image->client1, image->client2); g_mutex_unlock(image->sslock); /* stop function can return an error, but we have nothing we * can really do with it, sadly. */ if (result) g_warning("stop callback failed for image %s", image->filename); region->seq = NULL; } } static void vips_region_dispose(GObject *gobject) { VipsRegion *region = VIPS_REGION(gobject); VipsImage *image = region->im; #ifdef VIPS_DEBUG VIPS_DEBUG_MSG("vips_region_dispose: "); vips_object_print_name(VIPS_OBJECT(gobject)); VIPS_DEBUG_MSG("\n"); #endif /*VIPS_DEBUG*/ vips_object_preclose(VIPS_OBJECT(gobject)); /* Stop this sequence. */ vips__region_stop(region); /* Free any attached memory. */ VIPS_FREEF(vips_window_unref, region->window); VIPS_FREEF(vips_buffer_unref, region->buffer); /* Detach from image. */ VIPS_GATE_START("vips_region_dispose: wait"); g_mutex_lock(image->sslock); VIPS_GATE_STOP("vips_region_dispose: wait"); image->regions = g_slist_remove(image->regions, region); g_mutex_unlock(image->sslock); region->im = NULL; g_object_unref(image); G_OBJECT_CLASS(vips_region_parent_class)->dispose(gobject); } static void vips_region_dump(VipsObject *object, VipsBuf *buf) { VipsRegion *region = VIPS_REGION(object); vips_buf_appendf(buf, "VipsRegion: %p, ", region); vips_buf_appendf(buf, "im = %p, ", region->im); vips_buf_appendf(buf, "valid.left = %d, ", region->valid.left); vips_buf_appendf(buf, "valid.top = %d, ", region->valid.top); vips_buf_appendf(buf, "valid.width = %d, ", region->valid.width); vips_buf_appendf(buf, "valid.height = %d, ", region->valid.height); vips_buf_appendf(buf, "type = %d, ", region->type); vips_buf_appendf(buf, "data = %p, ", region->data); vips_buf_appendf(buf, "bpl = %d, ", region->bpl); vips_buf_appendf(buf, "seq = %p, ", region->seq); vips_buf_appendf(buf, "thread = %p, ", region->thread); vips_buf_appendf(buf, "window = %p, ", region->window); vips_buf_appendf(buf, "buffer = %p, ", region->buffer); vips_buf_appendf(buf, "invalid = %d", region->invalid); VIPS_OBJECT_CLASS(vips_region_parent_class)->dump(object, buf); } static void vips_region_summary(VipsObject *object, VipsBuf *buf) { VipsRegion *region = VIPS_REGION(object); vips_buf_appendf(buf, "VipsRegion: %p, ", region); vips_buf_appendf(buf, "im = %p, ", region->im); vips_buf_appendf(buf, "left = %d, ", region->valid.left); vips_buf_appendf(buf, "top = %d, ", region->valid.top); vips_buf_appendf(buf, "width = %d, ", region->valid.width); vips_buf_appendf(buf, "height = %d", region->valid.height); if (region->buffer && region->buffer->buf) vips_buf_appendf(buf, ", %.3gMB", region->buffer->bsize / (1024 * 1024.0)); VIPS_OBJECT_CLASS(vips_region_parent_class)->summary(object, buf); } /* If a region is being created in one thread (eg. the main thread) and then * used in another (eg. a worker thread), the new thread needs to tell VIPS * to stop sanity g_assert() fails. The previous owner needs to * vips__region_no_ownership() before we can call this. */ void vips__region_take_ownership(VipsRegion *region) { /* Lock so that there's a memory barrier with the thread doing the * vips__region_no_ownership() before us. */ VIPS_GATE_START("vips__region_take_ownership: wait"); g_mutex_lock(region->im->sslock); VIPS_GATE_STOP("vips__region_take_ownership: wait"); if (region->thread != g_thread_self()) { g_assert(region->thread == NULL); /* We don't want to move shared buffers: the other region * using this buffer will still be on the other thread. * Not sure if this will ever happen: if it does, we'll * need to dup the buffer. */ g_assert(!region->buffer || region->buffer->ref_count == 1); region->thread = g_thread_self(); } g_mutex_unlock(region->im->sslock); } void vips__region_check_ownership(VipsRegion *region) { if (region->thread) { g_assert(region->thread == g_thread_self()); if (region->buffer && region->buffer->cache) g_assert(region->thread == region->buffer->cache->thread); } } /* Call this from the relinquishing thread. Removes the buffer (if any) from * this thread's buffer cache. */ void vips__region_no_ownership(VipsRegion *region) { VIPS_GATE_START("vips__region_no_ownership: wait"); g_mutex_lock(region->im->sslock); VIPS_GATE_STOP("vips__region_no_ownership: wait"); vips__region_check_ownership(region); region->thread = NULL; if (region->buffer) vips_buffer_undone(region->buffer); g_mutex_unlock(region->im->sslock); } static int vips_region_build(VipsObject *object) { VipsRegion *region = VIPS_REGION(object); VipsImage *image = region->im; VIPS_DEBUG_MSG("vips_region_build: %p\n", region); if (VIPS_OBJECT_CLASS(vips_region_parent_class)->build(object)) return -1; vips__region_take_ownership(region); /* We're usually inside the ss lock anyway. But be safe ... */ VIPS_GATE_START("vips_region_build: wait"); g_mutex_lock(image->sslock); VIPS_GATE_STOP("vips_region_build: wait"); image->regions = g_slist_prepend(image->regions, region); g_mutex_unlock(image->sslock); return 0; } static void vips_region_class_init(VipsRegionClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->finalize = vips_region_finalize; gobject_class->dispose = vips_region_dispose; vobject_class->summary = vips_region_summary; vobject_class->dump = vips_region_dump; vobject_class->build = vips_region_build; } static void vips_region_init(VipsRegion *region) { region->type = VIPS_REGION_NONE; #ifdef VIPS_DEBUG g_mutex_lock(vips__global_lock); vips__regions_all = g_slist_prepend(vips__regions_all, region); printf("vips_region_init: %d regions in vips\n", g_slist_length(vips__regions_all)); g_mutex_unlock(vips__global_lock); #endif /*VIPS_DEBUG*/ } /** * vips_region_new: (constructor) * @image: image to create this region on * * Create a region. #VipsRegion s start out empty, you need to call * vips_region_prepare() to fill them with pixels. * * See also: vips_region_prepare(). */ VipsRegion * vips_region_new(VipsImage *image) { VipsRegion *region; /* Ref quickly, we want to make sure we keep the image around. * We can't use the property system, we need to be very threaded. */ g_object_ref(image); g_assert(G_OBJECT(image)->ref_count > 1); g_assert(vips_object_sanity(VIPS_OBJECT(image))); region = VIPS_REGION(g_object_new(VIPS_TYPE_REGION, NULL)); region->im = image; if (vips_object_build(VIPS_OBJECT(region))) { VIPS_UNREF(region); return NULL; } g_assert(vips_object_sanity(VIPS_OBJECT(region))); return region; } /* Region should be a pixel buffer. On return, check * reg->buffer->done to see if there are pixels there already. Otherwise, you * need to calculate. */ /** * vips_region_buffer: * @reg: region to operate upon * @r: #VipsRect of pixels you need to be able to address * * The region is transformed so that at least @r pixels are available as a * memory buffer that can be written to. * * Returns: 0 on success, or -1 for error. */ int vips_region_buffer(VipsRegion *reg, const VipsRect *r) { VipsImage *im = reg->im; VipsRect image; VipsRect clipped; vips__region_check_ownership(reg); /* Clip against image. */ image.top = 0; image.left = 0; image.width = im->Xsize; image.height = im->Ysize; vips_rect_intersectrect(r, &image, &clipped); /* Test for empty. */ if (vips_rect_isempty(&clipped)) { vips_error("VipsRegion", "%s", _("valid clipped to nothing")); return -1; } VIPS_FREEF(vips_window_unref, reg->window); /* Have we been asked to drop caches? We want to throw everything * away. * * If not, try to reuse the current buffer. */ if (reg->invalid) { VIPS_FREEF(vips_buffer_unref, reg->buffer); reg->invalid = FALSE; if (!(reg->buffer = vips_buffer_new(im, &clipped))) return -1; } else { /* We combine buffer unref and new buffer ref in one call * to reduce malloc/free cycling. */ if (!(reg->buffer = vips_buffer_unref_ref(reg->buffer, im, &clipped))) return -1; } /* Init new stuff. */ reg->valid = reg->buffer->area; reg->bpl = VIPS_IMAGE_SIZEOF_PEL(im) * reg->buffer->area.width; reg->type = VIPS_REGION_BUFFER; reg->data = reg->buffer->buf; return 0; } /** * vips_region_image: * @reg: region to operate upon * @r: #VipsRect of pixels you need to be able to address * * The region is transformed so that at least @r pixels are available to be * read from the image. The image needs to be a memory buffer or represent a * file on disc that has been mapped or can be mapped. * * Returns: 0 on success, or -1 for error. */ int vips_region_image(VipsRegion *reg, const VipsRect *r) { VipsImage *image = reg->im; VipsRect all; VipsRect clipped; /* Sanity check. */ vips__region_check_ownership(reg); /* Clip against image. */ all.top = 0; all.left = 0; all.width = image->Xsize; all.height = image->Ysize; vips_rect_intersectrect(r, &all, &clipped); if (vips_rect_isempty(&clipped)) { vips_error("VipsRegion", "%s", _("valid clipped to nothing")); return -1; } reg->invalid = FALSE; VIPS_FREEF(vips_buffer_unref, reg->buffer); if (image->data) { /* We have the whole image available ... easy! */ VIPS_FREEF(vips_window_unref, reg->window); /* We can't just set valid = whole image, since this may be an * incompletely calculated memory buffer. Just set valid to r. */ reg->valid = clipped; reg->bpl = VIPS_IMAGE_SIZEOF_LINE(image); reg->data = VIPS_IMAGE_ADDR(image, clipped.left, clipped.top); reg->type = VIPS_REGION_OTHER_IMAGE; } else if (image->dtype == VIPS_IMAGE_OPENIN) { /* No complete image data ... but we can use a rolling window. */ reg->type = VIPS_REGION_WINDOW; if (!(reg->window = vips_window_take(reg->window, image, clipped.top, clipped.height))) return -1; /* Note the area the window actually represents. */ reg->valid.left = 0; reg->valid.top = reg->window->top; reg->valid.width = image->Xsize; reg->valid.height = reg->window->height; reg->bpl = VIPS_IMAGE_SIZEOF_LINE(image); reg->data = reg->window->data; } else { VIPS_FREEF(vips_window_unref, reg->window); vips_error("VipsRegion", "%s", _("bad image type")); return -1; } return 0; } /** * vips_region_region: * @reg: region to operate upon * @dest: region to connect to * @r: #VipsRect of pixels you need to be able to address * @x: position of @r in @dest * @y: position of @r in @dest * * Make VIPS_REGION_ADDR() on @reg go to @dest instead. * * @r is the part of @reg which you want to be able to address (this * effectively becomes the valid field), (@x, @y) is the top LH corner of the * corresponding area in @dest. * * Performs all clipping necessary to ensure that @reg->valid is indeed * valid. * * If the region we attach to is moved or destroyed, we can be left with * dangling pointers! If the region we attach to is on another image, the * two images must have the same sizeof(pel). * * Returns: 0 on success, or -1 for error. */ int vips_region_region(VipsRegion *reg, VipsRegion *dest, const VipsRect *r, int x, int y) { VipsRect image; VipsRect wanted; VipsRect clipped; VipsRect clipped2; VipsRect final; /* Sanity check. */ if (!dest->data) { vips_error("VipsRegion", "%s", _("no pixel data on attached image")); return -1; } if (VIPS_IMAGE_SIZEOF_PEL(dest->im) != VIPS_IMAGE_SIZEOF_PEL(reg->im)) { vips_error("VipsRegion", "%s", _("images do not match in pixel size")); return -1; } vips__region_check_ownership(reg); /* We can't test g_assert(dest->thread == g_thread_self()); * since we can have several threads writing to the same region in * threadgroup. */ /* Clip r against size of the image. */ image.top = 0; image.left = 0; image.width = reg->im->Xsize; image.height = reg->im->Ysize; vips_rect_intersectrect(r, &image, &clipped); /* Translate to dest's coordinate space and clip against the available * pixels. */ wanted.left = x + (clipped.left - r->left); wanted.top = y + (clipped.top - r->top); wanted.width = clipped.width; wanted.height = clipped.height; /* Test that dest->valid is large enough. */ if (!vips_rect_includesrect(&dest->valid, &wanted)) { vips_error("VipsRegion", "%s", _("dest too small")); return -1; } /* Clip against the available pixels. */ vips_rect_intersectrect(&wanted, &dest->valid, &clipped2); /* Translate back to reg's coordinate space and set as valid. */ final.left = r->left + (clipped2.left - wanted.left); final.top = r->top + (clipped2.top - wanted.top); final.width = clipped2.width; final.height = clipped2.height; /* Test for empty. */ if (vips_rect_isempty(&final)) { vips_error("VipsRegion", "%s", _("valid clipped to nothing")); return -1; } /* Init new stuff. */ VIPS_FREEF(vips_buffer_unref, reg->buffer); VIPS_FREEF(vips_window_unref, reg->window); reg->invalid = FALSE; reg->valid = final; reg->bpl = dest->bpl; reg->data = VIPS_REGION_ADDR(dest, clipped2.left, clipped2.top); reg->type = VIPS_REGION_OTHER_REGION; return 0; } /** * vips_region_equalsregion: * @reg1: region to test * @reg2: region to test * * Do two regions point to the same piece of image? ie. * * |[ * VIPS_REGION_ADDR(reg1, x, y) == VIPS_REGION_ADDR(reg2, x, y) && * *VIPS_REGION_ADDR(reg1, x, y) == * *VIPS_REGION_ADDR(reg2, x, y) for all x, y, reg1, reg2. * ]| * * Returns: non-zero on equality. */ int vips_region_equalsregion(VipsRegion *reg1, VipsRegion *reg2) { return reg1->im == reg2->im && vips_rect_equalsrect(®1->valid, ®2->valid) && reg1->data == reg2->data; } /** * vips_region_position: * @reg: region to operate upon * @x: position to move to * @y: position to move to * * Set the position of a region. This only affects reg->valid, ie. the way * pixels are addressed, not reg->data, the pixels which are addressed. Clip * against the size of the image. Do not allow negative positions, or * positions outside the image. * * Returns: 0 on success, or -1 for error. */ int vips_region_position(VipsRegion *reg, int x, int y) { VipsRect req, image, clipped; /* Clip! */ image.top = 0; image.left = 0; image.width = reg->im->Xsize; image.height = reg->im->Ysize; req.top = y; req.left = x; req.width = reg->valid.width; req.height = reg->valid.height; vips_rect_intersectrect(&image, &req, &clipped); if (x < 0 || y < 0 || vips_rect_isempty(&clipped)) { vips_error("VipsRegion", "%s", _("bad position")); return -1; } reg->valid = clipped; reg->invalid = FALSE; return 0; } int vips_region_fill(VipsRegion *reg, const VipsRect *r, VipsRegionFillFn fn, void *a) { g_assert(reg->im->dtype == VIPS_IMAGE_PARTIAL); g_assert(reg->im->generate_fn); /* You'd think we could check reg and see if it already has some of * the pixels we need. If it does, we could copy them and only * generate the new ones. * * However, we usually have neighbouring regions on different threads, * so from the point of view of this thread, we will get no overlaps * on successive prepare requests. */ /* Should have local memory. */ if (vips_region_buffer(reg, r)) return -1; /* Evaluate into out_region, if we've not got calculated pixels. */ if (!reg->buffer->done) { if (fn(reg, a)) return -1; /* Publish our results. */ if (reg->buffer) vips_buffer_done(reg->buffer); } return 0; } #define FILL_LINE(TYPE, Q, N, V) \ { \ int x; \ TYPE *QT = (TYPE *) Q; \ \ for (x = 0; x < (N); x++) \ QT[x] = (V); \ } /** * vips_region_paint: * @reg: region to operate upon * @r: area to paint * @value: value to paint * * Paints @value into @reg covering rectangle @r. * @r is clipped against * @reg->valid. * * For int images, @value is * passed to memset(), so it usually needs to be 0 or 255. For float images, * value is cast to a float and copied in to each band element. * * @r is clipped against * @reg->valid. * * See also: vips_region_black(). */ void vips_region_paint(VipsRegion *reg, const VipsRect *r, int value) { VipsRect clipped; vips_rect_intersectrect(r, ®->valid, &clipped); if (!vips_rect_isempty(&clipped)) { VipsPel *q = VIPS_REGION_ADDR(reg, clipped.left, clipped.top); size_t ls = VIPS_REGION_LSKIP(reg); size_t wd = clipped.width * VIPS_IMAGE_SIZEOF_PEL(reg->im); int y; if (vips_band_format_isint(reg->im->BandFmt)) { for (y = 0; y < clipped.height; y++) { memset((char *) q, value, wd); q += ls; } } else { gboolean iscomplex = vips_band_format_iscomplex(reg->im->BandFmt); int nele = clipped.width * reg->im->Bands * (iscomplex ? 2 : 1); VipsPel *q1; switch (reg->im->BandFmt) { case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_COMPLEX: FILL_LINE(float, q, nele, value); break; case VIPS_FORMAT_DOUBLE: case VIPS_FORMAT_DPCOMPLEX: FILL_LINE(double, q, nele, value); break; default: g_assert_not_reached(); } q1 = q + ls; for (y = 1; y < clipped.height; y++) { memcpy((char *) q1, (char *) q, wd); q1 += ls; } } } } /** * vips_region_paint_pel: * @reg: region to operate upon * @r: area to paint * @ink: value to paint * * Paints @ink into @reg covering rectangle @r. @r is clipped against * @reg->valid. * * @ink should be a byte array of the same size as an image pixel containing * the binary value to write into the pixels. * * See also: vips_region_paint(). */ void vips_region_paint_pel(VipsRegion *reg, const VipsRect *r, const VipsPel *ink) { VipsRect ovl; vips_rect_intersectrect(r, ®->valid, &ovl); if (!vips_rect_isempty(&ovl)) { int ps = VIPS_IMAGE_SIZEOF_PEL(reg->im); int ws = ovl.width * ps; int ls = VIPS_REGION_LSKIP(reg); VipsPel *to, *q; int x, y, z; /* We plot the first line pointwise, then memcpy() it for the * subsequent lines. */ to = VIPS_REGION_ADDR(reg, ovl.left, ovl.top); q = to; for (x = 0; x < ovl.width; x++) { /* Faster than memcpy() for about n<20. */ for (z = 0; z < ps; z++) q[z] = ink[z]; q += ps; } q = to + ls; for (y = 1; y < ovl.height; y++) { memcpy(q, to, ws); q += ls; } } } /** * vips_region_black: * @reg: region to operate upon * * Paints 0 into the valid part of @reg. * * See also: vips_region_paint(). */ void vips_region_black(VipsRegion *reg) { vips_region_paint(reg, ®->valid, 0); } /** * vips_region_copy: * @reg: source region * @dest: (inout): destination region * @r: #VipsRect of pixels you need to copy * @x: position of @r in @dest * @y: position of @r in @dest * * Copy from one region to another. Copy area @r from inside @reg to @dest, * positioning the area of pixels at @x, @y. The two regions must have pixels * which are the same size. * * See also: vips_region_paint(). */ void vips_region_copy(VipsRegion *reg, VipsRegion *dest, const VipsRect *r, int x, int y) { size_t len = VIPS_IMAGE_SIZEOF_PEL(reg->im) * r->width; VipsPel *p = VIPS_REGION_ADDR(reg, r->left, r->top); VipsPel *q = VIPS_REGION_ADDR(dest, x, y); size_t plsk = VIPS_REGION_LSKIP(reg); size_t qlsk = VIPS_REGION_LSKIP(dest); int z; #ifdef DEBUG /* Find the area we will write to in dest. */ VipsRect output; printf("vips_region_copy: sanity check\n"); output.left = x; output.top = y; output.width = r->width; output.height = r->height; /* Must be inside dest->valid. */ g_assert(vips_rect_includesrect(&dest->valid, &output)); /* Check the area we are reading from in reg. */ g_assert(vips_rect_includesrect(®->valid, r)); /* VipsPel size must be the same. */ g_assert(VIPS_IMAGE_SIZEOF_PEL(reg->im) == VIPS_IMAGE_SIZEOF_PEL(dest->im)); #endif /*DEBUG*/ /* Copy the scanlines. * * Special case: if the two sets of scanlines are end-to-end (this * happens if we are copying complete regions) we can do a single * memcpy() for the whole thing. This is a little faster since we * won't have to do unaligned copies. */ if (len == plsk && len == qlsk) memcpy(q, p, len * r->height); else for (z = 0; z < r->height; z++) { memcpy(q, p, len); p += plsk; q += qlsk; } } /* Generate area @target in @to using pixels in @from. * * VIPS_CODING_LABQ only. */ static void vips_region_shrink_labpack(VipsRegion *from, VipsRegion *to, const VipsRect *target) { int ls = VIPS_REGION_LSKIP(from); int x, y; for (y = 0; y < target->height; y++) { VipsPel *p = VIPS_REGION_ADDR(from, target->left * 2, (target->top + y) * 2); VipsPel *q = VIPS_REGION_ADDR(to, target->left, target->top + y); /* Ignore the extra bits for speed. */ for (x = 0; x < target->width; x++) { signed char *sp = (signed char *) p; unsigned char *up = (unsigned char *) p; int l = up[0] + up[4] + up[ls] + up[ls + 4]; int a = sp[1] + sp[5] + sp[ls + 1] + sp[ls + 5]; int b = sp[2] + sp[6] + sp[ls + 2] + sp[ls + 6]; q[0] = (l + 2) >> 2; q[1] = a >> 2; q[2] = b >> 2; q[3] = 0; q += 4; p += 8; } } } #define SHRINK_TYPE_MEAN_INT(TYPE) \ for (x = 0; x < target->width; x++) { \ TYPE *tp = (TYPE *) p; \ TYPE *tp1 = (TYPE *) (p + ls); \ TYPE *tq = (TYPE *) q; \ \ for (z = 0; z < nb; z++) { \ int tot = tp[z] + tp[z + nb] + \ tp1[z] + tp1[z + nb]; \ \ tq[z] = (tot + 2) >> 2; \ } \ \ /* Move on two pels in input. \ */ \ p += ps << 1; \ q += ps; \ } #define SHRINK_TYPE_MEAN_FLOAT(TYPE) \ for (x = 0; x < target->width; x++) { \ TYPE *tp = (TYPE *) p; \ TYPE *tp1 = (TYPE *) (p + ls); \ TYPE *tq = (TYPE *) q; \ \ for (z = 0; z < nb; z++) { \ double tot = tp[z] + tp[z + nb] + \ tp1[z] + tp1[z + nb]; \ \ tq[z] = tot / 4; \ } \ \ /* Move on two pels in input. \ */ \ p += ps << 1; \ q += ps; \ } /* Generate area @target in @to using pixels in @from. Non-complex. */ static void vips_region_shrink_uncoded_mean(VipsRegion *from, VipsRegion *to, const VipsRect *target) { int ls = VIPS_REGION_LSKIP(from); int ps = VIPS_IMAGE_SIZEOF_PEL(from->im); int nb = from->im->Bands; int x, y, z; for (y = 0; y < target->height; y++) { VipsPel *p = VIPS_REGION_ADDR(from, target->left * 2, (target->top + y) * 2); VipsPel *q = VIPS_REGION_ADDR(to, target->left, target->top + y); /* Process this line of pels. */ switch (from->im->BandFmt) { case VIPS_FORMAT_UCHAR: SHRINK_TYPE_MEAN_INT(unsigned char); break; case VIPS_FORMAT_CHAR: SHRINK_TYPE_MEAN_INT(signed char); break; case VIPS_FORMAT_USHORT: SHRINK_TYPE_MEAN_INT(unsigned short); break; case VIPS_FORMAT_SHORT: SHRINK_TYPE_MEAN_INT(signed short); break; case VIPS_FORMAT_UINT: SHRINK_TYPE_MEAN_INT(unsigned int); break; case VIPS_FORMAT_INT: SHRINK_TYPE_MEAN_INT(signed int); break; case VIPS_FORMAT_FLOAT: SHRINK_TYPE_MEAN_FLOAT(float); break; case VIPS_FORMAT_DOUBLE: SHRINK_TYPE_MEAN_FLOAT(double); break; default: g_assert_not_reached(); } } } /* This method is implemented so as to perform well and to always select an * output pixel from one of the input pixels. As such we make only the * following guarantees: * * ONLY works for non-complex uncoded images pixel types * ALWAYS draws from the input values * NEVER interpolates * NOT stable with respect to the ordered set of input values * IS stable with respect to the initial arrangement of input values */ #define SHRINK_TYPE_MEDIAN(TYPE) \ { \ int ls = VIPS_REGION_LSKIP(from); \ \ for (x = 0; x < target->width; x++) { \ TYPE *tp = (TYPE *) p; \ TYPE *tp1 = (TYPE *) (p + ls); \ TYPE *tq = (TYPE *) q; \ \ for (z = 0; z < nb; z++) { \ tq[z] = VIPS_MIN( \ VIPS_MAX(tp[z], tp[z + nb]), \ VIPS_MAX(tp1[z], tp1[z + nb])); \ } \ \ /* Move on two pels in input. \ */ \ p += ps << 1; \ q += ps; \ } \ } /* This method is implemented so as to perform well and to always select an * output pixel from one of the input pixels. As such we make only the * following guarantees: * * ONLY works for non-complex uncoded images pixel types * ALWAYS draws from the input values * NEVER interpolates * NOT stable with respect to the ordered set of input values * IS stable with respect to the initial arrangement of input values */ #define SHRINK_TYPE_MODE(TYPE) \ { \ int ls = VIPS_REGION_LSKIP(from); \ \ for (x = 0; x < target->width; x++) { \ TYPE *tp = (TYPE *) p; \ TYPE *tp1 = (TYPE *) (p + ls); \ TYPE *tq = (TYPE *) q; \ \ for (z = 0; z < nb; z++) { \ TYPE v[] = { tp[z], tp[z + nb], tp1[z], tp1[z + nb] }; \ int b0 = (v[0] == v[1]) | \ (v[0] == v[2]) | \ (v[0] == v[3]); \ int b1 = (v[1] == v[0]) | \ (v[1] == v[2]) | \ (v[1] == v[3]); \ int index = ((~b0) & 0x1) + (~(b0 ^ b1) & 0x1); \ \ tq[z] = v[index]; \ } \ \ p += ps << 1; \ q += ps; \ } \ } #define SHRINK_TYPE_MAX(TYPE) \ { \ int ls = VIPS_REGION_LSKIP(from); \ \ for (x = 0; x < target->width; x++) { \ TYPE *tp = (TYPE *) p; \ TYPE *tp1 = (TYPE *) (p + ls); \ TYPE *tq = (TYPE *) q; \ \ for (z = 0; z < nb; z++) { \ tq[z] = VIPS_MAX( \ VIPS_MAX(tp[z], tp[z + nb]), \ VIPS_MAX(tp1[z], tp1[z + nb])); \ } \ \ p += ps << 1; \ q += ps; \ } \ } #define SHRINK_TYPE_MIN(TYPE) \ { \ int ls = VIPS_REGION_LSKIP(from); \ \ for (x = 0; x < target->width; x++) { \ TYPE *tp = (TYPE *) p; \ TYPE *tp1 = (TYPE *) (p + ls); \ TYPE *tq = (TYPE *) q; \ \ for (z = 0; z < nb; z++) { \ tq[z] = VIPS_MIN( \ VIPS_MIN(tp[z], tp[z + nb]), \ VIPS_MIN(tp1[z], tp1[z + nb])); \ } \ \ p += ps << 1; \ q += ps; \ } \ } #define SHRINK_TYPE_NEAREST(TYPE) \ { \ for (x = 0; x < target->width; x++) { \ TYPE *tp = (TYPE *) p; \ TYPE *tq = (TYPE *) q; \ \ for (z = 0; z < nb; z++) \ tq[z] = tp[z]; \ \ p += ps << 1; \ q += ps; \ } \ } #define VIPS_REGION_SHRINK(OP) \ static void \ vips_region_shrink_uncoded_##OP(VipsRegion *from, \ VipsRegion *to, const VipsRect *target) \ { \ int ps = VIPS_IMAGE_SIZEOF_PEL(from->im); \ int nb = from->im->Bands; \ \ int x, y, z; \ \ for (y = 0; y < target->height; y++) { \ VipsPel *p = VIPS_REGION_ADDR(from, \ target->left * 2, (target->top + y) * 2); \ VipsPel *q = VIPS_REGION_ADDR(to, \ target->left, target->top + y); \ \ /* Process this line of pels. \ */ \ switch (from->im->BandFmt) { \ case VIPS_FORMAT_UCHAR: \ SHRINK_TYPE_##OP(unsigned char); \ break; \ case VIPS_FORMAT_CHAR: \ SHRINK_TYPE_##OP(signed char); \ break; \ case VIPS_FORMAT_USHORT: \ SHRINK_TYPE_##OP(unsigned short); \ break; \ case VIPS_FORMAT_SHORT: \ SHRINK_TYPE_##OP(signed short); \ break; \ case VIPS_FORMAT_UINT: \ SHRINK_TYPE_##OP(unsigned int); \ break; \ case VIPS_FORMAT_INT: \ SHRINK_TYPE_##OP(signed int); \ break; \ case VIPS_FORMAT_FLOAT: \ SHRINK_TYPE_##OP(float); \ break; \ case VIPS_FORMAT_DOUBLE: \ SHRINK_TYPE_##OP(double); \ break; \ \ default: \ g_assert_not_reached(); \ } \ } \ } VIPS_REGION_SHRINK(MAX); VIPS_REGION_SHRINK(MIN); VIPS_REGION_SHRINK(MODE); VIPS_REGION_SHRINK(MEDIAN); VIPS_REGION_SHRINK(NEAREST); /* Generate area @target in @to using pixels in @from. Non-complex. */ static void vips_region_shrink_uncoded(VipsRegion *from, VipsRegion *to, const VipsRect *target, VipsRegionShrink method) { switch (method) { case VIPS_REGION_SHRINK_MEAN: vips_region_shrink_uncoded_mean(from, to, target); break; case VIPS_REGION_SHRINK_MEDIAN: vips_region_shrink_uncoded_MEDIAN(from, to, target); break; case VIPS_REGION_SHRINK_MODE: vips_region_shrink_uncoded_MODE(from, to, target); break; case VIPS_REGION_SHRINK_MAX: vips_region_shrink_uncoded_MAX(from, to, target); break; case VIPS_REGION_SHRINK_MIN: vips_region_shrink_uncoded_MIN(from, to, target); break; case VIPS_REGION_SHRINK_NEAREST: vips_region_shrink_uncoded_NEAREST(from, to, target); break; default: g_assert_not_reached(); } } /* No point having an int path, this will always be horribly slow. */ #define SHRINK_ALPHA_TYPE(TYPE) \ { \ TYPE *tp = (TYPE *) p; \ TYPE *tp1 = (TYPE *) (p + ls); \ TYPE *tq = (TYPE *) q; \ \ for (x = 0; x < target->width; x++) { \ /* Make the input alphas. \ */ \ double a1 = tp[nb - 1]; \ double a2 = tp[nb + nb - 1]; \ double a3 = tp1[nb - 1]; \ double a4 = tp1[nb + nb - 1]; \ \ /* Output alpha. \ */ \ double a = (a1 + a2 + a3 + a4) / 4.0; \ \ if (a == 0) { \ for (z = 0; z < nb; z++) \ tq[z] = 0; \ } \ else { \ for (z = 0; z < nb - 1; z++) \ tq[z] = (a1 * tp[z] + a2 * tp[z + nb] + \ a3 * tp1[z] + a4 * tp1[z + nb]) / \ (4.0 * a); \ tq[z] = a; \ } \ \ /* Move on two pels in input. \ */ \ tp += nb << 1; \ tp1 += nb << 1; \ tq += nb; \ } \ } /* Generate area @target in @to using pixels in @from. Non-complex. Use the * last band as alpha. */ static void vips_region_shrink_alpha(VipsRegion *from, VipsRegion *to, const VipsRect *target) { int ls = VIPS_REGION_LSKIP(from); int nb = from->im->Bands; int x, y, z; for (y = 0; y < target->height; y++) { VipsPel *p = VIPS_REGION_ADDR(from, target->left * 2, (target->top + y) * 2); VipsPel *q = VIPS_REGION_ADDR(to, target->left, target->top + y); /* Process this line of pels. */ switch (from->im->BandFmt) { case VIPS_FORMAT_UCHAR: SHRINK_ALPHA_TYPE(unsigned char); break; case VIPS_FORMAT_CHAR: SHRINK_ALPHA_TYPE(signed char); break; case VIPS_FORMAT_USHORT: SHRINK_ALPHA_TYPE(unsigned short); break; case VIPS_FORMAT_SHORT: SHRINK_ALPHA_TYPE(signed short); break; case VIPS_FORMAT_UINT: SHRINK_ALPHA_TYPE(unsigned int); break; case VIPS_FORMAT_INT: SHRINK_ALPHA_TYPE(signed int); break; case VIPS_FORMAT_FLOAT: SHRINK_ALPHA_TYPE(float); break; case VIPS_FORMAT_DOUBLE: SHRINK_ALPHA_TYPE(double); break; default: g_assert_not_reached(); } } } /** * vips_region_shrink_method: * @from: source region * @to: (inout): destination region * @target: #VipsRect of pixels you need to copy * @method: method to use when generating target pixels * * Write the pixels @target in @to from the x2 larger area in @from. * Non-complex uncoded images and LABQ only. Images with alpha (see * vips_image_hasalpha()) shrink with pixels scaled by alpha to avoid fringing. * * @method selects the method used to do the 2x2 shrink. * * See also: vips_region_copy(). */ int vips_region_shrink_method(VipsRegion *from, VipsRegion *to, const VipsRect *target, VipsRegionShrink method) { VipsImage *image = from->im; if (vips_check_coding_noneorlabq("vips_region_shrink_method", image)) return -1; if (from->im->Coding == VIPS_CODING_NONE) { if (vips_check_noncomplex("vips_region_shrink_method", image)) return -1; if (vips_image_hasalpha(image)) vips_region_shrink_alpha(from, to, target); else vips_region_shrink_uncoded(from, to, target, method); } else vips_region_shrink_labpack(from, to, target); return 0; } /** * vips_region_shrink: (skip) * @from: source region * @to: (inout): destination region * @target: #VipsRect of pixels you need to copy * * Write the pixels @target in @to from the x2 larger area in @from. * Non-complex uncoded images and LABQ only. Images with alpha (see * vips_image_hasalpha()) shrink with pixels scaled by alpha to avoid fringing. * * This is a compatibility stub that just calls vips_region_shrink_method(). * * See also: vips_region_shrink_method(). */ int vips_region_shrink(VipsRegion *from, VipsRegion *to, const VipsRect *target) { return vips_region_shrink_method(from, to, target, VIPS_REGION_SHRINK_MEAN); } /* Generate into a region. */ static int vips_region_generate(VipsRegion *reg, void *a) { VipsImage *im = reg->im; gboolean stop; /* Start new sequence, if necessary. */ if (vips__region_start(reg)) return -1; /* Ask for evaluation. */ stop = FALSE; if (im->generate_fn(reg, reg->seq, im->client1, im->client2, &stop)) return -1; if (stop) { vips_error("vips_region_generate", "%s", _("stop requested")); return -1; } return 0; } /** * vips_region_prepare: * @reg: region to prepare * @r: #VipsRect of pixels you need to be able to address * * vips_region_prepare() fills @reg with pixels. After calling, * you can address at least the area @r with VIPS_REGION_ADDR() and get * valid pixels. * * vips_region_prepare() runs in-line, that is, computation is done by * the calling thread, no new threads are involved, and computation * blocks until the pixels are ready. * * Use vips_sink_screen() to calculate an area of pixels in the * background. * * See also: vips_sink_screen(), vips_region_prepare_to(). * * Returns: 0 on success, or -1 on error. */ int vips_region_prepare(VipsRegion *reg, const VipsRect *r) { VipsImage *im = reg->im; VipsRect save = *r; vips__region_check_ownership(reg); if (vips_image_iskilled(im)) return -1; /* We use save for sanity checking valid: we test at the end that the * pixels we have generated are indeed all the ones that were asked * for. * * However, r may be clipped by the image size, so we need to clip * save as well to make sure we don't fail the assert due to that. */ { VipsRect image; image.left = 0; image.top = 0; image.width = reg->im->Xsize; image.height = reg->im->Ysize; vips_rect_intersectrect(&save, &image, &save); } #ifdef DEBUG printf("vips_region_prepare: " "left = %d, top = %d, width = %d, height = %d\n", r->left, r->top, r->width, r->height); #endif /*DEBUG*/ switch (im->dtype) { case VIPS_IMAGE_PARTIAL: if (vips_region_fill(reg, r, vips_region_generate, NULL)) return -1; break; case VIPS_IMAGE_SETBUF: case VIPS_IMAGE_SETBUF_FOREIGN: case VIPS_IMAGE_MMAPIN: case VIPS_IMAGE_MMAPINRW: case VIPS_IMAGE_OPENIN: /* Attach to existing buffer. */ if (vips_region_image(reg, r)) return -1; break; default: vips_error("vips_region_prepare", _("unable to input from a %s image"), vips_enum_string(VIPS_TYPE_DEMAND_STYLE, im->dtype)); return -1; } /* valid should now include all the pixels that were asked for. */ g_assert(vips_rect_includesrect(®->valid, &save)); return 0; } /* We need to make pixels using reg's generate function, and write the result * to dest. */ static int vips_region_prepare_to_generate(VipsRegion *reg, VipsRegion *dest, const VipsRect *r, int x, int y) { VipsImage *im = reg->im; VipsPel *p; if (!im->generate_fn) { vips_error("vips_region_prepare_to", "%s", _("incomplete header")); return -1; } if (vips_region_region(reg, dest, r, x, y)) return -1; /* Remember where reg is pointing now. */ p = VIPS_REGION_ADDR(reg, reg->valid.left, reg->valid.top); /* Run sequence into reg. */ if (vips_region_generate(reg, NULL)) return -1; /* The generate function may not have actually made any pixels ... it * might just have redirected reg to point somewhere else. If it has, * we need an extra copy operation. */ if (VIPS_REGION_ADDR(reg, reg->valid.left, reg->valid.top) != p) vips_region_copy(reg, dest, r, x, y); return 0; } /** * vips_region_prepare_to: * @reg: region to prepare * @dest: region to write to * @r: #VipsRect of pixels you need to be able to address * @x: position of @r in @dest * @y: position of @r in @dest * * Like vips_region_prepare(): fill @reg with the pixels in area @r. * * Unlike vips_region_prepare(), rather than writing the result to @reg, the * pixels are written into @dest at offset @x, @y. * * Also unlike vips_region_prepare(), @dest is not set up for writing for * you with vips_region_buffer(). You can * point @dest at anything, and pixels really will be written there. * This makes vips_region_prepare_to() useful for making the ends of * pipelines. * * See also: vips_region_prepare(), vips_sink_disc(). * * Returns: 0 on success, or -1 on error */ int vips_region_prepare_to(VipsRegion *reg, VipsRegion *dest, const VipsRect *r, int x, int y) { VipsImage *im = reg->im; VipsRect image; VipsRect wanted; VipsRect clipped; VipsRect clipped2; VipsRect final; if (vips_image_iskilled(im)) return -1; /* Sanity check. */ if (!dest->data || dest->im->BandFmt != reg->im->BandFmt || dest->im->Bands != reg->im->Bands) { vips_error("vips_region_prepare_to", "%s", _("inappropriate region type")); return -1; } /* clip r first against the size of reg->im, then again against the * memory we have available to write to on dest. Just like * vips_region_region() */ image.top = 0; image.left = 0; image.width = reg->im->Xsize; image.height = reg->im->Ysize; vips_rect_intersectrect(r, &image, &clipped); g_assert(clipped.left == r->left); g_assert(clipped.top == r->top); wanted.left = x + (clipped.left - r->left); wanted.top = y + (clipped.top - r->top); wanted.width = clipped.width; wanted.height = clipped.height; /* Test that dest->valid is large enough. */ if (!vips_rect_includesrect(&dest->valid, &wanted)) { vips_error("vips_region_prepare_to", "%s", _("dest too small")); return -1; } vips_rect_intersectrect(&wanted, &dest->valid, &clipped2); /* Translate back to reg's coordinate space and set as valid. */ final.left = r->left + (clipped2.left - wanted.left); final.top = r->top + (clipped2.top - wanted.top); final.width = clipped2.width; final.height = clipped2.height; x = clipped2.left; y = clipped2.top; if (vips_rect_isempty(&final)) { vips_error("vips_region_prepare_to", "%s", _("valid clipped to nothing")); return -1; } #ifdef DEBUG printf("vips_region_prepare_to: " "left = %d, top = %d, width = %d, height = %d\n", final.left, final.top, final.width, final.height); #endif /*DEBUG*/ /* Input or output image type? */ switch (im->dtype) { case VIPS_IMAGE_OPENOUT: case VIPS_IMAGE_PARTIAL: /* We are generating with a sequence. */ if (vips_region_prepare_to_generate(reg, dest, &final, x, y)) return -1; break; case VIPS_IMAGE_MMAPIN: case VIPS_IMAGE_MMAPINRW: case VIPS_IMAGE_OPENIN: /* Attach to existing buffer and copy to dest. */ if (vips_region_image(reg, &final)) return -1; vips_region_copy(reg, dest, &final, x, y); break; case VIPS_IMAGE_SETBUF: case VIPS_IMAGE_SETBUF_FOREIGN: /* Could be either input or output. If there is a generate * function, we are outputting. */ if (im->generate_fn) { if (vips_region_prepare_to_generate(reg, dest, &final, x, y)) return -1; } else { if (vips_region_image(reg, &final)) return -1; vips_region_copy(reg, dest, &final, x, y); } break; default: vips_error("vips_region_prepare_to", _("unable to input from a %s image"), vips_enum_nick(VIPS_TYPE_DEMAND_STYLE, im->dtype)); return -1; } /* We've written fresh pixels to dest, it's no longer invalid (if it * was). * * We need this extra thing here because, unlike * vips_region_prepare(), we don't vips_region_buffer() dest before * writing it. */ dest->invalid = FALSE; return 0; } /* Don't use this, use vips_reorder_prepare_many() instead. */ int vips_region_prepare_many(VipsRegion **reg, const VipsRect *r) { for (; *reg; ++reg) if (vips_region_prepare(*reg, r)) return -1; return 0; } /** * vips_region_fetch: * @region: region to fetch pixels from * @left: area of pixels to fetch * @top: area of pixels to fetch * @width: area of pixels to fetch * @height: area of pixels to fetch * * Generate an area of pixels and return a copy. The result must be freed * with g_free(). The requested area must be completely inside the image. * * This is equivalent to vips_region_prepare(), followed by a memcpy. It is * convenient for language bindings. * * Returns: A copy of the pixel data. */ VipsPel * vips_region_fetch(VipsRegion *region, int left, int top, int width, int height, size_t *len) { VipsRect request; VipsRect image; int y; VipsPel *result; VipsPel *p, *q; size_t skip; size_t line; g_assert(width > 0); g_assert(height > 0); image.left = 0; image.top = 0; image.width = region->im->Xsize; image.height = region->im->Ysize; request.left = left; request.top = top; request.width = width; request.height = height; if (!vips_rect_includesrect(&image, &request)) return NULL; if (vips_region_prepare(region, &request)) return NULL; skip = VIPS_REGION_LSKIP(region); line = VIPS_IMAGE_SIZEOF_PEL(region->im) * request.width; if (!(result = (VipsPel *) vips_malloc(NULL, line * request.height))) return NULL; p = VIPS_REGION_ADDR(region, request.left, request.top); q = result; for (y = 0; y < request.height; y++) { memcpy(q, p, line); p += skip; q += line; } if (len) *len = request.height * line; return result; } /** * vips_region_width: * @region: fetch width from this * * Returns: Width of the pixels held in region. */ int vips_region_width(VipsRegion *region) { return region->valid.width; } /** * vips_region_height: * @region: fetch height from this * * Returns: Height of the pixels held in region. */ int vips_region_height(VipsRegion *region) { return region->valid.height; } /** * vips_region_invalidate: * @reg: region to invalidate * * Mark a region as containing invalid pixels. Calling this function means * that the next time vips_region_prepare() is called, the region will be * recalculated. * * This is faster than calling vips_image_invalidate_all(), but obviously only * affects a single region. * * See also: vips_image_invalidate_all(), vips_region_prepare(). */ void vips_region_invalidate(VipsRegion *reg) { reg->invalid = TRUE; } #ifdef VIPS_DEBUG static void * vips_region_dump_all_cb(VipsRegion *region, size_t *alive, void *b) { char str[2048]; VipsBuf buf = VIPS_BUF_STATIC(str); vips_object_summary(VIPS_OBJECT(region), &buf); printf("%s\n", vips_buf_all(&buf)); if (region->buffer && region->buffer->buf) *alive += region->buffer->bsize; return NULL; } void vips_region_dump_all(void) { size_t alive; g_mutex_lock(vips__global_lock); alive = 0; printf("%d regions in vips\n", g_slist_length(vips__regions_all)); vips_slist_map2(vips__regions_all, (VipsSListMap2Fn) vips_region_dump_all_cb, &alive, NULL); printf("%gMB alive\n", alive / (1024 * 1024.0)); g_mutex_unlock(vips__global_lock); } #endif /*VIPS_DEBUG*/ #ifdef DEBUG_LEAK void vips__region_count_pixels(VipsRegion *region, const char *nickname) { VipsImage *image = region->im; VipsImagePixels *pixels = g_object_get_qdata(G_OBJECT(image), vips__image_pixels_quark); g_mutex_lock(vips__global_lock); if (!pixels->tpels) pixels->tpels = VIPS_IMAGE_N_PELS(image); if (!pixels->nickname) pixels->nickname = nickname; pixels->npels += region->valid.width * region->valid.height; g_mutex_unlock(vips__global_lock); } #endif /*DEBUG_LEAK*/ libvips-8.15.1/libvips/iofuncs/reorder.c000066400000000000000000000226141454007373500202170ustar00rootroot00000000000000/* reorder.c ... manage reorder reordering * * 11/1/17 * - first version */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include /* Have one of these on every image, identified by a quark. */ typedef struct _VipsReorder { /* The image we are attached to. */ VipsImage *image; /* The direct inputs to this image, so a copy of the array that is * passed to vips_image_pipeline_array(), and in the same order. * NULL-terminated. * * Score is the priority we give to the inputs as we de-dupe the source * arrays. * * The recomp order is the order we prepare regions in ... just make a * range then sort by score. */ int n_inputs; VipsImage **input; int *score; int *recomp_order; /* Source images are images with no input images, so file load, * vips_black(), etc. NULL-terminated array. * * The cumulative margin is the total margin that has been added to * each source image up to this point in the pipeline. */ int n_sources; VipsImage **source; int *cumulative_margin; } VipsReorder; GQuark vips__image_reorder_quark = 0; #ifdef DEBUG static void vips_reorder_print(VipsReorder *reorder) { int i; printf("vips_reorder_print: "); vips_object_print_name(VIPS_OBJECT(reorder->image)); printf("\n"); printf("n_inputs = %d\n", reorder->n_inputs); printf(" n score order\n"); for (i = 0; i < reorder->n_inputs; i++) { printf("%2d - %8d, %8d, ", i, reorder->score[i], reorder->recomp_order[i]); vips_object_print_name(VIPS_OBJECT(reorder->input[i])); printf("\n"); } printf("n_sources = %d\n", reorder->n_sources); printf(" n margin\n"); for (i = 0; i < reorder->n_sources; i++) { printf("%2d - %8d, ", i, reorder->cumulative_margin[i]); vips_object_print_name(VIPS_OBJECT(reorder->source[i])); printf("\n"); } } #endif /*DEBUG*/ static void vips_reorder_free(VipsReorder *reorder) { /* We free explicitly, rather than using VIPS_ARRAY(image, ...), since * we need to make sure these pointers are valid to this point in the * close cycle. */ VIPS_FREE(reorder->input); VIPS_FREE(reorder->score); VIPS_FREE(reorder->recomp_order); VIPS_FREE(reorder->source); VIPS_FREE(reorder->cumulative_margin); } static void vips_reorder_destroy(VipsReorder *reorder) { vips_reorder_free(reorder); VIPS_FREE(reorder); } static VipsReorder * vips_reorder_get(VipsImage *image) { VipsReorder *reorder; if ((reorder = g_object_get_qdata(G_OBJECT(image), vips__image_reorder_quark))) return reorder; reorder = VIPS_NEW(NULL, VipsReorder); reorder->image = image; reorder->n_inputs = 0; reorder->input = NULL; reorder->score = NULL; reorder->recomp_order = NULL; reorder->n_sources = 0; reorder->source = NULL; reorder->cumulative_margin = NULL; g_object_set_qdata_full(G_OBJECT(image), vips__image_reorder_quark, reorder, (GDestroyNotify) vips_reorder_destroy); return reorder; } static int vips_reorder_compare_score(const void *a, const void *b, void *arg) { int i1 = *((int *) a); int i2 = *((int *) b); VipsReorder *reorder = (VipsReorder *) arg; return reorder->score[i2] - reorder->score[i1]; } int vips__reorder_set_input(VipsImage *image, VipsImage **in) { VipsReorder *reorder = vips_reorder_get(image); int i; int total; /* We have to support being called more than once on the same image. * Two cases: * * 1. in the first call, no images were set ... we throw away * everything from the first call and try again. foreign can do this. * * 2. warn if the args were different and do nothing. */ if (reorder->source) { if (reorder->n_inputs == 0) { reorder->n_sources = 0; vips_reorder_free(reorder); } else { for (i = 0; in[i]; i++) if (i >= reorder->n_inputs || in[i] != reorder->input[i]) { /* Should never happen. */ g_warning("vips__reorder_set_input: args differ\n"); break; } return 0; } } /* Make a copy of the input array. */ for (i = 0; in[i]; i++) ; reorder->n_inputs = i; reorder->input = VIPS_ARRAY(NULL, reorder->n_inputs + 1, VipsImage *); reorder->score = VIPS_ARRAY(NULL, reorder->n_inputs, int); reorder->recomp_order = VIPS_ARRAY(NULL, reorder->n_inputs, int); if (!reorder->input) return -1; if (reorder->n_inputs && (!reorder->score || !reorder->recomp_order)) return -1; for (i = 0; i < reorder->n_inputs; i++) { reorder->input[i] = in[i]; reorder->score[i] = 0; reorder->recomp_order[i] = i; } reorder->input[i] = NULL; /* Find the total number of source images -- this gives an upper bound * to the size of the unique source image array we will need. */ total = 0; for (i = 0; i < reorder->n_inputs; i++) total += vips_reorder_get(reorder->input[i])->n_sources; /* No source images means this must itself be a source image, so it has * a source image of itself. */ total = VIPS_MAX(1, total); reorder->source = VIPS_ARRAY(NULL, total + 1, VipsImage *); reorder->cumulative_margin = VIPS_ARRAY(NULL, total, int); if (!reorder->source || !reorder->cumulative_margin) return -1; /* Copy source images over, removing duplicates. If we find a * duplicate, we have a reordering opportunity, and we adjust the * scores of the two images containing the dupe. */ for (i = 0; i < reorder->n_inputs; i++) { VipsReorder *input = vips_reorder_get(reorder->input[i]); int j; for (j = 0; j < input->n_sources; j++) { int k; /* Search for dupe. */ for (k = 0; k < reorder->n_sources; k++) if (reorder->source[k] == input->source[j]) break; if (k < reorder->n_sources) { /* Found a dupe. Does this new use of * input->source[j] have a larger or smaller * margin? Adjust the score to reflect the * change, note the new max. */ reorder->score[i] += input->cumulative_margin[j] - reorder->cumulative_margin[k]; reorder->cumulative_margin[k] = VIPS_MAX( reorder->cumulative_margin[k], input->cumulative_margin[j]); } else { /* No dupe, just add to the table. */ reorder->source[reorder->n_sources] = input->source[j]; reorder->cumulative_margin[reorder->n_sources] = input->cumulative_margin[j]; reorder->n_sources += 1; } } } /* Sort recomp_order by score. qsort_r() is a GNU libc thing, don't use * it. */ if (reorder->n_inputs > 1) g_qsort_with_data(reorder->recomp_order, reorder->n_inputs, sizeof(int), vips_reorder_compare_score, reorder); /* No sources ... make one, us! */ if (reorder->n_inputs == 0) { reorder->source[0] = image; reorder->cumulative_margin[0] = 0; reorder->n_sources = 1; } #ifdef DEBUG vips_reorder_print(reorder); #endif /*DEBUG*/ return 0; } /** * vips_reorder_prepare_many: (method) * @image: the image that's being written * @regions: (array): the set of regions to prepare * @r: the #VipsRect to prepare on each region * * vips_reorder_prepare_many() runs vips_region_prepare() on each region in * @regions, requesting the pixels in @r. * * It tries to request the regions in the order which will cause least * recomputation. This can give a large speedup, in some cases. * * See also: vips_region_prepare(), vips_reorder_margin_hint(). * * Returns: 0 on success, or -1 on error. */ int vips_reorder_prepare_many(VipsImage *image, VipsRegion **regions, VipsRect *r) { VipsReorder *reorder = vips_reorder_get(image); int i; for (i = 0; i < reorder->n_inputs; i++) { g_assert(regions[i]); if (vips_region_prepare( regions[reorder->recomp_order[i]], r)) return -1; } return 0; } /** * vips_reorder_margin_hint: (method) * @image: the image to hint on * @margin: the size of the margin this operation has added * * vips_reorder_margin_hint() sets a hint that @image contains a margin, that * is, that each vips_region_prepare() on @image will request a slightly larger * region from it's inputs. A good value for @margin is (width * height) for * the window the operation uses. * * This information is used by vips_image_prepare_many() to attempt to reorder * computations to minimise recomputation. * * See also: vips_image_prepare_many(). */ void vips_reorder_margin_hint(VipsImage *image, int margin) { VipsReorder *reorder = vips_reorder_get(image); int i; for (i = 0; i < reorder->n_sources; i++) reorder->cumulative_margin[i] += margin; } void vips__reorder_clear(VipsImage *image) { g_object_set_qdata(G_OBJECT(image), vips__image_reorder_quark, NULL); } void vips__reorder_init(void) { if (!vips__image_reorder_quark) vips__image_reorder_quark = g_quark_from_static_string("vips-image-reorder"); } libvips-8.15.1/libvips/iofuncs/sbuf.c000066400000000000000000000301661454007373500175150ustar00rootroot00000000000000/* Buffered input from a source. * * J.Cupitt, 18/11/19 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #include #include #include #include #include #include #include #include /** * SECTION: sbuf * @short_description: buffered read from a source * @stability: Stable * @see_also: foreign * @include: vips/vips.h * @title: VipsSbuf * * #VipsSbuf wraps up a #VipsSource and provides a set of calls for * text-oriented buffered reading. You can fetch lines of text, skip * whitespace, and so on. * * It is useful for implementing things like CSV readers, for example. */ G_DEFINE_TYPE(VipsSbuf, vips_sbuf, VIPS_TYPE_OBJECT); static void vips_sbuf_class_init(VipsSbufClass *class) { VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class); GObjectClass *gobject_class = G_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "sbuf"; object_class->description = _("buffered source"); VIPS_ARG_OBJECT(class, "input", 1, _("Input"), _("Source to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsSbuf, source), VIPS_TYPE_SOURCE); } static void vips_sbuf_init(VipsSbuf *sbuf) { sbuf->read_point = 0; sbuf->chars_in_buffer = 0; sbuf->input_buffer[0] = '\0'; } /** * vips_sbuf_new_from_source: * @source: source to operate on * * Create a VipsSbuf wrapping a source. * * Returns: a new #VipsSbuf */ VipsSbuf * vips_sbuf_new_from_source(VipsSource *source) { VipsSbuf *sbuf; g_assert(source); sbuf = VIPS_SBUF(g_object_new(VIPS_TYPE_SBUF, "input", source, NULL)); if (vips_object_build(VIPS_OBJECT(sbuf))) { VIPS_UNREF(sbuf); return NULL; } return sbuf; } /** * vips_sbuf_unbuffer: * @sbuf: source to operate on * * Discard the input buffer and reset the read point. You must call this * before using read or seek on the underlying #VipsSource class. */ void vips_sbuf_unbuffer(VipsSbuf *sbuf) { /* We'd read ahead a little way -- seek backwards by that amount. */ vips_source_seek(sbuf->source, sbuf->read_point - sbuf->chars_in_buffer, SEEK_CUR); sbuf->read_point = 0; sbuf->chars_in_buffer = 0; } /* Returns -1 on error, 0 on EOF, otherwise bytes read. */ static gint64 vips_sbuf_refill(VipsSbuf *sbuf) { gint64 bytes_read; VIPS_DEBUG_MSG("vips_sbuf_refill:\n"); /* We should not discard any unread bytes. */ g_assert(sbuf->read_point == sbuf->chars_in_buffer); bytes_read = vips_source_read(sbuf->source, sbuf->input_buffer, VIPS_SBUF_BUFFER_SIZE); if (bytes_read == -1) return -1; sbuf->read_point = 0; sbuf->chars_in_buffer = bytes_read; /* Always add a null byte so we can use strchr() etc. on lines. This is * safe because input_buffer is VIPS_SBUF_BUFFER_SIZE + 1 bytes. */ sbuf->input_buffer[bytes_read] = '\0'; return bytes_read; } /** * vips_sbuf_getc: * @sbuf: source to operate on * * Fetch the next character from the source. * * If you can, use the macro VIPS_SBUF_GETC() instead for speed. * * Returns: the next char from @sbuf, -1 on read error or EOF. */ int vips_sbuf_getc(VipsSbuf *sbuf) { if (sbuf->read_point == sbuf->chars_in_buffer && vips_sbuf_refill(sbuf) <= 0) return -1; g_assert(sbuf->read_point < sbuf->chars_in_buffer); return sbuf->input_buffer[sbuf->read_point++]; } /** * VIPS_SBUF_GETC: * @sbuf: source to operate on * * Fetch the next character from the source. * * Returns: the next char from @sbuf, -1 on read error or EOF. */ /** * vips_sbuf_ungetc: * @sbuf: source to operate on * * The opposite of vips_sbuf_getc(): undo the previous getc. * * unget more than one character is undefined. Unget at the start of the file * does nothing. * * If you can, use the macro VIPS_SBUF_UNGETC() instead for speed. */ void vips_sbuf_ungetc(VipsSbuf *sbuf) { if (sbuf->read_point > 0) sbuf->read_point -= 1; } /** * VIPS_SBUF_UNGETC: * @sbuf: source to operate on * * The opposite of vips_sbuf_getc(): undo the previous getc. * * unget more than one character is undefined. Unget at the start of the file * does nothing. */ /** * vips_sbuf_require: * @sbuf: source to operate on * @require: make sure we have at least this many chars available * * Make sure there are at least @require bytes of readahead available. * * Returns: 0 on success, -1 on error or EOF. */ int vips_sbuf_require(VipsSbuf *sbuf, int require) { g_assert(require < VIPS_SBUF_BUFFER_SIZE); g_assert(sbuf->chars_in_buffer >= 0); g_assert(sbuf->chars_in_buffer <= VIPS_SBUF_BUFFER_SIZE); g_assert(sbuf->read_point >= 0); g_assert(sbuf->read_point <= sbuf->chars_in_buffer); VIPS_DEBUG_MSG("vips_sbuf_require: %d\n", require); if (sbuf->read_point + require > sbuf->chars_in_buffer) { /* Areas can overlap, so we must memmove(). */ memmove(sbuf->input_buffer, sbuf->input_buffer + sbuf->read_point, sbuf->chars_in_buffer - sbuf->read_point); sbuf->chars_in_buffer -= sbuf->read_point; sbuf->read_point = 0; while (require > sbuf->chars_in_buffer) { unsigned char *to = sbuf->input_buffer + sbuf->chars_in_buffer; int space_available = VIPS_SBUF_BUFFER_SIZE - sbuf->chars_in_buffer; gint64 bytes_read; if ((bytes_read = vips_source_read(sbuf->source, to, space_available)) < 0) return -1; if (bytes_read == 0) { vips_error( vips_connection_nick(VIPS_CONNECTION( sbuf->source)), "%s", _("end of file")); return -1; } to[bytes_read] = '\0'; sbuf->chars_in_buffer += bytes_read; } } return 0; } /** * VIPS_SBUF_REQUIRE: * @sbuf: source to operate on * @require: need this many characters * * Make sure at least @require characters are available for * VIPS_SBUF_PEEK() and VIPS_SBUF_FETCH(). * * Returns: 0 on success, -1 on read error or EOF. */ /** * VIPS_SBUF_PEEK: * @sbuf: source to operate on * * After a successful VIPS_SBUF_REQUIRE(), you can index this to get * require characters of input. * * Returns: a pointer to the next require characters of input. */ /** * VIPS_SBUF_FETCH: * @sbuf: source to operate on * * After a successful VIPS_SBUF_REQUIRE(), you can use this require times * to fetch characters of input. * * Returns: the next input character. */ /** * vips_sbuf_get_line: * @sbuf: source to operate on * * Fetch the next line of text from @sbuf and return it. The end of * line character (or characters, for DOS files) are removed, and the string * is terminated with a null (`\0` character). * * Returns NULL on end of file or read error. * * If the line is longer than some arbitrary (but large) limit, it is * truncated. If you need to be able to read very long lines, use the * slower vips_sbuf_get_line_copy(). * * The return value is owned by @sbuf and must not be freed. It * is valid until the next get call to @sbuf. * * Returns: the next line of text, or NULL on EOF or read error. */ const char * vips_sbuf_get_line(VipsSbuf *sbuf) { int write_point; int space_remaining; int ch; VIPS_DEBUG_MSG("vips_sbuf_get_line:\n"); write_point = 0; space_remaining = VIPS_SBUF_BUFFER_SIZE; while ((ch = VIPS_SBUF_GETC(sbuf)) != -1 && ch != '\n' && space_remaining > 0) { sbuf->line[write_point] = ch; write_point += 1; space_remaining -= 1; } sbuf->line[write_point] = '\0'; /* If we hit EOF immediately, return EOF. */ if (ch == -1 && write_point == 0) return NULL; /* If the final char in the buffer is \r, this is probably a DOS file * and we should remove that too. * * There's a chance this could incorrectly remove \r in very long * lines, but ignore this. */ if (write_point > 0 && sbuf->line[write_point - 1] == '\r') sbuf->line[write_point - 1] = '\0'; /* If we filled the output line without seeing \n, keep going to the * next \n. */ if (ch != '\n' && space_remaining == 0) { while ((ch = VIPS_SBUF_GETC(sbuf)) != -1 && ch != '\n') ; } VIPS_DEBUG_MSG(" %s\n", sbuf->line); return (const char *) sbuf->line; } /** * vips_sbuf_get_line_copy: * @sbuf: source to operate on * * Fetch the next line of text from @sbuf and return it. The end of * line character (or characters, for DOS files) are removed, and the string * is terminated with a null (`\0` character). * * The return result must be freed with g_free(). * * This is slower than vips_sbuf_get_line(), but can work with lines of * any length. * * Returns: the next line of text, or NULL on EOF or read error. */ char * vips_sbuf_get_line_copy(VipsSbuf *sbuf) { static const unsigned char null = '\0'; VIPS_DEBUG_MSG("vips_sbuf_get_line_copy:\n"); GByteArray *buffer; int ch; char *result; buffer = g_byte_array_new(); while ((ch = VIPS_SBUF_GETC(sbuf)) != -1 && ch != '\n') { unsigned char c = ch; g_byte_array_append(buffer, &c, 1); } /* Immediate EOF. */ if (ch == -1 && buffer->len == 0) { VIPS_FREEF(g_byte_array_unref, buffer); return NULL; } /* If the character before the \n was \r, this is probably a DOS file * and we should remove the \r. */ if (ch == '\n' && buffer->len > 0 && buffer->data[buffer->len - 1] == '\r') g_byte_array_set_size(buffer, buffer->len - 1); g_byte_array_append(buffer, &null, 1); result = (char *) g_byte_array_free(buffer, FALSE); VIPS_DEBUG_MSG(" %s\n", result); return result; } /** * vips_sbuf_get_non_whitespace: * @sbuf: source to operate on * * Fetch the next chunk of non-whitespace text from the source, and * null-terminate it. * * After this, the next getc will be the first char of the next block of * whitespace (or EOF). * * If the first getc is whitespace, stop instantly and return the empty * string. * * If the item is longer than some arbitrary (but large) limit, it is * truncated. * * The return value is owned by @sbuf and must not be freed. It * is valid until the next get call to @sbuf. * * Returns: the next block of non-whitespace, or NULL on EOF or read error. */ const char * vips_sbuf_get_non_whitespace(VipsSbuf *sbuf) { int ch; int i; for (i = 0; i < VIPS_SBUF_BUFFER_SIZE && !isspace(ch = VIPS_SBUF_GETC(sbuf)) && ch != EOF; i++) sbuf->line[i] = ch; sbuf->line[i] = '\0'; /* If we stopped before seeing any whitespace, skip to the end of the * block of non-whitespace. */ if (!isspace(ch)) while (!isspace(ch = VIPS_SBUF_GETC(sbuf)) && ch != EOF) ; /* If we finally stopped on whitespace, step back one so the next get * will be whitespace (or EOF). */ if (isspace(ch)) VIPS_SBUF_UNGETC(sbuf); return (const char *) sbuf->line; } /** * vips_sbuf_skip_whitespace: * @sbuf: source to operate on * * After this, the next getc will be the first char of the next block of * non-whitespace (or EOF). * * Also skip comments, ie. from any '#' character to the end of the line. * * Returns: 0 on success, or -1 on EOF. */ int vips_sbuf_skip_whitespace(VipsSbuf *sbuf) { int ch; do { ch = VIPS_SBUF_GETC(sbuf); /* # skip comments too. */ if (ch == '#') { /* Probably EOF. */ if (!vips_sbuf_get_line(sbuf)) return -1; ch = VIPS_SBUF_GETC(sbuf); } } while (isspace(ch)); VIPS_SBUF_UNGETC(sbuf); return 0; } libvips-8.15.1/libvips/iofuncs/semaphore.c000066400000000000000000000075101454007373500205360ustar00rootroot00000000000000/* Support for thread stuff. * * JC & KM 9/5/94 * Modified: * 28/11/94 JC * - return(0) missing from tidy_thread_info() * 4/8/99 RP JC * - reorganised for POSIX * 28/3/11 * - moved to vips_ namespace */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_IO */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include void vips_semaphore_init(VipsSemaphore *s, int v, char *name) { s->v = v; s->name = name; s->mutex = vips_g_mutex_new(); s->cond = vips_g_cond_new(); } void vips_semaphore_destroy(VipsSemaphore *s) { VIPS_FREEF(vips_g_mutex_free, s->mutex); VIPS_FREEF(vips_g_cond_free, s->cond); } /* Add n to the semaphore and signal any threads that are blocked waiting * a change. */ int vips_semaphore_upn(VipsSemaphore *s, int n) { int value_after_op; g_mutex_lock(s->mutex); s->v += n; value_after_op = s->v; /* If we are only incrementing by one, we only need to wake a single * thread. If we are incrementing by a lot, we must wake all threads. */ if (n == 1) g_cond_signal(s->cond); else g_cond_broadcast(s->cond); g_mutex_unlock(s->mutex); #ifdef DEBUG_IO printf("vips_semaphore_upn(\"%s\",%d) = %d\n", s->name, n, value_after_op); if (value_after_op > 1) vips_error("vips_semaphore_upn", "up over 1!"); #endif /*DEBUG_IO*/ return value_after_op; } /* Increment the semaphore. */ int vips_semaphore_up(VipsSemaphore *s) { return vips_semaphore_upn(s, 1); } /* Wait for sem>n, then subtract n. * Returns -1 when the monotonic time in @end_time was passed. */ static int vips__semaphore_downn_until(VipsSemaphore *s, int n, gint64 end_time) { int value_after_op; VIPS_GATE_START("vips__semaphore_downn_until: wait"); g_mutex_lock(s->mutex); while (s->v < n) { if (end_time == -1) g_cond_wait(s->cond, s->mutex); else if (!g_cond_wait_until(s->cond, s->mutex, end_time)) { /* timeout has passed. */ g_mutex_unlock(s->mutex); VIPS_GATE_STOP("vips__semaphore_downn_until: wait"); return -1; } } s->v -= n; value_after_op = s->v; g_mutex_unlock(s->mutex); #ifdef DEBUG_IO printf("vips__semaphore_downn_until(\"%s\",%d): %d\n", s->name, n, value_after_op); #endif /*DEBUG_IO*/ VIPS_GATE_STOP("vips__semaphore_downn_until: wait"); return value_after_op; } /* Wait for sem>n, then subtract n. n must be >= 0. Returns the new semaphore * value. */ int vips_semaphore_downn(VipsSemaphore *s, int n) { g_assert(n >= 0); return vips__semaphore_downn_until(s, n, -1); } /* Wait for sem > 0, then decrement. Returns the new semaphore value. */ int vips_semaphore_down(VipsSemaphore *s) { return vips__semaphore_downn_until(s, 1, -1); } /* Wait for sem > 0, then decrement. * Returns -1 when @timeout (in microseconds) has passed, or the new * semaphore value. */ int vips_semaphore_down_timeout(VipsSemaphore *s, gint64 timeout) { gint64 end_time = g_get_monotonic_time() + timeout; return vips__semaphore_downn_until(s, 1, end_time); } libvips-8.15.1/libvips/iofuncs/sink.c000066400000000000000000000303131454007373500175140ustar00rootroot00000000000000/* A sink that's not attached to anything, eg. find image average, * * 28/3/10 * - from im_iterate(), reworked for threadpool */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "sink.h" /* A part of the image we are scanning. * * We can't let any threads fall too far behind as that would mess up seq * image sources. Keep track of two areas moving down the image, and stall if * the previous area still has active threads. */ typedef struct _SinkArea { struct _Sink *sink; VipsRect rect; /* Part of image this area covers */ VipsSemaphore n_thread; /* Number of threads scanning this area */ } SinkArea; /* Per-call state. */ typedef struct _Sink { SinkBase sink_base; /* We need a temp "p" image between the source image and us to * make sure we can't damage the original. */ VipsImage *t; /* Call params. */ VipsStartFn start_fn; VipsGenerateFn generate_fn; VipsStopFn stop_fn; void *a; void *b; /* We are current scanning area, we'll delay starting a new * area if old_area (the previous position) hasn't completed. */ SinkArea *area; SinkArea *old_area; } Sink; /* Our per-thread state. */ typedef struct _SinkThreadState { VipsThreadState parent_object; /* Sequence value for this thread. */ void *seq; /* The region we walk over sink.t copy. We can't use * parent_object.reg, it's defined on the outer image. */ VipsRegion *reg; /* The area we were allocated from. */ SinkArea *area; } SinkThreadState; typedef struct _SinkThreadStateClass { VipsThreadStateClass parent_class; } SinkThreadStateClass; G_DEFINE_TYPE(SinkThreadState, sink_thread_state, VIPS_TYPE_THREAD_STATE); static void sink_area_free(SinkArea *area) { vips_semaphore_destroy(&area->n_thread); g_free(area); } static SinkArea * sink_area_new(Sink *sink) { SinkArea *area; if (!(area = VIPS_NEW(NULL, SinkArea))) return NULL; area->sink = sink; vips_semaphore_init(&area->n_thread, 0, "n_thread"); return area; } /* Move an area to a position. */ static void sink_area_position(SinkArea *area, int top, int height) { Sink *sink = area->sink; VipsRect all, rect; all.left = 0; all.top = 0; all.width = sink->sink_base.im->Xsize; all.height = sink->sink_base.im->Ysize; rect.left = 0; rect.top = top; rect.width = sink->sink_base.im->Xsize; rect.height = height; vips_rect_intersectrect(&all, &rect, &area->rect); } /* Our VipsThreadpoolAllocate function ... move the thread to the next tile * that needs doing. If we fill the current area, we block until the previous * area is finished, then swap areas. * * If all tiles are done, we return FALSE to end iteration. */ static gboolean sink_area_allocate_fn(VipsThreadState *state, void *a, gboolean *stop) { SinkThreadState *sstate = (SinkThreadState *) state; Sink *sink = (Sink *) a; SinkBase *sink_base = (SinkBase *) sink; VipsRect image; VipsRect tile; VIPS_DEBUG_MSG("sink_area_allocate_fn: %p\n", g_thread_self()); /* Is the state x/y OK? New line or maybe new buffer or maybe even * all done. */ if (sink_base->x >= sink->area->rect.width) { sink_base->x = 0; sink_base->y += sink_base->tile_height; if (sink_base->y >= VIPS_RECT_BOTTOM(&sink->area->rect)) { /* Block until the previous area is done. */ if (sink->area->rect.top > 0) vips_semaphore_downn( &sink->old_area->n_thread, 0); /* End of image? */ if (sink_base->y >= sink_base->im->Ysize) { *stop = TRUE; return 0; } /* Swap buffers. */ VIPS_SWAP(SinkArea *, sink->area, sink->old_area); /* Position buf at the new y. */ sink_area_position(sink->area, sink_base->y, sink_base->n_lines); } } /* x, y and buf are good: save params for thread. */ image.left = 0; image.top = 0; image.width = sink_base->im->Xsize; image.height = sink_base->im->Ysize; tile.left = sink_base->x; tile.top = sink_base->y; tile.width = sink_base->tile_width; tile.height = sink_base->tile_height; vips_rect_intersectrect(&image, &tile, &state->pos); /* The thread needs to know which area it's writing to. */ sstate->area = sink->area; VIPS_DEBUG_MSG(" %p allocated %d x %d:\n", g_thread_self(), state->pos.left, state->pos.top); /* Add to the number of writers on the area. */ vips_semaphore_upn(&sink->area->n_thread, -1); /* Move state on. */ sink_base->x += sink_base->tile_width; /* Add the number of pixels we've just allocated to progress. */ sink_base->processed += state->pos.width * state->pos.height; return 0; } /* Call a thread's stop function. */ static int sink_call_stop(Sink *sink, SinkThreadState *state) { if (state->seq && sink->stop_fn) { int result; VIPS_DEBUG_MSG("sink_call_stop: state = %p\n", state); result = sink->stop_fn(state->seq, sink->a, sink->b); if (result) { SinkBase *sink_base = (SinkBase *) sink; vips_error("vips_sink", _("stop function failed for image \"%s\""), sink_base->im->filename); return -1; } state->seq = NULL; } return 0; } static void sink_thread_state_dispose(GObject *gobject) { SinkThreadState *state = (SinkThreadState *) gobject; Sink *sink = (Sink *) ((VipsThreadState *) state)->a; sink_call_stop(sink, state); VIPS_UNREF(state->reg); G_OBJECT_CLASS(sink_thread_state_parent_class)->dispose(gobject); } /* Call the start function for this thread, if necessary. */ static int sink_call_start(Sink *sink, SinkThreadState *state) { if (!state->seq && sink->start_fn) { VIPS_DEBUG_MSG("sink_call_start: state = %p\n", state); state->seq = sink->start_fn(sink->t, sink->a, sink->b); if (!state->seq) { SinkBase *sink_base = (SinkBase *) sink; vips_error("vips_sink", _("start function failed for image \"%s\""), sink_base->im->filename); return -1; } } return 0; } static int sink_thread_state_build(VipsObject *object) { SinkThreadState *state = (SinkThreadState *) object; Sink *sink = (Sink *) ((VipsThreadState *) state)->a; if (!(state->reg = vips_region_new(sink->t)) || sink_call_start(sink, state)) return -1; return VIPS_OBJECT_CLASS(sink_thread_state_parent_class)->build(object); } static void sink_thread_state_class_init(SinkThreadStateClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class); gobject_class->dispose = sink_thread_state_dispose; object_class->build = sink_thread_state_build; object_class->nickname = "sinkthreadstate"; object_class->description = _("per-thread state for sink"); } static void sink_thread_state_init(SinkThreadState *state) { state->seq = NULL; state->reg = NULL; } VipsThreadState * vips_sink_thread_state_new(VipsImage *im, void *a) { return VIPS_THREAD_STATE(vips_object_new( sink_thread_state_get_type(), vips_thread_state_set, im, a)); } static void sink_free(Sink *sink) { VIPS_FREEF(sink_area_free, sink->area); VIPS_FREEF(sink_area_free, sink->old_area); VIPS_FREEF(g_object_unref, sink->t); } void vips_sink_base_init(SinkBase *sink_base, VipsImage *image) { /* Always clear kill before we start looping. See the * call to vips_image_iskilled() below. */ vips_image_set_kill(image, FALSE); sink_base->im = image; sink_base->x = 0; sink_base->y = 0; vips_get_tile_size(image, &sink_base->tile_width, &sink_base->tile_height, &sink_base->n_lines); sink_base->processed = 0; } static int sink_init(Sink *sink, VipsImage *image, VipsStartFn start_fn, VipsGenerateFn generate_fn, VipsStopFn stop_fn, void *a, void *b) { g_assert(generate_fn); vips_sink_base_init(&sink->sink_base, image); sink->t = NULL; sink->start_fn = start_fn; sink->generate_fn = generate_fn; sink->stop_fn = stop_fn; sink->a = a; sink->b = b; sink->area = NULL; sink->old_area = NULL; if (!(sink->t = vips_image_new()) || !(sink->area = sink_area_new(sink)) || !(sink->old_area = sink_area_new(sink)) || vips_image_write(sink->sink_base.im, sink->t)) { sink_free(sink); return -1; } return 0; } static int sink_work(VipsThreadState *state, void *a) { SinkThreadState *sstate = (SinkThreadState *) state; Sink *sink = (Sink *) a; SinkArea *area = sstate->area; int result; result = vips_region_prepare(sstate->reg, &state->pos); if (!result) result = sink->generate_fn(sstate->reg, sstate->seq, sink->a, sink->b, &state->stop); /* Tell the allocator we're done. */ vips_semaphore_upn(&area->n_thread, 1); return result; } int vips_sink_base_progress(void *a) { SinkBase *sink_base = (SinkBase *) a; VIPS_DEBUG_MSG("vips_sink_base_progress:\n"); /* Trigger any eval callbacks on our source image and * check for errors. */ vips_image_eval(sink_base->im, sink_base->processed); if (vips_image_iskilled(sink_base->im)) return -1; return 0; } /** * vips_sink_tile: (method) * @im: scan over this image * @tile_width: tile width * @tile_height: tile height * @start_fn: start sequences with this function * @generate_fn: generate pixels with this function * @stop_fn: stop sequences with this function * @a: user data * @b: user data * * Loops over an image. @generate_fn is called for every * pixel in the image, with * the @reg argument being a region of calculated pixels. * * Each set of pixels is @tile_width by @tile_height pixels (less at the * image edges). This is handy for things like writing a tiled TIFF image, * where tiles have to be generated with a certain size. * * See also: vips_sink(), vips_get_tile_size(). * * Returns: 0 on success, or -1 on error. */ int vips_sink_tile(VipsImage *im, int tile_width, int tile_height, VipsStartFn start_fn, VipsGenerateFn generate_fn, VipsStopFn stop_fn, void *a, void *b) { Sink sink; int result; g_assert(vips_object_sanity(VIPS_OBJECT(im))); /* We don't use this, but make sure it's set in case any old binaries * are expecting it. */ im->Bbits = vips_format_sizeof(im->BandFmt) << 3; if (sink_init(&sink, im, start_fn, generate_fn, stop_fn, a, b)) return -1; if (tile_width > 0) { sink.sink_base.tile_width = tile_width; sink.sink_base.tile_height = tile_height; } /* vips_sink_base_progress() signals progress on im, so we have to do * pre/post on that too. */ vips_image_preeval(im); sink_area_position(sink.area, 0, sink.sink_base.n_lines); result = vips_threadpool_run(im, vips_sink_thread_state_new, sink_area_allocate_fn, sink_work, vips_sink_base_progress, &sink); vips_image_posteval(im); sink_free(&sink); vips_image_minimise_all(im); return result; } /** * vips_sink: (method) * @im: scan over this image * @start_fn: start sequences with this function * @generate_fn: generate pixels with this function * @stop_fn: stop sequences with this function * @a: user data * @b: user data * * Loops over an image. @generate_fn is called for every pixel in * the image, with * the @reg argument being a region of calculated pixels. vips_sink() is * used to implement operations like vips_avg() which have no image output. * * Each set of pixels is sized according to the requirements of the image * pipeline that generated @im. * * See also: vips_image_generate(), vips_image_new(). * * Returns: 0 on success, or -1 on error. */ int vips_sink(VipsImage *im, VipsStartFn start_fn, VipsGenerateFn generate_fn, VipsStopFn stop_fn, void *a, void *b) { return vips_sink_tile(im, -1, -1, start_fn, generate_fn, stop_fn, a, b); } libvips-8.15.1/libvips/iofuncs/sink.h000066400000000000000000000034321454007373500175230ustar00rootroot00000000000000/* A sink that's not attached to anything, eg. find image average, * * 28/3/10 * - from im_iterate(), reworked for threadpool */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_SINK_H #define VIPS_SINK_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #include #include /* Base for sink.c / sinkdisc.c / sinkmemory.c */ typedef struct _SinkBase { VipsImage *im; /* The position we're at in buf. */ int x; int y; /* The tilesize we've picked. */ int tile_width; int tile_height; int n_lines; /* The number of pixels allocate has allocated. Used for progress * feedback. */ guint64 processed; } SinkBase; /* Some function we can share. */ void vips_sink_base_init(SinkBase *sink_base, VipsImage *image); VipsThreadState *vips_sink_thread_state_new(VipsImage *im, void *a); int vips_sink_base_allocate(VipsThreadState *state, void *a, gboolean *stop); int vips_sink_base_progress(void *a); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_SINK_H*/ libvips-8.15.1/libvips/iofuncs/sinkdisc.c000066400000000000000000000314571454007373500203710ustar00rootroot00000000000000/* Write an image to a disc file. * * 19/3/10 * - from im_wbuffer.c * - move on top of VipsThreadpool, instead of im_threadgroup_t * 23/6/10 * - better buffer handling for single-line images * 17/7/10 * - we could get stuck if allocate failed (thanks Tim) * 23/2/12 * - we could deadlock if generate failed */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #include #include #include #include #include #include "sink.h" /* A buffer we are going to write to disc in a background thread. */ typedef struct _WriteBuffer { struct _Write *write; VipsRegion *region; /* Pixels */ VipsRect area; /* Part of image this region covers */ VipsSemaphore go; /* Start bg thread loop */ VipsSemaphore nwrite; /* Number of threads writing to region */ VipsSemaphore done; /* Bg thread has done write */ VipsSemaphore finish; /* Bg thread has finished */ int write_errno; /* Save write errors here */ gboolean running; /* Whether the bg writer thread is running */ gboolean kill; /* Set to ask thread to exit */ } WriteBuffer; /* Per-call state. */ typedef struct _Write { SinkBase sink_base; /* We are current writing tiles to buf, buf_back is in the hands of * the bg write thread. */ WriteBuffer *buf; WriteBuffer *buf_back; /* The file format write operation. */ VipsRegionWrite write_fn; void *a; } Write; /* Our per-thread state ... we need to also track the buffer that pos is * supposed to write to. */ typedef struct _WriteThreadState { VipsThreadState parent_object; WriteBuffer *buf; } WriteThreadState; typedef struct _WriteThreadStateClass { VipsThreadStateClass parent_class; } WriteThreadStateClass; G_DEFINE_TYPE(WriteThreadState, write_thread_state, VIPS_TYPE_THREAD_STATE); static void write_thread_state_class_init(WriteThreadStateClass *class) { VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class); object_class->nickname = "writethreadstate"; object_class->description = _("per-thread state for sinkdisc"); } static void write_thread_state_init(WriteThreadState *state) { state->buf = NULL; } static VipsThreadState * write_thread_state_new(VipsImage *im, void *a) { return VIPS_THREAD_STATE(vips_object_new( write_thread_state_get_type(), vips_thread_state_set, im, a)); } static void wbuffer_free(WriteBuffer *wbuffer) { /* Is there a thread running this region? Kill it! */ if (wbuffer->running) { wbuffer->kill = TRUE; vips_semaphore_up(&wbuffer->go); vips_semaphore_down(&wbuffer->finish); VIPS_DEBUG_MSG("wbuffer_free:\n"); wbuffer->running = FALSE; } VIPS_UNREF(wbuffer->region); vips_semaphore_destroy(&wbuffer->go); vips_semaphore_destroy(&wbuffer->nwrite); vips_semaphore_destroy(&wbuffer->done); vips_semaphore_destroy(&wbuffer->finish); g_free(wbuffer); } static void wbuffer_write(WriteBuffer *wbuffer) { Write *write = wbuffer->write; VIPS_DEBUG_MSG("wbuffer_write: %d bytes from wbuffer %p\n", wbuffer->region->bpl * wbuffer->area.height, wbuffer); VIPS_GATE_START("wbuffer_write: work"); wbuffer->write_errno = write->write_fn(wbuffer->region, &wbuffer->area, write->a); VIPS_GATE_STOP("wbuffer_write: work"); } /* Run this as a thread to do a BG write. */ static void wbuffer_write_thread(void *data, void *user_data) { WriteBuffer *wbuffer = (WriteBuffer *) data; for (;;) { /* Wait to be told to write. */ vips_semaphore_down(&wbuffer->go); if (wbuffer->kill) break; /* Now block until the last worker finishes on this buffer. */ vips_semaphore_downn(&wbuffer->nwrite, 0); wbuffer_write(wbuffer); /* Signal write complete. */ vips_semaphore_up(&wbuffer->done); } /* We are exiting: tell the main thread. */ vips_semaphore_up(&wbuffer->finish); } static WriteBuffer * wbuffer_new(Write *write) { WriteBuffer *wbuffer; if (!(wbuffer = VIPS_NEW(NULL, WriteBuffer))) return NULL; wbuffer->write = write; wbuffer->region = NULL; vips_semaphore_init(&wbuffer->go, 0, "go"); vips_semaphore_init(&wbuffer->nwrite, 0, "nwrite"); vips_semaphore_init(&wbuffer->done, 0, "done"); vips_semaphore_init(&wbuffer->finish, 0, "finish"); wbuffer->write_errno = 0; wbuffer->running = FALSE; wbuffer->kill = FALSE; if (!(wbuffer->region = vips_region_new(write->sink_base.im))) { wbuffer_free(wbuffer); return NULL; } /* The worker threads need to be able to move the buffers around. */ vips__region_no_ownership(wbuffer->region); /* Make this last (picks up parts of wbuffer on startup). */ if (vips_thread_execute("wbuffer", wbuffer_write_thread, wbuffer)) { wbuffer_free(wbuffer); return NULL; } wbuffer->running = TRUE; return wbuffer; } /* Block until the previous write completes, then write the front buffer. */ static int wbuffer_flush(Write *write) { VIPS_DEBUG_MSG("wbuffer_flush:\n"); /* Block until the other buffer has been written. We have to do this * before we can set this buffer writing or we'll lose output ordering. */ if (write->buf->area.top > 0) { vips_semaphore_down(&write->buf_back->done); /* Previous write succeeded? */ if (write->buf_back->write_errno) { vips_error_system(write->buf_back->write_errno, "wbuffer_write", "%s", _("write failed")); return -1; } } /* Set the background writer going for this buffer. */ vips_semaphore_up(&write->buf->go); return 0; } /* Move a wbuffer to a position. */ static int wbuffer_position(WriteBuffer *wbuffer, int top, int height) { VipsRect image, area; int result; image.left = 0; image.top = 0; image.width = wbuffer->write->sink_base.im->Xsize; image.height = wbuffer->write->sink_base.im->Ysize; area.left = 0; area.top = top; area.width = wbuffer->write->sink_base.im->Xsize; area.height = height; vips_rect_intersectrect(&area, &image, &wbuffer->area); /* The workers take turns to move the buffers. */ vips__region_take_ownership(wbuffer->region); result = vips_region_buffer(wbuffer->region, &wbuffer->area); vips__region_no_ownership(wbuffer->region); /* This should be an exclusive buffer, hopefully. */ if (!result) g_assert(!wbuffer->region->buffer->done); return result; } /* Our VipsThreadpoolAllocate function ... move the thread to the next tile * that needs doing. If no buffer is available (the bg writer hasn't yet * finished with it), we block. If all tiles are done, we return FALSE to end * iteration. */ static gboolean wbuffer_allocate_fn(VipsThreadState *state, void *a, gboolean *stop) { WriteThreadState *wstate = (WriteThreadState *) state; Write *write = (Write *) a; SinkBase *sink_base = (SinkBase *) write; VipsRect image; VipsRect tile; VIPS_DEBUG_MSG("wbuffer_allocate_fn:\n"); /* Is the state x/y OK? New line or maybe new buffer or maybe even * all done. */ if (sink_base->x >= write->buf->area.width) { sink_base->x = 0; sink_base->y += sink_base->tile_height; if (sink_base->y >= VIPS_RECT_BOTTOM(&write->buf->area)) { VIPS_DEBUG_MSG("wbuffer_allocate_fn: " "finished top = %d, height = %d\n", write->buf->area.top, write->buf->area.height); /* Block until the write of the previous buffer * is done, then set write of this buffer going. */ if (wbuffer_flush(write)) { *stop = TRUE; return -1; } /* End of image? */ if (sink_base->y >= sink_base->im->Ysize) { *stop = TRUE; return 0; } VIPS_DEBUG_MSG("wbuffer_allocate_fn: " "starting top = %d, height = %d\n", sink_base->y, sink_base->n_lines); /* Swap buffers. */ VIPS_SWAP(WriteBuffer *, write->buf, write->buf_back); /* Position buf at the new y. */ if (wbuffer_position(write->buf, sink_base->y, sink_base->n_lines)) { *stop = TRUE; return -1; } /* This will be the first tile of a new buffer ... * stall for a moment to stress the caching system. */ state->stall = TRUE; } } /* x, y and buf are good: save params for thread. */ image.left = 0; image.top = 0; image.width = sink_base->im->Xsize; image.height = sink_base->im->Ysize; tile.left = sink_base->x; tile.top = sink_base->y; tile.width = sink_base->tile_width; tile.height = sink_base->tile_height; vips_rect_intersectrect(&image, &tile, &state->pos); /* The thread needs to know which buffer it's writing to. */ wstate->buf = write->buf; VIPS_DEBUG_MSG(" thread %p allocated " "left = %d, top = %d, width = %d, height = %d\n", g_thread_self(), tile.left, tile.top, tile.width, tile.height); /* Add to the number of writers on the buffer. */ vips_semaphore_upn(&write->buf->nwrite, -1); /* Move state on. */ sink_base->x += sink_base->tile_width; /* Add the number of pixels we've just allocated to progress. */ sink_base->processed += state->pos.width * state->pos.height; return 0; } /* Our VipsThreadpoolWork function ... generate a tile! */ static int wbuffer_work_fn(VipsThreadState *state, void *a) { WriteThreadState *wstate = (WriteThreadState *) state; int result; VIPS_DEBUG_MSG("wbuffer_work_fn: thread %p, %d x %d\n", g_thread_self(), state->pos.left, state->pos.top); result = vips_region_prepare_to(state->reg, wstate->buf->region, &state->pos, state->pos.left, state->pos.top); VIPS_DEBUG_MSG("wbuffer_work_fn: thread %p result = %d\n", g_thread_self(), result); /* Tell the bg write thread we've left. */ vips_semaphore_upn(&wstate->buf->nwrite, 1); return result; } static void write_init(Write *write, VipsImage *image, VipsRegionWrite write_fn, void *a) { vips_sink_base_init(&write->sink_base, image); write->buf = wbuffer_new(write); write->buf_back = wbuffer_new(write); write->write_fn = write_fn; write->a = a; } static void write_free(Write *write) { VIPS_FREEF(wbuffer_free, write->buf); VIPS_FREEF(wbuffer_free, write->buf_back); } /** * VipsRegionWrite: * @region: get pixels from here * @area: area to write * @a: client data * * The function should write the pixels in @area from @region. @a is the * value passed into vips_sink_disc(). * * See also: vips_sink_disc(). * * Returns: 0 on success, -1 on error. */ /** * vips_sink_disc: (method) * @im: image to process * @write_fn: (scope call): called for every batch of pixels * @a: (closure write_fn): client data * * vips_sink_disc() loops over @im, top-to-bottom, generating it in sections. * As each section is produced, @write_fn is called. * * @write_fn is always called single-threaded (though not always from the same * thread), it's always given image * sections in top-to-bottom order, and there are never any gaps. * * This operation is handy for making image sinks which output to things like * disc files. Things like vips_jpegsave(), for example, use this to write * images to files in JPEG format. * * See also: vips_concurrency_set(). * * Returns: 0 on success, -1 on error. */ int vips_sink_disc(VipsImage *im, VipsRegionWrite write_fn, void *a) { Write write; int result; vips_image_preeval(im); write_init(&write, im, write_fn, a); result = 0; if (!write.buf || !write.buf_back || wbuffer_position(write.buf, 0, write.sink_base.n_lines) || vips_threadpool_run(im, write_thread_state_new, wbuffer_allocate_fn, wbuffer_work_fn, vips_sink_base_progress, &write)) result = -1; /* Just before allocate signalled stop, it set write.buf writing. We * need to wait for this write to finish. * * We can't just free the buffers (which will wait for the bg threads * to finish), since the bg thread might see the kill before it gets a * chance to write. * * If the pool exited with an error, write.buf might not have been * started (if the allocate failed), and in any case, we don't care if * the final write went through or not. */ if (!result) vips_semaphore_down(&write.buf->done); vips_image_posteval(im); write_free(&write); vips_image_minimise_all(im); return result; } libvips-8.15.1/libvips/iofuncs/sinkmemory.c000066400000000000000000000205021454007373500207440ustar00rootroot00000000000000/* SinkMemory an image to a memory buffer, keeping top-to-bottom ordering. * * For sequential operations we need to keep requests reasonably ordered: we * can't let some tiles get very delayed. So we need to stall starting new * threads if the last thread gets too far behind. * * 17/2/12 * - from sinkdisc.c * 23/2/12 * - we could deadlock if generate failed */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "sink.h" /* A part of the image we are writing. */ typedef struct _SinkMemoryArea { struct _SinkMemory *memory; VipsRect rect; /* Part of image this area covers */ VipsSemaphore nwrite; /* Number of threads writing to this area */ } SinkMemoryArea; /* Per-call state. */ typedef struct _SinkMemory { SinkBase sink_base; /* We are current writing tiles to area, we'll delay starting a new * area if old_area (the previous position) hasn't completed. */ SinkMemoryArea *area; SinkMemoryArea *old_area; /* A region covering the whole of the output image ... we write to * this from many workers with vips_region_prepare_to(). */ VipsRegion *region; } SinkMemory; /* Our per-thread state ... we need to also track the area that pos is * supposed to write to. */ typedef struct _SinkMemoryThreadState { VipsThreadState parent_object; SinkMemoryArea *area; } SinkMemoryThreadState; typedef struct _SinkMemoryThreadStateClass { VipsThreadStateClass parent_class; } SinkMemoryThreadStateClass; G_DEFINE_TYPE(SinkMemoryThreadState, sink_memory_thread_state, VIPS_TYPE_THREAD_STATE); static void sink_memory_thread_state_class_init(SinkMemoryThreadStateClass *class) { VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class); object_class->nickname = "sinkmemorythreadstate"; object_class->description = _("per-thread state for sinkmemory"); } static void sink_memory_thread_state_init(SinkMemoryThreadState *state) { } static VipsThreadState * sink_memory_thread_state_new(VipsImage *image, void *a) { return VIPS_THREAD_STATE(vips_object_new( sink_memory_thread_state_get_type(), vips_thread_state_set, image, a)); } static void sink_memory_area_free(SinkMemoryArea *area) { vips_semaphore_destroy(&area->nwrite); g_free(area); } static SinkMemoryArea * sink_memory_area_new(SinkMemory *memory) { SinkMemoryArea *area; if (!(area = VIPS_NEW(NULL, SinkMemoryArea))) return NULL; area->memory = memory; vips_semaphore_init(&area->nwrite, 0, "nwrite"); return area; } /* Move an area to a position. */ static void sink_memory_area_position(SinkMemoryArea *area, int top, int height) { SinkMemory *memory = area->memory; VipsRect all, rect; all.left = 0; all.top = 0; all.width = memory->sink_base.im->Xsize; all.height = memory->sink_base.im->Ysize; rect.left = 0; rect.top = top; rect.width = memory->sink_base.im->Xsize; rect.height = height; vips_rect_intersectrect(&all, &rect, &area->rect); } /* Our VipsThreadpoolAllocate function ... move the thread to the next tile * that needs doing. If we fill the current area, we block until the previous * area is finished, then swap areas. * If all tiles are done, we return FALSE to end * iteration. */ static gboolean sink_memory_area_allocate_fn(VipsThreadState *state, void *a, gboolean *stop) { SinkMemoryThreadState *smstate = (SinkMemoryThreadState *) state; SinkMemory *memory = (SinkMemory *) a; SinkBase *sink_base = (SinkBase *) memory; VipsRect image; VipsRect tile; VIPS_DEBUG_MSG("sink_memory_area_allocate_fn: %p\n", g_thread_self()); /* Is the state x/y OK? New line or maybe new buffer or maybe even * all done. */ if (sink_base->x >= memory->area->rect.width) { sink_base->x = 0; sink_base->y += sink_base->tile_height; if (sink_base->y >= VIPS_RECT_BOTTOM(&memory->area->rect)) { /* Block until the previous area is done. */ if (memory->area->rect.top > 0) vips_semaphore_downn( &memory->old_area->nwrite, 0); /* End of image? */ if (sink_base->y >= sink_base->im->Ysize) { *stop = TRUE; return 0; } /* Swap buffers. */ VIPS_SWAP(SinkMemoryArea *, memory->area, memory->old_area); /* Position buf at the new y. */ sink_memory_area_position(memory->area, sink_base->y, sink_base->n_lines); } } /* x, y and buf are good: save params for thread. */ image.left = 0; image.top = 0; image.width = sink_base->im->Xsize; image.height = sink_base->im->Ysize; tile.left = sink_base->x; tile.top = sink_base->y; tile.width = sink_base->tile_width; tile.height = sink_base->tile_height; vips_rect_intersectrect(&image, &tile, &state->pos); /* The thread needs to know which area it's writing to. */ smstate->area = memory->area; VIPS_DEBUG_MSG(" %p allocated %d x %d:\n", g_thread_self(), state->pos.left, state->pos.top); /* Add to the number of writers on the area. */ vips_semaphore_upn(&memory->area->nwrite, -1); /* Move state on. */ sink_base->x += sink_base->tile_width; /* Add the number of pixels we've just allocated to progress. */ sink_base->processed += state->pos.width * state->pos.height; return 0; } /* Our VipsThreadpoolWork function ... generate a tile! */ static int sink_memory_area_work_fn(VipsThreadState *state, void *a) { SinkMemory *memory = (SinkMemory *) a; SinkMemoryThreadState *smstate = (SinkMemoryThreadState *) state; SinkMemoryArea *area = smstate->area; int result; VIPS_DEBUG_MSG("sink_memory_area_work_fn: %p %d x %d\n", g_thread_self(), state->pos.left, state->pos.top); result = vips_region_prepare_to(state->reg, memory->region, &state->pos, state->pos.left, state->pos.top); VIPS_DEBUG_MSG("sink_memory_area_work_fn: %p result = %d\n", g_thread_self(), result); /* Tell the allocator we're done. */ vips_semaphore_upn(&area->nwrite, 1); return result; } static void sink_memory_free(SinkMemory *memory) { VIPS_FREEF(sink_memory_area_free, memory->area); VIPS_FREEF(sink_memory_area_free, memory->old_area); VIPS_UNREF(memory->region); } static int sink_memory_init(SinkMemory *memory, VipsImage *image) { VipsRect all; vips_sink_base_init(&memory->sink_base, image); memory->area = NULL; memory->old_area = NULL; all.left = 0; all.top = 0; all.width = image->Xsize; all.height = image->Ysize; if (!(memory->region = vips_region_new(image)) || vips_region_image(memory->region, &all) || !(memory->area = sink_memory_area_new(memory)) || !(memory->old_area = sink_memory_area_new(memory))) { sink_memory_free(memory); return -1; } return 0; } /** * vips_sink_memory: * @im: generate this image to memory * * Loops over @im, generating it to a memory buffer attached to @im. It is * used by vips to implement writing to a memory buffer. * * See also: vips_sink(), vips_get_tile_size(), vips_image_new_memory(). * * Returns: 0 on success, or -1 on error. */ int vips_sink_memory(VipsImage *image) { SinkMemory memory; int result; if (sink_memory_init(&memory, image)) return -1; vips_image_preeval(image); result = 0; sink_memory_area_position(memory.area, 0, memory.sink_base.n_lines); if (vips_threadpool_run(image, sink_memory_thread_state_new, sink_memory_area_allocate_fn, sink_memory_area_work_fn, vips_sink_base_progress, &memory)) result = -1; vips_image_posteval(image); sink_memory_free(&memory); vips_image_minimise_all(image); VIPS_DEBUG_MSG("vips_sink_memory: done\n"); return result; } libvips-8.15.1/libvips/iofuncs/sinkscreen.c000066400000000000000000000656411454007373500207300ustar00rootroot00000000000000/* asynchronous screen sink * * 1/1/10 * - from im_render.c * 25/11/10 * - in synchronous mode, use a single region for input and save huge * mem use * 20/1/14 * - bg render thread quits on shutdown * 1/12/15 * - don't do anything to out or mask after they have closed * - only run the bg render thread when there's work to do */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Verbose debugging output. #define VIPS_DEBUG */ /* Trace allocate/free. #define VIPS_DEBUG_AMBER */ /* Trace reschedule #define VIPS_DEBUG_GREEN */ /* Trace serious problems. #define VIPS_DEBUG_RED */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #include #include #include #include #ifdef VIPS_DEBUG_AMBER static int render_num_renders = 0; #endif /*VIPS_DEBUG_AMBER*/ /* A tile in our cache. */ typedef struct { struct _Render *render; VipsRect area; /* Place here (unclipped) */ VipsRegion *region; /* VipsRegion with the pixels */ /* The tile contains calculated pixels. Though the region may have been * invalidated behind our backs: we have to check that too. */ gboolean painted; /* The tile is on the dirty list. This saves us having to search the * dirty list all the time. */ gboolean dirty; /* Time of last use, for LRU flush */ int ticks; } Tile; /* Per-call state. */ typedef struct _Render { /* Reference count this, since we use these things from several * threads. We can't easily use the gobject ref count system since we * need a lock around operations. */ #if GLIB_CHECK_VERSION(2, 58, 0) gatomicrefcount ref_count; #else int ref_count; GMutex *ref_count_lock; #endif /* Parameters. */ VipsImage *in; /* Image we render */ VipsImage *out; /* Write tiles here on demand */ VipsImage *mask; /* Set valid pixels here */ int tile_width; /* Tile size */ int tile_height; int max_tiles; /* Maximum number of tiles */ int priority; /* Larger numbers done sooner */ VipsSinkNotify notify; /* Tell caller about paints here */ void *a; /* Lock here before reading or modifying the tile structure. */ GMutex *lock; /* Tile cache. */ GSList *all; /* All our tiles */ int ntiles; /* Number of tiles */ int ticks; /* Inc. on each access ... used for LRU */ /* List of dirty tiles. Most recent at the front. */ GSList *dirty; /* Hash of tiles with positions. Tiles can be dirty or painted. */ GHashTable *tiles; /* A shutdown flag. If ->out or ->mask close, we must no longer do * anything to them until we shut down too. */ gboolean shutdown; } Render; /* Our per-thread state. */ typedef struct _RenderThreadState { VipsThreadState parent_object; /* The tile that should be calculated. */ Tile *tile; } RenderThreadState; typedef struct _RenderThreadStateClass { VipsThreadStateClass parent_class; } RenderThreadStateClass; G_DEFINE_TYPE(RenderThreadState, render_thread_state, VIPS_TYPE_THREAD_STATE); /* The BG thread which sits waiting to do some calculations, and the semaphore * it waits on holding the number of renders with dirty tiles. */ static GThread *render_thread = NULL; /* Set this to ask the render thread to quit. */ static gboolean render_kill = FALSE; /* All the renders with dirty tiles, and a semaphore that the bg render thread * waits on. */ static GMutex *render_dirty_lock = NULL; static GSList *render_dirty_all = NULL; static VipsSemaphore n_render_dirty_sem; /* Set this to make the bg thread stop and reschedule. */ static gboolean render_reschedule = FALSE; static void render_thread_state_class_init(RenderThreadStateClass *class) { VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class); object_class->nickname = "renderthreadstate"; object_class->description = _("per-thread state for render"); } static void render_thread_state_init(RenderThreadState *state) { state->tile = NULL; } static VipsThreadState * render_thread_state_new(VipsImage *im, void *a) { return VIPS_THREAD_STATE(vips_object_new( render_thread_state_get_type(), vips_thread_state_set, im, a)); } static void * tile_free(Tile *tile, void *a, void *b) { VIPS_DEBUG_MSG_AMBER("tile_free\n"); VIPS_UNREF(tile->region); g_free(tile); return NULL; } static int render_free(Render *render) { VIPS_DEBUG_MSG_AMBER("render_free: %p\n", render); #if GLIB_CHECK_VERSION(2, 58, 0) g_assert(g_atomic_ref_count_compare(&render->ref_count, 0)); #else g_assert(render->ref_count == 0); #endif g_mutex_lock(render_dirty_lock); if (g_slist_find(render_dirty_all, render)) { render_dirty_all = g_slist_remove(render_dirty_all, render); /* We don't need to adjust the semaphore: if it's too high, * the render thread will just loop and decrement next time * render_dirty_all is NULL. */ } g_mutex_unlock(render_dirty_lock); #if !GLIB_CHECK_VERSION(2, 58, 0) vips_g_mutex_free(render->ref_count_lock); #endif vips_g_mutex_free(render->lock); vips_slist_map2(render->all, (VipsSListMap2Fn) tile_free, NULL, NULL); VIPS_FREEF(g_slist_free, render->all); render->ntiles = 0; VIPS_FREEF(g_slist_free, render->dirty); VIPS_FREEF(g_hash_table_destroy, render->tiles); VIPS_UNREF(render->in); g_free(render); #ifdef VIPS_DEBUG_AMBER render_num_renders -= 1; #endif /*VIPS_DEBUG_AMBER*/ return 0; } /* Ref and unref a Render ... free on last unref. */ static int render_ref(Render *render) { #if GLIB_CHECK_VERSION(2, 58, 0) g_assert(!g_atomic_ref_count_compare(&render->ref_count, 0)); g_atomic_ref_count_inc(&render->ref_count); #else g_mutex_lock(render->ref_count_lock); g_assert(render->ref_count != 0); render->ref_count += 1; g_mutex_unlock(render->ref_count_lock); #endif return 0; } static int render_unref(Render *render) { int kill; #if GLIB_CHECK_VERSION(2, 58, 0) g_assert(!g_atomic_ref_count_compare(&render->ref_count, 0)); kill = g_atomic_ref_count_dec(&render->ref_count); #else g_mutex_lock(render->ref_count_lock); g_assert(render->ref_count > 0); render->ref_count -= 1; kill = render->ref_count == 0; g_mutex_unlock(render->ref_count_lock); #endif if (kill) render_free(render); return 0; } /* Get the next tile to paint off the dirty list. */ static Tile * render_tile_dirty_get(Render *render) { Tile *tile; if (!render->dirty) tile = NULL; else { tile = (Tile *) render->dirty->data; g_assert(tile->dirty); render->dirty = g_slist_remove(render->dirty, tile); tile->dirty = FALSE; } return tile; } /* Pick a dirty tile to reuse. We could potentially get the tile that * render_work() is working on in the background :-( but I don't think we'll * get a crash, just a mis-paint. It should be vanishingly impossible anyway. */ static Tile * render_tile_dirty_reuse(Render *render) { Tile *tile; if (!render->dirty) tile = NULL; else { tile = (Tile *) g_slist_last(render->dirty)->data; render->dirty = g_slist_remove(render->dirty, tile); g_assert(tile->dirty); tile->dirty = FALSE; VIPS_DEBUG_MSG("render_tile_get_dirty_reuse: reusing dirty %p\n", tile); } return tile; } /* Add a tile to the dirty list. */ static void tile_dirty_set(Tile *tile) { Render *render = tile->render; if (!tile->dirty) { g_assert(!g_slist_find(render->dirty, tile)); render->dirty = g_slist_prepend(render->dirty, tile); tile->dirty = TRUE; tile->painted = FALSE; } else g_assert(g_slist_find(render->dirty, tile)); } /* Bump a tile to the front of the dirty list, if it's there. */ static void tile_dirty_bump(Tile *tile) { Render *render = tile->render; if (tile->dirty) { g_assert(g_slist_find(render->dirty, tile)); render->dirty = g_slist_remove(render->dirty, tile); render->dirty = g_slist_prepend(render->dirty, tile); } else g_assert(!g_slist_find(render->dirty, tile)); } static int render_allocate(VipsThreadState *state, void *a, gboolean *stop) { Render *render = (Render *) a; RenderThreadState *rstate = (RenderThreadState *) state; Tile *tile; g_mutex_lock(render->lock); if (render_reschedule || !(tile = render_tile_dirty_get(render))) { VIPS_DEBUG_MSG_GREEN("render_allocate: stopping\n"); *stop = TRUE; rstate->tile = NULL; } else rstate->tile = tile; g_mutex_unlock(render->lock); return 0; } static int render_work(VipsThreadState *state, void *a) { Render *render = (Render *) a; RenderThreadState *rstate = (RenderThreadState *) state; Tile *tile = rstate->tile; g_assert(tile); VIPS_DEBUG_MSG("calculating tile %p %dx%d\n", tile, tile->area.left, tile->area.top); if (vips_region_prepare_to(state->reg, tile->region, &tile->area, tile->area.left, tile->area.top)) { VIPS_DEBUG_MSG_RED("render_work: " "vips_region_prepare_to() failed: %s\n", vips_error_buffer()); return -1; } tile->painted = TRUE; if (!render->shutdown && render->notify) render->notify(render->out, &tile->area, render->a); return 0; } static void render_dirty_put(Render *render); /* Called from vips_shutdown(). */ void vips__render_shutdown(void) { /* We may come here without having inited. */ if (render_dirty_lock) { g_mutex_lock(render_dirty_lock); if (render_thread) { GThread *thread; thread = render_thread; render_reschedule = TRUE; render_kill = TRUE; g_mutex_unlock(render_dirty_lock); vips_semaphore_up(&n_render_dirty_sem); (void) g_thread_join(thread); } else g_mutex_unlock(render_dirty_lock); VIPS_FREEF(vips_g_mutex_free, render_dirty_lock); vips_semaphore_destroy(&n_render_dirty_sem); } } static int render_dirty_sort(Render *a, Render *b, void *user_data) { return b->priority - a->priority; } /* Add to the jobs list, if it has work to be done. */ static void render_dirty_put(Render *render) { g_mutex_lock(render_dirty_lock); if (render->dirty) { if (!g_slist_find(render_dirty_all, render)) { render_dirty_all = g_slist_prepend(render_dirty_all, render); render_dirty_all = g_slist_sort(render_dirty_all, (GCompareFunc) render_dirty_sort); /* Tell the bg render thread we have one more dirty * render on there. */ vips_semaphore_up(&n_render_dirty_sem); } } g_mutex_unlock(render_dirty_lock); } static guint tile_hash(gconstpointer key) { VipsRect *rect = (VipsRect *) key; int x = rect->left / rect->width; int y = rect->top / rect->height; return x << 16 ^ y; } static gboolean tile_equal(gconstpointer a, gconstpointer b) { VipsRect *rect1 = (VipsRect *) a; VipsRect *rect2 = (VipsRect *) b; return rect1->left == rect2->left && rect1->top == rect2->top; } static void render_close_cb(VipsImage *image, Render *render) { VIPS_DEBUG_MSG_AMBER("render_close_cb\n"); /* The output image or mask are closing. This render will stick * around for a while, since threads can still be running, but it * must no longer reference ->out or ->mask (for example, invalidating * them). */ render->shutdown = TRUE; render_unref(render); /* If this render is being worked on, we want to jog the bg thread, * make it drop it's ref and think again. */ VIPS_DEBUG_MSG_GREEN("render_close_cb: reschedule\n"); render_reschedule = TRUE; } static Render * render_new(VipsImage *in, VipsImage *out, VipsImage *mask, int tile_width, int tile_height, int max_tiles, int priority, VipsSinkNotify notify, void *a) { Render *render; /* Don't use auto-free for render, we do our own lifetime management * with _ref() and _unref(). */ if (!(render = VIPS_NEW(NULL, Render))) return NULL; /* render must hold a ref to in. This is dropped in render_free(). */ g_object_ref(in); #if GLIB_CHECK_VERSION(2, 58, 0) g_atomic_ref_count_init(&render->ref_count); #else render->ref_count = 1; render->ref_count_lock = vips_g_mutex_new(); #endif render->in = in; render->out = out; render->mask = mask; render->tile_width = tile_width; render->tile_height = tile_height; render->max_tiles = max_tiles; render->priority = priority; render->notify = notify; render->a = a; render->lock = vips_g_mutex_new(); render->all = NULL; render->ntiles = 0; render->ticks = 0; render->tiles = g_hash_table_new(tile_hash, tile_equal); render->dirty = NULL; render->shutdown = FALSE; /* Both out and mask must close before we can free the render. */ g_signal_connect(out, "close", G_CALLBACK(render_close_cb), render); if (mask) { g_signal_connect(mask, "close", G_CALLBACK(render_close_cb), render); render_ref(render); } VIPS_DEBUG_MSG_AMBER("render_new: %p\n", render); #ifdef VIPS_DEBUG_AMBER render_num_renders += 1; #endif /*VIPS_DEBUG_AMBER*/ return render; } /* Make a Tile. */ static Tile * tile_new(Render *render) { Tile *tile; VIPS_DEBUG_MSG_AMBER("tile_new\n"); /* Don't use auto-free: we need to make sure we free the tile after * Render. */ if (!(tile = VIPS_NEW(NULL, Tile))) return NULL; tile->render = render; tile->area.left = 0; tile->area.top = 0; tile->area.width = render->tile_width; tile->area.height = render->tile_height; tile->region = NULL; tile->painted = FALSE; tile->dirty = FALSE; tile->ticks = render->ticks; if (!(tile->region = vips_region_new(render->in))) { (void) tile_free(tile, NULL, NULL); return NULL; } // tiles are shared between threads vips__region_no_ownership(tile->region); render->all = g_slist_prepend(render->all, tile); render->ntiles += 1; return tile; } /* Search the cache for a tile by position. */ static Tile * render_tile_lookup(Render *render, VipsRect *area) { return (Tile *) g_hash_table_lookup(render->tiles, area); } /* Add a new tile to the table. */ static void render_tile_add(Tile *tile, VipsRect *area) { Render *render = tile->render; g_assert(!render_tile_lookup(render, area)); tile->area = *area; tile->painted = FALSE; /* Ignore buffer allocate errors, there's not much we could do with * them. */ if (vips_region_buffer(tile->region, &tile->area)) VIPS_DEBUG_MSG_RED("render_tile_add: buffer allocate failed\n"); g_hash_table_insert(render->tiles, &tile->area, tile); } /* Move a tile to a new position. */ static void render_tile_move(Tile *tile, VipsRect *area) { Render *render = tile->render; g_assert(render_tile_lookup(render, &tile->area)); if (tile->area.left != area->left || tile->area.top != area->top) { g_assert(!render_tile_lookup(render, area)); g_hash_table_remove(render->tiles, &tile->area); render_tile_add(tile, area); } } /* We've looked at a tile ... bump to end of LRU and front of dirty. */ static void tile_touch(Tile *tile) { Render *render = tile->render; tile->ticks = render->ticks; render->ticks += 1; tile_dirty_bump(tile); } /* Queue a tile for calculation. */ static void tile_queue(Tile *tile, VipsRegion *reg) { Render *render = tile->render; VIPS_DEBUG_MSG("tile_queue: adding tile %p %dx%d to dirty\n", tile, tile->area.left, tile->area.top); tile->painted = FALSE; tile_touch(tile); if (render->notify) { /* Add to the list of renders with dirty tiles. The bg * thread will pick it up and paint it. It can be already on * the dirty list. */ tile_dirty_set(tile); render_dirty_put(render); } else { /* no notify ... paint the tile ourselves * synchronously. No need to notify the client since they'll * never see black tiles. */ VIPS_DEBUG_MSG("tile_queue: painting tile %p %dx%d synchronously\n", tile, tile->area.left, tile->area.top); /* While we're computing, let other threads use the cache. * This tile won't get pulled out from under us since it's not * marked as "painted", and it's not on the dirty list. */ g_mutex_unlock(render->lock); if (vips_region_prepare_to(reg, tile->region, &tile->area, tile->area.left, tile->area.top)) VIPS_DEBUG_MSG_RED("tile_queue: prepare failed\n"); g_mutex_lock(render->lock); tile->painted = TRUE; } } static void tile_test_clean_ticks(VipsRect *key, Tile *value, Tile **best) { if (value->painted) if (!*best || value->ticks < (*best)->ticks) *best = value; } /* Pick a painted tile to reuse. Search for LRU (slow!). */ static Tile * render_tile_get_painted(Render *render) { Tile *tile; tile = NULL; g_hash_table_foreach(render->tiles, (GHFunc) tile_test_clean_ticks, &tile); if (tile) { VIPS_DEBUG_MSG("render_tile_get_painted: reusing painted %p\n", tile); } return tile; } /* Ask for an area of calculated pixels. Get from cache, request calculation, * or if we've no threads or no notify, calculate immediately. */ static Tile * render_tile_request(Render *render, VipsRegion *reg, VipsRect *area) { Tile *tile; VIPS_DEBUG_MSG("render_tile_request: asking for %dx%d\n", area->left, area->top); if ((tile = render_tile_lookup(render, area))) { /* We already have a tile at this position. If it's invalid, * ask for a repaint. */ if (tile->region->invalid) tile_queue(tile, reg); else tile_touch(tile); } else if (render->ntiles < render->max_tiles || render->max_tiles == -1) { /* We have fewer tiles than the max. We can just make a new * tile. */ if (!(tile = tile_new(render))) return NULL; render_tile_add(tile, area); tile_queue(tile, reg); } else { /* Need to reuse a tile. Try for an old painted tile first, * then if that fails, reuse a dirty tile. */ if (!(tile = render_tile_get_painted(render)) && !(tile = render_tile_dirty_reuse(render))) { VIPS_DEBUG_MSG("render_tile_request: no tiles to reuse\n"); return NULL; } render_tile_move(tile, area); tile_queue(tile, reg); } return tile; } /* Copy what we can from the tile into the region. */ static void tile_copy(Tile *tile, VipsRegion *to) { VipsRect ovlap; /* Find common pixels. */ vips_rect_intersectrect(&tile->area, &to->valid, &ovlap); g_assert(!vips_rect_isempty(&ovlap)); /* If the tile is painted, copy over the pixels. Otherwise, fill with * zero. */ if (tile->painted && !tile->region->invalid) { int len = VIPS_IMAGE_SIZEOF_PEL(to->im) * ovlap.width; int y; VIPS_DEBUG_MSG("tile_copy: copying calculated pixels for %p %dx%d\n", tile, tile->area.left, tile->area.top); for (y = ovlap.top; y < VIPS_RECT_BOTTOM(&ovlap); y++) { VipsPel *p = VIPS_REGION_ADDR(tile->region, ovlap.left, y); VipsPel *q = VIPS_REGION_ADDR(to, ovlap.left, y); memcpy(q, p, len); } } else { VIPS_DEBUG_MSG("tile_copy: zero filling for %p %dx%d\n", tile, tile->area.left, tile->area.top); vips_region_paint(to, &ovlap, 0); } } /* Loop over the output region, filling with data from cache. */ static int image_fill(VipsRegion *out, void *seq, void *a, void *b, gboolean *stop) { Render *render = (Render *) b; int tile_width = render->tile_width; int tile_height = render->tile_height; VipsRegion *reg = (VipsRegion *) seq; VipsRect *r = &out->valid; int x, y; /* Find top left of tiles we need. */ int xs = (r->left / tile_width) * tile_width; int ys = (r->top / tile_height) * tile_height; VIPS_DEBUG_MSG("image_fill: left = %d, top = %d, " "width = %d, height = %d\n", r->left, r->top, r->width, r->height); g_mutex_lock(render->lock); /* FIXME ... if r fits inside a single tile, we could skip the copy. */ for (y = ys; y < VIPS_RECT_BOTTOM(r); y += tile_height) for (x = xs; x < VIPS_RECT_RIGHT(r); x += tile_width) { VipsRect area; Tile *tile; area.left = x; area.top = y; area.width = tile_width; area.height = tile_height; tile = render_tile_request(render, reg, &area); if (tile) tile_copy(tile, out); else VIPS_DEBUG_MSG_RED("image_fill: argh!\n"); } g_mutex_unlock(render->lock); return 0; } /* The mask image is 255 / 0 for the state of painted for each tile. */ static int mask_fill(VipsRegion *out, void *seq, void *a, void *b, gboolean *stop) { Render *render = (Render *) a; int tile_width = render->tile_width; int tile_height = render->tile_height; VipsRect *r = &out->valid; int x, y; /* Find top left of tiles we need. */ int xs = (r->left / tile_width) * tile_width; int ys = (r->top / tile_height) * tile_height; VIPS_DEBUG_MSG("mask_fill: left = %d, top = %d, " "width = %d, height = %d\n", r->left, r->top, r->width, r->height); g_mutex_lock(render->lock); for (y = ys; y < VIPS_RECT_BOTTOM(r); y += tile_height) for (x = xs; x < VIPS_RECT_RIGHT(r); x += tile_width) { VipsRect area; Tile *tile; int value; area.left = x; area.top = y; area.width = tile_width; area.height = tile_height; tile = render_tile_lookup(render, &area); value = (tile && tile->painted && !tile->region->invalid) ? 255 : 0; /* Only mark painted tiles containing valid pixels. */ vips_region_paint(out, &area, value); } g_mutex_unlock(render->lock); return 0; } /* Get the first render with dirty tiles. */ static Render * render_dirty_get(void) { Render *render; /* Wait for a render with dirty tiles. */ vips_semaphore_down(&n_render_dirty_sem); g_mutex_lock(render_dirty_lock); /* Just take the head of the jobs list ... we sort when we add. */ render = NULL; if (render_dirty_all) { render = (Render *) render_dirty_all->data; /* Ref the render to make sure it can't die while we're * working on it. */ render_ref(render); render_dirty_all = g_slist_remove(render_dirty_all, render); } g_mutex_unlock(render_dirty_lock); return render; } /* Loop for the background render manager thread. */ static void * render_thread_main(void *client) { Render *render; while (!render_kill) { VIPS_DEBUG_MSG_GREEN("render_thread_main: threadpool start\n"); render_reschedule = FALSE; if ((render = render_dirty_get())) { if (vips_threadpool_run(render->in, render_thread_state_new, render_allocate, render_work, NULL, render)) VIPS_DEBUG_MSG_RED("render_thread_main: " "threadpool_run failed\n"); VIPS_DEBUG_MSG_GREEN("render_thread_main: threadpool return\n"); /* Add back to the jobs list, if we need to. */ render_dirty_put(render); /* _get() does a ref to make sure we keep the render * alive during processing ... unref before we loop. * This can kill off the render. */ render_unref(render); } } /* We are exiting, so render_thread must now be NULL. */ render_thread = NULL; return NULL; } static void * vips__sink_screen_once(void *data) { g_assert(!render_thread); g_assert(!render_dirty_lock); render_dirty_lock = vips_g_mutex_new(); vips_semaphore_init(&n_render_dirty_sem, 0, "n_render_dirty"); /* Don't use vips_thread_execute(), since this thread will only be * ended by vips_shutdown, and that isn't always called. */ render_thread = vips_g_thread_new("sink_screen", render_thread_main, NULL); return NULL; } /** * vips_sink_screen: (method) * @in: input image * @out: (out): output image * @mask: mask image indicating valid pixels * @tile_width: tile width * @tile_height: tile height * @max_tiles: maximum tiles to cache * @priority: rendering priority * @notify_fn: (scope call) (nullable): pixels are ready notification callback * @a: (closure notify_fn) (nullable): client data for callback * * This operation renders @in in the background, making pixels available on * @out as they are calculated. The @notify_fn callback is run every time a new * set of pixels are available. Calculated pixels are kept in a cache with * tiles sized @tile_width by @tile_height pixels and with at most @max_tiles * tiles. * If @max_tiles is -1, the cache is of unlimited size (up to the maximum image * size). * The @mask image is a one-band uchar image and has 255 for pixels which are * currently in cache and 0 for uncalculated pixels. * * Only a single sink is calculated at any one time, though many may be * alive. Use @priority to indicate which renders are more important: * zero means normal * priority, negative numbers are low priority, positive numbers high * priority. * * Calls to vips_region_prepare() on @out return immediately and hold * whatever is * currently in cache for that #VipsRect (check @mask to see which parts of the * #VipsRect are valid). Any pixels in the #VipsRect which are not in * cache are added * to a queue, and the @notify_fn callback will trigger when those pixels are * ready. * * The @notify_fn callback is run from one of the background threads. In the * callback * you need to somehow send a message to the main thread that the pixels are * ready. In a glib-based application, this is easily done with g_idle_add(). * * If @notify_fn is %NULL then vips_sink_screen() runs synchronously. * vips_region_prepare() on @out will always block until the pixels have been * calculated. * * See also: vips_tilecache(), vips_region_prepare(), * vips_sink_disc(), vips_sink(). * * Returns: 0 on success, -1 on error. */ int vips_sink_screen(VipsImage *in, VipsImage *out, VipsImage *mask, int tile_width, int tile_height, int max_tiles, int priority, VipsSinkNotify notify_fn, void *a) { static GOnce once = G_ONCE_INIT; Render *render; VIPS_ONCE(&once, vips__sink_screen_once, NULL); if (tile_width <= 0 || tile_height <= 0 || max_tiles < -1) { vips_error("vips_sink_screen", "%s", _("bad parameters")); return -1; } if (vips_image_pio_input(in) || vips_image_pipelinev(out, VIPS_DEMAND_STYLE_SMALLTILE, in, NULL)) return -1; if (mask) { if (vips_image_pipelinev(mask, VIPS_DEMAND_STYLE_SMALLTILE, in, NULL)) return -1; mask->Bands = 1; mask->BandFmt = VIPS_FORMAT_UCHAR; mask->Type = VIPS_INTERPRETATION_B_W; mask->Coding = VIPS_CODING_NONE; } if (!(render = render_new(in, out, mask, tile_width, tile_height, max_tiles, priority, notify_fn, a))) return -1; VIPS_DEBUG_MSG("vips_sink_screen: max = %d, %p\n", max_tiles, render); if (vips_image_generate(out, vips_start_one, image_fill, vips_stop_one, in, render)) return -1; if (mask && vips_image_generate(mask, NULL, mask_fill, NULL, render, NULL)) return -1; return 0; } int vips__print_renders(void) { int n_leaks; n_leaks = 0; #ifdef VIPS_DEBUG_AMBER if (render_num_renders > 0) { printf("%d active renders\n", render_num_renders); n_leaks += render_num_renders; } #endif /*VIPS_DEBUG_AMBER*/ if (render_dirty_lock) { g_mutex_lock(render_dirty_lock); n_leaks += g_slist_length(render_dirty_all); if (render_dirty_all) printf("dirty renders\n"); g_mutex_unlock(render_dirty_lock); } return n_leaks; } libvips-8.15.1/libvips/iofuncs/source.c000066400000000000000000000767341454007373500200710ustar00rootroot00000000000000/* A byte source/sink .. it can be a pipe, file descriptor, memory area, * socket, node.js stream, etc. * * 19/6/14 * * 3/2/20 * - add vips_pipe_read_limit_set() * 3/10/20 * - improve behaviour with read and seek on pipes * 26/11/20 * - use _setmode() on win to force binary read for previously opened * descriptors * 8/10/21 * - fix named pipes * 10/5/22 * - add vips_source_new_from_target() */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define TEST_SANITY #define VIPS_DEBUG #define DEBUG_MINIMISE */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #include #include #include #include #include #include #ifdef G_OS_WIN32 #include #endif /*G_OS_WIN32*/ #include #include #define MODE_READ CLOEXEC(BINARYIZE(O_RDONLY)) /* -1 on a pipe isn't actually unbounded. Have a limit to prevent * huge sources accidentally filling memory. * * This can be configured with vips_pipe_read_limit_set(). */ static gint64 vips__pipe_read_limit = 1024 * 1024 * 1024; /** * vips_pipe_read_limit_set: * @limit: maximum number of bytes to buffer from a pipe * * If a source does not support mmap or seek and the source is * used with a loader that can only work from memory, then the data will be * automatically read into memory to EOF before the loader starts. This can * produce high memory use if the descriptor represents a large object. * * Use vips_pipe_read_limit_set() to limit the size of object that * will be read in this way. The default is 1GB. * * Set a value of -1 to mean no limit. * * See also: `--vips-pipe-read-limit` and the environment variable * `VIPS_PIPE_READ_LIMIT`. */ void vips_pipe_read_limit_set(gint64 limit) { vips__pipe_read_limit = limit; } G_DEFINE_TYPE(VipsSource, vips_source, VIPS_TYPE_CONNECTION); /* Does this source support seek. You must unminimise before calling this. */ static int vips_source_test_seek(VipsSource *source) { if (!source->have_tested_seek) { VipsSourceClass *class = VIPS_SOURCE_GET_CLASS(source); source->have_tested_seek = TRUE; VIPS_DEBUG_MSG("vips_source_can_seek: testing seek ..\n"); /* Can we seek this input? * * We need to call the method directly rather than via * vips_source_seek() etc. or we might trigger seek emulation. */ if (source->data || class->seek(source, 0, SEEK_CUR) != -1) { gint64 length; VIPS_DEBUG_MSG(" seekable source\n"); /* We should be able to get the length of seekable * objects. */ if ((length = vips_source_length(source)) == -1) return -1; source->length = length; /* If we can seek, we won't need to save header bytes. */ VIPS_FREEF(g_byte_array_unref, source->header_bytes); } else { /* Not seekable. This must be some kind of pipe. */ VIPS_DEBUG_MSG(" not seekable\n"); source->is_pipe = TRUE; } } return 0; } /* We can't test for seekability or length during _build, since the read and * seek signal handlers might not have been connected yet. Instead, we test * when we first need to know. */ static int vips_source_test_features(VipsSource *source) { if (vips_source_unminimise(source) || vips_source_test_seek(source)) return -1; return 0; } #ifdef TEST_SANITY static void vips_source_sanity(VipsSource *source) { if (source->data) { /* Not a pipe (can map and seek). */ g_assert(!source->is_pipe); /* Read position must lie within the buffer. */ g_assert(source->read_position >= 0); g_assert(source->read_position <= source->length); /* After we're done with the header, the sniff buffer should * be gone. */ g_assert(!source->decode || !source->sniff); /* Have length. */ g_assert(source->length != -1); } else if (source->is_pipe) { if (source->decode) { /* Reading pixel data. */ g_assert(!source->header_bytes); g_assert(!source->sniff); } else { /* Reading header data. */ g_assert(source->header_bytes); g_assert(source->read_position >= 0); g_assert(source->read_position <= source->header_bytes->len); } /* No length available. */ g_assert(source->length == -1); } else { /* Something like a seekable file. */ /* After we're done with the header, the sniff buffer should * be gone. */ if (source->decode) { g_assert(!source->sniff); } /* Once we've tested seek, the read position must lie within * the file. */ if (source->have_tested_seek) { g_assert(source->length != -1); g_assert(source->read_position >= 0); g_assert(source->read_position <= source->length); } /* Supports minimise, so if descriptor is -1, we must have a * filename we can reopen. */ g_assert(VIPS_CONNECTION(source)->descriptor != -1 || (VIPS_CONNECTION(source)->filename && VIPS_CONNECTION(source)->descriptor)); } } #endif /*TEST_SANITY*/ #ifdef TEST_SANITY #define SANITY(S) vips_source_sanity(S) #warning "sanity tests on in source.c" #else /*!TEST_SANITY*/ #define SANITY(S) #endif /*TEST_SANITY*/ static void vips_source_finalize(GObject *gobject) { VipsSource *source = VIPS_SOURCE(gobject); #ifdef DEBUG_MINIMISE printf("vips_source_finalize: %p\n", source); #endif /*DEBUG_MINIMISE*/ VIPS_FREEF(g_byte_array_unref, source->header_bytes); VIPS_FREEF(g_byte_array_unref, source->sniff); if (source->mmap_baseaddr) { vips__munmap(source->mmap_baseaddr, source->mmap_length); source->mmap_baseaddr = NULL; } G_OBJECT_CLASS(vips_source_parent_class)->finalize(gobject); } static int vips_source_build(VipsObject *object) { VipsConnection *connection = VIPS_CONNECTION(object); VipsSource *source = VIPS_SOURCE(object); VIPS_DEBUG_MSG("vips_source_build: %p\n", source); if (VIPS_OBJECT_CLASS(vips_source_parent_class)->build(object)) return -1; if (vips_object_argument_isset(object, "filename") && vips_object_argument_isset(object, "descriptor")) { vips_error(vips_connection_nick(connection), "%s", _("don't set 'filename' and 'descriptor'")); return -1; } /* unminimise will open the filename. */ if (vips_object_argument_isset(object, "filename") && vips_source_unminimise(source)) return -1; if (vips_object_argument_isset(object, "descriptor")) { connection->descriptor = dup(connection->descriptor); connection->close_descriptor = connection->descriptor; #ifdef G_OS_WIN32 /* Windows will create eg. stdin and stdout in text mode. * We always read in binary mode. */ _setmode(connection->descriptor, _O_BINARY); #endif /*G_OS_WIN32*/ } if (vips_object_argument_isset(object, "blob")) { size_t length; if (!(source->data = vips_blob_get(source->blob, &length))) return -1; source->length = VIPS_MIN(length, G_MAXSSIZE); } return 0; } static gint64 vips_source_read_real(VipsSource *source, void *data, size_t length) { VipsConnection *connection = VIPS_CONNECTION(source); gint64 bytes_read; VIPS_DEBUG_MSG("vips_source_read_real:\n"); do { bytes_read = read(connection->descriptor, data, length); } while (bytes_read < 0 && errno == EINTR); return bytes_read; } static gint64 vips_source_seek_real(VipsSource *source, gint64 offset, int whence) { VipsConnection *connection = VIPS_CONNECTION(source); VIPS_DEBUG_MSG("vips_source_seek_real:\n"); /* Like _read_real(), we must not set a vips_error. We need to use the * vips__seek() wrapper so we can seek long files on Windows. */ if (connection->descriptor != -1) return vips__seek_no_error(connection->descriptor, offset, whence); return -1; } static void vips_source_class_init(VipsSourceClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class); gobject_class->finalize = vips_source_finalize; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "source"; object_class->description = _("input source"); object_class->build = vips_source_build; class->read = vips_source_read_real; class->seek = vips_source_seek_real; VIPS_ARG_BOXED(class, "blob", 3, _("Blob"), _("Blob to load from"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSource, blob), VIPS_TYPE_BLOB); } static void vips_source_init(VipsSource *source) { source->length = -1; source->sniff = g_byte_array_new(); source->header_bytes = g_byte_array_new(); } /** * vips_source_new_from_descriptor: * @descriptor: read from this file descriptor * * Create an source attached to a file descriptor. @descriptor is * closed with close() when source is finalized. * * Returns: a new source. */ VipsSource * vips_source_new_from_descriptor(int descriptor) { VipsSource *source; VIPS_DEBUG_MSG("vips_source_new_from_descriptor: %d\n", descriptor); source = VIPS_SOURCE(g_object_new(VIPS_TYPE_SOURCE, "descriptor", descriptor, NULL)); if (vips_object_build(VIPS_OBJECT(source))) { VIPS_UNREF(source); return NULL; } SANITY(source); return source; } /** * vips_source_new_from_file: * @descriptor: read from this filename * * Create an source attached to a file. * * If this descriptor does not support mmap and the source is * used with a loader that can only work from memory, then the data will be * automatically read into memory to EOF before the loader starts. This can * produce high memory use if the descriptor represents a large object. * * Use vips_pipe_read_limit_set() to limit the size of object that * will be read in this way. The default is 1GB. * * Returns: a new source. */ VipsSource * vips_source_new_from_file(const char *filename) { VipsSource *source; VIPS_DEBUG_MSG("vips_source_new_from_file: %s\n", filename); source = VIPS_SOURCE(g_object_new(VIPS_TYPE_SOURCE, "filename", filename, NULL)); if (vips_object_build(VIPS_OBJECT(source))) { VIPS_UNREF(source); return NULL; } SANITY(source); return source; } /** * vips_source_new_from_blob: * @blob: memory area to load * * Create a source attached to an area of memory. * * Returns: a new source. */ VipsSource * vips_source_new_from_blob(VipsBlob *blob) { VipsSource *source; VIPS_DEBUG_MSG("vips_source_new_from_blob: %p\n", blob); source = VIPS_SOURCE(g_object_new(VIPS_TYPE_SOURCE, "blob", blob, NULL)); if (vips_object_build(VIPS_OBJECT(source))) { VIPS_UNREF(source); return NULL; } SANITY(source); return source; } /** * vips_source_new_from_target: * @target: build the source from this target * * Create a source from a temp target that has been written to. * * Returns: a new source. */ VipsSource * vips_source_new_from_target(VipsTarget *target) { VipsConnection *connection = VIPS_CONNECTION(target); VipsSource *source; VIPS_DEBUG_MSG("vips_source_new_from_target: %p\n", target); /* Flush output buffer, move memory into the blob, etc. */ if (vips_target_end(target)) return NULL; if (connection->descriptor > 0) { source = vips_source_new_from_descriptor( connection->descriptor); } else if (target->memory) { VipsBlob *blob; g_object_get(target, "blob", &blob, NULL); source = vips_source_new_from_blob(blob); vips_area_unref(VIPS_AREA(blob)); } else { vips_error(vips_connection_nick(connection), "%s", _("unimplemented target")); return NULL; } return source; } /** * vips_source_new_from_memory: * @data: memory area to load * @length: size of memory area * * Create a source attached to an area of memory. * * You must not free @data while the source is active. * * Returns: a new source. */ VipsSource * vips_source_new_from_memory(const void *data, size_t length) { VipsSource *source; VipsBlob *blob; VIPS_DEBUG_MSG("vips_source_new_from_buffer: %p, length = %zd\n", data, length); /* We don't take a copy of the data or free it. */ blob = vips_blob_new(NULL, data, length); source = vips_source_new_from_blob(blob); vips_area_unref(VIPS_AREA(blob)); SANITY(source); return source; } /** * vips_source_new_from_options: * @options: option string * * Create a source from an option string. * * Returns: a new source. */ VipsSource * vips_source_new_from_options(const char *options) { VipsSource *source; VIPS_DEBUG_MSG("vips_source_new_from_options: %s\n", options); source = VIPS_SOURCE(g_object_new(VIPS_TYPE_SOURCE, NULL)); if (vips_object_set_from_string(VIPS_OBJECT(source), options) || vips_object_build(VIPS_OBJECT(source))) { VIPS_UNREF(source); return NULL; } SANITY(source); return source; } /** * vips_source_minimise: * @source: source to operate on * * Minimise the source. As many resources as can be safely removed are * removed. Use vips_source_unminimise() to restore the source if you wish to * use it again. * * Loaders should call this in response to the minimise signal on their output * image. */ void vips_source_minimise(VipsSource *source) { VipsConnection *connection = VIPS_CONNECTION(source); SANITY(source); (void) vips_source_test_features(source); if (connection->filename && connection->descriptor != -1 && connection->tracked_descriptor == connection->descriptor && !source->is_pipe) { #ifdef DEBUG_MINIMISE printf("vips_source_minimise: %p %s\n", source, vips_connection_nick(VIPS_CONNECTION(source))); #endif /*DEBUG_MINIMISE*/ vips_tracked_close(connection->tracked_descriptor); connection->tracked_descriptor = -1; connection->descriptor = -1; } SANITY(source); } /** * vips_source_unminimise: * @source: source to operate on * * Restore the source after minimisation. This is called at the start * of every source method, so loaders should not usually need this. * * See also: vips_source_minimise(). * * Returns: 0 on success, or -1 on error. */ int vips_source_unminimise(VipsSource *source) { VipsConnection *connection = VIPS_CONNECTION(source); if (connection->descriptor == -1 && connection->tracked_descriptor == -1 && connection->filename) { int fd; #ifdef DEBUG_MINIMISE printf("vips_source_unminimise: %p %s\n", source, vips_connection_nick(VIPS_CONNECTION(source))); #endif /*DEBUG_MINIMISE*/ if ((fd = vips_tracked_open(connection->filename, MODE_READ, 0)) == -1) { vips_error_system(errno, vips_connection_nick(connection), "%s", _("unable to open for read")); return -1; } connection->tracked_descriptor = fd; connection->descriptor = fd; if (vips_source_test_seek(source)) return -1; /* It might be a named pipe. */ if (!source->is_pipe) { VIPS_DEBUG_MSG("vips_source_unminimise: restoring " "read position %" G_GINT64_FORMAT "\n", source->read_position); if (vips__seek(connection->descriptor, source->read_position, SEEK_SET) == -1) return -1; } } return 0; } /** * vips_source_decode: * @source: source to operate on * * Signal the end of header read and the start of the pixel decode phase. * After this, you can no longer seek on this source. * * Loaders should call this at the end of header read. * * See also: vips_source_unminimise(). * * Returns: 0 on success, -1 on error. */ int vips_source_decode(VipsSource *source) { VIPS_DEBUG_MSG("vips_source_decode:\n"); SANITY(source); if (!source->decode) { source->decode = TRUE; VIPS_FREEF(g_byte_array_unref, source->sniff); /* Now decode is set, header_bytes will be freed once it's * exhausted, see vips_source_read(). */ } vips_source_minimise(source); SANITY(source); return 0; } #ifdef VIPS_DEBUG static void vips_source_print(VipsSource *source) { printf("vips_source_print: %p\n", source); printf(" source->read_position = %zd\n", source->read_position); printf(" source->is_pipe = %d\n", source->is_pipe); printf(" source->length = %zd\n", source->length); printf(" source->data = %p\n", source->data); printf(" source->header_bytes = %p\n", source->header_bytes); if (source->header_bytes) printf(" source->header_bytes->len = %d\n", source->header_bytes->len); printf(" source->sniff = %p\n", source->sniff); if (source->sniff) printf(" source->sniff->len = %d\n", source->sniff->len); } #endif /*VIPS_DEBUG*/ /** * vips_source_read: * @source: source to operate on * @buffer: store bytes here * @length: length of @buffer in bytes * * Read up to @length bytes from @source and store the bytes in @buffer. * Return the number of bytes actually read. If all bytes have been read from * the file, return 0. * * Arguments exactly as read(2). * * Returns: the number of bytes read, 0 on end of file, -1 on error. */ gint64 vips_source_read(VipsSource *source, void *buffer, size_t length) { VipsSourceClass *class = VIPS_SOURCE_GET_CLASS(source); gint64 total_read; VIPS_DEBUG_MSG("vips_source_read:\n"); SANITY(source); if (vips_source_unminimise(source) || vips_source_test_features(source)) return -1; total_read = 0; if (source->data) { /* The whole thing is in memory somehow. */ gint64 available = VIPS_MIN(length, source->length - source->read_position); VIPS_DEBUG_MSG(" %zd bytes from memory\n", available); memcpy(buffer, (char *) source->data + source->read_position, available); source->read_position += available; total_read += available; } else { /* Some kind of filesystem or custom source. * * Get what we can from header_bytes. We may need to read * some more after this. */ if (source->header_bytes && source->read_position < source->header_bytes->len) { gint64 available = VIPS_MIN(length, source->header_bytes->len - source->read_position); VIPS_DEBUG_MSG(" %zd bytes from cache\n", available); memcpy(buffer, source->header_bytes->data + source->read_position, available); source->read_position += available; buffer = (char *) buffer + available; length -= available; total_read += available; } /* We're in pixel decode mode and we've exhausted the header * cache. We can safely junk it. */ if (source->decode && source->header_bytes && source->read_position >= source->header_bytes->len) VIPS_FREEF(g_byte_array_unref, source->header_bytes); /* Any more bytes requested? Call the read() vfunc. */ if (length > 0) { gint64 bytes_read; VIPS_DEBUG_MSG(" calling class->read()\n"); bytes_read = class->read(source, buffer, length); VIPS_DEBUG_MSG(" %zd bytes from read()\n", bytes_read); if (bytes_read == -1) { vips_error_system(errno, vips_connection_nick( VIPS_CONNECTION(source)), "%s", _("read error")); return -1; } /* We need to save bytes if we're in header mode and * we can't seek or map. */ if (source->header_bytes && source->is_pipe && !source->decode && bytes_read > 0) g_byte_array_append(source->header_bytes, buffer, bytes_read); source->read_position += bytes_read; total_read += bytes_read; } } VIPS_DEBUG_MSG(" %zd bytes total\n", total_read); SANITY(source); return total_read; } /* Read to a position. * * target == -1 means read to end of source -- useful for forcing a pipe into * memory, for example. This will always set length to the pipe length. * * If we hit EOF and we're buffering, set length on the pipe and turn it into * a memory source. * * read_position is left somewhere indeterminate. */ static int vips_source_pipe_read_to_position(VipsSource *source, gint64 target) { const char *nick = vips_connection_nick(VIPS_CONNECTION(source)); unsigned char buffer[4096]; /* This is only useful for pipes (sources where we don't know the * length). */ g_assert(source->length == -1); g_assert(source->is_pipe); while (target == -1 || source->read_position < target) { gint64 bytes_read; bytes_read = vips_source_read(source, buffer, 4096); if (bytes_read == -1) return -1; if (bytes_read == 0) { /* No more bytes available, we must be at EOF. */ source->length = source->read_position; /* Have we been buffering the whole thing? We can * become a memory source. */ if (source->header_bytes) { source->data = source->header_bytes->data; source->is_pipe = FALSE; /* TODO ... we could close more fds here. */ vips_source_minimise(source); } break; } if (target == -1 && vips__pipe_read_limit != -1 && source->read_position > vips__pipe_read_limit) { vips_error(nick, "%s", _("pipe too long")); return -1; } } return 0; } /* Convert a seekable source that can't be mapped (eg. a custom input with a * seek method) into a memory source. */ static int vips_source_read_to_memory(VipsSource *source) { GByteArray *byte_array; gint64 read_position; unsigned char *q; VIPS_DEBUG_MSG("vips_source_read_to_memory:\n"); g_assert(!source->is_pipe); g_assert(!source->blob); g_assert(!source->header_bytes); g_assert(source->length >= 0); if (vips_source_rewind(source)) return -1; /* We know the length, so we can size the buffer correctly and read * directly to it. */ byte_array = g_byte_array_new(); g_byte_array_set_size(byte_array, source->length); read_position = 0; q = byte_array->data; while (read_position < source->length) { gint64 bytes_read; bytes_read = vips_source_read(source, q, VIPS_MAX(4096, source->length - read_position)); if (bytes_read == -1) { VIPS_FREEF(g_byte_array_unref, byte_array); return -1; } if (bytes_read == 0) break; read_position += bytes_read; q += bytes_read; } /* Steal the byte_array pointer and turn into a memory source. * * We save byte_array in the header_bytes field to get it freed when * we are freed. */ source->data = byte_array->data; source->is_pipe = FALSE; source->header_bytes = byte_array; vips_source_minimise(source); return 0; } static int vips_source_descriptor_to_memory(VipsSource *source) { VipsConnection *connection = VIPS_CONNECTION(source); VIPS_DEBUG_MSG("vips_source_descriptor_to_memory:\n"); g_assert(!source->blob); g_assert(!source->mmap_baseaddr); if (!(source->mmap_baseaddr = vips__mmap(connection->descriptor, FALSE, source->length, 0))) return -1; /* And it's now a memory source. */ source->data = source->mmap_baseaddr; source->mmap_length = source->length; return 0; } /** * vips_source_is_mappable: * @source: source to operate on * * Some sources can be efficiently mapped into memory. * You can still use vips_source_map() if this function returns %FALSE, * but it will be slow. * * Returns: %TRUE if the source can be efficiently mapped into memory. */ gboolean vips_source_is_mappable(VipsSource *source) { if (vips_source_unminimise(source) || vips_source_test_features(source)) return -1; /* Already a memory object, or there's a filename we can map, or * there's a seekable descriptor. */ return source->data || VIPS_CONNECTION(source)->filename || (!source->is_pipe && VIPS_CONNECTION(source)->descriptor != -1); } /** * vips_source_is_file: * @source: source to operate on * * Test if this source is a simple file with support for seek. Named pipes, * for example, will fail this test. If TRUE, you can use * vips_connection_filename() to find the filename. * * Use this to add basic source support for older loaders which can only work * on files. * * Returns: %TRUE if the source is a simple file. */ gboolean vips_source_is_file(VipsSource *source) { if (vips_source_unminimise(source) || vips_source_test_features(source)) return -1; /* There's a filename, and it supports seek. */ return VIPS_CONNECTION(source)->filename && !source->is_pipe; } /** * vips_source_map: * @source: source to operate on * @length_out: return the file length here, or NULL * * Map the source entirely into memory and return a pointer to the * start. If @length_out is non-NULL, the source size is written to it. * * This operation can take a long time. Use vips_source_is_mappable() to * check if a source can be mapped efficiently. * * The pointer is valid for as long as @source is alive. * * Returns: a pointer to the start of the file contents, or NULL on error. */ const void * vips_source_map(VipsSource *source, size_t *length_out) { VIPS_DEBUG_MSG("vips_source_map:\n"); SANITY(source); if (vips_source_unminimise(source) || vips_source_test_features(source)) return NULL; /* Try to map the file into memory, if possible. Some filesystems have * mmap disabled, so we don't give up if this fails. */ if (!source->data && vips_source_is_mappable(source)) (void) vips_source_descriptor_to_memory(source); /* If it's not a pipe, we can rewind, get the length, and read the * whole thing. */ if (!source->data && !source->is_pipe && vips_source_read_to_memory(source)) return NULL; /* We don't know the length and must read and assemble in chunks. */ if (!source->data && vips_source_pipe_read_to_position(source, -1)) return NULL; if (length_out) *length_out = source->length; SANITY(source); return source->data; } static int vips_source_map_cb(void *a, VipsArea *area) { GObject *gobject = G_OBJECT(area->client); VIPS_UNREF(gobject); return 0; } /** * vips_source_map_blob: * @source: source to operate on * * Just like vips_source_map(), but return a #VipsBlob containing the * pointer. @source will stay alive as long as the result is alive. * * Returns: a new #VipsBlob containing the data, or NULL on error. */ VipsBlob * vips_source_map_blob(VipsSource *source) { const void *buf; size_t len; VipsBlob *blob; if (!(buf = vips_source_map(source, &len)) || !(blob = vips_blob_new((VipsCallbackFn) vips_source_map_cb, buf, len))) return NULL; /* The source must stay alive until the blob is done. */ g_object_ref(source); VIPS_AREA(blob)->client = source; return blob; } /** * vips_source_seek: * @source: source to operate on * @offset: seek by this offset * @whence: seek relative to this point * * Move the file read position. You can't call this after pixel decode starts. * The arguments are exactly as lseek(2). * * Returns: the new file position, or -1 on error. */ gint64 vips_source_seek(VipsSource *source, gint64 offset, int whence) { const char *nick = vips_connection_nick(VIPS_CONNECTION(source)); VipsSourceClass *class = VIPS_SOURCE_GET_CLASS(source); gint64 new_pos; VIPS_DEBUG_MSG( "vips_source_seek: offset = %" G_GINT64_FORMAT ", whence = %d\n", offset, whence); if (vips_source_unminimise(source) || vips_source_test_features(source)) return -1; if (source->data) { switch (whence) { case SEEK_SET: new_pos = offset; break; case SEEK_CUR: new_pos = source->read_position + offset; break; case SEEK_END: new_pos = source->length + offset; break; default: vips_error(nick, "%s", _("bad 'whence'")); return -1; } } else if (source->is_pipe) { switch (whence) { case SEEK_SET: new_pos = offset; break; case SEEK_CUR: new_pos = source->read_position + offset; break; case SEEK_END: /* We have to read the whole source into memory to get * the length. */ if (vips_source_pipe_read_to_position(source, -1)) return -1; new_pos = source->length + offset; break; default: vips_error(nick, "%s", _("bad 'whence'")); return -1; } } else { if ((new_pos = class->seek(source, offset, whence)) == -1) return -1; } /* For pipes, we have to fake seek by reading to that point. This * might hit EOF and turn the pipe into a memory source. */ if (source->is_pipe && vips_source_pipe_read_to_position(source, new_pos)) return -1; /* Don't allow out of range seeks. */ if (new_pos < 0 || (source->length != -1 && new_pos > source->length)) { vips_error(nick, _("bad seek to %" G_GINT64_FORMAT), new_pos); return -1; } source->read_position = new_pos; VIPS_DEBUG_MSG(" new_pos = %" G_GINT64_FORMAT "\n", new_pos); return new_pos; } /** * vips_source_rewind: * @source: source to operate on * * Rewind the source to the start. * * You can't always do this after the pixel decode phase starts -- for * example, pipe-like sources can't be rewound. * * Returns: 0 on success, or -1 on error. */ int vips_source_rewind(VipsSource *source) { VIPS_DEBUG_MSG("vips_source_rewind:\n"); SANITY(source); if (vips_source_test_features(source) || vips_source_seek(source, 0, SEEK_SET) != 0) return -1; /* Back into sniff + header decode state. */ source->decode = FALSE; if (!source->sniff) source->sniff = g_byte_array_new(); SANITY(source); return 0; } /** * vips_source_length: * @source: source to operate on * * Return the length in bytes of the source. Unseekable sources, for * example pipes, will have to be read entirely into memory before the length * can be found, so this operation can take a long time. * * Returns: number of bytes in source, or -1 on error. */ gint64 vips_source_length(VipsSource *source) { gint64 length; gint64 read_position; VIPS_DEBUG_MSG("vips_source_length:\n"); if (vips_source_test_features(source)) return -1; read_position = vips_source_seek(source, 0, SEEK_CUR); length = vips_source_seek(source, 0, SEEK_END); vips_source_seek(source, read_position, SEEK_SET); return length; } /** * vips_source_sniff_at_most: * @source: peek this source * @data: return a pointer to the bytes read here * @length: max number of bytes to read * * Attempt to sniff at most @length bytes from the start of the source. A * pointer to the bytes is returned in @data. The number of bytes actually * read is returned -- it may be less than @length if the file is shorter than * @length. A negative number indicates a read error. * * Returns: number of bytes read, or -1 on error. */ gint64 vips_source_sniff_at_most(VipsSource *source, unsigned char **data, size_t length) { unsigned char *q; gint64 read_position; VIPS_DEBUG_MSG("vips_source_sniff_at_most: %zd bytes\n", length); SANITY(source); if (vips_source_test_features(source) || vips_source_rewind(source)) return -1; g_byte_array_set_size(source->sniff, length); read_position = 0; q = source->sniff->data; while (read_position < length) { gint64 bytes_read; bytes_read = vips_source_read(source, q, length - read_position); if (bytes_read == -1) return -1; if (bytes_read == 0) break; read_position += bytes_read; q += bytes_read; } SANITY(source); *data = source->sniff->data; return read_position; } /** * vips_source_sniff: * @source: sniff this source * @length: number of bytes to sniff * * Return a pointer to the first few bytes of the file. If the file is too * short, return NULL. * * Returns: a pointer to the bytes at the start of the file, or NULL on error. */ unsigned char * vips_source_sniff(VipsSource *source, size_t length) { unsigned char *data; gint64 bytes_read; if (vips_source_test_features(source)) return NULL; bytes_read = vips_source_sniff_at_most(source, &data, length); if (bytes_read == -1) return NULL; if (bytes_read < length) return NULL; return data; } libvips-8.15.1/libvips/iofuncs/sourcecustom.c000066400000000000000000000132131454007373500213030ustar00rootroot00000000000000/* A Source subclass with signals you can easily hook up to other input * sources. * * J.Cupitt, 21/11/19 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #include #include #include #include #include #include #include #include #include "vipsmarshal.h" G_DEFINE_TYPE(VipsSourceCustom, vips_source_custom, VIPS_TYPE_SOURCE); /* Our signals. */ enum { SIG_SEEK, SIG_READ, SIG_LAST }; static guint vips_source_custom_signals[SIG_LAST] = { 0 }; static gint64 vips_source_custom_read_real(VipsSource *source, void *buffer, size_t length) { gint64 bytes_read; VIPS_DEBUG_MSG("vips_source_custom_read_real:\n"); /* Return this value (error) if there's no attached handler. */ bytes_read = 0; g_signal_emit(source, vips_source_custom_signals[SIG_READ], 0, buffer, (gint64) length, &bytes_read); VIPS_DEBUG_MSG(" vips_source_custom_read_real, seen %zd bytes\n", bytes_read); return bytes_read; } static gint64 vips_source_custom_seek_real(VipsSource *source, gint64 offset, int whence) { GValue args[3] = { G_VALUE_INIT, G_VALUE_INIT, G_VALUE_INIT }; GValue result = G_VALUE_INIT; gint64 new_position; VIPS_DEBUG_MSG("vips_source_custom_seek_real:\n"); /* Set the signal args. */ g_value_init(&args[0], G_TYPE_OBJECT); g_value_set_object(&args[0], source); g_value_init(&args[1], G_TYPE_INT64); g_value_set_int64(&args[1], offset); g_value_init(&args[2], G_TYPE_INT); g_value_set_int(&args[2], whence); /* Set the default value if no handlers are attached. */ g_value_init(&result, G_TYPE_INT64); g_value_set_int64(&result, -1); /* We need to use this signal interface since we want a default value * if no handlers are attached. */ g_signal_emitv((const GValue *) &args, vips_source_custom_signals[SIG_SEEK], 0, &result); new_position = g_value_get_int64(&result); g_value_unset(&args[0]); g_value_unset(&args[1]); g_value_unset(&args[2]); g_value_unset(&result); VIPS_DEBUG_MSG(" vips_source_custom_seek_real, seen new pos %zd\n", new_position); return new_position; } static gint64 vips_source_custom_read_signal_real(VipsSourceCustom *source_custom, void *data, gint64 length) { VIPS_DEBUG_MSG("vips_source_custom_read_signal_real:\n"); return 0; } static gint64 vips_source_custom_seek_signal_real(VipsSourceCustom *source_custom, gint64 offset, int whence) { VIPS_DEBUG_MSG("vips_source_custom_seek_signal_real:\n"); return -1; } static void vips_source_custom_class_init(VipsSourceCustomClass *class) { VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class); VipsSourceClass *source_class = VIPS_SOURCE_CLASS(class); object_class->nickname = "source_custom"; object_class->description = _("Custom source"); source_class->read = vips_source_custom_read_real; source_class->seek = vips_source_custom_seek_real; class->read = vips_source_custom_read_signal_real; class->seek = vips_source_custom_seek_signal_real; /** * VipsSourceCustom::read: * @source_custom: the source being operated on * @buffer: %gpointer, buffer to fill * @size: %gint64, size of buffer * * This signal is emitted to read bytes from the source into @buffer. * * Returns: the number of bytes read. Return 0 for EOF. */ vips_source_custom_signals[SIG_READ] = g_signal_new("read", G_TYPE_FROM_CLASS(class), G_SIGNAL_ACTION, G_STRUCT_OFFSET(VipsSourceCustomClass, read), NULL, NULL, vips_INT64__POINTER_INT64, G_TYPE_INT64, 2, G_TYPE_POINTER, G_TYPE_INT64); /** * VipsSourceCustom::seek: * @source_custom: the source being operated on * @offset: %gint64, seek offset * @whence: %gint, seek origin * * This signal is emitted to seek the source. The handler should * change the source position appropriately. * * The handler for an unseekable source should always return -1. * * Returns: the new seek position. */ vips_source_custom_signals[SIG_SEEK] = g_signal_new("seek", G_TYPE_FROM_CLASS(class), G_SIGNAL_ACTION, G_STRUCT_OFFSET(VipsSourceCustomClass, seek), NULL, NULL, vips_INT64__INT64_INT, G_TYPE_INT64, 2, G_TYPE_INT64, G_TYPE_INT); } static void vips_source_custom_init(VipsSourceCustom *source_custom) { } /** * vips_source_custom_new: * * Create a #VipsSourceCustom. Attach signals to implement read and seek. * * Returns: a new #VipsSourceCustom */ VipsSourceCustom * vips_source_custom_new(void) { VipsSourceCustom *source_custom; VIPS_DEBUG_MSG("vips_source_custom_new:\n"); source_custom = VIPS_SOURCE_CUSTOM( g_object_new(VIPS_TYPE_SOURCE_CUSTOM, NULL)); if (vips_object_build(VIPS_OBJECT(source_custom))) { VIPS_UNREF(source_custom); return NULL; } return source_custom; } libvips-8.15.1/libvips/iofuncs/sourceginput.c000066400000000000000000000144411454007373500213030ustar00rootroot00000000000000/* A Source subclass which wraps a ginputstream. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #include #include #include #include #include #include #include #include #include "vipsmarshal.h" G_DEFINE_TYPE(VipsSourceGInputStream, vips_source_g_input_stream, VIPS_TYPE_SOURCE); /* TODO: * - some more docs */ /* This will only be useful for memory and pipe-style streams. It's not * possible to get filename or filenos from GInputStream objects. * Without those two bits of information, important VipsSource features like * mmap and openslide load will not work. * * For sources which are files on local disc, you should use * vips_source_new_from_file() instead. */ static int vips_source_g_input_stream_build(VipsObject *object) { VipsSource *source = VIPS_SOURCE(object); VipsSourceGInputStream *source_ginput = VIPS_SOURCE_G_INPUT_STREAM(source); GError *error = NULL; VIPS_DEBUG_MSG("vips_source_g_input_stream_build: %p\n", source); if (VIPS_OBJECT_CLASS(vips_source_g_input_stream_parent_class)->build(object)) return -1; if (G_IS_FILE_INPUT_STREAM(source_ginput->stream)) { const char *name; /* It's unclear if this will ever produce useful output. */ if (!(source_ginput->info = g_file_input_stream_query_info( G_FILE_INPUT_STREAM(source_ginput->stream), G_FILE_ATTRIBUTE_STANDARD_NAME, NULL, &error))) { vips_g_error(&error); return -1; } #ifdef VIPS_DEBUG { char **attributes; int i; /* Swap G_FILE_ATTRIBUTE_STANDARD_NAME above for "*" to get a * list of all available attributes. */ attributes = g_file_info_list_attributes( source_ginput->info, NULL); printf("stream attributes:\n"); for (i = 0; attributes[i]; i++) { char *name = attributes[i]; char *value; value = g_file_info_get_attribute_as_string( source_ginput->info, name); printf("\t%s = %s\n", name, value); g_free(value); } g_strfreev(attributes); } #endif /*VIPS_DEBUG*/ if ((name = g_file_info_get_name(source_ginput->info))) g_object_set(object, "filename", name, NULL); } if (G_IS_SEEKABLE(source_ginput->stream) && g_seekable_can_seek(G_SEEKABLE(source_ginput->stream))) source_ginput->seekable = G_SEEKABLE(source_ginput->stream); return 0; } static gint64 vips_source_g_input_stream_read(VipsSource *source, void *buffer, size_t length) { VipsSourceGInputStream *source_ginput = VIPS_SOURCE_G_INPUT_STREAM(source); GError *error = NULL; gint64 bytes_read; VIPS_DEBUG_MSG("vips_source_g_input_stream_read: %zd bytes\n", length); /* Do we need to loop on this call? The docs are unclear. */ if ((bytes_read = g_input_stream_read(source_ginput->stream, buffer, length, NULL, &error)) < 0) { VIPS_DEBUG_MSG(" %s\n", error->message); vips_g_error(&error); return -1; } VIPS_DEBUG_MSG(" (returned %zd bytes)\n", bytes_read); return bytes_read; } static GSeekType lseek_to_seek_type(int whence) { switch (whence) { default: case SEEK_CUR: return G_SEEK_CUR; case SEEK_SET: return G_SEEK_SET; case SEEK_END: return G_SEEK_END; } } static gint64 vips_source_g_input_stream_seek(VipsSource *source, gint64 offset, int whence) { VipsSourceGInputStream *source_ginput = VIPS_SOURCE_G_INPUT_STREAM(source); GSeekType type = lseek_to_seek_type(whence); GError *error = NULL; gint64 new_position; VIPS_DEBUG_MSG("vips_source_g_input_stream_seek: " "offset = %zd, whence = %d\n", offset, whence); if (source_ginput->seekable) { if (!g_seekable_seek(source_ginput->seekable, offset, type, NULL, &error)) { vips_g_error(&error); return -1; } new_position = g_seekable_tell(source_ginput->seekable); } else new_position = -1; VIPS_DEBUG_MSG(" (new position = %zd)\n", new_position); return new_position; } static void vips_source_g_input_stream_class_init(VipsSourceGInputStreamClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class); VipsSourceClass *source_class = VIPS_SOURCE_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "source_g_input_stream"; object_class->description = _("GInputStream source"); object_class->build = vips_source_g_input_stream_build; source_class->read = vips_source_g_input_stream_read; source_class->seek = vips_source_g_input_stream_seek; VIPS_ARG_OBJECT(class, "stream", 3, _("Stream"), _("GInputStream to read from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsSourceGInputStream, stream), G_TYPE_INPUT_STREAM); } static void vips_source_g_input_stream_init(VipsSourceGInputStream *source) { } /** * vips_source_g_input_stream_new: * @stream: read from this stream * * Create a #VipsSourceGInputStream which wraps @stream. * * Returns: the new source. */ VipsSourceGInputStream * vips_source_g_input_stream_new(GInputStream *stream) { VipsSourceGInputStream *source; VIPS_DEBUG_MSG("vips_source_g_input_stream_new:\n"); source = VIPS_SOURCE_G_INPUT_STREAM( g_object_new(VIPS_TYPE_SOURCE_G_INPUT_STREAM, "stream", stream, NULL)); if (vips_object_build(VIPS_OBJECT(source))) { VIPS_UNREF(source); return NULL; } return source; } libvips-8.15.1/libvips/iofuncs/system.c000066400000000000000000000234031454007373500200760ustar00rootroot00000000000000/* vips_system(): run a command on an image * * 7/3/00 JC * - hacked it in * 21/10/02 JC * - use mktemp() if mkstemp() is not available * 10/3/03 JC * - out can be NULL * 23/12/04 * - use g_mkstemp() * 8/9/09 * - add .v suffix (thanks Roland) * - use vipsbuf * - rewrite to make it simpler * 2/2/10 * - gtkdoc * 4/6/13 * - redo as a class * - input and output images are now optional * 3/5/14 * - switch to g_spawn_command_line_sync() from popen() ... helps stop * stray command-windows on Windows * 27/3/16 * - allow [options] in out_format */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #include #include #include #include #include typedef struct _VipsSystem { VipsOperation parent_instance; VipsArrayImage *in; VipsImage *out; char *cmd_format; char *in_format; char *out_format; char *log; /* Array of names we wrote the input images to. */ char **in_name; /* Output name without any options, so /tmp/vips-weifh.svg, for * example. */ char *out_name; /* Output name with any options, so /tmp/vips-weifh.svg[scale=2], for * example. */ char *out_name_options; } VipsSystem; typedef VipsOperationClass VipsSystemClass; G_DEFINE_TYPE(VipsSystem, vips_system, VIPS_TYPE_OPERATION); static void vips_system_dispose(GObject *gobject) { VipsSystem *system = (VipsSystem *) gobject; if (system->in_name) { int i; for (i = 0; i < VIPS_AREA(system->in)->n; i++) { g_unlink(system->in_name[i]); VIPS_FREE(system->in_name[i]); } } VIPS_FREE(system->out_name); VIPS_FREE(system->out_name_options); G_OBJECT_CLASS(vips_system_parent_class)->dispose(gobject); } static int vips_system_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsSystem *system = (VipsSystem *) object; int i; char cmd[VIPS_PATH_MAX]; char *p; char *std_output; char *std_error; int result; GError *error = NULL; if (VIPS_OBJECT_CLASS(vips_system_parent_class)->build(object)) return -1; /* Write the input images to files. We must always make copies of the * files, even if this image is a disc file already, in case the * command needs a different format. */ if (system->in) { char *in_format = system->in_format ? system->in_format : "%s.tif"; int n; VipsImage **in = vips_array_image_get(system->in, &n); if (!(system->in_name = VIPS_ARRAY(object, n, char *))) return -1; memset(system->in_name, 0, n * sizeof(char *)); for (i = 0; i < n; i++) { if (!(system->in_name[i] = vips__temp_name(in_format))) return -1; if (vips_image_write_to_file(in[i], system->in_name[i], NULL)) return -1; } } /* Make the output filename. */ if (system->out_format) { char filename[VIPS_PATH_MAX]; char option_string[VIPS_PATH_MAX]; vips__filename_split8(system->out_format, filename, option_string); if (!(system->out_name = vips__temp_name(filename))) return -1; system->out_name_options = g_strconcat(system->out_name, option_string, NULL); } vips_strncpy(cmd, system->cmd_format, VIPS_PATH_MAX); if (system->in) for (i = 0; i < VIPS_AREA(system->in)->n; i++) if (vips__substitute(cmd, VIPS_PATH_MAX, system->in_name[i])) { vips_error(class->nickname, "%s", _("unable to substitute input filename")); return -1; } if (system->out_name && vips__substitute(cmd, VIPS_PATH_MAX, system->out_name)) { vips_error(class->nickname, "%s", _("unable to substitute output filename")); return -1; } /* Swap all "%%" in the string for a single "%". We need this for * compatibility with older printf-based vips_system()s which * needed a double %%. */ for (p = cmd; *p; p++) if (p[0] == '%' && p[1] == '%') memmove(p, p + 1, strlen(p)); if (!g_spawn_command_line_sync(cmd, &std_output, &std_error, &result, &error) || result) { if (error) { vips_error(class->nickname, "%s", error->message); g_error_free(error); } if (std_error) { vips__chomp(std_error); if (strcmp(std_error, "") != 0) vips_error(class->nickname, "error output: %s", std_error); VIPS_FREE(std_error); } if (std_output) { vips__chomp(std_output); if (strcmp(std_output, "") != 0) vips_error(class->nickname, "output: %s", std_output); VIPS_FREE(std_output); } vips_error_system(result, class->nickname, _("command \"%s\" failed"), cmd); return -1; } if (std_error) { vips__chomp(std_error); if (strcmp(std_error, "") != 0) g_warning(_("stderr output: %s"), std_error); } if (std_output) { vips__chomp(std_output); g_object_set(system, "log", std_output, NULL); } VIPS_FREE(std_output); VIPS_FREE(std_error); if (system->out_name_options) { VipsImage *out; if (!(out = vips_image_new_from_file(system->out_name_options, NULL))) return -1; vips_image_set_delete_on_close(out, TRUE); g_object_set(system, "out", out, NULL); } return 0; } static void vips_system_class_init(VipsSystemClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->dispose = vips_system_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "system"; vobject_class->description = _("run an external command"); vobject_class->build = vips_system_build; /* Commands can have side-effects, so don't cache them. */ operation_class->flags |= VIPS_OPERATION_NOCACHE; VIPS_ARG_BOXED(class, "in", 0, _("Input"), _("Array of input images"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSystem, in), VIPS_TYPE_ARRAY_IMAGE); VIPS_ARG_IMAGE(class, "out", 1, _("Output"), _("Output image"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsSystem, out)); VIPS_ARG_STRING(class, "cmd_format", 2, _("Command"), _("Command to run"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsSystem, cmd_format), NULL); VIPS_ARG_STRING(class, "in_format", 2, _("Input format"), _("Format for input filename"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSystem, in_format), NULL); VIPS_ARG_STRING(class, "out_format", 2, _("Output format"), _("Format for output filename"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSystem, out_format), NULL); VIPS_ARG_STRING(class, "log", 2, _("Log"), _("Command log"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsSystem, log), NULL); } static void vips_system_init(VipsSystem *system) { } /** * vips_system: * @cmd_format: command to run * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @in: array of input images * * @out: output image * * @in_format: write input files like this * * @out_format: write output filename like this * * @log: stdout of command is returned here * * vips_system() runs a command, optionally passing a set of images in and * optionally getting an image back. The command's stdout is returned in @log. * * First, if @in is set, the array of images are written to files. See * vips_image_new_temp_file() to see how temporary files are created. * If @in_format is * something like %s.png, the file will be written in PNG format. By * default, @in_format is %s.tif. * * If @out_format is set, an output filename is formed in the same way. Any * trailing [options] are stripped from @out_format. * * The command string to run is made by substituting the first set of %s * in @cmd_format for the names of the input files, if @in is set, and then * the next %s for the output filename, if @out_format is set. * You can put a number between the % and the s to change the order * in which the substitution occurs. * * The command is executed with popen() and the output captured in @log. * * After the command finishes, if @out_format is set, the output image is * opened and returned in @out. You can append [options] to @out_format to * control how this open happens. * Closing @out image will automatically delete the output file. * * Finally the input images are deleted. * * For example, this call will run the ImageMagick convert program on an * image, using JPEG files to pass images into and out of the convert command. * * |[ * VipsArrayImage *in; * VipsImage *out; * char *log; * * if (vips_system("convert %s -swirl 45 %s", * "in", in, * "out", &out, * "in_format", "%s.jpg", * "out_format", "%s.jpg", * "log", &log, * NULL)) * error ... * ]| * * Returns: 0 on success, -1 on failure. */ int vips_system(const char *cmd_format, ...) { va_list ap; int result; va_start(ap, cmd_format); result = vips_call_split("system", ap, cmd_format); va_end(ap); return result; } libvips-8.15.1/libvips/iofuncs/target.c000066400000000000000000000451461454007373500200500ustar00rootroot00000000000000/* A byte source/sink .. it can be a pipe, file descriptor, memory area, * socket, node.js stream, etc. * * J.Cupitt, 19/6/14 * * 26/11/20 * - use _setmode() on win to force binary write for previously opened * descriptors */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #include #include #include #include #include #include #ifdef G_OS_WIN32 #include #endif /*G_OS_WIN32*/ #include #include /* libtiff needs to be able to seek and read back output files, unfortunately, * so we must open read-write. */ #define MODE_READWRITE CLOEXEC(BINARYIZE(O_RDWR | O_CREAT | O_TRUNC)) G_DEFINE_TYPE(VipsTarget, vips_target, VIPS_TYPE_CONNECTION); static void vips_target_finalize(GObject *gobject) { VipsTarget *target = VIPS_TARGET(gobject); VIPS_DEBUG_MSG("vips_target_finalize:\n"); if (target->memory_buffer) { g_string_free(target->memory_buffer, TRUE); target->memory_buffer = NULL; } if (target->blob) { vips_area_unref(VIPS_AREA(target->blob)); target->blob = NULL; } if (target->delete_on_close && target->delete_on_close_filename) g_unlink(target->delete_on_close_filename); VIPS_FREE(target->delete_on_close_filename); G_OBJECT_CLASS(vips_target_parent_class)->finalize(gobject); } static int vips_target_build(VipsObject *object) { VipsConnection *connection = VIPS_CONNECTION(object); VipsTarget *target = VIPS_TARGET(object); VIPS_DEBUG_MSG("vips_target_build: %p\n", connection); if (VIPS_OBJECT_CLASS(vips_target_parent_class)->build(object)) return -1; if (vips_object_argument_isset(object, "filename") && vips_object_argument_isset(object, "descriptor")) { vips_error(vips_connection_nick(connection), "%s", _("don't set 'filename' and 'descriptor'")); return -1; } if (connection->filename) { const char *filename = connection->filename; int fd; /* 0644 is rw user, r group and other. */ if ((fd = vips_tracked_open(filename, MODE_READWRITE, 0644)) == -1) { vips_error_system(errno, vips_connection_nick(connection), "%s", _("unable to open for write")); return -1; } connection->tracked_descriptor = fd; connection->descriptor = fd; } else if (vips_object_argument_isset(object, "descriptor")) { connection->descriptor = dup(connection->descriptor); connection->close_descriptor = connection->descriptor; #ifdef G_OS_WIN32 /* Windows will create eg. stdin and stdout in text mode. * We always write in binary mode. */ _setmode(connection->descriptor, _O_BINARY); #endif /*G_OS_WIN32*/ } else if (target->memory) target->memory_buffer = g_string_sized_new(VIPS_TARGET_BUFFER_SIZE); return 0; } static gint64 vips_target_write_real(VipsTarget *target, const void *data, size_t length) { VipsConnection *connection = VIPS_CONNECTION(target); gint64 result; VIPS_DEBUG_MSG("vips_target_write_real: %zd bytes\n", length); if (target->memory_buffer) { VIPS_DEBUG_MSG("vips_target_write_real: to position %zd\n", target->position); g_string_overwrite_len(target->memory_buffer, target->position, data, length); target->position += length; result = length; } else result = write(connection->descriptor, data, length); return result; } static off_t vips_target_seek_real(VipsTarget *target, off_t offset, int whence) { VipsConnection *connection = VIPS_CONNECTION(target); const char *nick = vips_connection_nick(connection); off_t new_position; VIPS_DEBUG_MSG("vips_target_seek_real: offset = %ld, whence = %d\n", offset, whence); if (target->memory_buffer) { switch (whence) { case SEEK_SET: new_position = offset; break; case SEEK_CUR: new_position = target->position + offset; break; case SEEK_END: new_position = target->memory_buffer->len + offset; break; default: vips_error(nick, "%s", _("bad 'whence'")); return -1; } if (new_position > target->memory_buffer->len) g_string_set_size(target->memory_buffer, new_position); target->position = new_position; } else new_position = lseek(connection->descriptor, offset, whence); return new_position; } static gint64 vips_target_read_real(VipsTarget *target, void *data, size_t length) { gint64 bytes_read; VIPS_DEBUG_MSG("vips_target_read_real: %zd bytes\n", length); if (target->memory_buffer) { bytes_read = VIPS_MIN(length, target->memory_buffer->len - target->position); VIPS_DEBUG_MSG(" %zd bytes from memory\n", bytes_read); memcpy(data, target->memory_buffer->str + target->position, bytes_read); target->position += bytes_read; } else { VipsConnection *connection = VIPS_CONNECTION(target); int fd = connection->descriptor; do { bytes_read = read(fd, data, length); } while (bytes_read < 0 && errno == EINTR); } VIPS_DEBUG_MSG(" read %zd bytes\n", bytes_read); return bytes_read; } static int vips_target_end_real(VipsTarget *target) { VIPS_DEBUG_MSG("vips_target_finish_real:\n"); return 0; } static void vips_target_finish_real(VipsTarget *target) { VIPS_DEBUG_MSG("vips_target_finish_real:\n"); } static void vips_target_class_init(VipsTargetClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class); gobject_class->finalize = vips_target_finalize; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "target"; object_class->description = _("Target"); object_class->build = vips_target_build; class->write = vips_target_write_real; class->read = vips_target_read_real; class->seek = vips_target_seek_real; class->end = vips_target_end_real; class->finish = vips_target_finish_real; VIPS_ARG_BOOL(class, "memory", 3, _("Memory"), _("File descriptor should output to memory"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsTarget, memory), FALSE); /* SET_ALWAYS means that blob is set by C and the obj system is not * involved in creation or destruction. It can be read at any time. */ VIPS_ARG_BOXED(class, "blob", 4, _("Blob"), _("Blob to save to"), VIPS_ARGUMENT_SET_ALWAYS, G_STRUCT_OFFSET(VipsTarget, blob), VIPS_TYPE_BLOB); } static void vips_target_init(VipsTarget *target) { target->blob = vips_blob_new(NULL, NULL, 0); target->write_point = 0; } /** * vips_target_new_to_descriptor: * @descriptor: write to this file descriptor * * Create a target attached to a file descriptor. * @descriptor is kept open until the target is finalized. * * See also: vips_target_new_to_file(). * * Returns: a new target. */ VipsTarget * vips_target_new_to_descriptor(int descriptor) { VipsTarget *target; VIPS_DEBUG_MSG("vips_target_new_to_descriptor: %d\n", descriptor); target = VIPS_TARGET(g_object_new(VIPS_TYPE_TARGET, "descriptor", descriptor, NULL)); if (vips_object_build(VIPS_OBJECT(target))) { VIPS_UNREF(target); return NULL; } return target; } /** * vips_target_new_to_file: * @filename: write to this file * * Create a target attached to a file. * * Returns: a new target. */ VipsTarget * vips_target_new_to_file(const char *filename) { VipsTarget *target; VIPS_DEBUG_MSG("vips_target_new_to_file: %s\n", filename); target = VIPS_TARGET(g_object_new(VIPS_TYPE_TARGET, "filename", filename, NULL)); if (vips_object_build(VIPS_OBJECT(target))) { VIPS_UNREF(target); return NULL; } return target; } /** * vips_target_new_to_memory: * * Create a target which will write to a memory area. Read from @blob to get * memory. * * See also: vips_target_new_to_file(). * * Returns: a new #VipsConnection */ VipsTarget * vips_target_new_to_memory(void) { VipsTarget *target; VIPS_DEBUG_MSG("vips_target_new_to_memory:\n"); target = VIPS_TARGET(g_object_new(VIPS_TYPE_TARGET, "memory", TRUE, NULL)); if (vips_object_build(VIPS_OBJECT(target))) { VIPS_UNREF(target); return NULL; } return target; } /** * vips_target_new_temp: * @based_on: base the temporary target on this target * * Create a temporary target -- either a temporary file on disc, or an area in * memory, depending on what sort of target @based_on is. * * See also: vips_target_new_to_file(). * * Returns: a new target. */ VipsTarget * vips_target_new_temp(VipsTarget *based_on) { VipsTarget *target; VIPS_DEBUG_MSG("vips_target_new_temp: %p\n", based_on); if (vips_connection_filename(VIPS_CONNECTION(based_on))) { int descriptor; char *filename; if (!(filename = vips__temp_name("%s.target"))) return NULL; if ((descriptor = vips__open_image_write(filename, TRUE)) < 0) { g_free(filename); return NULL; } if (!(target = vips_target_new_to_descriptor(descriptor))) { g_free(filename); vips_tracked_close(descriptor); return NULL; } vips_tracked_close(descriptor); target->delete_on_close = TRUE; target->delete_on_close_filename = filename; } else target = vips_target_new_to_memory(); return target; } static int vips_target_write_unbuffered(VipsTarget *target, const void *data, size_t length) { VipsTargetClass *class = VIPS_TARGET_GET_CLASS(target); VIPS_DEBUG_MSG("vips_target_write_unbuffered:\n"); if (target->ended) return 0; while (length > 0) { gint64 bytes_written; bytes_written = class->write(target, data, length); /* n == 0 isn't strictly an error, but we treat it as * one to make sure we don't get stuck in this loop. */ if (bytes_written <= 0) { vips_error_system(errno, vips_connection_nick( VIPS_CONNECTION(target)), "%s", _("write error")); return -1; } length -= bytes_written; data = (char *) data + bytes_written; } return 0; } static int vips_target_flush(VipsTarget *target) { g_assert(target->write_point >= 0); g_assert(target->write_point <= VIPS_TARGET_BUFFER_SIZE); VIPS_DEBUG_MSG("vips_target_flush:\n"); if (target->write_point > 0) { if (vips_target_write_unbuffered(target, target->output_buffer, target->write_point)) return -1; target->write_point = 0; } return 0; } /** * vips_target_write: * @target: target to operate on * @buffer: bytes to write * @length: length of @buffer in bytes * * Write @length bytes from @buffer to the output. * * Returns: 0 on success, -1 on error. */ int vips_target_write(VipsTarget *target, const void *buffer, size_t length) { VIPS_DEBUG_MSG("vips_target_write: %zd bytes\n", length); if (length > VIPS_TARGET_BUFFER_SIZE - target->write_point && vips_target_flush(target)) return -1; if (length > VIPS_TARGET_BUFFER_SIZE - target->write_point) { /* Still too large? Do an unbuffered write. */ if (vips_target_write_unbuffered(target, buffer, length)) return -1; } else { memcpy(target->output_buffer + target->write_point, buffer, length); target->write_point += length; } return 0; } /** * vips_target_read: * @target: target to operate on * @buffer: store bytes here * @length: length of @buffer in bytes * * Read up to @length bytes from @target and store the bytes in @buffer. * Return the number of bytes actually read. If all bytes have been read from * the file, return 0. * * Arguments exactly as read(2). * * Reading froma target sounds weird, but libtiff needs this for * multi-page writes. This method will fail for targets like pipes. * * Returns: the number of bytes read, 0 on end of file, -1 on error. */ gint64 vips_target_read(VipsTarget *target, void *buffer, size_t length) { VipsTargetClass *class = VIPS_TARGET_GET_CLASS(target); VIPS_DEBUG_MSG("vips_target_read: %zd bytes\n", length); if (vips_target_flush(target)) return -1; return class->read(target, buffer, length); } /** * vips_target_seek: * @target: target to operate on * @position: position to seek to * @whence: seek relative to beginning, offset, or end * * Seek the target. This behaves exactly as lseek(2). * * Seeking a target sounds weird, but libtiff needs this. This method will * fail for targets like pipes. * * Returns: the new seek position, -1 on error. */ off_t vips_target_seek(VipsTarget *target, off_t position, int whence) { VipsTargetClass *class = VIPS_TARGET_GET_CLASS(target); off_t new_position; VIPS_DEBUG_MSG("vips_target_seek: pos = %ld, whence = %d\n", position, whence); if (vips_target_flush(target)) return -1; new_position = class->seek(target, position, whence); VIPS_DEBUG_MSG("vips_target_seek: new_position = %ld\n", new_position); return new_position; } /** * vips_target_end: * @target: target to operate on * @buffer: bytes to write * @length: length of @buffer in bytes * * Call this at the end of write to make the target do any cleaning up. You * can call it many times. * * After a target has been ended, further writes will do nothing. * * Returns: 0 on success, -1 on error. */ int vips_target_end(VipsTarget *target) { VipsTargetClass *class = VIPS_TARGET_GET_CLASS(target); VIPS_DEBUG_MSG("vips_target_end:\n"); if (target->ended) return 0; if (vips_target_flush(target)) return -1; /* Move the target buffer into the blob so it can be read out. */ if (target->memory_buffer) { const char *data; size_t length; length = target->memory_buffer->len; data = g_string_free(target->memory_buffer, FALSE); target->memory_buffer = NULL; vips_blob_set(target->blob, (VipsCallbackFn) vips_area_free_cb, data, length); } else { if (class->end(target)) return -1; } target->ended = TRUE; return 0; } /** * vips_target_finish: * @target: target to operate on * @buffer: bytes to write * @length: length of @buffer in bytes * * Deprecated in favour of vips_target_end(). */ void vips_target_finish(VipsTarget *target) { (void) vips_target_end(target); } /** * vips_target_steal: * @target: target to operate on * @length: return number of bytes of data * * Memory targets only (see vips_target_new_to_memory()). Steal all data * written to the target so far, and call vips_target_end(). * * You must free the returned pointer with g_free(). * * The data is NOT automatically null-terminated. vips_target_putc() a '\0' * before calling this to get a null-terminated string. * * You can't call this after vips_target_end(), since that moves the data to a * blob, and we can't steal from that in case the pointer has been be shared. * * You can't call this function more than once. * * Returns: (array length=length) (element-type guint8) (transfer full): the * data */ unsigned char * vips_target_steal(VipsTarget *target, size_t *length) { const char *data; (void) vips_target_flush(target); data = NULL; if (target->memory_buffer) { if (length) *length = target->memory_buffer->len; data = g_string_free(target->memory_buffer, FALSE); target->memory_buffer = NULL; /* We must have a valid byte array, or end will fail. */ target->memory_buffer = g_string_sized_new(0); } if (vips_target_end(target)) return NULL; return (unsigned char *) data; } /** * vips_target_steal_text: * @target: target to operate on * * As vips_target_steal_text(), but return a null-terminated string. * * Returns: (transfer full): target contents as a null-terminated string. */ char * vips_target_steal_text(VipsTarget *target) { vips_target_putc(target, '\0'); return (char *) vips_target_steal(target, NULL); } /** * vips_target_putc: * @target: target to operate on * @ch: character to write * * Write a single character @ch to @target. See the macro VIPS_TARGET_PUTC() * for a faster way to do this. * * Returns: 0 on success, -1 on error. */ int vips_target_putc(VipsTarget *target, int ch) { VIPS_DEBUG_MSG("vips_target_putc: %d\n", ch); if (target->write_point >= VIPS_TARGET_BUFFER_SIZE && vips_target_flush(target)) return -1; target->output_buffer[target->write_point++] = ch; return 0; } /** * vips_target_writes: * @target: target to operate on * @str: string to write * * Write a null-terminated string to @target. * * Returns: 0 on success, and -1 on error. */ int vips_target_writes(VipsTarget *target, const char *str) { return vips_target_write(target, (unsigned char *) str, strlen(str)); } /** * vips_target_writef: * @target: target to operate on * @fmt: printf()-style format string * @...: arguments to format string * * Format the string and write to @target. * * Returns: 0 on success, and -1 on error. */ int vips_target_writef(VipsTarget *target, const char *fmt, ...) { va_list ap; char *line; int result; va_start(ap, fmt); line = g_strdup_vprintf(fmt, ap); va_end(ap); result = vips_target_writes(target, line); g_free(line); return result; } /** * vips_target_write_amp: * @target: target to operate on * @str: string to write * * Write @str to @target, but escape stuff that xml hates in text. Our * argument string is utf-8. * * XML rules: * * - We must escape &<> * - Don't escape \n, \t, \r * - Do escape the other ASCII codes. * * Returns: 0 on success, -1 on error. */ int vips_target_write_amp(VipsTarget *target, const char *str) { const char *p; for (p = str; *p; p++) if (*p < 32 && *p != '\n' && *p != '\t' && *p != '\r') { /* You'd think we could output "%x;", but xml * 1.0 parsers barf on that. xml 1.1 allows this, but * there are almost no parsers. * * U+2400 onwards are unicode glyphs for the ASCII * control characters, so we can use them -- thanks * electroly. */ if (vips_target_writef(target, "&#x%04x;", 0x2400 + *p)) return -1; } else if (*p == '<') { if (vips_target_writes(target, "<")) return -1; } else if (*p == '>') { if (vips_target_writes(target, ">")) return -1; } else if (*p == '&') { if (vips_target_writes(target, "&")) return -1; } else { if (VIPS_TARGET_PUTC(target, *p)) return -1; } return 0; } libvips-8.15.1/libvips/iofuncs/targetcustom.c000066400000000000000000000216141454007373500212750ustar00rootroot00000000000000/* A Target subclass with signals you can easily hook up to other output * sources. * * J.Cupitt, 21/11/19 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #include #include #include #include #include #include #include #include #include "vipsmarshal.h" G_DEFINE_TYPE(VipsTargetCustom, vips_target_custom, VIPS_TYPE_TARGET); /* Our signals. */ enum { SIG_WRITE, SIG_READ, SIG_SEEK, SIG_END, SIG_FINISH, SIG_LAST }; static guint vips_target_custom_signals[SIG_LAST] = { 0 }; static gint64 vips_target_custom_write_real(VipsTarget *target, const void *data, size_t length) { gint64 bytes_written; VIPS_DEBUG_MSG("vips_target_custom_write_real:\n"); /* Return value if no attached handler. */ bytes_written = 0; g_signal_emit(target, vips_target_custom_signals[SIG_WRITE], 0, data, (gint64) length, &bytes_written); VIPS_DEBUG_MSG(" %zd\n", bytes_written); return bytes_written; } static gint64 vips_target_custom_read_real(VipsTarget *target, void *buffer, size_t length) { gint64 bytes_read; VIPS_DEBUG_MSG("vips_target_custom_read_real:\n"); /* Return this value (error) if there's no attached handler. */ bytes_read = 0; g_signal_emit(target, vips_target_custom_signals[SIG_READ], 0, buffer, (gint64) length, &bytes_read); VIPS_DEBUG_MSG(" vips_target_custom_read_real, seen %zd bytes\n", bytes_read); return bytes_read; } static gint64 vips_target_custom_seek_real(VipsTarget *target, gint64 offset, int whence) { GValue args[3] = { G_VALUE_INIT, G_VALUE_INIT, G_VALUE_INIT }; GValue result = G_VALUE_INIT; gint64 new_position; VIPS_DEBUG_MSG("vips_target_custom_seek_real:\n"); /* Set the signal args. */ g_value_init(&args[0], G_TYPE_OBJECT); g_value_set_object(&args[0], target); g_value_init(&args[1], G_TYPE_INT64); g_value_set_int64(&args[1], offset); g_value_init(&args[2], G_TYPE_INT); g_value_set_int(&args[2], whence); /* Set the default value if no handlers are attached. */ g_value_init(&result, G_TYPE_INT64); g_value_set_int64(&result, -1); /* We need to use this signal interface since we want a default value * if no handlers are attached. */ g_signal_emitv((const GValue *) &args, vips_target_custom_signals[SIG_SEEK], 0, &result); new_position = g_value_get_int64(&result); g_value_unset(&args[0]); g_value_unset(&args[1]); g_value_unset(&args[2]); g_value_unset(&result); VIPS_DEBUG_MSG(" vips_target_custom_seek_real, seen new pos %zd\n", new_position); return new_position; } static int vips_target_custom_end_real(VipsTarget *target) { int result; VIPS_DEBUG_MSG("vips_target_custom_end_real:\n"); /* For compatibility with older libvipses, we have to emit "finish" * as well, eg. ruby-vips relies on this. */ g_signal_emit(target, vips_target_custom_signals[SIG_FINISH], 0); /* Return value if no attached handler. */ result = 0; g_signal_emit(target, vips_target_custom_signals[SIG_END], 0, &result); return result; } static void vips_target_custom_finish_real(VipsTarget *target) { VIPS_DEBUG_MSG("vips_target_custom_finish_real:\n"); g_signal_emit(target, vips_target_custom_signals[SIG_FINISH], 0); } static gint64 vips_target_custom_write_signal_real(VipsTargetCustom *target_custom, const void *data, gint64 length) { VIPS_DEBUG_MSG("vips_target_custom_write_signal_real:\n"); return 0; } static gint64 vips_target_custom_read_signal_real(VipsTargetCustom *target_custom, void *data, gint64 length) { VIPS_DEBUG_MSG("vips_target_custom_read_signal_real:\n"); return 0; } static gint64 vips_target_custom_seek_signal_real(VipsTargetCustom *target_custom, gint64 offset, int whence) { VIPS_DEBUG_MSG("vips_target_custom_seek_signal_real:\n"); return -1; } static int vips_target_custom_end_signal_real(VipsTargetCustom *target_custom) { VIPS_DEBUG_MSG("vips_target_custom_end_signal_real:\n"); return 0; } static void vips_target_custom_finish_signal_real(VipsTargetCustom *target_custom) { VIPS_DEBUG_MSG("vips_target_custom_finish_signal_real:\n"); } static void vips_target_custom_class_init(VipsTargetCustomClass *class) { VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class); VipsTargetClass *target_class = VIPS_TARGET_CLASS(class); object_class->nickname = "target_custom"; object_class->description = _("Custom target"); target_class->write = vips_target_custom_write_real; target_class->read = vips_target_custom_read_real; target_class->seek = vips_target_custom_seek_real; target_class->end = vips_target_custom_end_real; target_class->finish = vips_target_custom_finish_real; class->write = vips_target_custom_write_signal_real; class->read = vips_target_custom_read_signal_real; class->seek = vips_target_custom_seek_signal_real; class->end = vips_target_custom_end_signal_real; class->finish = vips_target_custom_finish_signal_real; /** * VipsTargetCustom::write: * @target_custom: the target being operated on * @data: %pointer, bytes to write * @length: %gint64, number of bytes * * This signal is emitted to write bytes to the target. * * Returns: the number of bytes written. */ vips_target_custom_signals[SIG_WRITE] = g_signal_new("write", G_TYPE_FROM_CLASS(class), G_SIGNAL_ACTION, G_STRUCT_OFFSET(VipsTargetCustomClass, write), NULL, NULL, vips_INT64__POINTER_INT64, G_TYPE_INT64, 2, G_TYPE_POINTER, G_TYPE_INT64); /** * VipsTargetCustom::read: * @target_custom: the target being operated on * @buffer: %gpointer, buffer to fill * @size: %gint64, size of buffer * * This signal is emitted to read bytes from the target into @buffer. * * The handler for an unreadable target should always return -1. * * Returns: the number of bytes read. Return 0 for EOF. */ vips_target_custom_signals[SIG_READ] = g_signal_new("read", G_TYPE_FROM_CLASS(class), G_SIGNAL_ACTION, G_STRUCT_OFFSET(VipsTargetCustomClass, read), NULL, NULL, vips_INT64__POINTER_INT64, G_TYPE_INT64, 2, G_TYPE_POINTER, G_TYPE_INT64); /** * VipsTargetCustom::seek: * @target_custom: the target being operated on * @offset: %gint64, seek offset * @whence: %gint, seek origin * * This signal is emitted to seek the target. The handler should * change the target position appropriately. * * The handler for an unseekable target should always return -1. * * Returns: the new seek position. */ vips_target_custom_signals[SIG_SEEK] = g_signal_new("seek", G_TYPE_FROM_CLASS(class), G_SIGNAL_ACTION, G_STRUCT_OFFSET(VipsTargetCustomClass, seek), NULL, NULL, vips_INT64__INT64_INT, G_TYPE_INT64, 2, G_TYPE_INT64, G_TYPE_INT); /** * VipsTargetCustom::end: * @target_custom: the target being operated on * * This signal is emitted at the end of write. The target should do * any finishing necessary. * * Returns: 0 on success, -1 on error. */ vips_target_custom_signals[SIG_END] = g_signal_new("end", G_TYPE_FROM_CLASS(class), G_SIGNAL_ACTION, G_STRUCT_OFFSET(VipsTargetCustomClass, end), NULL, NULL, vips_INT__VOID, G_TYPE_INT, 0); /** * VipsTargetCustom::finish: * @target_custom: the target being operated on * * Deprecated for VipsTargetCustom::end. */ vips_target_custom_signals[SIG_FINISH] = g_signal_new("finish", G_TYPE_FROM_CLASS(class), G_SIGNAL_ACTION, G_STRUCT_OFFSET(VipsTargetCustomClass, finish), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } static void vips_target_custom_init(VipsTargetCustom *target_custom) { } /** * vips_target_custom_new: * * Create a #VipsTargetCustom. Attach signals to implement write and finish. * * Returns: a new #VipsTargetCustom */ VipsTargetCustom * vips_target_custom_new(void) { VipsTargetCustom *target_custom; VIPS_DEBUG_MSG("vips_target_custom_new:\n"); target_custom = VIPS_TARGET_CUSTOM( g_object_new(VIPS_TYPE_TARGET_CUSTOM, NULL)); if (vips_object_build(VIPS_OBJECT(target_custom))) { VIPS_UNREF(target_custom); return NULL; } return target_custom; } libvips-8.15.1/libvips/iofuncs/thread.c000066400000000000000000000210751454007373500200240ustar00rootroot00000000000000/* Basic functions to support threading. * * 29/9/22 * - from threadpool.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG #define VIPS_DEBUG_RED */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #include #include #include #include #include #ifdef G_OS_WIN32 #include #endif /*G_OS_WIN32*/ /* Maximum value we allow for VIPS_CONCURRENCY. We need to stop huge values * killing the system. */ #define MAX_THREADS (1024) /* Default n threads ... 0 means get from environment. */ int vips__concurrency = 0; /* Default tile geometry ... can be set by vips_init(). */ int vips__tile_width = VIPS__TILE_WIDTH; int vips__tile_height = VIPS__TILE_HEIGHT; int vips__fatstrip_height = VIPS__FATSTRIP_HEIGHT; int vips__thinstrip_height = VIPS__THINSTRIP_HEIGHT; /* Set this GPrivate to indicate that is a libvips thread. */ static GPrivate *is_vips_thread_key = NULL; /* TRUE if we are a vips thread. We sometimes manage resource allocation * differently for vips threads since we can cheaply free stuff on thread * termination. */ gboolean vips_thread_isvips(void) { return g_private_get(is_vips_thread_key) != NULL; } /* Glib 2.32 revised the thread API. We need some compat functions. */ GMutex * vips_g_mutex_new(void) { GMutex *mutex; mutex = g_new(GMutex, 1); g_mutex_init(mutex); return mutex; } void vips_g_mutex_free(GMutex *mutex) { g_mutex_clear(mutex); g_free(mutex); } GCond * vips_g_cond_new(void) { GCond *cond; cond = g_new(GCond, 1); g_cond_init(cond); return cond; } void vips_g_cond_free(GCond *cond) { g_cond_clear(cond); g_free(cond); } typedef struct { const char *domain; GThreadFunc func; gpointer data; } VipsThreadInfo; static void * vips_thread_run(gpointer data) { VipsThreadInfo *info = (VipsThreadInfo *) data; void *result; /* Set this to something (anything) to tag this thread as a vips * worker. No need to call g_private_replace as there is no * GDestroyNotify handler associated with a worker. */ g_private_set(is_vips_thread_key, info); result = info->func(info->data); g_free(info); vips_thread_shutdown(); return result; } GThread * vips_g_thread_new(const char *domain, GThreadFunc func, gpointer data) { GThread *thread; VipsThreadInfo *info; GError *error = NULL; info = g_new(VipsThreadInfo, 1); info->domain = domain; info->func = func; info->data = data; thread = g_thread_try_new(domain, vips_thread_run, info, &error); VIPS_DEBUG_MSG_RED("vips_g_thread_new: g_thread_create(%s) = %p\n", domain, thread); if (!thread) { if (error) vips_g_error(&error); else vips_error(domain, "%s", _("unable to create thread")); } return thread; } /* The default concurrency, set by the environment variable VIPS_CONCURRENCY, * or if that is not set, the number of threads available on the host machine. */ static int vips__concurrency_get_default(void) { const char *str; int nthr; int x; /* Tell the threads system how much concurrency we expect. */ if (vips__concurrency > 0) nthr = vips__concurrency; else if ( ((str = g_getenv("VIPS_CONCURRENCY")) #if ENABLE_DEPRECATED || (str = g_getenv("IM_CONCURRENCY")) #endif ) && (x = atoi(str)) > 0) nthr = x; else nthr = g_get_num_processors(); if (nthr < 1 || nthr > MAX_THREADS) { nthr = VIPS_CLIP(1, nthr, MAX_THREADS); g_warning(_("threads clipped to %d"), nthr); } return nthr; } /** * vips_concurrency_set: * @concurrency: number of threads to run * * Sets the number of worker threads that vips should use when running a * #VipsThreadPool. * * The special value 0 means "default". In this case, the number of threads * is set by the environment variable VIPS_CONCURRENCY, or if that is not * set, the number of threads available on the host machine. * * See also: vips_concurrency_get(). */ void vips_concurrency_set(int concurrency) { /* Tell the threads system how much concurrency we expect. */ if (concurrency < 1) concurrency = vips__concurrency_get_default(); else if (concurrency > MAX_THREADS) { concurrency = MAX_THREADS; g_warning(_("threads clipped to %d"), MAX_THREADS); } vips__concurrency = concurrency; } /** * vips_concurrency_get: * * Returns the number of worker threads that vips should use when running a * #VipsThreadPool. * * vips gets this values from these sources in turn: * * If vips_concurrency_set() has been called, this value is used. The special * value 0 means "default". You can also use the command-line argument * "--vips-concurrency" to set this value. * * If vips_concurrency_set() has not been called and no command-line argument * was used, vips uses the value of the environment variable VIPS_CONCURRENCY, * * If VIPS_CONCURRENCY has not been set, vips finds the number of hardware * threads that the host machine can run in parallel and uses that value. * * The final value is clipped to the range 1 - 1024. * * See also: vips_concurrency_get(). * * Returns: number of worker threads to use. */ int vips_concurrency_get(void) { return vips__concurrency; } /** * vips_get_tile_size: (method) * @im: image to guess for * @tile_width: (out): return selected tile width * @tile_height: (out): return selected tile height * @n_lines: (out): return buffer height in scanlines * * Pick a tile size and a buffer height for this image and the current * value of vips_concurrency_get(). The buffer height * will always be a multiple of tile_height. * * The buffer height is the height of each buffer we fill in sink disc. Since * we have two buffers, the largest range of input locality is twice the output * buffer size, plus whatever margin we add for things like convolution. */ void vips_get_tile_size(VipsImage *im, int *tile_width, int *tile_height, int *n_lines) { const int nthr = vips_concurrency_get(); const int typical_image_width = 1000; /* Compiler warnings. */ *tile_width = 1; *tile_height = 1; /* Pick a render geometry. */ switch (im->dhint) { case VIPS_DEMAND_STYLE_SMALLTILE: *tile_width = vips__tile_width; *tile_height = vips__tile_height; break; case VIPS_DEMAND_STYLE_ANY: case VIPS_DEMAND_STYLE_FATSTRIP: *tile_width = im->Xsize; *tile_height = vips__fatstrip_height; break; case VIPS_DEMAND_STYLE_THINSTRIP: *tile_width = im->Xsize; /* Only enable thinstrip height for very wide images -- the * overheads are too high to be worthwhile otherwise. */ *tile_height = im->Xsize > 10000 ? vips__thinstrip_height : vips__fatstrip_height; break; default: g_assert_not_reached(); } /* We can't set n_lines for the current demand style: a later bit of * the pipeline might see a different hint and we need to synchronise * buffer sizes everywhere. * * We also can't depend on the current image size, since that might * change down the pipeline too. Pick a typical image width. * * Pick the maximum buffer size we might possibly need, then round up * to a multiple of tileheight. */ *n_lines = vips__tile_height * VIPS_ROUND_UP(vips__tile_width * nthr, typical_image_width) / typical_image_width; *n_lines = VIPS_MAX(*n_lines, vips__fatstrip_height * nthr); *n_lines = VIPS_MAX(*n_lines, vips__thinstrip_height * nthr); *n_lines = VIPS_ROUND_UP(*n_lines, *tile_height); /* We make this assumption in several places. */ g_assert(*n_lines % *tile_height == 0); VIPS_DEBUG_MSG("vips_get_tile_size: %d by %d patches, " "groups of %d scanlines\n", *tile_width, *tile_height, *n_lines); } void vips__thread_init(void) { static GPrivate private = G_PRIVATE_INIT(NULL); is_vips_thread_key = &private; if (vips__concurrency == 0) vips__concurrency = vips__concurrency_get_default(); } libvips-8.15.1/libvips/iofuncs/threadpool.c000066400000000000000000000427751454007373500207300ustar00rootroot00000000000000/* Support for thread pools ... like threadgroups, but lighter. * * 18/3/10 * - from threadgroup.c * - distributed work allocation idea from Christian Blenia, thank you * very much * 21/3/10 * - progress feedback * - only expose VipsThreadState * 11/5/10 * - argh, stopping many threads could sometimes leave allocated work * undone * 17/7/10 * - set pool->error whenever we set thr->error, lets us catch allocate * errors (thanks Tim) * 25/7/14 * - limit nthr on tiny images * 6/3/17 * - remove single-thread-first-request thing, new seq system makes it * unnecessary * 23/4/17 * - add ->stall * - don't depend on image width when setting n_lines * 27/2/19 jtorresfabra * - free threadpool earlier */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG #define VIPS_DEBUG_RED */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #include #include #include #include #include #ifdef G_OS_WIN32 #include #endif /*G_OS_WIN32*/ /** * SECTION: threadpool * @short_description: pools of worker threads * @stability: Stable * @see_also: generate * @include: vips/vips.h * @title: VipsThreadpool * * vips_threadpool_run() loops a set of threads over an image. Threads take it * in turns to allocate units of work (a unit might be a tile in an image), * then run in parallel to process those units. An optional progress function * can be used to give feedback. */ /* Set to stall threads for debugging. */ static gboolean vips__stall = FALSE; /* The global threadset we run workers in. */ static VipsThreadset *vips__threadset = NULL; /* Set this GPrivate to link a thread back to its VipsWorker struct. */ static GPrivate *worker_key = NULL; /* Maximum value we allow for VIPS_CONCURRENCY. We need to stop huge values * killing the system. */ #define MAX_THREADS (1024) /* Start up threadpools. This is called during vips_init. */ void vips__threadpool_init(void) { static GPrivate private = G_PRIVATE_INIT(NULL); /* 3 is the useful minimum, and huge values can crash the machine. */ const char *max_threads_env = g_getenv("VIPS_MAX_THREADS"); int max_threads = max_threads_env ? VIPS_CLIP(3, atoi(max_threads_env), MAX_THREADS) : 0; worker_key = &private; if (g_getenv("VIPS_STALL")) vips__stall = TRUE; /* max_threads > 0 will create a set of threads on startup. This is * necessary for wasm, but may break on systems that try to fork() * after init. */ vips__threadset = vips_threadset_new(max_threads); } void vips__threadpool_shutdown(void) { VIPS_FREEF(vips_threadset_free, vips__threadset); } /** * vips_thread_execute: * @name: a name for the thread * @func: a function to execute in the libvips threadset * @data: an argument to supply to @func * * A newly created or reused thread will execute @func with the * argument @data. * * Returns: 0 on success, -1 on error. */ int vips_thread_execute(const char *domain, GFunc func, gpointer data) { return vips_threadset_run(vips__threadset, domain, func, data); } G_DEFINE_TYPE(VipsThreadState, vips_thread_state, VIPS_TYPE_OBJECT); static void vips_thread_state_dispose(GObject *gobject) { VipsThreadState *state = (VipsThreadState *) gobject; VIPS_DEBUG_MSG("vips_thread_state_dispose:\n"); VIPS_UNREF(state->reg); G_OBJECT_CLASS(vips_thread_state_parent_class)->dispose(gobject); } static int vips_thread_state_build(VipsObject *object) { VipsThreadState *state = (VipsThreadState *) object; if (!(state->reg = vips_region_new(state->im))) return -1; return VIPS_OBJECT_CLASS(vips_thread_state_parent_class) ->build(object); } static void vips_thread_state_class_init(VipsThreadStateClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class); gobject_class->dispose = vips_thread_state_dispose; object_class->build = vips_thread_state_build; object_class->nickname = "threadstate"; object_class->description = _("per-thread state for vipsthreadpool"); } static void vips_thread_state_init(VipsThreadState *state) { VIPS_DEBUG_MSG("vips_thread_state_init:\n"); state->reg = NULL; state->stop = FALSE; state->stall = FALSE; } void * vips_thread_state_set(VipsObject *object, void *a, void *b) { VipsThreadState *state = (VipsThreadState *) object; VipsImage *im = (VipsImage *) a; VIPS_DEBUG_MSG("vips_thread_state_set: image %p\n", im); state->im = im; state->a = b; return NULL; } VipsThreadState * vips_thread_state_new(VipsImage *im, void *a) { VIPS_DEBUG_MSG("vips_thread_state_new: image %p\n", im); return VIPS_THREAD_STATE(vips_object_new( VIPS_TYPE_THREAD_STATE, vips_thread_state_set, im, a)); } /* What we track for each thread in the pool. */ typedef struct _VipsWorker { /*< private >*/ struct _VipsThreadpool *pool; /* Pool we are part of */ VipsThreadState *state; gboolean stop; } VipsWorker; /* What we track for a group of threads working together. */ typedef struct _VipsThreadpool { /*< private >*/ VipsImage *im; /* Image we are calculating */ /* Start a thread, do a unit of work (runs in parallel) and allocate * a unit of work (serial). Plus the mutex we use to serialize work * allocation. */ VipsThreadStartFn start; VipsThreadpoolAllocateFn allocate; VipsThreadpoolWorkFn work; GMutex *allocate_lock; void *a; /* User argument to start / allocate / etc. */ int max_workers; /* Max number of workers in pool */ /* The number of workers in the pool (as a negative number, so * -4 means 4 workers are running). */ VipsSemaphore n_workers; /* Workers up this for every loop to make the main thread tick. */ VipsSemaphore tick; /* The number of workers queueing up on allocate_lock. Use this to * grow and shrink the threadpool. */ int n_waiting; /* Set this to abort evaluation early with an error. */ gboolean error; /* Ask threads to exit, either set by allocate, or on free. */ gboolean stop; /* Set this and the next worker to see it will clear the flag and exit * (used to downsize the threadpool). */ int exit; } VipsThreadpool; static int vips_worker_allocate(VipsWorker *worker) { VipsThreadpool *pool = worker->pool; g_assert(!pool->stop); if (!worker->state && !(worker->state = pool->start(pool->im, pool->a))) return -1; if (pool->allocate(worker->state, pool->a, &pool->stop)) return -1; return 0; } /* Run this once per main loop. Get some work (single-threaded), then do it * (many-threaded). * * The very first workunit is also executed single-threaded. This gives * loaders a change to seek to the correct spot, see vips_sequential(). */ static void vips_worker_work_unit(VipsWorker *worker) { VipsThreadpool *pool = worker->pool; VIPS_GATE_START("vips_worker_work_unit: wait"); vips__worker_lock(pool->allocate_lock); VIPS_GATE_STOP("vips_worker_work_unit: wait"); /* Has another worker signaled stop while we've been waiting? */ if (pool->stop) { worker->stop = TRUE; g_mutex_unlock(pool->allocate_lock); return; } /* Has a thread been asked to exit? Volunteer if yes. */ if (g_atomic_int_add(&pool->exit, -1) > 0) { /* A thread had been asked to exit, and we've grabbed the * flag. */ worker->stop = TRUE; g_mutex_unlock(pool->allocate_lock); return; } else { /* No one had been asked to exit and we've mistakenly taken * the exit count below zero. Put it back up again. */ g_atomic_int_add(&pool->exit, 1); } if (vips_worker_allocate(worker)) { pool->error = TRUE; worker->stop = TRUE; g_mutex_unlock(pool->allocate_lock); return; } /* Have we just signalled stop? */ if (pool->stop) { worker->stop = TRUE; g_mutex_unlock(pool->allocate_lock); return; } g_mutex_unlock(pool->allocate_lock); if (worker->state->stall && vips__stall) { /* Sleep for 0.5s. Handy for stressing the seq system. Stall * is set by allocate funcs in various places. */ g_usleep(500000); worker->state->stall = FALSE; printf("vips_worker_work_unit: stall done, releasing y = %d ...\n", worker->state->y); } /* Process a work unit. */ if (pool->work(worker->state, pool->a)) { worker->stop = TRUE; pool->error = TRUE; } } /* What runs as a thread ... loop, waiting to be told to do stuff. */ static void vips_thread_main_loop(void *a, void *b) { VipsWorker *worker = (VipsWorker *) a; VipsThreadpool *pool = worker->pool; g_assert(pool == worker->pool); VIPS_GATE_START("vips_thread_main_loop: thread"); g_private_set(worker_key, worker); /* Process work units! Always tick, even if we are stopping, so the * main thread will wake up for exit. */ while (!pool->stop && !worker->stop && !pool->error) { VIPS_GATE_START("vips_worker_work_unit: u"); vips_worker_work_unit(worker); VIPS_GATE_STOP("vips_worker_work_unit: u"); vips_semaphore_up(&pool->tick); } VIPS_GATE_STOP("vips_thread_main_loop: thread"); /* unreffing the worker state will trigger stop in the threadstate, so * we need to single-thread. */ g_mutex_lock(pool->allocate_lock); VIPS_FREEF(g_object_unref, worker->state); g_mutex_unlock(pool->allocate_lock); VIPS_FREE(worker); g_private_set(worker_key, NULL); /* We are done: tell the main thread. */ vips_semaphore_upn(&pool->n_workers, 1); } /* Attach another thread to a threadpool. */ static int vips_worker_new(VipsThreadpool *pool) { VipsWorker *worker; if (!(worker = VIPS_NEW(NULL, VipsWorker))) return -1; worker->pool = pool; worker->state = NULL; /* We can't build the state here, it has to be done by the worker * itself the first time that allocate runs so that any regions are * owned by the correct thread. */ if (vips_thread_execute("worker", vips_thread_main_loop, worker)) { g_free(worker); return -1; } /* One more worker in the pool. */ vips_semaphore_upn(&pool->n_workers, -1); return 0; } void vips__worker_lock(GMutex *mutex) { VipsWorker *worker = (VipsWorker *) g_private_get(worker_key); if (worker) g_atomic_int_add(&worker->pool->n_waiting, 1); g_mutex_lock(mutex); if (worker) g_atomic_int_add(&worker->pool->n_waiting, -1); } static void vips_threadpool_free(VipsThreadpool *pool) { VIPS_DEBUG_MSG("vips_threadpool_free: \"%s\" (%p)\n", pool->im->filename, pool); /* Wait for them all to exit. */ pool->stop = TRUE; vips_semaphore_downn(&pool->n_workers, 0); VIPS_FREEF(vips_g_mutex_free, pool->allocate_lock); vips_semaphore_destroy(&pool->n_workers); vips_semaphore_destroy(&pool->tick); VIPS_FREE(pool); } static VipsThreadpool * vips_threadpool_new(VipsImage *im) { VipsThreadpool *pool; int tile_width; int tile_height; gint64 n_tiles; int n_lines; /* Allocate and init new thread block. */ if (!(pool = VIPS_NEW(NULL, VipsThreadpool))) return NULL; pool->im = im; pool->allocate = NULL; pool->work = NULL; pool->allocate_lock = vips_g_mutex_new(); pool->max_workers = vips_concurrency_get(); vips_semaphore_init(&pool->n_workers, 0, "n_workers"); vips_semaphore_init(&pool->tick, 0, "tick"); pool->error = FALSE; pool->stop = FALSE; pool->exit = 0; /* If this is a tiny image, we won't need all max_workers threads. * Guess how * many tiles we might need to cover the image and use that to limit * the number of threads we create. */ vips_get_tile_size(im, &tile_width, &tile_height, &n_lines); n_tiles = (1 + (gint64) im->Xsize / tile_width) * (1 + (gint64) im->Ysize / tile_height); n_tiles = VIPS_CLIP(1, n_tiles, 1024); pool->max_workers = VIPS_MIN(pool->max_workers, n_tiles); /* VIPS_META_CONCURRENCY on the image can optionally override * concurrency. */ pool->max_workers = vips_image_get_concurrency(im, pool->max_workers); VIPS_DEBUG_MSG("vips_threadpool_new: \"%s\" (%p), with %d threads\n", im->filename, pool, pool->max_workers); return pool; } /** * VipsThreadpoolStartFn: * @a: client data * @b: client data * @c: client data * * This function is called once by each worker just before the first time work * is allocated to it to build the per-thread state. Per-thread state is used * by #VipsThreadpoolAllocate and #VipsThreadpoolWork to communicate. * * #VipsThreadState is a subclass of #VipsObject. Start functions are called * from allocate, that is, they are single-threaded. * * See also: vips_threadpool_run(). * * Returns: a new #VipsThreadState object, or NULL on error */ /** * VipsThreadpoolAllocateFn: * @state: per-thread state * @a: client data * @b: client data * @c: client data * @stop: set this to signal end of computation * * This function is called to allocate a new work unit for the thread. It is * always single-threaded, so it can modify per-pool state (such as a * counter). * * @a, @b, @c are the values supplied to the call to * vips_threadpool_run(). * * It should set @stop to %TRUE to indicate that no work could be allocated * because the job is done. * * See also: vips_threadpool_run(). * * Returns: 0 on success, or -1 on error */ /** * VipsThreadpoolWorkFn: * @state: per-thread state * @a: client data * @b: client data * @c: client data * * This function is called to process a work unit. Many copies of this can run * at once, so it should not write to the per-pool state. It can write to * per-thread state. * * @a, @b, @c are the values supplied to the call to * vips_threadpool_run(). * * See also: vips_threadpool_run(). * * Returns: 0 on success, or -1 on error */ /** * VipsThreadpoolProgressFn: * @a: client data * @b: client data * @c: client data * * This function is called by the main thread once for every work unit * processed. It can be used to give the user progress feedback. * * See also: vips_threadpool_run(). * * Returns: 0 on success, or -1 on error */ /** * vips_threadpool_run: * @im: image to loop over * @start: allocate per-thread state * @allocate: allocate a work unit * @work: process a work unit * @progress: give progress feedback about a work unit, or %NULL * @a: client data * * This function runs a set of threads over an image. Each thread first calls * @start to create new per-thread state, then runs * @allocate to set up a new work unit (perhaps the next tile in an image, for * example), then @work to process that work unit. After each unit is * processed, @progress is called, so that the operation can give * progress feedback. @progress may be %NULL. * * The object returned by @start must be an instance of a subclass of * #VipsThreadState. Use this to communicate between @allocate and @work. * * @allocate and @start are always single-threaded (so they can write to the * per-pool state), whereas @work can be executed concurrently. @progress is * always called by * the main thread (ie. the thread which called vips_threadpool_run()). * * See also: vips_concurrency_set(). * * Returns: 0 on success, or -1 on error. */ int vips_threadpool_run(VipsImage *im, VipsThreadStartFn start, VipsThreadpoolAllocateFn allocate, VipsThreadpoolWorkFn work, VipsThreadpoolProgressFn progress, void *a) { VipsThreadpool *pool; int result; int n_waiting; int n_working; if (!(pool = vips_threadpool_new(im))) return -1; pool->start = start; pool->allocate = allocate; pool->work = work; pool->a = a; /* Start with half of the max number of threads, then let it drift up * and down with load. */ for (n_working = 0; n_working < 1 + pool->max_workers / 2; n_working++) if (vips_worker_new(pool)) { vips_threadpool_free(pool); return -1; } for (;;) { /* Wait for a tick from a worker. */ vips_semaphore_down(&pool->tick); VIPS_DEBUG_MSG("vips_threadpool_run: tick\n"); if (pool->stop || pool->error) break; if (progress && progress(pool->a)) pool->error = TRUE; if (pool->stop || pool->error) break; n_waiting = g_atomic_int_get(&pool->n_waiting); VIPS_DEBUG_MSG("n_waiting = %d\n", n_waiting); VIPS_DEBUG_MSG("n_working = %d\n", n_working); VIPS_DEBUG_MSG("exit = %d\n", pool->exit); if (n_waiting > 3 && n_working > 1) { VIPS_DEBUG_MSG("shrinking thread pool\n"); g_atomic_int_add(&pool->exit, 1); n_working -= 1; } else if (n_waiting < 2 && n_working < pool->max_workers) { VIPS_DEBUG_MSG("expanding thread pool\n"); if (vips_worker_new(pool)) { vips_threadpool_free(pool); return -1; } n_working += 1; } } /* Return 0 for success. */ result = pool->error ? -1 : 0; /* This will block until the last worker completes. */ vips_threadpool_free(pool); if (!vips_image_get_concurrency(im, 0)) g_info("threadpool completed with %d workers", n_working); /* "minimise" is only emitted for top-level threadpools. */ if (!vips_image_get_typeof(im, "vips-no-minimise")) vips_image_minimise_all(im); return result; } libvips-8.15.1/libvips/iofuncs/threadset.c000066400000000000000000000172601454007373500205410ustar00rootroot00000000000000/* A set of threads. * * Creating and destroying threads can be expensive on some platforms, so we * try to only create once, then reuse. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #include /* #define VIPS_DEBUG */ #include #include #include #include typedef struct _VipsThreadsetMember { /* The set we are part of. */ VipsThreadset *set; /* The underlying glib thread object. */ GThread *thread; /* The task the thread should run next. */ const char *domain; GFunc func; void *data; void *user_data; /* The thread waits on this when it's free. */ VipsSemaphore idle; /* Set by our controller to request exit. */ gboolean kill; } VipsThreadsetMember; struct _VipsThreadset { GMutex *lock; /* All the VipsThreadsetMember we have created. */ GSList *members; /* The set of currently idle threads. */ GSList *free; /* The current number of threads, the highwater mark, and * the max we allow before blocking thread creation. */ int n_threads; int n_threads_highwater; int max_threads; }; /* The maximum relative time (in microseconds) that a thread waits * for work before being stopped. */ static const gint64 max_idle_time = 15 * G_TIME_SPAN_SECOND; /* The thread work function. */ static void * vips_threadset_work(void *pointer) { VipsThreadsetMember *member = (VipsThreadsetMember *) pointer; VipsThreadset *set = member->set; VIPS_DEBUG_MSG("vips_threadset_work: starting %p\n", member); for (;;) { /* Wait for at least 15 seconds to be given work. */ if (vips_semaphore_down_timeout(&member->idle, max_idle_time) == -1) break; /* Killed or no task available? Leave this thread. */ if (member->kill || !member->func) break; /* If we're profiling, attach a prof struct to this thread. */ if (vips__thread_profile) vips__thread_profile_attach(member->domain); /* Execute the task. */ member->func(member->data, member->user_data); /* Free any thread-private resources -- they will not be * useful for the next task to use this thread. */ vips_thread_shutdown(); member->domain = NULL; member->func = NULL; member->data = NULL; member->user_data = NULL; /* We are free ... back on the free list! */ g_mutex_lock(set->lock); set->free = g_slist_prepend(set->free, member); g_mutex_unlock(set->lock); } /* Timed-out or kill has been requested ... remove from both free * and member list. */ g_mutex_lock(set->lock); set->free = g_slist_remove(set->free, member); set->members = g_slist_remove(set->members, member); set->n_threads -= 1; VIPS_DEBUG_MSG("vips_threadset_work: stopping %p (%d remaining)\n", member, set->n_threads); g_mutex_unlock(set->lock); vips_semaphore_destroy(&member->idle); VIPS_FREE(member); return NULL; } /* Create a new idle member for the set. */ static VipsThreadsetMember * vips_threadset_add(VipsThreadset *set) { VipsThreadsetMember *member; if (set->max_threads && set->n_threads >= set->max_threads) { vips_error("VipsThreadset", "%s", _("threadset is exhausted")); return NULL; } member = g_new0(VipsThreadsetMember, 1); member->set = set; vips_semaphore_init(&member->idle, 0, "idle"); if (!(member->thread = vips_g_thread_new("libvips worker", vips_threadset_work, member))) { vips_semaphore_destroy(&member->idle); VIPS_FREE(member); return NULL; } /* Ensure idle threads are freed on exit, this * ref is increased before the thread is joined. */ g_thread_unref(member->thread); g_mutex_lock(set->lock); set->members = g_slist_prepend(set->members, member); set->n_threads += 1; set->n_threads_highwater = VIPS_MAX(set->n_threads_highwater, set->n_threads); g_mutex_unlock(set->lock); return member; } /** * vips_threadset_new: * @max_threads: maximum number of system threads * * Create a new threadset. * * If @max_threads is 0, new threads will be created when necessary by * vips_threadset_run(), with no limit on the number of threads. * * If @max_threads is > 0, then that many threads will be created by * vips_threadset_new() during startup and vips_threadset_run() will fail if * no free threads are available. * * Returns: the new threadset. */ VipsThreadset * vips_threadset_new(int max_threads) { VipsThreadset *set; set = g_new0(VipsThreadset, 1); set->lock = vips_g_mutex_new(); set->max_threads = max_threads; if (set->max_threads > 0) for (int i = 0; i < set->max_threads; i++) { VipsThreadsetMember *member; if (!(member = vips_threadset_add(set))) { vips_threadset_free(set); return NULL; } set->free = g_slist_prepend(set->free, member); } return set; } /** * vips_threadset_run: * @set: the threadset to run the task in * @domain: the name of the task (useful for debugging) * @func: the task to execute * @data: the task's data * * Execute a task in a thread. If there are no idle threads, create a new one, * provided we are under @max_threads. * * See also: vips_threadset_new(). * * Returns: 0 on success, or -1 on error. */ int vips_threadset_run(VipsThreadset *set, const char *domain, GFunc func, gpointer data) { VipsThreadsetMember *member; member = NULL; /* Try to get an idle thread. */ g_mutex_lock(set->lock); if (set->free) { member = (VipsThreadsetMember *) set->free->data; set->free = g_slist_remove(set->free, member); } g_mutex_unlock(set->lock); /* None? Make a new idle but not free member. */ if (!member) member = vips_threadset_add(set); /* Still nothing? Thread create has failed. */ if (!member) return -1; /* Allocate the task and set it going. */ member->domain = domain; member->func = func; member->data = data; member->user_data = NULL; vips_semaphore_up(&member->idle); return 0; } /* Kill a member. */ static void vips_threadset_kill_member(VipsThreadsetMember *member) { GThread *thread; thread = g_thread_ref(member->thread); member->kill = TRUE; vips_semaphore_up(&member->idle); (void) g_thread_join(thread); /* member is freed on thread exit. */ } /** * vips_threadset_free: * @set: the threadset to free * * Free a threadset. This call will block until all pending tasks are * finished. */ void vips_threadset_free(VipsThreadset *set) { VIPS_DEBUG_MSG("vips_threadset_free: %p\n", set); /* Try to get and finish a thread. */ for (;;) { VipsThreadsetMember *member; member = NULL; g_mutex_lock(set->lock); if (set->members) member = (VipsThreadsetMember *) set->members->data; g_mutex_unlock(set->lock); if (!member) break; vips_threadset_kill_member(member); } if (vips__leak) printf("vips_threadset_free: peak of %d threads\n", set->n_threads_highwater); VIPS_FREEF(vips_g_mutex_free, set->lock); VIPS_FREE(set); } libvips-8.15.1/libvips/iofuncs/type.c000066400000000000000000001323221454007373500175340ustar00rootroot00000000000000/* array type * * Unlike GArray, this has fixed length, tracks a GType for elements, and has * a per-element free function. * * 27/10/11 * - from header.c * 16/7/13 * - leakcheck VipsArea * 16/8/17 * - validate strings as utf-8 on set */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include /** * SECTION: basic * @short_description: a few typedefs used everywhere * @stability: Stable * @include: vips/vips.h * * A few simple typedefs used by VIPS. */ /** * SECTION: type * @short_description: basic types * @stability: Stable * @see_also: header * @include: vips/vips.h * * A selection of %GType definitions used by VIPS. */ /* A very simple boxed type for testing. Just an int. * * You can manipulate this thing from Python (for example) with: * * from gi.repository import Vips * a = Vips.Thing.new(12) * print a.i * b = a * del a * print b.i * del b */ /** * vips_thing_new: * @i: * * Returns: (transfer full): a new #VipsThing. */ VipsThing * vips_thing_new(int i) { VipsThing *thing; thing = g_new(VipsThing, 1); thing->i = i; printf("vips_thing_new: %d %p\n", i, thing); return thing; } static VipsThing * vips_thing_copy(VipsThing *thing) { VipsThing *thing2; thing2 = vips_thing_new(thing->i); printf("vips_thing_copy: %d %p = %p\n", thing->i, thing2, thing); return thing2; } static void vips_thing_free(VipsThing *thing) { printf("vips_thing_free: %d %p\n", thing->i, thing); g_free(thing); } G_DEFINE_BOXED_TYPE(VipsThing, vips_thing, (GBoxedCopyFunc) vips_thing_copy, (GBoxedFreeFunc) vips_thing_free) static GSList *vips_area_all = NULL; VipsArea * vips_area_copy(VipsArea *area) { g_mutex_lock(area->lock); g_assert(area->count > 0); area->count += 1; #ifdef DEBUG printf("vips_area_copy: %p count = %d\n", area, area->count); #endif /*DEBUG*/ g_mutex_unlock(area->lock); return area; } int vips_area_free_cb(void *mem, VipsArea *area) { g_free(mem); return 0; } static void vips_area_free(VipsArea *area) { if (area->free_fn && area->data) { area->free_fn(area->data, area); area->free_fn = NULL; } area->data = NULL; } void vips_area_unref(VipsArea *area) { g_mutex_lock(area->lock); g_assert(area->count > 0); area->count -= 1; #ifdef DEBUG printf("vips_area_unref: %p count = %d\n", area, area->count); #endif /*DEBUG*/ if (vips__leak) { g_mutex_lock(vips__global_lock); g_assert(g_slist_find(vips_area_all, area)); g_mutex_unlock(vips__global_lock); } if (area->count == 0) { vips_area_free(area); g_mutex_unlock(area->lock); VIPS_FREEF(vips_g_mutex_free, area->lock); g_free(area); if (vips__leak) { g_mutex_lock(vips__global_lock); vips_area_all = g_slist_remove(vips_area_all, area); g_mutex_unlock(vips__global_lock); } #ifdef DEBUG g_mutex_lock(vips__global_lock); printf("vips_area_unref: free .. total = %d\n", g_slist_length(vips_area_all)); g_mutex_unlock(vips__global_lock); #endif /*DEBUG*/ } else g_mutex_unlock(area->lock); } /** * vips_area_new: * @free_fn: (scope async) (nullable): @data will be freed with this function * @data: (transfer full): data will be freed with this function * * A VipsArea wraps a chunk of memory. It adds reference counting and a free * function. It also keeps a count and a %GType, so the area can be an array. * * This type is used for things like passing an array of double or an array of * #VipsObject pointers to operations, and for reference-counted immutable * strings. * * Initial count == 1, so _unref() after attaching somewhere. * * See also: vips_area_unref(). * * Returns: (transfer full): the new #VipsArea. */ VipsArea * vips_area_new(VipsCallbackFn free_fn, void *data) { VipsArea *area; area = g_new(VipsArea, 1); area->count = 1; area->lock = vips_g_mutex_new(); area->length = 0; area->data = data; area->free_fn = free_fn; area->type = 0; area->sizeof_type = 0; if (vips__leak) { g_mutex_lock(vips__global_lock); vips_area_all = g_slist_prepend(vips_area_all, area); g_mutex_unlock(vips__global_lock); } #ifdef DEBUG g_mutex_lock(vips__global_lock); printf("vips_area_new: %p count = %d (%d in total)\n", area, area->count, g_slist_length(vips_area_all)); g_mutex_unlock(vips__global_lock); #endif /*DEBUG*/ return area; } int vips__type_leak(void) { int n_leaks; n_leaks = 0; if (vips_area_all) { GSList *p; fprintf(stderr, "%d VipsArea alive\n", g_slist_length(vips_area_all)); for (p = vips_area_all; p; p = p->next) { VipsArea *area = VIPS_AREA(p->data); fprintf(stderr, "\t%p count = %d, bytes = %zd\n", area, area->count, area->length); n_leaks += 1; } } return n_leaks; } /** * vips_area_new_array: * @type: %GType of elements to store * @sizeof_type: sizeof() an element in the array * @n: number of elements in the array * * An area which holds an array of elements of some %GType. To set values for * the elements, get the pointer and write. * * See also: vips_area_unref(). * * Returns: (transfer full): the new #VipsArea. */ VipsArea * vips_area_new_array(GType type, size_t sizeof_type, int n) { VipsArea *area; void *array; array = g_malloc(n * sizeof_type); area = vips_area_new((VipsCallbackFn) vips_area_free_cb, array); area->n = n; area->length = n * sizeof_type; area->type = type; area->sizeof_type = sizeof_type; return area; } static int vips_area_free_array_object(GObject **array, VipsArea *area) { int i; for (i = 0; i < area->n; i++) VIPS_FREEF(g_object_unref, array[i]); VIPS_FREE(array); area->n = 0; return 0; } /** * vips_area_new_array_object: (constructor) * @n: number of elements in the array * * An area which holds an array of %GObject s. See vips_area_new_array(). When * the area is freed, each %GObject will be unreffed. * * Add an extra NULL element at the end, handy for eg. * vips_image_pipeline_array() etc. * * See also: vips_area_unref(). * * Returns: (transfer full): the new #VipsArea. */ VipsArea * vips_area_new_array_object(int n) { GObject **array; VipsArea *area; array = g_new0(GObject *, n + 1); area = vips_area_new((VipsCallbackFn) vips_area_free_array_object, array); area->n = n; area->length = n * sizeof(GObject *); area->type = G_TYPE_OBJECT; area->sizeof_type = sizeof(GObject *); return area; } /** * vips_area_get_data: * @area: #VipsArea to fetch from * @length: (out) (optional): optionally return length in bytes here * @n: (out) (optional): optionally return number of elements here * @type: (out) (optional): optionally return element type here * @sizeof_type: (out) (optional): optionally return sizeof() element type here * * Return the data pointer plus optionally the length in bytes of an area, * the number of elements, the %GType of each element and the sizeof() each * element. * * Returns: (transfer none): The pointer held by @area. */ void * vips_area_get_data(VipsArea *area, size_t *length, int *n, GType *type, size_t *sizeof_type) { if (!area) return NULL; if (length) *length = area->length; if (n) *n = area->n; if (type) *type = area->type; if (sizeof_type) *sizeof_type = area->sizeof_type; return area->data; } /* Transform an area to a G_TYPE_STRING. */ static void transform_area_g_string(const GValue *src_value, GValue *dest_value) { VipsArea *area; char buf[256]; area = g_value_get_boxed(src_value); vips_snprintf(buf, 256, "VIPS_TYPE_AREA, count = %d, data = %p", area->count, area->data); g_value_set_string(dest_value, buf); } G_DEFINE_BOXED_TYPE_WITH_CODE(VipsArea, vips_area, (GBoxedCopyFunc) vips_area_copy, (GBoxedFreeFunc) vips_area_unref, g_value_register_transform_func( g_define_type_id, G_TYPE_STRING, transform_area_g_string);) /* Transform funcs for builtin types to SAVE_STRING. */ static void transform_int_save_string(const GValue *src_value, GValue *dest_value) { vips_value_set_save_stringf(dest_value, "%d", g_value_get_int(src_value)); } static void transform_save_string_int(const GValue *src_value, GValue *dest_value) { g_value_set_int(dest_value, atoi(vips_value_get_save_string(src_value))); } static void transform_double_save_string(const GValue *src_value, GValue *dest_value) { char buf[G_ASCII_DTOSTR_BUF_SIZE]; /* Need to be locale independent. */ g_ascii_dtostr(buf, G_ASCII_DTOSTR_BUF_SIZE, g_value_get_double(src_value)); vips_value_set_save_string(dest_value, buf); } static void transform_save_string_double(const GValue *src_value, GValue *dest_value) { g_value_set_double(dest_value, g_ascii_strtod(vips_value_get_save_string(src_value), NULL)); } static void transform_float_save_string(const GValue *src_value, GValue *dest_value) { char buf[G_ASCII_DTOSTR_BUF_SIZE]; /* Need to be locale independent. */ g_ascii_dtostr(buf, G_ASCII_DTOSTR_BUF_SIZE, g_value_get_float(src_value)); vips_value_set_save_string(dest_value, buf); } static void transform_save_string_float(const GValue *src_value, GValue *dest_value) { g_value_set_float(dest_value, g_ascii_strtod(vips_value_get_save_string(src_value), NULL)); } /* Save meta fields to the header. We have a new string type for header fields * to save to XML and define transform functions to go from our meta types to * this string type. */ G_DEFINE_BOXED_TYPE_WITH_CODE(VipsSaveString, vips_save_string, (GBoxedCopyFunc) g_strdup, (GBoxedFreeFunc) g_free, g_value_register_transform_func( G_TYPE_INT, g_define_type_id, transform_int_save_string); g_value_register_transform_func( g_define_type_id, G_TYPE_INT, transform_save_string_int); g_value_register_transform_func( G_TYPE_DOUBLE, g_define_type_id, transform_double_save_string); g_value_register_transform_func( g_define_type_id, G_TYPE_DOUBLE, transform_save_string_double); g_value_register_transform_func( G_TYPE_FLOAT, g_define_type_id, transform_float_save_string); g_value_register_transform_func( g_define_type_id, G_TYPE_FLOAT, transform_save_string_float);) /* Transform a refstring to a G_TYPE_STRING and back. */ static void transform_ref_string_g_string(const GValue *src_value, GValue *dest_value) { g_value_set_string(dest_value, vips_value_get_ref_string(src_value, NULL)); } static void transform_g_string_ref_string(const GValue *src_value, GValue *dest_value) { vips_value_set_ref_string(dest_value, g_value_get_string(src_value)); } /* To a save string. */ static void transform_ref_string_save_string(const GValue *src_value, GValue *dest_value) { vips_value_set_save_stringf(dest_value, "%s", vips_value_get_ref_string(src_value, NULL)); } static void transform_save_string_ref_string(const GValue *src_value, GValue *dest_value) { vips_value_set_ref_string(dest_value, vips_value_get_save_string(src_value)); } /** * vips_ref_string_new: * @str: (transfer none): string to store * * Create a new refstring. These are reference-counted immutable strings, used * to store string data in vips image metadata. * * Strings must be valid utf-8; use blob for binary data. * * See also: vips_area_unref(). * * Returns: (transfer full) (nullable): the new #VipsRefString, or NULL on error. */ VipsRefString * vips_ref_string_new(const char *str) { VipsArea *area; char *utf8_str = g_utf8_make_valid(str, -1); area = vips_area_new((VipsCallbackFn) vips_area_free_cb, utf8_str); /* Handy place to cache this. */ area->length = strlen(utf8_str); return (VipsRefString *) area; } /** * vips_ref_string_get: * @refstr: the #VipsRefString to fetch from * @length: (out) (optional): return length here, optionally * * Get a pointer to the private string inside a refstr. Handy for language * bindings. * * See also: vips_value_get_ref_string(). * * Returns: (transfer none): The C string held by @refstr. */ const char * vips_ref_string_get(VipsRefString *refstr, size_t *length) { VipsArea *area = VIPS_AREA(refstr); return vips_area_get_data(area, length, NULL, NULL, NULL); } G_DEFINE_BOXED_TYPE_WITH_CODE(VipsRefString, vips_ref_string, (GBoxedCopyFunc) vips_area_copy, (GBoxedFreeFunc) vips_area_unref, g_value_register_transform_func( g_define_type_id, G_TYPE_STRING, transform_ref_string_g_string); g_value_register_transform_func( G_TYPE_STRING, g_define_type_id, transform_g_string_ref_string); g_value_register_transform_func( g_define_type_id, VIPS_TYPE_SAVE_STRING, transform_ref_string_save_string); g_value_register_transform_func( VIPS_TYPE_SAVE_STRING, g_define_type_id, transform_save_string_ref_string);) /** * vips_blob_new: * @free_fn: (scope async) (allow-none): @data will be freed with this function * @data: (array length=length) (element-type guint8) (transfer full): data to store * @length: number of bytes in @data * * Like vips_area_new(), but track a length as well. The returned #VipsBlob * takes ownership of @data and will free it with @free_fn. Pass %NULL for * @free_fn to not transfer ownership. * * An area of mem with a free func and a length (some sort of binary object, * like an ICC profile). * * See also: vips_area_unref(). * * Returns: (transfer full): the new #VipsBlob. */ VipsBlob * vips_blob_new(VipsCallbackFn free_fn, const void *data, size_t length) { VipsArea *area; area = vips_area_new(free_fn, (void *) data); area->length = length; return (VipsBlob *) area; } /** * vips_blob_copy: * @data: (array length=length) (element-type guint8) (transfer none): data to store * @length: number of bytes in @data * * Like vips_blob_new(), but take a copy of the data. Useful for bindings * which struggle with callbacks. * * See also: vips_blob_new(). * * Returns: (transfer full): the new #VipsBlob. */ VipsBlob * vips_blob_copy(const void *data, size_t length) { void *data_copy; VipsArea *area; data_copy = g_malloc(length); memcpy(data_copy, data, length); area = vips_area_new((VipsCallbackFn) vips_area_free_cb, data_copy); area->length = length; return (VipsBlob *) area; } /** * vips_blob_get: * @blob: #VipsBlob to fetch from * @length: return number of bytes of data * * Get the data from a #VipsBlob. * * See also: vips_blob_new(). * * Returns: (array length=length) (element-type guint8) (transfer none): the * data */ const void * vips_blob_get(VipsBlob *blob, size_t *length) { return vips_area_get_data(VIPS_AREA(blob), length, NULL, NULL, NULL); } /** * vips_blob_set: * @blob: #VipsBlob to set * @free_fn: (scope async) (allow-none): @data will be freed with this function * @data: (array length=length) (element-type guint8) (transfer full): data to store * @length: number of bytes in @data * * Any old data is freed and new data attached. * * It's sometimes useful to be able to create blobs as empty and then fill * them later. * * See also: vips_blob_new(). */ void vips_blob_set(VipsBlob *blob, VipsCallbackFn free_fn, const void *data, size_t length) { VipsArea *area = VIPS_AREA(blob); g_mutex_lock(area->lock); vips_area_free(area); area->free_fn = free_fn; area->length = length; area->data = (void *) data; g_mutex_unlock(area->lock); } /* Transform a blob to a G_TYPE_STRING. */ static void transform_blob_g_string(const GValue *src_value, GValue *dest_value) { void *blob; size_t length; char buf[256]; blob = vips_value_get_blob(src_value, &length); vips_snprintf(buf, 256, "VIPS_TYPE_BLOB, data = %p, length = %zd", blob, length); g_value_set_string(dest_value, buf); } /* Transform a blob to a save string and back. */ static void transform_blob_save_string(const GValue *src_value, GValue *dest_value) { void *blob; size_t length; char *b64; blob = vips_value_get_blob(src_value, &length); if ((b64 = g_base64_encode(blob, length))) { vips_value_set_save_string(dest_value, b64); g_free(b64); } else /* No error return from transform, but we should set it to * something. */ vips_value_set_save_string(dest_value, ""); } static void transform_save_string_blob(const GValue *src_value, GValue *dest_value) { const char *b64; void *blob; size_t length; b64 = vips_value_get_save_string(src_value); if ((blob = g_base64_decode(b64, &length))) vips_value_set_blob(dest_value, (VipsCallbackFn) vips_area_free_cb, blob, length); else /* No error return from transform, but we should set it to * something. */ vips_value_set_blob(dest_value, NULL, NULL, 0); } G_DEFINE_BOXED_TYPE_WITH_CODE(VipsBlob, vips_blob, (GBoxedCopyFunc) vips_area_copy, (GBoxedFreeFunc) vips_area_unref, g_value_register_transform_func( g_define_type_id, G_TYPE_STRING, transform_blob_g_string); g_value_register_transform_func( g_define_type_id, VIPS_TYPE_SAVE_STRING, transform_blob_save_string); g_value_register_transform_func( VIPS_TYPE_SAVE_STRING, g_define_type_id, transform_save_string_blob);) /** * vips_array_int_new: * @array: (array length=n): array of int * @n: number of ints * * Allocate a new array of ints and copy @array into it. Free with * vips_area_unref(). * * See also: #VipsArea. * * Returns: (transfer full): A new #VipsArrayInt. */ VipsArrayInt * vips_array_int_new(const int *array, int n) { VipsArea *area; int *array_copy; area = vips_area_new_array(G_TYPE_INT, sizeof(int), n); array_copy = vips_area_get_data(area, NULL, NULL, NULL, NULL); memcpy(array_copy, array, n * sizeof(int)); return (VipsArrayInt *) area; } /** * vips_array_int_newv: * @n: number of ints * @...: list of int arguments * * Allocate a new array of @n ints and copy @... into it. Free with * vips_area_unref(). * * See also: vips_array_int_new() * * Returns: (transfer full): A new #VipsArrayInt. */ VipsArrayInt * vips_array_int_newv(int n, ...) { va_list ap; VipsArea *area; int *array; int i; area = vips_area_new_array(G_TYPE_INT, sizeof(int), n); array = vips_area_get_data(area, NULL, NULL, NULL, NULL); va_start(ap, n); for (i = 0; i < n; i++) array[i] = va_arg(ap, int); va_end(ap); return (VipsArrayInt *) area; } /** * vips_array_int_get: * @array: the #VipsArrayInt to fetch from * @n: length of array * * Fetch an int array from a #VipsArrayInt. Useful for language bindings. * * Returns: (array length=n) (transfer none): array of int */ int * vips_array_int_get(VipsArrayInt *array, int *n) { VipsArea *area = VIPS_AREA(array); g_assert(area->type == G_TYPE_INT); if (n) *n = area->n; return (int *) VIPS_ARRAY_ADDR(array, 0); } static void transform_array_int_g_string(const GValue *src_value, GValue *dest_value) { int n; int *array; char txt[1024]; VipsBuf buf = VIPS_BUF_STATIC(txt); int i; if ((array = vips_value_get_array_int(src_value, &n))) for (i = 0; i < n; i++) /* Use space as a separator since ',' may be a * decimal point in this locale. */ vips_buf_appendf(&buf, "%d ", array[i]); g_value_set_string(dest_value, vips_buf_all(&buf)); } static void transform_array_int_save_string(const GValue *src_value, GValue *dest_value) { GValue intermediate = G_VALUE_INIT; g_value_init(&intermediate, G_TYPE_STRING); transform_array_int_g_string(src_value, &intermediate); vips_value_set_save_string(dest_value, g_value_get_string(&intermediate)); g_value_unset(&intermediate); } /* It'd be great to be able to write a generic string->array function, but * it doesn't seem possible. */ static void transform_g_string_array_int(const GValue *src_value, GValue *dest_value) { char *str; int n; char *p, *q; int i; int *array; /* Walk the string to get the number of elements. * We need a copy of the string, since we insert \0 during * scan. */ str = g_value_dup_string(src_value); n = 0; for (p = str; (q = vips_break_token(p, "\t;, ")); p = q) n += 1; g_free(str); vips_value_set_array_int(dest_value, NULL, n); array = vips_value_get_array_int(dest_value, NULL); str = g_value_dup_string(src_value); i = 0; for (p = str; (q = vips_break_token(p, "\t; ")); p = q) { if (sscanf(p, "%d", &array[i]) != 1) { /* Set array to length zero to indicate an error. */ vips_error("vipstype", _("unable to convert \"%s\" to int"), p); vips_value_set_array(dest_value, 0, G_TYPE_INT, sizeof(int)); g_free(str); return; } i += 1; } g_free(str); } static void transform_save_string_array_int(const GValue *src_value, GValue *dest_value) { GValue intermediate = G_VALUE_INIT; g_value_init(&intermediate, G_TYPE_STRING); g_value_set_string(&intermediate, vips_value_get_save_string(src_value)); transform_g_string_array_int(&intermediate, dest_value); g_value_unset(&intermediate); } /* We need a arrayint, we have an int, make a one-element array. */ static void transform_int_array_int(const GValue *src_value, GValue *dest_value) { int *array; vips_value_set_array_int(dest_value, NULL, 1); array = vips_value_get_array_int(dest_value, NULL); array[0] = g_value_get_int(src_value); } static void transform_double_array_int(const GValue *src_value, GValue *dest_value) { int *array; vips_value_set_array_int(dest_value, NULL, 1); array = vips_value_get_array_int(dest_value, NULL); array[0] = g_value_get_double(src_value); } static void transform_array_double_array_int(const GValue *src_value, GValue *dest_value) { int n; double *array_double = vips_value_get_array_double(src_value, &n); int *array_int; int i; vips_value_set_array_int(dest_value, NULL, n); array_int = vips_value_get_array_int(dest_value, NULL); for (i = 0; i < n; i++) array_int[i] = array_double[i]; } G_DEFINE_BOXED_TYPE_WITH_CODE(VipsArrayInt, vips_array_int, (GBoxedCopyFunc) vips_area_copy, (GBoxedFreeFunc) vips_area_unref, g_value_register_transform_func( g_define_type_id, G_TYPE_STRING, transform_array_int_g_string); g_value_register_transform_func( G_TYPE_STRING, g_define_type_id, transform_g_string_array_int); g_value_register_transform_func( G_TYPE_INT, g_define_type_id, transform_int_array_int); g_value_register_transform_func( G_TYPE_DOUBLE, g_define_type_id, transform_double_array_int); g_value_register_transform_func( g_define_type_id, VIPS_TYPE_SAVE_STRING, transform_array_int_save_string); g_value_register_transform_func( VIPS_TYPE_SAVE_STRING, g_define_type_id, transform_save_string_array_int);) /** * vips_array_double_new: * @array: (array length=n): array of double * @n: number of doubles * * Allocate a new array of doubles and copy @array into it. Free with * vips_area_unref(). * * See also: #VipsArea. * * Returns: (transfer full): A new #VipsArrayDouble. */ VipsArrayDouble * vips_array_double_new(const double *array, int n) { VipsArea *area; double *array_copy; area = vips_area_new_array(G_TYPE_DOUBLE, sizeof(double), n); array_copy = vips_area_get_data(area, NULL, NULL, NULL, NULL); memcpy(array_copy, array, n * sizeof(double)); return (VipsArrayDouble *) area; } /** * vips_array_double_newv: * @n: number of doubles * @...: list of double arguments * * Allocate a new array of @n doubles and copy @... into it. Free with * vips_area_unref(). * * See also: vips_array_double_new() * * Returns: (transfer full): A new #VipsArrayDouble. */ VipsArrayDouble * vips_array_double_newv(int n, ...) { va_list ap; VipsArea *area; double *array; int i; area = vips_area_new_array(G_TYPE_DOUBLE, sizeof(double), n); array = vips_area_get_data(area, NULL, NULL, NULL, NULL); va_start(ap, n); for (i = 0; i < n; i++) array[i] = va_arg(ap, double); va_end(ap); return (VipsArrayDouble *) area; } /** * vips_array_double_get: * @array: the #VipsArrayDouble to fetch from * @n: length of array * * Fetch a double array from a #VipsArrayDouble. Useful for language bindings. * * Returns: (array length=n) (transfer none): array of double */ double * vips_array_double_get(VipsArrayDouble *array, int *n) { VipsArea *area = VIPS_AREA(array); g_assert(area->type == G_TYPE_DOUBLE); if (n) *n = area->n; return VIPS_ARRAY_ADDR(array, 0); } static void transform_array_double_g_string(const GValue *src_value, GValue *dest_value) { int n; double *array; char txt[1024]; VipsBuf buf = VIPS_BUF_STATIC(txt); int i; if ((array = vips_value_get_array_double(src_value, &n))) for (i = 0; i < n; i++) /* Use space as a separator since ',' may be a decimal * point in this locale. */ vips_buf_appendf(&buf, "%g ", array[i]); g_value_set_string(dest_value, vips_buf_all(&buf)); } /* It'd be great to be able to write a generic string->array function, but * it doesn't seem possible. */ static void transform_g_string_array_double(const GValue *src_value, GValue *dest_value) { char *str; int n; char *p, *q; int i; double *array; /* Walk the string to get the number of elements. * We need a copy of the string, since we insert \0 during scan. */ str = g_value_dup_string(src_value); n = 0; for (p = str; (q = vips_break_token(p, "\t;, ")); p = q) n += 1; g_free(str); vips_value_set_array_double(dest_value, NULL, n); array = vips_value_get_array_double(dest_value, NULL); str = g_value_dup_string(src_value); i = 0; for (p = str; (q = vips_break_token(p, "\t; ")); p = q) { if (vips_strtod(p, &array[i])) { /* Set array to length zero to indicate an error. */ vips_value_set_array_double(dest_value, NULL, 0); g_free(str); return; } i += 1; } g_free(str); } /* We need a arraydouble, we have a double, make a one-element array. */ static void transform_double_array_double(const GValue *src_value, GValue *dest_value) { double *array; vips_value_set_array_double(dest_value, NULL, 1); array = vips_value_get_array_double(dest_value, NULL); array[0] = g_value_get_double(src_value); } static void transform_int_array_double(const GValue *src_value, GValue *dest_value) { double *array; vips_value_set_array_double(dest_value, NULL, 1); array = vips_value_get_array_double(dest_value, NULL); array[0] = g_value_get_int(src_value); } static void transform_array_int_array_double(const GValue *src_value, GValue *dest_value) { int n; int *array_int = vips_value_get_array_int(src_value, &n); double *array_double; int i; vips_value_set_array_double(dest_value, NULL, n); array_double = vips_value_get_array_double(dest_value, NULL); for (i = 0; i < n; i++) array_double[i] = array_int[i]; } /* You can set enums from ints, but not doubles. Add a double converter too. */ static void transform_double_enum(const GValue *src_value, GValue *dest_value) { g_value_set_enum(dest_value, g_value_get_double(src_value)); } G_DEFINE_BOXED_TYPE_WITH_CODE(VipsArrayDouble, vips_array_double, (GBoxedCopyFunc) vips_area_copy, (GBoxedFreeFunc) vips_area_unref, g_value_register_transform_func( g_define_type_id, G_TYPE_STRING, transform_array_double_g_string); g_value_register_transform_func( G_TYPE_STRING, g_define_type_id, transform_g_string_array_double); g_value_register_transform_func( G_TYPE_DOUBLE, g_define_type_id, transform_double_array_double); g_value_register_transform_func( G_TYPE_INT, g_define_type_id, transform_int_array_double); g_value_register_transform_func( G_TYPE_DOUBLE, G_TYPE_ENUM, transform_double_enum);) /** * vips_array_image_new: (constructor) * @array: (array length=n): array of #VipsImage * @n: number of images * * Allocate a new array of images and copy @array into it. Free with * vips_area_unref(). * * The images will all be reffed by this function. They * will be automatically unreffed for you by * vips_area_unref(). * * Add an extra NULL element at the end, handy for eg. * vips_image_pipeline_array() etc. * * See also: #VipsArea. * * Returns: (transfer full): A new #VipsArrayImage. */ VipsArrayImage * vips_array_image_new(VipsImage **array, int n) { VipsArea *area; VipsImage **array_copy; int i; area = vips_area_new_array_object(n); area->type = VIPS_TYPE_IMAGE; array_copy = vips_area_get_data(area, NULL, NULL, NULL, NULL); for (i = 0; i < n; i++) { array_copy[i] = (VipsImage *) array[i]; g_object_ref(array_copy[i]); } return (VipsArrayImage *) area; } /** * vips_array_image_newv: (constructor) * @n: number of images * @...: list of #VipsImage arguments * * Allocate a new array of @n #VipsImage and copy @... into it. Free with * vips_area_unref(). * * The images will all be reffed by this function. They * will be automatically unreffed for you by * vips_area_unref(). * * Add an extra NULL element at the end, handy for eg. * vips_image_pipeline_array() etc. * * See also: vips_array_image_new() * * Returns: (transfer full): A new #VipsArrayImage. */ VipsArrayImage * vips_array_image_newv(int n, ...) { va_list ap; VipsArea *area; VipsImage **array; int i; area = vips_area_new_array_object(n); area->type = VIPS_TYPE_IMAGE; array = vips_area_get_data(area, NULL, NULL, NULL, NULL); va_start(ap, n); for (i = 0; i < n; i++) { array[i] = va_arg(ap, VipsImage *); g_object_ref(array[i]); } va_end(ap); return (VipsArrayImage *) area; } VipsArrayImage * vips_array_image_new_from_string(const char *string, VipsAccess access) { char *str; int n; VipsArea *area; VipsImage **array; char *p, *q; int i; /* We need a copy of the string, since we insert \0 during * scan. */ str = g_strdup(string); n = 0; for (p = str; (q = vips_break_token(p, " \n\t\r")); p = q) n += 1; g_free(str); area = vips_area_new_array_object(n); area->type = VIPS_TYPE_IMAGE; array = vips_area_get_data(area, NULL, NULL, NULL, NULL); str = g_strdup(string); i = 0; for (p = str; (q = vips_break_token(p, " \n\t\r")); p = q) { if (!(array[i] = vips_image_new_from_file(p, "access", access, NULL))) { vips_area_unref(area); g_free(str); return NULL; } i += 1; } g_free(str); return (VipsArrayImage *) area; } /** * vips_array_image_empty: (constructor) * * Make an empty image array. * Handy with vips_array_image_add() for bindings * which can't handle object array arguments. * * See also: vips_array_image_add(). * * Returns: (transfer full): A new #VipsArrayImage. */ VipsArrayImage * vips_array_image_empty(void) { return vips_array_image_new(NULL, 0); } /** * vips_array_image_append: * @array: (transfer none): append to this * @image: add this * * Make a new #VipsArrayImage, one larger than @array, with @image appended * to the end. * Handy with vips_array_image_empty() for bindings * which can't handle object array arguments. * * See also: vips_array_image_empty(). * * Returns: (transfer full): A new #VipsArrayImage. */ VipsArrayImage * vips_array_image_append(VipsArrayImage *array, VipsImage *image) { VipsArea *old_area = VIPS_AREA(array); int n = old_area->n; VipsArea *new_area; VipsImage **old_vector; VipsImage **new_vector; int i; new_area = vips_area_new_array_object(n + 1); new_area->type = VIPS_TYPE_IMAGE; old_vector = vips_area_get_data(old_area, NULL, NULL, NULL, NULL); new_vector = vips_area_get_data(new_area, NULL, NULL, NULL, NULL); for (i = 0; i < n; i++) { new_vector[i] = (VipsImage *) old_vector[i]; g_object_ref(new_vector[i]); } new_vector[i] = image; g_object_ref(new_vector[i]); return (VipsArrayImage *) new_area; } /** * vips_array_image_get: * @array: the #VipsArrayImage to fetch from * @n: length of array * * Fetch an image array from a #VipsArrayImage. Useful for language bindings. * * Returns: (array length=n) (transfer none): array of #VipsImage */ VipsImage ** vips_array_image_get(VipsArrayImage *array, int *n) { VipsArea *area = VIPS_AREA(array); g_assert(area->type == VIPS_TYPE_IMAGE); if (n) *n = area->n; return (VipsImage **) VIPS_ARRAY_ADDR(array, 0); } static void transform_g_string_array_image(const GValue *src_value, GValue *dest_value) { char *str; VipsArrayImage *array_image; str = g_value_dup_string(src_value); /* We can't get access here, just assume nothing. See the special case * in vips_object_new_from_string() for how we usually get this right. */ if (!(array_image = vips_array_image_new_from_string(str, 0))) { /* Set the dest to length zero to indicate error. */ vips_value_set_array_image(dest_value, 0); g_free(str); return; } g_free(str); g_value_set_boxed(dest_value, array_image); vips_area_unref(VIPS_AREA(array_image)); } G_DEFINE_BOXED_TYPE_WITH_CODE(VipsArrayImage, vips_array_image, (GBoxedCopyFunc) vips_area_copy, (GBoxedFreeFunc) vips_area_unref, g_value_register_transform_func( G_TYPE_STRING, g_define_type_id, transform_g_string_array_image);) /** * vips_value_set_area: * @value: set this value * @free_fn: (scope async) (nullable): data will be freed with this function * @data: (transfer full): set @value to track this pointer * * Set value to be a ref-counted area of memory with a free function. */ void vips_value_set_area(GValue *value, VipsCallbackFn free_fn, void *data) { VipsArea *area; area = vips_area_new(free_fn, data); g_value_init(value, VIPS_TYPE_AREA); g_value_set_boxed(value, area); vips_area_unref(area); } /** * vips_value_get_area: * @value: get from this value * @length: (out) (optional): optionally return length here * * Get the pointer from an area. Don't touch count (area is static). * * Returns: (transfer none): The pointer held by @value. */ void * vips_value_get_area(const GValue *value, size_t *length) { VipsArea *area; area = g_value_get_boxed(value); return vips_area_get_data(area, length, NULL, NULL, NULL); } /** * vips_value_get_save_string: * @value: GValue to get from * * Get the C string held internally by the GValue. * * Returns: (transfer none): The C string held by @value. */ const char * vips_value_get_save_string(const GValue *value) { return (char *) g_value_get_boxed(value); } /** * vips_value_set_save_string: * @value: (out): GValue to set * @str: C string to copy into the GValue * * Copies the C string into @value. * * @str should be a valid utf-8 string. */ void vips_value_set_save_string(GValue *value, const char *str) { g_assert(G_VALUE_TYPE(value) == VIPS_TYPE_SAVE_STRING); if (!g_utf8_validate(str, -1, NULL)) str = ""; g_value_set_boxed(value, str); } /** * vips_value_set_save_stringf: * @value: (out): GValue to set * @fmt: printf()-style format string * @...: arguments to printf()-formatted @fmt * * Generates a string and copies it into @value. */ void vips_value_set_save_stringf(GValue *value, const char *fmt, ...) { va_list ap; char *str; g_assert(G_VALUE_TYPE(value) == VIPS_TYPE_SAVE_STRING); va_start(ap, fmt); str = g_strdup_vprintf(fmt, ap); va_end(ap); vips_value_set_save_string(value, str); g_free(str); } /** * vips_value_get_ref_string: * @value: %GValue to get from * @length: (out) (optional): return length here, optionally * * Get the C string held internally by the %GValue. * * Returns: (transfer none): The C string held by @value. */ const char * vips_value_get_ref_string(const GValue *value, size_t *length) { return vips_value_get_area(value, length); } /** * vips_value_set_ref_string: * @value: (out): %GValue to set * @str: C string to copy into the GValue * * Copies the C string @str into @value. * * vips_ref_string are immutable C strings that are copied between images by * copying reference-counted pointers, making them much more efficient than * regular %GValue strings. * * @str should be a valid utf-8 string. */ void vips_value_set_ref_string(GValue *value, const char *str) { VipsRefString *ref_str; g_assert(G_VALUE_TYPE(value) == VIPS_TYPE_REF_STRING); ref_str = vips_ref_string_new(str); g_value_set_boxed(value, ref_str); vips_area_unref(VIPS_AREA(ref_str)); } /** * vips_value_set_blob: * @value: (out): GValue to set * @free_fn: (scope async) (nullable): free function for @data * @data: (array length=length) (element-type guint8) (transfer full): pointer to area of * memory * @length: length of memory area * * Sets @value to hold a @data. When @value is freed, @data will be * freed with @free_fn. @value also holds a note of the size of the memory * area. * * blobs are things like ICC profiles or EXIF data. They are relocatable, and * are saved to VIPS files for you coded as base64 inside the XML. They are * copied by copying reference-counted pointers. * * See also: vips_value_get_blob() */ void vips_value_set_blob(GValue *value, VipsCallbackFn free_fn, const void *data, size_t length) { VipsBlob *blob; g_assert(G_VALUE_TYPE(value) == VIPS_TYPE_BLOB); blob = vips_blob_new(free_fn, data, length); g_value_set_boxed(value, blob); vips_area_unref(VIPS_AREA(blob)); } /** * vips_value_set_blob_free: * @value: GValue to set * @data: (transfer full) (array length=length) (element-type guint8) : pointer to area of * memory * @length: length of memory area * * Just like vips_value_set_blob(), but when * @value is freed, @data will be * freed with g_free(). * * This can be easier to call for language bindings. * * See also: vips_value_set_blob() */ void vips_value_set_blob_free(GValue *value, void *data, size_t length) { VipsBlob *blob; g_assert(G_VALUE_TYPE(value) == VIPS_TYPE_BLOB); blob = vips_blob_new((VipsCallbackFn) vips_area_free_cb, data, length); g_value_set_boxed(value, blob); vips_area_unref(VIPS_AREA(blob)); } /** * vips_value_get_blob: * @value: GValue to set * @length: (out) (optional): optionally return length of memory area * * Returns the data pointer from a blob. Optionally returns the length too. * * blobs are things like ICC profiles or EXIF data. They are relocatable, and * are saved to VIPS files for you coded as base64 inside the XML. They are * copied by copying reference-counted pointers. * * See also: vips_value_set_blob() * * Returns: (transfer none) (array length=length) (element-type guint8): The pointer held * by @value. */ void * vips_value_get_blob(const GValue *value, size_t *length) { return vips_value_get_area(value, length); } /** * vips_value_set_array: * @value: (out): %GValue to set * @n: number of elements * @type: the type of each element * @sizeof_type: the sizeof each element * * Set @value to be an array of things. * * This allocates memory but does not * initialise the contents: get the pointer and write instead. */ void vips_value_set_array(GValue *value, int n, GType type, size_t sizeof_type) { VipsArea *area; area = vips_area_new_array(type, sizeof_type, n); g_value_set_boxed(value, area); vips_area_unref(area); } /** * vips_value_get_array: * @value: %GValue to get from * @n: (out) (optional): return the number of elements here, optionally * @type: (out) (optional): return the type of each element here, optionally * @sizeof_type: (out) (optional): return the sizeof each element here, optionally * * Return the pointer to the array held by @value. * Optionally return the other properties of the array in @n, @type, * @sizeof_type. * * See also: vips_value_set_array(). * * Returns: (transfer none): The array address. */ void * vips_value_get_array(const GValue *value, int *n, GType *type, size_t *sizeof_type) { VipsArea *area; /* Can't check value type, because we may get called from * vips_*_get_type(). */ if (!(area = g_value_get_boxed(value))) return NULL; if (n) *n = area->n; if (type) *type = area->type; if (sizeof_type) *sizeof_type = area->sizeof_type; return area->data; } /** * vips_value_get_array_int: * @value: %GValue to get from * @n: (out) (optional): return the number of elements here, optionally * * Return the start of the array of ints held by @value. * optionally return the number of elements in @n. * * See also: vips_array_int_new(). * * Returns: (transfer none) (array length=n): The array address. */ int * vips_value_get_array_int(const GValue *value, int *n) { return vips_value_get_array(value, n, NULL, NULL); } /** * vips_value_set_array_int: * @value: %GValue to get from * @array: (array length=n) (allow-none): array of ints * @n: the number of elements * * Set @value to hold a copy of @array. Pass in the array length in @n. * * See also: vips_array_int_get(). */ void vips_value_set_array_int(GValue *value, const int *array, int n) { vips_value_set_array(value, n, G_TYPE_INT, sizeof(int)); if (array) { int *array_copy; array_copy = vips_value_get_array_int(value, NULL); memcpy(array_copy, array, n * sizeof(int)); } } /** * vips_value_get_array_double: * @value: %GValue to get from * @n: (out) (optional): return the number of elements here, optionally * * Return the start of the array of doubles held by @value. * optionally return the number of elements in @n. * * See also: vips_array_double_new(). * * Returns: (transfer none) (array length=n): The array address. */ double * vips_value_get_array_double(const GValue *value, int *n) { return vips_value_get_array(value, n, NULL, NULL); } /** * vips_value_set_array_double: * @value: %GValue to get from * @array: (array length=n) (allow-none): array of doubles * @n: the number of elements * * Set @value to hold a copy of @array. Pass in the array length in @n. * * See also: vips_array_double_get(). */ void vips_value_set_array_double(GValue *value, const double *array, int n) { vips_value_set_array(value, n, G_TYPE_DOUBLE, sizeof(double)); if (array) { double *array_copy; array_copy = vips_value_get_array_double(value, NULL); memcpy(array_copy, array, n * sizeof(double)); } } /** * vips_value_get_array_image: * @value: %GValue to get from * @n: (out) (optional): return the number of elements here, optionally * * Return the start of the array of images held by @value. * optionally return the number of elements in @n. * * See also: vips_value_set_array_image(). * * Returns: (transfer none) (array length=n): The array address. */ VipsImage ** vips_value_get_array_image(const GValue *value, int *n) { return vips_value_get_array(value, n, NULL, NULL); } /** * vips_value_set_array_image: * @value: %GValue to get from * @n: the number of elements * * Set @value to hold an array of images. Pass in the array length in @n. * * See also: vips_array_image_get(). */ void vips_value_set_array_image(GValue *value, int n) { VipsArea *area; area = vips_area_new_array_object(n); area->type = VIPS_TYPE_IMAGE; g_value_set_boxed(value, area); vips_area_unref(area); } /** * vips_value_get_array_object: (skip) * @value: %GValue to get from * @n: (out) (optional): return the number of elements here, optionally * * Return the start of the array of %GObject held by @value. * Optionally return the number of elements in @n. * * See also: vips_area_new_array_object(). * * Returns: (transfer none) (array length=n): The array address. */ GObject ** vips_value_get_array_object(const GValue *value, int *n) { return vips_value_get_array(value, n, NULL, NULL); } /** * vips_value_set_array_object: * @value: (out): %GValue to set * @n: the number of elements * * Set @value to hold an array of %GObject. Pass in the array length in @n. * * See also: vips_value_get_array_object(). */ void vips_value_set_array_object(GValue *value, int n) { VipsArea *area; area = vips_area_new_array_object(n); g_value_set_boxed(value, area); vips_area_unref(area); } /* Make the types we need for basic functioning. Called from vips_init(). */ void vips__meta_init_types(void) { (void) vips_thing_get_type(); (void) vips_save_string_get_type(); (void) vips_area_get_type(); (void) vips_ref_string_get_type(); (void) vips_blob_get_type(); (void) vips_array_int_get_type(); (void) vips_array_double_get_type(); (void) vips_array_image_get_type(); /* Register transform functions to convert between an array of * integers and doubles. This is set here to prevent a recursive * call chain. */ g_value_register_transform_func(VIPS_TYPE_ARRAY_INT, VIPS_TYPE_ARRAY_DOUBLE, transform_array_int_array_double); g_value_register_transform_func(VIPS_TYPE_ARRAY_DOUBLE, VIPS_TYPE_ARRAY_INT, transform_array_double_array_int); } libvips-8.15.1/libvips/iofuncs/util.c000066400000000000000000001173231454007373500175340ustar00rootroot00000000000000/* Some basic util functions. */ /* Copyright (C) 1991-2003 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #ifdef HAVE_IO_H #include #endif /*HAVE_IO_H*/ #include #include #ifdef G_OS_WIN32 #include #endif /*G_OS_WIN32*/ #include #include /* Temp buffer for snprintf() layer on old systems. */ #define MAX_BUF (100000) #define MODE_READ CLOEXEC(BINARYIZE(O_RDONLY)) /* Test two lists for eqality. */ gboolean vips_slist_equal(GSList *l1, GSList *l2) { while (l1 && l2) { if (l1->data != l2->data) return FALSE; l1 = l1->next; l2 = l2->next; } if (l1 || l2) return FALSE; return TRUE; } /* Map over an slist. _copy() the list in case the callback changes it. */ void * vips_slist_map2(GSList *list, VipsSListMap2Fn fn, void *a, void *b) { GSList *copy; GSList *i; void *result; copy = g_slist_copy(list); result = NULL; for (i = copy; i && !(result = fn(i->data, a, b)); i = i->next) ; g_slist_free(copy); return result; } /* Map backwards. We _reverse() rather than recurse and unwind to save stack. */ void * vips_slist_map2_rev(GSList *list, VipsSListMap2Fn fn, void *a, void *b) { GSList *copy; GSList *i; void *result; copy = g_slist_copy(list); copy = g_slist_reverse(copy); result = NULL; for (i = copy; i && !(result = fn(i->data, a, b)); i = i->next) ; g_slist_free(copy); return result; } void * vips_slist_map4(GSList *list, VipsSListMap4Fn fn, void *a, void *b, void *c, void *d) { GSList *copy; GSList *i; void *result; copy = g_slist_copy(list); result = NULL; for (i = copy; i && !(result = fn(i->data, a, b, c, d)); i = i->next) ; g_slist_free(copy); return result; } void * vips_slist_fold2(GSList *list, void *start, VipsSListFold2Fn fn, void *a, void *b) { void *c; GSList *this, *next; for (c = start, this = list; this; this = next) { next = this->next; if (!(c = fn(this->data, c, a, b))) return NULL; } return c; } /* Remove all occurrences of an item from a list. */ GSList * vips_slist_filter(GSList *list, VipsSListMap2Fn fn, void *a, void *b) { GSList *tmp; GSList *prev; prev = NULL; tmp = list; while (tmp) { if (fn(tmp->data, a, b)) { GSList *next = tmp->next; if (prev) prev->next = next; if (list == tmp) list = next; tmp->next = NULL; g_slist_free(tmp); tmp = next; } else { prev = tmp; tmp = tmp->next; } } return list; } static void vips_slist_free_all_cb(void *thing, void *dummy) { g_free(thing); } /* Free a g_slist of things which need g_free()ing. */ void vips_slist_free_all(GSList *list) { g_slist_foreach(list, vips_slist_free_all_cb, NULL); g_slist_free(list); } void * vips_map_equal(void *a, void *b) { if (a == b) return a; return NULL; } typedef struct { void *a; void *b; VipsSListMap2Fn fn; void *result; } Pair; static gboolean vips_hash_table_predicate(const char *key, void *value, Pair *pair) { return (pair->result = pair->fn(value, pair->a, pair->b)) != NULL; } /* Like slist map, but for a hash table. */ void * vips_hash_table_map(GHashTable *hash, VipsSListMap2Fn fn, void *a, void *b) { Pair pair; pair.a = a; pair.b = b; pair.fn = fn; pair.result = NULL; g_hash_table_find(hash, (GHRFunc) vips_hash_table_predicate, &pair); return pair.result; } /* Like strncpy(), but always NULL-terminate, and don't pad with NULLs. * If @n is 100 and @src is more than 99 characters, 99 are copied and the * final byte of @dest is set to '\0'. */ char * vips_strncpy(char *dest, const char *src, int n) { int i; g_assert(n > 0); for (i = 0; i < n - 1; i++) if (!(dest[i] = src[i])) break; dest[i] = '\0'; return dest; } /* Find the rightmost occurrence of needle in haystack. */ char * vips_strrstr(const char *haystack, const char *needle) { int haystack_len = strlen(haystack); int needle_len = strlen(needle); int i; for (i = haystack_len - needle_len; i >= 0; i--) if (strncmp(needle, haystack + i, needle_len) == 0) return (char *) haystack + i; return NULL; } /* Test for string b ends string a. */ gboolean vips_ispostfix(const char *a, const char *b) { int m = strlen(a); int n = strlen(b); if (n > m) return FALSE; return strcmp(a + m - n, b) == 0; } /* Case-insensitive test for string b ends string a. ASCII strings only. */ gboolean vips_iscasepostfix(const char *a, const char *b) { int m = strlen(a); int n = strlen(b); if (n > m) return FALSE; return g_ascii_strcasecmp(a + m - n, b) == 0; } /* Test for string a starts string b. a is a known-good string, b may be * random data. */ gboolean vips_isprefix(const char *a, const char *b) { int i; for (i = 0; a[i] && b[i]; i++) if (a[i] != b[i]) return FALSE; /* If there's stuff left in a but b has finished, we must have a * mismatch. */ if (a[i] && !b[i]) return FALSE; return TRUE; } /* Exactly like strcspn(), but allow \ as an escape character. * * strspne("hello world", " ") == 5 * strspne("hello\\ world", " ") == 12 */ static size_t strcspne(const char *s, const char *reject) { size_t skip; /* If \ is one of the reject chars, no need for any looping. */ if (strchr(reject, '\\')) return strcspn(s, reject); skip = 0; for (;;) { skip += strcspn(s + skip, reject); /* s[skip] is at the start of the string, or the end, or on a * break character. */ if (skip == 0 || !s[skip] || s[skip - 1] != '\\') break; /* So skip points at break char and we have a '\' in the char * before. Step over the break. */ skip += 1; } return skip; } /* Like strtok(). Give a string and a list of break characters. Then: * - skip initial break characters * - EOS? return NULL * - skip a series of non-break characters, allow `\` as a break escape * - write a '\0' over the next break character and return a pointer to the * char after that * * The idea is that this can be used in loops as the iterator. Example: * * char *p = " 1 2 3 "; // mutable * char *q; * int i; * int v[...]; * * for(i = 0; (q = vips_break_token(p, " ")); i++, p = q) * v[i] = atoi(p); * * will set * v[0] = 1; * v[1] = 2; * v[2] = 3; * * or with just one pointer, provided your atoi() is OK with trailing chars * and you know there is at least one item there * * char *p = " 1 2 3 "; // mutable * int i; * int v[...]; * * for(i = 0; p; p = vips_break_token(p, " ")) * v[i] = atoi(p); * * You can use \ to escape breaks, for example: * * vips_break_token("hello\ world", " ") will see a single token containing * a space. The \ characters are squashed out. */ char * vips_break_token(char *str, const char *brk) { char *p; char *q; /* Is the string empty? If yes, return NULL immediately. */ if (!str || !*str) return NULL; /* Skip initial break characters. */ p = str + strspn(str, brk); /* No item? */ if (!*p) return NULL; /* We have a token ... search for the first break character after the * token. strcspne() allows '\' to escape breaks, see above. */ p += strcspne(p, brk); /* Is there string left? */ if (*p) { /* Write in an end-of-string mark and return the start of the * next token. */ *p++ = '\0'; p += strspn(p, brk); } /* There may be escaped break characters in str. Loop, squashing them * out. */ for (q = strchr(str, '\\'); q && *q; q = strchr(q, '\\')) { memmove(q, q + 1, strlen(q)); /* If there's \\, we don't want to squash out the second \. */ q += 1; } return p; } /* Wrapper over (v)snprintf() ... missing on old systems. */ int vips_vsnprintf(char *str, size_t size, const char *format, va_list ap) { #ifdef HAVE_VSNPRINTF return vsnprintf(str, size, format, ap); #else /*HAVE_VSNPRINTF*/ /* Bleurg! */ int n; static char buf[MAX_BUF]; /* We can't return an error code, we may already have trashed the * stack. We must stop immediately. */ if (size > MAX_BUF) vips_error_exit("panic: buffer overflow " "(request to write %lu bytes to buffer of %d bytes)", (unsigned long) size, MAX_BUF); n = vsprintf(buf, format, ap); if (n > MAX_BUF) vips_error_exit("panic: buffer overflow " "(%d bytes written to buffer of %d bytes)", n, MAX_BUF); vips_strncpy(str, buf, size); return n; #endif /*HAVE_VSNPRINTF*/ } int vips_snprintf(char *str, size_t size, const char *format, ...) { va_list ap; int n; va_start(ap, format); n = vips_vsnprintf(str, size, format, ap); va_end(ap); return n; } /* Does a filename have one of a set of suffixes. Ignore case and any trailing * options. */ int vips_filename_suffix_match(const char *path, const char *suffixes[]) { char *basename; char *q; int result; const char **p; /* Drop any directory components. */ basename = g_path_get_basename(path); /* Zap any trailing [] options. */ if ((q = (char *) vips__find_rightmost_brackets(basename))) *q = '\0'; result = 0; for (p = suffixes; *p; p++) if (vips_iscasepostfix(basename, *p)) { result = 1; break; } g_free(basename); return result; } /* Get file length ... 64-bitally. -1 for error. */ gint64 vips_file_length(int fd) { #ifdef G_OS_WIN32 struct _stati64 st; if (_fstati64(fd, &st) == -1) { #else /*!G_OS_WIN32*/ struct stat st; if (fstat(fd, &st) == -1) { #endif /*G_OS_WIN32*/ vips_error_system(errno, "vips_file_length", "%s", _("unable to get file stats")); return -1; } return st.st_size; } /* Wrap write() up */ int vips__write(int fd, const void *buf, size_t count) { do { size_t nwritten = write(fd, buf, count); if (nwritten == (size_t) -1) { vips_error_system(errno, "vips__write", "%s", _("write failed")); return -1; } buf = (void *) ((char *) buf + nwritten); count -= nwritten; } while (count > 0); return 0; } #ifdef G_OS_WIN32 /* Set the create date on a file. On Windows, the create date may be copied * over from an existing file of the same name, unless you reset it. * * See https://blogs.msdn.microsoft.com/oldnewthing/20050715-14/?p=34923 */ void vips__set_create_time(int fd) { HANDLE handle; SYSTEMTIME st; FILETIME ft; /* Create time cannot be set on invalid or stream * (stdin, stdout, stderr) file descriptors. */ if (fd < 3) return; if ((handle = (HANDLE) _get_osfhandle(fd)) == INVALID_HANDLE_VALUE) return; GetSystemTime(&st); SystemTimeToFileTime(&st, &ft); SetFileTime(handle, &ft, &ft, &ft); } #endif /*G_OS_WIN32*/ /* open() with a utf8 filename, setting errno. */ int vips__open(const char *filename, int flags, int mode) { int fd; /* Various bad things happen if you accidentally open a directory as a * file. */ if (g_file_test(filename, G_FILE_TEST_IS_DIR)) { errno = EISDIR; return -1; } fd = g_open(filename, flags, mode); #ifdef G_OS_WIN32 if (fd != -1 && (mode & O_CREAT)) vips__set_create_time(fd); #endif /*G_OS_WIN32*/ return fd; } int vips__open_read(const char *filename) { return vips__open(filename, MODE_READ, 0); } /* fopen() with utf8 filename and mode, setting errno. */ FILE * vips__fopen(const char *filename, const char *mode) { FILE *fp; fp = g_fopen(filename, mode); #ifdef G_OS_WIN32 if (fp && mode[0] == 'w') vips__set_create_time(_fileno(fp)); #endif /*G_OS_WIN32*/ return fp; } /* Does a filename contain a directory separator? */ static gboolean filename_hasdir(const char *filename) { char *dirname; gboolean hasdir; dirname = g_path_get_dirname(filename); hasdir = (strcmp(dirname, ".") != 0); g_free(dirname); return hasdir; } /* Open a file. We take an optional fallback dir as well and will try opening * there if opening directly fails. * * This is used for things like finding ICC profiles. We try to open the file * directly first, and if that fails and the filename does not contain a * directory separator, we try looking in the fallback dir. */ FILE * vips__file_open_read(const char *filename, const char *fallback_dir, gboolean text_mode) { char *mode; FILE *fp; #if defined(G_PLATFORM_WIN32) || defined(G_WITH_CYGWIN) if (text_mode) mode = "rN"; else mode = "rbN"; #else /*!defined(G_PLATFORM_WIN32) && !defined(G_WITH_CYGWIN)*/ mode = "re"; #endif /*defined(G_PLATFORM_WIN32) || defined(G_WITH_CYGWIN)*/ if ((fp = vips__fopen(filename, mode))) return fp; if (fallback_dir && !filename_hasdir(filename)) { char *path; path = g_build_filename(fallback_dir, filename, NULL); fp = vips__fopen(path, mode); g_free(path); if (fp) return fp; } vips_error_system(errno, "vips__file_open_read", _("unable to open file \"%s\" for reading"), filename); return NULL; } FILE * vips__file_open_write(const char *filename, gboolean text_mode) { char *mode; FILE *fp; #if defined(G_PLATFORM_WIN32) || defined(G_WITH_CYGWIN) if (text_mode) mode = "wN"; else mode = "wbN"; #else /*!defined(G_PLATFORM_WIN32) && !defined(G_WITH_CYGWIN)*/ mode = "we"; #endif /*defined(G_PLATFORM_WIN32) || defined(G_WITH_CYGWIN)*/ if (!(fp = vips__fopen(filename, mode))) { vips_error_system(errno, "vips__file_open_write", _("unable to open file \"%s\" for writing"), filename); return NULL; } return fp; } /* Load up a file as a string. */ char * vips__file_read(FILE *fp, const char *filename, size_t *length_out) { gint64 len; size_t read; char *str; len = vips_file_length(fileno(fp)); if (len > 1024 * 1024 * 1024) { /* Over a gb? Seems crazy! */ vips_error("vips__file_read", _("\"%s\" too long"), filename); return NULL; } if (len == -1) { int size; /* Can't get length: read in chunks and realloc() to end of * file. */ str = NULL; len = 0; size = 0; do { char *str2; /* Again, a 1gb sanity limit. */ size += 1024; if (size > 1024 * 1024 * 1024 || !(str2 = realloc(str, size))) { free(str); vips_error("vips__file_read", "%s", _("out of memory")); return NULL; } str = str2; /* -1 to allow space for an extra NULL we add later. */ read = fread(str + len, sizeof(char), (size - len - 1) / sizeof(char), fp); len += read; } while (!feof(fp)); #ifdef DEBUG printf("read %ld bytes from unseekable stream\n", len); #endif /*DEBUG*/ } else { /* Allocate memory and fill. */ if (!(str = vips_malloc(NULL, len + 1))) return NULL; rewind(fp); read = fread(str, sizeof(char), (size_t) len, fp); if (read != (size_t) len) { g_free(str); vips_error("vips__file_read", _("error reading from file \"%s\""), filename); return NULL; } } str[len] = '\0'; if (length_out) *length_out = len; return str; } /* Load from a filename as a string. Used for things like reading in ICC * profiles, ie. binary objects. */ char * vips__file_read_name(const char *filename, const char *fallback_dir, size_t *length_out) { FILE *fp; char *buffer; if (!(fp = vips__file_open_read(filename, fallback_dir, FALSE))) return NULL; if (!(buffer = vips__file_read(fp, filename, length_out))) { fclose(fp); return NULL; } fclose(fp); return buffer; } /* Like fwrite(), but returns non-zero on error and sets error message. */ int vips__file_write(void *data, size_t size, size_t nmemb, FILE *stream) { size_t n; if (!data) return 0; if ((n = fwrite(data, size, nmemb, stream)) != nmemb) { vips_error_system(errno, "vips__file_write", _("write error (%zd out of %zd blocks written)"), n, nmemb); return -1; } return 0; } /* Read a few bytes from the start of a file. This is used for sniffing file * types, so we must read binary. * * Return the number of bytes actually read (the file might be shorter than * len), or -1 for error. */ gint64 vips__get_bytes(const char *filename, unsigned char buf[], gint64 len) { int fd; gint64 bytes_read; /* File may not even exist (for tmp images for example!) * so no hasty messages. And the file might be truncated, so no error * on read either. */ if ((fd = vips__open_read(filename)) == -1) return 0; bytes_read = read(fd, buf, len); close(fd); return bytes_read; } /* We try to support stupid DOS files too. These have \r\n (13, 10) as line * separators. Strategy: an fgetc() that swaps \r\n for \n. * * On Windows, stdio will automatically swap \r\n for \n, but on Linux we have * to do this by hand. */ int vips__fgetc(FILE *fp) { int ch; ch = fgetc(fp); if (ch == '\r') { ch = fgetc(fp); if (ch != '\n') { ungetc(ch, fp); ch = '\r'; } } return ch; } /* Alloc/free a GValue. */ static GValue * vips__gvalue_new(GType type) { GValue *value; value = g_new0(GValue, 1); g_value_init(value, type); return value; } static GValue * vips__gvalue_copy(GValue *value) { GValue *value_copy; value_copy = vips__gvalue_new(G_VALUE_TYPE(value)); g_value_copy(value, value_copy); return value_copy; } static void vips__gvalue_free(GValue *value, void *user_data) { g_value_unset(value); g_free(value); } GValue * vips__gvalue_ref_string_new(const char *text) { GValue *value; value = vips__gvalue_new(VIPS_TYPE_REF_STRING); vips_value_set_ref_string(value, text); return value; } /* Free a GSList of GValue. */ void vips__gslist_gvalue_free(GSList *list) { g_slist_foreach(list, (GFunc) vips__gvalue_free, NULL); g_slist_free(list); } /* Copy a GSList of GValue. */ GSList * vips__gslist_gvalue_copy(const GSList *list) { GSList *copy; const GSList *p; copy = NULL; for (p = list; p; p = p->next) copy = g_slist_prepend(copy, vips__gvalue_copy((GValue *) p->data)); copy = g_slist_reverse(copy); return copy; } /* Merge two GSList of GValue ... append to a all elements in b which are not * in a. Return the new value of a. Works for any vips refcounted type * (string, blob, etc.). */ GSList * vips__gslist_gvalue_merge(GSList *a, const GSList *b) { const GSList *i, *j; GSList *tail; tail = NULL; for (i = b; i; i = i->next) { GValue *value = (GValue *) i->data; g_assert(G_VALUE_TYPE(value) == VIPS_TYPE_REF_STRING); for (j = a; j; j = j->next) { GValue *value2 = (GValue *) j->data; g_assert(G_VALUE_TYPE(value2) == VIPS_TYPE_REF_STRING); /* Just do a pointer compare ... good enough 99.9% of * the time. */ if (vips_value_get_ref_string(value, NULL) == vips_value_get_ref_string(value2, NULL)) break; } if (!j) tail = g_slist_prepend(tail, vips__gvalue_copy(value)); } a = g_slist_concat(a, g_slist_reverse(tail)); return a; } /* Make a char * from GSList of GValue. Each GValue should be a ref_string. * free the result. Empty list -> "", not NULL. Join strings with '\n'. */ char * vips__gslist_gvalue_get(const GSList *list) { const GSList *p; size_t length; char *all; char *q; /* Need to estimate length first. */ length = 0; for (p = list; p; p = p->next) { GValue *value = (GValue *) p->data; size_t l2; g_assert(G_VALUE_TYPE(value) == VIPS_TYPE_REF_STRING); /* +1 for the newline we will add for each item. */ (void) vips_value_get_ref_string(value, &l2); length += l2 + 1; } if (length == 0) return NULL; /* More than 10MB of history? Madness! */ g_assert(length < 10 * 1024 * 1024); /* +1 for '\0'. */ if (!(all = vips_malloc(NULL, length + 1))) return NULL; q = all; for (p = list; p; p = p->next) { GValue *value = (GValue *) p->data; size_t l2; strcpy(q, vips_value_get_ref_string(value, &l2)); q += l2; strcpy(q, "\n"); q += 1; } g_assert((size_t) (q - all) == length); return all; } gint64 vips__seek_no_error(int fd, gint64 pos, int whence) { gint64 new_pos; #ifdef G_OS_WIN32 new_pos = _lseeki64(fd, pos, whence); #else /*!G_OS_WIN32*/ /* On error, eg. opening a directory and seeking to the end, lseek() * on linux seems to return 9223372036854775807 ((1 << 63) - 1) * rather than (off_t) -1 for reasons I don't understand. */ new_pos = lseek(fd, pos, whence); #endif /*G_OS_WIN32*/ return new_pos; } /* Need our own seek(), since lseek() on win32 can't do long files. */ gint64 vips__seek(int fd, gint64 pos, int whence) { gint64 new_pos; if ((new_pos = vips__seek_no_error(fd, pos, whence)) == -1) { vips_error_system(errno, "vips__seek", "%s", _("unable to seek")); return -1; } return new_pos; } /* Need our own ftruncate(), since ftruncate() on win32 can't do long files. DANGER ... this moves the file pointer to the end of file on win32, but not on *nix; don't make any assumptions about the file pointer position after calling this */ int vips__ftruncate(int fd, gint64 pos) { #ifdef G_OS_WIN32 { HANDLE hFile = (HANDLE) _get_osfhandle(fd); if (vips__seek(fd, pos, SEEK_SET) == -1) return -1; if (!SetEndOfFile(hFile)) { vips_error_system(GetLastError(), "vips__ftruncate", "%s", _("unable to truncate")); return -1; } } #else /*!G_OS_WIN32*/ if (ftruncate(fd, pos)) { vips_error_system(errno, "vips__ftruncate", "%s", _("unable to truncate")); return -1; } #endif /*G_OS_WIN32*/ return 0; } /* TRUE if file exists. True for directories as well. */ gboolean vips_existsf(const char *name, ...) { va_list ap; char *path; gboolean result; va_start(ap, name); path = g_strdup_vprintf(name, ap); va_end(ap); result = g_file_test(path, G_FILE_TEST_EXISTS); g_free(path); return result; } /* TRUE if file exists and is a directory. */ gboolean vips_isdirf(const char *name, ...) { va_list ap; char *path; gboolean result; va_start(ap, name); path = g_strdup_vprintf(name, ap); va_end(ap); result = g_file_test(path, G_FILE_TEST_IS_DIR); g_free(path); return result; } /* Make a directory. */ int vips_mkdirf(const char *name, ...) { va_list ap; char *path; va_start(ap, name); path = g_strdup_vprintf(name, ap); va_end(ap); if (g_mkdir(path, 0755)) { vips_error("mkdirf", _("unable to create directory \"%s\", %s"), path, strerror(errno)); g_free(path); return -1; } g_free(path); return 0; } /* Remove a directory. */ int vips_rmdirf(const char *name, ...) { va_list ap; char *path; va_start(ap, name); path = g_strdup_vprintf(name, ap); va_end(ap); if (g_rmdir(path)) { vips_error("rmdir", _("unable to remove directory \"%s\", %s"), path, strerror(errno)); g_free(path); return -1; } g_free(path); return 0; } /* Rename a file. */ int vips_rename(const char *old_name, const char *new_name) { if (g_rename(old_name, new_name)) { vips_error("rename", _("unable to rename file \"%s\" as \"%s\", %s"), old_name, new_name, strerror(errno)); return -1; } return 0; } /* Chop off any trailing whitespace. */ void vips__chomp(char *str) { char *p; for (p = str + strlen(str); p > str && isspace(p[-1]); p--) p[-1] = '\0'; } /* Break a command-line argument into tokens separated by whitespace. * * Strings can't be adjacent, so "hello world" (without quotes) is a single * string. Strings are written (with \" escaped) into @string. If the string * is larger than @size, it is silently null-terminated and truncated. * * Return NULL for end of tokens. */ const char * vips__token_get(const char *p, VipsToken *token, char *string, int size) { const char *q; int ch; int n; int i; /* Parse this token with p. */ if (!p) return NULL; /* Skip initial whitespace. */ p += strspn(p, " \t\n\r"); if (!p[0]) return NULL; switch ((ch = p[0])) { case '[': *token = VIPS_TOKEN_LEFT; p += 1; break; case ']': *token = VIPS_TOKEN_RIGHT; p += 1; break; case '=': *token = VIPS_TOKEN_EQUALS; p += 1; break; case ',': *token = VIPS_TOKEN_COMMA; p += 1; break; case '"': case '\'': /* Parse a quoted string. Copy up to ", interpret any \", * error if no closing ". */ *token = VIPS_TOKEN_STRING; do { /* Number of characters until the next quote * character or end of string. */ if ((q = strchr(p + 1, ch))) n = q - p + 1; else n = strlen(p + 1); /* How much can we copy to the buffer? */ i = VIPS_MIN(n, size); vips_strncpy(string, p + 1, i); /* We might have stopped at an escaped quote. If the * string was not truncated, swap the preceding * backslash for a quote. */ if (p[n + 1] == ch && p[n] == '\\' && i == n) string[i - 1] = ch; string += i; size -= i; p += n + 1; } while (p[0] && p[-1] == '\\'); p += 1; break; default: /* It's an unquoted string: read up to the next non-string * character. We don't allow two strings next to each other, * so the next break must be brackets, equals, comma. */ *token = VIPS_TOKEN_STRING; q = p + strcspn(p, "[]=,"); i = VIPS_MIN(q - p, size); vips_strncpy(string, p, i + 1); p = q; /* We remove leading whitespace, so we trim trailing * whitespace from unquoted strings too. Only if the string * hasn't been truncated. */ if (i != size) while (i > 0 && isspace(string[i - 1])) { string[i - 1] = '\0'; i--; } break; } return p; } /* We expect a token. */ const char * vips__token_must(const char *p, VipsToken *token, char *string, int size) { if (!(p = vips__token_get(p, token, string, size))) { vips_error("get_token", "%s", _("unexpected end of string")); return NULL; } return p; } /* We expect a certain token. */ const char * vips__token_need(const char *p, VipsToken need_token, char *string, int size) { VipsToken token; if (!(p = vips__token_must(p, &token, string, size))) return NULL; if (token != need_token) { vips_error("get_token", _("expected %s, saw %s"), vips_enum_nick(VIPS_TYPE_TOKEN, need_token), vips_enum_nick(VIPS_TYPE_TOKEN, token)); return NULL; } return p; } /* Fetch a token. If it's a string token terminated by a '[', fetch up to the * matching ']' as well, for example ".jpg[Q=90]". * * Return NULL for end of tokens. */ const char * vips__token_segment(const char *p, VipsToken *token, char *string, int size) { const char *q; if (!(q = vips__token_must(p, token, string, size))) return NULL; /* If we stopped on [, read up to the matching ]. */ if (*token == VIPS_TOKEN_STRING && q[0] == '[') { VipsToken sub_token; char sub_string[VIPS_PATH_MAX]; int depth; int i; depth = 0; do { if (!(q = vips__token_must(q, &sub_token, sub_string, VIPS_PATH_MAX))) return NULL; switch (sub_token) { case VIPS_TOKEN_LEFT: depth += 1; break; case VIPS_TOKEN_RIGHT: depth -= 1; break; default: break; } } while (!(sub_token == VIPS_TOKEN_RIGHT && depth == 0)); i = VIPS_MIN(q - p, size); vips_strncpy(string, p, i + 1); } return q; } /* We expect a certain segment. */ const char * vips__token_segment_need(const char *p, VipsToken need_token, char *string, int size) { VipsToken token; if (!(p = vips__token_segment(p, &token, string, size))) return NULL; if (token != need_token) { vips_error("get_token", _("expected %s, saw %s"), vips_enum_nick(VIPS_TYPE_TOKEN, need_token), vips_enum_nick(VIPS_TYPE_TOKEN, token)); return NULL; } return p; } /* Maximum number of tokens we allow in a filename. Surely this will be * plenty. */ #define MAX_TOKENS (1000) /* Find the start of the right-most pair of brackets in the string. * * A string can be of the form: * * "hello world! (no really).tif[fred=12]" * * we need to be able to find the fred=12 at the end. * * We lex the whole string noting the position of each token, then, if the * final token is a right-bracket, search left for the matching left-bracket. * * This can get confused if the lefts are hidden inside another token :-( But * a fixing that would require us to write a separate right-to-left lexer, * argh. */ const char * vips__find_rightmost_brackets(const char *p) { const char *start[MAX_TOKENS + 1]; VipsToken tokens[MAX_TOKENS]; char str[VIPS_PATH_MAX]; int n, i; int nest; start[0] = p; for (n = 0; n < MAX_TOKENS && (p = vips__token_get(start[n], &tokens[n], str, VIPS_PATH_MAX)); n++, start[n] = p) ; /* Too many tokens? */ if (n >= MAX_TOKENS) return NULL; /* No rightmost close bracket? */ if (n == 0 || tokens[n - 1] != VIPS_TOKEN_RIGHT) return NULL; nest = 0; for (i = n - 1; i >= 0; i--) { if (tokens[i] == VIPS_TOKEN_RIGHT) nest += 1; else if (tokens[i] == VIPS_TOKEN_LEFT) nest -= 1; if (nest == 0) break; } /* No matching left bracket? */ if (nest != 0) return NULL; /* This should be the matching left. */ return start[i]; } /* Split a vips8-style filename + options. * * filename and option_string must be VIPS_PATH_MAX in length. */ void vips__filename_split8(const char *name, char *filename, char *option_string) { char *p; vips_strncpy(filename, name, VIPS_PATH_MAX); if ((p = (char *) vips__find_rightmost_brackets(filename))) { vips_strncpy(option_string, p, VIPS_PATH_MAX); *p = '\0'; } else vips_strncpy(option_string, "", VIPS_PATH_MAX); } /* True if an int is a power of two ... 1, 2, 4, 8, 16, 32, etc. Do with just * integer arithmetic for portability. A previous Nicos version using doubles * and log/log failed on x86 with rounding problems. Return 0 for not * power of two, otherwise return the position of the set bit (numbering with * bit 1 as the lsb). */ int vips_ispoweroftwo(int p) { int i, n; /* Count set bits. Could use a LUT, I guess. */ for (i = 0, n = 0; p; i++, p >>= 1) if (p & 1) n++; /* Should be just one set bit. */ if (n == 1) /* Return position of bit. */ return i; else return 0; } /* Test this processor for endianness. True for SPARC order. */ int vips_amiMSBfirst(void) { #if G_BYTE_ORDER == G_BIG_ENDIAN return 1; #elif G_BYTE_ORDER == G_LITTLE_ENDIAN return 0; #else #error "Byte order not recognised" #endif } /* Return the tmp dir. On Windows, GetTempPath() will also check the values of * TMP, TEMP and USERPROFILE. */ static const char * vips__temp_dir(void) { const char *tmpd; if (!(tmpd = g_getenv("TMPDIR"))) { #ifdef G_OS_WIN32 static gboolean done = FALSE; static char buf[256]; if (!done) { if (!GetTempPath(256, buf)) strcpy(buf, "C:\\temp"); } tmpd = buf; #else /*!G_OS_WIN32*/ tmpd = "/tmp"; #endif /*!G_OS_WIN32*/ } return tmpd; } /* Make a temporary file name. The format parameter is something like "%s.jpg" * and will be expanded to something like "/tmp/vips-12-34587.jpg". * * You need to free the result. */ char * vips__temp_name(const char *format) { static int global_serial = 0; char file[FILENAME_MAX]; char file2[FILENAME_MAX]; char *name; int serial = g_atomic_int_add(&global_serial, 1); vips_snprintf(file, FILENAME_MAX, "vips-%d-%u", serial, g_random_int()); vips_snprintf(file2, FILENAME_MAX, format, file); name = g_build_filename(vips__temp_dir(), file2, NULL); /* We could use something like g_mkstemp() to guarantee uniqueness * across processes, but the extra FS calls can be difficult for * selinux. * * g_random_int() should be safe enough -- it's seeded from time(), so * it ought not to collide often -- and on linux at least we never * actually use these filenames in the filesystem anyway. */ return name; } /* Strip off any of a set of old suffixes (eg. [".v", ".jpg"]), add a single * new suffix (eg. ".tif"). */ void vips__change_suffix(const char *name, char *out, int mx, const char *new, const char **olds, int nolds) { char *p; int i; int len; /* Copy start string. */ vips_strncpy(out, name, mx); /* Drop all matching suffixes. */ while ((p = strrchr(out, '.'))) { /* Found suffix - test against list of alternatives. Ignore * case. */ for (i = 0; i < nolds; i++) if (g_ascii_strcasecmp(p, olds[i]) == 0) { *p = '\0'; break; } /* Found match? If not, break from loop. */ if (*p) break; } /* Add new suffix. */ len = strlen(out); vips_strncpy(out + len, new, mx - len); } typedef struct { const char unit; int multiplier; } Unit; guint64 vips__parse_size(const char *size_string) { static Unit units[] = { { 'k', 1024 }, { 'm', 1024 * 1024 }, { 'g', 1024 * 1024 * 1024 } }; guint64 size; int n; int i; char *unit; /* An easy way to alloc a buffer large enough. */ unit = g_strdup(size_string); n = sscanf(size_string, "%d %s", &i, unit); size = i; if (n > 1) { int j; for (j = 0; j < VIPS_NUMBER(units); j++) if (tolower(unit[0]) == units[j].unit) { size *= units[j].multiplier; break; } } g_free(unit); VIPS_DEBUG_MSG("parse_size: parsed \"%s\" as %" G_GUINT64_FORMAT "\n", size_string, size); return size; } /* Look up the const char * for an enum value. */ const char * vips_enum_string(GType enm, int v) { GEnumValue *value; if (!(value = g_enum_get_value(g_type_class_ref(enm), v))) return "(null)"; return value->value_name; } const char * vips_enum_nick(GType enm, int v) { GEnumValue *value; if (!(value = g_enum_get_value(g_type_class_ref(enm), v))) return "(null)"; return value->value_nick; } int vips_enum_from_nick(const char *domain, GType type, const char *nick) { GTypeClass *class; GEnumClass *genum; GEnumValue *enum_value; int i; char str[1000]; VipsBuf buf = VIPS_BUF_STATIC(str); if (!(class = g_type_class_ref(type))) { vips_error(domain, "%s", _("no such enum type")); return -1; } genum = G_ENUM_CLASS(class); if ((enum_value = g_enum_get_value_by_name(genum, nick))) return enum_value->value; if ((enum_value = g_enum_get_value_by_nick(genum, nick))) return enum_value->value; /* -1 since we always have a "last" member. */ for (i = 0; i < genum->n_values - 1; i++) { if (i > 0) vips_buf_appends(&buf, ", "); vips_buf_appends(&buf, genum->values[i].value_nick); } vips_error(domain, _("enum '%s' has no member '%s', " "should be one of: %s"), g_type_name(type), nick, vips_buf_all(&buf)); return -1; } int vips_flags_from_nick(const char *domain, GType type, const char *nick) { GTypeClass *class; GFlagsClass *gflags; GFlagsValue *flags_value; int i; char *p, *q; char str[256]; if (!(class = g_type_class_ref(type))) { vips_error(domain, "%s", _("no such flag type")); return -1; } gflags = G_FLAGS_CLASS(class); /* Allow an integer as a value. */ if (sscanf(nick, "%d", &i) == 1) return i; /* It can be a list of nicks, in which case we OR the bits together. */ i = 0; vips_strncpy(str, nick, sizeof(str)); for (p = str; (q = vips_break_token(p, "\t;:|, ")); p = q) { if ((flags_value = g_flags_get_value_by_name(gflags, p)) || (flags_value = g_flags_get_value_by_nick(gflags, p))) i |= flags_value->value; else { vips_error(domain, _("flags '%s' has no member '%s'"), g_type_name(type), p); return -1; } } return i; } /* Scan @buf for the first "%ns" (eg. "%12s") and substitute the * lowest-numbered one for @sub. @buf is @len bytes in size. * * If there are no %ns, use the first %s. */ int vips__substitute(char *buf, size_t len, char *sub) { size_t buflen = strlen(buf); size_t sublen = strlen(sub); int lowest_n; char *sub_start; char *p; char *sub_end; size_t before_len, marker_len, after_len, final_len; g_assert(buflen < len); lowest_n = -1; sub_start = NULL; sub_end = NULL; for (p = buf; (p = strchr(p, '%')); p++) if (isdigit(p[1])) { char *q; for (q = p + 1; isdigit(*q); q++) ; if (q[0] == 's') { int n; n = atoi(p + 1); if (lowest_n == -1 || n < lowest_n) { lowest_n = n; sub_start = p; sub_end = q + 1; } } } if (!sub_start) for (p = buf; (p = strchr(p, '%')); p++) if (p[1] == 's') { sub_start = p; sub_end = p + 2; break; } if (!sub_start) return -1; before_len = sub_start - buf; marker_len = sub_end - sub_start; after_len = buflen - (before_len + marker_len); final_len = before_len + sublen + after_len + 1; if (final_len > len) return -1; memmove(buf + before_len + sublen, buf + before_len + marker_len, after_len + 1); memmove(buf + before_len, sub, sublen); return 0; } /* Absoluteize a path. Free the result with g_free(). */ char * vips_realpath(const char *path) { char *real; /* It'd be nice to use realpath here, but sadly that won't work on * linux systems with grsec, since it works by opening /proc/self/fd. */ if (!g_path_is_absolute(path)) { char *cwd; cwd = g_get_current_dir(); real = g_build_filename(cwd, path, NULL); g_free(cwd); } else real = g_strdup(path); return real; } /* A very simple random number generator. See: * http://isthe.com/chongo/tech/comp/fnv/#FNV-source */ guint32 vips__random_add(guint32 hash, int value) { #define FNV_ADD(HASH, VALUE8) (((HASH) ^ (VALUE8)) * 16777619u) hash = FNV_ADD(hash, value & 0xff); hash = FNV_ADD(hash, (value >> 8) & 0xff); hash = FNV_ADD(hash, (value >> 16) & 0xff); hash = FNV_ADD(hash, (value >> 24) & 0xff); return hash; } guint32 vips__random(guint32 seed) { guint32 hash; hash = 2166136261u; hash = vips__random_add(hash, seed); return hash; } static void * vips_icc_dir_once(void *null) { #ifdef G_OS_WIN32 /* From glib get_windows_directory_root() */ wchar_t wwindowsdir[MAX_PATH]; if (GetWindowsDirectoryW(wwindowsdir, G_N_ELEMENTS(wwindowsdir))) { /* Usually X:\Windows, but in terminal server environments * might be an UNC path, AFAIK. */ char *windowsdir; if ((windowsdir = g_utf16_to_utf8(wwindowsdir, -1, NULL, NULL, NULL))) { gchar *full_path; full_path = g_build_filename(windowsdir, "system32", "spool", "drivers", "color", NULL); g_free(windowsdir); return (void *) full_path; } } #endif /*G_OS_WIN32*/ return (void *) VIPS_ICC_DIR; } const char * vips__icc_dir(void) { static GOnce once = G_ONCE_INIT; return (const char *) g_once(&once, vips_icc_dir_once, NULL); } #ifdef G_OS_WIN32 static HMODULE vips__dll = NULL; #ifdef DLL_EXPORT BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) { if (fdwReason == DLL_PROCESS_ATTACH) vips__dll = hinstDLL; return TRUE; } #endif #endif /*G_OS_WIN32*/ static void * vips__windows_prefix_once(void *null) { char *prefix; #ifdef G_OS_WIN32 prefix = g_win32_get_package_installation_directory_of_module( vips__dll); #else /*!G_OS_WIN32*/ prefix = (char *) g_getenv("VIPSHOME"); #endif /*G_OS_WIN32*/ return (void *) prefix; } const char * vips__windows_prefix(void) { static GOnce once = G_ONCE_INIT; return (const char *) g_once(&once, vips__windows_prefix_once, NULL); } char * vips__get_iso8601(void) { char *date; #if GLIB_CHECK_VERSION(2, 62, 0) { GDateTime *now; now = g_date_time_new_now_local(); date = g_date_time_format_iso8601(now); g_date_time_unref(now); } #else /*!GLIB_CHECK_VERSION(2, 62, 0)*/ { GTimeVal now; g_get_current_time(&now); date = g_time_val_to_iso8601(&now); } #endif /*GLIB_CHECK_VERSION(2, 62, 0)*/ return date; } /* Convert a string to a double in the ASCII locale (ie. decimal point is * "."). */ int vips_strtod(const char *str, double *out) { const char *p; *out = 0; /* The str we fetched must contain at least 1 digit. This * helps stop us trying to convert "MATLAB" (for example) to * a number and getting zero. */ for (p = str; *p; p++) if (isdigit(*p)) break; if (!*p) return -1; /* This will fail for out of range numbers, like 1e343434, but * is quite happy with eg. "banana". */ *out = g_ascii_strtod(str, NULL); if (errno) return -1; return 0; } libvips-8.15.1/libvips/iofuncs/vector.cpp000066400000000000000000000102511454007373500204110ustar00rootroot00000000000000/* helper functions for Highway * * 29/07/21 kleisauke * - from vector.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include /* If we are building with -fcf-protection (run-time checking of * indirect jumps) then Orc won't work. Make sure it's off. * * https://gcc.gnu.org/onlinedocs/gcc/\ * Instrumentation-Options.html#index-fcf-protection * https://gitlab.freedesktop.org/gstreamer/orc/issues/17 * * orc 0.4.30 and later work with cf-protection. */ #ifdef __CET__ #ifndef HAVE_ORC_CF_PROTECTION #undef HAVE_ORC #endif #endif #ifdef HAVE_HWY #include #elif defined(HAVE_ORC) #include #endif /*HAVE_HWY*/ /* Cleared by the command-line `--vips-novector` switch and the * `VIPS_NOVECTOR` env var. */ gboolean vips__vector_enabled = TRUE; void vips__vector_init(void) { #ifdef HAVE_ORC orc_init(); #endif /*HAVE_ORC*/ /* Check whether any features are being disabled by the environment. */ const char *env; if ((env = g_getenv("VIPS_VECTOR"))) return vips_vector_disable_targets( g_ascii_strtoll(env, NULL, 0)); /* Look for the deprecated IM_NOVECTOR environment variable as well. */ if (g_getenv("VIPS_NOVECTOR") #if ENABLE_DEPRECATED || g_getenv("IM_NOVECTOR") #endif ) vips__vector_enabled = FALSE; } gboolean vips_vector_isenabled(void) { #ifdef HAVE_HWY return vips__vector_enabled && vips_vector_get_supported_targets() != 0; #elif defined(HAVE_ORC) return vips__vector_enabled; #else return FALSE; #endif } void vips_vector_set_enabled(gboolean enabled) { vips__vector_enabled = enabled; } /** * vips_vector_get_builtin_targets: * * Gets a bitfield of builtin targets that libvips was built with. * * Returns: a bitfield of builtin targets. */ gint64 vips_vector_get_builtin_targets(void) { #ifdef HAVE_HWY return HWY_TARGETS; #else return 0; #endif } /** * vips_vector_get_supported_targets: * * Gets a bitfield of enabled targets that are supported on this CPU. The * targets returned may change after calling vips_vector_disable_targets(). * * Returns: a bitfield of supported CPU targets. */ gint64 vips_vector_get_supported_targets(void) { #ifdef HAVE_HWY return hwy::SupportedTargets() & ~(HWY_EMU128 | HWY_SCALAR); #elif defined(HAVE_ORC) return orc_target_get_default_flags(orc_target_get_default()); #else return 0; #endif } /** * vips_vector_target_name: * @target: A specific target to describe. * * Generates a human-readable ASCII string descriptor for a specific target. * * Returns: a string describing the target. */ const char * vips_vector_target_name(gint64 target) { #ifdef HAVE_HWY return hwy::TargetName(target); #elif defined(HAVE_ORC) return orc_target_get_flag_name(orc_target_get_default(), log2(target)); #else return NULL; #endif } /** * vips_vector_disable_targets: * @disabled_targets: A bitfield of targets to disable at runtime. * * Takes a bitfield of targets to disable on the runtime platform. * Handy for testing and benchmarking purposes. * * This can also be set using the `VIPS_VECTOR` environment variable. */ void vips_vector_disable_targets(gint64 disabled_targets) { #ifdef HAVE_HWY hwy::SetSupportedTargetsForTest( vips_vector_get_supported_targets() & ~disabled_targets); #endif } libvips-8.15.1/libvips/iofuncs/vips.c000066400000000000000000000627631454007373500175470ustar00rootroot00000000000000/* Read and write a vips file. * * 22/5/08 * - from im_open.c, im_openin.c, im_desc_hd.c, im_readhist.c, * im_openout.c * 19/3/09 * - block mmaps of nodata images * 12/5/09 * - fix signed/unsigned warnings * 12/10/09 * - heh argh reading history always stopped after the first line * 9/12/09 * - only wholly map input files on im_incheck() ... this reduces VM use, * especially with large numbers of small files * 14/2/11 * - renamed to vips.c from im_open_vips.c, some stuff chopped out for * image.c ... this file now just does read / write to disc * 28/3/11 * - moved to vips_ namespace * 25/2/17 * - use expat for xml read, printf for xml write * 16/8/17 * - validate strs as being utf-8 before we write * 9/4/18 Alexander-- * - use O_TMPFILE, if available * 23/7/18 * - escape ASCII control characters in XML * 29/8/19 * - verify bands/format for coded images */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define SHOW_HEADER #define DEBUG */ /* Enable linux extensions like O_TMPFILE, if available. */ #define _GNU_SOURCE #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include #include #include #include #ifdef HAVE_SYS_FILE_H #include #endif /*HAVE_SYS_FILE_H*/ #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #ifdef HAVE_IO_H #include #endif /*HAVE_IO_H*/ #include #include #include #ifdef G_OS_WIN32 #include #endif /*G_OS_WIN32*/ #include #include /** * SECTION: vips * @short_description: startup, shutdown, version * @stability: Stable * @see_also: VipsOperation * @include: vips/vips.h * * Start VIPS up, shut VIPS down, get version information, relocation. * * VIPS is a relocatable package, meaning you can move the directory tree you * compiled it to at runtime and it will still be able to find all data files. * This is required for OS X and Windows, but slightly unusual in the Unix * world. See vips_init() and vips_guess_prefix(). */ /* Open mode for image write. * * We use O_RDWR not O_WRONLY since after writing we may want to rewind the * image and read from it. */ #define MODE_WRITE CLOEXEC(BINARYIZE(O_RDWR | O_CREAT | O_TRUNC)) /* Mode for read/write. This is if we might later want to mmaprw () the file. */ #define MODE_READWRITE CLOEXEC(BINARYIZE(O_RDWR)) /* Mode for read only. This is the fallback if READWRITE fails. */ #define MODE_READONLY CLOEXEC(BINARYIZE(O_RDONLY)) /* Our XML namespace. */ #define NAMESPACE_URI "http://www.vips.ecs.soton.ac.uk/" /* Open for read for image files. */ int vips__open_image_read(const char *filename) { int fd; /* Try to open read-write, so that calls to vips_image_inplace() will * work. When we later mmap this file, we set read-only, so there * is little danger of scrubbing over files we own. */ fd = vips_tracked_open(filename, MODE_READWRITE, 0); if (fd == -1) /* Open read-write failed. Fall back to open read-only. */ fd = vips_tracked_open(filename, MODE_READONLY, 0); if (fd == -1) { vips_error_system(errno, "VipsImage", _("unable to open \"%s\""), filename); return -1; } return fd; } /* Open for write for image files. */ int vips__open_image_write(const char *filename, gboolean temp) { int flags; int fd; fd = -1; #ifndef O_TMPFILE if (temp) g_info("vips__open_image_write: O_TMPFILE not available"); #endif /*!O_TMPFILE*/ #ifdef O_TMPFILE /* Linux-only extension creates an unlinked file. CREAT and TRUNC must * be clear. The filename arg to open() must name a directory. * * This can fail since not all filesystems support it. In this case, * we open as a regular file and rely on the delete-on-close * mechanism, see vips_image_delete(). */ if (temp) { char *dirname; g_info("vips__open_image_write: opening with O_TMPFILE"); dirname = g_path_get_dirname(filename); fd = vips_tracked_open(dirname, O_TMPFILE | O_RDWR, 0644); g_free(dirname); if (fd < 0) g_info("vips__open_image_write: O_TMPFILE failed!"); } #endif /*O_TMPFILE*/ flags = MODE_WRITE; #ifdef _O_TEMPORARY /* On Windows, setting _O_TEMPORARY will delete the file automatically * on process exit, even if the processes crashes. */ if (temp) { g_info("vips__open_image_write: setting _O_TEMPORARY"); flags |= _O_TEMPORARY; } #endif /*_O_TEMPORARY*/ if (fd < 0) { g_info("vips__open_image_write: simple open"); fd = vips_tracked_open(filename, flags, 0644); } if (fd < 0) { g_info("vips__open_image_write: failed!"); vips_error_system(errno, "VipsImage", _("unable to write to \"%s\""), filename); return -1; } return fd; } /* Predict the size of the header plus pixel data. Don't use off_t, * it's sometimes only 32 bits (eg. on many windows build environments) and we * want to always be 64 bit. */ static gint64 image_pixel_length(VipsImage *image) { gint64 psize; switch (image->Coding) { case VIPS_CODING_LABQ: case VIPS_CODING_RAD: case VIPS_CODING_NONE: psize = VIPS_IMAGE_SIZEOF_IMAGE(image); break; default: psize = image->Length; break; } return psize + image->sizeof_header; } /* Copy 2 and 4 bytes, optionally swapping byte order. */ void vips__copy_4byte(int swap, unsigned char *to, unsigned char *from) { guint32 *in = (guint32 *) from; guint32 *out = (guint32 *) to; if (swap) *out = GUINT32_SWAP_LE_BE(*in); else *out = *in; } void vips__copy_2byte(gboolean swap, unsigned char *to, unsigned char *from) { guint16 *in = (guint16 *) from; guint16 *out = (guint16 *) to; if (swap) *out = GUINT16_SWAP_LE_BE(*in); else *out = *in; } guint32 vips__file_magic(const char *filename) { guint32 magic; if (vips__get_bytes(filename, (unsigned char *) &magic, 4) == 4 && (magic == VIPS_MAGIC_INTEL || magic == VIPS_MAGIC_SPARC)) return magic; return 0; } /* offset, read, write functions. */ typedef struct _FieldIO { glong offset; int size; void (*copy)(gboolean swap, unsigned char *to, unsigned char *from); } FieldIO; static FieldIO fields[] = { { G_STRUCT_OFFSET(VipsImage, Xsize), 4, vips__copy_4byte }, { G_STRUCT_OFFSET(VipsImage, Ysize), 4, vips__copy_4byte }, { G_STRUCT_OFFSET(VipsImage, Bands), 4, vips__copy_4byte }, { G_STRUCT_OFFSET(VipsImage, Bbits), 4, vips__copy_4byte }, { G_STRUCT_OFFSET(VipsImage, BandFmt), 4, vips__copy_4byte }, { G_STRUCT_OFFSET(VipsImage, Coding), 4, vips__copy_4byte }, { G_STRUCT_OFFSET(VipsImage, Type), 4, vips__copy_4byte }, { G_STRUCT_OFFSET(VipsImage, Xres_float), 4, vips__copy_4byte }, { G_STRUCT_OFFSET(VipsImage, Yres_float), 4, vips__copy_4byte }, { G_STRUCT_OFFSET(VipsImage, Length), 4, vips__copy_4byte }, { G_STRUCT_OFFSET(VipsImage, Compression), 2, vips__copy_2byte }, { G_STRUCT_OFFSET(VipsImage, Level), 2, vips__copy_2byte }, { G_STRUCT_OFFSET(VipsImage, Xoffset), 4, vips__copy_4byte }, { G_STRUCT_OFFSET(VipsImage, Yoffset), 4, vips__copy_4byte } }; int vips__read_header_bytes(VipsImage *im, unsigned char *from) { gboolean swap; int i; GEnumValue *value; #ifdef SHOW_HEADER printf("vips__read_header_bytes: file bytes:\n"); for (i = 0; i < im->sizeof_header; i++) printf("%2d - 0x%02x\n", i, from[i]); #endif /*SHOW_HEADER*/ /* The magic number is always written MSB first, we may need to swap. */ vips__copy_4byte(!vips_amiMSBfirst(), (unsigned char *) &im->magic, from); from += 4; if (im->magic != VIPS_MAGIC_INTEL && im->magic != VIPS_MAGIC_SPARC) { vips_error("VipsImage", _("\"%s\" is not a VIPS image"), im->filename); return -1; } /* We need to swap for other fields if the file byte order is * different from ours. */ swap = vips_amiMSBfirst() != vips_image_isMSBfirst(im); for (i = 0; i < VIPS_NUMBER(fields); i++) { fields[i].copy(swap, &G_STRUCT_MEMBER(unsigned char, im, fields[i].offset), from); from += fields[i].size; } /* Set this ourselves ... bbits is deprecated in the file format. */ im->Bbits = vips_format_sizeof(im->BandFmt) << 3; /* We read xres/yres as floats to a staging area, then copy to double * in the main fields. */ im->Xres = VIPS_MAX(0, im->Xres_float); im->Yres = VIPS_MAX(0, im->Yres_float); /* Some protection against malicious files. We also check predicted * (based on these values) against real file length, see below. */ im->Xsize = VIPS_CLIP(1, im->Xsize, VIPS_MAX_COORD); im->Ysize = VIPS_CLIP(1, im->Ysize, VIPS_MAX_COORD); im->Bands = VIPS_CLIP(1, im->Bands, VIPS_MAX_COORD); im->BandFmt = VIPS_CLIP(0, im->BandFmt, VIPS_FORMAT_LAST - 1); /* Coding and Type have missing values, so we look up in the enum. */ value = g_enum_get_value(g_type_class_ref(VIPS_TYPE_INTERPRETATION), im->Type); if (!value || strcmp(value->value_nick, "last") == 0) im->Type = VIPS_INTERPRETATION_ERROR; value = g_enum_get_value(g_type_class_ref(VIPS_TYPE_CODING), im->Coding); if (!value || strcmp(value->value_nick, "last") == 0) im->Coding = VIPS_CODING_ERROR; /* Offset, Res, etc. don't affect vips file layout, just * pixel interpretation, don't clip them. */ /* Coding values imply Bands and BandFmt settings --- make sure they * are sane. */ switch (im->Coding) { case VIPS_CODING_ERROR: vips_error("VipsImage", "%s", _("unknown coding")); return -1; case VIPS_CODING_NONE: break; case VIPS_CODING_LABQ: if (im->Bands != 4 || im->BandFmt != VIPS_FORMAT_UCHAR) { vips_error("VipsImage", "%s", _("malformed LABQ image")); return -1; } break; case VIPS_CODING_RAD: if (im->Bands != 4 || im->BandFmt != VIPS_FORMAT_UCHAR) { vips_error("VipsImage", "%s", _("malformed RAD image")); return -1; } break; default: g_assert_not_reached(); break; } return 0; } int vips__write_header_bytes(VipsImage *im, unsigned char *to) { /* Swap if the byte order we are asked to write the header in is * different from ours. */ gboolean swap = vips_amiMSBfirst() != vips_image_isMSBfirst(im); int i; unsigned char *q; /* We set xres/yres as floats in a staging area, then copy those * smaller values to the file. */ im->Xres_float = im->Xres; im->Yres_float = im->Yres; /* Always write the magic number MSB first. */ vips__copy_4byte(!vips_amiMSBfirst(), to, (unsigned char *) &im->magic); q = to + 4; for (i = 0; i < VIPS_NUMBER(fields); i++) { fields[i].copy(swap, q, &G_STRUCT_MEMBER(unsigned char, im, fields[i].offset)); q += fields[i].size; } /* Pad spares with zeros. */ while (q - to < im->sizeof_header) *q++ = 0; #ifdef SHOW_HEADER printf("vips__write_header_bytes: file bytes:\n"); for (i = 0; i < im->sizeof_header; i++) printf("%2d - 0x%02x\n", i, to[i]); #endif /*SHOW_HEADER*/ return 0; } /* Read a chunk of an fd into memory. Add a '\0' at the end. */ static char * read_chunk(int fd, gint64 offset, size_t length) { char *buf; if (vips__seek(fd, offset, SEEK_SET) == -1) return NULL; if (!(buf = vips_malloc(NULL, length + 1))) return NULL; if (read(fd, buf, length) != (gssize) length) { g_free(buf); vips_error("VipsImage", "%s", _("unable to read history")); return NULL; } buf[length] = '\0'; return buf; } /* Does it look like an image has an extension block? */ int vips__has_extension_block(VipsImage *im) { gint64 psize; psize = image_pixel_length(im); g_assert(im->file_length > 0); return im->file_length - psize > 0; } /* Read everything after the pixels into memory. */ void * vips__read_extension_block(VipsImage *im, int *size) { gint64 psize; void *buf; psize = image_pixel_length(im); g_assert(im->file_length > 0); if (im->file_length - psize > 100 * 1024 * 1024) { vips_error("VipsImage", "%s", _("more than 100 megabytes of XML? " "sufferin' succotash!")); return NULL; } if (im->file_length - psize == 0) return NULL; if (!(buf = read_chunk(im->fd, psize, im->file_length - psize))) return NULL; if (size) *size = im->file_length - psize; #ifdef DEBUG printf("vips__read_extension_block: read %d bytes from %s\n", (int) (im->file_length - psize), im->filename); printf("data: \"%s\"\n", (char *) buf); #endif /*DEBUG*/ return buf; } static int parser_read_fd(XML_Parser parser, int fd) { const int chunk_size = 1024; gint64 bytes_read; gint64 len; bytes_read = 0; do { void *buf; if (!(buf = XML_GetBuffer(parser, chunk_size))) { vips_error("VipsImage", "%s", _("unable to allocate read buffer")); return -1; } len = read(fd, buf, chunk_size); if (len == -1) { vips_error("VipsImage", "%s", _("read error while fetching XML")); return -1; } /* Allow missing XML block. */ if (bytes_read == 0 && len == 0) break; bytes_read += len; if (!XML_ParseBuffer(parser, len, len == 0)) { vips_error("VipsImage", "%s", _("XML parse error")); return -1; } } while (len > 0); return 0; } #define MAX_PARSE_ATTR (256) /* What we track during expat parse. */ typedef struct _VipsExpatParse { VipsImage *image; /* Set on error. */ gboolean error; /* TRUE for in header section. */ gboolean header; /* For the current node, the type and name. */ XML_Char type[MAX_PARSE_ATTR]; XML_Char name[MAX_PARSE_ATTR]; /* Accumulate data here. */ VipsDbuf dbuf; } VipsExpatParse; static void parser_element_start_handler(void *user_data, const XML_Char *name, const XML_Char **atts) { VipsExpatParse *vep = (VipsExpatParse *) user_data; const XML_Char **p; #ifdef DEBUG printf("parser_element_start: %s\n", name); for (p = atts; *p; p += 2) printf("%s = %s\n", p[0], p[1]); #endif /*DEBUG*/ if (strcmp(name, "field") == 0) { for (p = atts; *p; p += 2) { if (strcmp(p[0], "name") == 0) vips_strncpy(vep->name, p[1], MAX_PARSE_ATTR); if (strcmp(p[0], "type") == 0) vips_strncpy(vep->type, p[1], MAX_PARSE_ATTR); } vips_dbuf_reset(&vep->dbuf); } else if (strcmp(name, "header") == 0) vep->header = TRUE; else if (strcmp(name, "meta") == 0) vep->header = FALSE; else if (strcmp(name, "root") == 0) { for (p = atts; *p; p += 2) if (strcmp(p[0], "xmlns") == 0 && !vips_isprefix(NAMESPACE_URI "vips", p[1])) { vips_error("VipsImage", "%s", _("incorrect namespace in XML")); vep->error = TRUE; } } } /* Chop history into lines, add each one as a refstring. */ static void set_history(VipsImage *im, char *history) { GSList *history_list; char *p, *q; /* There can be history there already if we're rewinding. */ VIPS_FREEF(vips__gslist_gvalue_free, im->history_list); history_list = NULL; for (p = history; *p; p = q) { if ((q = strchr(p, '\n'))) { *q = '\0'; q += 1; } else q = p + strlen(p); history_list = g_slist_prepend(history_list, vips__gvalue_ref_string_new(p)); } im->history_list = g_slist_reverse(history_list); } static int set_meta(VipsImage *image, GType gtype, const char *name, const char *data) { GValue save_value = G_VALUE_INIT; GValue value = G_VALUE_INIT; g_value_init(&save_value, VIPS_TYPE_SAVE_STRING); vips_value_set_save_string(&save_value, data); g_value_init(&value, gtype); if (!g_value_transform(&save_value, &value)) { g_value_unset(&save_value); vips_error("VipsImage", "%s", _("error transforming from save format")); return -1; } vips_image_set(image, name, &value); g_value_unset(&save_value); g_value_unset(&value); return 0; } static void parser_element_end_handler(void *user_data, const XML_Char *name) { VipsExpatParse *vep = (VipsExpatParse *) user_data; #ifdef DEBUG printf("parser_element_end_handler: %s\n", name); #endif /*DEBUG*/ if (strcmp(name, "field") == 0) { if (vep->header) { if (strcmp(name, "Hist") == 0) set_history(vep->image, (char *) vips_dbuf_string(&vep->dbuf, NULL)); } else { GType gtype = g_type_from_name(vep->type); /* Can we convert from VIPS_SAVE_STRING to type? */ if (gtype && g_value_type_transformable( VIPS_TYPE_SAVE_STRING, gtype) && set_meta(vep->image, gtype, vep->name, (char *) vips_dbuf_string(&vep->dbuf, NULL))) vep->error = TRUE; } } } static void parser_data_handler(void *user_data, const XML_Char *data, int len) { VipsExpatParse *vep = (VipsExpatParse *) user_data; #ifdef DEBUG printf("parser_data_handler: %d bytes\n", len); #endif /*DEBUG*/ vips_dbuf_write(&vep->dbuf, (unsigned char *) data, len); } /* Called at the end of vips open ... get any XML after the pixel data * and read it in. */ static int readhist(VipsImage *im) { XML_Parser parser; VipsExpatParse vep; if (vips__seek(im->fd, image_pixel_length(im), SEEK_SET) == -1) return -1; parser = XML_ParserCreate("UTF-8"); vep.image = im; vips_dbuf_init(&vep.dbuf); vep.error = FALSE; XML_SetUserData(parser, &vep); XML_SetElementHandler(parser, parser_element_start_handler, parser_element_end_handler); XML_SetCharacterDataHandler(parser, parser_data_handler); if (parser_read_fd(parser, im->fd) || vep.error) { vips_dbuf_destroy(&vep.dbuf); XML_ParserFree(parser); return -1; } vips_dbuf_destroy(&vep.dbuf); XML_ParserFree(parser); return 0; } int vips__write_extension_block(VipsImage *im, void *buf, int size) { gint64 length; gint64 psize; psize = image_pixel_length(im); if ((length = vips_file_length(im->fd)) == -1) return -1; if (length < psize) { vips_error("VipsImage", "%s", _("file has been truncated")); return -1; } if (vips__ftruncate(im->fd, psize) || vips__seek(im->fd, psize, SEEK_SET) == -1) return -1; if (vips__write(im->fd, buf, size)) return -1; #ifdef DEBUG printf("vips__write_extension_block: written %d bytes of XML to %s\n", size, im->filename); #endif /*DEBUG*/ return 0; } /* Append a string to a buffer, but escape " as \". */ static void target_write_quotes(VipsTarget *target, const char *str) { const char *p; size_t len; for (p = str; *p; p += len) { len = strcspn(p, "\""); vips_target_write(target, (unsigned char *) p, len); if (p[len] == '"') vips_target_writes(target, "\\"); } } static void * build_xml_meta(VipsMeta *meta, VipsTarget *target, void *b) { GType type = G_VALUE_TYPE(&meta->value); char *str; /* If we can transform to VIPS_TYPE_SAVE_STRING and back, we can save * and restore. */ if (g_value_type_transformable(type, VIPS_TYPE_SAVE_STRING) && g_value_type_transformable(VIPS_TYPE_SAVE_STRING, type)) { GValue save_value = G_VALUE_INIT; g_value_init(&save_value, VIPS_TYPE_SAVE_STRING); if (!g_value_transform(&meta->value, &save_value)) { vips_error("VipsImage", "%s", _("error transforming to save format")); return meta; } /* We need to validate the str to make sure we'll be able to * read it back. */ str = g_utf8_make_valid(vips_value_get_save_string(&save_value), -1); if (str) { vips_target_writef(target, " name); vips_target_writes(target, "\">"); vips_target_write_amp(target, str); vips_target_writes(target, "\n"); g_free(str); } g_value_unset(&save_value); } return NULL; } /* Make the xml we append to vips images after the pixel data. */ static char * build_xml(VipsImage *image) { VipsTarget *target; const char *str; char *result; target = vips_target_new_to_memory(); vips_target_writef(target, "\n"); vips_target_writef(target, "\n", NAMESPACE_URI, VIPS_MAJOR_VERSION, VIPS_MINOR_VERSION, VIPS_MICRO_VERSION); vips_target_writef(target, "
\n"); str = vips_image_get_history(image); if (g_utf8_validate(str, -1, NULL)) { vips_target_writef(target, " ", g_type_name(VIPS_TYPE_REF_STRING)); vips_target_write_amp(target, str); vips_target_writef(target, "\n"); } vips_target_writef(target, "
\n"); vips_target_writef(target, " \n"); if (vips_slist_map2(image->meta_traverse, (VipsSListMap2Fn) build_xml_meta, target, NULL)) { VIPS_UNREF(target); return NULL; } vips_target_writef(target, " \n"); vips_target_writef(target, "
\n"); result = vips_target_steal_text(target); VIPS_UNREF(target); return result; } static void * vips__xml_properties_meta(VipsImage *image, const char *field, GValue *value, void *a) { VipsTarget *target = (VipsTarget *) a; GType type = G_VALUE_TYPE(value); const char *str; /* If we can transform to VIPS_TYPE_SAVE_STRING and back, we can save * and restore. */ if (g_value_type_transformable(type, VIPS_TYPE_SAVE_STRING) && g_value_type_transformable(VIPS_TYPE_SAVE_STRING, type)) { GValue save_value = G_VALUE_INIT; g_value_init(&save_value, VIPS_TYPE_SAVE_STRING); if (!g_value_transform(value, &save_value)) { vips_error("VipsImage", "%s", _("error transforming to save format")); return target; } str = vips_value_get_save_string(&save_value); vips_target_writef(target, " \n"); vips_target_writef(target, " "); vips_target_write_amp(target, field); vips_target_writef(target, "\n"); vips_target_writef(target, " ", g_type_name(type)); vips_target_write_amp(target, str); vips_target_writef(target, "\n"); vips_target_writef(target, " \n"); g_value_unset(&save_value); } return NULL; } /* Make the xml we write to vips-properties in dzsave, or to TIFF. A simple * dump of all vips metadata. Free with g_free(). */ char * vips__xml_properties(VipsImage *image) { VipsTarget *target; char *date; char *result; date = vips__get_iso8601(); target = vips_target_new_to_memory(); vips_target_writef(target, "\n"); vips_target_writef(target, "\n", NAMESPACE_URI, date, VIPS_MAJOR_VERSION, VIPS_MINOR_VERSION, VIPS_MICRO_VERSION); vips_target_writef(target, " \n"); g_free(date); if (vips_image_map(image, vips__xml_properties_meta, target)) { VIPS_UNREF(target); return NULL; } vips_target_writef(target, " \n"); vips_target_writef(target, "\n"); result = vips_target_steal_text(target); VIPS_UNREF(target); return result; } /* Append XML to output fd. */ int vips__writehist(VipsImage *image) { char *xml; assert(image->dtype == VIPS_IMAGE_OPENOUT); assert(image->fd != -1); if (!(xml = build_xml(image))) return -1; if (vips__write_extension_block(image, xml, strlen(xml))) { g_free(xml); return -1; } #ifdef DEBUG printf("vips__writehist: saved XML is: \"%s\"\n", xml); #endif /*DEBUG*/ g_free(xml); return 0; } /* Open the filename, read the header, some sanity checking. */ int vips_image_open_input(VipsImage *image) { /* We don't use im->sizeof_header here, but we know we're reading a * VIPS image anyway. */ unsigned char header[VIPS_SIZEOF_HEADER]; gint64 psize; gint64 rsize; image->dtype = VIPS_IMAGE_OPENIN; /* We may have an fd already, see vips_image_rewind_output(). */ if (image->fd == -1) { image->fd = vips__open_image_read(image->filename); if (image->fd == -1) return -1; } vips__seek(image->fd, 0, SEEK_SET); if (read(image->fd, header, VIPS_SIZEOF_HEADER) != VIPS_SIZEOF_HEADER || vips__read_header_bytes(image, header)) { vips_error_system(errno, "VipsImage", _("unable to read header for \"%s\""), image->filename); return -1; } /* Predict and check the file size. Only issue a warning, we want to be * able to read all the header fields we can, even if the actual data * isn't there. */ psize = image_pixel_length(image); if ((rsize = vips_file_length(image->fd)) == -1) return -1; image->file_length = rsize; if (psize > rsize) g_warning(_("unable to read data for \"%s\", %s"), image->filename, _("file has been truncated")); /* Set demand style. This suits a disc file we read sequentially. */ image->dhint = VIPS_DEMAND_STYLE_THINSTRIP; /* Set the history part of im descriptor. Don't return an error if this * fails (due to eg. corrupted XML) because it's probably mostly * harmless. */ if (readhist(image)) { g_warning(_("error reading vips image metadata: %s"), vips_error_buffer()); vips_error_clear(); } return 0; } int vips_image_open_output(VipsImage *image) { if (image->fd == -1) { /* Don't use im->sizeof_header here, but we know we're * writing a VIPS image anyway. */ unsigned char header[VIPS_SIZEOF_HEADER]; if ((image->fd = vips__open_image_write(image->filename, image->delete_on_close)) < 0) return -1; /* We always write in native mode, so we must overwrite the * magic we read from the file originally. */ image->magic = vips_amiMSBfirst() ? VIPS_MAGIC_SPARC : VIPS_MAGIC_INTEL; if (vips__write_header_bytes(image, header) || vips__write(image->fd, header, VIPS_SIZEOF_HEADER)) return -1; } return 0; } libvips-8.15.1/libvips/iofuncs/vipsmarshal.list000066400000000000000000000024071454007373500216350ustar00rootroot00000000000000# see glib-genmarshal(1) for a detailed description of the file format, # possible parameter types are: # VOID indicates no return type, or no extra # parameters. if VOID is used as the parameter # list, no additional parameters may be present. # BOOLEAN for boolean types (gboolean) # CHAR for signed char types (gchar) # UCHAR for unsigned char types (guchar) # INT for signed integer types (gint) # UINT for unsigned integer types (guint) # LONG for signed long integer types (glong) # ULONG for unsigned long integer types (gulong) # ENUM for enumeration types (gint) # FLAGS for flag enumeration types (guint) # FLOAT for single-precision float types (gfloat) # DOUBLE for double-precision float types (gdouble) # STRING for string types (gchar*) # BOXED for boxed (anonymous but reference counted) types (GBoxed*) # POINTER for anonymous pointer types (gpointer) # PARAM for GParamSpec or derived types (GParamSpec*) # OBJECT for GObject or derived types (GObject*) # NONE deprecated alias for VOID # BOOL deprecated alias for BOOLEAN INT: VOID INT64: INT64, INT INT64: POINTER, INT64 libvips-8.15.1/libvips/iofuncs/window.c000066400000000000000000000212331454007373500200600ustar00rootroot00000000000000/* Manage sets of mmap buffers on an image. * * 30/10/06 * - from region.c * 19/3/09 * - block mmaps of nodata images */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_TOTAL #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #include #include #ifdef HAVE_SYS_MMAN_H #include #endif #include #include #include #ifdef G_OS_WIN32 #include #endif /*G_OS_WIN32*/ /* Sanity checking ... write to this during read tests to make sure we don't * get optimized out. */ int vips__read_test; /* Add this many lines above and below the mmap() window. */ int vips__window_margin_pixels = VIPS__WINDOW_MARGIN_PIXELS; /* Always map at least this many bytes. There's no point making tiny windows * on small files. */ int vips__window_margin_bytes = VIPS__WINDOW_MARGIN_BYTES; /* Track global mmap usage. */ #ifdef DEBUG_TOTAL static int total_mmap_usage = 0; static int max_mmap_usage = 0; #endif /*DEBUG_TOTAL*/ static int vips_window_unmap(VipsWindow *window) { /* unmap the old window */ if (window->baseaddr) { if (vips__munmap(window->baseaddr, window->length)) return -1; #ifdef DEBUG_TOTAL g_mutex_lock(vips__global_lock); total_mmap_usage -= window->length; g_assert(total_mmap_usage >= 0); g_mutex_unlock(vips__global_lock); #endif /*DEBUG_TOTAL*/ window->data = NULL; window->baseaddr = NULL; window->length = 0; } return 0; } static int vips_window_free(VipsWindow *window) { VipsImage *im = window->im; g_assert(window->ref_count == 0); #ifdef DEBUG printf("** vips_window_free: window top = %d, height = %d (%p)\n", window->top, window->height, window); printf("vips_window_unref: %d windows left\n", g_slist_length(im->windows)); #endif /*DEBUG*/ g_assert(g_slist_find(im->windows, window)); im->windows = g_slist_remove(im->windows, window); if (vips_window_unmap(window)) return -1; window->im = NULL; g_free(window); return 0; } int vips_window_unref(VipsWindow *window) { VipsImage *im = window->im; g_mutex_lock(im->sslock); #ifdef DEBUG printf("vips_window_unref: window top = %d, height = %d, count = %d\n", window->top, window->height, window->ref_count); #endif /*DEBUG*/ g_assert(window->ref_count > 0); window->ref_count -= 1; if (window->ref_count == 0) { if (vips_window_free(window)) { g_mutex_unlock(im->sslock); return -1; } } g_mutex_unlock(im->sslock); return 0; } #ifdef DEBUG_TOTAL static void trace_mmap_usage(void) { g_mutex_lock(vips__global_lock); { static int last_total = 0; int total = total_mmap_usage / (1024 * 1024); int max = max_mmap_usage / (1024 * 1024); if (total != last_total) { printf("vips_window_set: current mmap " "usage of ~%dMB (high water mark %dMB)\n", total, max); last_total = total; } } g_mutex_unlock(vips__global_lock); } #endif /*DEBUG_TOTAL*/ static int vips_getpagesize(void) { static int pagesize = 0; if (!pagesize) { #ifdef G_OS_WIN32 SYSTEM_INFO si; GetSystemInfo(&si); pagesize = si.dwAllocationGranularity; #else /*!G_OS_WIN32*/ pagesize = sysconf(_SC_PAGESIZE); #endif /*G_OS_WIN32*/ } return pagesize; } /* Map a window into a file. */ static int vips_window_set(VipsWindow *window, int top, int height) { int pagesize = vips_getpagesize(); void *baseaddr; gint64 start, end, pagestart; size_t length, pagelength; /* Calculate start and length for our window. */ start = window->im->sizeof_header + VIPS_IMAGE_SIZEOF_LINE(window->im) * top; length = VIPS_IMAGE_SIZEOF_LINE(window->im) * height; pagestart = start - start % pagesize; end = start + length; pagelength = end - pagestart; /* Make sure we have enough file. */ if (end > window->im->file_length) { vips_error("vips_window_set", _("unable to read data for \"%s\", %s"), window->im->filename, _("file has been truncated")); return -1; } if (vips_window_unmap(window)) return -1; if (!(baseaddr = vips__mmap(window->im->fd, 0, pagelength, pagestart))) return -1; window->baseaddr = baseaddr; window->length = pagelength; window->data = (VipsPel *) baseaddr + (start - pagestart); window->top = top; window->height = height; /* Sanity check ... make sure the data pointer is readable. */ vips__read_test &= window->data[0]; #ifdef DEBUG_TOTAL g_mutex_lock(vips__global_lock); total_mmap_usage += window->length; if (total_mmap_usage > max_mmap_usage) max_mmap_usage = total_mmap_usage; g_mutex_unlock(vips__global_lock); trace_mmap_usage(); #endif /*DEBUG_TOTAL*/ return 0; } /* Make a new window. */ static VipsWindow * vips_window_new(VipsImage *im, int top, int height) { VipsWindow *window; if (!(window = VIPS_NEW(NULL, VipsWindow))) return NULL; window->ref_count = 0; window->im = im; window->top = 0; window->height = 0; window->data = NULL; window->baseaddr = NULL; window->length = 0; im->windows = g_slist_prepend(im->windows, window); if (vips_window_set(window, top, height)) { vips_window_free(window); return NULL; } window->ref_count = 1; #ifdef DEBUG printf("** vips_window_new: window top = %d, height = %d (%p)\n", window->top, window->height, window); #endif /*DEBUG*/ return window; } /* A request for an area of pixels. */ typedef struct { int top; int height; } request_t; static void * vips_window_fits(VipsWindow *window, request_t *req, void *b) { if (window->top <= req->top && window->top + window->height >= req->top + req->height) return window; return NULL; } /* Find an existing window that fits within top/height and return a ref. */ static VipsWindow * vips_window_find(VipsImage *im, int top, int height) { request_t req; VipsWindow *window; req.top = top; req.height = height; window = vips_slist_map2(im->windows, (VipsSListMap2Fn) vips_window_fits, &req, NULL); if (window) { window->ref_count += 1; #ifdef DEBUG printf("vips_window_find: ref window top = %d, height = %d, " "count = %d\n", top, height, window->ref_count); #endif /*DEBUG*/ } return window; } /* Update a window to make it enclose top/height. */ VipsWindow * vips_window_take(VipsWindow *window, VipsImage *im, int top, int height) { int margin; /* We have a window and it has the pixels we need. */ if (window && window->top <= top && window->top + window->height >= top + height) return window; g_mutex_lock(im->sslock); /* We have a window and we are the only ref to it ... scroll. */ if (window && window->ref_count == 1) { if (vips_window_set(window, top, height)) { g_mutex_unlock(im->sslock); vips_window_unref(window); return NULL; } g_mutex_unlock(im->sslock); return window; } /* There's more than one ref to the window. We can just decrement. * Don't call _unref, since we've inside the lock. */ if (window) window->ref_count -= 1; /* Is there an existing window we can reuse? */ if ((window = vips_window_find(im, top, height))) { g_mutex_unlock(im->sslock); return window; } /* We have to make a new window. Make it a bit bigger than strictly * necessary. */ margin = VIPS_MIN(vips__window_margin_pixels, vips__window_margin_bytes / VIPS_IMAGE_SIZEOF_LINE(im)); top -= margin; height += margin * 2; top = VIPS_CLIP(0, top, im->Ysize - 1); height = VIPS_CLIP(0, height, im->Ysize - top); if (!(window = vips_window_new(im, top, height))) { g_mutex_unlock(im->sslock); return NULL; } g_mutex_unlock(im->sslock); return window; } void vips_window_print(VipsWindow *window) { printf("VipsWindow: %p ref_count = %d, ", window, window->ref_count); printf("im = %p, ", window->im); printf("top = %d, ", window->top); printf("height = %d, ", window->height); printf("data = %p, ", window->data); printf("baseaddr = %p, ", window->baseaddr); printf("length = %zd\n", window->length); } libvips-8.15.1/libvips/meson.build000066400000000000000000000055701454007373500171070ustar00rootroot00000000000000libvips_sources = [] libvips_components = [] subdir('include/vips') subdir('foreign') if get_option('deprecated') subdir('deprecated') endif subdir('arithmetic') subdir('resample') subdir('colour') subdir('conversion') subdir('convolution') subdir('freqfilt') subdir('histogram') subdir('draw') subdir('iofuncs') subdir('morphology') subdir('mosaicing') subdir('create') libvips_lib = library('vips', enumtypes, link_whole: libvips_components, dependencies: libvips_deps, version: library_version, darwin_versions: darwin_versions, gnu_symbol_visibility: 'hidden', install: true, link_args: nodelete_link_args, ) libvips_dep = declare_dependency( link_with: libvips_lib, dependencies: libvips_deps, ) pkg.generate( libvips_lib, requires: [ glib_dep, gio_dep, gobject_dep ], name: 'vips', description: 'Image processing library', ) if enable_introspection vips_gir = gnome.generate_gir( libvips_lib, namespace: 'Vips', nsversion: '8.0', identifier_prefix: 'Vips', symbol_prefix: 'vips', header: 'vips/vips.h', sources: libvips_sources, dependencies: libvips_deps, includes: 'GObject-2.0', install: true ) if get_option('vapi') gnome.generate_vapi( 'vips', sources: vips_gir[0], packages: [ 'glib-2.0', 'gio-2.0', 'gobject-2.0' ], install: true ) endif endif # # The following configuration is only valid when the modules are enabled # if not modules_enabled subdir_done() endif if magick_module shared_module('vips-magick', 'module/magick.c', magick_module_sources, magick_module_headers, name_prefix: '', dependencies: [libvips_dep, magick_dep], install: true, install_dir: module_dir ) endif if libjxl_module shared_module('vips-jxl', 'module/jxl.c', jpeg_xl_module_sources, name_prefix: '', dependencies: [libvips_dep, libjxl_dep, libjxl_threads_dep], install: true, install_dir: module_dir ) endif if libheif_module shared_module('vips-heif', 'module/heif.c', heif_module_sources, name_prefix: '', dependencies: [libvips_dep, libheif_dep], install: true, install_dir: module_dir ) endif if libpoppler_module shared_module('vips-poppler', 'module/poppler.c', poppler_module_sources, name_prefix: '', dependencies: [libvips_dep, libpoppler_dep, cairo_dep], install: true, install_dir: module_dir ) endif if openslide_module shared_module('vips-openslide', 'module/openslide.c', openslide_module_sources, name_prefix: '', dependencies: [libvips_dep, openslide_dep], install: true, install_dir: module_dir ) endif libvips-8.15.1/libvips/module/000077500000000000000000000000001454007373500162235ustar00rootroot00000000000000libvips-8.15.1/libvips/module/heif.c000066400000000000000000000041531454007373500173050ustar00rootroot00000000000000/* libheif as a dynamically loadable module * * 14/2/21 kleisauke * - initial */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #if defined(HAVE_HEIF) && defined(HEIF_MODULE) /* This is called on module load. */ G_MODULE_EXPORT const gchar * g_module_check_init(GModule *module) { #ifdef DEBUG printf("vips_heif: module init\n"); #endif /*DEBUG*/ extern GType vips_foreign_load_heif_file_get_type(void); extern GType vips_foreign_load_heif_buffer_get_type(void); extern GType vips_foreign_load_heif_source_get_type(void); extern GType vips_foreign_save_heif_file_get_type(void); extern GType vips_foreign_save_heif_buffer_get_type(void); extern GType vips_foreign_save_heif_target_get_type(void); extern GType vips_foreign_save_avif_target_get_type(void); vips_foreign_load_heif_file_get_type(); vips_foreign_load_heif_buffer_get_type(); vips_foreign_load_heif_source_get_type(); vips_foreign_save_heif_file_get_type(); vips_foreign_save_heif_buffer_get_type(); vips_foreign_save_heif_target_get_type(); vips_foreign_save_avif_target_get_type(); return NULL; } #endif /*defined(HAVE_HEIF) && defined(HEIF_MODULE)*/ libvips-8.15.1/libvips/module/jxl.c000066400000000000000000000040001454007373500171560ustar00rootroot00000000000000/* libjxl as a dynamically loadable module * * 10/5/21 jcupitt * - from heif.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #if defined(HAVE_LIBJXL) && defined(LIBJXL_MODULE) /* This is called on module load. */ G_MODULE_EXPORT const gchar * g_module_check_init(GModule *module) { #ifdef DEBUG printf("vips_jxl: module init\n"); #endif /*DEBUG*/ extern GType vips_foreign_load_jxl_file_get_type(void); extern GType vips_foreign_load_jxl_buffer_get_type(void); extern GType vips_foreign_load_jxl_source_get_type(void); extern GType vips_foreign_save_jxl_file_get_type(void); extern GType vips_foreign_save_jxl_buffer_get_type(void); extern GType vips_foreign_save_jxl_target_get_type(void); vips_foreign_load_jxl_file_get_type(); vips_foreign_load_jxl_buffer_get_type(); vips_foreign_load_jxl_source_get_type(); vips_foreign_save_jxl_file_get_type(); vips_foreign_save_jxl_buffer_get_type(); vips_foreign_save_jxl_target_get_type(); return NULL; } #endif /*defined(HAVE_LIBJXL) && defined(LIBJXL_MODULE)*/ libvips-8.15.1/libvips/module/magick.c000066400000000000000000000050061454007373500176230ustar00rootroot00000000000000/* magick as a dynamically loadable module * * 21/4/21 kleisauke * - initial */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #if (defined(HAVE_MAGICK6) || defined(HAVE_MAGICK7)) && defined(MAGICK_MODULE) /* This is called on module load. */ G_MODULE_EXPORT const gchar * g_module_check_init(GModule *module) { #ifdef DEBUG printf("vips_magick: module init\n"); #endif /*DEBUG*/ extern GType vips_foreign_load_magick_file_get_type(void); extern GType vips_foreign_load_magick_buffer_get_type(void); extern GType vips_foreign_load_magick7_file_get_type(void); extern GType vips_foreign_load_magick7_buffer_get_type(void); extern GType vips_foreign_save_magick_file_get_type(void); extern GType vips_foreign_save_magick_bmp_file_get_type(void); extern GType vips_foreign_save_magick_buffer_get_type(void); extern GType vips_foreign_save_magick_bmp_buffer_get_type(void); #ifdef ENABLE_MAGICKLOAD #ifdef HAVE_MAGICK6 vips_foreign_load_magick_file_get_type(); vips_foreign_load_magick_buffer_get_type(); #endif /*HAVE_MAGICK6*/ #ifdef HAVE_MAGICK7 vips_foreign_load_magick7_file_get_type(); vips_foreign_load_magick7_buffer_get_type(); #endif /*HAVE_MAGICK7*/ #endif /*ENABLE_MAGICKLOAD*/ #ifdef ENABLE_MAGICKSAVE vips_foreign_save_magick_file_get_type(); vips_foreign_save_magick_bmp_file_get_type(); vips_foreign_save_magick_buffer_get_type(); vips_foreign_save_magick_bmp_buffer_get_type(); #endif /*ENABLE_MAGICKSAVE*/ return NULL; } #endif /*(defined(HAVE_MAGICK6) || defined (HAVE_MAGICK7)) && defined(MAGICK_MODULE)*/ libvips-8.15.1/libvips/module/openslide.c000066400000000000000000000032331454007373500203520ustar00rootroot00000000000000/* openslide as a dynamically loadable module * * 11/2/21 kleisauke * - initial */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #if defined(HAVE_OPENSLIDE) && defined(OPENSLIDE_MODULE) /* This is called on module load. */ G_MODULE_EXPORT const gchar * g_module_check_init(GModule *module) { #ifdef DEBUG printf("vips_openslide: module init\n"); #endif /*DEBUG*/ extern GType vips_foreign_load_openslide_file_get_type(void); extern GType vips_foreign_load_openslide_source_get_type(void); vips_foreign_load_openslide_file_get_type(); vips_foreign_load_openslide_source_get_type(); return NULL; } #endif /*defined(HAVE_OPENSLIDE) && defined(OPENSLIDE_MODULE)*/ libvips-8.15.1/libvips/module/poppler.c000066400000000000000000000033341454007373500200530ustar00rootroot00000000000000/* poppler as a dynamically loadable module * * 21/4/21 kleisauke * - initial */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #if defined(HAVE_POPPLER) && defined(POPPLER_MODULE) /* This is called on module load. */ G_MODULE_EXPORT const gchar * g_module_check_init(GModule *module) { #ifdef DEBUG printf("vips_poppler: module init\n"); #endif /*DEBUG*/ extern GType vips_foreign_load_pdf_file_get_type(void); extern GType vips_foreign_load_pdf_buffer_get_type(void); extern GType vips_foreign_load_pdf_source_get_type(void); vips_foreign_load_pdf_file_get_type(); vips_foreign_load_pdf_buffer_get_type(); vips_foreign_load_pdf_source_get_type(); return NULL; } #endif /*defined(HAVE_POPPLER) && defined(POPPLER_MODULE)*/ libvips-8.15.1/libvips/morphology/000077500000000000000000000000001454007373500171355ustar00rootroot00000000000000libvips-8.15.1/libvips/morphology/countlines.c000066400000000000000000000110721454007373500214650ustar00rootroot00000000000000/* count lines * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 02/05/1990 * Modified on : * * 19/9/95 JC * - tidied up * 23/10/10 * - gtk-doc * 17/1/14 * - redone as a class, now just a convenience function */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pmorphology.h" typedef struct _VipsCountlines { VipsMorphology parent_instance; double nolines; VipsDirection direction; } VipsCountlines; typedef VipsMorphologyClass VipsCountlinesClass; G_DEFINE_TYPE(VipsCountlines, vips_countlines, VIPS_TYPE_MORPHOLOGY); static int vips_countlines_build(VipsObject *object) { VipsMorphology *morphology = VIPS_MORPHOLOGY(object); VipsCountlines *countlines = (VipsCountlines *) object; VipsImage *in = morphology->in; VipsImage **t = (VipsImage **) vips_object_local_array(object, 7); double nolines; if (VIPS_OBJECT_CLASS(vips_countlines_parent_class)->build(object)) return -1; /* Compiler warnings. */ nolines = 1; switch (countlines->direction) { case VIPS_DIRECTION_HORIZONTAL: if (!(t[0] = vips_image_new_matrixv(1, 2, -1.0, 1.0)) || vips_moreeq_const1(in, &t[1], 128, NULL) || vips_conv(t[1], &t[2], t[0], "precision", VIPS_PRECISION_INTEGER, NULL) || vips_project(t[2], &t[3], &t[4], NULL) || vips_avg(t[3], &nolines, NULL)) return -1; break; case VIPS_DIRECTION_VERTICAL: if (!(t[0] = vips_image_new_matrixv(2, 1, -1.0, 1.0)) || vips_moreeq_const1(in, &t[1], 128, NULL) || vips_conv(t[1], &t[2], t[0], "precision", VIPS_PRECISION_INTEGER, NULL) || vips_project(t[2], &t[3], &t[4], NULL) || vips_avg(t[4], &nolines, NULL)) return -1; break; default: g_assert_not_reached(); } g_object_set(object, "nolines", nolines / 255.0, NULL); return 0; } static void vips_countlines_class_init(VipsCountlinesClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VIPS_DEBUG_MSG("vips_countlines_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "countlines"; vobject_class->description = _("count lines in an image"); vobject_class->build = vips_countlines_build; VIPS_ARG_DOUBLE(class, "nolines", 2, _("Nolines"), _("Number of lines"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsCountlines, nolines), 0, 10000000, 0.0); VIPS_ARG_ENUM(class, "direction", 3, _("Direction"), _("Countlines left-right or up-down"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsCountlines, direction), VIPS_TYPE_DIRECTION, VIPS_DIRECTION_HORIZONTAL); } static void vips_countlines_init(VipsCountlines *countlines) { } /** * vips_countlines: (method) * @in: input image * @nolines: (out): output average number of lines * @direction: count lines horizontally or vertically * @...: %NULL-terminated list of optional named arguments * * Function which calculates the number of transitions * between black and white for the horizontal or the vertical * direction of an image. black<128 , white>=128 * The function calculates the number of transitions for all * Xsize or Ysize and returns the mean of the result * Input should be one band, 8-bit. * * See also: vips_morph(), vips_conv(). * * Returns: 0 on success, -1 on error. */ int vips_countlines(VipsImage *in, double *nolines, VipsDirection direction, ...) { va_list ap; int result; va_start(ap, direction); result = vips_call_split("countlines", ap, in, nolines, direction); va_end(ap); return result; } libvips-8.15.1/libvips/morphology/labelregions.c000066400000000000000000000106051454007373500217510ustar00rootroot00000000000000/* labelregions.c * * 5/11/09 * - renamed from im_segment() * 11/2/14 * - redo as a class */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pmorphology.h" typedef struct _VipsLabelregions { VipsMorphology parent_instance; VipsImage *mask; int segments; } VipsLabelregions; typedef VipsMorphologyClass VipsLabelregionsClass; G_DEFINE_TYPE(VipsLabelregions, vips_labelregions, VIPS_TYPE_MORPHOLOGY); static int vips_labelregions_build(VipsObject *object) { VipsMorphology *morphology = VIPS_MORPHOLOGY(object); VipsImage *in = morphology->in; VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); VipsImage *mask; int segments; int *m; int x, y; if (VIPS_OBJECT_CLASS(vips_labelregions_parent_class)->build(object)) return -1; /* Create the zero mask image in memory. */ mask = vips_image_new_memory(); g_object_set(object, "mask", mask, NULL); if (vips_black(&t[0], in->Xsize, in->Ysize, NULL) || vips_cast(t[0], &t[1], VIPS_FORMAT_INT, NULL) || vips_image_write(t[1], mask)) return -1; segments = 1; m = (int *) mask->data; for (y = 0; y < mask->Ysize; y++) { for (x = 0; x < mask->Xsize; x++) { if (!m[x]) { /* Use a direct path for speed. */ if (vips__draw_flood_direct(mask, in, segments, x, y)) return -1; segments += 1; } } m += mask->Xsize; } g_object_set(object, "segments", segments, NULL); return 0; } static void vips_labelregions_class_init(VipsLabelregionsClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "labelregions"; vobject_class->description = _("label regions in an image"); vobject_class->build = vips_labelregions_build; VIPS_ARG_IMAGE(class, "mask", 2, _("Mask"), _("Mask of region labels"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsLabelregions, mask)); VIPS_ARG_INT(class, "segments", 3, _("Segments"), _("Number of discrete contiguous regions"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsLabelregions, segments), 0, 1000000000, 0); } static void vips_labelregions_init(VipsLabelregions *labelregions) { } /** * vips_labelregions: (method) * @in: image to test * @mask: write labelled regions here * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @segments: return number of regions found here * * Repeatedly scans @in for regions of 4-connected pixels * with the same pixel value. Every time a region is discovered, those * pixels are marked in @mask with a unique serial number. Once all pixels * have been labelled, the operation returns, setting @segments to the number * of discrete regions which were detected. * * @mask is always a 1-band #VIPS_FORMAT_INT image of the same dimensions as * @in. * * This operation is useful for, for example, blob counting. You can use the * morphological operators to detect and isolate a series of objects, then use * vips_labelregions() to number them all. * * Use vips_hist_find_indexed() to (for example) find blob coordinates. * * See also: vips_hist_find_indexed(). * * Returns: 0 on success, -1 on error. */ int vips_labelregions(VipsImage *in, VipsImage **mask, ...) { va_list ap; int result; va_start(ap, mask); result = vips_call_split("labelregions", ap, in, mask); va_end(ap); return result; } libvips-8.15.1/libvips/morphology/meson.build000066400000000000000000000007061454007373500213020ustar00rootroot00000000000000morphology_sources = files( 'nearest.c', 'morphology.c', 'countlines.c', 'rank.c', 'morph.c', 'morph_hwy.cpp', 'labelregions.c', ) morphology_headers = files( 'pmorphology.h', ) libvips_sources += morphology_sources morphology_lib = static_library('morphology', morphology_sources, morphology_headers, dependencies: libvips_deps, gnu_symbol_visibility: 'hidden', ) libvips_components += morphology_lib libvips-8.15.1/libvips/morphology/morph.c000066400000000000000000000616731454007373500204430ustar00rootroot00000000000000/* morphology * * 19/9/95 JC * - rewritten * 6/7/99 JC * - small tidies * 7/4/04 * - now uses im_embed() with edge stretching on the input, not * the output * - sets Xoffset / Yoffset * 21/4/08 * - only rebuild the buffer offsets if bpl changes * - small cleanups * 25/10/10 * - start again from the Orc'd im_conv * 29/10/10 * - use VipsVector * - do erode as well * 7/11/10 * - gtk-doc * - do (!=0) to make uchar, if we're not given uchar * 28/6/13 * - oops, fix !=0 code * 23/10/13 * - from vips_conv() * 25/2/20 kleisauke * - rewritten as a class * - merged with hitmiss */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pmorphology.h" #ifdef HAVE_ORC #include /* We can't run more than this many passes. Larger than this and we * fall back to C. * TODO: Could this be raised to 20? Just like convi. */ #define MAX_PASS (10) #define MAX_SOURCES (8 /*ORC_MAX_SRC_VARS*/) /* A pass with a vector. */ typedef struct { int first; /* The index of the first mask coff we use */ int last; /* The index of the last mask coff we use */ int r; /* Set previous result in this var */ int d1; /* The destination var */ int n_scanline; /* The associated line corresponding to the scanline. */ int line[MAX_SOURCES]; /* The code we generate for this section of this mask. */ OrcProgram *program; } Pass; #endif /*HAVE_ORC*/ /** * VipsOperationMorphology: * @VIPS_OPERATION_MORPHOLOGY_ERODE: true if all set * @VIPS_OPERATION_MORPHOLOGY_DILATE: true if one set * * More like hit-miss, really. * * See also: vips_morph(). */ typedef struct { VipsMorphology parent_instance; VipsImage *out; VipsImage *mask; VipsOperationMorphology morph; /* @mask cast ready for processing. */ VipsImage *M; int n_point; /* w * h for our matrix */ guint8 *coeff; /* Mask coefficients */ #ifdef HAVE_ORC /* The passes we generate for this mask. */ int n_pass; Pass pass[MAX_PASS]; #endif /*HAVE_ORC*/ } VipsMorph; typedef VipsMorphologyClass VipsMorphClass; G_DEFINE_TYPE(VipsMorph, vips_morph, VIPS_TYPE_MORPHOLOGY); /* Our sequence value. */ typedef struct { VipsMorph *morph; VipsRegion *ir; /* Input region */ int *soff; /* Offsets we check for set */ int ss; /* ... and number we check for set */ guint8 *coff; /* Offsets we check for clear */ int cs; /* ... and number we check for clear */ int last_bpl; /* Avoid recalcing offsets, if we can */ #ifdef HAVE_ORC /* In vector mode we need a pair of intermediate buffers to keep the * results of each pass in. */ void *t1; void *t2; #endif /*HAVE_ORC*/ } VipsMorphSequence; #ifdef HAVE_ORC static void vips_morph_finalize(GObject *gobject) { VipsMorph *morph = (VipsMorph *) gobject; for (int i = 0; i < morph->n_pass; i++) VIPS_FREEF(orc_program_free, morph->pass[i].program); morph->n_pass = 0; G_OBJECT_CLASS(vips_morph_parent_class)->finalize(gobject); } #endif /*HAVE_ORC*/ /* Free a sequence value. */ static int vips_morph_stop(void *vseq, void *a, void *b) { VipsMorphSequence *seq = (VipsMorphSequence *) vseq; VIPS_UNREF(seq->ir); #ifdef HAVE_ORC VIPS_FREE(seq->t1); VIPS_FREE(seq->t2); #endif /*HAVE_ORC*/ return 0; } /* Morph start function. */ static void * vips_morph_start(VipsImage *out, void *a, void *b) { VipsImage *in = (VipsImage *) a; VipsMorph *morph = (VipsMorph *) b; VipsMorphSequence *seq; if (!(seq = VIPS_NEW(out, VipsMorphSequence))) return NULL; /* Init! */ seq->morph = morph; seq->ir = NULL; seq->soff = NULL; seq->ss = 0; seq->coff = NULL; seq->cs = 0; seq->last_bpl = -1; #ifdef HAVE_ORC seq->t1 = NULL; seq->t2 = NULL; #endif /*HAVE_ORC*/ seq->ir = vips_region_new(in); seq->soff = VIPS_ARRAY(out, morph->n_point, int); seq->coff = VIPS_ARRAY(out, morph->n_point, guint8); if (!seq->soff || !seq->coff) { vips_morph_stop(seq, in, morph); return NULL; } #ifdef HAVE_ORC /* Vector mode. */ if (morph->n_pass) { seq->t1 = VIPS_ARRAY(NULL, VIPS_IMAGE_N_ELEMENTS(in), VipsPel); seq->t2 = VIPS_ARRAY(NULL, VIPS_IMAGE_N_ELEMENTS(in), VipsPel); if (!seq->t1 || !seq->t2) { vips_morph_stop(seq, in, morph); return NULL; } } #endif /*HAVE_ORC*/ return seq; } #ifdef HAVE_HWY static int vips_dilate_vector_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsMorphSequence *seq = (VipsMorphSequence *) vseq; VipsMorph *morph = (VipsMorph *) b; VipsImage *M = morph->M; VipsRegion *ir = seq->ir; /* Offsets for each non-128 matrix element. */ int *soff = seq->soff; /* Array of non-128 mask coefficients. */ guint8 *coff = seq->coff; VipsRect *r = &out_region->valid; int sz = VIPS_REGION_N_ELEMENTS(out_region); VipsRect s; int x, y; guint8 *t; /* Prepare the section of the input image we need. A little larger * than the section of the output image we are producing. */ s = *r; s.width += M->Xsize - 1; s.height += M->Ysize - 1; if (vips_region_prepare(ir, &s)) return -1; #ifdef DEBUG_VERBOSE printf("vips_dilate_vector_gen: preparing %dx%d@%dx%d pixels\n", s.width, s.height, s.left, s.top); #endif /*DEBUG_VERBOSE*/ /* Scan mask, building offsets we check when processing. Only do this * if the bpl has changed since the previous vips_region_prepare(). */ if (seq->last_bpl != VIPS_REGION_LSKIP(ir)) { seq->last_bpl = VIPS_REGION_LSKIP(ir); /* Number of non-128 mask elements. */ seq->ss = 0; for (t = morph->coeff, y = 0; y < M->Ysize; y++) for (x = 0; x < M->Xsize; x++, t++) { /* Exclude don't-care elements. */ if (*t == 128) continue; soff[seq->ss] = VIPS_REGION_ADDR(ir, x + r->left, y + r->top) - VIPS_REGION_ADDR(ir, r->left, r->top); coff[seq->ss] = *t; seq->ss++; } } VIPS_GATE_START("vips_dilate_vector_gen: work"); vips_dilate_uchar_hwy(out_region, ir, r, sz, seq->ss, soff, coff); VIPS_GATE_STOP("vips_dilate_vector_gen: work"); VIPS_COUNT_PIXELS(out_region, "vips_dilate_vector_gen"); return 0; } static int vips_erode_vector_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsMorphSequence *seq = (VipsMorphSequence *) vseq; VipsMorph *morph = (VipsMorph *) b; VipsImage *M = morph->M; VipsRegion *ir = seq->ir; /* Offsets for each non-128 matrix element. */ int *soff = seq->soff; /* Array of non-128 mask coefficients. */ guint8 *coff = seq->coff; VipsRect *r = &out_region->valid; int sz = VIPS_REGION_N_ELEMENTS(out_region); VipsRect s; int x, y; guint8 *t; /* Prepare the section of the input image we need. A little larger * than the section of the output image we are producing. */ s = *r; s.width += M->Xsize - 1; s.height += M->Ysize - 1; if (vips_region_prepare(ir, &s)) return -1; #ifdef DEBUG_VERBOSE printf("vips_erode_vector_gen: preparing %dx%d@%dx%d pixels\n", s.width, s.height, s.left, s.top); #endif /*DEBUG_VERBOSE*/ /* Scan mask, building offsets we check when processing. Only do this * if the bpl has changed since the previous vips_region_prepare(). */ if (seq->last_bpl != VIPS_REGION_LSKIP(ir)) { seq->last_bpl = VIPS_REGION_LSKIP(ir); /* Number of non-128 mask elements. */ seq->ss = 0; for (t = morph->coeff, y = 0; y < M->Ysize; y++) for (x = 0; x < M->Xsize; x++, t++) { /* Exclude don't-care elements. */ if (*t == 128) continue; soff[seq->ss] = VIPS_REGION_ADDR(ir, x + r->left, y + r->top) - VIPS_REGION_ADDR(ir, r->left, r->top); coff[seq->ss] = *t; seq->ss++; } } VIPS_GATE_START("vips_erode_vector_gen: work"); vips_erode_uchar_hwy(out_region, ir, r, sz, seq->ss, soff, coff); VIPS_GATE_STOP("vips_erode_vector_gen: work"); VIPS_COUNT_PIXELS(out_region, "vips_erode_vector_gen"); return 0; } #elif defined(HAVE_ORC) #define TEMP(N, S) orc_program_add_temporary(p, S, N) #define SCANLINE(N, S) orc_program_add_source(p, S, N) #define CONST(N, V, S) orc_program_add_constant(p, S, V, N) #define ASM2(OP, A, B) orc_program_append_ds_str(p, OP, A, B) #define ASM3(OP, A, B, C) orc_program_append_str(p, OP, A, B, C) /* Generate code for a section of the mask. first is the index we start * at, we set last to the index of the last one we use before we run * out of intermediates / constants / parameters / sources or mask * coefficients. * * 0 for success, -1 on error. */ static int vips_morph_compile_section(VipsMorph *morph, Pass *pass, gboolean first_pass) { VipsMorphology *morphology = (VipsMorphology *) morph; VipsImage *M = morph->M; OrcProgram *p; OrcCompileResult result; int i; pass->program = p = orc_program_new(); pass->d1 = orc_program_add_destination(p, 1, "d1"); /* "r" is the result of the previous pass. */ if (!(pass->r = orc_program_add_source(p, 1, "r"))) return -1; /* The value we fetch from the image, the accumulated sum. */ TEMP("value", 1); TEMP("sum", 1); CONST("zero", 0, 1); CONST("one", 255, 1); /* Init the sum. If this is the first pass, it's a constant. If this * is a later pass, we have to init the sum from the result * of the previous pass. */ if (first_pass) { if (morph->morph == VIPS_OPERATION_MORPHOLOGY_DILATE) ASM2("copyb", "sum", "zero"); else ASM2("copyb", "sum", "one"); } else ASM2("loadb", "sum", "r"); for (i = pass->first; i < morph->n_point; i++) { int x = i % M->Xsize; int y = i / M->Xsize; char offset[256]; char source[256]; /* Exclude don't-care elements. */ if (morph->coeff[i] == 128) continue; /* The source. sl0 is the first scanline in the mask. */ vips_snprintf(source, 256, "sl%d", y); if (orc_program_find_var_by_name(p, source) == -1) { SCANLINE(source, 1); pass->line[pass->n_scanline] = y; pass->n_scanline++; } /* The offset, only for non-first-columns though. */ if (x > 0) { vips_snprintf(offset, 256, "c%db", x); if (orc_program_find_var_by_name(p, offset) == -1) CONST(offset, morphology->in->Bands * x, 1); ASM3("loadoffb", "value", source, offset); } else ASM2("loadb", "value", source); /* Join to our sum. If the mask element is zero, we have to * add an extra negate. */ if (morph->morph == VIPS_OPERATION_MORPHOLOGY_DILATE) { if (!morph->coeff[i]) ASM3("xorb", "value", "value", "one"); ASM3("orb", "sum", "sum", "value"); } else { if (!morph->coeff[i]) { /* You'd think we could use andnb, but it * fails on some machines with some orc * versions :( */ ASM3("xorb", "value", "value", "one"); ASM3("andb", "sum", "sum", "value"); } else ASM3("andb", "sum", "sum", "value"); } /* You can have 8 sources, and pass->r counts as one of them, * so +1 there. */ if (pass->n_scanline + 1 >= 7 /*ORC_MAX_SRC_VARS - 1*/) break; } pass->last = i; ASM2("copyb", "d1", "sum"); /* Some orcs seem to be unstable with many compilers active at once. */ g_mutex_lock(vips__global_lock); result = orc_program_compile(p); g_mutex_unlock(vips__global_lock); if (!ORC_COMPILE_RESULT_IS_SUCCESSFUL(result)) return -1; #ifdef DEBUG printf("done matrix coeffs %d to %d\n", pass->first, pass->last); #endif /*DEBUG*/ return 0; } /* Generate a set of passes. */ static int vips_morph_compile(VipsMorph *morph) { int i; Pass *pass; #ifdef DEBUG printf("vips_morph_compile: generating vector code\n"); #endif /*DEBUG*/ /* Generate passes until we've used up the whole mask. */ for (i = 0;;) { /* Skip any don't-care coefficients at the start of the mask * region. */ for (; i < morph->n_point && morph->coeff[i] == 128; i++) ; if (i == morph->n_point) break; /* Allocate space for another pass. */ if (morph->n_pass == MAX_PASS) return -1; pass = &morph->pass[morph->n_pass]; morph->n_pass += 1; pass->first = i; pass->last = i; pass->r = -1; pass->n_scanline = 0; if (vips_morph_compile_section(morph, pass, morph->n_pass == 1)) return -1; i = pass->last + 1; if (i >= morph->n_point) break; } return 0; } /* The vector codepath. */ static int vips_morph_gen_vector(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsMorphSequence *seq = (VipsMorphSequence *) vseq; VipsMorph *morph = (VipsMorph *) b; VipsImage *M = morph->M; VipsRegion *ir = seq->ir; VipsRect *r = &out_region->valid; int sz = VIPS_REGION_N_ELEMENTS(out_region); VipsRect s; int j, i, y; OrcExecutor executor[MAX_PASS]; /* Prepare the section of the input image we need. A little larger * than the section of the output image we are producing. */ s = *r; s.width += M->Xsize - 1; s.height += M->Ysize - 1; if (vips_region_prepare(ir, &s)) return -1; #ifdef DEBUG_VERBOSE printf("vips_morph_gen_vector: preparing %dx%d@%dx%d pixels\n", s.width, s.height, s.left, s.top); #endif /*DEBUG_VERBOSE*/ for (i = 0; i < morph->n_pass; i++) { orc_executor_set_program(&executor[i], morph->pass[i].program); orc_executor_set_n(&executor[i], sz); } VIPS_GATE_START("vips_morph_gen_vector: work"); for (y = 0; y < r->height; y++) { for (i = 0; i < morph->n_pass; i++) { Pass *pass = &morph->pass[i]; void *d; /* The last pass goes to the output image, * intermediate passes go to t2. */ if (i == morph->n_pass - 1) d = VIPS_REGION_ADDR(out_region, r->left, r->top + y); else d = seq->t2; for (j = 0; j < pass->n_scanline; j++) orc_executor_set_array(&executor[i], pass->r + 1 + j, VIPS_REGION_ADDR(ir, r->left, r->top + y + pass->line[j])); orc_executor_set_array(&executor[i], pass->r, seq->t1); orc_executor_set_array(&executor[i], pass->d1, d); orc_executor_run(&executor[i]); VIPS_SWAP(void *, seq->t1, seq->t2); } } VIPS_GATE_STOP("vips_morph_gen_vector: work"); VIPS_COUNT_PIXELS(out_region, "vips_morph_gen_vector"); return 0; } #endif /*HAVE_HWY*/ /* Dilate! */ static int vips_dilate_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsMorphSequence *seq = (VipsMorphSequence *) vseq; VipsMorph *morph = (VipsMorph *) b; VipsImage *M = morph->M; VipsRegion *ir = seq->ir; int *soff = seq->soff; guint8 *coff = seq->coff; VipsRect *r = &out_region->valid; int le = r->left; int to = r->top; int bo = VIPS_RECT_BOTTOM(r); int sz = VIPS_REGION_N_ELEMENTS(out_region); VipsRect s; int x, y; guint8 *t; int result, i; /* Prepare the section of the input image we need. A little larger * than the section of the output image we are producing. */ s = *r; s.width += M->Xsize - 1; s.height += M->Ysize - 1; if (vips_region_prepare(ir, &s)) return -1; #ifdef DEBUG_VERBOSE printf("vips_dilate_gen: preparing %dx%d@%dx%d pixels\n", s.width, s.height, s.left, s.top); #endif /*DEBUG_VERBOSE*/ /* Scan mask, building offsets we check when processing. Only do this * if the bpl has changed since the previous vips_region_prepare(). */ if (seq->last_bpl != VIPS_REGION_LSKIP(ir)) { seq->last_bpl = VIPS_REGION_LSKIP(ir); seq->ss = 0; seq->cs = 0; for (t = morph->coeff, y = 0; y < M->Ysize; y++) for (x = 0; x < M->Xsize; x++, t++) switch (*t) { case 255: soff[seq->ss++] = VIPS_REGION_ADDR(ir, x + le, y + to) - VIPS_REGION_ADDR(ir, le, to); break; case 128: break; case 0: coff[seq->cs++] = VIPS_REGION_ADDR(ir, x + le, y + to) - VIPS_REGION_ADDR(ir, le, to); break; default: g_assert_not_reached(); } } VIPS_GATE_START("vips_dilate_gen: work"); /* Dilate! */ for (y = to; y < bo; y++) { VipsPel *p = VIPS_REGION_ADDR(ir, le, y); VipsPel *q = VIPS_REGION_ADDR(out_region, le, y); /* Loop along line. */ for (x = 0; x < sz; x++, q++, p++) { /* Search for a hit on the set list. */ result = 0; for (i = 0; i < seq->ss; i++) if (p[soff[i]]) { /* Found a match! */ result = 255; break; } /* No set pixels ... search for a hit in the clear * pixels. */ if (!result) for (i = 0; i < seq->cs; i++) if (!p[coff[i]]) { /* Found a match! */ result = 255; break; } *q = result; } } VIPS_GATE_STOP("vips_dilate_gen: work"); VIPS_COUNT_PIXELS(out_region, "vips_dilate_gen"); return 0; } /* Erode! */ static int vips_erode_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsMorphSequence *seq = (VipsMorphSequence *) vseq; VipsMorph *morph = (VipsMorph *) b; VipsImage *M = morph->M; VipsRegion *ir = seq->ir; int *soff = seq->soff; guint8 *coff = seq->coff; VipsRect *r = &out_region->valid; int le = r->left; int to = r->top; int bo = VIPS_RECT_BOTTOM(r); int sz = VIPS_REGION_N_ELEMENTS(out_region); VipsRect s; int x, y; guint8 *t; int result, i; /* Prepare the section of the input image we need. A little larger * than the section of the output image we are producing. */ s = *r; s.width += M->Xsize - 1; s.height += M->Ysize - 1; if (vips_region_prepare(ir, &s)) return -1; #ifdef DEBUG_VERBOSE printf("vips_erode_gen: preparing %dx%d@%dx%d pixels\n", s.width, s.height, s.left, s.top); #endif /*DEBUG_VERBOSE*/ /* Scan mask, building offsets we check when processing. Only do this * if the bpl has changed since the previous vips_region_prepare(). */ if (seq->last_bpl != VIPS_REGION_LSKIP(ir)) { seq->last_bpl = VIPS_REGION_LSKIP(ir); seq->ss = 0; seq->cs = 0; for (t = morph->coeff, y = 0; y < M->Ysize; y++) for (x = 0; x < M->Xsize; x++, t++) switch (*t) { case 255: soff[seq->ss++] = VIPS_REGION_ADDR(ir, x + le, y + to) - VIPS_REGION_ADDR(ir, le, to); break; case 128: break; case 0: coff[seq->cs++] = VIPS_REGION_ADDR(ir, x + le, y + to) - VIPS_REGION_ADDR(ir, le, to); break; default: g_assert_not_reached(); } } VIPS_GATE_START("vips_erode_gen: work"); /* Erode! */ for (y = to; y < bo; y++) { VipsPel *p = VIPS_REGION_ADDR(ir, le, y); VipsPel *q = VIPS_REGION_ADDR(out_region, le, y); /* Loop along line. */ for (x = 0; x < sz; x++, q++, p++) { /* Check all set pixels are set. */ result = 255; for (i = 0; i < seq->ss; i++) if (!p[soff[i]]) { /* Found a mismatch! */ result = 0; break; } /* Check all clear pixels are clear. */ if (result) for (i = 0; i < seq->cs; i++) if (p[coff[i]]) { result = 0; break; } *q = result; } } VIPS_GATE_STOP("vips_erode_gen: work"); VIPS_COUNT_PIXELS(out_region, "vips_erode_gen"); return 0; } static int vips_morph_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsMorphology *morphology = (VipsMorphology *) object; VipsMorph *morph = (VipsMorph *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 5); VipsImage *in; VipsImage *M; VipsGenerateFn generate; double *coeff; int i; if (VIPS_OBJECT_CLASS(vips_morph_parent_class)->build(object)) return -1; in = morphology->in; /* Unpack for processing. */ if (vips_image_decode(in, &t[0])) return -1; in = t[0]; if (vips_check_matrix(class->nickname, morph->mask, &t[1])) return -1; morph->M = M = t[1]; morph->n_point = M->Xsize * M->Ysize; if (vips_embed(in, &t[2], M->Xsize / 2, M->Ysize / 2, in->Xsize + M->Xsize - 1, in->Ysize + M->Ysize - 1, "extend", VIPS_EXTEND_COPY, NULL)) return -1; in = t[2]; /* Make sure we are uchar. */ if (vips_cast(in, &t[3], VIPS_FORMAT_UCHAR, NULL)) return -1; in = t[3]; /* Make an int version of our mask. */ if (vips__image_intize(M, &t[4])) return -1; M = t[4]; coeff = VIPS_MATRIX(M, 0, 0); if (!(morph->coeff = VIPS_ARRAY(object, morph->n_point, guint8))) return -1; for (i = 0; i < morph->n_point; i++) { if (coeff[i] != 0 && coeff[i] != 128 && coeff[i] != 255) { vips_error(class->nickname, _("bad mask element (%f should be 0, 128 or 255)"), coeff[i]); return -1; } morph->coeff[i] = coeff[i]; } /* Try to make a vector path. */ #ifdef HAVE_HWY if (vips_vector_isenabled()) { generate = morph->morph == VIPS_OPERATION_MORPHOLOGY_DILATE ? vips_dilate_vector_gen : vips_erode_vector_gen; g_info("morph: using vector path"); } else #elif defined(HAVE_ORC) /* Generate code for this mask / image, if possible. */ if (vips_vector_isenabled() && !vips_morph_compile(morph)) { generate = vips_morph_gen_vector; g_info("morph: using vector path"); } else #endif /*HAVE_HWY*/ /* Default to the C path. */ generate = morph->morph == VIPS_OPERATION_MORPHOLOGY_DILATE ? vips_dilate_gen : vips_erode_gen; g_object_set(morph, "out", vips_image_new(), NULL); if (vips_image_pipelinev(morph->out, VIPS_DEMAND_STYLE_SMALLTILE, in, NULL)) return -1; /* Prepare output. Consider a 7x7 mask and a 7x7 image --- the output * would be 1x1. */ morph->out->Xsize -= M->Xsize - 1; morph->out->Ysize -= M->Ysize - 1; if (vips_image_generate(morph->out, vips_morph_start, generate, vips_morph_stop, in, morph)) return -1; morph->out->Xoffset = -M->Xsize / 2; morph->out->Yoffset = -M->Ysize / 2; vips_reorder_margin_hint(morph->out, morph->n_point); return 0; } static void vips_morph_class_init(VipsMorphClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; #ifdef HAVE_ORC gobject_class->finalize = vips_morph_finalize; #endif /*HAVE_ORC*/ object_class->nickname = "morph"; object_class->description = _("morphology operation"); object_class->build = vips_morph_build; VIPS_ARG_IMAGE(class, "out", 10, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsMorph, out)); VIPS_ARG_IMAGE(class, "mask", 20, _("Mask"), _("Input matrix image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMorph, mask)); VIPS_ARG_ENUM(class, "morph", 103, _("Morphology"), _("Morphological operation to perform"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMorph, morph), VIPS_TYPE_OPERATION_MORPHOLOGY, VIPS_OPERATION_MORPHOLOGY_ERODE); } static void vips_morph_init(VipsMorph *morph) { morph->morph = VIPS_OPERATION_MORPHOLOGY_ERODE; morph->coeff = NULL; } /** * vips_morph: (method) * @in: input image * @out: (out): output image * @mask: morphology with this mask * @morph: operation to perform * @...: %NULL-terminated list of optional named arguments * * Performs a morphological operation on @in using @mask as a * structuring element. * * The image should have 0 (black) for no object and 255 * (non-zero) for an object. Note that this is the reverse of the usual * convention for these operations, but more convenient when combined with the * boolean operators. The output image is the same * size as the input image: edge pxels are made by expanding the input image * as necessary. * * Mask coefficients can be either 0 (for object) or 255 (for background) * or 128 (for do not care). The origin of the mask is at location * (m.xsize / 2, m.ysize / 2), integer division. All algorithms have been * based on the book "Fundamentals of Digital Image Processing" by A. Jain, * pp 384-388, Prentice-Hall, 1989. * * For #VIPS_OPERATION_MORPHOLOGY_ERODE, * the whole mask must match for the output pixel to be * set, that is, the result is the logical AND of the selected input pixels. * * For #VIPS_OPERATION_MORPHOLOGY_DILATE, * the output pixel is set if any part of the mask * matches, that is, the result is the logical OR of the selected input pixels. * * See the boolean operations vips_andimage(), vips_orimage() and * vips_eorimage() * for analogues of the usual set difference and set union operations. * * Operations are performed using the processor's vector unit, * if possible. Disable this with `--vips-novector` or `VIPS_NOVECTOR` or * vips_vector_set_enabled() * * Returns: 0 on success, -1 on error */ int vips_morph(VipsImage *in, VipsImage **out, VipsImage *mask, VipsOperationMorphology morph, ...) { va_list ap; int result; va_start(ap, morph); result = vips_call_split("morph", ap, in, out, mask, morph); va_end(ap); return result; } libvips-8.15.1/libvips/morphology/morph_hwy.cpp000066400000000000000000000111361454007373500216570ustar00rootroot00000000000000/* 24/08/22 kleisauke * - initial implementation * 20/08/23 kleisauke * - speed-up implementation */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "pmorphology.h" #ifdef HAVE_HWY #undef HWY_TARGET_INCLUDE #define HWY_TARGET_INCLUDE "libvips/morphology/morph_hwy.cpp" #include #include namespace HWY_NAMESPACE { using namespace hwy::HWY_NAMESPACE; using DU8 = ScalableTag; constexpr DU8 du8; HWY_ATTR void vips_dilate_uchar_hwy(VipsRegion *out_region, VipsRegion *ir, VipsRect *r, int32_t sz, int32_t nn128, const int32_t *HWY_RESTRICT offsets, const uint8_t *HWY_RESTRICT coeff) { int32_t bo = VIPS_RECT_BOTTOM(r); const int32_t N = Lanes(du8); const auto zero = Zero(du8); const auto one = Set(du8, 255); for (int32_t y = r->top; y < bo; ++y) { VipsPel *HWY_RESTRICT p = VIPS_REGION_ADDR(ir, r->left, y); VipsPel *HWY_RESTRICT q = VIPS_REGION_ADDR(out_region, r->left, y); /* Main loop: unrolled. */ int32_t x = 0; for (; x + N <= sz; x += N) { auto sum = zero; for (int32_t i = 0; i < nn128; ++i) { auto mmk = Set(du8, coeff[i]); /* Load with an offset. */ auto pix = LoadU(du8, p + offsets[i]); pix = IfThenElse(Ne(mmk, one), Xor(pix, one), pix); sum = Or(sum, pix); } StoreU(sum, du8, q + x); p += N; } /* `ne` was not a multiple of the vector length `N`; * proceed one by one. */ for (; x < sz; ++x) { auto sum = zero; for (int32_t i = 0; i < nn128; ++i) { /* Load with an offset. */ auto pix = LoadU(du8, p + offsets[i]); if (!coeff[i]) pix = Xor(pix, one); sum = Or(sum, pix); } q[x] = GetLane(sum); p += 1; } } } HWY_ATTR void vips_erode_uchar_hwy(VipsRegion *out_region, VipsRegion *ir, VipsRect *r, int32_t sz, int32_t nn128, const int32_t *HWY_RESTRICT offsets, const uint8_t *HWY_RESTRICT coeff) { int32_t bo = VIPS_RECT_BOTTOM(r); const int32_t N = Lanes(du8); const auto one = Set(du8, 255); for (int32_t y = r->top; y < bo; ++y) { VipsPel *HWY_RESTRICT p = VIPS_REGION_ADDR(ir, r->left, y); VipsPel *HWY_RESTRICT q = VIPS_REGION_ADDR(out_region, r->left, y); /* Main loop: unrolled. */ int32_t x = 0; for (; x + N <= sz; x += N) { auto sum = one; for (int32_t i = 0; i < nn128; ++i) { auto mmk = Set(du8, coeff[i]); /* Load with an offset. */ auto pix = LoadU(du8, p + offsets[i]); sum = IfThenElse(Ne(mmk, one), AndNot(pix, one), And(sum, pix)); } StoreU(sum, du8, q + x); p += N; } /* `ne` was not a multiple of the vector length `N`; * proceed one by one. */ for (; x < sz; ++x) { auto sum = one; for (int32_t i = 0; i < nn128; ++i) { /* Load with an offset. */ auto pix = LoadU(du8, p + offsets[i]); sum = !coeff[i] ? AndNot(pix, one) : And(sum, pix); } q[x] = GetLane(sum); p += 1; } } } } /*namespace HWY_NAMESPACE*/ #if HWY_ONCE HWY_EXPORT(vips_dilate_uchar_hwy); HWY_EXPORT(vips_erode_uchar_hwy); void vips_dilate_uchar_hwy(VipsRegion *out_region, VipsRegion *ir, VipsRect *r, int sz, int nn128, int *restrict offsets, guint8 *restrict coeff) { /* clang-format off */ HWY_DYNAMIC_DISPATCH(vips_dilate_uchar_hwy)(out_region, ir, r, sz, nn128, offsets, coeff); /* clang-format on */ } void vips_erode_uchar_hwy(VipsRegion *out_region, VipsRegion *ir, VipsRect *r, int sz, int nn128, int *restrict offsets, guint8 *restrict coeff) { /* clang-format off */ HWY_DYNAMIC_DISPATCH(vips_erode_uchar_hwy)(out_region, ir, r, sz, nn128, offsets, coeff); /* clang-format on */ } #endif /*HWY_ONCE*/ #endif /*HAVE_HWY*/ libvips-8.15.1/libvips/morphology/morphology.c000066400000000000000000000110111454007373500214720ustar00rootroot00000000000000/* base class for all morphological operations * * properties: * - one input image */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "pmorphology.h" /** * SECTION: morphology * @short_description: morphological operators, rank filters and related image * analysis * @see_also: arithmetic * @stability: Stable * @include: vips/vips.h * * The morphological functions search images * for particular patterns of pixels, specified with the mask argument, * either adding or removing pixels when they find a match. They are useful * for cleaning up images --- for example, you might threshold an image, and * then use one of the morphological functions to remove all single isolated * pixels from the result. * * If you combine the morphological operators with the mask rotators * (vips_rot45(), for example) and apply them repeatedly, you * can achieve very complicated effects: you can thin, prune, fill, open edges, * close gaps, and many others. For example, see `Fundamentals of Digital * Image Processing' by A. Jain, pp 384-388, Prentice-Hall, 1989 for more * ideas. * * Beware that VIPS reverses the usual image processing convention, by * assuming white objects (non-zero pixels) on a black background (zero * pixels). * * The mask you give to the morphological functions should contain only the * values 0 (for background), 128 (for don't care) and 255 (for object). The * mask must have odd length sides --- the origin of the mask is taken to be * the centre value. For example, the mask: * * VipsImage *mask = vips_image_new_matrixv(3, 3, * 128.0, 255.0, 128.0, * 255.0, 255.0, 255.0, * 128.0, 255.0, 128.0); * * applied to an image with vips_morph() #VIPS_OPERATION_MORPHOLOGY_DILATE will * do a 4-connected dilation. * * Dilate sets pixels in the output if any part of the mask matches, whereas * erode sets pixels only if all of the mask matches. * * See vips_andimage(), vips_orimage() and vips_eorimage() * for analogues of the usual set difference and set union operations. * * Use vips_image_new_matrixv() to create a mask in source, vips_matrixload() * to load a mask from a simple text file, and vips_mask_ideal() and friends to * create square, circular and ring masks of specific sizes. */ G_DEFINE_ABSTRACT_TYPE(VipsMorphology, vips_morphology, VIPS_TYPE_OPERATION); static void vips_morphology_class_init(VipsMorphologyClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "morphology"; vobject_class->description = _("morphological operations"); /* Inputs set by subclassess. */ VIPS_ARG_IMAGE(class, "in", 0, _("Input"), _("Input image argument"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMorphology, in)); } static void vips_morphology_init(VipsMorphology *morphology) { } /* Called from iofuncs to init all operations in this dir. Use a plugin system * instead? */ void vips_morphology_operation_init(void) { extern GType vips_morph_get_type(void); extern GType vips_rank_get_type(void); extern GType vips_countlines_get_type(void); extern GType vips_labelregions_get_type(void); extern GType vips_fill_nearest_get_type(void); vips_morph_get_type(); vips_rank_get_type(); vips_countlines_get_type(); vips_labelregions_get_type(); vips_fill_nearest_get_type(); } libvips-8.15.1/libvips/morphology/nearest.c000066400000000000000000000212171454007373500207450ustar00rootroot00000000000000/* nearest.c * * 31/10/17 * - from labelregion */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pmorphology.h" /* A seed pixel. We fill outwards from each of these. */ typedef struct _Seed { int x; int y; int r; /* Bits saying which octant can still grow. When they are all zero, the * seed is dead. */ int octant_mask; } Seed; typedef struct _VipsFillNearest { VipsMorphology parent_instance; VipsImage *out; VipsImage *distance; /* Size of our image. */ int width; int height; /* All our seed pixels. There can be a lot of these. */ GArray *seeds; } VipsFillNearest; typedef VipsMorphologyClass VipsFillNearestClass; G_DEFINE_TYPE(VipsFillNearest, vips_fill_nearest, VIPS_TYPE_MORPHOLOGY); static void vips_fill_nearest_finalize(GObject *gobject) { VipsFillNearest *nearest = (VipsFillNearest *) gobject; #ifdef DEBUG printf("vips_fill_nearest_finalize: "); vips_object_print_name(VIPS_OBJECT(gobject)); printf("\n"); #endif /*DEBUG*/ VIPS_FREEF(g_array_unref, nearest->seeds); G_OBJECT_CLASS(vips_fill_nearest_parent_class)->finalize(gobject); } struct _Circle; typedef void (*VipsFillNearestPixel)(struct _Circle *circle, int x, int y, int octant); typedef struct _Circle { VipsFillNearest *nearest; Seed *seed; int octant_mask; VipsFillNearestPixel nearest_pixel; } Circle; static void vips_fill_nearest_pixel(Circle *circle, int x, int y, int octant) { float *p; float radius; int dx, dy; if ((circle->seed->octant_mask & (1 << octant)) == 0) return; /* We need to do this as float, or we'll have dithering along edges. */ p = (float *) VIPS_IMAGE_ADDR(circle->nearest->distance, x, y); dx = x - circle->seed->x; dy = y - circle->seed->y; radius = sqrt(dx * dx + dy * dy); if (p[0] == 0 || p[0] > radius) { VipsMorphology *morphology = VIPS_MORPHOLOGY(circle->nearest); VipsImage *in = morphology->in; int ps = VIPS_IMAGE_SIZEOF_PEL(in); VipsPel *pi = VIPS_IMAGE_ADDR(in, circle->seed->x, circle->seed->y); VipsPel *qi = VIPS_IMAGE_ADDR(circle->nearest->out, x, y); int i; p[0] = radius; circle->octant_mask |= 1 << octant; for (i = 0; i < ps; i++) qi[i] = pi[i]; } } static void vips_fill_nearest_pixel_clip(Circle *circle, int x, int y, int octant) { if ((circle->seed->octant_mask & (1 << octant)) == 0) return; if (x >= 0 && x < circle->nearest->width && y >= 0 && y < circle->nearest->height) vips_fill_nearest_pixel(circle, x, y, octant); } static void vips_fill_nearest_scanline(VipsImage *image, int y, int x1, int x2, int quadrant, void *client) { Circle *circle = (Circle *) client; circle->nearest_pixel(circle, x1, y, quadrant); circle->nearest_pixel(circle, x2, y, quadrant + 4); /* We have to do one point back as well, or we'll leave gaps at * around 45 degrees. */ if (quadrant == 0) { circle->nearest_pixel(circle, x1, y - 1, quadrant); circle->nearest_pixel(circle, x2, y - 1, quadrant + 4); } else if (quadrant == 1) { circle->nearest_pixel(circle, x1, y + 1, quadrant); circle->nearest_pixel(circle, x2, y + 1, quadrant + 4); } else { circle->nearest_pixel(circle, x1 + 1, y, quadrant); circle->nearest_pixel(circle, x2 - 1, y, quadrant + 4); } } static void vips_fill_nearest_grow_seed(VipsFillNearest *nearest, Seed *seed) { Circle circle; circle.nearest = nearest; circle.seed = seed; circle.octant_mask = 0; if (seed->x - seed->r >= 0 && seed->x + seed->r < nearest->width && seed->y - seed->r >= 0 && seed->y + seed->r < nearest->height) circle.nearest_pixel = vips_fill_nearest_pixel; else circle.nearest_pixel = vips_fill_nearest_pixel_clip; vips__draw_circle_direct(nearest->distance, seed->x, seed->y, seed->r, vips_fill_nearest_scanline, &circle); /* Update the action_mask for this seed. Next time, we can skip any * octants where we failed to act this time. */ seed->octant_mask = circle.octant_mask; seed->r += 1; } static int vips_fill_nearest_build(VipsObject *object) { VipsMorphology *morphology = VIPS_MORPHOLOGY(object); VipsFillNearest *nearest = (VipsFillNearest *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); int ps; int x, y, i; if (VIPS_OBJECT_CLASS(vips_fill_nearest_parent_class)->build(object)) return -1; if (vips_image_wio_input(morphology->in)) return -1; nearest->width = morphology->in->Xsize; nearest->height = morphology->in->Ysize; ps = VIPS_IMAGE_SIZEOF_PEL(morphology->in); nearest->seeds = g_array_new(FALSE, FALSE, sizeof(Seed)); for (y = 0; y < nearest->height; y++) { VipsPel *p; p = VIPS_IMAGE_ADDR(morphology->in, 0, y); for (x = 0; x < nearest->width; x++) { for (i = 0; i < ps; i++) if (p[i]) break; if (i != ps) { Seed *seed; g_array_set_size(nearest->seeds, nearest->seeds->len + 1); seed = &g_array_index(nearest->seeds, Seed, nearest->seeds->len - 1); seed->x = x; seed->y = y; seed->r = 1; seed->octant_mask = 255; } p += ps; } } /* Create the output and distance images in memory. */ g_object_set(object, "distance", vips_image_new_memory(), NULL); if (vips_black(&t[1], nearest->width, nearest->height, NULL) || vips_cast(t[1], &t[2], VIPS_FORMAT_FLOAT, NULL) || vips_image_write(t[2], nearest->distance)) return -1; g_object_set(object, "out", vips_image_new_memory(), NULL); if (vips_image_write(morphology->in, nearest->out)) return -1; while (nearest->seeds->len > 0) { #ifdef DEBUG printf("looping for %d seeds ...\n", nearest->seeds->len); #endif /*DEBUG*/ /* Grow all seeds by one pixel. */ for (i = 0; i < nearest->seeds->len; i++) vips_fill_nearest_grow_seed(nearest, &g_array_index(nearest->seeds, Seed, i)); /* Remove dead seeds. */ i = 0; while (i < nearest->seeds->len) { Seed *seed = &g_array_index(nearest->seeds, Seed, i); if (seed->octant_mask == 0) g_array_remove_index_fast(nearest->seeds, i); else i += 1; } } return 0; } static void vips_fill_nearest_class_init(VipsFillNearestClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->finalize = vips_fill_nearest_finalize; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "fill_nearest"; vobject_class->description = _("fill image zeros with nearest non-zero pixel"); vobject_class->build = vips_fill_nearest_build; VIPS_ARG_IMAGE(class, "out", 2, _("Out"), _("Value of nearest non-zero pixel"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsFillNearest, out)); VIPS_ARG_IMAGE(class, "distance", 3, _("Distance"), _("Distance to nearest non-zero pixel"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsFillNearest, distance)); } static void vips_fill_nearest_init(VipsFillNearest *nearest) { } /** * vips_fill_nearest: (method) * @in: image to test * @out: image with zero pixels filled with the nearest non-zero pixel * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @distance: output image of distance to nearest non-zero pixel * * Fill outwards from every non-zero pixel in @in, setting pixels in @distance * and @value. * * At the position of zero pixels in @in, @distance contains the distance to * the nearest non-zero pixel in @in, and @value contains the value of that * pixel. * * @distance is a one-band float image. @value has the same number of bands and * format as @in. * * See also: vips_hist_find_indexed(). * * Returns: 0 on success, -1 on error. */ int vips_fill_nearest(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("fill_nearest", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/morphology/pmorphology.h000066400000000000000000000043211454007373500216650ustar00rootroot00000000000000/* base class for all morphology operations */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_PMORPHOLOGY_H #define VIPS_PMORPHOLOGY_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #define VIPS_TYPE_MORPHOLOGY (vips_morphology_get_type()) #define VIPS_MORPHOLOGY(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_MORPHOLOGY, VipsMorphology)) #define VIPS_MORPHOLOGY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_MORPHOLOGY, VipsMorphologyClass)) #define VIPS_IS_MORPHOLOGY(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_MORPHOLOGY)) #define VIPS_IS_MORPHOLOGY_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_MORPHOLOGY)) #define VIPS_MORPHOLOGY_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_MORPHOLOGY, VipsMorphologyClass)) typedef struct _VipsMorphology VipsMorphology; struct _VipsMorphology { VipsOperation parent_instance; VipsImage *in; }; typedef struct _VipsMorphologyClass { VipsOperationClass parent_class; } VipsMorphologyClass; GType vips_morphology_get_type(void); void vips_dilate_uchar_hwy(VipsRegion *out_region, VipsRegion *ir, VipsRect *r, int sz, int nn128, int *restrict offsets, guint8 *restrict coeff); void vips_erode_uchar_hwy(VipsRegion *out_region, VipsRegion *ir, VipsRect *r, int sz, int nn128, int *restrict offsets, guint8 *restrict coeff); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_PMORPHOLOGY_H*/ libvips-8.15.1/libvips/morphology/rank.c000066400000000000000000000353511454007373500202430ustar00rootroot00000000000000/* Rank filter. * * Author: JC * Written on: 19/8/96 * Modified on: * JC 20/8/96 * - now uses insert-sort rather than bubble-sort * - now works for any non-complex type * JC 22/6/01 * - oops, sanity check on n wrong * JC 28/8/03 * - cleanups * - better selection algorithm ... same speed for 3x3, about 3x faster * for 5x5, faster still for larger windows * - index from zero for consistency with other parts of vips * 7/4/04 * - now uses im_embed() with edge stretching on the input, not * the output * - sets Xoffset / Yoffset * 7/10/04 * - oops, im_embed() size was wrong * 10/11/10 * - cleanups * - gtk-doc * 17/1/14 * - redone as a class * 12/11/16 * - oop, allow index == 0, thanks Rob * 12/1/21 * - add hist path for large windows on uchar images */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pmorphology.h" typedef struct _VipsRank { VipsMorphology parent_instance; VipsImage *out; int width; int height; int index; int n; gboolean hist_path; } VipsRank; typedef VipsMorphologyClass VipsRankClass; G_DEFINE_TYPE(VipsRank, vips_rank, VIPS_TYPE_MORPHOLOGY); /* Sequence value: just the array we sort in. */ typedef struct { VipsRegion *ir; /* Sort array. */ VipsPel *sort; /* For large uchar images, the sort histogram. */ unsigned int **hist; } VipsRankSequence; static int vips_rank_stop(void *vseq, void *a, void *b) { VipsRankSequence *seq = (VipsRankSequence *) vseq; VipsImage *in = (VipsImage *) a; VIPS_UNREF(seq->ir); VIPS_FREE(seq->sort); if (seq->hist && in) { int i; for (i = 0; i < in->Bands; i++) VIPS_FREE(seq->hist[i]); } VIPS_FREE(seq->hist); return 0; } static void * vips_rank_start(VipsImage *out, void *a, void *b) { VipsImage *in = (VipsImage *) a; VipsRank *rank = (VipsRank *) b; VipsRankSequence *seq; if (!(seq = VIPS_NEW(out, VipsRankSequence))) return NULL; seq->ir = NULL; seq->sort = NULL; seq->hist = NULL; seq->ir = vips_region_new(in); if (!(seq->sort = VIPS_ARRAY(NULL, VIPS_IMAGE_SIZEOF_ELEMENT(in) * rank->n, VipsPel))) { vips_rank_stop(seq, in, rank); return NULL; } if (rank->hist_path) { int i; if (!(seq->hist = VIPS_ARRAY(NULL, in->Bands, unsigned int *))) { vips_rank_stop(seq, in, rank); return NULL; } for (i = 0; i < in->Bands; i++) if (!(seq->hist[i] = VIPS_ARRAY(NULL, 256, unsigned int))) { vips_rank_stop(seq, in, rank); return NULL; } } return (void *) seq; } /* Histogram path for large uchar ranks. */ static void vips_rank_generate_uchar(VipsRegion *out_region, VipsRankSequence *seq, VipsRank *rank, int y) { VipsImage *in = seq->ir->im; VipsRect *r = &out_region->valid; const int bands = in->Bands; const int last = bands * (rank->width - 1); /* Get input and output pointers for this line. */ VipsPel *restrict p = VIPS_REGION_ADDR(seq->ir, r->left, r->top + y); VipsPel *restrict q = VIPS_REGION_ADDR(out_region, r->left, r->top + y); VipsPel *restrict p1; int lsk; int x, i, j, b; lsk = VIPS_REGION_LSKIP(seq->ir); /* Find histogram for the first output pixel. */ for (b = 0; b < bands; b++) memset(seq->hist[b], 0, 256 * sizeof(unsigned int)); p1 = p; for (j = 0; j < rank->height; j++) { for (i = 0, x = 0; x < rank->width; x++) for (b = 0; b < bands; b++, i++) seq->hist[b][p1[i]] += 1; p1 += lsk; } /* Loop for output pels. */ for (x = 0; x < r->width; x++) { for (b = 0; b < bands; b++) { /* Calculate cumulative histogram -- the value is the * index at which we pass the rank. */ unsigned int *restrict hist = seq->hist[b]; int sum; int i; sum = 0; for (i = 0; i < 256; i++) { sum += hist[i]; if (sum > rank->index) break; } q[b] = i; /* Adapt histogram --- remove the pels from * the left hand column, add in pels for a * new right-hand column. */ p1 = p + b; for (j = 0; j < rank->height; j++) { hist[p1[0]] -= 1; hist[p1[last]] += 1; p1 += lsk; } } p += bands; q += bands; } } /* Inner loop for select-sorting TYPE. */ #define LOOP_SELECT(TYPE) \ { \ TYPE *q = (TYPE *) VIPS_REGION_ADDR(out_region, r->left, r->top + y); \ TYPE *p = (TYPE *) VIPS_REGION_ADDR(ir, r->left, r->top + y); \ TYPE *sort = (TYPE *) seq->sort; \ TYPE a; \ \ for (x = 0; x < sz; x++) { \ TYPE *d = p + x; \ \ /* Copy window into sort[]. \ */ \ for (k = 0, j = 0; j < rank->height; j++) { \ for (i = 0; i < eaw; i += bands, k++) \ sort[k] = d[i]; \ d += ls; \ } \ \ /* Rearrange sort[] to make the index-th element the index-th \ * smallest, adapted from Numerical Recipes in C. \ */ \ lower = 0; /* Range we know the result lies in */ \ upper = rank->n - 1; \ for (;;) { \ if (upper - lower < 2) { \ /* 1 or 2 elements left. \ */ \ if (upper - lower == 1 && \ sort[lower] > sort[upper]) \ VIPS_SWAP(TYPE, \ sort[lower], sort[upper]); \ break; \ } \ else { \ /* Pick mid-point of remaining elements. \ */ \ mid = (lower + upper) >> 1; \ \ /* Sort lower/mid/upper elements, hold \ * midpoint in sort[lower + 1] for \ * partitioning. \ */ \ VIPS_SWAP(TYPE, sort[lower + 1], sort[mid]); \ if (sort[lower] > sort[upper]) \ VIPS_SWAP(TYPE, \ sort[lower], sort[upper]); \ if (sort[lower + 1] > sort[upper]) \ VIPS_SWAP(TYPE, \ sort[lower + 1], sort[upper]); \ if (sort[lower] > sort[lower + 1]) \ VIPS_SWAP(TYPE, \ sort[lower], sort[lower + 1]); \ \ i = lower + 1; \ j = upper; \ a = sort[lower + 1]; \ \ for (;;) { \ /* Search for out of order elements. \ */ \ do \ i++; \ while (sort[i] < a); \ do \ j--; \ while (sort[j] > a); \ if (j < i) \ break; \ VIPS_SWAP(TYPE, sort[i], sort[j]); \ } \ \ /* Replace mid element. \ */ \ sort[lower + 1] = sort[j]; \ sort[j] = a; \ \ /* Move to partition with the kth element. \ */ \ if (j >= rank->index) \ upper = j - 1; \ if (j <= rank->index) \ lower = i; \ } \ } \ \ q[x] = sort[rank->index]; \ } \ } /* Loop for find max of window. */ #define LOOP_MAX(TYPE) \ { \ TYPE *q = (TYPE *) VIPS_REGION_ADDR(out_region, r->left, r->top + y); \ TYPE *p = (TYPE *) VIPS_REGION_ADDR(ir, r->left, r->top + y); \ \ for (x = 0; x < sz; x++) { \ TYPE *d = &p[x]; \ TYPE max; \ \ max = *d; \ for (j = 0; j < rank->height; j++) { \ TYPE *e = d; \ \ for (i = 0; i < rank->width; i++) { \ if (*e > max) \ max = *e; \ \ e += bands; \ } \ \ d += ls; \ } \ \ q[x] = max; \ } \ } /* Loop for find min of window. */ #define LOOP_MIN(TYPE) \ { \ TYPE *q = (TYPE *) VIPS_REGION_ADDR(out_region, r->left, r->top + y); \ TYPE *p = (TYPE *) VIPS_REGION_ADDR(ir, r->left, r->top + y); \ \ for (x = 0; x < sz; x++) { \ TYPE *d = &p[x]; \ TYPE min; \ \ min = *d; \ for (j = 0; j < rank->height; j++) { \ TYPE *e = d; \ \ for (i = 0; i < rank->width; i++) { \ if (*e < min) \ min = *e; \ \ e += bands; \ } \ \ d += ls; \ } \ \ q[x] = min; \ } \ } #define SWITCH(OPERATION) \ switch (rank->out->BandFmt) { \ case VIPS_FORMAT_UCHAR: \ OPERATION(unsigned char); \ break; \ case VIPS_FORMAT_CHAR: \ OPERATION(signed char); \ break; \ case VIPS_FORMAT_USHORT: \ OPERATION(unsigned short); \ break; \ case VIPS_FORMAT_SHORT: \ OPERATION(signed short); \ break; \ case VIPS_FORMAT_UINT: \ OPERATION(unsigned int); \ break; \ case VIPS_FORMAT_INT: \ OPERATION(signed int); \ break; \ case VIPS_FORMAT_FLOAT: \ OPERATION(float); \ break; \ case VIPS_FORMAT_DOUBLE: \ OPERATION(double); \ break; \ \ default: \ g_assert_not_reached(); \ } static int vips_rank_generate(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsRect *r = &out_region->valid; VipsRankSequence *seq = (VipsRankSequence *) vseq; VipsRegion *ir = seq->ir; VipsImage *in = (VipsImage *) a; VipsRank *rank = (VipsRank *) b; int bands = in->Bands; int eaw = rank->width * bands; /* elements across window */ int sz = VIPS_REGION_N_ELEMENTS(out_region); VipsRect s; int ls; int x, y; int i, j, k; int upper, lower, mid; /* Prepare the section of the input image we need. A little larger * than the section of the output image we are producing. */ s = *r; s.width += rank->width - 1; s.height += rank->height - 1; if (vips_region_prepare(ir, &s)) return -1; ls = VIPS_REGION_LSKIP(ir) / VIPS_IMAGE_SIZEOF_ELEMENT(in); for (y = 0; y < r->height; y++) { if (rank->hist_path) vips_rank_generate_uchar(out_region, seq, rank, y); else if (rank->index == 0) SWITCH(LOOP_MIN) else if (rank->index == rank->n - 1) SWITCH(LOOP_MAX) else SWITCH(LOOP_SELECT) } return 0; } static int vips_rank_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsMorphology *morphology = VIPS_MORPHOLOGY(object); VipsRank *rank = (VipsRank *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 3); VipsImage *in; if (VIPS_OBJECT_CLASS(vips_rank_parent_class)->build(object)) return -1; in = morphology->in; if (vips_image_decode(in, &t[0])) return -1; in = t[0]; if (vips_check_noncomplex(class->nickname, in)) return -1; if (rank->width > in->Xsize || rank->height > in->Ysize) { vips_error(class->nickname, "%s", _("window too large")); return -1; } rank->n = rank->width * rank->height; if (rank->index < 0 || rank->index > rank->n - 1) { vips_error(class->nickname, "%s", _("index out of range")); return -1; } /* Enable the hist path if it'll probably help. */ if (in->BandFmt == VIPS_FORMAT_UCHAR) { /* The hist path is always faster for windows larger than about * 10x10, and faster for >3x3 on the non-max/min case. */ if (rank->n > 90) rank->hist_path = TRUE; else if (rank->n > 10 && rank->index != 0 && rank->index != rank->n - 1) rank->hist_path = TRUE; } /* Expand the input. */ if (vips_embed(in, &t[1], rank->width / 2, rank->height / 2, in->Xsize + rank->width - 1, in->Ysize + rank->height - 1, "extend", VIPS_EXTEND_COPY, NULL)) return -1; in = t[1]; g_object_set(object, "out", vips_image_new(), NULL); /* Set demand hints. FATSTRIP is good for us, as THINSTRIP will cause * too many recalculations on overlaps. */ if (vips_image_pipelinev(rank->out, VIPS_DEMAND_STYLE_FATSTRIP, in, NULL)) return -1; rank->out->Xsize -= rank->width - 1; rank->out->Ysize -= rank->height - 1; if (vips_image_generate(rank->out, vips_rank_start, vips_rank_generate, vips_rank_stop, in, rank)) return -1; rank->out->Xoffset = 0; rank->out->Yoffset = 0; vips_reorder_margin_hint(rank->out, rank->width * rank->height); return 0; } static void vips_rank_class_init(VipsRankClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "rank"; object_class->description = _("rank filter"); object_class->build = vips_rank_build; VIPS_ARG_IMAGE(class, "out", 2, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsRank, out)); VIPS_ARG_INT(class, "width", 4, _("Width"), _("Window width in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsRank, width), 1, 100000, 11); VIPS_ARG_INT(class, "height", 5, _("Height"), _("Window height in pixels"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsRank, height), 1, 100000, 11); VIPS_ARG_INT(class, "index", 6, _("Index"), _("Select pixel at index"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsRank, index), 0, 100000000, 50); } static void vips_rank_init(VipsRank *rank) { rank->width = 11; rank->height = 11; rank->index = 50; } /** * vips_rank: (method) * @in: input image * @out: (out): output image * @width: width of region * @height: height of region * @index: select pixel * @...: %NULL-terminated list of optional named arguments * * vips_rank() does rank filtering on an image. A window of size @width by * @height is passed over the image. At each position, the pixels inside the * window are sorted into ascending order and the pixel at position @index is * output. @index numbers from 0. * * It works for any non-complex image type, with any number of bands. * The input is expanded by copying edge pixels before performing the * operation so that the output image has the same size as the input. * Edge pixels in the output image are therefore only approximate. * * For a median filter with mask size m (3 for 3x3, 5 for 5x5, etc.) use * * vips_rank(in, out, m, m, m * m / 2); * * The special cases n == 0 and n == m * m - 1 are useful dilate and * expand operators. * * See also: vips_conv(), vips_median(), vips_spcor(). * * Returns: 0 on success, -1 on error */ int vips_rank(VipsImage *in, VipsImage **out, int width, int height, int index, ...) { va_list ap; int result; va_start(ap, index); result = vips_call_split("rank", ap, in, out, width, height, index); va_end(ap); return result; } /** * vips_median: (method) * @in: input image * @out: (out): output image * @size: size of region * @...: %NULL-terminated list of optional named arguments * * A convenience function equivalent to: * * vips_rank(in, out, size, size, (size * size) / 2); * * See also: vips_rank(). * * Returns: 0 on success, -1 on error */ int vips_median(VipsImage *in, VipsImage **out, int size, ...) { va_list ap; int result; va_start(ap, size); result = vips_call_split("rank", ap, in, out, size, size, (size * size) / 2); va_end(ap); return result; } libvips-8.15.1/libvips/mosaicing/000077500000000000000000000000001454007373500167075ustar00rootroot00000000000000libvips-8.15.1/libvips/mosaicing/chkpair.c000066400000000000000000000131751454007373500205030ustar00rootroot00000000000000/* find image overlaps * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 02/05/1990 * Modified on : 18/04/1991 * 8/7/93 JC * - allows IM_CODING_LABQ coding * - now calls im_incheck() * 13/7/95 JC * - rewritten * - now uses im_spcor() * 13/8/96 JC * - order of args changed to help C++ API * 24/1/11 * - gtk-doc * 18/6/20 kleisauke * - convert to vips8 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pmosaicing.h" /* vips__correl: * @ref: reference image * @sec: secondary image * @xref: position in reference image * @yref: position in reference image * @xsec: position in secondary image * @ysec: position in secondary image * @hwindowsize: half window size * @hsearchsize: half search size * @correlation: return detected correlation * @x: return found position * @y: return found position * * This operation finds the position of @sec within @ref. * * The area around * (@xsec, @ysec) is searched for the best match to the area around (@xref, * @yref). It searches an area of size @hsearchsize for a * match of size @hwindowsize. The position of the best match is * returned, together with the correlation at that point. * * Only the first band of each image is correlated. @ref and @sec may be * very large --- the function extracts and generates just the * parts needed. Correlation is done with vips_spcor(); the position of * the maximum is found with vips_max(). * * See also: vips_match(), vips__lrmosaic(). * * Returns: 0 on success, -1 on error */ int vips__correl(VipsImage *ref, VipsImage *sec, int xref, int yref, int xsec, int ysec, int hwindowsize, int hsearchsize, double *correlation, int *x, int *y) { VipsImage *surface = vips_image_new(); VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(surface), 5); VipsRect refr, secr; VipsRect winr, srhr; VipsRect wincr, srhcr; /* Find position of window and search area, and clip against image * size. */ refr.left = 0; refr.top = 0; refr.width = ref->Xsize; refr.height = ref->Ysize; winr.left = xref - hwindowsize; winr.top = yref - hwindowsize; winr.width = hwindowsize * 2 + 1; winr.height = hwindowsize * 2 + 1; vips_rect_intersectrect(&refr, &winr, &wincr); secr.left = 0; secr.top = 0; secr.width = sec->Xsize; secr.height = sec->Ysize; srhr.left = xsec - hsearchsize; srhr.top = ysec - hsearchsize; srhr.width = hsearchsize * 2 + 1; srhr.height = hsearchsize * 2 + 1; vips_rect_intersectrect(&secr, &srhr, &srhcr); /* Extract window and search area. */ if (vips_extract_area(ref, &t[0], wincr.left, wincr.top, wincr.width, wincr.height, NULL) || vips_extract_area(sec, &t[1], srhcr.left, srhcr.top, srhcr.width, srhcr.height, NULL)) { g_object_unref(surface); return -1; } ref = t[0]; sec = t[1]; /* Make sure we have just one band. From vips_*mosaic() we will, but * from vips_match() etc. we may not. */ if (ref->Bands != 1) { if (vips_extract_band(ref, &t[2], 0, NULL)) { g_object_unref(surface); return -1; } ref = t[2]; } if (sec->Bands != 1) { if (vips_extract_band(sec, &t[3], 0, NULL)) { g_object_unref(surface); return -1; } sec = t[3]; } /* Search! */ if (vips_spcor(sec, ref, &t[4], NULL)) { g_object_unref(surface); return -1; } /* Find maximum of correlation surface. */ if (vips_max(t[4], correlation, "x", x, "y", y, NULL)) { g_object_unref(surface); return -1; } g_object_unref(surface); /* Translate back to position within sec. */ *x += srhcr.left; *y += srhcr.top; return 0; } int vips__chkpair(VipsImage *ref, VipsImage *sec, TiePoints *points) { int i; int x, y; double correlation; const int hcor = points->halfcorsize; const int harea = points->halfareasize; /* Check images. */ if (vips_image_wio_input(ref) || vips_image_wio_input(sec)) return -1; if (ref->Bands != sec->Bands || ref->BandFmt != sec->BandFmt || ref->Coding != sec->Coding) { vips_error("vips_chkpair", "%s", _("inputs incompatible")); return -1; } if (ref->Bands != 1 || ref->BandFmt != VIPS_FORMAT_UCHAR) { vips_error("vips_chkpair", "%s", _("help!")); return -1; } for (i = 0; i < points->nopoints; i++) { /* Find correlation point. */ if (vips__correl(ref, sec, points->x_reference[i], points->y_reference[i], points->x_reference[i], points->y_reference[i], hcor, harea, &correlation, &x, &y)) return -1; /* And note in x_secondary. */ points->x_secondary[i] = x; points->y_secondary[i] = y; points->correlation[i] = correlation; /* Note each dx, dy too. */ points->dx[i] = points->x_secondary[i] - points->x_reference[i]; points->dy[i] = points->y_secondary[i] - points->y_reference[i]; } return 0; } libvips-8.15.1/libvips/mosaicing/global_balance.c000066400000000000000000001262141454007373500217660ustar00rootroot00000000000000/* Parse ".desc" files from mosaiced images to generate (x,y) offsets for * every sub-image. Find all overlap stats and solve balancing with LMS. * Regenerate mosaic, with balancing fixed. * * 1/12/93 JC * - first version, unfinished! * 6/9/95 JC * - LMS fixed, now works, more or less * 12/9/95 JC * - now does positions correctly too * - ignores trivial overlaps * 19/9/95 JC * - prints correct number of balance factors! * 10/11/95 JC * - now tracks im_copy() calls too, so you can save sub-images * 12/1/96 JC * - slightly clearer diagnostics * - better centre of factors around 1.0 with log() average * 1/3/96 JC * - new im_global_balance_float variant lets our caller adjust factor * range if output has burn-out * - im_global_balance_search uses the above to produce scaled output ... * very slow! * 11/3/96 JC * - now tries current directory too for input files * 22/3/96 JC * - horrible bug in position finding! now fixed * 1/8/97 JC * - revised for new mosaic functions and non-square images * 12/9/97 JC * - code for im_lrmosaic1() support * - output type == input type, so works for short images too * 6/1/99 JC * - new gamma parameter, do scale in linear space * - removed _search version, as can now be done with ip * - renamed _float to f suffix, in line with im_conv()/im_convf() * 15/2/00 JC * - balancef() did not scale in linear space * 2/2/01 JC * - added tunable max blend width * 7/11/01 JC * - global_balance.h broken out for im_remosaic() * 25/02/02 JC * - better transform function scheme * 21/3/01 JC * - quicker bailout on error * 8/11/02 JC * - add <> around file names so you can have spaces :( * 9/12/02 JC * - track original params and always reuse them ... makes us proof * against geo reconstruct errors * 10/3/03 JC * - weed out overlaps which contain only transparent pixels * 4/1/07 * - switch to new history thing, switch im_errormsg() too * 24/1/11 * - gtk-doc * 12/7/12 * - always allocate local to an output descriptor ... stops ref cycles * with the new base class * 18/6/20 kleisauke * - convert to vips8 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Strategy: build a tree describing the file * relationships in the desc file, then walk that passing constraints * back up to the root. Look up file names in symbol_table. */ /* Define for debug output. #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include #include "pmosaicing.h" #include "global_balance.h" #define MAX_ITEMS (50) /* How pix an overlap has to be (in pixels) before we think it's trivial and * we ignore it. */ #define TRIVIAL (20 * 20) /* Break a string into a list of strings. Write '\0's into the string. out * needs to be MAX_FILES long. -1 for error, otherwise number of args found. " " out[0] = "fred" out[1] = "jim poop" out[2] = "sn aff le" */ static int break_items(char *line, char **out) { int i; char *p; for (i = 0; i < MAX_ITEMS; i++) { /* Skip to first '<'. */ if (!(p = strchr(line, '<'))) break; out[i] = line = p + 1; if (!(p = strchr(line, '>'))) { vips_error("break_files", "%s", _("no matching '>'")); return -1; } *p = '\0'; line = p + 1; } if (i == MAX_ITEMS) { vips_error("break_files", "%s", _("too many items")); return -1; } return i; } /* Try to open a file. If full path fails, try the current directory. */ VipsImage * vips__global_open_image(SymbolTable *st, char *name) { char *basename; VipsImage *image; if (!(image = vips_image_new_from_file(name, NULL))) { /* TODO(kleisauke): Is this behavior the same as im_skip_dir? * i.e. could we open a filename which came * from a win32 (`\\`) on a *nix machine? */ basename = g_path_get_basename(name); if (!(image = vips_image_new_from_file(basename, NULL))) { g_free(basename); return NULL; } g_free(basename); } vips_object_local(st->im, image); return image; } static void junk_node(VipsImage *image, JoinNode *node) { VIPS_FREEF(g_slist_free, node->overlaps); } /* Hash from a filename to an index into symbol_table. */ static int hash(char *n) { int i; int r = 0; int l = strlen(n); for (i = 0; i < l; i++) r = ((r + n[i]) * 43) & 0xffffff; return r % SYM_TAB_SIZE; } /* Make a leaf for a file. */ static JoinNode * build_node(SymbolTable *st, char *name) { JoinNode *node = VIPS_NEW(st->im, JoinNode); int n = hash(name); /* Fill fields. */ if (!node || !(node->name = vips_strdup(VIPS_OBJECT(st->im), name))) return NULL; node->type = JOIN_LEAF; node->dirty = 0; node->mwidth = -2; node->st = st; vips__transform_init(&node->cumtrn); node->trnim = NULL; node->arg1 = NULL; node->arg2 = NULL; node->overlaps = NULL; node->im = NULL; node->index = 0; g_signal_connect(st->im, "close", G_CALLBACK(junk_node), node); /* Try to open. */ if ((node->im = vips__global_open_image(st, name))) { /* There is a file there - set width and height. */ node->cumtrn.oarea.width = node->im->Xsize; node->cumtrn.oarea.height = node->im->Ysize; } else { /* Clear the error buffer to lessen confusion. */ vips_error_clear(); } st->table[n] = g_slist_prepend(st->table[n], node); return node; } /* Make a new overlap struct. */ static OverlapInfo * build_overlap(JoinNode *node, JoinNode *other, VipsRect *overlap) { OverlapInfo *lap = VIPS_NEW(node->st->im, OverlapInfo); if (!lap) return NULL; lap->node = node; lap->other = other; lap->overlap = *overlap; lap->nstats = NULL; lap->ostats = NULL; node->overlaps = g_slist_prepend(node->overlaps, lap); node->st->novl++; return lap; } static void overlap_destroy(OverlapInfo *lap) { JoinNode *node = lap->node; node->overlaps = g_slist_remove(node->overlaps, lap); g_assert(node->st->novl > 0); node->st->novl--; } static void junk_table(VipsImage *image, SymbolTable *st) { int i; for (i = 0; i < st->sz; i++) VIPS_FREEF(g_slist_free, st->table[i]); } /* Build a new symbol table. */ SymbolTable * vips__build_symtab(VipsImage *out, int sz) { SymbolTable *st = VIPS_NEW(out, SymbolTable); int i; if (!st || !(st->table = VIPS_ARRAY(out, sz, GSList *))) return NULL; st->sz = sz; st->im = out; st->novl = 0; st->nim = 0; st->njoin = 0; st->root = NULL; st->leaf = NULL; st->fac = NULL; g_signal_connect(out, "close", G_CALLBACK(junk_table), st); for (i = 0; i < sz; i++) st->table[i] = NULL; return st; } /* Does this node have this file name? */ static JoinNode * test_name(JoinNode *node, char *name, void *b) { if (strcmp(node->name, name) == 0) return node; else return NULL; } /* Look up a filename in the symbol_table. */ static JoinNode * find_node(SymbolTable *st, char *name) { return vips_slist_map2(st->table[hash(name)], (VipsSListMap2Fn) test_name, name, NULL); } /* Given a name: return either the existing node for that name, or a new node * we have made. */ static JoinNode * add_node(SymbolTable *st, char *name) { JoinNode *node; if (!(node = find_node(st, name)) && !(node = build_node(st, name))) return NULL; return node; } /* Map a user function over the whole of the symbol table. */ void * vips__map_table(SymbolTable *st, VipsSListMap2Fn fn, void *a, void *b) { int i; void *r; for (i = 0; i < st->sz; i++) if ((r = vips_slist_map2(st->table[i], fn, a, b))) return r; return NULL; } /* Set the dirty field on a join. */ static void * set_dirty(JoinNode *node, int state, void *b) { node->dirty = state; return NULL; } /* Clean the whole table. */ static void clean_table(SymbolTable *st) { (void) vips__map_table(st, (VipsSListMap2Fn) set_dirty, (void *) 0, NULL); } /* Do geometry calculations on a node, assuming geo is up to date for any * children. */ static void calc_geometry(JoinNode *node) { VipsRect um; switch (node->type) { case JOIN_LR: case JOIN_TB: case JOIN_LRROTSCALE: case JOIN_TBROTSCALE: /* Join two areas. */ vips_rect_unionrect(&node->arg1->cumtrn.oarea, &node->arg2->cumtrn.oarea, &um); node->cumtrn.iarea.left = 0; node->cumtrn.iarea.top = 0; node->cumtrn.iarea.width = um.width; node->cumtrn.iarea.height = um.height; vips__transform_set_area(&node->cumtrn); break; case JOIN_CP: /* Copy from child. */ node->cumtrn = node->arg1->cumtrn; break; case JOIN_LEAF: /* Just use leaf dimensions, if there are any. */ if (node->im) { node->cumtrn.iarea.left = 0; node->cumtrn.iarea.top = 0; node->cumtrn.iarea.width = node->im->Xsize; node->cumtrn.iarea.height = node->im->Ysize; vips__transform_set_area(&node->cumtrn); } break; default: vips_error_exit("internal error #98356"); /*NOTREACHED*/ } } /* Propagate a transform down a tree. If dirty is set, we've been here before, * so there is a doubling up of this node. If this is a leaf, then we have the * same leaf twice (which, in fact, we can cope with); if this is a node, we * have circularity. */ static int propagate_transform(JoinNode *node, VipsTransformation *trn) { if (!node) return 0; if (node->dirty && node->arg1 && node->arg2) { vips_error("vips_global_balance", "%s", _("circularity detected")); return -1; } node->dirty = 1; /* Transform our children. */ if (propagate_transform(node->arg1, trn) || propagate_transform(node->arg2, trn)) return -1; /* Transform us, and recalculate our position and size. */ vips__transform_add(&node->cumtrn, trn, &node->cumtrn); calc_geometry(node); return 0; } /* Ah ha! A leaf is actually made up of two smaller files with an lr or a tb * merge. Turn a leaf node into a join node. Propagate the transform down * arg2's side of the tree. */ static int make_join(SymbolTable *st, JoinType type, JoinNode *arg1, JoinNode *arg2, JoinNode *out, double a, double b, double dx, double dy, int mwidth) { VipsTransformation trn; /* Check output is ok. */ if (out->type != JOIN_LEAF) { vips_error("vips_global_balance", _("image \"%s\" used twice as output"), out->name); return -1; } /* Fill fields. */ out->type = type; out->mwidth = mwidth; out->a = a; out->b = b; out->dx = dx; out->dy = dy; out->arg1 = arg1; out->arg2 = arg2; out->thistrn.a = a; out->thistrn.b = -b; out->thistrn.c = b; out->thistrn.d = a; out->thistrn.idx = 0; out->thistrn.idy = 0; out->thistrn.odx = dx; out->thistrn.ody = dy; /* Clean the table and propagate the transform down the RHS of the * graph. */ clean_table(st); if (propagate_transform(arg2, &out->thistrn)) return -1; /* Find the position and size of our output. */ calc_geometry(out); /* Now normalise the result, so that out is at (0,0) again. */ trn.a = 1.0; trn.b = 0.0; trn.c = 0.0; trn.d = 1.0; trn.idx = 0; trn.idy = 0; trn.odx = -out->cumtrn.oarea.left; trn.ody = -out->cumtrn.oarea.top; clean_table(st); if (propagate_transform(out, &trn)) return -1; return 0; } /* Make a copy node. */ static int make_copy(SymbolTable *st, JoinNode *before, JoinNode *after) { /* Check output is ok. */ if (after->type != JOIN_LEAF) { vips_error("vips_global_balance", _("image \"%s\" used twice as output"), after->name); return -1; } /* Fill fields. */ after->type = JOIN_CP; after->arg1 = before; after->arg2 = NULL; /* Copy over the position and size from the before to the after. */ calc_geometry(after); return 0; } /* Process a single .desc line. */ static int process_line(SymbolTable *st, const char *text) { char line[1024]; #ifdef DEBUG printf("read: %s\n", text); #endif /*DEBUG*/ /* We destroy line during the parse. */ vips_strncpy(line, text, 1024); if (vips_isprefix("#LRJOIN ", line) || vips_isprefix("#TBJOIN ", line)) { /* Yes: magic join command. Break into tokens. Format is eg. #LRJOIN [] */ char *item[MAX_ITEMS]; int nitems; JoinType type; JoinNode *arg1, *arg2, *join; int dx, dy, mwidth; if ((nitems = break_items(line, item)) < 0) return -1; if (nitems != 5 && nitems != 6) { vips_error("global_balance", "%s", _("bad number of args in join line")); return -1; } if (!(arg1 = add_node(st, item[0])) || !(arg2 = add_node(st, item[1])) || !(join = add_node(st, item[2]))) return -1; dx = atoi(item[3]); dy = atoi(item[4]); if (nitems == 6) mwidth = atoi(item[5]); else mwidth = -1; if (vips_isprefix("#LRJOIN ", line)) type = JOIN_LR; else type = JOIN_TB; if (make_join(st, type, arg1, arg2, join, 1.0, 0.0, dx, dy, mwidth)) return -1; } else if (vips_isprefix("#LRROTSCALE ", line) || vips_isprefix("#TBROTSCALE ", line)) { /* Rot + scale. Format is eg. #LRROTSCALE \ [] */ char *item[MAX_ITEMS]; int nitems; JoinType type; JoinNode *arg1, *arg2, *join; double a, b, dx, dy; int mwidth; if ((nitems = break_items(line, item)) < 0) return -1; if (nitems != 7 && nitems != 8) { vips_error("global_balance", "%s", _("bad number of args in join1 line")); return -1; } if (!(arg1 = add_node(st, item[0])) || !(arg2 = add_node(st, item[1])) || !(join = add_node(st, item[2]))) return -1; a = g_ascii_strtod(item[3], NULL); b = g_ascii_strtod(item[4], NULL); dx = g_ascii_strtod(item[5], NULL); dy = g_ascii_strtod(item[6], NULL); if (nitems == 8) mwidth = atoi(item[7]); else mwidth = -1; if (vips_isprefix("#LRROTSCALE ", line)) type = JOIN_LRROTSCALE; else type = JOIN_TBROTSCALE; if (make_join(st, type, arg1, arg2, join, a, b, dx, dy, mwidth)) return -1; } else if (vips_isprefix("copy ", line)) { /* vips_copy() call ... make a JOIN_CP node. */ char *item[MAX_ITEMS]; int nitems; JoinNode *before, *after; if ((nitems = break_items(line, item)) < 0) return -1; if (nitems != 2) { vips_error("global_balance", "%s", _("bad number of args in copy line")); return -1; } if (!(before = add_node(st, item[0])) || !(after = add_node(st, item[1])) || make_copy(st, before, after)) return -1; } return 0; } /* Set the dirty flag on any nodes we reference. */ static void * set_referenced(JoinNode *node, void *a, void *b) { if (node->arg1) node->arg1->dirty = 1; if (node->arg2) node->arg2->dirty = 1; return NULL; } /* Is this a root node? Should be clean. */ static void * is_root(JoinNode *node, void *a, void *b) { if (!node->dirty) return (void *) node; else return NULL; } /* Scan the symbol table, looking for a node which no node references. */ static JoinNode * find_root(SymbolTable *st) { JoinNode *root; /* Clean the table, then scan it, setting all pointed-to nodes dirty. */ clean_table(st); vips__map_table(st, (VipsSListMap2Fn) set_referenced, NULL, NULL); /* Look for the first clean symbol. */ root = (JoinNode *) vips__map_table(st, (VipsSListMap2Fn) is_root, NULL, NULL); /* No root? Hot dang! */ if (!root) { vips_error("vips_global_balance", "%s", _("mosaic root not found in desc file\n" "is this really a mosaiced image?")); return NULL; } /* Now dirty that - then if there are any more clean symbols, we have * more than one root. */ root->dirty = 1; if (vips__map_table(st, (VipsSListMap2Fn) is_root, NULL, NULL)) { vips_error("vips_global_balance", "%s", _("more than one root")); return NULL; } return root; } /* Walk history_list and parse each line. */ int vips__parse_desc(SymbolTable *st, VipsImage *in) { GSList *p; for (p = in->history_list; p; p = p->next) { GValue *value = (GValue *) p->data; g_assert(G_VALUE_TYPE(value) == VIPS_TYPE_REF_STRING); if (process_line(st, vips_value_get_ref_string(value, NULL))) return -1; } /* Find root. */ if (!(st->root = find_root(st))) return -1; return 0; } /* Count and index all leaf images. */ static void * count_leaves(JoinNode *node, void *a, void *b) { if (node->type == JOIN_LEAF) { node->index = node->st->nim; node->st->nim++; } return NULL; } #ifdef DEBUG /* Print a JoinNode. */ static void print_node(JoinNode *node) { char *basename = g_path_get_basename(node->name); printf("%s, position %dx%d, size %dx%d, index %d\n", basename, node->cumtrn.oarea.left, node->cumtrn.oarea.top, node->cumtrn.oarea.width, node->cumtrn.oarea.height, node->index); g_free(basename); } #endif /*DEBUG*/ #ifdef DEBUG /* Print a leaf. */ static void * print_leaf(JoinNode *node, void *a, void *b) { if (node->type == JOIN_LEAF) print_node(node); return NULL; } #endif /*DEBUG*/ /* Count all join nodes. */ static void * count_joins(JoinNode *node, void *a, void *b) { if (node->type == JOIN_TB || node->type == JOIN_LR || node->type == JOIN_LRROTSCALE || node->type == JOIN_TBROTSCALE) node->st->njoin++; return NULL; } #ifdef DEBUG /* Print a few spaces. */ static void spc(int n) { int i; for (i = 0; i < n; i++) printf(" "); } #endif /*DEBUG*/ #ifdef DEBUG static char * JoinType2char(JoinType type) { switch (type) { case JOIN_LR: return "JOIN_LR"; case JOIN_TB: return "JOIN_TB"; case JOIN_LRROTSCALE: return "JOIN_LRROTSCALE"; case JOIN_TBROTSCALE: return "JOIN_TBROTSCALE"; case JOIN_CP: return "JOIN_CP"; case JOIN_LEAF: return "JOIN_LEAF"; default: vips_error_exit("internal error #9275"); /*NOTEACHED*/ return NULL; } } #endif /*DEBUG*/ #ifdef DEBUG /* Print a join node. */ static void * print_joins(JoinNode *node, int indent) { char *basename = g_path_get_basename(node->name); switch (node->type) { case JOIN_TB: case JOIN_LR: case JOIN_TBROTSCALE: case JOIN_LRROTSCALE: spc(indent); printf("%s to make %s, size %dx%d, pos. %dx%d, of:\n", JoinType2char(node->type), basename, node->cumtrn.oarea.width, node->cumtrn.oarea.height, node->cumtrn.oarea.left, node->cumtrn.oarea.top); spc(indent); printf("reference:\n"); print_joins(node->arg1, indent + 2); spc(indent); printf("secondary:\n"); print_joins(node->arg2, indent + 2); break; case JOIN_CP: spc(indent); printf("copy to make %s of:\n", basename); print_joins(node->arg1, indent + 2); break; case JOIN_LEAF: spc(indent); printf("input image %s\n", basename); break; } g_free(basename); return NULL; } #endif /*DEBUG*/ #ifdef DEBUG /* Print an overlap. */ static void * print_overlap(OverlapInfo *lap, void *a, void *b) { char *basename_node = g_path_get_basename(lap->node->name); char *basename_other = g_path_get_basename(lap->other->name); printf("-> %s overlaps with %s; (this, other) = (%.4G, %.4G)\n", basename_node, basename_other, *VIPS_MATRIX(lap->nstats, 4, 0), *VIPS_MATRIX(lap->ostats, 4, 0)); g_free(basename_node); g_free(basename_other); return NULL; } #endif /*DEBUG*/ #ifdef DEBUG /* Print the overlaps on a leaf. */ static void * print_overlaps(JoinNode *node, void *a, void *b) { char *basename; if (node->type == JOIN_LEAF && g_slist_length(node->overlaps) > 0) { basename = g_path_get_basename(node->name); printf("overlap of %s with:\n", basename); g_free(basename); vips_slist_map2(node->overlaps, (VipsSListMap2Fn) print_overlap, NULL, NULL); } return NULL; } #endif /*DEBUG*/ #ifdef DEBUG /* Print and accumulate the error on an overlap. */ static void * print_overlap_error(OverlapInfo *lap, double *fac, double *total) { char *basename_other = g_path_get_basename(lap->other->name); double na = *VIPS_MATRIX(lap->nstats, 4, 0); double oa = *VIPS_MATRIX(lap->ostats, 4, 0); double err; if (fac) { na *= fac[lap->node->index]; oa *= fac[lap->other->index]; } err = na - oa; printf("-> file %s, error = %g\n", basename_other, err); *total += err * err; g_free(basename_other); return NULL; } #endif /*DEBUG*/ #ifdef DEBUG /* Print and accumulate the overlap errors on a leaf. */ static void * print_overlap_errors(JoinNode *node, double *fac, double *total) { char *basename; if (node->type == JOIN_LEAF && g_slist_length(node->overlaps) > 0) { basename = g_path_get_basename(node->name); printf("overlap of %s (index %d) with:\n", basename, node->index); g_free(basename); vips_slist_map2(node->overlaps, (VipsSListMap2Fn) print_overlap_error, fac, total); } return NULL; } #endif /*DEBUG*/ /* Extract a rect. */ static int extract_rect(VipsImage *in, VipsImage **out, VipsRect *r) { return vips_extract_area(in, out, r->left, r->top, r->width, r->height, NULL); } /* Two images overlap in an area ... make a mask the size of the area, which * has 255 for every pixel where both images are non-zero. */ static int make_overlap_mask(VipsImage *mem, VipsImage *ref, VipsImage *sec, VipsImage **mask, VipsRect *rarea, VipsRect *sarea) { VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(mem), 6); if (extract_rect(ref, &t[0], rarea) || extract_rect(sec, &t[1], sarea) || vips_extract_band(t[0], &t[2], 0, NULL) || vips_extract_band(t[1], &t[3], 0, NULL) || vips_notequal_const1(t[2], &t[4], 0.0, NULL) || vips_notequal_const1(t[3], &t[5], 0.0, NULL) || vips_andimage(t[4], t[5], mask, NULL)) return -1; return 0; } /* Find the number of non-zero pixels in a mask image. */ static int count_nonzero(VipsImage *in, gint64 *count) { double avg; if (vips_avg(in, &avg, NULL)) return -1; *count = (avg * VIPS_IMAGE_N_PELS(in)) / 255.0; return 0; } /* Find stats on an area of an IMAGE ... consider only pixels for which the * mask is true. */ static VipsImage * find_image_stats(VipsImage *mem, VipsImage *in, VipsImage *mask, VipsRect *area) { VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(mem), 5); gint64 count; /* Extract area, build black image, mask out pixels we want. */ if (extract_rect(in, &t[0], area) || vips_black(&t[1], t[0]->Xsize, t[0]->Ysize, "bands", t[0]->Bands, NULL) || vips_cast(t[1], &t[2], t[0]->BandFmt, NULL) || vips_ifthenelse(mask, t[0], t[2], &t[3], NULL)) return NULL; /* Get stats from masked image. */ if (vips_stats(t[3], &t[4], NULL)) return NULL; /* Number of non-zero pixels in mask. */ if (count_nonzero(mask, &count)) return NULL; /* And scale masked average to match. */ *VIPS_MATRIX(t[4], 4, 0) *= (double) count / VIPS_IMAGE_N_PELS(mask); /* Yuk! Zap the deviation column with the pixel count. Used later to * determine if this is likely to be a significant overlap. */ *VIPS_MATRIX(t[4], 5, 0) = count; #ifdef DEBUG if (count == 0) g_warning("global_balance %s", _("empty overlap!")); #endif /*DEBUG*/ return t[4]; } /* Find the stats for an overlap struct. */ static int find_overlap_stats(OverlapInfo *lap) { VipsImage *mem = lap->node->st->im; VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(mem), 1); VipsRect rarea, sarea; /* Translate the overlap area into the coordinate scheme for the main * node. */ rarea = lap->overlap; rarea.left -= lap->node->cumtrn.oarea.left; rarea.top -= lap->node->cumtrn.oarea.top; /* Translate the overlap area into the coordinate scheme for the other * node. */ sarea = lap->overlap; sarea.left -= lap->other->cumtrn.oarea.left; sarea.top -= lap->other->cumtrn.oarea.top; /* Make a mask for the overlap. */ if (make_overlap_mask(mem, lap->node->trnim, lap->other->trnim, &t[0], &rarea, &sarea)) return -1; /* Find stats for that area. */ if (!(lap->nstats = find_image_stats(mem, lap->node->trnim, t[0], &rarea))) return -1; if (!(lap->ostats = find_image_stats(mem, lap->other->trnim, t[0], &sarea))) return -1; return 0; } /* Sub-fn. of below. */ static void * overlap_eq(OverlapInfo *this, JoinNode *node, void *b) { if (this->other == node) return this; else return NULL; } /* Is this an overlapping leaf? If yes, add to overlap list. */ static void * test_overlap(JoinNode *other, JoinNode *node, void *b) { VipsRect overlap; OverlapInfo *lap; /* Is other a suitable leaf to overlap with node? */ if (other->type != JOIN_LEAF || node == other) return NULL; /* Is there an overlap? */ vips_rect_intersectrect(&node->cumtrn.oarea, &other->cumtrn.oarea, &overlap); if (vips_rect_isempty(&overlap)) return NULL; /* Is this a trivial overlap? Ignore it if it is. */ if (overlap.width * overlap.height < TRIVIAL) /* Too few pixels. */ return NULL; /* Have we already added this overlap the other way around? ie. is * node on other's overlap list? */ if (vips_slist_map2(other->overlaps, (VipsSListMap2Fn) overlap_eq, node, NULL)) return NULL; /* A new overlap - add to overlap list. */ if (!(lap = build_overlap(node, other, &overlap))) return node; /* Calculate overlap statistics. Open stuff relative to this, and * free quickly. */ if (find_overlap_stats(lap)) return node; /* If the pixel count either masked overlap is trivial, ignore this * overlap. */ if (*VIPS_MATRIX(lap->nstats, 5, 0) < TRIVIAL || *VIPS_MATRIX(lap->ostats, 5, 0) < TRIVIAL) { #ifdef DEBUG printf("trivial overlap ... junking\n"); printf("nstats count = %g, ostats count = %g\n", *VIPS_MATRIX(lap->nstats, 5, 0), *VIPS_MATRIX(lap->ostats, 5, 0)); print_overlap(lap, NULL, NULL); #endif /*DEBUG*/ overlap_destroy(lap); } return NULL; } /* If this is a leaf, look at all other joins for a leaf that overlaps. Aside: * If this is a leaf, there should be an IMAGE. Flag an error if there is * not. */ static void * find_overlaps(JoinNode *node, SymbolTable *st, void *b) { if (node->type == JOIN_LEAF) { /* Check for image. */ if (!node->im) { vips_error("vips_global_balance", _("unable to open \"%s\""), node->name); return node; } if (!node->trnim) vips_error_exit("global_balance: sanity failure #9834"); return vips__map_table(st, (VipsSListMap2Fn) test_overlap, node, NULL); } return NULL; } /* Bundle of variables for matrix creation. */ typedef struct { SymbolTable *st; /* Main table */ JoinNode *leaf; /* Leaf to be 1.000 */ VipsImage *K; /* LHS */ VipsImage *M; /* RHS */ int row; /* Current row */ } MatrixBundle; /* Add a new row for the nominated overlap to the matrices. */ static void * add_nominated(OverlapInfo *ovl, MatrixBundle *bun, double *gamma) { double ns = pow(*VIPS_MATRIX(ovl->nstats, 4, 0), 1.0 / (*gamma)); double os = pow(*VIPS_MATRIX(ovl->ostats, 4, 0), 1.0 / (*gamma)); *VIPS_MATRIX(bun->K, 0, bun->row) = ns; *VIPS_MATRIX(bun->M, ovl->other->index - 1, bun->row) = os; bun->row++; return NULL; } /* Add a new row for an ordinary overlap to the matrices. */ static void * add_other(OverlapInfo *ovl, MatrixBundle *bun, double *gamma) { double ns = -pow(*VIPS_MATRIX(ovl->nstats, 4, 0), 1.0 / (*gamma)); double os = pow(*VIPS_MATRIX(ovl->ostats, 4, 0), 1.0 / (*gamma)); *VIPS_MATRIX(bun->M, ovl->node->index - 1, bun->row) = ns; *VIPS_MATRIX(bun->M, ovl->other->index - 1, bun->row) = os; bun->row++; return NULL; } /* Add stuff for node to matrix. */ static void * add_row(JoinNode *node, MatrixBundle *bun, double *gamma) { if (node == bun->leaf) vips_slist_map2(node->overlaps, (VipsSListMap2Fn) add_nominated, bun, gamma); else vips_slist_map2(node->overlaps, (VipsSListMap2Fn) add_other, bun, gamma); return NULL; } /* Fill K and M. leaf is image selected to have factor of 1.000. */ static void fill_matrices(SymbolTable *st, double gamma, VipsImage *K, VipsImage *M) { MatrixBundle bun; bun.st = st; bun.leaf = st->leaf; bun.K = K; bun.M = M; bun.row = 0; /* Build matrices. */ vips__map_table(st, (VipsSListMap2Fn) add_row, &bun, &gamma); } /* Used to select the leaf whose coefficient we set to 1. */ static void * choose_leaf(JoinNode *node, void *a, void *b) { if (node->type == JOIN_LEAF) return node; return NULL; } /* Make an image from a node. */ static VipsImage * make_mos_image(SymbolTable *st, JoinNode *node, transform_fn tfn, void *a) { VipsImage *im1, *im2, *out; switch (node->type) { case JOIN_LR: case JOIN_TB: if (!(im1 = make_mos_image(st, node->arg1, tfn, a)) || !(im2 = make_mos_image(st, node->arg2, tfn, a))) return NULL; if (vips_merge(im1, im2, &out, node->type == JOIN_LR ? VIPS_DIRECTION_HORIZONTAL : VIPS_DIRECTION_VERTICAL, -node->dx, -node->dy, "mblend", node->mwidth, NULL)) return NULL; vips_object_local(st->im, out); vips_image_set_string(out, "mosaic-name", node->name); break; case JOIN_LRROTSCALE: case JOIN_TBROTSCALE: if (!(im1 = make_mos_image(st, node->arg1, tfn, a)) || !(im2 = make_mos_image(st, node->arg2, tfn, a))) return NULL; out = vips_image_new(); vips_object_local(st->im, out); vips_image_set_string(out, "mosaic-name", node->name); if (node->type == JOIN_LRROTSCALE) { if (vips__lrmerge1(im1, im2, out, node->a, node->b, node->dx, node->dy, node->mwidth)) return NULL; } else { if (vips__tbmerge1(im1, im2, out, node->a, node->b, node->dx, node->dy, node->mwidth)) return NULL; } break; case JOIN_LEAF: /* Trivial case! */ if (!(out = tfn(node, a))) return NULL; break; case JOIN_CP: /* Very trivial case. */ out = make_mos_image(st, node->arg1, tfn, a); break; default: vips_error_exit("internal error #982369824375987"); /*NOTEACHED*/ return NULL; } return out; } /* Re-build mosaic. */ int vips__build_mosaic(SymbolTable *st, VipsImage *out, transform_fn tfn, void *a) { JoinNode *root = st->root; VipsImage *im1, *im2; VipsImage *x; switch (root->type) { case JOIN_LR: case JOIN_TB: if (!(im1 = make_mos_image(st, root->arg1, tfn, a)) || !(im2 = make_mos_image(st, root->arg2, tfn, a))) return -1; if (vips_merge(im1, im2, &x, root->type == JOIN_LR ? VIPS_DIRECTION_HORIZONTAL : VIPS_DIRECTION_VERTICAL, -root->dx, -root->dy, "mblend", root->mwidth, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); break; case JOIN_LRROTSCALE: case JOIN_TBROTSCALE: if (!(im1 = make_mos_image(st, root->arg1, tfn, a)) || !(im2 = make_mos_image(st, root->arg2, tfn, a))) return -1; if (root->type == JOIN_LRROTSCALE) { if (vips__lrmerge1(im1, im2, out, root->a, root->b, root->dx, root->dy, root->mwidth)) return -1; } else { if (vips__tbmerge1(im1, im2, out, root->a, root->b, root->dx, root->dy, root->mwidth)) return -1; } break; case JOIN_LEAF: /* Trivial case! Just one file in our mosaic. */ if (!(im1 = tfn(root, a)) || vips_image_write(im1, out)) return -1; break; case JOIN_CP: /* Very trivial case. */ if (!(im1 = make_mos_image(st, root->arg1, tfn, a)) || vips_image_write(im1, out)) return -1; break; default: vips_error_exit("internal error #982369824375987"); /*NOTEACHED*/ } return 0; } static int vips__matrixtranspose(VipsImage *in, VipsImage **out) { int yc, xc; /* Allocate output matrix. */ if (!(*out = vips_image_new_matrix(in->Ysize, in->Xsize))) return -1; /* Transpose. */ for (yc = 0; yc < (*out)->Ysize; ++yc) for (xc = 0; xc < (*out)->Xsize; ++xc) *VIPS_MATRIX(*out, xc, yc) = *VIPS_MATRIX(in, yc, xc); return 0; } static int vips__matrixmultiply(VipsImage *in1, VipsImage *in2, VipsImage **out) { int xc, yc, col; double sum; double *mat, *a, *b; double *s1, *s2; /* Check matrix sizes. */ if (in1->Xsize != in2->Ysize) { vips_error("vips__matrixmultiply", "%s", _("bad sizes")); return -1; } /* Allocate output matrix. */ if (!(*out = vips_image_new_matrix(in2->Xsize, in1->Ysize))) return -1; /* Multiply. */ mat = VIPS_MATRIX(*out, 0, 0); s1 = VIPS_MATRIX(in1, 0, 0); for (yc = 0; yc < in1->Ysize; yc++) { s2 = VIPS_MATRIX(in2, 0, 0); for (col = 0; col < in2->Xsize; col++) { /* Get ready to sweep a row. */ a = s1; b = s2; for (sum = 0.0, xc = 0; xc < in1->Xsize; xc++) { sum += *a++ * *b; b += in2->Xsize; } *mat++ = sum; s2++; } s1 += in1->Xsize; } return 0; } /* Find correction factors. */ static int find_factors(SymbolTable *st, double gamma) { VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(st->im), 7); double total; double avg; int i; /* Make output matrices. */ if (!(t[0] = vips_image_new_matrix(1, st->novl)) || !(t[1] = vips_image_new_matrix(st->nim - 1, st->novl))) return -1; fill_matrices(st, gamma, t[0], t[1]); #ifdef DEBUG vips_image_write_to_file(t[0], "K.mat", NULL); vips_image_write_to_file(t[1], "M.mat", NULL); #endif /*DEBUG*/ /* Calculate LMS. */ if (vips__matrixtranspose(t[1], &t[2]) || vips__matrixmultiply(t[2], t[1], &t[3]) || vips_matrixinvert(t[3], &t[4], NULL) || vips__matrixmultiply(t[4], t[2], &t[5]) || vips__matrixmultiply(t[5], t[0], &t[6])) return -1; /* Make array of correction factors. */ if (!(st->fac = VIPS_ARRAY(st->im, st->nim, double))) return -1; for (i = 0; i < t[6]->Ysize; i++) st->fac[i + 1] = *VIPS_MATRIX(t[6], 0, i); st->fac[0] = 1.0; /* Find average balance factor, normalise to that average. */ total = 0.0; for (i = 0; i < st->nim; i++) total += st->fac[i]; avg = total / st->nim; for (i = 0; i < st->nim; i++) st->fac[i] /= avg; #ifdef DEBUG /* Diagnostics! */ printf("debugging output for vips_global_balance():\n"); for (i = 0; i < st->nim; i++) printf("balance factor %d = %g\n", i, st->fac[i]); total = 0.0; printf("Overlap errors:\n"); vips__map_table(st, (VipsSListMap2Fn) print_overlap_errors, NULL, &total); printf("RMS error = %g\n", sqrt(total / st->novl)); total = 0.0; printf("Overlap errors after adjustment:\n"); vips__map_table(st, (VipsSListMap2Fn) print_overlap_errors, st->fac, &total); printf("RMS error = %g\n", sqrt(total / st->novl)); #endif /*DEBUG*/ return 0; } /* TODO(kleisauke): Copied from im__affinei */ /* Shared with vips_mosaic1(), so not static. */ int vips__affinei(VipsImage *in, VipsImage *out, VipsTransformation *trn) { VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(out), 2); VipsArrayInt *oarea; gboolean repack; oarea = vips_array_int_newv(4, trn->oarea.left, trn->oarea.top, trn->oarea.width, trn->oarea.height); /* vips7 affine would repack labq and im_benchmark() depends upon * this. */ repack = in->Coding == VIPS_CODING_LABQ; if (vips_affine(in, &t[0], trn->a, trn->b, trn->c, trn->d, "oarea", oarea, "odx", trn->odx, "ody", trn->ody, NULL)) { vips_area_unref(VIPS_AREA(oarea)); return -1; } vips_area_unref(VIPS_AREA(oarea)); in = t[0]; if (repack) { if (vips_colourspace(in, &t[1], VIPS_INTERPRETATION_LABQ, NULL)) return -1; in = t[1]; } if (vips_image_write(in, out)) return -1; return 0; } /* Look for all leaves, make sure we have a transformed version of each. */ static void * generate_trn_leaves(JoinNode *node, SymbolTable *st, void *b) { if (node->type == JOIN_LEAF) { /* Check for image. */ if (!node->im) { vips_error("vips_global_balance", _("unable to open \"%s\""), node->name); return node; } if (node->trnim) vips_error_exit("global_balance: sanity failure #765"); /* Special case: if this is an untransformed leaf (there will * always be at least one), then skip the affine. */ if (vips__transform_isidentity(&node->cumtrn)) node->trnim = node->im; else { node->trnim = vips_image_new(); vips_object_local(node->st->im, node->trnim); if (vips__affinei(node->im, node->trnim, &node->cumtrn)) return node; } } return NULL; } /* Analyse mosaic. */ static int analyse_mosaic(SymbolTable *st, VipsImage *in) { /* Parse Hist on in. */ if (vips__parse_desc(st, in)) return -1; /* Print parsed data. */ #ifdef DEBUG printf("Input files:\n"); vips__map_table(st, (VipsSListMap2Fn) print_leaf, NULL, NULL); printf("\nOutput file:\n"); print_node(st->root); printf("\nJoin commands:\n"); print_joins(st->root, 0); #endif /*DEBUG*/ /* Generate transformed leaves. */ if (vips__map_table(st, (VipsSListMap2Fn) generate_trn_leaves, st, NULL)) return -1; /* Find overlaps. */ if (vips__map_table(st, (VipsSListMap2Fn) find_overlaps, st, NULL)) return -1; /* Scan table, counting and indexing input images and joins. */ vips__map_table(st, (VipsSListMap2Fn) count_leaves, NULL, NULL); vips__map_table(st, (VipsSListMap2Fn) count_joins, NULL, NULL); /* Select leaf to be 1.000. * This must be index == 0, unless you change stuff above! */ st->leaf = vips__map_table(st, (VipsSListMap2Fn) choose_leaf, NULL, NULL); /* And print overlaps. */ #ifdef DEBUG printf("\nLeaf to be 1.000:\n"); print_node(st->leaf); printf("\nOverlaps:\n"); vips__map_table(st, (VipsSListMap2Fn) print_overlaps, NULL, NULL); printf("\n%d input files, %d unique overlaps, %d joins\n", st->nim, st->novl, st->njoin); #endif /*DEBUG*/ return 0; } /* Scale im by fac --- if it's uchar/ushort, use a lut. If we can use a lut, * transform in linear space. If we can't, don't bother for efficiency. */ static VipsImage * transform(JoinNode *node, double *gamma) { SymbolTable *st = node->st; VipsImage *in = node->im; double fac = st->fac[node->index]; VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(st->im), 8); VipsImage *out; if (fac == 1.0) { /* Easy! */ out = in; } /* TODO(kleisauke): Could we call vips_gamma instead? */ else if (in->BandFmt == VIPS_FORMAT_UCHAR || in->BandFmt == VIPS_FORMAT_USHORT) { if (vips_identity(&t[0], "bands", 1, "ushort", in->BandFmt == VIPS_FORMAT_USHORT, //"size", 65535, NULL) || vips_pow_const1(t[0], &t[1], 1.0 / (*gamma), NULL) || vips_linear1(t[1], &t[2], fac, 0.0, NULL) || vips_pow_const1(t[2], &t[3], *gamma, NULL) || vips_cast(t[3], &t[4], in->BandFmt, NULL) || vips_maplut(in, &t[5], t[4], NULL)) return NULL; out = t[5]; } else { /* Just vips_linear1 it. */ if (vips_linear1(in, &t[6], fac, 0.0, NULL) || vips_cast(t[6], &t[7], in->BandFmt, NULL)) return NULL; out = t[7]; } vips_image_set_string(out, "mosaic-name", node->name); return out; } /* As above, but output as float, not matched to input. */ static VipsImage * transformf(JoinNode *node, double *gamma) { SymbolTable *st = node->st; VipsImage *in = node->im; double fac = node->st->fac[node->index]; VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(st->im), 6); VipsImage *out; if (fac == 1.0) { /* Easy! */ out = in; } else if (in->BandFmt == VIPS_FORMAT_UCHAR || in->BandFmt == VIPS_FORMAT_USHORT) { if (vips_identity(&t[0], "bands", 1, "ushort", in->BandFmt == VIPS_FORMAT_USHORT, //"size", 65535, NULL) || vips_pow_const1(t[0], &t[1], 1.0 / (*gamma), NULL) || vips_linear1(t[1], &t[2], fac, 0.0, NULL) || vips_pow_const1(t[2], &t[3], *gamma, NULL) || vips_maplut(in, &t[4], t[3], NULL)) return NULL; out = t[4]; } else { /* Just vips_linear1 it. */ if (vips_linear1(in, &t[5], fac, 0.0, NULL)) return NULL; out = t[5]; } vips_image_set_string(out, "mosaic-name", node->name); return out; } typedef struct { VipsOperation parent_instance; VipsImage *in; VipsImage *out; gboolean int_output; double gamma; } VipsGlobalbalance; typedef VipsOperationClass VipsGlobalbalanceClass; G_DEFINE_TYPE(VipsGlobalbalance, vips_globalbalance, VIPS_TYPE_OPERATION); static int vips_globalbalance_build(VipsObject *object) { VipsGlobalbalance *globalbalance = (VipsGlobalbalance *) object; SymbolTable *st; transform_fn trn; g_object_set(globalbalance, "out", vips_image_new(), NULL); if (VIPS_OBJECT_CLASS(vips_globalbalance_parent_class)->build(object)) return -1; if (!(st = vips__build_symtab(globalbalance->out, SYM_TAB_SIZE)) || analyse_mosaic(st, globalbalance->in) || find_factors(st, globalbalance->gamma)) return -1; trn = globalbalance->int_output ? (transform_fn) transform : (transform_fn) transformf; if (vips__build_mosaic(st, globalbalance->out, trn, &globalbalance->gamma)) return -1; return 0; } static void vips_globalbalance_class_init(VipsGlobalbalanceClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "globalbalance"; object_class->description = _("global balance an image mosaic"); object_class->build = vips_globalbalance_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsGlobalbalance, in)); VIPS_ARG_IMAGE(class, "out", 2, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsGlobalbalance, out)); VIPS_ARG_DOUBLE(class, "gamma", 5, _("Gamma"), _("Image gamma"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsGlobalbalance, gamma), 0.00001, 10, 1.6); VIPS_ARG_BOOL(class, "int_output", 7, _("Int output"), _("Integer output"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsGlobalbalance, int_output), FALSE); } static void vips_globalbalance_init(VipsGlobalbalance *globalbalance) { globalbalance->gamma = 1.6; } /** * vips_globalbalance: (method) * @in: mosaic to rebuild * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @gamma: gamma of source images * * @int_output: %TRUE for integer image output * * vips_globalbalance() can be used to remove contrast differences in * an assembled mosaic. * * It reads the History field attached to @in and builds a list of the source * images that were used to make the mosaic and the position that each ended * up at in the final image. * * It opens each of the source images in turn and extracts all parts which * overlap with any of the other images. It finds the average values in the * overlap areas and uses least-mean-square to find a set of correction * factors which will minimise overlap differences. It uses @gamma to * gamma-correct the source images before calculating the factors. A value of * 1.0 will stop this. * * Each of the source images is transformed with the appropriate correction * factor, then the mosaic is reassembled. @out is #VIPS_FORMAT_FLOAT, but * if @int_output is set, the output image is the same format as the input * images. * * There are some conditions that must be met before this operation can work: * the source images must all be present under the filenames recorded in the * history on @in, and the mosaic must have been built using only operations in * this package. * * See also: vips_remosaic(). * * Returns: 0 on success, -1 on error */ int vips_globalbalance(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("globalbalance", ap, in, out); va_end(ap); return result; } libvips-8.15.1/libvips/mosaicing/global_balance.h000066400000000000000000000073641454007373500217770ustar00rootroot00000000000000/* Header for the .desc file parser in vips_global_balance() * * 1/11/01 JC * - cut from global_balance.c */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Number of entries in spine of file name hash table. */ #define SYM_TAB_SIZE (113) typedef enum _JoinType JoinType; typedef struct _OverlapInfo OverlapInfo; typedef struct _JoinNode JoinNode; typedef struct _SymbolTable SymbolTable; /* Type of a transform function. */ typedef VipsImage *(*transform_fn)(JoinNode *, void *); /* Join type. */ enum _JoinType { JOIN_LR, /* vips__lrmerge join */ JOIN_TB, /* vips__tbmerge join */ JOIN_LRROTSCALE, /* 1st order lrmerge */ JOIN_TBROTSCALE, /* 1st order tbmerge */ JOIN_CP, /* vips_copy operation */ JOIN_LEAF /* Base file */ }; /* An overlap struct. Attach a list of these to each leaf, one for each of * the other leaves we touch. */ struct _OverlapInfo { JoinNode *node; /* The base node - we are on this list */ JoinNode *other; /* Node we overlap with */ VipsRect overlap; /* The overlap area */ VipsImage *nstats; /* Node's stats for overlap area */ VipsImage *ostats; /* Other's stats for overlap area */ }; /* Struct for a join node. */ struct _JoinNode { char *name; /* This file name */ JoinType type; /* What kind of join */ SymbolTable *st; /* Symbol table we are on */ int dirty; /* Used for circularity detection */ /* Params from join line in .desc file. */ double a, b; double dx, dy; int mwidth; /* Cumulative transform for this node. What our parents do to us. * cumtrn.area is position and size of us, thistrn.area is pos and * size of arg2. */ VipsTransformation cumtrn; /* X-tras for LR/TB. thistrn is what we do to arg2. */ JoinNode *arg1; /* Left or up thing to join */ JoinNode *arg2; /* Right or down thing to join */ VipsTransformation thistrn; /* Transformation for arg2 */ /* Special for leaves: all the join_nodes we overlap with, the * VipsImage for that file, and the index. */ GSList *overlaps; VipsImage *im; VipsImage *trnim; /* Transformed image .. used in 2nd pass */ int index; }; /* We need to keep a table of JoinNode, indexed by file name. Hash into one * of these from the name to get a pointer to the base of a list of JoinNode * which hash to that offset. */ struct _SymbolTable { GSList **table; /* Ptr to base of hash table */ int sz; /* Size of hash table */ VipsImage *im; /* Malloc relative to this */ int novl; /* Number of unique overlaps */ int nim; /* Number of leaf images */ int njoin; /* Number of join nodes */ JoinNode *root; /* Root of join tree */ JoinNode *leaf; /* Leaf nominated to be 1.000 */ double *fac; /* Correction factors */ }; VipsImage *vips__global_open_image(SymbolTable *st, char *name); SymbolTable *vips__build_symtab(VipsImage *out, int sz); int vips__parse_desc(SymbolTable *st, VipsImage *in); void *vips__map_table(SymbolTable *st, VipsSListMap2Fn fn, void *a, void *b); int vips__build_mosaic(SymbolTable *st, VipsImage *out, transform_fn tfn, void *a); libvips-8.15.1/libvips/mosaicing/im_avgdxdy.c000066400000000000000000000040541454007373500212110ustar00rootroot00000000000000/* @(#) Function which averages the difference x_secondary[] - x_reference[] * @(#) and y_secondary[] - y_reference[] of the structure points; * @(#) The rounded integer result is returned into dx, dy * @(#) No images are involved in this function. * @(#) * @(#) int vips__avgdxdy(points, dx, dy) * @(#) TiePoints *points; * @(#) int *dx, *dy; * @(#) * @(#) Returns 0 on success and -1 on error. * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 20/12/1990 * Modified on : 18/04/1991 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pmosaicing.h" int vips__avgdxdy(TiePoints *points, int *dx, int *dy) { int sumdx, sumdy; int i; if (points->nopoints == 0) { vips_error("vips__avgdxdy", "%s", _("no points to average")); return -1; } /* Lots of points. */ sumdx = 0; sumdy = 0; for (i = 0; i < points->nopoints; i++) { sumdx += points->x_secondary[i] - points->x_reference[i]; sumdy += points->y_secondary[i] - points->y_reference[i]; } *dx = VIPS_RINT((double) sumdx / (double) points->nopoints); *dy = VIPS_RINT((double) sumdy / (double) points->nopoints); return 0; } libvips-8.15.1/libvips/mosaicing/im_clinear.c000066400000000000000000000110471454007373500211600ustar00rootroot00000000000000/* @(#) Function which calculates the coefficients between corresponding * @(#) points from reference and secondary images (probably from the scanner), * @(#) previously calculated using the functions vips__{lr,bt}calcon() and vips_chpair() * @(#) It is assumed that a selection of the best(?) possible points has * @(#) been already carried out and that those nopoints points are in arrays * @(#) x1, y1 and x2, y2 * @(#) No images are involved in this function and the calculated parameters * @(#) are returned in scale angle deltax and deltay of the TiePoints struct. * @(#) * @(#) int vips_clinear(points) * @(#) TiePoints *points; * @(#) * @(#) Returns 0 on success and -1 on error. * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 20/12/1990 * Modified on : 18/04/1991 * 24/1/97 JC * - tiny mem leak fixed * 18/6/20 kleisauke * - convert to vips8 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pmosaicing.h" int vips__clinear(TiePoints *points) { VipsImage *mat, *matinv; double *g; double value; double sx1 = 0.0, sx1x1 = 0.0, sy1 = 0.0, sy1y1 = 0.0; double sx2x1 = 0.0, sx2y1 = 0.0, sx2 = 0.0, sy2 = 0.0, sy2y1 = 0.0, sy2x1 = 0.0; int i, j; int elms; double scale, angle, xdelta, ydelta; int *xref, *yref, *xsec, *ysec; double *dx, *dy, *dev; xref = &points->x_reference[0]; yref = &points->y_reference[0]; xsec = &points->x_secondary[0]; ysec = &points->y_secondary[0]; dx = &points->dx[0]; dy = &points->dy[0]; dev = &points->deviation[0]; elms = points->nopoints; if (!(mat = vips_image_new_matrix(4, 4))) return -1; if (!(g = VIPS_ARRAY(NULL, 4, double))) { g_object_unref(mat); return -1; } for (i = 0; i < points->nopoints; i++) { sx1 += xref[i]; sx1x1 += xref[i] * xref[i]; sy1 += yref[i]; sy1y1 += yref[i] * yref[i]; sx2x1 += xsec[i] * xref[i]; sx2y1 += xsec[i] * yref[i]; sy2y1 += ysec[i] * yref[i]; sy2x1 += ysec[i] * xref[i]; sx2 += xsec[i]; sy2 += ysec[i]; } *VIPS_MATRIX(mat, 0, 0) = sx1x1 + sy1y1; *VIPS_MATRIX(mat, 1, 0) = 0; *VIPS_MATRIX(mat, 2, 0) = sx1; *VIPS_MATRIX(mat, 3, 0) = sy1; *VIPS_MATRIX(mat, 0, 1) = 0; *VIPS_MATRIX(mat, 1, 1) = sx1x1 + sy1y1; *VIPS_MATRIX(mat, 2, 1) = -sy1; *VIPS_MATRIX(mat, 3, 1) = sx1; *VIPS_MATRIX(mat, 0, 2) = sx1; *VIPS_MATRIX(mat, 1, 2) = -sy1; *VIPS_MATRIX(mat, 2, 2) = (double) elms; *VIPS_MATRIX(mat, 3, 2) = 0.0; *VIPS_MATRIX(mat, 0, 3) = sy1; *VIPS_MATRIX(mat, 1, 3) = sx1; *VIPS_MATRIX(mat, 2, 3) = 0.0; *VIPS_MATRIX(mat, 3, 3) = (double) elms; g[0] = sx2x1 + sy2y1; g[1] = -sx2y1 + sy2x1; g[2] = sx2; g[3] = sy2; if (vips_matrixinvert(mat, &matinv, NULL)) { g_object_unref(mat); g_free(g); vips_error("vips_clinear", "%s", _("vips_invmat failed")); return -1; } scale = 0.0; angle = 0.0; xdelta = 0.0; ydelta = 0.0; for (j = 0; j < 4; j++) { scale += *VIPS_MATRIX(matinv, j, 0) * g[j]; angle += *VIPS_MATRIX(matinv, j, 1) * g[j]; xdelta += *VIPS_MATRIX(matinv, j, 2) * g[j]; ydelta += *VIPS_MATRIX(matinv, j, 3) * g[j]; } g_object_unref(mat); g_object_unref(matinv); g_free(g); /* find the deviation of each point for the estimated variables * if it greater than 1 then the solution is not good enough * but this is handled by the main program */ for (i = 0; i < points->nopoints; i++) { dx[i] = xsec[i] - ((scale * xref[i]) - (angle * yref[i]) + xdelta); dy[i] = ysec[i] - ((angle * xref[i]) + (scale * yref[i]) + ydelta); value = sqrt(dx[i] * dx[i] + dy[i] * dy[i]); dev[i] = value; } points->l_scale = scale; points->l_angle = angle; points->l_deltax = xdelta; points->l_deltay = ydelta; return 0; } libvips-8.15.1/libvips/mosaicing/im_improve.c000066400000000000000000000114561454007373500212300ustar00rootroot00000000000000/* @(#) Function which improves the selection of tiepoints carried out by * @(#) vips_clinear() until no points have deviation greater than 1 pixel * @(#) No reference or secondary images are involved * @(#) Function vips__improve assumes that vips_clinear has been applied on points * @(#) No images are involved in this function and the result is * @(#) returned in outpoints which is declared as a pointer in the * @(#) calling routine. Space for outpoints should be allocated in the calling * @(#) routine * @(#) * @(#) int vips__improve(inpoints, outpoints) * @(#) TiePoints *inpoints, *outpoints; * @(#) * @(#) Returns 0 on success and -1 on error. * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 20/12/1990 * Modified on : 18/04/1991 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pmosaicing.h" static void copypoints(TiePoints *pnew, TiePoints *pold) { int i; pnew->reference = pold->reference; pnew->secondary = pold->secondary; pnew->deltax = pold->deltax; pnew->deltay = pold->deltay; pnew->nopoints = pold->nopoints; pnew->halfcorsize = pold->halfcorsize; pnew->halfareasize = pold->halfareasize; for (i = 0; i < pold->nopoints; i++) { pnew->x_reference[i] = pold->x_reference[i]; pnew->y_reference[i] = pold->y_reference[i]; pnew->x_secondary[i] = pold->x_secondary[i]; pnew->y_secondary[i] = pold->y_secondary[i]; pnew->contrast[i] = pold->contrast[i]; pnew->correlation[i] = pold->correlation[i]; pnew->deviation[i] = pold->deviation[i]; pnew->dx[i] = pold->dx[i]; pnew->dy[i] = pold->dy[i]; } pnew->l_scale = pold->l_scale; pnew->l_angle = pold->l_angle; pnew->l_deltax = pold->l_deltax; pnew->l_deltay = pold->l_deltay; } /* exclude all points with deviation greater or equal to 1.0 pixel */ static int copydevpoints(TiePoints *pnew, TiePoints *pold) { int i; int j; double thresh_dev, max_dev, min_dev; double *corr; min_dev = 9999.0; max_dev = 0.0; corr = &pold->correlation[0]; for (i = 0; i < pold->nopoints; i++) if (corr[i] > 0.01) { if (pold->deviation[i] / corr[i] < min_dev) min_dev = pold->deviation[i] / corr[i]; if (pold->deviation[i] / corr[i] > max_dev) max_dev = pold->deviation[i] / corr[i]; } thresh_dev = min_dev + (max_dev - min_dev) * 0.3; if (thresh_dev <= 1.0) thresh_dev = 1.0; for (i = 0, j = 0; i < pold->nopoints; i++) if (pold->correlation[i] > 0.01) if (pold->deviation[i] / corr[i] <= thresh_dev) { pnew->x_reference[j] = pold->x_reference[i]; pnew->y_reference[j] = pold->y_reference[i]; pnew->x_secondary[j] = pold->x_secondary[i]; pnew->y_secondary[j] = pold->y_secondary[i]; pnew->contrast[j] = pold->contrast[i]; pnew->correlation[j] = pold->correlation[i]; pnew->deviation[j] = pold->deviation[i]; pnew->dx[j] = pold->dx[i]; pnew->dy[j] = pold->dy[i]; j++; } pnew->nopoints = j; for (i = j; i < VIPS_MAXPOINTS; i++) { pnew->x_reference[i] = 0; pnew->y_reference[i] = 0; pnew->x_secondary[i] = 0; pnew->y_secondary[i] = 0; pnew->contrast[i] = 0; pnew->correlation[i] = 0.0; pnew->deviation[i] = 0.0; pnew->dx[i] = 0.0; pnew->dy[i] = 0.0; } /* Return non-zero if we changed something. */ if (j != pold->nopoints) return -1; return 0; } int vips__improve(TiePoints *inpoints, TiePoints *outpoints) { TiePoints points1, points2; TiePoints *p = &points1; TiePoints *q = &points2; /* p has the current state - make a new state, q, with only those * points which have a small deviation. */ for (copypoints(p, inpoints); copypoints(q, p), copydevpoints(q, p);) { /* If there are only a few left, jump out. */ if (q->nopoints < 2) break; /* Fit the model to the new set of points. */ if (vips__clinear(q)) return -1; /* And loop. */ VIPS_SWAP(void *, p, q); } /* q has the output - copy to outpoints. */ copypoints(outpoints, q); return 0; } libvips-8.15.1/libvips/mosaicing/im_initialize.c000066400000000000000000000043711454007373500217060ustar00rootroot00000000000000/* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "pmosaicing.h" int vips__initialize(TiePoints *points) { if (vips__clinear(points)) { /* vips_clinear failed! Set some sensible fallback values. */ int i, j; double xdelta, ydelta, max_cor; double a1, a2; int *xref = &points->x_reference[0]; int *yref = &points->y_reference[0]; int *xsec = &points->x_secondary[0]; int *ysec = &points->y_secondary[0]; double *corr = &points->correlation[0]; double *dx = &points->dx[0]; double *dy = &points->dy[0]; int npt = points->nopoints; max_cor = 0.0; for (i = 0; i < npt; i++) if (corr[i] > max_cor) max_cor = corr[i]; max_cor = max_cor - 0.04; xdelta = 0.0; ydelta = 0.0; j = 0; for (i = 0; i < npt; i++) if (corr[i] >= max_cor) { xdelta += xsec[i] - xref[i]; ydelta += ysec[i] - yref[i]; ++j; } if (j == 0) { vips_error("vips_initialize", "no tie points"); return -1; } xdelta = xdelta / j; ydelta = ydelta / j; for (i = 0; i < npt; i++) { dx[i] = (xsec[i] - xref[i]) - xdelta; dy[i] = (ysec[i] - yref[i]) - ydelta; } for (i = 0; i < npt; i++) { a1 = dx[i]; a2 = dy[i]; points->deviation[i] = sqrt(a1 * a1 + a2 * a2); } points->l_scale = 1.0; points->l_angle = 0.0; points->l_deltax = xdelta; points->l_deltay = ydelta; } return 0; } libvips-8.15.1/libvips/mosaicing/im_lrcalcon.c000066400000000000000000000167701454007373500213500ustar00rootroot00000000000000/* @(#) Functions which takes an initial estimate of deltax, deltay * @(#) between reference and secondary images (probably from the scanner), * @(#) and looks in three areas of the overlapping part of the reference image * @(#) corresponding to reference and secondary. For every other halfreasize * @(#) point of the three areas of the reference image * @(#) the contrast is calculated * @(#) an area 2*halfcorsize+1 centered at this point * @(#) Results are saved in the structure points * @(#) The function expects the following valid data in points: * @(#) deltax, deltay, nopoints, halfcorsize, halfareasize * @(#) and fills in the members: * @(#) x, y_reference[], contrast and x,y_secondary[], * @(#) based on deltax and deltay * @(#) Input image should are either memory mapped or in a buffer. * @(#) The initial setting checks all points of reference * @(#) in the overlapping area of the images to be mosaiced * @(#) To speed up the procedure the ysize of the box can be reduced * @(#) during the calculation of the ysize * @(#) An easy way is to change FACTOR to 1 2 or 3. * @(#) The calculation of the contrast is carried out based on bandno only. * @(#) The variable bandno should be between 1 and ref->Bands * @(#) * @(#) int vips_lrcalcon(ref, sec, bandno, points) * @(#) VipsImage *ref, *sec; * @(#) int bandno; * @(#) TiePoints *points; see mosaic.h * @(#) * @(#) Returns 0 on success and -1 on error. * @(#) * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 20/12/1990 * Modified on : 18/04/1991 * 8/7/93 JC * - now calls im_incheck() * 12/7/95 JC * - reworked * - what a lot of horrible old code there was too * 24/1/97 JC * - now ignores black stuff (all bands zero) when selecting possible tie * points, part of new mosaic policy * 26/9/97 JC * - now skips all-black windows, instead of any-black windows * 11/4/01 JC * - ooops, < 0 should have been <= 0 * 10/3/03 JC * - better error message for overlap too small * 18/6/20 kleisauke * - convert to vips8 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pmosaicing.h" /* A position and contrast. */ typedef struct { int x, y; int cont; } PosCont; /* Search a window for black pelss ... true if window is all black. * One-band uchar only. */ static int all_black(VipsImage *im, int xpos, int ypos, int winsize) { const int hwinsize = (winsize - 1) / 2; const int left = xpos - hwinsize; const int top = ypos - hwinsize; const int ls = im->Xsize; int x, y; VipsPel *line; /* Loop over image. */ line = im->data + top * ls + left; for (y = 0; y < winsize; y++) { for (x = 0; x < winsize; x++) if (line[x]) /* Not all black. */ return 0; line += ls; } return -1; } /* Calculate a value for 'contrast' within a window * of (odd) size winsize*winsize centered at location (xpos, ypos). * One band uchar only, */ static int calculate_contrast(VipsImage *im, int xpos, int ypos, int winsize) { const int hwinsize = (winsize - 1) / 2; const int left = xpos - hwinsize; const int top = ypos - hwinsize; const int ls = im->Xsize; int x, y; VipsPel *line, *p; int total; line = im->data + top * ls + left; for (total = 0, y = 0; y < winsize - 1; y++) { p = line; for (x = 0; x < winsize - 1; x++) { const int lrd = (int) p[0] - p[1]; const int tbd = (int) p[0] - p[ls]; total += abs(lrd) + abs(tbd); p += 1; } line += ls; } return total; } /* Compare two PosConts for qsort. */ static int pos_compare(const void *vl, const void *vr) { PosCont *l = (PosCont *) vl; PosCont *r = (PosCont *) vr; return r->cont - l->cont; } /* Search an area for the n best contrast areas. */ int vips__find_best_contrast(VipsImage *im, int xpos, int ypos, int xsize, int ysize, int xarray[], int yarray[], int cont[], int nbest, int hcorsize) { /* Geometry: we test squares of size windowsize, overlapping by * hcorsize. */ const int windowsize = 2 * hcorsize + 1; /* Number of squares we can fit in area. */ const int nacross = (xsize - windowsize + hcorsize) / hcorsize; const int ndown = (ysize - windowsize + hcorsize) / hcorsize; /* Number of squares we search. */ int elms; /* All points in this area. */ PosCont *pc; int x, y, i; if (nacross <= 0 || ndown <= 0) { vips_error("vips__lrcalcon", "%s", _("overlap too small for your search size")); return -1; } /* Malloc space for 3 int arrays, to keep the int coordinates and * the contrast. */ if (!(pc = VIPS_ARRAY(NULL, nacross * ndown, PosCont))) return -1; /* Find contrast for each area. */ for (i = 0, y = 0; y < ndown; y++) for (x = 0; x < nacross; x++) { const int left = xpos + x * hcorsize; const int top = ypos + y * hcorsize; /* Skip this position if it is all black. */ if (all_black(im, left, top, windowsize)) continue; /* Find contrast and note. */ pc[i].x = left; pc[i].y = top; pc[i].cont = calculate_contrast(im, left, top, windowsize); i++; } /* Note number found. */ elms = i; /* Found enough tie-points? */ if (elms < nbest) { vips_error("vips_mosaic", _("found %d tie-points, need at least %d"), elms, nbest); g_free(pc); return -1; } /* Sort areas by contrast. */ qsort(pc, elms, sizeof(PosCont), pos_compare); /* Copy the n best into our parent. */ for (i = 0; i < nbest; i++) { xarray[i] = pc[i].x; yarray[i] = pc[i].y; cont[i] = pc[i].cont; } g_free(pc); return 0; } int vips__lrcalcon(VipsImage *ref, TiePoints *points) { /* Geometry: border we must leave around each area. */ const int border = points->halfareasize; /* Height of an area. */ const int aheight = ref->Ysize / AREAS; /* Number of points we find in each area. */ const int len = points->nopoints / AREAS; int i; VipsRect area; /* Make sure we can read image. */ if (vips_image_wio_input(ref)) return -1; if (ref->Bands != 1 || ref->BandFmt != VIPS_FORMAT_UCHAR) { vips_error("vips__lrcalcon", "%s", _("not 1-band uchar image")); return -1; } /* Define bits to search for high-contrast areas. Need to be able to * fit at least 1 window in. */ area.height = aheight; area.width = ref->Xsize; area.left = 0; area.top = 0; vips_rect_marginadjust(&area, -border); area.width--; area.height--; /* Loop over areas, finding points. */ for (i = 0; area.top < ref->Ysize; area.top += aheight, i++) if (vips__find_best_contrast(ref, area.left, area.top, area.width, area.height, points->x_reference + i * len, points->y_reference + i * len, points->contrast + i * len, len, points->halfcorsize)) return -1; return 0; } libvips-8.15.1/libvips/mosaicing/im_tbcalcon.c000066400000000000000000000073701454007373500213340ustar00rootroot00000000000000/* @(#) Functions which takes an initial estimate of deltax, deltay * @(#) between reference and secondary images (probably from the scanner), * @(#) and looks in three areas of the overlapping part of the reference image * @(#) corresponding to reference and secondary. For every other halfreasize * @(#) point of the three areas of the reference image * @(#) the contrast is calculated * @(#) an area 2*halfcorsize+1 centered at this point * @(#) Results are saved in the structure points * @(#) The function expects the following valid data in points: * @(#) deltax, deltay, nopoints, halfcorsize, halfareasize * @(#) and fills in the members: * @(#) x, y_reference[], contrast and x,y_secondary[], * @(#) based on deltax and deltay * @(#) Input image should are either memory mapped or in a buffer. * @(#) To make the calculation faster set FACTOR to 1, 2 or 3 * @(#) Calculations are based on bandno only. * @(#) The function uses functions vips__find_best_contrast() * @(#) which is in vips_lrcalcon() * @(#) * @(#) int vips_tbcalcon(ref, sec, bandno, points) * @(#) VipsImage *ref, *sec; * @(#) int bandno; * @(#) TiePoints *points; see mosaic.h * @(#) * @(#) Returns 0 on success and -1 on error. * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 20/12/1990 * Modified on : 18/04/1991 * 8/7/93 JC * - allow IM_CODING_LABQ coding * - now calls im_incheck() * 12/7/95 JC * - reworked * - what a lot of horrible old code there was too * 18/6/20 kleisauke * - convert to vips8 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pmosaicing.h" int vips__tbcalcon(VipsImage *ref, TiePoints *points) { /* Geometry: border we must leave around each area. */ const int border = points->halfareasize; /* Width of an area. */ const int awidth = ref->Xsize / AREAS; /* Number of points we find in each area. */ const int len = points->nopoints / AREAS; int i; VipsRect area; /* Make sure we can read image. */ if (vips_image_wio_input(ref)) return -1; if (ref->Bands != 1 || ref->BandFmt != VIPS_FORMAT_UCHAR) { vips_error("vips__tbcalcon", "%s", _("help!")); return -1; } /* Define bits to search for high-contrast areas. */ area.width = awidth; area.height = ref->Ysize; area.left = 0; area.top = 0; vips_rect_marginadjust(&area, -border); area.width--; area.height--; if (area.width < 0 || area.height < 0) { vips_error("vips__tbcalcon", "%s", _("overlap too small")); return -1; } /* Loop over areas, finding points. */ for (i = 0; area.left < ref->Xsize; area.left += awidth, i++) if (vips__find_best_contrast(ref, area.left, area.top, area.width, area.height, points->x_reference + i * len, points->y_reference + i * len, points->contrast + i * len, len, points->halfcorsize)) return -1; return 0; } libvips-8.15.1/libvips/mosaicing/lrmerge.c000066400000000000000000000666761454007373500205350ustar00rootroot00000000000000/* Merge two images left-right. * * Copyright: 1990, 1991 N. Dessipris * Author: N. Dessipris * Written on: 20/09/1990 * Updated on: 17/04/1991 * 1/6/92: JC * - check for difference bug fixed * - geometry calculations improved and simplified * - small speedups Kirk Martinez for Sys5 29/4/93 * 7/8/93 JC * - ANSIfied * - memory leaks fixed, ready for partial v2 * - now does IM_CODING_LABQ too * 8/11/93 JC * - now propagates both input histories * - adds magic lines for global mosaic optimisation * * * May/1994 Ahmed Abbood * * - Modified to use partials on all IO * June/1995 Ahmed Abbood * * - Modified to work with different types of images. * * 16/6/95 JC * - tidied up a little * - added to VIPS! * 7/9/95 JC * - split into two parts: im_lrmerge() and im__lrmerge() * - latter called by im_lrmosaic() * - just the same as public im_lrmerge(), but adds no history * - necessary for im_global_balance() * - small bugs fixed * 10/10/95 JC * - better checks that parameters are sensible * 11/10/95 JC * - Kirk spotted what a load of rubbish Ahmed's code is * - rewritten - many, many bugs fixed * 24/1/97 JC * - now outputs bounding area of input images, rather than clipping * - ignores 0 pixels in blend * - small tidies * 7/2/97 JC * - new blend, caching * 25/2/97 JC * - old blend back, much simpler * - speed this up at some point if you think of an easy way to do it * 29/7/97 JC * - IM_CODING_LABQ blend now works, was bug in im_wrapone() * - small tidies * 10/1/98 JC * - merge LUTs now shared between all running mergers * - frees memory explicitly in im__stop_merge, for much better memory * use in large mosaics, huge improvement! * 18/2/98 JC * - im_demand_hint() call added * 19/2/98 JC * - now works for any dx/dy by calling im_insert() for bizarre cases * 26/9/99 JC * - ooops, blend lut was wrong! wonder how long that's been broken, * since feb97 I guess * 2/2/01 JC * - added tunable max blend width * 8/3/01 JC * - switched to integer arithmetic for integer blends * 7/11/01 JC * - more sophisticated transparency handling * - tiny blend speed up * 19/3/02 JC * - move fl cache to main state for better sharing * 15/8/02 JC * - records Xoffset/Yoffset * 20/6/05 * - now requires all bands == 0 for transparency (used to just check * band 0) * 24/1/11 * - gtk-doc * - match formats and bands automatically * 22/5/14 * - wrap as a class * 18/6/20 kleisauke * - convert to vips8 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include /* Define for debug output. #define DEBUG */ #include #include #include #include #include "pmosaicing.h" /* Blend luts. Shared between all lr and tb blends. */ double *vips__coef1 = NULL; double *vips__coef2 = NULL; int *vips__icoef1 = NULL; int *vips__icoef2 = NULL; /* Create a lut for the merging area. Always BLEND_SIZE entries, we * scale later when we index it. */ int vips__make_blend_luts(void) { int x; /* Already done? */ if (vips__coef1 && vips__coef2) return 0; /* Allocate and fill. */ vips__coef1 = VIPS_ARRAY(NULL, BLEND_SIZE, double); vips__coef2 = VIPS_ARRAY(NULL, BLEND_SIZE, double); vips__icoef1 = VIPS_ARRAY(NULL, BLEND_SIZE, int); vips__icoef2 = VIPS_ARRAY(NULL, BLEND_SIZE, int); if (!vips__coef1 || !vips__coef2 || !vips__icoef1 || !vips__icoef2) return -1; for (x = 0; x < BLEND_SIZE; x++) { double a = VIPS_PI * x / (BLEND_SIZE - 1.0); vips__coef1[x] = (cos(a) + 1.0) / 2.0; vips__coef2[x] = 1.0 - vips__coef1[x]; vips__icoef1[x] = vips__coef1[x] * BLEND_SCALE; vips__icoef2[x] = vips__coef2[x] * BLEND_SCALE; } return 0; } /* Return the position of the first non-zero pel from the left. */ static int find_first(VipsRegion *ir, int *pos, int x, int y, int w) { VipsPel *pr = VIPS_REGION_ADDR(ir, x, y); VipsImage *im = ir->im; int ne = w * im->Bands; int i; /* Double the number of bands in a complex. */ if (vips_band_format_iscomplex(im->BandFmt)) ne *= 2; /* Search for the first non-zero band element from the left edge of the image. */ #define lsearch(TYPE) \ { \ TYPE *p = (TYPE *) pr; \ \ for (i = 0; i < ne; i++) \ if (p[i]) \ break; \ } switch (im->BandFmt) { case VIPS_FORMAT_UCHAR: lsearch(unsigned char); break; case VIPS_FORMAT_CHAR: lsearch(signed char); break; case VIPS_FORMAT_USHORT: lsearch(unsigned short); break; case VIPS_FORMAT_SHORT: lsearch(signed short); break; case VIPS_FORMAT_UINT: lsearch(unsigned int); break; case VIPS_FORMAT_INT: lsearch(signed int); break; case VIPS_FORMAT_FLOAT: lsearch(float); break; case VIPS_FORMAT_DOUBLE: lsearch(double); break; case VIPS_FORMAT_COMPLEX: lsearch(float); break; case VIPS_FORMAT_DPCOMPLEX: lsearch(double); break; default: g_assert_not_reached(); return -1; } /* i is first non-zero band element, we want first non-zero pixel. */ *pos = x + i / im->Bands; return 0; } /* Return the position of the first non-zero pel from the right. */ static int find_last(VipsRegion *ir, int *pos, int x, int y, int w) { VipsPel *pr = VIPS_REGION_ADDR(ir, x, y); VipsImage *im = ir->im; int ne = w * im->Bands; int i; /* Double the number of bands in a complex. */ if (vips_band_format_iscomplex(im->BandFmt)) ne *= 2; /* Search for the first non-zero band element from the right. */ #define rsearch(TYPE) \ { \ TYPE *p = (TYPE *) pr; \ \ for (i = ne - 1; i >= 0; i--) \ if (p[i]) \ break; \ } switch (im->BandFmt) { case VIPS_FORMAT_UCHAR: rsearch(unsigned char); break; case VIPS_FORMAT_CHAR: rsearch(signed char); break; case VIPS_FORMAT_USHORT: rsearch(unsigned short); break; case VIPS_FORMAT_SHORT: rsearch(signed short); break; case VIPS_FORMAT_UINT: rsearch(unsigned int); break; case VIPS_FORMAT_INT: rsearch(signed int); break; case VIPS_FORMAT_FLOAT: rsearch(float); break; case VIPS_FORMAT_DOUBLE: rsearch(double); break; case VIPS_FORMAT_COMPLEX: rsearch(float); break; case VIPS_FORMAT_DPCOMPLEX: rsearch(double); break; default: vips_error("lrmerge", "%s", _("internal error")); return -1; } /* i is first non-zero band element, we want first non-zero pixel. */ *pos = x + i / im->Bands; return 0; } /* Make sure we have first/last for this area. */ static int make_firstlast(MergeInfo *inf, Overlapping *ovlap, VipsRect *oreg) { VipsRegion *rir = inf->rir; VipsRegion *sir = inf->sir; VipsRect rr, sr; int y, yr, ys; int missing; /* We're going to build first/last ... lock it from other generate * threads. In fact it's harmless if we do get two writers, but we may * avoid duplicating work. */ g_mutex_lock(ovlap->fl_lock); /* Do we already have first/last for this area? Bail out if we do. */ missing = 0; for (y = oreg->top; y < VIPS_RECT_BOTTOM(oreg); y++) { const int j = y - ovlap->overlap.top; const int first = ovlap->first[j]; if (first < 0) { missing = 1; break; } } if (!missing) { /* No work to do! */ g_mutex_unlock(ovlap->fl_lock); return 0; } /* Entire width of overlap in ref for scan-lines we want. */ rr.left = ovlap->overlap.left; rr.top = oreg->top; rr.width = ovlap->overlap.width; rr.height = oreg->height; rr.left -= ovlap->rarea.left; rr.top -= ovlap->rarea.top; /* Entire width of overlap in sec for scan-lines we want. */ sr.left = ovlap->overlap.left; sr.top = oreg->top; sr.width = ovlap->overlap.width; sr.height = oreg->height; sr.left -= ovlap->sarea.left; sr.top -= ovlap->sarea.top; #ifdef DEBUG printf("lrmerge: making first/last for areas:\n"); printf("ref: left = %d, top = %d, width = %d, height = %d\n", rr.left, rr.top, rr.width, rr.height); printf("sec: left = %d, top = %d, width = %d, height = %d\n", sr.left, sr.top, sr.width, sr.height); #endif /* Make pixels. */ if (vips_region_prepare(rir, &rr) || vips_region_prepare(sir, &sr)) { g_mutex_unlock(ovlap->fl_lock); return -1; } /* Make first/last cache. */ for (y = oreg->top, yr = rr.top, ys = sr.top; y < VIPS_RECT_BOTTOM(oreg); y++, yr++, ys++) { const int j = y - ovlap->overlap.top; int *first = &ovlap->first[j]; int *last = &ovlap->last[j]; /* Done this line already? */ if (*first < 0) { /* Search for start/end of overlap on this scan-line. */ if (find_first(sir, first, sr.left, ys, sr.width) || find_last(rir, last, rr.left, yr, rr.width)) { g_mutex_unlock(ovlap->fl_lock); return -1; } /* Translate to output space. */ *first += ovlap->sarea.left; *last += ovlap->rarea.left; /* Clip to maximum blend width, if necessary. */ if (ovlap->mwidth >= 0 && *last - *first > ovlap->mwidth) { int shrinkby = (*last - *first) - ovlap->mwidth; *first += shrinkby / 2; *last -= shrinkby / 2; } } } g_mutex_unlock(ovlap->fl_lock); return 0; } /* Test pixel == 0. */ #define TEST_ZERO(TYPE, T, RESULT) \ { \ TYPE *tt = (T); \ int ii; \ \ for (ii = 0; ii < cb; ii++) \ if (tt[i + ii]) \ break; \ if (ii == cb) \ (RESULT) = 1; \ } /* Blend two integer images. */ #define iblend(TYPE, B, IN1, IN2, OUT) \ { \ TYPE *tr = (TYPE *) (IN1); \ TYPE *ts = (TYPE *) (IN2); \ TYPE *tq = (TYPE *) (OUT); \ const int cb = (B); \ const int left = VIPS_CLIP(0, first - oreg->left, oreg->width); \ const int right = VIPS_CLIP(left, last - oreg->left, oreg->width); \ int ref_zero; \ int sec_zero; \ int x, b; \ int i; \ \ /* Left of the blend area. \ */ \ for (i = 0, x = 0; x < left; x++) { \ ref_zero = 0; \ TEST_ZERO(TYPE, tr, ref_zero); \ if (!ref_zero) \ for (b = 0; b < cb; b++, i++) \ tq[i] = tr[i]; \ else \ for (b = 0; b < cb; b++, i++) \ tq[i] = ts[i]; \ } \ \ /* In blend area. \ */ \ for (x = left; x < right; x++) { \ ref_zero = 0; \ sec_zero = 0; \ TEST_ZERO(TYPE, tr, ref_zero); \ TEST_ZERO(TYPE, ts, sec_zero); \ \ if (!ref_zero && !sec_zero) { \ int inx = ((x + oreg->left - first) << BLEND_SHIFT) / bwidth; \ int c1 = vips__icoef1[inx]; \ int c2 = vips__icoef2[inx]; \ \ for (b = 0; b < cb; b++, i++) \ tq[i] = c1 * tr[i] / BLEND_SCALE + \ c2 * ts[i] / BLEND_SCALE; \ } \ else if (!ref_zero) \ for (b = 0; b < cb; b++, i++) \ tq[i] = tr[i]; \ else \ for (b = 0; b < cb; b++, i++) \ tq[i] = ts[i]; \ } \ \ /* Right of blend. \ */ \ for (x = right; x < oreg->width; x++) { \ sec_zero = 0; \ TEST_ZERO(TYPE, ts, sec_zero); \ if (!sec_zero) \ for (b = 0; b < cb; b++, i++) \ tq[i] = ts[i]; \ else \ for (b = 0; b < cb; b++, i++) \ tq[i] = tr[i]; \ } \ } /* Blend two float images. */ #define fblend(TYPE, B, IN1, IN2, OUT) \ { \ TYPE *tr = (TYPE *) (IN1); \ TYPE *ts = (TYPE *) (IN2); \ TYPE *tq = (TYPE *) (OUT); \ const int cb = (B); \ const int left = VIPS_CLIP(0, first - oreg->left, oreg->width); \ const int right = VIPS_CLIP(left, last - oreg->left, oreg->width); \ int ref_zero; \ int sec_zero; \ int x, b; \ int i; \ \ /* Left of the blend area. \ */ \ for (i = 0, x = 0; x < left; x++) { \ ref_zero = 0; \ TEST_ZERO(TYPE, tr, ref_zero); \ if (!ref_zero) \ for (b = 0; b < cb; b++, i++) \ tq[i] = tr[i]; \ else \ for (b = 0; b < cb; b++, i++) \ tq[i] = ts[i]; \ } \ \ /* In blend area. \ */ \ for (x = left; x < right; x++) { \ ref_zero = 0; \ sec_zero = 0; \ TEST_ZERO(TYPE, tr, ref_zero); \ TEST_ZERO(TYPE, ts, sec_zero); \ \ if (!ref_zero && !sec_zero) { \ int inx = ((x + oreg->left - first) << BLEND_SHIFT) / bwidth; \ double c1 = vips__coef1[inx]; \ double c2 = vips__coef2[inx]; \ \ for (b = 0; b < cb; b++, i++) \ tq[i] = c1 * tr[i] + c2 * ts[i]; \ } \ else if (!ref_zero) \ for (b = 0; b < cb; b++, i++) \ tq[i] = tr[i]; \ else \ for (b = 0; b < cb; b++, i++) \ tq[i] = ts[i]; \ } \ \ /* Right of blend. \ */ \ for (x = right; x < oreg->width; x++) { \ sec_zero = 0; \ TEST_ZERO(TYPE, ts, sec_zero); \ if (!sec_zero) \ for (b = 0; b < cb; b++, i++) \ tq[i] = ts[i]; \ else \ for (b = 0; b < cb; b++, i++) \ tq[i] = tr[i]; \ } \ } /* Left-right blend function for non-labpack images. */ static int lr_blend(VipsRegion *out_region, MergeInfo *inf, Overlapping *ovlap, VipsRect *oreg) { VipsRegion *rir = inf->rir; VipsRegion *sir = inf->sir; VipsImage *im = out_region->im; VipsRect prr, psr; int y, yr, ys; /* Make sure we have a complete first/last set for this area. */ if (make_firstlast(inf, ovlap, oreg)) return -1; /* Part of rr which we will output. */ prr = *oreg; prr.left -= ovlap->rarea.left; prr.top -= ovlap->rarea.top; /* Part of sr which we will output. */ psr = *oreg; psr.left -= ovlap->sarea.left; psr.top -= ovlap->sarea.top; /* Make pixels. */ if (vips_region_prepare(rir, &prr) || vips_region_prepare(sir, &psr)) return -1; /* Loop down overlap area. */ for (y = oreg->top, yr = prr.top, ys = psr.top; y < VIPS_RECT_BOTTOM(oreg); y++, yr++, ys++) { VipsPel *pr = VIPS_REGION_ADDR(rir, prr.left, yr); VipsPel *ps = VIPS_REGION_ADDR(sir, psr.left, ys); VipsPel *q = VIPS_REGION_ADDR(out_region, oreg->left, y); const int j = y - ovlap->overlap.top; const int first = ovlap->first[j]; const int last = ovlap->last[j]; const int bwidth = last - first; switch (im->BandFmt) { case VIPS_FORMAT_UCHAR: iblend(unsigned char, im->Bands, pr, ps, q); break; case VIPS_FORMAT_CHAR: iblend(signed char, im->Bands, pr, ps, q); break; case VIPS_FORMAT_USHORT: iblend(unsigned short, im->Bands, pr, ps, q); break; case VIPS_FORMAT_SHORT: iblend(signed short, im->Bands, pr, ps, q); break; case VIPS_FORMAT_UINT: iblend(unsigned int, im->Bands, pr, ps, q); break; case VIPS_FORMAT_INT: iblend(signed int, im->Bands, pr, ps, q); break; case VIPS_FORMAT_FLOAT: fblend(float, im->Bands, pr, ps, q); break; case VIPS_FORMAT_DOUBLE: fblend(double, im->Bands, pr, ps, q); break; case VIPS_FORMAT_COMPLEX: fblend(float, im->Bands * 2, pr, ps, q); break; case VIPS_FORMAT_DPCOMPLEX: fblend(double, im->Bands * 2, pr, ps, q); break; default: g_assert_not_reached(); return -1; } } return 0; } /* Left-right blend function for VIPS_CODING_LABQ images. */ static int lr_blend_labpack(VipsRegion *out_region, MergeInfo *inf, Overlapping *ovlap, VipsRect *oreg) { VipsRegion *rir = inf->rir; VipsRegion *sir = inf->sir; VipsRect prr, psr; int y, yr, ys; /* Make sure we have a complete first/last set for this area. This * will just look at the top 8 bits of L, not all 10, but should be OK. */ if (make_firstlast(inf, ovlap, oreg)) return -1; /* Part of rr which we will output. */ prr = *oreg; prr.left -= ovlap->rarea.left; prr.top -= ovlap->rarea.top; /* Part of sr which we will output. */ psr = *oreg; psr.left -= ovlap->sarea.left; psr.top -= ovlap->sarea.top; /* Make pixels. */ if (vips_region_prepare(rir, &prr) || vips_region_prepare(sir, &psr)) return -1; /* Loop down overlap area. */ for (y = oreg->top, yr = prr.top, ys = psr.top; y < VIPS_RECT_BOTTOM(oreg); y++, yr++, ys++) { VipsPel *pr = VIPS_REGION_ADDR(rir, prr.left, yr); VipsPel *ps = VIPS_REGION_ADDR(sir, psr.left, ys); VipsPel *q = VIPS_REGION_ADDR(out_region, oreg->left, y); const int j = y - ovlap->overlap.top; const int first = ovlap->first[j]; const int last = ovlap->last[j]; const int bwidth = last - first; float *fq = inf->merge; float *r = inf->from1; float *s = inf->from2; /* Unpack two bits we want. */ vips__LabQ2Lab_vec(r, pr, oreg->width); vips__LabQ2Lab_vec(s, ps, oreg->width); /* Blend as floats. */ fblend(float, 3, r, s, fq); /* Re-pack to output buffer. */ vips__Lab2LabQ_vec(q, inf->merge, oreg->width); } return 0; } static void lock_free(VipsImage *image, GMutex *lock) { VIPS_FREEF(vips_g_mutex_free, lock); } /* Build basic per-call state and do some geometry calculations. Shared with * tbmerge, so not static. */ Overlapping * vips__build_mergestate(const char *domain, VipsImage *ref, VipsImage *sec, VipsImage *out, int dx, int dy, int mwidth) { VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(out), 4); VipsImage **array; Overlapping *ovlap; int x; /* TODO(kleisauke): Copied from vips_insert, perhaps we * need a separate function for this? * (just like im__insert_base) */ if (vips_image_pio_input(ref) || vips_image_pio_input(sec) || vips_check_bands_1orn(domain, ref, sec) || vips_check_coding_known(domain, ref) || vips_check_coding_same(domain, ref, sec)) return NULL; /* Cast our input images up to a common format and bands. */ if (vips__formatalike(ref, sec, &t[0], &t[1]) || vips__bandalike(domain, t[0], t[1], &t[2], &t[3])) return NULL; if (!(array = vips_allocate_input_array(out, t[2], t[3], NULL))) return NULL; if (vips_image_pipeline_array(out, VIPS_DEMAND_STYLE_SMALLTILE, array)) return NULL; if (mwidth < -1) { vips_error(domain, "%s", _("mwidth must be -1 or >= 0")); return NULL; } if (!(ovlap = VIPS_NEW(out, Overlapping))) return NULL; ovlap->ref = array[0]; ovlap->sec = array[1]; ovlap->out = out; ovlap->dx = dx; ovlap->dy = dy; ovlap->mwidth = mwidth; /* Area occupied by ref image. Place at (0,0) to start with. */ ovlap->rarea.left = 0; ovlap->rarea.top = 0; ovlap->rarea.width = ovlap->ref->Xsize; ovlap->rarea.height = ovlap->ref->Ysize; /* Area occupied by sec image. */ ovlap->sarea.left = -dx; ovlap->sarea.top = -dy; ovlap->sarea.width = ovlap->sec->Xsize; ovlap->sarea.height = ovlap->sec->Ysize; /* Compute overlap. */ vips_rect_intersectrect(&ovlap->rarea, &ovlap->sarea, &ovlap->overlap); if (vips_rect_isempty(&ovlap->overlap)) { vips_error(domain, "%s", _("no overlap")); return NULL; } /* Find position and size of output image. */ vips_rect_unionrect(&ovlap->rarea, &ovlap->sarea, &ovlap->oarea); /* Now: translate everything, so that the output image, not the left * image, is at (0,0). */ ovlap->rarea.left -= ovlap->oarea.left; ovlap->rarea.top -= ovlap->oarea.top; ovlap->sarea.left -= ovlap->oarea.left; ovlap->sarea.top -= ovlap->oarea.top; ovlap->overlap.left -= ovlap->oarea.left; ovlap->overlap.top -= ovlap->oarea.top; ovlap->oarea.left = 0; ovlap->oarea.top = 0; /* Make sure blend luts are built. */ vips__make_blend_luts(); /* Size of first/last cache. Could be either of these ... just pick * the larger. */ ovlap->flsize = VIPS_MAX(ovlap->overlap.width, ovlap->overlap.height); /* Build first/last cache. */ ovlap->first = VIPS_ARRAY(out, ovlap->flsize, int); ovlap->last = VIPS_ARRAY(out, ovlap->flsize, int); if (!ovlap->first || !ovlap->last) return NULL; for (x = 0; x < ovlap->flsize; x++) ovlap->first[x] = -1; ovlap->fl_lock = vips_g_mutex_new(); g_signal_connect(out, "close", G_CALLBACK(lock_free), ovlap->fl_lock); return ovlap; } /* Build per-call state. */ static Overlapping * build_lrstate(VipsImage *ref, VipsImage *sec, VipsImage *out, int dx, int dy, int mwidth) { Overlapping *ovlap; if (!(ovlap = vips__build_mergestate("lrmerge", ref, sec, out, dx, dy, mwidth))) return NULL; /* Select blender. */ switch (ovlap->ref->Coding) { case VIPS_CODING_LABQ: ovlap->blend = lr_blend_labpack; break; case VIPS_CODING_NONE: ovlap->blend = lr_blend; break; default: vips_error("lrmerge", "%s", _("unknown coding type")); return NULL; } /* Find the parts of output which come just from ref and just from sec. */ ovlap->rpart = ovlap->rarea; ovlap->spart = ovlap->sarea; ovlap->rpart.width -= ovlap->overlap.width; ovlap->spart.left += ovlap->overlap.width; ovlap->spart.width -= ovlap->overlap.width; /* Is there too much overlap? ie. right edge of ref image is greater * than right edge of sec image, or left > left. */ if (VIPS_RECT_RIGHT(&ovlap->rarea) > VIPS_RECT_RIGHT(&ovlap->sarea) || ovlap->rarea.left > ovlap->sarea.left) { vips_error("lrmerge", "%s", _("too much overlap")); return NULL; } /* Max number of pixels we may have to blend over. */ ovlap->blsize = ovlap->overlap.width; return ovlap; } /* The area being demanded can be filled using only pels from either the ref * or the sec images. Attach output to the appropriate part of the input image. * area is the position that ir->im occupies in the output image. * * Shared with tbmerge, so not static. */ int vips__attach_input(VipsRegion *out_region, VipsRegion *ir, VipsRect *area) { VipsRect r = out_region->valid; /* Translate to source coordinate space. */ r.left -= area->left; r.top -= area->top; /* Demand input. */ if (vips_region_prepare(ir, &r)) return -1; /* Attach or to ir. */ if (vips_region_region(out_region, ir, &out_region->valid, r.left, r.top)) return -1; return 0; } /* The area being demanded requires pixels from the ref and sec images. As * above, but just do a sub-area of the output, and make sure we copy rather * than just pointer-fiddling. reg is the sub-area of out_region->valid we * should do. * * Shared with tbmerge, so not static. */ int vips__copy_input(VipsRegion *out_region, VipsRegion *ir, VipsRect *area, VipsRect *reg) { VipsRect r = *reg; /* Translate to source coordinate space. */ r.left -= area->left; r.top -= area->top; /* Paint this area of ir into out_region. */ if (vips_region_prepare_to(ir, out_region, &r, reg->left, reg->top)) return -1; return 0; } /* Generate function for merge. This is shared between lrmerge and * tbmerge. */ int vips__merge_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { MergeInfo *inf = (MergeInfo *) seq; Overlapping *ovlap = (Overlapping *) a; VipsRect *r = &out_region->valid; VipsRect rreg, sreg, oreg; /* Find intersection with overlap, ref and sec parts. */ vips_rect_intersectrect(r, &ovlap->rpart, &rreg); vips_rect_intersectrect(r, &ovlap->spart, &sreg); /* Do easy cases first: can we satisfy this demand with pixels just * from ref, or just from sec. */ if (vips_rect_equalsrect(r, &rreg)) { if (vips__attach_input(out_region, inf->rir, &ovlap->rarea)) return -1; } else if (vips_rect_equalsrect(r, &sreg)) { if (vips__attach_input(out_region, inf->sir, &ovlap->sarea)) return -1; } else { /* Difficult case - do in three stages: black out whole area, * copy in parts of ref and sec we touch, write blend area. * This could be sped up somewhat ... we will usually black * out far too much, and write to the blend area three times. * Upgrade in the future! */ /* Need intersections with whole of left & right, and overlap * too. */ vips_rect_intersectrect(r, &ovlap->rarea, &rreg); vips_rect_intersectrect(r, &ovlap->sarea, &sreg); vips_rect_intersectrect(r, &ovlap->overlap, &oreg); vips_region_black(out_region); if (!vips_rect_isempty(&rreg)) if (vips__copy_input(out_region, inf->rir, &ovlap->rarea, &rreg)) return -1; if (!vips_rect_isempty(&sreg)) if (vips__copy_input(out_region, inf->sir, &ovlap->sarea, &sreg)) return -1; /* Nasty: inf->rir and inf->sir now point to the same bit of * memory (part of out_region), and we've written twice. We * need to make sure we get fresh pixels for the blend, so * we must invalidate them both. Should maybe add a call to * the API for this. */ inf->rir->valid.width = inf->sir->valid.width = 0; /* Now blat in the blended area. */ if (!vips_rect_isempty(&oreg)) if (ovlap->blend(out_region, inf, ovlap, &oreg)) return -1; } return 0; } /* Stop function. Shared with tbmerge. Free explicitly to reduce mem * requirements quickly for large mosaics. */ int vips__stop_merge(void *seq, void *a, void *b) { MergeInfo *inf = (MergeInfo *) seq; VIPS_UNREF(inf->rir); VIPS_UNREF(inf->sir); VIPS_FREE(inf->from1); VIPS_FREE(inf->from2); VIPS_FREE(inf->merge); g_free(inf); return 0; } /* Start function. Shared with tbmerge. */ void * vips__start_merge(VipsImage *out, void *a, void *b) { Overlapping *ovlap = (Overlapping *) a; MergeInfo *inf; if (!(inf = VIPS_NEW(NULL, MergeInfo))) return NULL; inf->rir = NULL; inf->sir = NULL; inf->from1 = NULL; inf->from2 = NULL; inf->merge = NULL; /* If this is going to be a VIPS_CODING_LABQ, we need VIPS_CODING_LABQ * blend buffers. */ if (out->Coding == VIPS_CODING_LABQ) { inf->from1 = VIPS_ARRAY(NULL, ovlap->blsize * 3, float); inf->from2 = VIPS_ARRAY(NULL, ovlap->blsize * 3, float); inf->merge = VIPS_ARRAY(NULL, ovlap->blsize * 3, float); if (!inf->from1 || !inf->from2 || !inf->merge) { vips__stop_merge(inf, NULL, NULL); return NULL; } } inf->rir = vips_region_new(ovlap->ref); inf->sir = vips_region_new(ovlap->sec); if (!inf->rir || !inf->sir) { vips__stop_merge(inf, NULL, NULL); return NULL; } return inf; } int vips__lrmerge(VipsImage *ref, VipsImage *sec, VipsImage *out, int dx, int dy, int mwidth) { Overlapping *ovlap; #ifdef DEBUG printf("lrmerge %s %s %s %d %d %d\n", ref->filename, sec->filename, out->filename, dx, dy, mwidth); printf("ref is %d x %d pixels\n", ref->Xsize, ref->Ysize); printf("sec is %d x %d pixels\n", sec->Xsize, sec->Ysize); #endif if (dx > 0 || dx < 1 - ref->Xsize) { VipsImage *x; #ifdef DEBUG printf("lrmerge: no overlap, using insert\n"); #endif /* No overlap, use insert instead. */ if (vips_insert(ref, sec, &x, -dx, -dy, "expand", TRUE, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); out->Xoffset = -dx; out->Yoffset = -dy; return 0; } if (!(ovlap = build_lrstate(ref, sec, out, dx, dy, mwidth))) return -1; if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_THINSTRIP, ovlap->ref, ovlap->sec, NULL)) return -1; out->Xsize = ovlap->oarea.width; out->Ysize = ovlap->oarea.height; out->Xoffset = -dx; out->Yoffset = -dy; if (vips_image_generate(out, vips__start_merge, vips__merge_gen, vips__stop_merge, ovlap, NULL)) return -1; return 0; } const char * vips__get_mosaic_name(VipsImage *image) { const char *name; if (vips_image_get_typeof(image, "mosaic-name")) { if (vips_image_get_string(image, "mosaic-name", &name)) return NULL; } else name = image->filename; return name; } void vips__add_mosaic_name(VipsImage *image) { static int global_serial = 0; /* TODO(kleisauke): Could we call vips_image_temp_name instead? */ int serial = g_atomic_int_add(&global_serial, 1); char name[256]; /* We must override any inherited name, so don't test for doesn't * exist before setting. */ vips_snprintf(name, 256, "mosaic-temp-%d", serial); vips_image_set_string(image, "mosaic-name", name); } libvips-8.15.1/libvips/mosaicing/lrmosaic.c000066400000000000000000000155171454007373500206750ustar00rootroot00000000000000/* join left-right with an approximate overlap * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 07/11/1989 * Modified on : 29/11/1989, 18/04/1991 * * * Modified and debugged by Ahmed Abbood . 1995 * 14/6/95 JC * - rewritten for new balance ideas * - more bug-fixes * 1/11/95 JC * - frees memory used by analysis phase as soon as possible * - means large mosaics use significantly less peak memory * 26/3/96 JC * - now calls im_lrmerge() rather than im__lrmerge() * 2/2/01 JC * - added tunable max blend width * 24/2/05 * - im_scale() makes it work for any image type * 25/1/11 * - gtk-doc * - remove balance stuff * - any mix of types and bands * - cleanups * 18/6/20 kleisauke * - convert to vips8 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Define for debug output. #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pmosaicing.h" #ifdef DEBUG static void vips__print_mdebug(TiePoints *points) { int i; double adx = 0.0; double ady = 0.0; double acor = 0.0; for (i = 0; i < points->nopoints; i++) { adx += points->dx[i]; ady += points->dy[i]; acor += points->correlation[i]; } adx = adx / (double) points->nopoints; ady = ady / (double) points->nopoints; acor = acor / (double) points->nopoints; printf("points: %d\n", points->nopoints); printf("average dx, dy: %g %g\n", adx, ady); printf("average correlation: %g\n", acor); printf("deltax, deltay: %g %g\n", points->l_deltax, points->l_deltay); } #endif /*DEBUG*/ int vips__find_lroverlap(VipsImage *ref_in, VipsImage *sec_in, VipsImage *out, int bandno_in, int xref, int yref, int xsec, int ysec, int halfcorrelation, int halfarea, int *dx0, int *dy0, double *scale1, double *angle1, double *dx1, double *dy1) { VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(out), 6); VipsRect left, right, overlap; TiePoints points, *p_points; TiePoints newpoints, *p_newpoints; int i; int dx, dy; /* Test cor and area. */ if (halfcorrelation < 0 || halfarea < 0 || halfarea < halfcorrelation) { vips_error("vips__lrmosaic", "%s", _("bad area parameters")); return -1; } /* Set positions of left and right. */ left.left = 0; left.top = 0; left.width = ref_in->Xsize; left.height = ref_in->Ysize; right.left = xref - xsec; right.top = yref - ysec; right.width = sec_in->Xsize; right.height = sec_in->Ysize; /* Find overlap. */ vips_rect_intersectrect(&left, &right, &overlap); if (overlap.width < 2 * halfarea + 1 || overlap.height < 2 * halfarea + 1) { vips_error("vips__lrmosaic", "%s", _("overlap too small for search")); return -1; } /* Extract overlaps as 8-bit, 1 band. */ if (vips_extract_area(ref_in, &t[0], overlap.left, overlap.top, overlap.width, overlap.height, NULL) || vips_extract_area(sec_in, &t[1], overlap.left - right.left, overlap.top - right.top, overlap.width, overlap.height, NULL)) return -1; if (ref_in->Coding == VIPS_CODING_LABQ) { if (vips_LabQ2sRGB(t[0], &t[2], NULL) || vips_LabQ2sRGB(t[1], &t[3], NULL) || vips_extract_band(t[2], &t[4], 1, NULL) || vips_extract_band(t[3], &t[5], 1, NULL)) return -1; } else if (ref_in->Coding == VIPS_CODING_NONE) { if (vips_extract_band(t[0], &t[2], bandno_in, NULL) || vips_extract_band(t[1], &t[3], bandno_in, NULL) || vips_scale(t[2], &t[4], NULL) || vips_scale(t[3], &t[5], NULL)) return -1; } else { vips_error("vips__lrmosaic", "%s", _("unknown Coding type")); return -1; } /* Initialise and fill TiePoints */ p_points = &points; p_newpoints = &newpoints; p_points->reference = ref_in->filename; p_points->secondary = sec_in->filename; p_points->nopoints = VIPS_MAXPOINTS; p_points->deltax = 0; p_points->deltay = 0; p_points->halfcorsize = halfcorrelation; p_points->halfareasize = halfarea; /* Initialise the structure */ for (i = 0; i < VIPS_MAXPOINTS; i++) { p_points->x_reference[i] = 0; p_points->y_reference[i] = 0; p_points->x_secondary[i] = 0; p_points->y_secondary[i] = 0; p_points->contrast[i] = 0; p_points->correlation[i] = 0.0; p_points->dx[i] = 0.0; p_points->dy[i] = 0.0; p_points->deviation[i] = 0.0; } /* Search ref for possible tie-points. Sets: p_points->contrast, * p_points->x,y_reference. */ if (vips__lrcalcon(t[4], p_points)) return -1; /* For each candidate point, correlate against corresponding part of * sec. Sets x,y_secondary and fills correlation and dx, dy. */ if (vips__chkpair(t[4], t[5], p_points)) return -1; /* First call to vips_clinear(). */ if (vips__initialize(p_points)) return -1; /* Improve the selection of tiepoints until all abs(deviations) are * < 1.0 by deleting all wrong points. */ if (vips__improve(p_points, p_newpoints)) return -1; /* Average remaining offsets. */ if (vips__avgdxdy(p_newpoints, &dx, &dy)) return -1; /* Offset with overlap position. */ *dx0 = -right.left + dx; *dy0 = -right.top + dy; /* Write 1st order parameters too. */ *scale1 = newpoints.l_scale; *angle1 = newpoints.l_angle; *dx1 = newpoints.l_deltax; *dy1 = newpoints.l_deltay; return 0; } int vips__lrmosaic(VipsImage *ref, VipsImage *sec, VipsImage *out, int bandno, int xref, int yref, int xsec, int ysec, int hwindowsize, int hsearchsize, int mwidth) { int dx0, dy0; double scale1, angle1, dx1, dy1; VipsImage *dummy; VipsImage *x; /* Correct overlap. dummy is just a placeholder used to ensure that * memory used by the analysis phase is freed as soon as possible. */ dummy = vips_image_new(); if (vips__find_lroverlap(ref, sec, dummy, bandno, xref, yref, xsec, ysec, hwindowsize, hsearchsize, &dx0, &dy0, &scale1, &angle1, &dx1, &dy1)) { g_object_unref(dummy); return -1; } g_object_unref(dummy); /* Merge left right. */ if (vips_merge(ref, sec, &x, VIPS_DIRECTION_HORIZONTAL, dx0, dy0, "mblend", mwidth, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } libvips-8.15.1/libvips/mosaicing/match.c000066400000000000000000000207551454007373500201600ustar00rootroot00000000000000/* Match images. */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pmosaicing.h" /* Given a pair of points, return scale, angle, dx, dy to resample the 2nd * image with. */ int vips__coeff(int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, double *a, double *b, double *dx, double *dy) { VipsImage **t = VIPS_ARRAY(NULL, 2, VipsImage *); if (!(t[0] = vips_image_new_matrixv(4, 4, (double) xs1, (double) -ys1, 1.0, 0.0, (double) ys1, (double) xs1, 0.0, 1.0, (double) xs2, (double) -ys2, 1.0, 0.0, (double) ys2, (double) xs2, 0.0, 1.0))) { g_free(t); return -1; } if (vips_matrixinvert(t[0], &t[1], NULL)) { g_object_unref(t[0]); g_free(t); return -1; } *a = *VIPS_MATRIX(t[1], 0, 0) * xr1 + *VIPS_MATRIX(t[1], 1, 0) * yr1 + *VIPS_MATRIX(t[1], 2, 0) * xr2 + *VIPS_MATRIX(t[1], 3, 0) * yr2; *b = *VIPS_MATRIX(t[1], 0, 1) * xr1 + *VIPS_MATRIX(t[1], 1, 1) * yr1 + *VIPS_MATRIX(t[1], 2, 1) * xr2 + *VIPS_MATRIX(t[1], 3, 1) * yr2; *dx = *VIPS_MATRIX(t[1], 0, 2) * xr1 + *VIPS_MATRIX(t[1], 1, 2) * yr1 + *VIPS_MATRIX(t[1], 2, 2) * xr2 + *VIPS_MATRIX(t[1], 3, 2) * yr2; *dy = *VIPS_MATRIX(t[1], 0, 3) * xr1 + *VIPS_MATRIX(t[1], 1, 3) * yr1 + *VIPS_MATRIX(t[1], 2, 3) * xr2 + *VIPS_MATRIX(t[1], 3, 3) * yr2; g_object_unref(t[0]); g_object_unref(t[1]); g_free(t); return 0; } typedef struct { VipsOperation parent_instance; VipsImage *ref; VipsImage *sec; VipsImage *out; int xr1; int yr1; int xs1; int ys1; int xr2; int yr2; int xs2; int ys2; int hwindow; int harea; gboolean search; VipsInterpolate *interpolate; } VipsMatch; typedef VipsOperationClass VipsMatchClass; G_DEFINE_TYPE(VipsMatch, vips_match, VIPS_TYPE_OPERATION); static int vips_match_build(VipsObject *object) { VipsMatch *match = (VipsMatch *) object; double a, b, dx, dy; VipsArrayInt *oarea; VipsImage *x; g_object_set(match, "out", vips_image_new(), NULL); if (VIPS_OBJECT_CLASS(vips_match_parent_class)->build(object)) return -1; if (!match->interpolate) match->interpolate = vips_interpolate_new("bilinear"); if (match->search) { int xs, ys; double cor; if (vips__correl(match->ref, match->sec, match->xr1, match->yr1, match->xs1, match->ys1, match->hwindow, match->harea, &cor, &xs, &ys)) return -1; match->xs1 = xs; match->ys1 = ys; if (vips__correl(match->ref, match->sec, match->xr2, match->yr2, match->xs2, match->ys2, match->hwindow, match->harea, &cor, &xs, &ys)) return -1; match->xs2 = xs; match->ys2 = ys; } /* Solve to get scale + rot + disp to obtain match. */ if (vips__coeff(match->xr1, match->yr1, match->xs1, match->ys1, match->xr2, match->yr2, match->xs2, match->ys2, &a, &b, &dx, &dy)) return -1; /* Output area of ref image. */ oarea = vips_array_int_newv(4, 0, 0, match->ref->Xsize, match->ref->Ysize); if (vips_affine(match->sec, &x, a, -b, b, a, "interpolate", match->interpolate, "odx", dx, "ody", dy, "oarea", oarea, NULL)) { vips_area_unref(VIPS_AREA(oarea)); return -1; } vips_area_unref(VIPS_AREA(oarea)); if (vips_image_write(x, match->out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } static void vips_match_class_init(VipsMatchClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "match"; object_class->description = _("first-order match of two images"); object_class->build = vips_match_build; VIPS_ARG_IMAGE(class, "ref", 1, _("Reference"), _("Reference image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMatch, ref)); VIPS_ARG_IMAGE(class, "sec", 2, _("Secondary"), _("Secondary image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMatch, sec)); VIPS_ARG_IMAGE(class, "out", 3, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsMatch, out)); VIPS_ARG_INT(class, "xr1", 5, _("xr1"), _("Position of first reference tie-point"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMatch, xr1), -1000000000, 1000000000, 1); VIPS_ARG_INT(class, "yr1", 6, _("yr1"), _("Position of first reference tie-point"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMatch, yr1), -1000000000, 1000000000, 1); VIPS_ARG_INT(class, "xs1", 7, _("xs1"), _("Position of first secondary tie-point"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMatch, xs1), -1000000000, 1000000000, 1); VIPS_ARG_INT(class, "ys1", 8, _("ys1"), _("Position of first secondary tie-point"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMatch, ys1), -1000000000, 1000000000, 1); VIPS_ARG_INT(class, "xr2", 9, _("xr2"), _("Position of second reference tie-point"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMatch, xr2), -1000000000, 1000000000, 1); VIPS_ARG_INT(class, "yr2", 10, _("yr2"), _("Position of second reference tie-point"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMatch, yr2), -1000000000, 1000000000, 1); VIPS_ARG_INT(class, "xs2", 11, _("xs2"), _("Position of second secondary tie-point"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMatch, xs2), -1000000000, 1000000000, 1); VIPS_ARG_INT(class, "ys2", 12, _("ys2"), _("Position of second secondary tie-point"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMatch, ys2), -1000000000, 1000000000, 1); VIPS_ARG_INT(class, "hwindow", 13, _("hwindow"), _("Half window size"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMatch, hwindow), 0, 1000000000, 1); VIPS_ARG_INT(class, "harea", 14, _("harea"), _("Half area size"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMatch, harea), 0, 1000000000, 1); VIPS_ARG_BOOL(class, "search", 15, _("Search"), _("Search to improve tie-points"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMatch, search), FALSE); VIPS_ARG_INTERPOLATE(class, "interpolate", 16, _("Interpolate"), _("Interpolate pixels with this"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMatch, interpolate)); } static void vips_match_init(VipsMatch *match) { match->hwindow = 5; match->harea = 15; match->search = FALSE; } /** * vips_match: * @ref: reference image * @sec: secondary image * @out: (out): output image * @xr1: first reference tie-point * @yr1: first reference tie-point * @xs1: first secondary tie-point * @ys1: first secondary tie-point * @xr2: second reference tie-point * @yr2: second reference tie-point * @xs2: second secondary tie-point * @ys2: second secondary tie-point * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @search: search to improve tie-points * * @hwindow: half window size * * @harea: half search size * * @interpolate: interpolate pixels with this * * Scale, rotate and translate @sec so that the tie-points line up. * * If @search is %TRUE, before performing the transformation, the tie-points * are improved by searching an area of @sec of size @harea for a * match of size @hwindow to @ref. * * This function will only work well for small rotates and scales. * * Returns: 0 on success, -1 on error */ int vips_match(VipsImage *ref, VipsImage *sec, VipsImage **out, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, ...) { va_list ap; int result; va_start(ap, ys2); result = vips_call_split("match", ap, ref, sec, out, xr1, yr1, xs1, ys1, xr2, yr2, xs2, ys2); va_end(ap); return result; } libvips-8.15.1/libvips/mosaicing/matrixinvert.c000066400000000000000000000261601454007373500216140ustar00rootroot00000000000000/* solve and invert matrices * * 19/4/20 kleisauke * - from im_matinv */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include /* Our state. */ typedef struct _VipsMatrixinvert { VipsOperation parent_instance; VipsImage *in; VipsImage *out; /* .. and cast to a matrix. */ VipsImage *mat; /* The LU decomposed matrix. */ VipsImage *lu; } VipsMatrixinvert; typedef VipsOperationClass VipsMatrixinvertClass; G_DEFINE_TYPE(VipsMatrixinvert, vips_matrixinvert, VIPS_TYPE_OPERATION); static void vips_matrixinvert_dispose(GObject *gobject) { VipsMatrixinvert *matrix = (VipsMatrixinvert *) gobject; VIPS_UNREF(matrix->mat); VIPS_UNREF(matrix->lu); G_OBJECT_CLASS(vips_matrixinvert_parent_class)->dispose(gobject); } /* DBL_MIN is smallest *normalized* double precision float */ #define TOO_SMALL (2.0 * DBL_MIN) /* Save a bit of typing. */ #define ME(m, i, j) (*VIPS_MATRIX((m), (i), (j))) /** * lu_decomp: * @mat: matrix to decompose * * This function takes any square NxN #VipsImage. * It returns a #VipsImage which is (N+1)xN. * * It calculates the PLU decomposition, storing the upper and diagonal parts * of U, together with the lower parts of L, as an NxN matrix in the first * N rows of the new matrix. The diagonal parts of L are all set to unity * and are not stored. * * The final row of the new #VipsImage has only integer entries, which * represent the row-wise permutations made by the permutation matrix P. * * The scale and offset members of the input #VipsImage are ignored. * * See: * * PRESS, W. et al, 1992. Numerical Recipes in C; The Art of Scientific * Computing, 2nd ed. Cambridge: Cambridge University Press, pp. 43-50. * * Returns: the decomposed matrix on success, or NULL on error. */ static VipsImage * lu_decomp(VipsImage *mat) { int i, j, k; double *row_scale; VipsImage *lu; if (!(row_scale = VIPS_ARRAY(NULL, mat->Xsize, double))) { return NULL; } if (!(lu = vips_image_new_matrix(mat->Xsize, mat->Xsize + 1))) { g_free(row_scale); return NULL; } /* copy all coefficients and then perform decomposition in-place */ memcpy(VIPS_MATRIX(lu, 0, 0), VIPS_MATRIX(mat, 0, 0), mat->Xsize * mat->Xsize * sizeof(double)); for (i = 0; i < mat->Xsize; ++i) { row_scale[i] = 0.0; for (j = 0; j < mat->Xsize; ++j) { double abs_val = fabs(ME(lu, i, j)); /* find largest in each ROW */ if (abs_val > row_scale[i]) row_scale[i] = abs_val; } if (!row_scale[i]) { vips_error("matrixinvert", "singular matrix"); g_object_unref(lu); g_free(row_scale); return NULL; } /* fill array with scaling factors for each ROW */ row_scale[i] = 1.0 / row_scale[i]; } for (j = 0; j < mat->Xsize; ++j) { /* loop over COLs */ double max = -1.0; int i_of_max; /* not needed, but stops a compiler warning */ i_of_max = 0; /* loop over ROWS in upper-half, except diagonal */ for (i = 0; i < j; ++i) for (k = 0; k < i; ++k) ME(lu, i, j) -= ME(lu, i, k) * ME(lu, k, j); /* loop over ROWS in diagonal and lower-half */ for (i = j; i < mat->Xsize; ++i) { double abs_val; for (k = 0; k < j; ++k) ME(lu, i, j) -= ME(lu, i, k) * ME(lu, k, j); /* find largest element in each COLUMN scaled so that */ /* largest in each ROW is 1.0 */ abs_val = row_scale[i] * fabs(ME(lu, i, j)); if (abs_val > max) { max = abs_val; i_of_max = i; } } if (fabs(ME(lu, i_of_max, j)) < TOO_SMALL) { /* divisor is near zero */ vips_error("matrixinvert", "singular or near-singular matrix"); g_object_unref(lu); g_free(row_scale); return NULL; } if (i_of_max != j) { /* swap ROWS */ for (k = 0; k < mat->Xsize; ++k) { double temp = ME(lu, j, k); ME(lu, j, k) = ME(lu, i_of_max, k); ME(lu, i_of_max, k) = temp; } row_scale[i_of_max] = row_scale[j]; /* no need to copy this scale back up - we won't use it */ } /* record permutation */ ME(lu, j, mat->Xsize) = i_of_max; /* divide by best (largest scaled) pivot found */ for (i = j + 1; i < mat->Xsize; ++i) ME(lu, i, j) /= ME(lu, j, j); } g_free(row_scale); return lu; } /** * lu_solve: * @lu: matrix to solve * @vec: name for output matrix * * Solve the system of linear equations Ax=b, where matrix A has already * been decomposed into LU form in VipsImage *lu. Input vector b is in * vec and is overwritten with vector x. * * See: * * PRESS, W. et al, 1992. Numerical Recipes in C; The Art of Scientific * Computing, 2nd ed. Cambridge: Cambridge University Press, pp. 43-50. * * See also: vips__matrixtranspose(), vips__matrixmultiply(). * * Returns: 0 on success, -1 on error */ static int lu_solve(VipsImage *lu, double *vec) { int i, j; if (lu->Xsize + 1 != lu->Ysize) { vips_error("matrixinvert", "not an LU decomposed matrix"); return -1; } for (i = 0; i < lu->Xsize; ++i) { int i_perm = ME(lu, i, lu->Xsize); if (i_perm != i) { double temp = vec[i]; vec[i] = vec[i_perm]; vec[i_perm] = temp; } for (j = 0; j < i; ++j) vec[i] -= ME(lu, i, j) * vec[j]; } for (i = lu->Xsize - 1; i >= 0; --i) { for (j = i + 1; j < lu->Xsize; ++j) vec[i] -= ME(lu, i, j) * vec[j]; vec[i] /= ME(lu, i, i); } return 0; } static int vips_matrixinvert_solve(VipsMatrixinvert *matrix) { VipsImage *out = matrix->out; int i, j; double *vec; if (!(matrix->lu = lu_decomp(matrix->mat))) return -1; if (!(vec = VIPS_ARRAY(matrix, matrix->lu->Xsize, double))) return -1; for (j = 0; j < matrix->lu->Xsize; ++j) { for (i = 0; i < matrix->lu->Xsize; ++i) vec[i] = 0.0; vec[j] = 1.0; if (lu_solve(matrix->lu, vec)) return -1; for (i = 0; i < matrix->lu->Xsize; ++i) ME(out, i, j) = vec[i]; } return 0; } static int vips_matrixinvert_direct(VipsMatrixinvert *matrix) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(matrix); VipsImage *in = matrix->mat; VipsImage *out = matrix->out; switch (matrix->mat->Xsize) { case 1: { double det = ME(in, 0, 0); if (fabs(det) < TOO_SMALL) { /* divisor is near zero */ vips_error(class->nickname, "%s", _("singular or near-singular matrix")); return -1; } ME(out, 0, 0) = 1.0 / det; } break; case 2: { double det = ME(in, 0, 0) * ME(in, 1, 1) - ME(in, 0, 1) * ME(in, 1, 0); double tmp; if (fabs(det) < TOO_SMALL) { /* divisor is near zero */ vips_error(class->nickname, "%s", _("singular or near-singular matrix")); return -1; } tmp = 1.0 / det; ME(out, 0, 0) = tmp * ME(in, 1, 1); ME(out, 0, 1) = -tmp * ME(in, 0, 1); ME(out, 1, 0) = -tmp * ME(in, 1, 0); ME(out, 1, 1) = tmp * ME(in, 0, 0); } break; case 3: { double det; double tmp; det = ME(in, 0, 0) * (ME(in, 1, 1) * ME(in, 2, 2) - ME(in, 1, 2) * ME(in, 2, 1)); det -= ME(in, 0, 1) * (ME(in, 1, 0) * ME(in, 2, 2) - ME(in, 1, 2) * ME(in, 2, 0)); det += ME(in, 0, 2) * (ME(in, 1, 0) * ME(in, 2, 1) - ME(in, 1, 1) * ME(in, 2, 0)); if (fabs(det) < TOO_SMALL) { /* divisor is near zero */ vips_error(class->nickname, "%s", _("singular or near-singular matrix")); return -1; } tmp = 1.0 / det; ME(out, 0, 0) = tmp * (ME(in, 1, 1) * ME(in, 2, 2) - ME(in, 1, 2) * ME(in, 2, 1)); ME(out, 1, 0) = tmp * (ME(in, 1, 2) * ME(in, 2, 0) - ME(in, 1, 0) * ME(in, 2, 2)); ME(out, 2, 0) = tmp * (ME(in, 1, 0) * ME(in, 2, 1) - ME(in, 1, 1) * ME(in, 2, 0)); ME(out, 0, 1) = tmp * (ME(in, 0, 2) * ME(in, 2, 1) - ME(in, 0, 1) * ME(in, 2, 2)); ME(out, 1, 1) = tmp * (ME(in, 0, 0) * ME(in, 2, 2) - ME(in, 0, 2) * ME(in, 2, 0)); ME(out, 2, 1) = tmp * (ME(in, 0, 1) * ME(in, 2, 0) - ME(in, 0, 0) * ME(in, 2, 1)); ME(out, 0, 2) = tmp * (ME(in, 0, 1) * ME(in, 1, 2) - ME(in, 0, 2) * ME(in, 1, 1)); ME(out, 1, 2) = tmp * (ME(in, 0, 2) * ME(in, 1, 0) - ME(in, 0, 0) * ME(in, 1, 2)); ME(out, 2, 2) = tmp * (ME(in, 0, 0) * ME(in, 1, 1) - ME(in, 0, 1) * ME(in, 1, 0)); } break; /* TODO(kleisauke): * We sometimes use 4x4 matrices, could we also make a * direct version for those? For e.g.: * https://stackoverflow.com/a/1148405/10952119 */ default: g_assert(0); return -1; } return 0; } static int vips_matrixinvert_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsMatrixinvert *matrix = (VipsMatrixinvert *) object; if (VIPS_OBJECT_CLASS(vips_matrixinvert_parent_class)->build(object)) return -1; if (vips_check_matrix(class->nickname, matrix->in, &matrix->mat)) return -1; if (matrix->mat->Xsize != matrix->mat->Ysize) { vips_error(class->nickname, "%s", _("non-square matrix")); return -1; } g_object_set(matrix, "out", vips_image_new_matrix(matrix->mat->Xsize, matrix->mat->Ysize), NULL); /* Direct path for < 4x4 matrices */ if (matrix->mat->Xsize >= 4) { if (vips_matrixinvert_solve(matrix)) return -1; } else { if (vips_matrixinvert_direct(matrix)) return -1; } return 0; } static void vips_matrixinvert_class_init(VipsMatrixinvertClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->dispose = vips_matrixinvert_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "matrixinvert"; vobject_class->description = _("invert an matrix"); vobject_class->build = vips_matrixinvert_build; VIPS_ARG_IMAGE(class, "in", 0, _("Input"), _("An square matrix"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMatrixinvert, in)); VIPS_ARG_IMAGE(class, "out", 1, _("Output"), _("Output matrix"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsMatrixinvert, out)); } static void vips_matrixinvert_init(VipsMatrixinvert *matrix) { } /** * vips_matrixinvert: (method) * @m: matrix to invert * @out: (out): output matrix * @...: %NULL-terminated list of optional named arguments * * This operation calculates the inverse of the matrix represented in @m. * The scale and offset members of the input matrix are ignored. * * See also: vips_matrixload(). * * Returns: 0 on success, -1 on error */ int vips_matrixinvert(VipsImage *m, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("matrixinvert", ap, m, out); va_end(ap); return result; } libvips-8.15.1/libvips/mosaicing/merge.c000066400000000000000000000135241454007373500201570ustar00rootroot00000000000000/* merge two images left/right or up/down * * 22/5/14 * - from vips_merge() * 13/6/17 * - tag as SEQUENTIAL */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include "pmosaicing.h" typedef struct { VipsOperation parent_instance; VipsImage *ref; VipsImage *sec; VipsImage *out; VipsDirection direction; int dx; int dy; int mblend; } VipsMerge; typedef VipsOperationClass VipsMergeClass; G_DEFINE_TYPE(VipsMerge, vips_merge, VIPS_TYPE_OPERATION); static int vips_merge_build(VipsObject *object) { VipsMerge *merge = (VipsMerge *) object; g_object_set(merge, "out", vips_image_new(), NULL); if (VIPS_OBJECT_CLASS(vips_merge_parent_class)->build(object)) return -1; switch (merge->direction) { case VIPS_DIRECTION_HORIZONTAL: if (vips__lrmerge(merge->ref, merge->sec, merge->out, merge->dx, merge->dy, merge->mblend)) return -1; break; case VIPS_DIRECTION_VERTICAL: if (vips__tbmerge(merge->ref, merge->sec, merge->out, merge->dx, merge->dy, merge->mblend)) return -1; break; default: g_assert_not_reached(); } vips__add_mosaic_name(merge->out); if (vips_image_history_printf(merge->out, "#%s <%s> <%s> <%s> <%d> <%d> <%d>", merge->direction == VIPS_DIRECTION_HORIZONTAL ? "LRJOIN" : "TBJOIN", vips__get_mosaic_name(merge->ref), vips__get_mosaic_name(merge->sec), vips__get_mosaic_name(merge->out), -merge->dx, -merge->dy, merge->mblend)) return -1; return 0; } static void vips_merge_class_init(VipsMergeClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "merge"; object_class->description = _("merge two images"); object_class->build = vips_merge_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_IMAGE(class, "ref", 1, _("Reference"), _("Reference image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMerge, ref)); VIPS_ARG_IMAGE(class, "sec", 2, _("Secondary"), _("Secondary image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMerge, sec)); VIPS_ARG_IMAGE(class, "out", 3, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsMerge, out)); VIPS_ARG_ENUM(class, "direction", 4, _("Direction"), _("Horizontal or vertical merge"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMerge, direction), VIPS_TYPE_DIRECTION, VIPS_DIRECTION_HORIZONTAL); VIPS_ARG_INT(class, "dx", 5, _("dx"), _("Horizontal displacement from sec to ref"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMerge, dx), -100000000, 1000000000, 1); VIPS_ARG_INT(class, "dy", 6, _("dy"), _("Vertical displacement from sec to ref"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMerge, dy), -100000000, 1000000000, 1); VIPS_ARG_INT(class, "mblend", 7, _("Max blend"), _("Maximum blend size"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMerge, mblend), 0, 10000, 10); } static void vips_merge_init(VipsMerge *merge) { merge->mblend = 10; } /** * vips_merge: * @ref: reference image * @sec: secondary image * @out: (out): output image * @direction: horizontal or vertical merge * @dx: displacement of ref from sec * @dy: displacement of ref from sec * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @mblend: %gint, maximum blend size * * This operation joins two images left-right (with @ref on the left) or * up-down (with @ref above) with a smooth seam. * * If the number of bands differs, one of the images * must have one band. In this case, an n-band image is formed from the * one-band image by joining n copies of the one-band image together, and then * the two n-band images are operated upon. * * The two input images are cast up to the smallest common type (see table * Smallest common format in * arithmetic). * * @dx and @dy give the displacement of @sec relative to @ref, in other words, * the vector to get from the origin of @sec to the origin of @ref, in other * words, @dx will generally be a negative number. * * @mblend limits the maximum width of the * blend area. A value of "-1" means "unlimited". The two images are blended * with a raised cosine. * * Pixels with all bands equal to zero are "transparent", that * is, zero pixels in the overlap area do not contribute to the merge. * This makes it possible to join non-rectangular images. * * See also: vips_mosaic(), vips_insert(). * * Returns: 0 on success, -1 on error */ int vips_merge(VipsImage *ref, VipsImage *sec, VipsImage **out, VipsDirection direction, int dx, int dy, ...) { va_list ap; int result; va_start(ap, dy); result = vips_call_split("merge", ap, ref, sec, out, direction, dx, dy); va_end(ap); return result; } libvips-8.15.1/libvips/mosaicing/meson.build000066400000000000000000000012721454007373500210530ustar00rootroot00000000000000mosaicing_sources = files( 'mosaicing.c', 'merge.c', 'mosaic.c', 'match.c', 'mosaic1.c', 'chkpair.c', 'matrixinvert.c', 'global_balance.c', 'lrmerge.c', 'tbmerge.c', 'lrmosaic.c', 'tbmosaic.c', 'remosaic.c', 'im_avgdxdy.c', 'im_clinear.c', 'im_improve.c', 'im_initialize.c', 'im_lrcalcon.c', 'im_tbcalcon.c', ) mosaicing_headers = files( 'global_balance.h', 'pmosaicing.h', ) libvips_sources += mosaicing_sources mosaicing_lib = static_library('mosaicing', mosaicing_sources, mosaicing_headers, dependencies: libvips_deps, gnu_symbol_visibility: 'hidden', ) libvips_components += mosaicing_lib libvips-8.15.1/libvips/mosaicing/mosaic.c000066400000000000000000000220151454007373500203260ustar00rootroot00000000000000/* mosaic two images left/right or up/down * * 22/5/14 * - from vips_mosaic() * 4/9/18 * - add docs for transform output * 18/6/20 kleisauke * - convert to vips8 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include "pmosaicing.h" typedef struct { VipsOperation parent_instance; VipsImage *ref; VipsImage *sec; VipsImage *out; VipsDirection direction; int xref; int yref; int xsec; int ysec; int mblend; int bandno; int hwindow; int harea; int dx0; int dy0; double scale1; double angle1; double dx1; double dy1; } VipsMosaic; typedef VipsOperationClass VipsMosaicClass; G_DEFINE_TYPE(VipsMosaic, vips_mosaic, VIPS_TYPE_OPERATION); static int vips_mosaic_build(VipsObject *object) { VipsMosaic *mosaic = (VipsMosaic *) object; VipsImage *x; int dx0; int dy0; double scale1; double angle1; double dx1; double dy1; g_object_set(mosaic, "out", vips_image_new(), NULL); if (VIPS_OBJECT_CLASS(vips_mosaic_parent_class)->build(object)) return -1; /* A placeholder used to ensure that memory used by the analysis * phase is freed as soon as possible. */ x = vips_image_new(); switch (mosaic->direction) { case VIPS_DIRECTION_HORIZONTAL: if (vips__find_lroverlap(mosaic->ref, mosaic->sec, x, mosaic->bandno, mosaic->xref, mosaic->yref, mosaic->xsec, mosaic->ysec, mosaic->hwindow, mosaic->harea, &dx0, &dy0, &scale1, &angle1, &dx1, &dy1)) { g_object_unref(x); return -1; } g_object_unref(x); break; case VIPS_DIRECTION_VERTICAL: if (vips__find_tboverlap(mosaic->ref, mosaic->sec, x, mosaic->bandno, mosaic->xref, mosaic->yref, mosaic->xsec, mosaic->ysec, mosaic->hwindow, mosaic->harea, &dx0, &dy0, &scale1, &angle1, &dx1, &dy1)) { g_object_unref(x); return -1; } g_object_unref(x); break; default: g_assert_not_reached(); /* Compiler warnings. */ dx0 = 0; dy0 = 0; scale1 = 1; angle1 = 1; dx1 = 0; dy1 = 0; } g_object_set(mosaic, "dx0", dx0, "dy0", dy0, "scale1", scale1, "angle1", angle1, "dx1", dx1, "dy1", dy1, NULL); if (vips_merge(mosaic->ref, mosaic->sec, &x, mosaic->direction, mosaic->dx0, mosaic->dy0, "mblend", mosaic->mblend, NULL)) return -1; if (vips_image_write(x, mosaic->out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } static void vips_mosaic_class_init(VipsMosaicClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "mosaic"; object_class->description = _("mosaic two images"); object_class->build = vips_mosaic_build; VIPS_ARG_IMAGE(class, "ref", 1, _("Reference"), _("Reference image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMosaic, ref)); VIPS_ARG_IMAGE(class, "sec", 2, _("Secondary"), _("Secondary image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMosaic, sec)); VIPS_ARG_IMAGE(class, "out", 3, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsMosaic, out)); VIPS_ARG_ENUM(class, "direction", 4, _("Direction"), _("Horizontal or vertical mosaic"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMosaic, direction), VIPS_TYPE_DIRECTION, VIPS_DIRECTION_HORIZONTAL); VIPS_ARG_INT(class, "xref", 5, _("xref"), _("Position of reference tie-point"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMosaic, xref), 0, 1000000000, 1); VIPS_ARG_INT(class, "yref", 6, _("yref"), _("Position of reference tie-point"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMosaic, yref), 0, 1000000000, 1); VIPS_ARG_INT(class, "xsec", 7, _("xsec"), _("Position of secondary tie-point"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMosaic, xsec), 0, 1000000000, 1); VIPS_ARG_INT(class, "ysec", 8, _("ysec"), _("Position of secondary tie-point"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMosaic, ysec), 0, 1000000000, 1); VIPS_ARG_INT(class, "hwindow", 9, _("hwindow"), _("Half window size"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMosaic, hwindow), 0, 1000000000, 5); VIPS_ARG_INT(class, "harea", 10, _("harea"), _("Half area size"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMosaic, harea), 0, 1000000000, 15); VIPS_ARG_INT(class, "mblend", 11, _("Max blend"), _("Maximum blend size"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMosaic, mblend), 0, 10000, 10); VIPS_ARG_INT(class, "bandno", 12, _("Search band"), _("Band to search for features on"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMosaic, bandno), 0, 10000, 0); VIPS_ARG_INT(class, "dx0", 13, _("Integer offset"), _("Detected integer offset"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsMosaic, dx0), -10000000, 10000000, 0); VIPS_ARG_INT(class, "dy0", 14, _("Integer offset"), _("Detected integer offset"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsMosaic, dy0), -10000000, 10000000, 0); VIPS_ARG_DOUBLE(class, "scale1", 15, _("Scale"), _("Detected scale"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsMosaic, scale1), -10000000.0, 10000000.0, 1.0); VIPS_ARG_DOUBLE(class, "angle1", 16, _("Angle"), _("Detected rotation"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsMosaic, angle1), -10000000.0, 10000000.0, 0.0); VIPS_ARG_DOUBLE(class, "dx1", 17, _("First-order displacement"), _("Detected first-order displacement"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsMosaic, dx1), -10000000.0, 10000000.0, 0.0); VIPS_ARG_DOUBLE(class, "dy1", 17, _("First-order displacement"), _("Detected first-order displacement"), VIPS_ARGUMENT_OPTIONAL_OUTPUT, G_STRUCT_OFFSET(VipsMosaic, dy1), -10000000.0, 10000000.0, 0.0); } static void vips_mosaic_init(VipsMosaic *mosaic) { mosaic->mblend = 10; mosaic->hwindow = 5; mosaic->harea = 15; mosaic->scale1 = 1.0; } /** * vips_mosaic: * @ref: reference image * @sec: secondary image * @out: (out): output image * @direction: horizontal or vertical join * @xref: position in reference image * @yref: position in reference image * @xsec: position in secondary image * @ysec: position in secondary image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @bandno: %gint, band to search for features * * @hwindow: %gint, half window size * * @harea: %gint, half search size * * @mblend: %gint, maximum blend size * * @dx0: %gint, output, detected displacement * * @dy0: %gint, output, detected displacement * * @scale1: %gdouble, output, detected first order scale * * @angle1: %gdouble, output, detected first order rotation * * @dx1: %gdouble, output, detected first order displacement * * @dy1: %gdouble, output, detected first order displacement * * This operation joins two images left-right (with @ref on the left) or * top-bottom (with @ref above) given an approximate overlap. * * @sec is positioned so that the pixel (@xsec, @ysec) in @sec lies on top of * the pixel (@xref, @yref) in @ref. The overlap area is divided into three * sections, 20 high-contrast points in band @bandno of image @ref are found * in each, and a window of pixels of size @hwindow around each high-contrast * point is searched for in @sec over an area of @harea. * * A linear model is fitted to the 60 tie-points, points a long way from the * fit are discarded, and the model refitted until either too few points * remain or the model reaches good agreement. * * The detected displacement is used with vips_merge() to join the two images * together. * * You can read out the detected transform with @dx0, @dy0, @scale1, @angle1, * @dx1, @dy1. * * See also: vips_merge(), vips_insert(). * * Returns: 0 on success, -1 on error */ int vips_mosaic(VipsImage *ref, VipsImage *sec, VipsImage **out, VipsDirection direction, int xref, int yref, int xsec, int ysec, ...) { va_list ap; int result; va_start(ap, ysec); result = vips_call_split("mosaic", ap, ref, sec, out, direction, xref, yref, xsec, ysec); va_end(ap); return result; } libvips-8.15.1/libvips/mosaicing/mosaic1.c000066400000000000000000000421521454007373500204130ustar00rootroot00000000000000/* 1st order mosaic functions * * 31/7/97 JC * - done! * 12/9/97 JC * - mods so global_balance() can work with 1st order mosaics * 27/12/99 JC * - now uses affine() stuff * - small tidies * 2/2/01 JC * - added tunable max blend width * 23/3/01 JC * - better mosaic1 calcs ... was a bit broken * 14/12/04 * - works for LABQ as well * 25/1/11 * - gtk-doc * 18/6/20 kleisauke * - convert to vips8 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "pmosaicing.h" /* Define for debug output. #define DEBUG */ /* define this to get old not-really-working joiner. #define OLD */ /* Like vips_similarity(), but return the transform we generated. */ static int apply_similarity(VipsTransformation *trn, VipsImage *in, VipsImage *out, double a, double b, double dx, double dy) { trn->iarea.left = 0; trn->iarea.top = 0; trn->iarea.width = in->Xsize; trn->iarea.height = in->Ysize; trn->a = a; trn->b = -b; trn->c = b; trn->d = a; trn->idx = 0; trn->idy = 0; trn->odx = dx; trn->ody = dy; vips__transform_set_area(trn); if (vips__transform_calc_inverse(trn)) return -1; if (vips__affinei(in, out, trn)) return -1; return 0; } /* A join function ... either left-right or top-bottom rotscalemerge. */ typedef int (*joinfn)(VipsImage *, VipsImage *, VipsImage *, double, double, double, double, int); /* similarity+lrmerge. */ int vips__lrmerge1(VipsImage *ref, VipsImage *sec, VipsImage *out, double a, double b, double dx, double dy, int mwidth) { VipsTransformation trn; VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(out), 1); VipsBuf buf; char text[1024]; t[0] = vips_image_new(); /* Scale, rotate and displace sec. */ if (apply_similarity(&trn, sec, t[0], a, b, dx, dy)) return -1; /* And join to ref. */ if (vips__lrmerge(ref, t[0], out, -trn.oarea.left, -trn.oarea.top, mwidth)) return -1; /* Note parameters in history file ... for global balance to pick up * later. */ vips__add_mosaic_name(out); vips_buf_init_static(&buf, text, 1024); vips_buf_appendf(&buf, "#LRROTSCALE <%s> <%s> <%s> <", vips__get_mosaic_name(ref), vips__get_mosaic_name(sec), vips__get_mosaic_name(out)); vips_buf_appendg(&buf, a); vips_buf_appendf(&buf, "> <"); vips_buf_appendg(&buf, b); vips_buf_appendf(&buf, "> <"); vips_buf_appendg(&buf, dx); vips_buf_appendf(&buf, "> <"); vips_buf_appendg(&buf, dy); vips_buf_appendf(&buf, "> <%d>", mwidth); if (vips_image_history_printf(out, "%s", vips_buf_all(&buf))) return -1; return 0; } /* similarity+tbmerge. */ int vips__tbmerge1(VipsImage *ref, VipsImage *sec, VipsImage *out, double a, double b, double dx, double dy, int mwidth) { VipsTransformation trn; VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(out), 1); VipsBuf buf; char text[1024]; t[0] = vips_image_new(); /* Scale, rotate and displace sec. */ if (apply_similarity(&trn, sec, t[0], a, b, dx, dy)) return -1; /* And join to ref. */ if (vips__tbmerge(ref, t[0], out, -trn.oarea.left, -trn.oarea.top, mwidth)) return -1; /* Note parameters in history file ... for global balance to pick up * later. */ vips__add_mosaic_name(out); vips_buf_init_static(&buf, text, 1024); vips_buf_appendf(&buf, "#TBROTSCALE <%s> <%s> <%s> <", vips__get_mosaic_name(ref), vips__get_mosaic_name(sec), vips__get_mosaic_name(out)); vips_buf_appendg(&buf, a); vips_buf_appendf(&buf, "> <"); vips_buf_appendg(&buf, b); vips_buf_appendf(&buf, "> <"); vips_buf_appendg(&buf, dx); vips_buf_appendf(&buf, "> <"); vips_buf_appendg(&buf, dy); vips_buf_appendf(&buf, "> <%d>", mwidth); if (vips_image_history_printf(out, "%s", vips_buf_all(&buf))) return -1; return 0; } /* Join two images, using a pair of tie-points as parameters. */ static int rotjoin(VipsImage *ref, VipsImage *sec, VipsImage *out, joinfn jfn, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, int mwidth) { double a, b, dx, dy; /* Solve to get scale + rot + disp. */ if (vips__coeff(xr1, yr1, xs1, ys1, xr2, yr2, xs2, ys2, &a, &b, &dx, &dy)) return -1; /* Scale, rotate and displace sec. */ if (jfn(ref, sec, out, a, b, dx, dy, mwidth)) return -1; return 0; } /* Like rotjoin, but do a search to refine the tie-points. */ static int rotjoin_search(VipsImage *ref, VipsImage *sec, VipsImage *out, joinfn jfn, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, int halfcorrelation, int halfarea, int mwidth) { VipsTransformation trn; double cor1, cor2; double a, b, dx, dy; double xs3, ys3; double xs4, ys4; int xs5, ys5; int xs6, ys6; double xs7, ys7; double xs8, ys8; /* Temps. */ VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(out), 3); /* Unpack LABQ to LABS for correlation. */ if (ref->Coding == VIPS_CODING_LABQ) { if (vips_LabQ2LabS(ref, &t[0], NULL)) return -1; } else { t[0] = ref; g_object_ref(t[0]); } if (sec->Coding == VIPS_CODING_LABQ) { if (vips_LabQ2LabS(sec, &t[1], NULL)) return -1; } else { t[1] = sec; g_object_ref(t[1]); } t[2] = vips_image_new(); /* Solve to get scale + rot + disp. */ if (vips__coeff(xr1, yr1, xs1, ys1, xr2, yr2, xs2, ys2, &a, &b, &dx, &dy) || apply_similarity(&trn, t[1], t[2], a, b, dx, dy)) return -1; /* Map points on sec to rotated image. */ vips__transform_forward_point(&trn, xs1, ys1, &xs3, &ys3); vips__transform_forward_point(&trn, xs2, ys2, &xs4, &ys4); /* Refine tie-points on rotated image. Remember the clip * vips__transform_set_area() has set, and move the sec tie-points * accordingly. */ if (vips__correl(t[0], t[2], xr1, yr1, xs3 - trn.oarea.left, ys3 - trn.oarea.top, halfcorrelation, halfarea, &cor1, &xs5, &ys5)) return -1; if (vips__correl(t[0], t[2], xr2, yr2, xs4 - trn.oarea.left, ys4 - trn.oarea.top, halfcorrelation, halfarea, &cor2, &xs6, &ys6)) return -1; #ifdef DEBUG printf("rotjoin_search: nudged pair 1 from %d, %d to %d, %d\n", xs3 - trn.oarea.left, ys3 - trn.oarea.top, xs5, ys5); printf("rotjoin_search: nudged pair 2 from %d, %d to %d, %d\n", xs4 - trn.oarea.left, ys4 - trn.oarea.top, xs6, ys6); #endif /*DEBUG*/ /* Put the sec tie-points back into output space. */ xs5 += trn.oarea.left; ys5 += trn.oarea.top; xs6 += trn.oarea.left; ys6 += trn.oarea.top; /* ... and now back to input space again. */ vips__transform_invert_point(&trn, xs5, ys5, &xs7, &ys7); vips__transform_invert_point(&trn, xs6, ys6, &xs8, &ys8); /* Recalc the transform using the refined points. */ if (vips__coeff(xr1, yr1, xs7, ys7, xr2, yr2, xs8, ys8, &a, &b, &dx, &dy)) return -1; /* Scale and rotate final. */ if (jfn(ref, sec, out, a, b, dx, dy, mwidth)) return -1; return 0; } #ifdef OLD /* 1st order mosaic using vips__find_lroverlap() ... does not work too well :( * Look at vips__find_lroverlap() for problem? */ static int old_lrmosaic1(VipsImage *ref, VipsImage *sec, VipsImage *out, int bandno, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, int halfcorrelation, int halfarea, int mwidth) { VipsTransformation trn1, trn2; int dx0, dy0; double a, b, dx, dy; double a1, b1, dx1, dy1; double af, bf, dxf, dyf; int xpos, ypos; int xpos1, ypos1; /* Temps. */ VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(out), 2); VipsImage *dummy; t[0] = vips_image_new(); /* Solve to get scale + rot + disp. */ if (vips__coeff(xr1, yr1, xs1, ys1, xr2, yr2, xs2, ys2, &a, &b, &dx, &dy) || apply_similarity(&trn1, sec, t[0], a, b, dx, dy)) return -1; /* Correct tie-points. dummy is just a placeholder used to ensure that * memory used by the analysis phase is freed as soon as possible. */ dummy = vips_image_new(); if (vips__find_lroverlap(ref, t[0], dummy, bandno, -trn1.area.left, -trn1.area.top, 0, 0, halfcorrelation, halfarea, &dx0, &dy0, &a1, &b1, &dx1, &dy1)) { g_object_unref(dummy); return -1; } g_object_unref(dummy); /* Now combine the two transformations to get a corrected transform. */ af = a1 * a - b1 * b; bf = a1 * b + b1 * a; dxf = a1 * dx - b1 * dy + dx1; dyf = b1 * dx + a1 * dy + dy1; printf("transform was: a = %g, b = %g, dx = %g, dy = %g\n", a, b, dx, dy); printf("correction: a = %g, b = %g, dx = %g, dy = %g\n", a1, b1, dx1, dy1); printf("final: a = %g, b = %g, dx = %g, dy = %g\n", af, bf, dxf, dyf); t[1] = vips_image_new(); /* Scale and rotate final. */ if (apply_similarity(&trn2, sec, t[1], af, bf, dxf, dyf)) return -1; printf("disp: trn1 left = %d, top = %d\n", trn1.area.left, trn1.area.top); printf("disp: trn2 left = %d, top = %d\n", trn2.area.left, trn2.area.top); /* And join to ref. */ if (vips_merge(ref, t[1], out, VIPS_DIRECTION_HORIZONTAL, -trn2.area.left, -trn2.area.top, mwidth)) return -1; return 0; } #endif /*OLD*/ typedef struct { VipsOperation parent_instance; VipsImage *ref; VipsImage *sec; VipsImage *out; VipsDirection direction; int xr1; int yr1; int xs1; int ys1; int xr2; int yr2; int xs2; int ys2; int hwindow; int harea; gboolean search; VipsInterpolate *interpolate; int mblend; int bandno; } VipsMosaic1; typedef VipsOperationClass VipsMosaic1Class; G_DEFINE_TYPE(VipsMosaic1, vips_mosaic1, VIPS_TYPE_OPERATION); static int vips_mosaic1_build(VipsObject *object) { VipsMosaic1 *mosaic1 = (VipsMosaic1 *) object; joinfn jfn; g_object_set(mosaic1, "out", vips_image_new(), NULL); if (VIPS_OBJECT_CLASS(vips_mosaic1_parent_class)->build(object)) return -1; if (!mosaic1->interpolate) mosaic1->interpolate = vips_interpolate_new("bilinear"); jfn = mosaic1->direction == VIPS_DIRECTION_HORIZONTAL ? vips__lrmerge1 : vips__tbmerge1; if (mosaic1->search) { if (rotjoin_search(mosaic1->ref, mosaic1->sec, mosaic1->out, jfn, mosaic1->xr1, mosaic1->yr1, mosaic1->xs1, mosaic1->ys1, mosaic1->xr2, mosaic1->yr2, mosaic1->xs2, mosaic1->ys2, mosaic1->hwindow, mosaic1->harea, mosaic1->mblend)) return -1; } else { if (rotjoin(mosaic1->ref, mosaic1->sec, mosaic1->out, jfn, mosaic1->xr1, mosaic1->yr1, mosaic1->xs1, mosaic1->ys1, mosaic1->xr2, mosaic1->yr2, mosaic1->xs2, mosaic1->ys2, mosaic1->mblend)) return -1; } return 0; } static void vips_mosaic1_class_init(VipsMosaic1Class *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "mosaic1"; object_class->description = _("first-order mosaic of two images"); object_class->build = vips_mosaic1_build; VIPS_ARG_IMAGE(class, "ref", 1, _("Reference"), _("Reference image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMosaic1, ref)); VIPS_ARG_IMAGE(class, "sec", 2, _("Secondary"), _("Secondary image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMosaic1, sec)); VIPS_ARG_IMAGE(class, "out", 3, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsMosaic1, out)); VIPS_ARG_ENUM(class, "direction", 4, _("Direction"), _("Horizontal or vertical mosaic"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMosaic1, direction), VIPS_TYPE_DIRECTION, VIPS_DIRECTION_HORIZONTAL); VIPS_ARG_INT(class, "xr1", 5, _("xr1"), _("Position of first reference tie-point"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMosaic1, xr1), -1000000000, 1000000000, 1); VIPS_ARG_INT(class, "yr1", 6, _("yr1"), _("Position of first reference tie-point"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMosaic1, yr1), -1000000000, 1000000000, 1); VIPS_ARG_INT(class, "xs1", 7, _("xs1"), _("Position of first secondary tie-point"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMosaic1, xs1), -1000000000, 1000000000, 1); VIPS_ARG_INT(class, "ys1", 8, _("ys1"), _("Position of first secondary tie-point"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMosaic1, ys1), -1000000000, 1000000000, 1); VIPS_ARG_INT(class, "xr2", 9, _("xr2"), _("Position of second reference tie-point"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMosaic1, xr2), -1000000000, 1000000000, 1); VIPS_ARG_INT(class, "yr2", 10, _("yr2"), _("Position of second reference tie-point"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMosaic1, yr2), -1000000000, 1000000000, 1); VIPS_ARG_INT(class, "xs2", 11, _("xs2"), _("Position of second secondary tie-point"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMosaic1, xs2), -1000000000, 1000000000, 1); VIPS_ARG_INT(class, "ys2", 12, _("ys2"), _("Position of second secondary tie-point"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMosaic1, ys2), -1000000000, 1000000000, 1); VIPS_ARG_INT(class, "hwindow", 13, _("hwindow"), _("Half window size"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMosaic1, hwindow), 0, 1000000000, 5); VIPS_ARG_INT(class, "harea", 14, _("harea"), _("Half area size"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMosaic1, harea), 0, 1000000000, 15); VIPS_ARG_BOOL(class, "search", 15, _("Search"), _("Search to improve tie-points"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMosaic1, search), FALSE); VIPS_ARG_INTERPOLATE(class, "interpolate", 16, _("Interpolate"), _("Interpolate pixels with this"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMosaic1, interpolate)); VIPS_ARG_INT(class, "mblend", 17, _("Max blend"), _("Maximum blend size"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMosaic1, mblend), 0, 10000, 10); VIPS_ARG_INT(class, "bandno", 18, _("Search band"), _("Band to search for features on"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsMosaic1, bandno), 0, 10000, 0); } static void vips_mosaic1_init(VipsMosaic1 *mosaic1) { mosaic1->hwindow = 5; mosaic1->harea = 15; mosaic1->mblend = 10; } /** * vips_mosaic1: * @ref: reference image * @sec: secondary image * @out: output image * @direction: horizontal or vertical join * @xr1: first reference tie-point * @yr1: first reference tie-point * @xs1: first secondary tie-point * @ys1: first secondary tie-point * @xr2: second reference tie-point * @yr2: second reference tie-point * @xs2: second secondary tie-point * @ys2: second secondary tie-point * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @search: search to improve tie-points * * @hwindow: half window size * * @harea: half search size * * @interpolate: interpolate pixels with this * * @mblend: maximum blend size * * This operation joins two images top-bottom (with @sec on the right) * or left-right (with @sec at the bottom) * given an approximate pair of tie-points. @sec is scaled and rotated as * necessary before the join. * * If @search is %TRUE, before performing the transformation, the tie-points * are improved by searching an area of @sec of size @harea for a * object of size @hwindow in @ref. * * @mblend limits the maximum size of the * blend area. A value of "-1" means "unlimited". The two images are blended * with a raised cosine. * * Pixels with all bands equal to zero are "transparent", that * is, zero pixels in the overlap area do not contribute to the merge. * This makes it possible to join non-rectangular images. * * If the number of bands differs, one of the images * must have one band. In this case, an n-band image is formed from the * one-band image by joining n copies of the one-band image together, and then * the two n-band images are operated upon. * * The two input images are cast up to the smallest common type (see table * Smallest common format in * arithmetic). * * See also: vips_merge(), vips_insert(), vips_globalbalance(). * * Returns: 0 on success, -1 on error */ int vips_mosaic1(VipsImage *ref, VipsImage *sec, VipsImage **out, VipsDirection direction, int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, ...) { va_list ap; int result; va_start(ap, ys2); result = vips_call_split("mosaic1", ap, ref, sec, out, direction, xr1, yr1, xs1, ys1, xr2, yr2, xs2, ys2); va_end(ap); return result; } libvips-8.15.1/libvips/mosaicing/mosaicing.c000066400000000000000000000061241454007373500210270ustar00rootroot00000000000000/* base class for all mosaicing operations * */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Define for debug output. #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include /** * SECTION: mosaicing * @short_description: build image mosaics * @stability: Stable * @include: vips/vips.h * * These functions are useful for joining many small images together to make * one large image. They can cope with unstable contrast and arbitrary sub-image * layout, but will not do any geometric correction. Geometric errors should * be removed before using these functions. * * The mosaicing functions can be grouped into layers: * * The lowest level operation is vips_merge() which * joins two images together * left-right or up-down with a smooth seam. * * Next, vips_mosaic() uses * search functions plus the two low-level merge operations to join two images * given just an approximate overlap as a start point. * * vips_mosaic1() is a first-order * analogue of the basic mosaic functions: it takes two approximate * tie-points and uses * them to rotate and scale the right-hand or bottom image before starting to * join. * * Finally, vips_globalbalance() can be used to remove contrast differences in * a mosaic * which has been assembled with these functions. It takes the mosaic apart, * measures image contrast differences along the seams, finds a set of * correction factors which will minimise these differences, and reassembles * the mosaic. * vips_remosaic() uses the * same * techniques, but will reassemble the image from a different set of source * images. * */ /* Called from iofuncs to init all operations in this dir. Use a plugin system * instead? */ void vips_mosaicing_operation_init(void) { extern GType vips_merge_get_type(void); extern GType vips_mosaic_get_type(void); extern GType vips_mosaic1_get_type(void); extern GType vips_match_get_type(void); extern GType vips_globalbalance_get_type(void); extern GType vips_matrixinvert_get_type(void); vips_merge_get_type(); vips_mosaic_get_type(); vips_mosaic1_get_type(); vips_matrixinvert_get_type(); vips_match_get_type(); vips_globalbalance_get_type(); } libvips-8.15.1/libvips/mosaicing/pmosaicing.h000066400000000000000000000142731454007373500212200ustar00rootroot00000000000000/* Local definitions used by the mosaicing program * If VIPS_MAXPOINTS change please ensure that it is still a multiple of * AREAS or else AREAS must change as well. Initial setup is for * VIPS_MAXPOINTS = 60, AREAS = 3. * * Copyright: 1990, 1991 N. Dessipris * Author: Nicos Dessipris * Written on: 07/11/1989 * Modified on : 29/11/1989 */ /* Copyright (C) 1991-2003 The National Gallery This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* TODO(kleisauke): This import is needed for vips__affinei */ #include /* Number of entries in blend table. As a power of two as well, for >>ing. */ #define BLEND_SHIFT (10) #define BLEND_SIZE (1 << BLEND_SHIFT) /* How much we scale the int version up by. */ #define BLEND_SCALE (4096) struct _MergeInfo; struct _Overlapping; typedef int (*VipsBlendFn)(VipsRegion *out_region, struct _MergeInfo *inf, struct _Overlapping *ovlap, VipsRect *oreg); /* Keep state for each call in one of these. */ typedef struct _Overlapping { VipsImage *ref; /* Arguments */ VipsImage *sec; VipsImage *out; int dx, dy; int mwidth; /* Ref and sec images, overlap, output area. We normalise these, so * that the output image is always positioned at (0,0) - ie. all these * coordinates are in output image space. */ VipsRect rarea; VipsRect sarea; VipsRect overlap; VipsRect oarea; int blsize; /* Max blend length */ int flsize; /* first/last cache size */ /* Sections of ref and sec which we use in output, excluding * overlap area. */ VipsRect rpart; VipsRect spart; /* Overlap start/end cache */ GMutex *fl_lock; /* Need to lock on build */ int *first, *last; /* Blend function. */ VipsBlendFn blend; } Overlapping; /* Keep per-thread state here. */ typedef struct _MergeInfo { VipsRegion *rir; /* Two input regions */ VipsRegion *sir; float *from1; /* VIPS_CODING_LABQ buffers */ float *from2; float *merge; } MergeInfo; /* Functions shared between lr and tb. */ extern double *vips__coef1; extern double *vips__coef2; extern int *vips__icoef1; extern int *vips__icoef2; int vips__make_blend_luts(void); void vips__add_mosaic_name(VipsImage *image); const char *vips__get_mosaic_name(VipsImage *image); int vips__affinei(VipsImage *in, VipsImage *out, VipsTransformation *trn); int vips__attach_input(VipsRegion *out_region, VipsRegion *ir, VipsRect *area); int vips__copy_input(VipsRegion *out_region, VipsRegion *ir, VipsRect *area, VipsRect *reg); Overlapping *vips__build_mergestate(const char *domain, VipsImage *ref, VipsImage *sec, VipsImage *out, int dx, int dy, int mwidth); void *vips__start_merge(VipsImage *out, void *, void *); int vips__merge_gen(VipsRegion *out_region, void *seq, void *a, void *, gboolean *stop); int vips__stop_merge(void *seq, void *, void *); int vips__lrmerge(VipsImage *ref, VipsImage *sec, VipsImage *out, int dx, int dy, int mwidth); int vips__tbmerge(VipsImage *ref, VipsImage *sec, VipsImage *out, int dx, int dy, int mwidth); int vips__lrmerge1(VipsImage *ref, VipsImage *sec, VipsImage *out, double a, double b, double dx, double dy, int mwidth); int vips__tbmerge1(VipsImage *ref, VipsImage *sec, VipsImage *out, double a, double b, double dx, double dy, int mwidth); #define VIPS_MAXPOINTS (60) /* VIPS_MAXPOINTS % AREAS must be zero */ #define AREAS (3) typedef struct { char *reference; /* filename of reference */ char *secondary; /* filename of secondary */ int deltax; /* initial estimate of displacement */ int deltay; /* initial estimate of displacement */ int nopoints; /* must be multiple of AREAS and <= VIPS_MAXPOINTS */ int halfcorsize; /* recommended 5 */ int halfareasize; /* recommended 8 */ /* x, y_reference and contrast found by vips_calcon() */ int x_reference[VIPS_MAXPOINTS], y_reference[VIPS_MAXPOINTS]; int contrast[VIPS_MAXPOINTS]; /* x, y_secondary and correlation set by vips_chkpair() */ int x_secondary[VIPS_MAXPOINTS], y_secondary[VIPS_MAXPOINTS]; /* returns the corrected best correlation * as detected in 2*halfareasize+1 * centered at point (x2, y2) and using * correlation area 2*halfareasize+1 */ double correlation[VIPS_MAXPOINTS]; /* Coefficients calculated by vips_clinear() */ double l_scale, l_angle, l_deltax, l_deltay; /* used by vips_clinear() */ double dx[VIPS_MAXPOINTS], dy[VIPS_MAXPOINTS]; double deviation[VIPS_MAXPOINTS]; } TiePoints; int vips__chkpair(VipsImage *, VipsImage *, TiePoints *point); int vips__initialize(TiePoints *points); int vips__improve(TiePoints *inpoints, TiePoints *outpoints); int vips__avgdxdy(TiePoints *points, int *dx, int *dy); int vips__lrcalcon(VipsImage *ref, TiePoints *points); int vips__tbcalcon(VipsImage *ref, TiePoints *points); int vips__coeff(int xr1, int yr1, int xs1, int ys1, int xr2, int yr2, int xs2, int ys2, double *a, double *b, double *dx, double *dy); int vips__clinear(TiePoints *points); int vips__find_lroverlap(VipsImage *ref_in, VipsImage *sec_in, VipsImage *out, int bandno_in, int xref, int yref, int xsec, int ysec, int halfcorrelation, int halfarea, int *dx0, int *dy0, double *scale1, double *angle1, double *dx1, double *dy1); int vips__find_tboverlap(VipsImage *ref_in, VipsImage *sec_in, VipsImage *out, int bandno_in, int xref, int yref, int xsec, int ysec, int halfcorrelation, int halfarea, int *dx0, int *dy0, double *scale1, double *angle1, double *dx1, double *dy1); int vips__find_best_contrast(VipsImage *image, int xpos, int ypos, int xsize, int ysize, int xarray[], int yarray[], int cont[], int nbest, int hcorsize); libvips-8.15.1/libvips/mosaicing/remosaic.c000066400000000000000000000127241454007373500206630ustar00rootroot00000000000000/* Use one mosiaced file to mosaic another set of images. * * 1/11/01 JC * - from global_balance * 25/02/02 JC * - detect size change * 10/4/06 * - spot file-not-found * 18/6/20 kleisauke * - convert to vips8 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Define for debug output. #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "pmosaicing.h" #include "global_balance.h" typedef struct { VipsOperation parent_instance; VipsImage *in; VipsImage *out; char *old_str; char *new_str; int new_len; int old_len; } VipsRemosaic; typedef VipsOperationClass VipsRemosaicClass; G_DEFINE_TYPE(VipsRemosaic, vips_remosaic, VIPS_TYPE_OPERATION); static VipsImage * remosaic_fn(JoinNode *node, VipsRemosaic *remosaic) { SymbolTable *st = node->st; VipsImage *im = node->im; VipsImage *out; char filename[FILENAME_MAX]; char *p; if (!im) { vips_error("vips_remosaic", _("file \"%s\" not found"), node->name); return NULL; } /* Remove substring remosaic->old_str from in->filename, replace with * remosaic->new_str. */ vips_strncpy(filename, im->filename, FILENAME_MAX); if ((p = vips_strrstr(filename, remosaic->old_str))) { int offset = p - &filename[0]; vips_strncpy(p, remosaic->new_str, FILENAME_MAX - offset); vips_strncpy(p + remosaic->new_len, im->filename + offset + remosaic->old_len, FILENAME_MAX - offset - remosaic->new_len); } #ifdef DEBUG printf("vips_remosaic: filename \"%s\" -> \"%s\"\n", im->filename, filename); #endif /*DEBUG*/ if (!(out = vips__global_open_image(st, filename))) return NULL; if (out->Xsize != im->Xsize || out->Ysize != im->Ysize) { vips_error("vips_remosaic", _("substitute image \"%s\" is not the same size as \"%s\""), filename, im->filename); return NULL; } return out; } static int vips_remosaic_build(VipsObject *object) { VipsRemosaic *remosaic = (VipsRemosaic *) object; SymbolTable *st; g_object_set(remosaic, "out", vips_image_new(), NULL); if (VIPS_OBJECT_CLASS(vips_remosaic_parent_class)->build(object)) return -1; if (!(st = vips__build_symtab(remosaic->out, SYM_TAB_SIZE)) || vips__parse_desc(st, remosaic->in)) return -1; remosaic->old_len = strlen(remosaic->old_str); remosaic->new_len = strlen(remosaic->new_str); if (vips__build_mosaic(st, remosaic->out, (transform_fn) remosaic_fn, remosaic)) return -1; return 0; } static void vips_remosaic_class_init(VipsRemosaicClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *object_class = (VipsObjectClass *) class; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; object_class->nickname = "remosaic"; object_class->description = _("rebuild an mosaiced image"); object_class->build = vips_remosaic_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsRemosaic, in)); VIPS_ARG_IMAGE(class, "out", 2, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsRemosaic, out)); VIPS_ARG_STRING(class, "old_str", 5, _("old_str"), _("Search for this string"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsRemosaic, old_str), ""); VIPS_ARG_STRING(class, "new_str", 6, _("new_str"), _("And swap for this string"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsRemosaic, new_str), ""); } static void vips_remosaic_init(VipsRemosaic *remosaic) { } /** * vips_remosaic: (method) * @in: mosaic to rebuild * @out: (out): output image * @old_str: gamma of source images * @new_str: gamma of source images * @...: %NULL-terminated list of optional named arguments * * vips_remosaic() works rather as vips_globalbalance(). It takes apart the * mosaiced image @in and rebuilds it, substituting images. * * Unlike vips_globalbalance(), images are substituted based on their file‐ * names. The rightmost occurrence of the string @old_str is swapped * for @new_str, that file is opened, and that image substituted for * the old image. * * It's convenient for multispectral images. You can mosaic one band, then * use that mosaic as a template for mosaicing the others automatically. * * See also: vips_globalbalance(). * * Returns: 0 on success, -1 on error */ int vips_remosaic(VipsImage *in, VipsImage **out, const char *old_str, const char *new_str, ...) { va_list ap; int result; va_start(ap, new_str); result = vips_call_split("remosaic", ap, in, out, old_str, new_str); va_end(ap); return result; } libvips-8.15.1/libvips/mosaicing/tbmerge.c000066400000000000000000000416611454007373500205100ustar00rootroot00000000000000/* Merge two images top-bottom. dx, dy is the offset needed to get from sec * (secondary image) to ref (reference image). * * Usage: * * int * vips_tbmerge(ref, sec, out, dx, dy) * VipsImage *ref, *sec, *out; * int dx, dy; * * Returns 0 on success and -1 on error * * Copyright: 1990, 1991 N. Dessipris * Author: N. Dessipris * Written on: 20/09/1990 * Updated on: 17/04/1991 * 1/6/92: J. Cupitt * - check for difference bug fixed * - geometry calculations improved and simplified * - small speedups * 30/6/93 K.Martinez : coped with IM_CODING_LABQ images * 7/7/93 JC * - ANSIfied * - proper freeing on errors, ready for partial * 8/11/93 JC * - now propagates both input histories * - adds magic lines for global mosaic optimisation * * * 16/May/1994 Ahmed. Abbood * - Modified to use partials on all IO * * June/1995 Ahmed Abbood * * - Modified to work with different types of images. * * * 16/6/95 JC * - added to VIPS! * 7/9/95 JC * - split into two parts: im_tbmerge() and im__tbmerge() * - latter called by im_tbmosaic() * - just the same as public im_tbmerge(), but adds no history * - necessary for im_global_balance() * - small bugs fixed * 10/10/95 JC * - better checks that parameters are sensible * 11/10/95 JC * - Kirk spotted what a load of rubbish Ahmed's code is * - rewritten - many, many bugs fixed * 28/7/97 JC * - new non-rectangular im_lrmerge adapted to make this * - small tidies * 18/2/98 JC * - im_demand_hint() call added * 19/2/98 JC * - now works for any dx/dy by calling im_insert() for bizarre cases * 2/2/01 JC * - added tunable max blend width * 8/3/01 JC * - switched to integer arithmetic for integer blends * 23/3/01 JC * - oops, iblend was broken * 7/11/01 JC * - more sophisticated transparency handling * 15/8/02 JC * - records Xoffset/Yoffset * 20/6/05 * - now requires all bands == 0 for transparency (used to just check * band 0) * 24/1/11 * - gtk-doc * - match formats and bands automatically * 18/6/20 kleisauke * - convert to vips8 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "pmosaicing.h" /* Return the position of the first non-zero pel from the top. */ static int find_top(VipsRegion *ir, int *pos, int x, int y, int h) { VipsPel *pr = VIPS_REGION_ADDR(ir, x, y); VipsImage *im = ir->im; int ls = VIPS_REGION_LSKIP(ir) / VIPS_IMAGE_SIZEOF_ELEMENT(im); int b = im->Bands; int i, j; /* Double the number of bands in a complex. */ if (vips_band_format_iscomplex(im->BandFmt)) b *= 2; /* Search for the first non-zero band element from the top edge of the image. */ #define tsearch(TYPE) \ { \ TYPE *p = (TYPE *) pr; \ \ for (i = 0; i < h; i++) { \ for (j = 0; j < b; j++) \ if (p[j]) \ break; \ if (j < b) \ break; \ \ p += ls; \ } \ } switch (im->BandFmt) { case VIPS_FORMAT_UCHAR: tsearch(unsigned char); break; case VIPS_FORMAT_CHAR: tsearch(signed char); break; case VIPS_FORMAT_USHORT: tsearch(unsigned short); break; case VIPS_FORMAT_SHORT: tsearch(signed short); break; case VIPS_FORMAT_UINT: tsearch(unsigned int); break; case VIPS_FORMAT_INT: tsearch(signed int); break; case VIPS_FORMAT_FLOAT: tsearch(float); break; case VIPS_FORMAT_DOUBLE: tsearch(double); break; case VIPS_FORMAT_COMPLEX: tsearch(float); break; case VIPS_FORMAT_DPCOMPLEX: tsearch(double); break; default: vips_error("vips_tbmerge", "%s", _("internal error")); return -1; } *pos = y + i; return 0; } /* Return the position of the first non-zero pel from the bottom. */ static int find_bot(VipsRegion *ir, int *pos, int x, int y, int h) { VipsPel *pr = VIPS_REGION_ADDR(ir, x, y); VipsImage *im = ir->im; int ls = VIPS_REGION_LSKIP(ir) / VIPS_IMAGE_SIZEOF_ELEMENT(ir->im); int b = im->Bands; int i, j; /* Double the number of bands in a complex. */ if (vips_band_format_iscomplex(im->BandFmt)) b *= 2; /* Search for the first non-zero band element from the top edge of the image. */ #define rsearch(TYPE) \ { \ TYPE *p = (TYPE *) pr + (h - 1) * ls; \ \ for (i = h - 1; i >= 0; i--) { \ for (j = 0; j < b; j++) \ if (p[j]) \ break; \ if (j < b) \ break; \ \ p -= ls; \ } \ } switch (im->BandFmt) { case VIPS_FORMAT_UCHAR: rsearch(unsigned char); break; case VIPS_FORMAT_CHAR: rsearch(signed char); break; case VIPS_FORMAT_USHORT: rsearch(unsigned short); break; case VIPS_FORMAT_SHORT: rsearch(signed short); break; case VIPS_FORMAT_UINT: rsearch(unsigned int); break; case VIPS_FORMAT_INT: rsearch(signed int); break; case VIPS_FORMAT_FLOAT: rsearch(float); break; case VIPS_FORMAT_DOUBLE: rsearch(double); break; case VIPS_FORMAT_COMPLEX: rsearch(float); break; case VIPS_FORMAT_DPCOMPLEX: rsearch(double); break; default: vips_error("vips_tbmerge", "%s", _("internal error")); return -1; } *pos = y + i; return 0; } /* Make first/last for oreg. */ static int make_firstlast(MergeInfo *inf, Overlapping *ovlap, VipsRect *oreg) { VipsRegion *rir = inf->rir; VipsRegion *sir = inf->sir; VipsRect rr, sr; int x; int missing; /* We're going to build first/last ... lock it from other generate * threads. In fact it's harmless if we do get two writers, but we may * avoid duplicating work. */ g_mutex_lock(ovlap->fl_lock); /* Do we already have first/last for this area? Bail out if we do. */ missing = 0; for (x = oreg->left; x < VIPS_RECT_RIGHT(oreg); x++) { const int j = x - ovlap->overlap.left; const int first = ovlap->first[j]; if (first < 0) { missing = 1; break; } } if (!missing) { /* No work to do! */ g_mutex_unlock(ovlap->fl_lock); return 0; } /* Entire height of overlap in ref for oreg ... we know oreg is inside * overlap. */ rr.left = oreg->left; rr.top = ovlap->overlap.top; rr.width = oreg->width; rr.height = ovlap->overlap.height; rr.left -= ovlap->rarea.left; rr.top -= ovlap->rarea.top; /* Same in sec. */ sr.left = oreg->left; sr.top = ovlap->overlap.top; sr.width = oreg->width; sr.height = ovlap->overlap.height; sr.left -= ovlap->sarea.left; sr.top -= ovlap->sarea.top; /* Make pixels. */ if (vips_region_prepare(rir, &rr) || vips_region_prepare(sir, &sr)) { g_mutex_unlock(ovlap->fl_lock); return -1; } /* Make first/last cache. */ for (x = 0; x < oreg->width; x++) { const int j = (x + oreg->left) - ovlap->overlap.left; int *first = &ovlap->first[j]; int *last = &ovlap->last[j]; /* Done this line already? */ if (*first < 0) { /* Search for top/bottom of overlap on this scan-line. */ if (find_top(sir, first, x + sr.left, sr.top, sr.height) || find_bot(rir, last, x + rr.left, rr.top, rr.height)) { g_mutex_unlock(ovlap->fl_lock); return -1; } /* Translate to output space. */ *first += ovlap->sarea.top; *last += ovlap->rarea.top; /* Clip to maximum blend width, if necessary. */ if (ovlap->mwidth >= 0 && *last - *first > ovlap->mwidth) { int shrinkby = (*last - *first) - ovlap->mwidth; *first += shrinkby / 2; *last -= shrinkby / 2; } } } g_mutex_unlock(ovlap->fl_lock); return 0; } /* Test pixel == 0. */ #define TEST_ZERO(TYPE, T, RESULT) \ { \ TYPE *tt = (T); \ int ii; \ \ for (ii = 0; ii < cb; ii++) \ if (tt[i + ii]) \ break; \ if (ii == cb) \ (RESULT) = 1; \ } /* Blend two integer images ... one scan-line. */ #define iblend(TYPE, B, IN1, IN2, OUT) \ { \ TYPE *tr = (TYPE *) (IN1); \ TYPE *ts = (TYPE *) (IN2); \ TYPE *tq = (TYPE *) (OUT); \ const int cb = (B); \ int ref_zero; \ int sec_zero; \ int x, b; \ int i; \ \ for (i = 0, x = 0; x < oreg->width; x++) { \ ref_zero = 0; \ sec_zero = 0; \ TEST_ZERO(TYPE, tr, ref_zero); \ TEST_ZERO(TYPE, ts, sec_zero); \ \ /* Above the bottom image? \ */ \ if (y < first[x]) { \ if (!ref_zero) \ for (b = 0; b < cb; b++, i++) \ tq[i] = tr[i]; \ else \ for (b = 0; b < cb; b++, i++) \ tq[i] = ts[i]; \ } \ /* To the right? \ */ \ else if (y >= last[x]) { \ if (!sec_zero) \ for (b = 0; b < cb; b++, i++) \ tq[i] = ts[i]; \ else \ for (b = 0; b < cb; b++, i++) \ tq[i] = tr[i]; \ } \ /* In blend area. \ */ \ else { \ if (!ref_zero && !sec_zero) { \ const int bheight = last[x] - first[x]; \ const int inx = \ ((y - first[x]) << BLEND_SHIFT) / bheight; \ int c1 = vips__icoef1[inx]; \ int c2 = vips__icoef2[inx]; \ \ for (b = 0; b < cb; b++, i++) \ tq[i] = c1 * tr[i] / BLEND_SCALE + \ c2 * ts[i] / BLEND_SCALE; \ } \ else if (!ref_zero) \ for (b = 0; b < cb; b++, i++) \ tq[i] = tr[i]; \ else \ for (b = 0; b < cb; b++, i++) \ tq[i] = ts[i]; \ } \ } \ } /* Blend two float images. */ #define fblend(TYPE, B, IN1, IN2, OUT) \ { \ TYPE *tr = (TYPE *) (IN1); \ TYPE *ts = (TYPE *) (IN2); \ TYPE *tq = (TYPE *) (OUT); \ int ref_zero; \ int sec_zero; \ const int cb = (B); \ int x, b; \ int i; \ \ for (i = 0, x = 0; x < oreg->width; x++) { \ ref_zero = 0; \ sec_zero = 0; \ TEST_ZERO(TYPE, tr, ref_zero); \ TEST_ZERO(TYPE, ts, sec_zero); \ \ /* Above the bottom image? \ */ \ if (y < first[x]) \ if (!ref_zero) \ for (b = 0; b < cb; b++, i++) \ tq[i] = tr[i]; \ else \ for (b = 0; b < cb; b++, i++) \ tq[i] = tr[i]; \ /* To the right? \ */ \ else if (y >= last[x]) \ if (!sec_zero) \ for (b = 0; b < cb; b++, i++) \ tq[i] = ts[i]; \ else \ for (b = 0; b < cb; b++, i++) \ tq[i] = tr[i]; \ /* In blend area. \ */ \ else { \ if (!ref_zero && !sec_zero) { \ const int bheight = last[x] - first[x]; \ const int inx = \ ((y - first[x]) << BLEND_SHIFT) / bheight; \ double c1 = vips__coef1[inx]; \ double c2 = vips__coef2[inx]; \ \ for (b = 0; b < cb; b++, i++) \ tq[i] = c1 * tr[i] + c2 * ts[i]; \ } \ else if (!ref_zero) \ for (b = 0; b < cb; b++, i++) \ tq[i] = tr[i]; \ else \ for (b = 0; b < cb; b++, i++) \ tq[i] = ts[i]; \ } \ } \ } /* Top-bottom blend function for non-labpack images. */ static int tb_blend(VipsRegion *out_region, MergeInfo *inf, Overlapping *ovlap, VipsRect *oreg) { VipsRegion *rir = inf->rir; VipsRegion *sir = inf->sir; VipsImage *im = out_region->im; VipsRect prr, psr; int y, yr, ys; /* Make sure we have a complete first/last set for this area. */ if (make_firstlast(inf, ovlap, oreg)) return -1; /* Part of rr which we will output. */ prr = *oreg; prr.left -= ovlap->rarea.left; prr.top -= ovlap->rarea.top; /* Part of sr which we will output. */ psr = *oreg; psr.left -= ovlap->sarea.left; psr.top -= ovlap->sarea.top; /* Make pixels. */ if (vips_region_prepare(rir, &prr) || vips_region_prepare(sir, &psr)) return -1; /* Loop down overlap area. */ for (y = oreg->top, yr = prr.top, ys = psr.top; y < VIPS_RECT_BOTTOM(oreg); y++, yr++, ys++) { VipsPel *pr = VIPS_REGION_ADDR(rir, prr.left, yr); VipsPel *ps = VIPS_REGION_ADDR(sir, psr.left, ys); VipsPel *q = VIPS_REGION_ADDR(out_region, oreg->left, y); const int j = oreg->left - ovlap->overlap.left; const int *first = ovlap->first + j; const int *last = ovlap->last + j; switch (im->BandFmt) { case VIPS_FORMAT_UCHAR: iblend(unsigned char, im->Bands, pr, ps, q); break; case VIPS_FORMAT_CHAR: iblend(signed char, im->Bands, pr, ps, q); break; case VIPS_FORMAT_USHORT: iblend(unsigned short, im->Bands, pr, ps, q); break; case VIPS_FORMAT_SHORT: iblend(signed short, im->Bands, pr, ps, q); break; case VIPS_FORMAT_UINT: iblend(unsigned int, im->Bands, pr, ps, q); break; case VIPS_FORMAT_INT: iblend(signed int, im->Bands, pr, ps, q); break; case VIPS_FORMAT_FLOAT: fblend(float, im->Bands, pr, ps, q); break; case VIPS_FORMAT_DOUBLE: fblend(double, im->Bands, pr, ps, q); break; case VIPS_FORMAT_COMPLEX: fblend(float, im->Bands * 2, pr, ps, q); break; case VIPS_FORMAT_DPCOMPLEX: fblend(double, im->Bands * 2, pr, ps, q); break; default: vips_error("vips_tbmerge", "%s", _("internal error")); return -1; } } return 0; } /* Top-bottom blend function for VIPS_CODING_LABQ images. */ static int tb_blend_labpack(VipsRegion *out_region, MergeInfo *inf, Overlapping *ovlap, VipsRect *oreg) { VipsRegion *rir = inf->rir; VipsRegion *sir = inf->sir; VipsRect prr, psr; int y, yr, ys; /* Make sure we have a complete first/last set for this area. This * will just look at the top 8 bits of L, not all 10, but should be OK. */ if (make_firstlast(inf, ovlap, oreg)) return -1; /* Part of rr which we will output. */ prr = *oreg; prr.left -= ovlap->rarea.left; prr.top -= ovlap->rarea.top; /* Part of sr which we will output. */ psr = *oreg; psr.left -= ovlap->sarea.left; psr.top -= ovlap->sarea.top; /* Make pixels. */ if (vips_region_prepare(rir, &prr) || vips_region_prepare(sir, &psr)) return -1; /* Loop down overlap area. */ for (y = oreg->top, yr = prr.top, ys = psr.top; y < VIPS_RECT_BOTTOM(oreg); y++, yr++, ys++) { VipsPel *pr = VIPS_REGION_ADDR(rir, prr.left, yr); VipsPel *ps = VIPS_REGION_ADDR(sir, psr.left, ys); VipsPel *q = VIPS_REGION_ADDR(out_region, oreg->left, y); const int j = oreg->left - ovlap->overlap.left; const int *first = ovlap->first + j; const int *last = ovlap->last + j; float *fq = inf->merge; float *r = inf->from1; float *s = inf->from2; /* Unpack two bits we want. */ vips__LabQ2Lab_vec(r, pr, oreg->width); vips__LabQ2Lab_vec(s, ps, oreg->width); /* Blend as floats. */ fblend(float, 3, r, s, fq); /* Re-pack to output buffer. */ vips__Lab2LabQ_vec(q, inf->merge, oreg->width); } return 0; } /* Build per-call state. */ static Overlapping * build_tbstate(VipsImage *ref, VipsImage *sec, VipsImage *out, int dx, int dy, int mwidth) { Overlapping *ovlap; if (!(ovlap = vips__build_mergestate("vips_tbmerge", ref, sec, out, dx, dy, mwidth))) return NULL; /* Select blender. */ switch (ovlap->ref->Coding) { case VIPS_CODING_LABQ: ovlap->blend = tb_blend_labpack; break; case VIPS_CODING_NONE: ovlap->blend = tb_blend; break; default: vips_error("vips_tbmerge", "%s", _("unknown coding type")); return NULL; } /* Find the parts of output which come just from ref and just from sec. */ ovlap->rpart = ovlap->rarea; ovlap->spart = ovlap->sarea; ovlap->rpart.height -= ovlap->overlap.height; ovlap->spart.top += ovlap->overlap.height; ovlap->spart.height -= ovlap->overlap.height; /* Is there too much overlap? ie. bottom edge of ref image is greater * than bottom edge of sec image, or top edge of ref > top edge of * sec. */ if (VIPS_RECT_BOTTOM(&ovlap->rarea) > VIPS_RECT_BOTTOM(&ovlap->sarea) || ovlap->rarea.top > ovlap->sarea.top) { vips_error("vips_tbmerge", "%s", _("too much overlap")); return NULL; } /* Max number of pixels we may have to blend together. */ ovlap->blsize = ovlap->overlap.width; return ovlap; } int vips__tbmerge(VipsImage *ref, VipsImage *sec, VipsImage *out, int dx, int dy, int mwidth) { Overlapping *ovlap; if (dy > 0 || dy < 1 - ref->Ysize) { VipsImage *x; #ifdef DEBUG printf("vips__tbmerge: no overlap, using insert\n"); #endif /* No overlap, use insert instead. */ if (vips_insert(ref, sec, &x, -dx, -dy, "expand", TRUE, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); out->Xoffset = -dx; out->Yoffset = -dy; return 0; } if (!(ovlap = build_tbstate(ref, sec, out, dx, dy, mwidth))) return -1; if (vips_image_pipelinev(out, VIPS_DEMAND_STYLE_THINSTRIP, ovlap->ref, ovlap->sec, NULL)) return -1; out->Xsize = ovlap->oarea.width; out->Ysize = ovlap->oarea.height; out->Xoffset = -dx; out->Yoffset = -dy; if (vips_image_generate(out, vips__start_merge, vips__merge_gen, vips__stop_merge, ovlap, NULL)) return -1; return 0; } libvips-8.15.1/libvips/mosaicing/tbmosaic.c000066400000000000000000000144331454007373500206610ustar00rootroot00000000000000/* join top-bottom with an approximate overlap * * Copyright: 1990, N. Dessipris. * * Author: Nicos Dessipris * Written on: 07/11/1989 * Modified on : 29/11/1989, 18/04/1991 * Modified and debugged by Ahmed Abbood . 1995 * 14/6/95 JC * - adapted for new balance ideas * - more bug-fixes * 1/11/95 JC * - frees memory used by analysis phase as soon as possible * - means large mosaics use significantly less peak memory * 26/3/96 JC * - now calls im_tbmerge() rather than im__tbmerge() * 30/7/97 JC * - im__find_tboverlap() returns 1st order params too * 2/2/01 JC * - added tunable max blend width * 24/2/05 * - im_scale() makes it work for any image type * 25/1/11 * - gtk-doc * - remove balance stuff * - any mix of types and bands * - cleanups * 18/6/20 kleisauke * - convert to vips8 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "pmosaicing.h" int vips__find_tboverlap(VipsImage *ref_in, VipsImage *sec_in, VipsImage *out, int bandno_in, int xref, int yref, int xsec, int ysec, int halfcorrelation, int halfarea, int *dx0, int *dy0, double *scale1, double *angle1, double *dx1, double *dy1) { VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(out), 6); VipsRect top, bottom, overlap; TiePoints points, *p_points; /* defined in mosaic.h */ TiePoints newpoints, *p_newpoints; int i; int dx, dy; /* Test cor and area. */ if (halfcorrelation < 0 || halfarea < 0 || halfarea < halfcorrelation) { vips_error("vips__tbmosaic", "%s", _("bad area parameters")); return -1; } /* Set positions of top and bottom. */ top.left = 0; top.top = 0; top.width = ref_in->Xsize; top.height = ref_in->Ysize; bottom.left = xref - xsec; bottom.top = yref - ysec; bottom.width = sec_in->Xsize; bottom.height = sec_in->Ysize; /* Find overlap. */ vips_rect_intersectrect(&top, &bottom, &overlap); if (overlap.width < 2 * halfarea + 1 || overlap.height < 2 * halfarea + 1) { vips_error("vips__tbmosaic", "%s", _("overlap too small for search")); return -1; } /* Extract overlaps as 8-bit, 1 band. */ if (vips_extract_area(ref_in, &t[0], overlap.left, overlap.top, overlap.width, overlap.height, NULL) || vips_extract_area(sec_in, &t[1], overlap.left - bottom.left, overlap.top - bottom.top, overlap.width, overlap.height, NULL)) return -1; if (ref_in->Coding == VIPS_CODING_LABQ) { if (vips_LabQ2sRGB(t[0], &t[2], NULL) || vips_LabQ2sRGB(t[1], &t[3], NULL) || vips_extract_band(t[2], &t[4], 1, NULL) || vips_extract_band(t[3], &t[5], 1, NULL)) return -1; } else if (ref_in->Coding == VIPS_CODING_NONE) { if (vips_extract_band(t[0], &t[2], bandno_in, NULL) || vips_extract_band(t[1], &t[3], bandno_in, NULL) || vips_scale(t[2], &t[4], NULL) || vips_scale(t[3], &t[5], NULL)) return -1; } else { vips_error("vips__tbmosaic", "%s", _("unknown Coding type")); return -1; } /* Initialise and fill TiePoints */ p_points = &points; p_newpoints = &newpoints; p_points->reference = ref_in->filename; p_points->secondary = sec_in->filename; p_points->nopoints = VIPS_MAXPOINTS; p_points->deltax = 0; p_points->deltay = 0; p_points->halfcorsize = halfcorrelation; p_points->halfareasize = halfarea; /* Initialise the structure */ for (i = 0; i < VIPS_MAXPOINTS; i++) { p_points->x_reference[i] = 0; p_points->y_reference[i] = 0; p_points->x_secondary[i] = 0; p_points->y_secondary[i] = 0; p_points->contrast[i] = 0; p_points->correlation[i] = 0.0; p_points->dx[i] = 0.0; p_points->dy[i] = 0.0; p_points->deviation[i] = 0.0; } /* Search ref for possible tie-points. Sets: p_points->contrast, * p_points->x,y_reference. */ if (vips__tbcalcon(t[4], p_points)) return -1; /* For each candidate point, correlate against corresponding part of * sec. Sets x,y_secondary and fills correlation and dx, dy. */ if (vips__chkpair(t[4], t[5], p_points)) return -1; /* First call to vips_clinear(). */ if (vips__initialize(p_points)) return -1; /* Improve the selection of tiepoints until all abs(deviations) are * < 1.0 by deleting all wrong points. */ if (vips__improve(p_points, p_newpoints)) return -1; /* Average remaining offsets. */ if (vips__avgdxdy(p_newpoints, &dx, &dy)) return -1; /* Offset with overlap position. */ *dx0 = -bottom.left + dx; *dy0 = -bottom.top + dy; /* Write 1st order parameters too. */ *scale1 = newpoints.l_scale; *angle1 = newpoints.l_angle; *dx1 = newpoints.l_deltax; *dy1 = newpoints.l_deltay; return 0; } int vips__tbmosaic(VipsImage *ref, VipsImage *sec, VipsImage *out, int bandno, int xref, int yref, int xsec, int ysec, int hwindowsize, int hsearchsize, int mwidth) { int dx0, dy0; double scale1, angle1, dx1, dy1; VipsImage *dummy; VipsImage *x; /* Correct overlap. dummy is just a placeholder used to ensure that * memory used by the analysis phase is freed as soon as possible. */ dummy = vips_image_new(); if (vips__find_tboverlap(ref, sec, dummy, bandno, xref, yref, xsec, ysec, hwindowsize, hsearchsize, &dx0, &dy0, &scale1, &angle1, &dx1, &dy1)) { g_object_unref(dummy); return -1; } g_object_unref(dummy); /* Merge top-bottom. */ if (vips_merge(ref, sec, &x, VIPS_DIRECTION_VERTICAL, dx0, dy0, "mblend", mwidth, NULL)) return -1; if (vips_image_write(x, out)) { g_object_unref(x); return -1; } g_object_unref(x); return 0; } libvips-8.15.1/libvips/resample/000077500000000000000000000000001454007373500165465ustar00rootroot00000000000000libvips-8.15.1/libvips/resample/affine.c000066400000000000000000000523041454007373500201460ustar00rootroot00000000000000/* affine transform with a supplied interpolator. * * Copyright N. Dessipris * Written on: 01/11/1991 * Modified on: 12/3/92 JC * - rounding error in interpolation routine fixed * - test for scale=1, angle=0 case fixed * - clipping of output removed: redundant * - various little tidies * - problems remain with scale>20, size<10 * * Re-written on: 20/08/92, J.Ph Laurent * * 21/02/93, JC * - speed-ups * - simplifications * - im_similarity now calculates a window and calls this routine * 6/7/93 JC * - rewritten for partials * - ANSIfied * - now rotates any non-complex type * 3/6/94 JC * - C revised in bug search * 9/6/94 JC * - im_prepare() was preparing too small an area! oops * 22/5/95 JC * - added code to detect all-black output area case - helps lazy ip * 3/7/95 JC * - IM_CODING_LABQ handling moved to here * 31/7/97 JC * - dx/dy sign reversed to be less confusing ... now follows comment at * top ... ax - by + dx etc. * - tiny speed up, replaced the *++ on interpolation with [z] * - im_similarity() moved in here * - args swapped: was whxy, now xywh * - didn't agree with dispatch fns before :( * 3/3/98 JC * - im_demand_hint() added * 20/12/99 JC * - im_affine() made from im_similarity_area() * - transform stuff cleaned up a bit * 14/4/01 JC * - oops, invert_point() had a rounding problem * 23/2/02 JC * - pre-calculate interpolation matrices * - integer interpolation for int8/16 types, double for * int32/float/double * - faster transformation * 15/8/02 JC * - records Xoffset/Yoffset * 14/4/04 * - rounding, clipping and transforming revised, now pixel-perfect (or * better than gimp, anyway) * 22/6/05 * - all revised again, simpler and more reliable now * 30/3/06 * - gah, still an occasional clipping problem * 12/7/06 * - still more tweaking, gah again * 7/10/06 * - set THINSTRIP for no-rotate affines * 20/10/08 * - version with interpolate parameter, from im_affine() * 30/10/08 * - allow complex image types * 4/11/08 * - take an interpolator as a param * - replace im_affine with this, provide an im_affine() compat wrapper * - break transform stuff out to transform.c * - revise clipping / transform stuff, again * - now do corner rather than centre: this way the identity transform * returns the input exactly * 12/8/10 * - revise window_size / window_offset stuff again, see also * interpolate.c * 2/2/11 * - gtk-doc * 14/12/12 * - redone as a class * - added input space translation * 22/1/14 * - auto RAD decode * 1/8/14 * - revise transform ... again * - see new stress test in nip2/test/extras * 7/11/17 * - add "extend" param * - add "background" parameter * - better clipping means we have no jaggies on edges * - premultiply alpha * 18/5/20 * - add "premultiplied" flag */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG #define VIPS_DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include #include #include "presample.h" typedef struct _VipsAffine { VipsResample parent_instance; VipsArea *matrix; VipsInterpolate *interpolate; VipsArea *oarea; double odx; double ody; double idx; double idy; VipsTransformation trn; /* How to generate extra edge pixels. */ VipsExtend extend; /* Background colour. */ VipsArrayDouble *background; /* The [double] converted to the input image format. */ VipsPel *ink; /* True if the input is already premultiplied (and we don't need to). */ gboolean premultiplied; } VipsAffine; typedef VipsResampleClass VipsAffineClass; G_DEFINE_TYPE(VipsAffine, vips_affine, VIPS_TYPE_RESAMPLE); /* We have five (!!) coordinate systems. Working forward through them, these * are: * * 1. The original input image. iarea is defined on this image. * * 2. This is embedded in a larger image to provide borders for the * interpolator. window_offset and window_size control the embedding. * These are the coordinates we pass to VIPS_REGION_ADDR()/ * vips_region_prepare() and the interpolator. * * The borders are sized by the interpolator's window_size property and offset * by the interpolator's window_offset property. For example, * for bilinear (window_size 2, window_offset 0) we add a single line * of extra pixels along the bottom and right (window_size - 1). For * bicubic (window_size 4, window_offset 1) we add a single line top and left * (window_offset), and two lines bottom and right (window_size - 1 - * window_offset). * * 3. We need point (0, 0) in (1) to be at (0, 0) for the transformation. So * shift everything up and left to make the displaced input image. This is the * space that the transformation maps from, and can have negative pixels * (up and left of the image, for interpolation). iarea works here too. * * 4. Output transform space. This is the where the transform maps to. Pixels * can be negative, since a rotated image can go up and left of the origin. * * 5. Output image space. This is the wh of the xywh passed to vips_affine() * below. These are the coordinates we pass to VIPS_REGION_ADDR() for the * output image, and that affinei_gen() is asked for. */ static int vips_affine_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) seq; const VipsAffine *affine = (VipsAffine *) b; const VipsImage *in = (VipsImage *) a; const int window_size = vips_interpolate_get_window_size(affine->interpolate); const int window_offset = vips_interpolate_get_window_offset(affine->interpolate); const VipsInterpolateMethod interpolate = vips_interpolate_get_method(affine->interpolate); /* Area we generate in the output image. */ const VipsRect *r = &out_region->valid; const int le = r->left; const int ri = VIPS_RECT_RIGHT(r); const int to = r->top; const int bo = VIPS_RECT_BOTTOM(r); const VipsRect *iarea = &affine->trn.iarea; const VipsRect *oarea = &affine->trn.oarea; int ps = VIPS_IMAGE_SIZEOF_PEL(in); int x, y, z; VipsRect image, want, need, clipped; #ifdef DEBUG_VERBOSE printf("vips_affine_gen: " "generating left=%d, top=%d, width=%d, height=%d\n", r->left, r->top, r->width, r->height); #endif /*DEBUG_VERBOSE*/ /* We are generating this chunk of the transformed image. This takes * us to space 4. */ want = *r; want.left += oarea->left; want.top += oarea->top; /* Find the area of the input image we need. This takes us to space 3. */ vips__transform_invert_rect(&affine->trn, &want, &need); /* That does round-to-nearest, because it has to stop rounding errors * growing images unexpectedly. We need round-down, so we must * add half a pixel along the left and top. But we are int :( so add 1 * pixel. * * Add an extra line along the right and bottom as well, for rounding. */ vips_rect_marginadjust(&need, 1); /* We need to fetch a larger area for the interpolator. */ need.left -= window_offset; need.top -= window_offset; need.width += window_size - 1; need.height += window_size - 1; /* Now go to space 2, the expanded input image. This is the one we * read pixels from. */ need.left += window_offset; need.top += window_offset; /* Clip against the size of (2). */ image.left = 0; image.top = 0; image.width = in->Xsize; image.height = in->Ysize; vips_rect_intersectrect(&need, &image, &clipped); #ifdef DEBUG_VERBOSE printf("vips_affine_gen: preparing left=%d, top=%d, width=%d, height=%d\n", clipped.left, clipped.top, clipped.width, clipped.height); #endif /*DEBUG_VERBOSE*/ if (vips_rect_isempty(&clipped)) { vips_region_paint_pel(out_region, r, affine->ink); return 0; } if (vips_region_prepare(ir, &clipped)) return -1; VIPS_GATE_START("vips_affine_gen: work"); /* Resample! x/y loop over pixels in the output image (5). */ for (y = to; y < bo; y++) { /* Input clipping rectangle. We offset this so we can clip in * space 2. */ const int ile = iarea->left + window_offset; const int ito = iarea->top + window_offset; const int iri = ile + iarea->width; const int ibo = ito + iarea->height; /* Derivative of matrix. */ const double ddx = affine->trn.ia; const double ddy = affine->trn.ic; /* Continuous cods in transformed space. */ const double ox = le + oarea->left - affine->trn.odx; const double oy = y + oarea->top - affine->trn.ody; /* Continuous cods in input space. */ double ix, iy; VipsPel *q; /* To (3). */ ix = affine->trn.ia * ox + affine->trn.ib * oy; iy = affine->trn.ic * ox + affine->trn.id * oy; /* And the input offset in (3). */ ix -= affine->trn.idx; iy -= affine->trn.idy; /* Finally to 2. */ ix += window_offset; iy += window_offset; q = VIPS_REGION_ADDR(out_region, le, y); for (x = le; x < ri; x++) { int fx, fy; fx = VIPS_FLOOR(ix); fy = VIPS_FLOOR(iy); /* Clip against iarea. */ if (fx >= ile && fx <= iri && fy >= ito && fy <= ibo) { /* Verify that we can read the whole stencil. * With DEBUG on this will range-check. */ g_assert(VIPS_REGION_ADDR(ir, (int) ix - window_offset, (int) iy - window_offset)); g_assert(VIPS_REGION_ADDR(ir, (int) ix - window_offset + window_size - 1, (int) iy - window_offset + window_size - 1)); interpolate(affine->interpolate, q, ir, ix, iy); } else { /* Out of range: paint the background. */ for (z = 0; z < ps; z++) q[z] = affine->ink[z]; } ix += ddx; iy += ddy; q += ps; } } VIPS_GATE_STOP("vips_affine_gen: work"); VIPS_COUNT_PIXELS(out_region, "vips_affine_gen"); return 0; } static int vips_affine_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsResample *resample = VIPS_RESAMPLE(object); VipsAffine *affine = (VipsAffine *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 7); VipsImage *in; VipsDemandStyle hint; int window_size; int window_offset; double edge; /* TRUE if we've premultiplied and need to unpremultiply. */ gboolean have_premultiplied; VipsBandFormat unpremultiplied_format; if (VIPS_OBJECT_CLASS(vips_affine_parent_class)->build(object)) return -1; if (vips_check_coding_known(class->nickname, resample->in)) return -1; if (vips_check_vector_length(class->nickname, affine->matrix->n, 4)) return -1; if (vips_object_argument_isset(object, "oarea") && vips_check_vector_length(class->nickname, affine->oarea->n, 4)) return -1; /* Can be set explicitly to NULL to mean default setting. */ if (!affine->interpolate) affine->interpolate = vips_interpolate_new("bilinear"); in = resample->in; /* Set up transform. */ window_size = vips_interpolate_get_window_size(affine->interpolate); window_offset = vips_interpolate_get_window_offset(affine->interpolate); affine->trn.iarea.left = 0; affine->trn.iarea.top = 0; affine->trn.iarea.width = in->Xsize; affine->trn.iarea.height = in->Ysize; affine->trn.a = ((double *) affine->matrix->data)[0]; affine->trn.b = ((double *) affine->matrix->data)[1]; affine->trn.c = ((double *) affine->matrix->data)[2]; affine->trn.d = ((double *) affine->matrix->data)[3]; affine->trn.idx = 0; affine->trn.idy = 0; affine->trn.odx = 0; affine->trn.ody = 0; if (vips__transform_calc_inverse(&affine->trn)) return -1; /* Set the default value for oarea. */ vips__transform_set_area(&affine->trn); if (vips_object_argument_isset(object, "oarea")) { affine->trn.oarea.left = ((int *) affine->oarea->data)[0]; affine->trn.oarea.top = ((int *) affine->oarea->data)[1]; affine->trn.oarea.width = ((int *) affine->oarea->data)[2]; affine->trn.oarea.height = ((int *) affine->oarea->data)[3]; } if (vips_object_argument_isset(object, "odx")) affine->trn.odx = affine->odx; if (vips_object_argument_isset(object, "ody")) affine->trn.ody = affine->ody; if (vips_object_argument_isset(object, "idx")) affine->trn.idx = affine->idx; if (vips_object_argument_isset(object, "idy")) affine->trn.idy = affine->idy; #ifdef DEBUG printf("vips_affine_build: copy on identity transform disabled\n"); #else /*!DEBUG*/ if (vips__transform_isidentity(&affine->trn) && affine->trn.oarea.left == 0 && affine->trn.oarea.top == 0 && affine->trn.oarea.width == in->Xsize && affine->trn.oarea.height == in->Ysize) return vips_image_write(in, resample->out); #endif /*!DEBUG*/ /* Check for coordinate overflow ... we want to be able to hold the * output space inside INT_MAX / TRANSFORM_SCALE. */ edge = (int) (INT_MAX / VIPS_TRANSFORM_SCALE); if (affine->trn.oarea.left < -edge || affine->trn.oarea.top < -edge || VIPS_RECT_RIGHT(&affine->trn.oarea) > edge || VIPS_RECT_BOTTOM(&affine->trn.oarea) > edge) { vips_error(class->nickname, "%s", _("output coordinates out of range")); return -1; } if (vips_image_decode(in, &t[0])) return -1; in = t[0]; /* Add new pixels around the input so we can interpolate at the edges. * * We add the interpolate stencil, plus one extra pixel on all the * edges. This means when we clip in generate (above) we can be sure * we clip outside the real pixels and don't get jaggies on edges. */ if (vips_embed(in, &t[2], window_offset + 1, window_offset + 1, in->Xsize + window_size - 1 + 2, in->Ysize + window_size - 1 + 2, "extend", affine->extend, "background", affine->background, NULL)) return -1; in = t[2]; /* We've added a one-pixel border to the input: displace the transform * to compensate. */ affine->trn.idx -= 1; affine->trn.idy -= 1; /* If there's an alpha and we've not premultiplied, we have to * premultiply before resampling. See * https://github.com/libvips/libvips/issues/291 */ have_premultiplied = FALSE; if (vips_image_hasalpha(in) && !affine->premultiplied) { if (vips_premultiply(in, &t[3], NULL)) return -1; have_premultiplied = TRUE; /* vips_premultiply() makes a float image. When we * vips_unpremultiply() below, we need to cast back to the * pre-premultiply format. */ unpremultiplied_format = in->BandFmt; in = t[3]; } /* Convert the background to the image's format. */ if (!(affine->ink = vips__vector_to_ink(class->nickname, in, VIPS_AREA(affine->background)->data, NULL, VIPS_AREA(affine->background)->n))) return -1; /* Normally SMALLTILE ... except if this is strictly a size * up/down affine. */ if (affine->trn.b == 0.0 && affine->trn.c == 0.0) hint = VIPS_DEMAND_STYLE_FATSTRIP; else hint = VIPS_DEMAND_STYLE_SMALLTILE; t[4] = vips_image_new(); if (vips_image_pipelinev(t[4], hint, in, NULL)) return -1; t[4]->Xsize = affine->trn.oarea.width; t[4]->Ysize = affine->trn.oarea.height; #ifdef DEBUG printf("vips_affine_build: transform: "); vips__transform_print(&affine->trn); printf(" window_offset = %d, window_size = %d\n", window_offset, window_size); printf(" input image width = %d, height = %d\n", in->Xsize, in->Ysize); printf(" output image width = %d, height = %d\n", t[4]->Xsize, t[4]->Ysize); #endif /*DEBUG*/ /* Generate! */ if (vips_image_generate(t[4], vips_start_one, vips_affine_gen, vips_stop_one, in, affine)) return -1; /* Finally: can now set Xoffset/Yoffset. */ t[4]->Xoffset = affine->trn.odx - affine->trn.oarea.left; t[4]->Yoffset = affine->trn.ody - affine->trn.oarea.top; in = t[4]; if (have_premultiplied) { if (vips_unpremultiply(in, &t[5], NULL) || vips_cast(t[5], &t[6], unpremultiplied_format, NULL)) return -1; in = t[6]; } if (vips_image_write(in, resample->out)) return -1; return 0; } static void vips_affine_class_init(VipsAffineClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VIPS_DEBUG_MSG("vips_affine_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "affine"; vobject_class->description = _("affine transform of an image"); vobject_class->build = vips_affine_build; VIPS_ARG_BOXED(class, "matrix", 110, _("Matrix"), _("Transformation matrix"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsAffine, matrix), VIPS_TYPE_ARRAY_DOUBLE); VIPS_ARG_INTERPOLATE(class, "interpolate", 2, _("Interpolate"), _("Interpolate pixels with this"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsAffine, interpolate)); VIPS_ARG_BOXED(class, "oarea", 111, _("Output rect"), _("Area of output to generate"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsAffine, oarea), VIPS_TYPE_ARRAY_INT); VIPS_ARG_DOUBLE(class, "odx", 112, _("Output offset"), _("Horizontal output displacement"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsAffine, odx), -10000000, 10000000, 0); VIPS_ARG_DOUBLE(class, "ody", 113, _("Output offset"), _("Vertical output displacement"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsAffine, ody), -10000000, 10000000, 0); VIPS_ARG_DOUBLE(class, "idx", 114, _("Input offset"), _("Horizontal input displacement"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsAffine, idx), -10000000, 10000000, 0); VIPS_ARG_DOUBLE(class, "idy", 115, _("Input offset"), _("Vertical input displacement"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsAffine, idy), -10000000, 10000000, 0); VIPS_ARG_ENUM(class, "extend", 117, _("Extend"), _("How to generate the extra pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsAffine, extend), VIPS_TYPE_EXTEND, VIPS_EXTEND_BACKGROUND); VIPS_ARG_BOXED(class, "background", 116, _("Background"), _("Background value"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsAffine, background), VIPS_TYPE_ARRAY_DOUBLE); VIPS_ARG_BOOL(class, "premultiplied", 117, _("Premultiplied"), _("Images have premultiplied alpha"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsAffine, premultiplied), FALSE); } static void vips_affine_init(VipsAffine *affine) { affine->extend = VIPS_EXTEND_BACKGROUND; affine->background = vips_array_double_newv(1, 0.0); } /** * vips_affine: (method) * @in: input image * @out: (out): output image * @a: transformation matrix coefficient * @b: transformation matrix coefficient * @c: transformation matrix coefficient * @d: transformation matrix coefficient * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @interpolate: #VipsInterpolate, interpolate pixels with this * * @oarea: #VipsArrayInt, output rectangle * * @idx: %gdouble, input horizontal offset * * @idy: %gdouble, input vertical offset * * @odx: %gdouble, output horizontal offset * * @ody: %gdouble, output vertical offset * * @extend: #VipsExtend how to generate new pixels * * @background: #VipsArrayDouble colour for new pixels * * @premultiplied: %gboolean, images are already premultiplied * * This operator performs an affine transform on an image using @interpolate. * * The transform is: * * |[ * X = @a * (x + @idx) + @b * (y + @idy) + @odx * Y = @c * (x + @idx) + @d * (y + @idy) + @doy * * where: * x and y are the coordinates in input image. * X and Y are the coordinates in output image. * (0,0) is the upper left corner. * ]| * * The section of the output space defined by @oarea is written to * @out. @oarea is a four-element int array of left, top, width, height. * By default @oarea is just large enough to cover the whole of the * transformed input image. * * By default, new pixels are filled with @background. This defaults to * zero (black). You can set other extend types with @extend. #VIPS_EXTEND_COPY * is better for image upsizing. * * @interpolate defaults to bilinear. * * @idx, @idy, @odx, @ody default to zero. * * Image are normally treated as unpremultiplied, so this operation can be used * directly on PNG images. If your images have been through vips_premultiply(), * set @premultiplied. * * This operation does not change xres or yres. The image resolution needs to * be updated by the application. * * See also: vips_shrink(), vips_resize(), #VipsInterpolate. * * Returns: 0 on success, -1 on error */ int vips_affine(VipsImage *in, VipsImage **out, double a, double b, double c, double d, ...) { va_list ap; VipsArea *matrix; int result; matrix = VIPS_AREA(vips_array_double_newv(4, a, b, c, d)); va_start(ap, d); result = vips_call_split("affine", ap, in, out, matrix); va_end(ap); vips_area_unref(matrix); return result; } libvips-8.15.1/libvips/resample/bicubic.cpp000066400000000000000000000404551454007373500206620ustar00rootroot00000000000000/* bicubic (catmull-rom) interpolator * * 12/8/10 * - revise window_size / window_offset stuff again * 7/2/16 * - double intermediate for 32-bit int types */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* Bicubic (Catmull-Rom) interpolator derived from Nicolas Robidoux's * original YAFR resampler with permission and thanks. */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "templates.h" #define VIPS_TYPE_INTERPOLATE_BICUBIC \ (vips_interpolate_bicubic_get_type()) #define VIPS_INTERPOLATE_BICUBIC(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_INTERPOLATE_BICUBIC, VipsInterpolateBicubic)) #define VIPS_INTERPOLATE_BICUBIC_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_INTERPOLATE_BICUBIC, VipsInterpolateBicubicClass)) #define VIPS_IS_INTERPOLATE_BICUBIC(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_INTERPOLATE_BICUBIC)) #define VIPS_IS_INTERPOLATE_BICUBIC_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_INTERPOLATE_BICUBIC)) #define VIPS_INTERPOLATE_BICUBIC_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_INTERPOLATE_BICUBIC, VipsInterpolateBicubicClass)) typedef VipsInterpolate VipsInterpolateBicubic; typedef VipsInterpolateClass VipsInterpolateBicubicClass; /* Precalculated interpolation matrices. int (used for pel * sizes up to short), and double (for all others). We go to * scale + 1 so we can round-to-nearest safely. */ /* We could keep a large set of 2d 4x4 matrices, but this actually * works out slower since for many resizes the thing will no longer * fit in L1. */ static int vips_bicubic_matrixi[VIPS_TRANSFORM_SCALE + 1][4]; static double vips_bicubic_matrixf[VIPS_TRANSFORM_SCALE + 1][4]; /* We need C linkage for this. */ extern "C" { G_DEFINE_TYPE(VipsInterpolateBicubic, vips_interpolate_bicubic, VIPS_TYPE_INTERPOLATE); } /* Pointers to write to / read from, number of bands, * how many bytes to add to move down a line. */ /* T is the type of pixels we are reading and writing. */ /* Fixed-point version, for 8 and 16-bit types. */ template static void inline bicubic_unsigned_int_tab(void *pout, const VipsPel *pin, const int bands, const int lskip, const int *cx, const int *cy) { T *restrict out = (T *) pout; const T *restrict in = (T *) pin; const int b1 = bands; const int b2 = b1 + b1; const int b3 = b1 + b2; const int l1 = lskip / sizeof(T); const int l2 = l1 + l1; const int l3 = l1 + l2; const int l1_plus_b1 = l1 + b1; const int l1_plus_b2 = l1 + b2; const int l1_plus_b3 = l1 + b3; const int l2_plus_b1 = l2 + b1; const int l2_plus_b2 = l2 + b2; const int l2_plus_b3 = l2 + b3; const int l3_plus_b1 = l3 + b1; const int l3_plus_b2 = l3 + b2; const int l3_plus_b3 = l3 + b3; for (int z = 0; z < bands; z++) { const T uno_one = in[0]; const T uno_two = in[b1]; const T uno_thr = in[b2]; const T uno_fou = in[b3]; const T dos_one = in[l1]; const T dos_two = in[l1_plus_b1]; const T dos_thr = in[l1_plus_b2]; const T dos_fou = in[l1_plus_b3]; const T tre_one = in[l2]; const T tre_two = in[l2_plus_b1]; const T tre_thr = in[l2_plus_b2]; const T tre_fou = in[l2_plus_b3]; const T qua_one = in[l3]; const T qua_two = in[l3_plus_b1]; const T qua_thr = in[l3_plus_b2]; const T qua_fou = in[l3_plus_b3]; int bicubic = bicubic_unsigned_int( uno_one, uno_two, uno_thr, uno_fou, dos_one, dos_two, dos_thr, dos_fou, tre_one, tre_two, tre_thr, tre_fou, qua_one, qua_two, qua_thr, qua_fou, cx, cy); bicubic = VIPS_CLIP(0, bicubic, max_value); out[z] = bicubic; in += 1; } } template static void inline bicubic_signed_int_tab(void *pout, const VipsPel *pin, const int bands, const int lskip, const int *cx, const int *cy) { T *restrict out = (T *) pout; const T *restrict in = (T *) pin; const int b1 = bands; const int b2 = b1 + b1; const int b3 = b1 + b2; const int l1 = lskip / sizeof(T); const int l2 = l1 + l1; const int l3 = l1 + l2; const int l1_plus_b1 = l1 + b1; const int l1_plus_b2 = l1 + b2; const int l1_plus_b3 = l1 + b3; const int l2_plus_b1 = l2 + b1; const int l2_plus_b2 = l2 + b2; const int l2_plus_b3 = l2 + b3; const int l3_plus_b1 = l3 + b1; const int l3_plus_b2 = l3 + b2; const int l3_plus_b3 = l3 + b3; for (int z = 0; z < bands; z++) { const T uno_one = in[0]; const T uno_two = in[b1]; const T uno_thr = in[b2]; const T uno_fou = in[b3]; const T dos_one = in[l1]; const T dos_two = in[l1_plus_b1]; const T dos_thr = in[l1_plus_b2]; const T dos_fou = in[l1_plus_b3]; const T tre_one = in[l2]; const T tre_two = in[l2_plus_b1]; const T tre_thr = in[l2_plus_b2]; const T tre_fou = in[l2_plus_b3]; const T qua_one = in[l3]; const T qua_two = in[l3_plus_b1]; const T qua_thr = in[l3_plus_b2]; const T qua_fou = in[l3_plus_b3]; int bicubic = bicubic_signed_int( uno_one, uno_two, uno_thr, uno_fou, dos_one, dos_two, dos_thr, dos_fou, tre_one, tre_two, tre_thr, tre_fou, qua_one, qua_two, qua_thr, qua_fou, cx, cy); bicubic = VIPS_CLIP(min_value, bicubic, max_value); out[z] = bicubic; in += 1; } } /* Floating-point version. */ template static void inline bicubic_float_tab(void *pout, const VipsPel *pin, const int bands, const int lskip, const double *cx, const double *cy) { T *restrict out = (T *) pout; const T *restrict in = (T *) pin; const int b1 = bands; const int b2 = b1 + b1; const int b3 = b1 + b2; const int l1 = lskip / sizeof(T); const int l2 = l1 + l1; const int l3 = l1 + l2; const int l1_plus_b1 = l1 + b1; const int l1_plus_b2 = l1 + b2; const int l1_plus_b3 = l1 + b3; const int l2_plus_b1 = l2 + b1; const int l2_plus_b2 = l2 + b2; const int l2_plus_b3 = l2 + b3; const int l3_plus_b1 = l3 + b1; const int l3_plus_b2 = l3 + b2; const int l3_plus_b3 = l3 + b3; for (int z = 0; z < bands; z++) { const T uno_one = in[0]; const T uno_two = in[b1]; const T uno_thr = in[b2]; const T uno_fou = in[b3]; const T dos_one = in[l1]; const T dos_two = in[l1_plus_b1]; const T dos_thr = in[l1_plus_b2]; const T dos_fou = in[l1_plus_b3]; const T tre_one = in[l2]; const T tre_two = in[l2_plus_b1]; const T tre_thr = in[l2_plus_b2]; const T tre_fou = in[l2_plus_b3]; const T qua_one = in[l3]; const T qua_two = in[l3_plus_b1]; const T qua_thr = in[l3_plus_b2]; const T qua_fou = in[l3_plus_b3]; const T bicubic = bicubic_float( uno_one, uno_two, uno_thr, uno_fou, dos_one, dos_two, dos_thr, dos_fou, tre_one, tre_two, tre_thr, tre_fou, qua_one, qua_two, qua_thr, qua_fou, cx, cy); out[z] = bicubic; in += 1; } } /* uint32 version needs a double intermediate. */ template static void inline bicubic_unsigned_int32_tab(void *pout, const VipsPel *pin, const int bands, const int lskip, const double *cx, const double *cy) { T *restrict out = (T *) pout; const T *restrict in = (T *) pin; const int b1 = bands; const int b2 = b1 + b1; const int b3 = b1 + b2; const int l1 = lskip / sizeof(T); const int l2 = l1 + l1; const int l3 = l1 + l2; const int l1_plus_b1 = l1 + b1; const int l1_plus_b2 = l1 + b2; const int l1_plus_b3 = l1 + b3; const int l2_plus_b1 = l2 + b1; const int l2_plus_b2 = l2 + b2; const int l2_plus_b3 = l2 + b3; const int l3_plus_b1 = l3 + b1; const int l3_plus_b2 = l3 + b2; const int l3_plus_b3 = l3 + b3; for (int z = 0; z < bands; z++) { const T uno_one = in[0]; const T uno_two = in[b1]; const T uno_thr = in[b2]; const T uno_fou = in[b3]; const T dos_one = in[l1]; const T dos_two = in[l1_plus_b1]; const T dos_thr = in[l1_plus_b2]; const T dos_fou = in[l1_plus_b3]; const T tre_one = in[l2]; const T tre_two = in[l2_plus_b1]; const T tre_thr = in[l2_plus_b2]; const T tre_fou = in[l2_plus_b3]; const T qua_one = in[l3]; const T qua_two = in[l3_plus_b1]; const T qua_thr = in[l3_plus_b2]; const T qua_fou = in[l3_plus_b3]; double bicubic = bicubic_float( uno_one, uno_two, uno_thr, uno_fou, dos_one, dos_two, dos_thr, dos_fou, tre_one, tre_two, tre_thr, tre_fou, qua_one, qua_two, qua_thr, qua_fou, cx, cy); bicubic = VIPS_CLIP(0, bicubic, max_value); out[z] = bicubic; in += 1; } } template static void inline bicubic_signed_int32_tab(void *pout, const VipsPel *pin, const int bands, const int lskip, const double *cx, const double *cy) { T *restrict out = (T *) pout; const T *restrict in = (T *) pin; const int b1 = bands; const int b2 = b1 + b1; const int b3 = b1 + b2; const int l1 = lskip / sizeof(T); const int l2 = l1 + l1; const int l3 = l1 + l2; const int l1_plus_b1 = l1 + b1; const int l1_plus_b2 = l1 + b2; const int l1_plus_b3 = l1 + b3; const int l2_plus_b1 = l2 + b1; const int l2_plus_b2 = l2 + b2; const int l2_plus_b3 = l2 + b3; const int l3_plus_b1 = l3 + b1; const int l3_plus_b2 = l3 + b2; const int l3_plus_b3 = l3 + b3; for (int z = 0; z < bands; z++) { const T uno_one = in[0]; const T uno_two = in[b1]; const T uno_thr = in[b2]; const T uno_fou = in[b3]; const T dos_one = in[l1]; const T dos_two = in[l1_plus_b1]; const T dos_thr = in[l1_plus_b2]; const T dos_fou = in[l1_plus_b3]; const T tre_one = in[l2]; const T tre_two = in[l2_plus_b1]; const T tre_thr = in[l2_plus_b2]; const T tre_fou = in[l2_plus_b3]; const T qua_one = in[l3]; const T qua_two = in[l3_plus_b1]; const T qua_thr = in[l3_plus_b2]; const T qua_fou = in[l3_plus_b3]; double bicubic = bicubic_float( uno_one, uno_two, uno_thr, uno_fou, dos_one, dos_two, dos_thr, dos_fou, tre_one, tre_two, tre_thr, tre_fou, qua_one, qua_two, qua_thr, qua_fou, cx, cy); bicubic = VIPS_CLIP(min_value, bicubic, max_value); out[z] = bicubic; in += 1; } } /* Ultra-high-quality version for double images. */ template static void inline bicubic_notab(void *pout, const VipsPel *pin, const int bands, const int lskip, double x, double y) { T *restrict out = (T *) pout; const T *restrict in = (T *) pin; const int b1 = bands; const int b2 = b1 + b1; const int b3 = b1 + b2; const int l1 = lskip / sizeof(T); const int l2 = l1 + l1; const int l3 = l1 + l2; const int l1_plus_b1 = l1 + b1; const int l1_plus_b2 = l1 + b2; const int l1_plus_b3 = l1 + b3; const int l2_plus_b1 = l2 + b1; const int l2_plus_b2 = l2 + b2; const int l2_plus_b3 = l2 + b3; const int l3_plus_b1 = l3 + b1; const int l3_plus_b2 = l3 + b2; const int l3_plus_b3 = l3 + b3; double cx[4]; double cy[4]; calculate_coefficients_catmull(cx, x); calculate_coefficients_catmull(cy, y); for (int z = 0; z < bands; z++) { const T uno_one = in[0]; const T uno_two = in[b1]; const T uno_thr = in[b2]; const T uno_fou = in[b3]; const T dos_one = in[l1]; const T dos_two = in[l1_plus_b1]; const T dos_thr = in[l1_plus_b2]; const T dos_fou = in[l1_plus_b3]; const T tre_one = in[l2]; const T tre_two = in[l2_plus_b1]; const T tre_thr = in[l2_plus_b2]; const T tre_fou = in[l2_plus_b3]; const T qua_one = in[l3]; const T qua_two = in[l3_plus_b1]; const T qua_thr = in[l3_plus_b2]; const T qua_fou = in[l3_plus_b3]; const T bicubic = bicubic_float( uno_one, uno_two, uno_thr, uno_fou, dos_one, dos_two, dos_thr, dos_fou, tre_one, tre_two, tre_thr, tre_fou, qua_one, qua_two, qua_thr, qua_fou, cx, cy); out[z] = bicubic; in += 1; } } static void vips_interpolate_bicubic_interpolate(VipsInterpolate *interpolate, void *out, VipsRegion *in, double x, double y) { /* Find the mask index. We round-to-nearest, so we need to generate * indexes in 0 to VIPS_TRANSFORM_SCALE, 2^n + 1 values. We multiply * by 2 more than we need to, add one, mask, then shift down again to * get the extra range. */ const int sx = x * VIPS_TRANSFORM_SCALE * 2; const int sy = y * VIPS_TRANSFORM_SCALE * 2; const int six = sx & (VIPS_TRANSFORM_SCALE * 2 - 1); const int siy = sy & (VIPS_TRANSFORM_SCALE * 2 - 1); const int tx = (six + 1) >> 1; const int ty = (siy + 1) >> 1; /* We know x/y are always positive, so we can just (int) them. */ const int ix = (int) x; const int iy = (int) y; /* Back and up one to get the top-left of the 4x4. */ const VipsPel *p = VIPS_REGION_ADDR(in, ix - 1, iy - 1); /* Look up the tables we need. */ const int *cxi = vips_bicubic_matrixi[tx]; const int *cyi = vips_bicubic_matrixi[ty]; const double *cxf = vips_bicubic_matrixf[tx]; const double *cyf = vips_bicubic_matrixf[ty]; /* Pel size and line size. */ const int bands = in->im->Bands; const int lskip = VIPS_REGION_LSKIP(in); /* Confirm that absolute_x and absolute_y are >= 1, because of * window_offset. */ g_assert(x >= 1.0); g_assert(y >= 1.0); g_assert(ix - 1 >= in->valid.left); g_assert(iy - 1 >= in->valid.top); g_assert(ix + 2 < VIPS_RECT_RIGHT(&in->valid)); g_assert(iy + 2 < VIPS_RECT_BOTTOM(&in->valid)); #ifdef DEBUG printf("vips_interpolate_bicubic_interpolate: %g %g\n", x, y); printf("\tleft=%d, top=%d, width=%d, height=%d\n", ix - 1, iy - 1, 4, 4); printf("\tmaskx=%d, masky=%d\n", tx, ty); #endif /*DEBUG*/ switch (in->im->BandFmt) { case VIPS_FORMAT_UCHAR: bicubic_unsigned_int_tab( out, p, bands, lskip, cxi, cyi); /* Handy for benchmarking bicubic_float_tab( out, p, bands, lskip, cxf, cyf ); bicubic_notab( out, p, bands, lskip, x - ix, y - iy ); */ break; case VIPS_FORMAT_CHAR: bicubic_signed_int_tab( out, p, bands, lskip, cxi, cyi); break; case VIPS_FORMAT_USHORT: bicubic_unsigned_int32_tab( out, p, bands, lskip, cxf, cyf); break; case VIPS_FORMAT_SHORT: bicubic_signed_int32_tab( out, p, bands, lskip, cxf, cyf); break; case VIPS_FORMAT_UINT: bicubic_unsigned_int32_tab( out, p, bands, lskip, cxf, cyf); break; case VIPS_FORMAT_INT: bicubic_signed_int32_tab( out, p, bands, lskip, cxf, cyf); break; case VIPS_FORMAT_FLOAT: bicubic_float_tab(out, p, bands, lskip, cxf, cyf); break; case VIPS_FORMAT_DOUBLE: bicubic_notab(out, p, bands, lskip, x - ix, y - iy); break; case VIPS_FORMAT_COMPLEX: bicubic_float_tab(out, p, bands * 2, lskip, cxf, cyf); break; case VIPS_FORMAT_DPCOMPLEX: bicubic_notab(out, p, bands * 2, lskip, x - ix, y - iy); break; default: break; } } static void vips_interpolate_bicubic_class_init(VipsInterpolateBicubicClass *iclass) { VipsObjectClass *object_class = VIPS_OBJECT_CLASS(iclass); VipsInterpolateClass *interpolate_class = VIPS_INTERPOLATE_CLASS(iclass); object_class->nickname = "bicubic"; object_class->description = _("bicubic interpolation (Catmull-Rom)"); interpolate_class->interpolate = vips_interpolate_bicubic_interpolate; interpolate_class->window_size = 4; /* Build the tables of pre-computed coefficients. */ for (int x = 0; x < VIPS_TRANSFORM_SCALE + 1; x++) { calculate_coefficients_catmull(vips_bicubic_matrixf[x], (float) x / VIPS_TRANSFORM_SCALE); for (int i = 0; i < 4; i++) vips_bicubic_matrixi[x][i] = vips_bicubic_matrixf[x][i] * VIPS_INTERPOLATE_SCALE; } } static void vips_interpolate_bicubic_init(VipsInterpolateBicubic *bicubic) { #ifdef DEBUG printf("vips_interpolate_bicubic_init: "); vips_object_print_dump(VIPS_OBJECT(bicubic)); #endif /*DEBUG*/ } libvips-8.15.1/libvips/resample/interpolate.c000066400000000000000000000426471454007373500212550ustar00rootroot00000000000000/* vipsinterpolate ... abstract base class for various interpolators * * J. Cupitt, 15/10/08 * * 12/8/10 * - revise window_size / window_offset stuff again: window_offset now * defaults to (window_size / 2 - 1), so for a 4x4 stencil (eg. * bicubic) we have an offset of 1 * - tiny speedups * 7/1/11 * - don't use tables for bilinear on float data for a small speedup * (thanks Nicolas Robidoux) * 12/1/11 * - faster, more accuarate uchar bilinear (thanks Nicolas) * 2/2/11 * - gtk-doc * 16/12/15 * - faster bilinear * 27/2/19 s-sajid-ali * - more accurate bilinear */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include /** * SECTION: interpolator * @short_description: various interpolators: nearest, bilinear, and * some non-linear * @stability: Stable * @include: vips/vips.h * * A number of image interpolators. */ G_DEFINE_ABSTRACT_TYPE(VipsInterpolate, vips_interpolate, VIPS_TYPE_OBJECT); /** * VipsInterpolateMethod: * @interpolate: the interpolator * @out: write the interpolated pixel here * @in: read source pixels from here * @x: interpolate value at this position * @y: interpolate value at this position * * An interpolation function. It should read source pixels from @in with * VIPS_REGION_ADDR(), it can look left and up from (x, y) by @window_offset * pixels and it can access pixels in a window of size @window_size. * * The interpolated value should be written to the pixel pointed to by @out. * * See also: #VipsInterpolateClass. */ /** * VipsInterpolateClass: * @interpolate: the interpolation method * @get_window_size: return the size of the window needed by this method * @window_size: or just set this for a constant window size * @get_window_offset: return the window offset for this method * @window_offset: or just set this for a constant window offset * * The abstract base class for the various VIPS interpolation functions. * Use "vips --list classes" to see all the interpolators available. * * An interpolator consists of a function to perform the interpolation, plus * some extra data fields which tell vips how to call the function and what * data it needs. * * @window_size is the size of the window that the interpolator needs. For * example, a bicubic interpolator needs to see a window of 4x4 pixels to be * able to interpolate a value. * * You can either have a function in @get_window_size which returns the window * that a specific interpolator needs, or you can leave @get_window_size %NULL * and set a constant value in @window_size. * * @window_offset is how much to offset the window up and left of (x, y). For * example, a bicubic interpolator will want a @window_offset of 1. * * You can either have a function in @get_window_offset which returns the * offset that a specific interpolator needs, or you can leave * @get_window_offset %NULL and set a constant value in @window_offset. * * You also need to set @nickname and @description in #VipsObject. * * See also: #VipsInterpolateMethod, #VipsObject, * vips_interpolate_bilinear_static(). */ #ifdef DEBUG static void vips_interpolate_finalize(GObject *gobject) { printf("vips_interpolate_finalize: "); vips_object_print_name(VIPS_OBJECT(gobject)); G_OBJECT_CLASS(vips_interpolate_parent_class)->finalize(gobject); } #endif /*DEBUG*/ static int vips_interpolate_real_get_window_size(VipsInterpolate *interpolate) { VipsInterpolateClass *class = VIPS_INTERPOLATE_GET_CLASS(interpolate); g_assert(class->window_size != -1); return class->window_size; } static int vips_interpolate_real_get_window_offset(VipsInterpolate *interpolate) { VipsInterpolateClass *class = VIPS_INTERPOLATE_GET_CLASS(interpolate); /* Default to half window size - 1. For example, bicubic is a 4x4 * stencil and needs an offset of 1. */ if (class->window_offset != -1) return class->window_offset; else { int window_size = vips_interpolate_get_window_size(interpolate); /* Don't go -ve, of course, for window_size 1. */ return VIPS_MAX(0, window_size / 2 - 1); } } static void vips_interpolate_class_init(VipsInterpolateClass *class) { VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); #ifdef DEBUG GObjectClass *gobject_class = G_OBJECT_CLASS(class); #endif /*DEBUG*/ #ifdef DEBUG gobject_class->finalize = vips_interpolate_finalize; #endif /*DEBUG*/ vobject_class->nickname = "interpolate"; vobject_class->description = _("VIPS interpolators"); class->interpolate = NULL; class->get_window_size = vips_interpolate_real_get_window_size; class->get_window_offset = vips_interpolate_real_get_window_offset; class->window_size = -1; class->window_offset = -1; } static void vips_interpolate_init(VipsInterpolate *interpolate) { #ifdef DEBUG printf("vips_interpolate_init: "); vips_object_print_name(VIPS_OBJECT(interpolate)); #endif /*DEBUG*/ } /** * vips_interpolate: (skip) * @interpolate: interpolator to use * @out: write result here * @in: read source data from here * @x: interpolate value at this position * @y: interpolate value at this position * * Look up the @interpolate method in the class and call it. Use * vips_interpolate_get_method() to get a direct pointer to the function and * avoid the lookup overhead. * * You need to set @in and @out up correctly. */ void vips_interpolate(VipsInterpolate *interpolate, void *out, VipsRegion *in, double x, double y) { VipsInterpolateClass *class = VIPS_INTERPOLATE_GET_CLASS(interpolate); g_assert(class->interpolate); class->interpolate(interpolate, out, in, x, y); } /** * vips_interpolate_get_method: (skip) * @interpolate: interpolator to use * * Look up the @interpolate method in the class and return it. Use this * instead of vips_interpolate() to cache method dispatch. * * Returns: a pointer to the interpolation function */ VipsInterpolateMethod vips_interpolate_get_method(VipsInterpolate *interpolate) { VipsInterpolateClass *class = VIPS_INTERPOLATE_GET_CLASS(interpolate); g_assert(class->interpolate); return class->interpolate; } /** * vips_interpolate_get_window_size: * @interpolate: interpolator to use * * Look up an interpolators desired window size. * * Returns: the interpolators required window size */ int vips_interpolate_get_window_size(VipsInterpolate *interpolate) { VipsInterpolateClass *class = VIPS_INTERPOLATE_GET_CLASS(interpolate); g_assert(class->get_window_size); return class->get_window_size(interpolate); } /** * vips_interpolate_get_window_offset: * @interpolate: interpolator to use * * Look up an interpolators desired window offset. * * Returns: the interpolators required window offset */ int vips_interpolate_get_window_offset(VipsInterpolate *interpolate) { VipsInterpolateClass *class = VIPS_INTERPOLATE_GET_CLASS(interpolate); g_assert(class->get_window_offset); return class->get_window_offset(interpolate); } /** * VIPS_TRANSFORM_SHIFT: * * Many of the vips interpolators use fixed-point arithmetic for coordinate * calculation. This is how many bits of precision they use. */ /** * VIPS_TRANSFORM_SCALE: * * #VIPS_TRANSFORM_SHIFT as a multiplicative constant. */ /** * VIPS_INTERPOLATE_SHIFT: * * Many of the vips interpolators use fixed-point arithmetic for value * calculation. This is how many bits of precision they use. */ /** * VIPS_INTERPOLATE_SCALE: * * #VIPS_INTERPOLATE_SHIFT as a multiplicative constant. */ /* VipsInterpolateNearest class */ #define VIPS_TYPE_INTERPOLATE_NEAREST (vips_interpolate_nearest_get_type()) #define VIPS_INTERPOLATE_NEAREST(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_INTERPOLATE_NEAREST, VipsInterpolateNearest)) #define VIPS_INTERPOLATE_NEAREST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_INTERPOLATE_NEAREST, VipsInterpolateNearestClass)) #define VIPS_IS_INTERPOLATE_NEAREST(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_INTERPOLATE_NEAREST)) #define VIPS_IS_INTERPOLATE_NEAREST_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_INTERPOLATE_NEAREST)) #define VIPS_INTERPOLATE_NEAREST_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_INTERPOLATE_NEAREST, VipsInterpolateNearestClass)) /* No new members. */ typedef VipsInterpolate VipsInterpolateNearest; typedef VipsInterpolateClass VipsInterpolateNearestClass; G_DEFINE_TYPE(VipsInterpolateNearest, vips_interpolate_nearest, VIPS_TYPE_INTERPOLATE); static void vips_interpolate_nearest_interpolate(VipsInterpolate *interpolate, void *out, VipsRegion *in, double x, double y) { const int ps = VIPS_IMAGE_SIZEOF_PEL(in->im); const int xi = (int) x; const int yi = (int) y; const VipsPel *restrict p = VIPS_REGION_ADDR(in, xi, yi); VipsPel *restrict q = (VipsPel *) out; int z; for (z = 0; z < ps; z++) q[z] = p[z]; } static void vips_interpolate_nearest_class_init(VipsInterpolateNearestClass *class) { VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class); VipsInterpolateClass *interpolate_class = VIPS_INTERPOLATE_CLASS(class); object_class->nickname = "nearest"; object_class->description = _("nearest-neighbour interpolation"); interpolate_class->interpolate = vips_interpolate_nearest_interpolate; interpolate_class->window_size = 1; } static void vips_interpolate_nearest_init(VipsInterpolateNearest *nearest) { #ifdef DEBUG printf("vips_interpolate_nearest_init: "); vips_object_print_name(VIPS_OBJECT(nearest)); #endif /*DEBUG*/ } static VipsInterpolate * vips_interpolate_nearest_new(void) { return VIPS_INTERPOLATE(vips_object_new( VIPS_TYPE_INTERPOLATE_NEAREST, NULL, NULL, NULL)); } /** * vips_interpolate_nearest_static: * * A convenience function that returns a nearest-neighbour interpolator you * don't need to free. * * Returns: (transfer none): a nearest-neighbour interpolator */ VipsInterpolate * vips_interpolate_nearest_static(void) { static VipsInterpolate *interpolate = NULL; if (!interpolate) { interpolate = vips_interpolate_nearest_new(); vips_object_set_static(VIPS_OBJECT(interpolate), TRUE); } return interpolate; } /* VipsInterpolateBilinear class */ #define VIPS_TYPE_INTERPOLATE_BILINEAR (vips_interpolate_bilinear_get_type()) #define VIPS_INTERPOLATE_BILINEAR(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_INTERPOLATE_BILINEAR, VipsInterpolateBilinear)) #define VIPS_INTERPOLATE_BILINEAR_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_INTERPOLATE_BILINEAR, VipsInterpolateBilinearClass)) #define VIPS_IS_INTERPOLATE_BILINEAR(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_INTERPOLATE_BILINEAR)) #define VIPS_IS_INTERPOLATE_BILINEAR_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_INTERPOLATE_BILINEAR)) #define VIPS_INTERPOLATE_BILINEAR_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_INTERPOLATE_BILINEAR, VipsInterpolateBilinearClass)) typedef VipsInterpolate VipsInterpolateBilinear; typedef VipsInterpolateClass VipsInterpolateBilinearClass; G_DEFINE_TYPE(VipsInterpolateBilinear, vips_interpolate_bilinear, VIPS_TYPE_INTERPOLATE); /* in this class, name vars in the 2x2 grid as eg. * p1 p2 * p3 p4 */ #define BILINEAR_INT_INNER \ { \ tq[z] = (c1 * tp1[z] + c2 * tp2[z] + \ c3 * tp3[z] + c4 * tp4[z] + \ (1 << VIPS_INTERPOLATE_SHIFT) / 2) >> \ VIPS_INTERPOLATE_SHIFT; \ z += 1; \ } /* Fixed-point arithmetic, no tables. */ #define BILINEAR_INT(TYPE) \ { \ TYPE *restrict tq = (TYPE *) out; \ \ int X = (x - ix) * VIPS_INTERPOLATE_SCALE; \ int Y = (y - iy) * VIPS_INTERPOLATE_SCALE; \ \ int Yd = VIPS_INTERPOLATE_SCALE - Y; \ \ int c4 = (Y * X) >> VIPS_INTERPOLATE_SHIFT; \ int c2 = (Yd * X) >> VIPS_INTERPOLATE_SHIFT; \ int c3 = Y - c4; \ int c1 = Yd - c2; \ \ const TYPE *restrict tp1 = (TYPE *) p1; \ const TYPE *restrict tp2 = (TYPE *) p2; \ const TYPE *restrict tp3 = (TYPE *) p3; \ const TYPE *restrict tp4 = (TYPE *) p4; \ \ z = 0; \ VIPS_UNROLL(b, BILINEAR_INT_INNER); \ } #define BILINEAR_FLOAT_INNER \ { \ tq[z] = c1 * tp1[z] + c2 * tp2[z] + \ c3 * tp3[z] + c4 * tp4[z]; \ z += 1; \ } /* Interpolate a pel ... int16, int32 and float types, no tables, float * arithmetic. Use double not float for coefficient calculation or we can * get small over/undershoots. */ #define BILINEAR_FLOAT(TYPE) \ { \ TYPE *restrict tq = (TYPE *) out; \ \ double X = x - ix; \ double Y = y - iy; \ \ double Yd = 1.0f - Y; \ \ double c4 = Y * X; \ double c2 = Yd * X; \ double c3 = Y - c4; \ double c1 = Yd - c2; \ \ const TYPE *restrict tp1 = (TYPE *) p1; \ const TYPE *restrict tp2 = (TYPE *) p2; \ const TYPE *restrict tp3 = (TYPE *) p3; \ const TYPE *restrict tp4 = (TYPE *) p4; \ \ z = 0; \ VIPS_UNROLL(b, BILINEAR_FLOAT_INNER); \ } /* The fixed-point path is fine for uchar pixels, but it'll be inaccurate for * shorts and larger. */ #define SWITCH_INTERPOLATE(FMT, INT, FLOAT) \ { \ switch ((FMT)) { \ case VIPS_FORMAT_UCHAR: \ INT(unsigned char); \ break; \ case VIPS_FORMAT_CHAR: \ INT(char); \ break; \ case VIPS_FORMAT_USHORT: \ INT(unsigned short); \ break; \ case VIPS_FORMAT_SHORT: \ INT(short); \ break; \ case VIPS_FORMAT_UINT: \ FLOAT(unsigned int); \ break; \ case VIPS_FORMAT_INT: \ FLOAT(int); \ break; \ case VIPS_FORMAT_FLOAT: \ FLOAT(float); \ break; \ case VIPS_FORMAT_DOUBLE: \ FLOAT(double); \ break; \ case VIPS_FORMAT_COMPLEX: \ FLOAT(float); \ break; \ case VIPS_FORMAT_DPCOMPLEX: \ FLOAT(double); \ break; \ default: \ g_assert(FALSE); \ } \ } static void vips_interpolate_bilinear_interpolate(VipsInterpolate *interpolate, void *out, VipsRegion *in, double x, double y) { /* Pel size and line size. */ const int ps = VIPS_IMAGE_SIZEOF_PEL(in->im); const int ls = VIPS_REGION_LSKIP(in); const int b = in->im->Bands * (vips_band_format_iscomplex(in->im->BandFmt) ? 2 : 1); const int ix = (int) x; const int iy = (int) y; const VipsPel *restrict p1 = VIPS_REGION_ADDR(in, ix, iy); const VipsPel *restrict p2 = p1 + ps; const VipsPel *restrict p3 = p1 + ls; const VipsPel *restrict p4 = p3 + ps; int z; g_assert((int) x >= in->valid.left); g_assert((int) y >= in->valid.top); g_assert((int) x + 1 < VIPS_RECT_RIGHT(&in->valid)); g_assert((int) y + 1 < VIPS_RECT_BOTTOM(&in->valid)); SWITCH_INTERPOLATE(in->im->BandFmt, BILINEAR_INT, BILINEAR_FLOAT); } static void vips_interpolate_bilinear_class_init(VipsInterpolateBilinearClass *class) { VipsObjectClass *object_class = VIPS_OBJECT_CLASS(class); VipsInterpolateClass *interpolate_class = (VipsInterpolateClass *) class; object_class->nickname = "bilinear"; object_class->description = _("bilinear interpolation"); interpolate_class->interpolate = vips_interpolate_bilinear_interpolate; interpolate_class->window_size = 2; } static void vips_interpolate_bilinear_init(VipsInterpolateBilinear *bilinear) { #ifdef DEBUG printf("vips_interpolate_bilinear_init: "); vips_object_print_name(VIPS_OBJECT(bilinear)); #endif /*DEBUG*/ } VipsInterpolate * vips_interpolate_bilinear_new(void) { return VIPS_INTERPOLATE(vips_object_new( VIPS_TYPE_INTERPOLATE_BILINEAR, NULL, NULL, NULL)); } /** * vips_interpolate_bilinear_static: * * A convenience function that returns a bilinear interpolator you * don't need to free. * * Returns: (transfer none): a bilinear interpolator */ VipsInterpolate * vips_interpolate_bilinear_static(void) { static VipsInterpolate *interpolate = NULL; if (!interpolate) { interpolate = vips_interpolate_bilinear_new(); vips_object_set_static(VIPS_OBJECT(interpolate), TRUE); } return interpolate; } /* Called on startup: register the base vips interpolators. */ void vips__interpolate_init(void) { extern GType vips_interpolate_bicubic_get_type(void); extern GType vips_interpolate_lbb_get_type(void); extern GType vips_interpolate_nohalo_get_type(void); extern GType vips_interpolate_vsqbs_get_type(void); vips_interpolate_nearest_get_type(); vips_interpolate_bilinear_get_type(); vips_interpolate_bicubic_get_type(); vips_interpolate_lbb_get_type(); vips_interpolate_nohalo_get_type(); vips_interpolate_vsqbs_get_type(); } /** * vips_interpolate_new: (constructor) * @nickname: nickname for interpolator * * Look up an interpolator from a nickname and make one. You need to free the * result with g_object_unref() when you're done with it. * * See also: vips_type_find(). * * Returns: an interpolator, or %NULL on error. */ VipsInterpolate * vips_interpolate_new(const char *nickname) { GType type; if (!(type = vips_type_find("VipsInterpolate", nickname))) { vips_error("VipsInterpolate", _("class \"%s\" not found"), nickname); return NULL; } return VIPS_INTERPOLATE(vips_object_new(type, NULL, NULL, NULL)); } libvips-8.15.1/libvips/resample/lbb.cpp000066400000000000000000000723451454007373500200240ustar00rootroot00000000000000/* lbb (locally bounded bicubic) resampler * * N. Robidoux, C. Racette and J. Cupitt, 23-28/03/2010 * * N. Robidoux, 16-19/05/2010 * * N. Robidoux, 22/11/2011 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* * 2010 (c) Nicolas Robidoux, Chantal Racette, John Cupitt. * * N. Robidoux thanks Adam Turcotte, Geert Jordaens, Ralf Meyer, * Øyvind Kolås, Minglun Gong, Eric Daoust and Sven Neumann for useful * comments and code. * * C. Racette's image resampling research and programming funded in * part by an NSERC (National Science and Engineering Research Council * of Canada) Alexander Graham Bell Canada Graduate Scholarship, by an * NSERC Discovery Grant awarded to Julien Dompierre (grant number * 20-61098) and by N. Robidoux's Laurentian University professional * allowance. */ /* * LBB has two versions: * * A "soft" version, which shows a little less staircasing and a * little more haloing, and which is a little more expensive to * compute. We recommend this as the default. * * A "sharp" version, which shows a little more staircasing and a * little less haloing, which is a little cheaper (it uses 6 less * comparisons and 12 less "? :"). * * The only difference between the two is that the "soft" versions * uses local minima and maxima computed over 3x3 square blocks, and * the "sharp" version uses local minima and maxima computed over 3x3 * crosses. * * If you want to use the "sharp" version, comment out the following * three pre-processor code lines: */ /* #ifndef __LBB_CHEAP_H__ #define __LBB_CHEAP_H__ #endif */ /* * LBB (Locally Bounded Bicubic) is a high quality nonlinear variant * of Catmull-Rom. Images resampled with LBB have much smaller halos * than images resampled with windowed sincs or other interpolatory * cubic spline filters. Specifically, LBB halos are narrower and the * over/undershoot amplitude is smaller. This is accomplished without * significantly affecting the smoothness of the result (compared to * Catmull-Rom). * * Another important property is that the resampled values are * contained within the range of nearby input values. Consequently, no * final clamping is needed to stay "in range" (e.g., 0-255 for * standard 8-bit images). * * LBB was developed by N. Robidoux and C. Racette at the Department * of Mathematics and Computer Science of Laurentian University in the * course of C. Racette's Masters thesis in Computational * Sciences. Preliminary work directly leading to the LBB method and * code was performed by C. Racette and N. Robidoux in the course of * her honours thesis, and by N. Robidoux, A. Turcotte and E. Daoust * during Google Summer of Code 2009 (through two awards made to GIMP * to improve GEGL). * * LBB is a novel method with the following properties: * * --LBB is a Hermite bicubic method: The bicubic surface is defined, * one convex hull of four nearby input points at a time, using four * point values, four x-derivatives, four y-derivatives, and four * cross-derivatives. * * --The stencil for values in a square patch is the usual 4x4. * * --LBB is interpolatory. * * --It is C^1 with continuous cross derivatives. * * --When the limiters are inactive, LBB gives the same result as * Catmull-Rom. * * --When used on binary images, LBB gives results similar to bicubic * Hermite with all first derivatives---but not necessarily the * cross derivatives (this last assertion needs to be double * checked)--at input pixel locations set to zero. * * --The LBB reconstruction is locally bounded: Over each square * patch, the surface is contained between the minimum and the * maximum of the 16 nearest input pixel values. * * --Consequently, the LBB reconstruction is globally bounded between * the very smallest input pixel value and the very largest input * pixel value. It is not necessary to clamp results. * * The LBB method is based on the method of Ken Brodlie, Petros * Mashwama and Sohail Butt for constraining Hermite interpolants * between globally defined planes: * * Visualization of surface data to preserve positivity and other * simple constraints. Computer & Graphics, Vol. 19, Number 4, pages * 585-594, 1995. DOI: 10.1016/0097-8493(95)00036-C. * * Instead of forcing the reconstructed surface to lie between two * GLOBALLY defined planes, LBB constrains one patch at a time to lie * between LOCALLY defined planes. This is accomplished by * constraining the derivatives (x, y and cross) at each input pixel * location so that if the constraint was applied everywhere the * surface would fit between the min and max of the values at the 9 * closest pixel locations. Because this is done with each of the four * pixel locations which define the bicubic patch, this forces the * reconstructed surface to lie between the min and max of the values * at the 16 closest values pixel locations. (Each corner defines its * own 3x3 subgroup of the 4x4 stencil. Consequently, the surface is * necessarily above the minimum of the four minima, which happens to * be the minimum over the 4x4. Similarly with the maxima.) * * The above paragraph described the "soft" version of LBB. The * "sharp" version is similar. */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "templates.h" #define VIPS_TYPE_INTERPOLATE_LBB \ (vips_interpolate_lbb_get_type()) #define VIPS_INTERPOLATE_LBB(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_INTERPOLATE_LBB, VipsInterpolateLbb)) #define VIPS_INTERPOLATE_LBB_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_INTERPOLATE_LBB, VipsInterpolateLbbClass)) #define VIPS_IS_INTERPOLATE_LBB(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_INTERPOLATE_LBB)) #define VIPS_IS_INTERPOLATE_LBB_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_INTERPOLATE_LBB)) #define VIPS_INTERPOLATE_LBB_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_INTERPOLATE_LBB, VipsInterpolateLbbClass)) typedef struct _VipsInterpolateLbb { VipsInterpolate parent_object; } VipsInterpolateLbb; typedef struct _VipsInterpolateLbbClass { VipsInterpolateClass parent_class; } VipsInterpolateLbbClass; /* * Absolute value and sign macros: */ #define LBB_ABS(x) (((x) >= 0.) ? (x) : -(x)) #define LBB_SIGN(x) (((x) >= 0.) ? 1.0 : -1.0) /* * MIN and MAX macros set up so that I can put the likely winner in * the first argument (forward branch likely blah blah blah): */ #define LBB_MIN(x, y) (((x) <= (y)) ? (x) : (y)) #define LBB_MAX(x, y) (((x) >= (y)) ? (x) : (y)) static inline double lbbicubic(const double c00, const double c10, const double c01, const double c11, const double c00dx, const double c10dx, const double c01dx, const double c11dx, const double c00dy, const double c10dy, const double c01dy, const double c11dy, const double c00dxdy, const double c10dxdy, const double c01dxdy, const double c11dxdy, const double uno_one, const double uno_two, const double uno_thr, const double uno_fou, const double dos_one, const double dos_two, const double dos_thr, const double dos_fou, const double tre_one, const double tre_two, const double tre_thr, const double tre_fou, const double qua_one, const double qua_two, const double qua_thr, const double qua_fou) { /* * STENCIL (FOOTPRINT) OF INPUT VALUES: * * The stencil of LBB is the same as for any standard Hermite * bicubic (e.g., Catmull-Rom): * * (ix-1,iy-1) (ix,iy-1) (ix+1,iy-1) (ix+2,iy-1) * = uno_one = uno_two = uno_thr = uno_fou * * (ix-1,iy) (ix,iy) (ix+1,iy) (ix+2,iy) * = dos_one = dos_two = dos_thr = dos_fou * X * (ix-1,iy+1) (ix,iy+1) (ix+1,iy+1) (ix+2,iy+1) * = tre_one = tre_two = tre_thr = tre_fou * * (ix-1,iy+2) (ix,iy+2) (ix+1,iy+2) (ix+2,iy+2) * = qua_one = qua_two = qua_thr = qua_fou * * where ix is the (pseudo-)floor of the requested left-to-right * location ("X"), and iy is the floor of the requested up-to-down * location. */ #if defined(__LBB_CHEAP_H__) /* * Computation of the four min and four max over 3x3 input data * sub-crosses of the 4x4 input stencil, performed with only 22 * comparisons and 28 "? :". If you can figure out how to do this * more efficiently, let us know. * * This is the cheaper (but arguably less desirable in terms of * quality) version of the computation. */ const double m1 = (dos_two <= dos_thr) ? dos_two : dos_thr; const double M1 = (dos_two <= dos_thr) ? dos_thr : dos_two; const double m2 = (tre_two <= tre_thr) ? tre_two : tre_thr; const double M2 = (tre_two <= tre_thr) ? tre_thr : tre_two; const double m3 = (uno_two <= dos_one) ? uno_two : dos_one; const double M3 = (uno_two <= dos_one) ? dos_one : uno_two; const double m4 = (uno_thr <= dos_fou) ? uno_thr : dos_fou; const double M4 = (uno_thr <= dos_fou) ? dos_fou : uno_thr; const double m5 = (tre_one <= qua_two) ? tre_one : qua_two; const double M5 = (tre_one <= qua_two) ? qua_two : tre_one; const double m6 = (tre_fou <= qua_thr) ? tre_fou : qua_thr; const double M6 = (tre_fou <= qua_thr) ? qua_thr : tre_fou; const double m7 = LBB_MIN(m1, tre_two); const double M7 = LBB_MAX(M1, tre_two); const double m8 = LBB_MIN(m1, tre_thr); const double M8 = LBB_MAX(M1, tre_thr); const double m9 = LBB_MIN(m2, dos_two); const double M9 = LBB_MAX(M2, dos_two); const double m10 = LBB_MIN(m2, dos_thr); const double M10 = LBB_MAX(M2, dos_thr); const double min00 = LBB_MIN(m7, m3); const double max00 = LBB_MAX(M7, M3); const double min10 = LBB_MIN(m8, m4); const double max10 = LBB_MAX(M8, M4); const double min01 = LBB_MIN(m9, m5); const double max01 = LBB_MAX(M9, M5); const double min11 = LBB_MIN(m10, m6); const double max11 = LBB_MAX(M10, M6); #else /* * Computation of the four min and four max over 3x3 input data * sub-blocks of the 4x4 input stencil, performed with only 28 * comparisons and 34 "? :". If you can figure how to do this more * efficiently, let us know. */ const double m1 = (dos_two <= dos_thr) ? dos_two : dos_thr; const double M1 = (dos_two <= dos_thr) ? dos_thr : dos_two; const double m2 = (tre_two <= tre_thr) ? tre_two : tre_thr; const double M2 = (tre_two <= tre_thr) ? tre_thr : tre_two; const double m6 = (dos_one <= tre_one) ? dos_one : tre_one; const double M6 = (dos_one <= tre_one) ? tre_one : dos_one; const double m7 = (dos_fou <= tre_fou) ? dos_fou : tre_fou; const double M7 = (dos_fou <= tre_fou) ? tre_fou : dos_fou; const double m3 = (uno_two <= uno_thr) ? uno_two : uno_thr; const double M3 = (uno_two <= uno_thr) ? uno_thr : uno_two; const double m4 = (qua_two <= qua_thr) ? qua_two : qua_thr; const double M4 = (qua_two <= qua_thr) ? qua_thr : qua_two; const double m5 = LBB_MIN(m1, m2); const double M5 = LBB_MAX(M1, M2); const double m10 = LBB_MIN(m6, uno_one); const double M10 = LBB_MAX(M6, uno_one); const double m11 = LBB_MIN(m6, qua_one); const double M11 = LBB_MAX(M6, qua_one); const double m12 = LBB_MIN(m7, uno_fou); const double M12 = LBB_MAX(M7, uno_fou); const double m13 = LBB_MIN(m7, qua_fou); const double M13 = LBB_MAX(M7, qua_fou); const double m8 = LBB_MIN(m5, m3); const double M8 = LBB_MAX(M5, M3); const double m9 = LBB_MIN(m5, m4); const double M9 = LBB_MAX(M5, M4); const double min00 = LBB_MIN(m8, m10); const double max00 = LBB_MAX(M8, M10); const double min10 = LBB_MIN(m8, m12); const double max10 = LBB_MAX(M8, M12); const double min01 = LBB_MIN(m9, m11); const double max01 = LBB_MAX(M9, M11); const double min11 = LBB_MIN(m9, m13); const double max11 = LBB_MAX(M9, M13); #endif /* * The remainder of the "per channel" computation involves the * computation of: * * --8 conditional moves, * * --8 signs (in which the sign of zero is unimportant), * * --12 minima of two values, * * --8 maxima of two values, * * --8 absolute values, * * for a grand total of 29 minima, 25 maxima, 8 conditional moves, 8 * signs, and 8 absolute values. If everything is done with * conditional moves, "only" 28+8+8+12+8+8=72 flags are involved * (because initial min and max can be computed with one flag). * * The "per channel" part of the computation also involves 107 * arithmetic operations (54 *, 21 +, 42 -). */ /* * Distances to the local min and max: */ const double u00 = dos_two - min00; const double v00 = max00 - dos_two; const double u10 = dos_thr - min10; const double v10 = max10 - dos_thr; const double u01 = tre_two - min01; const double v01 = max01 - tre_two; const double u11 = tre_thr - min11; const double v11 = max11 - tre_thr; /* * Initial values of the derivatives computed with centered * differences. Factors of 1/2 are left out because they are folded * in later: */ const double dble_dzdx00i = dos_thr - dos_one; const double dble_dzdy11i = qua_thr - dos_thr; const double dble_dzdx10i = dos_fou - dos_two; const double dble_dzdy01i = qua_two - dos_two; const double dble_dzdx01i = tre_thr - tre_one; const double dble_dzdy10i = tre_thr - uno_thr; const double dble_dzdx11i = tre_fou - tre_two; const double dble_dzdy00i = tre_two - uno_two; /* * Signs of the derivatives. The upcoming clamping does not change * them (except if the clamping sends a negative derivative to 0, in * which case the sign does not matter anyway). */ const double sign_dzdx00 = LBB_SIGN(dble_dzdx00i); const double sign_dzdx10 = LBB_SIGN(dble_dzdx10i); const double sign_dzdx01 = LBB_SIGN(dble_dzdx01i); const double sign_dzdx11 = LBB_SIGN(dble_dzdx11i); const double sign_dzdy00 = LBB_SIGN(dble_dzdy00i); const double sign_dzdy10 = LBB_SIGN(dble_dzdy10i); const double sign_dzdy01 = LBB_SIGN(dble_dzdy01i); const double sign_dzdy11 = LBB_SIGN(dble_dzdy11i); /* * Initial values of the cross-derivatives. Factors of 1/4 are left * out because folded in later: */ const double quad_d2zdxdy00i = uno_one - uno_thr + dble_dzdx01i; const double quad_d2zdxdy10i = uno_two - uno_fou + dble_dzdx11i; const double quad_d2zdxdy01i = qua_thr - qua_one - dble_dzdx00i; const double quad_d2zdxdy11i = qua_fou - qua_two - dble_dzdx10i; /* * Slope limiters. The key multiplier is 3 but we fold a factor of * 2, hence 6: */ const double dble_slopelimit_00 = 6.0 * LBB_MIN(u00, v00); const double dble_slopelimit_10 = 6.0 * LBB_MIN(u10, v10); const double dble_slopelimit_01 = 6.0 * LBB_MIN(u01, v01); const double dble_slopelimit_11 = 6.0 * LBB_MIN(u11, v11); /* * Clamped first derivatives: */ const double dble_dzdx00 = (sign_dzdx00 * dble_dzdx00i <= dble_slopelimit_00) ? dble_dzdx00i : sign_dzdx00 * dble_slopelimit_00; const double dble_dzdy00 = (sign_dzdy00 * dble_dzdy00i <= dble_slopelimit_00) ? dble_dzdy00i : sign_dzdy00 * dble_slopelimit_00; const double dble_dzdx10 = (sign_dzdx10 * dble_dzdx10i <= dble_slopelimit_10) ? dble_dzdx10i : sign_dzdx10 * dble_slopelimit_10; const double dble_dzdy10 = (sign_dzdy10 * dble_dzdy10i <= dble_slopelimit_10) ? dble_dzdy10i : sign_dzdy10 * dble_slopelimit_10; const double dble_dzdx01 = (sign_dzdx01 * dble_dzdx01i <= dble_slopelimit_01) ? dble_dzdx01i : sign_dzdx01 * dble_slopelimit_01; const double dble_dzdy01 = (sign_dzdy01 * dble_dzdy01i <= dble_slopelimit_01) ? dble_dzdy01i : sign_dzdy01 * dble_slopelimit_01; const double dble_dzdx11 = (sign_dzdx11 * dble_dzdx11i <= dble_slopelimit_11) ? dble_dzdx11i : sign_dzdx11 * dble_slopelimit_11; const double dble_dzdy11 = (sign_dzdy11 * dble_dzdy11i <= dble_slopelimit_11) ? dble_dzdy11i : sign_dzdy11 * dble_slopelimit_11; /* * Sums and differences of first derivatives: */ const double twelve_sum00 = 6.0 * (dble_dzdx00 + dble_dzdy00); const double twelve_dif00 = 6.0 * (dble_dzdx00 - dble_dzdy00); const double twelve_sum10 = 6.0 * (dble_dzdx10 + dble_dzdy10); const double twelve_dif10 = 6.0 * (dble_dzdx10 - dble_dzdy10); const double twelve_sum01 = 6.0 * (dble_dzdx01 + dble_dzdy01); const double twelve_dif01 = 6.0 * (dble_dzdx01 - dble_dzdy01); const double twelve_sum11 = 6.0 * (dble_dzdx11 + dble_dzdy11); const double twelve_dif11 = 6.0 * (dble_dzdx11 - dble_dzdy11); /* * Absolute values of the sums: */ const double twelve_abs_sum00 = LBB_ABS(twelve_sum00); const double twelve_abs_sum10 = LBB_ABS(twelve_sum10); const double twelve_abs_sum01 = LBB_ABS(twelve_sum01); const double twelve_abs_sum11 = LBB_ABS(twelve_sum11); /* * Scaled distances to the min: */ const double u00_times_36 = 36.0 * u00; const double u10_times_36 = 36.0 * u10; const double u01_times_36 = 36.0 * u01; const double u11_times_36 = 36.0 * u11; /* * First cross-derivative limiter: */ const double first_limit00 = twelve_abs_sum00 - u00_times_36; const double first_limit10 = twelve_abs_sum10 - u10_times_36; const double first_limit01 = twelve_abs_sum01 - u01_times_36; const double first_limit11 = twelve_abs_sum11 - u11_times_36; const double quad_d2zdxdy00ii = LBB_MAX(quad_d2zdxdy00i, first_limit00); const double quad_d2zdxdy10ii = LBB_MAX(quad_d2zdxdy10i, first_limit10); const double quad_d2zdxdy01ii = LBB_MAX(quad_d2zdxdy01i, first_limit01); const double quad_d2zdxdy11ii = LBB_MAX(quad_d2zdxdy11i, first_limit11); /* * Scaled distances to the max: */ const double v00_times_36 = 36.0 * v00; const double v10_times_36 = 36.0 * v10; const double v01_times_36 = 36.0 * v01; const double v11_times_36 = 36.0 * v11; /* * Second cross-derivative limiter: */ const double second_limit00 = v00_times_36 - twelve_abs_sum00; const double second_limit10 = v10_times_36 - twelve_abs_sum10; const double second_limit01 = v01_times_36 - twelve_abs_sum01; const double second_limit11 = v11_times_36 - twelve_abs_sum11; const double quad_d2zdxdy00iii = LBB_MIN(quad_d2zdxdy00ii, second_limit00); const double quad_d2zdxdy10iii = LBB_MIN(quad_d2zdxdy10ii, second_limit10); const double quad_d2zdxdy01iii = LBB_MIN(quad_d2zdxdy01ii, second_limit01); const double quad_d2zdxdy11iii = LBB_MIN(quad_d2zdxdy11ii, second_limit11); /* * Absolute values of the differences: */ const double twelve_abs_dif00 = LBB_ABS(twelve_dif00); const double twelve_abs_dif10 = LBB_ABS(twelve_dif10); const double twelve_abs_dif01 = LBB_ABS(twelve_dif01); const double twelve_abs_dif11 = LBB_ABS(twelve_dif11); /* * Third cross-derivative limiter: */ const double third_limit00 = twelve_abs_dif00 - v00_times_36; const double third_limit10 = twelve_abs_dif10 - v10_times_36; const double third_limit01 = twelve_abs_dif01 - v01_times_36; const double third_limit11 = twelve_abs_dif11 - v11_times_36; const double quad_d2zdxdy00iiii = LBB_MAX(quad_d2zdxdy00iii, third_limit00); const double quad_d2zdxdy10iiii = LBB_MAX(quad_d2zdxdy10iii, third_limit10); const double quad_d2zdxdy01iiii = LBB_MAX(quad_d2zdxdy01iii, third_limit01); const double quad_d2zdxdy11iiii = LBB_MAX(quad_d2zdxdy11iii, third_limit11); /* * Fourth cross-derivative limiter: */ const double fourth_limit00 = u00_times_36 - twelve_abs_dif00; const double fourth_limit10 = u10_times_36 - twelve_abs_dif10; const double fourth_limit01 = u01_times_36 - twelve_abs_dif01; const double fourth_limit11 = u11_times_36 - twelve_abs_dif11; const double quad_d2zdxdy00 = LBB_MIN(quad_d2zdxdy00iiii, fourth_limit00); const double quad_d2zdxdy10 = LBB_MIN(quad_d2zdxdy10iiii, fourth_limit10); const double quad_d2zdxdy01 = LBB_MIN(quad_d2zdxdy01iiii, fourth_limit01); const double quad_d2zdxdy11 = LBB_MIN(quad_d2zdxdy11iiii, fourth_limit11); /* * Part of the result which does not need derivatives: */ const double newval1 = c00 * dos_two + c10 * dos_thr + c01 * tre_two + c11 * tre_thr; /* * Twice the part of the result which only needs first derivatives. */ const double newval2 = c00dx * dble_dzdx00 + c10dx * dble_dzdx10 + c01dx * dble_dzdx01 + c11dx * dble_dzdx11 + c00dy * dble_dzdy00 + c10dy * dble_dzdy10 + c01dy * dble_dzdy01 + c11dy * dble_dzdy11; /* * Four times the part of the result which only uses cross * derivatives: */ const double newval3 = c00dxdy * quad_d2zdxdy00 + c10dxdy * quad_d2zdxdy10 + c01dxdy * quad_d2zdxdy01 + c11dxdy * quad_d2zdxdy11; const double newval = newval1 + .5 * newval2 + .25 * newval3; return newval; } /* * Call lbb with a type conversion operator as a parameter. * * It would be nice to do this with templates but we can't figure out * how to do it cleanly. Suggestions welcome! */ #define LBB_CONVERSION(conversion) \ template \ static void inline lbb_##conversion(void *restrict pout, \ const VipsPel *restrict pin, \ const int bands, \ const int lskip, \ const double relative_x, \ const double relative_y) \ { \ T *restrict out = (T *) pout; \ \ const T *restrict in = (T *) pin; \ \ const int one_shift = -bands; \ const int thr_shift = bands; \ const int fou_shift = 2 * bands; \ \ const int uno_two_shift = -lskip; \ \ const int tre_two_shift = lskip; \ const int qua_two_shift = 2 * lskip; \ \ const int uno_one_shift = uno_two_shift + one_shift; \ const int dos_one_shift = one_shift; \ const int tre_one_shift = tre_two_shift + one_shift; \ const int qua_one_shift = qua_two_shift + one_shift; \ \ const int uno_thr_shift = uno_two_shift + thr_shift; \ const int dos_thr_shift = thr_shift; \ const int tre_thr_shift = tre_two_shift + thr_shift; \ const int qua_thr_shift = qua_two_shift + thr_shift; \ \ const int uno_fou_shift = uno_two_shift + fou_shift; \ const int dos_fou_shift = fou_shift; \ const int tre_fou_shift = tre_two_shift + fou_shift; \ const int qua_fou_shift = qua_two_shift + fou_shift; \ \ const double xp1over2 = relative_x; \ const double xm1over2 = xp1over2 - 1.0; \ const double onepx = 0.5 + xp1over2; \ const double onemx = 1.5 - xp1over2; \ const double xp1over2sq = xp1over2 * xp1over2; \ \ const double yp1over2 = relative_y; \ const double ym1over2 = yp1over2 - 1.0; \ const double onepy = 0.5 + yp1over2; \ const double onemy = 1.5 - yp1over2; \ const double yp1over2sq = yp1over2 * yp1over2; \ \ const double xm1over2sq = xm1over2 * xm1over2; \ const double ym1over2sq = ym1over2 * ym1over2; \ \ const double twice1px = onepx + onepx; \ const double twice1py = onepy + onepy; \ const double twice1mx = onemx + onemx; \ const double twice1my = onemy + onemy; \ \ const double xm1over2sq_times_ym1over2sq = xm1over2sq * ym1over2sq; \ const double xp1over2sq_times_ym1over2sq = xp1over2sq * ym1over2sq; \ const double xp1over2sq_times_yp1over2sq = xp1over2sq * yp1over2sq; \ const double xm1over2sq_times_yp1over2sq = xm1over2sq * yp1over2sq; \ \ const double four_times_1px_times_1py = twice1px * twice1py; \ const double four_times_1mx_times_1py = twice1mx * twice1py; \ const double twice_xp1over2_times_1py = xp1over2 * twice1py; \ const double twice_xm1over2_times_1py = xm1over2 * twice1py; \ \ const double twice_xm1over2_times_1my = xm1over2 * twice1my; \ const double twice_xp1over2_times_1my = xp1over2 * twice1my; \ const double four_times_1mx_times_1my = twice1mx * twice1my; \ const double four_times_1px_times_1my = twice1px * twice1my; \ \ const double twice_1px_times_ym1over2 = twice1px * ym1over2; \ const double twice_1mx_times_ym1over2 = twice1mx * ym1over2; \ const double xp1over2_times_ym1over2 = xp1over2 * ym1over2; \ const double xm1over2_times_ym1over2 = xm1over2 * ym1over2; \ \ const double xm1over2_times_yp1over2 = xm1over2 * yp1over2; \ const double xp1over2_times_yp1over2 = xp1over2 * yp1over2; \ const double twice_1mx_times_yp1over2 = twice1mx * yp1over2; \ const double twice_1px_times_yp1over2 = twice1px * yp1over2; \ \ const double c00 = \ four_times_1px_times_1py * xm1over2sq_times_ym1over2sq; \ const double c00dx = \ twice_xp1over2_times_1py * xm1over2sq_times_ym1over2sq; \ const double c00dy = \ twice_1px_times_yp1over2 * xm1over2sq_times_ym1over2sq; \ const double c00dxdy = \ xp1over2_times_yp1over2 * xm1over2sq_times_ym1over2sq; \ \ const double c10 = \ four_times_1mx_times_1py * xp1over2sq_times_ym1over2sq; \ const double c10dx = \ twice_xm1over2_times_1py * xp1over2sq_times_ym1over2sq; \ const double c10dy = \ twice_1mx_times_yp1over2 * xp1over2sq_times_ym1over2sq; \ const double c10dxdy = \ xm1over2_times_yp1over2 * xp1over2sq_times_ym1over2sq; \ \ const double c01 = \ four_times_1px_times_1my * xm1over2sq_times_yp1over2sq; \ const double c01dx = \ twice_xp1over2_times_1my * xm1over2sq_times_yp1over2sq; \ const double c01dy = \ twice_1px_times_ym1over2 * xm1over2sq_times_yp1over2sq; \ const double c01dxdy = \ xp1over2_times_ym1over2 * xm1over2sq_times_yp1over2sq; \ \ const double c11 = \ four_times_1mx_times_1my * xp1over2sq_times_yp1over2sq; \ const double c11dx = \ twice_xm1over2_times_1my * xp1over2sq_times_yp1over2sq; \ const double c11dy = \ twice_1mx_times_ym1over2 * xp1over2sq_times_yp1over2sq; \ const double c11dxdy = \ xm1over2_times_ym1over2 * xp1over2sq_times_yp1over2sq; \ \ int band = bands; \ \ do { \ const double double_result = \ lbbicubic(c00, \ c10, \ c01, \ c11, \ c00dx, \ c10dx, \ c01dx, \ c11dx, \ c00dy, \ c10dy, \ c01dy, \ c11dy, \ c00dxdy, \ c10dxdy, \ c01dxdy, \ c11dxdy, \ in[uno_one_shift], \ in[uno_two_shift], \ in[uno_thr_shift], \ in[uno_fou_shift], \ in[dos_one_shift], \ in[0], \ in[dos_thr_shift], \ in[dos_fou_shift], \ in[tre_one_shift], \ in[tre_two_shift], \ in[tre_thr_shift], \ in[tre_fou_shift], \ in[qua_one_shift], \ in[qua_two_shift], \ in[qua_thr_shift], \ in[qua_fou_shift]); \ \ const T result = to_##conversion(double_result); \ in++; \ *out++ = result; \ } while (--band); \ } LBB_CONVERSION(fptypes) LBB_CONVERSION(withsign) LBB_CONVERSION(nosign) #define CALL(T, conversion) \ lbb_##conversion(out, \ p, \ bands, \ lskip, \ relative_x, \ relative_y); /* * We need C linkage: */ extern "C" { G_DEFINE_TYPE(VipsInterpolateLbb, vips_interpolate_lbb, VIPS_TYPE_INTERPOLATE); } static void vips_interpolate_lbb_interpolate(VipsInterpolate *restrict interpolate, void *restrict out, VipsRegion *restrict in, double absolute_x, double absolute_y) { /* absolute_x and absolute_y are always >= 1.0 (see double-check assert * below), so we don't need floor(). * * It's 1 not 0 since have a window_offset of 1. */ const int ix = (int) absolute_x; const int iy = (int) absolute_y; /* * Move the pointer to (the first band of) the top/left pixel of the * 2x2 group of pixel centers which contains the sampling location * in its convex hull: */ const VipsPel *restrict p = VIPS_REGION_ADDR(in, ix, iy); const double relative_x = absolute_x - ix; const double relative_y = absolute_y - iy; /* * VIPS versions of Nicolas's pixel addressing values. */ const int lskip = VIPS_REGION_LSKIP(in) / VIPS_IMAGE_SIZEOF_ELEMENT(in->im); /* * Double the bands for complex images to account for the real and * imaginary parts being computed independently: */ const int actual_bands = in->im->Bands; const int bands = vips_band_format_iscomplex(in->im->BandFmt) ? 2 * actual_bands : actual_bands; g_assert(ix - 1 >= in->valid.left); g_assert(iy - 1 >= in->valid.top); g_assert(ix + 2 < VIPS_RECT_RIGHT(&in->valid)); g_assert(iy + 2 < VIPS_RECT_BOTTOM(&in->valid)); /* Confirm that absolute_x and absolute_y are >= 1, see above. */ g_assert(absolute_x >= 1.0); g_assert(absolute_y >= 1.0); switch (in->im->BandFmt) { case VIPS_FORMAT_UCHAR: CALL(unsigned char, nosign); break; case VIPS_FORMAT_CHAR: CALL(signed char, withsign); break; case VIPS_FORMAT_USHORT: CALL(unsigned short, nosign); break; case VIPS_FORMAT_SHORT: CALL(signed short, withsign); break; case VIPS_FORMAT_UINT: CALL(unsigned int, nosign); break; case VIPS_FORMAT_INT: CALL(signed int, withsign); break; /* * Complex images are handled by doubling of bands. */ case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_COMPLEX: CALL(float, fptypes); break; case VIPS_FORMAT_DOUBLE: case VIPS_FORMAT_DPCOMPLEX: CALL(double, fptypes); break; default: g_assert(0); break; } } static void vips_interpolate_lbb_class_init(VipsInterpolateLbbClass *klass) { VipsObjectClass *object_class = VIPS_OBJECT_CLASS(klass); VipsInterpolateClass *interpolate_class = VIPS_INTERPOLATE_CLASS(klass); object_class->nickname = "lbb"; object_class->description = _("reduced halo bicubic"); interpolate_class->interpolate = vips_interpolate_lbb_interpolate; interpolate_class->window_size = 4; } static void vips_interpolate_lbb_init(VipsInterpolateLbb *lbb) { } libvips-8.15.1/libvips/resample/mapim.c000066400000000000000000000360641454007373500200260ustar00rootroot00000000000000/* resample with an index image * * 15/11/15 * - from affine.c * 12/8/18 * - prevent float->int overflow * - a bit quicker * 17/12/18 * - we were not offsetting pixel fetches by window_offset * 30/1/21 afontenot * - avoid NaN * 21/12/21 * - improve edge antialiasing with "background" and "extend" * - add "premultiplied" param */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include #include #include "presample.h" typedef struct _VipsMapim { VipsResample parent_instance; VipsImage *index; VipsInterpolate *interpolate; /* How to generate extra edge pixels. */ VipsExtend extend; /* Background colour. */ VipsArrayDouble *background; /* The [double] converted to the input image format. */ VipsPel *ink; /* True if the input is already premultiplied (and we don't need to). */ gboolean premultiplied; /* Need an image vector for start_many / stop_many */ VipsImage *in_array[3]; } VipsMapim; typedef VipsResampleClass VipsMapimClass; G_DEFINE_TYPE(VipsMapim, vips_mapim, VIPS_TYPE_RESAMPLE); /* Minmax of a line of pixels. */ #define MINMAX(TYPE) \ { \ TYPE *restrict p1 = (TYPE *) p; \ \ TYPE t_max_x = max_x; \ TYPE t_min_x = min_x; \ TYPE t_max_y = max_y; \ TYPE t_min_y = min_y; \ \ for (x = 0; x < r->width; x++) { \ TYPE px = p1[0]; \ TYPE py = p1[1]; \ \ if (first) { \ t_min_x = px; \ t_max_x = px; \ t_min_y = py; \ t_max_y = py; \ \ first = FALSE; \ } \ else { \ if (px > t_max_x) \ t_max_x = px; \ else if (px < t_min_x) \ t_min_x = px; \ \ if (py > t_max_y) \ t_max_y = py; \ else if (py < t_min_y) \ t_min_y = py; \ } \ \ p1 += 2; \ } \ \ min_x = t_min_x; \ max_x = t_max_x; \ min_y = t_min_y; \ max_y = t_max_y; \ } /* Scan a region and find min/max in the two axes. */ static void vips_mapim_region_minmax(VipsRegion *region, VipsRect *r, VipsRect *bounds) { double min_x; double max_x; double min_y; double max_y; gboolean first; int x, y; min_x = 0.0; max_x = 0.0; min_y = 0.0; max_y = 0.0; first = TRUE; for (y = 0; y < r->height; y++) { VipsPel *restrict p = VIPS_REGION_ADDR(region, r->left, r->top + y); switch (region->im->BandFmt) { case VIPS_FORMAT_UCHAR: MINMAX(unsigned char); break; case VIPS_FORMAT_CHAR: MINMAX(signed char); break; case VIPS_FORMAT_USHORT: MINMAX(unsigned short); break; case VIPS_FORMAT_SHORT: MINMAX(signed short); break; case VIPS_FORMAT_UINT: MINMAX(unsigned int); break; case VIPS_FORMAT_INT: MINMAX(signed int); break; case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_COMPLEX: MINMAX(float); break; case VIPS_FORMAT_DOUBLE: case VIPS_FORMAT_DPCOMPLEX: MINMAX(double); break; default: g_assert_not_reached(); } } /* bounds is the bounding box -- we must round left/top down and round * bottom/right up. */ min_x = floor(min_x); min_y = floor(min_y); max_x = ceil(max_x); max_y = ceil(max_y); /* bounds uses ints, so we must clip the range down from double. * Coordinates can be negative for the antialias edges. */ min_x = VIPS_CLIP(-1, min_x, VIPS_MAX_COORD); min_y = VIPS_CLIP(-1, min_y, VIPS_MAX_COORD); max_x = VIPS_CLIP(-1, max_x, VIPS_MAX_COORD); max_y = VIPS_CLIP(-1, max_y, VIPS_MAX_COORD); bounds->left = min_x; bounds->top = min_y; bounds->width = (max_x - min_x) + 1; bounds->height = (max_y - min_y) + 1; } /* Unsigned int types. */ #define ULOOKUP(TYPE) \ { \ TYPE *restrict p1 = (TYPE *) p; \ \ for (x = 0; x < r->width; x++) { \ TYPE px = p1[0]; \ TYPE py = p1[1]; \ \ if (px >= clip_width || \ py >= clip_height) { \ for (z = 0; z < ps; z++) \ q[z] = mapim->ink[z]; \ } \ else \ interpolate(mapim->interpolate, q, ir[0], \ px + window_offset + 1, \ py + window_offset + 1); \ \ p1 += 2; \ q += ps; \ } \ } /* Signed int types. We allow -1 for x/y to get edge antialiasing. */ #define LOOKUP(TYPE) \ { \ TYPE *restrict p1 = (TYPE *) p; \ \ for (x = 0; x < r->width; x++) { \ TYPE px = p1[0]; \ TYPE py = p1[1]; \ \ if (px < -1 || \ px >= clip_width || \ py < -1 || \ py >= clip_height) { \ for (z = 0; z < ps; z++) \ q[z] = mapim->ink[z]; \ } \ else \ interpolate(mapim->interpolate, q, ir[0], \ px + window_offset + 1, \ py + window_offset + 1); \ \ p1 += 2; \ q += ps; \ } \ } /* Float types. We allow -1 for x/y to get edge antialiasing. */ #define FLOOKUP(TYPE) \ { \ TYPE *restrict p1 = (TYPE *) p; \ \ for (x = 0; x < r->width; x++) { \ TYPE px = p1[0]; \ TYPE py = p1[1]; \ \ if (VIPS_ISNAN(px) || \ VIPS_ISNAN(py) || \ px < -1 || \ px >= clip_width || \ py < -1 || \ py >= clip_height) { \ for (z = 0; z < ps; z++) \ q[z] = mapim->ink[z]; \ } \ else \ interpolate(mapim->interpolate, q, ir[0], \ px + window_offset + 1, \ py + window_offset + 1); \ \ p1 += 2; \ q += ps; \ } \ } static int vips_mapim_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsRect *r = &out_region->valid; VipsRegion **ir = (VipsRegion **) seq; const VipsImage **in_array = (const VipsImage **) a; const VipsMapim *mapim = (VipsMapim *) b; const VipsImage *in = in_array[0]; const int window_size = vips_interpolate_get_window_size(mapim->interpolate); const int window_offset = vips_interpolate_get_window_offset(mapim->interpolate); const VipsInterpolateMethod interpolate = vips_interpolate_get_method(mapim->interpolate); const int ps = VIPS_IMAGE_SIZEOF_PEL(in); const int clip_width = in->Xsize - window_size; const int clip_height = in->Ysize - window_size; VipsRect bounds, need, image, clipped; int x, y, z; #ifdef DEBUG_VERBOSE printf("vips_mapim_gen: generating left=%d, top=%d, width=%d, height=%d\n", r->left, r->top, r->width, r->height); #endif /*DEBUG_VERBOSE*/ /* Fetch the chunk of the index image we need, and find the max/min in * x and y. */ if (vips_region_prepare(ir[1], r)) return -1; VIPS_GATE_START("vips_mapim_gen: work"); vips_mapim_region_minmax(ir[1], r, &bounds); VIPS_GATE_STOP("vips_mapim_gen: work"); /* Enlarge by the stencil size. */ need.width = bounds.width + window_size - 1; need.height = bounds.height + window_size - 1; /* Offset for the antialias edge we have top and left. */ need.left = bounds.left + 1; need.top = bounds.top + 1; /* Clip against the expanded image. */ image.left = 0; image.top = 0; image.width = in->Xsize; image.height = in->Ysize; vips_rect_intersectrect(&need, &image, &clipped); #ifdef DEBUG_VERBOSE printf("vips_mapim_gen: preparing left=%d, top=%d, width=%d, height=%d\n", clipped.left, clipped.top, clipped.width, clipped.height); #endif /*DEBUG_VERBOSE*/ if (vips_rect_isempty(&clipped)) { vips_region_paint_pel(out_region, r, mapim->ink); return 0; } if (vips_region_prepare(ir[0], &clipped)) return -1; VIPS_GATE_START("vips_mapim_gen: work"); /* Resample! x/y loop over pixels in the output (and index) images. */ for (y = 0; y < r->height; y++) { VipsPel *restrict p = VIPS_REGION_ADDR(ir[1], r->left, y + r->top); VipsPel *restrict q = VIPS_REGION_ADDR(out_region, r->left, y + r->top); switch (ir[1]->im->BandFmt) { case VIPS_FORMAT_UCHAR: ULOOKUP(unsigned char); break; case VIPS_FORMAT_CHAR: LOOKUP(signed char); break; case VIPS_FORMAT_USHORT: ULOOKUP(unsigned short); break; case VIPS_FORMAT_SHORT: LOOKUP(signed short); break; case VIPS_FORMAT_UINT: ULOOKUP(unsigned int); break; case VIPS_FORMAT_INT: LOOKUP(signed int); break; case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_COMPLEX: FLOOKUP(float); break; case VIPS_FORMAT_DOUBLE: case VIPS_FORMAT_DPCOMPLEX: FLOOKUP(double); break; default: g_assert_not_reached(); } } VIPS_GATE_STOP("vips_mapim_gen: work"); return 0; } static int vips_mapim_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsResample *resample = VIPS_RESAMPLE(object); VipsMapim *mapim = (VipsMapim *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 6); VipsImage *in; int window_size; int window_offset; /* TRUE if we've premultiplied and need to unpremultiply. */ gboolean have_premultiplied; VipsBandFormat unpremultiplied_format; if (VIPS_OBJECT_CLASS(vips_mapim_parent_class)->build(object)) return -1; if (vips_check_coding_known(class->nickname, resample->in) || vips_check_twocomponents(class->nickname, mapim->index)) return -1; in = resample->in; if (vips_image_decode(in, &t[0])) return -1; in = t[0]; window_size = vips_interpolate_get_window_size(mapim->interpolate); window_offset = vips_interpolate_get_window_offset(mapim->interpolate); /* Add new pixels around the input so we can interpolate at the edges. * * We add the interpolate stencil, plus one extra pixel on all the * edges. This means when we clip in generate (above) we can be sure * we clip outside the real pixels and don't get jaggies on edges. * * We allow for the +1 in the adjustment to window_offset in generate. */ if (vips_embed(in, &t[1], window_offset + 1, window_offset + 1, in->Xsize + window_size - 1 + 2, in->Ysize + window_size - 1 + 2, "extend", mapim->extend, "background", mapim->background, NULL)) return -1; in = t[1]; /* If there's an alpha and we've not premultiplied, we have to * premultiply before resampling. */ have_premultiplied = FALSE; if (vips_image_hasalpha(in) && !mapim->premultiplied) { if (vips_premultiply(in, &t[2], NULL)) return -1; have_premultiplied = TRUE; /* vips_premultiply() makes a float image. When we * vips_unpremultiply() below, we need to cast back to the * pre-premultiply format. */ unpremultiplied_format = in->BandFmt; in = t[2]; } /* Convert the background to the image's format. */ if (!(mapim->ink = vips__vector_to_ink(class->nickname, in, VIPS_AREA(mapim->background)->data, NULL, VIPS_AREA(mapim->background)->n))) return -1; t[3] = vips_image_new(); if (vips_image_pipelinev(t[3], VIPS_DEMAND_STYLE_SMALLTILE, in, NULL)) return -1; t[3]->Xsize = mapim->index->Xsize; t[3]->Ysize = mapim->index->Ysize; mapim->in_array[0] = in; mapim->in_array[1] = mapim->index; mapim->in_array[2] = NULL; if (vips_image_generate(t[3], vips_start_many, vips_mapim_gen, vips_stop_many, mapim->in_array, mapim)) return -1; in = t[3]; if (have_premultiplied) { if (vips_unpremultiply(in, &t[4], NULL) || vips_cast(t[4], &t[5], unpremultiplied_format, NULL)) return -1; in = t[5]; } if (vips_image_write(in, resample->out)) return -1; return 0; } static void vips_mapim_class_init(VipsMapimClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VIPS_DEBUG_MSG("vips_mapim_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "mapim"; vobject_class->description = _("resample with a map image"); vobject_class->build = vips_mapim_build; VIPS_ARG_IMAGE(class, "index", 3, _("Index"), _("Index pixels with this"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsMapim, index)); VIPS_ARG_INTERPOLATE(class, "interpolate", 4, _("Interpolate"), _("Interpolate pixels with this"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMapim, interpolate)); VIPS_ARG_ENUM(class, "extend", 117, _("Extend"), _("How to generate the extra pixels"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMapim, extend), VIPS_TYPE_EXTEND, VIPS_EXTEND_BACKGROUND); VIPS_ARG_BOXED(class, "background", 116, _("Background"), _("Background value"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMapim, background), VIPS_TYPE_ARRAY_DOUBLE); VIPS_ARG_BOOL(class, "premultiplied", 117, _("Premultiplied"), _("Images have premultiplied alpha"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsMapim, premultiplied), FALSE); } static void vips_mapim_init(VipsMapim *mapim) { mapim->interpolate = vips_interpolate_new("bilinear"); mapim->extend = VIPS_EXTEND_BACKGROUND; mapim->background = vips_array_double_newv(1, 0.0); } /** * vips_mapim: (method) * @in: input image * @out: (out): output image * @index: index image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @interpolate: interpolate pixels with this * * @extend: #VipsExtend how to generate new pixels * * @background: #VipsArrayDouble colour for new pixels * * @premultiplied: %gboolean, images are already premultiplied * * This operator resamples @in using @index to look up pixels. @out is * the same size as @index, with each pixel being fetched from that position in * @in. That is: * * |[ * out[x, y] = in[index[x, y]] * ]| * * If @index has one band, that band must be complex. Otherwise, @index must * have two bands of any format. * * Coordinates in @index are in pixels, with (0, 0) being the top-left corner * of @in, and with y increasing down the image. Use vips_xyz() to build index * images. * * @interpolate defaults to bilinear. * * By default, new pixels are filled with @background. This defaults to * zero (black). You can set other extend types with @extend. #VIPS_EXTEND_COPY * is better for image upsizing. * * Image are normally treated as unpremultiplied, so this operation can be used * directly on PNG images. If your images have been through vips_premultiply(), * set @premultiplied. * * This operation does not change xres or yres. The image resolution needs to * be updated by the application. * * See vips_maplut() for a 1D equivalent of this operation. * * See also: vips_xyz(), vips_affine(), vips_resize(), * vips_maplut(), #VipsInterpolate. * * Returns: 0 on success, -1 on error */ int vips_mapim(VipsImage *in, VipsImage **out, VipsImage *index, ...) { va_list ap; int result; va_start(ap, index); result = vips_call_split("mapim", ap, in, out, index); va_end(ap); return result; } libvips-8.15.1/libvips/resample/meson.build000066400000000000000000000013041454007373500207060ustar00rootroot00000000000000resample_sources = files( 'thumbnail.c', 'mapim.c', 'affine.c', 'quadratic.c', 'resample.c', 'similarity.c', 'resize.c', 'shrink.c', 'shrinkh.c', 'shrinkv.c', 'reduce.c', 'reduceh.cpp', 'reduceh_hwy.cpp', 'reducev.cpp', 'reducev_hwy.cpp', 'interpolate.c', 'transform.c', 'bicubic.cpp', 'lbb.cpp', 'nohalo.cpp', 'vsqbs.cpp', ) resample_headers = files( 'presample.h', 'templates.h', ) libvips_sources += resample_sources resample_lib = static_library('resample', resample_sources, resample_headers, dependencies: libvips_deps, gnu_symbol_visibility: 'hidden', ) libvips_components += resample_lib libvips-8.15.1/libvips/resample/nohalo.cpp000066400000000000000000001516451454007373500205460ustar00rootroot00000000000000/* nohalo subdivision followed by lbb (locally bounded bicubic) * interpolation resampler * * Nohalo level 1 with bilinear finishing scheme hacked for VIPS by * J. Cupitt based on code by N. Robidoux, 20/1/09 * * N. Robidoux and J. Cupitt, 4-17/3/09 * * N. Robidoux, 1/4-29/5/2009 * * Nohalo level 2 with bilinear finishing scheme by N. Robidoux based * on code by N. Robidoux, A. Turcotte and J. Cupitt, 27/1/2010 * * Nohalo level 1 with LBB finishing scheme by N. Robidoux and * C. Racette, 11-18/5/2010 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* * 2009-2010 (c) Nicolas Robidoux, Chantal Racette, John Cupitt and * Adam Turcotte * * N. Robidoux thanks Geert Jordaens, Ralf Meyer, Øyvind Kolås, * Minglun Gong, Eric Daoust and Sven Neumann for useful comments and * code. * * N. Robidoux's early research on Nohalo funded in part by an NSERC * (National Science and Engineering Research Council of Canada) * Discovery Grant awarded to him (298424--2004). * * C. Racette's image resampling research and programming funded in * part by an NSERC (National Science and Engineering Research Council * of Canada) Alexander Graham Bell Canada Graduate Scholarship, by an * NSERC Discovery Grant awarded to Julien Dompierre (grant number * 20-61098) and by N. Robidoux's Laurentian University professional * allowance. * * A. Turcotte's image resampling research on reduced halo funded in * part by an NSERC Alexander Graham Bell Canada Graduate Scholarship * awarded to him and by a Google Summer of Code 2010 award awarded to * GIMP (Gnu Image Manipulation Program). * * Nohalo with LBB finishing scheme was developed by N. Robidoux and * C. Racette at the Department of Mathematics and Computer Science of * Laurentian University in the course of C. Racette's Masters thesis * in Computational Sciences. Preliminary work on Nohalo and monotone * interpolation was performed by C. Racette and N. Robidoux in the * course of her honours thesis, by N. Robidoux, A. Turcotte and * E. Daoust during Google Summer of Code 2009 (through two awards * made to GIMP to improve GEGL), and, earlier, by N. Robidoux, * A. Turcotte, J. Cupitt, M. Gong and K. Martinez. */ /* * Nohalo with LBB as finishing scheme has two versions, which are * only different in the way LBB is implemented: * * A "soft" version, which shows a little less staircasing and a * little more haloing, and which is a little more expensive to * compute. We recommend this as the default. * * A "sharp" version, which shows a little more staircasing and a * little less haloing, and which is a little cheaper (it uses 6 * less comparisons and 12 less "? :"). * * The only difference between the two is that the "soft" versions * uses local minima and maxima computed over 3x3 square blocks, and * the "sharp" version uses local minima and maxima computed over 3x3 * crosses. * * The "sharp" version is (a little) faster. We don't know yet for * sure, but it appears that the "soft" version gives marginally * better results. * * If you want to use the "sharp" (cheaper) version, uncomment the * following three pre-processor code lines: */ /* #ifndef __NOHALO_CHEAP_H__ #define __NOHALO_CHEAP_H__ #endif */ /* * ================ * NOHALO RESAMPLER * ================ * * "Nohalo" is a resampler with a mission: smoothly straightening * oblique lines without undesirable side-effects. In particular, * without much blurring and with no added haloing. * * In this code, one Nohalo subdivision is performed. The * interpolation is finished with LBB (Locally Bounded Bicubic). * * Key properties: * * ======================= * Nohalo is interpolatory * ======================= * * That is, Nohalo preserves point values: If asked for the value at * the center of an input pixel, the sampler returns the corresponding * value, unchanged. In addition, because Nohalo is continuous, if * asked for a value at a location "very close" to the center of an * input pixel, then the sampler returns a value "very close" to * it. (Nohalo is not smoothing like, say, B-Spline * pseudo-interpolation.) * * ==================================================================== * Nohalo subdivision is co-monotone (this is why it's called "no-halo") * ==================================================================== * * One consequence of monotonicity is that additional subdivided * values are in the range of the four closest input values, which is * a form of local boundedness. (Note: plain vanilla bilinear and * nearest neighbour are also co-monotone.) LBB is also locally * bounded. Consequently, Nohalo subdivision followed by LBB is * locally bounded. When used as a finishing scheme for Nohalo, the * standard LBB bounds imply that the final interpolated value is in * the range of the nine closest input values. This property is why * there is very little added haloing, even when a finishing scheme * which is not strictly monotone. Another consequence of local * boundedness is that clamping is unnecessary (provided abyss values * are within the range of acceptable values, which is "always" the * case). * * Note: If the abyss policy is an extrapolating one---for example, * linear or bilinear extrapolation---clamping is still unnecessary * UNLESS one attempts to resample outside of the convex hull of the * input pixel positions. Consequence: the "corner" image size * convention does not require clamping when using linear * extrapolation abyss policy when performing image resizing, but the * "center" one does, when upscaling, at locations very close to the * boundary. If computing values at locations outside of the convex * hull of the pixel locations of the input image, nearest neighbour * abyss policy is most likely better anyway, because linear * extrapolation produces "streaks" if positions far outside the * original image boundary are resampled. * * ======================== * Nohalo is a local method * ======================== * * The interpolated pixel value when using Nohalo subdivision followed * by LBB only depends on the 21 (5x5 minus the four corners) closest * input values. * * =============================== * Nohalo is second order accurate * =============================== * * (Except possibly near the boundary: it is easy to make this * property carry over everywhere but this requires a tuned abyss * policy---linear extrapolation, say---or building the boundary * conditions inside the sampler.) Nohalo+LBB is exact on linear * intensity profiles, meaning that if the input pixel values (in the * stencil) are obtained from a function of the form f(x,y) = a + b*x * + c*y (a, b, c constants), then the computed pixel value is exactly * the value of f(x,y) at the asked-for sampling location. The * boundary condition which is emulated by VIPS through the "extend" * extension of the input image---this corresponds to the nearest * neighbour abyss policy---does NOT make this resampler exact on * linears near the boundary. It does, however, guarantee that no * clamping is required even when resampled values are computed at * positions outside of the extent of the input image (when * extrapolation is required). * * =================== * Nohalo is nonlinear * =================== * * Both Nohalo and LBB are nonlinear, consequently their composition * is nonlinear. In particular, resampling a sum of images may not be * the same as summing the resamples. (This occurs even without taking * into account over and underflow issues: images can only take values * within a banded range, and consequently no sampler is truly * linear.) * * ==================== * Weaknesses of Nohalo * ==================== * * In some cases, the initial subdivision computation is wasted: * * If a region is bi-chromatic, the nonlinear component of Nohalo * subdivision is zero in the interior of the region, and consequently * Nohalo subdivision boils down to bilinear. For such images, LBB is * probably a better choice. * * ========================= * Bibliographical reference * ========================= * * For more information about Nohalo (a prototype version with * bilinear finish instead of LBB), see * * CPU, SMP and GPU implementations of Nohalo level 1, a fast * co-convex antialiasing image resampler by Nicolas Robidoux, Minglun * Gong, John Cupitt, Adam Turcotte, and Kirk Martinez, in C3S2E '09: * Proceedings of the 2nd Canadian Conference on Computer Science and * Software Engineering, p. 185--195, ACM, New York, NY, USA, 2009. * http://doi.acm.org/10.1145/1557626.1557657. */ /* Uncomment to enable bounds checking for VIPS_REGION_ADDR(). */ #define DEBUG #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "templates.h" #define VIPS_TYPE_INTERPOLATE_NOHALO \ (vips_interpolate_nohalo_get_type()) #define VIPS_INTERPOLATE_NOHALO(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_INTERPOLATE_NOHALO, VipsInterpolateNohalo)) #define VIPS_INTERPOLATE_NOHALO_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_INTERPOLATE_NOHALO, VipsInterpolateNohaloClass)) #define VIPS_IS_INTERPOLATE_NOHALO(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_INTERPOLATE_NOHALO)) #define VIPS_IS_INTERPOLATE_NOHALO_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_INTERPOLATE_NOHALO)) #define VIPS_INTERPOLATE_NOHALO_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_INTERPOLATE_NOHALO, VipsInterpolateNohaloClass)) typedef struct _VipsInterpolateNohalo { VipsInterpolate parent_object; } VipsInterpolateNohalo; typedef struct _VipsInterpolateNohaloClass { VipsInterpolateClass parent_class; } VipsInterpolateNohaloClass; /* * NOHALO_MINMOD is an implementation of the minmod function which * only needs two "conditional moves." * NOHALO_MINMOD(a,b,a_times_a,a_times_b) "returns" * minmod(a,b). The macro parameter ("input") a_times_a is assumed to * contain the square of a; a_times_b, the product of a and b. * * For uncompressed natural images in high bit depth (images for which * the slopes a and b are unlikely to be equal to zero or be equal to * each other), or chips with good branch prediction, the following * version of the minmod function may work well: * * ((a_times_b) >= 0. ? ((a_times_b) < (a_times_a) ? (b) : (a)) : 0.) * * In this version, the forward branch of the second conditional move * is taken when |b|>|a| and when a*b<0. However, the "else" branch is * taken when a=0 (or when a=b), which is why the above version is not * as effective for images with regions with constant pixel values (or * regions with pixel values which vary linearly or bilinearly) since * we apply minmod to pairs of differences. * * The following version is more suitable for images with flat * (constant) colour areas, since a, which is a pixel difference, will * often be 0, in which case both forward branches are likely. This * may be preferable if "branch flag look ahead" does not work so * well. * * ((a_times_b) >=0. ? ((a_times_a) <= (a_times_b) ? (a) : (b)) : 0.) * * This last version appears to be slightly better than the former in * speed tests performed on a recent multicore Intel chip, especially * when enlarging a sharp image by a large factor, hence the choice. */ #define NOHALO_MINMOD(a, b, a_times_a, a_times_b) \ (((a_times_b) >= 0.) ? ((a_times_a) <= (a_times_b) ? (a) : (b)) : 0.) /* * Absolute value and sign macros: */ #define NOHALO_ABS(x) (((x) >= 0.) ? (x) : -(x)) #define NOHALO_SIGN(x) (((x) >= 0.) ? 1. : -1.) /* * MIN and MAX macros set up so that I can put the likely winner in * the first argument (forward branch likely blah blah blah): */ #define NOHALO_MIN(x, y) (((x) <= (y)) ? (x) : (y)) #define NOHALO_MAX(x, y) (((x) >= (y)) ? (x) : (y)) static void inline nohalo_subdivision(const double uno_two, const double uno_thr, const double uno_fou, const double dos_one, const double dos_two, const double dos_thr, const double dos_fou, const double dos_fiv, const double tre_one, const double tre_two, const double tre_thr, const double tre_fou, const double tre_fiv, const double qua_one, const double qua_two, const double qua_thr, const double qua_fou, const double qua_fiv, const double cin_two, const double cin_thr, const double cin_fou, double *restrict uno_one_1, double *restrict uno_two_1, double *restrict uno_thr_1, double *restrict uno_fou_1, double *restrict dos_one_1, double *restrict dos_two_1, double *restrict dos_thr_1, double *restrict dos_fou_1, double *restrict tre_one_1, double *restrict tre_two_1, double *restrict tre_thr_1, double *restrict tre_fou_1, double *restrict qua_one_1, double *restrict qua_two_1, double *restrict qua_thr_1, double *restrict qua_fou_1) { /* * nohalo_subdivision calculates the missing twelve double density * pixel values, and also returns the "already known" four, so that * the sixteen values which make up the stencil of LBB are * available. */ /* * THE STENCIL OF INPUT VALUES: * * Pointer arithmetic is used to implicitly reflect the input * stencil about tre_thr---assumed closer to the sampling location * than other pixels (ties are OK)---in such a way that after * reflection the sampling point is to the bottom right of tre_thr. * * The following code and picture assumes that the stencil reflexion * has already been performed. * * (ix-1,iy-2) (ix,iy-2) (ix+1,iy-2) * =uno_two = uno_thr = uno_fou * * * * (ix-2,iy-1) (ix-1,iy-1) (ix,iy-1) (ix+1,iy-1) (ix+2,iy-1) * = dos_one = dos_two = dos_thr = dos_fou = dos_fiv * * * * (ix-2,iy) (ix-1,iy) (ix,iy) (ix+1,iy) (ix+2,iy) * = tre_one = tre_two = tre_thr = tre_fou = tre_fiv * X * * * (ix-2,iy+1) (ix-1,iy+1) (ix,iy+1) (ix+1,iy+1) (ix+2,iy+1) * = qua_one = qua_two = qua_thr = qua_fou = qua_fiv * * * * (ix-1,iy+2) (ix,iy+2) (ix+1,iy+2) * = cin_two = cin_thr = cin_fou * * * The above input pixel values are the ones needed in order to make * available the following values, needed by LBB: * * uno_one_1 = uno_two_1 = uno_thr_1 = uno_fou_1 = * (ix-1/2,iy-1/2) (ix,iy-1/2) (ix+1/2,iy-1/2) (ix+1,iy-1/2) * * * * * dos_one_1 = dos_two_1 = dos_thr_1 = dos_fou_1 = * (ix-1/2,iy) (ix,iy) (ix+1/2,iy) (ix+1,iy) * * X * * * tre_one_1 = tre_two_1 = tre_thr_1 = tre_fou_1 = * (ix-1/2,iy+1/2) (ix,iy+1/2) (ix+1/2,iy+1/2) (ix+1,iy+1/2) * * * * * qua_one_1 = qua_two_1 = qua_thr_1 = qua_fou_1 = * (ix-1/2,iy+1) (ix,iy+1) (ix+1/2,iy+1) (ix+1,iy+1) * */ /* * Computation of the nonlinear slopes: If two consecutive pixel * value differences have the same sign, the smallest one (in * absolute value) is taken to be the corresponding slope; if the * two consecutive pixel value differences don't have the same sign, * the corresponding slope is set to 0. * * In other words: Apply minmod to consecutive differences. */ /* * Two vertical simple differences: */ const double d_unodos_two = dos_two - uno_two; const double d_dostre_two = tre_two - dos_two; const double d_trequa_two = qua_two - tre_two; const double d_quacin_two = cin_two - qua_two; /* * Thr(ee) vertical differences: */ const double d_unodos_thr = dos_thr - uno_thr; const double d_dostre_thr = tre_thr - dos_thr; const double d_trequa_thr = qua_thr - tre_thr; const double d_quacin_thr = cin_thr - qua_thr; /* * Fou(r) vertical differences: */ const double d_unodos_fou = dos_fou - uno_fou; const double d_dostre_fou = tre_fou - dos_fou; const double d_trequa_fou = qua_fou - tre_fou; const double d_quacin_fou = cin_fou - qua_fou; /* * Dos horizontal differences: */ const double d_dos_onetwo = dos_two - dos_one; const double d_dos_twothr = dos_thr - dos_two; const double d_dos_thrfou = dos_fou - dos_thr; const double d_dos_foufiv = dos_fiv - dos_fou; /* * Tre(s) horizontal differences: */ const double d_tre_onetwo = tre_two - tre_one; const double d_tre_twothr = tre_thr - tre_two; const double d_tre_thrfou = tre_fou - tre_thr; const double d_tre_foufiv = tre_fiv - tre_fou; /* * Qua(ttro) horizontal differences: */ const double d_qua_onetwo = qua_two - qua_one; const double d_qua_twothr = qua_thr - qua_two; const double d_qua_thrfou = qua_fou - qua_thr; const double d_qua_foufiv = qua_fiv - qua_fou; /* * Recyclable vertical products and squares: */ const double d_unodos_times_dostre_two = d_unodos_two * d_dostre_two; const double d_dostre_two_sq = d_dostre_two * d_dostre_two; const double d_dostre_times_trequa_two = d_dostre_two * d_trequa_two; const double d_trequa_times_quacin_two = d_quacin_two * d_trequa_two; const double d_quacin_two_sq = d_quacin_two * d_quacin_two; const double d_unodos_times_dostre_thr = d_unodos_thr * d_dostre_thr; const double d_dostre_thr_sq = d_dostre_thr * d_dostre_thr; const double d_dostre_times_trequa_thr = d_trequa_thr * d_dostre_thr; const double d_trequa_times_quacin_thr = d_trequa_thr * d_quacin_thr; const double d_quacin_thr_sq = d_quacin_thr * d_quacin_thr; const double d_unodos_times_dostre_fou = d_unodos_fou * d_dostre_fou; const double d_dostre_fou_sq = d_dostre_fou * d_dostre_fou; const double d_dostre_times_trequa_fou = d_trequa_fou * d_dostre_fou; const double d_trequa_times_quacin_fou = d_trequa_fou * d_quacin_fou; const double d_quacin_fou_sq = d_quacin_fou * d_quacin_fou; /* * Recyclable horizontal products and squares: */ const double d_dos_onetwo_times_twothr = d_dos_onetwo * d_dos_twothr; const double d_dos_twothr_sq = d_dos_twothr * d_dos_twothr; const double d_dos_twothr_times_thrfou = d_dos_twothr * d_dos_thrfou; const double d_dos_thrfou_times_foufiv = d_dos_thrfou * d_dos_foufiv; const double d_dos_foufiv_sq = d_dos_foufiv * d_dos_foufiv; const double d_tre_onetwo_times_twothr = d_tre_onetwo * d_tre_twothr; const double d_tre_twothr_sq = d_tre_twothr * d_tre_twothr; const double d_tre_twothr_times_thrfou = d_tre_thrfou * d_tre_twothr; const double d_tre_thrfou_times_foufiv = d_tre_thrfou * d_tre_foufiv; const double d_tre_foufiv_sq = d_tre_foufiv * d_tre_foufiv; const double d_qua_onetwo_times_twothr = d_qua_onetwo * d_qua_twothr; const double d_qua_twothr_sq = d_qua_twothr * d_qua_twothr; const double d_qua_twothr_times_thrfou = d_qua_thrfou * d_qua_twothr; const double d_qua_thrfou_times_foufiv = d_qua_thrfou * d_qua_foufiv; const double d_qua_foufiv_sq = d_qua_foufiv * d_qua_foufiv; /* * Minmod slopes and first level pixel values: */ const double dos_thr_y = NOHALO_MINMOD(d_dostre_thr, d_unodos_thr, d_dostre_thr_sq, d_unodos_times_dostre_thr); const double tre_thr_y = NOHALO_MINMOD(d_dostre_thr, d_trequa_thr, d_dostre_thr_sq, d_dostre_times_trequa_thr); const double newval_uno_two = .5 * (dos_thr + tre_thr) + .25 * (dos_thr_y - tre_thr_y); const double qua_thr_y = NOHALO_MINMOD(d_quacin_thr, d_trequa_thr, d_quacin_thr_sq, d_trequa_times_quacin_thr); const double newval_tre_two = .5 * (tre_thr + qua_thr) + .25 * (tre_thr_y - qua_thr_y); const double tre_fou_y = NOHALO_MINMOD(d_dostre_fou, d_trequa_fou, d_dostre_fou_sq, d_dostre_times_trequa_fou); const double qua_fou_y = NOHALO_MINMOD(d_quacin_fou, d_trequa_fou, d_quacin_fou_sq, d_trequa_times_quacin_fou); const double newval_tre_fou = .5 * (tre_fou + qua_fou) + .25 * (tre_fou_y - qua_fou_y); const double dos_fou_y = NOHALO_MINMOD(d_dostre_fou, d_unodos_fou, d_dostre_fou_sq, d_unodos_times_dostre_fou); const double newval_uno_fou = .5 * (dos_fou + tre_fou) + .25 * (dos_fou_y - tre_fou_y); const double tre_two_x = NOHALO_MINMOD(d_tre_twothr, d_tre_onetwo, d_tre_twothr_sq, d_tre_onetwo_times_twothr); const double tre_thr_x = NOHALO_MINMOD(d_tre_twothr, d_tre_thrfou, d_tre_twothr_sq, d_tre_twothr_times_thrfou); const double newval_dos_one = .5 * (tre_two + tre_thr) + .25 * (tre_two_x - tre_thr_x); const double tre_fou_x = NOHALO_MINMOD(d_tre_foufiv, d_tre_thrfou, d_tre_foufiv_sq, d_tre_thrfou_times_foufiv); const double tre_thr_x_minus_tre_fou_x = tre_thr_x - tre_fou_x; const double newval_dos_thr = .5 * (tre_thr + tre_fou) + .25 * tre_thr_x_minus_tre_fou_x; const double qua_thr_x = NOHALO_MINMOD(d_qua_twothr, d_qua_thrfou, d_qua_twothr_sq, d_qua_twothr_times_thrfou); const double qua_fou_x = NOHALO_MINMOD(d_qua_foufiv, d_qua_thrfou, d_qua_foufiv_sq, d_qua_thrfou_times_foufiv); const double qua_thr_x_minus_qua_fou_x = qua_thr_x - qua_fou_x; const double newval_qua_thr = .5 * (qua_thr + qua_fou) + .25 * qua_thr_x_minus_qua_fou_x; const double qua_two_x = NOHALO_MINMOD(d_qua_twothr, d_qua_onetwo, d_qua_twothr_sq, d_qua_onetwo_times_twothr); const double newval_qua_one = .5 * (qua_two + qua_thr) + .25 * (qua_two_x - qua_thr_x); const double newval_tre_thr = .125 * (tre_thr_x_minus_tre_fou_x + qua_thr_x_minus_qua_fou_x) + .5 * (newval_tre_two + newval_tre_fou); const double dos_thr_x = NOHALO_MINMOD(d_dos_twothr, d_dos_thrfou, d_dos_twothr_sq, d_dos_twothr_times_thrfou); const double dos_fou_x = NOHALO_MINMOD(d_dos_foufiv, d_dos_thrfou, d_dos_foufiv_sq, d_dos_thrfou_times_foufiv); const double newval_uno_thr = .25 * (dos_fou - tre_thr) + .125 * (dos_fou_y - tre_fou_y + dos_thr_x - dos_fou_x) + .5 * (newval_uno_two + newval_dos_thr); const double tre_two_y = NOHALO_MINMOD(d_dostre_two, d_trequa_two, d_dostre_two_sq, d_dostre_times_trequa_two); const double qua_two_y = NOHALO_MINMOD(d_quacin_two, d_trequa_two, d_quacin_two_sq, d_trequa_times_quacin_two); const double newval_tre_one = .25 * (qua_two - tre_thr) + .125 * (qua_two_x - qua_thr_x + tre_two_y - qua_two_y) + .5 * (newval_dos_one + newval_tre_two); const double dos_two_x = NOHALO_MINMOD(d_dos_twothr, d_dos_onetwo, d_dos_twothr_sq, d_dos_onetwo_times_twothr); const double dos_two_y = NOHALO_MINMOD(d_dostre_two, d_unodos_two, d_dostre_two_sq, d_unodos_times_dostre_two); const double newval_uno_one = .25 * (dos_two + dos_thr + tre_two + tre_thr) + .125 * (dos_two_x - dos_thr_x + tre_two_x - tre_thr_x + dos_two_y + dos_thr_y - tre_two_y - tre_thr_y); /* * Return the sixteen LBB stencil values: */ *uno_one_1 = newval_uno_one; *uno_two_1 = newval_uno_two; *uno_thr_1 = newval_uno_thr; *uno_fou_1 = newval_uno_fou; *dos_one_1 = newval_dos_one; *dos_two_1 = tre_thr; *dos_thr_1 = newval_dos_thr; *dos_fou_1 = tre_fou; *tre_one_1 = newval_tre_one; *tre_two_1 = newval_tre_two; *tre_thr_1 = newval_tre_thr; *tre_fou_1 = newval_tre_fou; *qua_one_1 = newval_qua_one; *qua_two_1 = qua_thr; *qua_thr_1 = newval_qua_thr; *qua_fou_1 = qua_fou; } /* * LBB (Locally Bounded Bicubic) is a high quality nonlinear variant * of Catmull-Rom. Images resampled with LBB have much smaller halos * than images resampled with windowed sincs or other interpolatory * cubic spline filters. Specifically, LBB halos are narrower and the * over/undershoot amplitude is smaller. This is accomplished without * a significant reduction in the smoothness of the result (compared * to Catmull-Rom). * * Another important property is that the resampled values are * contained within the range of nearby input values. Consequently, no * final clamping is needed to stay "in range" (e.g., 0-255 for * standard 8-bit images). * * LBB was developed by N. Robidoux and C. Racette of the Department * of Mathematics and Computer Science of Laurentian University in the * course of C.'s Masters Thesis in Computational Sciences. */ /* * LBB is a novel method with the following properties: * * --LBB is a Hermite bicubic method: The bicubic surface is defined, * one convex hull of four nearby input points at a time, using four * point values, four x-derivatives, four y-derivatives, and four * cross-derivatives. * * --The stencil for values in a square patch is the usual 4x4. * * --LBB is interpolatory. * * --It is C^1 with continuous cross derivatives. * * --When the limiters are inactive, LBB gives the same results as * Catmull-Rom. * * --When used on binary images, LBB gives results similar to bicubic * Hermite with all first derivatives---but not necessarily the * cross derivatives--at the input pixel locations set to zero. * * --The LBB reconstruction is locally bounded: Over each square * patch, the surface is contained between the minimum and the * maximum values among the 16 nearest input pixel values (those in * the stencil). * * --Consequently, the LBB reconstruction is globally bounded between * the very smallest input pixel value and the very largest input * pixel value. (It is not necessary to clamp results.) * * The LBB method is based on the method of Ken Brodlie, Petros * Mashwama and Sohail Butt for constraining Hermite interpolants * between globally defined planes: * * Visualization of surface data to preserve positivity and other * simple constraints. Computer & Graphics, Vol. 19, Number 4, pages * 585-594, 1995. DOI: 10.1016/0097-8493(95)00036-C. * * Instead of forcing the reconstructed surface to lie between two * GLOBALLY defined planes, LBB constrains one patch at a time to lie * between LOCALLY defined planes. This is accomplished by * constraining the derivatives (x, y and cross) at each input pixel * location so that if the constraint was applied everywhere the * surface would fit between the min and max of the values at the 9 * closest pixel locations. Because this is done with each of the four * pixel locations which define the bicubic patch, this forces the * reconstructed surface to lie between the min and max of the values * at the 16 closest values pixel locations. (Each corner defines its * own 3x3 subgroup of the 4x4 stencil. Consequently, the surface is * necessarily above the minimum of the four minima, which happens to * be the minimum over the 4x4. Similarly with the maxima.) * * The above paragraph described the "soft" version of LBB. The * "sharp" version is similar. */ static inline double lbbicubic(const double c00, const double c10, const double c01, const double c11, const double c00dx, const double c10dx, const double c01dx, const double c11dx, const double c00dy, const double c10dy, const double c01dy, const double c11dy, const double c00dxdy, const double c10dxdy, const double c01dxdy, const double c11dxdy, const double uno_one, const double uno_two, const double uno_thr, const double uno_fou, const double dos_one, const double dos_two, const double dos_thr, const double dos_fou, const double tre_one, const double tre_two, const double tre_thr, const double tre_fou, const double qua_one, const double qua_two, const double qua_thr, const double qua_fou) { /* * STENCIL (FOOTPRINT) OF INPUT VALUES: * * The stencil of LBB is the same as for any standard Hermite * bicubic (e.g., Catmull-Rom): * * (ix-1,iy-1) (ix,iy-1) (ix+1,iy-1) (ix+2,iy-1) * = uno_one = uno_two = uno_thr = uno_fou * * (ix-1,iy) (ix,iy) (ix+1,iy) (ix+2,iy) * = dos_one = dos_two = dos_thr = dos_fou * X * (ix-1,iy+1) (ix,iy+1) (ix+1,iy+1) (ix+2,iy+1) * = tre_one = tre_two = tre_thr = tre_fou * * (ix-1,iy+2) (ix,iy+2) (ix+1,iy+2) (ix+2,iy+2) * = qua_one = qua_two = qua_thr = qua_fou * * where ix is the (pseudo-)floor of the requested left-to-right * location ("X"), and iy is the floor of the requested up-to-down * location. */ #if defined(__NOHALO_CHEAP_H__) /* * Computation of the four min and four max over 3x3 input data * sub-crosses of the 4x4 input stencil. * * We exploit the fact that the data comes from the (co-monotone) * method Nohalo so that it is known ahead of time that * * dos_thr is between dos_two and dos_fou * * tre_two is between dos_two and qua_two * * tre_fou is between dos_fou and qua_fou * * qua_thr is between qua_two and qua_fou * * tre_thr is in the convex hull of dos_two, dos_fou, qua_two and qua_fou * * to minimize the number of flags and conditional moves. * * (The "between" are not strict: "a between b and c" means * * "min(b,c) <= a <= max(b,c)".) * * We have, however, succeeded in eliminating one flag computation * (one comparison) and one use of an intermediate result. See the * two commented out lines below. * * Overall, only 20 comparisons and 28 "? :" are needed (to compute * 4 mins and 4 maxes). If you can figure how to do this more * efficiently, let us know. */ const double m1 = (uno_two <= tre_two) ? uno_two : tre_two; const double M1 = (uno_two <= tre_two) ? tre_two : uno_two; const double m2 = (dos_thr <= qua_thr) ? dos_thr : qua_thr; const double M2 = (dos_thr <= qua_thr) ? qua_thr : dos_thr; const double m3 = (dos_two <= dos_fou) ? dos_two : dos_fou; const double M3 = (dos_two <= dos_fou) ? dos_fou : dos_two; const double m4 = (uno_thr <= tre_thr) ? uno_thr : tre_thr; const double M4 = (uno_thr <= tre_thr) ? tre_thr : uno_thr; const double m5 = (dos_two <= qua_two) ? dos_two : qua_two; const double M5 = (dos_two <= qua_two) ? qua_two : dos_two; const double m6 = (tre_one <= tre_thr) ? tre_one : tre_thr; const double M6 = (tre_one <= tre_thr) ? tre_thr : tre_one; const double m7 = (dos_one <= dos_thr) ? dos_one : dos_thr; const double M7 = (dos_one <= dos_thr) ? dos_thr : dos_one; const double m8 = (tre_two <= tre_fou) ? tre_two : tre_fou; const double M8 = (tre_two <= tre_fou) ? tre_fou : tre_two; const double m9 = NOHALO_MIN(m1, dos_two); const double M9 = NOHALO_MAX(M1, dos_two); const double m10 = NOHALO_MIN(m2, tre_thr); const double M10 = NOHALO_MAX(M2, tre_thr); const double min10 = NOHALO_MIN(m3, m4); const double max10 = NOHALO_MAX(M3, M4); const double min01 = NOHALO_MIN(m5, m6); const double max01 = NOHALO_MAX(M5, M6); const double min00 = NOHALO_MIN(m9, m7); const double max00 = NOHALO_MAX(M9, M7); const double min11 = NOHALO_MIN(m10, m8); const double max11 = NOHALO_MAX(M10, M8); #else /* * Computation of the four min and four max over 3x3 input data * sub-blocks of the 4x4 input stencil. * * Surprisingly, we have not succeeded in reducing the number of "? * :" needed by using the fact that the data comes from the * (co-monotone) method Nohalo so that it is known ahead of time * that * * dos_thr is between dos_two and dos_fou * * tre_two is between dos_two and qua_two * * tre_fou is between dos_fou and qua_fou * * qua_thr is between qua_two and qua_fou * * tre_thr is in the convex hull of dos_two, dos_fou, qua_two and qua_fou * * to minimize the number of flags and conditional moves. * * (The "between" are not strict: "a between b and c" means * * "min(b,c) <= a <= max(b,c)".) * * We have, however, succeeded in eliminating one flag computation * (one comparison) and one use of an intermediate result. See the * two commented out lines below. * * Overall, only 27 comparisons are needed (to compute 4 mins and 4 * maxes!). Without the simplification, 28 comparisons would be * used. Either way, the number of "? :" used is 34. If you can * figure how to do this more efficiently, let us know. */ const double m1 = (dos_two <= dos_thr) ? dos_two : dos_thr; const double M1 = (dos_two <= dos_thr) ? dos_thr : dos_two; const double m2 = (tre_two <= tre_thr) ? tre_two : tre_thr; const double M2 = (tre_two <= tre_thr) ? tre_thr : tre_two; const double m4 = (qua_two <= qua_thr) ? qua_two : qua_thr; const double M4 = (qua_two <= qua_thr) ? qua_thr : qua_two; const double m3 = (uno_two <= uno_thr) ? uno_two : uno_thr; const double M3 = (uno_two <= uno_thr) ? uno_thr : uno_two; const double m5 = NOHALO_MIN(m1, m2); const double M5 = NOHALO_MAX(M1, M2); const double m6 = (dos_one <= tre_one) ? dos_one : tre_one; const double M6 = (dos_one <= tre_one) ? tre_one : dos_one; const double m7 = (dos_fou <= tre_fou) ? dos_fou : tre_fou; const double M7 = (dos_fou <= tre_fou) ? tre_fou : dos_fou; const double m13 = (dos_fou <= qua_fou) ? dos_fou : qua_fou; const double M13 = (dos_fou <= qua_fou) ? qua_fou : dos_fou; /* * Because the data comes from Nohalo subdivision, the following two * lines can be replaced by the above, simpler, two lines without * changing the results. * * const double m13 = NOHALO_MIN(m7, qua_fou); * const double M13 = NOHALO_MAX(M7, qua_fou); * * This also allows reodering the comparisons to put space between * the computation of a result and its use. */ const double m9 = NOHALO_MIN(m5, m4); const double M9 = NOHALO_MAX(M5, M4); const double m11 = NOHALO_MIN(m6, qua_one); const double M11 = NOHALO_MAX(M6, qua_one); const double m10 = NOHALO_MIN(m6, uno_one); const double M10 = NOHALO_MAX(M6, uno_one); const double m8 = NOHALO_MIN(m5, m3); const double M8 = NOHALO_MAX(M5, M3); const double m12 = NOHALO_MIN(m7, uno_fou); const double M12 = NOHALO_MAX(M7, uno_fou); const double min11 = NOHALO_MIN(m9, m13); const double max11 = NOHALO_MAX(M9, M13); const double min01 = NOHALO_MIN(m9, m11); const double max01 = NOHALO_MAX(M9, M11); const double min00 = NOHALO_MIN(m8, m10); const double max00 = NOHALO_MAX(M8, M10); const double min10 = NOHALO_MIN(m8, m12); const double max10 = NOHALO_MAX(M8, M12); #endif /* * The remainder of the "per channel" computation involves the * computation of: * * --8 conditional moves, * * --8 signs (in which the sign of zero is unimportant), * * --12 minima of two values, * * --8 maxima of two values, * * --8 absolute values, * * for a grand total of 29 minima, 25 maxima, 8 conditional moves, 8 * signs, and 8 absolute values. If everything is done with * conditional moves, "only" 28+8+8+12+8+8=72 flags are involved * (because initial min and max can be computed with one flag). * * The "per channel" part of the computation also involves 107 * arithmetic operations (54 *, 21 +, 42 -). */ /* * Distances to the local min and max: */ const double u11 = tre_thr - min11; const double v11 = max11 - tre_thr; const double u01 = tre_two - min01; const double v01 = max01 - tre_two; const double u00 = dos_two - min00; const double v00 = max00 - dos_two; const double u10 = dos_thr - min10; const double v10 = max10 - dos_thr; /* * Initial values of the derivatives computed with centered * differences. Factors of 1/2 are left out because they are folded * in later: */ const double dble_dzdx00i = dos_thr - dos_one; const double dble_dzdy11i = qua_thr - dos_thr; const double dble_dzdx10i = dos_fou - dos_two; const double dble_dzdy01i = qua_two - dos_two; const double dble_dzdx01i = tre_thr - tre_one; const double dble_dzdy10i = tre_thr - uno_thr; const double dble_dzdx11i = tre_fou - tre_two; const double dble_dzdy00i = tre_two - uno_two; /* * Signs of the derivatives. The upcoming clamping does not change * them (except if the clamping sends a negative derivative to 0, in * which case the sign does not matter anyway). */ const double sign_dzdx00 = NOHALO_SIGN(dble_dzdx00i); const double sign_dzdx10 = NOHALO_SIGN(dble_dzdx10i); const double sign_dzdx01 = NOHALO_SIGN(dble_dzdx01i); const double sign_dzdx11 = NOHALO_SIGN(dble_dzdx11i); const double sign_dzdy00 = NOHALO_SIGN(dble_dzdy00i); const double sign_dzdy10 = NOHALO_SIGN(dble_dzdy10i); const double sign_dzdy01 = NOHALO_SIGN(dble_dzdy01i); const double sign_dzdy11 = NOHALO_SIGN(dble_dzdy11i); /* * Initial values of the cross-derivatives. Factors of 1/4 are left * out because folded in later: */ const double quad_d2zdxdy00i = uno_one - uno_thr + dble_dzdx01i; const double quad_d2zdxdy10i = uno_two - uno_fou + dble_dzdx11i; const double quad_d2zdxdy01i = qua_thr - qua_one - dble_dzdx00i; const double quad_d2zdxdy11i = qua_fou - qua_two - dble_dzdx10i; /* * Slope limiters. The key multiplier is 3 but we fold a factor of * 2, hence 6: */ const double dble_slopelimit_00 = 6.0 * NOHALO_MIN(u00, v00); const double dble_slopelimit_10 = 6.0 * NOHALO_MIN(u10, v10); const double dble_slopelimit_01 = 6.0 * NOHALO_MIN(u01, v01); const double dble_slopelimit_11 = 6.0 * NOHALO_MIN(u11, v11); /* * Clamped first derivatives: */ const double dble_dzdx00 = (sign_dzdx00 * dble_dzdx00i <= dble_slopelimit_00) ? dble_dzdx00i : sign_dzdx00 * dble_slopelimit_00; const double dble_dzdy00 = (sign_dzdy00 * dble_dzdy00i <= dble_slopelimit_00) ? dble_dzdy00i : sign_dzdy00 * dble_slopelimit_00; const double dble_dzdx10 = (sign_dzdx10 * dble_dzdx10i <= dble_slopelimit_10) ? dble_dzdx10i : sign_dzdx10 * dble_slopelimit_10; const double dble_dzdy10 = (sign_dzdy10 * dble_dzdy10i <= dble_slopelimit_10) ? dble_dzdy10i : sign_dzdy10 * dble_slopelimit_10; const double dble_dzdx01 = (sign_dzdx01 * dble_dzdx01i <= dble_slopelimit_01) ? dble_dzdx01i : sign_dzdx01 * dble_slopelimit_01; const double dble_dzdy01 = (sign_dzdy01 * dble_dzdy01i <= dble_slopelimit_01) ? dble_dzdy01i : sign_dzdy01 * dble_slopelimit_01; const double dble_dzdx11 = (sign_dzdx11 * dble_dzdx11i <= dble_slopelimit_11) ? dble_dzdx11i : sign_dzdx11 * dble_slopelimit_11; const double dble_dzdy11 = (sign_dzdy11 * dble_dzdy11i <= dble_slopelimit_11) ? dble_dzdy11i : sign_dzdy11 * dble_slopelimit_11; /* * Sums and differences of first derivatives: */ const double twelve_sum00 = 6.0 * (dble_dzdx00 + dble_dzdy00); const double twelve_dif00 = 6.0 * (dble_dzdx00 - dble_dzdy00); const double twelve_sum10 = 6.0 * (dble_dzdx10 + dble_dzdy10); const double twelve_dif10 = 6.0 * (dble_dzdx10 - dble_dzdy10); const double twelve_sum01 = 6.0 * (dble_dzdx01 + dble_dzdy01); const double twelve_dif01 = 6.0 * (dble_dzdx01 - dble_dzdy01); const double twelve_sum11 = 6.0 * (dble_dzdx11 + dble_dzdy11); const double twelve_dif11 = 6.0 * (dble_dzdx11 - dble_dzdy11); /* * Absolute values of the sums: */ const double twelve_abs_sum00 = NOHALO_ABS(twelve_sum00); const double twelve_abs_sum10 = NOHALO_ABS(twelve_sum10); const double twelve_abs_sum01 = NOHALO_ABS(twelve_sum01); const double twelve_abs_sum11 = NOHALO_ABS(twelve_sum11); /* * Scaled distances to the min: */ const double u00_times_36 = 36.0 * u00; const double u10_times_36 = 36.0 * u10; const double u01_times_36 = 36.0 * u01; const double u11_times_36 = 36.0 * u11; /* * First cross-derivative limiter: */ const double first_limit00 = twelve_abs_sum00 - u00_times_36; const double first_limit10 = twelve_abs_sum10 - u10_times_36; const double first_limit01 = twelve_abs_sum01 - u01_times_36; const double first_limit11 = twelve_abs_sum11 - u11_times_36; const double quad_d2zdxdy00ii = NOHALO_MAX(quad_d2zdxdy00i, first_limit00); const double quad_d2zdxdy10ii = NOHALO_MAX(quad_d2zdxdy10i, first_limit10); const double quad_d2zdxdy01ii = NOHALO_MAX(quad_d2zdxdy01i, first_limit01); const double quad_d2zdxdy11ii = NOHALO_MAX(quad_d2zdxdy11i, first_limit11); /* * Scaled distances to the max: */ const double v00_times_36 = 36.0 * v00; const double v10_times_36 = 36.0 * v10; const double v01_times_36 = 36.0 * v01; const double v11_times_36 = 36.0 * v11; /* * Second cross-derivative limiter: */ const double second_limit00 = v00_times_36 - twelve_abs_sum00; const double second_limit10 = v10_times_36 - twelve_abs_sum10; const double second_limit01 = v01_times_36 - twelve_abs_sum01; const double second_limit11 = v11_times_36 - twelve_abs_sum11; const double quad_d2zdxdy00iii = NOHALO_MIN(quad_d2zdxdy00ii, second_limit00); const double quad_d2zdxdy10iii = NOHALO_MIN(quad_d2zdxdy10ii, second_limit10); const double quad_d2zdxdy01iii = NOHALO_MIN(quad_d2zdxdy01ii, second_limit01); const double quad_d2zdxdy11iii = NOHALO_MIN(quad_d2zdxdy11ii, second_limit11); /* * Absolute values of the differences: */ const double twelve_abs_dif00 = NOHALO_ABS(twelve_dif00); const double twelve_abs_dif10 = NOHALO_ABS(twelve_dif10); const double twelve_abs_dif01 = NOHALO_ABS(twelve_dif01); const double twelve_abs_dif11 = NOHALO_ABS(twelve_dif11); /* * Third cross-derivative limiter: */ const double third_limit00 = twelve_abs_dif00 - v00_times_36; const double third_limit10 = twelve_abs_dif10 - v10_times_36; const double third_limit01 = twelve_abs_dif01 - v01_times_36; const double third_limit11 = twelve_abs_dif11 - v11_times_36; const double quad_d2zdxdy00iiii = NOHALO_MAX(quad_d2zdxdy00iii, third_limit00); const double quad_d2zdxdy10iiii = NOHALO_MAX(quad_d2zdxdy10iii, third_limit10); const double quad_d2zdxdy01iiii = NOHALO_MAX(quad_d2zdxdy01iii, third_limit01); const double quad_d2zdxdy11iiii = NOHALO_MAX(quad_d2zdxdy11iii, third_limit11); /* * Fourth cross-derivative limiter: */ const double fourth_limit00 = u00_times_36 - twelve_abs_dif00; const double fourth_limit10 = u10_times_36 - twelve_abs_dif10; const double fourth_limit01 = u01_times_36 - twelve_abs_dif01; const double fourth_limit11 = u11_times_36 - twelve_abs_dif11; const double quad_d2zdxdy00 = NOHALO_MIN(quad_d2zdxdy00iiii, fourth_limit00); const double quad_d2zdxdy10 = NOHALO_MIN(quad_d2zdxdy10iiii, fourth_limit10); const double quad_d2zdxdy01 = NOHALO_MIN(quad_d2zdxdy01iiii, fourth_limit01); const double quad_d2zdxdy11 = NOHALO_MIN(quad_d2zdxdy11iiii, fourth_limit11); /* * Part of the result which does not need derivatives: */ const double newval1 = c00 * dos_two + c10 * dos_thr + c01 * tre_two + c11 * tre_thr; /* * Twice the part of the result which only needs first derivatives. */ const double newval2 = c00dx * dble_dzdx00 + c10dx * dble_dzdx10 + c01dx * dble_dzdx01 + c11dx * dble_dzdx11 + c00dy * dble_dzdy00 + c10dy * dble_dzdy10 + c01dy * dble_dzdy01 + c11dy * dble_dzdy11; /* * Four times the part of the result which only uses cross * derivatives: */ const double newval3 = c00dxdy * quad_d2zdxdy00 + c10dxdy * quad_d2zdxdy10 + c01dxdy * quad_d2zdxdy01 + c11dxdy * quad_d2zdxdy11; const double newval = newval1 + .5 * newval2 + .25 * newval3; return newval; } /* * Call Nohalo+LBB with a careful type conversion as a parameter. * * It would be nice to do this with templates somehow---for one thing * this would allow code comments!---but we can't figure a clean way * to do it. */ #define NOHALO_CONVERSION(conversion) \ template \ static void inline nohalo_##conversion(void *restrict pout, \ const void *restrict pin, \ const int bands, \ const int lskip, \ const double x_0, \ const double y_0) \ { \ T *restrict out = (T *) pout; \ \ const T *restrict in = (T *) pin; \ \ const int sign_of_x_0 = 2 * (x_0 >= 0.) - 1; \ const int sign_of_y_0 = 2 * (y_0 >= 0.) - 1; \ \ const int shift_forw_1_pix = sign_of_x_0 * bands; \ const int shift_forw_1_row = sign_of_y_0 * lskip; \ \ const int shift_back_1_pix = -shift_forw_1_pix; \ const int shift_back_1_row = -shift_forw_1_row; \ \ const int shift_back_2_pix = 2 * shift_back_1_pix; \ const int shift_back_2_row = 2 * shift_back_1_row; \ const int shift_forw_2_pix = 2 * shift_forw_1_pix; \ const int shift_forw_2_row = 2 * shift_forw_1_row; \ \ const int uno_two_shift = shift_back_1_pix + shift_back_2_row; \ const int uno_thr_shift = shift_back_2_row; \ const int uno_fou_shift = shift_forw_1_pix + shift_back_2_row; \ \ const int dos_one_shift = shift_back_2_pix + shift_back_1_row; \ const int dos_two_shift = shift_back_1_pix + shift_back_1_row; \ const int dos_thr_shift = shift_back_1_row; \ const int dos_fou_shift = shift_forw_1_pix + shift_back_1_row; \ const int dos_fiv_shift = shift_forw_2_pix + shift_back_1_row; \ \ const int tre_one_shift = shift_back_2_pix; \ const int tre_two_shift = shift_back_1_pix; \ const int tre_thr_shift = 0; \ const int tre_fou_shift = shift_forw_1_pix; \ const int tre_fiv_shift = shift_forw_2_pix; \ \ const int qua_one_shift = shift_back_2_pix + shift_forw_1_row; \ const int qua_two_shift = shift_back_1_pix + shift_forw_1_row; \ const int qua_thr_shift = shift_forw_1_row; \ const int qua_fou_shift = shift_forw_1_pix + shift_forw_1_row; \ const int qua_fiv_shift = shift_forw_2_pix + shift_forw_1_row; \ \ const int cin_two_shift = shift_back_1_pix + shift_forw_2_row; \ const int cin_thr_shift = shift_forw_2_row; \ const int cin_fou_shift = shift_forw_1_pix + shift_forw_2_row; \ \ const double xp1over2 = (2 * sign_of_x_0) * x_0; \ const double xm1over2 = xp1over2 - 1.0; \ const double onepx = 0.5 + xp1over2; \ const double onemx = 1.5 - xp1over2; \ const double xp1over2sq = xp1over2 * xp1over2; \ \ const double yp1over2 = (2 * sign_of_y_0) * y_0; \ const double ym1over2 = yp1over2 - 1.0; \ const double onepy = 0.5 + yp1over2; \ const double onemy = 1.5 - yp1over2; \ const double yp1over2sq = yp1over2 * yp1over2; \ \ const double xm1over2sq = xm1over2 * xm1over2; \ const double ym1over2sq = ym1over2 * ym1over2; \ \ const double twice1px = onepx + onepx; \ const double twice1py = onepy + onepy; \ const double twice1mx = onemx + onemx; \ const double twice1my = onemy + onemy; \ \ const double xm1over2sq_times_ym1over2sq = xm1over2sq * ym1over2sq; \ const double xp1over2sq_times_ym1over2sq = xp1over2sq * ym1over2sq; \ const double xp1over2sq_times_yp1over2sq = xp1over2sq * yp1over2sq; \ const double xm1over2sq_times_yp1over2sq = xm1over2sq * yp1over2sq; \ \ const double four_times_1px_times_1py = twice1px * twice1py; \ const double four_times_1mx_times_1py = twice1mx * twice1py; \ const double twice_xp1over2_times_1py = xp1over2 * twice1py; \ const double twice_xm1over2_times_1py = xm1over2 * twice1py; \ \ const double twice_xm1over2_times_1my = xm1over2 * twice1my; \ const double twice_xp1over2_times_1my = xp1over2 * twice1my; \ const double four_times_1mx_times_1my = twice1mx * twice1my; \ const double four_times_1px_times_1my = twice1px * twice1my; \ \ const double twice_1px_times_ym1over2 = twice1px * ym1over2; \ const double twice_1mx_times_ym1over2 = twice1mx * ym1over2; \ const double xp1over2_times_ym1over2 = xp1over2 * ym1over2; \ const double xm1over2_times_ym1over2 = xm1over2 * ym1over2; \ \ const double xm1over2_times_yp1over2 = xm1over2 * yp1over2; \ const double xp1over2_times_yp1over2 = xp1over2 * yp1over2; \ const double twice_1mx_times_yp1over2 = twice1mx * yp1over2; \ const double twice_1px_times_yp1over2 = twice1px * yp1over2; \ \ const double c00 = \ four_times_1px_times_1py * xm1over2sq_times_ym1over2sq; \ const double c00dx = \ twice_xp1over2_times_1py * xm1over2sq_times_ym1over2sq; \ const double c00dy = \ twice_1px_times_yp1over2 * xm1over2sq_times_ym1over2sq; \ const double c00dxdy = \ xp1over2_times_yp1over2 * xm1over2sq_times_ym1over2sq; \ \ const double c10 = \ four_times_1mx_times_1py * xp1over2sq_times_ym1over2sq; \ const double c10dx = \ twice_xm1over2_times_1py * xp1over2sq_times_ym1over2sq; \ const double c10dy = \ twice_1mx_times_yp1over2 * xp1over2sq_times_ym1over2sq; \ const double c10dxdy = \ xm1over2_times_yp1over2 * xp1over2sq_times_ym1over2sq; \ \ const double c01 = \ four_times_1px_times_1my * xm1over2sq_times_yp1over2sq; \ const double c01dx = \ twice_xp1over2_times_1my * xm1over2sq_times_yp1over2sq; \ const double c01dy = \ twice_1px_times_ym1over2 * xm1over2sq_times_yp1over2sq; \ const double c01dxdy = \ xp1over2_times_ym1over2 * xm1over2sq_times_yp1over2sq; \ \ const double c11 = \ four_times_1mx_times_1my * xp1over2sq_times_yp1over2sq; \ const double c11dx = \ twice_xm1over2_times_1my * xp1over2sq_times_yp1over2sq; \ const double c11dy = \ twice_1mx_times_ym1over2 * xp1over2sq_times_yp1over2sq; \ const double c11dxdy = \ xm1over2_times_ym1over2 * xp1over2sq_times_yp1over2sq; \ \ int band = bands; \ \ do { \ double uno_one, uno_two, uno_thr, uno_fou; \ double dos_one, dos_two, dos_thr, dos_fou; \ double tre_one, tre_two, tre_thr, tre_fou; \ double qua_one, qua_two, qua_thr, qua_fou; \ \ nohalo_subdivision(in[uno_two_shift], \ in[uno_thr_shift], \ in[uno_fou_shift], \ in[dos_one_shift], \ in[dos_two_shift], \ in[dos_thr_shift], \ in[dos_fou_shift], \ in[dos_fiv_shift], \ in[tre_one_shift], \ in[tre_two_shift], \ in[tre_thr_shift], \ in[tre_fou_shift], \ in[tre_fiv_shift], \ in[qua_one_shift], \ in[qua_two_shift], \ in[qua_thr_shift], \ in[qua_fou_shift], \ in[qua_fiv_shift], \ in[cin_two_shift], \ in[cin_thr_shift], \ in[cin_fou_shift], \ &uno_one, \ &uno_two, \ &uno_thr, \ &uno_fou, \ &dos_one, \ &dos_two, \ &dos_thr, \ &dos_fou, \ &tre_one, \ &tre_two, \ &tre_thr, \ &tre_fou, \ &qua_one, \ &qua_two, \ &qua_thr, \ &qua_fou); \ \ const double double_result = \ lbbicubic(c00, \ c10, \ c01, \ c11, \ c00dx, \ c10dx, \ c01dx, \ c11dx, \ c00dy, \ c10dy, \ c01dy, \ c11dy, \ c00dxdy, \ c10dxdy, \ c01dxdy, \ c11dxdy, \ uno_one, \ uno_two, \ uno_thr, \ uno_fou, \ dos_one, \ dos_two, \ dos_thr, \ dos_fou, \ tre_one, \ tre_two, \ tre_thr, \ tre_fou, \ qua_one, \ qua_two, \ qua_thr, \ qua_fou); \ \ { \ const T result = to_##conversion(double_result); \ in++; \ *out++ = result; \ } \ \ } while (--band); \ } NOHALO_CONVERSION(fptypes) NOHALO_CONVERSION(withsign) NOHALO_CONVERSION(nosign) #define CALL(T, conversion) \ nohalo_##conversion(out, \ p, \ bands, \ lskip, \ relative_x, \ relative_y); /* * We need C linkage: */ extern "C" { G_DEFINE_TYPE(VipsInterpolateNohalo, vips_interpolate_nohalo, VIPS_TYPE_INTERPOLATE); } static void vips_interpolate_nohalo_interpolate(VipsInterpolate *restrict interpolate, void *restrict out, VipsRegion *restrict in, double absolute_x, double absolute_y) { /* absolute_x and absolute_y are always >= 2.0 (see double-check assert * below), so we don't need floor(). * * It's 2 not 0 since we ask for a window_offset of 2 at the bottom. */ const int ix = (int) (absolute_x + 0.5); const int iy = (int) (absolute_y + 0.5); /* * Move the pointer to (the first band of) the top/left pixel of the * 2x2 group of pixel centers which contains the sampling location * in its convex hull: */ const VipsPel *restrict p = VIPS_REGION_ADDR(in, ix, iy); const double relative_x = absolute_x - ix; const double relative_y = absolute_y - iy; /* * VIPS versions of Nicolas's pixel addressing values. */ const int lskip = VIPS_REGION_LSKIP(in) / VIPS_IMAGE_SIZEOF_ELEMENT(in->im); /* * Double the bands for complex images to account for the real and * imaginary parts being computed independently: */ const int actual_bands = in->im->Bands; const int bands = vips_band_format_iscomplex(in->im->BandFmt) ? 2 * actual_bands : actual_bands; g_assert(ix - 2 >= in->valid.left); g_assert(iy - 2 >= in->valid.top); g_assert(ix + 2 <= VIPS_RECT_RIGHT(&in->valid)); g_assert(iy + 2 <= VIPS_RECT_BOTTOM(&in->valid)); /* Confirm that absolute_x and absolute_y are >= 2, see above. */ g_assert(absolute_x >= 2.0); g_assert(absolute_y >= 2.0); switch (in->im->BandFmt) { case VIPS_FORMAT_UCHAR: CALL(unsigned char, nosign); break; case VIPS_FORMAT_CHAR: CALL(signed char, withsign); break; case VIPS_FORMAT_USHORT: CALL(unsigned short, nosign); break; case VIPS_FORMAT_SHORT: CALL(signed short, withsign); break; case VIPS_FORMAT_UINT: CALL(unsigned int, nosign); break; case VIPS_FORMAT_INT: CALL(signed int, withsign); break; /* * Complex images are handled by doubling of bands. */ case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_COMPLEX: CALL(float, fptypes); break; case VIPS_FORMAT_DOUBLE: case VIPS_FORMAT_DPCOMPLEX: CALL(double, fptypes); break; default: g_assert(0); break; } } static void vips_interpolate_nohalo_class_init(VipsInterpolateNohaloClass *klass) { VipsObjectClass *object_class = VIPS_OBJECT_CLASS(klass); VipsInterpolateClass *interpolate_class = VIPS_INTERPOLATE_CLASS(klass); object_class->nickname = "nohalo"; object_class->description = _("edge sharpening resampler with halo reduction"); interpolate_class->interpolate = vips_interpolate_nohalo_interpolate; interpolate_class->window_size = 6; interpolate_class->window_offset = 2; } static void vips_interpolate_nohalo_init(VipsInterpolateNohalo *nohalo) { } libvips-8.15.1/libvips/resample/presample.h000066400000000000000000000044051454007373500207120ustar00rootroot00000000000000/* base class for all resample operations */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifndef VIPS_PRESAMPLE_H #define VIPS_PRESAMPLE_H #ifdef __cplusplus extern "C" { #endif /*__cplusplus*/ #define VIPS_TYPE_RESAMPLE (vips_resample_get_type()) #define VIPS_RESAMPLE(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_RESAMPLE, VipsResample)) #define VIPS_RESAMPLE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_RESAMPLE, VipsResampleClass)) #define VIPS_IS_RESAMPLE(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_RESAMPLE)) #define VIPS_IS_RESAMPLE_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_RESAMPLE)) #define VIPS_RESAMPLE_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_RESAMPLE, VipsResampleClass)) typedef struct _VipsResample { VipsOperation parent_instance; VipsImage *in; VipsImage *out; } VipsResample; typedef struct _VipsResampleClass { VipsOperationClass parent_class; } VipsResampleClass; GType vips_resample_get_type(void); /* The max size of the vector we use. */ #define MAX_POINT (2000) int vips_reduce_get_points(VipsKernel kernel, double shrink); void vips_reduceh_uchar_hwy(VipsPel *pout, VipsPel *pin, int n, int width, int bands, short *restrict cs[VIPS_TRANSFORM_SCALE + 1], double X, double hshrink); void vips_reducev_uchar_hwy(VipsPel *pout, VipsPel *pin, int n, int ne, int lskip, const short *restrict k); #ifdef __cplusplus } #endif /*__cplusplus*/ #endif /*VIPS_PRESAMPLE_H*/ libvips-8.15.1/libvips/resample/quadratic.c000066400000000000000000000203161454007373500206710ustar00rootroot00000000000000/* Resample an image with a quadratic transform. * * Original code from Reimar Lenz, * Adapted by Lars Raffelt for many bands, * VIPSified by JC ... other numeric types, partial output * * 7/11/12 * - rewritten again for vips8 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG #define DEBUG_GEOMETRY */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "presample.h" /* The transform we compute: x',y' = coordinates of srcim x,y = coordinates of dstim a .. l = coefficients x = x' + a : order 0 image shift only + b x' + c y' : order 1 + affine transf. + d x' y' : order 2 + bilinear transf. + e x' x' + f y' y' : order 3 + quadratic transf. y = y' + g + h y' + i x' + j y' x' + k y' y' + l x' x' input matrix: a g -- b h c i -- d j -- e k f l matrix height may be 1, 3, 4, 6 */ typedef struct _VipsQuadratic { VipsResample parent_instance; VipsImage *coeff; VipsInterpolate *interpolate; /* The coeff array argument, made into an in-memory double. */ VipsImage *mat; /* Transform order. */ int order; } VipsQuadratic; typedef VipsResampleClass VipsQuadraticClass; G_DEFINE_TYPE(VipsQuadratic, vips_quadratic, VIPS_TYPE_RESAMPLE); static void vips_quadratic_dispose(GObject *gobject) { VipsQuadratic *quadratic = (VipsQuadratic *) gobject; VIPS_UNREF(quadratic->mat); G_OBJECT_CLASS(vips_quadratic_parent_class)->dispose(gobject); } static int vips_quadratic_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsRegion *ir = (VipsRegion *) vseq; VipsQuadratic *quadratic = (VipsQuadratic *) b; VipsResample *resample = VIPS_RESAMPLE(quadratic); VipsInterpolateMethod interpolate_fn = vips_interpolate_get_method(quadratic->interpolate); /* @in is the enlarged image (borders on, after vips_embed()). Use * @resample->in for the original, not-expanded image. */ const VipsImage *in = (VipsImage *) a; const int ps = VIPS_IMAGE_SIZEOF_PEL(in); double *vec = VIPS_MATRIX(quadratic->mat, 0, 0); int clip_width = resample->in->Xsize; int clip_height = resample->in->Ysize; int xlow = out_region->valid.left; int ylow = out_region->valid.top; int xhigh = VIPS_RECT_RIGHT(&out_region->valid); int yhigh = VIPS_RECT_BOTTOM(&out_region->valid); VipsPel *q; int xo, yo; /* output coordinates, dstimage */ int z; double fxi, fyi; /* input coordinates */ double dx, dy; /* xo derivative of input coord. */ double ddx, ddy; /* 2nd xo derivative of input coord. */ VipsRect image; image.left = 0; image.top = 0; image.width = in->Xsize; image.height = in->Ysize; if (vips_region_image(ir, &image)) return -1; for (yo = ylow; yo < yhigh; yo++) { fxi = 0.0; fyi = 0.0; dx = 0.0; dy = 0.0; ddx = 0.0; ddy = 0.0; switch (quadratic->order) { case 3: fxi += vec[10] * yo * yo + vec[8] * xlow * xlow; fyi += vec[11] * yo * yo + vec[9] * xlow * xlow; dx += vec[8]; ddx += vec[8] * 2.0; dy += vec[9]; ddy += vec[9] * 2.0; case 2: fxi += vec[6] * xlow * yo; fyi += vec[7] * xlow * yo; dx += vec[6] * yo; dy += vec[7] * yo; case 1: fxi += vec[4] * yo + vec[2] * xlow; fyi += vec[5] * yo + vec[3] * xlow; dx += vec[2]; dy += vec[3]; case 0: fxi += vec[0]; fyi += vec[1]; break; default: g_assert_not_reached(); } printf("dx = %g, dy = %g\n", dx, dy); q = VIPS_REGION_ADDR(out_region, xlow, yo); for (xo = xlow; xo < xhigh; xo++) { int xi, yi; xi = fxi; yi = fyi; /* Clipping! */ if (xi < 0 || yi < 0 || xi >= clip_width || yi >= clip_height) { for (z = 0; z < ps; z++) q[z] = 0; } else interpolate_fn(quadratic->interpolate, q, ir, fxi, fyi); q += ps; fxi += dx; fyi += dy; if (quadratic->order > 2) { dx += ddx; dy += ddy; } } } return 0; } static int vips_quadratic_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsResample *resample = VIPS_RESAMPLE(object); VipsQuadratic *quadratic = (VipsQuadratic *) object; int window_size; int window_offset; VipsImage *in; VipsImage *t; if (VIPS_OBJECT_CLASS(vips_quadratic_parent_class)->build(object)) return -1; /* We have the whole of the input in memory, so we can generate any * output. */ if (vips_image_pipelinev(resample->out, VIPS_DEMAND_STYLE_ANY, resample->in, NULL)) return -1; in = resample->in; if (vips_check_uncoded(class->nickname, in) || vips_check_noncomplex(class->nickname, in) || vips_check_matrix(class->nickname, quadratic->coeff, &quadratic->mat)) return -1; if (quadratic->mat->Xsize != 2) { vips_error(class->nickname, "%s", _("coefficient matrix must have width 2")); return -1; } switch (quadratic->mat->Ysize) { case 1: quadratic->order = 0; break; case 3: quadratic->order = 1; break; case 4: quadratic->order = 2; break; case 6: quadratic->order = 3; break; default: vips_error(class->nickname, "%s", _("coefficient matrix must have height 1, 3, 4 or 6")); return -1; } if (!quadratic->interpolate) quadratic->interpolate = vips_interpolate_new("bilinear"); window_size = vips_interpolate_get_window_size(quadratic->interpolate); window_offset = vips_interpolate_get_window_offset(quadratic->interpolate); /* Enlarge the input image. */ if (vips_embed(in, &t, window_offset, window_offset, in->Xsize + window_size, in->Ysize + window_size, "extend", VIPS_EXTEND_COPY, NULL)) return -1; vips_object_local(object, t); in = t; /* We need random access to our input. */ if (!(t = vips_image_copy_memory(in))) return -1; vips_object_local(object, t); in = t; if (vips_image_generate(resample->out, vips_start_one, vips_quadratic_gen, vips_stop_one, in, quadratic)) return -1; return 0; } static void vips_quadratic_class_init(VipsQuadraticClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VIPS_DEBUG_MSG("vips_quadratic_class_init\n"); gobject_class->dispose = vips_quadratic_dispose; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "quadratic"; vobject_class->description = _("resample an image with a quadratic transform"); vobject_class->build = vips_quadratic_build; VIPS_ARG_IMAGE(class, "coeff", 8, _("Coeff"), _("Coefficient matrix"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsQuadratic, coeff)); VIPS_ARG_INTERPOLATE(class, "interpolate", 9, _("Interpolate"), _("Interpolate values with this"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsQuadratic, interpolate)); } static void vips_quadratic_init(VipsQuadratic *quadratic) { } /** * vips_quadratic: (method) * @in: input image * @out: (out): output image * @coeff: horizontal quadratic * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @interpolate: use this interpolator (default bilinear) * * This operation is unfinished and unusable, sorry. * * See also: vips_affine(). * * Returns: 0 on success, -1 on error */ int vips_quadratic(VipsImage *in, VipsImage **out, VipsImage *coeff, ...) { va_list ap; int result; va_start(ap, coeff); result = vips_call_split("quadratic", ap, in, out, coeff); va_end(ap); return result; } libvips-8.15.1/libvips/resample/reduce.c000066400000000000000000000203201454007373500201560ustar00rootroot00000000000000/* 2D reduce ... call reduceh and reducev * * 27/1/16 * - from shrink.c * 15/8/16 * - rename xshrink -> hshrink for greater consistency * 9/9/16 * - add @centre option * 6/6/20 kleisauke * - deprecate @centre option, it's now always on * 22/4/22 kleisauke * - add @gap option */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "presample.h" /** * VipsKernel: * @VIPS_KERNEL_NEAREST: The nearest pixel to the point. * @VIPS_KERNEL_LINEAR: Convolve with a triangle filter. * @VIPS_KERNEL_CUBIC: Convolve with a cubic filter. * @VIPS_KERNEL_MITCHELL: Convolve with a Mitchell kernel. * @VIPS_KERNEL_LANCZOS2: Convolve with a two-lobe Lanczos kernel. * @VIPS_KERNEL_LANCZOS3: Convolve with a three-lobe Lanczos kernel. * * The resampling kernels vips supports. See vips_reduce(), for example. */ /* gtk-doc does not see comments in C++ files, so we have these docs here. */ /** * vips_reducev: (method) * @in: input image * @out: (out): output image * @vshrink: vertical reduce * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @kernel: #VipsKernel to use to interpolate (default: lanczos3) * * @gap: reducing gap to use (default: 0.0) * * Reduce @in vertically by a float factor. The pixels in @out are * interpolated with a 1D mask generated by @kernel. * * Set @gap to speed up reducing by having vips_shrinkv() to shrink * with a box filter first. The bigger @gap, the closer the result * to the fair resampling. The smaller @gap, the faster resizing. * The default value is 0.0 (no optimization). * * This is a very low-level operation: see vips_resize() for a more * convenient way to resize images. * * This operation does not change xres or yres. The image resolution needs to * be updated by the application. * * See also: vips_shrink(), vips_resize(), vips_affine(). * * Returns: 0 on success, -1 on error */ /** * vips_reduceh: (method) * @in: input image * @out: (out): output image * @hshrink: horizontal reduce * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @kernel: #VipsKernel to use to interpolate (default: lanczos3) * * @gap: reducing gap to use (default: 0.0) * * Reduce @in horizontally by a float factor. The pixels in @out are * interpolated with a 1D mask generated by @kernel. * * Set @gap to speed up reducing by having vips_shrinkh() to shrink * with a box filter first. The bigger @gap, the closer the result * to the fair resampling. The smaller @gap, the faster resizing. * The default value is 0.0 (no optimization). * * This is a very low-level operation: see vips_resize() for a more * convenient way to resize images. * * This operation does not change xres or yres. The image resolution needs to * be updated by the application. * * See also: vips_shrink(), vips_resize(), vips_affine(). * * Returns: 0 on success, -1 on error */ typedef struct _VipsReduce { VipsResample parent_instance; double hshrink; /* Shrink factors */ double vshrink; double gap; /* Reduce gap */ /* The thing we use to make the kernel. */ VipsKernel kernel; /* Deprecated. */ gboolean centre; } VipsReduce; typedef VipsResampleClass VipsReduceClass; G_DEFINE_TYPE(VipsReduce, vips_reduce, VIPS_TYPE_RESAMPLE); static int vips_reduce_build(VipsObject *object) { VipsResample *resample = VIPS_RESAMPLE(object); VipsReduce *reduce = (VipsReduce *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); if (VIPS_OBJECT_CLASS(vips_reduce_parent_class)->build(object)) return -1; if (vips_reducev(resample->in, &t[0], reduce->vshrink, "kernel", reduce->kernel, "gap", reduce->gap, NULL) || vips_reduceh(t[0], &t[1], reduce->hshrink, "kernel", reduce->kernel, "gap", reduce->gap, NULL) || vips_image_write(t[1], resample->out)) return -1; return 0; } static void vips_reduce_class_init(VipsReduceClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VIPS_DEBUG_MSG("vips_reduce_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "reduce"; vobject_class->description = _("reduce an image"); vobject_class->build = vips_reduce_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_DOUBLE(class, "hshrink", 8, _("Hshrink"), _("Horizontal shrink factor"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsReduce, hshrink), 1.0, 1000000.0, 1.0); VIPS_ARG_DOUBLE(class, "vshrink", 9, _("Vshrink"), _("Vertical shrink factor"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsReduce, vshrink), 1.0, 1000000.0, 1.0); VIPS_ARG_ENUM(class, "kernel", 3, _("Kernel"), _("Resampling kernel"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsReduce, kernel), VIPS_TYPE_KERNEL, VIPS_KERNEL_LANCZOS3); VIPS_ARG_DOUBLE(class, "gap", 4, _("Gap"), _("Reducing gap"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsReduce, gap), 0.0, 1000000.0, 0.0); /* The old names .. now use h and v everywhere. */ VIPS_ARG_DOUBLE(class, "xshrink", 8, _("Xshrink"), _("Horizontal shrink factor"), VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsReduce, hshrink), 1.0, 1000000.0, 1.0); VIPS_ARG_DOUBLE(class, "yshrink", 9, _("Yshrink"), _("Vertical shrink factor"), VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsReduce, vshrink), 1.0, 1000000.0, 1.0); /* We used to let people pick centre or corner, but it's automatic now. */ VIPS_ARG_BOOL(class, "centre", 7, _("Centre"), _("Use centre sampling convention"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsReduce, centre), FALSE); } static void vips_reduce_init(VipsReduce *reduce) { reduce->gap = 0.0; reduce->kernel = VIPS_KERNEL_LANCZOS3; } /** * vips_reduce: (method) * @in: input image * @out: (out): output image * @hshrink: horizontal shrink * @vshrink: vertical shrink * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @kernel: #VipsKernel to use to interpolate (default: lanczos3) * * @gap: reducing gap to use (default: 0.0) * * Reduce @in by a pair of factors with a pair of 1D kernels. This * will not work well for shrink factors greater than three. * * Set @gap to speed up reducing by having vips_shrink() to shrink * with a box filter first. The bigger @gap, the closer the result * to the fair resampling. The smaller @gap, the faster resizing. * The default value is 0.0 (no optimization). * * This is a very low-level operation: see vips_resize() for a more * convenient way to resize images. * * This operation does not change xres or yres. The image resolution needs to * be updated by the application. * * See also: vips_shrink(), vips_resize(), vips_affine(). * * Returns: 0 on success, -1 on error */ int vips_reduce(VipsImage *in, VipsImage **out, double hshrink, double vshrink, ...) { va_list ap; int result; va_start(ap, vshrink); result = vips_call_split("reduce", ap, in, out, hshrink, vshrink); va_end(ap); return result; } libvips-8.15.1/libvips/resample/reduceh.cpp000066400000000000000000000364031454007373500206770ustar00rootroot00000000000000/* horizontal reduce by a float factor with a kernel * * 29/1/16 * - from shrinkh.c * 10/3/16 * - add other kernels * 15/8/16 * - rename xshrink as hshrink for consistency * 9/9/16 * - add @centre option * 6/6/20 kleisauke * - deprecate @centre option, it's now always on * - fix pixel shift * 22/4/22 kleisauke * - add @gap option */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include #include "presample.h" #include "templates.h" typedef struct _VipsReduceh { VipsResample parent_instance; double hshrink; /* Reduce factor */ double gap; /* Reduce gap */ /* The thing we use to make the kernel. */ VipsKernel kernel; /* Number of points in kernel. */ int n_point; /* Horizontal displacement. */ double hoffset; /* Precalculated interpolation matrices. short (used for pel * sizes up to int), and double (for all others). We go to * scale + 1 so we can round-to-nearest safely. */ short *matrixs[VIPS_TRANSFORM_SCALE + 1]; double *matrixf[VIPS_TRANSFORM_SCALE + 1]; /* Deprecated. */ gboolean centre; } VipsReduceh; typedef VipsResampleClass VipsReducehClass; /* We need C linkage for this. */ extern "C" { G_DEFINE_TYPE(VipsReduceh, vips_reduceh, VIPS_TYPE_RESAMPLE); } /* Get n points. @shrink is the shrink factor, so 2 for a 50% reduction. */ int vips_reduce_get_points(VipsKernel kernel, double shrink) { switch (kernel) { case VIPS_KERNEL_NEAREST: return 1; case VIPS_KERNEL_LINEAR: return 2 * rint(shrink) + 1; case VIPS_KERNEL_CUBIC: case VIPS_KERNEL_MITCHELL: return 2 * rint(2 * shrink) + 1; case VIPS_KERNEL_LANCZOS2: return 2 * rint(2 * shrink) + 1; case VIPS_KERNEL_LANCZOS3: return 2 * rint(3 * shrink) + 1; default: g_assert_not_reached(); return 0; } } template static void inline reduceh_unsigned_int_tab(VipsReduceh *reduceh, VipsPel *pout, const VipsPel *pin, const int bands, const short *restrict cx) { T *restrict out = (T *) pout; const T *restrict in = (T *) pin; const int n = reduceh->n_point; for (int z = 0; z < bands; z++) { typename LongT::type sum; sum = reduce_sum(in + z, bands, cx, n); sum = unsigned_fixed_round(sum); out[z] = VIPS_CLIP(0, sum, max_value); } } template static void inline reduceh_signed_int_tab(VipsReduceh *reduceh, VipsPel *pout, const VipsPel *pin, const int bands, const short *restrict cx) { T *restrict out = (T *) pout; const T *restrict in = (T *) pin; const int n = reduceh->n_point; for (int z = 0; z < bands; z++) { typename LongT::type sum; sum = reduce_sum(in + z, bands, cx, n); sum = signed_fixed_round(sum); out[z] = VIPS_CLIP(min_value, sum, max_value); } } /* Floating-point version. */ template static void inline reduceh_float_tab(VipsReduceh *reduceh, VipsPel *pout, const VipsPel *pin, const int bands, const double *restrict cx) { T *restrict out = (T *) pout; const T *restrict in = (T *) pin; const int n = reduceh->n_point; for (int z = 0; z < bands; z++) out[z] = reduce_sum(in + z, bands, cx, n); } /* Ultra-high-quality version for double images. */ template static void inline reduceh_notab(VipsReduceh *reduceh, VipsPel *pout, const VipsPel *pin, const int bands, double x) { T *restrict out = (T *) pout; const T *restrict in = (T *) pin; const int n = reduceh->n_point; typename LongT::type cx[MAX_POINT]; vips_reduce_make_mask(cx, reduceh->kernel, reduceh->n_point, reduceh->hshrink, x); for (int z = 0; z < bands; z++) out[z] = reduce_sum(in + z, bands, cx, n); } static int vips_reduceh_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsImage *in = (VipsImage *) a; VipsReduceh *reduceh = (VipsReduceh *) b; const int ps = VIPS_IMAGE_SIZEOF_PEL(in); VipsRegion *ir = (VipsRegion *) seq; VipsRect *r = &out_region->valid; /* Double bands for complex. */ const int bands = in->Bands * (vips_band_format_iscomplex(in->BandFmt) ? 2 : 1); VipsRect s; #ifdef DEBUG printf("vips_reduceh_gen: generating %d x %d at %d x %d\n", r->width, r->height, r->left, r->top); #endif /*DEBUG*/ s.left = r->left * reduceh->hshrink - reduceh->hoffset; s.top = r->top; s.width = r->width * reduceh->hshrink + reduceh->n_point; s.height = r->height; if (vips_region_prepare(ir, &s)) return -1; VIPS_GATE_START("vips_reduceh_gen: work"); for (int y = 0; y < r->height; y++) { VipsPel *p0; VipsPel *q; double X; q = VIPS_REGION_ADDR(out_region, r->left, r->top + y); X = (r->left + 0.5) * reduceh->hshrink - 0.5 - reduceh->hoffset; /* We want p0 to be the start (ie. x == 0) of the input * scanline we are reading from. We can then calculate the p we * need for each pixel with a single mul and avoid calling ADDR * for each pixel. * * We can't get p0 directly with ADDR since it could be outside * valid, so get the leftmost pixel in valid and subtract a * bit. */ p0 = VIPS_REGION_ADDR(ir, ir->valid.left, r->top + y) - ir->valid.left * ps; for (int x = 0; x < r->width; x++) { const int ix = (int) X; VipsPel *p = p0 + ix * ps; const int sx = X * VIPS_TRANSFORM_SCALE * 2; const int six = sx & (VIPS_TRANSFORM_SCALE * 2 - 1); const int tx = (six + 1) >> 1; const short *cxs = reduceh->matrixs[tx]; const double *cxf = reduceh->matrixf[tx]; switch (in->BandFmt) { case VIPS_FORMAT_UCHAR: reduceh_unsigned_int_tab(reduceh, q, p, bands, cxs); break; case VIPS_FORMAT_CHAR: reduceh_signed_int_tab(reduceh, q, p, bands, cxs); break; case VIPS_FORMAT_USHORT: reduceh_unsigned_int_tab(reduceh, q, p, bands, cxs); break; case VIPS_FORMAT_SHORT: reduceh_signed_int_tab(reduceh, q, p, bands, cxs); break; case VIPS_FORMAT_UINT: reduceh_unsigned_int_tab(reduceh, q, p, bands, cxs); break; case VIPS_FORMAT_INT: reduceh_signed_int_tab(reduceh, q, p, bands, cxs); break; case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_COMPLEX: reduceh_float_tab(reduceh, q, p, bands, cxf); break; case VIPS_FORMAT_DOUBLE: case VIPS_FORMAT_DPCOMPLEX: reduceh_notab(reduceh, q, p, bands, X - ix); break; default: g_assert_not_reached(); break; } X += reduceh->hshrink; q += ps; } } VIPS_GATE_STOP("vips_reduceh_gen: work"); VIPS_COUNT_PIXELS(out_region, "vips_reduceh_gen"); return 0; } #ifdef HAVE_HWY static int vips_reduceh_uchar_vector_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { VipsImage *in = (VipsImage *) a; VipsReduceh *reduceh = (VipsReduceh *) b; const int ps = VIPS_IMAGE_SIZEOF_PEL(in); VipsRegion *ir = (VipsRegion *) seq; VipsRect *r = &out_region->valid; const int bands = in->Bands; VipsRect s; #ifdef DEBUG printf("vips_reduceh_uchar_vector_gen: generating %d x %d at %d x %d\n", r->width, r->height, r->left, r->top); #endif /*DEBUG*/ s.left = r->left * reduceh->hshrink - reduceh->hoffset; s.top = r->top; s.width = r->width * reduceh->hshrink + reduceh->n_point; s.height = r->height; if (vips_region_prepare(ir, &s)) return -1; VIPS_GATE_START("vips_reduceh_uchar_vector_gen: work"); for (int y = 0; y < r->height; y++) { VipsPel *p0; VipsPel *q; double X; q = VIPS_REGION_ADDR(out_region, r->left, r->top + y); X = (r->left + 0.5) * reduceh->hshrink - 0.5 - reduceh->hoffset; p0 = VIPS_REGION_ADDR(ir, ir->valid.left, r->top + y) - ir->valid.left * ps; vips_reduceh_uchar_hwy(q, p0, reduceh->n_point, r->width, bands, reduceh->matrixs, X, reduceh->hshrink); } VIPS_GATE_STOP("vips_reduceh_uchar_vector_gen: work"); VIPS_COUNT_PIXELS(out_region, "vips_reduceh_uchar_vector_gen"); return 0; } #endif /*HAVE_HWY*/ static int vips_reduceh_build(VipsObject *object) { VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(object); VipsResample *resample = VIPS_RESAMPLE(object); VipsReduceh *reduceh = (VipsReduceh *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 3); VipsImage *in; VipsGenerateFn generate; int width; int int_hshrink; double extra_pixels; if (VIPS_OBJECT_CLASS(vips_reduceh_parent_class)->build(object)) return -1; in = resample->in; if (reduceh->hshrink < 1.0) { vips_error(object_class->nickname, "%s", _("reduce factor should be >= 1.0")); return -1; } /* Output size. We need to always round to nearest, so round(), not * rint(). */ width = VIPS_ROUND_UINT( (double) in->Xsize / reduceh->hshrink); /* How many pixels we are inventing in the input, -ve for * discarding. */ extra_pixels = width * reduceh->hshrink - in->Xsize; if (reduceh->gap > 0.0 && reduceh->kernel != VIPS_KERNEL_NEAREST) { if (reduceh->gap < 1.0) { vips_error(object_class->nickname, "%s", _("reduce gap should be >= 1.0")); return -1; } /* The int part of our reduce. */ int_hshrink = VIPS_MAX(1, VIPS_FLOOR((double) in->Xsize / width / reduceh->gap)); if (int_hshrink > 1) { g_info("shrinkh by %d", int_hshrink); if (vips_shrinkh(in, &t[0], int_hshrink, "ceil", TRUE, nullptr)) return -1; in = t[0]; reduceh->hshrink /= int_hshrink; extra_pixels /= int_hshrink; } } if (reduceh->hshrink == 1.0) return vips_image_write(in, resample->out); reduceh->n_point = vips_reduce_get_points(reduceh->kernel, reduceh->hshrink); g_info("reduceh: %d point mask", reduceh->n_point); if (reduceh->n_point > MAX_POINT) { vips_error(object_class->nickname, "%s", _("reduce factor too large")); return -1; } /* If we are rounding down, we are not using some input * pixels. We need to move the origin *inside* the input image * by half that distance so that we discard pixels equally * from left and right. */ reduceh->hoffset = (1 + extra_pixels) / 2.0 - 1; /* Build the tables of pre-computed coefficients. */ for (int x = 0; x < VIPS_TRANSFORM_SCALE + 1; x++) { reduceh->matrixf[x] = VIPS_ARRAY(object, reduceh->n_point, double); reduceh->matrixs[x] = VIPS_ARRAY(object, reduceh->n_point, short); if (!reduceh->matrixf[x] || !reduceh->matrixs[x]) return -1; vips_reduce_make_mask(reduceh->matrixf[x], reduceh->kernel, reduceh->n_point, reduceh->hshrink, (float) x / VIPS_TRANSFORM_SCALE); for (int i = 0; i < reduceh->n_point; i++) reduceh->matrixs[x][i] = (short) (reduceh->matrixf[x][i] * VIPS_INTERPOLATE_SCALE); #ifdef DEBUG printf("vips_reduceh_build: mask %d\n ", x); for (int i = 0; i < reduceh->n_point; i++) printf("%d ", reduceh->matrixs[x][i]); printf("\n"); #endif /*DEBUG*/ } /* Unpack for processing. */ if (vips_image_decode(in, &t[1])) return -1; in = t[1]; /* Add new pixels around the input so we can interpolate at the edges. */ if (vips_embed(in, &t[2], VIPS_CEIL(reduceh->n_point / 2.0) - 1, 0, in->Xsize + reduceh->n_point, in->Ysize, "extend", VIPS_EXTEND_COPY, nullptr)) return -1; in = t[2]; /* For uchar input, try to make a vector path. */ #ifdef HAVE_HWY if (in->BandFmt == VIPS_FORMAT_UCHAR && (in->Bands == 4 || in->Bands == 3) && vips_vector_isenabled()) { generate = vips_reduceh_uchar_vector_gen; g_info("reduceh: using vector path"); } else #endif /*HAVE_HWY*/ /* Default to the C path. */ generate = vips_reduceh_gen; if (vips_image_pipelinev(resample->out, VIPS_DEMAND_STYLE_FATSTRIP, in, nullptr)) return -1; /* Don't change xres/yres, leave that to the application layer. For * example, vipsthumbnail knows the true reduce factor (including the * fractional part), we just see the integer part here. */ resample->out->Xsize = width; if (resample->out->Xsize <= 0) { vips_error(object_class->nickname, "%s", _("image has shrunk to nothing")); return -1; } #ifdef DEBUG printf("vips_reduceh_build: reducing %d x %d image to %d x %d\n", in->Xsize, in->Ysize, resample->out->Xsize, resample->out->Ysize); #endif /*DEBUG*/ if (vips_image_generate(resample->out, vips_start_one, generate, vips_stop_one, in, reduceh)) return -1; vips_reorder_margin_hint(resample->out, reduceh->n_point); return 0; } static void vips_reduceh_class_init(VipsReducehClass *reduceh_class) { GObjectClass *gobject_class = G_OBJECT_CLASS(reduceh_class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(reduceh_class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(reduceh_class); VIPS_DEBUG_MSG("vips_reduceh_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "reduceh"; vobject_class->description = _("shrink an image horizontally"); vobject_class->build = vips_reduceh_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_DOUBLE(reduceh_class, "hshrink", 3, _("Hshrink"), _("Horizontal shrink factor"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsReduceh, hshrink), 1.0, 1000000.0, 1.0); VIPS_ARG_ENUM(reduceh_class, "kernel", 4, _("Kernel"), _("Resampling kernel"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsReduceh, kernel), VIPS_TYPE_KERNEL, VIPS_KERNEL_LANCZOS3); VIPS_ARG_DOUBLE(reduceh_class, "gap", 5, _("Gap"), _("Reducing gap"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsReduceh, gap), 0.0, 1000000.0, 0.0); /* Old name. */ VIPS_ARG_DOUBLE(reduceh_class, "xshrink", 3, _("Xshrink"), _("Horizontal shrink factor"), VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsReduceh, hshrink), 1.0, 1000000.0, 1.0); /* We used to let people pick centre or corner, but it's automatic now. */ VIPS_ARG_BOOL(reduceh_class, "centre", 7, _("Centre"), _("Use centre sampling convention"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsReduceh, centre), FALSE); } static void vips_reduceh_init(VipsReduceh *reduceh) { reduceh->gap = 0.0; reduceh->kernel = VIPS_KERNEL_LANCZOS3; } /* See reduce.c for the doc comment. */ int vips_reduceh(VipsImage *in, VipsImage **out, double hshrink, ...) { va_list ap; int result; va_start(ap, hshrink); result = vips_call_split("reduceh", ap, in, out, hshrink); va_end(ap); return result; } libvips-8.15.1/libvips/resample/reduceh_hwy.cpp000066400000000000000000000123561454007373500215670ustar00rootroot00000000000000/* 22/07/23 kleisauke * - from reducev_hwy.cpp */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 021100301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "presample.h" #ifdef HAVE_HWY #undef HWY_TARGET_INCLUDE #define HWY_TARGET_INCLUDE "libvips/resample/reduceh_hwy.cpp" #include #include namespace HWY_NAMESPACE { using namespace hwy::HWY_NAMESPACE; using DI32 = ScalableTag; using DI16 = ScalableTag; using DI8 = ScalableTag; using DU8 = ScalableTag; constexpr DU8 du8; constexpr Rebind du8x32; constexpr DI8 di8; constexpr DI16 di16; constexpr DI32 di32; HWY_ATTR void vips_reduceh_uchar_hwy(VipsPel *pout, VipsPel *pin, int32_t n, int32_t width, int32_t bands, int16_t *HWY_RESTRICT cs[VIPS_TRANSFORM_SCALE + 1], double X, double hshrink) { #if HWY_TARGET != HWY_SCALAR const auto initial = Set(di32, VIPS_INTERPOLATE_SCALE >> 1); /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 * r0 g0 b0 r1 g1 b1 r2 g2 b2 r3 g3 b3 */ alignas(16) static constexpr int8_t tbl3_lo[16] = { 0, -1, 3, -1, 1, -1, 4, -1, 2, -1, 5, -1, -1, -1, -1, -1 }; alignas(16) static constexpr int8_t tbl3_hi[16] = { 6, -1, 9, -1, 7, -1, 10, -1, 8, -1, 11, -1, -1, -1, -1, -1 }; /* 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 * r0 g0 b0 a0 r1 g1 b1 a1 r2 g2 b2 a2 r3 g3 b3 a3 */ alignas(16) static constexpr int8_t tbl4_lo[16] = { 0, -1, 4, -1, 1, -1, 5, -1, 2, -1, 6, -1, 3, -1, 7, -1 }; alignas(16) static constexpr int8_t tbl4_hi[16] = { 8, -1, 12, -1, 9, -1, 13, -1, 10, -1, 14, -1, 11, -1, 15, -1 }; const auto shuf_lo = BitCast(di16, LoadDup128(di8, bands == 3 ? tbl3_lo : tbl4_lo)); const auto shuf_hi = BitCast(di16, LoadDup128(di8, bands == 3 ? tbl3_hi : tbl4_hi)); for (int32_t x = 0; x < width; ++x) { const int ix = (int) X; const int sx = X * VIPS_TRANSFORM_SCALE * 2; const int six = sx & (VIPS_TRANSFORM_SCALE * 2 - 1); const int tx = (six + 1) >> 1; const int16_t *k = cs[tx]; auto *HWY_RESTRICT p = (uint8_t *) pin + ix * bands; auto *HWY_RESTRICT q = (uint8_t *) pout + x * bands; #if HWY_ARCH_X86 || HWY_ARCH_WASM || HWY_TARGET == HWY_EMU128 /* Initialize the sum with the addition on x86 and Wasm, * avoids an extra add instruction. Should be safe given * that only one accumulator is used. */ auto sum0 = initial; #else auto sum0 = Zero(di32); #endif auto sum1 = Zero(di32); /* unused on x86 and Wasm */ int32_t i = 0; for (; i + 4 <= n; i += 4) { /* Load four coefficients. */ auto mmk_lo = BitCast(di16, Set(di32, *(int32_t *) &k[i])); auto mmk_hi = BitCast(di16, Set(di32, *(int32_t *) &k[i + 2])); auto source = LoadU(du8, p); p += bands * 4; auto pix = TableLookupBytesOr0(source, shuf_lo); sum0 = ReorderWidenMulAccumulate(di32, pix, mmk_lo, sum0, /* byref */ sum1); pix = TableLookupBytesOr0(source, shuf_hi); sum0 = ReorderWidenMulAccumulate(di32, pix, mmk_hi, sum0, /* byref */ sum1); } for (; i + 2 <= n; i += 2) { /* Load two coefficients at once. */ auto mmk_lo = BitCast(di16, Set(di32, *(int32_t *) &k[i])); auto source = LoadU(du8, p); p += bands * 2; auto pix = TableLookupBytesOr0(source, shuf_lo); sum0 = ReorderWidenMulAccumulate(di32, pix, mmk_lo, sum0, /* byref */ sum1); } for (; i < n; ++i) { auto mmk = Set(di16, k[i]); auto source = LoadU(du8x32, p); p += bands; auto pix = BitCast(di16, PromoteTo(di32, source)); sum0 = ReorderWidenMulAccumulate(di32, pix, mmk, sum0, /* byref */ sum1); } sum0 = RearrangeToOddPlusEven(sum0, sum1); #if !(HWY_ARCH_X86 || HWY_ARCH_WASM || HWY_TARGET == HWY_EMU128) sum0 = Add(sum0, initial); #endif /* The final 32->8 conversion. */ sum0 = ShiftRight(sum0); auto demoted = DemoteTo(du8x32, sum0); StoreU(demoted, du8x32, q); X += hshrink; } #endif } } /*namespace HWY_NAMESPACE*/ #if HWY_ONCE HWY_EXPORT(vips_reduceh_uchar_hwy); void vips_reduceh_uchar_hwy(VipsPel *pout, VipsPel *pin, int n, int width, int bands, short *restrict cs[VIPS_TRANSFORM_SCALE + 1], double X, double hshrink) { /* clang-format off */ HWY_DYNAMIC_DISPATCH(vips_reduceh_uchar_hwy)(pout, pin, n, width, bands, cs, X, hshrink); /* clang-format on */ } #endif /*HWY_ONCE*/ #endif /*HAVE_HWY*/ libvips-8.15.1/libvips/resample/reducev.cpp000066400000000000000000000667741454007373500207330ustar00rootroot00000000000000/* vertical reduce by a float factor with a kernel * * 29/1/16 * - from shrinkv.c * 10/3/16 * - add other kernels * 21/3/16 * - add vector path * 2/4/16 * - better int mask creation ... we now adjust the scale to keep the sum * equal to the target scale * 15/6/16 * - better accuracy with smarter multiplication * 15/8/16 * - rename yshrink as vshrink for consistency * 9/9/16 * - add @centre option * 7/3/17 * - add a seq line cache * 6/6/20 kleisauke * - deprecate @centre option, it's now always on * - fix pixel shift * - speed up the mask construction for uchar/ushort images * 22/4/22 kleisauke * - add @gap option */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_PIXELS #define DEBUG_COMPILE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include #include "presample.h" #include "templates.h" #ifdef HAVE_ORC #include /* We can't run more than this many passes. Larger than this and we * fall back to C. */ #define MAX_PASS (10) /* The number of params we pass for coeffs. Orc limits this rather. */ #define MAX_PARAM (8 /*ORC_MAX_PARAM_VARS*/) /* A pass with a vector. */ typedef struct { int first; /* The index of the first mask coff we use */ int last; /* The index of the last mask coff we use */ int r; /* Set previous result in this var */ int d1; /* The destination var */ int d2; /* Write new temp result here */ int n_param; int n_scanline; /* The code we generate for this section of this mask. */ OrcProgram *program; } Pass; #endif /*HAVE_ORC*/ typedef struct _VipsReducev { VipsResample parent_instance; double vshrink; /* Reduce factor */ double gap; /* Reduce gap */ /* The thing we use to make the kernel. */ VipsKernel kernel; /* Number of points in kernel. */ int n_point; /* Vertical displacement. */ double voffset; /* Precalculated interpolation matrices. short (used for pel * sizes up to int), and double (for all others). We go to * scale + 1 so we can round-to-nearest safely. */ short *matrixs[VIPS_TRANSFORM_SCALE + 1]; double *matrixf[VIPS_TRANSFORM_SCALE + 1]; #ifdef HAVE_ORC /* And another set for orc: we want 2.6 precision. */ int *matrixo[VIPS_TRANSFORM_SCALE + 1]; /* The passes we generate for this mask. */ int n_pass; Pass pass[MAX_PASS]; #endif /*HAVE_ORC*/ /* Deprecated. */ gboolean centre; } VipsReducev; typedef VipsResampleClass VipsReducevClass; /* We need C linkage for this. */ extern "C" { G_DEFINE_TYPE(VipsReducev, vips_reducev, VIPS_TYPE_RESAMPLE); } /* Our VipsReducevSequence value. */ typedef struct { VipsReducev *reducev; VipsRegion *ir; /* Input region */ #ifdef HAVE_ORC /* In vector mode we need a pair of intermediate buffers to keep the * results of each pass in. */ short *t1; short *t2; #endif /*HAVE_ORC*/ } VipsReducevSequence; static int vips_reducev_stop(void *vseq, void *a, void *b) { VipsReducevSequence *seq = (VipsReducevSequence *) vseq; VIPS_UNREF(seq->ir); #ifdef HAVE_ORC VIPS_FREE(seq->t1); VIPS_FREE(seq->t2); #endif /*HAVE_ORC*/ return 0; } static void * vips_reducev_start(VipsImage *out, void *a, void *b) { VipsImage *in = (VipsImage *) a; VipsReducev *reducev = (VipsReducev *) b; VipsReducevSequence *seq; if (!(seq = VIPS_NEW(out, VipsReducevSequence))) return NULL; /* Init! */ seq->reducev = reducev; seq->ir = NULL; #ifdef HAVE_ORC seq->t1 = NULL; seq->t2 = NULL; #endif /*HAVE_ORC*/ /* Attach region. */ seq->ir = vips_region_new(in); #ifdef HAVE_ORC /* Vector mode. */ if (reducev->n_pass) { seq->t1 = VIPS_ARRAY(NULL, VIPS_IMAGE_N_ELEMENTS(in), short); seq->t2 = VIPS_ARRAY(NULL, VIPS_IMAGE_N_ELEMENTS(in), short); if (!seq->t1 || !seq->t2) { vips_reducev_stop(seq, in, reducev); return NULL; } } #endif /*HAVE_ORC*/ return seq; } #ifdef HAVE_ORC static void vips_reducev_finalize(GObject *gobject) { VipsReducev *reducev = (VipsReducev *) gobject; for (int i = 0; i < reducev->n_pass; i++) VIPS_FREEF(orc_program_free, reducev->pass[i].program); reducev->n_pass = 0; G_OBJECT_CLASS(vips_reducev_parent_class)->finalize(gobject); } #define TEMP(N, S) orc_program_add_temporary(p, S, N) #define PARAM(N, S) orc_program_add_parameter(p, S, N) #define SCANLINE(N, S) orc_program_add_source(p, S, N) #define CONST(N, V, S) orc_program_add_constant(p, S, V, N) #define ASM2(OP, A, B) orc_program_append_ds_str(p, OP, A, B) #define ASM3(OP, A, B, C) orc_program_append_str(p, OP, A, B, C) /* Generate code for a section of the mask. first is the index we start * at, we set last to the index of the last one we use before we run * out of intermediates / constants / parameters / sources or mask * coefficients. * * 0 for success, -1 on error. */ static int vips_reducev_compile_section(VipsReducev *reducev, Pass *pass, gboolean first) { OrcProgram *p; OrcCompileResult result; int i; #ifdef DEBUG_COMPILE printf("starting pass %d\n", pass->first); #endif /*DEBUG_COMPILE*/ pass->program = p = orc_program_new(); pass->d1 = orc_program_add_destination(p, 1, "d1"); /* We have two destinations: the final output image (8-bit) and the * intermediate buffer if this is not the final pass (16-bit). */ pass->d2 = orc_program_add_destination(p, 2, "d2"); /* "r" is the array of sums from the previous pass (if any). */ if (!(pass->r = orc_program_add_source(p, 2, "r"))) return -1; /* The value we fetch from the image, the accumulated sum. */ TEMP("value", 2); TEMP("sum", 2); /* Init the sum. If this is the first pass, it's a constant. If this * is a later pass, we have to init the sum from the result * of the previous pass. */ if (first) { CONST("c32", 32, 2); ASM2("loadpw", "sum", "c32"); } else ASM2("loadw", "sum", "r"); for (i = pass->first; i < reducev->n_point; i++) { char source[256]; char coeff[256]; vips_snprintf(source, 256, "sl%d", i); SCANLINE(source, 1); pass->n_scanline++; /* This mask coefficient. */ vips_snprintf(coeff, 256, "p%d", i); PARAM(coeff, 2); if (++pass->n_param >= MAX_PARAM) return -1; /* Mask coefficients are 2.6 bits fixed point. We need to hold * about -0.5 to 1.0, so -2 to +1.999 is as close as we can * get. * * We need a signed multiply, so the image pixel needs to * become a signed 16-bit value. We know only the bottom 8 bits * of the image and coefficient are interesting, so we can take * the bottom bits of a 16x16->32 multiply. * * We accumulate the signed 16-bit result in sum. Saturated * add. */ ASM2("convubw", "value", source); ASM3("mullw", "value", "value", coeff); ASM3("addssw", "sum", "sum", "value"); /* orc 0.4.24 and earlier hate more than about five lines at * once :( */ if (pass->n_scanline > 4) break; } pass->last = i; /* If this is the end of the mask, we write the 8-bit result to the * image, otherwise write the 16-bit intermediate to our temp buffer. */ if (pass->last >= reducev->n_point - 1) { CONST("c6", 6, 2); ASM3("shrsw", "sum", "sum", "c6"); ASM2("convsuswb", "d1", "sum"); } else ASM2("copyw", "d2", "sum"); /* Some orcs seem to be unstable with many compilers active at once. */ g_mutex_lock(vips__global_lock); result = orc_program_compile(p); g_mutex_unlock(vips__global_lock); if (!ORC_COMPILE_RESULT_IS_SUCCESSFUL(result)) return -1; #ifdef DEBUG_COMPILE printf("done coeffs %d to %d\n", pass->first, pass->last); #endif /*DEBUG_COMPILE*/ return 0; } static int vips_reducev_compile(VipsReducev *reducev) { Pass *pass; /* Generate passes until we've used up the whole mask. */ for (int i = 0;;) { /* Allocate space for another pass. */ if (reducev->n_pass == MAX_PASS) return -1; pass = &reducev->pass[reducev->n_pass]; reducev->n_pass += 1; pass->first = i; pass->r = -1; pass->d1 = -1; pass->d2 = -1; pass->n_param = 0; pass->n_scanline = 0; if (vips_reducev_compile_section(reducev, pass, reducev->n_pass == 1)) return -1; i = pass->last + 1; if (i >= reducev->n_point) break; } return 0; } #endif /*HAVE_ORC*/ /* You'd think this would vectorise, but gcc hates mixed types in nested loops * :-( */ template static void inline reducev_unsigned_int_tab(VipsReducev *reducev, VipsPel *pout, const VipsPel *pin, const int ne, const int lskip, const short *restrict cy) { T *restrict out = (T *) pout; const T *restrict in = (T *) pin; const int n = reducev->n_point; const int l1 = lskip / sizeof(T); for (int z = 0; z < ne; z++) { typename LongT::type sum; sum = reduce_sum(in + z, l1, cy, n); sum = unsigned_fixed_round(sum); out[z] = VIPS_CLIP(0, sum, max_value); } } template static void inline reducev_signed_int_tab(VipsReducev *reducev, VipsPel *pout, const VipsPel *pin, const int ne, const int lskip, const short *restrict cy) { T *restrict out = (T *) pout; const T *restrict in = (T *) pin; const int n = reducev->n_point; const int l1 = lskip / sizeof(T); for (int z = 0; z < ne; z++) { typename LongT::type sum; sum = reduce_sum(in + z, l1, cy, n); sum = signed_fixed_round(sum); out[z] = VIPS_CLIP(min_value, sum, max_value); } } /* Floating-point version. */ template static void inline reducev_float_tab(VipsReducev *reducev, VipsPel *pout, const VipsPel *pin, const int ne, const int lskip, const double *restrict cy) { T *restrict out = (T *) pout; const T *restrict in = (T *) pin; const int n = reducev->n_point; const int l1 = lskip / sizeof(T); for (int z = 0; z < ne; z++) out[z] = reduce_sum(in + z, l1, cy, n); } /* Ultra-high-quality version for double images. */ template static void inline reducev_notab(VipsReducev *reducev, VipsPel *pout, const VipsPel *pin, const int ne, const int lskip, double y) { T *restrict out = (T *) pout; const T *restrict in = (T *) pin; const int n = reducev->n_point; const int l1 = lskip / sizeof(T); typename LongT::type cy[MAX_POINT]; vips_reduce_make_mask(cy, reducev->kernel, reducev->n_point, reducev->vshrink, y); for (int z = 0; z < ne; z++) out[z] = reduce_sum(in + z, l1, cy, n); } static int vips_reducev_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsImage *in = (VipsImage *) a; VipsReducev *reducev = (VipsReducev *) b; VipsReducevSequence *seq = (VipsReducevSequence *) vseq; VipsRegion *ir = seq->ir; VipsRect *r = &out_region->valid; /* Double bands for complex. */ const int bands = in->Bands * (vips_band_format_iscomplex(in->BandFmt) ? 2 : 1); int ne = r->width * bands; VipsRect s; #ifdef DEBUG printf("vips_reducev_gen: generating %d x %d at %d x %d\n", r->width, r->height, r->left, r->top); #endif /*DEBUG*/ s.left = r->left; s.top = r->top * reducev->vshrink - reducev->voffset; s.width = r->width; s.height = r->height * reducev->vshrink + reducev->n_point; if (vips_region_prepare(ir, &s)) return -1; VIPS_GATE_START("vips_reducev_gen: work"); double Y = (r->top + 0.5) * reducev->vshrink - 0.5 - reducev->voffset; for (int y = 0; y < r->height; y++) { VipsPel *q = VIPS_REGION_ADDR(out_region, r->left, r->top + y); const int py = (int) Y; VipsPel *p = VIPS_REGION_ADDR(ir, r->left, py); const int sy = Y * VIPS_TRANSFORM_SCALE * 2; const int siy = sy & (VIPS_TRANSFORM_SCALE * 2 - 1); const int ty = (siy + 1) >> 1; const short *cys = reducev->matrixs[ty]; const double *cyf = reducev->matrixf[ty]; const int lskip = VIPS_REGION_LSKIP(ir); switch (in->BandFmt) { case VIPS_FORMAT_UCHAR: reducev_unsigned_int_tab(reducev, q, p, ne, lskip, cys); break; case VIPS_FORMAT_CHAR: reducev_signed_int_tab(reducev, q, p, ne, lskip, cys); break; case VIPS_FORMAT_USHORT: reducev_unsigned_int_tab(reducev, q, p, ne, lskip, cys); break; case VIPS_FORMAT_SHORT: reducev_signed_int_tab(reducev, q, p, ne, lskip, cys); break; case VIPS_FORMAT_UINT: reducev_unsigned_int_tab(reducev, q, p, ne, lskip, cys); break; case VIPS_FORMAT_INT: reducev_signed_int_tab(reducev, q, p, ne, lskip, cys); break; case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_COMPLEX: reducev_float_tab(reducev, q, p, ne, lskip, cyf); break; case VIPS_FORMAT_DPCOMPLEX: case VIPS_FORMAT_DOUBLE: reducev_notab(reducev, q, p, ne, lskip, Y - py); break; default: g_assert_not_reached(); break; } Y += reducev->vshrink; } VIPS_GATE_STOP("vips_reducev_gen: work"); VIPS_COUNT_PIXELS(out_region, "vips_reducev_gen"); return 0; } #ifdef HAVE_HWY static int vips_reducev_uchar_vector_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsImage *in = (VipsImage *) a; VipsReducev *reducev = (VipsReducev *) b; VipsReducevSequence *seq = (VipsReducevSequence *) vseq; VipsRegion *ir = seq->ir; VipsRect *r = &out_region->valid; const int bands = in->Bands; int ne = r->width * bands; VipsRect s; #ifdef DEBUG printf("vips_reducev_uchar_vector_gen: generating %d x %d at %d x %d\n", r->width, r->height, r->left, r->top); #endif /*DEBUG*/ s.left = r->left; s.top = r->top * reducev->vshrink - reducev->voffset; s.width = r->width; s.height = r->height * reducev->vshrink + reducev->n_point; if (vips_region_prepare(ir, &s)) return -1; VIPS_GATE_START("vips_reducev_uchar_vector_gen: work"); double Y = (r->top + 0.5) * reducev->vshrink - 0.5 - reducev->voffset; for (int y = 0; y < r->height; y++) { VipsPel *q = VIPS_REGION_ADDR(out_region, r->left, r->top + y); const int py = (int) Y; VipsPel *p = VIPS_REGION_ADDR(ir, r->left, py); const int sy = Y * VIPS_TRANSFORM_SCALE * 2; const int siy = sy & (VIPS_TRANSFORM_SCALE * 2 - 1); const int ty = (siy + 1) >> 1; const short *cys = reducev->matrixs[ty]; const int lskip = VIPS_REGION_LSKIP(ir); vips_reducev_uchar_hwy( q, p, reducev->n_point, ne, lskip, cys); Y += reducev->vshrink; } VIPS_GATE_STOP("vips_reducev_uchar_vector_gen: work"); VIPS_COUNT_PIXELS(out_region, "vips_reducev_uchar_vector_gen"); return 0; } #elif defined(HAVE_ORC) /* Process uchar images with a vector path. */ static int vips_reducev_vector_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsImage *in = (VipsImage *) a; VipsReducev *reducev = (VipsReducev *) b; VipsReducevSequence *seq = (VipsReducevSequence *) vseq; VipsRegion *ir = seq->ir; VipsRect *r = &out_region->valid; int ne = r->width * in->Bands; OrcExecutor executor[MAX_PASS]; VipsRect s; #ifdef DEBUG_PIXELS printf("vips_reducev_vector_gen: generating %d x %d at %d x %d\n", r->width, r->height, r->left, r->top); #endif /*DEBUG_PIXELS*/ s.left = r->left; s.top = r->top * reducev->vshrink - reducev->voffset; s.width = r->width; s.height = r->height * reducev->vshrink + reducev->n_point; if (vips_region_prepare(ir, &s)) return -1; #ifdef DEBUG_PIXELS printf("vips_reducev_vector_gen: preparing %d x %d at %d x %d\n", s.width, s.height, s.left, s.top); #endif /*DEBUG_PIXELS*/ for (int i = 0; i < reducev->n_pass; i++) { orc_executor_set_program(&executor[i], reducev->pass[i].program); orc_executor_set_n(&executor[i], ne); } VIPS_GATE_START("vips_reducev_vector_gen: work"); double Y = (r->top + 0.5) * reducev->vshrink - 0.5 - reducev->voffset; for (int y = 0; y < r->height; y++) { VipsPel *q = VIPS_REGION_ADDR(out_region, r->left, r->top + y); const int py = (int) Y; const int sy = Y * VIPS_TRANSFORM_SCALE * 2; const int siy = sy & (VIPS_TRANSFORM_SCALE * 2 - 1); const int ty = (siy + 1) >> 1; const int *cyo = reducev->matrixo[ty]; #ifdef DEBUG_PIXELS printf("starting row %d\n", y + r->top); printf("coefficients:\n"); for (int i = 0; i < reducev->n_point; i++) printf("\t%d - %d\n", i, cyo[i]); printf("first column of pixel values:\n"); for (int i = 0; i < reducev->n_point; i++) printf("\t%d - %d\n", i, *VIPS_REGION_ADDR(ir, r->left, py)); #endif /*DEBUG_PIXELS*/ /* We run our n passes to generate this scanline. */ for (int i = 0; i < reducev->n_pass; i++) { Pass *pass = &reducev->pass[i]; for (int j = 0; j < pass->n_scanline; j++) orc_executor_set_array(&executor[i], pass->r + 1 + j, VIPS_REGION_ADDR(ir, r->left, py + j + pass->first)); orc_executor_set_array(&executor[i], pass->r, seq->t1); orc_executor_set_array(&executor[i], pass->d2, seq->t2); for (int j = 0; j < pass->n_param; j++) orc_executor_set_param(&executor[i], ORC_VAR_P1 + j, cyo[j + pass->first]); orc_executor_set_array(&executor[i], pass->d1, q); orc_executor_run(&executor[i]); VIPS_SWAP(signed short *, seq->t1, seq->t2); } #ifdef DEBUG_PIXELS printf("pixel result:\n"); printf("\t%d\n", *q); #endif /*DEBUG_PIXELS*/ Y += reducev->vshrink; } VIPS_GATE_STOP("vips_reducev_vector_gen: work"); VIPS_COUNT_PIXELS(out_region, "vips_reducev_vector_gen"); return 0; } /* Make a fixed-point version of a matrix. Each * out[i] = rint(in[i] * adj_scale), where adj_scale is selected so that * sum(out) = sum(in) * scale. * * Because of the vagaries of rint(), we can't just calc this, we have to * iterate and converge on the best value for adj_scale. */ static void vips_reducev_vector_to_fixed_point(double *in, int *out, int n, int scale) { double fsum; int i; int target; int sum; double high; double low; double guess; fsum = 0.0; for (i = 0; i < n; i++) fsum += in[i]; target = VIPS_RINT(fsum * scale); /* As we rint() each scale element, we can get up to 0.5 error. * Therefore, by the end of the mask, we can be off by up to n/2. Our * high and low guesses are therefore n/2 either side of the obvious * answer. */ high = scale + (n + 1) / 2; low = scale - (n + 1) / 2; do { guess = (high + low) / 2.0; for (i = 0; i < n; i++) out[i] = VIPS_RINT(in[i] * guess); sum = 0; for (i = 0; i < n; i++) sum += out[i]; if (sum == target) break; if (sum < target) low = guess; if (sum > target) high = guess; /* This will typically produce about 5 iterations. */ } while (high - low > 0.01); if (sum != target) { /* Spread the error out thinly over the whole array. For * example, consider the matrix: * * 3 3 9 0 * 1 1 1 * 1 1 1 * 1 1 1 * * being converted with scale = 64 (convi does this). We want * to generate a mix of 7s and 8s. */ int each_error = (target - sum) / n; int extra_error = (target - sum) % n; /* To share the residual error, we add or subtract 1 from the * first abs(extra_error) elements. */ int direction = extra_error > 0 ? 1 : -1; int n_elements = VIPS_ABS(extra_error); for (i = 0; i < n; i++) out[i] += each_error; for (i = 0; i < n_elements; i++) out[i] += direction; } } #endif /*HAVE_HWY*/ static int vips_reducev_build(VipsObject *object) { VipsObjectClass *object_class = VIPS_OBJECT_GET_CLASS(object); VipsResample *resample = VIPS_RESAMPLE(object); VipsReducev *reducev = (VipsReducev *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 5); VipsImage *in; VipsGenerateFn generate; int height; int int_vshrink; double extra_pixels; if (VIPS_OBJECT_CLASS(vips_reducev_parent_class)->build(object)) return -1; in = resample->in; if (reducev->vshrink < 1.0) { vips_error(object_class->nickname, "%s", _("reduce factor should be >= 1.0")); return -1; } /* Output size. We need to always round to nearest, so round(), not * rint(). */ height = VIPS_ROUND_UINT( (double) in->Ysize / reducev->vshrink); /* How many pixels we are inventing in the input, -ve for * discarding. */ extra_pixels = height * reducev->vshrink - in->Ysize; if (reducev->gap > 0.0 && reducev->kernel != VIPS_KERNEL_NEAREST) { if (reducev->gap < 1.0) { vips_error(object_class->nickname, "%s", _("reduce gap should be >= 1.0")); return -1; } /* The int part of our reduce. */ int_vshrink = VIPS_MAX(1, VIPS_FLOOR((double) in->Ysize / height / reducev->gap)); if (int_vshrink > 1) { g_info("shrinkv by %d", int_vshrink); if (vips_shrinkv(in, &t[0], int_vshrink, "ceil", TRUE, nullptr)) return -1; in = t[0]; reducev->vshrink /= int_vshrink; extra_pixels /= int_vshrink; } } if (reducev->vshrink == 1.0) return vips_image_write(in, resample->out); reducev->n_point = vips_reduce_get_points(reducev->kernel, reducev->vshrink); g_info("reducev: %d point mask", reducev->n_point); if (reducev->n_point > MAX_POINT) { vips_error(object_class->nickname, "%s", _("reduce factor too large")); return -1; } /* If we are rounding down, we are not using some input * pixels. We need to move the origin *inside* the input image * by half that distance so that we discard pixels equally * from left and right. */ reducev->voffset = (1 + extra_pixels) / 2.0 - 1; /* Build the tables of pre-computed coefficients. */ for (int y = 0; y < VIPS_TRANSFORM_SCALE + 1; y++) { reducev->matrixf[y] = VIPS_ARRAY(object, reducev->n_point, double); reducev->matrixs[y] = VIPS_ARRAY(object, reducev->n_point, short); if (!reducev->matrixf[y] || !reducev->matrixs[y]) return -1; vips_reduce_make_mask(reducev->matrixf[y], reducev->kernel, reducev->n_point, reducev->vshrink, (float) y / VIPS_TRANSFORM_SCALE); for (int i = 0; i < reducev->n_point; i++) reducev->matrixs[y][i] = (short) (reducev->matrixf[y][i] * VIPS_INTERPOLATE_SCALE); #ifdef DEBUG printf("vips_reducev_build: mask %d\n ", y); for (int i = 0; i < reducev->n_point; i++) printf("%d ", reducev->matrixs[y][i]); printf("\n"); #endif /*DEBUG*/ } /* Unpack for processing. */ if (vips_image_decode(in, &t[1])) return -1; in = t[1]; /* Add new pixels around the input so we can interpolate at the edges. */ if (vips_embed(in, &t[2], 0, VIPS_CEIL(reducev->n_point / 2.0) - 1, in->Xsize, in->Ysize + reducev->n_point, "extend", VIPS_EXTEND_COPY, nullptr)) return -1; in = t[2]; /* For uchar input, try to make a vector path. */ #ifdef HAVE_HWY if (in->BandFmt == VIPS_FORMAT_UCHAR && vips_vector_isenabled()) { generate = vips_reducev_uchar_vector_gen; g_info("reducev: using vector path"); } else #elif defined(HAVE_ORC) if (in->BandFmt == VIPS_FORMAT_UCHAR && vips_vector_isenabled() && !vips_reducev_compile(reducev)) { generate = vips_reducev_vector_gen; g_info("reducev: using vector path"); /* We need an 2.6 version if we will use the vector path. */ for (int y = 0; y < VIPS_TRANSFORM_SCALE + 1; y++) { reducev->matrixo[y] = VIPS_ARRAY(object, reducev->n_point, int); if (!reducev->matrixo[y]) return -1; vips_reducev_vector_to_fixed_point( reducev->matrixf[y], reducev->matrixo[y], reducev->n_point, 64); } } else #endif /*HAVE_HWY*/ /* Default to the C path. */ generate = vips_reducev_gen; t[3] = vips_image_new(); if (vips_image_pipelinev(t[3], VIPS_DEMAND_STYLE_FATSTRIP, in, nullptr)) return -1; /* Size output. We need to always round to nearest, so round(), not * rint(). * * Don't change xres/yres, leave that to the application layer. For * example, vipsthumbnail knows the true reduce factor (including the * fractional part), we just see the integer part here. */ t[3]->Ysize = height; if (t[3]->Ysize <= 0) { vips_error(object_class->nickname, "%s", _("image has shrunk to nothing")); return -1; } #ifdef DEBUG printf("vips_reducev_build: reducing %d x %d image to %d x %d\n", in->Xsize, in->Ysize, t[3]->Xsize, t[3]->Ysize); #endif /*DEBUG*/ if (vips_image_generate(t[3], vips_reducev_start, generate, vips_reducev_stop, in, reducev)) return -1; in = t[3]; vips_reorder_margin_hint(in, reducev->n_point); /* Large reducev will throw off sequential mode. Suppose thread1 is * generating tile (0, 0), but stalls. thread2 generates tile * (0, 1), 128 lines further down the output. After it has done, * thread1 tries to generate (0, 0), but by then the pixels it needs * have gone from the input image line cache if the reducev is large. * * To fix this, put another seq on the output of reducev. Now we'll * always have the previous XX lines of the shrunk image, and we won't * fetch out of order. */ if (vips_image_is_sequential(in)) { g_info("reducev sequential line cache"); if (vips_sequential(in, &t[4], "tile_height", 10, // "trace", TRUE, nullptr)) return -1; in = t[4]; } if (vips_image_write(in, resample->out)) return -1; return 0; } static void vips_reducev_class_init(VipsReducevClass *reducev_class) { GObjectClass *gobject_class = G_OBJECT_CLASS(reducev_class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(reducev_class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(reducev_class); VIPS_DEBUG_MSG("vips_reducev_class_init\n"); #ifdef HAVE_ORC gobject_class->finalize = vips_reducev_finalize; #endif /*HAVE_ORC*/ gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "reducev"; vobject_class->description = _("shrink an image vertically"); vobject_class->build = vips_reducev_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_DOUBLE(reducev_class, "vshrink", 3, _("Vshrink"), _("Vertical shrink factor"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsReducev, vshrink), 1.0, 1000000.0, 1.0); VIPS_ARG_ENUM(reducev_class, "kernel", 4, _("Kernel"), _("Resampling kernel"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsReducev, kernel), VIPS_TYPE_KERNEL, VIPS_KERNEL_LANCZOS3); VIPS_ARG_DOUBLE(reducev_class, "gap", 5, _("Gap"), _("Reducing gap"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsReducev, gap), 0.0, 1000000.0, 0.0); /* Old name. */ VIPS_ARG_DOUBLE(reducev_class, "yshrink", 3, _("Yshrink"), _("Vertical shrink factor"), VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsReducev, vshrink), 1.0, 1000000.0, 1.0); /* We used to let people pick centre or corner, but it's automatic now. */ VIPS_ARG_BOOL(reducev_class, "centre", 7, _("Centre"), _("Use centre sampling convention"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsReducev, centre), FALSE); } static void vips_reducev_init(VipsReducev *reducev) { reducev->gap = 0.0; reducev->kernel = VIPS_KERNEL_LANCZOS3; } /* See reduce.c for the doc comment. */ int vips_reducev(VipsImage *in, VipsImage **out, double vshrink, ...) { va_list ap; int result; va_start(ap, vshrink); result = vips_call_split("reducev", ap, in, out, vshrink); va_end(ap); return result; } libvips-8.15.1/libvips/resample/reducev_hwy.cpp000066400000000000000000000176371454007373500216140ustar00rootroot00000000000000/* 19/08/22 kleisauke * - initial implementation * 07/09/22 kleisauke * - implement using ReorderWidenMulAccumulate * 29/11/22 kleisauke * - prefer use of RearrangeToOddPlusEven */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "presample.h" #ifdef HAVE_HWY #undef HWY_TARGET_INCLUDE #define HWY_TARGET_INCLUDE "libvips/resample/reducev_hwy.cpp" #include #include namespace HWY_NAMESPACE { using namespace hwy::HWY_NAMESPACE; using DI32 = ScalableTag; using DI16 = ScalableTag; using DU8 = ScalableTag; constexpr DU8 du8; constexpr Rebind du8x16; constexpr Rebind du8x32; constexpr DI16 di16; constexpr DI32 di32; HWY_ATTR void vips_reducev_uchar_hwy(VipsPel *pout, VipsPel *pin, int32_t n, int32_t ne, int32_t lskip, const int16_t *HWY_RESTRICT k) { #if HWY_TARGET != HWY_SCALAR const auto l1 = lskip / sizeof(uint8_t); #if HWY_ARCH_RVV || (HWY_ARCH_ARM_A64 && HWY_TARGET <= HWY_SVE) /* Ensure we do not cross 128-bit block boundaries on RVV/SVE. */ const int32_t N = 16; #else const int32_t N = Lanes(du8); #endif const auto zero = Zero(du8); const auto initial = Set(di32, VIPS_INTERPOLATE_SCALE >> 1); /* Main loop: unrolled. */ int32_t x = 0; for (; x + N <= ne; x += N) { auto *HWY_RESTRICT p = (uint8_t *) pin + x; auto *HWY_RESTRICT q = (uint8_t *) pout + x; #if HWY_ARCH_X86 || HWY_ARCH_WASM || HWY_TARGET == HWY_EMU128 /* Initialize the sum with the addition on x86 and Wasm, * avoids an extra add instruction. Should be safe given * that only one accumulator is used. */ auto sum0 = initial; auto sum2 = initial; auto sum4 = initial; auto sum6 = initial; #else auto sum0 = Zero(di32); auto sum2 = Zero(di32); auto sum4 = Zero(di32); auto sum6 = Zero(di32); #endif auto sum1 = Zero(di32); /* unused on x86 and Wasm */ auto sum3 = Zero(di32); /* unused on x86 and Wasm */ auto sum5 = Zero(di32); /* unused on x86 and Wasm */ auto sum7 = Zero(di32); /* unused on x86 and Wasm */ int32_t i = 0; for (; i + 2 <= n; i += 2) { /* Load two coefficients at once. */ auto mmk = BitCast(di16, Set(di32, *(int32_t *) &k[i])); auto top = LoadU(du8, p); /* top line */ p += l1; auto bottom = LoadU(du8, p); /* bottom line */ p += l1; auto source = InterleaveLower(top, bottom); auto pix = BitCast(di16, InterleaveLower(source, zero)); sum0 = ReorderWidenMulAccumulate(di32, pix, mmk, sum0, /* byref */ sum1); pix = BitCast(di16, InterleaveUpper(du8, source, zero)); sum2 = ReorderWidenMulAccumulate(di32, pix, mmk, sum2, /* byref */ sum3); source = InterleaveUpper(du8, top, bottom); pix = BitCast(di16, InterleaveLower(source, zero)); sum4 = ReorderWidenMulAccumulate(di32, pix, mmk, sum4, /* byref */ sum5); pix = BitCast(di16, InterleaveUpper(du8, source, zero)); sum6 = ReorderWidenMulAccumulate(di32, pix, mmk, sum6, /* byref */ sum7); } for (; i < n; ++i) { auto mmk = Set(di16, k[i]); auto top = LoadU(du8, p); p += l1; auto source = InterleaveLower(top, zero); auto pix = BitCast(di16, InterleaveLower(source, zero)); sum0 = ReorderWidenMulAccumulate(di32, pix, mmk, sum0, /* byref */ sum1); pix = BitCast(di16, InterleaveUpper(du8, source, zero)); sum2 = ReorderWidenMulAccumulate(di32, pix, mmk, sum2, /* byref */ sum3); source = InterleaveUpper(du8, top, zero); pix = BitCast(di16, InterleaveLower(source, zero)); sum4 = ReorderWidenMulAccumulate(di32, pix, mmk, sum4, /* byref */ sum5); pix = BitCast(di16, InterleaveUpper(du8, source, zero)); sum6 = ReorderWidenMulAccumulate(di32, pix, mmk, sum6, /* byref */ sum7); } sum0 = RearrangeToOddPlusEven(sum0, sum1); sum2 = RearrangeToOddPlusEven(sum2, sum3); sum4 = RearrangeToOddPlusEven(sum4, sum5); sum6 = RearrangeToOddPlusEven(sum6, sum7); #if !(HWY_ARCH_X86 || HWY_ARCH_WASM || HWY_TARGET == HWY_EMU128) sum0 = Add(sum0, initial); sum2 = Add(sum2, initial); sum4 = Add(sum4, initial); sum6 = Add(sum6, initial); #endif /* The final 32->8 conversion. */ sum0 = ShiftRight(sum0); sum2 = ShiftRight(sum2); sum4 = ShiftRight(sum4); sum6 = ShiftRight(sum6); #if HWY_ARCH_RVV || (HWY_ARCH_ARM_A64 && HWY_TARGET <= HWY_SVE) /* RVV/SVE defines demotion as writing to the upper or lower half * of each lane, rather than compacting them within a vector. */ auto demoted0 = DemoteTo(du8x32, sum0); auto demoted1 = DemoteTo(du8x32, sum2); auto demoted2 = DemoteTo(du8x32, sum4); auto demoted3 = DemoteTo(du8x32, sum6); StoreU(demoted0, du8x32, q + 0 * N / 4); StoreU(demoted1, du8x32, q + 1 * N / 4); StoreU(demoted2, du8x32, q + 2 * N / 4); StoreU(demoted3, du8x32, q + 3 * N / 4); #else auto demoted0 = ReorderDemote2To(di16, sum0, sum2); auto demoted2 = ReorderDemote2To(di16, sum4, sum6); auto demoted = ReorderDemote2To(du8, demoted0, demoted2); StoreU(demoted, du8, q); #endif } /* `ne` was not a multiple of the vector length `N`; * proceed one by one. */ for (; x < ne; ++x) { auto *HWY_RESTRICT p = (uint8_t *) pin + x; auto *HWY_RESTRICT q = (uint8_t *) pout + x; #if HWY_ARCH_X86 || HWY_ARCH_WASM || HWY_TARGET == HWY_EMU128 /* Initialize the sum with the addition on x86 and Wasm, * avoids an extra add instruction. Should be safe given * that only one accumulator is used. */ auto sum0 = initial; #else auto sum0 = Zero(di32); #endif auto sum1 = Zero(di32); /* unused on x86 and Wasm */ int32_t i = 0; for (; i + 2 <= n; i += 2) { /* Load two coefficients at once. */ auto mmk = BitCast(di16, Set(di32, *(int32_t *) &k[i])); auto top = LoadU(du8x16, p); /* top line */ p += l1; auto bottom = LoadU(du8x16, p); /* bottom line */ p += l1; auto source = InterleaveLower(top, bottom); auto pix = PromoteTo(di16, source); sum0 = ReorderWidenMulAccumulate(di32, pix, mmk, sum0, /* byref */ sum1); } for (; i < n; ++i) { auto mmk = Set(di16, k[i]); auto top = LoadU(du8x32, p); p += l1; auto source = PromoteTo(di32, top); auto pix = BitCast(di16, source); sum0 = ReorderWidenMulAccumulate(di32, pix, mmk, sum0, /* byref */ sum1); } sum0 = RearrangeToOddPlusEven(sum0, sum1); #if !(HWY_ARCH_X86 || HWY_ARCH_WASM || HWY_TARGET == HWY_EMU128) sum0 = Add(sum0, initial); #endif /* The final 32->8 conversion. */ sum0 = ShiftRight(sum0); auto demoted = DemoteTo(du8x32, sum0); *q = GetLane(demoted); } #endif } } /*namespace HWY_NAMESPACE*/ #if HWY_ONCE HWY_EXPORT(vips_reducev_uchar_hwy); void vips_reducev_uchar_hwy(VipsPel *pout, VipsPel *pin, int n, int ne, int lskip, const short *restrict k) { /* clang-format off */ HWY_DYNAMIC_DISPATCH(vips_reducev_uchar_hwy)(pout, pin, n, ne, lskip, k); /* clang-format on */ } #endif /*HWY_ONCE*/ #endif /*HAVE_HWY*/ libvips-8.15.1/libvips/resample/resample.c000066400000000000000000000132561454007373500205310ustar00rootroot00000000000000/* base class for all resample operations * * properties: * - one in, one out * - not point-to-point * - size can change in any way * - bands, type, format etc. all fixed */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include "presample.h" /** * SECTION: resample * @short_description: resample images in various ways * @stability: Stable * @include: vips/vips.h * * These operations build on each other in a set of layers. * * First, vips_affine() applies an affine transform to an image. This is any * sort of 2D transform which preserves straight lines; so any combination of * stretch, sheer, rotate and translate. You supply an interpolator for it to * use to generate pixels, see vips_interpolate_new(). It will not produce * good results for very large shrinks: you'll see aliasing. * * vips_reduce() is like vips_affine(), but it can only shrink images, it can't * enlarge, rotate, or skew. It's very fast and uses an adaptive kernel for * interpolation. * * vips_shrink() is a fast block shrinker. It can quickly reduce images by * large integer factors. It will give poor results for small size reductions: * again, you'll see aliasing. * * Next, vips_resize() specialises in the common task of image reduce and * enlarge. It strings together combinations of vips_shrink(), vips_reduce(), * vips_affine() and others to implement a general, high-quality image * resizer. * * Finally, vips_thumbnail() combines load and resize in one operation, and adds * colour management and correct handling of alpha transparency. Because load * and resize happen together, it can exploit tricks like JPEG and TIFF * shrink-on-load, giving a (potentially) huge speedup. vips_thumbnail_image() * is only there for emergencies, don't use it unless you really have to. * * As a separate thing, `vips_mapim() can apply arbitrary 2D image transforms * to an image. */ /** * VipsSize: * @VIPS_SIZE_BOTH: size both up and down * @VIPS_SIZE_UP: only upsize * @VIPS_SIZE_DOWN: only downsize * @VIPS_SIZE_FORCE: force size, that is, break aspect ratio * * Controls whether an operation should upsize, downsize, both up and * downsize, or force a size. * * See also: vips_thumbnail(). */ G_DEFINE_ABSTRACT_TYPE(VipsResample, vips_resample, VIPS_TYPE_OPERATION); static int vips_resample_build(VipsObject *object) { VipsResample *resample = VIPS_RESAMPLE(object); #ifdef DEBUG printf("vips_resample_build: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ g_object_set(resample, "out", vips_image_new(), NULL); if (VIPS_OBJECT_CLASS(vips_resample_parent_class)->build(object)) return -1; return 0; } static void vips_resample_class_init(VipsResampleClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "resample"; vobject_class->description = _("resample operations"); vobject_class->build = vips_resample_build; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image argument"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsResample, in)); VIPS_ARG_IMAGE(class, "out", 2, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsResample, out)); } static void vips_resample_init(VipsResample *resample) { } /* Called from iofuncs to init all operations in this dir. Use a plugin system * instead? */ void vips_resample_operation_init(void) { extern GType vips_thumbnail_file_get_type(void); extern GType vips_thumbnail_buffer_get_type(void); extern GType vips_thumbnail_image_get_type(void); extern GType vips_thumbnail_source_get_type(void); extern GType vips_mapim_get_type(void); extern GType vips_shrink_get_type(void); extern GType vips_shrinkh_get_type(void); extern GType vips_shrinkv_get_type(void); extern GType vips_reduce_get_type(void); extern GType vips_reduceh_get_type(void); extern GType vips_reducev_get_type(void); extern GType vips_quadratic_get_type(void); extern GType vips_affine_get_type(void); extern GType vips_similarity_get_type(void); extern GType vips_rotate_get_type(void); extern GType vips_resize_get_type(void); vips_thumbnail_file_get_type(); vips_thumbnail_buffer_get_type(); vips_thumbnail_image_get_type(); vips_thumbnail_source_get_type(); vips_mapim_get_type(); vips_shrink_get_type(); vips_shrinkh_get_type(); vips_shrinkv_get_type(); vips_reduceh_get_type(); vips_reducev_get_type(); vips_reduce_get_type(); vips_quadratic_get_type(); vips_affine_get_type(); vips_similarity_get_type(); vips_rotate_get_type(); vips_resize_get_type(); } libvips-8.15.1/libvips/resample/resize.c000066400000000000000000000265741454007373500202310ustar00rootroot00000000000000/* resize an image ... up and down resampling. * * 13/8/14 * - from affine.c * 18/11/14 * - add the fancier algorithm from vipsthumbnail * 11/11/15 * - smarter cache sizing * 29/2/16 * - shrink more affine less, now we have better anti-alias settings * 10/3/16 * - revise again, using new vips_reduce() code * 1/5/16 * - allow >1 on one axis, <1 on the other * - expose @kernel setting * 16/6/16 * - better quality for linear/cubic kernels ... do more shrink and less * reduce * 22/6/16 * - faster and better upsizing * 15/8/16 * - more accurate resizing * 9/9/16 * - add @centre option * 6/3/17 * - moved the cache to shrinkv * 15/10/17 * - make LINEAR and CUBIC adaptive * 25/11/17 * - deprecate --centre ... it's now always on, thanks tback * 3/12/18 [edwjusti] * - disable the centre sampling offset for nearest upscale, since the * affine nearest interpolator is always centre * 7/7/19 [lovell] * - don't let either axis drop below 1px * 12/7/20 * - much better handling of "nearest" * 22/4/22 kleisauke * - add @gap option */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG_VERBOSE #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include #include #include "presample.h" typedef struct _VipsResize { VipsResample parent_instance; double scale; double vscale; double gap; VipsKernel kernel; /* Deprecated. */ VipsInterpolate *interpolate; double idx; double idy; gboolean centre; } VipsResize; typedef VipsResampleClass VipsResizeClass; G_DEFINE_TYPE(VipsResize, vips_resize, VIPS_TYPE_RESAMPLE); /* Suggest a VipsInterpolate which corresponds to a VipsKernel. We use * this to pick a thing for affine(). */ static const char * vips_resize_interpolate(VipsKernel kernel) { switch (kernel) { case VIPS_KERNEL_NEAREST: return "nearest"; case VIPS_KERNEL_LINEAR: return "bilinear"; /* Use cubic for everything else. There are other interpolators, like * nohalo, but they don't really correspond well to any kernel. */ default: return "bicubic"; } } static int vips_resize_build(VipsObject *object) { VipsResample *resample = VIPS_RESAMPLE(object); VipsResize *resize = (VipsResize *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 5); VipsImage *in; double hscale; double vscale; int int_hshrink; int int_vshrink; if (VIPS_OBJECT_CLASS(vips_resize_parent_class)->build(object)) return -1; in = resample->in; /* Updated below when we do the int part of our shrink. */ hscale = resize->scale; if (vips_object_argument_isset(object, "vscale")) vscale = resize->vscale; else vscale = resize->scale; /* Unpack for processing. */ if (vips_image_decode(in, &t[0])) return -1; in = t[0]; if (resize->kernel == VIPS_KERNEL_NEAREST) { int target_width; int target_height; /* The int part of our scale. */ if (resize->gap < 1.0) { int_hshrink = VIPS_FLOOR(1.0 / hscale); int_vshrink = VIPS_FLOOR(1.0 / vscale); } else { target_width = VIPS_ROUND_UINT(in->Xsize * hscale); target_height = VIPS_ROUND_UINT(in->Ysize * vscale); int_hshrink = VIPS_FLOOR( (double) in->Xsize / target_width / resize->gap); int_vshrink = VIPS_FLOOR( (double) in->Ysize / target_height / resize->gap); } int_hshrink = VIPS_MAX(1, int_hshrink); int_vshrink = VIPS_MAX(1, int_vshrink); if (int_vshrink > 1 || int_hshrink > 1) { g_info("subsample by %d, %d", int_hshrink, int_vshrink); if (vips_subsample(in, &t[1], int_hshrink, int_vshrink, NULL)) return -1; in = t[1]; hscale *= int_hshrink; vscale *= int_vshrink; } } /* Don't let either axis drop below 1 px. */ hscale = VIPS_MAX(hscale, 1.0 / in->Xsize); vscale = VIPS_MAX(vscale, 1.0 / in->Ysize); /* Any residual downsizing. */ if (vscale < 1.0) { g_info("residual reducev by %g", vscale); if (vips_reducev(in, &t[2], 1.0 / vscale, "kernel", resize->kernel, "gap", resize->gap, NULL)) return -1; in = t[2]; } if (hscale < 1.0) { g_info("residual reduceh by %g", hscale); if (vips_reduceh(in, &t[3], 1.0 / hscale, "kernel", resize->kernel, "gap", resize->gap, NULL)) return -1; in = t[3]; } /* Any upsizing. */ if (hscale > 1.0 || vscale > 1.0) { const char *nickname = vips_resize_interpolate(resize->kernel); /* Input displacement. For centre sampling, shift by 0.5 down * and right. Except if this is nearest, which is always * centre. */ const double id = resize->kernel == VIPS_KERNEL_NEAREST ? 0.0 : 0.5; VipsInterpolate *interpolate; if (!(interpolate = vips_interpolate_new(nickname))) return -1; vips_object_local(object, interpolate); if (resize->kernel == VIPS_KERNEL_NEAREST && hscale == VIPS_FLOOR(hscale) && vscale == VIPS_FLOOR(vscale)) { /* Fast, integral nearest neighbour enlargement */ if (vips_zoom(in, &t[4], VIPS_FLOOR(hscale), VIPS_FLOOR(vscale), NULL)) return -1; in = t[4]; } else if (hscale > 1.0 && vscale > 1.0) { g_info("residual scale %g x %g", hscale, vscale); if (vips_affine(in, &t[4], hscale, 0.0, 0.0, vscale, "interpolate", interpolate, "idx", id, "idy", id, "extend", VIPS_EXTEND_COPY, "premultiplied", TRUE, NULL)) return -1; in = t[4]; } else if (hscale > 1.0) { g_info("residual scale %g", hscale); if (vips_affine(in, &t[4], hscale, 0.0, 0.0, 1.0, "interpolate", interpolate, "idx", id, "idy", id, "extend", VIPS_EXTEND_COPY, "premultiplied", TRUE, NULL)) return -1; in = t[4]; } else { g_info("residual scale %g", vscale); if (vips_affine(in, &t[4], 1.0, 0.0, 0.0, vscale, "interpolate", interpolate, "idx", id, "idy", id, "extend", VIPS_EXTEND_COPY, "premultiplied", TRUE, NULL)) return -1; in = t[4]; } } if (vips_image_write(in, resample->out)) return -1; return 0; } static void vips_resize_class_init(VipsResizeClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VIPS_DEBUG_MSG("vips_resize_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "resize"; vobject_class->description = _("resize an image"); vobject_class->build = vips_resize_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_DOUBLE(class, "scale", 113, _("Scale factor"), _("Scale image by this factor"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsResize, scale), 0.0, 10000000.0, 0.0); VIPS_ARG_DOUBLE(class, "vscale", 113, _("Vertical scale factor"), _("Vertical scale image by this factor"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsResize, vscale), 0.0, 10000000.0, 0.0); VIPS_ARG_ENUM(class, "kernel", 3, _("Kernel"), _("Resampling kernel"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsResize, kernel), VIPS_TYPE_KERNEL, VIPS_KERNEL_LANCZOS3); VIPS_ARG_DOUBLE(class, "gap", 4, _("Gap"), _("Reducing gap"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsResize, gap), 0.0, 1000000.0, 2.0); /* We used to let people set the input offset so you could pick centre * or corner interpolation, but it's not clear this was useful. */ VIPS_ARG_DOUBLE(class, "idx", 115, _("Input offset"), _("Horizontal input displacement"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsResize, idx), -10000000.0, 10000000.0, 0.0); VIPS_ARG_DOUBLE(class, "idy", 116, _("Input offset"), _("Vertical input displacement"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsResize, idy), -10000000.0, 10000000.0, 0.0); /* It's a kernel now we use vips_reduce() not vips_affine(). */ VIPS_ARG_INTERPOLATE(class, "interpolate", 2, _("Interpolate"), _("Interpolate pixels with this"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsResize, interpolate)); /* We used to let people pick centre or corner, but it's automatic now. */ VIPS_ARG_BOOL(class, "centre", 7, _("Centre"), _("Use centre sampling convention"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsResize, centre), FALSE); } static void vips_resize_init(VipsResize *resize) { resize->gap = 2.0; resize->kernel = VIPS_KERNEL_LANCZOS3; } /** * vips_resize: (method) * @in: input image * @out: (out): output image * @scale: scale factor * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @vscale: %gdouble vertical scale factor * * @kernel: #VipsKernel to reduce with * * @gap: reducing gap to use (default: 2.0) * * Resize an image. * * Set @gap to speed up downsizing by having vips_shrink() to shrink * with a box filter first. The bigger @gap, the closer the result * to the fair resampling. The smaller @gap, the faster resizing. * The default value is 2.0 (very close to fair resampling * while still being faster in many cases). * * vips_resize() normally uses #VIPS_KERNEL_LANCZOS3 for the final reduce, you * can change this with @kernel. Downsizing is done with centre convention. * * When upsizing (@scale > 1), the operation uses vips_affine() with * a #VipsInterpolate selected depending on @kernel. It will use * #VipsInterpolateBicubic for #VIPS_KERNEL_CUBIC and above. It adds a * 0.5 pixel displacement to the input pixels to get centre convention scaling. * * vips_resize() normally maintains the image aspect ratio. If you set * @vscale, that factor is used for the vertical scale and @scale for the * horizontal. * * If either axis would drop below 1px in size, the shrink in that dimension * is limited. This breaks the image aspect ratio, but prevents errors due to * fractional pixel sizes. * * This operation does not change xres or yres. The image resolution needs to * be updated by the application. * * This operation does not premultiply alpha. If your image has an alpha * channel, you should use vips_premultiply() on it first. * * See also: vips_premultiply(), vips_shrink(), vips_reduce(). * * Returns: 0 on success, -1 on error */ int vips_resize(VipsImage *in, VipsImage **out, double scale, ...) { va_list ap; int result; va_start(ap, scale); result = vips_call_split("resize", ap, in, out, scale); va_end(ap); return result; } libvips-8.15.1/libvips/resample/shrink.c000066400000000000000000000127741454007373500202230ustar00rootroot00000000000000/* shrink with a box filter * * 30/10/15 * - from shrink.c (now renamed as shrink2.c) * - split to h and v shrinks for a large memory saving * - now handles complex * 15/8/16 * - more accurate resize * - rename xshrink -> hshrink for greater consistency * 9/2/17 * - use reduce, not affine, for any residual shrink * - expand cache hint * 22/4/22 kleisauke * - add @ceil option */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "presample.h" typedef struct _VipsShrink { VipsResample parent_instance; double hshrink; /* Shrink factors */ double vshrink; gboolean ceil; /* Round operation */ } VipsShrink; typedef VipsResampleClass VipsShrinkClass; G_DEFINE_TYPE(VipsShrink, vips_shrink, VIPS_TYPE_RESAMPLE); static int vips_shrink_build(VipsObject *object) { VipsResample *resample = VIPS_RESAMPLE(object); VipsShrink *shrink = (VipsShrink *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); int hshrink_int; int vshrink_int; if (VIPS_OBJECT_CLASS(vips_shrink_parent_class)->build(object)) return -1; hshrink_int = (int) shrink->hshrink; vshrink_int = (int) shrink->vshrink; if (hshrink_int != shrink->hshrink || vshrink_int != shrink->vshrink) { /* Shrink by int factors, reduce to final size. */ if (vips_reducev(resample->in, &t[0], shrink->vshrink, "gap", 1.0, NULL) || vips_reduceh(t[0], &t[1], shrink->hshrink, "gap", 1.0, NULL) || vips_image_write(t[1], resample->out)) return -1; } else { if (vips_shrinkv(resample->in, &t[0], shrink->vshrink, "ceil", shrink->ceil, NULL) || vips_shrinkh(t[0], &t[1], shrink->hshrink, "ceil", shrink->ceil, NULL) || vips_image_write(t[1], resample->out)) return -1; } return 0; } static void vips_shrink_class_init(VipsShrinkClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VIPS_DEBUG_MSG("vips_shrink_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "shrink"; vobject_class->description = _("shrink an image"); vobject_class->build = vips_shrink_build; /* You'd think UNBUFFERED would work, but we will use reduce for non-int * shrinks, so it has to be straight SEQ. */ operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_DOUBLE(class, "vshrink", 9, _("Vshrink"), _("Vertical shrink factor"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsShrink, vshrink), 1.0, 1000000.0, 1.0); VIPS_ARG_DOUBLE(class, "hshrink", 8, _("Hshrink"), _("Horizontal shrink factor"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsShrink, hshrink), 1.0, 1000000.0, 1.0); VIPS_ARG_BOOL(class, "ceil", 10, _("Ceil"), _("Round-up output dimensions"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsShrink, ceil), FALSE); /* The old names .. now use h and v everywhere. */ VIPS_ARG_DOUBLE(class, "xshrink", 8, _("Xshrink"), _("Horizontal shrink factor"), VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsShrink, hshrink), 1.0, 1000000.0, 1.0); VIPS_ARG_DOUBLE(class, "yshrink", 9, _("Yshrink"), _("Vertical shrink factor"), VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsShrink, vshrink), 1.0, 1000000.0, 1.0); } static void vips_shrink_init(VipsShrink *shrink) { } /** * vips_shrink: (method) * @in: input image * @out: (out): output image * @hshrink: horizontal shrink * @vshrink: vertical shrink * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @ceil: round-up output dimensions * * Shrink @in by a pair of factors with a simple box filter. For non-integer * factors, vips_shrink() will first shrink by the integer part with a box * filter, then use vips_reduce() to shrink by the * remaining fractional part. * * This is a very low-level operation: see vips_resize() for a more * convenient way to resize images. * * This operation does not change xres or yres. The image resolution needs to * be updated by the application. * * See also: vips_resize(), vips_reduce(). * * Returns: 0 on success, -1 on error */ int vips_shrink(VipsImage *in, VipsImage **out, double hshrink, double vshrink, ...) { va_list ap; int result; va_start(ap, vshrink); result = vips_call_split("shrink", ap, in, out, hshrink, vshrink); va_end(ap); return result; } libvips-8.15.1/libvips/resample/shrinkh.c000066400000000000000000000227021454007373500203630ustar00rootroot00000000000000/* horizontal shrink by an integer factor * * 30/10/15 * - from shrink.c * 22/1/16 * - reorganise loops, 30% faster, vectorisable * 15/8/16 * - rename xshrink -> hshrink for greater consistency * 6/8/19 * - use a double sum buffer for int32 types * 22/4/22 kleisauke * - add @ceil option * 12/8/23 jcupitt * - improve chunking for small shrinks */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include "presample.h" typedef struct _VipsShrinkh { VipsResample parent_instance; int hshrink; /* Shrink factor */ gboolean ceil; /* Round operation */ } VipsShrinkh; typedef VipsResampleClass VipsShrinkhClass; G_DEFINE_TYPE(VipsShrinkh, vips_shrinkh, VIPS_TYPE_RESAMPLE); #define INNER(BANDS) \ sum += p[x1]; \ x1 += BANDS; /* Integer shrink. */ #define ISHRINK(ACC_TYPE, TYPE, BANDS) \ { \ TYPE *restrict p = (TYPE *) in; \ TYPE *restrict q = (TYPE *) out; \ \ for (x = 0; x < width; x++) { \ for (b = 0; b < BANDS; b++) { \ ACC_TYPE sum; \ \ sum = 0; \ x1 = b; \ VIPS_UNROLL(shrink->hshrink, INNER(BANDS)); \ q[b] = (sum + shrink->hshrink / 2) / \ shrink->hshrink; \ } \ p += ne; \ q += BANDS; \ } \ } /* Float shrink. */ #define FSHRINK(TYPE) \ { \ TYPE *restrict p = (TYPE *) in; \ TYPE *restrict q = (TYPE *) out; \ \ for (x = 0; x < width; x++) { \ for (b = 0; b < bands; b++) { \ double sum; \ \ sum = 0.0; \ x1 = b; \ VIPS_UNROLL(shrink->hshrink, INNER(bands)); \ q[b] = sum / shrink->hshrink; \ } \ p += ne; \ q += bands; \ } \ } /* Generate an area of @out_region. @ir is large enough. */ static void vips_shrinkh_gen2(VipsShrinkh *shrink, VipsRegion *out_region, VipsRegion *ir, int left, int top, int width) { VipsResample *resample = VIPS_RESAMPLE(shrink); const int bands = resample->in->Bands * (vips_band_format_iscomplex(resample->in->BandFmt) ? 2 : 1); const int ne = shrink->hshrink * bands; VipsPel *out = VIPS_REGION_ADDR(out_region, left, top); VipsPel *in = VIPS_REGION_ADDR(ir, left * shrink->hshrink, top); int x; int x1, b; switch (resample->in->BandFmt) { case VIPS_FORMAT_UCHAR: /* Generate a special path for 1, 3 and 4 band uchar data. The * compiler will be able to vectorise these. * * Vectorisation doesn't help much for 16, 32-bit or float * data, don't bother with them. */ switch (bands) { case 1: ISHRINK(int, unsigned char, 1); break; case 3: ISHRINK(int, unsigned char, 3); break; case 4: ISHRINK(int, unsigned char, 4); break; default: ISHRINK(int, unsigned char, bands); break; } break; case VIPS_FORMAT_CHAR: ISHRINK(int, char, bands); break; case VIPS_FORMAT_USHORT: ISHRINK(int, unsigned short, bands); break; case VIPS_FORMAT_SHORT: ISHRINK(int, short, bands); break; case VIPS_FORMAT_UINT: ISHRINK(double, unsigned int, bands); break; case VIPS_FORMAT_INT: ISHRINK(double, int, bands); break; case VIPS_FORMAT_FLOAT: FSHRINK(float); break; case VIPS_FORMAT_DOUBLE: FSHRINK(double); break; case VIPS_FORMAT_COMPLEX: FSHRINK(float); break; case VIPS_FORMAT_DPCOMPLEX: FSHRINK(double); break; default: g_assert_not_reached(); } } static int vips_shrinkh_gen(VipsRegion *out_region, void *seq, void *a, void *b, gboolean *stop) { /* How do we chunk up the image? We don't want to prepare the whole of * the input region corresponding to *r since it could be huge. * * Reading a line at a time could cause a lot of overcomputation, depending * on what's upstream from us. In SMALLTILE, output scanlines could be * quite small. * * Use fatstrip height as a compromise. */ const int dy = vips__fatstrip_height; VipsShrinkh *shrink = (VipsShrinkh *) b; VipsRegion *ir = (VipsRegion *) seq; VipsRect *r = &out_region->valid; int y, y1; #ifdef DEBUG printf("vips_shrinkh_gen: generating %d x %d at %d x %d\n", r->width, r->height, r->left, r->top); #endif /*DEBUG*/ for (y = 0; y < r->height; y += dy) { int chunk_height = VIPS_MIN(dy, r->height - y); VipsRect s; s.left = r->left * shrink->hshrink; s.top = r->top + y; s.width = r->width * shrink->hshrink; s.height = chunk_height; #ifdef DEBUG printf("vips_shrinkh_gen: requesting %d lines from %d\n", s.height, s.top); #endif /*DEBUG*/ if (vips_region_prepare(ir, &s)) return -1; VIPS_GATE_START("vips_shrinkh_gen: work"); for (y1 = 0; y1 < chunk_height; y1++) vips_shrinkh_gen2(shrink, out_region, ir, r->left, r->top + y + y1, r->width); VIPS_GATE_STOP("vips_shrinkh_gen: work"); } VIPS_COUNT_PIXELS(out_region, "vips_shrinkh_gen"); return 0; } static int vips_shrinkh_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsResample *resample = VIPS_RESAMPLE(object); VipsShrinkh *shrink = (VipsShrinkh *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 2); VipsImage *in; if (VIPS_OBJECT_CLASS(vips_shrinkh_parent_class)->build(object)) return -1; in = resample->in; if (shrink->hshrink < 1) { vips_error(class->nickname, "%s", _("shrink factors should be >= 1")); return -1; } if (shrink->hshrink == 1) return vips_image_write(in, resample->out); /* We need new pixels at the right so that we don't have small chunks * to average down the right edge. */ if (vips_embed(in, &t[1], 0, 0, in->Xsize + shrink->hshrink, in->Ysize, "extend", VIPS_EXTEND_COPY, NULL)) return -1; in = t[1]; if (vips_image_pipelinev(resample->out, VIPS_DEMAND_STYLE_THINSTRIP, in, NULL)) return -1; /* Size output. * * Don't change xres/yres, leave that to the application layer. For * example, vipsthumbnail knows the true shrink factor (including the * fractional part), we just see the integer part here. */ resample->out->Xsize = shrink->ceil ? VIPS_CEIL((double) resample->in->Xsize / shrink->hshrink) : VIPS_ROUND_UINT((double) resample->in->Xsize / shrink->hshrink); if (resample->out->Xsize <= 0) { vips_error(class->nickname, "%s", _("image has shrunk to nothing")); return -1; } #ifdef DEBUG printf("vips_shrinkh_build: shrinking %d x %d image to %d x %d\n", in->Xsize, in->Ysize, resample->out->Xsize, resample->out->Ysize); #endif /*DEBUG*/ if (vips_image_generate(resample->out, vips_start_one, vips_shrinkh_gen, vips_stop_one, in, shrink)) return -1; return 0; } static void vips_shrinkh_class_init(VipsShrinkhClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VIPS_DEBUG_MSG("vips_shrinkh_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "shrinkh"; vobject_class->description = _("shrink an image horizontally"); vobject_class->build = vips_shrinkh_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_INT(class, "hshrink", 8, _("Hshrink"), _("Horizontal shrink factor"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsShrinkh, hshrink), 1, 1000000, 1); VIPS_ARG_BOOL(class, "ceil", 10, _("Ceil"), _("Round-up output dimensions"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsShrinkh, ceil), FALSE); /* The old name .. now use h and v everywhere. */ VIPS_ARG_INT(class, "xshrink", 8, _("Xshrink"), _("Horizontal shrink factor"), VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsShrinkh, hshrink), 1, 1000000, 1); } static void vips_shrinkh_init(VipsShrinkh *shrink) { } /** * vips_shrinkh: (method) * @in: input image * @out: (out): output image * @hshrink: horizontal shrink * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @ceil: round-up output dimensions * * Shrink @in horizontally by an integer factor. Each pixel in the output is * the average of the corresponding line of @hshrink pixels in the input. * * This is a very low-level operation: see vips_resize() for a more * convenient way to resize images. * * This operation does not change xres or yres. The image resolution needs to * be updated by the application. * * See also: vips_shrinkv(), vips_shrink(), vips_resize(), vips_affine(). * * Returns: 0 on success, -1 on error */ int vips_shrinkh(VipsImage *in, VipsImage **out, int hshrink, ...) { va_list ap; int result; va_start(ap, hshrink); result = vips_call_split("shrinkh", ap, in, out, hshrink); va_end(ap); return result; } libvips-8.15.1/libvips/resample/shrinkv.c000066400000000000000000000323521454007373500204030ustar00rootroot00000000000000/* vertical shrink with a box filter * * Copyright: 1990, N. Dessipris. * * Authors: Nicos Dessipris and Kirk Martinez * Written on: 29/04/1991 * Modified on: 2/11/92, 22/2/93 Kirk Martinez - Xres Yres & cleanup incredibly inefficient for box filters as LUTs are used instead of + Needs converting to a smoother filter: eg Gaussian! KM * 15/7/93 JC * - rewritten for partial v2 * - ANSIfied * - now shrinks any non-complex type * - no longer cloned from im_convsub() * - could be much better! see km comments above * 3/8/93 JC * - rounding bug fixed * 11/1/94 JC * - problems with .000001 and round up/down ignored! Try shrink 3738 * pixel image by 9.345000000001 * 7/10/94 JC * - IM_NEW and IM_ARRAY added * - more typedef * 3/7/95 JC * - IM_CODING_LABQ handling added here * 20/12/08 * - fall back to im_copy() for 1/1 shrink * 2/2/11 * - gtk-doc * 10/2/12 * - shrink in chunks to reduce peak memuse for large shrinks * - simpler * 12/6/12 * - redone as a class * - warn about non-int shrinks * - some tuning .. tried an int coordinate path, not worthwhile * 16/11/12 * - don't change xres/yres, see comment below * 8/4/13 * - oops demand_hint was incorrect, thanks Jan * 6/6/13 * - don't chunk horizontally, fixes seq problems with large shrink * factors * 15/8/16 * - rename yshrink -> vshrink for greater consistency * 7/3/17 * - add a seq line cache * 6/8/19 * - use a double sum buffer for int32 types * 22/4/22 kleisauke * - add @ceil option * 12/8/23 jcupitt * - improve chunking for small shrinks */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include "presample.h" typedef struct _VipsShrinkv { VipsResample parent_instance; int vshrink; /* Shrink factor */ size_t sizeof_line_buffer; gboolean ceil; /* Round operation */ } VipsShrinkv; typedef VipsResampleClass VipsShrinkvClass; G_DEFINE_TYPE(VipsShrinkv, vips_shrinkv, VIPS_TYPE_RESAMPLE); /* Our per-sequence parameter struct. Somewhere to sum band elements. */ typedef struct { VipsRegion *ir; VipsPel *sum; } VipsShrinkvSequence; /* Free a sequence value. */ static int vips_shrinkv_stop(void *vseq, void *a, void *b) { VipsShrinkvSequence *seq = (VipsShrinkvSequence *) vseq; VIPS_FREEF(g_object_unref, seq->ir); VIPS_FREE(seq->sum); VIPS_FREE(seq); return 0; } /* Make a sequence value. */ static void * vips_shrinkv_start(VipsImage *out, void *a, void *b) { VipsImage *in = (VipsImage *) a; VipsShrinkv *shrink = (VipsShrinkv *) b; VipsShrinkvSequence *seq; if (!(seq = VIPS_NEW(NULL, VipsShrinkvSequence))) return NULL; seq->ir = vips_region_new(in); /* Big enough for the largest intermediate .. a whole scanline. */ seq->sum = VIPS_ARRAY(NULL, shrink->sizeof_line_buffer, VipsPel); return (void *) seq; } #define ADD(ACC_TYPE, TYPE) \ { \ ACC_TYPE *restrict sum = (ACC_TYPE *) seq->sum; \ TYPE *restrict p = (TYPE *) in; \ \ for (x = 0; x < sz; x++) \ sum[x] += p[x]; \ } /* Add a line of pixels to sum. */ static void vips_shrinkv_add_line(VipsShrinkv *shrink, VipsShrinkvSequence *seq, VipsRegion *ir, int left, int top, int width) { VipsResample *resample = VIPS_RESAMPLE(shrink); const int bands = resample->in->Bands * (vips_band_format_iscomplex(resample->in->BandFmt) ? 2 : 1); const int sz = bands * width; int x; VipsPel *in = VIPS_REGION_ADDR(ir, left, top); switch (resample->in->BandFmt) { case VIPS_FORMAT_UCHAR: ADD(int, unsigned char); break; case VIPS_FORMAT_CHAR: ADD(int, char); break; case VIPS_FORMAT_USHORT: ADD(int, unsigned short); break; case VIPS_FORMAT_SHORT: ADD(int, short); break; case VIPS_FORMAT_UINT: ADD(double, unsigned int); break; case VIPS_FORMAT_INT: ADD(double, int); break; case VIPS_FORMAT_FLOAT: ADD(double, float); break; case VIPS_FORMAT_DOUBLE: ADD(double, double); break; case VIPS_FORMAT_COMPLEX: ADD(double, float); break; case VIPS_FORMAT_DPCOMPLEX: ADD(double, double); break; default: g_assert_not_reached(); } } /* Integer average. */ #define IAVG(ACC_TYPE, TYPE) \ { \ ACC_TYPE *restrict sum = (ACC_TYPE *) seq->sum; \ TYPE *restrict q = (TYPE *) out; \ \ for (x = 0; x < sz; x++) \ q[x] = (sum[x] + shrink->vshrink / 2) / shrink->vshrink; \ } /* Float average. */ #define FAVG(TYPE) \ { \ double *restrict sum = (double *) seq->sum; \ TYPE *restrict q = (TYPE *) out; \ \ for (x = 0; x < sz; x++) \ q[x] = sum[x] / shrink->vshrink; \ } /* Average the line of sums to out. */ static void vips_shrinkv_write_line(VipsShrinkv *shrink, VipsShrinkvSequence *seq, VipsRegion *out_region, int left, int top, int width) { VipsResample *resample = VIPS_RESAMPLE(shrink); const int bands = resample->in->Bands * (vips_band_format_iscomplex(resample->in->BandFmt) ? 2 : 1); const int sz = bands * width; int x; VipsPel *out = VIPS_REGION_ADDR(out_region, left, top); switch (resample->in->BandFmt) { case VIPS_FORMAT_UCHAR: IAVG(int, unsigned char); break; case VIPS_FORMAT_CHAR: IAVG(int, char); break; case VIPS_FORMAT_USHORT: IAVG(int, unsigned short); break; case VIPS_FORMAT_SHORT: IAVG(int, short); break; case VIPS_FORMAT_UINT: IAVG(double, unsigned int); break; case VIPS_FORMAT_INT: IAVG(double, int); break; case VIPS_FORMAT_FLOAT: FAVG(float); break; case VIPS_FORMAT_DOUBLE: FAVG(double); break; case VIPS_FORMAT_COMPLEX: FAVG(float); break; case VIPS_FORMAT_DPCOMPLEX: FAVG(double); break; default: g_assert_not_reached(); } } static int vips_shrinkv_gen(VipsRegion *out_region, void *vseq, void *a, void *b, gboolean *stop) { VipsShrinkvSequence *seq = (VipsShrinkvSequence *) vseq; VipsShrinkv *shrink = (VipsShrinkv *) b; VipsRegion *ir = seq->ir; VipsRect *r = &out_region->valid; /* How do we chunk up the output image? We don't want to prepare the * whole of the input region corresponding to *r since it could be huge. * * We also don't want to fetch a line at a time, since that can make * upstream coordinate changes very expensive. * * Instead, aim for a minimum of tile_height on the input image. */ int input_target = VIPS_MAX(shrink->vshrink, r->height); int dy = input_target / shrink->vshrink; int y, y1, y2; #ifdef DEBUG printf("vips_shrinkv_gen: generating %d x %d at %d x %d\n", r->width, r->height, r->left, r->top); #endif /*DEBUG*/ for (y = 0; y < r->height; y += dy) { int chunk_height = VIPS_MIN(dy, r->height - y); VipsRect s; s.left = r->left; s.top = (r->top + y) * shrink->vshrink; s.width = r->width; s.height = chunk_height * shrink->vshrink; #ifdef DEBUG printf("vips_shrinkv_gen: requesting %d lines from %d\n", s.height, s.top); #endif /*DEBUG*/ if (vips_region_prepare(ir, &s)) return -1; VIPS_GATE_START("vips_shrinkv_gen: work"); // each output line for (y1 = 0; y1 < chunk_height; y1++) { // top of this line in the input int top = s.top + y1 * shrink->vshrink; memset(seq->sum, 0, shrink->sizeof_line_buffer); // each line in the corresponding area of input for (y2 = 0; y2 < shrink->vshrink; y2++) vips_shrinkv_add_line(shrink, seq, ir, s.left, top + y2, s.width); vips_shrinkv_write_line(shrink, seq, out_region, r->left, r->top + y + y1, r->width); } VIPS_GATE_STOP("vips_shrinkv_gen: work"); } VIPS_COUNT_PIXELS(out_region, "vips_shrinkv_gen"); return 0; } static int vips_shrinkv_build(VipsObject *object) { VipsObjectClass *class = VIPS_OBJECT_GET_CLASS(object); VipsResample *resample = VIPS_RESAMPLE(object); VipsShrinkv *shrink = (VipsShrinkv *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 4); VipsImage *in; if (VIPS_OBJECT_CLASS(vips_shrinkv_parent_class)->build(object)) return -1; in = resample->in; if (shrink->vshrink < 1) { vips_error(class->nickname, "%s", _("shrink factors should be >= 1")); return -1; } if (shrink->vshrink == 1) return vips_image_write(in, resample->out); /* Make the height a multiple of the shrink factor so we don't need to * average half pixels. */ if (vips_embed(in, &t[1], 0, 0, in->Xsize, VIPS_ROUND_UP(in->Ysize, shrink->vshrink), "extend", VIPS_EXTEND_COPY, NULL)) return -1; in = t[1]; /* We have to keep a line buffer as we sum columns. */ shrink->sizeof_line_buffer = in->Xsize * in->Bands * vips_format_sizeof(VIPS_FORMAT_DPCOMPLEX); /* SMALLTILE or we'll need huge input areas for our output. In seq * mode, the linecache above will keep us sequential. */ t[2] = vips_image_new(); if (vips_image_pipelinev(t[2], VIPS_DEMAND_STYLE_SMALLTILE, in, NULL)) return -1; /* Size output. * * Don't change xres/yres, leave that to the application layer. For * example, vipsthumbnail knows the true shrink factor (including the * fractional part), we just see the integer part here. */ t[2]->Ysize = shrink->ceil ? VIPS_CEIL((double) resample->in->Ysize / shrink->vshrink) : VIPS_ROUND_UINT((double) resample->in->Ysize / shrink->vshrink); if (t[2]->Ysize <= 0) { vips_error(class->nickname, "%s", _("image has shrunk to nothing")); return -1; } #ifdef DEBUG printf("vips_shrinkv_build: vshrink = %d\n", shrink->vshrink); printf("vips_shrinkv_build: shrinking %d x %d image to %d x %d\n", in->Xsize, in->Ysize, t[2]->Xsize, t[2]->Ysize); #endif /*DEBUG*/ if (vips_image_generate(t[2], vips_shrinkv_start, vips_shrinkv_gen, vips_shrinkv_stop, in, shrink)) return -1; in = t[2]; /* Large vshrinks will throw off sequential mode. Suppose thread1 is * generating tile (0, 0), but stalls. thread2 generates tile * (0, 1), 128 lines further down the output. After it has done, * thread1 tries to generate (0, 0), but by then the pixels it needs * have gone from the input image line cache if the vshrink is large. * * To fix this, put another seq on the output of vshrink. Now we'll * always have the previous XX lines of the shrunk image, and we won't * fetch out of order. */ if (vips_image_is_sequential(in)) { g_info("shrinkv sequential line cache"); if (vips_sequential(in, &t[3], "tile_height", 10, NULL)) return -1; in = t[3]; } if (vips_image_write(in, resample->out)) return -1; return 0; } static void vips_shrinkv_class_init(VipsShrinkvClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); VIPS_DEBUG_MSG("vips_shrinkv_class_init\n"); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "shrinkv"; vobject_class->description = _("shrink an image vertically"); vobject_class->build = vips_shrinkv_build; operation_class->flags = VIPS_OPERATION_SEQUENTIAL; VIPS_ARG_INT(class, "vshrink", 9, _("Vshrink"), _("Vertical shrink factor"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsShrinkv, vshrink), 1, 1000000, 1); VIPS_ARG_BOOL(class, "ceil", 10, _("Ceil"), _("Round-up output dimensions"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsShrinkv, ceil), FALSE); /* The old name .. now use h and v everywhere. */ VIPS_ARG_INT(class, "yshrink", 8, _("Yshrink"), _("Vertical shrink factor"), VIPS_ARGUMENT_REQUIRED_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsShrinkv, vshrink), 1, 1000000, 1); } static void vips_shrinkv_init(VipsShrinkv *shrink) { } /** * vips_shrinkv: (method) * @in: input image * @out: (out): output image * @vshrink: vertical shrink * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @ceil: round-up output dimensions * * Shrink @in vertically by an integer factor. Each pixel in the output is * the average of the corresponding column of @vshrink pixels in the input. * * This is a very low-level operation: see vips_resize() for a more * convenient way to resize images. * * This operation does not change xres or yres. The image resolution needs to * be updated by the application. * * See also: vips_shrinkh(), vips_shrink(), vips_resize(), vips_affine(). * * Returns: 0 on success, -1 on error */ int vips_shrinkv(VipsImage *in, VipsImage **out, int vshrink, ...) { va_list ap; int result; va_start(ap, vshrink); result = vips_call_split("shrinkv", ap, in, out, vshrink); va_end(ap); return result; } libvips-8.15.1/libvips/resample/similarity.c000066400000000000000000000205031454007373500211000ustar00rootroot00000000000000/* simple wrapper over vips_affine() to make scale / rotate easy from the * command-line * * 3/10/13 * - from affine.c * 25/10/13 * - oops, reverse rotation direction to match the convention used in the * rest of vips * 13/8/14 * - oops, missing scale from b, thanks Topochicho * 7/2/16 * - use vips_reduce(), if we can * 17/11/17 * ` - add optional "background" param * ` - don't use vips_reduce() since it has no "background" param * 10/3/18 * - add vips_rotate() class for convenience */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include "presample.h" typedef struct _VipsSimilarityBase { VipsResample parent_instance; double scale; double angle; VipsInterpolate *interpolate; VipsArrayDouble *background; double odx; double ody; double idx; double idy; } VipsSimilarityBase; typedef VipsResampleClass VipsSimilarityBaseClass; G_DEFINE_ABSTRACT_TYPE(VipsSimilarityBase, vips_similarity_base, VIPS_TYPE_RESAMPLE); static int vips_similarity_base_build(VipsObject *object) { VipsResample *resample = VIPS_RESAMPLE(object); VipsSimilarityBase *base = (VipsSimilarityBase *) object; VipsImage **t = (VipsImage **) vips_object_local_array(object, 4); double a = base->scale * cos(VIPS_RAD(base->angle)); double b = base->scale * -sin(VIPS_RAD(base->angle)); double c = -b; double d = a; if (VIPS_OBJECT_CLASS(vips_similarity_base_parent_class)->build(object)) return -1; if (vips_affine(resample->in, &t[0], a, b, c, d, "interpolate", base->interpolate, "odx", base->odx, "ody", base->ody, "idx", base->idx, "idy", base->idy, "background", base->background, NULL)) return -1; if (vips_image_write(t[0], resample->out)) return -1; return 0; } static void vips_similarity_base_class_init(VipsSimilarityBaseClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "similarity_base"; vobject_class->description = _("base similarity transform"); vobject_class->build = vips_similarity_base_build; VIPS_ARG_INTERPOLATE(class, "interpolate", 5, _("Interpolate"), _("Interpolate pixels with this"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSimilarityBase, interpolate)); VIPS_ARG_BOXED(class, "background", 6, _("Background"), _("Background value"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSimilarityBase, background), VIPS_TYPE_ARRAY_DOUBLE); VIPS_ARG_DOUBLE(class, "odx", 112, _("Output offset"), _("Horizontal output displacement"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSimilarityBase, odx), -10000000, 10000000, 0); VIPS_ARG_DOUBLE(class, "ody", 113, _("Output offset"), _("Vertical output displacement"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSimilarityBase, ody), -10000000, 10000000, 0); VIPS_ARG_DOUBLE(class, "idx", 114, _("Input offset"), _("Horizontal input displacement"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSimilarityBase, idx), -10000000, 10000000, 0); VIPS_ARG_DOUBLE(class, "idy", 115, _("Input offset"), _("Vertical input displacement"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSimilarityBase, idy), -10000000, 10000000, 0); } static void vips_similarity_base_init(VipsSimilarityBase *base) { base->scale = 1; base->angle = 0; base->interpolate = NULL; base->odx = 0; base->ody = 0; base->idx = 0; base->idy = 0; base->background = vips_array_double_newv(1, 0.0); } typedef VipsSimilarityBase VipsSimilarity; typedef VipsSimilarityBaseClass VipsSimilarityClass; G_DEFINE_TYPE(VipsSimilarity, vips_similarity, vips_similarity_base_get_type()); static void vips_similarity_class_init(VipsSimilarityClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "similarity"; vobject_class->description = _("similarity transform of an image"); VIPS_ARG_DOUBLE(class, "scale", 3, _("Scale"), _("Scale by this factor"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSimilarity, scale), 0, 10000000, 1); VIPS_ARG_DOUBLE(class, "angle", 4, _("Angle"), _("Rotate anticlockwise by this many degrees"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsSimilarity, angle), -10000000, 10000000, 0); } static void vips_similarity_init(VipsSimilarity *similarity) { } /** * vips_similarity: (method) * @in: input image * @out: (out): output image * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @scale: %gdouble, scale by this factor * * @angle: %gdouble, rotate by this many degrees clockwise * * @interpolate: #VipsInterpolate, interpolate pixels with this * * @background: #VipsArrayDouble colour for new pixels * * @idx: %gdouble, input horizontal offset * * @idy: %gdouble, input vertical offset * * @odx: %gdouble, output horizontal offset * * @ody: %gdouble, output vertical offset * * This operator calls vips_affine() for you, calculating the matrix for the * affine transform from @scale and @angle. Other parameters are passed on to * vips_affine() unaltered. * * See also: vips_affine(), #VipsInterpolate. * * Returns: 0 on success, -1 on error */ int vips_similarity(VipsImage *in, VipsImage **out, ...) { va_list ap; int result; va_start(ap, out); result = vips_call_split("similarity", ap, in, out); va_end(ap); return result; } typedef VipsSimilarityBase VipsRotate; typedef VipsSimilarityBaseClass VipsRotateClass; G_DEFINE_TYPE(VipsRotate, vips_rotate, vips_similarity_base_get_type()); static void vips_rotate_class_init(VipsRotateClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "rotate"; vobject_class->description = _("rotate an image by a number of degrees"); VIPS_ARG_DOUBLE(class, "angle", 4, _("Angle"), _("Rotate anticlockwise by this many degrees"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsSimilarity, angle), -10000000, 10000000, 0); } static void vips_rotate_init(VipsRotate *rotate) { } /** * vips_rotate: (method) * @in: input image * @out: (out): output image * @angle: %gdouble, rotate by this many degrees clockwise * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @interpolate: #VipsInterpolate, interpolate pixels with this * * @background: #VipsArrayDouble colour for new pixels * * @idx: %gdouble, input horizontal offset * * @idy: %gdouble, input vertical offset * * @odx: %gdouble, output horizontal offset * * @ody: %gdouble, output vertical offset * * This operator calls vips_affine() for you, calculating the matrix for the * affine transform from @scale and @angle. Other parameters are passed on to * vips_affine() unaltered. * * See also: vips_affine(), #VipsInterpolate. * * Returns: 0 on success, -1 on error */ int vips_rotate(VipsImage *in, VipsImage **out, double angle, ...) { va_list ap; int result; va_start(ap, angle); result = vips_call_split("rotate", ap, in, out, angle); va_end(ap); return result; } libvips-8.15.1/libvips/resample/templates.h000066400000000000000000000274021454007373500207220ustar00rootroot00000000000000/* various interpolation templates */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #include /* * Various casts which assume that the data is already in range. (That * is, they are to be used with monotone samplers.) */ template static T inline to_fptypes(const double val) { const T newval = val; return newval; } template static T inline to_withsign(const double val) { const int sign_of_val = 2 * (val >= 0.) - 1; const int rounded_abs_val = .5 + sign_of_val * val; const T newval = sign_of_val * rounded_abs_val; return newval; } template static T inline to_nosign(const double val) { const T newval = .5 + val; return newval; } /* * Various bilinear implementation templates. Note that no clampling * is used: There is an assumption that the data is such that * over/underflow is not an issue: */ /* * Bilinear interpolation for float and double types. The first four * inputs are weights, the last four are the corresponding pixel * values: */ template static T inline bilinear_fptypes( const double w_times_z, const double x_times_z, const double w_times_y, const double x_times_y, const double tre_thr, const double tre_thrfou, const double trequa_thr, const double trequa_thrfou) { const T newval = w_times_z * tre_thr + x_times_z * tre_thrfou + w_times_y * trequa_thr + x_times_y * trequa_thrfou; return newval; } /* * Bilinear interpolation for signed integer types: */ template static T inline bilinear_withsign( const double w_times_z, const double x_times_z, const double w_times_y, const double x_times_y, const double tre_thr, const double tre_thrfou, const double trequa_thr, const double trequa_thrfou) { const double val = w_times_z * tre_thr + x_times_z * tre_thrfou + w_times_y * trequa_thr + x_times_y * trequa_thrfou; const int sign_of_val = 2 * (val >= 0.) - 1; const int rounded_abs_val = .5 + sign_of_val * val; const T newval = sign_of_val * rounded_abs_val; return newval; } /* * Bilinear Interpolation for unsigned integer types: */ template static T inline bilinear_nosign( const double w_times_z, const double x_times_z, const double w_times_y, const double x_times_y, const double tre_thr, const double tre_thrfou, const double trequa_thr, const double trequa_thrfou) { const T newval = w_times_z * tre_thr + x_times_z * tre_thrfou + w_times_y * trequa_thr + x_times_y * trequa_thrfou + 0.5; return newval; } /* * Bicubic (Catmull-Rom) interpolation templates: */ template static T inline unsigned_fixed_round(T v) { const int round_by = VIPS_INTERPOLATE_SCALE >> 1; return (v + round_by) >> VIPS_INTERPOLATE_SHIFT; } /* Fixed-point integer bicubic, used for 8-bit types. */ template static int inline bicubic_unsigned_int( const T uno_one, const T uno_two, const T uno_thr, const T uno_fou, const T dos_one, const T dos_two, const T dos_thr, const T dos_fou, const T tre_one, const T tre_two, const T tre_thr, const T tre_fou, const T qua_one, const T qua_two, const T qua_thr, const T qua_fou, const int *restrict cx, const int *restrict cy) { const int c0 = cx[0]; const int c1 = cx[1]; const int c2 = cx[2]; const int c3 = cx[3]; const int r0 = unsigned_fixed_round( c0 * uno_one + c1 * uno_two + c2 * uno_thr + c3 * uno_fou); const int r1 = unsigned_fixed_round( c0 * dos_one + c1 * dos_two + c2 * dos_thr + c3 * dos_fou); const int r2 = unsigned_fixed_round( c0 * tre_one + c1 * tre_two + c2 * tre_thr + c3 * tre_fou); const int r3 = unsigned_fixed_round( c0 * qua_one + c1 * qua_two + c2 * qua_thr + c3 * qua_fou); return unsigned_fixed_round( cy[0] * r0 + cy[1] * r1 + cy[2] * r2 + cy[3] * r3); } template static T inline signed_fixed_round(T v) { const int sign_of_v = 2 * (v >= 0) - 1; const int round_by = sign_of_v * (VIPS_INTERPOLATE_SCALE >> 1); return (v + round_by) >> VIPS_INTERPOLATE_SHIFT; } /* Fixed-point integer bicubic, used for 8-bit types. */ template static int inline bicubic_signed_int( const T uno_one, const T uno_two, const T uno_thr, const T uno_fou, const T dos_one, const T dos_two, const T dos_thr, const T dos_fou, const T tre_one, const T tre_two, const T tre_thr, const T tre_fou, const T qua_one, const T qua_two, const T qua_thr, const T qua_fou, const int *restrict cx, const int *restrict cy) { const int c0 = cx[0]; const int c1 = cx[1]; const int c2 = cx[2]; const int c3 = cx[3]; const int r0 = signed_fixed_round( c0 * uno_one + c1 * uno_two + c2 * uno_thr + c3 * uno_fou); const int r1 = signed_fixed_round( c0 * dos_one + c1 * dos_two + c2 * dos_thr + c3 * dos_fou); const int r2 = signed_fixed_round( c0 * tre_one + c1 * tre_two + c2 * tre_thr + c3 * tre_fou); const int r3 = signed_fixed_round( c0 * qua_one + c1 * qua_two + c2 * qua_thr + c3 * qua_fou); return signed_fixed_round( cy[0] * r0 + cy[1] * r1 + cy[2] * r2 + cy[3] * r3); } template static T inline cubic_float( const T one, const T two, const T thr, const T fou, const double *restrict cx) { return cx[0] * one + cx[1] * two + cx[2] * thr + cx[3] * fou; } /* Floating-point bicubic, used for int/float/double types. */ template static T inline bicubic_float( const T uno_one, const T uno_two, const T uno_thr, const T uno_fou, const T dos_one, const T dos_two, const T dos_thr, const T dos_fou, const T tre_one, const T tre_two, const T tre_thr, const T tre_fou, const T qua_one, const T qua_two, const T qua_thr, const T qua_fou, const double *restrict cx, const double *restrict cy) { const double r0 = cubic_float( uno_one, uno_two, uno_thr, uno_fou, cx); const double r1 = cubic_float( dos_one, dos_two, dos_thr, dos_fou, cx); const double r2 = cubic_float( tre_one, tre_two, tre_thr, tre_fou, cx); const double r3 = cubic_float( qua_one, qua_two, qua_thr, qua_fou, cx); return cubic_float(r0, r1, r2, r3, cy); } /* Given an offset in [0,1] (we can have x == 1 when building tables), * calculate c0, c1, c2, c3, the catmull-rom coefficients. This is called * from the interpolator as well as from the table builder. */ static void inline calculate_coefficients_catmull(double c[4], const double x) { /* Nicolas believes that the following is an hitherto unknown * hyper-efficient method of computing Catmull-Rom coefficients. It * only uses 4* & 1+ & 5- for a total of only 10 flops to compute * four coefficients. */ const double cr1 = 1. - x; const double cr2 = -.5 * x; const double cr3 = cr1 * cr2; const double cone = cr1 * cr3; const double cfou = x * cr3; const double cr4 = cfou - cone; const double ctwo = cr1 - cone + cr4; const double cthr = x - cfou - cr4; g_assert(x >= 0. && x <= 1.); c[0] = cone; c[3] = cfou; c[1] = ctwo; c[2] = cthr; } /* Generate a cubic filter. See: * * Mitchell and Netravali, Reconstruction Filters in Computer Graphics * Computer Graphics, Volume 22, Number 4, August 1988. * * B = 1, C = 0 - cubic B-spline * B = 1/3, C = 1/3 - Mitchell * B = 0, C = 1/2 - Catmull-Rom spline */ static double inline cubic_filter(double x, double B, double C) { const double ax = VIPS_FABS(x); const double ax2 = ax * ax; const double ax3 = ax2 * ax; if (ax <= 1) return ((12 - 9 * B - 6 * C) * ax3 + (-18 + 12 * B + 6 * C) * ax2 + (6 - 2 * B)) / 6; if (ax <= 2) return ((-B - 6 * C) * ax3 + (6 * B + 30 * C) * ax2 + (-12 * B - 48 * C) * ax + (8 * B + 24 * C)) / 6; return 0.0; } static double inline sinc_filter(double x) { if (x == 0.0) return 1.0; x = x * VIPS_PI; return sin(x) / x; } using VipsFilterFn = double (*)(double); template static double inline filter(double x); template <> double inline filter(double x) { if (x < 0.0) x = -x; if (x < 1.0) return 1.0 - x; return 0.0; } /* Catmull-Rom. */ template <> double inline filter(double x) { return cubic_filter(x, 0.0, 0.5); } template <> double inline filter(double x) { return cubic_filter(x, 1.0 / 3.0, 1.0 / 3.0); } template <> double inline filter(double x) { if (x >= -2 && x <= 2) return sinc_filter(x) * sinc_filter(x / 2); return 0.0; } template <> double inline filter(double x) { if (x >= -3 && x <= 3) return sinc_filter(x) * sinc_filter(x / 3); return 0.0; } /* Given an x in [0,1] (we can have x == 1 when building tables), * calculate c0 .. c(@n_points), the coefficients. This is called * from the interpolator as well as from the table builder. * * @shrink is the reduction factor, so 1 for interpolation, 2 for a * x2 reduction, etc. */ template static void calculate_coefficients(T *c, const int n_points, VipsFilterFn filter_fn, const double shrink, const double x) { const double half = x + n_points / 2.0 - 1; int i; T sum; sum = 0.0; for (i = 0; i < n_points; i++) { const double xp = (i - half) / shrink; double l = filter_fn(xp); c[i] = l; sum += l; } for (i = 0; i < n_points; i++) c[i] /= sum; } /* Calculate a mask element. */ template static void vips_reduce_make_mask(T *c, VipsKernel kernel, const int n_points, const double shrink, const double x) { switch (kernel) { case VIPS_KERNEL_NEAREST: c[0] = 1.0; break; case VIPS_KERNEL_LINEAR: calculate_coefficients(c, n_points, filter, shrink, x); break; case VIPS_KERNEL_CUBIC: calculate_coefficients(c, n_points, filter, shrink, x); break; case VIPS_KERNEL_MITCHELL: calculate_coefficients(c, n_points, filter, shrink, x); break; case VIPS_KERNEL_LANCZOS2: calculate_coefficients(c, n_points, filter, shrink, x); break; case VIPS_KERNEL_LANCZOS3: calculate_coefficients(c, n_points, filter, shrink, x); break; default: g_assert_not_reached(); break; } } /* Machinery to promote type T to a larger data type, prevents an * overflow in reduce_sum(). Defaults to a 32-bit integral type. */ template struct LongT { typedef int32_t type; }; /* 32-bit integral types needs a 64-bits intermediate. */ template <> struct LongT { typedef int64_t type; }; template <> struct LongT { typedef int64_t type; }; /* 32-bit floating-point types needs a 64-bits intermediate. */ template <> struct LongT { typedef double type; }; /* 64-bit floating-point types needs a 128-bits intermediate. */ template <> struct LongT { typedef long double type; }; /* Our inner loop for resampling with a convolution of type CT. Operate on * elements of type T, gather results in an intermediate of type IT. */ template ::type> static IT inline reduce_sum(const T *restrict in, int stride, const CT *restrict c, int n) { IT sum; sum = 0; for (int i = 0; i < n; i++) { sum += (IT) c[i] * in[0]; in += stride; } return sum; } libvips-8.15.1/libvips/resample/thumbnail.c000066400000000000000000001455501454007373500207070ustar00rootroot00000000000000/* make a thumbnail ... wraps up the process of thumbnailing, including * premultiply, colour management etc etc * * 2/11/16 * - from vipsthumbnail.c * 6/1/17 * - add @size parameter * 4/5/17 * - add FORCE * 29/5/17 * - don't cache (thanks tomasc) * 30/8/17 * - add intent option, thanks kleisauke * 31/10/18 * - deprecate auto_rotate, add no_rotate * - implement shrink-on-load for openslide images * 16/11/18 * - implement shrink-on-load for tiff pyramid * 3/2/19 kleisauke * - add option_string param to thumbnail_buffer * 23/4/19 * - don't force import CMYK, since colourspace knows about it now * 24/4/19 * - support multi-page (animated) images * 27/8/19 kleisauke * - prevent over-pre-shrink in thumbnail * 30/9/19 * - smarter heif thumbnail selection * 12/10/19 * - add thumbnail_source * 2/6/20 * - add subifd pyr support * 27/2/21 * - simplify rules re. processing space, colour management and linear * mode * 14/4/22 * - add a seq to thumbnail_image to stop cache thrashing * 28/4/22 * - add fail_on * 1/3/23 kleisauke * - skip colourspace conversion when needed */ /* Copyright (C) 1991-2005 The National Gallery This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #define VIPS_TYPE_THUMBNAIL (vips_thumbnail_get_type()) #define VIPS_THUMBNAIL(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), VIPS_TYPE_THUMBNAIL, VipsThumbnail)) #define VIPS_THUMBNAIL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_THUMBNAIL, VipsThumbnailClass)) #define VIPS_IS_THUMBNAIL(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_THUMBNAIL)) #define VIPS_IS_THUMBNAIL_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_THUMBNAIL)) #define VIPS_THUMBNAIL_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_THUMBNAIL, VipsThumbnailClass)) /* Should be plenty. */ #define MAX_LEVELS (256) typedef struct _VipsThumbnail { VipsOperation parent_instance; VipsImage *out; int width; int height; VipsSize size; gboolean auto_rotate; gboolean no_rotate; VipsInteresting crop; gboolean linear; char *export_profile; char *import_profile; VipsIntent intent; VipsFailOn fail_on; /* Bits of info we read from the input image when we get the header of * the original. */ const char *loader; /* Eg. "VipsForeignLoadJpeg*" */ int input_width; int input_height; int page_height; int orientation; /* From vips_image_get_orientation() */ gboolean swap; /* If we must swap width / height */ int n_pages; /* Pages in file */ int n_loaded_pages; /* Pages we've loaded from file */ int n_subifds; /* Number of subifds */ /* For pyramidal formats, we need to read out the size of each level. */ int level_count; int level_width[MAX_LEVELS]; int level_height[MAX_LEVELS]; /* For HEIF, try to fetch the size of the stored thumbnail. */ int heif_thumbnail_width; int heif_thumbnail_height; /* Pyramids are stored in subifds. */ gboolean subifd_pyramid; /* Pyramids are stored in pages. */ gboolean page_pyramid; } VipsThumbnail; typedef struct _VipsThumbnailClass { VipsOperationClass parent_class; /* Fill out the info section of VipsThumbnail from the input object. */ int (*get_info)(VipsThumbnail *thumbnail); /* Open with some kind of shrink or scale factor. Exactly what we pass * and to what param depends on the loader. It'll be an integer shrink * factor for vips_jpegload(), a double scale factor for vips_svgload(). * * See VipsThumbnail::loader */ VipsImage *(*open)(VipsThumbnail *thumbnail, double factor); } VipsThumbnailClass; G_DEFINE_ABSTRACT_TYPE(VipsThumbnail, vips_thumbnail, VIPS_TYPE_OPERATION); static void vips_thumbnail_dispose(GObject *gobject) { #ifdef DEBUG printf("vips_thumbnail_dispose: "); vips_object_print_name(VIPS_OBJECT(gobject)); printf("\n"); #endif /*DEBUG*/ G_OBJECT_CLASS(vips_thumbnail_parent_class)->dispose(gobject); } static void vips_thumbnail_finalize(GObject *gobject) { #ifdef DEBUG printf("vips_thumbnail_finalize: "); vips_object_print_name(VIPS_OBJECT(gobject)); printf("\n"); #endif /*DEBUG*/ G_OBJECT_CLASS(vips_thumbnail_parent_class)->finalize(gobject); } /* Fetch an int openslide field from metadata. These are all represented as * strings. Return the default value if there's any problem. */ static int get_int(VipsImage *image, const char *field, int default_value) { const char *str; if (vips_image_get_typeof(image, field) && !vips_image_get_string(image, field, &str)) return atoi(str); return default_value; } static void vips_thumbnail_read_header(VipsThumbnail *thumbnail, VipsImage *image) { thumbnail->input_width = image->Xsize; thumbnail->input_height = image->Ysize; thumbnail->orientation = vips_image_get_orientation(image); thumbnail->swap = vips_image_get_orientation_swap(image); thumbnail->page_height = vips_image_get_page_height(image); thumbnail->n_pages = vips_image_get_n_pages(image); thumbnail->n_subifds = vips_image_get_n_subifds(image); /* VIPS_META_N_PAGES is the number of pages in the document, * not the number we've read out into this image. We calculate * ourselves from page_height. * * vips_image_get_page_height() has verified that Ysize is a simple * multiple of page_height. */ thumbnail->n_loaded_pages = thumbnail->input_height / thumbnail->page_height; /* For openslide, read out the level structure too. */ if (vips_isprefix("VipsForeignLoadOpenslide", thumbnail->loader)) { int level_count; int level; level_count = get_int(image, "openslide.level-count", 1); level_count = VIPS_CLIP(1, level_count, MAX_LEVELS); thumbnail->level_count = level_count; for (level = 0; level < level_count; level++) { char name[256]; vips_snprintf(name, 256, "openslide.level[%d].width", level); thumbnail->level_width[level] = get_int(image, name, 0); vips_snprintf(name, 256, "openslide.level[%d].height", level); thumbnail->level_height[level] = get_int(image, name, 0); } } } /* Detect a pyramid made of pages following a roughly /2 shrink. * * This may not be a pyr tiff, so no error if we can't find the layers. */ static void vips_thumbnail_get_pyramid_page(VipsThumbnail *thumbnail) { VipsThumbnailClass *class = VIPS_THUMBNAIL_GET_CLASS(thumbnail); int i; #ifdef DEBUG printf("vips_thumbnail_get_pyramid_page:\n"); #endif /*DEBUG*/ /* Single-page docs can't be pyramids. */ if (thumbnail->n_pages < 2) return; for (i = 0; i < thumbnail->n_pages; i++) { VipsImage *page; int level_width; int level_height; int expected_level_width; int expected_level_height; if (!(page = class->open(thumbnail, i))) return; level_width = page->Xsize; level_height = page->Ysize; VIPS_UNREF(page); expected_level_width = thumbnail->input_width / (1 << i); expected_level_height = thumbnail->input_height / (1 << i); /* This won't be exact due to rounding etc. */ if (abs(level_width - expected_level_width) > 5 || level_width < 2) return; if (abs(level_height - expected_level_height) > 5 || level_height < 2) return; thumbnail->level_width[i] = level_width; thumbnail->level_height[i] = level_height; } /* Now set level_count. This signals that we've found a pyramid. */ #ifdef DEBUG printf("vips_thumbnail_get_pyramid_page: %d layer pyramid detected\n", thumbnail->n_pages); #endif /*DEBUG*/ thumbnail->level_count = thumbnail->n_pages; } /* Detect a TIFF pyramid made of subifds following a roughly /2 shrink. * * This may not be a pyr tiff, so no error if we can't find the layers. */ static void vips_thumbnail_get_tiff_pyramid_subifd(VipsThumbnail *thumbnail) { VipsThumbnailClass *class = VIPS_THUMBNAIL_GET_CLASS(thumbnail); int i; #ifdef DEBUG printf("vips_thumbnail_get_tiff_pyramid_subifd:\n"); #endif /*DEBUG*/ for (i = 0; i < thumbnail->n_subifds; i++) { VipsImage *page; int level_width; int level_height; int expected_level_width; int expected_level_height; if (!(page = class->open(thumbnail, i))) return; level_width = page->Xsize; level_height = page->Ysize; VIPS_UNREF(page); /* The main image is size 1, subifd 0 is half that. */ expected_level_width = thumbnail->input_width / (2 << i); expected_level_height = thumbnail->input_height / (2 << i); /* This won't be exact due to rounding etc. */ if (abs(level_width - expected_level_width) > 5 || level_width < 2) return; if (abs(level_height - expected_level_height) > 5 || level_height < 2) return; thumbnail->level_width[i] = level_width; thumbnail->level_height[i] = level_height; } /* Now set level_count. This signals that we've found a pyramid. */ #ifdef DEBUG printf("vips_thumbnail_get_tiff_pyramid_subifd: " "%d layer pyramid detected\n", thumbnail->n_subifds); #endif /*DEBUG*/ thumbnail->level_count = thumbnail->n_subifds; } static int vips_thumbnail_get_heif_thumb_info(VipsThumbnail *thumbnail) { VipsThumbnailClass *class = VIPS_THUMBNAIL_GET_CLASS(thumbnail); VipsImage *thumb; if (!(thumb = class->open(thumbnail, 1))) return -1; if (thumb->Xsize < thumbnail->input_width) { thumbnail->heif_thumbnail_width = thumb->Xsize; thumbnail->heif_thumbnail_height = thumb->Ysize; } VIPS_UNREF(thumb); return 0; } /* Calculate the shrink factor, taking into account auto-rotate, the fit mode, * and so on. * * The hshrink/vshrink are the amount to shrink the input image axes by in * order for the output axes (ie. after rotation) to match the required * thumbnail->width, thumbnail->height and fit mode. */ static void vips_thumbnail_calculate_shrink(VipsThumbnail *thumbnail, int input_width, int input_height, double *hshrink, double *vshrink) { /* If we will be rotating, swap the target width and height. */ gboolean rotate = thumbnail->swap && thumbnail->auto_rotate; int target_width = rotate ? thumbnail->height : thumbnail->width; int target_height = rotate ? thumbnail->width : thumbnail->height; VipsDirection direction; /* Calculate the horizontal and vertical shrink we'd need to fit the * image to the bounding box, and pick the biggest. * * In crop mode, we aim to fill the bounding box, so we must use the * smaller axis. */ *hshrink = (double) input_width / target_width; *vshrink = (double) input_height / target_height; if (thumbnail->crop != VIPS_INTERESTING_NONE) { if (*hshrink < *vshrink) direction = VIPS_DIRECTION_HORIZONTAL; else direction = VIPS_DIRECTION_VERTICAL; } else { if (*hshrink < *vshrink) direction = VIPS_DIRECTION_VERTICAL; else direction = VIPS_DIRECTION_HORIZONTAL; } if (thumbnail->size != VIPS_SIZE_FORCE) { if (direction == VIPS_DIRECTION_HORIZONTAL) *vshrink = *hshrink; else *hshrink = *vshrink; } if (thumbnail->size == VIPS_SIZE_UP) { *hshrink = VIPS_MIN(1, *hshrink); *vshrink = VIPS_MIN(1, *vshrink); } else if (thumbnail->size == VIPS_SIZE_DOWN) { *hshrink = VIPS_MAX(1, *hshrink); *vshrink = VIPS_MAX(1, *vshrink); } /* We don't want to shrink so much that we send an axis to 0. */ *hshrink = VIPS_MIN(*hshrink, input_width); *vshrink = VIPS_MIN(*vshrink, input_height); } /* Just the common part of the shrink: the bit by which both axes must be * shrunk. */ static double vips_thumbnail_calculate_common_shrink(VipsThumbnail *thumbnail, int width, int height) { double hshrink; double vshrink; double shrink; vips_thumbnail_calculate_shrink(thumbnail, width, height, &hshrink, &vshrink); shrink = VIPS_MIN(hshrink, vshrink); return shrink; } /* Find the best jpeg preload shrink. */ static int vips_thumbnail_find_jpegshrink(VipsThumbnail *thumbnail, int width, int height) { double shrink = vips_thumbnail_calculate_common_shrink(thumbnail, width, height); /* We can't use pre-shrunk images in linear mode. libjpeg shrinks in Y * (of YCbCR), not linear space. */ if (thumbnail->linear) return 1; /* Shrink-on-load is a simple block shrink and will add quite a bit of * extra sharpness to the image. We want to block shrink to a * bit above our target, then vips_shrink() / vips_reduce() to the * final size. * * Leave at least a factor of two for the final resize step. */ if (shrink >= 16) return 8; else if (shrink >= 8) return 4; else if (shrink >= 4) return 2; else return 1; } /* Find the best pyramid (openslide, tiff, etc.) level. */ static int vips_thumbnail_find_pyrlevel(VipsThumbnail *thumbnail, int width, int height) { int level; g_assert(thumbnail->level_count > 0); g_assert(thumbnail->level_count <= MAX_LEVELS); for (level = thumbnail->level_count - 1; level >= 0; level--) if (vips_thumbnail_calculate_common_shrink(thumbnail, thumbnail->level_width[level], thumbnail->level_height[level]) >= 1.0) return level; return 0; } /* Open the image, returning the best version for thumbnailing. * * For example, libjpeg supports fast shrink-on-read, so if we have a JPEG, * we can ask VIPS to load a lower resolution version. */ static VipsImage * vips_thumbnail_open(VipsThumbnail *thumbnail) { VipsThumbnailClass *class = VIPS_THUMBNAIL_GET_CLASS(thumbnail); VipsImage *im; double factor; if (class->get_info(thumbnail)) return NULL; g_info("selected loader is %s", thumbnail->loader); g_info("input size is %d x %d", thumbnail->input_width, thumbnail->input_height); /* For tiff, scan the image and try to spot page-based and ifd-based * pyramids. */ if (vips_isprefix("VipsForeignLoadTiff", thumbnail->loader)) { /* Test for a subifd pyr first, since we can do that from just * one page. */ thumbnail->subifd_pyramid = TRUE; vips_thumbnail_get_tiff_pyramid_subifd(thumbnail); if (thumbnail->level_count == 0) { thumbnail->subifd_pyramid = FALSE; thumbnail->page_pyramid = TRUE; vips_thumbnail_get_pyramid_page(thumbnail); if (thumbnail->level_count == 0) thumbnail->page_pyramid = FALSE; } } /* jp2k uses page-based pyramids. */ if (vips_isprefix("VipsForeignLoadJp2k", thumbnail->loader)) { if (thumbnail->level_count == 0) { thumbnail->subifd_pyramid = FALSE; thumbnail->page_pyramid = TRUE; vips_thumbnail_get_pyramid_page(thumbnail); if (thumbnail->level_count == 0) thumbnail->page_pyramid = FALSE; } } /* For heif, we need to fetch the thumbnail size, in case we can use * that as the source. */ if (vips_isprefix("VipsForeignLoadHeif", thumbnail->loader)) vips_thumbnail_get_heif_thumb_info(thumbnail); /* We read the openslide level structure in * vips_thumbnail_read_header(). */ factor = 1.0; if (vips_isprefix("VipsForeignLoadJpeg", thumbnail->loader)) factor = vips_thumbnail_find_jpegshrink(thumbnail, thumbnail->input_width, thumbnail->input_height); else if (vips_isprefix("VipsForeignLoadTiff", thumbnail->loader) || vips_isprefix("VipsForeignLoadJp2k", thumbnail->loader) || vips_isprefix("VipsForeignLoadOpenslide", thumbnail->loader)) { if (thumbnail->level_count > 0) factor = vips_thumbnail_find_pyrlevel(thumbnail, thumbnail->input_width, thumbnail->input_height); } else if (vips_isprefix("VipsForeignLoadWebp", thumbnail->loader)) { factor = vips_thumbnail_calculate_common_shrink(thumbnail, thumbnail->input_width, thumbnail->page_height); /* Avoid upsizing via libwebp. */ factor = VIPS_MAX(1.0, factor); } else if (vips_isprefix("VipsForeignLoadPdf", thumbnail->loader) || vips_isprefix("VipsForeignLoadSvg", thumbnail->loader)) factor = vips_thumbnail_calculate_common_shrink(thumbnail, thumbnail->input_width, thumbnail->page_height); else if (vips_isprefix("VipsForeignLoadHeif", thumbnail->loader)) { /* 'factor' is a gboolean which enables thumbnail load instead * of image load. * * Use the thumbnail if, by using it, we could get a factor > * 1.0, ie. we would not need to expand the thumbnail. * * Don't use >= since factor can be clipped to 1.0 under some * resizing modes. */ double shrink_factor = vips_thumbnail_calculate_common_shrink( thumbnail, thumbnail->heif_thumbnail_width, thumbnail->heif_thumbnail_height); factor = shrink_factor > 1.0 ? 1 : 0; } g_info("loading with factor %g pre-shrink", factor); if (!(im = class->open(thumbnail, factor))) return NULL; g_info("pre-shrunk size is %d x %d", im->Xsize, im->Ysize); return im; } static int vips_thumbnail_build(VipsObject *object) { VipsThumbnail *thumbnail = VIPS_THUMBNAIL(object); VipsImage **t = (VipsImage **) vips_object_local_array(object, 15); VipsImage *in; int preshrunk_page_height; double hshrink; double vshrink; /* TRUE if we've done the import of an ICC transform and still need to * export. */ gboolean have_imported; /* TRUE if the image needs to transformed with a pair of ICC profiles. */ gboolean needs_icc_transform; /* The format we need to revert to after unpremultiply. */ VipsBandFormat unpremultiplied_format; #ifdef DEBUG printf("vips_thumbnail_build: "); vips_object_print_name(object); printf("\n"); #endif /*DEBUG*/ if (VIPS_OBJECT_CLASS(vips_thumbnail_parent_class)->build(object)) return -1; /* We have to support both no_rotate and auto_rotate optional args, * with no_rotate being the new and not-deprecated one. * * If the new no_rotate flag has been set, that value overrides * auto_rotate. */ if (vips_object_argument_isset(object, "no_rotate")) thumbnail->auto_rotate = !thumbnail->no_rotate; if (!vips_object_argument_isset(object, "height")) thumbnail->height = thumbnail->width; /* Open and do any pre-shrinking. */ if (!(t[0] = vips_thumbnail_open(thumbnail))) return -1; in = t[0]; /* After pre-shrink, but before the main shrink stage. */ preshrunk_page_height = vips_image_get_page_height(in); needs_icc_transform = thumbnail->export_profile && (thumbnail->import_profile || vips_image_get_typeof(in, VIPS_META_ICC_NAME)); /* RAD needs special unpacking. */ if (in->Coding == VIPS_CODING_RAD) { g_info("unpacking Rad to float"); /* rad is scrgb. */ if (vips_rad2float(in, &t[1], NULL)) return -1; in = t[1]; } /* In linear mode, we need to transform to a linear space before * vips_resize(). */ have_imported = FALSE; if (thumbnail->linear) { /* If we are doing colour management (there's an import * profile), then we can use XYZ PCS as the resize space. */ if (in->Coding == VIPS_CODING_NONE && (in->BandFmt == VIPS_FORMAT_UCHAR || in->BandFmt == VIPS_FORMAT_USHORT) && (vips_image_get_typeof(in, VIPS_META_ICC_NAME) || thumbnail->import_profile)) { g_info("importing to XYZ PCS"); if (thumbnail->import_profile) g_info("fallback input profile %s", thumbnail->import_profile); if (vips_icc_import(in, &t[2], "input_profile", thumbnail->import_profile, "embedded", TRUE, "intent", thumbnail->intent, "pcs", VIPS_PCS_XYZ, NULL)) return -1; in = t[2]; have_imported = TRUE; } else { /* Otherwise, use scRGB or GREY16 for linear shrink. */ VipsInterpretation interpretation; if (in->Bands < 3) interpretation = VIPS_INTERPRETATION_GREY16; else interpretation = VIPS_INTERPRETATION_scRGB; g_info("converting to processing space %s", vips_enum_nick(VIPS_TYPE_INTERPRETATION, interpretation)); if (vips_colourspace(in, &t[2], interpretation, NULL)) return -1; in = t[2]; } } else if (!needs_icc_transform) { /* In non-linear mode, use sRGB or B_W as the processing space * but only when not transforming with a pair of ICC profiles. */ VipsInterpretation interpretation; if (in->Bands < 3) interpretation = VIPS_INTERPRETATION_B_W; else interpretation = VIPS_INTERPRETATION_sRGB; g_info("converting to processing space %s", vips_enum_nick(VIPS_TYPE_INTERPRETATION, interpretation)); if (vips_colourspace(in, &t[2], interpretation, NULL)) return -1; in = t[2]; } /* Shrink to preshrunk_page_height, so we work for multi-page images. */ vips_thumbnail_calculate_shrink(thumbnail, in->Xsize, preshrunk_page_height, &hshrink, &vshrink); /* In toilet-roll mode, we must adjust vshrink so that we exactly hit * page_height or we'll have pixels straddling page boundaries. */ if (in->Ysize > preshrunk_page_height) { int target_page_height = VIPS_RINT( preshrunk_page_height / vshrink); int target_image_height = target_page_height * thumbnail->n_loaded_pages; vshrink = (double) in->Ysize / target_image_height; } /* Both vips_premultiply() and vips_unpremultiply() produces a float * image, so we must cast back to the original format. Use NOTSET * to mean no pre/unmultiply. */ unpremultiplied_format = VIPS_FORMAT_NOTSET; /* If there's an alpha, we have to premultiply before shrinking. See * https://github.com/libvips/libvips/issues/291 */ if (vips_image_hasalpha(in) && hshrink != 1.0 && vshrink != 1.0) { g_info("premultiplying alpha"); unpremultiplied_format = in->BandFmt; if (vips_premultiply(in, &t[3], NULL) || vips_cast(t[3], &t[4], unpremultiplied_format, NULL)) return -1; in = t[4]; } if (vips_resize(in, &t[5], 1.0 / hshrink, "vscale", 1.0 / vshrink, NULL)) return -1; in = t[5]; if (unpremultiplied_format != VIPS_FORMAT_NOTSET) { g_info("unpremultiplying alpha"); if (vips_unpremultiply(in, &t[6], NULL) || vips_cast(t[6], &t[7], unpremultiplied_format, NULL)) return -1; in = t[7]; } /* Only set page-height if we have more than one page, or this could * accidentally turn into an animated image later. */ if (thumbnail->n_loaded_pages > 1) { int output_page_height = VIPS_RINT(preshrunk_page_height / vshrink); if (vips_copy(in, &t[8], NULL)) return -1; in = t[8]; vips_image_set_int(in, VIPS_META_PAGE_HEIGHT, output_page_height); } /* Colour management. */ if (have_imported) { /* We are in PCS. Export with the output profile, if any (this * will export with the embedded input profile if there's no * export profile). */ g_info("exporting to device space with a profile"); if (vips_icc_export(in, &t[9], "output_profile", thumbnail->export_profile, "intent", thumbnail->intent, NULL)) return -1; in = t[9]; } else if (needs_icc_transform) { /* We can transform to the output with a pair of ICC profiles. */ g_info("transforming with supplied profiles"); if (vips_icc_transform(in, &t[9], thumbnail->export_profile, "input_profile", thumbnail->import_profile, "intent", thumbnail->intent, "embedded", TRUE, NULL)) return -1; in = t[9]; } else if (thumbnail->export_profile) { /* We are in one of the resize space (sRGB, scRGB, B_W, GREY16, etc.) * and need to go to PCS, then export. */ g_info("exporting with %s", thumbnail->export_profile); if (vips_colourspace(in, &t[9], VIPS_INTERPRETATION_XYZ, NULL) || vips_icc_export(t[9], &t[10], "output_profile", thumbnail->export_profile, "intent", thumbnail->intent, NULL)) return -1; in = t[10]; } else if (thumbnail->linear) { /* We are in one of the scRGB or GREY16 spaces and there's * no export profile. Output to sRGB or B_W. */ VipsInterpretation interpretation; if (in->Bands < 3) interpretation = VIPS_INTERPRETATION_B_W; else interpretation = VIPS_INTERPRETATION_sRGB; g_info("converting to output space %s", vips_enum_nick(VIPS_TYPE_INTERPRETATION, interpretation)); if (vips_colourspace(in, &t[9], interpretation, NULL)) return -1; in = t[9]; } if (thumbnail->auto_rotate && thumbnail->orientation != 1) { g_info("rotating by EXIF orientation %d", thumbnail->orientation); /* Need to copy to memory, we have to stay seq. */ if (!(t[11] = vips_image_copy_memory(in)) || vips_autorot(t[11], &t[12], NULL)) return -1; in = t[12]; } /* Crop after rotate so we don't need to rotate the crop box. */ if (thumbnail->crop != VIPS_INTERESTING_NONE) { /* The image can be smaller than the target. Adjust the * arguments to vips_smartcrop(). */ int crop_width = VIPS_MIN(thumbnail->width, in->Xsize); int crop_height = VIPS_MIN(thumbnail->height, in->Ysize); g_info("cropping to %dx%d", crop_width, crop_height); /* Need to copy to memory, we have to stay seq. * * FIXME ... could skip the copy if we've rotated. */ if (!(t[13] = vips_image_copy_memory(in)) || vips_smartcrop(t[13], &t[14], crop_width, crop_height, "interesting", thumbnail->crop, NULL)) return -1; in = t[14]; } g_object_set(thumbnail, "out", vips_image_new(), NULL); if (vips_image_write(in, thumbnail->out)) return -1; return 0; } static void vips_thumbnail_class_init(VipsThumbnailClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsOperationClass *operation_class = VIPS_OPERATION_CLASS(class); gobject_class->dispose = vips_thumbnail_dispose; gobject_class->finalize = vips_thumbnail_finalize; gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "thumbnail_base"; vobject_class->description = _("thumbnail generation"); vobject_class->build = vips_thumbnail_build; /* We mustn't cache these calls, since we open the file or buffer in * sequential mode. */ operation_class->flags |= VIPS_OPERATION_NOCACHE; VIPS_ARG_IMAGE(class, "out", 2, _("Output"), _("Output image"), VIPS_ARGUMENT_REQUIRED_OUTPUT, G_STRUCT_OFFSET(VipsThumbnail, out)); VIPS_ARG_INT(class, "width", 3, _("Target width"), _("Size to this width"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsThumbnail, width), 1, VIPS_MAX_COORD, 1); VIPS_ARG_INT(class, "height", 113, _("Target height"), _("Size to this height"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsThumbnail, height), 1, VIPS_MAX_COORD, 1); VIPS_ARG_ENUM(class, "size", 114, _("Size"), _("Only upsize, only downsize, or both"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsThumbnail, size), VIPS_TYPE_SIZE, VIPS_SIZE_BOTH); VIPS_ARG_BOOL(class, "no_rotate", 115, _("No rotate"), _("Don't use orientation tags to rotate image upright"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsThumbnail, no_rotate), FALSE); VIPS_ARG_ENUM(class, "crop", 116, _("Crop"), _("Reduce to fill target rectangle, then crop"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsThumbnail, crop), VIPS_TYPE_INTERESTING, VIPS_INTERESTING_NONE); VIPS_ARG_BOOL(class, "linear", 117, _("Linear"), _("Reduce in linear light"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsThumbnail, linear), FALSE); VIPS_ARG_STRING(class, "import_profile", 118, _("Import profile"), _("Fallback import profile"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsThumbnail, import_profile), NULL); VIPS_ARG_STRING(class, "export_profile", 119, _("Export profile"), _("Fallback export profile"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsThumbnail, export_profile), NULL); VIPS_ARG_ENUM(class, "intent", 120, _("Intent"), _("Rendering intent"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsThumbnail, intent), VIPS_TYPE_INTENT, VIPS_INTENT_RELATIVE); VIPS_ARG_ENUM(class, "fail_on", 121, _("Fail on"), _("Error level to fail on"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsThumbnail, fail_on), VIPS_TYPE_FAIL_ON, VIPS_FAIL_ON_NONE); /* BOOL args which default TRUE arguments don't work with the * command-line -- GOption does not allow --auto-rotate=false. * * This is now replaced (though still functional) with "no-rotate", * see above. */ VIPS_ARG_BOOL(class, "auto_rotate", 121, _("Auto rotate"), _("Use orientation tags to rotate image upright"), VIPS_ARGUMENT_OPTIONAL_INPUT | VIPS_ARGUMENT_DEPRECATED, G_STRUCT_OFFSET(VipsThumbnail, auto_rotate), TRUE); } static void vips_thumbnail_init(VipsThumbnail *thumbnail) { thumbnail->width = 1; thumbnail->height = 1; thumbnail->auto_rotate = TRUE; thumbnail->intent = VIPS_INTENT_RELATIVE; thumbnail->fail_on = VIPS_FAIL_ON_NONE; } typedef struct _VipsThumbnailFile { VipsThumbnail parent_object; char *filename; } VipsThumbnailFile; typedef VipsThumbnailClass VipsThumbnailFileClass; G_DEFINE_TYPE(VipsThumbnailFile, vips_thumbnail_file, vips_thumbnail_get_type()); /* Get the info from a file. */ static int vips_thumbnail_file_get_info(VipsThumbnail *thumbnail) { VipsThumbnailFile *file = (VipsThumbnailFile *) thumbnail; VipsImage *image; g_info("thumbnailing %s", file->filename); if (!(thumbnail->loader = vips_foreign_find_load(file->filename)) || !(image = vips_image_new_from_file(file->filename, NULL))) return -1; vips_thumbnail_read_header(thumbnail, image); g_object_unref(image); return 0; } /* Open an image, pre-shrinking as appropriate. */ static VipsImage * vips_thumbnail_file_open(VipsThumbnail *thumbnail, double factor) { VipsThumbnailFile *file = (VipsThumbnailFile *) thumbnail; if (vips_isprefix("VipsForeignLoadJpeg", thumbnail->loader)) { return vips_image_new_from_file(file->filename, "access", VIPS_ACCESS_SEQUENTIAL, "fail_on", thumbnail->fail_on, "shrink", (int) factor, NULL); } else if (vips_isprefix("VipsForeignLoadOpenslide", thumbnail->loader)) { return vips_image_new_from_file(file->filename, "access", VIPS_ACCESS_SEQUENTIAL, "fail_on", thumbnail->fail_on, "level", (int) factor, NULL); } else if (vips_isprefix("VipsForeignLoadPdf", thumbnail->loader) || vips_isprefix("VipsForeignLoadSvg", thumbnail->loader) || vips_isprefix("VipsForeignLoadWebp", thumbnail->loader)) { return vips_image_new_from_file(file->filename, "access", VIPS_ACCESS_SEQUENTIAL, "fail_on", thumbnail->fail_on, "scale", 1.0 / factor, NULL); } else if (vips_isprefix("VipsForeignLoadJp2k", thumbnail->loader)) { /* jp2k optionally uses page-based pyramids. */ if (thumbnail->page_pyramid) return vips_image_new_from_file(file->filename, "access", VIPS_ACCESS_SEQUENTIAL, "fail_on", thumbnail->fail_on, "page", (int) factor, NULL); else return vips_image_new_from_file(file->filename, "access", VIPS_ACCESS_SEQUENTIAL, NULL); } else if (vips_isprefix("VipsForeignLoadTiff", thumbnail->loader)) { /* We support three modes: subifd pyramids, page-based * pyramids, and simple multi-page TIFFs (no pyramid). */ if (thumbnail->subifd_pyramid) return vips_image_new_from_file(file->filename, "access", VIPS_ACCESS_SEQUENTIAL, "fail_on", thumbnail->fail_on, "subifd", (int) factor, NULL); else if (thumbnail->page_pyramid) return vips_image_new_from_file(file->filename, "access", VIPS_ACCESS_SEQUENTIAL, "fail_on", thumbnail->fail_on, "page", (int) factor, NULL); else return vips_image_new_from_file(file->filename, "access", VIPS_ACCESS_SEQUENTIAL, "fail_on", thumbnail->fail_on, NULL); } else if (vips_isprefix("VipsForeignLoadHeif", thumbnail->loader)) { return vips_image_new_from_file(file->filename, "access", VIPS_ACCESS_SEQUENTIAL, "fail_on", thumbnail->fail_on, "thumbnail", (int) factor, NULL); } else { return vips_image_new_from_file(file->filename, "access", VIPS_ACCESS_SEQUENTIAL, "fail_on", thumbnail->fail_on, NULL); } } static void vips_thumbnail_file_class_init(VipsThumbnailClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsThumbnailClass *thumbnail_class = VIPS_THUMBNAIL_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "thumbnail"; vobject_class->description = _("generate thumbnail from file"); thumbnail_class->get_info = vips_thumbnail_file_get_info; thumbnail_class->open = vips_thumbnail_file_open; VIPS_ARG_STRING(class, "filename", 1, _("Filename"), _("Filename to read from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsThumbnailFile, filename), NULL); } static void vips_thumbnail_file_init(VipsThumbnailFile *file) { } /** * vips_thumbnail: * @filename: file to read from * @out: (out): output image * @width: target width in pixels * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @height: %gint, target height in pixels * * @size: #VipsSize, upsize, downsize, both or force * * @no_rotate: %gboolean, don't rotate upright using orientation tag * * @crop: #VipsInteresting, shrink and crop to fill target * * @linear: %gboolean, perform shrink in linear light * * @import_profile: %gchararray, fallback import ICC profile * * @export_profile: %gchararray, export ICC profile * * @intent: #VipsIntent, rendering intent * * @fail_on: #VipsFailOn, load error types to fail on * * Make a thumbnail from a file. Shrinking is done in three stages: using any * shrink-on-load features available in the file import library, using a block * shrink, and using a lanczos3 shrink. At least the final 200% is done with * lanczos3. The output should be high quality, and the operation should be * quick. * * See vips_thumbnail_buffer() to thumbnail from a memory buffer, or * vips_thumbnail_source() to thumbnail from an arbitrary byte source. * * By default, libvips will only the first frame of animated or multipage * images. To thumbnail all pages or frames, pass `n=-1` to the loader in * @filename, for example `"x.gif[n=-1]"`. * * The output image will fit within a square of size @width x @width. You can * specify a separate height with the @height option. Set either @width or * @height to a very large number to ignore that dimension. * * If you set @crop, then the output image will fill the whole of the @width x * @height rectangle, with any excess cropped away. See vips_smartcrop() for * details on the cropping strategy. * * Normally the operation will upsize or downsize as required to fit the image * inside or outside the target size. If @size is set * to #VIPS_SIZE_UP, the operation will only upsize and will just * copy if asked to downsize. * If @size is set * to #VIPS_SIZE_DOWN, the operation will only downsize and will just * copy if asked to upsize. * If @size is #VIPS_SIZE_FORCE, the image aspect ratio will be broken and the * image will be forced to fit the target. * * Normally any orientation tags on the input image (such as EXIF tags) are * interpreted to rotate the image upright. If you set @no_rotate to %TRUE, * these tags will not be interpreted. * * Shrinking is normally done in sRGB colourspace. Set @linear to shrink in * linear light colourspace instead. This can give better results, but can * also be far slower, since tricks like JPEG shrink-on-load cannot be used in * linear space. * * If you set @export_profile to the filename of an ICC profile, the image * will be transformed to the target colourspace before writing to the * output. You can also give an @import_profile which will be used if the * input image has no ICC profile, or if the profile embedded in the * input image is broken. * * Use @intent to set the rendering intent for any ICC transform. The default * is #VIPS_INTENT_RELATIVE. * * Use @fail_on to control the types of error that will cause loading to fail. * The default is #VIPS_FAIL_ON_NONE, ie. thumbnail is permissive. * * See also: vips_thumbnail_buffer(). * * Returns: 0 on success, -1 on error. */ int vips_thumbnail(const char *filename, VipsImage **out, int width, ...) { va_list ap; int result; va_start(ap, width); result = vips_call_split("thumbnail", ap, filename, out, width); va_end(ap); return result; } typedef struct _VipsThumbnailBuffer { VipsThumbnail parent_object; VipsArea *buf; char *option_string; } VipsThumbnailBuffer; typedef VipsThumbnailClass VipsThumbnailBufferClass; G_DEFINE_TYPE(VipsThumbnailBuffer, vips_thumbnail_buffer, vips_thumbnail_get_type()); /* Get the info from a buffer. */ static int vips_thumbnail_buffer_get_info(VipsThumbnail *thumbnail) { VipsThumbnailBuffer *buffer = (VipsThumbnailBuffer *) thumbnail; VipsImage *image; g_info("thumbnailing %zd bytes of data", buffer->buf->length); if (!(thumbnail->loader = vips_foreign_find_load_buffer( buffer->buf->data, buffer->buf->length)) || !(image = vips_image_new_from_buffer( buffer->buf->data, buffer->buf->length, buffer->option_string, NULL))) return -1; vips_thumbnail_read_header(thumbnail, image); g_object_unref(image); return 0; } /* Open an image, scaling as appropriate. */ static VipsImage * vips_thumbnail_buffer_open(VipsThumbnail *thumbnail, double factor) { VipsThumbnailBuffer *buffer = (VipsThumbnailBuffer *) thumbnail; if (vips_isprefix("VipsForeignLoadJpeg", thumbnail->loader)) { return vips_image_new_from_buffer( buffer->buf->data, buffer->buf->length, buffer->option_string, "access", VIPS_ACCESS_SEQUENTIAL, "shrink", (int) factor, NULL); } else if (vips_isprefix("VipsForeignLoadOpenslide", thumbnail->loader)) { return vips_image_new_from_buffer( buffer->buf->data, buffer->buf->length, buffer->option_string, "access", VIPS_ACCESS_SEQUENTIAL, "level", (int) factor, NULL); } else if (vips_isprefix("VipsForeignLoadPdf", thumbnail->loader) || vips_isprefix("VipsForeignLoadSvg", thumbnail->loader) || vips_isprefix("VipsForeignLoadWebp", thumbnail->loader)) { return vips_image_new_from_buffer( buffer->buf->data, buffer->buf->length, buffer->option_string, "access", VIPS_ACCESS_SEQUENTIAL, "scale", 1.0 / factor, NULL); } else if (vips_isprefix("VipsForeignLoadJp2k", thumbnail->loader)) { /* Optional page-based pyramids. */ if (thumbnail->page_pyramid) return vips_image_new_from_buffer( buffer->buf->data, buffer->buf->length, buffer->option_string, "access", VIPS_ACCESS_SEQUENTIAL, "page", (int) factor, NULL); else return vips_image_new_from_buffer( buffer->buf->data, buffer->buf->length, buffer->option_string, "access", VIPS_ACCESS_SEQUENTIAL, NULL); } else if (vips_isprefix("VipsForeignLoadTiff", thumbnail->loader)) { /* We support three modes: subifd pyramids, page-based * pyramids, and simple multi-page TIFFs (no pyramid). */ if (thumbnail->subifd_pyramid) return vips_image_new_from_buffer( buffer->buf->data, buffer->buf->length, buffer->option_string, "access", VIPS_ACCESS_SEQUENTIAL, "subifd", (int) factor, NULL); else if (thumbnail->page_pyramid) return vips_image_new_from_buffer( buffer->buf->data, buffer->buf->length, buffer->option_string, "access", VIPS_ACCESS_SEQUENTIAL, "page", (int) factor, NULL); else return vips_image_new_from_buffer( buffer->buf->data, buffer->buf->length, buffer->option_string, "access", VIPS_ACCESS_SEQUENTIAL, NULL); } else if (vips_isprefix("VipsForeignLoadHeif", thumbnail->loader)) { return vips_image_new_from_buffer( buffer->buf->data, buffer->buf->length, buffer->option_string, "access", VIPS_ACCESS_SEQUENTIAL, "thumbnail", (int) factor, NULL); } else { return vips_image_new_from_buffer( buffer->buf->data, buffer->buf->length, buffer->option_string, "access", VIPS_ACCESS_SEQUENTIAL, NULL); } } static void vips_thumbnail_buffer_class_init(VipsThumbnailClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsThumbnailClass *thumbnail_class = VIPS_THUMBNAIL_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "thumbnail_buffer"; vobject_class->description = _("generate thumbnail from buffer"); thumbnail_class->get_info = vips_thumbnail_buffer_get_info; thumbnail_class->open = vips_thumbnail_buffer_open; VIPS_ARG_BOXED(class, "buffer", 1, _("Buffer"), _("Buffer to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsThumbnailBuffer, buf), VIPS_TYPE_BLOB); VIPS_ARG_STRING(class, "option_string", 20, _("Extra options"), _("Options that are passed on to the underlying loader"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsThumbnailBuffer, option_string), ""); } static void vips_thumbnail_buffer_init(VipsThumbnailBuffer *buffer) { } /** * vips_thumbnail_buffer: * @buf: (array length=len) (element-type guint8): memory area to load * @len: (type gsize): size of memory area * @out: (out): output image * @width: target width in pixels * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @height: %gint, target height in pixels * * @size: #VipsSize, upsize, downsize, both or force * * @no_rotate: %gboolean, don't rotate upright using orientation tag * * @crop: #VipsInteresting, shrink and crop to fill target * * @linear: %gboolean, perform shrink in linear light * * @import_profile: %gchararray, fallback import ICC profile * * @export_profile: %gchararray, export ICC profile * * @intent: #VipsIntent, rendering intent * * @fail_on: #VipsFailOn, load error types to fail on * * @option_string: %gchararray, extra loader options * * Exactly as vips_thumbnail(), but read from a memory buffer. One extra * optional argument, @option_string, lets you pass options to the underlying * loader. * * See also: vips_thumbnail(). * * Returns: 0 on success, -1 on error. */ int vips_thumbnail_buffer(void *buf, size_t len, VipsImage **out, int width, ...) { va_list ap; VipsBlob *blob; int result; /* We don't take a copy of the data or free it. */ blob = vips_blob_new(NULL, buf, len); va_start(ap, width); result = vips_call_split("thumbnail_buffer", ap, blob, out, width); va_end(ap); vips_area_unref(VIPS_AREA(blob)); return result; } typedef struct _VipsThumbnailSource { VipsThumbnail parent_object; VipsSource *source; char *option_string; } VipsThumbnailSource; typedef VipsThumbnailClass VipsThumbnailSourceClass; G_DEFINE_TYPE(VipsThumbnailSource, vips_thumbnail_source, vips_thumbnail_get_type()); /* Get the info from a source. */ static int vips_thumbnail_source_get_info(VipsThumbnail *thumbnail) { VipsThumbnailSource *source = (VipsThumbnailSource *) thumbnail; VipsImage *image; g_info("thumbnailing source"); if (!(thumbnail->loader = vips_foreign_find_load_source( source->source)) || !(image = vips_image_new_from_source(source->source, source->option_string, NULL))) return -1; vips_thumbnail_read_header(thumbnail, image); g_object_unref(image); return 0; } /* Open an image, scaling as appropriate. */ static VipsImage * vips_thumbnail_source_open(VipsThumbnail *thumbnail, double factor) { VipsThumbnailSource *source = (VipsThumbnailSource *) thumbnail; if (vips_isprefix("VipsForeignLoadJpeg", thumbnail->loader)) { return vips_image_new_from_source( source->source, source->option_string, "access", VIPS_ACCESS_SEQUENTIAL, "shrink", (int) factor, NULL); } else if (vips_isprefix("VipsForeignLoadOpenslide", thumbnail->loader)) { return vips_image_new_from_source( source->source, source->option_string, "access", VIPS_ACCESS_SEQUENTIAL, "level", (int) factor, NULL); } else if (vips_isprefix("VipsForeignLoadPdf", thumbnail->loader) || vips_isprefix("VipsForeignLoadSvg", thumbnail->loader) || vips_isprefix("VipsForeignLoadWebp", thumbnail->loader)) { return vips_image_new_from_source( source->source, source->option_string, "access", VIPS_ACCESS_SEQUENTIAL, "scale", 1.0 / factor, NULL); } else if (vips_isprefix("VipsForeignLoadJp2k", thumbnail->loader)) { /* Optional page-based pyramids. */ if (thumbnail->page_pyramid) return vips_image_new_from_source( source->source, source->option_string, "access", VIPS_ACCESS_SEQUENTIAL, "page", (int) factor, NULL); else return vips_image_new_from_source( source->source, source->option_string, "access", VIPS_ACCESS_SEQUENTIAL, NULL); } else if (vips_isprefix("VipsForeignLoadTiff", thumbnail->loader)) { /* We support three modes: subifd pyramids, page-based * pyramids, and simple multi-page TIFFs (no pyramid). */ if (thumbnail->subifd_pyramid) return vips_image_new_from_source( source->source, source->option_string, "access", VIPS_ACCESS_SEQUENTIAL, "subifd", (int) factor, NULL); else if (thumbnail->page_pyramid) return vips_image_new_from_source( source->source, source->option_string, "access", VIPS_ACCESS_SEQUENTIAL, "page", (int) factor, NULL); else return vips_image_new_from_source( source->source, source->option_string, "access", VIPS_ACCESS_SEQUENTIAL, NULL); } else if (vips_isprefix("VipsForeignLoadHeif", thumbnail->loader)) { return vips_image_new_from_source( source->source, source->option_string, "access", VIPS_ACCESS_SEQUENTIAL, "thumbnail", (int) factor, NULL); } else { return vips_image_new_from_source( source->source, source->option_string, "access", VIPS_ACCESS_SEQUENTIAL, NULL); } } static void vips_thumbnail_source_class_init(VipsThumbnailClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsThumbnailClass *thumbnail_class = VIPS_THUMBNAIL_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "thumbnail_source"; vobject_class->description = _("generate thumbnail from source"); thumbnail_class->get_info = vips_thumbnail_source_get_info; thumbnail_class->open = vips_thumbnail_source_open; VIPS_ARG_OBJECT(class, "source", 1, _("Source"), _("Source to load from"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsThumbnailSource, source), VIPS_TYPE_SOURCE); VIPS_ARG_STRING(class, "option_string", 20, _("Extra options"), _("Options that are passed on to the underlying loader"), VIPS_ARGUMENT_OPTIONAL_INPUT, G_STRUCT_OFFSET(VipsThumbnailSource, option_string), ""); } static void vips_thumbnail_source_init(VipsThumbnailSource *source) { } /** * vips_thumbnail_source: * @source: source to thumbnail * @out: (out): output image * @width: target width in pixels * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @height: %gint, target height in pixels * * @size: #VipsSize, upsize, downsize, both or force * * @no_rotate: %gboolean, don't rotate upright using orientation tag * * @crop: #VipsInteresting, shrink and crop to fill target * * @linear: %gboolean, perform shrink in linear light * * @import_profile: %gchararray, fallback import ICC profile * * @export_profile: %gchararray, export ICC profile * * @intent: #VipsIntent, rendering intent * * @fail_on: #VipsFailOn, load error types to fail on * * @option_string: %gchararray, extra loader options * * Exactly as vips_thumbnail(), but read from a source. One extra * optional argument, @option_string, lets you pass options to the underlying * loader. * * See also: vips_thumbnail(). * * Returns: 0 on success, -1 on error. */ int vips_thumbnail_source(VipsSource *source, VipsImage **out, int width, ...) { va_list ap; int result; va_start(ap, width); result = vips_call_split("thumbnail_source", ap, source, out, width); va_end(ap); return result; } typedef struct _VipsThumbnailImage { VipsThumbnail parent_object; VipsImage *in; } VipsThumbnailImage; typedef VipsThumbnailClass VipsThumbnailImageClass; G_DEFINE_TYPE(VipsThumbnailImage, vips_thumbnail_image, vips_thumbnail_get_type()); /* Get the info from a image. */ static int vips_thumbnail_image_get_info(VipsThumbnail *thumbnail) { VipsThumbnailImage *image = (VipsThumbnailImage *) thumbnail; /* Doesn't really matter what we put here. */ thumbnail->loader = "image source"; vips_thumbnail_read_header(thumbnail, image->in); return 0; } /* Open an image. We can't pre-shrink with an image source, sadly. */ static VipsImage * vips_thumbnail_image_open(VipsThumbnail *thumbnail, double factor) { VipsThumbnailImage *image = (VipsThumbnailImage *) thumbnail; VipsImage **t = (VipsImage **) vips_object_local_array(VIPS_OBJECT(thumbnail), 1); /* We want thumbnail to run in sequential mode on this image, or we * may get horrible cache thrashing. */ if (vips_sequential(image->in, &t[0], "tile-height", 16, NULL)) return NULL; g_object_ref(t[0]); return t[0]; } static void vips_thumbnail_image_class_init(VipsThumbnailClass *class) { GObjectClass *gobject_class = G_OBJECT_CLASS(class); VipsObjectClass *vobject_class = VIPS_OBJECT_CLASS(class); VipsThumbnailClass *thumbnail_class = VIPS_THUMBNAIL_CLASS(class); gobject_class->set_property = vips_object_set_property; gobject_class->get_property = vips_object_get_property; vobject_class->nickname = "thumbnail_image"; vobject_class->description = _("generate thumbnail from image"); thumbnail_class->get_info = vips_thumbnail_image_get_info; thumbnail_class->open = vips_thumbnail_image_open; VIPS_ARG_IMAGE(class, "in", 1, _("Input"), _("Input image argument"), VIPS_ARGUMENT_REQUIRED_INPUT, G_STRUCT_OFFSET(VipsThumbnailImage, in)); } static void vips_thumbnail_image_init(VipsThumbnailImage *image) { } /** * vips_thumbnail_image: (method) * @in: input image * @out: (out): output image * @width: target width in pixels * @...: %NULL-terminated list of optional named arguments * * Optional arguments: * * * @height: %gint, target height in pixels * * @size: #VipsSize, upsize, downsize, both or force * * @no_rotate: %gboolean, don't rotate upright using orientation tag * * @crop: #VipsInteresting, shrink and crop to fill target * * @linear: %gboolean, perform shrink in linear light * * @import_profile: %gchararray, fallback import ICC profile * * @export_profile: %gchararray, export ICC profile * * @intent: #VipsIntent, rendering intent * * @fail_on: #VipsFailOn, load error types to fail on * * Exactly as vips_thumbnail(), but read from an existing image. * * This operation * is not able to exploit shrink-on-load features of image load libraries, so * it can be much slower than `vips_thumbnail()` and produce poorer quality * output. Only use it if you really have to. * * See also: vips_thumbnail(). * * Returns: 0 on success, -1 on error. */ int vips_thumbnail_image(VipsImage *in, VipsImage **out, int width, ...) { va_list ap; int result; va_start(ap, width); result = vips_call_split("thumbnail_image", ap, in, out, width); va_end(ap); return result; } libvips-8.15.1/libvips/resample/transform.c000066400000000000000000000142551454007373500207340ustar00rootroot00000000000000/* affine transforms */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include /* DBL_MIN is smallest *normalized* double precision float */ #define TOO_SMALL (2.0 * DBL_MIN) /* Calculate the inverse transformation. */ int vips__transform_calc_inverse(VipsTransformation *trn) { double det = trn->a * trn->d - trn->b * trn->c; if (fabs(det) < TOO_SMALL) { /* divisor is near zero */ vips_error("vips__transform_calc_inverse", "%s", _("singular or near-singular matrix")); return -1; } double tmp = 1.0 / det; trn->ia = tmp * trn->d; trn->ib = -tmp * trn->b; trn->ic = -tmp * trn->c; trn->id = tmp * trn->a; return 0; } /* Init a VipsTransform. */ void vips__transform_init(VipsTransformation *trn) { trn->oarea.left = 0; trn->oarea.top = 0; trn->oarea.width = -1; trn->oarea.height = -1; trn->iarea.left = 0; trn->iarea.top = 0; trn->iarea.width = -1; trn->iarea.height = -1; trn->a = 1.0; /* Identity transform */ trn->b = 0.0; trn->c = 0.0; trn->d = 1.0; trn->idx = 0.0; trn->idy = 0.0; trn->odx = 0.0; trn->ody = 0.0; (void) vips__transform_calc_inverse(trn); } /* Test for transform is identity function. */ int vips__transform_isidentity(const VipsTransformation *trn) { if (trn->a == 1.0 && trn->b == 0.0 && trn->c == 0.0 && trn->d == 1.0 && trn->idx == 0.0 && trn->idy == 0.0 && trn->odx == 0.0 && trn->ody == 0.0) return 1; else return 0; } /* Combine two transformations. out can be one of the ins. */ int vips__transform_add(const VipsTransformation *in1, const VipsTransformation *in2, VipsTransformation *out) { out->a = in1->a * in2->a + in1->c * in2->b; out->b = in1->b * in2->a + in1->d * in2->b; out->c = in1->a * in2->c + in1->c * in2->d; out->d = in1->b * in2->c + in1->d * in2->d; // fixme: do idx/idy as well out->odx = in1->odx * in2->a + in1->ody * in2->b + in2->odx; out->ody = in1->odx * in2->c + in1->ody * in2->d + in2->ody; if (vips__transform_calc_inverse(out)) return -1; return 0; } void vips__transform_print(const VipsTransformation *trn) { printf("vips__transform_print:\n"); printf(" iarea: left=%d, top=%d, width=%d, height=%d\n", trn->iarea.left, trn->iarea.top, trn->iarea.width, trn->iarea.height); printf(" oarea: left=%d, top=%d, width=%d, height=%d\n", trn->oarea.left, trn->oarea.top, trn->oarea.width, trn->oarea.height); printf(" mat: a=%g, b=%g, c=%g, d=%g\n", trn->a, trn->b, trn->c, trn->d); printf(" off: odx=%g, ody=%g, idx=%g, idy=%g\n", trn->odx, trn->ody, trn->idx, trn->idy); } /* Map a pixel coordinate through the transform. */ void vips__transform_forward_point(const VipsTransformation *trn, double x, double y, /* In input space */ double *ox, double *oy) /* In output space */ { x += trn->idx; y += trn->idy; *ox = trn->a * x + trn->b * y + trn->odx; *oy = trn->c * x + trn->d * y + trn->ody; } /* Map a pixel coordinate through the inverse transform. */ void vips__transform_invert_point(const VipsTransformation *trn, double x, double y, /* In output space */ double *ox, double *oy) /* In input space */ { x -= trn->odx; y -= trn->ody; *ox = trn->ia * x + trn->ib * y - trn->idx; *oy = trn->ic * x + trn->id * y - trn->idy; } typedef void (*transform_fn)(const VipsTransformation *, const double, const double, double *, double *); /* Transform a rect using a point transformer. */ static void transform_rect(const VipsTransformation *trn, transform_fn transform, const VipsRect *in, /* In input space */ VipsRect *out) /* In output space */ { double x1, y1; /* Map corners */ double x2, y2; double x3, y3; double x4, y4; double left, right, top, bottom; /* Map input VipsRect. */ transform(trn, in->left, in->top, &x1, &y1); transform(trn, in->left, VIPS_RECT_BOTTOM(in), &x3, &y3); transform(trn, VIPS_RECT_RIGHT(in), in->top, &x2, &y2); transform(trn, VIPS_RECT_RIGHT(in), VIPS_RECT_BOTTOM(in), &x4, &y4); /* Find bounding box for these four corners. Round-to-nearest to try * to stop rounding errors growing images. */ left = VIPS_MIN(x1, VIPS_MIN(x2, VIPS_MIN(x3, x4))); right = VIPS_MAX(x1, VIPS_MAX(x2, VIPS_MAX(x3, x4))); top = VIPS_MIN(y1, VIPS_MIN(y2, VIPS_MIN(y3, y4))); bottom = VIPS_MAX(y1, VIPS_MAX(y2, VIPS_MAX(y3, y4))); out->left = VIPS_ROUND_INT(left); out->top = VIPS_ROUND_INT(top); out->width = VIPS_ROUND_INT(right - left); out->height = VIPS_ROUND_INT(bottom - top); } /* Given an area in the input image, calculate the bounding box for those * pixels in the output image. */ void vips__transform_forward_rect(const VipsTransformation *trn, const VipsRect *in, /* In input space */ VipsRect *out) /* In output space */ { transform_rect(trn, vips__transform_forward_point, in, out); } /* Given an area in the output image, calculate the bounding box for the * corresponding pixels in the input image. */ void vips__transform_invert_rect(const VipsTransformation *trn, const VipsRect *in, /* In output space */ VipsRect *out) /* In input space */ { transform_rect(trn, vips__transform_invert_point, in, out); } /* Set output area of trn so that it just holds all of our input pels. */ void vips__transform_set_area(VipsTransformation *trn) { vips__transform_forward_rect(trn, &trn->iarea, &trn->oarea); } libvips-8.15.1/libvips/resample/vsqbs.cpp000066400000000000000000000266121454007373500204170ustar00rootroot00000000000000/* vertex-split subdivision followed by quadratic b-spline smoothing * * C. Racette 23-28/05/2010 based on code by N. Robidoux and J. Cupitt * * N. Robidoux 29-30/05/2010 */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* * 2010 (c) Chantal Racette, Nicolas Robidoux, John Cupitt. * * Nicolas Robidoux thanks Adam Turcotte, Geert Jordaens, Ralf Meyer, * Øyvind Kolås, Minglun Gong and Eric Daoust for useful comments and * code. * * Chantal Racette's image resampling research and programming funded * in part by a NSERC Discovery Grant awarded to Julien Dompierre * (20-61098). */ /* * Vertex-Split Quadratic B-Splines (VSQBS) is a brand new method * which consists of vertex-split subdivision, a subdivision method * with the (as yet unknown?) property that data which is (locally) * constant on diagonals is subdivided into data which is (locally) * constant on diagonals, followed by quadratic B-Spline smoothing. * Because both methods are linear, their combination can be * implemented as if there is no subdivision. * * At high enlargement ratios, VSQBS is very effective at "masking" * that the original has pixels uniformly distributed on a grid. In * particular, VSQBS produces resamples with only very mild * staircasing. Like cubic B-Spline smoothing, however, VSQBS is not * an interpolatory method. For example, using VSQBS to perform the * identity geometric transformation (enlargement by a scaling factor * equal to 1) on an image does not return the original: VSQBS * effectively smooths out the image with the convolution mask * * 1/8 * 1/8 1/2 1/8 * 1/8 * * which is a fairly moderate blur (although the checkerboard mode is * in its nullspace). * * By blending VSQBS with an interpolatory method (bilinear, say) in a * transformation adaptive environment (current GEGL, for example), it * is quite easy to restore that resampling for identity geometric * transformation is equivalent to the identity, and rotations are not * affected by the above, implicit, blur. Contact N. Robidoux for * details. * * An article on VSQBS is forthcoming. */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include "templates.h" #define VIPS_TYPE_INTERPOLATE_VSQBS \ (vips_interpolate_vsqbs_get_type()) #define VIPS_INTERPOLATE_VSQBS(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj), \ VIPS_TYPE_INTERPOLATE_VSQBS, VipsInterpolateVsqbs)) #define VIPS_INTERPOLATE_VSQBS_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass), \ VIPS_TYPE_INTERPOLATE_VSQBS, VipsInterpolateVsqbsClass)) #define VIPS_IS_INTERPOLATE_VSQBS(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj), VIPS_TYPE_INTERPOLATE_VSQBS)) #define VIPS_IS_INTERPOLATE_VSQBS_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass), VIPS_TYPE_INTERPOLATE_VSQBS)) #define VIPS_INTERPOLATE_VSQBS_GET_CLASS(obj) \ (G_TYPE_INSTANCE_GET_CLASS((obj), \ VIPS_TYPE_INTERPOLATE_VSQBS, VipsInterpolateVsqbsClass)) typedef struct _VipsInterpolateVsqbs { VipsInterpolate parent_object; } VipsInterpolateVsqbs; typedef struct _VipsInterpolateVsqbsClass { VipsInterpolateClass parent_class; } VipsInterpolateVsqbsClass; /* * THE STENCIL OF INPUT VALUES: * * Pointer arithmetic is used to implicitly reflect the input stencil * about dos_two---assumed closer to the sampling location than other * pixels (ties are OK)---in such a way that after reflection the * sampling point is to the bottom right of dos_two. * * The following code and picture assumes that the stencil reflexion * has already been performed. (X is the sampling location.) * * * (ix,iy-1) (ix+1,iy-1) * = uno_two = uno_thr * * * * (ix-1,iy) (ix,iy) (ix+1,iy) * = dos_one = dos_two = dos_thr * X * * * (ix-1,iy+1) (ix,iy+1) (ix+1,iy+1) * = tre_one = tre_two = tre_thr * * * The above input pixel values are the ones needed in order to * IMPLICITLY make available the following values, needed by quadratic * B-Splines, which is performed on (shifted) double density data: * * * uno_one_1 = uno_two_1 = uno_thr_1 = * (ix-1/4,iy-1/4) (ix+1/4,iy-1/4) (ix+3/4,iy-1/4) * * * * X or X * dos_one_1 = dos_two_1 = dos_thr_1 = * (ix-1/4,iy+1/4) (ix+1/4,iy+1/4) (ix+3/4,iy+1/4) * or X or X * * * * tre_one_1 = tre_two_1 = tre_thr_1 = * (ix-1/4,iy+3/4) (ix+1/4,iy+3/4) (ix+3/4,iy+3/4) * * * In the coefficient computations, we fix things so that coordinates * are relative to dos_two_1, and so that distances are rescaled so * that double density pixel locations are at a distance of 1. */ /* * Call vertex-split + quadratic B-splines with a careful type * conversion as a parameter. (It would be nice to do this with * templates somehow---for one thing this would allow code * comments---but we can't figure a clean way to do it.) */ #define VSQBS_CONVERSION(conversion) \ template \ static void inline vsqbs_##conversion(void *restrict pout, \ const VipsPel *restrict pin, \ const int bands, \ const int lskip, \ const double x_0, \ const double y_0) \ { \ T *restrict out = (T *) pout; \ \ const T *restrict in = (T *) pin; \ \ const int sign_of_x_0 = 2 * (x_0 >= 0.) - 1; \ const int sign_of_y_0 = 2 * (y_0 >= 0.) - 1; \ \ const int shift_forw_1_pix = sign_of_x_0 * bands; \ const int shift_forw_1_row = sign_of_y_0 * lskip; \ \ const int shift_back_1_pix = -shift_forw_1_pix; \ const int shift_back_1_row = -shift_forw_1_row; \ \ const int uno_two_shift = shift_back_1_row; \ const int uno_thr_shift = shift_forw_1_pix + shift_back_1_row; \ \ const int dos_one_shift = shift_back_1_pix; \ const int dos_two_shift = 0; \ const int dos_thr_shift = shift_forw_1_pix; \ \ const int tre_one_shift = shift_back_1_pix + shift_forw_1_row; \ const int tre_two_shift = shift_forw_1_row; \ const int tre_thr_shift = shift_forw_1_pix + shift_forw_1_row; \ \ const double twice_abs_x_0 = (2 * sign_of_x_0) * x_0; \ const double twice_abs_y_0 = (2 * sign_of_y_0) * y_0; \ const double x = twice_abs_x_0 + -0.5; \ const double y = twice_abs_y_0 + -0.5; \ const double cent = 0.75 - x * x; \ const double mid = 0.75 - y * y; \ const double left = -0.5 * (x + cent) + 0.5; \ const double top = -0.5 * (y + mid) + 0.5; \ const double left_p_cent = left + cent; \ const double top_p_mid = top + mid; \ const double cent_p_rite = 1.0 - left; \ const double mid_p_bot = 1.0 - top; \ const double rite = 1.0 - left_p_cent; \ const double bot = 1.0 - top_p_mid; \ \ const double four_c_uno_two = left_p_cent * top; \ const double four_c_dos_one = left * top_p_mid; \ const double four_c_dos_two = left_p_cent + top_p_mid; \ const double four_c_dos_thr = cent_p_rite * top_p_mid + rite; \ const double four_c_tre_two = mid_p_bot * left_p_cent + bot; \ const double four_c_tre_thr = mid_p_bot * rite + cent_p_rite * bot; \ const double four_c_uno_thr = top - four_c_uno_two; \ const double four_c_tre_one = left - four_c_dos_one; \ \ int band = bands; \ \ do { \ const double double_result = \ (((four_c_uno_two * in[uno_two_shift] + \ four_c_dos_one * in[dos_one_shift]) + \ (four_c_dos_two * in[dos_two_shift] + \ four_c_dos_thr * in[dos_thr_shift])) + \ ((four_c_tre_two * in[tre_two_shift] + \ four_c_tre_thr * in[tre_thr_shift]) + \ (four_c_uno_thr * in[uno_thr_shift] + \ four_c_tre_one * in[tre_one_shift]))) * \ 0.25; \ \ const T result = to_##conversion(double_result); \ in++; \ *out++ = result; \ \ } while (--band); \ } VSQBS_CONVERSION(fptypes) VSQBS_CONVERSION(withsign) VSQBS_CONVERSION(nosign) #define CALL(T, conversion) \ vsqbs_##conversion(out, \ p, \ bands, \ lskip, \ relative_x, \ relative_y); /* * We need C linkage: */ extern "C" { G_DEFINE_TYPE(VipsInterpolateVsqbs, vips_interpolate_vsqbs, VIPS_TYPE_INTERPOLATE); } static void vips_interpolate_vsqbs_interpolate(VipsInterpolate *restrict interpolate, void *restrict out, VipsRegion *restrict in, double absolute_x, double absolute_y) { /* absolute_x and absolute_y are always >= 1.0 (see double-check assert * below), so we don't need floor(). * * It's 1 not 0 since we ask for a window_offset of 1 at the bottom. */ const int ix = (int) (absolute_x + 0.5); const int iy = (int) (absolute_y + 0.5); /* * Move the pointer to (the first band of) the top/left pixel of the * 2x2 group of pixel centers which contains the sampling location * in its convex hull: */ const VipsPel *restrict p = VIPS_REGION_ADDR(in, ix, iy); const double relative_x = absolute_x - ix; const double relative_y = absolute_y - iy; /* * VIPS versions of Nicolas's pixel addressing values. */ const int lskip = VIPS_REGION_LSKIP(in) / VIPS_IMAGE_SIZEOF_ELEMENT(in->im); /* * Double the bands for complex images to account for the real and * imaginary parts being computed independently: */ const int actual_bands = in->im->Bands; const int bands = vips_band_format_iscomplex(in->im->BandFmt) ? 2 * actual_bands : actual_bands; g_assert(ix - 1 >= in->valid.left); g_assert(iy - 1 >= in->valid.top); g_assert(ix + 1 <= VIPS_RECT_RIGHT(&in->valid)); g_assert(iy + 1 <= VIPS_RECT_BOTTOM(&in->valid)); /* Confirm that absolute_x and absolute_y are >= 1, see above. */ g_assert(absolute_x >= 1.0); g_assert(absolute_y >= 1.0); switch (in->im->BandFmt) { case VIPS_FORMAT_UCHAR: CALL(unsigned char, nosign); break; case VIPS_FORMAT_CHAR: CALL(signed char, withsign); break; case VIPS_FORMAT_USHORT: CALL(unsigned short, nosign); break; case VIPS_FORMAT_SHORT: CALL(signed short, withsign); break; case VIPS_FORMAT_UINT: CALL(unsigned int, nosign); break; case VIPS_FORMAT_INT: CALL(signed int, withsign); break; /* * Complex images are handled by doubling bands: */ case VIPS_FORMAT_FLOAT: case VIPS_FORMAT_COMPLEX: CALL(float, fptypes); break; case VIPS_FORMAT_DOUBLE: case VIPS_FORMAT_DPCOMPLEX: CALL(double, fptypes); break; default: g_assert(0); break; } } static void vips_interpolate_vsqbs_class_init(VipsInterpolateVsqbsClass *klass) { VipsObjectClass *object_class = VIPS_OBJECT_CLASS(klass); VipsInterpolateClass *interpolate_class = VIPS_INTERPOLATE_CLASS(klass); object_class->nickname = "vsqbs"; object_class->description = _("B-Splines with antialiasing smoothing"); interpolate_class->interpolate = vips_interpolate_vsqbs_interpolate; interpolate_class->window_size = 4; interpolate_class->window_offset = 1; } static void vips_interpolate_vsqbs_init(VipsInterpolateVsqbs *vsqbs) { } libvips-8.15.1/man/000077500000000000000000000000001454007373500140415ustar00rootroot00000000000000libvips-8.15.1/man/meson.build000066400000000000000000000001561454007373500162050ustar00rootroot00000000000000install_man( 'vipsedit.1', 'vipsheader.1', 'vips.1', 'vipsprofile.1', 'vipsthumbnail.1' ) libvips-8.15.1/man/vips.1000066400000000000000000000054461454007373500151150ustar00rootroot00000000000000.TH VIPS 1 "30 June 1993" .SH NAME vips \- run vips operations from the command line .SH SYNOPSIS .B vips [options] [command] [command-options] [command-args] .SH DESCRIPTION .B vips(1) is the VIPS universal main program. You can use it to run any VIPS operation from the command line, to query the VIPS class hierarchy, and to maintain parts of the VIPS library. To run a VIPS operation, the first argument should be the name of the operation and following arguments should be the operation arguments. For example: $ vips invert lena.v lena2.v .SH OPTIONS .TP .B -l BASE-NAME, --list=BASE-NAME List operations below BASE-NAME. This prints a one-line summary of every operation in vips below the class BASE-NAME, where BASE-NAME may be a full vips class name, or a nickname. If BASE-NAME is not supplied, this will list all classes below VipsOperation. .TP .B -p PLUGIN, --plugin=PLUGIN Load PLUGIN. Note that plugins in $VIPSHOME/lib/vips-plugins-MAJOR.MINOR are loaded automatically. .TP .B -v, --version Show VIPS version. .TP .B -c NAME, --completion NAME Print completions for .B NAME .SH COMMANDS .TP .B operation-name operation-arguments Execute a named operation, for example add. .SH EXAMPLES Run a vips operation. Operation options must follow the operation name. $ vips insert lena.v lena2.v out.v 0 0 --background "128 0 0" Get a "usage" message for an operation. $ vips insert insert image @sub into @main at @x, @y usage: insert main sub out x y where: main - Main input image, input VipsImage sub - Sub-image to insert into main image, input VipsImage out - Output image, output VipsImage x - Left edge of sub in main, input gint default: 0 min: -100000000, max: 100000000 y - Top edge of sub in main, input gint default: 0 min: -100000000, max: 100000000 optional arguments: expand - Expand output to hold all of both inputs, input gboolean default: false background - Colour for new pixels, input VipsArrayDouble operation flags: sequential List all draw operations. $ vips -l draw VipsDraw (draw), draw operations VipsDrawink (drawink), draw with ink operations VipsDrawRect (draw_rect), paint a rectangle on an image VipsDrawMask (draw_mask), draw a mask on an image VipsDrawLine (draw_line), draw a line on an image VipsDrawCircle (draw_circle), draw a circle on an image VipsDrawFlood (draw_flood), flood-fill an area VipsDrawImage (draw_image), paint an image into another image VipsDrawSmudge (draw_smudge), blur a rectangle on an image .SH RETURN VALUE returns 0 on success and non-zero on error. .SH SEE ALSO vipsheader(1) .SH COPYRIGHT The National Gallery and Birkbeck College, 1989-1996. libvips-8.15.1/man/vipsedit.1000066400000000000000000000024521454007373500157550ustar00rootroot00000000000000.TH VIPSEDIT 1 "30 June 1993" .SH NAME vipsedit \- edit header of a vips image file .SH SYNOPSIS .B vipsedit [OPTION...] vipsfile .SH DESCRIPTION .B vipsedit alters a VIPS image file's header. This is useful for setting the resolution, for example. The options are: -x, --xsize=N set Xsize to N -y, --ysize=N set Ysize to N -b, --bands=N set Bands to N -f, --format=F set BandFmt to F (eg. uchar) -i, --interpretation=I set Interpretation to I (eg. xyz) -c, --coding=C set Coding to C (eg. labq) -X, --xres=R set Xres to R pixels/mm -Y, --yres=R set Yres to R pixels/mm -u, --xoffset=N set Xoffset to N -v, --yoffset=N set Yoffset to N -e, --setext replace extension block with stdin Be very careful when changing Xsize, Ysize, BandFmt or Bands. vipsedit does no checking! .SH EXAMPLES To set the Xsize to 512 and Bands to 6: vipsedit --xsize=512 --bands=6 fred.v or vipsedit -x 512 -b 6 fred.v Extract the XML metadata from an image with .B vipsheader(1), edit it, and reattach with .B vipsedit(1). vipsheader -f getext fred.v | sed s/banana/pineapple/ | vipsedit -e fred.v .SH RETURN VALUE returns 0 on success and non-zero on error. .SH SEE ALSO vipsheader(1) .SH COPYRIGHT K. Martinez 1993 libvips-8.15.1/man/vipsheader.1000066400000000000000000000016661454007373500162660ustar00rootroot00000000000000.TH VIPSHEADER 1 "12 July 1990" .SH NAME vipsheader \- prints information about an image file .SH SYNOPSIS vipsheader [OPTIONS ...] files ... .SH DESCRIPTION .B vipsheader(1) prints image header fields to stdout. .SH OPTIONS .TP .B -a, --all Show all fields. Fields are displayed to be convenient for humans to read, so binary data, for example, is summarized rather than simply copied. .TP .B -f FIELD, --field=FIELD Print value of .B FIELD from image header. Fields are printed in a way suitable for programs to understand, so, for example, binary data is base64-encoded and printed as a stream of characters. The special field name .B getext prints the VIPS extension block: the XML defining the image metadata. You can alter this, then reattach with .B vipsedit(1). .SH EXAMPLES $ vipsheader -f Xsize ~/pics/*.v 1024 1279 22865 1 256 .SH SEE ALSO vipsedit(1) .SH COPYRIGHT N. Dessipris .SH AUTHOR N. Dessipris \- 12/07/1990 libvips-8.15.1/man/vipsprofile.1000066400000000000000000000027141454007373500164710ustar00rootroot00000000000000.TH VIPSPROFILE 1 "13 December 2013" .SH NAME vipsprofile \- analyze vips profiles .SH SYNOPSIS .B vipsprofile .SH DESCRIPTION .B vipsprofile(1) analyzes the file written by the --vips-profile option, calculates some statistics, and draws a graph of evaluation. Run any vips program with the --vips-profile option to generate a file called "vips-profile.txt". This contains timing information about CPU use, memory use and thread synchronisation. Run .B vipsprofile(1) to load this file, calculate some statistics, and draw a graph of evaluation saved to vips-profile.svg. This analysis can help track down performance problems. For example: $ vips sharpen shark.jpg x.jpg --vips-profile recording profile in vips-profile.txt $ vipsprofile reading from vips-profile.txt loaded 3622 events total time = 0.138322 name alive wait% work% unkn% memory peakm worker 20 0.069 34.5 58.9 6.65 3.14 5.56 worker 21 0.07 1.36 60.2 38.4 2.65 5.07 worker 22 0.07 33 55.8 11.1 2.62 5.04 worker 23 0.072 34.2 59.7 6.15 2.72 5.14 wbuffer 24 0.075 99 1.03 0.00401 0 0 wbuffer 25 0.075 95.6 4.39 0.00667 0 0 main 26 0.14 52.8 0 47.2 -11.1 0.787 peak memory = 21.6 MB writing to vips-profile.svg .SH RETURN VALUE returns 0 on success and non-zero on error. .SH SEE ALSO vips(1) libvips-8.15.1/man/vipsthumbnail.1000066400000000000000000000055411454007373500170150ustar00rootroot00000000000000.TH VIPSTHUMBNAIL 1 "13 May 2010" .SH NAME vipsthumbnail \- make thumbnails of image files .SH SYNOPSIS .B vipsthumbnail [flags] imagefile1 imagefile2 ... .SH DESCRIPTION .B vipsthumbnail(1) processes each .B imagefile in turn, shrinking each image to fit within a 128 by 128 pixel square. The shrunk image is written to a new file named .B tn_imagefile.jpg. This program is typically faster and uses less memory than other image thumbnail programs. For example: $ vipsthumbnail fred.png jim.tif will read image files .B fred.png and .B jim.tif and write thumbnails to the files .B tn_fred.jpg and .B tn_jim.jpg. $ vipsthumbnail --size=64 -o thumbnails/%s.png fred.jpg will read image file .B fred.jpg and write a 64 x 64 pixel thumbnail to the file .B thumbnails/fred.png. .SH OPTIONS .TP .B -s N, --size=N Set the output thumbnail size to .B N x .B N pixels. You can use "MxN" to specify a rectangular bounding box. The image is shrunk so that it just fits within this area, images which are smaller than this are expanded. Use "xN" or "Mx" to just resize on one axis. Append "<" to only resize if the input image is smaller than the target, append ">" to only resize if the input image is larger than the target. .TP .B -o FORMAT, --output=FORMAT Set the output format string. The input filename has any file type suffix removed, then that value is substituted into .B FORMAT replacing .B %s. If .B FORMAT is a relative path, the name of the input directory is prepended. In other words, any path in .B FORMAT is relative to the directory of the current input file. The default value is .B tn_%s.jpg meaning JPEG output, with .B tn_ prepended. You can add format options too, for example .B tn_%s.jpg[Q=20] will write JPEG images with Q set to 20. .TP .B -e PROFILE, --eprofile=PROFILE Export thumbnails with this ICC profile. Images are only colour-transformed if there is both an output and an input profile available. The input profile can either be embedded in the input image or supplied with the .B --iprofile option. .TP .B -i PROFILE, --iprofile=PROFILE Import images with this ICC profile, if no profile is embedded in the image. Images are only colour-transformed if there is both an output and an input profile available. The output profile should be supplied with the .B --oprofile option. .TP .B -c, --crop Crop the output image down. The image is shrunk so as to completely fill the bounding box in both axes, then any excess is cropped off. .TP .B -d, --delete Delete the output profile from the image. This can save a small amount of space. .TP .B -t, --rotate Auto-rotate images using EXIF orientation tags. .TP .B -a, --linear Shrink images in linear light colour space. This can be much slower. .SH RETURN VALUE returns 0 on success and non-zero on error. Error can mean one or more conversions failed. .SH SEE ALSO vipsheader(1) libvips-8.15.1/meson.build000066400000000000000000000701411454007373500154330ustar00rootroot00000000000000project('vips', 'c', 'cpp', version: '8.15.1', meson_version: '>=0.55', default_options: [ # this is what glib uses (one of our required deps), so we use it too 'c_std=gnu99', # we use some C++11 features 'cpp_std=c++11', # do a release (optimised) build by default 'buildtype=release', # turn off asserts etc. in release mode 'b_ndebug=if-release' ] ) version_parts = meson.project_version().split('.') version_major = version_parts[0] version_minor = version_parts[1] version_patch = version_parts[2] # rules: # sources changed: increment revision # binary interface changed: increment current, reset revision to 0 # binary interface changes backwards compatible?: increment age # binary interface changes not backwards compatible?: reset age to 0 library_revision = 1 library_current = 59 library_age = 17 library_version = '@0@.@1@.@2@'.format(library_current - library_age, library_age, library_revision) darwin_versions = [library_current + 1, '@0@.@1@'.format(library_current + 1, library_revision)] gnome = import('gnome') pymod = import('python') pkg = import('pkgconfig') i18n = import('i18n') # if we're optimising (eg. release mode) we turn off cast checks and g_asserts if get_option('optimization') in ['2', '3', 's'] add_project_arguments('-DG_DISABLE_CAST_CHECKS', language : ['cpp', 'c']) add_project_arguments('-DG_DISABLE_CHECKS', language : ['cpp', 'c']) add_project_arguments('-DG_DISABLE_ASSERT', language : ['cpp', 'c']) endif # in debug mode we automatically enable leak checks # also true for 'debugoptimized' if get_option('debug') add_project_arguments('-DDEBUG_LEAK', language : ['cpp', 'c']) endif host_os = host_machine.system() cc = meson.get_compiler('c') cpp = meson.get_compiler('cpp') # Prevent use of void* pointer arithmetic to support MSVC add_project_arguments(cc.get_supported_arguments('-Werror=pointer-arith'), language : ['cpp', 'c']) glib_dep = dependency('glib-2.0', version: '>=2.52') gio_dep = dependency('gio-2.0') gobject_dep = dependency('gobject-2.0') gmodule_dep = dependency('gmodule-no-export-2.0', required: get_option('modules')) expat_dep = dependency('expat') thread_dep = dependency('threads') m_dep = cc.find_library('m', required: false) libvips_deps = [ glib_dep, gio_dep, gobject_dep, gmodule_dep, expat_dep, thread_dep, m_dep, ] nodelete_link_args = cc.get_supported_link_arguments('-Wl,-z,nodelete') prefix_dir = get_option('prefix') lib_dir = prefix_dir / get_option('libdir') project_source_root = meson.current_source_dir() project_build_root = meson.current_build_dir() if gmodule_dep.found() and gmodule_dep.get_variable(pkgconfig: 'gmodule_supported') == 'true' # Disable modules by default when building static libraries modules_enabled = get_option('modules').enabled() or get_option('default_library') == 'shared' elif get_option('modules').enabled() error('GModule is not supported on your system, please reconfigure with -Dmodules=disabled') else modules_enabled = false endif module_dir = lib_dir / 'vips-modules-@0@.@1@'.format(version_major, version_minor) cfg_var = configuration_data() cfg_var.set_quoted('G_LOG_DOMAIN', 'VIPS') if modules_enabled cfg_var.set('ENABLE_MODULES', '1') endif # Detect and set symbol visibility if get_option('default_library') == 'shared' and host_os in ['windows', 'cygwin'] cfg_var.set('DLL_EXPORT', true) if cc.get_id() == 'msvc' or cc.get_id() == 'clang-cl' cfg_var.set('_VIPS_PUBLIC', '__declspec(dllexport)') elif cc.has_function_attribute('visibility:hidden') cfg_var.set('_VIPS_PUBLIC', '__attribute__((visibility("default"))) __declspec(dllexport)') endif elif cc.has_function_attribute('visibility:hidden') cfg_var.set('_VIPS_PUBLIC', '__attribute__((visibility("default")))') endif # we also need to be able to mix vector and scalar arithmetic vector_arithmetic_check = ''' typedef float v4f __attribute__((vector_size(4 * sizeof(float)),aligned(16))); int main(void) { v4f f = {1, 2, 3, 4}; f *= 12.0; v4f g = {5, 6, 7, 8}; f = g > 0 ? g : -1 * g; } ''' # gcc 7.2 seems to work, but then gets confused by signed constants in templates signed_constants_check = ''' typedef float v4f __attribute__((vector_size(4 * sizeof(float)),aligned(16))); template static void h( v4f B ) { v4f f; f = -1 * B; } ''' if cpp.compiles(vector_arithmetic_check, name: 'Has vector arithmetic', dependencies: m_dep) and \ cpp.compiles(signed_constants_check, name: 'Has signed constants in vector templates', dependencies: m_dep) cfg_var.set('HAVE_VECTOR_ARITH', '1') endif # HAVE_TARGET_CLONES target_clones_check = ''' static int __attribute__((target_clones("default,avx"))) has_target_clones(void) { return 0; } int main(void) { return has_target_clones(); } ''' if cc.compiles(target_clones_check, args: '-Werror', name: 'Has target_clones attribute') cfg_var.set('HAVE_TARGET_CLONES', '1') endif func_names = [ 'vsnprintf', '_aligned_malloc', 'posix_memalign', 'memalign', 'cbrt', 'hypot', 'atan2', 'asinh' ] foreach func_name : func_names if cc.has_function(func_name, dependencies: m_dep) cfg_var.set('HAVE_' + func_name.to_upper(), '1') endif endforeach if cc.has_function('pthread_setattr_default_np', args: '-D_GNU_SOURCE', prefix: '#include ', dependencies: thread_dep) cfg_var.set('HAVE_PTHREAD_DEFAULT_NP', '1') endif # needed by rsvg and others zlib_dep = dependency('zlib', version: '>=0.4', required: get_option('zlib')) if zlib_dep.found() libvips_deps += zlib_dep cfg_var.set('HAVE_ZLIB', '1') endif libarchive_dep = dependency('libarchive', version: '>=3.0.0', required: get_option('archive')) if libarchive_dep.found() libvips_deps += libarchive_dep cfg_var.set('HAVE_LIBARCHIVE', '1') endif fftw_dep = dependency('fftw3', required: get_option('fftw')) if fftw_dep.found() libvips_deps += fftw_dep cfg_var.set('HAVE_FFTW', '1') endif # TODO: simplify this when requiring meson>=0.60.0 magick_dep = dependency(get_option('magick-package'), required: false) if not magick_dep.found() # very old versions called it "ImageMagick" magick_dep = dependency('ImageMagick', required: get_option('magick')) endif magick_found = not get_option('magick').disabled() and magick_dep.found() magick_module = false if magick_found magick_module = modules_enabled and not get_option('magick-module').disabled() if magick_module cfg_var.set('MAGICK_MODULE', '1') else libvips_deps += magick_dep endif magick7 = magick_dep.version().version_compare('>=7.0') # IM7 uses # IM6 uses (since 6.2.3) but still provides # GM uses magick_include = magick7 ? '#include ' : '#include ' if magick7 cfg_var.set('HAVE_MAGICK7', '1') else # come here for imagemagick6, and graphicsmagick1.x, which also uses # the im6 API cfg_var.set('HAVE_MAGICK6', '1') if cc.has_member('struct _ImageInfo', 'number_scenes', prefix: magick_include, dependencies: magick_dep) cfg_var.set('HAVE_NUMBER_SCENES', '1') endif func_names = [ 'InheritException', 'AcquireExceptionInfo', 'SetImageProperty', 'SetImageExtent', 'AcquireImage', 'GetVirtualPixels', 'ResetImageProfileIterator', 'ResetImageAttributeIterator', 'ResetImagePropertyIterator', 'MagickCoreGenesis', 'SetImageOption', 'BlobToStringInfo', 'OptimizePlusImageLayers', 'OptimizeImageTransparency', 'GetMagicInfo' ] foreach func_name : func_names if cc.has_function(func_name, prefix: magick_include, dependencies: magick_dep) cfg_var.set('HAVE_' + func_name.to_upper(), '1') endif endforeach if cc.compiles(magick_include + '\nColorspaceType colorspace = CMYColorspace;', name: 'Has CMYColorspace', dependencies: magick_dep) cfg_var.set('HAVE_CMYCOLORSPACE', '1') endif if cc.compiles(magick_include + '\nColorspaceType colorspace = HCLpColorspace;', name: 'Has HCLpColorspace', dependencies: magick_dep) cfg_var.set('HAVE_HCLPCOLORSPACE', '1') endif # GetImageMagick() takes two args under GM, three under IM if cc.compiles(magick_include + '\nint main() {(void)GetImageMagick(NULL, 0, NULL);}', name: 'GetImageMagick takes three arguments', dependencies: magick_dep) cfg_var.set('HAVE_GETIMAGEMAGICK3', '1') endif endif if 'load' in get_option('magick-features') cfg_var.set('ENABLE_MAGICKLOAD', '1') endif if 'save' in get_option('magick-features') cfg_var.set('ENABLE_MAGICKSAVE', '1') if cc.has_function('ImportImagePixels', prefix: magick_include, dependencies: magick_dep) cfg_var.set('HAVE_IMPORTIMAGEPIXELS', '1') endif if cc.has_function('ImagesToBlob', prefix: magick_include, dependencies: magick_dep) cfg_var.set('HAVE_IMAGESTOBLOB', '1') endif endif endif cfitsio_dep = dependency('cfitsio', required: get_option('cfitsio')) if cfitsio_dep.found() libvips_deps += cfitsio_dep cfg_var.set('HAVE_CFITSIO', '1') endif # quant package we use quantisation_package = disabler() imagequant_dep = dependency('imagequant', required: get_option('imagequant')) if imagequant_dep.found() libvips_deps += imagequant_dep cfg_var.set('HAVE_IMAGEQUANT', '1') quantisation_package = imagequant_dep endif # only if libimagequant not found quantizr_dep = disabler() if not quantisation_package.found() quantizr_dep = dependency('quantizr', required: get_option('quantizr')) if quantizr_dep.found() libvips_deps += quantizr_dep cfg_var.set('HAVE_QUANTIZR', '1') quantisation_package = quantizr_dep endif endif cgif_dep = disabler() if quantisation_package.found() cgif_dep = dependency('cgif', version: '>=0.2.0', required: get_option('cgif')) if cgif_dep.found() libvips_deps += cgif_dep cfg_var.set('HAVE_CGIF', '1') if cc.compiles('#include \nint i = CGIF_ATTR_NO_LOOP;', name: 'Has CGIF_ATTR_NO_LOOP', dependencies: cgif_dep) cfg_var.set('HAVE_CGIF_ATTR_NO_LOOP', '1') endif if cc.compiles('#include \nint i = CGIF_FRAME_ATTR_INTERLACED;', name: 'Has CGIF_FRAME_ATTR_INTERLACED', dependencies: cgif_dep) cfg_var.set('HAVE_CGIF_FRAME_ATTR_INTERLACED', '1') endif endif endif libexif_dep = dependency('libexif', version: '>=0.6', required: get_option('exif')) if libexif_dep.found() libvips_deps += libexif_dep cfg_var.set('HAVE_EXIF', '1') # some libexif packages need include , some just # how annoying if cc.has_header('exif-data.h', dependencies: libexif_dep) # libexif includes don't need libexif prefix cfg_var.set('UNTAGGED_EXIF', '1') endif # 0.6.22 adds a couple of EXIF 2.3 ASCII tags if libexif_dep.version().version_compare('>=0.6.22') cfg_var.set('HAVE_EXIF_0_6_22', '1') endif # 0.6.23 adds some OffsetTime* and GPS* ASCII tags if libexif_dep.version().version_compare('>=0.6.23') cfg_var.set('HAVE_EXIF_0_6_23', '1') endif endif libjpeg_dep = dependency('libjpeg', required: get_option('jpeg')) if libjpeg_dep.found() libvips_deps += libjpeg_dep cfg_var.set('HAVE_JPEG', '1') # features like trellis quant are exposed as extension parameters ... # mozjpeg 3.2 and later have #define JPEG_C_PARAM_SUPPORTED, but we must # work with earlier versions if cc.has_function('jpeg_c_bool_param_supported', prefix: '#include \n#include ', dependencies: libjpeg_dep) cfg_var.set('HAVE_JPEG_EXT_PARAMS', '1') endif endif # Look for libspng first # - it's sometimes called "spng.pc", sometimes "libspng.pc", we must search for # both # - we need 0.7+ for PNG write support # TODO: simplify this when requiring meson>=0.60.0 spng_dep = dependency('spng', version: '>=0.7', required: false) if not spng_dep.found() spng_dep = dependency('libspng', version: '>=0.7', required: get_option('spng')) endif spng_found = not get_option('spng').disabled() and spng_dep.found() if spng_found libvips_deps += spng_dep cfg_var.set('HAVE_SPNG', '1') endif # only if libspng not found png_dep = disabler() if not spng_found png_dep = dependency('libpng', version: '>=1.2.9', required: get_option('png')) if png_dep.found() libvips_deps += png_dep cfg_var.set('HAVE_PNG', '1') if cc.has_function('png_set_chunk_malloc_max', prefix: '#include ', dependencies: png_dep) cfg_var.set('HAVE_PNG_SET_CHUNK_MALLOC_MAX', '1') endif endif endif # libwebp ... target 0.6+ to reduce complication # webp has the stuff for handling metadata in two separate libraries -- we # insist on having both of them libwebp_dep = dependency('libwebp', version: '>=0.6', required: get_option('webp')) if libwebp_dep.found() libvips_deps += libwebp_dep libvips_deps += dependency('libwebpmux', version: '>=0.6') libvips_deps += dependency('libwebpdemux', version: '>=0.6') cfg_var.set('HAVE_LIBWEBP', '1') endif pangocairo_dep = dependency('pangocairo', version: '>=1.32.6', required: get_option('pangocairo')) if pangocairo_dep.found() libvips_deps += pangocairo_dep cfg_var.set('HAVE_PANGOCAIRO', '1') endif # text rendering with fontconfig requires pangoft2 pangoft2_dep = dependency('pangoft2', version: '>=1.32.6', required: get_option('fontconfig')) fontconfig_dep = dependency('fontconfig', required: get_option('fontconfig')) fontconfig_found = pangoft2_dep.found() and fontconfig_dep.found() and pangocairo_dep.found() if fontconfig_found libvips_deps += pangoft2_dep libvips_deps += fontconfig_dep cfg_var.set('HAVE_FONTCONFIG', '1') endif libtiff_dep = dependency('libtiff-4', required: get_option('tiff')) if libtiff_dep.found() libvips_deps += libtiff_dep cfg_var.set('HAVE_TIFF', '1') # ZSTD and WEBP in TIFF added in libtiff 4.0.10 if cc.get_define('COMPRESSION_WEBP', prefix: '#include ', dependencies: libtiff_dep) != '' cfg_var.set('HAVE_TIFF_COMPRESSION_WEBP', '1') endif endif # 2.40.3 so we get the UNLIMITED open flag librsvg_dep = dependency('librsvg-2.0', version: '>=2.40.3', required: get_option('rsvg')) cairo_dep = dependency('cairo', version: '>=1.2', required: get_option('rsvg')) librsvg_found = librsvg_dep.found() and cairo_dep.found() if librsvg_found libvips_deps += librsvg_dep libvips_deps += cairo_dep cfg_var.set('HAVE_RSVG', '1') endif openslide_dep = dependency('openslide', version: '>=3.3.0', required: get_option('openslide')) openslide_module = false if openslide_dep.found() openslide_module = modules_enabled and not get_option('openslide-module').disabled() if openslide_module cfg_var.set('OPENSLIDE_MODULE', '1') else libvips_deps += openslide_dep endif cfg_var.set('HAVE_OPENSLIDE', '1') if openslide_dep.version().version_compare('>=3.4.0') cfg_var.set('HAVE_OPENSLIDE_3_4', '1') endif if cc.has_function('openslide_get_icc_profile_size', dependencies: openslide_dep) cfg_var.set('HAVE_OPENSLIDE_ICC', '1') endif endif matio_dep = dependency('matio', required: get_option('matio')) if matio_dep.found() libvips_deps += matio_dep cfg_var.set('HAVE_MATIO', '1') endif # lcms ... refuse to use lcms1 lcms_dep = dependency('lcms2', required: get_option('lcms')) if lcms_dep.found() libvips_deps += lcms_dep cfg_var.set('HAVE_LCMS2', '1') endif # require 1.2.2 since 1.2.1 has a broken ImfCloseTiledInputFile() openexr_dep = dependency('OpenEXR', version: '>=1.2.2', required: get_option('openexr')) if openexr_dep.found() libvips_deps += openexr_dep cfg_var.set('HAVE_OPENEXR', '1') endif # 2.4 is the first one to have working threading and tiling libopenjp2_dep = dependency('libopenjp2', version: '>=2.4', required: get_option('openjpeg')) if libopenjp2_dep.found() libvips_deps += libopenjp2_dep cfg_var.set('HAVE_LIBOPENJP2', '1') endif # Require 1.0.5 to support the `ReorderDemote2To(u8, i16, i16)` operation # See: https://github.com/google/highway/pull/1247 libhwy_dep = dependency('libhwy', version: '>=1.0.5', required: get_option('highway')) if libhwy_dep.found() libvips_deps += libhwy_dep cfg_var.set('HAVE_HWY', '1') # Always disable SSSE3 since it is rare to have SSSE3 but not SSE4 disabled_targets = ['HWY_SSSE3'] # Optionally, build without AVX512 support (helps to reduce binary size at the cost of performance) #disabled_targets += ['HWY_AVX3'] #disabled_targets += ['HWY_AVX3_ZEN4'] #disabled_targets += ['HWY_AVX3_SPR'] add_project_arguments('-DHWY_DISABLED_TARGETS=@0@'.format('|'.join(disabled_targets)), language: ['cpp']) endif # only if highway not found orc_dep = disabler() if not libhwy_dep.found() # we use loadpw etc. orc_dep = dependency('orc-0.4', version: '>=0.4.11', required: get_option('orc')) if orc_dep.found() libvips_deps += orc_dep cfg_var.set('HAVE_ORC', '1') # orc 0.4.30+ works with cf-protection, but 0.4.30 has a bug with multiple # definitions of OrcTargetPowerPCFlags, so insist on 0.4.31 if orc_dep.version().version_compare('>=0.4.31') cfg_var.set('HAVE_ORC_CF_PROTECTION', '1') endif endif endif # pick 4200 as the starting version number ... no reason, really, it'd # probably work with much older versions pdfium_dep = dependency('pdfium', version: '>=4200', required: get_option('pdfium')) if pdfium_dep.found() libvips_deps += pdfium_dep cfg_var.set('HAVE_PDFIUM', '1') endif libheif_dep = dependency('libheif', version: '>=1.4.0', required: get_option('heif')) libheif_module = false if libheif_dep.found() libheif_module = modules_enabled and not get_option('heif-module').disabled() if libheif_module cfg_var.set('HEIF_MODULE', '1') else libvips_deps += libheif_dep endif cfg_var.set('HAVE_HEIF', '1') # added in 1.6.0 if cpp.has_function('heif_image_handle_get_raw_color_profile', prefix: '#include ', dependencies: libheif_dep) cfg_var.set('HAVE_HEIF_COLOR_PROFILE', '1') endif if cpp.has_function('heif_context_set_maximum_image_size_limit', prefix: '#include ', dependencies: libheif_dep) cfg_var.set('HAVE_HEIF_SET_MAX_IMAGE_SIZE_LIMIT', '1') endif # added in 1.7.0 if cpp.has_member('struct heif_decoding_options', 'convert_hdr_to_8bit', prefix: '#include ', dependencies: libheif_dep) cfg_var.set('HAVE_HEIF_DECODING_OPTIONS_CONVERT_HDR_TO_8BIT', '1') endif # heif_main_brand added in 1.4.0, but heif_avif appeared in 1.7 ... just check # the libheif version number since testing for enums is annoying if libheif_dep.version().version_compare('>=1.7.0') cfg_var.set('HAVE_HEIF_AVIF', '1') endif # heif_init in 1.13 if libheif_dep.version().version_compare('>=1.13.0') cfg_var.set('HAVE_HEIF_INIT', '1') endif # heif_error_success added in 1.17.0 if libheif_dep.version().version_compare('>=1.17.0') cfg_var.set('HAVE_HEIF_ERROR_SUCCESS', '1') endif endif libjxl_dep = dependency('libjxl', version: '>=0.6', required: get_option('jpeg-xl')) libjxl_threads_dep = dependency('libjxl_threads', version: '>=0.6', required: get_option('jpeg-xl')) libjxl_found = libjxl_dep.found() and libjxl_threads_dep.found() libjxl_module = false if libjxl_found libjxl_module = modules_enabled and not get_option('jpeg-xl-module').disabled() if libjxl_module cfg_var.set('LIBJXL_MODULE', '1') else libvips_deps += libjxl_dep libvips_deps += libjxl_threads_dep endif cfg_var.set('HAVE_LIBJXL', '1') if libjxl_dep.version().version_compare('>=0.7') cfg_var.set('HAVE_LIBJXL_0_7', '1') endif if libjxl_dep.version().version_compare('>=0.9') cfg_var.set('HAVE_LIBJXL_0_9', '1') endif endif libpoppler_dep = dependency('poppler-glib', version: '>=0.16.0', required: get_option('poppler')) libpoppler_found = false libpoppler_module = false if not cairo_dep.found() cairo_dep = dependency('cairo', version: '>=1.2', required: get_option('poppler')) endif if libpoppler_dep.found() and cairo_dep.found() and pdfium_dep.found() message('PDFium has been found, ignoring Poppler support') elif libpoppler_dep.found() and cairo_dep.found() libpoppler_found = true libpoppler_module = modules_enabled and not get_option('poppler-module').disabled() if libpoppler_module cfg_var.set('POPPLER_MODULE', '1') else libvips_deps += libpoppler_dep libvips_deps += cairo_dep endif cfg_var.set('HAVE_POPPLER', '1') endif # niftiio.pc is not present, and only provides the CMake package definition # files since v3.0.0, so, as a last resort, fall back on heuristic grabbing the # libs when -Dnifti-prefix-dir= is specified # # cmake find fails on ubuntu due to /usr/lib/x86_64-linux-gnu madness, so it's # simplest to create a niftiio.pc in this case # # create /usr/lib/x86_64-linux-gnu/pkgconfig/niftiio.pc: # # prefix=/usr # libdir=${prefix}/lib/x86_64-linux-gnu # includedir=${prefix}/include/nifti # Name: niftiio # Description: Core i/o routines for reading and writing nifti-1 format files # Version: 3.0.1 # Requires: xproto # Libs: -L${libdir} -lniftiio -lznz # Cflags: -I${includedir} # # TODO: simplify this when requiring meson>=0.60.0 nifti_prefix_dir = get_option('nifti-prefix-dir') libnifti_dep = dependency('niftiio', method: 'pkg-config', required: false) if not libnifti_dep.found() libnifti_dep = dependency('NIFTI', version: '>=3.0.0', method: 'cmake', modules: ['NIFTI::niftiio'], required: get_option('nifti').enabled() and nifti_prefix_dir == '') endif if nifti_prefix_dir != '' and not libnifti_dep.found() nifti_inc = include_directories(nifti_prefix_dir / 'include' / 'nifti') nifti_lib = cc.find_library('niftiio', has_headers: ['nifti1_io.h'], header_include_directories: nifti_inc, required: get_option('nifti')) znz_lib = cc.find_library('znz', has_headers: ['znzlib.h'], header_include_directories: nifti_inc, required: get_option('nifti')) libnifti_dep = declare_dependency(dependencies: [nifti_lib, znz_lib], include_directories: nifti_inc) endif libnifti_found = not get_option('nifti').disabled() and libnifti_dep.found() if libnifti_found libvips_deps += libnifti_dep cfg_var.set('HAVE_NIFTI', '1') endif if cc.has_header('sys/file.h') cfg_var.set('HAVE_SYS_FILE_H', '1') endif if cc.has_header('sys/param.h') cfg_var.set('HAVE_SYS_PARAM_H', '1') endif if cc.has_header('sys/mman.h') cfg_var.set('HAVE_SYS_MMAN_H', '1') endif if cc.has_header('unistd.h') cfg_var.set('HAVE_UNISTD_H', '1') endif if cc.has_header('io.h') cfg_var.set('HAVE_IO_H', '1') endif if cc.has_header('direct.h') cfg_var.set('HAVE_DIRECT_H', '1') endif if get_option('deprecated') cfg_var.set('ENABLE_DEPRECATED', '1') endif if get_option('nsgif') cfg_var.set('HAVE_NSGIF', '1') endif if get_option('ppm') cfg_var.set('HAVE_PPM', '1') endif if get_option('analyze') cfg_var.set('HAVE_ANALYZE', '1') endif if get_option('radiance') cfg_var.set('HAVE_RADIANCE', '1') endif gettext_domain = 'vips@0@.@1@'.format(version_major, version_minor) cfg_var.set_quoted('GETTEXT_PACKAGE', gettext_domain) cfg_var.set_quoted('VIPS_PREFIX', prefix_dir) cfg_var.set_quoted('VIPS_LIBDIR', lib_dir) if cc.has_function('ngettext') cfg_var.set('ENABLE_NLS', 1) have_bind_textdomain_codeset = cc.has_function('bind_textdomain_codeset') else libintl_dep = cc.find_library('intl', required: false) if libintl_dep.found() libvips_deps += libintl_dep cfg_var.set('ENABLE_NLS', 1) have_bind_textdomain_codeset = cc.has_function('bind_textdomain_codeset', prefix: '#include ', dependencies: libintl_dep) else have_bind_textdomain_codeset = false endif endif cfg_var.set('HAVE_BIND_TEXTDOMAIN_CODESET', have_bind_textdomain_codeset) if host_os == 'darwin' profile_dir = '/Library/ColorSync/Profiles' elif host_os == 'windows' # need double escapes since this will get pasted into a #define in a C # header ... the C:\Windows is usually overwritten with the result of # GetWindowsDirectoryW() profile_dir = 'C:\\\\Windows\\\\System32\\\\spool\\\\drivers\\\\color' else profile_dir = get_option('prefix') / get_option('datadir') / 'color' / 'icc' endif cfg_var.set_quoted('VIPS_ICC_DIR', profile_dir) config_file = configure_file( configuration: cfg_var, output: 'config.h' ) config_dep = declare_dependency( sources: config_file, include_directories: include_directories('.'), compile_args: '-DHAVE_CONFIG_H=1', ) libvips_deps += config_dep gir = find_program('g-ir-scanner', required: get_option('introspection')) enable_introspection = gir.found() and (not meson.is_cross_build() or get_option('introspection').enabled()) build_summary = { 'Build options': {'enable debug': [get_option('debug')], 'enable deprecated': [get_option('deprecated')], 'enable modules': [modules_enabled], 'enable gtk-doc': [get_option('gtk_doc')], 'enable doxygen': [get_option('doxygen')], 'enable introspection': [enable_introspection], 'enable examples': [get_option('examples')], 'enable cplusplus': [get_option('cplusplus')], 'enable RAD load/save': [get_option('radiance')], 'enable Analyze7 load/save': [get_option('analyze')], 'enable PPM load/save': [get_option('ppm')], 'enable GIF load': [get_option('nsgif')], }, 'Optional external packages': {'use fftw for FFTs': [fftw_dep.found()], 'SIMD support with highway': [libhwy_dep.found()], 'accelerate loops with ORC': [orc_dep.found()], 'ICC profile support with lcms': [lcms_dep.found()], 'zlib': [zlib_dep.found()], 'text rendering with pangocairo': [pangocairo_dep.found()], 'font file support with fontconfig': [fontconfig_found], 'EXIF metadata support with libexif': [libexif_dep.found()], }, 'External image format libraries': {'JPEG load/save with libjpeg': [libjpeg_dep.found()], 'JXL load/save with libjxl': [libjxl_found, ' (dynamic module: ', libjxl_module, ')'], 'JPEG2000 load/save with OpenJPEG': [libopenjp2_dep.found()], 'PNG load/save with libspng': [spng_found], 'PNG load/save with libpng': [png_dep.found()], 'selected quantisation package': [quantisation_package.found() ? quantisation_package.name() : 'none'], 'TIFF load/save with libtiff': [libtiff_dep.found()], 'image pyramid save with libarchive': [libarchive_dep.found()], 'HEIC/AVIF load/save with libheif': [libheif_dep.found(), ' (dynamic module: ', libheif_module, ')'], 'WebP load/save with libwebp': [libwebp_dep.found()], 'PDF load with PDFium': [pdfium_dep.found()], 'PDF load with poppler-glib': [libpoppler_found, ' (dynamic module: ', libpoppler_module, ')'], 'SVG load with librsvg': [librsvg_found], 'EXR load with OpenEXR': [openexr_dep.found()], 'OpenSlide load': [openslide_dep.found(), ' (dynamic module: ', openslide_module, ')'], 'Matlab load with libmatio': [matio_dep.found()], 'NIfTI load/save with niftiio': [libnifti_found], 'FITS load/save with cfitsio': [cfitsio_dep.found()], 'GIF save with cgif': [cgif_dep.found()], 'selected Magick package': [magick_found ? magick_dep.name() : 'none', ' (dynamic module: ', magick_module, ')'], 'Magick API version': [magick_found ? 'magick' + magick_dep.version().split('.')[0] : 'none'], 'Magick load': [magick_found and 'load' in get_option('magick-features')], 'Magick save': [magick_found and 'save' in get_option('magick-features')], }, } foreach section_title, section : build_summary summary(section, bool_yn: true, list_sep: '', section: section_title) endforeach subdir('libvips') if get_option('gtk_doc') subdir('doc') endif if get_option('examples') subdir('examples') endif if get_option('cplusplus') subdir('cplusplus') endif # these lines removed by a regexp for oss-fuzz builds, don't touch! subdir('man') subdir('po') subdir('tools') subdir('test') subdir('fuzz') libvips-8.15.1/meson_options.txt000066400000000000000000000113771454007373500167340ustar00rootroot00000000000000# core options option('deprecated', type: 'boolean', value: true, description: 'Build deprecated components') option('examples', type: 'boolean', value: true, description: 'Build example programs') option('cplusplus', type: 'boolean', value: true, description: 'Build C++ API') option('doxygen', type: 'boolean', value: false, description: 'Build C++ documentation') option('gtk_doc', type: 'boolean', value: false, description: 'Build GTK-doc documentation') option('modules', type: 'feature', value: 'auto', description: 'Build dynamic modules') option('introspection', type: 'feature', value: 'auto', description: 'Build GObject introspection data') option('vapi', type: 'boolean', value: false, description: 'Build VAPI') # External libraries option('cfitsio', type: 'feature', value: 'auto', description: 'Build with cfitsio') option('cgif', type: 'feature', value: 'auto', description: 'Build with cgif') option('exif', type: 'feature', value: 'auto', description: 'Build with libexif') option('fftw', type: 'feature', value: 'auto', description: 'Build with fftw3') option('fontconfig', type: 'feature', value: 'auto', description: 'Build with fontconfig') option('archive', type: 'feature', value: 'auto', description: 'Build with libarchive') option('heif', type: 'feature', value: 'auto', description: 'Build with libheif') option('heif-module', type: 'feature', value: 'auto', description: 'Build libheif as module') option('imagequant', type: 'feature', value: 'auto', description: 'Build with imagequant') option('jpeg', type: 'feature', value: 'auto', description: 'Build with jpeg') option('jpeg-xl', type: 'feature', value: 'auto', description: 'Build with libjxl') option('jpeg-xl-module', type: 'feature', value: 'auto', description: 'Build libjxl as module') option('lcms', type: 'feature', value: 'auto', description: 'Build with lcms2') option('magick', type: 'feature', value: 'auto', description: 'Build with libMagic') option('magick-package', type: 'string', value: 'MagickCore', description: 'ImageMagick package to build with') option('magick-features', type: 'array', choices: ['load', 'save'], value: ['load', 'save'], description: 'Enable libMagic load or save capabilities') option('magick-module', type: 'feature', value: 'auto', description: 'Build libMagic as module') option('matio', type: 'feature', value: 'auto', description: 'Build with matio') option('nifti', type: 'feature', value: 'auto', description: 'Build with nifti') option('nifti-prefix-dir', type: 'string', value: '', description: 'Prefix where nifticlib is installed (optional)') option('openexr', type: 'feature', value: 'auto', description: 'Build with OpenEXR') option('openjpeg', type: 'feature', value: 'auto', description: 'Build with libopenjp2') option('openslide', type: 'feature', value: 'auto', description: 'Build with OpenSlide') option('openslide-module', type: 'feature', value: 'auto', description: 'Build OpenSlide as module') option('highway', type: 'feature', value: 'auto', description: 'Build with highway') option('orc', type: 'feature', value: 'auto', description: 'Build with orc-0.4') option('pangocairo', type: 'feature', value: 'auto', description: 'Build with pangocairo') option('pdfium', type: 'feature', value: 'auto', description: 'Build with pdfium') option('png', type: 'feature', value: 'auto', description: 'Build with png') option('poppler', type: 'feature', value: 'auto', description: 'Build with poppler') option('poppler-module', type: 'feature', value: 'auto', description: 'Build poppler as module') option('quantizr', type: 'feature', value: 'auto', description: 'Build with quantizr') option('rsvg', type: 'feature', value: 'auto', description: 'Build with rsvg') option('spng', type: 'feature', value: 'auto', description: 'Build with spng') option('tiff', type: 'feature', value: 'auto', description: 'Build with tiff') option('webp', type: 'feature', value: 'auto', description: 'Build with libwebp') option('zlib', type: 'feature', value: 'auto', description: 'Build with zlib') # not external libraries, but we have options to disable them to reduce # the potential attack surface option('nsgif', type: 'boolean', value: true, description: 'Build with nsgif') option('ppm', type: 'boolean', value: true, description: 'Build with ppm') option('analyze', type: 'boolean', value: true, description: 'Build with analyze') option('radiance', type: 'boolean', value: true, description: 'Build with radiance') libvips-8.15.1/po/000077500000000000000000000000001454007373500137045ustar00rootroot00000000000000libvips-8.15.1/po/ChangeLog000066400000000000000000000000221454007373500154500ustar00rootroot00000000000000started 17 dec 03 libvips-8.15.1/po/LINGUAS000066400000000000000000000000111454007373500147210ustar00rootroot00000000000000de en_GB libvips-8.15.1/po/POTFILES.in000066400000000000000000000261771454007373500154760ustar00rootroot00000000000000cplusplus/include/vips/VConnection8.h cplusplus/include/vips/VError8.h cplusplus/include/vips/VImage8.h cplusplus/include/vips/VInterpolate8.h cplusplus/include/vips/VRegion8.h libvips/include/vips/arithmetic.h libvips/include/vips/basic.h libvips/include/vips/buf.h libvips/include/vips/colour.h libvips/include/vips/connection.h libvips/include/vips/conversion.h libvips/include/vips/convolution.h libvips/include/vips/create.h libvips/include/vips/dbuf.h libvips/include/vips/debug.h libvips/include/vips/dispatch.h libvips/include/vips/draw.h libvips/include/vips/error.h libvips/include/vips/foreign.h libvips/include/vips/format.h libvips/include/vips/freqfilt.h libvips/include/vips/gate.h libvips/include/vips/generate.h libvips/include/vips/header.h libvips/include/vips/histogram.h libvips/include/vips/image.h libvips/include/vips/inlines.h libvips/include/vips/internal.h libvips/include/vips/interpolate.h libvips/include/vips/intl.h libvips/include/vips/mask.h libvips/include/vips/memory.h libvips/include/vips/morphology.h libvips/include/vips/mosaicing.h libvips/include/vips/object.h libvips/include/vips/operation.h libvips/include/vips/private.h libvips/include/vips/rect.h libvips/include/vips/region.h libvips/include/vips/resample.h libvips/include/vips/sbuf.h libvips/include/vips/semaphore.h libvips/include/vips/thread.h libvips/include/vips/threadpool.h libvips/include/vips/transform.h libvips/include/vips/type.h libvips/include/vips/util.h libvips/include/vips/vector.h libvips/include/vips/video.h libvips/include/vips/vips7compat.h libvips/include/vips/vips.h cplusplus/VConnection.cpp cplusplus/VError.cpp cplusplus/VImage.cpp cplusplus/VInterpolate.cpp cplusplus/vips-operators.cpp cplusplus/VRegion.cpp libvips/arithmetic/abs.c libvips/arithmetic/add.c libvips/arithmetic/arithmetic.c libvips/arithmetic/avg.c libvips/arithmetic/binary.c libvips/arithmetic/boolean.c libvips/arithmetic/complex.c libvips/arithmetic/deviate.c libvips/arithmetic/divide.c libvips/arithmetic/find_trim.c libvips/arithmetic/getpoint.c libvips/arithmetic/hist_find.c libvips/arithmetic/hist_find_indexed.c libvips/arithmetic/hist_find_ndim.c libvips/arithmetic/hough.c libvips/arithmetic/hough_circle.c libvips/arithmetic/hough_line.c libvips/arithmetic/invert.c libvips/arithmetic/linear.c libvips/arithmetic/math2.c libvips/arithmetic/math.c libvips/arithmetic/max.c libvips/arithmetic/measure.c libvips/arithmetic/min.c libvips/arithmetic/multiply.c libvips/arithmetic/nary.c libvips/arithmetic/profile.c libvips/arithmetic/project.c libvips/arithmetic/relational.c libvips/arithmetic/remainder.c libvips/arithmetic/round.c libvips/arithmetic/sign.c libvips/arithmetic/statistic.c libvips/arithmetic/stats.c libvips/arithmetic/subtract.c libvips/arithmetic/sum.c libvips/arithmetic/unary.c libvips/arithmetic/unaryconst.c libvips/colour/CMYK2XYZ.c libvips/colour/colour.c libvips/colour/colourspace.c libvips/colour/dE00.c libvips/colour/dE76.c libvips/colour/dECMC.c libvips/colour/float2rad.c libvips/colour/HSV2sRGB.c libvips/colour/icc_transform.c libvips/colour/Lab2LabQ.c libvips/colour/Lab2LabS.c libvips/colour/Lab2LCh.c libvips/colour/Lab2XYZ.c libvips/colour/LabQ2Lab.c libvips/colour/LabQ2LabS.c libvips/colour/LabQ2sRGB.c libvips/colour/LabS2Lab.c libvips/colour/LabS2LabQ.c libvips/colour/LCh2Lab.c libvips/colour/LCh2UCS.c libvips/colour/profile_load.c libvips/colour/profiles.c libvips/colour/rad2float.c libvips/colour/scRGB2BW.c libvips/colour/scRGB2sRGB.c libvips/colour/scRGB2XYZ.c libvips/colour/sRGB2HSV.c libvips/colour/sRGB2scRGB.c libvips/colour/UCS2LCh.c libvips/colour/XYZ2CMYK.c libvips/colour/XYZ2Lab.c libvips/colour/XYZ2scRGB.c libvips/colour/XYZ2Yxy.c libvips/colour/Yxy2XYZ.c libvips/conversion/arrayjoin.c libvips/conversion/autorot.c libvips/conversion/bandary.c libvips/conversion/bandbool.c libvips/conversion/bandfold.c libvips/conversion/bandjoin.c libvips/conversion/bandmean.c libvips/conversion/bandrank.c libvips/conversion/bandunfold.c libvips/conversion/byteswap.c libvips/conversion/cache.c libvips/conversion/cast.c libvips/conversion/composite.cpp libvips/conversion/conversion.c libvips/conversion/copy.c libvips/conversion/embed.c libvips/conversion/extract.c libvips/conversion/falsecolour.c libvips/conversion/flatten.c libvips/conversion/flip.c libvips/conversion/gamma.c libvips/conversion/grid.c libvips/conversion/ifthenelse.c libvips/conversion/insert.c libvips/conversion/join.c libvips/conversion/msb.c libvips/conversion/premultiply.c libvips/conversion/recomb.c libvips/conversion/replicate.c libvips/conversion/rot45.c libvips/conversion/rot.c libvips/conversion/scale.c libvips/conversion/sequential.c libvips/conversion/smartcrop.c libvips/conversion/subsample.c libvips/conversion/switch.c libvips/conversion/tilecache.c libvips/conversion/transpose3d.c libvips/conversion/unpremultiply.c libvips/conversion/wrap.c libvips/conversion/zoom.c libvips/convolution/canny.c libvips/convolution/compass.c libvips/convolution/conva.c libvips/convolution/convasep.c libvips/convolution/conv.c libvips/convolution/convf.c libvips/convolution/convi.c libvips/convolution/convi_hwy.cpp libvips/convolution/convolution.c libvips/convolution/convsep.c libvips/convolution/correlation.c libvips/convolution/edge.c libvips/convolution/fastcor.c libvips/convolution/gaussblur.c libvips/convolution/sharpen.c libvips/convolution/spcor.c libvips/create/black.c libvips/create/buildlut.c libvips/create/create.c libvips/create/eye.c libvips/create/fractsurf.c libvips/create/gaussmat.c libvips/create/gaussnoise.c libvips/create/grey.c libvips/create/identity.c libvips/create/invertlut.c libvips/create/logmat.c libvips/create/mask_butterworth_band.c libvips/create/mask_butterworth.c libvips/create/mask_butterworth_ring.c libvips/create/mask.c libvips/create/mask_fractal.c libvips/create/mask_gaussian_band.c libvips/create/mask_gaussian.c libvips/create/mask_gaussian_ring.c libvips/create/mask_ideal_band.c libvips/create/mask_ideal.c libvips/create/mask_ideal_ring.c libvips/create/perlin.c libvips/create/point.c libvips/create/sines.c libvips/create/text.c libvips/create/tonelut.c libvips/create/worley.c libvips/create/xyz.c libvips/create/zone.c libvips/draw/draw.c libvips/draw/draw_circle.c libvips/draw/draw_flood.c libvips/draw/draw_image.c libvips/draw/drawink.c libvips/draw/draw_line.c libvips/draw/draw_mask.c libvips/draw/draw_rect.c libvips/draw/draw_smudge.c libvips/foreign/analyze2vips.c libvips/foreign/analyzeload.c libvips/foreign/archive.c libvips/foreign/cairo.c libvips/foreign/cgifsave.c libvips/foreign/csvload.c libvips/foreign/csvsave.c libvips/foreign/dzsave.c libvips/foreign/exif.c libvips/foreign/fits.c libvips/foreign/fitsload.c libvips/foreign/fitssave.c libvips/foreign/foreign.c libvips/foreign/heifload.c libvips/foreign/heifsave.c libvips/foreign/jp2kload.c libvips/foreign/jp2ksave.c libvips/foreign/jpeg2vips.c libvips/foreign/jpegload.c libvips/foreign/jpegsave.c libvips/foreign/jxlload.c libvips/foreign/jxlsave.c libvips/foreign/magick2vips.c libvips/foreign/magick6load.c libvips/foreign/magick7load.c libvips/foreign/magick.c libvips/foreign/magickload.c libvips/foreign/magicksave.c libvips/foreign/matlab.c libvips/foreign/matload.c libvips/foreign/matrixload.c libvips/foreign/matrixsave.c libvips/foreign/niftiload.c libvips/foreign/niftisave.c libvips/foreign/nsgifload.c libvips/foreign/openexr2vips.c libvips/foreign/openexrload.c libvips/foreign/openslideload.c libvips/foreign/pdfiumload.c libvips/foreign/pngload.c libvips/foreign/pngsave.c libvips/foreign/popplerload.c libvips/foreign/ppmload.c libvips/foreign/ppmsave.c libvips/foreign/quantise.c libvips/foreign/radiance.c libvips/foreign/radload.c libvips/foreign/radsave.c libvips/foreign/rawload.c libvips/foreign/rawsave.c libvips/foreign/spngload.c libvips/foreign/spngsave.c libvips/foreign/svgload.c libvips/foreign/tiff2vips.c libvips/foreign/tiff.c libvips/foreign/tiffload.c libvips/foreign/tiffsave.c libvips/foreign/vips2jpeg.c libvips/foreign/vips2magick.c libvips/foreign/vips2tiff.c libvips/foreign/vipsload.c libvips/foreign/vipspng.c libvips/foreign/vipssave.c libvips/foreign/webp2vips.c libvips/foreign/webpload.c libvips/foreign/webpsave.c libvips/freqfilt/freqfilt.c libvips/freqfilt/freqmult.c libvips/freqfilt/fwfft.c libvips/freqfilt/invfft.c libvips/freqfilt/phasecor.c libvips/freqfilt/spectrum.c libvips/histogram/case.c libvips/histogram/hist_cum.c libvips/histogram/hist_entropy.c libvips/histogram/hist_equal.c libvips/histogram/hist_ismonotonic.c libvips/histogram/hist_local.c libvips/histogram/hist_match.c libvips/histogram/hist_norm.c libvips/histogram/histogram.c libvips/histogram/hist_plot.c libvips/histogram/hist_unary.c libvips/histogram/maplut.c libvips/histogram/percent.c libvips/histogram/stdif.c libvips/iofuncs/buf.c libvips/iofuncs/buffer.c libvips/iofuncs/cache.c libvips/iofuncs/connection.c libvips/iofuncs/dbuf.c libvips/iofuncs/error.c libvips/iofuncs/gate.c libvips/iofuncs/generate.c libvips/iofuncs/ginputsource.c libvips/iofuncs/header.c libvips/iofuncs/image.c libvips/iofuncs/init.c libvips/iofuncs/mapfile.c libvips/iofuncs/memory.c libvips/iofuncs/object.c libvips/iofuncs/operation.c libvips/iofuncs/rect.c libvips/iofuncs/region.c libvips/iofuncs/reorder.c libvips/iofuncs/sbuf.c libvips/iofuncs/semaphore.c libvips/iofuncs/sink.c libvips/iofuncs/sinkdisc.c libvips/iofuncs/sinkmemory.c libvips/iofuncs/sinkscreen.c libvips/iofuncs/source.c libvips/iofuncs/sourcecustom.c libvips/iofuncs/sourceginput.c libvips/iofuncs/system.c libvips/iofuncs/target.c libvips/iofuncs/targetcustom.c libvips/iofuncs/thread.c libvips/iofuncs/threadpool.c libvips/iofuncs/threadset.c libvips/iofuncs/type.c libvips/iofuncs/util.c libvips/iofuncs/vector.cpp libvips/iofuncs/vips.c libvips/iofuncs/window.c libvips/module/heif.c libvips/module/jxl.c libvips/module/magick.c libvips/module/openslide.c libvips/module/poppler.c libvips/morphology/countlines.c libvips/morphology/labelregions.c libvips/morphology/morph.c libvips/morphology/morph_hwy.cpp libvips/morphology/morphology.c libvips/morphology/nearest.c libvips/morphology/rank.c libvips/mosaicing/chkpair.c libvips/mosaicing/global_balance.c libvips/mosaicing/im_avgdxdy.c libvips/mosaicing/im_clinear.c libvips/mosaicing/im_improve.c libvips/mosaicing/im_initialize.c libvips/mosaicing/im_lrcalcon.c libvips/mosaicing/im_tbcalcon.c libvips/mosaicing/lrmerge.c libvips/mosaicing/lrmosaic.c libvips/mosaicing/match.c libvips/mosaicing/matrixinvert.c libvips/mosaicing/merge.c libvips/mosaicing/mosaic1.c libvips/mosaicing/mosaic.c libvips/mosaicing/mosaicing.c libvips/mosaicing/remosaic.c libvips/mosaicing/tbmerge.c libvips/mosaicing/tbmosaic.c libvips/resample/affine.c libvips/resample/bicubic.cpp libvips/resample/interpolate.c libvips/resample/lbb.cpp libvips/resample/mapim.c libvips/resample/nohalo.cpp libvips/resample/quadratic.c libvips/resample/reduce.c libvips/resample/reduceh.cpp libvips/resample/reduceh_hwy.cpp libvips/resample/reducev.cpp libvips/resample/reducev_hwy.cpp libvips/resample/resample.c libvips/resample/resize.c libvips/resample/shrink.c libvips/resample/shrinkh.c libvips/resample/shrinkv.c libvips/resample/similarity.c libvips/resample/thumbnail.c libvips/resample/transform.c libvips/resample/vsqbs.cpp tools/vips.c tools/vipsedit.c tools/vipsheader.c tools/vipsthumbnail.c libvips-8.15.1/po/POTFILES.skip000066400000000000000000000000001454007373500160070ustar00rootroot00000000000000libvips-8.15.1/po/README000066400000000000000000000033121454007373500145630ustar00rootroot00000000000000translators ----------- see this page for a howto: http://developer.gnome.org/doc/tutorials/gnome-i18n/translator.html Things like msgid "/File/_Save Image As ..." are menu items. You only need to translate the last part (following the final "/"). The underscore character marks the accelerator (the underlined character in the menu item). So you could put: msgstr "Sevy i_mago os ..." and it would display as "Sevy imago os ...", with the "m" underlined. tips ---- cd vips-8.x find cplusplus/include libvips/include \ -name '*deprecated*' -prune -o \ -name '*.h' \ -printf '%h\0%d\0%p\n' | \ sort -t '\0' -n | \ awk -F '\0' '{print $3}' > po/POTFILES.in find libvips tools cplusplus \ -path libvips/deprecated -prune -o \ -path libvips/foreign/libnsgif -prune -o \ -path cplusplus/examples -prune -o \ \( -name '*.c' -o -name '*.cpp' \) \ -printf '%h\0%d\0%p\n' | \ sort -t '\0' -n | \ awk -F '\0' '{print $3}' >> po/POTFILES.in cd vips-8.x/po intltool-update --pot make a new vips8.x.pot translation template from the sources add header # test translation file # Copyright (C) 2019 # This file is distributed under the same license as the libvips package. # John Cupitt , 2019. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: vips 8.9.0\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2019-08-06 15:19+0100\n" "PO-Revision-Date: 2019-08-06 15:19+0100\n" "Last-Translator: john \n" "Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=s;\n" edits to make vips8.xx.pot into test.po msgfmt -cv -o /dev/null test.po check translation for errors libvips-8.15.1/po/de.po000066400000000000000000003023121454007373500146350ustar00rootroot00000000000000# German translation of vips. # Copyright (C) 1990-2009 Imperial College, London and others. # This file is distributed under the same license as the vips package. # Copyright of this file (C) Chris Leick 2010-2013. # See also http://www.gnu-darwin.org/www001/src/ports/graphics/vips/work/ # vips-7.12.4/doc/pdf/vipsmanual.pdf # msgid "" msgstr "" "Project-Id-Version: libvips-doc 7.36.5-1\n" "Report-Msgid-Bugs-To: VIPSIP@JISCMAIL.AC.UK\n" "POT-Creation-Date: 2012-03-08 21:02+0000\n" "PO-Revision-Date: 2014-03-12 21:58+0100\n" "Last-Translator: Chris Leick \n" "Language-Team: Debian German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: libvips/arithmetic/abs.c:215 # http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi?coll=0650& # db=man&fname=/usr/share/catman/p_man/cat3/il_c/ilAbsImg.z msgid "absolute value of an image" msgstr "absoluter Wert eines Bildes" #: libvips/arithmetic/statistic.c:147 msgid "VIPS statistic operations" msgstr "statistische VIPS-Transaktionen" #: libvips/arithmetic/statistic.c:151 libvips/arithmetic/unary.c:87 #: libvips/conversion/bandmean.c:197 libvips/conversion/cast.c:474 #: libvips/conversion/tilecache.c:422 libvips/conversion/extract.c:194 #: libvips/conversion/extract.c:353 libvips/conversion/embed.c:516 #: libvips/conversion/rot.c:355 libvips/conversion/flip.c:240 #: libvips/conversion/copy.c:318 libvips/conversion/recomb.c:200 #: libvips/conversion/replicate.c:196 libvips/conversion/cache.c:106 #: libvips/conversion/bandjoin.c:171 libvips/foreign/foreign.c:1379 msgid "Input" msgstr "Eingabe" #: libvips/arithmetic/statistic.c:152 libvips/conversion/cast.c:475 #: libvips/conversion/tilecache.c:423 libvips/conversion/extract.c:195 #: libvips/conversion/extract.c:354 libvips/conversion/embed.c:517 #: libvips/conversion/rot.c:356 libvips/conversion/flip.c:241 #: libvips/conversion/copy.c:319 libvips/conversion/replicate.c:197 #: libvips/conversion/cache.c:107 msgid "Input image" msgstr "Eingabebild" #: libvips/arithmetic/im_point_bilinear.c:74 msgid "coords outside image" msgstr "Koordinaten außerhalb des Bildes" #. Name #: libvips/arithmetic/arith_dispatch.c:298 msgid "absolute value" msgstr "absoluter Wert" #. Name #: libvips/arithmetic/arith_dispatch.c:317 libvips/arithmetic/add.c:186 msgid "add two images" msgstr "zwei Bilder hinzufügen" #. Name #: libvips/arithmetic/arith_dispatch.c:342 msgid "average value of image" msgstr "Durchschnittswert des Bildes" #. Name #: libvips/arithmetic/arith_dispatch.c:431 msgid "standard deviation of image" msgstr "Standardabweichung des Bildes" # im_exptra() transforms element x of input to # pow(e, x) in output. #. Name #: libvips/arithmetic/arith_dispatch.c:450 msgid "10^pel of image" msgstr "10^pel des Bildes" #. Name #: libvips/arithmetic/arith_dispatch.c:469 msgid "e^pel of image" msgstr "e^pel des Bildes" #. Name #: libvips/arithmetic/arith_dispatch.c:498 msgid "x^pel of image" msgstr "x^pel des Bildes" #. Name #: libvips/arithmetic/arith_dispatch.c:527 msgid "[x,y,z]^pel of image" msgstr "[x,y,z]^pel des Bildes" #. Name #: libvips/arithmetic/arith_dispatch.c:546 libvips/arithmetic/divide.c:225 msgid "divide two images" msgstr "zwei Bilder teilen" #. Name #: libvips/arithmetic/arith_dispatch.c:565 msgid "photographic negative" msgstr "Fotonegativ" #. Name #: libvips/arithmetic/arith_dispatch.c:596 msgid "calculate a*in + b = outfile" msgstr "Berechnen von a*in + b = Ausgabedatei" #: libvips/arithmetic/arith_dispatch.c:622 msgid "vectors not equal length" msgstr "Vektoren ungleicher Länge" #. Name #: libvips/arithmetic/arith_dispatch.c:633 msgid "calculate a*in + b -> out, a and b vectors" msgstr "Berechnen von a*in + b -> out, a und b Vektoren" #. Name #: libvips/arithmetic/arith_dispatch.c:652 msgid "log10 of image" msgstr "log10 des Bildes" #. Name #: libvips/arithmetic/arith_dispatch.c:671 msgid "ln of image" msgstr "ln des Bildes" #. Name #: libvips/arithmetic/arith_dispatch.c:690 msgid "tan of image (angles in degrees)" msgstr "Tangens des Bildes (Winkel in Grad)" #. Name #: libvips/arithmetic/arith_dispatch.c:709 msgid "atan of image (result in degrees)" msgstr "Arkustangens des Bildes (Ergebnis in Grad)" #. Name #: libvips/arithmetic/arith_dispatch.c:728 msgid "cos of image (angles in degrees)" msgstr "Kosinus des Bildes (Winkel in Grad)" #. Name #: libvips/arithmetic/arith_dispatch.c:747 msgid "acos of image (result in degrees)" msgstr "Arkuskosinus des Bildes (Ergebnis in Grad)" # hinter diesem String folgt ein Flag. #. Name #: libvips/arithmetic/arith_dispatch.c:766 msgid "round to smallest integer value not less than" msgstr "auf kleinsten ganzzahligen Wert runden, nicht weniger als" # hinter diesem String folgt ein Flag. #. Name #: libvips/arithmetic/arith_dispatch.c:785 msgid "round to largest integer value not greater than" msgstr "auf größten ganzzahligen Wert runden, nicht größer als" # hinter diesem String folgt ein Flag. #. Name #: libvips/arithmetic/arith_dispatch.c:804 msgid "round to nearest integer value" msgstr "auf nächsten ganzzahligen Wert runden" #. Name #: libvips/arithmetic/arith_dispatch.c:823 msgid "sin of image (angles in degrees)" msgstr "Sinus des Bildes (Winkel in Grad)" #. Name #: libvips/arithmetic/arith_dispatch.c:842 msgid "average image bands" msgstr "durchschnittliche Bildbänder" #. Name #: libvips/arithmetic/arith_dispatch.c:861 msgid "unit vector in direction of value" msgstr "Einheitsvektor in Richtung des Wertes" #. Name #: libvips/arithmetic/arith_dispatch.c:880 msgid "asin of image (result in degrees)" msgstr "Arkussinus des Bildes (Ergebnis in Grad)" #. Name #: libvips/arithmetic/arith_dispatch.c:905 msgid "maximum value of image" msgstr "Maximalwert des Bildes" #. Name #: libvips/arithmetic/arith_dispatch.c:940 msgid "position of maximum value of image" msgstr "Position des Maximalwerts des Bildes" #: libvips/arithmetic/arith_dispatch.c:968 msgid "position of maximum value of image, averaging in case of draw" msgstr "" "Position des Maximalwerts des Bildes, durchschnittlich im Fall des Zeichnens" #: libvips/arithmetic/arith_dispatch.c:1012 msgid "position and value of n maxima of image" msgstr "Position und Wert von n Maxima des Bildes" #: libvips/arithmetic/arith_dispatch.c:1046 msgid "position and value of n minima of image" msgstr "Position und Wert von n Minima des Bildes" #. Name #: libvips/arithmetic/arith_dispatch.c:1094 msgid "measure averages of a grid of patches" msgstr "Durchschnittsmaße eine Gitters aus Flickstücken" #. Name #: libvips/arithmetic/arith_dispatch.c:1119 msgid "minimum value of image" msgstr "Minimalwert des Bildes" #. Name #: libvips/arithmetic/arith_dispatch.c:1147 msgid "position of minimum value of image" msgstr "Position des Minimalwerts des Bildes" #. Name #: libvips/arithmetic/arith_dispatch.c:1166 msgid "remainder after integer division" msgstr "Rest nach Ganzzahldivision" #. Name #: libvips/arithmetic/arith_dispatch.c:1195 msgid "remainder after integer division by a constant" msgstr "Rest nach Ganzzahldivision durch eine Konstante" #. Name #: libvips/arithmetic/arith_dispatch.c:1224 msgid "remainder after integer division by a vector of constants" msgstr "Rest nach Ganzzahldivision durch einen Vektor von Konstanten" #. Name #: libvips/arithmetic/arith_dispatch.c:1244 libvips/arithmetic/multiply.c:172 msgid "multiply two images" msgstr "zwei Bilder multiplizieren" #. Name #: libvips/arithmetic/arith_dispatch.c:1265 msgid "pel^x of image" msgstr "pel^x des Bildes" #. Name #: libvips/arithmetic/arith_dispatch.c:1286 msgid "pel^[x,y,z] of image" msgstr "pel^[x,y,z] des Bildes" #. Name #: libvips/arithmetic/arith_dispatch.c:1317 msgid "many image statistics in one pass" msgstr "viele Bildstatistiken in einem Durchgang" #. Name #: libvips/arithmetic/arith_dispatch.c:1336 libvips/arithmetic/subtract.c:161 msgid "subtract two images" msgstr "zwei Bilder subtrahieren" #. Name #: libvips/arithmetic/arith_dispatch.c:1384 msgid "pixelwise linear regression" msgstr "bildpunktweise lineare Regression" #. Name #: libvips/arithmetic/arith_dispatch.c:1403 msgid "phase of cross power spectrum of two complex images" msgstr "Phase des Kreuzleistungsspektrums zweier komplexer Bilder" #: libvips/arithmetic/linear.c:249 msgid "calculate (a * in + b)" msgstr "(a * in + b) berechnen" #: libvips/arithmetic/linear.c:257 msgid "a" msgstr "a" #: libvips/arithmetic/linear.c:258 msgid "Multiply by this" msgstr "hiermit multiplizieren" #: libvips/arithmetic/linear.c:264 msgid "b" msgstr "b" #: libvips/arithmetic/linear.c:265 msgid "Add this" msgstr "dies hinzufügen" #: libvips/arithmetic/remainder.c:178 msgid "remainder after integer division of two images" msgstr "Rest nach Ganzzahldivision zweier Bilder" #: libvips/arithmetic/remainder.c:327 msgid "remainder after integer division of an image and a constant" msgstr "Rest nach Ganzzahldivision eines Bildes und einer Konstante" #: libvips/arithmetic/im_maxpos_vec.c:121 #: libvips/arithmetic/im_maxpos_vec.c:186 msgid "scalar images only" msgstr "nur skalare Bilder" #: libvips/arithmetic/im_maxpos_vec.c:126 #: libvips/arithmetic/im_maxpos_vec.c:191 msgid "single band images only" msgstr "nur Einzelbandbilder" #: libvips/arithmetic/im_maxpos_vec.c:131 #: libvips/arithmetic/im_maxpos_vec.c:196 msgid "uncoded images only" msgstr "nur unkodierte Bilder" #: libvips/arithmetic/im_maxpos_vec.c:136 #: libvips/arithmetic/im_maxpos_vec.c:201 msgid "invalid argument" msgstr "ungültiges Argument" #: libvips/arithmetic/min.c:317 msgid "find image minimum" msgstr "Minimum des Bildes finden" #: libvips/arithmetic/min.c:325 libvips/arithmetic/arithmetic.c:382 #: libvips/arithmetic/stats.c:423 libvips/arithmetic/measure.c:202 #: libvips/arithmetic/max.c:324 libvips/arithmetic/avg.c:218 #: libvips/arithmetic/deviate.c:219 libvips/conversion/conversion.c:89 #: libvips/foreign/foreign.c:897 msgid "Output" msgstr "Ausgabe" #: libvips/arithmetic/min.c:326 libvips/arithmetic/max.c:325 #: libvips/arithmetic/avg.c:219 libvips/arithmetic/deviate.c:220 msgid "Output value" msgstr "Ausgabewert" #: libvips/arithmetic/min.c:332 libvips/arithmetic/max.c:331 #: libvips/conversion/embed.c:522 msgid "x" msgstr "x" #: libvips/arithmetic/min.c:333 msgid "Horizontal position of minimum" msgstr "horizontale Position des Minimums" #: libvips/arithmetic/min.c:339 libvips/arithmetic/max.c:338 #: libvips/conversion/embed.c:529 msgid "y" msgstr "y" #: libvips/arithmetic/min.c:340 msgid "Vertical position of minimum" msgstr "vertikale Position des Minimums" #: libvips/arithmetic/boolean.c:209 msgid "a boolean operation on a pair of images" msgstr "eine Wahr-/Falsch-Transaktion für ein Bilderpaar" #: libvips/arithmetic/boolean.c:217 libvips/arithmetic/boolean.c:519 #: libvips/arithmetic/math2.c:204 libvips/arithmetic/math2.c:401 #: libvips/arithmetic/math.c:205 libvips/arithmetic/relational.c:227 #: libvips/arithmetic/relational.c:560 libvips/arithmetic/complex.c:222 #: libvips/arithmetic/complex.c:476 msgid "Operation" msgstr "Transaktion" #: libvips/arithmetic/boolean.c:218 libvips/arithmetic/boolean.c:520 msgid "boolean to perform" msgstr "Boolesch zur Durchführung" #: libvips/arithmetic/boolean.c:511 msgid "boolean operations against a constant" msgstr "boolesche Transaktionen mit einer Konstante" #: libvips/arithmetic/arithmetic.c:164 #, c-format msgid "not one band or %d bands" msgstr "nicht ein Band oder %d Bänder" #: libvips/arithmetic/arithmetic.c:168 libvips/histograms_lut/im_identity.c:80 #: libvips/histograms_lut/im_identity.c:143 msgid "bad bands" msgstr "falsche Bänder" #: libvips/arithmetic/arithmetic.c:324 libvips/conversion/bandary.c:131 msgid "too many input images" msgstr "zu viele Eingabebilder" #: libvips/arithmetic/arithmetic.c:378 msgid "arithmetic operations" msgstr "arithmetische Transaktionen" #: libvips/arithmetic/arithmetic.c:383 libvips/conversion/conversion.c:90 #: libvips/foreign/foreign.c:898 msgid "Output image" msgstr "Ausgabebild" #: libvips/arithmetic/stats.c:415 libvips/arithmetic/avg.c:210 #: libvips/arithmetic/deviate.c:211 msgid "find image average" msgstr "Bildmittelwert finden" #: libvips/arithmetic/stats.c:424 libvips/arithmetic/measure.c:203 msgid "Output array of statistics" msgstr "Ausgabefeld von Statistiken" #: libvips/arithmetic/math2.c:196 msgid "pow( left, right)" msgstr "pow( links, rechts)" #: libvips/arithmetic/math2.c:205 libvips/arithmetic/math2.c:402 #: libvips/arithmetic/math.c:206 msgid "math to perform" msgstr "durchzuführende Berechnung" #: libvips/arithmetic/math2.c:393 msgid "pow( @in, @c )" msgstr "pow( @in, @c )" #: libvips/arithmetic/round.c:160 msgid "perform a round function on an image" msgstr "eine Rundungsfunktion für ein Bild ausführen" #: libvips/arithmetic/round.c:168 msgid "Round operation" msgstr "Rundungstransakktion" #: libvips/arithmetic/round.c:169 msgid "rounding operation to perform" msgstr "durchzuführende Rundungstransakktion" #: libvips/arithmetic/measure.c:163 #, c-format msgid "patch %d x %d, band %d: avg = %g, sdev = %g" msgstr "Flicken %d x %d, Band %d: Durchschn. = %g, sdev = %g" #: libvips/arithmetic/measure.c:192 msgid "measure a set of patches on a colour chart" msgstr "messen eines Satzes von Patches auf ein Farbdiagramm" #: libvips/arithmetic/measure.c:196 msgid "in" msgstr "in" #: libvips/arithmetic/measure.c:197 msgid "Image to measure" msgstr "zu vermessendes Bild" #: libvips/arithmetic/measure.c:208 libvips/conversion/replicate.c:202 msgid "Across" msgstr "über" #: libvips/arithmetic/measure.c:209 msgid "Number of patches across chart" msgstr "Anzahl der Patches über ein Diagramm" #: libvips/arithmetic/measure.c:215 libvips/conversion/replicate.c:209 msgid "Down" msgstr "hinunter" #: libvips/arithmetic/measure.c:216 msgid "Number of patches down chart" msgstr "Anzahl der Patches ein Diagramm hinunter" #: libvips/arithmetic/measure.c:222 libvips/arithmetic/binary.c:95 #: libvips/conversion/extract.c:200 msgid "Left" msgstr "links" #: libvips/arithmetic/measure.c:223 libvips/conversion/extract.c:201 msgid "Left edge of extract area" msgstr "linke Kante eines extrahierten Bereichs" #: libvips/arithmetic/measure.c:229 libvips/conversion/extract.c:207 msgid "Top" msgstr "oben" #: libvips/arithmetic/measure.c:230 libvips/conversion/extract.c:208 msgid "Top edge of extract area" msgstr "obere Kante eines extrahierten Bereichs" #: libvips/arithmetic/measure.c:236 libvips/conversion/extract.c:214 #: libvips/conversion/embed.c:536 libvips/conversion/copy.c:331 #: libvips/conversion/black.c:128 libvips/foreign/rawload.c:122 #: libvips/iofuncs/image.c:845 msgid "Width" msgstr "Breite" #: libvips/arithmetic/measure.c:237 libvips/conversion/extract.c:215 msgid "Width of extract area" msgstr "Breite des extrahierten Bereichs" #: libvips/arithmetic/measure.c:243 libvips/conversion/extract.c:221 #: libvips/conversion/embed.c:543 libvips/conversion/copy.c:338 #: libvips/conversion/black.c:135 libvips/foreign/rawload.c:129 #: libvips/iofuncs/image.c:852 msgid "Height" msgstr "Höhe" #: libvips/arithmetic/measure.c:244 libvips/conversion/extract.c:222 msgid "Height of extract area" msgstr "Höhe des extrahierten Bereichs" #: libvips/arithmetic/math.c:197 msgid "perform a math function on an image" msgstr "eine mathematische Funktion für ein Bild ausführen" #: libvips/arithmetic/relational.c:219 msgid "a relational operation on a pair of images" msgstr "eine relationale Transaktion für ein Bilderpaar" #: libvips/arithmetic/relational.c:228 libvips/arithmetic/relational.c:561 msgid "relational to perform" msgstr "relational durchzuführen" #: libvips/arithmetic/relational.c:552 msgid "relational operations against a constant" msgstr "relationale Transaktion für eine Konstante" #: libvips/arithmetic/unaryconst.c:201 msgid "unary operations with a constant" msgstr "unäre Transaktionen mit einer Konstante" #: libvips/arithmetic/unaryconst.c:205 msgid "c" msgstr "c" #: libvips/arithmetic/unaryconst.c:206 msgid "Array of constants" msgstr "Feld aus Konstanten" #: libvips/arithmetic/unary.c:80 msgid "unary operations" msgstr "unäre Transaktionen" #: libvips/arithmetic/unary.c:88 libvips/conversion/bandmean.c:198 #: libvips/conversion/recomb.c:201 msgid "Input image argument" msgstr "Eingabebildargument" #: libvips/arithmetic/invert.c:152 msgid "invert an image" msgstr "ein Bild invertieren" #: libvips/arithmetic/max.c:316 msgid "find image maximum" msgstr "Maximum des Bildes finden" #: libvips/arithmetic/max.c:332 msgid "Horizontal position of maximum" msgstr "horizontale Position des Maximums" #: libvips/arithmetic/max.c:339 msgid "Vertical position of maximum" msgstr "vertikale Position des Maximums" #: libvips/arithmetic/complex.c:215 msgid "perform a complex operation on an image" msgstr "eine komplexe Transaktion mit einem Bild durchführen" #: libvips/arithmetic/complex.c:223 libvips/arithmetic/complex.c:477 msgid "complex to perform" msgstr "komplex durchzuführen" #: libvips/arithmetic/complex.c:468 msgid "get a component from a complex image" msgstr "einen Bestandteil eines komplexen Bildes holen" #: libvips/arithmetic/complex.c:666 msgid "form a complex image from two real images" msgstr "ein komplexes Bild aus zwei echten Bildern erstellen" #: libvips/arithmetic/binary.c:88 msgid "binary operations" msgstr "binäre Transaktionen" #: libvips/arithmetic/binary.c:96 msgid "Left-hand image argument" msgstr "linksseitiges Bildargument" #: libvips/arithmetic/binary.c:101 msgid "Right" msgstr "rechts" #: libvips/arithmetic/binary.c:102 msgid "Right-hand image argument" msgstr "rechtsseitiges Bildargument" #: libvips/arithmetic/sign.c:151 msgid "unit vector of pixel" msgstr "Einheitsvektor von Bildpunkten" #: libvips/colour/im_rad2float.c:186 msgid "not a RAD image" msgstr "kein RAD-Bild" #: libvips/colour/im_icc_transform.c:202 libvips/colour/im_icc_transform.c:212 #: libvips/colour/im_icc_transform.c:1000 #: libvips/colour/im_icc_transform.c:1010 #, c-format msgid "unable to open profile \"%s\"" msgstr "Profil »%s« kann nicht geöffnet werden" #: libvips/colour/im_icc_transform.c:223 #: libvips/colour/im_icc_transform.c:1022 msgid "unable to create profiles" msgstr "es können keine Profile erstellt werden" #: libvips/colour/im_icc_transform.c:242 #: libvips/colour/im_icc_transform.c:1042 msgid "unable to read profile" msgstr "Profil kann nicht gelesen werden" #: libvips/colour/im_icc_transform.c:363 libvips/colour/im_icc_transform.c:372 #: libvips/colour/im_icc_transform.c:737 #: libvips/colour/im_icc_transform.c:1170 #: libvips/colour/im_icc_transform.c:1179 #: libvips/colour/im_icc_transform.c:1522 #, c-format msgid "" "intent %d (%s) not supported by profile \"%s\"; falling back to default " "intent (usually PERCEPTUAL)" msgstr "" "Ziel-%d (%s) nicht von Profil »%s« unterstützt; Rückfall auf Standardabsicht " "(normalerweise WAHRNEHMUNG)" #: libvips/colour/im_icc_transform.c:382 #: libvips/colour/im_icc_transform.c:1189 msgid "CMYK input profile needs a 4 band input image" msgstr "CMYK-Eingabeprofil benötigt ein Eingabebild mit vier Bändern" #: libvips/colour/im_icc_transform.c:392 #: libvips/colour/im_icc_transform.c:1199 msgid "RGB input profile needs a 3 band input image" msgstr "RGB-Eingabeprofil benötigt ein Eingabebild mit drei Bändern" #: libvips/colour/im_icc_transform.c:401 libvips/colour/im_icc_transform.c:551 #: libvips/colour/im_icc_transform.c:1208 #: libvips/colour/im_icc_transform.c:1340 #, c-format msgid "unimplemented input color space 0x%x" msgstr "nicht implementierter Eingabefarbraum 0x%x" #: libvips/colour/im_icc_transform.c:428 libvips/colour/im_icc_transform.c:767 #: libvips/colour/im_icc_transform.c:1235 #: libvips/colour/im_icc_transform.c:1552 #, c-format msgid "unimplemented output color space 0x%x" msgstr "nicht implementierter Ausgabefarbraum 0x%x" #: libvips/colour/im_icc_transform.c:444 libvips/colour/im_icc_transform.c:567 #: libvips/colour/im_icc_transform.c:1251 #: libvips/colour/im_icc_transform.c:1356 msgid "uchar or ushort input only" msgstr "nur »uchar« oder »ushort«-Eingabe" #: libvips/colour/im_icc_transform.c:516 #: libvips/colour/im_icc_transform.c:1305 #, c-format msgid "" "intent %d (%s) not supported by profile; falling back to default intent " "(usually PERCEPTUAL)" msgstr "" "Ziel-%d (%s) nicht vom Profil unterstützt; Rückfall auf Standardabsicht " "(normalerweise WAHRNEHMUNG)" #: libvips/colour/im_icc_transform.c:533 #: libvips/colour/im_icc_transform.c:1322 msgid "CMYK profile needs a 4 band input image" msgstr "CMYK-Profil benötigt ein Eingabebild mit vier Bändern" #: libvips/colour/im_icc_transform.c:543 #: libvips/colour/im_icc_transform.c:1332 msgid "RGB profile needs a 3 band input image" msgstr "RGB-Profil benötigt ein Eingabebild mit drei Bändern" #: libvips/colour/im_icc_transform.c:634 #: libvips/colour/im_icc_transform.c:1427 msgid "no embedded profile" msgstr "kein eingebettetes Profil" #: libvips/colour/im_icc_transform.c:726 #: libvips/colour/im_icc_transform.c:1511 msgid "unsupported bit depth" msgstr "nicht unterstützte Bit-Tiefe" #: libvips/colour/im_icc_transform.c:815 #: libvips/colour/im_icc_transform.c:1605 msgid "unable to get media white point" msgstr "weißer Medienpunkt kann nicht abgefragt werden" #: libvips/colour/im_icc_transform.c:1672 msgid "lcms library not linked to this VIPS" msgstr "gegen die »lcms«-Bibliothek wird in diesem VIPS nicht verlinkt" #: libvips/colour/im_icc_transform.c:1682 #: libvips/colour/im_icc_transform.c:1691 #: libvips/colour/im_icc_transform.c:1701 #: libvips/colour/im_icc_transform.c:1710 msgid "lmcs library not linked to this VIPS" msgstr "gegen die »lmcs«-Bibliothek wird in diesem VIPS nicht verlinkt" #: libvips/colour/disp.c:397 msgid "out of range [0,255]" msgstr "außerhalb des Bereichs [0,255]" #: libvips/colour/disp.c:423 msgid "bad display type" msgstr "falsche Anzeigetyp" #: libvips/colour/disp.c:537 msgid "display unknown" msgstr "Anzeige unbekannt" #: libvips/colour/im_disp2XYZ.c:86 msgid "input not 3-band uncoded char" msgstr "Eingabe ist kein unkodiertes Zeichen mit drei Bändern" #: libvips/colour/im_XYZ2disp.c:139 msgid "3-band uncoded float only" msgstr "nur unkodierte Fließkommazahlen mit drei Bändern" #: libvips/colour/im_lab_morph.c:75 msgid "bad greyscale mask size" msgstr "falsche Grauskala-Maskengröße" #: libvips/colour/im_lab_morph.c:86 #, c-format msgid "bad greyscale mask value, row %d" msgstr "falscher Grauskala-Maskenwert, Reihe %d" #: libvips/conversion/im_gaussnoise.c:124 msgid "bad parameter" msgstr "falscher Parameter" #: libvips/conversion/bandmean.c:191 msgid "band-wise average" msgstr "bandweiser Durchschnitt" #: libvips/conversion/cast.c:123 #, c-format msgid "%d underflows and %d overflows detected" msgstr "%d Unter- und %d Überläufe entdeckt" #: libvips/conversion/cast.c:470 msgid "cast an image" msgstr "ein Bild umwandeln" #: libvips/conversion/cast.c:480 libvips/conversion/copy.c:352 #: libvips/iofuncs/image.c:866 msgid "Format" msgstr "Format" #: libvips/conversion/cast.c:481 msgid "Format to cast to" msgstr "Format, in das umgewandelt werden soll" #: libvips/conversion/ifthenelse.c:395 msgid "ifthenelse an image" msgstr "fallsdannsonst eines Bildes" #: libvips/conversion/ifthenelse.c:399 msgid "Condition" msgstr "Bedingung" #: libvips/conversion/ifthenelse.c:400 msgid "Condition input image" msgstr "Bedingung des Eingabebilds" #: libvips/conversion/ifthenelse.c:405 msgid "Then image" msgstr "dann Bild" #: libvips/conversion/ifthenelse.c:406 msgid "Source for TRUE pixels" msgstr "Quelle für TRUE-Bildpunkte" #: libvips/conversion/ifthenelse.c:411 msgid "Else image" msgstr "sonst Bild" #: libvips/conversion/ifthenelse.c:412 msgid "Source for FALSE pixels" msgstr "Quelle für FALSE-Bildpunkte" #: libvips/conversion/ifthenelse.c:417 msgid "blend" msgstr "Mischung" #: libvips/conversion/ifthenelse.c:418 msgid "Blend smoothly between then and else parts" msgstr "nahtlos zwischen »dann«- und »sonst«-Teilen mischen" #: libvips/conversion/insert.c:349 msgid "insert an image" msgstr "ein Bild einfügen" #: libvips/conversion/insert.c:353 msgid "Main" msgstr "primär" #: libvips/conversion/insert.c:354 msgid "Main input image" msgstr "Haupteingabebild" #: libvips/conversion/insert.c:359 msgid "Sub-image" msgstr "Teilbild" #: libvips/conversion/insert.c:360 msgid "Sub-image to insert into main image" msgstr "Teilbild, das in das Hauptbild eingefügt werden soll" #: libvips/conversion/insert.c:365 msgid "X" msgstr "X" #: libvips/conversion/insert.c:366 msgid "Left edge of sub in main" msgstr "linker Rand des Teilbilds im Hauptbild" #: libvips/conversion/insert.c:372 msgid "Y" msgstr "Y" #: libvips/conversion/insert.c:373 msgid "Top edge of sub in main" msgstr "oberer Rand des Teilbilds im Hauptbild" #: libvips/conversion/insert.c:379 libvips/conversion/join.c:233 msgid "Expand" msgstr "expandieren" #: libvips/conversion/insert.c:380 libvips/conversion/join.c:234 msgid "Expand output to hold all of both inputs" msgstr "Ausgabe so expandieren, dass sie beide Eingaben vollständig enthält" #: libvips/conversion/insert.c:386 libvips/conversion/join.c:247 msgid "Background" msgstr "Hintergrund" #: libvips/conversion/insert.c:387 libvips/conversion/join.c:248 msgid "Colour for new pixels" msgstr "Farbe für neue Bildpunkte" #: libvips/conversion/tilecache.c:418 libvips/conversion/cache.c:102 msgid "cache an image" msgstr "ein Bild zwischenspeichern" #: libvips/conversion/tilecache.c:428 libvips/conversion/cache.c:112 #: libvips/foreign/tiffsave.c:213 msgid "Tile width" msgstr "Kachelbreite" #: libvips/conversion/tilecache.c:429 libvips/conversion/cache.c:113 #: libvips/foreign/tiffsave.c:214 msgid "Tile width in pixels" msgstr "Kachelbreite in Bildpunkten" #: libvips/conversion/tilecache.c:435 libvips/conversion/cache.c:119 #: libvips/foreign/tiffsave.c:220 msgid "Tile height" msgstr "Kachelhöhe" #: libvips/conversion/tilecache.c:436 libvips/conversion/cache.c:120 #: libvips/foreign/tiffsave.c:221 msgid "Tile height in pixels" msgstr "Kachelhöhe in Bildpunkten" #: libvips/conversion/tilecache.c:442 libvips/conversion/cache.c:126 msgid "Max tiles" msgstr "Kacheln maximal" #: libvips/conversion/tilecache.c:443 libvips/conversion/cache.c:127 msgid "Maximum number of tiles to cache" msgstr "maximale Anzahl von Kacheln, die zwischengespeichert werden soll" #: libvips/conversion/tilecache.c:449 msgid "Strategy" msgstr "Strategie" #: libvips/conversion/tilecache.c:450 msgid "Expected access pattern" msgstr "erwartetes Zugriffsmuster" #: libvips/conversion/im_text.c:132 msgid "no text to render" msgstr "kein Text zu rendern" #: libvips/conversion/im_text.c:219 msgid "invalid markup in text" msgstr "ungültige Auszeichnung im Text" #: libvips/conversion/im_text.c:252 msgid "pangoft2 support disabled" msgstr "Pangoft2-Unterstützung deaktiviert" #: libvips/conversion/im_zoom.c:331 msgid "zoom factors should be >= 0" msgstr "Zoomfaktoren sollten >=0 sein" #. Make sure we won't get integer overflow. #. #: libvips/conversion/im_zoom.c:338 msgid "zoom factors too large" msgstr "Zoomfaktoren zu groß" #: libvips/conversion/conver_dispatch.c:918 #: libvips/inplace/inplace_dispatch.c:171 msgid "vectors not same length" msgstr "Vektoren ungleicher Länge" #: libvips/conversion/extract.c:147 msgid "bad extract area" msgstr "falscher extrahierter Bereich" #: libvips/conversion/extract.c:190 msgid "extract an area from an image" msgstr "einen Bereich eines Bildes extrahieren" #: libvips/conversion/extract.c:318 msgid "bad extract band" msgstr "schlecht extrahiertes Band" #: libvips/conversion/extract.c:347 msgid "extract band from an image" msgstr "Band aus einem Bild extrahieren" #: libvips/conversion/extract.c:359 msgid "Band" msgstr "Band" #: libvips/conversion/extract.c:360 msgid "Band to extract" msgstr "zu extrahierendes Band" #: libvips/conversion/extract.c:366 msgid "n" msgstr "n" #: libvips/conversion/extract.c:367 msgid "Number of bands to extract" msgstr "Anzahl zu extrahierender Bänder" #: libvips/conversion/embed.c:430 libvips/iofuncs/image.c:1777 msgid "bad dimensions" msgstr "falsche Abmessungen" #: libvips/conversion/embed.c:512 msgid "embed an image in a larger image" msgstr "ein Bild in ein größeres Bild einbetten" #: libvips/conversion/embed.c:523 msgid "Left edge of input in output" msgstr "linker Rand der Eingabe in der Ausgabe" #: libvips/conversion/embed.c:530 msgid "Top edge of input in output" msgstr "oberer Rand der Eingabe in der Ausgabe" #: libvips/conversion/embed.c:537 libvips/conversion/copy.c:332 #: libvips/conversion/black.c:129 libvips/foreign/rawload.c:123 #: libvips/iofuncs/image.c:846 msgid "Image width in pixels" msgstr "Bildbreite in Bildpunkten" #: libvips/conversion/embed.c:544 libvips/conversion/copy.c:339 #: libvips/conversion/black.c:136 libvips/foreign/rawload.c:130 #: libvips/iofuncs/image.c:853 msgid "Image height in pixels" msgstr "Bildhöhe in Bildpunkten" #: libvips/conversion/embed.c:550 msgid "Extend" msgstr "vergrößern" #: libvips/conversion/embed.c:551 msgid "How to generate the extra pixels" msgstr "Wie werden die zusätzlichen Bildpunkte erzeugt?" #: libvips/conversion/im_grid.c:164 #: libvips/convolution/im_contrast_surface.c:140 libvips/iofuncs/image.c:710 #: libvips/iofuncs/sinkscreen.c:1082 libvips/morphology/im_rank.c:342 msgid "bad parameters" msgstr "falsche Parameter" #: libvips/conversion/im_grid.c:169 msgid "bad grid geometry" msgstr "falsche Gittergeometrie" #: libvips/conversion/join.c:210 msgid "join a pair of images" msgstr "ein Bilderpaar zusammenführen" #: libvips/conversion/join.c:214 msgid "in1" msgstr "in1" #: libvips/conversion/join.c:215 msgid "First input image" msgstr "erstes Eingabebild" #: libvips/conversion/join.c:220 msgid "in2" msgstr "in2" #: libvips/conversion/join.c:221 msgid "Second input image" msgstr "zweites Eingabebild" #: libvips/conversion/join.c:226 msgid "direction" msgstr "Richtung" #: libvips/conversion/join.c:227 msgid "Join left-right or up-down" msgstr "von links nach rechts oder von oben nach unten zusammenführen" #: libvips/conversion/join.c:240 msgid "Shim" msgstr "Scheibe" #: libvips/conversion/join.c:241 msgid "Pixels between images" msgstr "Bildpunkte zwischen Bildern" #: libvips/conversion/join.c:254 msgid "Align" msgstr "ausrichten" #: libvips/conversion/join.c:255 msgid "Align on the low, centre or high coordinate edge" msgstr "am Rand der unteren, mittleren oder höchsten Koordinate ausrichten" #: libvips/conversion/rot.c:351 msgid "rotate an image" msgstr "ein Bild drehen" #: libvips/conversion/rot.c:361 msgid "Angle" msgstr "Winkel" #: libvips/conversion/rot.c:362 msgid "Angle to rotate image" msgstr "Winkel zum Drehen eines Bildes" #: libvips/conversion/flip.c:236 msgid "flip an image" msgstr "ein Bild umdrehen" #: libvips/conversion/flip.c:246 msgid "Direction" msgstr "Richtung" #: libvips/conversion/flip.c:247 msgid "Direction to flip image" msgstr "Richtung, nach der das Bild umgedreht werden soll" #: libvips/conversion/copy.c:314 msgid "copy an image" msgstr "ein Bild kopieren" #: libvips/conversion/copy.c:324 msgid "Swap" msgstr "austauschen" #: libvips/conversion/copy.c:325 msgid "Swap bytes in image between little and big-endian" msgstr "Byte im Bild zwischen Little- und Big-Endian austauschen" #: libvips/conversion/copy.c:345 libvips/conversion/black.c:142 #: libvips/foreign/rawload.c:136 libvips/iofuncs/image.c:859 msgid "Bands" msgstr "Bänder" #: libvips/conversion/copy.c:346 libvips/conversion/black.c:143 #: libvips/foreign/rawload.c:137 libvips/iofuncs/image.c:860 msgid "Number of bands in image" msgstr "Anzahl der Bänder in einem Bild" #: libvips/conversion/copy.c:353 libvips/iofuncs/image.c:867 msgid "Pixel format in image" msgstr "Bildpunktformat im Bild" #: libvips/conversion/copy.c:359 libvips/iofuncs/image.c:873 msgid "Coding" msgstr "Kodierung" #: libvips/conversion/copy.c:360 libvips/iofuncs/image.c:874 msgid "Pixel coding" msgstr "Bildpunktkodierung" #: libvips/conversion/copy.c:366 libvips/iofuncs/image.c:880 msgid "Interpretation" msgstr "Interpretation" #: libvips/conversion/copy.c:367 libvips/iofuncs/image.c:881 msgid "Pixel interpretation" msgstr "Bildpunktinterpretation" #: libvips/conversion/copy.c:373 libvips/foreign/tiffsave.c:249 #: libvips/iofuncs/image.c:887 msgid "Xres" msgstr "Xres" #: libvips/conversion/copy.c:374 libvips/foreign/tiffsave.c:250 #: libvips/iofuncs/image.c:888 msgid "Horizontal resolution in pixels/mm" msgstr "horizontale Auflösung in Bildpunkten/mm" #: libvips/conversion/copy.c:380 libvips/foreign/tiffsave.c:256 #: libvips/iofuncs/image.c:894 msgid "Yres" msgstr "Yres" #: libvips/conversion/copy.c:381 libvips/foreign/tiffsave.c:257 #: libvips/iofuncs/image.c:895 msgid "Vertical resolution in pixels/mm" msgstr "vertikale Auflösung in Bildpunkten/mm" #: libvips/conversion/copy.c:387 libvips/iofuncs/image.c:901 msgid "Xoffset" msgstr "Xoffset" #: libvips/conversion/copy.c:388 libvips/iofuncs/image.c:902 msgid "Horizontal offset of origin" msgstr "horizontaler Versatz vom Ursprung" #: libvips/conversion/copy.c:394 libvips/iofuncs/image.c:908 msgid "Yoffset" msgstr "Yoffset" #: libvips/conversion/copy.c:395 libvips/iofuncs/image.c:909 msgid "Vertical offset of origin" msgstr "vertikaler Versatz vom Ursprung" #: libvips/conversion/bandary.c:127 msgid "no input images" msgstr "keine Eingabebilder" #: libvips/conversion/bandary.c:173 msgid "operations on image bands" msgstr "Transaktionen für Bänder von Bildern" #: libvips/conversion/conversion.c:85 msgid "conversion operations" msgstr "Umwandlungstransaktionen" #: libvips/conversion/recomb.c:160 msgid "bands in must equal matrix width" msgstr "»in«-Bänder müssen die gleiche Breite wie die Matrix haben" #: libvips/conversion/recomb.c:196 msgid "linear recombination with matrix" msgstr "lineare Neukombinierung mit der Matrix" #: libvips/conversion/recomb.c:206 msgid "M" msgstr "M" #: libvips/conversion/recomb.c:207 msgid "matrix of coefficients" msgstr "Matrix der Koeffizienten" #: libvips/conversion/replicate.c:192 msgid "replicate an image" msgstr "ein Bild nachmachen" #: libvips/conversion/replicate.c:203 msgid "Repeat this many times horizontally" msgstr "horizontal so oft wiederholen" #: libvips/conversion/replicate.c:210 msgid "Repeat this many times vertically" msgstr "vertikal so oft wiederholen" #: libvips/conversion/black.c:124 msgid "make a black image" msgstr "ein schwarzes Bild erstellen" #: libvips/conversion/im_msb.c:134 libvips/conversion/im_msb.c:213 msgid "unknown coding" msgstr "unbekannte Kodierung" #: libvips/conversion/im_msb.c:169 libvips/resample/im_rightshift_size.c:116 msgid "bad arguments" msgstr "falsche Argumente" #: libvips/conversion/im_msb.c:183 libvips/conversion/im_msb.c:200 msgid "image does not have that many bands" msgstr "Bild hat nicht so viele Bänder" #: libvips/conversion/im_system_image.c:76 #, c-format msgid "command failed: \"%s\"" msgstr "Befehl fehlgeschlagen: »%s«" #: libvips/conversion/im_subsample.c:202 msgid "factors should both be >= 1" msgstr "beide Faktoren sollten >=1 sein" #: libvips/conversion/im_subsample.c:221 libvips/resample/im_shrink.c:286 msgid "image has shrunk to nothing" msgstr "Bild ist zu nichts geschrumpft" #: libvips/conversion/bandjoin.c:165 msgid "bandwise join a set of images" msgstr "einen Satz Bilder bandweise zusammenführen" #: libvips/conversion/bandjoin.c:172 msgid "Array of input images" msgstr "Feld von Eingabebildern" #: libvips/convolution/im_contrast_surface.c:147 msgid "parameters would result in zero size output image" msgstr "Parameter würden zu einem Ausgabebild der Größe Null führen" #: libvips/convolution/im_aconvsep.c:130 libvips/convolution/im_aconv.c:223 #: libvips/convolution/im_aconv.c:229 libvips/convolution/im_aconv.c:750 msgid "mask too complex" msgstr "Maske zu komplex" #: libvips/convolution/im_aconvsep.c:798 libvips/convolution/im_conv.c:1038 #: libvips/convolution/im_conv_f.c:340 libvips/convolution/im_aconv.c:980 #: libvips/convolution/im_aconv.c:1201 libvips/morphology/morphology.c:721 msgid "image too small for mask" msgstr "Bild zu klein für Maske" #: libvips/convolution/im_conv.c:215 #, c-format msgid "%d overflows and %d underflows detected" msgstr "%d Über- und %d Unterläufe entdeckt" #: libvips/convolution/im_conv.c:1125 libvips/convolution/im_conv_f.c:403 msgid "expect 1xN or Nx1 input mask" msgstr "1xN- oder Nx1-Eingabemaske wird erwartet" # ref und in sind Objekte #: libvips/convolution/im_fastcor.c:134 libvips/convolution/im_spcor.c:247 msgid "ref not smaller than or equal to in" msgstr "»ref« nicht kleiner oder gleich »in«" #: libvips/convolution/im_sharpen.c:325 libvips/histograms_lut/im_stdif.c:196 msgid "parameters out of range" msgstr "Parameter außerhalb des Bereichs" #: libvips/foreign/rawload.c:107 msgid "load raw data from a file" msgstr "Rohdaten aus einer Datei laden" #: libvips/foreign/rawload.c:115 libvips/foreign/fitssave.c:128 #: libvips/foreign/ppmload.c:126 libvips/foreign/radload.c:126 #: libvips/foreign/openslideload.c:176 libvips/foreign/tiffload.c:142 #: libvips/foreign/fitsload.c:116 libvips/foreign/vipssave.c:125 #: libvips/foreign/radsave.c:119 libvips/foreign/openexrload.c:137 #: libvips/foreign/analyzeload.c:126 libvips/foreign/pngload.c:136 #: libvips/foreign/tiffsave.c:169 libvips/foreign/vipsload.c:133 #: libvips/foreign/magickload.c:146 libvips/foreign/matload.c:128 #: libvips/foreign/jpegload.c:245 libvips/foreign/jpegsave.c:193 #: libvips/foreign/rawsave.c:166 libvips/foreign/ppmsave.c:118 #: libvips/foreign/csvsave.c:121 libvips/foreign/csvload.c:132 #: libvips/foreign/pngsave.c:166 libvips/iofuncs/image.c:915 msgid "Filename" msgstr "Dateiname" #: libvips/foreign/rawload.c:116 libvips/foreign/ppmload.c:127 #: libvips/foreign/radload.c:127 libvips/foreign/openslideload.c:177 #: libvips/foreign/tiffload.c:143 libvips/foreign/fitsload.c:117 #: libvips/foreign/openexrload.c:138 libvips/foreign/analyzeload.c:127 #: libvips/foreign/pngload.c:137 libvips/foreign/vipsload.c:134 #: libvips/foreign/magickload.c:147 libvips/foreign/matload.c:129 #: libvips/foreign/jpegload.c:246 libvips/foreign/csvload.c:133 msgid "Filename to load from" msgstr "Name der Datei, aus der geladen werden soll" #: libvips/foreign/rawload.c:143 libvips/iofuncs/image.c:943 msgid "Size of header" msgstr "Größe der Kopfdaten" #: libvips/foreign/rawload.c:144 libvips/iofuncs/image.c:944 msgid "Offset in bytes from start of file" msgstr "Versatz in Byte vom Anfang der Datei" #: libvips/foreign/fitssave.c:119 # http://de.wikipedia.org/wiki/Flexible_Image_Transport_System msgid "save image to fits file" msgstr "Bild in FITS-Datei speichern" #: libvips/foreign/fitssave.c:129 libvips/foreign/vipssave.c:126 #: libvips/foreign/radsave.c:120 libvips/foreign/tiffsave.c:170 #: libvips/foreign/jpegsave.c:194 libvips/foreign/rawsave.c:167 #: libvips/foreign/ppmsave.c:119 libvips/foreign/csvsave.c:122 #: libvips/foreign/pngsave.c:167 msgid "Filename to save to" msgstr "Name der Datei in die gespeichert werden soll" #: libvips/foreign/ppmload.c:114 # Portable Pixmap msgid "load ppm from file" msgstr "PPM aus Datei laden" #: libvips/foreign/radload.c:114 msgid "load a Radiance image from a file" msgstr "ein Radiance-Bild aus einer Datei laden" #: libvips/foreign/openslideload.c:159 msgid "load file with OpenSlide" msgstr "Datei mit OpenSlide laden" #: libvips/foreign/openslideload.c:183 msgid "Level" msgstr "Ebene" #: libvips/foreign/openslideload.c:184 msgid "Load this level from the file" msgstr "diese Ebene aus der Datei laden" #: libvips/foreign/openslideload.c:190 msgid "Associated" msgstr "dazugehörig" #: libvips/foreign/openslideload.c:191 msgid "Load this associated image" msgstr "dieses zugehörige Bild laden" #: libvips/foreign/tiffload.c:130 msgid "load tiff from file" msgstr "TIFF aus Datei laden" #: libvips/foreign/tiffload.c:149 msgid "Page" msgstr "Seite" #: libvips/foreign/tiffload.c:150 msgid "Load this page from the file" msgstr "diese Seite aus der Datei laden" #: libvips/foreign/fitsload.c:107 msgid "load a FITS image" msgstr "ein FITS-Bild laden" #: libvips/foreign/vipssave.c:114 msgid "save image to vips file" msgstr "Bild in Vips-Datei speichern" #: libvips/foreign/radsave.c:108 msgid "save image to Radiance file" msgstr "Bild in Radiance-Datei speichern" #: libvips/foreign/openexrload.c:125 msgid "load an OpenEXR image" msgstr "ein OpenEXR-Bild laden" #: libvips/foreign/analyzeload.c:114 msgid "load an Analyze6 image" msgstr "ein Analyze6-Bild laden" #: libvips/foreign/pngload.c:124 msgid "load png from file" msgstr "PNG-Datei aus Datei laden" #: libvips/foreign/tiffsave.c:159 msgid "save image to tiff file" msgstr "Bild in TIFF-Datei speichern" #: libvips/foreign/tiffsave.c:176 libvips/foreign/pngsave.c:103 msgid "Compression" msgstr "Komprimierung" #: libvips/foreign/tiffsave.c:177 msgid "Compression for this file" msgstr "Komprimierung für diese Datei" #: libvips/foreign/tiffsave.c:184 libvips/foreign/jpegsave.c:124 msgid "Q" msgstr "Q" #: libvips/foreign/tiffsave.c:185 libvips/foreign/jpegsave.c:125 msgid "Q factor" msgstr "Q-Faktor" #: libvips/foreign/tiffsave.c:191 # http://de.wikipedia.org/wiki/Abhängige_und_unabhängige_Variable msgid "predictor" msgstr "Prädiktor" #: libvips/foreign/tiffsave.c:192 msgid "Compression prediction" msgstr "Prognose der Komprimierung" #: libvips/foreign/tiffsave.c:199 libvips/foreign/jpegsave.c:131 msgid "profile" msgstr "Profil" #: libvips/foreign/tiffsave.c:200 libvips/foreign/jpegsave.c:132 msgid "ICC profile to embed" msgstr "einzubettendes ICC-Profil" #: libvips/foreign/tiffsave.c:206 msgid "Tile" msgstr "Kachel" #: libvips/foreign/tiffsave.c:207 msgid "Write a tiled tiff" msgstr "ein gekacheltes TIFF schreiben" #: libvips/foreign/tiffsave.c:227 msgid "Pyramid" msgstr "Pyramide" #: libvips/foreign/tiffsave.c:228 msgid "Write a pyramidal tiff" msgstr "ein pyramidenförmiges TIFF schreiben" #: libvips/foreign/tiffsave.c:234 msgid "Squash" msgstr "quetschen" #: libvips/foreign/tiffsave.c:235 msgid "Squash images down to 1 bit" msgstr "Bilder auf ein Bit zusammenquetschen" #: libvips/foreign/tiffsave.c:241 libvips/foreign/tiffsave.c:242 msgid "Resolution unit" msgstr "Einheit der Auflösung" #: libvips/foreign/tiffsave.c:263 # http://de.wikipedia.org/wiki/Liste_von_Dateinamenserweiterungen/T msgid "Bigtiff" msgstr "BigTIFF" #: libvips/foreign/tiffsave.c:264 msgid "Write a bigtiff image" msgstr "ein BigTIFF-Bild schreiben" #: libvips/foreign/csv.c:183 #, c-format msgid "error parsing number, line %d, column %d" msgstr "Fehler beim Auswerten von Nummer, Zeile %d, Spalte %d" #: libvips/foreign/csv.c:237 msgid "end of file while skipping start" msgstr "Dateiende während des Überspringens des Startes" #: libvips/foreign/csv.c:246 libvips/iofuncs/util.c:1072 #: libvips/iofuncs/util.c:1078 msgid "unable to seek" msgstr "kann nicht gesucht werden" #: libvips/foreign/csv.c:257 msgid "empty line" msgstr "leere Zeile" #: libvips/foreign/csv.c:301 #, c-format msgid "unexpected EOF, line %d col %d" msgstr "unerwartetes Dateiende, Zeile %d, Spalte %d" #: libvips/foreign/csv.c:307 #, c-format msgid "unexpected EOL, line %d col %d" msgstr "unerwartetes Zeilenende, Zeile %d, Spalte %d" #: libvips/foreign/vipsload.c:121 msgid "load vips from file" msgstr "Vips aus einer Datei laden" #: libvips/foreign/magickload.c:131 msgid "load file with ImageMagick" msgstr "Datei mit ImageMagick laden" #: libvips/foreign/matload.c:116 # http://www.dateiendung.com/format/mat msgid "load mat from file" msgstr "Mat aus Datei laden" #: libvips/foreign/jpegload.c:118 #, c-format msgid "bad shrink factor %d" msgstr "falscher Schrumpffaktor %d" #: libvips/foreign/jpegload.c:140 msgid "load jpeg" msgstr "JPEG laden" #: libvips/foreign/jpegload.c:146 msgid "Shrink" msgstr "verkleinern" #: libvips/foreign/jpegload.c:147 msgid "Shrink factor on load" msgstr "falscher Verkleinerungsfaktor %d" #: libvips/foreign/jpegload.c:153 msgid "Fail" msgstr "scheitern" #: libvips/foreign/jpegload.c:154 msgid "Fail on first warning" msgstr "scheitert bei erster Warnung" #: libvips/foreign/jpegload.c:234 msgid "load jpeg from file" msgstr "JPEG aus Datei laden" #: libvips/foreign/jpegload.c:309 msgid "load jpeg from buffer" msgstr "JPEG aus Puffer laden" #: libvips/foreign/jpegload.c:315 libvips/foreign/jpegsave.c:260 #: libvips/foreign/pngsave.c:228 msgid "Buffer" msgstr "Puffer" #: libvips/foreign/jpegload.c:316 msgid "Buffer to load from" msgstr "Puffer, aus dem geladen werden soll" #: libvips/foreign/openslide2vips.c:134 msgid "invalid associated image name" msgstr "ungültiger zugehöriger Bildname" #: libvips/foreign/openslide2vips.c:159 msgid "failure opening slide" msgstr "Fehler beim Öffnen des Dias" #: libvips/foreign/openslide2vips.c:166 msgid "invalid slide level" msgstr "ungültige Diastufe" #: libvips/foreign/openslide2vips.c:202 #, c-format msgid "getting dimensions: %s" msgstr "Abfragen der Abmessungen: %s" #: libvips/foreign/openslide2vips.c:209 msgid "image dimensions overflow int" msgstr "Überlaufganzzahl der Bildabmessungen" #: libvips/foreign/openslide2vips.c:274 #, c-format msgid "reading region: %s" msgstr "Region wird gelesen: %s" #: libvips/foreign/openslide2vips.c:348 #, c-format msgid "reading associated image: %s" msgstr "zugehöriges Bild wird gelesen: %s" #: libvips/foreign/analyze2vips.c:308 msgid "header file size incorrect" msgstr "Kopfdatendateigröße nicht korrekt" #: libvips/foreign/analyze2vips.c:353 msgid "header size incorrect" msgstr "Kopfdatengröße nicht korrekt" #: libvips/foreign/analyze2vips.c:371 #, c-format msgid "%d-dimensional images not supported" msgstr "%d-dimensionale Bilder nicht unterstützt" #: libvips/foreign/analyze2vips.c:424 #, c-format msgid "datatype %d not supported" msgstr "Datentyp %d nicht unterstützt" #: libvips/foreign/tiff2vips.c:262 libvips/foreign/tiff2vips.c:285 #: libvips/foreign/tiff2vips.c:303 #, c-format msgid "required field %d missing" msgstr "benötigtes Feld %d fehlt" #: libvips/foreign/tiff2vips.c:266 #, c-format msgid "required field %d=%d, not %d" msgstr "benötigtes Feld %d=%d, nicht %d" #: libvips/foreign/tiff2vips.c:650 #, c-format msgid "%d bits per sample palette image not supported" msgstr "%d Bit pro Musterfarbpalettenbild nicht unterstützt" #: libvips/foreign/tiff2vips.c:659 msgid "bad colormap" msgstr "falsche Farbzusammenstellung" #: libvips/foreign/tiff2vips.c:716 libvips/foreign/tiff2vips.c:747 msgid "3 or 4 bands RGB TIFF only" msgstr "nur RGB-TIFF mit drei oder vier Bändern" #: libvips/foreign/tiff2vips.c:818 msgid "4 or 5 bands CMYK TIFF only" msgstr "nur CMYK-TIFF mit vier oder fünf Bändern" #: libvips/foreign/tiff2vips.c:869 msgid "unknown resolution unit" msgstr "unbekannte Auflösungseinheit" #: libvips/foreign/tiff2vips.c:874 #, c-format msgid "" "no resolution information for TIFF image \"%s\" -- defaulting to 1 pixel per " "mm" msgstr "" "Keine Auflösungsinformationen für TIFF-Bild »%s« – Standard auf 1 Bildpunkt " "pro mm" #: libvips/foreign/tiff2vips.c:946 #, c-format msgid "unsupported sample format %d for lab image" msgstr "nicht unterstütztes Musterformat %d für LAB-Bild" #: libvips/foreign/tiff2vips.c:956 #, c-format msgid "unsupported depth %d for LAB image" msgstr "nicht unterstützte Tiefe %d für LAB-Bild" #: libvips/foreign/tiff2vips.c:995 #, c-format msgid "unsupported sample format %d for greyscale image" msgstr "nicht unterstütztes Musterformat %d für Graustufenbild" #: libvips/foreign/tiff2vips.c:1004 #, c-format msgid "unsupported depth %d for greyscale image" msgstr "nicht unterstützte Tiefe %d für Graustufenbild" #: libvips/foreign/tiff2vips.c:1052 #, c-format msgid "unsupported sample format %d for rgb image" msgstr "nicht unterstütztes Musterformat %d für RGB-Bild" #: libvips/foreign/tiff2vips.c:1061 #, c-format msgid "unsupported depth %d for RGB image" msgstr "nicht unterstützte Tiefe %d für RGB-Bild" #: libvips/foreign/tiff2vips.c:1075 #, c-format msgid "unknown photometric interpretation %d" msgstr "unbekannte fotometrische Deutung %d" #: libvips/foreign/tiff2vips.c:1331 libvips/foreign/radiance.c:959 msgid "read error" msgstr "Lesefehler" #: libvips/foreign/tiff2vips.c:1444 #, c-format msgid "bad page number %d" msgstr "falsche Seitennummer %d" #: libvips/foreign/tiff2vips.c:1465 libvips/foreign/vips2tiff.c:286 #, c-format msgid "unable to open \"%s\" for input" msgstr "»%s« kann nicht zur Eingabe geöffnet werden" #: libvips/foreign/tiff2vips.c:1520 libvips/foreign/tiff2vips.c:1550 #, c-format msgid "TIFF file does not contain page %d" msgstr "TIFF-Datei enthält nicht Seite %d" #: libvips/foreign/jpegsave.c:118 msgid "save jpeg" msgstr "JPEG speichern" #: libvips/foreign/jpegsave.c:187 msgid "save image to jpeg file" msgstr "Bild in JPEG-Datei speichern" #: libvips/foreign/jpegsave.c:256 msgid "save image to jpeg buffer" msgstr "Bild in den JPEG-Puffer speichern" #: libvips/foreign/jpegsave.c:261 libvips/foreign/pngsave.c:229 msgid "Buffer to save to" msgstr "Puffer, in den gespeichert werden soll" #: libvips/foreign/jpegsave.c:303 msgid "error writing output" msgstr "Fehler beim Schreiben der Ausgabe" #: libvips/foreign/jpegsave.c:319 # http://de.wikipedia.org/wiki/MIME#image msgid "save image to jpeg mime" msgstr "Bild in JPEG-MIME speichern" #: libvips/foreign/rawsave.c:159 # http://de.wikipedia.org/wiki/Rohdatenformat_(Fotografie) msgid "save image to raw file" msgstr "Bild in Rohdatenformatdatei speichern" #: libvips/foreign/rawsave.c:266 msgid "write raw image to file descriptor" msgstr "Rohdatenbild in Datei-Deskriptor schreiben" #: libvips/foreign/rawsave.c:273 msgid "File descriptor" msgstr "Datei-Deskriptor" #: libvips/foreign/rawsave.c:274 msgid "File descriptor to write to" msgstr "Datei-Deskriptor, in den geschrieben werden soll" #: libvips/foreign/ppmsave.c:109 # http://de.wikipedia.org/wiki/Portable_Pixmap msgid "save image to ppm file" msgstr "Bild in PPM-Datei speichern" #: libvips/foreign/ppmsave.c:125 msgid "ASCII" msgstr "ASCII" #: libvips/foreign/ppmsave.c:126 msgid "save as ascii" msgstr "Bild als ASCII speichern" #: libvips/foreign/vips2jpeg.c:132 #, c-format msgid "%s" msgstr "%s" #: libvips/foreign/vips2jpeg.c:363 msgid "error setting JPEG resolution" msgstr "Fehler beim Setzen der JPEG-Auflösung" #: libvips/foreign/vips2jpeg.c:510 msgid "error saving EXIF" msgstr "Fehler beim Speichern von EXIF" #: libvips/foreign/openexr2vips.c:115 #, c-format msgid "EXR error: %s" msgstr "EXR-Fehler: %s" #: libvips/foreign/magick2vips.c:215 #, c-format msgid "unsupported image type %d" msgstr "nicht unterstützter Bildtyp %d" #: libvips/foreign/magick2vips.c:275 #, c-format msgid "unsupported bit depth %d" msgstr "nicht unterstützte Bit-Tiefe %d" #: libvips/foreign/magick2vips.c:307 #, c-format msgid "unsupported colorspace %d" msgstr "nicht unterstützter Farbraum %d" #: libvips/foreign/magick2vips.c:622 msgid "unable to read pixels" msgstr "Bildpunkte können nicht gelesen werden" #: libvips/foreign/magick2vips.c:658 #, c-format msgid "" "unable to read file \"%s\"\n" "libMagick error: %s %s" msgstr "" "Datei »%s« kann nicht gelesen werden\n" "libMagick-Fehler: %s %s" #: libvips/foreign/magick2vips.c:692 #, c-format msgid "" "unable to ping file \"%s\"\n" "libMagick error: %s %s" msgstr "" "Datei »%s« kann nicht angepingt werden\n" "libMagick-Fehler: %s %s" #: libvips/foreign/magick2vips.c:703 msgid "bad image size" msgstr "falsche Bildgröße" #: libvips/foreign/vipspng.c:230 msgid "unsupported color type" msgstr "nicht unterstützter Farbtyp" #: libvips/foreign/vipspng.c:570 msgid "compress should be in [0,9]" msgstr "Komprimierung sollte in [0,9] liegen" #: libvips/foreign/vipspng.c:650 #, c-format msgid "unable to write \"%s\"" msgstr "»%s« kann nicht geschrieben werden" #: libvips/foreign/vipspng.c:749 msgid "unable to write to buffer" msgstr "In den Puffer kann nicht geschrieben werden." #: libvips/foreign/matlab.c:106 libvips/foreign/fits.c:178 #: libvips/iofuncs/vips.c:143 libvips/mosaicing/global_balance.c:1181 #: libvips/mosaicing/global_balance.c:1516 #, c-format msgid "unable to open \"%s\"" msgstr "»%s« kann nicht geöffnet werden" #: libvips/foreign/matlab.c:114 #, c-format msgid "no matrix variables in \"%s\"" msgstr "keine Matrixvariablen in »%s«" #: libvips/foreign/matlab.c:175 #, c-format msgid "unsupported rank %d\n" msgstr "nicht unterstützte Rangstufe %d\n" #: libvips/foreign/matlab.c:188 #, c-format msgid "unsupported class type %d\n" msgstr "nicht unterstützter Klassentyp %d\n" #: libvips/foreign/matlab.c:236 msgid "Mat_VarReadDataAll failed" msgstr "»Mat_VarReadDataAll« fehlgeschlagen" #: libvips/foreign/jpeg2vips.c:167 #, c-format msgid "read gave %ld warnings" msgstr "Lesen ergab %ld Warnungen" #: libvips/foreign/jpeg2vips.c:489 msgid "error reading resolution" msgstr "Fehler beim Lesen der Auflösung" #: libvips/foreign/jpeg2vips.c:510 msgid "unknown EXIF resolution unit" msgstr "unbekannte EXIF-Auflösungseinheit" #: libvips/foreign/jpeg2vips.c:718 msgid "unknown JFIF resolution unit" msgstr "unbekannte JFIF-Auflösungseinheit" #: libvips/foreign/fits.c:240 msgid "dimensions above 3 must be size 1" msgstr "Dimensionen größer drei müssen die Größe eins haben" #: libvips/foreign/fits.c:256 #, c-format msgid "bad number of axis %d" msgstr "falsche Achsenanzahl %d" #: libvips/foreign/fits.c:272 #, c-format msgid "unsupported bitpix %d\n" msgstr "nicht unterstützte »bitpix« %d\n" #: libvips/foreign/fits.c:576 libvips/iofuncs/vips.c:171 #, c-format msgid "unable to write to \"%s\"" msgstr "auf »%s« kann nicht geschrieben werden" #: libvips/foreign/fits.c:637 #, c-format msgid "unsupported BandFmt %d\n" msgstr "nicht unterstütztes BandFmt %d\n" #: libvips/foreign/csvsave.c:112 msgid "save image to csv file" msgstr "Bild in CSV-Datei speichern" #: libvips/foreign/csvsave.c:128 libvips/foreign/csvload.c:160 msgid "Separator" msgstr "Trenner" #: libvips/foreign/csvsave.c:129 msgid "Separator characters" msgstr "Trennzeichen" #: libvips/foreign/ppm.c:109 msgid "bad int" msgstr "falsche Ganzzahl" #: libvips/foreign/ppm.c:121 msgid "bad float" msgstr "falsche Fließkommazahl" #: libvips/foreign/ppm.c:172 msgid "bad magic number" msgstr "falsche magische Zahl" #: libvips/foreign/ppm.c:222 msgid "not whitespace before start of binary data" msgstr "kein Leerraum vor dem Start der binären Daten" #: libvips/foreign/ppm.c:599 libvips/foreign/ppm.c:611 msgid "write error ... disc full?" msgstr "Schreibfehler … Platte voll?" #: libvips/foreign/ppm.c:716 msgid "binary >8 bit images must be float" msgstr "binäre Bilder >8 Bit müssen aus Fließkommazahlen bestehen" #: libvips/foreign/vips2tiff.c:270 #, c-format msgid "unable to open \"%s\" for output" msgstr "»%s« kann nicht zur Ausgabe geöffnet werden" #: libvips/foreign/vips2tiff.c:692 msgid "layer buffer exhausted -- try making TIFF output tiles smaller" msgstr "" "Ebenenpuffer aufgebraucht – versuchen Sie die TIFF-Ausgabekacheln zu " "verkleinern" #: libvips/foreign/vips2tiff.c:922 msgid "TIFF write tile failed" msgstr "Schreiben des TIFF-Bildes fehlgeschlagen" #: libvips/foreign/vips2tiff.c:998 msgid "internal error #9876345" msgstr "interner Fehler #9876345" #: libvips/foreign/vips2tiff.c:1251 msgid "tile size not a multiple of 16" msgstr "Bildgröße kein Vielfaches von 16" #: libvips/foreign/vips2tiff.c:1257 msgid "can't have strip pyramid -- enabling tiling" msgstr "" "nicht ummantelte Pyramide nicht möglich – Zerteilung wird eingeschaltet" #: libvips/foreign/vips2tiff.c:1268 msgid "can only pyramid LABQ and non-complex images" msgstr "" "nur LABQ und nicht-komplexe Bilder können pyramidenartig verwendet werden" #: libvips/foreign/vips2tiff.c:1285 msgid "can't have 1-bit JPEG -- disabling JPEG" msgstr "1-Bit-JPEG nicht möglich – JPEG wird ausgeschaltet" #: libvips/foreign/vips2tiff.c:1463 msgid "unsigned 8-bit int, 16-bit int, and 32-bit float only" msgstr "nur vorzeichenlose 8-Bit-Ganzzahl und 32-Bit-Fließkommazahl" #: libvips/foreign/vips2tiff.c:1470 msgid "1 to 5 bands only" msgstr "nur 1 bis 5 Bänder" #: libvips/foreign/radiance.c:885 # http://radsite.lbl.gov/radiance/refer/Notes/picture_format.html msgid "error reading radiance header" msgstr "Fehler beim Lesen der Radiance-Kopfzeilen" #: libvips/foreign/csvload.c:121 msgid "load csv from file" msgstr "CSV aus Datei laden" #: libvips/foreign/csvload.c:139 msgid "Skip" msgstr "überspringen" #: libvips/foreign/csvload.c:140 msgid "Skip this many lines at the start of the file" msgstr "so viele Zeilen ab dem Dateianfang überspringen" #: libvips/foreign/csvload.c:146 msgid "Lines" msgstr "Zeilen" #: libvips/foreign/csvload.c:147 msgid "Read this many lines from the file" msgstr "so viele Zeilen aus der Datei lesen" #: libvips/foreign/csvload.c:153 msgid "Whitespace" msgstr "Leerraum" #: libvips/foreign/csvload.c:154 msgid "Set of whitespace characters" msgstr "Satz von Leerraumzeichen" #: libvips/foreign/csvload.c:161 msgid "Set of separator characters" msgstr "Satz von Trennzeichen" #: libvips/foreign/pngsave.c:95 msgid "save png" msgstr "PNG speichern" #: libvips/foreign/pngsave.c:104 msgid "Compression factor" msgstr "Komprimierungsfaktor" #: libvips/foreign/pngsave.c:110 msgid "Interlace" msgstr "Zeilensprung" #: libvips/foreign/pngsave.c:111 msgid "Interlace image" msgstr "Zeilensprungbild" #: libvips/foreign/pngsave.c:162 msgid "save image to png file" msgstr "Bild in PNG-Datei speichern" #: libvips/foreign/pngsave.c:224 msgid "save image to png buffer" msgstr "Bild in den PNG-Puffer speichern" #: libvips/foreign/foreign.c:384 msgid "load and save image files" msgstr "Bilddateien laden und speichern" #: libvips/foreign/foreign.c:525 libvips/mosaicing/im_remosaic.c:76 #, c-format msgid "file \"%s\" not found" msgstr "Datei »%s« nicht gefunden" #: libvips/foreign/foreign.c:534 libvips/foreign/foreign.c:1022 #, c-format msgid "\"%s\" is not a known file format" msgstr "»%s« ist kein bekanntes Dateiformat" #: libvips/foreign/foreign.c:740 msgid "images do not match" msgstr "Bilder passen nicht zusammen" #: libvips/foreign/foreign.c:826 msgid "" "VIPS_FOREIGN_PARTIAL and VIPS_FOREIGN_SEQUENTIAL both set -- using SEQUENTIAL" msgstr "" "sowohl VIPS_FOREIGN_PARTIAL als auch VIPS_FOREIGN_SEQUENTIAL setzen – " "verwenden Sie SEQUENTIAL" #: libvips/foreign/foreign.c:894 msgid "file loaders" msgstr "Dateilader" #: libvips/foreign/foreign.c:903 msgid "Flags" msgstr "Schalter" #: libvips/foreign/foreign.c:904 msgid "Flags for this file" msgstr "Schalter für diese Datei" #: libvips/foreign/foreign.c:910 msgid "Disc" msgstr "Platte" #: libvips/foreign/foreign.c:911 msgid "Open to disc" msgstr "offen zur Platte" #: libvips/foreign/foreign.c:917 msgid "Sequential" msgstr "sequenziell" #: libvips/foreign/foreign.c:918 msgid "Sequential read only" msgstr "sequenziell nur mit Lesezugriff" #: libvips/foreign/foreign.c:1370 msgid "file savers" msgstr "Dateispeicherer" #: libvips/foreign/foreign.c:1380 msgid "Image to save" msgstr "zu speicherndes Bild" #: libvips/freq_filt/im_freq_mask.c:108 msgid "mask sizes power of 2 only" msgstr "Maskengröße nur Potenzen von 2" #: libvips/freq_filt/im_freq_mask.c:155 msgid "unimplemented mask type" msgstr "nicht implementierter Maskentyp" #: libvips/freq_filt/fmaskcir.c:158 libvips/freq_filt/fmaskcir.c:303 #: libvips/freq_filt/fmaskcir.c:394 libvips/freq_filt/fmaskcir.c:476 #: libvips/freq_filt/fmaskcir.c:556 msgid "bad sizes" msgstr "falsche Größen" #: libvips/freq_filt/fmaskcir.c:172 libvips/freq_filt/fmaskcir.c:228 #: libvips/freq_filt/fmaskcir.c:242 libvips/freq_filt/fmaskcir.c:317 #: libvips/freq_filt/fmaskcir.c:321 libvips/freq_filt/fmaskcir.c:408 #: libvips/freq_filt/fmaskcir.c:412 libvips/freq_filt/fmaskcir.c:570 #: libvips/freq_filt/fmaskcir.c:574 libvips/freq_filt/fmask4th.c:120 #: libvips/freq_filt/fmask4th.c:129 libvips/freq_filt/fmask4th.c:163 #: libvips/freq_filt/fmask4th.c:172 libvips/freq_filt/fmask4th.c:205 #: libvips/freq_filt/fmask4th.c:214 libvips/freq_filt/fmask4th.c:252 #: libvips/freq_filt/fmask4th.c:261 libvips/freq_filt/fmask4th.c:292 #: libvips/freq_filt/fmask4th.c:301 libvips/freq_filt/fmask4th.c:333 #: libvips/freq_filt/fmask4th.c:342 libvips/freq_filt/fmask4th.c:373 #: libvips/freq_filt/fmask4th.c:387 libvips/freq_filt/fmask4th.c:423 #: libvips/freq_filt/fmask4th.c:437 libvips/freq_filt/fmask4th.c:473 #: libvips/freq_filt/fmask4th.c:487 libvips/freq_filt/fmask4th.c:527 #: libvips/freq_filt/fmask4th.c:541 libvips/freq_filt/fmask4th.c:578 #: libvips/freq_filt/fmask4th.c:592 libvips/freq_filt/fmask4th.c:629 #: libvips/freq_filt/fmask4th.c:643 libvips/freq_filt/fmask4th.c:697 msgid "bad args" msgstr "falsche Argumente" #: libvips/freq_filt/fmaskcir.c:490 msgid "bad args (f)" msgstr "falsche Argumente (f)" #: libvips/freq_filt/fmaskcir.c:494 msgid "bad args (ac)" msgstr "falsche Argumente (ac)" #: libvips/freq_filt/fmaskcir.c:655 libvips/freq_filt/fmask4th.c:791 msgid "unimplemented mask" msgstr "nicht implementierte Maske" #: libvips/freq_filt/im_fractsurf.c:72 msgid "dimension should be in (2,3)" msgstr "Dimension sollte in (2,3) liegen" #: libvips/freq_filt/im_invfft.c:105 libvips/freq_filt/im_invfftr.c:124 #: libvips/freq_filt/im_fwfft.c:125 libvips/freq_filt/im_fwfft.c:241 msgid "unable to create transform plan" msgstr "Umwandlungsplan kann nicht erstellt werden" #: libvips/freq_filt/im_invfft.c:130 libvips/freq_filt/im_invfftr.c:145 #: libvips/freq_filt/im_fwfft.c:301 msgid "vips configured without FFT support" msgstr "VIPS wurde ohne FFT-Unterstützung konfiguriert" #: libvips/histograms_lut/im_stdif.c:186 #: libvips/histograms_lut/im_lhisteq.c:159 msgid "window too large" msgstr "Fenster zu groß" #: libvips/histograms_lut/im_stdif.c:191 #: libvips/histograms_lut/im_lhisteq.c:164 msgid "window too small" msgstr "Fenster zu klein" #: libvips/histograms_lut/im_histnD.c:227 #, c-format msgid " bins out of range [1,%d]" msgstr " »bins« außerhalb des Bereichs [1,%d]" #: libvips/histograms_lut/im_identity.c:139 libvips/other/im_grey.c:101 #: libvips/other/im_make_xy.c:95 msgid "bad size" msgstr "falsche Größe" #: libvips/histograms_lut/im_buildlut.c:120 msgid "x value not an int" msgstr "x-Wert keine Ganzzahl" #: libvips/histograms_lut/im_buildlut.c:133 msgid "x range too small" msgstr "x-Bereich zu klein" #: libvips/histograms_lut/im_buildlut.c:278 msgid "bad input matrix size" msgstr "falsche Eingabematrix-Größe" #: libvips/histograms_lut/tone.c:194 msgid "bad in_max, out_max parameters" msgstr "falsche »in_max«-, »out_max«-Parameter" #: libvips/histograms_lut/tone.c:199 msgid "bad Lb, Lw parameters" msgstr "falsche »Lb«-, »Lw«-Parameter" #: libvips/histograms_lut/tone.c:204 msgid "Ps not in range [0.0,1.0]" msgstr "»Ps« nicht im Bereich [0.0,1.0]" #: libvips/histograms_lut/tone.c:209 msgid "Pm not in range [0.0,1.0]" msgstr "»Pm« nicht im Bereich [0.0,1.0]" #: libvips/histograms_lut/tone.c:214 msgid "Ph not in range [0.0,1.0]" msgstr "»Ph« nicht im Bereich [0.0,1.0]" #: libvips/histograms_lut/tone.c:219 msgid "S not in range [-30,+30]" msgstr "»S« nicht im Bereich [-30,+30]" #: libvips/histograms_lut/tone.c:224 msgid "M not in range [-30,+30]" msgstr "»M« nicht im Bereich [-30,+30]" #: libvips/histograms_lut/tone.c:229 msgid "H not in range [-30,+30]" msgstr "»H« nicht im Bereich [-30,+30]" #: libvips/histograms_lut/im_invertlut.c:132 msgid "element out of range [0,1]" msgstr "Element außerhalb des Bereichs [0,1]" #: libvips/histograms_lut/im_invertlut.c:287 msgid "bad input matrix" msgstr "falsche Eingabematrix" #: libvips/histograms_lut/im_invertlut.c:292 msgid "bad lut_size" msgstr "falsche »lut_size«" #: libvips/histograms_lut/im_maplut.c:97 #, c-format msgid "%d overflows detected" msgstr "%d Überläufe entdeckt" #: libvips/inplace/im_draw_line.c:389 msgid "mask image not 1 band 8 bit uncoded" msgstr "Maskenbild nicht 8-Bit-kodiert mit einem Band" #: libvips/inplace/im_draw_line.c:395 msgid "ink image does not match in image" msgstr "»ink«-Bild passt nicht in das Bild" #: libvips/inplace/im_draw_line.c:399 msgid "ink image not 1x1 pixels" msgstr "»ink«-Bild nicht 1x1 Bildpunkte" #: libvips/iofuncs/sink.c:105 #, c-format msgid "stop function failed for image \"%s\"" msgstr "»stop«-Funktion für Bild »%s« fehlgeschlagen" #: libvips/iofuncs/sink.c:142 #, c-format msgid "start function failed for image \"%s\"" msgstr "»start«-Funktion für Bild »%s« fehlgeschlagen" #: libvips/iofuncs/sink.c:175 msgid "per-thread state for sink" msgstr "Status pro Thread für »sink«" #: libvips/iofuncs/memory.c:231 msgid "vips_free: too many frees" msgstr "vips_free: zu viele Frees" #: libvips/iofuncs/memory.c:235 msgid "vips_free: too much free" msgstr "vips_free: zu viel frei" #: libvips/iofuncs/memory.c:295 libvips/iofuncs/memory.c:298 #, c-format msgid "out of memory --- size == %dMB" msgstr "Hauptspeicher reicht nicht aus – Größe == %dMB" #: libvips/iofuncs/vips.c:286 #, c-format msgid "\"%s\" is not a VIPS image" msgstr "»%s« ist kein VIPS-Bild" #: libvips/iofuncs/vips.c:374 msgid "unable to read history" msgstr "Verlauf kann nicht gelesen werden" #: libvips/iofuncs/vips.c:407 msgid "more than a 10 megabytes of XML? sufferin' succotash!" msgstr "mehr als 10 Megabyte XML? Leidende Succotash!" #: libvips/iofuncs/vips.c:455 msgid "incorrect namespace in XML" msgstr "falscher Namensraum in XML" #: libvips/iofuncs/vips.c:579 msgid "error transforming from save format" msgstr "Fehler beim Umwandeln vom gespeicherten Format" #: libvips/iofuncs/vips.c:680 #, c-format msgid "unable to set property \"%s\" to value \"%s\"." msgstr "Eigenschaft »%s« kann nicht auf Wert »%s« gesetzt werden." #: libvips/iofuncs/vips.c:728 msgid "error transforming to save format" msgstr "Fehler beim Umwandeln in das zu speichernde Format" #: libvips/iofuncs/vips.c:776 libvips/iofuncs/vips.c:973 #: libvips/iofuncs/window.c:237 msgid "file has been truncated" msgstr "Datei wurde gekürzt" #: libvips/iofuncs/vips.c:890 libvips/iofuncs/vips.c:899 #: libvips/iofuncs/vips.c:922 msgid "xml save error" msgstr "XML-Fehler beim Speichern" #: libvips/iofuncs/vips.c:959 #, c-format msgid "unable to read header for \"%s\"" msgstr "Kopfdaten für »%s« können nicht gelesen werden" #: libvips/iofuncs/vips.c:972 libvips/iofuncs/window.c:236 #, c-format msgid "unable to read data for \"%s\", %s" msgstr "Daten für »%s« können nicht gelesen werden, %s" #: libvips/iofuncs/vips.c:984 #, c-format msgid "error reading XML: %s" msgstr "Fehler beim Lesen von XML: %s" #: libvips/iofuncs/generate.c:343 libvips/iofuncs/header.c:611 msgid "too many images" msgstr "zu viele Bilder" #: libvips/iofuncs/generate.c:606 msgid "demand hint not set" msgstr "Hinweisanfrage nicht gesetzt" #: libvips/iofuncs/generate.c:625 libvips/iofuncs/generate.c:650 msgid "generate() called twice" msgstr "generate() zweimal aufgerufen" #: libvips/iofuncs/generate.c:682 libvips/iofuncs/image.c:1873 #, c-format msgid "unable to output to a %s image" msgstr "es kann nicht zu einem %s-Bild ausgegeben werden" #: libvips/iofuncs/region.c:212 #, c-format msgid "start function failed for image %s" msgstr "Startfunktion für Bild %s fehlgeschlagen" #: libvips/iofuncs/region.c:528 libvips/iofuncs/region.c:598 #: libvips/iofuncs/region.c:745 libvips/iofuncs/region.c:1241 msgid "valid clipped to nothing" msgstr "gültig an nichts angeklammert" #: libvips/iofuncs/region.c:642 msgid "bad image type" msgstr "falscher Bildtyp" #: libvips/iofuncs/region.c:687 msgid "no pixel data on attached image" msgstr "keine Bildpunktdaten in angehängtem Bild" #: libvips/iofuncs/region.c:693 msgid "images do not match in pixel size" msgstr "Bilder passen in der Bildpunktgröße nicht zusammen" #: libvips/iofuncs/region.c:726 libvips/iofuncs/region.c:1223 msgid "dest too small" msgstr "Ziel zu klein" #: libvips/iofuncs/region.c:813 msgid "bad position" msgstr "falsche Position" #: libvips/iofuncs/region.c:1102 libvips/iofuncs/region.c:1294 #, c-format msgid "unable to input from a %s image" msgstr "Eingabe von einem %s-Bild nicht möglich" #: libvips/iofuncs/region.c:1126 msgid "incomplete header" msgstr "unvollständige Kopfzeilen" #: libvips/iofuncs/region.c:1197 msgid "inappropriate region type" msgstr "Ungeeigneter Regionstyp" #: libvips/iofuncs/init.c:366 msgid "evaluate with N concurrent threads" msgstr "mit N gleichzeitigen Threads auswerten" #: libvips/iofuncs/init.c:369 msgid "set tile width to N (DEBUG)" msgstr "Bildbreite auf N setzen (DEBUG)" #: libvips/iofuncs/init.c:372 msgid "set tile height to N (DEBUG)" msgstr "Bildhöhe auf N setzen (DEBUG)" #: libvips/iofuncs/init.c:375 msgid "set thinstrip height to N (DEBUG)" msgstr "»thinstrip«-Höhe auf N setzen (DEBUG)" #: libvips/iofuncs/init.c:378 msgid "set fatstrip height to N (DEBUG)" msgstr "»fatstrip«-Höhe auf N setzen (DEBUG)" #: libvips/iofuncs/init.c:381 msgid "show progress feedback" msgstr "Fortschrittsrückmeldung anzeigen" #: libvips/iofuncs/init.c:384 msgid "leak-check on exit" msgstr "Lückenprüfung beim Beenden" #: libvips/iofuncs/init.c:387 msgid "images larger than N are decompressed to disc" msgstr "Bilder, die größer als N sind, werden auf die Platte dekomprimiert" #: libvips/iofuncs/init.c:390 msgid "disable vectorised versions of operations" msgstr "vektorgesteuerte Versionen von Transaktionen deaktivieren" #: libvips/iofuncs/init.c:393 msgid "cache at most N operations" msgstr "höchstens N Transaktionen zwischenspeichern" #: libvips/iofuncs/init.c:396 msgid "cache at most N bytes in memory" msgstr "höchstens N Byte zwischenspeichern" #: libvips/iofuncs/init.c:399 msgid "allow at most N open files" msgstr "höchstens N offene Dateien erlauben" #: libvips/iofuncs/init.c:402 msgid "trace operation cache" msgstr "Transaktionszwischenspeicher aufzeichnen" #: libvips/iofuncs/init.c:405 msgid "dump operation cache on exit" msgstr "Transaktionszwischenspeicher beim Beenden ausgeben" #: libvips/iofuncs/init.c:428 msgid "VIPS Options" msgstr "VIPS-Optionen" #: libvips/iofuncs/init.c:428 msgid "Show VIPS options" msgstr "VIPS-Optionen anzeigen" #: libvips/iofuncs/image.c:293 msgid "unable to close fd" msgstr "»fd« kann nicht geschlossen werden" #: libvips/iofuncs/image.c:373 #, c-format msgid "%dx%d %s, %d band, %s" msgid_plural "%dx%d %s, %d bands, %s" msgstr[0] "%dx%d %s, %d Band, %s" msgstr[1] "%dx%d %s, %d Bänder, %s" #: libvips/iofuncs/image.c:403 #, c-format msgid " %s, %d band, %s" msgid_plural " %s, %d bands, %s" msgstr[0] " %s, %d band, %s" msgstr[1] " %s, %d Bänder, %s" #: libvips/iofuncs/image.c:529 #, c-format msgid "%s %s: %d threads, %d x %d tiles, groups of %d scanlines" msgstr "%s %s: %d Threads, %d x %d Kacheln, Gruppen von %d Scan-Zeilen" #: libvips/iofuncs/image.c:542 #, c-format msgid "%s %s: %d%% complete" msgstr "%s %s: %d%% komplett" #. Spaces at end help to erase the %complete message we overwrite. #. #: libvips/iofuncs/image.c:559 #, c-format msgid "%s %s: done in %ds \n" msgstr "%s %s: Erledigt in %ds \n" #: libvips/iofuncs/image.c:738 #, c-format msgid "unable to open \"%s\", file too short" msgstr "»%s« kann nicht geöffnet werden, Datei zu klein" #: libvips/iofuncs/image.c:748 #, c-format msgid "%s is longer than expected" msgstr "%s ist länger als erwartet" #: libvips/iofuncs/image.c:765 #, c-format msgid "bad mode \"%s\"" msgstr "falscher Modus »%s«" #: libvips/iofuncs/image.c:820 msgid "image class" msgstr "Bildklasse" #: libvips/iofuncs/image.c:916 msgid "Image filename" msgstr "Bilddateiname" #: libvips/iofuncs/image.c:922 msgid "Mode" msgstr "Modus" #: libvips/iofuncs/image.c:923 msgid "Open mode" msgstr "Öffnen-Modus" #: libvips/iofuncs/image.c:929 msgid "Kill" msgstr "töten" #: libvips/iofuncs/image.c:930 msgid "Block evaluation on this image" msgstr "Blockauswertung dieses Bildes" #: libvips/iofuncs/image.c:936 msgid "Demand style" msgstr "Nachfragestil" #: libvips/iofuncs/image.c:937 msgid "Preferred demand style for this image" msgstr "für dieses Bild bevorzugter Nachfragestil" #: libvips/iofuncs/image.c:950 msgid "Foreign buffer" msgstr "Fremdpuffer" #: libvips/iofuncs/image.c:951 msgid "Pointer to foreign pixels" msgstr "Puffer für fremde Bildpunkte" #: libvips/iofuncs/image.c:1215 #, c-format msgid "killed for image \"%s\"" msgstr "für Bild »%s« abgeschossen" #: libvips/iofuncs/image.c:1815 msgid "bad image descriptor" msgstr "falscher Bild-Deskriptor" #: libvips/iofuncs/image.c:1917 #, c-format msgid "auto-rewind for %s failed" msgstr "automatischer Rücklauf für %s fehlgeschlagen" #: libvips/iofuncs/image.c:1973 libvips/iofuncs/image.c:2168 #: libvips/iofuncs/image.c:2185 msgid "no image data" msgstr "keine Bilddaten" #: libvips/iofuncs/image.c:2041 libvips/iofuncs/image.c:2208 msgid "image not readable" msgstr "Bild nicht lesbar" #: libvips/iofuncs/image.c:2062 libvips/iofuncs/image.c:2238 #: libvips/iofuncs/image.c:2247 msgid "image already written" msgstr "Bild bereits geschrieben" #: libvips/iofuncs/image.c:2086 libvips/iofuncs/image.c:2259 msgid "image not writeable" msgstr "Bild nicht schreibbar" #: libvips/iofuncs/image.c:2132 msgid "bad file type" msgstr "falscher Dateityp" #: libvips/iofuncs/sinkscreen.c:185 msgid "per-thread state for render" msgstr "Status pro Thread für »render«" #: libvips/iofuncs/sinkscreen.c:537 libvips/iofuncs/sinkdisc.c:236 #: libvips/iofuncs/threadpool.c:606 msgid "unable to create thread" msgstr "Thread kann nicht erstellt werden" #: libvips/iofuncs/mapfile.c:130 libvips/iofuncs/mapfile.c:297 msgid "unable to CreateFileMapping" msgstr "»CreateFileMapping« nicht möglich" #: libvips/iofuncs/mapfile.c:138 libvips/iofuncs/mapfile.c:309 msgid "unable to MapViewOfFile" msgstr "»MapViewOfFile« nicht möglich" #: libvips/iofuncs/mapfile.c:178 msgid "unable to mmap" msgstr "»mmap« nicht möglich" #: libvips/iofuncs/mapfile.c:179 #, c-format msgid "" "map failed (%s), running very low on system resources, expect a crash soon" msgstr "" "»map« fehlgeschlagen (%s), die Systemressourcen werden knapp, ein Absturz " "steht bevor" #: libvips/iofuncs/mapfile.c:196 libvips/iofuncs/mapfile.c:303 msgid "unable to UnmapViewOfFile" msgstr "»UnmapViewOfFile« nicht möglich" #: libvips/iofuncs/mapfile.c:202 msgid "unable to munmap file" msgstr "»munmap« der Datei nicht möglich" #: libvips/iofuncs/mapfile.c:224 msgid "file is less than 64 bytes" msgstr "Datei ist weniger als 64 Byte groß" #: libvips/iofuncs/mapfile.c:229 libvips/iofuncs/mapfile.c:263 msgid "unable to get file status" msgstr "Dateistatus kann nicht abgefragt werden" #: libvips/iofuncs/mapfile.c:235 msgid "not a regular file" msgstr "keine reguläre Datei" #: libvips/iofuncs/mapfile.c:269 msgid "unable to read data" msgstr "Daten können nicht gelesen werden" #: libvips/iofuncs/mapfile.c:329 #, c-format msgid "unable to mmap: \"%s\" - %s" msgstr "»mmap« nicht möglich: \"%s\" - %s" #: libvips/iofuncs/mapfile.c:339 #, c-format msgid "unable to mmap \"%s\" to same address" msgstr "»mmap %s« zur gleichen Adresse nicht möglich" #: libvips/iofuncs/base64.c:170 msgid "too little data" msgstr "zu wenige Daten" #: libvips/iofuncs/object.c:148 #, c-format msgid "parameter %s not set" msgstr "Parameter %s nicht gesetzt" #: libvips/iofuncs/object.c:505 #, c-format msgid "no property named `%s'" msgstr "keine Eigenschaft namens »%s«" #: libvips/iofuncs/object.c:513 #, c-format msgid "no vips argument named `%s'" msgstr "kein VIPS-Argument namens »%s«" #: libvips/iofuncs/object.c:520 #, c-format msgid "argument `%s' has no instance" msgstr "Argument »%s« hat keine Instanz" #: libvips/iofuncs/object.c:1248 libvips/iofuncs/operation.c:287 #: libvips/resample/interpolate.c:615 #, c-format msgid "class \"%s\" not found" msgstr "Klasse »%s« nicht gefunden" #: libvips/iofuncs/object.c:1297 msgid "base class" msgstr "Basisklasse" #: libvips/iofuncs/object.c:1311 msgid "Nickname" msgstr "Nickname" #: libvips/iofuncs/object.c:1312 msgid "Class nickname" msgstr "Klassen-Nickname" #: libvips/iofuncs/object.c:1318 msgid "Description" msgstr "Beschreibung" #: libvips/iofuncs/object.c:1319 msgid "Class description" msgstr "Klassenbeschreibung" #: libvips/iofuncs/object.c:1509 #, c-format msgid "enum '%s' has no member '%s'" msgstr "Aufzählung »%s« hat keinen Bestandteil »%s«" #: libvips/iofuncs/object.c:1769 #, c-format msgid "unable to set '%s'" msgstr "»%s« kann nicht gesetzt werden" #: libvips/iofuncs/object.c:1777 msgid "not , or ) after parameter" msgstr "kein »,« oder »)« nach Parameter" #: libvips/iofuncs/object.c:1784 msgid "extra tokens after ')'" msgstr "keine zusätzlichen Token nach »)«" #. File length unit. #. #: libvips/iofuncs/buf.c:520 msgid "bytes" msgstr "Byte" #. Kilo byte unit. #. #: libvips/iofuncs/buf.c:524 msgid "KB" msgstr "KB" #. Mega byte unit. #. #: libvips/iofuncs/buf.c:528 msgid "MB" msgstr "MB" #. Giga byte unit. #. #: libvips/iofuncs/buf.c:532 msgid "GB" msgstr "GB" #. Tera byte unit. #. #: libvips/iofuncs/buf.c:536 msgid "TB" msgstr "TB" #: libvips/iofuncs/util.c:639 msgid "unable to get file stats" msgstr "Dateistatus kann nicht abgefragt werden" #: libvips/iofuncs/util.c:656 libvips/iofuncs/sinkdisc.c:262 msgid "write failed" msgstr "Schreiben fehlgeschlagen" #: libvips/iofuncs/util.c:720 #, c-format msgid "unable to open file \"%s\" for reading" msgstr "Datei »%s« kann nicht zum Lesen geöffnet werden" #: libvips/iofuncs/util.c:742 #, c-format msgid "unable to open file \"%s\" for writing" msgstr "Datei »%s« kann nicht zum Schreiben geöffnet werden" #: libvips/iofuncs/util.c:767 #, c-format msgid "\"%s\" too long" msgstr "»%s« zu lang" #: libvips/iofuncs/util.c:784 msgid "out of memory" msgstr "Hauptspeicher reicht nicht aus" #: libvips/iofuncs/util.c:810 #, c-format msgid "error reading from file \"%s\"" msgstr "Fehler beim Lesen von Datei »%s«" #: libvips/iofuncs/util.c:857 #, c-format msgid "write error (%zd out of %zd blocks written) ... disc full?" msgstr "Schreibfehler (%zd aus %zd Blöcken geschrieben) … Platte voll?" #: libvips/iofuncs/util.c:1106 libvips/iofuncs/util.c:1113 msgid "unable to truncate" msgstr "kann nicht gekürzt werden" #: libvips/iofuncs/util.c:1297 msgid "unexpected end of string" msgstr "Unerwartetes Ende der Zeichenkette" #: libvips/iofuncs/util.c:1315 #, c-format msgid "expected %s, saw %s" msgstr "%s erwartet, %s gesehen" #: libvips/iofuncs/util.c:1485 #, c-format msgid "unable to make temporary file %s" msgstr "temporäre Datei %s kann nicht erstellt werden" #: libvips/iofuncs/operation.c:97 msgid "input" msgstr "Eingabe" #: libvips/iofuncs/operation.c:97 msgid "output" msgstr "Ausgabe" #: libvips/iofuncs/operation.c:246 msgid "operations" msgstr "Transaktionen" #: libvips/iofuncs/operation.c:273 msgid "usage:" msgstr "Aufruf:" #: libvips/iofuncs/operation.c:699 #, c-format msgid "unknown argument '%s'" msgstr "unbekanntes Argument »%s«" #: libvips/iofuncs/operation.c:810 msgid "too few arguments" msgstr "zu wenige Argumente" #: libvips/iofuncs/operation.c:931 msgid "too many arguments" msgstr "zu viele Argumente" #: libvips/iofuncs/header.c:210 #, c-format msgid "unknown band format %d" msgstr "unbekanntes Bandformat %d" #: libvips/iofuncs/header.c:781 #, c-format msgid "field \"%s\" not found" msgstr "Feld »%s« nicht gefunden" #: libvips/iofuncs/header.c:949 #, c-format msgid "field \"%s\" is of type %s, not %s" msgstr "Feld »%s« ist vom Typ %s, nicht %s" #: libvips/iofuncs/sinkmemory.c:108 msgid "per-thread state for sinkmemory" msgstr "Status pro Thread für »sinkmemory«" #: libvips/iofuncs/sinkdisc.c:121 msgid "per-thread state for sinkdisc" msgstr "Status pro Thread für »sinkdisc«" #: libvips/iofuncs/error.c:210 msgid "windows error" msgstr "Windows-Fehler" #: libvips/iofuncs/error.c:219 msgid "unix error" msgstr "Unix-Fehler" #: libvips/iofuncs/error.c:304 libvips/iofuncs/error.c:305 #: libvips/iofuncs/error.c:354 libvips/iofuncs/error.c:355 #, c-format msgid "%s: " msgstr "%s: " #: libvips/iofuncs/error.c:304 msgid "vips diagnostic" msgstr "Vips-Diagnose" #: libvips/iofuncs/error.c:354 msgid "vips warning" msgstr "Vips-Warnung" #: libvips/iofuncs/error.c:438 msgid "image must be uncoded" msgstr "Bild muss unkodiert sein" #: libvips/iofuncs/error.c:466 msgid "image coding must be NONE or LABQ" msgstr "Bildkodierung muss NONE oder LABQ sein" #: libvips/iofuncs/error.c:494 msgid "unknown image coding" msgstr "unbekannte Bildkodierung" #: libvips/iofuncs/error.c:520 msgid "Radiance coding only" msgstr "Nur Radiance-Kodierung" #: libvips/iofuncs/error.c:546 msgid "LABQ coding only" msgstr "Nur LABQ-Kodierung" #: libvips/iofuncs/error.c:570 msgid "image must one band" msgstr "Bild muss ein Band haben" #: libvips/iofuncs/error.c:595 #, c-format msgid "image must have %d bands" msgstr "Bild muss %d Bänder haben" #: libvips/iofuncs/error.c:620 msgid "image must have one or three bands" msgstr "Bild muss ein oder drei Bänder haben" #: libvips/iofuncs/error.c:648 msgid "images must have the same number of bands, or one must be single-band" msgstr "" "Bilder müssen die gleiche Anzahl Bänder haben oder eines muss ein Band haben" #: libvips/iofuncs/error.c:675 #, c-format msgid "image must have 1 or %d bands" msgstr "Bild muss ein oder %d Bänder haben" #: libvips/iofuncs/error.c:699 msgid "image must be non-complex" msgstr "Bild muss nicht-komplex sein" #: libvips/iofuncs/error.c:723 msgid "image must be complex" msgstr "Bild muss komplex sein" #: libvips/iofuncs/error.c:749 #, c-format msgid "image must be %s" msgstr "Bild muss %s sein" #: libvips/iofuncs/error.c:774 msgid "image must be integer" msgstr "Bild muss ganzzahlig sein" #: libvips/iofuncs/error.c:799 msgid "image must be unsigned integer" msgstr "Bild muss aus vorzeichenlosen Ganzzahlen bestehen" #: libvips/iofuncs/error.c:827 msgid "image must be 8- or 16-bit integer, signed or unsigned" msgstr "" "Bild muss aus 8- oder 16-Bit Ganzzahlen mit oder ohne Vorzeichen bestehen" #: libvips/iofuncs/error.c:854 msgid "image must be 8- or 16-bit unsigned integer" msgstr "Bild muss aus 8- oder 16-Bit vorzeichenlosen Ganzzahlen bestehen" #: libvips/iofuncs/error.c:880 msgid "image must be 8- or 16-bit unsigned integer, or float" msgstr "" "Bild muss aus 8- oder 16-Bit vorzeichenlosen Ganzzahlen oder " "Fließkommazahlen bestehen" #: libvips/iofuncs/error.c:908 msgid "image must be unsigned int or float" msgstr "" "Bild muss aus 8- oder 16-Bit vorzeichenlosen Ganz- oder Fließkommazahlen " "bestehen" #: libvips/iofuncs/error.c:933 msgid "images must match in size" msgstr "Bilder müssen in der Größe passen" #: libvips/iofuncs/error.c:959 msgid "images must have the same number of bands" msgstr "Bilder müssen die gleiche Anzahl Bänder haben" #: libvips/iofuncs/error.c:1013 msgid "images must have the same band format" msgstr "Bilder müssen das gleiche Bandformat haben" #: libvips/iofuncs/error.c:1039 msgid "images must have the same coding" msgstr "Bilder müssen die gleiche Kodierung haben" #: libvips/iofuncs/error.c:1064 #, c-format msgid "vector must have 1 or %d elements" msgstr "Vektor muss 1 oder %d Elemente haben" #: libvips/iofuncs/error.c:1089 msgid "histograms must have width or height 1" msgstr "Histogramme müssen eine Breite oder Höhe von eins haben" #: libvips/iofuncs/error.c:1094 msgid "histograms must have not have more than 65536 elements" msgstr "Histogramm dürfen nicht mehr als 65536 Elemente haben" #: libvips/iofuncs/error.c:1123 libvips/iofuncs/error.c:1151 msgid "nonsense mask parameters" msgstr "unsinnige Maskenparameter" #: libvips/iofuncs/error.c:1176 msgid "mask must be 1D" msgstr "Maske muss 1D sein" #: libvips/iofuncs/threadpool.c:217 #, c-format msgid "threads clipped to %d" msgstr "Threads an %d angeheftet" #: libvips/iofuncs/threadpool.c:281 msgid "per-thread state for vipsthreadpool" msgstr "Status pro Thread für »vipsthreadpool«" #: libvips/morphology/im_profile.c:104 msgid "dir not 0 or 1" msgstr "»dir« nicht 0 oder 1" #: libvips/morphology/morphology.c:311 #, c-format msgid "bad mask element (%d should be 0, 128 or 255)" msgstr "falsches Maskenelement (%d sollte 0, 128 oder 255 sein)" #: libvips/morphology/im_zerox.c:141 msgid "flag not -1 or 1" msgstr "Schalter nicht -1 oder 1" #: libvips/morphology/im_zerox.c:145 msgid "image too narrow" msgstr "Bild zu schmal" #: libvips/morphology/im_cntlines.c:81 msgid "flag should be 0 (horizontal) or 1 (vertical)" msgstr "Schalter sollte 0 (horizontal) oder 1 (vertikal) sein" #: libvips/morphology/im_rank.c:365 msgid "image too small for window" msgstr "Bild zu klein für Fenster" #: libvips/morphology/im_rank_image.c:303 msgid "zero input images!" msgstr "null Eingabebilder" #: libvips/morphology/im_rank_image.c:308 #, c-format msgid "index should be in range 0 - %d" msgstr "Index sollte im Bereich 0 - %d liegen" #: libvips/mosaicing/im_lrmerge.c:213 libvips/mosaicing/im_lrmerge.c:262 #: libvips/mosaicing/im_lrmerge.c:603 libvips/mosaicing/im_tbmerge.c:163 #: libvips/mosaicing/im_tbmerge.c:217 libvips/mosaicing/im_tbmerge.c:535 msgid "internal error" msgstr "interner Fehler" #: libvips/mosaicing/im_lrmerge.c:703 msgid "mwidth must be -1 or >= 0" msgstr "»mwidth« muss -1 oder >= 0 sein" #: libvips/mosaicing/im_lrmerge.c:732 msgid "no overlap" msgstr "kein Überlappen" #: libvips/mosaicing/im_lrmerge.c:803 libvips/mosaicing/im_tbmerge.c:634 #: libvips/resample/im_affine.c:469 msgid "unknown coding type" msgstr "unbekannter Kodierungstyp" #: libvips/mosaicing/im_lrmerge.c:820 libvips/mosaicing/im_tbmerge.c:652 msgid "too much overlap" msgstr "zu viel Überlappung" #: libvips/mosaicing/im_remosaic.c:104 #, c-format msgid "substitute image \"%s\" is not the same size as \"%s\"" msgstr "Bild zum Ersetzen »%s« hat nicht die gleiche Größe wie »%s«" #: libvips/mosaicing/im_tbmosaic.c:89 libvips/mosaicing/im_lrmosaic.c:113 msgid "bad area parameters" msgstr "falsche Bereichsparameter" #: libvips/mosaicing/im_tbmosaic.c:110 libvips/mosaicing/im_lrmosaic.c:134 msgid "overlap too small for search" msgstr "Überlappen zu klein für Suche" #: libvips/mosaicing/im_tbmosaic.c:143 libvips/mosaicing/im_lrmosaic.c:167 msgid "unknown Coding type" msgstr "unbekannter Kodierungstyp" #: libvips/mosaicing/im_chkpair.c:200 msgid "inputs incompatible" msgstr "Eingaben inkompatibel" #: libvips/mosaicing/im_chkpair.c:204 libvips/mosaicing/im_tbcalcon.c:102 msgid "help!" msgstr "Hilfe!" #: libvips/mosaicing/im_tbcalcon.c:116 msgid "overlap too small" msgstr "Überlappen zu schmal" #: libvips/mosaicing/global_balance.c:145 msgid "no matching '>'" msgstr "kein passendes »>«" #: libvips/mosaicing/global_balance.c:154 msgid "too many items" msgstr "zu viele Elemente" # Propogate a transform down a tree. If dirty is set, we've been here before, # so there is a doubling up of this node. If this is a leaf, then we have the # same leaf twice (which, in fact, we can cope with); if this is a node, we # have circularity. #: libvips/mosaicing/global_balance.c:448 msgid "circularity detected" msgstr "Zirkularität entdeckt" #: libvips/mosaicing/global_balance.c:482 #: libvips/mosaicing/global_balance.c:538 #, c-format msgid "image \"%s\" used twice as output" msgstr "Bild »%s« zweimal als Ausgabe benutzt" #: libvips/mosaicing/global_balance.c:587 msgid "bad number of args in join line" msgstr "falsche Anzahl von Argumenten in »join«-Zeile" #: libvips/mosaicing/global_balance.c:629 msgid "bad number of args in join1 line" msgstr "falsche Anzahl von Argumenten in »join1«-Zeile" #: libvips/mosaicing/global_balance.c:665 msgid "bad number of args in copy line" msgstr "falsche Anzahl von Argumenten in »copy«-Zeile" #: libvips/mosaicing/global_balance.c:723 msgid "" "mosaic root not found in desc file\n" "is this really a mosaiced image?" msgstr "" "Mosaik-Wurzel nicht in Beschreibungsdatei gefunden\n" "ist das wirklich ein Bild?" #: libvips/mosaicing/global_balance.c:734 msgid "more than one root" msgstr "mehr als eine Wurzel" #: libvips/mosaicing/global_balance.c:1053 msgid "empty overlap!" msgstr "leere Überlappung!" #: libvips/mosaicing/im_avgdxdy.c:64 msgid "no points to average" msgstr "keine Punkte zum Mitteln" #: libvips/mosaicing/im_lrcalcon.c:203 msgid "overlap too small for your search size" msgstr "Überlappen zu schmal für Ihre Suchgröße" #: libvips/mosaicing/im_lrcalcon.c:242 #, c-format msgid "found %d tie-points, need at least %d" msgstr "es wurden %d Verbindungspunkte gefunden, mindestens %d sind nötig" #: libvips/mosaicing/im_lrcalcon.c:287 msgid "not 1-band uchar image" msgstr "kein »uchar«-Bild mit einem Band" #: libvips/mosaicing/im_clinear.c:136 msgid "im_invmat failed" msgstr "»im_invmat« fehlgeschlagen" #: libvips/other/im_zone.c:80 msgid "size must be even and positive" msgstr "Größe muss gerade und positiv sein" #: libvips/other/im_sines.c:88 msgid "wrong sizes" msgstr "falsche Größen" #: libvips/other/im_sines.c:101 msgid "calloc failed" msgstr "»calloc« fehlgeschlagen" #: libvips/other/im_eye.c:83 msgid "factor should be in [1,0)" msgstr "Faktor sollte in [0,1) liegen" #: libvips/resample/im_affine.c:410 msgid "output coordinates out of range" msgstr "Ausgabekoordinaten außerhalb des Bereichs" #: libvips/resample/im_shrink.c:346 msgid "shrink factors should be >= 1" msgstr "Schrumpffaktoren sollten >=1 sein" #: libvips/resample/interpolate.c:180 msgid "VIPS interpolators" msgstr "VIPS-Interpolatoren" #: libvips/resample/interpolate.c:361 msgid "Nearest-neighbour interpolation" msgstr "Nächste-Nachbar-Interpolation" #: libvips/resample/interpolate.c:532 msgid "Bilinear interpolation" msgstr "Bilineare Interpolation" #: libvips/resample/im_rightshift_size.c:120 msgid "shift by zero: falling back to im_copy" msgstr "verschieben um Null: Rückfall auf »im_copy«" #: libvips/resample/im_rightshift_size.c:124 msgid "would result in zero size output image" msgstr "würde in einem Ausgabebild der Größe Null resultieren" #: libvips/resample/im_rightshift_size.c:132 msgid "image and band_fmt must match in sign" msgstr "Bild und Band-Fmt müssen im Kennzeichen zusammenpassen" #: libvips/video/im_video_test.c:51 msgid "error requested" msgstr "Fehler abgefragt" #: libvips/video/im_video_v4l1.c:241 msgid "no file descriptor" msgstr "kein Datei-Deskriptor" #: libvips/video/im_video_v4l1.c:246 #, c-format msgid "ioctl(0x%x) failed: %s" msgstr "ioctl(0x%x) fehlgeschlagen: %s" #: libvips/video/im_video_v4l1.c:295 #, c-format msgid "cannot open video device \"%s\"" msgstr "Videogerät »%s« kann nicht geöffnet werden" #: libvips/video/im_video_v4l1.c:303 msgid "cannot get video capability" msgstr "Videofähigkeit kann nicht abgefragt werden" #: libvips/video/im_video_v4l1.c:312 msgid "card cannot capture to memory" msgstr "Karte kann nicht in Speicher digitalisiert werden" #: libvips/video/im_video_v4l1.c:458 msgid "unable to map memory" msgstr "Speicher kann nicht abgebildet werden" #: libvips/video/im_video_v4l1.c:470 #, c-format msgid "channel not between 0 and %d" msgstr "Kanal nicht zwischen 0 und %d" #: libvips/video/im_video_v4l1.c:698 msgid "compiled without im_video_v4l1 support" msgstr "ohne »im_video_v4l1«-Unterstützung kompiliert" #: tools/edvips.c:82 msgid "tag file as big or little-endian" msgstr "Kennzeichendatei als Big- oder Little-Endian" #: tools/edvips.c:84 msgid "set width to N pixels" msgstr "Breite auf N Bildpunkte setzen" #: tools/edvips.c:86 msgid "set height to N pixels" msgstr "Höhe auf N Bildpunkte setzen" #: tools/edvips.c:88 msgid "set Bands to N" msgstr "Bänder auf N setzen" #: tools/edvips.c:90 msgid "set BandFmt to F (eg. uchar, float)" msgstr "»BandFmt« auf F setzen (z.B. uchar, float)" #: tools/edvips.c:92 msgid "set interpretation to I (eg. xyz)" msgstr "Interpretation aif I setzen (z.B. xyz)" #: tools/edvips.c:94 msgid "set Coding to C (eg. labq)" msgstr "Kodierung auf C setzen (z.B. labq)" #: tools/edvips.c:96 msgid "set Xres to R pixels/mm" msgstr "»Xres« auf R Bildpunkte/mm setzen" #: tools/edvips.c:98 msgid "set Yres to R pixels/mm" msgstr "»Yres« auf R Bildpunkte/mm setzen" #: tools/edvips.c:100 msgid "set Xoffset to N pixels" msgstr "»Xoffset« auf N Bildpunkte setzen" #: tools/edvips.c:102 msgid "set Yoffset to N pixels" msgstr "»Yoffset« auf N Bildpunkte setzen" #: tools/edvips.c:104 msgid "replace extension block with stdin" msgstr "Erweiterungsblock mit STDIN ersetzen" #: tools/edvips.c:106 msgid "set Xsize to N (deprecated, use width)" msgstr "»Xsize« auf N setzen (missbilligt, benutzen Sie »width«)" #: tools/edvips.c:108 msgid "set Ysize to N (deprecated, use height)" msgstr "»Ysize« auf N setzen (missbilligt, benutzen Sie »height«)" #: tools/edvips.c:110 msgid "set Type to T (deprecated, use interpretation)" msgstr "Typ auf N setzen (missbilligt, benutzen Sie »interpretation«" #: tools/edvips.c:121 #, c-format msgid "'%s' is not a positive integer" msgstr "»%s« ist keine positive Ganzzahl" #: tools/edvips.c:133 msgid "unable to start VIPS" msgstr "VIPS kann nicht gestartet werden" #: tools/edvips.c:138 msgid "vipsfile - edit vipsfile header" msgstr "»vipsfile« - »vipsfile«-Kopfzeilen bearbeiten" #: tools/edvips.c:150 #, c-format msgid "usage: %s [OPTION...] vipsfile\n" msgstr "Aufruf: %s [OPTION …] vipsfile\n" #: tools/edvips.c:157 #, c-format msgid "could not open image %s" msgstr "Bild %s konnte nicht geöffnet werden" #: tools/edvips.c:160 #, c-format msgid "could not read VIPS header for %s" msgstr "VIPS-Kopfzeilen für %s konnten nicht gelesen werden" #: tools/edvips.c:169 #, c-format msgid "bad endian-ness %s, should be 'big' or 'little'" msgstr "falsche Byte-Reihenfolge %s, sollte »big« oder »little« sein" #: tools/edvips.c:182 #, c-format msgid "bad format %s" msgstr "falsches Format %s" #: tools/edvips.c:190 #, c-format msgid "bad interpretation %s" msgstr "falsche Interpretation »%s« " #: tools/edvips.c:198 #, c-format msgid "bad coding %s" msgstr "falsche Kodierung %s" #: tools/edvips.c:211 #, c-format msgid "could not seek on %s" msgstr "auf %s konnte nicht gesucht werden" #: tools/edvips.c:214 #, c-format msgid "could not write to %s" msgstr "auf %s konnte nicht geschrieben werden" #: tools/edvips.c:221 msgid "could not get ext data" msgstr "zusätzliche Daten konnten nicht abgefragt werden" #: tools/edvips.c:230 msgid "could not set extension" msgstr "Erweiterung konnte nicht gesetzt werden" #: tools/find_mosaic.c:112 tools/find_mosaic.c:122 tools/find_mosaic.c:144 #: tools/find_mosaic.c:154 tools/find_mosaic.c:163 tools/find_mosaic.c:184 #: tools/find_mosaic.c:194 tools/find_mosaic.c:203 tools/mergeup.c:238 #: tools/mergeup.c:248 tools/mergeup.c:270 tools/mergeup.c:280 #: tools/mergeup.c:289 tools/mergeup.c:310 tools/mergeup.c:320 #: tools/mergeup.c:329 #, c-format msgid "bad file name format '%s'" msgstr "falsches Dateinamensformat »%s«" #: tools/header.c:85 msgid "show all fields" msgstr "alle Felder anzeigen" #: tools/header.c:87 msgid "" "print value of FIELD (\"getext\" reads extension block, \"Hist\" reads image " "history)" msgstr "" "Wert von FELD ausgeben (»getext« liest Erweiterungsblock, »Hist« liest " "Bildchronik)" #: tools/header.c:210 msgid "- print image header" msgstr "- Bild-Kopfzeilen ausgeben" #: tools/mergeup.c:381 msgid "allocation failure in mergeup" msgstr "Reservierung in »mergeup« gescheitert" #: tools/mergeup.c:391 msgid "Need more than one image" msgstr "Mehr als ein Bild benötigt" #: tools/vips.c:101 msgid "load PLUGIN" msgstr "ERWEITERUNG laden" #: tools/vips.c:102 msgid "PLUGIN" msgstr "ERWEITERUNG" #: tools/vips.c:104 msgid "print version" msgstr "Version ausgeben" #: tools/vips.c:147 #, c-format msgid "no package or function \"%s\"" msgstr "kein Paket oder Funktion »%s«" #: tools/vips.c:917 msgid "list classes|packages|all|package-name|operation-name" msgstr "classes|packages|all|package-name|operation-name aufführen" #: tools/vips.c:919 msgid "generate headers for C++ binding" msgstr "Header für C++-Anbindung erzeugen" #: tools/vips.c:921 msgid "generate bodies for C++ binding" msgstr "Rumpfdaten für C++-Anbindung erzeugen" #: tools/vips.c:923 msgid "generate links for vips/bin" msgstr "Verweise für VIPS/Bin erzeugen" #: tools/vips.c:1043 msgid "[ACTION] [OPTIONS] [PARAMETERS] - VIPS driver program" msgstr "[AKTION] [OPTIONEN] [PARAMETER] - VIPS-Treiberprogramm" #: tools/vips.c:1111 msgid "possible actions:\n" msgstr "mögliche Aktionen:\n" #: tools/vips.c:1116 msgid "execute named vips operation" msgstr "genannte VIPS-Transaktion ausführen" #: tools/vips.c:1118 #, c-format msgid "unknown action \"%s\"" msgstr "unbekannte Aktion »%s«" #: tools/vipsthumbnail.c:54 msgid "set thumbnail size to SIZE" msgstr "Miniaturansicht auf GRÖẞE setzen" #: tools/vipsthumbnail.c:55 msgid "SIZE" msgstr "GRÖẞE" #: tools/vipsthumbnail.c:57 msgid "set output to FORMAT" msgstr "Ausgabe auf FORMAT setzen" #: tools/vipsthumbnail.c:58 msgid "FORMAT" msgstr "FORMAT" #: tools/vipsthumbnail.c:60 msgid "resample with INTERPOLATOR" msgstr "neues Muster mit INTERPOLATOR erstellen" #: tools/vipsthumbnail.c:61 msgid "INTERPOLATOR" msgstr "INTERPOLATOR" #: tools/vipsthumbnail.c:63 msgid "don't sharpen thumbnail" msgstr "Miniaturansicht nicht schärfen" #: tools/vipsthumbnail.c:65 msgid "export with PROFILE" msgstr "mit PROFIL exportieren" #: tools/vipsthumbnail.c:66 tools/vipsthumbnail.c:69 msgid "PROFILE" msgstr "PROFIL" #: tools/vipsthumbnail.c:68 msgid "import untagged images with PROFILE" msgstr "nicht gekennzeichnetes Bild mit PROFIL importieren" #: tools/vipsthumbnail.c:71 msgid "don't delete profile from exported image" msgstr "Profil aus exportiertem Bild nicht löschen" #: tools/vipsthumbnail.c:73 msgid "verbose output" msgstr "detaillierte Ausgabe" #: tools/vipsthumbnail.c:412 msgid "- thumbnail generator" msgstr "- Miniaturansichten-Generator" #: libvips/resample/bicubic.cpp:430 msgid "Bicubic interpolation (Catmull-Rom)" msgstr "doppelt kubische Interpolation (Catmull-Rom)" #: libvips/resample/nohalo.cpp:1577 msgid "Edge sharpening resampler with halo reduction" msgstr "neues Kantenschärfungsmuster mit Halo-Reduzierung" #: libvips/resample/vsqbs.cpp:400 msgid "B-Splines with antialiasing smoothing" msgstr "B-Splines mit Kantenglättung" #: libvips/resample/lbb.cpp:861 msgid "Reduced halo bicubic" msgstr "doppelt kubische Halo-Reduzierung" libvips-8.15.1/po/en_GB.po000066400000000000000000004453431454007373500152330ustar00rootroot00000000000000# en_GB for vips # Copyright (C) 2017 # This file is distributed under the same license as the vips package. # John Cupitt , 2017. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: vips 8.5\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2017-02-22 13:13+0000\n" "PO-Revision-Date: \n" "Last-Translator: John Cupitt \n" "Language-Team: \n" "Language: en_GB\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: ../libvips/arithmetic/min.c:431 msgid "find image minimum" msgstr "" #: ../libvips/arithmetic/min.c:439 ../libvips/arithmetic/stats.c:420 #: ../libvips/arithmetic/deviate.c:221 ../libvips/arithmetic/max.c:438 #: ../libvips/arithmetic/hist_find_ndim.c:298 #: ../libvips/arithmetic/measure.c:210 ../libvips/arithmetic/hist_find.c:450 #: ../libvips/arithmetic/hough.c:185 ../libvips/arithmetic/arithmetic.c:639 #: ../libvips/arithmetic/avg.c:214 #: ../libvips/arithmetic/hist_find_indexed.c:391 ../libvips/colour/colour.c:427 #: ../libvips/colour/sRGB2scRGB.c:249 ../libvips/colour/scRGB2BW.c:243 #: ../libvips/colour/scRGB2sRGB.c:271 ../libvips/colour/colourspace.c:592 #: ../libvips/conversion/conversion.c:200 #: ../libvips/convolution/convolution.c:135 #: ../libvips/convolution/gaussblur.c:125 ../libvips/convolution/sharpen.c:319 #: ../libvips/convolution/correlation.c:163 ../libvips/create/create.c:101 #: ../libvips/foreign/foreign.c:984 ../libvips/freqfilt/freqfilt.c:104 #: ../libvips/histogram/hist_equal.c:114 ../libvips/histogram/stdif.c:300 #: ../libvips/histogram/histogram.c:232 ../libvips/histogram/hist_entropy.c:119 #: ../libvips/histogram/hist_norm.c:147 ../libvips/histogram/hist_plot.c:348 #: ../libvips/histogram/hist_local.c:364 ../libvips/histogram/maplut.c:700 #: ../libvips/iofuncs/system.c:284 ../libvips/morphology/morph.c:143 #: ../libvips/morphology/rank.c:413 ../libvips/mosaicing/merge.c:121 #: ../libvips/mosaicing/im_remosaic.c:170 #: ../libvips/mosaicing/global_balance.c:1777 ../libvips/mosaicing/mosaic.c:192 #: ../libvips/mosaicing/match.c:216 ../libvips/mosaicing/mosaic1.c:501 #: ../libvips/resample/resample.c:138 ../libvips/resample/thumbnail.c:520 msgid "Output" msgstr "" #: ../libvips/arithmetic/min.c:440 ../libvips/arithmetic/deviate.c:222 #: ../libvips/arithmetic/max.c:439 ../libvips/arithmetic/avg.c:215 #: ../libvips/histogram/hist_entropy.c:120 msgid "Output value" msgstr "" #: ../libvips/arithmetic/min.c:446 ../libvips/arithmetic/max.c:445 #: ../libvips/arithmetic/getpoint.c:153 ../libvips/conversion/embed.c:569 #: ../libvips/conversion/wrap.c:125 ../libvips/draw/draw_image.c:265 #: ../libvips/draw/draw_mask.c:329 ../libvips/draw/draw_flood.c:552 msgid "x" msgstr "" #: ../libvips/arithmetic/min.c:447 msgid "Horizontal position of minimum" msgstr "" #: ../libvips/arithmetic/min.c:453 ../libvips/arithmetic/max.c:452 #: ../libvips/arithmetic/getpoint.c:160 ../libvips/conversion/embed.c:576 #: ../libvips/conversion/wrap.c:132 ../libvips/draw/draw_image.c:272 #: ../libvips/draw/draw_mask.c:336 ../libvips/draw/draw_flood.c:559 msgid "y" msgstr "" #: ../libvips/arithmetic/min.c:454 msgid "Vertical position of minimum" msgstr "" #: ../libvips/arithmetic/min.c:460 ../libvips/arithmetic/max.c:459 #: ../libvips/create/invertlut.c:295 ../libvips/create/identity.c:158 msgid "Size" msgstr "" #: ../libvips/arithmetic/min.c:461 msgid "Number of minimum values to find" msgstr "" #: ../libvips/arithmetic/min.c:467 ../libvips/arithmetic/max.c:466 #: ../libvips/arithmetic/getpoint.c:146 msgid "Output array" msgstr "" #: ../libvips/arithmetic/min.c:468 ../libvips/arithmetic/max.c:467 #: ../libvips/arithmetic/getpoint.c:147 msgid "Array of output values" msgstr "" #: ../libvips/arithmetic/min.c:474 ../libvips/arithmetic/max.c:473 msgid "x array" msgstr "" #: ../libvips/arithmetic/min.c:475 ../libvips/arithmetic/max.c:474 msgid "Array of horizontal positions" msgstr "" #: ../libvips/arithmetic/min.c:481 ../libvips/arithmetic/max.c:480 msgid "y array" msgstr "" #: ../libvips/arithmetic/min.c:482 ../libvips/arithmetic/max.c:481 msgid "Array of vertical positions" msgstr "" #: ../libvips/arithmetic/sum.c:141 msgid "sum an array of images" msgstr "" #: ../libvips/arithmetic/stats.c:412 ../libvips/arithmetic/avg.c:206 msgid "find image average" msgstr "" #: ../libvips/arithmetic/stats.c:421 ../libvips/arithmetic/measure.c:211 msgid "Output array of statistics" msgstr "" #: ../libvips/arithmetic/project.c:322 msgid "find image projections" msgstr "" #: ../libvips/arithmetic/project.c:330 ../libvips/arithmetic/profile.c:300 msgid "Columns" msgstr "" #: ../libvips/arithmetic/project.c:331 msgid "Sums of columns" msgstr "" #: ../libvips/arithmetic/project.c:336 ../libvips/arithmetic/profile.c:306 msgid "Rows" msgstr "" #: ../libvips/arithmetic/project.c:337 msgid "Sums of rows" msgstr "" #: ../libvips/arithmetic/hough_line.c:135 msgid "find hough line transform" msgstr "" #: ../libvips/arithmetic/hough_line.c:142 ../libvips/arithmetic/measure.c:244 #: ../libvips/conversion/embed.c:583 ../libvips/conversion/copy.c:284 #: ../libvips/conversion/extract.c:219 ../libvips/create/xyz.c:193 #: ../libvips/create/logmat.c:208 ../libvips/create/worley.c:310 #: ../libvips/create/gaussnoise.c:172 ../libvips/create/perlin.c:297 #: ../libvips/create/point.c:143 ../libvips/create/fractsurf.c:102 #: ../libvips/create/text.c:297 ../libvips/create/black.c:129 #: ../libvips/draw/draw_flood.c:593 ../libvips/foreign/rawload.c:123 #: ../libvips/histogram/stdif.c:308 ../libvips/histogram/hist_local.c:370 #: ../libvips/iofuncs/image.c:1130 ../libvips/morphology/rank.c:419 msgid "Width" msgstr "" #: ../libvips/arithmetic/hough_line.c:143 msgid "horizontal size of parameter space" msgstr "" #: ../libvips/arithmetic/hough_line.c:149 ../libvips/arithmetic/measure.c:251 #: ../libvips/conversion/embed.c:590 ../libvips/conversion/copy.c:291 #: ../libvips/conversion/extract.c:226 ../libvips/create/xyz.c:200 #: ../libvips/create/worley.c:317 ../libvips/create/gaussnoise.c:179 #: ../libvips/create/perlin.c:304 ../libvips/create/point.c:150 #: ../libvips/create/fractsurf.c:109 ../libvips/create/black.c:136 #: ../libvips/draw/draw_flood.c:600 ../libvips/foreign/rawload.c:130 #: ../libvips/histogram/stdif.c:315 ../libvips/histogram/hist_local.c:377 #: ../libvips/iofuncs/image.c:1137 ../libvips/morphology/rank.c:426 msgid "Height" msgstr "" #: ../libvips/arithmetic/hough_line.c:150 msgid "Vertical size of parameter space" msgstr "" #: ../libvips/arithmetic/binary.c:89 msgid "binary operations" msgstr "" #: ../libvips/arithmetic/binary.c:96 ../libvips/arithmetic/measure.c:230 #: ../libvips/colour/colour.c:699 ../libvips/conversion/extract.c:205 #: ../libvips/draw/draw_smudge.c:197 ../libvips/draw/draw_flood.c:579 #: ../libvips/draw/draw_rect.c:173 msgid "Left" msgstr "" #: ../libvips/arithmetic/binary.c:97 msgid "Left-hand image argument" msgstr "" #: ../libvips/arithmetic/binary.c:102 ../libvips/colour/colour.c:705 msgid "Right" msgstr "" #: ../libvips/arithmetic/binary.c:103 msgid "Right-hand image argument" msgstr "" #: ../libvips/arithmetic/deviate.c:213 msgid "find image standard deviation" msgstr "" #: ../libvips/arithmetic/max.c:430 msgid "find image maximum" msgstr "" #: ../libvips/arithmetic/max.c:446 msgid "Horizontal position of maximum" msgstr "" #: ../libvips/arithmetic/max.c:453 msgid "Vertical position of maximum" msgstr "" #: ../libvips/arithmetic/max.c:460 msgid "Number of maximum values to find" msgstr "" #: ../libvips/arithmetic/statistic.c:161 msgid "VIPS statistic operations" msgstr "" #: ../libvips/arithmetic/statistic.c:167 ../libvips/arithmetic/nary.c:87 #: ../libvips/arithmetic/unary.c:88 ../libvips/colour/colour.c:493 #: ../libvips/colour/colour.c:587 ../libvips/colour/sRGB2scRGB.c:243 #: ../libvips/colour/scRGB2BW.c:237 ../libvips/colour/scRGB2sRGB.c:265 #: ../libvips/colour/colourspace.c:586 ../libvips/conversion/embed.c:563 #: ../libvips/conversion/zoom.c:383 ../libvips/conversion/replicate.c:196 #: ../libvips/conversion/bandfold.c:160 ../libvips/conversion/wrap.c:119 #: ../libvips/conversion/arrayjoin.c:304 #: ../libvips/conversion/unpremultiply.c:268 ../libvips/conversion/flip.c:240 #: ../libvips/conversion/flatten.c:386 ../libvips/conversion/copy.c:271 #: ../libvips/conversion/bandjoin.c:176 ../libvips/conversion/bandjoin.c:395 #: ../libvips/conversion/rot45.c:267 ../libvips/conversion/msb.c:244 #: ../libvips/conversion/extract.c:199 ../libvips/conversion/extract.c:422 #: ../libvips/conversion/cast.c:548 ../libvips/conversion/bandunfold.c:163 #: ../libvips/conversion/tilecache.c:416 ../libvips/conversion/sequential.c:327 #: ../libvips/conversion/premultiply.c:259 ../libvips/conversion/bandmean.c:198 #: ../libvips/conversion/byteswap.c:206 ../libvips/conversion/subsample.c:274 #: ../libvips/conversion/bandbool.c:214 ../libvips/conversion/recomb.c:207 #: ../libvips/conversion/cache.c:101 ../libvips/conversion/grid.c:199 #: ../libvips/conversion/scale.c:151 ../libvips/conversion/autorot.c:178 #: ../libvips/conversion/rot.c:359 ../libvips/conversion/bandrank.c:244 #: ../libvips/convolution/convolution.c:129 #: ../libvips/convolution/gaussblur.c:119 ../libvips/convolution/sharpen.c:313 #: ../libvips/convolution/correlation.c:151 ../libvips/create/invertlut.c:289 #: ../libvips/create/buildlut.c:261 ../libvips/foreign/foreign.c:1522 #: ../libvips/histogram/hist_match.c:161 ../libvips/histogram/hist_equal.c:108 #: ../libvips/histogram/stdif.c:294 ../libvips/histogram/hist_entropy.c:113 #: ../libvips/histogram/hist_ismonotonic.c:117 #: ../libvips/histogram/hist_norm.c:141 ../libvips/histogram/hist_plot.c:342 #: ../libvips/histogram/hist_unary.c:89 ../libvips/histogram/hist_local.c:358 #: ../libvips/histogram/percent.c:110 ../libvips/histogram/maplut.c:694 #: ../libvips/iofuncs/system.c:277 ../libvips/morphology/morphology.c:117 #: ../libvips/mosaicing/im_remosaic.c:164 #: ../libvips/mosaicing/global_balance.c:1771 #: ../libvips/resample/resample.c:132 msgid "Input" msgstr "" #: ../libvips/arithmetic/statistic.c:168 ../libvips/arithmetic/getpoint.c:141 #: ../libvips/arithmetic/unary.c:89 ../libvips/colour/colour.c:494 #: ../libvips/colour/colour.c:588 ../libvips/colour/sRGB2scRGB.c:244 #: ../libvips/colour/scRGB2BW.c:238 ../libvips/colour/scRGB2sRGB.c:266 #: ../libvips/colour/colourspace.c:587 ../libvips/conversion/embed.c:564 #: ../libvips/conversion/zoom.c:384 ../libvips/conversion/replicate.c:197 #: ../libvips/conversion/bandfold.c:161 ../libvips/conversion/wrap.c:120 #: ../libvips/conversion/unpremultiply.c:269 ../libvips/conversion/flip.c:241 #: ../libvips/conversion/flatten.c:387 ../libvips/conversion/copy.c:272 #: ../libvips/conversion/bandjoin.c:396 ../libvips/conversion/rot45.c:268 #: ../libvips/conversion/msb.c:245 ../libvips/conversion/extract.c:200 #: ../libvips/conversion/extract.c:423 ../libvips/conversion/cast.c:549 #: ../libvips/conversion/bandunfold.c:164 ../libvips/conversion/tilecache.c:417 #: ../libvips/conversion/sequential.c:328 #: ../libvips/conversion/premultiply.c:260 #: ../libvips/conversion/falsecolour.c:382 ../libvips/conversion/byteswap.c:207 #: ../libvips/conversion/subsample.c:275 ../libvips/conversion/gamma.c:144 #: ../libvips/conversion/cache.c:102 ../libvips/conversion/grid.c:200 #: ../libvips/conversion/scale.c:152 ../libvips/conversion/autorot.c:179 #: ../libvips/conversion/rot.c:360 ../libvips/convolution/gaussblur.c:120 #: ../libvips/convolution/sharpen.c:314 ../libvips/freqfilt/freqfilt.c:99 #: ../libvips/histogram/hist_equal.c:109 ../libvips/histogram/stdif.c:295 #: ../libvips/histogram/hist_norm.c:142 ../libvips/histogram/hist_plot.c:343 #: ../libvips/histogram/hist_unary.c:90 ../libvips/histogram/hist_local.c:359 #: ../libvips/histogram/percent.c:111 ../libvips/histogram/maplut.c:695 #: ../libvips/mosaicing/im_remosaic.c:165 #: ../libvips/mosaicing/global_balance.c:1772 msgid "Input image" msgstr "" #: ../libvips/arithmetic/nary.c:80 msgid "nary operations" msgstr "" #: ../libvips/arithmetic/nary.c:88 ../libvips/conversion/arrayjoin.c:305 #: ../libvips/conversion/bandjoin.c:177 ../libvips/conversion/bandrank.c:245 #: ../libvips/iofuncs/system.c:278 msgid "Array of input images" msgstr "" #: ../libvips/arithmetic/invert.c:165 msgid "invert an image" msgstr "" #: ../libvips/arithmetic/remainder.c:174 msgid "remainder after integer division of two images" msgstr "" #: ../libvips/arithmetic/remainder.c:324 msgid "remainder after integer division of an image and a constant" msgstr "" #: ../libvips/arithmetic/boolean.c:210 msgid "boolean operation on two images" msgstr "" #: ../libvips/arithmetic/boolean.c:218 ../libvips/arithmetic/boolean.c:521 #: ../libvips/arithmetic/relational.c:224 #: ../libvips/arithmetic/relational.c:562 ../libvips/arithmetic/math2.c:205 #: ../libvips/arithmetic/math2.c:404 ../libvips/arithmetic/complex.c:255 #: ../libvips/arithmetic/complex.c:548 ../libvips/arithmetic/complex.c:763 #: ../libvips/arithmetic/math.c:214 ../libvips/conversion/bandbool.c:220 #: ../tools/vips.c:1070 msgid "Operation" msgstr "" #: ../libvips/arithmetic/boolean.c:219 ../libvips/arithmetic/boolean.c:522 #: ../libvips/conversion/bandbool.c:221 msgid "boolean to perform" msgstr "" #: ../libvips/arithmetic/boolean.c:513 msgid "boolean operations against a constant" msgstr "" #: ../libvips/arithmetic/sign.c:152 msgid "unit vector of pixel" msgstr "" #: ../libvips/arithmetic/hist_find_ndim.c:112 #, c-format msgid "bins out of range [1,%d]" msgstr "" #: ../libvips/arithmetic/hist_find_ndim.c:289 msgid "find n-dimensional image histogram" msgstr "" #: ../libvips/arithmetic/hist_find_ndim.c:299 #: ../libvips/arithmetic/hist_find.c:451 #: ../libvips/arithmetic/hist_find_indexed.c:392 msgid "Output histogram" msgstr "" #: ../libvips/arithmetic/hist_find_ndim.c:304 msgid "Bins" msgstr "" #: ../libvips/arithmetic/hist_find_ndim.c:305 msgid "Number of bins in each dimension" msgstr "" #: ../libvips/arithmetic/multiply.c:173 msgid "multiply two images" msgstr "" #: ../libvips/arithmetic/hough_circle.c:113 msgid "parameters out of range" msgstr "" #: ../libvips/arithmetic/hough_circle.c:233 msgid "find hough circle transform" msgstr "" #: ../libvips/arithmetic/hough_circle.c:240 ../libvips/foreign/pdfload.c:489 #: ../libvips/foreign/svgload.c:290 ../libvips/mosaicing/mosaic.c:275 #: ../libvips/resample/similarity.c:171 msgid "Scale" msgstr "" #: ../libvips/arithmetic/hough_circle.c:241 msgid "Scale down dimensions by this factor" msgstr "" #: ../libvips/arithmetic/hough_circle.c:247 msgid "Min radius" msgstr "" #: ../libvips/arithmetic/hough_circle.c:248 msgid "Smallest radius to search for" msgstr "" #: ../libvips/arithmetic/hough_circle.c:254 msgid "Max radius" msgstr "" #: ../libvips/arithmetic/hough_circle.c:255 msgid "Largest radius to search for" msgstr "" #: ../libvips/arithmetic/measure.c:168 #, c-format msgid "%s: patch %d x %d, band %d: avg = %g, sdev = %g" msgstr "" #: ../libvips/arithmetic/measure.c:200 msgid "measure a set of patches on a color chart" msgstr "measure a set of patches on a colour chart" #: ../libvips/arithmetic/measure.c:204 ../libvips/arithmetic/getpoint.c:140 #: ../libvips/conversion/falsecolour.c:381 ../libvips/conversion/gamma.c:143 #: ../libvips/freqfilt/freqfilt.c:98 msgid "in" msgstr "" #: ../libvips/arithmetic/measure.c:205 msgid "Image to measure" msgstr "" #: ../libvips/arithmetic/measure.c:216 ../libvips/conversion/replicate.c:202 #: ../libvips/conversion/arrayjoin.c:311 ../libvips/conversion/grid.c:212 msgid "Across" msgstr "" #: ../libvips/arithmetic/measure.c:217 msgid "Number of patches across chart" msgstr "" #: ../libvips/arithmetic/measure.c:223 ../libvips/conversion/replicate.c:209 #: ../libvips/conversion/grid.c:219 msgid "Down" msgstr "" #: ../libvips/arithmetic/measure.c:224 msgid "Number of patches down chart" msgstr "" #: ../libvips/arithmetic/measure.c:231 ../libvips/conversion/extract.c:206 msgid "Left edge of extract area" msgstr "" #: ../libvips/arithmetic/measure.c:237 ../libvips/conversion/extract.c:212 #: ../libvips/draw/draw_flood.c:586 msgid "Top" msgstr "" #: ../libvips/arithmetic/measure.c:238 ../libvips/conversion/extract.c:213 msgid "Top edge of extract area" msgstr "" #: ../libvips/arithmetic/measure.c:245 ../libvips/conversion/extract.c:220 msgid "Width of extract area" msgstr "" #: ../libvips/arithmetic/measure.c:252 ../libvips/conversion/extract.c:227 msgid "Height of extract area" msgstr "" #: ../libvips/arithmetic/hist_find.c:441 msgid "find image histogram" msgstr "" #: ../libvips/arithmetic/hist_find.c:456 ../libvips/conversion/msb.c:250 #: ../libvips/conversion/extract.c:428 ../libvips/histogram/hist_equal.c:120 msgid "Band" msgstr "" #: ../libvips/arithmetic/hist_find.c:457 msgid "Find histogram of band" msgstr "" #: ../libvips/arithmetic/getpoint.c:136 msgid "read a point from an image" msgstr "" #: ../libvips/arithmetic/getpoint.c:154 ../libvips/arithmetic/getpoint.c:161 msgid "Point to read" msgstr "" #: ../libvips/arithmetic/add.c:172 msgid "add two images" msgstr "" #: ../libvips/arithmetic/divide.c:225 msgid "divide two images" msgstr "" #: ../libvips/arithmetic/relational.c:216 msgid "relational operation on two images" msgstr "" #: ../libvips/arithmetic/relational.c:225 #: ../libvips/arithmetic/relational.c:563 msgid "relational to perform" msgstr "" #: ../libvips/arithmetic/relational.c:553 msgid "relational operations against a constant" msgstr "" #: ../libvips/arithmetic/hough.c:176 msgid "find hough transform" msgstr "" #: ../libvips/arithmetic/hough.c:186 ../libvips/arithmetic/arithmetic.c:640 #: ../libvips/colour/colour.c:428 ../libvips/colour/sRGB2scRGB.c:250 #: ../libvips/colour/scRGB2BW.c:244 ../libvips/colour/scRGB2sRGB.c:272 #: ../libvips/colour/colourspace.c:593 ../libvips/conversion/conversion.c:201 #: ../libvips/convolution/convolution.c:136 #: ../libvips/convolution/gaussblur.c:126 ../libvips/convolution/sharpen.c:320 #: ../libvips/convolution/correlation.c:164 ../libvips/create/create.c:102 #: ../libvips/foreign/foreign.c:985 ../libvips/freqfilt/freqfilt.c:105 #: ../libvips/histogram/hist_equal.c:115 ../libvips/histogram/stdif.c:301 #: ../libvips/histogram/histogram.c:233 ../libvips/histogram/hist_norm.c:148 #: ../libvips/histogram/hist_plot.c:349 ../libvips/histogram/hist_local.c:365 #: ../libvips/histogram/maplut.c:701 ../libvips/iofuncs/system.c:285 #: ../libvips/morphology/morph.c:144 ../libvips/morphology/rank.c:414 #: ../libvips/mosaicing/merge.c:122 ../libvips/mosaicing/im_remosaic.c:171 #: ../libvips/mosaicing/global_balance.c:1778 ../libvips/mosaicing/mosaic.c:193 #: ../libvips/mosaicing/match.c:217 ../libvips/mosaicing/mosaic1.c:502 #: ../libvips/resample/resample.c:139 ../libvips/resample/thumbnail.c:521 msgid "Output image" msgstr "" #: ../libvips/arithmetic/arithmetic.c:378 #, c-format msgid "not one band or %d bands" msgstr "" #: ../libvips/arithmetic/arithmetic.c:382 msgid "bad bands" msgstr "" #: ../libvips/arithmetic/arithmetic.c:572 ../libvips/colour/colour.c:297 #: ../libvips/conversion/bandary.c:140 ../libvips/conversion/bandrank.c:204 msgid "too many input images" msgstr "" #: ../libvips/arithmetic/arithmetic.c:633 msgid "arithmetic operations" msgstr "" #: ../libvips/arithmetic/abs.c:230 msgid "absolute value of an image" msgstr "" #: ../libvips/arithmetic/linear.c:386 msgid "calculate (a * in + b)" msgstr "" #: ../libvips/arithmetic/linear.c:394 msgid "a" msgstr "" #: ../libvips/arithmetic/linear.c:395 msgid "Multiply by this" msgstr "" #: ../libvips/arithmetic/linear.c:401 msgid "b" msgstr "" #: ../libvips/arithmetic/linear.c:402 msgid "Add this" msgstr "" #: ../libvips/arithmetic/linear.c:408 msgid "uchar" msgstr "" #: ../libvips/arithmetic/linear.c:409 msgid "Output should be uchar" msgstr "" #: ../libvips/arithmetic/round.c:161 msgid "perform a round function on an image" msgstr "" #: ../libvips/arithmetic/round.c:169 msgid "Round operation" msgstr "" #: ../libvips/arithmetic/round.c:170 msgid "rounding operation to perform" msgstr "" #: ../libvips/arithmetic/math2.c:197 msgid "binary math operations" msgstr "" #: ../libvips/arithmetic/math2.c:206 ../libvips/arithmetic/math2.c:405 #: ../libvips/arithmetic/math.c:215 msgid "math to perform" msgstr "" #: ../libvips/arithmetic/math2.c:396 msgid "binary math operations with a constant" msgstr "" #: ../libvips/arithmetic/unaryconst.c:203 msgid "unary operations with a constant" msgstr "" #: ../libvips/arithmetic/unaryconst.c:207 msgid "c" msgstr "" #: ../libvips/arithmetic/unaryconst.c:208 msgid "Array of constants" msgstr "" #: ../libvips/arithmetic/complex.c:248 msgid "perform a complex operation on an image" msgstr "" #: ../libvips/arithmetic/complex.c:256 ../libvips/arithmetic/complex.c:764 msgid "complex to perform" msgstr "" #: ../libvips/arithmetic/complex.c:541 msgid "complex binary operations on two images" msgstr "" #: ../libvips/arithmetic/complex.c:549 msgid "binary complex operation to perform" msgstr "" #: ../libvips/arithmetic/complex.c:754 msgid "get a component from a complex image" msgstr "" #: ../libvips/arithmetic/complex.c:962 msgid "form a complex image from two real images" msgstr "" #: ../libvips/arithmetic/profile.c:292 msgid "find image profiles" msgstr "" #: ../libvips/arithmetic/profile.c:301 msgid "First non-zero pixel in column" msgstr "" #: ../libvips/arithmetic/profile.c:307 msgid "First non-zero pixel in row" msgstr "" #: ../libvips/arithmetic/unary.c:81 msgid "unary operations" msgstr "" #: ../libvips/arithmetic/subtract.c:162 msgid "subtract two images" msgstr "" #: ../libvips/arithmetic/hist_find_indexed.c:377 msgid "find indexed image histogram" msgstr "" #: ../libvips/arithmetic/hist_find_indexed.c:385 #: ../libvips/conversion/bandrank.c:251 ../libvips/resample/mapim.c:412 msgid "Index" msgstr "" #: ../libvips/arithmetic/hist_find_indexed.c:386 msgid "Index image" msgstr "" #: ../libvips/arithmetic/math.c:206 msgid "apply a math operation to an image" msgstr "" #: ../libvips/colour/LabQ2LabS.c:104 msgid "unpack a LabQ image to short Lab" msgstr "" #: ../libvips/colour/rad2float.c:188 msgid "unpack Radiance coding to float RGB" msgstr "" #: ../libvips/colour/XYZ2scRGB.c:105 msgid "transform XYZ to scRGB" msgstr "" #: ../libvips/colour/Lab2LabS.c:80 msgid "transform float Lab to signed short" msgstr "" #: ../libvips/colour/LabS2LabQ.c:127 msgid "transform short Lab to LabQ coding" msgstr "" #: ../libvips/colour/float2rad.c:201 msgid "transform float RGB to Radiance coding" msgstr "" #: ../libvips/colour/scRGB2XYZ.c:90 msgid "transform scRGB to XYZ" msgstr "" #: ../libvips/colour/LabQ2Lab.c:124 msgid "unpack a LabQ image to float Lab" msgstr "" #: ../libvips/colour/HSV2sRGB.c:113 msgid "transform HSV to sRGB" msgstr "" #: ../libvips/colour/XYZ2Lab.c:222 msgid "transform XYZ to Lab" msgstr "" #: ../libvips/colour/XYZ2Lab.c:228 ../libvips/colour/Lab2XYZ.c:175 msgid "Temperature" msgstr "" #: ../libvips/colour/XYZ2Lab.c:229 msgid "Colour temperature" msgstr "" #: ../libvips/colour/UCS2LCh.c:272 ../libvips/colour/LCh2UCS.c:206 msgid "transform LCh to CMC" msgstr "" #: ../libvips/colour/dE76.c:113 msgid "calculate dE76" msgstr "" #: ../libvips/colour/colour.c:421 msgid "color operations" msgstr "colour operations" #: ../libvips/colour/colour.c:489 msgid "color space transformations" msgstr "colour space transformations" #: ../libvips/colour/colour.c:583 msgid "change color coding" msgstr "change colour coding" #: ../libvips/colour/colour.c:695 msgid "calculate color difference" msgstr "calculate colour difference" #: ../libvips/colour/colour.c:700 msgid "Left-hand input image" msgstr "" #: ../libvips/colour/colour.c:706 msgid "Right-hand input image" msgstr "" #: ../libvips/colour/sRGB2HSV.c:134 msgid "transform sRGB to HSV" msgstr "" #: ../libvips/colour/Lab2LabQ.c:137 msgid "transform float Lab to LabQ coding" msgstr "" #: ../libvips/colour/sRGB2scRGB.c:237 msgid "convert an sRGB image to scRGB" msgstr "" #: ../libvips/colour/dECMC.c:61 msgid "calculate dECMC" msgstr "" #: ../libvips/colour/LCh2Lab.c:120 msgid "transform LCh to Lab" msgstr "" #: ../libvips/colour/Yxy2XYZ.c:93 msgid "transform Yxy to XYZ" msgstr "" #: ../libvips/colour/LabS2Lab.c:78 msgid "transform signed short Lab to float" msgstr "" #: ../libvips/colour/LabQ2sRGB.c:514 msgid "convert a LabQ image to sRGB" msgstr "" #: ../libvips/colour/scRGB2BW.c:190 ../libvips/colour/icc_transform.c:237 #: ../libvips/colour/scRGB2sRGB.c:219 msgid "depth must be 8 or 16" msgstr "" #: ../libvips/colour/scRGB2BW.c:231 msgid "convert scRGB to BW" msgstr "" #: ../libvips/colour/scRGB2BW.c:249 ../libvips/colour/icc_transform.c:980 #: ../libvips/colour/icc_transform.c:1121 ../libvips/colour/scRGB2sRGB.c:277 #: ../libvips/foreign/dzsave.c:2163 msgid "Depth" msgstr "" #: ../libvips/colour/scRGB2BW.c:250 ../libvips/colour/icc_transform.c:981 #: ../libvips/colour/icc_transform.c:1122 ../libvips/colour/scRGB2sRGB.c:278 msgid "Output device space depth in bits" msgstr "" #: ../libvips/colour/Lab2LCh.c:149 msgid "transform Lab to LCh" msgstr "" #: ../libvips/colour/icc_transform.c:292 #, c-format msgid "unimplemented input color space 0x%x" msgstr "unimplemented input colour space 0x%x" #: ../libvips/colour/icc_transform.c:357 #, c-format msgid "unimplemented output color space 0x%x" msgstr "unimplemented output colour space 0x%x" #: ../libvips/colour/icc_transform.c:369 msgid "no device profile" msgstr "" #: ../libvips/colour/icc_transform.c:400 msgid "transform using ICC profiles" msgstr "" #: ../libvips/colour/icc_transform.c:404 msgid "Intent" msgstr "" #: ../libvips/colour/icc_transform.c:405 msgid "Rendering intent" msgstr "" #: ../libvips/colour/icc_transform.c:411 msgid "PCS" msgstr "" #: ../libvips/colour/icc_transform.c:412 msgid "Set Profile Connection Space" msgstr "" #: ../libvips/colour/icc_transform.c:455 #, c-format msgid "" "%s: intent %d (%s) not supported by %s profile; falling back to default " "intent" msgstr "" #: ../libvips/colour/icc_transform.c:460 ../libvips/iofuncs/operation.c:377 msgid "input" msgstr "" #: ../libvips/colour/icc_transform.c:460 ../libvips/iofuncs/operation.c:377 msgid "output" msgstr "" #: ../libvips/colour/icc_transform.c:557 msgid "corrupt embedded profile" msgstr "" #: ../libvips/colour/icc_transform.c:565 msgid "embedded profile incompatible with image" msgstr "" #: ../libvips/colour/icc_transform.c:580 ../libvips/colour/icc_transform.c:822 #: ../libvips/colour/icc_transform.c:1045 #, c-format msgid "unable to open profile \"%s\"" msgstr "" #: ../libvips/colour/icc_transform.c:587 #, c-format msgid "profile \"%s\" incompatible with image" msgstr "" #: ../libvips/colour/icc_transform.c:626 ../libvips/colour/icc_transform.c:1037 msgid "no input profile" msgstr "" #: ../libvips/colour/icc_transform.c:736 msgid "import from device with ICC profile" msgstr "" #: ../libvips/colour/icc_transform.c:742 ../libvips/colour/icc_transform.c:1107 msgid "Embedded" msgstr "" #: ../libvips/colour/icc_transform.c:743 ../libvips/colour/icc_transform.c:1108 msgid "Use embedded input profile, if available" msgstr "" #: ../libvips/colour/icc_transform.c:749 ../libvips/colour/icc_transform.c:1114 msgid "Input profile" msgstr "" #: ../libvips/colour/icc_transform.c:750 ../libvips/colour/icc_transform.c:1115 msgid "Filename to load input profile from" msgstr "" #: ../libvips/colour/icc_transform.c:814 msgid "unable to load embedded profile" msgstr "" #: ../libvips/colour/icc_transform.c:830 msgid "no output profile" msgstr "" #: ../libvips/colour/icc_transform.c:967 msgid "output to device with ICC profile" msgstr "" #: ../libvips/colour/icc_transform.c:973 ../libvips/colour/icc_transform.c:1100 msgid "Output profile" msgstr "" #: ../libvips/colour/icc_transform.c:974 ../libvips/colour/icc_transform.c:1101 msgid "Filename to load output profile from" msgstr "" #: ../libvips/colour/icc_transform.c:1094 msgid "transform between devices with ICC profiles" msgstr "" #: ../libvips/colour/icc_transform.c:1166 #: ../libvips/colour/icc_transform.c:1180 msgid "unable to get media white point" msgstr "" #: ../libvips/colour/icc_transform.c:1240 msgid "libvips configured without lcms support" msgstr "" #: ../libvips/colour/scRGB2sRGB.c:259 msgid "convert an scRGB image to sRGB" msgstr "" #: ../libvips/colour/dE00.c:235 msgid "calculate dE00" msgstr "" #: ../libvips/colour/Lab2XYZ.c:169 msgid "transform CIELAB to XYZ" msgstr "" #: ../libvips/colour/Lab2XYZ.c:176 msgid "Color temperature" msgstr "" #: ../libvips/colour/XYZ2Yxy.c:92 msgid "transform XYZ to Yxy" msgstr "" #: ../libvips/colour/colourspace.c:145 msgid "too few bands for operation" msgstr "" #: ../libvips/colour/colourspace.c:548 #, c-format msgid "no known route from '%s' to '%s'" msgstr "" #: ../libvips/colour/colourspace.c:580 msgid "convert to a new colorspace" msgstr "convert to a new colourspace" #: ../libvips/colour/colourspace.c:598 msgid "Space" msgstr "" #: ../libvips/colour/colourspace.c:599 msgid "Destination color space" msgstr "Destination colour space" #: ../libvips/colour/colourspace.c:605 msgid "Source space" msgstr "" #: ../libvips/colour/colourspace.c:606 msgid "Source color space" msgstr "Source colour space" #: ../libvips/conversion/conversion.c:196 msgid "conversion operations" msgstr "" #: ../libvips/conversion/embed.c:474 ../libvips/iofuncs/image.c:2818 msgid "bad dimensions" msgstr "" #: ../libvips/conversion/embed.c:557 msgid "embed an image in a larger image" msgstr "" #: ../libvips/conversion/embed.c:570 ../libvips/conversion/wrap.c:126 msgid "Left edge of input in output" msgstr "" #: ../libvips/conversion/embed.c:577 ../libvips/conversion/wrap.c:133 msgid "Top edge of input in output" msgstr "" #: ../libvips/conversion/embed.c:584 ../libvips/conversion/copy.c:285 #: ../libvips/create/xyz.c:194 ../libvips/create/worley.c:311 #: ../libvips/create/gaussnoise.c:173 ../libvips/create/perlin.c:298 #: ../libvips/create/point.c:144 ../libvips/create/fractsurf.c:103 #: ../libvips/create/black.c:130 ../libvips/foreign/rawload.c:124 #: ../libvips/iofuncs/image.c:1131 msgid "Image width in pixels" msgstr "" #: ../libvips/conversion/embed.c:591 ../libvips/conversion/copy.c:292 #: ../libvips/create/xyz.c:201 ../libvips/create/worley.c:318 #: ../libvips/create/gaussnoise.c:180 ../libvips/create/perlin.c:305 #: ../libvips/create/point.c:151 ../libvips/create/fractsurf.c:110 #: ../libvips/create/black.c:137 ../libvips/foreign/rawload.c:131 #: ../libvips/iofuncs/image.c:1138 msgid "Image height in pixels" msgstr "" #: ../libvips/conversion/embed.c:597 msgid "Extend" msgstr "" #: ../libvips/conversion/embed.c:598 msgid "How to generate the extra pixels" msgstr "" #: ../libvips/conversion/embed.c:604 ../libvips/conversion/arrayjoin.c:325 #: ../libvips/conversion/flatten.c:392 ../libvips/conversion/join.c:265 #: ../libvips/conversion/insert.c:550 ../libvips/foreign/foreign.c:1535 msgid "Background" msgstr "" #: ../libvips/conversion/embed.c:605 msgid "Color for background pixels" msgstr "" #: ../libvips/conversion/zoom.c:333 msgid "zoom factors too large" msgstr "" #: ../libvips/conversion/zoom.c:377 msgid "zoom an image" msgstr "" #: ../libvips/conversion/zoom.c:389 ../libvips/conversion/subsample.c:280 msgid "Xfac" msgstr "" #: ../libvips/conversion/zoom.c:390 msgid "Horizontal zoom factor" msgstr "" #: ../libvips/conversion/zoom.c:396 ../libvips/conversion/subsample.c:287 msgid "Yfac" msgstr "" #: ../libvips/conversion/zoom.c:397 msgid "Vertical zoom factor" msgstr "" #: ../libvips/conversion/replicate.c:192 msgid "replicate an image" msgstr "" #: ../libvips/conversion/replicate.c:203 msgid "Repeat this many times horizontally" msgstr "" #: ../libvips/conversion/replicate.c:210 msgid "Repeat this many times vertically" msgstr "" #: ../libvips/conversion/bandfold.c:122 msgid "@factor must be a factor of image width" msgstr "" #: ../libvips/conversion/bandfold.c:154 msgid "fold up x axis into bands" msgstr "" #: ../libvips/conversion/bandfold.c:166 ../libvips/conversion/bandunfold.c:169 #: ../libvips/create/eye.c:103 msgid "Factor" msgstr "" #: ../libvips/conversion/bandfold.c:167 msgid "Fold by this factor" msgstr "" #: ../libvips/conversion/wrap.c:115 msgid "wrap image origin" msgstr "" #: ../libvips/conversion/arrayjoin.c:298 msgid "join an array of images" msgstr "" #: ../libvips/conversion/arrayjoin.c:312 msgid "Number of images across grid" msgstr "" #: ../libvips/conversion/arrayjoin.c:318 ../libvips/conversion/join.c:258 msgid "Shim" msgstr "" #: ../libvips/conversion/arrayjoin.c:319 ../libvips/conversion/join.c:259 msgid "Pixels between images" msgstr "" #: ../libvips/conversion/arrayjoin.c:326 ../libvips/conversion/join.c:266 msgid "Colour for new pixels" msgstr "" #: ../libvips/conversion/arrayjoin.c:332 msgid "Horizontal align" msgstr "" #: ../libvips/conversion/arrayjoin.c:333 msgid "Align on the left, centre or right" msgstr "" #: ../libvips/conversion/arrayjoin.c:339 msgid "Vertical align" msgstr "" #: ../libvips/conversion/arrayjoin.c:340 msgid "Align on the top, centre or bottom" msgstr "" #: ../libvips/conversion/arrayjoin.c:346 msgid "Horizontal spacing" msgstr "" #: ../libvips/conversion/arrayjoin.c:347 msgid "Horizontal spacing between images" msgstr "" #: ../libvips/conversion/arrayjoin.c:353 msgid "Vertical spacing" msgstr "" #: ../libvips/conversion/arrayjoin.c:354 msgid "Vertical spacing between images" msgstr "" #: ../libvips/conversion/unpremultiply.c:262 msgid "unpremultiply image alpha" msgstr "" #: ../libvips/conversion/unpremultiply.c:274 #: ../libvips/conversion/flatten.c:399 ../libvips/conversion/premultiply.c:265 msgid "Maximum alpha" msgstr "" #: ../libvips/conversion/unpremultiply.c:275 #: ../libvips/conversion/flatten.c:400 ../libvips/conversion/premultiply.c:266 msgid "Maximum value of alpha channel" msgstr "" #: ../libvips/conversion/flip.c:236 msgid "flip an image" msgstr "" #: ../libvips/conversion/flip.c:246 ../libvips/mosaicing/merge.c:127 #: ../libvips/mosaicing/mosaic.c:198 ../libvips/mosaicing/mosaic1.c:507 msgid "Direction" msgstr "" #: ../libvips/conversion/flip.c:247 msgid "Direction to flip image" msgstr "" #: ../libvips/conversion/flatten.c:380 msgid "flatten alpha out of an image" msgstr "" #: ../libvips/conversion/flatten.c:393 ../libvips/foreign/foreign.c:1536 msgid "Background value" msgstr "" #: ../libvips/conversion/copy.c:181 msgid "copy swap is deprecated, use byteswap instead" msgstr "" #: ../libvips/conversion/copy.c:235 msgid "must not change pel size" msgstr "" #: ../libvips/conversion/copy.c:260 msgid "copy an image" msgstr "" #: ../libvips/conversion/copy.c:277 msgid "Swap" msgstr "" #: ../libvips/conversion/copy.c:278 msgid "Swap bytes in image between little and big-endian" msgstr "" #: ../libvips/conversion/copy.c:298 ../libvips/create/identity.c:144 #: ../libvips/create/black.c:143 ../libvips/foreign/rawload.c:137 #: ../libvips/iofuncs/image.c:1144 msgid "Bands" msgstr "" #: ../libvips/conversion/copy.c:299 ../libvips/create/black.c:144 #: ../libvips/foreign/rawload.c:138 ../libvips/iofuncs/image.c:1145 msgid "Number of bands in image" msgstr "" #: ../libvips/conversion/copy.c:305 ../libvips/conversion/cast.c:554 #: ../libvips/iofuncs/image.c:1151 msgid "Format" msgstr "" #: ../libvips/conversion/copy.c:306 ../libvips/iofuncs/image.c:1152 msgid "Pixel format in image" msgstr "" #: ../libvips/conversion/copy.c:312 ../libvips/iofuncs/image.c:1158 msgid "Coding" msgstr "" #: ../libvips/conversion/copy.c:313 ../libvips/iofuncs/image.c:1159 msgid "Pixel coding" msgstr "" #: ../libvips/conversion/copy.c:319 ../libvips/iofuncs/image.c:1165 msgid "Interpretation" msgstr "" #: ../libvips/conversion/copy.c:320 ../libvips/iofuncs/image.c:1166 msgid "Pixel interpretation" msgstr "" #: ../libvips/conversion/copy.c:326 ../libvips/foreign/tiffsave.c:260 #: ../libvips/iofuncs/image.c:1172 msgid "Xres" msgstr "" #: ../libvips/conversion/copy.c:327 ../libvips/foreign/tiffsave.c:261 #: ../libvips/iofuncs/image.c:1173 msgid "Horizontal resolution in pixels/mm" msgstr "" #: ../libvips/conversion/copy.c:333 ../libvips/foreign/tiffsave.c:267 #: ../libvips/iofuncs/image.c:1179 msgid "Yres" msgstr "" #: ../libvips/conversion/copy.c:334 ../libvips/foreign/tiffsave.c:268 #: ../libvips/iofuncs/image.c:1180 msgid "Vertical resolution in pixels/mm" msgstr "" #: ../libvips/conversion/copy.c:340 ../libvips/iofuncs/image.c:1186 msgid "Xoffset" msgstr "" #: ../libvips/conversion/copy.c:341 ../libvips/iofuncs/image.c:1187 msgid "Horizontal offset of origin" msgstr "" #: ../libvips/conversion/copy.c:347 ../libvips/iofuncs/image.c:1193 msgid "Yoffset" msgstr "" #: ../libvips/conversion/copy.c:348 ../libvips/iofuncs/image.c:1194 msgid "Vertical offset of origin" msgstr "" #: ../libvips/conversion/bandjoin.c:170 msgid "bandwise join a set of images" msgstr "" #: ../libvips/conversion/bandjoin.c:389 msgid "append a constant band to an image" msgstr "" #: ../libvips/conversion/bandjoin.c:401 msgid "Constants" msgstr "" #: ../libvips/conversion/bandjoin.c:402 msgid "Array of constants to add" msgstr "" #: ../libvips/conversion/rot45.c:263 ../libvips/conversion/rot.c:355 msgid "rotate an image" msgstr "" #: ../libvips/conversion/rot45.c:273 ../libvips/conversion/autorot.c:184 #: ../libvips/conversion/rot.c:365 ../libvips/convolution/compass.c:157 #: ../libvips/foreign/dzsave.c:2178 ../libvips/mosaicing/mosaic.c:282 #: ../libvips/resample/similarity.c:178 msgid "Angle" msgstr "" #: ../libvips/conversion/rot45.c:274 ../libvips/conversion/rot.c:366 msgid "Angle to rotate image" msgstr "" #: ../libvips/conversion/msb.c:166 msgid "bad band" msgstr "" #: ../libvips/conversion/msb.c:238 msgid "pick most-significant byte from an image" msgstr "" #: ../libvips/conversion/msb.c:251 msgid "Band to msb" msgstr "" #: ../libvips/conversion/extract.c:150 msgid "bad extract area" msgstr "" #: ../libvips/conversion/extract.c:193 msgid "extract an area from an image" msgstr "" #: ../libvips/conversion/extract.c:387 msgid "bad extract band" msgstr "" #: ../libvips/conversion/extract.c:416 msgid "extract band from an image" msgstr "" #: ../libvips/conversion/extract.c:429 msgid "Band to extract" msgstr "" #: ../libvips/conversion/extract.c:435 ../libvips/foreign/magickload.c:138 #: ../libvips/foreign/gifload.c:823 ../libvips/foreign/magick7load.c:400 #: ../libvips/foreign/pdfload.c:475 ../libvips/foreign/tiffload.c:106 msgid "n" msgstr "" #: ../libvips/conversion/extract.c:436 msgid "Number of bands to extract" msgstr "" #: ../libvips/conversion/cast.c:131 #, c-format msgid "%d underflows and %d overflows detected" msgstr "" #: ../libvips/conversion/cast.c:542 msgid "cast an image" msgstr "" #: ../libvips/conversion/cast.c:555 msgid "Format to cast to" msgstr "" #: ../libvips/conversion/cast.c:561 msgid "Shift" msgstr "" #: ../libvips/conversion/cast.c:562 msgid "Shift integer values up and down" msgstr "" #: ../libvips/conversion/bandunfold.c:125 msgid "@factor must be a factor of image bands" msgstr "" #: ../libvips/conversion/bandunfold.c:157 msgid "unfold image bands into x axis" msgstr "" #: ../libvips/conversion/bandunfold.c:170 msgid "Unfold by this factor" msgstr "" #: ../libvips/conversion/tilecache.c:410 ../libvips/conversion/cache.c:97 msgid "cache an image" msgstr "" #: ../libvips/conversion/tilecache.c:422 ../libvips/conversion/sequential.c:340 #: ../libvips/conversion/cache.c:114 ../libvips/conversion/grid.c:205 #: ../libvips/foreign/tiffsave.c:225 ../libvips/foreign/dzsave.c:2224 msgid "Tile height" msgstr "" #: ../libvips/conversion/tilecache.c:423 ../libvips/conversion/sequential.c:341 #: ../libvips/conversion/cache.c:115 ../libvips/foreign/tiffsave.c:226 #: ../libvips/foreign/dzsave.c:2225 msgid "Tile height in pixels" msgstr "" #: ../libvips/conversion/tilecache.c:429 ../libvips/conversion/tilecache.c:999 #: ../libvips/foreign/foreign.c:1004 msgid "Access" msgstr "" #: ../libvips/conversion/tilecache.c:430 ../libvips/conversion/tilecache.c:1000 #: ../libvips/conversion/sequential.c:348 msgid "Expected access pattern" msgstr "" #: ../libvips/conversion/tilecache.c:436 msgid "Threaded" msgstr "" #: ../libvips/conversion/tilecache.c:437 msgid "Allow threaded access" msgstr "" #: ../libvips/conversion/tilecache.c:443 msgid "Persistent" msgstr "" #: ../libvips/conversion/tilecache.c:444 msgid "Keep cache between evaluations" msgstr "" #: ../libvips/conversion/tilecache.c:704 #, c-format msgid "error in tile %d x %d" msgstr "" #: ../libvips/conversion/tilecache.c:795 msgid "cache an image as a set of tiles" msgstr "" #: ../libvips/conversion/tilecache.c:799 ../libvips/conversion/cache.c:107 #: ../libvips/foreign/tiffsave.c:218 ../libvips/foreign/dzsave.c:2217 msgid "Tile width" msgstr "" #: ../libvips/conversion/tilecache.c:800 ../libvips/conversion/cache.c:108 #: ../libvips/foreign/tiffsave.c:219 ../libvips/foreign/dzsave.c:2218 msgid "Tile width in pixels" msgstr "" #: ../libvips/conversion/tilecache.c:806 ../libvips/conversion/cache.c:121 msgid "Max tiles" msgstr "" #: ../libvips/conversion/tilecache.c:807 ../libvips/conversion/cache.c:122 msgid "Maximum number of tiles to cache" msgstr "" #: ../libvips/conversion/tilecache.c:995 msgid "cache an image as a set of lines" msgstr "" #: ../libvips/conversion/sequential.c:323 msgid "check sequential access" msgstr "" #: ../libvips/conversion/sequential.c:333 msgid "trace" msgstr "" #: ../libvips/conversion/sequential.c:334 msgid "trace pixel requests" msgstr "" #: ../libvips/conversion/sequential.c:347 msgid "Strategy" msgstr "" #: ../libvips/conversion/premultiply.c:253 msgid "premultiply image alpha" msgstr "" #: ../libvips/conversion/bandmean.c:192 msgid "band-wise average" msgstr "" #: ../libvips/conversion/bandmean.c:199 ../libvips/conversion/bandbool.c:215 #: ../libvips/conversion/recomb.c:208 ../libvips/convolution/convolution.c:130 #: ../libvips/convolution/correlation.c:152 #: ../libvips/morphology/morphology.c:118 ../libvips/resample/resample.c:133 msgid "Input image argument" msgstr "" #: ../libvips/conversion/falsecolour.c:375 msgid "false-color an image" msgstr "false-colour an image" #: ../libvips/conversion/byteswap.c:200 msgid "byteswap an image" msgstr "" #: ../libvips/conversion/subsample.c:230 ../libvips/resample/shrinkv.c:393 #: ../libvips/resample/shrinkh.c:289 ../libvips/resample/reduceh.cpp:528 #: ../libvips/resample/reducev.cpp:801 msgid "image has shrunk to nothing" msgstr "" #: ../libvips/conversion/subsample.c:266 msgid "subsample an image" msgstr "" #: ../libvips/conversion/subsample.c:281 msgid "Horizontal subsample factor" msgstr "" #: ../libvips/conversion/subsample.c:288 msgid "Vertical subsample factor" msgstr "" #: ../libvips/conversion/subsample.c:294 msgid "Point" msgstr "" #: ../libvips/conversion/subsample.c:295 msgid "Point sample" msgstr "" #: ../libvips/conversion/bandbool.c:75 #, c-format msgid "operator %s not supported across image bands" msgstr "" #: ../libvips/conversion/bandbool.c:207 msgid "boolean operation across image bands" msgstr "" #: ../libvips/conversion/recomb.c:166 msgid "bands in must equal matrix width" msgstr "" #: ../libvips/conversion/recomb.c:201 msgid "linear recombination with matrix" msgstr "" #: ../libvips/conversion/recomb.c:213 msgid "M" msgstr "" #: ../libvips/conversion/recomb.c:214 msgid "matrix of coefficients" msgstr "" #: ../libvips/conversion/bandary.c:135 msgid "no input images" msgstr "" #: ../libvips/conversion/bandary.c:186 msgid "operations on image bands" msgstr "" #: ../libvips/conversion/ifthenelse.c:479 msgid "ifthenelse an image" msgstr "" #: ../libvips/conversion/ifthenelse.c:483 msgid "Condition" msgstr "" #: ../libvips/conversion/ifthenelse.c:484 msgid "Condition input image" msgstr "" #: ../libvips/conversion/ifthenelse.c:489 msgid "Then image" msgstr "" #: ../libvips/conversion/ifthenelse.c:490 msgid "Source for TRUE pixels" msgstr "" #: ../libvips/conversion/ifthenelse.c:495 msgid "Else image" msgstr "" #: ../libvips/conversion/ifthenelse.c:496 msgid "Source for FALSE pixels" msgstr "" #: ../libvips/conversion/ifthenelse.c:501 msgid "blend" msgstr "" #: ../libvips/conversion/ifthenelse.c:502 msgid "Blend smoothly between then and else parts" msgstr "" #: ../libvips/conversion/gamma.c:137 msgid "gamma an image" msgstr "" #: ../libvips/conversion/gamma.c:149 msgid "exponent" msgstr "" #: ../libvips/conversion/gamma.c:150 msgid "Gamma factor" msgstr "" #: ../libvips/conversion/join.c:228 msgid "join a pair of images" msgstr "" #: ../libvips/conversion/join.c:232 msgid "in1" msgstr "" #: ../libvips/conversion/join.c:233 msgid "First input image" msgstr "" #: ../libvips/conversion/join.c:238 ../libvips/freqfilt/phasecor.c:112 msgid "in2" msgstr "" #: ../libvips/conversion/join.c:239 ../libvips/freqfilt/phasecor.c:113 msgid "Second input image" msgstr "" #: ../libvips/conversion/join.c:244 ../libvips/morphology/countlines.c:142 msgid "direction" msgstr "" #: ../libvips/conversion/join.c:245 msgid "Join left-right or up-down" msgstr "" #: ../libvips/conversion/join.c:251 ../libvips/conversion/insert.c:543 msgid "Expand" msgstr "" #: ../libvips/conversion/join.c:252 ../libvips/conversion/insert.c:544 msgid "Expand output to hold all of both inputs" msgstr "" #: ../libvips/conversion/join.c:272 ../libvips/create/text.c:304 msgid "Align" msgstr "" #: ../libvips/conversion/join.c:273 msgid "Align on the low, centre or high coordinate edge" msgstr "" #: ../libvips/conversion/grid.c:165 msgid "bad grid geometry" msgstr "" #: ../libvips/conversion/grid.c:195 msgid "grid an image" msgstr "" #: ../libvips/conversion/grid.c:206 msgid "chop into tiles this high" msgstr "" #: ../libvips/conversion/grid.c:213 msgid "number of tiles across" msgstr "" #: ../libvips/conversion/grid.c:220 msgid "number of tiles down" msgstr "" #: ../libvips/conversion/scale.c:147 msgid "scale an image to uchar" msgstr "" #: ../libvips/conversion/scale.c:157 ../libvips/iofuncs/system.c:311 msgid "Log" msgstr "" #: ../libvips/conversion/scale.c:158 msgid "Log scale" msgstr "" #: ../libvips/conversion/scale.c:164 msgid "Exponent" msgstr "" #: ../libvips/conversion/scale.c:165 msgid "Exponent for log scale" msgstr "" #: ../libvips/conversion/insert.c:509 msgid "insert image @sub into @main at @x, @y" msgstr "" #: ../libvips/conversion/insert.c:517 msgid "Main" msgstr "" #: ../libvips/conversion/insert.c:518 msgid "Main input image" msgstr "" #: ../libvips/conversion/insert.c:523 ../libvips/draw/draw_image.c:259 msgid "Sub-image" msgstr "" #: ../libvips/conversion/insert.c:524 ../libvips/draw/draw_image.c:260 msgid "Sub-image to insert into main image" msgstr "" #: ../libvips/conversion/insert.c:529 msgid "X" msgstr "" #: ../libvips/conversion/insert.c:530 msgid "Left edge of sub in main" msgstr "" #: ../libvips/conversion/insert.c:536 msgid "Y" msgstr "" #: ../libvips/conversion/insert.c:537 msgid "Top edge of sub in main" msgstr "" #: ../libvips/conversion/insert.c:551 msgid "Color for new pixels" msgstr "" #: ../libvips/conversion/autorot.c:174 msgid "autorotate image by exif tag" msgstr "" #: ../libvips/conversion/autorot.c:185 msgid "Angle image was rotated by" msgstr "" #: ../libvips/conversion/bandrank.c:238 msgid "band-wise rank of a set of images" msgstr "" #: ../libvips/conversion/bandrank.c:252 msgid "Select this band element from sorted list" msgstr "" #: ../libvips/convolution/spcor.c:315 msgid "spatial correlation" msgstr "" #: ../libvips/convolution/conva.c:237 ../libvips/convolution/conva.c:243 #: ../libvips/convolution/conva.c:760 ../libvips/convolution/convasep.c:152 msgid "mask too complex" msgstr "" #: ../libvips/convolution/conva.c:988 ../libvips/convolution/conva.c:1216 #: ../libvips/convolution/convasep.c:823 ../libvips/morphology/hitmiss.c:732 msgid "image too small for mask" msgstr "" #: ../libvips/convolution/conva.c:1288 msgid "approximate integer convolution" msgstr "" #: ../libvips/convolution/conva.c:1292 ../libvips/convolution/compass.c:178 #: ../libvips/convolution/convasep.c:901 ../libvips/convolution/convsep.c:134 #: ../libvips/convolution/conv.c:143 msgid "Layers" msgstr "" #: ../libvips/convolution/conva.c:1293 ../libvips/convolution/compass.c:179 #: ../libvips/convolution/convasep.c:902 ../libvips/convolution/convsep.c:135 #: ../libvips/convolution/conv.c:144 msgid "Use this many layers in approximation" msgstr "" #: ../libvips/convolution/conva.c:1299 ../libvips/convolution/compass.c:185 #: ../libvips/convolution/convsep.c:141 ../libvips/convolution/conv.c:150 msgid "Cluster" msgstr "" #: ../libvips/convolution/conva.c:1300 ../libvips/convolution/compass.c:186 #: ../libvips/convolution/convsep.c:142 ../libvips/convolution/conv.c:151 msgid "Cluster lines closer than this in approximation" msgstr "" #: ../libvips/convolution/fastcor.c:215 msgid "fast correlation" msgstr "" #: ../libvips/convolution/convi.c:1012 msgid "int convolution operation" msgstr "" #: ../libvips/convolution/compass.c:146 msgid "convolve with rotating mask" msgstr "" #: ../libvips/convolution/compass.c:150 msgid "Times" msgstr "" #: ../libvips/convolution/compass.c:151 msgid "Rotate and convolve this many times" msgstr "" #: ../libvips/convolution/compass.c:158 msgid "Rotate mask by this much between convolutions" msgstr "" #: ../libvips/convolution/compass.c:164 msgid "Combine" msgstr "" #: ../libvips/convolution/compass.c:165 msgid "Combine convolution results like this" msgstr "" #: ../libvips/convolution/compass.c:171 ../libvips/convolution/gaussblur.c:145 #: ../libvips/convolution/convsep.c:127 ../libvips/convolution/conv.c:136 #: ../libvips/create/logmat.c:229 ../libvips/create/gaussmat.c:212 msgid "Precision" msgstr "" #: ../libvips/convolution/compass.c:172 ../libvips/convolution/gaussblur.c:146 #: ../libvips/convolution/convsep.c:128 ../libvips/convolution/conv.c:137 msgid "Convolve with this precision" msgstr "" #: ../libvips/convolution/convolution.c:120 msgid "convolution operations" msgstr "" #: ../libvips/convolution/convolution.c:141 #: ../libvips/convolution/correlation.c:157 ../libvips/draw/draw_mask.c:323 #: ../libvips/morphology/morph.c:149 ../libvips/morphology/labelregions.c:125 msgid "Mask" msgstr "" #: ../libvips/convolution/convolution.c:142 ../libvips/morphology/morph.c:150 msgid "Input matrix image" msgstr "" #: ../libvips/convolution/convf.c:365 msgid "float convolution operation" msgstr "" #: ../libvips/convolution/gaussblur.c:113 msgid "gaussian blur" msgstr "" #: ../libvips/convolution/gaussblur.c:131 ../libvips/convolution/sharpen.c:325 #: ../libvips/create/gaussmat.c:184 ../libvips/create/gaussnoise.c:193 msgid "Sigma" msgstr "" #: ../libvips/convolution/gaussblur.c:132 ../libvips/convolution/sharpen.c:326 #: ../libvips/create/gaussmat.c:185 msgid "Sigma of Gaussian" msgstr "" #: ../libvips/convolution/gaussblur.c:138 ../libvips/create/gaussmat.c:191 msgid "Minimum amplitude" msgstr "" #: ../libvips/convolution/gaussblur.c:139 ../libvips/create/gaussmat.c:192 msgid "Minimum amplitude of Gaussian" msgstr "" #: ../libvips/convolution/convasep.c:897 msgid "approximate separable integer convolution" msgstr "" #: ../libvips/convolution/convsep.c:123 msgid "seperable convolution operation" msgstr "" #: ../libvips/convolution/sharpen.c:307 msgid "unsharp masking for print" msgstr "" #: ../libvips/convolution/sharpen.c:332 ../libvips/draw/draw_line.c:284 msgid "x1" msgstr "" #: ../libvips/convolution/sharpen.c:333 msgid "Flat/jaggy threshold" msgstr "" #: ../libvips/convolution/sharpen.c:339 ../libvips/draw/draw_line.c:305 msgid "y2" msgstr "" #: ../libvips/convolution/sharpen.c:340 msgid "Maximum brightening" msgstr "" #: ../libvips/convolution/sharpen.c:346 msgid "y3" msgstr "" #: ../libvips/convolution/sharpen.c:347 msgid "Maximum darkening" msgstr "" #: ../libvips/convolution/sharpen.c:353 msgid "m1" msgstr "" #: ../libvips/convolution/sharpen.c:354 msgid "Slope for flat areas" msgstr "" #: ../libvips/convolution/sharpen.c:360 msgid "m2" msgstr "" #: ../libvips/convolution/sharpen.c:361 msgid "Slope for jaggy areas" msgstr "" #: ../libvips/convolution/sharpen.c:369 ../libvips/create/logmat.c:201 #: ../libvips/draw/draw_circle.c:249 msgid "Radius" msgstr "" #: ../libvips/convolution/sharpen.c:370 msgid "radius of Gaussian" msgstr "" #: ../libvips/convolution/conv.c:132 msgid "convolution operation" msgstr "" #: ../libvips/convolution/correlation.c:145 msgid "correlation operation" msgstr "" #: ../libvips/convolution/correlation.c:158 msgid "Input reference image" msgstr "" #: ../libvips/create/sines.c:121 msgid "make a 2D sine wave" msgstr "" #: ../libvips/create/sines.c:127 msgid "hfreq" msgstr "" #: ../libvips/create/sines.c:128 msgid "Horizontal spatial frequency" msgstr "" #: ../libvips/create/sines.c:134 msgid "vfreq" msgstr "" #: ../libvips/create/sines.c:135 msgid "Vertical spatial frequency" msgstr "" #: ../libvips/create/grey.c:89 msgid "make a grey ramp image" msgstr "" #: ../libvips/create/mask_ideal.c:79 msgid "make an ideal filter" msgstr "" #: ../libvips/create/mask_ideal.c:84 ../libvips/create/mask_ideal.c:85 #: ../libvips/create/mask_gaussian.c:86 ../libvips/create/mask_gaussian.c:87 #: ../libvips/create/mask_butterworth.c:95 #: ../libvips/create/mask_butterworth.c:96 msgid "Frequency cutoff" msgstr "" #: ../libvips/create/create.c:97 msgid "create operations" msgstr "" #: ../libvips/create/mask_gaussian.c:81 #: ../libvips/create/mask_gaussian_band.c:102 msgid "make a gaussian filter" msgstr "" #: ../libvips/create/mask_gaussian.c:93 ../libvips/create/mask_gaussian.c:94 #: ../libvips/create/mask_butterworth_band.c:141 #: ../libvips/create/mask_butterworth_band.c:142 #: ../libvips/create/mask_butterworth.c:102 #: ../libvips/create/mask_butterworth.c:103 #: ../libvips/create/mask_gaussian_band.c:128 #: ../libvips/create/mask_gaussian_band.c:129 msgid "Amplitude cutoff" msgstr "" #: ../libvips/create/xyz.c:139 msgid "lower dimensions not set" msgstr "" #: ../libvips/create/xyz.c:156 msgid "image too large" msgstr "" #: ../libvips/create/xyz.c:189 msgid "make an image where pixel values are coordinates" msgstr "" #: ../libvips/create/xyz.c:207 msgid "csize" msgstr "" #: ../libvips/create/xyz.c:208 msgid "Size of third dimension" msgstr "" #: ../libvips/create/xyz.c:214 msgid "dsize" msgstr "" #: ../libvips/create/xyz.c:215 msgid "Size of fourth dimension" msgstr "" #: ../libvips/create/xyz.c:221 msgid "esize" msgstr "" #: ../libvips/create/xyz.c:222 msgid "Size of fifth dimension" msgstr "" #: ../libvips/create/invertlut.c:124 msgid "bad input matrix" msgstr "" #: ../libvips/create/invertlut.c:129 msgid "bad size" msgstr "" #: ../libvips/create/invertlut.c:149 #, c-format msgid "element (%d, %d) is %g, outside range [0,1]" msgstr "" #: ../libvips/create/invertlut.c:285 msgid "build an inverted look-up table" msgstr "" #: ../libvips/create/invertlut.c:290 ../libvips/create/buildlut.c:262 msgid "Matrix of XY coordinates" msgstr "" #: ../libvips/create/invertlut.c:296 msgid "LUT size to generate" msgstr "" #: ../libvips/create/mask_butterworth_ring.c:101 msgid "make a butterworth ring filter" msgstr "" #: ../libvips/create/mask_butterworth_ring.c:106 #: ../libvips/create/mask_butterworth_ring.c:107 #: ../libvips/create/mask_gaussian_ring.c:101 #: ../libvips/create/mask_gaussian_ring.c:102 #: ../libvips/create/mask_ideal_ring.c:98 #: ../libvips/create/mask_ideal_ring.c:99 msgid "Ringwidth" msgstr "" #: ../libvips/create/logmat.c:147 ../libvips/create/gaussmat.c:133 msgid "mask too large" msgstr "" #: ../libvips/create/logmat.c:197 msgid "make a laplacian of gaussian image" msgstr "" #: ../libvips/create/logmat.c:202 msgid "Radius of Logmatian" msgstr "" #: ../libvips/create/logmat.c:209 msgid "Minimum amplitude of Logmatian" msgstr "" #: ../libvips/create/logmat.c:215 ../libvips/create/gaussmat.c:198 msgid "Separable" msgstr "" #: ../libvips/create/logmat.c:216 msgid "Generate separable Logmatian" msgstr "" #: ../libvips/create/logmat.c:222 ../libvips/create/gaussmat.c:205 msgid "Integer" msgstr "" #: ../libvips/create/logmat.c:223 msgid "Generate integer Logmatian" msgstr "" #: ../libvips/create/logmat.c:230 ../libvips/create/gaussmat.c:213 msgid "Generate with this precision" msgstr "" #: ../libvips/create/gaussmat.c:180 msgid "make a gaussian image" msgstr "" #: ../libvips/create/gaussmat.c:199 msgid "Generate separable Gaussian" msgstr "" #: ../libvips/create/gaussmat.c:206 msgid "Generate integer Gaussian" msgstr "" #: ../libvips/create/worley.c:306 msgid "make a worley noise image" msgstr "" #: ../libvips/create/worley.c:324 ../libvips/create/perlin.c:311 msgid "Cell size" msgstr "" #: ../libvips/create/worley.c:325 msgid "Size of Worley cells" msgstr "" #: ../libvips/create/mask_gaussian_ring.c:96 msgid "make a gaussian ring filter" msgstr "" #: ../libvips/create/gaussnoise.c:164 msgid "make a gaussnoise image" msgstr "" #: ../libvips/create/gaussnoise.c:186 ../libvips/histogram/stdif.c:329 msgid "Mean" msgstr "" #: ../libvips/create/gaussnoise.c:187 msgid "Mean of pixels in generated image" msgstr "" #: ../libvips/create/gaussnoise.c:194 msgid "Standard deviation of pixels in generated image" msgstr "" #: ../libvips/create/zone.c:90 msgid "make a zone plate" msgstr "" #: ../libvips/create/tonelut.c:221 ../libvips/create/buildlut.c:257 msgid "build a look-up table" msgstr "" #: ../libvips/create/tonelut.c:225 msgid "In-max" msgstr "" #: ../libvips/create/tonelut.c:226 msgid "Size of LUT to build" msgstr "" #: ../libvips/create/tonelut.c:232 msgid "Out-max" msgstr "" #: ../libvips/create/tonelut.c:233 msgid "Maximum value in output LUT" msgstr "" #: ../libvips/create/tonelut.c:239 msgid "Black point" msgstr "" #: ../libvips/create/tonelut.c:240 msgid "Lowest value in output" msgstr "" #: ../libvips/create/tonelut.c:246 msgid "White point" msgstr "" #: ../libvips/create/tonelut.c:247 msgid "Highest value in output" msgstr "" #: ../libvips/create/tonelut.c:253 msgid "Shadow point" msgstr "" #: ../libvips/create/tonelut.c:254 msgid "Position of shadow" msgstr "" #: ../libvips/create/tonelut.c:260 msgid "Mid-tone point" msgstr "" #: ../libvips/create/tonelut.c:261 msgid "Position of mid-tones" msgstr "" #: ../libvips/create/tonelut.c:267 msgid "Highlight point" msgstr "" #: ../libvips/create/tonelut.c:268 msgid "Position of highlights" msgstr "" #: ../libvips/create/tonelut.c:274 msgid "Shadow adjust" msgstr "" #: ../libvips/create/tonelut.c:275 msgid "Adjust shadows by this much" msgstr "" #: ../libvips/create/tonelut.c:281 msgid "Mid-tone adjust" msgstr "" #: ../libvips/create/tonelut.c:282 msgid "Adjust mid-tones by this much" msgstr "" #: ../libvips/create/tonelut.c:288 msgid "Highlight adjust" msgstr "" #: ../libvips/create/tonelut.c:289 msgid "Adjust highlights by this much" msgstr "" #: ../libvips/create/perlin.c:293 msgid "make a perlin noise image" msgstr "" #: ../libvips/create/perlin.c:312 msgid "Size of Perlin cells" msgstr "" #: ../libvips/create/perlin.c:318 ../libvips/create/point.c:157 msgid "Uchar" msgstr "" #: ../libvips/create/perlin.c:319 ../libvips/create/point.c:158 msgid "Output an unsigned char image" msgstr "" #: ../libvips/create/point.c:134 msgid "make a point image" msgstr "" #: ../libvips/create/mask.c:111 msgid "base class for frequency filters" msgstr "" #: ../libvips/create/mask.c:119 msgid "Optical" msgstr "" #: ../libvips/create/mask.c:120 msgid "Rotate quadrants to optical space" msgstr "" #: ../libvips/create/mask.c:126 msgid "Reject" msgstr "" #: ../libvips/create/mask.c:127 msgid "Invert the sense of the filter" msgstr "" #: ../libvips/create/mask.c:133 msgid "Nodc" msgstr "" #: ../libvips/create/mask.c:134 msgid "Remove DC component" msgstr "" #: ../libvips/create/mask_butterworth_band.c:108 msgid "make a butterworth_band filter" msgstr "" #: ../libvips/create/mask_butterworth_band.c:113 #: ../libvips/create/mask_butterworth.c:88 msgid "Order" msgstr "" #: ../libvips/create/mask_butterworth_band.c:114 #: ../libvips/create/mask_butterworth.c:89 msgid "Filter order" msgstr "" #: ../libvips/create/mask_butterworth_band.c:120 #: ../libvips/create/mask_butterworth_band.c:121 #: ../libvips/create/mask_gaussian_band.c:107 #: ../libvips/create/mask_gaussian_band.c:108 #: ../libvips/create/mask_ideal_band.c:98 #: ../libvips/create/mask_ideal_band.c:99 msgid "Frequency cutoff x" msgstr "" #: ../libvips/create/mask_butterworth_band.c:127 #: ../libvips/create/mask_butterworth_band.c:128 #: ../libvips/create/mask_gaussian_band.c:114 #: ../libvips/create/mask_gaussian_band.c:115 #: ../libvips/create/mask_ideal_band.c:105 #: ../libvips/create/mask_ideal_band.c:106 msgid "Frequency cutoff y" msgstr "" #: ../libvips/create/mask_butterworth_band.c:134 #: ../libvips/create/mask_gaussian_band.c:121 #: ../libvips/create/mask_ideal_band.c:112 msgid "radius" msgstr "" #: ../libvips/create/mask_butterworth_band.c:135 #: ../libvips/create/mask_gaussian_band.c:122 #: ../libvips/create/mask_ideal_band.c:113 msgid "radius of circle" msgstr "" #: ../libvips/create/mask_ideal_ring.c:93 msgid "make an ideal ring filter" msgstr "" #: ../libvips/create/mask_butterworth.c:83 msgid "make a butterworth filter" msgstr "" #: ../libvips/create/fractsurf.c:98 msgid "make a fractal surface" msgstr "" #: ../libvips/create/fractsurf.c:116 ../libvips/create/fractsurf.c:117 #: ../libvips/create/mask_fractal.c:93 ../libvips/create/mask_fractal.c:94 msgid "Fractal dimension" msgstr "" #: ../libvips/create/identity.c:140 msgid "make a 1D image where pixel values are indexes" msgstr "" #: ../libvips/create/identity.c:145 msgid "Number of bands in LUT" msgstr "" #: ../libvips/create/identity.c:151 msgid "Ushort" msgstr "" #: ../libvips/create/identity.c:152 msgid "Create a 16-bit LUT" msgstr "" #: ../libvips/create/identity.c:159 msgid "Size of 16-bit LUT" msgstr "" #: ../libvips/create/text.c:170 msgid "invalid markup in text" msgstr "" #: ../libvips/create/text.c:212 msgid "no text to render" msgstr "" #: ../libvips/create/text.c:279 msgid "make a text image" msgstr "" #: ../libvips/create/text.c:283 msgid "Text" msgstr "" #: ../libvips/create/text.c:284 msgid "Text to render" msgstr "" #: ../libvips/create/text.c:290 msgid "Font" msgstr "" #: ../libvips/create/text.c:291 msgid "Font to render with" msgstr "" #: ../libvips/create/text.c:298 msgid "Maximum image width in pixels" msgstr "" #: ../libvips/create/text.c:305 msgid "Align on the low, centre or high edge" msgstr "" #: ../libvips/create/text.c:311 ../libvips/foreign/pdfload.c:482 #: ../libvips/foreign/svgload.c:283 msgid "DPI" msgstr "" #: ../libvips/create/text.c:312 msgid "DPI to render at" msgstr "" #: ../libvips/create/text.c:318 msgid "Spacing" msgstr "" #: ../libvips/create/text.c:319 msgid "Line spacing" msgstr "" #: ../libvips/create/mask_fractal.c:88 msgid "make fractal filter" msgstr "" #: ../libvips/create/eye.c:98 msgid "make an image showing the eye's spatial response" msgstr "" #: ../libvips/create/eye.c:104 msgid "Maximum spatial frequency" msgstr "" #: ../libvips/create/black.c:125 msgid "make a black image" msgstr "" #: ../libvips/create/mask_ideal_band.c:93 msgid "make an ideal band filter" msgstr "" #: ../libvips/create/buildlut.c:134 #, c-format msgid "x value row %d not an int" msgstr "" #: ../libvips/create/buildlut.c:149 msgid "x range too small" msgstr "" #: ../libvips/draw/draw_line.c:280 msgid "draw a line on an image" msgstr "" #: ../libvips/draw/draw_line.c:285 ../libvips/draw/draw_line.c:292 msgid "Start of draw_line" msgstr "" #: ../libvips/draw/draw_line.c:291 msgid "y1" msgstr "" #: ../libvips/draw/draw_line.c:298 msgid "x2" msgstr "" #: ../libvips/draw/draw_line.c:299 ../libvips/draw/draw_line.c:306 msgid "End of draw_line" msgstr "" #: ../libvips/draw/draw_image.c:255 msgid "paint an image into another image" msgstr "" #: ../libvips/draw/draw_image.c:266 ../libvips/draw/draw_image.c:273 msgid "Draw image here" msgstr "" #: ../libvips/draw/draw_image.c:279 ../libvips/iofuncs/image.c:1207 msgid "Mode" msgstr "" #: ../libvips/draw/draw_image.c:280 msgid "Combining mode" msgstr "" #: ../libvips/draw/draw_mask.c:319 msgid "draw a mask on an image" msgstr "" #: ../libvips/draw/draw_mask.c:324 msgid "Mask of pixels to draw" msgstr "" #: ../libvips/draw/draw_mask.c:330 ../libvips/draw/draw_mask.c:337 msgid "Draw mask here" msgstr "" #: ../libvips/draw/draw.c:129 msgid "draw operations" msgstr "" #: ../libvips/draw/draw.c:133 msgid "Image" msgstr "" #: ../libvips/draw/draw.c:134 msgid "Image to draw on" msgstr "" #: ../libvips/draw/draw_smudge.c:193 msgid "blur a rectangle on an image" msgstr "" #: ../libvips/draw/draw_smudge.c:198 ../libvips/draw/draw_smudge.c:205 #: ../libvips/draw/draw_smudge.c:212 ../libvips/draw/draw_smudge.c:219 #: ../libvips/draw/draw_rect.c:174 ../libvips/draw/draw_rect.c:181 #: ../libvips/draw/draw_rect.c:188 ../libvips/draw/draw_rect.c:195 msgid "Rect to fill" msgstr "" #: ../libvips/draw/draw_smudge.c:204 ../libvips/draw/draw_rect.c:180 msgid "top" msgstr "" #: ../libvips/draw/draw_smudge.c:211 ../libvips/draw/draw_rect.c:187 msgid "width" msgstr "" #: ../libvips/draw/draw_smudge.c:218 ../libvips/draw/draw_rect.c:194 msgid "height" msgstr "" #: ../libvips/draw/drawink.c:86 msgid "draw with ink operations" msgstr "" #: ../libvips/draw/drawink.c:90 msgid "Ink" msgstr "" #: ../libvips/draw/drawink.c:91 msgid "Color for pixels" msgstr "" #: ../libvips/draw/draw_circle.c:231 msgid "draw a circle on an image" msgstr "" #: ../libvips/draw/draw_circle.c:235 msgid "cx" msgstr "" #: ../libvips/draw/draw_circle.c:236 ../libvips/draw/draw_circle.c:243 msgid "Centre of draw_circle" msgstr "" #: ../libvips/draw/draw_circle.c:242 msgid "cy" msgstr "" #: ../libvips/draw/draw_circle.c:250 msgid "Radius in pixels" msgstr "" #: ../libvips/draw/draw_circle.c:256 ../libvips/draw/draw_rect.c:201 msgid "Fill" msgstr "" #: ../libvips/draw/draw_circle.c:257 ../libvips/draw/draw_rect.c:202 msgid "Draw a solid object" msgstr "" #: ../libvips/draw/draw_flood.c:548 msgid "flood-fill an area" msgstr "" #: ../libvips/draw/draw_flood.c:553 ../libvips/draw/draw_flood.c:560 msgid "DrawFlood start point" msgstr "" #: ../libvips/draw/draw_flood.c:566 msgid "Test" msgstr "" #: ../libvips/draw/draw_flood.c:567 msgid "Test pixels in this image" msgstr "" #: ../libvips/draw/draw_flood.c:572 msgid "Equal" msgstr "" #: ../libvips/draw/draw_flood.c:573 msgid "DrawFlood while equal to edge" msgstr "" #: ../libvips/draw/draw_flood.c:580 msgid "Left edge of modified area" msgstr "" #: ../libvips/draw/draw_flood.c:587 msgid "top edge of modified area" msgstr "" #: ../libvips/draw/draw_flood.c:594 msgid "width of modified area" msgstr "" #: ../libvips/draw/draw_flood.c:601 msgid "height of modified area" msgstr "" #: ../libvips/draw/draw_rect.c:169 msgid "paint a rectangle on an image" msgstr "" #: ../libvips/foreign/foreign.c:357 msgid "load and save image files" msgstr "" #: ../libvips/foreign/foreign.c:520 ../libvips/mosaicing/im_remosaic.c:87 #, c-format msgid "file \"%s\" not found" msgstr "" #: ../libvips/foreign/foreign.c:529 ../libvips/foreign/foreign.c:1592 #, c-format msgid "\"%s\" is not a known file format" msgstr "" #: ../libvips/foreign/foreign.c:605 msgid "buffer is not in a known format" msgstr "" #: ../libvips/foreign/foreign.c:773 msgid "images do not match" msgstr "" #: ../libvips/foreign/foreign.c:880 msgid "" "VIPS_FOREIGN_PARTIAL and VIPS_FOREIGN_SEQUENTIAL both set -- using SEQUENTIAL" msgstr "" #: ../libvips/foreign/foreign.c:900 msgid "" "ignoring deprecated \"sequential\" mode -- please use \"access\" instead" msgstr "" #: ../libvips/foreign/foreign.c:979 msgid "file loaders" msgstr "" #: ../libvips/foreign/foreign.c:990 msgid "Flags" msgstr "" #: ../libvips/foreign/foreign.c:991 msgid "Flags for this file" msgstr "" #: ../libvips/foreign/foreign.c:997 msgid "Disc" msgstr "" #: ../libvips/foreign/foreign.c:998 msgid "Open to disc" msgstr "" #: ../libvips/foreign/foreign.c:1005 msgid "Required access pattern for this file" msgstr "" #: ../libvips/foreign/foreign.c:1011 msgid "Sequential" msgstr "" #: ../libvips/foreign/foreign.c:1012 msgid "Sequential read only" msgstr "" #: ../libvips/foreign/foreign.c:1018 msgid "Fail" msgstr "" #: ../libvips/foreign/foreign.c:1019 msgid "Fail on first warning" msgstr "" #: ../libvips/foreign/foreign.c:1499 msgid "file savers" msgstr "" #: ../libvips/foreign/foreign.c:1523 msgid "Image to save" msgstr "" #: ../libvips/foreign/foreign.c:1528 msgid "Strip" msgstr "" #: ../libvips/foreign/foreign.c:1529 msgid "Strip all metadata from image" msgstr "" #: ../libvips/foreign/foreign.c:1667 #, c-format msgid "\"%s\" is not a known buffer format" msgstr "" #: ../libvips/foreign/ppm.c:116 msgid "bad int" msgstr "" #: ../libvips/foreign/ppm.c:128 msgid "bad float" msgstr "" #: ../libvips/foreign/ppm.c:179 msgid "bad magic number" msgstr "" #: ../libvips/foreign/ppm.c:230 msgid "not whitespace before start of binary data" msgstr "" #: ../libvips/foreign/ppm.c:621 ../libvips/foreign/ppm.c:638 #: ../libvips/foreign/ppm.c:672 ../libvips/foreign/ppm.c:686 msgid "write error" msgstr "" #: ../libvips/foreign/ppm.c:803 msgid "float images must be binary -- disabling ascii" msgstr "" #: ../libvips/foreign/ppm.c:813 ../libvips/foreign/vips2tiff.c:1001 msgid "can only squash 1 band uchar images -- disabling squash" msgstr "" #: ../libvips/foreign/csvsave.c:95 msgid "save image to csv file" msgstr "" #: ../libvips/foreign/csvsave.c:103 ../libvips/foreign/pngload.c:144 #: ../libvips/foreign/webpload.c:192 ../libvips/foreign/pngsave.c:189 #: ../libvips/foreign/fitsload.c:123 ../libvips/foreign/matrixsave.c:121 #: ../libvips/foreign/ppmsave.c:123 ../libvips/foreign/csvload.c:141 #: ../libvips/foreign/ppmload.c:135 ../libvips/foreign/magickload.c:223 #: ../libvips/foreign/gifload.c:892 ../libvips/foreign/magick7load.c:803 #: ../libvips/foreign/fitssave.c:138 ../libvips/foreign/pdfload.c:590 #: ../libvips/foreign/openslideload.c:187 ../libvips/foreign/rawload.c:116 #: ../libvips/foreign/tiffsave.c:362 ../libvips/foreign/svgload.c:368 #: ../libvips/foreign/radsave.c:154 ../libvips/foreign/dzsave.c:2319 #: ../libvips/foreign/radload.c:138 ../libvips/foreign/openexrload.c:144 #: ../libvips/foreign/vipssave.c:114 ../libvips/foreign/webpsave.c:214 #: ../libvips/foreign/rawsave.c:145 ../libvips/foreign/jpegsave.c:268 #: ../libvips/foreign/matrixload.c:153 ../libvips/foreign/jpegload.c:232 #: ../libvips/foreign/analyzeload.c:135 ../libvips/foreign/matload.c:133 #: ../libvips/foreign/vipsload.c:138 ../libvips/foreign/tiffload.c:223 #: ../libvips/iofuncs/image.c:1200 ../libvips/resample/thumbnail.c:669 msgid "Filename" msgstr "" #: ../libvips/foreign/csvsave.c:104 ../libvips/foreign/pngsave.c:190 #: ../libvips/foreign/matrixsave.c:122 ../libvips/foreign/ppmsave.c:124 #: ../libvips/foreign/fitssave.c:139 ../libvips/foreign/tiffsave.c:363 #: ../libvips/foreign/radsave.c:155 ../libvips/foreign/dzsave.c:2320 #: ../libvips/foreign/vipssave.c:115 ../libvips/foreign/webpsave.c:215 #: ../libvips/foreign/rawsave.c:146 ../libvips/foreign/jpegsave.c:269 msgid "Filename to save to" msgstr "" #: ../libvips/foreign/csvsave.c:110 ../libvips/foreign/csvload.c:169 msgid "Separator" msgstr "" #: ../libvips/foreign/csvsave.c:111 msgid "Separator characters" msgstr "" #: ../libvips/foreign/webp2vips.c:199 msgid "bad setting for shrink" msgstr "" #: ../libvips/foreign/webp2vips.c:247 msgid "unable to read image metadata" msgstr "" #: ../libvips/foreign/webp2vips.c:290 ../libvips/foreign/webp2vips.c:340 #: ../libvips/foreign/matlab.c:113 ../libvips/foreign/fits.c:189 #: ../libvips/iofuncs/vips.c:163 ../libvips/mosaicing/global_balance.c:1192 #: ../libvips/mosaicing/global_balance.c:1530 #, c-format msgid "unable to open \"%s\"" msgstr "" #: ../libvips/foreign/webp2vips.c:323 ../libvips/foreign/magick2vips.c:723 msgid "unable to read pixels" msgstr "" #: ../libvips/foreign/webp2vips.c:360 ../libvips/foreign/webp2vips.c:382 msgid "unable to open buffer" msgstr "" #: ../libvips/foreign/pngload.c:128 msgid "load png from file" msgstr "" #: ../libvips/foreign/pngload.c:145 ../libvips/foreign/webpload.c:193 #: ../libvips/foreign/fitsload.c:124 ../libvips/foreign/csvload.c:142 #: ../libvips/foreign/ppmload.c:136 ../libvips/foreign/magickload.c:224 #: ../libvips/foreign/gifload.c:893 ../libvips/foreign/magick7load.c:804 #: ../libvips/foreign/pdfload.c:591 ../libvips/foreign/openslideload.c:188 #: ../libvips/foreign/rawload.c:117 ../libvips/foreign/svgload.c:369 #: ../libvips/foreign/radload.c:139 ../libvips/foreign/openexrload.c:145 #: ../libvips/foreign/matrixload.c:154 ../libvips/foreign/jpegload.c:233 #: ../libvips/foreign/analyzeload.c:136 ../libvips/foreign/matload.c:134 #: ../libvips/foreign/vipsload.c:139 ../libvips/foreign/tiffload.c:224 msgid "Filename to load from" msgstr "" #: ../libvips/foreign/pngload.c:222 msgid "load png from buffer" msgstr "" #: ../libvips/foreign/pngload.c:230 ../libvips/foreign/webpload.c:268 #: ../libvips/foreign/pngsave.c:255 ../libvips/foreign/magickload.c:307 #: ../libvips/foreign/gifload.c:977 ../libvips/foreign/magick7load.c:900 #: ../libvips/foreign/pdfload.c:652 ../libvips/foreign/tiffsave.c:437 #: ../libvips/foreign/svgload.c:531 ../libvips/foreign/radsave.c:217 #: ../libvips/foreign/dzsave.c:2406 ../libvips/foreign/webpsave.c:285 #: ../libvips/foreign/jpegsave.c:340 ../libvips/foreign/jpegload.c:311 #: ../libvips/foreign/tiffload.c:314 ../libvips/resample/thumbnail.c:836 msgid "Buffer" msgstr "" #: ../libvips/foreign/pngload.c:231 ../libvips/foreign/webpload.c:269 #: ../libvips/foreign/magickload.c:308 ../libvips/foreign/gifload.c:978 #: ../libvips/foreign/magick7load.c:901 ../libvips/foreign/pdfload.c:653 #: ../libvips/foreign/svgload.c:532 ../libvips/foreign/jpegload.c:312 #: ../libvips/foreign/tiffload.c:315 ../libvips/resample/thumbnail.c:837 msgid "Buffer to load from" msgstr "" #: ../libvips/foreign/matlab.c:121 #, c-format msgid "no matrix variables in \"%s\"" msgstr "" #: ../libvips/foreign/matlab.c:203 #, c-format msgid "unsupported rank %d\n" msgstr "" #: ../libvips/foreign/matlab.c:211 #, c-format msgid "unsupported class type %d\n" msgstr "" #: ../libvips/foreign/matlab.c:260 msgid "Mat_VarReadDataAll failed" msgstr "" #: ../libvips/foreign/webpload.c:94 msgid "load webp" msgstr "" #: ../libvips/foreign/webpload.c:100 ../libvips/foreign/jpegload.c:137 msgid "Shrink" msgstr "" #: ../libvips/foreign/webpload.c:101 ../libvips/foreign/jpegload.c:138 msgid "Shrink factor on load" msgstr "" #: ../libvips/foreign/webpload.c:181 msgid "load webp from file" msgstr "" #: ../libvips/foreign/webpload.c:257 msgid "load webp from buffer" msgstr "" #: ../libvips/foreign/pngsave.c:100 msgid "save png" msgstr "" #: ../libvips/foreign/pngsave.c:108 ../libvips/foreign/tiffsave.c:181 #: ../libvips/foreign/dzsave.c:2200 msgid "Compression" msgstr "" #: ../libvips/foreign/pngsave.c:109 msgid "Compression factor" msgstr "" #: ../libvips/foreign/pngsave.c:115 ../libvips/foreign/jpegsave.c:170 msgid "Interlace" msgstr "" #: ../libvips/foreign/pngsave.c:116 msgid "Interlace image" msgstr "" #: ../libvips/foreign/pngsave.c:122 ../libvips/foreign/jpegsave.c:156 msgid "Profile" msgstr "" #: ../libvips/foreign/pngsave.c:123 ../libvips/foreign/tiffsave.c:205 #: ../libvips/foreign/jpegsave.c:157 msgid "ICC profile to embed" msgstr "" #: ../libvips/foreign/pngsave.c:129 msgid "Filter" msgstr "" #: ../libvips/foreign/pngsave.c:130 msgid "libpng row filter flag(s)" msgstr "" #: ../libvips/foreign/pngsave.c:185 msgid "save image to png file" msgstr "" #: ../libvips/foreign/pngsave.c:251 msgid "save image to png buffer" msgstr "" #: ../libvips/foreign/pngsave.c:256 ../libvips/foreign/tiffsave.c:438 #: ../libvips/foreign/radsave.c:218 ../libvips/foreign/dzsave.c:2407 #: ../libvips/foreign/webpsave.c:286 ../libvips/foreign/jpegsave.c:341 msgid "Buffer to save to" msgstr "" #: ../libvips/foreign/tiff2vips.c:333 ../libvips/foreign/tiff2vips.c:351 #, c-format msgid "required field %d missing" msgstr "" #: ../libvips/foreign/tiff2vips.c:393 msgid "unknown resolution unit" msgstr "" #: ../libvips/foreign/tiff2vips.c:398 #, c-format msgid "" "no resolution information for TIFF image \"%s\" -- defaulting to 1 pixel per " "mm" msgstr "" #: ../libvips/foreign/tiff2vips.c:465 msgid "read error" msgstr "" #: ../libvips/foreign/tiff2vips.c:482 #, c-format msgid "TIFF does not contain page %d" msgstr "" #: ../libvips/foreign/tiff2vips.c:516 #, c-format msgid "not %d bands" msgstr "" #: ../libvips/foreign/tiff2vips.c:530 #, c-format msgid "not at least %d samples per pixel" msgstr "" #: ../libvips/foreign/tiff2vips.c:544 #, c-format msgid "not photometric interpretation %d" msgstr "" #: ../libvips/foreign/tiff2vips.c:557 #, c-format msgid "not %d bits per sample" msgstr "" #: ../libvips/foreign/tiff2vips.c:573 #, c-format msgid "%d bits per sample palette image not supported" msgstr "" #: ../libvips/foreign/tiff2vips.c:630 msgid "unsupported tiff image type\n" msgstr "" #: ../libvips/foreign/tiff2vips.c:1038 msgid "bad colormap" msgstr "bad colourmap" #: ../libvips/foreign/tiff2vips.c:1059 msgid "assuming 8-bit palette" msgstr "" #: ../libvips/foreign/tiff2vips.c:1594 msgid "tiled separate planes not supported" msgstr "" #: ../libvips/foreign/tiff2vips.c:1616 ../libvips/foreign/tiff2vips.c:1883 msgid "unsupported tiff image type" msgstr "" #: ../libvips/foreign/tiff2vips.c:1981 #, c-format msgid "bad page number %d" msgstr "" #: ../libvips/foreign/tiff2vips.c:1991 #, c-format msgid "bad number of pages %d" msgstr "" #: ../libvips/foreign/tiff2vips.c:2022 msgid "width/height out of range" msgstr "" #: ../libvips/foreign/tiff2vips.c:2031 msgid "samples out of range" msgstr "" #: ../libvips/foreign/tiff2vips.c:2160 #, c-format msgid "page %d differs from page %d" msgstr "" #: ../libvips/foreign/fitsload.c:110 msgid "load a FITS image" msgstr "" #: ../libvips/foreign/matrixsave.c:112 msgid "save image to matrix file" msgstr "" #: ../libvips/foreign/matrixsave.c:192 msgid "print matrix" msgstr "" #: ../libvips/foreign/vips2webp.c:128 msgid "output webp image too large" msgstr "" #: ../libvips/foreign/vips2webp.c:134 ../libvips/iofuncs/util.c:738 msgid "out of memory" msgstr "" #: ../libvips/foreign/vips2webp.c:242 ../libvips/foreign/vips2webp.c:252 msgid "config version error" msgstr "" #: ../libvips/foreign/vips2webp.c:266 msgid "lossless unsupported" msgstr "" #: ../libvips/foreign/vips2webp.c:268 msgid "alpha_q unsupported" msgstr "" #: ../libvips/foreign/vips2webp.c:278 msgid "near_lossless unsupported" msgstr "" #: ../libvips/foreign/vips2webp.c:280 msgid "smart_subsample unsupported" msgstr "" #: ../libvips/foreign/vips2webp.c:284 msgid "invalid configuration" msgstr "" #: ../libvips/foreign/vips2webp.c:302 msgid "picture memory error" msgstr "" #: ../libvips/foreign/vips2webp.c:308 msgid "unable to encode" msgstr "" #: ../libvips/foreign/vips2webp.c:526 ../libvips/foreign/vips2webp.c:579 msgid "picture version error" msgstr "" #: ../libvips/foreign/tiff.c:123 #, c-format msgid "unable to open \"%s\" for output" msgstr "" #: ../libvips/foreign/tiff.c:169 #, c-format msgid "unable to open \"%s\" for input" msgstr "" #: ../libvips/foreign/tiff.c:195 msgid "read beyond end of buffer" msgstr "" #: ../libvips/foreign/tiff.c:291 msgid "unable to open memory buffer for input" msgstr "" #: ../libvips/foreign/tiff.c:348 msgid "Out of memory." msgstr "" #: ../libvips/foreign/tiff.c:450 msgid "unable to open memory buffer for output" msgstr "" #: ../libvips/foreign/ppmsave.c:114 msgid "save image to ppm file" msgstr "" #: ../libvips/foreign/ppmsave.c:130 msgid "ASCII" msgstr "" #: ../libvips/foreign/ppmsave.c:131 msgid "save as ascii" msgstr "" #: ../libvips/foreign/ppmsave.c:137 ../libvips/foreign/tiffsave.c:239 msgid "Squash" msgstr "" #: ../libvips/foreign/ppmsave.c:138 msgid "save as one bit" msgstr "" #. Only a warning, since (for example) exported spreadsheets #. * will often have text or date fields. #. #: ../libvips/foreign/csv.c:198 #, c-format msgid "error parsing number, line %d, column %d" msgstr "" #: ../libvips/foreign/csv.c:256 msgid "end of file while skipping start" msgstr "" #: ../libvips/foreign/csv.c:265 ../libvips/iofuncs/util.c:1050 #: ../libvips/iofuncs/util.c:1056 msgid "unable to seek" msgstr "" #: ../libvips/foreign/csv.c:276 msgid "empty line" msgstr "" #: ../libvips/foreign/csv.c:316 #, c-format msgid "unexpected EOF, line %d col %d" msgstr "" #: ../libvips/foreign/csv.c:322 #, c-format msgid "unexpected EOL, line %d col %d" msgstr "" #: ../libvips/foreign/csv.c:554 msgid "no width / height" msgstr "" #: ../libvips/foreign/csv.c:560 msgid "width / height not int" msgstr "" #: ../libvips/foreign/csv.c:570 msgid "width / height out of range" msgstr "" #: ../libvips/foreign/csv.c:574 msgid "extra chars in header" msgstr "" #: ../libvips/foreign/csv.c:578 msgid "zero scale" msgstr "" #: ../libvips/foreign/csv.c:626 msgid "line too short" msgstr "" #: ../libvips/foreign/csv.c:670 #, c-format msgid "line %d too short" msgstr "" #: ../libvips/foreign/csvload.c:126 msgid "load csv from file" msgstr "" #: ../libvips/foreign/csvload.c:148 msgid "Skip" msgstr "" #: ../libvips/foreign/csvload.c:149 msgid "Skip this many lines at the start of the file" msgstr "" #: ../libvips/foreign/csvload.c:155 msgid "Lines" msgstr "" #: ../libvips/foreign/csvload.c:156 msgid "Read this many lines from the file" msgstr "" #: ../libvips/foreign/csvload.c:162 msgid "Whitespace" msgstr "" #: ../libvips/foreign/csvload.c:163 msgid "Set of whitespace characters" msgstr "" #: ../libvips/foreign/csvload.c:170 msgid "Set of separator characters" msgstr "" #: ../libvips/foreign/vipspng.c:307 msgid "unsupported color type" msgstr "unsupported colour type" #: ../libvips/foreign/vipspng.c:417 msgid "unable to read PNG header" msgstr "" #: ../libvips/foreign/vipspng.c:504 ../libvips/foreign/jpeg2vips.c:560 #, c-format msgid "out of order read at line %d" msgstr "" #: ../libvips/foreign/vipspng.c:878 msgid "compress should be in [0,9]" msgstr "" #: ../libvips/foreign/vipspng.c:900 #, c-format msgid "can't save %d band image as png" msgstr "" #: ../libvips/foreign/vipspng.c:1010 #, c-format msgid "unable to write \"%s\"" msgstr "" #: ../libvips/foreign/vipspng.c:1078 msgid "unable to write to buffer" msgstr "" #: ../libvips/foreign/vips2jpeg.c:148 #, c-format msgid "%s" msgstr "" #: ../libvips/foreign/vips2jpeg.c:254 #, c-format msgid "field \"%s\" is too large for a single JPEG marker, ignoring" msgstr "" #: ../libvips/foreign/vips2jpeg.c:496 msgid "trellis_quant unsupported" msgstr "" #: ../libvips/foreign/vips2jpeg.c:509 msgid "overshoot_deringing unsupported" msgstr "" #: ../libvips/foreign/vips2jpeg.c:523 ../libvips/foreign/vips2jpeg.c:550 msgid "ignoring optimize_scans" msgstr "" #: ../libvips/foreign/vips2jpeg.c:527 msgid "ignoring optimize_scans for baseline" msgstr "" #: ../libvips/foreign/vips2jpeg.c:539 msgid "setting quant_table unsupported" msgstr "" #: ../libvips/foreign/vips2jpeg.c:546 msgid "ignoring trellis_quant" msgstr "" #: ../libvips/foreign/vips2jpeg.c:548 msgid "ignoring overshoot_deringing" msgstr "" #: ../libvips/foreign/vips2jpeg.c:552 msgid "ignoring quant_table" msgstr "" #: ../libvips/foreign/ppmload.c:119 msgid "load ppm from file" msgstr "" #: ../libvips/foreign/magickload.c:105 msgid "load with ImageMagick" msgstr "" #: ../libvips/foreign/magickload.c:117 ../libvips/foreign/magick7load.c:379 msgid "all_frames" msgstr "" #: ../libvips/foreign/magickload.c:118 ../libvips/foreign/magick7load.c:380 msgid "Read all frames from an image" msgstr "" #: ../libvips/foreign/magickload.c:124 ../libvips/foreign/magick7load.c:386 msgid "Density" msgstr "" #: ../libvips/foreign/magickload.c:125 ../libvips/foreign/magick7load.c:387 msgid "Canvas resolution for rendering vector formats like SVG" msgstr "" #: ../libvips/foreign/magickload.c:131 ../libvips/foreign/gifload.c:816 #: ../libvips/foreign/magick7load.c:393 ../libvips/foreign/pdfload.c:468 #: ../libvips/foreign/tiffload.c:99 msgid "Page" msgstr "" #: ../libvips/foreign/magickload.c:132 ../libvips/foreign/gifload.c:817 #: ../libvips/foreign/magick7load.c:394 ../libvips/foreign/pdfload.c:469 msgid "Load this page from the file" msgstr "" #: ../libvips/foreign/magickload.c:139 ../libvips/foreign/gifload.c:824 #: ../libvips/foreign/magick7load.c:401 ../libvips/foreign/pdfload.c:476 #: ../libvips/foreign/tiffload.c:107 msgid "Load this many pages" msgstr "" #: ../libvips/foreign/magickload.c:216 msgid "load file with ImageMagick" msgstr "" #: ../libvips/foreign/magickload.c:300 msgid "load buffer with ImageMagick" msgstr "" #: ../libvips/foreign/openexr2vips.c:121 #, c-format msgid "EXR error: %s" msgstr "" #: ../libvips/foreign/gifload.c:145 msgid "Failed to open given file" msgstr "" #: ../libvips/foreign/gifload.c:148 msgid "Failed to read from given file" msgstr "" #: ../libvips/foreign/gifload.c:151 msgid "Data is not a GIF file" msgstr "" #: ../libvips/foreign/gifload.c:154 msgid "No screen descriptor detected" msgstr "" #: ../libvips/foreign/gifload.c:157 msgid "No image descriptor detected" msgstr "" #: ../libvips/foreign/gifload.c:160 msgid "Neither global nor local color map" msgstr "Neither global nor local colour map" #: ../libvips/foreign/gifload.c:163 msgid "Wrong record type detected" msgstr "" #: ../libvips/foreign/gifload.c:166 msgid "Number of pixels bigger than width * height" msgstr "" #: ../libvips/foreign/gifload.c:169 msgid "Failed to allocate required memory" msgstr "" #: ../libvips/foreign/gifload.c:172 msgid "Failed to close given file" msgstr "" #: ../libvips/foreign/gifload.c:175 msgid "Given file was not opened for read" msgstr "" #: ../libvips/foreign/gifload.c:178 msgid "Image is defective, decoding aborted" msgstr "" #: ../libvips/foreign/gifload.c:181 msgid "Image EOF detected, before image complete" msgstr "" #: ../libvips/foreign/gifload.c:184 msgid "Unknown error" msgstr "" #: ../libvips/foreign/gifload.c:371 msgid "pixel value out of range" msgstr "" #: ../libvips/foreign/gifload.c:411 msgid "frame is outside image area" msgstr "" #: ../libvips/foreign/gifload.c:662 ../libvips/foreign/gifload.c:711 msgid "too few frames in GIF file" msgstr "" #: ../libvips/foreign/gifload.c:809 ../libvips/foreign/gifload.c:884 #: ../libvips/foreign/gifload.c:971 msgid "load GIF with giflib" msgstr "" #: ../libvips/foreign/magick7load.c:366 msgid "load with ImageMagick7" msgstr "" #: ../libvips/foreign/magick7load.c:419 #, c-format msgid "Magick: %s %s" msgstr "" #: ../libvips/foreign/magick7load.c:474 #, c-format msgid "unsupported bit depth %zd" msgstr "" #: ../libvips/foreign/magick7load.c:506 ../libvips/foreign/magick2vips.c:387 #, c-format msgid "unsupported colorspace %d" msgstr "unsupported colourspace %d" #: ../libvips/foreign/magick7load.c:797 msgid "load file with ImageMagick7" msgstr "" #: ../libvips/foreign/magick7load.c:894 msgid "load buffer with ImageMagick7" msgstr "" #: ../libvips/foreign/openslide2vips.c:195 msgid "invalid associated image name" msgstr "" #: ../libvips/foreign/openslide2vips.c:239 msgid "specify only one of level or associated image" msgstr "" #: ../libvips/foreign/openslide2vips.c:275 msgid "unsupported slide format" msgstr "" #: ../libvips/foreign/openslide2vips.c:282 #, c-format msgid "opening slide: %s" msgstr "" #: ../libvips/foreign/openslide2vips.c:289 msgid "invalid slide level" msgstr "" #: ../libvips/foreign/openslide2vips.c:371 #, c-format msgid "getting dimensions: %s" msgstr "" #: ../libvips/foreign/openslide2vips.c:378 msgid "image dimensions overflow int" msgstr "" #: ../libvips/foreign/openslide2vips.c:505 #, c-format msgid "reading region: %s" msgstr "" #: ../libvips/foreign/openslide2vips.c:587 #, c-format msgid "reading associated image: %s" msgstr "" #: ../libvips/foreign/exif.c:158 msgid "unable to init exif" msgstr "" #: ../libvips/foreign/exif.c:413 ../libvips/foreign/exif.c:788 msgid "unknown EXIF resolution unit" msgstr "" #: ../libvips/foreign/exif.c:918 ../libvips/foreign/exif.c:928 #: ../libvips/foreign/exif.c:933 #, c-format msgid "bad exif meta \"%s\"" msgstr "" #: ../libvips/foreign/exif.c:1097 msgid "error saving EXIF" msgstr "" #: ../libvips/foreign/fitssave.c:129 msgid "save image to fits file" msgstr "" #: ../libvips/foreign/pdfload.c:189 #, c-format msgid "unable to load page %d" msgstr "" #: ../libvips/foreign/pdfload.c:281 msgid "pages out of range" msgstr "" #: ../libvips/foreign/pdfload.c:459 msgid "load PDF with libpoppler" msgstr "" #: ../libvips/foreign/pdfload.c:483 ../libvips/foreign/svgload.c:284 msgid "Render at this DPI" msgstr "" #: ../libvips/foreign/pdfload.c:490 ../libvips/foreign/svgload.c:291 msgid "Scale output by this factor" msgstr "" #: ../libvips/foreign/magick2vips.c:293 #, c-format msgid "unsupported image type %d" msgstr "" #: ../libvips/foreign/magick2vips.c:355 #, c-format msgid "unsupported bit depth %d" msgstr "" #: ../libvips/foreign/magick2vips.c:753 #, c-format msgid "" "unable to read file \"%s\"\n" "libMagick error: %s %s" msgstr "" #: ../libvips/foreign/magick2vips.c:792 #, c-format msgid "" "unable to ping file \"%s\"\n" "libMagick error: %s %s" msgstr "" #: ../libvips/foreign/magick2vips.c:804 ../libvips/foreign/magick2vips.c:880 msgid "bad image size" msgstr "" #: ../libvips/foreign/magick2vips.c:835 #, c-format msgid "" "unable to read buffer\n" "libMagick error: %s %s" msgstr "" #: ../libvips/foreign/magick2vips.c:869 #, c-format msgid "" "unable to ping blob\n" "libMagick error: %s %s" msgstr "" #: ../libvips/foreign/fits.c:263 msgid "dimensions above 3 must be size 1" msgstr "" #: ../libvips/foreign/fits.c:279 #, c-format msgid "bad number of axis %d" msgstr "" #: ../libvips/foreign/fits.c:295 #, c-format msgid "unsupported bitpix %d\n" msgstr "" #: ../libvips/foreign/fits.c:612 ../libvips/iofuncs/vips.c:191 #, c-format msgid "unable to write to \"%s\"" msgstr "" #: ../libvips/foreign/fits.c:673 #, c-format msgid "unsupported BandFmt %d\n" msgstr "" #: ../libvips/foreign/openslideload.c:167 msgid "load file with OpenSlide" msgstr "" #: ../libvips/foreign/openslideload.c:194 msgid "Level" msgstr "" #: ../libvips/foreign/openslideload.c:195 msgid "Load this level from the file" msgstr "" #: ../libvips/foreign/openslideload.c:201 msgid "Autocrop" msgstr "" #: ../libvips/foreign/openslideload.c:202 msgid "Crop to image bounds" msgstr "" #: ../libvips/foreign/openslideload.c:208 msgid "Associated" msgstr "" #: ../libvips/foreign/openslideload.c:209 msgid "Load this associated image" msgstr "" #: ../libvips/foreign/rawload.c:108 msgid "load raw data from a file" msgstr "" #: ../libvips/foreign/rawload.c:144 ../libvips/iofuncs/image.c:1228 msgid "Size of header" msgstr "" #: ../libvips/foreign/rawload.c:145 ../libvips/iofuncs/image.c:1229 msgid "Offset in bytes from start of file" msgstr "" #: ../libvips/foreign/jpeg2vips.c:187 #, c-format msgid "read gave %ld warnings" msgstr "" #: ../libvips/foreign/jpeg2vips.c:387 msgid "unknown JFIF resolution unit" msgstr "" #: ../libvips/foreign/tiffsave.c:172 ../libvips/foreign/tiffsave.c:358 msgid "save image to tiff file" msgstr "" #: ../libvips/foreign/tiffsave.c:182 msgid "Compression for this file" msgstr "" #: ../libvips/foreign/tiffsave.c:189 ../libvips/foreign/webpsave.c:115 #: ../libvips/foreign/jpegsave.c:149 msgid "Q" msgstr "" #: ../libvips/foreign/tiffsave.c:190 ../libvips/foreign/webpsave.c:116 #: ../libvips/foreign/jpegsave.c:150 msgid "Q factor" msgstr "" #: ../libvips/foreign/tiffsave.c:196 msgid "predictor" msgstr "" #: ../libvips/foreign/tiffsave.c:197 msgid "Compression prediction" msgstr "" #: ../libvips/foreign/tiffsave.c:204 msgid "profile" msgstr "" #: ../libvips/foreign/tiffsave.c:211 msgid "Tile" msgstr "" #: ../libvips/foreign/tiffsave.c:212 msgid "Write a tiled tiff" msgstr "" #: ../libvips/foreign/tiffsave.c:232 msgid "Pyramid" msgstr "" #: ../libvips/foreign/tiffsave.c:233 msgid "Write a pyramidal tiff" msgstr "" #: ../libvips/foreign/tiffsave.c:240 msgid "Squash images down to 1 bit" msgstr "" #: ../libvips/foreign/tiffsave.c:246 msgid "Miniswhite" msgstr "" #: ../libvips/foreign/tiffsave.c:247 msgid "Use 0 for white in 1-bit images" msgstr "" #: ../libvips/foreign/tiffsave.c:253 ../libvips/foreign/tiffsave.c:254 msgid "Resolution unit" msgstr "" #: ../libvips/foreign/tiffsave.c:274 msgid "Bigtiff" msgstr "" #: ../libvips/foreign/tiffsave.c:275 msgid "Write a bigtiff image" msgstr "" #: ../libvips/foreign/tiffsave.c:281 msgid "RGB JPEG" msgstr "" #: ../libvips/foreign/tiffsave.c:282 msgid "Output RGB JPEG rather than YCbCr" msgstr "" #: ../libvips/foreign/tiffsave.c:288 ../libvips/foreign/dzsave.c:2193 msgid "Properties" msgstr "" #: ../libvips/foreign/tiffsave.c:289 msgid "Write a properties document to IMAGEDESCRIPTION" msgstr "" #: ../libvips/foreign/tiffsave.c:433 msgid "save image to tiff buffer" msgstr "" #: ../libvips/foreign/svgload.c:207 msgid "SVG rendering failed" msgstr "" #: ../libvips/foreign/svgload.c:274 msgid "load SVG with rsvg" msgstr "" #: ../libvips/foreign/radsave.c:97 msgid "save Radiance" msgstr "" #: ../libvips/foreign/radsave.c:150 msgid "save image to Radiance file" msgstr "" #: ../libvips/foreign/radsave.c:213 msgid "save image to Radiance buffer" msgstr "" #: ../libvips/foreign/dzsave.c:181 ../libvips/iofuncs/vips.c:712 #, c-format msgid "unable to set property \"%s\" to value \"%s\"." msgstr "" #: ../libvips/foreign/dzsave.c:196 #, c-format msgid "unable to set create node \"%s\"" msgstr "" #: ../libvips/foreign/dzsave.c:252 ../libvips/foreign/dzsave.c:257 #: ../libvips/foreign/dzsave.c:284 ../libvips/iofuncs/vips.c:849 #: ../libvips/iofuncs/vips.c:856 msgid "xml save error" msgstr "" #: ../libvips/foreign/dzsave.c:351 ../libvips/foreign/dzsave.c:357 msgid "unable to close stream" msgstr "" #: ../libvips/foreign/dzsave.c:1395 msgid "too many files in zip" msgstr "" #: ../libvips/foreign/dzsave.c:1405 msgid "output file too large" msgstr "" #: ../libvips/foreign/dzsave.c:1762 msgid "overlap too large" msgstr "" #: ../libvips/foreign/dzsave.c:1904 #, c-format msgid "output directory %s/%s_files exists" msgstr "" #: ../libvips/foreign/dzsave.c:1932 ../libvips/iofuncs/util.c:1625 #, c-format msgid "unable to make temporary file %s" msgstr "" #: ../libvips/foreign/dzsave.c:2002 msgid "deflate-level not supported by libgsf, using default compression" msgstr "" #: ../libvips/foreign/dzsave.c:2117 msgid "save image to deep zoom format" msgstr "" #: ../libvips/foreign/dzsave.c:2127 msgid "Base name" msgstr "" #: ../libvips/foreign/dzsave.c:2128 msgid "Base name to save to" msgstr "" #: ../libvips/foreign/dzsave.c:2134 msgid "Layout" msgstr "" #: ../libvips/foreign/dzsave.c:2135 msgid "Directory layout" msgstr "" #: ../libvips/foreign/dzsave.c:2142 msgid "suffix" msgstr "" #: ../libvips/foreign/dzsave.c:2143 msgid "Filename suffix for tiles" msgstr "" #: ../libvips/foreign/dzsave.c:2149 msgid "Overlap" msgstr "" #: ../libvips/foreign/dzsave.c:2150 msgid "Tile overlap in pixels" msgstr "" #: ../libvips/foreign/dzsave.c:2156 msgid "Tile size" msgstr "" #: ../libvips/foreign/dzsave.c:2157 msgid "Tile size in pixels" msgstr "" #: ../libvips/foreign/dzsave.c:2164 msgid "Pyramid depth" msgstr "" #: ../libvips/foreign/dzsave.c:2171 msgid "Center" msgstr "" #: ../libvips/foreign/dzsave.c:2172 msgid "Center image in tile" msgstr "" #: ../libvips/foreign/dzsave.c:2179 msgid "Rotate image during save" msgstr "" #: ../libvips/foreign/dzsave.c:2185 msgid "Container" msgstr "" #: ../libvips/foreign/dzsave.c:2186 msgid "Pyramid container type" msgstr "" #: ../libvips/foreign/dzsave.c:2194 msgid "Write a properties file to the output directory" msgstr "" #: ../libvips/foreign/dzsave.c:2201 msgid "ZIP deflate compression level" msgstr "" #: ../libvips/foreign/dzsave.c:2210 msgid "Directory name" msgstr "" #: ../libvips/foreign/dzsave.c:2211 msgid "Directory name to save to" msgstr "" #: ../libvips/foreign/dzsave.c:2315 msgid "save image to deepzoom file" msgstr "" #: ../libvips/foreign/dzsave.c:2377 ../libvips/iofuncs/image.c:2590 #: ../libvips/iofuncs/image.c:2592 ../libvips/iofuncs/memory.c:309 #: ../libvips/iofuncs/memory.c:311 #, c-format msgid "out of memory --- size == %dMB" msgstr "" #: ../libvips/foreign/dzsave.c:2402 msgid "save image to dz buffer" msgstr "" #: ../libvips/foreign/radload.c:122 msgid "load a Radiance image from a file" msgstr "" #: ../libvips/foreign/openexrload.c:128 msgid "load an OpenEXR image" msgstr "" #: ../libvips/foreign/vipssave.c:104 msgid "save image to vips file" msgstr "" #: ../libvips/foreign/webpsave.c:107 msgid "save webp" msgstr "" #: ../libvips/foreign/webpsave.c:122 msgid "lossless" msgstr "" #: ../libvips/foreign/webpsave.c:123 msgid "enable lossless compression" msgstr "" #: ../libvips/foreign/webpsave.c:129 msgid "preset" msgstr "" #: ../libvips/foreign/webpsave.c:130 msgid "Preset for lossy compression" msgstr "" #: ../libvips/foreign/webpsave.c:137 msgid "Smart subsampling" msgstr "" #: ../libvips/foreign/webpsave.c:138 msgid "Enable high quality chroma subsampling" msgstr "" #: ../libvips/foreign/webpsave.c:144 msgid "Near lossless" msgstr "" #: ../libvips/foreign/webpsave.c:145 msgid "Enable preprocessing in lossless mode (uses Q)" msgstr "" #: ../libvips/foreign/webpsave.c:151 msgid "Alpha quality" msgstr "" #: ../libvips/foreign/webpsave.c:152 msgid "Change alpha plane fidelity for lossy compression" msgstr "" #: ../libvips/foreign/webpsave.c:210 msgid "save image to webp file" msgstr "" #: ../libvips/foreign/webpsave.c:281 msgid "save image to webp buffer" msgstr "" #: ../libvips/foreign/webpsave.c:330 ../libvips/foreign/jpegsave.c:386 msgid "error writing output" msgstr "" #: ../libvips/foreign/webpsave.c:346 msgid "save image to webp mime" msgstr "" #: ../libvips/foreign/radiance.c:685 msgid "end of file" msgstr "" #: ../libvips/foreign/radiance.c:773 msgid "scanline length mismatch" msgstr "" #: ../libvips/foreign/radiance.c:790 msgid "overrun" msgstr "" #: ../libvips/foreign/radiance.c:1040 msgid "error reading radiance header" msgstr "" #: ../libvips/foreign/radiance.c:1057 msgid "image size out of bounds" msgstr "" #: ../libvips/foreign/radiance.c:1125 #, c-format msgid "read error line %d" msgstr "" #: ../libvips/foreign/rawsave.c:139 msgid "save image to raw file" msgstr "" #: ../libvips/foreign/rawsave.c:245 msgid "write raw image to file descriptor" msgstr "" #: ../libvips/foreign/rawsave.c:251 msgid "File descriptor" msgstr "" #: ../libvips/foreign/rawsave.c:252 msgid "File descriptor to write to" msgstr "" #: ../libvips/foreign/jpegsave.c:139 msgid "save jpeg" msgstr "" #: ../libvips/foreign/jpegsave.c:163 msgid "Optimize_coding" msgstr "" #: ../libvips/foreign/jpegsave.c:164 msgid "Compute optimal Huffman coding tables" msgstr "" #: ../libvips/foreign/jpegsave.c:171 msgid "Generate an interlaced (progressive) jpeg" msgstr "" #: ../libvips/foreign/jpegsave.c:177 msgid "No subsample" msgstr "" #: ../libvips/foreign/jpegsave.c:178 msgid "Disable chroma subsample" msgstr "" #: ../libvips/foreign/jpegsave.c:184 msgid "Trellis quantisation" msgstr "" #: ../libvips/foreign/jpegsave.c:185 msgid "Apply trellis quantisation to each 8x8 block" msgstr "" #: ../libvips/foreign/jpegsave.c:191 msgid "Overshoot de-ringing" msgstr "" #: ../libvips/foreign/jpegsave.c:192 msgid "Apply overshooting to samples with extreme values" msgstr "" #: ../libvips/foreign/jpegsave.c:198 msgid "Optimize scans" msgstr "" #: ../libvips/foreign/jpegsave.c:199 msgid "Split the spectrum of DCT coefficients into separate scans" msgstr "" #: ../libvips/foreign/jpegsave.c:205 msgid "Quantization table" msgstr "" #: ../libvips/foreign/jpegsave.c:206 msgid "Use predefined quantization table with given index" msgstr "" #: ../libvips/foreign/jpegsave.c:264 msgid "save image to jpeg file" msgstr "" #: ../libvips/foreign/jpegsave.c:336 msgid "save image to jpeg buffer" msgstr "" #: ../libvips/foreign/jpegsave.c:402 msgid "save image to jpeg mime" msgstr "" #: ../libvips/foreign/analyze2vips.c:311 msgid "header file size incorrect" msgstr "" #: ../libvips/foreign/analyze2vips.c:356 msgid "header size incorrect" msgstr "" #: ../libvips/foreign/analyze2vips.c:374 #, c-format msgid "%d-dimensional images not supported" msgstr "" #: ../libvips/foreign/analyze2vips.c:427 #, c-format msgid "datatype %d not supported" msgstr "" #: ../libvips/foreign/matrixload.c:137 msgid "load matrix from file" msgstr "" #: ../libvips/foreign/jpegload.c:109 #, c-format msgid "bad shrink factor %d" msgstr "" #: ../libvips/foreign/jpegload.c:131 msgid "load jpeg" msgstr "" #: ../libvips/foreign/jpegload.c:144 ../libvips/foreign/tiffload.c:113 msgid "Autorotate" msgstr "" #: ../libvips/foreign/jpegload.c:145 msgid "Rotate image using exif orientation" msgstr "" #: ../libvips/foreign/jpegload.c:219 msgid "load jpeg from file" msgstr "" #: ../libvips/foreign/jpegload.c:304 msgid "load jpeg from buffer" msgstr "" #: ../libvips/foreign/analyzeload.c:119 msgid "load an Analyze6 image" msgstr "" #: ../libvips/foreign/vips2tiff.c:470 msgid "rounding up IPCT data length" msgstr "" #: ../libvips/foreign/vips2tiff.c:948 #, c-format msgid "image height %d is not a factor of page-height %d" msgstr "" #: ../libvips/foreign/vips2tiff.c:964 msgid "can't pyramid multi page images --- disabling pyramid" msgstr "" #: ../libvips/foreign/vips2tiff.c:977 msgid "tile size not a multiple of 16" msgstr "" #: ../libvips/foreign/vips2tiff.c:988 msgid "can only pyramid LABQ and non-complex images" msgstr "" #: ../libvips/foreign/vips2tiff.c:1009 msgid "can't have 1-bit JPEG -- disabling JPEG" msgstr "" #: ../libvips/foreign/vips2tiff.c:1020 msgid "" "can only save non-complex greyscale images as miniswhite -- disabling " "miniswhite" msgstr "" #: ../libvips/foreign/vips2tiff.c:1043 msgid "image over 4gb, enabling bigtiff" msgstr "" #: ../libvips/foreign/vips2tiff.c:1295 msgid "TIFF write tile failed" msgstr "" #: ../libvips/foreign/matload.c:121 msgid "load mat from file" msgstr "" #: ../libvips/foreign/vipsload.c:122 msgid "load vips from file" msgstr "" #: ../libvips/foreign/tiffload.c:96 msgid "load tiff" msgstr "" #: ../libvips/foreign/tiffload.c:100 msgid "Load this page from the image" msgstr "" #: ../libvips/foreign/tiffload.c:114 msgid "Rotate image using orientation tag" msgstr "" #: ../libvips/foreign/tiffload.c:207 msgid "load tiff from file" msgstr "" #: ../libvips/foreign/tiffload.c:306 msgid "load tiff from buffer" msgstr "" #: ../libvips/freqfilt/spectrum.c:101 msgid "make displayable power spectrum" msgstr "" #: ../libvips/freqfilt/phasecor.c:108 msgid "calculate phase correlation" msgstr "" #: ../libvips/freqfilt/fwfft.c:137 ../libvips/freqfilt/fwfft.c:252 #: ../libvips/freqfilt/invfft.c:120 ../libvips/freqfilt/invfft.c:194 msgid "unable to create transform plan" msgstr "" #: ../libvips/freqfilt/fwfft.c:335 msgid "forward FFT" msgstr "" #: ../libvips/freqfilt/freqmult.c:127 msgid "frequency-domain filtering" msgstr "" #: ../libvips/freqfilt/freqmult.c:131 msgid "mask" msgstr "" #: ../libvips/freqfilt/freqmult.c:132 msgid "Input mask image" msgstr "" #: ../libvips/freqfilt/freqfilt.c:94 msgid "frequency-domain filter operations" msgstr "" #: ../libvips/freqfilt/invfft.c:252 msgid "inverse FFT" msgstr "" #: ../libvips/freqfilt/invfft.c:256 msgid "Real" msgstr "" #: ../libvips/freqfilt/invfft.c:257 msgid "Output only the real part of the transform" msgstr "" #: ../libvips/histogram/hist_match.c:154 msgid "match two histograms" msgstr "" #: ../libvips/histogram/hist_match.c:162 msgid "Input histogram" msgstr "" #: ../libvips/histogram/hist_match.c:167 ../libvips/mosaicing/merge.c:109 #: ../libvips/mosaicing/mosaic.c:180 ../libvips/mosaicing/match.c:204 #: ../libvips/mosaicing/mosaic1.c:489 msgid "Reference" msgstr "" #: ../libvips/histogram/hist_match.c:168 msgid "Reference histogram" msgstr "" #: ../libvips/histogram/hist_cum.c:148 msgid "form cumulative histogram" msgstr "" #: ../libvips/histogram/hist_equal.c:104 msgid "histogram equalisation" msgstr "" #: ../libvips/histogram/hist_equal.c:121 msgid "Equalise with this band" msgstr "" #: ../libvips/histogram/stdif.c:236 ../libvips/histogram/hist_local.c:304 #: ../libvips/morphology/rank.c:354 msgid "window too large" msgstr "" #: ../libvips/histogram/stdif.c:240 msgid "too many bands" msgstr "" #: ../libvips/histogram/stdif.c:290 msgid "statistical difference" msgstr "" #: ../libvips/histogram/stdif.c:309 ../libvips/histogram/hist_local.c:371 #: ../libvips/morphology/rank.c:420 msgid "Window width in pixels" msgstr "" #: ../libvips/histogram/stdif.c:316 ../libvips/histogram/hist_local.c:378 #: ../libvips/morphology/rank.c:427 msgid "Window height in pixels" msgstr "" #: ../libvips/histogram/stdif.c:322 msgid "Mean weight" msgstr "" #: ../libvips/histogram/stdif.c:323 msgid "Weight of new mean" msgstr "" #: ../libvips/histogram/stdif.c:330 msgid "New mean" msgstr "" #: ../libvips/histogram/stdif.c:336 msgid "Deviation weight" msgstr "" #: ../libvips/histogram/stdif.c:337 msgid "Weight of new deviation" msgstr "" #: ../libvips/histogram/stdif.c:343 msgid "Deviation" msgstr "" #: ../libvips/histogram/stdif.c:344 msgid "New deviation" msgstr "" #: ../libvips/histogram/histogram.c:223 msgid "histogram operations" msgstr "" #: ../libvips/histogram/hist_entropy.c:109 msgid "estimate image entropy" msgstr "" #: ../libvips/histogram/hist_entropy.c:114 #: ../libvips/histogram/hist_ismonotonic.c:118 msgid "Input histogram image" msgstr "" #: ../libvips/histogram/hist_ismonotonic.c:113 msgid "test for monotonicity" msgstr "" #: ../libvips/histogram/hist_ismonotonic.c:123 msgid "Monotonic" msgstr "" #: ../libvips/histogram/hist_ismonotonic.c:124 msgid "true if in is monotonic" msgstr "" #: ../libvips/histogram/hist_norm.c:137 msgid "normalise histogram" msgstr "" #: ../libvips/histogram/hist_plot.c:338 msgid "plot histogram" msgstr "" #: ../libvips/histogram/hist_unary.c:85 msgid "hist_unary operations" msgstr "" #: ../libvips/histogram/hist_local.c:354 msgid "local histogram equalisation" msgstr "" #: ../libvips/histogram/hist_local.c:384 msgid "Max slope" msgstr "" #: ../libvips/histogram/hist_local.c:385 msgid "Maximum slope (CLAHE)" msgstr "" #: ../libvips/histogram/percent.c:106 msgid "find threshold for percent of pixels" msgstr "" #: ../libvips/histogram/percent.c:116 msgid "Percent" msgstr "" #: ../libvips/histogram/percent.c:117 msgid "Percent of pixels" msgstr "" #: ../libvips/histogram/percent.c:123 msgid "Threshold" msgstr "" #: ../libvips/histogram/percent.c:124 msgid "Threshold above which lie percent of pixels" msgstr "" #: ../libvips/histogram/maplut.c:110 #, c-format msgid "%d overflows detected" msgstr "" #: ../libvips/histogram/maplut.c:688 msgid "map an image though a lut" msgstr "" #: ../libvips/histogram/maplut.c:706 msgid "LUT" msgstr "" #: ../libvips/histogram/maplut.c:707 msgid "Look-up table image" msgstr "" #: ../libvips/histogram/maplut.c:712 msgid "band" msgstr "" #: ../libvips/histogram/maplut.c:713 msgid "apply one-band lut to this band of in" msgstr "" #: ../libvips/introspect.c:54 msgid "dump introspection data" msgstr "" #: ../libvips/introspect.c:71 msgid "- introspect" msgstr "" #: ../libvips/iofuncs/sink.c:106 #, c-format msgid "stop function failed for image \"%s\"" msgstr "" #: ../libvips/iofuncs/sink.c:143 #, c-format msgid "start function failed for image \"%s\"" msgstr "" #: ../libvips/iofuncs/sink.c:176 msgid "per-thread state for sink" msgstr "" #: ../libvips/iofuncs/type.c:854 #, c-format msgid "unable to convert \"%s\" to int" msgstr "" #: ../libvips/iofuncs/type.c:1046 #, c-format msgid "unable to convert \"%s\" to float" msgstr "" #: ../libvips/iofuncs/image.c:536 msgid "unable to close fd" msgstr "" #: ../libvips/iofuncs/image.c:617 #, c-format msgid "%dx%d %s, %d band, %s" msgid_plural "%dx%d %s, %d bands, %s" msgstr[0] "" msgstr[1] "" #: ../libvips/iofuncs/image.c:651 #, c-format msgid " %s, %d band, %s" msgid_plural " %s, %d bands, %s" msgstr[0] "" msgstr[1] "" #: ../libvips/iofuncs/image.c:784 #, c-format msgid "%s %s: %d x %d pixels, %d threads, %d x %d tiles, %d lines in buffer" msgstr "" #: ../libvips/iofuncs/image.c:797 #, c-format msgid "%s %s: %d%% complete" msgstr "" #. Spaces at end help to erase the %complete message we overwrite. #. #: ../libvips/iofuncs/image.c:816 #, c-format msgid "%s %s: done in %.3gs \n" msgstr "" #: ../libvips/iofuncs/image.c:1000 #, c-format msgid "unable to open \"%s\", file too short" msgstr "" #: ../libvips/iofuncs/image.c:1009 #, c-format msgid "%s is longer than expected" msgstr "" #: ../libvips/iofuncs/image.c:1027 #, c-format msgid "bad mode \"%s\"" msgstr "" #: ../libvips/iofuncs/image.c:1103 msgid "image class" msgstr "" #: ../libvips/iofuncs/image.c:1201 msgid "Image filename" msgstr "" #: ../libvips/iofuncs/image.c:1208 msgid "Open mode" msgstr "" #: ../libvips/iofuncs/image.c:1214 msgid "Kill" msgstr "" #: ../libvips/iofuncs/image.c:1215 msgid "Block evaluation on this image" msgstr "" #: ../libvips/iofuncs/image.c:1221 msgid "Demand style" msgstr "" #: ../libvips/iofuncs/image.c:1222 msgid "Preferred demand style for this image" msgstr "" #: ../libvips/iofuncs/image.c:1235 msgid "Foreign buffer" msgstr "" #: ../libvips/iofuncs/image.c:1236 msgid "Pointer to foreign pixels" msgstr "" #: ../libvips/iofuncs/image.c:1647 #, c-format msgid "killed for image \"%s\"" msgstr "" #: ../libvips/iofuncs/image.c:2049 #, c-format msgid "memory area too small --- should be %zd bytes, you passed %zd" msgstr "" #: ../libvips/iofuncs/image.c:2264 #, c-format msgid "bad array length --- should be %d, you passed %d" msgstr "" #: ../libvips/iofuncs/image.c:2854 msgid "bad image descriptor" msgstr "" #: ../libvips/iofuncs/image.c:2912 ../libvips/iofuncs/generate.c:779 #, c-format msgid "unable to output to a %s image" msgstr "" #: ../libvips/iofuncs/image.c:2976 #, c-format msgid "auto-rewind for %s failed" msgstr "" #: ../libvips/iofuncs/image.c:3045 ../libvips/iofuncs/image.c:3175 #: ../libvips/iofuncs/image.c:3354 msgid "image not readable" msgstr "" #: ../libvips/iofuncs/image.c:3090 ../libvips/iofuncs/image.c:3314 #: ../libvips/iofuncs/image.c:3331 msgid "no image data" msgstr "" #: ../libvips/iofuncs/image.c:3196 ../libvips/iofuncs/image.c:3384 #: ../libvips/iofuncs/image.c:3393 msgid "image already written" msgstr "" #: ../libvips/iofuncs/image.c:3220 ../libvips/iofuncs/image.c:3405 msgid "image not writeable" msgstr "" #: ../libvips/iofuncs/image.c:3272 msgid "bad file type" msgstr "" #: ../libvips/iofuncs/threadpool.c:247 msgid "unable to create thread" msgstr "" #: ../libvips/iofuncs/threadpool.c:410 #, c-format msgid "threads clipped to %d" msgstr "" #: ../libvips/iofuncs/threadpool.c:456 msgid "per-thread state for vipsthreadpool" msgstr "" #: ../libvips/iofuncs/mapfile.c:131 ../libvips/iofuncs/mapfile.c:298 msgid "unable to CreateFileMapping" msgstr "" #: ../libvips/iofuncs/mapfile.c:139 ../libvips/iofuncs/mapfile.c:310 msgid "unable to MapViewOfFile" msgstr "" #: ../libvips/iofuncs/mapfile.c:179 msgid "unable to mmap" msgstr "" #: ../libvips/iofuncs/mapfile.c:180 #, c-format msgid "" "map failed (%s), running very low on system resources, expect a crash soon" msgstr "" #: ../libvips/iofuncs/mapfile.c:197 ../libvips/iofuncs/mapfile.c:304 msgid "unable to UnmapViewOfFile" msgstr "" #: ../libvips/iofuncs/mapfile.c:203 msgid "unable to munmap file" msgstr "" #: ../libvips/iofuncs/mapfile.c:225 msgid "file is less than 64 bytes" msgstr "" #: ../libvips/iofuncs/mapfile.c:230 ../libvips/iofuncs/mapfile.c:264 msgid "unable to get file status" msgstr "" #: ../libvips/iofuncs/mapfile.c:236 msgid "not a regular file" msgstr "" #: ../libvips/iofuncs/mapfile.c:270 msgid "unable to read data" msgstr "" #: ../libvips/iofuncs/mapfile.c:330 #, c-format msgid "unable to mmap: \"%s\" - %s" msgstr "" #: ../libvips/iofuncs/mapfile.c:340 #, c-format msgid "unable to mmap \"%s\" to same address" msgstr "" #: ../libvips/iofuncs/sinkdisc.c:122 msgid "per-thread state for sinkdisc" msgstr "" #: ../libvips/iofuncs/sinkdisc.c:261 ../libvips/iofuncs/util.c:535 msgid "write failed" msgstr "" #: ../libvips/iofuncs/operation.c:225 #, c-format msgid "%d pixels calculated" msgstr "" #: ../libvips/iofuncs/operation.c:309 ../libvips/iofuncs/operation.c:330 #: ../libvips/iofuncs/operation.c:338 ../libvips/iofuncs/operation.c:350 msgid "default" msgstr "" #: ../libvips/iofuncs/operation.c:313 msgid "allowed" msgstr "" #: ../libvips/iofuncs/operation.c:341 ../libvips/iofuncs/operation.c:353 msgid "min" msgstr "" #: ../libvips/iofuncs/operation.c:343 ../libvips/iofuncs/operation.c:355 msgid "max" msgstr "" #: ../libvips/iofuncs/operation.c:571 msgid "operations" msgstr "" #: ../libvips/iofuncs/operation.c:659 ../libvips/iofuncs/object.c:1511 #: ../libvips/resample/interpolate.c:637 #, c-format msgid "class \"%s\" not found" msgstr "" #: ../libvips/iofuncs/operation.c:665 #, c-format msgid "\"%s\" is not an instantiable class" msgstr "" #: ../libvips/iofuncs/operation.c:1129 #, c-format msgid "unknown argument '%s'" msgstr "" #: ../libvips/iofuncs/operation.c:1253 msgid "too few arguments" msgstr "" #: ../libvips/iofuncs/operation.c:1374 msgid "too many arguments" msgstr "" #: ../libvips/iofuncs/sinkmemory.c:109 msgid "per-thread state for sinkmemory" msgstr "" #: ../libvips/iofuncs/generate.c:425 msgid "too many images" msgstr "" #: ../libvips/iofuncs/generate.c:690 msgid "demand hint not set" msgstr "" #: ../libvips/iofuncs/generate.c:709 ../libvips/iofuncs/generate.c:737 msgid "generate() called twice" msgstr "" #: ../libvips/iofuncs/window.c:237 ../libvips/iofuncs/vips.c:918 #, c-format msgid "unable to read data for \"%s\", %s" msgstr "" #: ../libvips/iofuncs/window.c:238 ../libvips/iofuncs/vips.c:808 #: ../libvips/iofuncs/vips.c:919 msgid "file has been truncated" msgstr "" #: ../libvips/iofuncs/system.c:184 msgid "unable to substitute input filename" msgstr "" #: ../libvips/iofuncs/system.c:191 msgid "unable to substitute output filename" msgstr "" #: ../libvips/iofuncs/system.c:226 #, c-format msgid "command \"%s\" failed" msgstr "" #: ../libvips/iofuncs/system.c:234 #, c-format msgid "stderr output: %s" msgstr "" #: ../libvips/iofuncs/system.c:269 msgid "run an external command" msgstr "" #: ../libvips/iofuncs/system.c:290 msgid "Command" msgstr "" #: ../libvips/iofuncs/system.c:291 msgid "Command to run" msgstr "" #: ../libvips/iofuncs/system.c:297 msgid "Input format" msgstr "" #: ../libvips/iofuncs/system.c:298 msgid "Format for input filename" msgstr "" #: ../libvips/iofuncs/system.c:304 msgid "Output format" msgstr "" #: ../libvips/iofuncs/system.c:305 msgid "Format for output filename" msgstr "" #: ../libvips/iofuncs/system.c:312 msgid "Command log" msgstr "" #: ../libvips/iofuncs/header.c:1067 #, c-format msgid "field \"%s\" not found" msgstr "" #: ../libvips/iofuncs/header.c:1269 #, c-format msgid "field \"%s\" is of type %s, not %s" msgstr "" #: ../libvips/iofuncs/header.c:1498 #, c-format msgid "field \"%s\" is of type %s, not VipsRefString" msgstr "" #: ../libvips/iofuncs/init.c:234 #, c-format msgid "unable to load \"%s\" -- %s" msgstr "" #: ../libvips/iofuncs/init.c:655 msgid "show informative messages" msgstr "" #: ../libvips/iofuncs/init.c:658 msgid "abort on first error or warning" msgstr "" #: ../libvips/iofuncs/init.c:661 msgid "evaluate with N concurrent threads" msgstr "" #: ../libvips/iofuncs/init.c:664 msgid "set tile width to N (DEBUG)" msgstr "" #: ../libvips/iofuncs/init.c:667 msgid "set tile height to N (DEBUG)" msgstr "" #: ../libvips/iofuncs/init.c:670 msgid "set thinstrip height to N (DEBUG)" msgstr "" #: ../libvips/iofuncs/init.c:673 msgid "set fatstrip height to N (DEBUG)" msgstr "" #: ../libvips/iofuncs/init.c:676 msgid "show progress feedback" msgstr "" #: ../libvips/iofuncs/init.c:679 msgid "leak-check on exit" msgstr "" #: ../libvips/iofuncs/init.c:682 msgid "profile and dump timing on exit" msgstr "" #: ../libvips/iofuncs/init.c:685 msgid "images larger than N are decompressed to disc" msgstr "" #: ../libvips/iofuncs/init.c:688 msgid "disable vectorised versions of operations" msgstr "" #: ../libvips/iofuncs/init.c:691 msgid "cache at most N operations" msgstr "" #: ../libvips/iofuncs/init.c:694 msgid "cache at most N bytes in memory" msgstr "" #: ../libvips/iofuncs/init.c:697 msgid "allow at most N open files" msgstr "" #: ../libvips/iofuncs/init.c:700 msgid "trace operation cache" msgstr "" #: ../libvips/iofuncs/init.c:703 msgid "dump operation cache on exit" msgstr "" #: ../libvips/iofuncs/init.c:706 msgid "print libvips version" msgstr "" #: ../libvips/iofuncs/init.c:1091 msgid "flag not in [0, 5]" msgstr "" #: ../libvips/iofuncs/region.c:585 ../libvips/iofuncs/region.c:657 #: ../libvips/iofuncs/region.c:805 ../libvips/iofuncs/region.c:1516 msgid "valid clipped to nothing" msgstr "" #: ../libvips/iofuncs/region.c:702 msgid "bad image type" msgstr "" #: ../libvips/iofuncs/region.c:747 msgid "no pixel data on attached image" msgstr "" #: ../libvips/iofuncs/region.c:753 msgid "images do not match in pixel size" msgstr "" #: ../libvips/iofuncs/region.c:786 ../libvips/iofuncs/region.c:1498 msgid "dest too small" msgstr "" #: ../libvips/iofuncs/region.c:875 msgid "bad position" msgstr "" #: ../libvips/iofuncs/region.c:1291 msgid "stop requested" msgstr "" #: ../libvips/iofuncs/region.c:1376 ../libvips/iofuncs/region.c:1569 #, c-format msgid "unable to input from a %s image" msgstr "" #: ../libvips/iofuncs/region.c:1400 msgid "incomplete header" msgstr "" #: ../libvips/iofuncs/region.c:1472 msgid "inappropriate region type" msgstr "" #: ../libvips/iofuncs/vips.c:306 #, c-format msgid "\"%s\" is not a VIPS image" msgstr "" #: ../libvips/iofuncs/vips.c:406 msgid "unable to read history" msgstr "" #: ../libvips/iofuncs/vips.c:439 msgid "more than a 10 megabytes of XML? sufferin' succotash!" msgstr "" #: ../libvips/iofuncs/vips.c:487 msgid "incorrect namespace in XML" msgstr "" #: ../libvips/iofuncs/vips.c:611 msgid "error transforming from save format" msgstr "" #: ../libvips/iofuncs/vips.c:760 msgid "error transforming to save format" msgstr "" #: ../libvips/iofuncs/vips.c:904 #, c-format msgid "unable to read header for \"%s\"" msgstr "" #: ../libvips/iofuncs/vips.c:930 #, c-format msgid "error reading XML: %s" msgstr "" #: ../libvips/iofuncs/error.c:287 msgid "windows error" msgstr "" #: ../libvips/iofuncs/error.c:296 msgid "unix error" msgstr "" #: ../libvips/iofuncs/error.c:447 msgid "image must be uncoded" msgstr "" #: ../libvips/iofuncs/error.c:475 msgid "image coding must be 'none' or 'labq'" msgstr "" #: ../libvips/iofuncs/error.c:503 msgid "unknown image coding" msgstr "" #: ../libvips/iofuncs/error.c:528 #, c-format msgid "coding '%s' only" msgstr "" #: ../libvips/iofuncs/error.c:553 msgid "image must one band" msgstr "" #: ../libvips/iofuncs/error.c:578 #, c-format msgid "image must have %d bands" msgstr "" #: ../libvips/iofuncs/error.c:603 msgid "image must have one or three bands" msgstr "" #: ../libvips/iofuncs/error.c:629 #, c-format msgid "image must have at least %d bands" msgstr "" #: ../libvips/iofuncs/error.c:657 msgid "images must have the same number of bands, or one must be single-band" msgstr "" #: ../libvips/iofuncs/error.c:684 #, c-format msgid "image must have 1 or %d bands" msgstr "" #: ../libvips/iofuncs/error.c:708 msgid "image must be non-complex" msgstr "" #: ../libvips/iofuncs/error.c:732 msgid "image must be complex" msgstr "" #: ../libvips/iofuncs/error.c:759 msgid "image must be two-band or complex" msgstr "" #: ../libvips/iofuncs/error.c:785 #, c-format msgid "image must be %s" msgstr "" #: ../libvips/iofuncs/error.c:810 msgid "image must be integer" msgstr "" #: ../libvips/iofuncs/error.c:835 msgid "image must be unsigned integer" msgstr "" #: ../libvips/iofuncs/error.c:863 msgid "image must be 8- or 16-bit integer, signed or unsigned" msgstr "" #: ../libvips/iofuncs/error.c:890 msgid "image must be 8- or 16-bit unsigned integer" msgstr "" #: ../libvips/iofuncs/error.c:916 msgid "image must be 8- or 16-bit unsigned integer, or float" msgstr "" #: ../libvips/iofuncs/error.c:944 msgid "image must be unsigned int or float" msgstr "" #: ../libvips/iofuncs/error.c:969 msgid "images must match in size" msgstr "" #: ../libvips/iofuncs/error.c:995 msgid "images must be odd and square" msgstr "" #: ../libvips/iofuncs/error.c:1021 msgid "images must have the same number of bands" msgstr "" #: ../libvips/iofuncs/error.c:1075 msgid "images must have the same band format" msgstr "" #: ../libvips/iofuncs/error.c:1101 msgid "images must have the same coding" msgstr "" #: ../libvips/iofuncs/error.c:1124 #, c-format msgid "vector must have %d elements" msgstr "" #: ../libvips/iofuncs/error.c:1149 #, c-format msgid "vector must have 1 or %d elements" msgstr "" #: ../libvips/iofuncs/error.c:1174 msgid "histograms must have width or height 1" msgstr "" #: ../libvips/iofuncs/error.c:1179 msgid "histograms must have not have more than 65536 elements" msgstr "" #: ../libvips/iofuncs/error.c:1216 msgid "matrix image too large" msgstr "" #: ../libvips/iofuncs/error.c:1221 msgid "matrix image must have one band" msgstr "" #: ../libvips/iofuncs/error.c:1255 msgid "separable matrix images must have width or height 1" msgstr "" #: ../libvips/iofuncs/error.c:1282 msgid "precision must be int or float" msgstr "" #: ../libvips/iofuncs/util.c:518 msgid "unable to get file stats" msgstr "" #: ../libvips/iofuncs/util.c:674 #, c-format msgid "unable to open file \"%s\" for reading" msgstr "" #: ../libvips/iofuncs/util.c:696 #, c-format msgid "unable to open file \"%s\" for writing" msgstr "" #: ../libvips/iofuncs/util.c:718 #, c-format msgid "\"%s\" too long" msgstr "" #: ../libvips/iofuncs/util.c:765 #, c-format msgid "error reading from file \"%s\"" msgstr "" #: ../libvips/iofuncs/util.c:812 #, c-format msgid "write error (%zd out of %zd blocks written)" msgstr "" #: ../libvips/iofuncs/util.c:1084 ../libvips/iofuncs/util.c:1091 msgid "unable to truncate" msgstr "" #: ../libvips/iofuncs/util.c:1167 #, c-format msgid "unable to create directory \"%s\", %s" msgstr "" #: ../libvips/iofuncs/util.c:1191 #, c-format msgid "unable to remove directory \"%s\", %s" msgstr "" #: ../libvips/iofuncs/util.c:1208 #, c-format msgid "unable to rename file \"%s\" as \"%s\", %s" msgstr "" #: ../libvips/iofuncs/util.c:1348 msgid "unexpected end of string" msgstr "" #: ../libvips/iofuncs/util.c:1366 ../libvips/iofuncs/util.c:1436 #, c-format msgid "expected %s, saw %s" msgstr "" #: ../libvips/iofuncs/util.c:1750 msgid "no such enum type" msgstr "" #: ../libvips/iofuncs/util.c:1768 #, c-format msgid "enum '%s' has no member '%s', should be one of: %s" msgstr "" #: ../libvips/iofuncs/util.c:1786 msgid "no such flag type" msgstr "" #: ../libvips/iofuncs/util.c:1802 #, c-format msgid "flags '%s' has no member '%s', should be one of: %s" msgstr "" #: ../libvips/iofuncs/util.c:1889 msgid "unable to form filename" msgstr "" #: ../libvips/iofuncs/memory.c:251 msgid "vips_free: too many frees" msgstr "" #: ../libvips/iofuncs/memory.c:253 msgid "vips_free: too much free" msgstr "" #: ../libvips/iofuncs/sinkscreen.c:188 msgid "per-thread state for render" msgstr "" #: ../libvips/iofuncs/sinkscreen.c:1088 msgid "bad parameters" msgstr "" #: ../libvips/iofuncs/object.c:316 #, c-format msgid "parameter %s not set" msgstr "" #: ../libvips/iofuncs/object.c:751 #, c-format msgid "no property named `%s'" msgstr "" #: ../libvips/iofuncs/object.c:759 #, c-format msgid "no vips argument named `%s'" msgstr "" #: ../libvips/iofuncs/object.c:765 #, c-format msgid "argument `%s' has no instance" msgstr "" #: ../libvips/iofuncs/object.c:1561 msgid "base class" msgstr "" #: ../libvips/iofuncs/object.c:1575 msgid "Nickname" msgstr "" #: ../libvips/iofuncs/object.c:1576 msgid "Class nickname" msgstr "" #: ../libvips/iofuncs/object.c:1582 msgid "Description" msgstr "" #: ../libvips/iofuncs/object.c:1583 msgid "Class description" msgstr "" #: ../libvips/iofuncs/object.c:1781 #, c-format msgid "no value supplied for argument '%s'" msgstr "" #: ../libvips/iofuncs/object.c:1784 #, c-format msgid "no value supplied for argument '%s' ('%s')" msgstr "" #: ../libvips/iofuncs/object.c:1942 ../libvips/iofuncs/object.c:1961 #: ../libvips/iofuncs/object.c:2014 #, c-format msgid "'%s' is not an integer" msgstr "" #: ../libvips/iofuncs/object.c:1978 #, c-format msgid "'%s' is not a double" msgstr "" #: ../libvips/iofuncs/object.c:2293 #, c-format msgid "expected string or ), saw %s" msgstr "" #: ../libvips/iofuncs/object.c:2336 #, c-format msgid "unable to set '%s'" msgstr "" #: ../libvips/iofuncs/object.c:2349 msgid "not , or ) after parameter" msgstr "" #: ../libvips/iofuncs/object.c:2356 msgid "extra tokens after ')'" msgstr "" #: ../libvips/iofuncs/buf.c:610 #, c-format msgid "%zd bytes of binary data" msgstr "" #. File length unit. #. #: ../libvips/iofuncs/buf.c:679 msgid "bytes" msgstr "" #. Kilobyte unit. #. #: ../libvips/iofuncs/buf.c:683 msgid "KB" msgstr "" #. Megabyte unit. #. #: ../libvips/iofuncs/buf.c:687 msgid "MB" msgstr "" #. Gigabyte unit. #. #: ../libvips/iofuncs/buf.c:691 msgid "GB" msgstr "" #. Terabyte unit. #. #: ../libvips/iofuncs/buf.c:695 msgid "TB" msgstr "" #: ../libvips/morphology/morph.c:139 msgid "morphology operation" msgstr "" #: ../libvips/morphology/morph.c:155 msgid "Morphology" msgstr "" #: ../libvips/morphology/morph.c:156 msgid "Morphological operation to perform" msgstr "" #: ../libvips/morphology/rank.c:359 msgid "index out of range" msgstr "" #: ../libvips/morphology/rank.c:409 msgid "rank filter" msgstr "" #: ../libvips/morphology/rank.c:433 msgid "index" msgstr "" #: ../libvips/morphology/rank.c:434 msgid "Select pixel at index" msgstr "" #: ../libvips/morphology/countlines.c:131 msgid "count lines in an image" msgstr "" #: ../libvips/morphology/countlines.c:135 msgid "Nolines" msgstr "" #: ../libvips/morphology/countlines.c:136 msgid "Number of lines" msgstr "" #: ../libvips/morphology/countlines.c:143 msgid "Countlines left-right or up-down" msgstr "" #: ../libvips/morphology/labelregions.c:121 msgid "label regions in an image" msgstr "" #: ../libvips/morphology/labelregions.c:126 msgid "Mask of region labels" msgstr "" #: ../libvips/morphology/labelregions.c:131 msgid "Segments" msgstr "" #: ../libvips/morphology/labelregions.c:132 msgid "Number of discrete contiguous regions" msgstr "" #: ../libvips/morphology/morphology.c:111 msgid "morphological operations" msgstr "" #: ../libvips/morphology/hitmiss.c:321 #, c-format msgid "bad mask element (%d should be 0, 128 or 255)" msgstr "" #: ../libvips/mosaicing/im_tbmerge.c:164 ../libvips/mosaicing/im_tbmerge.c:218 #: ../libvips/mosaicing/im_tbmerge.c:536 ../libvips/mosaicing/im_lrmerge.c:216 #: ../libvips/mosaicing/im_lrmerge.c:265 ../libvips/mosaicing/im_lrmerge.c:606 msgid "internal error" msgstr "" #: ../libvips/mosaicing/im_tbmerge.c:635 ../libvips/mosaicing/im_lrmerge.c:806 msgid "unknown coding type" msgstr "" #: ../libvips/mosaicing/im_tbmerge.c:653 ../libvips/mosaicing/im_lrmerge.c:823 msgid "too much overlap" msgstr "" #: ../libvips/mosaicing/im_chkpair.c:201 msgid "inputs incompatible" msgstr "" #: ../libvips/mosaicing/im_chkpair.c:205 ../libvips/mosaicing/im_tbcalcon.c:103 msgid "help!" msgstr "" #: ../libvips/mosaicing/im_lrmosaic.c:114 ../libvips/mosaicing/im_tbmosaic.c:90 msgid "bad area parameters" msgstr "" #: ../libvips/mosaicing/im_lrmosaic.c:135 #: ../libvips/mosaicing/im_tbmosaic.c:111 msgid "overlap too small for search" msgstr "" #: ../libvips/mosaicing/im_lrmosaic.c:168 #: ../libvips/mosaicing/im_tbmosaic.c:144 msgid "unknown Coding type" msgstr "" #: ../libvips/mosaicing/im_tbcalcon.c:117 msgid "overlap too small" msgstr "" #: ../libvips/mosaicing/merge.c:105 msgid "merge two images" msgstr "" #: ../libvips/mosaicing/merge.c:110 ../libvips/mosaicing/mosaic.c:181 #: ../libvips/mosaicing/match.c:205 ../libvips/mosaicing/mosaic1.c:490 msgid "Reference image" msgstr "" #: ../libvips/mosaicing/merge.c:115 ../libvips/mosaicing/mosaic.c:186 #: ../libvips/mosaicing/match.c:210 ../libvips/mosaicing/mosaic1.c:495 msgid "Secondary" msgstr "" #: ../libvips/mosaicing/merge.c:116 ../libvips/mosaicing/mosaic.c:187 #: ../libvips/mosaicing/match.c:211 ../libvips/mosaicing/mosaic1.c:496 msgid "Secondary image" msgstr "" #: ../libvips/mosaicing/merge.c:128 msgid "Horizontal or vertcial merge" msgstr "" #: ../libvips/mosaicing/merge.c:134 msgid "dx" msgstr "" #: ../libvips/mosaicing/merge.c:135 msgid "Horizontal displacement from sec to ref" msgstr "" #: ../libvips/mosaicing/merge.c:141 msgid "dy" msgstr "" #: ../libvips/mosaicing/merge.c:142 msgid "Vertical displacement from sec to ref" msgstr "" #: ../libvips/mosaicing/merge.c:148 ../libvips/mosaicing/mosaic.c:247 #: ../libvips/mosaicing/mosaic1.c:597 msgid "Max blend" msgstr "" #: ../libvips/mosaicing/merge.c:149 ../libvips/mosaicing/mosaic.c:248 #: ../libvips/mosaicing/mosaic1.c:598 msgid "Maximum blend size" msgstr "" #: ../libvips/mosaicing/im_remosaic.c:115 #, c-format msgid "substitute image \"%s\" is not the same size as \"%s\"" msgstr "" #: ../libvips/mosaicing/im_remosaic.c:160 #: ../libvips/mosaicing/global_balance.c:1767 msgid "global balance an image mosaic" msgstr "" #: ../libvips/mosaicing/im_remosaic.c:176 msgid "old_str" msgstr "" #: ../libvips/mosaicing/im_remosaic.c:177 msgid "Search for this string" msgstr "" #: ../libvips/mosaicing/im_remosaic.c:183 msgid "new_str" msgstr "" #: ../libvips/mosaicing/im_remosaic.c:184 msgid "And swap for this string" msgstr "" #: ../libvips/mosaicing/im_lrcalcon.c:204 msgid "overlap too small for your search size" msgstr "" #: ../libvips/mosaicing/im_lrcalcon.c:243 #, c-format msgid "found %d tie-points, need at least %d" msgstr "" #: ../libvips/mosaicing/im_lrcalcon.c:288 msgid "not 1-band uchar image" msgstr "" #: ../libvips/mosaicing/global_balance.c:148 msgid "no matching '>'" msgstr "" #: ../libvips/mosaicing/global_balance.c:157 msgid "too many items" msgstr "" #: ../libvips/mosaicing/global_balance.c:451 msgid "circularity detected" msgstr "" #: ../libvips/mosaicing/global_balance.c:485 #: ../libvips/mosaicing/global_balance.c:545 #, c-format msgid "image \"%s\" used twice as output" msgstr "" #: ../libvips/mosaicing/global_balance.c:594 msgid "bad number of args in join line" msgstr "" #: ../libvips/mosaicing/global_balance.c:636 msgid "bad number of args in join1 line" msgstr "" #: ../libvips/mosaicing/global_balance.c:672 msgid "bad number of args in copy line" msgstr "" #: ../libvips/mosaicing/global_balance.c:730 msgid "" "mosaic root not found in desc file\n" "is this really a mosaiced image?" msgstr "" #: ../libvips/mosaicing/global_balance.c:741 msgid "more than one root" msgstr "" #: ../libvips/mosaicing/global_balance.c:1060 msgid "empty overlap!" msgstr "" #: ../libvips/mosaicing/global_balance.c:1783 msgid "gamma" msgstr "" #: ../libvips/mosaicing/global_balance.c:1784 msgid "Image gamma" msgstr "" #: ../libvips/mosaicing/global_balance.c:1790 msgid "Int output" msgstr "" #: ../libvips/mosaicing/global_balance.c:1791 msgid "Integer output" msgstr "" #: ../libvips/mosaicing/im_avgdxdy.c:65 msgid "no points to average" msgstr "" #: ../libvips/mosaicing/im_lrmerge.c:706 msgid "mwidth must be -1 or >= 0" msgstr "" #: ../libvips/mosaicing/im_lrmerge.c:735 msgid "no overlap" msgstr "" #: ../libvips/mosaicing/mosaic.c:176 msgid "mosaic two images" msgstr "" #: ../libvips/mosaicing/mosaic.c:199 ../libvips/mosaicing/mosaic1.c:508 msgid "Horizontal or vertcial mosaic" msgstr "" #: ../libvips/mosaicing/mosaic.c:205 msgid "xref" msgstr "" #: ../libvips/mosaicing/mosaic.c:206 ../libvips/mosaicing/mosaic.c:213 msgid "Position of reference tie-point" msgstr "" #: ../libvips/mosaicing/mosaic.c:212 msgid "yref" msgstr "" #: ../libvips/mosaicing/mosaic.c:219 msgid "xsec" msgstr "" #: ../libvips/mosaicing/mosaic.c:220 ../libvips/mosaicing/mosaic.c:227 msgid "Position of secondary tie-point" msgstr "" #: ../libvips/mosaicing/mosaic.c:226 msgid "ysec" msgstr "" #: ../libvips/mosaicing/mosaic.c:233 ../libvips/mosaicing/match.c:278 #: ../libvips/mosaicing/mosaic1.c:570 msgid "hwindow" msgstr "" #: ../libvips/mosaicing/mosaic.c:234 ../libvips/mosaicing/match.c:279 #: ../libvips/mosaicing/mosaic1.c:571 msgid "Half window size" msgstr "" #: ../libvips/mosaicing/mosaic.c:240 ../libvips/mosaicing/match.c:285 #: ../libvips/mosaicing/mosaic1.c:577 msgid "harea" msgstr "" #: ../libvips/mosaicing/mosaic.c:241 ../libvips/mosaicing/match.c:286 #: ../libvips/mosaicing/mosaic1.c:578 msgid "Half area size" msgstr "" #: ../libvips/mosaicing/mosaic.c:254 ../libvips/mosaicing/mosaic1.c:604 msgid "Search band" msgstr "" #: ../libvips/mosaicing/mosaic.c:255 ../libvips/mosaicing/mosaic1.c:605 msgid "Band to search for features on" msgstr "" #: ../libvips/mosaicing/mosaic.c:261 ../libvips/mosaicing/mosaic.c:268 msgid "Integer offset" msgstr "" #: ../libvips/mosaicing/mosaic.c:262 ../libvips/mosaicing/mosaic.c:269 msgid "Detected integer offset" msgstr "" #: ../libvips/mosaicing/mosaic.c:276 msgid "Detected scale" msgstr "" #: ../libvips/mosaicing/mosaic.c:283 msgid "Detected rotation" msgstr "" #: ../libvips/mosaicing/mosaic.c:289 ../libvips/mosaicing/mosaic.c:296 msgid "First-order displacement" msgstr "" #: ../libvips/mosaicing/mosaic.c:290 ../libvips/mosaicing/mosaic.c:297 msgid "Detected first-order displacement" msgstr "" #: ../libvips/mosaicing/im_clinear.c:137 msgid "im_invmat failed" msgstr "" #: ../libvips/mosaicing/match.c:200 msgid "first-order match of two images" msgstr "" #: ../libvips/mosaicing/match.c:222 ../libvips/mosaicing/mosaic1.c:514 msgid "xr1" msgstr "" #: ../libvips/mosaicing/match.c:223 ../libvips/mosaicing/match.c:230 #: ../libvips/mosaicing/mosaic1.c:515 ../libvips/mosaicing/mosaic1.c:522 msgid "Position of first reference tie-point" msgstr "" #: ../libvips/mosaicing/match.c:229 ../libvips/mosaicing/mosaic1.c:521 msgid "yr1" msgstr "" #: ../libvips/mosaicing/match.c:236 ../libvips/mosaicing/mosaic1.c:528 msgid "xs1" msgstr "" #: ../libvips/mosaicing/match.c:237 ../libvips/mosaicing/match.c:244 #: ../libvips/mosaicing/mosaic1.c:529 ../libvips/mosaicing/mosaic1.c:536 msgid "Position of first secondary tie-point" msgstr "" #: ../libvips/mosaicing/match.c:243 ../libvips/mosaicing/mosaic1.c:535 msgid "ys1" msgstr "" #: ../libvips/mosaicing/match.c:250 ../libvips/mosaicing/mosaic1.c:542 msgid "xr2" msgstr "" #: ../libvips/mosaicing/match.c:251 ../libvips/mosaicing/match.c:258 #: ../libvips/mosaicing/mosaic1.c:543 ../libvips/mosaicing/mosaic1.c:550 msgid "Position of second reference tie-point" msgstr "" #: ../libvips/mosaicing/match.c:257 ../libvips/mosaicing/mosaic1.c:549 msgid "yr2" msgstr "" #: ../libvips/mosaicing/match.c:264 ../libvips/mosaicing/mosaic1.c:556 msgid "xs2" msgstr "" #: ../libvips/mosaicing/match.c:265 ../libvips/mosaicing/match.c:272 #: ../libvips/mosaicing/mosaic1.c:557 ../libvips/mosaicing/mosaic1.c:564 msgid "Position of second secondary tie-point" msgstr "" #: ../libvips/mosaicing/match.c:271 ../libvips/mosaicing/mosaic1.c:563 msgid "ys2" msgstr "" #: ../libvips/mosaicing/match.c:292 ../libvips/mosaicing/mosaic1.c:584 msgid "search" msgstr "" #: ../libvips/mosaicing/match.c:293 ../libvips/mosaicing/mosaic1.c:585 msgid "Search to improve tie-points" msgstr "" #: ../libvips/mosaicing/match.c:299 ../libvips/mosaicing/mosaic1.c:591 #: ../libvips/resample/affine.c:568 ../libvips/resample/mapim.c:418 #: ../libvips/resample/resize.c:384 ../libvips/resample/quadratic.c:354 #: ../libvips/resample/similarity.c:185 msgid "Interpolate" msgstr "" #: ../libvips/mosaicing/match.c:300 ../libvips/mosaicing/mosaic1.c:592 #: ../libvips/resample/affine.c:569 ../libvips/resample/mapim.c:419 #: ../libvips/resample/resize.c:385 ../libvips/resample/similarity.c:186 msgid "Interpolate pixels with this" msgstr "" #: ../libvips/mosaicing/mosaic1.c:485 msgid "first-order mosaic of two images" msgstr "" #: ../libvips/resample/affine.c:486 msgid "output coordinates out of range" msgstr "" #: ../libvips/resample/affine.c:557 msgid "affine transform of an image" msgstr "" #: ../libvips/resample/affine.c:561 msgid "Matrix" msgstr "" #: ../libvips/resample/affine.c:562 msgid "Transformation matrix" msgstr "" #: ../libvips/resample/affine.c:574 msgid "Output rect" msgstr "" #: ../libvips/resample/affine.c:575 msgid "Area of output to generate" msgstr "" #: ../libvips/resample/affine.c:581 ../libvips/resample/affine.c:588 #: ../libvips/resample/similarity.c:191 ../libvips/resample/similarity.c:198 msgid "Output offset" msgstr "" #: ../libvips/resample/affine.c:582 ../libvips/resample/similarity.c:192 msgid "Horizontal output displacement" msgstr "" #: ../libvips/resample/affine.c:589 ../libvips/resample/similarity.c:199 msgid "Vertical output displacement" msgstr "" #: ../libvips/resample/affine.c:595 ../libvips/resample/affine.c:602 #: ../libvips/resample/resize.c:368 ../libvips/resample/resize.c:375 #: ../libvips/resample/similarity.c:205 ../libvips/resample/similarity.c:212 msgid "Input offset" msgstr "" #: ../libvips/resample/affine.c:596 ../libvips/resample/resize.c:369 #: ../libvips/resample/similarity.c:206 msgid "Horizontal input displacement" msgstr "" #: ../libvips/resample/affine.c:603 ../libvips/resample/resize.c:376 #: ../libvips/resample/similarity.c:213 msgid "Vertical input displacement" msgstr "" #: ../libvips/resample/shrinkv.c:344 ../libvips/resample/shrinkh.c:246 msgid "shrink factors should be >= 1" msgstr "" #: ../libvips/resample/shrinkv.c:424 ../libvips/resample/reducev.cpp:895 msgid "shrink an image vertically" msgstr "" #: ../libvips/resample/shrinkv.c:430 ../libvips/resample/reduce.c:141 #: ../libvips/resample/shrink.c:137 ../libvips/resample/reducev.cpp:901 msgid "Vshrink" msgstr "" #: ../libvips/resample/shrinkv.c:431 ../libvips/resample/shrinkv.c:440 #: ../libvips/resample/reduce.c:142 ../libvips/resample/reduce.c:172 #: ../libvips/resample/shrink.c:138 ../libvips/resample/shrink.c:161 #: ../libvips/resample/reducev.cpp:902 ../libvips/resample/reducev.cpp:925 msgid "Vertical shrink factor" msgstr "" #: ../libvips/resample/shrinkv.c:439 ../libvips/resample/reduce.c:171 #: ../libvips/resample/shrink.c:160 ../libvips/resample/reducev.cpp:924 msgid "Yshrink" msgstr "" #: ../libvips/resample/mapim.c:408 msgid "resample with an mapim image" msgstr "" #: ../libvips/resample/mapim.c:413 msgid "Index pixels with this" msgstr "" #: ../libvips/resample/resize.c:331 msgid "resize an image" msgstr "" #: ../libvips/resample/resize.c:337 msgid "Scale factor" msgstr "" #: ../libvips/resample/resize.c:338 msgid "Scale image by this factor" msgstr "" #: ../libvips/resample/resize.c:344 msgid "Vertical scale factor" msgstr "" #: ../libvips/resample/resize.c:345 msgid "Vertical scale image by this factor" msgstr "" #: ../libvips/resample/resize.c:351 ../libvips/resample/reduce.c:148 #: ../libvips/resample/reduceh.cpp:575 ../libvips/resample/reducev.cpp:908 msgid "Kernel" msgstr "" #: ../libvips/resample/resize.c:352 ../libvips/resample/reduce.c:149 #: ../libvips/resample/reduceh.cpp:576 ../libvips/resample/reducev.cpp:909 msgid "Resampling kernel" msgstr "" #: ../libvips/resample/resize.c:358 ../libvips/resample/reduce.c:155 #: ../libvips/resample/reduceh.cpp:582 ../libvips/resample/reducev.cpp:915 msgid "Centre" msgstr "" #: ../libvips/resample/resize.c:359 ../libvips/resample/reduce.c:156 #: ../libvips/resample/reduceh.cpp:583 ../libvips/resample/reducev.cpp:916 msgid "Use centre sampling convention" msgstr "" #: ../libvips/resample/reduce.c:128 msgid "reduce an image" msgstr "" #: ../libvips/resample/reduce.c:134 ../libvips/resample/shrinkh.c:326 #: ../libvips/resample/shrink.c:144 ../libvips/resample/reduceh.cpp:568 msgid "Hshrink" msgstr "" #: ../libvips/resample/reduce.c:135 ../libvips/resample/reduce.c:165 #: ../libvips/resample/shrinkh.c:327 ../libvips/resample/shrinkh.c:336 #: ../libvips/resample/shrink.c:145 ../libvips/resample/shrink.c:154 #: ../libvips/resample/reduceh.cpp:569 ../libvips/resample/reduceh.cpp:592 msgid "Horizontal shrink factor" msgstr "" #: ../libvips/resample/reduce.c:164 ../libvips/resample/shrinkh.c:335 #: ../libvips/resample/shrink.c:153 ../libvips/resample/reduceh.cpp:591 msgid "Xshrink" msgstr "" #: ../libvips/resample/shrinkh.c:320 ../libvips/resample/reduceh.cpp:562 msgid "shrink an image horizontally" msgstr "" #: ../libvips/resample/resample.c:128 msgid "resample operations" msgstr "" #: ../libvips/resample/quadratic.c:270 msgid "coefficient matrix must have width 2" msgstr "" #: ../libvips/resample/quadratic.c:292 msgid "coefficient matrix must have height 1, 3, 4 or 6" msgstr "" #: ../libvips/resample/quadratic.c:344 msgid "resample an image with a quadratic transform" msgstr "" #: ../libvips/resample/quadratic.c:348 msgid "Coeff" msgstr "" #: ../libvips/resample/quadratic.c:349 msgid "Coefficient matrix" msgstr "" #: ../libvips/resample/quadratic.c:355 msgid "Interpolate values with this" msgstr "" #: ../libvips/resample/thumbnail.c:436 #, c-format msgid "unable to import with embedded profile: %s" msgstr "" #: ../libvips/resample/thumbnail.c:516 msgid "thumbnail generation" msgstr "" #: ../libvips/resample/thumbnail.c:526 msgid "Target width" msgstr "" #: ../libvips/resample/thumbnail.c:527 msgid "Size to this width" msgstr "" #: ../libvips/resample/thumbnail.c:533 msgid "Target height" msgstr "" #: ../libvips/resample/thumbnail.c:534 msgid "Size to this height" msgstr "" #: ../libvips/resample/thumbnail.c:540 msgid "size" msgstr "" #: ../libvips/resample/thumbnail.c:541 msgid "Only upsize, only downsize, or both" msgstr "" #: ../libvips/resample/thumbnail.c:547 msgid "Auto rotate" msgstr "" #: ../libvips/resample/thumbnail.c:548 msgid "Use orientation tags to rotate image upright" msgstr "" #: ../libvips/resample/thumbnail.c:554 msgid "Crop" msgstr "" #: ../libvips/resample/thumbnail.c:555 msgid "Reduce to fill target rectangle, then crop" msgstr "" #: ../libvips/resample/thumbnail.c:561 msgid "Linear" msgstr "" #: ../libvips/resample/thumbnail.c:562 msgid "Reduce in linear light" msgstr "" #: ../libvips/resample/thumbnail.c:568 msgid "Import profile" msgstr "" #: ../libvips/resample/thumbnail.c:569 msgid "Fallback import profile" msgstr "" #: ../libvips/resample/thumbnail.c:575 msgid "Export profile" msgstr "" #: ../libvips/resample/thumbnail.c:576 msgid "Fallback export profile" msgstr "" #: ../libvips/resample/thumbnail.c:663 msgid "generate thumbnail from file" msgstr "" #: ../libvips/resample/thumbnail.c:670 msgid "Filename to read from" msgstr "" #: ../libvips/resample/thumbnail.c:830 msgid "generate thumbnail from buffer" msgstr "" #: ../libvips/resample/shrink.c:128 msgid "shrink an image" msgstr "" #: ../libvips/resample/similarity.c:167 msgid "similarity transform of an image" msgstr "" #: ../libvips/resample/similarity.c:172 msgid "Scale by this factor" msgstr "" #: ../libvips/resample/similarity.c:179 msgid "Rotate anticlockwise by this many degrees" msgstr "" #: ../libvips/resample/interpolate.c:183 msgid "VIPS interpolators" msgstr "" #: ../libvips/resample/interpolate.c:359 msgid "nearest-neighbour interpolation" msgstr "" #: ../libvips/resample/interpolate.c:556 msgid "bilinear interpolation" msgstr "" #: ../libvips/video/im_video_test.c:52 msgid "error requested" msgstr "" #: ../tools/vips.c:154 #, c-format msgid "'%s' is not the name of a vips class" msgstr "" #: ../tools/vips.c:170 msgid "list objects" msgstr "" #: ../tools/vips.c:171 msgid "BASE-NAME" msgstr "" #: ../tools/vips.c:173 msgid "load PLUGIN" msgstr "" #: ../tools/vips.c:174 msgid "PLUGIN" msgstr "" #: ../tools/vips.c:176 msgid "print version" msgstr "" #: ../tools/vips.c:219 #, c-format msgid "no package or function \"%s\"" msgstr "" #: ../tools/vips.c:1000 msgid "list classes|packages|all|package-name|operation-name" msgstr "" #: ../tools/vips.c:1002 msgid "generate headers for C++ binding" msgstr "" #: ../tools/vips.c:1004 msgid "generate bodies for C++ binding" msgstr "" #: ../tools/vips.c:1006 msgid "generate links for vips/bin" msgstr "" #: ../tools/vips.c:1008 msgid "list possible actions" msgstr "" #: ../tools/vips.c:1027 msgid "execute vips operation OPER" msgstr "" #: ../tools/vips.c:1070 msgid "Operation help" msgstr "" #: ../tools/vips.c:1116 msgid "[ACTION] [OPTIONS] [PARAMETERS] - VIPS driver program" msgstr "" #: ../tools/vips.c:1300 #, c-format msgid "unknown action \"%s\"" msgstr "" #: ../tools/vipsedit.c:83 msgid "tag file as big or little-endian" msgstr "" #: ../tools/vipsedit.c:85 msgid "set width to N pixels" msgstr "" #: ../tools/vipsedit.c:87 msgid "set height to N pixels" msgstr "" #: ../tools/vipsedit.c:89 msgid "set Bands to N" msgstr "" #: ../tools/vipsedit.c:91 msgid "set BandFmt to F (eg. uchar, float)" msgstr "" #: ../tools/vipsedit.c:93 msgid "set interpretation to I (eg. xyz)" msgstr "" #: ../tools/vipsedit.c:95 msgid "set Coding to C (eg. labq)" msgstr "" #: ../tools/vipsedit.c:97 msgid "set Xres to R pixels/mm" msgstr "" #: ../tools/vipsedit.c:99 msgid "set Yres to R pixels/mm" msgstr "" #: ../tools/vipsedit.c:101 msgid "set Xoffset to N pixels" msgstr "" #: ../tools/vipsedit.c:103 msgid "set Yoffset to N pixels" msgstr "" #: ../tools/vipsedit.c:105 msgid "replace extension block with stdin" msgstr "" #: ../tools/vipsedit.c:107 msgid "set Xsize to N (deprecated, use width)" msgstr "" #: ../tools/vipsedit.c:109 msgid "set Ysize to N (deprecated, use height)" msgstr "" #: ../tools/vipsedit.c:111 msgid "set Type to T (deprecated, use interpretation)" msgstr "" #: ../tools/vipsedit.c:122 #, c-format msgid "'%s' is not a positive integer" msgstr "" #: ../tools/vipsedit.c:135 msgid "unable to start VIPS" msgstr "" #: ../tools/vipsedit.c:147 msgid "vipsedit - edit vips file header" msgstr "" #: ../tools/vipsedit.c:175 #, c-format msgid "usage: %s [OPTION...] vips-file\n" msgstr "" #: ../tools/vipsedit.c:182 #, c-format msgid "could not open image %s" msgstr "" #: ../tools/vipsedit.c:185 #, c-format msgid "could not read VIPS header for %s" msgstr "" #: ../tools/vipsedit.c:194 #, c-format msgid "bad endian-ness %s, should be 'big' or 'little'" msgstr "" #: ../tools/vipsedit.c:207 #, c-format msgid "bad format %s" msgstr "" #: ../tools/vipsedit.c:215 #, c-format msgid "bad interpretation %s" msgstr "" #: ../tools/vipsedit.c:223 #, c-format msgid "bad coding %s" msgstr "" #: ../tools/vipsedit.c:236 #, c-format msgid "could not seek on %s" msgstr "" #: ../tools/vipsedit.c:239 #, c-format msgid "could not write to %s" msgstr "" #: ../tools/vipsedit.c:246 msgid "could not get ext data" msgstr "" #: ../tools/vipsedit.c:255 msgid "could not set extension" msgstr "" #: ../tools/vipsheader.c:88 msgid "show all fields" msgstr "" #: ../tools/vipsheader.c:90 msgid "" "print value of FIELD (\"getext\" reads extension block, \"Hist\" reads image " "history)" msgstr "" #: ../tools/vipsheader.c:181 msgid "- print image header" msgstr "" #: ../tools/vipsthumbnail.c:136 msgid "shrink to SIZE or to WIDTHxHEIGHT" msgstr "" #: ../tools/vipsthumbnail.c:137 msgid "SIZE" msgstr "" #: ../tools/vipsthumbnail.c:140 msgid "set output to FORMAT" msgstr "" #: ../tools/vipsthumbnail.c:141 ../tools/vipsthumbnail.c:145 msgid "FORMAT" msgstr "" #: ../tools/vipsthumbnail.c:144 msgid "set output format string to FORMAT" msgstr "" #: ../tools/vipsthumbnail.c:148 msgid "export with PROFILE" msgstr "" #: ../tools/vipsthumbnail.c:149 ../tools/vipsthumbnail.c:153 msgid "PROFILE" msgstr "" #: ../tools/vipsthumbnail.c:152 msgid "import untagged images with PROFILE" msgstr "" #: ../tools/vipsthumbnail.c:156 msgid "process in linear space" msgstr "" #: ../tools/vipsthumbnail.c:159 msgid "crop exactly to SIZE" msgstr "" #: ../tools/vipsthumbnail.c:162 msgid "auto-rotate" msgstr "" #: ../tools/vipsthumbnail.c:165 msgid "delete profile from exported image" msgstr "" #: ../tools/vipsthumbnail.c:169 ../tools/vipsthumbnail.c:172 #: ../tools/vipsthumbnail.c:175 ../tools/vipsthumbnail.c:178 #: ../tools/vipsthumbnail.c:181 msgid "(deprecated, does nothing)" msgstr "" #: ../tools/vipsthumbnail.c:375 msgid "- thumbnail generator" msgstr "" #: ../tools/vipsthumbnail.c:406 msgid "auto-rotate disabled: libvips built without exif support" msgstr "" #: ../libvips/resample/reduceh.cpp:457 msgid "reduce factors should be >= 1" msgstr "" #: ../libvips/resample/reduceh.cpp:471 ../libvips/resample/reducev.cpp:850 msgid "reduce factor too large" msgstr "" #: ../libvips/resample/bicubic.cpp:639 msgid "bicubic interpolation (Catmull-Rom)" msgstr "" #: ../libvips/resample/vsqbs.cpp:405 msgid "B-Splines with antialiasing smoothing" msgstr "" #: ../libvips/resample/nohalo.cpp:1586 msgid "edge sharpening resampler with halo reduction" msgstr "" #: ../libvips/resample/lbb.cpp:865 msgid "reduced halo bicubic" msgstr "" #: ../libvips/resample/reducev.cpp:839 msgid "reduce factor should be >= 1" msgstr "" libvips-8.15.1/po/malkovich.po000066400000000000000000002017011454007373500162220ustar00rootroot00000000000000# test translation file # msgid "" msgstr "" "Project-Id-Version: nip2 7.9.3\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2005-06-08 14:51+0100\n" "PO-Revision-Date: 2003-11-04 12:30+0000\n" "Last-Translator: malkovich \n" "Language-Team: malkovich \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: libsrc/convolution/im_addgnoise.c:78 #, fuzzy msgid "too many bands" msgstr "Malkovich" #: libsrc/convolution/im_sharpen.c:247 msgid "input not 3-band short" msgstr "" #: libsrc/convolution/im_sharpen.c:258 msgid "parameters out of range" msgstr "" #: libsrc/colour/im_icc_transform.c:200 libsrc/colour/im_icc_transform.c:210 #, fuzzy, c-format msgid "unable to open profile \"%s\"" msgstr "Malkovich" #: libsrc/matrix/im_invmat.c:69 msgid "singular matrix in ludcmp" msgstr "" #: libsrc/matrix/im_invmat.c:206 #, fuzzy msgid "singular matrix" msgstr "Malkovich" #: libsrc/acquire/im_clamp.c:69 msgid "bad input format" msgstr "" #: libsrc/acquire/im_clamp.c:74 msgid "bad black format" msgstr "" #: libsrc/freq_filt/im_invfftr.c:89 libsrc/freq_filt/im_invfftr.c:171 #: libsrc/freq_filt/im_invfft.c:94 libsrc/freq_filt/im_invfft.c:142 #: libsrc/freq_filt/im_fwfft.c:112 libsrc/freq_filt/im_fwfft.c:217 #: libsrc/freq_filt/im_fwfft.c:308 libsrc/freq_filt/im_fwfft.c:420 #, fuzzy msgid "one band uncoded only" msgstr "Malkovich" #: libsrc/freq_filt/im_invfftr.c:126 libsrc/freq_filt/im_invfftr.c:209 #: libsrc/freq_filt/im_invfft.c:106 libsrc/freq_filt/im_invfft.c:156 #: libsrc/freq_filt/im_fwfft.c:123 libsrc/freq_filt/im_fwfft.c:228 #: libsrc/freq_filt/im_fwfft.c:321 libsrc/freq_filt/im_fwfft.c:433 #, fuzzy msgid "unable to create transform plan" msgstr "Malkovich" #: libsrc/freq_filt/im_invfftr.c:252 libsrc/freq_filt/im_invfft.c:199 #, fuzzy msgid "one band complex uncoded only" msgstr "Malkovich" #: libsrc/freq_filt/im_invfftr.c:256 libsrc/freq_filt/im_invfft.c:203 #: libsrc/freq_filt/im_fwfft.c:515 #, fuzzy msgid "sides must be power of 2" msgstr "Malkovich" #: libsrc/freq_filt/im_invfftr.c:276 libsrc/freq_filt/im_invfft.c:223 #: libsrc/freq_filt/im_fwfft.c:535 msgid "fft_sp failed" msgstr "" #: libsrc/freq_filt/im_fwfft.c:511 msgid "one band non-complex uncoded only" msgstr "" #: libsrc/conversion/im_extract.c:162 msgid "bad extract area" msgstr "" #: libsrc/conversion/im_extract.c:167 libsrc/conversion/im_extract.c:252 msgid "band selection out of range" msgstr "" #: libsrc/conversion/im_extract.c:172 #, fuzzy msgid "unknown image coding type" msgstr "Malkovich" #: libsrc/conversion/im_extract.c:177 msgid "can't extract band from IM_CODING_LABQ" msgstr "" #: libsrc/conversion/im_extract.c:256 libsrc/arithmetic/im_powtra.c:184 #: libsrc/arithmetic/im_deviate.c:171 libsrc/arithmetic/im_multiply.c:186 #: libsrc/arithmetic/im_ceil.c:92 libsrc/arithmetic/im_maxpos.c:94 #: libsrc/arithmetic/im_costra.c:117 libsrc/arithmetic/im_costra.c:202 #: libsrc/arithmetic/im_tantra.c:117 libsrc/arithmetic/im_tantra.c:203 #: libsrc/arithmetic/im_measure.c:189 libsrc/arithmetic/im_sign.c:146 #: libsrc/arithmetic/im_expntra.c:184 libsrc/arithmetic/im_logtra.c:123 #: libsrc/arithmetic/im_abs.c:147 libsrc/arithmetic/im_add.c:254 #: libsrc/arithmetic/im_avg.c:166 libsrc/arithmetic/im_max.c:232 #: libsrc/arithmetic/im_min.c:231 libsrc/arithmetic/im_lintra.c:281 #: libsrc/arithmetic/im_invert.c:117 libsrc/arithmetic/im_stats.c:238 #: libsrc/arithmetic/im_floor.c:92 libsrc/arithmetic/im_remainder.c:103 #: libsrc/arithmetic/im_remainder.c:212 libsrc/arithmetic/im_subtract.c:171 #: libsrc/arithmetic/im_sintra.c:117 libsrc/arithmetic/im_sintra.c:202 #: libsrc/arithmetic/im_log10tra.c:123 libsrc/arithmetic/im_divide.c:150 msgid "not uncoded" msgstr "" #: libsrc/conversion/im_magick2vips.c:54 libsrc/conversion/im_magick2vips.c:61 msgid "libMagick support disabled" msgstr "" #: libsrc/conversion/im_magick2vips.c:190 #, fuzzy, c-format msgid "unsupported colorspace %d" msgstr "Malkovich" #: libsrc/conversion/im_magick2vips.c:214 #, fuzzy, c-format msgid "unsupported bit depth %d" msgstr "Malkovich" #: libsrc/conversion/im_magick2vips.c:409 #, fuzzy msgid "unable to read pixels" msgstr "Malkovich" #: libsrc/conversion/im_magick2vips.c:431 #, fuzzy, c-format msgid "" "unable to read file \"%s\"\n" "libMagick error: %s %s" msgstr "Malkovich" #: libsrc/conversion/im_magick2vips.c:456 #, fuzzy, c-format msgid "" "unable to ping file \"%s\"\n" "libMagick error: %s %s" msgstr "Malkovich" #: libsrc/conversion/im_magick2vips.c:467 #, fuzzy msgid "bad image size" msgstr "Malkovich" #: libsrc/conversion/im_copy.c:138 libsrc/conversion/im_copy.c:275 msgid "in must be uncoded" msgstr "" #: libsrc/conversion/im_copy.c:142 msgid "Coding must be NONE or LABQ" msgstr "" #: libsrc/conversion/im_copy.c:146 #, c-format msgid "BandFmt must be in range [0,%d]" msgstr "" #: libsrc/conversion/im_copy.c:169 msgid "sizeof( pixel ) has changed" msgstr "" #: libsrc/conversion/im_copy.c:312 #, fuzzy msgid "unsupported image type" msgstr "Malkovich" #: libsrc/conversion/im_ppm2vips.c:250 #, fuzzy msgid "internal error" msgstr "Malkovich" #: libsrc/conversion/im_tiff2vips.c:131 libsrc/conversion/im_tiff2vips.c:144 #: libsrc/conversion/im_vips2tiff.c:127 msgid "TIFF support disabled" msgstr "" #: libsrc/conversion/im_tiff2vips.c:284 libsrc/conversion/im_tiff2vips.c:307 #: libsrc/conversion/im_tiff2vips.c:326 #, c-format msgid "required field %d missing" msgstr "" #: libsrc/conversion/im_tiff2vips.c:288 #, c-format msgid "required field %d=%d, not %d" msgstr "" #: libsrc/conversion/im_tiff2vips.c:632 #, fuzzy msgid "read error" msgstr "Malkovich" #: libsrc/conversion/im_tiff2vips.c:1029 #, fuzzy msgid "bad colormap" msgstr "Malkovich" #: libsrc/conversion/im_tiff2vips.c:1085 libsrc/conversion/im_tiff2vips.c:1135 msgid "3 or 4 bands RGB TIFF only" msgstr "" #: libsrc/conversion/im_tiff2vips.c:1284 #, fuzzy msgid "unknown resolution unit" msgstr "Malkovich" #: libsrc/conversion/im_tiff2vips.c:1360 #, fuzzy, c-format msgid "unsupported sample format %d for lab image" msgstr "Malkovich" #: libsrc/conversion/im_tiff2vips.c:1370 #, fuzzy, c-format msgid "unsupported depth %d for LAB image" msgstr "Malkovich" #: libsrc/conversion/im_tiff2vips.c:1417 #, c-format msgid "unsupported sample format %d for greyscale image" msgstr "" #: libsrc/conversion/im_tiff2vips.c:1426 #, fuzzy, c-format msgid "unsupported depth %d for greyscale image" msgstr "Malkovich" #: libsrc/conversion/im_tiff2vips.c:1466 #, c-format msgid "unsupported sample format %d for rgb image" msgstr "" #: libsrc/conversion/im_tiff2vips.c:1475 #, fuzzy, c-format msgid "unsupported depth %d for RGB image" msgstr "Malkovich" #: libsrc/conversion/im_tiff2vips.c:1489 #, c-format msgid "unknown photometric interpretation %d" msgstr "" #: libsrc/conversion/im_tiff2vips.c:1550 #, fuzzy, c-format msgid "bad page number %d" msgstr "Malkovich" #: libsrc/conversion/im_tiff2vips.c:1577 libsrc/conversion/im_vips2tiff.c:265 #, fuzzy, c-format msgid "unable to open \"%s\" for input" msgstr "Malkovich" #: libsrc/conversion/im_tiff2vips.c:1627 libsrc/conversion/im_tiff2vips.c:1661 #, c-format msgid "TIFF file does not contain page %d" msgstr "" #: libsrc/conversion/im_vips2tiff.c:228 #, fuzzy, c-format msgid "TIFF error in \"%s\": " msgstr "Malkovich" #: libsrc/conversion/im_vips2tiff.c:245 #, fuzzy, c-format msgid "unable to open \"%s\" for output" msgstr "Malkovich" #: libsrc/conversion/im_vips2tiff.c:381 #, fuzzy, c-format msgid "file \"%s\" too long" msgstr "Malkovich" #: libsrc/conversion/im_vips2tiff.c:393 #, fuzzy, c-format msgid "error reading from file \"%s\"" msgstr "Malkovich" #: libsrc/conversion/im_vips2tiff.c:416 #, fuzzy, c-format msgid "unable to read profile \"%s\"" msgstr "Malkovich" #. Out of space! #. #: libsrc/conversion/im_vips2tiff.c:688 msgid "layer buffer exhausted -- try making TIFF output tiles smaller" msgstr "" #: libsrc/conversion/im_vips2tiff.c:919 msgid "TIFF write tile failed" msgstr "" #: libsrc/conversion/im_vips2tiff.c:994 #, fuzzy msgid "internal error #9876345" msgstr "Malkovich" #: libsrc/conversion/im_vips2tiff.c:1109 #, fuzzy msgid "TIFF write failed" msgstr "Malkovich" #: libsrc/conversion/im_vips2tiff.c:1238 #, fuzzy msgid "bad JPEG quality parameter" msgstr "Malkovich" #: libsrc/conversion/im_vips2tiff.c:1244 #, c-format msgid "" "unknown compression mode \"%s\"\n" "should be one of \"none\", \"packbits\", \"ccittfax4\", \"lzw\", \"deflate\" " "or \"jpeg\"" msgstr "" #: libsrc/conversion/im_vips2tiff.c:1258 #, fuzzy msgid "bad tile sizes" msgstr "Malkovich" #: libsrc/conversion/im_vips2tiff.c:1265 #, c-format msgid "bad tile size %dx%d" msgstr "" #: libsrc/conversion/im_vips2tiff.c:1273 msgid "tile size not a multiple of 16" msgstr "" #: libsrc/conversion/im_vips2tiff.c:1282 #, c-format msgid "" "unknown layout mode \"%s\"\n" "should be one of \"tile\" or \"strip\"" msgstr "" #: libsrc/conversion/im_vips2tiff.c:1294 #, c-format msgid "" "unknown multi-res mode \"%s\"\n" "should be one of \"flat\" or \"pyramid\"" msgstr "" #: libsrc/conversion/im_vips2tiff.c:1306 #, c-format msgid "" "unknown format \"%s\"\n" "should be one of \"onebit\" or \"manybit\"" msgstr "" #: libsrc/conversion/im_vips2tiff.c:1318 #, c-format msgid "" "unknown resolution unit \"%s\"\n" "should be one of \"res_cm\" or \"res_inch\"" msgstr "" #: libsrc/conversion/im_vips2tiff.c:1327 #, fuzzy msgid "bad resolution values" msgstr "Malkovich" #: libsrc/conversion/im_vips2tiff.c:1342 #, c-format msgid "unknown extra options \"%s\"" msgstr "" #: libsrc/conversion/im_vips2tiff.c:1346 msgid "can't have strip pyramid -- enabling tiling" msgstr "" #: libsrc/conversion/im_vips2tiff.c:1356 msgid "can only pyramid LABQ and non-complex images" msgstr "" #: libsrc/conversion/im_vips2tiff.c:1372 msgid "can't have 1-bit JPEG -- disabling JPEG" msgstr "" #: libsrc/conversion/im_vips2tiff.c:1529 #, fuzzy msgid "unknown coding type" msgstr "Malkovich" #: libsrc/conversion/im_vips2tiff.c:1537 msgid "unsigned 8-bit int, 16-bit int, and 32-bit float only" msgstr "" #: libsrc/conversion/im_vips2tiff.c:1543 msgid "1 to 4 bands only" msgstr "" #: libsrc/arithmetic/im_powtra.c:188 libsrc/arithmetic/im_tantra.c:121 #: libsrc/arithmetic/im_tantra.c:207 libsrc/arithmetic/im_expntra.c:188 #: libsrc/arithmetic/im_logtra.c:127 libsrc/arithmetic/im_sintra.c:121 #: libsrc/arithmetic/im_sintra.c:206 libsrc/arithmetic/im_log10tra.c:127 #, fuzzy msgid "not non-complex" msgstr "Malkovich" #: libsrc/arithmetic/im_powtra.c:193 libsrc/arithmetic/im_expntra.c:193 #: libsrc/arithmetic/im_lintra.c:290 libsrc/arithmetic/im_remainder.c:217 #, c-format msgid "not 1 or %d elements in vector" msgstr "" #: libsrc/arithmetic/im_deviate.c:175 libsrc/arithmetic/im_costra.c:121 #: libsrc/arithmetic/im_costra.c:206 libsrc/arithmetic/im_measure.c:193 #: libsrc/arithmetic/im_avg.c:162 libsrc/arithmetic/im_stats.c:234 msgid "bad input type" msgstr "" #: libsrc/arithmetic/im_multiply.c:177 libsrc/arithmetic/im_remainder.c:94 msgid "not same size" msgstr "" #: libsrc/arithmetic/im_multiply.c:182 libsrc/arithmetic/im_add.c:250 #: libsrc/arithmetic/im_remainder.c:99 libsrc/arithmetic/im_subtract.c:167 #: libsrc/arithmetic/im_divide.c:146 #, fuzzy msgid "not same number of bands" msgstr "Malkovich" #: libsrc/arithmetic/im_minpos.c:80 msgid "input must be uncoded" msgstr "" #: libsrc/arithmetic/im_gadd.c:91 libsrc/arithmetic/im_gadd.c:107 #, fuzzy msgid "Unable to accept image1" msgstr "Malkovich" #. Name #: libsrc/arithmetic/arith_dispatch.c:79 #, fuzzy msgid "absolute value" msgstr "Malkovich" #. Name #: libsrc/arithmetic/arith_dispatch.c:98 #, fuzzy msgid "add two images" msgstr "Malkovich" #. Name #: libsrc/arithmetic/arith_dispatch.c:123 msgid "average value of image" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:142 msgid "multiply two complex images, normalising output" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:167 msgid "standard deviation of image" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:186 #, fuzzy msgid "10^pel of image" msgstr "Malkovich" #. Name #: libsrc/arithmetic/arith_dispatch.c:205 #, fuzzy msgid "e^pel of image" msgstr "Malkovich" #. Name #: libsrc/arithmetic/arith_dispatch.c:234 #, fuzzy msgid "x^pel of image" msgstr "Malkovich" #. Name #: libsrc/arithmetic/arith_dispatch.c:263 msgid "[x,y,z]^pel of image" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:299 msgid "average of 4 images" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:318 msgid "divide two images" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:352 msgid "calculate a*in1 + b*in2 + c = outfile" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:371 msgid "photographic negative" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:402 msgid "calculate a*in + b = outfile" msgstr "" #: libsrc/arithmetic/arith_dispatch.c:427 msgid "vectors not same length" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:438 msgid "calculate a*in + b -> out, a and b vectors" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:470 msgid "calculate max(white)*factor*(in/white), if clip == 1" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:489 #, fuzzy msgid "log10 of image" msgstr "Malkovich" #. Name #: libsrc/arithmetic/arith_dispatch.c:508 #, fuzzy msgid "ln of image" msgstr "Malkovich" #. Name #: libsrc/arithmetic/arith_dispatch.c:527 msgid "tan of image (angles in degrees)" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:546 msgid "atan of image (result in degrees)" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:565 msgid "cos of image (angles in degrees)" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:584 msgid "acos of image (result in degrees)" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:603 msgid "round to smallest integal value not less than" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:622 msgid "round to largest integal value not greater than" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:641 msgid "round to nearest integal value" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:660 msgid "sin of image (angles in degrees)" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:679 msgid "unit vector in direction of value" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:698 msgid "asin of image (result in degrees)" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:723 msgid "maximum value of image" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:758 msgid "position of maximum value of image" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:818 msgid "measure averages of a grid of patches" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:843 msgid "minimum value of image" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:871 msgid "position of minimum value of image" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:890 msgid "remainder after integer division" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:919 msgid "remainder after integer division by a constant" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:948 msgid "remainder after integer division by a vector of constants" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:968 msgid "multiply two images" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:989 msgid "pel^x ofbuildimage" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:1010 msgid "pel^[x,y,z] of image" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:1041 msgid "many image statistics in one pass" msgstr "" #. Name #: libsrc/arithmetic/arith_dispatch.c:1060 msgid "subtract two images" msgstr "" #: libsrc/arithmetic/im_measure.c:106 #, c-format msgid "patch %d is out of range" msgstr "" #: libsrc/arithmetic/im_measure.c:148 #, c-format msgid "patch %d, band %d: avg = %g, sdev = %g" msgstr "" #: libsrc/arithmetic/im_abs.c:183 #, fuzzy msgid "unknown input type" msgstr "Malkovich" #: libsrc/arithmetic/im_add.c:190 #, fuzzy, c-format msgid "not one band or %d bands" msgstr "Malkovich" #: libsrc/arithmetic/im_add.c:194 #, fuzzy msgid "bad bands" msgstr "Malkovich" #: libsrc/arithmetic/im_invert.c:121 msgid "not UCHAR" msgstr "" #: libsrc/arithmetic/im_remainder.c:239 #, fuzzy msgid "division by zero" msgstr "Malkovich" #: libsrc/relational/im_blend.c:338 #, fuzzy msgid "images not uncoded" msgstr "Malkovich" #: libsrc/relational/im_blend.c:344 libsrc/relational/im_ifthenelse.c:183 msgid "size and format of then and else must match" msgstr "" #: libsrc/relational/im_blend.c:349 libsrc/relational/im_ifthenelse.c:188 msgid "conditional image must be uchar" msgstr "" #: libsrc/relational/im_blend.c:354 libsrc/relational/im_ifthenelse.c:193 msgid "conditional image must be one band or same as then and else images" msgstr "" #: libsrc/relational/im_ifthenelse.c:167 msgid "then image must be uncoded or labpack" msgstr "" #: libsrc/relational/im_ifthenelse.c:172 msgid "else image must be uncoded or labpack" msgstr "" #: libsrc/relational/im_ifthenelse.c:177 msgid "condition image must be uncoded" msgstr "" #: libsrc/histograms_lut/im_maplut.c:112 #, c-format msgid "%d overflows detected" msgstr "" #. Switch for input types. Has to be uint type! #. #: libsrc/histograms_lut/im_maplut.c:473 #, fuzzy msgid "bad input file" msgstr "Malkovich" #. Switch for LUT types. One function for non-complex images, a #. * variant for complex ones. Another pair as well, in case the input is not #. * uchar. #. #: libsrc/histograms_lut/im_maplut.c:504 #, fuzzy msgid "bad lut file" msgstr "Malkovich" #: libsrc/histograms_lut/im_maplut.c:554 msgid "lut is not uncoded" msgstr "" #: libsrc/histograms_lut/im_maplut.c:558 msgid "lut seems very large!" msgstr "" #: libsrc/histograms_lut/im_maplut.c:570 msgid "input is not uncoded" msgstr "" #: libsrc/histograms_lut/im_maplut.c:574 #, fuzzy msgid "input is not some unsigned integer type" msgstr "Malkovich" #: libsrc/histograms_lut/im_maplut.c:579 msgid "" "lut should have 1 band, or same number of bands as input, or any number of " "bands if input has 1 band" msgstr "" #: libsrc/histograms_lut/im_maplut.c:586 msgid "input is uchar and lut does not have 256 elements" msgstr "" #: libsrc/histograms_lut/im_histnD.c:212 #, fuzzy msgid " uncoded images only" msgstr "Malkovich" #: libsrc/histograms_lut/im_histnD.c:218 msgid " unsigned 8 or 16 bit images only" msgstr "" #: libsrc/histograms_lut/im_histnD.c:225 #, c-format msgid " bins out of range [1,%d]" msgstr "" #: libsrc/histograms_lut/tone.c:233 msgid "bad in_max, out_max parameters" msgstr "" #: libsrc/histograms_lut/tone.c:237 #, fuzzy msgid "bad Lb, Lw parameters" msgstr "Malkovich" #: libsrc/histograms_lut/tone.c:241 msgid "Ps not in range [0.0,1.0]" msgstr "" #: libsrc/histograms_lut/tone.c:245 msgid "Pm not in range [0.0,1.0]" msgstr "" #: libsrc/histograms_lut/tone.c:249 msgid "Ph not in range [0.0,1.0]" msgstr "" #: libsrc/histograms_lut/tone.c:253 msgid "S not in range [-30,+30]" msgstr "" #: libsrc/histograms_lut/tone.c:257 msgid "M not in range [-30,+30]" msgstr "" #: libsrc/histograms_lut/tone.c:261 msgid "H not in range [-30,+30]" msgstr "" #: libsrc/histograms_lut/tone.c:342 libsrc/histograms_lut/tone.c:390 msgid "not 1 by n or n by 1 image" msgstr "" #: libsrc/histograms_lut/tone.c:396 msgid "not 1024-point IM_BANDFMT_SHORT lut" msgstr "" #: libsrc/histograms_lut/tone.c:413 libsrc/histograms_lut/tone.c:487 msgid "input not LabS or LabQ" msgstr "" #: libsrc/inplace/im_insertplace.c:81 msgid "inputs differ in format" msgstr "" #: libsrc/inplace/im_insertplace.c:85 msgid "input should be uncoded or IM_CODING_LABQ" msgstr "" #: libsrc/inplace/im_insertplace.c:104 msgid "small not inside big" msgstr "" #: libsrc/iofuncs/im_mapfile.c:134 libsrc/iofuncs/im_mapfile.c:301 #, fuzzy msgid "unable to CreateFileMapping" msgstr "Malkovich" #: libsrc/iofuncs/im_mapfile.c:150 libsrc/iofuncs/im_mapfile.c:313 #, fuzzy msgid "unable to MapViewOfFile" msgstr "Malkovich" #: libsrc/iofuncs/im_mapfile.c:177 #, fuzzy msgid "unable to mmap" msgstr "Malkovich" #: libsrc/iofuncs/im_mapfile.c:178 #, c-format msgid "" "map failed (%s), running very low on system resources, expect a crash soon" msgstr "" #: libsrc/iofuncs/im_mapfile.c:195 libsrc/iofuncs/im_mapfile.c:307 #, fuzzy msgid "unable to UnmapViewOfFile" msgstr "Malkovich" #: libsrc/iofuncs/im_mapfile.c:201 #, fuzzy msgid "unable to munmap file" msgstr "Malkovich" #: libsrc/iofuncs/im_mapfile.c:224 libsrc/iofuncs/im_mapfile.c:265 #, fuzzy msgid "unable to get file status" msgstr "Malkovich" #: libsrc/iofuncs/im_mapfile.c:229 msgid "file is less than 64 bytes" msgstr "" #: libsrc/iofuncs/im_mapfile.c:233 msgid "not a regular file" msgstr "" #: libsrc/iofuncs/im_mapfile.c:270 #, fuzzy msgid "unable to read data" msgstr "Malkovich" #: libsrc/iofuncs/im_mapfile.c:333 #, fuzzy, c-format msgid "unable to mmap: \"%s\" - %s" msgstr "Malkovich" #: libsrc/iofuncs/im_mapfile.c:343 #, fuzzy, c-format msgid "unable to mmap \"%s\" to same address" msgstr "Malkovich" #: libsrc/iofuncs/im_binfile.c:88 libsrc/iofuncs/im_render.c:1079 #, fuzzy msgid "bad parameters" msgstr "Malkovich" #: libsrc/iofuncs/im_binfile.c:116 #, fuzzy, c-format msgid "unable to open %s: file has been truncated" msgstr "Malkovich" #: libsrc/iofuncs/im_binfile.c:126 #, c-format msgid "%s is longer than expected" msgstr "" #: libsrc/iofuncs/error.c:114 #, fuzzy msgid "windows error" msgstr "Malkovich" #: libsrc/iofuncs/error.c:123 #, fuzzy msgid "unix error" msgstr "Malkovich" #: libsrc/iofuncs/error.c:149 libsrc/iofuncs/error.c:150 #: libsrc/iofuncs/error.c:170 libsrc/iofuncs/error.c:171 #, fuzzy, c-format msgid "%s: " msgstr "Malkovich" #: libsrc/iofuncs/error.c:149 msgid "vips diagnostic" msgstr "" #: libsrc/iofuncs/error.c:170 msgid "vips warning" msgstr "" #: libsrc/iofuncs/im_readhist.c:163 msgid "history file too large" msgstr "" #: libsrc/iofuncs/im_readhist.c:174 #, fuzzy msgid "unable to read" msgstr "Malkovich" #: libsrc/iofuncs/im_header.c:102 #, c-format msgid "no such int field \"%s\"" msgstr "" #: libsrc/iofuncs/im_header.c:124 #, c-format msgid "no such double field \"%s\"" msgstr "" #: libsrc/iofuncs/im_header.c:146 #, c-format msgid "no such string field \"%s\"" msgstr "" #: libsrc/iofuncs/im_printdesc.c:112 msgid "" msgstr "" #: libsrc/iofuncs/im_printdesc.c:118 #, fuzzy msgid "" msgstr "Malkovich" #: libsrc/iofuncs/im_printdesc.c:124 msgid "" msgstr "" #: libsrc/iofuncs/im_printdesc.c:130 msgid "" msgstr "" #: libsrc/iofuncs/im_printdesc.c:136 msgid "" msgstr "" #: libsrc/iofuncs/im_printdesc.c:142 msgid "" msgstr "" #: libsrc/iofuncs/im_render.c:511 libsrc/iofuncs/im_render.c:666 #: libsrc/iofuncs/threadgroup.c:330 #, fuzzy msgid "unable to create thread" msgstr "Malkovich" #: libsrc/iofuncs/package.c:436 #, fuzzy, c-format msgid "unable to close plugin \"%s\"" msgstr "Malkovich" #: libsrc/iofuncs/package.c:438 libsrc/iofuncs/package.c:488 #: libsrc/iofuncs/package.c:502 #, fuzzy, c-format msgid "plugin error: %s" msgstr "Malkovich" #: libsrc/iofuncs/package.c:462 msgid "plugins not supported on this platform" msgstr "" #: libsrc/iofuncs/package.c:486 #, fuzzy, c-format msgid "unable to open plugin \"%s\"" msgstr "Malkovich" #: libsrc/iofuncs/package.c:499 #, c-format msgid "unable to find symbol \"package_table\" in plugin \"%s\"" msgstr "" #: libsrc/iofuncs/package.c:513 #, c-format msgid "corrupted package table in plugin \"%s\"" msgstr "" #: libsrc/iofuncs/package.c:636 libsrc/iofuncs/package.c:692 #, fuzzy, c-format msgid "function \"%s\" not found" msgstr "Malkovich" #: libsrc/iofuncs/package.c:664 #, fuzzy, c-format msgid "package \"%s\" not found" msgstr "Malkovich" #: libsrc/iofuncs/package.c:802 #, fuzzy msgid "too few arguments" msgstr "Malkovich" #: libsrc/iofuncs/package.c:824 #, fuzzy msgid "too many arguments" msgstr "Malkovich" #: libsrc/iofuncs/package.c:1031 msgid "flag not 0,1,2" msgstr "" #: libsrc/iofuncs/im_wrapmany.c:158 #, fuzzy msgid "too many input images" msgstr "Malkovich" #: libsrc/iofuncs/im_wrapmany.c:176 msgid "descriptors differ in size" msgstr "" #~ msgid "Stack overflow." #~ msgstr "Malkovich" #~ msgid "Spine stack overflow, runaway recursion?" #~ msgstr "Malkovich" #~ msgid "Frame stack overflow, expression too complex." #~ msgstr "Malkovich" #~ msgid "Stack underflow." #~ msgstr "Malkovich" #~ msgid "Frame stack underflow, you've found a bug!" #~ msgstr "Malkovich" #~ msgid "Spine stack underflow, you've found a bug!" #~ msgstr "Malkovich" #, fuzzy #~ msgid "" #~ "Error in binary \"%s\".\n" #~ "left = %s\n" #~ "right = %s" #~ msgstr "Malkovich" #~ msgid "Member not found." #~ msgstr "Malkovich" #, fuzzy #~ msgid "" #~ "Member \"%s\" not found in object \"%s\".\n" #~ "object = %s\n" #~ "tag = %s\n" #~ "Reference attempted in \"%s\"." #~ msgstr "Malkovich" #~ msgid "Bad argument." #~ msgstr "Malkovich" #, fuzzy #~ msgid "" #~ "Error in unary \"%s\".\n" #~ "argument = %s" #~ msgstr "Malkovich" #~ msgid "Symbol on left hand side of '.' is not scope" #~ msgstr "Malkovich" #~ msgid "Right hand side of '.' is not tag." #~ msgstr "Malkovich" #~ msgid "Bad left hand side." #~ msgstr "Malkovich" #~ msgid "Unimplemented." #~ msgstr "Malkovich" #~ msgid "invoking method:" #~ msgstr "Malkovich" #~ msgid "Close _without Saving" #~ msgstr "Malkovich" #~ msgid "translator_credits" #~ msgstr "Malkovich" #~ msgid "About %s." #~ msgstr "Malkovich" #~ msgid "%s: (c) 2003 The National Gallery" #~ msgstr "Malkovich" #~ msgid "" #~ "%s comes with ABSOLUTELY NO WARRANTY. This is free software\n" #~ "and you are welcome to redistribute it under certain conditions,\n" #~ "see http://www.gnu.org." #~ msgstr "Malkovich" #~ msgid "Homepage:" #~ msgstr "Malkovich" #~ msgid "Linked to VIPS library version:" #~ msgstr "Malkovich" #~ msgid "Temp files in:" #~ msgstr "Malkovich" #~ msgid "Help page not found." #~ msgstr "Malkovich" #~ msgid "No indexed help page found for tag \"%s\"" #~ msgstr "Malkovich" #, fuzzy #~ msgid "Search for" #~ msgstr "Malkovich" #~ msgid "Case sensitive" #~ msgstr "Malkovich" #~ msgid "Regular expression" #~ msgstr "Malkovich" #~ msgid "Search from start" #~ msgstr "Malkovich" #~ msgid "Unable to open location." #~ msgstr "Malkovich" #~ msgid "" #~ "Unable to open URL \"%s\"\n" #~ "windows error code = %d" #~ msgstr "Malkovich" #~ msgid "Browser window opened." #~ msgstr "Malkovich" #~ msgid "" #~ "Opened window for URL:\n" #~ "\n" #~ " %s\n" #~ "\n" #~ "This may take a few seconds." #~ msgstr "Malkovich" #~ msgid "" #~ "Attempted to launch browser with command:\n" #~ "\n" #~ " %s\n" #~ "\n" #~ "You can change this command in Preferences." #~ msgstr "Malkovich" #~ msgid "" #~ "Opened window for URL:\n" #~ "\n" #~ " %s\n" #~ "\n" #~ "You may need to switch desktops to see the new window." #~ msgstr "Malkovich" #~ msgid "Cancelling" #~ msgstr "Malkovich" #~ msgid "Computing image." #~ msgstr "Malkovich" #~ msgid "" #~ "Calculating all the pixels in an image. Press the\n" #~ "Cancel button to stop computation early." #~ msgstr "Malkovich" #~ msgid "Calculating" #~ msgstr "Malkovich" #~ msgid "About %d seconds left" #~ msgstr "Malkovich" #~ msgid "Thumbnails" #~ msgstr "Malkovich" #~ msgid "Image files found in: \"%s\"" #~ msgstr "Malkovich" #~ msgid "Searching ..." #~ msgstr "Malkovich" #~ msgid "Search incomplete!" #~ msgstr "Malkovich" #~ msgid "Not implemented." #~ msgstr "Malkovich" #~ msgid "Complex math ops not implemented." #~ msgstr "Malkovich" #, fuzzy #~ msgid "Macro error." #~ msgstr "Malkovich" #~ msgid "Builtin \"%s\" takes %d argument." #~ msgid_plural "Builtin \"%s\" takes %d arguments." #~ msgstr[0] "Malkovich" #~ msgstr[1] "Malkovich" #~ msgid "" #~ "Argument %d to builtin \"%s\" should be \"%s\"\n" #~ "you passed:\n" #~ " %s" #~ msgstr "Malkovich" #~ msgid "" #~ "Object %s\n" #~ "is not a class." #~ msgstr "Malkovich" #~ msgid "Member \"%s\" not found in class \"%s\"." #~ msgstr "Malkovich" #~ msgid "" #~ "Too many arguments to superclass constructor \"%s\".\n" #~ "No more than %d arguments are possible." #~ msgstr "Malkovich" #~ msgid "Superclass constructor \"%s\" expects %d arguments, not %d." #~ msgstr "Malkovich" #~ msgid "Bad superclass." #~ msgstr "Malkovich" #~ msgid "Superclass constructor \"%s\" should have no secret arguments." #~ msgstr "Malkovich" #~ msgid "First element in superclass of \"%s\" must be class or constructor." #~ msgstr "Malkovich" #~ msgid "" #~ "Too many arguments to class constructor \"%s\".\n" #~ "No more than %d arguments are possible." #~ msgstr "Malkovich" #~ msgid "Class not found." #~ msgstr "Malkovich" #~ msgid "Class \"%s\" not found." #~ msgstr "Malkovich" #~ msgid "" #~ "Member \"%s\" of class \"%s\" should be of type \"%s\", instead it's:" #~ msgstr "Malkovich" #~ msgid "_%s() not implemented for class \"%s\"." #~ msgstr "Malkovich" #~ msgid "Edit color \"%s\"" #~ msgstr "Malkovich" #~ msgid "Set color" #~ msgstr "Malkovich" #~ msgid "Bad value." #~ msgstr "Malkovich" #~ msgid "Double-click to edit this color, or drag-and-drop between colors" #~ msgstr "Malkovich" #~ msgid "Name clash." #~ msgstr "Malkovich" #~ msgid "" #~ "Can't create column \"%s\".\n" #~ "A column with that name already exists." #~ msgstr "Malkovich" #~ msgid "Empty column." #~ msgstr "Malkovich" #~ msgid "There are no objects in the current column." #~ msgstr "Malkovich" #~ msgid "Too few items." #~ msgstr "Malkovich" #~ msgid "" #~ "This column only has %d items, but %d items\n" #~ "are needed by operation \"%s\"." #~ msgstr "Malkovich" #~ msgid "Save Column \"%s\"" #~ msgstr "Malkovich" #~ msgid "Name" #~ msgstr "Malkovich" #~ msgid "Toolkit" #~ msgstr "Malkovich" #~ msgid "Filename" #~ msgstr "Malkovich" #~ msgid "Set menu item text here" #~ msgstr "Malkovich" #~ msgid "Add to this toolkit" #~ msgstr "Malkovich" #~ msgid "Store column in this file" #~ msgstr "Malkovich" #~ msgid "New menu item from column \"%s\"" #~ msgstr "Malkovich" #~ msgid "Menuize" #~ msgstr "Malkovich" #~ msgid "Edit caption, press enter to accept changes, press escape to cancel" #~ msgstr "Malkovich" #~ msgid "Enter expressions here" #~ msgstr "Malkovich" #~ msgid "Close the columnview" #~ msgstr "Malkovich" #~ msgid "Open the columnview" #~ msgstr "Malkovich" #~ msgid "Column menu" #~ msgstr "Malkovich" #~ msgid "Edit caption ..." #~ msgstr "Malkovich" #~ msgid "Select all" #~ msgstr "Malkovich" #, fuzzy #~ msgid "Make column into menu item ..." #~ msgstr "Malkovich" #~ msgid "" #~ "Left-drag to move, left-double-click to set title, right-click for menu" #~ msgstr "Malkovich" #~ msgid "Delete the column" #~ msgstr "Malkovich" #~ msgid "Too many shared nodes in graph." #~ msgstr "Malkovich" #~ msgid "Disable optimisation, or raise MAX_RELOC" #~ msgstr "Malkovich" #~ msgid "Member \"%s\" of class \"%s\" should have no arguments." #~ msgstr "Malkovich" #~ msgid "Unable to find image range." #~ msgstr "Malkovich" #~ msgid "Find image range failed." #~ msgstr "Malkovich" #~ msgid "Convert menu" #~ msgstr "Malkovich" #~ msgid "Scale" #~ msgstr "Malkovich" #~ msgid "Interpret" #~ msgstr "Malkovich" #~ msgid "Reset" #~ msgstr "Malkovich" #~ msgid "value" #~ msgstr "Malkovich" #~ msgid "zombie" #~ msgstr "Malkovich" #~ msgid "workspace" #~ msgstr "Malkovich" #~ msgid "workspace group" #~ msgstr "Malkovich" #~ msgid "root symbol" #~ msgstr "Malkovich" #~ msgid "external symbol" #~ msgstr "Malkovich" #~ msgid "built-in symbol" #~ msgstr "Malkovich" #~ msgid "Escape to cancel edit, press Return to accept edit and recalculate" #~ msgstr "Malkovich" #~ msgid "top level" #~ msgstr "Malkovich" #~ msgid "class" #~ msgstr "Malkovich" #~ msgid "instance" #~ msgstr "Malkovich" #~ msgid "definition" #~ msgstr "Malkovich" #~ msgid "parameter \"%s\"" #~ msgstr "Malkovich" #~ msgid "member" #~ msgstr "Malkovich" #~ msgid "function" #~ msgstr "Malkovich" #~ msgid "of" #~ msgstr "Malkovich" #~ msgid "XML library error." #~ msgstr "Malkovich" #~ msgid "model_save_filename: xmlNewDoc() failed" #~ msgstr "Malkovich" #~ msgid "model_save_filename: xmlNewDocNode() failed" #~ msgstr "Malkovich" #~ msgid "Save failed." #~ msgstr "Malkovich" #~ msgid "" #~ "Save of %s \"%s\" to file \"%s\" failed.\n" #~ "%s" #~ msgstr "Malkovich" #~ msgid "filemodel_save_all: no save method" #~ msgstr "Malkovich" #~ msgid "Load failed." #~ msgstr "Malkovich" #~ msgid "" #~ "Can't load XML file \"%s\",\n" #~ "it's not a %s save file" #~ msgstr "Malkovich" #~ msgid "" #~ "Can't load XML file \"%s\",\n" #~ "Unable to extract version information from namespace." #~ msgstr "Malkovich" #~ msgid "" #~ "Can't load XML file \"%s\",\n" #~ "The file does not contain a %s." #~ msgstr "Malkovich" #~ msgid "Save %s %s" #~ msgstr "Malkovich" #~ msgid "Save successful." #~ msgstr "Malkovich" #~ msgid "" #~ "%s \"%s\" successfully saved\n" #~ "to file \"%s\"." #~ msgstr "Malkovich" #~ msgid "Object has been modified." #~ msgstr "Malkovich" #~ msgid "" #~ "%s \"%s\" has been modified since you loaded it\n" #~ "from file \"%s\".\n" #~ "Do you want to save your changes?" #~ msgstr "Malkovich" #~ msgid "%s \"%s\" has been modified. Do you want to save your changes?" #~ msgstr "Malkovich" #~ msgid "Select file" #~ msgstr "Malkovich" #~ msgid "Choose" #~ msgstr "Malkovich" #~ msgid "TIFF image files (*.tif, *.tiff)" #~ msgstr "Malkovich" #~ msgid "JPEG image files (*.jpg, *.jpeg, *.jpe)" #~ msgstr "Malkovich" #~ msgid "PNG image files (*.png)" #~ msgstr "Malkovich" #~ msgid "VIPS image files (*.v)" #~ msgstr "Malkovich" #~ msgid "PPM image files (*.ppm, *.pgm, *.pbm)" #~ msgstr "Malkovich" #~ msgid "Workspace files (*.ws)" #~ msgstr "Malkovich" #~ msgid "Recombination matrix files (*.rec)" #~ msgstr "Malkovich" #~ msgid "Morphology matrix files (*.mor)" #~ msgstr "Malkovich" #~ msgid "Convolution matrix files (*.con)" #~ msgstr "Malkovich" #~ msgid "Matrix files (*.mat)" #~ msgstr "Malkovich" #~ msgid "Definition files (*.def)" #~ msgstr "Malkovich" #~ msgid "ICC profiles (*.icc, *.icm)" #~ msgstr "Malkovich" #~ msgid "All files (*)" #~ msgstr "Malkovich" #~ msgid "Unable to determine space free in \"%s\"." #~ msgstr "Malkovich" #~ msgid "free in \"%s\"" #~ msgstr "Malkovich" #~ msgid "Increment filename" #~ msgstr "Malkovich" #, fuzzy #~ msgid "After Save, add 1 to the last number in the file name" #~ msgstr "Malkovich" #~ msgid "Show thumbnails" #~ msgstr "Malkovich" #~ msgid "Show thumbnails for files in this directory" #~ msgstr "Malkovich" #~ msgid "Overwrite" #~ msgstr "Malkovich" #~ msgid "File \"%s\" exists. OK to overwrite?" #~ msgstr "Malkovich" #~ msgid "circular" #~ msgstr "Malkovich" #~ msgid "circular to label %d" #~ msgstr "Malkovich" #~ msgid "label %d" #~ msgstr "Malkovich" #~ msgid "unevaluated" #~ msgstr "Malkovich" #~ msgid "class (0x%x)" #~ msgstr "Malkovich" #~ msgid "members" #~ msgstr "Malkovich" #~ msgid "secret" #~ msgstr "Malkovich" #~ msgid "from" #~ msgstr "Malkovich" #~ msgid "NULL pointer" #~ msgstr "Malkovich" #~ msgid "symbol" #~ msgstr "Malkovich" #~ msgid "constructor" #~ msgstr "Malkovich" #~ msgid "symref" #~ msgstr "Malkovich" #~ msgid "compileref" #~ msgstr "Malkovich" #~ msgid "image \"%s\"" #~ msgstr "Malkovich" #~ msgid "tag \"%s\"" #~ msgstr "Malkovich" #~ msgid "unknown element tag %d" #~ msgstr "Malkovich" #~ msgid "Current:" #~ msgstr "Malkovich" #~ msgid "Directories" #~ msgstr "Malkovich" #~ msgid "Files" #~ msgstr "Malkovich" #~ msgid "Selection:" #~ msgstr "Malkovich" #~ msgid "Create Dir" #~ msgstr "Malkovich" #~ msgid "Delete File" #~ msgstr "Malkovich" #~ msgid "Rename File" #~ msgstr "Malkovich" #~ msgid "Error" #~ msgstr "Malkovich" #~ msgid "Close" #~ msgstr "Malkovich" #~ msgid "Create Directory" #~ msgstr "Malkovich" #~ msgid "Directory name:" #~ msgstr "Malkovich" #~ msgid "Create" #~ msgstr "Malkovich" #~ msgid "Cancel" #~ msgstr "Malkovich" #~ msgid "Delete" #~ msgstr "Malkovich" #~ msgid "Rename" #~ msgstr "Malkovich" #~ msgid "Directory unreadable: " #~ msgstr "Malkovich" #~ msgid "Current: " #~ msgstr "Malkovich" #~ msgid "Bad identifier." #~ msgstr "Malkovich" #~ msgid "" #~ "Enter an identifier. Identifiers start with\n" #~ "a letter, and then contain only letters, numbers,\n" #~ "apostrophy and underscore." #~ msgstr "Malkovich" #~ msgid "Bad floating point number." #~ msgstr "Malkovich" #~ msgid "\"%s\" is not a floating point number." #~ msgstr "Malkovich" #~ msgid "Bad integer." #~ msgstr "Malkovich" #~ msgid "\"%s\" is not an integer." #~ msgstr "Malkovich" #~ msgid "Bad unsigned integer." #~ msgstr "Malkovich" #~ msgid "Bad positive integer." #~ msgstr "Malkovich" #~ msgid "Left-click to change value" #~ msgstr "Malkovich" #~ msgid "Heap full." #~ msgstr "Malkovich" #~ msgid "" #~ "The main calculation heap has filled. Raise\n" #~ "the heap size limit in the Preferences panel." #~ msgstr "Malkovich" #~ msgid "Typecheck error." #~ msgstr "Malkovich" #~ msgid "" #~ "Expected %s, instead saw:\n" #~ " %s" #~ msgstr "Malkovich" #~ msgid "on" #~ msgstr "Malkovich" #, fuzzy #~ msgid "at %d" #~ msgstr "Malkovich" #~ msgid "at (%d, %d)" #~ msgstr "Malkovich" #~ msgid "at (%d, %d), offset (%d, %d)" #~ msgstr "Malkovich" #~ msgid "Pin up" #~ msgstr "Malkovich" #~ msgid "Check this to pin the dialog up" #~ msgstr "Malkovich" #~ msgid "Save Image \"%s\"" #~ msgstr "Malkovich" #~ msgid "Replace Image \"%s\"" #~ msgstr "Malkovich" #~ msgid "Double-click to open a viewer on this thumbnail" #~ msgstr "Malkovich" #~ msgid "Unable to open image \"%s\" for read." #~ msgstr "Malkovich" #~ msgid "Unable to write to file." #~ msgstr "Malkovich" #~ msgid "File \"%s\" is already open for read." #~ msgstr "Malkovich" #~ msgid "Error writing image to file \"%s\"." #~ msgstr "Malkovich" #~ msgid "Unable to paint on image." #~ msgstr "Malkovich" #~ msgid "" #~ "Unable to get write permission for file \"%s\".\n" #~ "Check permission settings." #~ msgstr "Malkovich" #~ msgid "Modify" #~ msgstr "Malkovich" #~ msgid "Modify disc file?" #~ msgstr "Malkovich" #~ msgid "" #~ "This image is being shown directly from the disc file:\n" #~ "\n" #~ " %s\n" #~ "\n" #~ "If you paint on this file, it will be permanently changed.\n" #~ "If something goes wrong, you may lose work.\n" #~ "Are you sure you want to modify this file?" #~ msgstr "Malkovich" #~ msgid "No image value" #~ msgstr "Malkovich" #~ msgid "%dx%d %s pixels, %d band, %s" #~ msgid_plural "%dx%d %s pixels, %d bands, %s" #~ msgstr[0] "Malkovich" #~ msgstr[1] "Malkovich" #~ msgid "Ruler menu" #~ msgstr "Malkovich" #~ msgid "Header for \"%s\"" #~ msgstr "Malkovich" #~ msgid "OK" #~ msgstr "Malkovich" #~ msgid "/_File" #~ msgstr "Malkovich" #~ msgid "/File/_New" #~ msgstr "Malkovich" #~ msgid "/File/New/_Point" #~ msgstr "Malkovich" #~ msgid "/File/New/_HGuide" #~ msgstr "Malkovich" #~ msgid "/File/New/_VGuide" #~ msgstr "Malkovich" #~ msgid "/File/New/_Arrow" #~ msgstr "Malkovich" #~ msgid "/File/New/_Region" #~ msgstr "Malkovich" #~ msgid "/File/sep3" #~ msgstr "Malkovich" #~ msgid "/File/_Replace Image ..." #~ msgstr "Malkovich" #~ msgid "/File/_Save Image As ..." #~ msgstr "Malkovich" #~ msgid "/File/sep1" #~ msgstr "Malkovich" #~ msgid "/File/Image _Header" #~ msgstr "Malkovich" #~ msgid "/File/Re_calculate Image" #~ msgstr "Malkovich" #~ msgid "/File/sep2" #~ msgstr "Malkovich" #~ msgid "/File/_Close" #~ msgstr "Malkovich" #~ msgid "/_View" #~ msgstr "Malkovich" #~ msgid "/View/_Toolbar" #~ msgstr "Malkovich" #~ msgid "/View/Toolbar/_Status" #~ msgstr "Malkovich" #~ msgid "/View/Toolbar/_Display control" #~ msgstr "Malkovich" #~ msgid "/View/Toolbar/_Paint" #~ msgstr "Malkovich" #~ msgid "/View/Toolbar/_Rulers" #~ msgstr "Malkovich" #~ msgid "/View/M_ode" #~ msgstr "Malkovich" #~ msgid "/View/Mode/_Select" #~ msgstr "Malkovich" #~ msgid "/View/Mode/_Pan" #~ msgstr "Malkovich" #~ msgid "/View/Mode/Zoom _In" #~ msgstr "Malkovich" #~ msgid "/View/Mode/Zoom _Out" #~ msgstr "Malkovich" #~ msgid "/View/Mode/P_aint" #~ msgstr "Malkovich" #~ msgid "/View/sep1" #~ msgstr "Malkovich" #~ msgid "/View/Zoom _In" #~ msgstr "Malkovich" #~ msgid "/View/Zoom _Out" #~ msgstr "Malkovich" #~ msgid "/View/Zoom _100%" #~ msgstr "Malkovich" #~ msgid "/View/Zoom to _Fit" #~ msgstr "Malkovich" #~ msgid "/View/_Zoom" #~ msgstr "Malkovich" #~ msgid "/View/Zoom/6%" #~ msgstr "Malkovich" #~ msgid "/View/Zoom/12%" #~ msgstr "Malkovich" #~ msgid "/View/Zoom/25%" #~ msgstr "Malkovich" #~ msgid "/View/Zoom/50%" #~ msgstr "Malkovich" #~ msgid "/View/Zoom/100%" #~ msgstr "Malkovich" #~ msgid "/View/Zoom/200%" #~ msgstr "Malkovich" #~ msgid "/View/Zoom/400%" #~ msgstr "Malkovich" #~ msgid "/View/Zoom/800%" #~ msgstr "Malkovich" #~ msgid "/View/Zoom/1600%" #~ msgstr "Malkovich" #~ msgid "/_Help" #~ msgstr "Malkovich" #~ msgid "/Help/_Image View" #~ msgstr "Malkovich" #~ msgid "/Help/_Paint Bar" #~ msgstr "Malkovich" #~ msgid "Left" #~ msgstr "Malkovich" #~ msgid "Top" #~ msgstr "Malkovich" #~ msgid "Width" #~ msgstr "Malkovich" #~ msgid "Height" #~ msgstr "Malkovich" #~ msgid "Left edge of region" #~ msgstr "Malkovich" #~ msgid "Top edge of region" #~ msgstr "Malkovich" #~ msgid "Width of region" #~ msgstr "Malkovich" #~ msgid "Height of region" #~ msgstr "Malkovich" #~ msgid "Edit \"%s\"" #~ msgstr "Malkovich" #, fuzzy #~ msgid "Set Region" #~ msgstr "Malkovich" #~ msgid "at (%d, %d), size (%d, %d)" #~ msgstr "Malkovich" #~ msgid "%dx%d %s pixels, %d band" #~ msgid_plural "%dx%d %s pixels, %d bands" #~ msgstr[0] "Malkovich" #~ msgstr[1] "Malkovich" #~ msgid "scope \"%s\"" #~ msgstr "Malkovich" #~ msgid "reference to symbol \"%s\"" #~ msgstr "Malkovich" #~ msgid "" #~ "Press Escape to cancel edit, press Return to accept edit and recalculate" #~ msgstr "Malkovich" #~ msgid "" #~ "Value display\n" #~ "Left-click to edit expression" #~ msgstr "Malkovich" #~ msgid "line too long" #~ msgstr "Malkovich" #~ msgid "end of line inside string" #~ msgstr "Malkovich" #~ msgid "no end of string" #~ msgstr "Malkovich" #~ msgid "no end of comment!" #~ msgstr "Malkovich" #~ msgid "bad char constant" #~ msgstr "Malkovich" #~ msgid "illegal character \"%c\"" #~ msgstr "Malkovich" #~ msgid "Circular dependency." #~ msgstr "Malkovich" #~ msgid "Circular dependency detected near symbol \"%s\"." #~ msgstr "Malkovich" #~ msgid "" #~ "%s: usage:\n" #~ "%s filename1 filename2 ...\n" #~ "\tstart in GUI mode, loading the named files" #~ msgstr "Malkovich" #~ msgid "" #~ "%s -script filename arg1 arg2 ...\n" #~ "\tread in filename as a set of definitions, set list argv to\n" #~ "\t[\"filename\", \"arg1\", \"arg2\", ...], set argc to length of list;\n" #~ "\tprint the value of symbol \"main\" to stdout; exit; useful for\n" #~ "\trunning %s as an interpreter on unix" #~ msgstr "Malkovich" #~ msgid "" #~ "%s -main arg1 arg2 ...\n" #~ "\tas -script, but read the definitions from stdin rather than from a\n" #~ "\tfile; useful for here-is shell scripts" #~ msgstr "Malkovich" #~ msgid "" #~ "%s -workspace arg1 arg2 ...\n" #~ "\tas -main, but read a workspace save file instead; run in GUI mode\n" #~ "\tprint the value of the final row in the save file on exit" #~ msgstr "Malkovich" #~ msgid "" #~ "%s -benchmark\n" #~ "\tload all start objects and quit; useful for bechmarking the compiler" #~ msgstr "Malkovich" #~ msgid "symbol \"main\" not found" #~ msgstr "Malkovich" #~ msgid "symbol \"main\" has no value" #~ msgstr "Malkovich" #~ msgid "Unknown file type." #~ msgstr "Malkovich" #~ msgid "Unable to load \"%s\"." #~ msgstr "Malkovich" #~ msgid "Unable to load." #~ msgstr "Malkovich" #~ msgid "Error loading plug-in \"%s\"." #~ msgstr "Malkovich" #~ msgid "Error loading plug-ins in directory \"%s/lib\"" #~ msgstr "Malkovich" #, fuzzy #~ msgid "Ink dropper" #~ msgstr "Malkovich" #~ msgid "Duplicate" #~ msgstr "Malkovich" #~ msgid "Pen" #~ msgstr "Malkovich" #, fuzzy #~ msgid "Line" #~ msgstr "Malkovich" #~ msgid "Text" #~ msgstr "Malkovich" #~ msgid "Smudge" #~ msgstr "Malkovich" #~ msgid "Flood" #~ msgstr "Malkovich" #, fuzzy #~ msgid "Flood Blob" #~ msgstr "Malkovich" #, fuzzy #~ msgid "Fill Rectangle" #~ msgstr "Malkovich" #, fuzzy #~ msgid "Pan" #~ msgstr "Malkovich" #, fuzzy #~ msgid "Select" #~ msgstr "Malkovich" #~ msgid "" #~ "unable to change max file descriptors\n" #~ "max file descriptors still set to %d" #~ msgstr "Malkovich" #~ msgid "unable to read max file descriptors" #~ msgstr "Malkovich" #~ msgid "-script needs an argument" #~ msgstr "Malkovich" #~ msgid "Startup error." #~ msgstr "Malkovich" #~ msgid "" #~ "Startup error log:\n" #~ "%s" #~ msgstr "Malkovich" #~ msgid "Welcome to %s-%s!" #~ msgstr "Malkovich" #~ msgid "" #~ "A new directory has been created in your home directory to hold startup,\n" #~ "data and temporary files:\n" #~ "\n" #~ " %s\n" #~ "\n" #~ "If you've used previous versions of %s, you will probably want\n" #~ "to move any files over from your old work area and remove any old temps." #~ msgstr "Malkovich" #~ msgid "No temp area" #~ msgstr "Malkovich" #~ msgid "%s free" #~ msgstr "Malkovich" #~ msgid "%d cells free" #~ msgstr "Malkovich" #~ msgid "Selected:" #~ msgstr "Malkovich" #~ msgid "%s in \"%s\", %d cells in heap, %d cells free, %d cells maximum" #~ msgstr "Malkovich" #~ msgid "modified" #~ msgstr "Malkovich" #~ msgid "No objects selected." #~ msgstr "Malkovich" #~ msgid "Find in workspace not implemented yet." #~ msgstr "Malkovich" #~ msgid "Find again in workspace not implemented yet." #~ msgstr "Malkovich" #~ msgid "There are no errors (that I can see) in this workspace." #~ msgstr "Malkovich" #~ msgid "Recalculate" #~ msgstr "Malkovich" #~ msgid "Completely recalculate?" #~ msgstr "Malkovich" #~ msgid "Insert image" #~ msgstr "Malkovich" #~ msgid "Merge workspace" #~ msgstr "Malkovich" #, fuzzy #~ msgid "No recent workspaces" #~ msgstr "Malkovich" #~ msgid "Open workspace" #~ msgstr "Malkovich" #~ msgid "Caption" #~ msgstr "Malkovich" #~ msgid "Set workspace name here" #~ msgstr "Malkovich" #~ msgid "Set workspace caption here" #~ msgstr "Malkovich" #~ msgid "New Workspace" #~ msgstr "Malkovich" #~ msgid "Create Workspace" #~ msgstr "Malkovich" #~ msgid "Set column name here" #~ msgstr "Malkovich" #~ msgid "Set column caption here" #~ msgstr "Malkovich" #~ msgid "New Column" #~ msgstr "Malkovich" #~ msgid "Create Column" #~ msgstr "Malkovich" #~ msgid "Delete selected objects?" #~ msgstr "Malkovich" #~ msgid "Are you sure you want to delete %s?" #~ msgstr "Malkovich" #~ msgid "/File/_New ..." #~ msgstr "Malkovich" #~ msgid "/File/_Open ..." #~ msgstr "Malkovich" #, fuzzy #~ msgid "/File/Open _Recent" #~ msgstr "Malkovich" #~ msgid "/File/_Save" #~ msgstr "Malkovich" #~ msgid "/File/_Save As ..." #~ msgstr "Malkovich" #~ msgid "/File/_Program" #~ msgstr "Malkovich" #~ msgid "/File/Re_cover After Crash ..." #~ msgstr "Malkovich" #~ msgid "/_Edit" #~ msgstr "Malkovich" #~ msgid "/Edit/Delete" #~ msgstr "Malkovich" #~ msgid "/Edit/Select All" #~ msgstr "Malkovich" #~ msgid "/Edit/Duplicate" #~ msgstr "Malkovich" #~ msgid "/Edit/sep2" #~ msgstr "Malkovich" #~ msgid "/Edit/_Find" #~ msgstr "Malkovich" #~ msgid "/Edit/Find _Next" #~ msgstr "Malkovich" #~ msgid "/Edit/_Jump To Next Error" #~ msgstr "Malkovich" #~ msgid "/Edit/sep4" #~ msgstr "Malkovich" #~ msgid "/Edit/_Group" #~ msgstr "Malkovich" #~ msgid "/Edit/U_ngroup" #~ msgstr "Malkovich" #~ msgid "/Edit/_Recalculate" #~ msgstr "Malkovich" #~ msgid "/Edit/sep3" #~ msgstr "Malkovich" #~ msgid "/Edit/_Preferences" #~ msgstr "Malkovich" #~ msgid "/View/_Statusbar" #~ msgstr "Malkovich" #~ msgid "/View/_Regular" #~ msgstr "Malkovich" #~ msgid "/View/Show _Formula" #~ msgstr "Malkovich" #~ msgid "/View/No _Edits" #~ msgstr "Malkovich" #~ msgid "/_Insert" #~ msgstr "Malkovich" #~ msgid "/Insert/New C_olumn ..." #~ msgstr "Malkovich" #~ msgid "/Insert/sep6" #~ msgstr "Malkovich" #~ msgid "/Insert/Ima_ge From File ..." #~ msgstr "Malkovich" #~ msgid "/Insert/Workspace From File ..." #~ msgstr "Malkovich" #~ msgid "/Insert/Matrix From File ..." #~ msgstr "Malkovich" #~ msgid "/_Toolkits" #~ msgstr "Malkovich" #~ msgid "/Help/_About" #~ msgstr "Malkovich" #~ msgid "/Help/sep7" #~ msgstr "Malkovich" #~ msgid "/Help/_This Window" #~ msgstr "Malkovich" #~ msgid "/Help/_Users Guide" #~ msgstr "Malkovich" #~ msgid "/Help/_Quick Tour" #~ msgstr "Malkovich" #~ msgid "/Help/_Mosaic Tour" #~ msgstr "Malkovich" #~ msgid "/Help/_Nerd Tour" #~ msgstr "Malkovich" #~ msgid "/Help/M_enu Reference" #~ msgstr "Malkovich" #~ msgid "/Help/_Configuration" #~ msgstr "Malkovich" #~ msgid "/Help/sep6" #~ msgstr "Malkovich" #~ msgid "/Help/_Go to VIPS Home Page" #~ msgstr "Malkovich" #~ msgid "Open Workspace" #~ msgstr "Malkovich" #~ msgid "Save Workspace As" #~ msgstr "Malkovich" #~ msgid "Duplicate Workspace" #~ msgstr "Malkovich" #~ msgid "Duplicate Selected Rows" #~ msgstr "Malkovich" #~ msgid "Insert File" #~ msgstr "Malkovich" #~ msgid "Sliders" #~ msgstr "Malkovich" #~ msgid "Toggle buttons" #~ msgstr "Malkovich" #~ msgid "Text, plus scale and offset" #~ msgstr "Malkovich" #~ msgid "Display as" #~ msgstr "Malkovich" #, fuzzy #~ msgid "Edit matrix \"%s\"" #~ msgstr "Malkovich" #~ msgid "Set matrix" #~ msgstr "Malkovich" #~ msgid "Save Matrix \"%s\"" #~ msgstr "Malkovich" #~ msgid "Replace Matrix \"%s\"" #~ msgstr "Malkovich" #~ msgid "" #~ "Cell (%d, %d):\n" #~ "%s" #~ msgstr "Malkovich" #~ msgid ": cell (%d, %d): %s" #~ msgstr "Malkovich" #~ msgid "" #~ "Unable to load from file \"%s\".\n" #~ "Error log is:\n" #~ "%s" #~ msgstr "Malkovich" #~ msgid "" #~ "Unable to load from \"%s\".\n" #~ "Error log is:\n" #~ "%s" #~ msgstr "Malkovich" #~ msgid "model_save: xmlNewChild() failed" #~ msgstr "Malkovich" #~ msgid "XML load error." #~ msgstr "Malkovich" #~ msgid "Can't load node of type \"%s\" into object of type \"%s\"" #~ msgstr "Malkovich" #~ msgid "Delete?" #~ msgstr "Malkovich" #~ msgid "Are you sure you want to delete %s \"%s\"?" #~ msgstr "Malkovich" #~ msgid "No options." #~ msgstr "Malkovich" #~ msgid "You need at least one option in your option list" #~ msgstr "Malkovich" #~ msgid "Set option caption here" #~ msgstr "Malkovich" #~ msgid "Options" #~ msgstr "Malkovich" #~ msgid "Value" #~ msgstr "Malkovich" #~ msgid "Set option default value here" #~ msgstr "Malkovich" #~ msgid "Edit option" #~ msgstr "Malkovich" #~ msgid "Set option" #~ msgstr "Malkovich" #~ msgid "Orderlist menu" #~ msgstr "Malkovich" #~ msgid "Delete item" #~ msgstr "Malkovich" #~ msgid "Delete selected items" #~ msgstr "Malkovich" #~ msgid "Delete all items" #~ msgstr "Malkovich" #~ msgid "Current options - right button for menu" #~ msgstr "Malkovich" #~ msgid "Enter new option fields here" #~ msgstr "Malkovich" #~ msgid "Paintbox bar menu" #~ msgstr "Malkovich" #~ msgid "Font not found." #~ msgstr "Malkovich" #~ msgid "Font \"%s\" not found on system." #~ msgstr "Malkovich" #~ msgid "Select font" #~ msgstr "Malkovich" #~ msgid "Set font" #~ msgstr "Malkovich" #~ msgid "Clear undo history?" #~ msgstr "Malkovich" #~ msgid "" #~ "Are you sure you want to clear all undo and redo?\n" #~ "This will free up memory, but you will no longer be\n" #~ "able to undo or redo any of the painting you have\n" #~ "done so far." #~ msgstr "Malkovich" #~ msgid "1 round" #~ msgstr "Malkovich" #~ msgid "2 round" #~ msgstr "Malkovich" #~ msgid "3 round" #~ msgstr "Malkovich" #~ msgid "4 round" #~ msgstr "Malkovich" #~ msgid "5 round" #~ msgstr "Malkovich" #~ msgid "6 round" #~ msgstr "Malkovich" #~ msgid "10 round" #~ msgstr "Malkovich" #~ msgid "2 italic" #~ msgstr "Malkovich" #~ msgid "3 italic" #~ msgstr "Malkovich" #~ msgid "4 italic" #~ msgstr "Malkovich" #~ msgid "5 italic" #~ msgstr "Malkovich" #~ msgid "6 italic" #~ msgstr "Malkovich" #~ msgid "10 italic" #~ msgstr "Malkovich" #, fuzzy #~ msgid "Pan window" #~ msgstr "Malkovich" #, fuzzy #~ msgid "Zoom out" #~ msgstr "Malkovich" #~ msgid "Undo last paint action" #~ msgstr "Malkovich" #~ msgid "Redo last paint action" #~ msgstr "Malkovich" #~ msgid "Clear all undo and redo buffers" #~ msgstr "Malkovich" #~ msgid "Nib" #~ msgstr "Malkovich" #~ msgid "Click to select font" #~ msgstr "Malkovich" #~ msgid "Enter text for text tool" #~ msgstr "Malkovich" #~ msgid "Error in %s: %s" #~ msgstr "Malkovich" #~ msgid "definition is too long!" #~ msgstr "Malkovich" #~ msgid "not top level" #~ msgstr "Malkovich" #~ msgid "not strings" #~ msgstr "Malkovich" #~ msgid "Not found." #~ msgstr "Malkovich" #~ msgid "File \"%s\" not found on path" #~ msgstr "Malkovich" #~ msgid "Revert to Defaults" #~ msgstr "Malkovich" #~ msgid "Revert to installation defaults?" #~ msgstr "Malkovich" #~ msgid "" #~ "Would you like to reset all preferences to their factory\n" #~ "settings? This will delete any changes you have ever made\n" #~ "to your preferences and may take a few seconds." #~ msgstr "Malkovich" #~ msgid "Preferences" #~ msgstr "Malkovich" #~ msgid "Unable to display preferences." #~ msgstr "Malkovich" #~ msgid "" #~ "No preferences workspace was found.\n" #~ "Preferences probably failed to load when %s started." #~ msgstr "Malkovich" #~ msgid "Program" #~ msgstr "Malkovich" #~ msgid "Edit window" #~ msgstr "Malkovich" #~ msgid "Menu item text" #~ msgstr "Malkovich" #~ msgid "Load column from this file" #~ msgstr "Malkovich" #~ msgid "Edit column item \"%s\"" #~ msgstr "Malkovich" #~ msgid "Set column item" #~ msgstr "Malkovich" #~ msgid "Unable to save." #~ msgstr "Malkovich" #~ msgid "You can only save toolkits, not tools." #~ msgstr "Malkovich" #~ msgid "You can't save auto-generated toolkits." #~ msgstr "Malkovich" #~ msgid "Toolkit tree menu" #~ msgstr "Malkovich" #~ msgid "Edit ..." #~ msgstr "Malkovich" #~ msgid "Tool changed." #~ msgstr "Malkovich" #~ msgid "" #~ "Tool changed by someone else!\n" #~ "You're going to loose edits unless you're careful." #~ msgstr "Malkovich" #~ msgid "Bad drag." #~ msgstr "Malkovich" #~ msgid "" #~ "Sorry, you can only drag tools between toolkits\n" #~ "You can't reorder toolkits, you can't nest toolkits\n" #~ "and you can't drag tools to the top level." #~ msgstr "Malkovich" #~ msgid "Sorry, you can't drag to or from from pseudo toolkits." #~ msgstr "Malkovich" #~ msgid "Set toolkit name here" #~ msgstr "Malkovich" #~ msgid "Set toolkit caption here" #~ msgstr "Malkovich" #~ msgid "New toolkit" #~ msgstr "Malkovich" #~ msgid "Nothing selected." #~ msgstr "Malkovich" #~ msgid "No toolkit selected." #~ msgstr "Malkovich" #~ msgid "Display this name" #~ msgstr "Malkovich" #~ msgid "Load definition" #~ msgstr "Malkovich" #~ msgid "Reload" #~ msgstr "Malkovich" #~ msgid "Reload startup objects?" #~ msgstr "Malkovich" #~ msgid "" #~ "Would you like to reload all startup menus, workspaces\n" #~ "and plugins now? This may take a few seconds." #~ msgstr "Malkovich" #~ msgid "No tool selected" #~ msgstr "Malkovich" #~ msgid "Bad regular expression." #~ msgstr "Malkovich" #, fuzzy #~ msgid "No match found for \"%s\"." #~ msgstr "Malkovich" #~ msgid "Find in all toolkits" #~ msgstr "Malkovich" #~ msgid "Enter search string here" #~ msgstr "Malkovich" #~ msgid "No match found." #~ msgstr "Malkovich" #~ msgid "No top-level symbol called \"%s\"." #~ msgstr "Malkovich" #~ msgid "Symbol \"%s\" has no tool inforation." #~ msgstr "Malkovich" #~ msgid "Go to definition of this symbol" #~ msgstr "Malkovich" #~ msgid "Go to definition" #~ msgstr "Malkovich" #~ msgid "Object information." #~ msgstr "Malkovich" #~ msgid "No unresolved symbols found." #~ msgstr "Malkovich" #~ msgid "Link report." #~ msgstr "Malkovich" #~ msgid "No documentation available." #~ msgstr "Malkovich" #~ msgid "" #~ "On-line documentation is only currently\n" #~ "available for VIPS functions and nip builtins." #~ msgstr "Malkovich" #~ msgid "/File/New/_Tool" #~ msgstr "Malkovich" #~ msgid "/File/New/Tool_kit ..." #~ msgstr "Malkovich" #~ msgid "/File/New/Separator ..." #~ msgstr "Malkovich" #~ msgid "/File/New/Column Item ..." #~ msgstr "Malkovich" #~ msgid "/File/New/Program Window ..." #~ msgstr "Malkovich" #~ msgid "/File/_Open Toolkit ..." #~ msgstr "Malkovich" #~ msgid "/File/_Save Toolkit" #~ msgstr "Malkovich" #~ msgid "/File/Save Toolkit _As ..." #~ msgstr "Malkovich" #~ msgid "/File/Pr_ocess Text ..." #~ msgstr "Malkovich" #~ msgid "/File/_Reload Start Stuff ..." #~ msgstr "Malkovich" #~ msgid "/Edit/C_ut" #~ msgstr "Malkovich" #~ msgid "/Edit/_Copy" #~ msgstr "Malkovich" #~ msgid "/Edit/_Paste" #~ msgstr "Malkovich" #~ msgid "/Edit/_Select All" #~ msgstr "Malkovich" #~ msgid "/Edit/Delete This _Tool ..." #~ msgstr "Malkovich" #~ msgid "/Edit/Delete This Tool_kit ..." #~ msgstr "Malkovich" #~ msgid "/Edit/_Find ..." #~ msgstr "Malkovich" #~ msgid "/Edit/_Jump to Definition of ..." #~ msgstr "Malkovich" #~ msgid "/Edit/_Info ..." #~ msgstr "Malkovich" #~ msgid "/_Debug" #~ msgstr "Malkovich" #~ msgid "/Debug/_Trace ..." #~ msgstr "Malkovich" #~ msgid "/Debug/_Link ..." #~ msgstr "Malkovich" #~ msgid "/Help/_Program ..." #~ msgstr "Malkovich" #~ msgid "/Help/_Documentation For This Tool ..." #~ msgstr "Malkovich" #~ msgid "Overflow error." #~ msgstr "Malkovich" #~ msgid "%s too long." #~ msgstr "Malkovich" #~ msgid "Not rectangular." #~ msgstr "Malkovich" #~ msgid "" #~ "Matrix of real is not rectangular.\n" #~ "Found row of length %d, should be %d." #~ msgstr "Malkovich" #~ msgid "List only has %d elements, unable to get element %d." #~ msgstr "Malkovich" #~ msgid "No arguments allowed." #~ msgstr "Malkovich" #~ msgid "Object \"%s\" should have no arguments." #~ msgstr "Malkovich" #~ msgid "C stack overflow. Expression too complex." #~ msgstr "Malkovich" #~ msgid "No value." #~ msgstr "Malkovich" #~ msgid "Symbol \"%s\" has no value" #~ msgstr "Malkovich" #~ msgid "Symbol \"%s\" is not defined." #~ msgstr "Malkovich" #~ msgid "Can't duplicate." #~ msgstr "Malkovich" #~ msgid "You can only duplicate top level regions." #~ msgstr "Malkovich" #~ msgid "Can't delete." #~ msgstr "Malkovich" #~ msgid "You can only delete top level regions." #~ msgstr "Malkovich" #~ msgid "Delete Region?" #~ msgstr "Malkovich" #~ msgid "Are you sure you want to delete Region \"%s\"?" #~ msgstr "Malkovich" #~ msgid "Region menu" #~ msgstr "Malkovich" #~ msgid "blocked on" #~ msgstr "Malkovich" #~ msgid "" #~ "Left-click to select, shift-left-click to extend select, double-left-" #~ "click to edit, right-click for menu, left-drag to move" #~ msgstr "Malkovich" #~ msgid "You can only duplicate top level rows." #~ msgstr "Malkovich" #~ msgid "You can only delete top level rows." #~ msgstr "Malkovich" #~ msgid "Drag between columns not yet implemented." #~ msgstr "Malkovich" #~ msgid "Row menu" #~ msgstr "Malkovich" #~ msgid "Ungroup" #~ msgstr "Malkovich" #~ msgid "Replace from file ..." #~ msgstr "Malkovich" #~ msgid "Click to open or close class" #~ msgstr "Malkovich" #~ msgid "Minimum" #~ msgstr "Malkovich" #~ msgid "Maximum" #~ msgstr "Malkovich" #~ msgid "Lower slider value" #~ msgstr "Malkovich" #~ msgid "Upper slider value" #~ msgstr "Malkovich" #~ msgid "Set slider value here" #~ msgstr "Malkovich" #, fuzzy #~ msgid "Edit slider \"%s\"" #~ msgstr "Malkovich" #, fuzzy #~ msgid "Set Slider" #~ msgstr "Malkovich" #~ msgid "Status bar menu" #~ msgstr "Malkovich" #~ msgid "Magnification" #~ msgstr "Malkovich" #~ msgid "Attempt to redefine root symbol \"%s\"." #~ msgstr "Malkovich" #~ msgid "Name \"%s\" repeated in scope." #~ msgstr "Malkovich" #~ msgid "Can't redefine %s \"%s\"." #~ msgstr "Malkovich" #~ msgid "Set toggle caption here" #~ msgstr "Malkovich" #~ msgid "State" #~ msgstr "Malkovich" #~ msgid "Set toggle state here" #~ msgstr "Malkovich" #~ msgid "Edit toggle" #~ msgstr "Malkovich" #~ msgid "Set toggle" #~ msgstr "Malkovich" #~ msgid "" #~ "Can't create dialog with name \"%s\"\n" #~ "an object with that name already exists in kit \"%s\"" #~ msgstr "Malkovich" #~ msgid "tool \"%s\", toolkit \"%s\", refers to undefined symbol" #~ msgstr "Malkovich" #~ msgid "Trace buffer stack overflow." #~ msgstr "Malkovich" #~ msgid "/File/_Clear" #~ msgstr "Malkovich" #~ msgid "/View/Operators" #~ msgstr "Malkovich" #~ msgid "/View/Builtin Functions" #~ msgstr "Malkovich" #~ msgid "/View/Class Construction" #~ msgstr "Malkovich" #~ msgid "/Help/_Trace ..." #~ msgstr "Malkovich" #~ msgid "Trace" #~ msgstr "Malkovich" #~ msgid "Slider value ... edit!" #~ msgstr "Malkovich" #~ msgid "Left-drag to set number" #~ msgstr "Malkovich" #~ msgid "VIPS library error." #~ msgstr "Malkovich" #~ msgid "Unable to set XML property." #~ msgstr "Malkovich" #~ msgid "Unable to set property \"%s\" to value \"%s\"." #~ msgstr "Malkovich" #~ msgid "8-bit signed integer" #~ msgstr "Malkovich" #~ msgid "16-bit unsigned integer" #~ msgstr "Malkovich" #~ msgid "16-bit signed integer" #~ msgstr "Malkovich" #~ msgid "32-bit unsigned integer" #~ msgstr "Malkovich" #~ msgid "32-bit signed integer" #~ msgstr "Malkovich" #~ msgid "32-bit float" #~ msgstr "Malkovich" #~ msgid "64-bit float" #~ msgstr "Malkovich" #~ msgid "128-bit complex" #~ msgstr "Malkovich" #~ msgid "" #~ msgstr "Malkovich" #~ msgid "TIFF image" #~ msgstr "Malkovich" #~ msgid "JPEG image" #~ msgstr "Malkovich" #~ msgid "PNG image" #~ msgstr "Malkovich" #~ msgid "PPM/PGM/PBM image" #~ msgstr "Malkovich" #~ msgid "VIPS image" #~ msgstr "Malkovich" #~ msgid "%s, %s, %s, %dx%d, %d band" #~ msgid_plural "%s, %s, %s, %dx%d, %d bands" #~ msgstr[0] "Malkovich" #~ msgstr[1] "Malkovich" #~ msgid "Bad filename." #~ msgstr "Malkovich" #~ msgid "Filenames may not contain ':' characters." #~ msgstr "Malkovich" #~ msgid "Filename is too long." #~ msgstr "Malkovich" #~ msgid "Filename contains only blank characters." #~ msgstr "Malkovich" #~ msgid "Unable to open." #~ msgstr "Malkovich" #~ msgid "" #~ "Unable to open file \"%s\" for writing.\n" #~ "%s." #~ msgstr "Malkovich" #~ msgid "Unable to write." #~ msgstr "Malkovich" #~ msgid "" #~ "Unable to write to file \"%s\".\n" #~ "%s." #~ msgstr "Malkovich" #~ msgid "bytes" #~ msgstr "Malkovich" #~ msgid "KB" #~ msgstr "Malkovich" #~ msgid "MB" #~ msgstr "Malkovich" #~ msgid "GB" #~ msgstr "Malkovich" #~ msgid "TB" #~ msgstr "Malkovich" #~ msgid "" #~ "unable to make temporary file \"%s\"\n" #~ "%s" #~ msgstr "Malkovich" #~ msgid "Out of memory." #~ msgstr "Malkovich" #~ msgid "" #~ "Request for %s of RAM triggered memory allocation\n" #~ "failure." #~ msgstr "Malkovich" #~ msgid "Unknown type." #~ msgstr "Malkovich" #~ msgid "VIPS type \"%s\" not supported" #~ msgstr "Malkovich" #~ msgid "Error calling library function \"%s\" (%s)." #~ msgstr "Malkovich" #~ msgid "VIPS operator \"%s\"" #~ msgstr "Malkovich" #~ msgid "%s, from package \"%s\"" #~ msgstr "Malkovich" #~ msgid "\"%s\" takes %d argument:" #~ msgid_plural "\"%s\" takes %d arguments:" #~ msgstr[0] "Malkovich" #~ msgstr[1] "Malkovich" #~ msgid "And produces %d result:" #~ msgid_plural "And produces %d results" #~ msgstr[0] "Malkovich" #~ msgstr[1] "Malkovich" #~ msgid "flags:" #~ msgstr "Malkovich" #~ msgid "PIO function" #~ msgstr "Malkovich" #~ msgid "WIO function" #~ msgstr "Malkovich" #~ msgid "coordinate transformer" #~ msgstr "Malkovich" #~ msgid "no coordinate transformation" #~ msgstr "Malkovich" #~ msgid "point-to-point operation" #~ msgstr "Malkovich" #~ msgid "area operation" #~ msgstr "Malkovich" #~ msgid "" #~ "Argument %d to \"%s\" is the wrong type.\n" #~ "You passed:\n" #~ " %s\n" #~ "Usage:\n" #~ " %s" #~ msgstr "Malkovich" #~ msgid "doublevec" #~ msgstr "Malkovich" #~ msgid "imagevec" #~ msgstr "Malkovich" #~ msgid "Bad regular expression \"%s\"." #~ msgstr "Malkovich" #~ msgid "Select exactly one object and try again." #~ msgstr "Malkovich" #~ msgid "More than one object selected." #~ msgstr "Malkovich" #~ msgid "No backup workspaces found." #~ msgstr "Malkovich" #~ msgid "" #~ "You need to enable \"Auto workspace save\" in Preferences\n" #~ "Before automatic recovery works" #~ msgstr "Malkovich" #~ msgid "No suitable workspace save files found in \"%s\"" #~ msgstr "Malkovich" #~ msgid "Open workspace backup?" #~ msgstr "Malkovich" #~ msgid "" #~ "Found workspace \"%s\",\n" #~ "dated %sDo you want to recover this workspace?" #~ msgstr "Malkovich" #~ msgid "" #~ "Can't create workspace \"%s\".\n" #~ "A symbol with that name already exists." #~ msgstr "Malkovich" #~ msgid "Default empty workspace" #~ msgstr "Malkovich" #~ msgid "\"%s\" needs %d arguments, there are %d selected." #~ msgstr "Malkovich" #~ msgid "Too many names selected." #~ msgstr "Malkovich" #~ msgid "You can only remove top level rows." #~ msgstr "Malkovich" #~ msgid "Not all selected objects are top level rows." #~ msgstr "Malkovich" #~ msgid "Unable to ungroup." #~ msgstr "Malkovich" #~ msgid "" #~ "You can only ungroup lists (comma-separated lists of things enclosed in " #~ "square brackets).\n" #~ "Use Format=>Decompose to break compound objects into lists." #~ msgstr "Malkovich" #~ msgid "" #~ "Can't create workspacegroup \"%s\".\n" #~ "A symbol with that name already exists." #~ msgstr "Malkovich" #~ msgid "No text specified." #~ msgstr "Malkovich" #~ msgid "" #~ "Enter some text to paint in the entry widget at the top of the window." #~ msgstr "Malkovich" #~ msgid "Edit regions (+CTRL to create)" #~ msgstr "Malkovich" #~ msgid "Pan image (also use middle mouse button)" #~ msgstr "Malkovich" #~ msgid "Zoom in (also 'i' key)" #~ msgstr "Malkovich" #~ msgid "Zoom out (also 'o' key)" #~ msgstr "Malkovich" #~ msgid "Ink:" #~ msgstr "Malkovich" #~ msgid "Find" #~ msgstr "Malkovich" #~ msgid "at %1$d" #~ msgstr "Malkovich" #~ msgid "Tool" #~ msgstr "Malkovich" #~ msgid "Range" #~ msgstr "Malkovich" libvips-8.15.1/po/meson.build000066400000000000000000000000431454007373500160430ustar00rootroot00000000000000i18n.gettext( gettext_domain ) libvips-8.15.1/suppressions/000077500000000000000000000000001454007373500160435ustar00rootroot00000000000000libvips-8.15.1/suppressions/asan.supp000066400000000000000000000000531454007373500176740ustar00rootroot00000000000000interceptor_via_lib:libMagickCore-6.Q16.so libvips-8.15.1/suppressions/lsan.supp000066400000000000000000000002301454007373500177040ustar00rootroot00000000000000leak:python3 leak:bash leak:libfontconfig.so leak:libIlmImf-2_5.so leak:libIlmThread-2_5.so leak:libMagickCore-6.Q16.so leak:libx265.so leak:libheif.so libvips-8.15.1/suppressions/tsan.supp000066400000000000000000000061331454007373500177240ustar00rootroot00000000000000# an unlocked FALSE/TRUE assignment, which is fine race:vips_region_prepare_to race:render_kill race:render_reschedule # an unlocked NULL assignment, which is fine race:render_thread # unlocked read of pixels-processed-so-far, which is fine race:vips_sink_base_progress race:wbuffer_allocate_fn race:sink_memory_area_allocate_fn # use of *stop from generate funcs is unlocked, but fine race:vips_threadpool_run # guarded with vips_tracked_mutex, so it should be fine race:vips_tracked_mem race:vips_tracked_allocs race:vips_tracked_files # guarded with set->lock, so it should be fine race:vips_threadset_work race:vips_threadset_add # guarded with vips_cache_lock, so it should be fine race:vips_cache_table race:vips_cache_drop_all race:vips_cache_get_first race:vips_cache_get_lru_cb race:vips_cache_remove race:vips_cache_trim # guarded with vips__global_lock, so it should be fine race:vips_error_freeze_count race:vips__link_make race:vips__link_map race:vips__link_break_all race:tile_name race:vips_image_sanity # guarded with vips_text_lock, so it should be fine race:vips_text_build # the double-buffered output and write-behind thread are non-racy race:wbuffer_new race:wbuffer_write race:wbuffer_work_fn race:wbuffer_free race:write_thread_state_new # thread-local variables (i.e. GPrivate) are harmless race:vips_thread_profile_key race:buffer_thread_key # glib signals are probably non-racy race:vips_image_preeval race:vips_image_eval race:vips_image_posteval race:vips_image_written race:vips_image_real_written race:vips_image_save_cb race:render_close_cb race:readjpeg_close_cb # semaphores are probably non-racy race:vips_semaphore_* # guarded with pool->allocate_lock, so it should be fine race:vips_worker_work_unit race:sink_call_start race:sink_call_stop race:vips_hist_find_start race:vips_hist_find_indexed_start race:vips_hist_find_stop race:vips_hough_new_accumulator race:vips_statistic_scan_start race:vips_statistic_scan_stop race:vips_max_stop race:vips_values_add race:vips_deviate_stop race:vips_arithmetic_start race:histogram_new # per-thread state allocate/dispose functions are non-racy race:sink_thread_state_class_init race:vips_thread_state_init race:vips_thread_state_build race:vips_thread_state_set race:vips_thread_state_dispose race:write_thread_state_new race:vips_sink_base_init race:vips_sink_thread_state_new race:sink_memory_init race:sink_memory_thread_state_new race:sink_memory_free race:sink_thread_state_build race:sink_thread_state_dispose race:buffer_cache_free race:sink_init race:sink_free race:vips_sequential_dispose race:vips_block_cache_dispose race:vips_image_init race:vips_image_build race:vips_image_finalize race:vips_image_dispose race:vips_threadset_free # guarded with image->sslock, so it should be fine race:vips__region_start race:vips__region_stop race:vips_region_dispose race:vips__region_take_ownership # is fine now, see: https://github.com/libvips/libvips/pull/1211 race:vips_image_temp_name # is fine now, see: https://github.com/libvips/libvips/pull/1483 race:meta_new race:meta_cp race:vips_image_set race:vips__image_copy_fields_array race:vips__image_meta_copy libvips-8.15.1/suppressions/ubsan.supp000066400000000000000000000000251454007373500200610ustar00rootroot00000000000000undefined:libexif.so libvips-8.15.1/suppressions/valgrind.supp000066400000000000000000000135111454007373500205630ustar00rootroot00000000000000# hide GObject type init allocs, they can only happen once and are not really # leaks { type_init Memcheck:Leak fun:*alloc ... fun:g_type_register_* } { type_init2 Memcheck:Leak fun:*alloc ... fun:g_type_init_* } { type_init3 Memcheck:Leak fun:*alloc ... fun:g_type_create_* } { type_init4 Memcheck:Leak fun:*alloc ... fun:g_type_class_ref } { type_init5 Memcheck:Leak fun:*alloc ... fun:g_type_add_interface_static } # module init does this { init7 Memcheck:Leak ... fun:*alloc* ... fun:_dl_init } # g_get_home_dir has a private buffer { gwd Memcheck:Leak fun:*alloc ... fun:g_get_home_dir } # selinux on ubuntu generates a leak report we ignore { selinux Memcheck:Leak fun:*alloc ... obj:/lib/libselinux.so.1 } # gdk and x init { gdk_init Memcheck:Leak fun:*alloc ... fun:gdk_display_open } { x_init_ext Memcheck:Leak fun:*alloc ... fun:XInitExtension } { gio Memcheck:Leak fun:malloc ... fun:g_simple_async_result_complete } { pthread Memcheck:Leak fun:calloc ... fun:_dl_allocate_tls ... fun:pthread_create@@GLIBC_* } # hide all dbus reports, not the app's problem { dbus Memcheck:Leak fun:*alloc ... obj:*/libdbus-1.so.* } # hide all orbit leaks, not our problem { orbit Memcheck:Leak fun:*alloc ... fun:ORBit_* } # other lib init { fontconfig_init Memcheck:Leak fun:*alloc ... fun:FcConfigParseAndLoad } { fontconfig2 Memcheck:Leak fun:malloc fun:strdup fun:FcValueSave obj:*/libfontconfig.so.* } { fontconfig3 Memcheck:Leak fun:realloc ... fun:FcFontMatch } { fontconfig4 Memcheck:Leak fun:realloc ... fun:FcPatternAddInteger } { fontconfig5 Memcheck:Leak fun:realloc ... fun:FcPatternDuplicate } { fontconfig6 Memcheck:Leak fun:realloc ... fun:FcDefaultSubstitute } { freetype_init Memcheck:Leak fun:*alloc ... fun:FT_Open_Face } { harfbuzz Memcheck:Leak fun:calloc ... fun:hb_shape_plan_execute } { goffice_init Memcheck:Leak fun:*alloc ... fun:libgoffice_init } { g_module_init Memcheck:Leak fun:*alloc ... fun:g_module_open } { gtk_module_init Memcheck:Leak fun:*alloc ... fun:gtk_module_init } # gdk-x11 makes a toplevel object { gdk_x11_init Memcheck:Leak fun:*alloc ... fun:_gdk_x11_window_get_toplevel } # the icon theme allocates stuff on lazy load { gtk_icon_theme_has_icon Memcheck:Leak fun:*alloc ... fun:gtk_icon_theme_has_icon } # tooltip labels are not really owned by anyone and will not be freed on exit { gtk_tooltip_set_markup Memcheck:Leak fun:*alloc ... fun:gtk_tooltip_set_markup } # pango makes a PangoLanguage for every script you use { pango_language Memcheck:Leak fun:*alloc ... fun:pango_language_from_string } # pango makes a PangoOTRuleset for every font you use { pango_ot_ruleset_get_for_description Memcheck:Leak fun:*alloc ... fun:pango_ot_ruleset_get_for_description } # pango makes a PangoOTInfo for every font you use { pango_ot_info_get Memcheck:Leak fun:*alloc ... fun:pango_ot_info_get } # fonts pango has loaded { pango_fc_fontset_get_font_at Memcheck:Leak fun:*alloc ... fun:pango_fc_fontset_get_font_at } # font maps pango has loaded { pango_fc_font_map_load_fontset Memcheck:Leak fun:*alloc ... fun:pango_fc_font_map_load_fontset } # ... and font descriptions from every "sans 12" type string { pango_font_description_from_string Memcheck:Leak fun:*alloc ... fun:pango_font_description_from_string } # gettext has annoying uninit warnings { gettext Memcheck:Cond fun:__GI___strcasecmp_l ... fun:__dcigettext } { gettext Memcheck:Value8 fun:__GI___strcasecmp_l ... fun:__dcigettext } # libz has a warning too ... see this from libpng / libxml2 etc. { libz Memcheck:Cond fun:inflateReset2 } # libvips can generate this one spuriously { libvipswrite Memcheck:Param write(buf) ... fun:write_vips } { pixman1 Memcheck:Cond ... fun:pixman_image_composite32 } { cairo1 Memcheck:Cond fun:rsvg_cairo_surface_to_pixbuf } { rsvg Memcheck:Cond obj:*/librsvg-2.so.* } { murrine Memcheck:Leak fun:calloc fun:g_malloc0 fun:raico_blur_create } { signal_connect Memcheck:Leak fun:calloc fun:g_malloc0 fun:g_closure_new_simple fun:g_cclosure_new fun:g_signal_connect_data } # ruby has some annoying ones too { ruby1 Memcheck:Cond ... fun:rb_parser_compile_file } { ruby2 Memcheck:Value8 ... fun:rb_parser_compile_file } { ruby3 Memcheck:Cond ... fun:rb_file_expand_path } { ruby4 Memcheck:Value8 ... fun:rb_file_expand_path } { ruby5 Memcheck:Value8 ... fun:rb_enc_str_new } # helgrind stuff ... run against glib-2.40.x or earlier, later glibs have # their own mutex primitive which helgrind can't see { helgrind1 Helgrind:Race fun:g_thread_proxy ... fun:start_thread fun:clone } { helgrind2 Helgrind:Race fun:strlen fun:pthread_setname_np fun:g_system_thread_set_name fun:g_thread_proxy ... fun:start_thread fun:clone } # there's an unlocked assign FALSE which is fine { helgrind3 Helgrind:Race fun:vips_region_prepare_to } # unlocked read of pixels-processed-so-far, which is fine { helgrind4 Helgrind:Race fun:vips_sink_base_progress } { helgrind4a Helgrind:Race fun:wbuffer_allocate_fn } # helgrind can't see g_private { helgrind5 Helgrind:Race fun:g_private_set } # use of *stop from generate funcs is unlocked, but fine { helgrind6 Helgrind:Race fun:vips_threadpool_run } libvips-8.15.1/test/000077500000000000000000000000001454007373500142455ustar00rootroot00000000000000libvips-8.15.1/test/.gitignore000066400000000000000000000000421454007373500162310ustar00rootroot00000000000000test_descriptors test_connections libvips-8.15.1/test/README.md000066400000000000000000000002761454007373500155310ustar00rootroot00000000000000# libvips test suite This is in two parts: a few simple bash scripts in this directory are run on "meson test", and a fancier Python test suite that's run by GitHub actions on each commit. libvips-8.15.1/test/meson.build000066400000000000000000000033011454007373500164040ustar00rootroot00000000000000variables_data = configuration_data() variables_data.set('abs_top_srcdir', project_source_root) variables_data.set('abs_top_builddir', project_build_root) variables_data.set('PYTHON', pymod.find_installation().full_path()) variables_sh = configure_file( input: 'variables.sh.in', output: '@BASENAME@', configuration: variables_data ) script_tests = [ 'cli', 'formats', 'seq', 'stall', 'threading', 'keep' ] foreach script_test : script_tests test(script_test, files('test_' + script_test + '.sh'), workdir: meson.current_build_dir(), # Increase the timeout as running the tests with sanitizers # enabled could be slower than the default 30 seconds. timeout: 120, ) endforeach test_connections = executable('test_connections', 'test_connections.c', dependencies: libvips_dep, ) test_connections_sh = configure_file( input: 'test_connections.sh', output: 'test_connections.sh', copy: true, ) test('connections', test_connections_sh, depends: test_connections, workdir: meson.current_build_dir(), ) test_descriptors = executable('test_descriptors', 'test_descriptors.c', dependencies: libvips_dep, ) test_descriptors_sh = configure_file( input: 'test_descriptors.sh', output: 'test_descriptors.sh', copy: true, ) test('descriptors', test_descriptors_sh, depends: test_descriptors, workdir: meson.current_build_dir(), ) test_timeout_webpsave = executable('test_timeout_webpsave', 'test_timeout_webpsave.c', dependencies: libvips_dep, ) test('webpsave_timeout', test_timeout_webpsave, depends: test_timeout_webpsave, workdir: meson.current_build_dir(), ) libvips-8.15.1/test/test-suite/000077500000000000000000000000001454007373500163535ustar00rootroot00000000000000libvips-8.15.1/test/test-suite/__init__.py000066400000000000000000000000001454007373500204520ustar00rootroot00000000000000libvips-8.15.1/test/test-suite/conftest.py000066400000000000000000000001321454007373500205460ustar00rootroot00000000000000import sys import os sys.path.append(os.path.join(os.path.dirname(__file__), 'helpers')) libvips-8.15.1/test/test-suite/helpers/000077500000000000000000000000001454007373500200155ustar00rootroot00000000000000libvips-8.15.1/test/test-suite/helpers/helpers.py000066400000000000000000000240531454007373500220350ustar00rootroot00000000000000# vim: set fileencoding=utf-8 : # test helpers import os import tempfile import pytest import pyvips IMAGES = os.path.join(os.path.dirname(__file__), os.pardir, 'images') JPEG_FILE = os.path.join(IMAGES, "sample.jpg") JPEG_FILE_XYB = os.path.join(IMAGES, "sample-xyb.jpg") TRUNCATED_FILE = os.path.join(IMAGES, "truncated.jpg") SRGB_FILE = os.path.join(IMAGES, "sRGB.icm") MATLAB_FILE = os.path.join(IMAGES, "sample.mat") PNG_FILE = os.path.join(IMAGES, "sample.png") TIF_FILE = os.path.join(IMAGES, "sample.tif") TIF1_FILE = os.path.join(IMAGES, "1bit.tif") TIF2_FILE = os.path.join(IMAGES, "2bit.tif") TIF4_FILE = os.path.join(IMAGES, "4bit.tif") OME_FILE = os.path.join(IMAGES, "multi-channel-z-series.ome.tif") ANALYZE_FILE = os.path.join(IMAGES, "t00740_tr1_segm.hdr") GIF_FILE = os.path.join(IMAGES, "cramps.gif") WEBP_FILE = os.path.join(IMAGES, "1.webp") WEBP_LOOKS_LIKE_SVG_FILE = os.path.join(IMAGES, "looks-like-svg.webp") WEBP_ANIMATED_FILE = os.path.join(IMAGES, "big-height.webp") EXR_FILE = os.path.join(IMAGES, "sample.exr") FITS_FILE = os.path.join(IMAGES, "WFPC2u5780205r_c0fx.fits") OPENSLIDE_FILE = os.path.join(IMAGES, "CMU-1-Small-Region.svs") PDF_FILE = os.path.join(IMAGES, "ISO_12233-reschart.pdf") CMYK_PDF_FILE = os.path.join(IMAGES, "cmyktest.pdf") SVG_FILE = os.path.join(IMAGES, "logo.svg") SVGZ_FILE = os.path.join(IMAGES, "logo.svgz") SVG_GZ_FILE = os.path.join(IMAGES, "logo.svg.gz") GIF_ANIM_FILE = os.path.join(IMAGES, "cogs.gif") GIF_ANIM_EXPECTED_PNG_FILE = os.path.join(IMAGES, "cogs.png") GIF_ANIM_DISPOSE_BACKGROUND_FILE = os.path.join(IMAGES, "dispose-background.gif") GIF_ANIM_DISPOSE_BACKGROUND_EXPECTED_PNG_FILE = os.path.join(IMAGES, "dispose-background.png") GIF_ANIM_DISPOSE_PREVIOUS_FILE = os.path.join(IMAGES, "dispose-previous.gif") GIF_ANIM_DISPOSE_PREVIOUS_EXPECTED_PNG_FILE = os.path.join(IMAGES, "dispose-previous.png") DICOM_FILE = os.path.join(IMAGES, "dicom_test_image.dcm") BMP_FILE = os.path.join(IMAGES, "MARBLES.BMP") NIFTI_FILE = os.path.join(IMAGES, "avg152T1_LR_nifti.nii.gz") ICO_FILE = os.path.join(IMAGES, "favicon.ico") CUR_FILE = os.path.join(IMAGES, "sample.cur") TGA_FILE = os.path.join(IMAGES, "targa.tga") SGI_FILE = os.path.join(IMAGES, "silicongraphics.sgi") AVIF_FILE = os.path.join(IMAGES, "avif-orientation-6.avif") AVIF_FILE_HUGE = os.path.join(IMAGES, "16x17000.avif") HEIC_FILE = os.path.join(IMAGES, "heic-orientation-6.heic") RGBA_FILE = os.path.join(IMAGES, "rgba.png") RGBA_CORRECT_FILE = os.path.join(IMAGES, "rgba-correct.ppm") MOSAIC_FILES = [os.path.join(IMAGES, "cd1.1.jpg"), os.path.join(IMAGES, "cd1.2.jpg"), os.path.join(IMAGES, "cd2.1.jpg"), os.path.join(IMAGES, "cd2.2.jpg"), os.path.join(IMAGES, "cd3.1.jpg"), os.path.join(IMAGES, "cd3.2.jpg"), os.path.join(IMAGES, "cd4.1.jpg"), os.path.join(IMAGES, "cd4.2.jpg")] MOSAIC_MARKS = [[489, 140], [66, 141], [453, 40], [15, 43], [500, 122], [65, 121], [495, 58], [40, 57]] MOSAIC_VERTICAL_MARKS = [[388, 44], [364, 346], [384, 17], [385, 629], [527, 42], [503, 959]] JP2K_FILE = os.path.join(IMAGES, "world.jp2") unsigned_formats = [pyvips.BandFormat.UCHAR, pyvips.BandFormat.USHORT, pyvips.BandFormat.UINT] signed_formats = [pyvips.BandFormat.CHAR, pyvips.BandFormat.SHORT, pyvips.BandFormat.INT] float_formats = [pyvips.BandFormat.FLOAT, pyvips.BandFormat.DOUBLE] complex_formats = [pyvips.BandFormat.COMPLEX, pyvips.BandFormat.DPCOMPLEX] int_formats = unsigned_formats + signed_formats noncomplex_formats = int_formats + float_formats all_formats = int_formats + float_formats + complex_formats colour_colourspaces = [pyvips.Interpretation.XYZ, pyvips.Interpretation.LAB, pyvips.Interpretation.LCH, pyvips.Interpretation.CMC, pyvips.Interpretation.LABS, pyvips.Interpretation.SCRGB, pyvips.Interpretation.HSV, pyvips.Interpretation.SRGB, pyvips.Interpretation.YXY] cmyk_colourspaces = [pyvips.Interpretation.CMYK] coded_colourspaces = [pyvips.Interpretation.LABQ] mono_colourspaces = [pyvips.Interpretation.B_W] sixteenbit_colourspaces = [pyvips.Interpretation.GREY16, pyvips.Interpretation.RGB16] all_colourspaces = colour_colourspaces + mono_colourspaces + \ coded_colourspaces + sixteenbit_colourspaces + \ cmyk_colourspaces max_value = {pyvips.BandFormat.UCHAR: 0xff, pyvips.BandFormat.USHORT: 0xffff, pyvips.BandFormat.UINT: 0xffffffff, pyvips.BandFormat.CHAR: 0x7f, pyvips.BandFormat.SHORT: 0x7fff, pyvips.BandFormat.INT: 0x7fffffff, pyvips.BandFormat.FLOAT: 1.0, pyvips.BandFormat.DOUBLE: 1.0, pyvips.BandFormat.COMPLEX: 1.0, pyvips.BandFormat.DPCOMPLEX: 1.0} sizeof_format = {pyvips.BandFormat.UCHAR: 1, pyvips.BandFormat.USHORT: 2, pyvips.BandFormat.UINT: 4, pyvips.BandFormat.CHAR: 1, pyvips.BandFormat.SHORT: 2, pyvips.BandFormat.INT: 4, pyvips.BandFormat.FLOAT: 4, pyvips.BandFormat.DOUBLE: 8, pyvips.BandFormat.COMPLEX: 8, pyvips.BandFormat.DPCOMPLEX: 16} rot45_angles = [pyvips.Angle45.D0, pyvips.Angle45.D45, pyvips.Angle45.D90, pyvips.Angle45.D135, pyvips.Angle45.D180, pyvips.Angle45.D225, pyvips.Angle45.D270, pyvips.Angle45.D315] rot45_angle_bonds = [pyvips.Angle45.D0, pyvips.Angle45.D315, pyvips.Angle45.D270, pyvips.Angle45.D225, pyvips.Angle45.D180, pyvips.Angle45.D135, pyvips.Angle45.D90, pyvips.Angle45.D45] rot_angles = [pyvips.Angle.D0, pyvips.Angle.D90, pyvips.Angle.D180, pyvips.Angle.D270] rot_angle_bonds = [pyvips.Angle.D0, pyvips.Angle.D270, pyvips.Angle.D180, pyvips.Angle.D90] # an expanding zip ... if either of the args is a scalar or a one-element list, # duplicate it down the other side def zip_expand(x, y): # handle singleton list case if isinstance(x, list) and len(x) == 1: x = x[0] if isinstance(y, list) and len(y) == 1: y = y[0] if isinstance(x, list) and isinstance(y, list): return list(zip(x, y)) elif isinstance(x, list): return [[i, y] for i in x] elif isinstance(y, list): return [[x, j] for j in y] else: return [[x, y]] # run a 1-ary function on a thing -- loop over elements if the # thing is a list def run_fn(fn, x): if isinstance(x, list): return [fn(i) for i in x] else: return fn(x) # make a temp filename with the specified suffix and in the # specified directory def temp_filename(directory, suffix): temp_name = next(tempfile._get_candidate_names()) filename = os.path.join(directory, temp_name + suffix) return filename # test for an operator exists def have(name): return pyvips.type_find("VipsOperation", name) != 0 def skip_if_no(operation_name): return pytest.mark.skipif(not have(operation_name), reason='no {}, skipping test'.format(operation_name)) # run a 2-ary function on two things -- loop over elements pairwise if the # things are lists def run_fn2(fn, x, y): if isinstance(x, pyvips.Image) or isinstance(y, pyvips.Image): return fn(x, y) elif isinstance(x, list) or isinstance(y, list): return [fn(i, j) for i, j in zip_expand(x, y)] else: return fn(x, y) # test a pair of things which can be lists for approx. equality def assert_almost_equal_objects(a, b, threshold=0.0001, msg=''): # print('assertAlmostEqualObjects %s = %s' % (a, b)) assert all([pytest.approx(x, abs=threshold) == y for x, y in zip_expand(a, b)]), msg # test a pair of things which can be lists for equality def assert_equal_objects(a, b, msg=''): # print 'assertEqualObjects %s = %s' % (a, b) assert all([x == y for x, y in zip_expand(a, b)]), msg # test a pair of things which can be lists for difference less than a # threshold def assert_less_threshold(a, b, diff): assert all([abs(x - y) < diff for x, y in zip_expand(a, b)]) # run a function on an image and on a single pixel, the results # should match def run_cmp(message, im, x, y, fn): a = im(x, y) v1 = fn(a) im2 = fn(im) v2 = im2(x, y) assert_almost_equal_objects(v1, v2, msg=message) # run a function on an image, # 50,50 and 10,10 should have different values on the test image def run_image(message, im, fn): run_cmp(message, im, 50, 50, fn) run_cmp(message, im, 10, 10, fn) # run a function on (image, constant), and on (constant, image). # 50,50 and 10,10 should have different values on the test image def run_const(message, fn, im, c): run_cmp(message, im, 50, 50, lambda x: run_fn2(fn, x, c)) run_cmp(message, im, 50, 50, lambda x: run_fn2(fn, c, x)) run_cmp(message, im, 10, 10, lambda x: run_fn2(fn, x, c)) run_cmp(message, im, 10, 10, lambda x: run_fn2(fn, c, x)) # run a function on a pair of images and on a pair of pixels, the results # should match def run_cmp2(message, left, right, x, y, fn): a = left(x, y) b = right(x, y) v1 = fn(a, b) after = fn(left, right) v2 = after(x, y) assert_almost_equal_objects(v1, v2, msg=message) # run a function on a pair of images # 50,50 and 10,10 should have different values on the test image def run_image2(message, left, right, fn): run_cmp2(message, left, right, 50, 50, lambda x, y: run_fn2(fn, x, y)) run_cmp2(message, left, right, 10, 10, lambda x, y: run_fn2(fn, x, y)) libvips-8.15.1/test/test-suite/images/000077500000000000000000000000001454007373500176205ustar00rootroot00000000000000libvips-8.15.1/test/test-suite/images/1.webp000066400000000000000000000731601454007373500206460ustar00rootroot00000000000000RIFFhvWEBPVP8 \vҾ*&p>NCѴQ93u>ʧ-:c *d/ Uœo经OnzO3wK[;>x?{ /@s=@?`/~y-WG_ u?eQlŠs78е[Ks7R!iʧV^4K*:'ѩOw*w >kMmGF W\_|=|= ʟ04OPg~ݢs(+0\ߎ,lnl2S֐ 3qw%^Yw$UiJ N p 5GܽGYh#[{`nbGEpN$,8#x`e0Nx.Ɗ?>}LN;;"QƜ;$M~z\2elJ~+w}ݸ 5]ISV&[F ۢxfd142fج+.SB aTL "׏% J3ÍiVfk 6qHI,'x5=/ws Ʃxm(oUKe"GqDžVQ"k-y%1w -;T .fWk΁ߟ` bu,ǹ[jqۤ_6~cH6? h9Rf<^VSg,s)lUd<f+U._K*J24fa\ 3ޯ]e/Lv7ю@`FVÒM%W;OTVz'b 7.Gw6%8~Tݧ!*Tˤ [Yb/6>ܦUU S˕:9 6D:k۶1 > zZr4PnhCn͡+9lC|!>2;cJzrF=n$<2@uc8Z5Ael|.9n& 꾲L*<6_{ 1YW#pUN2c82 #Z&;Nnz&e:V9:Zup:7<fTʏU" @{Q__֦ * 9A75֧y-_?~g/h޸:?NAXM8b)B^uw#gr_u1q8[]","髺>18ؿxQT`P1%d{w2"5APV}X6t;؀> {;~Q@نYh̟>,Gm2z#%ϊvVIO՟lZI#, e=jE/־oZ)7<ڢV)B]{dBK;SBr`Y+̡=>[aq =-n}-RStBG ߶֛S#h7x|Y{}-N |61NQId{Σ}4bPMgt6#˥L:v|"&8뉉sm{΅: !-NJNV,9o-/>mVc17s?gpsj"0ROC7脃\YL{Zl8y[SM},*C84߽Œ6!kZk,W|/'"vyHg#m^+>C1Y xw:O~LDvcT3aZz6RW_K9!AuR8iî&q~f#1`VM*|jCɫ\Q@bQi(q xÉ<'D&gC_\2԰ˬZ񪙯h[a-(1~#uE{q8(ҭXh܍w+Pb̿V L,e,[^6Mx-4W<1,h2fj=^;p=Iرj*1wL:hC̕=r#-qQ#\`)?$EdϹ3*VS?-&$_◭_C]I(^ w Sb-נgZw# S78iD`i,%X6^\3豋J2G>V(\HDkF7f<+}QA0VzpgdfOk1cDE*c06Cfq wM"ُU35%Nwj+R y,}|XdD&6"$6-*k@1 SFV^r@G@" _'ʻ 0 !뿇Jp#*w cBm3ד\ɍmjo?mtNrYcN2k#,EO`w"cZJH%/$>6n7> gh ?N 2 )gC2pǯ Y]E"'HF*e cgQ䒂pi=5+c*_a~OU"$f|Kdqy-Kp*!wH8'C_X:T Ji_7%id-]?iƣq;F֯K|`K[Eɒ0e?T֧(iL}bzFOf__ϹNnzzQa|V9(x_œM%{bi7{l*MEMaEW?؊{1 ZM[=~0ͬ,"2G~ljp@|eK ~=cݛh|Ï^,ukq 4Xϵ/yJ=ddԣhQ D,1xuQ""#ciye#炪|*ð1ZDԫF>KǞ~яwoq̂ue؎=)4*mͶ  ނڕz9A -s=%A (lVB;5Qϛd0 Z3F73|Щ${ˣlvfC0FjT@7J 7e.f4zemp@1zưP7pV*Ҧ&i+5 cǝp[`}i (Ⱥ~YA;" PcJb*Y/2샎M&/zwnA L-6;>Ŝ#4ܑ5}̹S'g1gmQİdʯhO]Hn5J\J,H&G#nJXfOnAG`߳% lOoo`*鵦? 55$C^Ji.11Sm[wvL 0R,p>(TAL) ƎU!~/A!a5^$!HLwI:^s:8SA;Φ}A3 _JzqBMX>VyjjBO:? ,D }0(zwoT5%ֽ(%egL Z_IW#]ER&p`\-r./e_@QXRDw]]릳t%WeMf9!$ݓiOK8@޼T#q#_R~q'Y.s Ybux+HSoLl;cZپ,(y x Ӛ3U΀O7d߉U/̹u2D}O>a?RgФ4͜[~n|d?t.Ì&mL`<;UѶ, E!=-RIDcCot=OA7Zj [r5#1e'mI`^QK^ $h-#6 h`!zg08跦D۬U[8npgy$9PN xwk@"~_{U,cctwT&=%[TCY] X|?~LsD49#uXMI(y6*\f`u'_Bq2vvL;]+|MFBnڳEx&PU)sO>(i;C<JvB(k~h.pi{]܎P´rL,'^,dvy"TGn`30Xc 1ВmFR&6yS #]g*M5)BUsNCkǾ\5 ;е6D,Xf9/% OB~zTNGCw=c=iZ~-k`()ȯP99 %ז}&}UX!pmlZΰ-h:mtU=`IH0<ӡ潳|_VR&+`Zu%\G(`f 0ebZNM S1]-` +I@mbWvo'Q2ig_!4tw8TZ-NՍ;ҎЕRدlۉ L8TR4٧58V7N|gW:%_*zgk[4F%I–cdpP!QzK[Ψ{pb_5ݐvM߇$_!Ӽ0bDN0?H1r x3/4 a 0գ8:%Ũ+2#R`zR<uH. P}$gy[ku\\j %j@e>~]Ye;DlR۴kڮ&a*;]b3ATdnR@$R@\,ÇFNkB>J[lo%*֤G@?wGo8u/@/ | e8ٞICǀӉk-7UhoW<6>Ux) 6nѽ raਬةa =2Q* ˭aP05d3C{;"ɎUgP4&-L{fC0//6*vWʪ3mĝ7)Po05{s33Oe%{w!L9)7ysHj3k0Xp$w2NP%p!fӯymFҌ+kBa0T;X!ŇAͺ" ok_> <Fow"RG4' #ZܓՆ!i7HA/YH=gsU+`3_j8Dwdn/BWwXW'P|sF&%^3őJq`$Ţo)EF] IԆ|R;]O&ݾoP^ʇDm٪3гiv-K]5VKXJ=sC̍{֡rw`0uI%:S,E[le9"R(-r/#,#zj|N9i>xρb ^;D2N?e3\ky޹z7N0dm /M<gFr2 -9.aȰk(0ljp 4n{cz! x?:_Ht^mbHi'/N͞q8UArCPA A!d@p 7@|Mr;\Dݾ(|RϚC^ .c>XxSJ=XrF.ʹejqz.ͅ`DcXq._C%zm'8mԲD+ QɽK{}2ϻ!yKRVpW2z2<"x لYʷTc1r8<΀\~VtD^tݕ:3'eǢqRy aVW hsMwꠝw34*i$.ioGq/OÒ,i afbX:*FUTÁƲ'n*) ,2[FTbg$=lfGzx։j,U@J.td6~ĴEHR,D}kˤmba`7z>2mJb~X3zE}(bHE=fdqDa$YwE*;!-q1 #U4[}4=FL>3v,S+N=.8bb3֬RPђH" !" M[!-|ZXgDI1 HCqx0x>9K!{W h+q}(Z\S#a.b,F?mc9) 50"", DD${aoeM¹srs*wN{_<h|33C.oM1q6h6mUJ$ڕZ(bD|d}97vy 4KƢ+7*K kov%|T ԹX *p^}:w][FGԶ/,9&ȤM|d.)ݢ],Nk]w +=-Qjm`iɾMI/u9 _M˩{XRvcRc?gYs`%"`zŇI7bf2w𠩴HB_ Fr鏱]2p3DJ07Z9˾F2 S2|И*6λ49 @;AQUXӼrG:B·۫鞲>9'ZӁ<2t IuB;"d;7z(\k5c{ta /hZ$݅Esq}>@l  h7(RlŻB: =FĤ"*DJLs=UDV @C؎¬%L{@C HsHL[ s`VJ!,0O܁Amzr~4($W2W(~|NWb6 ١$aCl2:aA 1rSInw(矀,ߘx}=`GE@HV_ 381H2~j 0G(Pi7w^/6UH$_ 1#W.?KT14x{Ic 2oUD>{ZneIXx?3dRJFe"-jD:I35UI2Qi<5W 0o x| *GnXu3sQSF1cW+J_%d6dR ;P%E .1eˋ׉y{Uv L O䰩¯d ^W*,43ص ҖԯL5@qӐתy3}RY SןfGHa';T[1<8ME'frQ^/0,YJez]{ͬ=OZCl-'W&T :W94t!t|a>.OG?@LOiN;؇utM^(fN\o}קF*,;7bzn %:p)thǐEEam=Xi((1B)dy_ѯ[$b#P4 2sj !aG|PF2ºl^ɢ(X=,\d3,a|cmˉ.]m%pDq\ν!?}*%e2dj]wSNTaĖ)ٹ:^مb:ŋMԙء}HFҰq1(y3:[#MfVV7e->X&wg`o!" (x |*~E NgfR/3g` Ւ'ϭ_-Z\ϓmika @ c8Tu|~^ +~u3J:\+b5%WIZۧH}J})OH~Pk$)Ev1s 9?V~pݙ1ӀlYU9O/4e=gޝ>59[p[`kZ]Q+d2.IH\83#?Oat4R( ̀٫#O].Z k^w#̜)SU^d&* a޿FcYM7^*~,ۨ?8ɟw]נ%gf77I.rO lO(7|I`@ŷ_`9Ŝjũ n4>r?OTj9C\N[pEL+Q߸=Pxqy\."ƃǩ,{;{4O#P rKt?Q~8D+%sX.ӄ6#ifLYNņт]Y/tK"W K3~;lmS-g߾ܘO101:]ő/qpgx >Q'ng R.vWՁ Su9hALpfr|aK\u˴,> jVXԆԃ:ɍ]g uZLDeBґeD7xkفHr`[TQcV0) 65:^uN^R1VT)2"BŤ@"/A$ܲp]KYtyc=n1+kC3: 34Wӎ`E]ϧWXכ RֱUa{ pw T‡@W 6s{<ÞY,m>L0_Uz`:*QUK)ٕWӆ\ً%BҺnljGҭcM^Uk+ h r@b=<<CP%:KZ r=)/S.݉/e#jۿyT-6V%4b=Iwv[`Y ñphhbdy1L7knmq+зf5s0Ú|YHA<^r `oJvg~杻/zxlWD_`GDas`Ǚ`7ZQq:S]R@f 0Zz^L5dT܎ЌRџeTRZ=d>X1pF}B\`9xزA%0 ;1`@Yx?G37QtK3{\Ɗ3 OLaMV)]$|(S: az:ή VgfݱG<k6l-)ך+*xR3M;7e}>uo |O>q^^hv0hyD y~5H?/8}A? r㣹c4&lS K)F3D\OanXj -NNq@?p߾Ac0\8^QF) uS[DBd86sb0j)P=R8g6857r]Mg  #q8@L~ЮQ|RjH_1q݀[?[@"ߕ$8h%H_i2P& Yѻ +I8 V,NP9v"7u{ٮy)qvw%mG" ?g~ u]Iڼ7$Xex"飰-#`8ƳfIV;UVHr72D7BQ9+|,(:tO%zq䆄 [El)=C `E9YO .rɖP, ̦{jW9 o&}`j?Q٨auJw3Y}:do{zgt/gGZ?Bo<UBw?|V7|t QZgI貫B#i/V5 |g1݁U.^E *_nURzjuCnc\JĶ3#M4M/-] E\+QElA`i @OPo+H~$eJ|,s|A|w]qה0@Go_XDf0zGBb]'ohq#:wٙb 1{,@jhswavB-U XwFP^__@\]Tm!`p1a tȉLGxQ"Ǣj: K,]]{_D}QfD3 oc%b'!F9=Iƹ ݭqh365T7g 'q4 K铘?'p_92WSZ&?,w H8/+"((n `iaTiQON5[R>km^@nbXg:1ٱYp+)i}="♈livP$X0NfJGSbeX D *w^D)V/~ V\dvͺ<(V<k?%t=&0T>SR -ɼ"!(Woƾ5cg"??o2L:Q߂1hr91Cw?a҃3O22 %u 1w5pŌ\dÖCD͕*]SUҜ>Kya(k8nQU] Քf|bb(m녶^i/ 錭M'쑤tf  /k${uv m&g⽞۬NA ތkʐrfо5BFӦgwӖ>x >ҸO%[7'̮!Zu%!oWhO#mTXa 2ųY> 4MOw=hey5EC־Ҕ5Cweka'eċ 5SҲ k4tB>#kDT+4Cszۭ., wt~Qck\EAy^)fY;B?ѕy򱔇et/mj,kW;K<*꺂EJwpS 8eTٔ f>Yiw^E"7TRUL-M0+d-=8Ac y*{/nLHaw caYj[1Q &q|4Kf֟q!2Rk^ CJxr |PI譂"RSM7sK{ZH"%5F: фOZ~9/]wz-se*fdq.z?7PQI: ' WBH2ēt_`d ?*zdCY'V7M@Zoϧ mEn78^屈8E AŲ΋O~.y [*ʼn}@X5!sW耫tETհAn5dT9k9El5"Lȼ[4@m.@/o 1>P۩qDpoǧ5ճ"N +?@XcL,+^C7/$g։Ax?c[.Ei if8rq)b'R :|>Sw_v2e٣Wo]ĸ K"|!SflJL3T' )[q5J*$P:VA!D)A\tj5d?Aя{c{ <&OGI QQAUd JPz 7f߱"uhPa Z2Qt>>kp$U1V_nxr0R%ߡ鯸U Z0$(>_W<+fp=t^pxb<ifz{d`d_  Ibd(&ȕp%?3!BLɞ&6nZCL~?ztoyu쩐IX sI{W{M,`tI+ܤ8>rf*Z ˜cS7-fw`Q)y3a7J#ꐊob]4kX_,䌗'2>DL ;2ݜi΄iwBZ@E+Y ȡVki yW~TSht?NNRCa\,o`Fʜ. r7]mV[Qhv{"&gǂއu Ϛ[F^ׅ3d1WK̦ +\/%I[F:sYPzY%/3 %qő", w vŶ8dO$U,r(<* ]>&k{-[^0EHܦ!;aǶtA>`*;ꎱߖkEPb& TD9YQs0q]',eT~VǷVSg %.oBZz FP%pBo_,_Zh>1I y;j ~քy}z"ZHU5%m]'e!EmnR."Boe x΁ ȌLFjv;"!PXGVt1= vL/'#4o@fGvu**.kr /ekw5p:=PZα/w//H6O1q42u~w*ق @_Z]2Z 4%ru-2Snȃ]%̒e q:6晙l2ma@Cnek;2KOk /bFZzOs_cIsA}Jcn J,+4g^@Z{J&bIdHw/ axON+Lے|Z>(iDwl6m FCbrhC; .].[f|]usRvuڜ }Lc AԽSRB ky}.FEYգal8Ic3:ROiNe,hλ /%1mKFpFؖ=璀pYD*^Jqۍƀ`dB[]5WxڇaYվ! f^5Ǿa&O̦(liҩ$Z^EC~Բ3:Y?ſ^!T;ӯe"Hr \KwɘZ2Ӱ+v- ԤTa.e8V'9 Si*X˞FPbI[$c[ aUx[ٲr 륗avh7g EOld3>M߶;1mj)HLڰ2c"04I61y#~+*&gڠRbbpꑿKKr :a0w6;/66gB-['.4˃b"k7C7CL~ I0ߨ/ÓRIl8I߿_WY[ vڻ~5'?6_FfX2.6ΥnT&X,c, 'IWH{! ~<.6\@'>p݂#ѓ"B;ּysӟɀC󒨢{2|{I5Nq ٠j> Y`5Wtj,N!ar,sDl¦.Q`?=+?Tyc&'棫DbT|fX-1R+ͣ 4_y4AKYwBYuoF'y?pwIa4kÄTp" F7~B7nՀͼUt/(b}pظgQ"R{>t3K_0vy ;1A70,OD$u {ߐPUG}|BuJ"$HV fE}}΂ lP8%ߠ7jbH$; ҳG'~\R6alǑS=t۱Տ_T`2U p\eSOIqv`,-Ĝ /'< e#G,>)oN*+cLlR߫4ɖ>,wjz>E7!uPd:%^ZА@c_9$qWWC?EL_J'Z!K{L$Yj)$ #*.蕫[*h4Tz's'%U\P \T:'aQr>duH)^oCpWnI B,{q~Gкr.M^1 =dztG, Mtᖀ: `"ZH@ *]a)sb")qըHRgMBrɀ]*YydSi)Zg@TekIn\T:' JXOL-q&S(˚)K)Fi"K otdx2hQ_ Ț@ o@L(0Ӳowk]#cvԬg'zIvu,ގ.0Xf 7;Z7]4om$!Z1Ƴ9o !O%|yQt5b0'7q-(dy]q]J=;xB!&^"P|9R]$<9ʄywf˽HsEvb7FGXrR$W%2|gaHZ~԰$g\yr:ng닙A$ȺܺA;waHT;_|x|\Eewńy[QasMTQtm˸\8on(EeKS~ j9tT# FTYl t_RX9zXOP ePa6" S$1N md lQkt6p!t5zlweKv2.E(51^8S)"N-ǜ4sbmc7^:.wwBfaXUnTgQ8Rszazm^h#3 .axA`|"gLImV\36|"HՎwP<;0#B.5դ$3Ҽ#?E*@Ekt4ƈ$"X]O ,߱O`T"I TBE]n%> u V<@i4k(C4q=&9va/5n ypO|yJbP𭃬V i"ktGrmlͩGmYL;Яזqe KA[$|s]= `W"KVnwti!O&Z/0A?.S9ŐDPKz6E>e 0-k 毛eYvA}Sʅ0㇯SR&mjKbzUiT/zﱕu&;U2{uw,2\]*ݞ(-JC}5"_|S]Ǚ>nQ ʼnIq t'f(2 <Ӷ(LLwYPhBn*;7YV[?qǝ %<)aVzLRp3q\.(C' fg #$fJu 璼fб$+\[.n:5=T@wܻH)E`fNywZs( vs~G&)Dlk u+$њʗ͹M}hѲVi7~\gBiu\S@ 0V:֔V/1Ж )JB=V#;qid5CA!vn>* 8UFSrE篩e}C@dпǜw!E +5!Dk$DwŽ;o,u=3#nMY߳ XF +l enG*M 2{}3^V7J+o 媧wZsSGSN% 9'u!5.;jZaeseAw>VhgY@jmsLLKO s RjD) P8{I\w~>Z|Xd / K1sS: Rd!<,3b{]$i\Ep-aM Ѕ)ԹV [\|Ua5,FiW|5KW .rw[TWRYk'Xwje]g,7Ho2$Dۦv+X `yByWLAsV)⏘atITБi1œ|#- /T@%i+|u d;5tMjkD81aE]f*?kw!0cC,c*s L!wY{t:YS\A_x)LKuҎ?xҫݥ*yj4+~-JAb,OX WWa)eS!Jw' 3vF!W۹jo[t͟?23cVp\]d]F*Y|CÐF='C8 Nb~Rd{\ y)Λ/pxjcRZx.xḧla9`x @l|?]S>~wD4} *L~9'h/v `u!#FPkMZ$}OdI^IB2eq[!EU4ei!&/d{7Fu ,&p$kG_A'<8O@͍E0-Nђ޻>y,?1:\KX)$H"->#?;OnY1hĶhxzE puKQ].];,ؙQߠK$ʋ<ܒ킁gWNtGW >b) pz(NrHpGHPK>}amQ53pԁsAUySIUuBi:@2N3WgKH,C6x_7SRžm(S1r4 Pv>PvNPzv+Xl!Bj??JmUC`3c-S.4adu5"Hp8ZQ3lT:h%AG-u3)4b>AޠC[.>rEULz(8Jfketߙm9BBXم`bxBW}^@G)^AP8`&piSkgcC]r Op?UkbIЉ!Ҳ|0?^ [#NЕ9"D.}˝T=.dGfnp=' a ^G|_cK*X}٪uOE6+ȅW"5Ԙ`i9 @ 'Du*xB-wzv{X'vY`I{I M,KZCJdm)3aBs{/r0og-@!oJdh$%|nxE2#km`aRJ'OJH>~pe?:&$'=я(e9Ba#2Y.*4^3=.Z .\Nueug z'RqAI*\NECN dnD.34cN}xHTopus#9ftQD„(O >%VMuZ9êFl`g یZ +iƌiLHY.Qy-f-uK0UOb󕻔 &ʲ;pw0:H5Nښ%|ۊj8.C?PힽrΧQl4>h7ԙIk(ganp@nwn s"!+WUQZ>ccM2g7&:D}GocIҭJ0zܟ۟_ޒw ߆T"WG25fr9}iqC|ӎ:KsD꥕rƹ9DnjI-oRa}.BJ/Vj#>M1f!̔8gb:'z1={ٸzpF{.}ĢŌWX ~ig|j}J) VA-9R+59#7zhfnpĸZ*&LMT#r-U#&ܮ 4;E,:?ɹBs_wbBYMk+j];bZKPŞ;7K2D(#W7SĻMӃv`Jw:eF7:؞C6+%&\Ȅja1̺b¥P0DjOL,;*q;1 hZ"Jil5R3ߟYu\ēo;LzpBNخiSx+K>GsjɵTVZ|1[Ɲ&&N@x7<j9b 59Uǽ^G_uyduױ:El4ѐf=_9& }NkƃX\|KyEp$=F\YNȩ9Bg$Kh(%gyP)DR۴zkR^ Tp՘Db"w`Vx"U1#tpFsC 6/KF[A`ԛٚ]p;tc80{,NЗO0c;G0©rj#w-[҉ 2a* mʗa' f_征9` " 1kZhaZrL\ JdU9qV-W6Tω`V32gh 4(ي :72E},]̑ /U[k(]x&vƫiռIvԇG#=y:ѠSh$6GJ͎axrh?f_!xM]@J$ĉB&|Va\J\buq^q9|875_-:Whp8B% Pܐk͈c4)`ousms-WE5zvߊ[}=Qj暑 t7tH JwD8{u%/t~=DQ.F7ފ:`%yawV.u!ؐ%"g:CkĶsC!5\Fh:Q!$qǒӥ7"Wb3^4,HQP"o\Uw01X1p;3imtðb&mZVQD`O**JW l ~q)R>ޕ3XOd'*F+qW-vE?Ǭ}8}fnmEHVLqpRN4EpBv̮MEW80FMx*yvɵ↹&PcIT +ڽwгX}:8)e_|E^kľoPRM31eSavLHݔ](t-xnya|%p`2 @]7WX8 a/E̻{zãn8^M(rs^(`] 1!xPTYoc7?+d{B!Voc0t&_ԃ$W)I(Ý)mۛ06ENXZNAR (њ((((()h)h(((((JZ;KEQEQIE%RE%Q1EQ1E-QEQKEQEQE-RQMʆ4}H]\R 斖OwoK$ٶI; drI]jD$ϖOQUuq ӕ=zԃ8 Z((J)(@J(((RIIEQEREQIE%RE%RT_lr `e\<`Cj;3ԆGmKrsK rA֥IL#sa\2h"Ȋ~V隶CCU ]=8@QXqTu?`qʩ3~ s>eƒqUUHcczZ\х]<s[ִOzZ(()(R---RIIEQKERQE---RQERQEQEQERE%cN z*n$1apZΨ7ˎ-kUxr'TRn#q>.XS;V>ryWm/|sZWrGC0f9IޯZM)A~AaZgQYnI`L$?:u2 eyYPA! OLuENq'>B%qv>N}:eF XǠ'Y"VP0G6 +ڤEQE%j;QKEREQEQKE%%QIEREQIEQE-QEREQIE%ֹ/N,r![Xe,|Sn!r+1.Kx4#%򥕜G.dqsm8oC`5`D7`'hZ05>B*kKpg=+Q]'2>xxbdo ($6-q!px ?5n3XXQF[jZ@8p>() (@()h)ihZ((Z((ZZ()()+\Y<_kkA[՛um< *ձM ;g * '=HǾP2w#:Kyp[|s>'#(n,翵Mn|er '%Vռ{# ŽկZN8֥kOb((J()h(JJ(((J)ih))hZ(JJ)ih 8a{\[B0%3 >W2Z˒]B5.PALbV#i[ljqMRymGj>IYg9늫q=4ۏcӊ$9bw߯zKWqʝ§ljiq:OCmiX&NO֞B?.=;V_–((((QEw(@@())(Z()(( D#2)Š8\p8[쏙$6r1Jb [(=HJ_(F3V,Kt wHlFR>󎾙H#'vGt𢒒)h()((((()&h-QE--QERRE%QEQEQEQMXLEFGFSV(ƣ=xo7`Va =ꆵ ,~LLsjq`g4f((J((((J((((()(((Z(ZZ))(J(JC)GJ;REQES]9.C8?2Y TF a$*"KKm N:T}dKn8 x#tV-nE{2zq&MY}J}MO((((((Z(()h)h()()'ڣ-ژПJ:Szx ZZ(?ZBp qڐ}*]IlzV%q!Onk6F'v'Ti X;PDv&@FQG +eT*iԴQERE%QIEQIEQAE-RQEQEQEQE-RQEQEQEQEk7Wyb_%;d=]c>JBQ!PXQ*yW_=꾗ʻ0:5tvܟwTXĉ*kEk*fQռ+*Rc=:zV  PsRFA{P84-Sܹ=ަ'48TYK}=pjm6#|apzMCKoq1:) 85.=ȷ 84 gʑG;[Z~((((((\RE%%RRQKEQEQE-RRKIE%QEujjC}B*hז'guzz."FicֹE@ʑ>x 86<Ҕ= )fU 2i?n˟K Ũ)y*X.-lBxhS+q9 _J[qC.f2n LۻpTlRܖY𹺑HTsG9$$|\&C8`9yr b c;8HϸtƎ;:G-ԺyX21}jeq]~@R)QEQERg'ւp2HU,($(jTu92YUh(gr1;|mmvymUq7֮袊()hZ()h()(QL UoT"`rpǽs(+lҹkbzs\@C,sPwQޭCao$r:="Zӣ }+x~nQF?P,[JqS/KLl8L]I`UHTkFNXwX_H<_cVV?!{g ,߽@[Kxį(޻AYU)mva] BBR?{b=3L2ʘ 7ZTjwp b3k[jnrүޭ8uiV<Ŕ/#\o% :Ջ+W.HZ ^V1IOL3ESJF=)bN@2N wv?&Fz5_hʌ3x-SPLcCְ5<1 N1ұl5 *ΎO%?U./2Cs6<;+((()()h(*,8j(dnUoT:2Mcjv\‹3a'y ݫ. I T.׌>зM& _%Idc[ksx $Oҭټ-qv&6*[:zxbt+}&$F 0=2ͦfa@ҮO_|nr*ď-;VmMJG8j3^&(j{vہ9Ң+Y-R;waO?Z,4-鞭=2&Vie'hZ&b`W֋>jJ Ž=2 ܆<AdW+= uwY#G&7nei7[fdӠlMYy3<6@5=*\>P=j<k`3;ր<֊*13v5SKH;ϟҲMCom&}RC 1KI=k `Ijd#V̬wp0qS'kk]߽'qH-T*aS$Q)ާ[êt#֦k_,8WM]tRE%QEQERQEQE-RQEXƄo%w∺&YpZ.E!AګٓEE=A$sޫwV8,-PYx ԂzumgUect$k>,̣!-yFx H*é'"E6TY+H3.#REh 8ǯZgyqJH9`qo`c ȒۆH5v+gDTv?x"w!|:O#hURet`TFDzj_#Ɂ"pԉzk7ZXs$wLc6CBq5,81ݞ6}{sѱQ|c#WtJkiWt2, ս/P][N>aگyL9Fdkc iHY1qcTf$Ui122\9(7 -*rX!Syr~[[,{% ]Zo2ңQ.A%䞀S3y `;aQ#L83d*ͨ[fq7Fji eV,R[rO:g8qKx" <R]1&[juHl?T42$ Ӟ]J6{HfQ})CrۜvwiO0}N%Sg$ƅO.7?rvVݜ *0E / 7"l ҒPBJԮ袊(((J(()h4^Z(ZeCTy<2;TqH"b՛ Gf{RJnWgF]i\g:UҬC+ph[[ _9+WaL|%zTA]ҴJ8A]GˌS1J# xqSSAlN6{uIjQ}?QQ4q) Up>z,PG"">(\|^h,>GCQQϹٴEWTuYe g7-љ XT'qdNk1De-ɥNH\G:oiRX?HdNxnRZH6)6J[X?Ք`hJ<$L1RX+T'i1`;'Ir8* $,K(RN;U3" BI!Cr}Vjڢ((ZJ(J)32;QKE ~^z _ VUk˵:WyzJsu''&_=_秵1K@;Gw[mi6̧Jk6~FKAC\{S,'Eht! mƂ1ZKEQE%RE49F+JkFj+.ʽxo"ܧ.803ҫ>f`2/V7su&r W>[vծh(()()2@I}4>)bG֒FHcgf¯N{\Qb=67U$g9PpjþxXڄ}Ccnvқ"hl11֙7!8m1֒v 6iֲAl6{55q v Wj[IWvY0\TR#[X7NH|s>W6 IVOvk?()()()R1:S&O2\dp)&q*У! tjþdH=+.cÂo$ <uQXR6Sw2H<;,S41֙.:ҔetcJ8 cҴ/[Y U ɖ3yOH˜4_vj;ɨ g榚Qrc(EʎbXZ#eGaLwlSXד+(((>QԁFGs^Vg!'J̷I{.S,9j41$x$( sUŒW'?JyK6Xkx[bc@kFcDڔq$fFvjuʒǧ>TH^l(q3وj?<6Ro,F=8sү[l*Iz kJ:aiD9'SXY=rb9$Gm-K^5kWQEQEQEQEQPȬA*ݴ1,>ZxYzV| eqP۳8VlB#8k$f->G*>,DXRydF6AX| }8=ax!ǏJu4 ssjom T|14]if0T21ެ>RYk .wM_JC$aL^rEQEQEQERQE-QEQEQEQE-QEQE%%REQE-RQE-RQE-QE%%R RC7 TWlDs3Q\ HK^4'~y_6~jIa LH,F#1RkbA"1ԓƦ97zpUѾ}v1_H@ϕ7?ƃ}r~B >8+RtؤԭKQ򣏨IKEQKEQKEQEQIEQEQEQERKIEQEQEQEQEQKIE%QׯJZ('ES7aϜzQI0U4`{, 3j߭G+'pwYf+w{0']v!L;1ZbIkL}UҮejU95mX2IEQE-QE-RQEQKEQEQEQKEQE%-QEREQE-RQIKEQEQL 4)}\*` Aukpj;kY׌p}3 8>?aqY6&+yU2\m]9Ś|>sZ?Vîzc伷 7CIfH<r_[ϙ0Ps&H8MXAwq)jVR(ǫwUWhJ1Vǩ*"ZQJD$SҮN5B9F@1XջpLMa(A"LZ&at߼+KqTⷙI@ =*;\ EWmA-} g=,xDj; +6GcQA2bϵgޔeS|񫱤f0$2Jx]ۇNTe VtImfa.ڱ߭t+"l]%WP:`ۆh|GpQE-QE-RQEQEQE--QEQIEQEQE-RQEQE'Nh'h'Ӛ3OVYʪ,rN+8+]M=@|0 Tl Q*fQLQ* I(\OҝbQRX0HqManMr*V0wnM$@`Sim8 -ګjYK,v ~j̱D Z̝#Mn{Ttِ Xf2LI *EOgXeEhA< 2$UT *ŤuEWΫDK,;\1S?g 8u9EmόAS|zK-H~  ='!)P) +`c˗p0H;e8JeńAuZl21jŴ$ Wd?/nA@̼)'Mm;4_p3IO-WvIjh%g :,b6qRZC4N>-;%7lT]CN\ }+ICX3\R"8r9`:դ^XsW$&2I5j g` )˨4D8S\yqQpq֥!ڤ:ӖV*19Azi#fS#=sVn@FI<ڬ?)yy*c9>ɪ?l+ff01o@sRCDOM` 3MD#>eeG}^C/%[хY7CRcEHzQE}zPH'''B8]yovLN}*N|ΡTw5z K;s)BrW#' /<;6qޣa&m9=ŗ'ګ0}Lb^CBd3ԿPhMnٌY8'R+6Ӛ-~”| G+`k{5'p:7fYNÃӭ\Nmdm,y wK1.Hm+w؃9Ҭɍ횿M5i9scȆ\#;]Q9۳^]^}֭6jm7XGUqяCSXI(`t'Uk+.!9`j;tޖePqњ6i2ǹURMF9 bGRqTm% G(3Ҩk#bF3U57trt +4ʥ/e#ȌYTdufLhv6첓&e1#=VXÃP*zTܑWy o:׎8ٷ~^i#|]䔌 sK;iH9^.#S0 G0|tSd?1*VOnUiRFxj=Z@뎣#by 38u^+h2nU9Տ>@nⴖ"TީУ2۲29"ݾR}*#s[KF>UfG3ƲFGI-hF@w:B0y5emXdaYlg/Y)LAnw1V$IefoĜzVI ?}'iTA^rrh*ѳsC)RیRKjKl{VqviO9M%982_9&[*!@ӥHT.}+7T9 c7\|rƨ^'6*HUd!pIvڥsлZ5eMPӟT:ZBʦJCQlRDqsWGpCAPu4%@"AfXaC#ҕB+ ԩn2d9[ g d)@Bc= ] ʾp~ #q8Mefq ⬪AhG5zwۅ@zջU-Y>ۯ52zuKu nU-9 $6;A<Ӷ+GOkNq)%9_aPG$*TdѐCª% DgpчRKهOʫ&؎ bIdC.P7تP /> b8rG^yeuQXԨ=O2R H^>~bHHI g=KQ0?1Vh]TdI[ɷܪO͓sV`n9o.S.ރ׵G Fܰb[@Ei d$tSҭ|O k.l=U >D@Gh%)1rқ[L@Se6zYQކWnn2I$1<sҞH~ܧ;q"09 0YycPfCAj8R*!RF:$jg 皱XH~ݦ.3ZLv_pXm|V tZ%Cd-Y]p٤L2igp)5n)<-&VO9rぁs2Jⱐnʏ^8[5 n1ZvJ߶+NP*Ĉ .ڴ!Y-M$Ev1$23U(8@ hߒ`AjG2`RG'.7 d+Hϩ~B7I)YP cU@EF?&OSS-ʹ})d}IMXt rnƦ;=V"fԕJK~fd0SQٻlX)P )8 TU]Ķ5%8reG\vS늫 o8 q»{T񰙷{S[NinDfK(aR)s[BjSiʣ*p<㸧:I%t?ިÆY0Fj *pG'2mlFV`K4ۜ8K4u ѾP@ JY8hP*+ǴEaHʎtF$QI&B>H%)"F_rqdhvI'LEifu; b#ODj 2G-ɩL(T(/Xʿ M6(9 ;D)( G#8:hE%-QEQEbJ.JH܀Z-ϝJ$ŁA/k")'&i~CY>"6|>$RMȸpI+mQ˱AXuÐ:ᵇ8YEw'^FFs5jX` 1'֢\~I4kg'ڪCmk#ˠiH졋$;ֲ_\ӽOo#$5d6pG_zВTdz|̌C XVB>_\{]g#HjntArOP*<661dCȍ\u*8ݼ G] l6S,I{ku֚TE[0W*&g~Yn$f<IpY0:wg']'$VBҦiv(,sU˫ !xjו{Ȫn }y f e0_yTL wS6*II4+W`mʐzRVbpjI1ȫϦǸoj Z39d@҅Vuң\($mrDxs$F; GgjFic{[lQ$ǭ.smbIZn0 "L9<[j~ikapmXx UX+"Ypܼ2gCpcb4r;e<XHf VKIp:M[_7rkVvcքqvr:qSTRERQEQKE|M ,p #jl͸1[V2c0|rk]\ɈHF ɭD+12; n+N.76*)wd8"gUOU%|qUdnv\XnbFK ;Ԗp&$yG[ `U#2I,(2nd2"X"́* lpYmH]m9QXe.pVY$a'#5 J3֡E~jȦFp׵OJFF T񑌚kvC ƐP"X\~fHVƛb!3f^8|IsT)xL `O]jq;<=岐rzԏC)RP*wR1 wy8YyYzT!w o&pA\&,cc9 4ؘLbDj*jPH\zcmJ>mp:QēFuQmV%T]zs]5qıavZ݆4HUqXVq =4i8tZ(99*'@i\0ijZ}aq,(υ>:nWQI]Q!osVZQ),+S-&Bg1֝e ƭdrvߕƬί&GLvT 9 Tlp~B(y9qtߐk}O`8tEjF;;Fx~Bygw^U#+#0Sc=kydv!~sY4o,ۀZ~e@&A5nX0*f%s 1׊nWjM*62^lh%)dr7[kC$ {`#9eu2ʏGZUhvH>d*%v9dsמuaؤYG3'4$я,`p*LHVǶSijL}+֮iMi0a#V 2UHjů -} CI1ό~ 6c/\pzMl]]EfQT w9#eBW$te]2*XfCx&&eH2ʑzU [${*ise9eϗ4BP1M2CD7wd7"goc]GQc9lC~*&122mt*2$lݯ4ոyU+74e Pܙ6#8oQy'+$JJ+}=eF$)'2}Ib`I%F Sd Tr*ŵO([5̳d#S;6 zn৵n'SA` JS<],gt([[KFqҪcҳ5Ƹg~-pY `R= V(B7Q }p*)^cD5ɝt6X mj-1B]@ w4 ?"Sҝ.~:)BnO/[a jLJ6qYbQUwm07ԑ,} >bÞ)0 >.EU?\N @}H쑯=KtU6I<PBpcTbT|]ǵLkU$@3<شLiT#5e,WS'<+1^QE AОhW&@<`i&љld(y2<2RJ=#Ҍ qg@9 }h^*nJd*=FG$qPp0 &)p|q\nZ&;0*PvM]HZF񑻆*m9.c?0>$09;V[x4v` =Z;-"EN[ ʾJ'<(,F? u!kҪl "V>qq$B>MgjJ gGaY yG GjfYnynIŊ]6,2yy)&[,P<}Et,;vi>dV;Ѕ <ZOU*WH.SF_3taHo b ߮iA+ԌC/^DQ:ȠPJIUeMl *nbGқn*Rج=vqKhFLkӤE0B>uL[o-Ҥd)T> Vr/3k *ǔ$,2e'wOvojդ2aDQ~S  Ve؀PhطnDw4L[9Y'I.J Ny_0)SZP ң A껀K\ >~+9b$$6+RьУ@+Q$+!E_íl[+Q&2aws;D>if}rURTIZ9.Q3ry'** z`M]!\Li:Nbgb'NĆ6bGjkօE, OX5(LѺJ^A+k)Zv"Y&9/oj c11|N( U$7 X8D/*w9SK##RK$9VLVqQ+_;QҩVF7v#ƫWM[@g*Tw"##2ҍ=O$vst44 \M-T!^B$$=i!Uw#)\j'8@,i*'iߐEF֦F7gwNKxDA ԱFH8|ԋqs@Iz)qr#^Vi_R A==)iGBRAǧ)VB28M4*b @5a~nx)X\5^xJG2R0wȢ843Q@d=*]rz}А4pHaI̸qҮaY10iX21ޛ<"T8V.e$`DPXN{rz]:ʁ`T2Ci\u/֖(()h(((()h(()hZ()((%%QAF3{;s1YwnU`#Ϻ (d^)fMQd cQ"/4RG`1O]Lag>S F0Jʎ5*Pne7]N̲LUUnۡz wC ol? ʻ`ڤ)QIIEQIEQIEQIEQEQKEQERE%QIEQEQE-QE-%QEQHtdViҩvIɐPPr?j8L2M,ioU^ilLNC)10F#$Űy+F?,$#4F$=Xz?hD+G6d=pfdO{rH"\j7gF*{V'%O*uSm:U9uRAUe J 5۟SYۜ.Hǫ-<_\*1R.unSS?6Z;aqVbf?y#q꤃V#du' yr=Bџ~en8}jEVUA0 cKKEQERQE-RQE-QEQKEQERKIIIE--RRERTsfJ# Cu HN2k5$5W-;N]q5Z5Y#qi[t*8;OjX yBGJݴm.gXtm>@,C@ T`( UR:,Urƛ,k,f9 ", lz܎NO=>}A l֬RĐ~騌Q| k<ym3FygLH$6[L wOo! ޥX aǨ3m0Y:cW`GFHwv !c&=_ƣa$eI:BW1IE?23)i&<*Y'1c8r*In')T&%p.Ư\IuoUfsR,,WFۀ?%q)5>(((J(J)h((Zd71G45ɬrIXws511.w3 ))s{C4ghb*\S>Sdt*)\`+_MLԊұǒjzUJF >`si?ZpzGk~[-_֑֭Gqyrhg8L=^Ky*2$l w0Q\FN`g,dV瞦?.0>RjO$b4YW,2)j 37Ryx_&AU($cjym& Gj=8S؊\[O2nuq/e d2 tnEYKIQ;Rc9E*sӰ >ղ+đ+@`OQNE-RQEQERKEQE%RERRKYs=|jA'E`Nu-W co}TFg<8wb«]Mv>aR\ųIL\<UFM܍u zE9Jl|R8ҏfJni C-wQK!NQfJ ;NHѺ>b)f 9 =B{R#+Gy0ެwBT}zV^ TfE'/@).&AR:DƤ:ސ\.6FZB2֡K9AA%3Y~Vu!Y;5JYd,O9˹kmbb:0%ҩiP>EZ{;O\"T1PrUԋFrzlqUf,=3) 4q=)NTȅ}қô.G gR=TV j%]T*ՙXV)HeA̘njMya o{1fvq?&OAU&|n_0[ʓx`̏S2>B>XTM6Stm2~_W8[#xu5'hQUNjyPL |"ϑ&$RJq]E4 ]t4˂8ǭXhEQE-QIE-RQEQEQERE%V*;bx\s)z ^9 rF@Sߵ1EA-AH:[|\4͹g /wN>KYP\a H74"6HSMhJ܅5͖LR#[ +q.&əO|V}Ս IQEQERG4 1iizQE-RQEQE-RQEQKEQE-RQEQE-QKEQIIE-RRKIERRQEQEQEQEQEQIE%QKERE%RERRQKERE%%QEQKE%%!Ev(J(()h)h(()()h)()((J()()h1EQE--RQERQE-RQIEQER1(n949KKKKE-QERQE-RQERQEQE-RQKKERRE%QE-QKE%%RRQERE%QKEQEQERERQIKERIIEQERE%-RRKIERRQKKEQERQEQE (gqbZZ((Z)h)h((L~SA8)h(ZZ()()((()(J(i撔Sih(Z(Z(JZ)i()hZ((J(J(JZ)i()((Z)i;QERRE%QEQEQERRQEQKEQEQEw(Z()(((J((()(Z)i(()(Z())h(()(()i((((((()h)h()h((Z(((Z)i(((J)(JJ((JJ)ih())h)((J)()((J(J(((()((Z(EQEQKEQE%QE-RIERQE-QEQE%QEQERQIERE%QE-RQE-b((ZZ()(J(JZ(((Z((Z))()hJ(Z(J(ZZ(()hJZ)h()(()ih(J()h)())(ZJ))hZJ)((ZJ(J)()()h((Z()(((((J(J))hJJ@1`0Oz@30[h<斖)ih(J(JJ()hJZ)h()()ih)hZJ(JZ()(JJJ((J)ihJ(J()hZ(JJ(J(Z()()((JZ)i(J(ZZ))()ihZ(J((J)ih(J(Z(J(J(Z())h)h)hZ()())(J()((9()()((Z(((Z(ZJ)((J(J(J)((QKEQERE%QIEQIE%QEQIKEQE%QIKERE%QKEQEQEQIEQEQKE-QIE%RE%RIIE-RQE--RQIEQEQKKERQEQE-RQE-RQKERQE-QE%QEQE-RQE-QIERRE%QERQEQERQKEQEQIE%QERKIE%-QEQIEQKEQEQERQE-%QERE%QEQE-QEQIEQE-QKERRE%QIEQEQE-QKE%RE%QIEQERE%-RQKERW ?룮JZ)i()hJJ)h(ZZ)(ԴQE--RQERRERERRERQERRKIEQEQKEQE%QE%-QIIERQE--QEQE%RERRQKERE%QEQEQEREQIEQE-QE%RQEQKE%RQIKIE%---RQE-RQIERRKE%RIIIKEQKE-QIE%RIIE--RQEQKEQERE%QE-Z)ih(Z)((()(()h()()hZZ))(J((Z((-RQE-QE%QIE-QEQKEQIEQKERERRKIE%REQE-QEQEQEREQIEQIEQEQEQEQERRKIEQE(RIIE-QEQEQERREQEQIIE-RRE%QEREQEQEQKEQKERQERQE-RQE--QERQE-QEQKERIEQE-%QKERE%QE%RE%RE%-QKE%%t)h((ZJ(J()hZ(JJ(J)h)h((Z(JJ((((JN)h(J(J((Z)i(J(%QE%%%--RE%RQIERRQE-RRQKKEQKE((ZJ(JZ((Z()((J))hJJ()h(Z((ZJ)()(Z(((((()(()hJ()((J)hIHh(J)hZ((Z(ZJ(((((((((((J()h((()(()(JZ)h((())h()(((((J(((((J((()hJ((4f((((((()(Z())hu)h()h(Z(((Z(Z(((((Z(Z)i(((J((()()((JZ)i((J()h)h((()hZ(J()h()h)hZ))()h()(Z)i((Z((J(Z(J(J()ih(JZ((()h)h((()ih((()ih(Z)(J((ZZ(J)hZ(())h)h)()h)h(((()(Z()9H'#Ҏ}iih(J;KEQEQEQEQKKERQE--QEQERQEQE-QEQEQEQEQEQEQEQKEQEQKERIEQIIEQKKE%%QIEQEQEQERE%QEQERQEQEQKEQIIERQIEQEQKE%%QE--RQIEQIEQIERRRQE-QE-RQE--QE%%QE-QEQEQERQFhh)((((J()i()((JJ)hZ))(J((((J()h)(J(()h(Z((()sJh斊Z(()()h((J((J((J((((J)hZ))((Z()(Z((J(hZJ()h)h))(()h)h)()((J(J((J()hZ(())()h()hJZJ)9ҊZ((()h)ihJJ((QEQEQKEQEQIERKEQE%QIEQEQEQKEQEQE-QKIJJZZ(4RQEQEQEQKEQEQIEQIEQE-RQERQE-QEQERE%-RW ?뢮Z((JJ(()(((J((Z)i((((J((()((JZ((J(J()h(Z()()())h(Z()((((=(((((JJ)h)h((()h()()h)((ZZ(JJ)h(J)ih()((((J()hZJ)((J()ih((()hZZ))((J(J()h()(Z(JJ)ih))((J(Z(()h(J(ZZ(((J()hJ((((J(((()(()(Z(()ih))((((((JJ(Z()((J(((Z(()(((ZZ))()h)h(Z(()h)(((Z))((((())hZ())hZ((Z()()h(((JZ((J()h((J(J(J(ZJ()h)h((J)ih)(((()()((J(((Z(JZ(Z)h((J)(()(JZ)i((J((((()h)(((((()h)h(())h((((Z(((J(J(J(Z(Z((Z)i(Z()((J()h(Z(Z(())h)i()(J)h(J((()h(()((ZJ)((J()hJ(J()ihJ(((((((J)((ZJ)()(Z(ZZ()(Z(((J)(Z((J(((ZZ)(((Z()((((((ZZ((()(((())hZZ)(J(((J()h)h)(J(Z((Z(((Z(;RQEQKEQEQEQKEQIIEQKEQEQE-RQEQEQKKEQKE%%QEQIEQE-RRQGKKEQIEQERQEQKEQERRQKEQERERQE-%QE%RIIފZ(Z((J(8Z(((JQIEQEQEQEQE-RQERRKIEQIKEQKKEQE%QKERERQEQERERQIKE-%RQE-R;ޖ()())h(((Z(J(()hZ((h(V #p3i(#ިYJt+׎*.v㏭Rwd㊩+yV&q8訥JJ)h(Z(JJ@ EULg@ RE-RQEQEQKEQE%QEQEQEU9eXlGl}cFP1 N^1l8,%#`,HXl(#ڪF6OǞH=ү۲pf,>]¬ÈZWf9\ҘbIw. ,_3,>NhSn֨mVlE {zT]c.NOW"(d';gm r;Lwwb{8c\)pT7AXBZi7ME{ÓbrXTI,[]}wQIEQIEQIERQEQEQEQIEQIIEQEQEQE%REQLwJmZo)=odC|$ Ve̋ߐG̝EPTXST r'MSO4,Lw# K9pJBbUAmRX&sǢ?O1pǐ \k'Waz)k=R.POHI-u$Vl0s+j|՟S:ml~IJ1\7Q vgFUCquFzn-5,OJjH7stWMEQEQE%QEQIIE--QE%QE-RQEQE-RQEQKHiԁyyrBFU Ȱ[~V{B'?F&eO2LIEq)W$IQP^ $ d?< LtجUXx6bl ;TIoJ81P aF3[d0c:13&xTpp:qiӐ g5 gS]UP9kSGVd{֮x/ʃ9]+Qd.8%,o~ԮSG~sS]JW?*JQr_s۔ Y^ɞ{O,L@8tWIE-RQE-%RE%QEQEQE%QIKERE%QKEQE5E6D$ 7b:]AM dg֠Yy2FE3( umy1+J\}MT+g31g:%wf(2j0ϳiXO{ֱ"X bmDXcw+;H Jv Uk'qڧIen2*N>MY Ř񏘒sD*N R\EJ%Ms;Y4{Lg!ekdȟ9$VN$sq]&+M2 Օ\} .@]ǨE1"agR+HEd ^ 79epnHh'w{dHA@p}qM-@}kfZ٢Z(()((((JZ)i(((((ARgJ:UED(˱6, 2J^"%Gc,@Yy -VZF4+);!z [uV݆ɕP$W$(+ xe;qJ_50ϼq7= g6 Gu9_qQ$v0#[hnLnur>Sjp~]9.OZ6?gˑOz;!7 GCT#FҨ-ɔmF#Aigoʪ=ka`ym-b3Рcq׮(JJ)ihZ((()h(Z()(((Z/c;VUŬ4чy\ơ\Cp gW=Gj9TCFѐzֳlR{U-TVCGTzXŒd=] -\ )n!_'9QNܴFPlv9u>}vj\'s&JZQH >ZӮbZs"6 | YJNnfycWiomQo"F24 u-QTZc 뷸j`P֤r'8FNO^"C>ݪ94)ܽkR:ע))hZJ(((J(((J((()R;FFeD.jbrYƬ6@*j ̻g&m8-a)IwKOc#Lg?ʩu5+?6;] 7*3v=buI9NB*k=k,=ph,|NUy2X]8UFD`CuM;2*h0*ԓb&Q{ԍn6,t9 69 /淎2"6]G\zւ?#E"F\o ֭n~|ޖ5Lt9'j9SəfuuZnR 6`zE㷽Ep%3;sg"(ÏWv袖Z(((()((((Z((vrp3WIe2?JAq %[" dF;C@=+!pRtZ-*)oC&\aڨ 8fݒIv<zP`@ilnyE]Q:bZ,68^<*vJJ5鏼{PI$+sPH?!FQpO֬ܭȈw.Rʫnڈ.A"GZڬIpd0V 0rG֮N2.֧FǦ:ԷNs g@u^bWt|Z׮Z)ih)((Z(J((((((())CV0AHFAf7э9;U[> \e93XV\ n#]=R͢RzSm`|o R6vjX~V@5+"p<[f.#yL: 8XHרD!0M]B d6γcYISO.r eȎs >aj[)nc-jk)1g4*짠uҷ 5Ԟִ pAJ:Ӽ 7>{ke${k $ސDs;J)#7OjWO[tRQERQE--QE%KEREQIKEQEQERRE%QERQE-QEV^Oq?Qhk*;$y0.{ɱk5c8nmJr ֠ .D 桽2]f3Tؼab(a@9*h@?3pj;UlA ?)ˢzVt,]H,f-pY'02n䚝0ya#U sX /1YP~gr>j=Oҧ,WA#֢zQ[y%z6 'Σӽ_2G˗LC";cOhs8֝-?9E GPri`a9 US$ezMnhgbX"#֣'xz$sϘNC9ҡ ''⹻[ v#j]JY UD1l3M5c sq^W9Il#zDYlIcy3TGT%hTʫ|~T'  V]#eպUzw&I0Bcۙt,!;:TPjIw  d 39,Kg1J8vsOR*DYLܞ"[s*w0*L!9LQڧY|eE4Y;cJ ܒiBN Csf'IT8ؚC9!Gط(#ahdFM1p;Ռ- Kuu- `!UÌlŁ3p# 3XVz&0uni- {&AO.J19 hE,jV a¤Ic$Y[OrqQ[B"qLt0 iH aIv;V" Aq ?Z~08PpsR c#RRQO$ި/$x3Q\ǹ⹍5y"Zl5رy iAЕ> ω qVyBT3qU6M3#8Q&N3kfKhr oz֍@wu[ks)brkUw܊z=MsnRq_irw(swrTw+˵'UU+VvCGSX$v 9Y.#N+nh #],v1+i"2k[ə,p;W%mFy[: K{?˖i WW}aڻ->v YۋkuqlsSGVnNK bANEW>V *m$x~TIpGe@]K/aV XȠp?S4mX|y&IHH:泤I[@>Pβ a֔9UX|T!ݹSڝp:ab1J0;dǟU1e!ܑh&AĐ){*lb6b*B2珦)HˌΚL&2?:6i{`>Q<\ME8 p)]bAAWH8 wp@Nf@Odh#P1iJ*.0sA$fhʺݽ!NT{OUB9w*p$$0<Vtd0=ӕ f 73+Y@Xz{+:'XZdJfI*O0Aq=j}ZHfGp:d{~f+wyN*>dqd8U(I8FX;xa}Ҁ>T~5|ZWj?ٻfM (nc11&igo^*XcWO qWCڬqPFcQɀNޫZn︎ 2КW&xWp>5[R B!7RI$UnQrsȬ~첱"̍cb{{VݝpDgMZDT@`@`` jZF }h'^o*"ʎw5{rR8j̛ھ#S$ѧ'sI-N]yEX1 T73ɱ~B|Մ*K)Ɖ3 $IA\Q"GM+A XJ·\`G4\$rS$t8df:Rg$>bNKzv(2I=5Lu f< ywaH%<<(|x5*w/Ü}~_Χx8jS}: >Uq5[~A?ts!U|ˤ?kvib`@ M},@{G1xp*&yp[ pŋH;!4CMJ{*c(x|Il0=M=D04)F@<ﱤele+c`p{Kc#00Zslv@8kVh`m9U&(;pG`.܏'0?û-cubyԧJr lgitz0`\q@Ӗ|TV,3zZ~lt ޤtK+hI( W6%ޕ0f;Z#*UYh.OgۡwJ U&`Ji 2sk6ȋ 0?Zd\N9{Q r;FGrsLЍ2)+ a#6Vڬ1cN/n+LT0*;B{S.$I ؝B{T<3LJy,?JE(Bp>W%f-r~\ -D,g9%[m[=r)<pq Iֲܯv!ҬFʮ@;b06zgf$Ɍc)Z'PJ:kgUmQt)b/*6YTU2֫:UUFdVYf61dhd !;~_b[7r*IQqGqSA@QHc(sSJ=*1o;sPFja>aQP0sAc.avHW"J(Y2ZD|*fzvP<ܱ0[OLZ\Χ|S,QfS!+qITm#o51*42zs[ qw0[0v<}+U;h" O&!,M;L@->:;Fw,BzVƎ-w?ۿz(օ1r0joCV-bz(F؈Fc#FDIH}:SbgY Ȓ7L}tƓ+~+QAI,r* $(K ;3xvlm$UrzsS9(puH)>#SToQa9QПJPh^Iv9;/jB. V+%`)R'`9ԗhbWc1iV>خK4V?;x>ԃt`,Y9?xTR,UXzh>l#Y@m#FP~~NH4}1WcdD#NI\3g%j{{sjsu-In6[.?dݓ,fKqe@~cJ-ϖS,f-. 85BlH 6OX'%TS g2c֯Jmظ幣So3.A` nP{$e}o(I{.؛{f8#үF#vyCG\@ڒQU\+OY,X÷j,|c,y">JXXVzIvRX|.Ie°FXy֨G&omMe =7VRD+ C#yr(Va1H\sW CVVFF;˜'cDS mYؗ QPJ: ?_Ơ 8@$PXt%}i(;{57 KzIܼ2)۲pW*T)"lp "mdΠU)PHP%RTHyۓҥb$!hilV.!\@q'EBe{f\|Q >#jp@]ATޡ*SE,>r\)UR{?7VNEolN&9JR0G4o1_QLnA`sM)Z<򾢫ϙJ|˙Bl2s:ԎJ-1e{{m=OZ| _c^*rp*"x^Ґ#m1 WH[+~b;U&(FdV"m╠C"*5yUfv+B˷#qXrK|sx V]vDzTǷtā7 hhG687{U2I_azK 4, GcZo0?9S~MI7 ~aBEomld zsV8DQx VaHH2qQIS#u(FNIQ,N:D(==)L;Zc z(Hfi>P:xۿ!O 7s[,3y?2 dpIim#2\oLKh>w9X0:kgS)&,y9Z:Ӥ|r1\sBTxk0)q;Ԍe( "0.;iYjI+|sZzn'U R0%p>peoqֵ^&6uλizc@y 6 'o֫h{L0AZ,U+sMjĕb>ئA~xũTL߳i&8#Dwg =iVadmÜ/[hp= H}{zʻ=kJ$Qj `Toj QSQMFJIߞjJ8TV|v@]:0 Z]|é9%\z#|coZwcxXg* K I*rfTA2*u\ d8Y+K)y*8̏zqQrڄ6YKX3>#Y)㯡,* W#5hrEu+Gn2U$H c?j1+* dzU+$+[Fmn"V"Jh<+S6rm=Z[)YTGn%Y_p-!RC9n|}Heޡ _!n֣[o.3Kt"oe)x̄Z##y#Cdݸӵ ??xzѪHZXdȮIancB2[m^Raw氾$d'e'Ls . Cm _CR$J܃"c{\lpjkY}*ݬG³h}4o 2KuK=Z9BInMh3JNhOX}#d`P*ts9S']_"ee>!FnI$1ܯ*>08jnNW;X8v-%SaϿʷ1\k2"@5s3CaOJlnˆH~NҖhCA2 FCݰ*Kr:NsV GOJ"aPO[Zy1zxb(>o iVdS3dӛMNa)ZpNl{&\6qYjOPJDDqՕϜ<T~b4@]2pA=kGO[xuP<e0FPqUm*1(20x{Է@>Tf82pcXw&kBV5Ec+Kp=KH$Ji ֬BQL>Fzy<6*_Zr9֤K/m`:SKgTc$jQ КWSY:ѐm0sYڬҳo8PԦD|)AǽGgdQzPSIo 0:# HRlqk_&*_ʁq@ZUSp"jflڛ3‘v7쾔]K1 p܊Uc֞c#i!3a`Q,o|pq1PޣF~Q5 r#qm1 @Xr*}#dMD*MBZ| f:Lgۭ]h{ȈG5$pTƤֶ4wvE#z]-iVQT,#^}گyg>\EW68\Z7(n#hI^K mnP ᫝6-2!^pkIV& %GqSC뚷8I=YIb#F*UقT)X$cySOVO)CӡG+2ld>in9;-G-KqHױg0G%gtJqNc1w+M /$ܖR)琳ڙuVF~e?+ԓ[$9qI2lD\s*@0So^9āy4hDrEӣcuahu@rҟt<`ҳ-,⹸a8 IlI0,sYZ+MFO̫?-;KtKz%Pptȧu;/gE!;qQ RjWd 0>SPAFeZ͝ @a׵Pm΂4 کj0y'VE?(ޝ ^CAG9O?%UϽXO8 "sO8w4QbQQGcCb`WJ1`GUb$ Ny8aE@2H犎r8@2qV,3@+ ZwmaVmXS0d>qҒX0ˆg5Va匄0+>_H<QTd Xu>Օ$Qy25^=҆=g:R'9F+UJe"$P2l%5W-RQEGs wv"9!+0'D2%Z$xEjņbvT;}"xFA KbE84 cF> ӥ#e?HX>"+ZUըyLiV ` `Ԯ ;С70DzcF@#%AHHvC0Ek$I3 S;㰥g9gpaڍ2hRFYWj2"!H9 Vl0iG֮j6<' 9:T( AR;®=#T.<'_SӼٷ1|+n4%JLq֐R[v[FmAl+yvA* 7ll*- } ;7S@F2\ zT1cqB`|fW3N.^NXaTGjd-P7j#L/̩5΃25V\Ԇ,9FXVTUpKqҤ%^(¯AK#4 'ڠ-;3CQ[)g?*zX;$zOn֝nbFJxI#zYg}88=j+pZvt$ƍ# g{MJBjAB6I8UoNÓJȱ,( Lz=!FW`sSq 7|;(qU4N^>V#Bᣓibޣ l`㿽$?ؤOUFmtojGKc[*RH M쓉Wl\k8WvRQEQKEQEZ> S=Y#ZK`[raOg_HQ;If ; }q\"pA뎵H}:;*J'^ACP!,\U=W丹4ŐyMnG7\}jM>XgRC3,CnNd d [[wUP9D$6GU2Hف6wڞ jŽwh`P3 9_Zb$  -Զ%T9AC=Gz[L*1UwI9%]s^ALerr2zAq@U8 j L6QU.bd<iLm9fT Un.W|s2F1H1v7>T:7N1]NN]M][rqz gH"QKEQEQEԩ8 t=)CRqY6%d1> W?},dny @cXs!Pȍ<[zyb;@> רQcBJFb=]T~B T&$#r=%dR;eeR_"{_: ~v'Ke[FznvڨʂNioZ;5L*8aӮ-Jp {4s#ynTLr9<5ZYWb95^IVFb oo fgךIpx\~jl =q.L{ av71XE7Y+2@sj/z;sW-*ޔΓ>'&I:yivK+Uq 84F8d*ښ(4*$Mjgsn TY7 c u@sڜ$1ș_caӵ>1Xjͩ;[}*Źf4*p#֠юTuUi:1$~:`_5K`rGZ޶![Bh[roA$s&_KRTQEQKEQE E*ȅXf,I2d#Yc !w-fe,YڻtZ%wluvĆڸ#cOl`+d8GMpC{b ¢C( =i@(ĠֈJW3V58̰98O>5NX ^yama#Eتp"nV%`OcZYF,LaݲE }ф^MSp? 9㟣+dT^9%^OL arpsBHn$+TE;TkTy0T g5l.Py+4݌l$TH8I~lPW8/REXc;@'N. rVǝ UJ8QGzUFyerц<Y24HλEfI R*ViyVs 95cct5 ShFP~U KLUit* ,#c85]!D$z{G(QUݧr"PjTi2HA0̉_k3L[,#I7ŽA5dB#3rEhˤEg:gf_'֮Ia Zʊc٨=]+?HG*i G,[v%$J+GcZgTbFV#Τg$ ,Ӯ(Qޝ,\aS$*]A^rLUʜFRG NUcIuldTZ|̄nldtXy8l_-qңn>{Toi(MF?(1N;ybdԛU;} Y'F#j6 4ôC:ېr :FA84F{qQ~9ڨ H9:ivvwxe)"++4sBTڝs*\OZ[VXA#b 2.ZܴrHZ! p#֠Ga*m/-"f2&Y^9VkD3sT8F$931gAD+:;Vys "R; =i73ڪGQS{ = gQآaP:TR]Fәj4Ynl)w#rIF^CҼi ܗUrQR!S#OJe?Զ=[{Qq(]N T:F@)74}G}V)Dlzz5f ! @ON㱫LY#,NT%GsW$1J< 9$Tmf˒ŏzn|y$5cn}V#$l֭yv?!ÆH<{6 A8>HQpBԒ iOSd $i꬀M1NWeH2+a:Y# .;ȯvS6#cPE41<~zTDIg=iЯ/zӱ%`}}x vW`[P# S{V(6H< T,|- l.<6j6q^*c| zIǥG(CdПjHfKIVC HiaY 2Ӭ$ AS"!2FA:0Gb)iph((((M\i~kG :w*\1ZL~C fS-ӤvGT=j S٨; 8GS""Xgey[k<л9q dmjђ @Wxl*m؝w#C`}*HaSqocLHr cUҘ$0zVnȄqƽO= %n1(c,%#‹hvj{8@n㓷 sV.C NI1ӭO{*G ?Eh+m:+Brj(EJO̘ V!fR RH@;Q`5>am;p#A" :TNʂW4#-VmDxeWz׍BGG5FG95dRsNREQE-RQEQ\aQ&9pU sX HʞxT;l-dо}MQ x F@sZ x s>3or>cUInH KoJb*im\QdOY+E]Ɏ͗쑶dUz \EVQ֫.RL#g锐+!=I޵zؒ=ŠnIBEs 0*h9&fY|"\F6$vRJdM"@+;I88aQ:UIN(ˎګ RL2*;uqTbp,O]ҐN;5a*\p=GJ8;WUB{5JZcȤ)H_0'c1 DeB:5,Wk9ٌ?z{#9 ;zG/;x"ѝq)}j2LD=7<5=fbI\cMKI$c\(s\jXs0* qg_8Fbz -1'!% 水]x?eڳ׸Ve$㜂J-1k`q隈,J&*'Fvh'2bȹ=8oeܼ0੥ /Mq240mFu^\ B0A TEaiea&_Tz5QE*Jc5h\ܣ>fBwCޯ5#r Wx>ndE@)8B*W< wqV`Jb0JX QW#JP}j'(Hb ^Di%:(J((̋ojZSkh]n8ϥAvEpjX$ "RZ,[Q>ng-aaޟ2zo .0W ״+čۏƶ%.IJqֆ#]!]Ŭpr(by,">)%Cg?-4uO\u#ދsx$EIzy1DEܡ$f[U;}rEi(_ju-e! Gl(9>S9W5,mW?n?e8 ߝ,9S~g# Ah;GԯYzMGs221FRf)tF9Fvc@GskdĂt vskgUr@8JntnȫKu*991cu+ߵ$['"Q\'; N$6䜂"HB쁰vVKy3߂՜Hexk/Vgelz5V7.)֪Ddk-JF$eh=MXOJyvk X+)^meai7R9`:Tt.y#Zty|9+~b)83na[iƠ([B\cH0v:N((((1-{At=5 yOo!n gڸy#o8rrCdR] #*mkF=+SEoo']6<3iQFN#]43i.M[EYM*?w8'VYRIG 0RH#+``cJ40Q֖9v>2Ag4]98 I77Ƙ4ܳ;Vd)r:v}/1 psWmt,f !1j'‡CӨ^Ih bS 2kd͖ zzK2ln[u]Ls՘%4YLt4m>>Vcd*^7kgՍ-Ea="p9)/drV?*SVwLkoݽ+1 DnN QݲFެH`ެ 1+aG$xu*xAzӕ\&ݩyFF"늒jqCM$.SZKKPҤ-~N+et"67KsOT\ys A]8/g1]Bq¦kYJv2 \{;'v1Z%[xUu ˌ u;5I=4^@|֯S308UEk&cGIkݰZ-RUbUnT9e?_nՀ r+.>}:chYP:pKN(((!sV(ug-m&5o)xlV]YգұuKp{Ywֆ9rpGoJs,23T%da{U)dEF`N~6S8FbȫzA)`qShs{Vj\qT$j\;0f!UTd_,)0~SeKD V [yvs銂pv\TQn7Zg]a6*Kظ+j}H*8QꪨoqCh vm ޠGfm-?m1Vt_|+圆_|Ժ|OA#lwx4dU[w:!C#mǘO+"'X26"`qySQ!"NUT]oR ! y=1cq~2$!D,˞J*CmҒc+p)=Wʻ8lP*#N ӽtjaWaU UmF+-ى2j!4N~_AQ+&s O2zz dͽK|)>ff͹rH=* pHodV輶6 ɂjZ +b\\>^A8n95&T5IXb0I^f)ecc)cU-7OO}X*YIp1ʢn q2k[aG2&vmbSYXuY!*Չ# ZUr(((W?U}UKA^M"#$sW.aYHF$^G"oXabwV,諓58$*k0ujF u皡kB1#[yLWSb:qV7užmD:F3K*sޔ[y_>2J r 71leaTӃ •7 z!` l 3A%TR\Ojα v܎E:M $*Hɽ esQ]G fAF= [{1W5<|@O,S]ۺ5Zo0("NEVdh00a/Pc &=,Q;̕ľNÁ֝ yIVL,q@ɫvvd܎blǴGSj#ʏe%#w55BƟm*Qs߁W|?I.0mUA;*.n9,8=9Q\iA@>*8>l4`ЯF1v1֔DI9+H8={TnjG;K_R(7m,I3Fyےxd}ͨ+& 3VPi/F]r9Զ/z:U륆uΠZpa8\US!jxR%H@:bCZ"XF>QڣfڥGjsIE jM3OҥrҠIZ=袊((HDHEWKRM̎j)YUסςX>G#|LN=ڊ999TdYs#`Ov&(U y9\ WݼƒȪj]!Q FZL5mq R wRj r_3VS6Tie$0gq84ٝZnUWfKŸmdPbmaޠbdUWDl>E@)g:-q'Eeps֥߮0AU$\[&5l7$[=Wb=LY۪ЫF#;Ajy218n*/PqG"˷p(h|ddEv3jiW 2EIp.e0m4ĤG i,\4mKV*9EidV {ԴQEQE+:k,)Qx}]C+ySuyST+;/ʭ'W/![cc-ى*ORz{#;6f^H: :aqv$X*7SY zL)!ơts$Q Xa&'),;#IUǪԞW*7QV qm;>3WoPaT }n35Nh pQccya㹫 ![F榒E1**2V X7+KRf-=sW*̼I$5"ÓR\1wGPi9JW9B+tPc-⟟=rcVyX-ǥUdVns٫:XʜU7992wdH6WlЁM6EGF 2HNs:mOnm` b:R@q.vUelH#YbpyrUxDdB{ e:o\g#Ku2"#H Ҥ eg9bcު^\ݪ!;@z=Br&ʣ,reUDu(aX7*Pb w]+pqޭެcsm²=*m#%XZR-`ʕZ҃ZSxmH}裮*ړ'd'VFMĊ9_UOY(Vgh$7̿ޫVWkw/ no!,>W^= Xn#8#--Vd9WBŸCXyn}*9UĎV*ͳ0vf @rjΞ',-ެ8Y9+ 4pƤ`&Z%SV vy5J o=y5x[^T=N@bd*4_xxqNp+M'ڵmf;&5dH,#QmOO`5 b*A!H.Da0vu Oyޤ%bby;"$̽z֡ItFGQyJ`~i̊$޼{V!& #=޽ښœzW6EG<-5c fSd⫤EHڡT*8b?Oè&{TC'=KDIsOWqҬ A.y Ԣ%oޮ;ԻUvC;U!%,xuNbI!;+;j$N<+H5 B~WARV_O :գy8>-rk@樅&4b29#k8#.Kn~4IQGMT\;2IOʲ.C+SV=H1*yfڵģg9ɂ6lxoOk}K.֦Vַk^MG4c ' g\,#YNrٯUY >Jڮwj( ?I !az(Z\[r7 >nYxkRsgL;I'挫[~*MUёp#=ԞZKBU9\5Z6h' }=2a,*m862nR[0!t|px&c/p÷%)BCzz֬nã w "]R^Aov re}FJ&qQ֩\q WuYC޹,Y7|~Ͼri_֖6`N͂**e$vdkt.ٲV! 1pXqZҨG7"u WcF9e 8VFRTng>D*1%IPcs~st1\urC51)yUbIi%$~aU4,)ʱQ^9WSM0(et Ăf,V y&2DnnQ]sE r)ɭ7Wsidҙn9UPӌYd5Rh̆F9PjҼX V Gc!@튩3n=*c*B.E_P*O=G8‰q،K6m;ouK8=IXtS?5WdP!_ 7sH G|4+F_bZ"I-5`Em_QI M~2hd/'L&aVrsH¬q:+^3 &QB޾U9.[YU V$XEhiIȫ9,Z(Z((((JJ)h)h G|VN6p>aGQU*PG|V*#VJ#RLdo `qIiI~pPC[#FJm=)Ohe޸'zf61`'013={RZyJ{Q Bcp} ) B֔FB!@ e$bf۸PFIhɌlP;dwG*{b+ @'@ }cҎ5X] ,,u'YЏ⩢?s#G*v/R%̈ R;PE܂B "1PEpS9 ң(zLRT58ƥF_:9>JOQUh'2̈A/ lzUQ9s[NT$fAxeV?\ը.BXtvLYJzecw(ܤLfffi̝⵴<8-hy*8*jUZ((((Z((((a]L嘆 8YwHvvk5 ܃Z#c( 6a巖\9[y$ sD0# ń#'[9ᰟVʀd >Qod@+ vr櫦VEf!A?F]skkK\@֍\J((((((((8 >r;ۇ _]bha QӶjo) vFFS3r908{0 O}YKW?rf *on =)nvFqSM1Q52c`W%pH* 918CpaUBZ [\үAkp!I'k?8@5bky0[p{֭nX|FRX́F[eg9E%%%REQEQEQEQEQEQEP; 69IH|{3N>-[ʞ~9X *<f'e?+H=Fi9SsI#I?V8`7lSU#aM>Ol8F~c"8ҔD`Q)%EwFO_)~i$Ddҍ=1Fpz 6G 7 0 >x&$5-J`#*Oj{3+{+8 d VŐ q8PTϛV 9%,ipSc难%$80>\I-ʸ Z^HU$Pa o'F ^fRkdr2GzҮU;QEQE%REQEQE-RQKEQIU#s2~X&O?|YeЄ@sJT'B75IvH^ To⌇ 1cym!Xw=3Yl Q!SGilOCܴmDaEHH!ۊv:T<I;Fz(Gh#h>R?B]=OIHFxniṦN[) NxdEbPlwxdT*Ws5C~u*]N@`@ +O7W 4 LiʙՔBH9n4vQ1GO9wO *wO68=zLQ`*<>> :i *7D$jɻ) ,I3j4xƶkH.>FLeVehRJPIYbA`zR淝>$O+C!Fڤ8Lx[i )!ɜoQUED rH)d* GCڠCy.;ʩ`Z  ۭYmZp72~oOɌ*;QeEV9 uo !@\+nHVc6.S}:şpikr9?ڧz< >upޟiAD=jeҦ*,=ԫa$8id<ٰQTK U.zUv]vGW[y=B ϥHdzMН~-9/K- w\yd=jK[,,Na؜SK|Ѿd0(]05N> (Pwu>F]yws+* ^{)aMXܸ@kL2yF5p0j9VI#<uI]d ChbQg +J88Sۏ7mWGnd AI5rDw#r Ok9UHpjx&2"8vI-`ZK,|f@:fs$ud\F<cPa$Gv=[E*DO{v$ d-=Z-oxoYؖ+?Fᑝ#Q[5ف=xs wIjdPqWn&ި2$?Jkt`z`u D %>sVxM/;z֭"6P(Ώ[ 'OHd{{V ̣|rұne7T,!dޘu SӽWf ۽k?Y'^o,}8(*Rwi#rYDNKcT5I(1Z9&@#O&$` BEKgrp}OXqpjvEsP) 9$@lWɵUO$r*廀W O^c^A8H3|ЉW{c82&~\[9tzMh隍6.Gz-ZBH5^H]dgrNjޢ-B6=rDjѠ`33vzWKI+`@r~nqZWi(-:UK@ =N #{[ݑӱ[{+ \'ޱmnJ0Sk2˿ 9c,K08"- `Ԁ>r.#*qY}k!i`3(\3Y̆H댎 )Ig!7@UHy6Įoj1HmWah `X84O V-6KY+RI˸ qnexDSneqOJll$2##̋ [ F֩ɲ9@ssެdp9V D }Ÿ8 ;f8푊̮Ug88aa [Iɵ@$4I1٩͛*0y ;Z}&΢#6b ě;gD)qmѓ5cTFT\v 4' j:V( ^lzgsYv{n;!KWb:S5-HJ"1QLGr;#+FGSluY ѫ/vSm53dPW*0ukVO\pE_3jF%3+6O {5Jk+8 =i|s"[`{*ħ&$U\u4VV%H a8RuQEFX1 U%p19 P,99Lc?7ξS#hNïqL[/oޜ+!N{j&z;}S㊶W?SjBfj.*VT^_ݪ0*T֬njT¤|$a"rƪ3kHvђR[eu oy{T3FZ#;Sv6=役|}h<#icgFza^_dwI4R@~뷩4>"Iv9Ƕh0έ 6W{kdEw|ox##s(KqVmtԎ5glɷ=i[iphey5v =1a}-IAҖO%B/VP=YGtwʐ^fwG gT d7Q׭jE+HkB4f*νzN(r:qVS =c-xq޲bsrС,~`G."-'~^"źN*R2sR*B?sp`N? & yȎ=̶P28X9h=[HC%R R 2fc8gϦj+440gV3zjNѾX:=di԰J7ev(\K V!pA!ȓxiyxV% 0cEEr8PTpyPNM6495b)Z8nZ\:XPHhnDV $ * *KC g55[`6Vs?$Jhqkcu>՛qi<`XKnp 2[G Ӑl·$w`[z#;['$\qޮFؖ4e*yqS[\ynlX akBq2d.151lҥyN6}Z@0 <6r2k?RE+jUew5wg.+ rc\6y5̑9P<^R7g:IE\Twe$HcIuUV$TbNr}Z[ɒ׵>+{bU@1ަ IW$gU82Jv7je5*XA+BJx$---5pd`Mu 1Y7o\`FGl6@3@A"#AkrMy=n)r4qr:Wje:99J^0Al\ c@bݐ8z50AҬ#*\vł֭E Et'# Q/inSR9sa|T3 H>UO%)REw{ԶKgyp{ӡqz1C`d`5+o((GC{8+LYČ$W:w֪ xZunPսjߕyOצFj ș+sхg_)5QHU)4HEa^ACy1B%h|X[? "om~X(O+6۱#ҖSh L:>zԖB|MKk4`|fcMg;9I39,ID.I9LF)R7np*Fn1L\~AɥqBROҡo,~sNK#;77iOmNKc;I58ԕ^ 8L`̦6({Xc4,R{4[O5.ϧU2RyM-d*KoӒxcd%eiXHZ`e*܂~c/`uHf!FcD]Pl ɮFc F1[@(h=)ij7F} Aym Cj& VP2[MqOW9#+X䶜_QRK+c1)Q(8aV!@Ud!*B,~&Q]Zͺ@GQ[zS.vN 6xGK>fNVaH-r},pr= ⥷H݁NJ|6 30=( AE--Ct"#*3iuVFv*`sޱ`ۆst\uHܶZڃ#کy G̀*W{#¡{Y^Tv=k:;$ch qƭvD3,8hGi.66fP[!v@/(+bd zbZѶ|ɵLVoY@# HP^={2U9 ’sNT!Sh~B I R;m@#H[ZHX4FH;VʉVRýS&FT#T(\T6Iջr@V'18$e@O*ҢR2H逎HR>P#zg̯|X.̎sA29f W'.wp*k6hb$硩f?㱩orZֲԖ;Ќ([f, t9Z7ȷ  8>EoֵEh&\8ϡEW- чQQ\Er\sٽ*'pIAS؊mBO{RYXGlە8ކiZ0mͿY- WJu((p#ޫZ9n `:S&PpȮws#[ Hpj>>\3Һ\`m1ZMM%aG#n-UБU\(fAGY̻IN7 )֝ySzc Wb%B1UiܬVV"L*,h\nOH]IޘjU֣ NN60XgQ(((((((Z(yhD)DzR6ZB;hVmXTXN@ҖNB 7^f${=/|G9kPɹʞ7w ҙqȤSAI >12H'jI՝ZUST.j;/'b[~?򥲶\W6WIoBr?՜]?+,Kf>ҭ*1}z FkJvDHF(98:[7CrqV/c v Ms'wvs3ƫC9?OR^6q >^ZQmÃҰ;"7첃5p ]T!X~nXJִhR\ZÆ _Y\Vh'LςSi~zwSҰD_zrf,Imm9 W=ĬF2I5ȽXa#?@ڵl$o&0Ei}{.pg8i%D#44ǧi%gOaQpF;ZHFV VŽ&X\:R pcڝݲ= 7Y:bGf/G"̓vWGEQEQEQIEQIEQE-QEQEQIEQEQEPzPhDr^04T\biS/=C[5͛Fy~ajZkfC$wz-n0`r %QV!cuV$ŽHWYH1݊k,s>*YqXSnW}DR'QH)n dJrW%TMg;KqTi8[E^[EL!Vn,͌[o>a#Sҋxim;n{B"K}QWezVʍdaq[V-QEQEQEQEQEQERQE-QEQE%QEQEQKEQEgjwq4@ tiKt| GQY'd@ _z˷GF lsFk*;mgiէԓ*z_PVGzRyEQ:Q.vQ[EÀȨK0Z:L 0Ml>o$!,xS60gֳkxsڮi`y@4|yҮikqs*KlyjGLbƤt\@@GLT"m 8/pj&.ǡ"rUY2'Tkc.ծ袊((Z(Z(()((J((((J)k ‡~5ϸ"En̈Щ|V<6W.mk>H%eC5JUO֫$S"Y=MWX獁TU9U=빲b֑0B]͋i3]fM3HzB21QO9rrsQңFNy[G'[G&C;imQZ=\:̸ rTwJk]7oQ[-QEQEQEQEQEQEQEQEQE%QEQEQKERE% PE5\a4}r)U TEAhTTR@մSC#9ڤW* t89⦇n*cb 2.NQEQE5]JR2:摕X`aM^"1$+ANөh()((J((((((((()h(Z((J(udf?@9>ڗ#LrsҨjvCJҭZGz((((()(()h(()((()(((($/{W Zd\$-ȮbOInfBNy ?뢮)(Z(((J(()hZ)((((Z()hZ)h)(JJ(ZJZ)h(()h((()()((()h()(ZZ(JJ)ih(((()(Z()()hJ(J(EQEQEQKIE%-QE%QE%QKERE%REQIE%-QE%RIIE-QKE%REQEQEQEQEQEQE-QKIEQIE%-QEQERKIE%QERQEQKE-RRQKERIIE-RRKE%%RQKKEQIEQKEQE%RIIERE%QIEQIE--QE%QEQEQKE-QIEQERQE-RQE-RQE-QEQE%RIERQERQERQE-RQEQE-QKIEQEREQKEQKEQIERQKKEQIEQEQERRQEQEQEQEQEQIKE-%QKEQEQIERRQEQEQE--RQEQEREQIEQIEQIEQE-RQERQIEQIEQERQIEQERE%%QIEQIKEQKIE%-QIEQIEQIEQIIEQEQERQEQEQE--RQIEQIEQIKEQERQIERERE%QEQE%QIE--QEQEQKERRKIERE%RERE%%RRQKKERQE-RQE-RREQIE-RQE--RQE.i\OAu-QEQEQKEQERQEQKERE'zJZ((JZ(Z)hJ((()hJ(t;Rv((((J()(()h)ih(ZJ))hZZ)(J()(J((((Z)i((()h)h)ih(Z))()((((Z()(((J)h)h(Z()(JJ(ZZ(Z(Z))(((Z())(((Z(J)h)()ih(t(J((JJ((J)ihJJ(((((Z(((((J(()ih(((J(()h)h((((()((((J(J((Z(((QI҂@4QEQKEQEQEQERQEQKE-%QE%-QE-%QEQEQEQIIERQEQKERRKIE%Oz)Ao})'5&8&(J(((((()(((ZZZ(JJ(Z(Z(Z()(2yRc)(((((((J)(JJ(ZZ))()h()hJ))h()2)((J(((()h)i(JJ)ih((JJ((J(JJ((QC CFdMN"\"XԄqO'<E\4iiԴQEUӘ J OzaԝpکM桃Q24~=DVjۊ((Z((()h((J)()(((J(MS(ZS-=p=꥓`S}jKO^piEQ e=#8g =A*^pzS`OR}E4C| kq`T7O߽THwN'g!ZȂ""gfB?r*XgRw@zCo5y1/Zo.j/\%RE%RERKERQE-RQERRKERQIEQERRKEQKERY8MI `A.R;E|1TA:#ޫ\4sCP췑 Y^[FNTb3 6AQ^B# 85~PXQE&Eu"qȩVDa%O*`~u:)(((J(JZ()((JZ(((Ƿi PrNd*sQD*JwmEu vTop{ґVHH֘HpJ5e?m LeHN\pZޱ6硩OQiEtM jA.\+5(Fp\ŪΒÁeGӐ2yZ:\˲Qa'U ʨRZGG+gVr*8+A|>ԴZ()(()h(ZZ))()(J(JZ(xT '\6ʄ9#cE oZj{0yJ1E¯cLr@¯\Ы+KdKlDXJX̌M2Ky 휁uFf'#\B=ie2\H26.tˤNh(X7< ӑDZԷCזS24~TEhjǑZ+$^j~u$Be{fHq$eӧ8/"c!_DV5SNIu #;lN=->&rJŞqޙi9bpfm::DcOou)<+ r}:u(rO<8+D QEQKEQERE%QEQKE%%RE%REQIEQKKEQIIT[x1#jͼDjnN8bC*TE74<(O0^F>V5S4OCNdAMǓ9`xpH=3YXy7֪,OjsOl1KvZvڂWC[:N !Yk$ca-2Qn&i6yIV΁h yZzEnOЭJEQEQE%REQEQE-REQE-QEREQE;JLĞz%}ē& 19W{J/5sKhTv~5kL(Fn1Ĩ2j\8#W U$Nd8j̎N9 )Dc lNd5sꌜHIM$*VDu$ޒ$ +az#nB+ zիGF/ zKɒlY:$fsY\CUG$u5@jyU4LTP d`ApwqUҲ('qWLF=q9rFzsN-K/iI I0o%f=ԩk-|d}X$߫od)څbg8=H Z q4wpzqS$2\F87DYҮaLVPwzVq(+vGie-4lZ}>Uˀ3&QƒU#=i'3E}Ҙb$OKĄ<*2⥒TwHqR_8#=E89r8<()h()hZ()((J(( ?룮JJ)ih)()h((J(()h(JJ)hZJ(J((()h()()((J((JZ)h(()ih)hJZ)i(JJ)ihZ()()(()i(()h)((((()i)h)(Z((Z()(J(Z((J(JJJ)iih(Z))((ZJ()h((J(Z()h(_QEQKEQE%RIEQEREQEQEQKIE%-QEQIE%REQEQKEQE%REQEQEQEQKERIEQERRQKERE%QEQEQE%QEQKEQEQIEQEQKIERRQKERE%REQERQEQKEQE%QKKEQKIIJZZ())h(J()i(J(()(J)ih)h)h(((J(Z(ZZ))(J(((Z()((ZZ)(J)ih((ZZ(Z((J()iih(J(J)(()h)hJZ)h((((ZJ(J()hJ()hZJ))h(J()((Z((J)(()h(((()((J(Z()(()hJ(((()hZ))()h(JJ()h(Z))(J))hZ())i)i)h)(()hJ((()())h)hZ()h(((Z(((Z((((JJ)hZ(JJ(JZ)i()(JJ)h()((JZ()()hJJ)h(Z(%%--QEQKKE%%QEQERIIE-QIE-RQEQE-%RKEQKEQE%QE-RQEQEQEQERQIEQEQKKE%%RERQIKE-%QKEQE%-RQE-QKEQE%RRKERQE-RRKIEQIERE%QIKE-QIE%-RQEQEQKEQKIߊ{RREQIKEQKEQEQIEQE-RRRKIEQE-QEQIEQKKEQE%QEQIEQIEQE-REREb(()h(()(JJ)h(Z(()h))h(Z((()h)h((JJ)ihJ()ih(Z((J(J)iii((JZ(()h((Z)hJ(((()()()(JJ((()h)))ih)()h)ih(J()hZ(J)ih(Z(JJ(J(((J(J(()h((Z(JZ(Z)hJ)())h)(((()h(Z)i()((J)(()hZJ(J()h((J(J(((Z((LyREQE-RQEQKEQERE%QE%QKERE%REQIE%-RQE-RQE--&s%% Z(((QEQKEQKEQKERQEQKEQKE%RQIKE-%QERE%RE%hE)ihJ(;KEQEQEQE-RQERIIEQEQEQKEQIEQIEQEuQޖZ(ZJ(J(((()hZJ(()h(Z()i)i)i(J(MB~~\g:KEQEQKEQKE-%%%QEQERIIEQERQEQEQEQERE%QEQIEQEQERE%-QGj)>g֊Z(((()(()ih((())h(Z+ ?룮()h)h(JZ)h((J(((ZJ(J((Z(((ZJ))h(J(J(Z()((J((J((Z()ih)h(Z(()(()hJ(ZZ((ZZ(Z()ih))()h(Z)(()ih((J(JZ)h()h((Z((JJ)hZZ(Z()(JZ)i(Z((J(ZZ(((()((Z()((ZZ()()hZ(Z(JZ((ZZ)((Z))()h)h()hZ))(J)(()h((JJ((((Z())h)hZ(((Z(JZ)h()h(Z(Z)(((Z(((ZJ)(()h(ZZ(JJ(Z()()hJJ(((J()ihJ(((ZJ))h)i()h(Z((J()hJ))hJJ(((J)()(Z(Z)i(J)h(ZZ))()(J(JZJ))hZZ)(J(Z(J(Z(()(RRIERQEQEQERRE%QERQIEQIEQE-QEQEQIEQE-QKEQE%QEQEQE%QIE-RRE%RRQKE%REQE%-QE~4~4~4QKKE%RQERQE--RQERQE--RQEQKERQE--QEQEQEQKKE%%QE-RQE--RIE--%%QIEQIKE-QIEQIEQIEQIERRQKERQERRKIEQIE%REQEQKEQE%QIEQEQIEQEQKEQEQE%RE%RERRQKKފJJ((Z)i((JJ)h)hJJ)ih(J()h(EQKIE%-QE-RQE-%RQE-RQEQEQEQIEQERQE-QKEQEQEQIEQERRKIERRsQKKKE%%%QEQIE-RQE-QKEQEREQEREQE-RE%RIIE-QKE%QIE-QEQE%-%-QEQIEQE-QERQEQEQEQIEQIKE-RRQE--QEQE%RQEQKEQE%RQIKE-%RQIEQEQKERQEQKEQEQEf)h(()hZJ((ZJ((()()h()(((i8e' ~jZ_ŒsHFXQjZZ(J()h(J((Z((((ZJ(J)(((J(uZ(()h(()h))()hJ(J(JZ)h(((J(JJJ(((ZJ((()()())h)()()(()h(Z(Z))(J()(J(J()hZ((J(Z((()(Z(J((Z(Z)h())(())h)hZZ(JJ)ihJ(Z(ZJ(J)((()iih)h(()h(J))h(J()h)hZ)i(J(JJ()hZ(JJ)OJ()JQIEQE-QEQEQEQEQERQE-%RE%RIIE-RRKIEQE- IޓRERRQKKIHzR((KKEQIIE---QE%QE-QE%RQIEQIE%QKE-QERE%-%Q@)ih(ZCڐZ()())hJJ)ih))()h)h()h((JNڊZ()(ZZ()h(JJ)h((JZ)i((J(J ?룮J(((ZJUZrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2QIEQIEQEQJJuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQLS()h)hJ)VNS(((((((((((((((e2())((ZU/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES)(((J(iW9iuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQL:()hJ(iVuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQLTtQEQE-RQKERҭ*үzu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETuGEt()hUZUSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2LJ(()h)ViNS(((((((((((((((eGQKKE%QERQKEQJNZu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETuGKEREQIEQEJSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEG*2@jY@žF%>u\"ZЉ3PġIǽE,ѣSƫ\]FS\DH'ڡFFpITVljSڪ- Oj\(1FMG,LUAUS8ƙ$*Io>Ptxj.@S vr0=*5d;"r׭DdmR:,6>Z2QCgҢG*˜tkuE]R=7(>=Z\..?zY Wp)d=Uc mU1g_pOQ׳[xpYXb- Ir:_*y#]IQՏ3 rOE7N-vv`9ZUVQEQEQEQEQEQEQEPC%҂X*Mج][s2BgVe^FHzʫ/:w c'>)% MH'<*KJHOztCGnPvk3y͐;Ua#o05Xރ5$ltҤ;\ұFe rŘ ԪAo,H)+vxR1OHvhO PIkI` ,V#1(}HAT[sDs*)I; SH2Ȭ護>[ij!`p䏥Q9#%})mM֮ nC}iᏭ<9Oǣu?j,:'w7 pZ@Dp}j1( j'XאJ'QH;EBn oREDn#l`V!$cڥt3cK2GJXGQ}GJzVD A qW6G%=3Wkb()h(((((1׊ȻĊ ߀?PZXL]=BH$&da{jĩn |*]K'Z)nB8b7j9n. g$`Jqږ((((((((((((((GZ((GJ:Q<#4dgJ(1*920#4BdMGT95mb^JxRO֤UUT!%.}8*RөhAҎ٢(((()((((J((Z(Z(((v}h'8h((Z(((((()h()h(Z()()((((((((((J3E-RQE-QEQEQERQE-QEQE%RE%QEQIEQIEQEQEQETi.cp~`z@O84Zi|;F**9(pjj(Z()((((((((()()((()hn,>`Zc9>޴)h((JZJ))h(((((J(((((((((d TmA隂IVz((((((((((((((((((((Z(j W+3Rܓ"+yWJ槭:EQEQEQEQEQFh((Z()((((Z(Z((J((Å~Êǘ@8C׊vᏥKW*%RE%REQEQEQEQEQEQEQEQEQKEQEQERQEQEQEQIh()CI(@rJG:u--QERQE-QEQEQERQE-QEQEQEQEQEQEQEQEQEQEQE%QEQEQA4(J((Z()()((((((((Z((J()h(e ]n.U93ɩc@%eTpqҭ&ҧ$ n,@;Ң$mT$4Yv;c)lY@# *?(+\B$n*yҌ(F=85V14)=N8cE$|T>eU|aI@ =K>o:BcR%r\[S%yHFsVwl{jy[aX6nWR3 !u>PK)$3HO(>%9_Ɛ7ypѧOLmȼNTӦt 4D:va4JcݒYq.!K|xhʎM>r$r9ekt =U$o-KǭNnBÒ e NÞZZ崄惔'$- 75I8C"Mkqh"lKEC$[yQԊ1e=@ HQ 1kiUduMe<;ɒeYGV4ZSӭx Q}AJR8<ֱ!b 栐mUX8'>gLDQo6RFo= jhX66{:2<'z$mݑk`.zփ2aQ+.@5 r^!*q7+OjOҥRVDK!o1@rI#+p>n=RĒ>QU?N?ei";"-̅b l̲+ResҨNI 5%mn߫uPy>0%Zo~y˞kZ%-hFA=j@M&̋(֪pj Z*!b'\Z"<78ܿKyJ I^m%rӧ4ַbTDYQw:T&DmZG`2)ݰ};QZKP1Tgݽw'J Ԛy,WztKf>9;;Lq`3TKE˱@4prԙߍj˂IU:U7ڧ֣,CP,'*#pO#bX dw9b>^1LfFʪCP3A'Bf F R;*]ǠX2ʖ?Y2 A4)$6ύӖv*_=HL< nO&LVڧYxEx<®%#Et^Q|"F-;d#fKK⨴en#џVn0cnG\19jmC8vZJHm9*r1ïoZNX22?(8WYeɫ%# m5BMB]`vg>'APqZb@ ?0ҴͮY#ʒ9#kïˑ L貞:Al3Y؏g"ۍؒfaZc 8ZZ#s*F9c:EAz+bhϷt;nl#-.}iÿW{V@JH&;{YWW\ֳtkTyn[c`r;D#78H@֞!NYۈllBsZ6EdV\#95reHjtPjdtU1Q\1o/jհ7);z!|ʠ`s޳"e CT.A=)"*8Z.NkvA0s kBnzՍʑP )\D sBzaYIlꌅ,3IrAC pYgw(1]FIRܠ)]Ρ/*Չ$Ո8.͓WWh$eBBSԴU\'`[b'$QQsyPzԬW=i5 Tڣ0}7S7mrz}+.4L5ykBR2TX%Οrlwd#2hҷ[[n=5Zܼ#!f=t8DH $O[ԦF„SS;gi 4J)OZznQN:֞Ƿ p84! C)]B+,UIlR+%FTR=L""rm`w46T'$DSyTZYܯތQV:hrBk,@dliZw*2JuoGv(ʱ~>SAF-D23Ys}*&ؓǜfKR=iu8#֒H32zS$'dU4y$1olWәs3{V zZ1cv/'ț$5f9l~;;P9vm&b=*2e:քnAVduQEQEPFEn`sj*ǵC$ ԕR9RFd9aeII9ܷYqUfVc Jo"Jߺ#oTH}iIq!.|9ɤ4iqA=˨ x>iʞa*Vv+6Ss G3}(C=rG]nSV :H'`84 eBi0#j ' 4^ۅ#fh@exo+cȑr6l7dUsN}'f@˫Wxݛp_ {ViF y`-8!v!ivbAn ydU>*cl'*O#caQ;HN*SZIXmf 3ji玾õ4x'>j+?!Ҫ[$(@vnznÒ>Ցr;ZzW7ݐ |{J>F[;# ^YX99WV@$JS6F94??,`}I2SPHAqڑvrނ`p~bkR15+vģ+]Q:SԴQIE}h>O]$^~a^zRo@:F9ylϽsQNT FƇv}Œ_i Y&IcAޢtc#TaO=F. Bcꦡp,#*{_dc;e<+4ڠfyn~ln CWQ:nZ!7,<8S0;E>AmXH݌jkvWR=hn OQSHh&~X'֓dېd6^'lN@\>$[KԮYAa|:w#e8*+铟T;c,ϵ:/G"d TWw)݉QlOaEʬV$MuA83YM^+N ihQ֔LdH$"HíG$Pǐ,vznϊF@z{(2zU{i ]`֙m~ "&/9WctFs["# ھIL!5< ieD0ƞɢ[CZh^@^V-2"yVRJ9~jm#F}zHVtlDSЊC6)Դ2O3GJ=I X" Tg{8cqPK13k:[`,Lc>e d^? U'X;m1WMvڸj)'j!3܂K/ʤz:ACz2206(53(@J*г֑fE\Ӣ[@f+A1wvb0W[D-T1~ZɁsad/[&o\̤g%TV_3nTV^] kD۱ nCDLwD\SP wgdR+'g4bp̜9 _GǹYh[5F >ǵ ;c Z/2LuO(;׊{㎦@;qe\79#;8ɦϘr{ԓ5Rtʂ"?\A\Fxaߎ9<{T B,i#y&cΘ=MF<|E6 9=*ŰMrzU6lʟ"&`xiRm5U9f"oj{Fr.sZj2+LѨPJ.03,$1P9:TRD%B jl$=E K0X=)mxiTyO44#vYB =2Ya-I#ǒ֦p,Zc+m'jkK"{U߰EғpmyCnXHbCP:ըAXHC jITU'FYQT S($❜4ZZ)jkfmf9xQ8 a>Kl5 J ˻+ڔp} r /X8]H%rx<.t'tQ7ƟaK'͌֕گJnZn`ka†A[0@ðҷLLt8;Xq'{/5vׯ>k&K0ch-S1ZB$RHe{˒Z`T0x7 dz|$LV|Fy#1튀A':T>HqS p6W`RZ *jB(Myn$UP0H0s?ª܍R9* 6%UY6r3XJJ^՘ `j0<i"DdHUtl TR(uBSJȑ*9 @`Iy4-' }*"A )nfT{87t=i<1]qS]*AcbDYE?|cc}`y|ڬFV #F#Դ(.t8sɸeê0b5-쌬=09&% B5;ls ~pySZU~-gO-1i˚5ۓQcB1h;lR@$ze= 'nGHzb% ).rW5$s_r$Q9䎀`2^ $tcX*5z;Hio_KBzI 棖>@mǫ74ǜb-=I97<lfW|:8ٳZ݄t#9' c+@^Y_vT/GR FF' oWWh^,$nb[$p[i䊚0QhjFpsWPmuCq*${Pn%Ot+nْU 85t҂!aX (=x1A= MnkA= Kn˸+ܞ 4d iG1fL'r`砦^Mr!f?1}j[H7,Nq%â2IVƢ9n4px51[=U8`ɤ>S_;8/V~&N82*_'zmq5c

nAC. '9Rsr.ǞsW6n"="}zTp8; װF8ke#.GԒq?Jĕ\~x G8%Ab3ۄer ic֖c;zm#XrK9bAcՏIc!MS}*-'ʬ:*`Ń'tUi3[1AD2xډ1%jWCZtQҎQQ:@R;=KT=U[+mysvt*}v2jYG;IRJ oQ2x8#{xpeҠnŽ;U HlTGUoʠ} GZ2pgO?jFK?iV+MH1_iKy#FerV@ c#Vf7$%p6ԉ?31bI&\c*9*'b}꛰v#6lRH#v5Q͑ujBvRz%D\0(9A#no!via$j‘29MZ .pItx5],BHI]#vhCC篭V"I0{ R8T2|j>.NpyP8<  Pzcb\Dz%.(ٺ'n$*[CQ]ԏ@zԲ@,(Բ&9ZE܏} dax篽B~4[MUXBx?Jypay'w $`U!\$iHdWgDF{**?*K-_J;@emHb2,L(TW]I29Qr1g!-26D x< |Iޢ(֪܏ê? w?8 yF vR)&;TTpH嬜 бlsJ tqۭo-g9(Q!a|2_-F ivrFAYp]OiyOeޅ3[ˈ1fcVrOjDV޵2?ʤ B8W'#R1\oXp:-ȩ.KNHڹi7 $Vi,kSԫ3O#)+nw"Oz%e[.AyHAwM$!ýgK׊"_JWn3PF|1L FyWb^OztQ@x]@8p}Vc_=0N96j TQ TϵFuTOe櫸sPL;Ugc$Wr]RĢ9c,+Us M9Ni[ϯ5I[3檩'3=z<0M+23WPg$1TIe҈UQcX20pqҦێ+rޢ(Ҋv?~9ڣq醬]AG@Rd#VV` SFS ! 1ִ#EWp*=r};XLr t$ۀA>5 KT :ګNrPtHȫl$ET\` i,P2AH2iX!O0Tlf?1X RmBE$BVj[6!Vږp$:VT  sYFYb1P6zQMTdoe48;Jim9ևv/š'= wA>救ě#\8ѵQ]5U:5r?timqQg.z3jp%*%Ǚ~iH8EjN5i…D\Ն Pv=h|~VOLR\utF% XtCy MA)E}D8j6 aM@yd<^0ώrs IwOZ}* #)EcA=Fk]9Y$KId:U<<ҦIq-D7HId uڝI@#:9TzCd*ޓH[p t߳&/JJ.G~1+G1۴H;RD0F0Os-À|*Οqkg'rFON3SZol TRKo=bV7n̶ȍcg[޴_  [oXג60wZv&Be&uyA*Ny?*Ojl+;AcI~tVwLp9gĠÌq֮<2 Hu^>Namr01U1N)U(8 !v]+ 9# O*; XrqI;XqMryerIfvvEęcR5 ͻ %?WE%]mvQEQE(MV`@*AG5y6I#MP~U?ְ c|}j"Ix(957vIS v8c|F$n&'“TWlj[Uh&2ΘseK"7q_z,#'ڗQ`s֠F"IVb*=e$ NjJETSM 217ʁb%G z#Q?;,mJHʧT$s h A$l SQU*F;daqڪA2)RG#5`S.0H F `|®[:j(]@qDe;#Ne#;ytѕ$ᦻ(xo7-2CQTfe U2I*N- mzű7jlVm1WV]ObLJ]γ+ƨf|#TxVn#+sHUεtpjwXѲ>I"fDb^&*Ӌ2' *aY3ҨJ6Jˑ B W_CQU=Re\Op*N >IR̤9*!26Bz҈-G-7NG\u=a"Ąt'Uvc:皁 5g]%QA8T!!AcsPOLlH6f*ڜjQNj |×jNj-ݺ:͋,C4iO:fc /ĚBgJL^FȌpcV4Pds1Jl#* +t_n"#>Td w'?,p{U4z*b=Hq?I}mI` i8V>R}jИ0 eJ7\2In~<9MQl!3QWtC mǑM@`ܤmjMqLt_9$c8JDg;,SMR*Ks P5ܫ3.xK*9ԉmR$Tm"A늎@ݜF7RyyqLwn$1ޑFlz EzU8TZz(~E8UQG5=HfM .F/d,1;kҺP<`=zu"bH\3i8Ak ao\BNCLs+wRNwLSSޢelݹlԙT.)Ò&>YNKi#cgUI6cޫ$phcM5)1M`ezU#e z+3bQ}WK]ttQEeH]:"a1Tb[sBRV:XV`}i:O csޥbpgAs䏥Rqui* ۗH`wۍnhv"VQWi`׵g߶6ClQzT=~VpWpm%|t$ĊAE8 ~r@-zªlP+i\t%k/d2 ;#MgqIh *S@Ȕ2}sQlV*mH*Wڄ:ԯ] - ץQ =TfMJrb Ҝv DGJ5=ĂG1V7uj20vpU`4݀6瞔sJ6dU0$WE:Ew7q~D'qMxƛ UWn1j㑎2q+B`'Vi`ck*kb5Y6!c@WQ}pA>Rr*|0ES˜LO'`p> E<})=6 X䓚ln0y$暌`DL&# Ti1qbLwN*i#_/_JY96*8֬FyEhKvoֵtշES] }sҪ]^y?,@;w$* |#D;~B-朴gV%94hS߸xpɿ1R6Jd+I#n8fe,x+֣\Ld~rث ƽvaREMbx" xJzfpj1aw0y_ aqŵwΡWƫ@}Ry'fwe~9S>^{ԉNVĊFrA!yR)1>cܜQ7w}*"GU؊Q> |TM 2ED,#ۈH "$`(R1ޒ@/Rmԓ8i7qj͋o-œ4%]vUQE TN85ĉ0z N |@V>X;F ZXwvGFR -ʠCo|Q\{q{ H#On i#N:7^20z}*,sZFѐHoPjգ.#'nu߳$H޳(Qeoۻ'wfZe:HJUJee |UK6\*FPqow#A;PEx CH>%2J$+ҩ42zکnPO|`M pzщ8]uQ@u =dX6=GTCsr&-jILzbDаHPɚxHN  ӊqN)%ᡟ3`Qȫp}zz;[(:ޭɚ0~fӭX',Y|ܓۇnJRw>U|hvs(rr11T) 6Ta6LOp@қV@1S>R|jbqI œ+2:SBr*2Cu5$yqO_3VPTHsTm{oޘ*#m*&rOҘ+ݨ^7w,lF?j9u,y7X w)=@|=@桙TF́* @f@ )r;LA~F((w[KWI?aez5 {e8leMeZ,W?V9D{dS-.$B@ږ"4 =1ޜF.0^õOn W1ܩ԰>J{B `\Z?(|ci$$~Z. =S{Y[ T2{90?.*)TVb9ϒ8Лsک".g".}j!~N|r^\ANTT 9UIOBEDQ FQ,AUbQ[u9C~70LUٿI$ޖ)7exӤ]s`<ݳNNi;㕦 &XFLY\LWIqZw*ޘZмaG uݯ늈rxPQW\U֭(%Fz*5 U`TTv &7AZmmq"Fr7vn y 1ҫncU&>wЪNO/5Zњ*ǒ> JNrݩ&H9VrF[#>r>P9uRU(օnVQEQEɤػpK7JͲ()-%Wl;ad gCBՇj|DNS4 J$&TrpE;xy?v>POzBhPzkcG\3BI\p0S }TV@wyr.zT,#c%ldz+c0ݪ<*qa㚝)}t'͜1 Q1qƙ 7A d"BgsUxPׯ5ζub^9Zt9:⩨UF@V>՘jhkNT5^О-@)dFjO 8X95MĎW)nmC(}'!MrwiV3L RZl mC{Hb ]I@*% ::VPe#ӭԢ((fqjuaJ©v2sY3FU\eT&)&\sLO e5i!t#?r [QJ[*F@"߾]YzUvű HDaiϲsjMPr(^,$1ޠ[f2[F#,g5^c>\Ui.|vJ; ${ ұzTMJcnn*%qP 9#*O#;vϽjca;pr}B Rq8Yd*ysy y5ZmT jAQhv:Tjg:-~ l2A1L).xl Gy۞4қnz)#2.BcҥK&E;y2 r9'8vRJ$jyczwA>3ڧ>h~.IӀ'0̀bq }i"(1=Ee)"L iH%F%~Uᣏʐ:ze;;֭yM;(0=j%)#Z~3̮>U, vcL&I>x;޺m32X5mIڿ ?[(,['S/|–PA%lZErxPNx֚63)C1U%L,pw9NsV lf{2rX3j9IgLWp <B Bt8Sa[=ulpiIK ɥe=F)H>) O^9F0Oz$l@]EoA=:Kr֖6)l SSZǚN9{})yH皳 6qʥ\p X80 nQn~|p67:|Q*qKN99;Ld$$87aXZ&BV+!+'Q|8wÐ5;ջ"d UVjm%A4#X'4Tpj+FB⥺o1ni,k_ O\o;V Re涴f<-ZVVPqJӳw)ҵcc?wҵ$k@O{zс ǷWew,}k9xd2$m/((۱S:{欇/]8sSnoqJ0IK4gs29ҫʾQD+2?&Ab?J:P:n䊝|ķ8G=:Ldr4w S$+t1U55nD٘a Rk19:Suc4\´O?tUf@~T>  Ы1`y0}钌(`GʻT0#Sd\ÌUifp+yP0mqN>Np9A^ d%g9 @8(SFʼn~QϽ1j+f '=)6iF=av ːzRĿaRjb8k9"G_JMFf 5! zyb{j=kZmП+ e{VK ֍B%8b:Œ9:G >%`;  |/&R0ڦ2RޑAi, pj7B,` VP'Rȅh9 8#Wv ]])XN0lm< Ȣb֤3#*"$,vڣmGM 4qBJrKmJ̆.qڪCCk̹} Ξ'S͒,5uTb087hJ}| *_")" IeK.2kɅ+{l@ θ;Eی7j3& a ,d:Fj)HHVu^FkjṮ҅,r:Yb1HQ|oB쓔]$p}]ܯCWL_%Hw"^>P]6=y]Q.? &ICW<j$aǩ/:$|=^'Rc$Ufʻ@wgJ!`?J}T8qOHӮ0 Nj%$'WSO<٨ܠN$zRqIޜ>\i=$27?ʒL0*k5ZhNs@^sV#A$M̦B~\JNk|Í.-&v2RGS;ȏiL 3(DUpU}V$0R+sKm'xpAMs)d WO-<@r{TJdppoZ9]j"B~Wzj"ۚ.9L\isu$P~v6;U=Fg1c<ܾ6֝pK*I^jcFn)FnW4G+T &*`S}}1NqFG#^cޑ cޑ{tgw!G P[r=)āS)ICgizfOFjŒgZ Og:ӷ4 gNW"_=Ue3\0PqUve!ppN6#K{FRE>H[{DPjKȪښ甉*jkYF;# ֧dlK%g>RA9*0X}$j$enO&UIŽIDTIQtwZHPK'sY ,<(Ms})mf+#Ҝ##l;Ng*w,CۜR= >pE9 @w =*Hg$f2+2sT9i"f(sҞ?3i҇M9? LrVv$q'o8QRO@bb;ӮD 8ɦ"{KE6̙.OTdO\ЅicV;T#_#>RĦ{y:5&G8=:4$2r9 U~Gd<0)T.qޜJOޜm.mwG5 $ѹ xQFb͚< &pxj'Vvj6 ن;ھ`RGxR)w@Irr@'6$h?jXۭ9#HB niPpN*Gu)NvRJnq3fxM /442114 Sa1Q4 $pM*OKs)H/Sd{F7Jtϵ6IuMV &hPE\ֈ8`ؤO,O-֫8FN~e#1#2灞sR$f4O"T(^0y6d782wu>P;Tg˱GlS.|GҔG&0R&& 6>SO rZ`dE9s%TS8>,f? jbS!R}9Xx}iᘓRqϽO0hsHc 6c*lFAx )X gc9QdR+SMCJi0Yz >\1+*nHMG)++( jrhneB6xʷ[2Ĥ5=9SQM[Tlz ]M~Lth.>o#?ƬžP>TvE|)dy9bхU§bjlS>Oa__ Ҍ;luRZ58 pE46:2?2Aک 7CF LP n)˖>T'd21ANF94BsҠgGPxG`zZێ1:ԝCvO<8jL ipti$c})AJNr: a@M4#y vЊ9aU$l28$u5Y 6뎦{6jYfpI *Y&p 5I%pr*؅Z8Y?jBnֈ-HssN\1h.InOiȹ9R)e?(S tԪboCj;2ҦAH ̣P'bHUs fT@G'ZIQUCƚ -ޠyQR gDΧlzӁ1M秸p y?!88Rp7gU(P@s*˲Py۰éRڲwqr%˔nǧO1(G=7)v^ ֚Qga8ԅLquSE=Yxb]r2CTr<U:TP}ކ1qӐi[NIdd&qO⣹SZx.Tɣ,T#O2csӽF;Y=kil oh zƥ3nBAi4V/Mc1l=M%\QnzfmvP1֮1:Չcn@˹B*#p>Fybi@T9EJrSNUNIpF}TpUwc]60*Ij'Nzw 8h;2&YOzR.BSǥLUH!#'q5*AM8J9wX7%f%GJnU;K>d)=qTgA A-qK%jM= SJ>V,H}VrppOZw dlp9a OkV%MshOڭ$EI=>z֥ -$zj7͎0vn68%)@FC}Z]Mq3d7cS4y\M`Dgfԍj,0 *8 D!)N(_`{cy?hm'on,rq$x6B9Q3i-d @T6" ڪ\>_p~5V!`*F8qQ(;b逓zR>l9اcßʝ~cګ\;͈a桞I% 8AҢP(ۍ,?.r ,Go9j=zP9J qZ*qFLIr;MIFޛ ybw 銱d'*o5&Nݟe93*g %rJXu$ ¬|6rK)*rAF$Te@99U`s(v?J" gɫDGn {XF NxXO(`,oj^92 ZG2̣h8Ɇܳa7D6U!G` $.Oj4ct: h brU9crߊt d#\)oRHM\BeeBXv4KnRrß^FC$d:Kœw$=j)iss+fWt7՝Fs,j$cӹ5fgt%ڛjr?ͳ=Zn=V9fI8۸)v'T( rE<(NHFOZiҐU[zR rn9R{0 )H2ݩp}jߞ*CVDw)62 XDPLn: $讄+g6r=ULN{5MwL=3RGbwM*lԑY6dp+B8w klX|*ЇpKO¾پeB,k퐒*`?jؘ.B:5c/tnT=HV?.L52kfsÑIIwbJp䑊xddv,wQRm qـVUH Nɭ[|㝧6J/lCQϧH69(i2BNAJ~ Igf.)Pn5kSbx#/Pjk ,cơI1%~BciDh³AV wՎOQNȇaxrwh,sS!G dӌ;2r)^'Iyd!YQʰ4BygbOֱ-Byɼ@H*ÜDRH8([AA.1B[de n 9f-KtnԒ[D&$t㊈*aؓQT8cI6pC=ךIs|f-#q D@uJ8 ¤ݢ\T۴kx=3R$%WҫY]jEEqerP{WxUc:VOWedC qn,> tzӏm`03pL1R)N#B,,P$/$bP6*Σ+LƸv>{乳+EB[v/i[`QNk30IdJXF8=RT=ꦑu梒#E$_7qM#ʌS$&%e6Bc^[UO1ʖ'wױ7 ڡqUxJf'ޭVQv7䚬*櫁KXCi0^G(*)3!jONiɌL*?άZ3#(]wfF,!Kty?:*V)?հe;O<(%m#DhdTwM< ^)yQOj X hz[KX%=)-n(JS=k@ ;U2֐gݷm>ݞR7P:0ȫ'<4vd@T2`pr;5GzQ!XQݕn@D EFm0I3jb5U늲"qVРTr],Xrx8pBI.{23ZK%?';ye VN#p.0[)"gTm7iЍYzUm5]-VFۿi@!UɁSӡ+u_0AݪYPU\ n<cdUcdS M4xK8ޢKv5|޳ͫA m-numew?yЄ0\jL(J. Ydᨀ02vR9#EC>\Z"0ȑbEBι^;ȉHGoA[)]| JF|֣[nﷵQH6`[6oZ0}iUI @1,UվPxSI$ G;AJGvkڢ(cRszwln+) 00)Q85ʣ#S N6צjҢ!s,\N\[w-#.ujPyjn񖭈dJad1bB眒Os:rKai@֜)@ҏ4SY{8ޑDǎA!Ts8p#iSx7 2b)Q6Pt4ci'}ҫZ^8Rr }j {am\ҪOD2Xi0=ۨ{FbFz!uJ!-¤EI-lS y ?25H݄eClge \p*XO>) u" 0<(*GZ ұ "SJ"X9"ذE㹨 sURHXHe$:Ԗܑt=Gc˨9ʌ4Yz=)S\tcӵw_TcQ)@?ZtaYzjx9?(L;ۖ+#5vl0;bHHv).O~zVLaR0p?^AvWzȸ~X՝=ė'+jϚISN®inXO $ =֜٣w3VlXfeqZFf#GQH br&${&R4U%?Z}&l`VI45SӣQYX7wⳂ*MjOd6 z-;N{շ`ju!F@ *"F^۵Xql) @E<5aHu+eqQ+o{T7ÎEkqৣ } Go.d Â)Is*w`aqS66܆! {UgB~z_zyYWхYsH}TrceqA'xI* P88PlђFvQrY= TQn%G)켖${u'GjF#чK,~S=%Fp^REu GE#'R%l-ʎX^&۟v d *~GsJI;Pku{m͙EKf;OP6kgFbQ>#~u;K/pj;!A:IVe)Ͽow"&N$,`+0,AF=I229RPlFz\֫ `XU['Ҫvdl5Z[*{H9dE94RϋmY$P 5GZ#TfٯB0\Y]0[zիU wC*PCend!]zeNePzҸUÝ+qW/C+W= mSYboCMY Æ45@)?;Ӗ'6]9QXo {SC 3bh~|J5ݑ"Ȕ9pM^["Ћ@n3idظyid8cҥӯͳyR[g2Ơ!(8 ÎaT05uJ>V%?!Xaޢ݈?28ݽWh"1-+W!Q/j(T)$ BU& N= tjFȥғBj,c) `$ul¸Zo]h$pϾjhidj!V4eU$0V\s3A/b=k^oK]+y(īXבb(t-y?.;U~b`cCo`H6oc t m#Tkr$ N$!ya;tf^hH+GwOhPDE wW J ˁ4P)V}ҕB+o&L`|ҳ9:O+*A׊rVݞm. w2y=8MƤ.7(RAwĻ]= KǕ .yjqnw0:Թ>P@FP*0#5 D^~j$~㡡B?~lt$ZKB0wN}RNW l0C )*9_2@3a:SkNXksjʳ F3VEYzu ±^H;yRဩѕPX>;me-/8ާ2"^@dOp߆k><`Sف?JjY[-O_@q)rOZy.BXuJrsR 3Ql+$ڠ1+lT^[+9 X XA[?(26$ pW$Ԓc;I ƜlYsHI!/\+rHD =9fb@PTr\ ->lŒӦ \Lb"w8NqvO&FsoVo)F;g޴ې/l#ꮦ+pު՜mnZeLDL]ͱF$~^.#}in,ÒѝIo2]i^?kL$a7X=>jW"+#sZ٤g 0$}Xbz.zyq'ǚJRu|](Og?J|b3JE*0D[KwlJ [6>F(''i 6Q᜶Nͣ)$_<$?MxC29d!G梒- ÓR;4`6;m㨫/=F K8cnHTn1= j \v= Q~ȣҩl0d T1"(M6$d;lYRr0߇zKF dcr:8wү`MZ]G6gERv=:g]V$V'V\C~4:Qw8*΋tmIH7:mO})Z1 inKf(_I wnSe/YwJ̸sԖEHѦBhRX뙣c8PfЄ+ҪH^D!g\~V榑[iթ#fx+}jĈYi)td䎅MVA /mc5@le8+Qdex ޣHIHl"8x6HX@yUgm.+?w=}2r!QKf`HqoRn)g8U߹8&q,*x 6 >1<:~5iwJWdWmȷ;v"pwt#e q =1RJC~ɂqnG\jF;a i#SO.rKm$zӋ M]de G[ Df%s>a_JžtGWP 0yyU AWPwT9Vmy?qQKyܦiݼ#'O!)_A,=SDȠyj_5LKtKҤHߒXR`GFܓ٨nQMk ܰ GQZ* T4>X#VsY) MprjWFd p3Iȁ8jk\L?%3Ly [錭@7aZ`J@gi4@I+#cz2"RE>UެFelm5FX qMc8T zZW2GB)[1E\`NN0s[z_M8 r:[Xj rGp}k)vA8>X4|4'#6#2@c9$Gҗx76ȧOzdΒ"k L˔#ZHVf%;l2:xsbnNU"u+% ᗔ5}hq0c&׏cir)e#Vv)w1? ZvYv<+K&GRF<Ԁuq"5r %ED9P9iykp :j[!8U?6Cp:HL\F]cljTX挣6ڣBJ[*G~A6d%̠ ԖV4+<{b`-3n1QR )T%PN=Ѳ1d=*8=c#38Z9oacz(T2dVG\RmX>A՘̎haFSTP`єU$;2qeU6>Rj)y %_v* S昞BJ; }%#!ʱ$p$ rgdVyb=*caaQcةydΐjZ׹Bu*l%GZH|6r$*mROyR'#Ĭ2 =zc.aw4$ ˌԧ!uӶHC ]O۴ʑ _{{FD^AjݼClP(\Rfpb]]u)wnsY72#1=G-őNNp<Ԗ 晹nEi^6 綌0&߼jnW.AK>rmL\yWʙS**fU4,Lym?֜^YFF_}0Gޭ+T/0۩O>?PoԕVP{Usp{jOl]*;Źd\_FL4$ǨRepZ.7oޣqWt@vVH~ v==j=鼵T,嶹kp늊m1Ό9[}*Þ0~ٷc9Ұht7pSӮ*$N7eJFP9!3"a ;!I/b+f%uocOHpd䜃SHW؍*wK<$c;{*R&PQMw?#c$u5 \-*cV6en~y_!ƅf&a)l'$|DOIxDrd" ~iWxv>B#xl7Τ׊ɸ|U\l:P2ѻYn!54RIQ O:ivӥ2JE"1:(ʸ,iRHgrRiq;MVز| S,#U$c6t.DGZ5x& ;`$<4WIYV˂1%Fjd+չoE _( #p* *0ہ t*h9ݜNT h]E rzxZtqj.X?ҳGA QTĦ&?w5Ym2n$; ]z%j'7>Z+k%$(H=8]{uD344y7ϒ# Cv4iGsSq }X.ebHSkq!>k2i}% L6Ei$l2L78|KnT?7O{ rǖª8/3S7fвIJaeEYld8>ڵڴQ wqZq>pۙ)7A1 ~u.Șu C7Tq/bA4fT0GNM-,R<3ɴU[2Rs%˔8$j͌$d_S[7(b jw <$ƤݐrZk2v5[u@qBS$ޫȲmRNWjuI6F1Gtbqnf-ݩWtVF zUKp@:3J8px ۑDJwx.x#*r\V1ҍOMW~KjEWFt!z=k&W@y'ZςF1#ۊjL YXgƬ,[H=)r;ao;`>Ť1I78ؘܐ~a=S3H<6Y6<0.o!|X 'q5Ijb<5Y$1VG<nMbBHSD09'VD8N_.\w-C,j0`V_.E db\}柧g<@"{6eKyF3?5z_%=W>&]hJ JXXsdQg",,*U,[̝ݴJZs'hR_ۀܞ m `YPAAiitGkmr S,d#,Zh73:ѷ#-QȄȌ oL| Ңhs:<)B0?UGQ%0C)D#sImt";m$[$d`5#Y e`rxE4RnWs'=$>zRDݙ+sT7Fz3 Ki9RʊdЇq yˈD·$MiwH2F< r4%a1G/ҥch8QJ1#|nrqS^4/ ĎMxYaoBwdu<8f,un'5]}N gN&2C c"`1QJ,A [˜dT[UVe޴dHt!F]p=.ة Zo 1\ch34 p=p"f2g$ eą85DljǙ;?+5#4ՑB"Ax̸gvgt;OVF-ϊ[@gxЬO1*cܼw5VyǼ wL%2yL|5=I?9fjKsX婽m$<@? Xߧ]>Ow'P?*%Mnjʳ[桹RǪ ]'Y$>XO2;K;v*yxxب霜n"ٔSc #` z|%an5F055c5mkk{r} RL1Vϯj")[>;Q[9?,.a,}39f4tc+ƫ,yǥV I ߥA0а؃t7}dU#uEĊ:*۱b2+4D I򘁊PD|sAJ<ùiHzp:SM?x驕2$u uUvfra;91r2j$H2G:{8n|ɭJqI5Sn8tȸhi%w*N0c4U<]p}BK/KX'-Inḍ/F4j5*N 84?&3NIM,ʰEO>jZƄ29VPpy^{Ջc8+Phhɸ'hC=1ֳ1Cq20wRݣ(DmʰT$ 2j!G#Fjbpe# Q. m 1\Rv+*z6N r*ׯGJǕPjy[9$?,ǏPjfo*g%v%GuZ77IY #v?L:0튎Y#Y۬9EG#|eIlaŰYToy%cM,d,@RRXǭw#jQ2# 'f*۔.XMIt)VS ϵ d 3P[4H9j8`c!@\1̨'@ : ps dlynaXӔ鵲 8:b *(lU cnHH:ՒeXc;QHI8]fb11DYGz(;pqd>Uhm.XC*qnbDEf1gd@UQ- b!v"gA-e*+|<)Ingڐ` ${Z`nj=,Twrp=꫸۱[1.XU*C1Rejqx5%@^N*ƲD!*mKPz GNqUPUKr LSP8l.x94GIpᗿLTu08#)Q]̲# Jr#6BF1R 2|̤TlY^)^ H/z~bv=EYЗeßBWX1LԌkI 8iݿS,Wn~#8։e1E 4"ryx-+*`7x.vR[Lzu>oQN\MSNn@8HrOiBR8X*)fA σK6 . `p$yrՁ]ѰqLݘkSQZw0yF456C:gw< c3 pi;$OK&ˀsVYfʻ/uL%wLF!UTILIYdU}|SRFd!U ɹYr=S۱v2!*ɖSK+YXrHKzwL%m┆ sS\fʇjԑVuQ\w9n~DzPʷ/-|Wdq}}*s*G'ޘĔN¢OC)i+H-rq\ }W'0[r?Dl!;8 BC:㰧"7|dRF/@hE @R06eE6Vƒ֪g^֫\B$nS.GUQUP.W5Y imc&W'H sWHK<?W4Hg?C$ ?n#P]6f=#U!Lmeǡ4ϸ w)n>[`fQRK˘ۜ,O5ճ[FpA`}jYhnQֈW/ G+Ip T?:aI'~U\ n9.#\\bKʟ$(ǔӦm>Y$,@,ڗz{fco- {j[1Y  3Io"2eZPcP}FO!y Jȯ#ʏztgGAHvG@QnSHʱ$hYQ3+`(5:Jn}[8cUXTGİ95$j8䓚 $g"09#jd 5pƥeޚg2ܙ<< :S`&Y <~T%gq֒y;v=i%];us?7Up[S5:[1$>hEo6cVcG-uKq6=frbå".˼ުuz\ޠ,|,F*$񑂹ڢH=07gjKe,vZGvWԶ)ݎ“r)pΤg?5F(ތx9MޣrdNZtcK[H`T-d唆$~*{#_NJ󎣊C/MZ:~߱JAv/O|Qs[@nMELVݻP{FAT PLNwQm:p'B !:m8hP rĐ}UljPA,HA\~hyѐF;*8Nr=+1[xfd%4qӚc\(Jcjk43:!L'8%[⦊K=ϓPL6xR\cޜ?CzTbn0r*fF6qnp}2ovmm29 O=*lh}u&uv6ј0;Oz/)21}:M~YdPmv!E9\iνG6m=9F x\zqPF*QUU9=y GZZ{} ޼gUFv\ 4L#t5<)E#䁚  ;ȅ,Jf'b@͕RIN[6DhӍ6(mJE >֔cz1b*cv4c3SjO$$-"y 1ޟy99nTP(g db(G0ʌlOA!u[r &\^,v,ͻ$wS܈AbsS'FfiٕIbHUbHRX>+@ɩH^rHɩ.@Ŏ2EO)dGd}{~Ge߽Q8m,|.I+U1!`uiOejKB1GaPÕFF_ޤ++~i'qJÚdlv󪑖'?.8ǟ՛udRZx0mV!J183q7u>V"eG{x̌9fE]yN. 6Zs9t+'6O:ed.H!I㯽!kEđr։T\ijV@%TRLq+2.Lo䍫~K˖I2L =9d' lAYP|̅sQ@"3QB\1ɧ۠IwTNj}07K,?/^98Q*ɑd$5Tk럙-WV-qw|ЙC8gpq[e|!ג=q[7 ;r;}*uNGF*UgT4NG!oU?1Uv\ 2J@~4Ic{d棾Dkh~tS@bX MoPj m\,`zrv`dG!mYv0=*HST#"d#$ePOnMKi2$OY['{@ O~`PJd\g;w2Hsҥ 8m0 _;5[YCP`e=:##՛YNߙ*$%Dg!~u?wNj,.]ONj܌ 2ȫ~njEU\v:jL? 9̻k9I8=CqK mn)WXݩBILo!F1INz-^t2K.K2ަ#B'$}i|0x*↲i*QJ֠26)\y8i AP308cUb=hmbY 21cڥQۂ94JnC$;KpC#Dџ)"a98<Ԗ!#. 7$2>yMI䌑!ʐ1V1>cl RopC9Uf+īck}bp Y~x$ FMXGfTP۹-xڊf85WH$JygϠ./E4גJ M *Xܤʭ .Q˴ǀY(28zb]#G q(~A^Rr qYrʧEAp^9$QN2!tbSylϯj2ӱoyP[!X֨n%qxr.7 g zu :C41<ڱ㍼#ZF%$̉2qWde%WWk}>BA{b5ʪAbԤk}=/Њ"˴ w8\}ꗇxvbpG"sp|̟bgqV$3O|v [2AlZ<&\6Z̾C;,IERIb[3HX.rk*Դ֯iV6P?)98*X'zU9e?J x݉Kdg3dyi!RB2M:>c$DeŽk%wXXU--G*Ly[R hʝŕ(m:42?i~׺\ VBbtF[U~g  fUF Hg)&45$f8@9J, V A+fV bĞ;l- )fql)ĮWڄƘ; pjn#ewx o`Oa@ÆsR+Feg$)_ZXZgaہb9#iH֝VLb0rOv?Sl/‡$*XJ"| sޫ"5(cv gڢHDAx( Vi2CUd dN8"%X|T&3>ݒz3&qOm☇ uqmOS yfpzbZi^L*!zKdFR^FL<"CZdv6 U$ zT2|W'(1Zk=GR]"CKI^Vv+%]ٙ|8ϥ2^NA c0iC8B3TI–Wm Yd ҬK+qWڣ8Fj8QԌ梽uDUS̠I+m}jM?M3vԖV$Z}Z`gZ'OG/V 㴴ژ۽f=О9YP 7gŨ11\B{U!2¸u Xa椾- /c"tȖ@tCȧ0/GG #*y?^յud.y8k}@DgL(¥˅}{RҘpC+S1&r2s*b)VW¦GXn };Jk-DY[inX@aWcTHH*mEE,Jg?P,jc* 9]΀@8md9y\c*[hYGR"l,yOJbKfYcȩKH\<㚒l&Evsw`JOe?{b.E&w'ӵHEpR :o5 mcNxdKprr*vs>hiCzSI pF0or>i ;5=b;Y\? hF<ɤxRqڤ,0­Oe2ծgfvGm-q,Zi,%9g'Q$rLCR_2o "–鉓 ghwrLIPOi*fRH?vN|`FOjt (AأnH{ټ|l}01ޮ!ln4>>@8+V՘7j|Bp5BtT$j2D8qԛ[A'׽XJ]05d<¨9{WeyEs ^GP(=>f~m㨨r{~r2 :Z ܪ UN{U#*GZ=CMqޑȅ_#E>bLX(|=~5̵u\|>٬bo1YʒJskNLX#!“ִm 5NH41fm.B-S2><Qڪn`FXQy?Zm#D2~lQdfa@Z%F9jas'Zuc"O D?5EP)c4董D t՗b8lUAʱa1ޘhorۜ iNs.M)mmp73Vش,.2MsiU>R rÊmmw9]M[|rkɃɮ/.0Rrj+ćjnEA_^R0iC^,)G[t `YH?`Law.&6F0:Ucsbe#OOZO|TFI_K Q0OUY݅^Ú䕇FSE?ǥJ˛w~mNj;8F?xewF'P,=+ ̱+r{%P+ 2з>,NpNMs6i;I8ڵR#gRg;v9⧌P+X"F TU]rC GF8UP.I*d2'٦Tu6 SdD{QVc1Z["3݈-dBT*RmwcUJȴ BYnzT !nda kG^kawty1O5R YLMYILT- rj].`oݛs[{Xbaԟ8wG?zqڵ yǘ~aP35Hk2A%R3*W4c >Jflanw=?Z/#ܑՕmB#9Z3*+#ml#o**2]m#j$@4} F]h;umx)2I8oʪ0pPM.#y.1\$#K*ೲ 5m4lTi[=lWn-:$Snөc G9CO4.LVZδY`̓uQOA9G$浉>XQn,0CcjܡsL>[Qo' _7RRcӁP,bb\4q*b)̒ G${m9w<Ծo˝FVA1 .OEjɛdsGˁTClr6KB,(ImbC,-B!E$0ОA^ٺRQ=EFdiq!T w"WIJ P#qGʟ,c"@ 6ISʄedPHM#ɏр&7.Bc٫(*|{5,jT:1Sn:7. c˶98J"y|Ɏ_sPs.G>T(y?U2\(#Ha f>TĹc)23 Fbx0梴h,ːF}};s# 4G%`v)d<\*-[i' J$9$g@ѫ)',QU.۶fG`l{h985o9c0 ֵtٝB5Z22¨R7, R94[d8>/!, ɫA StrwNjtX-QN` mHR9v d;7FVB`:qM|>B69`i]c-Ն$eqQZdSČz[-r:E0';})CpӸYDe=jwaޥxG?A#ʹDj̳:Ʈ#TFٹvvV[`hECGB85%&o1TI'S+;I 1&$dX3BǷzsGN| 9#RGy9,x"2! pGO-4B\?Jt9H.qҝ#1 95J\T UJ:~yۃS*%y%W8'#F2Q `zU|1T-%`~`BΪBXC!BH0(C;U54Le*11@Uzu5 % GMG$F(=iCA~bMN@TFw1=RYQWu&U *Pw|Hj ɊD#S0=MQdzF`3Ȥ#"7HǵEʑ6QCyVzd7&Y n*Yab?=*19-銔+`~43,<v+/ZEF\$Q[VfFCAXPkr$~<G(,3fmI$j2*~h?T_s3Ufh컣=9YX܆/vj2 ,<;;.L$)"l.h$ˉddzѕqq<͔<6,r8*,:T8i9$fkjZI VU vVd<%KJkى1#_9j͒g- }[t ^ӭ[1+*sZ14v# )Gs эF{Ҡi.vN`#-i^ b9C [WK&T]PNy2J#He27cU*|>'ae`@;KnJ50M6Eq/,hX %ꝳ;~X?Z&Y5lcެM0գ8_9SV 3s*9؜r{9$稫0 +gLv;~V+V͉+9F |U).ǐ\Hi)yjlGd;SeS1dҝ9 jQ *Iy2YbIJ%E$ڄu)m>;*>iiPH iH79\e~֤[C**?Oyޖ#<'5=ڬ@wtPsRf\8x_ ,bO$7$, ڢID$E {v_1<X*4^1jdU݀@iOpEyriPa(PjJ_gmc@CѸt #m#>&l?:0ِTb3";;>BʠJ}>U+(y.-opC$e[hY.ҧ+d=]Q  n#jʮc`5:ȻTq%ld;̢0Wq!)X#TْYUb_\, nIcU_"UFI"A}+4$ ŹmGvdUc)H ǩcj8`n7@I2DRR{P䤸<{tE2bEgr*9UK+.wlf>']Jv߭Wm_JMnjvزpyPo,]TNAF&S*rf'F?;L{cRrp{T## UV//cmX@=s*8{ff6}![M=di@d|O2B\MA#"qltE(L(6 x'z慌®IiK VBJsp)F0Nx<20aS Hi@qޝcӎ>{EqTwl'!cRPW`*)| b7Z8-Uo,0ȽCj Q+j ~I$sJ}3T y,|gTim0ZHo+` Rlb3)XIpyInX"@ǥhMz# noci4nꠄ6mdU"-g 0+sgTX%̙jh%4Ri K$%7CpII'qº({ƫPQBgn8s$l٨`0SA>`JR<]zz[ScQF$Yp1/A72! PdOC?,9)X,ÜKܹ$TN1f [략d`0@֣UV}ҹ8 P(YLNbHݸ͑ohңD;FUM5'Py\(^:Uw t6X\ef# -4n]@ҙ"WJGO m|xR;ӎ<( !I@B6؂BTtWcp!I Pw2qM1$%AҐƬp]=⡷WP1"8Q@' =ѩRe$UQE֥M8)&[;9_[g?z3SKgt}N~b3ҙ,r@?%3;U W9UT&&yuUNoLU/% n*a@@V8qҬݰXzc&A%O+-9Y͐IV*0@9qV슭jՇ)* ޴L~RzZ7Mϴ#Ư\2IO* ~a~)8l5*noM`I‘w1=)ɳv?9#7N@5d SYvH23i\'4&VLS490c7C z]w n$ '$ ^/֚!T`7gVla~j)m!ɨHo7晙WQJ ~d͗8T!{iYRI$eP}90W|"w=i<Pr=}(b+B,qO:Df䊉܉ t>*br9jxQ9N(Qid`8".L~4@|N~v~`;R]FD[J.O>Ԋl.@ң.ֲt25fer0Zndy ϥio̹ j!2ݑS n&D)+%֥b@c m?ަ^mѐAn;y<.7QP$P2rt1Er1Lh i3eYG*[Ie0ʕq>wQۘGgk+>G_AU,d- 9#!~aL rP2:r%7l`@NOzKn\*+,%UfBK5g>Pp-" ]&#+-MT|+L-=3TKyaQY&* :㸬YCEHp[8s+6m) jyc_F5 n#yAZ[1N)cT'7a'ySc ŏzDH gsHz*EjH!nb# !TSx jfV9¥XfOJ,+xbY?JH8%$ YcS,/hw;\ODs`ј YWq H iXFN pO4Er=,Yttd#BTLTY\ޕXAix2f9f9.GbpqL ?1T454X dm^lHp1VU[4ǚhLon5#qjm<`S f"T=<Jb1y=A+xehr=)HQaޕ*^#f`; V{ix 7知E%հ)zTm  f+ 3dʠ|#҇`%P0Ht6snH&x)`rjI FTEXmURėn$;c Bţʥ*t)Jۚ2"(w RČ"/rw SU^5# Ǧ;RΒ,hUcP(r zJ#D! 8-*mdnX=M\0sTvqB|<N t1 uoZ\z0׭M%6_TBL#oU0J͜!qRq¤M5$M 9#gٞH]%r <+~hqtTw=*v_9W8榚)~bp]n 2_r|ÌzRi;0)L!bM>hv97|M3!PHywlG+m8 yr>mslh*{b+GTs(T*I9!VeU<ԶŹ 2 9o80ǰ Prݤ(8$#lٶ69'RK6FĒ{UŒ48ڇH4%mzI/T"ҭs/ F2AcɏQ]\cd Un?-e.n i> 늒቉Fy]Vv`naF!x> 9Bc=7%H B c)g\67n=ʯÜԾY:lgUtB! ~\o_0i !CHCò6w 1MQ hdxx}ituZlu|c"y.؏z? TkYHX )P! V4&O֫pQv?:p0@(?:j; ǗcpԤ4v39 W +8 sNUr'c/{*%nIقE>0&cJ}i0+& jW|Og)kt+%&^ #w<㊞@OrJa0+t<Ds*ncE tyEsY[# FAUd#TjBNO <*ʽ 3VO,jҎ*Ii"c 楘G&$X}yILz7בEm Z!o0dҙyrŹ{V*}8@$v+ &ppHY$U~Vk}VL8$% ;KF'3UR;,2K9=]VWyrN;8zHP8g_)Ϲws8$a| ZF-N7\Ԫ!T)P|q%E W'Hl!f݃o4mģk*0^x~ g x~ sjfSxVdN9 xG4sI X_/VZ2Z2zZ 9W8 `Z^Ȫ4o'E=0m<[)F I?Ϋ`SO&34LIgϝnZ"w@R2.@pGJs|g؎G=" !Oq@JLeO8mvGX۱8=iFң*;8'Zܗ ?*3֠{Gdk\[CkL|U]JI,Tjs,Ƈ Js,ɸg;j rzzT:e^Am65e<6վGWB~^sqTVSuLӊ ݲWQw);1ܶ)'c<'>٬9ǘł=.mq7=N6v[=!4ToM>|7ݨncWEvʃQ\*?zXQ *[|=aKmTmY?7JN#(=zHmfI<Cqz#DciF@=sZqE|\cֆb~Q}*9lQ}^ҁsR''zMܰHSf!c9Ҡ)'PO#*<+eIa4A#^XXg;AUe& -زu۞^K#l] s,c yp7d 8=ڠ̋zV(!ҮFѝ!J8 SB4RаoP}i$J#U-ޢ)CcG"uܠJ ?irs7awcnTQ2L:&Hyq֣;ǻs瞵gly\g{q\aԈz9Ej65؁zSX s#_Ƅ(" (36M7 ;'j; -^In>4Kvi&BG'iۃO JJyPIK.b?N((ͳ,F2gPi' T= c1¯sOXȒd:Zh#L[%[v\v¹xLTMlT.cǚUhrͻ$VcWӜSVwQ1gy *Cy|߰D1hR@`uH2\𫁌KNt&MaS!? RKTf%"$cz\1JA+ӚQi$lȴ֍#pQ[3#p4̶F֬De9bT"!CV`Q/,v~TșgԱ<QDL@&v1sS+앉sR+b3׶jlGj؆Dh+@VlWgO֡<<`Th6!nbi4kՁS:W cLEA+I=J@XPqQ`^'#q֭FNGҩrE?tXw2rw.-*XvZ͋3&8sֺΞ)ܹ5mMfr8W r޵b /ʟOZԳ>rG+>'ۏ92j #xJRMc|18!i$v&0G9 C2yEXsAe1\I>d>hQjeI;lHF 689\(ΣJ0GOQt/'=1R49+F9?3yж<D@*+ޫ =ՆF{U{ ̌>8WxjȈQޡ`BJ ʍvl'RRʧ+ jE cȫ2@PF;сc-l}3M@p70ɼƪ\yB*I>5\Ī6w#RI#O΄}*A#/\Y[jFCc* &A*1j\m4$~S@N37,x֩Odn.SL͸GE?6[a,vըbQ7*meNFѸiPj装L.bXJÅR\)D'5$s() SH%GQAG'yޜ60A1<Ա |R"9SԟZrLcnҬArѨMaemٓ"E(tLVdޘFAT7!PSUT}(I @'ma3iBH5Y$+֡rÏ~՛v 8jJRvgtf&u'gb^]GCY:qӦFpj¶M,ݫ*nd *C[9/*>AHB,ՠ1'!9m$k*Y#i j! Pe2coTx3!c?8rF.0c?ҙ\ $]:T֦1[y_@|)9j44RT`Yʬ(I@$Dn=݄WʔsJk.sO(3VnUs#(p*kԁ ȨFHBn$zUhf #rPec$wš0!# TrHgh㟗p)3>{Pʻ39#Bj$RiJ9 \~p6ҭ1B NXT[q暘f^AANjXQ:TVu]Lhpz**ڨ0 ?0`;j5&IpAŸZb>@j+ ɐTWItuwztnfIWh?+vAO!goaRZK}IKN/ (r1anE 9Zv3-ͮUYhw/,8 9V9_9ϥΛv-GqsxSGW2b=}d=; cښ)ycFп:8Gٰ cdtQ.k^nT{qѢV"Р>t4wpW4|}j)$2YUqWTH&s:}1Pe#g"gWʧZM ҆VfPS3JRcHI5gbf'譇SLݒ9JpjkDDnAY Šeq#.n##vl-ڐ9%X';}MJUHH'ҢzƮ+! ⣔6aIڜ$D}z2#<}3ҘChnZC43 be93M$ĊfVxDLBvG !c4 ,A8QHJ]͑z֘XܐG2d{weQצ*9UaSCxNBpORC7 gqMq޴Ъ6$JD:(Ȃ$f⡺X[=#ҡ# 5ǖHJd2~THA85;o0|+I'wn2)>2*S&Kn?Sk1zf V|Q2NMO&v_δ)7/We]0^ 5~hnj8WE;zXMuw^̊矧e :gE~+%ebUҵmo-O|p֕>c+Zplw=jzg0?^yoqHWkv4JKSv]֍䐊#|s\Fj{ =E∣$N nF-+w?i+<1ᰀp1Qȏ:q3G%e€:ZHP7`zp کx >_-*犱9dhpFWm &ڿZwd?>Zcf}>DCrdڢԶ`7R.ɞ2ҟn67W]P;I?)~_CO CjpPJ$>ZU\=w~tsTI!TUYCĊH0IP'P #f&ϙ|:f"x#xjг7-,.cxV>j7ؔ(`+J1Rk{*8#l#{dP[~ҥB£v{f@HQFIniKl#4-ǥE}j/mܜ{R]@o!r*})p}#{L' In`SnsH=O1_-?{{r!}{Qʱ'߽C2 |U%ISsǵG Y\eHܣ{+޴¥}FЙ%ܕOr ,Y?SMtVh|mFfnQ7cRU Upr?J&d 9^A4$Ү8VZ`wJqj{@Ù S.Q `JcC 6\qSI(_*я}irGD|8lp=*EH1v>TrǸդ b3sN/EROBzqR9I8)NiBĒ*EFqP[x8jBہԩ( 1Wm15fp Pji"YW8#\.PqpEO$+*wU'i dt=YT1R6!X cHA[9x'@0;z)SL$C:d'3$ O}uǘZ 2p)K2x_\әr,!V,1OYi+vZ@ؗ?AH6LTn>}Laay;6wzH 8c֐<N HLrwA4PÁrE=driFG@-Q\%iį< 'U[G1Y>)\`׏NWI'Pn?R#ũG?PidvK;F. )_ 0Y0YMW>ZMU~e-ՁM݊61Q?Jd;rU6#)v&>u[jcq[~F2VQ9oj3> ʝ?6?@q)jɶJNTjDVSgl*qM2h`\Ri" z [2_#lb:ԯl) GZYcg2Aڞ?ٙ_ ?=+Y&I",I&QֳͶ68!31Yd݇p_ ][rSZA%*Qޮ8 R gELŔW=)Yd!RJ P$|pGny lI.\}Ve}$r3)H*@:WojY"131Hf\6҂;{JpzFX+N .UІvcZ0F"UKUH1 P\Ƃ(1TSQepfl/r)H%ȤzN[opTx UUvuk~ݬ9H]/<.J^yF7ڂxېo)%0ǥ? 8`JG@5W͎ԌSJUeYӦ6p8jʹ>ZsҧArXBo 9,xJ0۴4= 2R#(<ǖA"mJ j|oW`)#Rpv\i^1S1L2``2c2$Y6eOLT[G̼q%x|kGJw9?s)D1H9*N*Cr|pI8 =T2?rnj Aqvci!z#pRBXV9 R8VЀ*f~lrIrqҍ ֏0;xbH8nh2iSHTMJ48^bGaOI#sABڕ*`R '*䎴ne~Xi :I+MEh6y5*@D J$CSVMs_ ?ӡbG+@vc}kCJ<=][}JbzT|OzS ^z{U+vn=k,ܓuG/9)ƪ6f7{`|$&i#t$Ld5maGAMV ,+J❮ @U_ |A?J~UWWeUx9iU pH?Z$Kw4 ",*ų4\¨we>$\~ROWKl0ޯp'< ]lmpzI!޹*-JA嚫K7jtdt`Y@9>=Wo. ˑ+V}=wnBz и"`a縪{\ԌsR<՘ۂէ<ȏO֯vꍱ"{5 D2y4;~= v"P@s+V`b<·l-(KaZqՏOKɫd{TU+ju[5T9Dck$PWd0h*s !G%j'6BsRHn*% wGe$!Drơd${b}:k; hS2={S|JY!. m^գai.9cޭDRK[t_{r-z@:: gJږ0К.qcWhDhqǵIIWqTo161S]q\f>`kbetŒ5[~ݠ nI"FZeF[ÜT1@ÌAjK%&sؖӺ=IdrOsRc֞T%HJ-P HV$H XԌ1Sޥf *n~h+0X z.:MGG8YPf$}jq MCwFR ֋&^O*cD<(cKu Lse_R]Bwr];_n6y:y &@yۑ!0ۙYoNBp9^Ѥe?V[]+AAJK{#vpy,7uP#P^7:DgVM0 j7|֫41=}j.$>f&^b dfU ˁZr.18WcR 7QNK$ V[3IE!O$9 R2 cee5_>tڶT7N۳/ (5GYç @~]JCW`U!"%?q~UyXOAӒy&-Eu4ؤXYWh*"$@iB랫hˎr(?"4~F@H Ң_ZH`y%51ɍ?Ŝ:3qN~lEIp$:RoXdKyV7Ab2O =eer"һ3J5dF횞~gA&' gK8)3fDa6 dRّ@:椙ayf`]N]VndF] e6V=0FՕvT7#j21l泞F-Vm7 >dt5=}kcb#Uhwy[\U)URsTdVdƒUH8UF+]2C*2yrx#E*H 穫 Glcrx&ö1yՂF-Q[a95]NK(>`=d5W+ڂD{5&/YKѨ#HYX?P8X>Cwȣ5#FAcLɐGJRL2Xmn|W <(=I[I߳h= #?:+fm6@ ӣn}KxĒn#i5û lBFw#u -K3R j3`c;T~KRWUce}ʇRo6U(?4yb@C|}'XQہԁͬJR9e}kJ7laHz52שkՋWG+3J\@w!/JҀ ~*'4pI5R\s˶zYc9⨨'mHp;Uؔ*z1zqZl'+J͈pZ`xVU.$S+mb]$zbI B~g8e)JĤzUH%ՎTlrQ]52Y}v *V7\n+[Q6u(Uh t*ˌg#qz%)㚹]kMExc$ʰ|I!󠋰FMzH3c8nm5SI<>Axɩ#KGz %Ԝڶgu^ƠjYdQ٧m"YKqJɅQcT*~$v 7٠򿈷4(Uϕz] #wES)Qe/=OaVlUhB˱ЮQoj0\/+01f,&BG Z Hw5 T=jƦIܞVJ0XR@@?3z$qV{Չ nQEE9l/CȥܧW uW?z(Z&ZXt ,c۸W5:7RyVèF8`܃XFP>U%@囟֭?:>G(psڴMˇ{Uˆ{f͈{پ@=dpv㌀v'Jӵ VBÎ<07$M,pq 4[\z1T]1GV0<ø®ǣyhRXp*iZ#dzRy ?, ^޽Kv[?zX[jmB9pc\<'89.@G cjj86jy]>Z+L~jʳNi'&C67D2fI,NPiUpVEQ#T(ǩ̉|1ǭ]֪ѻ>vu Y$DA2nlҪL"%H*~Tcg9 PF) 8sC ipx8Z68#4g*pjմ|܃[].mH?ޭ{ ܲ},c|GQIE$N c*9:b >jQVP1WTT(*UPjo#+ mǖ7$+2Vm~RF}i2>$zvz֕KjT司9"VjzzTW @:dtY\Bʤĩ8Huܹ#K$y5rUR[FAWlldA>v̲ԍ: g9$s`*YhIMOM6Q o#_г|Gz{ mͰ|S|EΞGk_澾`LQzVR`T],kWOwtg8X$-4j#'z@ g?6rMVBc 庹<{:C 89}94Qs'Cn4ұgvV6ۙXx1|IkXx(+7|TaBI aq޴.2@ ɧ0 p0*("2q#U̘ZiXnN*w'-ɫ zd&|nm\(/x{f͹$$ i1t~d>QiT tNBu XBՈaӃQ݋X czSnr3Ocܤ3?qYR$̬wNxzَC)ַ-*#ϩu=>?{ֹLJ$⹉Y䑉 )z#+iv겳r? U YA㝴j%vj,zUVPK>#.F~\ ~Ub!+WE+q7lS" (#cx3+֯[\-{`vBp5;G;"sR*#3p9Vfp\D'92E2#(,Ɩ"9D̑rF8VZHr 6@ y{- ֣{9gE1x}urXwݨx4D?ZfE1@sV-v}Bj H[h$*Osқgo6NTs{Ӱ*v$ΦEߴ*nMLݎ3H*V|=B*mk$m*v2Wt2ӿUV,IX,lrsv9'c75b6dn[4";7p7?LV[FĄtV <ڠG5?ڮ`kb^?' ;v|z@<>^ܾDqzqW4vf<?-WobzjcPk8U* ReAG5f^VJdyδT+)䌱W՘ ukbiD+"tTH`زuIp [xhrT8~Udr< G3u^Z2DH 1j݉$ǐ8irV-Z?f(ZTSu&܋l~f O5LU}gO_x'No.5#j@{Q-aj=NfHaf20>ͥ66R}k/)[$V`֥Kp)o?xSkZ?WuXo=Gn&~oYvUUK(Z""bڪE -V쏿cXU؇ʣ8^ґmAԞbk<؀Z[ƃjG=U[,H95Ozz)nj1 H޵n$HZ0!XMpܨ'ژNNߔeQDʼҨp dAneoɨoPMĚi2\\_<{՗Y.G^r*Rn8k`[Vf S֏`\~VLWaF!5E #|?Uvm)!c+T$eǭaHVǭ]Eg +@ZSlfUiN/PMdI2rj ^k- |w`pǜI:-JwPY%|^E\XmVdd'xfc-9RD9 JM @ncQ.LP}/`ڄb:3u?Z%i%1ʢ/.[q}Pҷ$-+Ua85 uUWrN;Th^9.>CyOaD4vOu!˻Ah3&Djᰘnomޫ)(l&9 !;y\UG&C3?zc $?&'cOº->CJڴFSpJo*0~aڟs&𪱩in#"ξ;fĞepi7ge3P}${O=;"&M dw&OFicR2)fKMt}}7mʼsI-̆jC@Q(RKZȻ G e,FbpoLx 5]db >եH#q|w#jmj2'b  $g8`ZK-TSl8BA O }&HxQD~YT'ך̴In{U+W7NJtgdaj`q[6v ;T 4 Q;NH0,xQRS'کIBscֹyXē!{w],P yy"LՎHdzx3j^nO'#$1GSZ}|tb ucQ"paJ|h5ZRnUEHsORkiB,e ڥ#-M0)ؚF# 84)msԎBǶp[LC4!gaޡBGSRK1FFQ3{^ 5!x О9<9֧?+_LHY", 6TpNq*y՞H0ݴk rqYWm tёr~\3UelZfmQL9_vҙf2/6x%G-]%6I+/C7ܓZDxSPh<9*l3皫B\pSbvbgɥ]T==,!P [JʆSڵszu/)Gӽ.؇8ğ.G?J m4ԅU#hwJ$tQ+K'ɓQK+BOL %!rINRL԰ZIrz wG5=*X ёߌɭD nY֫ $IЂQѴZVq=gqw S*Y'+p0ZIp[p4͗EP|*(Xչ98Um}!AP L?OZkI5O,1Ԛ#u4L9'*ԩ"(?dR+.3uEv'.?T)~7,Pw-'9VR,,ї#ںHYU̅\pf"n18\(v 37e &GDh 8?ݦܶoJmn .[RZ",SU&%in<N@\6~nGjZԢe0}%@9_378*^ilm- 7@RNFOEljtE ,|1 \ܕT9s+}SQ2?M6Қ'*,l%98)ȅ[98Z}*!Siu #t1rdZ#id$*{%2HdrIX`x:V\YPH$q8C/UeU"~^1Hv~xBfϘ$h]k HYqEhLc]#9=8`V mbi(UYVVe$]Y>cIabsUmB9U"G4İiW m.Z[KN*N`Մx{&pjԶqp<ңp ';c0J}j功s߷FR$z>YT`[9o:TysSl#tA֪7N' M'' ֣N,#Ṁ$ љ ;&5i-8 9mO_ҫDǽC@Zf (+KlTcYqGֲ.4#dTX7.s,9ژfoGI# h0Ē dI&y'qir4y`yj[yQ1OZi*ۺ=3l Taipjpt$ ?ֹ?ybe4ʧOʤ$3U8DW/*vdqH \8*A5%?j-9v (ylEG;N7 񦉛zok  b;n |4Ćq=kLDE ;=cc ƥ%Anj0[Ȑu+GM }jRzVS*) |X8ֳ.2vڭ N*̂=kb;qS(N9#J'֯!5n$؃֢*z Zj-֠2lGAYU7}1:SXު8f%G/'j9~Upǁ_`ⴢA*&+Z$@a! *rM$2OR'1n sMbuj>FNVǥ`2\r[qW$%dCN\?uv1*U R=V’X*{x\sU5%:ʤW *ĉFze$`TX*\[p5jzk#4zf_ cѶ;4pu XYji[iؤ(QWnYM@@Ugc(2OJy|=*vtFHK+B.=H5i1{$0 tzzI%stz K+ϷJ^',fEVMե<1ݢI4{vTK<(,=Qog3(y Vۉȋ[;ǖ\'85mܻg,z&fnY@,O̓!Rs.0|3Q,g"2;ls8jY̽v'gajI>Jc Ky+_ '-̆()d4 -B8WK<{ sTQß9>DɴmgɫZZJ3c=*yH4qJP$>^zz+(3r |Jb#2?'ڬG4nA:cے}), o}EV2 2^بzO<;|U+%zThv39?18P*IdWw۸V~}ѕdjmg~U:}jGO,$.fR6+^yRG#h;MJc"㿭s#RoH|Ұ⾞G8QkaD0Ij[%֔#ni")L-Y[I+yݝvef<XN9&IL < kE$P\=0@{T 2s!Js1HA֥2Kx ޥ.,h*Ā-mDenOi@xSn92zXW;!!ڲ˿Rx_#k%<;EZbB sS#=[uVNt_2Y`PfEb?09H%:TK UWߦjt^g܀z`fBT\-,bIk.:;5,Xq[zµ4QN=MkتYx=+^8b)XȊPs6=iRgz5-l+W6hYU65P[n3s$@-P,y##IjL\Aڬi0\t[ҟ106ޞ&e[YJvsLUvñ~u^3rx*+iN*+0kY]<9P1y{V|9 |\UYKH{T#r'_[T#g0ip@~$8j"5 ViG!^IQj8#h簦"PK+1E5y y.e@O$QCȋoE:KQg}nFinoB ZPaRH'+&o$A=*ե6)ԚӴ4HÖ?ʴ` rM$y' rjBarD w4۩،}9fgcQ01W4M`TvMN-c~zu~jү!Ȭi.**Ў F격ih!msC} cr7Xz}#JX: >pVD#SJii$ ݰC=I'VPqҳ&/(U06JIIgĽHB4 ~5jKKxjƷƻI.r*MQW,ǥGnDzF𚭧G\PFpaY_gef@1UndϠ4<کIqrsI' !D9]Gn®^] lV0ÐAVn'A0,P^m^j3iZKI7P6p)-koeQA ]G*7 ݗ`AihV;U0.Ft` @U^tNX XeC-W̸>cީhp4F#?cUӑ+|*mVc1MR)#PwӐ,r&."NYbrKQbA5ƣfmGvE]7fyPqET5ͅln\GSUUb~gZarmOG!y?G7uI|޵yo K; JF  uq2dmv&EUQ )!bn>n[L4IRYH N*9 [_Xj5z)5 7Eߤ@IKdpҐDj@$ks#,0{g^9S)j>=f-&g`GQѡL¨SU'T#ΦI<$ ձYXKrFw6hʶO3I,H?t՝<*vK%EVۄ^>Da9'޶T->L8pVjI#`U@۝lrpŋ皚%{21?ZU Vrٳy@a@WUؘNYǽ˞%nCYk@]9Zf}9sKg K.1FvG(5^ YOAMfƍn2Fe*}k ufV(g9\:frdo=ni%; :QB ϰ%Cm$аV(O.1 ՂXp-1*(} 2GYZ98*ڨ^\4vٙU&i3i)4$­Y(KIn2B~UjmSԜR33B?2cƣyKwNf$lTb F:cRAi,ڤp#^X9wOZKd2`9(d..%@^ 2E,yfqQ͐} T%EEr 9 =KX`*Ko&.9ջh7]VΛf|!W'Ҵ쭒eSLzF=?w-4%1j+L?ZjUSaWUNIi@ fj}Un}m!Տ5kfGuVMeс߭o䀼md`ֹO8C)=N շ֛)d /Pj-P~U[u 9^{MRܧz{8\p?5L)'{s'AҜEˀs5$M3>SdIUܙn#Ұ6Jc"<+>jk jr!n?իWZ$UQIWFq U䚗TK`1Z: ս@ ӴAk&&l,ܸ n=k/ǽk^Zk>N8#"M bCx;:qUh88+KcVJh)cVvypIYHAPzo*Um֯9$vu4Ff12"h].Tw`^6QS(#d-2zm튣h ??V*Hˊh)ݟjYIny$V v9ћ XpÁڪ+6tX1jRQHb-ha^޷<T d;@xU2:gިo8j^;UkUg{ f V0xi,UҤӆ,pJ܋)>퉧p2w> t$)OVb`ϵW8dpz㰨`vm£ܓ9b*| p}qWy 0s0صזAکs܈^y~݃- ջ=. g oe,rqHLSld\p0kfy+fCcub\ORHWߕZqñ9;*9i]QL rsV /Vd"v=@K6qq zWc\r98H$䪮:rMa볖xnz_mVb|x=XĤz*ː^٪+5Ydp@`Mn[:A5~zքI >4Q dڭ DZ0B.H隊HwH|~c֣|bA<;sVQ0L#\Mͳ #XP jp$˖i'ڣD&bj8~}2 |dCl~+m!>LQOֵTGK#dcϥȎy$u5VAڪI9SW~&wLN8Ž?ԗ;1>j eOJ=sV4ޘV 6@扤PsU.PPs:fj;O#֡VR  dGFd|<;yUfvv9VYv'ѝV-(mň?Nje 1C XI`a@M@d>I#ShLw+K >73I6# ΋Hn+E¬r\検kү_3[Sc=ӴN!SQNH)-Clm(wmݳ[Ъdz$¯d jG,r4^D*ը!Kx rOF1ưB]Er1nv=la*ޑAʪVD=ϭmۭ!p7ZPİRT% ǽ!P{GtQyw}듿V(&k6Lcށ;ՋKm$aZY#$pqQ{pJ$c_6Viгb,d`bS['yH ޤeT͒yRKn"]O:TF ))/3›cT$7z+E|S+'Sx<;TdVV3up:`'$ <՝7T$gOfpW=+W0\^-,{U'ϿwrM}ȁONٜti6RGj8fMV$E=iF* 1D*P.ʫ=j,~]U^"ƶ*p>B,%B~dq*+e@O $)47s뚂bFw9?/˄pO4٠`c+۩ca!i2y~Tx$VyŏGvvvKgbǨTk.x0X֘<ZDi 9OI{r{jFf9'zS݉&wf$0).W21lp8bnFj흴VyqfAv_4g ARp`*}JXݪ['2_´hNָU:?[Vl֋6ޣ5mh*})ɻn8)C!=(e~)b5*=PmSԎ2E2iqP}+SIQU;:os' k",z?i<.Ӽ/5` qU¯Uex #)l.y).F1=&O埛dT'/GqQWF"bAc(jƂ8?AsYytz/caLRT}ːO<6FAJ>hCNh^Ii5[QpI/vM1 (qXopѯYrN>Sڕ"3rTm¨;2Bhu2yңHyU*#3w5%ڄ#ʤ:F!%j.t ¡~j2I8f~ֳ݈& 乮@9!\V[]竚u0{/Vqsn0j}mT͛h*yK/p"AR ̿tJNK6=IbK3zV^KfrPKF+wE)$@}dlݪ6餓P'3 +:Vۮ8;]I8ܽB>fӮթȖ@})ײcgWJcQPM)A&@_C g!߭Glźbێ>aUL0=@φqK͞zR+K7ZErzU;RHђH+PC7Lt7L%S'cU┇`[w.N9m#8UM2EjF3Djac~3S! dv,jC$B v5JT0NBQU?0 f'&smnOГVϷlVT$O^%:7< !S#L5G\p;z HA֜BZQ1ޤSANS땀7j"(̇-l x9aAcw\er>iHh ).fsʴˉLdSi`{U/dB[Œ(5cO I3uOc/nmثVBgCrbʻ99 ,jBـKj#5NKߕYc7rOR{U"-{v9HPX"yU5KFzsƪiIx(2OSsU1mר*ml2?W`^=AlʳUr [+n٭vr}[N";Vr:DAXz\;fy4=8fs=]1Y!IxS5~)PQ(0$*\g82q#H*qy8Oֆ5a?G/xU9UwA&#RZI6g}aZ100}u0RC`A!V*0UZr@ ?ZEéJ@Iw5"FQpV/;PikmJ˶|gPV($?&Hͤ.K|Gl\rwsQFa x h2jЕbni ۷1۵Bsj0 f\M.3֛+–rIj5@GtHT&#rUxæ:QLJ չנ*Rc-YE8wghvln#ϰ=keAlC5#gJ69?LDWiJЏQ d~V= 6@gGAҭ[XƩoSѶPq-Y֫NNy5j@N D 9$R97Iܝ;ӕA;jECT]Mcˈǯ5SQz-=bV'' ǷGjމ?T,lfXmo% @[YBZ&?t@_<_{ͰV\'>;3saj3TjM`3c"XIԒrJeC7!M.O"_g3(d",fN@=*<1aiD)}*DwLaȩIYI;@wlڈh\_vW7.x QfH;lai3+,G@"#i̱W/M5[r,h 1 JK& h+ד"m7#=UnG#PXHR`VRTVV\AnHȩHn+I&T}>JFf:u%FySS ido,"-`Ur=80zS| :3fCoŸJO)n'kCIH>: `9 Iݬѹlȡ'F(w{j2w^sUTI^euE T_Z[6$ioYSy\!{"{8l*OJ6e=[֤`Bey+;lr2E0MpF?5 + ۷MfjeeGx8P1+GJC ڸ⧱j¢> 1 gw9,@P˦.?Ɠs 5끊Э0ƒfLw8VBe~2kr,$Pw咜~.ܹ =h eMtg e HF:dS2yC"mrM8!ፃTMp>vFD+厘Ubd]?Gb֝u/GbnQr% ,sA-@9 4:$En yi©Pʭjev[P<6՝-8,:* "v`BQ*Θ=1SI?zWHo8M3Q Ov,nAvM]|3#cpdr*fCgVR%s0jUE1tS<0-q6MPHi0,sS>D(es!+6Чr@,vq(qQC\|6* s4blM*T7yTK(ڡZk6ߗT$('ds"$dkz(b7pee#2ESf+- ȒCxf ΖBOJʞsxWyJPHqvTiBa9a*[xiЧ݅:lggX>a% +lST9)C֫jjPeoxZ B%^pH9hblwքҘ֤,̪d5;Euly|i85_q$nv+VC()+ɕ=&F;Vmte *xdž&.)yMUw?1E‰sSa_&6i0zR'ԗQؤ*Iwi0;9ɥEfE<8ѹI88T(YtbTк0Z6VץKR#JHTm͓Q2aJboAڗZb^[bE5UemjbmU.cwgڠ" 3C|)$(J1cEǎاEvvunbQYYVC6)=9FXUm,rFQ`9$lsL~Gieo!6~,Vos̮*mn(I}( 4G 6*ޤZ5 {A5 Ky~?T{c>RT A¯50t w$Ug-K ;ARHqx_7o<\yX I4 LgԅSU=,ӎT}AU]q)M6YF6R H9_z%IF0s5Xt⨛ybV}qULەT5$ U5V@no %zU{5(T9'j eoO^Y~]I }zⱧK+Y yTnu5,_ubgP{7[ިfs6TI#5=?ԷA#Ӣo4b}ԟ zG' in8ggޠ{\KxH̑c 2( RLl~bcGq]Fو ;#YӐS~b?3\򕾝[ý^JxvQ3P1BrGF RsRy4s?ֶmGS5iQC bCY>VzOL.\ SRpq:TӲ]q'dđh||ZK2INqԖ侕SQGGqUى(ڠ YV|T1MpFOjj2>cz [XFFZ<[ewi)Vfچy$3N2p -ĭ!d8$vrƖq 1=o. 4(6qgEݏߚgc{(mPnsU<}y ~I{j9_!fnڣ7bZYT~3Ts9V2F՘TXjLXmN}j^~]b"f'`n>J1NjY|q*iύJ|qRGXLOBtc(/ODPal0 6(Sc]EOz{pphʅqDXe#L6{j=< q;e듚z5by'T>da99&ܠbH=1R;lm,Է#cGKtIGJ o57;|#Jj)ީ^ߺMW3>Sީ=Ɲ*|e; ZbG#[[_el<ki 6Q[6W%J}1N*}J/z 0eAnYȑ Q$jg?ZjdseLgn1Z6}hH|[GǵC+q}&41 px>AYp0AJK0<Dʼn;$ʈzj*&?5mofin۔f\Ϩͼ*C͉dQV^p1vО+"O4[qǵ9?ʬy 9:fzj)ɴw/CdLP;3ޛn8 6ٌhudy7Q*Id䎔ZFyysUs5[0kI ^1t$ʱLtۏˊZ\*.R 9j%rsN+"lAJF=zUؘ:py]ug"\["DB,00#Brˑ~Lsޥ\0O׭ (m Ohi,ObP^)J+n35PӺO2EJ}qYQ?ʫt>ccfu_8?ֵB.-4pɨ`%afBT㓌~B"@`:f ]^&1J{>lg ;F: `gZ&L7d4!8ҥ^8ħqb8lqUJMxɷ1džaژ$yyjcW-U[DvUWj+hsqg$_O"^2[AxqQEH c}M P0AFn1jyQaHSjYc+lo0?:dqA1R=KK}#ۑ1ާ(*Ųs@RqT6ff8`Oҥ )$LnS0}Ery$Q vj#El;sUTl8OZL*=R0o+WFKm& q,Ѽ-XzU5lS{~ZI`cֳ4C6$2+`v5ҷ* WSϰUT'[ :GF8]JuA{Vn]P\Kai$N Ʋ$e"|䞵tRp t G%Cm+e2*S.QP1;U NPIBjDMN墺Q;6 }E6tY$8>⛨m6pHOO?JAy5^!E4uqb\ީ Ui?҇E]rMu ꋹ(GJ#$+6hC\`*GEMlRr:?b\,oLV-O኉Xx}xk&WԷXCd杨ƪ"[vXU`d,BpGzjTpGJ<7 P+iW?w<Ջ/|sޥ!S0 AlEPw\T{ڀgYTNw/Oy )ޥFA~G,Ƀq*ܖ砨 b=hd.!z5*>B T}̽͵9Iy 9<ݪ܅,iܣ*2=v#Ƞ|HLwT(噎e Br*D@>}k2*yKGV Nے)W8#{T 7A J9`U^@W'Xѱj̰5z'bI}%K&tT,I&3yd6x !K]9U;n՛(\lw0qhbÁU v ?A;N2VuJҩٝǸqZPȰ`9?jiB9[l3[!XnU9#YhZ$eN gݓ' v5E+.z63\e8؃ Hv.աظ\DFrKK昃zB0Q!\ Ц։p`ʅ*Cc; Ok#R5(FPmYפz!QsOnC2=3#0T>7Jr@hvº|:%S\h2"c0J(!Tz/P4|籪2{U PL6>iuqvajvA.g+,q@PɃXCG?ӎj֗чJfi؞Uu/J}A0[ݻqPڦ{qP&I$.Q崛'ٷdǏ3RGJ~l$96ih `sU$fUR=1#l`#$jq*g=1We.F{O%_#T&9!?:ڢ+?j{$8aUkDJdr\ $iS< jHc4pAnG*@NڤUsOv@[ʵ [{ dqз4l} WќO2tmw!~:0/&V([yq*)?A]F{*i}^] /Hؤ 5{qNwTw Ūbxbr d9)1w kpS ϝLPw}qcMU{SDH{m(hFJ|(sa1UB/6FG1!OT6 h0F#h=)Id NJn8j0Xޤ Q.GSݻ.:AQb&(FiI]V6 "1aSevn҂2`Tck S1P~zs{8L8 ;l1W>bE2X`jhS(xC zeU2g Q4e:B93(%AQ=҅7M (A9v#<'> i$lM*4ȕzsdaʏJjuF9GMy`WHp,>jĆӓK2Jvii0T,xJ>$FeAP^jMq$ 3Qyt6HFp`ʍ84"fyS&wj eVoP)?(=)$v_j[?Os깪vJa=qKiF˖Ǿ)-a <HڔfX6W/%0\0G6Y7[~v3ߚK"(#ޛ<ʸyHX\hT.# 8 v0 g3r ^4XMDY=M;L^/#"fXe hꓴV85vV q=*DsX ~y5!b}^I*ǁ.YbL׭=pz>#Lbc#'YIrk+ܵUXޢǚco*ƛ埴=B?ʬK/g&<W@?OnBIVA_i6I1R"vSR[qҥчe r]vNvUЁ8h>Ҙ5#zg,L :"rd9-PBX8 ز/?^k!#E<~NR>:U07ʱm9VQ*x% 3{›n`%8"^d'Q~9WlGwbGӽ6 $:~FwJL5VVmqz$$lb[P5pwp)H#ylA⋉Gl2F:{I<߂8w|W6nSox%c ^\]5!V-F`0DRڊ94oE4[7Ik+?6- T{V95ҳcV+9MbuX \z(g?yA{rpjg>F3aLunPp' 1cOU*p>^f\pU Uimw p Ԗt-2{RZaBw:MovIoI|(k>ֵ3)*ݖppeI֮XT}~yZiiV\d̳Oq.0Y.K+ di8bxǘ#`81 H=0IJLǓ&@lǘvB4<-T|Snw,Oj q)uhSzgӡN6ss4xic4ߺEXB?WS ̑{T7C˙WTi]FlX00~mmSBLN㊣nF8j U\u9[b-1vSH *#<T5_# +_EE3s[-Z&L2Z(wfBA| ZxMFG;BsnURnENdfx>lG((;º  sQ@e>D&:pMq<9^q ocZsD˱K!DY%Mon?#R'$oMx]l!hjR4=]T\o&c=[ ~ HYLfBvH*S?.*dr,jY$/P o$,w^2B7,X#O2bҧG 4'?]7̨ A>nHrI;y' 1 @5z o%{{SJ ~Wlvէj~Yq;S S͜.^ A-c$*enso{|楟pPdSV5ȯ :|Է/1W9jWzQ]3 "(o<:rVصcmqjXEg<%@> H) PI n^6H;O`j)$$ =*, RDަ1$RU׭hƧ$mڤ'N땷xes  $zݳI媞Ta=^J6ks 丷S( 3##I} PfV{!|UvJ"@'Ҵ5k_*fѻڮpjbdjJ~\bp _rkFBNrkӑ6溍"w$i47erc;H⳵50cwzJ(N >RVFz28ҰrHCF~ZtI'ڬ&i|TRdl9"ug'I8Y:ӿY?4D7ըSÜn%)4-NwVoh]#q׫\@qUf'c]χ8YÏpjWthQaWUBy,)J#Kb[tINư48\` \98Q*-^*ôچiNjd"Sq9rXSU JLrEEt8f*X#`! z4B_ IjZ%ˋx9)qI#\eRF8Pwj2RT''HWOjЂ6Q9sV,-'_CVk9'ڦ@9_>ve[˛,`'*ݴ1sҠBd*w>RIlI\]<)J0PN=qmaW/Qc0?"7$n?3y81Rgf-O %O5ZlPLiK3J2ZԩWB #je :ge~pk݌vMa]OԊCC簦("1ڣQ\@@2 "|n^Fyclw\Su+ g ǽLTmUPo-Vo#h<6s*{`9$S<~V+cžj\x?CR(n;%bŒ.vU}[ yQxpi5_]ڳƫ 5_V HNFHN蔜,q>@@\DmG~ $y7/24FC'_ϊKawtD;>F?ʴ7HcV֩G#oα`},s :ˉ0vM\\Nvb~5gdjI>ZZW9I}ۜ [DTa9lAʕ#ԜMedßT%#+9SҪ+;P9V|LvzVdӺJ@lQdV6~ec3+8*c52e9ֵmſ/"֎ZNdZZvN0P;TF("':iA>X&*Xo-nH_, bQr(LyҜ~*Q1񌜠hoPno&_C=Cз5hG;EC1^$hG* ?0{Emk#.=jAn=f[ HU['\0I-X#̬ 4d<Յ`a ÜC3< iy3ZC9$ъ|JcYÙ[)ȁKq'Dqfp*EƘ'4<*CWw5I>n ČVQU(ui+`X/HT8rGEg_H.Xz/Ҩݿtq\$ Tq8RȤGqS`{WCҭXDi S&q#=j8VP~tjBT҈i>o#^siC =jp[*8ǯZUSEc֬M6SmP[Zی|~_i"zM2m㠩aro"YGޭc1^b򀍛0-@m`2 qQ?qȥ_HHޚ r1i0ep>j1aƒެZ1*1󧯧fD}éֳ Fg5$.֡zf$L`cO=vZx-=!?X]2:bK}S*NWts棐MG'ȨdsLs[pj9տұdi5Qg n;ԶHI$._rrirJ2+V-N*tʹ2ET[vcDí3X1pX0|~_Ēs `,\wұ 9ny~!o&1[2pq[ӊ>aJU G`R#n94}j8_'Zdɩ2ݵ9* !IV%#^Hζ}>F!jXlکmg`o\Sȭ D ֌}BA-b bm;*$?-~z8Ԛl4.SNo[WEI#?ID\nC/] "ҙ&0+#yB .}hGiwJ>⦜Y*Ŭ[F*.}jAR1? sXHNAaqYѐG2lBO6FT6wڝ*C֫ݟipjmW1W<$=zVj8MK&@W$X,/\̈I9b?*yP*qT psQ=O:fd8ASsxaRD|ҟ['D>bG$ChFFO& t|cYN[Pۣ)S|ֽZz)&ynf_ JfIH=Fj-j MZS @\Ӵsqpp1afc0+%Hݘ: WGx3p$ #lȮfVY\T^EaH#cýQ{Eܭ@mZ瑕#"KVbz 8V;GҦ$+Sd+!r6Rg`҇n21Klؒs#ҋTۺ㨢2KdB0~&pw~&R9G68;UIdNxP7#R8W.No6x֬LLYFȠ4 G)֒\cikZ!MSj'uQ }j)X?={0: 1Oc[d~! K(Sm}j 5ZCꢫM$z'x,ΐc5j!ʎ*h ڤawȥwWoH$R79Gjp֠ 8a\C#nブ]|e:sI$'h]LBg{ӣUIT.xYYV[Y.m8R96d2Mě(Bf>Ocaǯ+ex#֦;N idDȱUh'\d%G奤c 0G|Ug*jk©_=PV4=j]10L1"\*#5kۚFf xT*wc"m.sP6TR.1MUj"C!Wo_Jv€}*THm,0ƭ,j1ɫ| 8%p܊k0%wn=rǥ& ^9 =ɣqd H[$A1}Ĭ=N< ›gRGH?Z6zd|ѿ|$`gнLU#ڮ\TPHcɎ H lpN TR9LH<ؾVѪI6<4]$Ż r@KVQ^ 7_|q])LOٹ8@.6O"a|уb4- ǔ*AYm 7A*;P@v: dBqtLpF{b~R)"#$5A߼ic]qOE)7v4] \0xI?vx#?0ǃdڤ L\#I.$d9UؖnF'Ztf=k!(YKU0Wy\nE!ڃynFVn0T:) OR@?1<~4y D1F}XHע"Xvơ䫰Uy*,sRL,ʋ`y{Qp[߽[[QŽY1oBU1jلaYKfhf'<5Q͙YwD1UYZŅЎ)0oSB{)_٬˫.(yZl|ɂC3/z{a6̪m XMmCni\9[+.3~^fdv*+;CY*G3[G`GP"sDunGң|nҰnuGRG Ri<Khi. kU_N! Ĭo|c5\  $/ R;pzOX/lv5|3C (' R11{r6r0=t GMbponr ⠖o |4 Li|T T圖$/5NI THy' U$_!V%$qV p7U8L̹CsڤN}iL9#sǵ*Hb`~*Hc9JI00*å$)8<74\0'֖5cFWdq^b鬪뵆AIKIT+VgI;vTnSܽVͷ<_ys܉~fstcS>՟=KSmN'7Lmjnװ}~J6Ӭ-AeTQZm݌g;~<p*H דҦpspE=lݞAyH>(J=*ƚ-kAAWS[J5n%h$ 6ax;.TpFYzͶJ@u,1Py|m+rQ"hd<`/HydV9*}* MO~dZK (Bpcfd*D`Pw$qz oPqQX'UYҩBCjD|Nj5QA$3PEr7gt$~(hv:A8䃚y퐣`m`̻m$~@4H6= R3M6>8myޝj;p^)#=S24|E0d*#dAO O5_:TR F{tڌNe}xm9,5UoѲ{R[u#%. }6;`CnKzӾJwj%ГEY,Y˜>vd}juuA31]~Su5rO|ѓ+YT!5oDY֮#,j9 x\T,=*Λ]14Sjhպ(uwdc?J{AECv\L}Ȍtqq3p jijYU!ēΈ1[|eCa6j'~Rp1qV.F>XظQCe7- p$dOPwwM ˱>LG( IcKuS֌EG_jhMMiD8 h%G4$sY1ST C"ZEݍZҲcZR2AV9%6lQVŭʨ=@W>>3m#M[TwnձGpȠrqL 2)7t؛vW.1_ӭ:sA>N9=kXxLVm`~vVDzqP2`vRyw_ݦ?Vƛ^jڼOjNGҴ4K7 jjRQE 2=ANzȹĭ ҹ8w'ƹW|f@UsJU86}yZG02X,e1njj}Sސwiuo+J8v.;sUuky׊*`ep:w%Cd/NXKnH)ɩ 3iCh/cR>sՖ9'1JIُAL/~) p>v:U٤38 ;? 3ۊ̕ҡ;d?JH7LK翥)M5S%sB2(JtG1O#HqCT^ g>9>$Ske1nezӥrZMy\\ }ǭTV,I#=) 5fBr)oҤT\_.W(jxv$V_Ҵ8CK@}+KTVpLZw2(aϳR;:q ressW;5}b?$׵[VG 1ƓqmqrjHF?Z?L 8hh8 ޜv{ւcV.{j͸{sMe* >-Z.M!V57VB^KuzJn2ƾ{ɼD{{֎ơySu4HBA##< H基X*Sm=*5l?'Axn{s[q?V>HuZD!Ti@\~TI ?*.ޠpDUhLV`IaUm(t+~D(wf4JF],,hY+-f'RYI; ci5V2\ñqU[smV"e¥.{9UDT>5NPiC|B>Ցs}jIcX,~f4hR0s);T*Ơ$-$j>Y.bo1ڝ4:!#v>ZT<zUi1A*f<HC gʡª⡾By+ޣRWqDr9RbdjuWpGxfȨy9NLgӇO_AJ4Q`SOrG$T^:2u>PN{Uy>IJ OL< >aK qJ܎:A=:p~4:b`?wnI 0 &H˿_j6.ҟhc#3F-r=GJ 섗8v\=*Yr<¬UcA@s2(AIJ"\q=9318MD'aLޫg#hNj+(L0p-ܯ!RFZviS"_8>{u|'֮-=cI~ut&PV?Η!!>T.mČ:3g*>d̓l}(VK;C*}>kP7Aq,0C~tKY@-hK$e\y|cOUk>Z72]1בUnvڿpsNh+ #*`XqT4!c Mn&pW9QEĮoOW#݄N«Y6ۤ=Ϋ۶&CqQ[&SYZV=K5N^Lw-֞ /қ+F+ 0ew O>Ioc0 p!^*p+( +▖((((((((J(J(J(J((+$i0ryp(|r֛ʬь+@jĐT v4ƣWbz))oF9jff{UW\Dϭ `+X՗ cjIn8ZY2IU[T o&>tKFV?ZFwD$3]]IIIIEQEQEQEQEQERQEQEQEQEQERE%RE%QEQEs[2k @=k.qPM|/רW`AQAR\/*p?*N]Iy\f(Tih w4ScH*sڝlȁES{R]4xnqJ ˕)2˼RzRNB{F/nv2=*ׇ o='A[emSV 9UkkkSQEQEQEQEQEQEQEQEQEQEQE-QEQERE%QEQEs3 9#jJIrɪbњA|P a.*B9 qJ^?Jz y6' :;AU瓟,v؁iH_z} Kj[8>W>$ =OJ\{VEr瀣Xk.9=W*=K$Gr8) 6D 0QAF'{ b!Kn~􇏥"DzןŶPN:w]u>ɴb nJ cme`WMgsI0Urm@@9#"ZZ(()((((((((((((((!L\pbF@𦰞VD =*˺@s)g #*{Ui` UHpN: 2n*B$GG\ llU'Sɀ{TlҞs>ޕ ϚFqG\ U[U<5H P٨i^8.@FvV R%Aދ%Y\QVTYK"f9\~WK]((((((((((((((((̴In1ϕ} s-raD:{Fj\o'ozQɶ2)힕Kj"ei۷Z6S+qJ(JZBrX=뜐o !bdc}k@\3wILKXP! p[H(jP#pw4LԛBU?:b3fQ[Vr]u~]P?vu}J頟c[UZTQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE-VSY޼| c5uFxOjNJf>P~F^Y7KϽs#n$'$ l>ĒZb p99Lqp=j@ 9R1>jTpNF 9'j=j@@KuSfn2MWrI]\6`u SDg5̧Mf5Zv((((((((((((((((+&]̍W&f<9ݕ#μFsl7ʸy63SyQ@~P)h((((((+r΄I,95\sIh?BGp;9dzQ 3I#Ǡ; ,x<~42OZyp=sTЖw59lUr\ҤKq< ce%23K aek1[xR50MvDĨ 5-IEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE\(ĞsҸy'zW%(^Npj' >[̗AM"4#Z|`00I=)>P2= I**/bFd17zbL廏J45l$H5i1>c]EvQmQ$օZ4QEQEQEQEQEQEQE-RQEQEQEQEQEQEQEQEQEQEr$cf fv޹14W)zQݺLʗ㔒䎠riy1d 15?2G蕽.^AC%o mZ((((((((((((((((((KV|\4# '-\~6v2HPr>ۣ'x"2p8`9c'ޓgzRvF#i8S94H P:~ 1D:5tU(ٚ!0@mH2hT5QEQEQEQEQEQEQEQEQEQEQEQEQERE%QEQEQEW+3JD1ڨm%~zE~4a~n~5ؽN'ʼ+eSGֲG ҥ )}QǦQEQEQEQEQEQEQEQEQEQEQE`g sEQEQEQEQEQEQEQEqSHČ %bpOeIa{ Nig'SQT?$71N/Ul#],logya)!p?o+"2&ןWSFcBsz`~^*9})Y0qޗ>tKEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW ?뢮(Z(((((()h((((((((((((((J()h((((()()((((((((J(((QIEQEQEQKEQEQIEQEQEREQEQEQEQEQEQEQERQE-QEQEQIEQEQEREQEQEQKEQKEQKEQERE%QEQE-QEQKEQEQEQEQKEQE%REQIEQEQEQEQIEQERQE-QEQEQEQEQEQIEQEQKEQEQEQEQEQEQIEQIEQEQERE%REQIEQERQE-RQE-RQEQERE%QEQIEQEQEQEQEQEQEQEQEQEQEQERE%QEQE-RQEQEQEQEQERE%QEtZ(((((((()(((((;QEQE-RQEQEQEQEQES# y=){)QEQEQEQEQEQEQERQE-RQEQEQEQE-RQE-RQEQEQEQEQEQEH9EQEQEQEQEQEQEQEQEQEQEQEQEQEQKEQEQEQEQKEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQERE%QE(((Z(()()(()h(((J()h(()()()(((()(((((((((((J((Z((()h(((J((((((()h(()(((((((((Z()(((((J()h(((((((Z((()h((()h(((J((Z(((J(J(J((((((()h)h(((J()h)h)h)h((((Z((()h(((J((((((()h((((((((()h(((((((Z(()((((((((((((Z()((4QEQEQEQKEQEQEQE-QEQEREQIEQEQERE%QEQEQERE%QEQEQEQEQIEQEQEQEQEQEQEQE-RQEQERE%QEQEQEQEQEQKEQEQEQEQKEQEQEQEQEQEQEQEQEQIEQEQKEQKEQEQEQE-RQEQEQEQEQEQEQEQEQEQEQEQEQE-RQEQEQEQEQEQEQEQKEQEQEQE-RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQKEQE%QEQE-RQE-RQEQEREQERQEQEQEQEQKEQEQEQE-RQEQEQEQEQEQEQE-RQEQERE%QEQE-RQEQEQEQEQEQEQEQEQEQEQKEQEQEQIEQE-RQEQEQEQE-RQEQKEQEQEQEQERE%QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE-RQEQEQEQEQEQEQIEQIEQEQERE%QEQIEQIEQEQEQEQEQEQEQEQEQEQEQEQEQEQERE%QEQEQERE%QEQEQERE%W ?뢮)h(Z()VޝNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEʎZ()(JJ)NZrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2袊(((J(-9{ӗ:N(((((((((((((((*:(((J(-9{ӗ:N(((((((((((((((*:((((iN^u:((((((((((((((((:)((((Zr/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETuGKEQERE%RE*/zrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEGQtQEQKEQEQIE/zrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVC9#D7dQ 9ZZZ((((ޜuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQQu-RQE-RQEQESޝNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEGQE%QEQEQES9{ӗ:N(((((((((((((((*:((((r/zrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEGQtQEQEQEQEQN^N^u:((((((((((((((((:((Z((ޜuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQL:J((()(ޜuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQQuQEREQEQEޜޝNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEGQEQEQKEQES9{ӗ:N(((((((((((((((*:(EQEQERQE9{ӗ9{ө((((((((((((((((:(()h)h{ӗ9{ө((((((((((((((((:(()hZ"+&sEj$H952"NS(((((((((((((((袊((((ޜuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQQuQEQEQEQES9{ӗ:N(((((((((((((((*:(Z()()W9{ӗ:N(((((((((((((((*:J((((/zr/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES*:(((J(/zr/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETuGKEQEQEQEQN^N^u:((((((((((((((((:((Z((ޜuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQQuQEQEQEQES9{ӗ:N(((((((((((((((*:((((rӗ9{ө((((((((((((((((:(((((/zr/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEW ?뢮((((((((((((J(((((Z((((((J(J((((((((((((()h(((((((((((((((((((((((((((((((((((((((((((((((((((((()h(((((((((((((((((((((((((((((((((((((((((((((((((((((((J((((J((((((((()(((((((()h(((((()h(((((((Z(()(((((((((((((((((((((((((((((((ҌJ\J0}(4`QKF>`QF>`QF>`QF4`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>}>((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ?諢((((((((((((((()((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((J(((((((((((((((((()(((((((((((((((((((((Z(((((()h((((((((((((((((()((((((((((((((((((((((((((((((((((A@QEQE-RQEQEQEQE-RQEQEQEQEQEQEQEQEQE>>>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>O((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+ ?諢((B7.3MuW]Ȥ tK^+d"prsҨM}dt9z za؂"x'ڴ{0öjԠ7SKpY% xEM298?O@ ȇ5ppzQI BNi嶲0ytSR!;d 98Vc叔<TWs #;),Ʈĥ–csըԱ5e$O8G!O>8V!ON󂓶`MRR9MSSsKmpB7bhFqOV_򧹫- .=ᛮ@/JqR+ q ԊOa`֦O!{T9CXu ;t=}1UNyS5#9=x5GP01qT/&ےUɊd^oƣt 5V.XOҪ-ʩ$ɭ/#m#ڵo) 0pTl֧b9}9#*G֪]ɍҏ}*ÜGJ;{Ly\Nsҳ>9޳v5y8 2[T4HBg늒9#F( &G֡f;Ahؒ=1 YxFnW#sMs?ML$J3"ʹfTfCŸ?-Y{t׈yҟ psRŃ2?:,Tvis" q?zF6>RFwxiIʀ;v;ӰC'NU!cµ*X7Ss :n_ƨ[rnypgo ,MYP:I+]=1Djе$yU *.Ań]5!2id%8"ΆGqR!>|Q8,w]uEQEQEQM?{=3ܘ˜%V\ڜzN"Mòw xFM?TٙZ_OjvL D>!%O k^-N>եy(QQCsd"*,{nHaGAJF'=sOeبepi6d攐f# OܲJnaW손Q#wPUzM*`24ʘKk<=r;x9U1rCޓ`RVt+)K^j e9FEDł.Ab:inv #Ɇbzhۖ?J};> =@掅zi`<4d.lդtb2%pHȫ*"1cTu=#8u=쨩,p1֩ZKP{Ve$@9T+" ts$'9 ?֌O52g '*Hu+R^ʫlwOGAn0MTy?Drݕj3 '>aF#;U@u P,dtw~F~4b%fb!FÌ )cC)xٗ 3H̷.OFl-lqۮ袊(()é銥'~]Yձק y5lD(l"E<(QN1U5q5bln@+2L$Up<{{T!P dҡ}9=)$ҝSJn4k1܎A;`)3Hi̙ffp~ce/3g>II$aXh >`qlު<9HO@±*k֭in36_(?}1SxO?cǃ*.o$}k>dsbd/j@$/jUKddAUniq*m) :c:0݇U0C,d|NO&1Vp:lUqdC튧8jfC Mi"~YyWD"=zY4 /ʮZk L0WZm0U[ZZTQEQEQEB~9'j)".@ޞG^r==:ԞO* ~5x+yJXd#|9oyDۃ0F COA39T[62 FL0JئL7 |X@!0~=pP1;r~jeAsXL3bN[*O+'zI9@;@IߦhKGaA'Iv֟Wx.r v*JĮIHČSBvWR*6}H:TV*=>cRHX9V"V5RNq*9 Ol%pvw ,g#UH\*夋"dpA_Zf|۸-d̞u0/12E3Ro68ʨNBn۟UEnW{sMzS{qjVqǹ|<5>cϽ$3;F'Cٹ‘y.ލ r8V=j0'MӭW<qT^KK քQ ?(w[Dv\g+R5z;e5h#;֭DiW+^EQEQEQEQP\1kG(0=?.hFU6תD-:oxdrqT3̓8EE." ҩqr;7.%`8PqZ7V$m.N'"l_Z|eA, dؓ6 ITlɖ8rC|ڷ$'8a 'FUFG0M`0 l"/w=$I U/gcJS*Gzq)szj܌!AV P3@jblRcqS)2GO[pOLylzc1jH5 UU1ߗy1jS,͌TLf8W*L:q52f9 n֊㩫nwZ=* * 0)O 4#R)6P3zsHKS"\|91:cs. zme`G'i#ҡ!aR:⡖cl`Pt[YO} Oda&&={G2dz(QcI3F0E>]cҮ((((9#1ԉ$rjڢsFQ:ysqTd_.bP ,Ps2d1qztQ7 Z4tfuyW.Qi55AmeY0=Gy|c ı’;KLByʤ}[;:(v 9sdVu6I"~m95č?1? OUG'*np#86ޣ586rzդ `Jcv ;8"gn3/5Hb385rGҀ:qRvJ5VAr0NyZOdu5=98ǭKJ&ֵFֵnr>ւ9Q71PSaF@9?&0ԑuMd񏚕yUL|Ȉ~p1`gS!#qS\Cxu>㰬Mk0O^2<{VnЩڮ Cr3ڬf+洶Bcx,\SM_Ӣ((((EWWoLz69F^6`+>RF2';Y[h# UF ?Z@j18e8r6;]oZo:LK8¡vxN7K*3[e.0G˜<hA+U :&WUp>X#x $aq7UYg7 !3N~UU]1(8U̕E|玂WQSbN}z$njLt/4h[1,c xdg):wXl=(P{R/Υ O< /73֣)d984-7!=jXAYC'?{)PmmŃ^PZ6]z;;T߯qܰQNl9N|Q&vsQŻ=9(Bt1MA!:n 1;ɧ7!Yl𱒀AzU&}W=S0m$ڬ10J,_98RȏM_/)\ @!ɛTɘy2u*O\ X*4I/g>H LH_ aRH$*MYs¥[O$^ZAV fcH@LvF,5Q$FwY0NQj ge#8_ң&R~lu'LB'{`DH~%5?0U]BhFXV䪹QJK*Fr#LW) '115ʢ}{ҪHW9T0ŶUo)CV4!/ÃDw NzS.c.AAң@hbx~}qPFB8ۚ2#pQ$>iUhJzzVnX;(05ҡhoޝużx?ґ 'ϔ i3)(DP\S͉-aXQ7*yxcٓX?!!H-LOYU*'5QVP9MTr+T"][Ļ^!کf q ʋozSpYs{v *HcCb+e#,a1*1ϥfN cnT#H  .)H36FXdjmr$1S0|UVCF`[zU}Z?f `O_Qo%W$Ҁm'$ᦂ`,U>`y>Բ퐠dOaH}%C#&W4#/k/ВB[S_Lotq[?JLQ'A6:`s?MF! `p[#{[cQO'ɊN7IfX-moٽV'qqF8`M>\Ux܈e ]XdzX")`vRKVM+pKm*Gj? B0 sQF]5b8fz@u; ʱmy9AR3K0 9nchN#=;pHڇU O&Pa69?9s(UgkZ|FgaLsO>n31֚]>Bsԅ/j@w[eW  '*l.⡈Qq07"ʡq07*Hh| 4mT' N1ަR~#,GztlT7QqO![v@8Am$mgWiR]! /`)B\S%P796O."QbyI$|Es 8Qѻ8鞕!@؎*qw M-܅EhߺnqP^ccQTϕ?yΊ|=o 42)obXT-;1 V||@\ Q}_#i!W%}s#FJ,cڨrɬ γޥpV֥b!6$eoz9T2~aI!$+eG+MwPßoIqĀ}i:7CMWee|}m9䶹IpWڦgt+n<,܇޶Ktu8oO\kNݸn_ Ϛè>k2(=ps+)z#dA=v-˻\p$RY= N($]q튵p&0?Lfu ]c~wr0U'ܼs*Nzp)"{20bWZqZ"$T\rjһ۠W#梔nXu勏~$y dy}J8}**N?<I O- i.YhN\MOBb:K;pҧZlLb۶)8bf*TKD /b(~cP_R"lHC5*7$d`G lr}##qQ.Ȗ2yQFj1{tʈ6#XPӶڇO4Ljwaǭ\7[hKu%ݵǭ%EǘàNH eޖ#(#qZanE?1Hku jJD,۳b;™rb}X'$Օ8r1W>Y]1Vv&6e`@)ZG6e!ٸ t;2Fq-KQ~2*{miGާݥ38cǵ`I#ܾ.ǯbcc֔#+@,:tTȁdoqǯ'+|V\WaިY*d\?uVT#gLI$V=!2!`RqWCi3mLњK*}ǦzUFgbK>sTi92v YPKH-Ѡ}Q1ǷK£V\]:ScǾX2nQI*ST:Yd SmFCnxPdeܹmBÒ23PL c ɐ?{*n mmeMdFA=EZnQ' a3ep;6!XC*>\*V`,773tH~EZ!?zlCMڠkX>PN-~I~0Rgo;f?^ؤPĜ/' #1=9݂jO%LLq|ZG ~z+_,vz@L'dcԞ˸mVkg:?M6xb~`l:Dɖ$ ";w*mnቈ $EQd}HsNrHŸ4T_c=e2R0Ʃ*5JfQޤ~̒rO>J}<*Aڣs|voH}VӭM 0yg OgEY"LyI, ¸flHW@>HY]WPlOzf5Uct{YSSݩ!OPsL,J2[#9G 5Q zLRJE!|up};sAb6i-MzR>ĸ|@Qm!};d?]T b5SՇz^XžM2BZY`2>[I3,|?/ݦ;9%Ozqbm`[p=[pA|p{=C/' Q6>`~]hq"n8ڪ rb!'qaW[bR}p)`Iv"fFr}xeFл2%9* 'NVijʨ3i|onb{M1!ϱ5 f3=gJdcc|ҖVxז5ym`NYj !Uv# zjO'#U'<'8F2+59Kmfi]D[ti\RU!wj8TJ{ՈQ!y82.A?BY,; 9U&XqeJp̪x$> "q G4n1jyD>HqV}1 P>|$u gd>5w[ʚgZ$c#*FY¨#JXl4,N@ccKeG8>YBq 3ū*s U*ˉxRMڪIAV|'H\S^M cj (?A;rR!1AXiO|X_ٙO)pĸM7ODi }9&5/H> KC)c~: j˻/aI]-J{AlTMK9!ܠm H-=wj4v2pU;JAf UGlpxEX2}k!nV }k1o$ &Cq4젱in<)$3ZBҖmDcW ;쨾z_n͕g::[YW M;4`p{X=gnõ:iU,ڬp:#kR+=96OsWȆ5!N0_jΚG0QF5FTG\pOҬEm83\=Kr";5 TjU%8F{8UCNFA[z%CR|{ Xai-T3>H=F^oQcjپvH=vU~oC_8d֭iX?ΝrA~a=ְָWO 8N{VsXޝ.p Jr;ҐW v 7A~u)?B>ier>9A H}jR[y ;~I%BI栶Vl2׹ԅ(Y[)Jվꌩ5v(m6M,y)Wm.䨨mBPfb*4$4r4΍;Q?z d4`2`yIqo$[Y\C$`S, qd/j݃Êlѥj),d;қTCpp7^HWʔQ ";Wn5I1 PӭMzWMDGFJUN)U%NY*AJ\·NiE/#1?JU2g*dz'6I73˳݁ $gU;KaAQ;rB `SD|Ҥ0+,<|hvc>UDm,p@9#yk]6:#7vي*P-ɏ$ƻSG9_0NŸhPqZMyB7c b8o5{^H->cP:SUr{v$9j(AщcT2,6adY\1ƖI^g Qݵ۔aTc'Eqrgp0`##۷U)cNOӵBpYdv§[r#^:TIrV%EKiP§^eTH5 RKtV Cgpmo#sUq RްImzӽhk {LIսY u$2SVS-XecYrzSR˱xus!u* 7?J2V[|18P!b)1vOAS_59ԗv[NPCKytsT$+xF9If]pjep1u*mI5'b}J`^X?bǵMo02qLvL[*l?YO#<,84i#ɸeJ?>+]{Y}W#Ic:)Ք#ʣj5PF˯%1QEg8-ԵKmF:RF88Ҭۘ% yif, qDʲ@P\̞b.sP0eNC}H><Fnj5 Dn2jY 3H@ \s+ 8SȘ v27jռ oo;y;Hݜ>YU[tV,z\P,{ yne2#c`jWRUTOj*I=OMV)0T&F`2i$P1?t3O?IҢuIgT=8m..w+"QDnNqL e-RIR;l0r|i>&I1I&1I<6:F9,F)X\\NJrE2+9oGrcC:mS[H~n" 4{<֠ocw+ɪOLbbǀ+Y]Y3q=Ē2mGA#a BKt1[M%fmv*A"Y")79i+((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((( ?#8@I=`RcSʈ [tԟ8?.j̋Σ9yhJ# j4DU#֠uTd'\SY\KiXAu?.GǶj{]OmY$lZcIvеj[;|ű` K;$a$EFЬ`S-[H yY 0})|߸4ZՕPi0,88AjrJ#\.c<004G} s0(X%ezoYo> ǯQH0O?LN88RcjRrN3070_7-2$(m?Lm9bF$)q 8J];Tr*-"l|)ڛ PaSq#^"A  i$A؃/C<ڹR fXM>FRF9݃SiFČO,"wioґUR@)ÚW g'^iَI0 =LR\q##\ޗsDN)wȏwqF挐I`n 3  ~}ic& *0}8\`?p_oLT p\:F]>+G#Qds=)#Y<Z'aIeʱ+ lzlcU;䚯16g4؂9s4y>O9UU$$Uƨ(!ɫ ҦЭ4B<ݼ#Rݛ'i)ųIީ@]\˖YW&ݒTEMh'x˾v®C*rX*=CyQ0m?CVGP.Yp}J0Cf}j{Rè)`c v.p˽$\ɟL[و~cM#p Ԝ=U#:cl *Q#h FGjg'`%JۑmM\Ʋn1NE`nwU͇iom S$22;p]X(<E[uPEYp13P( @wz ~620'Þ d*ÚXʕensN^X`朥# )An@?JxY$bqNHrUvlQ8Nr]dPPKHӯZsϕQ<9)Mk{eɩ-)@Df2}*T!s"cL Mj}Ki@cX88unAC)}mfr͸[`Œ巹QaC%Lsd/T╲0=UmeŏQ[)>*V$&}jBz *pB RQڭY3(˞ڣ*;e%Qk1gIMuPY$fBģ{|/q@p$$4mAL̍:cjI!V9>S#ѐe=j9;IP^ޛ3pnzh,>6zbW099H8oQV!0+ӱA繥ϒQ|֓{)9]H;\viD34B"XA9OnRA sF>ː0<릏ignO~*)K `#4Smc $w !n1f,Cc&"w/B OXѷ@40c8$N*1:{H*xSV axSSE`8FKH昢a`7 9ĞV1Qw- Y8(̽NH|?iޯg3e֮݁[dCĹMgcDvThrHNX{l :m԰ $#&ڻEkVGLo5ncFv8$p@QU6b~)Rҩ,yZ%Gr+;pE2BV2F>F0ö,(#ZYˋ VO>, Ŷύpҝ In$ )^*S pWSčdAdXaRܹ"aOEcR+r}j`]{c0~y@*<Z|v;@}Z쑻2h nN]dJp*2I70 q"$l={dVڅsՈQ<i PEF`99-D@m d|1S l.gRv V=EMdQXGz}*[B>i!p=XU3xlӖ`Jd  J %TƩd0cӵʱzQ#ktkvN9UZ`]Xl?ZԹ7ej;vo#C%ȾBk JGs,%aY0$ڕ\NOVD .zT䎭+v* t[iq[vDF0z%cd u]XCow)eI2ATG "E`H"1JHb@$Ҽ3EgSJțI<z) 2 qJk[9lw1m(~lw",o'=1!WGʱOj@6V*ҝ W!szPD09Yep`;~C#1OH=}[5IP ڨ Gͻ?\"$r9|HR},e{ԗ#IGQ l94*}*wi2?\T]SH)AӢQl$'iiEݧFu-/ʢpB(>.}4E!^DHYFԜ(֦0+c _8] H܍\+CMeyZ|5?3knC—U ˚cL?k.fWHᏘx)J_q>$H‚}y%U!TSi)%ّ⡹hٓ|(c\4j}8Q1'y5sޙ\+օaӢ:Uf (*v1fNZB\9X֦7n`0T4 : 3mLsF/@2*7U-jsd5 .=VʂHU?D2Wq)c7pjK zl&xNԙڛaBR{Q |UU@SNh2uc!O=3YɎ" 8j{v$ j͵2e!;T)O c6pRbF |8C0,J[}JiGL)m=I&n0sP2w-c JKg*'QFIU4$F2$1Ap$3]>wd=qY!{o>T iQVtx P3Dˎ0:Ee#,i:c c4aS"n\q)"y#t W@z)V'F|2O2Y砪W CҨ4qAvgo54QP19(j{x.\*jxcEMJ.⑨S% zR#G+O^چ20W݅Mlvu18jyy>G&yrS_fBy *şئmoL*dG?QR-8Wr^P$z/#eREn4q=&^I,s(ƽHb,mXn3VZt?0^) U'v qj ^YT52+/ fIm^0SwB;PP ιR})0'~BN)oԭq2Oϸ(G|*H%vE b; (޹-OvtyQu+e=*MUbX߱qbXh8T#^wle+MXnFJO=:6( ؅`tZˉ v%j|GoZܟJ݁ 3TppU)j "v"c;GC!S9cT0¦, ?ɫJrby>#Fq<@)_9g#oj>ԤF;qU <)f*¯xyܔV`P\kTMVUyVvzS%{J'ץ=d̄yb7 8*IRx$$dMnѰ8Vl+{⩼EH>r2Fb'叜TE>u#Y sYm7 }N楷C43}@YBGƭj(nGĬWqV!Sqm6`~()'͠)+ '9STp۴E9?tnFX Wk9݋A/|ki Ox `[iN[iYH>Vjx +J inM$*a4NN0i(xvT;ٸmd3C{Rm)NŤ[>udFX%$󍆫'fgx'9\rf2:qWR o)ñkۛڡrA}k=.m. q8-ǚC M,pHn{=kk;nhWCTyyD'c:qQms$`w(i )a NXX. q[˵xzCnKmzMEpLJHZI๕ R O i&YTj(n|@»)H7f1o 14dAqpi,`trdTw6w$CoZd]"99;eJ\;428,TGb!pPpF8\[O5kpVFZ9G Xw(ɪ7aPT.Kr}MW R}i4c`nn'żPԶs;42F1Tw׵I%gרSݼ,=U+F*B? fj6oڄ+"BH~l)5 Jn-$F~zwHcUJfCZh}bO;H? ']E(r*VJoK4K&[86)y[ ɸ#x\̅y=^ T IQRqOCqP%wo)4K4Y ʖX܅ェ50DL -O獧ED wO%GMUҬew!gjn[Dd)sAQjHmB @%±臥H"BbZuVQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ_ ?B"W?>N7QA=b8US8VoFF~jiGh|I >61aPAd;?AWŻ2cP*Z;&-خRC8=*k}}J85#Ƭ[[rOCRȈW3M:/`j+3$NveCR:2]QR>T3OD2jкeUgqc5_sR!֩,# HNjcXGY FxAʖgO.eX`ȱ7Y~Is#g#Jw $rq,W!,T$ nXJʴyO,Yvzk<Q'H2\w7Zi~ɧ[pe`C9&dyAjO4mU9o|Ԟm1`!E?C%ݶZry[4ǝrLG MNc,dт%G8=bYi@a7 + FjiEIS*1TpýF6֛6c. cji*ASOEcln%3f][Y^ƅPxٹHM-v uj] ]K$d"x&0SOZUs>&)iaU` 5J_$p85Ra0GCXr8l[3GSϙvzUgqlJ5@Q֫s9b1U⍞1T+"^zf+m&{eڱkZO=saAtBF~QԎ*23 ڥI4 Jdd\0xx{ a5#`{fX¯r}gtj5޹`Zw$6TnR6Кsl?wsl#;oyMN܃性 L$ ?٨q%x> e]ܶ8oQLaPjsjK5eVpWW4I,U! qʀ6PV=sk2dWٞF2GW֪jch^I;Vb(yoi2laejCJ篥f]Ȋ$ֳ5SOI2kG.7jS1P 3Kڠr\Vnًq;縫n .߾*2la1LN"&H$+)[8踨rA5"*r  9mG2vŏ"\{ԾYhʇS1nHET1'V1ޝ-B?^<iE?m7ez+.O cҜ g$iDd`~W-E(KOҠDK娾BOe`~=*GF kc9<Ʀ1\C98ۓHv93|Ǡ409BOcDD&HK[TҤ×vȱEN7K?TO2PBO2@FZְƨ[v~ hrIAI[ ?ɩem>!vf|h85(|Zɓqj:LOߐXG1;R̻l0iE;qIviy<6uUȬӏj*{e-Pidw[(DHX5oh^:3+ 8sPj1QInv ,K4`c{u14%N7͎J7p%IavUedD%۞; kkn0BlN:jm .@T_"67?CL`"Cݪw| YS&enwفYlN9zU>]Ɇ A%J\8ߜ֭ H@3WQR5#W,a#@PD>?ZbZCƒUt@:F|5v+5V蕅Iu#Bv25f&eb;S.޸8  J\"P43rHΑ(P3I#M+!cNɸ#"-4-V3S9$DSk[y<3b-1@5ZC(/űfPÕ'?՛hq 9ȓiuUmj (6ؖ5% \l+Q|LdF>Qo C厁FʰNs?A7 ~ A.˻XU :cұ^e"g9_WGn ]sU$+ӣ&hUzVhHXqV>}$ V2&%YJ}ث*R!س;ִRknc)YZ$pd#C8_\c;`[~DqZds@"24CV<"8P7֌Y\d#pAVR JǵH ْF1Ov(cB*Oj̊`?(8ȪI `T94"0JLhg#@ۘyU26F7sUX!$`rTGaPIF*GoNNAj5LqX:yzX;piD>IUI&<P1d&lٻUXY '$<$5Ѷqoظ=+mݞõ.ÕU2(~U.:9qDb #oc N6슍HFXRO,(C=E$3BAQI3 Aϧ5JGPUvKo qVlfAS@dltQ5kAZh@zZu8y>` i.~;^䟺Cv /8TTTʣ_zў8SU#FEYن5V=?V@[YbFpr)Ay c 4Q8^R}KQ=Q(eksΥum&$/ۦ!yUmҞ3`I<)r9$Ag^H,r}jT;X]^l9cVtwxsךZD'6~0R" 6==*%>fg|z 특Y\>1T@@h,!z*瑸O80:TE--QJ8q@Y[<ك%yG=7SbU!InsDV Q"E]dPBLD6HlCbMwD;H3QX]F3#үiU;=Zl3QVaX棲$391vYUcp~st@)9:~T : Ҫc҈ Y 'U)jsҬiV7t${)IǶMf~\5ĊjuHŹSSp#QI v=(-/<ޡO4)^TuZw vN#P)Wi9EG*YTQxTw2ƧQiD @U^ 23? V۠#JeV,+TwQI e]\3(܍YIqr9)+Z EMQSJV #0#4ݙiq)E!\ۙg,`4?(Ǡln؝O5]#Jf9 ,efJe@v hf cA`[uJ`NN)0~lKAPtpՒ953&:!,ـAjUU N>ajj@)/CSE;y5PaA֢t cLrnrFqHzWE ^LvكҤJ((m>GV6v>sš{vd?cXZDYLd 1cM3JbO+̲\sh 's3_M˺/:-T˩LŊ7/t+Kd85z2j"0U1cʲ"1 `B ,d1)(YcNC+|MG209>^hnOȪF|*8Smu6*o6 P j8'&cFQ*k#8djNT<*%g9Ri X>ݿZC Ou=Q  j#Hjj] (nf* q# o0Q驖9P*0#(C*`s85VTH%F*(F9Զ1\DVrc%Mđu]ܭ BsQγ|ޤ)9-7culqZ:<U X_ӞPTH6TՆ@ Z&qjԑ Pв@V#spʐH!"法%*"v M!Aj7Jy5d`$[KyUdf F `"8d;xkVHvL"0BG[Zr!_+bZ2TeZ3O\E[ Hƶ4IK,C*ƴPdL|U{nPU}RVi g$BϷ99Ưu gCE%ݯzʼ loCdJJd$̭M6:"UȒgfZNm㐞scMww lu>St֟"n ߭ n^6ⅈ.IO"csF C znA֓k}Ӟ*Y[|?)m mJ<~81?^`aЁEv݃ڌ[2=)mF*ċSvGN.Nj!7!OZ`@Qn`qOw=w `R<\HMHIDtcJl2y7&څ`;O\iuG9aXǩZÌ{+8|׭8Zݏ*9ҳ7<ZR"ԡx뒦F0Զl'i`k~##WcbKD_At-VnK3\~V4`p:oS[[ެioޫw!MːǡST瑘*3Hr ⠹fr[=Ga$kӡ0;&O[mcAd%66dE?ʳTYpjIO 6Ѫ8[i/ 73A+ d@9R:"/0`\\pk[FFâVLHw b{"T I>x2I>rqBqo)X0*;b=ZH> %.LK皭\4I橭\Lȣ p>`pqQQ@';,$G81 U }ڔVٶgSrH-nz @9+1.*8;M(ʰr*M(n9u2 UQZtjAP;YUW\,6U/c$A@-,!Tg򤑋gI!N $q5Nv*q^iTtU.e+EXNEI"-$L+r)d F3HDk-FׂFV9lJT9{Jp9-Us *F*xy*&&7A)$*!5"gi;Ig(rAG&;N~ )5Oi+ہ 4\gNu O$VRfORDH܊KXu"qk?XYbU@SP_-6PY[V1cЂ )Ub?Bh(z7j4Y@il u%߫sPhf30횇N# ןʺY(^#m(esZ#`J|lE!8*db-KtTb0=h|LNFs 5"lb`YU1#*h’8I"YIvKqosn_ΛcŽ N1g3pNjW<\ҷ%# A'qc;UpSJ1(w6$(^XٟuU'Aߚ܈61F֞1S}F: hbܖӯ }H]5©\V_ G\ -U:Vfr gҩxu=kZ5*8dTmsVpQGjɻFcީ7vRmFRk8LdPN1 'S2 _-3+ Oڧ\*ń=^KIC ~UD 6¶teI7qL1r jNIA&>sZiRUI#e劆ic}CjIPx=Iurcqyr$z՛"l튺ۆ,Ǡ;Ib@v;Fx. ]\Qc; ߍqvo.5TcUA\o#\QZ#Y~Kj@U xMn@ AeH0UK,⥊Wy|L2o5Zg<{y+#眊T!I| 0Kn7-BBy$dӼ%Ib$g 2?YN"{A9{UuDY H*WܸLc'UUWPګ9\5^Gk=Ҡɔ> Lմs%|cvVw7zRs@lӍűOdb{'[{TRq`y#?&y5L+O-'#ȿyxZF-YQHϱ1w@ɦBg"V'ךpTP.@|G#5mFcUФI1ҍv@I>§R{7\VR6nahM+ت 6aii}ɤMȲn|c-ܭ0;hYإng%h;֏UFs!ج65 74`Tu"'ʩGZu"3h ϭc:P_!WclSUG @s"'vD䍥oZ&r< l)'Mu68#!'V &F1y1ii4ː_l`t!iͷPNwɳC啌.ASP*ձہ*#|U#AVFBAL%\اEq!Ž4Aޫ:h|Ԏ$]_x>n9t{{4vTZ832sPan9-ɪ.3}* Tn I<5AϽIkd. j[X€b]T5+d`~UpUqoZmMʗZ7^7SoY“`ZYʡbāTgVg;0~O ܚqW1J~rQ$# [<ϳ@|w05]ɼEz{YNJ7\[ ״9%ITWM,pzщ>)+]ZHԊٙ[xQ;qʐPF3!`8Fͺ5@Ng,ζaӤ"=Ϗ˶2XҬiRoR>bx6TTM$IC_|ų495iBs+$*0 qB!RIڬ~)K1s) v 2)u ~sUdRvQܸ.1PHPI!;9 1$5YTU⧸`!XpK3E1WmMJXbՕNTF%RU#,$FV-tI A54lniK 5$wB{a!2|wKrwWZ`St+5Re#J&uF[Ig4HĬ 3UjL/y,2jܖv^*8JXd[$]<@ ^Ø?ƒ5ӧ'Hp>s;d+Uk sKc˞j(=?:.qKo!\mrEYɺ"A*{71Reoh~_OJF,RzzR^"**؎*92cy8ms"H ri ^Ԃ092`.K1ܼ QJr8N [)M4f5,i)E  Q~g^S1~O|y_"HS8WRRR:e w^g3OXȹP7LHX_uB;S.lbbi""5 XmwoTH@ d cNX|ShH;WTҟ+ R9G3\/zI_jm.1Y7nc۵R9ٜmVwsAI)`2;s1u-$4Ԙ[v˱PƮB A#rW@`MO1r@ =jo)M])@`1¬s `@"E. S!Ig" cJ)@s s\8Jkn-FeC>JV,',D"žB⦁/ywڮf7Dbبo\UR S91Qj;#]&t inp'R#sU Qgp*(AϽ0V2<)j'Q*EtVM;FV/N+QjDO2I0¾0qnOt+FK֚/ $Sp=6ipf*HzoJQp碞=+Y]7HNJu#I+e#ߊ.kI\qYzs;<>Pk?NSJr=ꎜm#p V";IZ-*X(Z$)uw$3aT.^G$"3BSm#ynO.NOF\"&o?x?Iӭd dciZ@ۘo?UGb)#d;4 Hyg!i%R01*a 9*3gJvpcQ_Zp=ԁ>e}lda4_25V ;>AU[6ң15AJj,djKIb;qUd![늬@=*IW"9¶qS=*gt(qS,?ZdڋC6qC8UW?}r|Ҩx5ByIrf\L|xHi.}*8{j{[;p3o8\rLfEa{d8]ɶ i G0?;hjرq՟7<R*]۴O[K-o7mjqo1@LRqisٔvP88],iC2!*c*,pɵeTꇞi/2tӘlxkE+_cma@ifҸT41Mg!CtaQA6?4]].yOsK="oݚ&(>j?CjmffffWZNrr@~u*cNՆ(o+Zn)[y9+\maFÑU洼6{mٚdA%?V r-e_jgvZN8fx.[K֗=~CL67c߳Q7^hF 5tYiero.?5?ٮp;§|<=H^45ռx 4]nLFW>`?g4"s!q84gxXMiuO~X+L2O[;ݸ4ouoI1D0>CKK6H$iqUN\/'x\O~S:u1&n4糹KY4>p,s5'}]l3]uwUEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE ?P,1ln>v[i-U/ ٖFs&h!yUpYTkKKin3$ow횿[\(rzaPQ.NaTW7YFsoi*E3_A50H#`J#5g1jnEQEQEQEQEQEQEQEQEQEQIEQEQEQEQEQEQEQE`jG<wxZ"XsTUIȡ=3U]x=5<0$ \/ IZ~,d知uI4.v9 t"X؀I=[юuVF!Yz sa̫,^^{4A#}U#h.} hsfJN(((((((((((((((((۷Jy+y\7Vngh5Z鏘Tj&ƝZqwErH|Wtg&vuqջBI>c!+"H$x %x=oO@6:ڵkFEQEQEQEQEQEQڊ((((((((((((+8\CFs?P^.zk&\ f`p ]4{>]0ZܷXF XğjڎGq؎ %%>((((((((((((((:EQEQEQE-W1.ؓ޸v1Jw9'֪]O[LI*GSN^DvWOd",<ǭvGC ]l(đFp{U((QEQEQEQEQEQIEQEQEQEQEQEQEQE-RQEQEQEFs#\dq % rk'/ZhߨE }R6DoT|dB#]b*!!.yU: WH(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQKEQEQEQ\Q+k2=kiO[ -]~%, ɒLPdAxzE ;=}jUI8Hp޴d STԔQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE-RQEQEQEQEqW*D^Z$\|bGze݇& 8,~Pije6V;ˠP0:?WʦVY&ϽMSRQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQERQEQEQE^ペ8q:֧Y&s{<98Ox ?[=BIm֭Vqr -i"SQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ\HrzҼgpIեKIpw¶֨#C(ֺ`NvĀ9#S`S})>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>`QF>'>`RQF>`QF>`QF>`QF>O((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((+ ?諢((()(()h(((J(J((()()((J(((((((((((((()h)h(()(((Z(((J(((()h((((Z((LQ1KEQERE%QEQE-RQE-RQEQEQEQEQEQEQEQKEQEQEQE-RQEQEQEQEQKEQERE%QEQE-RQEQEQEQE-QEQERE%QEQIEQE-RQEQFsRE'z((Z((((Z(Z((()h)h)h((((Z(((J(J((()()((((((((((((((((((((((()(()h(Z()((J(J((((((Z((((((((((Z((((Z((((((J(J()h((()h(((J((((J(J((((J((()(җҗҌJ0}(ҌJ0}(ҌJ0}(ҌJ0}(ҌJ0}(ҌJ0}(ҌJ0}(ҌJ4`QKF>`уF>`QI0}(ҌJ0}(ҌJ0}(ҌJ0}(ҌJ0}(ҌJ0}(ҌJ0}(ҌJ0hҌJ0}(ҌJ0}(ҌJ0}(ҟOEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE ?뢮)h)h(r/zrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEGQtQEQEREQIEN^NS(((((((((((((((袊Z(()(ޜ:N((((((((((((((()GIEQEQEQ@(/zrw/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES*:)h(Z(rӗ9{ө((((((((((((((((:(()h(r/zrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEGQQEQEQEQKEޜޝNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEGQE%QEQIEQJޜuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQQuQKEQE%QEQE9{ӗ9{ө((((((((((((((((QtQEREQERQE9iޜuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQL`S0}(ҌJ0hҌJ0}(ҌJ0}(ҌJ0}(ҕiViuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE xmxBCDh{Ep}[!x:Aperio Image Library v11.2.1 46000x32914 [42673,5576 2220x2967] (240x240) JPEG/RGB Q=30;Aperio Image Library v10.0.51 46920x33014 [0,100 46000x32914] (256x256) JPEG/RGB Q=30|AppMag = 20|StripeWidth = 2040|ScanScope ID = CPAPERIOCS|Filename = CMU-1|Date = 12/29/09|Time = 09:59:15|User = b414003d-95c6-48b0-9369-8010ed517ba7|Parmset = USM Filter|MPP = 0.4990|Left = 25.691574|Top = 23.449873|LineCameraSkew = -0.000424|LineAreaXOffset = 0.019265|LineAreaYOffset = -0.000313|Focus Offset = 0.000000|ImageID = 1004486|OriginalWidth = 46920|Originalheight = 33014|Filtered = 5|OriginalWidth = 46000|OriginalHeight = 32914tm ;s>zLC-Ҝˮ_ 5w]ә` Dy1Pw/RZ7Ņ-.Gփ84cwi2;Պ z Y  e  KT z ׃ Ō ; x  te  *Z c l Ju } P = wT'^gowgUu0emv M89ZVrrzk8 ;4Yfod) 78  p ^?  0|Yl(\< 5`E@A ['#[5/iHFM,5<  { 1ibX9^Mpv^>cOUsIaS7:m& v]aRXJq  m YdbZNWaS xgv1kefx_[k4JBINcf_]zY-q+  2-U+v%% C (B+(%%(Q:=0B`Ued_U][jxjqs[]gɺǙ }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz> ?EQW pDFE3ҽj8$ :Ju>E('ZJLc84QIc=y.0(ڊ0)(4QJ)GJQҊ(QEtGҊ? \sE(ߥ-QfSIE7QER;F((? ^P:EQE(4QOj(QǭQKEQE R8?hR (JpOJ(9KEQE)?Z(QEQ֊(CE;u(\GQEQEuAEQGEQEQEQ(R~4&)($Rh< 3GjJ)y4RR }QKKHxIҔsJ:֐uu)sEEQERQGj( (QE%G3IE%(4QEQEQEQEQҊZ;@EQIGQERQEQEPh(z(KJ)Ewފ3JzsEsE('J({QE(JCӊ)RREQGnP(E:QE(()h((:E(R> ?|s%~η{mx83..JMyP!@V#'',309ؼSqmg3rŝ)#>g=\m;[?[&+8Wo?9j/$Huu[-A$ dgҵZ=kJK(QEEQF8hbb(EwRQG-JJ;ъ  (%~4RRQEQEQEQގQKKEu)(R@QES&F0J-VXCzT5l䣪YU BJO&h"Gʕ?T.Hو 楂aqșAJcv/mRqu  d֭[OP#pjQҬTQEQEQҊ(ϵQފ-QE E&1KڊZNPhR Z)i(Q:Ph֊>Z( ? QERQEQKފ)=EQIR:QEERQH(ڸ{o|SkjRYRUH߽yVAlV pouq2Ojd"%O-jO1`Z#3dpu]tRH.rgۏϽvJW?Դ;Eh)hb1EQ֊Z;H:KZ(wK(QGfE'9(Ί)sEREcQEQ@^QEP3EQEQGE(> ?^ӭzzQE(Eѻ(4##h4)Җ!(WN]](* msߍ] WeN؆ৰcfoiZ9)<Hd/=;MN*HM8+铀Cj[䴺KC ?:mmAw8~ugS%yʏ*}o:^kʗ2Kn^3ԏ~?:UUmt)ǩְo'wl`}?Z ֥ji˼ i;x0O+B;Pkd]aEO&7>XÌ{'M2['Q6Cz6 ``d<Ѿ靹C1dqJМdyצUH)FUzz-4},,qV#͞kaokkst#'Xppð G,}?O1(E`|?8#5jm<%u`v6P9xoCo5J דVӡ?{'l'GZ2jQwBh893W*ERz(((2Qփ֊4QKڊ9(E;E/QIҊ)h(3Qފ(:qEQEQFhQގP(vGJoJf%R(bQJ/j(Z@=i zBr1A9EzRZ(Oj(Qފ(((^QEQE%QEQ\Ǎu=GF4O-Ț9UӧquO@P'A&pHzyrJ\'c?R7> bOu+,d*$?iXVnk*Gӿhxkv.`.̤h g@V}IbztIE A(xH]d{WF$2Eak^/km|STI>Ө[ğ=5cH=st=<+^H@3؜fm7W'Q !=sm3OյKmYyݮd s#u=/5}umyM>t5 ih  OBk+C.ծb)[-(%NOqK {LF2Qx$p|OxZ]4V%lOLu'm"LKɢ\V\$O| D}AGeی?t<4RiFV&9HSQI%)>}=Ee]5Ֆ1秷T.DqF c3``dg==I-Ji-7S_ Sނqq ӷoJeW# ck6:cݽ+X#?ysg)O]pkb]빇>EZ2YFzQ~uf%lWN6?JԼϺOww_Q03Y-TАSբH;a2u#~>!+UW͕ClOH0z]b4  ~=jr4bHWFr kq +4t`AZ1ѬHʲӍINE-:QE-Z)\wQKEw:(Ob4QIEQAL((ފ(QE-QEiZ((wQړ84QPh> ?׭rRh^E-)2'4RJ:fKKEEhQE'z(֐EJJ((QE%QEQE/j(s&O$ ּŷj΍y# #q88=# .5hTIb㎹Um$%i"jec,Qcd:=֯A$6zT2]m2@{֮ZL,rN#! 1jFM&eo4Jܨxεkqn%nE (?{C6\ ?z((4%MR 4S(4ԑIhPzRQ@o<g;zVhBHR@5ٖ6eB!AHĄ%Wq3^u =R5i!\cAf|$p>)./gD_J8N;S"=I#χ(>zgqO6mHGw* ߡӊc%<kb9;ϭz:S9Q֊()GZ3E}(hRE? (GRzE'򢏭K֊ANREq(֊3A֊j(f((wz;EҊ;⎴QҁErhI֓f`0h(K(GJ)OzQHhRwK(hGJJ(g_vأފ:RQGQEsE);E.3K(p(s)(1E%%S.~a,U385! *<.pq+3N'f;cǰ2x; GN!w0@p: sZ/4^݋}>y(p1O^ykH״=onsHJ:ƹ K}fKKZ/#hdȁ63_ιK9Uomy1a=FΰRiJY,nɌ|Ny0;zeʹrM>*=7O֩YOju찼ڈ6N ~~'ZeA%`7{Q-[F+cc-PědJpy<Һ{k#J; k+tI߫.W cxA6Awnm;Z79GQ>ɬ]vu$v4;u&dK,*FoLm^ G6;ioXTc" s@UC*8%&VR^ݳ2k{Uc{F峹sjX|L92!~YdJڱ" OggOU.VFAlǽ +Qcy9>6DA}0~Ti_DbaԎ޹w\"wa{Sm"D60^W2IqG/d?<1*x8_\y$9[l bzƼϨ!pg*ārIw1D [ z}%DzlI7.Coq׸n'@G)ṄG5Z,mvtg>}G5z*(hFhPE'z)sJzQ;QGjQENhRQE-(4( )sFqEG֊ 褢3 RKE%Q׭sEڊZ1_> ?1^8]h͎(4---i QE;QE ()hE%IKRRTRKE/4QIIEIQ;QI֊({(]nnl>8=8eS$J#ww.G<CYOh%'9+$<53FG'l6+o4$z1N0[k6z=nG;wQN-9;q[{5ݟۘ<2.ōX)k~ I%U!o4qs[^,JQ˽aq\qEpnAPqԗ_5Ŝ1ʰ_I {T)vgxbnC8?ji8*ooxfM;R KCv z4ԫf1ƜqՉK 3$Ҵ|s};LXbٹ;|tt*(#;kc ?By<瞵׃4oL:&خa\2=vگ4WO 1KC>5Yxr7̭4K*9)+P0;gi<'fF{ʲKB#㿥q˿KI|ӉdF%$a#[66L{ zK{AiCLQߎ&L3j<߭[{K"P͵[*$9?]59$UFy K2G,Ć#={֍>|LdHrr=jͥW =J˒{t>UТs3s;|Wa3XܺU]9in?!lJkt{*ƍ ɣTﻄt{sӊ|~%bo?\_ ^o*>Wx;Ohd6V3FUo:Ȍ`f<-$>nek`e|?*޷ʲʤ>SȤӵ(2DLeX0<{]7SS΄,CNKy6r*]^R8f((Q4P}h(hQE(4Rf(AEj) %z(4Kh_Ect:4R((E!qҊ(hQCEE/z;ҊJ9>QQIEQE/j(\1(Q𤢎sEQ(IER (z(4QE-"BAbf7RGZM ȐQS]!" rOr^#XP'4t)O+ożMGIy!Fc"/,^\4Ȉѣ`<\ACqW'&s`TL\l{vӧD,Ar6ڥm#x'VdYH`r,yTIX*=^ͤv2sD.gFec`gRnܦ$g{mّ\nA`VN??ʯˤ(;$p# ~uBL7Q[yC<{ &Zi66X!SssOՏX^uo!bBO=⥗O7vMV3!ҫǥ\^鍨Garr#P5ޞoR2\zs̖m.giu~`n]Ƞ:u޺/ Ca+IpኺXGOMDM{ek.yn\4YD8ܯ=? y Q@z?I'76\G ?ю릊1ƁEQG֌QEQqIڊ֗QIGC@RvQEPhQKQ%QE.h񤢊(KE'zJ)(_z)sIEh1EaIk@϶?Eqm~\vo2Xc6H2=ʳu[e_rưˎO?ֹ`[ry0wzymv\B"#ݑ}kHcYeE18\O[oZei+x2xArwQ< mF.A]Oշanc7F1;ntǧsʷ jYX8u_,9'Vͺŧ2 ܳF[S4Bj~`3a[^[-$̀It8EE-8Q`u}DG>R.pOPxPGU#9GR_ŕwR>Q `MZ(䳅Ls*JX0yy(5=+5{hI[ `VMb["=-vWVMqaplog $#U Z_\5,@WrֺWEu#IPdd LQYIuJNH+ŶcKW@9#[[ ~W c1v:UŝX{`UYIp?UZoc뚥} VPH #bRF݇?bxM٣%6\ſk+Z JI(IXŹVg1% #=FEkAqqe.IFv`\m<֒Hr>`ۏ:YUu9|~Iu~%k$̒nV_,q$Df}~eW- \nօLju ܋d 5~mj읮7][Xw1kݾk{7 $1Ў56:ǩ[ƏDmC'j)RU>t$$Nѵ?M:+ʐG `H?ʽk</)ؔ,AקhڢlWB36U' jU(Z(ZZ)sGZJ(ǽP(%R?\E%w(9E&hFi(њ\E(1Kۊ;H:E.{QEi?(GOŠC4_j^Q3EEQG)(/zJ>(QEQ("QRQIZ)zwΗzRʌ֌E/4ג4*KǮ12N{ d{qR(t(QEQEQE#dgi 1^c\7# wȫ1$|{~Wx% Sh]ǔr¼VEM:%6ɴn#)^?jo>MaqHwD?<;`Ņ?qs洲-NI^^צSC#<rN@1 MDd[>Wmn ~ԦHȚ]Xs5n 4[dO:&Y;gtEsd\΍s=ƣ,)p Gmt=EsQ(kq?*w,'ӑmBJsx fqִKV,鞵YN-Kc 8'kcm[g6t'9hj&3+y`ȬvsOikm|}+[@bc9ۑH 0X9-\<8‘+H^ >R*JRQE5YdT76#!}j96J$XL2F We՛Z\[а#l7籶kiYba: 6$* #Y˱!B:^uxfKnqok zа cb"=䁒f6\WD{oAv`i`d {+A2zֹѮX:j,nZ5vP7ȣMдGn w&1yfn gVV=(ފ: = 'bQE)9P)( QGj(uZ>P()4IJ)@\Ҏ(EP(EQE-> ?ߥzSE@QE.(QŠ(斊:RQGZ1hQGN(3.xR4(=(QIEPi) YA*r2:8=Fh dtKE{QERE%QEQ($ BvF=i 3+XiΈn;GEyW/t2n/!+d H#1\'ӥT#l18hSpsT{ykͤ))!AvUz &$& 06S)} 00snte\;`Z׳VKm*36̂9#Br;ք:hDwEF]g#2>R鶿p[Ȍ0fyZG$#t?fi>~c@cV> {H0u$dߞ Ѓ*ܙē<n|۝q_ƳdIf7 RtfbrXoq{8gee.Hh8gɃL)PR:*O\71Rl0xʻ? Lk2,t ?m j) QPh$Q*GRp{Ts[q MJHzd+º*J?2\漻^ i6y6y#c^xw])ZGwbN ]ɑ;koiH%]|c'pOkozCE刜dx[k1vi$‘Hx̹n4v)@GuM KtT[7CFz5sp4(mG-9t]JMH/nZ[Y*?tGNN1L֕{}N9_881xzBn,.ⷽ-B$qN1xzw-֗~q9Po@u}{z&߱+9Sw$(~~J7MmeV 9Һ089vp8g#)iGZ(E3E~8hh/9(QZ((j(EJ?'S֒.p)sE8KҊQ/J()(cފ(ފNEފ:(Eb^'ފ;QG-;Q߭ץ%RbZ) % &Z)h֊B1EQJ)xh1FyJJJNsҊ)@) QFhTeM5HtqHΨ2zi64S&BJ&d:>pqL*usฌ0CgٮuuYk#.35i۷e$ yjPOAs"?NʷLCc)P9#zTW N=5[UUUU A*:u5nc۽b.y%ڶÖԏ^k)|f gpw۹#ԀzƹH]`[Nm-Hի=907~Vǂ>%Y ;p:~D6w2Oj2C $߷VE썔N9H9 Z ."B(,Ld#4Ve$G(7b(@?{S.Zu93y(#O2f-sϵ?Xk{ỳ͎xkS24ˀ͎xoÆMBI.n66l tS]7`XV-cUlasxmxf9u+/mm ?ޔRIEQIE((IEzQҌq?J(Ah(J % (Q֊)h(%qEQGQEQEg4w$G8Bv\HF;c8Na锢n8N8ZhIa@8*~)V+hahbcި] 0.#wZq%+9瓻g @:gS> zY%|{S\mm%VB700Gg޹ N]7PY/`2i,s\̶ZnY$˜n^zUF𥭳;'dhf϶:/5m;VvV$7vd {jv֬L&p@Z{w6H'UmSL6G#?R} ۓ봌H(@@ qády ul;c9> V#0¢=*8?b;Z\K,O̬:09iF֠EkyqIuUK|áLօj[\Kr)< z"+k^3o(+3F #eP[Vw1yr%;v22*ӽ͝f 2%`YHQ]'bFt+ּ=shbUZD~mP=|sZuvފ)1EsE(Z&DB7-:3!2 K% b24i'eX}O+>iEOqq)Y]cOO+EuiIc̚ANP@q5_iosIFޢiK2"09laYȖ{(7|ddqTP4m[tJ;Y&Tm[=Zu 1*urkOIT;23Onȝb`@#9zV#bBp@#9JާVpyb0wKEbE2)qAtJZ)hQޖ֊y%-(4z(ҌE-gREERR{QAJCRҊ))(IҊZZ(i:(){RQE)RR((QG|E((()3RiP˵A9MtY#(2#(u* 2(bR"#P2}i#!'slPSlpi@R{1n|asvF[p;&i#+e,/(\~;{Kf+4Ÿ%}`Z]jVfduȲa̻T8gysUD|M 8[42Ũ]Q;NF?ȭҥ\Ζj㜌lR2vƫ+sVy8 ut<%rg3cfc;\{X(Ǘw~?lYUh[q?R͝WC7}$lZC$ azd+H0b}MRK{˛^90&!֤t2I}G&U!sH dLR@$"'SPf֝]ڊ(EwQEQKHOE%b?o粚WK|.qsX2xEy-A2^026bx/qr׌mn5R4n=0O\Qn!vAsCWyOL`N[Yd:T!yif pF< `g'g|LS /^AZsI#q;<l*B VjhhRDq#qOi^G3-[|6}? +ƺ: QA8r=(KKKE(JJ0hSEv.hQIEP3EQEftQE(> ?^E/ZZq&֓EQK֏R)(4QIҊ)x@KE &h&{=)i~Q@J((Z(h(Ph((EQQIo! *+).򧪫EE-sn*z*Fm(#䘢Awsz++M3Ð}٣e'<s6:$B J Ckd81֛Hݲ.Ftu5?g$Fvhu\* $KFmvw8g9rW'Oۧ <ϧY#k")Q@ܣ<0:7X4"lΎ N)żש8}ӣӡzU 'WoHMa"o .@N!ޭcX-7Lԥ\%Q1 ~> W'^9"d%0 c9^^^A8>v:f^vHTp}YnkF4+M6##8֩XjXVu1̻[mgZѫQN((cR6I 1K%©*:aY֦QmRIyz+pJc*:V+xG&8*Xx޵^E #XPF%QGR~Z֝xZ"t(#5Qԟ]m=WB 3m%\B"\)5c70%\ Qv)5[,]^yWHGXyykGy$d@FDaT;|ۘu {]:2#AsSeKim?AB$}3Q}#0#!|UTJ)hz@8QIޖ(E((Z(QҒ~4QHh(-;QKҗQEvE'z)h(((>QERQEr^'[2 N<Ng{2YH9=G\wY`;rkOZl9: g0[?és&&bNpZuQh4q{+rAǶ#Zcbw`s5 {v>Vs<Vw%Z%`n}J [}0NTGW!\nbQWx2m'i=0"k8L3g8R$ϒ#& fC, sa=:Hz>- U|#< m.VQ1MF;ȻLLO*0A1o-eu~'>ooEE6NX:dp>֦5g#.rr/lkO"5 osU<_kzw[[I $pO3pi|_7:֧Q-^E`ssr?/\<){>ͪǙEiPў3]CoyR(׫kXZ{ReF Mu2fczVB?z1[KfeVd{#X:UKEs ׵w7npJ ϵq!f;P(?Uk:Ʒ=`Sh?w>:'XicAw7yϮ_|Qy~&wѓs+{;TOxW$!vu?oAkn6Go56;6z=K{eɣxq9<}3Ƨ 7C2IqJ)嘟oOԵ [y.~fb=1 GY34 YLO=)0iY 8A94Ԥ=¼[3\fX48TB~"LO ~ŒF>~==0*YlK6LCGSSrQn'|(?V<8^j3 YvJG} 5,J|%sZ>wj,FrI_uCwUE)(E-(( ?袒QZ):QERJ(EQE4QJ((((J(;Q((((EQE93EQEE%WxbXsݻ>m> 1@^<|;t\_O]rxvѐ.]vv? #9Sb4y$1sw{q]3˳bEp~=xljGM]@S߱رW #pW%_H&1hA""sy&68"';OP#\$ySj7zǒ/>пh5^q0skmRgogm aFq?s&#ۋ*V08냁kд5aS{)h{ »/cMm]/hd@_2fWܻrvZO}AoU`dl!ϧ/+,beW_1s"we2"T,U[+K [N['c-Q€c1 ^B:ʆFM Y9ue0cx~,X̒o<~$r=ϭgh j6%m"R;8'SY<5 {DR1=H8SKZr"1 <J~qjᦸtF'*M]NTI\@Owy|M4ֲۂRpN#Mj\i4 1psiܷ I;% A$u ozk9 2YWA^OW!eT<=W_imfU[T6W{+[nf$n =A~50٪ko6Ųq~&>l+{`|z}2G?+nFKiAop@?x>@=zV~es*CihL`aG-XgGvmNN=ɹ?6QHY!n:u8>mu{y\]O| 6|.o?ƶiׯ$.nM*u@җQE)>ؤ)-QJ(QG=(qJ(wEɢZ;I*fnW$0`:Aʪ6_2[nٻ63j 4%t o/c ';?5̷ol{ QHCݬR t[;de"e3}]5a'&G1#&6e^F3jZ?J)q@ZJm61KހsE%RE&(𢎴QԔQJ84Q֒(((((((;QEPsڊ:QEQEQEQEcQES$}3g/g54-Twy6I&]n%*d>ҼYugy %cqz[XvϏ9ZcX1@6+u.m >T:`qǥkxFM3ʺ1c8(9w*"p⣜`JoHwTs5#լ}a% !&EBp3EWZ!}PI\"ܱppO$g[J.u!/Đ]c< pHP Eywyuqd4AA1zjΪTSh@%6㪏ޢT0is:Ơ|qK:/$&d1sjy #\0U{wsI1 ^Z܎VM.m(XtZ}2b-gB,œ}3޵-,]V8Yv΅\qsW$nG֥KHcVU- Չ(U{aFF dsa(=5WLۜpԏj8-$(=HPܤw84HzzXR 2TPW==w ٔo}G_Z/-Aѻ=hm@m&Qt?j۟A <^Z*&j6[B+Gqo{Kܮ28jmowa4Q#G+0h ZK2I o;zy߃o]BY$a6R|}9 |-l_ڗl]m>QB|dhmH2}XHW,#9=H%s#f[aj>H8W4f#H`إُԑǥ_R8FD,Kbf=z? g=w2ڻٿGY7.J[Ynfʱ rX㲒*x9nKw=XmN>foP wU70Os$")>u{mj}>69?Juooc@rɄ+3x+5Qd;9?ʻNk}{M!trۜ'P2"#G@aycs4-'*K#GVw븮\E((_ⓜqփފ^QGj3Fx1F(A;FqF;!ITg (9sRQFx9E((Ɗ)z > ?(Kޗ))(((4QE%J%QEQEQEQEQGz(((Z((QEQEQE0~QLq!2XX^7]TPi"# ;UP7a"q5:yg[Ml[e:4JND$e,6ĭ=_ΪH.dzȷ?iq$g؎GP} Y{zG[ l,6_һ4(t=9nݮe2_OOoui閍q;>rLr\ޯw; $.FAǡSWQ \%PWZ7:72pkVrź@r0@pFzՙy:% cc3ީ^uC|D2&\(9\c=Ub(]1sAc<QŀLz|I'jQE m|I=9S.g 3p1ʒO9xv$V`cϯZ Jقm f)W6%qN#;SWo>xzRu}cB٫8&H'k~]9~|*N>VI2yϸAZM:/_n\r;Lv5E$qz=|7R:c>t5_S}YKx{w9뎄gږy{XVW=JǯCDIeIh3!t䱅1#GNz5xnǽfu76Qwkwk [og x+ZĶ5+Z=Z7pvtA׵z\zjn2`tuǹ]ǂ3qZQdk Ozk]M2R&2mNくzư;M Ko8JPDM@p+}R=a縶2F8V\KMqj1jOp ,Q1X0Z/Hg**a@m tg5WQx.UdUT9oeXOY?ؼe!T IU/nqf@( rIU?zOl|by<?B{Ht]Q!8(RH `19t78uDEѸ ~Trrc3Ih?ihIEGQZ 1F9ڊ(E&CҒ.=(~R(Eh֛v(Z(((RzQIEQEQEQEQEQEQEQEQEQFh()R(#4QF=袊(4QQPqg2F|Ŝ(ڣH7/"̀?Y$:L*#';qni+X^$ d)$ gj.5ܫXЅ76HN F:I^y9UX7EV6w>W $mGGl3 <FO#YHto1 6qWm:dymc:W9.n17/]pp1ǯ#cntO&:^/9V?anr%/O! `ߍ?HokXe܍q!*85rN{{ mıOߎdFN;ի Էk#$O2qL-&aX#Q?7AP=yQ]ФI#"ޤ@sګjP)XMczɛi# ,ӜZ sv^8Ne=(WB+]O MblqGJr11L .MY:F`qZeĐr֫"$czƸF9n%00@yQMF 1p_ q!??3R4jVgz~қclGz}݃8YSd!7_f/Zy2%Vg|8X=_iu]vMB;;@$-|OeYC1'GO _cVgMē#J0_AvaKLC?k16ThF*&@) yծ}AemGmުܭV ;8끞Osp7ZJ-ml!3m8s+,[闚]p(̃͑O>|*mQA-yۤEm `8 ۶~ߡR-?@ѮlAI^{o/sl촅26u^q=7m~Qzu[^;EQEQEvKڊ(8Khi3ERRTE/j1E{@4h4E> ?(((QKKE%!(((((QERddyGQG#<(((((Rn8{Җ((.N#N*{vWwgUE$dFW? uϮ^w}MVg>M쨅"9R1\}ާ&m#YOw"Qsaji\+Y 0$`rjm~ah #Xk8WDM0np>n~b)-VѴI\NOip>mǟpKI̅L `Lg\ƩokbEkU1QӕNF3+3Ei b;`Ǧ?UKU"3-2fl<|8Jn{{[ G*uk[}iݮ"3*ݖ8$5fI_1`C^U#; ]Xv=pOV[!\)ag֤q/I]qZHFxbg#?i - 4F b`یH^uMc#*[|1Ñ\E2Ih2aa'#yY$FaVJbp{⧑x#qѲr;92&%/3i:yuئ)&KI/ڬF@5wZum7z^eu<6]|{ ˋxemH#1GȇqTb$,Oy1 I$TV Ye2p@'%튫ikscen $;vG[YCyI FTzU+>+ 2 t{}*ԶV9\*VV-DvϢ%""eXvTȬ g44 4`\m$3Z,-%c?9?nH8O١L@RQڊQEw4QI)~QH(M4tEQEQEQEPhEQEQEQEQEQEݎqсgqEQEQEQE(RqEQIsފR4b__Q?a6+SY^((PJ<5a@ gquQd7R]c19;v#Rѕ mܑ4\M[f+`;$EWu&{ I&3VRBROUojP+nمIYI}x'M艨[NTq ㌞yu0vTXKeQ+,C 8<t%GǨDE0Hdc<}+M'Ӑ[%pŤwcW;,KlCy;x+Z屰W q?F1Zy eXTGaO\>nH{K{BDZa\ϧj<7({*={>?Mʆd#0z_J!F;V;닋$H~q#*ɴ,sW|Y%ޣ5(|rFc,soCwq̮@v|1ZRܳJ1G<5%=ԊX`qNzj[cy1b )%+ 60T[ OIns#֬ Is#PN]UU}/-i^HUf9:^E$u2w5Vc܁֮UʳEQ(4QE9QEvJ)GZ(JhIE.)GZ(8F(P((> ?F(IE)h(((sEQEQEQEQEQEQhQEQEQEQF;(RvgvQU5T].4mr1eKd]sB2HQ֚싨&9޸t{Mf0H^UᄾѵBL"}CѵbnpkҬS\]7sa~x/ZiC; ncGjIUY8H#%X~-֚VBWg&\cYG."8yIl>`Vu/u(KBP/nzsqQ s}< %2UIB};u%}UD"$fsu$,cN!  A_ēޒPwrCp^9X̫H)!@2yKg~6o*UW !eO(OYoܶW΅pi7 . *~eܗ(,ViIv@+{[%,戜:p t^+= `ރ5ĸ :fT,jgye ZD q<:wy)wq2prG3ԫ-<@8N}j=WU60O$JIԵ7%`VX=p*RԤܖѪ\ҧZe,n:Ad5$y)@?zЏKiI%ìHq2N}{kIcL*@3'VOker" \d.p09'ITv\qX%i`Dt\ =XZ&G\ =ip';OoJx//4PCF9=sV ST(){QE%J((&(Z(RQE(4QEvZ)uQEQH(Py1E((-b((((r3EQE(3EQEQGj(()(($!EfcA!dW=8i /@N*/ۡ$݂7Mcc_FLu>犡cr[=EcM}u$f#aWhm0TYdS!T}})4FK;ARŪ*qG|tϭr4׷e@7>}.&/5 un2r8 RcG=ߺ ĭmfG$;2)(A<9-&Iǵ97v}SUk*My"'fvT9g*鶆RI-ܢgT$8g*EyYHO1c=@3/l1ӱ2s?#N+;ԎܻH?K ZD.s+yՖKHf1ÔI89fOVkh)zDHp@ Ɛkle[w2OO4 .3ҙuK[Rv[!3>?Zg5,PA*R=m% )BjWvm^Ьqa>?]Ķ2D9J93e^ 'V&+u44lz˵[ō}BFW;opGE8EOJ[$ENSҺ[iKg< c4 |EpDͷlP7)~1u kiZKDi |nҼ{u%#&oVn=+o5)[.%$/8{u^RX}ԃzt|wIqϗ yz1?增Ln9$U@-?G9BMl[{ʱIy ]¶Fp?^cHn KAۯz҃F}J3`<~oYZ䉵b:dqҷm5++,[y/fM>Z[V-WhAL*鵇?kem6+6U'8ICަA2mhgJs=YaǹB8?W;mEn k ;Ŋdv2}:o֏ӂ{u݋͕I ӯC'Ч 3<#JvL_Ʈ&xJGh|G+Hp:(>TYE1O#8Lz(>qөc8u<|\.[x>cd/J J^_+nﴱe۸`sGoJXſˣ!Ԯ$),Shpҵ[or}m$wO^:]3Av |ہWWLIe.2ۿxܞ}~~N`qd6 ?((EL;REQEb֊(99(EQEQEQEQEQҊ):(J(((QIEE0Kw<%$IbHqĪ j?[yy$6k3giR[q <&q2=s+KmYeIOM3VBȫM;EK5levm$Ӽ"7FG$cۓRF ]dJ.;gX.t4Fd-Ps}$J\R@+9j٥+O ydڛr~f5SLQnc~f?`M|i{w!p8_Iܛ7cΡ%#,?J(&y:ɨ#9&wbTlFBܸ 6תoGt{*.]nN_wf{oY:R0)(!x'SXXT}qYRi6bY'wg_oNsDYId.*lq#eYe.*ltM1,fm5 #zeqU*lqƩq,_0#vzq/ٚ V`UIlsSIJ&Gc$ՔՋp5m4ivEg qDT'Ԛ0q[}HCl{Vо,-*FGOk֥(z((QE.1E4QKE(hREP:Qފ;EZ(E'qEs:FqINP}(((((RQ(4J(1EQEQEQEcފ(((((QERQGIɮ{\mdSfrCێ=a3TҒ=6.uAЀ@}2:Ɨ1>*V2 Ю_irSy&5%\Xw˫o{2Ѱ'~5s-Ne#bj1αoV 7 GϰuTxHy!N)ui m̈́ qVխbWMvU 88Q[TmN$(\vU  /mJ+fX2+BY]mC(#Olz\-s(GSqmppKLb8u>Һm9xY}皁X[M1wEy[?嚁z}Mt6{XK1$⁒ǧWUImmaˈHdw8OlVyCqvA$H=N>U=ΧkH_djèc:\yV9|ӨGU6fQ_"txu-In7RJW0;~A yk1?8Ov12=>RofJe#o=>va/,+K3LoPDijFxǠj,{ ^v%n"Ǯ9u;oE,*ZE]41\!RjQY~ߪX[H MNOYWSh6c u}kM#t<;YWӮ{jZ,n,#8j%hpقOr9ozPƞL2#'%4+$bw' <ҝ:7o6mxJq 0Nrr0OӭY𾹠QQR@w#09Ҭ{\ћ{%TY eI.{ֽL)#NnvW74N;ڽcO9aKnt~pb՚_j(R}(R*(>QEQKފ(QRQފ^f:u8IGZ(Q> ?^^K4QEQϭQEQE3QRc(yT d̳O䶊}4ڧr3PȰsj< N2[QoIw+."K}@?Iy .-<0 N2[e*]Gs"I$lJ+ 8,r%y*&lcY,ǘJTJ#ڥiixWf2H&>&Hd^4${L4PI vds})>BJsi15($kQea#ǖ9 pgWqe†'*V3<,J6E*209UŨ]ed^ =1UaY]1&E,7 YvqiMùٙZ;V+#1?:kl~,)m< pU;Kdty]Rd)nqxΧECN2#s?81eB2@njM6明wݫA3s"͹Nywiuk9X޼1<1ZRj;~o^y:zV]uZ6GɌ. CZ !k.W?gJ!0qTOi@GasO##GS}Ȕu'ڤӬf8KKq/܈z-vKifi.B]aB9X}I$+y'9UnGr>qRs:%}&'E \.yYI&HW%u_K!u&$۹2N:wRcK 4e$ORJ ;+Ut:V:k(n9 ,8PFG9YM9V뜊M.+9nn4%G$h,48OV:U[Ҩ $NMzëH촶[|p,($;[T[謌>I#EP:E-Q(:E-EEbƊ9QGRQ@Z(hQH%((4QF{QE3Ed(Ͻ@Fzўh4QHȣ4n=@Pi@y8A.ö~c) ?JU,F>ܐ@)')QE()sQ(QE((((gTBB{ l1RA#:Bh d?q(tzc4nC@-9l`O㎧5iiح#&B}H W2:]xqoݱA,1ʷ 8*Ns?j=6qA˞RKed2GE\\52|olrp<; ڭA2^̀*ڽ*xx܀*ڵ CA&]qlTR\eAwxmq0KG{G$c>cVmtWR}Kp>k`T&Im?o$ Ϙ`QRcdŞLzu{1֙`"2p~84p#}7{6"zb##}OkY[du|?*еb,M&?*ղb+ C0% uHQG%VHn>c"VA`(䃟jܱKd4J`Q>ճieCԎ^H5&Ӟg9QT|?zπF^T?z%Կz:*3MdVq+Qۅ/I>qug27G%?2m>yd27lsr>ιy|TdLG'{#q\kFhRE' qקzgf? LwtKJ'k,ek(v1}m6ytg˒ET@|c5Vr5rʛ;{>ެԽ(EQEQE/z(=(-f)hQE/QIG֊:(IE)J> ?^^G&(EsQIEM,! R <}iFOZM< K/iw4̀9)t)JiAzx zasp Fpyz⑘JcKUJveN2$݉1VYgF%<.zTQyY%;U?:N0E9#RTu':ib&gTYK#Qz j\@6ucԬeǗ{nU?֣[W˘[=6 ) Zs_Zy8;1J0%Ua茂g}]~|@tGTg`P}Nk#U~Ҵ!Oe;9yڴ37b =N sҢr=}*\t 'E}ghl ̶pĔ=pO8jswZi%0Ee±=+P%&+E$˅b}ڕe[kfV +qY#&qm#Ra8gY요G򔪢+YJ5)3TL2da,6A}?}J5f$gm*yp3AҋM=,f{F-"in9ߌgޡZH"%cP[ fi30[ھegQG$1Kx_eQf(.0d\ONYM/bN:mh̆M@zTohHm;G|^26J,݉^{2\N;U-МxT'fyǗjY6G6̿8Vlf&y"Om5[C9$=jZ\:nnx\X{tIiq"ߢI'ޟucZ-aN~S~4 d <ZTh7G M0lb07j7jgH*.8=wďq֫4㏭c}LV'~e''kE1[<ְ,p}W擜q)ǹ(q$rJ o.-̬T?_\Fϛ$NLV[%M:9vYnAf Pqu[kV\Uic(9:WLGH$@y8NVhrd1iLE eM }Fʖ2~F[M<|lW#4E%ꠑY%BkuX!N8^٬,OGKUˈ:RW?3׬hK5:ۄq?3Uu_[i5; E9׼ko-wb9r9:n>!.U9izΖ񼈅HQݼ9>#ּ`--*#;!Dۓ[Ďo:!f'%'чC^ms ݺ\[$W^vpK,NáԴ^QAE(Z)MEm\帊EC+lLp?#Mycv ]{OҨͩMrsl"^{za5ĭ%Ϳb_֒^K#<ЏI}Oδj\t?*:PNqj3; LxtրxҎ{QGOQN=((IEQGEQMw2Oޛ$3f 2{M@r}M"q֖HVA^ƖHECC aHH@@=ʁFp3)ʁ{ Ҁj>ǀ3n5h:@yj:Q$AJI-Ċ(hq@cR;KQ M$EPSQX0J2T qTw U_ΩxMGyLepS>ZZs8+r+6i'r!T5Z)޻#snb#MF)ư(,cӑkQmw?!)sI@dgq޹LJdV&P?ճp:Cnc x~2gD%VTk{qa,{N*Ձ e+ʑB 8 {,S_LUKG4a(hI p̠/+#Q_ýDI/pu#gX鑤-ԹϚnq٫z6"[-ăn7Ayj eG ۝wArqQiz) Ztpc-p^f[<*=:dKKfӓ5,X⣱d٬cLcⴇMMlt1v̬GŕYi] 7c8 Տ:cIbwQ@b[ѢEVI!BUIƊ $P~Wf>EX~ Xs^yVQӞ*ΑMAd{YLzք7}{:x0Ű,Upw ׼CrzݲdHsۑW'{]SZ[NTfǷ<¹kRdtv7cONA/zu-AhȈq9~;\LleLG$~h?ٺ¾DJc[$ik YmաWcb;I8<|3o%lks JxrqXf6ZH$t[@ ۠آ~f`8ED!q/p[E3&lpǷ5Z\+|o0` o#@kIa.-nbֳa& eZDx! ?( sO~%"[ ;= =SY<Fc֠DIE>GTbeϸ[Ռ5-h!E <2gБZe Ofk_r4,CmYF/[߽1އ~sHfߵ;|9oeP}_ҩACzpl>~U$HmLKs#XP2&௸q&jzv-$I]pbM[>qQs\jF. I+gp*Ɵ%`a6A#w#߯a%4s^7$] :=j[)lE5̋'cp:d{Zoz@g¤th.Ls,08` *VG{$v)9 h_Iw2 Ӷ6co04{7, *qŨ^'&hℇt=jqpz}R{$ϑ8f೶[t9i9nzxVY^ ۙ`=yaۂK{10 ep1ǧP&)$ n7ɎG9v SoV3.e*N Qm94#7{ZOi'qp;Ww'qzsP]M;jP`X:Nktk'PC(ᶏAlN]͵kN?v$:JkRv_2W8ߧu^ky-ft3ǷWkz-ZHV8{2g[p3yA=c] @[Um(sܟgiky!Cr~WԬ6{r VbժZ(ڊ)Cc VTZwCGz(ϵ.hQEQKERQGR)xIE%> ?{ z<I<RARөh) rqADNI)QiN暷R)rMu"ePdw5>j(ETr Y@5F[%?1~0ZdU@kṉ1 O?5^|KI$Fώ4heiQk2.@<~uVĺڝ"$~i%aZ{_G6KqPp2yToUv$奘ssZĿ1bL\'ð\U(|MBC ol1#=Gү[X5G#jV(XԂg}zջskPQH&^wy$~SY%3m" /¡H~̭:e :5Ua:Nа(;֬7f2fNc,ZvkBbIV%p:npxB$bCʱہܟoj75#běTvZDۏRykaW#U?Ƶ0FsPI~6^[Ϭ~i!@|k–T_8`UPOOw^1g?xkR]8(6z֤%DZ6GZҼ-ADW }W.' $qWn5ڨ{{a0vX9SNqj5u}>nQW{ 0rp=QԵ7YF9V=xRGϨ$Ő}FAcsЋKh- PWޯ.6 ci`SPncr0%FYXcۀG󭙾 XImLI_ք t ,wHd9J4$:-0׵dd0Kh'q( VFIKe >T<c歜~cm0OR1wM&AvK91IW |f[V̶ȏS1=kOXKl8e j4G+JmP1 8;jZ镘08~7)[-Y#a`~ub=҂{I8!цӜrqԭ{h#2}=58VJ(e0*tq4b$Twz?_'ӭ4I؝rGMCwX34<3?aϿҹi%֩b䀏zdW؅?Ax5u߉4<^VvX}DZGMmjiXyrݼZ'۱DZmڤӊXIHy鼻YqP;qֹY)z c#-:x"8#wy2wH6s9s,L l { JFվ,L'wx==}xQ:}mD+Dg8QϷ֛In&(s3VU"#}HʻHcTAs2z~UKU&ɉ%VT7A\{k4I9Z0GF"3 bjhy.@?뚳y;,Ɠrz uREIՔpC=6҈m=o7%܏oj,/f<Sm|[;gSyqE`?Zli1Ur{cb>#ֲ&&M>CҲ9tc=3Y QxVdv #; Ff2#;{6iHbK)#&ր'~? xdhbTw;ު4;K$Y+տ5 #frNX;ViXHGýZKXc'vǮ)2Gڦ{o_ʟu5?%Kz*&WہUKіFGIlm{ޞ#u8,0~I ` eK@FՖ4#@'?1Z$mfDAu)pO+OC&)u )pO?:%<.c+rLy^;`zWptWb(\N$R=v/`xHKo'RFR|C~umiP 2v8 y95 D[(N}n'+fgt G=k+{r,G7ɖKuU_=Mkđ^t,rG͑+U̙" 6{^mKq༬df9hvPiüdcs?A]F.1 Q+;U/rYRIgwjL'?xG{Ek8f쮬6 4oB8 ϵT6o-Kgul! Ԛfť Ou!gDʾ?c@1Jo,/|CmˎXa#yBnICueisoY# tSx\ɫi¦Ď*߉!F6y3e烑Uunٌ-ʣE v5 BWU) Ð}i4 \g7zrܡESG8ֵ- q%m2ut5~’=i\ȭqK,ޙueH`hQxCuwLX"+2Te}rja-k !Ǡfy;Oͦ8d~giM`CcaH GnOyecr3AԵٕЈj؞1qWlۻWʊ܄ P}я)ͣ_7G40LOJqX[3,;R?u pӵM!FYo9&׸\2+ QXWYFϾJ/j!6:3s\k[2Gv gV-DjGU?=qZoa7dt?*'!;qҗYCjNEe 'xHPi ,(cؓ5ͭNEs~´ 9\vH=WQJ"%`ø?)nj0qz r&XV` y`?x决|أ BF{4/+5bbu"8-:s!oo(ԵD"y*wob]cq꺣G4Ƙ(}g6j:$CurvwtՙFkYcH::`/홮5;2ڥF c r>iop0UN:YXQ0\OwlB`x8=sY[Y"dDYp}A@̋pL6!?^ $B-l@~b^AձizWأiyt% *zF3S+f{昔"IStiڑyRyQyL [wmHO*g|͌~:diuge$f<+c,oĈdE;U 2 (R"6 lg>B{<#*$eq)iz 3 6{}iY{Mx-o0O+u~M806NÕ_^xNen"HlK"]ø^@3X>!%-4CI+5h()48)XMZԿK ":gκm/R]Fܷȇdt&3 KJN} sYiݕͺSD 'cֳ%-.\)򧌀F ǏƱIn}g(+'<HG=Ι-RtD$uu8R s&,.{I#u.uaׯ8EYp=gеi ;=(Y8ڳ\ ܠ m1}ե[ZYnL;L5z.b࿕mf\s.{ַ.R-,YE˘9S֭͵wp:mEb\sr =;W-kxZ[Iq5C/U>faО:?okqk6<]ryN|䓎ù jLMp3!@\~O nnu).fXzr}kA>ia y=1EmGRԚ4`C2A#z+yUHo)yޭj){EsE):EQGCJ bR▊:Q> ?ʆ"};JC.wgӿJ@㩪*7qqVl$n/R9z?*:u\*ԍDUel _Z7M{[)]‘dNJ''ͷ&'UUnOf'B&^W (Af=*-4?xcT yK#Nq"s֩ OO4[!%6tQ}%H#';d@r;qWHlϗ&0AUK xWumNY-\G@?L^J60>tؼ:[H }>[{UXlJ_k$֠_ Ol$/?UR >["\~smvBO'kĽc^ʳnaoge5;Z0xQW A-i#^H?u%k[8G,yAר*֑>D Hlc5k_6+g1㠭t}:ޖ[lc3Ҭ,$Q̡eEpp#5mI@Y\0ȢNQ(Rcފ)zQE&hQڊ): (4QI(QFSXddu)+$ezְ;oZ "U-{{\'!ԵDz[X ʋ*Ԛd2[`2n'{V!8^.cV`?Onգiev7:lh1C8joi:c!, qn1=+-!?cN@zu `xoHm IsqJݢhdaB $s~=Y7p\n#,>3>k.mz{K= ѿ |܀jڭtxUn@'^@9:||Klw93~uJom%xmZ9XIs*1\7q٣% 4$xuUE `<#,+Ib$U"s֕%8 4EosSjno 4l(Q}8>$KvsiRۤ ==>ƙ%aw)3ʬ݆?POekmrIոwGAoSRۉ.R0Oz}vp@1+Hߌ40A#:,zT)\UbdnXҖI<1џ1ZW:lSnqm4́= ciY\`ř)P[_n5T{gg'ߠ{ KVu:8*fV?_&ܰ:qҪ%ȫA? 鷕aYLW.R].]2@ >`=/J譯CKwV@9''ߒGҺXj!LӒ #|q^I{[[n=:k; 8 Ri:o9ql!Bz3AK̶`$z3>]$MèP[O An!vl}Mv0BP@@b PeQxth, v@1Ȍ9V9CM[UK"F,[n(U?Ƹfsujg-%)1srzt wٵ ,kyob1Wn63_KЬҍƗX9#@-YE;i^i)" cq?ZuJS`:j:#H_" vHwֵH$-"k 8}=+T 9DE%Ԑ*q95 {hQ H`>`zVnf)bf!=# Ҭo/eh IO=f`sueyq2K1ecd$}Gew[[ k$9PWYiv$ڝe]xVxcdBZe?O`}=)lAD(BL'ҵ+-qu=/6YwZz]ڄhO,Gخ/^GWKC{6#IPp~F};P{ {F@x°$gqӿnj4I# I号 ~Ny d{K>w\W:o'WާaFIy$|WߎjK7j~s1.0x(I-rpN?#Ew v8'Jt)ڍё%yLV(VقGCqӱ#1PЯ|Ks8NAcW)jq&yS)H 8]Z"'5薶Y "B2IAvP NKRRJ(()h4R:J(3GZ1G.yQG>gs֓_> ?(QJ((\QEdE&9=hE-QEQGRuQEQEPRd Q֊(tQHs)r1.ihECXU)=W9Hiq &{r ?Y#E)>xn-8g#x =ֹ ^ɦM,7  )ԃkC{)^Hg IfSz_rF@qa[ۯΞl{#Бx*;QmBM^T~dj6z6~ϧėZ`^q֙i[1#?y̯ F87-oc N<ǧ] Ӹk奪dPd $Ԝqֵo IbibG)FH8`֍r-#z 889 u'kռlX6Onbu1=kԒKokY y C툳ֲ4Y& ĀC#q⦍gPA }Υy`}z Ym eFp$VJ+K#1,Gn̊^i߀.@~WOuԸ?/4FnҺD"cƗ0T?P ߞ*KoI Q<  KtO=2%OWX_5JBLC2x+m!Z.K7P y7g5["2~?u79Ϧ+RMgPȎXd+M_Qm?uG<uqfc2n$ K~%ī䄙>nez(%:YS@b- >Pz-ԗL-ᐥ@ p6=~։u\wBh )s'֝>##9)^,Ew[[ ̣MfiNnnAX1^Eާop6(?Z&4薞TR$"VUeQ\,~F n``wWÚlF]w"^x+ЫmW(ym6.NIռwzEpˣiV[}d2Hc,ltЀ ^G%ĚMٵI giG{w$}&+")u{ĺv^<7"Ekt\mǡR^zˍsš,%Y!@瑏Tմ @iw^(0#1WEku˨"Io -NJ9zuiWh`;Vk X.6ln8HSӣF  |>ٮMK472GkKepN1*U\sEQEQGJZ(Z( (RRE/ozJ(ڒQE:QE֊((QAEwJ(sEQEQEQE(P(QE)1EE(9(+?ZUm!7Cr+moq.0#+W>MPH\m%:\O4#*r.3\Fo=W2NALA_I.A3\Ƒ8>aOkF8bg`*[x(VloHD+/8X=ŬPˮHֹ 3>߾s$TBwmzV4E9}>;gx>(%ĩdžꧨ>^ afFqN0?*ٵɉlA u8TҬs1$8sg F` t{l?ΠM 2hdbV@FE" PL:i$S1y$ǡ`wl25d#1nw즌@cWިXjw ֯wH.a`5Z~\flJ@5zqܒ3spF"W*qֳDsɌF qT j/+W-s6yO#X2bgid ZXMLq%_'hC\嶛poVT/HKº0կpD1 >(T/0~nV%:*[vHʞnDCzҾVݢC.Dc=?uWh(S<ossВvi1nX h~(l<9O2zNupjΞ$0ģϓvsQGqp[&P` ?ZihMp̠ap\cֲu Cj㵶g& t1Q:TEM rz߂Wo[QzMz(ۡV/Гf+V_„z8ɥSʥ@@8C~Iͺq%o`}bO,gMbK/`Ok>ڼnx(Xr9ϵ{^y!UsFdE̡j\6GU. Fr9PxYÞϋG0aa?\l i31ε|=$-h0ϟa⼟NG/#'ڼcCӡ+H< 3q^aiqs d{׫x4LǏRyH~WxtM 7-+<pRTvF;̯#$O>ƻ:h o#*I)[qG1!79tW7Ys(똌Alm|?+xe#x/d[j̍) !s\^ϣDS0$dHF~6g|u.$p_)];SFCjݏJuvY[ ^ mߘ1H5c#v3Y9Z(((((8G|bQG^Խ(> ?;EQEPQEQEQERcRE%REQGz()14QGJ(ފ(Z((E袎QERw(5ȹI91ۮkξ#Zyf=:W+wmF c Xgw 4P=XmoJtb9fgn6sx泮SP!DrlmP=j]ou,vV%@e}}85kӵ+3IHTXgTy`^$ׯ~qcE4e}{ܚVK!BSb^ 72 c#qq֞-NbgreH|sT I62e#PǠ{㹡YdC"n] Ud#3`44N"^zRF9n_OEAq4ң\ < .h/^\*K V0F 힕-Ox\,$L2 d~KWs}7Vy$lK1㑃Xi r 1K0X#V^|{k:2$bO1W[[wX*#Ө>Ҵ_\Al۵:cdcyr}J^sۨ?_Jg7v銪 m9*u duuq>[(dW$H ҨZuƭ<U39' Xk9mwe'շ@z*,om(Oc- z:e 2K/V,{}WM!դURf;iHϢ@ cGT}bj7A qU[OIS]N1L4*tPHTMH-]ҏ7,[9)ߎ3^ gëI |˒/9ҍw[OAB,Y{7--%EU,rHoGHΖNzTy̪I9$^q[K#hKȹ \k۾\^a}$;]ҡv9 p2:׬|=X-ekq2)rr^p)⋫}ɀ:ųbƾl 8gFY'Mdt>-6nV8f8?Z>ioj֞7qe~'9h,'q eap8sUNm*VC!?QX7z0KwoqxBėY\ۙrf@z\滣Ǯ]GmdCAҵ񶓤JIq *"ȣ xw:W?Ñ.K3 IU@dp+-+V (sڣE֥oinaۏ5$];VR`&4BL8=ZuFU{e[qn3flz81ũ!j t`uw,'S^[rH Q#ЃʖR2o_i$]ʣ=8ۥ> ׋B=0qߵA`.;X1ϺnSG ds5*LBPNv߻Ӛ|CHp }?<3f4! }:=̘deb 9cxb9Sqcpß_+i, m;8FQ" 8qϯ&So3G(R%2;0)$r20NkKG@dh =êg>m:ԺyQW*1Q=*x\Kp$W ĉ8qGS\eH|o yװ,!H ~װMFKMc\(*E˻K *=QS 43w9AT%PLm^$vo?U%Y'w}Oj3(3B~ª^H<@S iFpҳlXXۯLr,2I/ʶKKxǗ:, BeYzUڔFtYo *-糺е{k2KaIfpP.}^g%kN?GQMz+i-o}^ R?t 3ڄesMosc5 džlr9o5Yx?L˧4±.G 18=>iAo-FNy.{{B;R+TDVT6X{Ǯ;gmnO?[4YJD6d'q<=΢jۢ$QNwJ瀫]+$Ojjd́3s] to2ٽƢS̚3C'h@?GtN 5_2[dw緶63(g s3l{t5wYE|^ykidk9v'##85j:TіickP:@Gy<SIfXREϘt$2+|1c'm,gz֪M̶w ƊPr)@> ?:EQEQEQEQG4QAN1EE((QEQE'QE袎QEQ(((Ev(+Ph  m*epU[b#ha0|r+v9\~jH6A%}s?ZǴw67rd2 /?_Nh[3/,]xd(%F$̨g8?JG)1 #LAo8$3E`TаHL0 ؀׃+_O>Fnc * nCZ5҆sq\ؾCdBɹY`{eQ\YL^w1 g`lӰoP;fٯ'0Վc@].*1HnHvSL}GrS@ QJBX@)$pI3T.B+TnB)ϛ5YU by54*x$nN=kMv:}/6Ӭke}5 8;Omaiu=yur̟x/}Wiwg "Xx"=5k"Ch }=]%o" y>o- d6i{:jΩmo0" gb8vWɈ| =O~+5^SzIw>oʡOSJ/]/XK ;[R@ ~^$}B#I }`s?ZEau%z ! Jø98~5H+9fHSJ)b\}+^[5YLVpwg~% 2.dTʀzVņ4v7i;*!3'^~c[eqP&k+_Ik5FXck qx]6E-fE yK44cy5)>P'zt xmZ=N 8<~M'E?i&Qfw33U/nnZn'BpvJ38=ZjW+(2*p9 LqzQ^7Wo̅#)>IGP8u՛Y⺕U&@|E}",s2/@?Jt TLWn%dQ0ZZTQEQGj(+3Ve% [h裎QXZt2HLӅ-=k/V Kv=j>#޴ V(ڣw\d%Z]F_\|dfx9 8Q۽tZW6x1bB27ʙ$; BAgPӼQ"dY# wW0H݇,xRmJcۢ׾k5Z^\8phw?zvurX RT$v@~jf7%($\o\R&B ltni>h. %$iP~)^h.m̌ 78ZաWh3KފJ8QځE(J((Q@(sEQE8NQKEQEQG(4QHq(1EQڊ((4QA: Sdo.&r ڤQ\-eq3Nq2i<$im[oQ-57 $qĞdVyC ~Oj慬Put 'jFkAhLb Oa>w35-a3K&dTHr{cJf1 (4_q#'ץ^۴pl2?LԙbS"&ֹ'81u{96?:PWϊ"ٶ *żf(-m !pۀ?Bs,Q+g8y?.s+'MJecQ%;`H9$׭eiO+H$_nb*$>f$x;^ %鼋-'.nԭC<[@=22+Э񼄗iq SXbiR0b=Gծŭhe+g  ?ɪǑp[&ʶpN~uPj25ND_qt+y"d.XnvyFێ;'\8xSÒxNZY?H/Һ ohx~k2K*~YXA䌎2٬-Kӱc0Xt]>]eKd`ub63t+94I4dmnj¨kqYhvWQXȓVW1g8\':jZ~ǧ\yI4X,!'Ge;ZHyDnT)3j \[AhsO~߅\=j2/qB1}S߷V)sn[-><+5^ic-m ?^^EQEQEQEPy1J()=;E(;E-Q(֊(OƊ(QFMQ߭RJ(\{E%RQE-Ts: 9^+K PO{~=* Y%nUSsc0#fU:[M v1/#;boI N[0w<1?8? =G rOuH2L&K 0L#"y]d?Ckz1['8>Ɱ%km$q&1~q3][2JqpOVoKS.,DFvpx+m~̳ lQrB=Mly -2PrB1j:QX[oz/r^91C9 5խ.\ؒ3r8㓚ɾY]\rZ8ǩul OԓVy*wSDJ,x$OZne'1$SH sLSZEUfŒ`ڢhUh,wyk𦈒QdLʃ9P>*T$ȩ>N輙aڟc'.-D9-|=j[X 6NZsɐsa~uJInulZդ:< 6˃ې:Uy7jIfd^3, FYpHKJ;7gut2mmHYCZP-żK+V;UyzڏYy4Ҿgz޳8c^yo$Vpy>9Q^'I#d <I#~^10tW##= saA}kݵF?lv ˁN6|r*(?+S@22oŊT*0tK;QGOűVawϪ۶n4~确E歧M[~5idӏ& J]VJd)O5~4jy"YN$5@=2V֕i:6_a[iLvk,BZna:r OduCHPٷ"e6Is/@~adk;x~=>hLw dku4XL̝u={/"Ά'ӭ<ߙH z#8nL*о rOnr }F2 ==Zm.kQV(2y bu+^u+cʳ/o++SKER+a*̻9 oxcQy,YEj1bV#.AO8Eu}2鷒C hW20<IyowÓ7Ov (1|<s/ lcڹ)6oq2=+sž%yIlݤMn1Gj][b?gՋ7aVBc3UXuc pOEUw%ư@SDTV+imKwnbMk'ӭsӨgiE~s5w*mg'Z Ll!Whփ6F}jI@>JƬSnz#9 FSn{79dEt 0X%2~x-$uyN@ =p;p?uGC#`(=p;^3ma5s8ܚحԢ(1FsE'J^QRih)?JJZ(((((B@R3*!f8P2IbK:SMX]Ѹu2 ":HQGz}:Q֊((QE\E3ڊ)qEEQGEQEQ2O $:A IRL]scXwAuv-V!elgy}+2`bNm;+gE-i$ K0 0vW>LI2' \5ko<83*Ƴ[:.$ ulZUຜ ?ӵ[oa48(;X&[Gr;~Ud~Vn];9n y>Xz lVf’NY$KY. =t$Ip}np9'艻[{h 3j/sC}xWo$AfUNI+VDn1ڷ7಩F=V=ޢNDVy<'ZvڙwnwR~Uխ:t\4.bdUTY'ӓV6ayŦ"n?$9k?Q/q SS9zyQ-Ν8v 1u<ޡI%I&>\c,19P4 'I?19"V!RUÐ>t찫 ®O@5౼}PX$E$l89cj*[]N~u&9$C"8N@Q6yc\vDr#t9CVVo;3^0akr?« 6t7F70aϹ8 Dd1ټy9V}IM7;Ū)j؞@[uVfb{fv-Oȡk:́X <QϚv}Z}w ]h : ȗS3@Ru"[p$Ԥ|ܯE-ooBq& pr]iɓ<s S^ 5YA6(xwf% CM3Ѳdj drVMwjp9(䑶gSM&R9ݱ^I[fqSe%~&U&8ݎ7I#lϯ̧]kosXoIyp2s mZ->AҁY-i/3滙$HieuD@YԚYeY]R4(ɮI(I" 3=kZm( @{c93M~#iS? ShDT(bOzs~?shd]緯NkWN]Cv%ᶁcwg7󮛦j[+Ś eө= WL1s ' 6>(lE9-V Eï+0~:]"-_Yu"-"UuN.UڽۏMMGSdaZR,r%~Al !DiJ}ԑu妭fVRI;;ΛUR#- T/kj!Tv}RG]lTwnd؟=SԵ[=&=\dv*B[؇ןVV6İ)ו[VyVK y~c)'ե.bwo8!= ~z0:úxƳp4v.(OLC7˪LY똶CyL8TcBNsre3.vS"XC&)P\"WDdTmu3(J]v@ʯvTS> [yФHIVn&Uxw`r;}DjWp  +6? }#jkCF aMR͏l_Q^ަ4ScHUYW.Թ+t9G<1m6(O_Ri](s$= mec+FrFy=ǯrx\yy$$%}7p<zzۼ0d<3׭o/A:W%AaFzWd 0}=)J KKLHcFܑP1 })9¤( QޒQ֊(R+> ?++(֎wQEQEsEQEQIE0(R(QQE(EQKE袖)((EtNQUVc Օ,N8J#Td6Y"\wf.cp{ WPhF'EG|#_Rxo \_^^s.CD%1唞 2y_R{4kWh\ Hev(+.I#]䷹PJ6P0JAo5[cIW=;jEy >kr*3V?i}[ʎ5-Ǧu5ެDvLrKmO@5N1q)\۞OV.dhș'aG}qjj:ڊHm@&H`s֖}ޫf]w\m^8cEPYeGj7\oRݎ~Փhn?j[bԆ`\?Uyiڌ1ۀԨ`XVQ,-q9URG$hP}sMyrc8;W.TH7O}j .VX *OdUHU-8=zOjZPzkut dL~o$q=NzXr.Hm^EDY1@=RIP %+ʨaC;@klnlfO ;> !7:)m\Ae5nP|*ҳݖ"mwYOe$UQVmvd@޵~9o4+tcQa4sx -4', `gWMm M$B'sMfC)U+?@Rh15e.B;sX8 l?Xړ(qOɗ1Эݪ c,s('gֺo UkѶiH8 {gַަmF#ô؞? קhtZn1GcbƓ[[ÊIG7jOL`8p.G˽ܶS8=rpɠk\=qrrg F?ݮ3Nth 'GW*r,de.7f@@=j6%7ZUǚʗle,f@*KUgӥM"FYrv\@3qzZO$76,Gl8;Ti3[]i61 $".\P㌃ӵMwvsK }h1NGF/#(^wn!fxn+i5K7ۈoAU=g!HbIwg.N.g_4Ud#88YL&FMy#SZkYCcV]=;',|q",ׅT)E9ەtp=ѯ$6R$e2HJpJcv>O7I̍ *8Q{U6o8jHYc%O3X[ԬugH̊ܕ M5 -YYW.*>T[%ѾeI&SFQ{uSV|2~~mŜ\g-GSRYoJ8>bn㷜BP\YSi-t[{VQ>>d _NϽOkE}kb|2??d:uŜk8U <˖8%RHtcPOW%َ=˟*cqj%/lma XǹcSSGny&pE_N*弖q O2ə$E9`\vڭ@ɦE|^9$;{xZd%g$E*<$IEs2hєl~8{5a'ˌШA:kicIs!V6;F€=q:C]yc(F8l 7|e&Io0# %h"_&:ÓSXqT-һ;;gn1sXwwDKَqcXhu:fGps~7Mn*+41ڇs'S,hnfq OjʞDaxܙ ұȒY\XuL9WWڵ;(dH ;BmZit5sj74}C`zc޻&.9$ߎ40xCա.؏M2Þí"H$e#'elZ'űF6zmazW د"Kr-<=Ԑ=ǯ}o#kpQW"2{ {{}=͵C/ / OI{ֆfQθpݑU'NMRS=7 r`ބcQVlZk-&Jeb$S#?1ЏO: W:2ʁ79oTt:ZZHڕ3J7H[OO|`mmݯE 1| ƣMFODrn`@QNzz}(n;652N_s g7NIًΧ- >==+SRﵽr"$=AFdzg z5ڏ|E@X1@p!rǯ=3Zwe浬En46fPpa9~w>}Rt&4M?<^ry]BʱG nf|9 Fz^rZ LLRZ.c +'3xe!ѡ4v6 WǮE^:ّͻEs:nHU ָ]OTHk+iD )#%{cy֭m> p '=KQVT)d% >ű_+II7ʉ $zq'z?jQJh43JvCyeodkP)zTT*E y%odkI졹֩<hV$Lm6l|75k"yqd|K8LZٕs'@چygJ?կ͙T9<1\' +Etmlps*'F0=+.9d"@NBn^p:zljdSNBOkaӸ/ 'UB70z#xp2] ǭ^ǾptiIgg?Q]t(mQ]KC!aE{^zRE(E (((((KERGz1(ty> ?ɯ\\QER(((();QE袖(QEQ(=((QE-QEQERE6)ʳ(;zgFE+ȊW#8>ZcF̡jwj\g, !vJsz~o5qɳ,Тocּ+O˴Dm$>=k4avY/%Sʧ ~":^nW,?MaWN'77.y([#=:ԝ,@pO5j[3dC2BV="XJ}luHm)(8霶'D${}đoxМgWi$u*P׹"q4Fws}~.uO&!gK[p>j{9nSI7UN?ZՍNE62k\]xJʱ< ۼc` 2cȭ]m]S0\fѴ{kM>6o΋8b[[+xiRUrZ5#I';gaoRU"I-c95*eqm-NP"=z/HY\څYgGR# zvk\[ +)Pzo2+XtHc{xN}U|Ŀ (g' NFw99ε|C2<[0;~f=9''>k i[hHsu$޵|A2ʒX6Bo1''>REb4"Szqc$((^dy+߆?JrH#G@R*9ZAq9+H {fq4Ÿ5qOsQLycE]k;qYzkƺa cږb7qc?5:f%i^Vo,r?,?*/E]~|),r?,?*?L;TswHG\:+ʰ>$jʰje9dM=m~br9utxjUAˌGQi} K[$hRr?*mtlW]%ޓ4&.ؘ$dr3=G5{aJbg'͎">es\}^$e5]2ر=:mk!]ju=:)k5ߵڜam!zu?iyf`(I V NՍHK0?Vڍ:},XՉHK0?VۏD׮$!X;V0GBKOazբmT%,R Cz<>qRwظzXep5 qXZ+؂[Al\~=([Yw;p6[^gciZv R5 ++]:-l㷁8+K{HPaQUSqEQE-QEQEQE-RQEQKEږZ(Q4f(3E (EQEJ(hR(QE ((4QHhQFhzQE(Es( pi 6BXʜ4$dc FG ٔdcIb+X-F˕?³dImܙw ~ LW1=hB)S*A|nQN?kZCi üJ'/NpEN5Ӽ?ޓi\noL8GƯo+HYn?V=\RfhqL@ǿNlww'13$IqStK˫r,~\S,r0)=ƪ/Jv0DP9?`a$GpS#?GnBQT  gajbDؼHf@=PFq#>PcY`Y+gUc`D>`Jq?қ6g,fPх s) & 21uQsG^'[ic$0} I`{9JAHDdpaI$N9RL+8#} {.sa=YM&YW{1jqׯZE=֠e $d.vGa~RYE5HC$r8.vi9_֝iw+r,.ʏΙ=Es|2y0U> ϧ'{wG^X y2KSHyQU> sZXg畜)ejAM+N,{K+$k3ZbU˵7d1Yڼ\EycSb[$K x?LÖPKH BdKRxz]] vAx oνxͤ.b-"OaD-_8;yE{-ݍoo"K)8W@Z@``UޕZ| d5xv]2 Byw L~o bkIJ7an#sfO?0}{59'dPo*Mzu >*;Y$cTմlPN uǠ=2 YCΒ#tz<R=Z]1NG5kMG\ Bz6ԡ]^(S.1׎U汗X7V0]~\qVͫ8)irt\3", L 9P%7sw2#[道J)c4׺d!nVn{ tCS->W&ٶ܏3cbsH'p-LZ6b9X;y:.}3ɚks$9#=I{i~ ' qGTGQ,eVgջMC0B]bQԖ;.SIL{̣!&#hնVw+UMtmF 5m՝RM-dVΣ!%# O)=K?q\my=Ã$33ko^M 3 !ōq7k ٖၒL8<~cYe,AI7Rp8f䘶Oȿ~MpX?=[:S^%P *WNF}Zk2F"skgH[+v1#3VoY's;D^>Չch#$؈K5fHEIQv'k|5}M1lrzW[V" y˱ϧzztpFf#2ˎ]zۭJ> /EQE-QEQE袊(()h(.(֒ќ(> ?딼b)(E)EQEQE)1ERQE-PzE 99㎔<䎼q@9)ih&(3EQE-RQEQAQIEQ\[k[WkW$W9p_ӯE/nH\l++F=Vn=O$a#LJҰtbn%ArӒ6ќY=չOi^q_Jq%yK+- ^ye9KKe>bh*+ifjW्px;vTW[;UP\\8=w;G]E-ܛUgyd:qDzks@馐:t8Q u04zrUre8WY]t^I.<'jog6~Nέl;SSK&{) $LXciWAPGӮ#heŔW$ xnPI4ḧ́Ĩ$`zm-gY%CIؐ2CZ ZO k2}89փ>%m;K ,Y` dgR\\ F+N#)_Lw=k^"}(A‘Ա<7Ospb8gpu,}=^=Vlf)D 3Mbj6 kMA 0= 7cg`a:KoFCivd: MU"o=AvLTCM,"UPJܑՏTuOiZڢij!T%Wov#BtR( U\IR:U{ zDZ lz<6!&'~)ڂAkϧt,v s# ?@irc'myvO1<Fkε]R܍;IHAs=9&O!}:<^խ,:~/.ǹ9&~>kV&IHp?嫜?RBuMג-zzV}XnʷƝMu1@pxT]̊<]4p qŜ̌NxRo;\uJww7 = @Oj!{x Gz*u tWo/ :3_Da3`=ʺ+>QF(hQEQEPNhE-RQE-.=裥% SE(RQ@<@E'_Ɗ(Ev(t(()(hQEwPOPxAEL?((83 IEQE-W7c9ў+hLҼRA \=K,w!@=\v(!XԀ/ O#BԬ͇`=8ҹooJCaG_ZFWܤp3;#:=Ŭie`J t׽l7[ ̱ƬB]) 3 uPUׯԟzvĒn^?R!LӤ[*i.<)U)?^ORxbK @2f  QI2qR;23FѠYLX@#ޭ^Kwy]*m̪Y8sڬ]Ksu{qS*>bo,pTG8Z.R-Vq!𥘾vny̑jwSFql%`q{$z2$;-v[2&3X@N>f,2H$_.m5U!ˈT6q}\ U.6Gs8zpK挳¢9qg2Ue= 4˅DgcV(,PRp?scN1! $=38s qۚ4$rͩǴ81ᴼbͫBQx~F +ie*XI8#5 kYڑd F5QĄ$qp> %ϵQMy8 p>5ze\,=r+u(m&P0v9t}j]e@=x\oNZaSqf>ج\m--dmBuCc෰`ASb^^8#$2gch_^ȷ oxV;G ?(QFh(h(&):w3Q()h(;3E(QECEQEJ(hhE%VVvӥq?1i*vϠ\ϋ)q0w$c;rG07gqq[hfv7M9-}k =x+&&s$)kW_ʹm+=SXR[erTw8è7,BJ81(8|uG)sD y^2<>SYJX{ ϠDګ#~y\2٤̳ƖZE vFq'05^]\M!He(ؑ.n$vus!$ghjossm%%##}?SU*MH]E-㶲3y:ztV u X<8.GOx}9= W78K$L6.2*6GIo (8?pv8*[{EnaXAI B<ǰcUs}w AЖZNʡ؜x[ >A8!HD(+[{UR@&AٖaHNH66ꚈζgwA=cdZffSS??Oa“J ~TPB?i_-hhXFE^Ĉ!89{ӼCz-a'Z:Hx;em?N镦4Xhy^]ax.ላUuŴr î9k0[EDȌ-#( 7V/#/H$%7w5gK+c }܊sQM"Hdw$L Iȩjo2qܓ|*9o-/$P2dP;rU!$ FpW1Ov>)d;fpTbETI'nx?jͯKw`,+vD2I=v4J$j85lj^ROcl7m̻=!OqV,o/,-W̻'Zx=1Vt춖}ӴEksr+^׊:eblt9i9a{ x-SrNBGͺrGVWn+;iUIq6:VΥ J.NOJa"^+0@wȊ*QOQQEQEPH&@'giI~\nF}(=({S){H#rG4t#4QKE-tJ()G(=4@))(;E/Ҋ);(tQEQEQH(E}((Q(E()()()(Gz(+2yZ_R6 qgsl۽E#7{},]8HAR:{m[ 񝨉A(+1? cAh`c*=?WnH&v"'75 'ccV-Ң7ܗO淗jx'#槄9l7clv)}O#ڹtܡL*_ިxXi<4Plbqn٪.W|1(),\`ް6k3{]pιءPl`fiّ`ﴁX-mc &y=0FI@[[uEy9/Gf{:!a;Vgn P0 C5_+6r1R=2}aksy34I-#]ڋ-BnȠp}@w8.0&1;2@ȠFq@?ZE4.T劁N3ǵfCiapp%@R;k8Y$p Qs|X"Bݛa껄[^KاcX GAb|k~ m_GMiy w}#:62}.rbo']9N^K4MC c']izp-q!n$=-be3 lK l, GPF0} t }[kv#I b466P fD[ZGˋtnqvW>Z־`b-"eŴmnJIb u-!^gLӪ}αЎR }=񞘬Khݲ+m>gc|D~"e3`}t;6#j9+sW Z<7?rl s{WvYXc\IVF6Ƥcܟ+ys#BO\̱xwrXI{u|bz/aOs_YQxcG!nL4L^߇{{^5kJ+ZM;1̀3ƻWrg|0GS-ay7NL>o^10YEci ׵uehbBV>56piQZ[.آPz-QJ(Q@B2{RJB(Rөhb()EP(E'֊()sE;QE'I_> ?WWQڊ);QE Qڊ(S֊(P(H;ntϣ;۝gyIpTAY\Sq=-+ĕ{6|4~e^m\E4.Έ][Q8`?!T@EYyXvQlp*n'VvӖflgmQJwxIDK7SlҠSL1&أ!cT;;Nޮڎ->BDeUEbFX@ǹZ,`{*v#w kwn#E^;r#ֳO{ưf7\cU=jυnm Ÿ+$YU3ڽz u;5k&ȣs*$>K(7:kC"l';Ns $7Xk/zm; $}8^5uÒ^S}z@;V;{;g$I{Ht C~ưm,il-<1?* ]vf=tc!5(Y͈ەx}KU*DO7P+4.%1v'[q:tisi`vG.U>zSla?e-2g~XqԜWG>S1>o,s1SJ>׿qZV@lc{Vv]\RC%}5$ k,Ad[fgɐ`큞yh$,;%f gzVh#GioI+1!ŔR j_\Mk ۙ%|b GR=HW02![x g. =HRXP֭ _#rcӊͨG,ey p}9 F}A%Ao ''Qrk$B]'r{QmzL5{"~cՔ~=뢊8+0 Hcvvf-Nlvv3&6 Dh<1]/ 6rlS h=:{En-d*ܯ\lK&k. $F' rc뗻p]<'YIe,0!=?3 NDK<ğK%܂9`RcP6ʍjCv)J! ۶* Ȅ6P Ap< =zuy;.s7z~XsXwys) Z+_.J\>ޭhҋn1" n#UZI. s"̤`*}E^P:}geA~*?. /֔Wcc嗱sV2Y|-,zKpFN2fWhektQNG;}^xrc}o);ˡ`H?jŗX𡶻e,xA!x\d~kmnOk{ ^"XcKx_Q̷v\[xA!zcj_ ZO" $VS%#O乫^ҵuoY[%pc|?Տ [i8)#%#t$^V<Ҭ< ?^^KץRqEQEQIފ)(QE-Rt4QERwuRQEFsޓ9FsގPhEf(QF8:QEQEQGz(ե7۔^Ar9-RS4fHzdpn,jO2|窜 y?$B7,T 2s~yExe\I99jtvvڏ(yq$뺭^t+H&Y~zTF-"7Ӗy}9~fVd)s|:%9ϐ'R\nݶO(LzH?J,9cXZVF /1e?LuX4w5Ā[ҹ=e;R4H-18q2O)"A Sn6vPSL=1[O囷($gns ws[~}eƨ[}4 H!2*wX35`]&=+FWS-u{(4t$^oOǾI oE5F&*0 $W5HǖӪ#mv@qG?]U&KXݭ,Tr8F2A銗U|˔Tf6+85hXW!vI sso#.bWFs$ƹ_5dXI2'k5G4G@劃V 'j a92 ORR*3}yK*#1ddgלT*$?sژ462Fx8<5nGNޕ}* 78~MvHNH$B]W֋rIo$.1#dgێjhུxY$\aoOwm$:$r`l;q޽kQagcz|^ʣϯ'j]O↟ga:c}2)$\zvW<}ckiVr( }}9?yյη ]<훛^ vy>4,/}8Egnyھt>XgxM1G/8ھgt?WLMcg   ktɍϊƞRh~[6Pَp~g7!6+9Sۃ?3Uִ3Re[h*_pU_\($Tֵ'G.f;J{x*oX7Up5imIJ,ג;KnT82{f{SlwgVDs\5֯Lj{g:}p !n {pds\΢k Ey~(W[e5F&Ib&?@:5Ig&Ib?ڬ׷4Y+GkdU\F%88[yv{U*w\u_.ȅ`DZZcb(ݥP|=ERXbTc UERH b@73r=IkJhclKGtMvϡZi/\.o;mcۆWTt[#HOXAS[Z[:s)՛;I]e[ۉc##6vvYUI22gn{{}+ZZڢ){QE(((EQKEQEQEQEw=(I):(QRg(E}hQEQF(QJ((Rt1RE!>QFy;QEER():EQIڊ(EjS^Mku, {#1l~ּ7L/Vʅ;{cy罋8 _-@8 s_zKHKQ@fŸ7 ˜N _ x? Ks<\d> `~GO“V> XD\ IZ*6c bHFs1SkWq*pƊ񓂄ڇ u'dw y8oTIm)qx4uVu5<1my!=|Ougd$p$BPb.z0;{a5+$a aCƱoeFW! #6?K:f69}+S#'A>sN?}aqIr͌鏰51A~[uq(9,޹ ]k})-H wEp50:pYsV-"7Q^bK&K={n8,a t $%ryljQ$ ,8\?:ŚM7!I˛o)#Ԛk١9Qe̱ͷ&8@_>IIYZ+*K8Q'k]gfAbkq&o7;FDrpO+.[;4x 6%Eې~c:u`|fW$ @\S}H @TvVGbl amXޙF6mXLjtc% su^w1nUzw'ҳ@bl 55HDa= tRSQw_UR#Y\c5KQ4r wZԽծ$4D1!!W?ψnt|b#0w9v -+JɉHڿx9_gq]7Xg"=џo)ln5+L h.W' `;Fpy?ZivR_ݿlkSGldpzjힱjvws5O5Q!2,0ϮEjڔWs3VB sz_"/nek؆GDryr]o,!t;k9uVn8bsۧZFch[BMkf'*-'=u&`-=rpO]֥lƍЏIx2xiE%DGry>¹ {Y:E!y 1+F辿j!?}?*HԁLً1N'r^-ʰdPrs[U[}ѝQqch1<_o!-LeoK$\g3kӭ鯮z =<{zOtuRMsR',e#<{]g&&xN[T}OzU a K jFGaԢ(1ϵSC9U#+w<jȌ쁆+q4:*9#8tNPzE袖(֎QEQEQEQErih3EQ@4> ?ߠ\\֊(Q@(Q@Z((98Aފ(Ҋ)qE\QEf) QQEQJ((QF(d})J S]kQ{-귷J崂(0vlx. Y6i۟p[/ɊBn6~}pÜ;MalŞ 8?_1*ڍqLA >cߕJ-6}pǓER]57nuY9 zöjh^Ӑǜ#OL(ZwS6"FxH` °?ROK}5cs?u<#.>ǹx#qk#XIHZ+X`gZaJ-TA.7ٛUvScyVpwLs~-2:5=6^f't=o݅zT_[E W %a1}r=)^omɩ4HcVF.YbDM 8>vaLG(c wcuش-*`ǃְvt,#X7n#gE$V6#v=8pWF ۪wGnԎYYH7:}ޤ}zw=bm*esϯNRkkGO'>Ycx0`9hI"Rva9zKxmpV2GǭvԺCo5ŻoXh 9]/,&[\^۱!os!GsMjϯ_>lkq4$HqQԓIM+?Zi\E8{5 ʚ-FN>ܖ' U{kyDfg]p qCs-h"urp3?w7NXw,TO$uҺM[- *TBvoV9Iӥoj>{,0hv8׷Jm`C\׭i[$o,rc=N9 "b47 {lzܬK$h{=+-ɼXt5$ۺҰ^ sq4 ,$V]9QEQMH፤K1ɦy(eZd m$2 %ƳƩyC鎜d0Esh۔_ǰqējlL`5uEg,<*$UuVUV`"Tw=I?VBw,{@UrjjSRQEQEQE((Z(J(&(QR}hQGJ(EQEQҊ)hJ(Rh(\ќIQH((QEb(J(Fûqj9!Ļ|6˳o3!\3ol]B˥xl1pIawy(q 0T;Job$Ȳ<<#ެxVoߪJ 1F*Ʒt[SK,aLd>Œb'!?Z7Vw> ӡc6@릴COBNyi[C> crnl 685 $~63`8IO2aޡm$D`-}zV6Wj:s0,|z(QOԢ{j6/l^=('Aa{ W[v@^=.Mexbx#;[(HܑXTy $]0'ݎ9R+6, ,cAF7:=H,I"$~g>TGk#׊u5Ȓ2GL^ncVV #s5i:rfbB .g=ڹ>h?J [{p]ܷ ԓ?A7L rs9?{½mRmXy$m0SMnAE8DKi'RFpy$5i zU!yAH2'̶Bu+u[S{\Yh5Ȯsa5T(?U&N6xz-^iS!\Ұ`s+IЍeYN\Tm*h֎M)P|cm9ۦ~sLW2Mv7 ] 9[_rCJHmң$vO%t*fqe*H䑴gy}Nӥ.-fW/kR Sɰn065f=zK PY81_եIy"f:7ЌΡP8j\ UiMK^"Br|?gZW-rVӴ.gڬ dSqi3_Kqq@IKK5aW8'sgԊG)x〸9N3gRGu!Hd 8Sr:cFpqUǐ W6ђ;J'.4!7I펽jޚ֪XrO8^~ZAf,2 G$_ƯEQEQEQEQJ:E۳4R>> ?f(EE{QEQGz((EQEQh(4QGJ(($Q5!F%r"@@I?/Ju-QGh(EQKEqEQT5u(!YPֹC?)B#o"i>Lr^|??ʹm>8 y$&Ikev%P/sŒz+Ҵ8$]OR|stD /GOaP^!4;*JFcA[=8KUd%1ŝvI#A|t%;5=4Zq^ڑ6w bqֆu%$qОj핼?#d#nƛs[ eflpҙw>{{7JK;q4Ro ;d8+hp#gأĦGvZ]q$35Je/ePo:(a{9}=!1̫Ǘ?zeH; yckX)0lJaX1 Fz S0]Sݎ}?Qkv/zVH>^7dpy?jgͤpwkO?63QןkV&DK9s~}B&AXsq۰B6.{ I^@aPCzvUCwp;J0~ {Q^47 4.|Gr~֭mf B =4 kpE+m¦ =5]jV?{{D>f>#Mk:hZd;HnV(Q@s1[ڦgIe[xĀ| -#\4pĒXDk!l+O==72]*,vv&Bz5j.Ȭ>U+wC-@WtE<|z#0Q<+2PԮD]FPn?q7>yiӛ"Ԙ g s~'7W(RHIACu$4eAN?si6wh#q$conFaK,z]ҷ1_w?oxræ >+>I$G%xz;u/E%B*3?k𝼰,v.1"0~]%mJ W~9zS kȪB687zVLg2E">n\bww#c($q\44l.'mh;=+m`Xb +l^Jڴζ<+ G\{+t 7q22W,{Q#%3:HuSVa{Y8X 3Dlcxqitg[h 6\n0th+O.XwRO5 j2=q9+wG TLp8o omLXUx_k-B ګBU$UG@=}+f_Mwy7VЕlrGA+KֿeOt}֒r!O8\Gk@G>\ 3îGWFmw39s%ᘼ-R<&1`rIj2bf=kn t#DZچa|UI1ơ'ɁNO W#5A9?A08du%̠Gu\rǐ1=*.9CqFkM)COAJ[H'$f܊=niWCWq8ǧN=zg.k}ќdq𦂖ZZ~g(DeI9c~U#d.#Rw'a?ִʙy;VZhtf|oxLp2$Ծ)-=gH08R@pj ̗N-=3ӿNz^Ee2`݆n Ph$2GvV鎶 yPgM?&ũ]G@٢pʡp> ۳6ʸ8a ܵnmbFie@\Dzcv0]IҠu[m"KwajQhݦ1 35Li'$x-1{J<ob[RڸG.,n-J*84@@r=9hOѯ->*> ~t2xYm#Qbd&^"Ή!LnpN)ǾqJ=n: +m>qqy} SZ(scf#v_^K:}g%Xe\zr?:}_WqFogX c+u5kHG2]ʱەQ:o-O5EKmcfe\`2p9>n ?j(EQF>QIҊ)hQI(QEQKERg((#QEQEQERQE/j(0†Q)eSLj\9aڡ.R; {Vo>`D/ZԾFpÃhǹ}o%$9 1^oi@k ʼ' ɮ6>1cnAH]ܟNqM1DHUȢmԜ~sPx:}4pZI-ؒI?A[6vVR+v'''$Hj  /O֯Zچ0$IRpsqW W׾PyL098oYxI '8AER5[at3LnzvqL[)Y8Ajʻ[@TcI9u$3%r.ТV'`h?a43]-R.ТV,xV 6iVHe0JaqǰKK[hgM7 wVaŏ=+b+kXؼjm$Č*I*Ώmjy1b'ǩ=I<+xg@:\Uؑz{Fjos<.՘ϿԗyNUq}KP3a?<zhϦϭ2bOԌᙶ8ڭ[)nqLO*kMq $u\ܓڨxxMM59?6pN}رdlQX!}'K\ycե-42~b!P'?Anm(WibnJBtcro]@e* $>kd՛b\<S ]=f,2xI][5$eG QCsoHO1EklXzơ}qx""%;A96zzZUULKIEm m2o )[Aszor:xQ';< sOO2GevKvHЖS9c+Gylۈ%0F889C2yeܖ7(&*K @Rq*qsj7|tna3Z@={ }jIF-#Ēnzく\Ց=E=q鏭.f n/FkKp9MN9}zRꗦlJ68 ]5(mvJҌÓߗ'MͅԢGIʰڧ$wuZn,%f6=ƺ+3]iW;ZY#qVU#Ic1ȡ2 ZtYe=Au:((J(Qڊ((RM%u((Z(RE&:ERQE()h)@B(E%R( RQEQKESQa''wZ[i'PrO/_t]=GS )fQ)ݢ+aʬҼY{^X`H<GӥqM-G?@VZfT@JImep<ߥMzskh[N#I'B;o*Km%ƛZ<;] ;18hč,~~ ?L+$vP=X|nKBs$vq!o8HI2#;Fs ak ^ޅHs!gbm>cV#;mU*-nbL$XpX1X3 mL8HO䵉<"Ȉ~K]ܟb{ ¯$C%lc9{{Ekyfb8b^X`یkE42K !($#ի&Xl|Z1bE:ҵMF [4~_`گIZ_|!JcGֱU۩&mMFPq\1]kIf8Pv ~K sypYQ)OҮx휰@}kM;ݒ*\y Kx83c+w6`$/4,7cP8k:m9-_92D% pq=1Xᷙ'TDuy#S KmtH̪퓚-Q6~)7$mp ȷP6IJ\ϩIQYvulm?XyYy/c d~y贵bx 4lhc_pq35T 0p1jI/6˹zTNYrpp=*{ܤbF=Dn G^j{kp9 GZ ^nkcy $osNJO'5~eڡHHS\/?Z6//.IdfO:Sj%,E3?kxL׮uۨǜ'?ZuJYI`u?k5p} ?1IK @qS̴V9fBv`r#_޸]:-t|I$eðc=k-.#$!{H0?>Y38/ǁ:4h`XA9Fʮp3չ$1ۭ'X.O[B vHZ bizQ]D_kS[]L^sQX-nOޥ46Ff =I]"ȖH 5iYD%9siM0!넵t՜1 pʼX5=* jEý3sh5+HuKhl@~:lsW}o}DK&`yOAUgdrJvG#dDYdW݁GLu[\i]ydi}8,3mzU36Κb.#X9ߖ< tfm.)6$f;`}3uovfi nXcn_Jֵ $-?_j((((QEQKҊ(ER> ?׮WRE%R;QE%R;QEQ袌QE)MRw(EQIڊ(((4QIEQES6w5x7m HD@8ұJt,I7zR!/˓'%S$͹2X8H;[ximRVMqd5hVcљ(2JH>[U;]*R(D܇s׹H\oSu?ʙ)KḒ:)]ܬ/*%u'^ⶹB2W83bd[(7 )Kwr23wR8]8-@kɤpPK }dY/n*,dcA^"B(P,^@^`L#QpIP݆F2vԗ֢Ck,];AǯBnUG⛎6ڼowcː:ÿ@-l)on>N\xԏ-20eR*̶Zfq@W{kW=Im@ u{, K1cLtթѭZ,|TݎOLwm[G$b\ )#06XXr;0ڀv6*i+hV2O1J˂I~O< I6JI2{ ׀{]2I4.C4 qoҹ}VTm."d@,I5oM[#FcdEoZe[pPNesԞ`3W"HcXb ۆVŸe#S5̐"Edxr6=J ,qQGҪXOxJ!r%Fr{{qUl6x`($ sU{7ȖBI!Vq+DW WYd zUwϻ##%?Ƭ"򣲢c,?ƫKtHTT|"p1i.U2QUbCZ3\IrF QcҰu \;dV N%ث%5=RzVY,q=C+)7én><q_NZA>gJC438LZ[,X0I_Li/'!ePcO^Khp <']%/ \(cvӲ+ k~ 4<=L P@U$ze8ֆXhz|I01>AkEcs@]k&ܾ.dfc]w-Zᷳ4kP%;zrz#z"XI c}?*[{ۛEX Cp?¶Ф_-N8Q!t}5YF搶@PQic (Xr[`}). ߜ\US#WtXbZ!DjG8Fg x/"*?w'/-&e{Eǣ .m}FX`U cǸ4B3Yzti%9ui+ g:~k !-ʹI-xgqvɪp䖏9`4۞;`2: MF\Db*s {gojS+!7@9]Ba58 {Z=ڡ(Pc BJ`tuޝo/50U g`G=1i^T8 _P c=r# (Kp~_ʬ,1,hQag=ztlcX( c"V6zc $c'$5{aAlZCOV5 v71l)XIMa#kG9A~ vYi3.:rm!rLw~j[B۠quRa!@ ʑSd(D5$ bq(,"R$;|g9mԆK1rXS/.%ɾi2U{@|28*?27{4@< ˟zooΰHm-,Q\`^R,VA\].H% _b;x0 LU4{>[kh-~#2Kdp$u銲toV!M~'1}Tn#}>inl:ןק(Kne3R|z?z$MIVL?zZ6{ٙO늹s$K#ӷVb?Aعa"\$FWtÞ}JjZ:ǸYQM"̱o~yWm2=s1׏̚ݽȒ(t"(m={IahqF#Do?] {=&4?p'נ_D]l._?κh>}.ݱ4-ս:n5YIX< koǧ$JH䁳D}+Tcų]6t#2U'n g?ƮMho10&xNb1p0O ⋉O1o-ܕ#[6\xV1-܌|aY;[wŗ&53{j{dakkOp$D=~Y#. CYŽ`۟LOidox! ̇3ȬjZm[a-፠(`ysYiVNDIlZW| 3fQW;z~UxJHco'&q$vZ|/ҩ\B%F+O~?5Z}[^kc OV#hLE}^wz~"}пxg#QQ5̮;מ+v-ng&~XEs]}m;;߸ PUw=קxDWl. fV0|O`C}2mƁBT~[Ődʪgx"0L+)Ȁ/5i|:fvvzn3W(:K^{_=FHϠ=k<G+l% #rO}Ϯ6^ɭ[%lK1urEc}nDR~ƹnlL<'˓@=~עb[Yq1y`ש7j:-%gB1Goj􋷽ҭ%ˑRˌ`Zv(EQ@((袌E%@j> ?ֽrrQE%QEQEQEp QŠ)((?Q;QEQ@E%QQE-RQEQEQ~h$pdjAgG9~W◶wYʉeA% 7S`Z*RAUKrJ\C#E^sҰKi"8--鋦vdI-zv]5Cm \霱=&|P8 UF?qli-5~ cW9-2;C?+nԮm!պeqڧ񬛛xQ8H^o0~J̸IQR8)AKotrxO$$2F"+H>~*G b"kȋYMY&S-LGqjYM,ݰxg@Q\`߅:dq$)2rB¶cy ~n2>l ^npDu\۷ÑZe>dpsvc U3x֤K'zc*u'>%^y^LE ǰڣ Qeid7\(p'ڠuڟ5}:;O8:.HYEtW\6bHdEqys][ !j  <zC VJHcn m][j~<ӣ{x1_|ԸK{CiC I/~^5_HmB"2V7XO֨xfjzŴ@!Uw!K?Z^iBS/vNY"Ya{w #9#ˈnA*@_j"{Y.9#d+9 TWmmn;#d#xr? >M4{)Xr>C9\dMXCs+MipQ0,'m^H7bX0$^H[`l܅ y9*HZ# !uT:uM3Sj[d^©m K!_J5maYf\ys}k Qԝy;}ISUhcàH9LO+;@a~v;8O,3 P>gfS*v/@1H͐;;[vaO,D, lӯvRMy#`H3f#3޻ZtiZeǓ GSq)?369:{zX%B[iY 2ymx+=jw@$w2>[oZFݑrPn9w*3hCK#I=߅Lc9'>¯Ħ+A#I=jΗlfKK˯PN ?5W:hN^ ?,Pq\qhx +`:"Y e;Dh\Ej&-BMVZ-aDgۖ ~uKzԾ emw;>`cU=IͬM E`}w`U%QkG8y?#ps%1q~A H\9\t˝2M. A<̠MŅ}ʢg|5О/4mD }uϢ]~dO Wot7K.p< 2{}+Ews< )s?I θD_99mZ!YI<<)H[^76\WL}>A pt c>ӻ Yt֯dT@[)m 'bAmֵCEvuy58Ad| 99Nɨ goSSEc.&o}hW/EQERE%PMRpFqFh R}h()GJ(4QEQQE'4QEQE4QIE(4QIEQEQKڊ)3;dn#8h*yiN^ױ H *#뚥$( Ðz eD @ϧןxctRx:@Ðޕx .㱲u2OLH[c,9 -BU,D"5ulA<C 1@kj$^ee9ے m%KN`bNG*KMLw$ vvc_IRydoÄ%ַM`=Ƨoaskb* ,[_iIO.KZ*6@ďlggχMӭ=Ei$=኿u$ШN=6]ʗWm#S9ʳFL;R/nf(C0rF=IsbrFdG6Ai8d]GO<{M:=K֐K\c 0A'0daG)mXͻc#`ޤ7#@rIv?\=R \1\V<p?c3]s<ˉ^F+†9cβs7++HH=ZqCJC1O֊M#Ő|c?jCM#yf$8J  ac#~uXcAY:*\yyˉn3ʸ\sXM ߙ.n$-#3d /\ڣ/aN1% [ Wkc# ۏ"ܟJd[u۹ 5:Df`-rHAu?_M6mg{9&}L?^]ׅ,~mos)&[_.RYۆ@-gFAElB+I<~?W7+%P_>x,5ܣrI$ȈCr#ï3Йu#]#IZ~ۨB `Zе"&VW320*Jn4R$h7:KwWua!~SK7x{׺b/?O&ዻPDQ 5K}|IW7rl= BAw%SNXqq8#}򈗎{:dIכ˒I"FF~X;VM^+ Ls#gv'ʵ5 &4i,m (8۷j{CEO)`pFڟPh{m(Iy P(8rpqW/5dݣFiNH$߭T(c D r{5Y[5QZ=>g:?{+(b(wf6w`Ok+3"/+Qxg\o뚘IaRÞY{`궃Z%`_80:XaA%r{`qZxZ ,-rOs*xT#3},bqˍI#qRP#?gF*dSF;zUJW7ZBV ȄQzM[4Gb 1ƚ[C,f|}84Dwq+u }WԚmhH#}V3Hsv ꇋ繵DP n9ϷJO#*(<1bO'=RxIN!0 $?nx> l0qd|O+м2.Q q)xW?u dI.W5Њح: QEQF(((h>lgڊ)Š(QF)z_> ?((QE-Q(((֊(:EQIEQGEhRQEQEQEPFF(* *}Zծ>n"iT[$/^9w" 2I ^Ebx(\+9ߥy[mto*"ar8wU$jR$|tv9Z5mȃ6rX(lϠE?*ŨO89,錰ڢY*3g#+&Y[;7?t䏠?Znm[l21l~N˪ {b.Uۃևn+HC ™(vѹS G)=85njGklB}p:tiF$I[%^L/)L;ZN\}?:\]\ұn'm㏠91' c?@k{[Hg@ly Fһ}BЭk\K<1/m]'Z 'JMIb;c$.1ݘ`UkB 9X3r Y^%O:<)IUv -vvh8ʖfj*6s:*]^4o3toJ 9B]\;}L>Z!}iI3 ~$n%|"y=/(#K<ϓQe\9<?S\hJ#"䒋'?Z楕IPE_%qcg*ڙTH+cܚoo ȧ+Kiȧ`88xUf;((1#Aab>r9zT ZFFIw޵?I6qmv66N=rOZi-ci[wz`trI5$Om8XF l9"/vv8Wvh,1Qm נOq 4FNb=3O*3O?q u:łvR:wq3\γR#e2ܪ&7 W׀Zf-2yfC_ 7l=~ s0D &,qre#r>^bmrDy*&ʣ_F>ZdK47Ws+*H=-1 KvKKmgq+F!fʶxq$H%5 asP-ΪT~,`@u\h"{m>y+wxGi󒹫J.α\]fHlI眑ZrZh^2VH!\Ͼk.t>MSn.vfѼ5qejBb1cדYGd.f#cLWo,;[X` \9Msՙ! E- ^1ިk[;P">R[jW@rp`2{Rf.@G' #=~km𭋔x1 +'r;t=yJ#/ u-Ⱥ-VTGV GZ(((((HER((h()(QҊ(Eb(():(QEQG~h)hQIEQE/z(EQE8 QU?H q+;R!fPpьs~*hv%dϿ85ΥŅ5 3ܶ''{sޱkKmm24Ϟ8?1}O>F]nYcP pHxdw#̒۷-FH}|JB|x$ 2Gx&MRx;v2I3IR09B.[8@OJSѢG!&'t*)>֖}\L <UR{dSu-1%kx *CП\B:}-o8#:hƚ)[ܷ@FqF1w.&pq}=Ɍ:T`!r='X"g/ŵo.H!n*7Ŏ~-/$e-lZ S#Zv?Է ,.j.ZT}܉7c[?ZܖX+,QBϓ&ͬ#2߅Im&%) $1DˈjBOom ^X,ico³b ҭLXG+ez#ֳcS3G9rBHrI=sǨ5N5٧S$I\5)cҕq x#cAڰ5w`p~Vp}V7Χ?)]fḐnU}[Hљ6U#J``?, Kq;6\?eL٥qQc$ ;6O#' 4UI7̯Ӣn@#!nWbӢ,6 A_N+Vrlcoa>؜#.6~bG98JϛdU;aW%GSꌛY LrTdhRP.ʎvWwJ(-`$2dO vqL0x͑Aq >9㷵A#}~w,Bp: 5X$`bh Űdc=5.m*JHc,0:QonZr%Åaq0yuַ{57 HZ\0,>\dz|,\;y[b'7uzڶxKeH,`?$UPr`*g%pϦ5Χ{m)'OV,#փYUb\{/9ֵt&{TWJVfU{ Zb+3#*X귛P}Pc8l`ғ]UA7Qg ?I XbYem#܎ciqc2l&DTWYXlRU qqW߂0OΣuHSs~O b<HOCUMwˁ]&Gp;LT 8(6ezιoE,v EcM_ U I" %=v)|?ʲ3vq-?i'hyϷgol<=NA*:]^HJ(o,6qwoo'c tjٯ4}-"i{IAB@W5xm2ʷi`yI.܌z:VOn}k|0Lq?o5ڲ&288>튥ഓMԍ3\U-p0pzp:V!h1K{̤S+>'=95|0,JNkץ((((E(J)OEJJ+> ?8QEQEQA(QEQERh((ǭRQEQEQEQEQES&1fI>9>ڀKf\kH eϦk(bQ¸ק^QazEs3N@r|+hv*)^6{gx$о#*ā۱c-#IfBa`;sǡlqI0{hye2`8ٮqVgtO4C@;zVFզYV2a<i Ly +8s#'* (~?C al2q,{ ֥3 *#;X7,8St3-T8n<1cv{;a$X9*A8uطv\9i2wG~N*Mv-ŸF|x9 G8*R[2`rOy GʫIn>Qým5&Q煬pw?u->YMrrT?iqC,&H_i;@wB ]$%?;B~jquhCp}G{?Q r7[ϰ^ޢӥj#=ݎ~c$eUE2h QX9jKŊ\Yd!X~@O>?j#|'Ek^ޙ䍌*xU8?5MF뼑Ijc?TM$Ï3G[+n%ifm1ecq|VG.Ds^%pC2Cج\yoq!}?ZdבGo ̜s=p}nSȌ!su n31'}H(ipyb{M *S\)? 1RD3`UaBZq8[ϭW5Dn$ #FG֬s{+k鏿"W 65tC&ch~qOT+Hp=>O(e-*λC+r=«Fc2+2^4Fc2+ 4R[>(.}Nzk:K}kwYI4Np>aP6}YfM*@ϩޘg([= ʻFҺ+ׇM xk3Y&k#1ʱAm!/,BV8'隝WVWDG9\ #ZZg۵>k9# d֕!if8'$Ijexb*$X@&vrnWr|gߌ|jo^u,@m9<*^]Ǔ}usB)rssnm{s#qH9$̲y/]3u=6͙,9+4ݳG3~VǦ-l#KpwvHV:XnL%q%b@eI9O5g ēe$u;y+yLʷYfGBT~6׌[nv-+4_i=?jQ3/B{5\FtE)\~DԂI 'lc =9{v[0VYK?xW5&Ym9".0U9BX^}UY͉.CzbVԥԖCl4q~sXn}iɩ+Z觢;q׮P7m C, #psGS'lTC8A94;fUdQ8l~|q[6sg5+ mgX ?S<a81ؑNp˵#㊨ֲ~n[%&w#j `/ X`Gx].ǖHl_lU&Oj3ʚa?O}B<[JĘ#RA+oE \0f=zo~zKham* ?1dIź0ZEv\p3w!#m;%\;g{w C^ =Rh!FzSj"E!l#|q[ΰ6#*l֗"w>BUPnk₮X>bCB:eǗo2!lE ~>o='C2K4˖l}U[jV/q+li30H^ ycH敊Otc+ aV4IAy\dSpp|#w #w{S.9Cڪ-$&XzU%ݒPaUErI U <y<ӓPYw0'=>sU{d𱜶O^z}=iD%%'GvnM+w?/%?0nM>1L}jV5.m<'G%VuZKxx1nDZk{‰xp;Cg5d#u[[$XGS >",XHN0OZm۠0EJ$Eܫ\{W͐f}#骓 Y яЯkyZydǨgKon$,11X;]KwhܔԯKNB€3†T5]5N,Nc/k<+3d5ڞBq>*\i Z]ۼVIPWt:u>DWy!hPxt[$dA!hPx~_.4*xF`{j[&>%ýn3\p?47ˑW^^KEQEh*ޗc}smssljs?*wX_Z][$YxǸUt;ˋ{t[V- OVVQE;8QE> ?;EQGNQJOQI֊(E{QE?Z(E9;EQE"(EQERJ((Qf;cb$H?pK'㕛qڨ,1O+؆2:t<RKRVwPe2w=Ϊ%bVP^s$?O֪BV\I9~եS 6"Hp\p$w@*Hp(\p:h4qBj9º\δ-}dfmΪc*օ5˸U@䜐8<Ҭ jT38o\[ OҾ(b̏BFq$Pv.uvS U$ \~ gLQEmQYŏ` lc־{Arb UUdO8DZ)IvFhWˏj۷=0F>s?!EKN *=0xjxa@ۀF>(-]f+*q/<{MXY[8¦W+s0s5"MoaW#*L$~akxˌ XZȊ'71=H!ߠ㏥QK%Gd@\*AJk,2fQ#w rI9TLZҁݒ 'N#YKDH;'=)R:ylsN3xR0m);}'OΕjs4kmjqB[Jt>P'6P +7XDT+42/U:ċc X#f* @Ԥ]Β~ ǏOO m|+>Xf +WF:KxҺ` @P"~sƚAZ;dtf')[3.쳨ΐnpOגyrI e`xFl32LZ\w-9gxi 0F8c'ֶcF;LVۙ0:p?Z,%1^,vo ZiI# p3zUg-pmm$f]Wko o¹FGdznw#V*ҵ)C׮3J1ʸi#^n;U`mf+yn@Km5MsWwt˃x#'WOIjL7 UsH ^{{\nKLF7R}fpm[s ݴEc`z2vq8Iͷ,#ҭi;&k(! ]=Ɲnנ-q#)DZ=>rZY2`&e8c\$6Դ"VSlֈmpX)<*͵Bse?Xm݃c3*O*s rI,˞I~&I:ʰ$ʎ@?B@y'Vq l7UX~1]Umډ ,$1omM~M[ѵXF$G9;rͷsM=#Xդy'+ǻ<%olk{ōmy0 _?l`I5^%m.+/٣ 0Nv@Hr93]gNd0& ;c 3}+Ct:cE7{ WּU#x{9m8z21xՊ'gz@9=JZZC֊(QGS(';(>QJy(1ER '4RQFph(RE((R ((SEb);E.;E%QEQEQEQEQEbHdP&g-02כ,x=*W{9A__0K-bmy<9`>OzU^CmdkԱ#d:nkm#k.b+#-I{ u[cg!UDC1&~{LcEȬ=jWbmvCqYz%؍5o1Gӊ F< I#[4-IE-Fy?Ux"#Kw53Yyq%tKmS}e~?-iKJ=SSi0@ ƺ"iH|~'5RʛC؃YޛL(G_ʺxཷfku&S*FPnwFA}#豈(P#Fk%L|)֨Iefa5KQSYIM ڧ89wWq^\l'd'tr {ջml "f0B`#>oՇq/mcb81Aer Qսu2$IYRIn@@)d )+\Oh"QȪSspnYbAKg 1t d(NJW0VBx֨ɖO)OcP >[. @h-g@fP3[VLڥ1c~8xx V:\*ĀR1=}0-M<3zRcm`$Ck9,OAkM.4?6wGnN$[]j>,yAbd8_KSƺcn30 vl\j+L-E~Vb0v7RKM6чdGǷ*i.$:n;~o%9{ I=Yi!^"If?UµuDk$(1?@+[^KlFLc zQlrsb"\&=F:T#Oª_#z ]Ngi1e*AVkΧ C{[®Am#?$U(v%e7m/;6f]1RkWM[\E3̸C)4b634rс+PZĩc=\SX_|]K75-fX:4p@'ԞJgu9Cg8T}zibwFOXt\K'0U7 $?fBW*UX?ȟΨjVIan3}1T%1;6KVi.O?:5PD<-{IXqM ŸUs&RjX;Е23pKV0nQe9듐?]mOÚխÒ"]Xu^MJ " 'eƦky{^dk/-7<_JkujiC0 l gӬm5m^Ydi ߳`a遟M&[[K[E*P<7 n -OZY]݈t-ѦRB<{㹭 mKַw+8^㞃Kz5w4(Z((CҊ(Z)A> ?SEMQE}hEQG4QG֊)((QE/EuJ()zQIEQEQEQEQEdh F|Dž;CguNIHas/&i E`I?Lj5fgUyS#95Z bH35YUuxkQAD3O5xx , G 2 ϦMcak+Ž?MU{kK+;Cn >PA9`66psis4IejFN=)窜jU"ɻH[UZ}?qVR1cӶ[4 [D]yEw僖էEc"G9B'`99M_kJvXzսP-_\'$}g1\voY[Q' ^UGD$\rgN:g]&+KRbR#*ܚl$Q8DQf8Sd"FYRN(? (('W{{(ywCy!( .TcҸ47$Yd˞0α̱SP3ZD$rf?.*84b6 !x?sz:ܥ"d䃀XdcҲ/ӺH詓guyj73T3w={qT-kMGbG$dgQ '{kX(Xg5V8$K{͢4`'"ik J[İݕu%ݺ Ob` I[ag1s~)&P,a>>AmXW`rE9q={oޫ v1$3ξ^3 2"BSOyծeEW'nZ8Aq\$k}}U8Ȗ}3l^2H^@dhYlIӎ}~nmC4}_U;kk3IIh{W!w7 /m.8iOvu3-ԃ nn@_Y-rL+VMqq 3{R61z,/4IȊFduS<\ @NUIJc" ms*rNBWēpyUU OF[MJ&є^z9Q2rIKmE}}64nB[o*=gޱlmX 8I.Ge9=MR'XÞ{k8"N GN)bE olg?GL ~R%P VeЖuڒT]\_Ʃ\402qTn ú$f:Z-M@s vx{eMRHv!*a#;(ΤRhf/$ xx6!VUC bpx kgšD'ٰ/*cȚ팾 xy^&4xm߁f?Oe< 08v]00ln_} K{1g,GO\=p7s˧dnܼQY]z}85M4ZZ\U%\>]:W̞_&?*MUU̸efcVlZԫyPErp1],)YUDn pHH^0!Kl@ȏ9n 9] XI0$\d'k]E&d HAߏ¹y!H^C6GQW&8\ts#xIemٚH4;~Q=[VYTM@\@x_69_UC< @$WHfZ0W8M9b麛2#G=_wӚݱ:ȇdgF>՟G!;: \%(ۖ2H:d}[/FEH%d?aivjΙ)X Vɏ 1U 6zީq$fxlpૌ{TM>TԧG jsc~qs]QQ,Q D@^BjBU0N46DWFeaGUe#iUԫ(e#iԴQEQEQERJhG-f> ?v(Q֊(EQIEQEQEQEQIEQE;QE(((*vb:qX){  yvScxsVvrzwڕ2vY%`e8$?Z&o[42`w '?Z4kspa2C91K:Hp0̼S֚{+f$(J^?{TYl$>w~Ϡ!wҽ,p3H#@IdQ~uL H}5@1<^Gn?\b_Iv[)UĠ5-ԗ CVRZ<qX&9_ӭu;g?>MtZ~m=7> Oknn ~EMG-pwe!_d?֧K>T qp`de`O˓iyguWA6˔%FWOm\C8s==]JkJɌ zs08:rJD@OLg^Q'X孩 *wv)+f(h<ӎ{cOj5FwowAaOob?*%`S"t3SY_GmF>+ |8Ikut#c^;p6h,v$w4]}Byq.F2gq! R10R@yjI6%֗-5z 'yݱ!OA=3Vb0gSa% SӦjzlp=p_?moS3{87K)CT8hs#BY!\s+ 4gfvxXxqXq^C4\œs{i73 h %,t<֖xrK|GA*B) CtO=0?7H&+ur͓ Ψ(+erM4}`?ZmmIFr瓑ylGC'>܁ը4Vs6plnVv:.q#"WqbEhI{=3U;z{Xf# m$}G'5G$u %Ylm {< i \@FyT1Om$S^HKp4'$̈́˪}k`Ǯ&c4wic+20oP1t%FT3;dtP]WT.eUI&}ä`cu ;?*ϊ$Ye ΕxY(ϠW=s J[GkU*sOXQY HyJb8/ O1%Ȁg?oxmEhmĜ<{ Z! I$9'rZݵi|鰶GM)$ϡ斿4 !rPnQ fGMwkkS,˝Rn})[y$,I6m$uf{x#\Kz$I 2xP×I??k7Tk[b$s:n(,,y=zUkۙt&ʹ,cF ;c5 ٛx ]>睛ib3>kfgw<1TUl^przVoi$rI'J%ZGpJU8$Q𝉻ާxᴁ- e>sc$ÅP7\덿_UW*V~q|+붥(((()G4RJ(Kފ(ŽԂEw()IJ((EQEQER(QIEQE-RQEQEQEQEgk JC8 &[\Oīllls6}lgU .A  n{m6 WK_=4%N<rX$6wVǙ($ T-]rOnG Ny60 +'QxϯQIݝcʌ?T{ tD`YD;9Ci3EiTZFsQB r\"x,􈢘l"EDVe*Ď,+#Pʹ;X;js-&Iw.QV R_h (t‚Nbvv/uG>届IvAVW[-nSQ$aT Gvvz̚QG.AO8-ᵳfK% q@}ɿ^YgFU˝6QIX3Jn~ZoWBI̫שQ0;զ m@Ctde#=X` Ʋ9@\[y pfV2^ǁ8 XE2Xpd>z§Ѣ,u1+E^ĎXҢSF < #/0i{c Zoeq2sy9}6eJC>}NG\V1Z5fqVTP!ݘ xⱵQ2يзҳ5Ee.0@@ʪ4 |0 -ym7>1p8mZZ /5mcz@8{;[=.|3*EɅL m'}\\N|`cӁ keE 3wc>I$" Al~\\*[8gw ]r=8+{G-4}1-jYYb{z/ ~G/΅`1y滽Ft*Y,l53E-'f[[]+2JnXQo'\[̀o~f="K iVMeP>e }{թok4 fp) nzP[Iek }@ /ӃZcFlEPIft3D0BIq)1ׯ$~(K,c(C3zΝ.ÀвdF$V}w`S\<C܌}zWc]uEQEQEQEf(((R(Pk> ?^٢:EQEQ(((((Ph)h((()J¢j{a=8Pp:}j%HX:VHg-#yQ?uG^|i).\ZD]ՠ a3Zmo~bil.殰Gl^ yIhbjB5lݎ}ؓ>B,SH1OZ.6W3Vu[2yJ;x_çҸϴBl#O/3(fvc} slKeӾi*8G?X4B)pEVwp$~6mC"]{9f-yNW6;ȴ_g$%\Ʈ' M(8?Ci_HU9)ǰ<Ѩ\} ĊuJ~ Ω]cisS(VԳ]ږٚ u$ :{K7 ۝߼2wX66U@b3ީ?7Zw^3dE@bOԞN;OV[[֋TO{C壼#k4S7>Uuf^{6 .}vWlmm 4q;j9v;p?Τɢ[^k3ڏq=^-)$7EDjסuVi&BSKRs^z]ڔYVB- e.?Y,V8 &~tjjVtp#Rx#U^&}I̒I$tiz܋HdCl#8twZ-Σ};5A GPj7 sg3Ku}^Zoeܒc 8h+-r[nP=Uk>o[+;vnQ[&⸱v%w}u}7Yd#4*֠bkc;NJRWۓQ9<;X٥UOb qW f+&c}y$d >+PHgU;}}yzڵ/joV_5',IO6j\,KfMe''z[=77qP>׷_a1KE.chryJ}zp-|M>רjׇ-"_K8!ONyjoZi0%Χ8&'}NSwl!icFl8s횞|6#@xMsޭx|\ڴcmnxmx>gF Fh AnBM.3X:֤lm\ݸV.LU[jYmBD҃cgV`\]J!"I([?0{fi9Wg m?o5ޢKX$dfpx?'OzcHTv#H30<{K$]Yy< ظ6ב"Rx~5oY3[Aiᘥ$9 cw0.%qѶ ~Up /cyd8=A8pck6L }{*\69 ap?!QKsdV)!7ݹckG#h@[x܏B9!Zeitfr˯N}\ע3Sk}>wG0\y$z~g^T\q4k$7LuQފ((((QKKEQ@Iڊ3E6SҊ(((((J(((GWP$0@<ӽhFs+$ĀnsA毭v9uHžc\d ;.)y6"PK/A \j>5"HMFNqFۤ4\v;瘟'{X%RHܾd,܃B*8uNq[i* {Np~ŔS!6d~ sc9iiv"W,˜aa!QW,m.) S[Iu{RC,d7Xtff1ĈX??PƲ", ~~j'dv&dVSqա$OutI jꅷ'\mW Qu%m]`K/1+\B:PaO$u{kv vX9SEnpAp 'h!FlӤ@6LdOB?[_ZmW, DqpyS̗wq=I`qzڪ6"(.pgꠀ5W|Vk6Kݛ=`oy?5[imtȬlaiRs9?21]As3’i\z݌W6#\sV+]N.,⼲rӡaIq|Uo"*_ cpwg*A+u-զuqݜtP4IquO QpFj6qq X$N,P ;cv ̫;|͟!m vz!/]~S*n/# 8 OSyޠ _Z[ I">H'qPؖV(mAr:guDGXvTod2`dcF`*vɘ'9\\ܺ#]`bA0Ǧxr+ [(vC}xϥc[]Kw?&3wvV!M<8VqГ;}ztY,33&gb{q]@f"^OwOF;%:ӿݽЎпu2g8On\Ǖe}dtQZ-aȊ;sOl5Ec' |-=q[Y $/B>ap[NB{~/JGy}*NIH۶z*+3)cFN~T=:WApuHeΣ,X玃gai:|"%^yr72c: ˳,rmD%^i70;]P_>R o]I{bmu&:2:>oYmQ^ hmd1$>sǰJחZ""wq=Ow,P\Hʢ[?[P4r}z|;Avķ>Z/PkUyY'RP66R9XɅy*\ӴA97rEDݗà,Bɟ)Ym4er-D+LGL^tcK9 ߷9ҽ_:^1_V2d:psz i=KN>j]&䔜=}m j(1EQEQEQEQEQFqE> ?(hQRQE/j(ފ)(((((((() t .KwF8ʱj9Ye88>ⵛ nt[&dc d>Րunʮd!p2Tu'ڲm`7.ҳ8;OAyt5 Ɩޝؒ?E$i_]ݳcqebOSjKRuiNߘoR2Gv6m$1ӂ5zj܌AHӪ+6nuc<ioyGgQ@79PN>COMu{3J6[B<cgXtk[n@#Bɬ{xgX<:tk>qwvҪ,!7G)Isfb\+p{u&sK~fc؎sLyn *uv#>[e5oY̫ 'e1 igɚIRS@ۘԑlU-Y%w&Y$XTOԑ¯K =[K^O>l`3o z}ri׷SKB`]C-ݜ7#?R1 =GL ]I%fGW:RKi,:ܒ`ir| m$zI#H6}:Vm2ے4Ռ(P0$gs+zK Ed5 rG؎qV܇3IKң?f.HmVA2=?Zm>]Q! C-8"`Ydem8U-hTd2S9 15gI&0-h_0yцvc9 6uoMY>X82g {u5 jqksk n:V' tdzsֲm5Xg\Fmܣdc=>Ryµ+#Nk^IQnaH9RjVz7bQXS`psԷq鐅hH;9iAg1ҥe45XYLby$tcvUAHhrKu1WjILZ%مT O\UBK2)dx -uLdYs"AMtҢ]>c2Ot5ik =?U$rӎtEv,H=t5,BѮүaӿ>[cOĒt8K 0N:s*} گ*y1Z$ w0"B!DŽ|%և>xfߟcV8rjhMѲsM\Vwu\?q沵XJA>"أ, #ANGV#nȏ` t:tޑnTY|S&h!5_Y\*mi#K ՝(mi20! ?VdElJ>eؤӨ4M6iƴC#[DcF}Jk|1fjx CVCi D-},89?¹<8^HKbԸie ,,))2 C^?-<'dJ۳vϵ{ǁI|)d@[ q`'-!XASA@8t롭6NJ֖uX\ۺ$y9 {W|6gjz#=͟B85 ՠ] pA-?9z\@6⤠`ӟ?!I+*Jd/Ghُ'fJ+{u<"c$Ԝ­F/n&F :*`qNMX5yq:$0E@3Ԝ.3濕ZbIv2ފsnߑ,Kt?윐~*q}U۟P@5]#^n~ N jwQBW n?JN$ݸ<ɧirı#*B!*'E;Og!'éj1qP[t1UMvO&c ۓPOr)%݅*K; *[h) afAe? }qR\M%E&$?pC}hj9? ;]bЁ6ErN܆k5hGV? uJӴJh;d=GqḚ'l<`9ZP"w=GsAŐgA*$"et{rS ._XI3ʜLdazaϵ`iR5]#"SF~{i<~2iF)[ Q'vFz50F1vmM񑁎6;@e<˜${W5՛+)GRIAssLl$|8ߥTF$bLXgWQ9ٴŎpISlݍŤeCqq}k%2 ]*a0N9'ŴRxIԀF%,sZlV@ۂ1cߏ銥{[aVde3e=Ry ,ᴍ_Z3Fd|]G6D1d6OY鶚=ZGU|?X wo#)1hkYRFGinU'[yrƷ)6?ƽ>J"r#v @x-D kd*PcבϮ7z-: ^v4ḉq<խԤJP!sN=56{$EELrޞ{l6SWzSb.I~C0,9*^M zU]Zۆ䁸{eUg\E[٭٦,P>n=Ijj %9oajHXZg 0J?L՝\Zd5آ"bLLHp܌際R,, m2Y#"6$lNR3h &BCd5\I 7J6RsӃgWp;YsEbj~"i|_jr8P:8.oI rqצV$ڽfO`+6ŶYIH(M呆*O.+y;y"ϯ֦ܘXy~۸ZBːKfG1*LæϭDOOh8'LM pZi +7rāW7) ?\E%QEQE(((((((((*rP6VWM ([D?8$ D[FdQ>BX! BeFFxWU_ ؘn"٤F"¼:} P[6X:E sUKI&.]ieXV\5q5̗WQZc-aҹkNJin8yF989jKKȍÕH?wlWe?ڷe`0}L<&2 ϩ\Ծ @~GPO ]Bs-֠,l /B2juY!O;qwuqSA+"7)8#pGstrdBg{Vk۩L+C{mX)n2x!1Ic<㞿:,&3}z$X팒9r@ gޤ ;ǒFO(Um]ܒDy(?d,Smd Vc r5f3 V̧ w0ZZ#ߕ[d`=~tu-o/w;cS0hW ,230U{@K\G"L4iV(涑w(wɵ\>|kv;.I6~ i *(9 osCIVlJ9Yy QJdHa*SV @d}G Oʄq~Ƨ IIbE+DHNz(S}:[ NA!bOqנUG{"%1 "I$UbTGL߼cUo_`P-;`^~l^L6gq :o,rZKd@Q7?ֵtRmw;mV5\bDOO7iZ$X.aד eU;٠ÁǏγ'ơg ]+KAT!|=YH wR "O@Tz1SeKbF-|k@8~m KR^% F¶3<k^hȂܗq00=OBbv*2rPuvs0 H#JK,mN1ǽS9_[tVY |c#k-naM H}3nU/*; ޝ8UKq20 H.*[;?Y鰱&(C#O8ZM{qDCq휗c1*dOmI bǷRJtC,?AךuI-mK@ F:wOd+"Ax|W8e͐yr?: ^edPA$֤hEvGg?"kWm!6">q $=U|E nIZ 4s)cAӚZ,+$s)cJ@H!7 7Gmۏ@9##>|66E*G2?&a;1A~o"Io0s˞qb{PyM!@ή5H&Yԡx8a<Rծgxu.rmw*zT`2zO ؋ȫ/|bGJeԭoF #8#FO2^"($Cd=Oʴ-lZ[6m 6ǎBz=:KGl^1OZ?kXEYw'h =9?ڪ_iv6K *8܃ֳ=" >Ԭyta:H;rk?,o4;Gkkմ [j1}Wx#7V:nH\FvPz>%ݖ{fN>cv» ih(93ڊ(4QE(NER((i\E%Qފ){QE%Q(((((Z(:QEQEQE#}G?^+V̑J*G?^1>MHIx{u%cx#8sX~']=A刵nذ O5OL"mJK4)?\QiiX 1( a'RXXGabV";]a\牄wZ:G||\gՋ嵼 V&666qT-MWL~L;'\ܠ%ޟ't3']K(=>V{yy &d뒥?ΟtC2L3JnA?;TD6̒-7{d4LTyi}Z 6Zo4<~DKIϵ["$gڭ0ZwO*1׀2HںXDRwRsH/!,34Cc "$zulG%v2U#R* 4Äa}~?UեԮ.W);ypUO6Y`e^sǖz BBJ">fOO%1udI~'$29K*2ĨF^B>~Z`,h9ª`qb"(oi=I#f+o}A ߌ1d޾ZKH Y 63_ZjRq}Uʈ̀>aX3&XhܮD8~+:)b U8t)R9%P^C8׮),t{ZuvFo6R)eΣ*u+[?O:=jǧOJ9H٩n8>8k˜ye_GK5ޖ=I vQq[YE⬲\p2##>銙o..lo2鸟NdZ,LgԟNYK|w9 zI$m}3_'-,ec"༌sչURXym''?sx̷6v=5d[џ-aC1ƒ`3}MC84;%8Aǰ?Ϲ-˛ C@YRzF}:sPKq\Y\[Z.̮_TSЃ8sP=An c #T uB~},-+,?h÷'q@ *qE/8ng\ .In1O]eΟk)݁tsY!Ն+02mq0@Q?ȮvkbP-E\.rsӭsjwzctb"\9c]BQEke<sEMP}s*}"{;×?feg$Tl6zƣws,F$19??*7 Xa?V5. ;['.LTfRm;dDբ|Vfv㌞}] >XI[Oi'<Ϲ*zKWLNz}떱foweydH  ޛ};4ge6/ woX3vG+Ok,R3./]oLuJ>PR $Wkc3N6;*]FN[TR zW#˕ Ʀ@#U<ÏμWxEAJ'5niH0cUbÆlˊ7cH^Ĩ `ƥy {YLMq*\࢑ #NLs1ogP{3+䁙>K7Q.@܁)fv2}3jZi} [W' irjqtvsO-$5t[n͒$L;,c{zvG%.S㱭q+y2>/%q1Y$öIg(8n=sԚI4|ʠRzO>9}h& =Q<{]G|<|3WւˍAxݏ-ϸ<%{^bLgoyJxmV)?(iyһ_z(ɢSEQR(((((> ?^QIEQE-RQE(((((?=(dGo +YaP^rJCwcV\H#1cUTխdI CbqX-*})/ܿ\C `<$c{}EgGM>}=.rngr$bO+FDN!<.Fuyũ0#n 5b]' *dnd,HS$}R?:~)MJ`@2ˏqRfa;bGl; ֪oLa\̣<}-jAkH6x7עΣd=Gr6?gZ౞!oJ;?jEӆȖ;\M(a$(bMM0bvRH$ӝ"P9n֤@{ hp?7a߂?:[;u-#9w.d\&Yg#8?i ^Lm;|8{d>wm#[3cySm3cqW_lBc5)gFG%V2nߙ% @C68+ʟ\}fD0dVQ gIϰYM]4:Mszy6a(P,ow g̤ iͥic:^ -22Ҡ{ ӣZxzU#$Y:I| h O=QK=+]#<T5M-o/cs`6)9*6G]X1h$n'$g'B}pcu5cтCrAO:~vBi,ˍH Wbԭb+ RÎTƒϾ [ԡPrXXqո,61<ŧ%ib@LS洽4h:a`vF/쾋ϿUO#giH' $P0t,|2LXSsR-m'2z *-KyO*IP39'1qIn1c=? W,PfftD8ӭV.J˱$hǖc'* "vRFlsшLq{?ELm;-k'B +{Ӽ>D,k ϡ?- y;pNw}O:W ֚Nn)bC,:3pW+ $rV^i$#jQt#a}K`"acslVj{"{QAKfY9OUMNQQ]*>i62_^M(lǓ(i/V = [WןۚRݣ%ܫApqw$бX"d1!u;mƷ:{_NVn۴h.bH;Lg7]6rHcX;)QzuƟxۏF8\o|{M4{9SSkZXl`ݘCQَ:ֳ -`[bHg!Ͳ!f Slzˆ|Ö Θ#Ԟ`w@#6\C3;# r^zqM&4J!fo%ng8ǿ&6kV-I#&8']nVW'kVcL;Pv|T[qc(Sl`K@ePqܠ'vZDHF@sd%jgTX?ջbFx;˗>; 3뫆d2!Y8wMWa)-\Oqtp6z)dxP yMDp= >tU'LD''"2\c׵Gʮ|i7ua_ҙȮvIL[e [P\p9R,FO+ vpx_rt:#nFc35ʪJyDvN1H6E!sgK*܀H~_N$%թxZ@=zT ծ-ʥOV!({F2? '$}gRq`6drsۂ8b4VKt'Q*w@%/;wnl-[)7E~y`a<;E"dj3QԦg`qoPXu=Ue&@Li[x ڥ+->]%Koَ7gVO|C %ᢞDo9 >jеbGEo|u?j䢵?C|iB Ơq .3i`|$J`!Whn,I3\ŤF G+` $fr!!RXNLH]t&G| ZmJcv>fX2WwqɨR{9LD9+cMuwu*QHLxOXOV m¢}gr&&@Ubذ9γ5{V}c4x}Wխ.ǓxRs8#A{gNj7?TrgͼYd4r#14_ZF() T8j5o2qNķW-YA1T:$`uB}*ҢӥO ѯLcU[]bp!C`z=KƒIpy|{OX@oP;{ojGV4 I\ps#t_ S]\^ٷ9}I4a\Muչ Q[ 丹R4塒5{gHjbM^&i̊x<TmpO?YL7іޓD1G*ql?\MyrA\(`NF?ޮXTI$W cVOc*#\|݇\ ER"W:9V<deBQNVOUpʛB`sc76ahlpGg3[s?@HFXƽDmc{6..yb׭jҢ)sEQE袃Et^QEQ(QARcRW> ?(()h(((((((($~dO:A}m>v:&wAMɟLW)-\n`ه'<vq7m;OeoO^W5ŽdǢ'좾,&Stgk)[!hԡF>vz{{il6rQJ`jj2[\Ab@8 mg ; I$$v f u6bRPz|O`HM#kzD#hr&Ҁ#k XpY[BIu+J $ Y>_lkFڥ4L;˶PW|Cf&GN82YMUv;99ɦ,Br~4ٝ+qSUf>[U;a9'YVNOhU>%m6s.ONU6쪤*s֭lv'm.ݸ89O5ɳaʆ1z'ךv9sC5\9)e*Onաufżmj&cn!]9`288t=)t v$u':SVh#8$u;zU#>l8cd9&.ˏo8{8\U 70C+f*:o.b#hI á-R 1Uu`Œmۿ^ڤӮUH/1өg;i S'#1VpLWnĴ z>Ֆf1<0vyP\cbd3[[C@?Ҁc>$!N?qyk<)A\jI2YNIuxKVa! "=ڧԦ#[ "ddw5L[h3J9-P&ay,&bHmbc(v gK`vlԖWrM ZRpIZ{-:hp̹l*B aź?mQ2RGx&Ekq4Hج5Km A#RYXHCv W:ѭ4&b~}Gڬ]G`w;y3큻?}KCG0NO:,ͦGm5otLrEz6[?Cz$g~NeR\r/c v?"9M|k*v;@IGkKd" s^4Y±Mc|M8D@>LK^ r(-pIFX2BIʳ.2GXh:: T${#YH9{-,[Rdh%TTG ,r#u?Sho"HGOʵk239KqՅ`b\qg8j-f23~jX?{>%Ӑ3>y v I.u ]q٠l6nESQC6&F(G ɩ(ĚM˺)n%H Si +zd-.褹BTuuLg5H^:REQEQEwZ(4QEQE~4QAz׮?ڬ >u A(;ͱ^2yϯai!6Ҁ'3yŴՠ ;OrO?v0;A|z~UDYeX0^pk{8ҷ-U1U.#%gx:?_g]ủs#y뎔/wV U]lf `2ɪWiu/RXj6 VkЯ.6}rO֫h!}ZI@UiJ\A G<>Ÿxi^m2/8:U43^B" #s@|_״+jOy˧ UA>oY5֞ͭ\0^Ob3a[SQX\A;6KdiA>0T}eh=v[{r9`0Hy(, ©?GaXQB|o1d[a–:o28KGo] Q9\{3G(dʼno9$$jƛ5Ol$Pm`hĜVg$mqhr`69ϵ]%$I-L˥Oy5FLPX/*d-Is$7z1SVW^xY\˵"*w>;g+/.DGZ2!Rg9XšȞ]bȗc=q\gd$h qGKU]Vm mF̊ 6"`bJXO#(}v];L~9zm+}? +aܥp`H9\}* uk]EYBFGϽf$~&a.x2?}4ot{;$@:)* Vq5֗iqqiaG1X$WO%Νm<ш%wA$HujQEQEQEQEQEQEQEQEQM}Gbp =9O:> ??((Z((QEQEQEQE/j(((or. #$c߷s,(TtG2g,nWzb.mG8ksGEc4~|6r?_V~J ff)%|GȐ3nF\e/ʬ̱E9 SJ@pm?V$ m1G#{(8?kuW"!R30##ֹ}KR}LL"L2Is M NyFFbXMr +IHaV,Ugi#HJۚ\>z9已?As8 k?&E(q*K?8ػp3گC PirM? ?GUaGl(#*qC 8QP>%ys*Ck U\ٯȫvVeM=d(O` ר$m49*PNU3Ug{W6D\4P6cE#ڿmK, Vx1sP;Ha5Fp6c}kFJdʀDGGQsr BR! N=VokqrPɇQ~>Z5PP %q=>k8!匕 XYHt8ֶKXLAeǮ8B$xNqO[9$}JuyfT7'q҂pXrT9f%y fȏ,$˓:{,. N~g{KL 䑉Qsx-$b7<yQ ڲX:k.y- mVtI)̻H_K2HV>F?j1zlڄY"+HU:PixE$)ב*:}I*U$]yo<'=pAҴ^C< 1(,$a_,f/(%$}*vjޝ'duh.Xo$S(8#:,3%Wj`Ϸn5ŲF%c0F  o9y{rs zξ?fP>͹a8=Wi0Cggq*PX>l⟦m Oˈ`N4X hۂ!|8ٴ6w}oiп)=FwĈAs#c 4 n|'i?InaaUu$3HtqciіF1ggXǵ&Og,ig B>bXK0N:j[rGp;P,?Xv@$V2UeEt'sKh$A d:t *k9bu-() ] iufk%Ϝ1RiWukqp=3r{]?ɺ2+8qEA[+niUmH]W}8 C[]j"w 8q\]`w#Uc>TƳk6v >GL/ }Icu²F:AZbO[lKw]rIjqKa.dKsXeU@Oj\SrƸ$5]5(1[,,nd 5:'jX(kn$9RIڸh#I$Xزgp$ 欄WZS4r]>spywrhH, @ѣ  ;}27l {}+߃(;A>KEQEQEQKEQEQE(((QEQEQEQEQEQEQEQEQEQEQEQEQEUHoT6HoD6q3C!UQ* 3b3$[y0UD+sSv$~pbZ7r}\ƞINg߱?Oֱ_[Y e2GqT6gk(>9"+x 0:~[V WJ,b^g\p:Y~Mբ@|'3*k[Fyl{c,7VMCtX펄sޝջ1i*{c>rBy)]z–!O8G*00Vl(9&~T,1 TwJhug $DѤ F'ꮭ%+k@ x5(no5嵏 珩PPh~S>3P/i.[:°ɪ˥]`ۀ:n^愼`ye |S?J4;zJr0~U[='ʟ/qQszb-k۽_=[l4[ <#5r¯53@96yˮHn ?16*\`Fy*@ؽvrpA%,)xn$vx8faR7h-*Eula7_ Qe_KLkM"9.Ia+0lOstZlL.7,+ Kd9)vۤĠ :qǵii(Kؔ5ŵK!( z9HKjh'pq=㊒iyb 9u˸oYآ$d`$柪ur3Tvq1듚m#;~`kVY.4I$3G:r9T6z'ygh*JMFXҒ Z.`i{РfڃqV"f6M~Be >i|2|5NVZ3P?*?RddCUg {d^~شmxPiX3ĐTSW[Ms*Hr+:H*)ʫ?RkcQݙ9qtgIǩ+T.9;:Huvi4q|NO=q[Z̐@# '\µ ӝ6[ɶCu Kg) @'ڵ$b\vvOOOs{l{wH77''x߮~t|cJ,<AFHwg[-~ojZGdwr^/Sb?g8;TcB&|x 5jbQu>P=A:g>u0%ۺkwPK`EcǿY+0x c޽Iᘬi쮥U7>IHϷ{፞yn-.Q-+0~~SAYgu|NZBzV mo]Xzɭx#-\Jw1cO'bH!Hc*bjJ@9((^QIEQERQEQERAE+> ?(((((((((((+.yzRa k޽5#emJ5m#q&xDn'a*mE9X[$-Ǚ'#=PZIe8 d#)䔲8 n9Vgnnu3*@*Bq̷LAõ[Qf>j*= h$?ݩg}qW^[y5Y""|Fsjs Fb޿dY2&NJʚd`ȽVt1i8⵼? o*`scddZ˩ ͱA'  /R( slF`>fvն e6xUXܳc${v>eIY=NyӶghpr x#,o1UQ`޺ Ho"|dE$:H؟2]X<\`1F8Vo]Z5ΗU ;/[5.O5 ѻ`ֳw4+t=ώܪ"yr$XRE$(AE}ΟtlRal%!i.n~sT9qQ:o8i%&5;OC nj\;j&{RJIf;v*끜TmFV6(s,f=v#8dUUխt[F|F@qV@m/# y3UaD#-Ǐp*W|w;݈GU!u+Xtvs:VbGO.2Ң^CWzWSgaqp w{pn#vm&tv5bg?Nڲ-4M*mjti܆bH_Jĸ5/hֺry`bH_-拥ꮒ\cR ?Wwkc&kGD25bw%H2*6ht%),Lra~YC+55f焅޻&G<`UXeԮ4$O+̇YYD<Ҡ >[v_($t y),tm1VM!l,n{OZi*wz7IP:x&KfG)W퐁ԨiJC*|K{s ˿ig>? FE/Z*!**zo~<-DA< ~:y]$o n~~nVh#PQ:n?Ɩ0Iv9?7Y FЛa)ni$ebL60#vG01Kq\GUĂĜ9\t 2.[7[3g ąQG'g(K-ll@'ҳ2W1hI-ӃIkRCm-1Ζ7$I#y$vQ,I0yW6aEO.g}q\*-sKWAw~ʭI˄=xBS x$ OM;i iQNg.]?Hk)&Em?4Ѕ8]%ݝYH)nrFpjiB'pp=ʨ]˨]>YcnT귲_\Y,??ju뿵3HyvCs\'sdtsg7=]7TXʿ P0O\G=޽3㱗]8f)BcAO$|4 [Yu⍮$m DI zh((((((;QEQERAEx4REQEQEQEQEQEQEQEQEQEQEQEf^eW/L7u=RWڐ.1=+,l)|s֪`vTE# ( .w#=G1O'{Xb~$}qUdɵu'<~qH3_ݎr{9a ڿ'T!6l#z¬| r?;(1)1dUlQAQ8Of?1 ʹufkU[tD`33뫯,ld״e 5~sX[2E"ebOq0;#&0 R-шGdk1Lxlv?e>P3U .6Sǒ~$WQ҃…" 񖈌w=ۑַcB>JS#UZ5S岶w?JhKW F!z*UAQʋ۰BCc8AT초l5FQtۤ$Q[?LU[M8ZS?#xd&\/Jk`- $>aՔPJ% K vn~U4$[c19bnpz~TTCh!G'KZ<X$G둑63Jum)v,O NpPۨyyccip CXaW#<sNaġm0~}O<G99bIkX]ǧd}1N]K2?3JɂQ[8PUけR5SE:]Ap>o؋|R1jX 8-<`I:6Ann:^mF7+$g0u1W$39=IO4sif#jl$Hs8cVh=qJl<(gwh͗ T;t~UNI2$ ;(M(ꏤ#O /Nojaq4Ddvsϵmu8eoG].`Vv0`sߵt7vZp; 5XǩX*-ԶW|\2TKꦱ,=%![BkӎYj:z$.c*}W|(PAkv,~մ Ny9C4+H9RvpN<ӣG#ɞ8Wl<+sq=*+`i2,gz|2i$FH:1R[^nHY.$ \y1댞{bIiesF<-߯@1z$K-*#T s׮@" YC,V(O]wW?--V!^8;dx[emH3oP:CΒ8rul4&+R( 1&pڙBLƠF85nlſ[i6f?] 择EM-H4&O CMYk+Q[ewH/nDˬkipoO%MBKxV15ČIB*}{xKIw3?~5N;HRr@{}k7TQ,$g8D'=ǹZ+́ l(?_\InWh8ͻ#cߛ5hɎ((Mђ^AoY] <9{խ,ło.Q.ЪK;[ ?3EQEQEQEQEQEQEQEQEQEQEQT k O#ҹCgf53r*kf(2IVyܴO; zzg[Yki4q4Y]\8X񓩘&ADd==}:T9 #`E"> |OZK%CiUHN @ 6dᑞ#ʥ n ~THර0_;B*%e ߜƨ[ʱZY)gYUQA]$T%id6:0r +> Nx'뚕[Kq;]K&!@~?LKhcs#v}>_A?LCQ;Un{ՠݶ"⑏ 8>:sW;Oj8 $~-tN9;jhmXŴ%8~Z|ٶcIc=&|] =ޝv lY>rgڟr>d+_^^r}k2+ًIC8{kZO;bZK~SJGdgpjY]X+"@^ēD3 `O#ǷiY#1&^5q=yo_LֵΠe#|`ǐ3ל66ZgXQ\"'@< &E"QHAP<H=)RiG89Qۦv"d<0nym[Β۫+sA^kZ)VHC WQDu9SUuYfım9>ޕ^&%H*T0]~F\1vURnCC{T)tZ20H+?b(/|ۅP.yd¯XkPD64Lp}~:uVI±}}ZmZaB:9im1 V6=zЛX%2 j:3^k @I'~"}WSaj"3!Fr޵%ͭO1G*r2hۻ.&Sv{=MAyD(%*Ǽ uB;ҙ$ě'C뚕 f`H'Ob[: 4%]!wnn3늖K&I7G|=_+)WqGI?oiglNSP'U?7)%2Aom9/e3Lz?7;n#B9}-HWGjnFxZr ߼[xk[Y?NOtsۄ!Q>JSDƂPH'?OֺHUq"GҴbIywM}0 jA"v]?:EuIc!՞誁?>WxTB$WR¢[>W7ɥ gª~SY7#Spߐ*5̒2,~JIUv]Tu$~C5zh%\ncnGn옊/!T0*>x#<}:~TK 9fuڡ1#eHu)M%8u~un $O_\UI/cKe<۟qŒт*#ݢ܌jdsAov.da*0$y =)'eI y9xjkL3Irէlˏhs角~?*ҽӒNofD6$zϧҮؤ70I2?6$Ti!xнb8jwYKQz(#:>تu"ՈVU#?{98BolFQ|F%]kI@8FTyqͧIMmk≛>QN@$dY8+5+26 -鑏?]\?%(N |3*Wl}Տ"(| dF>&7I^L64J_3ʪA"81o$> © r3ݪ )[u+u*p'2w89OOfd|M|pY N =&-'%^7͇+sҘ@VDRN ?Z-2]K*F*0pxȰO,AYUG8?BIwj|7Ns=3GZtr=A)eJ n^;PY0Y73^($`#;U{hPҌ$ٳܓj ŀdiN,~lL}'?^SMv 29^aƧ.&8 O3=}Y!TR@%p=zƛk4sڭL 22rTk4۰Fmx$KOtS?K)nfQ;yOF cS.q䗷XK1 q򥷸tFK1 B*-aO5 U*J1vQey#I"g00gvQiai2ȸ8ʼMnXy%ŭ) XL9m^y[5$N(yyp?^k06w3K* x>ֹl6:ֹ_SZ˴Eq*nr2@֩B]$jrYzj|DYxnNwK|9euHAʐW9$!cƱRE^C@A8KnEBtUrO ogS}Al9R.5{+y}Ȗ-?(LZwu!d$~fc=gq\@W>@hXr{ M{Y ?((((((((((()7cw "[Ѐd J32R4`k&ܽsm ==4h۵2YB7dBtɯG!z{H,5dПЏ²u#"TCsO¨@aW D7 OҹmD2ܕ+[Aӟ=8\[3I2EhiKv>:i$VqbIdxeHNHI*pA3JGu%HNHrB9jY$y xFXȑ!Og$rI 3sֳH^ E{F[zzZC,2ey8-mK9#Ayo]Fѧf̤1%v)ܶKH/<<w-ZDS$hND`dzR.#NFNYWiH*{~U(X $|;` ~˫MH ˂h\c9 !s<b^d3дa*9…NԎ.ŮuXʱ #*ZwS;ޣlK-_̈́R2?*oN on7>㊫vZ`/-,9֖DXE,7#} #Kp[(sIH=E^S2Q98@Dbr™t3ǘOy1iL}Vơ\\G+..7ˆ#8 sh?Q>Yj$/wm_L/,"E<a_-glh9;xig$D(_,zs_J"c!7*f=#>qJdi`qGS6t}*;G*89յbba=pA)eui܄ԷӰɪ}qw|no49E2g--8^qx,,idzں[{8t)%q:!y[5XVfyK4|́]UK;1㍞G#ɬ*xefF}~y $;G [) dIǨ 8-^(- Hؒ:z,4|H ~U6g_4Cisoc]V0#*+X׮&7qBr`b3 'j҆MI[X|\)g9 yz4]a #&8V 'j[Ww@ۆ z~3\\q%rݜ|͞⳥y"Jg,99pKu=H5K5 F`1I%% 1F}9hGAvF c MsM,m]%UoGNߡC"nuzU N$[[_4v-,=G*m C~}G+/jʈB9`)8?vNНs[z1[+XW!,q= ==-Y,?j6P 3`=jt|_&V9v~b?Z~Gx9g(Y,@*8~``W(((QEQE((((EQKEQGZ((((((((((((5E2J *p9gnxooaC(;d'~.F{z:dwYw{v+ zk:O bpR+p `Mݣ + 2Tpێ/]R'fFQ)HiWӒ ܩAgYck6R_*yˬ1bOLvǧTal\nq?[@\I!I {tzU2nv# |HY@xrI⦕"YIM1qlgم3 L,p;( wޤ?+OB9_Zd>.؜7$FGQ믈VmFL}7)Jb]8%V`$;@?­ .sЌ^j?&8=D۱q$󎭃#4Ǩ;'$T5Ko6HfS Ga犓RPk+p)R@8Gaonfd BO8v&Y ñ>m'9:}(O*p^a@ރ"_ʹ>bTlz`K,ޣҝ,q-mwD3KORE<4JұI??*2f+ <zlss+IpNsӯ'ךYRXO#YYIN;KgSm5ԓ;0]ޟ.A؞}*]7Ynӣ-P0=Kc[fq&ޟ/byY,Z#y,ClC\@3}MєqDe`~uxkN.s#s=~uo!Hm޷! ɪ=֦M2nVYd=1ǩ9,嶁,!wڕ&9=?:$XvA4~(p ?1\?Htbyѩ({2 0rcs6]^HߟFcLڳOğ yS:Axf8\*֮-&P8C8k']Dntn!PVuXσtuϽBOpC"qp@Ն&]:@9wGd,aqj惼c̏f'$p`Z\##aYeق"v쏥dq ڪ1VB#UR͂=}k?Zj<^x@cw~je?dZT5cz f mʣ N3^ V"t9xonmn.a(p8Es'<һ] kyFiCqܜٍ ckĚ]:~cR2 ]-QYvP{qڪH>KNɏ,+ı =u"Knv9S$ITs'ڮee~D,X{R>f!#$I>?ڱPdPdKFk Z1ܘ¡X=ybo *, U }GXNT9+2,ǿl >X'БPHcg:Njo&άtGaZ4ڱV-,jYaՋRAX3X䁢7?6>c^/jvFN!Â?PNJxJ3 Cu00~ 0rc(((4QEQEQE.p(QCEQKEu(Ɗ+>I0D0[!ăR;Aperio Image Library v11.2.1 2220x2967 -> 574x768 - ;Aperio Image Library v10.0.51 46920x33014 [0,100 46000x32914] (256x256) JPEG/RGB Q=30|AppMag = 20|StripeWidth = 2040|ScanScope ID = CPAPERIOCS|Filename = CMU-1|Date = 12/29/09|Time = 09:59:15|User = b414003d-95c6-48b0-9369-8010ed517ba7|Parmset = USM Filter|MPP = 0.4990|Left = 25.691574|Top = 23.449873|LineCameraSkew = -0.000424|LineAreaXOffset = 0.019265|LineAreaYOffset = -0.000313|Focus Offset = 0.000000|ImageID = 1004486|OriginalWidth = 46920|Originalheight = 33014|Filtered = 5|OriginalWidth = 46000|OriginalHeight = 32914ygJE g*V $8R$gx&֜$P K.A|T(hO{l1K>m 1FYhlI C % \ y , y  Cy4K A']-/~~C    #%$""!&+7/&)4)!"0A149;>>>%.DIC; }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzـ P8$ ?. ?P(0?!0l@/ԁ`OFd`$9;*B,l@RZnu$eQtv'¢/d4UIAUH?hRJ|/O?a Ѭe4Qk\pD2K-n۩4 Y@Y&Su|~X, -8iun@BX\1*dsPl:*K(7WՆl]t]\,j€ { GH~(r*꘴-:/) %Ky%g,ۮ I:r5s氹h7(Č4J);5([߯ Ml*" ?00k0h,HD-˜6«JI׭ɀLr,1H!*.-!BH* Nr3̍A*/Jj>sTd"҉’Jf4#D}J*m8-BEKLK-j{>ZqbV(%PHjk(҉(s碲Z0 Msn-)6Z\~,sd色DiU*< ,~%r=q y'-Z.pq/Xl(ҫ"{G#R"j:Z*j duZAu[T~؋#,1cc#VSp5S$9h$N,,#W*<1Yd, .će, T`x% BlƼpC( ;;61H9")s( |h͒)*`D®bnOKTS%|m.JR "1V$*D(dCU/c&DH·!δq>Ɯ3nD$"Ћ䨬0|7O*&h\oFΜcF^ZEHb$5<$$s*ZhS9&.(bX䧯@I*rо.-Wdh馃=2Ka i@^*dʂuлT,ǔ>R%lA}JC &٢Pđ:#v;b.p-fpF,@nv<WT AЖ,pnBv(t<U#3'oAU(%Ħ4gDVIS~WWɁL->;Cj9p<ϼ@I ʽ Aq/,~Jt!Q4MxPLic+q{LΛkƃET8KdK9d@P(` A8a08,nA0B/( B DH?(_ Ac J^KDU╈"2ͦ#cʦ;6O~_tf@ "}ן{hZ5)8!SqnOa@T[v5g졐z\. K52l0p0X>xrz2j콶 34Z#'zߢn+|J+T("0q 8 ;0gn| ȱˎH:h 2( lԬ$ˎ0M{5 꺔%,sC'"hȓ%$(JF :L1ό$t% cΩݢi '6v9 *0`{4z&G\0 "-e,J]M>oe, m(vYZ*vbj 뀉(?ZBb2 4*J0H32R7U4)?5˝o!)r_(j̖Ry*i+͈{OIr.!Kaq iB <"; }#]iB`*P}0S#c8%ۜN*B&L*Q\5mԒ t,YB[/.%)QPpȵ+$<9}M 3,'+,L5tipJ\mNJQx(?ީQ">"@KIOD ȞW:&kLʅE ĝ4}6#ԁG| RwJ ݧK$T"KM_Կ:lB'&D lH9Lۤsm´/rR˶4e*:'&e%p{R$PR+:K< URp% @hx?Yb? J 0(89Qr-՜V .t)oՋ"bKI%9C"DMQQ$2'9d+'bݳTy⸧3 ̱VۏVeB, " h4ud4m1ZK˃*WS PtޙA*$` b9R*V%8v8wRdgfS#@ 56v{M9::2X ]:*t2r؜e &('Za(&? ̇ r%u64yuԥr'BG$Daրf 9 l3jK$S"db4(L~hg ($=JP3G5z4aIɎ%dѓ0LںH(bp{%J2fNFp0Z isK(8SyPp,cQ"H)4az>3Gʱv%;[ )PA:1kP7ugE!%k$jF6 "M[n̴"%$I!}K6uP"8IѮ=!FN=$[`f ''uJ)UӺgc@{7c錔6VB$U*iA]2_J)a%uaӲm.DRvH؜#?^P2MK"ТQ/͢nEM/"N*I_0Z,3H%?F`zޞ:ȌmA  V4qݿ LypR;&JU@72q*9D&R?Hwk43 P,)Io@y%A|SeaP2u%NĞ*Gxz*XzEbh 6b[#,L-ex2!PHdžnr&p|l) W$(V:íjXLGLN[rIe]+$8?hDynt<Yhf/vz鮕INƇ'" e`k fV,G.\鶃]#Bg}A#Zxzni)B,ƥ]P%%n+MfH"bbӅ^D^BD$Kd4/T#Eb7jż)i4BC06fef85"E)°BqL`*E|D? ipD-"((k_튅6oSʼO|)1(A|d@C0G*yÅ1*.*u;+HhJdqELN,Sp'(%Ue`!22*:S"x? ΘpBnBbY&7 ̊9p _%&|'5d49l(A!ѥ p( Rf(p4i\_qb.»X!km6MCi$5st%`jcPF; ץ3'!ܢ &}cyM q^,zK<(\8f&,CWnc";ʇ.R聼,? A֠kֹ1- D$`-K)ۊ@#:Pjȃn8(4&ʔ{`>ӞCpCj#q r`nb8"-Kt̿RDMi.K(`"HtD9ɔC 6l‹C28ӤK#z` }F( !茓@4KISJ~JOUISƎ;Y/ \/+O*\! Lʯ#>SJE#c!< OkR.H;ΔT<)j}~XsE`2X};D,?J~ 2ɿ6 r;y@|DVf$Fu|E*I&qLhILם7 VQk&u}DK -Bjd:]FiYIhLt$#Z~5npSXnނmim;hEs)ep!ݝxű<AB~ÔAmTV!n%ɒY!d! Wb'2o{1ձXV%|RΉ0) 7% rN0F]I:iHdw˜LRv΅TCVRdl՚_i' FB~񲓘^U5!6vCj ?xHaV)Ohp-Tð4 p͵(H&Q+R$e@1}(8(HAqfCKM=L= lW~,y (6TZȱAoI֯5)ѥ~ֿqQ""xcHXq+5.`wI<~ 5#s]29klgv]mkc1`}:F!*81[a L3XrZal|&%z%RWIENtsC$" ^|B[jj ehG!i0GF)U{0 cVM[2 [OECa.Wtj0aa m,PNݘbxd~+L\ٮu`L*g,`t=1Q5fL0h{BNMiFypHJؿhEfʪC$jѡCNJ4H֏8}LȢ+"+"Psݡ: D).+{ 6-qգG"1W'9"%*})hEKDs%㒼z{:,9I}\Y/XEG w??.K&FJKu# K8eHeM{g('LrզySOY$̭rWnL~( ̣"2J6:n*6Ъ(}8 o2H~-:1)mr=vJSD2@kJRk=-ˌ 1q! XHTkBT㬮 P64ZU=ųkC]V2;- ۞AsӠ0 *n#6n%A Ŀe9ԮkḶL Lm%HDV8|یM-*u8TZQ2(#~:Wy+hI!/2!g|EL574Vs*P 쨖,~@蛖##jfߧmJSmDMg0 k͹7lJMxQ Sr䨶 ̊Mgŵgln \w(D*͙Ĩv8-g1@nnӣvRiTjO? B5 )Rm )9%傶@)gdɑ7F}M7(*VRiN ("5 ‰y N AvMpʸƀ[4nŠ8RZKqsK$l>]HBƖKdj&yX aEw7Ж+?Z$)(XS O:$!ҠW[3QG~o $P}"zȹ<#,Y CkɈ|fl2P 95vY{2hvr#CH}Y*<,D> 3mMIŬ2 bEe9,tՐRVk TJ G mi݄q'D"]UE(uSc+BrE^ Oq$sJ# BqE}!2)~ArBSZ!FsPʄ$$KJO qQRXB5 E98ru*?&T"&Bm3zz r+jЉ`V B75DsS) 6ʚAj{t%5ST$a)lUhë`pBcI^/.ܟW%UGJښFp?_(ZwJ !rA!2s@!GӔ9vlItWm7@'JŕK9o+2&"4`Qknxbf>&JA 6M"6)N&֮ϡ@P?ŸO@2fѹv+kCEn;r!>C"C{*׻'JLzjhhU{mhVH[7o$S"D(!= zC{֫m^hAΰVWTre_=W>LQGi"\COiUyj9gsFHX@'EijbkjyQ]'lKWԕJ"?;ѣ|X{$`R+nQ@7^nuL"ӜEEԵ4/T3EI"\ӖxEvxeS`Y#T?IQj|*J1uJ!^R>M\2b@(MuOdH;`ɦ u,.9+CRۻu ;-ϻkrb۳+`䀠?GM$"Z9sh[ܐr$=J1sn /]uUe!KRsg*ַxfvzg(#mb YF2CW5m@ #cVr^ jOD0*jTZVΑ0^M1w}Y+n1:` P8$ x$ B(?! }h|2Mh;$C*ͤx@,Hg \~ͥ0`O(M L%H}Kedt}Wne\+@@0}pZHbo `AXv'jQ?dr$~~a۷ ?7eB@v@=h {_琉k2?_ G_=l[wNN77I`y/M7B~}̳ `CÀ-<$F#rP#sv, B↳Ilb$"ƫ#T$26 G˸Lcv#: +Qű6lMSjPD$e |]DvIz)1DIT%jQ2TaKQ%"nۭ&y 2Dg` D27v4bJq cP?WL֓]kUA ]w-U@^j A []$H$# '1H^IhM2S,bLbȃݹs15fҔb<+nxm@|TF 07A=GJ>ȍ(!c|>GA K62V^bKPp iFm>(5\I M%cT!, 'P7L~"'7)1QFž\JIw^L%uw_uSl)mȕ8VX_ AH\dsRA5()5!UTgЅ@P01I , XtHz@(>Ҕ/E(( WeWbg5g$0mR)YE^LS?(TŸ P#nIbtqJG*lHK͝NZaP{k]99֕dHFl]Z.5eDO3f`M7Fbb )n'%4(4l:IP'Ri2NSjd3%E1H!E/<(|7W @}q0pqZI#D*@P9t 9ǰ0@?'7h=Y,Z Š Z8!@I\}"Ĕ WQQ6؊v$>㡭DD!VruⓦJb@&'h Nu7QZ%KJIUPU?z ʦ"U)ktXI,X93fuD"C8 AҢr=X, rJm#$-NVW8AX|n9P0*;+iC ; @϶@%Ew28/L@8UtDOzU9$aOPiw=/5D?J9d{&M$|ޡ>LҕO O0T>şBG $fS0$`,'ޏnϪvM}JQL&ٟ,(!s3S%byaP+';X $0]ʄZSERkjD[G!4ͣ09f=6fKi#ZNVHr ']W:aM*r^C2(kK:LF0 AqUbHPkC Mz (>%,ExJh]N < bHn^׊:ՇbϤxb.X'@˄^f0k[tn.vB )bP nr.(~Pĵd&<[Q"PB!LZB&h!Ft,R-HPìa*&L+ Dgê~Vl3A!,xLfFZLm#¢#XƸ)%d2RBB#p& \-B? ib81*4(s='qD@F':mh~&9$6&32Ѷ5ymI?!,(EC1cA"MІ0v2('% h? 3cW*Kv>9H蝂4B `/h3n^"+MW>:hCP(p:lSEF4P*NDcT""X0rFbz٢PV(^׭QDl6K )(2${8hηȎ):/s.,F38*d@FT~*dDB٫`OW<.Z& :*#2m<3M7"X'> @zb+FF>d*-07Q H-.V( 8y;e3)#DeЯ8M9BlJ>>)&QL>29!DS LR#G Fln gJpj2dX3W3* )>SԨ1XlI~T7E6.KH߷#Eh#t,\2ITBo0r Q\2#irg+#dF_73@. }?.-&e!|g/<`!{$#s(@۲0Pg~8:',4Jr @ {!&:,4o)ir?l윉0:.ӥPjʘdޥL7N ˨kM ׀skV.R #W"GovȡScs5CfPg޴[&#҇?>RȤS+ʱ)I 4jT@1t5g(1%nR6;h* )*J2Xűmd۷,#\2X9CX|4o@B5N,#On첗;dCp2Ud_is lQ5r4ȿQJ5gcd#6ȫKeb1V J"+7us?M24d "Vm6L㒒RzNU(NT눐h(C C+|Eɵj : . [C2@ i~z|X墨T4& ,4pc&%S$%lw4 SJ"i%+ZJq[,!!~*2m 6ɮ+6E )n{58 >g.-L&s͹'i@AKBp(J0U.7yV V]\ 1IehJ($%^ɫ7HVju|hmJ + Eqw5,R{M!FL0! &͕epN O%^̨okPȱS?Hh~QPuM\J;j)Ջ(ep¥H݉  {Z D`@iwfxzJꗂbR(Ƈt[5SC|9@c0,6X`1 2|G(z!qGQMvjb+'8FbHI1޼ / ;ǨU}^1CIFytQ%WUd>Q!f8)5ֱEkRrejt ƒ~Gq}q?+x-Kx #u;d*Yz$btb ds<{T43HP˴|sl1g 3Ijғhk$;3)N>KUXb fK Hh ;"@`pTx@-1s-a̍WY Dņ:F.>C QZH'5S}`d Q2HIM#9wF0QjL~MUGn(ꋩa4ٯ&vfmJ)#9&Le?+qJEWpcr=Y}xn>2pib*?jHR߅j'sd\WTjr9nO;C1ĆF`Wȣ(dYx'pdV%)$@"@<R@2A.o$9C.`hfFD<hmC=C@ F&wC1B(N!N 6wB"#5>Cdˮf]H=FbV2d".i=c!M/b8`P J5رjecp(!A}u @1@(Ni)ILn2u`%Lr% ; QF!t[6v)FmGe"xF^MO8da2!LvuGm-!vmv.6oܳHf- ZP!Mri.Y8 ]% j@'4G5zxhXiIjKL*#m/u7ePJ@ a(.  (NDcan t9醞 .A6WDF]16Gg,+ E)"x8l.6n2*rL B sxhDDiDB"F74!j!ֳ/(kHGgL:#l`/iCE&ùp:d Ɩ-²8LLMp.q - z jŕuJ$^G=$LE|bLdʦ)(P*:Aat!a`R$RCE(% 7:)K4m}i(`7 Pa6"^A)odF_e>[A6^r#8-3*GG,h7 :`:D(2 lTgmD%Ԛ8V~rf1f8)HEg"2Zkb,"#*Q1-=JּJㆹ 3pHJX#6ø$tDUhVa]cGg2dE:k(y$$cq7s:NJ̺ 1.yŔ"PF284(,LhjԈѫ8Lj80]=X9 LD(7C ::D4hQ8VJ4t\j;B- W|ijB.1oAD3*`Dy`SNSHXDzf5iLCd$  R)NMDKd|2c2 I&c.G QjW.r*P vYc&ôwi@!Aap 5pƢeC<8•6%1He6aX=J dxTo4טΑLg2\#T$PFe#l'hy?bBaPL@#"@- 0 ?@@W ˟({4@0 ߏ( `YաgJOٵ/'3@i }d~*2(&~JPNцUi4o tyX@7 |_/KMhk4sQ':?@7]ҞP`U6;ԃNfBHM{ ۴z۳Sb) ^IoBJt:$" @Z)ܟB~:z)-h$ڬ4)|$"Z0 *N%2ւ7 &j')Q+B)KDII<( "}ӝ;. Br(*Q~34%i~})ΒFkCH*I>Na쒞s98' ХDA`FB{ i))k|~)B9TՀFKh}B/bK#$:%֔>rGfW[F@{9dxE} 5$ȉm Nڲ=ܵ |1ɚ*N+ʫ 7lhϥK$l%;j0/\=OjdxҮz —ĆX|a " 8G;2(, fPV1WM"?=#/{L&5BږHӦ"''ʃ ){06kBLr aʋZ)r9zwz t sLrhEĩSܟxrr\g 0( )ءpi&b\i<V:Bo dfk3u$.Ci41e~@cĜdi0FX'@Cjy*|A6N4(q%nRS#JvYq5,o5+p;Ca? $@QAxK;$ȸI>//ba*Keaur5~> "Sثr!1.F/[/{(&=P(#=R9Rd%z=`"=ׁH~#ΑT g&T?Q쿇. 7h\.`Jt}ft 4S! kNKo.$KL=BRKbG-hQ#rHRPBMCH&NHubCi,F:T=$%~]&LSJ<+cbIb,zE*zp?Tm`) ֣A%D$%~ܖZKБM8JZY/\CspW~Ԡ4r/[Mi::`]YKиCP>4Lf0QtIoN$fJ&A"u&X KQBӚbqVD3.99 1Lp|8L*2AP,mlSNJFvXHifJY(fKVD%ڻWYR3qH8DQۓ&n61:Gy:DE %ZP !TT *$ƒU$YHIW8S+:4f.I9-d +rHnrt(/#s1 h]Z<6^aA@!=_SjiE_8Z䦧" p0+tK yȻUT*Y |=0ئpz6DibEhE K>83O5S}(?p) t$ 0pݓ]z;?;XNNུ~>~*Q.:#MQ=sBO;XFRQ!d*{> LWUK'ҍ'2?y$2KLsHu9x ]ˊg.,g?B&*xev$X 2(5p,t.d(J&d:i $B"`9"pLT?LD,*N݅Y'iط`K)zwˬQe> dℲ`(sW#f`%DzAXG`UBdb0XETcq&\XC0ɖ=B1"h)(9 ; ^V&3&.\d 9äv 7D&d,+cf)c@An-\ !(Xc.Nkd["&丢. :'%=g~v:gGAB"5gEj%.0/xkq =@!#4-ʘv10  |N@4C"p)4$(Kv/9 |?C4>CF<\< v,>Rnؼ~V&lM 06pc&LȚZj4FKTSBt%(}Cv*#C-clH4zD'dj}ACi`pc/gJfFP"ރu"z* *P'b9.(x^B Ebfq)'DT63a : XbBfM+PC:䆋kV-%#lcG-PIBShXLz"L{Bt'*Bؤ:02|($\/3bo bƤ7Ur&sBkHi#Jέ+($dfﱀ$&m*$6: (0*:gXBV%v,B-E?T5R$/,-$(B@c 4`TGiu 2bCDȄHsc7PnJ,4'H7Fcw6?J1 7/0nKZXAa lD nIZ)A*:aAMKќD"EoVozҢ3bn2T.\"4 B䂱Gr-C!Zzxb b>%L|dtfCdj d' 4( ~@)AH~T&y$,:'T7bN%C(C40B2Gp12K~*.dI@"DO2*G`+.X $B[~BhއA+#f,\9.1>C2S`aMt^CA$~~o%:x<)#E+ 3 M? pq | #AI2 ~2"kV4`4`E,JLncZ&ba 0H"Aʹaa!@`'¨r=H"1P 3k’" C|)HgQfEsJ43#lJ98cD:"ZL=JgdVSJ`@tR`8k?v ;*dkbj(άtMS$*4Ir["k(k0z&9jM*>'UY\YCW0ZF":K2dFdCD p# %_|E!F"'DN$n&8'c`5%1\fdFN+[h{**@5d5f%@'(=FZ܂uBZE !&b(Ae%x]NX"&{;il횐 * 6%$4M~&E"RZ%8dwxv*)JMP?rVpkcf"L6! J(,se N:_]+Pob @(slpBdsbaDb E$dQ: #~vaRyv`,"8%["( I3:;! Xs5 D;3ћ,;0F"CaKǩGyl=/VnV67!b!^0L~G^.x\C5 rKgΛVGq;TE^e%r9h%h 800L@W~F@ OP@tC ~G d)CT8u J<K_h$,*Th _@h@ub1[,F4Dj1;eXSߏ.Cd |Zk[_hWjnU`P0 E+`Gl`0<OAN @QꔆOO$/|G׀m}gػ*hzސ38lP"KS ߨo,. 7ZugJ( r"Oct3(|Pj"}` }B @ PC=$~5 'Nz| Ih|~Sԡ B.}& zW 0Ӝޫ>JEL؀H[H%*:<~B\3j. :`ī HԈO (RM|-n *:V@* ]Jwq|yy҇R_BW. yH3j5(oa|OʅDsGp7|=±68T*pvfeټmv`fhpw5p,ԨҬ$+rh<8 ؊Hs> ʤdJ֦ )8 Wjj1(&Ǿ   G EKH ( z/Ҭ2CZVڊH9d#6; (q(sn6Z,̓Gk|JR1$[|C* D4^: 5H:WJ Zg(jb\~n|?9Nt={!  P qgbE1#+,"I pP> :&45[y+#p(? Kb%d4$,,~ނ+!ƑBs$pq+/BDFe(6 )XH@AdGƢhL:c$G`~# 1PYH8w @P 25]{2Ø ܰ:&@yRqYzG41Q3J=iEI_08BC }"{RS~)ԓY 10/ԺRVVFRa;!!BMa+1TXM3nŌH[feP`IH]>׈Q>b Vcc5'6f?XgpxNv8m 7D Üo7Xbf dMj42Xa &#J Q " Hr@Y2YM d() YE& U h@ @& B(Q٢)Uⓜ ZvhHY-JE `qJ=1Cb4ZlECnGذb$9DJOY5J ee J6$f YI.•c"ƀW A+ 8j̨ H7`el(eDfa`4%@Jk )x2HN11 a#J{H \SͼzcH@"YE7d?ǘ ud֬ɹɄs9혡qMS$~ Zư#]Ŀ!QnPgbC/Fݑ ,!ҎzqKLr6Q&L%x罍HHJ{f"(4`oRx#C1Hl2h0Ln -.9o>$T"g:bL4R6(D#iH>"$,.2.ԗ ~@^@ D%!aB`$bbbU Uz:<3i/If\%M^*!.&!$0K< P*D0_b,FBTmm^ aq!1$VP]`CJ۪\&$$bJ(. +`"RuC=-+0e2C In!HUf4>b,4L]I;%b:V a0\AlVLW1^ 6%F$dt2#]]˘$J#xj2BO>C",  $(ΐ1"G1$,BV9t!8*`f* ^!!|θGF($6,~O8V6.,;c"JS+4r%ox"/2#pLè+AJ7"\J O24d:%jc+)G#*t/ *1&59@ }J!E+"G+JJf)<2%3.;P"k7BY,BY9"4}DW9(!t_rWD:b B`_!R(dt+"]0_0DiEMb,et0`3C=CAD&CB]7"F>JҀ*JbFn`&S↡fBnG/`+ .I&k(,e !!$ҼF0VAVa!<²d%-AjG.[F**ehM&!THnؑ+.T%'Vn.z3tͦoCQbqr?j,`& Y#CX!7xX#.H@*6:b-*Z24/CȜ.|n!Of;>"a<-=$iHLI#8J^= !uV.` W%$KX"V!r()#K Pxd`0%`0E,^-d@%AsNt*b*O!!" C:2%` T "ML0@BÊƢ!2|NBX"*ba B-5 X%*ӭ\#@V H-# H"¤F8&JDCXa8aGHD`Jڨh,E/DD!it *@CS*4eE7BeD@`rP!@e*@T`a*@!Ef_vTP77wEW@! zhT B_ּT b$0@_vv\7{``>ƕ!(B>B^".<b`8+:7T@0$``*A!A*/ ($a4J$.HU"'vNaAa,@( *݈ALWdtA0Ppz XD2"~(aD.` O!<.`"V (7<,` |dž%g:Ď:BF\"*}^JEB7=c@ =$"8?*rc3Gfpt-BH7p$,&bKd,tO|9Ƽ7@O@$N;&Tz @.j.EIdL#'<&DR "8m'aNؕ "DD`)'M 7,!͞  &AO>_#Z`D$s.(d 媠. (!j;|+ncdB*-a_fMv_uu%嫮Aza*AP+)Ԙ. 3LaA>$GX-P͞8Fµ d@&9H׊W4Fd?"NbEڡ*(*%k4[%WHTsa=#V9.K:Hu`q/{a‰uEe` z*X!xݎMm5a?y{t^׈JrA_rtPJAA۠ a2Ѩ*Z:P&dJ-aTnrWFI61@ㄡڠqDJiF9 ,8¢.MtEab׫b2caI d+Q.(#6Q>|hab+6@"¢DG8J ۠zu+(jr*zC @a}A!A|AA@%&"ѡ @ @@7 E` ~F =\VD^`"Y%k= GL ` |0B1` &L?w,  ;~)2@|W`h@OW@O $)dlL)Pۀ@w݂@0@8 ߡC`H% |/yV |Ga`( -S }  x~*!z8 򈭀;1G` G2`jxMIѻтAH  a0,Gmnh 8$nH"'~ |,|@ 6xfNcR{/' ==V@zұI8Ђ Ѳg "ǝ}ۇHw5 C 8Hs.Q~p5:s m |{˜.N9K^q#'& @]xۀ  ء G撼j½.NhN9т~9#@"3O`.jVX*x-N sBgB1P),*{q(M 9 >X|aǐ, .C/Xq~{>Ǩ-D4@u(dx$mˀC~>xz p\0 8>GB `$]W 'z;0m 4Ɖ0,8$#b a@ kx8b@,dMI.4,lBQ$n% )@t FJ $x`)%`2 @8,?#Yv~iB}X@#c   )QX_D0 =Ja5 󎘦h9 f"mF>,{,Ol^e}THDfprR &g/B.DU}, H\A% >C#X(GzbW' 48T>H+RfGɒ0&\dd q?R+wEz!E@s6+dnS 8%Fhϟ5@=; z`t@.x î"[YbJ0#SjXDOY"r|h_ e5B>\K8|k6AKqG"oYd Ŋp{7>vʑ GJ1J2D G|a HAr4ү[H6Ӭ00 (}Q?[G /22JQ5=mpv9Ǩ X( h dn;pev4)Lf:|`I %Nw:( hHSșK.E$XOHVc  WVO{bȋ2&b9WBkqJGf}to u(9y$^X&\BCӸJbSOlqH("d= -R{) j0P.t)S4%4):t!*bXQrRǑ`PO#Y-@+,-jSH@"')q41"y "$/>F !%(0% N|Cc4;!9d0#ɞ4)".!ٌ7"9"\l0C p) 65'teZ#l 4t@ 4D!|, ~xRE*?` ~xZ"*I  ,cHgp/g  4bL78!FÉAUcB4 pc /jJ"4@\ʬ4:2 Xڐ+-ܥ%.%JDשB`jpˊxc@  i$#9Ú!0,ةǰ,!!Ȑ4/!EHD:q L$ lA$5f4'O.~)a!b~/ ii)$yeXRd6bƜ: ؕC~,),$"|BN&1c‘DF`CN\BcFo":8d*?#,aE8iO6tR!@ 2K@`.@XAP4ʇ $%.-P2}i:#>+Q ZH8&@"0$:3D4c>(""JB@`&ˆ.0"F!n$4bF3C9>"4q$-4:9)첰"%I(" ;4VXR'BozHg`B43CBni l|97#aq̸~w@E*!..A\7wCr, š6N1~/!F"BR$, 7窆^kgE, >^/3+Gt1O: 2") Dqʆ|CB,b}r%39Sn V(04` 58B5Ix"J(/ 2{w“;` +^99A3!B#:|IHOJ)B }K%KEbFNf9`#[LClvF C><,VF*z#P|(}9"^b+Ʀ3S?葵U>jr$i`BBCG.v"(."cI/ %c:6NtEI# z!8oX)Bt#vӪD˕1h?-zr) ,De%]!1C6%3j,,.l#eN"!H>U9 ˂"v(.`bو\L-`-H#-kp$.j%0?qzPꢅ6 (D$Q(э,B)b>j(b1\HNb^!-Bb%(>r "\" H 8$"Ƨ^rA@5@a*֥2wO!^ˆhNl@@V."'9)C,%7š4 +B }x(b%"@ɮ",] |$|%#Ib)C$6tnZ(b_F"0bT(x>U9X9#Z(- X4L#4!4#t(¯D b9  Kp_vhd:N#N!3%.#"XPUH˂6.!"N4}A>35"#`'ʌyi"h./d\$piF8i@9%(dN$Yjb)0`B8sRPNTDhX 210c4-倛$.9,`BT)(9)T/#%$2#0[!.2|dr\6ÒфYB meVR"s648,R)g)C(|o JLاs$BC"@&q|,Nt@1QU#00`Be1iT%Vcj"9CF*@q$`"">9X@A~j}vk"ɮcHbne\dgDl!GO$2LI gf}OX,O" AA6$7HIbJ(IԒ4[bb7~L`t P@,)i%:%7)$,Ba auРb9Nc.9[b5O=$56yxQ=$`CZS"0 qT!9̣)DUOdT}c>~` р:;Z/B4(|/o4B[(y,"Tyt/\ bTWy",cH5 3ѦU,Iڶ"Kw N>Bk# "SVUY4+$n#\>,cd++zt-"킂4+%EH .[)#B9BN*F9S-չ9+%  bxk\`Do1 B"Qcs$hH"ĺ"P9"b9)cESDr= )͆#)SA$VEU")>3]B ҃@ؾ%x/REGت{q1͋Y ړA M |R3HI,"ާ!ʦN(殊(L(P*+vYpbFp,zCEf|)ORBC)Z-ӡ}u9Қ#AbX-P-b9\)\4c6*H=bc|a![BZ2%BfV0e.32ϱ2C$ڛ>?VC#rf!61rEMHA4")J"k/7O"@]2pzP@0eDk]A @`@CP ? @w /03 a{bјKC@/?@!Gقu0CD`!N~H3T~$< V~~A-i7' =/w dXK@~|=g@H^ .}VGAmk<}?Վ]|E [`@o\WWf1NQ}g:@x/2!2| hJH;~# 17'71 R"}@y& {pk{K'#)q+LC@!"ߟ {;$B*ȢpE-j R}g-}jR.(ǻ֤.~'+gɠ(#~8Ty~<~~V>6 hrJL,Z£),Ї& x(@P"ŨyGj=gtXy١1sk@y{#ihKv"([!yGv`Rq~bPۮ,Z"zG{@H *{ Ʋ+rb~Î{piv}~W1$gic,% F|mXR+K " #0L :8y3mDIT޵<(puG) 8G Aи1>@Gz)ŀ@G @G_@(XrC ? @o( '|vohp3%}Gf'E@'`k(@  R4& ?_~/҂3.d iOϧJwG:2@ }Ng}>WŬ ]p@ }}]d [⤀2Ҥж 27g|iC¬M` ( }D1,CB84@ '6ȼ@)`gs'/`$@>2V ei~|g&s,K瀀yyF)!N{:S~@S:űnxKIz~Gm Բ:`E0(`GA s`%iWX ,  6p t#X3.Y@'4M /EE"HK1(}% lbEI>cY 0&AJM04؍Hb" Q/ #a!YhDiq+, w0ǒ "́_9Qa B #j"k FU!,?BƜFϤ4?@R՚m]'Fpˉ2xA06w:80 $B#@[d>,XsV ,s?A_4 :0Ü+?MQ r!Y1#6I@|x:DZC{ǷyN;@`<ّKZT}PQ%Gc}u@q^(0%H[+Mwwb A($pI(U]qB%BA%=> 6BXG&B2drJInyn H |騢juED X͍,#A،n/ C&z#(sv=}gD>V(`&">f~*C;"JZiHD9d^ӣ>jhGrl"PA!H_d@!!2DBT-+FJ=ŤsS@!FHjCB6BCE(8c"GAOp$^/'N)cH4:,1Fs"YP6.$w0:c"Ɣ)7g6"H|Jup?"DT>)PaICAJEh"XCBIn(D,Fc3 ("^Cl#$9.t$/ENnrA@{a;jlJBL+Jt9Z:8::`J>%eVG\0/O1N4B~V/BrPa`f(.08h\((]#DC#N.46D)2:I.È"C܄N( 3$/N:..dȯHP\`0&b6Jc*:Ŕ60?HSB#EgBYG,cAIg,ZL$&2($K-r{ FG<2YbYNF4H83Xx`"Nbhrø2a>|m@ @eFƔM.& G$D % T((O(/.B` `Cn%Bg8C*ȱbB-)`{*G&%F(-e)NQ) >4"xa#6@f#Oha @Ǯ,+2`F%)Ej,B $5A(F*'4.!u!#Ro(f0JXfw Y b$Mb1"4J-$ B8$4LsІj I =a#0VC*b@r+t(H!Y&V0Nάr $P W$&"(JGd!l.h읢 2d <D!K$,2dMS46 `($7cN{B*uD.~˜kw&c@$)&w"/^ct.`"Xl,ELgd:F}@RD2#3@X6F=.4$*h:H8aA`3mT1Jb.#l9e8H": FF $bB3"z}B9>>Ŗ1F4,*Rbl44(VdtBbcqH&VN4L>72N>.$2|{&H\a%>L܁R|@Eo0h].E%'2xdX bWJAbY':H EddsCx#(9LUcK@4@kE;g}Kwfb^'B)>>/#ܓaE@1hD4b~RP@eX~+x.fk0:{ &|-,p$txING0($48c@$SzAP'7@7d "ӛIY,O[j|o'8..4X"u~G#6a7`&tI Oh,@(|m~_ |?A/}AtϗN~@P h`^ CB@4&xxDC~>sh?_3hwޠ@C惣z -y~qgJ{hY򕀧$} R |}g*ȀJ2G1)#'z GD2< q1̖# Lz/G۪ *X>J)'K|)$b'  A S$`zGXy-'gD` ~31n#1QgсZ @*`GugBy٧c ,J4>i;)agI˄ɘ>\&xGЀtj,렊Ug:v4"I{4l' & @ ~K 5jŀz251hlyb`j ǶP{+5Vl ,۠` d,4}nJz@%|t *-'i@ AP "/,8 (%a<2u>_0@rQ}xB.84 AXzgc2zQP p( 7 }= 80 |Pg'y5-C?8P +r}P_0XFCb@-n}/Lz@@p?G}C /@F!)P CjG|@ !z  /L4-`wCi3:~Ns!+:ǀS'tٟ !G '%Ҩ1h;~}Py⁀ Sy@"QGîz` }4)|F`Z D#GQ{)B;B~( )yIB.1ri'I0m0$+`A缀Q`$*IG-A/N|' (1B(O0S*5CK Q0:X(f(H  bߑ Hc iH!!)p~A(xu0>5 d胊 @聛0_NC:1H~`]Q+b0CN)(FЃEYвVC[ fNE>mQY:1",OC0 QYm,<|m(1YlɏZ@}bPH2"9"ZzB郞=ъ8fʣ=DȄ.<bN1e3)5eDY;vQHK=Gz)CĻR4@DrD) v[ay >µ0,3N\D(G ÊP18c?D .@@Ad.k)|;Y @( {;qAd F`Q,1=Af{Q= N@8y<R}{/\:I}`G:`*Fa| qbRRcU&:aCO,2|}uJ-=6Н:?SNV 6arZM$ihE0xZ D9QPԯ0o`Ή 5$IGaM"1CǕl\yfx⒠!qMCX)6OH8Tb>D*pa8 㜐侍 6? JC(22gH*eɇI֒KD1 O 1Ĵ :i).zǞz~e4xcmL9&>0nQhclJ+TwH !чPdǖ1kڢT,>,l;oD!#> zfsh3NS?ƜacĘh(:Jd@C)h H"D(( ` Q8/%DgPåJ(I~P9bQeEa3C-#H@ aerB8) .!$T&@`(l+v$J_$48d2U/gj`(Ff)Aeh"d`> ( '%x>8H(%#B(DJF(B±!fBVHUAP_aBG/N#?@_& YCuH QDj@c9l@D1Ʀ7LAÒW&ab@a!(4'+"P}!x4 .F`"@8 6"*4(Ê>7lbh:G~*d$jbޠ9h_(C"# Nhl#1h: Mf.~8!i. ]l/f>.EcBzuCB(NP*01BP:8B"⬐fAf|g1B"D.ih("._l$%($C@TPtcR``줘-"avǢ("NN#I**C+DA>7B.<28jo)($uF,9h~{NΏnEBTmv!aqaz"R~c&mȬ!W#ĊaoBbJKbM:bZR@A9)B PUf@n_]zA?0|":+7,Pd4"t?Ac3~TXdF,)@"#4l@f7$I|!**DhEZ:%pA`.@f8ervQ$ bH bLX($LvP.kƭ@%#oX~ A.SAj?R=d/a./҉ʌ0>N;D,Vi8RC!"]@#>pU% bcaZ(Ubu$-) ""N%dJ1xj ,fgp3]Ê郄 !J%<%mDN3U1,M~.4Uh0.C~.s#nO !h. q'uBzVB& !bzDY Tl @AKH2$'|ʄ1\U bۂFd $`I,h.%2l0b6"'9Æ R0'l`F"$%bPTb A/:T Qʬ?JBBC0vQE9R*1j!"T!5tJ=c8~Kh<=*%">#kYF4!L<?*J-; (XnOp<#+ae2N {CTD0h a#B/v blNK|. "CGXHgaBV4% Dn߉ZDn%cA_c]D:|q:8TbwQb0J1q5:"‚x8I \c9lC8YN@w"4\B y&9*DDB !./TB~CwJ@Rk@$H#BkT"*0eFQL6t$2"XcNZQ"/,fh"vl6Gf+Ii!Xb"BH@4뺃E z4 *"b Fj$giC!dHm 8 @& +2!NGdZA@B1nh8 U)"]hgV[vwlNPxb>!y:Cƌ#)bIUCxAâ|` 9jef%a;d4~<RJ b@hPƸ703CcBE%cI"]AT91((7#8p%'3.tԇ$/%d (Bz71Ʉn*D2D%Z$D"HnΕC A<Ŕ46BZ#w~|^,9 .]Y2IbPAOBOVb?Ei db'oc(_ 3 [f`aBSX cdW`3 }f[4<0V4`4\D,£2L4/ZH("0~ZBn"u2, `>㍁lO-|~A>퍒A2 g&^EBB~c 0(B@BRg1"LMD"{*Ή C`>%ZPDӑdb,:C!-޳F\tBNbv'2r)CF$xy6^@Bo$(E'T#>A`p DAЃ-00C2@<  `$CP)1)If.>!%g)rܻ%j){飜a#8iRc,CH jbXSEdV%6F!RQF/^4D-eD< ](e) jPہ".]hCD"Nx V<3R  @ Obw0#  @'*|_ܝ._@;> }GŅb/)`PQ}*@W|g '#G @j|D 9^ %u`e og?`p  x0h}@HV3eFʆr>Ox8H @II'0g 䄞+Ȳt CN ;:6c~,H:@% 쓵|[B+8  (xi%j X"xħz/x 0/ <z@Ǜ'3~P̧|@C 3@P{ #|Y娑Ӗ+ 0E" E.&,ɢ(R- "n(zYc0Ǹ+0z'<`#0ZS"&MKN}I/`ә]c9kRy Zt`ji*u"B @ ? A8 Ѹ>@ 8<7'.Ǔ #o4.(Og|+юy`P`4 P,zO<'@0 @ X0|O% )?0.4?_|@_mD39^@ fu;H^ `ׂPn+|pH 쁁H,|평G9Ѐ|&>q Jz21C\ԟG{HÚ`@H{g}#{ٟK|z4|.K~g(A@ Gs:3~ \V|D`.|+Asbl }*4xs5@!+$ǹ''B>1ԞHtQ(* {{݀@,oIHXa|A򑟑zRMxL6ny1`S5^Gw`MT~K=d֐ / 88Оuр->ρozoA.X0-祎 1!?ӟNK6;Xk c:bIY;~ѐ.%z4K}ÔfGN p y|MRq< k>M2.@ z.cTG|QyF%eqOK:- tJ q9 1 $}ѶzVMqp{(/gzGwJ@zhRF= DBAH)"P>`QIȏcN@HvVfYkr?S(|G`p?_!1*3@`,Cp V*`sDjO!􂙥bh >&*zK=5$sgH{1Jt9t;fDBfR@:p䈝\Q@C,g0]8$d:ireС))z X+,zVF˅qF-Ўxr@97!caOHB !4Y q1$y@*Fvwב=: aJ1 d퀒l!"鑜Hx@&7<~J03=7} 8Y4Ebk3 N8&t TjɈCy=@k ܣG{#*h6$C@u1=1HU| ӣ9k. bc!' Aޑɋ6t6+,2@45O&'yiw" `ya(r-%-̢pK%2#zGPMx-!;#p=lP?g ]UT1JRm.1 E])*۞ԃYm`yž 3L?2q"8mL{l0WZYsht {{=+3k@>9q%'"iڗ-(]G|8Y($*2 ;b~eƂ 0b:ÃB>K;Gc'  Ӱv#m-8`U9@VFMi֛OVv<}B`!8A=AEf:2)N!%!2AAQf#p AEŹeC f(qJb9x'$I;4dgȡ=WE{%0t Hd $MX 92Ӷ$ d4תf FCkm4&te^'&`Gt PNQv zU`2bq%*HیDӐ+vCP= ~J2r,|Rz?"Zle )x/U탗R4}og8,ϻAvZCp G~IS8=G/ڛP@M46>@V<,ww+OAzYU6j/bG2.p!Bi80@ eZ!01 ș?jŢ@ͻ6tJ+D캘@rt ŅcՒ0W$(B$oFN/H`,0cgVle1caN%F|+xfI" DI Ya(DP&\vf/Bx0 OIp.#\,^Ld -!i FI@%nӎSy,_E4Ό@ ȈUV^?OIj0{2ha >%@ A,D̦hN( ` aag(Ŕ12j @!rhb'@V+0~?C\P0U"n1QJ ʸ0AvƊ &To&/c3*D.c ȶ6Ẓ @n `H^I $€BG2=Kd="b7QHL! Q@/ hpL; "#@50'9IA f h(-G#`xE6v:6= !? 8#b6d"fT$>M!hBH7#\|.þ!'h.ŒML) (/.!!|%Ȍ\#Bj}(zDKO8v"%`u-"e"Ɯper΢E;d2k$b k#4sxIT$B};Ԏ+FGB"''2C@4C@WD&N VDV!nRY$.0,%~A&z#(N\'T2,  `E3 FĈ7"i*C|tt+lCc.dbNh#l" 36Ls#L -Ġ/")<n.!1df` Pjd1@ /}EeZZdZtgf$riIUtgpDh\v7[ ^%&B\"$$d:vcG9þ-LFo~'^#60-(beZLNH*אNFb% e=0D~LBd#֦B'Djdnx49.$(ڭ9-&*#B 4uʰÞ@c\}p[2/O8`1;tr$0H0.$"hYc3ԔY"hژ(F˙F#8(D(f/@/0#sx"">FfF@!yXɮ"!n$L["9d/dz2z;p4)\y%<l쀑f|C8.eưlh#[%C=.s: 25 !OCDI:.긳D-*y$0CQ Έ ND9q[FVfh54cԟH 0L-pQx)#b%BRЉfxsbcⶂ'$Z AągbѻF*/&^NB AHXhxXG;,4C4PX06z:̢ ,8cp[Ŗl@fUĊ"&P!?IHeF>X'f*9;4-O76"Nd*߬rO$rk#@,xpYh ;hb:)<ĊM'[@H 0|q"I$8BnLA!@B$4789D˃Wb*1)pD>C:4d? h"7`/hge򯨚h&Œ$ 4Un+f35< w?@ ` >P3~>ϧ@@ >߯}ϰ z0X5 `@h>a/hC 4ph/ǀ '^+ tJp Al+aO '| H0? |O~p[c{Ep@, >{74B @?'}\Dm0 ~G~~ @S,g )h#@Gzp|*󀭸 >ҪJ.h@d0| r"v%|$p,a}zʲ|'9g"l|H{qY֩O'EBEsRՁ(9잟G@9HL,CGLAz&:)|Q@{@hz}qޡiB (@jE+& ;B) -|G('"A!7y@ v9ͧLkT:"m!yߐQ܅Ҝ~)lT'&|闞g=HH4AP7e, \Ӫ- #'yqm|f @ h8 / &hX }>w#:UB˵>OWt| `7 |=(<Ah$dJ5>]AtZ FV@CHh~@` }Ѱ!:X~O$W?t h#'}_g p_W /yad($ >G€ H}5hj~#G'`H&0)!y&t zGZ#,.KX )Ly&ްl@,&$`` mxg|"@H KX 8~0Ё Qg~Lp)}6h Hy'}`Z)'n i@ PM љӭ1~ LiG|MH }@Rzꑁp"2g 1۝iC~Au_:ט "l*BG )a'ǀ)@I` @}C", *#̭H8NQ B:$l`ZH4};ӰY }gڊ tlË9 Ȳ N.('}gR:a' @X<(Iс:Tf&|5qVK [pJ;,zg8 H%yzFcp~G@xOgx~ z_gy``ܡ2j p jY#D@J5KwVZYzceaǸox.Լfx/ ֑HZa%༑"Fߺso~Ԏ!dX2>rO.Ns,o,2RSxJaż In@$fGIQˣ4Qgq2ҡ RdH{s ZˆSm2PKw:E@VZp'+Zx*eGѩ*)d̰)ox}|h :ޯ"V3AܞsB0 Z,VKvY.jzЙ@ 3|J%,IItI~. #$X\^Ձz\Rx#Ć坳#F;GFz+anTp.]`Xi$h)>}S0j~rRDvrM+bL~=`N4'1@}!Ǐe#e1`Z?'@ e>b`J$ y*;RuZ PLAJǕ׺RFY KH;Ǡl#4ȰqeD %#yAj $`T YM?xn?%xӔs|&Elx={0z0D~P ^c}SW*j,2+=S.b zdE!HN/HGn{U_AHq7X u" "@@X\uێ R) wESј,椷e=OW}??T)"8 @()A%V] d6i@.` A)d:Ȇ6܃#̳B!+XXE5pjBEN$:vpCO`͚gȊC#!,9Av? b~!BE&nB7%Āl`b)d~}&`&_Edlb6Ll^A?#fXf$d! p>C)-*bo -~6>&2L8L!0B8Ir3dB˶@(#J!Y&d$dB!FS*J һ#`"** $0A27.n@#pVgviLK2C$0bz!h2B"ĭ2cD4 !$9A"#0bCw68AAB` (𐽏]9CB ,OD"İd,LU„]""&r</>!>\"B8E F3*Ltep#NbODKA q:.(4,'GeLAR+k: j1K =#F%DON]V,? LhGC2!D 6!C<7-7VWaCZ[B-uo%#2S"#':C(Vj͢nBB!B4bg!%٦:C4zw2)D$Pk=b#ZI/N$"$"9ixOD9"J \ &F>1b:DJm K<)jLƘPJeTc1( jH=/`b`NHS[8SkZTޡ%<`*N2_tFiDb2TL2C"I,2[!D`ng)b6p"~3D ]a3%%b& ")xG-&Wp M)Aޜ$N()B79a'@nL"h 7N9t65b4&$.Dji.f2L4:DFiFcx7b/cQ82iN)-VD<)ct1\:z,:R!8Z.bcx(qh-!b@)oB@B}I7T*H eL6 5d4A#N,)w.-zV\ Dl:b-@?,M!C5cn*%%:esd P"$Hd-r D-5Ys9v@$ s3vA&r {2DCy:D`  pG8@BL`A'6 pi|OK`2 T~@)2)5M'ܧaA3Gb,x)p(#.2V]bs7aʃxDOcL6$Fd$ Rn3,rQ&?O[g`f(,#׃NDgJC$Ft'>x;b!&4c DH";r ZBxJ-J4ei @;a#vp"H=a,B|n#*,$4\ %c t=A~?{`/oi~@va[@ 88zO_<݀@3Dʽ};'ڤʪ,*~@;B% bʹk3}@0 8{Iz1ǒ @|rK~%rn̫1d;~= )q| (ྀth,xG+NGv9}`S,l|q`(Gg2qyھ`*w4$@9|n .gQ{Qg*G`H`N BPii I2(&y|r|"ׁt}%-5emBA*`+#jǡɚ2CG^ʋ8p8 x|IYEGH~@ t~]}Ò{|E@Zf5t}QX  %8XGPF!,/Ϥsp €#Gq鎞0`Jv~ȴ˺ȂǑ Z+ J3*:}y9ӎ~.>+)#ÛQG,c6Gm  P8B@$0} `+ _Gӭ&0Ex/O@D/}.3 `$/+O`0 e Pd<  f=߯@IhзϹH 3/1@h]@p  0x>>FT~Ep> +? >OD@I{0o )G,lh2}"L˦~ @+0,<~iC(`X |MYG} @ g{ҁI!4q z! 'DDz {1{Kkb@@*( Y|(h%m:t`Hg|xF8G9yS{ԙΕ ;Igqw5|d}c&wTnG ryW\;.(}S}8+H;~4Ծ J 8F`ZGFo ~1 15/+26`38KP=W2[⃁Glj|gQX}L`zggX0z yʬd2g'L˦}Dǻ 6̡x ;6aroGp( ?oîGG }gK  L J(|kjR1ֺ@J ׁ dJQ3ՄQ*V\?ǘ}҈pŠRK68Ae(Hcxf(p(q<Ƹ<4BY7m"#d (x.9 7D =LAeO!5d醀Yzacxi*L` pzI B۷r&bf@ %q TG`,)u<eP A$92H+5*@Rd *$I>QH3~jqQD6Е5b=G YBY\DS6fd&#E) 2-UH@0 6Cz2BR,,1R&pabB 9W CANikaX18EGtL'¤aNңp34C t=^&GO^0mQiH3 | X8P @Z@8 Ȟ'r;l~h"C)b!B;.` M p xZ[e~;0@:7vGɳK\d %⒢Pᖦ+s0ӶP*W-g >i2oKt9 ӀHp`IU \s3%]EŐ`UEs1uls;%vm :txpɈe{v F%V*2 IViV(R & *!昃fNO<6#E6:d:)V/@ KiK.0~%$lT@& \`#@&'5AeBnt1HtfD@ ZDp=DW%@$cH$zpA=@ŠI&6<܄>$$/f0-@X`**@"bav/JG'BmlLl"p?Ú"&BB(eT;஄0x(2"4ld|G8zyL.&DC`:dXp0'^cZGD('"?tܤ`y $32&9/jAI)C+;b2(a.,%#=`pBOAŠshB0K|JC"@phBTDE,Z1ƌAbv͂Ljqu8ÆiVI M~F~NRJ'I8OB9)dxV,IV^8bL"Lu(#,&i%jأ M !Gid( d b"6`| F'G|BbA HA@Ppa288g!J 5%RN1g%I$I! ঃfCP348@' "Uk~;"uB(؃<\HR C"TmIŠQE IB,C88+mBFb:KŽ60l*IE"w-1C)$,d+@SF7զvpb+06brQ(!r J(QDL-$k wBF%(ީ@{t;h 6DC p1J;,2_^vUK>54,/>6npp"'8v.`OKN[F*,A!dL JC6i(!8C|(2RC"B@`(t,#d(`d@PoDDk5dxJLtr(H:h.9>(:+-#\ jB@H(B$z/w Ι!a.^=D=2!O)(9(UO/!ԁ,+KiWDH*0Qtgp\la( ֳdQc' *Z$w̮K`.mz0%PL+`6!W:w5j(z_n/cn$,:5&~^Z7w$~vD(Aad`s.J̓uJ%:2i6)Eb(q̃d#!Ԉ3"4,J[#2 74z;aIk|2yX4Kt56A'a&,Dj(/'Cya%8ƾl/b~:vbL(#8'xw`B(xHPeDCFbku]‡bC.#QKl*R!:Da5zJJ$}z:"v'd@|Wzr!([ Z &lg$D@ (60.$o"4Z0GF)r3Q2 5+ZUFÈ׈,fPz/eGgp 8 ^ 0B.Rc2+ok$(;q3,wnmD1a .z #q APw~b@ 8 P ?߯ &{=7@a|us}mc* ?8р `( F}?o0 }O D9}_XHO )oT Hb@0lǁ@qG[-H'{fux Z``=3|۱ @CwwՁ@`<xg-#1,~1γ˙΀'V|#.z@C`*ϟOQ"5àHH9l<}괸|9 w|([;@>-ޕG‹m5GXCh}.ܮd({>ܔtƳXeXϞz'AV n(|eWNjPi6$n̨,~-h5L8KM.N[|!ktdģ_#;P !J ː0,?wWaZ }&^> P8$A ?o9@p$~A/t?Dܘ# :/p? IAP<xD g:\@5X{apn| XaX_@ L?d/N^a~? @.BL{o0w `@ @$@`V_  pKasp _`C= ?ic@|3@pA ӊ') x9}'' h r{"g>}| 눝H }H\z 빰zgHx@! ~1޲Έ}\9i'qiyg!竐QX$'|.)5 ?- +.3g0ȹB`3^ȢH+M J,j~'vl ~@pW,r+t-X …~I)9}((3L1ū,. Vg/ j{ 1yC<YA8n-Y rs'WYr!d84p̰y:p[ @h{@iyǩt) qΊ$3[v~70&W G=sy+IW1&GpnG&@\Y4:{4h.buJ<.8{={䓿BRL9ܽ/x']\[)K%T=^{<U@!k>)WAa P|3CB<u ^3s65 ހMZ+ &!@x1 <<@8Y.Ip#!w~~=`J #Xaqh6CT@C i 0eXS` `E俀°N)!1-\eZfAdLaNCMiLj]2@    @`qK 5M98G`>6ec+7k+@$m4Ə<rd ;dB5ng c5@@ .#FjҌ"@ $טk`D= @\>HPDdM2 "e} ?#l:bE1C*|'_n^]Qa[pBLrKLq 4S?L Iw$ 0#dpL Ȁ!XSTExՅ8E(uc{䨎/|F#GC2B>d-@$zE E;B;8Ok k!\<kPz H!CzcMߡb@2ҹ0* ( h}f ;(岨1e,(<02(q=2hsK 97,DBj>,,%[rTC"Cwa'D;3G!Yd~ƒX1KZ@6B_6Z>w&0'K` ( N&l`5EЭb|?Q])~@&Lie(\reXO4_L8:#@MߘE-G`B{?9\j'o&C֬ll;p(cb k:ǀFȶJw)9iYv A8ŕI諕:8*%bX N9/!-&`Vm[4PK0L(̤ef5'/bv>g.lX65DV9KvL ,E0cs LA\iO+>8 >Jj@9k"'eA@-@b!,G1L # '.`'8P5I2$b9B懞5I-FvˮGE0`N"+0p. E1gWA6EK:yCclbLIT23I~O 1 2L'f1ҳ/@tMOI."08F B|D˔#` @*ֺ3TRЏă^3`%K#ShK>(Yi`^&R:v,PA5j$Cn,!mZ$.Fh#Sb6`3+a`l 8G2b ./и+`FE`"4 x !rA4,Bѣ5"iTDd;cDF7: >c`$X+LW*Ys₃ 40EBFހU r`J6efr2;cjC8ú&O'pJ 5tT"24-3Q!DudSd\Ŭ>BB!9@kU@ZD+/e9 DH%"F1' BBTJ1"(+J~'640-I>-x*u5?JcbIp^$ 7[%cPc 4T .$'!#AhETBE,ղ?mGb9 C.'#(m#̀6A!؀@j8K37O (&J0(DꊁAp ,ABZd] H5nDBN0U'k\/l,I,uVcϴ!Eǔ"eE`L*J;R6b" .0;\$d"fd~"ЮBWVm$nd=8@ e˒ETTn,ㆌ^L.[ ~d$cEhW$41<6e2ރܮ3"Vg"ErU8Xw &ԕ/PpEt#!߫Yi B D 6ZbNgLF3D 2^܀2KKB渣!AAc =C5'CA+D>"8bse_<83bl( %]d#d /59 $}D1w94(%e8~`;úMnh.7"#WJ5գ(&"jC2f;$t(6$`\`.`^x;H$>gA ^C^M-(I`a"xM CZ"jEbS"!Jskw:JdOi8Dvin O(Eɩw&>6Id$ 1Ig ~d@R]-U، LEu`&Zy1j3@\ +~ԐH2"Nej# ?C-nG Km Lfyq I\4D^#`qtrZZv8TP`aҁ$ya(I#@h5"" 2%#@d- ` 4uMgc2 @&[`0@Er&A&as@"-wL!d9>bU&0_ >O3@0'MDZXF#tbtȈ+dșDg.L"3If@\I4]"C/6"o/ V`>'&f6sV OLf?+n~.-|nZn'wv"iü86$\<|=4/GwtE";8c[~ nUiC>7cK9Q,J$搦^8P8r^+ƨCA&6k;05"8*ځڼC4Z.cm#3n ZFㄢ@9=l69Ѡh)V"B O2*ZrecO'{7NUH^H"6"0ӐoD B"` *  (TBI`rNEDx|h)qP28DMDu Bv Uň 2Y-nTuT,0O|HM㬙oH<!#^BA-c]%$f`+!dSc2@Z"%JJ7C4+cBfS&n:6\ &bc$ C# #jho&+n 28莂bӊwdFwi%@ 0~m9ccx^N+t/`=Z'bE*"q4@S {jACYA<'o&-.GjfO";D4A!Z,(O:*@W2FAJk`,IOa@4 8`"/C@ND& >6 .A^ wC ;BC_~@1hdd @ Ow' |_10(@ H !%=_7`hO]+@ I u> . ?_2P) e/x0, Z%dz}F29.l }g^?_T~|K@ v1zĀApD>$χO?6Y+ *(ɒޏ1' Iyvx@ &#Ƒ H$0~j6}T'Gx'AeѼ|櫡2+(B !m &!z#*L~HҰa~A+\;>ĩ*{ 0ECܢ\*"#iEӬP2~cޣY~-{S :eK'.~`p` `H\Kf x|RL7'Y@6pgzgԝ@9{F`&'yy:`$ n}PIܫ|lpuǙؑT1{`vgzX^߀ J"~ +$FuҘ {Q`z*Dz2 Nry_*5 j^rTTڹ +)Tq,G}Qcq`T'z}S R'2WB-HB؀ Guc|*\!( } Ӛq.x!@mN}GtG%h{/InG  @8+   /  x4}orЖ$ ϰf4 Cb@"w? Z9ހM`- }'[o@+:7rEַb) } GG8 n8|g`X_Xk`03.`~h8T " " E}?7۽}> 0_\f P!"'~1SN-"LX .GΉ -AM8*A.hHC(Tj7( p@ @lp } )!*E@$&`Kr}@{D,$d} 䟟"2}(2hiO8h@QymhGˠУl> h !qχA ˈ|5@=",Ȁ(~2$21]Э2&Oz0"l ֟]y<- c@{#`` (v   ֟'{G&# ,0 |9`M ̏^ziL{8|Ax||iE|}q͐Ƞ38t@A()|30*5L4 CZ`L9Ti m]QSa &,aDƤ=,d r]* h%\$^0c@{19 xDGXC%qZ 8 p:%a9t5,>p̞>PKŵ Bc0Z""` kh#$7 7|}L|#21,@˖jdySi**:gz!"_ l"]̾bL{%R= 'Z?݉- kN0fLNT'i@Z[Z,'8TY.C4 u9@HH9^((|Dc]pG"B%c6 n8͓$7{=( nv3bIJ3`Xp">gGL(,bCyg%P}8h( xbi}dCx9s0 g:<`Xp3Pn0X @4"G 9*8A!d6^Hly$<}( H@(&2:1Q%ϟ1SGyyP?@P Eڔ"\<2 pZVݤw* d0`}bVϖ) AϜXM'Z#., HTMR`A>(sa4#^QV$<$ 9@823n!GICs; o^l ]4f1 DdLI-0,e !ּ ]&zfnx4:@t)a;` 4|o@؞R]q!D&GGG!ș!|2"i؏q@M& ;'2>` p$>px f:Gh  Lzߓ7 (R̡~ ] RmN#F؇,(uZVBAgӄh# p#dhݡ4 bko;Ѿ"e1*okI BԻ&/x~i%`shˉ$-c{g "O5%K"(hA46f.Q X囟9 b̝.H{"@ y=tAB,{8G|mAKe9gWYyj ?Sc/>Ed9P3 P]yD pC-ED"$4D:ԃn@ P7EhsLALLbcTLǼf,d# '\֪Vl&Ge tiP#CNӅBN) e'%a a<#0; (+H+(K& (!B'C^r $CT#^A` ",/#έ@.!`" d,0|=4ʦ$"Bh6{dl .d!EA?ej x}%0s$iHO"v1R,d|i6BMD,"3]8#$D# ]7d.: c0i 9z4#"$I&rb~!mN$lFIB-b,ZLSD4zj(0t(Ds&J@s.s "Ԁ<-AlTniPFO|0jLt=# L|"|AcfJô6.<~@AA@&B6Ħ(=$k2—B g'|r=Ld9Aτ8D @AAi4bz4{CAV!ؑmŊ#Bs` 2:@"AbZF&&.R`<cL!cc!. HC2+b(YNvY243p" 0a ÌA*Mgtx(c~"-bb {^@^ މo#2"OmsHP9"z,.-p|-N/NrK&,4dW8G8Af> #22E[km^m68j3ADD %"fC .'{c(`k:i!3NFmhUЀR:od|YC|< B|:d"5j #bh2V@W'<$iEB'(Ҏ!82 e|LC;xbg p'@ f `Fa.bR,@0\n ʼ"M"OWNnC2B6dAe|I&r`$$@a@hfOeXc4.C{:YtH#2˂cb(b B!aF8> ZLZ'Ǩv"!K, JHoꡤO&e&gZZ- d >Am#xp`*K@3-8!Ab!.!5#"..B'|2ds)%dx/hr7r?bzAg"3q* U - /|4#B*ZdX (g"I2LhqG("xC5h@ |67j(;EcWF h,r M .7ĎgF~G1ChX*DG637N2(^(j-4,"{C,./|="K3?rI,fCbOo".h$BPofL=>`f&Zs.pa `Z">1Bg3Jjʃn=1MIh,BL`2$Ce 'p&n@$D&e4HG>">J#s,du @l`"A7~0HH?߀=^' x!0C`}g@OC ';x?u0(!C{E'`_9Lx  á$`M}S(~pXP2"E~8V.J0 @ 4PHQ_@;|F @(Tx?g8ϟ<7@!}VCRa֞} Md*\8 3$?{ x!`I$ NpJD`!~!چ@|*Tz+ZKGz'n0 3`Z4$F SzʒKl{(RJt|誇ưbX|+'LcC@(\ltu!|0:I@H  H",rc*`p}̏bh1y"[J!0>p}Zb}g~{aP|SpJ(M2Q{E@``&ňj}@s1+`%H@ʀ d8 'NzAg h>{gZG!@V˙zXڣL##-3BPGJ&X8~h̙G* ?h AdUQH @Ba ~?`h0?@ |_R(hdDow `'${ap2,oГʲ}V$,{ W2?~01A@p8(|?ON}>W@`0 5~ޱg0 ǀi*K!G|2~v/v~ D o{Ϡ(`V( 1pq~wc#d@|,K,~ 0@@̟h$ X g80g?Й{ d,j Hт"}M߮(z܈"S*z}` L~"3qhPx!!1- 6' R"g'q ?`9I38 +z؁xU'uxD}@};(ziˎ8/hS@@jy'(P$X {6QM >Ÿi!0"gi g'G`:t'`EǔPwX-z` t`p)A8πSV.0g{42QPL[) . (uyf~:% {8`c^bG|G,y2kkC j!;r~/$}VcZ"J<Lyr-x,F}ZvLbP ;1 l}GKx,wҶ|yNr:ӌnoS mn:aa]]DPcK("D pS@zI1ɴw<9p *:EImDYb<X '*\>G@ 0@5]_ ( X X|:Ũ&Gc$ШYd'8DH#h-g"",ry D4gLA {b " G7HLU0Ḭ̓APYcDE?\rhdYOW(G 2khH)9)cָ&u&x j X CX$DK.,s+p@ ~@c{!~<)Ee!!grcjG{㹫` % E]$' F'%N$S0 @E)Xt][ gEg@X,&FVa$.?@9QD`єGhf:]E8N:riSyUɧ` Aa֚I%?}-D9r8%lt&DN*?,r2Yl/tЙC,Q$h#}OD>^$>&P=P1 ~|'YcKzUyk& pi4xpþhpk˲1.`N#1) 'ʡ'2#;Gbϗ@4e:sؐ$6IsӜ@Ks,6`Ljd,Y |`–Ax?GɘH\CnlE؊T͌=2 !"WtySCs*3 @h R@1|-0&$aB{t;4\!ˡ:ݡc塘uT8%!m.l#v"PrPfUiڋ%buL#1X*nD&0,z\!e AcGH Ƌ0#](<ȇą'R859zQ=.G`.cHd;$h]y?ie#&$yGZ,NDȒ ,;H)<4[Ĩ?訶#ZeY\}iȍ9ujR>jrLɠsrb("I`"Ǒx #x6dq gDnyxPD ~9cG!4zI UR萠.S22nA1@#&[,igj#, eY5AA#&1c*=b#bCE.B"NN/C#;XLO=d"B[f- z>-f$&@ncZr$bD24GD"xeNf*Ц/,'$=m [Y0S- "cdc1>?.b1"x#FY(-`b2=&7H@ SDL+ƄFx"$조DbH.$Lj#oyD >"+v`Z`+@2/M(h- ;A1"LbMG{;Б( @&hr;1nBYxXp0I+pNL'$Ƃ,Z4 o" N}6"#P#t0e42 0 $f,"1&G @6N`XgAara* " V¶=H9,+TUl3#HNbp.O)&/!SP8#"r2+ fn5VZ<.+c,=,QT'.rK3&+HN\PX!1b@.e.;C;dF7E%1dХB AHx0#ʎc&2_&4,k"[O(ѧ|Cj.K#\F=,"v2fm q#F`BS,:Ex؝C|XŔ|ʰE,dH<.dZ" ~bj)jE'z1M4J> `:$%G$Z'X24*G"KnVMD4R@60!AT&P,F,Z.D<~fFD`/:*`1}&PZ#2mTbp5I 0A0s<-q:=p: hE񀍤 *\., v;l(>#+-7*"m})q"M1Np| At#:>""~,fcbDDxO(Kz`SB.pr"wRY#^$^VՏ*7FP¸6b18ifϤ1P,|-c*W5H^2ƾcw4H'T@7<_&ÀE$H8\˂Vg(y?*n VAܦrȂ-3##~0"J1ā2c2(xHdD^.$,_"e##b,1,[7B4p;S, Z ($c*C*VL`82` b!` ϣxSBx0"R#$V"2/ V-# :-j/&t#iP&2QUH8p7 :q^'C>vPzG(+-0H4$f<'*碇ȶFf!Fz&Ѣȹ"E.y - "IE 0k'ǮyLhAkp" 'i0s ίr'ƅ~`&2{c92f2"0$$Z## SIr,,-&$\uW "-DCRFC5HdF( Ў"c>5}P2v7:N#AI*+aa CfnBp t$6JXF@1 DT#g7'i|6-/tNe 6."F"/ @40$fIXxN`}5cBa"  ~"IDf|!fA$ib-+c,|."`q.De b5h=$$zf K., 9;|2Rڡb+e.fR(2G) `"`?m2.C|"Gbʂbڬǎ{D$PCBDpvc `ԐF4'ܡFu|,Y7^*yK 'ieX67V'Re&.cB.m5%X.Ir"?5PHp::gB \ ;'Dn-@s?xkk;PDfqSi[A$ ?b.>rA PiQ~nA"Neѡ,> `(!F<@X@,@0A`6zbT ,NN96j TWnB֗,iD<23Xc79&a;'q q .C6Gp+'C0E;#2N'.~jan!kMH:6At"d({Z;`".5 5`j%kFLECjb2B5(gH.7 .#}'dH)9<-rPBQe&AV# h@EN\L&{aǾr$!X"=7cYβF)"iy6 +pPu-4H2>f:b2ob,(`B+Jg$̏ 2^PN@6]wv2&)?NVeGZA$i*G Ph`5Œ8"M2܆FN)"2\F$Eyo=Wۀ 0cF}XB10Lbϱ2&+GӉZObLL -:F<7cIxv#_aFdt LAGhHUhK7MS,TVg(c;#Le}"7Z&- *[RqQBc'gj=u`pkzY"PZnJA2k=U Z2Dd.!;=Cd4% :$bMd>f"X)f z" ?!Fmmm-@x q@hFq"aZ@"2j Fz|.p?@p%p 0p}Do o {s$ @Nϰ~`We=",J ? TdP8 Gp=^g v+A@OV? /0@Ofi @@^n;z >'b 9Qvw9 dEzo }ڈ/v,ɩǙ~.:7|OҚ< R͓8׀`3~L&gǡ~(~j( -1 3*{6 0"yzОmPŇ\DZ܏82}gv!, z-)^|}" )-B'G'Tb'lHj@.];xCp}9׃zOq7u#o/)vCx͊:Ȅ &{-ϲxX,{zc5(lBJX`0?Gѧ)9z^ y}sC jN9z*5J|m Vy3{^CxRKELcGӐgz>z4X|Gl+إ- P/ 9CjpQԭC+ǭ@m.O6C0H,ޠk=܀,@5$ ' A@hCz!X(/ܳs3G3*v$p}g`(o~ `]^?O8P ~`/` ( 2gv_, zـA[><hzd@(/8Ŀ" rZwBgoXgpA'wO+.֟}'@l2N 9|l + , ,3g[m;, 'YEpC|'3J!z~ .B~$JKLT  y/ (@d( "!E'28 EMgVS[d~!`l @1|z@9{`4dBQ2'>y`yYyѠ)(+I \E#: [ Gݮ~|3TW|-p x)X`B5(C D-n =?K,rF|9wG] K$@-QN@K{8~~m#,mF Ez# 9N90OGE"u }_,d {g8T@<$s4FbL A̠MN `X ittK:Ɂ9|€9~ǧ\*UkdOw`'zl~X ßg{d#= yx#BPv~/ՒՇ«f=2>@{gŖ|Ǟ@);XfDj& A@ A=p~J`Px%^o|YCV2``<@ ìYq/G0L z bnbaZG2$ SxY*w}e MͮgFc+{&cr;( LXacl!5rdw '{ոC}< @4o ZًA輶p@Jxd p:e"Yd N L#Er[|=X*B 辦ZER1JeI6%z#"MP GA/ 4Y\ /s*A=/ l}=Lڤ-ZEƫcyJ!FqK`2Ov>РŤKSHoaH{&NMk̠k`X\kR448 )?\stxh`rXb.]"gHJlSL9>kg vb`L9bo", WK<E\ !F9g͵yc*͡x fOlcK&M'CNܹH\#mzOsvؒyFQ\u7ŴΛ̾ˤ lIbl` gC>`@ iR` t`*!f/"ƒѨ"`e<2:y7U#BB`6KWx>FXdr#BKC/C Ul#"N+o&XdSaG"o*d'`|/x3@ƖA&j#,"8$n,vANR#r2@CBLh>磎؏1'*X" lU2$'|b8M& V,H?G>%eFd8&&d&+LeJ[;3(idAkW r1)3b46H V$ºfjPbDaA&]/$7C2en'DH&$"[& 1l(_ǞA4%>X!&A2Mvd\' LdLh"RøNh$h(! " @@4a|m0N1̯@l 0>  ap!L8,-cdƬ/䰲eZd?2!s%pJ tu/N4H0KC>,VX#R ڗvD'T-bp0\9 \kdbBB. (R+4 " ĴCD`Xd0ifC  .Z0$\QJ";9b|j0"C[e>D?PĎ/" 3MBc.-BrDJhd!['6,.;ɤ,Gw%AXc@NK"ħ". j%V4hl^{`R>v~~<aDEN! 8M7l! KV$ #W VeF7g6BJ0G=y+6-B1?kLt6 P(f$C4%':TN"|A/d:`v!B=Ԃ"hz< Hl 2`$7J:4\4=V2\+d&(,q|zfqs:f$iѬfR$zҜDB$G@22C6?L(;L/ (.nRB.0"RE.BOb$Mo (@1PLY"_( 4 aJ",%("V)cL8w#U#r#6BNv q=1C+~7B7^6l>s$TH6D3z%RVG_()@MJZN6 b0~.`DȋFg4#5C`@p`NFFhŤ2|DpD r2n_p,A%:Csi>C@)R Np`>aX`,:dZl &s#tE5V>?EK,|@7d:Ar#BAф|R2LD1:uv&{g6NX#R#H+FkđC4[Œb^02-oXd# U@!.6V^ Ddk460.$K:m6@s8l $Eb X2In9 &Cҏlm# jr$c% b!&!W"HSPG]ʢ2bJGAtċ/f+r#nNdpep.D@6#L-8MkbDdX~321@v~l2ldF5-iB0fnQR":CE( d`sT1Bbz$[Ov]C bt#pOj",J%j{aHEJkES ='R5G` *,Nt$RBv fHJ@DrTS>#T7#QE^B43ELl3zd%,"8.U„f$z1ed:f&ălf+tjbM*4$:,7 K:vbc?nQ 9f:Dh*B~/2d+I`A6Kft0&KB - 8jBX*br=6 $EnF#(uKcZzD,rvEXº^,1(2dzHIJDؖbB1ji6KvK2(WGx+\yS.".32K"5E[s&RJ'f<.M1r@p!DpaS1"nJ,"?J 7A-B,,dlcU &*{h+, " &5BlX3-@f0be~E<;0 9C& `a%ǓC:% [^f jA>VA&!eѡDS1"x3Ysnw2Q ǻ` 4}oW @ gx0$pk-j<` t_y<@ >X( z`rHoW P<|AA$pbf/X 1GDt7 v@@ } @Gz>` v`PQ:Ϯ.hk O6@|+>@6 ` |@!@ }+\CiL۞|;8Ki}q '낒u g z`A/g0}9ojamsx~H$}6`*| ) P@{ !@B"|Q掩R C`:@ #R0`9BJ8~l*<BK~՟(3{'07 b#S:ֶ||`Uʀ}bg*s@4 $ ID{"NuK5(aaG|-)MhQP6=Ǖ{{TFKihr %h򒣁r.{vh5(,vqP p=g-lP8u' ;ðs@}5ޞǐ {A7h{ I;yb'g8z< .c.~yoj SjP,Vzq>( )lyGU)ŎB'|iUgWf=mT=yKm=gaIs gvMO=F֝*97.(v$ӪU'~4ik w;HdQCE0pzr(GJ,͔<Ǡc{ЀzD}` P @OT6OH4 }/ǻq?Ԉ! >d(G pUsqA(  _/GcY 6@VHDŀ@`~>~>_0# ~?@8Ꮐ ?K ` X>6oze4@EX4族d@'΀y?+{Bz/€], g }+ ~95 x 'Ʊ`;v2 |A@R22-(L9}BG}g}I +^'~L ߟP~lqpR1+|{Ԓ0}${$+q |Ķh  }ǯ ß|ɯ躴v'V4̱m|M@ X$ @, h` * 9~, 34}`@ t_gVB.;pźKQ8Q|Pۖ# 9~3, Cz hw(g+MLsP/mc- -s= ,$ T|@:~kМ͜yVn7anG{MB*ڞo``m{+mk{Wg>ٝv(1gLQ"|eɐ1 b0 G= 6I 4He4RvGCB(ؙ>G`è|H@ =CI)ԐXAR@"%s(@@ L = > 8!xeXCB0 8Xo)q3V{%Hch484@$y^f3ih֏:aH1揣x"#$٬Kj0`M+}"8Q6j),bLyM@eI z'm$tX ;(;dF C|)2h!Y@+V:ISxMsۑFY{'dv\5tQ;6mŠoe|C(!͇`f? HTı9 ~pWTx7Jy5gmr {+Qc68 ŴU< &ƱЁ0>& }mThҚ;&p2J @ Cn9I[A>|SN; 13,hA@$ E* ʏNJ رsH(v! A|^ܭC&c ]1+4sh:h QGH`,| 1zetm=pDqo$` QǸh8޺:@ K4{a 2#>"^ 9%A:><Ȣ LZ?T&o({M8a@jiO`EQ mP{㉢ZN/!P9hxP'zW5HD'qhE.]tZ@NHI֜J<(T@#!9$ɀ@ "qXIjIThG2 saA̘|wL8ǩ!/fLnC!NL)w5Q?M%*;-H(UH=H :X%r d7Lj@wMLEaN@% gϖr=%eWbs7#lG!sOE#|O(`Z$O`DP-ㄠ7C 2)!BțJAHM:'$Pf4EP#P\^HD:[|=ܽE wK 8$tGyEҖ~?RS$LDj2_3X4j:~2X~qeM~ @;|1f?瘲-)ț2{sG=Lsa #rɘ~>>@W%dip$^ 8y~=Y!aAKA"bdC |%Rf^A.+\ޭ`梠 2\" $)3zQ4nL/?2,cZ@4_`fh.&ah ACcw`X nA!z\r r0!A@d^FduNW420TaoQ^VÜ."-z+V+ ##E46@$-(L^ˬG $"q4+C|idvm$FqKJȬgȀf/.4/-4A D6ACDm;gwN'9m$lw("4CzI 0bzcW(9#$FDz\dBn C#Ě+jJ{-T0# Q"# 3! Ò #@a (b͠!^NBh"D67 !Z@l JAg KchAG!J p`Xk0-"2S+A"AD>Dj4Fvr"&*0ȴ\M5(r#'p,Tl{L`$ʈ@P!"#$:lڲJApT/*4r0ʾr"xFNc"ܒ@>PmJD_dnKD[c#~/cCD$4΢BC8@c9b: GC`b"\wHtJ&,N0# mIo$@/6"KNIbu<~ &mS "7C.2g>K^赆eɌd4$3!6K(] O+L+L"72DY殑Bͪ!bgB(~,h"f3zXg;ZmQ` ,N২ FXVt)n8,%MD$_$PI1+nJ( cd$)<=)>1m4vFG:<&291Fj5J,IԵ<t !bŮ&ڮ6N s!&"4A ++lt`ή1Ĭ9t49c9cKX@P&$$U#!#h1 2mX6+#z/exȄfc f"5@z'j:=c"dB{:CbR|FugTГ,01+c:(ݻȴ93Sjj+KB6D/Rb-,`!4@#NmI"wtDf"И1pO<1cDQ-n"4*Ã,, >GH6L@U< y@&SET}X#hƧсopuhJ""# z0j,2`a!>A҂AQ+40t0f@&t(߂`   6`07 [l&0&l+tr1G0= 2x41lBv5,JĀ ` n:& Lr0q/B_e"~,i*B@FXg +;2'jN<20Z#nC)=f .b0$8jf\zHd|-)^4tSi*.TrLBKɂ^TtUXIaa5"0' Ӗ-hl(/)K&1IҀ G}o@OW w~@qH>_@ +^/'F;~"=O~pޏWc{A@0 `yRoaw+bX 0, AZp5{F\ﰡ @4"g~@=>^zPl pKdf\nwPH`@eV}& ? y@/x @*s~h3>)ǸH@2i!':`2!A˪RG(+HÒϹ|?' ,}+@CpR`|Чg̨GG,}ǐ1JiXaXh; LN*#rHT}Pk|=W`A{)`Ll"@ʱ搁Ide& ~* +/ʝON[|jI=Oo)gZ0(wzEYn%~iF+#Z.~Xz(-@pF j\t'㸧@I{ bvUK/I P)g9s'y(@*Pӷ&mtl0 0y~ޱ|H83 B_F2Z 8roOç5K: Wh. |Q"M#Й pIHWgK:0@i%'k8z 6 XfᰊyKsgҒGHCuGQ̺@`(6mBaP8H?ah!A`4 ?@z:_RHlG7%~09{@l$ AcVg\n</~+pKT']A`( u~_k0٫P ~ .i ޺+A(8 |OǬ` ̀00,~=OF<w!z֞`Uw|q`>@Lv`['z@GGLk*Я4Bܟ0"M  P "Pܝ `Q} LR '9,}o!@xg !㟀X- yG y9N D˫j5}=n^@+RzQO{ :{pw٠tꦝ JGDП-1 8 GЦ @l !( گǵX}и2OJyHr NHK~K,S5ǩKXHzǑz8 `Ә$BkJ ;{~ݖRެi'K| rCB111{g蓟Ɓנ&X}2Bװ4 ~6/Hz8 #W]/ H xOoʼE HoVK74[lۀk\1K<sRy}S ;:Y]DzJ@(z}s+31 wX@}7O-Zc$'`iǸ  !w >L >@9SrAyzFÙ`D (BQjC<ŐQtAH`yII'" @@  i!;p@~o!z!&,' ) @q|#P`eGi5" ̀0dxLڬB<e"idP;XO!w{Iu\ ?8B< BN h>PT#++#k&sO:8JEhЏcÙq; nz'/,d6 I2Ԝ)e>Ǣ&z)4 byB,Y> aN\x@a@s~-)*3^ϣ o0{?y&P@n7>pq$9$)ls?Ud:X"h=bjlNC&0sh Hk#x8?7@@n -X@)&Qh4oMnO2@̹>o8) <bAOy@<( ל8S헢~ ;9 pM}V-#KU9 :3`#njUL @m@!&SϕPP2'lttM*rCPYxCO79J1=H|̀ @E%DGLn^*E:e2C!W>cԟҺS8{fE@z0R")9cI(COX/-X1MqR8 xI`P/&h(~ B=. 5v=C ! Cd ?!';l`BIKFmUq&)2" a0@[w&.s ` ـF8r 3E` !mQ_G8AH=x3e nG#z) LwH*L҆8>,95[C.4Pl0 rhGSp  5t|#a0Ix=_ge䣆=T1 daIp"pp%0Pw'u%s|}?a=ЃE2?.}*-.]Q%:H٨bečR;.. @Ǝ\+A:a"@l`2̅-&ƊZ;E,{C2@ 2B4=dfSo7 &G@ 'ml|6~T#tB+5'}D;E/-f+p/DC@|+Kc62NZdlG3p<#2F-B|y-BJ91$ B $KhyL:NB0$w!H~mb2F-ҥ\cio`ޥ 2*2qHE60pd,2-uy 0hm$z{Xt2:50fvbr~@.qbaFBt. I(5 1T$`BFzK!!(FE!mڨ^hb O&VF#j"C"D r DlΆ^+B!n`L`^rA$eeZQb4GB (3C.UC* :cTN,eJ,:Cv$##,D$CR"G0dn/'T Nb]yQòf`:9.JC,>n!'`"(C"uG., 8 #G䎒 C$!aqN\R/3*}BS $C2=m*IlH }G.i/TD ̊`dp?CX5=$B3C'.ZEBo'.0e{t>? R&'5\BIN$>t.$oL.&nqebA"fE"',P42edicH>fm4K&L7 5-`.b6;9'[6c hF6Fb+¶†6Bl&XG'ּ."7;(+@ VACQH;B夺/qn4qE*G"y1~1 A po ~hbC&8@2/!7jFkAGN&O"ȩl =JR;QaMFNM%]#\$ɾ(DN$={Yfdҧ0΢<7$Nn25;{K}.k%ZDZa;璁bT'^LS mDa@ 0mN" ,=m>3Uː˃I fA"3ȴ"9 IA'|!q\ MA e"PLa ( F@`*","_b ,hP`Za!va$aeZ e"0eTKĩiZz)l:dT14:#,:i4+' @/C@~-"3|\ D /z, l6`Dle#Y#a v"պY #k-10/EĚX-f,g5CbCtg\#(h 7HP y'N}Co.3`삅F'B0@"qJ63X,d@*/Bd2C'üB '„?|b mB' 0f8&)%bDsd惡k`2 xlXH$ZJ9+ĞKJ5C*1:+D{bc@LP =#vKJɌ"8Q0ce|Prmbt$44t\;Dz'.&,òzHzD$ 2d&h,: XBψ̿4.…{+!d5 F@ P,`SsCtDte.02p Ljd`XdFBA+i..#X=fhݰ&l' oIl'cC=|KbMr'&>t VHmbr:` ZBeeưt#,5Üy3f$7DSXMH2X|.Hh2CR Jx=E*4% >^r GFGFzb`O= O(1W>@~ߐ<8}@' @+jDpgj5π ,&|_ y~yؿ@ 0 =ϐ< ЂZ /gx  Ѡ {?_8% Cտ$h䚞@@~'-}I' #V)0{t |>  6'CIȀ,;hp S l|S&;`*~;{R@ c'9|' ' [z @H o-0Q@{daE|g9 !J-hMTF>&z@H:㟦> sdEܓWvT` 4w$PH}Q@b`аCpB@3k"D=Q\|Nq@9 FY0m ?e l  \9c~:Z=EGS }Y|:`pޟYR BidBK[ )4Ff̫"e4=ш*b%! Dd=Tdp( dXKO9dYZLS҉y-}؅TaF~l? hb}WԶYMm3\> 3ɚ! 8 tmȱ$싐4v?kui*uD9gFĹ) A#V:WxѤGQ'~)m "GIJɻxJaj {`wBh'A.gtT8" т:cÕzʝ=#?`%tg@.x @iNmR M&BBWKE/]p~-|"f{ wpժR^m@? IɳPKP"΃7fڠT m9`4tCH!f CII {H#*FӀaaI8&ڬꁇA6pX}do# TPfE02 L|jHd;K{oLx5I>i}O5+@JZCMzT!Q@>25&2|Faq"Ht wƤ|dJ3 ›W{Rϡo؎>0Dp>@` x )"d1 E#Hs#L֝A9 0NG@a8: U@ dQHu .3@,v*K ە;1Y[2 /&ĖVfQ0EWixl`iM,. P`4n| 6m b@H \aar?jc\>00(85!z"0Bo~pE"|3H-JLnAf.`c!c0/Jza̠}3GI7n$-RGb,'"T';(D+ػE!*vG:C&"[./c+cS0)LǤ,'>ozL ck'l)H &*RpMdL"P|TD,BQm"7c +L5+e`y*Įb"-:-@b ~1,#_H97 ,$AB+lb't.>bX#?0=".8A#C": !c0Nc\nleJ,P$jcO%TLƘdƜgX ~`t x@0 ϔwFyAI¼L qLr)A+ @ \F9RD$+GCg-D?qj"ûfzqA4u!I*v(rC PBT0䧃:Dtm1D&7D^l9d(?EP"zuPT+C,iCo`įVH|$`a'aQ 'HAܢr"%h!4(n("21="t$ Z 2'Z'fB–aTA~]py%lA LVj&Sr#d+^0 meTzI' GC8ff0eE^$$5zn$&1dA0aHHl`^*,&xeHP$p7G # @+p8JkXNCa(/!DD wFB-X1L@!M2JhN,Nz/v(X a&,@47166H+:7F;C =c-NZ@Fcb*ч0CfYCkcL<:6FX2(ƿ٤B#pe<&#,'cTar :⑊ˉTq-Itwڕ".B'oIg$dB+$<|L$"."6(y@,gO{0NC3gz*3gfy7MF/iRRPZ!@.#xa""0!!(3SmE7Rb4(ItR *"P".|$5ZSf@ ` v78!7,<3 #חj/48$LDDPG"(edCg C5Md9*dNp#IpV|z3Rk'Mz!$7|}-'@22S~$.T"V'G0z~HCBAt^!j/Fj E'u\['ȳ|*Tt9pĎcڟD>g"b3@. &!G:cT,N/ :y&է 8 d0F'ƦEU@;NCѢpwCQBQ 0 P6M+9M-N W$ 9Ԝ2`[&2'nLa!` 4R׶{ l;HN~7 z{`D=N lt4'ixU<Gl C888um@I[Nsw@ly|q'r@ CdGިUT2* xǷ|8' =w4m:Ǐ3zK8N8~Ҫ"TPL1c|UZhs6lƱ AȉC]0$ s@ yPǼAz };ǀ )r>Gxl@@@(~@Q   %OG ăҐ6y}?`0 op.~@A`s. ֟Ϸ- P-?! L$;yӠ( _O‹G_t z[@ 8}~Y_p! {D%a ._x04 ,=O9`u;5z@g9X 8)@Q~ǹw0#Sv(  8G~|nQg^~'|#+  @ PzF !=0 |R'~\KQƟ@1􀡸#P;F1ҟ(|<H E#rPGt~hCĠ*~#4C8{@0z|G YgXu`u*8Ks~QkP}'00"G0 @91L> ğA|9Ǫ 1}m{| ;*0߀蠞#R2, yd mlHSP~*{0mf{OY+~zڄ-#~,³~@M F&qg@$Z+8`*܋VbN @,0HChȏf@ة`1j-aPZaF/s^n:=Gy/1$FX 9#{4_R8hyqkqjf$a B4FaȊC!%Gp! 6_ɲ|@ (˭ƾǘ' 9{謳Feg>Ð0@9ϐ >>`Yjܠ<I05Zd jB)brb 6zw+$AeVÒݓk` / dR,x 贝*"G "I`9F Q %wO 7f5 MRς."R UƭIP  cV8\:ɑ!=eo7G8DT*W@PcxxxC !SM%H26 QYasG@R`hvŧYO[VX8! 2<C,oGHyA~2Tx\a!9&BF{!C+dʛ!ǾqSLK\BGo*Z2,2\t"[`٣iԚC-HŞ frڡOJ?B䏈ߙ E_6 =GFF=4ZB q2J<$<Y͚ #<>x` `. B0Aw ",b4!9CF`X8ƾ RdT!^h%q@<D 0G>'zQĩ >Xc?f1l_Hβ%H5hQfQF"?#@8 JMDjv=HBvI1E6OC"5`aaɠ2f2ľJPY}.@4KZRM tJV" *bVe Q|4YolXB#9.dK~gde8F#')kz0l!a,(j5!ZNp Vl@7B"Ccd#n-Cnªe7CaaȘb*4<`?4T^mc5\E IH}?ԟ.(#8kf\2&!C#j2!QpY""Hb4*VcLH1"*Ej~„1`!BaWX2"5-Egx3!$iI2ż54@>G&F#z;/"@gN"4,fE}m #C 5_$HGAab`3D w<*ʅEF' HQ YD 6þ?"ac"xO; gv(!à9C쉆-;c4b*l0Iؐe5!$qB71P!yR4h'062?6f_\5#u,h fbX\d:0DdEb65d~H`c4"~eTwDt'6xCDeB "vBX1-2VԇL 0I@$;aa PrLU*I†WCTuJ8>,V!a (zΙB#-dc/'(#cv9Bi&7*b M(?RL5-淣>tcrA:6IɊVc~nm3fLй (c|'b!'H.>pc% 5gpv@AA!z!0G_0=@&` V@6@6)8$`[f,[-|b4ct/iax#Fc3CmQbe&87HF5d=jRwn6>"AVtIC\rC[fJLV*CY,^\0h F⎎a[xbŠbakAē"0:c@EVd32 ݹs z9r~Pݯ}#/H)x1̨uV" xp  ?_g}@( 0 ?#X`@; @-Wl`p O=_ @H;]/LW{@K &87|>kp0 x׳@ {WQ)U@ {h@C~'ix;៧ @:܏ @!Gx#hD`.Ÿ 4~.bBGI [#8,0J}`#~$7$GCb:>yzħ/Ot~qa|fq'~d*V.}@,g?) GO͞ "Ơ3G.o3vk~#O} 2Tz'ZY0r?x*#hgD y4B+5 S$x'z3@C4&'X.PE}R6 @~+u*9gʜ2};\f 'o@FIz%|Iy0m8{'kLXj:}͕T]4l?v{*L*2A *^N1KW)@v8g\` Q |}#p,;@06p P8$  L* G@$ z LXt~  ~ρ@. ev=@`03?!Qp#{>/ @)9+-|_u<+@>^06`$( ڀOơ~y߀M{< x睧yxW~뀀 |ߠP*Ǡ| vϙN@K,' ~'ag@{Ǩ~`Q`P"GNy𡟧~π)g1g#t~I {~*1D`{`  Z5L'322n~* +G 0@k@Ixgg&}i{i"|ǃv`xgazg)  `p{9 `߽+~hHy'W+5S "8mhx *.+H`׀ <M"+䡁@9'׹zp뎛^amR[Tz뺭`}zRL6nˍI B/(}G ˒lnO !z,.ߟhJ~yG}02j# ,XQ.> v5A 4@x5@Ol\!|'/̬` gpC~>S1䞧zqZրKa[` ȁQc7nn^OȾ>H8a]u"G }"ChXHQ ɫwztQp"?qd9R kR4T K0GPjxQ=@R@(4;HnX7B^ [% x2?.äU-pT &)w2)iIiCVHp1g Gnh[~"xܥ)J_ȹ5~2*dysdXSX}h[P#&tG8êiR\ k%jJˀR8 O8 B6/@`qP! F:^ϐ !#Z15 d}3ߜBRH | r𸛤O~}T22:h;ҀaLu"KQp84QVx-'lS8bBËq184;)?tSjeրF>~WlP78ޏN8.%H iC C3->f`ړq{rj 9*L'|=MCJušC0J-ž=0YR2.*I]if+܁ ōhKE$84[ >S}W#dz#,9I8O.D3AwS##ߣV*yp" bA$c䏧Z eXܣ=UGb <ʣ @=Z쭇&Xq>Gc$|~҉å4!bx!${>0$@{j61XWf!Tqꈇ2FAÀ L5VJO]ւ`>A< &vp;,YH$diTlKܽH$5،=Ji~7 G·9q= +9$'%@@x}y!%%t9 ˣs ,p? a$o3< nh$d`G(`Q>hg6/H#E>^j+l ֓c FGL!; MLGܽ6/jdiwkd̛v"Gnhz,.&9EA,f>ocL'uc|@ J$ҽ042FC:i`0!DMWz2#^9"Hd=G` B?'l @ e|$<&[Q V ˥ asijj>ԣ2',3D|#0C la4@o'vM<}gv6bӌynCp/^3^C4ŶQ ' R:"p l1Gs#^I' :SJn-nvFD!P$,GEC2#Z8bVbxKfU`C#O'$d4L"H|d>AJОIô>G|ba//L& +Fb!CT2ΌԾ$CnZf!3'#ʌ&2 (v LCrza&nSM.9.}8XNI`\% ABfdxt|;B sb,b?ļa | f)]B#HR@DGB@0`B:`!RAglbkAt+&̖T+1"Bj(act! '攮i)!Ba$ $!Li2b:&^ c1Ж4(72lD.B, 1@ 3tJB+5Piô2.+"+>բjC<'B.}"B5D,Zʌ(J"DJ@"V "-!j!b(d3f;z+z2#-46CU"RTBU#,9544.H!q>^ e*J!޿3Т$6p(8Dhelr#2s( @dVm>"" i> kPe!C;/n>F@sm*+4b(g|j gZB|cD"HB~?KA/.."RG&I(Hrf,wkD~Bqc,P< -+1} -'  HJc("$4BGRD2G cW&*Sjq2# . +~,=DjKvp&h1q~o~#&+DA+b"dBt?($@Oe $}J-ai"a=Ns#$@2A*/5 $W#+Ȑ>yc).FdIH\ar5`,R$f$(C/bh44ԩd.LpHjh@(ce6$@<8 ]-'C";Hnh:4 OAǁ,/cA!' prt>bBʉ~#"c. X6L]T=.D/:*B`>abA &`4ԇ|/Epn`(È0g*p RI&="4(˟`x ./Ĭ?Cf!ăi8Bnd<7ô-3g4k"J0>P}&J#c;TRCk..dILp?c JxRHjD6f bp+ /,n$bw0GGp#*ϣ.H&Hl.#F9f#ZVkb"66l) R*A30c24$OsvK'^D=F"C4MrCv0jV*iLg8G9DJ0v=N>W=YC*1'JoY,&b>z". (d dv""$m9 NJC4*)3>de2dN=68iDt ;zW"*òu ~d>,:F#ZG/aB(e'.G$oKnlp:A&uUhBqrHJ(>=+º86.`Lf@y PV6Rf-KG fK !2~oJn qM1cOuAQ|c)kմ4}cTж!x %*#Ȃr"|Kj+LFНN@ƲA`B*L:&'w %'w qbykdLJOr 22K' ،;l@9u @Vd!V#+.bbP4xc>pT :7e2sDbx S#rs#Z Hi:2>J@4F08r+q7Ȥ.bHJKf&1`1 :H ˒41sjv"呮> "S7,bsF1-\LFmۨwc-$"+/x!!"=/h=M<&I,eb|mP52Q/0!0,7iQҐ#rf-,9+"~̯$sj>V;B5W/~, F>rw(U+pjȌ~MrFCDɂC$BuNamze>歊nyDM>JmRyfb,"nG; W/c-0`S#m"&RV"(JD 5,0G11-D'=bL4Q=H@CJBle 7"pd1Va)G˩0C.;"y|ey`s&&)*T7jHI&h5L&c5 J= ~M7mH$f -"<!@.'#NҴ~8h9"9Aca D QH jrtMֆMH'\`z `V2 ?_ϐ0 CPX. B7^/1_`@;P eH`9 L}J8 ~>@  -}o' P  >?n@xP3;oZ x5 \<ǂp 0=O g"rH(W2\/XdwoH|QX' V/P='T ~ T~(~-HsR~V+ <{Gq?IZ +A`x*a'~] J{|@@0Ȑr!@ǃx@ lj$4Z}1@iX Qi($},E7,$TGR $`w?RCY~`TEyCjį0}P՟\lWK#Ǚ zx&k6A(! Q;*'G(TAuH}ڪl'Hk@*zGxgtFgSɇyѫHXԞhs |6,:GO@f*z?9`1๞v|@ 8*+zycYfŁ@E}Txz {}cG`R`Ac'yTvH逰:|~>b.~B.L2IԫG q}0Pxn&)򋾇,I\ u[(`q~ a@@ఘ# ;@(4 g|';(PI°>w?~O B!``H'MBn$߀? W@' Ag]} o` b@ z\B @\  }}^'H} ~}߯!O`G` F1>/}@}j2 pg{+r n:"`,C5@ <6:)~0@'0Hz ͘"IzG}#'1CQ|GM`꿀K@0GzL\ >S|N[ف"H28-b̴"0%ʃM:Y@h٬4} =N~lQi `kǴ["~Y x@28 (* &@"oΈS<9/ =ī18_DJ8l*K( Z ƃ<-Hg|/n7a. v|$̨}w/@%3yK- w,co"-cm$A,0wa񧰖I-v!% *|}eGzhXbX3 cL- "#z ӝ'y|'䀸 ΄2ǟleJ Z=:~@UK`@iv.C049h* 4BY a!sGL(|p ð|7;2 8 @H J"r,`Тx!!甂S.x)D#&=|=:$Y'H]IGv ?Y?XU`oW8‰H9VHdvbU.PcXBA\RBG.1> m{yc̑X4y@` {~E\p>zl$1X~Nٚ/Đ+vX"cƀ6!L&Lj x⑕?V)a,ЀjA$9BI̿P(<œ *A$6Pb_ eG ^l4/K1C?I/\*Dǀ xy4G32o mqO!*/D1?@p $hA`\t;-FUက [8G9 >T#gRz؜G-C`2qc`$藴vq E1,Ϫ<(ЪdO{"~EhhDJUhXպh0=\Rˁ6f>i%Fa.#y(gs Vڐ3GL{K rfK|٠Qo' hG1"䄐)?! >py[$ E݁60r g}(fN&q \a@)e'YiF0G@So(: >%pAS$@ i{aXf2D(3`Z , h=@N$B>!i$}d2@"#Z1/H1hv뒄q TeB'8y5q (]9`2XM$h1"5dfɄ8>G6qIj]SCƊڰqmC_+'숡 Ef=QuK+E(&,H%SnE7UHyQRqI $s8C}ý_ 9J=Ҳ"ԃqi&OdX%JGKP}uJtّ4$>tZfLn]ǯ)ȮA5ItكF'I"k9( sp0`/U=HvZ߹['Q2 #"QK25iF!jzM6AgE4qMA@JE"M4/D1bi$t@">4Og|%F",|8YEQOp,ja8d6Ed'$!2'";bq2@,#|H?#6ybW@+8lB$a( ` faPrr!+*(TAAA..qLFC 'TZq" c.e.ԄvB--_#gC j# % J7T"ed46C;=k"'$ EbP$94s%aڰ`YM:X"C22oc*"M:,M":OdDB.?C)3 (ʰJc"ʓޙ,pehZ;at,Qnވ$Shˈ.c4"#/jca%v3$Oá #,Jh.dx+LQ唖<1}FxJ6D')Uڈ=㎪(Ni)pNN䌰c92\bP3NeTevP4e/6&d@b>&xn4-cÖ` 0e#d@ꁂ$B"&VXݣcŮ,5@NehC%<@IG`nLlhB|@"?eB|ZGLc29'ċ<-<,U4Y|:ZA76 LA ((`";A'ƅf(@U$S:(*X">T>3d4 BTQcd,H3ȄFYJC4402|B.eڱ4>&1-EL(y}hA. 98Z/RC@Gc0Z,nWѺ"{Za8TI C#4a$ l./C8㬻~!eZ?"u#c555NC\d_ÒfZdc *.`2KY.e^\@FBHAdAK`n::AEbH CqCL@Oh0^0s=\@b<% ďwCzOTF` " rgNx A@0 |=_o '@ |_ A >bJ0Bo} o(; ~P> H!?h{?Ϡ(pw@`'$F7Y.[\> ,`z}u0}AZX{G,) c ('|k`y3;grCK @8~: ~I 9ǘ =l80)ƠHgøg00> -AF:l%G }Gisi`H yq xQҋ 0@I`(㝰m`A  <}(y~[q7z6` ~Nj OY{gr#A@dhz)A*58{@ "xA<ǹ{%/\P G*b+ ,:rDt}{nֹ5hj*xCH8KPt}Y 8(#R@.΍[-`I~y;! z@,;0!1yà*̹rlC]=7PsQ[['zՎ[|A(/ <@'N`2bn@B&~h'ޠ)eP湀LpJ=F3G>G-3 \#"`]8s97p @ ?h"A_@ah:<>yxLn5z,(?& ģPd/%@0D!?$PGoT"  4E_oc aPOg:Z`0$G~`+A;L|A@V.0 ?^Ϯ[ ?`H|oO`@V@`P߯n|3Gz"g䲀N@ |g[t!{#L`8 ,hD+!Gw'\ķ`/@l~5GΠ./8|T,`оA@08}R 6Jv' *`X9iuGap'AG{|8G h)HĂ7 Ar##1kH~EɟS*{  ҁY{Q7qS> 8 h,S:/l@L 8'Ѐ(h Qx2 / z8vtxB&)xy7E >j "k ((.4-EeV{Gz( s߁1jDgcby+..tg|60` ~( ~}RsZXh "r"t'd#P]$}뙞m8),A6:; Tfqx }wxg|G@zC{Ek4w֘ ,oP'ݸQ?IIQ&>KyQ|@ }",EX]p2X HGw0 J|=GL[D$px0poAH-,~@q@|h1pF,"_Ijj&jk5h!c@RPAA61rjj'Viؐ :u$Mδ@.f{Y8+4lHŁ=!6qXԇʵ1Y{M%VfbCAL>`$ !CzztVY3P_w1=`,ӝDNp|a 8F#ǵ5~0DH# *"̠ڴ\"4Pc9>ي|\t̋Q\.Cx8FW=#S#aHP~`a6 /Dc 7[ ?ǩ@)b=0&ט_fi?c5?Y>l,tй~Tԁhe!GN`#Q/ Q`gdcB;L3QfTv>:B`Ir"NJxj0#MJD}5N<)j$Q^Ly@}q_Kb(7l6c0FY1_@f{;F㍁/%WP Bbl;褧aJ4 cK @ LWHE4#(a:L Ȝo~I]/(#mGhG >8;]Lƶ& F+&t 1騙S%)Yneu`?VA@1.*$v.T~M;L 3Z\h}{\9Ik0og|3hJ2"+f =HxRU*H <Ј 8Di2K cl#{?17f\}$H< b r<>HXI18~w?Ȋ,"ɯƾod O唁 fN9c~/-I.e\bF7C~d`;8',Cj$|4LDb!Bz:0#*26cr@z >>A/(|9`7QΨ8 TceP$3䔘.lR! (#> Qd <0mp_a#C|"\YBHDo A< K) d"#,0L 6#@4b^b:x=C|l9Hb@lZ@*Aܒi4c*J3gp11C-&:C/k9!/:B&()Q8=D$#~XD:p7 ϣB[`' fK$op61"#p1̐dLfؓJb 9LT/Pւj܀L @aȠ< I(!ƨ#OV JaEkw v"f6.F*5BXg^1MNcF_%9A0|"̇,@iMξ J9-68 J3N4 !3A,@1f/c8c5TO 'DL"Mh(#'{"e&0VB 6,-1kȏjI0*caD>/$QkPk}5,9EB,, @n`L0`j0 '( D2UЬ0!Ra@!N1f $-,  DD7ČUf,U8$( ϥ\@DTH?qw b yC/56%f56/'FB47'"Ҿ|ULAO4S ֛uf@# :VF+FCcdTL,Tk,eD(>E g* !}7b"jO0/$kPJcr-NcM%j$i(.w*6EBĦgzvn(#@f!B#0V2C;4.1`7sn'Rx"͠!O䴲Az D@&%| `o+.7/7~`^mA!!dNbENp2(?VsVg!wF55iTL6"0"fn^k0G6`` K&QfUbd$f:C$tVkFFÖ;cVʦk*@d? :-6^B&DgÛi`#NGGر1A/C.}C~EQj! T:B Id_B{Q 1#be.L=:D2xC@ *-ֽ4,9D|/вGF'LNAmm7&bc\jl#FAP8R0fHraz8b㔛:N.v82ڪ"2-JJ(_,`BwF"σB^m'EEoo l!0BXwLy"o @ *`F@R.C8)g>A&8$|L-h`=DV~A!A'~s&OBx3ƘTY\,U+["Vn-F3r wʥpľ'B4 KC`1X֠8g$n3f45Bp:loxJVi31 BnQ6'i>bA@0wP2Ilh1"#BVC C0&2@";&w sA?5=8{$ _g0Kr ,M쪄D ATl.01@!'z&N|o&!E(s& ,ApX"(gr͸gvBZJA$宍""-C1X> ɢfMȂ(:(F?B,54=QH3B,B'C@@6ffP~=K!ŋꥫ1X¿Fh_#}c'a?.r7ÔZ<3Ć!EgM4Y"-QpEL!B_d4|kCICl4fA#!PD K#Ե`C71&/# +id>"nAJR؎;:5F _OGhJi"!bA5c'6Dha<C!C0(Mb./h!=Kqg("N)Y@è@$,C Fp(ikOp -$A L9h> "j4"}N֬E@  @@*sFP1(clN H0 ;c Ub~PR@jlOQ^w jCbYj×V.b'X;'#NTMJ,e9xd0#YO$Vޝ:7%\yಉ&odgc^]B\Ɏc -Z"ΩCsۥ`',Ĩ8zլ~t L N=k ۃ"t"{2p0b<r@8^.@.8+(>n0c7(aCA\TDT\lJD а ^/fCs!J? p`  @~O0Dd@&įw3"x_﷫@(0"Pk. 2 r@G`}_0X @p?$ CPcTG)K_ {]߯@Pv{= Fa#@P c@'ٟxf0`8 Ͼf>ot }Xb?_M4'z1~{`( , 8ALYK* !x~@.,p{GR l2/͓| C0|5'{/g bR 8|sq{&G渭6~:p{#Lh06 F[3}ŀXS'|r 2'"{CD6H5K=x*!f[X }T9r0L_pT.E H.  x. {-wuLCSU>} j [GL2u [ (/ Rus2.0xE r @QN^{]>}_@0" jZ.C(sp @w~>@ {}_ / €O  8Gz ؀o-:C ~= ϟ~?>H }|>_0*}g{w }b;]&~`]0K {}@Qb`9~P90!`H DZ| kI(GJ1{=3`҈HGG|BH4 j m0N0m漻0,f`lz|-gGȇZ1|asFXG"x"-x DH⊾4'l(UTz}+[ty-3X0H(Y~'vLuӄG ~8RK ' `u(b{x'(֘ @#( }mil s5cᮀDoL'A<)UP?ۘOnX@a$92BxAHbPe` `8@$w0 K}a/{`. . @hi=9A1aD~A"[oAtKJ m$QF zHGWp P`mFЏOHbkh%cK [@p^xTGJC yq;98ԊC`kRM([R/|Pu@:"¶P=Z%,V1"iX1b%ޑuc ;J*s a[b`zS QA=R|<>Gܵf"#R؁*r(Wl a`gAN6Gc˂"O<;QR&vr5dӚǠDLp<%&ְ1X{G`#Oe9yHkd&4Tfwczր1Y!+Y^*fn rG:J #BG~љ1XcM 8hi*{rG+<S (/$va$ctq:GbH44"D\4 ܁Hb@\!OAHc}!;P%R?G(zet2@}a7vAu-l1[I'8!eGƅ/r݊0y=.yYŀIPxf}/"Y`{ćfieC}K2\J ,ftOF#LSr=rjMp\y~z@9Hc"K ^1Wd$`R0N&Y>p@~!ecZ "YŸt4> 3S.T91O6o6(IJcn%+a:bkE,dCep/PNb#/hPVh,G@'1N G BHN Vl!:aaa!΂0:$B"^a-54(f(", @`> &0bA@" dJ6F?xU™c@H`u 5p$ePT%0{#"deF(Vm8FmLfLd4TCAfcCvU^B5hHG(dmN-*@0({.:h" 2HF^'ڙ(p9EOG'($%ea3D#b;)P,>g|肺@M1U4MT#(8I,Be.Ga(|Aܡ;Ʊ$T +c100BMbяB#L6#` GF҉%'@i4#ATaa/c'l38iK"WND0$cN"G7b.OTF8b"[t\Z7!(DD,ô!o 66MP_ 8L@J@` "8(*ciEa"d>Ɯ^_(@d` od$>A!02?K| C 8DjB"6@JHoL&C(씅~ #$r7!trz`ڥįdOL^VF[P A"m8):6~,(s"Đ\Bn;?hdʱN,C##>'T;O 0D.8l&a(LJ }blfdrx EVeu$fb0H,T!1/E 3O;BPa'8G,Bπ/? BHcFkTT()a,A8 o'mK$􍢆#Bȃ4Zy$$ XH 0τb&0nbm 4^aAAD@$a/U0Az-~(f,߄4t5X($Q`b5&`f A`'Ka.bd$c!g4md3LKBM'y7`P㮆d(B>#H"҄`"L(ĖZ\ v'om!DFEFcC-"#̉0W+>'#+W&JNH(o Ft1ABefZBF> ]'3BvHF@: @\/dHmpc#"!#S\8dz+|l@8E("̓--4/@@~DA !7BEL.t"f #X,'ID/lr\dwAiV)ߊf6tb*P LO%Z#z,Dz @nE@`CGEr .+` Z@` 0@}wBNj"fFl!d7i#C2oT80JkB(ZY.0 JC>~=&Y dIdj<΃ |@Q@-I+f,&$ғk`f7dV(/t&<@;O&z-gM4Cm"h` BS;1Ct@^Cl,DB ^POd[@EyӋL$#OlCSUfB0$p|/^\VeXC:f s X\/&)#55k2Z96^"ґB!A(lp!t9f!B i4Vf 8[2Nη#$zpt` Hw^!#/H꣒UA> bAAw&JJBMъl!䍊%ɨVn\N^T"5`Ig (,Pv 1,L1FRK0"O""WKT5G`E26/(j`'Mfk"x6,ErPm̀#*址.-$4j(dZS|E8h"yog:&[%`0B{>-&Q$wx3DPpvd%\,ļ#=.ӂy %mHmf#Z(68@G %NR1Cl41!WE!|ס! d<8n]rn740k%:)H18B5˘!|(bܦX'#tb #[$zLa-i#:( i:kI\aݦv`RVGv" Udee-3pw ETp*s"" +4L98piNX6 :ADi(:4V^3V B\6fvF((Pkbi*7H"14I2D BN` J'[ PjjDF|(}d_JUP!J-١v- ـ1#Lo&߾qrm5d! $"^-HP]:K~d~dd $ _X(m@qhJ+@/%?,/D{?^GxD3bG˵ i7_{Un_$s}  v$?QK ~S&QGJo0+/>}j}`قnOJzo9HBЈ /O.zh(1,hc'#מ *I}.9yPG{ Ӏ*㴧}<9!$~sZ*mBR-i+lwEP` # @#x;lxG{GufYa{39ڢBS&}4(ر|tx`.6 ؟AK@ 1(^4$GBl"0~úßjȒ`8 c\ `+;P1qG(z%l6{v"5Q>|`T-g–Ф8$%'w~(-m$#2UU^6 Cb4L{Xig&Н@ cf;0G(y8 JM , |= HkyG})-͢>-0xGŅ0{ 3B`Qr2*GP|RϟL*.׼@4ya8 u7 {$}ǹzczg[c`%|Ox@m>S-]ļ?:|qO(u` [y 1ă< 0P ?s!o``8W ƃhBuO|` Gȴ.MI|A<P0 ~AO |?_8?oYo`F078 E!>ϛ.~EsϬ,1C|I@X7{_O}x* P  ޏ>4{y@`.5-~@*,X 1~ ~GR8-  Ԁl١G|ȓVp#ȹ->~5-2 8!h xH9. |CoH8|x)Aaynz41M&|10ʂ`I{s -J , 4qEL` qH|GyjJ1['ۆ},Վ :"[>@x @!4{@~I0yG-+uj~V`9/[+KR"#iTCtV7{Gq~B<^!f,152բJ./3"@8ttVmB4@tX5zvH @ z<L'dq~G|} puYYOYgug+Ν޼]Zsɞj ryg|.B[7Ҳw~z(P-_څ"|k}=]kf쟨v'~$=em޼CB!?>y$?@H$|vK`íD:Ln7 Db a"0$]0,{KcQ6P6)Ģ!I$B 9E U6) d~‹` +>D~R/"D0pi3ꐀ [\$ .vK7P`lHtv[>a;t>B{ .$B˩F̈SQ"$6DGO8 ( < 7D|n T4r6GF4xXAhpQi?;V[n*R%֠4|AN/Y{:$I.wRaLd92>9ߦv َ=-bex#/`8p>^p)(P2!@f}̖a$'P"[\^[Ea<&X񉈄ƹcxv =@R 5t#ZGњ$k8G#8t>0%0 :@(|,h(~i &@8"u")cR23 $`&Cr!a!MG((C/CB" 5!˃)ޚK -NU&$ `x("LIcbe!,XݪN&`Mڀ(ϢvD bŇ:30!#zd CjH (];FBV=Bb-%gl(c#ڝ z(3 A̕)EbB\z,X,t8#%OTT (B.hVmafe6.;D`BL%EP%Lfb67mF-.ȏ Iʔ24\|V=D||=FT6D" d"(n2`GJ<)XXv#"$,޼J?8-N`!.!n@ /Ԇb! Rpj]"-| L"!A!@@~ jAMF8%G&@(vaKb2~#r0 RI4&1 ɨ)TvcĈ*B>Q5)e!xD D$@؂"MŔhn:~!g!OXFp BB̙Ə/o6͔3 Kpb" N`P@m 1*! fcRHIp&5&f&@/A^@0tMJj&ywq/%cUHv/@]".OE >b<~6X7q@8H;Av*#|,17&i%τP.Ŕ \C@\`$=*YBDز N\($EcŠ#4Ɩ̖;2MDՅj̠]Ć(K굡E7]9 "GDkpb4&'5lNPW"2$rhG*nNGR) ,#abX~M O0g$Nc8'4=C X U!C4. ?tA6.B;0 .)a.D>L'B0fT.GTtR86( >E6!El,="C'd*~@4cLI$>C\4CKZQ|,*!-(Rif" `Ř*` K4| '+z m,5ԇ/KV/'.@ aA 0^,rq,3r?b"8//>Qbu&Eq)q!v8@BF(;28"|$|,Mśŀ1|)0-6/!-^u +G$@(RX,[DI*|cd<.L5$".(IީB0ńEúh8D507BK @ 5FcK̜vŶ"l"6v d:VeP/$$D'E3»^.]>6ptIhikRZ->7Ģ4f80Œ bj0lT$$d7tELDDG%2?fab}X`b>5e"x`c*V0g:H3tNB#~!~A`#>~xP.$7 )$ǝY `L" B@R'P$ͮf;th 8$r y:2@r<4H{2(>:|j^d|2 6ieeFED%B%5"/I7CmL'ZM1t~`cC"p-\t"cW!a(B6~,%- RX[{.I~ù%GVp." !cN ^I5!` '1\>-dh^m,=(ghjUb"o 9bNav`N(tj<dTH P a:pA7<(r(m m'#ƀ;@D''zL}NB@"tB:2#D8!a5/ S<=_|.J=+"b@!6|B us)P9f뗣/DYtx|Ml"4/ 1p1 J\ŌJI-R("b#]L2Iv,|Ah1]]MW!`y=>X=^%#@#\qƅ![g?No9iR;FK|Dab8"Ɔ \D|HA|kg'V8^Nf&Zܛg: 6|EV<BbcRAp!ab3la@g`UnG%ޣA.RɭCH>@yE`\&l}CjugS/-&P"|1>>F>2ԾB%qtM"CVR3ěCŒ?,&j|` GJ.1'eHzNu"#cnBbJNd5kgtD73Sj;!j!*(4336` kEQ$ %uXʖb|0H`4{p"`M!€DG^:#Q5"<"B?qڿ@4L^"I*m5*@0D~n` - NT c0V[}#D"0kAp\ ,ә@tF#b&`4@#x!xHyrn~8C#{El;- O3?@@` {ğ1(  ௨|xE@ 7 G a/h?@h3o}_ @}g0FD ׸$_pc# Gĭt]GPWd )ꕿ+ 8۟f+@ ӟLL0Ȩ} H;lȟdL† A?  g0)~'HQC}@~4,",:x }1 12O Bڟ3~K{L~6'38@ 2q@`@ |X`BrǤ|!7`ǑRiazqrLLRUYz0J6aC  BLP$Rw5JY%HmX8`Pm47jSn${ X-WR$bHf}`*H,3Ksɯƚ  nu>'p:"O` b@2#!)]$C6~ O 4˳fTlzh>5Gؽ5'MŴ| `*1nyۀ(?g"y;_ 'X~hh8 |8~H&gwMWDQTEpRN/ X2/m$<<0I :<@t:ְ(!p@@ P0  }8C! h( A@0<z>.7pD-+!χc`p} EpNg` XX:?^ @ ~_ @pH?A z# _ϫ&U_ؚ$Xr@\YqO#Ym`;5Zl,`!=^Lc?# }`_k ?/ #sւs[oBG K~Gy~8 |-( {nG(+C|PP* =|"'z #O[zO:-(`+ !L+YH-*".3rGLyL~'C :*g Pr>'8 :@H ;@8xkAā'slv@zeOgNcv,$K *ӊQ`1*!n܀`{Z}`e'r,#-Ғ_'ˇ, ${0#8cڀ@#gGв x(R'{À"C8 + Ơ;~[`67kKkXyg۲?lrP ηNcb}E tǭg-<}xԇ}s@DaHɬp {욺* |'Rnܐ '-GS5 "|'-Kʀ`J]hy| Mjgp,՞zDt xg ܷqޏPToV?GJ$ "TGh&HS]!\0y)X H`(0 x0D?Cu9yMN.~*A#o88cx ây Be"ؑfJJ!7?Ar%3 YِI}CrIA_Ӈa% {sl`; ms,ǒOL\4%BΫ@Y5C=j,Gu'C0M}:GG%0ޘAJ0 Z&=B 'M?6sX=`z px ssU:QC{hx N-t)i#dѱ|'<|S@+H3$^wrNQY J ?ż~ E9I*x='*/ [q65!g-J@HC\^9h] ~Wĭ1;LKl2<>%㗒$ϊTL؞#Tʋ43>ThJrѰrw@i>\9 @@DU= 1a)z!@UCdG@)HL"M{ =21:6#%LTȴbLjYt}QPk١{(Y)q'n<Ɠ0 G% G?~ bLX7U\BHIr"J=ْIIO)›Q V] ܐj@vMuG krX@i8ºwf@y3'y`#c8ɍu!DH)k "4cz E@ cuPTZ86Cdo:@ o]wz&4AQU1MK [14폧 ^#JwFYGxCB@,iFwER7jvK@APڪY2I쩴CN>y23-<[9| !?QihXGy"$ݤN5 0#w0eAGpHV%l ydCh@RI g ,gܜX-wP>ǜ~l]/M4>?9>Gm$^`$&k0*>F䙞dw =~YbVr'-Up xZ61>0a>GyЉӲH(\|ك5@A> ,)t\V"wA+6HLI4NJH'>cg0 |@F.NN,g1 (\c@c x=oBx'(0eOD6-cB5FoޕC\f6!"n8cL E2D#bqɬbB-bWf;f7@(eeܤI =1ܘ2elxC 7$4',dM Jj;D3cC H1i$>D* 1x8, "b\D^"'!$"B.1&;*A`~ ٠ a->B$t\l!!8XO#\=@h#fc0δ"q.B6@ZF&|j-dpJ+:cl>+HR 0jh1Cm* 0A'd7+gBȔ@ EDH*>O^X'< dh26S< RTeFH=j6+LD>@"=cH-z'/"cegOe C5'O!~f6Hg',%DK%F+:ܮ &hVcXF/R6A$)hFn!a!AlZԪJJ!"'c:)6!- CCRjK fh0 !Z#I?OcdFO#ev/" D6 4Tx"#Dn"\813$V(+d:!]@D@#꒺.`hC`3a ."¬`f8C#Iviȋ n+%x"'xfae*cB"lT&#,Fl\+%<%53DJ DNd0ﮐ%54F&R@@ d4~0V< 41\p!4RFSlj>C`="1[F7NH XwD2>g@&-3Ac>5Fbx6zBʎp 6>sd MZJ4AB,GxspN.da$Kw1(>X#潧<:A>u"M=g,@ H8l`hB#K!@K;;Bjht8CZgE <$c0 4 J+6En 6/&1~C(dnG~-x#Bd:&*hN. S:pBD Mäv֝J$&& B~SC(m /kQr&~dda㬱A^ UD5 ?>4T2Kr:R'X4&X!*A0>'J=X*!g쏩*n2BlDa8.z82JCP6fnF6P/)aL7:jC%`/j+$Fj!e#Z5"/#(e ^&*hB˂qN|GtdbpðfOG*,:Ij۫, d,4/AܷK0&wZdB$3ADc(rR>-eGFրCed-U$dJX`l쨝o04)Q.p:C z.R*MY4{,Ot̢Ŀ6v18 s8]>g/"D.< .! @h`P`B!N /I!cC"!`8#N4Ioi;r>SR ,h1 k*λnjg16$L$8F6-4N^ъAN7N1FҞG@M4 צ s<2J YdSb],RDzl$,qpLoJjq2qtx0n'62wC@6T*,蹃/7j|.d2crcMæ-f/ 77TA!>vDw&|# Vh8CcJcm|Gx.'3xG!@ "5 ~.ԤBL(W/;-Bv2D82:\w ,thV.) I"1/N! $fN2ҷt\;¤rr%HE" ŌxId>$3RBJ4%FA#Ffn"*P!8^-ƒYH<KC\%Xlh8jkb@B&'4&!}mglr=5xb*Vzh\ ׳x Al)AzX|{P߀+(~$0jMc_ʞXc`' 0VM 4m~{o38X /nx #@J`|L&x;z(@0ځ Hz . *r*('8~'qbBr/R~-b@|-(xF'bсj| zb$g՟l0ŋt| *3AJP|?9 "|О:0S` kqxGI|L38, @X΁s!ҞBV܄@#<+ P,Bݮj6@`5!~MێzM'Q M @A{ķ-`R$ RJz8#0x; 4A ܸB4wvH Iෞo=f/ 6 !ש{ǚ(J|wt}Ns6|s"N +${>bjBy3g emYx 4 X|L;w{I2D*mNgBRq@j{ܞ'pL7~7r2J }|yx )vG}X\ A x3_1` A(|<g "O#1h?Nw}@`L bx0bm.gC `{@@.qw|__0}0DA' t6`W~=_0&~o;P= "@Wn~X_hl&~"p \@,.` ּꬰ7ggՀ!{ Q¹#T܁AA}GGkv [g~'  3(@@ Fڄ@$`P '{ŏ `ڊ?ܸ(}@++*M '8qC.{ $8֨Mh `H+>u't|@h 8{'~,sGCVOK;%g~"42;f= KQzc'RoEw'9j0-h@H9@=|S1@<{chdF}) | q}){H8@lZƀ-'2g@Q @  xRtTZq]!`k;2̼R0Ԯr79@1 ڴ I,pA ɪ5i:#!aygZ`Ҫ`*Pssx6t Y{)SKdkias·;J)`9~gwzOaz`}3@9q5@jBLڏ=GPz8Qj$w 5Ifdb) jx' 9`0i%1<xM@# PGpz>#&\8cf?AH  9GAlfPvGTh,{@ OD9 @؉X`@ 0gjmg}>_J 4Ņr>'A!@\|bb2) ßpRc%=qm3Cl !=LA-ǤX L̞CWo;H힧1BhJU#N@-pBQ6sVhP*W?Ah .rz1A !^[0wVj)42>@Q/R)?@, s4 H5UTḴV}:$qL8wfMH $vtȭgCAMzjx0JCҏDu3R`>P LSQ5d~W>X(vѰ3HX1 %rMrWyNz ,6 (=@۸c%QGTye}!k -XY) ! H@Z5cyᬠ!<0 W M`(PH|?Bh@eMK Of849=1^&@=ޗcU!M =jsv3}@E9QPG]EqhۇsJn$Ǡ$ w!"_JFN} Ewf#l*-N,%RR5"G"J@\;'W=>WiTY ,˂T#$v@zƔ"2̠E'9g GtJ+p8&\Z" qC(_F$`E '3 lpE/6m`z5E0$Fe r;Z#8h|/ `  L!ACźIӇژf8"־c#Ѣ(B!`jBFc4It2NΆe!j̖#` B]B&1iJ`2TC è|dn[# *`@$GAx$/"HdT&P$ wD,B!nDnam,/@F8W9d6g2!eGĔK_*!C\D 3!bh#f~"6IbBe R "NdEfF/FPgΩ=3CPOCEdrX!Q=JnnJㆥ&5g;.B.@.02! 0Pc4-c"80D#^A/. "@2硼Mhnͨک#b_$@m;@ ^N)K w#T_;H`0: @EV=C##e^76.jf$\>QfZ& 2t{%4Y*62!"6X,+ 72FfDrs!iOO$  i,0h@j"jX.3;@hc3md.X@@D\4#`xp)B sqF` pO&Z@GHdZ((caD,Y!CTd#mŐ%"OxOck:|r9)9b dCxN!#Җ%!n=s`IlI;C엤؀Y`{13]S|0&q ;T@MN(` cCpC 0A%A!PԵiKӓ0rB2@rNtQb, @6@2X@hG1;>+$/4.tP>pC*eN䌓(>fj/ b$)E*Y$?2E/C*{2>u<b K1 *!E?DW3c4$n>c!(Z&dA=,,ZGh21! H;ӴV Z#;!ʪ)@{D1mU;.b(&3BS$BB@1ZP/V22&.6Z~` 2'8N B:QAD+0/3ib5EoRTzehO Ga6b* !q(rUp BS&r` a@BTaĮ*]C#6`!A61#,e 8:(e GC>&(dDT@:,P?$<,Yvs|0i#xx0$F iIl:*q~E_ lCoBF?ʬGD r)@PF;v>(lSG0cUWL=?ÖT*ɤ0$æg0X2"cX l%Güi/D@>SO NB)@ +Zc8C#J <ܐCґe Č(1HH9j8d9I.!~*uz5vAs6"!IX/Kʦ-mʯZvt24C!$4!w!X!<R,p3#`Æ#5(K6NѰϦf$p$cI:Dz"D\~ePx"=| V{iFYb, d}!2ͧqW'8iycGs " fStpyVB=M8NZ!@2yo"CA„hAux#TDX۔#"(%cܨ Bc ;F)J&⇐-¼;"7fKQ7ŪK#.#c7#̜!fwj`lzFPw0"2f`@s Td6zh]eFD8c ʈC(I>ƈ KD@b2XG?j.0"Ƣ>@. F܏F8(thK"V@A6|_ u|dgb/ej"4H}4ky83&{L!GH3FӃj`(O;JD.<:zm$sJ#  1͐SX2E7[$aa&a4C`E7Vuԥ} ]ˆE2#`R (`" V@VCj68WY"8h"hYF"Hu5vh$:ff=&Y t=7<f[QߙEA^+f"k`^B e~qVFY~;@/bPzcR#E&d8fNacܫB`.gH2FZȊ..>"GcƬˈȑ]b?t/WT]vI"c;`2N/Cg$>lYɘ=JF@*-쳫 ? Ġj03. h`UT` k: OA¼q-nqUSp& ;? % Qp@/G|> |^Apc0>pp*@GAJ@/ T}HߠW lϧ[Ɂ@88}k0)@P~>0o ] $|Q((U_y>@ Cd@|@ @]MaH5ǀ@ b/Wڐ'~-x J~m[Z:xƟ$8N)l l`Q+'~@PPX/g)'^ &z z(dz{('}hg{13~|D^L)R/pf`@4/`GzL( IGF d>|7` I+;o`Twk|OǀuAg[AɟNJL`T>If hP&0)%JŸǪҩI' xzGز܄R`2ɪ' ! %jz0I2ɉ  R}$ l̇ `vx'z P}i˚`J ȸ1YGzC #6B|s@ Xӫ+$2fI B`1᳞Ǚ⁁@-"\3H0 r('@$2B/pn΀꥟H{J iNOpeD_0}?@O#"*Oo춹F@gz0A/p8_WX+ {?/iro-|?-wmn_o>_;m.fp@|_P#j1"l{mV`HMQ!@0`3` 1 $&sZ*@+ˠĀ3SKz:/؀˲DZ9mqy(-`C` ' qD@cl=(jԈ":'yǓf`t~-^7'̫J 2Q*ډCЍA,+a='Y@f)x>( Ğio3@HѳZA4&vGKqJ~~/KfQ0Y=O8 ncDT!`:FgZ XY@rg0? |y3C+ʡ%QStM 8Q'gx(< v;x`Uv袕9c`; oGfү*#M Q1z'J#BjC9ߟ*j{z]$, 0OvȍgH@S28/;#'P q|-L?)F 3qIxs``䳏$\W D B\l pv ['"[p#^/ x`DG8Csr 2?-ؐ 6cv(G<ԁA^M=HÖPoF$2z08,uL]Xc:Ň 14=GoTADBIG Һ^sIt#)N{F2Z1r(]"UI8't`001掇 D&@1h 0%  W'xº 5f4a)s~GĹha&xB9 X >lje~^$L2İAڤ`6K$‡XfJ@I@-dlSXyG@B*[grn:;QyPLǏL!G$~qy]?0½Gh^Gl]at3#>9G%irHтf0? vp2@\8s)VF&ȈZin*uRYфnU K;& <iG;CJ'䤾@AC.Uf\tX*[ir`(*BU'&n\.k<{6IOC;0gǣ2>c> ٫Ϭgv`G0xN7p@42"NO,s#Y@#jevĖK<+ zX'd^ m!@yTTZ0vP ͒s I=guB5?|TJ?ZLNNWb'A2@U0 ( y ;x tEOu*`A, "=' G*rքx tgPH,^3"`mi#:# T{Q86Pj\(gOhOR~\ R#& z:\(#W(a"3.AZ7@'ovPw 'aJ`Y#SxHdPo6.A_&8\+H~DA&Gh ~f>xM3] q8ȼ1w:g0 4<Ǵ ;@ 84KzIl2J?RO*8[o;[GF*͊|D6BDJ@rabͰJʢڞ PIiT.=af$r@6D>Ba(au:@> w(4D8 )ا(n&jJa 3F:`& bPr> 2`hԉbxf? Bf d77DdbT7"!BPj9iЪ1ɦ-GB#n"=J0ń4P$rkq\dU`cc&L&\ȣ˒#B " = )gʒb!fd RJ2@0B-db)*B`@#`D!!a.z\mO0l>A>ǜjN"H.U DT5%F N#J5t cc /5"DuIcx[. خ<-bU|!bDÔs~fon,PH]BAlC8PJ("1/>|cG<"h rd)2sB($||)b]Xc J%(fLYdJ!!D7M{8&0J3>aڰ,&6d5Ck1FL?'P.T,,h>* Jub ;ib}CP>%X$a Y WKќf:5K2@ľA`pX3Ǽ;m!J9 +!ʀ`"OBcFoD4f002 $ˆ~f2A3@@ @(@L`o!m ʝvaR\ '\!u%T!Hxs@G $K, \|VAF3\ P26>AmAZd&I.27b=L ü5>dN*R?F&!ltd&> bBt;|A2c-c=@n%.zEQof"A !eDF$h=d)H)#n-Ě8#V="̎^"~P.(&"A+NT9'RÑDBOi 7Fc4Gņj# HĚ .b=b I0HC0 CiDW8LJQ$ ."'!F& ""m%4x@ 6H2&.0xfCDB/l:$rc>V`&v~$,(3Kڹaҡ `!a!**hv1f!P\a䙊cFu!zDUIEF*ր3F5g+&Luv&*]Lh)e}7XtbÈ'nT+XbU#X2^\tN29#Ϊ3':J..d !+k`!`:  $,/b4Qaht;E5po$>:5$lΔCzU1(!`"#J jP/, {-&'vsÎu$`c>Sƀ-%%Ji" `0U#::DG)7!"9HTK1dD(/>EEUCrg1"N6;ʜ"mv;%| " IU" b%usC'Nmc& ,hޡCh)&YLD!FbLyD+$bj1eTtd':+@y Td70ub D&/m#Do@e!EtF".0#f͠e Vqg^o3 Acv($7Wg F⾟2OB8J,fMJƉ(4\sh7Hp 2U#P!xq"Dt/].fCWRˣ@mGꟆ2 %&72-GN[*879\SA!a$ބYz  ].PήӖ$ Gt=D1 +~|@0?A@X9@& w@ @ # 7~_Z@}=oRW |.9_w !H@x QI3@~>@oWA@ ?̽ 0+ ?@O 'Q豀< |^C~.`P-FN O o"yfs+sd?_;mk]Gzy+YrԀJ`Kй+RJ}| 2t{ [t;nh6|$aKQ'`2xgz˟`3|2''Lxgʲ|@ q'nE|g!-@Px#м3kw(| ,m7T~G:}*0gzHXʾ ^0@-,a& ) RbQ*( g V:@2Y~ /#/(*5`$`,.!7g@E'@rt'xGyxܸSJh `ѺT{ +l!?'@V7OE T85h4'H!h NC.$,hLn 0KBB'@;w'&s(k fF{{|[Od$4#-x$gywHqb&-9# \a&`r椒m ,,yqaX8 (AP@@ P)w#Z{WÑz>  a Ll^p1 4MP{p,W:O o`@3@ߠ@# };U}>l ,?O|?^}?d`2 ɿ`0wÂ`#}oq@4~gkhޠ"|O }(~7-8L{@"`C(>(Nj'@@Q| 9\g޼5~ P`8#hD({&ɠH} @x`q~'tFpwFJ~!}T S~ g|+` hȺ-(#g7*D`@b88g  z [U ~ Z,u**= D RR I`w Hq "1E;0wBH>= Q-L L H(5NB5 ?gA{u\VGYzhЀ[?: z.n|(|AVT v$2?rFП(#J9o1OLTMa17Qu(x`9d}`N.@A')}S<l@6vJ4Yd#Bߎh͡z0edqް4hD=:uQ9̨z@8 ꔇ} C!.k0"0 - <%tp/p>G@ A!N {kR8 x}3`w-x9ʐ!@# dRyj&(3< LP޳օ&꣒8_ `$rJYHY cC4L(Yu"")6Ҙ`?@ m4&wȪM 9 >јɫY?Ĭf?x'1R AT4_4vȳYY4C:@)Yu ߥ1}Ճd&d[!z6cܼ"|<,~9jMWQJE[ 3F3M.˰{C܀rY$n[i&`Ht0,G@hw <Wy@a4a-;E$jtR!^}|'{8QLzk0~6BZ,Lz=fg`v& d( .0 t+p<@Hjuybu$L!ذIБQE B)j ~0i*1+ڒy6j&Dhn5(E;V [oGPJo8b 1#e :op Ϗ=; xbA(t}Q;pI ^Á8 x <`@b`\@`0-# E uBC!6Ek&nniddL_KZ]i CNУHg ;C(N@HDi l lroLJlpRBM#I!B*b |"`6>@Zo!@6@XX`et/(~Z(5S `hG22- ni^$*&* +CtE#hIF@$<+AËa샡&&}1- √ hjz4k""b _. "2([ nmf@r@V!P7aЃ&c#H^dza JB `vc N'3("h2BD4E><#0 C j$ǃZhMAFC4b]Pc(+0PeE~c@ l"&?dJBvpP"lPcZcCu9b3,q侯C+#,i%`,P'RJX3EĀ8eC@9KH4"zG)VDZc`2`%"lbY9C*0|_ز{&(r> +#U]Ŋ[ m2va`dnZ*>gEAVbR84crmt`"a:A~!q+Hै[E$,@gl0`e*tC0J>hDŽ3vZخW-?vɭ jȚ9)fPy!8 ̸60`0;.&L14" @c>k i*沅v#8"+~!>iG>5VJzkBC4(# al%2E. f3H618tOK:D -&N/$TB.BPf^\,VC(\OD@@Lced2]/,< "0W"9Clrt&ZC4k8+4f3_.0c.GBM/K@xw6R߭7n.0?%!IC(zcN0gtj+k_"Ʋ(mVLbȢ 8, NcbfTfc.C&9&bAA`BKa(4+< QdS +4#0kdHɭ":+c=HncsVcT@Gf9L #T/m48F8(boGfDUNRJ70U*4F4EX*|gBXX$M` |x 74 $ gc<"1'26aaZIE92aE0a*4crHD$(&_0`$6Gli:!B">FRCv#-DX~rS4(`` W-cØy%H$- 80'!XPP5z\Y8"(#t $3prmjbXLx/qB7^ f\ !J(]>VFQGbz|f@BAD x2^4D&q`Q *Y&#nAcԶg J)&(D1㤥%wg*H4C,"V`èo$2Š1G/9j@ add)"ЪuE!#0Ek[#$ $5ɏb ~!s`\p`X`¦1e4/A81+m;񕦥E 6@f^2)pp:,ϺeÎcYfڙ8,N-C[*2B,Bk  Nk(1MM!51*{ CJУ @…D~3C&8&3HK^PdQ!棂$Ew fXUE^'uAfBb+%E$Qb7x#9r-:B(CH6a禣S"fJ,&790m52ܖFbM򺤆4+BY9 >c4:h2ݲ36(W \T@* y&4?ǼuC*fD38rMzFpC3b` CMr$"'腭.LWi2< b@r{#x:V/鴒5FAøH2|*`z^$iZWDhLLf{B0q.*h'fFTO|-E&n,Sx"\BC%p!GQw'Wefp}7%~1HŠJct3o*Å60F\LN)FV]&bOAJKdBH,ƒk Y8E*=gq5",Fq>~#xsăQ]6JwaъD.?` 'd*Ȫ\N!CDsb+< `@x\ D$Ci/m  455nʔ =T-p>`d{  1?Ϙ&ϰ$Xh0og_@+OL27 /{ 1 j?fl~ `;z=_/]c@ie8\O淄 +-4@C>N1gӚ> (,dy=>8.ͻ H.,Mf 2KZ:,| -i,@0ǹ}*f-~ A}ΟMpAlIm婞vG - L ;\ *Rڸ~"Y}p^% >` p /to+}3jh`4*p"@NP:A`*@1+ןr iP 0. Ǣ#`jf#`|btifK(9ؙr@ Zy؏x J|$ 䔞}H Y1y|ǒEMƄmퟑA.J  1zl Y!}1XX /y`,u@E$n;}F 6z|"ʺ&|*ȁ yt.y'qz `sN {gh;)Ի p*~L2~""EP1)|aLrgsYP~ @ A@xD ! ȨH|>ޮ42Bc"'{_W@O[|FPPA8ߏCkG~?@0>ռ {o Go( 7}qG0$o#潍}VfΧV0 ^ſ~m8 ~"@iGpxw~=A@0P*z r '0'' h`6 A5G &`;k .}2@(  j'궴@c8`1x|gH703~K*21! p)zК ~5qx|,GZAVoy"KRz+m 0 ށ x1\}k+Rg y9⡂2'Kv3h buF; 'h7-B˽f @` ,0|2!@.jB; 3o z 9s/Dz} [ : 6< BegbzUlh`#63q͂6} `}')|'yǹxx'/8yG~kdƶ ǁk-Ms4GMv(gC4l&zF2>!(&~zj`dDg'9ȯi?9ПK~0Å= ol+FW$(!n zP.@z>2|Ϟ!5=0\O$|:@ X<~1;ǹ@6c.Bș Zπ c@(@t:1d{!=@k䂕#gB*`42ǀV#1noGL죉 6@0Q ;ӀxB'2> ]j@3IZ%miP> l65Jp6ƄOe !DG^ F,D(F3OU ,t%~ր#N%pF#|>ω`6>OLԁ} ؀&#X,HYq9qb>k |Gڀ B@z `αqd<, 7bp(_)2Gacgt9[A, X WD+'c^VFOF'N{l!q5DT# $ @ <`=* ĘK;w TX#AxbR~0|tЗfPqo%(A9 D^3HGB,"T<)ƌ"_1\:a@Gjz{c1±-xv^I %jԠ:'e 슯 /f UX`U >4r#B p+!PXv;Xg[2 5y6''bXdb (y1:05`<!(#z!hѢ*s>cfBxZQO(gfraDN$~6F8|H2Qh F{-OrO'0~vw=(Pt[MjaB0Ge* O(Ne8i;`frW9#Y|f/ ^5EMPy1h]EY07_0@8q -\"RA*䈴J Pqz-Lx`<g(䙷bO̡r-E#e@8f\o[[`65$~7G#Vq ,v4j.Cд(,r,% b,\B3H81t'閝"-ic3b :EZ:f>DEҨRI".2-* @M b,,LH-D$- P'E+@2C.,#02*Ab+7%,G*> hʜCF 2hZeX%#TKH^ézQX%D v/mUaa`W<```$eg$C[xlViC>CbAv3qC 2ʢt|>8CD@op`H/Úfb*oZM;8nB ;:(&<>ƬM6dCp;6igBDgR e*PF YF]b:cCa= ~Dbb*/\,BLjF uLYPV+QJ܃mB,/J!`P8U`"0bi^8c6#,ykД;×P~1b(.9/iÆe-n,&H%18iqvz<4L$ 2'G^2FL@8BaAA4d x0ť1srI,%"<ðlú4ñ|mIhHČ"~CwZokm304Vi/w Ick_b+b2#~`,>"B,ZC0y,-  v/TbT'ɞ ʊrhYgNE\`Ba&#.̥;8(a+v @A` QCXDW~47.p>(4DFT'ƈC8'i-K|(3p>\G}b$6cBTQ׎@0@*@ BuJ\WȢ((:cDd:-8Rh ;G EyrCǬgiIyd7h׬He:C,~cd㚬g E/RHD8A9D"qLUB=*U,a# ߃cO~2!"r%@Zb>DDT3,;4x\FaphTPBo:Z.C)6't.24L@,3 %@I. A>PM82g,$4Ct PF1>$*kàE(2*AALx:EP"qF޿xC7MrH }?C!h|`PP0*`}z9rCT c(9eZ8y3iOc@F.th 9=<"V%k\$<1b, 1ŨL#33*̼|mDv"[B;ogGcz|cyAV$6и><'l ' 3Cc;Rr`>RA.#D\\c.Aff欺fb>D`%/EbtcZ3:F2PG.$,~kz=`8V(8i77qR(Y-6a\!="ڞ"o$v#I@F*.2#~+F.Bz'Jwq-ȃ)3DD(i>΃"Fl8.@"5Nc?F@8@f\@ ycѧX(AuZFH'WDZ)vszx;v Z^!7IMlU5Z3c̨:`Гʌ\@/;QM#ņJL"h:梣Bj\:YT244BC#$,,.):")*6sbq:AbrhpLЬ1`'3`+ 6&mI#qy,tʃ4\X¾.b0()E@()0/QF%ClL2HEBFHs@a1":\*.`I[͇?5]}ǯ 3B-,ZRhYL "CU[۵O ##sI<C$2|Ȫ (p>/ tz7~@#^Ge^  =`S~p@`8?@@ ~P oDWQ 7ﰣ@GOo ߏA h ߁@i|S7԰ -`& Ͻ~A>k@* ^S~/ j۫1 *-`+ 8 + `)`'"0ܟ$-I"H܀ Ѣھã@}y2'2'{#MJvBobkpD8{{(`ӟ'8 , @ .uG쬖h^Gqj;*@PG NKp, K@ (p8P$} `+o{ ZJ1+# y@A4GV3}@-՚Q좤MB}>ܟp] *R=. w#J+Ԣπlmںq %I˧џ }g. |Q|UK!NAJ2 9a( zǺٟ QZdkVz[)}| 'zP2 Cd,W"{›ڬreК,pN#e/;j܏685_ϯSY tBzJb8} {D ^@ `(}|h< L@& 1Xj~k)"* W1탟9:*8hꉞDy7ES3@(#B{g/ՀaⰞlj}Q˺Ш`I`'{`K>_ |g|@F Qil Wȏh1' 0Wz$j(zy|&d|M,,;V}XZw@G"B avmf'|Z~|Hr@Gz93ZC7 !>A2 ݏtn> tǰ!: *A!"D B A`(~yA;hE%@<!4|0=ǣe!#aO<1  #hH4k["2@ ^pa98Ê;"@J5%n\Q1!4%$ GiDgҰ(!!`` -¾@ so54Nkqw)< ס!*9"dPs? f xT b) YjN1I "v>Gƞ$Q~r#'cUWư/l*N y7E@A(#ƮrA#`@?ׅBRX\ewPMσ5o iU)L(\JAi0\Lw`, E\^b tȡZ@)7ǚ/"R&B!+JU `@0&5@d 2 Dy`Nt0KSKWJ#e!3@9X# 2.%蠁!9 AU䄢 C0 wLq铠C$XC5K WDeCZknz\z]iW)BZg2_B|pv"tfH`@ŁR\ {&1etGcvB(*(E#Z ,FFqGeZ^_RjF6B5͆@eֲcXva9XNxq<s? WƭFe,uėw@j6<@ sggD䟓;8ϐ%l?]W" ƺ^îG"-}* k&#D"#*˞gN,#?C2z"Mʎ"(!f&!!/L†P"e} !1W:d2v{D&:]b&O2e jAɮ( )$@H8;'BcmdAx@pjƶc F0+@+s↏ڪt"x‹O $>b>$ ; ',_`.NfF 7AyZ9J"c)4"= 8b` ,$f,>fni4E $nCÐq(/AK"(gmdհh$Aj"@dJl&&adb" /M4S.(+*! >9hP?Es q$'^d2/Ì¢? Bfƞ%JaB1<> /P#@Ϊ0bę\afdfD+Gj-dbM^^Z5o֔_(0W :1+FFuk*21.Wh\@,2@~@pCe:aG8G0,"fA/` D-GPbHg>/#, ?"HtQV"t]b體ōr&A!$a?@.;.Pw" @GB4`@fHju)#6@@b,$h0o1jFskx9cxNbjR{:ya$g (: 0u"gx x_Fb%PB!$'T9V 8e4dYv1":C& c缶d8Le e]'gã\>5.qZgt<؅>"(,n2G2眧h }K$R5bDH% ]L2+\yq5:z(>D`0FBB=0B,$T&LEL & *:f"İt=h.6@h&^ $0NjFX",>6Ǹ Pea6EI"&r J:&&"VteWj+ 2.d@?O hA` h^&͜I-41Rl@>! X . Acs+B֍\4H(o^Ap44@„Dl@Hf|F 10'T.D~e)2z8;p{5"BCX6CU#<Ⰲs|C?E>pȵ. ,#|W"|*η\{TWIJ8aVOP(cn=DAWZID"Y?NE5l2Kxn@oIüDfN>cu1!75dL=Zdg$@Ba X 8cy_#l>Tdx!CȢ@koM`1 t`G|Kܴ 4e;P9d&4cur@A J N*s>>M$v@,pAB`vkH0/W؀R(@s/$tHC9P0r M&Za"bPl(CfB cT- x7^g^PQ!B~,:DCT<~#+!j``/0?7&&g#E}t$b.$!Q/ d_HT,bxĞ.Huj22,`^$.WdfZBp.zF #@M 5"(s5#RdCĎpx.5#}}(=ҊD{DDc8w;\GJ! "&C$qi|?XGE C0Fr1D`@g}fJ!.BjJq-j6T19`C&`xh\(F HmAcdqeqyb=`09@&Z-CqNȪ,-Yp= H`wKBg)n3"FQv34h<"Ƙ"Z6B~-z6(* q3]5E#?"@NZHGXn \ 2`wXZDnCTo |by#7]n@H\v,>AF (Bc" ܮ*^;clFdi.^05/AϘ] DA-yC>CIz5{}L"%6"$hp ^*%Jy b$&Ҫ`FձJ/}6ئ  8@i̞cB-Cx.2UݒfNܾAy4QRc"6f4W#0&.>f=©L-tP0#DsC;">("|GS jh%" fk ,k fV@>a$Y~4tr鐩 n"k/~DxUңB;byS>o9Gޘe="/ GG:7iC 0b \>4܉^FQDž@tW6W xB""$=PwFFv%p\!C,dل_7̫>(D}]Y,骘JA]$";DGk#"-9xȊ ądͬ! C_$"$^4"5arb*1LbA.ִ!'ҞC#`נ i`@f`\aP6_>q%BP0.?=HcB4ycf^ҧ/c(+/'>8(g,u:r>?:1y5g^PFD[5 @(~?0  <"@ #h ߠp8Gy>g|@gH +R5@_~? }  @0H-}^o(1$jk 0 ]-O`pS~?ZǮ_X?_`W=2> =@`<_Q?g}$o; Pi2K4̟ y`h !y~hkA8 *$A2@)=} `?gǟJҶ*H"8$ (&}}H@ LQZ $**f#hǜ-0a(! ASA`c0PF=\@,!@l-CO(nFWG4@4,LC Ø[+m(~akrDZ@Jy` QiaLSnyx@",Ch&%PJ,{2=J0Sru !z:j@r(rȱ8HE>0?X:R>PlO!#M}̠Hs_3@ {<CV<"Q>1̻$L{ e-Ӓٳ3)2dT TY W VRA!vWx)Lf/`o OVSBRR7 ~g:C*QΠzB8l@u&~%zgrh>G')LC!lIPz\G4 O+4,s0Z@ kWF<@ 1@&` >Km+*BKQ=ti\'xπ@`4P؁i:N(z4\.# JHIP~`(L4!m.w2Y]h>@:2lpz`bXHx=tѐ PāsIB qLL[B1!pa `=ǥ!}&BвX2P993-!=^KpҶ=xFrb!'"{?I<1;P@q)ÂzKp(&.<`4]7p r>0زӖM0H:! 5e:G[V*F {e~u>gRPs HBd+nв'eJWcꔥi H;Ơ1 "QFj: hfȍPI[*M$Zn*"3`3t䐶AaH˥A>5`tJO$G=ve1cMxgX/ix"04?Goʒpf$6w+1 ǾA*0Am!1~>!5&$ `ƅ4M43'0 ]l),Il(M6={c[O, yO4!Wf"yI LdᏨH<1 ܱ}rkπ RXx^?/EQ8WGE)jϱnDA',+un@yo q"k"zN~ !!m+w<!`u!m(!  F 62B;rAb: n0Z. C\.?v"/A؊Fn 6#Fk sJ0cE$"D|=R 4awPĖW EdIJM徤$" iJD(&ZEN,bC{`T=N+`$BHF8ZJldiFor' .iJ- FC@p{ae:D$@*:!-F2+6âkbN+b!m&Pubzhΰf#=IH 'cf%`W&F;Ρb!`[źN1ڌ)c*CB+/D0E,Ce@rTcv0M|'COMJ) 0bdCHV"Ǭ>FD)6}Sf/ŀb ς.c0㚐 (=dmn0܏KR<0 匸lTN!$fiC#"nh}DL@@/¸K#C#\ƥd>a3&V>5 i\ktt'+@.'@'R%=`"¡%A'!#RAv@ " *@&R@f!H4qB'~ sA,)00L`W r;4EALqQ($.E. / =cDS#RO-w5J߇>I)A8KR,L^)HX&T kc a9n@  F5Z^M !tjm$IcCBd*+Bt,\7c-niRT辋fsEP"P NpR'.lXºB&)/r!o)B"e13i({Y"9d NpPcF^:u= ! N v@'D  "Nc*iF@&)#@~@j`$Z5H4" k#.u6K@$8H( HTazκ!..ڬS9cC0cG &G)2\4>M(x!C*< *hwڋ3/R dhH+eNB1V"v#Z)\K kBV,"nj7qt,>4/^B5 iDD|xei|ebfeG:VW801,!z$ib$GA "!5$ >bn+Zd1J:Ciuޔl18G82M"z +,cY*LIRܢ/p61RH;t "H(`exC!_r` 1,PIGKA89,*.t>"q[|W"xeBیDENHE#o@n!pBzZ9#e&o">+|i(Уb H'WrJffFTY rCNgj)f,,&oQyRpX5 "Ö2"2c4HyT,*"GƑ{c0Ou@ \̅c!$e 8YW1 +Ff:vmV4 \PB#%5Mb(/f^˘(`Y e|чYi #\x(s/iLf㳢i"jNH "_olv;0`@f.eqz3d+ Ull<a  07ANe 5end&`/j3iudBfb!,D{md`"vc*3$ Y";0Bw/0J/T%|lc58M6bgvYuP-)\iT#cTJBL$OH7"!d^f". H8d>ˆ$}@ 1 8p EEãKZ;s6"^ck AHNb6mDN4Fqȸb&Y( "K\+q4]ora|]!!!#[V: <@wz`Xxd7P AP8y )gYǡ GC["䂁Rxlz1H@}{M`GH~zN}Xǥ  z,[~Gъw9}i5b {`j{ )GyryΦ@$H{g9~M7hCj|ga~|:[- COB$` P p"<G`"|ǹ@P]/g#*( @XZ("|FB+rJ9FyDq"𒮨KIF{g>SP" 4 h2H~`{D1g+L}k>|gzeIzWNuc@}> D 03d Z'y  CGGB;x*㬇'韉fbx"r*P gg=ek x%X_y_v@)̋s^r:|(@ @P7PH,  |=n8l4Egx R~<qG{߰|? w0  `}ğX?p<~PAM{?wx} ` _8 ?_oʁx0h$ }p?z \@ TA@,֭С(pץ3OxD+2 mɢ . j~z;@# H!X Fc.YթH”~* `pGz}|6(ô ŞC'.`x) g( 0CG) }~|9@ &zGqv@'A~yPX<ܰGx`|'8m0s/COCl%""(T,H+g`0 #8}{+h" Nx]T<-D:{=P4'[ I, 1[z`1v:j"'n @bҋR {ȟSzKˎ!| av騁Fl>gG Cz5Ğ-gxK"+ZL C*,,yQLyr, 4"RtD mƟzWvpR.+ndfW?,K@PyjŭSw,ANJ25I(kQݚu>DZ5 U0;G1)vHY!C",FND"GhҐ . M&; `<`D,<()^Y&= iwi@!$rǧ8&?g G'4zqϐ A۩U>TC,[x/@(9܇8 f^?@3p?xt)D22Qn^e"ʄSg ل.yL@pp& =9]=;P#`vu vɃ9^@ "rSE#/d(_2Ѕ`t ppE1D(fLׁv,=CR$`P9/fAQP1PM Xڈ{ K#2NK=TUϤMmY ]j##X#>G%Rb F>GýDF31,F@2jX@qm`1&ۀVeK#&mL?^aC@!1/ C}%T6(P$ʴC)4/C:\_}\ feDL7Ip8Y@Im*HզHJ'`$tJ`jz:ș] ěYr,⌊0 6q.ލ-'e%?w ^ 5#{wy^좙teXPȼ8S$4 `>.swy]R%GzS'Ez(0z}>> b~;Gtc> wXqXt;(pϤ`[WiD.I #.AmBnPG'F# AKC^7#"2ׅIY"FB$3^L$D J}$0 lw09>#Cf&6$dA(v1"MfZ3:"$8D7@@ 2(4ncÜc j$>D8 6"$Mb/ʍ( '^$ΰT @(1`,aaaB .*PGV@3"IbVwϢIcd6;AYĴ4̰# rDD % :Y"@!324#D[ CBPkJW"cb>5HN6L# 2x >7q,Y%X$"’HLGLJxH"8"zn l@.@TAގ|KD@P0t(p+2Bæ.1&68T(.qN ;ʸ.lB:j RAzE $Jax@-\j#8;@R]拨5#DOΥCCddS`,R.$O5""$Cs ∸,v8}bd` |c^pN"Ebr#c'32cH)v"h3<+V4d䚔cPŠ0qɀqvgrѢDI123c$)f_̩)(qCt'xs"e!AF @7DfnYhNN?D~+.EbFB!,^ü@`:B(X^1=BQ%.G`RJ@q5C^c!.ü-HP+6`F @r98$.Ls b,T;IGZ(jn="/@)6ְ.jf\A!@.%~`J(5E*/ !FH)#n7nX1,nSy6Cx*D1a2H` 3*Ȯ!Rr1K}d^ M .&'1D`I&e_/@JҎDx .N5EFK 'n"Z"3+(~e)wDIe8EB8"2DE40oj荐7b6DնK΋1b!LLn lR\bzxI#!.`gև#w$TC!'w%vklBThd`.` %JBC1]$5a@.5 $@4-q.BIA2d,7.(ֲꔤ]."MuNK)v#|HCWCCn[ƈc~F D.b/Ki((ƶ'hn'hEV岏<;B&t=![ col%=3B-60b@v h YN3J> D^MvE$1q9B+`6h-yS6℘/*@,cN$"3[)5#^toddA -D,rdc.vbg"Zd!MRI/B;SfCJwnF:Dw87332X"LcQlMCFJ#+l~>̔gV]b|"(aQ. * `t}Ppc:!lb$D˙4feQ*V&9(` 0l3NPgsl}"fcP 9!Ck"8?I"fA26Cx7W:  q(0A@&rSPIh+,"c >"(P*tAp)b.2A`8(-q‹uŕ$JNDwPD2#b/"B@'A!c˞ b Ob5CP=>= "dg5P.5 vf1H#| anP,e(fdCFWqh|DCRJ vHp"'fQk%bl!dȖ,Xl+Ff4%)4"=8.,bLĎ?.B&}2:&'a3ND,ne)F(ɣ#::dB@pH"1_rȇ EfM@_)B=#lKI$0e.y[ !vH4"I$ \c^‘y""ubYD]t6-Cn ^SPYcJ?BIFk!GJtbо z)?[RDMs 6 /Z64 P^i$dØRB3E%,1I~DBq)6ma@VX:!jjcL)/"K"N7D1j5j1kTPr'j' !Ӿd^2 fӝ態ix.eZC-P1B$זgfCPFiy+h . tqaqk)f=KI7X&9;(jz2p"$7En0+Afl4#Y$K'Bv|y@j=n#xK0RR ̀&JRJ#4KCB=&V"LHM|.~?Ķ3dž @vK@(#NcucC’ct [ L8|~>&B%S)L׉qLUV#&q3QP=Cf`BwnH?dcdXА:w6$X#pd.*CcNvd6v8@gn'  k_=mo%HcT(](~@8z@` WX̛#-i% Ebqa@a X "o` CϷlQ#?ߠ0 $Poǣ7@@P Le9h,J8 ҀOp[ ~^`< gw}L+ hR%Xqg&}P`(4>t`ɳOeʥ,zUI_@p4} n3& 9}\ @W}[;`P+69~ Jbl0 {3Ϫn`z? #&x*GʖjV} zg{Gng~G8pZ}'$ @kI k|~H@,4G?Og|| jʏ!"G% h `hP bxxQjG:GSڈˈyJ}Iֻ+kf}캔z5X')"Cy.|J Ψpε[|2$ρ r Wm" uǙ-йy#ۗOg6cp=z6FǢ-l`,^Vx$x ;GϽ|ɺـi)#lM*|~gʪjUǡ}g;e ~% g3˷9uz,I<5+1Β}0,|n3{&ql9(ht HGwH @8@0xHB@@@H0 0~nhl5 Ewx V}o|^O GO)f$ >W0@Bt00$|`7 n|зݤ`v~@@e0>5K]K`}`|?@Eb ?1>0"?>ޗG?r_/7@|*~k0"`zҀ3H͢-ꀬ0QL>ox 2 "T~ c? [ @`x L)ҟGGYMDh'q)0 E D҄r|+h,-<$NmTĀ73(D/( W(5%(r 0z䪞ˌO11Ԑ(h8&D xB0 [ 4&MJаk`yqa.l Ψ@/X: {yǘ  Q{GHYhEPr>x k G@;!mF] `:g nh |IzLg͢:ZB,yϢA}ǡx(~;{lEI@QU"9}G̔)AyۂʺI9hl9к'.^}R}g@F.ht.7>C}h!# #Ξy 'STi *<7FA , ' cd 1XyVGy|ȝR\:" }A>< p*6ۘ1 ^ H >[l3*ҙH )RG45iv>pY0@A8&3? !8圳%U-%-(]mdXp#o7 MȁP?r(@eWJ9g,OvGI$$H-| oz(b[L[  f:#+.E)Bn1!:sO$`5 ɥ"80|X et 2lt :Ex XĐZ@6Oq" WĐ`+p'ǐ?JtBp><BpEJ)x BŠr-'M7 ȸ5xŽ (%Bg? "AH ADqc3[?!ÏHߚ\EFp_JA kDQC|fEY.t.Dv€A [6 =Cx@BG隲&=0cT|<@([ TW&%p,fI0A >XК N,ED{OGʵp)gͣZ>GOe,=``$&tBH@DR @b3 x",r' |;C G~?Ǚoz!] 9s9Gxa6ZB0F1tFCH!!rV)s *1bj `/ڑM\qoחb`Hx p v@d -ϘIgf9t0fd6=ORM:DYB!bbWrF(pBu@4BXsuAAzɹ2( Y3E>Z(鄞e@T֯#qfvB@Al%JN` 3I c΃rTNR+Q5"pݒHA GY9rx[eD5~< d5l"IC{23,.r8Y K,?c9d4FHD ΋s#{^ p10r ni]0Pz@<\? hnSZt'5l,;ЍOwX;Y+/g"#J3vD6P-Fd#06p@$DB 6R\~cagazB΁ bDNJpE lz(m\.ţ"W&&f lZWFLfc5F(:’$B-bM x#*Sc(0AAE6G&BMp5#"Bg(ccD8bLp$,?c\iD,G +)AKd .#6RE$3kx?bI@N̸ɐǨ3 ,@ėC0dT# cRcDCĝKF$-Cfd&f| E-;/@cB:4$')8\/6>ÒBB'6:UDV-M r!4s>M0Lb"B >B0{L,LSD-}",A&~g!$oiZH ~fdJ~/gbCEr A/t` Ht6 N)2S@#z9?$BchIBb6R6G7,t-HJf K#!f&'ǰBc>xi.|"[.LXfFz+0C:*/@$4 F@C@L!h2H @.3 oDCdncXgItnlp/ʗ% t{BdH!ZfSfPBA.pRLLQ'6)BpcR:(v' U^kgTfH,5d-@A`ZnPAg 3 2{!$眕h@_#D l^@p&\D,AOA.L@\n,5扌&,۪VC;-Ƅ/#Ǎ4,vG."|ARA-LgZB*4Jdx} ũhb^$8jBw OK"3,nHB%\ Kb"\9""$Q»XpA"(k/,.Ώ,s_h$o2i@J֌RT@Π1tI0/#D6b)6 FF'+HDh?B8," 3[v$~œɖg1oV6q!N}DBAR'X!dă$nʢ({6#)LR.`FbS⟥)r,B$b /`-!?1RCmⴆԒ 0Ħ 4`"``2OQc'Z868 ܌@#jhkd51u9^nnS \Q" 2\-+9 3b Apv9.eXP0+GR颻:Fb%p&|C"eP}){{Z 4.23b)W`tnch0XG)  $ :ĔrƏҺjA]4ۨ rLΚ+rB,$hgs p chAD8I!H",ϰD!G.)(|#656cĐ$csêÎt!Ai c RĐG#m"bK*Xh (C-IjH>"v6@%/w?3('F3Z⼬CTE5W<$NG(A Fs680Ozo,[dnRDE#T2,'b4bMLw@! JI Cb;ϼ@%De;eK͂&@lVAd۬B2tGR^5ƌKgBAFB#_k$-B|NŒyEY@YEP:A-@Uα'IY/bFTwXA2'uj%~R. @$(478@a<H)"~1)ZCd$D,8E3ɖ4DPգGGxt!3`63h.@UD4#f?CD'($}=-'{^'ASKd~2&`G!\` b (S!&CY.X#&,VgfE.ӢJiaK3zDFuG$rB@~p ~xAa U|/CqA lKiB̌$rC@B&g )2?HTQBBEVb1C3$~PMg:H֩xJB36G[hRZ9 ""&DH0vNH삂jDxunc<` f~:8FI\f),#c$ħ 4Dci{b ^CQ g>)")#V/oV '!W }3}` >_0|dW"}? W ~dᏗ Y [ (,I_oC >@g`eޯ_#R7 ~O _s|nEd_8+E.Pګ(`%*V<@'嗣2{JG GȀvJGuGhB)ǫ&~ JCOk0լ"v' V~1 Z%P3&I+41hlI$~KH z/gq R (2ع9/z{TƄވ,@X HSȂrℳu{@늹 ,:ɀl "* |@\'w (@;G}̸GydzB;K!IԀ .3J.||G! B~E*%:r$z anJ܀m2KvF,0<"H(+^T`憻h%y`y' ~B !'y Aj⿀50zڎ_9 -@!?!nU. Ė@1`w @8 6"8B@0p.?Ї2`H  ?@zj3@@ v_~=;>0C :g$vA0~'>PE=W@g?p b/ K _K ~ d}G`"b~R Ȭo07~>, 6{>_6Wmk ]ڀx9y)4@( ug}ȑ~) Z<0)+}"l4 <} B)@0@}@4~'[B}G}1X `"~li2}}@[j} $ER;IgU G 0IRgYFk[z #I}?T I%!5 n8?m.k~'$13(#T(>0 @( 2A`*~ @hpU}(@k9DS{:* v{⁀T '1Th!B8#GzG!`xuz͇SNg2ĴGͪ}8Z{eō$:@hjTgomcXZ\5/qø:OͅTGˮk! v}{ n-4`+j{oi޳ $@B=hM"-Y$W  2g;u3Vg+.SrlpG}\z<ӱΞg@a ǒzh=:>G p #w=G`v@0ocj?@dhh4! <}A:8Ō@L>G, h I(Q>,1#4DJ3h5\t0&3'rb4 yP7M6.,ZEіHη zP': )s0@ "͢HUR>!s\A<:a i'A 5·,d$$LZX 39z]K2te"|9|c$P3%"[?|ÓFh\p(,Ӱ(yձL,C5B޹̘ +=\p,=#7`) @(13Qj ٰ15VP\a-XNX~TZf?fd^ y$LBC9c@c J `LBn.NIbZ&i$]D6P 4Qм;%,A bKE; #"q轔FyO\t2X1Gb diezʘ "$ XH %I u#dQ aHARr8㦄mS@4ZM%HzI2RsB @ԖlL$) 4Fz %aIbӺM>|EpR$  1?S!'VZXZUX @,BGu 3`S(h҇I3Yp(9@IюJЊ$Mgn%IȆ4bnK@Ȩ2.An4 sv 9!'&D'qABf:,<@!L;$̐60S1LvN1PK,* A%L/= $:67F RCSHXD @'0c!(Z)r<;HqR]K*'у(Ȱ>p>x$"!`,`.-!ʄ` INZCR&!$6N׀ h:hP`lZ$XDjON*`h1^Ċ2`>!`$AX, `0ETj'|MfL-JB d)HC~J>$,dPl-PYaA,!aAc>4\iTĀ>3bI"pXчlňC~88!!jEƏUXIp`2e <b ,(e*7 ZC d;Zҏ}8$(zI:$څ9|{r?BY."BFV*ohcr4Hp Ş@Lb7ˠw N3 A$K8F@|Q]" AGa? sY8UbN"nJ/j)BU `c7l-En@ % Wc.Oց/ tDzwVGh:o`d$?J(< F4DcD4AG/=3R8ЏDF(p1 L(lHn'ff Jg'< >P a@BŌECf-z!!6gy"tF"%k6$pde!|nI@dHjA`"z δ(O)dPBCZ0FP:A/I)#,Vr+:]$|,6@'n$0R7N \,Bx dKogF(5&Gڬ#j=I- $sMl! DD[VYK02$4cC!. }NBMDA#Tth'<@F gy-C[ dRh? Q;!tdTt,s01`cC*Hw)M2w^>had!AD2qeTbêCdCt; 61v:[~NjtŒ"8R.,s,6KH|4@ 2<$x>ĸ(!HR6sTc xe2/IH#t|.zoj;$3BPK_ p!HHB ĕb(jGbH'ŧuY3Bk3bG'DD`_n03-&G<.bCMdp=_+ >#'b5C.L<@c=Br=s=ubWA1,"He.#e<~D 8G˜sn4Nh0Bv3HTY)D" cBY9(Ll#Y'x`dp$\qB,vZ4tE5<=ԁ2g@-kM^BVjXMY ɪ+`-@$"a mjI `btf(7(p$b'@8wL! @"bFZ-KC@ s0_(-#JibY"!bx|gT4:WȉLNzf#hM7/C F}"c <$pT ,@CRF8$NAZ)B:3'rlpKa\˷:p0K/g$Z:f I'e6ncMm)$jKB$Ja_lT)evw'ҋCC z$H.pc@$p5s.7&USD֒j"xdeb 8NB o"a[ 4$ aaT,ETk` -Ώ>'q0D.!R\#,Ib "J>6&/@J * '>c$&r”I1=H`}8 ixh/T+}v CAʗx 0e<%`闊K&`B*}xX@,B!<3"D ,B 0BgB:SWG0*"taf=#dc0" `y&EjIc$@9D!b@ SIßA+er#4x"k** 3"Smez0/Q=d$Ry46Mѣ 1cxY,?@ @*oa"0HR B#k~؏ij?CYC$,VBF2FH\"wv6=.DRA )C*֭^[HY^ !^ UF$L`nJ%`lgTFU+r˨"tb Z2F&Hy';#X-E,KW|0,JI\& @` ~ao@@ ^ }?b/`ٳ $A0?@of>@(~? }_Og-qH yao`"O,b@'`{8 8pDyʞ'H[[ `&+!=o |_ǨQ!`x h40]&B/M{^w4s*`hiR6{ }f qYAbi`1w'Mbn.(@K"  - Ag8 g !pJ`Pŀ (g^gf{ X~1w QY|jy/@*ȁ`  VK$j{4)@J*g};Gr ϴ6keگUc+ÀR1ڊYhPCP6(Y`|@EX,yv}E~%4*JpsB|3Rb9vYXC|M GHxIAz6mxBgH{4yI* v@uLXjh>oV"HR ~xh' v04d|s{  E(}-48vFj[2xIwA {b,|q􀀀 @07& !o$ @&=owk6Ecq}>.+ ~^ ' {"s087 >K/@g@oj}P + [|_Uh6GPWh@P`  z; e m%m{@zw\џ906^ }ף|gs:. 2;2/ {gD`3'<0ʮP  (tLe~|<29'p `$Gf`09`}3]-i1Ӂkt>hkᡨ*G[=H]y" Ǩk6 |c v}J3 $Bc`|xgx.\_KSNStt}90~:۞G1C` {ltp`ǩG,1K㆞8~R&,Īy9EDs\<6}82 =dr\ @ NpWHpBp DQ 5eXֳ/H =.5V@a{B$( 3(G[c,b1bmǐZҖ: dz,A#dY"@)s@1Ǩ+= #֚6l.AhY!  `( =|B;LfPET> 0lHԸ2c@h7~Yh}$QˑK':* 6&ZE#ؐ^]cŠ?C .v7Fe $zAd#t~Cq |#fZ"$ҔFxY8BrT'q@%N"3/*Ji{q- _fNJΏAAA҃LNI&Ub$RbRc"2ʸ!d0! @@M4P5$+ĮJJ JF$AHL<|cƣo޼b8@-"E*"$9T@ccKyPNWD2x;c-u 2b p!{eWM$c%RD名-~"4"x-$'h9n. O_L#Hxd>+WdLL :2@t Zhp(u$Edp\\&hB1U40Tc +Dp`,". Du"!8 b0gU;Ev+bE6" (.Yh$ Jc/EtB4$pY~+Aμ!al`ΐ! """j*&Ixl{xjj*&cΉ(--$qL2#$`8Īm!.8b6¬7Np-EWS"`52NS1XҢjK.#Xĝv2LRV#*Ɓ%/O#>90dQgE$6KB-6m6<&F<-$d؂,+b'7(4BFcčb!sB,]퀗q-r mN``!`DL@d\2=i=)JVFإdenA$.0GB؂#H>>>4Bz;;`m-jT81"I&ϪidY`4W ā'al!=#_/b h@*|JL^` 7*NԲC@ *-J}B+"B9q@:@P nx4>*V4E7,?*/|B#i==#5Z$u,.o<.2K=cAOFZS5:g @Ƣ]+> o! 6dn]@ph¶0BV8 /RXC =B6'*;vS*7f2F҆r;1n59Ⱥ +nWff-" =?@1N<1Fbx#JB/XG v{CWtDM*OA.n8dG4<#ңU>?&&vEJł{jRⅵEBd+CJA)Rdg]C+;21p`mҝلn+.n(>*8u y^ldTF$A'8},BFxi淤J4A<#!@"dͬ.g-Tze.J g:lqhU#9a$$10{+si2LXӦ@cN9̤I p 'Dk TcĂoY^%N@$֤֣QkD P`Kp@d\H XsNQҊ FXa `0 _@?` `O @@$C#7v?.$b|L 0 :4p8̈ o _@@OX/L8$y{M@oRE&*,D\r  ̤g*f @~ /}' }|1' ! `Ϩ" *n~!`@@ A}/@4.- Л04Nրl À'\EZҌx{1htؿ3H, DJ@(%j\C22U8'vC@&rb>/L8  6@P<(*!|ǂT8X Jр'P+@BU0l|3]G .F5,R%G|)!;آ,q%A{1Lj v@a޼8,-%>@Pۉ;#b$'{vP ` 7콲}3GPrB|G΀H}}=cP15@dT?ߏ`?0( ?@@Z }W>P>~@7{@oipO8%kB #(%\oOw}`( >"/  ٟ揝+w@s[X @&ny  %|o޶dz{(ɀR)}ǹ8}@a0`pI  L0;P?8' )d-#L|"5@ &Ϭsf8}s|',g( )vi0sGYvEA PIúLO72 1|8NZk- #U|gxք` JA0DPڧxɞ 213`q $~28@X9Yx U`ix1 E0|i/.4( 7xMֿ`8)ti}grTcO`X23}lj $_s{P.`1h C*~ { H@x+fzݢVvʶMXd C/]J|H^C8="'ɔxc &jBTkG{fŲ0kLxYhȓ!@(q8 $v=3AnP@r e'$!P zA;@6hX &PqMBBEEE&>lVpdx X<hHdDBc0 ҆D%9-Six'8J҅YcuLjfQF9TLL:@a@>| >Gu!^9cxAG( PCt0NFXY*Q2hěxrt(h␐ZՁpO5$ATJ8 62?ǹD4i[f 2eG}fbjV.lZKZ=U.=!8CnRrNP|{Bל"-8H.ܿ7}e9nB `\:ƙp6Ό#ڛ#TQf98ڡ!LF#F?@Pv+5XwKA-CZS m裀ŒeIX'"@^:4!:elyҠ x,!݀~@.c,j~6 ; ,$?}Y U ,9 %~f2o:@HTxP0yF\ i!}QB,vб&G^BVwUj%rl'42^o̱cT"hThƗ+_x,&^)żH0FPK7D+y|7b(#Q'IEKKҴHlcmh[kN )$@lQvŸvXx6k7<q@2-=fbBғ 0#yRvfg?lS,ਦZрCcy3ݾ!eڨd(V?h xQG@x 9 ;Ά`!U̬VqAY]`,VY0if2cx50vtJ$P@`,`@@>CG|&B}}FD3(klaꝢMiPdb"j0pZa(d-b!~dBl].@C~M- !aaĺ1ǺWh+D |#Ah"Ve.Cbb"&Dj/!ekCF> xnH# f#qDF( dȉ4t$̫"x&!wH E358s  F*'gBTLVM&b_'(Z-5lYC0 AE"FB"m{d PB@$]`"rY6t5hNU< Ml֢8` ـj ^g,Fa(E`2Cmz`>a.J,]dL a.,vo"C$ 3*pK60"*NC0eh+7*Ah+@-P~d-v&f&,#Mb@eb&,%¼b҂N3+FABĞ8J#~#ؑiU,rxk1&ڭⱆ""0=gfd mzWD:&* alJ4/``طg.&boP9Nh/_$ !#~NAf{f7=|QUX1jm֫>!`"deBiP12B$QBh$hD *QC(Z ƒA!Ipa(0+O$N!"!b &=@b &."H hVd!TAa, 2m1 A>h(-HAoju(7+-$U\$bUgXJ+ZX$~PxM)Dr=h bxgjA Z:FEXZN n@,'#(9b!"h"cHq4hX01h9cxi5W\_FgEj6 ,# in1I@vv3zWQ"'j2p01g)>n"0&D.3b=f:;20jUo+nNjg@e.BjN% *51g05D!gF+Vb奁 D#9R䰦J*oT9!,!!AAaaaբø(V4J_zcx4#*1alF+f|` ԅOx2bU mYQ/D\$@v@@bt=j#)89(Ta%'(*P5&aVDm@x!y{``"D"("/d@ B'G;3k(k
CV9(cgLE0D6YYt{b(" 06kv&d~NhcU푃FYx)H'd~/`f@Ɋ7%Ag8x)&4nl'j&KJha١ N?HPC`,ΐ0`.`-%tdCbеipiZ '(e*!Y>,7{ϤgHd:>bx5D( O΍ dYЄ(I&(.tm#>B̤1f箩h,FdLFa!Fv9&@v5Vw-!.LKuBH oA85F]+8A# p &QB=j,wd5LFxwWX(ɚ~dAf!?`:V 7i$1`zf&3אʖ(9&̗Nf1 WM.Ђ{D(vAmdD#V30Oh 'Z7!M`hb"Brcy3Nw$5G\IFk F#F(LCbtW:`Q##'c(ZIP`5VM"LC$dn؃P.0dɘcVCmnLaOΧ8 /NH[IGBb"8LL?D0$3?/tJocw([O4?h  ߒxƟQǛ,@h՟x8/`y@`MK~[`@0@z󟙊nHr0{'y%jh4Kgx̽`4' ~A){4@Z ƿ>+ `H~`3/@0@~ ~ Aa}'(BB <Ǽ𳱨#65)hZr, G|; 3`z1gĄ{sr8+CqI +Æj"1GHp1g I1~>J|={&k})gǩp|'ܬ AZkS80sWkXȟ̓ (3DK33 !`" @P~\h!PŰq{{ Z#{SlD$p!_ !h"'{A`a,$Ґ` 3(x{`7狠y0}/#1<-#Nu'8 @[$#4rYy(`z>4INA1es4+R*dP~&FnM#EI>Rj>*|qPP}w5q q8πbxȮuE)_)M\T 2|w^Qc7)0Bo,Ype8xRC|7$  CPjUJM,poPX#@jQ4xcu(K1iCf,[ :9G>Du&hM S&҈+#𭆈h19 ~NF P`{MiL"K=Oa(ԓЈ@ z!AŐ9/7PrhP̀XX h`qH+?Nʱzns̸(p: FNC! %+7Ā}8Dp_ުBA]:3a=H W^ald)-G 7 ({Rf۝@PޣJ (Qd7zRB.Ah<6?S4F)(x3DN2/}G**젉 M:jGᄚN2S( 1&6͡(XVѢIȑY}<{/^V8tL$7QGPG{jœ@1b:ȹ#o!6G{}`@A>V޴c $(#oWh$]B(rf?>X LD[a#h&fd B,@5cNg-!lZ&o7$9a旉QUՠ&b,@br-+$@NHO4DVM8{mn|' {H>bp/ԋ<4Dydað:P&k6Dm*:@$#M(Α 8d'$cd3Al+:jp ~ $@ <D8g'Bp1+LEDPòzD082a`h#‹:&'ꛡJMRo4D؜73^/ILS/L3&bLE@N*i!G?AA2`.x: >(c,$ zr)!xfn6@`d812A&2Oc.on/$x}AL(B֣Bp>6&XK,EdvEh-c[r8"%/&rh8C(VZBl&ǰ4g*+#/d>1f^vƜ L""65%*VBբh)>4;` G'/dw0b4S%>5TSD&NJ(Wb#Oa9ⰴ :.4sj@ |i"eb~f>2VdvsR}cTBn4D EOrr@!gV A̜JӘv @vG܉,D-Ip/‚9@8O2EX!HGɜM+1-4/GB2  [FB,!;"Iw^ǐLIL'h1ddo:!AxBkԈ0D6ѬeXa" 5%HC4,+5b35(W@" H*d`uzZ.*$8&^_bWмrjVH] <8p<&,"-(N`6]-4 6r B.T (v@y7WٲdD$C)&-=ն6޳̼gA*!m,a&!o)Io)ƃ3DQ\2ld!V:v&BabZQ^i9Q<9:#4B gnv÷ 8c.X r! ,@.kdhAEAtܳ#6EcxAŠ Y* Iyt@ncohfjF@h$B_i)C6D#$.2l!*A켔&+&E%2I/"!g*:q v-{[ǪZ*LVwG-2#BXC#Ud8#*D$HS)0`άx:$"!N _frxa`UBeq8d뭲*b4{[{18fP#'Gzt1.gH f&d(+c2‘wAI딣DVCd65$4"3>ilGZ,lQ -A4=Œf7a&j+-[G`%?IŃUN}b<-`__+ke-tOdyVNA2L,+yL7EzwXf'n+dX[<‹*4.p.2.3.V7*}B d@ԛ|"IB@Ib|wcR'/ZBqXT}2RGתzb5L^.Ec02沓 H..3 Y&ԄA:0̶@ZB+)b84'G^*‹>#gdDZh ʀgF^9S"`Q\b{Jgq<簶f8"<DPVn# á#    +*5|f2Rrn8)!<(1yƸǘm@(^"k ѱ!dHL:D,"B("ElV(4_$@{ Zp}/#}K,H0 DG@=J?OeP.0_ Kof'{4`-.'vA-/.~.LnczQ y"\ ~'$  ;҈($Hǣk3 2H$ȏqP`4}jS}'&1F2  G9Nl>˓gɞqh+Һ2M + |Т|:V38b*~q:Lb~0'z$ 0i~'^Y2J6V𜥌ΉEzǹHhbyZ+<,k p?0(++0$G d˕(H`%vĬ~%\z[ʆH}@=W` A} 0 ( ikFzGVQ :BaP@@o  A"~=_oW 2 D! ׳H7~= 5h8ÀS ~@ wg>+ ? D@@( 8b [b~OO64>p ,` #8_@i0@x( zwP.~H-[Y?@@|Do0J?O0}w?|i`Āp.*ޠ ,.ƀ+0@ :#b6°~/@ |)xG@1x =01@~`a:i~''jr(/}}7N~`@, >. `P |"G=FĀ|,1#P|* ~璄d (v`vu|w, j1j=굮*'yv @"-`>:|@hz SD}:tPPGϙu@9U޺ÑN'{+Iƺ`is0ǫIǟ+<~,t@) !~x 9=W+IzGw煭+k`b|90G6{4uI{.J{-oʉERȀ=, >8`i0<h܉ >Yn[er*^Qf\8 x")qwC}X?.T{4)C=_H\c(/ޚ7 ".@:kt! lnQ9@b/Hp ?eE `!5<1PxDR<LjxA7PmQ3G7܈R %)Z403X] Du ҵ} @<D7nt8BrQULήl@!On˱1-\wׂ& ]Efy'Hy?Nr0FF7Gƻܺ1&ͰCW{7A (q=DDb 5*#oI)6(ķ8&q0 w[ Z:J q;j#qM^m0]Bm $G  h\*GCdh :=忧*sL56M|`e!v7:NB',e`e` ȋTSP~bp! ># IהITCp4| D< =:Qߗ)&}OdECeP7-p m_Ukh|=9姅EQb~luP< >+93Xx^k8 ) @t 7Q=$eȉ?1h?~cln,C@jFKX>e:Y;6%ΑU]Zᜏm #(#q"OhB^RLfct̻GCf_&VakdZsH T} = 1xAMJbō7Ջr:]^Qg6>\u?>x=iL,GiXR*jsP,6Aa!; F; æQcD̪/*<̤@4 `TA  ,MHtj<vz/&k$.InEC: 6;xrrk/na`e - Ø>k1䌓4(A$22F 2;{2W "< ,O$oJVE##n,6h"ȖV6A& "BbDQ 1bT ZJ1@y2*",1c;NscG:eF\9"j"*ǗG*sk>a+d0CR d/$N*$1l2j#z#<# D8Jl c 29''14l; @y2@+bEbF]@(92.zL"a*Aa}#FF-,gp f(/FFF`D'V}`2 @X L;$8DF3DjCb6#,[bl.Vg%c7q甴ڧ5!c2O@Daz͈qH5#Uan'#`B`Ȝjwf㧎`/݃*0C1 c "*a;J P bfz`95&;0#T¤F(m.}F*phUe7Nď@qN(WZ.3+<+,J$=&TtNb ĸn<|jV4r-p=檙Df֣64#9݃Wa7!=Ѣ@('n#$[h|x4Aa@@ S2+h 2-Sn<2p> .{+Q.IF.F,jBl"FR³2 #5" bDŽlF3A B"8X!=ނu$Eq&/see,)F"ivJ+BǗ5# bOI$F>W+Mx$y# vlϰbxװ'c"+&W>t<|yI&be >IwM=(vgN.dsaR6eeD¡p'4ZVbΐ)D5N6c,, 8+#tWbbp5(N/Neae9#ʌ,iNGdn Ȫ=]09La&̞XRaaAc(I#KVdt5j>0u*dpr"-G"r @>p& 8b0$:;F&M++3K?oJ 3;"r FP-wZaD ٸcb5!f,= J&#xBI/“Ȟ&F5'jVJ)BH(64?mRalbJ2cv&8#~cyBF9D1f6 N]! &DQlv(F&m5/H4^>®AH~/CFD/b9RbeV; |IC>3Ǖ*T'(>bЄj-ȜZA` 2PGGNQcI׋3b@U@r`NrA ^z2Cr#DPx`;+*,@E"P q ""."Cc ,c>3Sl#& &$& Dxe2#$UgzꄊTCDN"AG+C1)p*1ç.d!bH 2x&I*bi8tF(EIGEk*d}"wu"b"j 6-v"F4lJ2K.J$v$Cʊ,qI (VDbш*6i1 2pQ xI"..+UfT:"«ޜM$'b1@x$.LL>4h/$ Bv8;.~PBnjxĬ>NrfS`{8 ^^G@%za:lF.$8EI\bpK!h>;alcҧ/ j "59dew)XBND\ zFF{2e8sp 8cǬ/NEXKCc7~l;qGSZd7u<"B,.b19#7#=c릴?+:LUhM}ladLRP&R(>DT"ՂIW݀h&æ>|'ev-lD"B(k8CH9 ŷΌ,JA\Zk"m8! vwLFcr.Up0Yn-b֖g@k΄mF>Daf2p,@ Prl!hbF/%odaæ#i$-Td=f !L6@|` S AG&r( ?ߏ# lD@'@`N)~_@' g?$60_@c?`p> >ߏ@8e@t;|/, 9;{[,`<"&>jOt( _'h }&p ;rW~0'K h~ܱ) 2(='{ >G**$0+~iB4#zG6I:j;f` -x,~I|k4bB Dƥ"G"}+YҖ{ Ky|,/fG !ngt|Fy̩@ B8"03x7Ĭr &К`)}k%` 1=3漀, `\ 8}N J; Wi:ty訷srq ΐw:= qr`*| 1J 2K H~YR?pg'izۀuNn)X HM 1 @O*@azjh m 1V-O;C/k\ % mβ,MKP]2s׮`kqf ƪ4 ; )vj2*';/z?*P2 ~|L:y{,v @( }X?߰x `c?O!J /{~{Sp >_Mɬ} H`@ % {{`@8_ gPD1@ ?5Q @o{@V{E~>5n@gC@>|oJ ׁk9X ]~Y$a|8 :nw=!`!@B)F} +$hR c$H"$m }Ǵz} p &GG,T0}=@r205jDӞ8@;4sL~,,{ & B1|? Apʧa{gQaGr~ ,`2` m |&{yY~βu [@+G<p Z~0|Gw8$X2/ұ^H: ΀uBM€@IyɱžM8@S@P @c+Pc\{6MIzT'x(O1# +nyLj{Q"z!z'HI(r+|@szǩ` 52eԞgܠ`'G$v'T0 -2~ }w2g<|'6$x\t՟z@kMʼn CJvyv[ 3`I)'N31z}@ "E}WR?a ^Ɏf!ƞ8fH!4ɟ`@AL>`b A8׊N4҆#f4@D8wB;>u1o B4܉dGL"q°rBXeVd1E=/H]hp ( 2¥W`"'t^(̼Ȗ"@A_#!a>fY"Li$(yO|.--@K@r{QE |KI&He BtK"L``=Ң @9:BNI**`8$t BŎ^<2l/31BFkaz'180zQ'8v!:X98$zt9P,H$d'cy)S$( 4bLxo`,6F>J/` H?+c,BDq5ƞQ\7n P L;64Gf;PҺ"@@r.e|r~d6el)N9yP `eyCm!?Gs(&ЧbJF3=Pc PQBi f:\QEHt DbS J s`=Lj0EA.vhO<Ď|{C.5x"it'$@HP((π bBBfb~O d|:bC0%6, oDɲRevI$env"`-*(NTx~:\\T#0x`N.²7lb;&I H& #f^"kf$a!_%em`Lp$/\D4C\$2AD LbGGE_ߣg($ܪ0/!eemG1HCABiECh1?#4"n'T[\i^P'H?#Hh҃B E1Dxb-C$/02Y$"owAP+"vD4G$#xI5bl+K &͆. ƒ=J&vF\`\Hf+~B F R1H_:/f'BJwP_e #n'5cP5H4,f_d :AƠ5B[cV`JΛj*s`2zg:EE36xC!`+jLJAa6+s="cl4‹BC,Nt tKE$1/hXMb²*`r<`:@  \BEtbD5-nd"$ćL #=Dcr ORg#Rh'91fz(xT~*B?N.TX`-'QGN$l5o'ch_I "&bqB+x^B`.! KZW|2cf B3%G<nrpaPbp!ŮoJ[9.oѪ.`BpbM'DA㝃gb'`&aa-"d(Ź,g4_)Be 5Jb y@ 2"I"bz8BN6gt}C /\wҾ-i1T(΂r'hbs$^>cX0;Eb68&Bd#l* $Hrvm`f Q$`r5'I 6, 甬^u2.o#hXd-c> لEl FhC7;3 iC=^4>XEC vP߱9x,$$&1H/V.LjC ) .Y:CKEjz-BEĒgu08$ )Y<2:a/VkDe~lνIN9Ì "v&jGCXNk Hp2'܎jƅI|68Y%C 'f4_lRB򂓅oarB-e."C:#O`!C/6 ("Eh(>tYzd1.sb@&ofn2E(Ffs':t(cgBu4 j',unz8X(dcT^QvB3"Md>9bl%,KHBD" !!Mtf2%jtUaͦ@\fP HT? )_"PJKu6` .B63/ p(, A}p~}O( 1,9T6H_/> `{H)  ,P!|O+ ^r|?/ 0ͣ @3 ~ }O Xū@|E  OfX*t/ܿ+?sxEAӌ^7z=@p` v$zH> ~Gʸ: 8 'T'0`ج (gy+x*p`y|(}!g}yx[Grb.H誵5G,$RCs:肺cإP ~H (0D-Q#@ i bӈ,1T `yEZ*{ĠiT{ݖK@9A|8`9 8@ pY@R_l,y@A܏#QN)l@LjbU3ip2 ~C"ijaGNw}C:pz~\B>6g{$e B4 BG 쨹B1@nƯizPXG ꜯh]E-;y|./р3>'ӊmc%Y*mHbHYy^ Q'y((B@0'`Px= _# Jg?o{O>-0ɶ<8^?@/3]o +u"~{!6@;D@4W & P>J~0h E/܃. ρl`0uϧh || PK ~ޞ_)|~@Nl{~k#F'|-SJ3}S" Mb| 69y~@@\b#܁ (pGH1ğĈAr G }''C[Ձ 'V}!21b2+m}P A 3;/۞IgaQqq)mnsTyƷ.+k2,+g|" {;lҀXZ@F( !0"(  A,Dz L;Y@v\Gte+/D 0L1ΎRA{(׽)'@Ga  v("9\r@g;p|9k(Z@ |/`Y~g@r!4+{z;~6s1 ;X~1ΞU+jN@.({#[ܹ%j"/ /^.iY:_U[ G-O[ 06GH.{y`?f!اM(cpY1؀8 tUS+1gaǠ8i<5 "!&x(A .@4`!$CxZ Ah  LlJSC؝>h()`; d(trpJ9pÞK" ࣻk 19b@I]Yf٘p X!mI0Ea6` 9c."tA3f&PQqccٺ/D̀5?KUGݭ  (59vEZ3yPd Y+62DHDaMc)fNc xMiނģ3-H8,<fhp$85I:kDM,P~=ol4! %'oJ9R*sL#ӎ?iӺClx7GȫU=Syw(y0VBۉ0 K_N2wm!Rp N$ pN%F׏uPW`9ST KIeEܯ"Kg̝_5zKnLv-2[v/G8qN.+{`.Dbf3H%q N F[[REďg!wyFF_W  J>V{M)#T6R ~lԁ(E~(D QJWyży(~a`0~GC+d QV#P?GѬeߋ!~^ y *> skfE@:K,0D; ,a:@"CBTߊ^( a}VjcLڭF4ehy"L0^k^-ʴH/l)p@+cp(C0@.g">,,3t!`9d@"]`csHv`@.G:$-JC, 8Dz&p!^߉L;|q$B+jFX@ RxNf F Z KKklG"i6C"U +^B4,488ʡ`e'H6|ay"(b"dB,,0^o j*> b>@tRU'BhKEz` T!e& HaGP!',/+b"|-D$G2'b~mCHW@^}+C_"b8/dˆ0# 1e\k =9C'*R|,-Uxp8he2@:(--Ԭ''IJ扞+cV-T< nDP<2$8†9ɦgxԺ20F:!c.丐G Uʠ#r~,p1쪉 5d `bDsH.D/l5ɞ1f>”#;c@9cH*&bNo":\5c!*!֡AAJ`Ava= , cGA AC("?BDnEd+rLl4$ :" F (x *h!`%,U #P⺁=14a4bgAXC ()IУ&@"A.6n!o;Ai4% ef"3Id`$#,sHh.hG{"-CKC 2 ʴ>4G)HB4q ! jyU4))`),l&!bD&"&0DdV}"FK,H#)A|cwCj!5^kƪ"K M%\H@&n$/˄f(83`L<5c"35'XCBRC:0A⸠B{dER" );Pt>Ih 5^+k=L!B9_a BWKb GEd@r"bX1kI Kf@61`$!di,FASU8`#b!ޕ"'gD>,b_e2$^"ЍB2Nh0'I4RcXC+!*'D F J/钁+.9p1eR>d-((uf;´3nM Ae.LLg4@FĠ7Ule$klD-kbR0<Ц1k ,bc5J@ң6I|!cٯA2d^*46T&mDP$4C_ bF$̤\`J^5@T4`K\1ӆYJA@.aaJlLƮ5a%e' H]Ϊ/5Dɪ|t/e:0V`DnVx.T BB̂tz;AnAoa4TE(Ӎbv.s3r b0чz:HPHPpFMa:I44[IBF3nNgt0"hp-@(Jw2RGCH# Cv1!_j@"1&FM:AD,yB|7'7c/n+ ?lc(`i UҸ#߁f,@/c%R60c)˸5U>V"0L$x6ŒcI _!Y-Y0`b?.H')H"N@.6@:;ΚÂ.|bjb;1 L( )Fw!c*nP3xopob'´4N]brC*C/1`7>b yÍs'MhkCBq sc'\㰒)2*t98.~&6NIu@34Dn1U|#?tPF(!kh~(JG֢&PҔÀx=g>FD2 @ej 2}=%f, 占 yT0`kg/Q Lsr$&tADX){Quc8L> Ҡ(`81/ 05e!FL (>@Zb6y%RyCr_B#Y[hDr}e,"]RJ\  Hy]cH}n2zawH뀢d@Ŵ/iRRj@b1tHh@7K$DhY"0m^+ Fri T68 }Ԃ\Bz!jp} $JF95FK'K"N~'FcrPFRJ6Ȍ;xQ:`_xq8q- -ľupV?&DaRP ` X xS ~O%|_g ߠp$q~4@ *F `_~/p<<$P3|GpW'}>@'uUppM/=@oSs#\ߠԀ|OS uW{^g?7~/.lt9wg*>|g{h8z.K%)p4`  R $LV!r|4@ (T@H m@*  I}x9@4`x >@K/>/ G1S?>*$Vβ:5`hS Qʶ@h2P0z^}@cAoK*d ޝx% iby j+X {.g}!y z}VGQҐ$l6X`$8k~,}7L~b>qL읞JǸ Y{K֩K67e)*g,)(ج,"83-:W#E6' Q ǀ*V(z~ЀzI~AG)| hBPH   #{J@v4='@ƀhoN~X!@x~;;"( KqB?"`wNm}W3n|ά/?g߷ Gxc0> . 5~-zGH 0Gd( +8Ǽ(1r{0*& џI !D>91RGǸQv1'G1!* 28 nuRyقq!|GR@2|Iv}!(b(R fB$L}̉ āQ" < ]Q(J ~r|1擆 )P^p(N/Ccwt,Uݔh Gt}"g > U Gl)l1 ~|OfDy*"`؀@(Ukڃ7g |۠R|z!IH8MKL@9}*>ʂ L-z(I̔ mCFo!MU,>kr-ʋFЫF~ D` ڞ {5F 2 "/A@8 jʤ~8#ЁxeAgF ,DǸ38 J< ,@ @$bxͬXdY儹:Y!@ 8YJ9i"_c@.fG> "e d an,$t|͉qW-ķ@MiF}#c,mأ7Y#n)W%.DqF7䱐_"$=2O~őN @1])Hsct&,/~@+YὙGlH@0K,~X);(YGeOz4RzKdG^Hn84G4`|zi߰̊Gb#a8XØr>Ljr#Xb-̴&FI^4fLǢt8G4fzI!f!X(@W+h (`(X[A30@xi|p8A `&@X7`%`DmS!_߳m\v Z\uBQ 4@h)@z@ u>j ^( 6#ɏet 7V@ 0n#%p?h;<#bN;g\&bPyW@xʎtOHKhNk,dؓTG¤ŀZ@\sdS1`@8 6\)#I59a\р {Tl]1ǦqbJRk?d,g yXk\c3 YŷzOah(ηf 2i>c%I0 ԬvM=@ @4 . G0gN"D }pҴ@h ; .pr Gp g0s]69'syBx44Hvӂj s+~P<o;x:qqi%ƞ@4C!|Aɍkb4:t1i4W+y5-آCjj9a5ql0~Mb3" I'hDw\upTb&0D `PG`NA'2m”B@d^K@!AH >c$mb J['Ac05 k+L\( 9"/"',(CJ#]\@B' KbB$l &6̢.nUN6+H͇,)!D=*fE(t;. -$ˆxDyM@iRH8ú3\k8@.('|c>6.Pf:TBR,F&aA瞞OL D\R,L| G"Ψ/Đ<.+.DlgB~ hP4k<4b:Aޭ;~tň+E@$DO\@bl`R JTt"'C@FWfNLA-G&uDqdjd ET'((C&/¼`Thj Z=#C!/:po8þ1$y¼L?ImϚ,:1Il=\ob.]5W$K].]kqp!f~-18k+8Lff2*B]mf$,P,x"f'~ xP8ɒ LL( U3fBp]O:fTer]CXFf23 {|-IB+O|B å&1 >!BVpf&-NFd(8A\( D aAAM4'"ryOtBWd@+F;$N" 'DHWmL```(0"BFo4b;Dj䬍b $."P-Khn'd $@z@0&61$W"΃dP ]H ;t&'+cL[ (3"PaDPJ*&]"+.a?ff"m`$@L0'2ao^hr6"r,nlV=B'p4ABNLHDr 3ne$F]|fF!lLK' >RrdwS~mEU.O$2>&~Ft [BgsJ%BC$o]DQaF-'a%+A)' qe, /hLjBÂze*"AM.$F0?5DI2$G==HOACj!aa  z0@2Jx,74/T`UDX,5AnFSi!UY [BbtfG7CلVwl|2r,hAa ;D*x :k& D RjRI3$vpdLC*jJ(CB:$adŤl-d8 T㪇Tmp%SCbt#'jB&5&>=oo c+ MjfƲ#E΀L|Br&)b(fDCb^ET.D'ĄJ&꘢+G:)tBc!IEr<(!g4C\z"h (!@d@0rn^Wx0WF(#WfD{`>!!qFǖJGY1.N&@\,b.F+F!pb7QDcbGʜ:W n&c&# . 7fHV)Fc0Lt9dCG EpEn "j'B!"fw5$.D#tGb=F#w,v? az hh.fJk6w[;c$sL5cPk@YY$#Rl+LyŒ)[# 0b0vBw>.B )CA yÆ7r&#bXanB,RcS-(ƣƼ3-7qeXtBp''-W ($xY5CZA2h+rmbcǀj`4`<O5C;Æj)ba*ջxE8K[N"!Pu$P$R;DI0(wf0,0MDceä0n$jn=>-t`(m`* L缮숼DRLQAd2GB:L+-NV`.h!Xz;!'8,1HTgA&:M(׃V$\-z4yQi:xEcj'GxFncBz̍Db.IZC j/J{M8(T =Y8l*JaeN5&`^B(X gHA4B0S2!oU IR j ,pAx7N- ?V B!n"vfKf.]b c+H .&0-hQbLGF-# W{W? }>` D 3o~@`p 53` }?&o#}rg`-Cq*E[- 'W "<%Z 5,;~?P5xYhP(':2w WB@'w>@/w ?T(Op>@]u} 8`>ޯ׻˃n @3~:* A$L~ǑTlhGavOH^\HJ,~;-8 @:ltvҀ@` 1Gpl#'!\J1Ju*~ myHZĭ Ǎ' KS4x$~L Ȁ tI`yӽ3K2LV| 8y`KRSJ{(UPUPs}'SPA~:Σiq.` (O!J̚zGH:X}'8"ftVɀQ{"Ǩ 2@X){ʂSޤ3\}ZA}Txb`AIT<ʲ])'"Vĸ|@(Ā1`+5IzEI|˩`T!lzgŀbYJ n'ۋx ,Gi|Lj "~~g P8$A@ ?_ AP`8oxPdh6$ +_|*F A`L ъ0/AߐoW/ r@KbCq0g}pCo/5 ?" ] 8k~D@@,\Gc`&%|>wfvi|?qtg6ׯv4 ;<6} Ik{|A '`H؞;'@J{'j'}G n 9~+~@P`D<|l|i'g5߀*Ư/p~NZ~G.~Yfx''+t@ 0iNCErK|ڐ" 2 8)g 0+0'3 %Sx*B24G[>Ԙ@~ӖРk( Rz~idS5^!l֨{-KґQ;p'y`1< %gyP]8/@L`p,i"텰~.gډ1Se@~Ns@sG.@,>ڰ쑿f Gz;-/6ŮԼГf0|{/T!}ҫ(+rydFiЀIQj`@kr̀:|'Ϊ"~gʰ~5@K(J}la|G Hvp9 D-X GP F ;Lr;Ǡ`fA`Sc{'j=1r@8zQ%ٺ.'8]@Xٲ@4(t,7~p o,` "o64> `DP GJ;8?4>S"-T4>MaLd?hT&Wz*,wS0 2,u((ɠ۴RwKPg$'Ĝy\14=$tTCW>8e9bTY;*ԻĂ)txBq -}Q =FU{f&H` p9 ð2Fr8cѨ2h]A  @\'e{.+a2R oМt@;Tm#r72ϳQBi H !␱N#nC`XʏZԆX)3-`=Έ[C'0x`D > D$C#50H_v.4")^ 4UIJy  @wTXJYvdp=Y[44Hӗ!U/( v<+r_KQ9dKp!Hd2.jA⌇XN =2P “`=8vHGEG4 Keв򒍺4:yMp/9"B'D5ĬtL{ >VH8x>Z"hÑ6M 79KUS_c^34$ALa@tfYF_Hp=L5v/UvwK,= yA$hdr'\E%XIpBv_Ǐ=ǨF#)5p&T?[!]zLTc'Ζ"-f= ~"v(|7)#x4B]⦁ $ !2ziCa6 SÌ^S4|_b(\$hmd5>D=4\0IB|IƍeHcSf9$Fff`=4m9=ch9 ~/3 aD4"L69h=)4H6@UL4 'b9Ŏ]a` 10'kCR,7f866r.0MxK!-E*hfBq "M)hz@plAlp XE?#L(d=xaJLx :aC|@d~_#>,lC xØ10 ʨqd7` @""p,SfZ"" 2='P'0KG:$4h;cn6aXb p-` dV4xr@ @!2@4""cR4 iJihC,@D"#:(47EbhiE/ #`#d4QntJ.#60Bb6'2 1"pm _Q7O]bzi5C>&,8"*ADG -X3!l!Ae8r:!g:"9szp}a#NZ.P!jB!3Z"m!$=tdMp-I*d a5 ,F,.uÀH !.` : @fIqZ.4f8B8 7ŔfBT8pPB@4 Ix}F 2)Pf#zVj4cPE#L6A>CG)t:(_ 4cI 7'@`gGiJ~I!:+t"}DFG. 08gBv=$2;Ö5Dr'/,fR22J](D**&"C|eF2sbJ.G>)3X3@"SDmpF|(l!cj#3}Mv-R"&c bȅA`.@^BthaA.Ƕ6"$(7!f<vatQ|D;K,c>HZ6F@$4">`$a-LCD5T,'Am!@O(` E@+"hb'DMRԜ8e+$SbiC qTfN'0-5:-.pC6Sb.edn:0aB,-;'0;'4C3-J*3,13H-#!C42aD.CK*%'&dɤFCne!VC.m쭒.҈#$0S4D-7 P7*.7к+B!.8HD<}vj K,% AX^aBh,6fܥ4Ď3r!g|"VE>B.%&[eVbhEzs40bbp8|"em!B.GS măS2ln T0 l`aaF +$I2cb>:~]C`h!r ,pax*(%4FLGv' 0MDL""I$;Ĥ,zL'L,Jc`ASo[E!ވ¾0c@SA80S@{ nqzAa08">""!48C|ti q*ʮ$? $L4:[@^9VLs!$x!f `(5 0!ьvѽuf}Zc^n5F3,f<1$:S"}){kUP!u6wDiBqN l!N\/AR7jsVJ,z1' cCߏ\@X`b\hFAItRlxˤN`, de%m-CDOI//038D,+8$`$.Ôbs6䤐C>n;tfD#".e|"?o;dG*7Ƽ4,mh"^4P!f]j,"WeHG .'_z!l0]V:r<4*2#Fó\$fd0=$=J<'$/!ZQ&辩(w3B$;.ʆLb+n,tmsCtD};6S *Q=3C1S0^(ALO=%fmCe&/sy#f6VcF-Umô.EAp*md6'̛%c삐7Y%bƴTdIC7 :d& $n!dd ^(ZFzGq:pDʎX#17.bĀd4O>L4)Z5 22H#i*. AZ0͒g)!g pU#b.47$4%+56+Bħ.ZFN8 lGNxH'=dxnTJTgWGv,-* >?*"5*sa!`f:@"bx5D82I=%b0=@h~rCN J0IAIt/tHcZ7xM0V.H+"|U Q'Cq66+ĐQp0DaS @" >5$n] C£j6ӌ?ľkj.rCI4=B;Qr6cNTGB~f +@ }OW@ {=_0 ϧ+J  3A_~B@@@ "J|P' K~#@@ `7?R/~^砇(?o8{O6~ƀ&B,}{y>͗c9`2Tm7׸kkm(=?P0/\]W}~he1xLR0P䨉~#; ˸8* ) 4x yaz/%(#IП0!˒Ω@ }G& Syy`}`)C` }'^ˊt$hh~!GML0*y` yT;jP~g|:+,-ۡ7Z[ Chh@G7;|6{ɇ⠯+p:5F6|ཬJ}T'=/g"i˹vi ɚ xuY @@@/@( A8P{T4"?/&{ߏ}Q[;Zt }߱P04Hߠ'z(Px  L@(`P0 [ߠFx05 g ~BߚP'|z"6{o]X{Ѐt C{"+y`( W{+Ǹ ~ .pz }sy1@*!zП J.7P*.H GΡ H#29(@R J{`03  " } {`#p|*~r<𣢇N\ ]D20m@N a&3( ii  6, $=W7˸ ǣa?2F(.>LԐ  uBALR.} 1%%'fƟ+P-80Zx@ ̲0G{O yڇnȀ@Z-]=VzB@,1Cȯ#xPq'|~RR}`lǹǬ&ùܧ$ |6{`{(GѼe#:R6!yUt"Wqp{`E >P9y2gb,=0 %FFe B0C,b*O u6dGHuԻ9"$a˺" 0H!z( 4D !:J17BblʬG(s6>5 9I:$9`uakPQV؝G'x,Px,ȡG =SDF}Ɛ̛0S08d2 @1@=qGt>$t05"`'z+Ғ4󩝒w3. @a@%FwM$qQQO $ y=+ +"cGF"ml4=6YpXc )%#yCP A@`!r:K(EN2pL Ǹr"pօ,(yeE(ZF"h>>Rm i% A76G2ɵR4]c^>H6=1b\erX")* @ #?ApC~p@( i@5 #ZI96z Z <}p ;r,|UvAndNWh^1$VVĶ  $8q]")H:?j&+`bRYFJB.j.rS#Zg{g;ͪ3," bvk2@$BFƷaChLE m`KF@\(WZ:g@5 T$?hWlv#\䶐ĸ0c8&L1""Ćb5HL 檺 66(:-Ȣ8$& r(_tI!ChDӂ2! $ :$X `2`n~=C&j'b(nJBa@,@@43e$Y$B."#P!0B|=jCr M0D(^(C&"tB)r 'b1dۢ.4gৄ$cr*#D†G$,4QpJ#"? ؞ly\z2fOVD,Â,"C.g+f9@f2f@PG+Lf䒭/r}i.("c KC9 飼=B9(MA~TE"D*%l!-dmqulj3 &vaSo~Broe`U3"9, <&.`D(,7hj#d j&!f !!%,s.=/$4BC< nҌ 2$@ `$!HO32̨,<".aH+6d=G,>UFxDAKč+vB6bJB@\K@INP(?z=dL!ۤZm.b$/#K58fAi%7G;'Ej?+IJ.TABz &ġ@rW1~.CLP+7J@GPMB&.N!(7&u :UM4V _$} j*d 1I> 1 riG9l N$cr=Cd6%*?"2cS7}&c `n@МFAu:C1B!&V|B !#eʃJ`\I3+PRPP@h*#j:H-%Kο.!,k)dG'2"G0+h% LlJ`@-PC"F۱]1"1:Vz]L ERj,2x@I=r#B }eoEB@`!LCxCPRjYHVkl.:NN’,D\r"e5XK(fC~(@6.`L! 3X$=wCj?Mz#*Uu(`/PyPu ,t}Fo7/(HZHB|1BAH(P<ŘY,!d1 ?P1(bAdA9XRU3~{)MBbba tc*aH/ fmb8$}X,  z 丅*ӘK6>Z:L9ACRtBdH,FRFD/9 Wk0:4/i>2̾#Mʅ'D$JC$@FzFnA(FCl@FPR G)= \:0/)\4*9׼,d9cnd@ LB.THn<,Ml-fb0ڥ[*..fb&y |#17UEl?I'Yw7Cu6+P0b#A etxd<C-a.7[6P,1SKe܅gVel,f5.3?s9AB$gf` _#b9dD/"\JQWbȊ$ACdcQd-bR"A@a'^r!]ԅ"#JҀ"9|Q t@` *xƉZ"זK 8!A ,yϚ7BU3YE*uHH("9 .0XG"QyC#dwz hr(?/!G( ˺pO5?l5 ?W 0 zi xpD10(8Owvj3@/˓8}f@'֝h2ǨQ#WJ+ Ggn0 p6yxyh@~@c,3h+∣/`ޟ-Q<*Rϧ )y|/,$B 'ǒuۚ|m{P% 8((>qpg%g&{êj}G-;|NJz9:! [2 0(EW7?g } ua ; ?7F#@g 8}>hH?_Ŷ- > t_/$p+t>_O , 嬛=+e e@@p}N0 >=" _i,0`|{p.)+! ,,/h6 #z>)n1,|-Mn~,@jkP}$jG~ǣ | qq'~5 ;^܁ 7L\|k{|{ {`!`3hE|`AG zG@ ʳh \`pPa;!A,8|vl,gF@k3*yHP/RZ-ogC4t #.5&}4_o/}Xr! {?j|ycl5 h @meGPs ,C BL,{F+٢fq` 3S膔8L̳X2'Ǜm&,'6mϠ35[Q%pbg_[g1 E  o2*MaR,X6n-sp r ^~, {tlk1vi z~-?.>~ǰ{|ʬD s )?؅gHk dYA1bf,$Q1y;+,NyE=a!ZLWYTj.̯ixFxQ-1/)$^r@z4dM5{xA |q2MS^JY|0e)#<ȉdt}&Ǵ\>! pH= }&b͡qkEr}AWǾZrQUZ plK}R; V%ARb=@'%ǃ*1rQBk !yV,OG=@$qA Tʏ] aK ִ N>e*NTN4m]a'U`B6BB" lٖ/\G>J6:6K@3 SRmK$)nΞqMY-A_ - ?@X <c@%U[OA8 ?K&:NH6,ߥ$wLKМ^L +u}g@Dpa:@Aܭ̛jGm:pgv>)\L"x2F /*@"SQlKbW*!"6zPX7-pfe@$OGGC-r/DKaJDd24PV""(r˄|R$v!ځ-0@D-#ܹFd~ u+2cpp!)xH;=¾w tdf7(!6.F@ʥ,iR/bcH/C!K3"4CFVQ5q:2bnf&R ( gt;F!*Ѣ&т&"!rH1@0 @2l^b@,j "FN&Z?!A0{K@o^3[-hK1’cǦ>I/CBBpC> CvdNcCОjg7V2>tbXL "v@l~sjAw.Z@HL8e6E&zà),0#^$v}8'aCܴ\  ^4D}Gp–A0$ 7򲄐)L(c!6cd.8GjN'na0BHJd7Å'3/^.$GчpE-0CD'dNNb,tOE6'7:6bW$4C"̃eND:Nzc(ne V랰ANge@IKCV!<g!?l.xKXg/AApHM:~3$72R$C([a»gVԘ(YD& ,уh`'m@ Hf`(`t`| E%nmg_6,##,z#DOCLңEPaDk#8o|V00 /(-V[H'tu8a@Iup(@'iv5,3ǘGj1/)jXę~CdXk@&l0"E7[:Gjg@,4 X7 ƢFc|MF645n IAf@/67|R=`+PB$,'fKnc@dB3D8'8^nbeGFjwC18oPk#F2",2 1h8P| Eb>3@c/NK,2W`!DNzNP"?"4,C N씜/D:4A IȎAe2Rp6Ob-? ^/C$el4"%$EEG!ʨ!~b7 rʆPD-yXe8RNXzhI8jzĚIBDC'@"7Nô凾' !]a44f('+s'Aֈbk=&4(JjNaD\386!k&!G]ȎܭpS&Dr$[h4dVZ)IwDfΒB-o 6nPB N11In^H,*"Oz0Ԣ"*GkH;C(A6\,ÒQX83/KRG?xMzG:n"м5to-+@$oԂKE? ?ߓ'|)E{"٣NG:7ͬh@0"p@7>+N  '߳?ZMD $ ! p~O@ | @(G-HAh Nyy w1Ķ+B%(&km9@À|jg4- 1'J~)gy)0CV@Jn|}T#^Ѐ( ˚`AwI 쭾G@BL\Dy`QބN J]Y}.,`[,Av*'2՟@!hhk Gq{gG 4{B2K4{!R, }xn~$hQ0@Y}ߠ7}@@0s~4(`\/QH ^@ $ gR@ Pz~~?\~2p&>ݫ@@ow2kg@`4H{3+ja@)z@+>*:|"+{ FAy΁@)ꀠ 4Ru 2g~8'@݀`[2h~d kv@(~-*Snl:@+#$- - 4gr, Z |w)G9B4ʸs2͋sn~9Akh {${gIx|'i]`  8-R@s/)~ +`Ƞ(yӨC>lM*։'zz$#@ }b > z@Lz'C *˼4a<~e3K:Ƈ洁0"|y8~Z~{mMꄞܙPudS@ m{6j`0gݡcޟK}L~z:"ɮ;v~S']z2M-e(/S 7]rmb^?SҲ>gtA +Wn@S+)%LY܆N0&(_ra `}" f1g@$~2D&|Ed$UX,C|<, @t v3$q(#rQ9 `(b@-f\NZN.`eu gǺ t˲/1 R0TaXt$*ҹKdV nX(-Jǒ^b^!:XNN 5% -E<ˣ5%zb{H0 n@!&Z Cy#1_Uh - '?!8fk^hġneK #KRq1T.؏c*"G⛖\}Dl̗_ 8:+"Aa"43n>Ip%C  @GZAQYE?Y :H0!@`.h5<#p^h < :">L4ro2{a<ȑ\WN>N/2ԀaǵD@ Xsm3fE>P. 1CR=_|aK#TCv-+va+ H CH!wijFp'H  4hqI9Γ=܅u"9zWpPʦHi.9{^> clJ=7@IF3pNcwi6p i" #BI Y$\F ?Q`` 0`{ 1GJ7 9MVcD} 2< q` 6|Pk xDMiXXq"D F8J.,Dg|tYX6)rJf@=ʑwS¡όZґ;Y QR'97ȇ:Ym #: Hbĉ#a/ 0!tt Aa+RR=rA@HB1,88S 䞕12E(p8v@,rAȤt}$e Zf!-b9#"(,#dnTk(.B1-~c`$7'a}(,&2BI">DaEސbDc_ Z"tA/%", 'B"=O6,҃L#%H`urT<(ljĘe ,IBl(4*mx@ `JnFdN=~C j#^ԔK/pnvc33 j{LNA4́&Ba* "i>2>/#h + khDmf,%T lV+:] a b |m =z 0a,A.sNEXR#@8B8H"օezLbt(ˠ+:0cXvp I 4 iIN:}"EJ}>.""b uB _8)FyJQ-B+8RIS:/#5$6" J'|3҃F,gi$T2t2TüHlBS92Ǝ9'JIµ* F!Z˲F$b0NZH#)\uH0:36Ob" VKckpX!I!fN.4s/fZGCzq21#j1"z:aBAa8 2/rdEx2i8"jCf썃P*"IHŐ!*Oh@"` TA!p!MKmBB\74b<P D@F("X%  ]&R!zL" |`,iF8+8N~*h-Ě@$fdc9CQvMǶ3㒠#f&ABaX&@NcrcH?VF-DbiT#.|>z dNQL:FT$6Zɪj@jR=\,I!t,V&dgT 1E$ɸ9a =/1h5@,?aI.NPF.e"#"҃p:#&QQ4+m@r2P ̍_Cg\eŤH'"@X'!=p"%p_'PJ|>Ў RQ_HG&7 " %(>CL@ tF0xi lN'lUPWsF""$cd,C-h?jGGCnbxfIpG(/q.-5 Se,Zp9f 7 w?"֟D+!7!-FT(8`ZH.+,'KPcw"$VslUh~c}J)rvdz!!aĝ4l$&`_f ^n!#>y 8m VfIC0uiu2=z1Tn74('rQC5$.Y'/%l@#g<CK+ a\('qL8#{X2n[ʡ=$5>Cho5_,8\+#L/tB(c-!xY#w3Bj L,huRYb$+%/8BM:7)5&X#'8&B4OF:/?E'm?̔,cd3v1ФMΰx'C $1$$°3412rIFg0/"ej!!u-N7!"qThA" CrDaa\@NLd@r, !Q"IZs`}`.+ deȼ"DHzY$5+C2_":"&fI6 {)%b3Cl5NOK"v$5|(*(Md9 U*T!NE?i:$3J,p:=//2̤8eIP'C~b/.R!F8(d=$,8H-> 1|,*Q%:.nB'y'#CZ u /' M)&B$ k*کb(8I ZB(IgXjRv/b3)D [vghaW@ f<%TH$G`6 "&+ZXe` 8u1\{ej?ĨObsK `),!Z1۴+`@87eZI`( @T & NL@$+JF,ȁ$NU%t.X<*A=ۣ F|".C#8|y(k!_)a7<y:\.J@96F8F?[Oe="BF5@Ĝ)jOF@fX h‚"CB6dBШxPu+$#8,ukc`i,nM(gHJ!'aн&%Ӡ6a#]%,!!r`" @/ A*=﷓& C!"_w?O}>ï7e A`( O8 0 @W} |839ŭ ?k@8+~߀dkr?02b݁XFwORz_P08~i s8k@P0 | +g@oHzOl3l epgYd@]S`> j۬*j@_gx8wh@+Rb`Tio@|@}?odz @W} n RN/`@EO _<+kO<.&|c_>hX@--}xw/*t9 K}?H$qЫT&v`v^3 gOg}J :  [JLP M@GЀ8 lk ¡@Z4z{@zK0Q(G.}JH ѪZy0K֟IKz`8I'L`zzd9riz' -8iE<#c;Gg:F(8G!4$N̈)-e0(I† ` .@zP$d{"?!ȕѲw8M IB;.3K ~(^!l(՜DKYLr"#Bʌ !`ͫG~99M4L`KQ9Dh}F l5áP*2T1}Ŝr4*p ~D>cB_]IQe<ǐ,/Ȟd5Gv=^au_Gjb'hʡB[ 6Y& C|aH@%ɀp#(8AX p#b` DiqyP=R?^&ƀC(z< IБ-̅$f$W-i@P\* (IA u,Ѐ=T;Pi!GD A/%Af鯐^ @f/LRǒ^zLj'"Gå*Jbi (fr@88z"~2-|zs׸V+)g]lgwLZulfPMA@$Ǐ=5 H@{dn.H}6~!8bK4R!C$-oćrFn蹁?^ Ǐ"|Kjl쏵? #Lسd_hᖴ? !FxXHtՑ< 3Jm%b[ xD $!P@x IÑ=G@^ߎ!<> y `a;#\ 1& tvu7EmAF*T^.W`BQ0V ȴ5GcloP{DE( ؂bF"sL*B4/g(3?z<@IV~JH9#5B*y"8Fh-@m":b(l$P-†$Ў-e 8O,w xd<4ID@R0-#B4.?AcV(>">(68 !>OKC4JXnL" zjn"X„Ih8.,FGG:I~8 V.FX.G:M  ] HO( lOB&azH㦱)DD B#Bz/S-|pAM`p"RRZ Nh\-d dlP! Z`r$ )bN-23"B"0@0 <l2Kgh[cIأBb9#S88C7b&~]æ'3"JCGXb8K'cEA E#CzFk D#ű1lIs>e38#L.,wF-C[sP=C ,Bv0=&0$:6I *1" Y̮N4PNICĂ"d<("[b4#Hr!C>(.TQ*à !x&)J;,-!2#ne1`z XP``$'a. ˜/-%0ByPu\% A!:a2hB48P"H8>DM)G`4& f  9#Ac}L|GJGD*GB89£ T`C%@$ jB=˄sjA+**"R8C~g8ﺸO,{N>"x(+ (5",!ʖ;*Ftj"E$c) Њg4,$ (B:8Df"8dT!ve#%="cZFK@Q@a TMCCYVF!SF@ȐO#m^!D&.LaeXLgv1'9">;d(8c5G)@̬|wögb=GDbt.#!L/Gy>aα84gjTCxm|c22z!BzZB,@ pzb@ |(|K:b?T .0 .cc6J .&C{>E"1/^"pL̨zBƘ#D+a<[7Z'b6"-v3/c[K0YE"x"CCCHiY"FHz V%#|1(46^x(JJl{z%ҁWI3//C9F7u.7fi&6:d.4+ND(Dx(d\"C4@,  ô,D4w808,n/3*#>#"28~i. j!h 2PbaA,a >쌏#hE-251a@PH $!kb@("N7f@B<(.fp+wOaa<7c9$7s:7gc3xp$>D1.bư $ z   &b.?eq5ikׄ_f3DJ㐇(sq"'"RFw0.B{ Xb4 A A LM4%xC4E>@f7"Ni]e8;h#,v`$̈MG,-zu'!Bۛm/&1dZ8 kDilA`<_@"b'ާ*KO;&$$!; f[2fd.#( % 3cℒ0ї'K1$Ā"x_UquW@ĠY@(P+0up` Wqpb=r >*wB| b |?tOҠ$$P*ހh2~BNpb=ODe#cY5f(A#r79Fn(D5@0'x "tvsd.@ eؤh!Fl:f|y,l>o"J_(4'Pkއ7.ø/R5d*Ab$p6/,-)bꄌ\ahBFR2x# Z>0ObE;!#dEZH-,`0Be!E3|d@Gz]_`&O!98B]bvy] l;v6Gbu)x2"6CT1E$A9|Y!8A`&yd0 Ӣ5Fb|IV"c``B D@$`60j70Ģ:/F|"ObO%A2aAY>C>n2$6$Ŷ"AC" b5:T"HJaLG,'(#;]bn>[1UvFC~7M~Je$GY,fLq.G ~g >vJ1 v†W.CbChwkYp,(˦v^2-5#BE"(fz)k2>pO)j9#^b4d Mɏ-r)eH(ps5(du ̊n߂ -&o 4?)jL(I38Pn.]p Q~qe  0(z9oN)bq-#@ ?_pH ߠ` }>Od%cd|~?`|> }56Qa @$[ p G`lvi&"0x h-i8|@͟ w)#_$X @@nh $_ a@p1t>A-P@. ,'&";+> @2<Ң~?}' 2h}X'1*/8Phg}a'}LF ~ g* G L[G`s ~NbPk&K|`XH" r ǔd /h; Mg~g{b~.{0&e1~AyiVŐ🰅WUh0<  NXzh -X4[À; cz0ZiiG`0%U Bh~ Mf;% zϫ縮LQde3۾{Ε^-b}wL5DB©ʬN)SiRNN5 4|GU~` .֤_ 'gO>d&p` @ P( 0 o ao~ : x o'6xO7}3= gra/<5~X/͢hA! >Sϼ@o' }=X`,~!h"  '~KÀ~@޸}M?gҰNDq8  K% #`i~lA< ~2  dz G(€"À@ _`eqwGAB |N)!O*Aɩ@xZ"#p)|`j~56@ɣgǩf|x!Xze1v@!(  ~U!NY*gx%֠x@SrЊ`1|z@ }jhs`|%cgU 2}R:%J\Bz4L}$e e{qieϚ|L>솻e6{ 9ik'L[g ş@P|Q{RpZ(|KS0vh#*ZSzNh:~_[lOl 1)!6/|>>P2kԠap {V(h(@ $F@}>R<0Hk(*GG.=@@`$1@Ðw"@!́tBH{: ( -<!~h )HqZ>h u,[ty@0?;r@N! EL)ϡkBv*K#,{P@@-?U~"E ]<0#8=Q@,`;;ڗh6pЈ< A: 3(I4"Fl2@` $$ܚ=vM%b !ji Y6#By>KQ yME dMd8,eR&( lJ |$Z&ϗx9¼sGCmQ2F;C= Hư" F9yS`P9 Q P(ǹd%P Y{0l)u 7+1缉 & 3xybp(B1rzU%ccjA>Gq\ж/E \92 Q<(L,YN8<3 >\i. %cJ^=Gj,ijG>#P8 qEyTG#an)%<4Gg2'> >s]Qb@"0GKHxL)%ό{(&3<iH}P&WQb P Ɏ}Cz@!܆^3dCHqz#rQpPFɄP6RԵ1XF/o ;)d(O$1ѰtZT(s043miEhŊO*A!愤18#fc2˞ae6A'Tl'@" Ɍ(SCB"4(=ƜjlײL-"RgM\ "a@B Hhpm-od3EAKa!Da  !DlĤ1Őf!n,82Mܚ :F/m(4BZ/TEPDT_~#+4"T*gdF'1’YI/^lkA 2cYjP_ )!!d@Yփ`H>d@`E ;p l nr6$z&e ‡⯲n(#I P K" C $H"/4:">B,FF(/FvB(Pk# Z>k.aAO>b*#)|Ē;@,pcQ7pm&+Lb4p$=0NR #D(Յ=@^vqAoip&[VI&A.0&@ $|<@G'D@CILs"`}',6%B-CAi؎bԤ$l$” DøIJ 8l /F".Kg00@iz;sLZAfh~ 4 i"@橮Z'i72e ¬E;A#~F*pfwqKb/F_;AJ*&'b(K&KVJ)^2'B҆"D?Gb0ELA6d(0 )OКDqvbB"Ԛ n,'L’1vdjJ>Vv0L" \0MnL$6617D$, ]#^dlg;PZBUf{ /LnM:c38^ER= Є !bI#(ƒ CvIl PEPF1j+8b'=rb傎&jr !z&66l׻_44նu :'`L`n(Q[qpGTJP}05!@"(=!3SMZcs:j$P;h7djgC-Ryl;etzgOQ./)foC GT.$'ycqbթC)Xs$0~yhT*\ZLP@=-zcWA'b>T#/ĖYnamId&0Tjς㑓eF1BD'!T%}x"7%F0D䨚ѪcNďʄfL@-Uk/ #(*Pu$on2jC!`a+Ob jd;PD$Bh`O T m@!žas-FTiV4-$t&fj."h /KzAaHfj,6"J_ */$O#a,#.T&  |Ϡ:b-?4^cit=]bb K 1Bz+|@6)aŒe7d26PĒ+60E.r G!ĉ:$Il\#i}BJ^3E(}WN ~-|dXAEjDÆձJ&,Lf0@fmŻZr޿ߌ0jPDbPԫ @JiaLL‰A`&a@$Fա B#> {`P ? @ 7 C @X@` p 4oOE߯q@ ߠW ȟh<?@|@ǐ8߲R_wX7kN~5Muz͟@a/ =9WʥYH|]@Tzw-{kjkͿ:c}Tm>oI6/@90&:l  zh! *@H}-kx*͛imővaAȟһq$@(  0P!xPJ`D&g܍8 BR,rDx@g@)gjO)ی Gˣ $c>A1'}ih I(c\ 5̀|xף  IFޫ1w|/X-(/ր t'5L$R ד P8$ ?)A@P8w 0f<=0#~~>_/h"oOA `` @!7 TՀ@G5@ h ɾ` |/`P()~?o>`#7  9 |?`Og}`.t`'m~_M$WzϬ9 Jݟmی ӷ~~`1 G5 ! Iy 䩁GN*'/2M 8}B'}'d'6}>Hhz7 K%(/6v " `auI\bd̜™ K`z΀2 nN NK)9;~<͡8mɷ` 4зjo wC) 3]Ӂ^D4Zޟ !@:&Y{>[~ !8djxg.RU0t;x  (&q{ "Fɾ"ʠPZO&銅!jeGqΩq). y``dʠ#D|)|*g1NFG~kȜZJE)Ӆ5Q&,uۻXK#Ȫ4Vؑg|Xg3ـ>"{(-dRγP8>C!K()*IBcŘ\ѳɽ 4SHx){cEøFȡVW` dey$X2^m,.'hnTyI=$Gp@0X; ~[~Ք"$#xXtӺJk0a@I;L_,Tq<2y@-0ex3D j 5`caْeii*z{|[rS>00/,PDRC $%9L<\b쿶ڀ*dɣd<0=@cHy {i*eܺl .ŵvaG$ i2VM r*OW7s>y-iue\!L%{vV->f8IxlpiB(Cي%zzK cތHmt&qK'd|7"_m pdC~'ު<>K!Hq_I+( @ V0Df#~@Tzl kXsQ8lF*SwGI׃ p2Hs;Jp/DR `1 G`bQcTTQt:xmR@ Ӂ8U$l!L&/JnaZdoQT)fm^40h[ ŊpCZqI?OZFhi~[YB}sTor{V:]I0xߚ$@y52^drWƎ<~im8e.(V"]F}R CxL?x!P~#0sdG!*|3äg1G_ tN~YpL pL`$p dxMdLeN JsK?UkI=|/c1;HBiblb7xSN8;Cz%6 BH`(^` ![KPMhdbAb$Bp|C.",@a,o* gb&G<'$.+BZ!. # 0li.wJ@ ^0@(8.: ;&B ~!!ꭚ6(B*7 <@ xb>$<FES: /ԄP$˚L-:2MxzRzL"܆٧},(`. K#V8 -.!>t!PI##$ni./!BII֋<'A5-zBxLc&>g*6Wco"! $g dz ,B7d6# ""QTx38ʾxV$;^&2,BfOA*DlhJ,e!5|Ab@B*#! 6(SB)'6*([ G8d!=„ .H. 7ԎL5pEw//% i+'~&$̯cd#vl 3ٳ0Gw/kI>s-" N!6MnQt05R0DR<1.4B Ar*gΪ<6."<(B;7z*7"Ж$A,Ra| 1>l7"-brO.7`!Ճg ;*z7CljvfsCKh@3QCH,MG@l%('L(0"/ZAPsҮbx'jt&fc^G<\P$b$*;Pt-48"!' 5A#@ j$`"8$ZC:,Gd (-&bf1"z$,)p^dj&SƍidĐAb!Vĕ*Dp J+{r74cNŬ<&.欭ZXC7B0LQE"{5) `ȅ+BRI2OB&D+ex}z>+JkX.*;7q4HJ YD1!&P&1RO!@:!0*,lCd\e#k{( <#ofA 3lP˨4@F ^2 $xY|*º'"2A" @M ; $_xC $I ٨`nh"Jd73UnTkor%&|0BX95[JOG)0B+ 3"8ļh:vl.ļ!CF"Px1ª*fAc!iZqzqO1W~XWL-+-/kcBt#NBxEt_l` i/K>Z|fbn0TcJC.Jx!(IJ{JgzEeb;``2$V f VAd3Ě*vc0 'H:d|26C*Sl!!AO?7t7K2h&9 b $Ha5-Uybl;"d &%<.CzZJAdd2#Ps 1P"_N\.Axa9.,pcDUX-2 ;G&9/ RD-$Yցk2n.=>3b)$DTO!kW83WZHň@Uݡ@<~BA5I' *jn.ڀ!`Bz G#Ƃ@o 7wE~ܗᣠ C},g뢌 1,Dz)1}0 :' j: >( qF 3J~@G{܎+0 nKh(p{ } |5G}G`AZ'xcyx{($\2jۻ(K¨*5 V y2ƣJz5 Q Dm['( B}J -AxѠwy\~Mh\ j@$yGb',"Hf vLzl @`$,Xs1}z T~Z1!|1³j1H `0|0ǰ~zVHkB p*K~DzG穵 B#cb"`Jzz2p}``k !il= .0 CT` $g:|Yڨ,zG1F¬|0 LZ4MPA0OǯMag]A3m 1!#ǰo @`G)CגQih:a{y.ru Q"h 9PDȭrL9FN$YZs]ui-ɑ\\o*N(BMjW.#& 1ĐH#ǗmPE   $ޔ2p=$"'/-'8b2bB}$(Z +qP؎S"+6%]1"|=KE.ǻ J䄖y3t>{WO@( VI x0}^9z8y$BCRQm#˙  `t@(E8 >P7i;(B3z`.p; }gFy֖>yNar5c:^Q&nP0N $Ȁ|fa ##p?A , @ G y@cZB A~6X@ј"&KID (G,=-bZC>D}2[< H6K'iۜp8 lbL" C 9i#<XC!IM+dǒq̤B?(B@شѠ@w֑9A@z{b]aYa>,Ϋb޽SΏIL'FoUd~h(LWX<&r6=ygcz,ᔂ aj[94RB7\iD,"EjGNT| Lt,4"2)(5Dޝ^(%v"0sF#Ivk Nh(G1~nz!X! (6JaO u&lhXl BGnGn:%Pthd6 oHS>&a hA&B6}#CXClD5D7%."6a l:(.Jl,.'jy"#bS/.#xB p050b0@̤cCu : PDB0v9t!s5jpt–$$#wCe9,] Zb61\b"r58*ST.,55s">>,Фey0=dFIhH#)#&y`-D'"elD#jI*,!FX,!qNHr&kD#@$G *RC#B!"$( dkab!ʐ7B(]bCZb0uXJ) 0@\H$jD6!RAxiJev:-"F(Za!M%DbG5/3p.g6s3CVCci"@9u!CVkDj9rV䜾H]J`Dx4BZGR$ĴJ}` ~C#|$ cjY@>CI x ' 7fJaAj,T/CX)"$Hr*Nɮ! !"/ G#(BCDG )Dc?KBئÎA98u/>$9`(?4ld!\D#"@)%OtR(}"Aku:"6N$dbLr.^tVc"bs'.~|l\;;\bd 5' +hi/B03;AN;kKK"6"JĂ,,|E\*A4jj)qEos-%a?jDR7\A"&Hbvc(%*VD#4`TAH``T@rb.5i4$>B֖7$r==bR>qAHT)F"zNE' sJZB0/ ("^TH .;D #fECdCD<#jRi?ť1C\*ldƒ6FrQu\C9+1>zLjcD)Dpξw*H澄<Ho(\֩#V9+`$5:Bpf>9 ,# 6@hbDf î=kH|pF;a.2/dT8J O9fC"oMz@(Sic05G5Q?G$!'`C5B~ΰ{|n.'R!*6'fNqep'Mr"#ɏmFP6D`\t0!'h.Ŧ27f+AAȨ`va:c|IjDV7<"qCyD"9|.l4N# "n|@c4B.LB6WB@bCԢ-nIFw턣IJ jDL- b#HjhFl> VB r@CنbZn y|7WBVBE$N! A'"EʬD#vX%xY(|OVi6DwkiBx:V29c.b0F5>1b*rJH9Ó @!`<.Ý!TҤch< G/,.u"(t.$U|$"@.!`D ; N` 4w (թXN JHJ$NTz !!aA㠩c 1mv揀S Hؚ  p`" &%8mҲvC 4 x8f*@ä!!4Y}EYT#E "F=\6h|dqģÜA^?f"jri>-ejI$u$"0#B8&eOG*28ju/#G`dUd Y{,KRV2tdNhrf爄 OB) 898a4Z$? ңT^A5Ɵ✭dĩ$BZ sFencd}?>_/ w> a/_`8 PK~O ER0' `(O;}>5 Yo( @e@@H <♕a?f7 &7Q`*}[ׁ[$|>^ +C%u_zUZT*W,$倩ˑ@ˆ;22!BM0ғC*",:[`yIb<,|#0}^&JGyLh%}'1Ȏ*3*8 NY?r'`( 8  6x{!~T2`"ǹr'pYzIg280/BJ ;-#$.B2)Q=EA  KV>4,u9{Ԭ|M# 2=Pʚ~gyqh|:䪹g3`Yy-# 06Ǿos}$:(OMDljQFx(^`2Gdz~SO*|{t(̔@w+ '+_t3 ʾا S@M _A=8~?ѷ g_M I=:q $&ԟ@$џG  ~*2; C,"h (.Z~LhH"1zҨC-9)׀D\!ȴ lhy޶ͬ#Tr<)@"<LLjҟZiEyzⵟ>-+l*H1'@3H 6MHŀ`H68G\ Lx Si\3T w/ǔ|aViraxqk0"u$ R0|Łjɳ,zw@H\A(#}`;y@@JF@ttz]/Aj} eY{H4t}|97C.Rxzǀ`r-p|à:f.d|<#RԞ`=3 U(v YzjaL /r'{\:[c^~AtZ*/)ym(@h)[{9yʠ+ʔNI-G(*o"0,x3D-&EG8{&vYA:'|%Cӏt$zeS(jn# q@8`,Ɠ&>X1"Q$̩FqYiGC8񠵀<@l!,wR])$tHmFz`ђ] IMtJae2KfN6nz? `B Rlo6"t q | _(ZA?Ԣ2j ᗒ払?qc:*ǜǸFH@ 8r\P Nh@\EU<`nKA<oP jtYtO\S̼R*/- tX0,+ p `p3Yg0<^f)p2h4bj6 }@vK){$d8 6<(r.yitc{`a=O;Ǩϙ#Y#d4~ov'Z se#fK QdJ 8J&DHĕ)ԐMjE""րSGA:`4tΠ.Af̒Sx/!4s@ego |/|ωMx&Sܿ)\#6iTn20ͱ9Rc 佢lD1]c{fX, ꉟ䂐r&:-"C `,MP:cxd@@-`|`GsI:%:edk6PUUE:4EfQay.Ÿ*Ij)}6^ 3TY ` \-l꜏=$*]t,O;,DjtT/v by8yW+BhirNxG<&),A3%HndA?*!" IFF"lQ@"#&\*ڈTCx@N04J7RAA/ v) 4f\JCQ0F3A:aA4M]FQ4%b$G!N"N*#f*F@*19O /#`H#&k:DBL1(3#%6L Q-*~%C^F:>skF4(`^jrB6HT>:)`:z\ȚLW"$26D*;Ic4B@Ff|;pSFG;-HIPAfFR;w4 H$X"Q3k"d2p"-H!d@JҸ%}"uPa<#04Ik-2#6A1 6(~/.B"##v)'p4bu@]@U44n@h#bt/0enC;L^c.6cFC#2G4lM&@`:/.xnâ9#6zN4o<d\$d+*,;G#\e:}s0Fܭ/^Y"SLD"naal:F%d1bT Ddޒ.-DGp;.T?@ū$^&#AF.%0Imb#쒐p35o>j*HsB@"h`T@6`FP§f|@T$u*17bScLodd3Avw~>Ț=N/PqD)AIw Oi2krnfA^lQ_@lĄ|$>u&^$#@CQ|mN-TI ƃ=:8 #~o.4 6` V BR6a aYG l"G2`V:& X%l"@"UB,hb g,*JB=**J[az'r"BdM2G222'Fg`T;aB A B &D:q"LkByB:'.ByD ?"Ywy:Ğ(g6e-PbDLBt!e@/-:d R:6,~!`J3f#X3K,Ǚ9T-҈dq gQEh"\JY/u^dT1υRO%/u$aHM> yn(QS"(/%ëB0Ni.24܃@Nda0Y42Ү"Wv4ς401#-pvᏂ-'se*;>-0` @ &kd ""2@O ZJ&N"t-Bz bOte:"6BBZ3v2 9=tz-i^cz钼g #:1 B"O.,#El` 9"d#F7ƃ bXV! s0Ig pb<a0rTe4Il%ќIioi7$t>iL չ0ˆfbB9Pé!r)yuwDM8~D>d!fq3lžBC1c`7)l'):jA <1.1i&LO(@OD;8b/Ȳ.Y*_X 7]iG$=/~;aa^4Z`%H8F~aӀFK0\$zK"BPN.N@--y gl2CyDhȓ8l"/"WL*J2oTԡ&.LպF;n:(2de p+0  `C?_{>g @' w. d<A N}ޯ QG_g@|>(o`Q`H8~/50}`&  G g ܭ'+TH sgŒ]ẁo~h&Yc׮E=9[ǰ !{x@hAՀ\|!: +G裇~3+.|`@r P\K @. "!j D $, xp[:`#`"/3#R= O@)`I~@:.Rh+gxǩq^\m QA&迨hSJ"z@(|r`;:|RzyRz (Ģ7{ŀp@ +)z'(p 8&'Yy K#TĒ2T0,{gyPhH <Îj.*y1Htiy'ٌ` lʳ"a #B@0  BH[O w :;g!~?Tk8`g\j L,  }K}Aw@ ?(3{_@8~"}` B}0>h>{!ob T`[Z x >ހg#Z+F݀hM=@_|x` *'ڜ{!mH. @@c|G}(9z'~2N-x"H4b }A ^'yK0DZ+H܁'h0"`''`qЀP@ZpiY~FOh{A9gk A ;T@Q~ǚ8 )}@4Ly!29\3`P ~ v7cG 1 ` +(&a*bxG2 1'Oɀ2@8U}38ǡ{@/ !qeW@t&`X̲2`#8̩6Rr /-2Th|sDHm\L lzD.1h0ׁ`У( @y{) Kdɇ}@6Pq.TԴk3cjm8}yzx4 hA3 ;˟?|X@zx"|8 0.2:"|oPL|isg G @_Ha=a NU`cѬ!X Fϒ)"@Xy21J1@Dd<>#ucm'-b4>%wQ8$ @28J+ÀYI] 0y 9z9ܤ2\5 \ <~,9J Cпa@RMhmcyH2de 'oJBc0&f+A XtVHu ZCG9C@_ /r!ǚvh-ϑ*U;p,R<sT^7Q(j\.Lb(>i;.>3rOUH Y'!0d8k3!,yO# <8A^hy!ϑ =zb0Vf́7 JಜڎTZI_Cy=Jq}"E3;@3 4ր皐|! "t"EK ck$k^0H٤=h.RvBCc!4GKTzb&rtGˌ2K=eyj[2>tbEDF,| {.R7WLIN0FsǙ"7S_#'1_0p-8`P_m ǸnzaQ jva=jqr0 P4f[(@CZv=N']1X`)@a1>@ 7P!:c7Q"j(e2% l` cEoZr$t5Ws{ sM2G5.y1Hg& ]Ra/#VcS&ϙD'IA/-,kC֒(CI >tPZ-QWᓳOdlscۛ#ɤBU;& Öb4ʊeV"$GqrҐ$ӜSfkӴX~PTK4?>Cr=%\E Ddha5$6<ILP:H;ў a;HBw(?G3؅ݪ"30SofG;rTH3rq{dT{Aa=”NJ<ÚF j.B~&BC CXdK$-EdfJ3Hˎ:/.R1 t2klKC@E-'-:Bdq`qB䢈cT@.) ɶ=K@4By$ 7E>F2c re>#$R` lfƂ2YAG!ȧ*9fa!aA L:D 32sb3"""E\B$6(DL&@RD@> Fbx@( G6.jH(F81*-:'Af 8`ڞ䮜DRC'&! b/A#B2hxb2zԆ0ƬN (F!.c(ˮ.:Ent2 nVkfFB8-#+N᫸/&2"?f>CUGhdb:"nB.Vɺ3,#|,H\z0.4#8J=b@ crYr( Ž 4)D2#@_b"h,AՀȆV͌7$;ciOBd"7N)'Ef!!!!aZ%$C(i=#T)C8h$bT()K#4+T9HDFHœ-F&.<  Z`Z6@VlGgAG#-#D.,hcZjc*x$f("3 l(K?tc 2W #b,!F9fU ҃= @.'jzNadz)>c,@D ^#$Ht0^BH(K7460(# a!CO'D.N(56 %M-'P._4_I=nCrO UV ".Xr9)“xc$=iZ%\"G#C|pz4Lrcr:#,-O !'˯jaܧИJ6Xτ0&N6jh,!fbxR8N$>!kn`<M"t`$V3kAC\Q%ej1Aad!,@,$3@룲7cMT1P)dTp-jsdV. "KXo "'B|R"3jBF$/8C ,Vb4U S\ 1l@NA4,V_Өz]5($#cV L.@C.'IZLCfFTDL3Lxr>e 1#A3hCBt=;k4W KC7붓@"1vL/lC/ 2 EfZ\MCJB*bM4a kh8bYUOqz"f.3"2It" Fw/$"?k2/A[0% yh qv(Y$Oo,d-l "b@Un_65X>SF."2#r%zGRwV*#LO$By"se$SLd&6OwsgoocNhc$DWn)0N֛s2d5lOCZ3'=Cz8UXXf:2P4 ,Bxa|0@J>Sl;"z((&.8W=FՐ6"sfjQfd2g%f6,zĈ`C(%wȉ+lYM$^?L3B1bD#x36!҅7n2J}>I:/9qgq#$`<3(:Idaa :H@f`z, ` !L>8(z c#%^A-c'!AH!~(0@F4/ /dyCeY-bD/XDM=1#k %b"ɺBCNBOHuv@S&-(Cq4oC((5ः(G~#14Ӣ78;%.#NN\e\R98):NcsLZ2/d>썇>[Y$D`d,{&@5f'6Teb`BʁvÙ9Ñ=zV#皞fVVlcO`m,10/#Y%mh)G>,NiHQyMAAAa `쐉)iĈ,ډVnCQBcD 5CMz<|ȐfVJ#fUfif* $zՀ6I`*F`BĒz%:'4Xc1*%˼X#hVG#/O>>6zC20lc-'ړx3C!Qƪsg쐏CBC6PHx ҝzRUQ8,IF8ynS\kVLBYq2@ejcyA'Mi$iCV"5=QHL?=A>BJG ,CvfD:Z"z5Ho.(>0P1P#CLJ4Gy4paM!Az9,rt;"Bo@{nXg>BN@e/:DakT`HNg"A%h| DJj. iBfAAT@LZYz&fE"bBU mgx !Y$#|F!K!Y׈8x/D#~n/2bɇ3dlV#'JCMkoˎ >~a ' ? b $P ~/>BP0?@7<{&$,F *_G}A3|!{ߏ7p( CĂ@LX}>V<?co 2%7Up&||/r@ `/V@}ɳ 6%@(Xgzx iR+n}G`@ @a`z @ ,x  &!2~hRg }Cl' )aI} 쁭**"oÇ* "x5- <` ,{A@SbGyCH 앾1HK9w.j{|_KQ'Rz&^Uҋ^|J"  ƭ1*K"H@0!Sr.gyC 9Ʃ@C#]FRJ$HT6 <[^BIU$~')o5S N'yǑnE'iqdH0 0+u8~` ?Hd6@ B @}s(1&~@ E_0 џ-y?/'b^>@(Y# AHHL7 ~}ߠ)I_>Gx*l2p8 L/TH~a355}?( -0 ~>o!|d Z/'w{S@ F/ ۀ/3v/M<}z=>@ | #C>3.n{ Y'聞g (%P'7K Kx8BҺ/ځ kF)`@u 1xa{Fuy'{8(ƀjc}1(.J;<j:z @*N|:+.+~gzҚ`P @0P&. V@B 8RVY1L3 Xm 5;FR kЯף}#. |'dX6!-2 J?0 (D.#'}` |ʈ '囥2g-i73Ua *978b!6C fpcLd Kb缗!1]G<* >h%a8YAS1u,Zecj>:Xq@&@@h( {DDOaF}2kQ> !TLi[# @1"C Mvv2YX|nA U)\”Lz$BrcE#K( ?h@}S/-yX`p#,I'/Ic2*PTb aqz@2 6`@"bh #+y.@D#$$"#-SM C#; TMNNb@zHX^A?b`"1J> B0gecͰ*a(L!X Jq>-l8kb#v",:~ R)1cZ" RB@:H;C+Ddqϔ;( D5@TcvPh",A #H+'(wr0Cp'K4gr)BTsFq"@X?x*k~~R4VebAĬBS>)["iBk$GTn ]K"u%*4;/Ώa. c/f& Fa2k1IjB&8#d2>Bb6DVi!rgO"Ct6*c&L#Z B h67r*`o%R8D!NrI.kjZDzSJ4r9?ZEg!A0c >0)&O`uBF'#3f#%h"NS0BBSH >!.4"@L:05 ;&?7C>.Ug.POIl"zj"a:;s kJo>"/p9|T6" Vf5 6?/f#m 3dT7m$$xc-d #hR0t^"HZT(b &6 S/(d璔)Lb^<â5lpVt*SX=3`$Di^P&/3O` #D7D&4fL' !LG%^#H?3z(/4H8x(DDB<<lwAq)$ ch/LAAdEC8B&N&w"<3Ì>Ɯ $Z~@g@YGӪNt$$G:"bq WVx=,|#!BN%@^vDx"TNoVcLp"X-bbT3SX !!l/?nDJ5$zJ0GD=;?ChbN4&j.ANxzCFR\h~:شdCh쎗Hxp3+#غ7d$$Y1vF*']|g6D:,R2,t@GuCi$)=N@b3As^/`".)#Bi ws(M3èx](#(B Hǵ|HJHf@vdcaU8XJN>cMV:Ǿ Anm$T ,>H/ " >!-fVO!QѽZ)X@Kc?V?"~8 % VC2sCoБV;k"$FU)LXu(Bkk3'L6 Vf8Fpr0&#"#nucr 4.B"*T45Ch&(V`jX>Y4N&/Cz)O Azvc"@Z C cN"vG8+D:5iJR7D&b{)%֎+wTFaDڐDSJ?j=󓁽>a"\'S IcBj"Cs` #'a<:@$,Ixf6A6 u31*NH$Gf)TEãZn^-j1;^(p' *cڑ/z`,H#Ħ!c<%bP)g./OdqP598.2"fGN`8#dM^WS`H3N T>j(xmíWCh%Ì7g87w2P FB_YvW>Gn t B7i^37$/,|XBHFH5gV/R">$&f$.q6&/@"*2:diwl_d_( LH`x@: $>( ߓz _#W("t~?$8)g_mU>_/0 6=] `(|ց%~nX3ŀr}@ ~Yy ~(:+8D=oTy`!~'{'Q|@'71~@"@މhp`Hp})Լ#@G$ޢΰ@SGh:~ S|; :Nz'O;~})7CdǬ*."~n:@ ,#ÎLB糢@@SDw'"iؼɵA[Թ',p<@r{NGF,@Yx*| }@"=Tr#{)[r-DHj캶j`}`wGӞT`H{ ~ trtL®|,:L*@<~WJ4tCGzqqa}` @p8.J!D?0 O8 b@!P* @V! B@1&+AX8|?@2 '00 /8|o7sDPcA( x>]ہ_,"c/H?O_@w 0wg'/- gY ̟[T7V}նgtT 3y?@/{3>ntg!0{?y4\8!}?_PRd|@ G~` ʞ(q}N 3$4i@0-`<gg` *͑};'P@h} 6Qp '|G  IagĂ:) f!$1|- OzE--AHP $N`&@}2!'Œz|}1-jɞg6`X՟|G~}M`:{um+X~&m 'ꔞ B~%' B_5}r@g`U*xhA7?D@ B!@rV'˲d8|*U=,V̀#fCgׅ!70 6$~*򿝠m\܌AAZJ`C(yzң|P1D}sX8Pz@SU]!bP 2z-6ǘ`4#: @!gq&L0<#|1d|2TH90~7VR:'D "RYtseN@r{.?z:!rXJ-s@,~8&UG3xLb焃f}!40)%. Y+ ԡYB@,Gy>[E肛b螒Zq*9S7Ͳ&`i>Kym${(rJh(0&Pwtn`>42p #ؾ.V.{7KC\k\!)3JN73[@ 9}~4SJ`1Z`KxQܭIC+ytu!B]$@8x@s|R=LAGG 5i@I*V'MS@.@Z6@Яk\2(dFԐimɀ%TY y51oM;@ 7؞qɀ!@I*ѩS`A; DU.G.S.v b؜iZ) f.kP~wHPLMDQplR1ŬM3 @@NtՀ,s%B b2.B(crH9 %aLa@D! !!@$/@,cn VH~8/P|.Ґ&mBfZ~Gd'P&bs<7Oߢ(>2z-1 2d&p{ĺPD6;COFn4*]D'r%4ӄ/0 $GCB5&dB*8+ .A `.(hFjؙEnIƾ '%B|2Q#"SHcgH2K#,b~&UX?dBiap) /O%xH2v %."`mC:'"T+p+?MB iF/'h70aljNPkPY1&:%Hp@F'Rt5|fQm.ƿX &f(Rtje #BZE1LXcvSkf;I3=슲| 2$/0݁!=Af;@d6B wLaLfa`'B\ìSR>qDSffaD 2:צv1A8uIV8c@&l!E !it!-H 㾭z `B$BT&6ghf@*G 8WDAGB'Kr`N#z6v8Cu"'roR?SHg(Xcw.Ei32A=g-r02p1b#Wif!"LB"En?8o(RPAv#}!Y,fVXzw#,NCDz4FkŒ%2On-"(t>$D@V_FPTi S=,|5cv7h52AbGg`D 2j63SKĤ*d 4S%'_94꤀,`-$dNXȪ1t&'Mæ%&Ԏ0$'a309q1mV'Fnm4$zB$PbVsA+ cƁ2/Ks;!fa7$}4 wf-,3#Hp%qn4!7B#.Ă#~/Z5o'<(Ӌ89W/-6ZBTnc:0Y5:BEF.F #R"@dӤ%sJjNý[peo7vFph8Fh_j7Z&a䙦/ &Hrl:&8[> bܙiwz*FFIYQ0(bIn`*J.&|)ҪR䱆G`5H`$IaA@8EaW?lC$oUb2\'aBCNԮHV於)3$CF8%|GtB1c4EiMt j # @?+?~|0C`0Qu=N@@{>@/X ,@@@@' >P+{@`w ~Ϸp38!vo A@ PA@0 |Md~O `+}aِ#S=p[8}0|P;1ώ̰|RO̻ 1|,njFGꔥzH`B{Ȋ(@P.''@|'BE){e) (̀/H-b~BG)$9 "$O[NhTr{a˗`H$`j 'z$yP}RH) G5>3l|Q@4(1'b)/j}hH)J'X KV(&ӳ34{:#E2=nx)R3`"A Ԥ`"g|Yo^}go= F A [-MʒOzuPB g47>.{@BhC"G2?P>Fx_` 0i5Tz>_.@B/8}?_Gw>]z`p 2V/S ]~I N ~aٍ~bܦ/}_>ELwyao 0G寸0_m@ }=ߔh 1o3Ǯ/{_}ߺg}Y~/A*(%2 A*{~#G؜ Tj.{+ء1,צH|'z|ɨ nGG~˰ 1|L1}6@<i"TN0K|,a{+Q#ˀ|9ş*gh@T{.嶪P|NH ˁ@|9M1+~yO N;)ѻLM@I`@+ϐ!{ݫ_8nx~C \19\'儦`}%Ĵ$=c(toqDhe#×d Zb%gGy7?k&;0bzƬҎP8H@TyGq _@fIX€kX}N0'tt>`49'}$ycXk_9G jV$yU|u)w| `x g@%K‡=se0ګ;(sd>@X D"%:80 < f<ߜ2 ڐydPZ?8cG, :i8Mu-zcI#|<i0@yUn ´Ջo7(0,E(X@S5|a? f р#+S#)ҰAM/@u|7,G#LN`hM?2faH_سx129K\dO% @cZDy ?,t!dg^V$,qIY- `#DvO'ύ-08@ lxF&G.oGb?ch`q= (?p>܊'?~XJ ':*GP7(Q@=Q!Hs!O@l?@?GCĕ#I9ƘNf 2O8p_@,Rb\dzҺ[thp*?g(ps&0ٹӀH2 X)dzwEj泘p a7Ċ*M\I DZ3]\5Ş}G/ǂ%u6>AGaeFRb`5R@U dJ.S (-\&&DB3(HxV0#6uj<42W0XboX WǦc\`l@R8!>@(+$$6 '(7P ]"YUvɄ +ngZiPBNFP!lJ!҉aHF"/ *T$p$'@?b8C#"0ڙD#BdB1b3#38 `  *@A +!bό\&.:8 J`b6dtZ%?;J:&t'HbA޷ a8 2$`k 7STnR<!a@ #h8B2lG&2nrY2d6!`0 04Wt3e4%!ErcejezD80D1%Bڠ@7D" "pN~x#~m-E23N:⺥,c J4#fD#\%㒛("T5㪜`)X8Q` a0KnPgB4b6Ab4\(ҵYMp2&%(vsCLOe+>(cAc9HM$1!HEGZ#EvAa!s$&;C80"=A[ab #EGbj3Dbe._$Jg nm2hUA'z% b}j0c'>#z<K1c=h3o!c$ҽzl*"eZ#a< $0c=AŠV* L^G.%Hrc3%0 uþ2IHE2t@Ymx"'+ =|X9ek)E P+%M/er,<hV+ph-F6C*JN\LY &  Le4?b(+HC45T>F],J TG8-*C#Y%\4"7 ( G@`$]&BSV!!Ava!AA8NNV1/ 1(V#7g0 cCZ'ƙ:dc@'@ )3@ $U +4"L1/b#86F`^4ғs(P7B,"b+e.'2!+,6,$'u} „P:&LX*n,JsƊ'I@bC#I%}>bز 8(nld52Zb1%qN1oa쮤Jju(RMfsb5d<'IlFi8A,+D2c'Kdd'cfIŐR%hL8C$* L<;3%$N3IEf;|5A .K(0%qCBK4*G@6cŁF>^?dkBV95PlƼ+WcdiR%N+ 0p& |%xKȜz|6u"-Tg&6 ъz` (8!9N2"p%e QeA(>-@-uch㓅c^w#0tX&on"&#B}B2y1l/44f2$?)(%bbK^Cc#|+zU|9H!E e dH4%&p\UBqYE I51dqR5&o1CFt1oF63f'c0@("RRe8Ev&U{IJTN䒑i0' Brh6"CA1PD+veScvC>HCo61 4܉3p&.rba%L*A*Mh9y"bnʋϮTaէba&:cxJ"Yf' #1'5~@fb#g@I% ~nMcD@(EbmB*l nf>JDrxOڠU` $OC#|PxhCZC'faB$7r@{6!s%:,NP;9~g(gXVv1o|$mcgK {2W`2Ja !A8Q:&L" "#v+ > @X>a"r%9$qQ7C^D84B z7@ v6`*@*QסETRnFB F&j&<!!CEznrb*78~CrAraTt7SpjHp}hDAB<}3\L̸,%c#48 ©D#F '}@@ |@/}?_ @r8|ߏ!A0 0 {EO`o@€,}oDhOh.> {(=/w ~+K_@ jHMP}@ AՀ`x8|>q\ _/1$@4` *ڿlr|@]MI_ \mgP]`Cht`9ycB^ 9G# 3l@ n/;}& ,39 " 3(ځi'} E,TLKRB@Jcz` ~r(10@!w;% ۧMkC  x{zAP8}+Kyz & jH}" r:; 'm5(~#<)$ ~@ X{UtE j*r'-;9*$ns**@y s#{M{{U-yy*g({3xg|<6! 8( $P LzmSL@|A ("9ŦI|ܯH`8pzgG GAo P8 ?P$6B!P`?@l" !8 }A ~@Òqp@3p|wov/A@`\$ 0(<<Wy}P@wҠ,Fq|_tT\ @[i8p?/d*a df@S,)_S KP7zy@X6, ^ 0D#'~ρ~ ;t}KX{~` <`#CC~%|Ç& }H`")R2r@׭8z{Gi`pLg{ A 8@0} $1{"r4n"R8i{%+LH;*dk qJǪWT`0;`|HIwl` p Jn!T95h|;n)o"  H,xHy񬐄G ) [IPiG$?G܃)m+ Qڸ 82" }MM|~Gn[tg3e.fyNȠ|E PO \myTٮq*hp ㌕i|p$ QFǴͶ~r'z͊~@joJξh˄&gV&v'ݯ}R|EL@8 RP$i6}@@`0zccj_Gf"W$~,t` Ц<@Cn;ǰlĈRH 2x^ѐlb@8l A(thnd2bv M(v 0;Ee촀@Lyo&i0!Rpfo &Et#ЏC C?,C}0 ^| 0'`%^_PtH:V8(kClw+[7Dľ+f|I ;Cя7oIFE3`ѪO}75IK4s^O!.pnO|Gd)-J2B.?b4{TVMx?0DPj (ĭǫB&V#L6bmV|$iWQ&*tqP' vRi#p ]Hc$FX H) z!2}|\YiV`T~YK@hHd*UJm; jvq#C| @CMyA8{FQ?FT.Ks@{4ij8p`KlY/"9CtPCFH>ͭr"&Iqg 1M¹6oM!AIlRp<(޽ԩ(`M:eS3Hczu N)!d$~ >ǰU'   0JCGmK;P+]J\CVw#l0iHɗ1'ӈ>0X K(w *NX0z@{1@|9x{q> x-@(FCȑ(gM(p? !`0n?;oI#Hr)_]Sm?f:J!  u ֌OJ|="L8!M1>Z4NS [,A?$1ޞha&'.>L44jgjmZ&鲇uFt"R_ Ī29Pea91g*b1 죤lܴY M~I M#4Mk;^` Qj9PNP.⓬lS"_TupoI*8gZ"QI5HhȈ1L@+JA,I=oi ʩClBEXd Rvt/\-^g,<>1"^T3. DqMR}dyy4F34})CNc%G闳c C br> 5{"AB@I67b?B!Ze@"_hBi(dd2îbdd$6nCCj)6KŒ2B.Xtr!*pDC4L9 *%B7J܄Fl6-@ d2(h؍E8#:v|n'Eƀ"b'  .'UD m! gî"_ɀFOȅs9esʎHdb~rp%lEn$Ö;+Aaa!Ң/1t(4 F \ R"jF".Oc*%T8\x"~Nta`8^68'ˮ 4C'fU*#%sc{cjOB^kA!aAjі;&|2$!E!C#fĪ|4JBj! ""@d2v'#@/,:J\LBpEzc)m#lf!g)"j_ C&1%C(c"xM K\rd"F@z《R:Jz&Cb1hRSn8ht_rdu$te7H~W","D6(7C|l r24BrXC"C.DmrCb!U$%<#DÖFh`w)k<4hU3Vċ2j2mi&f7~a1Ô!)H:6c@dbDU1.(V-&@"7N'>3 9;J?DP9B(Bz#xT:$(2"8H :DlC"z:ETZ Hbc."fJLd:_")c/sIQU&D""|u*HgZ:ch #cnUI0ӹc&_nl(# F2@㰛6|߄Hsvو8N &f?F~J9YP'f %w5q2fsp%JS#O^HOgmzkomCaBrB@ υjW[h}hC i?swÄ6nYzf2`4GCxTBmBiFO3Z2u&$9@*J;ZVas?TjJLӂx#/?) \!F&;-z0P&#atA5DnXC*NFi_肒G8&qrSz&UghE%/qQ h{Gg&_@bӝ$tuBvҳD!bj$U`BHh`y%OdQ?h:܀v!!!jrvS*CT"4#𘖇yBxU&| \ %'qcXV6vgX>ՃmQCSav 7N[Gm"RwFZ Ԛ/ApbE\)[#3Hބjz"wET(gTLTs(>v]Cgw"/II5Cb)Olv~Rqm6Pb"d4!Cl.lg))s+Bѫd3$4g>\kax% A{!!؎rc 05H6 ʘyuG #%}%s4UYcP3 )"z&+@/GP2=UmHv Bl?DSv'b4&D_|;HE5o3~k*(iʦ={Hwމ$GZa\H% sM3 O{bS҄d.~:%>Kk9PMDH P8$ @0'(`\6G+_0 C38"oz_pS?yvg `7|?r#d~Ϲg?fA}O b+/X UpSxuq+?J-& "g*bw og{J}q师iր한CS=mL1saj?3㾡o~ēR@*}NJVAV}or :~Chj={Ա(Bn<2 ?|!`KPz,!lT&)b%^ y,Gî9b,&QsR< K|N< `*H}+@!i@ :jxЭIqsF$xn†xS:yRi.%blR,B` ~Q ~+''*MR+k3퀀J| qROukN 0m %:~l j*kbz@ 9 Rd\9@P֟S$Txgy{rhH>idOsLn"wOwL>Ua@@: +< B!CPS{ÎCvJQg%Z&* h*r2hB4  !W3ۮZs6|L9tB} GȁPĬbuD(~w0L Ewp4\ Ԭ9 r 8h@vQ8%E5 4qSJ6搸2X_&mL'Œ]SP/X Dزh*ڊQ)JdhfTQiř%&%^8n8F9d m_Ԍ zhpAP8p Ij.RDR@"ɈXjp|E!cHhbjKLI"kfJP*EQu0L}J^=d(x6ɀEd/3$*Oy+䴈Ua=h `T -1 x|^Ŷ13W_@e* 2pDjLS|}Z"#dRĔ( S ՜&O9%&rRY,(w`"D d@KQfk,@ "bιDFj% UQVJc 9$8 ⡏Qt^Uྔ.QQS"oTq|sNl[aHi,RM;f)1~"C@Rш=#PK $̳A\e8Z:XM6 [ća`\(؊?J% sS3%)SPȡ }` @C!<`ȃg ; @d>4(&N 11+ gq YpQ `q< #AR^?@9GCDMQ& Fİ2Ր4Od?O쌱8 9eW*!*) Е1CRkfKeQdvhEhLd/<"6czY&AZqZEB„pd@`,B_ ?E8djOu)P?TxP.% RöJH3MH&?>!$|$df/E2ء3T>nvdc.b`"bVCbNX&Bƺ<H.vRUNY2MH"c0%`簥 >D,5"Oct5 B7@.8-HO r"","o-Ob}ŢNtTB|‡#5,dZ%@I&0XC7G } [ Ќ(eOI7' Ud>eET#d7-h21.dfj%-DTTB`J!@&@ c>$>/Cn"".#>aR#%72 h(4.;zCZ-AAAVT`@aN7 5&^#4!H"1( =`. 2Ř<h$.maARao@w5 "G ,s);ze<'Ķ-bξ-=GNt։bX.Od|:CR52LO+`Eh\*E0j m+B!- 8rye8@"@^B2@a%tb JED(?2Y 5k\dvPlaIDY7$^%O69%$@< %8=Ϟ!$BLn2%?(X[I O:&iblRI$E>`C&>+koJ$>VϚ췥2נ(m5`j46$*pׯyrOZͷ,66pOw!FB)#]6)=++Nik뢀))~'d$_&$Ƙ60vp76Z{0^M*(-*'@ԬbDH5=!tX< .vnpv)Oj-ag/Ԣ}_Bft$-$Hb"*+5EHM|{ 3.vgr@mL[#DMk}J)ȁCDBD|FHvNˎr #\nMʋVfyiaA VV* Am"@md4,ݖ_1A0*#6í^}TadeABĕeK4}MkBFw>\.)iS bMpmM6J E,qv:ڀo(]K]6!x)>"dc# BGDn8/jPhd'.^mlSX !!vMH@a\YG07>S jC(`9tJ-A5j\RNQ'$I4UlhBfZbYi,#Ȗ42Rde:ۄFK"8~Y.<4m",(r"˒%""nEf촘[,륪bztB\@ :\H (J$62XrD%_FD~"!)'1 %VYōT&Fk{Y@^ojc4h+6ml"XXz̭I5"QT,E(b`:8V`&PӂzG8k;NWc;?΂{"HblCx9aGlyhQ9vr I)8Vӗ&K1?40FB%&d,X;uǬ2WLJ.K`79/ 8"FW ym-;D@p %LVkQ8  pַ}= , ˁiO_,7w>b~)Sn*64(4x}8 (|Zl({ @SDvBl~0+}jX |h9@ 6 tH} )} }@>:ֽ*|''GƮj"3ӠR#Pj`=`ևAzµ,%E38*LF.p9Bf|i7Lz}'|P,tʢlF5 }2?p:x&KI3COjygAl@(J@FQ@MAL!&i0 !+D"& ,z!3c?glgf!VeHXl }&p $3V#%ϛzdi|5( @*f1Tr~8 ǦH|,)Gz:B6 !2TN̋ |F Xynl֨3{"Z, 3 ʺ G3xF-:xKlS/|V["Щ53 3RWG^4'\|(nHrK!J}= M#9&#,7α'ŐbR-QbДJ +c왢 kX9& fJ%\-s•Ѥb40ad=i=ZqJ%1j9]04&' KXw/@VB50q6$HrpMab5crb*oiG.a 2ˀ;g!r5@dp?_J h?4,{>Mp;(ycɅOg,:øg0 g3 NAjԬM! _9 @B? 58B:.Z cE-·"=i/K˱q%h4\; ĉ;`Re:"sD A!K4dU0\ǗҖۏh1j5UBD=daq]䔚ٶEV]/50^"$Ӌ o֋ı#nOw&A2&CzjMkM`ĝf+"<9ZɭSFC3?yמMb,QȉV>k]HcniW`$"D[X,죻k KlaG+hNɚ6H% [Q'Skit 6"o ҸÕ3VrlO}sR}MZYװŬL|Ё$S̹xYUqcr?K=m9YeNL<19&Ǩ#ɧU[^#RhI\@$x[pd|8=r+{JUm)>I_8E 8+^ 𚟹:iI>Ga P0 ,)ĕ1*O}@\HʿAd:8g 1E8 *+37l7.ʉ*m@&v g+n&2JJ ܧ9u8mc!:3͹JB[lΙQʎMu9?h9}.Vؕ5^ɰՃ>H `MS"N9{!<*0EqC{DZ8+FԹB?.FifIriG[SMWip|/jawC<"a!ATر"lĆk,("XB&6ĒCD!zRb|OT~> 0DV)c[bdlAjqʠ"~c l͐:i70)lH-, ;MÈBJ$Ŀ1)mf]&4l(&NM"% sG64,t&D2&/),Cvj,cFJFz+TnB*cF?cFNDͤM<~OHR&|{~80/E,:L`%lP,f,3BeT:])l'r"Y.P,)3Thmo8'c4"""X:~.*5$zw#h#722R3^%~jvZH 8 %.EDsJr*& Kp"+e2'i8i,.cN>>."D@DLJ;n'0NȔ<(Okjlc\LŰ,&(#6†BpnE6%,%C!hkXfrA+9EIc(hN"`k4MV`&`"2~@*Un@wc0c6]? ʀ;2)SҚKQmjb<#&1I6`>UVA+X:ili`zP56O8}<(9R$̧B/n7Ӷ'ZtcE6$eDrC\&I.43OEz("N$'v4꟎RyI6Vr2al0Uj8rVܻ@,G\>QgJЇ/N!4o &׼JDP] Ú"9J 3^5Kfz9 K*' ,3Œpa@ $LB",bw$a1@ cXg */X,7)Z&71e#^AAa?%u5Pd@{JL +3I*yz O@li0 1x7yEH.}cOBs C Q&.afElc7șf"yE9MIՆ.<@B Z$8$BiB.U$_Il"+.c b@g|xBfJ4ej !hF"veSR.a>)Tn? \IxbHABJ׀Հ"?~QϜJZEd<l'$F"ccB`MN@'l')l'K) z@&9'si5%%Z&V--QTU"=BbSb7<P"bj~Z8a:ǮnTP(l(&f.X5Cf)7yMpALfx"'(q5E .ab~d]oTOx.G-cjbG_tbyv?"f6¾7$9f(D*C+In@#/$,`GDa\ g $(e9x$r@ߐ4* @0 @@W:I1 `h A 7R0 ?`J444PQ%#@ Bj @Z!+,hObC<@>CP;?з" eb2_ax͓Hk\kS`kDY@`3;h~wvLFJ_ >}Rllw} }ǀP?:Oph|;->nP+ ƪ 2= 셁)( H~G΀2 t(V*([͔JQ8/P9*2ʄkȢ2j:L}Т"'`ʪL,%((% MSZѨ{5 ڰ2 ض)4Y.[5Jf(~H37!z!PA` ꢫI\ 0k LKh{:RZeK. =`=X'~1+(ҼIz̪G(,Cε(Wd,Rޅm c2BA _7}'}|ɜO)HnSSSAg0~@B1XjL:jLTڄ2ڟ.RzCtj23 mh*@ fq* PBqJFN(tj2&aXlAxJZBV81{L.JϨhΖO*;+z‡@%귳:0uK|w#3Sw4n|#rVQeb9$mFJ0faBZYZ !8ÝSz̀1p,ėSiLTlJI'{#dj%bܞYdB58ߟ('"͑V-5&fI+:]+35ܘx?ǹAF8ZwoCIZsr|K=e}CRd*\Ȅ q5%$團piĠ^:- ,ޑ4F]$en?dU%iE@zNQia=@xbPC#CgMFcR+P*l|JӐCm%SiK"͏ӂjS!\@?0 !)V[>Zs%6@AHaXB&< I`%D?:`Y57 Cq -LSe@#@,CfLaNH@L `, A1|yvQm͸P怤2k ap _JMħb`OTBr)b3' €4& (h' e;e?$pV>MRªW B|%}pJܜ ZpXa\3\ǑJ^U*fd|.۽c ʒKHVT#ADfR.SS135FW{,MdXQ`HW|_@Ys@# PJy1ЃPImi=0%Z 5V WrE 9 ^ς >IKoG$ \ZkA>Ũ=Hy+fu\\Wx+cőK4n *"!Wh9aj܊R]Tꄉi uD?YW>/8v@y"_fE֢S%`:(Ho?L4(q Q<ѨЀD{:6(1dЕd$Qd`ekR.[ #.?rf!3`ot IhoouExom.E$`86D%"I6R$`0"=qٓ`<0Aǧɥ6*!m\9MEfզtq]L4u2ʼ-B(hн|ƍanAB_IYI@eV=h2 EYܔbyl2"6,0@܊h2Y#xS<S""xȋd$Ģ"cL4D})\B|"~6/.J+'@,$F=B!P;&X.8  "FXĤ6 Ft)": FL"*ȂP/#m, Ly#bZ܂:mP°%C0,f4bU@> ƄDjx/$( 4+62͌+^s#V2Ko¬0bZ-qc2d(EDRxeJC,WGYþN#f>B_"["1bK(fjB8-:-vAT/x z,(PF6e >:l*N^5 4Yf0|Q|iKDaaaB!4yz0씫˄l(,qH B%mjhh-v%Ji1b`&X74pV[' o澉jĦD\p|kŮ8J6Kj~D!c?: B8# &`:@  d'| :OCm@6qgȐc23Ze!#R Q\jfF10X/#`YJ~.V?Śx즍LhnY&}0b}Lж$!6"@#%NjtJl$lJ(J>"mdw>),%/nr$~S@+,PWc:SY>7.P#C=bPsc:1bYGZdr'B&GV"H$" 澯L;I0ffD)F܇K5Jc\|R@JH`R2|J~*66Sc .) j5D`*qtbHjLkc1*R-,5&@7IdTjT.e?CCmS'w: Ida.put8& FDYbJ(D)J9C 3C.Ğ2f@AR1yl364* *3"Ӥ#,.\roC.enjQF'4vQlI.dl J̖q3>!I>ݣ*)ȷJ.\K43kbC 4`<d@ 4n[21H.oV\hdk\uclڃ$$#L C" (nR%X*+ڵ{bYOG84Q农$9DN8%R#DbBIcx"6¿o,##\:>HSQ2 Q.ã-.A(ʜ6Vچ 48*YZfMlOH@i4#d3dQ+("Bu5$N LBȄF*Rkȧi/6-+C[POuDjNz!krY(} #ljE#D#>(j)#CXdP"2dc_8T90pDB>,` M@ * "#./Qr#tB>H1P n|F"0H6,El'ɽrctH!dEM4f淖@I-  @ hL$,ߢ|_@%60$",CFK#C,k#dΞafpvƞ/PD(Ckı.;)MC|xklc;.&oq!"Dc,@,cjKsҏxH`ĩ.c.ꒆLM&>K5SDJB,gEho:e-q4MjSE /d0mU-C!eABѕXs  ZYZȣ{t %m2$~QH#D4H!6AގUnzN VLT룪c#P[*<(ba!nB!/`21p %:ir*6$/xm|K;f8{ OJqOJv@j7FT?@BYĸ0d2pA)qrc"IY(SicID, @P ' ?ϸK  0B&8 "PTH 0}=Ϸ {!p@*o3Kc90 Კ1 %  BG%pWKy@м(Ф9E}XH BT h7@|Ph7-D.| `65 8W-oe1 =:<~!Z)!hR:'ԡ! zH#| ~BAPjYA·.Ԃ!!Ơ$꼈 "pB(tP)3q$/r҃I2+8ά0:D@F7=P;x 9#|hSjhOZߠ8)!k|;|绚!@Cx|G "'|8 },4Ph: 9NrMx4?aE1$zQ(x}Q 7B ֨h֐]"U:Hp|wav,bGz @/ Ƨڀ28ЫK֨Z0E8I'}ڇthV8` , g8zp&AiuǸm@w`J\t)v^V`[v{ 2^#?"@)!9$P(x 8@9 9[Xnp. X#8> I)]u]> ߒNGk `Q3[ &5hfn}cA)M#Ϫn.Pȃ#w nϟ9` DA/(r]׺_  rx=GmD;CCGI + ݸLIpԉ! eHRD%Y#oIcaggRsAcך%9`pC{)TӐ ,JO[sU^hU$QR@dJd%#|/Ҁl?ü~> :~%?P6<-a@`Uh6zNx?WQ9bLJhe/v|&K!G")w_URa ߨL> .Dz@ |GX@LPj4EXKc)rgkh3ej_k-DNHs&Es0 n@@w@@XȇBȠ!c$Z;ǰE(+@ǜ&)txPau5)@ )z!E›w;HDA#OSZ ?HKG (4CG<$Z9L{=%!=(ZP0x<@o&Uc9"73؂0Mȍ]G vu1(uv;7\ZӀ-iC+ =FGylG'5>($maRo#CI%%Si /=5N9-8ʣ8S(=ATNٮeF.ET"bY#2AH a$D=GE,@nC,A` hV@ Py>@y>ǩ $z 9%(iMבV9Jo-LZ&8Dx} ) |>f.x T^3J)Bjid7 9ˀSH}ɨhWzWCC!LI49}#R)%҂2K!i({=pt+N@R,0Ø ;H  `! Z>E)вL7,,!Cz]\XL9Y9BYh~7=Kz췾5XOcD"Oga\t-%–E!A`.9,#yyh#7þ9T/P ⚔>I]69w-j D!>ա*)N`&H$`0$Zg(x&B \eh"Rh0#& &iH*Ԉ"FcD W !C^uD/bvB,+^$! 8J"`AERS$3DD"JEhE)%"!#C4KXĂ%< CJDPB.ƀ٥k2XLI ܣA2,d$F$*4EtljD KHl(BdbhB8":$cVmk<.o!x@tl8T8]D ,dKEV!Ã]b@KX-"v%2>1 D L2HL DL2Dwq#N6i̱h`8HaJ~$T,9N8  @ai!rm`v}`p0A&! B&`@ HR!b "aTD"+'Jr?\g0=GH:hT@L@ !G@a*@T`(`%f^->% E$ca2? !(aO[`#ADI(S8Pj$*ae gjn`8^m@"lIA!!" AJ` )sAmR0@\`D@\4t/2LrO~.DޑTMF:b9H80G2a,Z:qfU4T/#BB=B7,_G8~A%"Fx%@2@Vg#DJeMef Q׫Y < 9AI3C YLV!POOBsV$ &cpRKD'x$.ƊUIQi0ID~8B/ V D ܷ5n$ #¾G`=$*$&=%T"(7d=+L@KBJVh;H,-$M<ð_d TS,:./f[̦:h"GxQ"N$,jUQxAN5e $ #):8 B ,,#PS347"r.@ΰTAI~> v$6{``l sER04!"cs4jcE'AG*)` Q("M @ogD@)e@BL!KfU0MmpPn(j *jAބPVv/ VHb3kL?"4$wH!g,TG3d<$)EKHbQv^s#gbB% J@E 00„W0e%F'&CҒWE ;dP}_MRE m%+ y} 8c!e.HFEiNo׶|8\GQyX!dMXk:j1]dhVx/B!&,2D$qB1$K"/&VwMQCʫSJcKC +7oa )ZKRX>PvbdhP+È)MMJ:RF N4ɋXZ=0E`@#fϮ'Q;D.mB^{8"1cH"$[$cR#\鈺RHD%&9[<|*KI$Q% b=w#!54dY,S(,ZzOhd8#KGU.iMYo)!ÿ՜酜*s=Of8X{}ڿ!Uv?^̐ Y>b4 ,dt$t,0TFΪ%DgbֶexdfJ#^rP)K$fABD!(ӄv#Dc HV !l#Tm@A6"%M*F\"LDV;!qS͜aJc+6I&DXCD/LK.G-% gDpeW$Wj#k#"# @@@|^< #)C00҇}$O (TZf`7RJ&D߳J}HgIIAr \!|ԟ[@s+~Z8}ʰy5r))J%e2yd&V 0ID?5S&qdJ}(U]&,IS>=^q5?Ԯ@m#| !cT MRJ&lTA,"P*) Ԕ(*J̈ȨHP7lf$j A<,3@9|_J< *.+Ҫ-KJa̋2G* s|0'˲*ҌG1JDnDH0?BF 82Q҄*ID}797 ĮjCWT꘦Ф@p@(&"v+bH#ǰ !pԥ2`) zv`A&aQ\Ҫ!ǹw LXҊNu{":/?Dy P}gz 4V LI~!ǹJ4܊ 'CөX @(PN\` eb.螬lz}Wg (A fYG }B @ 8,[CVE) ?K2}JԴ)xOFB **|+PP,(.ֹ %,lzf0i2\2mg6@fdkTc$O`K̉X c2:$E#xS$H;12 u˛Godȕ "~@KGH{z2Q>$+ҁE"K]kFȻ$e ]BC 2<5F$nYNj<7[ ͬkHi.,9R9H$K),.:ATb7(촬>I y&-"$0bq7 %J D%@E)%'$%DTMjoJJ5h*96f}ϡp_%5:Kt&uv1.WBqLĜ.Jl)]H1T"&i>$J E-,3I# ";P$_T%- >pɪIjc)4yZOZje!Q}6(e[R50n8r\H"CZRT\L  `QJ_PmK$I]HoU=j %kAEv*SijTRbu[%Ci.R.MׯV)u'*}j-KuY 1W2D%tIm X"@Q/NܖH!17be +K?O$M.RKdI\- c'e ԴTV!g P| JUlQX5ȬRMj89S=٠5O<@c^CN=qzk-5%.Y5t+|D`UF+ AG(%캅QN`,A0a(op |.WvvzN ,&`4-== 0 A`A=ޟpW=C2d&+jYK$`oDR% 6!ţk1j>B-"~Fⲃ h dܭ%h&OBL$,|g򕧕zZG`ׂhh")gp1+P#$C bDS)(s( cvF$ˏDĢ6R,ȰH̀K𨌐0RvR5`$ $.Ԅ|$V$J 骰=)C#$=cIo`T@,O*P1 o`3*(HX1+;9H]LDf[_/>{PVdZ=- a5Нn!+dޤ36rIM|֗* Նz0 Bu0ĔFMN۵II12d!aW$@~kJJ@bT,l ʈ =f ü("bAFG0ȏb'n""# !VF0(r$ @vb%#赐R)!hn)e 2%N.jb AIT\ԍOL͟A4 2<-P-n%O ,)**NBc; 0ARvvSSn.F5T'X A _qHs XdX%P@O%R0/%''5jGAh@0 *΁" }_ z^6z4~XSDd`;^O *̫-T-kvʄM꼝,J4HBHzKZr+ HkBJh- 2ӫg󼉨I ?< T6$t$$8,y"jk*KJ"Ch#B~Xס*ڼ(GZ tD ,AsD)D8~RI\KJӨJ]+찁l3K{ ˔'E#ܙV̚; SQ NO $ JYx7F2"!oK*qJ U2Ө4 yޗ"Ƅ^T (lFHVZԔ$tl- ,IZм%kC:KaBeOQRLTڼğJ :0U_B 2~&GE=r0  HFO#|)T}:Z2~6˲,~ J3i%.5}LoycUȀ Kr8]ы)ZΙu15)^N*"hhhz$D0on֤d &75Sg1K~zUBJF1ZM@TVAٺT{D"Ct%N0O~fm)*eښAJs4`JewWMI5k 4P2[r gefӁ*gY1V(_ +@(lG(AĨ]d9En&EDNV{z؜:_Rh\ֻ=9[CMO"LG.D T/ⳕR*k<}^ٓ.^UÓOAFjIӶe*AZa0(؃Z2ZICWъ `  M|}65Ҏy4AbLJ䯮tYYbOl%WNH%q@b5uH֚#oCGŒM=%] cz"=1*jDNb*n çr"7De:EEq-Ŧ@iK-$xf]&XSAfd3D@>-F{e!JQPq@Ƭ'}Z+ehJYt!r`EIDwtT0\N\0X:3K Q#4=ɕå0Aт HG%"*,r> :']cxljv̲Jʾ CYݮdH@<<@ :+xI $0#dA%~7}9AL9jo\C,\CylWTXBc&;aGH92g|L[C^5SHrhq9-gUs,ZVTKT=D%"iĞ#52&F"p$-7$̞̋'6bȧL%:]o5bȌmANZ[=x!4thd 2EԾWDz>kQ~-mvŻ=Vb3O3{/{ +T+ d=X,VBgmu9,\KtNd&e ȸ<R 14E~1r LkLfЦ֑/6lvF<|MCz+htiI,*z?0*D.NCPˢkjA&3J|O bT"?:2*<,?P_B~Ls4념d(*c,h4Mbn:vAnrO$OIH%NaʨBl0f}b$l^>J,,!lbhFl~osE`P' Z$FJ˾iJpΣNF<=*`aϖPQ@ډA ,hVk!sIAmX{UP@w  /?ڍb7%#߯B谜b[fxu?p,Ib"<D }qn}?-mjV\bn^kPjSGzQʔΣyڀ,S9ZQ @8+H/&,bxI*2(bn#ʭKB.^M+s-HJ9*2+ 42,O=Zr:j"ĩ |b#ތ7o-q"M &8)'̠ e=N>FMbf,L37)j)K0jK-"(sF0t# VnjMZ:h97)B@r$`* j Wؠ4~/ȥH۴\*ǵ:蚮(wGI!,7z+<?|u*,`T } pk JBXG42vcuo+ZU& ˮ2it/u<8,㺟WC%Ϣ HpZ!wmnM=F-A⊬\}^SCE9LE [kd]1k[KzEpWLJEjT?9*6IH<ꊃ DuAi97˼N<<)}Z F+ͱ70@}4JyduUBS 5VѨ'1T^(-͔ )}E%D)j |ȃq5ĤUD^6DŶWXw=-!GlL]-^nA7:ym)yRGx>SksI-j#%R bR(V-18^ZTW,"XM2[P,whW[i1fT/t`C:5dʀ'-&ػ% _E$1_G\u"rD9V PUߤ((ՠC.,=IJs Б3Ms%LARU(ObI}U a -?|"1\/A2ڞ4!"Ȉ+蠸 )`N9[.kS!ض/47$̙ Amԯ2#,TS,h 'I%[8Fڂ"@"+At˘q& {\ĒV)ˡc>Cؚ3{(I6ʖW50W`wPk&\KLRc9s: m)e |GNF98nG$F؂S ZļX[Iz9 {S*f睩N9{M`齳0`16iʄ.ݨ[^@ 1H- *׆QlrY7ydŕ',/ mYok/1 a@v j删qYUYsb!39F1 XC"V( )o^}r~7t 7DpDTZ@38B2 tQG4 \cԭ2% KF͒VI@eVBeVN5~*[CKjEQ1(e Ucc:NȽ:,.+Pg*<9]|m^Σ&Jɹqex9XAAkuSyأWS_mAHӅ b6\aJwI)I(NR^8Jen; =ǵ(`b:Rvw&S\rLfcy;м\sM] 1>Q.bCN9g5JL%s/ Lbb3Ӗ2DUM3$ߖވ^R%MgQ ݨN4h}H%)yNYFr͠]Lg0z*{u Ƨ8m끧 B7iK8YʶLt TE%Xdw]z쪻)vAai1twCjvWvQYv P8$ Ba@ !xN cHt  @d!= f `%o^D4:#MJQ.a5J]GaP x+RQYI De%2, (J/(m3iܒ-vV [Wrn(|eQx,>AS\mX |?#V *Hkzԙ8[sA$" C$Jh$*-;4, h+1$F GZlHؠdj +K[.Rg/DzD,$-(޴.42l+B?S&C5a/,GRB$dLH&6"B-C,=@ OK!O v ,J*Z3rݬI5]Q :811'iD,jMHGP5Z S$l/5jlUkS  "+U0 LZ++ȕ*ˀOD_dq 73=8t.Nލ3/ 1A L>,e|qKYTL#U$zk=(~eEbP7&]iOVwMo̻_i`<`ԧ&~Z./o=g7][NՐ:6k1 B^ܭ%tW]6w ɌwGl(p- s=QsNֽ[/{ew[a pv#$rٓJ?Ҵ$ QuvMU<44 "b6wjnrPTby$-T+i#% _h#VI ?P#ц@:8 B0, ZTJIl'Z5)|;P\9M= BPY3L]]=/o ܹrv<7CG^ &C|1OxFYK a29u)gg ՃM rO[=@tύ'*$)e諓e}-ځnLNm.b9)ZAD1 ?(HG.vP5#H5><%ct՘x=N@*~@\QtAi"8 i}fP0*/t霣Io=8¢SHL*%͝2 QP]c֕q"z;Q(NXi#ƶd~sX@ Lfn);BT#bRy(a4 S&Ű:7#+2U=$giI٠Z4x*zD_UنRpUvs'-(?Ԓzu4 bhHɇ@!㧆-i jJSj]xd2l2H'~OI3wq6mP&v9g7>'‘Pqg䎨3H@9(T,yQMI mNMP-Hc '+cK#޻r|2]HĹXJ@)n$6oOMr|(!Z}W Ryhf &XYfRX$xV{9RUym7ku.[)jasH&FW`8ׁ"X6}W/3Z|)H["XzQdn!fE2MSӺr $3u$o){8v]hB@@ @?Pd4A8V-D@bH᱘>%"cȴ€2U? N5)F3|7BGm<1H@uY"5@17OS [mڭsm P~$tסwEV@ Jqt)f f #YBs.ew 3>lo\~n MKw=wA3 XT vzW9b[ܤ"K;楧A `*}AnSb- bϡZتH,@ KdB  )`%0z0z* 4#$<,<C2<C>==$Aperio Image Library v11.2.1 label 387x463G3 %%<"Umf׸r [s6MOh  /G`x(R $<4Umi˝S`1_IVaky&,۽  S(Q19  , ].'q$uP7}[{vs;Nb&XQ- | ?(((KaSh(eBE$ʲ?aS)*2OBu,8 dd;1{R&}܎iHg9HʑJGQM V%#?z?2—= r)O^K#,nodsF})D& #[֌sF?ZxQ4YzӕCcPA46 =F?ScfEm ^q?Bh`hԌ7Σ9Zp@Ec}:J#8}9J0O/b*8>7nN.'<40`| ! jِFs_*@1$y{L<9"[C 2"W.XGH]Ae9ڥرN점:)j]ث(*OP{Ոҥ* 8$r;Hζp9;oNܲ>XI 5Z`V V8]{֭bH?,gCڪEsj.GUQ;TT$FBPʿ!3׽J΄ye[s`#6Eci% tA={قXee*y9׽)m[ +*Jאw][Ak} PYzyƍQ+^jFI~M^@?\s- MS ?\sI4Ŵg0L"7}nip!$9h[ɗmQqds׏ز5W+y'Wh;}YehRy&nNFs8X.xmm?)rA9Q@"ǹCnT<}}6);Ȯn-ÆIUU:R3mKon@da3rpxV[P%ϖÈNIr3eidkeRVE\prNrH$s{ 2GgrH͋lhġB ])zcI,Y5og$Юɑ+ OGүKhkQoxP>Rry=ҍ,=pI ۤyP6u VѤ_+Ys3# 91ƦA-[>k3IڣA@_8}զIBӹn}h3 p D^g=s=;f-Mw\I9aqΧZw|mg4dfPJ q;dPA4L"gUs!a qzT j Y$`z I9uvpZ\5 A>bG9$zgw<:t t$:r9H=i}, hm,rNr{,[# mc'99$]6!6>GoGS&2h12l,׌raVX"M@ȒH99Ak(zC 9990ZI çL˙zE 79Yʙ,0 )!G'&hmv7ހR:moLCm/y0@'j ޱk{xw)f#pqt#[&oac#ԃ g9r3WpV7Fz g?NrD73]@}3bOe1$=9'̪ xeF0rņœ'4$ yueN镚> 1,7}O;yNF| KM*K3ž:zmX-.v~#sqm kk%773JDq㟧mI srL-迾;8B8z;M_f3Ҡ&M!GbN6eMs,(#6\kr6CCǎPF&3OX"FٷTnB go%.^yq 37 8 5 521, -~[&l^~c4 5$bFH:rA\皊JH#4#=9 }r3SK؋frX#=pW>ꭝB?0XX(Vx$gϯCyC1b@Ҥ #[ӵ C>ч(RH +53*,ncFrHdӡơ 6A=J!_3@nK.r2A#O>Is*/ +f9 imt&jT<ʣ88zgi$Χo3,pK" eB ad= ML,n54(RࠐXgs .i'bW,Al03z bBH-3v*&c$3ɹ-KXD3Gq<&Fs^o0GYhnH䍿xp`Nw`gqY98Q0#my@:wPѭ~郒x#gմgm.$`d11wὐ\ӓG֭6kl!bl`GHўh 0`ڻ'`8sްm巊Uϼmq8s=vj(ȱRǓ'5S:Q.FwHIJOsT̼r'",2JxF9'9Z<R8-.s#&.Nk79&KA2ΥM#95Jhu$3<  qy4SA%}qo#&´ffO: R[\ ` Q%|71oÑ=fʺy$.38ʨ}1{bia=6mǔ 1Pl^JiG`JP]jk;UT2qɐs o֞l+43H?r=s&ID+K2?ϩN''kIdgo$68E\[K%»Obq R YbgOZ[`}?YGwzU%lַ&ɣKp@ 댜Kd+][Yw8  uwLer"H$7t`A0MkLGe5<8c,;r}峉A$R^wgn>u,k59yݞ[89>#kLRo"f3,{~HϩjdjPBͲ5bP!pS^%<+76qښyrJ)쏕zLRȊ0pȬRS pH=1OB]-1%x`9qOn*ONFٜ[9!Q=xh?to ۻmBP?=sDH剜Fr.\~>r~-vڵ<9kS{}ffӍVS#[s[~7 g Z(9?@9'qIoZ6GF2K*X}$)@.HHhr2O9'qV緆oy1rp׎tjbԴ3kt%`˅oïw[g[fÐN@8u~i4QO< ==hd8,XQ+*3}B@'NU屚1 dW*ïM{;SYZ"pMg8P*vZukǹޡ{R%cEv+R13׊d6GrQ 'jzYh3ynp}F:`v5|I}.v v{tj05%% 6~ g0q"p ;{7QEx qZ2CG]A9n[CހP=:r  X߰D[q#h8A׎@X >e4"$UeO_DӡA 2yg74Ur@1 /b3~+ (h6G${FPc83LqӼB<ھ8J 7 @~:wK6u"M#cQAcLqӻI.^:$ '%F1p;9昲 4ݾx.'q^1pP:K d챟11ÎA;`8y_sr݁a#q׎j+0L;*dF3x ˪}CrqT h_ 28\u㚞.-If   =@"k KB$ O5>VEho%ԧ ܅=@AniЋ$KxH#̊ь#t=:,J3ʌdd{1΍=S]6jș[ gǸk6;HrϵA\tӭonNj9Fn8Tt)4  70p~s*iݖX5)N$%y>yIkg-0*mldM >rzmB_-m( SfO\{[ ?$D!T2NlZKmYp'L΄62]_-&,R/eB@5-k4 22"?ǝ#ԽmbB#$S0vzvLѴ[ekigE+ xcsR"Cqu ";Cd#ߎñP?q_#DKFP s#\UeScUq0ē) 6;tgn*S3 ?_&$H$ݞ82I Onkf VWK1`#8'{uIngiq349 z?[m{EiXd\F@֥ y'YHz[dp{lО4X ̐:n=T@OP0jZ@VInbP|§n+w(еMYg=BAc׿;md TԷ%TwY 2H{coQqy7AZPΜ:mT^m9Dn/zG^[o"BBr2 %@swr+ ClKJ $caҫYw $uI䁎9!Kyq}hb6,Yy:0[$&hFr:ʆʚQ%8$s$u'_x6"V_*] s>4[ƓtIg9$㞿̎<`+ST;4<Ÿ`\AkfUxwp8G1${D?ISq%v18$ G8w?GԒZ8J # O<%᷐H<[xp%Dь ps&h IH%l1:_ $hfYqd.:>ԐG2ɖ'v+cs^[xVPHJ}utӷh-4[D J>: sn=vPZiJ#*ِq#qӜt[^9kIN0O'z$$M<6ES=@e(qDvG5-@o*9u&Fт0}OcdŸB% @@=e uBd3 :{5xq4k,J[k?yᰉq2+7Uns_b7U$$mx׹o(4`D2Yp~PO#$f7t( (YAgI6O1S sz[5s1xܱ yzli TcV_Lw&B'Nv0T9$wY,1\a28w:ũqcles+IpvNOw[K&?1mmA@@ q`$w}aR7,5p0qs-߀K+Fin%?eP'Bc9NI'e-HOxШUR1$sBl^V0^ (ͼ-n%6`rqR9msnFpQw` ޖ>eEgVު 0q:g9.J$ݽ+r08}M:me@ ;08q4kIYJcuW= Br[puRuG'Yn.ao!P`*2{-txdo2O098מ(,Q77[ve9 s`=Ò9-좚PpX3|#'^x.YT3g@_PZH$$g$܅VW "`BxV rII?ZRX iI 1GI,zۛ|Rd,IdWH-9VUh+\u#UE"2QBWHsZ(`,0qOQ9892' Ǚ/$S5=ͫ_me$+n!ר뜜/Ihd0$@;OS=ifdy"I9 ;##֪Ͳ4:#Gp$=jݴ2YDֳBc%d遅T`}1錘-! &N@>Lzc&med'21CԜu<c&9]/iXw'8O1H!#-,q[8x8Qz*越Cb81z)IfLFs+1z)W-M~#8>9=qؔk "vsr H {ױ,e]C&Ҹ‚r8?^ƔACyP(0^ ={N#Vvˆ 8v&Rf94lBA8 qM^Ӯ|)&f MɌp@rV-}{ODXp?*PE-c()OoX论و qΑJFdgPTdOHcTtKw.\ddOo[VD22xw z^D.m&Y. :SᶅdSp$aU}>%tFU̲`%@늳ycHX$wxV!iU%)[}ڣKT('#LH8b8Ϩjm  gTHf]}p03#6(m9?@z\QymteG)#2 r8g=DCa#I[y1HYP+ Th&8b>qtkt_8NyIgrT rHI i}1xQ] `qԝ܃]2&[ba[":#}+^KkeDÐ8qӣ|`ġLwh`>QG:0E=f*I5O>+H@+23ISGc&DX*mf@<9*AH%T,d8yѱĵt|m,fO|~y*m̱~^E(#ӿ5LFfw\mrIz.f2|eO9}jHt쌒;d#-#N*myaۀq2R`>R\E s"mM"28v!p[qdtxmmӵ, vtx+(>v[$ gmu _9YBg%IO'#:P5ř9\#RTy9}sӥJ,uǚ4D.KeOBy9׿N tRܤfUA hVQLuxnc3 1"b$HPFp=N@Da €3G_^=4{ۍyow'<:]Oq$vUOs_~;;g01'-qߎ'15ŜNkL qױWvi֑3KI`c~$lżhy`x>%V9Ydr`rH8c4GoN&(+AsS> ov' prH8cj;P,hqF<<3q˼4ь 'h` ٣o~Ш '?vpxKo7k1QnyU!d)wrx ݎMuO+R |\gGVHG#$aG򊑮eLp:}p{,_ަV]>^qkK2F2]392#Fr[)#EHHE !XgKqWMS=NF3;6h!/ \y#;'#T HO$T n'c! zqKW/#vN@B'>=8%~Uв#E~7sC];JCvH41}5>L:3#hJr N0Bs׍ ]Z *{h#kb7qPߍ[i"!Xd W=T݌Q%]ou\~C wSR[8n&/)0HHRH, A9i7&G8UU0\`IϧlsUdQmˀB ppA?NK=ݦ.;\ H'xxFqcs$+hYd Q3O䶺Igm1? pNJ=]+tD#WHTOj !Kfm䷖H(Fҹ9*{tUI {pfB񟸊4|A㷭T QޫL?sR޵m*Cr^GR~@Pt_H8vdMz|Pdʪ#6Z{hgy^iynsTЮA{ekI UCUF:pGL X.e"GS``Ќ\jap(#'~qm_ f$Dc،=Cq=d1iPI#G1ywxx & W w gLիk cVt(|J8?ws?fY-ԋȅ`T++9:״+i)j~4*zqO4e7gbl!IS~4w+bVH AO׽ch|ʀiʕe=-D<Ȋ6=\dW0G cos)\D3GzKsHLA/qI#Ԛi n&r>2ᛱ#8Tm_}ҸT $3s &]0y ᛱQR  2 'NF._*Tge HʜINF+iY7cİ&5 Lzcܟ`D>r<'S;agz!XaӢC,VYZfPg;h~te`zummNEpȒrx @SߦjԖ@OpXǀ{d u隳 )f5' UǀgM6Wg(&e,8Ld?/sMbΩƲlN*vy<@6Gv?/zqSh`IHaTgWrrWv8:A1sni$rAyB;vqR:ʚѮuW>L.~ieU 0z u=:,Yg\e#m3pemnHAin w/4R+cfzs~F&>Jάѳ4s + `p姹Y3:Pmiq@O^Gc"b.s$s 6яsI͙y!;+$Lʙ\;aN[u[-I!gG eN1PXM&BP\L :ȫp@}b]imxy09vqxug ̋ N1Gɶy@7$Edqƙ ӛ.7ۀ tn-ľDPq9Hwv71\E# p}?jK{Y4GFek1^=p =N1iWIgr3Ťy]IN13Ik֗$qǘr\OSpyvMNnsE (c'1ߎ}ͪVD >`##ꐇ)%yt6%a^9 gcݼ[2, y$pzp7WBȷTiVm$u9n5gpX. -v-!XdMPeXHW88r3ל^mb_%YW~4eP;r3ל[+ڶBEm w~TGLu20:c=ݎxsEJrݺf7`EOԮ8+g#n1׏JZO\^F(P8dZNyKQ⓶1Iߥ'~xȦӸ(8bFO(@RFx)A8Fq<{ _jL/ҚxAQuJ<):q)gގi3KPF0=hQt?.*8#Aco=h;~_ ?(((BW$>QL)@([Q =1IIQ)rQE2(^zS0r9m~N;SDR>^1VxNHV"kG3JrPlgb~ee(u>qGҞ0QO-zQR[;IpVP~TېkF{KX`tRrXu@#w׷[eJbѼ.H=:Qu ebxBU.V6+Bc=ҖA7irp?*F!fBzcʶ`47YHa'3>PHb'4|8 Hb?WJp@0:c?ZyT]c^b\yf:*1׭F>:)UA | {ڙGEԀY@Wlj/ C&qy˩~ك=@qFʢ!: Wa]Cy|w!Lx2ͻ3hON+ܐpF>G/F0F>qVOP.;}}iw4DFpI'ޙ 1Pl8iTl1#I Q&S‘We@}2I8 ,u?jeĞYX`=]O KjPC,rr۞;מ5jmx}%Dlxd`zg =Β t <3 E5ڠKd&z8zb*FTWzztua[i` \arOo\Z"qqaX6^sלg-0T~sP 2ο(+}}L> C 0FPd9<4=mKD"E,F38#RAi% 9=ԉ;oj#s&LlrHyv8,d[$[18 u#YU-" Ԏ}[)g;?eBڤN\%Vuk󿿭NtEG=>RRNq÷6 #Uݐ20gjCb5h6% Sd'cP#r3Bt Mce$ CUmWG(9'ryК\3X-pB:yO7w$O2IsI&7pΡ"xH,X,xP=xZxӒkĸD9q<^=jZb*:b \Ͻ6x-pbpn=|:Hk`zϸor@&@}qmZG;$Ax!;}=3ޣ.>?r wO7A3$زQ~Ig{qR}A4*AVMĒ$yhKP?rq$KS 5Cx֚,9qǶ݁-9#ϭ\MR ܳ9}iNj g1\n֕-L>AKxEP=N7wOxaˏΌ}ŒZ7FUFH>'Ӟ[pfy%\; $su$w\ybU$^OZe L[ "بSOӵZnV@Bô( O<ߦ;U{:kcgP"(icjGF ޜR ƮG#9ޜTJsޜTVv:+o 6_㓍ZdKqDB,=N7槎MAB"Ìd8GOo@r݈Ox $j3;b>n;V9i@!b;ԩ&,F|()i|/$J]ٗLnw7}*R5<J *D(ب•@1tL̡[NL(=ڡ^ QwRH̡JWv=3sTYe\}ݚ xv7z:l[eQ g@Vd[7z֘,/5 $1FCyrwsu0w&`  %iCwWw=?\sb[Mcʳ[zK{[C+Om Vs3ϿRDul8$ꑲvXP09N:f& -FFNs9֒;L3ϵHkTh݊1otI x߀Rn&Qۀ14þ 7.N$ɉ|ЮA74K qe1Ӹ75 )ظ` ab 56\8uGtq<Ռ@d8݌4v$T҃3'm`խdgXsW O-д1a qb7dZvR?P.ϽUG1uǽF^<`| B u=MA#_ƌqhQ7xzV]q)]Qӎ>ҬYʋ>Җg2` 2:qT1[kV("n l⠒yyt.Id|9O¦[rĨvy׹ʎ0 p:^ :3iaYi9`cH𼄩F%H=y-QDlnC.%X}KRm+سevd y-K-$ !QpGnN2kC1PʡU|ISB0+oWn0: I5Il5T|5 9#ݿҘ)1\awݿң2]-b38]ҭZ@ 6޸>N25,1~"m0p7s~db@6N1׏Sə0۷* N1׏]lnO,19^OqM2e''Oք%IcCrGB eHWP eSzϹTTO߸{˧%L(,{q٥(Tu?72? Xqz lM_n9#`~4aʪc$9=[M;LjX䞧!Ӡ[xqآ:9Dɾ0ʝ+WV>q=J#DRiېt]ÏYTB n ~0[lfݿ>ئi,̅pp?vb-kAs8RI=H,S*}@ڟ#lK ~3QXO J#p=*6ǖ\)Bң](lˀIzTV̻1$PN[$u]>Wa[ OGZ&ɦ|{5zA`scҧ xh 8=t}szST%+>7㯹7} !:Π}%jP[qh1eBO?GĎc`m8Jgu lUק$T~eI'XFYa?cH~(/]3H^,2MOS9m^@#X!c\XA$%Sm~xXe{/K"e~tˈ7 F( =5#T7 vR-2ͱRY\3?޳-rLZdǾy-TuwhIzŬ) D-Î9qRב}i8ϯqL[ CP1$. 3f܉&VL!T8~}̰eo#M2[r*83bƼ1!r\gj.!8Y88g'vzN9 mQUxU9tmRBѠQ6̕ 1EVL&y-F 1UYĦKt63 8?Kc\ioB",H$pk[0^G98I`pxM>3@@9#6mMch"+j θGUtcPs9=ZXao61!nH=9* ITI 35<)l3)rd1S댌v΄H`&>Tc&Heg2~9*yM+Q:dHңO,H7˞J1RDmn9@@yiU#J4hP.QˏnO f"{.N%P`aF=;{ oң*6:w& [t z]8`d_ƕP暥^2zc5='m+}:SrcA\JNF1'=B9})1qKtJ^qF8җsގ4HZU;z~>s9:B:(`)(((rQHѶ84QMh()T#eQO2;"cy3.IJJ(1`R"l 0NNi񡑶xZP O֟ko%Q/= F퓏 >(b[A NÄ cIsFxSlWh6dg>خ(j`v((((((((((((1ڊ((((((Q;QEQEQEQEQEQEQEQE4XڐHW$d;SiqEQEQEQF(~`QGQEQEQEQEQEQEQEQEQEQF(QEQEQEQEQEQEQEQEQEb((((1F3AF(((1EQEQEQ(ia ϭ:EQEQEQERG"b-QEQEQEQE#*G,2H"v)JdK eȨ--0BFF EscmuIȮcUћK_i T$er3 x9+"M-R}=D7$}tcE0H6e x9jӢd̮ 8 =s_Wӭ͝I Bw0ͧ=+}j\27@s.0ݴrn-+8di@Ÿ^F:~t#0봅qU$O0ᶒ6NztB2G=*!, !3۱3b,]$r1n㝠`~T"T'@$J] |Jgc8eg qjX qjj//J40EwOH^_-#b@9JHNX|7krf^'t}ἧ>iq'8qO.[rw2QqWe]إoO&'i=rhөGOzLm"zQJ>Mtv9;IҌ>Լ␊1IۃH x~4ʗczN9ъAߚPMw8׊<FN(g Ri(J1۽M9/:99"Կʜ-T~4 `~ xqq (((((VERQEQK袒(Rv;҅,p:ԩ*N "Nx6M=uoHl RXT*Gz?}2˻zI5մ;A9W;ճԒkѴKO8Pwɭ'bU=cME;wv8UWOZ&cw8UWNXfuH`vc$Փ) Wa889Ү[9R%xp9z҇ЊMIR PRb"p4dR_Z23Mz ֔QA$v4>PXQzRdZPā =h!c;N})2=7zPOj(ȥ;FEL&TRPh"6ymZM8~Tѿ*~xɥȣ+KEdRdQ)7-.E QIzPs<3h?:"@(9QHN(ȣ'?tgKKKFEQEy;ѹsғ M.iiw (&ERQEf@M8&4oQޖdQFFi `Gʌ\]‚@7 2(p#֓"rёKKRFIEdQz2)2=hȣppZM848RQg4n_Z7Z2=i7/dznԊB:FE.E.FGndQFFEdQIFESMgEi8F'jgKOȩdQFTLA`1֘Gw0Qq yc*ȍi"8Xi,R(dpAKg)\4dR@e=Re}ERQFFq0(Ȣ 2=i2=>\Q}E.G#QǵnqFqFqG"(qFqFQFE{QFG'`J2zсFGzсFGQFW֎=EfR{Q0)2qITyn-sinG8+;vR ե (=sҼxuU"{d Yv$;A*}e;4oJ= ^mj [*,۝#r+ȕѥeCV\V7#]f3*ns̬K<@ ̨vqjF,w1HcXbvX9>s{Һ2)eӟzƫ6qFR7ɒz`gMMDoѵ%`c)!FܓӿxB5HbX#TZvD,pfCkp֭O/ji:Ue)lzQ #=z++pqSiQ@>N:EFQN;E92c62ǠR\ {_}kBHD1(=S# 0UbpGퟒœ$`@ZO8)ʻ1u$(<0Np ֌yt4jn攮@tQأ,84c#F849lfy(!NS;~Oz~+N.2R;v&T n\R~nPH-_ @rz J폘TTރ9'^ޝiwN'UŻSY r?r+&=SFϡbSsR uF:Ԡ/QKKN֐=E(@UbcZ ␜ Z)h(M!`9&)jԛ֐!IR}/<(ޟZO=':,yϘ eOI(C>t}z/ѽ?(AG޿_Μg|RCC#Κ'/2;UWw1U2we$|`7zRoZ:}E(uR;` ֛+| "lF6G_QRP>=EQ}GA`s3 ֔zPOFQ(ܾ#84:df ց\FAiw/$h$P@!ES[2E)=H2qޘ2<֙ z)zȥϵ';qMo=iii4QQE8y8z$q~t:K'𥥧b((((EQEQEQI) ZBF) *GpiALrÀy8;@ny}ֺ{4_rh8:O-~Yb`08V>Yi%*2~㚇Nu)mfX`QGD*i8$ "XTm̋pN =W}ꍭ*E KX G<{fh#(FsG bw`$^7dHǯ6\򣣤|W]w~$v&+:\#E]| ʽWye{QSK_ ׌DdȢEC gҚ( x>|xZK]c}pOƮb!l1uAvu=Gf(=;F1Gxmd㣞qOh!}Zq7 gq.zcv~bk;< 3?$ciO։#Y>򱮃Ef!AF=NkBM~4)>(Gnb(.2i1/>1Is4R1H4{G⃟JnZ)0in)08zQMޣS)O87#^x"R cӏO ҂qKJ^HF &}(){uxezIӊ(ےj((:26` ȦRQEQN@֭5jvBJFy%B`cc19͌1L4`)(b=sziZRlS|vH9JIlRIwq)K/h@r[)S'8>9S8 4R$8Z3#J\vߗ ;f8=?Zp;O*^,7M$zBHh'ޑn;rW{Rg)hq89QN78]uJ_ƏK)QO1E\"F f9ܞ\nvq#?k0&˴sy~ho2h=OGINt>< H1ޗwKΤ 8ɧŷp$➌d?~Ru|wΞRܞE1讥)cRCw=nwCƶ6E:O[zw5"$xf֟F́+Ѻ]xMufOsg!fzuyO%PhxHML}*^H?lLTŚQRc4J4oJR V?q >xH#J(d]֍սK,2kB {J`dTenA dTGJX0Kޖފ(" R(`RRѴz 1GF`z )6/GIzʏQ(gGyiQ?*?Q?*6AFڿQ?*0=Gb6B 36u$Ѵzʛ#Gm$QfcI_Z?/TB#:ARcLx)9S$4VR?!?ƅr:ObFcPT؃mh4J?җSD'?#>>SD#Q|'Ԭ?JSQ? BJ~ښ&sc 4:?!?Ə%sj?t B/?i_ B'ƍA;/OG /!ƚڦgTWh0)GA;/ _SE}ߙѿ'g+4z/l%ƏF7,%Ə-GǣfH5-Vi>33@4p+g+4z/m?%Ɨ3GΏA[? _jz/m?%ƏG:?l%ƗSFqit Jz7m?%Ə3IVWito J/KVWhѿ+g+4y?~t:G%ƏmGۣgIkiPN̾q:K( )t~tc9?:Fi>X$ϔ?:_6Liwf yO~.?6~`~<v(\oR&)|ݿ1G'x'1AN7=9<(.sY?烊Q#)ǽ1kn'1S<ڗoʓoJn~қCÏQwsyRTy?q*O8gMJu*<_G|ZrN iLkG?Q6G( ԎUJ/##KR̝pߕ1\Q{dyh}?*C<`ʚnc7Ho7i }Lxʗqw0i2o7sնrjžq1khrjT&bi;ˤ_OۥCHzK-#TPpl>Ťd?4?Ff#iE+}2}Gm9Q?ӖF"Z_h*p^l9tt(ЍGeqT|;\;@C7]qU4=6_;g?rR7Op2=\K+8D3C.p2=M>-E+M:Vc8ZMO8.A8qYڷ% (cp=Û$UVi Inq~ y' s"VSԒ~WyW c)*,Ocެx[NiLgT@vI9+MGG}l܌'u^Sz\ WC 1ŇF޴x|?4Ux|?4U֏CO*C4 ?#IQh3@FO*G!'G!'F?#IQg#IQh33޴i?? i?7xO*C4TooZ? i?? i?7'!i?? i?7/!'IfIRo|?vχF޴x|?4U/!'FχF7޴?#IRTooZOC|?>O*CO*Kg#IQf>O*G!'G!'FχF|?4U֏CO*CO*G!'G!F{zgO*Kf@'Y>)֏a[O.hmo12 CJŀ&|S"WV\ke<]@oz k}B^RU("M.2A QsHM q$s u:($ڊZ((EQEQKEQEQHMe רe-:)hZ)(Š)p(8AE`zQE )p=Q(=(RmSړQ?*6QǠؾAR?*O-?*6GG?*]Q}Gbt~Tm_AQʓbt~TWMt܍d~eͼwP43hۨ G|';ZWr?k;Nt[\˝fm'Fb$N%]H<?RӷF82iwIeiv9KʳzQKRc (zS֒t94%PA'Z^^i3HA=i1ϥ/Ҍc:vϥ&: R@x f<ғӊAJ:.iKv&=0})'#<9xi99^zׇWWO%vNx4Hc cLOiXpzҜ''%%*-8[ :R14ciF0rh }iI)))QEQEQER()(^ԣhRRRQERE%-z QKKKV`$l#֭[ cUBDZ;O`UěH}Wڒm!=RqTN9 jNF J^Դ"ERQEQEQEQEQEQE(RYJx}j Ke PGv_F5+T<"э[ޢ((((( @0()ih(((Nt@E-QEQEQEQIEQEu;cQKY6ʸy:mJ̿aY 8QY׺Z NɞG$~XۑQiZѿh^//j=;U7wSG5[Hs=m݀4P'+dQ3Hx4)h'z)ih()ho"ыNwF-_׬_o~{B^RU(((()Hǥ1sw#u;(((Rg(--袁EQEQERޓJZZ%QE--((EQIEQERc(J(AEQEۜ7ϧ4Q[ zC\߆ ?`x^sgZ(QEQK/C)ch֒_J(QE%QE/j(h()GZQ@J(J(EiE\՘cjVm~k6pq{-͜ʽGF`x=CڤHH̽HNTSD9Z"縧REQEQEQEQEQEhkԿ_үZRYT<"эK'5C)OսM((((((((((1F( !PH#(nn[on[on}>(Z((J((jy)*a$T ' Mb(EGY918FkͿ̍XHrqT+G,`NsQƳ[I925ErMk8d/-T{KHb(F81CVKB"z F^lp+:VP^\p+>20cayo`~AҨk0z+h]0kx^7 $@jJEQE-RQEoZt|VS1j 7b#}4@~(( QEQGz;Hh4iRE-RQA)QEQEQKEQEQH}SH"I#8 HR p9KE-RQKA(t)h)3IL҃J:RZ)hJ()h(=)2 ?#3\ǣS\߅)cauy'Hi;⓽'Gz(њ3KӊCIH:AKŽvQc9恃H4z;Qڀ(;{qE qJ:R/sHF9#/j4ךZ3F=@b҂Q֐8u @JF:Ngf7RK s^#Qp#'ׇ2eن}GE94QIV{cedN y۰`]`&)r(w eQE%% u((\cQEQER(Py()(ES8RjՋoZ;.l8W@qݯfN>܁qTk)SdGV89h` r 4QEQEQEQEQLwdpҘϷ9cɳ'=1Jr)QÌTpNS Ke *5/@5C)OԲ}T<"э[ޢ(Q֊B3H(QGz(((('M!;z4REVnU:)*G0")EzaHw02?:|CiK(%JC(0c֤*JZ(((`N0qM`OCC88\J@?E]L[TfEv5\KP?ȤZ:r:R~4vpL:{RԹ▖qN) $sH8vRJrw ('# ?(((q8 :QUB6MW+@prFiҼrsӟΤ BxpbAQNzsA4#ASE3J()p@֊(QIEQEMQEQEQEQEQJzӗ(Ru4RQEQEQER@)–SVmV-~k,EUCp`c_^`|T¥RrҊZ((((()&sL 斖kԿ_үZRYT<"эJ|ȧcm?cV6()hzi9ps۽.sNҝKEQEQER#(a2(j3GAE-QG^( tREQERQE:J;{K@91?IpbXb5JbDq籬vAyk"1ԒJBԄ3MF 4Gn`tJeNq>7 9fbVU,"LjVv򥗕X嗑Vh85+@҅T'߭.1A4w̏,j޹`;SkY7H;{: `mCPj`Tՠ0ju`t4iZwF-:?+ )?{A^@wz IWQIIERE%RE%QEu r8=}sK((E-RQ((((Z((Z()4v(QEQE-RqA(J3E-QE4s03)h%-- qֹ jr?_4}N溶Ӟ3^Ԕwu'(zL L C4ӚHM!Kњ)ZLH -^(9s!=hk=N+nM;E'z 7E H(dzAF9׭`zQfq}(H03ރ\PzҐqӞ)[ ?((((((()z`RRzp#i籥J)sRs֗QEQEQEQEQEQEQES QIIEJ)()ihVbWVa/֬[½[5U6?{6Iӭ9U9jX7=rxDAN:f/Lc3RS((((((QTuj?/iWP׿׬Nƥjݦ-REQEQFh4@Z)i(()()(=9Aj3KE-RwZ( %QEQXz%Yv\ψn8tްuIn g" 1ڪ.GjY]~ޔ(`Ӗ`N9朒i`M)aJ*s;DA9=١99W4w3[ճKEQYV*b$}83"9qY^!Nˠ8a:Vlv0V(?+|xqb-xϧ]d$$mBIFt$gi枚l%xsOM* NƭmnE-RRKIEHR@$R1 4diY CHrTSg{u:QEQKEQEQEQIEQIQ1GJ:Q@u񥥢W*qM+4ҧ9#4fFiih)))+Mw1\!`;g]_ty*fSӊbI4(+Wm#piA~t>JN tp.N7t[N"B>e?5:m.CSJ*xxYcWCac <+$da]4R,,r2 >O/-m$dW[}H8+P^AWb[xHg8E+6pqr-HcBҤP*@7J0s952=sM7{R`o#9wA֤ņ4SG.zl#@á7 a8t 9|A&1y+\XV|@4` m>^}u] G䂤Y! ew~#[4@} ;b_QA) PN:Zk0^zRJFih((Z((((J()h(((((((((()((J((Rќ}+O5"gkk6HWi/57]cutץ/jo4 HE/ҊAHM% @)(j\OҒLsҁ`toSE/((zw^(RQFGNԇizAڐ uJ~} (9R֎=Rh|JN9Z;<E{x[5Uzg-*M'JʧndK4Z?ݷGcޣBH& jJZ(((((CA* Ke *5/@5C)OԲ}T<"э[V AEQEQEQE%QEQE (((J)(vsKE(N4RӨb)(5E#R1\؞1X+}*ctSԊY*$V 0'p6oi<ۗX}V|=27KEQEQEQEQEQHhZsse *5/@5K)OԲ}Y NƭmoGJBp(()EQE%%QE&vyj3( ң2-ӊ}IRQIEQEQEQh(r8#(h9})ihJJJ)h]uJ HF=9_a4`k*H-XqYc朑NH0br0Eex9;w+.[g(Ƴ A XQt}kҠ51w5k<sg"-lh?ӿ/UZ4@zREQEQE-%QE%4QKE-RQE-QEQE%RE%iJ)iE-QEQIE%-QEQIE%-QE%REQIEQE Z((J>iڎ^Ms:1lju,{9sU/\ׅ2ڳ0[]?5ttgE%ϥ'jCi(((((EP׿׬/ZRYT|"эK'5G)OջM(Z){sE-QK(J(B'!}) A3EQEQE&( sH2@'@t{)h(QZ1T;Y8Qjj.$\en_UԠ6r'p7/ְ`Q#*KLvs$;;qڜ~,7sۦ*W#?ʤzФsUۊyڌ1};RU vz某)vrKTeI`SY5Rߺ~>Wkv#f5b*}m޺nAh(MirˏʟC\hWBSà5jkvH41֨$Z@#ޞ,){c? kc`Ҵ|kDŽoCZп׬_ @:wz IWh1EQIEPsHsG9R f CBah ZZLIp&}ihQERRRwǭ.)h()(()h((REQIE%QERKERQIERE*(nP㸮gH\xSs;xsҹjlm3ӓ]z=koIIA J){QIocAGc( \Qړޓ84P(ǥc(i撏z~xvr)>Rw'Mi/juQE'zJ; /jh A0)=1J q4*BR1'94ヌ9iV*U@\E2((((q<` zҀIޒ((((QIEQڊ((((hhRQEQEQEQEQ@QNEX~zEM {s5UZAΓjOʽC5s98V  "(*zjr:SSh((() QEQEP׬_>C^^#E;/iOk??)OջM(%QIE%RފJ(((4C@QKERQEQKEQKEP)9'9=iu5t>Ϩ/qڔf% !\u !P=sQ.9i5i0HR_JB~i9@o< 9^`ڑ+>#2Hp@BTQJs=}*0O>&6.x/r]fAsEjhE<* {$\So"ֺ|m"ыW/)^п׬_4QEQEQERf()h tH3HރҊZ EREQERK(i6Gh)hJ(R:xzzZZ)(JZ)i()()(() Z(QE-Rj;R{MxS#sƷX:Qws5n~&))Z)(bS[i)?\JZ;E!#8HG=()=H-'(IG=4BސSvZCG4Rt>Ps:zPMuF8#PGJ1ڐӗis֓?6G>wRwA;)ґǽ ?((((\0)@'JJJ((((((f(((((((()hQJ(1}Ո詡^çaұmXUZ.?-ve1\cWgRA 0NƥG?F5nkz)hQފ)h((X(>uQ zk8^X{sZ)2=-pFu?:)wE"5,S2)DZ#9QՇIRSEQEQEQERQE-QEQERRQEQE%2hx7V'1L%&U1\đ3INw-.dQ;IN> c$NR:) *G+Vjt9r:SaJP0EjS]=9cF '}E :M`dpGB*v'S'q[:=ʑzji^|~[/qWNQE-QEQEQEv/ȧ{ыNF-^׬_o~B^U(J(()hERERE 4REQIKEQKEQEQIEQE-%Q@KE-QIE%QKE-%QE%QEP(ZCE%-PE/j;W=xR/\9O_ְ|>?skxַbRQE-'SqF)@#(;QI2)) '4c^JE =p(/zPh(N4LRc#SzpzSzsJ1h;RH8ߚ~z :OaK('<I4p84OҐ?*`q_ ? s^^IEQEQEQE)$=((((`9QIEQEQJ')((((((()xJ((((QEQVcV>b/SEҽH$vۺbD?&bpUΕwhtw]xp2KRzR6 )!fMxE"ʻqB8u*J}:(((()((5/@4ֳj?/jS1 YOսڛ#4REQI()h{{ҪMA=彿>H5Էg s@qk]mf[e y<~lr͞53v;6$>v? EvuEQEQEQEVS1iX^6Nū4A֯hG$:hXW*RE%R()((J((Z(-QIEQE))h)hJ)(Z)i(EQER)>QEQ(8$A8 Jw38L,S`#O2ORNRSKBv?tsgzkA8_ֹ Scsӓ[nOzIG~)&i%!'oz_z(-%'ozNQAip cSj:<*JJrfFI'(8i00yqB^4QIEQEQEQEQEQJ84QIEQEQEQE(RQEQEQJ)h)”QV#VOܩsZ`l9uG5EibFiN٤];f3ޜ)Z((((((T5j?/iWP׿__ȧem?cRPGv?F5nkvJ(brM6GXлrIb\y|޹; 㘗/ryonw(kWgS,[0d T3IE.O 9XgK Kw9.w[KxbB@iu!Xݵ[>b95YYGi >r95kk&Ub(J()h(QKE-%RQKKE%QIEQEQE ְΥdN{㚆{H.TV5 K|UF"pT=+<W}Q:4g#m Am͠ I;ɢ4 6|Nthn*K}-Ss/s,:]a:ʡTB(U B---QEQEQ҂q֊(+ )? wF-^@^"osW?4AE_Z1EQEQEQEQIEQI@cQh((()h(()ih(E--Qڊ)(((()ih;hy:R5 D}?T#ku\.ϟ&;pڐI%6y Q wJ>c(% ~ F#7Sh=ޒȥvҔ)i(ޏG~iG֓8&~4J:E/ԇsҝ8ւ8(((((G^^0tc@Կ_ȧem?cS#E;iE%5-aY! n-aYzE^8 ڹM嬄jBȩT|Gȧ3*[݁,3I 铞*q.U*$1J(]tӴ|mΘn[_M /s'ky.,y" pb'WKmrq] omkXD6ȅ@`9⦩j)h>QEQKIIE-QKEQE%-QEQE-Q(+ދ vK;b!b\Ϗn.XcY\ 68Z2rqRycwgYc+j?Z/o]ݜg(kΣ(((8':Ҏh((wF-:?+ )?{B^@wz IW(ZZ)((JZ)i(((Z)=E4SX6AS袒)hZ()()h)())hRE%QEQG֊(;Rs95KSS[ոxARsLAAK֓ޔZJZv(J:QCLQ;QHs\SNqH9IL S%(4(#44Ii{GA8'ZpsK994ާ ֎tcafj$g5xkBSk#WDzFi3MFM'QHyS[PhJ;Qڏ)>x("HhJ9Ԕf=Gz)آ(Bp1AƘ}z٠^ց8g9o֏@ў)~)"H—F44f ?N08' ʕPA$58'X.xKE*9vA9"L袊{ rP\ OmBNHʎGShv[tQL(EQNpE&8P29QIEQEQERf)((()A^h(()(Q@E}j_rwH!py]6l= 0m ^ |0+D(bI=(cJCNTRSih(((()((u._пx}k?]^#E;/iOjSƭmoW= c`āS\NJYEݻN06O9A<ƫ½cWZ=j&gvh9ZF'F&3hu)j&?7lUfH`y=*Cgչg鸌]^jɐ<c] t$0MXlU(H i[ΠT~u H#|K޹˩)"n[ b?_Ozj[>TQaF7fE!*T"QT@NFE8r3PF$O>S ud G"lTe {ui4u(QF?RIQFM;/4}(@9nGjB_ߌ #8Sy!)O|tM 8Qx*IXHTd*{K3.^@;I\, S=jݞeu¯ z֮+v)hv쨥iIkwd; Xu;ԥ) ":FdWh2ݴv#8A·8-WԂBVSUjuTp3JXO\M9%[zG" dҡlӭDjeu~f͑x"ȋu~zkB)()hZ(()ihKEQ()NLgR~|`5f0H$'>ԙd**J() =4簤% P0=@Qz)h/ȧ{lbӣⰼm"ыWi)_׬_ԕ~))hZJ)3KEQKEPhL QE-RQEQEQKEQKIEQIH'h\19<'$斝KEQHi !QI---%QEQFh)(J(()()Gj^+oq|j8yGL5N&Z#$@H:Rv8I׎.E.1IM_-)JJC)(hIE.qҌF=)>g4cJ>c_ƎhRRGH=i9קZ3nl^GZ)q֛߁@8iӚQKӽ8sz'CGҒr)3 Ij0xP ?E_k~QLp#cZ(EQEQERTvx"ERJ1ށIIEQEQEQEQEQEb)((((((QKEQEQJ)Eb?CS*XWh ? *X^ضd QhF@ZGz֝h#4襣KIQ1F@(();((QYJ> {@zOv_F5,|ȧcm?cV2OJ5`˩:/G+Fc\j;ÐIȪd1桋 ;nqR x)ozR~sOqgRyT9uE)(~4K\AR:BphaJh4sg=:Qڀ1ҐƁAqRvւpQi &9ȥ943֗r) i`wz\`qK8`këkQKR(((((((800{JN%6(ip0Ny4QEQEQEQE(((((((((\VcWS*H h[#Bk4-ilVqSN=(qE'oZ(4QE(()((3T5j?/iWg_ȧcm?cQ'5G)YOսM!(M]aY ]0YL (`ʄed k%a==k"93!%v֬#`Jv'L *Rx)1B0y5{zxC1m ckCHB#w a_ZТ%.&KxW?*73!¨ɨ`sQXiy.e;W$\ɐdaڹvwb~~g2_MJ jj?`* Y C)5Iޘ}inI Uz'jOu= lZ$1! 9"{$?~aqB u9((JZ)i(QKE :h&LKEQE%!(hZZZ((A'ZBHri ds@'8#' wF->?+)?B^@ozIW袎QGZ()i(((J(((&h4Rފ)i9yJZZZ1IEwJJ()ih44g&JiM(@QKJh4RQERHJ){QE (J(RE%(t/QH8:ޜpe?α4/u{[=kg֗QۚoN!@3KA砣8MGJ88G)94ڎԙqNڀhjoSIB8L SyniJOj旑FhwN('zRPzPsIۜQߐ)&<;R ?PIcN`dN9ph()@J(((֊)xPJ( RQE((((((QEQEQE-QEQEU}ڒ.>],w5R xzW=Iǧ}q*LYS*J89rlqrIGSO)ihEQEQEQIJ(%QT5j?/i֨k_ȧem?cQ'5C?)OսMl2s3L?6&N>n9SBs"509b+6wL ͬ*x9b)fWg4 \ IhF_=izlyc^5>J38 9N!VgqS Yn"Rӎh1smkCG?Z-b-3G?ZihZ\-a#/>Տfۧ.j[KJkD\X\$ujxsqSq` GoSPc}jW֚61LPj`qPK"@:2:sTnʼZty Aⶴ[HL09[Fb[UEQEQEQE--RERRQKKEQIIEQEQEPE%!)G Z)i3IIҊZ)h)i(%axE;go/ZMXHxj 7b_QE%QEQKEQKKEQE%QIEQE&9sIZu-sE-QEQEQEQEQKAGj;S{Ґu4RZ((JZ(ZJ:QE Z(8uRQE-(Kڔv-u 2?9ax{"P9[Gn)4'z(QEAKE#}i'zAH:P:Qz\w4zSޏJNG-/^wIސqA4b ZޘC}Ӵws@Mvs@${):\RӨKKKEQEQEQM9'Cp)sJ()h5/@4֨$zj$"э[ԕE%ͬW(V@y*W#=j.(tYJXo땻8dѮVz@iB2My)J&PH4?1M6s ֆ$Jm[m P1ZC@T-IKEQEVfl2ci6]cm՛=v XAXf<f6deI F)03môv6Hv:SgSuJ~~$oziYL`NTyQ:l-"P}OzteH>tgfެiN{U`(QE%RE4:I֐H9:))((@1E(QIEQE--RQE-QEQIEQEQGEVS1iX^6Nū4@֯?ӿ/UJEQE-RQE--QE%QEQIEQE%QE%RE%QEQEQEQKEQEQE((((()(E%-QE&(4RE(J:Slz=ZHv*e~)ypS$,X(i[himb=MۙDA̍)qoD#'0p((0((((((((((()()0s׊NA&=h(wF-:?+)?{B^@wz IW袊Z(LE-RRRQKKKEQEJ(QIEQERQEQF()(QHFG4Ai{bӊ>vQIEQE-J)((Rw QEQIE--QKE-!dRiGAJ(Dauo76Nū4@֯_/UJE J)hZ(IER撊(()()(-v(()h(((((g/_M!H@(s----QEQEQHFE! #z(RިkԿ_үZRYT<"эK'5C)OսM()h(()((9惞QIֳnvTbIle}ʨ%޳ov UV'--q㩮~[R&ێH_GSVcndd wnڮàJ\.~j=w ;gc ,rNI5aa䱭;8тr[MYuc4QE()h((((QEQEQEQG(((()h((+)?ȧ{lb @oz FWi*%_(t)(J(((REQEQERQE pN40-7 )p(((()3IE--QE-H=9$!(&3F3֓p)rRRQ@Z()hPhKڔ 顬 k|,2,{oҶ:)1Pi=);Ji9)) ;!A# =(:׆W׆AȢJ((((0yҊ)QEQE`E9QIEQEQEQEQE.N1J^h((((((((((?.*h5,Zmc>hPh-4sAZZZ3EQH< RQE(5/@4/ZRYT<"эNOv?F5oSkz1E/j((QIHA搃E--RQEb(3r(p2=-QKE((((((J(i(()h֓REQEQEQEQEQEQEQX>8 xRw;?bӣX+)?B^@wzIW袊(()((LIi3)iizEJ Z)h( LҒZQ(JJ((RPi Ґ q!4b RRE %%&h-(REGjJ(Z()GJQ҇V%X>+ nen5&ԙRfƎG?N(ڛy4џz^أ(G(ғ3¼O&?4yڏWO^i I?O5?^?{}G+#~/i|)^{}G+'~/h'+'~/h{Mcz _WO^i I?<¼O&WG^ijOWO^i I?O1/+'~/h{Mi?4½O&4Q I??^?{}G}4?4yړ?4½O&4 ?^?{}G+'~/h[R¼O&WO^ie#?t?O&WO^i淠?4½O&4Q I??^?{}GނWO^i I?_1^i?{}G+'~/i<)?^?{}G+'~/h[R¼O&WO^i淠{MtoAG+'~/h{MkwWW{??^?{}GނWO^i I?<½O&WO^i淠?4½O&5t?4y({MtMk{Q I??^?{}G}/+'~/h{Mkz OWO^i I?<½O&WO^i淠?4½O&5t?4y({MtoAG+'~/h{Mk{Q I|^i]L:5pOʄvg׽sG挎QzNy;uߦhRԀ\/#ђ==(vi1FSE'4ghihKG{֌fGPhR`Q"M8ޗ 瞔9s@Lx0sH2O S8)NyJQ9+ ?((RI94QIE J(%KSh()X9=hGZ)Tp:Q@84QIފ(((((QIA((((()h(cRҟZ? hPsҽ[dosӵzׅ _[RJ#* %c* $)ێ㏭.I#;#;џ)(QKE 9Z(hNh\KnAR t4QIEQIEgQEQFyuZ)hJJLQK@'z;A4QEA)((QEQE)()(((((L҂qڊZ((((((((((((((((4f4E!ZJ(;QEQIEQIEREQHhQKKKFi:Q׭QI֊)h)(Z惀:E-4E-QE29pAzR09Sץ2pL,2AҰ|#ZH#ys8?-n鿊GZ&s'ZoZ{RL~44p1Hy=(ɠh#ץ#{Rwi3F84vF(M.=4NM.Zk pw4vi@84i'q1֐c=sHW߭(ʎl,})O ÷ בڽ_e-zvZ7#< 15ʬF@$r3ڶJ+9< q8lP(((KKGzAL~ ZZ()(((IsIsE-A搌рiiih)h)hQE-E%QEQIEw(E%QEQEQKEQE%QAQ@(J9)(((((()h(P((((J;KEQEQH(qE-QEQEQEQE%REQE ()(((QҊ)() -RfZ(Z((LKhZ((``FȤeWaJ8v@b{;R:+VRG G><c?k$}`:i?9xqZ ќi:h){R(괔tF3Hs֎s3HI`{R4ӻ})qH }hRdܞdRQފ(4QIK'ƑS.?7Ұ<&se'?顬?lZ8;g(9P);fԽqK?G==tuC))Zh'u)QCsɠxA `Q1@u(#pixw :۵pxxR8< _nc qϥ:Odփ M#y rsMa=sA Gֿ ?(@!ٿwQL=N(((((Ppr(S=c4mQEQEQEQEQEQEQEQEQEQEQEQEQEREeA"q#^=s^-5c5hs[J6f惚CR▔('9>R▊(;RsQKKE%RA()()E---%QE%REQIސR ZZZ(<((RQE-QGQEQE%Z(((QEQIEQHERF & REQEQJ1EQEQKEQEQ@((EQEQEQEQEQERw)(;hQHEsIQFhJ9(JZ(\QEQEQEQERQIE%(J((OzN4QE(RIA08 8) g;22&((H*#mR2) 8'j4yK94ॏ 8'ҚIcQe%QE((((QEQE. RQEQEQEQEQEQE)x4QIEQEQEQEQE)ȻSrإ'eGZEzw[:#ר=>l0[`!Nմ3j,sӵ+tn-QEQ)4QJ(QE(J)(E-QEP3i>A8QKKKIE%tEQKEQERE%QEQEQA()()((()hQF QEQEQE-QEQ@((J((((((QE)3E▊Z(((-c(`P(NREQEQEb)1EQKEQIEQIEQEQEQE(JJ(4Rފ)zREC{rL(rsb>m(oQbJJO+#Y??ұ#?롬 !Vxn~ 4qAtA.1ӥ~G=(<1IaHsǽ }9xP:3LqA>ԇR^#&qF2OsK@POJ0~rO/Ay1JGnx$ LsLt+"+!`UqVFqKOJ((tQEw(RRKIE%-QE&(J>P)h((JJJ)MQKE(Z()(((4h((Z(Z)hJ)(((v((;E(QE)EQEQEQEQEQGJ((((w4QKEw()h()(((((Q@IE袊()(l;z6pqփq֔gvRG= %Qڒ2y)G(4QKGz(ATw#6 *>( Tұ+ $5\f7<.q5@5zCҐRu" iOZ4ҁOz1 Z1jZ1ԝ ֔hާ4)OG:8(<:Ҏ: 0{qNԙ8j2@+)@u1d6I9ێ҃&o4~ c@S\88sGm6)2޴7%AAEQEQKEQERE((QRcIE%QEREU"jhiNzԽ4F)W|4XL}kӼXhq)^9#޽Wa¥p9 '=斖J((((E%QEQIKE-QERQEQEQEQIEQEQKEQEQEQIEQEQE(=(QEQEQGz)(RKIEQޒ)h(()((((((ڑ0=iցLPR)((1EQEQIBi3J .hh((((3Iڂh93KEb%RQEQERHi-qGZ:iҔsȥEHz ddb?OFmzY^%#ֳ<64 9 7^\sk>׽&sސg JqK)1GojL;{K/QGO~:F3ьtIi94sEsҌʎvQ}4cdqKyzjϥ(i!ۇ!K穦zIxǽ#Ny9!LdqJHr)O9)9 HQH0>)pq֓ U᱂x8' ?((((+s=iŘ$灁Tݙ98o !gPs0?JeGL'?J((A>QIEQE(E%QEQEQEQERE%QEQE)%P4PA0qEQ\QOXɧ&T jE@ޜӾҏz)ip:PN*} Oi5`.Ezφãۃїlҵ$zVDDg!DA Ϛ@ ={ԊĀOHRE;KE---QEQE%QKKEQEQEQEQKEQKEQ@((EQEQKEQEE-QEQEQIEQE-P((EQE8(Z)h(4wZ((J(()h)3)3) Ew(((f7o$)mĖ㰦o3vZuQERQE-QEQAIzq&3J(3EQ(EQIIEEQhJ)>QEQE%QKG^zRgP R߭&=h@R;UPI,p4:EI#Efc4uYݕQAff8dz֓PT8;,ciOuYZz7r9HR 9#<k-v M/ -تd`'3*֌І9c[#P{RtGjN1ҀF:R` qJ~h91җqHlуjC^ n'4t?Zh#$F0sҗ8/sӵ-Q1қqH$dO&r @!Ny ҔJqH@':i {r?h$? Ni;5uUTQEQEQE9f%WhmR/V?TtQJI J(( aE(瑟j=sEpE%N "$={̛M2p HUtS#:)Lx84˜F˜P#$dZwN Ҥ!|Z@iiK6=8ION)BdH($n/?)}i[ERyZAe6=wW)>3SE p$RTK`,9O:Ϛr=`E1 KmaEg&!uF>;6pH&>cpt5O\B*(+pj3۵#gQ~Tv)$Rv ?*VoF?lisv< 2.R[pV?' y_Q c>R!^nv"U_s3*ͷ,9go[ۭiy->Ƞr90h8QJKKK(QKEQE袊())h)((J(((E%QIi )h (R㎴sڊZ(4QEQEQERQE-QEQhIh)(()hE&hE%/j:I)h(h((QEQE((((((Q@EQEE%RgZ){RwQEQEQEQڊ()(EZZ()(((QKN } RbbQhmoCAbRdWd%Q-n?A֩j~]U5 RMQ2}8\'<`ډ#)jTW{c?>ZZ̀  A?MV?ԁ+rr8F^yyZ r}Z_HbE)*O?SYs^%]Ҝ|nOm"s{ק鶿cHKna;שiK4c_G]VվhBiqR}(i1R4 3ARd P}iHzgq:RyI:F#Jp&y9 ?\{ 73G^ ~9b(֐w)OZSNwI"O'cu4#4wi~4)^h_ޕHP1O&x=sHߩ>ߥ x=q@AtG`Ss8>gs}fYYn#BJ|wE882(((()@`XdzRҎi)((Eʃ|Q,g*3K1E6-ۊ)4SU7ܧ)8 Zpoj|r6 nd=+NًGJh99xUߐ0hErTr4>kOSBgB1)") JҜN\=)@dSXO;pGsJ>Q׭1hiUni暤 M#q"cץ0sDOWۂl#ʽjnv/J_#U/>7#S_zwDѶW>KeNQ19SzG4siCdsӏ#8)IRlړ>sA\ڔqڃ׭;)zS;hr;krQQH.zL$gUtf ϸ#V`[1VNptKϥ-~QIsKϥsEQERfRdRFE!)&KKKSNiZBP(ZF@qAPi т1ǽ R\z`ӉS(@82(GSJA'>dgKqKFE5(sHNN".G489f"^IE)3Ef)i:ړ4QE-%R%RFi(4QFhFh-ӚCsHHJ:P F0( "F(&9E-(4QE- @yHI4c8/Rњ(H b`RPhf (((R)(sE)()(h=h=h,zB7 0^KN&Z(M! u$A`Kڌg F 9P)ih4QH %IXp gJ:gqQ0K^o]{ʅZo9C ){1y牵෗2,H GrxxYkU`Q=! q`sߞ1` ډ#C2OOϞk7!DS*Lwkee V({1O+6Dc (=* ,3:TY…2;~#%sAj[DLiv?Ҳf` lH8Q,ΰ; 3:|rמ*nTyGcPXUR$VUy  p;H8ߚyMFv |"_C+SjׯB "]VŸ3<>P#޽>+HDP(EKd՞'zi)W8 y挟J2sӊ3h2is҆4 F2s@zw(ҐtRt Ť_&+-[ V%.D8@~IBQBXciou|GD! 4q o   H _  I r 5 C   (1#%(:3=<9387@H\N@DWE78PmQW_bghg>Mqypdx\egc }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzlibvips-8.15.1/test/test-suite/images/ISO_12233-reschart.pdf000066400000000000000000002714201454007373500233160ustar00rootroot00000000000000%PDF-1.3 % 1 0 obj << /Type /Catalog /Pages 2 0 R >> endobj 2 0 obj << /Type /Pages /Kids [ 3 0 R ] /Count 1 >> endobj 3 0 obj << /Type /Page /MediaBox [ 0 -680.31445 1133.8584 0 ] /Parent 2 0 R /Rotate 0 /PieceInfo << /Illustrator 6 0 R >> /LastModified (D:20030612105332-04'00') /ArtBox [ 6.29297 -697.5 1127.56641 0 ] /Contents 13 0 R /Resources << /ExtGState << /R1 4 0 R >> /Font << /F1 9 0 R /F2 11 0 R >> /ProcSet [ /PDF /Text ] >> >> endobj 4 0 obj << /SA false /OP false /op false /AIS false /ca 1 /CA 1 /BM /Normal /HT /Default >> endobj 5 0 obj << /CreationDate (D:20030612105332-04'00') /Creator (Adobe Illustrator 9.0) /Producer (Adobe PDF library 4.800) /Title (ISO_12233-reschart.pdf) >> endobj 6 0 obj << /Private 7 0 R /LastModified (D:20030612105332-04'00') >> endobj 7 0 obj << /CreatorVersion 9 /ContainerVersion 9 /AIMetaData 8 0 R >> endobj 8 0 obj << /Length 1513 >> stream %!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 9.0 %%AI8_CreatorVersion: 9.0 %%For: (PCG ) (Cornell University) %%Title: (C:\\westin\\archive\\ISO_12233-reschart.ai) %%CreationDate: 6/12/2003 10:53 AM %%BoundingBox: 6 -698 1128 0 %%HiResBoundingBox: 6.293 -697.5 1127.5664 0 %%DocumentProcessColors: Black %%DocumentSuppliedResources: procset Adobe_level2_AI5 1.2 0 %%+ procset AGM_Gradient 1.0 0 %%+ procset Adobe_ColorImage_AI6 1.3 0 %%+ procset Adobe_Illustrator_AI5 1.3 0 %%+ procset Adobe_pattern_AI5 1.0 0 %%+ procset Adobe_cshow 2.0 8 %%+ procset Adobe_shading_AI8 1.0 0 %AI5_FileFormat 5.0 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%CMYKProcessColor: 1 1 1 1 ([Registration]) %%AI6_ColorSeparationSet: 1 1 (AI6 Default Color Separation Set) %%+ Options: 1 16 0 1 1 1 0 0 0 0 1 1 1 18 0 0 0 0 0 0 0 0 -1 -1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 2 3 4 %%+ PPD: 1 21 0 0 60 45 2 2 1 0 0 1 0 0 0 0 0 0 0 0 0 0 () %AI3_TemplateBox: 567.5 -340.5 567.5 -340.5 %AI3_TileBox: -27.8809 -794.0674 558.1191 128.9326 %AI3_DocumentPreview: None %AI5_ArtSize: 1133.8583 680.3149 %AI5_RulerUnits: 4 %AI9_ColorModel: 2 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 21 %AI9_OpenToView: -280 603 0.5 919 629 18 1 1 127 241 0 0 1 1 1 0 %AI5_OpenViewLayers: 733333333337333333333 %%PageOrigin:-27.8809 -794.0674 %%AI3_PaperRect:-13 936 599 0 %%AI3_Margin:13 -13 -13 0 %AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9 %AI9_Flatten: 0 %%EndComments endstream endobj 9 0 obj << /Type /Font /Subtype /TrueType /BaseFont /MZKUOV+Arial /FirstChar 0 /LastChar 255 /Encoding /WinAnsiEncoding /FontDescriptor 10 0 R /Widths [ 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 750 278 278 355 556 556 889 667 191 333 333 389 584 278 333 278 278 556 556 556 556 556 556 556 556 556 556 278 278 584 584 584 556 1015 667 667 722 722 667 611 778 722 278 500 667 556 833 722 778 667 778 722 667 611 722 667 944 667 667 611 278 278 278 469 556 333 556 556 500 556 556 278 556 556 222 222 500 222 833 556 556 556 556 333 500 278 556 500 722 500 500 500 334 260 334 584 750 556 750 222 556 333 1000 556 556 333 1000 667 333 1000 750 611 750 750 222 222 333 333 350 556 1000 333 1000 500 333 944 750 500 667 278 333 556 556 556 556 260 556 333 737 370 556 584 333 737 552 400 549 333 333 333 576 537 278 333 333 365 556 834 834 834 611 667 667 667 667 667 667 1000 722 667 667 667 667 278 278 278 278 722 722 778 778 778 778 778 584 778 722 722 722 722 667 667 611 556 556 556 556 556 556 889 500 556 556 556 556 278 278 278 278 556 556 556 556 556 556 556 549 611 556 556 556 556 500 556 500 ] >> endobj 10 0 obj << /Type /FontDescriptor /FontName /MZKUOV+Arial /FontBBox [ -665 -325 2028 1037 ] /Flags 32 /CapHeight 715 /Ascent 1037 /Descent -325 /StemV 96 /ItalicAngle 0 /XHeight 518 /FontFile2 17 0 R >> endobj 11 0 obj << /Type /Font /Subtype /Type1 /BaseFont /MZKUOV+Myriad-Roman /FirstChar 0 /LastChar 255 /Encoding /WinAnsiEncoding /FontDescriptor 12 0 R /Widths [ 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 212 230 337 497 513 792 605 188 284 284 415 596 207 307 207 343 513 513 513 513 513 513 513 513 513 513 207 207 596 596 596 406 737 612 542 580 666 492 487 646 652 239 370 542 472 804 658 689 532 689 538 493 497 647 558 846 571 541 553 284 346 284 596 500 300 482 569 448 564 501 292 559 555 234 243 469 234 834 555 549 569 563 327 396 331 551 481 736 463 471 428 284 239 284 596 212 212 212 207 513 356 1000 500 500 300 1156 493 255 894 212 553 212 212 207 207 354 354 282 500 1000 300 802 396 255 863 212 428 541 212 230 513 513 513 513 239 519 300 677 346 419 596 307 510 300 318 596 351 340 300 551 512 207 300 319 355 419 759 759 759 406 612 612 612 612 612 612 788 585 492 492 492 492 239 239 239 239 671 658 689 689 689 689 689 596 689 647 647 647 647 541 531 548 482 482 482 482 482 482 773 447 501 501 501 501 234 234 234 234 541 555 549 549 549 549 549 596 549 551 551 551 551 471 569 471 ] >> endobj 12 0 obj << /Type /FontDescriptor /FontName /MZKUOV+Myriad-Roman /FontBBox [ -46 -250 1126 831 ] /Flags 32 /CapHeight 674 /Ascent 831 /Descent -250 /StemV 88 /ItalicAngle 0 /XHeight 484 /FontFile3 15 0 R >> endobj 13 0 obj << /Filter /FlateDecode /Length 14 0 R >> stream HWnF"Oz~ dfc'=]0Ԉ@h~B6ۈ<<쪮>u9?.fi~ڛvS;XK]ub$TY_5]ZA+m)L?WѢݭ^~.U=mKw}S/S<ħWƗοm7*=okxζmWJ UqʹϯWǐ.zsw[wf1lF+Ǫf ض]7]V] /XusW1|(euҟz=ӄ;!P5Xf׳ 5%wm7W:yo yJ ~/8lLiwH`|̬*Uo g]}N}g*œA(FN8A e|DD  d#ؗF0ps 8"9tp>5rd} F iLN$$%LṼ߁>n@3:Ma| kHmɨs3۫_ 419V Yrt 1]wFAuHj>2JipFo*@KV-X )%~/N^2ܳ"1j'sYn^WFFe|Fs#~ 7_6DsV+&O4Q7A"i@ڇe6r/w8,+xDMH&M9]@+l2SŎܷ:)m 4`>f"XBO8a4HI=VuS>ReɄQ%v5ճ\HL!Դ"=ߤ"BtDWL+I܅kҥԮs]%paݡ("_8-W.}de}=eYPt,{F.dӹ;.m긨^tOإPHiLNN6菓V{<dzG?Yydz/dLvwII1^/xA쉀'&&G_qrR1U0:E褄ܱҒ'9L+zMR1_/Ǧݭُ\vTz[z_ LiMwqBܰ`[%UNfP8ܪP >閳 04$`bBPԂ!Թ}Z@?+",J;IvB Ay`=pcJ"9s:"F-u7epJBU bc 0AE4cƂ( E 'NK3^ffw} -c]O<$xo6Ni=4:|0{DH UOAzpR9@PVF *ƃ$@ ~A/a -*2C*r i1,@%쓧:A:3](.&žܕA^Bs_z)km)PSjoyx1(2Ƌ$ ,VNoz"S! *w 7Ц%Yj[Ir\h /-:H  (G#G ،,aE4(NF}kc6 L4_NjZ(%9#ZyhxpCH9B6 sNIPx72\eŰи}Uk gi30 CJy,Vc )fA)n0 1(b Ė|CXnG'U)6Z:a"B d'WЋ2wG f~$2YɌĢKq|\Y>_0 ("7D';:/qa]fРDS G$eSAX x/_'Fo`Ԑh(Z[B 2oګm7~a-~ y!YÆZٛ,Ia|}NUL̮B$at)2a] >Hi lsKF`> !E AXu3@)sDIsQg#K6[BwAA!9e ]-V449 BI+DWu̦L)-j1](EyUsh&pÈӈoͳ*16M6Q)A s1`+aLU^Dʼn%A4ռt( <Ԩ+YeAC#y#艉x- jR]bkO5x  ؉3Y ViHOOHv))Sd>Gz$f3<k U%#D! >WH!Y52~Ѿd #%v0[,4YLØax,T,(ܞntHU:rl :A !Aì2 eYP~qE6qBDʆm!d ;mGxG!Y}P;^0'A:AB[Kn."P0[vqT%DK"Z\к2γH.ޱs!+\?b#DS\}4Rd=9[tr;H+s7eH2S@?(\ޔ 4VS0ɧ&l R@$$']Z-lI:BW`U}RMlO5BrHNŞ25"# ؘG=uG.|;<X9cå\/{= Rs"ñ(JL{F,вISQ neieP"OgXf%+2DGsT+%9"ȮjH'e(2 JN(8B,j$2I=J-S_KQ2V3D91!e֫䰯|A#T] EC1O|ªZ$}z)m|WUӚXq$4@O$>>U4E\Z>GK)D1fdb}\Pdsa SjԺHØavW6wZ-Ty]g2pGt ĉFIhzh''aƴQjB!uYX;1E ,<բG0 *ʲNO u^CHq̼7A:YQ2 VdmPDm<,21,h17MmPFy92C##Y_] **#D !90n$GZ74)$:+ 3ls8~%q੻S9Azf:`0saЖ'P-fr|ֵDr`ɵ}R)@j$wTDYDjaބ(oZxx"2)85UokI:H޽/׻~;xjx}e{u9nׇz˟vwpn{O~񯻛ShV0$gׇݗa{sa?0y uScVrr#BC2鷒',I_R[Q/ŵ ٵrBT ꖂg'_..Tvv)W҄Qf~,ZLs1e'՘'u7D1 bW?k?t\}\,}jT69>C-?I-P-)'.т98ϛ_W9$;7KٚXW>^kBrxr'w\%_ӣ9RUTL ʘT YmSZ5SO`1u&Wj>wvxkj͗Wn dVgvbˆl,ؙG2Mr>,6kf"0,HYb=^omiw_??lt.|g`~?G~?n^M247C̲q{ݽ2G\qa>q8he0eBb Ȥܠ #Fqunlz0sC9ۂ;r֐Tċ1bB,O@.n) `dA!#lM^6.qƊr|a"+ RiĉqZ[2HWq+>?_wۇ=~1>G$G1F'd:z~ ',X&5BQ[ oT] `57,:p`z ZsX5J2 50HJYZ ~Co><&./r5ZcK 3m0jG%ht.>[v(NT z%!9ԯk_dk큂QN 7!(1 & ]33FA>P$ myi0kP j:|k!*THPCb! qm i5B/ tJFrm5j;L(K͹N葳=rGǰ&=^OvjO rQ"pD5Z2IrR J vfS,=Z rb\#2!jPh&;5b3Xr2gahNj&'"pᚓ1k1r*FNVɪ9Ù>5)k6޼}ܼ\c sHBAWD鏙p\8Ľ%Zl9p 6u@MpN@z7sK-TMBh3|=޾qʤc< {CKc 8V@ծBO.Y#5C+`]i X6?퀰1J~=PД*#ͨBGMY ҏ 7BĸƼbu12$Z6G DJN+Һ` N&Ƶ&sxeWkörRf@ н.k୦0%6k-c%zkL4lekPY/]:Pnu~7?f6h1ؘ񤟏uM[ 'Q 6SḽLYX&WOxqN.Gs5SsI ͷZ hJ+NjF쎯Ƿۇ×oSMGʇ&Y#5h} Iibb>s9yϖUb7HxΜyC;xq}ƝG4JcfA ^+SP0"e=&^ b>sXu"k1̽]C=r; V06[X;.urjEq8=0\9r;=F0Hnw{:<׃p|8'k*x)H:,&AblmS0I k9"SPŞsӃm+Y/P䯞n`cAr܎3z29\uϹ9bҮ{g 7엂5ɨX_;XYM~r'wc͍8w֜sW8sH{:@ho/k9'k*x)H:,&Š5mn$?#Y$W1 \Ԡ84y =g'Fr#;k7wF(4J=g 5r9"{ލQ<s-F; #jƊK}.qcEcj2BpXaeNn韧 b>s]Oj8Rdr }$b\&=gW͈2$n9jFj :RόՍC "d$ 9YϙŦq'o5gU*NT3FՌKYfR:]?W}9 $ orKb΂S?~s\rQbP~c,1B5gjފ.7:'VĜJ,^1b0zåFiݶ#

'i;pahwe{{ls~XleэFsmϽ zkPtK|8!;/:]raC{Y}ζMn (ϝ_e>TG:C Sv[ M[ &s@A gjt=1%}b{ }S[)}%_چE8"dCDYW[ X0Vk]8sl/Ks:`L :-Z[Pl}1+p~qΧn}8vwǻp㷫éʝÿ)Lt?34>mmNͧ˫Q>v+Wm_SAkA_eb^$X+P'Y4rQTgS"/䝷_uW ~~ܝw`ݜ"]lD [{\$)q`N\F_\rvY9f]@ .Nt+.aa'N/2tMxtڅހ?.s  6g.\ 1KnKvڑpc~s++{9o-u}|8߷C%O\q'ݜO?lgb_ ^P8,GfϹ^~|p:lo< ~vw`wifH/Wf;_u+<]PC2_>_^sꚃʁ/`va0"H><#j_O$O6>׈A\djRL6"DފȈ<#zSDQADe32">t5T5M/8H#]f*toQFhk"n[QD!2!bk!Fq );X`8)gb /-{[ M}:D9zs(a0ؿ8O< %#֑^GE fRm)'j*tNICՓDV=QL2 N=$pc!9kHj+Q34{Cj"{bMh8 U SWj[Ɂ. ɹ6',7e cjEXUF!к,Bu<HjE-'C &6Ʒsj=/cF.z4* 8xE_Ni\tBE)k6.7iBt*9UP:+Ӽ1&u24!P,/To"d^?SNJ-1%РԶbaIxcjESHAQ.AI=KWJ))9c 4*3Km+4k 2?kN143oB+Nr^yO^ G04"Mh!tLHxl)Ng$*IMSmQ丆EOA-BI)@ U6d`*&"4(#PLJENk jdu8%<5,$lHAM㳉HGQքkuHbK2nEON7' ՜,L̚$!!$s_Jz-9M.i I3JmD`JEyi2Y4 F`p)*Cy&s\c:M'<$ԡl 烩TQә|T$o~Ba (zr;#4"z%vb;Rf*EIsRۙŒrr"e:$KoA~3(e>ES0Vd`%ԪosdWMBRCԍȘrՓ @z֙JEcDyސm%yn>aҤֿK 0Iyq$/?>caX=|0l@Xރ !#jmFTuWg6]̈Ȯ{SԲE UY3F [+:VHnъAժ^1/*em,3,~Yjgە-k< ʥntAǯQB+Z):`6 yTAϓ{0%viy,a$.7ft$񬓧m>j&T݌IL-LE"7H>r,gHj@،]$x Ol2L O+Ǔ!d0r2<bE'EI4OAe{dԬ#OS V$p䯵$WMw\X9Ф܃vc(9V;}f1?aʹ{ _B0?Hv @KݸĘYJPTڋ'1N)Jj%E6k9jhqRҗang3ln&/R 7InQ>* IălhEkZ$WazI yEU}1CS3It IJ;PhEJ{z#\{6jAA0rX%UE5܆AY6cY`%y)eA\(,aksf԰b'(;H&\! )c`HNm)7.hBM?[gE!VAEbQ Ij7IʎDh^dCCJx J{|Po t!h&jEYua :}'gQ6icꤤ5A Йo)*EP^vDbЏ}Yqܿ`hM1hsk%6/!gS U ~{.go/b.mq*Ik(ĽQxE04k c(MA{$A6Cp 1}O4uW0C>GO+@p M p~}I`g\=,o-ūc4) .%J#=`:BD7H'EՒ){$PPC0ۚG$.p!h < Hb̝NRZ@x-2똠6ƃЀ=MA,QvۨEYMQ봦m؁ CF7N #5.A8h!5Z;㚵jАgʧx^E*բ궧JfV?FvpE A)ͪ h lO`1EnQU4䚃usĭ:D\ndFd?5<3zaPhe"P}!1xm@Ѣx8o. r}d;V k0j\>4Nۓh ;üny嫨^aQ1./sսSPv +bh_3j$ H_^,Fog jͳ UfݱF Ȇ-K E(R P8swM-W6,LWM;ܼy<><~ߗb.S/Po~p^qx˛[Ο͛o^;>Ǟ?~E__O'gy)EaqPyRޞ>zwniN1ˇ+u [Q0L 0*@mk!OAR/@4Y,]l[BJ0v] R3?dmfWR'!}!щ:z]k2;OCHDs'+T$ s6lx-Hx.Y-yF:ǻs#'Wނj4"_Tq5ؕڂ..-qj@Ci !IrF$bXk,ʧ [[0¦U{ďW֊9Iq4 6kHxKH3&]\Ș )l%ι$1J$^b{\.ӎn%D V2/纗O܊^AX,7W mj5jAh>D$.SGDW0!>[ spî@`R'ăpsp~EiAɷ&9ہEkk6QA5t<}\P *uxJ?] F)Q{*q׽ŻȮ;*,5W"0XJ.Qm3)MCeȦ@$Ш?ղZ׵&k`E|$d[VK`֑S$؊1m,}#n`ߍ-B0iCb1dchvC5ŵ_}8۰3ĩ*KڜUTޯ:q3%##ؽ 6 K8'`nHPhp4\ ;W%Usa;BJ3`VR1IPA#(@h9Fz܊[YukB pZK;e'?24VuQ2''☼jsFOY:"S2e_/UssҞiWeP5bq^< ~s-% BDA3bPI|ȣӴїU+)=þChIK8%E`1(HJGZnO VMO ΣQ^|NI/q5ṿeIS_.7?÷oo>?}v_+\F<7>|}~]oz|tr{wqO pxAwt!x.ONA 䴒&)MH5I$qNA&jHI0.7&ϛ|$MTpfaB*YvT`X"QbrYtAks(b{ABe)STK1hDA9oiL|laծ 2*h| 8@P&_WA̼&B@bW C PķhHkܐx}uF5vm{72sDwfES}&]A09 .o; +C#^!0mB K5oq=F@(C/SL;5C. 7KCR!,dg! Ɉ2 \95-(s =[ q0ku-~au&1f+!&Y *Z/vlihRt`aP`79@HX NEDO4rn9A$nC|(R(bYwϩP_ zL|)qLrm!>4 s.a!`u MeDƢC'9"1t),ZiF@(:z}X~]ڽ�dn^Rx&%`.*/{C0SZGM@SC/4  fnЅ؆F+s6Ņ($\ ӎ޲rl&$VK9I'<\d"4f|VL)2+M=<h?RBL8Ϟ rUc Deۇ30 1MPiV>XQocbtޜ/.α0iEZ _Y%L3v ubi`=`ѹM*QNh͋&8%yV=VH)7ȚiFYY-Ƥk@c[cggs K3p%tdmy^$H ,cNT&)$]2&~ F̵xBiS p( ^Վڐdhxù~[V-"{2XCld]kK40 ݖ<~&aZqBXp?T7t+eh`p #yb=t1.`#8P0/ &9 :.zz*^nߛ)K ٢&S`}Mlq<8=+uIB b> H AB,VH>y(I_fo>mk6`wi/x8&+d:CF XA1}5m9A 8݌l 'V[z!<]>h~{篏߮] ZׇϏ~ݻOϟ_n._ l=Cˇ|[ό1xC '藫 IW%INI@I"* '~CI4p<@& w| *ìדYe%V,sE%SXy^~~2fUOpߡb4UB|x1{ , ƃ\NSE|+?gDN@YBvPiBIMj1HN眺tadJNGAb0(,jPvxg򌑰-K1QĦiⲪ)WCagirQǡ=&w TNPCߎoZᢳḳƓ:+hǓ INV%qQoZE>Ta 4DHL8Ic5n'[`BГRQUoiia#QV.(a+ ^U 0y 7;ՕñJD")LcFd~i %aLon84<~:spe\-\̲{-3w,6,k"S"80k5zgHmX>RcGxb:d]c^qȈ:pG"GKcm7rC,.*DeXbp1M):/M҈X.I+(n <癚 \زI$@L@W<VݒDBC ll~bN zyb:):ѐl<1m7~+n$:4VCnlkK&EwXУ2!.] -+eJ@@짢H`BSOv~q % `O"ҕ&̌$_C.CV(Floog589Se5pSP ni6n=A:į-/0]f"(M *h3Tft4ZFaصMKYݕoա+\ÑX)`#iZl;ʁK 1`q^,,؛ŶGt$QPt>^>P]v#dsS }do2z2c5m~T?8g˚9, (/skR5 dK)1D'Ĉ)tA6`2۔f,r0˕ClJ RӀmЄ<.{3Tq\?yD؃/vu?8<劜x20\hn=tL3e,2u4PaiR: |;2Lc MJ.CڔX͖N \l2.Bpqǵ.\>@LO>LS1Fo("0V\ٯɅRn`q!ÀqT{fl:GHQP>S| X25{9.-E?{B[x} @lQP | rPr/fy"ԍg(s3 M 90q2"rX*ztEz>‹HA,4OXE=L2H[d4iyRTΊh_Z5r_q#y@oȡuK,V[ٕV ئm\4Ƣxoׂɒ$hꉂPUCHNp?KU=qy8,j\JbC-;k pL,dOθiW'>*>,QMqUH\]GssXisGР@ 7>&J%"䐵QW,]FL!aMd(;$'!F"\ۊ#5Y{"H>H%Ψ)}1I Cid1f,䍊7F&FdHbW󖋳0,r-2ᠣz.EdWN,-@-Ҫc]pl W-΢K\D<,bQ(;n髽Zt#3"7wD#2Cbˁ whR-]Ƶ׆.c',fһ-rZȩ҄7ݷ+_˥ů`,/x)0XdA6J46(ϯQH1]{o=9uJ[ ع1LCSr<{J3_0{#+&B}! I &6 Gɸ,lf%1?x0jxRi0|7# :$D!!&*.g8}#!Sk2cT{ȦH_t;,ͶqU~1-0v>5@O|WO@ 4b4Zo1?ptbTe- MT ~k *J˛mԎKTv, g֛LtM<~aN9GěFG L^:UFzr6w:f?uGH'Gb:`y M!-tC6OhI0i,R]A FVPTKM?D)I03w* VS`3W`+ǂܹ4it$U3,uma$ -1dc h$Eb=\,ӽll(VUYPT1zp2`)~hqIJ ˧TQj{Tm0Fg Wo䯲S-*#W]>N$Q 9#*uL6*#*VR5Mn^bq;{K A 3k4f傜/XC0`ea cVf(=%cRq Vs)LАg1hƼmB‹k=WӨ+OIHZ=a,z U,hI譢sPEe71?'؊){%}:.uXɕs}n]i)yMW@8g<>EWΡf\ 1?W’'gS0ί\6֜$sD3=F_64[mVT"F LM|ǭ&C3g7Y Cg!Xo-rXjWwFkaДh=6vfB2_ ZC ! ql6^dp Z6i%M뢨B7bLӘQc<oqW_OGۯo>=>߁^z??O~q?WNc 1%o@ߓ M^7 fЇ_ IM…xs|o[H${,.-)n,2ALg ˷H58a"',OLJXیfA/Pk1CELaM9ʓ$.XA.>fޣ(E‹]~\ZKijdVIC\K}RǖwD[#8W R@i#lĻ4k,<%=^0D|v)[l: ҕ`HnZ͌eKƹ# (xXq1W"+6sYk}zYwi2AY\\.J4N~&t=f-hmWsLvnxlY p]fkl,\+:SJX9by.aa"VMҔ&pTإs/H!"eۻc,U1:ƠVcd_<) @؞5~NzA Ffu MnN M:hE'CBrɗ+;NK#XJm8^2 OP.P| Bp>rO3]Gd)ME9|HftU} K 1⿂N26Xp!AuAFZd{`KZɒ6>.mojn>l E΋˔% k +wô|lo1>J*%؍G^63W9%eOSb@r9]bHeo0JݲMACcOQ+   Y  `ցHp9tTb_h2"v;A_xHXu#7=L < t,8|0 Ź_LgŬP״h'QO;OMXO8HL[d)p ~]PXq֤"ijv8rA] KOYq5b.Gl^HUf1b-4έ"p/:A@pZ+/.f&.{, 2  _5J4rGb˜5y FkV?UeR7SS=U2 hb1`RPPs۠QfojZ 4`Ȇ⢄B,D6tX0v w^t:Y,V@lAb,)̠OlQ(:v/uG 02~J8>]w|sJȦtZR/>G1]/V?ViM t]A!Mj .z-G YY(e  ˾(Yfp}z4ܵ4D+dsnn3:y8X& !ǪuQz580Pt '48Lz:%^q{!OdnC!,zoDC8IƏy ) c ksKB.oĔUGvr<ڨkv8U(T3̲:iv |ǯo޼~(v]Kn#NhfDJ yp 6]Mrb0-!?7y9'} PV^_O?Ooy}[旟_~77ƿ *?>oi%a H "(+^_tӗC[~"~!V?h>q1N)!9{mgX6%X`hK~Lм%Ws^`] :*T('hMcHMpQ7H. Mc1uQ|-D܆@$ T7..V{CV Z÷Bk_+yס_p?!Vp6wC@u{IaNnE8kZ;LOya$Xz2jvaX%ǁbR_u!knGB/}h:QS`D"'Vuw͡M0AmZc>FCp2[GҞxC܈Ѹgܠ5 \wP5HV׎Ύ0 i_sՔۤW!^ޣxss ̇U;kIC\WC⥡5hے6IcR ihS^£v{j޳yzGgFs}E`Yug/>R;uSQToh~iqBєR9h6(R5쨓zrXQ|WTjM6:DU cR3 ,g Xd] fċb'?N-͑0F"K9w拘b;0v0NSn ޮY;No F(Ka&3=^ %YuYed8+%=T4gxhs/+*)}%Qt1HŘNäc*VzxWEdlOġQ;"Zm\/ZY}{2jID%E`D9RF~,ZDqKHOߌH1B_tdK6)bi3 " F)Т' -ϳa;&|0S 2Mj ,El BPFc=͂_n)pSqv K^ +Pւ5Bvuv#P􌫸f9=@br c2%ϱyiB:L,4p)H2 3E/Gr\5,*#WwࡩICC.Ů[[Bn$@D'Y.'l5Ɣ|0\RCiq mt(pgb1gP`ᲜQ-:1}s4m bOf] eFQP;|J C{rl5bǽqȘ*V΢A8{OшA8ks:zsLB:sHC*Fm3Mg7#cc4{!ʊ)X^C@ш"3ᗀPqCl6'fD]u&g >:֛ %+Vka_\0IIms 1!*V{=Xy$4Uq+(hq/^m[>Z j& [a&G "JJ'6ՋQL0S1): mk٤6ڭb]WHifՔdLb^h,vv˭=XRBhC.90W7j ƥ=`PwsF/C44cAʂI6\_B;tQ[5Ғ3)XB9b͕# /\Dʈ{@As#^``0a?fw4h|cK]G +smT6uV2 45q]ky4_()ZB2AZZBF:@sunKhq`^h h9E UFػ$=2kFȴ^nACqOxx*Z-6 X  Ƙ!l<ц* jm72:ɨ 8\@Z[%$VxM\:RF|+e+E"7`YyȆ,z()SΣgUMqC|",%Qmטn1Y:8ihFM}._C|wkNC-u5n!#I+^jf MLQ3*le6y(9XM>/)u~|+YF{;Hw&A94c&iek< 6W~aʎ,aXv颎86$egjgK /K֊:m8H D = 4 +pj%D5";v78F;dOx:qR{-_YGizq:jg5ltzщΌwˤN&,ŒvU>Oo3hrR59HWHL/{@4w RىDEAWHg)i=Y<(ֺ0`z@a9V5Ԏ؏. (4a,UZrjȆL՚?8+˺tm4>@Ǜ\ mMcN0GZ_Z$4 է2VL{YJjg蔧!oy+7לVv1i@. ):d9dpdlSxߛ ):;.s*i`&=.4 sO"bqҏU @:c GWS;^h:fjn,W'^gڊiIA+EoJa^AiK500~Gf5pI_VRǼ[S8HY5H) st"P$sڄtG"KQm2]}/E'XR^Rڇ 0PӽFKA <6K |D-bj`Z>D'M#!0rJu,XW[BH(} 6@]$%_s:Bh Ʒ!~-AK>D(Nr]|/\1W:8 {@߭;\MFNAn0!y:^+f QLޜVmMS/$4IP/Yz$Xg Yml?9ȑk.JG}@wRδo(83FT Z![nnb (.h(&bp(wSIb:HQ(f,|p8Q,}[(Zd`Z1T|F9E9>bPp˺sÁZ@3|,p#^ٮKD`{!oZAGn?,eT`D7v=1 ̠cXO:SC^5IW"9#XiGril3MvQ4NoEP/|*̈${{рPC8bE(u{o$P8@hw=;C!&9dPO9>S%6 ӵf\r ^їu&9WWSY;зζcNStqڟ>b",Sa<ۓJAۅnE`EM>@֗u51{l$ÿ''piZ2,?ͅp6[,JA֤ CQ)jz E,[`.ڞAђ>\`3.6 |Ź :53f4 [URtYjX47hO1i {88M>EK/׏aEό=^f\GAqR>'܉`ꙶb}Y. 1abR!bAj`0W+4W"OK_VRƈ UU)AtsK?$p?׎C^N뗱su) 0P Rxا=.3j&YtQ,ͽy$42w(ձ`a=/ a6уО"A@`b5\BGOdDK;]ށLaC Ժk p"옯|IIVi a: w+&n0r r{If:,`Ui 6{ Iz{$=ÏՌXnĺ?SkOrd'/ oiL;)gڌ?căR;X9j F =^&bQۛo=58Zp(ڂuQEz$1HQ(f, эdI/X:cAzO3z)ρmׇ7Ho1ZURjeݹ;_!hΘOPo:КQ\ eKZ^gfa2^̈H;O wKPP&ʹ݀Q]iRFע/&_q87ᚵ Pzr`|' d*|GBzff-I%:Owd5QWSݹļ iC/vfWն8MM0 ȚVeP3f[gb3jq*t{38Q.|AJRsMr1Y4kŔ >qMɍU chk`7W sn8=>ó&ߵ+T: %/n+6d~wӷ^}x}gӝ憗 ~<>>~|՛X_^]x_ߡw[a9!v_{{{0t6?' * &s1] 7b.@m׷{;Cl$1ߧ=K`Mv$4`;m+L3Ťm %_ m|p1-1cCvv0[+\N{ !Q0pKw%Ĉ6b_@m/!Bz11^NHc[bbDQ4Вt(J l\";7MstNse AdHt!GXG*ƶ.gh FHMМ17qջ{wtߎn{:=~OO+OW?<s:woNwwe'g(&HP竏7OmǛy<򇬃;"$D*ۃbi9+%V0x~dqoOҴ,IېDrm Ifsh20z kU"ۃh{j/O?J;scI$6MDq9yJ&JGd(@k\4Um` orV6Z CgD4+9$k%9oԪofkKb DK!!o?j{.Cm|i3:QKZ64AzF.!WU_;6?Y[tjla zèu1;NWgf֘^Q971""&c<9Օ=2!^*I.gIX%Is\=p#.(sDn 9 #vi^s|Fyz}5sݙ"eq$7բיhنmHZHI kmDX΋""pN q)'H`` 9kgmP>]\ʱBnh)(l+i0sHvP,[BZDŽtfhBԅA'yՈ^ղƭĒYG%f97jpn`Jmtڅi^AQrќ6ƍ95M(nCgC]Њ]JKlTZ)9/tWH@d+ m6V 0W9DݔgAnԾXf4,u()uPm[ SmqυF4>c]eBz(8`pz$h[{9 g]g3^J &Ht)Yu*v*O*B*JYDפ0y jae3qT>8qvSXuK|X`m?Vr-QiX9뾁CgEŎITm|3(9k (u1AJ%ˆqvHh|@ 3qjT5Am.iB OP|jK7?AqrLm`] ]9Y lFE <C-0D2A!'$- [bZVj1sXV29VބL `^YѰڬc,Zb[VsEKR{hiP%Plٷp/+M{Y(61-@t~h|ig/L8.6ruAO8ͩ47,I.3060\6,[#};\n}@rEn))ɪF=D ;.](X]RD}OE ZFG+FI `MUQlQBʼnSVY _1ඐ-|TdfgvQJo8͊ ?lz!,"eM($t"Ys\Ph9лqCf!3dyu-qPgRSt!:OtQߵCsi0%Tԛ…dGH$/6ۗ= AҊ"Ǧ`'MnLc'T rQJ6ȩ5ݹ TsqSnnc{3;Z,&^;@dvE~73tXkb9l jLjl _ ꖏd֙? L@)\.4Ezn5j 7+ho/샱83d 1[dEa6ij$$~[HWY'b}^Fҷ狪,̈́dͺϻT[ 69 /iuYEt%[jwKvb(j;jvO/>}ϟyv?Z.}/{O??=~z}z_0 8/b}x}?^OD` )R[/v>uE(j}Ww@oУ!^ MGۣr?<ꍵ4\$GcJo) aBz#XGkGo]A7yd $K:̰W =.X3LܓO<JQOǏA?Up_̸ơ=nD[ d޸7Bzз8>B3hO5܍Sh)gzu8J.+ =|4irݭhh =y@QQ=O1m6Xhm5W 0(A}~҅N Dp(m i3 -Iݖ,Xq/=Ϥ_a0Pq?36V2FQR+Hx*ͩ%ͷHKhu|$O1 jE^Ehj#˷x  '3Ԣ1$:QHq4aH撓5"u؋n6H MFEt fT-Ĭ;F 1Rl5M8='&Hik /M,a/ &Wf=0ݬ fH.%xsnv1\bC5e#;˩ 9v%+YmrwzW2T!VDNEqO% P`zW/f|Q\cbk)^tMaEc$ %I_;SiWq/$v]u- n. ˕~+=ϯyI<j 6AXV?9y"SۻTFF2_pL:HssA_<JˏhPwHC1>a𹤑_Tr6YkISHOG9;r{1.^/ `2@#m#̽\z>Rj)]PE{H]"l͐6ɻ"̪7Me Z lJFT!kLB=h=cB0?U0BN1*ڜz1'axpmrZEDi\j%}:QR=2T^l肯AQEeAUivfG=GgB. YN"vH/בf~ddžܬ&wc@{V yiwk9>ؚ1aXkFyZ2akΛ-i^mFm~w7蚭lVʰbPVH*躸!}:P&ʦTnR*N)AФwǗ$Gs"i/_`Dc[6x@^0d{eѱ-HjTyzm "{\%RŜe_TYVTtK0GmGGBh=Z eFj3{ 111pQn9cpVR X# aWH9n[nPdi6k S-Y<*Xnݶ?%B.lR(*WWuXTH`RJe1AjjHo2PtUy>)i[NH+^؞ 8kqCF%c,Xx(Vqk]|K1TJeUr47G;@Pq*/Pg;7lLgaRhSK "_4IX n'% 7oP~h* 0ڻW>&` RԌ̋) $"C,[4Y<|ZJ!0%%#>Q `lA*bX ю{L^ PL#e &RnQS1k+Kd*} i߸ej/*J2o[ 3+hZ,_\c6f4x PvKU3 MKVJT:)YmI++W3jkcQ϶5 ޴^=p֔E²X4qe$شJjCsMqrwch;G<@ @yOV»vv۞p5Эìaak-0vىuxtwǝW{괷iaA`-R >L[,sY"Y3rZUƒ]ToҲ pGAԒg[DqfYĮl!|&ɏ:[͋rT}d^#~- ЎŊf 3p*ֳy WU ) A]9(*1CA>ܩkié=@!V h;^-zj ӕ#ۂ?\,!,C7q ccźѲ c[P]q'ewJl{lʅcaL(| H3qa#uxY@DPL si:'ְ+66p%lM+iBh)I"xϠ4 _=@Ps )߁ɵDpL3UVT!?٠~o?=><?~{z]}|~J9Uû<}{<.9)W@f]9$PDe@?{ګ݃B)Z2P ^uXc2+t.UzUVk{_` ^*&+ex}YdzYWefX}m*y;HV,nPyKWbB}*~~cHwa"k?\ArqWP0xĂ?\OO?X~~=N(?/ˋdž&:1p#XxqcR?'!FPLnqUߢÍÎu𲎴 /^%F6{ 8^PdFT#¸a6ah7b L$oNVC1LIG)RwQ:U.* bSG*cѬ1 52}'<ZtL`mbx6l3?nS"K-ָn--dٹ'`L :Zd2ޘPuԏӲwF B*gcb6Y1 Kr|6鹻 -٧ѱwj*!Y]❹Cy lX)e-n`rQ|g)F="$=xncٌ 3eA0@ #fk+jhNs]!WveZ!soEê#QZzO9nK?aRHP pM1V7ƙf桋`%:..S SU"h<:WroV3xgKRwP) '<VKej׊ <8R"ף Ar<*]#gk ܐz9INAM?Xd;wDwؕK(!/MF8&폀˵pl5p.,9Enר\$$c3K8r2UUϻ+F R`2 =\H VTJ2*_HPѴIp&O`SF1 1iD\eS"r}lJxm(|" H5E% x_J-P&yՕHˑ6f8n|Ɖ!H觑O;sJ/G;yM,JQG:N"'8ja#IGlџuˡT$WKֽlnlBr/lF_O8ȠoX:;/jkBo0:ք &xaȣiE;u[< rcf J6R](#>>u:kG:ף+q J%*ZqEE_WA ^L^bT:q-#jB/zLOwL΢EE*s]6M06z˔O`CG2*}Y [a(:֠Ah*0rb( 8{eF v@|${OL.vOwfN1hK fzU:Te7Jlew6\&ܶL0AJ^mG:])Zf  N iW&Q&e((ز[B sUIaeǥj6U,v9 ςbKg@jai:"fk&t£H#u'Pu?.(j,f;ۋ|$%?bͰI\Y[ I\&"MԞE<^'xz ꡵r߲N[Qv}HƠ(6v ΃5 1L6DJwԽqD ǜ&"Xjr+q4g_.)%;h\L_AW(/yN[1+؞A_W'Ktv UIX|#~QLDf.8mbLSNlgoEx@1?j*J+-v^["pF?|7|sasor嫲bOw "aO]#Rh' ־2v7S^/ |ˏ~O`,T=Gcf9qcuɤp A21$`=ñ0+v >=9Lc=tc! Q%?3lNƚR/,ŢDyaZeXҡs#x]_1=fP`_B@wTRQSdf֙]Bz.M}DC1\vX|]XBϟNhT[o ♲rp7x6dFm0ދ %4>&^Lմ*$C;fIU 6GJОM"iΐ{J.v|Dt"q{X"LvL}g֍\or>|< G6`ys GJ1AYRwh:3AzgJD;=ڭ^I/f2#w"<8DIW $N"P"J;CRY~܇'j yL_nYN<##;yZ ]{tk ѶRa4Yw Ay姎9`WYv9m<՟ڌv EHprDG + ;'j&Q| `U7 56k ρcwt<; Ѣ=,vqXz802jϿ`tշaB9A!*#BX;8"v2TBoꪕjepV^Z59LAzascQaѨN7_6\X#цk2xݭPoخnYrz?mY~N>C/'N"N]럿*JοheoW4􇢙>@q5溯H s:4/ &t ` } A3?8.~m[Do~D{We8ĩ"zqe,[ '^?f}UpMG ߋܪHuhŸriG:H(>Iѹ@V^6ԑݔd\:яLvf~=Q+Lj4mʾ+L^`ly|XxPsҷW!2@R+q}$E.O._vB!_w:R~a]]+W{D_a?1!)‡s"ɤ_Q X:dnru!+dglci-֝r{SkB\G9кrnRg~nQz߭-~gp{4͸,tC/ը;8s0k\ًDbE7Rplq@1"?0`H`]M V88[MCX}|^V֍YE"p,*pDۉ3L>wuU-_Wj9k``Ezu\D 0 < 6lX͏y4pp)4]1+3ҩ'u[rBU[ڼ|aNrH_e5r0qn42 w5zкG$;u[`S˄p7B̈́Lm,!k+[c]B6cOwϏ ,so i<f#2ѣ}mxm,@UAE LGwY[赌]x`vsڼJ||=<^])0LS͢L<pN%BВc6dO2^P3i|qlX;\((Ʈ)uZ(~/C[ r{0F(.B nS#}ّuP9R-ZxNn ڐ]mFo_`)#ڎeAX'=!WyoJ t{;T 'IkqOY s{!Ry=3>>|2s^lR.1%+L;6=&~ :^S7uČLnG&vkr'ȝιGfV)vDE(7@I](|]Oꅟ 5?ߔ%$17#_kN֍R>WQifxp޽0THNA'=l`qmPDd{-tO cU^bZqKSc|D?W!D2wm %F7aO7VqA kvױDqА۲uԧ´!m 1gFdQbUIM^<\Ɛ'#Mj !I\c`M׵~1Pw}gKnmXs]!tm% pv!qxX4FdpzmZLD B`4m #Z}4f`, :Jqٰ_o_cA/B|AG@a_҈`.Ұ5p|񸤂b0Sq۵tB}`*HA4([xx*57v:@4k-uO@|~m^:2e4IΆk~n@1$X2Q+~ۤad5~񰍷5ыuD7ZEwGnJ j:_b8F B(D:Ή]X0+QOÈKD൒z9A}:} 7ls7p^څdUYcp+klfpǃWL VxQf_J|"J 15lpcÌ.'#ly,0vY,mYlPH~Agzh pON 4jIdưdY;ALXmU+ u?q] UКVKx\Yf }~`ցʂs6E*PChƯ`I뜁qY5xi8PCy7-@$6LysɅ-cׁU[N{2")*tfpT빜1G{1eZɛ 7b-upRSEɫ^8m>PIP-%&֎e0HO'Jdi"UK^α'|qE:qPsD>tt~$FчV"{t/H .$"lee U]XN|V&?LK%;^UX)y=aF nAV!)></+~~&~c>b6bM]G P?-Zׄ-׵දcgŬh/3<)'Tos2IWz,g#ӵ[Г IdB#h߽UKa(G5>5Jٽ`n׽rR#ro@eylhnSDWnDt*D#xKz˰ 6LDK 6C[a]^X`Ĭ+։ԏ@ _Sɷ2ZӃuԶ\+ik= ˶1$>c5s0{ bIwJIlkޮ a#?ntk,WkZa%+e',6tO|o|#"=Mul5T*,~BZMJ-թP[)le9lq]RhciVm 6Wt(J LJ|Ao]H8(IY,N4|dϘB;^ }^TK˫oĸ#Iw藌nP1wl,X/`d|HTS DfUuǘz]x8t];̯u}aeT<ŭXیX<.L$Ys>p+qd&f{镯 6+ʢa}/0wy :hoְ~E: ;'xԉbT\,12HM/kH}ٜ*̋W :BRGQg@]<ݫ^Fw<X.2b6 x_גx 49iCkEK39fmw'ǿ?^D@)b݊}B|ϼl_Z!=ѳJ1,x$R} t*6PNvδ_y>N?4 e"e85n a?'o.گ0{oj(.q>]JOQG,u]);ŕ03 D+HCK's;Sݒ3?Sǭ?E6. 88@|qD9~$sҾHFMw P9g_LΪpPafF RJFos/h }N>{8\>Ӱ 5o洉ĝ Ϟa uJ˜qo\L~(dpQ<µERsQ- @1gfqƺ1{?oe WϛN1˾2L6"Y8h)3l;`b@4.a]'E'epKM .5 mV_7;x0#7nn֠G#8D%%ԿH cxÁ`õd&Zqp oj3&vM  cmϡ= \j_ {2Gvlsdc5;~pwo,G\cd8` \> ^̒H~$H.ŕI᪹PtY?>> =Hihitb_㴼Yx+|= ~~yLM$}Z]d`v2a9pC7aEZʸHKk)M[Lz%÷~[[Ԩ-9?8mL.@y5_7GcԼ6M-. ;>`M1YgF̋|>u9m8uy;mkˠ:)6zY zeɥxE2u~#4Xh `ႊѧ oV|G Wdh/*!A :[FE3AL!T]Y)~YRɟxl`Iy;@P[HXن 6J"1A b4^τ.^cAm/n'm%h] $hIhľ<xxEvs+ ǥp0OmCHxz%ṣ BUxί&oyANgTs ZAZNs x6ׯ0;BʣC3"~AX!_n/~í{P]<ࡵS຋H?V׆c.q&:Ii*@x|dJ#EZIm`;Lnm8MУHY6%X  Zt{L6}z~lx73]$,DolD$( Vڐ.݃ ۴i"0y4 86q` @fq+qB!-L7䷠sV q ׊ZPPz<hǁ0bn.PsݬIgǓ5gj.܏{m Dq~9-7>׫Z;y<.w,MWmLRia[nRɇ4 晊>f'N%nsi.b$Úm7 @!=i;UxTѿkbt'YF'q5R6Dɺg [|.hk1v8d uDZ}ܱbCĚĕeʡW1LM|R& Ulk|M(o RnT`I}چgud~Xfk;|م~v"d9\ -^9e%uGO%?ګeG~AC,CB,f@ E{gD>͌FsB*DFF86/b/{)H#y!Ȝ+-G#4_XUcWوz\ ? ."Y5+4j؅bI蠕m]FfZ/ YBM{PA( E#ql;7!/=BЦ®p,C$#u,7}a aW-(qF agKE&8`w%Bm.`!4Ϳ f`:\pz}@/ߠ~Ξ,>ǎZo1_bh}A:"bP ,^I)H+T[?aݒj<9ctp0jCM> գG?f!ȒHcCPCȚޅ14ȡql/ ׇ?.O|?/{|/=<O}};~|?W?].?o>>wwODlw.on9/.?*ZǓXdҝ}[OoٺÿޜTF")Ct'. :7:K$q9ip= u.z ^h-CMzxVmp_φ$saɶq=ޮ|/xJh\^`5M&MYS!@/E7:cy+U;>߰{2#t h7\/=Bg\;ip=Qw@\o9?(8`Y /j o12䳁HVKa`7<ڍ%qrYȰ,$f /kNDZ7\6,6lsͰP)00m͖gK"i=65JZH!tit~ gˀfCd7R% -^qUUϪXp٤IUŪA9ŪB ``~۰g}v:Dz$Z/1؋Yj>v#z"I*XmSql B 7d|/ߐWYqm\̣83¡F'W(ͪ \QEʼI)ZM&L@쳂y :sCIhtdžf8w$ ÄWLYumrٰ@QAXER0g&X?CZB~f 4{CQ`}60 |,t:ࠈVc"9ˎg o=ĦtͼZɯ|>ۢ)"f 8!&dk&ؐ@jγ[Cp h-iV#vNM~ g,a7v%`d|Cg]*.aSyDb^0u쳁h+4{3\ːK`}60I#+FxȗeWg8{lP +Cd.1BK g m:"L#GP>gsHd9Xæj2\7H>[Adje plp}sra~1\TP8l`*{'=F&2Lml`.a210LRd0]b |IG)&8njÆD4r1$40)t(OL>+س)00ϒ_%;bzm$$rTl.9#a>MTY"wƻu:ibt+p>CG)M P^ 2㛏teDSib0}pbSM#*"Z:0pcœ:[\O;a(u1I Cm-te"axZmq8vb )mNIӥ\^W :1^GNki5T}N/+R(0Ȍװu`Z;`VA,pv18/0ԁl 9̚GN;ސl4ӕ&:p_ik 6 0gPg \ ^Z#5N6{(9M d4꿣=&W ޮ̉+9M ~4՜en)"JoxCf{EP IX4-lrb3$lyC &XK|Qd;ܡ׮cSQQZi Z!,8 T MXF=#ےg9t"m\QMX\-)9M\jTK,tdwBk HiZx+ӑZh \ 91" ,zZ@X:2d[02B)ibI%S{A(4[^}NK9M甙6qw=Lrxa Zl|?+Oy9M ^-*6zoDYj9M fݏ7\᮷Ҥ^֢P,ZGkv`4k?끋,Z]lF!-뮶a̗coH|9x^ze413/ ¥OM -t i^,epWہӽ T ʗ R FJj.@͍.pWۉN-LcLz;0p6̖[GG ,epWہ`dՐ4:7 R@iZXz8ep)o4[rL}Rw8oaDk^zNÒV,joTN,pXMzXKK a XOO!1*v܁zZ'5H$;0p~pAF䋗 ibD]ǎ |;aT _X xi?b%vљ5 Mib0Jh $Va pbZ$P؇tI80p@_g6X{L& [Lbs=&ib/Fb1 N[Ϛco=&WTYY$~ib~{L‰Nk d14g{L{ m9_ 8N{VJ*}w`4-!s4a!'Cb:_4?)=Ycw >B e;V7SX3JݴY؝Ncz7S &OaQBOF|&3I:Yb\+C(/?Uztb-P? > {Pg6xb:NaX㐄DpVN3pWurZ 8@y/%4m"i&[R˃^ 'f%pbԠ"Nx hw~FSx9<2ndZ &HJӒ6I(ibEC >pX|p e7[n/p&kxwU80pƈ*R8^ ލPMr/ 6o 8M +^Ӝ)ӂ3ަhE(&Rʨ=^ k5p`41Obk:1]s4_%VWit`18S+eZ/y߰8Ml%}I ^H̾t#U (\u/y߰81,E plu K/ FNHjIea; OBffNɀ?rX<;LK Ψq/xP~בO+Ym֣5'CL;\_]Y!՚*daIK$z":} >G+hڜY ݆o %8ab6c2!*7 >V8pf1GH^?#FXgOR@bg//8=;6g3 9&>=!=(7!c,bKj P`ٔI +/}2Z J͙:Pd):LWm1KWqi[(AռߜY 3=iS$^{h(c Ilq]@s({ ÝA3}bhRPxFi9{^wPo,S,), )V3[IL`b"d0-L4eHŕ~f%|OJx.1^szޜY ݲnlN١pv`E7gC"hvF~ׅ_`iY5S .*u0 ":W#%lrp1/1Po,"Mys*VǍΞĩ9,Q/os eAB[˙ŕ\Spf6ڛ0+aqޏliP\8A9|7tJؤp2qsfC 3yEO)bi>W68q2cVĪKR"FZԃ7e2t'Zy@S j gC=XPuc-,N=cEP2W. ,SޜIO.T42yNV9Q[!}D[P_Y VM Kͽ[7 zsf1yYʍ {/BVS=w{n™#og/Y c-*x}_8x斔ׅ_8~P~TI{/Y F%}7\~bXC87_ gRޓ! pf1_Eo `2ka6\73u,F xOp3)`Cم~=ugƬTax99Zo'n™`)9tdoR]_ҨV `]3g`J: gGPW(•sʬpB^+ g vsٿ g ##:7\}LbVx@1$7\~bsqQS|/™`7S]1KbmB`]3ulG g7}z|o'XQ-,4WfpXOp]3S{fؼўغ cUבG0Aoc@Z3dEo?Q]ݵDh 2""3߫LLz ihgZ2桔N9܎n% c`l慎p<2nŤNgyIY6,ۓ4w_ON'!hf YBIY LnOBͬ0ClrE/pc,/db# As7 m\̺b= As7Dw6xkIYfn%qϕ }p^e^kLL'!hצ | ưnOB1C('I'aa3!) As7Uwu5:IYlSj4|"ݞa^ȅͰƖfb= As7+x LL7ǐQz6$̶h5s?nOBZ@a3,1HB>7VdNBNsc"x-hHWL'!hfxÆ fSLL'!hnfEGfV'o :H^ye%LIIKk&USܝ}H״X r,zQ1o0]rJ;~_^[K%f@ &Lla*It%473Wo(8U ?v5s auzjCbk N/RͰYT0$fS/Ee,nZObV3_;ߑCbk <񬹙y!SU_v54w3q KZؐ^As7 8=X~;$f@H+Idb'`՛_;C$f4N%gBd`ܭ˩\'5$w/10P C]4pH`E-!)d ^*+Nutk+CpςS?%ƢS>zޢVrRhf^lKŨlV+Gu,d"eܦ+Fu,i!dTa*ʑXBH4w3rH Bf31+hfE#KA47h:dYy͔jL Y.l& r]W -:Lr]Wpf:E2#n0e4fAmA Klr5õ]zMOvݔ:Z+473N0a YV-鞟\aef3Kzu+473U: f'W\YaUM/>}wO~0nvZЍO?߿;xËo^Bo/{yFOczsN/̗w[6+,q .r 5A#mʳR {?#)rU'Sm 0BDab3ݽB_UQayvPbHPPb L|~O7D&6gEBb3n[۰mQN'31:\D'Us taqQ t c~~fjLE:@+ƆW7)X?ֶ6. tDS&t;:@g \A Uݳc8n#Qh]@jcP5)2^y5;`S vn>~=<;xen_vx<_~'АYR裝@bCM pe)+r&RN/8X_()V l5gfuX`eVeUY9K}}eN#8]ɕ1*19 8 R{Q.aOcD"PLjsKkU|6H,4Hˆ{C\Y$V/8U5`k#K!8Hܺ3RLSJ8@ba6nhK!Vp;㨐hw:{ X޵c;oy XΟYQDP H,l ŋ $$n~:.4M .,{P΅O".q' Rjsc:[dn^=N1j7H/Kr# ?AC-Ǜl~B ,(1^4vЦmø>2O*4TBExCp+Cւde‘>HZ%hrHkC#'ZӉ ņlE"sِ>aߐ-pѨe~ׂd4߯uW蚕n܌6&#dYZ-Qځ YU]ݤkO-kT0Z,-?I [ÊpAb:e!kAd-HVBXBoȖ!]2Y l_3!K6V(K4dl-H)/pA BGcC0 =,Ez׆l N,AfSZ-U*-ȒUU.:]Cdd `ɑַ!YͺctGٲ9aޢ~lYyt|7$V;M4&~Ղl@$KE*[ vʣڐh 9ŊJJېo* 'VS dhLƎNV![:}4h YٱQ; *v0`(oVRL 6xC|{h,ȖhPߵ [,9ld܀Mւle2TV7dK,?$q!Y?ʅCl`j镏lgahIEWiClц8}nxW;-2ë [.2f~يZuj~[E ![^#1"U ![~0"lmr#s _-*D.׆lyՑ+bC }\6mC"†dVoG B ҂,ǍǸѮ eg Y eNBhF;ArJf1Tdd [)NւlY܆H Y }f0Rڐ-!fs -ZƆlcb e |ĨJւd%Z(DpC<1YX#dJi'ȒcLB [\ ٪n!qc"'C YH`0M&-ȒtCyuܩc8,H4;I UfoC YؔGiC_߾ϟs?yNf;rDϟo>>???)<y~G?~$WW^O?<i+83r޺dQ*-"ee$&݋(-]uDNh,lUdۻ#]ɈAF-I.dxBpyU_bi+ʳ:|H%~Mܤ?I>P--Q.\Э9 17rBRj(›<[" BR{!Х[R% SxBrp]݊p JݒR|41̑V#;m(nUڠP~(eAg&t ׂ-\I DFў-.S)_5K )z |'t>PVz3wjWՉno*Gm ⚝ЬT{tv`H|'tl*&' O jkЭȍ#ԝ(N+AW6xBFZ,}iTKiOs't+5J5Y -}%N `x&t|*.jY% |z?[U]h2>YukZ_vyBp (NhTI/) ~IB$]4UE@jdrT&fbR*Q")M{jwHjJ+MU3F Kq|H kK1HBHJ fr3.һ JHJUrw%(e"08/eL\] ]9S$4<ܜP&Д.RJVJc")eNL/]4~dИ|ZERIO~a*q2D<.Hn#EJnֲ{ȥ0O9Q$]^t tMODz.zC'.rûfQWJee":Fg9xwa'm0Maqj{yz<~yf介'gf9g_cgg-?1'E K R3pO/N "}|,D91l~F\` D~dMmr]>{0"rzjU=fxٟD>Ζr; iA8x*9w/%|}; jy{?>< xc9~e={m=__5۫'?{26?߿^7ov7WG0_ ?S_b_]|n"e%Oכ1=7 &lWC B 7v[Wa a^H︪Sƛ=QƑ5;[t-D~7DaZ]&U}o[Z |boqx__0z_G1քdýBaKa,P?  endstream endobj 14 0 obj 62665 endobj 15 0 obj << /Filter /FlateDecode /Length 16 0 R /Length1 4085 /Subtype /Type1C >> stream H|T PYNHlĴvGp,AԀ0(ꠜ 9\C9⸈ Z3+Ȣr)Bc/@(QjQǿa6ZSU[կ_}8&0pa{*exe¤ݖq46`;}0)ipw-1+/ׯILccR K\]o'=)rDuRZ NF%##isrU\)OQ+#"Ĩ$Wgh-yx:EcSժUx*1!O%~c?Tl)6ñE&#}aZ  P S [-ǶagT\_60(!o%p0Kt'!kafQS|P)GL0=jZafkLsS^HOk Y/Mʮ]nfu>fȐ€٤R1Yd>`c*;-#rj֧قcaꊯWݢ rpe9ad5tdйNKܠ_o3wɲf럐(5HC>"<UT!tp*4Uf߷ fh7Oqbt"5ed}O%#̘xGnӢc\s1"e^!cwzR% ,<((Z"}H4=p|x˵Uy?U^77le=f-A A#Lyxё? sZHF|fjvz j dڟyHޞ@ m|6|ag!\3%@(35)*Ich\?LpCޘ`M0\߁xk?bOu~EHdlP R 2JVDF;w 6N[KejasM/DxL!@Qk2F_sy4\fg Z˨v䥲dvCrΚBA 3ga@ I(OAw>: zQqU^dڸ>"ɛ Ҹ>6PXE43ܳkW\蕐rEzRzVPv\{x{h,~~љLC#ҶmE Y#9Ea`X:(4f /yZ莤a%)|'ڡ  #cԏX4,T 4"-?TWkTSW&{ʤKnܮ{ZEj"`Dy4Nyy&rIL-* eu"8kѢu09]:kooi| /}tm{3*dBWpl x&vkȲ8ŌalD;aql܅??GeQؙ֫+nWȆ5НwVS#DcwUwKXԅ"J(#7g10GĎwAfm Ij2',S8ۯgL4vu@ɱi |K;mu3~i"n󅮱!"hUZqVKaML/|fLV"8Xth^kQ0i+ώ ᖵ}`hQwT2Ht49Ypamǵ}/z~fyJ(@t([Ԗ.TΕJEXd(r`ɯSƮ2Fqb ǟ\`\`\iTͺ:@Vi uB@-[!?4)WXAa&X 2||Fl͚FnVȞ<=6h,)6P[ةS( 5{j]csqĂC%\JĂ]Lw&tp76Hέ \i彇ފOr2/-IߪF_:cx|*W+S1tBS qNZХP1vWFfA4Ѱَ)\V$ˤ29,79pH%0!؉yhrLps%'d5dп(pu\ pb9W^%m^s(mM6tv֘`v́vMYm2ךȉ4MNI%H7qa ZQz{׊<,:Rda/yl}MGhl=%w`Lq3ccH%WpBƧVl^v9O=?_ _ @ r: vP6]?f/}O#?Q%3X^dz'puezm5E,o EnRMbRW8Pۚ鈳G:y.- U?3:S鯳|~_WAq`c[sD45;?o{+>-(&Iq5pٛu0lYt80T,}r2cT}<ܩ> stream Hy\T瞙7Dyㆊ|XjcS[kʢ1nK4JP+\bo{fAM7zg'Ik?zsΛ@c&>Gm w~ĵAt.6ސG͝SK3q\0/ nyn;G{c~6`&;z"I>/b3iGJ;dT„ܓ8BQ_ؤh =x;S}''7x)N)t,LN`B^%M~m\ hX6DGys%I? #'F>6~d4B=hFT"K=Vn]8B^+x M%}|I | 6ȭ-w `'w\?Ka*P8?s88WZ[9NŻ9Q3| ..|r?r~ɕl<v&ğ,Tf@Goy/c~/u9 c)5,,e]uzC?y^˪'F!"Krʢt*EtQ)ErJu&256c2w/8Y^ʰ˩,xfp6S[Arv4ZrZ'9m wJNluFx8zNZY)><̤AK_OS40zJN3ݜjnOK嫛J[Dh 7Wzi2E#(2 >ciؘa\J_4KʒwR*7M)RRX8pJQТͅ Z<=k}iz]!~g3is:xx(uqG92cc#asX*}5|вѲʲҲ²ܲ̒i9mfɶtW)= *7qV~b^Ѹ?O~El)r7 4 ?4DJT4jlRGO?>)Q]Fa`ܡS%OexX98 'a5)"mc 'q瑏8K؎x\(hc 0B!>L$b2b i 30]~} l/eRd"3tIh9@I! yV*ZMk侒M !5"oZKP6FDi m)v/h}J4i7o5jL{)5%_Ԝi>t:J-%v`':F)u  T5d%StP>yjC!3]KT@ r-]5&.\-zDeX2O)=rzA/*#dPUS< Hv,L,a^hHD#-^E# _LQg\S -DKJ@$~yFUulq|>"EbJF$bEE Fň((6 n4J,1ފou֙;wΜ={֖u4EG _YW֓l J)COow|*|)_V65B`3x#o͜[x+ox'93xgrgn=~>#|q>'{>ŧ>g98  |/eW_#ą\7;3_ɿr1?\O7s~/tʐ eQ6wieqNG(^uV]T7UUwՃ{0OBȍ$B(ƉŨ߈#Dx1<GUT3y,YTX3*XUT*UUaTV:&W7hݨq>͚آem>oخ}PpHi]uޣg}?`` g|=t/1rT1_7>v&M2u3g͎37a -NfeSV\zo}~MSlݦHiNؕ;g}"gP Sp}oS[!'3iWQERxH$UȢe*FVkB_a. R.1R8,=1'DjYf8Fբ jsAhzK5X̚B8l]ZA/!G򢏱L4K[xLR+2`9R|k"U݌'duCvT~Y\m:F9!^̑rMVxcS`x.-셠D6_j[nq"5ReqGJ%ȶAp(w -4"=Dd<o)x VQ079ZK*+ʗ^*O\!GFbUj,Kb'd?hZ-Uۦ-UVduo -dcIdX2[Tg/8V?6 睌IPqp_tga"F“3Q6= #W\f;t͍dsNv Cd\$d,_)#WIUWꯆ,y[=So`:[3;{r\v` <ېcxboj 37.4f/ZEDW n*H_vy2<PHb$2e]-Fr-FOEw&PǨcoy9`+&[$['TTg*F^G7XnV]_ 'TDY2|qg\!| E-~9L ((_ YPa0TPNUE&IނݵB%VZ5)I>[Sڎ4%Z7 O Z8Q(M>TӲ{@DN'EObl98ޠXez* P7QE#$8̘Jwi!YSu9"[&kL~|z*aiB>J+ԝK l t'P_Bݥ0Z:t=D~(L߬; kֿ.P 2zȯMV-[4oӴIF^ wW\vN5WZʕ*XW24VRW[HifwK BǠtDM yY6F👢ɏLn&sn)G G;1ȭ\\-k/*kۡLA&4CE'GatnX{{Q 6hF {Q֐%YaQ?&3;ɲ-w>Kf 6`Ud; J`% 50$4qf ftbL4B;aN+L:fH(- I043Ua2~+ӛ}}~~ @%0`cFuu2GNi+ G8;E|(6_9[6JI3m6v #NאðnQx7$1zcfާW窴0z,}ؼVȁx`IjBIk=-aVh$ƫh^Tާ;!})/;+9Þ;6Ʀ^N[kf,DCCR@:bS һj`|q ͆9ԥ7)W'ftLA+D'3Pty(D(d\NM&)PP+ض#̯] Cp IQN4gfzR$"x"a $j^jޔ7՚W)zrʶmf72\#S-c\e`JlgA1%4R۹2nQsRj6%4<^6%Mg@`e[ b5:ؙAHɑ>#&\9ko :]oҔ&=w&{;5E!2JFmi&}Fӡ8ت/-a6DZ1H8/ȑ q8,;sㄹB0,ݮ[%ݪkCЖARU9+Œ܋p.R\Ѻ/XAwy#k",GZ:.9`-$+=Q_Yz]{'C_C? %9W-w%kť!_p,b_ssVl:oߩSO[ 18ǙL3$7ogJ` Q(WO]#ny9b?Z&>Iޔ? Jy%ɿ[)^JJY+`c|,+QH{6y]A-U (~$x.Y,vT-d  td<շqt/lٻU/{܎JaEk;-/M^0lr֌9tM`cA0gL2MKN;c:KyWˡ܀HJ s4?7eme^ pHTjjk(h@@Qd.:RF'>Łb~P+^ aɬ;,qԇG\HQ/ Kɐ<@dT= E 󥃄zNcT щّ"En'-Kܿ3?y$;_x~D?ۋ^pf骺MO悝=f>K?/3L6 gs sfǛKp{n].qKJulvbNrcilIbF~$l6+[x_b=(m}~e7˒F Ñ`h@x1A- Y|GU@mACȁ脕D|4 y|*CeѤbM 15r Aʅ4*T/Po.rn-IKɚZ繅1~;[^:1[W?>v\~a}l`{?;}]R_|sV);[VGol]jMiW?{|4q.$G=9,çqߨ#•4>r rcr5ORW\I]%){{TCֳaf0[Jwo,8 LDk2fwc|P}L#^Q~^W"iU=I2|p7}7ȳ<ͰvL%PtU)Nn~H<#Cl1Xopz/jטu yu@ӂ,IHU%|Z]rX]nP<OcI2D#41%I)ҋ~->ni5:]i>2rcmG*$ePAw"Jb\z'lɤ LL:{trw-6 E1ME)MM9}?#v4@]U} LΙBS"[ThXhItAlf lX31pIp K0aX1:cz(Ȗ.+^CEP' .[I'LWXidk~T 8od #?|xf-K'@̶RTl`>v#?͇r_Q^0]J-C;("tcz{=NK@>iY ʏr7O.HZyT C(H(0 F, #&<#ZI# &)HJpU:F6Tv#b:mup=ra >Ofsv8ٽl2]l{Pre%<w9NWb>N~MH,ay`# ԺQm>u)g@}&i=!PLeQ7:B{i69P#&r Ygh 7;%8:'cq{ `zp)~d#͞x2/MZ@Y6]gh85p;eBmT7j%wapsa ;٧|@XC7B[E0;̙pyDD#}}I%6xQ0 ]v1np1>D3,y/X5Xo2*Qiam Z4eG SG\l,ҏX)9_TJ}'c oMz>#IяϘ8ظna~)X_8ɑ$ceT nƱPuD>wY8 r[MVp; ⺗G>ߥ^={)v|Uh/݋99P[ vWwrϷ`בiyd=){|dȽ w,wQ |/HtWEhU;U9eht;0.a=y+Y#.CJ0y /&lWT\H ~0fנޏj/TE$d/8i=с' 5*̥cd}|U37U3@y,g^'V%N%B}ur~$1nfflMnjXW0Orލ[dz νҷH2F(F[P6;[`MD5f }a0&f ygB sĸ; R iwPu3ju,Ul&)ioR7`(YXjg |'#1CUʳih  UPlNMOiK[#v6^>N$S4zm|ۚML00h'4OaTÍI=ϒUԯ vd >Ly@~dvRG~F\}4No\\~q:)Ķ>rB{40ܕ(GejSGGk>8u(Z2j>\u(GZu(k飬G}:}Է飾˴NeQz+{ғd-+=Y7(=Uޘ!YKAQݪ[JOW+WnmCK p-J!)KAQaȡnD Y&@/2>瞪~CɲӬu瞺}뗜/ǿqkFd6 o)8>xsN7紵~~1cc4VQhi7~(8*&Ho5ԘPɰs럩iLEXɢq;oo'zh3rv;2?Þ|h ~utg o{#IuMv/zE@<؍`M~Xq͡Hvax ^ vsӱV,ބWw 132u{I gYL4ߔ3HΊu]m*كjX.Ԑ/03Z.L2=ޚUDֆNcrQmJ%I}EQGFJ˩UyEߒlЮ>%d}qџxCESU~ *>#ƾo {1Z\A} Ac*IC썖Ѹwp׹[ϣGkXc\?]5?u WW=2m4d?7 p.z6n":Hncu+x7?[c'ڷӿ5tUzQeQ6Re]nlY*'nm2u^f8uT`γgۛx<,Sgv6NgKVggffqRٽWvbd8q]rܧxS:1_rAUm56j zq^FScu:O.e2g)&&[.j]QkBZ@T8-3Vs bLOEcr^) @sgq!-6*ms]}1ЅJⷀB&6Ε0'ioT٠Jo I C^1nH P]7,MX^M./M6ɱ$vbLgj0o C y #HZ0T׬23FBĊs[P._Cq C>ՋR֗)0W* R4 +l q]U0y`rbsN&:r&"13u4oZq5/24" 49@Fz5 -4'U^ ]t :Q,U]%MҦ$e6y7VD&?rd5rr:=zqt?=:=Q/7G'jÓ;wLSڡ&KN("h G%JVv6si r/_q&NԷؖjР13Υ qFM s8%),"Lq{gmpĉ/9"PmRgaځ!uQ. *譕LlQt#W@ dN++kV2][kNe6PnY֯')r2R]DHUR|Nכ8A݋M]7]ZY3tiҗE4P k 9tz~Zo>(>>OW;O7mo߾}5&wv=s]yϩa!%/yҔm]|?lsArI-[[o~/J:½E7euW| b693J^:i44]ЎmCc\Wήglm>kIVl$5ٽ5>@ZBi-٘kto q hͫaԵҟosz942%y sby&Ԍ(/_}-ReEvm`&"'{}•}bs<[zy8WAí1N 460^`NUKxE" aEAiR4l lc]JG  6(Ji {/sf >}K攙sfgRyxڑݙ"fӭ>چѯ{:nV*hQi=t!E{|٪-޶ީ"wl(tfmﳖɻi#ݶi[]~;va:C#6K-͉4ϱZnlZ!Yc8Վzv Zf؛u}R DSCѻy v6J#6KRtDX0E.b$<αv%x,S_WT]1]w7Ew0,'[Ϥilry'5z47'ou$ltR.ldX?zdvb`6 Gsv7Ö5h YyΦG|2TvuC=IQ2$ztLgާȲ:rGg*Ҕ7#gKМ6sL.c:]˰ NifERyK3oꡀ ɽ ѕ_ 1@N黚|Z9ͨZgoeF6&2ߎ:U.bh 'E3=,y&?'>;6^>eK9<u7h93dcJ D9щ֞V9KDsP6QLg)m<'[<dH: H8$&*3NI >UnK5Ga1֠>5Z;d9|w3#狀2bk.}zLlV:10IZ:EbjZY1r[9]ʏ*#A:4 ֭P}sŢ;2k72-><͍={W +=!V$Ilu߽e뿠u ѵWUf8x̗괞kȝs(`ذ= N\NNyo`jfkEͷ+zf}o 7_va7^9]3cdN \>]_ܱ<{Na|LUW/}\&ys. OJ'{ۧe/$N%99%NϹj2S .%8),Hx\$ōWKHI)%)#eR)'2\*HEBJrABeZHU jHMdm: fdP॑"*Ma Sfj֦2ikA_xC4JIw!wFGzIo#}MUtfVAo4X ]n։NהcP6xl 2B򀌒<$cd2A&$,#L2Mc2Cf"NY2e̕y@@g9y^^HY*%yY+򪬐uY)dEdl7eldlM+).-{d#XaDQrBN)9-g|*|)_|+(?*)9.DQE(Q%Q q ʠ,.E9ePWJTUGe\*kp-:j&C-F.z܀7f4-h&M -qZ5ڠ-nG;GtD'tw FO܃^>{q|HI  cRtd Fa0`(a8F~xa bc&b&a8Gpp'ppgp3|/%;|#~7?'9 AX/dQE,΋Y%Yy ˰,/Xy/gVxYW 㼆ײk:bm& y!of#l[ٔ؜-ؒ[ vc{v`Gvbg;y+;{n=þDُ) ?0iLg39Y 1lpsrsH>Qp,q<'p"'q2#|S8INc|OpgI\S|Y>rs _R.K| _ ׹ksFn[-mη{|prC~ďy (8O$O4-tv.K LĀ&C U kE{{%{ޞ}1̝se2KQ*eHY,Q*˔ eJYQ*~"$*B%Pb3l-%b;l`숝3v c쉽7?uG hqqEb#0-h(8cІ800p48hDfB 9c2a\xA/bDq Ni8gLqy8B\q .eWJ\q u7F܄q nmwN܅q}A<cxOI< sx/ExU[x]>GS|W[|~OW__,<,",,2, *:FC 2$+b%X܄r3n-%܆r;nqv܉;sݸ;܋{s8sc=l f#ȃćc|OI>ŧ s|/E|U[|]?GS~W[~OW__,<."..2. *:W7R &ԤZJ/gL,hvnlzW^|͞m%-c[fl(٬&:m#Z&+g;IL hDVpМ|92QFk Ch9hѾG1rڔ0FZ!ڲruʊYb;I{[x9PўY0 7"vi憠vߤzA(yJ&I'OuV(hj{^uU3yM Ւ膯蹂WP5l_<%f 0-;Q/l5D W syWNf^SNͧ"Y]bl7fTW*1{4C-5fVNhiq Xn_@j#2DcRtLc2$&b28& I:uEC\#uM]0J$^S_"T:vQ[r+šKƱr:']+VNJ t‘W4LwU3$nwj&!.kjdIֵWhG)Jdt;cntCƜC-#SD(GA:E93שZ2Uω[SRUV׶w+2Ҕ֥jҍ1khw|p}!-6J(LI&jXW2ԪaǜdsBHL4*(B`s`'jdRLid`󛊑qElMlMKf37VW7"lbѣXZe,ȭQ%V*SWn2Y=S1:6b2&&fDl \- ȊjY!TqBrnv;džL#"Ʉ;( ee|b~9MA}K_Kclj MrkOi5%&ЏWy7J Y]ѝTojxN_)[Cҵ)_HOV?_ܩ{b^Jf|$2KdȬY!Bf8888884848484848   >cF)fbFUdВAK2gȜ!s92Xo98rp#G8 p(QupAHݍJR (kNxm 3*V]C:ʓYuڜu3 e}1l؁;fw7t\G|2*Ox0}0)/ʓbu6߭mf ڋeN"::yWUy5xY^ӈμhN/$2 ʅ&$=LiD T&ɪ8NegZ59tBx]ʩ9&}]O6 r:#w:n^z?u vk]h0\޳!;u "6nL54Iy^_ kz\ dI@a碴GuNMæ''à Qn&mWf'd Niz͛JLKbYh>6ӏzZ]n#i|\OIy|ۢycL&ɴu9 @nNϫ 4Pe@Jc(V NNHYh QXӒıN_s Q n+\JbK@XG2xan^a'Neb9 e@sq>+ϔ@,8~EIs݊rxFq |)8Vxz 9kv_<swŰj1>_.y\!oS޵{yReTZrǵ]ĵ{toknbua?w\صa׿JR c}$xTߌY{ߢ7;_$qT3!sxo{mˢW,!?C: NZ*3>k@ !p XV"E h-/e}9b2<8%z3hɠ祖 eJ3"||H-g-Pc/%8r|$r[`EAq J V𯀂Jq#k,3nV8bo1υ/{qm[A3O<~#,|voXw7\"~%{0w{~(SЬJWMv|L\N}{/7`(a"I%*=foVN,H_}{`J}( RS*pJ Nd RS*pJN)8<c*T RS*pJN)8$g ҁS:p ;LGyҁS:pJN)8;1tҁS:pJN)8Np D 4Pe@988888888888$8$8$8$8$8p>St̿F*zp0n.ևnM|ǩ2SQ=y^5WEl*e*acS%0v^ΩG>5j>/G3C$Ҧ2"!L(LUTV!iTHN/+'q;gUbt=f~T5/L*iؤaMA21Q%*iTɑi(oh%ݝ򸝜UXuw@0.*aH%;沁w^;7c;G1nV[šdY n[]n7ϜeϦ[[4Z -^-wm-^-w7cçp)\> ;X\z8XY6/ۼ8XY/[Ǘ8lڨE-ܲQjngϺ_ǵmVi's~>]+\+]\]6umܵkw\ص;mGJ{HP#PyEeŎ3ʧTPy_գRgۼLDz{<~ٵOv~  q~]{OnwލJwNR_ߢoAȣ|Oz-~p7#30n-6w\2hk `RYI(Z6z{e$VaRqù5C?iJI> qj0tɈJ"K\W6iKq:U˿)e!]P~Q7)?#sjT,P.482g4BUaW)u Gs^.rSBaK-çl: /!*Fc*QyZ*˱ce1i( |)o}] zoڻ@|i4W$䖘DN?[~$רȋ~•b8MHWl9tN{N(NIuUz7=e{^Ng)=d"kJ:jb}zPZ`5g4MRU'Zh._|1SdUH\cIOkL3e׮v]G21Fp1cfz7] L9tށ'IrQ@w ?|u\+)!a r_6SLdgJ2“Y3'JL T=v2,YX"" L 懖1>O٭YO-x{u4}]P'zl^U.o;׭O}mzLB,Jv]F"d4%C[HKۊ#sx0׊ [j<>Ws-b."x[:+#t.kOuЌWw7[=$'InBq ॥1^g#+6bɏty(N J(ep!507z.Ԓ5 $e׷tE?f6WZt eHI끑\II?XS`jɘ.;`*ijvus{Șx ifv lR Y >  ]2B0 endstream endobj 18 0 obj 22321 endobj xref 0 19 0000000000 65535 f 0000000016 00000 n 0000000069 00000 n 0000000133 00000 n 0000000473 00000 n 0000000582 00000 n 0000000746 00000 n 0000000825 00000 n 0000000907 00000 n 0000002473 00000 n 0000003694 00000 n 0000003917 00000 n 0000005139 00000 n 0000005366 00000 n 0000068109 00000 n 0000068132 00000 n 0000072070 00000 n 0000072092 00000 n 0000094506 00000 n trailer << /Size 19 /Info 5 0 R /Root 1 0 R >> startxref 94529 %%EOF libvips-8.15.1/test/test-suite/images/MARBLES.BMP000066400000000000000000202105741454007373500212600ustar00rootroot00000000000000BM|A6( . . gnnnǼjwe.~̻̽̽ɻɽɼǵĵǵ±´}wo|eps]hoPckAQYI:AH:AH2=I=1>.84B/=,=4=.=,6.=.=,=4=.=,9.=.=,9.=.9764B.9,6.=.9"946.6,6.=.6"946.6,246.9"646.6,642.6".,.".".42424.72424.724642767676A6&E6~_vTE=&.*4, ""         " .".24&.*6=23>&6B$/=6=/>,9.=.=,9.=.="946.=,9,9.9"946,=,646.9,646.6"6,9.6"649.6,646.6"6,6,6".,6,6"6,6.6"6,.". *,..2,.4..2,242424.427242=6&E6¿¾yhTV64224*, "       "    "," &..&7*2=26=.AE2AI2JQBTQBPEBPQIJIITTQ]YQ_\Vhc\opfwp_}pk}pfoc\sh_oh\ohkym}pko\\h_Tm\VTEIP\Khc\eYT_cYhf\mffmf\TEI242672..4&,"" "" "=2&..&.&,     " , 24*64.2A.->$7A!4>1>$7=1>,=.B.= "9.=.9 "9.=.9 "9.=49"9,9 ,9"9,6.9 "64949 "6,9,9 "9,9 ,9"6 .6,6 ". .9 "2 .,. ,2 ".,6"2 "."6 ,. ".,....*,*.*,.42.24.724272=6A9¼¾¿}\k<==<4*" "        ""..24*67*2.22.*24&2.*<=.<=66=2AA9P\Ke_Tmc\of\_QT__Vm\V]QQ]\Q__V]QQ]YK]QKP79AE.AAB<=9<=24B4B*=3>->"= 49,= "9.= .9 "949,9"6,9,9 "9 .9,9"6,6,9 "6 .6,9 "9,9,9 "6 "6 ,6 6 "9 ,6 . .6"2."2 ".. ". ".2 ".". *,*,. "*.*"*"*4...,242727.=2=6}{»½½¾pTEI<=94  ,            "   " ,","&4,46=2AA9EA9EEB<79<=2AAB<4267267.2426726726=2A462.*&,*&4,".,."""               " ""42=*6Q9PhQwsxsmf\_YY____fY____kkmooovxvvxxvvxxxx{{{{xv{{{‡…‡{{{xvoossv‘“őÒÒőÒÐŒőÑœœœǖǗǘǘŖő‘xvvomkffff\}Y}YwYwYwVhVmTmQ_I]Q]wTTpY_s_esf_skhykhmoxsºŽ׿ԽԽϻϻ̶ɴ±«}ssPf6T&I2I=47 7=A7.. .44.,..72IA77=. 4 4 47=7AI&A&I&E7A&E2E&IA&E2I6Q2I2I6Q2I2Q2IA&I6I/=#=-=,= "9.=,="9.=,= "9.=,= "949,= "6 .9,9 "9,6,=6,9,9 "6 .9 ,62 .6 ,62 "6 "2. "*"22 ". "2...". .".". "*"* "* *,*..,.4.724.=2=9B¹¼ǿſ¾¾wT\TI924*" ,     "  ""  .  &4&..,.&,4&"4&..4&.&.&.,"&,,." " "  "    "    " " ,"2=6E2A_I]yYxomf____\_Y_o\\___kkoovovssxxxvx{xvxx{{{xv{{{{‡Š‰‰‰‡‰……………‡{{x{vo{sos{xÒœœƖŖƖƖƖƖŖƖƖǗǗǖœŒ‘‹svvsmkf_f}\_w\s\s\oVoToVmT_QeIeQ]Q]QTwTTwVes_ewkep_ewfemhso{ÿ¼ǿֿԾѽϺ̶̹Ǵ¯«msEY2T6TA7===&A7,..,= 4 .7 7EJ\2IA&I&E2E7 74=AE&I&I&I2T&I=IA&E2I=A&I2I2E2I6Q6IAY2I7=6I2E2IET-=6>1A,:.A-A,:-=.A ,=.= ,= ,=.=,= .9,=.="9.=,="= "9,= "9 .9 "9"9 .6 "9 "6,9 .9 6 .6 "22,6"6."2 .2"2 ".2 "*".. ".". "* ". "* "& "* ". *.*.24.=2=2 ¿¿w_kPA=.. "    " " "" " "   "    "              .44*6E2E\Be|_xxom__k\__f___oof__fkosvvsvvvsxxvxvvxx{{{…ËŋÐŐŐƐŐÐŐőŐŋŊ‡Ňɇ‰‡É…‰ÇÉʼnŠŠ{xxvomokmoxx‹ƓǓǖɚǚǘǘǗǗǖŒőőÊxxommkf__\\YYYwVwTwToQeK_Q_Q]K]KPIJwIPwKTwQTpYes_hsk_skhwfhwmh|ooos¿½ǾٽԾԽѽҹϹ̶ɴijmsJ__hJ_ATET7.4,",=7 4===2IAYAI&I<\EQ7 74EA&7&E&IA2I2IA&Q&IA2I&EI&Q&EA2E2I&E6Q2E=&I&E&A2T1C.A"=.B.B,B.B.B ,=.B .B"B ,= .B"B 4=.B"B 4B.B"9 .9 ,9"9 "9 ,="9,9 "66 .6 "6222."2"2."22."2 ..".&& "&&,& ,*,&4*7*¿̾¿¿seAQAE2."                ",.&7*6A2AT=TsT}v{ommkm___fkf__km_ffkmovxvoox{xxxxvvx{{‰‡‹ÊŊŋŊŐŋŐŐŐŐǑǑŐŐǐǒʒǓǒɓǑƐŊŋŠÉ……LJ‰‡ÉÉÉɇŋ‰‰{vosssmmssvx‹{oovvsosm_k_\\\VYVQTQwKwVwKoBoBhI_B_BTy=Es=JpBJpKThY_s__sf_pkewkhskewkhskmohvo{¿¼ǽʿ̿ؿԿԽӼϻϺ̵ǵĴ®swThATA=7 . 4",=7= 7AAT2E476YAT2I7 4 4 4,7=&A6Q2I&A2Q2Q&I&I2Q&A&Q2Q&I6T6T2I2I2I2EAY2I&E&I=&E2IJf]f]cETlBkAnAmAo=m =mAoAm =mAo =m7m =o =o.s 7o.m.f.k.f.\ 7f=_ 7fAkAk=_EkE_=_AkA_E\A_A\A_I_E_=\=\=Y7T=V=T4T=K7Q 4B 7B.B,B 49,9"9 .9 .9"2 4642~2A=2=92E=2==2==6A=6QImAmAo =mAm Ao=mAo =o =o =o =s 7o =o 7s.m.m,k,_ .f 7_=kAkAfA_AkAkA_AkEfE\E_I_AkTkAfE\E_E\ 7V=V=V7T7Q7Q=I=K 4B ,=.B .B"9 .9 ,6.649 46/7='7=2=9&=B&7=2==2A=&==2E=6II6EQ/2Q9PcKmpfsss}ys}|v}wv}|v}|v}wvx|x}|x|x}x}|x|x{{x{|xmmkkmsosvsxxxx{{vxv{œɜˡ̤ФѫҬӫӫҬ֫Ԯִװس۴۵۹۽ظڵ۹ܼ޽޺޺޿߿߽߼ߺݽ߽߽߽޿ݿݿ޽ۺܸ۸ڸٴڴس׳׵׵ӰҮҩҭҭҭШХ̣ˣˣǠvooVKQKQY\msxomosxxsx{vxsssmkkk__fY\\oVmT_yKTpKPcKAYB2Q=6QIlBoAoAoAo =o =oAoAo7s =oAo7m =o 7s.m 7o .m"f.f4f7\AmAf=kAkEkAkAkAfA_ImA_E\E_EfAk&I_A_=\=Y=Y7Q=V7T4Q=Q4B 4B.B.B"= ,= ,9"6 49 46-<='8=&==2==&7=&7=&7=&7=&=B&A=&=B2E=2IB2QKBT9T\Tmskssoswswys}yv}wvw|swyvwys}|v}yx}wvx}|x}|xxxxxxx{{{{{omffmsvvvsxvxv{{x{{x{{‰ŐǜˠΤШѬѩҩѩԩ֮԰ׯٰ۴۵۸ܺٸ۵ݺݽ߼߽߿߿ݺ߽߽߿߿߿߽߼ܽݼۺ۸۸ٵ״װ׳״ӮҬԬӬҫҫШФ̢ͣʠǚxoomYTTVYYfovvkmms{{vxxssssskkofkmkff_oTeV]wKJfIEfIAT=6I=6Q=6II2E=6QKmAoAm =mIoAo =oAoAs7sAo =s7sAs =x7s 7o 4m.k,k,k .f=_Ak=kAkEkAk&EfEfA_AkEfAkIkEfA_Im&Ef=\A_A\7VEY=T4Q=Q 4Q 4B 7B.B ,= 4= 4=.9 49 46}{.=C(8=&==&=94=&==&==&=6&==&=9==&==&==&7=2E=2AB&EB2I=2II2IQ6TQfj_ohkswsswsosvsyswwvoyvsyswwvowvwys}yvwys}vwv}wvvx}|xxx}|xxx|x{{x{{sokfkovsvsxxx{x{x‹ÑƓʚ̢ХѨѩШԩԮ֮ׯڳܴ۵۶۹ٴܸۺݹ߿߿߽߿߿޿߿߿߽߿߽޽޽ۺۺ۹۹۹ڹ׵ش׳ԯԮԮ԰ӭҬѬХ̣̥ˢŜxvk_\TYY_fssokfmmsxxxxssssommkkmkkmkffoVeQ]wIJ_9E_=6Q=2E=6Q=6I=&EB6QI6QB6A=2=9&=9&4=&==&79&7=&==&=976&==&7=&462==&79&4=&==&==&7B2=92AB2=92E=6EB2==6II6II6AK6TQ6QQ6IK6TK6QQ6IQ6TQ6QQRQJ^VCc_Ool]{{es®ůdzʵʶ϶ϹѺҼԽ־׿׾׽ԼԺҺӻѻѹ϶϶̵ǵǴűij¯Į®¨we\JT{=x .o,s,v .x7x ,xo"smm.s ,vmfmo"s,s"s,s"vs"ssosssoooomo"vomos"svoo"s"ss"s"v,v .s,xv,v"ss"somm"om ,ommomoommmkmmssokkmommkmomo.v,vs"okmsvmffff,o.s 4x 7{4A&IE__p}wwv__\AIKAA=&72"&.&, " "        "      , " ,"."".,.&4*4.726=96Q=6H=2E=6QI6IB6A=6QK6II6I=TO>KN=JQGXXAYRA\YEc\Oqo]hw®¯ǯǯǴɴ̶̶ѻӼӼԽԾֿؿؿؿֿԿԽԽӼҼѺѶϹ϶̶ʶʴɴdzų®®}wshEQ4x 4s.s .x4x.{ooo"m"m"mmmkmfsv"ssm"mokmss"sooomo"sooo"s"svom"oss"s"v,s,s.xvv"sv,sommommkfmmmmmmmmom"o"{skkmmmmkkmoomm"m.m"os"vo_fmo.o.s4v=A&E6TJcew}e_kT\VEQI2=6&42.* ,,  "       "  "  ", ,"""&".""&4&4*,*&A2=1EE2C=(EA1E=2A=&=B6A=2IB&=B6IK2I=2==6AI6EK6A=6QK6IK6AI6IQPGARNAQQ:QUE\TA\YAcfPss]hs®¬Į®ůDZDZɴʴ̵϶ϺѺҼԼԼԻԾ׽ԿؿؿֿԾҾԽӽѽѼѹϺ̶̶̶ʴʴɴdzǮ®of6E{&=x 4s 7s67 .xmmm"sssmmkkmmoosoooo"soo"vss"s"oossosss"sso"m"so.v 4{,x ,ovsv"oosommommfkmmmommo"vx,x ,{smffmfffkfmmmmk"o4s,v"v"vsmo"oo .s.v 4x=2E6JA9PC6AO=HC=OE8HJAQQATQH=HABAI=BAIAK=IEQ=KAKAKAKAKAV&AV&AQ6TV6QV2EV2T_6\m2Ys6h{AsJ_mw}ssso|w|w|}|}|}|}|}}|}wy}}}}}}y}}}}}}y}}}y}}}w|}}wy}}|}}}|}}|}}wy}}|wyw|}|w|w|w|wy}}|wyw|wywy}|w|wywywwmfh_AI{4m .m"kffffffkmmfm,o"s.s .s 4x4x.o"s,s 4x x ,o,oo"ssommmmmmmmmmmkfkffffmffmfffkffkmmkfmkk_f_ffmmmmkom"kom.m,m.v={2E6QEYTfo|ymfkTYYTYTAIK679&=64."&.&, ",, "       " "  ,""..&4.4*&4*4.&=2&=62796A=*/4)29&28/74'B,#46&7.4&,".&.".""",4&,"&7."424.64&6=.6E2A\KT\_PTV]fYhhmm_mmff]YYT\_PTVEAK<==AY=P__]cYhhkmcf_Y_mckm\\_EKeA9P.*646.2"  " ,42649<7=<==<==<==[=\ =_ 7_Ak A_ AkQmQoQoQsQsQx2Yx&YxTx2Yx&YQx\T{QxTxTT{T{TQ{\YY&Y&YT&\&YT&YYTx&Y\Q&\YT\Y\&\&\T_YT{QQxAvT{ Ix AsIxI{IxIxQv IxIxIv Ex IxI{Ax IsEx ExT{Qx Ix Ix Ex Ax IxIvAvIsIsAmIo=f 7f7_ =\.V 4V,K"9"6". * "* ,& &"* *"&.2"6 ,= ,B 4B=K7Q7V=Y=Y=YA_Af=kAk=m7o=o7o 4s 7x 7.=777747=.=A=AEAA74= =7==7BA>BJEIAA E QITT2_fAkEf=kImEmIoQsQvIxTsYxQx&\xYTx\TT{TY{Tx&YYT\YTYYT\YTYYT\\Y&YYTYYYYY\\\T&\YT\&\TYTT{T{Es AsIx ExAv IsEv As Is EsAv Ix Ix AsT{Q{ IxT{Q{ I{TxQx ExIx IvEsQoEoAmAoAk =f =_ 7Y.T4T,I92"* *,* ".&.22"9 .= ,=4B7K4T=Q7V7YE\=_=_AmAm=m7m=o 7o 7s=v 7 774 774777A=7A == EA7==7E=7974R D=B=7AAAII ITY I\\\__f2f6p2h2sAsEy]moosss}wswshe]TyTT|PyTwPwJpJpPyJhJsEh<\{6Yx&\mI_&YfQ_}{ "                     "4*27=Uk3]k6Ym6\o6cvBABAHABEBAB=B&EB&EI=B&EK&AIAB&EKAKAK&EKEKAK&EK=K=IEI=K=I=K=I=KAK=I=I=I7B4B=B4B4==B4=.===76,94=46,64646,64279&7=BA"=>)A=:B======4====B==AB=B==ABAB=B=BAB4=AB=B4B=B7B4=4B7B.==B7B4=4=49494=4=494=764276464672=6762=96=BB7=79====79==7=76AB7=4=A=7=4====979====4===4=46==7979=676467676,6=67646=6&79&4=6==PA2N=2Q=6T=2I=6Y=6Q=2Q=6Y=6YI6Y=MC6Q=:Q=6TA2Q=6Y=6Y=6Y=T-B -B"B"="I"IH"H"I*MH"J,T4V7_=_ =f =_4_4Y4\,Y4Y4_4\A_ 7f4_=Y 7\.T,I"B662*."6.94B4V,T 7V 4\.YA_Ak7mEoEs AsIv Q{T{YYY&_&c\\\Y QA7{7{7==4x,o.m7o7v=x7o,k4fAoQ\\ Y \\ \ \TT \ YYYYYYTQTQEQIETQAIEAEA====A=7=AAI={7sAv=xA{TYQ\YTx2\Av 7k 7f.\.\=_7f,_4_7f4f7f._4\4f7m=mEo=o7mEk=_.Y4T.T4K =T4I.979==2E66E62A6&==6E62A62A62E96A96A96Q=6A92A66I96E92E96I92I=6E62E96I92E96A96I92E96I92I92E92I96I=&E=6I=2E=2E96Q=6Q=2I9NAHQ8>K!4K.I,IB"B,BB"I"III"IT.T7Y=_Ak=k =k=_7_.\4\._4\7f 7f7f 7f 4Y4\4V,I962..,94Q 4T=_ =f =f=\4Y=Y7_=fEoAvEsY{ Y Q\\&_&f&f____fTAA==A=.x.o,k7sA{=v7v4m=mI{\\ Y \ \ \ _ _ \ \ \Y\\TcYTTTTTYITQEIIAE=7AA=AAAIAAIAAITT\YT&\&TTxTAs7k 7f =k=f =k =k=m=mAm7o=m4f._7f7f7f=f=f=_=Y4V4T4V=Q=Q =T.I4979=6A26E22A2&A66E62A6&A26E62A6&A26E62E2&A66E62E6&A66E62E9&A66E62E92E62I96I92E6&Q=2I92Q66Q92Q=6Y=<_=AfBAfIJsKJyQJ|QPTPVJTT\]\T\]f_f]fe__k]___]\]Y_\efhfmksmoo}owosvws}ssv}vsxovmhxeseoho_oexhvmshvem]f_mhoemhoek]mekhmhkhke___]fT\TTPTPyTApTEpQA_KC9#)3,""" " "            &&.**..222"992"999"=99"9626.&.9296299926296999999="BBB"III"IIB"I"II"I"IB"I"II"IIBBB=992"62 "6.=.9,94B 4\7vAAI\\Yc_chfhhhpwswsw|swswssspppphsh_cf___YYYQQQAEQI_\\fhfcYTYTQYYTYYT__\_c\__Ycc\fc__YTY\T\YTTQIYQITTQYTTYYTYTQTTQYTQTQQQQIQIEIE=IA=EEAQQQY _fEysmmo¾¾¾º¿¿¿s|mwxhsx_ho]fmeho]_mPQ_ATY2Q_&A_&TfIfEk&Tf&To&To2Ys&Yv&TsTsTvQxTvQsImIoEo AmIs IsEsTxExA{I{QIT{ QE{ Q IA{ I I{A{ I E{A{A{Ax=xAx=x=xAxAx=x ExA{=xAxA{=xAxA{A{ I EAI IEQIAIEA{IEA T IITEIT QQ T Y Q T Q I T I{AxAv=m7fEkAf7f Af 7Y=Y =Y7Y4T =VA\Q_2TfEfsmy{|]csJ\m6Qf&A\&Q\&E\A\&Q\2I\&A\6Q\6E\2E_26E2.A62B62E62E6&=26E62A6&A66E62E6A66E62I62E62E92I=2E92E92I92Q96\96*B47J83E4.B36E61E22=.6E22E2&A26E22E6&A22E62I6A26Q62I96E66T66Q=6Y=Af=EwKJ|TJQPVJYPYTTPY]Y__ekemeseohseohsoss{sxmsosmv]kPf]k_seomsmxsxsv}}v}swo}ss}v}{}vsxsshmoo{woswwsxmsmsooovoveshohoeohoek_f_k_kTf]fT_T_]\T\J\JYPVJTJTJVEyTJ|QEhK2\K<_K6TB6Q=8!>6-C2.O:6G8*C46E6&E2A22E22E62E66E62E6A66Q62I92E62Q92I=2E66Y9f IoAmQsQvQoIsIo AmIoIv&Tx6Y{A_{AYE_PcTc]s_s_wmyewehswswsmeP|PPyJyTPP|]]T_eT]PJ|Ay2p&f2c&f&c2f&_IQ&\_2c2_QT2c6pAyAyEC:C>7HD?INJ?<966234,&.*64*4.,*&...*.&44&..4"&.,.,*,*,*24.242242<7.A=9<==AAIEEIAAIPQKEAIA.9&.9 &&*.222222.."29"9,B,II4K.K"Q4Q.T,Q.T.T,T.T.V,T.T"TI,I"KI"I"II"I"IB"I==92Q,Q"TQ.T"QT.T,T"V,Y,V"V.Y.\,\.\.\,\._,\"Y"Y"T"T,Q"T"T,Q,TT,T"V.T,TTV,Q"T"T,T"T"T,Q"QQ"Q"TTT"VV,Y"YV,V!TTT!TY-l4{7EE=QTQ\_Y__\cc_fc_fc_c_\c\Q\\YYTITQEIIAQTTY_\c\YYYTTYT\\\_\Tc\TTQIYQETQIQEEIIATTITQETQETQQTTQQIEIIITIIQIEIE=AA=IA=EAAIEEIIQ _&sT|sw½½¿}ymsv_ffP_f]c_]__]_\T__]__TY__c_]ckTY_]__PT_22G26E6&A26Q66E6&E=2Q96I62E66Y6,R4Y7_ AmQsQxQv&TxQvAoAmEoAo&Tx6Yxm Bl Al=m An AmEm As IsEs IsEvAvIv EvAv AsEsEmEv Ev Es EsEs=sAoAoEmEmAm=o As Ao=k Qs Em=k Am =m AkIm Af=_ =f 7\4Y =_ 7\=Y=\=\ 7V=V&EYl AmAk=k AmAm=m AmAm=k Am Ak=mEmAm=mEkAm=s Am Am=mEm Eo=m Am Em=m ImEoEmIo Ak=f Af =f4_A_7\.\4_7_=Y =_ A\ 7_=YAV=VfHlAk =f Am Am Ak Am Em=kIm Em=fAmAm=k Im =m=k AkAk =kEf=k7f=fAfA_ =f =f=f AkA_=\ =Y =Y=V =V=T7Q&AQ6ETAITPTVJTVJT\PYYTT\TY_]YY]Y\T\__c_]\_T___c_]__]__ecf_cf]_kecf_ckecfeckhfke_khhmmfmhcmmhmmhsmhompoopompoosvosvososssswvspvwwswsxws{}wx}y{wsv}|x}yx}wx}|{}y{}w}||y||||y||||||||||||y|{}w{|}yws{wpvmcmJQYY=Y =Y=VE_ =\=_ E_ A_A_=f AfA_Ef =f=_ Af Af=Y=fA\=_ E_A_A\ =YAY=\EY =V4T AT7T=B=K&AK6AQK29KU=KUCDW>:QIB29B8AO4=P_ 7\7U=_EmIsEsIvY\cc&f&cc_c \IIEATIAAA7AAAIEAIII QQAEA{Ax I{T T_ Y T Y TQTQETQEIA=A==AEAAAAIT T\_\c_c\Y{Tx IxEv=mEmAf=_EfAf4Y=Y7T4T=Q=Q7QAQ ET II TQcI&fK6wQEVJVT_]m_vm{ow}ww}˜˜Ú—ws}ws}w}}wws}smvwsoxmvs}ssww{}{xxvsv}owosmmseshs_oes_x_s]m_s_s]s_v_o]s_k]kTf]fTkTm]mPfP_PfJfP_TfJfJ_JfJfJmPf6yf&c\&__c_Y_Y_\kYkcoco_s2fx2p&h6s6w2pM29Q2>K'7K'4B27B27I48A6>?27B'7K2EK2=Q2=K'4B2=>&=I24=2=I2=I27K2=K6AK27K27=24=6==27B27=2=K2=K27I6AQ6=I2=IwAuW}G| HyEtBpBoAvI{ Qx Tx\_&\&__Y\\ITE7AEAAA7A==AEAIIEIQIIE={Ax E{AvY{ QI T TQQIAIEAIA=A=4x===A=7A{II\YY{\\\\Y{IsTx EsEoEkAm=f=f=_4Y=Y=V7QIQIVEV IQTQYI&pQA|TEYJ\P_Tmevmsw}w}os–œ——}—sxmvmvژwwwsoxsmxhxoxs{w}wss}}wwww}}wms}}ww{oxho_s]sTo_s]oTmTo]o]m]m_m_k]m]mTf]mTkJmJfPkJfPfJfAfA|\&f\\V_Y\\Q\Y_YfYmco_v_xc{&ff&hhh2s&p&p2w<|<|EEEEPT]_]T_]_e_]_]________eee_heeee__hms}whhsw}}wossoooosomosoomhe_]]PJJEAJEAAAAAA*EE&>EEEI&IAQIEI&I&EII&I&I&T&E&IIE&I&Q&&T*6Y.6Y22T.6Y.6\.6Y26Y22T*2T*2T.2T&&I6Y*<\.2Y2E_.<\*<\2Ef9h|IoY}\fkssmosossmfwfs\kvvvvv{{{xx{vvv{svsossxxxxxs{xsosv{{{smf]fTE_9A_2g|||}||}||||||||||||}y|}|}|}}|}|yscxJQfKTCUYAQXMW:HWAOWCT[KWe^`nQcl\ooo{½ǿ¿ǽýºowhs{]fvP_mP_sP\oP_mTcoTcsJ_mTcoPcoP_s]fo]csP_sTfsP\mJTmJ_mP_oJ_mPfs_ĻɽɽŶ¶¶}}msvP\fEQT&76,.242679<7=A7BJ=BP=IP=QTEQTAV_IT_IY_IVeI\hQYmIfmTkmQkhEfhIfhIf_A_hQk}\sYs\xcv\xYsoTmoYfcxcxh{ssswwfshfphhppccffhfchhcfhfpppsww||y||wy|y||sy||yyy|yyyppsppfff_\\YTYYT}Tx}Tx}T_hcshhsf_fp{chh_f{_v_vcvfxcxh{cx_vcx_v\s\s_o\m_o\m}YkT_}YfwQ\oQ\mIYeAT_ATJ7KJ7KPAITAQP=BP==E=9AA=EE9AA9AA9EA9EE=AA9EE9EE9EA9EE9EE9AA=EI9EE9AA=EI9EE=EA9EI9EE9AA=EI9EE=EA9EI9EE9AA9EI9EE9EA9ET9EE9AA=EI9EE9AA=AQ=EE=AA=AQ=EI=MV>JXBVYIX^J\_Pfk_yvſ¿Ǿޏ|ep{PcsPfvPcmJYmPcsP_oJYmTfoT_oT\oTcsTcsPcmT\oTcsT\oP_mP_mJ\mP_kJ\mP\kPcs]{¹ǼɿʹĴ±wosvTYkJQT&764.2=6679<7=E7BJ=IP=QTEQTEQ]EQ_QVeIVhEVhEYmQ\hI\sT_mTkhIkhTfeIk_I_hTm}_s\s\scv\v}\xoTm}\kfxf{fpphwwhshfhhhshffhfhfhhhchhpsypy|y|y||y||y|y|yy|||y|yywppsphhff_Y\\T_T}IxwQx}Yx_hhhshhppfxchhhhfc{f_fc{_vc{_v\s_s_s\oco\s\mco_m}Yk\_}TfoI\oQYmIYeAT_ETP7KJ7IP=QTAKP7BP=BE=9<=9AA=EE9<=9EA9EA9AA9EE9EA9EA6EI9EE9AA=EI9AE9AA=EI9EE=AA9EI9EE9EE9EI9EI9AA9EI9EE9EA6EI9EE=AA9EI9EA9AA=EE9AI=(I>*fA?TQ_ol˜œ˜Ø×Øŗŗʘʟˠˠ΢΢΢ΣТѥѥΤѣѣХѤɟ˟ʘѤөԩҥѤңңѣңҤҤӥӨҥ֥ש֩֨׬׭ٮدحۮٮٮۯٯجگۯڮۯۯۯݮۯܭۮڮ٭٭ۭ٬׬׫ר׫ר֩רץԣԤ֥Ԥ֤֩ҨӨҥТ΢̡ʜǘƘŚƚŗœŗ––Řǘʟʟˡˡ̣ͥ˥ˣˣʢʣʣǣǡơƠǡơàŠœ——{}{moJ\P\EhT97 /. . 7jwAQV46A74>7)7/24/7& .= 7 7= 7, 44 . 4,,.,, 4,,.. ,",",",",,,,",",",,,".,. 44 4 A A=A =. 74 ,.. ,.& ,& ,.&.,4&4&&7B4B&7B&7B4B7K&7B4B=I7B4B=B&7B4B&7B7I.B=I7I.K4Q7V4Y7k4m.k=o 7o 4s 7s=v4v Ax 7x4x A{ =x4x 7x ={4{ A747=47=7=7777774.74.74,..".,"{,{.{"x.v4v.s7s7o7m =o7m 7k=k 7k4m7m7s7sA{Ax={={4v"f,Y,T,Y4m4o,o.f4f7m=m=m7k =k EmAv Ix QQ T T Q T Q=IAA{A{A{={AxAxAvA{A{7vAxA{7s=s7o7m7m7k4m=m7m4f7k7k4k=mAmEmQo IvAvTsQsAoQoIoAmYoTo2To6coEhv_ywxwØƜɠʣͥШѩҫԫ֭֫Ԩש׫׬حححح٭حخۭۯۯܴݰ޴޴ߴߴߵܵޯ޳ݰܯݳ޴߹߹߹޹ܸװԮͣ˘ΖМҡӣԨӥΠКѠңңҡҤӤҥӨҥФѤΥѤΥШЬЭѮЮѮͭʬʩǤƥŤ¢ssw}whvTskJhf2QT=B =B .Q,Y4k7v =EA AII&I2T6Y76=63>62912>/&4.4&44 .=77 = 74 44,,,, 4,,.,.",",",".",",",",. ,,.., 44 4 = A= A=77 . " ,. , .,,., ,..& ,74&}{7I4B&7B&7B4B7I&7B.==K=I4B7I&7B4B&7B7K.I7Q4V4\7_=m7k7o 7o 7o=x 7s 4x 7s 7v4x 7{ ={4{A =4{ A{={7 A=7A7==7==74A77A74A7474.74.4.,..,.,.{.v.x.v7v7o4s7m7k4k 7k7m4m=s7s7sAx=x4s4m,_,V4_7s4s7o4m.m=m=o7f =k =k Am IsI{T T Q Q TQEIA=xAxAx=xAx=x={AxAv=sAvAv7o7o7m4k=m=k4f=f7m7f7f7f4_7f=fEmQoQsAoQoToQmToTs2Qo6\oEcvThxhy{{}ŚŜẠ̇̄ΤФҩԬԭ֬ԩ֫ש׭׬ح׭׫۬٭ڭګ٭ۯܰݰ޴ܳߴ޴ߵ߶ߴߴݵ٭ܫޯܯݮݯ޴ܵ޹޸ݶ۵֯ҫ͗͜КҠԣԥҨΡ̜͚ПѣӢҢҢңңӤѤУѢХФͥШЩЭЮЮЯͬ˩˩Ǩťţ¢}os}w{sx_sPhfAY\AK 4=.B,V_.v 7=&IEEQ&QI2\<_A\A_PcPf_s]h_p]yhwmwos}ww}howooso|Pc78H97,<2'42'4.4*&7*4*.7 4 7= = = = 7 . 44 . 4. ,. ,,.".",",",",,,.,,., 44 ,4 7 4 = AA A = . 7 ." , , " ,, ,., " . , ,.&,,74B&7B&7B&7B7I4B7I7B4B=B7I4B=B&7I4K7Q7T4V._7k7k=o7o 7oAs=v 7sAx =x 7{ 7{ 7{4{A{=7{ ==7==7==7=A7==7=A=EA7==7==7==7A77A7474.44,..,7{4{.v=v7s7s=m 7m .k=m7k.m=s7s7v7v4m,_4_7k7s=v4s4m7m=m7k Am 7f Ak AmIx T{ Q T T T QA IA{AxAxAv=vAxAv=vAvAv7sAv=s7o7o7f4f7f7f4_7f7f4_7f7_4\=_AfToIoQmQmToQs2Qk6\mAcoJhv]s{s—ŚƜʣ̤ХѩҨԬԬ֩׫׬׫ج׭د׭ج٬٫٬٭ۯܯܯݰݰ߰ݶ޶߸߶߹߸߶߳߰߸޴ܰݳۯ׬ڬݯݰܯݴܵڴׯ۶۶ٴԮШΜПҢҢӣԤѣРѠџПҡҢңҢѣѢҢТТУХХФЩЫЮЬЮЮ̫˥ʥǥŨä¡woso{hv]wm<_\6TV7I4I,Q,_.s4{AA&TIEQ&Q2Q<_<\A_JcPhPh]p]p]yhyh|hsw}}mw]|som_owmwTmososmeeeeh]sJy]]yTsTwPwPsTwTsJhJhAf26H66A9*?6&9-&=/'7.4*7.4*.&44&.7 4.= = 7 A A= = 7. 44 ,..,..,. . ,. .,..,..,44.= 7= = = = A A 7= 7 . 7 ." . , " , ,, ,, , . , ". ,".. ,.&7&&7B4B=B4B4B7I&7B4B7I4I.B=K4T .T7Y7_ .k=m 7m 7o =o 7s 4s Ax 4{4x 7{7 7{777{7=7==7=77==7====AAE=AEE=EA=EA=E==A====4A7474.4.,...74{7v7v7v7s =m 7m7kAm=o7m =o7s.m7k7f7oEs=s7m7s7s7s=m =kAkAk EoAv IQ IQIE IA{=vAxAv=sAvAs=sEsAv7s=o=s7o7m7_4_=_7f4\=f7f4\A_7_=Y =_ A_AkIk&Qk&Tk6Yo<_sAfsTsvhy}|×Řǡˡ̣ШѥҨԫӫ֫׬׬׭׬׭׭خح٭׫׬ۭگۯݮܰ۰ްܴݰ߰޴ܴ޴޴޴ߴ߶ߴ߸޸ߵ޴ްޯݰܰۯۮ٬֫٩ۭۮۯۮۯֳӨذװװШ΢ΜҡҢҤңѠҢѣҢѡПѠҢҢѢѣТУ΢Т΢̣У̥ΥΫЭЬ̬ͮ˩ƥǨƥå£sms}}}hv_|sJhf6TYAV4B,I,Y,k.{=EI2QEQ&T&Q6Q<_A_A_EcPhTh_p]seyhwh|msw]peyPfAssw}wsmosmmmm_m_hhPhAs]yTwPpTwPsJsPsJsJhJsA_<_&19-.3..4"  "  " " " ""    " ."," " " " 4&4.&,.&.*&46=2TYQh_Yyky{sssfmsfmof__T\]QIPQIEA9TYIJQTTYTep_hpmhhkmsmosmmhkmpmhffmhmhc_e_YTQIJTBEQKJ\TJ\YEY\ATYJc_TckEY\EY\EY\J\Y]_\J\YAQYATQP\YAIQJ\QAIQ6A=EQKAQVAEQETITYT]\VTYYPTV]_Ympm]\\TYVwwowpvmh{swowoww|ehD./1*,1!-"34&.4"   " "   ""  " " "&72=.2A2AEB679EA9EA9<=9AA=62=26=66>264*2A2272&.*4*" "  , ,""" 44" .&4PI6e\Qe\K_\Ke\K_YI__QefT]YKETBET9JQBJIKEI9JTBJIIJYIPTKJTIJTKJTKETIP_KTYQJTQT\Q]fToyfmsk__YTYTT_YTYVJTTTYQPYTPTTPTTJQQPQKJTKEA9<=96=92A=&=Q&AT2ET2AQ6AQ&AT&A\2IV2E\2AQ6EQ6EQ6AIG=9KQY™_™mžo›m›kŸs vÞváxßxßsŸxŸs™o™k\s62**.6=9BKQ\s¥¨èŪǫǫǪŬŬìŮìê¬ì¬¬®¬®¯¬¯®¯±¯¯vmkfmosssvv{––‘“’’‘’“’—Ò“ØŘŚŚŘ×ט،Ŝר׺‘“МŗŘŗ’{vvsm}msko_hY_|VEfIEfIAY=AT=A_=A\=AT=AY=AY=AT=AT={:8A=|6==IIKIQQQQB296'.}'ty)-9CABI’Q“Y_žm›kžsŸsÞváxßxßxţ{ǡ{şváxÛsÚo˜kQ..*.29B=IKTk¦¨êūǪŪǬǪǫǮǮŮŮìŮů¯ï°ª¯¯±ð±±®xmsmmovvvx{“––“’’’’Ó“—’“’—˜ŘŘŜŚŗŖŗØ˜ŚŚşŗÚ˜Ř‘Óґ‘őÓŗ–’‘’Ò‘‘{xxvmmskofo\eTTpKEfIA\=T 7VI\Qf&E_2Qk&IkIk2QkIkAkImEkAkImAk=k=_A_=k =k Af=_=_A_ =fI_&Ik2I_WGY!H]G_2Qk2Qm&If2Qk&QmEm2Qo&QkAkImEfAkEmEkAmAkAf 7_ =_ A_ 7_A_ A_A_A_E_A_6Q\6Qf6QfAT_AQ__#&T_6Tm6\v6_x6Yx6\x6Yx2Yv&TvTsQsTs2YsIsTv&QsIo&YoIsEoToQoAoQmAo =kAkAm=fAmAk=_A_=_ =_=\=Y=\A\&E_2=_6If2E_2=_]dQUXT`_Q__Vg\UhdV__QTYT_\Q__V]_QefT_cT__VecVhcYecVmfYmfYhcVmfYhf\hc\mhYmc\hf\hf\mh\hf\mhYmh\mf\opfop_mf\opfop_mh\op\op\mh\op\mh\mh\opfop_mh\opYop_mh\opfos_mp\sp\op\mh\ssfos\ohYowfop\opYop\op\mhYow\osYopYowYosYopYsyYhTeQhQmTmVoVoVmVwYs\s\s\sYmVsVoVs\w\o_hVeV_QeVs\wfmVo\o\mVwYsYoVoVeIe|IeBeIeKoVmThQoQoQoQsTsToQoQsToTsVsVoToQmKh|ImBoIsIwK}QQY_mvx¹½ýޏµ{ssok_\_YYsToTmThVhQmQs\ms{vssvssxx©ªêūìǯǯɬɮɰ̴̴̴̵̴̱ʹ͵ϴѴҸҸҹҽԾ׾׾¤¤éŨŬǬƭʰʳ̵ʴʮ̴͸θ͹͸̼͸ѸѶѸԸҹԺԹӹҺҹӸҴҴͶ̬̭ͮ˯̬˩ƫǬƨ⹟ถߵߴ൘ߴ߸ߺߺ޷ܸٸٽ¥Ťťʳʹ̺μ̿̽̿˽̿ο̿˿ɹƶð­ҿҿѾϽͽͺ̷̺̺̹̽˹ɵɸ˸ʸǸǵǴŵ´±´yxmso_hkehkehk]fmepk_hk_fk_hkehk_fkcpfcsjgosdhf[fl]hm_hk_hm]fo_fk_pm_fk_hk_hm]cm_pm_hm]fmepkehk_fk]hmehk_fk]hm_fmeffepk_hm]cmhpo_hmeffhpo_pm_hkepk_hk_pkepkepkepfepkepm]hmepf_hmepfepkesf_hkepfesk_fkhpkepkeffepkepk_p_esfepf_p_epfesk_p_esfepk_p_esfhyfh_sfov–““––ŗŖÖÓǘǚŘŗŖŚÚŘŜŚƜɡɣɣɚɜˢʣʣɤǥǣˡˢͤΣ̟΢ѣΩ̥ͥǡŗ—Ŗ–‘ʗҢԫڮܳ޹޺߼ߺ߽߼߼޹߿޽޿ݺٵ۴׮׭ح׬׮֭֮ԬԬӫҩѥѥͤШΥͥХ̨̣ˣ̤˥ʤǤŢ堟œšs_kmossm}_PpKA_B]pVh|\smxõŶŵǺƺʽʿǽǼù||yx}sxwsvshompoohmmfme_kehohfoecsmhxhf{hcxmp{spspww}yy|||&=K&7B2EK2AQ&7K2AQ2=Q&=Q6AQ&=Q7K2AQ&AT7Q7Q7K4Q=VEYA\&Tf&E_&E_2Qf2Tk&Ik2Qk&Yo6Yo<_sTRGUXKVYKTYQ]_QT\TTTQT\QT\TTTT]_Q]\QTYQ__Q__V_\QefTe_Y__VefTecTe_VefTecY__YefVhfYecVhfVhfYefVmfYhfYhf\mhYmhYhf\mhYmhYhfVopYmh\hf\mhYop\hfVmhYmhYhf\opYmh\mfYopYmh\mhYopYopYmfVop\mhYhfVopYmpYmhVopYmpVmhYopYopYohYopYopYepTeyQ_QeKmToThIhVmVmVs\oYm\wYoYeQ_TmVmVmT]T]Q]Q_KhYhVeVhQhVmVhVoToT_I]KeIeIeQhTeQmTmQeKmQhK_B_I]BTy9]|9]9J|BJw9Js9Jp2Js2Jp6Ep9Jp6Jp9Js2Py9]y9Ts2Tw6]s6]s9m|BoI}T\o{{{sso_\\\}YwYsTmVsVoVsY}f{{osvsvxxª©ŪëŬǮǮǮǯʯ˰̴̴̴̳̳̳̳ѵѵѷҸҹӾֿֿ־ֽ־׿ٿ£ããţƫƩʭʴ˴˳˰͵еҳӶҸджѼҵҶҵҵҵЯʹͯˬɳˮ˫ǩǫǤƣƤ㿤൚൘ߵߴݳܴܵܵݴܷٸۿťũäãƬʴɵͼ̿˸ʵ̼̽̿Ϳ˿˽ɹŵǵð­­ҾѿϽͺͽ̹̺̽˹˹˸˸˸˽˺ǷǸǵŴŴ´±yxmsoehk_fk_fk_fk]ck_fk_fk]fk]fm]cf]ck_o_\hh[ch\fk\ekTff]fk]fkT_k]ck]fk]c_]f_]c_P\f]ck]hkPffThk]f_]c_]f_]cf]c__f__ff]ck]fk]fkTfk_pkTfkTff]f__hkTfk_fkThkTff_pk]hf]c__fk_hf]f_]pk_hf]c_]pk]h_]fk_p__hk]f__p__hf_f__hk_hf]f__p__hf_fkepf_p__fk_pk_hf_p__p__pf]wkhfwksxҖ“–ŗÖ×ÖŗƖŘŗŗŘØØşŠǢǤɩʫʟǠˡɣɣɡʢɣˢ̠ˢ͢˜ʓ̜΢ΥУˢʜɚ“NJ̘Пӡԣڭ۵۳ܴ۵ܳ׮׫٭۴۴ڰܴ۴ݶݹ۴ٮ׭֬֬ѫЫЯЭԩԫӨҥҥҥФѨФΥѥΤ̢̤̣ɤʣˤɣƢɢǤɢƢǡǢǡ¡Š ŠŸœœœš{ofksssswf_pK<_=E_I]hV_yYhfv³õŶöǹƼǽ˿ǽǿż¶|x{}xxǼ2AK&=B&EB2AB7I2EK2=K7K2AQAQ&=T&=QAQAVAVEY=\AYAY=YI_I_&I_2Tk6Qk&If&I_&Q_I_2\k<\s<_v(&.3&#"&.&"&.&,."" ,,"","&.,"&46=*EI2TT9h_IocKshVsfQsfTscK}pQsV|_ox{vvs|owks_TJ7.&74.&7*&7&.4*4&"&.&,&""  "  "  "  "  "  "  "  "  "  """"..&4.." "" " ,..&76=&A=*EI.JE*A=*EE*A=*<=&EE*AA*<7.AE2AA6AA9EE9EE9AA9EI9JI9EI9ET9JQBEE9JTIJTBEIBPYIPTITQBP\KTYIPTKTYQTYKPTKTYITYKTTITYQTYK]YIT\Q]\KTYIT\Q]YITYIT\Q]\ITTI]\K]\QTYI]_K]_Q]YI_\I]_KT\Q]\K]\K]YI]_K_cK_\I_fQ__K]\K_fV_cQ]_K_fK_cQ]\QefKecQ__QhfQhhQefQhfThhT_fVmhVhpTefVmhVmhVhpThhVhpQ]sI_Ie|K_I_|BTy9T|9_BeI_B_BTITy9]B]BPy9]I]BT|9TBP|9Jw6P|9Ew9Ep2Ep2Eh2Ep2Ep2Ap6Tw9Jp6Pp2Jw6Pw9Jp6Ty9PyBJw6Py9Js9Ew9Jw6Pw9Es2Es9Es6Eh.Es9Eh2Ap6Jp9Ep6Ec2Eh.Eh2Ah6As6Aw9Es9Es2Ah26c.6c.6c.2\*6f.<_.2\*6\*2\2\2_*6\&&\2_*2_&Y6\*2\&Y2_*2\&&T*2_*2\&&\6\.6\.&\*6f2Ap9Ah6Ep2Ep9Ep2Es9JsBJwITwK]yK]yThTmYs\kov{xosssxxx{xv£¨¨ŪŪǨǪǫɮʰ̯ʰ̰̱ͯͳϴѴѵѵҵҷҷҷҴӷҸԸԸԵַָָָֹ׸ַָյִִմմմԴֳֳճֱԮӫӫ{ӫӫԬӫҨvҦsѥoѠmѥoѣfѡmϡoџf̙\̚Q̔T˓K˔Q̓KɑBʓBɘQǙVɚfɞkɞkǡoǠoɡv˪̴̰ϴѵҷҺѹϷѸѷϹϹѺϹϽѺϺϺϽͺͺϽ̹̹̺̽;Ͽ;̺̹ʵɹɸǴǵǵŴõôympoP__P__Tc_P\_P__P_fJY_J\_J\_JY_P\_P\_JY_Jc_J\_EY_J\\E\\EY\J\_EY_AY\EY_E\__j9esB_hB_hIhpBepB]p9]s9Ts9Eh2Pp2Jp2Jp2Jp2Jh2Ep2Jp2Eh2Ah2Jp2Ef2Ac6Ef9Ef2A_2Eh2Eh9Af9Es9Eh9Eh2Eh2Af6,?:Y=h{\ª¨ª«««««¬¬ĬůǮǦŦ¦ıǯ̬ʫɮʴ̵ϴѴѴѵӺԽԹԶѶֹرԳӱԳ׶׽Կҿѽѻ̶̻̹Ǵǯ¨nnn<DCEBCEINOOIJA&PQPQPI]T&PQ&PQ]Y&]T&]I&]Y&]Y&]Y&]\*_Y*_\*e_.e_2e_.ec2hc.ec2mh6mh=opBwwK}|_|msx¸úǽǾɿ´ŴƵǵɶǹʼ̼̿οǿʹ¿¿¨¨¬¬ǯŮűɳʱʯ̯̱ϴԶۺ޽ۼ߼߼smswossmhA]ms_ee_PTJee_]_]]PEP_PJEAJA<8&7*,.&4*..,,,,4&4&....24*," "   "      ""     "4&7.E=2&7*4&.4&4..&.&,,.&..&44&424*."" "          "  ,7*A6&IBjj>vsKh¹ǽɾúÿø¶źɺɽ˽̽̿ſ¿»º¼»»»żżɼżǻɹʺʺ̻ɹ̶̶ϴϳϳϳѳѳѴӳҴӳӱ֯Ԫפؠٖ܌ڊې܌ߌwh]TJ<26A< |wwwsssswsssshshfhf_hc___\_\Y\YT\TQTII YVV:P[CW]AMW:QUATYATY7949 .949 46 .6 .6 ,6"2 ". ".. ". ,&.". ,& "& "*"* ",&"*&,& "*"& ,&,&"& "* ,&,&,&& " ,&"& "*"*"& "*"*6IK2AQ6IQ6QT6TV6YY )&/."4Ax6QvJj6Ep9Eh9A_9Ac=EYBET9EYBJYKJTIP\IJTBJTIP\IJ\IJYIPYIPYIJYIP\IP\IEYITYIPYKPYIPYIJYIET9P\KPYKETBP\IJYIJYIETBJTBEI9ETBEQ9AQ=ET9EI=AA9AQ=GfBE_=EY9J\IJTKPTIPYIJYIETBPYIJYIJTBPYBP\IJTIPYIPYIJYITTIPYIPTIJYIPYIETIPYIEY9EI9JYBJTBETBEY9JQBEE9EI9EE=AA=EI9AQ=Jj9Ef=AY9EY9JTBET9PYIETBET9JYIETBET9PYIJYBJTBPYIEYBET9PYIEYBETBJYBJTBETBEYBJY9EI9PTBEQ9EI9ET9EI9AA=AQ=EI9AA9AQ=AI=AE2Ef=E_=Ec=JYIEI9JYIJQ=EI9EYIJT9EI9JYIJTBETIJYBEQ=EI9PTKET=EI9EYBETBEI9JTIET=EI9ETBEI=AQ=EI9EE=AA9EI9AI=AI9AQ=AA96A9"(,* ,* !*,.,. ".".". *"..ԾҽѻϺ̹϶ɵŵų¯¿woe{PmJfj[R~o]y`s}}e<_T&\K6pT]vw}ho}´¶ǹɻʽߺߴۮت֫׮ӴԴҴүϮϬϮ̬ʬɬɮɬɮɮǯ®ŮĬªĨ¦e>fRMye]ve~p}Pwv<\Q&YITB2cKTohemĶǶǻ̽̾ܯ۱۵عضشִԵԶԺӺֹغԺԶӹӶӺӹӶϴϴ̴ʳɱɮǫª¦s]hwwooey]s{AA=:A8CDDAC66=2:=2Ny=Is7Gs9]ImT}Y____ksv{{xvɭ˴ζҺҹҶѰгҭڼ۽ݿ߿޿ܺݶ߼߿޼޼޸޺޺ݹֳܺ԰ҫӫШФ̤ʡʡʠǟǟƠƘş˜“x{xssmff}_o\mVmQe|I]yIPp966A967692=9&A66E62A9&=62E92E9&=62A66A92A62E96A=&A66=92==2=96A92A92796A92A9&=66A=6A96==6A=6=92792E96A=2792E96A=2=96A96==2=92E=6A=2=96=96A=2=66A96==2=96A96==2796A=6A=6=99&A66D76>9'>62E92A7&=6&A62A6&=62E92=6&=66A92A9&=62=92A92796=66=92=96A96A92=66A96A62=66A96A92796A=2E92=62=96=92792E92E92=66=92=92796==6==2796A96A92796A=2A92=92E92A=&A66A=6==6==22A6,B6:&=63=9&=6&=6&A62A9&=62=9&=9&462=92A9&=62=92A8&=62A6279&=66A92=92A62=96=6&=22=96A9&=66A=6A9&=62E92=6&=62E92=9&=66=96A92=66A96=9&=66A92A9&=66=96A92=62=92A6&=66A96A92=9>3A9&=66=92>6&462A62=9&=62=9&=6&46&A66=9'=62A72=8&=62E92=6&=66=96A92=62E96=92=62=92A92=66A=6=92792=92=6&=62=92=92796=66A92466=92=92792=92=92792E96=92=62=96=92=62=92=92796A=2A92=66=96=92=96A96=92796=96=96=62=92=92=96A96=92793K92A>&7:6A=2A9&==2E92A=&A62E92E9&==2E92A9&=62E=2A92=96A=6A92=92E92E9&==2E96A=2=92E=2A=2==2E=2A=2=92E=6A=2=96A=2E=2=92=92A92=96A=2E92=92E96A=2E96A=6E=2=92E96A=6A=6A=6A=2=96A=6A=2==6A=6A=2E=6A=6E=2E=6I=6E=2E=&B62E=&E=&==2E=2A=&==2E=2I=2=96B=2H=&C92E:2D=.C96B=2E=2=92E=2A=&==6A=2A9&==6A=2A92=96I=2A=&=B6A=6E=2=96A=2E=2==2E=2A=2=96A=6EB2=96I=6A=2==6A=6E=6A=6I=6E=2=96A=2A=&==XT\6co2\o6co?XPH?rsĿjt#K!y?1wA ?[?-$n?G>?@Z>Lme.ܿ?TX%Jf2?qz?R>F ~:ri?8^h?"3?Ⱦ)%?H~|?QD?5s;Rؾk?ۂF?Ao#fW>9YѼ?LÌat龖cT]@\%R'ſ̹?N?SJbu?,?[B8?4Aj3D?X?3G2?6??O:վD!w?4m3t?8dM5znk:?:/?ZH?V?0Va琿t?rc~?u?^ֺ_F?rq3J?Ƅ >-P?eJ@:<6;)D?iHa="?\?-#\Q؈V־p_Twj??m6kZݎ?2?Rlȿ7"mƾd[ž&ۉ?WXƿ?E?Ig^?Hs?18?C0?YE|ʾn̾|WUf?Xs?J4?jf?|7?FfKU>?P߼V?b9?ܶ?KuUI:? ?Y_(+?L[?Y~?`?3Q@fֽu/@f?[@0?Vi[?"?BE8?:Ѭz'~ ??K?Pj?@[ܾ/Z?!Zy=.?e?@Z?B4?4b&?:?Y迋GƾemYQhU9ӤMz;?COӾ?6 ~iʾz=?Js?OG?v??N޾wۿ?Ήȟ ǿO?IVHƾRwP?C?vG b?S0۹@i?=>ɿ؋v?8 ?"?15?S^?+}M|OU?' 7?:{?0s?q?.`:D?E}?2 t?D @?BK?Gܾ.?5!?C1Dc=?Xp`?5r~>!H .?#|5?NUg|?Bjn!?dLD3 KBxV?Lϗ?k$R!F?.>?<̉ ?(oV;z?\|+wK?6غa?-)mlmE?7l?^]\?-?`հonEq4x?Enྣ7j?cU?2+o?;?5v?0eszw?0WU?""??>Yڼ'?IE0?3? ?`^C$?Zq4锾)T,?I#6@co?L?dp?I }?`_@ۿܯ?}?F?6Olc?;W?V?5G%{?,|?g[ʇھai@9 dYQx ? ?/X?3-Y 44־eV6?Blv?/Z\l?2-2&???V}LYe>?Vx_c?+;zoY?,`X(?Bn̾g^?u,^-B_?=? `PO?o?XqϾR?Dᖽj]?wz?Z8P>?m BV޿qa%/?rD?iʾc?@a??h?ى]>x?Q@U?_?Ń?4`xe?CE?7?q5\+PG?+=ؽ>J?BL°8o`N8ҽ{?PN @?#⾎pῑ@,L?M~޾Hp5h.?Wr?5$u|j?6Wl:+?P??1)?Kat?mھ^\b?= KP1 ;鿈 ?6뿘j]n1TɟsuD?=QlY?S!,[< 0?W"4oS?61?GS?d (?R?K$?Er?^?84?L󳿓ba,?:\?AB_ە?BXھt?8 ݥ?Ct.h?i+?LkĈ?N辜m ?;?=?7c<>?{s=g3Br1xl?@?9ۂ?7^*?JM~:?'?-X??3-?~DV?6e?E?;bBB?,\f:?@ؾm1?*L>]F7Yʾ| fE?2Hk7 nAlH&aſe@El`T??LVԿ?KT'G,??^:0h-<񿭉bB;ο?ZBVK.?!\Mþ'Ծ۶/?Vs O ??BοpQ?4Ta?ns?JGӽsR2$?8c\ab?7?=?7_?6zd???<?j ~{ ?B\?Fu{:?rgM1:rz?MLf?U\?RZI+YV<{Y]X-q*;ݠ?O B?+s6?C3ʿʹ~#Vx?8Z?=P7?1or?r*@2?Lm?##ҽ hT?=:*?b0 ?g-?3e?X5뿅=:?;FX?)yN?R?:zD??Go_?70ݚ3#?H[ @?"c?V?1:??2?"O?RQp=Q ?Dվ ?_a?[?`RX8~_nWĿ꾙#ھ"R?5 AtJ[%?<?-n 澋?C1?0J{I߼|?Ċ?zKmpd?p俕邾OGhǾJe?BȽȍ?G>{?apп% A?Xۿv?]@?8E&?RA?5:{?PVIY?_?S%I/rx]vM?Fo=M޿swH?G?Sr?6m|?>WYy??>?3 ?>!?C6&8 Mg,|_??E>?aľֿx⾐<6_?DQK׿d!5e?B?:l׿mоB?f5?d^j?Һ1QC?C䛿kVվs]?E޾&?jpj6???b\? ?Tuz{ؾ3%?/n?:6?9d?E>?ؽ?I:f?x n?kհ?n?W(??Y?5RIqa+?=?⓿? ?<?M A1+eƾrY??'e'?D8,?a?t_?6K?^%p?:S|C\S] Ľ?Fhe<ϼV7 f?EeA}?@HEHb˰g_?N?%A齬 ?PH?H ?Nǎ?5?Eg?Kн?D?p-x>fS?Sz 4 yP9B)?LI?H)^k@?T^,?+(i6?+mN???X?/?ٓ8a@?A?T!;x ?ةie?fԃ]?Cۋl|?]f&?=QX>44俐4#F%>?-w?Gw?O2*?P?U?H>?J?4p὾*1()W`??FP?HT?8>p"݇{?G2 ̾wZz$!?/;?=e.15|mZX??)q (?5?\|Բ<$ſ潜7P?a*?|+?H@U'Ay?=E|GZ,\<0?R?Gƾ/c?E2/?J2 1?9Pjv46#SR2뭚XcCi?>=ʺV? %?iPa7?S҂ i?#껾P6Ӽp`?]B5俌:?WI콐d?Y޾:W뎽>Fھt:?FؿO۾XwDؾ @-!Lʾ]R?N2?0"?<&N侇J~?rcOBuS[8 l?b3 {U?06HՈ?EȄ?)+ ھӟ)..?7t.(о??뇾ῠxwO˿i/myڿ>RᅫJqs^^?Eþsm>[P?Ew&?6s,hq>1I?<?߿y? N?$‾r>?["?C?+1̾M?3 {fW?+K|+že ?A/TH{? h ?WM?+1i?9y?JB?L?Z#?,DvƾNs`ݿH\g?@>e?B ?)yt?^޾SžV>.⶿ݱ:? t&?L?9=x?M`?AT+?1uV,?eo??GsĿ+:½#0 D?l4?Af?eB?I8?XvM?Bq|?7 Ԃ?S}?6?/K3[ǟ?_,?S ־Tj16X[m?T:85"; ?W?_<&̾8?wf䳿.?Є?J%?tK侏.zw`b?6)N_?@>.?=c"x?nrU??$zO?/?WԽ %dX{&?۾(?;?ZO{?^?>b7ֻ=񻾍w?hU6??Z4?Nr?"^b?PyK?Tqb@?Qة?[=D?7?E+pJ+$.?1*?q&ξm?ֱr[VvLd?S?ƴm=By!Ԣq4?"ta8˺'=o?Ӿ67m徏>?̾z:DTDoQFCLA1}F?i?Qd)?L?:K"?M?N= 010[ ?{EZe?;ljۿ+c?PrпH鸾욿ꈂόg?P@@MȾpDǿh>=Q&j2ZP?H?F տ'F?g,Dܫz?4ȾvV?gɔяy) k2d^?Ep?4;? ?E{L?(,?8?f4?// ?#!?8,?@?5 Gc{?'s?ey#?6mxG?c?T־gs?/zB~$??m龬>@᤿U! 'ֿ?B3q?,hB?<;&g Z?"(?,8? $f?B@Fy??Sľ[ƿ6?6&F_n ?C/.?VH\--I*?3BC?;;>?Jx?BD?>H kn?Mп?qyݿsf2?5?K^?X2?.?EQ?ӽ̶?E࠽Gj?H.]?Z%%&?=,e@B?@~}?[m4XB?3j@?Ί73T>pݾ17aTh9?% ?0 5M>H 辕*ΌBWX%Zy#|D?[uJLx^x0$;(?g?>P?o-z5?LֶoB CC cA/@+o&YHU`g̾nNQq_~=?M? xC?H[&ubؾ?BH?XX?dEH?TR,?-LD?EJ}?@/?"?G-?E?'-IQ5?)xྠWPJz3a??]?S?6\?2ȿXv?S?/p7h?BIo?8N[r?8d>Ϡn?4G޿ FH%(YN#¿bDFo v?K?H?TP ?A:?am3+ͽ Q>r?-:X#о4,cD6`?@~4V?/??\0?Iw&(, ?;?T`$\?L( rZM)?Gi?FC?^%ɽGn?$ļȿZq̾WiR?;o?BE?S!Ӿ?GFuv?7?G(?M?7 rd?PkW+?4mz??Y*#?\M?0ԿAA? # roJ?D>hx?@(?F^?D 쿊*O%ƿJ?#q?8@ j?8Ѿд?Zv?]@?c\s ?/?doƾ:?P$ $?]tJ?@}k _TȿF?Q<0#7?X^ߓ=ܿ?(:?li?\i_?y'zuH??z 5@a?U?zvF?`e7.?D'z龁n'?4FYq]TK*?s&?Wk?@V?OؿnA?v. տvϿO?LC>\]V%pXA NFY@VZri?+KB?d?%RTj?2XiJ\(9?DZ?% p?5ֽԾho?`??DY,,m\?>Jwy%m=[?> f>?4??K]??:(ξr' ?ZO?Pп.??5 ET{?4Nh'ſsdf?* ?N#ľyZ B?I ?:j?'?G? G?g?+nzyAa?Xcq?3Pf??3+?I/0?6?[徱ؾPտ*h?PUJh>X(j?"?C?8J2?n?A?IV?IO>XD?i뾕?-?0򾼱پr>6m,`ܽDn?6?IZ?1_??P3''?O?zp?X?fH=⾓hO?}#?CFF⿖7|O޿]@J.,~?j/P?Y`3Nt&t?LS?g?Gf"V??k|ybzd+ǿ|?C+_ r @2 ks{?1R?QG'?.\?xTUɾ2!j?&9?{?kc9?}'?C R%WJ([ǽ~8?P4QkGiU?.#׀&?4?~?.U 6?[`?D2?-ń^?W>žTr;Q?S5ܕ)Hg?Fd,?z >h =X?2! wH??Nྐྵ ?ۮ?D?f@bK?V򾄜?["?@?TsU?++ .ž һ?GzbfG?뭾b,Gxڬ9|?3-|~?_?E?8g?㫱??/MXcf?; =qF?-y?>'<@0*?T̾F?B޾K?!ݨ5`?L0?L/gDO˾ľ?Z?$k"6?A*ҿ`?iHۂ"V>G?;*2 ;þt=`?,Ҿ _ҾSA?<7gb¾L?[t(pX;?9[!L?LAhֿ/?*?%?1:Kȿ|pNlt^?OM?V+:`srF?^n!6?EQ??A @?g?NR?_?D4?c[?T#Ͽ}῁nlIy?]Y?^^RG3*^Q?ƾ" =?]IR?о_,U=*迉? )?=$?Kd9?aӾ???/n?`g\ׂx2 u?=i?U\?WO?;#?C3#p>U:(?N KQ ?]Dv ?iiq?&e?D|6׆>PӾ}Ž?V?D߂??q:@gt> u?Fܱ?$N?U|u].?A$??MM?7? TPvI?;(?=-?D>s?&?N}?+?=Z;?Pf?h4]?.f??5?$:B?3@޾ؽ@%?3d?;Nm:!?$LB C?@Vxs?Yg!5":Y? yE?KB0m?FsJgt'?Re:*v?<#>C?<\ھ)&?.~O?^RKf?'lɾj`=(?@?'?H~yb?%a?AP?@?p?k ])p?q?9w㾎eҿmPO6?OؾIǕ?YP?\T?￈t?XPVG%B/4O&v?-^?8ZR?#Z=>͎?px?UjC{N?v}jڽ]C?>?`wh?;?WF?;l8ʾvL?C _;60p;˾@:l?X$?, v04-O?Y[tv|8ǽ\OZC2?L?F!˓??Q?+'6&?:v,Ia?7p?/u(?fվ?BSǾ?:h?35?B%F־{ ~?N)@?O.zpx$h_Z6пj}?]X`:?Pb?5`%c?>O?`j?;L?KV;>?$W?.?׆fWo,AN>!H@|b?Cؽ?[bEB?X),HOjPl?EZ ;{f?7?G> v\l?Fۚ?6??NT?Kw?X*?[$q2dU߰?>0P7?>*'A^B@<?%긿?.4?E?6HvDR?qcy?7B¾&̠ 3-?1`"?Ԕgվ?I[St,d@?n&}*"?4[澨^f,l?;ƽo*(??Hb6J?VN4?l"\̽q ¾N?]>d?DlY?[m''?Dl?2^x?NA@Xd+?d?P@?L4?>M翖:?Bh8ȾN?[uެqھ?w?IZ}?bqh(8?Eh ?\ƿ ?PuRK?SߧDgL?bo]?J8I^=fP?]˪?L?6iLl2"s??/,H?&R{?>;sI?Xs8?}/tO10$CK)w?a[x?xj?N~ƿ8($?H?pоb'?,M?p?!2P4Vp!ƾ/>:??Lϣ=qS׽L|zؿ??5?Z8[3HӾq^]D?¿x?q/B7?9L0? @=Z`8$2?,)zA?!D?-?]̾;?Af?߮?3}bjn?O?'ݾG@8?W88?'|?84v2̽`a?GV?B?Y;>$2?7??1{4??_&?M@S#7J?Y(V?ȉ qb?74 >?FUC}R?4ɛ>ҫտ-?LC?4`ӡ.?,nu8%?<-ϾD) Ѕ7„X/hɾ+ 2X3?=?:Kq?5;f?ku?NYd?7h? ?6?To?MNվwʾR*?]daV.kPI9@??+|N9&I? ,?0?0?m?J?3|?5y=ž9ϳ?D&?)j?~G?O?0E?2V?C[?,ń?C[ jCMؾ(޿uOmQACt@?3B\Uk\g?3^iʽAL?W?勬i?8;~lϽ"YJd3H?M˽-Q??S{?IY?94V<3?rH:ƿc-ƿ|? ?1Ԥ?g5g?C?@?^ʂ?:AH?.̾FI?H?(O??TY񄦾4&B뿐 ?N7?<R?>?dh?) 󃾃*uD?=F?L{QSX?|??6q?4ۄ?1g'^l?-T?QCuѾƿ\?=YD?w?-e¾d?BF?8 ʾ;E\|?34X?D͋Ѿh/?뤞eF?俚 cy?^`2h 5]?J!!??L?Kf?8Y0?5D?K ?T־<?r酾VDA ?sdi6^l?.~hOe?X3ܾM@5D? Z)?0N ?=?1Nʿl$?`#?:l`?#?-?|lQƾD>3P?6Ih^ھ(?.?뿟v D?B%@+?|>l?S?>7?<D?Le?J@?L#Wʽ?x?D?e?KpI`?J?`v?־K:`4=A >?8垾侕7Z\r?Xƾ=Q&P?G} ,4?OK"( ?GĿоppP?GOKCk-<[9?:U׾F?H ;8?j,9?`qj!d ?I??f.?h?O5"k;?>/-m@jVk?)?l+?@"?L??:R*?V6?aL?2|#b(?(6c-??94'2ҾJ>ƒ2?90-y%R7 84?8.Kx SE?z@WI?žB??KV?U?/&~?2¾?g ?5ٴ? v?)E0?A2N6ҿU?-?rF?Gdy@?oգ?IwоRQY?^ <Ⱦ/D' a`?<8?L}r 7?7Zٿ x??^?R?G?Kž ?Bi?!`?FþGcxF?6ݾb־z̴C9??\2&l꾧;:Ⱦ'(,+@w?S^俚¿?;>!KԾ_?29־3K1,TWzn?;E?^T?K6Y캞V;۾l)?E{?K@+ Z?K`{?j%@s?4}"?=1?y*W?`>b~m:⿰$1$7?8s|w":澀kU?b?9:>b?㕾?Ⱦ;65?Mf?Kmwd>?߬AL\(q}W?Hv@>H?8(+?,kK ľO.?A \>G0:: ?n?8v?:mpU?7?LQ>??D ?P'h_?C1?F՛?T"y8i?6\'~ȿ?S?F >m?C?DVT???6xڱG-[;_?TS@ؾ ?Xmet?f꿉t??/L?!A?MImA?.kP:?+ ?^swr?/Ҿu>??z. ?=ο?G?uZ?D2=CоHU?\](?dL|w ?=3?FVyHB>]b?nzɾ??A?f :?Y&||+?Kab?,I?L俾/{3?==?"X?H[(۽n??P?Su~m M dKKA?qj?P??4H>ߚ|`,I?5lxK?4 8ھѾ 8?6??.?d8"?`=?MO?8?A#?&Н?=|?9Q?_+zO0ղh?P8?7H@[?`ھKO?V?k?'`Ĝ|J\r?A25?2gο_?v?@?;'?،?=/?A依񿠞OO[O??#>˾i;?,?=Pf?Lf"?4 W??<[?IV?T;? %(?75!?8Uf?AD}>Hi\:?F9ܿ*@窿5yv~c c?RҋT?K߽tqt??{ݤ6?g]?Q~?E1)?G? 3?w쿕 CK?ýɶ?p?H#:|?Yn ޸?Q u?U9cL ).yv?Ijbz ԾN a?RPX&=??h??;u2 ZoF?46m$?`?Q2?kXNa/?9i*?S'ʾ$ ҿ?Bu?e?EuCʂ@G?*2?r?dp]?(%Z?=?׈F`,S?H8近j?2V?M@U?'r?)x!JxM?B?,޾C EؿU?\;;Z:?_Tb?.Hsusre*'R?ԩl?3??ʥ?Rg*P࿚?x?X8?AL+;?A} 6p`"=3?`hB?Q=2?Hr?D?+R:Qv?=r?K015ga?5?"?2ג?94z=-[O+?5 ̿MTN3=d=@B@?u[}wݾ}6?[Հ?ipM)U?W&;?nf?MJ;`?YlM?ڥ#2EbX/NE< (?Xw?J1?i*EB?N()v?}SBqĽ?LѾOx#?S6?(g\"࿧{?OD ?>Q@?;O8e%|{?&= !Ŗ#ɾaX??LBN; ?_%> *7V?/ t?@ ʌ?HMj05?Ȳ%V?K ʾk(E!W澁??/k ?> ׿i?XǾ*=\'?E%?J?^?80?R^?2?IG(?D^@7N:N>?+)nr?GھX?g Q?@?G4#?e?c@yk? @οQ?҉sDBsn?2,?W/Q:?/ݾsP`J*ȾX?`N>a ?@??GڽW?5B?fJlӽT[ֿO?2)ؾ91征Tž.(?AqMU;'O<[PkGk?O?"9?$\xǽ-A(?`¾ |>$¾5 @RʾCAE?F SnؾA?4O]?l$ETǾ?ڽ"LZA+wf"AG$Bh6?;t>Nl?Mv?@n?}'W??N)?O??(L?F>6??=||?C `?%b~ƾ俜?X ο(N?C\` ?BO忑ޙ?1U@?A] +?O;ʽ7?L?eɾh?Unо*?=` U?S2|?9B?=7?A?:Ș?D33?R?q:` ??QOq9T쾚ASQB/?L= )Oɮ?@C]|l*O?@?~ĽF4 ?GiiLX ?In'?D>eD? ?'򾗁?T-?Z]?O~-?KD$?"5;i;J?2lC?RR?Qn?e?\p?(?6-zK?K < ?>?dE?9%o6sv?dRξCo򈒿I?hq׾ܶ>?bW%?VJFmyx@deK, [RlW?XXʾ J+?V=1係+?KGY?DQSW{,|뾌r22ھ*F?VοDSp|X=b?k}?:3 &`ο & ?DOF?̾?E??Kf?UVy¾<ɾ?PE?xH?? w;?ip??%Q?D?0Q?8 ?LL2 )Z10L<3D"e?C(ѽn@Ϳ?Q 3?0hpqJ) ?Rr?Q$^d?ٿ?# hU`?x?;H ns'r?7Z'?=Gܾ'|4?O??q3=?#M>n?+?BZ^)S?(?^ov?5@Ķ[ET?k\?0®?bG?vþLm?LT?:3dfui5rQ?6t/-0?9R*K޽͘?p$?B&l%@,j=cp??mQ#?v6?5?TrQcK?1w>&鐽ҁ^C?Xq߿=' 3,L?F$j?M,^澞ނ8?E^?V9T2d/,LP?K߽2b?6|B?2?}?6bF_ݾ[N?QjG?;KԾ-پI?`$@prBp?Om?8B lྠ?7ӾȐ?bMmnx&?\и;?,V$>g*7O?2|R?+"?Mq?F޾Y? l?:|??=?(?Q>u7?!%%7>䂿?:?=U?ʆ?'?f?w}?1g띞Ƈ?G}?ҾgmjW?Y޾3žG`?TnᾆaU* ?4]?%6?&?G?}UU",?1:v?Akk k?7?)hBMI=.B)  ? 0??"g?>&?DlRԾCg?0™?,㿡(?3.4?+?#2O?꾠?j?Me?9MU濛{IH7?Zz3ߣ?7@?5F?_>Ҽ?^ 7F?dv?c?~A"ni࿓tk:K?7C0I@w2*ȈP괾/潘WD%?ToF|uC?A,?v ?Q@Q?T佤s@?ns}j?v?\-G?b?Yx?:w(?඾_?J_?r;$?YK?X?@uѾr?Uؾ8D8.=ڃ?=ѽ"X?)! ?^l?A?q;?YL-?Z?]E\?A7fOH ?c<ԾS8?7?=Tf׽ "?="?`㥾7-"?B:F#ʒB?1`y?PžM# ?U׽L|;?"߂/\? ?@о࿒{Oi#?_GK,.?L?Uxl>`t܋?[剾?DXy???_?$Ђ?Qj? ?JFD%?)w 5?5ھ%?>?+?1v?\ ?QC+P?/e_>ҾL(?,i1 e?Nj?T1?f[?4p'־/h=l?Os/9?8ؿ`?CQN^?0^z?@Y=r H,2M2?W=l?$8?W9vgpZ ?O^3?=;?8?Bٍ?>Ⱦ??\?bp?C?;}F?8?h2?A?6#"?&qj?SN?b?l?g?fdF=U !*5WE?f"o??ꪽ?ĿCC?K#?=(gC?a| ?2/?9Wzk?5H@;/Oؾ */L?S27.?K4?R21־&?&RP?TH.?W}?e?/8ꃾb?R?A?(`;?Qz???ԾF? 2\迎#6yjDj?y?U @E?C"7麾>?0#?ڣ?^ ?^7L@?BοCr&?Pоq&?=v> S&O?U?At?pWo;?1_Gt(p;San?b ޿U ?Kzv(S&}N:w?JURxKr?EŸ;?1?<žDl?9?Kr9hG3T?U0?R2?粗?`>qeQf?_{byIn?0]?F ?2V-ѾM{?ܦ?Y8?8>;L,a.0&L?%+>Y ?9+㕾R¾L|4?99p?XXQ=[@*1?[ߐ'βg8T?'?Em{W?]TԾ"?Y ?V8?V?[[Sk?1,2\?A?1chI&Ț?pb#?TvH?lGϽ?^r?D"?W.(ٿ_?c?Ez?P?N{s<El?f㿗WNA &?Q>owA5Ҿ?WH?Z2f|&?Ho?L?r?âfOݾP꨽Z@??N|eğ?F?Lc?1.*Ns\1?6?B]?v~ K?!a?>?=?J:B??BAb?;nM?4ta;?@X?};햿ۿv~B;?RYՏ?I߾gƿ}?We*N`j?֟⾑?օ ?G`q b?Ny?izx>¿8_mjվZ?A?C3(@?JL?T?KAC?4?ז?I?K?l?Lサᙞ?ؽ?;ua4?CA!Iߋ?m:ƿ~G&b\)?kF?9۾!GҾNڿ?U2*a?"ni? 8=?K/u?{5޾Pr%?dh?@IIj?3AE???9+!J?3?O+3?"?!F?ZN?C%? 7㾑Ud?[?2(Tf?)0C?, ;x+24K V8z?*?Oܾ?_5e?5˾B? Eep??E@?85?ƿ aV>XHa?SԾM,?Css_yO?r+e?/`?OF?S41?C%ԽT>?qҾ?t4lſ4M?3x?Ejc%* ?u?>?<&1[?AS1n XC@W?9P(C?Oa6>?,Sݾ?6aL~>;1?b>Ŀ?P@?dW0P?u?FE?G`-4A?eB ?ob?~ B%?ݾ.?cʾ[}wWp?[# ?Wľ$_?# ps??<6l!A5hNpͯUT?^K?V[??,j":1?&?M1?Om4˽QZHB}[?Mf WP?8-{ =ξ࿒uC?<1ʾ}yߜ?E@׾|K,z>徢( ?QlT?4>h0&^2!F'l ǾJ2?0`3 ?羟?\a3q?Xtc>ાzտ*sTJQ?\ЦO?8(l#<P(L(&ٿF*u?P>:?7ཀྵN ?E3ڿh?:ݙ\ԭ?,޿*?7ƾ_?9?I[@?7%ܾ)V?}辿8?h!-zu5vs?"?=0&Y31?MV\?oHB?YH_@?6wܾnol?D<@i@B΀?+O?T⿕?aZ?J'ȿF?I!Ľ?h8?b,EAIх?j_?F*j?A?C=˾4h?((ҼmV~?"W]C?E?Ө?Oq?$ x,Wdzv?+fھ)Ix.?Z?4o'q?DD?^U^?R5< ?]&XrTc?Q2?ASI?El-"C?62}־Dп!־𿒶/[?PbjO@q?b"!4AGSlu?? ?<(?kL0]?77_?hے?;ھphƾ:ꩿڣ?K*?IU=oeCkľ 6?2}l2e_?)QD?¾Bl?nĿ?@D9z?u5ۿ?$4?*A?%.3D_bB ?'G?,¾!?UAXܿ,o6M྄S뿒z<m?O*q6̽wh>!T6"Jjшd\F?+jD6Ͽx 9>'BUA?ICZɾ5u?"*鈿<|?4p # z ?&v?|1?<?JE$`~ ?:a1옾ſV1.-(?G򼎊P? #O? @Q&?,qd^UѿywW.BT|@JN?E0?j].?柲V?@j|cSz9?`lg?De?j-??uF9ʾW,Ϻd?fI*?8jG?FR ?UB?[4D> 2]fj?S9?FO29?4?S6?FpITȾ?9Vb2?I ?,Y?.`j$?H>?;w%?r1|?G?J.?DI^?B?Ҿ3 ^bhv?Tt޿t?F\*?;?NS轿? hl?AcO?~H? ؿ^ľw/: J?P ?Z?Mҿ@4Gn羝쾏.z?Y?料?fݷ??u?BϤ`?P=?G?B(?I[ ?cؾX ?PN?\?e?$?<_ؿ2Ҿ4a?>~Ww?IR{tJ侫?a0?/ ?6|:d~?☊>?=!]6?cFS ?{?7~`?gƿ??P?>EA@7?w7a?νLL\g6c">??7Z`?J?f+?,(Ͼش?Q-~!t?ժ? {>.>ߩd?H]x #Qſ量>ކ?"- ?('@?T?:_*v?_qm5^{b?M?O쓾vݠٿ(>'AοKgQȋR@*/+(?[ ?8k: .?BЪ?O`?4C?+,?>?eD6B?= ?#ZvY&?8gI?T??ZO?<?u֬HA?FWO?o\?JC>n?7n"_?Iv?:1?Y?#?A"|]l9i?h?FA$@>n.?_*?F쓽mo듾5vH}O?~#?8"?HbQN?VL\?McNhX a!JV%.?c!tw?S?<:?^fE־M`?r C4v̾Bx?L(M?-H俥BB?c:[2%&?AРI?zq/?FcU?+8(?,)GX?J ??AԾخѽwȜg CY+4H?6?=t?NC ,$5?Pf2>$?R2?sM>8ڸE?`qJ?YTH7Gf](v?B$Asu?>>"Z?hp?ym@?o? pg ?p8Pt?D\bqt9?E?Y?O߿b?P9?X%?=`)ܾhF!׾W^`9nݾ|?9M4w?@%?E ;?<48Z?[:A?;@C?Hw9V?X?Nn?;߾EdzF??X?>h?̿?J,J%?Q< T t?QS?M?EEBȿ&?A;?8`z?[>a[?( |(6$?4{n ?O?"ۙ?Y;&i}?!W\?Z?I" ?%*w3Eѽ;\z!ss].C¾E`߄ 8j?4Zt㘾)Q?D[?X*1ʶ+H?[5PR?*+"޾m3rV?*~hvkd1X_Pl?Xm:y>7y?QD|Vľ^:B?[OHԾ?][?sthmS}YY;6g7\]0؊>J?gK?ZҺ?Q8?IO+?Ѿ/ ׀?.lF|HǼx?^^qt)?:d羁s<$`l>aL?7{Q̘?4?ZN?K꿜Lv5?A3yJa?Y_f?[.SAzツ ?F?U}?I?w?5b꾯_h`1s?B?,(???&~0?(X?'V˾ ?+@Mp]?G2?^?k iD?Ǿ6?J?0?9]N1?r{zaNR2M%w[?*>?Dn?ex)m;w `o\?H?U\v࿎ ,coO?n?p"z?=?T ?T#5/в޾.)G`:H?Lu/^?q(R?\R?n?I_?NB`?@:?a?Ye ?;?/OX'G?<4?OILY{?K?Ild:?IA?Q[$?K-l?|C?5iֿKۮbϐ?dJx@ʿ~F?*(i}?0t3IV?=M{࿝˾5Cȿ?@X ?:Iwgٽx?O?s?S?<ڽ񢿥f??7???FX?V]?ty?6a&ξn90 "ɾNCZN?'s̾TnK?澪"?XҐ6?97?Sƿ;io?RJ?־w |?6g3? v? k?CC3R?M?3l̿D?B~dn޿O.lh"ʛ?V?P>fBK&!,7,?BMz:?aW?8=Y:=(T "¥V/c?\1jW?@x0?۹?-ֲ?7R&7?FV7v{5,4?Q6?E"9\?XE?5鿘E??+z>^s?+?e)ia9> C.?G?bF^UHt*ӽ?GU..F?iٽ1,~?/*ڣ?AR ?y4?:]3?A?Qy?^%?b-ۉ\bl3p1?Yio(u?N?tL?a&T?Aq??Cv?6`?I?,Z|0?'Bϼݝ??6!@O?Tn? ?:ȿ~ T;?:Y?,YhYݡ?+Q"M?H|?HF8?nJ^8??H~K?H~?,a!?`6?7?OyB r9en?9޾"$9?蒿>=?S-k?Y(AB@:ѽƚؿF?H氾cȯ?]S`7?9RB0Tyw)E#??Ex~?@?ȾԽCϸ?-?D?Q&?8Y\KF?+ ?'dRwzYjܿ,wXXμI࿚vCYݼ?a?;AoQ(?7º?<|?deܾ2Ҿو?/D?9@?O?6?D'@?GV8?Cu?%Ռ?Er??~4?]"ƾҾI = ?>r?kIBcDvAmgR? ?Ad?R?:n:?U?T3LqE|s)x?UR`>?1^?hSs?;9'?6I m?\n>f?T?ýL^?գPAԇA!/?//?]Y@BH?:ԁ??e袾o?+RsFGmU?<4!Uvw)q1k 4?6bnr̙?\?8W?\v ?0Ps?':*ʾ$?4,?ND?[Z6J?`þ#g?0D?Wl?m?(?i?Y þ`O?=9b?&TS$??.?H?-4n?ac?L|?)?R T?q?9xDGm؍V?OO?%|?LᴿpL8kޠREC?!н?J@dA@>Q?4?!Cњ۽5fd?*tu@K?OQ?B;?NVݾb ?Yi?@ֽkվ9?4w.J@?B;o$쿘g??:?[ſmPg?:?GϾ`^ȿ#?: -Hvȃƾ-h?G?G"ʾA uuw̥0&ܿښ? q?S?H߂?Bʼn̐VXj5c6?Lľ- sŐ%(١?#t?5?9Sެ???}`v)2n?dr!8ƾ&b?K@>2?6t(~U?e?58h݌?4B*J׾g=D?!AJy0xf{ ț!=?#?mw?16?j?;^?^ v??~?./?2tjA?04/rg6m?%↽dXz?J1AI־ۋo,"2?We\nRyW?U'6?@-ZR :%ξ.#"?üʭ?*&8?O?KrV>X:K>ľF>pdz2/i|jvmV"?GkL>??O.?0e?Kv=_$?N?=$&?0ÓB?L4 ޶{\ffBD?[[?I?`2@4XUqw?w2PyP?3H@&??W?Ffɿֶ?A$?0?6P=4@?Ͼ?H$?SȐ?,A}6D?%1D?5/?bJ?ܾ{9ڿ]>B@?|ľɷϿHa?FоĆ+'\V4&'_/=?,:ȿbAR?;~?-?1 ]P?$yBz2Bd??7?8zW_Q?R>?(Ѽ"?D?@?r?KUȾ!^?E_,1?@{l?մ`Nl?h?ɸ?/`,X8PѾzДͿ ?!h W(#\?I0ᾗ9L?%6i?69k5;r@W@?m``-pvtB,L?DRԾI?Qɳ?:ܾՆw?꺾?1"?B~  d?9ΊA??=|??JX31~?EΜF???0hW?0*?$(LOV>,?B?ٿ??. ?CǿO?:Pxҭn?SF?2›9o?(h?Trrw(ز}?2t)lc?0 ?? ?B&?Th?К?ρBk>? ?+f|sb˾??]?Q ..?A??ev?6n?xFcӿCqᾀhl~?1Y?6w?XLx?"?_?()0?M?9Ll?(hpML4tH ,T?[n?TjAY;j?G?U??a?Y Ui'Am?P/#4?@~?-۾澙j?;2h???Hˊy?aw?Zp f?(?\?F07&QYr@???Ssӽ-P`I?V%;?SGO?:BDd}>owj%?MؾUR߾&;'??_̾WÉ?Vh?gL?76>Gؾ?ޤqi?L`?R\k?Lh{?E<}e-?k?2N?}4߾?I?3|oZݽ?J?~4?0? 7?O Ծ^2?KFEm?Sr?]5?F}?PA?IA2$>~x?.5?brf?侃qdRz ?):ƾZ?IŒC:ii?Ct}dV",W?F掾?^:C?b?FBK>?gҾj?퟼?2?8hA8AK?Č??s?1FH?0 v꿥׿?FX9+?P1?'?)?QW ,?'B?Ev^?6'q?/?֨?PmO?5?'Us?b?C쾅7'cǾL?IF ~?/a8?^Z?:haNC?;V꾺?a|X?QJ? ?.|?fU?7PL?mW"zsV/[,D!?dv?J?\y6?A'5Hg?uEp T?m$?:?N[?8%?Z?Vc?C7*?3ܾaP3?SP?@E`#%krf8Z>yt?S5-L?R=Q$3Kk?=+>Hž?/yT?ۿ0J?S?Y?>X?+G_?J?YhBx>>&??I?CKD+?E?=ht=C[?)"6%ؾW{?(d松#'Nt~?H o\0?3\ξ~ !??dB6C?z@8?Q7?Gsv?C5U e?/y?NK?D5?6??H?V&8f[vW^.^?0?3-G!-98(-?BƾS?d>C?/?x?#? FGxV%x?$?bYw?R?h\?7?)ZN?H?U ?S~Mn?;߾W Kn?D ̾?,ھ`?Hؾ<ž)op:NtQc^i ?:?3d?/辿 weD*<<@?I?TԆ$t?Rq^|f?;Z?Jh4Ž x?2>#X?7?Es??[:ĸOl?Yh?[?Q?W&?@EҾɁ?dn?1v?L^8vI?u̿!?72ο?bYTOdN?SPG+?:Y?(նC|[QN?pM? ~yX?$Vu?atD?!?VK,hF{ Ǽ??NQRPKnv6b?M73?>?SS X<>ڿ[$49??)TƋL?THoN۾@|?Y?~̾&v?Kjx @oM>FܾSL?6D\]SGFogJ?>1*?h ?1TϿQG $?4V툾w.?i??I%6F?,?I?/ߘ~0v-I?>%G.?5N??,0N?7!? *?9cx ?'d?G`KND-%ȩ`eM?8OԿ(!UO?*l??T?:t˿,~׿`x6'?ARn3JUN?g_F?, ???-8?<-?'hܖ?@?BP?*W{?BA?jm ?f u?k(hZ\`ڏ=%% ?O  ?DiiFw?32R?5nھuc?Rep.\u?S '?5u?nu?g8a4־h?C/\i3z?81վTܽ&t A ?3?- ?<+?)?O`$߿!W ?xʾk:??7.?9 O"񪾕-Ծ ?5^z?Bo7vx?Tn?X?j??۾_?3>rgd?P8?Hz?4??Z2?A:¾0lD3"?7!?O tc?¿)?;!.U4z?l42,do$ٰ?KԾ:E?3$qʾ8xE?!?2=?]9 5#s?ZJZܽ@S?0@~?6`?ῒ%?.NƾKn?B#?JnN?\͞#ӄ?1?50Vðv ?N(fL?ཚ6?)i?Ra?!ͤ!ξW`?/ ?*?)9;O?Ehѽ*?=e4"?9/?^?E.0?oD?%ž6.?I?[N%?e?[%:?-% ?H =?9Lw?EQ?m(-꾁Ե/?q,#?oh6?ox?d?<?dР?^?3Ӿj'H?Q@sf?6h?[nRȾ6?3H ?Zݿ?# zs?6/%A?,uሂ?K&R}M?9 jF进`u?aԿ?D]S¾*;n6;н"?WB?T ktǚ}8 ;Ǡ??≴ʏ&ZDmS |8?p?Mp?ƽཷ'O{^?2?D!d?G?\?H?L?h?Q:a?="?BB?b?XZu?,5g?Aͨ?' ?%`{4ʦ俚!/?2?ܧeȋ?$񙾍?3f㿓<6.?-ksk?22nZIJ?:?4'Sy(?5(E ?]?D,񊾛:?D}x?mM"R? ?Vm?ޟ[y??͘-L?dK Z8,?IH|-L?Z 2PtsZm迍#= 鿗l`I?c?=6y̾Xz?Z9zɾ:ᅪص?dt?ciq?[?c5?8p?5?߰@NB.6)]?"?98?c#???R?]$?P?<(?QX?1JH?EX!Nb?J$?1T?M?AjB$,aorɜ+i?8']?9| A?J,]T(ݘ⿎=e?Vdlj:?<;aM>?޾U A)&-?G_xf?[q1?Qܡ?B.%c?>̱Ie? -?5ラ[>?b9OJ]X ?!?5O?S_O?@?Jžf庾>?)>2?=d?;\Ao?I&@?$-}$?2G?GG?$RqxH?)4?62&-%1?Ih~kU?fnn>b?4"?E`45Wn?R!E8?+?A;?Ͼ?`Vpp{.h?T?V<0.P&|fDvS?MT3\S?L⿂ k,E4?=J?Mb?Nӽ_Ҿk ?Q&w[̮hEa q?ei?7?MH?R?Jn ۾(2?cN?>z $?,෾IicERB?bmF1?D%?J-+?ufC?gey?3LDF9!?(?Aˢd.x̬:l!?0@ѡ?"yW?]8(M ?E?"2?MCz,1c?AL?ID~?Bqx?Bz?/y a@>߿Rs?,󢾑(?9U>c̾Q4?>s ?O)H#?S{y8h+h?)pɨL??7uU%׿?lV?6J?Rn?c^bȾ:Mi?=&ݖ¾ ]X &?2⿚Z0@r?>ߞ?Q!?3Y?Zw:?+0?H _'?Suؾr u?j?BBWzr(Z?7l?oz$:bDDO*y?b?l c?]?E,?B_]?<4?\2\z,2оҿ48h?,F?LH?U A?744)Vx,x??Ǜ5b&Yj !Oe?G?G׿I)+?]B?:?A>UL?JmO^?JZ?_[Mؿ߽`?% 3E?;0?>R&Vؾp⿛uw?(Ԡ?\~n?M޽( [_ þFOԒOJQ@ U?,'  >xP=g8ۥ?<!k rW3оF?9&?Av?(GN?ް?mɾj6d6nMnts?kA3?& @o?oѾ1^.l?Qݍ?+<8SؽR? +?n9?R%"?S퐾I>D$"־"?}#>:?A7k?),~俠hsX?%??ƾo՝?/vNv]0@t?'??,R}5-?j?6?4(?Nr?E=k}?ZF?(?>ᾁ8?9z?.0J'?81N?C!? @H?jR?)Z1"?%.v?5L&?MT߾r?`2Ⱦ12cC679Y;a>l?S0_?"?\?K4D?j8?H*툽{d2xv?ؾG?R/?ZTP?+$붾2M?29,ž?0ZCǾ! ΍p~$>4lVyt?<-=?!TR?8?V_o?W?S1?)?n??xQĽkrY8ҿw?=1Oj?]j[4俇Ԓ7e?0{?fE?[ȩ|t[Z h ? `^"ga?V ~$\۽B?LE?1X(v{?MX?X"d$=Lp? u&?Mv?7.?R?9$ rDBN?H3?|XA?1,~T?;j\̡?)οzl?JO<ľG濓>?VXy=BB?:?9jÐ?*?"]`J5?@A8?Dh쾶ɾ{ᅴ)?TS|nj?/ ?2վK?c?.lJ?(Dľh?V?K<?-L?Y?0r?51$H?c?F ?: 3?/ ^쿓{?I̿N:?8侀jWgr2e {?x^)f2Wn?Hb?G^\0=?9z/a#jxA? nzʾdW?N?I?Zb?ZNdi_].?O;|}.?OL)?: Y?]-8$?+x?Nd?6c`Ѿ.s?Ql?#0L-9IX0ډ6,?(ez/?>?"]&?W???T)s->?'y?DEվ)睾4r?9??6?g?(rN삾裾sq.?o0d?F,Y%n~G4W,C?ZԾq$?D'ZItZhULNt|z?Ѿ:@?Ge?E?7FB?,ͽ5b?XM!?J,{ ѝ'fֆPt;z??L.0L?Bn)?NA>?BD?%"??8̰?dʿZf> ؾH^c=F?Fv?9å?ѿ+(z$_rNC@C?EN?)??#ο?^?nP?A "`q$?Ca?$`M4KUSf?7[4f,쥾޻|ڸ?B`.1?Կ;(=rG.?nf̽tl󚜾OYj?cffsLdǣ+s%j?4r@hW3M ?_y$̿?YȽ???FC5G2Pސ8G 6?}?&C%^elp6=Ꞿx>x\N꾠?Be?D}?/c .忝?/U>_8>ZrʾsVȿEbxk?^ͿCrJj`?S<0?澱 ?9hEo?0 k?9z?*J|?!hN?7`6ڿ?<l@D53?X)?Vz?U?H{pG?A׊;㿭a?>?E?>,?D?U ?YX?9?)㰾!?*ҳ2J+?E?%?GϬ&u@6?2L$?>|?&?!` )-?I1t?]8c?њ?[~Y?&{E?v?/ڼ?{?YS>?aSQ?9/?3JtfV?E^従^ξ`?IkY4?S"܎^ LTp<0NM¾7s?%X?4 ?Us?Z޾(@?o??GZ?K`4{O־ 5®h1?2Խl?JkB0?i,Z?#?6ҹ?Yf@?!j?(; ?I*?9>?*_q?4e?CQd&ƾu??@| ?6(Ye?^.?9޾?,fN?7=?.?*g?Eqӿ[ȿb?Cھ+? @1?V@?AG&?0i?Hi^?8TW?UH?j+?9?c?;?* ʾe UqB̾ub?8ھ?)F&:E?_? 6?A?6Z]Ř?;|?Odn@w?,ҽ?w?Ap%% #?.&K?ZH?6?@AտTyg {zV?+J6都RvVM~&j?@k7?Q?X?n,Z4?V1S}9N?_`R?@kx^hʺ?cp?Qb?<Կ20)@To?7(<𾌏@?`̌?=x^S.1.?m쿾9Rú?+ W^_at[Ľ>CI?6W?Ǿe C?M?G7>?.^ nfvHW?EP(??CX׎N?z?7f x?N??G?%7* 7]?B*fa?>?5w⾐e?NP'?fi,K{?,'4?Ȋ𝿕ٰ?k?9He?4m?]?H#g쾄¾p4@?G?8`?2?=c*>o?L(¾L?Pz??XN8ֿB?9 Z?G%,Cw?,uZ'i?$iܾߤwLy?42?B5>3 <pJi?Yf?4Ͼ poVN?OfZYxJZ}yD?,t?2jr?DN?'p4?'*?NjUF?98?n|ľ0Q?ia\HϋS?_p;Uπ^A=|už@{?S;>оٸ?Zz }?8FZV"?WJ҇fþBu?Cxv?E?h]?Lt(?Ȃi?|OD?D<?Kx'yRCdZQk?󗲾=?\ ?9 O[?Q^??GavM2?$j>O?Z,vPʾ10?L`پԾCn?vϾIΝ?2x?Dp?E6Nwaо9 ?+8?Z:n3T?*V?Asv֡?){?'俿`B??B̬>*??N=˾Xо?.Dq?$7p?K5i?K?'4_L*V?N.;{?@`;a˾R>?6?A?@_3 ¼9W$?#q%οSi?25B?lFҿ)?@?J_H??u|?0X?&ӆU(u?UXU@ؿ?O3*>(?Im?X ?IBvǐ>\%+Gt~B]?/r?;}l?H⾇'?/[ V\?[?DV?"E?E鿲?FeZ`r}??zA?S? G? +.?L'^?ER%š$[Nž.v?n?1?[R8`m?iq?1y.u\IH?' ?ht?6n{ :`${-2?D&k2\b2~d?10|?\lZ?iB?+D0?FVy?EbWm*d?ET⼾q=?Q?0d?In9hg1 Vc_?8Oʿi>ο#?%"hHOA?e;(A>3`?+?;q?ذO|\f/&x?J6P?M#^(?6{?#?BKfh>ʱ7=P#8"ʽi0?gm?PP*?`MR?4?Y.y?!dþт?2.ؾEm6=?D@_?G?\ϞlslJTi?H^?!7$:V`o:5澳'?#g?`pT+;B?8?Nk,V2?㾢?3܏$?Ba?7 ^J7\!?PdW#h_I;Ix ?.~?+d*?>fo$`fv?hg5E?'h?'TrC?%/q%(#y ?>+?93̾Xo}\1;?^?~?G ?RR-I2@p?\?BM2?+ 3 ۿԾ<?+E?SyL?L4@?F̿¾|,?oH?9?۸?YU?+ӾoV ? .8?'?K?GT?g5(?$?E5B.?w:Z?>&7uL<)??DDnk?q|?6 ?4vQY?&?&V?9?:3|\? U?H}z5V;濕FD??FH?fu?I VV+ b?b?Z?alNsQg?Io>J"?P7?/??k+Y?VMпX'Me ?F?vнl?Bоfs?\fF)n2%?5?-7P?/\5?.wEER?9V_) }?I/??$\ԾV)i?I ȾBrxܻ?+޾ta?ބk ?,?@?A1f?*?I.??G{R4庾xX7:?L8;.c\?Lj#?mٽ8i?@?Jҹ?+`1s=?Ѿ5 I=5s|FO?AG?jޱy{@Q?!X?.(F^?H~?(?%?S,?x;||Jn?3I?#;6̒?[ _yU?8P?Ujg˽?E^$.zEh?Sܾt#OAƴyyI?[⿑nywtNog$⾮Q?x7?`r?C~c?FTl?V%?O?$^^?84mg???{kq^Yj?R? (?@ü=1[6TR4?[6 xоMLW ?>|T?;am~B?OdV@?--?D(?LQ §Zb,?.ƿ?$Kd?$ؾpP0C??[?=.!?^d#?AC?,骾fD_D?۬AXW?S?"? `[?+F?G'?8~? ?Civt?Neþl?AԾ>?;Tok羈?7|?1æ Ӿ)TW¾Gd?C y= ?2>?,?=T]?V&¿?f`?^?B+Hl4`4?!T??C b?=l?6{᳾O?)H?60]0?H>?:?:ѿ*?܅ǾYpM.@?#}X? ?;f?<3u1?[w?5&:?>?+W?щR?ƿ-L?AoX?ߓ?:àsRBc?uxf= [?ً͢x?,Y󲽀4mIyfŽ4? ?aQ?Y?jy?f0 wy=[?J|M@>˼6Y?]oZ?T).?h7 LG?Q &K?F?|I𿇄\E?voI!;RPxT[?Dֿ[?WЗ?c?, (JF ?9y?J?DuB ZS?Hy?LXc#?EL$;˾T?VQBQ/?>n~?Iʳ?Gx*?A0?Q%B|ҿx;s?˩eB,F}?7̿?_J?X?E;S8/?8O[,~?G?&k)Pz)X|ncإ?i`?#DЪiB??;1?;'m?K6?Kf?'?Lomt?,?Xt?Ta.5UP?+?V?:?:ܾJ?P|?R&6i?>7~Tn\?|:<8?@s8x)mBӾy?@0Nt譆?Cc@qľg8&mu+Fˀ?N螾G %0?a(]?y=꿝,&?J2Pcz?@fN=\J.{?`+&ξ|'ArRtF >Y?E־?8$?B:?,?6/Fl?[d?eU? 6NZ:gd?S&?I?P?DCo? P?K:C>3&x?GG?{??&t濙Wm?@U?@\2Kf?aD?.r(v?N?jҾkmξ2[~?No?4?4CQA)e?\4i?1{ |?K[I?Xy1 b?,k?%R?Tlھ?;?8f@?T%L?ɲ$n?6?F,9H?f ?8Fx8oڲe?A! )K_OWF@t?kS?+ƾƾvK:?>4 ?ZKO>E?9n?@n`?5J,?C>?W?5x?3cfn 69+>b>.T*@ +:$>?XԾD?+15[F?꾤 N7@?O?L?C8Ou?2ò fEGHT޿տC?aDUp??/"V?L?*PL?)CaCz?B!Bƌ+ȾQ=|د?Ah?&D f?gAt?FKv? ?E??K8vf>2H_2%p27?3?fdT?>?Zs??M?V>?ݨ?Ow?0;[(}?w?$?Oj?8i)2:-?̴^C\?C'rv?E2!?4۪?(g?0<ƾC5?(n8}??T?n@?%[gBXLڙ?BE ?$?#Q3?-?S?9P@f?> =?$Z?,9VΪ>0?&h?2-B?k <&X?'tKk?XWM4?M?B>??4꿖?I#|-|?/y^_Bh Cea?T|?Rr?P`?Z?ʾ/>My]?E\d?KM;X?cоl?JN?FgQ?HFchuK?@޾N?*?F}ѾG?4:$ ?KbJ? ??.?q; n??'6x?-@S"0? 4eT?,?/@4.d?݊$?Ei?1?16CCs@39*?2{*?7Q?N| #?ws<2h?t[V??ۆ?a"9`?_FVz?"|?7?:?W;?:*5@?).2?gB?/P`y?>@; -?W?Qo-W?nҾ0꿑?Un?N&?7s??IĐwҿҳA(>?I$оv9>ړIff?D?,%j,?"(?J9ʾqi@?B ?YFwV~쾯?,οՐG/L?T1q& ?J?)O?)P|~?/ ??)?NJ?G 6ھUlZvʾм?7cKXX@?^j?Wx??:?. ?!ɂ?+ԾZ? YR龏(?!e4?1_n?-@9B?!? 츾Ӿ),??oྈ?7Z?8Eu(za}?![?T¾? p$?0Rq>il??G)??wG?7Ⱥ?;u?!f?L|^ ?#Aa??R>㿣b?'n?H?>5?^]?Z꘿x?fH ?eپqQ5?Fgվ?A0)MDܿ?hY?S^#E!t?i?cʞ- Uk?,6?jbt><ڬ"ƿCI ?8/L"eJt;?mK?Q?b?1b?T ?-V?MT?:CW{K?-^I?1RF?;j?,?T!n[?0"??!9?9c?-8?.$?M,\iGA@>I@M @C?0F?RPX{!."-b?,%?U ?K?Sj?r?w pg?"ȾvF?&N{n?F$d?P?:H??:?!i?!?P;g?&I[?XS@[K'R6Oɥ[?0yDN>0?="B01?_?2kľe m%?odM?;n{Z8n?/:?M?>?B=?/4?!2&?/???H[J&9.?:^?YI;>Їd?>?Fɾ`DоM!;zpп?.D7ĺ?YCu7?\`cξT_H?ݹ8?tw?C~4(??T?Tl- ٿL9?Z{n|s;#+?}t9?YX e?NDν򿉻l%N? q9y?Pt&_?=?u?D?"->D? G.?d 2qI?R 4?V?U뾊/6`ľTK?Wbn?;nй^O?bd^鿙?8(?JF?|j%?@6$[!?5T5[?9k%ILM>?Jٿ#?!߾UI7I@??:#B7CpA?WEx=?OZ?<⣾egLmV?sݾ#0?[n?:A@?=V)?XOR}?&>uLz?D4?PK}?ru?BҾM??Pn&8?3L昿+2O?I!~?D: ?AX˾K[C?%˾ͦG&A?@V}U?g涿3?fi;?x?S_qI@?{`"?Ul?a?Z;?z^>uaB6?S ?8׽?R,Z?6B?jnwj.?mi7^?B?;ب?@|?/?씈^P?WU?>?NŨ@(~?#ؿ} !?MU?]?b`?Eh?V9g?++Ȝ{??VpB?lGp?b?&|?Y0??l?J? E?:?.?ƾ?:?Jgd?IkB=e?d?B1?9=޿^7о1?7CjW@?<r?:yM?=CNNB2DK B1?$o?FK?9DB?EɾB.S?# /\_?^騿mch Pn-ɻ>UA2?%a?2~?_?c% )?I]??J?O8?1?7?A:zߺ?6l\[B?<?%Ē?GR?f?AI'etC?Vn?Lgʾe@ܿX?WL?9㾊7@?6l ?<|<@;qV?V7?!K%N? ?H*%?,8?,wWlD?7$mý~?ڛt0???Xо#n}?Xvl ?5ѿ>?`!`,/t?cܽ+X?B ?W.?;R?I|?Vk??J?ODp? [~s?q7D?.>?F(?C,?K?9 l?O7b󿍢X Կgþ.JD?G?bRp?eW?.?N龘ȿz ?~?31?| ?<<2N?Ik?9FzMJ孾#?fjD?2޿u?L9SJ8?@?N>ƾ0?B⾖k<`.++6??(97?k"?'7Ծ@?Q0ҿ?.\Z@p?g?&? :k?c ?͓a"h?'JҾIEW&?)L#ž8$޾C)fr,辬 ғ"?FH"4?)|$?bi?] KN>?"q?ZA?Vp?Uz?,Cx?1??&ξ?: 1?)Yg뿚 ?+)?*5?-˾A?u?o?(?߾?ٯ?J3?"?ك˔>)?Z?V?P 6i ?7~?8)?G^?T(4`Z?MtBq>?翊??fރ?UfξF`?+ؾ?f1k?)|?L ᅳO??2p?"'(=r?2~?.?9?LZ?=Qν˺V#a?H/?5+L8?A5?5fiJb6>]=rp?:9?5` V"r_ .?D&qPT ?2־ տK:?If?:?%.?#Zc?C? T1}>@X?IXi?f/>?k?>?&H?0?D}V`?@??%0?/?=?>G-@?t?C*0#?WW?7?2p?^^> oD?90Zvƣ?.L?@S#*?D2R?<ý? Bb?I\q8B>3:X???A??5%@U9?Va|Ѣ"?Fd󿎺ӿt?2 ?"?/e?O?h?R? f6@q?n.9?#̾,Pg]3QEb*` ?[??Q? sX?*Ĝ?$H^H?bq>߅r?%qvҷ [0m??XL<>rp?_k}JAh{?/7?=?h&8㒿@?B?'z?F?V?AHI???Q?2?d?_d?1Wڿ8`?<@ Ma?.!tu{PkӨ?T jPϾ?F9xѽξ?k?J蕾d]|5,e>єV?+rjvB?:/2ᾨQ?4]?V?5v? j?耂?96?B@]H(Q?0dB?O쿈?wb< J.0? x Oy.β$(HJ?b?C?9c6?GS?k .u?WT*gNb"?O/x?g,?+'?8}?._?릾?Tx?M5j?Rbu?;;㾐? Pܳ,9"?(}?>?>پU?B?|?~*Ѿeпx??2 `3?? V?_9|=Mew*y1Pr?2?i]?嚴? ?2?,G2վI b\UɶtPβ?(HЮu?1VU˿}x?tk(U=Pd߾˾]?l?B L?8s?Aӿ?n?* ->?r=`?H}E?Vx?U??axT?bF濄?!Fr?fRYn}?BϿ8QtO{[|^.{?սr?V?D44Rֿ`q״?}S,D,J,R ?!:?7!2+y?^?OpLݾٹ?Axf?ZG2???Vv?@H/?nlGn*p?H??@'?Hv?^]L ?5追z?T?E?7c依=?.8}sƽ4,??9t\?fuma??!:c?<[+s?8)ZYÀ?;hh??Y?CH*?-?5̦b?)2ĩ?:RM5ek{$lپ0˾uC?7?3_ѾZ?N@y?19%?? b?1U?Q@?>L,?8(xz;?-ǘq?Pu'?4r?eמ<}~俞K?T:?5?=Q?%'?bp?`4+)?ިp12x𾍭T:?6 6?e&RE?6c$y?/3?N8^(?&٤?2?O񽺔?U?SнT?KsϾ hC}y?5?Q{P-iп=UG?KH?߃?P.?]9?Lچ?}?S10?UB?Tb` ?EP@Tl"?P>kϾtq >?'6?.b?/h`$,X ?gJG?6^?T ?uyt?i? M?Bev??zP?=$O^aa|sᅯ:ؾap8J? Sʾq?;_^4?*Q5[?2Nl?0 ľrt?݈?(?D@)?"쿙E d?ئ\SBP?7о;H4 ?eа?.heϮhܹ?OΆ?3 ?=I򾒝$E?9*?V?as?W?B1?+l?X|Sʾu?T!dPP ?5?t?b?VQH%CU( N'JC>Pi^9 ߸?S?4tgؿܾyT҆?9ĺ?;B?16?꾆澚8ؾDe??i>>?;]۾'?4۷?-R ξBm|H?>ԾW.?+a?-wѾNB?B`?aTlྠ?8O Fx?%2?68:^yR?1~?%^ ?*?=e?82q濃'N4^'n?HVlLP?͖= )?XwMH4TXtqҿ?Ozrv`ۘ?> ?)|^m?Ҭ5?Lv? &>?d ?@R?J.??O/?,bپ1?DQ~?;G?"TExEt,uTup\'L"1?)R?7?0A[?A+?Q*?85W?1?@C?Ů?3+?Iɼ) hWȉ-eȿN⾝xÁ?:?Fn??^?>??Eľ?#྄PοU? ?4R0?J?*?{?S׾h0Ծ]26?ؿ'Ҿ?1qӊ?B Vuo>ܘоi/ D?F`r?޹?4]?<~NB(?T*_?A?P?^?r8{?< ?Fb@ ?)"?.iʾSܽ&꿦WGY?B'?w?//?:ڙ?X?7ƾyij?\?7;Ręվib+$^?: KP?@m H?6{>Ծ?חy?A%~>Ӿ`?F(?5cF@뉾1?}ȿ=K>?Ei?aNTeʾ 8 ?HkbE?Zz?<υ?0?/6hlݾ:?JnE?,+?D ?P=?FH ?<(' ?d~ǿaֽ%V??rc?9|B࿈*f?VAD \?7"?5(4?4j;?6$p$%ɋ>)Vkm?H(O9¾3/$8Gǁ?5!%P]1}:.?N?$?8 h?o俎?D?8tz5!?)?L6?'?R?=)\?E̽?Mܸv}dS(Tqbfd⿗F?s?Ev ?XW? ? wP?(1q?!ӾsQ?!Lh? ?|?Gce?h߷y!w?}7-놾x?%5?bs.BO?!:&`?&M>ڌ?4氿V-??z^K?72+Y2w?*y3V'v?5 h?~ ?5Iho?5HD?c*K?&? .2?5񺾕x2?=nUT?"3?)?v&+?DL\P%3G*?5쾒?;?KҲy?*ԾVÕR?=?ߴ?Y?.?C?+?9 ?r?9?$FލlB?䝿sZ?(ÿ>dk?B ?14ɾ!i&}&ϾoFzD?G?*~T7 )v?tuͿ)?"lo?V?Ԇn?!?M q?\Mq:>RR6n,?/>z7  ?q??D?Xx?Օi?7Ky?J3߅!hFVֿ{?Ff?@{?A1?K2\;}u?TP?D?l?'Jzɾ]>L?HͿ*憾 :?Tɹ?/ʿ?9z?3ȿ@v6fp@?s)1? =??GI?UuK1?. ?c<ʿS?E#x?>/Cؾmf?4g?-|@1*D? >o?,?bA6?OAľ[p?4-:?Ab?; I?z(?@ ?h?q̱T?N\'?89$wW-?4?#Xپr ?%7w??Q#R?[j?/n?1l?,"^ _ؽA?>J u8@.?i^ɾ?D>žs]⾎s?3z6ȾE?*>t>E܆!0Fz %ԾYt?#\Ⱦ>(K?2x?:O|l]hVXnI?1.?7I?43+?'Ѐ?00^πpJ?&&>van?!!?Vh?[?7h k%>TQ?63>椾w(?B.d@??Ծw??h9^ 鿋%Pc4Sq?Iql.˿%J?G?^i[?a(?3]̿(Q y, ?,@? F?V?BK ýP?OS?P8?>")us־Uzfi?@?>[M8v{9?$??1,+ F :?7@?ZLPV~?&?Ke?6J?:w¾%?7G`ھ ^s??;y?9*̄5ʾ3e?m:ިz?"Ø?M?Ih5z?:e? >֮鿞g?5R?ߧXAbA,tA1@?>?7A.?(?9 o?>{? 2<0&?82K>? ?gMT.^Ie?`K־1/?YUµ&~}Zz??7鏿aVԾucǘ ;ԾTtLJ#0?,vBj?9JdY#߾t ?m"?H%S?# mv?,?D1?D?W(~zld:?! =o?Y 8?aDZHmy?+?U՚??3=?@?"D?>?VܴM@kx?b?5Jy?g?3d?uH;vlZ6maE?S?Oz,"?If$1 dD,?7cKW錾|H???w9?;lb鈿?E@d ??)J͇缾˸>??[=|+?Uh (,l>N?vؙ?@?Q&HT?3]<?6YH??8?${?F.ͿBB4BBA9@? K?.ÁYPWR?7*Ǿ%Pa?3Ǿv?.C(Q?2?2?+.?(HE{9ne쾭f ?E4?3?Y?L?0/ա?>_>Ɉ3T?GU? i/rlr¾gs6þKuY?F?u??Ot?+4?:ph?ܾQپK?ސ2?4?=?,&FQ?G5jf{T,H ?:??8V? ?WF"=՘?<ƽR?TiQLhth;Ŀuپ௿?Xe?0?B4hc!8P?W~xKھh|+Nŵ_[ \^?m?EN?%˾&/?Ib?!b?>?ab8?X)?I0?8B+?-y$?|+?;*v@vq?@XԾݢ?3>My?.t?<)?0x[?"75?0^([ǿzr?Ծ_x*@?2^ht?v?=F&K 7?YK >uL?:=j?!cV!?W?g.b;ھEpA AO8>V?C?*$媾X i?9?; LO򿐆?KBJŜ@?f?>tFhgt?3?J?(AV?85?+|JB ÊBۥBwB6n@N@?q?%"~>_ƿG? N?C?69Ҿe?E2?M^]?!侈?2ggzf0q'Ⱦ'=l?Fmpz?s?;r?0ؾ6?,ɿX?.|Zd?䷿U?"i?tЬBM<}^?BV?JبWy ?ILN=h/6]ھw?%!>( 0??8:$>D?3τR?o>߾s*?+Z?*/?[?vh?>R2&!dD?-*;Ⱦ 'k{4?c]D n%?1Պ?Ec⾎ P|<Ї\fr?|xYí*< ?7{?Q??jS4ؿF$־M-?:='s3@9R_?Kz?j?' 꿶?2ã?9"'+n͌*{?t? 7aMLLaX?$j?Hྯ[?(,ec?6 ?>~}~R?濭`/?Yp?)?xrB|?-y?-ؿ꿗p?UQ w{?FIlоYZAD>4? @???:T?!-`?$jN؁>?Î?c־ ?{wྊz?-=?E;^?2d z2~S;4kľ%>[vMt ?VYx8%?th?qcV?\ ];K?;T?UZ?Aľ)6?վ?1?H ?#s޾F=$?>d?=?I.yl?g? |?W_Ľsn\>N,LSvؽ?[?N$s?MK}?J?M?$?ZxC?F>?^?Or%J?M"?+6?&??JA\V??꿓 ?{ͿG?EĿy?39?/MHM7 v`:+?nX9?=ٝk??=?'¾?3 D?FlmW?*R7Rq?O澢@?^ݿ?7즾տvSV?[1iQ> "Dq6#?>'?I?np? o?FT`r!$ܾ`ϙ?>>Hȿz8 r᜾=f?2?Fܠ?1CR.fWZb>02p?=?1OX?6?E?0?/㩾?<`?)|??bL&>eǿwN?N+?<(M?ؿi?Kez_?I+*>?A +BK?S4?+?DgY~?2Ͼ?=?Y?C͸f?߾sH ݊T?FZ?w?[)tk'@9? ?Df0? l> @*?BONܿ?4?A ?1?=L?&5Y?j'?Ϋ?O?Vk?r7gFF?SW}̾F?Cw7?h?C^?47PKK>?)ʯ?B4往:?@?<{*?V5Sb8'-PῑH?1iuxJ6bV:`"Χ#$?S=?4P(?(Efsmo?ߟ?&.?L@?.? ޏ???]4Z:%g?;N?FPZ=۾2?;?>q@>~Q?H#F?M_*\l?S`xf@?0 ?^PԿy5?N^?EF Uq?Y;a-+?%?;b8ѢqPT?AY?SfX?q?Aÿhp?$?'+ e'B?Pjjé3?QւԾNJf2?AJ9=.8'?.Y4?L?:b?>q?APĿE?Jɾ!??gMѾ6V+?~#]H?T7?;"CDWkn)?Eqqc##7?E遾?C]?,liD?~(?Hǰ%?醾@Q?1?He蟐1?@1h:y?俘Ћq$?䞾x?-¿4jYVR[^X?6 GJk?D ?L޾pD>?#\?O?K*[A?d?)1e@LO?R۾?B?&)⿖ཱྀ?ž?౳p?,d?B h<ynG?CM,xa= ?N?K=Z)ѓ?˾` K?>{ȧ?ce?4zȈwD?&函D?h暾q~?78?acy\^.E8]$?Mj?A0;R 񾿩d꿖?a@B?&9?SLZv2޾r<'? .^bȪ?F,?:O?OP!?3q@?>?C=3$ W<?-o/j?E?L +U߿KwN?;ƾGu?%ʾ???6&Ҿ m`Pv`G޾,? ?m?.?⾂Oy?!?=0o࿤32?U%$?%Ϲ?#̤޾?0?:?+x:§l!R?><??K?S?]?&0;H\%?:r?@0?Pw?2?K??I~?1"Xj?'x6?$Zj?*=?7ܾc]>(?(r?]N6,単i?Wս/\?YO?\+2?(\?C[9ս4yTiԾitJE2 yԺ?/Naܔ?A,?61վ]?QZoZ;#j?4z20Z0?Aܺ?QBTRBBMB B5j@r?1g͆?1g) ?,|?ah?=`Ҿ܈~/:p?Ŷd#Q?]J5^?!??P?@;? $T?-ӿ??<:\?1ON??.1? mD 1pA??"ӰLҐf?&OHI'j?L:!B?*?Lξ?=OcsƞOIy^{gwb>jQ?7h??)rZ%/? ?=*? 92?@p1Z_٭1d|J}@@?Yx?)tȾ>t x߰?3j@?0o]?.?51?$H f??)vNn?R?fj??j U?P?3?+ľhdʾ?Ts?v2^t?o. ?mj$`?iqÎk ?L?HR-)2!H?K_k>[>-:?)dz?Ѥ}?VB?8[Zq2/+Ѿߞ۾^ݿ(潪I6?`?-Z-}@5з??4-qR5=XV]?XX?/]U|qܬ4` c ?"-?/>?%2=! >"A"(ABPA?c5?8RCϾjΰ?3t_ӿÿ$?Yvfs,?/Z1A:`?I-ʾ)/?.)?28ZjY>j?:;?-?,(?#a%ᅯMJ f1?kYRžWD! aIyNN忣 NE`@?"o?D~?+辯@r?%;J8? ?P:?غF e2P?I??blо] Pm?٭?OʾY)>}S澭(?7?ˠbؾcھpVǾ쾚㺿? Xiz?܌?`h˾@;K?ʛ0-砾L_??I?Gо1)?,?BTxO??P?h?3ǓGzZ?WD7PӾ 9B`?ȾA ?c ?D̿?#kyĿVM?MξX&Juiо?.1h?f?C? X?h?>F\G ?V`Ńr?!`7hR*>"_D@Ͼ4x?' V?.3&b255 ݾ?p ƿZ`?*?8׾??(?>Y??5?NT?;hwi߾WIKо|>?H?J3?ѣ?0tN3'?)?; ~!?о(3?P'"?A@H>7t?&??*T˾[ Yls?8'?Vly?'l/Aq??p?'?P,rMT?0Q㿞M?dF?l?rCL?2O!S?c3;?!nu(?H ;y >4D?Hf?a{?M?=L %?'??Z?6?kn?C<_qEӵ?*,?s>qAuy?) A?4?E :B?A{1??ڽ?8W??R$^0Ƚ?P֍ ?Vo-?p?JE׾44?U^%齲섾\ܽ$!?1ˢA?ꌻ9+?0f𾘦\?~H,? [u?TL`Px?M?V?Cm?&?t??/f? L?&,?5Ծ?j?D?9?sH??F2?88?..?0g?A6i=?ٰ𾇩놾.E_J;n~ ?%޾{ܾ Y9N5R(`?mf>y?C/t?X?3d5#Z6@8??Q71?߯@h@-@~?ÿ?'3&? ?I}R?S BBw?啻?7?7D`?AFl?Qy?ھT?272P?;?A]?`:d?8?+9-?A?(?AɁ[_}%?Ix?E$ny _?"⎽0?&?񚿋?7%Ծ5׸? ?Z?Id>?.z >3(𮿛?!+BeerB޾}?!-?@24?blT?<r??^N |r?\!?J1 ͈}?]:q?QA#?9 :u/?=l?/_?;ο~ª?K־<>;{f?mkolOGCiR3)?Mp?Q.?T7axk0翗|?J?Kxy?;V?崗I^R{jQf=<>Y?ҿ^¾?34?3F1ȹ@?p@77P.?.?SE?ICF+Z7kF%? p#㾽,?A?D +쉿6uC)1f86w? ྔ\U$d !? ?' As3^T?,PF)t?@f @jABBBCC1'BB+~?"?Sо@j+B|?7?Ӝ(>̾ܳW(xk?- `?NNHԽՒa?T ?Ynb>R9?N>{,H? @rgʿ?f?ʾ?+-v L9j6-FK ?7Kƿ]??5xۘ?!~E?7?ξ?4Ku?3?!Y^hrg6O?n? HK+?+He(dʽ#Rlt>B#>%{fzKB>սv;J"?.?]L#Z?s?g I>gT?B&ey'edbZؾ⨾aN翈b?`q?]U萾O?ot )8?Xx&s?F^?Q}?')?k#Ϳ6A?R?0@@AnA<@z{?M? Ⱦmվdi辗<+?=?>(v?7ii?&?A$خՆ?2@C?@?B ?E!?=ȰLK MMde?+|N?-p|^?ѫaSf ? H?M?? U>?] ?)?[U?U?ًiB@N?b|B(lX$D>ʊ娦?QdnҾS?(/??8?Ṽ?S?V?p?hHu8?G ?ݰcr$ro2+e̾: ?86D?T_쯾s4!??dAPp?GpOS 1iU?/ ?k `~1+?EȾwEgԿ2Gg쾭gؾHC_61̿R?4?e@|$??>L7E?!?"/?Vu,?)7kޥܿ7EY?k޿ ?9M W_P?KZ6*Hɾogp ^?/sVN?7 ?@jB?|?N ~>|u/jם?cþZPYþ?er?.?5v?낾yEFizv?T &?-??c?*?&.?o ?G=?is?r)hj?99 "?24?Gz|?1N|`,?W?&>7ػT 8?mu?KL?FL6?rN꾾?g82?G߾Xp[0|S#P5ӾR?> ?6Xv <=?m\ 19^|?dHܾ\ PP8?CH7?:о- 8̾N#L?(hgl׾?灾3\! 2kQ?I??Ѷ?-T??SӁ?z?g9Uƾ@"P?1(FM?۠?N]Qۙ?AǍ ⾯ƾu玿M&>f ?/ExEf?3yտ?0KjƋ? >2;g?Ic? ^Nw?H75?5d,kp?,gK?2Bœ w .z ?R?洂? P*?,J ??%/?Nhv? \_?IO?4ib?# p>`?M?3tE2*T?cP?$俟>X?B?*T? Q/ηx?U?Sd6?=vZ{R?>J?]о bQݮ? {r?"l¾&?*"L?!'??8?D̾9.?%b?H‡?@ 8䬉c0(ͳLdff?%&4x!,0A);?)hC(:3?[4?BV%߈?}Uo$ ?7M+?DU?QtV??YLһ(?D?VҾ'be?9Arlx?CdK?E?GED?!C6/$?Q35/?b;G5?U*?6F΂?ؿϞ>Ҿþ_'An?8Yth?8LT羫`?jX?eKr2?k;&?B&o >qn??,l?k?ĿO?׿_8?Ҽ?2@txQL|?"O𿓤?'1I?1e}p?70~q5?:b#l.'6I?6?3?2?;bŘ1?$I+?A?7(eڒ?߶!?g<TO_?a?*D?5n?݀Lr?8vVʾ봾l??:k^F ?2_J$trr־?5?0 q?CS?.,׾F`?#?=D}?!g&>޿>?&Ă.++w?5??>?t?TZ?F?Fb.򄰾0USB ?a&?=/n??ݾ{O?*н LD辄4%?\ ?NGz??kҿSῌɾ3?b$QxTyn_͟:?Gw.?:e2?8濅$SA辱+j?舾Sl?/>?cmϾ`<|}U ?Ht\E?A?b?R'?B?Ur?< |<3?]?>H ?EJξ?("S?hT?)IX?Y ?|? '%[._gL?(x?B]ٿXdIW\xDzd>Z~3?SľLxs4? X?;b܏?n&oj:bQ,?>??b>?*Ym~@6B@7& ->t?(R?M2d?V1BپHz64 ? :0WKק54%?4V)0?񆾅M?+Re=ֿ?Y~o??J|j,5s?/|?f>+8NE#Ü?%U:??)?gڿ?+@ uN־^?Z??=:+X?"u??=?fԾJe%ؿ?U~?[l? ȏ6Ҿ5 2߿sI??+@?&/6?m?ME:q*>#?٭?HT]@? B>F˾DoH?WZWxԪj*{4^?)z?&{(?{tߺ?y2ξ>Dr?1$?ꨐM?4NnRKQ?KX iоEq?4?Oi?K ?* d*>6?74???/,>{&$K?..բ?܀cМq l5rV?9\1 d\a#?ߍ?Ϗc?֎,p!Kj?'l ?!l;Lоmc?sAK?| |?69>dbL.?&O.3>?=fi?Jo?Ny?t?S~CKC%A@;J?_?܂?N^A?1p7?)y?<3? ,ݽ?BB?Dv6ٿ"S?(~cp{?! T?@z?+T_P?rMup7?E#?SV>ċM~? f`1?1BO?4=GN`aX޾2J9\?HP?WT犿R?L|l?H~v?$^W?6)?~d]iۂ?Q"!4ϩ?+`r?Z?:TzFH+d)Al\??X?+J0Q>S{|dq ?#@1VT?A?qN?0>$?%a?I؀"J?/.?:R^n?7c"Z?5y??a̢ʤ0?8?-?.o ?0MR?l?7oz?'Wľ813BPVB ba@;.xU5?{@0?A ?Dǘ?0?7??\9?,sH?oYP1X%}?%?,??,Z궈r?#?aX?ܾ1? ľ`*E&H?ob??ș[?},1ٰ/mhO`j?>?dc}?^??&מ+m=p'?>ƾE`:mdJ?bvt0?9v%B\?6lÚ?,?S;?-.?^2uHfJQ?]n$?tx<Ǖ5L$?W[>d? b?/z?Q3 ?d&CG.?A2llM¾!ОLr/c?Q]?:C̾=9?$&lH? ?/G˦?Hc???<ɛJ[Z)NG?H'?j#?MT?-tmX?L*8?TXx"[t?ոf+?6?پD?& ?N־?0?4?$h[=i?=![3ppƾ??7?'v;(NЧX}?/ai4P?q?,M`?/d?EK?G?,y޾*9M@?)?-v?Jg??ؾ?piܾѭ?<9?%?8_? y?D]QW|U?:n?6mnn>?9mE?N}eKo?PM?) "?Fܾ ?%׷R,?)[VWQ,hs?Td'š?m?B?N'@y?@?>W?Swy. Y? '?Q??7;?*}?OI?uh?1zv?-&J?VĘ?p'?'ξ9}?v0{z@M ?-&?X?J¾A恿@?,Y??Cԭ$?$5**ݾLEO?630!?Lv??4?10q???\?$FH ؿ2?!b>#V?8SҾ?྆9?Y?/s?OF?RYw???[oľ?'4?Oޖ>G?+?-wǾ?2Y澉9Bʋ>h|?;$}ua.?)W9RLݦ=?"z?*n?%??H=Qb8DU?XfD?3Z>z?? V?/lL\N*b>{+ܾ?5Ӫ3R?H)?J/ qV?V/%?YM4"?T@?~?J;8?HǾgCCn?RX.c9}??=A8 t?9x?ؾ{'8`?Dq8# ?5쉾A41\|̓?̿R{j 5?R.&A,]u?:?MV8?D^ d.?-V?nf?(r؁ɲ!ZY?*ވE{v?4P?FBM?/nM?:l?X VY3*TL? `?!k?ƾWnW넾*?9x$?$a?#tA?yYmGh?D$1xl?dU?I? .?ʚ?.׾׸.־n,?7?0?Qڞ?J#?EG8?f+?@y?K?翝K/?Ojګ?70򾭐?$>>?`=]?5ξ3+?#>ș?SG $?D?<i[?9LIQG?Ejr6?uJ?H|Fؾ=]k^¾TϿ?U;?*X*?J?TRW|??L-;LPS1?Krx?0S-e) CP^ ~ _0]k{? )V G?>DA?6}jW4?C˾24 >#?׾͔cOO?PT\Ѥͨ?F*J$Oƾ+b?-[~?pT[?о?˖ho?+ʿ?:ձ ""?NH?LܾGvu-(~V?3?.0/Ͽ L;)?^b??+Xi?=Q1?`࿴W&?ǾE?Кy!oWPn,Qݾ}+j>?KE?8V?0?J?Q!¾?X)?;U#?CBRZz?&l^J?ړg?Kg"P??&6?@>8?6jL$Yr?C?,i?8?(D4&?,U?Sp?Pĸ=*쾒@8?%?m侕ysꈽ2g·?v?/Lm?-3 Vp';toŠ)?<tY ?1A?lQ¾*a#?=v?.L'>Ȍ=q8?b m? e5BރpUs?P?=f_?F?¿阾d䖾2(迶]?NLK&zpd{8Z?Q̮ؽx?=:.VDhVP 4?BT?6?G,ZJ 꺾?H?. ?i&п#1?9$?/о\`P5>1?o*\?&?lҌ\ H:d?{(Χ}?E,tC>@Wi?KA&YK?T?3]| ?Jl?>?aܾgY*V?:(?P̊kiM,A?3"#|?'<]/6?/Ծa,:4&d?#_?\-E?LJ.?aƼَ?s?fP ?^F?WVpt?࿝?;fP^?U.>9L?,? O־n)q?F8&}ܾ.?^A?t?>?=y? lz?'𭾍Qg?*{*>?E ?Ü?rZ-?t?k9l>M?TzVwy.i?RXj??Y?U]?E2:?X\p.s㬾`ؾ2o ?=?04p?cA-?=ۿA'?a?W$?7a? "bý|?:P?8޾I<\?@+?V?Jh?Ot *?4 >=?&yξҖ.?9\?pr0DQ?De? e9g-?OK?ZTo,?-5}5M?fؾAgA?<?W?\OV?,kEs?(®۾ծi0>??x?)a`,8?I컾vZ z? ৿~>k{6?Q뾧O?3ʾ]lBwj%?rˋ ?B?.!hB? ?0?FR?$Ế?D*?,?꿣ƿP?> @l ?þ?6V?Z05?<&?ZM["r?B> ?3>?:ʰ??*r; ?=? L6,?6f?0ӋaZs?N𣿣q?w>?4?F@վMپϿվ ?O?Tl?iムŰ?[*M?\7?GVA?.v޾̓濗 ?H?C98e2?ABU?OJ=x3`A2$_=NgP8(Y~??4z?\Z3?L˒?3 I̿?b;?"x?`jqĉlt5?R?e&??4ѾEn"68;??>*n~?)#?H?B?J뿚"=lྫ?SS'?W2<8޾`13sC?3PH H?7궾ۿ ?5\8?J&?,T<޾?-$?K$J?C??8?Ѝyzy?? x?$6?FԾO8'ۿ2`l?Ni?3l?U^_?I@}?9?2??s?!Tx?:>?>>@?A8-?RO,5U?[X۾ù?%z'ާ/.?ZI^MC ?>;g?k???BZ?B~?m?k?XC?V# ?K忑uL~?4LhxC^?_Î탾 ??辡??;UA`?.ᚿBl?ֱ?\>?3aھ:ttDľ_ľi?5YY?a쾑 ?.?>0W7gR`?nQq7?(s?JAӾ?Eb?>E?J?Sj:?`rs?2#զv P?<??W?*fDھG<{cʾdH?򢿩zyFÒ ?.p?C?LAe?G1pj??;*x?7?# #A g??D?ry?2)`jٽRUP-C课[?-d+WܾFY"?Ӿo;? ?1F3޾f?A7?j??Ǿ9O?Cg?KS:־#z ܾb.? i ?::V}˽?}ս¾S@e]i?;pSNJ??7 ?Q8?:?N?]%X?!C?J?߿H 8?4?'v?d?6gϾR꾂9ڿG!dItbYp.?2T@>?2a?Jw?"A/xDUJ\?LpŒN%l v]j?'?3쾆P ?;(? NZM?!J?*ľz K.̿ľ`p8׾@ƾJ?%bX yVa?0?@? :@ERre?BҾXw}7?+?_>_?1"n,̾;n?7?-!Wa,m?*(?1Fa"?*I>ʾÒ/?! ?l?2c_?J?-Q?< ?$*{{B?3|-,491 ?s'v6ٖ?7`MҨ?/V?Zwr{W?CzK06?P0\6?H-];Y?T\?:}k*?=HrE'?K0w|0?<42=?SQ&?(3¾oPQ50% ǘ?ֿ>.P@+x9Ss޾|x?HM0?Nst;-?HY5<`.UfRo? sA!?3⊾C?\SR?G~9X?މ¾b>N~?9,?8pȝ?2sz? W?l|vP X?$_?$v(>wowOH웯?Z]?v`g%?(?+Ys謄?\?/\w?3?.6<8?2?[_.ld?6??-V?_5?.?3(>?B?"w*^ĿI?Ej^?Zn?V[8I ro?[k?*Vuy?;|g(ž*f$?/:徊־?낾@?A! >(־V=>yo@1k=w?̧#!C k`?S0?5eZ>2y?='O|?|? ~[?= ?>?dP??3OC?)ؿ5THdվ?]?x?)?.K?+ҽֿؘob?.}zǽ@?* @#t?.'bq=-?P'!?=l?O?RGuh?:3 $O?8?H ?ɶ(9wEꄾ1d>,?~?sh>\=??ieO翤"?@?CIj徔x3O?" ҾOp /^f?ToS?nY-￘?)bnhrQ¿?V( ?$?0ܺajA?]?VD?5?e0ʾX龚ȧ?*?G&1?@J?9Ta=b9^ξk>L??;펾vPr/m?ľF?R0`?4<]?Lm?⚾J迚 ?0\?i:?̍V˾?jɿ,u?4?3k?:TW|?H?Pz?77?? tb}%?*C?9?' g_T?0Ml?= ܾs?D6?Jʾ6FdBV>eŻ?*⾢(>TLzǾb2>Hu?Hvx3??%]h!v?'Y辅wyԬ; 7bfH1Bv!㘾޿8?U8W?XD?Di&@H2?1.м,d ?5یT*]??bR?zo`lV?REbϿpYjƾ']z&V񺾝#t}ƾB_8ؿJf h?-?DT_@(O>?F01?[{޾WѲ?EB۾(T]?;ڒ?S냿?bW?`X8TL4nƾkK: ;?_ľۛxbg? Ќ? ?E??CB?$VplV?1Ne*̾{?N>>)?/V?Mp^?8'A@Bcl?S]ko?1i}7ƾv]?@_?G>(?#?7˿?1Y?-:?%2H ?̻ f?Ԑ|`8?7 ?I?l"?l; ??վ? ,̾gZlt|k?"=?1?K3?%?1X!(yKA"<"㿛:!ܭ/?2?G¾"?c,|?<ú?lQ? tgbZ?@4<.??pʿLǥ?:qㄾP?Wپ|p?1_ct5?%!Z?;:?H]4B?&*X?[*Y?2y\S Zwp|#Uyƾ-䡿?0D|0ƿu}Z?5O52`u > ?Xf?)0:?/s)0JĿYT%?N'?"? {D?J7v?1B?@򯾓9V@C@hBZVs[?K*?_?.꾍_?FϾcmFOxP1E?6;s1?BҾBYu1GJqFְy\?>o8Zb^?2??F*?aTOnzDZ???KH?E;n?+gҾaW?K,X3־nRRsg e=}2r?$\zlz]~V?4L?󛿇X¾?*w ?l<!?^7#?T:by?:GV??X/?3`?#?ح?5brG?E̢=K0~?0`?+|Xwsƾ7[l,^kܾn3?B?R?Gھ ?i?U? WhZ-\o Լ?/u '*?B?I?5?A?- ]m?8 ⿕Ybs4=`ƨ?Mr,sfo?ogjt:ؾj?HpS?CN}*??Eh?@R{X\?'pGxD~; ?IC<?=e?4r?UISk?O о?+Ԉ?E?k8Q񿠤 ?X?6ɾYQU?rc?:fy,:bW㷵w?MF??>?)b?bYڴ?z\<\־@%?+\>?EI_?@]N2?'B?4½?2ql'd?'?^,?4";Q[mD?CPŒ#{?8JF??L H?8{Z?2俏j]w?UL*߅?' hV?1ɲa5+jt2,?F!7??4?2~>G?9U?B !?D?5j?*lZ?/%WjD_O?ft{:2ž 1оG?.P?'ln'iYo gM/o 5閽0t=6?]b; `K?SU@gIp?4¿G?:F?IT?G

[R?Gq?2\B?8ul?c!!A? t/̿PJ? K! !~+?J|@"c?,w$?NJ ?)/,辡)|o:?Cž)7-ࡿ [.?=?Tt*Wz~??8 1 ?1??2c? a侘R??tX?&2?D?*EN`x\gp-ǿ䊾?C꿐?$B??%8T>?Ⱦ3?)S2?0JN8O"?#f꿒?O*w쾧 ?* ?ݧ!9?B?9kypYe待4}s?'>[?CO?+θ?5n?m?o.!>? WbE@K>?-1?7?S?}b>{V"?A;?в?O>*?04K%?7?!(?*t|>,7ir?{?E>8@?!Nf7{+{6~H?Tþ~ՔQ!4mJPgw?9e?Q4Gοè ' /"?Bҽֆ½ ^?S j9?U=R@`B .AZ?Ѿ\?E ?J?Qo=?ZN;(/}7>@]Vv<վқ;j(?^??[ٔ?l?R86搽ݩпx?%D% ?DN?;?9I/?3/JIFB bľGhA'@?H-q?;?Ot?NIp?;פ>?#?O5? ?4'Hn[J?Iag60?+gFpݿV;/?&_ѿv?*b3n |,?쿭]i'?p(?Lv1]>?ؾrS}oȆ?2:d?Ipb?ww?7x?"tz?/|?'?#?&.l~>|? E?B?-?)1gcg$S7ɹJ`Ȩ cs>I_yKMzN?!ҾN$?"Ta>V? 0[<_ ?Ezž;sn,3M(호?W1B&[*?#Wx,?*=w7Na w]E?"=HM?2J?ؾ .>B?1ܲ?^)?cJOD`?(8?FՉ/M?Mp#w?K@Sg ?P½?5_ 26?_{?V?N??E`_>or?(\N@|?Iĥ.`y랾5o!?b?(nv:?G6=?>?O?5c=l?7C?= h??Q?6=,?B#?9@'?/⾊V}?;H?V?4j#?)B̿Ⱦ_}?w ?2Ӿqbn?Kx?8-a>?Ev?)X"T-pv?Goǯ־ X?'ܾF@ཱྀjx$?ɸ$K7?&?;h:?Wɾu6?47?׼CN΃@Ө?B ??Tν9z|?<־B?Hc?WV?޾9пw#?(?)-Y58I#GK#uH 5vA?:?Yv?<⿞R=?[?67"?:w^X#YX|loZP$ >?r?O)''7"?7 $d?6Z?VDѾ3?G/D?Rt^LOE?IZ߽߿ʾ3fM?G(Ҿ?+޾.|νc¿ο6s{!?MbJu?H?D?_i7,?@2><?6ACӾ;щ -&ý1*?+S= n)pLw?K4?0~q2?D JE v>?]0J ?gap(TwݟZPhoT? 7dQ >?0l?5ڀ \??l{?1C?;?3>s??3@A ۾#?G?Rqp?'G,BI?⦉?a?!HvU*?hAo?PTu?XA&@s?M?^G?'^ʟ# J?!( :?ѩF󾀃d ?60tPt@Κ?*wM?>?'\?(?V)?Ed?FE TNڵ$ю]?fQ ?MR?(Ө$=?e?楑)?Mf?;"lQl>?;`{ -?L?N?_pM: bxz???@[Rw¿>?"g¾vp?(1d@?-`EF?Ag\0,wU?+<(C`e%վY?% (?H8%?1>}!J˲w5?nHV(? ?|[R?#TN?;Ǿt?<69?&ľ[-Jؠs?Jum"i%?Cpିyd?rᾎʾ B?I?:Ll0?=$E :?;%?=q[?;]{*,{B?E⾨4?!?4?V?91~?=Y?M?}g`P?Eg>R3C^n?*]P?0ؾ~>E?)Q ? ?ay+p?H9^|?d?,(޾ 4?'V?&u?6?4?=n? \{?(rj p?HPj?6,aH?#R? 鿖Wnоͺ?CM?Q? J6XO?_>ؾ]|z?4@?" 1?HOD?GHľ)ƿ0?=q? ?̚g%bkn7 f>⾅Z? ཱྀF?MT ?7enj?PcLW?BY?4?&y?#???>?5?̾R+?$j,տ[?F9)4G/0Ⱦi˾0?lP\N7{Wv?$3?7?8ƾ8ksF 5?] ?;bf?$?7?K"?~𤾀C?C?X?BK]f?b?쾁/"꿡| ?!?L)]?҆Í2?*V?3?T?)r?2=7j?f'?θ^H >?*adS]?6Hj?,O?@ɾS?&?D?%h^@?@(I?2q?Do@ž@q?MkUiYr?=sp"??G? ]?G r#v?C?B8?=?l_?Xp?"?;*M>ÿO?$]D?%궾ܾw?O?>羖G߿~ֿ?Eؿ~?.싾O?K+Fc?=?6x=0[;M>(Ze?H?ڔ?&Or}Ѿo?9o?1 ?64|?bI?7AT>(?%?*̾4v?-ʾ}c"؊?C릿;??F?*Z'?V?5O? (??91\بSտ֎?@?4P?:?1/ ?AU8?Xƿjn?dھ?\?PԽֽT?O'D?P?Hv k4s?^?J?b?a0b?G:zS?X`?I}{边.l2?OSҾWB?(?3z0?0"Hm>q~|?޾q?#?>]A߿K~??Fp?A?fA>~?9u?.C ^输о+,?,o:پf>"?8 ??lsoLJ>XG??%?C?h0?/Mྱ뛿 [?t?<?T>?$X?j#,}~1?Bޓ>~>?ӾxKY?9^?P?%?S3?1̿p?d?^J!>_ucM g?==b׾?)wm?6?@}?ݭ?-?-ݿh4W?&p?ݧ?A?^2 C?οW?U$<テ?R x?i-ӿ ?YnJ?m"?7 f ?v;??B\?"rV?@p7V^M?MP`?Q?=]?Sh?JݢQ~`?Pt0?Bam??ҹ6z?7r ϾLR>Ҏ2?2?m?8 ϯDr?SH"7?G?Q+P?ϕ(=8^ͨ?@:?H?CQC6.lVʿvR?/- ?T݈?R4&q<?1Q?+x̽Eƿ֌>fsտy;?2??(|?)#>??SZ?l?2L6sX??\?ґ?NVP5M?'֪?bžtjľC0?G?0e?* BN>h?*zV\TC[LS翨?y4hF,+n?Ճ?3 ,>?RN{:?rB6iL\{a s?:'^?#?F;gi9?Z9?,N?+S??xξ/%n?+?<Ќ?0:T?9qr?!(? p?=|E?:^?2⾭?@Id/[9??.>?Yۈ?䒾:?mƽ?GC~P=i>9Rk/U?V ?^y?[!?`?0`ZP?= ?^+ʾZ(|#K?Nqrb?(?F3;?"wa?]ֿט?KYҾg?F!?=[fHD0/?S?J?=RZ?@qp86S~QU=3?;?x.?!V:?'?9ھ?Bxz?U¾0b?'!Z?+K?HrJtAUS?:$?Wj?Bj? |?D?@hP?IپYꝾGb^, ?.YcW1?:Do?pTDI?*M?<^G?q?anmR?-I?E??GD8"_$?"?Ckq6u?߽(? |H?#6翆dX?4?5?Q6<7TLEоG?V*[?AÂ&y?$?n>?>^C?K54?32ξ?iv@ B?9h?mM?]>jL d@p'=ʽ ?N?I?.X?^?'p.1?G?Q?A-.n׹/\?g̾a|?FZ=.@\?w\ P?DVZ?SB?H4Ⱦ ?B\悽q?I!?޿P?Mi?f?l?9ڼQPv ?In?ῤQJ#3N,?E;?'"fۊ?轞p>Q%;? `?.?=ɾa1;]?>?LkI7]㊿о?M\??$\?:?>V`?cv۾T)D?M]`? ͳ *?!Z!?"пo ?[뿝z}dA> oj签w:{2?!&1 ǿۏ꫾t?2Ѧ^`Kg0?3?)> ;e P?z?+\?_?,E? l?6$?*侷2? M&.\vI?rt?ESuMI?ź?Xlowm?v?0ۿf^ (B?(S'?B?V2N? hAf?!{? ?3i@Z?EQqdu?=8?1?EfEN.?rw?2Kޚ>"܊>;?DǙ?|?:voL"?\xBY¿jҽ?fa?G1 FܾC/翉X:#3}?D⨿~?\j@NpM ?c􆾖->Ѐ?<Ƚ?9Y0K_> ?p?AOpP?Vڿs?R?;$r?3YlȲC˾"1z澝TBbckA?i?0?U*t{?,l(?E?(;?J3?2n?ℛbu?: ?G?Im澈ᦾ1iӾPs?+3?1b??AD?{ӾI7?3&i\Z?A~? ?H|?8O'?Qbv?5?u$?*?q+?8?-?O8 wbٙ|h\fMcnYҾe?.?(g.???I?-09>?Q~i?)QI"پP??DN"?ME{FvJ?.IyBE?3\?*?%#,Ĭ?(%ai*?䪀?.+0QC\3ūL~tH Pl?2wƾ=$ʾG?0gC?8[??ֿ?A8m9biT?D*[߿[<࿥h7?bz$jq?νni? L?mn?!?;n?v??4)??a r?&kk?H>N?!Dhj ?gDIоk  $?>Rjl|G?. %8&f^̾?8GؾD?+.¾O2kʾ[?*XϾdȾ.No/?8y)?"?!dq?C쿣ikT5ھ#F/?8 {?fR"RA?5 ? _?&?O?'G׾XS{?zF??1\?L¾ѧcN?-Spþ1Q?Dڎ?Z?q96"?42-x?A?U7bՂQd45?7*0x x/??BZhN?U?D¸?:fˇ?$E?׎W?@y?"=9?=P?O `iv2?@s?McȾTH?F4l>y"?Ly?h?QQPd?#?K8L?,B?K??HVl?!V>?Q?@nN}?&⾹?D|?;?UUH?.&W]ЦXYhx?Y?ʾx̰4?9,ھ֑?+ξp̂j;??ҥ?%Bk=!?A濑߾ ?<9 ?N Hr?.?|澍 ?B'`Q澚:m?J?@Ŀ?;(꾑%?+'H]=?Oo?>?PV>ν=-$>TzB4>7/?e ⽕@2l?#@f= .Rν̾$8վ'L=4n׾ ?L1(?0<"dS3?$[ R࿏#D ? D J?7=Eq{?! gO?-X?g?H?Nf?6?D(dL?<>+?lT?=P?%T7ř?Gll?>#ȿe?6xPl?~H?8,?.d?Q1?3P?+ԿTi?ٔ&ԾoK?ޭ?,p?(`'?>ȿv,?Jr?1?6 ?h|]6g??3V?޾?8a{| x?NFuxHup?? VN辅i?Ӹ?-J\d?ƾɬk?4D?8?꼵?R?8?X1&?bؾsJ#? ?Gd57N?8ڜC??&C0?~?>[n? >v0,?ѷ.?.^] Z?e?h?9g)@Bk2?NoQ?&AlI=lDtď|k?R?P ;l9 ?퓢EW7?SM>?<#!X>S쿄:C?G3 /?:rRf"u .?&AW.3?9\ښNؾ=?< ?\ PξU濙luw5g>^1?OS?w=[8yD?{?EtJD?Bjf?ʾ%2>w6ԝ?`1?:Ls ,Z V?#__<#j?Tc7W?W?K(?* @2?N\쿋3𾴭?D_4?H쾩Ɓ?3P6O&Gh\@##ʽ׾?=Dƿ`;0N澚2;??!?qھM࿡L3D??J(t3?0F̾xھl?#:6?=h }?EYL?Kf?5`޾?h?2ԿR+>?־Ⱦ*"~־{u?Q뿓S>z5yo??J?;??c9?bӽ־5?/3X|?Ӟ>?k?!n?,>ܟɾ_B?RAϛ?G?^?8z}V=Ykx*p(?LK7.4q?/j?:󿿘(/ڰ?OB E;?Ks?3ش84y<A;)B @v o}A62:>Ž8bafx?:? *?O?"NZ6?$ -zӹ?Th>?&)o? j?ꫧy^,?J?1% \ >8ܾ^>?L: ?2X*0)?$ ]^O+r??޾m??2fȾ/?"S?<@:2þU+꾵iξ1j$K?*r?$І??Ϙ?6?E?.^?? w?("??;]q ?j*l? ?9 ¾GO,I@杊^࿜[?P<MW4?gL6+?/{? s$.O?42־,?6g?+&½s`?/~H?2r?<nEXP?B2ǐ?7=ξ)? <꿲Ԩz:=2:?B |H7k?nξh-?L?]S>?b?u?%gRu6?h??Mc[Ƶ !?]yξ0&߾?N#?J?%ZÑ\!N䉾࿷0?9@B}>%wk AIaB@&?%?#E?;h? k?T3z?2_)}V?*JBA6?;L-?' z]~F?,܀R྇Q9 ;p? Zh? ?_ľ㿍? `itU??Ծo?;lApe?aW?X?5K?< Ϳ)?/?:?&AW?+图6>Hj?oڽ|-?ݞ?\w?&VI?*9@bCfKOKw>Hc?74v?)m?.?߯8츾s뾥x󬾶\?0?#|;?/޾I?O"?K|⿵a^@?!꿝N?ڠV?2]G?ٗ?; ?jѿw?JѾR?\pg?*?6~?z|n?OiDVv=ҰB?7*Q+ =jr?4?AQ?F?JBmT?I?bz0?]?^a?l⃾ľ?`?9q?ye?DZ?UYj?k?"?:L뚾⿛R?-"?9(mҿ}ܾ?H '?&ڿ?hž;oQԫ|o~?Lƿ'n?_?ܡ;w (?Is^>O%j?05% б@.k?8F2A}n?봿n(?#پ:K?Sn Y?X$?&. ?k?CB?196I?B?@N|ȿ+r\6,ys K$RSdrƾq4?I/Ծn`Ӿ?ܸ?5<-sXea s"?QDVo'z?߇{?|?2??BV?Z 5>3F?,f?Ntk>>+[>ܾ['C4|?Z>C>>` ? ?4Z?!;: X?GDD?2?$K羠.6?YH{"%w0~, ~徐!ޚ69оО꽎r,t\?=r?:X?A*?K|8?> E?8>ʿ 6 |?de?۔S־3OP?!~b?I7?&~*ܫd?AV?>C?3]F?MБ)"?3g?!Xƾ| U?8@?0C ⳾?4?3}5ƾs^9U?.g? ̾[3?KzRA#tv?"\?(n?>Fj?1zw/.-?@l?:?82?̾&ȃR? rڿL?Q?7Q9P? oBm?Ⱦj X|g&s?2D^z? ? Ivj?7"߾[Mz\i?;fH?%zH6??h8Ӿ*>r?r̿zM?۔? ",? 2b?8?5й? lmS?R8? ڇj\Gf?Ol>g*?F?O3avag K ?st^ 5R_L?g) S{OM?Lx?U?LTj,Fs0+?T;iz?>bu$?ZT?GN?W 7?@R{ S JmU\8s9־Gվs?R?3y>v ׾=?)ڪȾWzhؿg? ?ڿd? 6?BP?lξD&D:L@-J?+pɾ?-l?&鿆?ߪL/ݿrj5uZ!"*?Hu.pt?+_?S@jl| <"X? ;?%?+ꖾ&?"{Y?5]_?,.bzf??XHtѩ ?_`",a?L8~W?.oB?O>{?$?dMR`?=?K>J?¾pDZkz쿨?N+>"F?ԾSX?1s>" p.>??%7<o=Qd^Ծfy?8>?g>b?D-?a@%?r=U?I0>2?>T?;Ŕ? 2?&ڦ)?:[@(?F٠~^Λ?r?t?$ݐA?WwHb?ؿW]?@\^?g$O?bd ?d)gA?%GJ7@埾zտqkV88C#5???{0Ap⨾8?8??>ֲ?U}޾sL?iDr?#?e SU|?QZ?8Ʉ?9 q'}y?=¾YjO羝]?L??tv.rA[꾅p|?4z?9&C$Ⱦmv??Fľ͉?9H5ム,{B|#5??L ?*?;`<3e?L?%?4,Ej?2?&X?ET)?ߦ?+tǟ?'6(B?A???tc6?&g ?8bF6i#RqPHAĿ9bN?K7 ?m$^,B?%%?'Ю?@U_?Ef:׊>?:a޾=?,򈾡h r?8y?65CՄ? ںuXHn?A?1zz?>v?5? c%&?*JZA&K?8{-pl?++?3?-U?uԾܼ? l?>!Pþ?R?3$?a'P?(?3}t? )t? ?Fy?$о55{ wz?0"p?HȾZ?D7H?%?tI`?GP?4[-?C6?9ƾþ#k@cb?R@l ?H?="o@?Jp? uֈ)#D?<I?G%T9~4N?FC?.(I'L?eM{ꤾ9A?Sz-I A۽N0?{|HA?DB[ܿ€69L?T87+M)lB?Jy]?JA?P?ᾭ~I̾y(˲E?5˥?ɬ;)/&!uXh|d[Pͬ?1m?¾D,?O3>ޘ?(?P+p\'?Qy?XNg ?PMD?9fP?]??!?9ӈ?3V07,??8ͦgٿE"?K񵾓>:?! Ti!b?*(>?4B$?(`Ê]?&@"j?3B턿g?fտD?ߦ??(n?Tz;'_T֞X>H|rz?!rf*ؙ4u?Q ?;?ErY.C쾂# +|N ??T;? 8.Ͽ ?XKZ?c>$Jj㒿}־l䈿D?FGپ>S侙@ֶ?>X ?m'6?Dᄆ<)?,C?JoK>4t?8 b>?<?=ٜ??῾M??־l]?)c#\rBF ⾨ ?C4(VhbTb?W_៻󔾘O? }x+E?EMѾxP? R@&\u?c?o?*&l?>?6@?)]{M?+>5z04 j?#>"ʾqO¾>|޴?-ܾ;?hiῩ0?ԇD?r?K?0A?6?:\D\t]?5fҾZ[Ķ'tX?' ?8Vc׾',? u?␾Y?Cr? = t?SkЧfJ꾋01B?/Ff?/,?JlF?FV ?8?"6BŒ??M$ʾh?қ?8M?+ ?ttjNa?'?+k?#?.?1u^? 3?EUZ@̜@rD?k>9bh?Vq?Ms?q7"F?hZ|4?Lkh?'B޿ыļ(u qhc9XT@?Qo.@ P ?Tl?[\]T]o mf.E1?@0?L?9N?ixMK?xy1?5]?HE?Kk?п?'?S9K??G?L)I7rCa{R?4?M9?:-?8bua ׾C"gͶ=} ?GS>Es?T|\ڿ6˾4~?9?7Ҿ̿,?#ाŀ?mxBt?йP089ب?$f(^ ?؛𸾀<l?Ap8?Gps9??QBZ[?*I:?#F:Sq?4?5/z?"?*u?'?FvB?D ƾ~W7f?6F?!-0?3{?Mj? }p䡾h?0?H?5꿞Ȩ?A[ ˠ ?Hn#?GFk?{߾m5<,Z#?>?/q",q3E~?>r?Fl?A?$RX砾c%?:od^Կ)d?8r? u:?/?Diٿk]ֿgѿ?aD?&x4ҿ@ъk a^@˳h= \??iݰy_?@?@[Y{i?WĦGl&?T<?+I}?G?6Oƾ۾~ H{>?=pu:/ɃGn?Vؽs?_d㴾?F9a?oQ?$P:?=v?^Xi?D4B鿎?l?k̾+ ?'@5A^@<#@e@ʸa.?kT˶EeU?&?qg L?^Z?3Iu?߬}WP]?Dz&@?1&4 8>[p?>e?@e?l/*t1l? ?6?9,Xk3 ?H?8]?^?RʦS9 cmȾߺ?T?0h?je??ό?;PľJ>Ī?r?9R?'?(vF?4]?7Ծhp?vi񾇡a:0}o?X?@?A5~OyGb?@mF4A?3Y? {E ?4icGj>N?8|Ѿ >;?Lp?-4^E?'>^\?_Ծ[ 'K?L7?Yo?; ?տU^?ʾ!?`E~r?67??o?>⿪(?8rs?.?>$겾m?D5?AE/?d]˽#̾9R?Pl&пtx??70?;ha] M[Ⱦj3?LY?B>t?KT壿?JW*phRa?,?B6?&xoṾɾ Ҿf).?W%>da\z?f~*7?A ?Pv?$n_- 1 ?7xj@u־(^z?*k0!BA{?R ? BoA pvf??/yd澇XZ9뾴P0F?ߥRv^*&]z?2,}?EUtbJJ?A?Ҿot{X?o?Uߌb#^|.¾Ctj}dx.?N;gQlN3?+5%?I?3?0YT??˃|?:?mD?.I?侖h[1u\tN?F?%?ڴ~?6?=Wi?:̾^x:X?>f?/7?,m?⎲?焿C˿Y?>?' ?8?'>J?`ħUK2z??(?A(f h?=*?=,?Yvl?(efZ)Mnk?&?* ξL 2rI?<;k?0+n?Lpb}aAAӧ Q?M Zc?:?s?!,G;Q?p<hf=֊?aBϾg,?A%?1Т?[lܿ+?E5^;@??V?*j:g,?$?žb[?Rr?2Ⱦw׵?)??*^쿧M<_$?HiUJ@Bm?(?C?;D?@6ؾ D?0?/?Ų?ᾔ3?w?$b?68?K{ྣd澊fU?0&x?>4⿝zjt?]þ6j: +}MA?I&7?#2?ꤾ"i qV?'tpTu?-<澤?b??V?I~Ú[_6\9?EP?K?2tƾG?'*??鼾cj?I۾;\w.?}@{o?5.ľn?bm?Xdޛ? 6`Kk/?4? ?ބھ/S?)? "Rd?ѾF:5?=^޾Y &?2{ulr鿒?[>?W7%E?,Pd:?&?A%>3t#Q?Qg:73?6 XĿ?4[ݙ??:AUp?F?N?27?)Z?9žZ?".b\0?3g?&)^Wαm?5㾟٬mK?-鿿.{ܾ^K&?,#??C?5?/zH?J?Pb?J>҆27AE￰nDľ?2?6g)Zr??Ltp?$?־?Fn?<Ͽs>X?DU?@Ϯ?Q?}Lw¾^(!b\\?-޲_Kwbξ&]𾧕;?%3H[?*F?8BоЧ?W ?)?EC?9uy?(K?4pbfXCB d? /?F>Ͼ?@??%? ?J4?߀{Q򖾟>c'?2⾛??ξൾz?GF?žT"?:q#yv#5Ih^? ^6}G|?Gj?EM?!4?`ۨh?d?=?3?B?O޾g}7?>R?Z4oV\x6?H0;T@7=;??4?*??o 1 齾u ?C$@C?\ij?')l?G?2u^]U柏K8 Sjؾnw_?>~?C뾢;E?>h?&R/_?e?pP{eK?>?%f?8:ʾ?1X$@Ӻ?Dp_6:ԽAv?b ſݿW?s»cW?e?U0A?k]?AJ3?&&6W6?7Յ?,Ƞ?A#d?*?hOCLo@?HIC?M0?DR?KA?*?G=?U=?UV,M?Lξkotӫ?ED%?G?\?6о?dh*zmX?2(迖Xƽ}?S¾R|`?;_a]t^WA?]ڗ ?FnA@þ߿+?.>R?߾ }4?$派J ?^L=?=ݸ?4ް? ,?ؾ8?0a?/.jоpゾUz?EY?2^lG.? 2}?@㾡Rw?Ehz {-k0b?C?"PjپUR?Q5TtFN?+Lv?$ERѾYJNB"@7Q e?Bs?:gej? 4?ݔ| ?5s:?Hdb?:>?=0r7?.?'=@?5?|޿1:hH?@@#@>EYz?d .I[?(ŕa|AP1/'v?6?Iɾ hxCVPfl?>ɾ޾HdͿ?7 QԾ]bAt|?&䊾d.l?H ?x?I_?2]A?Fb?Cb?.|i>s?.g?XK?Dsv>>t?-?[>Ǿ?3!??Zn?%hQǿ?4?l?C?t%{&?3 ?!?68&M,Z߾ ]v?1?Q8%P 5쿗IAP?S?#?%o?K{8Y5UQ2?y?@?UH+H{?%xbuXҾ&?07迖B? %?2Yr?!ns׾?2Ⱦk\U^žU6ƶ?Fz?7>?%\I徎?c7FCξ?W ?6?4>?о?>v?$-}jP4rj?? >;c?Jпr?1A?@7?WR?.h?.?[l?2% D>^G?%99D??.?&CԿwzW_8)vϾTGG??Q'G@~Rx?/?[V??q? ?7Ⱦ.M0?.N ?4cdZ[{?/8ڂ Qd n8Y?]ʾ ?h?EWĿR8̽?OD<)3?ۜOE?+⊿ þ2۾ھ.{p4>T?(Y'?'v6ky h,6?(&Vl?: ?]Q_(脾5W>T?@?]վ2m㿌 0na0u5ֿ>?ޖ_?,r/zm ?,?Xe>?F8vt?&\?.@"4?t݁٠?6L?Af⨸oWྀpU|??/U?TJľ[?ݾu?UN܃k?U@4+?FŊ7g?j?NeMN8?;qn?19v?px ?H-Jo?<?$taz?Ϋ?=U>qo ?h}nf?Hlz?1)7adr?j q?i3>gBZȾeT"d?B?T?RJkdvֿ$LbeqzY?7V2М?n(?VARan-?>E\?Uq?I0?|žJD?#?ܩ&3ؾa,?4?R׾ȿ)q@ qiC?@S?ʂ?JjJSbj(z&濓)?:4ʽ?A wפľ|W?Aq&86Z?2򿙿6 ?+ {??DM ?-z?UJ۾˾(?t ?1K辻f?<<8ld?G3?4ľtF?HmJ'D?'?>K$R?3v?пS.?fV bܳ>>;?}?0#?%پ_`?!x:6@? yD?dȾ۾⾒8I>|Ɓ?GvJ?M6wv>[>><܃6>ؚ}?;N?<< C?(Er?.@>}P@H?@?dY?# !v?9r0p9ӮU?$54?GB?>d@꿁ؾ|?Q(f??N?S?Xu(g?*?P.?tXgXÿx?8V@?6?L0Y >C4r)?X5IT?r@f!)?W\?E'+>.{)6̾;?DhR\?O I|S5h>s?B˾4?y?^FWؿTþfA?+8hA{Y>Q=?*n?`(?xҿ:O?°?ܠ?IH?Wf?̾v>?WbgV#*?Dcu?-uоKA?Sz??5c`ھ H?%ȟ=]lZ¾JxX?:YCX?( ??2?7M7g?*?*ʾv4?6 ?$E?3Lj?I=vԾk6?"U?20tu? ?580s? 䖾 ˿ڑq?$t.TB)Ŀᙾ?.`2?"{IпP?9(.N\?' w=3-r?[zQH@D?#F?)nT?Q?;Z孾œ~?8M?}连 !ؾ 8?j?:NޘͿdiz??.@?cY?B>'\#9?Y?flZ?H;'?KAǾ[mS\?ճپ/U3ѾN%þvR ԯ1?!!?L??:;vj?2F?N4#~?``?H}Ծk:?;\X 俿5p>&ݴOa쿡\?M5>?-ѹ ?+O,?Fn%F#l?,׾Ұ#?0v辐7?E?(쾨?8྆C? mT#s%^?'?E陾^ֿݾ?p?1r?F)?$?+Xǻ>JV93D>ճ-Arkr?o?3Q.bK? I"]o?j? ꂾ6?;%I?FNwm:{n?2?✾g4 ?'??K? ? fz?(4?Ҫ?NоgbL?% X2XȾaZ>L̽7羵?/vL@3Ψ?,2ȾiDx?!E5d?n^y?ճ|nm?v?W쾒V>Ux?"b?CV? ֯?kjNX? ^?#E?_? ?Vq?)p?8J-ᾔGο??EJ?@@/>?-C?Fb?bQ ?P(>qÊ?](?'>\?S^N?HLDɪ?O1?dB?F6?"Io?G6^DZ?fLRھ`r"UB)clԾd4ֿ:?:?P|'C1c߾A!ҿ3?TX?@v?KT?Y7I?XmB?Tnr!?:;?'?98?Bo.ԾȜ@0oԾI?[?g^?U/0? ??(FU%^Z0nS?=,Hkd2pʫO~{z/|? :4@uK*?3`@>?1'xϾ_O??(&? Z@ybA?׸޿?=En1p⾉d ?.GV|DS>嗒?%X<>?#(%?0J@4xYѽ󊾬.?9zQ?C??/#D? ??(38/3ξy?9p?G,?)-xtCOd)~"?GCr?+bu?G?B~L?&/t?=?뎾4'Lv>1<+A@?~?IB?(Xx\n'@?NjB7- 5Q "cM4Rl?W߾H{^巿 c?8)T?>v?[d?@rF5#bp?$?9-/?Be?Ly?D?F)F?KgkZeA? i?A(?9->?Mi)?! 佽賲_zľ)Y[H{?6 U?zr?ؿh9?OTƵ^?2*sпh?t 3վ&g?翺ekO?J?<-j?SA泬CAB|f;H⿥ξ#{?1x>ۧ?( ?/Ob?b?LG?Pc習?-L?D0?IiCeU?[Y0آN1?#w?M?l/*?$<1 @ղ>3(dE?꿍kھftv0( 応u?0r?!X-c_qH?cھvP?@L?/x9.e?\\4P?׾9?1?$FI࿟,S?Aý$<& U?92?UL?We?Mb!տki,[i0ֳH2c?j?'?EN?>Q6>1iAEke?2:ZƮi j;X?S ,?S[PF2?xkvꚊ?e?Ƚ|JV?7C٦M?G`??p?G?/3a?[??:uuDm怯徬t?]|%$tL?#q:wP?P?@q 龨4KQ9 ?6j?&?t? iޫ?\=_j¾dX?RP$?s{€?Nf_z?0?~.?Z?0'f ?7b ǿٿ98?=@?u{`?.ho??U?'鯿X<꿡j(?M ?-J߾o?3ѯAARBXBWK??Zz?G(??:?3 ?Ř/߾\0j됿()?܈ݾ0>'>2?9Ҿ;?"?6k?,`ԿjN'7?CS kC?Qd*?On!N?P鿪"&7?r?-?FŰ?&w?a澤?,4r?5T?-xž@0?]?a???)Bξ>e?#?/hP?0`x?p([v.?9߾ψ2Ώ?>Կnӭ?MRH?;ﹽ ?V`?ޞ *?;G?l573?۾l?Qަx?C\?Z?Q^?Ti*?* }I??}(?A~S? ٿI?:?W>F)S !$Ҿ&?iQξHDW0?Z!$?:{Cp6.M5?+? 5徱F߾\?'n\n?@?PB?侺8?-YS?% ?ES?M͆RԾU?B}mR0Xذ 0?7B͝M9L?=XeT8_[?&,>D?4;?Iz="yH?'i%倾 C|?KzH?!%?漿:|cF?H򂾖`{?\?x?+ԝ?BY`??$0>5f?(?砽ĸ?>5q?8H?O^X2\HuZlE?>?;rĝ;?!ƾD?%+l?"ټ?݂;БO?SK?&??)drn(辫tGN}? ٓ;?f゙L? -?,`?>?8d[?5>fq?NtqK4.nM}*?Pr?N+K7ujx"xL<?9QKX:ڣN 9SC?c(?N?@#X?A\^?H&;Mc?c?i+ ?SF#I?M~4?G: ?Bp?Abؾ׽=z5ֿm?u>-?B1^Ftcq|#4#9?T-X N?ƴ?- K`Կ*[  wŽ$y50?Pc?<.+?1׾x ?=^?4 x`WonTL?&\B??2 *?s?A!?f7 x?D'?q\U? {"C)%?F!?*?Y?#ʿl辝? Ug t?5J?.Nz B?7uݿ7?I{?B?**@<?.ހ? E?͢?+.?8?&gd?TE q?T?1? ?6u.A`??㮿B9?+?J'?>?.?g/?#&?<?7AEI>_`e?d޾F!˜mڬ>O ?0?lu ־ Ⱦ T?"A-Bz?ҋǷ?:2?4-p?=L;_?C[Kg?6?Qym濻p?WsQ%CzUȅ^rr)?Y7R?P+s󚿏W¾*E\ ?`?R)U>?K6t߾R&v?6Z?_4?`Y?ꕔ?A?,tE3.wdp\a'ux`ƾ~/+|t?&Y?CNA뽯h#>6ƾ so}4?\ٿp?=~?Ւ?F?1u?޾?K̵F;??տ4?J$?,?Ͼo!N+?_pr>V?@?$v?n,ۿq4?Hdw0?N~ ?M>M?l?si?:!RBڿc5\ؿ?Br?5*?VJнK)V?#h;?$sU@_?-1z??71 \/tV.hp?`ZȿB aCԿŽzܿ=]?<@?5y#&$5O[ƾ0j=tKF^qs(~G@V?-YȾkye>܏E?Bk[n׾?0t?2b{O"?>̆~?I9;p?S^ Ae??P?"DW?lڿwBv s>B?&?8vTL?3T?پ:?^ ?.T?^Jr<㾉?MA?, ? 7GL0yk?Kt)?ѾQ^?9?e?c??2F?J?Eƾ1D?*]PO?99) yPIR7Rv fbՁ㾃Iþݯ?&?|CG ?6?'K>Lj? $?S?&?^t-?Gj?Nt?*>n@<*@=L?K,?S?߿%?@?%uZ?*?K[v?Ӈg?"?@E 迄-c>?_f?=Qkо1?@䑿?J#ŹŴ?F?M7Cξ|?OXo?.YJ?\Jľ|?CV?0622?-L?,.?B^?7Y6?..?3^?&z?\R6|d7j?= -P*[TސV?6M?@\?KL쿔f?0 ?UCȾgV?DV?e?#_n5L ? x???6 ?GW?](C%Z?Uþ]7 @OsBg$?F˅?,.?D hMS6|??@>o.`FkM?Qp1?%o(??Z?" t6?F-?5S) ?5?,?)???8 GJT]?AxR?n?*?+J?pC pq0J!{.h??!?0?0?UzKɾv?i?lh?.d?&c\?!gei|l?$꾆>?[?No8p^z>~U?EQ9?6?3{?YMڿA X?7#=쿏?7g?L?K\ ?"Z?s?eY?x0A?6:t MپF?;+"?B]=C"?3i\8ʚ?aj~?(q{Ԭ?/ȾI"?1?Nj?1R?B?Dp?Bp?AK*?0V?BX?J?G;ܿ?&p'a?ϼ?UG`!-A?'VR?,*Jm?&Wð˶?.=?F<4;"Ѵ?p1( ]e7Cƾ?<(@ Ⱦ%o?Uv3e!so2|"?1Ҧ ??;?">'?ȕ?)2?J?'lĿʒ?*R>} ?6>ꩰǷ?1\"+ տJ`м?#>Ap01ـ}?7?`?Ӿ]X?g__Tr?7/)?@R?/f-?(?z D??:ӾP׀z?XA?K"?d?ڰ$?FKz濒moklrþU03As?BQ;?$1P=>u?i@?f6?\?/Mw?/n(?U1&a?,n5SF)d˺?74?# ?0xpEp#?Ăo?BC>о-sDW5ᆿ^8=?)C?%fR ?2 @}@>֌?_(?D>3?<?H?pľb0͒cZ? ?4HԿ)_6?TK?0(0?.TZ?Ir?#P~,?)?6x?@0??e&?%6??Y;ჾ־?-,?.:?+6Z/?Q{>c??7a?*bn p?'쾐y5v'6-x?X6uVZ?nؾ.?4mk-?YG(?Xg\࿖gٿ?"4xfܾ.멾~s?UH_a?(r?>DU[&?NL,?Drh?7 ?XjB?VvT ؽr?2N?0@l?@~+t0I%Fw?ŘӾ̻JX3:6 7e|a:=R߾mr,???6F@?b¾׾KC¾[?0좾Ӡ,?8??8)?5!?7qͽ2R,Bvھs?Tܽ [ ?R?S?7žYN?%?.q?T?dR?;0?5?t?Lu?U?D V? 1P?Cͽy?1쾌;>g?0?,4A? +&c?B?0?A????d6?d{?9?ڴX?UD;??űF?C¾d?$^{?&?Y]Z^?E6q?1@<0 @ AL@2 ?ξ 4?{Ҿp?ODn̾ż?*?4-:zZ.?^r?#?@H?r˘l,4A?K?p%)sG?>#?EގP`?KI -?3?'otxW{?H~ۿľ&%󹾆}" )긾3Pg?{/?PD?+R? &?-ĿRҀI?9!!?jUzN|aツQ]2?H3#?-U?# ?= ?Qf缿x{3?vE?G֢? .f@?,O󿪌*?_湧?SyԾڹt徿社pS? ƾ-f? hv?)[>?X?w?o?):?+.a?)2Nw?jG?%\^?$?&^zW? r?6?Tct0?ߔ辏p?.?$f Q28PxZ?BM q?(GRp??/|^5?2|?o$k,oHj?)JOr^6??!ھ?G/?'R?] 2/l-cG?H뿏?E?.ݾ?+=5*?3?6*&'?C;L?+/oҾ?-?EɾV¾qn^"^k?TӾWܿPS?1ZL6 ?x \Yں?,?c>6B$?]}Vੰ>[{g?Ei?V?߈"ܾH?ҳm?:Dʨ?*d>žM?# ؿo>?ʗ?"4ڿ?rԾ?$:Vst?Pľ@@#?1@+@$?A?&&?5 F.Ƒ?\X? qr?-J?-mB?7?/V K?6^ۿ> ??*Op?+xd1r^g?Ff/S?2?ۦV/yv#n?hY?n7?W6?&'r?=H?;0 1-?!UؾSaZ??JD"?TFW?G;&|f 4?_?hR?@uU5D?>^ξh#j/xSؿBqLͿK?6^?T?1?(??88?0?F?=">'?(jH6ٽ|w?*>?6B)W(?뢱?"PV?نo?@a?4\?~MO̿iD?9.b/{6p3EfJ?ҍ]?0SM?,i ミ9<ނa?)?;5?RRv?)?=yѾmP?*ݿQ?JmF1?6? ?6?6j?7"xT hy?'~?Qv~u?\?? ;ƾY,C?#??Rڿr\v>+:? 3JI=I?0V??2p?9?鷢?Bx=('?2?[,?>A?]\? ,?˖?&X?,e?EV=~辻Jjl*ھd>>׋?IR+?D.7"z0?;}?/n?[ ?̽??I?8~9?/ɾ6?=[vĀW? 2H>fo]?D&B`|?+?;df89ר?K.jEǽhN ?L?dҿIG?R9?P[?d\?PY?3V(?61?Fn?7cL@M?M\?8?OU?;z?2(?Pf?EK!پQ1?B+ؾM+f?GKX?F;Qi*?%?b?J34?u?P$?Oݍ6?3n?8߾?7꿩J?JN?2uޠ/g?~D?S0*'Խ@?'s?A&v?%?4?B?ZՃɾ4?+(?Z?/TiD??PL?6辝MU$0?/~\8?Jz?R^?)Z?0IǾ:?V?sþ?'ʌ?%?@6lC?/d ? =PЖᅥ۾s&>6?Gbmɒ ?3?2A迫{??Ӓdma6p.M`?g?ؾ~E?H~?>KM?(e?,i?5{?,俭 SlPCW>?@ ?5 پ?辤T2?An? ? }?W?E5?>n?р$Ĺ?R??ɗ?8_w>? ?LNɿ#B{?M?1'ھܾ(A?)Lc7H =? J{ֿZe3^S?-t? O?p?@ԿikE?1r:??h>Uk??A?2h9?} r?\^?,6=O?dK?]`?Q/OǾa?>u_nX?R?zߣG٧5bؾTWr⿈?D?Fa=v|C?RUB(T?Q?DHؾn7?V?NY?*??N d?<b *`\?;^?BU?8 ?X?|?=\ܾg؝ P?bN?[ >G?U־!Hm?R?&?@Id? >\g?1T`?"Y6??#N>UZᾇs?1L>n?=/?BO?ZjsKizDڿK+?Z? Y?:6?+?W8/нgI򐔾7xq 8?/D?)"X ? ? (sNZ?>ᄚamj<2?"P?+̾.?{ ]7u?ZB)t?6? қ5O??$4>yS`IV q v?C`>NVѾ]?P/꿜?ⶾyt.?VP>CV?&$?߾|S>dfm~H? ?j?*L?+\G?1?!?5]Lur?7?1׍?=nДv,~g= ?Y5 R?[F@A?P??Hyh?M s ?`F{1w?;h2m >֑]^?A(?[ ?=TUWt dLb?>s(?.?`qtX?z*Ϸ8v?K ʾ0?@?9!R?7vo1;9q/Aè?fA?3ſuuc"?ֵ$B ԾRR?@2*h1 6b?X?C?K⿋N0?BW?F? KĿ+d? HW>Sa<???I?+??׿X?DN?-u'+?/)D?=䢾(L޾>> >߰*?AG~?j6پJ?$e?ʟJ?A"??>e?*B?T?ÛL??)?$pְX?,?ӯybKb{`Ńu>t̾?!V?2?_4Ӿ:տ?2оqW?9њM? ʚ|Ⱦ)&5G۸?" ?>b,?'T ?2?%?+㢾t>̮J?"?h?#?Gvl?1Rj?[?+h?Cʸ<T`?P t3=mû6 Q> ]?eN?VO7w?A;)Mdڽ*?P-g?1eM% Bhb?HaȾ e?Ch?L?k-?/ پdj?H:)p? ?CȾ]]O?'d? ?V?^9Ly=?9?BnNBf{~J=-H%cپ~?Be@??T jQa?+ XH7E#?g&WQ~?1?) ? ?6X?22?Be?&rr&Rs? \??ZE?%V?!侮$x$ѽ8 >D/A?<?%?M_gh@ќA-h?ALS?7]z?S?6?6Hx??FXzgQ>[?'sX?M;& V9h(?0?9r?,?)J?< f?.IAD?"?6R?~ȾU?2?4j+=8!=dȀRʯܿt7??/;nب?F?R?, Z?A??SZn??#t&Qn?(/4?*,I?17rY?,L?U?=u?9E1? ;?j 6?Q{ Fȱf?t?Hg|?n[?5ÿP?a?Z?La\ȾI2ٯxȾIĿy*R?Q2X{#D?_QHؿ|?3ֿ ЀP?R$ax?EA/?A/Φ׾V=?Oz*R?ZQM?>xQp?L?+?L| CԿ+Ծ??1<5M]8?B:{?E⓿ͺ W?䩾3q?cqZ?&Uد{nxgH? p.Ru\f?QC]'T?2aw+J?,?#?6쾊?&?FDFO(xU ?6Ig?w{?PBNΪiTQJб?=?~fB?@L?:J?']?/fWA@?S?Ǿξ,?2A218?L??GH_?C?>d?:+R=R?4 4?"?7aX?Ul~꾙(w? H%(?+:wt8DZ?*JŲ?)!x? ooOB)_(?4~D@?ľt?nh?㣄pY辈*[?*X0Ծʾj? ?X??c%?@7``?JKE?B?J쾡?*>Rk?Z O^5|E,٣?)7@?C"?L?5M-?1>@*@2&>cVTo+a?=?.Ps?=4̿|_<վNʾ~K?5vYd'O?m2??Bw#_0?Sz V`?I0s).x8x?8pB@??R{1̾!]f??9ҾfȾw?>m?U@?-4?>"?+s:?1C?8羖ſh?!{|Nt? "b0?$?΃濤b쾫Y??7%Ҿ?DΨ0oBF%?=c?*־]`A62u?6PE-?Ծr\>U?EU?? 8!a ?֬O?5ľ5ƾwBˢ?,.貿?=?(?Ե6>f?LJY1??2]4=tP?ebC?]%?/^un?輿~'??>sֿϷ>v?'Jٿ?ޙ`>"?-ミrIb B>?r@꿘>?cs?ξl?3.>'?G???9i? 8?߾?84>-?Cg֚?U?,@V>‰@ζBK7B?ۛ?A?$xz>?EoaqQ+?2 ?D?.p>?D?~]??Ep?KS'?LRg`?Nsʿ?]?Z+?;I?0?6mܾpSRĘƖȽ>,?J ?:KLȝG?򁁾x?7L?gE%?9i??f,-D䱪?Q Ǿ;~7B~i?VS?&;,?ZEJ? &ᬾ\뾴I ${w|?&2?⨾fvƾ*Kw?EAC/86?OȾVro rK?/ ?J?;G?Pj?0[?SO?*?72?-?7(+jϾ ?>s>LMi?'Q?#?0@ھ3@l?(:f?A5KC?i?ATf*?H04?ЃdMX??&Dk?)*rX\?Jyξ?? %?!R?R?F, > y?;q?۰qv?( ,?ɉ?D!?꽜\'? ?C7?;%BE?%$l[GhQ.:?Bnr?UO?R?ZF?WԲt ?zR>Ѭ#X>?8!~1@޿=pfZr?56cz5?LJ :$ cwľM@?5ȾG8 帴wHgt?9ſل?K-?Pؽ+ZZ࿊>?[J ?=G@?9rDU?^*򾋵!lֿy8~:?Dlm?CP?Q`GB?WN8 #N??Pˡξ[k?Bx\M2om?PK?t??-ؾ8-1? ׿r?$,칿VXuھTDV?SS/oT98hj=%6輾?;J%?H*5K?e'?Fr8/;> *?%K?&BD?]辈㴾:]m?Imm?(Sz?3?=L_?"Tھq 3ӿ'?1??O ܾy@~??m??3?8o@Ѿ]½dEr?: ?< !D޿~\?&m? l?:f?>(t?Q<n^?%?E"?3m9оuL??0C9P?#R.?9X2?6g?N- :yB?ݪ!+?!?<濕c2kR?/m? $ ?l?63 $ ?Ȯpƾÿu *ᗿm"}ru>0]?쾇oO?3i?)߿@=?jT#?!?>Co&Y7>3g?!&?8!?'G?4~^?BRʿ7?Qy?!jP?7f?3`Jvpb^? o8_~?/ƪ?<9?.? Cv?$Y?%Z??|6q?Fq?Cs?@"O?I?%b>">T?@?BY>su…GQ?ާmr?-d^"?#V4g4.^^?80?6I?4⪾Kѿ3~؜{ ?7U#?ͪ?J\?6 ?1ھ?I?@? Qzjؿľ)?"y?-^پq>B*?%?!bF|*><"?6澡۾?4?F?&I??3:?!Hh?~]28 =;'MC>t?]8#?-rT?$XDZ?O72-4} ???ϼ?Dr??蠨@;=Y?1T ?!x?- ?< n.?|X?CJ?JlC/7'?$ᾈ?J6?8I f??^뿍f{?ݓ־Oݽ3:_@9K=Xv?Tp?9@Q-?KڽN6?D9ScZm?{3ڡ?Qh:?MD޾ ?Y\?]ܾ5?A?bx?(??5eca? q徍O?"2y?!?/a?SHSP?L?H?=,?*0r?+0?D翾ZT?7׫jb?"1z?>6 4?8澀7n瘾,FzEP? ?M?'iA=? X?65 `F|FK&վY@R"? Fu˿ ˾4tNnv&Y8 ?%GľL?;,ך?4m?M 2?@D?J6z?)󦿡bt-?'h?LD&?-?BQ;?*?7꾰#Nm2>3?:B??%|؍)쾒\>?9?I4X?^.?%į#C?9xȾO^?D俠OB?3uAX?K<?^?E56V@f4?TJ?ZU?O>?~v?lоܝ)c.:?(XҾPl>[?CTG \TopgC\?"`9WE?Z"oQcX@澋MN ?^??59?S?>?@˾5[?8W?=+?H&꿎fP?R^Tcm| ?G?ӛD3¾tp&?@P?,? ?8OԾ̀??̾2"?HA?E’ta?F~?ʾ]־&㿞O?#{l}'zll\??F$UJ^־4=?o?(1?1cd?4v?@? ݮ  NCe6?<:?*@?$W꾰S4? P0pQÈ?[?$G?rȿ?b?/6?>?-C"< ??'{?;>AC?ޚO.|?"&?IkܾQ?BAؾB?=(??>ľOݾJ>̉?C?b?@3  ?5 Q?Cb>!D?<$?̾?/?'>r5HV^?Vw q~ѽW?/[Kb?(?\]Y1;D@B|Xj?8?) Tk ?NH龍pS3?7?Ol%?f?C*1h?44? | l?N'?/Ml4jYf??MM\?:#?RH#?c[F?FоBz?DUL%2lϾXb"T?)_?Pj?7%?RApNG_oNwMsnFN~?T5\4ԾZyr?R5q*?',[߿DP瞾[?%*?8ƾR,?@޾rlоbjZ]?(?J?c?Aa?1$BkC?4o?%nR?Z !?+ ?Z+FV?$)0ֿ8?-:ݿƮ>m>˲ѐ??,/?`{?PMdX>f?B)Ⱦ5{K=ᆴd>?nV?2J?/B]!IV?@WfKjN?[k<^?jz?,`?A?A?"\ZbBs?|ʀ??]?3 ž6PAž@C?M?Ҵh?Bf?l.?Ζ?G?6g!ݿi?Z? 8?KoXg)?'M~Gъ)6=?n 3ힼ^տ^?ÖK'@㾙ؿ??A+?^mP">՛P?H0?8i?G ?Ts^9m%H?:'E?%{T?8atixþ{R?13?bAоg_=?a?l2<:ľ?N,о̏?3 ?P?,Q`>?0q{*vUJuƾHQ9c)spz{I?,S俬>a?&H?0Ͼ7?P?c?=4?|&c2?1yM}'?c ?Smd4?(PCqV>$T{Ec̿zy4?O:?!?GW< )?1b>*o_e\E?8NקO?Hپ(u?>M?_YV?1d?O?3/?ҿ:?(?#??V8̶&?Uk?BZ,?VԽ??ܡ?0?+?ꈾ?? \|N ?)?@B??"J?1m?񇆽.?#r?.`?)L}#!X4wN?X#K m?4N(?7?િm@ T?r?5JoI ?#I2!?T־U??TqINfPj־iW3]?7ҮB֌u꿗LH?W?~T?HؾR@9 L?@?(?p?/PvIG?PR(`??1.Q.?BJs?2Pؾ0Ky?:e?.,|Վqľ?=^{~>~yyP?_?UI?$|'[0?3R0#?-}t0N?53}[3 ~ >+?]?u6?B)"7oS ??<$?E?F?@ھ??Y?%6'dP?!J?C$Gpఽ%sY?]t?H,?Fx?V ?PE?=ʿ6&7?=C?Tﻭ@K}{??;H?JE?cD ܿ?"þ4޾U?+=?+(?+ ?A`󪾤`?:Ye ᢾ) G?`mii?. w`Y?8ܖA?D4?F"׾K?4`T~-?H2n?䲩?Bk I7?"F?+1Exth?FN\s?=o,>5?8?QC@?v?#?*J?9sQ??.? ݾv?]?/澯}(?d?h8?M)?#澴G?#޿x?&ξ0a+Ⱦs?B8 ? Vr(ھ_?&L?>H>0?T?9m??ra?!e( PӐxh?(?/???$?X?J8iv?+E?PM?*& dgA=?à+l1a]`?!H?ދֿĹ?%6?C ?$֨?ST=w?cl>-| r?nl@?]&?~?W?&/?]!+=ۿW۾쾲I?-?8@?Rھ>^??۾Yiྦ>gc?5&?6&?JР?gD?F0C ?EepAw?CU?t@?A3??9>?JajecTp̌~?4!Ot?;Vt?F·>?2?Bf?!kX&?"Fƾ?a+?8K *k7?K?_)?W?+꿦ā?9?-JC"3NvƾG1꿾y^?!Q?5vb?%o,?ҿTgW4?Ы7*?̾5NvOY慿w`?)?6N?Y"?9P ?.'t?0@ZZ2˦۾R?V#wb? @@'0Â?"?? J,AiT?4v=\LXE?Q; ? ?+?\ä{y?)r~r?)Nx?) @OTᆱ:\*zf?+D??>@?4YE?8?;?$?hO$I8>k+? z?>~vp3x?:㢿S#n? *EA??Ŧ?9??H?&sa>).&?,'??'?- TL;@= ]B?2?mhc z!}'^)?=gپe?/[uX?Dz?Db?N?e+K=?]Կ%prYڹ??nӾF־nV} fD$?" L?'Wd?s`p#H\@;}?28?U*z0?/.$bx?1?OxNW?($>? > XC~0?ϾQ?|?8⾟PR(?=@?kVl7}4P+ڼٿ`s1R?HaJ\边'\>܎>]?s?:kǻ?zX^%?4?@>?,?=ξ̊о]E`?0`M?9?h?&$ui9+p˾5Ӿp'??5̸`A>&[?ѨϾ\?"Ʋ?"ё??0K?$T-;?>]nԿ? H??-h򷃾GW辳U(P\?\2禾kiѿOF?Z @9LLnY/?%:˾A?>̿Z?#i(B[,v??0|־m)196?K<ԾoTz7?]⾱Dv< ?-?gYPK?.>a$機?@FBܾY.0?S7 |Vp񘾂BF?Qxl"z?SQuz6?Q?"vX cQ?ɴ.L?/BD?ݛc:d?anT>S?27SI8οy?( ?9?ԮNi?.þ ?:F?蛰?!b#R-Q??6?7tl꾁qng?sd ??<~?20[ϟq?+T3? ;??辈e?~?(W?( (hO?/_?y@9 0D٢?3]?<?rМ?Jvt?/C4\.?6fʿ4^V.T Ǿ7U?1(?>(0?2'a?f?@s?=E ?Bh?S$?N࿔13Z?q/?(3?Hg?_/?GT?$~B'sڪ`阾ټ?W?2.?W ;l5bϬȿ?qbqՈa)O?Oΐ?HV?:g?8Q?2f?Ri;[rQ?MMxJu?G貾!ǾZ "lm x %?.%t?;?3JK3羝i?J_gb?8OؾV?<_ᾣ>!ĖhV?D 94?EtAؿǂs ?F½aZga&S@?.,?崾O444[m!_sLhƿ.7?-fxN:@X>֋?=k`Op^?^V?2־}M?(VX1+?+ ?K?Kʽ{żφX?)^Er,"?+kqg?>Ⱦ xw?2UPA?46Ͻc(Ü?侽᧾ ?PV?P1>W? r>>]~P?2?85?7_,[o@=%y$*`?'p| `?@}J?!?HJ꾃I@d޾P쾟=?J\J|*?<0z?[ :a?2х?'-?!K&Ծӝ?5ȿQV?g@?CKo?/Bz?Yʞc%%2?ɩH? 4?*';r:ʾ$?B\@O8?K3ńq>J:U?O˰辤 ?`ͺ?=#pE?L*?E(?~݇/J?(ξ_?@?"^R%𾯵_?7a ?'?줾`V*]p ?|O?ӏa]r?|[{?.Tvӿ?C$4?Lt7}??"}8IJ?Dy$n?"?#?ؓ⾑WF?u(`Jm?9?4`?+оK?E?-^?-@?ȑd?c?hԾ[?I'n`P{?d???3?*sտve{?,?&,4?-?A?3xK2i{??+2T?S␾G"?ʿ;H?D?8?ns24? ?&H>?J? aؾ皾nmLտþM경>?龐? >ꓶ?F \l?Ymw(2?@6??U?L-?<@rEb?C%_?`{h ??L8ܾ8q8o`?_ 辣x(?xi?VoK>?MQΰe(a ?KF^>xA? ;۾VA&B~a?M_쾽l>a?BQ?[%jɪu㾊̳5?b?#xt־p?2+RQ翚ɾzrY,p?"H5Ѿ:iB@?R?g྆o侫%Rq?뾕?5??0?3-@INѾX&heXd?;? ? IԿݿH|?%]ξb.jksH?%?YB?(?$֢?n侮?5<0`ړ>S?6Sm??F?/**hfP?HZz??I`jľys;?!LF@??0? GwW?D~ *?ྏZVE8~Vk?N'?Bz*ӎ? zA?1cT?>*?8t*?!wP?Ye? 3?>->glPq?96 ? }?}B˿X侦J*6?Fny񾳉<>㋣?f뾎6E,{=gzxZqR~TH`?b ?~?Sn =L +Ӿe6p0|ȉ ?Į+{,F,?CĿjc?LPҿ(o?\ؿuFk_>*?EY׾>Z_?LO'߾?J?c?Q9߾*` s?Qw?V]ξeL?PR?=o?z? v u4 $. <T槾 _Bќ^'?$B>?K}@??;?(@t?5D?=4P?Fh?5*ɘ-?/ #j??)俉H?N@- U?]U᏾'_?Fčރ?Jņ?@{?3*?z;?7{P?#П??4?-K?(ਿ]n}?9&\|?8R?%X;Ym?4y#?(ƾl>?#|Wrԧ̾$a͏?O˾_L?u\x`w?4hw?6| ?2BV )9>¿3?L<̾"2Q|?*?]a?B?$UNwJa??cȿ1ξD?Ny* ǿ<?U?) ܴ_꾉A?Z0?PϽ}ʿ⾝>?B?!?2Kel ( ۱?(9> %쾽3ܾ?"?BbJ?I[˾j$lg+T ž,[XP?7HORm+!?QGb5+?Aw@)I?JQ?2ߠ?BI?[ r?R?̄H$8?+?J?2sF?a?,'׾8;ῧ;?YP?,ʿs¾>?侍7?3о\>N?=`0Z?A0?H??@ ?5y?.$w 5?Yx` lD5vr2h?"j?/ѾBa{.?=@~ݴ?A ?;⾎{K?qK?C?MY??-?;T@?B\8ؾ_?Y?nj!is3Ǿ Qʾ8_? SL?.O?T?4f?0ELؾu֎?GT??4B\}?خ?~A7? zr??F~Ҿ?dqRƾh&?E[NcD?Hr(5ʾѿ?1R?h%ƾm6?95_˾?HBB=>0~q#ڽW2?=3)AH8"?q漿hI?5rCY0u?Ng4?;$a?a?;SH?"y ?̾M?-jInο?W?$+Ҿܿ?9?. ?3?$*?Y?A4N_Z?@>wi}?:?5?;3 ?Q0R?6оnf?!?9Jz?0ĿG?%w}_ξ?]亾 27?6v??}Z?@K?>1q`?]?1>)?ؒؿf?T ?$?޾_gFx?˾T ?=PÿԾz3Zڿ뾇x?/???/V?(D侬r?3 |?" ?F4?࿤9\X?$P6K|? $@h?F,0aI?*;̗= o7?K)?//GZ?0Isᅭ?V@6?5>Cྡྷ7n? "FO? _??j۾|&=?'>?>?>?$ ҋܾaP.p侑idz?Wz?Q?$ο4f?@,/?8?B%?`{`TNPaw,:6E?9$J@!޿Rfz?7񏾱lþGP?PZ?s7???N?v?w6 ?U?ʙ_?CL׾0?UpK j‘N?@?g%9c? ?xݾ?H]ǒ۾tܾ)䐾j? ??[Pn{>3?7f~?DMϿ?)|?+)?5y #ƾ5/-?B?[E?⌜LOu#?>>?)?ۿ}F? \RhEr?/T?⾞'?[$>%?V?W?u^l?G{쀾]G? @?{&ľ~2?"?ѿrx?+p?4Q? ,D8ɤ?JgRaX!5?*x6?5ǿD?5=K>4?* |u?Ⱦ ?-v?>, ?)ƿо?ʳJ!7?elꚾP!?Aͬ?Um?Ӛ?6?(( ?96s΂ <?;?;i:?BcB?RN@@al6 I[?,qm?MzV?8u?JR?>??.?Y1|?Y??LmUx'?q?W? ML&XA@پtS`?.>?Q;ɾNt?hb?X ?U*?3C_?*=X*cW?nM}@?-Mb?$#?M0?C~?7o"? rܾ”1?Ц?n??VUߵ? ?%c.?+P&.wz[? -V>,=O?ϣ!HԿタu4WI?q?+?'vZfn d?%P?]Ͼ?0P?C?V?A J?ü%?7?a:?Os(8?D4g7aӋؾu$*?$"lAPB@C1NuC6s?M⵾w 2? |@6'?*ܿ)#?:??˾ʾM+?*+?)>۾Z|w.a8s?+E??! vȆ? FL?ӌ㒾?0RZ?D՘y>0P?9&?Ut?8? w ?" Jӊ9t|o?Rt?'迫w??C?4[V+ f7?W?bQ~?,fdˬ8%,WXIC?T((?"R R,^꿗z ۓ]?+ r[,?-?TR?36>b?P?B?C?'?A2j_^?3է:u޾Z-TT̾/?8Q?,Ϋָh|?*7(H? eP4t4N>Pr? ƾP?n?C4?5zپfLȾ%wξbrڿ-?^ΐN?࠾i?fq؉ǿPF;?]㾍?D0ϻ֫sv?2?_?H}T?CW>0?0Xf?}a?F ?E̾]]^5l?S:?|Ѿd$B?5ֿ9?*j~e>T9l?D;?꒾>?_tުx"L@?JNھʾ?1h%?/=#xlMNk? 5b)mz??(X?e@8EC>X98ȳj? ھԪ?Ҿ Ծ*?-?Fp͗Z^?BO4\O?YdR( ?Q$i=׿;(_4L̾Q?MO?Y?:?hC?CUƾ z$?󶥿($#J?8Q#$?x. >?"j2?p?3R6?B'r?+ӘV?e`!Z@T??P׾7ִ?E{JɆ?<]j?:]D?Bp?2Ï?,^?_)$ɾI+Uq1(?6 !?5?d?O(= Hn;Pڿ(O?SF?ޛ꽒2&{S?#@Wڌ̾z?M ?ID;?:'?F=.>1hH?(5?5@;?<2?)W[??.w?~X?;?-,Ծ*&?+ &Ҿ?&?h*?v^yR?aS?`?!^潺LkD?U?89 ?P?@"I&?:w?SL ?8Q ̿J?ME[fоLٿռ`5 )*6p}?Y @ӾI+?&;Z}?MfnD?M~@i??޾9 }b^?;/8?ZR`^! 0xY?/K侜?*?2fh?*@?!6+?⾒ԾL|^?C?EsǑ 8_?j k`N?A٥?598?n/ofc2q|1ܾm?AJTY !9ˌ?S2꾉hF?-7ǀ? ?=?)j򿬫?2]5??U7 _>:qm?@fN?A?%?AZ?( P?stnf?Bվ( ?on?8j=x?z@:XH?g_5ȾR%?]¾l?1m?A^? .dX?F?Xa?0|?7҉`J?MR̾{vxZ?+DL2zOb>?0̿1Ko?VW0Q$yiVfc澌Spd7)$?`Q˿6+4yȽ][T꿗6N?X=ھ?8\@uAz?MF ?.ZXhF`?V̾W aq?#N ?UcRP>?2?2迅F?T<( 8%?9?GzVZH㌾?XBѽ@ ^uؾT>v?1U`?B~E8]I|#?N\?,?Pg?/6(~?N/o?>V0ƾ4Q-yLy?EU|^å?7?|?HD?H?&?0?? ?1w@?*ھr6?؏|?D{ 。6?3Ծ?ԅB ǂRc?='H?.L?LrÌrX nu*?+߉>g?!bL?''ͿKm{?twcoe4:-ȭ?'Ru?$5BA rL??&Z?8?<=?&C*أ$?z:?.xľL?>羒5ξwfd.?f嫿}?@?-b??}$h?IQ?#iW=.?\?:iqr?1Bf?;c?ޅ?Pҭ?? n^? X0EC??oȿ`n)HO^O5,?d"F?H?oL?vlgX.yNO?3 Dq?1?e+g?SٮGASB?+?Y?0f>ދv&|vѬ?C쾀俠f? #$`>?H?Ci?DDj??` 뽎y?@\Cv@?s#?H?$p?4 ?>sZ?IR@IW?DnB?HϷ뤿yh?Q?`80y}ÿ& y7?}^оI|oB?Ufn??/?"ZF Ͼ!p:> 3x +;?:?@j-˾q?~?`?4Fb?p>4'?BNֿ?'ְ?G?25.?)?0"R?'?.о1>G? ؿ+?89?"A\C>B@2=?0I?4\?  k4i?>ā0?0)I??}¹?./*DԕU?ԂZ>|>MX[?깾?;񿉤1,? ſa+?!$&(??܍{۱fH?5q?'^?Y~?Q-I2!`? n?28@Wѿnb8?c?$*8-ϼߵ?W ?; ^3?t ?tE*?ak?xA?LTF6?2qf ھ->?AOΊ?NSEj?]A?[W?gH@U|?@ u?XH7:?7?K:z:?L?7}{=z?=.m2?WJBǾ(?2?NοxCR%D6(XQj?؜&?VAQ?A"`F$?5俘P?Zג T g?T/e2?J⨾"BR@h֐ v- D?6Z(?;'Z?#?Dx}uC?Cʾ!???~q{?.hD|=rbM?M 6Kho?.x?[bt? ?1DSJT[?VFGH?9Ǎ?a?; O?:?3[?HZ\/?9X?)l6;ľ]Bx?Tq??B? yrr,?G |tʾytuѾD|?𽿌DŽ,|k?م?R?azP_࿟:WBbd?E ?l$T?-d?VU?M=?R+?L?g?FlԾb?,|?.L*n ?-_ pR^?7'?kq cUbrn~?1+ݽo?/ u>j?e?,WMmӾye?icolq>?AGP?8;Zk{¾"%X?6WԾ] ?Wƾr*C7?˴<0?N<@>J7g?N0MܾppT2۾?0ҋq?6fqD?C"?9ſ?Ya6*?9K"kD3,?A'?*m?H?(Ef?8 ?A??J :.?.Y'?BU|' ?2#?L?aA7.LCb,AI%?i2q?;țѾVf?*y6c?(>,zb]?L??ր:Ѿ=L?N'Z?t(i6>@9P>sr?\+?AKBǝV?lK?Ljc?]YPo t?@dn\?ܴ,>wU?F-?I\/@ry3@ IYa\_{׾z;c?,dfW㾡O?nw?St?]?b?_R>*h`?"DM0')?/ҾҊ8O࿣u?]=plcDu 8˾s>4H?-/p\'j?<վiM.ḾLÞ>׽ɿp8˾a?>T4ABPR?RX?(D~?W4ht%S?5TG0>gz?L8Qx?4T?5/ef?Bw=྘ JG_T%?/?A?T(;ga6?6W?2?5}񓿬e?H'ミh 2#? -?5!?:h|¾n_JPb>?_YBq?7M?(;cn$?Dϸ?&#蕾"?#վ ?Ͷ?P7 ~>XѵvZ?$޾hJC?4Cyx ?6x ?/ߌ?=)t?ֶ?о6vZ?K?JTCS??{b?1BU\vnj^ T'EM/΅ƿ?M?@Y?5S?Kي{n6˽G?W8?>,As[TH#T?[Ψj?% ?Q(?F| 1᫾1if,?P2?Kv?Me d?ؗ%H?қ~B<ϴ?Hyr#芾uaww?DWB)о7>~Rz>aξ?E,ؾ&j$?B#i?9a^ ? |P?Zn?9Gs~E ?3s?Ye?V^쾗?r;$?El?޿徆??Ff??d?G 8Il?2{p4E:?,-y?CA"]?5w?Do?UB%RA聾8v?NxӠ ɽ<#w^!?Zھ?Bʛ?W??Q?\?6}fK=?J?DЙ9 ?,(B?;)\Nk잾j[p?յCʾ)Sh?s?[ޱ>iM({@9>ײ?$aE{+J?.3?H>{x?^.X?B?G 꾘O?&j4l?JL?$S׾Ծ?p^?2Gg3r/?TS?H+F?4T?,OѾ ( D ?rY?:ǾMT9ľ̿B?+tn?(׽َI琿B<?ES"f?'C?9 ?{E?7u?cGn?8)^@v?hۿ ?[8†?7?O?7ZSf@R?W. Rƾξ.{Ի),qz 迦 &??C??ƿ~\/?=h?hĄ'?Rk?LV GG 6yĥ_%b㦾c^ 6??bo8?7?xYk0nX/lR?_ZpICmyZp6?|2*? !g?A?O:g,dxhۿ+?P{uj́(9? ?75I?nE ʾ3~?Q?K?&ݾ뛚]N{M?DPrݤ|X%(ܾ!OXA[?L?Vտid?k*-?)P?Nf@Dp:CC@3~?.?4?a~$3 ?XeJ>T?8?oHRt~y?o1=`?BT;\hu s?T׾:mu?Y֊?:4?\P~?,ϾZ?\.?Ҿ!9ƟQ<-⾯a#?6ԔrJ?5[U<-MS¾2F ? saX?A^(x9܁?߱X?K\ž?R@^i\?G?AJ/MFࢿAF?e"VwD@^pēƿwuо|⾱yt?A濠g|Ҿ@?'Lj?a@?L'?"y<ϧ3D? 3k4?& s/f]4d:_?/ni6?RB?a?18"ل?6?77[[?fݿe>?Kΰ?<ڨf?!¿.r*?B&?JETc"?:g?97?̾x)g?X|?J8,?2ت9?>y?q?`{6\N&nn?"f21_9O?:i?80mZK?4q?D?n¾P$?.?7M?ƹ?M?⾡G=<}?F@?L<о\sLv}Z?i?ҎꖾA?m3VΓ|}U?F#R?O`}?dK꾰c}?:?2q??ž?4YA?!, ־¾8?Sо5*4?@SNJx;?);?;Ȫ+?˯W#q8?3?C:)plM?P꾓Z?Z]?bn?6*[?_|R?9ޘ?N?Yo?,:YS?69@Kmh(L?./2(n&r?Z ?8?8F??%]?Ug?]?5cl?M >?z ?;?>~ ?3˾q7?z(Ⱦe?BR!B?R\F?: Ip>fBiK|]оM> ?'?4ؾ^? sIڿ?uf˪g5;wj$?:p ?:(t\?4l|mqbZ ?tuk>ƾ??@>? ?A]ᾜ'?#,6}7ott8X?$"Q< Y,\ ?Bذ?^biƾz5#W??:b;vX?X}@,~?2Su>I?#?#F8?SW?@ߦ?7Vm?J UzsľNL?*f?඾h?8Rپɾz侘z? cEPR?$:?]6gyS~g徎b-?'?;ﰾ{Zp?>8*Ab?Do~ƾ' ?ih?',?-X?WIY??;j?[f9bљ?W?+?1zi?% ?I澥 \?;yؾ^辿?= s?Ve>:?}?<GT?b>KA C͎@g( ?Z rZvz?f[T.Q?3tshF0?Gg,e̿?Wj<9%rOZX?17?=r?+8P?bN`?ޤ.?B -_?m}ھ>uj}l?@Z?R2P:!ھVԙ?'9`>?>u?M?2%yz???Z+*Rm[`dLR׾ܾ?+m?/l?@?FEHT!?2;>ɮ?K+oj3?X?悬 ?=?vz>D澟,i@m`J?JԿ {?TM?<ڢgL̾&9n7JY ?C)h?0Z,1fξeƾ6FM?#?Je¾=?P??CU࿝&|,?Umd?:T?Uy;1Ü?1.?};V@ÐX?!﷾M!8?R;j%?I! :S?,[lqp>?;?U`>HT?0?W?,h?hν8rF{+z?V1?Hv.0z?tz?Q=QUpN?k`V?6dA7?UEH?=Tv?48?*Ⱦcy!?*7E?)Gcۖ?Gjx?O侸?sx?Y|@(c97?9?UI?:V-?(m"?BiZ+7.ĿLW?4?9i6=󤾖?VW\X/Ҿ`?;r?n'}>K-~?ށ^?Zeؾ>ڴ݋쾿:V辔~?aZƾ2pƾ"?R@0Gz?nϾA.V?8|b??T>6?,)?!ې?!t8>4y i#?G?2z/:\v"?T3\mu?IFg0?Q6/?4)h?cJ"쾃˾D>>mľpC|8??'6?[¾]ɌF?ѹ?P?Bŋ?:.?R; ?<?i?/A(uBY@ +Q?NR?<O>ˡ?5: ? ?Z"$?2n{ʾ@?/ZWyg?վd6?'/~?S??|n?.U/?])%]N?d?:x׋?AW'Jv$4e,'?;\?1F#⁾v?4Fmb-ھm?6>?.L?3-1?ξ?e?9`R'9jt\o?-%~?1KQZN2\Fց?>G?.Lh?=!:wH(P ?9Z?.?Qz?LWP?6?SLtDʾT?@xA'?V?@S?QZv!@:D;u?Ou?*"r?ϓ\uþL?D?Z/ԾLJ@~?4H??G?7?N#.x?GOg1?nҾ˾_ҿ?%qD{ )'-?KP>v>^0ʮ?"??aBヤ,V4CIƫ?վ]擔п?#V bKK? ľ`ƾ&B8@?6v`?4A)?6``꿜[߾ ?824Gb9b??.#pqޫľ?X=*>Vmf(Jv¾;bNZI+Iur߾Df ž ?7?6ps??u:̾~:)?EY?7^?˨?0r?8\-D?..?Xg>݀?D]r YZ}(;?V羬Ԧ?&6\?2վI0? cT?2␾~spo?G1v%?+ P?ZZվ'n>"BR*=֛x? Ӿ "?)?;Z?H݊?7E[?'[1?D?`?I?^_,~Ɂf\+?gy?,I?N>qؾ[?P?)ҿ@{dOР?6ᄚ,V򾐊E/?6\XԾFh ?Cؘ?(t|?dQj ?9 >?AR|FyؾK?&x?Ci¿.n>4?-q~s?@oe?3?楾Nz?ˋY?.\_?0?6ݰdcM̤iʙ_ڿ?>2?L#]  ?Nwھ8gW?Ғø?̾c>(O?Mg?3-?]B?EIN?U*x?b+?`g?D)\) ?D?\ҾT'>N?,?=2^?D?ҿѵg׾SWh&hN?;~:?:"?L>b?Zݱ,abZGD> \ܾH:?T??*ѿN?B?9E 褾W\?Z?G*?-qM?4:?.ſyi?@|o$?5?H?\8?R_ ?aba?{?I?E꡾$?C`{??pϾ*( 1vrW3?Et(Z!f?p^R?>U+?F$gڍ"?_软q뾼/Y2侑VRmza^?= Bj?^,{??7$?.G? sOտ~ Zf~پq?5Pkc]࿃ke{9?s־Jd̾ڐ?hW@0@ϾI>q˾tj? Q?@ľ.-?=ZG?QUR?!(ھ?DkZ?a?&*wr8a??AGLk?Bx,"Q5n?C)?L-p?l?N 2`ϡH?>R?5r?&u&R4?5a'@?I&?`ƀh0:xbGB?/Ƹ ?(@VU:H?3݀?=z?*_?-{?Gfyu^ce'|O~hY!N?﴾!?P#??󿖱>ӣҾ ?=ȿI ?@ؾ2T?=Tؾ?M?o@"o?^CԾ?1̾ʓ?EG ?ߕצ?xhU?sswa@pHBA6?B+L??ľ/Pg?*x?_t?&9g?8C;þUf](vemL?3V?'?4R࠾EI7__'?/?nF=?xиۍ?CZԾ\6ha@nl?co_OIȽ^>T?aA⾁0?L_I%?]d>?Tᅵ?/r g#?>ZzS1?BF?6d?]g?:nU:?9DFp%.?-mӶ< >ྔSwmB ?>> ?!5پ?6.׾ Bv?)H>?׾O侭ԘyI?xj?-0|?b/?8J p.?=ԑ'O῎񂾤ڿ@?`X?[ȿ3'zVӾ\{Z<@BE ?W>2?ܞy?LZ=x@ ?JC>ھ꼾Oo?(v?5@?9?Glܾ;?/5c?N򾠴=ȾG|?Я?$e_l@?V>M?MC???U^^iY?V˾| L:-?Oק?::L6`ĿţT,(??d~?;ӓ?2?w?<Ս?4⾰ ?WZ_վ=UT/cn?6s>>4;7?=pX?, S<@$Ӏ?G@m?ݑ?P޾\z?-eȾ5n?Tֿ(3W&̾ n*?)4BQM꿠]H;?(w?C&)?A?0_>"Lr`s?$0?M>>Dƾl9_?2YhKAzl\ Lr'5|9?G?Iء?D? ;?9rξȾuz?) ??3ha?0оN?^yR? ?Į6|C?EP? ?Fm|?Z񺾋?S(?H?=`Vp8?;?02^?5`Z֭̚퍡iT{(]?چ?[?֤?cz?4~yY?WZ]??5{? &OdE?1+yR~?G?[B3?\!F?:~&⿩Ŵ?Nw{t㾒?VX6#\j?+N72?:r?NMro?#i?9hƾ4Й?6?K?,E?(j׾ 2>d?5?^:~R?ٵ&W.ܾB,ҾX_1??8;=I ˾ >?G̿ XjAh~7g?I*K?F>?. ?] ?f?0]~?R 俖s=,?yp :O?  Yʿ&?&kRMJ?F0?# ??迫Ta D(?]Q¾T>W?=ٿ]&7fF?B?꾒 ??.t?TSZlZd?.4?Fɰ? ?]ܿ;HB?0s?Hb?5?G-?Et9f3?+͉<6y`LP?@?@?]S ?Lk?A}QB '0k^ʾC?&徿??"l]~?Nƿ6?BjI?GN ?ENjz[?E h?U乾a(?<ԉ>o[֩?>??I?CZGP޿v0?$?)?jMꀿs?YSH?/ ?H(4^?,3~Ҿ`?&>>?v?\KC{&O?JWr?Y?%WC`?!NpRJ?3c?G:?B+Z?8 K?PW"Ii?/?Kg@.[T5>Lj޾wޢ8?X?r@?F0>_N?UR~e+?7!?5={;_9?A?BӾ;&?:b'?A\,0侎r"N7}z*0Z??a.?HHm?-3? Hhw侗* Aӿ澶0?E0?U?Kj>t&>^2?Mr?*Nؾ¢7{?:EbľәuHE?61?yĿ?,n>}PNaP?2rK ?@dq~?%Ѵf?g`.?܆>>yb?A?_&?9??H~{ nb?.׾}Ԓ ?1X?+D2*odmg9u{hK?;"ϾfT?5,>I?TAuWSb2ch?OV?ԢGܴ.C?]k??k>\Ff&?EenN־8?x,>澽?:XS?M?3M?Ex?.,ASԕ?7=%?Fhh% O(?&(Vs'&?8"btn?"Ϸ'J?-b>?>eOI=?7?Dg!vWKS>'?M^ ?/>?Jcnr>D@?3_N?)H ?tHվ=?7 ?6vM?XW3Bb5?[=?PkmP?1DHtv%P׾̘L?2 _1cP ? s?y?x&?P<?!?X?JԿ!?"0x?-cL?Tr?2Z94{?Dl?/? g@c2>?*?/|hR?(M?Ƞf?A-j= *_?;P?M.?G<8o?辧M[?Tت?O?ܾ?1z?5ˊ?2?N9"?F_*5??+2/Mz}v?Xu?SȚ?I28?GpHK=н!>?/x1^?'b̾C?B=9ڶ`x,h?5?A1 ?9ᅵ{?3?%->e9?IT¾vԾ&~?O?J?A mBc>?=޾jS~?5n3@3:-F"z?]$Vuh?O뿦۾S0?:?ES?"e;?w־qþoKk辤?Ce?(0>%>?7cteпs?^n?j?oZA?E?SRN>?RSݾ#>|~?>+3Q4z 㼾ܝRv?.w0h?K??n:?eqvL|?9;?9.~?u(zc:PM6?N1ž&?\?A?#NcD<?(KxQVܾa'?>Sf?GdH?A]{v,lǾwF9 D?T?[d-ؓ?$?#O?r? i?-5lVaa\|?0"?0?NN|QR?'2??ھ7u?5$?"?$?DQ?%7?:dx"꿞Z?iwоT?;R7+?oMx]?3V?Jj?<| ?>6?q?,?e?&?*W?"?+I*J^&?i$?}p?ru=ҿb+%+?zпk?:%?;UR?"־R|wi2f1T?$P?JbM?9?7,?7?X? n?_F&k0?o?\Vhr8/?㏫GϾdIA?U:?hB6q? C!?R1?nu?T?%48-?[ʌxbcy?(.?jƾ :Q?V?Q?6*꾿|?CZ ?Af?JBS?sF??ʾB? ?J-k?7Ügjl?g?/&?<:ھV?š?D?Ⱦ??c?R2?1МTX,*?gާ?0?=)*b<?&>?3 VeZ?E>Uھ2*!B*?@B?I=?l??WXv?_m]?Js?+?Ara~о\? |l^Ts?MbJ"!g?Tz?Bwʨ?E l?p޿ 6ѣ?l?&I?5?5L?Pg忣&l?O0^?If??*]͚?(?2̹wa?K:?U >d?0:-4?-v?3[?q?tn??8'&ln?SGk{xPþ4?9㾁%Tw"H0mQ?>j?;d7?OQr|(]U?,Θ?!{gyw>og7؉X?EiB˵ o?Z_K3?BQKa?C(οkʚԇE?HMѿ`?J?A)?5;qH?=Iw?^?GsHξցv'= B>IB?ygtwF?%`V?LHr?>?R^?ټ<z?* ϚxT?D?Cc"?.M?ھ?<0vZ?H鿠Bn־ͮE?* @?]l?sZоsͳ?C7?C:S?@_?>>?H.꾕6࿪>z?1S?6?>澃Y?!?.Z?L?5?‰xi앾\?" tH j6L* ?5 ?,ܾvV@*B?3f?? 1ڿN?DZ?%Yu?5+?G©?d b?M;gɿ*O5b?*$r%Ͼ̭?n3[̦?1_#?D#?JwzGs?QHN?-þ?Ncľ^{?,Ծ:lFy?.?rʾO2/?;*7?þ2??:w޾&"L\h>[? ܤ:Y??0$2l9|vE?*?4>@?lh?E|Wsf?.r?vX?6r?` ;t?$?q?? qD˘|~@?kS?$m#メ?=ܹ?PMJB7X?K?,ܿ?:?@<ӄP=?;Yq?B课W.4 ׾t?D?ʾ6Gxwghž OhzE7EX?;Yg-O?2ܿm!? ̿|>nXyx?4*?#0?4?)f?ZLt?@6?ɾl~?zW?* klQٻ󿢐?fC;_p?ߦqW?*nZnǿD?- `A'?8>?B?_?P~?DVNoˀ?:?<=W?iD?+l]?Q뾈?WH?]du@re4?Ai?e?:,0@_?zr?'U k}*aH?d?*=?S`*?;?^?@S> ?3־&>Z핿?G.$DnH >7g?% ?/8?<=?H22/(?0?:K?1ƻ ?GyQ4($?%L>?fVy?"?Rl?+ZD?UbWx?.KLF?Ko3V?/e_ ?30|zž?N?FU?2&m?L?>1?+1+t?$">齾LW?'t{?1F߾ss?r?ن?CJG?3tž˩kR?ZꜾL{V?,`\H?2žktXi)x?W\>VV?͹濧=?7f$? -?R@?L?E`k? -ń6>4?<>?"r?-Hٿgtyr?;nؽR?Fk5¿?\Ц=6?:? aj{?2j?)? zb?B%4-+/MHCހQ7?`4 ?7j?w?0j?5u0~h?C?@?HMyMz?e 2m?M?l#?K,?lῠ?"?+?^m%?<ཾ;6S?=삾mƖn>VwA`.9?u9 !?93xܾL{4f}z }ZL63 d!b?R~CǐzDo?@'?+6l?dҾu?/b>eq?{_ek?$ӟ?UF俜&?*P?RĜ\:?=Dz0^?.rF?͋?a]俤L]hH@?֕n?9?=!? ?! ҿξ樿75%Ns2 }S??Az?[ ܾ=b?BB?H6?-rd?A@;`?˾?5 ,iO\񭾈{?n?3W?:1~o?]FJnR?M?4^?H7Њmx~?RU?ۏZ?H<2ѧ? D?@ Yn?~???`Z?[l?k?dޒ?!:?ʾB?2%Z?2? c?$\$\?ؾq‾(.?<]N?1n濥>?/:fk$?IH?4FtܿdP:aӿ?-MeK×h?,?l:2y?]qI0m,>:'i ģPt?#=??sB@4۪뾖c>]۾Eo?OB?4*Ծ?Ƌm T.X6ҾsGv᱿z㾪br?)*J*?ғ?8cbh?@D?K=n 3@? oCn&lQJտ8c@԰?/M?9?]ȾSҾ{~o|?:)?%y?=lk?F-??5ٽ`??Y?"?26. ?YhH7]Ծ2MWj@09 F?7BJ?LDҾ!?R(?Oݿпľ~bʾ/.b?[!?_6?#&U?4ľFʾl@k?I0p?=9#?A߾38? <̖?H&Iþ?E`T?J|ڌ?`&?\2s?NR?#}h4uJip?F.xdĺB?QٔՐ?gڹ5Xa?3Z?f?:״#A辺?&0?=s?\?`@%\AZޚBfr@-?񨿐N8% 牾|?>?]D%ƿ=?Kȷ?BS'LY!ݾ?.gQ}?-𾾄~2GL?&?@"7ͮD?=riUse?)|j?.\u%l߅?.?ò?)~???Ҍ?FC?;(d}]5L?%@?@־?&T?:;:k?<Ǝ?P)@=B@?={?Qg!d)?c2H(ѿ*D?iי?Y"0??#?NP:q>$с)&[?]ϕF?4Od? Z5?9?7q2?UB~6?P#O?>t?5H?9?Z?+ql ?,?=?;? ??#3?:?/M0@i/?&%I8%>?R/?7'?=Tpn?$pƿ6k?ZWS@-a?6 ?2܉]ˈ>Τ6N?Cܩ Lo߾Ɨj?>1?Tb?WF?&͉?Gj _\R?$eI<:?)]YuJv~ܾ?1{?)Dֿ?az?0]=`?澛п=?I?%Q?ٶ~?`!?2վĕ?55F?o} ?C?Lm?U?(?8z!;?;% 'D,Y6ƿ?2L?䛀vb>J+?&ξRzK %?.*!?=??|70?㾛 ?۾_]&po?Ռ:ڦ@ԋ?Oi>;>靾#ID?"A'ADz(?3Jc%jLTln?#e޿N?DR5?8⾗h b?D*<$??H.t?X0 ??b?/O?J8?<@; (we>&?1b>X?\?n?*ȶa@ @"L[?o"#c?@v<1?9>37'??Dྦྷcc޻?K/?(%?6ʾ4T?2nxDٽT?F?[bdμGHK?I׽9?=J:?IzT?A(8;←??.Mr?o?ReM?@̾Kz@?7, B3?1G?ӡ?-n?ʇ cm̾?G@/\?$?1D[y, U)?B?/7$?:м8?5p?ݍ޾|?Mu@?/u@,.J?Z'?;V? ߸?? > Vf5 QrNuVc>}t?`jU*?3=?0V?#l?._>r? }?PX?KH?ʎw^?0"|G?ŏоھ3Z?@S@,/Dx+-g?Ab?8? ?Bi?&ھv-cDat?Weɾ09꾽C=?M?+z?_?1߾W.F.$>վt~qx ?B±hu}>?%H9b?(}?IUfKL?e*?\=Vx:?P`޾6J:<?'?% ?Y!](??Ft0O !?:i0?qx[.tH?(ס?8R?ľ?:Rf?M?;Eɘ&?PC܈p?RjkϘ?:(x?A'W?8?>9[??F?-` ?-v?';쾥TDz?6eM]?*ڨ}?7J?C??*v@NGWUN@- Bh&|?-w?"?7|b.Q:׾d8?:t?4Z?H >ddP!>~^)d+пMq^辐?1Out?EԽs+?,.N??rپvoc78WLпe|?H}JwᄒҾ+v3}?쿩쾇Q?Ŵ_оAp[>򯾏@# Hz6ݾ`$wT쿎P?q?6}->8A+A%C?ξtiep?Rj?7?>qMH?@Z?;x?/T[?ƾN?RH?C~y?JzǾ&t@A(t?.?W3 4?U?ٌ?6Ixm?HL3zh?A[atm3yF?Lؐ?%?&ھ=Dʚ?h?Ri4?6jľ7G.iYjj#?C?6澷:Z7?D?YU??48V?iBL'??J8&MپP?DPU{?A4mk־ӾS㾔7ニZ?,_ÿNbSR?ľ;EH2Yk^XHľT?;C/=ݾb?74'Yžf;?6+ ‚?9 $ ?:j5?A?(qٶȲ?G?*& ?2;⿝?7>?N^?7/߾@h?Ә?Fd? $V?F#?܊?9K?0̾.1l@`ۙl@v?ׄ2(ɸt۾R#ȫϠ?t2?0?F>ɿ73R?F"?R;?I.z>1显N,O?L ?>?P?({/P[ |?-~'?M>=fk线bQVr?EH?I@ɾρҾYY@<~,???ܾf-?\~5H?P@YҾM?_iZwt`hr:?< z)?d}>ʾUJfQ㾚.|>AgAZ5.?F0]dX\~?+?3h?*8?=wIW:u}?9iD?=4?c^o;]?%?2@ @j>?ZYa?K;? rվ`%ye?@Do޽??4L?:eX?1\L?T#?@4-?:P;V?xKƾC? p?Kھ7 ?I6?Pö?134?PoK?-%ܿ־?%@?8J Mh?MR 侜?-R:?>;?.澔?ڿ,?I x p_?4E\\P?O~?gDš?-?,Pm?m&ׯ ?D#?3a?N[6fľK@f^9A>$N? q)L.?1\?.?3E3?0D>?M4?:wm$?c`"?Ux?F?N? tJƮd?Rr?/?6J?ܾl&?6@&?Q? '~?Ef?F#F;r?U@h+?Q?I1D?8{`?O?1T*P,??XNNvpoD?2.p?_ـ?9G?6ʀ?)B?'QuԾL?"vc꾯 ?gQ"?7՝?P?0f? 3p?h H?H"?(?!B7wT?ϑ!Ajw?;q" ?$jҿ9?Dqtр?/%?4w.:8?`[?>?wI?*tcr?$.9?C/1?ga?Nʾ C ?6)?>[&pľ_Q֢ؖ`?AͲ澶x`P?^?Lr?ذv ??, 4W?HUO?3&ξoRx'W?: ?;v;¾??Zi[?8L|qŝ?S;?3l?#?%,п5e?B`?J&!(?<'M?O%?SK?EvlM5?ض<+RnTR?B??)Ú m2?HD0q?,ƾYX?@cھ#?/HU@?.?DlEؾH;$v:?*B?Ǿƾ*d?!˾?2??O ?rٓ>l?+3:?-?S?V?+꾟ݤ?!?:UuT?)5?Uv ?#?C?L㸾?' !(Ҿw?#HA?%l"N7?G?-dZ@J?A(Z7Lpb?' (alt>E"Ov? f>p?6O?B2>N?:Kݦs?X濘?+2?W8?,q?9K?J+Z?OU?5w?ȓKt̾R?$?:(?Mf?4?Jz;#2?Y^迚Gu/*???*dr??0,*>՛'H?m?."f?/3?Ԝ?J?qоWP?a?(~{v#2?+?L׃u8 ?my?"oôI?CGX= S5Ŀ!?ֿ}?t!?4M?ʾ{ݾl?-aLJ5?$O?C?7{ ~?:?+Ҿhr?$X?z۾/yX?&?-l?%&6??A?%hcw[?.A?ѵv?1X^e_bE,>l ?D[?Ad(P~rl|QF?@DOH%?ZK/??)*?A }Rk?F?RS)?!w?M3Ҿ?3۾FjX?ߛ:P>0?Dj?͉? ?(i*?+?DѾPؽθľ N?پϾ ?njcHU`"iwVn2#꾝&?=+c@྇RӾp?4H?3J?:u.8??v<о=?.W`NH[۾d$~?^| ?>Z?0?Kuɻ-?L΄?=zAF?AQ1?*ӿ?|d*4[4̿2d |?#!??'?A㔾V|?9!wU(ue?3T??e?Fl{?,u̾^y??C ?-|?)?72uھ_?0E}{?=jW?*+?2!0ӐREJ=3?-?MD/:DP?`п<ւO?-P?hɵ?#iɸ2ANy?%$?DdMF%?*u?%L&?~qtsʾž4%?%{?H?:?O ?9?4yM?&u `?G@)k??-?9D&Lǿ?&⿢c?VJx?»?Kg\fӾ!yǾk``@s?AV.v??'辯l?U 8Hƌ?3u?,澮cMY*lC?M X?RB?<=?:?`??\pAT??S)3?,avvU<-?3?w@,迦q#?%o?]3?[=ݾ}t4? 5?XP?B J?;C?">?5Ӫ?ȺsT??ݍ[?4 ?!>?5Y9? ?;l{i30?:d?$r?mH!/'?-ۘbd?ߢ?C?? ?-:?B .B?7nlT?١Ob?FYC?4^Ru$kZ?eGRa]s`ѿ@?N;N?L⾽¾?d?܈?%ظmi?<=; yO hG?Cz?;=3O1ľf?&MS2?@ξ=ʴ?^?]!Bj>n3?+1?6+< U?m>#пsr,w?I?+kO?Ylo?9=WT8T8)?K ?U:>?ݬz?N-A?2\3F@v?K(f־Gb?HVƿ?$I?:NΨ?%?6?(?3?'iT+F?Ab?2??=^(?`??J? ?I@ R?-?(|^Y?: VF?/@?Zr?F_Pܜ?(V?5?I_B,?o?CD?jd?4ؾI0ִ?s@PM?Tk^?+-ξMӤo Й`B?3Ogپ%? )zT\?;6,?@-?ʞ?5Ge?1׫k迟p>V?Q%}?(^28`mN?-)?dt?FM?%^?'{>gM>?/2?]7?@m^???.bS?*9?? 6y w? ҾMv?,~oy?36ھL?>€??I?B?Lؾs?U(򾑋R?GۭB) 0p??Lsa'?Ae?H턾[^A?>U? Vt?M"Ѿz̤t =?Je?u?I挾 ?Jp` md^?Iw?s??5 ^S@d(?Bn 0(?ڡ"=K'?Pƾ?;ޗ?4d?|݇sQC\ƾW+>GN>?U/?Aw?Bnas€?-_n?)?B.뾉j,? }?]lTԿ/gLV:)3ͿLjY[ɾs ?6em_?2I/!?K?PZ?&?3T(?.x?6S?AlZ?ʾ?Lhf!?U?%վ?E!5TĔͽvͣ?He.Ӟ?? ?c\?YW4ƾi%?5 ?/xÝLa@꾙3d>a??1!4z?ڏ{H?RL?y?6?%4`?@v??8??$?-d?2R8>?:0?*u?1R?]?3g[ƾ/4?+޿j?ә?@U/S !?Ŀ?Z???򻿚?K iM?cie 3 | Hžt {ƾYlsk̹[e=?;׉ Z?IrEh?IO?YfC&um?W3?O?q?,o)&?9?G?Vf?2?`+?9d?2hZm?B("?Pzn?)g/iR?1:??wھ?TZ~{tJ&Q 쾰Rc?-dc?h?I??1:?%|K?7˾Ps_A<9$N??+?2H?>?*};$?q*hR ?Ѿchč?:A)+̫?,?;.+?C?A?Wu4?&dt࿭HZ?6?V>t>?y1?.?l8PD?<l(.>W`?RU??{B?Ci~?OX?@G侚?F ,w?3l?)vr?hE?) ?;AO?.B?5^7? ?;-?T=?k7 W?F?-)/׼ ?.oǾ%ѐ?' '?DV?:Yv?2L4]?/ c?9 þdn[;g?'<?S?=?3?@o~?<>w{nt e5?՟??C?II?O??Lv&P[蘾G;?;Ru?C?JB?uwF?5?LESaTo?TC[?8T?^?:;u?B#?WS/>?9A?Ԟ}^?5?&ӛmD?7K5?N꾿a2h5?W2?Ⱦc2?-(j?2?*CjXK8› &?j?5?C?G?N? r?k?4jBE?Jp?DǾ?D:GlJQ?C? d?=5u?.?,k?MfW?*a?NɄ :"?bd+?I5U?O÷?5?Dޚ ?Ю>玿;_?&Ls?2{x?B=QFb?4*?8Ma?88`?=?DE>澫̾$?HOL?O3?CG?0t8?R/۴?Ae]x[?C⾕?I?763 ܿ92?7ϰտ? ?/?J9!?-(u?Vz?0|?W?_?:>RVKUF84?008*b?s?+ƙD???@`?+価e&2?& ?@by+C@*"+ ?F&?J?B?4.$ssCI?Ӑ`.:ϋDB?؎?/^>lhI?X(u?$Z'I? ^?&?@ ƕ?3[?8c? *𾜓h?"e>R?*srg?5ξd6?BS4>?3&xƾ(?? ??=?0$?3b$A ?=o?8V:YH?ZO:8? MQ뿠Wwkg?NcR?[b?bJ?>?o&?Kx?Vp>e?'\D?? &bQ>?%>-?7{??7X?-;$??Ge7?C?)?~$`2w??γ*# t?9n?PȺ<`>?C3D?=A?+;㾚Vrп[0 5jxZQ&?9Y?IWF>(M,?$gex?4@<XBf?/v־? ?!w?ANܾENR\-?=T,n?4پq?\f$?G8w?V˱?G̳?6^?" ?K-Z_?5 ?Z?%>jV?JZ'?>0? z?#/.?ЖC _@jѾBb-}?"V?o Y:y??ճ<@$~?-l?O?¢?DrL?FL?B:0Ͽ^?9b?(,Jvz]?¾%?=p?;?L$oҽm:k??^?,/?? {?(gVE?W?)g鴾Wux?l?E?f?A?+???Bٿ#CB?)Y?-?ߟ|N?=3 ?4K?1Xc?322BZ?Knd??nL?PhHQۣ?R?11?_/?En@YBr?@(r=f"پW?@Ҿ;?4?l?617p?Zgq?C?(b?{? Q&krg?.w?窎@'aC?lz??j, R?@ ?An=@?"?Լ?۾!?U?-l?쿮:Ⱦߋ?3L?V?0߾i$L(?=?!;ֹ澤?<?$b??[Ҿ?Pkz$fྩ }X@?'Ŷ4hH>ɬӾ]pO?<*?H~qBL]??վӾX&? )?$Z?Tgj?6ƉϾq*,7ܽ:Ԙ?vay־|\¾y*KX?(,?8yn~?,E??Zƾ[2V?LR?/¾8?A?C|?>%+?S[Po ?%w?$"CVd+")?*=yj-,wֽb>?[??Rr?4,t+?'Ҿ^?30v\?>d?/?{?( oҴվYn|nnG?0z5?B\ǾN?'?mv5?N??P?.[?޼Fs @=8@4?`?ƾ, ?E?9+>?(l˫$?v??-\?Hu&?9B`?k[?)2?%M?ADͥC]ԆA >Z?w⾪?۾9??2u*?W?!???"Xl?:?S޿?3⾏^??X(?H ? 577?D?\ ?6?0ruWt?:Uw?8eF#/?$:ֿ5>?]>?};K}aᵾ?N澹t?M*?> ?L?80Ɔ?B=\KD?E d>p#VVӿ|~ǿ0!(?4{a辞ѷ?JP?;߷?"?=?@`V? _?Ue?>N??/?:H?5Ay3rDS?;?.O?=VaaD3??̳P?t?WtfSk?96ȿb?SV?7?>ݾ9r?N"-?b@S?3q? r?8?:?0:'?@Bk\%i?İ򾂭a?V.a:?Jj?`%"?5:۾^m > (?l#`S?w?R?(վھWC ?%?&Xn9=?T?- ??~?IuZS?4?G c_½>?YqL󾮆n>ǵ?JJ$?ל?1@%пοit$$?Qj0P޾⾯ @@CYCHBRM@% ??Ei?7qR?sPХ?IBL+ w6f?w?1F?MԳT\?,?%]?Dh?Cm7?#nR?"?J>r@~źy6@?:H0B}su?_zhо#K}ZKms?4poнg?T?ii Ǿ{?QYD_?1?<\eNo?7:% ?/V?$ `?5BwF>(Ϡ???;0?/?ў2 C ?OQ!Hi?"v?+"?"H?^H˾^$?rQ?3@?G>N?1' ̋?پ׊VW?%-w :?A? o?Z3h?@ Zg0.?ؿ H>Ƶm??Fs? {?@"z}>E2?R5??H?o?~-zҾȁ@?п$?=d?"a?J!?'W?;1D:_?վ? ?ȾβpQz޾4?vU侖p?9վ?h'X??5?Xz=?sؾes?K$8\;پ?@ླf?2i?U T?&J@6?W;?!Ƅ?^A?5F@A̤@rӸ?5&?@- ?!^?Fj?"?&m쾤X>L9K?h+?*@B? Ržl]?2?5(?) ~?)?\c #?W>?8c?/b?+6zlbƍo?0K?GlO?=2?ʸݕ?>-.}&R?D&z?ScIgQK%d.rr^?4zk?@:f׿Mmk?E?,y?:!V㾆|㾂Tc?7?\RX.?bP2=? ;?%1?Z oJ@?k;R[@! aȆF?:Ӿ4?!P?(mʂ?0?P$&?S>Ef?B??)?Sp?*[žI9?G??4>j?.&*?:?6)xPԠ*?6ȾJ?9%TNl?0h?7?L]?v?/@Zj\˾⿟X4M-?l?:c9?䰲?Pqۿ+?%?&@?(K6v?1~^??$???Et?,tq1ArBAe~@Τ?T{v>,??0?Haj?69f?->?<|U‹??!?A?(j ?dE~:?^?'>/^hܾ:侂ؿ읾TY ?4?!#?"\?۸>Ҿ>;ؿAY>A?j?f?,L7i?&e?S=v?%`?¾ϚKTk$t?' ?8Se/?U?M|?H@?5K8wf}?-??ƾ͋?Yذ辜?42srA?ճ>)W|վKg?#of俥s?BBGd(?9ݎ?5[? q^?$?JE?>t=:R:?WY?TݫJ>Ծ7'I^?;?Hw?ݡ@R@? ^k???ھfxef?(z?+>^?@^hAоF 1ttD?Eh"?5W??W?|p?@]5 Ȑ?3uD.?9$?=?4]#z>X??NEE?5$_??Y㠾?I9?0:!?0@? \|?Cv?7>?|?A?:n?AQ<ƈ?6d?=??M3?Vt?/g/xwϾ1?=쾯/tc쾋^ܾ;>?1;?vz"?M!?Ӗb?|վC??BR?4s+q?Zq᭐Q̿Y?,J8?YБ}sR^?~ƾξľy"?+w25p?$?<98>h? Ф??ҍ""R?AK2?H>?Lᮖ ??M+p?y?@:m?8<?(?99?)?;RJ|&/?3v4T:(?6ה?_Qjc?Q]DvxB?SV?wVĬp'?K?6(?dC~ ?]> ? &??Dz⵴#a?"`N1;x?O ܛؾܾ?ZA'C}?BAZ?l>?? ?84?=x?3?3y활?Itf?E?n?H?,?F1iH?Խ?.wFs׽?0n%?>ArYlh?2:\?O)?mBоҽ??6??@u@ֿ?1Eq?]?8#?Xf?z6mDd?5ö•t?1ѩ?S%?7??i)-?8 @"D?/n? '=Կ{֕r?) ?*3ib@>?8?AW?G}"?'&_󲾟P㾕wp?C㚾 c>}Hߐ?N"?N;S?I?)?b?1$ ?.^?EjO־?Ff?B?c?+`?<-?(?-?Aɸ>㿼? ?RN"?m?@N?=۾ƭIJ{?V?*.N?PUP?A/t?6?2R??k?G?J? xqо^*?AoNJ?ҩ?=A?,?:>M?R5L?A8=?9ʾ2ܣ?& Ib???J?j?ͯ?'x? Ӝ;A?U?#Ֆ?*|'A$BQBj@?FC"N?>ľ]+?57?+?BV?a?OEb?R0ay~?@tO?VI?i?3N>z e?-?%/F)쾿ʢ?*B?;Mf?J ""?- q3?=z?G??HձľWW?8ZD ?*k+?a޿Oz?ߌG?ߟ? ?ǎď zľjj?' H?$̾6?k"?B??DC?(_>ۀ?;-})|(i׾LGţ?P?@lt?#4ڽ=A`c%*m?s'P#?=Q3|=E?olył?$y߾Ģ?p'Y[?'?E4@?T?;ݨ??2u?M:?⌾z?A~k2?N?:O*?h$ʿ?J]R?Iľ[h?6۠:М?0 ,?2'?qX2?^ŋ?$?}F?R`?.T_?0^?ApϾz11̾JnO R*??ߟ?4վN??&)R "??j?#?.!ڽ(42s?zo?'b2?X?a?=-?-wTYQy^pᾼi*>?. ?Nk̾+x?I]?'*$ _d?3v5pj9?3wq@BqBAG?oN5-?0:B?Q?4e?*Z?g0?F? ?HN?ʾ?$?A־վ/??FgR? sM ,?2?# ׺~풎a辕?9?*S~꿔R???~?Mj?I ^h?8y VM?#?=rʾ?/$3= ?>V?C?=3DT^@?b?*?%zؾ6 -gw ?Ƈ9.X?2?RC=0Gh !봻@z?FE`>GsE?0_?%u?.B$??=@Af>C^? B᧾zN??*ھ?)e^?I?8]b8*?-a?)+mp4Ⱦ~@?J`'? ??3x?yo?6-i?f?% =?,tN øYT~0?9"8?VBU+?B =???AsP?EFv?uſHZ ?,0Nؿ??>G?M3?3Hy?>ʾJ?tngL?O# >.?A? x?Asw?B=\?2aL_?-F?vI#\և<@v?Rc}?<>U?Mrj?)h,?I\žD9j/V ?s<?V? P?8; z/<q$?QTn?!D?*????'?5M wz?P?M-%?*u+Gh?4?g?+?.g? dL?k?\=f?_??澎\{ ?4оUS?2XVf?E?(?;6L??J9?Of?Y?V/^^?^^i? 8?.?*#R4? ?;4?_۾?+m+? xƾ[m̭k?$?I^?P?3ռ?D~ƾd&xy6B?,@XB=X@?Q?Γ?(?,Ҏ?<^@?AvA@ͩW?+2w?1*pF O/?.P6F?1?,1$?  ??;qǿ՞>ה+i?M:?* uP?,?)Zs?LPT?HV<@?<,$??*95]>x?HwcVھ&̾뾙As*?HW7?k.2gFG,X?M?6Y?4lk?KK?# ?9;pb?V?Dr?>{ ?%\ҿ<?/?h?c?VR?!3߿?%}ϾV??W?$?9?26+U9?/Gla?ӣbmp?8?Qd5?;^jj?? y~?.q?FZ?e?&e_ľgq\r!T? ?Ծ???P#gd?M?:?R=f?% ۲?/~q@ S%C {@s35Q ?(?8DҿO?O?:@$@?+?+k!MUEOT[q?f ^>7gHVK?8R7?ۍV?B?<>҄>z@gϿ_?2W & E?2X?0? ?9vlΚ*\;?@D?+c뿟J ?"+r?G?ٙ(?8H?4CO? ?$?z|??8ƿw0??s ?.7?&xƾ'?Gc=>?ukYg?:GX? [?4Pp?C?Qu?Qu[~?C??ofLmF?QhD\Z`?iC6߿r?CĒ|@"?*c?O( o&s?o;?1־ͽ?5:#N>o`)?戶?侲W!^?U?4*?:&?ؾz?2|?0%'?8?/̾2龖S쿥nڿ (?Ȏ?*L?'nݾ;?UK?X ?1???޾ G5B?9?;卑H@?:~D?7?-|dV.?;#?=?5_?&)-#?.@ƾu4?K:T>x/T??I$o?4?ؼ@%} ??3'G\?;8?#ONf㜿?.W{@WqTJx?L?+^cf?%X?8di޿ H?;|Az?]?%?-Ԭ?J3Ᾱ؃?3~?Ӳt?9Ӿ >CľPgMVly?4?Hy>*(w1 ?aп6 yWY?jډ= ?.:2yĴ?4?@ d?"?R!ü89?O\x w?Lľt:f?>?1mr?Xvb?=?N?=ݒ"?@ؾt?EUAR?7? 2?If n?в}٦sc<˾Rbh҇?۝3?BcBvEH]c?#X?w? $YĬ$ ;&?FS2U?W?\9?, o[G`?P5&l?2݀Z?dObd?Mrwa꾲v8{f?,¾6nyg?)?? O6R>?Ԗ? 0?8i?$"?Y\AϾ?&?'Ldz?Z%,?)?6W?L?Rkwbᾠ?@ ?ib?2(}L?@ od?-);0Jo?F͠i?I[P?4߽?᜾j'4?F%c?9y0?|ާ?l?P迗ФFon?+vs!ξ#?lMԿ w?n ?RK?2頾CԾ3?15sl???E`/x?5[?("?Bt8u?؀V~?:M?Bk?GU~?תj־r?<3?(9?9\rʃ2x?䊂_EAB?0A?5.w(ؠ??˜ؾl_?=B>ˣݾ$??`?P99b,u}?[yCy-i?"?@Dn?KȾMO?? ־u?A8?Y?? ?m?.?̾&"?@Uh4m?Qg?=hY>1ɾ`?!?A'^g?" $?3vV??&Jw _þHO|PF?FJ\,4@lA %?? ~ľ0?? ?9̾Ύ?=Q~?b񴾓s?C?3wHi𿔠?S&ȃH?:徂sƾkWd?k6?+?缸?>p?=?~h0V? M? Ңd??g???d?Xʙ#?4াP$?5F?=R?f?E㪾ť?Xb&|ҿ?K??.B Br???$?#ȾԿw?--P>D0?8o?Bny?0,x+52{?5Ny< ?)?J,о͏G7e?'^?6?+Yr?2꾔-?D`H"?8?ܖ?o??;?_?B ?C ʐS?C,!0?g?R?=0?J ~l?LIਢ?C@?85^"侰0?7u[V`3'忕=?ā2?f9E5?8HDľR?B[=H? M? 뾛QClH J>?9&aſ/?Ud?-^?O?\?cuɾv? ں?Am0B~AH?TO?&/L>-Zܾ?6u~?"CQ?-ښ<}f񾂱??6 e??o?1dqF?#Q?)e?Ta?M&?MP?+ϙǻ3?D>k? |F?Et/x4\t?9 ?&žf??7f?/R?,?=.? ?9g¦u?5?‡?95ݾ;b俗?Gt?@]y?䠾:;?E?Q&?CnzC?wX?4ƿް?;0?8h0p>`?9l3 ɨ?r6?Ga־,?Jr;%eJq̾"?0ݿ?SL?/>$?6ɦ6&?F\z3?-uvy0 zgR?Nf`# "{]?i?Fq.?8$?E!?Mdbp?)(K?&?Ce?2-󾂑ƾ?;"Vd?;;?Qa"k'?ӌgt?S K̻!$?xT??Tr뾇?I<kr?3>iN"?%I?@N6A/?BݑB"|??O[ރJXkK?ɮ?*??KE?Hyh?7?оeNO?#?8վ:w?P?Fm&?#?;g(=5d|G\ؾ-?c`?4<"?Kg1ھ-?AI?A f*_s ?<k??0?"ȾH?=?7B?Ϋ?C??o?IQUJ?'*T_¾?7 ޿qUɽ_qT?,{|mU_ECUAk8Cu7?<ؾR6?._f?UR)Z*??ݾЈ?גҾ3 ?4hؿ煾!bfEi_x& s̾SՌ辢h?B_ξޤz?6xGOҾa(&ɾxzV?yS?=?MT?G0x?-䵿 ?0u?L5#焾Wp?"ٞ7?+Zn]Ӿw>?*̾[f?䊐?_2?4?˿1?c}??$ ?EEf??G?+BN?P?l?;>D???9 r??Hԥ?ݮٿ ??*b?vE>%%倿%{?G,?vξXC,?<\]ے??&k?y%?CI̾2?/0ھɰ&?p0z(?6B?Zw?:P<_T$ھ` j?2rcؾ1P'<@)D? ?#n?y?"I&)?β?Us?-D@(>=|3*4羳l|?E@p?&nn舿~W?k?@,,ZUME㾃M?*ߊCb?Los@߾`ؾ̾i4?-5b?' ??߳῜cPreE?I?k㯾Dz?J / B^ۿ8xhľPtt?EN!N?E/KS?ƞj?IX}?#{aj*??uwz?뾋yEᬾ0?#J`-?;f?/l? v?,ڵ?y9c5>;\ v/Ҿم)?Oz(?13?28dv7L?Z?F(?:dS?0?5[??q?+)Ǿ#?(??$?dH޾nݩ?4Ҿ!?N m?8z?'6ɿt?G"/?2?18b)VA?d?T?7,c??iAUp?FB?D+xʾu?J?M~?R?]?8p?Ij+?K?8h ^AY2=?#hű?*?L?,9?:;?SSҴ??2N?B?'L?1_?=ibr?2?(ԃ3?ZD?p?&?<?.?'E>b ?L?? F?؉?ظD?47z?1f?Ee?4??ο4?%NyD?3T?Lɾ ?A|o,Cf?ީ?)0ؐerԾ 6?*¤EXWV?QYm?5M?K?h;5z&T?Dz@Li?"zrl8?W.<`$?A?JfH?Gg?9AM>3侭!??K?4RnpSe?Jݾ,*?Oq ?qb0d?Ks?*=3?X~j?2U2?%U?4'?=V4\Pۿ7?/?99sL.j?.?,?%N?\ U& 7,xDGqp ?0m(S ?@??↾T @,s?A?KN?_eNľ?D?F{?@X?G8 ?W|?FE?=E?Q?]h*YZ4?I:?Y>?>?(Gݿ{?C?S3?7gX go?' gh?2K?*ſ ?*=b0??.Ҿ?1&%?N\?0i?)y?, ?S뾘k8? z?໧?"%%t?9]?1?8B¿rb؄?>?,7?'Ac?GҜ?? ;O?駲?7Ȭ#?"̓?2~W0|zip?DX#? ?ya(3,# b?5Ff?ӌ:>^?#/x?Խ?I?d?t?TcY>_j?>x9??aHVS,?"D?KA龑 ?SD?Y?9vӾ??* [Xk+?(B?\$?y@?Jp&oi?-fԬ8h?6C?5h濮ڗ?,'D5B?. S̾:?O뾓Yn?BZ9?3H`?$?t\? 9$?+?D(l^?/V@ 0dd?\ ?= ?ҹ{$>x?D>; L>4?%Xj?!y྆2?4rM5D@@Qv?L@?6s?yu?8?z?BʾK?E:,?Q]U+?^ZpND?j.ZkJ?-j~ݾ ?XDvXxXY\C?@)/B?H楾QH?81?J [>'q>?IaS?I}!?3f?/$?%?R?Ⱥ? {ؾRR?$w?u*?e6?4λ>?<*.?w?"?+HF7ӝ?T?K(:?W?@D4?ƛH8sd"H$$Y(U 3b~f):Ԍ+??оmV1?= ,!0l,?F(3lNξS)?K;'&?=Ҿ>P?^??)5C͜?[R?d?OD5D־M%@H4?N+d1ӝ?E?]x2Nt/YþoD?8L?=*s?Dn~?S9/Ӿrt?-?4? L?'Vj?O۾UX<|?._#ɾnM?б5=VwO/?,4?=cɠ?GY@'O? `侠SK?F ?7t1?@z? ߾=Y?*,?0';?^>96?HM?9[?B2, ?",6|W6?D*?7mF?)G?ROA?/Yl徲2A?2??͍0o?45?bk?0?L?c*l?8;l,9т?9yJ?J1?/4T?Тb=%?4z۾n?Ƒ1-?71b?7wmBvпeixo8?bNj??1,l?,/0^?'|?YD?7(~@ۀ%Tݾ-?62(@?;=?X?(S?'?8|?) n?A>AHAGX @?%=?f?+*?/P?K??'U?))0?w?8s#?+u?=?G^?9?=Bо?G?>TRn?ۂ?K?&|?( N?9g?>?Ne`迗\?v?FIӾ?KR2Fe??1?CJ=?6:=?=پJm? p:?&Lz~O?4X~? >Բm>?=C澐=?Jq&X?L\ )D?6?$??M֔?-Ve9Rh?!;?"@#-?ۤB.?xվ徤2hþ?W#G?X׾t.?Z{JѺ)?Y?$?!ƾF?1?Cҽ.Fh?.8iD־]k?/PKN8=?+{-?V 텾 u|>m`=濥$?<?ۊ[?:пܾ?2̃?qK~>^=e@XTh?V;D$@p6H $J&??'?K:?=?.?C, Qn?,v3_ ?Hu?? ?1^žg??QX-뾖?7ww?&c?;GӾ]?eY??µk!H?$~?B% CYžt⳿x?Tg4@T}?:vb?;?[c5?;#rn | "|?=-V?fye?F??u?AeP?B?k?Oo?-w;-F?Y3eO=`־_]徺?9?(?ʾ ?G?5#̾PYN?9 >&P־Wata_־T?j8õ?0|ԾR#{|?6N \?Wu˷? [r+ ?=?Nl?U@Sy?2??D龳 ?2p?Cx?3\[?̈?Y?1>L?־%*>G!?P?R?:8G??F@@#lnY?K?U{i? CȂiN͋?M ?-??l?Eb?9R?%׾k?( q?#E?9$t?<\?G2+ ? Jb(9@ˣ@-x?1ԩ?. >jR?=þ? D?4Ն?.}'ڒe?@6]=.?-ZM?Ky?^"?%5?+}?)n?W?3x\?;c⧾R ?::xچrP?-T?.԰.?ޯ?Jb i??3T?.h?JƄ.?@}޾2x3{]ƾ? ?8ÂM?4Y?P >?=[?=v?&'?7zK}6b?0?3Ir?*?l徧 ?@d&??4m?q?i?=bfIS~D?r?.m\_t>aqܾyr?p?:T?D]'?<\E??JY?7{?:4"i>5 @C?MԦؾ?|ؾ_?D?.j%yQe-?Njuؾ@?5bp??UϾj1jf-{ڿ&wo?8bz?<3ȼľ?V˾d?d?g %?8;?c?%x.v?C&?J ?:'?,S?{?5U?44?!?Fx?! J?-p?+?*dK6?U?":Ȏ>ؚ?g??D/ܾ?n\?冿?/\?WWոg?/;?>6龮򾪔FG4=?V甎?F?%~?4Н?+?1c?2;?=?N?=1?)L?Qƾ?46?ғ_?JY?̒?+P3?A?r?b?B?K?Jr?$ET?ξP? Xk D?-'?1^wB?9ヌ@"ۑ? ?x?!2-?Ef?/UVJG?CA?6E?p6?:?D?૨?'&>$Xn? *?mx?&^G1O?)6>k??-&?'?.޾L?_?K?'Ǻ?+B?J&? ?7yݾ>?@5Hw_vw?dA#-?@^ɒl;w ?Gv?bu?𶾲5F?D$wzU%?4m?9lPH#v?,d{nT7Le?*??Dfѽ;N?7&f?:T|?+*c6(?3Ծ[)aV?񣾭?0M? ~Kޛ?;3@Z?<]ꔾ&?ɺ?TA? A>㼾-gP2 v?9?3;?1^?4?.k?;Az@.U?2?̾?4 \l?ڀ0?/v?2`V?&|qb?-?$ƙZ?vbо>??$ꔾ?'?$z?SX?-??ۙLtJ?(I7?& ?9(7Dh5?5?;G>|s?@Cm??WX?~?a/ʾnп?:? ?3>?'?0?ξ?>9^??E?W??5<8haSA?1\|m???^"mPpy#i?0ξ˼?@?I?8?P? lw?6U濎?D^ſ?JY?:f?'xVBP*پ]g" ?NW=?4夾2=*?KkV3\?2Xe?%X ? %d"?Lf?<}Ⱦ=nvؾ쾮R?+?C1?A@}n[^0?.T?D??;?-?_Ԯط.>:2?J'?S?;?R?/?Qq"?3 qrRH?'B@&`4?fp9Ą?A>?/'?I?ݛ?Kf˾ҾMk\*[o?#f?""Z5? 뾃-?"1HW??3"?8@#W ?? Ml?s ?h%4,@%P?0j?02:xg!]w :?Dt?CW㎾&?Y?7\??D?>VنپP@?2-h?4x??;|?c?/cAI?:Өt?*e@+|??`?:p쿝p?9?OؾŨ[e?/?CNY?=?e%bھ~d޾J?O `|?3p?8\?%??%Ծ#)?(H ?X ?J?⾏?)dO'?"8;Q?L4 ?.R?H" d=ҩ`h?+ھ)Ikʾ'[g[ׂ Q?M5?#?B?4eg?0(r ?ci$-6?AEk-*?;#̾.ھ(?;U?NR?9:*?̌s?0?;?\Hھ̋?)?ٖOᾖQ?՚m\?4?8]K?I龾A??D7?%?P?O?? [.? ?_?#w? _?*??`?=E澑.uDL??7lh?$ľqi?<?>1=},gj?Uy*?I=HB‹4?A??$Rnn$1?9z۾Dxˠ'??pmc~??=2h? 侂ˉ? \8?H?@~ ?P@z^A?K?1 c?>?? t?ɛP?:D?+Aj?2 S7?#?2?6!?528?0? FT}?B?9:H?' H?V)A?r?> 8?9?9b?$?C,-G?;r(|?9s?i{ߣ?-?+/:?Eھ 3W?) :?@g?Aؾ&?\ 鰻[?9t? 2j?cV4򟾏F?9=?8??LL[u?!3?N?[1>A?3?$YbX?$3{8?Oྮ({?* ?=E?֦?4?0?'?>A!;?2We?(?#?I1ֿ?HY^?%Tp@Cw??4??R?6?C84?"?"y=?E ;ղ/$߾?#8?D(x?!?&ƅ|5w?6?EElW?%?ʼn@g"?6Ѿ4M?!"?-/hWk>nz?%`>?F>n?01?,?Ͼ?ȯJ? 1u?. 'gU+4?0C?pT˹?0gj?6h?;e?W񿱇?!;?ݜ?i>"/ ??.׾hՋ?C?"?0㊾8n??[<+z? ?G?UXؾ?;937#lf?)ϾD\?>sx྇?bmb?EU?JxܿM?IwV?Nש$۾h=w&Y?!"ݿ?,|?AU?H<?LdRd?y/??@iNtGК?Tk m?Ԉ-(8)?+̶?=j?33>[?Zh?EIeF? D3?1?<2e%??9RnI:?/:KT ? J?#?F?F?G3?:V?(,8?D?.?U.>jG_?B|6?ELͿ¾?2?4?.6?σ?=?ե@?Y?о`?!.? jUNgT>??2`=0`?#hd???ij@":>㾐d? ۾N?*RT?A-~⥾C@@*?E7?LXO?)vԾa?AA?+W??6JFM[ ?<?w}Frj/<=>ެ?zV\?@?J?):?&aAG\C_@f/?3T?Je?6,??;y$d?I~?J?F;x?+DҾx0p?*FIY?!t?8?ſ?@$!?:s@?)?Y 1?C?1L?3Pc?V?8F?! v?@f?حƷ?2?-Z?9![?Һ?>X쾂Z?U,?>?CBCL?{g퀾]?LT ^z?4zC?*\D?|5?K?"?ՎFK]?eѾλ\P?C?-E: >h?S?Am?4?>A? 羶Bп?达v>Qô:?"@$ǂAECd?(6?I?Bjx)p?N/?2@[1?,.?+"?ݝ?N?(<錄"fiUH/?O<>0W.#@>6?.j%JIY}6QCQ:3??@׊"?9u? Y?AY?Ǧھt?B ?h?;L?**Yd򆾟K{?cC?ՎK?&]l??@ؿ|?؍?%'??޾:j?= 'n?4 T? K 'Da?*(?4^ ?@*??$]?Ëb#?Fh`??3g1 O'֯(Ay%iA$?%js}??784@?"/,B?8?-oԾ@ȑ?F' b$п?=lƟ?/d?G?4??a?H\?B?0X?u?Z`>,|i?2𨾡0?a5F?MT:ھM&In?K?)Qzac [?-?G{?E9\?8S?g\$?*7??!yĪhҾHX澾kL?iʾQGnjT?ZCxnmbn?.&v0? ?.Ծ?+n?eM?OgNW^.?Trj}ί?%??NĿ&T`4?Evx?ڛo?xS?0,e?7?2}?c??<^?j?Cl?8޲?,?9V?S?U۟ h?"7? ??M-?jY{?;60ꄽČ?@?=խ?;㾎d?[?Ex?4H?c!? E?-a ?`q?Q ?ӞJ?T? iBqBM?ӫ b??6E ?h[?,lgy?FҾ?)|?>?&[?ք~(þh@+〾]ֿ?,ϿI?JǦ{((Gt?B|g?C?i4`?K?L1?;p`۾?6?C , o$K &ľ|A?Fu?P?/?u?HEj̿?fпϿf2?(3?5?V;??ƾZ@ Ysx徹7>?8?Ck}$=?5?Q:?.T8? ?;?6xFm/uZv?q? i`¾)??lR??:ھk+ ?BV?;`?!ɾ ヌ񾋸?{?:'f?n?!J ⿴y?>cM?*Z?+@w?,?0?;W?64?q?q?: `>q Gw?>D?Ū?J? ? |?IxϢp3?DP9?7tX$2?)~cdG?*P?w1@HBJ?$tžzLr ?.2.?Ƕ??.J?It7K?4v?--NסH ?ͤ{?Ȥp?@?6?d?8\NN?2x?C2W>j?#?D?B #־, ?7߿84?#X+.?&x=?7P'?:þ;?BpZ?1A6>#0i?N?˾`?.?%?E?w?R_!ba?8$BpC?7$~n15?i?u?YH?$17Q?6j?;8ھg##G b?RH?>/~Y?\SϿ?SF򟿢?6=%m)3"?'?@K?578Ͽȴ?N n?1B?`?-ie?Je ??1>i?$n?&?,?:h??ߞ6?z澞?2b&R?/}?&?0A?Iq[?:M??<?X?9レ m.I?1ۺjL?)?9#u?='?$mV?*?*7?.?,"g?"ľH???D#t>ۄf?:lf?A|F?106r?+??V?!??-m>?C>pL3\P?:Ҿ?A!>MоwB?A?Zp2?0ʾc*??^?E˩?@>P?: ?0S;? ,? ξ?:,ƾu?c?.m"?-?I??Bd?@[Bf$?K?Ce*D?6?8y3V澊d?5Q?Y&??E?!2"z?A=x>7uҾLd?оK*?LL>љ?8A?-? &?J?)q9? #?w? ?FMpm?&K?&j{$2?@ԾVclƾnk6?+uqX9?D6EWb?AZtBVFM?`q0z?=??q?H?u^?E~#? n˾x#k+r?LZ:l?A"GB?jD?y?쀾?T!?G侫^U?ϟ?H̾O?COiI?>B|?&?O .Y@#>?,."6?">L?C1 { 4?'4h?fI?W?CS?"1nƾ|?#mɾc]?ɇ}? z`?J??&?rߙ?0QR?ɩ?23@?/?;Oh?H|־y?3D?fp? (/<$G?"r?N辚+mhھF\?9z>T^?;w?-DX? ى?.O?ˊ??7?y?ƤI?E+?/J8?G2S??%??7+X?-Z辇P}D?^󾲚?Am?DM?5j~?6߾lm?k? #&??6?)r@/?,u?Cfܿ?@ӯ?7M?8k?o? u?$|=Uq??8?½?ͭ?90?$J42P?&)x?#t?OH?-Cq?@Q?a}??k0apH?]??OqL?0i ?F? k*`?K?+#%Km`a?(:?0vȾb`\Z?@8?4!q-0?[,WHU@?^-Wξ*0?BF^Z{?0?𔾉Ѿwi ?D?>*?7f{?RӾΐ?3i?4yž j?#<Ŕ?.2_Ҿ?<&>RТ 2?ҟ>*Hq:?/R? x? 9s?G)?%gKw?ݾpvF??;x?@^?w񒿞 ?4D^@?B,?)ʾcXjhBT o3?B࿛7{?H?D?@9>S̾  ?UQ?҆??1OSOr7?͵W?(K?"?x>r?*UImb4@V?(?9>wN?*?+@&_ᄌ?Ů?`V?s[Fq?G?Am@#ķ?B?)n?$q ?4x?o?D\?>{?1 ?::dpqUbǐAJ?UZ>?M1?Vbz?ۂx??&?=`?M}v%?Q܂?2b?'ä?77Iÿ޾?59?Fup?z ־oG? dľ,_\t?р????5?L?(xL@#JᆪXV?tv?E#?/X꾒>Ȉ?5پri}?7S(k?7z?\8ӈD?X[%?%?.ˀ?/Oо:w+y?E >|4Pv%hlj?+{3?5Iǹ? 1?/fha⾛9!?3?Ҿ$P_ؾ.??:?C ?E'?B+u6b?2NZD?.?VxnA?:Nf?Q@?(>?$??Qc?$.d?Aľ%"65 ?2?ד?._žgx?]־}~W?E?0?1?Cv?](?_f`sȇLz?B? R? \6?^qJ0Gʊ?D?8 T?࿚[u%?4k?@>?&CJ?hK?.?%}Ǘ?OԾ?Ra?Lh?'?E?!?G*?侅2???Jˌ?-|??DH?XdG?(e]@a?(mEzt?ɀ?7% N}?1e ?8R??37F8? d?)hh??3`?&>z?(?(/?;6Y'e?DEh_>293??D? ??Oa?'g˿?Lb#tްTbx>&0?-?8P?';4?2"U%/k5XA?ID??T?ʾڧ?3? zп??0 n#ҿ+oO?>rFs&]?$晾 AK?@Ҿ?*78?(׬*?9㵾γV[?s^Au&? .?Pk???) ?`??>?Yd?y?ҫ;i?辜vǔdui?_F?k?P1??񺿴w?8dyd>vP?Q ?/?M"vϘ^?YP?J?AmL?&?)?ͼ??F*?C?&?$#)?,?I?*p?,0x{=.? ľT??MUA^?2t`?Y?/?+|?yh?JH@?YI?Z?B>U+W?*??:)?/Ӿ˙-?9Ct?( @,^?-?Q? -?8Kb?VW?1E?wi?:Xjx?f?X 8*m ?D8ʾJ?Nn?.N?%??|t?K|+t(.??ؾ@z??׾{W9?Qhl }^ts?.?־X6c?(H&:?FA?Ax?_?3";jzϾ?cucp 0?\?+? w>Ӆ?1T?{J?)dr?I2?OX"?۾???~?%.&6?-?Կ(?#y?ItfX*?CfD?g?k~???4?^^Ǿ֎I??1r)Ad׽?V/?;?LE? t?R?;V??+M??ӾB?oG?,?Q ?٧W?[+3?)h _?4j=D L?!?3h?xSJ4?Pi?"$?k?9b?y? WUP? i?xqTF??*g\?U??O?6֛?#4?G?> 6?;?)ge(gIe?b?Oh:?Ӡ澞?W?֗ľ?Я.?5?&?D>?3G?-G?Y?G>s?"R?4ϥ>>?u?*&?Tp?.Akm͌?7?EO@%ھ~?X4A?$?,x+?բ@?¾?,ٿ?*?R?)?+0?ԾqQk?Sm?"cz -qF?0?0|?W?e%?A,?uЗƇMj$~? ? jBBG?9?-?prZb?$?,7sU?1h?ר ?>Ll?%2=Z?C{?Ri'8?9辤>蘾G, #t?"0?PJ@?Y??쾳P?;֋Ͼfao?b?z侬x??A?:ݾ0?2V?F&v?4v]?ɾ}?O2;?#>)? &?vd?.C Kal?ݎ?4J?7[h?Tҿod?BcU?19??5w:bg?3S@+?Ą?!^?'?B?B?U?#?-OT>6~?-???,?Y~?!,?88|$?- ??&w?:-hp??'p:|?-7?5J?%;?9f?љ-?F1Ijp??!?AZ8?9?U9@IT?]+dɾz?R?]?ֆ?:??=r40?<^7?:?+9H0b?6ɲD?hG1\=<릿E|?_?=?/ay?Vt_?D?꿑j$t?Pvkm?M뾽PYJp?)B?GuF?fq?"E㾒v?D?SSݏ?,;Y?+hF`c{?ַI?DEeN?1C??OJ?>?VUvg&?+4G?!"?Qh?"!?B?%y?;ζ?0?Άfv?0S?8l[?f:zY? o?Yp>7I?+[^@.50|ľ?6)z?GTP|s??L?Z?.u ɂ?T?x ƴ??3ݠ?9pc6?&m?TƐIR?'㾚쾤<4??4ǾI? h>?2?'b ?6?,K? e^?*]?+]!?/_?o&?'/@)?9?k޾ Z_|j?30?4|ȾgJ?.`?پ?%?L4??O? ?*B?,*=??3?JR?@0,2?%i~?BorpKaͿ#G?1?ݍ?N?ӄBrCr?#*#?>1?F>>?'侟2?">!n2?:?-Zpл?8n궾e8Ծ|Zz?Xg辐?_,#?Mt>g&?͛h?JI?YxPvo-?O?~D?k rHo;!?NW?D ?Gj{?+͌b*e`?.N>!@?A̾¤p |s6?S޿6?:`]? ,?,Ǩc*?:D׾?9K?<l@I?׎?<n5?1Y?Hؾ#:e?A?>?{iH??B c9?"c7.?֕ ?Q~_?!/?|D?@\?.to?bw1B?3;?$?[ ?&>߂??,?Y澋LT?.U?:q1 ?c3|?b?$ X?- ?8PV?*o?Z`?A 6̹A"9?^#>?* AA?J(>ݿ ?/?S>A?2 𿞁c*?\J=>?;?8^;b?,?6>\¾Aо ?G:?d9?0>a`^?K??-H??\0?.T?T?Us?@?-=?-2CN?=/ ?K$?Tx*!?!BX?:%|O`?P1־7ecKԚ"\?8H?7[ˠ?N1?Huvi?V7?HB%T?M?D1^?Lx*?<^?+*?)?ʢ3[L CKFIjn?Z?-ǘ??"vT?4?(m?a;?/SU?鿾]??:?BU?6ԓ?H?0?M?/1?>?.?쾋HmT?E}?.c־_Ϳ]?Nt?5̂?Fm?ĺ zr?9.;?3N?2 ?Fq;?.w?D6?,Z?@6??|??M/??[?;o?F?@/0?G?;4??U_?A4?j?::&?$r<' ?8DY?Y?E??/ܾ?͡#侤?8?߄@k7E/?ʜ?r6?Ij|?E>m?]?m?5ֿf۾UO?5 ^8?ԾKپ?53~ [xk?ݟ`?%:?HdXz̾DŽ>b?iy 'k?/7T-x? ?$?4?(*߾?(?S t?C߿uԾ|?> ?@}?g ?*>?UM?­?JP#L?'J?6\oqd?0(?:X ?-?9K~?)UI?V2E?6?<\s?n?Q5?>?SP?6B⾴0`&?D3?;.ݾt8CW辋UB?C$?ҽR?9?Y\x4x?f=e6? T? Qr?6\ʾU݅R?2/??1@S?8$?;d?>>?cU𾐜?ݴө?=?("v?h?+?:s?9?"۾-~?J?~оk ?@x? ,?\?GDo-?Db?Ѡ?32??7 IVb??#4?͵Y? ?7r`r'?0C?8^?#?"H ?K`R?39?4?޸?7Ҥi:? E??Ab?2< @?@~D@ ?CviYCQ?'_&?-c2? `bse#H?5R?G“?ld?DeO6?7S?Lgd)?&8ݾ4O? ƾ7?+H!%?"Xg?G?*7?3?HK?A}?O ?5_Ȥ=*6p?0?:Y?:?"2i?ވ?N ?;S>IV龻>zm(<4࿚^?GJ? ?=)&?-¿Ҿ\a?Iߍ?6!Ѿ(?) ޾B,?0?19D{zPv?@-$M?+A?9Hr?"H䚾G?Qi\? $EBo>AQ8+j.;?lz?+4A (?C-~̾n?D꾪7?1f?`?cm?@j?$;3?æqHve?>?%F꾨?,}x?#㒾ݱ?7N?6?:D? p?@?K"]?dX?$<.Ć?츾Z?X?'?̵ܾ О?2 ?ho&??!g? ???Vٵ뾕{N?%^*=؜?=2TW?&f??G^?F?7 ?DnL?Yz? s('V?/U?~?!?:?+>| fD?),? )aq/>$>Y׾'F?DhP?, `c[F?Ymd>?,r?0M^?*?&?J?=?3C?%P@(h?e>ΐ?A l ?n7?\r@-|/C?!q5?Lׄt?C|?1E±?-??"4U5ʾʰ|? |?$/8?N}? ?>{?I2?jM?)X?6nJ)@?IC??R?Am?? ?Q? ʾv5? ԾVj?Ӵ̾c?9,?؃?Ͳ3??%־|?(r?G?>'L?G ?&[?H?*`Y\D?=hN#*־e+c?gM?Ek?1KB?IF?#\2쾏G?=F?̔+?2kH?5! R!? 1ϿLF?\?P>Uf?:Lp?Dij7?8Roz瘾P0i?7ξ}?<;?<;> >6#?.o ^?3J?42?JT־?xǾ-\_i濣HKm?ľl[r4iI?-?@mu]?3\I@?9?K4N> ???3vHcc?`?E?!待3; ?GI?!=?ߍ=?-j㾍Կ?'\-?7(?Z\?V*?7?%<Ƽ@n?Bu׮LHtt򾃬m9?HN?Bi?7û?9M?.B?PE t@?=4v?7?0f]F?I?9?C ?"e0f谾>Փ?M?0Ѭ?Z;p u3?hR'"?"?/z?"?3'? ?'x[?9w?g?~>h??)N?S(п??&?x8?U7?2 .?(?l?T?5?8?C?O?7`N?JϾtP?5p#?;Shf?*?R>C@ܾvIq鶾v"}R?+?̢2?@ۜ՝Vpf?,i`?c?'o?3W?ܕ@% +?)p?Mo?򯿟עH?&X {^YY>d?uA?(?ʐ?(e?8~l8E[?AX?. >?:Lw??2?1g?wH?0a&?(i?*???4Cgže}c?5=T?;al@U?LP@?9Jw)??/,?ԟ>G ?:{?3>s?{;?-fҾIX?;>?:~?J0N+lz?7>v?B ?4?d?B&?@?д/?4D ?4?48?=?Gտ/V?ĴU?[/?0sʾ+?t?co?X?Sh?4?f> >ۛH?L?ⷾ 8?*ZIv?H?I?t?%@?1pv?$? ?1?%M?0?b\?*jzྵ̮|¿XI02?T0?6?&M0Ȝ_?`$>J)H? 4?D?޲?Rw? ᾘ6?12?,> N??.`>??AOo̾ي9^W\?+gr\?6¾l??{?C)+sξ?K|Xٌnz п;&? xwf+׾H?9:?*?٦?._k?5?7MiP?@dfժ?e?(xw(E?2?$n?8?6?;u辇fx??2H?6}?碾?#8?7οK ?;?o?6Ivgb ??뾀?*3?5쾥?5QR4?:JA#@j\?sx?$?n`ʟ>?5:?3D? n?l? 𡿭3o?ItGz?J?4ƾ>J?C]ֱ?)} ?'H?6?*?"A?9{;>88?3S#?4V?"?J"??"U ?8L?G?R??flo?.e?4|? s?'jξOlt? 93z8G񿏁Z'ǖ뾲4?D?)?J9?('jξ_?3?+|(?f?߾pzvD?.V(l?*($??YfT:?B[y9D>Qg2?P"?/$ ?ݙ@ 6?%i?D?μ@"?3?8И<ؾbZ?WHd\B?6?*.Ҿ;sKo >j>3;l?GVvcf0sxrb?L]8H>쿬V?pF??1Eˀ`,??J:?8w?AhB?η?)`|?G?F4?$?10M?ǙO?/~?G??4L?"?#!?.i[?OԾZ?޵??ɘ??@ܕ@&\]5@!>>=?=?Nf#zc?7Ԇ?0匾?JLvX˾T-}GӾog?վ?y???&v?+???>I?ߨ?0T?!d?3-?FX?>I`޾Y??+?D>K?5n>ݔt? @?"ᾔU|?? ?7?, v?3?4uFx?)A?}忉?4?!1?"?)=rнW+X?6"yoVA- ?gʿr2U3?1{;XҾ?[?b?5n?+G??&>A0C#B澍lW_x ]@nݰ?;?1?:P&ξM/V}4앾Tcmsq?<?)|?:a?? |?_?Hjx)R/?@՚@[ ?;Y?߃EA?I?4Z??b$?923?0mp?=Rda՝?ЌF?(?3d ?^zs?֢?0m?N4L@ {?2? 0?r?#v?t1?6 ? ]?+Q?:9?+A'D@жv۾<ʊ?+?=@&>?B޾ 꾠r?<Tq??̞?up>?0?%?Fg#|?@?6?Ŷ;?51?F m?;Eラ6?\?Mn?z˾/V?#v?͌'?J@"ӿ?Q?,(#{le?7sо#?Ɂm?A?׎?C쾗?Zf?0?Yw{?0F?W뿜u!{? ?Á?%#??LS4?^?-~Y?6[V8?έH~?/DF?!F??O??-?}?1e޾ J? "e?+?Ҫq?ՙ>?N?Z?%$fDvR?(:w?_t?z9DT&澀0[FZ]a$?C.(WҪSJ?* ?0x'>?ؾYB??w&x#VѮ?JW??.?A=?0qw?;оg5w?ΤM^Z?迾 ?Z?ѳ,?<6?#zx?ڭx?Q?+?4CH@&cM?#L?4X(?Bq>fD?ɉL?`"9$?0r?0H?(dpH?x'?X?(gY$>?β?6XX??,?/?K? O?-N>?F$&?S~?8?3?-z?A>H?N0f?G'@P%?1Ӽ?ͯ?f??,?ڎfR R7?b?`0{?ۖ?A??7Sa.?L: ?.W4ަ+?4?IRnl?:? 4X?ơ?)VDi?"j?*(V?(<Qbn}ھt,i[T_z޾ R? ?wr?e|?=I?ƾ@Ǿ,?}R?:T +`?5?۔ʾ?澩? ?s¿[?>D8?%?ؼx?W?Ȯ@!o>Ⱦj%?&12e?8^?!?#;?J{?}?C=iK0?7& h?EMƄF?_?Y?3G b??Rw?֠Q/?%?dn?[z?V ? ?c?߾??f^?*7?5R%*P?V@-N?ݥ ?/8?' ?fݿ]]4?l?O\Y??.TY˾~X2P>?յ?P ?,kLR?&5?*NS,?@⼾haFzeW?Oʿ?7?>?P?%#?1T?B&8?%.uҾCD$?8> lNH4?"?Az?,r?^p>%.? 5>5?܂koO?6B?)Jg ?ӹPp?Z!\?P?>ľL>z?#?迨l?Ap?(Q?xˏ^&? ?G@"D?.Y?.X;?0? !? 9?4.@ X?#*m-P>?4Ѿ,?>?/)ԓ?J7?%e4Ȼ?X&濟Ik?(a_'?g֦?.9?)yP\?|$?K*Xb?5H?@?P4?L¾*?U#K?ƫ?!?OEp?Z?8 0?p ?j??1pL @?5B. ?Ҍ?x??#?;.O?~.@@%8?$վFF?)%?)?$q?7?ˡI??0??8?'w?9>%?9]Ͽ?KPF`?@{ʾ&19?`b?0?*?#6~?KBSaT>?Uڿþr2t8侜K!bҾvd?X?44N۩Jȅ?;TTT#ѯ?I`?֍JQ?1I?G@ID?81<_@-?*0?,X?$!??+Q?3)?9?'?V??"l?:Ot ?M??^XĿ ??:-k?Mо ?ɆsT?@?1m?>vR׾??Ç.? L?X`B?z?9?*E?0^?ݖ?%8?;?< ?/~D3?[?>qҾ"4?&M݁?,@??]>+?Jt?̿?_idn?;f?j?6?)t?85QXF??-CƔ?ԘăuY?7?F? [nZݲ?t@5 V??*Y?JV?(m̀?0?bN?(?BX?1?`'$?&[?1??n?/?Wq??p?A?>?@?1'?7'GYG?.F7?՜?9">k ?_??#l/\?\@ۛ?<?ݹ ?1 ?+?/?7?*???-l>n2kV?[?4˾]O?-xa!?J0tԐ?t&bܾLMMsH|g?D=sà?G?a,b?&qONJr俣ľp?&i?(?3ݰ! ??U$+?A?vuԔ?Ԁ?_d?-?#I?ذ?/0e ?A? 7?Z?,ޘ?$ f?2>?1#>=x???9-?$?+ZZ@6????? ?$8?SS˾-/?$y?%??1X?'uâT?6?3(>??2? ?=TG.sCw? >l@?Cv? a?پ9y;??ը?d[?)x?<~?a?P?ܙ? K52?&(S?5]0?C?" ~v[?&.N?<۾_MbO2?H?پzaּ?7s*\ᓾ6c?BRI/?O?7l? ?V4?D3oo.GR,?"ʆ;RK?E?q?01,ľ2?l?4?߳$>?ƫ⾊¥?5%:O?U?>/?Es?,?6?,bC?-A>A:?״?iCK?N?b,?7???9?}?0N?J??&tF2޿5????1R@'79@T?.F?O[@2???+?@ n?,(?,N?Et0?ܚKƓ?>*4??L?$?#0?=_> ?.?Q6?Dr龧eU?'sY?, ??T(? 2?#Y ׾ԾQ?p?x>C``n?3?DJpw5?F;%5?0"T:x?"D?=.?.?τ!%6;OX?u=\/?(slVQ3pȓ|?l(xw7??!}߯?UN?,? 3߾4??:J j?7$?R?B7?xő(3>Ě?? ?Pd3? ,?;S4a2V?Gu?Cp? R?Oq6?AӾ?$j?H]')?ƾq?n?81 ?>?$N?R违F?)?Gi?P>??ʧ?2@?!?J@(??+T?Hi?? ڌ?)^D?6U?9ʾo0CvO?6ol?1G?!?44J%6?hØ?<7}?l?#  ?>`{?%?Au?"B#e?Z@$5о?;,?J۾I4?QN?=9m?cGͪ?M?s?Y ?.G$'?pz?(*?K'?6 TH?08??6?B?.+]k?,?MD'J?$^?Bt?R?SY?l?DQ?4A@ɾFfF0?5?$l0 ?!=+u?9&?\ھ|0p -?AҾS-,?9 qAxľI\$?8Q?3Ɔ?;6ц޾Q0̾P􂾶CξۂK?1D6L:KAc{n?)+?|Zh[6>?';?қ?p&?E? l@&?R0? .@ϰt?5L?IUO?,\.ei+P?H꾌v>U!,߷??@i? r?-c7Q? 0ͷ;?:?cF?F|?+D?Q@?,{Ѿ:)?ἆ?^M?!L#?TI?" ? @?ղ9?/"?־پ(d?-? ?+`!G@?ޓ>оm?ι?R? ?־|P?+S?US?]}?XcW)J/:Ⱦ6Ӫ?}-7?CnVEvԧ)?ն?ʟtо(??y~?U3?wަ?v? ?;h?<Hɍ?0 ?< ?+z??!V?1h?"?H0?ĺX?+8> h?2GoJ?PN>)V?<?Is??3!,S??aQ?=׾?b4?Brv?a{b:LA?G#?:Go>Vھy`,KPx?tq32?M[?[R?J?6[@(h?JV?!? hD~?2/+-E???_e?p?҅I?8?dM]?1c 6?Nj? 8?,m8??+@%N?EJ?+-C?#G?,Aj_l^^?%"?¿Q?.EE?O@o忯#P2>?$‚?ӯ? Z??Ҧ@?@yz?*I?H1?'?@@+?v??4v?az?A?Y?u?1?E?)??b'?3*?15V?dx ?/? ?7?]%kt4ַܾ'9?25`*?L?77?P??*%?%?#8?S?vTdž?S~K(??3?ܾ??K3I2?%־??%~?&?ҥ?9yg? ? 9?9?LT?EB">ߑ?濱[eMM?:/j?!d?BF?45?O?0G< ?يA?!?5n??G?L>:?=?i?E5?,)&U6ion7X?ÁXʾr qS?r-pϿt{>?"5+|p=?@ǿ?3پ"u?c& ;TGR۾O/f??;&?D\! =7t?@Ⱦ+L(?2X'g"$$????&ľ?⑾r>ߙ?%: P^??۾X̾QF??ow?20?97?5>??I>i??,Z?1"?'i?^???Ⱦ s?+m:^ ?)s?=w?0G?I?!?St?A?vlY?d(?4^???m?MRf?)?:?nGr6?0^?Nyj?V?hU?Kд? ?A?؁?2t?<??t? 1=񤨾?_?1־ؾ?4Tl@?n?v?M?t?1Bp`-?Qn?V'??3w?#U ?("MB?N?T$8H)84X?R2?J+d?Kzپ?Y?6tp=H%(.?6C6Ծmp?@s{C:?i@ @9`9?l?P{6?E?u.?7sMn?F-;]}?e2?^z? = ?0m?G?RJ?2@?&> {?'0-?/?VW?`?̓o?a?/?۶?HE?????62ѰE?Ds.??׼?Fdz?/?ҳ??,?Ԛ?Q@&/hþr?B^?AQ(?>?U?ϵ2?-Jm2?6`{r?K P_?8?m ?;:?70T?޾_"? ?)?L?h?/?̾I6?& ? {??:"/?f2?0?&^?HH5Ճ?.?;oDZœ?'?8?2R?1?ڿ?& $.z?.ò;濢&XwH{?81?G_R?8+,@g?ھ >=m?)qXn?3];?F.?;/?G &?.5z|?a V?'({PR @yF׿??+8 ƎC?2?+?--?%X?Em_?0Q `K.??w,g"j?# 䜾~9c?ħ<ܵ? ʿ?/㲾|N-?;^?|@"??a|iSɛ?'P? X?%?Np| Wp?L]a?,~??J?!e?B84Ļvnw?q(?l?#Di?0D??)'AIBخ?΂? 2|?4׾؇>C?W4?r̾.?=% @ ¾G?d?=DT?$?+El kZ??4?+ɾěN]???+WS?4q??0?)?;֪(h?5VE??,?) f?G3q ?-ľ?q~? X??+v4>?ZWh?+ ?澦>ؔ/?;?C@?F?SA???.\?bm?7?i?)>#d?H}ֿL?>?a-?׾,~?#?(eW7`P?%*bd?RO?Hәls?U?3= *徜# ?6R[ҚX? N25?E#"?ྐ?.΋?HJ׾Tm$?Ҥ|?)Ha~?&S<|)?GJ9?9 ?^?/|?)k?$b??;S??'??5Utr'?u?)|*@?R?zޭӿ*? @(C?;Ѿ?K?@$?5]???4Ⱦ?v?,u?#yk?r"f?+?F_?υP? +??=0?6թ?6$?S'?(-Xu??Q v?S>?S?ƿD?"X*?-L?q?7?3@n $>Ʌ?`JŽ?@w<{n?:UT;???Am?B˪?;.-ܿHw? |¾?%?!!˜>9$?0G>;W?)J?ڛr:4uu!0Z?)~?Fƈ?Pw>z?@?F$ji-?:?/ ;[.?1?9+]?4>2?.f?Br??` ?3ai?D"? J?16?#-R?J)ї? m?P5@)?8`"?C@TmC?@3??,?"?՝@)?0T>j?+??Pj?_?ͷ?!,?>ݸ6¾~ ?Ծq&K@?f?RľV?(?*?.R?y?澲y?Db?3,?LZ?$ @*ej?P?o>,?#;p?&>jžf?J8;$?r?*ؾ(.lPjԿH־J?:Kb^{& "np??8?DyF ?tT?,fƾwĿR?.?6%޾i徰A@J?azo?> ?vH?ۻ:?h v)>RO?G?櫹?Ҿ5?DD?-?J84??<ݿ}>Ë?-?36龃a?52?Q?>1X1r}Si"^@)?.???hL^L㾄^bv?4?#˾?ߡ?B:?B?4?ݱ6x?Z3?=},b?0k?Ŭ@/<8Qi?#E2?^ ?>?.00瞾?ςg?.??4??,4t$v?I}?AU?5b4?/@־?b??BB?a *@XB@!{?G:?WԿn?;L@#~???t!4?EOgL2?.x/@%?'/>$?h̾>>񿧼??7Wp?<&q3?(&׾v?3Z^?:y??Z?MI?6??[1@'?)Pd`??>\X_kvЊW!'l龥!?->(IㅾmUgf/ÿ~I?ߠ ?AvVy!~?I? i7+x?#~if(羧I0o?4ȿkCd3b˕Fc?<"ξ&X?-{.P?& ?F?(hh<.?ځ~?8R?9Xɠzf?;߮4??R_?$\4,? #?K澇1Md|?>#Q@?Z@%B6@?D~e?Ь?A?>KGo?)?/T8@#?1?Y?a|?3Ί0B?T|?&澉?Ѣj?@ $?ޝ?RG߆ ?;?"~.?6?:z:6?Є?+?Z?:?H^?5@(ɾzn?Hp圶?l?5ɐ?;^?-h?*?@?KS?8ftf(Ź?>?= U羙ia3zsO?0Pjl /?I,?~E?4C̪?j6?H?3ʿT|?+mϾN?)k?44oz-.ܿ)=Hf8 ?*?7B?=^vhg?2>?="?>x?P?4?,TľJ^?x?QVub?,t@T?ت8?u?K9x?Nm>.KK?62w\z ?JC?F?_#@?`AB>EAp@?@ (]?N?3?¾4~?U? ?I&>a?6:? ?2?ξO=~?,?@%@ @$?ZLjq?;V?,l>?٤R?/6G;t? q|P)?8Φ?,eT?7?'=?׾{ ?EP>L??;T?7?R(=I?y@?'*Ay=?9?C? LXzv?0?ܿ7?ڬ?h?Cپ| @o\?^?#?8?Ծ-|?3?-Z?HU,N?>O{?rAtωhܾ@) dȲ?zG?x?!/?Gj? d?(pM?ؘ?Jt?.a?.?+)?.lV$??;j>'|>Y7¾SUQV?5?/?:-h?>lƾ俥,迖2 Xir-zj]>lsr?Cj??W#?@ r?蛚0?W v??/D t>NԾq?B?-]k?܀?&$>?Vmǿ྘{Z?H`?+>W{??CO?-myP? \?f?8H?)2ʾکԪ?/0Zq??!(?I&? ?JEM9?Ks??l?7śV?;?H?'C@.5eZ@*B?ȣX?3??Iz?-n"?uMi?/5??vY@?-D`?IG?E??p>?-D?Gd49`w?0G?)"?ȏ?/Lþz?,5>{M?KP$?+?@e?\?6(?>C?,?,Wz?FU?K?&h6T??=B&3??2j?'x?CI ?3AJ?@@%6z?Z?RȒ?'ONx?1n?)?5Њ?N kp"?M9?h?A? ?3?`>K?=?%?H?0K?,?2?>?ү?f??#J$?CEp&?|?̾ྡྷr?ԫ?hؿ!?@ھخ?Pj?>naq8G?}?F?QhϾ$HHQ%\a?SB?2Bm?=?8`?%EB0f>?1n\?ESi?1)JPx?"cn?F|?`²?:?X?,.Կؿ(?#q?%~?r?龀h?+2?+,QV[6D?5=?@Vs< P?N!?N ;usоYg?@>AB???٠>6 ?X>@? `?毾Kf?1M?Ǎ4?$0?ء?̪!?hV0?u"?'?@?x;|s?|?탾,???1Fz?"~?>?a?=\&c?;`kM?Q?'g̾%D?%Ⱦ)>y@'?{r?,? 4?Pώ???^?¿0^?#Cg?'뢾r ?V+ĿƬv?վLr? lO?&?T?=,?ی<?9'?VX??g?.^r?B?N4f??83A?ӥ?T? R? *L?˄뾺lH}?%Z?ZY?2Tc?d?#fؾ?>n?G$?4ƾB>A?bh??ҹ$?Ͻ ?3?6?ȸ?!Z?3v?O?7w?I:?`?!M?η3??-o5?+)? ]fu3H F?9?r ?!gXI?xZ`?3v\V4j?*FYg>ma?6:i.?hƾڽ%?A>W??nL'x[1;9?:XWཱྀEg?o%?=i?6?7?gȾ/}k%5WtE쾮`zʰեz?,?F~?)r?.]???)??1M~Bi?mt?K6?,ƾ9@V??f?:|*?'V?9@1I??*5T?'?&?$?u9CNP?ۊ?@C??[?]?S?2?/>?"r9U$?'ξΪ?*?|fC?[?-? \n?/@t?+E??d0?9?0??2k6?e־T&y?Kt!>{@" ?N@ }b?T0?-?C綾ԣ?33>q?4pؾ1\>?$cnx@"?)?-?W??%?p? ??9?-ehn @7Q?/@ݬ=x!٣}"DԾˋ+N?2ݾlt8eP?m?aU߾:?=?.+?-?H `?4w>r?Fs?'GK4?OZ&?Gń?b?aסP?8?!>?BT%? ?;A?X?,ar? I?\^$&?T޾-?,?8֢?>Qy@+PwBA%Ծ,fȨ?DD?,G۾?=rOj?6h?׉)?-Ī??U?!?PN ?JamH;KP?K?Ȋ?׵?2ݶ? @%|?8И??H羥">q??#,?6վi٥?A?K*T?Q ?Pٰ?H?0ž~?&1K?Frz?Mq?I?=k>#?tV?.?+?vk~?w?-:?8)?@0?7ܾ];T?,>?g[?*@?NB@'A>$E??ߊ? ?Bd?+A{ ?*?ַh?f??2ܿ!.~t@'q?<ƛ?U?֘p??Vh??_;WPN?K?Bx?L?:(?]?IgᾜS޾t?>>"!?ҍ}QŶ?3ru??߾F#?2=?đN0?8j*m?j?#$N# ???&|Ԫ?C Qᄉ?J}?4Hz?5I?C?3 4gy?L?"?z)1?B?Tyj!?˥?F R56w^?B3?@m>>?5 ?R?4/6L?9y?2??% Bj?M95?a@?!?d#?2?,?E܅>NhP?ҿ?6?ʄz?55?LO达??)-?04?_?BpҼ?MkrX???H?6?6龁Z?B?&/о?Hz?W?d?p?4'H?D?<>!A?4\@?F̉7?#gҾ7~?ѶP?%x?#N?٪?7 ?FM?Ё?M/?:Z?D־Z>XPйѾw^?@B?>4@%!u{?Ӑ?A @/h?҂?K:?5?!z?.ip??ZG?mvt???0X?6P?;?]pX?$b\o??4 ޾R{?k?D?Ccu+?Տ??H辷2셿3?CV?G>?B?ܿ}?E/k?\?ajr?):"?BDsC? t?۶4?-DVY7?3?@?))>%&^?;?9 zhK?>S?=Ӿ{࿰ɉ0?++~?Ah;? ,?.T?[|̆? .*?؎M?LGJ ?1"?@tx?4D}jj?¾n?Y?9?E>?1>J>?"y9E?Sf?E wT?,8 >?dtu`ϗ?(?H???[?I羼~??,/?+?Nu7?vr?DE?0?w?M!Y?񄾤s?~?F ?9s.Fѩ?7K?+?3U?HE?= ?$'?G?XW?3ߐAFZ?&H`?Q?cװ@+-a??->f@G@?B?/?:.?;?*%Ͽž?%l?C?;龘q?&?8>?6T?˺? ?τ?O? y?%?=?J'??H(l?`?%Y?AX?%)??F5^I?6Q@$.?'-ѿ24?h??xvԉ?:T? y? e?7?>T h<;?Ϝ?>8Kٺzb-:*Va|*RM`?!j,?;7?6r?И]d?Df?MڿԿn?5Z?>`^/"?NP?>A?1 ??9Ҧ?<.v?:?5(?+?N?0#  ?w?+ђ 쾝S?8Ϣq? 13\?9?*?>?@&l?:?F?ա?d4?J8?A?௾ ?U?5#?8?4QJ??l??B#?+e{A~?؄?0? Qk>Msz?0<>xP???A?Cl?BP?`?6@ ?Vw? ?(?*m? oWt$n,?4) >?Ez??@?$?1?Œů?73n?N@޳"?@%׻??(??AS?'?>w??_ P?-?(L?ܻ,>;>.\??7 ?Z\G|?ր?&?#?-r?y?m@,w?Z?3FH?1n?"F mJ@$(*5?? ?[x?< v`?ْ?׾?]?1ق[?T9``V&?,?&>龦Jl?~ѾK?_?=9k?/"?%?ݐh?2H?hOHҾ?'h?G˱?62Sj@X)?:ӾUQ³X?$q?PLX~ʿE?O־]A}?>$?U) =T?Lྸr?KS?7>?3{is?Wb?3 ?A???"ΰ?C2?26?45?ۢ?34?u?%&?1W$?6?%?"̥=?Ն?0?$pr6B?d'?u?:?:D?(?l?EYY?4y?,pD?;/F?Ծ}?8e?0i?C^L?86ɾ0?̑B?2g?;̃?4e?ۀ??P?5޿F0?34i?T ?0Teş( j?5#w?3 5?MK@'ː@'??M?E?߾u?H6?Hq?:?E?#?-ވ??ܦ??;rG?K?W,N?%?.?Bl? ލ>T&?Ko?,_?+?K?&?x3@AJ??U?-8? -???ҿۃ?7,l ?v7?JkA6?/7???ӛp?4ߘ?gwN?Z?l>?P<>&?D>f~?,?P)HРT۾?T?X2BluD??V?]%1?)?Bj?8>#U?;}.WjQ?B !Ҿh?<?Hȃ?Gl?j\f?䟝?8llH>?݁?ߣ02?31>?mBz?Yj@( ?n+? fDr?L?X>zgҸ?$:?:?5`?#$2?5?4R?x?G;0M?ažJ?Tx?M濓ǚ?-?έ>2?X"?L?f?a?>WMg?%$?jj?;T?7R86?q ???2>?/?ྞNV$/?@?n?ΐj?J?8'?] ?-`?/?+{??2?w5O0ƾ?.;}~(@dӳ¾??r?3?5@?`?$??"+&@/s?I-?3?=@&Y7?9Ud$v?PA@??G?Þ*?,W?%l?8?a׾%供6?8l:?^?#?|ˍ?/y?-?92?[?ϙ?3&,3?<`>ΠnI1Y?ah$?#Ą>A ?(A̾Wv?~C?ڝZ?&I?&LN}?V @%¯?;? u?Etm?*?E}5|y+?oTc<> ľ j*4?F?R/?)F?1;?9n?\I7?%rZ?D!?֜t?̙;QT?ɐC"?dn}?.>jyR??忤r?5?S?Cu[?P^^v ?9i0?I&???U?O?n)?Pc?1G-?6m[ 澨J ?;A?$\l?,?Y??p?;o??C?=r?!ZB?+ ? @?$g^?*B?3? X?[?=??-4xy?'U?q?ׄ?)? ?Hh??7|d?L/kX$.??6a?1|??AH?%@%-?=ξ޽Ө4?1H|d?[ř?KpBZ?6?Д?.l޾ }?(˵??'j̾Pr?f?1H?,BC?F?4}?? ?c`U?y?߳b @ @ع0??W?@W?4hF?$Hy?*?6 +&4X?TþfϾs?.ބk)?H-տcs tr?(]x?A>?0?Jh?,?3??"1?C,2?>U?:/f? 3cW?,>֕ ?Z?@O?Au1?`MQ?*I?7Ӟ?1>Ӏe?\tVc??F)?.xY?$h.O ?>?"r?I?&?$Xm?~?Dw?/FKk?Sj?G?B?-ヌ""? ?zN;#?YL+RX?S@b&?Ag@)l?9??$Q?m?Ͼ봞?g?;p>!?0> Gq^ y1?y?7>??(?BH?Ρ?Áj?1ٳ?A?*?J ?R?g?[ d?2 (?D.?,h?$?(x? r$? ?.,?-??>?5|n?3N?کP?BN?4"3 H?:GyRW̾h?KZ??z?J˸_?x?W?WUK?E(??j$@I ?L?@8ǾEL?pV>^PuStx?I hUR?,#?#?!,ʄ?PʾRھ8+?/S?ͺ?:!?0\?<쾍 T?'Yl?'{P ?-?55%?b?weDŽ?>0Aþ ?5N>?(h? N@)z?t?(o??*D/?[\?/e?/?۲?n!ξsb @.?@5t=?]㾭E?&O?Z??Zň?+]f?>?@S?W ?_p?GH.??s?5?Dw?}>@?+/#?R???Eh'!?nA??x?v)m?:|? ?6_?$?L= ?74?e\?T?B2f?ˎo?*?ӹD?L7?< ?(?OH@"W? t?Z?9? xv?"3>?>U??0?=*>?'g?2c?O/?%{cJ?BZ?->ɾl-/?2䦾>ӆtj?,w>&)?Y3??5? -?<]5?6'??;N?3?? Pؾ}zK?'??ԫJ?ֺ[T?>?* ?%ƾ\ y?*>Ud?pN?2쾮u@? k?:e?X >&'^?-?2eV?%oN?ۘ?, gbp?PS?ݪ??Э?<48D~辿?$?<&S(}`}y?iH?Tb?+C?0M6?'$?N?=?%?4׬?>Ⱦ?#_g@?.! ?˩\??4 ?kF?ș4?5u;?;z?Fn?&࿡?4֜빐?ݾ>\R?M?:ǐ?R?ͮ?(.?/,a=?'?܈E?2r@'g?>C2?M /?8? ? ?܎>^Ht?5˔?G?1\t[?"j?4?4hh?-?2a?20?Rc? 澹??%G?~e>.?C??`v?v:?:ӾA??TP_?;m(;H?_yJwNʓο /<#???VwF㗿H?7]P8|?&\s?$׾x⾑?*O$X?0&?d?Uj薾>?=ى6Mb?R>P`c̾\%?,Ljf0k?w???־J6?(0I?^?ӺTx݋?OZ?;?2j?Cz?}&??ޅ?5ܾt@1??KG?@K?:??!?#O??}Ⱦ??Fjƿf?t]?Ɋk? ?"?3U?t?!Z?/X?4dd?_??@L?.?T{c ?JZv?CS?2FH? q? M@(v?V־Uh?@/[?0{? ?EG?/?5)?&??̂?>C?)pZ??:?'?>?3#?/ʹ?$?ǭ؁^?Df?4P? _?O5??.]?M~?@OȪ>r\ǾN?C^rd#u~?-; h?T?$kH1 ?`~`%?2^eZo̻?;,??;N?͖?b:b?V?Qi?@: ?STAwM>$?ލ"?;6hH?Q?+?Jɳ?.iw]*:?Qh???0?%?Ey?)B3ⶾ9x?ܿR*<dž ?6)`?JX?0?΄e?ʩc?$t?;x?F2?چ?C^? ?(p?Є?K?#.?CI?v^?:?+Hp?C:?;36ȹ2>@.nm?0#?F$?Cz?S?O?sn}y!+:?[Rm?/z?( p@-xp."6~D?˶?Gd?xp?Wo|7L?H?e?R?K?@wW?G6ݿ辢N?G.W?aΈ'~?7Ū(?{Y=rf?*^?AS?\׿I?Q޾A?x? x?1'ۿ?.?ތw? 2$?9'aj?7o?4?&d?N1X?9?!L?N?9A*?.?<\T=uX?Q?:ξn~?E0@׾C:r7o۽]}?%?J?:MÝ?C"?G?P>+?.#?#?t ?9羉ѿ?,?|?!?"y?'`x?ñ`@%:>ta?ZM?9?78@ Z?:?86n?L?#|?>`&>%?BL?.?6Ő?z?OOk ?K?Ѵ(@ ?5;P?3?Rھku ?$"?д?&@'jj?>!?8m?3wG (AY??6v?ߜ?5Ԓ?۳?0cy??+ԾW?z?):f nF?fCֻ?oy"?3n?5[?ݸf^Yt):~#??>wLt3/?618>?9"P⤾^(?, ?-?WGp?⾩$B?2d'{?Ov9D?1򒾔f? ?!{Ⱦ Q?3Byͱ·?0ʾ??Hξ?3_?.t?!?ja?6݈?b<\?!O*`?(ྚB?=?#'l[?'AG?3`???gN?0>c?%?.q?&bK?q8?F-?濡;?'?|y?$P?%?8@???*ȸ?;9u?2?N獿/J>ҿT??>6a?%i?`8U>Q???C|?3H??f?z?#?!D?Gq?f ?W40??-ͨ?1?ؿ]?ۘ??8/ ? rֻ?! ?%E?$>??@a?F?^?j?*Z?4>Aj ?۾+w?.>??W?ҷж??J>x?/fN? ?=]???q?6J?ӎ?}?2.???B?2>V??+t?4L?CJ?@6?ݬ?j?\@ 18?7?7?݃?&?./?9]?,??ĥN?X8??()?-4?>'8mmݾX?侦b?;$?=W?/W凾H}n?>S?D;E?OZ|?[k?Pf?.(?NdTc!z=K~4rƿ9??+oOʒ>/c"Ӊh_h?!5?'?/ ?7JH￟&??6CxngM ۾x侶f ?J ?6??>ݾ?%nI?A/?׾ᄍ\? =>V?:h*?X?,x'?>?#qʎ?g?H??eq"@w??Ql)?2?; >"?N֖?(#?՗@ ?:Y>qqF>?ܦ?%{?,2N?7O?"ʾ:?yJQ?ܲ?6=??٦?*G?>?4?0?-4?Z?N?/ ?2p|?&U?7D?e?A2>d^?kt?$ɑ?܂?F????U?'??:F?5s=?\`?L )8?P@eƆ?` ?*;?%?m?K@*?f?ɪw?~?V? ]?Ό?G<7?E.?La&Ф?GF9Ѿt?c1{?I?*\9?n? h ?D?5?1?@?5?R6k@?Nz@?2u>?4e[?Ҟ?zk?$3? dp1 ?& ?h>꾐W⾽?AnB?32&yοF!?*s?8辇?0r$?24?%hJ nw u?;l/ڿ??ߎվ@^t`i?(A ?-?3LO)N?"*?/?'(??,G?(l\?8~I?y@(?>u?*sQ0W?).J:D,?$?BrǾ{@F?, ?>?a?6?;(@1?B@I ?*1?Gig?j >PP?+> 3?FR?.O8?b?(@&>?HA?[?3_F?F@"?ٸ?&*?[B?3+x?}?.}?%?Eb㭾ȾK߾,b޾u?GتmCp=f`Jr|?H?WrD?3P`?S8?Io^iX?L䬾<]bLY?3\C l`ł??S?8?Ex,Z?*=?@G?AzL{?WȠt@&kQYʾDO?^?uXkP?2p?״?@? ?#?qf3?RX?B?_?ϕwՙy.BH?K ʾ'cA?Yw?~G?,;?- ?y???:!P?s?)? v?FxXBL?B?/轾Y=$?\?:ҾF?VEH?s?C?&lbUs?1?-^L\?ϳ?0?$J?.ھK,Š.V`>lž?he? %?e? ^?HQm?A?4OS!?C?,;m?O?G?Tc?#?VsG WTEZkj?`??"??4f>?;W^@#=P?ҋG?#8?@@&?ö?VH? +i?-?,(5?:eB?C.?$[?C?+? #N@%?6C `?P=Ok?e"@(D??"?0)?޾ş?A?&(?V?L3?l?^]?(B?GM?ޥ?FJ?z?گ?W@(c?$$ӾI?&?,L?{?#r8?Fh?'?r?z|j?$?(?^ݿ䨾?4N8Gp?14SqN?P忟??=lj?N%Xic>{Y Wƾ޲?#I?Yg?;,r¾k?⅚=Dۅ_ }m޾?:F?<䢾[¾fH=?ʸ>D1?Y?+h*?u?Pdt?E?9J?˴pa?U?,?? 7h?;,?;;??I3? 9?7?J?{B?"K?.?bUO?7h-?M>?9Pj?HmP_?"Ԭ?zj?D??Q?"?Ն?%?# ?(?Bk??A?0?4?(?M'?P?=?w,7c.X?3Y?-?|>?i?1|O?l ??2D??Gp?q?9)>M?6=H?]8?_?`i72?6 ?~?>?@@ξj?5c?4?֙*?_?)??v??<$@c$PN?&3?s?%!~\q?I%?-?K??i;?!=@?M?6T`?Iw??x?1?/??n?302z?7Q? x??0G?t?Pd1 ?8?Bxh?Dg>???O?%9Ҳ?m@?%q?O??Rؾ ?ԥp!ھm,?4QqPԿkoͿy?=ۧliw C(?LR>\?8龩4?*c: ?*NjP4^^?@j?:3:nCϾ ^tP}4??`R?3~vx?=7&?"[??(u?⾍"?#?HR4?0?=Px?n?)7??{@+T?%ތ?5뾆;?%[?Edt?KO?Ѥf?Q>?)?@?'?:e?7n?Cm?I侹 ?+;?:T?;8?8r|?"O8?U?8|??%?WpL?Jrb??q?z>?M&@$?ʵ9?-Í?Y?EH?>?C"?(?KL?>/wrqu??T?5%?* ?-?YV?6˅?ª?W?w?Y?>aF^?UG?Gt?5 ?+Dct>|@$Y@gކ? S?x?5D?'cD@+\?I?C'?6E0:?C??5KK?X@0?*?!o?)۵??? *?L?| ?m?,?v9?t(ܜ?.N?#?%>[t?*~?%Ij?*PL@!βF?*`?$u!??=~?#?" ? x@(U??$0&??;S` ?3c_Bғj|꿘S_8?[ g4?)*?(󳾯S?\IT>]?,٧)?'_\?& ?Кq:%? Փ?˚?cbkd?('?U??9?/?0oF?۾ )4?z?:?g)??3f?ˑp?˾? ?ܨ??!"?z??(|? ???t?1i?% ?pB??bf??]?,? ]?t?H?v-?(;ȾPt?Dx?Ey?y?1?A@?J?~? ?*??)L`?ٌq?/0?*B?Ŷ?Y?=f@$;Fl?&?)@ ?>R?ׁ?(?9C?^? ??ӌ?D?:?ȩ@,|^?HQ?(\?ٰb?Յ?%?h?9??F?(T?Nþw?/`?Kt?.S???E,y??P?\?6,?._? ??HJ@?>???L?(2g?64?G?B(?O?4P?Z|~?1?Br?06H??G뒾, e!'?D$?W02?N7`IGQ)?L?}K?A꿒!~?[u?'DxM?Rd n] V?<5Ծkn;SB\?ҡ?Iƿl?D9jb*GL(|=k*?3:?Np?#%?1z4?C?>>zO>:'?y,?*i?2)`?gR7?8?* ?X⿦hV?-??R|?~t?4;i?G]?՝?ݱe@,=?La?,?7k?2P?}A; b?=N2X?ؑ*0?%b?Z?6?Tn)?(¾?h?tK@(i?Ղ>穼?+??z?@*6?$?/μj?VȾ/?????gJ?!K?'?Kr?N#? ?+8|?Ȳ?OP?????~?Gx/?Jz?+?K?.,?yh?8s?T?ߟ?ֱd??"]`?ԛ? ?q?/c?պ?P?x>D-?=b??(???L'?H'V?){? @(Ŀ辤>mD ?1?*?*F?Ŵ?4?2[f?("?(I?Xꈿ ?-?L#c?8 #?LI?-H㾅ph<$+`{:?Fd+?MɾByX,=?>]Q?ko$ӾnW.?U|_? ?YG|J?ȿ ྪq??u?Ф?+#6)?3H?D"ڿLɽ?C?@'?,9?M*I=%N{'?@e?5,W?// ?oV\p?l#0)?ͦ?߶C?H ?4O hYj$ⴾ*:?L71?,?۪?N}?)A?#8J?/5?I~?( ?:┾?{?-?B?ƾ̞?I?(6?9?օ?~?EV?߹?džS@"{??!,?@l?f?=\?޻?$?ጃ>q?A>J~?Ww?)??Jz?F@)|?\RM??&?:d쾗2hy?0Ʀ?+?e?$~?*b?5??Qnz=t?A(?c?@?Q?.}j@"?EL?ۂ?h?E?F?.?$^?v+?̧m?ϕ5ɐ?1?,N@!?-6?%Z??1Źw?7O@"?#?@h?ř?F??9V?g?$?FྡR?y=?-L??A'V@%??J̇p?7B?(4?h? ?c?=?0Y?3?P?ڛM$?]??&r? L?}?B? R?Z-O?م޴4=F?Impr?3j?/ľ?z?,?1Ҿ@M Bqo0K?IfWP?AM?ETق24c?υ^?!оgi&?BF?.{? X?:?A&b>r?ђ/?0&?6L^R??4?D !?͗rU-?8?++ w?a?/ ? ?x?,-оK?Q?Ք=?ʣ?Bc@#\T?d?=擾/^?9?Aɩ?^%7?8?̛?I>R?9`?@?\r?(?84@*3@-I?J$? H?ӢHgb?/6~?D?۪???'?؉S? !?@#R??b ?C?Պ??0?&D?J?6n4?P?Iu?.?c?bd?&?8?>6?H~? 4?,??/o??M'?J8H?%B\?чQ?[?%&?%\Z%Y?0?K*@dw?6U??{Q?@?J??/@ Q?D1?ŀ>'?(|?R@$?9Q@(MF?Hھc/8~~?0@ ?>ܼ?6¸?p?+i$?%Q?MT?,EW?4i?޾ٯ8`x?PuXl?t.]?MB?@J?=Y侊 X%5?"B6?d僾{?>oX ~?B0gnr$>P?=m_ֿe?(5?/.?,%龅.?S?/?>;?v?-!A??Ae?ch?J?tF?Z?Z=?Jtju?5Cd??K?,c?:?rDRT?C??w?9>e̿ U@(?*&C ?'Mi`?0?&ڿ:?%2?$?A{> DN)>U??2.?q)??M?ZU?4"??6?%+?D4?~hE?? ?3?n?tXcL~ҧ0?,a6?0r@(s??)?4f.?8ޝ?1l@#6?ռ?/?6Rbwy?5B&?кL??? 87@/@!^?ڻ0?~`T?PZ?[?;5x;?0;?SNj/$?#?A6?3F?v4?*@4??x@%??.?Fv@\V?6?"pr>6?z?޸?/??`?2"Z?4?@C?$?,#?Z?Ɏ?;?z?֜(?/ק?dA?# ?Aĉ?T0?.r?7L?=?#xl?Ft?;ھR?C`?/&??2*R? ?8?W5D?:?8:?Ȣ6?1p\5Q?R%)?- ?Aѽ J ~G3J?" א?CF2\? }󞾴¾?'?|?(Ȋ?E?_@G>T>A?&?X?'3[@Qk*>($ |?ʿ?"dr?S?Z!=?]9?I??5Z?f??*0?2t@*?79D@?;Bݞ?- ?@2?U?ذ??@ƾŰ?j?,q+?l?>@ H?Hي?]?S? Ҿ?9U?κ}?ڋ6?mW?5Y?˫S*>?<.?1@# ?8?Oz?)?8?*$?6?-?-R>=?ѫw@% |?ϮBw? TF?׋@?7rJ?C?"O?F9?{?d?^K> ݾŶZ?&1?2&PHe?Ce?U̹CK;_?Ϳ!C?Aȿ.?Q?4h?!(1?Cؾa>i0mФ?d?5VF.x%?@ϙ?CtH۲?hDE?%?K¾^?$pͧ?@qJ? &?!tf~j!1ɇ?BXz?&$&?#g?(4?L$q|N?!V)?e?jz9&?I>?E$+?!?.?Q?\?(?(c?#龙Vs`_T??J?;'ђ?ؽ?!d?Y?h?m??$??I}?6j?8)S}ԝ ?ψ>1C?״J?ٿſ???6???,Y?6x+t?T@?蠖?ɯzzHN?"t?%,?WK?#f?*?>&?؄?HK?&ƹ?{u?]?$.?]e-ÖR?R}?ʵR?t?d@"R?@%D?y>??#?_?O?/O??bD@??5;@'i?6?4?9XV?N??(H?rf?NDr ?jN?M?bd?2?f?)??ܑ?NP?+Ign#@?>̘?5i?D ?6?$9? YTt?9ા6ZR?l?Vd?Iʽ x_&[d>}DA𾷅?6?T4?3l?76T *'?L V?3־(??8? b`?CG?/!?[c?=!?O7Z?3Q2?E?4?*Mf?7-.?0JľW"?/h?(B&?Te?"3ľh?t4?֭?>ۊhI?QMCr y?Lf?D¾/ ?*M?0/B?\_?n?;?վ ?->-Ӓ?k6@&I?F?P?(?ԉ?߽?/?:?C?m?۳ ?.Fp?W)?Ӿ'Ⱦ?8?)?\J?x?p?8&?ڏ@+a?]Ӿ?3\?Z?//ȑ?"?$??6?5OU?"?w??Ϸw?Ӳ?3pZ?>?l??I?׮ ?o? .?k ?_?J?+?,?x??2?J@$e?=9e?|l?c?K?>B?'[Yi>˲N??2???5?՛?12>EO?%?2?(tǒ$?M?H?&Wq DrT|U0?b-@$վlބ?CižMϾ\Y$E?(c}oM>)Kj?E;E7sg?H߾Dv*?-9sv?LI?;@o?KN׾:먾[?Lb?'R?8B<5,? #M? ~?;?6?2M!?(5l@R0.U?6?JMy?4?*t?U~@.-?:?8 ?5t5p?%?3"?ѣpm? ?Բ ?u9?К?J5?}W???D$??-a?NgM?l@%?5ዾǾP??X?>?O?@??M?6G-?1?&+%?Ծ˥?/?;v?ٽ?+i?)?4?J8????w?1j?3 o?6X?6?&M?A.@W^???M?9a?DF]b?h@#s?Q_g}?ڝ?&8?/R?Ӽ?A?dH?6?̭A?$$? ??&#D '?6??@+?PX?;?\?k3?d@$Lu?:? Q?-5@?@ Gl?X???4?ִ??6?_B΋h? žؾz"?n?3?CT?[?M?VM??"@>z -d?@;?->5?I?6?*2x?8׿:?92?S?9Pm?I>1???H䀾[ؾ Iłq?gƾIZ=˾G쿤4Q?%5?6}?;3N7?o >N,q ?(*?S羛 ?!03(] ??E?'|? ?ɶ?!^?;"ྵ+3?SʾEd@,0El?%?qT?C1?7??CK2$u?D?S4ӿ?q(>?>?(@ ?j{!??D!?-?ʫi?)?.?)?LeC@$9?']P?APn?Ai%]?C? ??!?]%쿳+?9?˔\?A^\N@ ?-F@%?%!UMo?,Vv?y?"* K?7mľW?(W?6V??}???(?E?ϿU?z^4?3r?/@l? '?,?Ӈ?)@,l9? X@-r?tľW?ڴ8?95?ï`?׿?1 ?ܗľ)y#@"?X?8a?@?3Ƕ?%4*@%ھ?/k??߶4>Ј!L?G5?ӎ?"i?/x??4??*?J,?o?Q1@#/8?Ğm???6ҵ?FC?B h??݌?1:,?S?>?!@ba?.q?B?n?徕4?B[??ޠ??&g?9j?&R?ߕ>־ǰf@'x? ?WMH9?#a~?@,?]?g>ZNb?]b?M9?ɾg?i?8?ȉ?a;?V?=϶?"e?&DH? ?V  H?3Pi?F[t@+bn??6|o? ?)3??͐?w>a?ɝ?-*?A?R@^?ȑ1?4n?ȝ??-j?B@^O@&?8?ЃRh?4?H#@%Ö?5K?j')?-?3Z?8Z?;?"վ(?"?$J?$? ?&?*? 8F?'8?RU??GY@NlG?0?:9?/ɟ?6?Oz?A?J?0?I?9 Z۾)I_t?.ʾM?>F?+.d8;M?^8-{?>$3v?Զ?wG>mہ?;?8x774d`?7X? !ľ̆od?5Ǘ?NMp~ROL?,>?,M~?9?=?'2H?&?7 ~)*v?e??酨?]Ô?'罪?2$@$(?%y?#?+?0~s? ?l?$?kl?$?A @7u ? M@% j?х?3@?A?+ϴ? 8qg?Ҵ? t?;@/?ƴ?|?ʟ?/@$q?QZ?@#??D@$?1?9? ?֛q>h?~?}?B?@??0S?GH?T?M?ٸ@( ֐/??@J?ܵ?o?@$o??)???G???0d??x?i܀?1d?+<"N?8&5V?ii?@Xx?HJ/,?@TP*GÐ?=n?W?Ð?B (_ݾIx,?N?>?28P?R?HmgN?4ھ?S;Bo?3?!c?$*?1?C-@m媾p@!<~@ P??I @$p?2/@!D?K?=snA@M?#@@*?# ?R?%;v?ۺ?!,@Cc6?0n@#?ӯ?(Q@s?Q? ??3!? u)?* ?(ž ?"?H?"??@?X? ?<?9,??']@\p6BD?Jak[?5oq_ 4]ac?Df?Od>0-0?;"?E?A(?(}?;&$?Hd?CaUJ??$??? @ц?%(?$??>>fw?ƾ?^??"?!Ҩ@' ?n[:?ª;?%?/?ۘ?g?ٞ??䦘*)?:ƿ8?R@(??G?8?Q??ͦ?ۘm?q?ՎJ??*@~?x?R?ؾv?f?+S?>@ @"CY??H?p?Ȕ??*X?3@+C>]@#??U@-z??2?'G?,?w?ڄ @֊?@?)=?R7?șN?60j?O+?&R?ٝ?#p?PC@*? ?1?;2?Ї?A?؂?2??!?ԓ ?;ަ?׾^?3?f?ٮ?(?.-@#1!?TR>?/?.?ɂ?$Bô?F`?Ԟ?B?άT??%@7 A?K-?$???T/\?=:?5ސK5?;[ᾢ?5aG?ATy3?nD"?1?DJ5% {?=?2P>SO򌾏΀)?>$}u]?+?kd}zP ?近 Q??Oi$=?Z?H ?6c?DS?*B?:G?' 2?3)G?7F?@' ?*׿??=?B>Q?#50? ?3>MN?2?/??#($?/?87?y?/!@.P?I ?J?FO?'8?@%c?t?&+M?ؘ?χ@+b?g-?0#? K?K^>o?)`?o?3v1?p?Ț?t?/u@(Ş?l?'@'HPr@(H?-?LO?ʈ?!^@)@*?@'!??I?աj?Z?.?Ew?ބ? ?.?K{ʅK??x?o?jj? g?k@#27|?7L?һ>6?҄U?*?A¾.?3c8?-?2Me@ٲ?YߠArJ?1F?3N龒?9jbnҾeIf^3?G),ھ}ea?HZ#p爾*?F?V,iXþ@z?4WZ>O?R?IxG?٠?8u?#/澨?m?'.}?U!?ă ??輾f?A NV?|k?#`??Q>?>P?GT??@找Tt?)?ۅ?l CZ?ת?/*h?#):?0#?;w|?$?? ѵ?$?9?7(0?P?Gp?<?\>0? {?Vy?,8>?oN@!?:?-b?@?D ? o@?<?/F?ĥ@.)?DJp?@$޵?\?-;?α7?݉6?X?0%?8f?2? >2?ҹ@)]??>h>Ŀ~?iVF?:? I?!W??ג?@%?s?P?C5??8?5"j?%x>Ì?A?v?fm?J?+8? ???b.?3Ho?"5? ??'??16o ?̎v.r?) ?D94yז?$Z )x?-??9P?*@@0~?xB?ǀF?B?܏fG~?? ]'?&d?"ڰ?ڦ辨/¾PvT@)?"?j"?U??ن?o?S?@k:"??8?P? ?߶@&1? @(?1?@&!8@*?K?!@!-t"?-?(??'궰? D?:a?\@'Q?0 rdT@.|徚 ?#?:ؾ,?4?b0=?(@#@_????&n@(|?M??)%־9>? 4? 3N?-?8?-X x?(?%T?ڮ?4?r?#f?F??_@+tȆQO?Hu?5%>?<_?:?6?Ef?zBξ}$m?.O??Co:/lb?UӁ?#?Wz4l?0w?LJr?M?`-?K7?8O?c|?;3E?e1?G$??=?s $85@?90澌M鿠a?5оո?6;:'?"Qo?D͘Z5J p?9?:;?XU>|OE ?9Fr?8?L=o?!?Bdt?*u"?+f?F>R';?zH?@ܺ,f?;?3ݾ o?Ԁ?,?0R??BwM@?@,?h?I7?J?3??U@'@?&??0?88 ?&c?c?G? G?DuP??dy?H?٤P@.1?駻?.W?8o^?A,??:? d?&?MF??17K??ݕn?U@+ݸ*?b?L>j9?9o@"?7$J?%f?.>T?EV? i"?ۑ?%?%?7x8?a\?o@!?4@%3N?*?̙@a:??t?0W?@P|?? @^V?Z?5?S?.@|?? P??ə?2??0?h-?@K?֋?O? @%4? ?1|ᄏ?ڳ=?!nZ?I??\?/A>?¾|?2@k?Ҡ?@?༾[:?"?YU?(Z?'CѾ(\?)$=CQ;?-8֞?D3rbھM8kV=r?Sgվ]߇?Do,?S#s?KƾԾn?QcrMFK?.}?NQ qb2?CP;bAZ?_|???|?\T?5"?Bо:?fdU? ޾x[yo?HOz?Fc?6?嵾 ;?!U?W ?&x?Ӭ?&rx?, ?(?Fo5?>=m?ڡ?J爾 &?5o(Z~ AP?DSq?F|xm#оw?%?ji??>rWƾB >X>ٮ^0b???7?0 ?EB?Nྋ@?"@'Y?q4?冉?lw????,&.>;? ?s\?:)V#,?v:w(k?-?J)Z?˦v?"9+hB?K5?X?*P?`?T?B?9T@"?J?*ȴ?2˾?@(f?I?@@%@@CB?Q ? )?E?T?d?Jc?V@&?Ed?9@^?Ѕ5?%?A?u?@,?Dx?*V"??6?Os@?x ?J@)@"?b? ??6?e"? ?RI?P?C@c?|?ܨl?*?O??̡?2@j?T?σdn?,*F?@?ՈV^?9 ??.)N?!iN?F̾ȵ?N@/m?<?M?\?]x?/?T/]?7Y?/?e??ABQ"Y?K?<˾l ? ?ݙ#V.zde?0X?P?FB?@V8?\̾ ƾ.KM?:L_?ru?2ke?; VA?eM?$O?Bv^?'p?F?,P?|.?*?X-?>L?ȕ?,llS?=? a?#3?8?f?n?Ծ|]縨?7?J?9iӾ6?u?d?@#i@$c?N?5%3?޾+ ?҅?>?@ ?A@*)?+?-X?[N?M>x?C?w@/F?x@%iJ?+L?+V?4PF?#T?%#?Ao?)G??I@d?✡@j?أ?ق?"ze??!*?&?%u?#V@#ޙ@N@"??Dp1@%1?DB?$?{@) ?Õ6??.??3<@)??'U}?e@&8? ?-"N?@::@1i?Y@+@e[@l?zd?ۃ?ex@!@?3 ?-@+v?>V@$? f?$????;@'kk@"u??nI>RX8?$m?4¾b?B?N?3?'>0Z???f?N?O?q?)r ?W?!??`o?&ݖ?/f?,i@??7X@{Ⱦ~?I? ?,2@vMоi:>X\0?:Ψ?d?Dɾ7v=1?'4?@OͿ?Gؐ?AbkaI;?Ζ?/ ?O`E? )wƾm?=K`0d~ҾzlQ?C?N8U_ ?D?^,j?aF?/0?"?8R7?>Xo?MdaU@&?ˁ?u????'??/}>x3?ׅӾ^,?4쾨hp?!?얾`'?`? ?́?ۣJ?(uP]g?@܏?!?J?!??,?fP?N&?e?F @$n?4oJ?.۾?(?lZ? x??-n3?Le>j?Bd?`?Rr?I?*Z?z@e?q?]q?{?Z?e@?@@#@*@?&]?@#5X?%??֛?@&&?7?6?Aj@AFY@'@/@) p?3?F?'2?@+@&@.V?&@?%?t?p?{ͅ?t&??27?]鿧k.FB ?7v?H ھeZ?8n?!]Xh?$HH@z@)df?L<ƛ辇?0?:ƾ?v?i?0&@3BmB>#S?/?$?L ?Jtn?0o膾 j?*3?^p?.?#?8?4Ӿ_)z$?{@iЅ?:1?A?>_?;;?9?̉x?BJT?齾?AH?2 @@"˩@,?ɿ?4m7+?Ȅ?G@%j?@'?Y?;I\?y?H;?"d?@"w?7"?-Z?NI4ܺT@'??@%j쾐BC? $?.;?rU@%q=?9?(?xe?1d?@#ԧ?DJ?=>?>L?'A?< ?[?!פ(:?)M?%5?=쌿?9?Y??s-?( S@(F?h?F/?#0jj?->~ol%?Ng?W?PI_?3P?8~}?6q?*>?N??.HhQ??:]?#?4p?6?T?sf?he@(-2?=ƚkA?]+z?׊|f??JX?4?5?DJW?~?-?D?*}N?Ս?FC~?Dl*?Y?Nt@)??(y?+M?$g?9:^?9p?R@##3 $?.T?/嗅>f?/cs@'y@*zF?%~0?# @Ms?WN?Z? C?@BضBjAF@!0 @*]?S??g@?-o?ٙ??1N??ΰ@@??8?r@%~x?O'?؄5@*b?-?؂?D@#HJ? (u@$r?*@&y? ? @o5?ܨ??(??6$?@'l?&>B?t@gݑ@\"?k??3O@)?E?D?M?U> ?GlI?CK?6m@,??=A?3?9$?6w?փ][^Z=Y!?>?ϩ?@.cA?DL¾s?(CO?G!?^ԾZ+?!9zҾȺ"#{ȾV: ?7Eh?FRF?ʾq7?4.?-?]A?Ƞ?<:PZ?5Ҿ?)m?1s?C,??Ch8߃wG@?Ny?R ?(?+þfl7?N?:?!i??:ܾC,??G$? -?+?`?-4.+?6@$?b(Wj?6t?жT?:k?5w?M?t}?eY?&??1]?xd?"?8?3o?֙?֏y?6?'v?)dV? ??9@/̬>"9| ?2?04;?#?, @i?Ba'?X?҇@n%h??"@%辵?3P?ߢK1?߽?VJ?΂?9?@$?iBBC/đANf???~?13@!?-j@)`?o?3@*3@U ?@B?ф%?@b ?9?AX@&@)4h? @`h@a?!D@'x?`@.?K?8?/?A՗?'?В:_T@)@"/2?5P`?1?Q? ?Fz ?!0?4'?FS?Qf7*I>F?H?Gb #T,@%H_?P3 t?JS; ?J?BM?0t࿩ V- *o?~n)v<̾dS8?C^ ?KV?:?A1辪VnNt|1/ o?B+>.ȿVؾ }k?WG<u1ٶf?B?E?5?C|U?Nw$Z]??E?)??'?"҉?C?7?9E0m?>1?" ?NW?*<7侫o???).?2V?74Mؾh??GDQ?ML? ?3Jl?V@$Br?1gN?F@%9p?? Q?>?z3/?? -??ٟ?ݗ?@? (?!?ƳW?>Y?Q@"?\?L?ع_?HPj??fu??/?#@0&B@NQ@gi?@*J?7@+h? V?}?@ |?>?OT??%k@)S?E}J@( ?v??1 ??=D?I4]@%7@.!'@.@.~?#_?Z?f??{]@)hg@,?`@,?k{@ ?+`,@,VD?"e?-T?@l 7?*.?n???E?F?>?[z?3@F?"?6t?K`7?KX?צ?ўþ+?5?9?4s?-?T?3?.?+?#+?=s?J??ܳ? @*m?",? ?;?]B?,9?)?,em?6$?uCj~UlᾯD?RM?](E"L8sQ?=?;h?Je,?(ŸJܾ͸?Vˀ]1B)vJ?G;E` ?2s?9v?,)UG?X?en? t?=:?q 'k2۾5?,q龅82w?1d9񧾞C?4Ⱦ?ߠ?>T?s?@# @(;?ϩ? ?h?G@(Y?f??x@&?s?ur?[r??Ո?L@$F@%j@l?i?ȼ?ҷm@)If?I?D/?ʶj?a@'?),?y?S??) ?=}F?֑??Dp?'r@.?5M?&r?@'ť?ۇ??] 1?˶P?{?5]-?j?ľ?̟?-??@ޅ?7?;?*?.q?-L?zᄊ?]~:?>JE-?2' !?O?? ?>?lT;M=BC뿙:1`F?Zwv?˴?-B}??s~?P"?0Rw?I ?2ql_B?'e?#?4[s?&,(S??X-DG5?D[!7?Ik?E亿]"?5EhH2? 6?.F?L?A@ɡV??Ǣ?Z?U?8G?0`?ҫ?FO?D\?@?P??˅?Ta?JH?+D?;~?6?OI$?X?]? ?LO??h?@1?Ԡ?;Lh?a8?K@$?T?~? ?Ru?;S?p*?M3?l@"@+{@lI@$?%)@&b?y?ז@)?̓`?b?܂??ӑ?0?E@'@,?ح?5V?F?@gz?@-?@)@b!?%fp@d?@?]?ع?|@!? H? . @+?@!Z?H?'?Ӛ?fG?X?>9@?+ϐΰ@0Y@P?)?#]?Lz@V? ?$?u@(~|?1dP?E??-?1?H~@-8?x?FV?!??ܣ?!BrVP?0?2J?6??*?60>xxl"?H[l????b?SN@ ?=B޾pq!т?0X?-?,?|.@޾;u? N>"ꉾDi!j?Qȿ8?I[y|)很8ϾEFIH׿ 0 ?*NT?I~-f@;s?Ӆgbk?7ap;?F ?t??J>n?ː@)?6?>?,?85w?F:?Ɉ ?Bd?$Z?@)?C?"?/?{??I@%N@ m? ?FHh>w]? |?]?H??u??6B?=?i?@e?ܦ>?"_a@.{e?@G%?޽?? ?ݷ@(:@,@#?@,!?%x?D@i@B@gE@'S@/$ ?p;@aU?@*@gU?A??!@&e??߀U?R:?cQ@(ק@)?B@m{N?<&?U?ֈM?B@'?NLg?@+@%@(?"f?-L?,@?y?*?p?2F?8?ן=??% ?,?ޗ?Фo? (?զ?O:T?zB?Fb?q?$H?Խ?f?(>1??d뾫?_]m? \Л?<"t?(𺿹짾)ۮ?n?9h?&߿?ԾQ? ᾍI &X??JF+5n?H ?.p4d&,?/@T\V϶?3,WyL?R;s1 Rm?%9Ӑ?C?/4b?I氾ܾ$Ҿ6?3[rח@Ծ.(N?BR?2K?n9Ӿ?l?X?1dOc,?s?|@!:6?3B? /q?2?aQ?K<?;?e&?BR`|=>?*̆?5}Іb?O?# ?+?1ߐQy^?9g@#$C?)S*?[\v?Ƽa?݉@J??۫A?N=@f?H(?:? @ @*(@-V?s?Й@)zg?,@*%j?˙??lT?^?ë@o9?$?ۙ@!ю???D?ץt?B?39?W@'J?;>C@? ]?B?Î@c{@ku@(?y@[.}?ځ@li?<1?fY@'(,?մ ?&n@'e@,DP@+ss? ?5&6@*$??@ia??Zw?j@?@)M?A?}@)a?2n@ h? d?S'H?/l@)??c2Ґ>t?R??Z?M=]? ?7B۲?26?:? *q* sо>D kpO?/B?tf?@qA?=ȾP i/8(Dعx/T,Xؾa#?+`0Zpc$9?'kʿ?ޑ"h迟?)?B W?@r>xqs@$mn?&''n)`?. #?hJM?'2?$'??]?FJn?LdJ?D7?^*?(d@/?3X? ({?N?ǚ? \?\?+|?2F>^1?V?0.?ģ]V?_~S?;Ȑ?K? @?8??˞??$@3?P4?#Z?`?]?.@ 0?Lv???9?w?D?(`?R`?`@)z?ޘ?D@#l?9?L?q@S!6Wy???#"??$@!=gg?:@"q?ASD?BL?2@)a@*w@.@*f@fl?Ɩ-?٤?@$Eg@(?<$@Zy?!@&?5@797?FH?'?0d{@!?;h@%E? ?@+:>G? L7X?-s?<?PDi@!~@'7w??R?.c ?.Æ?,?L?@,4?-=?A?T?IH?&?s??'?;??t(kF3?ў??3??w?冾 ?B?<{_?3?}??=sbjv?+89zq?U0?F(ؾ.L6?;(<}?)5o?=Ծ?6?"W?OD?,MS)?ɀ?C?QF/Є?;t?EH4?$guzk?*Ⱦɾ3dc??*< 6&??Ҵ:?VpþEG?Ls?9+?*E0?/?"#0?U꾊{?צ?Ĉ?B?-?=YN?!rV?,]?A?8?Wl?%[?;_&?83M?/;Ҿ?1@%?/\?O$?(3?2*?Ę?.d?3?2?ڊ@(??F?jJ?FL?+?&A?ՠ_?]p?&:_p??-ÞCAR?Р ?X?4??ɘ?<??ʔX??Z?ٳ7j2??Ԭash?@boD?(,׾s?#ݎ|&?cmM?T[䢾 D8HqM?Q?RK?Jl^z?Fm>?~I?W?PՈ?GSp?:s?BM BuϦ ?M7\d?݄?ץ?+? @'CZB i?>?*a?D`?-.?8?ˀx?6>锝?^??Hn?3.$?I;@.V@??֘(?T?ye@nϝ?ԇ?X?K?M?>뀾D?g@d-@aM??H[1?m?iP? u?Y?ٰa@%@?@i@kY@&p@52?t-@m@!@kl?2@x@^@*@k@01R@' ?,@)ť?*??о@( @ ?b?4?-?(־=?E?ϋb@'?/A?Ɩ?8?ǐ?ݒ?+n@?鯐?ž@c?- ??0?+?^n?`??(Ŏ?Ŝ?ۭ0WRwa@&?r?N?2p?c?K?=N3??.? ?h?)Q??R\?F]?zb?sCR2 ! ?JoMPs/忰?ܽ]j?6 _$ؾp?Oy"K?,6%y?X?7;꾃?seԾ^Dkf>0&X|B?LQpva~??A2f?oqrhh࿡]پs?u J?p`?6;tj??:޾N|?:j@(G?3 ?2r@*kH>R?ĺ?}A??H4@(@'d5?d@5@$sm@!@$?ұ???C@$?&@i)?%!??]@gG@%sO?/@c(@t?1@@$1j@f{?0@h ?$@Л?@!@*CQ@)@.y@f@l?@ מ@-@#@bj?b@(b?Ь?@@eO?$?-:f@'J5@`o@2~?Э@?jw@$?./t?I?e?ˌn?lb@(?? ?-m??͞?#? ?@(;?R?Ȁ?1??.оL?%?Fh? ?El?j?-?7 >ʾw>Yb?5f? ?b?4YԼ@-g4? ߢI?C] ?AhW?J?94˾Z⾯IuWN?QY?IMJ`+?2!о?KlH%\?B@9?&[V6־UjiM[v!?L ߾K?c?/mھ˔{ʼn]?ȻX{쾠?Rp ??t?Qv*}?(Y6?[?0?5}?" U?tq@,Sr?Q?(?6?Q>?d?I/?tM@H?!Mh??=!?׹??%2_?@''?ZB m~?jt?,Bw{*???I0~?/v?MO?>p ?d?#0?l?v?x?0?؎@(?.@&? ?7@Y@k:?ʵ?%f?D[@m7'?@ @`5s@0?D~@(S@@,@^@%@h.@=>?3=@e`@cw%@qIn@%{@ޣ@$??U.@n@i@g@28@*<@E@d@l@XV?؂@dw@6@ZL@^,;@@Y ?@:2@`?&J@$hT@H/@8@kU@'G@f@!9?7)??|L?Ы@&3?&?ѱ?(?ݠ?R?=@?.*?2?4p?O? 辕0Z??@(Q?P@?^@CE?/?C?3?*?@8|?Ͻ?׼}?5@)d+?6 ??5?\4?$71?;􆾮?O?D:(l#P|0u?$چJX]?͏þؾ꾷?,d?:?;ɬ?4县!Y> >ʾ?.ྯ?!Sk(ܾY?<˼?#VÿW鱿󾟛_Е6Xs?>8>xg_?-?3:?IE?ò?;D?,? F?XL?9?3?76|?D??>J$?Y??8@V?9?P?N5?.W?(r?k8?8{?F?V?v?ϐ?ե=Ì@-G??عp??=.?+?i?Dn?y?۱P??k@#@z@&M?@_;??'T?P:@@"e?=?E38?,>@"G@ 5?ʜ?Ι?lj@,>@,@a@-@dl@e@a@08@%?*y@bl@cL?Ț@hП@#S@@$@l@l@j @U@eR@߬@d1@_t@$@_w@gy@!D<@d@+3@du?:@#-@@@+D@ @',\?`?-]@"d@i@_?}@#.?܄?՝?JH??e?w?7ȾO-%L?ߎQ@/ ?t?9E?ު?s?ѡ뾷??d?%?B ?? ?Ӕ??K7?S)?>*`?By>&??K?+!?_?Pt?(O4?1 lk,Y[%#ᾨ"\P%U4f?YaT ?2꿦5?/?)7ͻ=?*mxUJ9S;Z #[1k!Gq*̿:*??ɹx??GZ?J?/? ?;VJ?0,2?6t?0AO\As? ?.[?ԃ?/LA?Ըf?9wܾ?8>7?&+?eϾcY?H?Թ>bD?NF?*9?r?Z/cR?'?)[?׷?M?LV?_T?GQ?GQ? ?}7?2)?ԉ#?"?!}&?{@_?8Q? ?דh?/f?N?1@-"@(̫@&"@h?@$?1@+:@"@(2?3O@&l?NT@'&@@d?L@Zs@[@@B@!f@U-?K@)^?O?h"@a+@m?@@b9@_@h@&@jL@)@=@b*@A @-^?@W@Y@@б@j?"x@-h@lo?et>m@+@d4%?4?O?t??I@@'?6{?ߠ?%?ɿ~@&^?#?#?@?)?;ԃ?հ?Q@.e?5,?f?ٿ/?@ߥ?+;̣?"1?%a???%D%b?̈?\>??(?"9ώ>*?@ =??%6վ78jBZ7 >b|?@9qa>t?@9jr̿_?@EIA?#Kw?3F?"ԒEA?NY?JuLS3?@K?/3?%A?M?(?!?$LƾwB?T|?U? ?-?ǯq*?ǾGp?d8?9'?>7??/?,A?? пG??_ ?& ?W&t(???Aǔ?/=?T]?2?!h.?>;?F?Z?ݰn@'?ժ?6?1???`?s?F];@&Px?-/_>k? '5??J?@ K?5@O\@z}@'?b@Z??Dr@e!@f^@h@J%@j#@d@e@-A@e{w@j@Q?̬-@a@g@\|@3^B_@X@N@q@7@'@p@$}s@f6@@@!@n@@g<@]ދ@O@p@<^@i@d+@p!@ w@a$?N@&?*+?ڟ@'?@*"@31@-<?e?O???#e=@+x? [?CL?z?W?٢V?'`?_?ѕ?0? ⾻!@ ???;Y? _?0dR?5?O@(+@??|?p8Z?D¾m?b?66?^ ?%馾^q=Zg@. 0?f9ҿIǿK?3dz8EX?C?5j'?!ĿҿL?2J?C8?㺀??H?Mv?AQ?m?I\?L?Ϩ?F@.ز?B?>?;$?1?2$?CA?~?ڏ@l@?"@?%k?*w?$N?3M?Gk?2D>| ?5D?C@/?ľ̍V?;?( ?#??6s??@ͿW?@ ?F?8n?q?"þР?@?V?7? Sl_𾖍޾r?S 3O6|?f0w?|?0@?Se׾I˪4B?:3ވ"d?*I?&??B"4#?NР?TF@?H.?A8?.?6{`?(:?vJ??̓ Y ?DϾ?:&J^:?1[?0?C$?9?@4R?CZC?2?a?=?k?7?0?"?W?[3?J?Iپ?_4d?4B?Y?~>w?>iD@mBAiѾ?M0?}~?ʩ2?n?|?3]?8k?&?N@*p??#?j?(@]^?rm?@&??\@"?:ӄ???@f?!q?z@fO]@lQ@iA @?خ>?u@+?(@eR@e ?ۚ@`@@(YN@]D@[Y@>r@j@ŽA~Bv Ax@/s?5k^=?P?оoxsh{Aѽ#?D:&ˬ?]?.BN?D˾ž(#^?>yj2?2"?$%O?&Q.AF}?L>꾃濶?⿬r?S?$M?o|r?x?4`־RQ?O^I!gm ?O?Tv?;?3%??9iđb?.62/S?ٮȾe??1ξ?J#?D,?fԾک?9?3g?a?M?+,r??2j@?0 *@$YBCf ?V?^?;?L??d&@fGv?tJ?ْ?R v??ީ`?i?bE?,?%?ѭ@e"@f?c?ը@%@%@1e?@$@.y?]@%OA@k4@#]?R @T@cx@(@$I@hR@r~@ov@@ѻB@4@`@e@+@ @@@H@!/@@xj@@@F@ahA'@_HAkAk@Ԡ/@Ӷ@쪜Aa@@8@@k@!@i1 @hh@#Ig?œl?@۾?6,?g ?m?A待Ĩ`Xt†?a?iZB?8b@?!=k?CJ7?Dr?9?-vcq6۾19?*wA"?- ?*P]f9??+??VL7EdΟA?7qޥ?“~_Ǿv?(z"??/?0?՜O?B?JF? >}r?+^?RwF?;?F@'??ՙ%?؂3?W@!@@?%%@t}?(@c1@@&R~@MLAe@:@]@&"@@cq@L?@( @_@w@/@@kD@~@/@*@r@_E@m @ҩu@@+ AA' AA%A5AhAWAA&=AѳA'9[@@P~A&D@@@@g@*@mv@ .@v?S?n?i'?&@" ,@K?P?R?)V?>L?->B?/?ݥ?]??-(??'Gy?3?c?'z>-˾`?!{~?=9?!O?3?S[v?M)֗??FP?n?;?[?DUb>?,?Q+'Yx??VN?[Y?.kU<YCa`?5pT?BzggpuyaRR}8(/ܾ*GپR? u?1ϿI߿FZ?;L>8KXV?8O?+'n?"?!? ˄?(E?T7?jjE~?3*?17?%?|J@, ʾ9?Q?Bmcy|?6z?t?DH?$t?#Y?#h@%;??/¢??(?||?5#"??ߒC?Gվ;!> ?l?a?ڭ@!?3]@?>A??@ W?/a@]?3@)-@#@;@)4s??5?a@hI`@@aD@ @cj@r?٦g@_o@@Qe@mB@G@"AxA~@, @q@d@^@@@_RAHAA&*A57AHRSAӨAVAxAqAaA6:@o*@ٴ@p.@,@np@@)@ah@8@h>9@iP@f1,@# @_@cj?d@I^?@'ٻ?<Ʃ??־/\?7s?]?K?9 w>?vg? ?F#?Ix킾h?2B??榾b?5俒UJ@?Qx?Ͽh? Bp?)C J3PO?A?MV?VQ?eh3$a?B?VUǾͨ?E/ )U0?E*}WE?+.̾P?0{FNݾ_$?3lk0?"ܾ)?8 zSj?>Vᔾ$?D`?/>?\*?O~*>5V?܋?(?0?2v?h@)>?)7b$?J:?=پӒ>?,?QA7?8?x?SB?7μ?.4?%?$\@%#?NX??ST?Q@hH?D(+? N?Bv?л^??Y6@a&?@gF@/(G?A@iD?ϻ[@h@d3@"H@ju?׾@a@D@ A@@q@@#@B@6N@h@^@݆AR@cAsAq*ACA@@[A*AAYAZpcA`+A:AZAAAA]A9dA&\d@^@@}@!@Z0@@jp@@o@@/@)F-?+4 ?Е@eb?ę?&'?\@-?؞@"D4?ٛ?M?#"?P?"`[l`?!?'q_?zz?. ?1?a}?b?6F??07+KL?h?/?>H徴ݲ?f?@r@W?J7?,;?Z?"?(?A`?d?Һ? MTn ]4h1?#0?M̿ua&?(lP?@z}?L8\FQ ?7X?MuZ?B?!~$g,!|¾L?1[2?`ǴԿo?oD྇QX?@Fc>տvQ_\?*?i0?k?8ᅳp4?`UL?3e?+?Xa?(z2??C ?(u??Zǚ?Ͼ?\?ش%?5p??/?ͯ{с?ı?Bz>?.?@'j??X?K@%/@( ?~V?`????-9?׭>ZH?/? ??$?*K?k @)8@&B?P@{@]@*4@c ?t?~@ri@Y?@!GO@d1@@@ "@H @K@v2@+@fv@fZ@m[@@_AA}@@LAAARA NA(XA\]AYAjAA&lAYUAjtAZ@A>A%A4ALU@@@ @@!_@@}@/A@e@1@ip@*@'pX@&o?՝?چ?M?ӯ~?CN@&.?8(@{?#g?Ͱ!QA?\?Db@">q ?2X?Ѣ?k??`4??B?#D?@?LC?L?6X?? ? ?ƍ?"?*2??t?(\e?2:S?#V?:KN?>샢?F9{@8~Of,Jޯ?S,.?_zوtL( ɾZSx0?9Z?j??*&?ѾY?.u?ac?=>V`? 7ھd8o?/??';?=Aj??E<6g?P?"?*ޯa?*.<̾~F?u?c꿞1?aַL@'|?']Z M?>_ת???p?08x?Iz#??ױh?@?2t?@0h??v@+jR? X?ή;@??P?*?&o?ʅ@+k)?;;?Ĥ>-@@@B?ב@0K?ak@,x?ǒp@]@@@G:@@DAv@ӿ@z@q@_@v@AУA&w @\X@@A gAʼA}2AY݁A{AilA ALAnAFAGSA\Am80AAX@@̛@@@\@n s@*@dTk@e%@Xn@eii@"Y@@-:@)_@)[@0@D?Έ@#=?Bv?=[? Á?T?Ġ?)_{(?;z?О ?Ӿm\?J6?ж%?A>s?4*??J&@!?U_? ?7@?C?,4@j?*?֭AL@*u2?8w?*U.R4?T?&̾M~?&f?:[Y)?ֲcj?!p-zؾZ?9?+!⿧X?EYJ?"tz?,ʲr?Ά9?0=}?dh? v?=]@?U?-(?[?y@,}?! ?Ƈk?6??? =?Vp~?U?E8ƴ?4?g>?'@f,?5|?sb?ԟ?j@1y ?NT@`0 ?R@)@"k?0'?Q?$[@`W@@0^?@W@A@@g@\p@'AA&'A @[@?@ҏ@%@A$VA6AZA8AM_AZAGAJAAyߴA AmAWAjmA4d6AhAAVAS@q@@@@@ @or@f@@g@}UK@5+@.@]m??@b?c?ه@eJ?ld?@&@%?٘i%V@X?@&#?9D.0Nz?* K?ѾP?%ZN?8侢??ຈ?2?֑?-Ow?V4,?Ҹ?v?*\??B?;|?T??_ԾG? JX?U\?7?F???á?̠k@*'@h??ӂ@(6w@f@d@]@>@3:@z@`"@@М@A5AEAAYArA6AA8"AwrAZAWAuAI6ADA A2AiA^Aه5Aa A¸A/mAk=AAI2AUA@y@K@@f(@ @>@1&@o@`@)Ln@@}z@c_@(Q@`,?x?=7? ?K@A?ph?(V?m?J?Dp+??'?  ? ߾?ۓ?4:?=8?$?٘?"?C?!)?(̾rgJy?կ%? ?C2? ?>ɭ?f?|@)ʹ?$>>s+@"H?-\?$?wy?=v|.?c ?f꾔RXj;V)?Hs6T?)z\fS?X=N?ٲݾ55?5L? gy[+?B2?J=?MO?29*?*?\ .ư?+?,?@{?Hjk(T?G0B?F?q>N¿ž?i[-??U![M?9?N ?M5O?R_v?6?oP? ?.*?(n?Z3>O?Ɲ??%?U?E}??݉@^CuY?v???Rf@-?WE>ھl?a2??̓\??P?R@+y@';?d??@$k?ʾS?$?Ή?{V?9?ʵ@'d@*ܰ?OZ@%@)@#|@G@g@og@~@@@/@@Ս@A'rAG$ANAAVAGIAjAkwAFJ\AYs/AAAAxeB5B>/BN B9BA@ASPAGB )AAA5@0 @@@ @@cb @]1@l y@)eO@+?e@I?@jo?11?ӵ@*@-Zgq?o?@?y? )?@)ڭ?`?;0?[?źp??;nX?/a>5??n?G?Чu? .??/ ?hy?.h4c?WG??'I9~ᄎR?/(?*$?9?FP?9#?߅]?'? Lfr?Ltuр>7`?$;m#{ݾ^S?Vx?!ӾXlA:K$A>4?+־#pξj???.Dı?4?5?[wj?=4|? \??0>/2پ$4hey?U -???x5?`?fo?)?|o ?(N?Y?X@BΆRA g@{@,WȾ?%ը?JY?#9?:??`?ެ`?̰?5?b?s@#3?$v?K?n?.{?~?@1N$.@._B?ٴ@,@?򾺓q?@g@f@,m?N@,J?҆?=)?@d ?(@7(@cc@`@D@gz7@̛X@@@qA(TAG4AB iBetACAG'SAjAA^AAʈBA̒ABYB1aBYءB% AyB|BBxB1^GB;AA5A@ҵR@k@j@{@͍t@.|@c2@-@"M@mgm?ׇ9@/?%@i_@?9@i+h?$?p???./?H?9?0f?*?ٹ??+?\?"|? ζ?T?V?4?.. @,H ?$??B?$?";?Ly?Ԃ3/*? 6r?¶?-?@+@*?H?[,H?ΖJ̿:ԾWSƿ,Pv?P V>X?=]ؾ?*i(@ ?8f?Ѿ:?=[;?⾫?)p? FC.?mC^?G0>R?0pEg?6q?6?'?=-?(;M ?@P.kbӾAK???27c=?$*?B?>?/#??RB13BtBpB,Ax"@-?Bmf?Y? =@+-? ?*?@?z?#O?)?>??+@)?\?,x@af@Y@#ǎ@$@&@ds@#?̛A@aǿ@Nid@@k@)@:@AVA@ЁEAA3JA|vAAA}AjAwuAAhBܟAѧBBMB7cB,B"RB)9B:B B YfBB>BnBFBeA@A8&@@B@@@vK@@&?.a@h?@-D?4@,Ų?@pk@)?۾@d4?Ю8@,b?/I???8?9%p?ؖ^?մv_?F7?[?C ?D.Ծ'@/?n=?v>C??? '5(D?4?i.x>ھg?j?#@?BP`]ۿ ?.44/?AS>rF4Rx}?X?=(@A?@˾#ƾx l銾[?6?0̾Av?5.?B?e#F??D;?&5p?ӡ ?:3?>6?Rl?G=?3 qe??W??Q?*@mA6ƀBiAf@\F+[?]x??VS?ȧ?sd;߾@*q@&?p?m?Ba?۰\@)ע@)Z? \??ּ?ӱ?ru?9&@1?α@jW?ʏ|?@?`?@n&d?؟?tP?yj@b/@ @m@>7@t@%@@@@M@@A&AG AkAwB2 B3ByBBUBNB]B&;B!ƙ?.2`d??,??,+?X)\?`L?B{91?XxgD>?4 hM7t?թ?J%;?,$ؾ(alHmF䮾 ?AptT@2)?6?4^4\?,O!?,@2j?Ϛ>;T?).?'Yn?ʾ澢|?^?^A?:8?f?@k?JǾ?IV<|c?CƯ??8$?=?ݲ?<4[??2|?d@*?֔?^4???¼?g3?CP?v@0?5o?Ĝ?(}?y?\@ =@#?? ?0?v?S9?l>@(6@'?g??K?@g?ѣ?o?y @*#$?@+4?">@y@^,@$(@@b!@dU@@,@@όx@=@R @MA7}5A&:A7`AW*@AyBBRSB)Bf'BMBpBBBưBBBBiQBRB|Bq}BMBtA IAxAF[@D@}}@@fC@uM@l?@co(@h?f@+@)*U?ˈ?1@Y?@d@*c??ЕR@ }@<@?D?W^?X?B,?<@*j??/.?>4?~_?,=?:@,9??.@/?1?OF?3?̪?7 ??@?ɑVB +z?X?%?C*?ʊ8?ÖQ?&EM<?_Z:/sv ?i}6g.??/v꾖C^e迮J?aB־?P|?N :5,`''І x>^I>?G.c?v??W ?_)??I^?.?){?gp!?6?;?.H?XMľ??-??Y?҉?ֆ?z\?[оA?4f?Ͽ5 @P+?"ھZ ?:sq??2?\?J?E?#쾔;?%?u@,a?Я+s? E\?E?K^?jg?T?T!ݑ@&3?ܨN؊?wn?x? ڿpq?*,:J˰ K?O??9s?8?A*8_lZ?(T6<>? ?+?N? Vn?#QdQ?-R?ږ?.I?ڏ.R+F?3ɾ:t?1nľ? ?Ԯ?H?@?&о!ǁn?0?f@34h?;u??v?3?FV?/??.?F?K/.?@?"?Wsx?)1J>?j+y0? ?'E?8(C@,??=3?0?#?Ń?@/?%?4*^?#?H?Ɍ?F?q@@&۩@%??E@)@(X@$@:$?5@\S}@k N@/mB4@{[@(@@S@7@Vw@Ҷ@(\A% A7lA%AX==AF~PA{/wA`iA]BBBC6CD5{8CC=C.ȤBB_B%B>ABAA@:A{AZA6Ի@@+@ t@(@@^x@\;,@O@@c@!@eG@j׻@aRM?V(@.!g@dע@.3l?R@'ҵ?2L@+p?ۅ?&?PI?P ?Йr?㾌?,"?ܭ3?;?F걾c?ƴ?,U@*v?a?Ԩ??',??)⾲Ҿ?*?-&?? >i>?>I?:(޾˟?iq? g`?+>3@z"?)TM/?JV2,Z/dWJF^(???>Ҡv3'?1?9־A?,<?O<^hy?8?9D?(wf.8_gھxVh?=T?'i?I,C?*1?:U?6˚྄.&?/}???ͽ?{e?Q`ľƻ?7?J??I?jt0J>fE?O'ģ?*?q@/?ں??MȾ`?v?#?8?>@,A0?C?H@' y?䁄?5?3m ?pP??ɟ#?A?j@ !??j?@j;???V@?̞@i@d?;@Ae@ɲ@t@S_@$@MjA @˻@ĦA%\AG#AHLQA6AZ ?AA.A2BuBCclD 4EiďEiƚDCLC_ClWB\BavBn B:BA+AQAk!AyaA-@%@+H@@<@r@as`@f@P5@lQ@j @@0b@,@?ҦE@&@+:h@%?@լ@jI@(n?h(@lf?Ec?*Ł?5N8?=?.&??jF@(?ǥ?5P2S?+j#Vy?A?v?Tȧ>|㿪#Fy?+Hɏ@h'eL?6k- ?%͔?l@?; ,?1zhz+C?dS?'u)??7dP?'6xr5I?*(ʿ(G,?2?00k ?5g?TG?5ž[G?GÉ?Ar?!?YDz?;?=? 2?%>S `?۳Z?3?.? ?Z?Զ?7?'"硾K?2 ?ZԾesX?`?֨@+o?'I??$?1?BP@0@iQ?,?`?I@Z@(.>@&@%@#K@g02@e@gx@ +@]@`'@=<@@@/@m@A ~AXk??ע???lI ? ?">ߋc@?4&AK辷%XI?A͂R?)\1`%@.z?7H>?Ae?~yfnq?>&Y?4?55?N?@'?$?!p?1+,?#ћ? ??:?_???:e?4? ?)yC+6?6r?(?&?"a?x?Q`j\G?/p? ?<|b?.Y?p쾳%?+s?5gNב6?"@%?1M??ߖ?CB;??#? @( ??h@ @"e@&?@#@"4,@$@n@&@#8@(c@#@]_@@c@y^@&As@@(@A)AiAz DAvA|WAlARDA BFQBBS}BwfCV\D۞EiǜEi5D(zCnC BžBKB-B)B w;BZeARAOJAAWAr@)@@(/@2@b@h@z@j/@Me@p@)x@g8?´:?ĥ?j}@^^?@-g@$M/?5Z@@ S?ƶ?dX@h @!?3@-j?ͯ]??;4U?ʬ2?=v?̦??.?Ǥ1?ٵ?S5?g?:?|?Cm?-?(٬?K?Z?<?@?{?/ [?ɝ???$d?&Ekr> x> '>&aaB=(>|?{?>bM>8>L=Z<و>)w?'AmA0?EH2?Z>Rfh> ?_?"K>3l>,v<{PFH7L=F=Arx\>)=M>+w=J=Z=s?#6=>=bx"Rr=d@?:>CE?C>,I\?[>_#{=;V`_>9ֿvnr?i>?]C=hl>ѿZohZ=Z>S=f}?pt?䐽Μ=DZXpվhv4"뛿ChH=Ǭf??svO/!W">;HB>"n5=Wl?Ħk=r?a>m 2S~;h>Be? =y?J R>J?Rj?`}6V =!?D?{>>}=7X鮺=i(>}]P=}=`>4fD=jj&ä<_?yA>>r?>U@/=}T>9ZY?ۿ _=\>Iiv?iPC)'<ո=l?u>qK/>"UA?otB=*=􆾜>?g>4jg~??.T;>w6=>4h?v>'dD+_JZ>4|==9Dc?=޿N>g_e;@=?# ?E;>.Ls,?B@<=<_hX7dzF?f>m}?SSjA>g>ij>)_e>7Qgil>]5a?'sN@K>>#춿]T>i)ؿLk?E>wV=t_?&5=Bx=_0m >-9?At?j> ?^[?ݓ<?>o_?\\f>8Ͽj ?/8? 9#="<=HaT=È?|kk6?~LP`1=x?XNV=5|>-8QUtH=nt=C;Ǡ=G?t1?i@L|>n?un?e=??=&>4=.?gxv=м;R=;=t &=T?X}?L>2y=U=BHL=;?*=ܼ;t:a`Wx? 0>1cD>N>8 {?'>2d=f`=@R>.=.N⠿`8= 8.z|W@=d=v2.?ff>)H4m?<H ۀ;<5@?2=zgܿgRaY @`s?M6:w:?.|+((<"܀sD[t<֓X^?褿u ܿX7>#N?^]K=Gs?\?s&p)>mVGe^^EA>P(>yR=VA???־kF䬱<ЃHC綹??{aPo?p>GÆDULY+>>?«=H= =?*BoVS4> l=u>+8>8A\:=.Y>l?9 ?=ȼ=xPוhmu>HJ>5ή?>"b8> u=zh=ˁ?hſYs=G=Kp=f?v>) ?Ss=Z?aZH?{Sl?\?zrK_V lR?Gf$࿎xh?Jƾh< =&?zi=aK4=RļE@Pk.tW>gr4>ݿ[N=J U]zP?r=^=?VŤ??^8=k kr+=bNeC>݇`=!t=s] dc*@#g՞;;@`ҿeD?p>ý?r=Qtx?|۵@g@ 迂 >#J>=/^ d>s< ?Z >p<;:쿋3v>uu->> kN>=T+Τr`P?]k?X=+T>  ?u*C'Hyؾ ࿌(~ f?3v o.ub(==fn 何3$>z]>L e>C$1g= >wbd>R>n,?>#>V&;>&?x>F `hdTq)Msy?qA*=Ȟ>>h>Gv ?d{$3>E2?tF>+J_F>s?k>(Q7=B>@ѿx:>Z-?G~4?%i=Z>U=' >/=r>V>S^=a`=r<Z???Y>>ȿih=%2>=W=[e<>z?=:>IY Bˍ=]d?lQ>6@?v>>j?=vSpf%o.?t*oT=ƙ> ^v=yƼ+8 l> 1=? T= ž0EZ^?r??+J@׿X`U;@J?=>0c?I76>>P0=ֺ==BlM=$E#;ǩ`>=TDN>*U>@t?/X%(j eS?xοOc=F X>B/?;{=N>x?r{ S=V?rĿ+`"^a,?W=4V4? Cl$*>;X4=콦? v=?az^a iͷ|Nш=Ws>=͚>t+>ϿJX=qbpVաiJn;;4>wָW4={w2>-=?>$?Wٮ=?wrt8>Q?⽟0,|i>S?j=!jZu=>]l[_>bYB>4Tu춿i&f?Ŀp}g^*>0'~>am>6 w=>-p?Y?|mpM?%=`?-ڿ_?>*a=x=ݝrV]=e0?V?E>pU>r;P'>|>XRĿneO=J=*͐MۿZoO>#>߸?hKT =#G&Jz?*>^8>H=ȶd罿^ZJ?=Qx=t>B7Z?_=>R?²>}˿=V=jg0=0?<}?B?㜿>>V Yd? U>Zrs=z?x> 7X=d<J g=:`?j=/>t_x%>o1srM$BV>cZڼ`=I=x@6mAy^wu= POi?X=⢎=Xl:>=>$v~> ?D=’_=5tP=RH??=Jm4>$v@dJP]G= UVrۨ#?}s"i?{Fd?7пu*[H¿aQ,"Oߦt ;;C=ym3j>=JZ>{=h>)>c㿀[a>Qh=>>?>VߴMv|>2?W8=jn?οMB=bYTlH=2,~Ru]ӹ]> gl=?@DA̿_FV=JY_i?QGR>?ſKgz=ſ> U^>@фRF?=}yF?>=a;t@=<>=+vo~=.T?s<ǀ҈kw^>5I @ʹ>CC?F$0>\thKT>1@>*RdĻ# <=PԼG >dĿZ|=ؿms?R|/~>K5S?p??7=MId=?z>=$x\S?gL=> =BlU?b_?,=οcM>C\} v;?H>/]`b=뫨rb=dqPuf+,}?Egz=7b f$>ِ>DY6ؿt=2m=~=?+?Cg;`?;~?ܿzԾ?uqk<>T{x4v>=o-Y>օ?쐌>8ca>1>=6A>wj>G}=f<?^y@$?$?_1>yl>>c< ޻?1\>]'l=P0=S?r?X@-?]T=/>,Y>>Tvcq=΄>^6>u>`j?oV?.?n?}#x򂿄>Ev[=)rL> ql1>JCW>op=<0j=?8嫿w4~?\-R=֜?>>½mBb?=/ݺ?}=(?U =@L>-+=apcxn?n?:?t^.?^=9l=vf35?y?m ->?z "=a[=hN|>)=$=4h *p>yUF=ױF,x=9ɼ?|{@?4-,{X7`=T?.0 0>H2?U=?`>;?s>Y83J⽆Ud<<)-UJo??b>8qN}8j5T\=ꤿS=F?Sh<0[<_9a?ݰ/(F?liQ?>xGd? @@B¿q6=DUݍ=Hc>Y>Depr>< = |=x>8>CI>>n?> ?>\>wxP>*8=(iA6W=>>0Ư?bп=\\x>" >#=03c[=0%> `=a>2vN.ꞡ8)M8@>!$K>Z=P>l<>;??p,FL>s>.=>L=>Da\^b=LAf>,s%AԿh=?&?jdZ?O?%SJ<6P=gVV4=>>ʰ=g!u^=sP>F =Y(>4Md>?>hl?|<1?^>=6> g; >>WC* ?n{z=пʿgw> V?Va[>`Hs>'P=8?ο^Aed3=Dbm<@=L ] = ;m=Z̜rWa/gT?z)=/7=@=,>[i>foF>:>j?7~>n< =^?[)@=lt?US)=@>KߚR;Y}s=G v=n>UÓ=F?eM,?j܌>L>t@&<( }=1l=0>O?(4=~ȸ@[n?|w =/PXB; ?gU>SgHmX?UW Xl=f, пG[=`rj2<P?u>h_a>P0>Ę?4>C.?>>}.yOh>EE=E?p\D>4?=nY=+>*?g=>J=<п]=շIV>D`>>U?i|S>Nm??>|u<20P?=?%<>zC>>=>I_>euWZe==,hk>Vbyb=?؅?K?.?ВĿws=>Y=K>C>n!?+q.>1ZY>J >Q>8ø~CH?<>&m?`=r>C>q=\ܿi<Ĉ@>@-@==޾>8[ƚ=seXz=}Z@B?ff]?y hxͿS2=<~>p p@UDP>}^L>_?7H=|}== 8 T=T86T>T <=@V?;_=$=Jڽp=n2>(=񕨿a?)==}^?tHfh=tK=?(e<˿@i>?>@N?c?PTA?=b>w=?h=P>~q> <}0U [&j==p%>U>|>U̾ZD|<' >=r= =C?>]:t=ி׿z}%?t >c4X?n??>JL{oſQdP>CH뿪0̿>&:jN?"Rw 1?w?kY=?Qy= k>>{lпZW?~TP1?5o>.'oH?=z[ V@> Z->X??g)?DWHg?O2>@&>k=!==Ax> T =4=+(?z>>>f jUJ>6=x=?f->3[,nlRfPҊP>II=D?Gcx~>-ҰQO xh>=I*?n5?l>L?\ƿ k?`as> u価?^.> ey?iG;?o!>(=kؼ>ǎ>NB??BeY]Sa*:h->I&WkR==Yp=?7?c?&D>'=4R<>3?sl>=7Je?(X? :=? Miʠ?i?[V`>ubY0oj=?t>Yv=T$H՟ 0=p=>{*<8? ]?B>4IL>=ϵ0dժ?<8({>L>8lc;pn=ךuvq"t>7Ix$t=קQ?>Q?w-hoX>CZ?˾a=>|M? bWHLxH/cqj"f]=ft=q>?=P? S=??|Ӽ?/?Ő=&?Xiн4ٽi P>^5r{5??>7>C?bK=9ؼ >i!<$X =X"w=ʿn?p;7? G4=m?>+v?a=R?Vx ?Y[G?=>"Hοa}~>lLsKU=*?rf= CRm==+ =0=x?p=?L=z=">:@}q\<ؤ?cpp7/="U<=-}ƣzbϼ>>'z|>_K|?X>PaafGyE=w>A9=hR{>$LA==d࿃p>ւP?X=S>Uhi>Eȼæ=qYbw>|3J#>l:k>Xahb=̼?>(e=v(pH )-g>/DTb zr>)>X\?=Z\>!^>\C=%=ot=r>=.=gu+=\;~~hMa=֫r?C?k&i= ?U>P=[?k\>&kΪ>O=M[ܽ@ ]tg=0>0$p]%@HA?p=\ш>^> Ծ{Nο^F>)?Q>ͪ>7Y>'(? ><> ?72?^<<>|>9XO=>][x@?w ?!?j|? =[\vkU]d=wn=?\Pj= AQ$T/h=A=[?^LL>7ʸ?C?=&)> <P= 6Ŀx9=߿> ,Ŀw>+`=*8 ?մxJs?? >Rѿ? =Z;6>H>@pVܿ~>F=ӝ<ː>S<|0~ =%H?ke1==7pz7̻ wv}> =6PerY'=eϼ?Xp =b~=<>3q=* hN#Q;рmO?P"?n7<@?t5+h~!?|/.,?b] >D=_J>5(>9>,5R=w=?z{??;<#<><-~?=>mq>Yn==?5/lȿeߨZ~>'D> }=o il,d0>Z=e=6q?c?lY>9.3?{7=;o{ܾFY@=jB<2A!d>R=aZ<B$V?=Z6he@ k?O=X >Pl=gʄ= >X=O>=>!ǿpn<`lQV0?=Ģ=;>$C)B b@f˿]CFwD>p?xNt>1H?d@?UF TfPM=zc>A/ =X?}_ph?l<@>K=9n?T2(=o\<0?q=l^j?uo?6!2Y?w9T:=ޘ=`?~1?'=>i~d?[R>k> .,?>!`i^='c>j*=<0?t?hߔ=;ɢ>)?`Icx=>A?{ =' ?X}!<0;Q怽>R\=jh=q=B;?۽_>2pF #?L/[>]E=`=л:= =Hؾ???S=9>hӼ=c">ka>H=:~>4>=Ў>9 ?HAq(>HԋY^?z?5>+>h>PB =?=Ә?|qM_D> g>R&=Hca]>$axQX?S==p?%YZE&=O=`>F>31?'Og"hR>i>B?!@X? 9J> =`>Qz_<0;'&B/A ?uZO=p> dȿȼl=N?}=>>=x>K]EW;@=7,fҞ=,0=Ҿ>}OI]k8>?*ӟs.&k@=޿A˪Bc?I==^b<(b]ـ? ">0A>Kn=Z>H>?<[:>U:$Jl?>B?zm???\k?y%wfOG3gl==)Z o>e~0Gk=ZV=^<~t=?C=6=Rt-ӄ?eh><ۿ"8?=/M`>&=(fM =ώ=ᒿg=O0&l?]?9p=mP= n>h<"w= X=^?zuj=bb?ʿy=ZH;d3vJ?C=Phؿci=L=͇N>/x1ì>p6?r> &?6QC&K@Uc`컫?f>>r ?^1{G?7ſXnD??~?tXxN>3鐿nS=-=E?{??T?}`><،>%(?P>l_>ye?F>%>a '=ϰ@w~=L?}},n#^e?0>>)>%[>b1>s,?}:>j>j~kt=8=ڥ2:ނ>R=K=irT>zT<='`P??10_@~#ua{=:?=>\\d>"r}⼉O{=ڣpp۷`|8GV?n?v8`=u(>yz=>Bl>[?Q==w)\[Ch*̿EBP>* l 2=.%> ѿH]@?mZ=rj?\o.?~C6?c!Ur?u2G=G$>{?7=>?|X=z>Ogf? >[=w>=M*tU?X>8??hnRJ=]~==X?w?z"?=\d^xdRlJ=^ xӺ>>=e=ZX>=XpN&?=+?=T=D+Tr=ÏN@!daf=h0?ά?h>~Y=l+n?\qT@[d=E=@! `>X>?xtW>*=޿r=j> oPB\c>T?rS?Gw=G=}DgP=@?pF>>2D\N >Kpn?Y>no><<= $>l?paM>3#ڛ;&>%?^=s8rf=f;mMS&kW=&hH=P >?wsa=愾:09? -;俕?U=ǎ}N>/K =q=@?sufc忛 ᥕTl?M=j=WywOp>t"t>=Ľ

e¿[{*?O,?wLέ?]l?q>q>LL>n=v(y,<0 ?q?&Z?1H=Ȑ=pX;lBM?gifm{>p&V?1=*df>C >AR?E*@7?$P| |I?~bKb>U}>>VHI>SxԿ}K@V>G%l`>:Y?t>$RjX?Qr.\<=h?N>ҿM*?^&v.A>;x~^X̿?A,pib5E>&8Կ_̈?f#?^\w 7=h0c>`ض==d>a=Cڼ@?ⷿb>?Dn뢾#D>^>m==ߢ>(;>f*>$?@@z@Pg?*>,!=B=J??@>?:=M= -#ŕ+[i?;e>5[>]O< ]?x?>iDhjIEؿno1=?;=4==}=H,<=oP>.OD?ڿZ>j?ԿZӼ>E=h6=>?H=Ne=.<?%=b<?pba=O?m>?>5=Ŀ~ ?B=D.,?s?~tvH;%!=Ϯ,=ӂ06?ǣ>!R?h*?|h>*ʗ?nxa^I?y30> %2>0=_\>7ɻc?`ʀ=˚> _>Qw=&D>J8D>#t?uk;1DW?tY +pk_X?kE??{Rm?w=fؿz{kd?F?6=E|Ocm?$!r?Iz9z(]<=B??l;?*u5?TNd@>{$ '?<i|dp>=>@ nFk.@} >F^?&>JZ?zL>n&UX?7 U|2=ݗ=yDD?g=9,?x=K? v=.kݿB?[`E%bKa;vP۔H?'ciU?sN=>Nvbk?yr==$`L??$7|Zr>Y6+< XϿ==;'H>Z?%>%}=L>H>P=U?q uRo2=sdHo>x>*&=-8>6 j">-6>L?.ހ><<2O?Y<#kPX\?dE0?|G?hLf>Uq=L=,Z>.?a?ӿ|пh=Gp<+??{k#5Z]"e<@<"?H??:?Q?uN??{_U+r,57V>gw :?O8=4X?󊼃={?X>=*vH?,`AT??3!' ?2{=ˬN?XW>h?pO?f~g?4?w=oAm=3載C@=p?u L>0ֺ>Q=B?u?u=6=kȻɠ?ͱ>T , u?p؂??(gR?>>&>k= ¿G[P>`>C?:>o{=X=A?˪>0>M"={,>?}>^ҽ4=/8?:`>sr>=4> ><>vbݖ? @>=}+$=j@N?Ɂ=UL=k?UJ>?1&=thD+2=]p=(>sn`?e}< _R>2=ɾ=/8=ad>4==cj=d>ǿ=UĿl 0˾5_Q??o濂r2S=kҿW迄>Tȿ_4?¸=ʾ>>k?<<+= =u?if);π=~=\kLD==i m?rq\=ꌪuYpvi>s(%`v>2u[?\?^=y?BE=>vjޏi?kzoM>uf?#> BiU>%mxNs-#8=?a=7W?*?3C]J^I>MMx8?~pg@ =c^m:>wr[j>S0?v.= =6aȭ>B? =0ipbHf]oMpsXYc=2<mпRR> )?ǽwh?P=Uzߋ>Ӯum>l==ΖfW>A>+Y>n]b?> =v?0V\> >Ln>V`?Ad=U>ec2 >@=?>P]9>.> P%Pt&> o^?=l =Ȼ(?>k=0};I۝bp?%>@z=ĺ=Tx=U;`>sos=e?=>trFs=쪌= l> &=tnR=f=~>?5?ic?rBy|_>-Qi2>whʿ_M=$>`\=)z; &P-;Y@=f<>/β=,89z`|߿f"h>{=>6<5?=K^:Yb3yT>Rȏl>[=NQ= >sHa=?n=0> ?}C?->5 6O=âX>2e&?%?N̪=\O=a8=wh>Ly=fjP9R?Xd>4yҿ8U;>_?=sQ#&B =yd=:zb?]R?u,=$iy<+R?7H@v^;==]Կ\bW-0;?sz;`?>gg?p=\?2X.?x%>p?i`|ſ5>Ob=v_sh?=SU=Q4=| a>Wz>>S=."b?,IĿ?8?}Bp`_?=tfn?;;<)>=Rv?=@>CB@{Q<0=> ]@= ">_IP=x=M>Z~?ƾ;z> >=]X(?gr'=q^v=6nal==4?pha 6پ6>c~>-XnN?|C?@P>ӣ=5<>8?vO1>Y?M>1`; p?rD?sz=P^>U]?7<=-c~h>p۔>=m4W?U==?`?=;f>+^=Z?4-H>y=D_>?X>n =J<\@> h?AAod?N=9wJ>sb?pV+ =?Bj#vrZ ?~?r?N=R>=I(=?{D?>I.oXq7?>.[iο>J>L}v<7='>@=?El==z?]=6u\=#1=> v[MR?Qq={$վ4=Z>*?m==J i xv[P8P=l>) !?<=y(> ?p?8=lp(,`Vb =ެdG>k9>A}c ?]=>o``>F> .>=l\>`>^> }>yV??=rop>7]>+zAC E@]6>4=%?xO»?<%=$= =J< Q?.t\>9̼G%<`:A°@?%=|yP?Ui=( u=$=m =j?jQNb_`;*=D?5>g=M:==m>v̿URۗ=!L4P]ϿpRg}?7}=U^Tx=S?}!?g@D@>?m?w=N<*p?O=cD>=?u?Tv]Q@N=ְ6y(l>)=>;?6<}sN8=_> #3@F@=X w?cuH=?qt=?~'?x[<n ?\?4=,?w:ݽ? #@@bwi??Z=[ids@>?4?~1;?=c)伨=0R{c'&?>C>##s,uy<4 >/? =u=zOО=zp_<ѝ7tQz>d>U>`p=8>X^?.>~ >I>Z>DZd>@ ƿl=s<0?[0=|=tx=G _S>!=c =WPgr*h?U=Ǵ@di"<#X= '=`ex?4>?/ku%A@?> },6>78=H`if*=֟l?6?'XRvN?@=?Pq龿ov?m]=%?l>=Jk >.i_sa??|vN=|=W0==mo> ?Ps%J|%?K?l $=R?!=P&??l??M]??YP?KR>`=*== ?vy\?d>B7?X><>?0>n?F=r~?le?=?xeV|}?=x? =z?l^+@@>|tX@?w?=p=-d;@?u=1x?X"AL@ν}aȿrR=ֿM-c=aT?iÍ=?];^>P\;K!@=5!=@8x=K?$Yek=?HZu:>5ut!LA??u{H?uQ=>=z?vfԿtEjxҿ{>=.>?>`AlO>e= ֿR+=Ǚ8>+X1=`Q:>i=nH<=U?0=>?lNox=gc>,?>)|>H(?3c:M?D?=Y?hJ<2=֘R>mZ=6=<&?Z>s>W=j=:p?|>^(~<0?,D<94[yiR<;>>aq?/? <\H>&24:l?Z@jewG,=p?O=N>2<}V eFaƼpIߪ=U;l>5>+AP/mAnd=|?= ??76'_??nGU=k80?嬿MV>e->Ϳ> ʐv?ڗqY=oZBp=M0V8ML! _=;?o?>*>j_[F??c=?=>3u[t1izJ5j*?G?}kb?lP^5za>8y=֣p6?>0R=?ݿ?jsA_?j1ÿ?m>=?fy.(8qr?^µ?k?] ;?f}?$>7|lu?=?=xu>==j?f=>.S>u>\"HW?Cg?l>˰>Dw:E=V>_'?9?>h?=ѐf?L>_V1SBt'?|fkB_F?Wq?I1`> $?5,?zp>ܢ>5>;k5/=>B)A=YĿw߉6Y>"=?f<+X>o7?.B XdtP^|?>:=G>>??>Sky=-<#ـtd>Y`?py={Y>%䠽9>+þ?0 o+?[Dc>DVjQy>HL?οjJ=*?n9yaн=^=iR:=Yd?oPrD?=?o(Lhǀ8?z =Ƣs4hLl|w r[e?=BD\t\?v={f$9==O>{Z?E=o\>.K==R$Ƚ׃,q7?~=W=-t<@[??cĿ]> Y>;@=/<ؿfH_lA?vZ=?j?=H?xŴ??|+> >{s`<=_r=6[>|ziaTr?|=α>Xοp?9?Y^?ɮ>6?`>(ݯ<8>H>jD?> 9ޠ=?>6ɽ\#7> ?wA=9w7v@>ĿiVe?>!4?`>Q?|5x=ڴ?7h?Ը?n==̚=.4X?[7<ë>Pt td?pCO W{ ?>&j?o?|=>9n_#Ϫ=Ɵ=)t>=߁p,~ޥ<=>Me>=a=6?@ >I> }tG> T=W=T>0^ĉ=c')!?=?kÿU5>9zA_^E==PZ= ?'Nvfq=V> Wc?>! ˿{R=X/>l>CY?_贼$>o}#=r>I?{y5>=֡d~bY?#>Lq=M`@?.[_?/̿i$=>a=C=X ?¿P6LT}ƿ=1$j>_+UK!?zA?~@X?{1?Ge4 ==E=ζT޿.?v> ?v=F@[=q?q:6KYiV < V@n>)>\$YR]=>>񠽦=Sc^?6=PsyE:sa>ҿfؿZh3g?{?RkI>?Y+P6=T=Ю? ?1H?Y??q2]i?lI(=N@^V ?8>+>'>1߿^I?wuQ6>Q~@>1_|< ?=dI`v?m)?=*=B?X?y>'"=5:p=;fid?=qfr]u}⿂ >2= =l=ܔ6.=[Z?i>*T=!=?>0o?+ÿvd r>n2<Ͼq\yReԽY`Cn\?IH=dȿdj=PNt$??Ob"?Za>9r@?m>7?~[?*=(?uuo핿2`>x?h=YT >\Q3h>%ԺOTx=ORl?>i<Ǡ?P=ew<>?Aa't==fp> h?~ ?=zj|?x>?1?a`[ B=>[>,?m^>Ǧ=a>?=*=;b=Կb>=¸q>?%{== =D=_>4>=QN=E?@=苖>XtǠ?\v?zkyz?::='bXs?=z>g%F=L<6?rs>V=7%wܿmRH=˂=Th>xKCO=>)V?v@=h? t=?r>x < h><`Wc=?P=||B?v_ʿw࿿[޿JW==iI7X?v=2c =?Y&P^=6ܼ?BY[>f?j7{\&=T8=H@?%?i=p&#G8|?~z=$.?L@ۿ]?o_0kJ/d=1H/ ?<όjac ?i\C=H={ `LO=tؽ-r=־W s<0=[?L=l??ʄ?{?TxS> 8?l-=(N? bP?q#a?zj8>=zþпpN=ҲQ=flmS<0<^t^<)x=;?ry?a8vu2?<?ty?"_>Ͽ/8>=(P?{ֱ=m0>hFlS? ?s,>|3*H{=.?I?5"?j`=@?vt2 <=*Z?F>r=e=8+H=L=.?U?TOѿy>'??A=@=Nl?o$0H?naB?=^O0?>rD=޲[ yE>"v=T?]ѿfXTU;σ=B>y?k&=۲>` f[?,-#=fR=p޿c{?|w*?|i+ q>#>c?V:=d0? s?{4?=# =ο[g?L=bn=v=5=Tl=f5T>?3?`=j d?~=dq> ?c =8d`S ɿ i##>"۰=dw=l)^s= m>}g5 ?ռw?Y@9>moS=nls<ŽX=,Z>9{=nlZ`=ML=TL>'1>?+>eнs8>Sn5?u<j{$>;=:?@"S¾"Ŭ?4>D-Ā=u~lt[=3o">^a=0.;pH<'8=r\ V=D?q>s =$hz=JTj<6>XMPX> K?7832 o(=ߨLqڽ<*)A?=\`>&r=>Lt>.m=o`?+o?:>4yt>Z={>`|=>#֗??G׿sFF=:M:%c?=5A>q>'\?m,G=J@p=mHo$?xٿ^>.(=ֿzم8k?=r>/r=\?=:b<80/x@=D==sD,^=\? =m"2 lو? <0z:ak<>=ڼʘ?`;==vQ?=K=U= |>P{? x@=@ztX?>UB⿅7.>a=ܐ=X=8<2?AOaMh?<;S=EL<@(7+=ٶt=?#==<=x=\#>B?x!` x=#@=Qȿs5L۳??g(A #?|N?n?sh >OE`=&8=mP/<=[ઽ⣿t\??tW<\=A>C֨?՚G<>>>=Fh>?Y=@s=x^`=y>Tj=>X?ȾKD>OJ?U`w>d?>n=@J>-m?˗>]-?{Ĺ?,<==rp@>13I >rH=>̠r?3ZDa=۾4@t7;w?L?6s\hܺM=Ϫ>P?$>KH>=A=]0k>(B=2A`?aM>hؼ=t==>p?w}ͧ>(_Zd濅 8?c{?uT^?my8W^?~*=8?XSqZ>R>v>Zj?ЙU??g"?dr=p]{w@^eNt( ?~ĈwĿaF=>5k0l?Zuhݿ_)?U =[gLg9[?4x>&X>+^>>P=NmX?$->M>PshQx?=1ʀ=\< =p=J=| ?R(?J8> ?La?q~Yn>=g>1X)= =ֿKHa?zۥ=*?=J_$5;6,@?G?a\=?vκ=$?wO=\;oEJo>\(>+=O濟?=UШ>N?=(Q<`?bwzZi>VoT'??xla=FvrxbN=S?r<=DDu=n8tÿ9"2Sq>^>6yQ>3q>Nig>)d?w=NԿ]=rjY(푐>Z:e:yS??_=F>*Z=p?;B?|?I ?H>AL>uR?Sy@R?B==8?>C1[s=6=r>ED?z<h=>vd?ZῈ@?g+L==ca?=,?m=| ? &N=l?|z?.> WWcbw> #Z?TaF?~h.!d?r0?m<ć𽩜Lx?y>P@srxjv?p >#FhL??Q1?qb=#=渿u>rɿn>R=X?K> =?icH_>0EQB?>i??}@bOK =8=L-?eB=ˤ8U^q?JcY!0I?1T?M,G =>^`,}=0z= S>tl>i=P~;7=2>2SZwT=_>e>>2mx1=>F?>5??y>!nSic==?Yy>GjYSrEw"=h=+=3 pע:?r>F=z#=$?i0?l?_>?.y?^:=-lps'~=JPX>Ҟ=L>U>N'i<(=8D==RL>1X<=?o;@@7I(_[n=Bw?/=л[>&o>s&\K?%=?e|>0>WahR=bؿ_=J?F=|:`=T>j?HVڽq+??"?v)C+?Oښ覠S,rq?ΌaG=Cg==)m$>>ʒ=}0<8?Z?{??ht?x.=2=\H>/?'= 1?꿁8ӿ?0?Zh<>SN?t>@x?]?n.OD>A?~Hm۽eL?_~Z獿v\2?l(`O?u-?g<E|*l>}=P);㊠` =((j=T<=넿pl~?o{?"~?xd@=a 0j`/> 93t`?<پ.4>4?lE =mfu%?q?gQ}=xܾ>(D[+xj\?+P;Ah:X#i v?#>:D=xLRmR Ao>=[yhT]"r=I ?̾M>I?=F$=Ȃ_oG?>> e>1ۇ>a?3?ǫ?iI?|= l=??ldHW>3=R=%3Tc?1WZ=Z=Vuƶ=v<>=v6&\:va=0x=ڠ<:> T,|,> ,>=8 >!= `?TO2:st=g==Z>z=.>5> G>Gr?t=ɶ??{B=N><0?I=&¿q=_>?U<7HP<װ==}?t!>HW𼃖p=Q*$vڍjξ!>@?X@^0a k֮>2q? }?})xȽax= Ŀg"q>"nw>ܺ?G=?n7`˿^F|S[6DT="4lCjT?Z=\*p? t=Z0zP?fvk)=2=hG5,^ zV/pF?I⾽=j=-z7X:?|4DVI=??|GC=rHS=8~>1z?8`\wl?\b?R?t> bFy> a >5>R(=fh>Ta=3|?>CK?jS?"&p={u.yώ$3==;?xR>i_Y=>>9i>R-I=X?}n!~-=`? =? RBjP;C?;>7J?L?=;:>j6?~ =5?ovpj8?Ҝq?r dr=̿kw2?{>#?=ke?\8kL=9?Tz=E"?0?>*9f >?h<pxO׿uF?5$>[x=ްt=9=п|Cqtv??ſ>)n=6=|?D .wh$H>L8qNa@+8y>ܿ伩[?l=z?w.?p!u|[=^zh@lr=Vo=o+=۾10<)uY ?K3@Yu쾻=sP?͠[{sڽ~@?~\H{ js?|֌=>`qa> v=2J?f v?0oP=d<?mH=_a==?8=r}u28?jy=(!b?X<8?u0ȵ?f?(==|C&@yA@<ը=G?/=ݔ?}tzտ =]LƬ>oAk&=%YlX= ¿Is >_->,q?\KH>0n>r>g>Dȿp gJ>@> 䐿mo<8>}oDf^A>3Pd꽡?oH>ц}fM=h:A?B |j:F?nl>[?Ba*?u: pZ>.=@H?$ɿZN>11?=z=V?~+=74X̂??>07y?Q?x{j|r?q;gG?I=C过ÿTfE}uH?`8?v]_:hp}6>L`<=+@0Q< ==:o=*Z`1E>`t?Q?t>Löm:=;=wLjὊtnힿn$ Y=~?q|>AJVrCRi =? ׿w7;[T=X==TEM;k=HE;H?qX0><>ؿS?p=L??kJ?=.=¿P=ֿfy¿J#6?oHCD@?HlP??8U=Pj.ֿi='^ =>16cի{d3??dq>7Y?vgfؿ$?>U0< =:= =>xp.e|aB㾢lK=\>+䠿[?LʋU㜻u >~=!=|톪=̘ ?=/d?g<ћXk;?O?=5`%=Ŀ <cA5 H3?=}?@<>"m[?k=̾[^xVb=^t=q(==ahqiB?\>"/^>e=L=3J=$?=h=j?l'@q̿lrLܿl:ͽĿTu?iv?=F>M=&|?xo>-/r??ue-z?s?rT>t+=?>)>?49?Zɾ׶={Ht>EþNA?qp?7h1e{ivά?=(=?\ѿ>-R=z<x=V?{p=S8?M:=(h>r%=T$??5W?m^Wq=(?2="^,=n?Mg?=^=V=R>N8?X|>;?m>j= #(q=X=O">˅v4=?Ȳ_>.[x=A¿==R?j>ܿn]?6㼚V=?R>#>.+\>@L&Z=¬H#=~c俘(0>[>7>`=UfK_? ^>}=`Ŀ^_4?[IQ>?:=.t*~ϿQȽjܿjo"N= rh?Y?U?&wD>#|>9?W@=B@ ??|by{w> p=qH8=,_O&K?z 0U^S 8j&H6eRQ\H=Ql?W ?=6D>_L?.k=e>/=?Uu@%l>O^>qLl?z+(ֿ[H}= ?gD<"пw8R>6`>*>V?vg激̬R?=Z? <7?X,yeջHuf7 }P|?jEL2=Lȿ `=z?}v>.9O?R׿?Hww?)?QDi>}B;P?p=Hkm=n<ue Q??}J?l?Ǩ<??b?OɈL$?= N?b2=/N?)s8> N?~> dC=L=>0az[5F=>4;?P>+*=| E?rQ?Y?<;=g<%`?tW~E==cf?jHw'e=x?ّ>.J=bĘ`==YWD>QN= RX<|g?O== =>$:X=YYl=nT>;@@=<ꌈ=<(N032=b6< ?4$?=P`=>=rr爿? 8?qv=ͺ"?%?=w<@{'= |=t?XN=V<?+=¼=X;?_3?Z>$mXd?>W!@վM,> @lu w>F꼀;M&@?{?jv5 ??S=#`p(@;{<<`мp?b?E= Nx=?wHW?}S`2c==m`L=XB?f?7˿f<8=p@~+l! ?x -q?vs=@Jp<40.ҿy=o(x"s~=-?v/m`=ɕf?{G?S?4 @>=`<=·?/Ͽ~=H=n>X =?S~0= >w?_I?%R>ҋc\uA¿Hw=\}>Wq(=^>=<?*>5>>C꿛;=?qx??>W=X>CS ?r>%U_ =oho=&a> ?h=1a;QK_=РY>; =$KC6ȏ@1=/#Ľ! >U?]=޿b}ӿYQaݺ}'dj>?v?n`=.࿆:Z^c8l0p<§?kMd=y?.?> GI6俅 ݐ=~n_ ?l\=rhwn?wa=~X>^?&> w?!> < pu=r=N=enpvs?qN>b ,=G/h?$>98=\t>*E@= ?=3?`= ?fS?z=`qS=='>1[*?? >Av=3=pv>&[&緄@BN`@>G<{?]=ܛXu?Tb?_0= => ?}L<м:s)A?R<|??I?= \@?<x=hn? >*a=/Yت?c*< }:=:>MH?3@"2?>?Us?k??{+[?~?=?;>rS~h9>C> kT>"O?fVb>V> !">E>4NB> :fv?&hlgoO5!?~?x_7sFg=Q>4>W>K>-wiҾ6[v=0=hd=>j>??!=j=1X`|h&>=$WTa>*@pX?=?=Jex?>=D?|j?d)R?(kJ(?s>1Q?ӈ??`jv=q׿v󁽆>?AP=?_e?z"c>SR_> 3=d=@Y=}"l؋c<-q>Dw^=L?@?;<!<{?{>)SY>-KO~m`A=dC@}j"zfs=njfR9>޿o0wpS< ?j=S?]n+XH={4>gA> ?+?w.>ס=>p>I=7J?*ؿv=T?=r?t_> FҾp; k;G@=] ^c=m>ku=D>T> G=_pl>r7>dY<Ś> lY5h; >J?(w >DeuPe0l>'>vy`;ŀ?*?J=v=B?ؾ?-_͹>8+>6h}wT:U,?@~#=fz=R>4?> 4usl@L>@=ךn<, v>eֹ>}ջ=4=7Р>1r=YJ>kyۿ~=vN> ^=>>Ŀr?mD<9|3?@3['>8?T=diI>OIh>nP?D??x">=P>B>B`=(>:>3L>:ٿe?^?n>9Y*!V==k?S>ƕ"= fW=>x=?=̊_==MWȿQ? ?1>zx==i>*= ?ɼI?SKg>Zipzm> i=vX?g==#Լ@)=¢>!ʿ>Ex?A.?D"}W\<==F=wKW;>> t00{g>@?TZ=5?Ÿ?s?F?u=y>ut?r?**=,?6*r*<@=M{h?<֨<1?fҵ=XDp<2=n=`x>e>n޿ZȿRy =6?x&=?&>9?>"2?~_׾[j>8>"CŠ> ,rbel=@[D)E=_D>-3W>/_T=,=}x=.;ȑ=̽'Ŀ(i<- tzx<b.q? ?p> O=jy>٘=> dg5>T]K%y?|HnT`4=>q?=x?@?{0=Z?V;݅?qhSR=?M=={==ʤ^>t@B=ջn}tlsd<(!h¼ `#?ƿ=#I?zL?8+=;*`=?rX;>?iY>,\A=z<ȿvI?i>b?WؽgļA=D=L?-7ȺE?rt@=I(<Ϙ=?u?v kL?>'L\^=%H?_o^?l?~M?0==+tP=)>=W?s=0=uU$?> %s>pRf?w"Ud?}(?{Q|=쿇?yT=h23)?N俏`=I8<#(> L=b`,G=0g>)b>BXM>}J>R -\=y =$f,>>[$ǿp>%>TZ ?U?n׌<譸=?=[tK=,?QJ~> o=8T_L>D@<@>$F%|f=D?(WU-`%==0?v=8=T?u??Y?=y tʶ:??{=^(y3=4=:?u<>W<8=]g=h<@?y?=ܽʾ侃Q<𐿂ԑ> 4PԿcA!P[x=rkK̖=n?v6?l?j?>M|>hZ?;("?v?ؼ=*=?=@=5H? ?`tq?x^L@_;>K G=>=z`?sѮ>F{y?wx=/d?dӾq<-<@ >,=v$=*H=>po>-uE?(<?ֿn\?7(>O>/,!P=J?iɾп=?@?\=z?e?=n~?% o=y?lG,?=[~^O=RBh=?R=+JrS>l@?,?-¿_qܿr>=mD< Es <!=?)VY?=l=矰>gz>-yhv&?>Vz=[tOH?<=a4=خxë=\e=:<9Z>-IYƿh>蔧?z >(LW>!5(=*>5伊TOd?=^n?2?.?~?<=_ȼ%yl?)p3?n6<ɇXPb=x= 4?pM@`_9?x?姜=j=|= b8uCR<ꀿrߙ?wNC{(m?m>??qҿ7?|@? >%m?{?45j> 3?kU*@> ?FB-?\% BѰ?A"<ϵh(khd1l>5=(?zx?{K`=Z TLCa`YĜ=9@?0kȿx}?vxƿp?ebL=+==lTvbW>^?t=wn\?PN?5=?Gk.0=zi\?y#qP=&=4CR=Rz }Kd@;?zW ?t8>>~>0,>%~}U*-hs>U6+=`?>e=6$>~Z=P4?bL=.>B?> >>$==FVƴ>"J=۬=W4YL=?ݿe|-?ڄ=%J?l0r-x=0Vs|#D?_ ?>?>K==1޿q ?{6=v?^= ܼXt;@Q? ?_MZ=r??t?у=}>2ǫ{&p?,;=J=:6=TtX?B`?l=[=d ?Bh?v77{a=Pؠ??Dz?&|nl>S?幔?cf=q?(~"?)96?MԼ,?}?{?X?<="j]bY=? ѽJ?]pz0?O==; =u,? @z?>>WJ=y==`4?o3?0gi?>I4=N<$?{[?!?lsH=Ud`a?z*wgU=e+x==?sqsE[bA:ׇu׽\?=/{b=C>5/I<@`?߱?s_DH?m}<,`z3Xn\=0?qh \^?=(lJO=?l =u?i@?M==ؽh?dd?Y!?II6Opw@5=Z1ܓ?i,=6ڱqL`=+L> =YT ܿ\on)r;hU>R?c?'??Z٥=n%u]UH,> .<?u >n>J+l<>ik<+!> Ծmxf"?nkX=>X=ƿg=^ZsS>FM?;c>y?yx6Zd*?hd8?\=ޗ?6>7 ??Ǐ>c><=,p?gĿm??m= =,X=˾=z?iix>IGC< =.>l.U?@.?lA?话2մzL?Rx_u< =1ֿ\.=mf<1@>hB>q?q!?~?]6==߆?vq޼)?u@?D?v?x>3e?St?=?l> =t?Xw?Uן?0<@=Xn,k?lN}=p6=X_? ?.?uy?c?? > T@#!\?üP?Dl=̹=?=\|>ӿ:Q?gâ?J?K8eqh=#/=B>6PY *eHʻ@?<#??@Ћg>N=>ff>Jz?{ ??H>d==>? >'#=< >H\r? =#X=}:==Tlh ?=׊^ >J]=iPiʽWD?b&=N>В=ۨh/@?cmn>>0<?khؿSֿ4I>a=r#uȿo<@=Ә~1=W$%0`>@?z>0?=C==N~x&Qt<: ?M#E>+}?n=੄geZ8?ڔai?s&u?^=O?l<¯=bݿ'@?="J?_zU=R{T? a?~?+:<@?L޿w׷=>!n=6?h[l:?$`,>!)5r}2t>'nN=M?D=.>3?=Vs?]s?=a>3FkB ?>?^^@<8=a>?r=Fa<-?9 >?? ~^??rz>8>>M0 >H@u?LQ@;>]:WAK7Rp=Ut`?rFL?=to?z?@ k?<=I =?8&qrZ:=^=0ߨ= =?xH?\Kr{ `=E=?ٿn:N<?Qtl í>BLo>Rm?7?ɻv>XMq==|*0[b?{ۿ8r>^}e(>RNV?`?@tv@s=T?w(=r/ieWnN&@G ?>&*o>9M=5$=L=K?}?wƿWH;_K ==ql?j[;p ?'\?O2,i?WL{f+tI=v=~<{0==>[r <"?P?+=a*JX8?]Ș?,|>HX>PI @ j*?1p?dȽoԿ{m>~?߅?Pm9b~@J?s?)?L=?s5?|$?z&==>K|>I=Q࿌۽>ڷF; =;=I8ݘY?g&VH<ʱ:Կc-aM?9?r? ?+x=j=3r?o>T?k!>C͐_?}?,=?~3^?ſwS??q^f>jQ*?T=\"?Կ}=g.k?qf= = {4=Z?>'uwտ=pL,?$n?r?E8=+(AyT=ga>?qb?aV?}A߿Lv>1=f<=^0>d.h\?E`н?=0 @O Ɇ=O=Ji<@>5^~Y}>EdT= =(F׽=b $)2#}vi< <<`?b㿄N?n)=R?:P{@GA`@?.*?v>@< P?}~)?\N?tk%=<=:㘾?,?u>%?q*M=?\?)(?^:>6 Ӊr ;@B0>+;f?%?az==YE=)|sHAP#?XO3>T? -*?J =c2?k?a|c?T>?&k=̤<ۀ=[?}?K=y?<-mj??u?D=S?cgb?I<?}up?o?I?5?g?qV?t?ȱ ?yТcPX?j??hp6?! ?p.ip?Y?u?^?4`?|0?oO=žAuF?w=-\=]̿L"J`u=2?X=6?|=>3B ?nS?p>/-hoڢXM? > ??e=== ?[$>m_q>Gh>G? O\> ?> ݿ[-9?~=ow#9>/'??_d?_}>+?|"=h$O;aj.??t󒔿pK)=% @G |>*~??Q ?}l4>Q?0f;?=>0??>_?xA>'?|FZT;`?|IVMN?z ˿r?{t=T<0?mEZ>O l>=k?bfW% @ ^X:3<ɠ?Uw?w ?u#???$?V?l>'0=ƽVԄ@i6;.?y\AvM?]`?A??* Hj?w~?P?^?z`=ŀ̽B{>0s>%8??LuXKG=Fz=_>H?碾ժ?kij>:iPPGC>ӿE&?O˿_{V=|>4>t#Ŀ6>?y>` )>?{Y=Ȧ >8>>R?ۨ?_g>V>A>\@aX@??><1?x!?92G @?~=DĿq?hZ>=><ؾY#>!=U??y> ?=?z=>7q"\=e=Uj?%Lĸ]𷿆|??qE?=.(=?'?tw0=(?h?]??:>Q&d?fJ==0aY?{xK=m8=Zs=ax =?;=?]>iTX+?V?'H= ?XGn=Bd^*?| K?;=(>9 ο96ܿZ?ugڜ?jz?l>=P;ـ?w(`\??z<{+P?i\S?<peO~TnՎ?o((|\%_^=WPtuQHw>F}u54оR#?E?s?ݣ1?[W?^@z=l̽?i$?Wo?oT?x=q*?|3=ʧ@fl=&$=??+S8 w>CŔ|=ܗ>&e1sQm W`>:f蒻2@<=I= JP>@0=#Y=&?(;`=PH?}F?.?+?63?RܟPD?ֶ(wF[4gIHަ!иZiT?>bU.;Z\v?{= A{1?MM!>fH"p=H?=zg+tt1@p?+y?> 2W|ei=Fx?z3(W)>=>?;=1T`?2?F麽\kA i¿f@pj?t=b3=B??Fs=->t=ք>  =Ľjv!׾W?=>=$?8=u ?[,bh> ?|0?? =z)fB?0=> hj3 :3@^x>.@=DX?r~=tZ??oH>,>? ֿy=H?e[?[<p[t?L=R־ڶ?pս6P<?[|<>=U?Ju;` = PfN?6=s= &?7G=St 5>?wһ1=YbHp4??Vl?k]>#.o=?V<ָ?X.`@R? nJ.>=Xh[>F=3<}C=6?vSP\>A=¼==О@P>[=D?7>yx>uRVnYQ8<@>j;W>AuXK;?h=B= >V_:y t-?za?w9 >?C^>/exsD](=`?d?C?==8@?l=zt_8;@qpk4c?㈿N ?rcـ|r?Rd<7?Zu?1?Ұbi&\"?V#2>>\[0<=ސ=M?_[<>?qd>'ٰ_hhj?D0??yֽ?S??y;࠽Z8?:?}ܽۨ=UDt=.l?n=l=8>=3>_hܼ'=#켞w=|=j??}?ʢZHH?Pܿv=??X4uiw?d>m^>*U>jG=>x??P=9?s?1Q>!~EjGP.?:@,?= ?y4="=0=b$jp`}T?0c߾ ? ?v?Rؖ??%?enT=->4?Zf?qdпjI4?s!=m0?jBῃ=P?x~=ܰ== ?R`l=,/?cy>`?f>Ysοy h??y>8Fc=(@?l> <\H?>=f>efF=.}B @0 ?h?.=TGt?x<мؿ<Ů=N:U rؿ6Y? f6?}?=?IH>bZF>C H?ɚ?vD_>by[[c=^?=!1?J<=ol@;B#q"@}Xd`;e@>*?st=J8{H1|#p?u@f?dVT=؄u&޽5_=]X">?|??Pk?l =R?fN?=n=2?e2=9?}?_?nV ?@~}i=<=5?{X7=CzvLv~=̞""?}=~=L0?r~i?hZʾ"0s='4?q?m{#?p=@@J/?>!?KǍ?s~VY=M|?h?翋 =Π?#@<?~=9d=g?d=ݒ?87=)H?Z?\'?M쫽f{t,? ?3j=o#4?l=@.?>j>([)>?/=>oL>>)=d J8F?~BTm==C(=m_?}R=8?`vѿ=ܻ< >5?s.lhC+t>a>@uI彲;<> JEc==P(tx?W?> ?==TԿcю=BI`?(;Z=?`= LP}?WZ>==TD=?i?j>:9/~=x=@x?ڴf=CܿVYFRb?ڙ?z8X@]D8=uh0???b?!?l=:n^: ?J?<O?:h?|c6?J? ?#n?p+=8q<@Ɣ?Ii?{? ? `?u?wXx?n:߀@S!!A_C='m@>M&?x<1=?{&?pk? mon4;F<͢0??0>?:=1?Ghf yo[l= ?dP?=zLXP}ʈ?oH?uL4?~>ƽ5+NCk >0>?h>EV=Δ4>gp?)==n/xZQ~Q=l\tR?R=2<(>z~?5=?Pg=??wPp L?M޿Mo>D?~8g>~<ֻ=/;?`W?>:_U?U~=?l.?D? =s?jo>#p??r?}>>]y?c>:>(v~^`>$]?}>B=:=3 $y% Y=-T<ݶ< ?U=`_?п=M?].j?Q=4gԘ? L6ٽz?0>:?k`={䖿,U>ϻL?0p}a<؆=vr@ȾI='??W_ֿn]?M?vn /=2\!G<?T<@9=d=?}ӗ?=e0=y$?fz?0 ?f]?r]>? Y<-`=Lhh|?x?al?q?V*? ?yA ?=?g6@"V?F>05?򎊼r\?a?X[+ ?d=HD=d?q>/3׿NE> =HޜpZ>R >>HQ=5]>a?}0>C=P=?T>I z`?f>>y=Zu->V? |>,6L@l6⽛r,?x??(??=-?~>=e>Mr#?t? Լ=Xac?S5P1ɿF>#-cyb{pݪ?A7{aa L8q"=^="=e??=¿?zi>xڽӘ=D{H9=@ >Rx>ٮ?@.½"P=6b=='n?|uG?<wϺ>7>=6m>1K> r??AX>s:Ң?|LH=נ̚?g=?u^??f?xF$<\|~>P??*?!?T"Bxб= W?qB;q?a=J%P?U??zJ"?>1?s?6.>=<{@>Y?z?\R@-?&?uo>$?@H=FH@Tr?s$)?x?+ؽ4{?w;@)ǿ@??p?Rn޽tb={=SX?<;濅[?g>@tLox>Q=^VGf?ו> dvX;BL@=Y6=\>nG">)>V>A>Rc\;14HnJ>-@b]{?8l=骿*>]}%= $?{}޶>bnOv=iXkz??.=Z<Fp>md= >N"?O?n7ɽ?hj:>:e= GZ?v9}?|N*P@s鸿?l䶶?S3<=?y֌? ?yo?kp??<Zd2?x>?jgڽ/B>=T&?zvZ?u=?l.z?K ?w=/|?d!?#=W=$?C?t<@?-x?p+=:?ru?===|?\>%O>08i2?|2X=>n >BΤh>E>Sf==> Žl=¾=5?R?3==|=6R?{xp=Tؐ=*<|0U >"t=L=R"=؇>%?wz1=Z<ߔ S*L[>B>GN,w޾v?;?}'>M'=o=hg:?}?=RLnwM=ȼ u=hD=r%Z}?>@?u <0[п}35rފ"L>򡿒Ŵm?_=w?=|L5?tZ> <ƢH!T?e[O3=g0`;?o?Y;s@?q5>% ?.<9H?sb ?-?ؘ?IP=<>V4%b=Ic ?=s?ov>$t@ϿѴ@o?kg4?XI?}$=i<>=iܽ㗔?nC?U?)k?T? :=Ts)m'Dڿa0>To7s⾢>.|]=u:=b#T=C$dS=rV??$>=?=&?^Xv?g?{1?sio>t>hd>IW4=0>6x?=;,>Q:=hk?u?Y=?U=Kf?ڽI?4fn-C??/>>k׻5`}`ML?L=<>hп#?dֿ]>x.UD ?RUyx>I >)?z!̿l> (??eo_;\P@=c>+Cya?f(@IHv󶡿s =_=h=Ol?W?r lyn?g>I!l(Ύ?0??1L:!6~? <?D?}Fx==VX=?vE >쿆m=r,?TD?s?~ ? ?2?8X?t]#?;Π?tŽ]ػG`?gȻԘ@<.?q?|I{*=V ? ?TȾ?C=!ఽX-?~=]><#xlh; ??a? &H?ƽ\?xa?0?< =ZDe?t=Ἶ*Q2@B?č? l%p=2h<}|`9hc>oek?K>U>?;bV>HWZ=,d$=ȤAsPwhc*\ )=l=#{>#Sw>>&~g=٠8=4=4=d>(ٿl<ܞȿ[ֿFr=:?y?gfA?{*?ؿWm|?W="?b> GZ?M??r?pR&?Ձ?_@??Y=VƼ=7$@=%?`?)X̿VYe??~=Mh?:?h:^qoh{?ؓɸ?վ {=$?bsw?\=v?o=S.<>`e'=pz?{&~S<30|@U|)t?QD=s=>E@?s?jj=tCoj[?]38? &u?&?eP9?ah|?t;=_V辺c= ?whS?L’w?~?|FKxit?c=?@H?|?؊?p@8J??e>,?gA;j@R?hzo ڼi@>KK>Q>f? =>h=>]Ŀe>ዿzsK>=rti\?>q>Y?ܿDw>> =>(H=H=e@=l[j?~&>gb=Q;=6`8>PܫZ)?1?:[? 0<@?p=w> GUX??je =GX9f<> +?Q?hF&?w=b> 2?>"u?;S мH@ =Fv$vA?s?} >0~ ?ˋ?b?]>==ƙ? @> V=u*>KUfI??֟d]_`?8?N ?G?|˾q><=G@`g3d;d@=ȸ=N??o#?{M?v)=??Yds@y?k?3Z="> $r?eo{q <=^=<ӨlC]?=5T;@?7`>A(p?1<ŋ?y=1::',=ƻ >?X>#=}fL@V;}=sVH?n|~=?b?=1S$>?a?P?>&$hi?,r=&?<0X?U=<`?yP=T&h?нU?o?|z?q?aJ;a?T?i[d<'a@f[g#*p?b>oN>Ry>}= = eJ]=~<@<]p<䠿SZ?k?>]/>(0.n^c?[]ph5>N>c?g?$=c> s?C?\ܽ0=[b\?jZ> ?x'm=D=d6=U<>*5>@0?V?{տ=> 6=%t>gH-=Jix,=J?gX?=:`=/>\lH?giMl??vI =2?US%o??T2=/>Y=~=>??}&==J8?h?#?󧿃"="MI1?<f>5=א=-x?~`?j ?F?Y>w? >p> [?$q= F\?WۿP>T2s?sf)>?OB>!?wl^?t=:?ŗڽ01>x|X:=vN?9\>=?[?݅?=bEf<[Ԑ?Qn?}^k@F}?r?{t?E?!ݿZY?R?;?B*=E'?%~=>>1:ԅ;??@ E;~@? 7D?S<0?n`= \?zw>.!==27\ <KL?y=Y,QC$q?{."?>?Un8?u˿m|콨ؾq0?u=ƞM> MocL? =<?|*=G?q?J.> m"=ހ?B> )hp=7=>3轏\_葽x?hjd=ݝ@5g>\?)>`==4<[g@''.l<H= 'x=?k?e<$PwUN?b=Stj1`n='?>:!Y? >R=̮=?H?n>$?׿^p^?S?x6JlS(?b<… =,??z?W68vV>+RJ>P=d"?|6j^Q~G?e}Ŕ>?=??њH?t(i??lK0=y0?8?W?E?w x`>}?k#?r_-=S?s=[輱'=?c(>}:R?~u>~>GQ=L=a?zڧ?@?=-eX>F??wV_=G逼P?Tʐ?񿟽?L࿃t?d5=?~l=Xu=ɀ?}0 ?>ss q%B;!@7*Ô?pR?s4@:oZW?u?`>pNLLƼ?m׿tw=i 8> ξ}>q>> Wƿ]+M= \>C> i=r>$pR y=|h:=n?>')>?aj>CXf=x=.=kp*xQ?H>Eh=H<޲x=,풸>G?G?w/,x?s=@ ?}=/"нND=߲C?u{U=i: Z`>m?t4?pq?:?n?t?qj?i|?tls=_?lA>)B=n0?V>VYp@?0g0-$?p?| >^=;Z@?Xt?kh?Y$k5=7?I|o?`8?y ?m*R=4l==Ҙ;`׽yF=`x?op?Qul?r??z/"??v?f_=A?u2=L,<_`??*?U?$`?X]0?x

&?Gp>[h3}?rf?f?i~4=?n?p0=P>H=vr<~=J4$,?tt?a)?%???#"=m=+?y?G߈qM?t=s>\R[_>>:+xaveGlޑ=QĿ;>%Te=C@~c= >C>?O]>>us=0>=*l>~y]+; ?qiD`>#Ix=Y=>1s==T(=:(?1k8=oh?׍< 8<ƨ>C?bhh'<(?l0@]v=ϣ?L{?s =`|t?]$HjA Adb@Rw=(~ٿr-?`?l|??hҼ,>%#bj>ȿ=X>oO>϶?~?ղ?1^?w=?}b =qpOĿln=" = ?mN=Bn頿l{{?=0?6=Ƚffd>𩿀po?qt>??t?QT?wp.?G&==p?OfּS9<D?=Ll=RR;iʽ)l,=,?*??>$fyVp9?tsd=k0?j?ݾb@,妽\??r?j?#Z5p?T?3?m?]⽥`?=$(l=*??>?,p?$dה> F>:/ =t =8>u>? d[^/T=?+Ds =*>> x>$=>v`=\|=??b8f>[??>%ʿzl+Tت=)J?b,Q)>F?aV>5=&b|=|?d=u:<;p??;<ѷx=n>C?%޽? ?_ Ƚ8=>=nL>ּ?pr=X >P-?gC?4/=nʽGz伔AoBѸL@S=]<B`sl? !=c<)p@P=O ÿWz>9 >ؿK8һ?%h?s?v߿|?P y,tE@o?vs=?=1?LX>Pk;@?y?o~D?C??^=H?&?Z~?t>oAS{=肿lT\?C{B_#??1dLC?>sm[==d:=`?~b:=@ynZ=MaoOhE?GRݟH?4=SD>@qCP]=ؤ? Lɼ9f]?)?l_?_e=rʼ<0?>}wiR?RY???.@>?Kr{޿=t=?=<5@ ?{>V}'R:\do?o˓!k?po?^C@=o'hA?\?%@t~>,8??'o?Jq>>5 ?g,G?2=*??~V=}p@SxXEw?)=A?>A2? b?{ ?e@2?opD? m1; |?>_8?MJ?>?l=C<?>;X?Ha?ah̿M'?^9=㋸p?v?^m!?si?x?ѹ@==f4v?HjyF<<=?k?>q輔\?i ?l?whLwӵ>4?d=?1?o)R<"G࿌zk=O?T?4?X ?h?[=@=ٵ^m;eO?y[? ?q =.@>a6?~n?::>|y=U5d>¿^Hv"=>?|%l>fH!<8 \d?r>9?;@=饮=@;k=>1.l> =U}f=m=VF>>^޽v=*=u?~Z n=%:[&=d@=«j=?6<н(h>^:??=(?i??SEK>.Tl??>%!Nx?k??PӎV?:<& ==ׄ=T=vV׵?8f=:=rg@?x ?|;b=}=T?f?)3sd?=s?V"?T옽}4d~H===?d1}nh>GI@!?V$?L?Y)\zOԿ?z?,~? ?nʽ?>?uv.=j`?|;࿂?=_4j8<>)=׵ ?f9<0 ?{I=?F=2??s^.==0j=;?vr?w?A WǤ?V/??`?J#>??"=CL=Lf?z<?S~( p1=(J\;/?X࿅Ε>{q!> = ?R&=пb#o>v+?c?U3=ɪ>-=>)ʿk=8?{< =@^W]?4uy}*u;e=B=SO@"oý6>:7=JZ> 4Y?J?6w>Nj\?Igg;+?Z8ĿmsS=Ir@S3?{L??>:=V>Bmm=ǡ=^x?~ɋ?eS< > = ?}=2:D>EC&?^?ʥ=lN#@>Yzed{\}F=޴=N>?Xh>>5[zy*jL=u(?G@o?f1L?zh=5?$yLSeB=5?{n#>]`J= пa@:H?tFP=?6@6ּӐ=ڞ?U;s?LտpG?Dl=???=G ?SH<Ž࿆?ѽh[?l+f?롽³=+?ʡ0;nJT=;H=5|2=?h|Ԯ?c??sr@??9<=?K>H&=հ??|<=P?_?N=,iV_jH="?=g{?O==r?G<60?%<6뀽@?1=@b>=b>Vp>xֽŘ=> E<1?<> J;?1?]kR> xC>P<ـ? 5vpr?{UfU> PO?{%=.>W?W现l5??y;=@*?;=пA=lEj??}>,<۾?a=Q<"ཬ >7=9T0?oYC?庿 ?f$j?{@??0$TT?e92?F(=ke?T,T??<<Ě?=? r?Z<?WeR=żzZ?|?'qK="g[?byݾ?~P?;aJ=>]v=5=n3yZv?z=ο?h]D?O?`)?v?a=v5T=OL?~z?ٛ^?,l={q迥|Խ>?rH?̇?r~S? ?nu?|= b?w??~TkP?m4iܽ="?-7?xƸ?|6 ?½wtݴ_=Ľ <5???|?>@;h?{h?=Ho1h?K&=d>5Sh%]x 奘t>>8B]?sa=MпMNl(_d1kM=0=eN>gu>nq~k>ِ?v??j|>\K >JW>9?>~vQV=hvn~>L0qz@>>?d?*?@y=.=o?[?|F;~=w&P@l?=<͐?y=~>!'= =d >Dw|0?(?X0?<}'=|?(>ON?m|?U~⽥8?ldUFE"p2WȽW@=@H== ? t?:v=&?u/??q x=>==Ov>=S:=`?医@z6=?´?B<8r`?eĿɥ?Oo=[?~b>t?=`=E ?==)<`'x\b-?^S5È?9?glH@Bd?v<`?rӾ P>Ʉ?.9|?m0=U0?H+ =< VP>,dT=<=T?y ?}-?}/:u?Zl=:w\0>m?\M|?_?t?}@@.ȼ?}:?h輚0a?~;V=Z=T>>-c>_]q=_пSg mg?3> m?|xo=Yx~p?\?ꑿ{Ӗ> Z5qD?ݼn=8K?=>9>2)B^?u_\=ۨ>c=Y=,@`?]?dN/<$=Z?v>KL=[c?t@ > ܻx@> ^?jnN+ >!΁=eSʿݿ>EO>.=]:D=S if=P5?k?g*??H@[XF> d=b|? +?TJ8?ؖ|?Ow%>Hg=@;|G@?޿q?:.y,?7?pT@`?CX꿇/F==-:?x??-9??eY>9t|:k`8;`^l ?>?}%?r?y:z?l?">:p?r;?_l?n?oZ?6=;-;ݾ ==Ԭ>7?=p>P~j?>,<5(?{k>:ЪSp=y^>Q1=[Zc5=s?Sh@zz7AƵ> D?pO}c?lY= @=c=<Ű?sƿ淫?s<B0?T|7=ш?}6=p=j=À濄:?wH=o=+>l0" ?h =?X=?unqH?k?lw?̦?b\?Q?н$>o4?x4?N)??i?ؼK̰=?{<=ɪ?vٞ=?2= }=?t=F@/?P,iX>< ??x@>w~=v=t0?͙<}=X`?Ot ?}?Â?V> U> ܼ,X=5=9^seb?B^;.?<(?&S?|Uo3 ]w]Y_@O>C=:>$^? =d=Q@nW>8M?2?/?M+?zG=޽=H&O=묿E?e6οT&X>?7C?}mm=(#h>L?($SX=Jdyh6?Az$<{#8@?ݼཌྷ&B? O%?ts.?N=ֿeX=Е?I-퟿=vD{J=Z= h?y龻<@N=<׍?u&=/=p$=<> \<%=q^s:?lij?a>)eGg@?^?z=v;o`+?^H>%?g)@,;?6v=W;e~I=V̽ t⋠@?w1򽑠U|=@L=X?y=$(h??L?Tz)w`?tP=u$=.<= iRy=VXh?wer>?k $_%Rb=pIP? ?XX ![=޾O? ?|St T"\Hi=%\=J&=x=+f<``sE\?dN?~烻_o;}@?h=K&}B:?3=l??)?g_?Td=^?P?#OJ@2h=4r>OV[=`JSF?WtYh]p?$,nx/v=?΂=тk<è=aĿv*q?6=)TD}?'=Gb?=g>Q> z9=_n=&iԽ'8?tc;N{=O>*?*d?b4=ۘ?l ?_F=?Fr?>aGp>/?p?}=iw ))l ?=>d>> ]^H=j0(? H`?{!?w?;o ?bj]?~ Cwn?L4d =W?eB=?`z80?=Hn ?)=&ٔ?s0?1?yC?Af< ?,qi=?di u??&d=ڂ?6;ـ==+O?zޞe(?P[@?aM?f( ??}\?bC==\?4?OV?r˜?uG ?{?&BRJ`(?=nx?q:???X?w?֩]?f@.e~(y?t??WTYN>?Kxk@h?}$W=b?P>?x>=@L=p]q=}?.>"h=pf@S=٭+[ =6v|? >J}>y>(N(=T???v>, ?z!=n\eR>7=O?\`>l̮p?S?f橿]}l>(&tתPl`uxX=(?2=d8ؽ ?`No?#?Cw?<~=5y?@;=L8wJK<=G(ؽf`?_9?igzw4>5Ӑ? >?nS?|]?}?u=R?L= ?eh> J~ }dn??Fq70?l?y˘z)7y0=˪?u=B??<ʵ=|6?OmC?v2#?BqH?MyiE Oۿq?='o\t4= V=b>cm\=Y3=ݝ>%>a?ej?\<+fШ?2oJ<Ұ~>U<ggO?8>f Oпm=>lTǿn\@MĽ¿{?7=R?q6d;q ?> Z==h¿u?*>ຼ萿7?}=I>?NW<=ؽ٨?Y?I=Zi^z@?tL N='F==0=i?w*p:aj>FO?Z(BmAO#(d=?><4=.?->!?qz;ѽ$?=F?KR>=#D?ih=zN?l?z<@t=*Hl=2Q8=&?_:=? o?T?v>>]Ͽ=l?=kFD= ^$=;8?>է?Ⱦ ijC:?i - ?9ǽ?o^ɏzlTW)t RqTc??z?ޑ?G?GQ`=<0=bZ:acP<@=@p?a?_?뼝x>t?cd?#=4?u@iE?=: ?d)=i?m?9?Y?x.h>@V=~J=h\<>.¿> m?5+@`G>|>*?POR=@{t=N l>V4>:]=="?vuy>Ox?͊wYk60= 6="=z=띤=D?t??k2d===e=?~4l=2=quih=oa0?,c?#?x`=4 ^Yt?⺿Q,I̿T=st?7۽Ķ<5_P=G=ǀ=4t?rV7b>)>??ey=[00?v% @S?i?d ,0?;*]ll?lÂ!>E=Le?ϕ==?=$2?wz=z9x=;"?]? lJ=$<[@=k< =|@BE8?g@=4?Hx=$= ?g@o@;T~!4>A#<8(=?o@ؽ<k?jP =@'>17Y ??,?o=y?T$t?o ?nlQtEa?]?xt潼ؽ@ =ճv?0?o>#=8 Ow>k="Ojq%@(q&? <?F?*ܿ$=g6=*Y`]56>56?<=9>j>i~}j?Aj?/W>$h =c>Y=y,? > 3=Δ@ ?kм=*LU?=< 0v=c=?<ǀ=nNq>p=?w>l?#].0о('p? ;g=~vH l?h?a:j,b @K&?xJ?]?A?fcp(p>(r?7y?{<BBZd@5i?5:r=<ΐ?s6??{z=;>M?ٳ?iD?}Z<@p PW@b=yP?JiŸm?aQh?q_?T"?͚=ڌ ?X-?d&?i?xa (8?mv?c"@E?s?p$.?rt=<?r?o?K4??o3y"?zJ?.ɿ*2>bA?n>A:j=Gk_kf?=h?F=HH?c>_U=V?=d˷=?Wx@<=}l?,R? 0?t/=ɖir?x?gK=FU?Ĕ?7=)=s?}?==Na؍qm2hAm4N&?}^+^?dih?5=ސv콨M=y?:ـ??ll?mq?(UN>9 7P#? ==t=VIT?@LC?~?S???8E?f?JR?'C?pQ?X?t*%?p?kx?P#hQ??{i?+?<ԖP?Pd?k^=c(O=HxX}?3B?q??D>?X>v>wC=(?J~=>n[[=d>aQ ?2?sJ?? >DS=<'>d:|:R?wڿw>S>}-tGDn=x? YЃ>)S?A>*w?qJ?}?K~,?= 0?~x?>MZ+? >=v =Nm;{jԿiy=_=.>2ʮ=0<P#<,o?ۅy=4 |?Z?t=0`p=:; ?~"h =?*>*.iР> Bb:?Q8;=.FP´?q$:=0L??z%=5?kE@?م; ?vJ?=d^=1E?gi=BY0ȷ?m ;yc=0=Rȴ={x=ė+(Ƚ%?ug=?:-@??C>J9>Hp>Ԃ?#>8]CPovj<,v1OxR?!>?$Mg>">ې=RI=rx#=B>\VR $HU>6W>opi&>H=8 ??5>-LO?`%,]=$?bE],B8|p>=!p??S{>m=(L?|7q>$?Uo?t틿e?=lztZrf=6@?gv;=yt=Ice~=?e?z?5>E{?r?B;?eh> ?V?_58 ?U fx?zB=i]????SS>?ww$?{rU>k?~-?~l=?ݴ;J>9D?UE?l=r?(=a b>q6+zS+?,?UPZD8?HZ=ج?}r?yF?&$?R3=K\?^?U0K=D?Mwp:?Wؿ_??v/?n??iu?^?㴿|?~޾2)?j=t Q9>alؿ??jq?Y*?n3>4v=R=;^p?:?Q?X=ҽc??-[=w% ????xf|>x?,h?r$?Y<~v3=O>`>;7?/P?FO ?u$?>?<. <7=[=J爿y#>đ>>VD>+T=ф>tf=>.s\;M>Awc"տd ?(? <~-?d]L>e?V==[?H=W; ?b>\}c8>=P~Bd:?=f.0?<1sP;@?.? dyQ^?{?I/@?TX;&@=!rd;t<<_^U?YJ=)?zW= >|u¿w-UDZ3?XpF$>Dh@??d} ??J?w=WPX?u=?tp;``Qmt ?(?/S?*d:>d&<0>y?\>o?v_/@jl`8"=M [LA>IN;?=O̼ i?۲=/^HH5f(P?j ?~ؐ?=:?j??%<%`?RM%=/Ŀg7W?h_=J;@=(X?qS?@C?C| 0?p?8>zY?b H;_ ==Wr?s=-= _ =?d0=d>8YOsv=޿u`=F>'\>p=Xޔ?Wv?~t=Ʉ^=8=ڌ?o?뫿[>)q>2 P!?=;&>5=L);?1>)a޿0>ya<4@?HO>ա??=J>Q=S?5JM?Q>=[?G?_=eX?>?i/?T@?`>ܾo?~g/Bg>lR?r߾]p=2? qam1Th =|S=ƶ=dڢ@=b>>3(<zbL>?^; `?P>f=K=\?a$~׉=8<7?l#=}`?tpH|Z8?@??nI5ژIuAŪ=ѣ=߈0?j=̊xN"g(|??x?][%`?='ȿ X=ICӿg󲽢=x'?L=̿6z?eJ:9?{Q?D.SF9`? m@?lJ=%l9Ii!=p?kq??=(,J?U?g?|??_(= o,[?{>`0?i>D ?sr(?$=rqq>2Zt0x?,\R> h ?fs>===R$nKT>=kx9Fi<0v???MHh3?˻FZ. ??@>z9>Y>/?^N?_Y?p=>vþ.0&{=4=6?8=&Ľ~u=j 4?cÇ?Z<@i?Z=So=fp?@V=cH ?E[fhx?mJ;?ث?w@N Zp?w6@0?6<ժ?}@?gVϮ̽ N4=J@?b4?@鉛=l7=F >jt.5?Awt>?ps5h??w?4W=n?f>*~wq=>V=kz>+? l@>[hL= 3 >v=IP>*?w;?{H`=> c?1qtyyB?M.*?v=?ZE?Ci?ٽP?,p2v>=T?o?{#pc?c} =ǡ=?wT?l=&y?<(??NP?&?t^=Ǝ?D??w=(?}V>ZHPh?l$TȽ= >m?Y`ŻnV`i =b>?o=0=Q??x=w=挽V˨]=?p&=K>=,= d&pp?2?k?b=<>$߽H= - ?fm=ך?L ?e?=q(,r ?{p?g=$?D; ?0̻?Y7p?[L?I2?o[%;5@?(4<&€?'3lzҽ`?s/l0;hڀ?i= x.0=㿖=y\;H?]??Y"?d?dT?U:AWS?>&fW|=Y$l>>==>G0?>G⊅?;^z R?|=ʿO8F=$?>UQ<>gy)=R=k|???ʁ0Ƽ>$=5u$?}=7=>VS&>ujn@8}=>?c?y=l!< =h= =Ń>=d)1H" <}?; l><,?/?S8*> :_>2M?=s,xd>=㼔`g?=Zj?X>4g==?4 .?>l?Zu?zac?>]*=D1;@ 0=\?`?DR=3m=1t^lH?-2X?h7>41?`ؼ:h=N?ul}%?~X=z ?c\:?I@FO3>z@Z=@?Kv?J=*?t2)??{rY=q??Tt=l?}ry~?yD?L?[?#X`?C\Dbо_<!?kU?-̿~H?J`$?i=p(G =SĜ=Ǯ2>>d2to:=0(<>W>0:? *8@?B?_WȾ0>Z>_nL><ۿaO?X=<>k?=>5&?x?nxB |A7ӿx=,>?KZj@^??= <=f?"?]|?o =?^?*?ng>.>*]<Ù`=$?%a?CpK?Zm=/Dl)<> rK>I0??eͽ^>E?K?R?,? ?mp?? ?'?=G h??|' d?b? ?_??Hxu2??H?c=ɡ;?i6;T@H?f)K=?X?Ϟ=ؾV?(a=ҝ"}?}=)Tȼ?r[0eD#0 jȽK?w= p?s\TtBLпAz}>&7.??|?1\?.==ԣ==>oD=\< (M^+=,x=\A[A>^G=A"(>"+?=r̤==ܭ~=??=>@=&mWheS>3WMݐ=|̿~?/ҿ_31@F??^=\=r6?w:>Xt>o?[=%T=d?8>p(>R ?2u; >>[=)Hp>O?\>砽9Ԑ=ؿN`?qGBgb>fu>G>B> E?[K?{`H^3?{2ZքB:==a?sCp?[X??q<Ͽ%R=&"> s?^O6Ā! Ż@pd=u?=K?=1T?o9;?D\?>%PX?;Tq?V?H?0>U?z p`Qn?}(j併~V({=TY =ū=_J< =(V<6TPVj<^U? C>0> ޼4`=f,>?zd!^??6?x,bAB[7?65B>=P0P=?2|zn>`#!:<=@=,`=T*=LpN>ʬ=?~>Kۿg,Uh?z2 ?_D=?pu^?XB>Wo=_:[?j|Җ=<ؿr>&j?n]2?%`nU=P<0=½C_=|==GĻ?N?D>JK8?qeQn?*;y@OBjB簦>-ө?mt?p}=, y*xv> EJ?Ͻ+t>;x?}8v˓=ek=+&ފ?vQ=R?Y?vP\@?t'?v=An?8ѽ/ Xl?^m??d> ռ> %: ?b?4?|bT?f4,?x?uڹĸ=t);?Z<6?iͽ=j6?<]X>=\?K UT;4`=et>a_;@=<z|?h>{?m?on?z=N? S.>Fm<Ɯ?z?egs*=$a?F=}Ŀ==l>!= v>1z#@J8<(༿=^P> [\<>G|=zA?Ph<<=c"L?@?? ? ?- ?= ش?N?`?=T?p#½ج= D?-8bؼMΠr5?{j~>`̘?ɻ?M#?zTrB?gNvP?Z<= PI?nQ<@X<?_?é"w9?|ohՀ?CeP?q6p?_l` Ƚ?CVd.0/8:.o-?|ʽ^P?H?ny< @ ?NC=‡]e<;=ؿr"|?zd??Vν?a=@!?mLk?:PX?K|S?rhBA5=#4M =͚(?$w+&>9 ]?ؿgiY{3?/iC> (>wa?[?@>_ ?w?/ZyF=-ȿhT<8P?>d>%=Ն<:=;(kZ?;?f?չ>d=.=\>&?.?ʽ^>3M?&?ݱ?w=="=([VY>A&R?wN= /X=H==4<̃=Hv1mp{~>.wV<=>~)?(XyU=$?x ?Oػx=RP?x <?<=ǢL%\n*2;c`=3=\'=Ľy3t?>/iD=c=Šd=d ?Y;=YP?cGBIxp>D= (~?=F_?m=?};Ǡ?~=??b1 ü"}?t?e?`G$?hn,9?s> à?\Yv= ڠ?|(q>e??_n?n?⤽\@?=ANPju?{4<0d==&q(?r'?>9? =`'|pqu?s1}>?nۿ<޿tΠ=d?F;}L?x?/ҽ?r~mq,X?.?tkt<>|p0=c;8BXsu?05=M>T-llZ>t\>)?f>A=Og?j3Kz=>>P|=펽p,Cewf[ :m>"?ƿw]Ʃ>ckzIgh7{տ]=j>0=U=z>">=kv =ҿha==>=?BV?cs ?֭=C=(?eq=Q> >Zvz?6=z>f^B= qnj{=F4?9?iӖ=)?p\*=Af?p/پ!p>D>ɕ̽M==?>02?@f;?IfؿI'w> _\>2P=Dx?k =P< p{8= ?W?g\OT=?[]?u+~\=: ?%=bn2=:w|?ou<$x?4:? =薨=Qfzɽ}r=d?nq?\=~t?g =T?Q?hQ=kP |?mg|Tj?}o@;H@?2<=?SO?8?|?t=f[T?Y?u:TR4lZ@2後l=<0 U?{d=XB JO=j>?qT`@k4#=ň?F==t=>'Vѻ)H¨> 1:/)?t>sf?ZnO=?1X=箽͡=-t=@>3?{;k@=ļ@^^PoE=*Lg;³ oS2?yM>Xn?xill=f'?T=m?;??v\R?Y??z?fh> %.jBc?B qۿ#j> <&<>!0 J?)>#[?Bƿ\_H 0?y5@:BACB뺟Bt'A?m?lP?6?ҷ=1?x׼ \ ;5>S=?V?AN^=,~d u:?\??P?; nTdq ?UG=`q?9Lԁ=6BX?]>C=*~p?i=x<=a??WΜ?Ҿ`==DՄ=@+0=R1p?L=E}T?`M{7?;l?l<@?<*=ЪA >%?bT=jB?]l_Ϳ8;@?g>J c|>+Ͽ{9XL˿)[<Àbk>? =sV'ڽ/RbNP=R*P^D=*mDk?~$l"=C\M??j8?='#O.?X?nL?==!?zcj= d~f=.>t =^>=?Wp7?vp;@ 7CuDpoAN?H>2hv<&@?1?;=4N?۾ ?Yh='<`J e^??Cc?E?~n8?DƐ?"p_tJ??j8뿁_ C?}?j??rP=f ?=Q?"vs`?@?z.}h? <= n?ٛ?u`?l=>(B!׷?i&*?e ?@9=٪?aпu'= нQt@=;RCA4 3 ?h ===MrF{0>_\vh==ķ`==?h+@=d|L=84=<.]?q!A=h>Y!?6:=1 @s2Ohh=ذ?k~=*.==m?`?̝=#?hYtMRp09*?t=F???P;>Q;c>\- ?}>V?tp=9``>@?F?xeL0L@??{y)h?}Jyeؽ,lh?wb#T?w?A?xO?A4B @1??-l.׽?.G>=f?m.݅=ڼhU񰿙(?i<н*Ŀ}=ƪ?s/X??շgۀf?@5=j=v?r f?s=h?j+ ?$?g,=sZ#v?z@>Q=\?Y=t1?cX>+GtͿ>X=<=KT>"'=w0?6`.=եX?\X>i?J;?>'==w x5?̴?hǵ?"?OyR?f=]kj?Q#H>Otl<߉c9νO?|?\ ?-;=뷼B?w ?vF ?n8='ʔ=Qk??YZIJh.S?.Jؿg=9=kSN=,x=_;S>#?fY_/|<pbqanA?^g?\><0?jj@@HI?ž@?\l?嬲=[$?>u??ݳ?=W(uqF4D?f}ɽ=Ŷ?r>}?=(Իέst=;0.L?V<@6?t?Y?aKs?^B_???f/?R ?l@9`?b:D?I7<ޓ`X^̜>8=Κ?>f+> ~=I?w=3???=2=E}?Rqm>Xp?#>(r= Cx?iK>7b9}+?*=}?d;u*=m=hl9>zE>œ?v=ʅP=X?PྙSn{=d="0?vrj=S V?>Ǽ:G=|wa^~8^nT?P5?p\+"l8ᔿ]=^=70=}Ep=2̿|?CB?[Yr :?pLg^T?'??L?@=T?þy{?aT@ f?s<~л?=<ت=?^r?$?e@?_?bY3L??of?QI?Ƚ(??>ƽ5@|_J9?xi`>';4?'+?1 9L?~ ]= ߿=Ԏ?|?߶W\jӴ?yB=ÊYY@3?yN=*?\W?m??dF!"e>?Lyz佪@@6>ted >Teb#>%wڿa> =|>_?=s1ۨ?g=yf='M?Ъc?mοtp0vH0?=Uk?S>%\j?"pG!wb>)Z=S"p>,=KHPW @F7= 0 "p8tK|D?qt?nd[h?Z//\?Y3Կ?{?zQ g??Y?܏>=XL={D=TR|&ؼ<:J&?A6Vx= H@>*+j?J?-ZԀ? >C?}z?|X=ο:!=~.= >*S="d?kv[i>N=l|?etU?)=(?d`8={$cc%?zQ5=7}6?kԽS @Ӿ?;*Gu?fT=Lp?m?r =H?俁Ou=,}r=Հs:ȿb?hFؼ Р?; ?% @?}_g7a=Ax=CD@ܽU_?\?B B<Q<͸?c ??m6|?ȼ>WbAȼнuU?vĽּܿf=h?t?H?f=4=zv ּI?qeI@4?&_j|?Z.@?<=S> ?@=-0>*G=k^> ?>M|xO}*?M ?p=PX?u?9V=V=>4R>S@~¼ >r?彇P ?ך==^u!f>t>MQ_oxTU=???r{=?y@<1?z?x=?39;sbp^> ?=6J={<`=57?Q"?vnW&?x=҄_1@=|C`Pa?uͿYľ<@`x꿀^?r~@cԿuG;?6}?y~h<𿟡>l =a9=~R=:<2 B==?C>.>@=T^=/ Y?}t=4(?P欽 B<$?;`?U#\ =LCXN?׽? @ 4?uJ>E>vUb<<(=Cl>_&\o?b?W>e?zV?f+l=?,hL>/FmJ=P@>`~?~?D]?wa@J=hmh\>w^<ؽ?;?}>TkKy6<{$tg?.=X??fNܚ@t??ck?=qP?f@?=?7= T4nؼ&p=Z=%?p?C=* =j=x(ֆ4=0h?s!A?T=V☿x??p?#=W?;u9?~0>{?O^<>7=ƅP?8? =ͦ??`=3?n@S>Kq^?߸@8?YJ??dz?$~MP?}V<3;0?aA=o?rE_?R?Q=`֘/ =}6?=<<ق0<>P|쿆$uގ>a- ^'?2 =vX<0?|"*?ݚ?rp=WOH? >?E=5$k>L@ O>R)>m?i_D>qog'-=oP_=`頿{T??u.>=W\=s|>A=l?n??%\u ܿQ$>?F>26UNl0v=Ǭ?㝿M<.>s7=8?)?xe??tT~?=Qi=E=ҍ@b =t =L m0 R? dT?R<}ɵ?#V=?}h`?r=2-=PĽkz72 ?C@?VϿ?wp;ä?L><>f?ꟿt?C< '?q-?w>M>1>l?c])(?S?"=`> <@8=Uʼ?&@5>5?q?tnR?j}=֌?e?y ?q?/=#bIڽH@lD=X ?/c:?=ׇb?C^=e>2`_z?r{?O}K+c?ڎ>46-=&k[Y~?q]?e.phVg =VQL=WD??1:?=O ?t?h=-F=A>Ø=F?BL?~p?k@ϩL=$=6=o=p6x8*?[U>?i࿃_>c iP}˽R=x#?Gcl==?juD͋?}x 2>\>\L?.z<>"ng]?h6% ?rz?z|`? k5 ?}L9ݡ=^͝?ca#PR?yf=<ؽ?{b?r?P;=4$`g,pkl`q\=>ON; >Mq>=;v>D{l>he>(#N==x܌>N ;n @=%>kϽ\=GK?mȼW i,?u>a.a =&?r> =Ŏ?p΂~[S?#dP#=rx?U $?C=0iq=>-m=,Ț`??Ñ?b?>6j>$$?q2=l=Eg$?u^?a_`= \b=/ ?1?>?g`u=D3ôl\=ӇL=?!9RO1O ?|\= >@??u=YB?I|u!=k+>ս8;PB<À0=qP=o?:\༧ ;B?iBQt\`?,1x?tu=yK̚?d?d@~>"xkI%[?>v?%#>6w0BG?ֿhіV?x= =<9`e=>g ?w = Ŀ?s?d?=ظ +. ,?<( ࿉oH~==]>>>H?w7cx==FH?] =4(??=\>^oF=>V?~[UZ?+?d%/?pw?p;@?^y?~`=*ݔ=D< oH=y꾧x?C˽??xdv콣p=Y I.)*?wP%?t?z?m+j? 澑J?p>?qlC?h] ???bz1U+<Ű{+hu&Z?}=P=j?u?ԏ=K<>=0ߕl=Kp=2?xV??r e=U?T?%=+=h?>==᭽Ө?,@y?=@=*=?h>Ø?=`~?k<# >;@X2V>>KS0d>2TR~_ft?> |A?xIμ7@it=UL>^`?=5 =3ܿY >mK==cȿo(2?w+?o?)=լ??m.H輛qP=>=.?F?lX=Q; "?һifch?Ȳv?o^<H?_?b?{Ys=Th(R?zpvT8gA?=ƽ{"ngJ"=\:=yԐj}?ʿ4??(Ԡh3?_KzH=Ŀob=?bM? ?Fp?=N,A?=?mĂ?T{9T?W? 8[z?P?P:нrH?`|Ŀr?^^|?v; iR?v=ȼl0C:l=0=$?r?M6!?1俁? ?r? ?f*ᆼX=tZ?mSPX俅?NU=gF3V?r?f< @?&o/+?v?y4н= Ƚ ?=$?0?rdR(=5>+=1 =.2==v>~??|?e?>'VKT>=J>||>>'?e=$>4_<ݣ?xx2?i?C? |P>(?>6=?=(@i=H=`> P> O ?PF 0 ?=-rs?+&? i?|^?z?x#=XkBH?>4~-\>zἿTV?`JO9<S=ެ+?r=TEh0 !f?{G?x:> /?k.nb?B;?2q2?Z?t??zt500?ZVO?NP?h=a=:?n5k'[>tR>_c?yDZ8ѿWP=r&>2=Ò =)=};f<޿K?==0,x=0?z,iZ> V> >k> 뾒>??yk=ĿNм@Z ͼO>>>2HϠ?j=V??\#@BQ??>?ic]=񸿥!~6=@ 0?i`J@>Z&@?{p>(mO?s?j5?VwvRE{z0{=.=dxp;N`8e=@?c?ӽG,V=ެ?o ̬uR潾c\g}^?Pz?k =h?=<#(151?ᬼs࿑|?xk5Πn?p{j?c\=T?\n?[?tj)CnV?c l<RD@&}?9轲n?L~4vNHZ>'?r <= q\=OԿk~?y$?xȼ=?3z.<2P|[?Th=H=؊=RU4 ?UJ @ zbq =l>1[?[⿆п|߽$p?7 = =_AY=z?x=n Oj>%Y2S:4=e=BCP?v~>mq?X=gT?q#*ͽ7<|:@b ><_&b=?H<@`?<|?{O?o=A=}>^Cm?_><*dm?uҰ#<@>YW?S=ц;E?C1t>(U8?+C=L>GY?B-w]=1?==q7=N?0һshߢ8?kb|=п`m? (pP8ռj`==?Tz??nljk'?vh> -4|@??}[)>K@k>>b+=?uv? ?WmD=ȿpRQgn>1`@'m=ѝLv`?[,-M8=n?nKgx?c=ɬVg?x/=AQxʠO&?p.5BU> w=oM?C==̻?录Z '$=#?5?QY =.𿍜? l=<?S?0"aR<=pE@p@??V(`/H?þ ڪ3c`&? @޼(?m?q~9P?必?1oQ?U")~_>d=3 =lF?>=8>$x=?-<`,0"ʈؿv =¼Ώؾ]>M޿W&?{?tL?(R>мɀ࿛Վ?>?^R?I~>>fd ??@ٿ. ?˺6d?d’?ȿOD+>*=Re@©?= K?vL,?ih4Xg??}?u_o?{uK;d?w$?[?*?ry?lwy?v]ui?aмF??=7BD=n?q-̿`m&?k}=h>iH=,=Ad=#l?~rB=?Jd?>7?pZ?[?1?=6"/7 p?wJ߿?`J=v?\=f?[ȶľ+U)@?kM?d92?u`9>L?z?t ?w 4?vn¿ܿi?vz;`?1? Θ9r?t򝽕t<4Ƞ?mp?;C?#?S{.`He@2l?{MԿ[dpB#f=?LW<;ܔH?=Mȿ}p=٘=>B+Y=x=Rt=8c=r33h=p?>Z.>SL=2??⿆0=k?u>5Ek?XwdU=u<=AL?=C8=)xl2?h?v!?|zD=v?e=J???m(<=eYڣ:D; ?.Ѹ> ۿyL??̥=R1=S\=7?}=:p=0 <*@ Hxݴ =>,D[>H> };PR?dk@zfB/WA?r?OQuϴ?PX|Ԟf@@~=*?\z1ǽX8?Y?{E ?moΡU?c`2Z=s&r??oHsO?s>/҅?g?qP@H|stR@ ?: ?l{>> MO fkC>?`?X^> }>n\SĿz?!?_̿vBT =,n>9=:{8??f۾4ʿ{???=\=B_>=e?}F'2mtb==Th?Eo>B< Y=G=e?yIu=m?&P< @?-&?zj?Z?wD2tD @=M?f2?Ox?~;=v?w=bCԿ?yM@"=b> ? "> --i)?tX?r2f8E0󀿄FK??7h?b?}H=<~мtP?!s?S:=j=? [?C?Q?s"~( ?D>?(*-C1@n`c -==T>=-8ڃm~'l=K=(t=0/tS>sd=;}RD|ټw( =Jb =74==?Wc?|?"~2!E=?n{>O?x+2`?"!~d[zl_пuD n ?A7?=W?C>W(X?v ;z?<`=b_ <]P@ֿcb!?ʿoa= f?~?1xkf/?v#Oq?^?dof?w?j|=d-x<C83oܾ$h??i}}vG=h.?DF̾'J4?z)?ܿD?i?|%?}?=?>>1?_lR?!?|W &<pcj>w?w =X*=Uq?-0n ʽ?Qҿs?t(?Kg?R?ic7tȾ?r#?my?M%BwC=F^m>7- =V>Y?>?Ed;Er?Nb>?M=?͐> \XT|>8>$qg+X??=(?wc>>W6rZrǿA$>O;G=հ>ъ?9~|?Y;>+I&N?k`L=?=^? zܼ0=?/=KNb?M)? h@?}}=2S=d>M@ kHj`͒> = ?=~nh?X?s/X^ԿqdG軽@> 9DŽ]"L<j?x?A0p?@<%=Qdq9>#&?~C=|?p>7D?-}?u=]=^G0="h A>:5?fbZ>?a*@_s2齙{?im??x'= p<@??k?kF<=[Z?L\58?<<٘E8>w?g>!By= 0s1?h{=@<R[ ]HF?t+TD@?Ma?<\<.?Tt8?ta??пsm?srX @2X>о@4?MhP=5~=R =o?\;= ݽf?i?{=(<̒p>u1=|=?T?l|B⾯e?z>U4?+>%G=<7>by>VU>Ԯ?t<@?j.xA?{^??pHP.=KP=?$le%=tB?i ?ab==yV?^6?ue ?00kҿ[s-_?}hUaP=i0?f?9;=(H?=r?y\D?@>3>Nu*M̾1<??{fe>=z?=z,??[\<?u?}=ڽSY/0?{0?p> ?(?j;xwl,v!zZ?t+Gh ?sDgp?> x?bг> b?_=~T^l;@w@??<?Ii\?%4?B> pv[;Mqp>*4?jo_*=A?:s=>QL=3?AP<>?L[="ȅqL=d.x?cP⣘ >dؾ+?T??ſt?[=:?o½|X@C"w=js?u< =3G=zD].ҽ? L?i?s&??lK޽=6Y=sP=f3y<~@BE?~SJ?z>==TAz=eFiC[~==HuKQ\ -aZJ?¼&(J==JR.<?L?x`=ȽOՠ; 昆UR>V=>3qs<=kFp?z>dp__V? -?r= =?g%]j:m$$??v?Ű?(!Ue?w{B=KN?J HrX?D?U?}6-ޤ=O?:bHH⠿ſy>d<z?L?g?h$%u+x< w?o=2><mZ|=JNk c}<,A<ְ ?u?c~?P6tYV:b?; =M8\=LnԻt=!B =+=9z?ܽ=Sؼ((>&S g>?fg?lĽ>/M=C^R<@?v?:#? x½)?꿇KC??Ș.uy=Hu㿏8<n'==?a伛=(8=mx`S^f?Q=]=6y,?eN.8== 0ȿoxM=1\?jQ< xJ =c(?@>#dɫ?w?w?Ŀz?}6=?H?bG?jˍ?/<=(?q$d?T @B?i=c=Ծh?~1->;=YT>ki ]!?uP=?h4B=,?^C?qL^C?t?@d?r??u?>;͠`gF=X?Gg:S??u*p%?P#?Eb&?p:Eژ!``;g,@rP?cvlj>T?3k>Ƀ8X ,L<`;$?pu?n6tG,;,?j@"?ZOX]<?o<?@Ѫ?_z=,s==?_gBYc'^C= ?m>?~ڪ`?kg>a zxĿwV?[?dӿO[>S?=fu@=>=<,>h =L<0qvg*c? >=xy,r>G>j=txl> x>5? :6?iëxX==<=w> ?*{>~.Qοp]>9?w?>c> Q??"r?~I?1?rJ=#vgs?jmS~I>=?Y?}==G??h~?t==?.ֿ^NX='u=fpvr1=݂?Lz3i`?Xqq?`h?='F?>5=-?`>NЀ?<{?dKYxP?` ?m,<=*\sL?_;TN@?zZU34?s\#@0?~7m'u?b=Z(i; ^|?>\ ?ob?tfh?uጽ%!=1I>"pOejD?aޚ=BhWNp=*=5\?P $?|(a0J?\rL<%H'T`4-5q?wD?&ɿv,Ƚh=Fn??euUH8?io<)?yаhmn= x,P3X?}ū<;`?O1=o?t}l?Fʽ{?hJ?t&u>1?}sV\?GZ?Hm>73? ?OVCོ|DB݂?^> G <<=|B>ɱ|M4Me?we8=-D=,?#o?P$rTv=@=Г?Msc?:Y@Ӏ>7>MV?7¿iY?0=B?~ =펆k->$=Sd0>+" ?4RyK=~.=Ŀcl?m?v;QEпhP?8$=PP=Z ?`>J˾C?"=@|==XuH(h<뱰?/e>?Sݠ>:F:.f=UJ V>Iֻ0P?f==꽩l>{u?~y6?2?=P= >>t[%t?Ud:</=l=#uܽ9 .'-?uj;tO?|@ t<#(?|=F=_];?qm^sD[¼K0?i';zԽǴp&>A>y}>(>E=4?dΓ>Ş>%L?,~:=H?Z[=Z*Hfo?z>3Z=Eʾ<<`;f࿏UnN࿇ڿyJ{MT>!_!;`== п<~?I="$ ">so{%X?>=[aпmEa0[>I =l\?xB=񧰿t ȿcC>%h?mؿ` ?A=z0_?wcuſii,=JD= 4; ?E?<=gfT@~g2Kpq=,?|J(b?r答<=l=`u??? ?|ԅWR??=|3e=8 ?l;@u_ =릿=fq> >,?Q8?qG=+X=$=X@?ktr@`<3(@ƞ?W=S?w.* Ͽ#k?U}9]شĽI,ǯT Mu?`9@ ==*ܽqԿ?j!?N-?TF?d%dY?r hAg=\=m? V̐b?= >W=?sĿ0(j/?>BhXj>3<>x!e=V<@?~Jt€xNo=|MrFuf= } >Qt>dvB;o`?HgFTh?ck??FJ%=,?s>?>A]<<3?aξPUDοC@<]; >z>-0p|>z?ax%^x@?f=;_@=C?(=FY(?me=U>?_?=z.?rs>]a<x?h\Kz`??p~ ^n?\f?rA?j/܈?~H?3`?IG}࿀/[h?k@T?g-?P<Ɣ ?Hu:/> ܿn=?^Cq?_'?lG?pſ@>?]ԛ?"??Z?l98s9?kƔ:;?qy_ =ѐ?Yp?7?SI?[z3޽?ft?Wn=ީ,?ty%?MR0`!'uh=j?+?m$?w)i?lkf{(6^?x(&Ƚ4:ܸ?;V@A@>[?=Ŀm-0=h?#K??3@>Ǯ>0?ܕY= =ǖ==\=В?b=mФ؉;ݪ>7"ÿ@?S?>_\d?J ; i?nؾ Ơ?|p}?=>=οp(XB; ^of;?=ĔE?R=>*0?0=<-\:> cD?d`IwVFwm?$<%9?y?n/=^p=Pp? 0[16H ??w=(?]?tT<&@?hה?fh<{p??绻|=H?/!4@3 v??7^|?aF2%@?߽;0q޼uqxe:yQ\>?"?o?r5>/X$Ľ]Ƹ_?'}h?p@WH<@p;=_Dx?Y=势l;=<>Q??=P_DW&Ŀmt>r=U?|>"|>p%?K콀P?d7c5?b= <м=Zh?iv>3!F?F?o{yJ? հ?P/?_ؿjV=Fz {?ļt?e}d <0 5(p(ٿ{}l?;x?z =W=^?a| &??>Xz7?j?*?Hg?E9}?{~ FA?ccP?R}Dj`h=%p? Dg(3;D>?$HļS>Bd?vZ{h?_o ?bi=orA<+j0?P >=n??ei:`c2PlM?BkLSBs>O?e~?K$?n)=n?w ?@?j*?ڲYy2u?|<-{!?rᅭ*=?hwIs0?Rvy?rء?Nk"?q7`?t4h=<.8~̿e=4>Zk1\?hVUZKL?t%H=lX>:>m>FD=>QJ>h@~|A,#@pc4=^/DgJ=x?Xe ={,`>$=>AdH>>N~?@2>qZ̿prhA4C$@/tj ?e7>K%ǽpMWԿҹ =1y\?=Rhd=@T,`>Ŕ?u=*ĸ= 8I?">Q=@?"?w@=4?F?347@^mؿ|;yF”?v1?N=,G8?mn`@l?vQy>tf+t?=?w9>[>\&>tL?M=?Hgp(4kjL<<8?`x?h`y(??# 𿅚?S>K=-?Np?y0=qP^?Y8,?y19=_D B0CI?mY='g>zZ?uFm|Y=EL&?G=-=Ď?>U# =f <`&s=^>@?lhĿOݜ>!X*>Xn=Z?uV<@?q+McԿb%=d=m$?} =ƪf ?tU$?;`?m=<<+e=)=$t=-"?<޿<[?傿/@@+@!|@>Z"=4?{D*?3c=W*Hd?Wçr9-vp??D=0 uO?|U}zp?q?`H_=;̽ph:1džn^H%O?g>t[zIT?e?}'?R?=?5оi=nLu[R?<)<?j?ڞu~?aDͿk?N? ?=;d?aL=Ց" K> ?{Q=o=?y?O?[(o=X޼s0ͤ`g@㽵p=x?>\?&ؽP=JD<ސ`?8?c?#bF f@?iTuCL,?= >;?='??E>hj?_???*\;)?m<=H=o$?Y=d0??7<h?q{?^J?k{?eFp?YFpdDv<2<?뽦=_>03c̾Q錼P>b?kf=Q;ͅ?>?^m򭿆u?<4tt)铿tW.K# ?vh?n&> ?>=wƿ?*=?zb?=;%=f4?j82C=?Dd@Ji$X_?i6?g4 ,D ܽu=&|=pt_?iQ?.s=?r?+?6i>X?a,x=b!=wP?vpUȿm?j7>~T3ܿ[j =~ >?I>4pxea?ݿ\\wYh=Ȉ>)׽8x>1{=k?sY==v>/@==f?`?slT>(h?j@=ws?>~@=l%=T 8pfUW>8?=?X?uE?\L?=t<軺?V}n=?l>05z?~q0ra:`?ڿ?^ܷo=r,>;7l=?=M?`H=i9Zd[0??y$?iþ?p5< ?i=(w?p=3&l?q?e?WXe?q߾6ؿw?0?VKºǹ?g=\;5?B??{%н]9=L?=T?ü3B@X!?v(?r$V@@2?57` ='4`=?hl~䔿X. <}p:??k?4P?;c="u(=o>>hMrx>!j0>> CiZ-z=24q.==ehE'|\=`>V9@m??(`]\>l?5@^=?\m?C?wc==ip|yv<> _+>Gu.x==al?m^Yi=s?N?xvU=7\=Tx>JE@$=L?mj:}> >=ێ / ?=?juPmFY=mؾTܾ!?R@WA W?uD>Y?n;Lx͊?JM?e6=^Vᅤ E?}=?{?t"'0!6u|D?av?8l?Nu?}t?8s\aԺb?T&cD=*=V<-hx7hSp=(?n@=ZD?f??M c- t>+3<=J>K>ZPhiT = =d?(f1>{>&<='?ޥv =#=Xֿ=Vo2>=],`=UD=6/? f@ye?0=ZP==f9=b~(-!P==1=~F8{=i䐿u^=?e=s> )q3~=wֱ?n>=1=??{0K?x??t=&H=&?ҽ?5=c>G?u5?>2 ?maYb:?q'1?cj$z?s6?+? ABg?=N,wm?v?u p`?^?ENʐ=o&пL?2?n=?#WN?ah?j?hh?O=c&Z?{?Y5~i?`?tмq(98?,w0 (ϊBz;5?zܿ}/=Ŝ"m,?y?w~?f{p?P?anpV?<н88s> r?v?d?jz=ks?Xx0|P?h%?Zk@?p"@;b?iYK5.et=>?xd8=Wb?='+?Sd??=wػ4=쿆?ju=*Dk@=W:=??s}^P5> K=Zh6 ?YοhrsJ?_?.b?Ind?k:><Ԅp??-o ?l>?eh4?U[?ڜ?,=P Thh<\>=8=D?eN={Y?m P;2 ?5=_Ŀ_1LtDE?e&g?A=A=;w>]~> >^)<֖ PS?fX{ 3`@w>(%U;@?zNB?yYg@==߭$'Ƚ {,?y?m?q_l̿Ҥ4?$?%8 ?{ ?d.<Ҁ?8ub]?pd x@@>j޿!oпZ_\=/}@aer >TV= } ?]?1F=(W??.,H?oB=lھ ?{O鿃#;@?v=T?|?r%dpX?I=@B?{=.uet='(`2 ='Ƚ?8?rgMX?m;L?n61X=`?-@=k\P?R=T??e $Œ(=ٸ?7?i-ni??Z=~>?E?d=+ U6@ a>)ɀ?L|?MO?xJ]1m= @>!&Λ?hDy8|A0?uP?f}м 0l?N?=G =4=;>59D@=}Ƽf=$=$hҿ=7=ŀh[\>,F==?Ay?oqU8=2??V?=s%?/z*??x떽#?)T>?=T=G0ֿI=z=<?u~?g,< ?4?y)T?v|? f};"<, $bƿu.h=.=5h2Sv༶p>f=L?J<<࿃L(?qށT?j>[=5<н Q/=Shw쿂eC>_=\s=n?)|\y=W>MB?9J`?͕=\9?p =5 X3??w`?_[K0B{R@ 4=L> ?vD?.?um뽤MvܿjBm'$??\ ?l==Ȍ y(>/¾н($=I?h=F&x?ȼL ?a<[?_M~ ?5~?n@*?zֽId+轌qp;?f<9`?/?oɘ<``?zN?Q<Zsx=L>`e?l0W?ts*;L@?t?v߶?n_`?a =Q?rik?T0[߿=Ә?u=.Upt`==vm??6>&=(?Eg>@?c=>= =Ř=? ?$2I?|?cr=XT>Y$?~Y@+izT?=><=aXD%??2u=ɚ?#{?>??rǖ=3ɶhě =nm^=̽=U= x,uF=:?>?N4t@E_u=JFh?><"ps?~?~MÈ =`p>AZv@">h˿cL=Jd?ʿhl?=Ŀl=\" x4?s[?}_~=&H@=t >H=STl?|=\?p=\=8|>@s1?F־c=@=ƿuGR=i ==L?v@W?}޿j'n< ,@??=ɡĽpd>>4g?f=wf8kV-=_<==>/$yh|a&唿h) ?c}@B@B$o==?SkK=,=3N=s6}Sn<̧>jռ$p>@?h|=5|?Կw?Tb%S0?&?Z/?(? Z=~@+H>6n?$>x=&U?SK˛>#|=%V?2 ?wB= =j>bx?U@@D=οL=J?x`=՚t=Ծ=Sx>Am9x?`?M6J^=?wd?d{"4P?^?vo>^?S@=Ŭ?ae?||>MRQZ?k=b[`=Ŀk=O>_Hc?w_?o7<`=B3Lb-? G^?v=?%V=;޼DA$w(]>*c_==s?z?H?=?xf?u9=<> xR\<|j.?z??)u?dZ?=]?UZ=RbPZ=V~`l?D?h?r]=J? )@\>> ?V+_?Db}=?yj?k?T&ѢT?Ky.D-?p<Ⱦ65t??\\k?pȿ~Ol?vѢ?kl=ψ?t?G?62?2;><|=Pt><'=>k?=>&ؗ>B>=ɑ>oj@:T9CAA=^=Vl`R=U>7j?=y{?~?qN=+?qb?5A?C0?>=.=*!p=KLW|?:j?I@h?f>=q3=]?!8V?4<=P>e0hȿp<࿀/?t,-<ݰ<=2? 5 r?qddWx=<(@%kt?z1ʄݞT?oaJres轃 h? ?t7T0?V==Z?;=>xb?[=D?qjJ-?w/V;܈?^?I=?5=k[8?6{¿la?}?v>?vj=W@yn;7={,;=?] ¾нӀ=٤4?Z=$(p>G=} ?q`]?Gh~=? ȿa%> APB@~b!DLJ::^?A8qgi^rz>쿀p\Ck(fsZ'pB?g=0dr?VN.8=? vT+=Zr=d|z=-t?vQ>@?=<;TpE;=F<F=xc ? ڿ`:=?w뿑><{Yv»逿<7xX<?AɽxZ ??;=V?AԽA<=m>%=7`?rA?i??YA佬2uH?k+z;L`i]?ori?q%l=%/`γ<#оcu ֬?kR?l82>N#> (2^H?@H KڽW ?nw\;9@=b,r`@4?zӿ?|? Ƭlr X:X+$=8=y=Lm?i؂?= r۰6??b?&Πp?.=O0Ai=xg=̡佂l=|TY?π?=?,+!?;nlԽO?wƿRKux?=XQ{Zw"~;|<?xE.=xr 8px#Ȼ9@s<p?g=&нsKȾ>s꿌ҙr?"=H=Ir|$YGT?^M ===fP?w>Exwp@U<ї?p󽤟?h?oc= ?(!࿌^ݬ;Om<}>'JBa;=!P?e!g?!=e=r}4=W?Cn S=?2=2d=?Xq=>=5,=p=ljt>+Ď?ͼL@hT`?#u@M8~?т=??5({=!=L ?~r?lJJ-w=\==0=r?:dG=N<=* 3@>n-5==? <8=?^g=m?Sm6=ǔ?<'P?m?h=5PH=b="8>w?8/?ݏ)t?R =住Wfqʽ^\;$?r?]=cdH9 ?釾n=2?tV?)h?|=`2}_?$OL?'ŽٿuK ?_?PF?{R= zI?(?~~?s=?MMorƼ0?j6?fbV<?d??C?oa?bq?i4s|> E>5>LC@?=9V$v?T5\P>Vp=6N"m=t>pɿi.=H= I(=[Ƞ>:6t[>J+ ?s~V?s<Հ=X>oӒ={ =@:tl:=ih8g}_X?׿q'?>eg>9#-r??i?c>P ?`<>?~r>\x`<{D-tݽ_W?cV̔?nk8+?6?A<=NjHc= ?k:;@~XRH`>= ?w$f0=6W?|K=0P?|4?r"?=S?ij??V?GwZH?,߿xW?'gā;V̀Խ%H?A\?3UXnƻW@~?q?Jn? =[6?3)iu=p 1h)w8Xj g^e`=s9 =YsI?:y+G=νex?f5.j?HGH <$ ?p?v?k /?ߒ??>$ܼi?>9=d>k>&0/>g=b=+<a@?~?Dr\=?rBh)7?4O`>G{=:U;Hm'`n=Z$? ?F=1{+18=$\?=ZX?5 ?l?}1Q=Gh /A=࿏e+?}(m?w{?~ I*= ? M?t?s?rh?o(> |$ޤw&.Aƿˡ<4X=ԦL꽳L?5?}Zǰ=1:?p?yi\x/<?2= l=W Qi^1=h?q.?k?w5?ySL=|Qop5p^=D;H=}tr*=%|=޽2T?v<ܡIngp=.Pu>?7=LH>T?s2?{7!??=6s?T? VsY+;?$>>y;?S?p.Ů=L?\=Ė꨽/쿕ٿr?wzU?p =G@?Uǖxr;S?M"Iz=94?J~ZOaD=n@7gHW?>?=/mUD?{\>2WEA?@ȿd=J=[8?r=X?}=\??}=""=4>==>=»?~=6<S=;ZXwexh?cg'?k]==u>Ϣ??լ=V <ཀ|f?qW?gwz=пo~V^=r?~&?0=@ePt7}@$&?yG4@h7AU}?zU7QX=x+ =,J<|?o?{?;;V??Qp?zi6?x%V?zN??Z?f<ؐkg>>̽=ʥ,? =FX=b躡]<? ">?H?{.K:;@C["J{~?Y?KWuq2?dzcK=++=x@\x<?n`d?F\KҼ~|!;`==ƿZZ> $Z=u(=l?{r>oe=flk=#̿cmTT=j<?sV?nj=|=gjm)B?qeJY?<5J?A|8==`P?s=>ZuA=!v=4??|}=@P?H ¿{I)H]-==| Zٽl=ő& ?h?stځ4 ?ս~!?j=9A=,;=)hnѿa ?=Hv p1M?mJ=Y,=K(?B߽<ү`D?X?M? ?yc=QU?ult?A[0@}}?t"? <>4=Cx?ƿv `?hCn?n?\2?lCh?G?gMȾо2<~`?OJż>h?d@Rtp>`̿^-w?)5>N`?lʿI!=d@~^Sм x?=tv?4>K8= 8MTY='Đ=XKHпQ>=Z=Vp=f=XD>=>@6ν p|?\~oֽ>o>(6j=!=>yq ?{TZ=unq~?p =J @=#==޻*==6>2&c `?Ho ?E(;Q??S3=%֘ U @qJмD<>*l>|<ph;`W<oYLuqy̿e|?t} `?6=e8=Q8?NZ=g**kO[u=M (>?eSп=ꌿ[mC=)5y\=V,=bvZ?{8*??MhF=J`pF?l'=C@?m?~@0XfBיA?a?D2= N?Z"?=>E=,?P5*>\͕? P?I?Qƾ*>ؽ&t?Z?[ ?Iʿ?n?BZ^Pk@?uv?P\>HvR\=H>@Zh>&><=ݖʿV>. X bpXH?vfO g?e?qa=>W=RT>gL<}>2ۯ=]:?_f>R>y=Jm0?f~; (==5v =h?[ "=п'5x?j=a?;?=P?_2=(=p=$=8>W?}!~Zo?pv=޼^k ˜,\?K䠽,=q"=N~ ?fƿzx>yo=Std|?\=>@-90ZUc=ο~ƀ(b?}?gOļ =,<ߗp?xJ?< Ru?x,~ԼмWztx.HX`?&d7=N[8=[=?c:=k=P?l+R=WOHv,=@?[]?P?@?vہ==:=.a~" b>[?id?_SBh躽X 0Q  ?^Ie̾/^L?n^~L6=ȿ";tnӅ<ɿ]⼿ ?JF@}(5<?{t==_f>;8m?\P =u>h\==s=/(=% <30\?d=?>(=H?=<^?#I>F=g{(i-=?xA<jSLTzw?Gw=Z'h> vb?J=1=zTO>Hl>4q{?W9$sYq?ywH=ҡb^E=$?r%=⽔=X??q*?=?{Z>Ɨ?? =Θ=?yk=8?SNQ=?YCz=ȝ=?wj`d??Ӽ|JkԿ?f?b|er>ֽĉ@: >?i2?W?|P=8ް#&{,???}v,?^a?y=JR!B?8K/=^k?pi=TX3nǸx-=|ȾY?L:qfg?d)a?[@?i+2?aŌ!(de>f=xR<=jH<@x?Dr@MN?=H?T =v@\#=t;t;-?O<^v>#a>dX=h>=@??p}?<l=BWZ?Sj>i>!-־;($?a*U>-y|i>ѻ0m=/?>Ikb0 =p=DDн9??'D<2P?\=p?+|5(C4=?hq۪{Y?hZ=q&پ= * ?tXDw>91ͽ?`dmYiս?ze?@FFvSj5=zJXXۈlܾr=(&?Eo?[Z?*%?&?{D=6֘=H>7WFS?E@>%f=1> <>==VP<=?ּAPL[?=?hsz^?l|?:>(?f4?nN=L6=?v>8?=_?T= dJ0?Hr"@?}>=ܽе>3( 2? Q?w?v=?=f?@W <{?o%Ec:оBx>=8@5zD/?bL=?d^Ӥ>vXPE?l8?q8E<=F+={H?xH6?sZn?lϰrA )J?z9T?l~̽[](?_zk=8w?W^=?dž@>"&,P>?:z=?x=Ƚ8ٿ?[@=h8?Atq!?f?6vb?I>Կi(V,>9K>?\=cH?#0=hH=ڜ?Իga`??==ݤ?n=.?m=;+=朿gs==30=̀==?E dbR. =d`?пP?;??rB?o?!d_RP ?޿t6?ua= ?h?5TS =vzP?½Вp=NI@4=%l>1JR?\& z^Ծɷ0?qˣ?=x=]ؿOZ>a?t??j?mjc밾N?Q6 ?r=B?iR$=H?lUz?'j?x8j?X+= ? c;E?:F?DJ=;\V>u>0>>m?z?vOd>`< >)azf=EZ=2=zs?<°?:j&? ^e0>=n=N=s?d׿=6=NomF>"[h?ea=$俫 =b8>PҔuE=eƿ0.itu(?~V?vW7=C?Xf?MAy?jԿo Hpֈ?x􃿀D*>^?a?a=[p=]=^=m?jU?^lrA]o{>6=W<=ۭy3L2p?X5࿗긿pKM<3`=apsl8>⼺ 2?5=lhg>=N=+.?{-=l5JY[?q>+?bi2Z=~N=VkP=]x?c?f==X?M¼Ѱ`b ?®=&=@2=0q4?ߍ? ſk|<`?)܀K ?\~s~?XĽ~i`?^L??Կnc?{??]V=&"ƿC?] <9:+Ko v?{=6t=цvFp+,0>p= ?tz=d) >r?S??2>XqhV\d>=;9=G9a??ON|3?rlZ=rtU8?m`?pU?|IN&?#lԻ~?z<q''=C(?no?s'`> 1`r?\y<=0??ʝ?s?p??}͖= |>a?S?|Fւ@=(8<\?Y q |8 6< ?=`=X]V3?ZIwU?t$__y8T2=$)(?YrP?^pz `>wؿQ0ܿ8?꓿ :C?u?V??j|&P𽷀ʄVV!?P.?u?c fIȼ|=4Y?w=vB+пJ??b(*?PݿFȽZ?_GD`〿F>i=x;OT@:gA?d?{r?~얽:? =E{<8 ?@8WA=i\嗸?z9G0<?py?UJJXPJ[=<=൮?:=)~?s=,>0&l>Fh/&?i?4N>?z-?:gҰc=>>M:em ??s+?=lԻ>??=x`|fؿ "> X?_t|@ȿrp=⿁?`޼9= ? ?[~a=6?H)9?_2<@@=?|L?Bx'0B&?ɬ?g+u?db?^B>{;A{6?hs?F?v[?k=t2?zZ?G@g=,idDY*?+`AA`> oA=e@??Z5'=,}:&e`?zlqJd,?i<ڐ?RjsfBi?Ht?I>H0u>C? =Up<0?sh֣??R??~~`?K?TX^,(SH>s1O<\X? =TԿ-<%&ѽO`>?r} =*?z{l=7*?g.?x>i?o{Լ0?|=dh?zXc!?aU<¼;V?98p=tUܼ>5JC=6-?,|;>w9G4<`<> ?zqN=$??T`D=MfVQ&?̰S?mHb==[=?=?$-=пmྎ?>J D?kkzXlx?1>y@wA a?n x[?X_0=?dc@ֻ`π=;J\+2?y?|>H>րH?.A=/: <&O1uHg|v`b^? >=ez=H{XB?NJ?m@雽6񰿊?}v==;G<*`mkZ=ç?K\?=Tw>t?dν ?umvM?n??mn=,?ti޽7`/6z Q?Yg?I`N? ?rnx?4b@1[^?czk߅?C˾|jw潧PU??Z!G=1>8tmn[?A? ?p?Od ?ԱB=(K@=dvh?`nHlA=DR==@>O?yW=3h?>E?2jF=I(>&s=x&=mh:

"z1>ڿ?ؿ=(?^ D>`=?sP= ?"?{Ly?ս-ڨ?؎?%}7n?jd?KN0x?oR?[Lüx>ej ØqT?d0Ts==}\񫸿*̄?;㽓i?e?̋?Oe.5?<#p (Wp?==z?a\*]ǝϼP?O:锽d 64=,4?tՀ?x=?Yo=T{POf>)X Pz??T;=⿎)?eּȝ1X=??6O*??p.J( o D1@ePȀP7= r?_@< t=9Xb?C?=?i2y?T?2d? ݾf?ͽD?/*?Xtn?ތ뚿4J?U-H?cAU=8Ӑ>>"=M[>0?Ϳwكjr?8?=Th==Pzk|e^Rj<h?=M>WWYi<󧸿w>s)==TAlbųB=]!R?osK?*=~?m==1> Wp=<TjW\(S`?OX>*F= >1Yz?DsO=3l?mW꠽͑&=VZa ;b>_(==L+&?(?2X?f&+;?=\?[< ?o?X$h?:l= g ?e?']p?u:&L켥δML.?Dn?S??yX2?Kk? =pl??mX'(zLCi`?q?a0?N=~L=?m>s>modoq;^> g?uIDt.^>t?nR?>JD=ϴ>~x#@X->G>/^x@n?kt_=IVT=zX[SY=f=f,=>gb2=1={>!;=*v?z;_ < +?}?%?俊Ee?=`=Ώ=$=:zlID??|q<P?6=D6:;&=:P=o?n?]Y%?{[(> B? '?ڿHXJ??o=~?}`x?rB=B=l|پxp>3{+w=H=?.5Ę@H=?SAٽ!p? Yq4?{*uF=DdyX?zK 쿞]<_˸gƼ0?!Zj.<2ҿzڿq;??Ts?rX)@6??v8l?lľ"V?o(R?n =x?N?l$?(?p >4>?=2B=={ؿh#?Soϫ=PڿmR=L>$q=z=OD%9pZm=@=F>2:cra??M= 0? @=5pV/8?8*=BԽ0PpI`=]6,=י? M@=~zNҿ??[־ݚT?A=Z?i蔽~лKH?=H`$01?| ?rSe@d?a?wzp:<={v?Twy|^N@L??fk??f <p<80?=\==<=öfsппb?o罱?fyaC0?h!+<.t`:l?`?t;C@ ?0>/Ǽn`oQئsWb<@=)ؽK0=.@ \, @m7=(IapJ=۬V= |?5c@ si??&>,j?mه?kiinP$P<-`Np:?v = d<90?jk=ܾI\>?|=(D$`ClI?wu^=Dx \B.=!i kaP>>Z=`=CD'?m?Tj\؄?n??<}xnR=?=6>?;?0c@<j1>5Y\~>Eҽٜ=B?p|- ; =%l?>O?=ׄ>&5??~<@HM?"˵?t?[>=z[6ϩ7f 车n? V?o?;40?{?L f?dx?2=Jr`H=T==S|= `<]2=#?`_E-r.W+\𿇋e<:l=<1t=ς?Gr?|?ܿv}?=?5?~`>_7 ?ۆ?{N?wݼ P?n?7>n<7 +xu<#@%t?䙯kf??}s?ggT="=TFM=??\L=lp#C?|>ntuя?A@vAAAv@[tqm<Mtw_n8>E?rR:ňiʿv>08= ;>c}dܼq?U>:O7;Wy=NgHl@r?>P@=oTT?F= O=Mn?0$}?lR==%Y? >TJR;?@:{?h̾ZR=%Pt~?fxn=Y0?eF?AH?| Ao9B}p$=h?3b?h<0?a|<?f^?K<`=?n8v>:4^*Fƾ5?jﰽZ?/<`?y<شh="Va?F׽Ix?v34_?n?^Gf-?o=9B-K`}=C?hkXe?vA @ ?[RWd@ߎ?n\D=I?ꢿ%$z==˨?[iY?n>=>G*XbŇ ?y=[U==^=y[Dua?6crRm>.sfÿv?0sr?TοVGu5V?hMa,>p~=L=Ŀ?p?f?d=>v@N>u4?f^gsi?VH?zD?=<{֐=8@@"?Bn?|<,@v?~ud@+?vJAX|J?l*?@wQY\?Fȿxe?[Rwb*>>&P= <\TC>cd~>?^0<ؿZ?/wv? ʽ0R??{>yhVs=M?yz==j@a=|?H&=DG{>*=`YdR>t.4t>QI==N?~~??^>>=ڼۀ?~hi=?|?ogsA=z;PP=EQp~8k +.9 lp@1?7=7B?u><>H?yu3!?½(?\R?䛿iٻ =V(?q_?c=?g⿊>y5=Qh< ;T>GIC(?g,uv`!޿ߦ=Nr@=Lg~[rhi=ޘ?E?qo?ڃ?҅?},>ky4F;l@==h? <݈=7x?)?=?v%=^=<>=x=<=6? =$=ڦ?:<`=\'Ҽ6"`a#==>._~ S>!F?d>@ 0<>ep?nĴ>$f?dyf?Z>@?W+%gn<?t'u@= >=M{=5L>)?7z> kҽi@`?{?ie==jnO+4=^x=p?GH=4;\ꀽb?b7=.ꈽ=`t8?Cz> !ֿy?? =x&(8Oÿ}{==M?d=~(?b/@h6W߿}??RQ? =f*J=fQP?>.z/>!5> >Yx=Ӣ*?= Zx?|K=ѐ^!*ؿqlVŜ??rd=`4X<@*n |@ x@?y==DA?thѿh7'd?l=X\9ƽL1PӽD??=x=@?iHr= H=^?^O@ =мRh=Ti>0LTϾ{Ш?҂?j=*?GY=}=,?սb=Z?J>3{?.=@kHc`=I]j?="^`v?]6G0@l=b?dڶ^係e,@"{+@o?^/h<@k`_-Nt8?m?ȁ<Ҁ?8?xva?o=0tx:`Y?H ==?t=<\?LPJ+F??l= \?s=`=<<>$I>FY?24+?wjF??b/?6?v*?ֽD` 1w ֻ=G|zs+3?ǥ@ebj?q#<<=lhh?@~??_*%@^?Qlv=4>J?zG= Vo= P=\P:=/?Rrc?*T` =X=|>H;f<=u?*+?|poP@= 0??*AD?`?Y=>rF=SH?>Yj>o?3=T?|"?$V)x/%'?-Q*$=wƼw??}?}}1=j!L8?n_?OrF?x¿wd/??ZvS N̿\$P?e¾x?N?r?U(=γ=z0B.0n2?a:>?m?i2}?>nd=򠿑x@<ؾEbSuezsj??[0<20=̌?l(RT=2p?{@S?b\=5:7Ќ?q\F? %C|?d-MwzSP=:=\?w)JD~[= `=t?ۗI&@iCh ޿(i"Hˆ[?L.=FI4>?wV-L=x>"sp>X=>g+ ? i>g˿nvJA*?x>,tpK`= U=c?j> ͜=˔?z:3\;&=}迗J#=E=?|6-s@: =!?_hS4=tQ *VH?65a p>E=@ؾP@N?[)t>W=zF;?$>bVH\?~?t"lC<0?hH`P=Jnz?gW="=nq??P?a^=HE\<צ8?|Pr><Ź ࿁1<`޼?zEν?5z=s;l< X?]̽οQ>櫽դ=XX?^EdC=nX5?v^C?=xi?fM2?<4p=ܽxؼ;<;:@=7=2@?пýN?hG_݄?Sƽkl?m?z<[,h=?pRvȠ='{(*^k kԻľ5;NO@=?/ܽNv??$???v?r,>rd*:OP>!m]wN>Ufj{ r>"Yo?b02?>`i?Uu[=z>S_d(?b?^ft@I^$?oň<а۴?nlO%qH?ZԼ?l>/#Qn=LlDJ?!<?=hڿf?:9?02??p=n?|?psd?sTK=R`?@?f}׀yy>@>ޔ=@o#{?y=}(8=Nƿ[>=[d]=v?|1?Ai?N>3?e|rsʿex==?d_=.= ?z?~[R$d?<5?`aJ=@l=Zv4Ϝ=??xQQyzF=Id=,M?s*>?|>eռyugFJ?(Kh?B=߄?Yfw1?wi8H=x=WTWbp><흽?a=:Rn6^2?P0k!N?5^?߿"?nuVQ?Fz?~ hw쿁բ?[=۶?p< =NR?0=K4<| ?sO.?|y?sy)?q{Z??hw?g`>uԿ0]>2Y`<3?|e?kӮkfbȿVq?;e??r${2>, '.8=QV,i?C=#=.D?Ew|+l?"< ?5?8?H?`?w?=j=l*B|<LXʑ?X>\N?ƾ-@ ??c?y<(>b?|j?GB/=VP= H=z?6?pcT?{y/?S&<D^ =޶܆x?_~Q?t3=h?h2귈890(?oj$=8޲?lF`?|?R?(9y謿}~?g@.?d=x?v> 4s~ UP? =`=5JDw?$:?cDӆT?z8+H2=j?c>%[KT?`~¼h?)=~?uB*?Bif̲?ݽ/)(@ pתw=.P@5<5q>?p?P?!<;`gA?Xy =͞?_GVr?ʽ??_S=m)~A,?ɿct=|= n=F΄?Vnyc{.=WW=7z?d>n=/Q= JN=S> > `-?q?x`>fG}|?c%?{m^?d?\*K=ߪ?Y<=7f ½Կ??IXX16=O̽>?w?Oo(=H?J69{/;-|?~'D&?IkD?n?pH=3?6G?|=L>@V?cG=L@/R>4a>)D>$?ػrC??=B?U.>H=Lyd]jhq>/,ǿ~ѿ}X=W>'@?wEIL<:.>==b =h f;/Y?t=?x=i2p=FZнnrAylX7`@= ;;{ =޼h=vM=-j=m8?Od ?M~JXо?V (ҋ*|p/ȿM,.=v6Z=J%_=Jl?K޿5D)İ!Ou=?1O*?dC׌?]?MO?l*==轒R?x?b?e=˸;J$@kd 6?f?y?aa_y?ӃjW,?A?߬*B(?FinB@e?=:V?[{=<5R ?S|?D|>k/=+࿪%_?^=۳?rq==Szm=7X=y=.=H,;y.*>#l?~}bH I;=ݨ?tA]@ ==|;?Z?oK?e?zX=?{?z˖= vh~H>ulw ?oZSG}f?2мbOB|. ɶ?d?5?|3DoLb=i$?a1=ޜ<ן?=/0?wLf=)5࿎q?C پ=ĿUi]hH?S>?f3<?x?F,?/yYs <=p>:j?x?Nz=q?l^b??ru?vXګ=(`?JUxa?XM<?V<0=?]@|?=w=嚪@0x?R=GJ?&<8ldh ?glF3؈=$P?}/{)??'ݰQv+?9νA?)cbi?cAc?ݿix ?d=OS<nhp?f2b?̽,1Z@ A*`>|8ta=Nl=?T1?o>Aj_?w?=m:>cp=t@=b?]=ELu<цh>= >$>b=?Z_p>#97hH?熻l>~>C#<2l}=ll?3|?C>Eh>}[b4=b1d?2zwi?vV>8p>5k;@<=;e̽mx>=0r8?{>nJ? ?zh >̢j =2?i\rO=l??sϧ==D?=,q?L>9E=K>=#?!?v< ?h?wk?A=`yV?^P?sT<=?r?s=ۮ=F?p|?t;Y`>܈;@L@>0=""=x軾yZ6=f=&@̽gQ?j?wq>+.IО??~?M?/m?]PF?W=b>ί?q?ewc`wlT hTPo{BV?w?oP?_;e6=p?=ʽ~> ۞>,"?T*|>-N>a8=9A A:c}=|=|?U?>!,}o@>S?c=&H== iL<Ѕ;| ?l>!OCf?oL?=K$U?O͸>$v=GP==)$?/>V? r=\=e^PI`>=tK o=hYXS=Ll=v?9J?2wـb3iogg:j/H??b)=Ih[?~(l>&480#_>;ĿgxнH?|,hհ?d? RDŽ|V@=v8?~c?x`?9Fp„?rt5LR?տp?jz;Mq?h>?`?R0^#X +@X=a>eI<֨?W=2?JAQtB)Wοl 3=6?^?h?y=>:sH?hg? >i%=r$?;op>=A[Ŀz`?<\N ?vf?L?Cט?k?6?nXf(H?hQν5a|=|=u\ HltR,x?b[H I?˖=A? ?|$?Ug?kiOg?|hmm<0?tM࿂?d=DD}`->ڽ9W?6?_пy?m=Ԁ=W^?k8lP=h*4@2< =X2Ͽ^Ŀ,?g?n h?5?_ 8?G2$?YK=)`; @|?iO,s<Ӷ<Ӳ?D0?f?y=?>Ը?N_?H@;9W=^?O=t?wM<.wyk@j>;r_<.>mɿ>lq=3>|{?kv9f?}A}MB eCZC@:?z>;C>G>h=?Zaմ=QN?|>.=Ƚxg(ֵ?i?zs?H?\xjps?A}?%ÿd.F=3?^?p%@Kd>u=?t?bf?y=qr6@3;O@rD,6?re?y2(XAZb?~^=@s=?=?{s:0=/6+?J `';|=>4R\ =~;)HX@3Mgp(?{?D?To? =J??^މ6`<`??Y[?Vƭ?˿?iP: ?y-迓\4hܿD?mLP?hUd?65Zȿ0 e, ?7?We??yv?a?|Z=[@f@\=*n>.<48 ?^8?sj*?g1@M0?}LSpXztH?R)6RoQ?@>~AeB[>^n6=xxS=HĽ"=x Lp?`E=?ҽ3^=P>w>8><*|h=\?r1?ʔ<9 =>¼LpTḧ~+?|d=&=X7RX?K9H?@̨ҽ8=J4Wy?g?v1-Et xW?Vn],<{R=d>΢=ؿv..ڽi<&;$?\!a?#Ȁ+A >;>|P?kҽY?h3=f`>0{e?>bտU=RW=k?@> ,?)&@> < 0v Z=K?hx<=x?-?~@?>E<-=#->ġ?EK|R<{h5?gi?a=8?{@>t?{Q?T=?|?V=5ȿR{?Eh@ m=?/;p=f@X(>Ƚx9%?lX?bk<= E+Pi<=04 ?]8ĻՀ ?z0Ga:_x@z;QX?E<+p?\k?z`=;L?L?X={ ?DRXΖ$>=?Z]?};Tu">BU=ѾT=\9{̿=.?m=?Od?;tKy%=¿}$н<@?i̿\ż<p?w=8|D=l%?~=@XIO =8=.0~/R?_F?r)x=:.̬<Q=?1?p#.WqV>;=H?w ཮z $=7h??=="CXD?aM޺*?L ?|0??|8=82`?x@W B=[k=댽U[>gʼ6ʠ???\m>Hl=o?Hh]^&<0Zٔ.?Eg >nz=`qn<@ng̽>gB=ݰ_ =B}(AFb=A]f>C5y??f==?=*?Z>??~?qg=Vdx?nV>@=̮P=A"<`w`1?fټՅ3?sP=#h =?̿w+>=|PYvFp?sٽWP*h>Y?~: ∾.f?md@P==@?_GCH?QMs' ?x:?L?[i?f;=?>;?p#==͙?t(?V?}n@:B'N?q ?5:[=W %?p?t?X?f\;""V<<࠿߽ =뻘2)X+I=Ⱦ?-r?vؽ!y?wu=D?*52M;?;>e?rM?0eQ?dW=E=p?DN?a~?mD=;~ҋh ~=L=h?~~K?=Z=.?G?.`70?xD= i?~d?l?4)Y==Z̿s_7C=\?z*z=?P?? Q!Ut]=f?W xh| ?U r?]P޽迆h=v!?cPoP?vBB_wW@;91?>E?w?}Ơ&ֽ\R^ﴽ\R=/06Xt?8Ŀ=rH?}^‰?_7P=` `Ԥx#JL;{@?q7_^+,?#t?SKP=1?`5??C??W$< [p?Px H?3DU|<_<;=tAlo5?d^M>-輰) |L`S? ?8Q=?&d?`%?t=$ Cr?vD?? .?=u?y7H (y?-<|yp8?'̻@dܽE=8>Ad<=K?g>^MCd =< =ֿԅt>cu?+?s > >zB=vLKJ<א=Qvp;kst8 ?~?`b?p=H?@?o憿?i}.?$9?e]ȿ?SZ?ol^l@==P"Q(&9=U=">=xϿZ<?#=,<@2A՗-@y?A==YU@tJ<==0f?% /?%j\=1_8> +>0R>Z5 f??<`>;B1pNZV>bm~#~Vs< <@2=a=q>lؼG=#<@,c}?ja_n]d?w ;BT\e\?ht= =QkqA߿=Dōz`b6=6R4CiX-?lE@?Qn>]+<x?<0?|_Y=?o< bB?J;=P?-$??I?H]G`?n$vwg%?Y =i;@?vX?u'c==?>C?fPT14L:fJ?@`b+/od].?i?u?Z?iG?f0鿉?х?\zƾA?_VPؽ$%H?T}YcT5?OIE=пx"3?Z}Ծ3h4Q?~YJN4p0=be=j=g@?}e=8{???f_>C>ff4<7Zy>R??e"=8¿qn>C>'m=\{dkY?zM>?2:-=<=?z=u D]o=@z>25?+? ȿ $ qe޿gN=r?r7>jq=2~a?}Zp?lD?~J>(1>> >vOXnf=gTl%b#?hxs=b?z-r2!`d5=(>;0ze{ =jHDh_=T=Y^?'iJ ;2?9M=L8?=$=Yx=m4?~?uTܿhཚGh$ n|*?w]"?'d?wp"?% ?궿ަ?῾.j.?W5U?ih?=<`?yn=tD [ =/>+=s>.C`BLbCwJ=T% <{]?om?{=3VaƲ=c=P?xD]0H콐8>M>*>T:> g?e=$PsW2|u~|<=pBt=԰Yw6=70?{ =J?zh=J?=*3?v|[=Գ??gClr=?uk=;?Ѧ?s]uo[CHz\?C?$?W<=z^ܿ>((L?e@=֖?}R>?a^P?V?=A=?\L?Eо St<?ql_?՗?B1d=3B?|?k?}]6`B=b\?p T:?=>sa.i]b(=':ͳ=Gؿqn=\P~;> =J?|?nI dqj= DI8=(?fX=ڽX=N?X>,5軽[m>W-NZl>$窾t8vj~cX#R係2??{Y|?Ksz=?E=]=I?l?jFG?wM?l<? =8=9P?xfBwP4Y  H &;?QhսнмȾ =H6?_a+?\;=?9,J?gE?N<'thTh:-+BB*-?vV&Lp?q"qP<=?H>Oi=<=0=z0lP?ip>`<=o?!L >+h?2?gkh?|L>?=?B>fo=m)@<Ԑ<==h?a==ld>;?v?(.> $>Fs<0( r>B?>!H? UH=Ep=B==w?,]??>!Y?> ) >=E]m> ˿a3zf L=={hX7Zl+=9:$=`]ȿejB=ɺ=h ?V>7|2>׿Ws>_p9"?'<0=t??p==ֽ=G0C0 =1F@<;@?+?&?h= dCD?El-vev?mY߿y5Nh=UX/h @6?9;dH@=2x@;pd7?}v?F=нT=56K=<P>!ٶ;q>E=`=Cp,yc?w)=k?t>9]S>N:<20="mV)f=S!=?Uf|cW?*dې~ ?=z?t?=á*r2lɰ=y .k`?n\B= ?}$>p奄g^DB?w{= =Uv^EL>-?b,Rƥ?J>>?Wؖ?ȿvKM=I@@`,?E4?tn?o# <#?QOj%l 4< wg?}%?X⚿th=t=-HO*v- ?9A>X*8A?ul?q=nx?f22 =$=N?O" Ƚ-umZ=Aܿ_ 0:?_?]bxN?P?%U?8=鼤?q/ks?rb?b$(?~ ̼ "?6< Xnv=j<?J׽]?g$?cg樿mܾ<p?o B?e$P?r?F=jXg@t^?=BqAIT< ?=[DA>\ vm>3#O?#= 0=޸>1.=J?*>\=>=^s=آj=HYrF>#;@=m=\? > +!?2@=ؿtSZO0>@>oM'%=ԏ=z>P|=P{cmt\\?od ?խ=;=I-cL<4=/l?h>[ H=b$?="Aߒ&"=* ??pi1`=ZL<8=R R?=Uؽ=ڂ?+d?RP<e?}rp?=fH@%Dz=?h?Ƚ=M>"Ž/ŀ^>k=*Ǭ}?d:转~lJ,=@P?5??;"=.DHV p=+?r?_%0=}?x=,:9!=܀s?l??&?ij/ =?N[?qB.T?q%?e=#|{!?渿=6#DWm=M`?v(??tY9y?`~E? a;?s?99J> ?bEWjm`}v &=2=)Xx??h@4?=hl7{r=͐=м `?+(ӤL?J?[9%?{ ?p `?轇w( z|?=?W;?N$?iG?yy;?eX==||b>a?'J=R>>Q=`¿_E =[P=He?r=ffH:>8t=b>?H5=>5g`=<?> 0bYf$%V==ϊ=S#,}<<7P?y3=Yp=U=P=)7dqL ?7??u h?9>?$??rRL<"?.==bb2L==xs??{s=zsp?Wd?n=^DSrr??9?ez=( =u2?` -?N}k=S?w=?b?]h= z+kO?Sy?wXr?O0?|9.D iP@e?kyR߼?<*?T=ڶ?I4/N?p??ܿ֍T?6h?nĽvGؽK?Z?A@,]5=1x?ff??⿉_rzQ?u\:Hch?t<ߧzCˬ?~-t?t_0@Kt?XJuI?DrQKBξAH<ؿn?h ==*9?Vf=K`<<=Ɗɼ>O=ҹ>7*K=L;K?Yr'?V5D>#zԿ=u?~j>?J?y?|Ž?z%?nz=}Pƽfd= ?SLP*VpT~ 0B]}?NCνпqX=6.B >S?龡4?>S'?aN?Qn ?"y?ySνkhx`H%>0Z?tW<`= ؿXս=?_?4R= Ș?8۾4j?0- =?|⿄4ȿ|>"=<о64RLY?l9<Y@?~?_wrd{S== B]=ěf=7 ȿI=L?^t/ȼ?k% 3E?}Fn`(?i??z?l?k??}<пj稾,аV 䶴g̿]*&?uB?`?O⽺@m ?nC?~Ӆ|=?vz?> cR?;%ܔ;$`=L?[$6>M>!uT(i<=R<@>L 8Tk>VC>&d? mn>8[pC >s=>/z?>F뽞?x7j="0нb>d=bR??= \["v?°=; h?v>i>)?d>{] <.=X=$0< ?ox=J?m> >>Jh?=k1Qpcx??Md?T?L<о ?{F=K=|^ྜྷ??sí?V߿*Qn<ՠ=y> V\?֍?~]?jVm';?o޽V=I'`?o82: ?5`?g`s@?=<@~$=VP>?q>?c?|=ڼ/?Joh?s?Y?hqֿ|8ɽ(TjB/ ?G@IP_(g=ʈ(<0dֿp7A=u&=F?J5=߆diKZ=]`=g=PUC =0TQ?]֘={lY,ֿ]ֱ?tןE(e<=?#D=UL?t!2=t<.?nXrL\=!?<~=H?}9}/zG?{= ` 2lļlJZ?^(0A?g[;o;qh?|jO?.(2Ľ{?G=Pད?cpU?g==yt?q6=ND>!7[6<㛰?Ŀz2M?>&?_x)k?0?}OE?|ϒ_>Z9E?Ԩ0lm`iL?x" =m-??𖪿?q(?38Ęȏ]D?yK66f?u)?c)@PkQ?h?\6?༂<߳?H05=͞ ?v+3J??hRd ~?aڤ=(?>I?`?h=JpuP?Zp@?h?SM?dG?eYwh"=d?TξW|= X&>H??i=e|X=]j?PHUm p8J갿_B??t>?vj>Iu=[0?#%(jjf?!4a=N<4ȿ%o?/a=8?9.V>"C@?{>n}==0ZJ?v&?̽y%=*q%b?q?tY=}hyx?v;`}?R(D0?nN=P:Z6?^Np"=;}`@6: |=)?<6 0\Bm?=/?x?E;U> gT?k?pP_?kA3Au=Q?q~7d轫hFC?k?]??h> _-:Z`Sp=޿7mM47<=vl=̿}?~⿇<*5?|bpr?d=D! ?Bp????H@?dys< ?0?ZjO8;@=- nY<3*.9!O>s?j>O-x?c9?Tʿn?&7C?928?~=1T?S$U,n?WN͓?=.=C&?"?O?;y@?W󽡌ȿr⾎j?y|?F[:-=uԽN=W԰?Rz?5_9v`>>o\sXܽv< ?xF?j?[;>b&ب=/bxqݻ`x>=NR9v f迄<|?0`!+`V!y<K?R@?\@l_1.BnC&^Aν?Uɫ?c|L? =ب?~C==q =pԽWM[xF?mH?~,\)?Z ?n*?bXKk?`|j+춐4<~运"QH?frN?|ExW\?|z _ y?%E¾?pʽ5X?~?q ?]?J5?ʏ=6ƼP?x6<?;??n?]cW;+='d>D =(??~>Pd=f[]q>F?x3=G==!t4?tV?Xrє?tZ@A?偬??=}z=Fl??oGی?W=%}z,?v?u+ {?==U;`?_a2=lo`jh;(?|=ʜ?G?sjcBy#?=)l1(WV翌3x? Zpgd?pR?x?qѹ?VQ鼱 ݿI,?c^>e?o v>d?_D?Y˽Q L=x:A?̯_xp<?;t?S6 ?PmJφ`=}skĿ ~ӄ.¾M#+ژ~?S @?)dl?Q?/3޿{U?h==p;cʰ% ' ??tIW? ~ƽ~ ?Hlȿ% t?0x=l?_οxľNbl7Dh $ dp{F=?s?UPy?9etx*<,(;?:p? ?sȾwVl= H-?QοY`:lKKؾ0 ?j~J=?AQ,k M.G?L<(?`Ā?i5Bnwv UbΦ?oоtoތ ?1(c?͆<ߞI?2|?iŻlc̓W,8?O-$0X0?c6Dш|=B@E=l俉 |??iO=n4G?~큿B}4t(%p? loȿ?O;W?a?'/?6>?`F/ilԽ?<> ?jD??y?OE0?YվIw¼@?b?Eҿ??[c?8=?h=д:v?cڽ3R?s ?N- >@E?N^?>b?M7 %=?q?H&?`׿WF{p?L˿Kw + ཌX?`| |=|~?J(.lڿ|`v?Q:kg|?5=Vt?Vr??_?Wqn?^"vBI ?E ؽȽ"\=8 U"؜X,q߻]߀?1꿜$1yMJ?LZ?g>0cؾ"=.b4=/<>%*/(~4Ἵ@=ۦ?=?_aV9w?qi轲= t?M}?{b?O'`运?Pyыr?(x?V}Ќ1}X'=F½b?zTN9oM`ZDh?n:lM_x?bP[ԽVzYfpe;~?9Q}?p=?\p Xn^?JTԽ}gru9dP.z?i \=֨R~?\?8a<ܿ?-$x>9~,v=|?>׽3v4' ?d[<=Cdphwbc?Y?=rv?w#S\0"o4L^??{O?b.?/Ҿ.~}<;F'Ax?o*\ wܼS!`1EEx?2p?ng^HF?Qb{%?B_'?ER?A#?I޿'{26Vɴ?_נ?d;¯?U?E!]t ;8?ٲjN?`?bPUB.?_4?0?`ַ(?a?u/?f?n8c?Jժ YՔȽ?=Sn&FA?{K#͆ ?#'X?k~@?l=ʽT~i?B3=_;o?N==U׿kxHQ?s77< =Q콍nc̿T?!⿅y=1?YZ=%@?%="%=~w Ͻ?4J]?tԾ.?Sx=yp?kP@[=?tl?@?^ ?c?lھh?mX?٢m4?]=[ =H?_+[=-r4?AŌ?nDƽ?=bz~u '"r?y.~?i w?GEV?ckzf?:KZ?R|0?\dI4 yV:q=s׸?p-S?$; ?Y?c3=v[=[ʾ$OB*X:(Xn?PG8]0[b?+Nt쿀u?#;ڽ41?cftd?d?(Ϻ9EV9;Ұ?N楼ܽ0 rԇf?yf?[`G>ԾD~IH=Et;s2_;Ҡ@=ɠ8V`J?Dm0?l =ʾ$=W- =?6b?΍2yL?>]=[5=={F2!ھg{?ܱThz?;T.ۀ?`h=?VwԾ?f?޾vwc:?m>m?OAbz?MdJ=?Gϻ݀=ȽL|fe6?g?'=]4F=_⿆3;??Lχ_=A80-hd?e ?f?|使yt $?X+?yBBs@s?VXP9p?pQX=ea3οbt.?M*]< =??ubl?iw?t)?PἌTU {پ| T?QM >^ZJ~?T0mGn0?n*L+?b\nc?U$Y f:?^/\?vw~g;?9-bP'?O?u< ?~4Ĭ<@?6e7%¾#X=S?ܘn?n?A伬"$P׽,DDX_=o[sw?\|@L?Z?BM>?Tf\?=huPoؽ!}']u??m_d'ɿ$>T+?yn?ot?=?t?: d=BŢfj+#?R4x?TZ[V001?i/먽Jz?= Կ(/?OǫyfD`:R=xQ,kƿ50=-@?UW<;F?oe?J.?Bha ?J|Ҿ~\?ᒨ?u!%iV?ly?bPiVLt.?7-?W6?Ǻۀ?[.?]o>h*TM!=`{?4i.[ԿMY?C? ?pͿPD&??Gp=_R?_rv>, lݿY?-J?~X=Š?QCcWJ?a?|yM=Mx>ӽ?F>1G>@ݾ,L?vȿAr>:?D@;U|b}$H?N:=D輇X?#Q??3?V䢽̢Z$r80#":o8?Qo?VNqRƄX^?Esx_C~lROv@о/l?~߽e@?*x><>`߾hp(־ru~=ڿOϽ18)?4;c40?vۤ^AJ")?l&8=' <Bv5F<0?K $><&P?Hy<=I&=eA ?r|=a?jʈ=ug=u?^=#"v<=!H>݀ ?]?y=/A?k  44xm?YO?c;T?-[?pu;?/F> P?0?w|>ut?~"?UQ=d,?Vٽ u?A=bjvåݾ?^D:zK$?QA??aҿ{<pLּ?Tu>py7Ï?5H?K  п-U؀hdT?-䀼(=$fNԼ?M(?`?c [?]&F? U"?fRdV?g<Ȼ4$;Ð=Z>.c.Z>?\?odD?Z~=?g= >?0=f 5?$t *@?<+h?S?*rz?6?bo =_Kv(Pc?ej}<06Oq?o??vAY?wgѾpeG/?Nc?bu ACɳe?E> <0??=?¾:_=~h?[2 ?Z:OMh?TʽrWXHd @?A?j?p?w?q q=x@"?l?8? *q?Zf=g⦾:x??M=f0s=ITF Ǖ?SaybWL?ljD?AӔ?rV?Pi[? 1;律kp=w?UB>/`?*D?a@b=aT=w`쿙=c?Jl?=&H.wԾ`O<ԑ?}?0kӼ 0Z?q?CaK?Z?X#i|2rcܿt2ԠZܸgB?@Z?G_??.7j<8xO?os=b(t?Mߦᜈ{r?{?O|ؿ"kqFq?K&?gwCھ2?'T8R:7 m=ö?ؿl ܿ?,?%׊??2==38wJϾ+n!Ծu+?xkUR?M=6^?c>A?^\K=Pi}6uOܿ=ڔhY?ef?A" ?e=1g?Y/¾|=?P?MR=$=SL;k?ؼ*?ܒaHc#=V$T?e$?G_?%f=׮?4q#MH?Du#?>'dqzkn sD>3# ?fk?HþÒ*F5ؾ"\$ڃtz>BW^- @l?R<+@ߟk%?c$羭?Z7>DŽ?8`?or^4j}NfӾ#)?HM?JΞF:-L(?Qr?D`\9'j H=5DR8?-?M87?F@9`?0$p?V?+  o?4(?O򽋁?p'X c?az?I^GU<?/vп{L?+C_?ؗ>.?Y`I꿀DV~t?@r=v 3d|x?=`g[?t=8nT?͝=,?tz nsA?^?a?`'4^AS\6?^a?sS=, ?M?ƾ.1 f̝4?T[?iLfI}+ ?CJ# H(z?/?,t?sA=LE?Kn?*s?F?2׿o? d zWXL9!'F@2?'0:9Ru|<>@?,y?p۾c^u<=%ƿ!?iѱп ÿ? _C,?B?_D=$ؿ}z?iUi=z=p?rf?]c?4u̿=Em8?uQ?JZ^P?J?a=I?4S`0?H~44?d2Qk>?{+h?憾S|>7=)?}DR?Y$?~^q?ɾJ̙y$8{G?Uo< Nd?1\4<~נ?c gq>忞+x8ZS׿Q?^TlB[ait鿃MU }?wi۾ã?>J]?|;\h?p?=ľ~Hg?_h?,ImNYHc@ ?Rl=O?e?*p־"o??"<迄?&vKbt?@WuuھxY*@N?Nq+RZ0o]x^P?if?Sb,Z=?F bʐ?9?&8;E?G-i>?F?#kۨ0?_UFĽD$?ڐ[>Wq|?0s ?/?1Tp?FO?q*M ?A"_ʚz?K=;h?^21X?.%(:0?E0?E??I?IP=?|=nO7ļ֐'?󒿅B>I?$޾=R瞚>S}J J?ȿ?-t?k(?}`2?YZjd=RD?~~?wcC@j?8}I44b.sgz=={?lƺ?p=8=>^^L8?=ĽᘿgнY?vz#@qGw 0=F%@>gu𿎂60Q?h"bs=>aR/?hؑCB]|c1?Jy=Z?=+j[V?n:*=F?yn=/??eϿte?)L2ic0?=?Sy?n/??f6w>=mT?ZОZ,?4$\$\y1 [T?3 O?Ǿ3۾b=,A49?=ֽG鈾Pmƾ%m<=q\=Ŗʽ?kW&?5<0?JZaW ??V9?qo?=?CHt!nxDFo?d?gp?D?i Z??k*h?~F5j==Fb??+￞Js~V@?*I?e?.%?NLjˁؾ5?c1iT¾.ſ@?TR=#̽r?r} ?_Ϳ .=_>ן={4 ?f0cbzܽd=ۑhaE ?l?^0BnB8N>XCjxkY?5`?8p?v_x?DI?*?J\?{u߾" (drȽ?r?Xcp>&Կz$R<84?!=Q=Y8=D#o=86?Y@?2 W\wRsڿLX?ll?`R?Nqv?y?*h|E??F:L >pF?xP2?M=Z_0i!nDJ?Z+q|9ͽ6>݊z??7?PR51 ?Sr̾NŽ㲾j/?-ӽ'!*<E?=kҿݾO!1;I?sb؂P?N>؍=&01j?NT?C?~;޻:˼==t=Q?5Lpu 9t:?A?j߈?PcOu?R?n/f?ȳ4c?/5\;h>yneb?lЁ÷uP?C^>|:=u?b}ھ>0bj̿eżQ\h?FCV?xs?L\To;6ؿu<@|Z=Ƽf^?i郾LC< mŔ?K*?qo`kts=J?s_~$24&[BP?$= ??07 ?w޿i:@?AX@| AN?i1$s?g$?M=ƽ;α@Q A.A͚Ϯףܽn?Op?ik?LC]?c,V=O8?,¿z?:j?T{忋uK??'?!?T.?x?X ?YQ1"1?|?Hx(;}?E?KF?G?e{=@?A pƠ`w?-_>t}?)>Mr5޽@\dȼq>S?26?e9?`?d46w?+-?RM?]߬?j8e?I(g/t`=2,=94?}<8\y^ߖ?j;?^U=ܢX?I?DI?mW?nur0=3l?2<.?{b?F =俖C4]?C?W5X=2=_8?SEs?E =?QM=L?Wⴾ]A< ?C3 hZ@?Z=Ǝ?BV<Rm@z?X/? lhl="ĺ?,C=\f?΁A>ՠ^I??n<?nK?Nff??<FV?HJ?>QVHO >?Hē?P?A?|75?%\1?&>VBe B<?fz=A t =UC̾ ~?Qv=̾H7j d?xKٿ?<TШ?rL?:R=ԼD=wcɶ:?kϷ8'r? vxdsM?p M,e }C/0?n=фi M?\yW ~>$AW+v|?P,> HV D=J?T?oP?d?i);e׿fֽ?ܾdi> aҬ=Ծ?xxiνNEpޥ= ?=ukʽAu:?=84[tD2`@?K?jlE?|4lJ?YiֿFGģ>1?Z?\!Z?zʄ=:D?Nw_?x?FAw\g><(?Uӿx?7kl?Y(=V?);?mFᅥ\l(=yz?rրaֿ}нɌLK?=4L?dkǿ/l?f7?T 0=?f?`K5K⿝J+?nq aD?t (?Ajbh?av=O?a?E>?Ombuh-?D&X=̃>ZP?&|?^ތAP8??M?:$=t(ԽLd9L'O=8?dbn.?7J?7{r cCJ;?|6s9|c 8?XX?h~?F~C俈}u.Ȏ?<6H?Uξ ㊽R?[k=mEGf?l=i$?uo?yuƾ?31;?=츿Dn{>O?nLxPr2?.$q^?z2:?xu| ?9v K?(or>j`> 8>,\?x?bQJc#uWiw=Rڿ?=~>$㘿ҿk>u<&v@<z@s#=y.~??AB?ki9k0??rx\ӳq"?Rѿo=NL-pP?Th0<>pHp?|ÉyBcdh ZT@ye&=y 6}t?o?dԽ5=o8?U?^Ț0?j;``i)m=SbxEd -3?t&r?GB?SyQ?FY\?A=Y(=AT3\?IGF;澓@;"oG4G?9BDh?΁GAFA26?HlB?=tch⛼td?,*R=ܿ~?aNq?VwHG@#Xx$9v?BŮl?Nz?Py=D?S>wIj1$?Iflp$\CN?l?_8?>?_C-'5-?Y6rľwz 6?V(y<شG8G~P?y3?gT5l?EU(=.&0' '̾@пC?-ֿ~1 ?;[g?taDؿ|νz@?[o?j2b=0r=޽n?wg?Y?}j7?cҖpEPAP?UȾ,@=8uoC^;̾WNڬH$3;7X?K-F\;^?N?~7?)bX?N?u7̾2{?5D?X?6Xd/p?D<ɺt> ѽsy,r81?N󿉦|?k#?вo꿌}?-NTb?n+B C&i@>( ۿ~=+?^1߽b*?_?}G?}>'ъ=w3?p=NP?wUp?Z5?D˼I@?$:?.?9&?K?]Ҋdb7&ߐ?|/?!c=D?L?fKqz>Y?*ܼ<??8 We?Ai&?Uþ :{?Hm\0Ls L?Q~N;迅K?``|=UP?ZI=쿔# O?V?S;v?D?6?bj|X '؝?R?yr??b;;@S?X?qbWH?Dw-ќ?j@꽚r?`?7?jt?/Fϙ>yc ?F-<*?\?~@=H2t?EL=?n?W9^@G2?N(?tܾg&?N/z=VL?T=3k ?e0?e>?Hu?Ѫ?>Y 1~ 8 ?%?F<,?v?UD~||X 3oܽ-?Z ?[\h?Y>,?ORL&Ծj?\9?Mu/;<@?S;?EAp?r ?T8?m;徟SU?0g?4&)O?EW=5D>1Dx=: y?;?@^?$x?_>N{?(@6G]ʽ?%xu@ #6Z_?Y!MdW?=t?F?rM?)?iB?H|oL?U?m?h D8hT?0T ?n誾@S?Mx?hjܽ9=鐽.ZzdW/̻?UVsd?a 0;UD?d`X?0=?p }{= Xs,?s׾Z,a?]`pF?Q$nE?Q?YM?k{?nV翓u?biT_޾ ?Fjy? ?Ag=DJ\, c*5ս D?jHؾQ?Iu?H(q ʽn’鹾/2H?oP?4A?tM;?a= {?%W??&?0пE뤾1MMC?LJ?w ?9w/Yt?jK? x?Me?|r齖?cT>.B?Z_y;B+J[GTs8<( #;o`?KCҾ”"L7]@?.4Ƚevp/=g?=xx=<< ?: `?C⥾ 1?h?F# (?78yO@2=<,?s;E`횿q7W.?X?z#~=YoIJ@?S:>NY,b?m sa.?T/?f?`l!?s`]@mP?DV=4}?8҆HX^d=hl?vuy>:?`?D:C>VA2%+Wt `f=?)ᗿ{06,ƾS9?= a(忉];`?MMU=c8ܾcY7J?U:T?鿎t?L/*P?5?LHļV_CMy@+-,:Q<'(8ľh['0ؿ?d>0=EKؾ@4 þ ,C)}x?{W>J,`iZ1?\&L?@_?U;d?#У(g3:VD@46 ==,?SM?:|%`???9M=俓&>*?' ?{x>Tj?Ua?zȿHg=Gϩ oDS?Q=?`?\=ý =h?f'yD?PDOžT6=2?O?7?FʽԿ}?1r@?q\w~ ?Jÿj\; q( `?8e=δ?Lc;~񄾁jk¾5L?lY;gJLi= 举?=.S?\FP?Af?K?j<;@G=q?R?Q%q9P=! |?,|xn?JӾ{1 Y*>oj?u5R]= 9`?Ry?f2k{?]{$]%?MտqFi ?T| u=l 񿑍޿h[&R?ca*?m7z?"z潛Dkw?g?xXs?j?MޘV䌾)kڕ?ǽ ZT>PQ^콈޾$=?ƪOg?rHt{x6<i`U`??`i-?G?yt=fȾHX?gq}? #?M?aJu] h!ľjs?aڽ?<&?yؿ2X?T=d?YIM[x0Wl=lP?8&?t=XVн?xEX?x1yо=Z?1J?p&=п 5=0~ZʘLkp?b;߽r>9ȿ Y =c?O*.QG[?Ywiz?Y?d?¿y.'cZߋ?l^p(>=z>a>8_ Lb!P?sU)?xs?R пi+m=?jF;>7b?O rܾ>6=v]T?/?<0?cS?+mP }mc|+;U@4'QW?xd=85\]vl2.\Z=nLnh?92U==[V"?E?'"?4 ?F?#B?f:?.ʿ\1࿔&?[X?;ɾ* ?]=?W!g=_ɓP?D$bװ?]?=f?'4>b~𗐿S? * ?:6?M;Р?4 ;΀?E7?3VXaݼ?RQ<rz~?'|O??g7?2?4]㿎OӾ^PU;kӵ?C?dP0)㠾]J??I6?[NN ?9=s?/J?zL^@i;?C!?EK?ԽQ=yyo=)>C m<7??L<޸xd?)??f?>C?q o=J涼`v?񨿽F~u2=?t?qFu|1HWb[Hؼ< x)Pt "iR?Yժ<Z~)?V&?g|?t¾\M?%7?v=G a?U+@1?V5CW?YLƿ;ǿ?}eAξB VI鿄L7q\ҽ?H( A{=?Uɿj?=/n|4ǀ\ 8=_tP=MCI}?=貾τ=;3e?\z?D?:tȾot!?Hh~?pQ{p?T뿀?,!"?7D?rkv1ܚ )?g9Q䩽&DǾDDz?7#k,-S=@P?瀽N<^lZ=\L$Pо6Xz(?3n0{?Nx?hп,!W?!NjC? xіh?;F ݬ>L2%.iޥ?o&; ASh=ge? ?o 0?C2~`?y?UrF?Rw?L=?DܼrQ?acPY e^-{\?r?Q?c?>D5R;ʪCsM?F<]?%xN6B?7Wrz?fhӿ?`!W?V0} ?YPgBE?V̿K˾W?Y,?j)^ftf?NX+S݄Խq?Yھ?7]Vn?i6Kcj?i╾8k`I?\㘿b?h?0$>3)傼sP?(p?U?00쿶gOl]h`?BY?oH?7寲?HG?W˾sg=P?7?xrʿ^0܃=5\xdɿ>VV={ܿQy=$?R?e"z]?Z޿`V6?DB*W|l>)NqMh?xb=HFq=m(PkK._!d?7鴿t|i?S =7?eO$?Mtz?'6o0? -HP;@?j.y)C?Ry>=Wn=n?Uz=mO鿂fe c(<0r|?o:=t!r0l>!<U?p?S=?vS ?ൻĀk潤F=E3=zT?M?IY,;y>?B$?NZH=sF ?e>tz?+0p8ؼD?k#u<]l>4ې?`xܿu5?fD?O? ࿑6=?iS/#yMbe~1Cؖ@?2Խ$>`r?ui*fկ޽G =P?@O佴hq?W:*!0uNJ<|8?I޹??`F?a<k?NB?2ò=4?a?L*.,?:ͭ\ t0?M`= ??]D?0Y?Y뽸"?e{?4 ^'b?8 @L[2Q?J;=?b?qR?WF jJF]忀t?De-T= |tv@<7@P94羁͂6?B:1db鰿%B='T>*8 =_&?zN9@.CȾFf? :b?O7l?tc??P)>78B?DW"#~ϾP(=ʽڿzG-,V˾v{-'oV_?c!5Y?I翁盽}=Fh?CNvr4 ?d?P M>VtQ黦?@i˾+ؿ.o<@n"' H?>=<3_վOqؿY7o @u;4m?0<4?L̽ J?&?}(Y@<%p?)SԾ9j^?eC!$!W5 9=,bL񝿂z\I[E*?kZ}ھ5o?~P'}z,Z콝$?j=־s0Z^w轖v`?, 8?hu5;@J>?KkϽƱt3K?h|PT?]= /:h=B^? v C?2v)?WY@?1;Hp^T?#<?U?gM%:M|cL+?t˿qC<?C?2Wj?<?M^>P?o6?E?^jľ&jZRƽU*?:hS"?\02lI0p"!9S?N?P`[?Tda?举!BJAۿeRB??L#;`qm{V?$?Zy?6Vxvx?UQr?u ?5?%&F?5cHs0?Ok̾WseX?ov&M$nתF ѿr n?@?]c?MĽ.=4=,yO|?*.?ݾeI q?BAR <r?w9`o`>%9ٕ8"k(qt?n?>N58(?0ֽ`7<|Z?E8!KI>E0?V?L?qrt9<1?_a+j.R2dv?꽉`j?;?:wh쾂E2}?Kn7[? >x?V=̍^Q|z?T{뽫'Ҿ2>?]?d=⬌?R.?9-+V{Dq9?y8[1?=> b~Y=过I ?UԲ=Wؽ <"о쉕r?e?g#nyD,Hܸ<8=XO?tJ?rA?D?kZ^Rh?8]<?wt@ {i?l&%,?,H<PUhJ=3`!ѿd-=6?mU?k#оVP[(h@^?`t ?gRq|Bܨ?Ly{?e?gAY70?/3h<%G࿇LI4\'?am?Qx￀?[#7=6?U=| ?>,ڿUO?jrxRN!D?Aӽ}< O?v(H ~?Iy R¾ 8=X?8?qAf???iPN o=&L?]W@?Mg/?6-?< )?3??Q5eT漀?v}?1#>?IK?7L:/ݪ!y?*kۿo?Vv2?wR?R?G=T?MEnJv6?4?E=? Dbc.:?&= he?]^U;7?X?R=z=xEص=??EB>ÿ?Th2ֿ0v?v~?}f?qO?k?oՌmQ?gnNi?Uk?uN><(<о8> X=?C?%?&D=袾e<(h?b?0E?c?4B?*|@EùS4@)r?x1?Y̞m/ ?l?u7D @%tF8 O>k?H:m濈eWGo`< 0yS?-V=UCP?J=='I?6b?^?wj<%v`X,??\dpkD?lP?ZP@[?SMl?0?ma8?i"?Ϻ `?? ?j?<"?jԿhJ?Ñ(5f?3?W֪=W?m%?x2?Hƪ~H?*b?dվ}r-=kM?o7DHǼ&x?.7?bV?=H]`?DbB:?Ie[2߽??#@>BĮ?ф =-?[[C=u`뮽X˼=t?N ?eaHzl|*@8N?E?qV5Rms?j9?W4?I~=?n?L*zZ?!?u`S?JM>?)%*@࿍,K\'@?SMF=pn=VھvIRTP+)u;K@?< Ơ0=lŽ5 =V9=P?oDսqxF꿋?l=n?Y?=Խ45dȾ+" .A@B#@*?rܾ#8^?MEtQ?u\?Pq 9?;~<숿.?axh?v> 6?=/T{v #i:?O?o.V?f2Yu M ?a-K?9%?d ?5^vmo?T: A?P2?;w;Ŧ@ʳ?Ts⿆`0?9/AA5?S PƘ?jGSVC?(O%p6տpf=_?`|VҦֽ_N?i`;p?%TԮ?: ɾTP1XpىྒྷfZ?Z?c z?PND?͢忄\6+8_>Ȫ==6=d=9 ὊFn۠@3=^¾W7̿|B?b?ljS?^|k*Y;M`GF=N?-f1.?q'ƶ`3?$k߀=V?p[(?ȥ?]!?k ?<*?q ~t7n`?Tx,9?t?E?C4Nb7޾:%p?)9pt M@0|&?;?R]; 0T=|Ua;,Ⱦ$<P=Y\6?VX=!g@?0X?ip' Tj?r?AeyvL?E7-V UFbpdIX9?P/|?L^3G:?9 <Jb꿎lmؿ&S@?gH?Ke&=Xz=|*NuD Rm4D*?ӿvD?8???3 Qݴ?vO3#W=?0N?MN[?W`q@2L=gx?$Bp?D5??qL6}?:?T)8?+?UP NpsDAXl?z-v(뭾>?R <47>6?/"?|?Cgc v\f?Iþ= B?nvz=pLljkQ H?SY˽@@? $&??4=?CB?޾awJ6&P=U=>=4,?X(`hެ?T2>Կv?Dkx%Ϳy!ֽNd$@?W=/>?qR6?S'=.=-z-?.]M:ٿ672;{L?mQ nAb˾N?Ne|p>?o'0Nz`uc}?@(Y-갾"D2?Pm"?Z,  ?Ế%;QP̽bM `:@0&BU.?bUG?5 ?2X"?P\D>4< XR(8d?MۜM?оfG?9?L 6%Y+O ?J*>?mֿ s?~߽,=r?:j$`?<h=??F ^n>[NЮCPK?QĽy返Zx*t?m5i|?Ic;-ɿ:W?:b?a2?]?iq?Fqɼ6>2?6My= m8𿆹UcxN>Ztg/?Oxrw_s6=jI?uZ~=31P?Qm:#?6?Tf?LY?fwv? ot?^d?Xi@$?U.?9<?Ƴ j?U>o={P8?5#򽞇8 4R 0 =ԋ8?dP: s46?a}q?YL]ȿ #궿n?x+?f?Z>%8?v,ͮ]lv?:>=>?JC쿏B^<=?xNxɐ?^2y.}?|fm?UaQ= f<8?T낿p㾾r);;J  ?FH?9.)(H?y^Ҽ> ?N)H?Y=pmu?8󰾭?ue?U2X8.D ʿ]VBsL?eꀾ!;^u0\`Xdƿks\X; ?T?T2?3C?O?:?>?c&=-4 ?CC?t`e\e.?OlV>#a?-i?3ݾ?sݗ4~?`?G?;νm;?!Ǭ b];],V#?^L/ά?*pd-㼻2p??*?z |{4`pCy?3 >]V|>"m̿oB?\ >3@}3&˿m48e4?S^j~s - x5;le1ؾ('q?+C?oֿQ?_=/?P Ľ&6࿳H?B??_Ewt?vԊ?Bн.n;9?^{+=ֿ8 4׋Nhп{Q'?KeM?PkD?I3zۂ?g⿊T?|;b<0=6hGmSQ?Uˏ?L?귴?V4ޝ)lؿiݿ=V?.ƽ짜rb@c?T?xҾ7?Rvs8!:?_y>; ?KJg{~o$ؾ(3h?)j`l?]Ϳ.?~?-pw ?l ?3Fl뾋>z=.d?qglA=|B5Խ&;d?>F?eY;A 辢ӟ5?`ھ*F?8$a½+mm{Q(,3?|?RF@]R,@BKU?4MV=R?)jݾ?\󼣘?hdH?L>" %J??ў{{Ct?"'p?H3i?p1!&꾈x»?:1޽?$ Q?tl?E9~$R@CU(?>usƮ?O~?E~?Z (V"?5ʾ EپRr??Z@r1nx?[R?0?e ?x7y[?^by=tX$ʿh?Q?G? 򀿆p꾊j>1.<$6$:?Wr:?[T?%7`?aV)}n??sg?_{v~6M ?I_nV~Pr?6deS$濇Of?W4H?`{]>Z?$J@:eAqS@? q?_8o?aw?M?Y?á?r?4?faD?E>q\tŔu8?4 ?LXj?* ฽v?ߕ~>0\侘ZHRվ @3gIݽZ?;?t?^4h6?L bH֬kV?O@_=?a=B?E(?d}?rr6?āƾS=?h>A:K(d\d?oWm?1=?xR<6ݾ帽?x^1?4x=G?_7(?}C?C.> ?Hh;a??: T֨`J_=(@3ǻ8:*,?jc?%qs=|g=w07?o0?duZ'{<È=Tc`<s0?ԧ?boZ?G^w2?"VZ?eN?P2)n2ӍNc4#@;`tArvu?½ R?Iݿ?\$?Ef%3xpľ_?Q?I ?¾4A?m,IlVN;]>;=0zxX?<֒ȿ^T?)?KdD?k?r?#v=w(,{_8?Kнh?ڟ<=^^=?Ƚ޶oV=PTrwՁo¼@?TF?yp¾B v ?o.@޿r?>p}=?Nv=ഽN~?оTT0B׾̾#?Y6>?p?^ܿ|c.j?mQA|??m+Fx ?+D?ґ?R8p؞?B?e~w`J?*qAqB,B,\@el{?P?f?_=?3f>%﴾))騾h?\[M>?3=?rܿv=P;e$}?5B澏?믃:]"?UG?L1Pg%\ ?=\*+DԺ??m4at!??.:K?A8uA?<οGd|??DXd{)@.o,`kew\?F/"?Kl#?`B6U?zDR7<0_c*s8HC;(?_N=?n?N-O)| N7K)F<϶ 4dYt.Ф?ff;?Nj4/V"VP4:RO= ;<ؿn?v&=HƿL??h?bU2?c8OL=Pﺿn8?(}hZ4MB?YZ?:Kʽ`IQ=GH?HJ@}?|ix? qt׿/[`w@?(+A@Co&Bw@vB}+U?.?ifX?X?@?>]{BO1MM?[v=?^6?S?lпZkOϰc5ܽ-?WY@Bc8 ?DӾx?X(PW=O@>T?lzy j=;8?3*?OF??"{95?5`s(ىJ#@`b_L?[qb7B@@$gp?fO? X??h$ B?E&=n,=J?=bt<܈pam9?}x?<^?.>``f?,`?_c2z}|;P Đ?Q?N2J*=WD?U1Ҽ>"}(?oz?9?0 }\/0?a5?|Ľ!i?ukԧw;?(%wx娿G_f?:о_9SbȿR?\y[g=0H?E󿚝m~?ۿ*?.?NH?Zr@!?cw_cn?[oJ"G? ,2t?9V[h1HQ}xҿ^Fbdqt??9&>NX?o.4=c"H?2l$?O~:r=zAܾW?L{s ??6鿌Bl?EhC?:*C%?dl>\?Rj?d&@?5?fI#<#!?@Z?b9ƽ޽sؿ⓿hI?c3?{Z$?bϾ F?tA촽&= Y嵿 =(?)?}ýn=~PY>(p>p݆>y?h,?lC(?pm?M\0?LBܿyf ?Xr?N>>?k~I?R`4}I2<?Cצ?V?QwL`R?8 Bd?Fh=D?Aoо߻Ԯ}h=ǖg);@?C?T:=D6=2???B{U?s'ݨWp?Fʾ?,5?Jؾ V?gɿc=?:ξ?SHi?zꚿ?^,N?<ʾ>?Pڤ}Q?BTkW&Ӥ?m.X6?7?+`'=%CJ?] xY?^?2ȪlF?W[;?9OΛ}h;\3KW)P?0?Fx (?H6F?zϿKu۬nw`?d?H?(ᾩ5i?s8ԽR?DlW??"տ=?/=?4?|cAb=ZW>6s?~o2$2 X#j?\Õ$?'?"1i?il?d5gs5u&?+,>ߜ\?R?zLo=|?Foku/1?v?T=l?l~?iN ?m?Yg q]mk0??{o?D=8?dnU/O?^?:I?0'(?1-ܪY٦`p?[؞~?r??IHQ3=h5?=;q?3"D/e #R?7@:qW?%┿w?ߍ?.)? <?#q¿b!?A촽̽inM𿧜K?90&6?M?,+Z;ܾ%^* ?JY<}pu_]???[=ZP?,ܣ*jocؽ#?Oᾂ\7?1r?a龼|%?mMO??|V@H.?H)tǽ?П(?g,)ɗK ps=X7?$z?ly?;?IJ?9l*< ?NH6,"Ŀ8$?Wwھ1XU?ds>? ?F$?\EwujS.;@vx?mI?x-?2m*z?z>u;aT-b6Ŀ*rAl#޿hft=L,?{(rg=&U"пdP~[?r/o=)v6?Tf@6|?z5ph <2i0v?{\ʽFZ?>?;l^s@}??]I ؽ5T?9D̽KZW?oq?;q}U?p 㿐r=?,?d?%]츎?33aо%Pa?~#;O=$&T1?E?T|o˝H󗿖?D_?oҙ=uuPs@¾)wJCPS?X =m?D?{Z?QeLۿAw?b?i<\=?FHMȾR=?[#n῏&]?NvN?Nin@G??L?g?]K?+`=KL?dI6-?i.?]}> +X"X?BN?"m=4L?r|Z*L:{$ ^Bj?tRNֿ|>TO?e?F@Tx2*S54j>?BP64<[>d=\TU?w'?674??#E6d?66?cR???S?1vО?I2Ol,X?? ! /?sXP=.Vl}FlR?Hq95u >ʠ\,?UJ?Q< AP*(z2?BE?c JĽl&9 ҽ4XӞ8 paaF{ =mK~?ld?!mtL-Cu= p@-K3@L!ʵt-?7CнX|9=%쿗k؃lJ+?nvzE??'wzZ~ :?q ?L?B s(?Ѿ;Êtq?N8?&??}&>6?Z?I~2*FT?BR@n; @ ?Y"׽?}IX5? qq?Q Ud:E?D"+?b ww?G?z5[޿?wjgGb?Zf?J?K?;D?CQg? zBE ?fLNE?kz?=?iQgڠ(?9&ؾ6m?Td?[@A>BG@?k?O廽?; X?2?Q[Խ?ec?* 2?9)$W=:H; ?z+?f ?\M?҈?X %6^ ~L?T :?E|>侸?fbQ?g+?#_ AG~?\.Z?_!o?L?Z? hN  =1b?R2? 6-!2(6OQWt8 Eg=A LB@+?F ?#?G}ɿ^xmdj?IYz?W?`5޾r`㿅lD?G0ؾmh?n.?UG&9*?¿6wھm}=n?9?Q:?=&?+G\?82I^?p-39? ??0 /ڽv1d?`M䲾?[T=:޺<:{Hо 7?X暾e@+oZ?{0c98K "?;\x?#k<{fj??8l?g?EO?N8s?3px2?Aw>9'џ2P q?U6|owRBؾݐp?DB/Bog?K=fR?\=VE3?4ᒾ$.D@*ԽҖ"?E?H+B?[Lή?4?(oDæ?2tp WU#=P4>[~?0)#H==\Ծ2'z ӽFF%p?x?0 y-H#&=`@?O<?Wzڿ"\m?= Z=?>&B)=}k/@>m/?|YSa?n㼽~?ce?K͎{g[?tx`'<9?]fkw-;)?g?S&?pؾQ Խ6?7V=W@]>?=?>?SsZ.?HBN?羆վ澳SP]85:?,~|l?{L1-m ?PVC9r?v?]?$]R?1о3? ?l7Jd<$?)8?S\l?Vr?Q/?@D=tDXd?ZW?Mh/-?A(AカP_?1?"P޽P;r??=F?jKH [S@y?5|>4,W#L?+=?a*_y>vy\RjD@;@?M8?]?_?y@ܖ>9` =s?<ݶhՌ,>RujRD?#+ؿh?@Sm?EX@6js=4??*6?A?3?j?N[<ڠ~ Zs;?ij?GI-о1?Vk?t?f䜿m6Ip8|?o?e<*"e?F?~#@=i?I"6?? ?jLt(?5a=!+?Z?Tr:NnY~5٘kQ?Y ?G ?T5ܽGܾ?vcV`7?.Ƚ心yuM?5?{LZ3gF LH4o~h߼"$?KpV?\Td?c?'.P?d)?3 k_%IseϿ9aX-7?Q}풀3 ãSt*&7?H"<`BcdC1?LeڔIٽ 8#1(ͬ?K)տiJ0?xB?<0>=q?D?FiϽ~ ;r*?Vye[,Ͼ>美ي??:Ӓ>LT"w!?fN-= (kK?1ƽc?_`T?0>%?k:?BqR@?SN(?WmqȽt8?3?v4%?Gxo?,?)N?esFhpdM?u(?~ hx?lw?Q.v/?'?a5O*< ްfV?Q F?/?Mah?r?".w?e2B<􄀽;n?f?b?bl?/̲?U|澐?|'?^#3]oL?-0?Fs?L}?F&ѿGt=1?\祾! z侧)'?`8 ?2M?eM| Ҿ;`$qR<?Pl;q??bd4+u ]< ?A9?H;@Mw?bl˿@3S?h??hQT{?QGӿh9?6S?:ڿ{оCý8`? )|@1?$?<8?1= R/b?J}E??7zb޽R?\?O?.T ?n? &?5 -?&d=ʨ?LCR1?Gnp/?g|{@h?Vt?}2N?n/?(hI?DJx޿?[,\?/?lPk?7e<?O}?XBǞ@v?3=9$,hB?ކ?<8?Q#s߽׭l=ckο?4X=Ν0%G ??a'?jI@h?H,v|<>?QcN?y&|0Z?C~H?88è H ?v 6'=B?`V?@?7.M4?Wy?r?M=hre8=TB9V ?Nr?[/Ƚ=Z ="`?G2s=췽'hn=c e,=Ap<Xf?tJ= Yx?[?jTq?FKƿ ?E?r@W?.7;H?P0 ׾?j?_FfBWBo@VmV?1Qc?F?о`䕾??z_?:A~-2?Eپ?-?<<6?]d?A*$?<\?(6 $j?A?>Q<^YL`Ng 0oG ?7 ɾ ?xD =x俓ڽwZQ$?j@vdj8gCp a?f;o?[2GUf0[,sD?hP6|#(al-?f;+=>z>??9}PsӏU?_@h< ?4XM ?\vg?-n?+:?^)?70?|b?B%P=`i$8ʿ_?#V ?CY?]?F0=Ґؽ?YX?O<*~?UL ENrHz>{i?-g &T%6i0ktw?Nf{}@*ؿ1l:Լ0

p?0?Fp8S? ?Gg]qM8?( ? \G*?H H|?3i?eDZ?R4?2V=ܽg?Rە+?5?^Xp ?j] ?*u?9<.0 ;=T'df?"s?;2?+G?]+7Կ4?&R ޾g#x@?8]"??1bASC>tA0z?e{?.h :,=?VGK?[@.?gx?M}nuҿ?F7꽫<2;pteGU8?$+W?P!E2վ\P?f?9dw? q^=@:?*> o? f:?y?`YP@v?l^ս) =ؾX?XC?Znf-k?9 @G޿ֻa?^id?/~,|H'=,ӤϾpFk?h4<ѫp<.@@:?d}?CQ~ˠ*?Hm+=Q0?L?:>3uHȾh?=|aĽ?_ >K9t?K?Es?|T1}?eKaWf=z?|?Ո?b?J܂5~U*?;#?4տ?<#?9笿VAw ?(?edc-?i?"w`?22?@pPU?i??DQG?G9?!z?Z{J?-j99.ktN|y10> =<B#?Ep?@U3?Ux?ᒾꐽ"!!9nx?BC-V$?տ^)m h?%V?Sg?W v2c?c?З?3(@o7A.j\,&ā?p?{bWn!d7B?d}?a?9>m6"<%н ?nwx?3+@3pD=lؘH>ޖ۾q}?A n?eZRM:?N>hj??뷾Y ?D?%z> H#?;.T*?AP`?BY1yu?E/?C+>*;?_0 n.x?kɾ?Tc=~?br6=X!;?h6.?WQ5Td=lR*?W =Ȏ?:~?z;쐾f<?A !+/J??q罨3t?"}?ܹtip?)Z?Lk?لG?0mDHd?k&?m4?SJh╾ E ԰콮zh?Y?G?x|?T+?woi?Rҿ;0?O׸0???dI/ț$ ^?9!o?ڔ?b&?li?Cн/\?4#dv? x?7=˾-?ƽ^?Q(I-<M:<T?WTԿ(Lik4GUA?O7v} ??d6P?#?'F P?dv2G:65?\,;ֿ͞?Zl>(?9T?>=H 꿖vXq=vI?\!&?#??4ƿvcit@Sɽj?ln<<5F,r?y #?;߆?/N^=@Cm?wӖ?ꤼX?,<)Q8yYpC<=8KRU?*پ#Ep̾Jɽb.?:ۿ!{1=!ľ76=,?AȦڰv?`f=]?J=X`?? B?CDq?'Ϳ=9B`z!֑?iM?Cʰ hh?=I M<,1&?BGn़g<h# ?8.i?aa(f?T?O;?JĿ5r?B l ?^?n?\yuY=J?qb<ԿE<Σ ?N*R=B+ܾD嗽 `>ÿs?A3?f2ڽ0,?V,?Z?n?1i-?*UH>)?;6#??;OJ H6@EL/~/*?P_n=V?<꼿U\#0?c?!$~* ?&q?J5?,A >M)d^uZ?X(?[F-uA?I.?mp??F;I?,mD]l?mb,쐾?S1?4?k"n }r?.?$?"}&;=>fT&u?vV+ ?sWO?j$;1x?R?z}>p<`?`J?*?Ns?"NhHcE缿~?׸i?C?P?Týgl:?8z,?G>=H㠾Zn?eH?mR?-<=[^Ŀx@?"?DAioq=.&Ck4nF?mQ9=s?8lq6?=)r!?Z$O4Bs?CF,?f*=:7(x?j&?)Z&_?V ?@Q[?WM?r?K-?jC ?D> > k٠?u4=.3Z?]C?P*?Xऽ?ܽ:T0d/UACsBb?4| )?]?p_%xy8<ߦX? >V?EE p?]<ȿݾU(?]?Or?yοuv;{;^v6:ypd?8ƼŇx?32;x?5SŌIt /@[U?B`?'`(ÿuq7^;>ƽuu?)e?_ <%xXz%a?NN>Sy?< 6?tnI}z8u2rѽ%ϾT]a?Fؕn;}?zuȾ"?[(|A`*EȾE@[o?/;?rpdҽ>?EE?{ܾWU ?Z*뿍m?J=3$?=!?4X?Gȥp???4k眽dnLG?BV?7T^t@^݆]Ec%Az ?.˦?H½K?=??K?`BA@pf?dB%?M/8XCÿhW?_F+?!U?QX?=侖G+?A|B?+?8?g\?؊E;f?Wbf?"q%{?D}L?FjxKj>?!,?Jٿ4d*?7?3:V?N6|?\?FڽtHо: '?=*8?ˏ?ic07?k¿ˬ??Z,=а=mz?: hB = ?4W?Q'h?cBlC:?P4?l/ը?!LEq<@?:z ?:f=R`?DL?TB?PF;L:?g?I||d?]?V.佭7޽s?(x=?9PI?;7 W(?]״ ?+J?8bhdؽF0?W%=װ?ؽ6@D?*ZU?pK?Z a?lfھBqM=P?7r?= ?hø?$=d@?Ft?Wj&?_?,RK[$?'BǾx?/hFAHD?hD?Q!?Euֿ_#?8=gso?HݛVBc?YG?2?Z-?\R?Vݾ~?n\w׾;@?9\?'U?>6?z?NN?PȾ0X?6hƩ?DD@pщApm?:=D2~Փ*?f2??n+?O=?[8+n?4 п VH?pA?V{ȿvƿEM @7Y?aڿ:ڽ+H=T싾+ҿV?.ڿƽ熴e?!!$98?bb?7?JO>q g(½niR>([??('9|?@+:Ě?]:8+?Lf?=z濘7?6.нT>y`{,Aq?o ?yw2?Lqվ5YѴ?<}#?)Խ.r%U?6ciཪv?ӝ?0Czry?CR?m辻?R?%O?> 4CZoC]]_ܾMq&}tY 1vc?qB }=3@P?-'cn?RT*?b?+/?8{h6q޽pR?-~ɄY?e\X`T?S8?=F?콹5%?TKs [㿓[8=Ӕj:{?J?:A@sT?yf?_F"?L?oz/?Q&t_[ᘿw(p ?Gֽ0T?Ft?T)'?4=;:C?SG ?0̖" ?T%?"J#Ŀ`!?b@x%s?PHZ,8zLh~?@?K ?!ؾ{ZV$?ڿ?`$b̾'?;uؿ'?9:?f Q3tP{N<;?L?%?\{ '?q]?"=?ؘ?CdAO 43_?;뾟?Z m(?(?n⿍T/?]?ƞ3?%` T?Z7??&to=<%bֽެpn1Ź? ?jοV?TfyspҌ?aG?8[_;h?ee:+U3NG?)߻WCB?:^Ew2H?( P?4]T?S6 1@>o'<9 ѽ?0zŭ?M!4,uc?@z?(麾WEbk@4?ؖ?S?4?I2R?&4.u?ݾY4࿍? A?Z`w?"Yzнn,ɿ]@;]$B?OC?DR?:2(Z0lP0CRv=+_?r?yCmV>ؿiTDD=h?[[B꿖 ?k(.?ܴ ?^]L<{ t_h?|QX?.'=Ab/'?XnW|Qw: U@?A=f:?*xep?NC`?-Ʋt7?Mx޽W"??V=?]g۽d?L?XK?<|X/% n?U?:C?tkoD-dc-?J~?ZNw*Ծ6Qg=>mk.W8pHؿb?:?3o?Z|cm0?Q2?Mؾy޽I>?g4-k?[S<RDq` *?^t: `?*q:c[Mտ ; Qf XClg?E+d?E~CX?e)X?>'??]Jpy~0?U>eqk@?cD?;;?p>ڽn?'?A8Ƚk??5Nn?P>?|?ArEh:m?jX?8;b?1VM=T?R<^X@+SCnHUώ?+2 ?S j?T8E?yJd)zZӌ?v[f>^>K@aPp!Y(=,K?|ڽ,6?#%J⿅g%?F?"<;ZuܾH?}1E=?Aؾ#'!?)OG?^w$pg?m.[>n~?7==v??ײ?,?G?qS=3QU p4AJ@+ A{@뿂SI?a}3?GA?C.Lb\ ?LĿ%)X|7\Ǿ&Sh?:b?>Ƌ,*?q?q?7;dVG?4B?c6lw-)??5rCD\0@^?tPc?Jj?U5?Ds>?X$0~r?.m?v6G?: ?#8<P`v?D?=Jq?edӽ;?z(4ྫྷν4p?1=I=?#@ܽ??I?F3Ok|J?_?[i\=XdrνŤ'~?zQ??q?K?c?9t ?W]U?8Ͽ?ܡF=V? ?:?e֎|W?ɵ?f ?6[?M,>X?K1p?tv?A[eNƾr*?M: <<򐼍c f?>=!?"?J>?_ ?[x?Z?k4?:?x:b` Sܾ)rܔ?@5>?ҔG?sj?eյտ{?8p>zx о- Km((?T옾eHgMU>B ?D?H?Y3[?ydsYq??9sUB`f?I͟t?yQ>w?P@'ܽ?@?=a=7?I?2'? ~v?Z+"~;J_?rɷ?+aYfv=Ep2.?Fi?<]?(p9 X?- 1㙿fbן?ǽfz=N!qB;@1 ˼P?b?j󶾣hh6+?:wU=|#{輿@̔p;` bb?v=Rͤ?+<4 ?1հ?cGBUH/PO?B7jt??N)N?\˘W{]@K\&?.nb?;es?]\?FQe7{ʿ@9=D8Ma6m྽?bau?D?#gx?T\?M(??W>t1?о>?_nx}??,P?,C?Tox?-3O5Y?m࿍A/n>?C?&z?=>>42ynx?uNVK?UԾf6?T?'?]?Ps+8{(^X?5ARAP>Mi?<ـ?_8?:j:?ܫ]D6?b;n\?3?IhWH;?VD?l1b:(6Wgx?F?MJk?-4??z*[l{ЂgGF)?A?(1: m?`?T\?*b??GgQp?ZZ?cFl?$?>vھ'=vqsy3=?=>! );@M{4=(Ծ;IԿ6?Az%f?F=_nt?oݽ?D=-go= +?>8}?e;?X ?B Ȏ0 W=VA:>??T=b }?5 @?TȿɽiпӊJ[?o=?=ͼP 0?1L?Ns>P敦?t@l-(CUC@?F=^x?F(!?uտW?NAϨ{p l?6QؿV>Sq:=\˂rx? ?;-?EU?i17?E:x?(Ty?¾ `?K?n"%3?A۬??]#? B4nê~?!hl?q? k?P4=?hZbb?0?s a랾iyPCMnf?X4k@vᦽu ?E?*<?`+?&)?tNx?E歿yPu_?NdC$?]M>?M>T?FR?[{( ?7!ѽ7?>ľwڙ +?UK?H(Ľ#?7:ɉ?c,^U?X_@f&&޾aX?䃋,mBuYh?4?M ,NLN?'H?C{?YAݼп~HnR?d\嬻&dh?eҽc =Vi$?AzMa?Nl"`= C\O"d?xB?Q?BŚφo lȇ`?_L?W]V|< ?)?Q?4?FEӾI}<ǧ!7z˾=Q?AFB\??B$pnƽ\v,ѾA8D=wa?Mp?ssLҿ?6e?QA4>D9C?>R .?`=ah?8lhZ?U] ?:4R}@?UE?E]?RnL?R~¿Ϳ #?\3?gn?H ?!t?D?,έz?7brzxz -pdCkw ?a(B=HRq?Q?< ?䚫?C?I0&\e>X?FP?R-=ygp𿓟+?>?S?R=}B??=! O?\Z?G~?>T?V?NF?a(?C^?]L z>(h?(HD?$-?i[U*<\R?l?!U?WL?280ܫ?sZM|.?3k?M[?@(*pMv>𩢾\>8?b(\04?84 ?ZHG^06?l>*Ύ?`+R=-=??Vr ?3ý?I?Z?1@{/Ҿ;?g:W~T࿚ҽeO,?2?_Q?,ܿ?2ZZ࿛A:lW,4?Aa_e?Qجv@:'KA?f=>791o>r>}lX `~RoҾ=T?bwr?v˹?l}?U=jju?@;ȽȽƵpyBi=Ux?6p7=.=~ 杺$=ƽ FQ?T3`=7,пѹ2{@?D;Dw?DvE 佂DrS>0N?;cнB?IZQO?OA"?OFΘȾ6΀\V?bק]G?>*읿#?W,C\ξP7?WYͽ$T?`?"0u?1c̿J<?B=0ҿ!?S\?k9V?@a?>7822?0^1˽Ɗ?5vV?I~o?V:?0?=?94/_u8?PC?^b?޸9?DZ̝?d ??) ??'?&nj?Q;mUw9x?S?Gf?3(?8@GT۾q?IٮM20?R$!?!^?eE?:*p?C?\J@ ?.{¿L{Jp?̊ۘ6b D?R? ?_=迗w?[*p?Ki=>x?kŢ<Ȑjp?Kz?K6?_vnnԐk ?1j5x&_?/?9N}?bp,☿\?X꿅+~?1>+&?W?=?Z&P?a¾?ms?[-o?T8WUp; >?Gr?9X?Mc'9T8$(v%?E_? ?S.q?HලD?.q^)F~Z2?CL? Ђ?B?P?m$TLX?Gn?BWŁ Q=?BtJ=H?-b>= 3 bpξǫ(B O.?Z?Lʿ?O?gv+,??x?z96?O+$> ~11?F=v!?VWaǛ?QX?"pmL?P L1Untz?-1?6Xg? C[I樾D>?X:?4>쿝){+p??uϷ;=;vt? 8/k?¾Sѥ?K$?c[3ݼ^)'\xSѾs +V?GM"?-@0ؿ?jQ?`B?' ?=?K ?:?1?UJ?*?Tp0?EL0S??K[ c0$e;?$-d ?]?@]&?W =XT!ٿ⤿?g}?Ny9?wd?A>?o^>\?K$D/?.?B]ȽGA;!wj=P8#̽1?w*)-x ?q?PS8C?J:=vxo8@6c?Qt?<ν4$۾.?^4PN?l~x?G?Au7Zpo?S?0HH|?k/?9*j̾!A>Ǜ?=?j??{TJ?? Z:澁6>aX?*@?AaD?V?ZˆβEQ=EؾV?O]5?:.?S\5?7?ZB?&S?ff2J?{ب?*t)ͨ?0R?.o-ű?j?T?2KT@?n:O,a?8(N$$?k@qZ?r?>z͚ a?L?N2澎?Gm?Ps?E,?j_?C ̾]J?>< ?0?1?)?2p?His?N\hӾ3i?.O 1?^Bؾ;Jg̾Ҿ?E?D/h:߄q?B>SrVkٿ;r>뿛D?{P?,fܽ81i?Qof>*?=xȽ@D?tFƾ}+?p/?;$?alǀ?J ?>8\,:'e@?.<:t(r; Y?LS9=n?I9r pbH?Mp<*L>?RpоCLOq&>c!φE_h?4xݾY.q<?;{ῄ%<:?C?o?6bʉhetR,?Ѿ?опpؾAW<Ӣ "?ؓ?u9{?OƿH;?:ľ*?H> =M<?CVYh@?k?C=^0i?9۾?w?Tɢ??UNS<0ྪy@t6?I?cI?,k],?U??Aӿҥ?I?4cD?Z%4~?rnT=\Z?\oyRc[?H ?6#?;;X^?PQ?$?_8G??;Ľ?\r?,k?S?:E-?Ko`pm]?闁Zk^?8MоRDSp65??'`,Wľ1PN?K*??߿?SWL?Jvʿn;P@@?0=.!G?)<'7?4 v?* оŞ?)?j>彠޽2?^w?:I;?Q?TcĹ?G0?(g@?1e R?B B?m?d?Mڿ#2(iP)dCB,zNcQ?0n=pΠ?:~a?p.nH(?,yЖ¾RH~pb?8>,?[LV E?d_?Dy? A<~2?n98?eؽD5\H/2Zp?0齻o&7:?RI(?6z?Bbn?/z[d?'c?KI?6#pKAp?9O/ 9aPx0 ^?'<0?8Kū?O?Y?"2|{?Dhs]ӭj?tPpp?R(X?B?E-$Y?X=vrty?W靽D?( ?LU㿌xYTR׾Ux?=+侸z?m?#?mw430&?`@+;?-FW?㽖.?BX?b,ҹ?l?8.(u?hVv顿'H? g=ῖ:?= v nz?y! ?C2 ?f*^ #!}Nl?NZ%$D>?8?!?x,쾅ĮD?/p̼*ZwA\~7?kI?U[=6,?q#?(?E2*'#a?Yѿ|Q?h?ZwA@zBB?S'S?3$A%CLq=¿y?tw ;@=0C,`@=}m??#:񪚽5?= oJG2?K?2|Q*?@b?^]P0d?P='?U="?yLc?gؾ+df?瘿)h^[;?޶W~O?F\<TpJ,=W!Cc<~4c?/ X?M?9???Y}4?>xs?)ƽ?;&?Q  !8о#b(?Rj?Wh/? `F̾g?7?i ʽh~?tgh{𿈽̾:4i$ElX1ۿrg 2!b?@?0?}?Nٞ$5v6?cV^?ADN nW?F@?"H?N׽_}?gWӿue?|V{ؿY< 8r ?@q߽5)y!(e ;?lL?JWLԽ ʽאv?.<)=^$W^?N!?;?A";1-P?\J?2(?b~TcD?3(?>?vZ?Wq?1?Lv?Lj?E8?־HJXVƽזԾ^Q¿?A<]>7?>ZtP?\ l?7\Wv?|@?!J?=m*?Oj5QOx l?`@WT?F1׾MXz z??󸿋[?T%?O g(?$ֿտzco ?4"|پI[?:Ž<-$pC?0P?S'$<X^? پ?s?Pń] T?F ?[x?N ?6 ?;?E?.t?>?W?N{?!&|ȝ&eCR?N\;?Z[?6U?C%?P?o?'Y%?r>N(V?Z]=b?9f?v2z!'pb㿄޻T?Lx?@A@Bŧ?D|M`M3_Ln@?EJڽsP?M>mϿ࿃aD?l ?;/㿃\۾ǾK.I=r? aOu?KF(?\<|z<p?UMP?M=?b=:?cO?0Li6?Dd*?Rl'>k6?%~<<??*?|w>Ky_?8:F?IЦ?nd?Rs?g?%?o?1k6H?Y~5[?_n?[|C|?f>`?I()@3뚼,(XP?-{?Bh<?Q=C6vziX@WBAB[zH?m4{|?tj#D?P?.>?XVB!B@fUaAş̿R2K?p?/ž @)2?Ƹ?aȨ?KϿx^LÈ?6?LvgmLlf??>c.\Fƀ?Lr?`5̾&;ľms?[ٽqì?A85Nоgf?),s??h?tC@'?Cf?1? ?b,?9>?=!T?2D*?D&r?F7ⱾT9yI߾bp;[}?VVl>TU"?8嗾uF?Ev鮼6|W+h3J; @?O&?T?HrX9\>K?H!T`0?g^Zcp ; l?Oyz3?G?84?X?MӾ8&&?'OK ?I[7?@v?3zi9 ?IBX2uV$?[-ph?G~?RXߤFl?̈_?۴Xz,.?6`?k$Fv?lnnYi=ڿ2H3>ޏt?4?erؿ=rؿ#]hxg?/?P$ܿ};?9?`N9R?`u??Q&j%_?)~?=Prl?L彈H?_^l?z!?<50۾YqF?R?t]?ܽ?&z?dtBzAgxAxR?sZ^?Ii<0X?X6O?i2?6I >?B?V?,T?J?MznuxOJ=s{c?B?{l ?Qz?+=澩? $j:?L7$?߱3?Q?]=`@2'l?4'`2jz |R?Y;*#|{?!%jhW!?hq?TW? 2O?/k?QYq?ž!ڽp?ۘ?5ܾOt?8aRŽ$z>U???9X?lV?Q}?MdlL?ic ?i}?7|,CuAnZB>6L¾$?Fs?ocp?OVHx8=p?DA@C7BGN_Wp=?2P?hSj.tN?7sھ#e?\0?[/?Qdi['?@־-?oR?H#+;fq?7?dhH0N?P'>AA5Je?#L?Q?%y?j^?6}?Q?s?e ?C,N?ȴ1?4A3Bf ?Jr?;m?e/ؿ?Y.O@qx&-?c|1?8?K5?D-+*D"پ-?s"???!Z ?9K Ar}?UfB'ſr?8_?,"??;?>"L?Z!ٽy`'? A&Acbb?c~IZ?׾lҎT[?.+`?D?J?.dr"l?,_'?@su%?g?O ?)ܽȿ?L17XfV?6lD_?"?BKwh?Fv?E5M?Ktv xK S wƢ??T??Ģ?4R~@=!ueо*tݾR?;JA?M,V|'? Ͼ` ξUlj>ԗ&?sY?D?<"?d4]v?ܴ?G,+0?"JE#?W``>6?_y8D*u-J R+?7k?R?=+@\B?dArj\@S}p׾N/ ?8d{ ?"^JVB*B !@e?:?[O@$Hm?O?]1?H+=?Uʬn>[?%%u)j?Qd4d;&9 ~?nf9X+|E$?[At?+L_?H5~:1`d<5 ?/.?d-?ftb/B?> 5?{QP|\'ؒc6?K@?> ?p?Ma⫿f?P࿒HjX?@MTb|\xwZn?5~ a8??:?>5p3?sN}q`N?M=k? @ ?V#?|/~ ?Cv?`?O?XCAB 6Rj ?LX=ݶ&<"P|i׻րh*ͧ@MYh?;?o SAeB%@zss?U8?gƜx㓿| ?[?Kpg?tǁ?@=80p?LY"OM=3P?TT⾜5=?Pw?Gw^g|?\T>?KJU?&f?g??i;L@v."lܴ?4xV.?.3C s@Tv?O6PA*¾ ݢ?XJyP?\$?6?O*?5wzcj?x>ʋ#X?.澌0\?B?Nt?\ϡ?Pܿv,?,?(q?)["?0н?,v?.f~?ov?vӽx0>i?fQǿe1F@wnYCGA>j{?m?_ <:z?,X/ O?B?wZ؛G?cB?nBA?:jh?Jm? n?ZJ~?< >W=wD]ݿk?@@c>b?'ᚿwZ?|vP&??+dFfYVWϾ>D?wr??oFH[@= "?Ҽ'4?`Lt?^p '?$O+;x*<(??6@05?:a?(xe$A?<\ƾm8?D?}?v?a\26?' ?O3QQ?HaS  "?%h{z?8R$DP"Q?X)i&a2}bW޾@?I?0žͫ5*pw?Cֿ?5ܧp8}?,@b[?];,?lݾA?[n`?9н ?TツX59"Q?H? I?L]?_bg:x?,S2!DaP?' ?_T?}oz:u6?D?P?>)l7l5?62N?M0?&A;\t?BP?2 ?I0ɾ(G?SC?GTWn?Pп0 B?S!?&R ԤB?%?NS*?'ls?I@t?I?@%?ss$u?]?&?F?1y3/20?GU?!˾c5[jFӽ qf?m84?{?ؾ@>M?iH?b6?4WP;s`?Jb{?>.ms?+;2{A?`:F?Z\CW̬Rt&53s?E˼hE<(?%[ad\[w掽\N?թ,>&} ;C (࿇@^?>?g?H;`?E8?\gy?[K:uB?KYNA@C,@r? ɿV꽃Puq,uy ᾐ~t`S?8ҌHPdG?@3?M>=0=,/?.(v]^?RVU忏`-!`M?"%Hu?M.+?Iab[-??XN?%JP>Ji|M~RZ?(f2?a?(a?\JS?%潽5$mo?[)?J{?ąvn?g+?5?ST?% !gd?Y?c?|E-o3?^?.!#&8? t?H?=`'X}i2?_O?!>_?^a??N(?M>w2?1d&@O`*?!?y?XH-d>??TʿNՊ?v񿌶Կ5ɼP?ݪ?c*B C{OAK?zZ?S*cɽ~?OU(uȽ?d??n?b?ָ߽?n&T?c%&?@)w?m?Og,#\=0?,b@?JtӾtCo?|?5(?PK=?T_̽?g?4n&j?IW)v'??>=NcJ@?rf?Oå{?4,?M㿜/?Ne?Ҕu?M?S:?!;L .־pL?Q (?PV?<,F>3p7?;5y?3>,?4?\|վ1T?!6꽵x@(6C?;۸9щ?{=5?:ۿ>0WX? ?9?1p?Lc޾;Ę?3N&?+Խl?\Y?"?3A޼?,?OKɾ>H?|k+8?`>#?k?dkԽXC=AM|?w?[O@I;F@?jc90kD(AB͖+@|Z=[*=.? w0?0f>JYl?1Ѿh?o(??$=P?.K?i)C?@O2=JJu?U?Z ?A?k?!/TA{?Eh::/پoy<7ټ9H?tVvq=3H?E?S=D%2;w6?}fm@T?\=7@7A??qG2_BP?-A(!k40>cB1n x?'1?'-?=?DDA ?E?#K?+s&D?ҿ5i+ ?!f??6KQ?]?GH?GvB_?3?ľ&G^?Qct0?@ƾT?M?˝Th60ؿԽ?E?qS?Xh?d̿SS ??2鷾M7?S7}6ο!I#?vľ(wf?L?4 2??]` 8'r?^r{ ?ZzA?]B<*tC[xB~Aa(BW@;þ<0?WU.F7<?٥ȿ?ZS5=>S J?vP?9]w"#=?8+^k5歽_ޔ?B?&L>־IzD>|?bB,><?u:|-?O?s*E"y!?h~?af?GxоP^? 0?TkX= ?TL:n?<H:n?i%?a©=&ؿ5e?XvNȿm@;?C0=zZClp?_?N)>̎?3qɿ?6n rHk?(?ZQ^?wƾ+ "-6(TX?3C8z?R!=伂\?'K?sBH=ɢ35;PF98>@(TAGyB+@{?B :qBz?X?vo;@?U}ܘ?*UG?.=ʽ?GQ|a?zDzs?),j8pb?[V?]&a?4im徝!@8@@;+vHuICgK'?c͢?&9@=o]?dӽd?@?J?0 A?Wؾ4y&XE?:?3&<Ky?RMɬȾB7%?] ?Na{k89<8Z5?AH?R<?KC쾇޺?#xk??p6<\e ?QFb?牾WXJmP?[3??!?Vw?8$(Qq`޾’?bP?p<0>͂?QM?S@hGG?VվJ=8?F8>t=]\AAr@6?S)?p-ھ!5tY<;?,B?hjɓڢ!nB9?W?QZ?Fl?{\8=X?{?O ?HR>?1V?dɿA<X=`byw®?di>v-K?1˒?]jMIL?O?uO?!L?)P)ܿxK?tD?<,{2Ƚ?Eq?أM'Խ?b{?57 ?tsü&h??پ) ?0y ?S뗾!ݾ/ྊ]; ?<&e¼9?'9ѿ?SN?BS?K17j-?A?Wf?T?($?:?ξ`x?xD?_ߣ<?7ھ?6*.?e?d0%ϭ;?")"<\?V> .m??+V?OBf?^ {ˍ?8Y??! 74A+ AK??&wfg1j?UHU+s}^֊?+80K??uּ?SyfE?O=Z? ?iN9zν=g?3 A ~@-??>?5ƿ!7??#|?O(%n?ˍ ?{&膊,h?BY?a˽BP?̿˹<??WXD<?8|Ծ?/?:޾$ꪾLB=p=t?;?+D?LƉ?CO?e3Td*ٽn]?AɎV 8?.??zO?׌{?D7?3?v?@"p?5?l?>ެ:?2kE(n?: ??R6; v?V?gWr?&OA!E>?5?^>κ ׾W? Mhm -6@]X?%y;?A??ۜ?`sf ?bؾ8WЎɾMď3_?T?1? AK?HqAPBI?b)<.8?J=3ȽhYٽ/7`t=߬8=&J?g4?4Ľ:zH8I3?e?Fu:^2;D^^@1!?eg?=U?^;K+^oӾvXP; ?[C>Dt.,?K;=`i]콇c?Co\?-x?;?%ԾI/s?Ot ?i}?Wz־Eo5:d4?g^vE_Ð>Ǿ,?c,?7ɾ"_9~o8?J\8ý?XG?ת(S*'?ԔA7@󯽥S p̾\ ?&,Iv?^]Y\r#?@R ?:k?8;y (?9^?1la)e\Z?$t?^E?Bv?_Ng?jfBE ۿe?=k"?a*n@D@??? ?)c ھyI!?[8?)^kӺ?,6?K+k>C?C?:V1?T.?`d?jTv&j(?HQ4r&?H?;h '?R.?\ȽZZ? e=?h޽ȭ??QiM ?qyg ʽފ>V ?B鿏U?sE*NGL?ok2< }{= 4?)diP֖?Ec?]%V> 9m?Ca`wn?́*|?qV? Q?u<7=pjMg(=?w?^?_M?L ?-hS?^X=;4?+t8Јwȿp׾1[T9?y!ohn?Q?Nl?;u?RȾ "p^Q0?U`>D(?clx~?k?t?W;ü> nH.pBB?N ;?/U -/D?`羠9~-?`?>+?L.[?TP@LGpRum0̾Cw?g=ٽLq&?+@EȽ!"z?b9 ŋ,D?$%=?.?L?.f0?J_8@ Qfݾ`J@ xT?K3 VfŚ>QԾL%D?@<޵?+?2u ?j[&?Ɀ,?10iX?2k?'q %0$h=4@?3 >˽?>!fDHc?Daă?ᡨ5@?Hu+:^?L`BGھF?cDrqu?]4Z֕{Լ?@F?=&j?Ι?7. ƾXQag¼T?)Q?!P+2?T(v?`JJXdH7⿖ߛ;L`^[nQ@?&LkԵ)?NP۝?mWD7C<m?]:?=_9鲿W x?W?Kl`=U1꿅cR\@O¼sW?.x?Y^|s>+J+5Ծu<<}?=43h *?GN?%?O˿V&\?Xp<%?q=<3ؾ3@:eJԀ?H㤼ȺbU??x?&?.ˬ?92-W*W?I?d}⏀`< lV@T?@?u"!C󼮔/1<|}#+M: ?.?0]'4?2h@7@+4?Q;Ӣ`?5?6:?+݆?gu?ؾB a俕@gub=]]X?! |$I?,c 8/F)?JdLQAzq\&}>(J?T˽R$0N*0@? ̿?: CNf0,|? ٿ?@?P?Ǿ@WȾHV?X0^z膾Z?E? i ?:ξ0#?"?2e?cb:i?.C?H z ܾ iOdd?-޿ gx;L?B@_V@5|%l8?eᨼd=?Sվz??nx?5i?|pW);,|V?Xؽhhvt8?P!Pq?L ~&tP?EZ?R?UtY >e@?oߙ\kD?/& ѽ%?9$?ZYo҈OF d'?X?@`&?6@d)0ξ̾)?@l?\R?`Fl\|Zi8mJ `?Wf2?1Ŵ?Uw!N1"[.?9?˾!祿D '(> *?/J?JX ś"/?OK?,S9*?-E?H4??;l?F? *!6?'?L=&dh?L;?JA*?M-^н[? ~%'I@>l=?9\﮾̖?/ᦽ>*^zE?6?UN?8=-S@:\$>fs'P Z?¶?vU?\Wd(z@o?;?{۽y=0 ?pY.?F/ ?P5?QW .v?:8?mվ' ?ejz?bV?Jv, [" ?{.;w??ɠ?0 ?6AlXyxPKR?蠿xq?6gK<d,GFҥې45?A604\r7?-P49$?FyKNR@+U:E?Iҽ$_?d? Hh ?"]ynr@(ھ?P?vB L,ֿ{O?Ј =+@?&cþ v@,h)Zt`M?"p2?W8C{):?YFX7Ì?,w#aS2.bpV!?^Ⱦ5?L+Ș?<:?-S?CT~?7[|?g?AL?<s}?W(}?X'4?3)" ?(T|*Pְҿ辏@ᅤ?5Y˿ľ?G K~=x`,hw/ls&^L"/?,=݆?N>H=0k?g:?6D?#?Lpl=4WT;;忒>?L1?v*K)Hnv?'fa=>tF{?Կam?Y0W{?_?@W?.%&hC+?S2^?X>XAb?@j.8?XGr&?)0?(;?OWO vg4Ljgei> ?@27?OAp?=ݭ{(d~u;?zMkHҿx^?7*Ơ?H?Aο{Հ?Xf?>?U ̽DX ?JsF?%ľ8Լö?U0ν[E&AGN?".?gҿr?-r ?faEK!?\BٽMн:RJm?$ }Ծ?z^ASB?3?a<@0?<x?/Hx-4l?Ga?pqbѵ?U{l?7]vپ ?)-?F?C?c+2D;澢L?#0?6OJ6*jS(P???Vu~v?7fX?E*-ct!^kxby?! Sj?S?!AfþL(?>{̾?U>뭿cwɔAa$? *?Z>y0y͊?V =?ý6$Nw߾|Ծ¾Bm??dLpR!?^sT?@?RT=J8@?;ͽ1?"`n?eL n= >Tn??Df?9??ZP??a? k?;r?EW;?e2?6 P??Oc*T*?D)Ao2?:?f5?-aJw1l迤N|`I,xo/4?P2VB?7?_@,6?8N,?L<-嚾 b{ c?Enq?ef?7 ?/>ܱP?G ?J.?4>Ҏ?FX?G=5?F-u> ?NMx2?Id/?dZ?W?o>b潑 '?KJ?<T?Vm?|?ptyz@\?@'gt?&v) A?0C9e Ƶ.^r,?$#fN}?F0?I!@+ƿ?b8?-, +?cl\ W?DtJ쾩J,9Yz/ܤD[?-c?E?;W?&Z?$?kCl\??gaX ,ף?8csJ0>p=5>9ʀ A=`phr??@'n?]P?Sx?Z<֎n?=3K?APm?c`-?+B?7?@??K{+ p>§.?$]=%T?o;W?`8?7"Կv >+?w?>W?Rj^?y?9פ@?=?E?կ@3?>|??=S?[ݿ,b?P?0sP5&鿘4R?+?(?Utbo?t⿖=kX?(R?)r?\?m)?U.0D?K>?6颾?*{?MC2ȹ?@ѽ??M@? &\E>Ծch?KGʿ{Rs?nf/YCD]&Hjۆ迚xxC-.?YԾyxȜL~W޿Ċ?ڏ?\un?c.2k? S^?Q?=.?`ae{?7ힿM?,N$0? vd? U?>?-R;྘h?ج???ED&wg?+^8?XĽI?>O"|Q?N0j?c?u~7gH?O=[;`7bX?2:>EɔP^8?Dsi?\`Ծ ?n?PƔ? x쿃ݾ©VpuO|?Ӎ\?)T?D(x ?F?[@T/PP?SC)LzDY?#>?# >-?t?(k:@?Q4?Pk?UJ?P?8?vhPھx?_-?Ո?Dн1m?/s?K:? %?нx+澰?bt1?5y?Z#],?=j?Q== ?7XbLʾ5ؽT?%7rO̽g?+hF?9ؽ,؜?*>C̾pjI?zNň?0?\JX򚾍b?QN@.Y?[,,$V?O?5mcq?+m?Pw?G@?T0'~;>_?8?)?/DLE~?c\xpw"錾BQ\nl羒k_Sƺ=bwp>R(P!Ͽ?N蛿2MƀJ¿xW RMt=T@I<?BϜ^t=|fǜ` ?Dnȿ?_Hh1"?7?k˙e]VR$?N,Vo> ?c?FoԿۗl}=?cҾ?I? 4$_<$??q?9?.kk"|?>Ι?L?o @_?:=m0?P%@?YmSRLDl>?Hq?J>6.?a%?H!?NTھ?:)?Vo?C"?BuǾ 6?%1νr?4?|?jȤ?V?lq⿛FN?܀?X BAKQ?J?;?ȸ?(?F?:޾0q?1ƘZ?~??2+?WU=gDŽ=7[qB=$?Z0??^? ^߲H#^&w̿Y)?)(n>^}?W'L>hc?UR?%н̾>?`Vþ.;2 (1?0z?9oվIm?66XGA?/:x?56??rw" ?;翐unG?IAi\W?RM?*՟?-?d &??;O?S`?1qǒ?1?RPhk?IZ<Ï?VjHPd?Pc??U,\t?Ayw~pd?fk@1T?X0WD˾z?aȧ?9b]M?1#?TdS%?J;c?2@?k=\Rl?H;{?,?Ǘ5@}kY;@[?R26 `>inT) ?鿘3oA?9?0?dJ&?EX?0%|TD*:ϥ?Z?u!?RBtD?29?idvO="39??濖4z.Y6?ဿf?]??W4۾4 =?R@? ῌa?R?5?}??zd?.s?9"N$L? ZcwY?fAGz<'062?(#"?&r?Of?d@?J߿⮿m?5+cB,TyԾz?뿜?Q?)m ?HT?;3tD$?q?5?n`?2 F@>?&?A?k??0#%迈nthő?"?=yP?\H?J?bz?D z?S ?MK?G?1t?琮?~D?H ?N?k̾@ a?T?4?^U"<࿍ h{?(?I`L?.M,]HÔ?z?yq>V̿r\N?2̋@L>(? 8O?I?-依2~罌Ct78yC6-?HT22 v) ƿl8޿ )r@W?e!?p?<<P>ռ,ҿn?T?꿏<8佮d?=7?\OY?nHhZ15$Dɤ?Fp?:.xu /Lߞ#PcɱLjbh*׽@T?WϽDjl[`?IqоY?u *?TW:GW?R?A!޽w8?H۽cu?:x ?=2N?JT=oTgg?p[Z?G ?`3?*;>?V+5dY4C:?ĿƽB p?F=͔";[t8[n?;Q?#7ܿ~oZ?@?_F?2D?$?te.ν覰E8?7M?=1?Ho⿌햾f.9?4l?'?XK?ܲٿ&uv޾/]^P?)u?B2?@*@5L?+ݾ徖,ol}0n?ۭf?ֿ}? &V?G?8žg v/?t?`F?I@ .?Z?"ྱ*vտRu.;x`?V -?\M!Z?z[?Y[A=tҾǞJӐƾhuEY?]N˵"@0+rȾ d7=tCh#|!=-?!.t`g?MDYW?uؾFzM.`uAfA?E&B?K,M?~?P _oGBDT? bQa޾A m?7?.l?]jP?`RY?xa?Ί?@B?Ffᾢ8.??*3g?tN⹽P(Y+?6 ?Lj?5FŘG8ES?G3?+?B(W)>?)R&0ʾZf?p?[b^ t쿥 ?I?z?NT??|R?;N?Q(<ft:%>$5VHp@?<о?Dl?>?N ?>0 L ۩nwfO}?^f(;㾑!?/z7!l?)p5龀,X d?J?Ih?QCc U9þs0x,v?;ˣ?N dU @ʽX?JJ?Y?S?X䰾RtCzΈ?FXלDft }<`CȽK?]k=lֿ<_?H)hS ?,꿒Qy?7s&?N1 CQІ 0?7$fP XjC ?*n?Wɽcsw+`?/v=`览/?K"@͇?⽸*?D߾G &T=d`?>CB?,位I?&[;P"?gpLe|?dE}?#czw 4wY ould*x?_=oT,ܐ2?JJ?Fn?۪/,?!r?z?0vz?DA@--F[?V?AhU?4Nx?cu:̾N?lr@?O=-럾 ?-̿}VA?^I?)Y0`?;S$~?KψY?Fqޒ=߽?\?=?VR?9ӽ6(?*p,ZP?'/?ti?6e1DD; l=[~{>3f?(`R0bRyfJv?K}?QOT%?h?[i?vI?˿i󢽉g*`3;=2?-Iu?OF?Z?>_^ľ"?F&??f'?+*?nDr?J?eQk4>ܽ?0D?C6Ŏ~?֦ϾJ?ZSjƿ-}^Yn??ѿ\=7?k?}b?E0JV?u#?Y?G?JQ|? }>?'v,{f?׭?M{?L,R8v9vpy˼>ѽ?&<&,b?:V: =],?9z?Jk<@8"J?~d-y?KF6侎?n ⊾?@=z(P=?/y?XBB4Z?^;=_^?+?]>!H?ha?[K)?0 ?@Y=?I i< ?K*A|V?Z~p?Mdk5ܽB?9Y9??#j?]ā?\߾6VpWPʽ+c}XV?Ѷ俊 ?:??L\?]AUv@sC h?UԿQ?-iT=2O?W ?b@Apr?: y?S?t?[?9?-?SG?^^!W|@:@'$jC2XB?\߾!b?#M[9ߍ;4@R8=?>iR`S:2f-uדUe?K?q@QF.g?@*J?!-! J:?+L9?zMa1Pe2???3@?+F#ֽ f ҽw#h M?_IB?S;?: Ȫn?B9?]>?]?a1?8⽣?@r?5?j3?Gx4R䎽@ؾV?%C%A?d= 潷 ??? ?ٖ佇:\?]+#?:;?dTH$yonՋ{??eX6?]~?;?p&?=aHNO?zh]־'?G5?^QB?? I@*ȫDB?*?>Ի6f?? ~4Q|?9?>Nʀ?r\ 6?(]?E_?qK?~ˬ?N*d?}?y_?^e2?C>u"McA?Mbjrܾ}V? 忄ܾP?a|:ƽh_ξ}vve??Ml/K"?X|JV?)s?'8K?X:q?*a?R?mkTz?]Scv?c½BGpQ2?4%e?eq?J-uu?C cAPj?`c &?a?U4?KsO0¬o@uH'M?N(?ݰ?Vd}ҽ?ܙFdegИ?=}=AK>?6i?h}?/]?ވ? ׿Ȓ?r?1i>XA=?Edռ3?s<85<@ =, ?X=^)?R6#=0a< )?5?@?4w?gdQte%j=?O;-/?]X?'}H?`h?]NXD?N@ھ'??mepqbv}Vt-=?C?x?%I>DwÒ@-@q2?HݾU*l?O/"O>BHt?LD?nsM`=?JtU*?2Wo?<?Pd?l?X>μ%?E7<2v@?8?:|U>+ ?7?/E?F0%U뿚!??"29οX?:Dܾh$!>=ƿA{YCL@*m?!Z?v?10#T1?ԚUNd*?Δ?XW ؽ??ڱ?\ƿ] ?"?(Ο?Y?Wf#1"kX?D]Tf?E侚?@8k!=B ?:8IzY(\G?Qm}Mܽ$?BV?޴2?R¿ D?c翃p|J?Fп ?7#(R ,KJMZ?Q,< UÐĿ?jW?2y?.Ŀ? ?U/&?kǿ]FS?MW.>J>?+'P2?U>=z Q?{ i?I`Dhŀ???Mt?I?9 <*'06 dL0; ?M~?Tc<~8@ ⽈?^r<:byHzd?5@?hOQF+^p<`Op?|?A*?9GqD?M?>=t`?2-?gr?H?\?E?^oܿL?J? *?\DL~?%6?e#F>ɿ`j6?yF?N>νnhRR??Mr4 ?H?A0?)Y=zI?H}z)@,ڸB"A}"?0?# 0ghOl~$p??L5@+G?<Ť]0~vj9F ?<۬o\L@f?G?,?K#.s0?Ym?&?A#?4Vھ???"sο?HI(S p_>ʍ?Ǟy*ɾe?U?4!=?Q𬿎7ƾ~g?nV~\.㿄 W=1t;f@ȼ[-刿DK]d?8=Kڼ4p%ftgh!w q㥾@z5?<?x?5>G?%B;=@/?QFB?+D?fU?&1w?JJ5?<*?{t]?Z?2@g_)t4??&?(q_?qH# F?bP~?4?hf_}? 7N5\6|5?X=͢?/=0|ᾟľln۾U&Z?^V?Lֽ$ l z~.?GB3M6A?B侗jD?F:7 ?Bƙ?Uun0^t5?@%T?%,?l>u?((r?C ?>¾?a?M忆5!W޽(PӅIjP< H?`B]?(-?\zH?@(j?4%?,&_8B?![t?^?U ?7۾qZZ?8*?#>?`D&l?^efMF~w:?kQ?Q:W R"H>gMy{?Swq3pt%?cP<= h_p Mdn?(u<,ĨuЉ?a?O$?xHFf1轏+qfJsܽ&Ҩ?&?/,`4IZ?Z龐vȌX^?tP-nhlQ־fi?C0Ծ47 ? ? ?Z-2?<9࿖:=ƍD>,u=^??D(5̽ܙreӲ?IZ5Ӕ?-5? Y퍾ξĵW?;7?> J?DN9 ?0CF?𛾉C"t?BT;J y??\1~?3&:4 ȿZ?U$?,U?Tl#Jq@?I& /?1TiO ? ?/jb@?#?ڋ>x0>A}=q0z|ɾM|tI?jSKe?+?*L??St?E=?=!b?I2?\(=tRCz?NGֽ@ڿwDx=ؾŽܽrc#/]_N> 1޾5BR?I7 V ?r??y$?:xj?t3?M8nh*7`S!?VLd ?9[?/ ?^aP?` ?dp H?r,)><= ^l1c꿕ymʾl83?//?4?4ܿJq(?gDRPs ?[Y ?6;?,K?Hǽ@y⽕? u=lqX?#%:?8ż@?< Է>0Gg?+M[\?2w "ֶ{?B=b?b.?l?y dFJ7YB?RIp=޺s?h;?sܞ@@%#T?h޿e??b?=:o{ҽ%n?S_" ?B(Y)̿\Z?YW8{:?N߾~)i=KxF<?ߟ? <͝?OG&I$33?,b?:ݏ?O%?F]Ƚ迁e?0?S?N?D!?K?n?-G?LS6?NX:,a@*?4?$?ƽ??%|dϽP̾)߿}`~?Q?ԥSbF?FTw?Oʬ?KEJL`?2$?{?0?W'0?^YS@ѽ&"?$&~~?5Ľr??@V?.T?J?1p>Ih?Ps^Q?(K)?QʾWξQ۵?2?!(?F1ܿV@?G/R\bl?G?$6MHSֿ j,B{Uqݾ??M\'o%?Pg|OAd?]l?̾g??q.f?B?J X?rc꾆Ľrv%45?ٽ?8wl?Z!$ 8&%ԯ0?++;?{5K=?c׽ ?Ћ辈%~?8a߾]tat0?:?g?Sc2?"}?ʾr4<5hCl,p?ѾF?`z Ya?迈Iᙽl?]?3u? bU ?.KU?.??J9=Fc8? ew>B?0F8l-(?4@.?@>|`žj0齪{وԾ ?k+U 1?5ξvp=l?>T?E(~?bh?Yh> p˙-+%f^2_ ?}(Yҳ<0?-?\Q ?WV?]z?y/? k8)E@,?N?'H-m*>-4d?hߤ*RF?N?>`< ?E͎F,+P?*[Ǿ ?@!wܞl?dx|AB??B$?aqQ?Ʈ*O=gV5SvF1?E0{s(B?+?^ݗCFiJ ?UA(ľJ?L~nny?Eп?>Ȭľys\BU?0׫?꽆}>?J_>G>q:?-Nq~n?'^0h?:翁Bi վO޾þS޿? k?02r?1zyf?_FоW迖>=c*?D#hB.?!hBfE ?ۮ ?wW~,u=pxb0C M?T?QBR>i|=Y ?,F?W^g7A?|1iYܾFa?꽠3\=S4cu<'m0b?c~޾r{bu远v?ڿ. ~?FоF%aȾlɝ?Lj ?yI@(b=L?Z9@Y^s$?>A,{܃;?9O7?=5`]?C"쾎?]\]5XG>mLAO3?B1Sõྜ'k8+w:?ؖF=.?LhI?NOGrIj޻`>?_ *~2?A`Y(+Ľv?μ8>?\`X?O?H 'f?Gz?6SV?<\ټ{M?b@?'&=N?W??-X*?S6Dཥ*8i>D)R-13&X>?-҇?;%?v lO?S?3;2G,T?2?Q-p?Gd?CXG)gH4v?%2x?kn?R?B?Na?PJ?ꭒ?d?%?]꿋bG=q`?0w,?3X?c,?p+ ?U=޾!h?e8?[?E?'nXDGɾ{L?~U? ڴҿ!?n(qp@(3d?H=lhͿ]?`OFnG?eQ?>J !?o??M;rX?EvZ?;Zu擾*H?Jd/?!x;E ?Dd\,!ڼŌнk|?_??):O>Ac<"o=⌚?Ok?D?H?I?zɾA}y?`tÿ?m'7Ee?Y$? W?h e'^*1?cL?>ҿs%o?]Ѿ-?/]G?xാhIx??w.<A.ʣ?A?Į1?"ٿz?C , ?ڵ}?S?~F?H&=Å?8O?s]Zr?@MH?p;>%Ҽ\?+PVH7?8Y(?JmRa*F؉~?/p?Bb?0*?b? JGi|?;:@?z~?-1t`?N!?%a:8n9FP[?KG$?2k_?3k?+8h}8X/i?:?8ݠ>D&\?9'>H?Ԣ?Y!?̈́?H&?!?+!?i -E?6͹?F??I;?1 ĽJpV?K?h[ǽajzf6^L4?F??7Fʾ+0ɸ?2Z)D^ ?Z%t? @?7G?ϴ?bl?MEY\|$ ~?c?@Tƿ.?W ?fٿ\5?;B?mn#=.vT6?F?qg^?ThlҌ1M z-77?`켱8=(?HEu?,fw`?a+K?\S i[08?WF?>@/Z оa9?o]C?H"Fmd#?<?<)?r?Ok?ۏo?D?q0?EH?.ԾA?JĔ!d?{S7J?8C?]p?=s?j?ؾ??^ ?FSx>&?[?D"k ?,g?6d?-xɽ"HB?` p?3?L'?NM?Y?8V?Wۚ?AK?z-L ??ȿؾ\06?ndt@:㾘A콤2!hwFY_nX[?MD?<8@:xy<85><2³B?‚hR<H?&O ?h]3=I?[n־Q0?1C}L?d\z ?8t?Fп}:.H?9?bR DR6/f(2?a+?pq o?e?9 쪾8?cf?1M ?`]4?CPMY;'F4?:5??,/5R?,̿kO?If?(Akl?2?.B?53ž[-Z@?BDX ?;6?>|"x?Tbξ?$p@kYr??a?4X??\r?8UF? :4??O>q?c9/B>@q$==%',A|Oɔ9<ꭿv&@ AJ ?8_܄9?ahA>2~<&@<>`?(H ʿ?j\4ApiN~?sJ$8?9&TWj: ?vf~;a?IdU:=.@V70>$F'? Cx ?(=?9D0f?S"?{Kf1vȿX2> ?I_>qW?`fu Y?)Y?Llp5X?kE<sw"?0t?H=j?){c(|_?Q?Op?Aذ?Rw?q ?C[BfE7Ҿ/辁A9n?*s_1`rx?9v @o[\Nrrƿ?9 ?;'M:u?zRhb>?0T?Tak?sBY*?/v% @/4?W?$ǽ&,0.8[+= ȿ]=tBK?1%BKMŸ?<%H@-NѤj`?.?0?u_xy|`?وBh怾ZK?I߾= yFQ?Z?0Q?FrO\i4)&N̾Gs?,8zH<7c?e ?);>? qLz̾H ܾfh(?%?E]F?e?="C<@XE?+P?!` ?N_濇 Fߴx?16$?8濏D?$?{"?dY.?a%οT?~.ƿ?drp?H8)p?ϾJ4.?l8Q@־~bmZ?='?[YY,?1X3Hw3>\K\?8ܿ+zӾ μym=s|"m +J?.9h`|H?S?gD8J? ߾V?e߶ھ<?w ;?WB?|OED?Rkݾ85-˰?Y2?u@?8?KMοpͤ= ?"Ṩ<8]v?>޾6L?'P?@qv?ྕ>|?F7?yPX0k?kC?>=14?BHԾh#?f ?8O%?FO? ?2?Р1v?%˾`>-??Ⱦn'̾?IuD/*8?+}L,?a/B ?'>a\ժ?D.,ξVv#?)3?Bm{ƽ?C?lA?/$@1(=?-H).Y[ i%w^(?Fc7?Z)VC$sﰿ¢?G`?It?`}0?IN&Q+p?hȤEy4*~F?uf^ɾW̽r?F WX?RY?>3 ?iJ R?X:3@G1I?c< ?sa/3Wl)7X'\ϝ׾往?:(8?"L@?*Ҿ:1΁?+&t_j?{h q[?F?Mr??\T?=~?)d޸?(D?YDf?ӟ?De: 1.?ྊ$0t> ?rľܼ??^?[Mþ7.=̾~?Q\?EP>.N'?GFL??N+K=2?x޿uM}?VS=9 l"?@y?Dʾ? ?nȾx+?SS?-?HJ!)u?j?,=ⴠ?5?\FĿj޾?1Ƚ?KT?P~D}&?AB\?JN?٪? hR?=?>V?;|俩%!m.?555|-t?;0? >UhY?j ?žg?Նw͕{0d)gοvP?d"_lԫw?Ic   ?HBh?Yx<&` ?? =*F:?d/e?L?.a:*{l6?{ÿνF.p?Em?H^Ȭ5[?QVJ?)뽿?4%?El \~_1꾀<)&'?vl?]$?f?P־n?ּ?`翧?qzAv08z?2u?=(Aд* o0J>md??KM'ހ?GrDQmþx?#p!t$OG?84?BM\#%]!h??K?M,HrvξTU5ſ?M??L?*J?f?!dH}\t ?0T6'/׾uB?R0?㈿v@?7@ĿY?C!t?euHQNxV?8mKR?/D?=?/0XZl?4?Q=|y?l?х?d4b?B':tg?K[0?+,N=?.?Re@ ? ^q?TÉ?fb?^9??H?F@z/6?P* ?3,mOܾ?>?aMV?5D??$Œ?Oc ?*N>k8|-?J-?*L?Lr?&{!?J5?7?ArqP?i tWҾ>N??Nlv=P?T|?[` ou? ܾ_@ܾ!8?L\?'Z轗濕 ?OZPJ?K^\ D?;侄% YT]`\? yh$?h?x?@ X::?ڌܾ!?6./l?AX,{Vq[?Ov>ٜ?FU"? ?̾-.?G^78R| 6ǖ?HƼJ8?9䀽2@t>? tMM`?Wϥ&?.8$-C?舽>\E?>I^?dੀ?L?2T[⿎>_?^ʿ~lI۽[(?}u P0KS_⿟{4ƽ|N@} ?9̿y?BYr"᜾a[s?y?GFN]H?Lf@ֿ4ٽuT?rGн°?@?Yt.?g?eń ?k?TqL?.z:*,?^{?X{Y?a6z6x?"?>?VDyCľT[e?^WjƤ?- =Ӡ??GGleW? _P˳ l?<оيA?'2Dd Z?%F<,?^&d?8<%4?!߽hcؽ>e^ \OV$?G?SDL?MξlLx;?LR?G6U?8>FOܾ` =`CAcPa?;wUFP? "佱?tƽlre ?'?Sq +þ1?;*[)Ⱦ/J?o݈WB?[RW?R-])|m!T6wN'0Կ)===q?H6>(.5l, ?ZC׾xѽ֠ʩ?[aq?87v.ྂjP?/.?C<??ou:?1]- Z?`!B q̽࿙ ۊ@ý^Ӝ@?AT?+V?N%?5V?Ji?N?Irz)yNV_ľ>?p~?VD?AjN@+*?J6ex }{?B-?Ҿ|^@350Gi\??[?/(?R?M?YN>?9wT?$ZEAd@,?REY˘P+?(uxe`?S͔ Fq??򿘪`Bn?<ڐ? ?E?1%>(h?濝+?^ÿGs?P/?O?5.ln?W  ?q? X0xR<ͫw?$ɿdϽN?n??H4l?' ?1?V~?AJ>fT2mVH?y*(ռ .?DŲ?N7bOFN@;R,?/L-:"?@#d¼v?<"k +缿4.H?.º?#Z?T'Lnڿ?E?>!}p]k0|%6J`? ?O?Ͻ꽌I?C:?Acpf?yA?4Bb?Z7qV޾ҳ?;Y=F?UĐh?Q e?;?b*?ȾFT?@ s`.v?fW۾*6:|?뛛[?u]<^C¿ ̽S?E©;UN<>^??FDMp?V@?Cs P?;+ ?]Y辅:Z?ij&; ?TJwIT?E_?TS?,T%̽QM??Q&z<?v+}:?q(vؿy?mfoR?c}#|?>h=cھVQL?Y-?L ?B?\c??g1M?L"?L Ohr.?Hs=?SDuy?Al0?Rf?g,)???Y쿯Ng?g>Jh ؽh4>[=qX?"qj@!D?=}]В?;&!ϾPr큠4, ?V=nC?L, UMڠތ Mz?\;,>hb?%-*?St#?+ƾZ澐|?KeT]?OM?nlܾgS%?=#_SX|?L?nzn?ǽ(N|>UR?u?J>?ƾ(E?j{+?D4:? d%az?'ؽ J?=m4m¾?4q?18L?.^4xoQ?XZgę?:?V1پV?PLz?`?>f ?Tb5d0wM1K=?%NAlyb?OY?Z6̿yQj?I0;6俢tyX%xJh|<2`?R=dq?l; ta6?l?:?=*?D?,T?F?Iҽ-7?-2?^<+B?=? $/?[r?^k`'?L?К5nB?^O_Ǿ\?E[2>#?]?PYcՊ?5 8?Q?i?!YAf@ 8.??v?諽p/?*̿{,]XԾ^L?Y1?B?t w?Ey?]Q?V06?@V?Zla?; u94~YH? 3.m$bJAC6k?֚vZLοt z?I?fڽ7tAпtl߿ @kr?E?*W?1kp4뾫/-H5o=ZPx?l<,sl?ZfӽDi p1ο?C!?N?f9?kQ?Zl;?/?q,!?p :J?%~b8?+ꁿp;{pr1?ߣ:b,._)>=zK8.< P?Y?/Ei?/u??܌p?Y\Y?½$ܽʀJ?q/r?(?j1:8|"/A?';? <?ZX?F1î~th+*D?\s?g?1+ D?C?X?H?"=!=$ X ?|+?0J>R#i?<5?GsR ) ?B+⿋??Y~l䄽"?4s'+ҶճsNd?d?}?a?2=,?3qV,@Z??־sq?t`,~x9x3KH?Ɇ?4U?fӿ>ythm<@?bƾ ^AQͿe@2Ⱦuj{Ly?Zʼ?3C쾊> ɽ璾2(?݋ACAN?J;)?U?Kn?2?]Fޞ`eb?O/Ͼx-?O̜3F GU]?+Y'Cw l"d?1P? ѽ?\~Y]俟?޿?I%|N?E4^?d첾?J??ep?`޽CҴc^?J-QĽ_?aRWzؾ~3>d|m)d ?HӾ ]DQ?9s?B+G?if?Uؾ{n?2kt(D?|)N?>GNf{?Cor?MT8ݽ]?$?jl?X.?vzz?X!?R&F.&?P(?-,@ /w? 0?y@?Oܶ?V\"?3_8FN?G?Q_?&:?{F?ֿE?ƾʿsA$?,?);.-eR0?'?|x?S/Ѿ'X?h8{I?@?+:D.Ŀeq~ <ؾ*н*?iK(0l),:?TI?~?L{s`tsX ,Pս ˠ/9d'YxS[ NA%?^bx! }̽ wT?|?f9}uȿ`?UgEu.Ҿ<ѕ?V?J$辰)Ӵ&Ǒ?)*D?TR>r? gD@[ <<(Խ(?澷B>-?)t?] R/ i?@Au:0l?)Fn4x .z>?Q"q\??>;$4?+f?P@?8p51̾݇ۗDg?%(?CR~޾q[?3v#/") "?;##PJ@?/6H_u%?"F?Cǿ F?Ctm??C5|\?9.q?;V ux?gXt(?45F>=O^[M?&} 5r?,?Ҿ?~m?gdƾC]Z?i U?@2?LH(?_?2sR?qBTܰۗ#;,5v?T=+(?Gv"> f?+?Fl=2оgd.鼽Pv?=۔h?H*?:nY?K{/?O?v??hǿ?l@i7@rp=? =<?A?=H?U?Q??Wd?3>A?\l0??.C5#MܽNl'EJ?e?RNP:?B/@sO7-u]t¾ ^:?QY{W$]+?;f-u?F޾.bI?L?IھS>&?E ?9V?#-_?QYr|?g?P?W褼%?o?q` 4 ?^:?,9Gα} ?#_ ?<?/Y0?AS?߾b:?I?58?Q 4=?ƉJ\пc* ?!fd?P?Pf?Lӿ?'Qξ>u?,?@?HO S26?.e>Ⱦ? 7)(rcʿZֿ ?H`Ő>?"l iem?O?/@5Fྌ ?3H?¡k?@У-RY?+`N,:g7R?H<3?8J<Ƚd=w? 8;!Ts}>%~y%ھ-j=qm?:"+>-?HF߼8ZץE;>?;bZ:;4JL?O+?H?BJy?A ?Ph7:?F׳:w$aPĘع(?d} <!?Z? ?wZ@?=il?r?R ʾ{P߽?*&l ?mi?x*Xy^?;0{\A꿉?{技?3?8m>?Ii2g&>v?JN@0: i(L8xvI>Z2:=,?<?ֿ?L0?m7?fzX?Uh?m?`ʽSvw8?4䊽n ?% ?0!.?ÉEse?;-r?s5a?"?IO<0q?m6Dݸ?::H?AD~?4y4 Jk?0,f?7?]-$?gx`>>?G?W?R?=Q$?Y%?0 "WV? ?^Pb.z?Xߢ?H4?7쾣JսCnۿ꾋@oBn?9ؽV??־@?Y hD?r?C?6?|?2:.Q)M?]?'j6?-?DD9Py.L?er]}>idN?`?' p:>?gܾ͈[?Fr?#4?[?%'bR"(?d?t??l???-`st?c?&B9x+A2׿}{T?ο^|?|ER[?-}ܓ?[y? nPT\|?X6"?M䬾cވ?x$RnB8(DZvz?E 39@ ps3.?ZVWO;U?S lG?=?Mt6J??о$2Ek?f`F??m."?KD?CW?FFbّ֧ixž"ʾ)y3?S⿔?X?@Nl?>N?>|޽X?8'?®?NZ2?,_쿋Z?&f?G߽b4wWХ>̢?Qx޾|0rͳb :?2?4n_<>?E,ci?Nk?l@_6o?UaPz>5yq+뿋+?LI-?Zؿ,ý {̾:?HL??&>'/S*wO(T?$C.AN@#?;?c?"F=@2A?dǿ?W?Ev<?Ր?6eFuG^?J=7>,! z?.p$!놾-1"Ŀ??4ֽ*ED4:?p:Iի?%z :?z?9>zs?=gr?LX?L?Bg|H?˿J?CI?2޾?T&?/Q:оOe?I]sfqrp??Uz8?BYcVh^_= ?w5?8?Vs5t]TDgH?[(>?'IV&?]?Y;*`bGw?Hؾn"`9M-6)<*P(_#2?`Y>>a?C*?갼,`?CT|O?[Ծ/?\6s }?fJL(K>m?0?jj,?^Je5[-[?yh`9,U?3U??NZj?;վ^?)?NA?JצD?5L ?(d6?!{><?MM> h}OR?_?<|?<V}4?G?</ؾx?B>?)[Yr?S HSkü 5?1.I?cn;䣾>?3?9i|i?JʾLo?7 xv?=&?:а6h?Lr޿Jl?G?-Wھ.H?4X(ɾK_? ?a'?O7?(d?f^?2<*?0@@?=vP?ҽJ= ?I,?оBm<Զ?<֘5<&7P ?jTa?8=ķ@= ?CkA?q-A3?jqax?gxf?a~@?|V?zr?HQd0*hp< ߢ-?H#u9-?J?I=?5?VQh8ҾR?($*?Eߋǽ$%A C f?vB?Tfҿ@? &rf?:[?bE'?8^!T?,r=PXsv ox?O?"'0(|jX???"d??A?iTY5lɄB(BbCB8?C)߽B?Hn?g]ǾAt?h?Pȫ 7?G%ӽW"?R8"?%ھm1'ޒ=?*?9Y?؛>ֿv?c|nտ?%B?Ɯg]d9TL?=M?&叾d#ƾu-UI? 0?J;?>#??A+=[.?0?Ω?L?9sd͞?;w4d->?C0ץ?5G[w"p?.?A\:?NC?dp0nPCP)>K?D޿d??9z?xO:!lL?ە>jH g?!?'Ba0?7?~?RZ?Џn?j??$&?HE*6>xj*$UN?EMÿ&-bS<@?=6?6*?RW?HrQa6NM09:Y$v$>Wn> n*-?B?bV$0w?>?C-?ڿVw?ݗ?L?-?φ?70=Lоsɿ?Iȿƙ?S:?K3Ѿf]?P4?Őo )\8?8^|?YK?R6Ym:?iZ4־s>߾?3ɾ*?a~?P>uɼXr>A{l?Ar*?ׂ?N?b z?U7t>y?F)о5(?P^?AE?H @V?L3۾^+R?1?ּ(0?Ӿ09el|%Pǜםiwi=澄D+;7t"e Gfo i=ξF?`>?# -8?G ؀ľW8y?T??Eybh?2?~?t5kB?q,?)??Aap?S?-?E~ Qgh>t 4?dх?fモ;ɾ( k{d?1??G&,+ ࿀>f$?%2?L?jP ׻?3?}?Bq <@?=k?mk?^l5& ic$?p:!tf?km?A;b?`B=PNVٿ?[q,y4*5+{G?OZob,?K=,?H8rwƽf ԩ?{*?Z?aԙ;5$x?XU-YxMh7?'FֽrR?].?ſ8tf6Z>?2vsG>M?;?(?F?M"?D^+d߾lY?f,?K:S?%{OF??PL?gRz?78?ɾ>wx?F ?)Ux?'L?A? оpzH?aR2?QQ?M?6о?8(3?`?MA}?T@*{>?Bi?N3R"9F?19n?-?;/9A}?>H?O+ վ<XT?Q^2?AJ/a龷וh?+H?Rz?GL?3#?Q޽b?;?9 }?!/?Juz{8?cnM?KjrY?43ޗ??ɲ?4 ?Xe?,S\?mʠ?-(UE?TǸ?$)fV?jLmE6\k;aU?؞x{V^?Q/?cMk=5ބ!a?VFgujB?qJ:Y=3*Ċ>⯾dQ4?j|J@n#?jVB6LTyxä̯d;??i\??ѐ?}?W2?8o?QM?CҿQ?Od LuY?A7d>?hu|Jl ?CYw+{Bi]R>&T~ɒ?BA?B? (Z?%Nꚾ?k]?7PP2h>M ?Mj?8֖e󿞳vPZ~<?4+j?X?0mVvto?s? (h?&i?~r=Z?=ZL??v?ԚP$bƲ??Hʿ{栾?hq?BU?(⾺0ܽ]??Tn?3ζ;6q?B~?(TL?%?R(3?4&࿕i{#H?C6?h?9ä?BG?&9??7/?Bn:4.\?L9l?6?F?ʿ? N@l?| X^?\ vRB?S=꺿?bDj==j?81ٮH?#F %?a^8?nbA? e\%r ;#uƼF\L\0?K1iL}f(E!?S,J?Z ޾l?j*?.$x+??9Ve?V=;T?7 ~u?FvI?A*󾖁;?,9"'?H~{$?:b6?O;?SCʾ}Q?Eb_cʿm/?Ihd Ը7/&??Zǝsn .'ݰ?B'6D?[:?:A-K?;?T GZkvdkg?&?B&Ծp?8?,NwLB?i9k?hp;ijwΠےbSYc=>?C\?Y޽8?"?R˰?;h!e]ྥq?`P`ξ*v?/LfǾRO\F?ar?%꽨>?Uk?1ؾ%t?@ѽX^@?P?)"$y8?,m?Go?7M2l̕?QtXxҿ?19M?B= ?L)dB/T P??IVeܾ`8?KUnp6h?G?fI^Xm6?а?Ds?^p_H,`"`?5?Occ7?$ʖϿ\B%1KK0?-.?h?5f>xu?l=c pU<є=xsZbV?XU'"=B>M>B?G?:zkxuC)&ZD`лN՘Ѿ*R:-?u?R?X 3Vh?El?Uxott%H=r?Vz?{^/?J ?ERϽG@?Z"xgid\J;{]?a%x?ӿv?,?fs.Z?UF(mF?DY?O?@yP=[@ǹ?W.⿚;?/O?(ߖ}3?m'?Fhc)E?qf޾j@ ҽέ4?@TQ>?%?/s=?"2?<~?H [€@s$6WH틽Z"?@*?}<++?N㼽T?/?؟ʾt [?萴?-Ѡ?![T??!p*?I5 #p?H꿈Hx?]?RKl|/!?&zA2}M"1?ϗoI쿿_2?X nK'?+־d?0ɜ?;$r3?5v?;Dm?:HE._ͦ +>g?Nཌ|?,]?):m\8+?@u??;Iz21|7?O\?,T4?7[@ ]ɾ}=-D?X?=$¼?LK8?f z>fp5t?+?oG+?y> ?d:k&>PٿV?h/?`W م ?_K-?$q?f%?l}^?6?&oQ@7p?., ?xbn <=QtؾV9?éy3-?<k&?2?KX޾?D?@?W??f nݯ?3?u`?e}?9 0|ZRsN?S(]*w4?1r<ӂ?L[!?jŽ3̾{?.ud?9,?W?#cͽN C>?gZb.?M?1<:DY\ H?3p?&?]U|?8r-B<1? ֮?L9g>#?BM+?\x?l?h ? 6=m$?]? Im=hb\WyO?FRHr?I?9y&XĽ{L?҃?Ok?ӣ'ͫ?#>^ʿ5:70='N=F?8K?7+o)?ccTQ4{j3@?vr8?i:$?[6ҿHl\(莽x?={ѽXwN?U}TɤM{?\F?-?V6$?g?/L?3>="F?-ϝ5]Ǿ?8v?k婿nu?{?>5R^?鼝?#z ?Qꢾ&h?/?GJ)K?7B=?#?Uv>?Md?.׽Y?jξRV ?8 Xi7>.U^`输{?D?.?{;3(?BA?TZý@uNǾ Z[?GY@(鿍h?42 ??2?a|?#e?[?Z?ڕ?߿)C?AӾ lj9\?`Y7¾A?Q?'u`?ɷ˻S?$U!K㾠[{ ?[:I?m?9h?3 7 þ:?@?(?h?T}` "?Lr]u?TSd?dʾgD?9HyR?`Q ?'辌m lyW?-Y?MXdk?B+?7侲|?հ;?^Os? GB4?5־)?.}D0?-K?? E`?H9:?0(ھ!6?452s%N?)QU?q?'lU?&OhȾ龆N־3?8׾H~?^?);־1??/{?Bܾ?1h?+>ײG܀?+Z?|?@ʾ2sj/@BfH2X&J(?ؼ?<6`P%5bFf?&'@?>]h?=XNϿ(?t7tE?GLUf̿gG?/.0?`aΒ?W6& C6\?Wz ? Y?=H?BA?]?:?COB}?IN?ab?`. ɀ?[𽿐Vc:z?m$?5?Uо*|3:qkO?vb⾎H=8?>7?U6?;==j*N!?$:lc?\|v? ?V-R ?Z=Cļ ?Q/fsV?0o?`@?F~nM<~`?=qd%?eGϢP?Z~̿¿?Z?O=5⿖$?6 }2˿ ?=1N?#zA?mE _?ʾ&Bʿ?oazn?/?R?PM?K?K.a@ǘ?=?7#i?G_?6 ?a? sx?m?? k?Ds]?<?_?M5=?0:R?@G?'%?˽=$@0abK?R@(xa|?7? +?K0us&rG? &??^Hɾ|'ܾɤ?.$[J@ Nx࿇(aLS?.?,ET?bZ[=-?t?2+\ε?"Bl:B)?)@nݾ?^پlרX<5?2 x4?7x?(ڿs|?NԾk^\,?>־Þ ip?/?KP2[?C?d2=^P>=8?c;H?=g<(`xԼ8x-8"?k`Wn* Mj`-R^LBgT`E( Z?c2@5>^?Q?޴=y,pI]?i?Z?Ox8?B@'H?ˢSY^?WhΔrriz?)9???'v _ls0cS}x?_kpX??"4?2?&';Yڼ?QY ?&XV>ꯦ?1 $߭hN?1?' B?-?KW?Qῗ?^VJ\?D?m{??S>ʾ{?j?2ϖC1z&??=ʼEp?)p?+@AEBw?&$ZϾZDxC뻆2n>\?1P?`R:?*n`P<0?Kɽrx?i:9?K~?q?1;/?AȾ?HF p?(?GeN?eTп?6?с?M>\?GRҾ?b~,4?Amxz@&0u@TP>?8'VpV?>p?E&?>c>Pdƛ ?.v?J( TĽ@?9޾W'Ⱦ@<^b=9 ?g?>Հ=VTN:8?k>.?^g\M?d2nì?ZT?״T'ni/w4y?9Oٿ ?BV=I.Hz+7'?\D_CЬ? 4?z[ힾī9?az0k6=R8?>YbzO$!?Qzb(?L?d?ٮ<-B?Iɰ?Nz??Qf5gh?L[?"rpD?G?(? 9?JA? _ ?6?U?e ҾL[?$e?& ?_L??\i'dq,c?D>?P?+?@wb?IU?q[?5?7.?H#X?B۾'%ǽݿvR?/F? 3"Rh ?S1?B?5?B ywۊ3`(?>aְ?rgDz9?VfV?2Ʒ7wIܿ_cc]lDO(^>B?Sſu߂$`?q (<ɨ?Dt?n鿏(u?p?4uBL:?w?-?w徃dh[7?>z?\h?E{d)Yu?[X*,?5Tq?*6?{S ?F ]钽@@B@MB꾸&o?Ne?V{?-d۾-[Pa? i=P"P<<6vy " ?\3p?յ!? ?/??S?PKK?IGE4)?'޾s?A,?+R?\o?fZ?8+?JfMȼ6?5Ǿ\zIvEΌ?r?(Ծ:)I?Cf?`.U?0ǏNc?G|-?b$?$?EѨ$?R?PB?<`?0/'S?$>?- 1?*?&Wm@~/6ۏ?ǁ?:?Y7??=ǀ?UZ>?P>??Ie?u5qz?8n?̊?DO?Ykn?E"k,{s)9 k6?ffO?Eլmr1XI1={ؿ M?Rޯ?IB⿗qbҿÜF?C ?A|! ?JMKĽk(?Rb?(5Ev夿^?PB?/o?Jv#z?kCx?py?V\P\'=qjOn?T㲿?1;ž:C<0?<HX1??0?fY?ѠW? > ?k?:Ν~*Ѹ?;?@۾8#?23UP?|4?4?V?W}#8?*%/P>濃X*?!m" .?o^?K;?:1?\rxj>V(^?$FuM}o??r?g`Ԧ?{.?P@*;B+r(4?+?7ʦ@ $c?AN?;2k?^/l ?a0ʾDLn3?/WI?,?8{,)wP?&q(˓mz?E]f:D_&b j¾_?@?@ҽI??>ֽꞿ 6?hc4?O ?Wz?xtU?RѾ Bпf;?rڽ뚼k?`f?>忔>???(7?jaܾ1B)?@?B-?4P}?!?M޽j?U1?:Լҏ@:G[T.t6?[?O崾"?92>G?*#ȿ ?S?Q)?Bs>L-?S`?*@?U?*?A\>A=f=`?418?!4?{hOq忉k¾?S?g?,ؿѫϾLdN'p>B,g~4"?ɾտ*Mx=]1?"T egR?3?L.~?8*?gܿ{P?/;ỴP??LoU4bǾy]^LH9s?My0?42񽩄~?3? ;ǵX?墽?-yT>HD?,N"?[?W.??M.E?Ž:u(p-B24M??pC?B\H-º#"]f?R?dE<1?L?EǗ =?M?lW~|Nξ'?DT?;J?BA[W?־R8r?񂿏/<|?N^S@ҽ緎>ǐ^(ƾp4>_h[2?ʞ@L>߸?4⽞ Y?\*?1lο?L H?,Z罕p k翓37o5?FC?O?3.>N:?O=?=D{?<ԾC݆?vʄ]V3mN?_)?5fžݾN\?dX0?66|}-."?X̛Aw?G6h?SzTd?VNz?8?FR?;Bdm,?r?OᅡGq~8V/tʾ?8p>:?T?X>?p;?-s*. ?@ ?>y? ?72Gf?:2zٔR+?EHW~9#r9>?Cc? #I??7?2:?tg~?"+Z?=($?0@۾ud!G?-'?=|Ti7&ݾvX?>~Ýӕܾvw%?/t?g\H;PDv/?2A?\Pº??Wa<.?>AX?q>?6ؿCXƦ|T?W_u3i kY?v? 0&Ht?I?+?7(-h?2ib?K쾕I?C92/АOzظ?'1&=p8섽(@!?zӾ*'?ROEuR?i[?CQ__ zB?AD4e?_ž,Tr?#C?&븾~?5Uw?8J-Կ48?ON]򿆃@?(|=$?3޾$V?3Ml"ܽ?nL?ؖ־??!V?EAwY?F"O?l)?HC?d,?B?(dL?Fy?!wL[?. YF}%? ?`?*H?,?\7?::n&¾p?v^?;޿.?(L?ef?M+=Dh6C??/:?8z:t?B ~?a"?,?:{?=) ?RuоǼq>=8?;?f<NtȀA?5<?+?Z)h?Tgdwg}$m?at9ަg2h?TL7h?E?-?0jb?[ d?a??R͒?M= ?fEHE6=t?9?·|?dz1O@pn=z?KeC ?XԾz9$?(׿H?+4`pL`?PX?>k(p޿i6?;lL?Y?}fj Eؾt?~d`0?\+/?JW7Bwʀ?,G#??[HqhB4??JȽxJR,?320 >? };?=, 7'Dq\hǾ?/ܿ)Ō>?c4?U ?N MDULgx :hv` %!\V3?#z??μ螸\^?lr|"?m?3r)@.?ep?ۮ?T?k*?(нhl>aۂ?BjH?:? ?ދ?z\En?<;?T;>??`?D俣 ?\l?1򊿏ᾌ (?d:?6~%8?''꿗j?-m?R;?F_Np$Tw6?CLٽi?HU?ARվƖbf?GLe??x?#F3&?A ?lڽҾ[&77Ƹ?,kξξt?I[򿓚?JMKZ+?M.? ?߉X}7~lryZ-վNسE˿c?idڴxR@VDfGpt ?t?h!G-?W@OϾPz?:k?*ј@,1@J?%,?H?-bG0?;p?[?, ( ?A? ?3]?f(>?*F?>O\R?e{wS?Rbҽ"4 (?Il?1?Y:?:j?^XF?5O ?^W?5:VPo9>h??_:7?>?4'?dc?ľtE?HВ?@G?q%οj?V?Z?"?!?Z-;0d&DA$?UJ? Կ49s?0\?H~?)y^;ق{v|Nq` ?*:؀*b?}1٢~?}ᮾ(?,ͪ~T0p\?O?6D?~꿕!?D5HL@@&2+迍&w*l?9?,z@?3:7l ?;憽@?>YLֽ!;?(m>Mtƻ?K>{?J.l(P`>i?4ξ'Bj2?*o?H^|\?ӻ?&t?j/Q>?^?ϻ?] LԽ[>ko~?%?FP5 ?$?FM4JCL? ~Zz׾Q?-'<[@??罬>??F z? n`a?GϿӾY?#4@?{ $0Ū^t?SpN?[LJ?=N?Tz?DA B?m֍?V?!?ʞ < >"{?:O??@B{Y<.t^=˾=Z&s(?<\~(& o?x?X?Y??I#X@?e?f!?N?)?硱^{Ͽp?GB?4}?QB\^?.ގ?AK<q?:?[\͵?88F2(N???-MKBYfI?38[e@?#{?^-?3켿 ?h?4E;>W4?FpN%<{r?j斾*?΋?ZLUSH?&%lHօBj#X??o>?6I ?:>,x¿Љx?qwE?MͿ??3? ھ6ᴾܦ?`a῍|Du|\#=<?)gJ?/7! Jw=q?=+)?bӠ~ ?pLGx?e>۟O$)i) <&`>ރ?\E ߿7"x?=TA?^Ҿ$=꽟p?.?jZ%)(rHD?qs>n?n?FX??aX?;FH?XHԾS =l? [*!Ml?`?ʊ.? 1d?Mܠ?C]?_B?SA?L~?ܴ?51'?G x>O?CbԾ?8m?ܖ>A??5N?Vֈ8Nց??~Uڿ we?e7?#9Z?.R-6?$S|?1D?CsFX?0aA?.?]?輶迚6 ,Mޯ0Ӕj|;?ZG!? V?RӼD ?w O?Q0־/K̾R 9tgҾ9z*$Q/?XF?W?6?a;?B̶=󤾽h8?h긾?9/@+>zBk .]?U?BK%q?+%?CJ]>ſB?=1?S/b;`!9?`v?YM?Bp@?]$xN}^kf#?O*/Q?QܿBӿ̿Ծwj?N3\?*&+??^2g&Pz?3=N?4?]A*1?4A-x>¿U?1(x?4B>;|?=SqOP?Tm:3?UzR 0?Vg1?ֿ>澦m r0;\(i @?;?p!?"?8h?:/?J̐V;ȀΣ?'B?hkZ?;ݿ!<(?jOB?4;?0sҶ?8Qs!?2py"D? m ˸ྊPd?(/޾' HsWLv;gO_(ƾaTMl?s@.v?+s?+@?L?V}dM ?;ߺ?@C.zG7?R{g?#XjԔ3,?61MI$|[~z0?/R[?Bf ̾Ȍ?WR?~?Xп"=?.Ͳ?%'33־/N^ZGRҐ??TO8Y?UjA?ls0sJ??<4jl \?:@YX*>?L+?6bO`?N_ˠ_: b?{Կc?RN;cM?<l?S !?5?B?L@h?Rv ?DW%?fn%"S_Ms?176.?':Sn?ߔ?%Wxȿ?2?j7OнMuʽiڽ6?$g?]>e?6D!GVל?R?wz`⾹ӀM=< P?H/?T,ʾ?|❾;6?PuGt½ n?O>ɠ?a(yH%JA?e?-=2?iuǽ^?o־\BA>^BgCLB3U?D?^&? o=Y_?]8X̾W ?h~YH?DN?Zj?KqPࢽ?y?9zȼ?-꿡m7a?P%]"D=k9V2,?@?`\򿶢F?kj]?%?EFXt=#D?3?7_t:7?)Xr?5_`bcdE6#?:?`?AF?g5tg?8F<ǃ?*X{l?:PUʽϪ4dƾ5L?9?_^r?hd?e?0B?L0?<>?C.>?p?v^>`O۾GYؾB4oH?az?+vXF.p?WD#n2_?ݤ?T?9?Dy_?;֌4?X?/1?Ss {;97Sqľ%UBʽ41%2 B3l?7^ڿz?k*?.T?h4?9 ~?/KV?*B?'R*.C%?˰?!_*"?P?"ҽcT? ~?8?1?E*?J>?NHz?m?c?꾰+RL?/0=Œ=J|X?֬G>W?9$>?K@/9|T>?3B?<~?T 92@0A6|BgM?蛽EAx?c?BY'?Ur ?Wx?OBQ?Ff?k"9?G&?\o?6=.Pn&S .}ڒ?M9.s?V9?I?c]J߶u @ھbϺ?NPL \ J? Z?5)3?]?I+?yrOV"ڰTo?d ?=Q8?(!8?1?4?ۡ(?7SN˾<8?cj?'s>8?T ?L /B'pka?&n?A]j?ި@Qӿql8?! ?:8оGƿ?M7}Sb?G\%?ǥ?I$?$Sk?L{[B!HA?K4???ބ|vz??"?1rV? HBߒ?5>g{?F')@..)Z[ݾᎾ ӛ>p?JSh?'?Wʾoѓ\?Q`?̾ Q¢?Iac-߃*[WI?O>?>DZ? ?$K?Z?Aó+龿?b?g{*$? ?G?H ?Cz?${%ԾT$"?&n|3?PF@n6R?4?U9?D,K>ڿʿ~C̽ rxQJ;?6?i?aZmI?eÔj켽)=!?UV?lx?S?v-=D~;tT@?ioѽ̈́ 0?YP]?Hi`?t(<4q?fjzG?n}?I0y?^?FJ^?3b-;?)ҧ?G4?H6?.o?&; 9XDM>IL?T?'WԾ?X&4?oC?T$Kxý? ?qbvg;a-^"?: Dʽ= `.=O?ֶ@/`?lƾk?ϖ?565^z`ir?BlI(?m?W?Gf{?o<̾O@ 6|rh? C;V@1ssl??)Ig{:? ?$?TVU?>^?HZ(G?.꽝!c_?j?' ?3&?~bs&4b4I?Z,ӽ*޾X;ڣ4?n(>NJ?Q .t F?6wX?Z~C1#o?N4c?m0vb??Ad?2@6 0?$Y@G⿉xp?Rнyl>?XԿo l==@? Ħ?G<+PԾW0 N?Q>ľJJ,?.~tۼ?S?Fcֻ7ۀpi?AVI'=x&(!;&?B.?]:F,짿˾T0 SPоX?iKcG2yb罵;?]=^+\d?3??:۾R/;F?Mt>"?2DoP?x?R?d#.pR?P?.T~R?{a??8=3\ (?fxybRN$?H{9?4X?3ă+n?'T?O(-o?թwY^]?@n?<%>5?81^,Ⱦ^k?>?cip :B?>Jk?˃?0[?Qub97 S'uC@1|?\@:و?\+?t?BDup(feU)?9?C?Ŀ6'?iBᅳ]?Y&v_?<u?aZ侯qr?>ױ4?2?dξڽaIbKN?2?NAΨ?ox'I?/"9UL?A)%k?P!tMqQ2??lz?Z8,m?U?6au/4侒@L8ƾ?N;h?fل?,7ҼP?Hg*o?::>hOzLĮ~CоrN?A32=9T޽вOߙ9?־:;?T`3I̘x?m?Ɂ[?SG?JұT?9 ;aϽ?߼?o ?,ܾ7?p>nQ?1Կ2t?'EM?ViD?d?޿P_m?7<"?򾃴&i?E?HVZdz$P?co?b55rܾD?EimzxI[o?]վ"?̮? RM?==*D;"?D3­%=ꀽ:*JX?Du￟XIK?A˒?fT?e~. ȸ_6¿/L?9<`M@?aԾPjz?-??g?7o?;L?Ir%.T?Hq?'?kR?3Eݒd?$5??Ԯ˾8W?;zF)(?FrE?^ Tܾ쾇_Ҿdg?O1B>Z?h +mUy? ž(L?1ܾq߫K!2w< @ϩn>գԾႾa(?L?2p?C k?B濕L?l4?0?9?*K?%??G6?3l^?B8?@Mŀ?L? l@U?60?3;?$??N?4 h+rJ?Sdi6?Al?S`꾌|Nf>??>t?K(r|L?8-]Sp?rT_H??#?&TI_lMU?ٗ?'2V?ބ޿ ?8*? Aa4?9Q<:qH㿃 ?HX?NTh|?i̷<'q6;q?A=Nl=?_>? ?=>H?inP?t@(?e?\?WV=g<;04<{Đ>?zʾT]? ?mA?d< =[z-X?kRo(?}z?ڸYg0?S,<2?b#AnBC?P3?Yn0?*?B)> ?}P?C^5?T֑?jR!?[?DSL ?U6Q(;oN?Zx?oLv"?+o?s̿?$=&p?A uD?Nc|?K:?G?T _/Jk2?Cs?FϾ*qȿ?2%x[d@-Bp V_?F•?`l?A?N @^NtC>?ͳ?7DмpR?+bɽȣx?2?Tqʽ?"љn_r?@۾Ӛ۫?=|?"(?>ge?L^H00QD1v$>"Z?>0&?D&].?p* ?J?nd{-TY<ޔ?eIe>?O˿?|p++`?l% ?em #=?6>w?R8_d@?pQV=?8Pu?g?Lb+dSp?-tq@? ?s?2LX?]lw?V!@?k]N97?^9?Bt?\tK.,?J뾅Z־Ƚ4 GyF?X[CԘB?@o??E=|s!x?/:?m޾ic^{h_T?Pb?*/?l?-r?Nv(?J4Ӌ?X8KH?]e? oD<ЍD!>Sc= ?R?h%?7`L?>J^\?=~?ß?y!1?~@ANaOoyۤ.#?O +]_@? e?Y8Q[XP?Luc?F龛fnwp?M?6.2~@H7?m. `tcV<\?^0j},?A lx {]? '?EڈRUdP4 ?I`? ?@h'\`=ǡ?E]K?Cؾx?G짾J8ݿt1?^!\졽^`?7RĿpت?HkC?,?NO?)MA?@uD?>r?P ,k2MB?30,?0ܿ5|?L_Ѿ\@lh|?#/ ?zQ?1p:-m#+?;:l>ؿnTI =B`2?GB̿վ:?j?"[8?D|,rÈc(?٦?Axc=LM A?` :-?Y5<7?5<`?(=\`?X Rw,Yп_Q.?1?jX߾J/> h?5AK?2Tn +~=?5I?E6LؽO,Tr?Mj?,> ?:@BJNA?I?*ҽ~?,Ł?U#?jfZu:$j?=%;lM<辠]?gy ^E>dT?4Tƪ @/ ?.?VcorX??Ewc6??P?.Rh `?5f ?Uپv?-াLk?b2;?}>Z?kx9?+F?Jv䨨<(?B,?:>a9/Ǿ$@$?=Z?YԿ?$?6<˫!Wϐ?!K?N;ޫgT=ܩ>P?p?Vڨ.oP5?%>?Y<?Cy*dF?B8?IB?}?ꩫ?Z??] MOά?uJ+P?̛?P4?VU:&??`ZĽN?l?+ KQ?Dd;2N??A9%^{TĽ2P?r?ZUоu@?8-?- GO$?W؇c9?x ?_+P?sT,C@?R "=`?I2l=[2&WȻ?*?T&?@ۿw-=?ܵ< ?ڿ%`BW\Ph<=y྅Z=?sV q?m>?%@?H?:?g'?1C?$W?l?0`?JV.? ,D?BE6oCf՜C A,?? U?NϚ?Y??<-?(xk?`_c<|3̗ν"(Ⱦ%7\?%|H0J( ?1dT4 MW?dtO?0^B?[?(sr.۬s)o?2AH?쾉F?裮#?R?+?AU??.係Jz׽?;f?3jqxUh?tIҏ MH?:Ӿy?GiM@)j?&V>h".?<%?KU?- ?-Zܾ??H^D?//p.b@?4mվ9 ?4j?a(?l?-Yx:?/?1tb=?T?-?X@??Dx<o{L?N ?e?9QJ? 2(?Up==v?AP?xH ?ܾ?QǾlhI?fm`?T!?G?F|?63?A(?:?O<,k?.c?J}@F@?H3? }ꄾN.JZ,-?ZK7?:?i刿?MI?=B?7 @2:n M$$?M?=dD)^(ξ6< .?P,?.|l$̽ҽk?59T>ve?;*L?<D;V?F?=?IZl?,?DyI&,:G`*`?3?Q^yɽ(?R\:k&?);?-.?JgQL??X?*0?̑h?K?4aR?1?-ҾòO?)T܎+W f ؾ ʾX:4<? ?SN@?係nQu`?pP?\ ?.ڱ?K?1TXRtGF`2?T?3MތB2jl9j?'2+?Q?zp?cWv?Aſ4sǐ=sQ?GؽԾ]IO$? (!??߿k'?d~v?;Fv?!Ƚ??J۽?9h= 8?gtά?Pkt?M?>uO?6jg@?f"B?H?/̊?,%bp??2k?V?^;ԿX,/ڊ??L7.?KCh?+?Pv{WD͜?@־=<\H=; (>@?:0迅˾ѻwℽ!THJzXi=𫸾GJ,KVɿ ][?L.,˼x|L?,2deо\?=0c;uـ ?SY?I?ratz,-^?&?ME?9*gD?R,??E?X"!$Eʾówj.:ITHxw4??Iv#@5 ?Y?2=He}?N0r?]h ' t5>zʻL?ɗ𿃏&?\?Pt/[";P?_Xg9?.BAƿxy=l0U@=j?4e?q[;?]?ZRD>?D\?]t?P 8?EH̨$?(k$?s&>;?J~0s? ?WP ?i >g=q&l?0b?@^?`?ZG>iz?qɾr?d?:|??W\ټ@*ފ?_ 08Su'e?*?Dأ?k?@I?+/?Xm?DrýD?BP?RFF?mZ1<>„9Y|mԽV?,.N rEBr@jDKVcB @v?Jv-.?%<4?i?MzZb?E?aRվX@k)3K<'D?`?Tlfi ?twF wO`?'?4OhXf?SpL*??Z8(?FFX?SHe?T)n?:F ]ܬ= Z?w?볬=?Tڭ????m?M0~?Ufx?tE?Vǭ59?9Ⱦimc iK?Ё52Q&?Cb?jR?at 㤿\n 4?fm?@f?J?C)n?:^n?Fo辖vpq>n?M\_ ?<"?1yݑH?9cfE|%=ʤ?%p^o8?2~I#@?FhGJzgI5?dD?)?,V?N?ٔT?򟿁N;\$?T ]?_d ?A]?\!?:.?1G?gFra(>? y?F?0+q?I?;SnԾOKп}?; iԾ%A(&w?=HLkV?XRA `Ծe?*??i޾₩?T?7?M1x? >?bž| ?SؾTֽiS?fz?(߻[aAH@C+AϪ?VKT8x4߿*?[L? ?q?zBA'>X@?MB޾ 44?qjξv?;j|齭uF?`m=Fc\4.Հ?^?&??5W?`?I6?UX?P?DR=s?N"?"vȾnѾS}wFg?tӾ ?e?/?B;\?8)Ҿ=pJ>6?D^?et?$f<%~C?p?J5+"?܎tY9LD?b`L?CТy?9LWx?@o?g?%Ol?F 7 W,lgJ5Jk?L3 E6/1?1᤿?7,¾ 7r3?ek\t?;,?W"뿘\tB$'?Ჿ?Vl~k<?ds>!;u`g侒܎?g8n\?;?X `q?Gk??0\v?,A?]<5Z2弾!??Dx?R#B9?D?̒ξb?#>M4kg$?ؾD?.q.@'$A!k=X?:HUVd6ZIj?YD?p ?IK| 6=zꍾY?t%teA2ZJ|?k>_`?L{;\kXV?SwU?Vֿq>?QYT?Xؽ6ܿ?ZALR6xnF?2?ٜ?06?T =ۢa?Af?m:뽳2u?"!`I|gj@)cs?@Tv7TS[P<?>ML?5[ ܿ d?x?Z~ ?nV?ms???+ij~V3OV??YT@(\kԾa A?I[?b?a3G?J?@TTv,M6FP`:DpUsf?dB~?U 8~kt?j輾DY?RiؾCL,x>?4?DR `?L?D0?_@rj?\?L=# >?)?T?Q1þt PlнϞ@/-Av?*6? \{??-?N?ݶƿp~ Ѿ-x?0?3T?BG ?HXTENSION= 'TABLE ' / Ascii table extension BITPIX = 8 / 8-bits per 'pixels' NAXIS = 2 / Simple 2-D matrix NAXIS1 = 796 / Number of characters per row NAXIS2 = 4 / The number of rows PCOUNT = 0 / No 'random' parameters GCOUNT = 1 / Only one group TFIELDS = 49 / Number of fields per row EXTNAME = 'u5780205r_cvt.c0h.tab' / Name of table TTYPE1 = 'CRVAL1 ' / TBCOL1 = 1 / TFORM1 = 'D25.17 ' / TUNIT1 = ' ' / TDISP1 = 'G25.16 ' / %25.16g TTYPE2 = 'CRVAL2 ' / TBCOL2 = 27 / TFORM2 = 'D25.17 ' / TUNIT2 = ' ' / TDISP2 = 'G25.16 ' / %25.16g TTYPE3 = 'CRPIX1 ' / TBCOL3 = 53 / TFORM3 = 'E15.7 ' / TUNIT3 = ' ' / TDISP3 = 'G15.7 ' / %15.7g TTYPE4 = 'CRPIX2 ' / TBCOL4 = 69 / TFORM4 = 'E15.7 ' / TUNIT4 = ' ' / TDISP4 = 'G15.7 ' / %15.7g TTYPE5 = 'CD1_1 ' / TBCOL5 = 85 / TFORM5 = 'E15.7 ' / TUNIT5 = ' ' / TDISP5 = 'G15.7 ' / %15.7g TTYPE6 = 'CD1_2 ' / TBCOL6 = 101 / TFORM6 = 'E15.7 ' / TUNIT6 = ' ' / TDISP6 = 'G15.7 ' / %15.7g TTYPE7 = 'CD2_1 ' / TBCOL7 = 117 / TFORM7 = 'E15.7 ' / TUNIT7 = ' ' / TDISP7 = 'G15.7 ' / %15.7g TTYPE8 = 'CD2_2 ' / TBCOL8 = 133 / TFORM8 = 'E15.7 ' / TUNIT8 = ' ' / TDISP8 = 'G15.7 ' / %15.7g TTYPE9 = 'DATAMIN ' / TBCOL9 = 149 / TFORM9 = 'E15.7 ' / TUNIT9 = ' ' / TDISP9 = 'G15.7 ' / %15.7g TTYPE10 = 'DATAMAX ' / TBCOL10 = 165 / TFORM10 = 'E15.7 ' / TUNIT10 = ' ' / TDISP10 = 'G15.7 ' / %15.7g TTYPE11 = 'MIR_REVR' / TBCOL11 = 181 / TFORM11 = 'A1 ' / TUNIT11 = 'LOGICAL-' / TDISP11 = 'L1 ' / %1b TTYPE12 = 'ORIENTAT' / TBCOL12 = 183 / TFORM12 = 'E15.7 ' / TUNIT12 = ' ' / TDISP12 = 'G15.7 ' / %15.7g TTYPE13 = 'FILLCNT ' / TBCOL13 = 199 / TFORM13 = 'I12 ' / TUNIT13 = ' ' / TDISP13 = 'I11 ' / %11d TTYPE14 = 'ERRCNT ' / TBCOL14 = 212 / TFORM14 = 'I12 ' / TUNIT14 = ' ' / TDISP14 = 'I11 ' / %11d TTYPE15 = 'FPKTTIME' / TBCOL15 = 225 / TFORM15 = 'D25.17 ' / TUNIT15 = ' ' / TDISP15 = 'G25.16 ' / %25.16g TTYPE16 = 'LPKTTIME' / TBCOL16 = 251 / TFORM16 = 'D25.17 ' / TUNIT16 = ' ' / TDISP16 = 'G25.16 ' / %25.16g TTYPE17 = 'CTYPE1 ' / TBCOL17 = 277 / TFORM17 = 'A8 ' / TUNIT17 = 'CHARACTER*8' / TDISP17 = 'A8 ' / %-8s TTYPE18 = 'CTYPE2 ' / TBCOL18 = 286 / TFORM18 = 'A8 ' / TUNIT18 = 'CHARACTER*8' / TDISP18 = 'A8 ' / %-8s TTYPE19 = 'DETECTOR' / TBCOL19 = 295 / TFORM19 = 'I12 ' / TUNIT19 = ' ' / TDISP19 = 'I11 ' / %11d TTYPE20 = 'DEZERO ' / TBCOL20 = 308 / TFORM20 = 'E15.7 ' / TUNIT20 = ' ' / TDISP20 = 'G15.7 ' / %15.7g TTYPE21 = 'BIASEVEN' / TBCOL21 = 324 / TFORM21 = 'E15.7 ' / TUNIT21 = ' ' / TDISP21 = 'G15.7 ' / %15.7g TTYPE22 = 'BIASODD ' / TBCOL22 = 340 / TFORM22 = 'E15.7 ' / TUNIT22 = ' ' / TDISP22 = 'G15.7 ' / %15.7g TTYPE23 = 'GOODMIN ' / TBCOL23 = 356 / TFORM23 = 'E15.7 ' / TUNIT23 = ' ' / TDISP23 = 'G15.7 ' / %15.7g TTYPE24 = 'GOODMAX ' / TBCOL24 = 372 / TFORM24 = 'E15.7 ' / TUNIT24 = ' ' / TDISP24 = 'G15.7 ' / %15.7g TTYPE25 = 'DATAMEAN' / TBCOL25 = 388 / TFORM25 = 'E15.7 ' / TUNIT25 = ' ' / TDISP25 = 'G15.7 ' / %15.7g TTYPE26 = 'GPIXELS ' / TBCOL26 = 404 / TFORM26 = 'I12 ' / TUNIT26 = ' ' / TDISP26 = 'I11 ' / %11d TTYPE27 = 'SOFTERRS' / TBCOL27 = 417 / TFORM27 = 'I12 ' / TUNIT27 = ' ' / TDISP27 = 'I11 ' / %11d TTYPE28 = 'CALIBDEF' / TBCOL28 = 430 / TFORM28 = 'I12 ' / TUNIT28 = ' ' / TDISP28 = 'I11 ' / %11d TTYPE29 = 'STATICD ' / TBCOL29 = 443 / TFORM29 = 'I12 ' / TUNIT29 = ' ' / TDISP29 = 'I11 ' / %11d TTYPE30 = 'ATODSAT ' / TBCOL30 = 456 / TFORM30 = 'I12 ' / TUNIT30 = ' ' / TDISP30 = 'I11 ' / %11d TTYPE31 = 'DATALOST' / TBCOL31 = 469 / TFORM31 = 'I12 ' / TUNIT31 = ' ' / TDISP31 = 'I11 ' / %11d TTYPE32 = 'BADPIXEL' / TBCOL32 = 482 / TFORM32 = 'I12 ' / TUNIT32 = ' ' / TDISP32 = 'I11 ' / %11d TTYPE33 = 'OVERLAP ' / TBCOL33 = 495 / TFORM33 = 'I12 ' / TUNIT33 = ' ' / TDISP33 = 'I11 ' / %11d TTYPE34 = 'PHOTMODE' / TBCOL34 = 508 / TFORM34 = 'A48 ' / TUNIT34 = 'CHARACTER*48' / TDISP34 = 'A48 ' / %-48s TTYPE35 = 'PHOTFLAM' / TBCOL35 = 557 / TFORM35 = 'E15.7 ' / TUNIT35 = ' ' / TDISP35 = 'G15.7 ' / %15.7g TTYPE36 = 'PHOTZPT ' / TBCOL36 = 573 / TFORM36 = 'E15.7 ' / TUNIT36 = ' ' / TDISP36 = 'G15.7 ' / %15.7g TTYPE37 = 'PHOTPLAM' / TBCOL37 = 589 / TFORM37 = 'E15.7 ' / TUNIT37 = ' ' / TDISP37 = 'G15.7 ' / %15.7g TTYPE38 = 'PHOTBW ' / TBCOL38 = 605 / TFORM38 = 'E15.7 ' / TUNIT38 = ' ' / TDISP38 = 'G15.7 ' / %15.7g TTYPE39 = 'MEDIAN ' / TBCOL39 = 621 / TFORM39 = 'E15.7 ' / TUNIT39 = ' ' / TDISP39 = 'G15.7 ' / %15.7g TTYPE40 = 'MEDSHADO' / TBCOL40 = 637 / TFORM40 = 'E15.7 ' / TUNIT40 = ' ' / TDISP40 = 'G15.7 ' / %15.7g TTYPE41 = 'HISTWIDE' / TBCOL41 = 653 / TFORM41 = 'E15.7 ' / TUNIT41 = ' ' / TDISP41 = 'G15.7 ' / %15.7g TTYPE42 = 'SKEWNESS' / TBCOL42 = 669 / TFORM42 = 'E15.7 ' / TUNIT42 = ' ' / TDISP42 = 'G15.7 ' / %15.7g TTYPE43 = 'MEANC10 ' / TBCOL43 = 685 / TFORM43 = 'E15.7 ' / TUNIT43 = ' ' / TDISP43 = 'G15.7 ' / %15.7g TTYPE44 = 'MEANC25 ' / TBCOL44 = 701 / TFORM44 = 'E15.7 ' / TUNIT44 = ' ' / TDISP44 = 'G15.7 ' / %15.7g TTYPE45 = 'MEANC50 ' / TBCOL45 = 717 / TFORM45 = 'E15.7 ' / TUNIT45 = ' ' / TDISP45 = 'G15.7 ' / %15.7g TTYPE46 = 'MEANC100' / TBCOL46 = 733 / TFORM46 = 'E15.7 ' / TUNIT46 = ' ' / TDISP46 = 'G15.7 ' / %15.7g TTYPE47 = 'MEANC200' / TBCOL47 = 749 / TFORM47 = 'E15.7 ' / TUNIT47 = ' ' / TDISP47 = 'G15.7 ' / %15.7g TTYPE48 = 'MEANC300' / TBCOL48 = 765 / TFORM48 = 'E15.7 ' / TUNIT48 = ' ' / TDISP48 = 'G15.7 ' / %15.7g TTYPE49 = 'BACKGRND' / TBCOL49 = 781 / TFORM49 = 'E15.7 ' / TUNIT49 = ' ' / TDISP49 = 'G15.7 ' / %15.7g CRVAL1 = 'right ascension of reference pixel (deg)' / CRVAL2 = 'declination of reference pixel (deg)' / CRPIX1 = 'x-coordinate of reference pixel' / CRPIX2 = 'y-coordinate of reference pixel' / CD1_1 = 'partial of the right ascension w.r.t. x' / CD1_2 = 'partial of the right ascension w.r.t. y' / CD2_1 = 'partial of the declination w.r.t. x' / CD2_2 = 'partial of the declination w.r.t. y' / DATAMIN = 'minimum value of the data' / DATAMAX = 'maximum value of the data' / MIR_REVR= 'is the image mirror reversed?' / ORIENTAT= 'orientation of the image (deg)' / FILLCNT = 'number of segments containing fill' / ERRCNT = 'number of segments containing errors' / FPKTTIME= 'time of the first packet (Modified Julian Date)' / LPKTTIME= 'time of the last packet (Modified Julian Date)' / CTYPE1 = 'first coordinate type' / CTYPE2 = 'second coordinate type' / DETECTOR= 'CCD detector: PC 1, WFC 2-4' / DEZERO = 'mean bias level from EED extended register' / BIASEVEN= 'bias level for even-numbered columns' / BIASODD = 'bias level for odd-numbered columns' / GOODMIN = 'minimum value of the "good" pixels' / GOODMAX = 'maximum value of the "good" pixels' / DATAMEAN= 'mean value of the "good" pixels' / GPIXELS = 'number of "good" pixels (DQF = 0)' / SOFTERRS= 'number of "soft error" pixels (DQF = 1)' / CALIBDEF= 'number of "calibration defect" pixels (DQF = 2)' / STATICD = 'number of "static defect" pixels (DQF = 4)' / ATODSAT = 'number of "AtoD saturated" pixels (DQF = 8)' / DATALOST= 'number of "data lost" pixels (DQF = 16)' / BADPIXEL= 'number of "generic bad" pixels (DQF = 32)' / OVERLAP = 'number of "image overlap" pixels (DQF = 64)' / PHOTMODE= 'Photometry mode' / PHOTFLAM= 'Inverse Sensitivity' / PHOTZPT = 'Zero point' / PHOTPLAM= 'Pivot wavelength' / PHOTBW = 'RMS bandwidth of the filter' / MEDIAN = 'middle data value when good qual pixels sorted' / MEDSHADO= 'median pixel value in shadow of pyramid edge' / HISTWIDE= 'width of the histogram' / SKEWNESS= 'skewness of the histogram' / MEANC10 = 'mean of a 10x10 region at center of chip' / MEANC25 = 'mean of a 25x25 region at center of chip' / MEANC50 = 'mean of a 50x50 region at center of chip' / MEANC100= 'mean of a 100x100 region at center of chip' / MEANC200= 'mean of a 200x200 region at center of chip' / MEANC300= 'mean of a 300x300 region at center of chip' / BACKGRND= 'estimated background level' / END 1.8263118863080002E2 3.9396336734110001E1 4.200000E2 4.245000E2 -1.067040E-6 -1.259580E-5 -1.260160E-5 1.066550E-6 -7.319537E1 3.777701E3 T -8.516000E1 0 0 5.1229798573999989E4 5.1229798742000003E4 RA---TAN DEC--TAN 1 3.166452E2 3.166715E2 3.166189E2 -5.064006E0 2.552170E3 4.182382E-1 632387 0 1466 0 16 0 0 0 WFPC2,1,A2D7,LRF#4877.0,,CAL 3.447460E-16 -2.110000E1 4.884258E3 2.020996E1 -1.756510E-1 -1.216810E-1 1.033711E0 -1.983727E0 1.295800E-1 3.129676E-1 4.577668E-1 3.916293E-1 3.115222E-1 3.295493E-1 -3.676353E-1 1.8262552336340000E2 3.9412143138150002E1 4.235000E2 4.140000E2 -2.756050E-5 2.082210E-6 2.080210E-6 2.758710E-5 -1.995751E1 3.740623E3 T 4.316380E0 0 0 5.1229798742000003E4 5.1229798910000017E4 RA---TAN DEC--TAN 2 3.540573E2 3.540761E2 3.540386E2 -3.379329E0 3.720573E3 6.385469E-1 631340 0 2072 0 25 0 0 0 WFPC2,2,A2D7,LRF#4877.0,,CAL 3.382652E-16 -2.110000E1 4.884261E3 2.020992E1 -1.896807E-1 -1.899146E-1 1.053666E0 -1.947547E0 2.564496E-1 1.057321E-1 9.952926E-1 8.409855E-1 6.534808E-1 5.836062E-1 2.101429E-1 1.8265237923050001E2 3.9410944281389994E1 4.360000E2 4.245000E2 2.239130E-6 2.754260E-5 2.756840E-5 -2.237040E-6 -5.853249E1 3.282136E3 T 9.464340E1 0 0 5.1229798910000017E4 5.1229799077999995E4 RA---TAN DEC--TAN 3 3.066676E2 3.066541E2 3.066810E2 -3.713645E0 3.282136E3 5.217843E-1 633259 0 1551 0 7 0 0 0 WFPC2,3,A2D7,LRF#4877.0,,CAL 3.372288E-16 -2.110000E1 4.884255E3 2.021006E1 1.109185E-2 6.184989E-2 1.003236E0 2.821703E1 1.669304E0 3.472891E-1 3.272150E-1 6.145074E-1 7.027547E-1 5.681439E-1 4.761558E-1 1.8265002235500000E2 3.9389460441680004E1 4.230000E2 4.210000E2 2.753580E-5 -2.509310E-6 -2.506890E-6 -2.756240E-5 -7.241166E1 3.420240E3 T -1.747980E2 0 0 5.1229799078999995E4 5.1229799245999991E4 RA---TAN DEC--TAN 4 3.117072E2 3.117648E2 3.116496E2 -3.289304E0 3.420240E3 7.084697E-1 628289 0 1816 0 57 0 0 0 WFPC2,4,A2D7,LRF#4877.0,,CAL 3.464660E-16 -2.110000E1 4.884256E3 2.020999E1 -6.813275E-2 -3.253493E-2 9.846212E-1 -4.591252E0 1.359666E-1 4.015671E-2 1.129934E-1 1.897491E0 9.687142E-1 1.053770E0 3.466465E-1 libvips-8.15.1/test/test-suite/images/avg152T1_LR_nifti.nii.gz000066400000000000000000020163271454007373500237530ustar00rootroot00000000000000_ ]Bavg152T1_LR_nifti.nii{ɺ}`vwbf-Yd-flY% 2IN4zt9kZ{χzv}qN[{?w/_n|o~,Z swI#2Eݲ^:N/Ww}o~G޳gyyyygB~-(((/SQQQqqI)x"7˨2jiEb*)++(//+)-G䋊 3J{^MHgWTVVUWMu'(4 QݻG+).-/@UWWBTUUKJ4BLG[E[\\ tkA7WSsSS#xr?.L؂۠yyWaD[IYEeUM- UP_[]UQC) [}vi3|S Dw`hxdtxpxxxhppCmoQN c$HK*P-]CSs KKŹ驱*R]M `C].F{pdv Jiu:N!Vg:AA"VXPXx07H A\q.D7 L,LHm7*DZ[.NtVUG3̸݈C{pb)4:jYNYzݦN\nk.G6"y ҝ?dTTT5v/ْ  ^_4٭F_ko/MI.a^n!f%%UiKeuh4'x4'{xeK+3ͨvaVΌLaU׵v-j7%wbѝh,<;<8#spzy:ݍ?FFDOK}U9 Ny+iW1am.yr(uhN< ɃOFf/ h/(%umstً'7{@$PȌa^B]lm4\tHj;fwtw'vz@"D# VAf}V A` V%E X'KV^` ًA ƅl6ӶzkS7ك Rѐ/spB~,(3u `~^>XHW7t-oÉh" {np FCQKP2:P.lN Ձ0PW򺤪u v8 1r Gbh4`3,`(]rwmyŕիܲX)T6B.qRP4 F žWOGeI{A~!gwJ7MYiFj4/w޵ &١?է <*66֠;YYi G!d"˷˯o䡦<.m%;o~gG10̈́imEշ ,s;`ضy#]ip}pW!_H!Bu׵䮍`0L:&o~TY_^Z]PRзy_\'C`[i8Cu.u NbkQϮSp9}oUVp@{V۷w#-4ڷ @;ms\h|7?Y9RS ť,˯zv QɑC;ԡM M4W@[S'L:}0ڕ|$_}oަ`# z0䳟yz.#M NEZ,й񦂍sDĎ>WζוA9ѧa DWΦαYR\s*35Dߊ]z)2s s8"k))7AuLo~&3K|󡇿0^_?EVh<cUƺY&<mJq==  5pg_# ed?x]+*+jچ)dŢD|Dg ؆W6O?=I\?k}l?]B~_;u_NL <)BeHye՝'{`|tڲ{J^yt?_C ^"S$et>IŌwJKaGy;Oك{14CA#5S|O:r_5Z]3>qD<6e3ɋu%%E%%]KC~>m"x{}*h ޼|x+@&tʁr /q6k8_oMX#K?|#[hsx܈F}VhؖMѰՕu3 h2\J\l)+'#xFv3`}yirTޏl"^<~* dW}uU% O"%<euqvި.-nYeI7-UEYix}F;q«quՕMg4D$I\&vi~ VU4M {'I09EvIEcn#~W'^[nGjA^׏ήB%ĥҲ5ܶw# { 4-I#ͮnbWWO^95FTMUe!*bOYZ먭DuvL.[ӫO]rx?5#>6æsk=zxV Vgۛk'fVنJ-Hّe;:ztuUa+J vEc>׭Y%,-̎v4 xRjKu`{K&0x㩫ԑOEj}#GNaH"c(uq6Lvalox"P3W&ttJ>8=ڱcm5 yiwť5M}K-gh'oEѡIDRn%- 3><4Kd :#{:9bX[-4Xu!).meH}{iQ+u Ut|C#N ܟFwwQY@Ֆa绅E5cXLB>f6tC:DbX2vصr.a*:x~^V:0[zD.&{]R(-BfpՎH<쵃]N .nnD,yFNxK+QMKx2KU[шmC$ؐK6@nwB^',Mu5AX\!8@dH(G?UƶѩEWl%B 4.Zd\m=;1T49#|tZg]>)"j2"ݣHFG<)˳͍%3KAdp⩮E5wvLm^!:&z͢չ 1 Viu~/WYY]Soh#5zTtL\ ‚mm@V<((Ȼ}%_^qO1'D-+ZUS?KkuRgIMv?fs[R\T{GKn̴9ڄp2X 9yRVBUƒ4FD2yYiviaMF Wfzˊ 3, TyΒND)1 W)uCcsx-OZn)/D8l8WV97闑/ȿ#i Ζot&a$93|LV3ݑ;eOUoVR:42EZ9L\l)+uOBI5 U>;M`lrUuƓ)T:b2LB"bf'Fڛj cV8Tᤂ4ISk P5 oxzʍ Ʀzk d".BXhvWTF2Ir$fE񵆶i4%6fjq^f: =3XWU / 933Z-T}ꚺ&IJF&1yq4C fÍ UyY|PRQQ7(큽#?899KēAإfL7*K#-od iUgnb' D!v| FR$ilfا*i:y| <>>?~8w 3m `C4\D"cO\u|<{ty~z|0uˤC:] YLcTS^dL\|^"H$d, B/\j80ذaHkVx>~px`( \wx$7/^]YūS-+ ?(i4'UTԷ -2^xzqG"~x=d O~gaǻA@kh@ӶC={z GAF#ԣ?^r' œO vih\z*(%rd?볽H 2f0?ݫGOt69(ķ(UV7८Ǐ_$bs;M_>7xn1ٹzz߱AmF!0XgW CG^t8@Tz8=>gWMw5B׀4 9%~~x(pNb2v| v6{pp7 $J&3$aN5nzvyu9.nlfniجn/hfٝN?$Oj,0${BZ]Z^]г7D;{Dq;\Nl5hͶQ7VmVluˏ?{7Hcmuՠ "X#$/ vFi75*L"ruF`r:|>7HXަ"B| > FvHm7LV VÖREB>͗MlHYhܯFP`miHesUm$Yb#`0sZ ȇv'5:'IDr׶l[lv MJBw}5XRe8dW7.7]`<9p(4D|&à x,JcrklhGm m%p5w0fo:A+\.]^Z\Xי 'x &e%ȑH򊺎i`r\#ѵ4nl!Ʀ0`ч^ZZ!?7TUA"ꯨ^ I5Ie̜qȸ%#'QWˋUOkc-uc^Aie o"2h6TY\->8 ,BJ|:~y O)ZkLPL- u@z]P 9YF*|pq9ᲩKl+j::ۚiBDWs1&wB ))puHy GqԱ_v^]n{;[j ;&zzItiqa;t@ul6 Q>ElǏD׬^k˨:muq``fjmt@-ktm[R T<:c1#+c h"29bfF:Lw; ,S^^J`ftx|^=kybtbi#/,)ɕU4^r1S،aU, F&fg ؂CI^[0b:TD844&2Xt<ǒ(,g R+KxJ% Kج9DgVqh,\ v! Ƣ,u!SbS%ØA| D2_Y9if+xȮS["*~N'ZFVH 6ɒ4^~;)GY#4:!PId1u&N4䶀75R0hkY4a*g[eP rkL>b2aV=J4|6N_h,Eu-IL@iŌ';ކC*U(Tr! :'m,m0pیbm8R]\]5BaJ Dw5DB&nu:Vv$$XC!n*~ϢF[k J{LbSoRWn7jtFlTVy;G=|abzieuTwCeI~qyMM5[6bCD|.+XجmrtLI=Qo1No봃pV;k V4 nlmF0iTmۖAiT#xo 򵙞҂{-$/\0W<= l<,A_} o L c';FJ_])BƵMm{CaQ (?%/lrq{Y% XnǃFUvg|38Pk;fyRݨށ٭ 갃LV<$r6ͽ{Gϣ[&Tt#OqmװȘw3*X֙]w5;&峷kM Zk^o?o?w: ;51lLkn>\Z]R1E}I2`7/-bD6zu() c8J3hXH̎ LQ]t{bG}-ֿuɷ?[\e_~tqS}mókJfT0?mOzd$"O?;pk]3G~M>%D7uM ) dr1q j\`\$zog>?ת[9_}$n5n%o+zT:TuM0-V,HÍVVVֶ ^?3 @G_|{c]//2f%MC?{0]h>Bc"]*a ʺH\m5Mck$lF>|&UHcrTvO9ˣ秺ŶzTD"Ŧ0E\HsMyӱ9ݝPW3{V1'ɹ:|ß?O0sU k"18չ xLX0y_\o@n U0"#,Ϯf]3RSeyiYYYUS*[_,munlSUǂo> ]\V^ߋ=qͳr9;{v,̓]c)xJ@/1"P(dVj140Vi7/!A̠'CѫςAꮇg@1:@R } E%%0"]S8rðb k5 FJNt5j*+@@G9"\*ɸɡJ-R^QQ X8xq@+pH]]L@[c\ 2JcRqӃ-UqM}k&w/?8r'Z*m`8:7لPe[>{?7 ĩ{x P;O.>˲8iⲺ)zpxl)C==55XD&4J%znjԦŁKk./́U6.pM~̾-ab'GzF |R5Ieb! 3;5<3D+a4aW҈RZ:qI E%1Y%bb&z[zbR7+eJ9=;;>dz/e+#-eZy2+vS"[fc֪ nvo,R4:FL tNI\Z |k+Ϝ4̮ Tր vc[J>BXHUb[W<)o[zd-ci,UaYQYucz'7f~[D L&VR(]aTa4_ioki6Ak/TFZ;G$N.Ubvd<XAV r6 'e>? Z M^טVboG;=YRQ\!kx c`}%hmDZ|/hIV g!(DaXpPlB Ak +ޔnA+i0sս>2fᘃL=$H(0Y4"RD@Ud,r;80.?k徲/XmK,nXj޽t7ޒ`YZ+C#Z!ܣ-S"~[bZ+Wy`6 (Y' }+X+3`PrZ|,Öe ,UX2:a~$K\NK˻ˆ Дw*{fqT:~qBHdl:eb}/6"wS5Ba*-M]?Gɰ9q_' F&|-¬Y.͘Z3vn*S^̠K:LmAky̎r$3!Zmm= jPv X)j!r4cv1KSE@AU74B斦zT-h%4k"xw;]g2~D Y[{ggWwwWWwWg't_kp\}(G: .kZ5mi`_owG T`ԋ3n1)|Wu:Bq'Cx~^qG/<: _+niŒ`o"s^|Ӄ$ȵX har7'o<9 lP;v$ї3n ʜGO_~|syEࣼ}-{xu}u PX bD^7/}dh5VY! :I1q|峇gH4zH$O=A2 W$O?}ȭZVeYqq10_yU}Ǿ㛫X0 I0!ĢWyJ%㱰 B'1оs`kڍ3+LCU9!ɝH8[,_0=L]?p? @g//fz&3fӘ_ oN?yx? ɃǏq~7=|pssgZQUˑq^R^U2z=>ߏ&gp8\w30㡠plyǗ.rdWS-{ lf6 .9=qa?i%@0 }ɃiDDaAihV:JՆ//OMld)o4,vnw\ D̿Mi K} f,uMbgx/dحVN7Z-fh06m?:ƚҴEt),M}0a.hVm(*z[MBk,V7.'D%ؓi5{TNbM'zfZ,ۛb˗2B.su`i5 ԭm͆Rm9>O(6hSuG,}:稛PxL^٨љ r6@d J%b`S-\5[AB3P_X-Cp,p`h{<6bWL&Fd _#MAC| eud[BzGXLu* f+Օ<]Zo}_+w$:n6gk[!dB|A&av'𵑖Z|`eBomp."$J&0h,Sx{v+{U8ɕ*1K$|vM( +qi*jh(-^qeck[Sc2C,Sw`mWVu6ۥE4ttwv i<vYi̐8V-./I$OBwC---#3#cqa|hx&kNvG~XJϱ?aGQsKU"njg8# խ\ ϰ^bJ*͖Ѹ!`;fdd_s"25>D:;M2*DF>HșASeި=-=0=%gF qqz MX[Jk ;ҫDðh|>i~Y G05\o+㴘 ZVJp.o4Whblf~[)t<&jzEǿ/8U tnQF* m|}v>VrN`&@|jp؝:` 0張>QͤE`wV1UR;Y󓽐eT(?$m].5G=>=z,:)Du̓y!P3Փ'';N*E2vA.+GkGc`mtї8x7ی沂5] /?9I8-2;5J6XܷY"6  Zm ?ǒɦʢ{u݋ϼ%\{R*)[۶[.vg`7J <̞hҵ u2`թYﺨ<X+@0{LsER# m)Ͱo_|7h3jwI3(52g}pD<&,)_wpbV6A}O`a|zyia)Nѐa:ÑOm*XT:f㫣 XoF?ç6Cw?Jm֖A|{˿iZ_sst`${߿=u֔_PX^߷J}8q{]wk=tU¡H$y2;<_?'ڪJ/DHOOwucHw[K?N!ph<~pOo/>?f 9ĭ12FNQ*ːU>~0}S f +|z1nş~O(+-)'* iU(]/.$Y|x}F_[2ߧ}rZx7JHH#QWmU{k[̏trNmLO HN5u Ϣj[ʛl$2f9=; 9tupw{{#chd%(75"ۻtꉝ^; w0Dkk;>˶l"DBV' 9ԅšچE[e ' P^R8}p A4{w`mSc퍵cdL(7e[jBlfk"G|z v9'Kk;J=<[{BGW\ֆrcS%Xd ]*~L̬6j C#-#ެ!ѭ?߭[ikdnd rCΦ2X d-@k6*X#[H᭍ҝTsHzZ@Hr+bQ4te*_%`'jx݁ҡFc;8:9L`&X!W)H,Sl 6};V`)[!ԹK3-$Xֺen2KG2Էah @틙RIƘ˧4V\\uֺkVg)tFȯն-1U23JUMbSmyqpOY+?S.ݝHFȆVTO`9R276h:ݶw(q[g ufB*\BUܖ+_˻C1qO1;URV|-eÝ~4O9/,htK!*Kw=n9kY,[0T 7ɞ-R9.ku6[rx=cxzĠL45T'_]_eHAg1@+oߔdz7TrhY9,!Y!j:>:9K.O#61ya9ƥ㝟_ b9Au/Ç]Nyɋ{Mf3V ]xU5/Ϟ>yyo(=?:?>=={㈎jFҌYAk,jh^bnn?~hwlb'wS{d2/YS!\Rv\*AVյ ӷ©'^<:܍Hd'w|:E Tׯ__ ̥̗3Ci:|ի'{1? ݣԃq|4; ^7~x˘8Ɛi5Hf4C=IT|0 ! EGn<<ߍƂvϟzqQfZ2Za. 9i0qwd/>> ҽ? AS^\Z֍{}HӠ.n#Zi:q>y!.U$v/^ o<opG1a&]縰_˔wmꚡw/nnn.Y"@V$Ġv`\^_Ӌ4 efc7Uu!4_[$L .7ts='ٞfT*O/J*PMhC,鱃;6Y.dI{٣G{)a Iq,@ ,K10冷.1>n1趷j͖lmMNhu: x a;=Ń<Ԋ~6h6D@뛇a4u<jڔKbbC @VȕrRjA$]Ns`|-?mdVY[9ǷaȘLV~kScҙtWv"5@^'nn}ٖZX<Oh(iFհ 2nRS880S?I&:;;[:'gF呾ь4bp(K>9Ҩ?f@kڻwv^Xfc`1YŃCim}L.mun}dH̍M-,O ,`Iy;?:'|\Ν.$ҍ;>)HB:W ;Ǘd lZ P"!HwJxT,<.)≄ 31G1|Tel'{zgWl2I$dk $cѤ5g 37rY[|ٹ nfgBEBc5xc8@aR`$SfXJ\1K sK6YcBᦇPMCxGuEt.`fgg&f0kqRHV [*.&mH5k J&dLcq" 37=83>DHs Fͼгš)4n'[&d[|M,h+sK8VWyn5^qK§ƺ뫊JP x KZpl-K_./ %Iffv -: ;?1PQRPTQ?N g[~]ͣQX9;8 =#9삧㽢Ҫ)ǗjmߕNnVdR>J$"F*!NkmIVIXh ]A~iUS2[m٨V~ :N6X(5, nǟLցOl5Y-zdguQ%-ck*VDu7̻^`& |n6,@irٱ߶!f[F'&R(]>Ŷ]&^Vf7:'әFcζxw/t%t*W1wO$ԱƲ{]s7'}CUdbCg9y Djë940ƛEދ}$?" ujjC8reSQ{4N@&1EZO"_\:8 KP]O˷qVΦ}mC.Wjݕ#p$^K<`C F,`[2D9q;n/r65=Zm )YYY^ZzCІ<:|˿۔ ~~ayO6Oq cp_~y+X5 ,7Ó;N11J>/q@{}_[^˟}tv!.ᮮi>8y<~bw_$_k攇}IFDN¯Wdh߼XJ蝞E55`5Z7O?XðxtIaͷ-VסUlZ tÝEx(F*L./)uME#/1*E-'{;HPjazi*l4=V)`/ؖRx2 esű6A->+}>Gʀj(+BO 6H4?G3hR)ٻ=?1 vb}_N ww PDPr?ؠ{/>;XE5 ]XY< ۖ=bÛːOƬmZW)1wh3ogOY` H.7ÃU?uW)"g>1@ay.Z}ԫ~Ϟ@*vO+\#RȘ:>r~k݄// ^Ti} P}8'=ICg5dܺjB)XI$F^';uZiI9#} n7R!8U̷WPg$-n>L᏾}ueԗrOгpb:Sַ:{SڎIؠr8&C'5V"j[X[Ν: tkux(bѓĞ|ֈ%J&io@J劭mN(s -cv+*o]rD Rܔ Yd`_EPƎ Ob\cQV&z' lq X |L@c#T@LrX<@^JϦQI)0 d6Ab^Dpb0vk&0$*d L2.JաEΗKWrC&зeevl ںe=Yii)4& Oe$M_"n.9O-Bc13c}$|rPQ58<17LK76xBX>ErݬӉS}]MJ?lu?r5tv,`[ B8ȅje3#@.M!M[d1ipH54Nb Jj{nTcp%9k֣ 6 sr|nIt3e|m4RV\R N M "kY,.ˎL А2LU5H*R &ShEzT6p̹}]Bib;hjT겲Ң!SOCaoӰ/u˪B6I>nQaΡ*̠Iwr-Όyx)QM Y/pb@qa!5IiwAZqI#wH{ϗ5:4]^+d2OsMA,1kKZ,J 6זf zf,d[xK-!g9ߠt;GHl4P]E!3lo!:c19/lRK# (X;ϻmGVf:w+fKqf5ᨊsR-wXg.'[4m ͽa}-{ʿ5R.HbJ0(+5)ҲX0g떟l쬚r^fpL%ZT]]-אpvC"3ܿ 3MU ku ]kF:0AN4V\T nSVĠ K3wwtu#[GkaqcĽy nɧk|Z@_Og+⾆dN9*.?̠k_2fY,YZ\XĂ霟gie ?6#ltj[}5vif|פ V)-qֳD"Pʨ%:WP4mޠRkT F\ܚ4'E3Y)Jc2X\ЍV8VV%eгCm 5Ue%#,vA,)Lq jZG|ECh8Rwh0ؤ6hZCi,?謥T,9OX<Y$>]ZPUHU߼4Aoq-W6uQDz1;>{b_ڵU9<03skdF|cًW7S8$x2MšpbNaU^ZTR<9opA:F|x|q|7Nh"k`tG8.X4B$oF,i]"۴gWǻQɰ,f( Fɳ=D$Q-oѫOBXrIz5XK,MW U y}n? #>㑀x|g, ץ.V&J =IL<|q^ш^b$n/_=z`uC3عz(PQ&2h2&s"'ANp:{.H` :N"a7z\N G)>X'!vԥѸ;k>csfڻxi}@l4tz=tC 3 X1 =xrp2~`)Al]]]vb^?`e llnz`jMnF Vsݻ' e1C~^v>m{_B:VikS.X(dML& D2Z 6F'd8 x)w[>OKWյPuӓd YLFV%r4&6ei,HvfR_3Rit]hTC/FM%A|rƆˢDJ]Q(u@$qD)IrJ7$L7HuՕppMJ˫ڧh 02hL3i@weŢx< K>2G0\/ '؋[DKZ HC*6cxr'zFWpe`1ŅťE,Nchɦr uQZoi}`}.Ö沙4HW0<~^^_@c3 +JH[f4ƚ$X8Z<ގfVJ9tD¯`qX"F%X!gf 5 D&4R %Z8&Z!‘MfgF@t*eT\.]B"3?ƭ~Q0UX~a4eIUF A%T:B%R|R§W46FZAcF[k*{E`XU4cmmj6Ţ@ Qi0_2udBOk^Rt"21g-hBi5b2TR͗o(%? 6TYae m͍Mӫ\`@$d,ɴ5Xi/U2D,*Tw+W =R_]Q~m}kG[{[,΢`g斳^Rh[2R٢wY9P[78;:OX__Hc 4Z*Iu\\SΎTQ2:7= *~J^\]8L৤#=ݭU KS+~+U?yǧBm?#SS} +ĕ% 8V⨦\B}tɕh_+` 2;;Y_j90fGil:i c:kk8ʭ2&<׃ e~R$KmUM`H$XpUl_s}իd-)&J&N Pˁ`2O&PLDG,H%C[CDjR4",liH)wWj~[c0Yil>>0^W~gCf ˫k~z?Gw fsd*HPD[a ylL]]kiX!HK$Sqټa}mav J<&k@,`2UrY^pR075mwOO/p`zcg;2c7?7,M-s1KgxbՆRJ̎L-L4Wf'4LTf[eA^_®꒪r:R֖R& -O C极i4'I|>7 ت/Q톔M]grXh7LD7YR?:!ZK Z $LNLN2s;:R5lMnCgGaqa`#`]~YB pS38pagQ\^٠7_kD7j`G E>xZ.-x?`Ϳ'^8Hȫe-j?.FϾ?ߗuV!Z)gYs'~9g#2~yzwa BU3 V9)??$\HȪ6GvF/?yKAƬyo^^Nf9"@['7=Ylx,qS fUϾ~yK gy<1JZm{\@4h7bc3ao|ﶹA.%l}gn =N {Zu1[:쫗vw-@$ 'a׶ #/Ncҵi,/PYgp{q; Lǔd/^X&߶epQ8ֈYJɱE<Ϥ< ]RlzϞ S4nc_~z߭y1_f œɃ]p `)k$~q~E*aNO x2M aQK~|W,HТ!擏RM;2ӳ]Lg2^*f/,}@oi ƣ6H%oԋ #/Z+c(rEPZlomǀu!Q"%P{sCc[ EE]Fާ}+n/}ӨYeUdڦ]|wbL] D 4M;'}Ob\F> GR! CcH[b]œx j:G䵕UA.Ow**P]lYD/I9o>keBXhzӐѼ7?4+Zu*kTL -@6NMac?O6۫K,-(>:>O?EP0XU.8uo sPy:8ENCno*k.4=O>{,ht_?ydgkTV2crx:^Y%7k%g;[_zX-/̙ u'jܻ~ͳU`&esy,|WM)r&q6zp'fgœ,l~ձ7ՎJ{KŬl.)%0wFC}!Ty|D:} Kg5 SM'=yufT/lh{rjYZ^93 .2V )3K`}{q;-+~v̉#O?yTlv 9] bRY1䰨*xY^9r:y5kiiţrK@[&z[y,I!6s4 6*eee ms+docSmy~}Ϸq_C @OsGg`"㭭q84hllX^1JݖXҖfۛz lцQRll-a؁*C@z)L 8URJJĦГm-+t9K06)no­rj^n2 %MWj X^>AKrXxtPgs(&-شBMY]$0j-*M 4 4sBm`׷@xLw2}a&zzE K egCfIJJ.=:v(rLwEmK,|B)sޑY!z|&)WO|\TH<\ڶ+q1nE>NE^Y@|"~],ʥ"E!7UCw|-䶎R U=826!"Mfyc(sdunS!aHřގڪҢ/Z+?ׂq~hbf<>!SQ6⫋SC]¦+9wݺe nhVU44ut,DrL!fɠL Yh烜rfY((}V#++!{=IbKj5ء6cu(2,\X-wz=݉up894z*]D4*Ba\ ;Pqf9߮L@2L_ }2PYyU}436c9& !mʪ&Tj$4H,>N3wz1/n3ɸ!`G=DETxW#tT ,(̹)yS͑[C)WIuK$f!^\tqC<ݲ@ f Uobi3R<տueks;Ke=A'!qH}wl*ʹZ9,"ZA r+r?k5NB4V`iqQq t-pj"jQ KfVe`PX 2fY,)S: kVF#[,0SE1I3ojlNlM{  Ґe}qi0m~15v(]]CskK[GgggW'ڏX[,4v nceXDohtt|lbj F{:Z0igLAt2bɬ\#{ǦVV8<A/-M 7"a)&YV+%g2腛hKW~-JGgxz@狕[d`0~{sC&Vѳci\֜g\yl=Z{0k|ֈ)<.Xy\6Q+Rq#=m !.Ƚ њwly]6zx,ǣ@ K&ww1Ϡ⯭L t5C_ź ?"2˫j;W{ ~xxGwwbX"pp }O!:;Z A“2`N7^14-;9;HÉӋ󳽰CI[m83~>rpDq [9Lr{gGg׏/#:6n?6sɗZs8zË㓣d ϯ7{'0@w<>zv'jo/ Vn l[ԋ7ON 9//Hl/Gc18b bv⩛O0:.q{'O_^;x+-Tjװ8p]8Ysh n W Z C^ >n\n;ypȜSzņ$_lupEx~D"Aj vjvXf5MX+mwB-TwSMyYZ;/\郇7a*R5AfQO?:K}[_+HkTţ!i"OX LD2Nљl6gZu`[^p~J'_O_OS^j5mk7eB6oB1).F[[gy ^E䩞ڴY&CCЛoػ<=-B"Te@"("@YP<~k[`ڶzde6;i5BƕUd1oA3y,P&VVа\7zqaqqvnyiailt Nu*N4 VFwq;ɀk,a& g y2$XL2H0i_RVjYU;;צ 6q9,]^FMc% Dc[T)ЛHܿ͞i{Id {iEmKyT u%B1MQH$*vii O |B@ f LXkm%-o}elUgIvFʡ X.I<.=`X I2E' Jӛvc2`Tcl,VΘ9!ەJX(AXg D|>Ha|8fxUHWT pzD&_,Uȥ"iJcq8L:%O5MD _no?+.AOxVj&.KK5&u[` ,~a{$P`4d- yH-%۶\У-uUxoic`gfs;gҔRgrzYj iX7[ZA]SgwO{ILOM;2u [i5:)i`W[sK]M~s$F̶D"nl/ZY{ őمɱ,nollȶO ׭YX5i2$f:j{82<3oF5dqxJ֛ɣ7R,FONM-Sk+*z `ѷdDJjK<{1Ґ) gG{ /֩d4z_FӸ 27.5V,-*38Fti233333,"db[fTIiڽ 3y:/#+Nҩo-g}?볾ߛZ,ʊ|0 :og ݣtN&Y|U$*$vVUdBhw89vLl+Bhd/vJ+[,J#L: CY8Rj3`2(I>떌ј``X؞ښA ,aQ]h MšDHmP[&'ɥ(Ba )˄k GWch"<1؊R0 \B5th^G%D$jLf, Mk2`lj{{zBs-%FFĠ1yRɡh$8 &-07\]\9a)IwRqc&Ɖ̬ͬX^05Z-X2.y$~QIe]SkgMY&ub ^C I\Q1$jP ̓I˴(3(0j*s wxluS66e6F*r@Y\X p{~Yͦ0#P"-kdq10O 8@'EI$6z76V,I3rOn(x>)r^MmI[NI4>E@[gV̜EF*~nay˸ĺ[LOw+J4?7g׀mc9<'Its34 O28<`p};`f6C_ҲVp~0łrNQ2HJWU ,.xyLSs0tHE;޼œDhޤ93D*JƑ%\33Œ^eeiO"Ï< ZqÏAĦphAZѢkqɳ$4ܹoţ%r۰_ן: )u:e9^%_YpڍZij.v`Z-XWl,Y&ew:|V۔6>Fwejm}i?xxC,(kAݤ71KZl0[Y2Ͻkַ?t)YY4??L񝴖Qj1DA/(3ӿjUU^n~q}3v;VQ[η >PoO.9E(}/'z]fzghj-;G|+%PBC61y?df޴󝡡X0^>/2(эWjM1\Vv-PǨDػjl-oQH<qև?|hx/DSFƄlhdz"kC|wK?$T`pRĞ~͆Ϸ )פY#Z.-\*T_\Kl\}_?t22ZAi}?/`4BI:QZbHtc}umo925=ū/?>ϻ@KAi4~V.zAՈ?H8z-Nǟ]DӾp~_;==Zw/ϩ~R--Z -#Q/ uhc } O>2,.ی7u~q`u lj kU,2&Uƙ>;r_KW lӨjج vPo$D69W*394 MHT$WВC5E_?{j5(c^V?$?KDg|Btcp/P&F&tM5BM&|Rx#]vm Qjl1zJM=$ʼ'vn$˧_~rM1R_Rz,<3E9}rP,}?xu6Wmc %%T"TB)0ZYZXP xNgG[?z & ɲћׇ~]po&7 b BfEMd\ JvR!cZ* U8-v|~{͓].CVa~b[{ю1XQZZ OZdL&K,A1?JD.K@j}G} @|iEk)/++))lQEX*]UŐj()oİƻGkfT+얏PwW77_dPKtu*m0ӂJ)HlloM9TҨjlG1d u/fC7Eѷc9v.N}Z T T——SWU^V^=<3yz6v}l@7Ay[ v˨tqoggcjPÑ% `(_1iP'ãږqKznnh+juV(A0(5VAP+kIշr.,M"j\ʧ t46Yni;\x!aZ>$ !. = ;04W"!E!M u7tc2PNiR<; +I-Yţ)N'Y6ڭZh0-X2.3C$ äP)䉡!̑fk٩)㘔T2JkMC4jy5gJkH/L8jV$OXRun͚'!ǙhD;YT@6f4@@3*ֺ׊4ryl CF̼sn֦j|X[UYa~V"V+ l"VkXSz맗R# d&F.fӰ`-8Df5r` vE] JF7h|jU YшXP7OAyt $`O#Ԁ`w( S\V18ҘBT*hu"eS ,Tq8 Wm4:\*P6rK MXqkFD/(TjCEj"UJZ@f)TV*eҚC*Z:{d@ WlZ\\MD2\8i2712TS^ZOf21'MRlQ\Z^Y72 iHhCr9%w(6wa`OjJHPMi׼ {+6ՌH\jzF@\h.,=.bH4@[smuF!-3҃[֌YZ}kC`(@(KE"+~ϼE#G{jqhr`i,U(8׷jQX u@gDR onfu+HY  jk"s{bU;;{G'OXQZT+7% 7 k/onm@3ャӓӃം>Z fO/)ǘ?_e5M(va}S`wksmcg|V2]BWÄghM!faf yP͞ ?~< vvv666wv|@[]EQ#Ͻ=8*z<[tw77&ϐHm%=~rZjˋ2sj y?:T6tOmӧ_^GC`8]ţk[:Tk_>;ۚ402=RXZV9ε.~~ D"H L6H"@0}~Y!4(3ir2 iaZO?x<\] ++nolnnB0h.N._>ٰ =uNjgd)B$2r:H3D^9_ JxvhZlmc57+Ayeٳ˸7 e:Aɹi5A[K/^\A0Ғwi9^_ -/%/yV/^=:[dk٘b{_<y,CL.Wj:+:]9*IJ!w?@zteɥJޠ*@pjhdO$D*#)j~@2N+{'ɸro$/rRMDp/\E|8iZf%Cbqh8Ci,Rg2'urTy/uUa^t"1[lRgκg,zI#X4O ,rf 9?k(HUM%YM$++j\ לEL0Ythu.]I 4f7F EOkUuTrKVGcI0YtZ\&|P29`RR_ kU#lU/ijڽ Gd2XL"ͬ7/|i^ӨD I A('iK+e(DLnml"H4 q({y5Mu`1 ZTť%$/LuF5(3+JrR榖!NIMSӎٌ[_2曞,.`wF?IxoKcMUi֞.;:ӡ4-[%[_f̆;[^s` Q[AUQG{_omE=hCS'zzۛ Q8ac;@QI\Ɏ{ HChᮚ~ͺգyl`kBK$q1Ḥ)<eTl6}KF$kWOnn>9UJIL@u6@oҊ!D*, O"gcʊJҡϺ,Ξ>yzwZ*b>T"Jli,. 4HH1L0 "r6R$S^^FMPŤRx24@Št6nƑHx8$sqp;p#)wwN _cփFv֕V5a >UBƎ4C(O%`ŖQdzvɻDR&PiigM*>fxp7:֥>4Mq-wĪl WMϣz -4ZZ:0tA- tvtwԖִ644brCeTŷrpXL Mz'U\@W[[(ƕkL\{ckgSUi~Y]s]m]CcY ;|MH fK?3=q\ŏ?'s˛SG/z|+h )zr=s _^u)Ƭ mo?:Le\;JVoPʍ٬6眛v،:47/$ 55_]:rfϺN:g33ib4B??x5PkS.ZyyL 5saNM,k'01?զӤUjߩ6O)-*]Zf>߿Q;+aJW?wO:J.92A IW+Pr|(Nf׿GF\t|WTCu=/ħF]}|4(Ślx< ᄄs>=_mx ˜UuOW!갾MU>W"fF}|(`K__>_S4?x>RZ>k][b*-/VV`xei?壐hw?e\,8=KwuHNO(,q/,p<]{g~~/T{>Vş}ױnadR(8t-\wcbvk_xl `j%P>*!!Ғ97o;!U@|0DX7OL@8CF>w.0Duv6>d6++kewٷOo.G/t4Df 9ܱXB5GoV@=x=O:]#nj]f]+[~gN!! Q.v)\Z=<<iB4⟟Y{t=_+hn~s7! o^\n.A-rPP#rfvFx4ͯy7<pI1fe?Z qX2XK/M*U :H_Tld<Ec\lx{w5]q[bg{{;zSZiucosۋ|9>;܏ەΞ>+dJ#R{Ϸ-% 4ɣG?;Zʋk7_;WeTll/y\1}u5CXǕy?WU4v͝D5)>< } X}I!bï^"v;~;/tVW5"B6W:v4 sø{JoEeK9/^?Yv)˫%J4+URf8%؎Rxw[ͣգO~42fD^quɼק+խJp-NeXL˄R3XZTxu1,̓ubpsgu}oxkD$1J|'O Z=;}xhh_ %qH6!/! t6~ވ%ٹ;桵}9^Rabtv%%VT4Ѻ#ǧx(9&\R Tzk6Zݫ$gZ•7B!_"% 鐒ʦmƖC~ {k ΗA@O^'e]NhC'2DȤ;vMIIUc7^13/̸߼:_5ktlP/nV'2P. 2-PDB= |,_e:fg.^Ou_KC|>MurYEjkB_=kjI󫃕Iejp˧A5"$XCRM<$BVFf&`ZTT 3RGjki' ̞ç/Ncs:Y N*Fߪ<.h{1hg>8[_0 YHWG/V\O@a"ceuRoFVwmiNhkvs^mm%NVeSQXP.UO[Jl( %zo<6m43->$vII}7Yj4 Z"4k($"N+3FB*eD)UhfhfJkԬ [Z+!J8zYR8qD#UgLZDe2\vϷsZt:\@hS)n*S^AQy]*(uS%7HoAl lBr.R I*>;r;gZCg;4mCf3>o*b6(z4pR!ITid:K w5C44!o'R-Q%P LJs*3(L\!QC=mЕ)/7-7vkwk$X ~DՉTCVιx!*T' }WaQ0#}吸˽s'?M`P\)|U.+f |yT`O{]9Dw rR\V^]30j}@,Q`kTbR74@OgGk-"3%M1ZGVeU -m( rRdW+Dp_w{3̠V^J>)g5M sUD* ]KG? OV3HȬLٴ"f̈́;N^myKKkT),q DhmвQcព xѿQ2]V+c5 RZwPF3WZQLjLEfHkxfɸ49FRnu)"- SnPJwN r`k] 2+Hɯe{~F+^V/:ŸW f=c0#P_LMNIƥ,ߘvri!MA;"DǑ+6eHƻniVm,C;4JnJb)4a*H"6J.λF١鐷)1<-A`z5L:^[ZTR`i|-5`wiehT)e*ҌYL5ͯ6~/3o;X OnQeK NႼ?eZ.'f&+pWKHan4Eoki}>bRjfYQDI0uƏIJ8*z;%߿ަ'.-7%iI"HAdT })2ZέyhnnWnKfTecm5fDZUEEeUM8h_XD G H"9mcm Օie[V.Ì 5 e!^:J%WW[;;{;$gcXe2w ,)n" ͝ݝ-Hm&OO‹R޶ +/!i rvFvONOO/N@c탽Óӫ(H]muyA&t:r^j)6}\jb}kf"7TI3AF}-k6bG7[;;[[[._>|d}NFnG;Bd_V7aεӧ>yLomskwg"gvU0vyQˎ/)쏢ʆ>xaG/@0 Fbh,[%VW! ^O^|qsSQDmgBLΰGJ+qG_n/CAעu8Sd\pl'}ȣ$ԔdZdNJu% IKSj>E*EV|ZN#apD #Op$X0 trXX;k| Q_CϢ6 (PY|M2剭C}ɭxxyѡWJtHu%xh7f\dcviaaCzziZfN`]u\F 1 d[XmlnE<vD4[ eU]A,J9xyeu{dwĂ>Uɓ[杞}ww7VfQ8!۝9eyZ NU 13f> ý_6* uDϼ()@ȸ\UN&g-b!›`S|I#fF657u  7YWU[SQs?5 cÌ& <$aq8JV3N"wwtvv x,n.D@Ջ֞ 2IYTr9BX|3Hg߆?8ѹt"~|byEU-##}}(5@`n4eFķInRI'p<E84zBqPU.pRqfɻNlA| Q_+(k;+)FRLe Db@(Ys J1)3՝ˇsbZք3m˿tͪJewV)@%՘l JF5Jw_WsN0߃Nt'ؤ"XPLVjlMF UkjD*1,|S2fŵ}o5_(;TԨj9>73mM*RH3ſ:\XS߻֐>ۚWI@ -]ft&9Ӥ0NNo|~F5B,8ׯlJa H"Bn{~vn󮹙Yt?ˆSim?X4Sw=F)-QgbNz[ FVs~~ 9`}j0n}ՊE?^S}M̦|D T^?wzyŹyhijG+SŕJ]䲉x<;]s P0[ߌǟsfv@Їn@~?et#߇+" cdMV"ͳBFk/}f1G42}bhnk9#+n`YàE3$"}hYXF'߼ژV;BqcYMGWOW^WǍtf"9`ld'^C~f|}'1{yŠ~7IY_6jfbuÓuw:H48X ֢ɩ9_  GW|3Snbɿ!^_( c!%>YS|l({tyitlLpI$"UYB9;K,Ͼ#/ սy%u/?9 l:89?Zz{Qh  q&uv h9P֣aET>~z'|k9ZUW_<.yLBlr}AIiW \H{jpB[xgg-6I׏6O͗[ZT#iMN?I~iɒPSYQQ>LfP&h() X+qMkˣ×ي(/}_=͋d|3`^ٺx~`W0]#Xtx{=KJ+zhF9e]'ON?ibG%4ElrJ:I7}| {}7NRȯt,/a3Y tW_XR<&^Mx'/~(r_RyT~K<TwS,_̡s(!\Kp=*(/> /HA%Y3'Ɏ\lnFҒMa8<9Τʋ,w5;LBwmk ; ?э::9N쮅|J.oPL@bZvuL Gë[[Qг׏A7b ;G̦Y2l 4TUTc L2ɘҲڶjrw5XLϺ6?x\5OB6HˇRՑKo09#B57t b(<&[!XthGC]-(1F'[yżh}U]&R']d]xgcm6? noӸLRYֶ!4M6~Gfuz~bA6 f(OqaꃛyVphX456B.*QtvJ鰛Ҫ]yymhRV6|P8ʽ+S^龍Һ8GK8I:fTxL[=:M,!-6$5t2fl( VvH8Vֶ $#UrB&py_5ib.njw5VcwBa[5Եt0x*K*`j!U('*CŽt7@F0/#yt1kiCR\*P:!]%V[MRubx.8Of#20n՗W56v N9bR*J$gFAڪ* f2jtVUv}Oˠ]U]cs0%R+feOʚh6zPE)Mܽ elmC|gh|c !MߜQS3P=M 'GY{J{ef4OҊEEQtOduNI Qf#k,A4@Lt) 0J8)x)pSw:f2BE@"2Jʦ,f;VSҡK[ޱ<͎{erS)"fP$ ,&1QWQTuʯe$㲸Vz͙؈^$%^,[2I-UlAI+ fidHլ -BW\:@`9Vf<$<i4oz 3ztp6"$fjݚɘi 2z[TQ z fyYoK?Ɣd+J6Lۓ"L w\ZײoG0[0,N)!l_V=}/#!kS).-+E6U|DAr[ u.ZRJKˡJ"V] Q03er3~)'}wxR~Ei.~A ښ*p _yg[5QBں&nֶ֖FV^ n4U_lYM)%Pв#c  תJK2kwoڭ5v c$El6Ag(P~mf[ [Nor $Ǜ@Q&1RV7`A%сΖ pdS.!r2.#FW\ }g&܂s<{ʞLi%"zײC0XvHZ ҫ%R mnšV" xfmjed75)׼;NVgRi>}@흭MHolģnGnLJgU%;=FY[GP&mokk=Ol$ϓGݸoZ@@4Ͱ8l,*.mCsuKhg=:c|gJGbP26->Nl'/^?zxvz|||zz:>A~dVE|-?'m|\3qzp{}csc-ZHFbwᓫ%u;-)fSjNZ yo޼|r7FЄ3؎cW4=z `dvC2~kFSq}$H  Dx4I8㑰 ד7/ͬʔq,Nn,@ƈ*ćh'P0šg( t4 oڽ|"nՔfD3{q% =XًG;ˁrxI@_.mFfPlfnWA=3=r.'/n=bnLq91=MA~ǧAœì*d"DP[FAUdrXgf=񳧏fy5%1KkXG¼RFR"rP M.Je2J%S(:>_<~0% 6;ᵊJE';+g% Wˋv=V֏3ủ(J&ͳ&"fscF&lԼ٩ "h wnlƳ8gVp#N"2oh`G"oy4Uw,9֊rLqE(0)9:;99:LD@lm}g{l`qZ>>KiiYM7AlvDt@W 4<FCޅGN)[RQ]U8H4<"5|YkWw|V| ku.P^>z0y ZhoYGq %W6ttv1}.#%>0n,b 98%ZKBlo-/m&tq$RnI/Q'[k :G4/VVC" Bhg$g{Il,3T4)P2@QQNr-V'{ɓhd8_cDIfrJPX 3mN__U"6~?ZF2mDJ'լVx(&7N>zxuU|ʞI:t`) UB~` BDӘ]0ե NȌ`IL'>ccKÍ5Ae²hq(d&u{MEj9mJ -:x㧏rAVʬ`:.` $ ?;ƒ5"|Mn#ՓˇWW;.1%-$,Pw[C-<*nEq)9BM uW7ttv%:9,w $l!qxkrviNi-,mho+: < ;IaIre̔|R_k[KM):֙'޶ƪܢꊚƮq\Ƙm˨ nc`Q$lRiSVV^1DDZPɗυr -X&<쎖8<eMHDBe m<:T -"BdŃ|X~65OQ]p;< 7p@) &Y jƦƺ:gpd5X\׵vvtt_\65!TDξQ@oo{=|glxpxxhMPok% `,' S ϡz SXR׍Щx 9$IV1t: g[-\B"lV. $j.^NayO3%RV! -ur6b"Hc+"i2ZarŤaݳZZVьV-f-Y'JT4.`)$2в"=*"(Pxmw7da6ehSps']2ȅY)9d:Ȭ9-3Y{Y/8,&/9 9PcQ{K WGeA2fxh{1oZY jx\^;V_}AJǴ>~h=`S 9wk|H"r, zMTPRѹ럾:UZ]7&O|ӯ?:^6 ;ߕ/b> 4ȕ(jT2៾?w!Y^Q8w&A_ |.vB$qLtϓ6^ߟY]@#BLEb 6+,XRЋ?fBKy+߿2J}gheY$H`% &/׻t3©VuS箾_-Xw[?PjNZDx>O(ǚY{7.G*ӨU FO%4iiZwNs_a *`! Xyvٛ9dycģ0rIlwyVVY_u%cVP2azѬB7[8?Ne0@ msXZlu=u%^|뮁6/)O(yTo2'c05d~n\XA-."8^+(şJΫp,8Bу= Bn!.Tdu۵yJgUa.bYT/=ҧ5yOKR #hMT݋~xj#Om,/x?ԁok gM}ԤtX Vj"]\p=Z = Ұ1+󑱕e% jŵݕg-ЅU٫_L;kKj,lloxB+6>ݎ#>]/&Ox =BaU*c~=8^]wVvͳ߿k뚼҆1'_>D.":q1Ofd?:?R84*HP,J#Shb~j&\GBnVzѳ~|cvU!k)|mmm]<=0seP윜Ŵޡ *D,;? z, jo^_^}s4v?!?W>u!#w45v $.&RP!wwbeB`7O^|W{F~_~ݛ"7wz\@FW^:0N d ueeUm c`c#!t]bC^N:4ךg_~Z<VGe9JhCtkJXYM:ƣkӛ_s/k tJ"8o(w{z4T@1Q,! tGmhtiEc&z|ډ"~цP24ci E㏞.;{%c֮(ƒbU=M奥xenb;.6{s.G^#Cj۾x4j07v_|Gzb_kcC]}S"Z("9wl?Fp㘛y04j(TIBQEo Ew_|߽ٚbF{:AL+i$Wj#왕@]7~1C}63 U+㛛ǤΆN1iDJӆsmh|mYZIǛo{dxFUi?{qRwŏaa$z\.q:{V‡g{kZ>ޚ2p҃49TP\3NɧUݨNN›9%!^2Q1P8*4Hk5B AܔxNAQE}!2..X' zɹ_] "Ť I/3Ѐ4ء&f"UwG BI5#ToiA"䉌LMnf;,6Y!@ /R||yi{)(|URQ7FfrZ; UI\V\#̈́njkaj1uBhrQZ"-㡇L[:HjU6ILHML f2P6y < x&Zef%e-d58:Si\Kjɨ͡Ɍ&^.T2VRC^f#]JvTյt0xԅ BHm=xZJ%Rph4"2BfݿO{"h<G"Լ+y:Oâz{;yho%i9tÑ2kKI*k::ZkW~Ɔ3˶r!Ć [UM:6fR&t77@#ZA]| wWl,E┑`iyUmc'(t9xMN@o#+J‚lwko`w*r(솀2%P멢EU)F$Rii[Twd23j]9Ѵy(M١^4T:I?6XUz %ސ rI(|[܏狍&M');"iddu>oiZU0'7(!|4 S.)  U%ܷIƲJ!4Bi}(/),W~ڂ0-ϗmuӺ$sӢVtS$Tosu 셂SZ+͘8Sy/Xw' ӇPs`hnkÿ2o9LA`Wo/m[K}UySa`4H:bALMYh2#aSR 4+<%BehԐwCӊnwh\Gά*IQ+jesn\'3.i(.+D-0,!3)=_ fPF[+=JRHK* A| R'zN6.eaҾ)t\A5z݊ ny)l-kdl7mJ74ut[[Z5P䤃Ö=}R|HӺkiȬYP;zP艱ᡁ^R{"%M9kgPA(T zdKИ\r 2>2R_]^^{mqzaIS;VMch2G(S F˔|aR+q`wnm. DH=4RƳk啵л‘鬳^ǻ_3G U; bV"-;[@N*@;J ˡz4%6vw7eC/ATbYZj܊yY_+*U@;_݅i;[kgw(ytppzH/'i;!9i򚖞qz&%N/NNwwI|=qqCH0MS8|D}u/0N'gWɣ4<>:ȩ#]bvLiPHWpxgskmuu 뇧K Fx49մ}(\):'/65(X[__VcO<: x ve_˺fp ִ ь'ϟ^cd2&Q,F1Ȋ]=]/6cfYXpGo^>޲3G۠1i@w)u8Mnhɽa_jX,zZǼZzHlN\˪[/^n}RKੇD*י,ZyRT(bLP &cv!s2&6BłL_`d}r'8o75r2@L*2 T*U(T:ݺyv,tV9Ĝ4R+,*!Mml\6Z*d6Tc2ldy"BӂI. R{`j*+L9!>pcM۸,| rf{9g3* xHJ"Q< ܌Qg3%ZMBOIKwhteS?˵( mFu8/Ndl% ѱA{YҌC ՖչO+/U_CB`_Ėz!w-8 Ec0^eu5\2qH,Z;qpFL_#RjghrS{[[ Ob4Ѥ+[\ y"z֎N"b#`=HkEu]TS ꟟H1$vI!@ٕm%loZ!68|x_Tfd~}+3IDutzvvv~F۫~K%4Z܃1!GkȖHo=ĞRnu}tC0Ϙ$4 7zpz~y~qqmoE]&Ì/tOgcYH#}.c!}tw,eF(ء@+8[zp,&'LJ~ o7\fzKs`a[ي♝6X#wF@^_]gɣÍE||k{f)58r R˔ȸ]_^\f'/A7c _cD"WRQ[]4PX$TO[sc8_@|4yvY^?{| R 3W777wa 5g&݁v~v2݂$/kpG(߯hh#qd|"j2zO'W`dg~]/ZrXOgGmEI^c@Y,aAR[R ~n0kH~)4P]7N!2)m<ڢL740w: lbh.ybxt|Р1PҫLhts`Vy.yzx'~QN%xx0[He 4e9_,}K^o]\l42ɦMb9LS#M i͋m壇`oڧY|m$ >D^'L6jQXda+dPa]t?zMFI.2HBr} i4&auh=K&=d#Llrކϝ>zG*QxJ@u7T"EU©9I!ƺI/DW- LdXv/++RZҊ("60vhjhnifjMFrhw\Z'0$Upl g1;͂bhWcM R Kk;*njYlm(*k#t:m lИ;n÷Vc+мˆ *b=)>ҊʺT)m486JML&-ΒqLqhk#K5r6rKk{ ~52 H :x`VZ\TVY5Na2C{{s3<fPo{[c%; "P\@ģnTq򲊺qf|@!N iC}m1)d23!R4:41q0/w`h@ ו"k` zm|M 4 y#љd2%ey>!|Pw(D$R (o_R݃a 20Ico1f,L£S$ H&px?"X),R\*ULz{9,ʵ+uZ F~;4_,sdXuK0{z<6:3DE"E=Q_kF@A儞 KƁ/)L:A8<YNuk̇l,P>i_ nElWØ~eoo'PtY)&A)v "xtDcZX?<>?ۘ@͸Q~mSx, t|FSL&՝vN0.Ic$5B+Go?;O-R Ja aBenF2o$r1Iӫg/<߷za IbaMbzƠ0-m}x:+"–xXȝcV3( ; {GhDRd/˘:zpd66'1~ӛcb y+@Q)  D0-٭37%)d\S4@68;ÖkMwkAʡ.2@>_>.u`}I޽b ƺf68k}cnkm2ʔID᰹|n.E\G7E5%9)|k~z,rˋ ?JȮjZ*I &Wˋ G_? zsYAiJn& D'_ #d6:;Xۍ|LIðbz4A|6bfW>n8f<@8+'A|_ˠݵY}(qG{;{{q hLX=In~ `Pح.aba>~皇ښZӌ5820=@287W+kGfLXBS}E(,Dւ~ߒ?,/-gf2bx`Mb9.K]W\3/o.n>MXci^<gׯ7&USp, X(X6 vEl%O0B+hdy~jzoVECu|O_^|S)VtO/{)|~P䷿~]퍝"# m"m{b3>9LHօh<EËf}~@TP\Ms=_g_?rp~p# 6յtc(d ? ꆎYIģ9Xw?807%%m?oBRT'W'E SlBL RVUڍ̄6wףy~͟?_D5Eia!QwO_~x>ev7[K&HcuEIiE]J2&0=-եP&vw6u<ٗ?_>3b /!›.$?/%nKMꮩjC|#UWT4F\6a|d ..-)$;px%Xg_+˂`PƬo^l>䜿gd aQ}MU%eUMl哳x|#9P^pAx%]>}( 7ן/oox cLJkˑqʣO?{~ _X55 vM78yO_zVg`&FzA6];2?9 7h]lJ$ 90QZ~z0 T@[g+"`Zڻ dW??GnD-){eT +[Qfrvog~H7I14'%a1=}(fʬXç_tI/р tG1{ǘkljkS7GqRa 8. ld=0xw/|ݛ^&x筂wS:OueFA.uo>Wonfz~+Gc8"]bЉq4˶4f}W|<4-`}ya[w>Ĩ/*zog{yNn\~xI(4K3TͫC2N{OZVh,BLo%'UE(G6{zRet=zhUfXlZb<ٳ&\9{{)Ak,Ͻ`xC`̮pm*"v&~fg28ZcXɳg[3FRYࢊjH|bc'谿K{P4n*bzǦlPQ4 6/fjD-,J& ;j@a P jQ+5 &>JNaҹ'H;Ü{w (S5)_WD/#7k!]U-}PTj.>ɒZ DUL{ՠh4*GCr24߭5d^`Ecd4;6N*L&E"KL.2'ϡO V##:!eUֵaI4Pj ^å)AƢ0f8TE<kA`Oѩ3FapmC*(S2(JjsXV-@ANt6C޷ݶ:'#ۅĆl5m`B|X$Lmb:al,%}%r't:nZ .mhimkokkYVf0O\Dk+)-D}?Ew?efd_A񵲪0bJZ6PWv(G);=f4K*򊪺>,CBI#T[ſ>)(m]{ .I)DJJ[ |L2tw=K :Leֺe U)Ҕq`aQU]"4TRvcMiaAaqF+-{1{!Q2d\C!+(FS*\@·i~ jei[ɷ|H!$~_ b#i֬bim`[}EQF(c yvC˭]NF(,1 .P M]-uyi4p˯eײX|-M!NՐ`gzosCUYiAI3C"l龾c8iY @az,LӃ㹜^akTr2K&*L3ň 쥌-Q`gCQۯy pR!)y is2w{hb(Lve𫪪4e=\XUT'땙™ST\ADJA%8զ~UUWW% ?EmdŸ+2"Y="h/pqյu M_klhtksC]MueX %G1Y w%e`YYo8z=11>>:45y霓/AezaTZUMS[#)t |.äQcC}5e[~iu˘¾m8h6Yl}|LE lvOr3J1mL;Ψm@ kѿp0 'H˄4<(yˍ>+6$Hdxw)z:s/͘LhWs]e1 M;Xj Ak:G(b+`ۛ뛻Gɓ㓣UFEՃyk9),!rRڵEPנ/o^^\ėB(Ԯ-,H͜ cvח4mZ"#?R[d_\fF⫻А$8ݍ-虨^$v~M`{&`~ l[u4W݃ݝ͍-Hm@4dkgogr/d`K 2XsmN뼌';Ӈ燉X,EckX,Ae;{tuFm*͐Z2.3 :F8Ջ'.++eaE p4 ![%qSo*ҥHz\e\TV65'+?Jz h =%/} P bgP[N5ZPXZ:ę]~{a8Isvf1r睳pb/\g)Jvrrnm5nz^tɳ5jBu&lM WZ#rϟ8ken 7 +ͳMEB'"ڠV«7bPpBRc;N<-5)4V+,iB/n )R*d [8lP* EbTx.zc!|ds>T33FYQ٣gzJ-Ih)%\6 6/*|_-F^GԄ4}!.,k?yrsYub>[L;}gI4Bй6;???%<[VO- 0i8=BRhaIMNvduqJay_B%]'X2.`0shX$@9ںxtha&r9YExդiD;|xXjG7ZtyѪc'px[mu &V#D͋;c bo՚YDnmt+0S cx||xx BO &Oy,<^P8CƥZ qv`nO"Hg»'m:MngTH{{pq=9݈{4,U &̔2Xm&WTYǚ^; 9M"i$.. tri9$6wAhx,E nx.ь7dHcUޝUYBऋ'ֺ<vkiL\tg` ۘ#({=4nl!X#9<ޠ/ޅe%ˏ6 K;)4gHˇ7h^d>:54 [{\ZWWiCH=LkɽsydcP~eSwOGU,YZQv;9;2o.ݫpHa{*{GFǙr9}2 DBwwll{w8%77P[?F&M 5E%i${t\'bPPgrY\%cUeequ}K0 G%.AjFg2BeF*.[I.0Nc 4V_# 4bb=z- IE}╫wW5".|'/2NhTwK7 ,"m*rp]+Ǟ}ѺCHg)f"nsZβ9<6Oh]4a*8"͸w>oZq Jg,}ç{flK }'K8H[/lᑑ,-GQ"bq8' 2fPl d}E`x767x<C 4"S G?ьC?9IdcM?]C&ƆGh< $>['TcHs 3_|3)JTr靡;z9f2E[PކwLm6K$[ۻ# /]}d,(mY}e58~߼]{CccCd\o}|jE3$t3t}vפ*AH,n){~3H/i Z)tmC}h6T"<]K_Ƿ>]YvlUo}M_(,O X_ x55? ݩrXa^ &%_|ҹEՏbu,5<P[YY]BqҠSP|5~z^Q_݃xm7'o_%^+Ҍf,SzT"Ɔʺ'Z,cqeu-rן_Y-1 ig7/mڭh4]pgg]36oJhm Mm4qO[l H, ^}w?֣dD|I+Z3W>f.Yn,R6яyplyq~q5 Dacß~_%uD_4_}xAjX Ȋk.nd;v䁡ѡ1۳.-V"ѐft}??_YBRPR?(\OFO|}}}5:uQzolt56Bie0:_?^/"DC_N'rgxc{ggs}ivJŞhmGqq@cuu]h<4)U?8X\ Ӂ1}O_rKͽмAmkk9CtW4u 5g|m5tNMZ~ë ݥAawo㟾ymS*K+jZAEA\ZR^ЁZ"3F͑;}:t~I]zOɪ_=<>ZSAM\VRVe*h^G5-hV(/̅?_^nF_/l-?v0l\G'15/nGS9ޖ66tr~XY%n/>NgUa^N!VZC>wQ0J:a ް"CB $bIZ h?W, "}qMHO&4u6lҕ'ca|-@407tzBC>&I8LZ@c1ZF^8/;*wHU|O! `X\FO529CF⥿Py7,+hI)++ 0>x U"rhF8 "0hY-UCHQ!jiy9Z \JIFs<>5(R2 T Cw/BwDq1!Fb=e*Br@CQazWB=5Q/tp:#ވ1_].]A5xz(L([%䠿, }/rkEFAtDZanT(r KEygL 4a6 kN_C`TW` `l㡱`SۋZGN"Bh"'9 H%K%^rF" PPDC2\@]B@ fg0KӨdRJ[F |00p +lY71L Ny%ɨdBeQSSZ axC>#"/D e F3ZF!%90a2"-P(fTlR %+Ykۡ=RjooijUZl ⺋܁F ,HDb 1Ii@!MO''@41D#Z[^FDPT*יk[:=K{'{6Vv l݈.ja |Qٵف:^Vju:R!B Z!CQꚻN IՊe|@;,~پ&Q5ՠVJ")&[f1O6:\}Gn`yG4mjp֨C[sG'xjMR" Ebq7ԘUDWַ||2[/.L "॰l,6X>ݙk ĺ6wxԾz\crj[KϠYBI'U {E5xROML,UKY"ck~iy (5pfl&gg'v[456zT@H k8<6sN4k.L{k =5U$̨ ~NԍnnLi Yrp9 MSP(9W%4}&V%W];\) :~2jy'k{W&=e[H 04 L/67a-).L99$lBl42zڱ.l;>>:VX[2⶷m,2~`ҔQv7Jnqnɻst|rtrzxr|t dq`7[:Aݽ}hu3Ɓ> '4CnsaS)5NnBAONN\!`gۜM]ÓsK\ mi^QV46+xؗV_Ǧ)[]5\Z:]սupxzr}NN@N)_w{|fquukwJd0J-aJv+/$mFwMPC"# իWOanKýóEuw(}DUK 5h5KHKm6QI:|PZP?Z70؂kFNv*6Ǧe:9=3%}|vzvrx|5;צǖ6wvBXjŴdlLde3 Z#7;@HA=(1_;ZY/9dO/Y2 MABC(˾Nh׳qVs2SqjnIYJaI GI+DCqN7'ӗ1w VyEy)qPͫhlVa^R|,7/qSŅ/vX̊2z^Sb&'`Ywp~e}{ L{63_i."T" ]m]RHIh^_ Ӿ_kC[VsNYOBcgpjBW{}tZ08pd,$ŴvbSNɪ8<]CGALsm|9{t{x|hGCiUY~&9B{ۡ˥fe&*hkC{Is}X$gdSIDp BycoE E$RN1<60-!6,V%6G*סdw̬@?j(3KbpzQV^Eh ٩L'ąT"s$ճG;G'&̽2*8Lj!-&%bpZ(9L]_ٞpJya5|Z2Kāb&rE"PQD) Hsѱ 4.Lg<&!/Ld99>6M( }7pjBH-j4=)%.p|NUnn 9VSHPal^mF5B1#P%:RʡgT UBeu٦ wPhJEd DD'dUjJ.+נ)Wq%jlePBCQ lY[ɥJZR,2ZZSUZ2B%A U4ZJ33/)%Q|\VYd[*hg3)9,_ɥ". kB"6%= '#JiֱhK{"*=jJ@/xN5(QUJ1[UY%:&> |R.l{7;g`(.;67ԋY,4i;UQ*"21.hPpi``u+8OG] )+J,DEo^.)C?r%aZYY,4u*\* o8[hdg`a8)=ڜpD2t̂e275TRVhGhk߸yguq\^=_+**Ӌ,q8Ŭs9H*˥}~{kuidd,.[=sV1*|s;h//,;'j:Rpy"bH^$HUɵv9fVXr9vd\ FK?g&)_",S>w۳(Nd]G?Zkir/'$'%PǠQ-f##o<|89D`97v>MJEC+мeU!ҬojkwIcLڷy6=_?1 GJRY`W߸#@I ך7t 87uB">nDaV0Ś!N[߸;EĴdsoe<|-^hV&FYW ܸqouOktK~645D|%kZ!p {;o^H@}-4佷߼`wo!)>!FV9;}G?Q'}9:)O3GW{F:j-jf6KQ@%a1ڂO"^-P199xOnfR UЬ-{o<91<>RX[[kXzGT"` $-U;2h4뜵ͭ]S#޽~V*R#Y.uΏxPtښkMܬ*9Z^IdZ&%vt mhnhMNzچoѯ~_"Tb( [o~>{[PogG{Ggd˟|lMLk$J&p6(({޴"\q~_Wc_Y<,H\ǿo>xTmpzf']5%#3OH*旗ӒxhTUv LNNVo}ϿF&9>Jc&i?>~yP75i2 JIX >-; Z hD)y.nntNOCapv%Z (;o?}?P0025ۤ PRUYFĀKiEʎ^ČlԵϿ7vܢ,X} hlno}ُlLyW7sS]rZ $ZNA O,- X Z.MO M w?[sԄ+!2JdTJ>߾4>246;yrlLe@''(-ɦubJvqP7?z< ;Z~~k[>}֋S#cУyw* s)15#s2>@dֽّ~Kƃwwe$ pf"mkɉ>O^ Ԋ,R1UdSR]6m~}{{eoj(4PDb6zt.=l-~懯tv 3= B,YDBj^c2v^O?xlwGkۿ1$lIgT,oOx-vK|ُ޾3=g&3lvI^9)9[45޻q[7N,ΞĐD a%H;]-Fy;|'gglDJ̡se%iMKo,N}[ozm&CAu56SuNQnƣaO=77_*199oY޽q lqqёWi58'%j;8Z_6{܂JM/a^ƻu:FW۪ 6U^QJΉi|VS76tZMs+*=*_VAJzliRMvT?1X^ ]@!bq\h6^{WPVV%U|wֻ-rD4t |zFR˜ r;3oC+e̞BА'JEZ ዥu`fq[YUkRv]м44ʤLciѰ c](3plވKy*NRZ]u[XIC%qojjΤ l5) (y "r,[,葁[Z\}V*oi FNHdL st5YDZM,@?NoV66|J]M5&Fh2nE hsYV$9 'l@ Uh[M"B+<ɦS~G"3~h ,+'Qsl.*SW*uFؓڡʁQF/b2* 3 !*\JJU!:&L-,.))σj"A?\kokXh+((φ L .`ϺE{)̌TR*Pj+42MKA;V*B~2a+CDWPX XHTTe׵;h$aDJ8a5ā5X 8]'38FkjhUP&u 95{@X 8]McRD&XYI+ &h>5BSh FЋs3IA=QXZ@e ɉ!8X +ttybp͡DW&ą8bFOJhX9|&2˜] bY d?bBv_[brfIԋSCB&q^tЋ8| :fT,hvЈ&efP!3 kˁڥϴyJ`6 tt<ƇCC'aI5 8:bddb!"TQP_c1 1%eCV +uAABԮBm! YaJX,᭢.ka3XBi&Uؐ}ЈFZ!| $M zX- #i "o,9XR 'W<^aP89-P+sȸ͊Z D ť@#IhDG' ;-$o D哖HR)\ g^#Q9[|~bJZzVAqiy%KNeyidPdX!42(SD80&<-3%4FlYFF)re9iId"w`8D$bLzA5P+2}RgՈYed"$Kd uXd| 9#5ջz}SSS33ivff~nrtPEiպr,3JD-YQT:ڇ&뛁ťյ@`ij]o秓 B dܹfhA2U`X]O/窝`pen^ͥgK>$v#^Eؠ0.oX^ n5&g'V,`ll.Nt*TDx( [Ln)Yŭz X^gVVWvw]&N15{׾UfXOe\S[{;;svr? )?Tw7jᜠP hh㔚Se]:89\F|#þQ߀wp}þ탽14# אERDaȖӓ~onwOw|eh"+;1uHBڤfUUoMx;['ihlir:jk.7{t0"%r!~ qվ+WKS^-J6,ɢӪ5jRRl5m=GW|<Rt[ˌC7}n֢VH%Jpv!roK 8r\W_;9;$|L 5HݾqlU*%( IɬUeJ&zj1*DPhǫY 64^y&tL,&%GܹzpyUcVJd:Tk%b QGKä 25yu_f@Kh k NpU-*LcC]6[:agX_gEa ՖftMN'c-O/J2rp1V-+À]^Zv5*Ꟙtyey?iа|ead_@¢#.]bRd㝱R5M-7hw˗9wwF]VF_z`;wXk-ckkR 9.pH)5 -/ [%ⶉ#@BQ[kn36?}4ۙ9e]Ċ 8XATcr%S#n^PiZ?<9:>:<HꤧY7:2g;k3ne~V9>6W͎ Aw9EӳWo;ZۻFgֶGG;+ R=ꭓX,:=-ZAaz]=<>zճ#4548=]=?: =]|ZF)o50޻|wl5o[;:zkWwW}pnokmiaVN*d;\ղBS r$P_K[:&T"g7o޸~vvrz|\_AF qv|I_eډ8"BUldQR)(sxzڭ[7]~<>VI^;8:~f䁩~q TrP+)%% P| 5k_;<\_\kRL\JēbA p諧 0v\_4A?| ό 3rs yI*KDIP(4]>RZ+$|-%Ąp927♘[jt_Z(*KK-q*kMK)Aу[{;>w5v-,~[ȭ,HsTrH]T-ēJ$eCOM,g,t}Y ʲS10eZs{ K,jt9%X\:"ͽ 7͏LRNEA:bhvhI2U!r-zr|tу gqhg6;>oGI.ɧR^eq )J+xFRdv_Q^Y'eTj hHˣGVU@Efq,̘EE& >$r]^Tc0f-Sn>::Zta2.'  _åJj ,*!J6a_K=oWw;;f0=PcBrd3 K(el|uJJ_Wm1YЦ52!Xj V䑰U\}lz75_D&wTifQNC1iBc]_kLPq{*aX}-JBk XR^Wi[d {r%2Q[ J}6va2X|DhjllnipRz&>!.aK KWZ>G`섊 ]B%>#D</J:d (p䔴*1zO״<.τKeRqBVEi8^EӋKr2*ņ:7T9/XZqYE%1i5*Dīd"KpAJ&rUeE >o`g`#/8X Όe _a>Lee2cTa|Mʡed2r1JmZ=ڛk<ߕ|]5 h-(zEi)^Q%P6O9rF)0eob|@,G /7IeLXAbzqQaKfF.SiŒ;}W- :-: L5ʘ)@`g'T9:Lq"+:)!ʒ>oUlh>|%3'-qcPT*~ɍU{9)>jl{jN-ӟAg&JTUVWLW_H]'14˷WGu&QisB%$ J,2\[chl*S(4sK[s}fvsCq lii7xe uǨohv-EPK~7nUsCGHd{j }x8)cr:xQ`}i<WBJjor-fLo`T@Ydt"ݱo<<ݘo~,4÷SvQIkw_Fטm;~7nl vhI#r9lkrcVٰ}6G{cy |JXvZM:9aٓWѧ?,!x?|v{64b+@׊-KO{#"'abéx\8*A-rd#4S?O>y鐫aU%fUF}Qrb||"0$[4RG^T0QW^ S%dI~g[W}#VdXj}2 >3 Dizgӟ>檳>4ݩFgaשCBH 8 ~]V3_יM]сξ~{cR M!W`X,ѸO?o?yiY5nw55m. B%jEI%$-f{&Fڛ|?bl$qRKs/W_~^76 U}͍ bQ:93b FKumK[j2q9[_ǿ>A&~wl鹅ZQ^Ӳ 8 !'67<ݽnOlfR| Xh _>~dn[9tb"TҲ rD\"WҶ{:GSNg銓cClK)ԏG/ny[|3#N3'7 I$2 F\n$LHL$P2Xt@2-!i8ۘ t߻5[SrZƎo_[ {g&g/}[VQ u4J!WJaiElc/Ox|k7?|/cDtLBJm[/όl=/~rk&d-m)P<@x8Y>|{oɸ!~Òr_PW߷?wg%RyVI6-K1o\ں;';3Vw~7 Oy⺶X3r7_}xkynOvJ<.,7兵/>yzm`h:4\ 3fp|ơ*w8ڜ7MK()B*)Yw43^99\4dFhVa˨Q+j<Oimedu}n<7yytYA+xngNlZQ͢aC`ܕ0Ss8bt[u*:u㵇KX99|`ЩV&[ghfViH:kؔJjHAֿ~΍~vnaO rk(mt>..]LI k}G{NʃeӁœ B%dX?6P,Hem4y%l :lAgb22skE#+jzf'DNϭp쯏.(͵QfrB?էLj7.Ei^)_T2[R>I:=u I݈FʩRh5r Krc`j_]W—*x̼~XWA*2`13p1az ڹXKd`iM5=ZN],摩7гV:*2qQò]WP  ;7|/OU X0|B.Z5e[ mo FGGoƇ'wV[b$jkEbZ>>yz\  y:zzz[s -z=w`Mi|N`@GUu{CSVO:\ݝ=JElW 0\^pOƨh4Zhz=4:Fmgkgxjx<5E^[‰$gLa4SHI*R)D\@59;Ǜ]R*>!&L]Z@`:nvtr)Zp/rPC/K&{KZ8 w݅A4kt+ xj kdwcs}uyf*k[$,.-e+j}GܜPH_.o 8UlS2+P1;8ZlҋٚƙFO _*,J+m% U.`M&{@ƵrJ:b0?Ez [sCsc_5u2qy-6n'IEκ})ydK< mVİͩ2q|ljw7*1])+چa>!&KB ]="%AApkxw?LƍzZaeA&) { 7ZiB$76IH $ڊl-zPǰ`èB]-UC Zap5R)8ZT j<wV`l7oA)(Bx pbFQ_OL-eTrT: '?%G1\ 2rH[+*Ym749Lj \y%lsBm9Cw,`$? B8EE<]-wbWޕ%=->pْݍ5Zݟ:/';';+c|Sc}muQeQQ[U7~p}>6i_YY,md36#\uOn߹T]b4XkMYY< LPej'z *g&[,b;~E{ 1 Mv=y|>8m3RRRC8?1`ɕޟ.L{H4:z6m;U")(< _oS!lX|  yxp}FA, 0xRtƷ??C3>;33hmkVJ[D-iCm=<55ms}w/ldsqI̦W~?>otî'%$HԜ,r .!X(x^WsDSGޝ1%;E|0y?po=6[f17&s*x4J Ictsہi_ugoE+Sy|?:5>:ۺvQ"&b Id:+AELѵthbݳ|_朣 }RHƌVb?|ޏ޽8:u)4D *ť׿pw@oO= _ Q@cx.=zδohd7=~}le9T,Q{ß孱;2>[;ZSq ւ_kzVn CBͷ_cineLV$=MW~ ߺh]D:w;_H}-):8u]7_ggw51)8˗8{OkM ݣ;].>.:"=lw`Х3Wv-=w7zofP=iilRIx'Fgne-OF׾1æj[jUJMu{_;'C/#( qdw?}np{-_p.lm1R1!!3k$Wb͕ើ}u'H|,LȨ߼Fz{74?֤Ju-+EkEr*RmlW6m?~|jMdqe9TRW`nw5u4-*I=XD RÑrXvXrBkn8q|S3rRF1.?xxǡQ*fTI+X8rA8TcS)t8".+̮ČP!OJl6W4vu64rv!lrCckhKyLQUڼ&UR<7vtAeUUR-LǢJfšq8LrO_R@:mY;efj=#py.s]œZZ2 !L BN#MJfX\6xF%Yl[N-k Le<6hO0: I$Bv!69zQp6h8*h=C RR(v%WdTDZD/ʬ9ٙ%ZYei3s s23s K5? q^: mCEcO@ O$2iԴZed" HRh4 )K繆ݮ\ocAJMM! ,icStձIxh!VD"6^FB!|3:@_6 dY_[rJ8 ,藱 pBP(dL K'a` &`)L$*#˿M) Һvȡر@ CSJbQBƄX=-Vh+QKQ+pG80 d<>>$WGdfS;2 5~|zY%]Ŭ,+ϢC(4I d0(Ѱ#3L.(*4^SW_଩*1QMI"$?YApN|Z|Jj5zb7>2 (!r/v#m럘[^^ZX˫jC t1pF`bjF U7흭U(Nps?Q2S '~xD,cE1-lnmmnVgf6vz¸Z(PȰ*FBf7w6667>Fpo{owooci@ssH|. LݳkKs3ot?==;;;1?Ҥ(Iŝ!د|XIkOށAooWopp`ph:ڌG!PKW<#G"qn`nlu1NW[K]uMSGGGWή%* E: JrtPHZ8>ޚyz:;[jl6Vms8l& 4Aᬯomo UW%c1:F" |ktunRE@( DRL.h?/dnh_?0BFh{!@*0<^򸧵֢DBBID|6W,WHP&|6# 5M!c% h_E8 "G &)Ӵpm3@\dCIKbL k֩$\k;G5\86̩^Fp(tfxs*qyR΢ |%fQe02kFZ0'M)5OuPִLNOrojtAĐ  % ݿ{uQ CRlbr{xWWHɹXwU::GVY_Wm:<1W쟇V<Ư_9Jig|~V7 MYvֵ/nyTT\hBrbbIɍQR.kάDrV0@0&u%|{d_ *m*.4 ,lZkoggk}qIoÓcσkPlCy~ VO<kcz}+.bzO`'lmN*qx(.XqˋӰ>aoeuAR[i{go޸ >څ&խ(2`Ύ7 fnvvu20^ HhhK8}Yt`sk۷n8;9Z $v|z굫W.=`+ȫvL̹O5YYڀZ}rƍN+KSnI.-t rS@a| ǧ|-jf>%W1 -,'WoӍG[33مݣoݹ ✯Jɯ2tC<FaQ8lJ=ئaPt?N[|sKڰ;z֝n_;>,-.NuIhUf.JJ@h5$J! Ԅrx Bٍ dܜ{|n?M)-I*j$'P͸ŕ nz`yb&T.(- 6^Ǥ$hYwphtbjO# <3\SԖF++ th?~p||smזQ'`cI!ffbձ1IʖNTJ[(+h 9V=<Y1(Ia2<lep0AI#'o>&Z,2Ylz2qJt\RPm6URV- }^TQ6C;ӣu]nuvf#}nJv\[_gTTceTmipeUdL_k g~-8֬R3G*|7e^wCK)׵ u @>Ƭ,-*kj=#S1 frDp7h*$^'7l8HV@㞱S VVXe> 8q%>`I%Q/f2WpJRoR>UʒܜljR!X\ZrRlr;1a`d%RϔBT(I%.[ڭQ)E$j}tmobnp50?X+c:]W]f0XlFOq>ns֘dTJ.3{欤$pR !S9l70 h s2YRSOOM u4桵Zzj<"񙒁ÓqO_4<'ta~QA~~!]dk3fKK~.(.d(z)N6ftwEY+dZyȡhZ`mmi!(T4\'ŅZIz=YnPW:FRhٜ0X_\[T^T] Cwщ4K jasHTJf2Lmn!앹6]S]7o[b#A0T7^kPTC Z.LM> c@f~'Gc.sL_?a͸ioPITmG|~pDfR+6?Ya5pE{TnzGW` 7 0CW47fJeF[?{Y1 Vb[~'_}oeȐX`crt޾FZ*Cqt뛿o?8d쫠NJM?{wg[]:LS?84iw4KHIl,vǦ߲iU Dچс߿ &F¡ r??䉿֠V.WiR,l(Zhw)zݾ߼ Ahå󻯿?/XLfatΎ˒](4^r{"hD HUdLbRߵ콓پɅƾջr8V+'`0I$M m[O^jz~y{ij|4T]q4e~ّD_G:` 4 6IE|[3ށ>/= \_[ Zœ'o35<.{'&LyD .9(^y:qcvzrBH}-TE(GFz7~k%) ,cɬ~q~W^{魣աZس8i+q<ŤjڜJ_=9=^{73R0Ñ'끭hZml&&2dK@MbɅBS?5=΋Ae:ˑAU>uwwuuJB4sȘ8a 얖/ҘbaYj}/ZKNeYbr̻k&`4(- "#Z'CiH% uRӋrF^:)Mqzrke*%BchuJNPr<u܉çq4fQ `,@bl]ܺ=RAN)+xEi4fj1(%|+*P`mmQ*+*+c"p}BcJ rVہZd0U\V-$e ' v^-c1LW/^erYR)tteV1*DWkh餸gH0X򓭩ʸ,6(jz YLOI+h9>UL6ɍum5J*7v{B38R(0Xr>Bλv<.Mˬ 8yd2m`(08|H(jk Llt BA/d\(6Խ)tF/DrFP[}࠺^dg Wn/jzLivPpζ\$㐓 @#LͥW@]ͨ(//5 vqey!()***-ߪTB1,OQYh*DSd _DCc6WBqa4uSEY/8^|D3Μ![O8>`]T~-|>P *vnsh6{|% ¯TORj*q4CuqP<) k}{ $"b=gP.#.f( ƈgZpS-`̓RSH! ǡ328 UP*5br_XXT̟2idR2 XD'Ia<x;\R2TWqBD& <.YQZM#ssEk#B)Tн r#V5u --M5v^!`eHP!T1+A%ye<OMLOLN''&|^wsQ.̓E*qD`iW鈄8l %\jjM/-+++ +[s]^Y.-sN_e"NqIiYt lwk+sKK[c Z15==9u9J:uzN1}_Q+3PdE/X=յ!wStfW?\YuשYE"յNi! ܌`t5:&1H;qʊFlXnVfGjꖁͭ`pks}mqz)/ۇ7Ofɉ!|!4p$f]^ej^?88 딶͝Ã= 8S-+Վ*i qH;21Zl˷ LOOO710s͍`p;w޹qxgmqivrbjnqy-xxz[ϲX^^D9|cd FCIujixΧ;7wwݼswnCrw޺~MKˋCR*P\?kUDlaD5|2 Sݹ8 ,--/̭l\u;C}$2%II/v[4,@5Tnem?}LO-.N-\}G@+,-FWwt+C0VlaIYJ)-|/ P{77gэ4wCZ9lgR Nk%hƁSvDFNyW^zɋ\^]@_9}G|õlN!ə|YCJ"Zg7?zW^y4啅kw?z5Lڥx 1V,k1h }Uh;gf7N~". c#R^O$Z­_~_[Y^ڹeVGA&ə%eLFeK^yF424468d\SNXQbWqՎnZ".E8(\G]ntK5ZM"9>!SE6kEr2CۛSS{_ uإL.(#)_k)1QAC K}}=> }n҈ܴBb[]Bl<)4ϽM -[{{a|mjdVs(D(p[kJ>8@`6Z¤L #C&p==ECzښjruFT~MGàs陹L]2%8h׎E׌GPch9CC՚2=3 H'C8Zk*R JFoU&w*a|{<գhUʣ7:Y=?3t]>o5 (W.U:!r#\zڭphFazj I mb DV" 1IRO,U+9Q}$Zi8;9:k71B"4.*tKBAOeWr$d M8otkZ~Q^ACg):YlB0*s#b0LD[qᄜG[g@>6R 2b6#REJfÒqhtp$f"=99b_C߂DX 72*CH+T) aE&\0lzn>4y2ֿoLm Dl؍&Q*U- ?hIAi ]Mcc_MH r{P>:9;w_r%`lc"OBDT_im'%&pgBzIII3n.C39IM¯A1 pYXwkr)'cĔgB+*JxW7:6iÌYqEYEQ.Fx|713Qڡ] ㈔ bT:a3aG342>](H§(z1061:$䱤>Gx䩔jJkR+*2.O6H.u rQ[Rql%<ު-Ϥ+E_ py2$;<2>55:n51s2貆彽@ C#٪ap)dX; 4S`0U|"N.,C~qojz\td*)|]!^VVZVVYdz`uck}}e[˧'n-BiQtqӠ-׹y.TՄA͍v`ԴO.ݿsuHzܾ6T/?'! fdШisXms *v7V]f66}˷IHӧ\۞ksuϥ(4rFюކ\[mUqe-[7^zEI!/2:yk/lsC'L岃[[s#MRwo},EkNq_w^k<p"!)BZ+|lnnV|N<|gLEДW.Ap\{o?=w+ .J'S s:WbQ?g>b'EُsceA<HV0t7x:1r_~\F>+A_8U'f1I^0J㫷>;l\t2!.O5Ѩ`+FL,N v(5knQ&6*\Rڧ{}}e- ^!_QHosVe}a'3O>G-]&8_XZZ]ؐMx}~q_gI0,|O}oM|3"*)n5CkUON GXcA_h> ~׿՚x_tCko{\=4 /ccF[]GȈOKni&..2Ӥl~՗y792tF?~QXEN6*ia  ]'oꃗΎ͇㎒(+Vգ{7G{;<WOˏ>~KIu[Z\ޏ~w.vtGr2&*H O̬m}og{`fw'?yP \Y)IH*O?O?xt>8Z|_jĔL~=E;6=~7xڻ?ư!$ 6M1}W^y{SjoymLN@k> RSRمݽ'd#$qed,.>xnoooMXZ]N*놴:V5Z(Cc=[g~s[%/߻x{]RLdQ!Rٮ–\j2ͣwv*eEf*>1wpn֚Z!8,lLȨ @K :Z(bHoZ[۹.!%ӊyN* δP$QjZ[jMF^Z kQ1&2ԉxl%gR+*n>-9|ΌK/4@nnjeIq%BFYZG.YE'6MWd12Q>^wz]ܝ-6%8"]έ!#1)yBGKWUȨt/|$ib/Qw*g"m}i$Fu}`  ,8;ڬb&b8s[̼Ғ2UQ#r6Evin)1&q-D" 冐v;URzn!p4-1 =mZ6S*s 򋊋JrS BBBCp4JF&IRȴ<ӢWviiT 5FIKMI !"s5pʋ#ݒG)ttwtMTPY$`9jt848qX".7v5xcEaKhϽ2CUC4.bCm0@ ZJ'C"TH/]^>ǵ.k0$AƁee4a!Jk.t(4 )ńH'X#-:6-S W kHK*x!4IB0L 3pJ>-e^YT&̀W€#T0 bC^ 5 KB^p/] 3`DE,!va 4>(,N!Ts ITc`|-&C I">0ؐ_+A w7 [!>ad+"Ę-DآP.#a.؜B7^_ <9!\ U1XF>TRr K f_D}PP"WXDJfdB L N/),̠^?dq؊@5R2+X\T&STjL,V1Kr))P/A NH\/`ŸD1St֎n`7i\=/=Cwa;X,C8pF^PhOLOzmjhIȄ~\l92a#O1d6:P3ZYZY\;;{{;Kf#?=2DD.HwAsu9\Llm``a?3?=;9:>Qy6z̢#/vNĦd;GGg{;͵ͭ=<2 JI8X2E CZN{fswo{kkea?6<4_Y^&u&Uen*.1EQGDҥcIoxwsu쨯oxz=##S3Ý^ >P̙H5]K{;CW{KKssaPC@Gm]CSsK['uSR"^:9\_vw4:FV4r#TJ*NW׷~?*-"$_H4GFqdDoGä6ɀ ͬlʵub(҅bf>&2ٖaBX|T"9LO"|TxJT6=YtI H 8RӍ,gUzQc7UR!(:g}ݬpKJYSgbd1!ʅ`I`R㍉f[Yʒ-}=]5P {`hddZ--,f;&Lb%-QUAd&Df\htGKɱ5!wO,-cmvyea]k?2hxX}-.x<>];VU5 WI6(Kk$?jK0׾z9,(![''Ҽ; &w1 6jTb MP@h?U+G+-@"' ޭ&IYnk(C<2ii{;[)oN8XYt(G6.o.e9t p:z\sZ|Kk'',mgks}u?20rs>u)mQ.ӑ覉>mev~`fu}k{(]~rM@snonG:ueY9LQ<|/%Z^2syiwO]yó@gl7XY+2ٕtٞ谠`jeX-?/?;:_w:]].m^vՓu,.6prhŊ9ëWatd&aaz}z-܆;ݻ{psyyqvfnaiego\xDpcuueeqTB{>0p@æ1cmJz2P=xoo-./-l7apc}mmmiUepK@h%=tJu&"BٸyO>~Yj]`ueaaiܻ}p7 ؐDf zxY:)̩FERA23\\ Ñ'm-.3gwO0X^l㦓r-P>Zlrj:ɿE>:z/+P׷fWVggw}'_wpwgk}maPDJ!(;լ "vnQJm(Jr0rz/ ~铇I2|4KH@ T6㓳D -"q ޸u˯O_ >~p |ʫ̂G_y9Y$(vԕx<>ZXetup*S'/(47:R|!g$CT$4y|[{(:P/MOOBϏ`W BE˪d* &XfGWo>x';4iW!sQ! @YQd Un; ;3 {]9 P.mwc<ϹW^ *,N,nhQ[N*mk&8tE-޼y|bbbj~oXYFWc]2!.@ `w^+JsCM-8|⏓1h܂8ɥiI-t+fB|'0Ġc9qQtnI0|Zo RDDGQ E.H,nlg!J_ =;=:>=}o=GHp: jk*FGD'dյx"1[`prg7=!  G#3m-YIaE }_/_kXzWC)MKAA eXΊ1M$:O_t+|=欇>hszl=fagR`\"b+0kaщmtP" b%|BtyES?qPANO]!; 6!REhdtDKaQaV-*D"P4sUD٦ ڞz|9^),7BcS!Լ_aXT|>N[~Dvm]eiE![1in':jkjs;E*Zu&oevo/ڎ K; :*'Ɔig'9,tjj)0x٪ɾ#^!HЫضgŘ2,ugaD3i3N&uZRB)(leL;wMH8M5nwV*H]$ۇ#}k5?`>>[2pVfRay5Rǧ_̴v8h8l6褣jYpbWc L=9+Y]x @QCK9lYmna\ձ[5 2-_ڻyf, /hqVWT4Btvݸ{1*PA,gfރ]r="‚z8ĩ:=M"p<#tQ[^(OdV+\&ꋠ;efW!|z=^ո1#aO;νmfyR }-.]~o=ӏ 4^g*:Q;r) Wv]4w?N/K:2.]޺Po8ΏNхN^^%DA [~CpG; Z^ù$㠳a3+i]d_C=(1F Ezg_~ؽ,&1_tAN,Wr4[a7-I=//,(t᪌W㌆G_BwFjղ5[s?տ#a| DjtsUÿ 錀DM Awa3mI9:{OM-6/>-C׾`Q%d}*"#MQi _l*%g_cEG.|Pe{r[DJqs\$ C+FdXUi3h(M.(ieH>9)|ݫ;K6ǿD-N0lakefB:Bɏc [8[IYl8@'gZO_~pPsoWVBV.$z~qF!*<tnMNBƃ\a쬄OE< !QLMe37׿t;Nk#}Oz.dC46W:* fu|Dtl|2:55(`s3aJ kg'Ǖo#h[62K~4_;?gGS\naqVesil򒖐ZͣMMWg$29$ZXUJ&/ªE1Nj_7Bܚ~^cD~TTDl,8C4P45![?ŭ% TG#K}_?kD[)!=gRpILN5zwl2+Rc0I,g,ŗo''f7a.?}i(>&6><XJrӇr&M^iW?{խɉB$ILgsi~zvqV>*V?_qLMk:.6.1w'7ߜif'gw}}-ׂYT|F)iviavzN36>6xWgC-,!]^Hi^x|o޿53mE|o<2]Y4ye}}ѳ{GqshX2k1X ɈW@0PdZ1Nьx"Ws6M|~׼D̊G4ud''I WǸcdAKꑮNDLŠH#v )'ZwoĤ?S':fON 뗁glrF74AƤBpOD% E ]u6݃Gg3# M5 N_>!'n@kpD" b׋vxsNW4e)Ifls* ݿp?b{Tި18"4FÁ%4fP]TyX8'u47 M7_WS3+ڱ-h~ڑIFlmjO~"&fb .U1fQ ! 4774udonաQւL7|KC}mM B"U U̮Z1M$BlojnY>{{.=109|ԣlol\]S'QՈGp5@Z@ׯxEĢ;U vW#H%ojjY<~c.5!&/ ;|ȥ @UcSScK7YS!쯭O &&xMNq啦䴲촴mSIY]% Px><4?xNn |JoWwCWYoޚJFec*32g/WӍkYDA#RLB)LHTނc r$ mD"d!]?x)C`ZmK[lpXC|զͶ!ddVDs-Fe s\F]2r1 0vN6)4g;ʗ7&}EyYU=trjqnrB824bkr¯ZZ j. =<JdQ;<\V[P;bb 2,;)*%VO-3 wA"H$Cao}IQ#{qa+ A\d%wU29V+ڞgVg76ֵ2Jaocm'S>)%R] ʒt<}^{)']$ 2sbaQQaQaq}߰L#rZkUQ^N6[ss3IK0Z(񥫭LBgdfdedd7xrؘJ`gpA4Q]I X-HHLNNMY)Y%mQĸߐ݉I-`v]%~7w=l,3Le*/-q3< %ZCZ+tw#,hІGe66VdlB)!.0CZ`@R1Y~&-ڟzŸ1@.rL`͂ Nz bd,g4L>E5L85 4 >]eB]x]Юk-`X捡ވi^,.2Wh\~PJ_  baE֏ȸzفn)$$11>گE)Ġߕ>'س5$@a2`Шd gp箐qI*Di0 K0I)hLVnaIYyeeuMMMeyyiQ4+hC/+ ґFbOtF^IU]KGO?@x$bow{SmeQn:1Z}n\nU]TM JFh*Tĥ;sӓudj~OJ@qBRznYC7[o [;ƝEK67ƃWexR@F\":y`De{6f4lvNϞwm/(}Mi#п7 r^L,# wouY kӳKk; v-.83%v/-l!Ss+E&of6/N)cr;سkyiIska,d+vZ반wVuZ\22<̗)ʖɶwp5)MEIvbj :`c2+p5Ͱ<= FEa "dBmZYj-L۝I87&.%:i߷o/MDŽa6ARȸζvl?H"Ә,h\>7z]kҁʬĘWBC#:.%>3B6lMIcد7vtҡ@ls"j؍]PKmzO\|:RmlnhhohiminnhdzCnOde/cE&4|Ge`WsmUmsGOlmvuIV_^RC*v-frdtbV-cwhR{˫AT*q(2"#<&!U}~0?L拈Tf|;vceIE ʛL-N*vP<Ӗ|zO]IaY ?g=)|p?t8$uO94im% rFcϫ$.@e4wA4P+ ku^K^bl({j gD$")]jY5j,Tu4u{Y8 p:l杍PZP[j!z- [>$4 \6$z^e{aBmNvVLm//׽V%boq~Z18tN1 [H~kh{`iYS3EŽPb5nɇ;r8<,gjr;ǭ%NSAA3s|nlZyttrlNG;]AvX-;,vHw\ӴXn ^Ź4f۝.<9ufee @ڬd\ӎfWe_y*xƏeF@p@cVfKf]xa^l6Hl1Yuٙui"#ρMO#pdf o}kTY0v=̇'n߹ug\[Y^]߶|XM \izn3gy[CإtJ ~0ˬ(!hlNgowptzq{w<&l۷.@Zޮwx Yi]z(j=UjWm& rO.`у b2&Hw@l.ݴ(Bgb+Z ؂vtQAݲ [^01:@OoB/?~[62f$}}s&~&5<5).L5.idL;TdfW,[]{'g'O>}w;Fܽ{*Ӳ&su2jm:e#b@`|JܘI߀T8'O=}ㇷf1l}7#P{/ec3o/p2Qq =gZ\bSS3*(#^{c>ln.wU42\):.?>ZA[ ]1sO_mv>{g6ƭm_0vzX " ]CSҫ)9 =fÎźMO~w@vDDrZ{Aگ@n4WWw_SqYȰTL~Q]Є-#]CiC8;>3 i) >|#yrL&bA^ikJ7 _chv`#hpvvv Jfp<|'&:.9!kRfTv٬bU82"_el0;>}1tfd`R R.Xq-"&oH<>>JoD#Ske8΂wZMr s3RRRRȔLVj3#^ FU:hIH),-}1+)*n|E#T3YXSYVVYUVY-,NjsTFZJUEgYYqUmQbvB;HϮkg3, iJ#ugw77W5ވЛz}vA+uf\׈UK K3 .9ȴS3ZFRɆQX9M3Z kqvü3.+}M0F!& ^Z__YYC }hr3OJSSDtjgת 6Wĺx<dB(`6X69 ޼`SvfCWD&S~wHήnhRAi-hﴙ6t-3s=,2rpzd_cttqV_ ut61(mw\ Jikh$ْ.D"sgvotuVVKcCCcSKC|{^Hd.ִ{-py2 E"sz'sH$‹KK˪c׷>v!'X;쎉U%-0>BZ(% Ezch0_}&1R+3KѤ!8·>`CcQt81`61q7S/-h"rC/toto\ k-Mw<ݜ w/̪bG ;m^?KB_nnM{^fE4:Jn8?B(w7ܝ@f n?g$/%!L8pAu% 7dO$ Ƣkmow>u̍Y/2iQ2Y6tpӧ\_~#"U6ۮip;L [ D#RrCj2nh+7њ}nDD~߿Ӎӈ@+L q챳:;MM>ܒƴ\Dͩ1(o=мon,&u8TJZ'4{_{:4"tKќ}UxBHs mZVE,FDEA/'Fӫй}}^ͣHդjo˿MJ̘uh+*oל ` fy}Q+U)yQg_JLH9<ʼG!҄)j?rIR1{l7l~*TlR:Tq1 f2toɉƐ`bRI՚yR$K%&% bzZ8<"M+'VC1;?-7>8Si6WaXEF$g ʑU88H2xynO-j4lE#3jy׾r4+hKj.g>Ȕ-N tRV~FTZ>t2=8ؖITlZU)W'` kPE6&ō9zb,*cR*4XnzϤ᳨,ҼZzz;ޞCQϾUNom.OG>}rbcE.:~gi.![)ՖgO6vEc7~٫yby{cJ}/Bkߪ! EW$"ӰC_}}j-.Ͼ߾U`A0]NRymƋ7j[-$ٓ^<9:.0L{Ͼ۶I>T8;fW+P jW@&8orײ877-߽=ւEgV#cE׫o};Z|\=9s{ML ^pAhkvF4'?/??}Ge' _^S@0ųO~[N2:ֻ6(ʼnp/S̠U%]ڲI%BՆ?|vqWO~^߽Wx|ӻsƞuzf J:Dkϟd\JIc}un22fwg ˮo׾57!i6+.2<$`U74]2t&* ?{ 1UR__ܨ{rnvan~vl;QNEQ{/&z~ xHrFf@VHy~<2{CEi]ZVJ@u?~I2\|lCP!|?4K-ƍ 鸐E"+w1UJL+klOI@}o>oSz=x S$ѡnjy#`'Z2wL)$ut[shTFykWK~jRW|Z*?$U r,GD'1ylHokn]8v7QCȹ Cx@'&ܾںћ$ k̮FihRex3?撛 ܅&Xr[jj[%_LJH+Ad]O/Y0S؊Ǫ<|UbčK|퇡\5$LHM-Ч0apWU*()-D%ewV]u--m#)ڒZ <|j|\:9s}YMj<*++/7G1;G7ϔjRzG"M^a` $p,ޱu-7ddT}'(TD3#/^4e SO |>;2ٽ4tZzAw,),/ƸԨ+KlMɯgsy\X,PMiGY]i(4&yXX__<_cvF\[tP'YJAU D BʅV]Hd F>.# =6 uSE"sJk:d sLWW5Y"1APh4:28\FW=BvtdX)c2KZ;0Ga Gi]uUdD:< "O[[[[ZjJ3c|C!fQ1Y <"%U*͵e0(RJڣad̮NSWH+(,eH1LPZ r@hizZJ<k!2άZBD Z 7p@9WG;.fBa Ǖō-qp|6̊i!V_`o@AxhF)V0o;Nfmy~F3I$2'ԺyulMs2b``W:%7 +'gRT;]R"r `w{SKg?LvM;{J/ SNE/Sk**:1Ж!P]+tWLxJk1@$|OGKKkKG x T]RPϛYuWAT08VMu@*WiTc|@[]M?֪c%RUW܈i]* 2PrO~7:蘄ZުRQPT58<]YYYZZ{YbfscmyqZ#BrȮŕ˥ L -oՖTf yΎ3zX3+F@cI^Q3Um=*J ť:,Rܣd8]Y X1fv6 QFWE~~ i6g7hB KtBvz`.-iNlVxv;kJ&C].j3mo,59igR2CmANfz \EVIryls6 zMby NK59eYS Rw n v 2}Xj :bfz.jZyZnM p`ANmYԮZ].AkgE^3}޽=hj6, ft )JMz\t2ʢm]ܒYERY7 `Ciizza}/@ni1.[ӊͱd k K5cl{S,[AR&$ -H훇usxrvz|xAz<.0CƤWgMYH0ޯkt%cikXIZ0{v@͛n߽-`Zv]ܼyѽմ6ѕ0(Kz8vVuy ][wܽ×={0lT@/?| [;u,Vlrݾw{wo߼uqqvqYk\tzanab4N5u;9s# }=qfɭ; ޝ;z]9vYŜѰ2Qa=_Dt,bP;íHK+OBA{>~/? c{,;˲vhO :Cgyh^##7o޾s.T|ba-&T)&TҴ4_{ Z;>m@gny{e0٬_nLDDA]$,*6]ChȥaePx<ַДf>|m GGE#Q!x_N2, 88m2ӸmX[]2ο_Sՙ)B-jQXҐ~9-o-Mf7S6n)NKBFfW6&8e6Z_񭇏/܂vL>i]]P1BABR~ t_sޣ[W,bɚ=^4\Z.mnkz3Ȝξ9dvx/_JC~h{ܾڪ\T|q]oOO ۆAW F ¢3h4vɘ}'/7g[qS "}ӳ kw|`#b}mG"tluA& fbB)^YZXK2EGW KCάZwOCdekY+b7g&#b!;&S$cקT*-"%D_ HzɁe5@%tgXJ2RpZjq]\S *:b#Ä R[gG𪵷px|^R@)bql$)LarUy? ]v|qv5lzz Im %24": XX݄1I Ya;5H?=8`_k6aӸsH<RPYYɉY]<٘Aj+J|)<D` 2 S\VYzp =Ɛg\/3̦ȃD i08EQb ڜ8>g(o%8sַ ţU0+)PꦵjZVɄ޴kKaXTbQn5E-lB"zȼPAIe];7_{[zRamy˲P%LIh&qhAִֻ}pa0!K?Hk_{(_"TY ꫛ̠Zj m%_v7ߛ>f@Kt=>;X ^$]PRT[֎ѝ{v]._}}rGӓIôV,jO~ٲFH" _hTJrFEwUjntt"wzuSy{o6R|~|Gs- f2$rkӻuLx@.~?|6acGC&?62񯷈ܦ8'* w]nacI#"x꩕>P~3@o~G.-}wvY7洓r0q?5FoBd;SJ K4߱v=.ֲFRx2hJ\!.oaA'XZOI HïKbd +n^#v)2 lRLj',mnCQb7~~(12 EW OͯtD l +S nzr8J1AQ1|\# dٹ)Jk5J[ԧh:HXl,ULX~O#)y O187)SL/ #UszdD$brZ#oEq7^2#s:T{~mJ"ta[EFE&$CYyO'QȃtrvaJ9?20+Sbٵ0XQ5=o}۩ꗦTB98w,Uqɨ$dtdTRyus;#i r~iirBmyw "ÂSUDX8|z2'YXQ ṛYq'cЙxH7Z=zy^HGKO_K |A阤qdz|]rlfu{mZ/3m1шdLVzRtTl.~Q^-= Zb hdZmyV[^W~_7>-t".'/;%6&C<9^3EU; ^!,.ǎtto??w>~rԍI(.Ofy?ydL>5Vy WK)>p./-,-*5?||/-..%<7!Ƿ??ïݛHUӳw޿eʄcZnVlbv#}غ4;-2^G瞧?yv2.49Y {gOؖgrˏl3_ IEš eV֔F%j__w۲߱f#k˓˔}vw~+'X U-ڎ=KtxG5$ #HLC(fҤGO[[rc$ĥ57uU%Lӟ1/nw3ÊDz?'>*~:CJ@0E2 $܆cZ8'碒$$<5>e޻?ɉ^7=_\Q e")KzOFGġ T6”V. sn}児t]Kw[):1e鏿x<124+ @'USq01 XvT1*2&r!A& zEYJʨjm/MML鴼{`_*$lX`"qfb;Gý=# @OW{G7=|Wu蔌v\s :m[Ύ^EV)1]< >@VyB]aۚں "W_Ӕ$eRm#b;{\FH}1~kAGA"<2>1*"rGsC}cCcksʼnMudT7vO4tTRDBm-6/+4RWSCC}}S[m;x$*0;5ݵ.Ios}C}CCs'~D331&eeF !ᒌ͎DqV4jlif/]<;)O+HIF,߾m 5644tRS @I\x @*j!\%,^qp=Rd%'M&ٽm]Q+5a7BO~>$,؂vR!*DCdΝ{*tb< UؼeH"SIBLiDeqA{##شQD Ʀ {n-/5RRҪ(-{g^!%rbLDnFT˥4O!2ʻXbHyLfWN~_ )@.bL,;ksT"8f-K XHh/uaxT:>^Z[[TڂԌ°D=5< )K%"C魃f?SH!ܻ9s64Fe27<<<))$\P6MeaqɵAv(8OE#SsJZA*J%Tm FXD<@ {P>@n B4[TVUى%2ap$|݊ 2c"/1"9C&-$3/*.iHR9%T@Yji $Kg T5v TJL2Dh(LOE%*DMBZ ^vvKHLASS2 ډlP,Tb0i8pLʍ ?H|S,,S3!~TUF%'"-(8;39.kw8Т'W+[\VVZdF <L~-CkaA+ B; [?$?wU+%M9 0?t%w80)Xٵgd 6udq=k?ID kѰ\Z4~UƍUBXȾ*65t芆Mț\kW $pD0 #Eﵤd3p 2O!S;?phtDF>qkc223srrs23~ȡKG@Kh VovOhĖfچ掎ҢtTR< /]:Q0),kC#|H$qY4<0y0>fn2vV@8NW4rOSy~V*xqպeWZ3L1$\Mv,6l׶Mftv7"jWMA& dk6CZkzU!ŵƵ9r{wNZ e }!pd "Sl;lb$Iذ5%*^+q&Q1qE,awh׶2Ӫe.@$1RFm JK1&16:2hwԻ0dUx|]J.lgkk{W/Ie-ϲ$Ue%!Sx$naD\G5fY˦;ۚꪡe ӇR݊mع١˞r JNCB-^ʪJhijpD%ϱ0ԘBYWɸZ1&]=f<<+E BWcuYqIB nmmi*((--)o' ^В'` D=6&lG>Nb܋ KngGkscc[$XSQVTT5ZP\$;a?Y EeT&gxEl!.72Dk-//ih GG$ ;alXU%K,> ²*WL*G !zjfJQ(%TɺϧjN2@`NnlM~^iS?S_֯|!WO76VfB07']=,Pj0qpb f昭Eu}LnnyӰm;K~X1j4wv6VFgYnnysL"0{|eQeęVsAvi+MYZ2(l/ѩ"`[mV Bm^vqϘ>>8y~S _oYǧӓ#ߞnޜe* zQgNiuܵMuO([{GG締[Խn=؜$nԫi䩍)jM*"2<,T>,#5pz|*ܻsώ`6{Oor 4j3, 2PUCŽ\RkFVYZ͛gP1>xݛ^e֝۷.u{P RIZJvlIMHn0=-_iqO ݺ{wo4<~;o8-;styvߒ kaJ$:]Oܲ:wܻuIܽy~[L[K H& Sc`jQfV F}Ów?zp4B6cwrqޝ;7O _#tjL85Dx@5m巳)>,>J))i 龂tt0e{^+!T栓V47Jv7a}L 6x_;9S\RquZLO\YiDהw \aa8FE2;W=;{6OBP lVW]OcJ¯Z=T:^`rsLz+c:bMq1 RWVO 9u]Q>?#8pGq8}tJf1IyU-T.#*>3נUf̠u#7bתbz\LT,rh֒H&Oa b{Tts Z]W zFL4t~M arD'UC[]`cLLF{ȥٙ˂Bgd2!NC'%s&(-:,*!KY-7;;5ju EEiitLnaqq~F\vsIZ̍~:/&eT%6\qÞqGGg7$ZX]Y]S\_:8Ħ"Zf\VGxrY+A8;dم+(MƌLL[[T#͌2RE";cj͜] 2EϑQ:T3_0<)h*FU)79]}= :4<),*= ;ãc;9;[~S^iFfKK:~ocgrŸ ,d\TJ ]c0l.*9U8 Ɇ^rdhFZkFikc外~հoKxF$4MJvk Cu4 4%1۱;;F;xnZSڨ5ˁe]ki͒M8)µ34Kƿ"}2fhL >ddr6+Xެuh"$F|-U9u.(͝?0P50͓Ki{tz|q 4 W$2#ooYCz sD82m \ݿp*("޻䖁YK߈Dwk|/=6rTw䔐͗)Cw<섭 Sg;(HŦwL£2SS*P kys'9ޒn "ZZ˨WyWU‹ "SR._j5zClʙM+skR'cS'oۘ`Mpdr Up)ޝ=hA6.il럿w΅nGVl 㼀B]|!;ٍb܄G0w6 p>8Wvrg>0OJ9 (/2YY='d;#iK1N*W;d*;80Ce)%U'}0l-˩dv׿-h#OɌR3_+̀ qI98ڵ7ln죿uHSXԡYrjmgeII/A1n~C?1Ie!STkw5H]Zl,}Xevo?M Gg洣 :[0&JTCH12*2&gWL>DHtnnV71}g6) z 2 ^>_ X8% CqhU"!M$*e歍ύbj攪G_><ˏK_Me':~Jd~o`&1:>wtDgj>1@58-q/?6VLm&T "NKG 6n>r{7ǡˢZZ].?}z{R [|"Xx糏M)7WC??=tD<:+''/ ǐzq֯7d+' p`I8=6-(,oxp']q٥%i94w_9}TřEه_|xH] B<{`_^X\DSg?{|ZwFBR~Ck}[}fbJ!k|ş}rW-o]֕rI,$ݺp,-.hǦm/_||x/31ߖRƳO>|7矿~1M/͇O^ݛ$^ `Eš;M?7)i7n~_=́D,'3U9|o~vͩ'[Oנ~ 4 lZ`Xh=d$5ꗯ{ƳzpXx 2I] kb21:w7 {7ļ.j[zBj sW4|&iDeԦ1 tHw7CX[L(gOm ?19OlLOLi[Qꙥ96'f#vko)5TJN[S17rYLx䧠 p̤Ʃ_~Յ&SZRTöqӲa&Qe[Ͼz׈Uaf_鏎tē\h2djnwztx| kvd|vkL窵"r_W{[{gs' &Tƹ'mm-=x Z(8 vɘG'cCajڍ-;)%\y齭mTVcKdíik_ و8L#uT"'͍M-fšLTBR;g3^:$-s?TAިL(-M݃R[LŒJ=P/kuJnB&e4\=oGܨjhLH=Xܰz;3JONNNLbm rogggaH0?H 8~{f6RE)OF&u/71>>>,wCv˚N"#bN-/ !w!,*uL&'e X4]sx[iHd|bB|BRVМmߜKbL=5.MyRD+9$,PB-Qjl^:f''Wrf-jBP*N?0vbcG`/*!lB`ƒJE0^Z]]@WO*]!*J*Pئ䏊GRR)l`{uq: Sсs Ht\}a2~ަ*N$dv f1HT`_Syqai}71ĤS&Ag˲c"_k(MD4[T؆~0$848ep F@#I̼֖.,%x#\xlL8D'`gqK: %2s +kcR%&4BWS]uiAnn6&5 $d+}.`/'2r j:pxT '-L190.د 9oC㐉)ܢr0JǶTeaR&-~Lcju)MSdBb$]PRQS[]^A$%82 9Cn\)v(B Iu#LPAB~r` -9A˴X מ@ׂݍ[h[yC^;a!Z2 gj2ePEE]|7TۼCۋ#>Z1F-y@W Zj@ȭv}>ƜfLȡ{ۚʁ?X}sg #Vm:|'k\T\t&$.TxTQ;yx߹KdaUuВ}pk~*z e@^kkV )JJ **/.//..,..m$ |uqG!=$s2Lzـ~|`]5W偅DC3XkKK ++DwqUV/"DtwMUW7tvc;ZZ:Ey%8js".JE~G_$BKty@CyQnqM{\R_ԉh4֖gPzi( }A3EJ,W8qi9uQvfnnJ3.t66`1x+R[ϛ?ڑ$0i!s;T2O>9k* &΃GAT+dg n 7e'.=>iYM|ӱW*j" mqMox$2Oa1 ۆ͍W\>.j0qpV+XjmW 4<"I*ʰ쉅-ؕYP e1:/1L?-!7f47j|i?<4,HLR!arpVYIjVR?&vVCU XJA qs΁Qڑn_tA9m5NMvfilvzvKt].\܂dm`b!%)/#{ܺȬ#>F[s3Jf{owz{%|Vcl0g\%6Sد84 ~_7iz{Fe\]^\8ݞ]ovwvVBsy~2ZzeT22mNuȩ=~Yis?w=.ΒuQ?t 昤"eSZBlY]2@~ٞuk}m`= ;yMYD_a"$׃.inmH۲QݽwNjB=ukzm_]ه*b1n%i^PCZ,lkE (56 >H۷\[ [b;DfZBR'z {E!%Cՙvp{@ 5wxv7&hr=.qƭ5l2kϸxWAZFY߲8\B;yw:(ۓp6;/)IG.vI^fTfb:pAz @ ޹8.ŭ۷.Nwi͍y %Q'^ fb9]%YwnZ~s<`#ce!cpA;wnSDψ2HMVF9I~Ygw{N}^7`S][w޾"|my-'!k7"cS JB>: jgw|e4Yfa˺{|k:tsV\nP4LBUZXQ fdff cS*FFXLA1,/$eF! Jc[32sK 0ȴ&x;SʪyB>4!)}@Q%l+//*mli)JO!e䜊nH<ƪKM/mno+|Mh;qS` PAp$ Ga 2ȣJ R*mraGVVu78ޡӓ#4 2=Cr8R}=2m3RpyިL:j'*vfZkg榕RSy7_3qkQaI=LB7UTssWC[9&0w~~$+k+Сݸ'M-N`+Ңnwd +Zns9a|ve91\ܾc 0*(m6moZ]. oe ..&4HzkWWxj .xMP$Ͳ̞]oL|ȴhv&EAnb!NcY[j[^^_XCF;dv]yQ<0 ]qY~x#".3v֕ʺ]$px\Jv]1ȴ4 hUcREDjQ|ta}"| h۳w|q|oiޚ3ϙ{ ]QU,m]^HuwuaTHPmh/އ6@i]˖nYkjl8oJ,]z5Ǟ\~ |a(ӽp7v֝evrPx3Ti˚ջn։GT/xV!Mp$4` ?Nܻsvwftj호0AJX>z`^' J^@9UUU XZ_y.?%&Y={vGѱ,2|w/:ki0C`SQԴ^zPzzxrg7״AڽO?{ΫK Z~ 1!-"67qȤPsxk5/40Bfc.QK(u+ Sr?Q_Mav]w+l{^icfWM/^Y,K 0fQL˨?KxڎuW4rG,LLbzy/eX8&T3k&4͏cŏùPVf,z쓏.BDnZR+:(3'#SzyQO4[4'DJ\*@VflJ1y?z)G)h|v}gg{uV.LLlYaEj\76,iG(LZtշo{$M7ɳ~UDqkI+ԛfx5(DLlx!HLM.-8C"ظnI|_] Z3qƏ?}j S2K%dwYg&Ă"bdznպk`h4 8469?T엟K@§, D籶}{ҌM ,|g۴:\LHIKKIE%U׽ΌdDcJu߇~ONA$"&p`ݏ>5!]^gPͯ<6QyRbZvn^VN^Vj"Qe72Aj 1 dq@TfV>MOlC{>ɹ.=%439k~W_<1+4̪~A7mů>>Y#pHYx7 Z4.?t|홶ltQcw[m[gm.:o޽??~E +S짯27.#b|xkaji{Uho>x\wNza'׆#6cJW=wGEEa)W緎 FYJt}VJ<;,/,oKxJ{Mha :ٴ> !'7?僭Qw^6:3swR:<&1m|zܡ_\Y𕦧/oO3ZYl/ 8# iU9 |k|_W~MTfWGnncZ XL)Y+}?zxUCҬ&'{|c3T |5bx"ڶ juk;~?=K-IϪ& Pz1iu[7{6#um^Ԙ~#K֊ӫ [eڶֶ= |H߃.àE;ŕ5ټh5%>.][yXPn.ρԡ㝯l77- ;@w`R*EO~gY.*u3!^ǩMAA38o(']mtʼL HUx7O=Y蜊NV\g6ƙdɕ(ffe>rr/fb'GU0RT- CynLjVi pl|< &g&DJM I/]1ij8.z8ݛHGa j,TR!qRO[kk'M)W-͉ 5 Pw]Ё-U܁g̝~lA5T椥$7=v65aINKuPvU:,;&$cR7±޻i}zJjZV^A:9>!?-ͭlJ=.J]7nl<ߥmWD\V K"Uc<6 ud`o8dl [4Q+r@927^zk=G &"0OwOJLHOX^U 8 &;cڔ .I )e8\ BВY4ۓ C"Hh#\6Y K:T,5r)v1 R-AÙ 1q|w'OU0;4x#2&11 B"Iľƶ>"NI$ J!u5g$D\Jog/inx i۸WX^[PIM,Ș] y`9! ``얖o#[fׯf}` `G}lYqW8t]ϣ Owd,`sk@H6`x#]yA mc|62ׯ߸wf <_ \?Zڸz ~3p p8n * 9a~ ;<خ %σP^|RJZFFVNn~AaQaaAA~v&& zuL 4DB9txxX|3cd++.ih|*K v 8!ۮPc8̒B=.!9=GeF J1I6WeAK!,kbIi }4ڪ~skǰ_Ў2pe 'v-B Xk,tNy+Y]޶yV~c>չQZ[UnM>aLA !A xd&m}ո8a3<ѸvNeyz9"7,'NI6%a}r\ȡp}=}D2="Sϭ $Ï]Lɪ.f䄐C샦Ҋzh7}4#Ǣ&]nZfHD|j~ gvr5ECЎ(3S̖T?7#DtdLwlw̏hVֵt^-IC+/0E&b*cE!Ֆ‚ҚfS>7*av('=ֆA nˁHo&EZo0[m6bƍE !\1Vc2sRjsnzF%enoo^ .:2.,p#cRh=@ &rPegU;ܖlnl K B:eMmk J2t{= 5ݴW5bPYmR+ԮtDR[H,%-;}m{wx䃔},/.@lwBMxvw=^lҫiiJUW1 "UjWXZ\azF gj ȸÃ]֚~=n lA梬.6?^.fe$zJy{;[f;`8a}Nؚ mXu`.)Bf tTVhqbw`[#h[vwn i@jvWV͍ *=9Ef -K2.<*6݈[6ۜn#/2CT=@|jw;;RhN-Kn42U9˪H/̬l@pyCg7/N9;9򁯵,f3ԹMy -*2\`xhDLb1iiy=7#uXi ;j;a㳳cp SHzg}Y'&gr=j(DZpuR@׮nLvf.O.n^yOo޼8.j1M퍕q."=6G+k@L+2GoͪIt#߾sH]Gͳ=w0>S VuisCaB?yyS`98['/V4\h\z ](fux 8>;u{RY*2: 2˱&Ljad, M]/IUUJ̯lnaEF&ҳ4e6텬zh@gC  ZkGƆ{*s1XP8 |fEڶѵ bR kyBOVx,2Dj,LIaJԜƖE$DF"QyAieT`ݵ ]4(qh"t\tlJ=Sm5=q) 2(sm}eAjP}]]MYȴ6jm̌Il`&+RʛN%<=.]эrU[Hj̾TD|AS?M e6$fַv=y3`v,.#OށqUY RX)sQȬn*W*ufŧն,F;.΁+' 5vK٤nl?ʢ2 PC59q 0%Oe&ع>/i|Bġ dW(1p [HͯA$xY)|nHgvzJ3& 24fGU*!Vَc nSN (vp0w~vgBҜV;VQ:س#r/mŰevAO<ŅE$ŋs*f}xvp{ΊZ}qq JC;@`;#)C^ԓkK.xy|;$.ߡxAi崚G^c[7wgymIׯG&TQVmr<ᙒ$onmv֧!4XnRjN/nac/GdtʌVâ;<m_DbD"`V偖 hZ&.0! ŠFvm뚑^?ۃ(Ai;9ўn\WiMǑsZʮ}{V׶v^$چCI.ݗ_~ppaY'LO4] //CqҠze"ߋ!2.8'ƀ{{)k/|pp^WE<^y;;8vdίNɸ́m Z2$$^KnR1D`ҳO_{ۧЉuSQoo?>FFF[5޿8ڜS[/2_( xr_}t,sk| 2{1x$0W# Ԑs|Dm]3Y^񍷣cQ Eڧ'Yd:E%% =DRh=Ρ3qTK50f7Lkw:/-%952_yl9*-pF"ǯqHcEfbtb\\BRN=M\qE)7$-\'D1{zX$:;gJ/S6f{cuwؚx!+ؔW*6^hh]$nr·=X/L 2f1<׳'Ƥ<&Ht:-7 <yb̚0i}R;ix.]9CFO£S*~356:ƑmöSebаݙNLN@&$2+؜!:We-ڤ40T.ٻ "캟YN,\'[Q8Hk۫SqT, TfebPYu,O sER҂VBr㟼aեƆƢXћ_|4V7[ga<}ύ3L 0!.}i4+)D?͛<æ">^ȃo.rv6·_~䭴ЧY,Uq\d9Oޝ9J|ǿo\ɡS3PˡC6斱owo ) ~W~u!fu*ɹE ry/wѩ]A;^;}/w~۸ULg133g$?&/lq[ga}/oa{q. <ϡ9GzY}Lk*69my]j1O_嚻=4y9Dl oY. $:83Hʩe4evt(0͒$SV<$2|?'Sk82ٳnT"'љl(*s=YVy] Y f '(OIh{PKǪsg"!;("Mn0w D0:˘=a!mlKDlm"~ 6wάo4*x!BVwDFM&U֗ ^Uw%lr>~@]~8on^mm\^ HK+p@!!|LCZJ*qd`X&KAln)nka>3rcHY\Vw٫}R64 t t(#`0$uye۝5u uښ q($ KbytS<f&YD/$Ed6gJ:XfVWehVS]YQV8/52A&\O f-4='yk%GP2Ϥ18|vik]fiiEEyEYE4K"JWO2sW@sLi"R*2K Ue)B.O,_=v: 2 )ï4er̂qa 3Nw[UwGI姥HS<ld2D\ΞL iAԭ(K;ǐR_"]&:4W,)=١i6ȸ, E`)hk M5銧UmbyY$9ESЛ 4_knk^=] U*2eƕX}UN>|o{@H`AA ;# @ ,3o\jťU}Kc -T*Z 9=0z hx'ϸKU^o, W׶t,È, ;wB~]##7&{[j+!? f8%Ս]X:9IFaD!IJܜm./)Lkٚ='Ƅ Lc$;~qb& QG8}ѳ3XYU)ɔ1`KQ%e-8" XLJ; 3SS3PRs6^SVTu(>F]7__YARDՙC+/zfY|-G Jec՘$s v𣣣wptfa1y}Y6 ;Da`ۋc}MMK(QnH_WY)cniAߛnn_؄'VGmC_'nP$pG CMsc*.vQnTLXli^`"Fըe~ow%QUj`)&'06v?asݳ 453\]=Mͽx\k,VIU pS1nhɎm:&-Ngeh,!Ȓ7v|WC&6;\^r9" :u\DA:\nh`Fl i"j[b.| $]#X4>UFB@ކmAFk)OBPtiyu7T6/K$b``cQqxDkv zv`[kWu)|-/YC *{ɰ~{a:=6C^HrT.1 Ji++]u C o;/S{cK[>>YgP,5S ~,9YQ߳Kܓ8A|<>- 5`Fkˊ"Nv[O4mᨙD M$ɔwO*@{ǿ(ZRU5 Sѽ5=0<=˘@Z4gQ]^J:SXV쯯m}A["9P`!%5c!yo~c|qe b촕.ZҀ7{Xa(gGMRXcR]iiVHwvִMl9Ң։5qVZ"=I'!q%czGDeBO(Lk-/BG=Uͣ|:waI@GF>_(OlbOuy1C]l.Z"(BbidMFI@2=93]S9%OL,o<iJ!K$rq8 0ٶΉ,[ĥ.64G(pۇTwj03W(S*> Z[CBf{hg~w{ 1|&ͤKZa7ȉ"@:Ff :зi?w)sq& f]"v+ Ǘwqlh|PC{{HY?v,wjI+PBmv嗴AE2 i~!0T_S0f0&E=^@0?䵻B'gHߜGj.as4ytɒ)圍# Q-ѐ[MB/@P.y] "~/ yml:A׋ e5KpΠa67ѨNvK_.p. BWHF}җJZRI#,cvD& d7-PvO=+ (k0&Āx&[Y~~)k(%|Phr{]V9{(xM޾}N=;A}4-ϩfmH@鿄lͤsx\A.<޼U2A|e~q]N_2vu[ۻnnԑÇ~囋D<2lc @šI#1;_^[ZXXsdo~/.GEFӘdª%PFW9ow߽:KF#"ӌYYϡ$0:w8),][bs/iIӇob"W%PE,@"H`;hbNP?#p< H=~} Uo^/nNOl2_c =T _}_]& "N:{ZdHz4$ı4teȝ]lV ȯ7W'x%P5W0*c!BjF>)}LĢ[ǯA'3G7fm1Ǜs?? 46{ŗhȥ:Bo22i=HõM9OLpOW&T<7Xȭ9zk Xy׮ÕG#B0 =-C;Lj%+-w:%Zǻ_bƪ_| KZg_?z)#&;jo[!8YiD_&1b Ɛ"_K轴#XAq<û\H'l 6o,ln{ -JvqeX,U^ު6; R 0szd7!D2A;>Z=`+C}#kX< ]z[` jѮݹ,>flPa d} F$@Wpحmfqezi,~2J^e1P*GLAlh<[[ޅ [ŭ}8ly~aCӘ ?@4Z)Pƾ_.dUvnyۄW D0aK S/Z,"*Fn2^.1￉ZJ3[-EUӯ~wHJYFYAR!CI|֡d ݀t>hMz~}nA,TXSG2ٯ瘃:Gl@;v8l(!˜kϳS~QE2;cH;,\}N\:?sPϱRTB)WnҡlK?xy9 A.N kwnKx|X$A#Pnxzs仿¸: rKY~6EyU ?zhtI[O1v\c f/a3Z,o4G{L[+z&?}zf 2CG/"VM>??+Ea2.rd4~tLv_+_>ZRX2u64xh(?&fCTJZ5L!D/B?3#z0T= ꇐS'ֳo~3Q6De4bCdo|'}uS<1%XlJ'f3~]1ϴŒn!KQ:w6Pqb ~)[a.fLWy"*TU/()\ \ӸS%k `VQ$:p[SH%6Wz^! qk8kUHK XjcvZH%d3pH$1fs|~?_8<ԻjGk" >p=CP s"W)Sֱ86 08l`KH @DSMCcCmu]mc}MEUX:Fpid2B1lbkyfOn`La-(4TWUt`gYU6UbN ]>/,o5xajѦʊT~hT6{@dR!Nc@y0ci`Q}* 8O!h\Ve1Kwփ*(.+fL1B.eaViދ',M= +[!xHpyl>;XkSHGm}"2 + yDlWUQΌOY _h_<X'US? E`T&ȵ6w/3<ߋ tr} OcqX `z#vg'Aށm C L&X=I1f9 vWR1 ZÑ x lǂՍ(c 0X㞀 E53˻0O$1GG#4#P)d{nLW^䠪,t3G\$]\^3:)4*sx<6A%aч0"550=><ۑRMQf9c,K8f^9sWPp7wvvwtu Iӱy/>LGfi4UUZ^QQYY]UY]S] T* >9,~<~ϙ6Lj)CP,įWӧ߁y .EuєZM:Ck/Ӂ/y.;j*xE)õ+Zq_J?ϒYӝ/Y:=%,fݠXL*A]}"r Xy} @ȬwpxttltxښڲҒZ~68?HP-/ 0oxfi}ws|O 7p\qQ.5mI7C_K5]~>H܁Z: Cf *ΤיFʡ wz[THan8YWY'["0⳹gjCkd<>_*ݹA`uC8-?p:wf!eV 4:+ f! _hƅO/_ϗy)nB]+fRssK[0-6ӈo*-.N̘nY,q嵭[LS"ى^`]X:fC;kAr^/Sfʆcm6R7';[Z[Z[;:Gwx͕_[hȸek Y|Yiu.ux鐑aS vttK_[k[W~p5W?|>e =9+iIuJ{TG{;ѶwkSc#CT}w15r8~fT]M_9ޟ;{G&ǧff&'&&&FGZf!Lé?Q,5/ߘunLt.1\7>1z~t&_]])dbqjHx{iwV=a[+/{`\ \>xgsK:qD@6槦&fXJc{ۚWN]m,09YXѾ ߞp}MM탳kX |P$cWWwL>_(1zkob}{c'u~ ~{Hjg;D-$'WV%P1( #:N퉮c3ݒ8V>i=ޝië(Hgvb*c<#h Fl1 !й^$5lxh^.5} k xk}Q3;<8lFѸbۜ.b)- 8ER..x }D.wnN/I@yΔ.? C!ˬ18 G:^\vVDnXy|Y?t~]29m]3HzH*3w$t1M<@ NNBl\/͸*/j#멗Q1dw Z۪P 9 |qM+n 4HONP$PE$ԷL"2Á ?;rH8<~?>nъ ˽ CH]\jJ[Ri7f5$z9E|W0 zɚ"}~?Wi6 Bwmޖ'Xv+`+zaR׿MvPP^( f]6l97^8z>V׹% i~q;:V@Ib!v<~lq*fTі^2 LէMdh( 7ըƖGGN]FK&b ERU-v{]ìW򉛣͍c_]NL!% l:4e 1hd$ zс-\qsbP ڶE 8?\ TsGkv7nR2u@=9OAڅg'X4hvl6^%PKHQv_<Վx[1W& 7bx2榞]]P$ X4l&6 [ JkD]޲,v{"L-N/M;]\\B@#G A(bk6Y?43%="y@y0 ']^EPDr㟼ZVZ{[cW߾Jĕ#=].`<E C jKpXإK$v(Œ Бa" w{{~W57QWR%-hڮE,+;j@O#Gno.KpW _;XKmeyk꺦PaoEu<)H >(I(;;FVNp^_P6LHW[J+ZfQn] }פdGmEeaCck&E))mi >MS$^ӽu%M]C{,%y+$XJE4CK]h/nZqeXQ&*M!Okcj@Wci!VZ\ջMgJ q}(ƳwѨXSLhPpK]%cgojmdf 3ZJGa,yNh4'e%)cn?I$Jl2[tQvkF6b}u|uc+CZqBUv.^$&b:IMՖl2l>Vìf*\Xogu cWCh2!N:ϰI]4hzb .kՙv z]ݲ@m[p$MDW6N"ڬV<=7:8 ;9Zr-V3zPC:Y""C{ZJkPXJL.oVvS`By(7j'pmuxQl{C$'R5r\\.MitӠ(\R'ϳWA`_;tCP@ܝ+sdBJ$Z`pa 3vxs +‰D$`$".qwk|F=Dٝe86<݁#mt O/'T-SbaZޣƒ-3<$*&̷ sw&7e\p$ίKKXpryghlS$bg lp} 8X5 }x p=:*Rъh[#e%M pL /RD 0Z=3X,A {\~xsJ k8*# ԗT!Dj#4縏]ޜY$p!/oӜp>NF.Ocax2ؔ9*/mM3{|OhO.NH ~u{\D,ݞAxn:^WJpct?R+%|. 4H~\t8HY+5qJW08.)ϭ!嗟{{yYp1+vZJ;Q-arg8q),:=8?tl4zO~본@oUqȘy==8Q :0yI_}/o[y{7T&<>8'?_G7WWYx:~e)B;?~:cVܴ#I$r㟶H[[ZYY;/Ͽ4L 9tTV&"d,AfxSPJp폿y2 0vc8_wu)trsiek})=|oy<~3 KԸbo-e2Uܯ"8f'VW6 pF|ӇNCBM'ܕb;A<0rז斑4:n7g4Boo[(v$29xk2pmB+@)Ok{sh =J:W,w{d.яc8AmInu. PLlW&QGf_o:iL_;/ %MKͩ]!ﭡ$~DD r,H9iPN}AtưSyJj0Pkg0U K"ЈGR% 67dZ~Iuaɤmei4Pn8t XԽ዆=&%-K4 Pشc!ƕ),"P*|zb "*=.|cvwf6 AO5;p+C!S..EjBa"\H,br/C麢tVfhֹ8!h"YFD$(Z-juĬ5Jc*UB>N H}_y4R:ǘ,s*6Wjkk{ a0T$۟?㯷4_Tӿo_ƕl. =CwwXm1f̣wzMB&iGhM Η^l_$|unf%`cuiyiuu <<<@v9W~;h =4;`zZf{7j:.,k |} t''V 8 rعI}1 Cb,|mvtdjn2*VmuS'So!AWCjU֧FiB>Db r_i\xk)x"I?ޜY%-O̙mp!_W-q7ߜJMu4?<0q3,*Nq1tn:]𩓇3TTnN .fu{+0㾖ƞ Kw=p"CLBsfI+|וSb)m#ic|x2w|HSPUζs}wjmR8$"jlA{j/PDIeB&_zPbVF&=巗ΣEvelv ~.ܙZ=v<\;1c >7\gfc'$J>_\wa r~0ڽ7_ɖAp2'`* /p.;[GS qRKg  9lgt77NP>yLY{{(3T>KDxaI0Ҙu[#!d\ ]k 깎U/KjRsүp<-OR2K}5{]ٹ󞝺Ung.ҩ|[DSc;4 [qǻ=4AF߁hJIEq,%[YeO&qp8-F$2vmr;1~$Hi`TZADQ>{8vu&GA,!ylj_@K>ci %Cl(Y}'. Ɇ`t.}:"c,v54u6mb)>ǡG0&;@=Wu)(m:d :&Sd)]@DrN` ZmIK+*++( #J́ϙ TG0rE t*z{qP,C*+ac r>P[M|bq S.x]1 !r%JM&X02 L0ihZ08,̕*|$4xN/*o^EyRǦZ0wt~gGb !~1ZU }N}=ᗂ򺮉MhID,NuutN,mAWc:X}ek٘z]Z;%8Lmm,MOOMMM/llI#@وg$XʁO$ѥcLQ!#`1FR &+rS1S,.*mG &NL&t"Mwyiş8d\8$Sѡ ;p@ҙLt LU8ts.ˀiy[̰__Ș}IU5w/;[+s#}@T4ӣ~ {"Ry`rhu}sGWo__@__Owgkc=HNS6$ȵ)312ӬH Q*-yuuuMm-+ޠlQsTx{B_)x+?}5[='g䍖ZA&:4mV:WFrGR>yiШZqQ*2X@~-B^e'DvO>rCs69Y|-[SW,M`~(=3ؓiW=y!^=#Rvc)dSK[GO8ϧ&ƆzZj*JA, >crIs`OW +KS(t4tMLplbl _ KsC] }iZ$Nfz/seAw[?w:Z{Gg7!퍵񉩅eࠀD{k #4MSFeD/ZXӳ-%uƶ]H&ే pB 567wFo5eaۗ)Uݛ}Pjmhڀ(X, # EfqRtTOk} V}s`uWNىEnQM)-o"HsC*QQ'@1 XVk :F)1Cmuk/y T)ټ \2C=Fd"_ҙEn6* d:dZF#쌷׷!g6LKiSvn~UPP\?zlM{R5pvN%4PmݟɤW iЉqTϥpf?fQUDml_0@#*à$"S8٭fŠ1;j&q֋p*cҗ5K`kؙx~pShVc<-.q9,VQ0&k[)+m0e fҐYQsd-5x pP 2NNC12v{=ne[k)}s83 2ΤY 6;j:W1RgcX$u&t^.;p}z;R"⭞vҦA8ֵIr}~l-v6F-\naXLZ998rO) >k8xd 0X1ڀ!r(؀Zo~i65J xm}<}^Z%!;gitΗA;)1ef])eAmM0ы] ]낀T\N{W n~W}:/+ Ȃ .y]|0 x~aZǥ#gZVe6۸iA0ǚZg\Hf̫ T WPK$w96VslDc$a53E0M4rE2ju9Hb/r{C`) Gjԩ:h l0K~w׷5m &N.N~_0qqy%e:Y,CU@EU)vyҬ Yt %E2>Nkk:aRF*WrM{2ف^vsq'WW' ն2K*;fp&s5gE`ϯ.>e{au^Eum*"]i,YL53^+FO: &jJKZǷhUqe߁Ě 0=ψH#_^)K-5UEͭ]C{BvPfIRmr<#gUza47O.cݓLZdR%Q9_­Ά5RQٵ:}Y8n֪+{DDvz#9S&^`]O()+mU#Gj>pX:>C3kaB7CDC^Ic xr}@@2}>WY;r$+ǖT%caHǂg6Zq# / j[_niR {&L6MaR`gkU`Tmެ 0饾iȠvŵl^iXJĐ.eu(wGڪFHR@Hp֠Udѓ'q~~ffߢx(i237{WR%}ogʄIZEAQ&~v~yyj98) 0jDB ro80Zʪf\Lh]i2> OQG핛C%#g7zGR9}os|ʕ{@#Q?)S$7y{}y{w{pf\"H$Y3h\L۟n*[C%8FaBEZ2}Q` &iLTȄTT_KQU #ӈvj?gQ&sn@ܨ}D9mZ%Ltսh\@dj9bvkQ-7o޺sz.z,dNJn-/(nA Uj5vBG/ޞ[$0 `؏wc%c_! Yic4ajo,m+ i` _a̦ggV)Oҁo~DʃMdT(]1xl "ġM|4cF/?7`Z'lm! UAI&p)"pvIӗg_C˝ XU }" E lebQzuo,*xÇYC9I'"7 8"j.͇_[Cpޫ$7үkfA= \O`CCw6sL8vrqy p2k&\o)HV]gArݟH$!p13ڜ=yylJ1E㜅T g _@/#}?%-R &Ty2śM-i[nCڢ4c_PֵN]mĔPXMEV>CG./|JuK7v m܀mJq)p4_3؁ L87b c D.Ӕ؛ 3 wK8ōKuB%baW??"* A1bNtYbO6%qe퐯R~q,b'ɡC]ܡ-d |*Md4zޠ7huJ3&sKJ94 .U&^9@T|c0yzq@{= #T[MFFm[ ySpNͨ,Zjau%oc4cN='J [!+nݤKU T|.5ԉ 8pcJEL"Q$t\_8렎MF‹'gVFBͭ6PUL:aR/,ɑ٥-<7F8h$Ug)m_~{lOk=ToLJ'g! 2D͙m*:n,L  Vw(})|[Ѻ y3iih``df 8,EY\קzἼ X,M &)[ ,x$ o8sv-ioxjG#$1A໊ۜWz湾x!76Yzy՗ BcI}-c|mqor$0dϓxHB7j"AI1hsjppe4"\;҃I*(m=^=w:^d:O꒧[t()$@LN vr3W5vM&VQbUf2Yb)S3y\;i8RHR }1_0Յy/_<5ö]9wؕ#js "@gA?i湮 (7iL*Sm}y6,Zm)IS/>,t*4[OϼznT\&1L=4fwG;p" zY@'Qzɱ'e܋3DKGP$`Њ)x!Ѹ0 wMV>Oi LgIX>g$Ĕ)`ExOiD\ty=7sxDCLpzNCJC/g"1,ߥB/21YT0ZX7SԬPcEPXLܽu%shm JHYBхF3 aYM'#ߘJ-o( ֡HSD$+PʨKhUg7 kgoq<* & <3(d1RԻ~`//BrTH;a<>fe*4j2\hd.@b^ǭo$btsZ^Zf0:+=XITF':ڦȕBBcX;v`.`^= :<&-KG,2;42TPԿ#}ɑIUyOIyFkNcpXbн4hVTWY^Q]W[S]3 9@|BBZ}vPuuq8tB#~ f(Gʲi'G^= CY\ZU;<"6et*rEl)ՠS̹Bd~yfArX3؅e 탓 mC ;;3#=-‚Wϳd\q`068ڍ v4U9nSqٕtQ>X#XU5е,,^\\c@4ןgU654٫T|h>Hd( ˲?,Cf,2Ka[Kd]t&mcF(Tg R^V,#`-euRKzl˹yU5 ͭ Ӝ׀u$m{5r则WW407+4 ?2>370739:PW]br|yϾS Hu{׀204Ncp@EΎ6T 3yOkep)@-J+ 30 0q{[t&vwa}u^S'>X0>vHX4t *Z!~ktH{ >Cf J*u_0^ljai](ho_Z][_[^GPGcck q&* ƽ:/,IvgbdqL2fw~cx  㼼LqSmU|wr AK`%-Ge*J#3`KC8Rvr<#3E}+ow}|Ib JJ)9T"Of% h4j1x{i*$Ļ5EEZ^+ڒ'\͞'Q(Z>ŪC$R%ŘI/rmVC}S,Ie˼؝8jd1۬fJa _ :P.} JBqrMTߝ_0ijtdkJGO7rki9i]AQl_8 2dٜN~f{@5.NQ*$>3<1Gj2ONoB&TS8)KJ ( f9$[8Ԩrf6`  .}E5$K^߷DB$н?DB` ƹ^yl(2`2{v>f0yJeC0+4@ Vs] VAD.<I=n[]4c#CR? g LY^С"PYV  Ue1$2`b3Lv_m˦*/2u3<_׶Dql@(Uj-NP&LY|4[m.?@SAQ%J\.aj+au~WZ<=- V< A͔2Xqڶ}~\TAϸtqFlQL5HT@ﰻ 9޿NHwE_+(maxL#AֶK[=i1~&N ?|S݉), ^Wvl%&RIu @|-)BprOXڜ^i,/} Rz *rdaP0ZhJ3,>@QwjG4ܨA,ȁ渥 ʽѾͣ5eaNgp;!_9h 084!Fh,jۥi[M!?#}>sZ~1lޜX\R>`R&jCbow}iaT|Dƻ&z >6#6*N89˕h$q-0 B1y'aWʀ,uNЌD'e? 宓DX*xC$8 c8 W7`ml Bkm)\<:4fgQg길<:K^^]\%$9W( 4h=NDԞPO77uLIR25K3UY>x2ys}y}~r}u}s$`$p}LFjR';K:F7pRʶU> >CF:v]]_'onoDOd\4^K8@U8vOvw,* }kE:9xws{{Ișx$WonNbq*8{S]umX$-Y|>u1}wfeRpoۇǷ\N~ PΠf5W5u:`$cӏI?or y}w{ZOqj{UWMG*I[|H#x+~׶^UGi]_u[[;k{G(,g(s~<p\/bD7/ꖸCz:OEWWwM1OݯO_:Od ;K@,zi9Tm-2+3:5;?;ETs}_}8?y6[_ZAt)}e07ϿoOONN G5AB)| -ƒC'~]X]$HrooQ,`"x@ON1f [%A]qQfe~qa J27w7wM{W8n`e~_k\eu]5a"9,~v}qotCu4gY3H%Srfcn _>\'aH}o4zw2cDG2vbӧ3Ni\Dm0|緗р$Gɍwd@ BoU4Lc=#q}X-(Eg\I㵅yQvBuEAOL*r4`Il%z :_g9@:EZ8t pϥhUIJNaX]b _$}f!r~'U;/ފ,cVPܸGB VGDg&)7i#Lä < +͕i?7fKh #O c G$@"wV Kqjp:XܶCX7Glwu,ŠQ0R#WŸ )#gVճ=Zcwi~u dz .pE#Z1j\ϨWkR`u~ff k䆓w!"8FvAyH=dB^^ۀ V5onܶěo>{{oNR!9&Mc(wlʂِEy#j֤,O/l\P9nݶ7=r. 1F!{;+;\I =~8fEսzҬeMήn@qd*Gr$ݹQ-z! }6+#ĶdP޾'^zTcGj9 s͝yqGVH#wV7Vf&}R{S^LH r7FqLUǀ\OϾcBj0ْ_֜#XX柼 frp19yHXwN"wvwV&' vًEZi(y.f[Ms4N8D!z6 ch[_Bm71rsI~.26fݕbB6D1sL"wՉa %X"<<";K8uչx40]ŝ!dvh,KaLMvnBOxJb:\ilǷ1ZSq~[+;j`_ހSB. $Awrېa3Gh$0,twLu y@ YC1Y 1Hvy/5тT*h_"n9 1RAB s_]!%| cC&8t yDEf?D#v7|95 j笤P}HHFnCgF{;'WvzZ{&gz[[:zW6 =U`;+.?qO? *&,I8lnlnό76uWյuu57uM/.&i'ߧԥ*}JE4<:=R_UU[__[S^RZfzFfVXP-.}]^d)]ʄ`>o9@*47pKe ,%g[Z+cUR1Vn.jXw+[=~kc]Ckvra:k] y9),^;:XWscK[goX_{c]Sysb47o!ͥC"fЅipcg?uAaIx@[fȦȽ#2K Wj??8D ҌcBՍc͗W~VOC}:uLch0M6Zv٤ᑠ= [=T R`cxu墯."h թj%h`q%r`NըV r82*RTwvP[GvJG}Vj TB&* @.iwlVk/Ŷ26M|W>vg]"^*znNYtP"Vn)M5Pq"i>+NaiǗ{iP k Uj`F)*JgJjuج״[FZƄ *O hX+/;enc%-xt4^8:ClYar_?lXA+)!iaOK-)<@62#{6Lk#J@wXV;p`VI- 4&ɠIYĊIOd\aiǮ6v4@h"DfBtyܠ՝6 4Z!1g[zVd Lfn: \HPk0;^GuMF`:3 #Cz0U=MAKƽ2e{8<~ E2ZKw Be> bf7 riu:B&䑶Fr4??/G!L.Rk}ML; >PƧn3z*|2IENincd.^mi?X4$!HOܟל^"v +;vT\muǮ̖ 9x@|-I&BI8x @|!A꯬$`tjՕF'p O~_ N[y%3T~ak gHervch"̝ P崙5qу5e/n]ԣ.qGѰ,OO!'D]z6]aF=xO`" ~t }ڼksrpkӢ:ٖ@.6tYAf`u;<ްzT7wvMݖ؝ cg4*z꿊LFDosMQ&,hkiTR8l %pia0:\H8Vb vFaZS Nmbm98Gr$^ng 6Ֆ4jH%ϮyD\*Ξ8;;gQ>"i"qKf :P[ܻOTT18*FYEE./dO3`>{puGjCmAGJ`D`:_XP }~ryy~#"1fhonΒ0Uб2𖖠RiGg(Ofy'e=+'WWt 'g|~ c@3s#e-JCE]tT3躻6'g'W;Ж)`oJ:hkCIM80nZ+zeO{/nnȱ@\}8;I]hB[kKrv'sOѻSQpx}}sԞ>|?㗏6.X$ޚ҂V@dmiACo1KJJ?<y4xl޽Α`?ǟ~{sq[8.\i)eq0)0+H^><5H[Jͽ ⋻PNh_˯/eHG lv'o zq:`IûI(wsarV17'!H i| M 7_H1{N&kZK_ݛDPk=!'i t_/iޓ{\F. ]iPh{c}k>kw7*!)_Ċ(WׄEpѺ: ֱ"NFỷ7W@Xp0»J> jgMv -/}sG\\}O?wܞ˓_sBaV[˔tth ;,S8| /.-r򋯾z&bxoqyH#4a}+GkůoN|˷a0hS|?E U}^5n>VX5 U=Dn I&Q+ӐC|87SA8̼*jX`zN!y}z#ˬ9z:g9L8F1TXA$pdF7mNRg̫>:S ,wq3B{a/4eb8.z0s2ikT4+xLHz\&/μ&K$4Ӑ迾>ՠ&UEߞ]%+e<]_*C-ҹƬ<4h&R$x2e9g^_;LD(zz?"S(":lePb.0 'iU>qb1S*W:+|r‰uvQJt3%x{gɰ n`}+P"7X(x-^\ޡr}D^t:xSZ;th;2 y}~ȇ3<:{zn6xroMSSȍeXV:.W9 ;ړkTsS(순CՇx0HuLjM?#6yDUWǏf}@~yJhr46}Ĕ<8pEn:G ed˻t6C9ܘ;[<}>/>^R1 $$yn/ͅ+6`Ï._=ļvjЉl*:?jۤt8͘&修V_܆4JƳ"ʠA/~kW7~L~QͬxlMBo-f{ U=RlOMZY_:eB+Lv_/o&>H_~UeP2eяx`O>^m~g0du]"R@ivοzp 7__~Ǣr($dЏvsw42A%ci6+P(@"GDHet$}8xws|6bHy !Qɸ=jrz* i>0٪® * &P<]H4~xw+F G8I2PUV+:S]P),9&Pm[-_曤I̠C lΣʂ'z9ή}Vq}zb(yϯ#:w":& ݜټ JsL=3!cUHԵ}8 =D!aWy&%~{>, 'WfmNk !ҕ//.(W^984 D!Qȃ#,Mm3@p\1 ߇ !QddC@">F} j,ij !1G$8|K,N|&$!0wx=#{;_UDV_!^!C`-n/O/p$d.`gigplvq}muq)39Ւ pLkeͣ?޲=$t,fffffffJfffFlP}#$W+].䙑3fZchM8mohn,+olHOH/($E55MxTs[$|ctz^m,LNHJNMOOMMJM6IٹE xCV\wG^Kʅj=I+D{K2R!.>483cxaC-%E7}n M)Z:&0S}5%yٹUTRZ?X/Mw>h/*T_,m^B` 0z{:plfi &QM%Y QٽM.: M,m: ww667wv(rgn(+IDAf{-HrD&fw On"Ljչ'an)?q!I/oAE:1 97T_[SS_3|HT"RGYz\D[%My卼vْF%6Lf 1RU ̌ TJ~yS O ܆^5cܽrW' BfO{(TҜԤ$P'Y9ٙii))i9e3H,GdF]jύ40Ng =)%%=+/rfť%٩IEsx]( f^]AP.$"XlwP`+*+ojm/NNH)*pYRd(3 X'ILG[m)JIM+kVGW[CmmK[Ox[qzrbFV0RR#@v=JfQɵK C,KKJͯnY^]]X=‘"jc(=)kOzfc/֥{ c{J H[ZY]3;HC!&vXO~g1?9!c2"FxtcpxRǩeoLHo= it:B"ַOTP^LOLo\f,z HPXBab.ԥ'fVmbiLD,@$QD"z8ݐRhpBssA!LX6 BX͠ dB"PXŃ ҕ'+9+lZNx͈G08:d2pWғ z6t&qPF"Z'8< E{Q& XΜuU. ֞G-%7كM=y<Za56>>Fa4@"n$>Ֆղw*#=~.1ߚܸ4:3vTeP{h$H c$RD琖Rrzv%fVcg:qFd'funLZ> ~rO:Ăb!DiM'I>S䞞ܶn>VM+ILk\Œ,6ԡF:cԾ@`qLn~|b8N>͊tM0׏ܓUPh|ͦDENM.EIH(pXl x5]@a1厜ĴyVV2&u'čEU洤<^pt:]YAF CP; 2l( ȡF>]um2X͙̍O[<0\0kʅ. # "_THIt* *2qYL*1S_(m'+E=P`{IL.O$)O,.T Icht(>G #2lD uML)Q$||Q"^.HHZ3=7F21Mڐ|0ph )Կ`|蠀n2.,m_H=fzJ (foH,˔rDk5b*1#3@Ǖ,ӄ2/x * PT\**H( 2F C&r+q) JE\J2J& _0s"~z޴- $Nj/Z!2.J8-&ΗE? kיr=1JypM A]Nb>%*$qXDdjYWI H7adάȨ}*3p(QXРT 6!HQ|hpH\rJ^;[V܇X-&>2Jaid&W}ٜȐ#3)-Tiuބl^ECCIE"ǿ{[j 4*RP4C58GIZ2fVyAE"x:˧cfM Vk0jW\B 3XL݋IQ+[ k$.z8IDrN.B*!@7]&A:jڨ7[,fּO}M4&7gVoSʔذ}8Q>K*Tztw+Mf`0Y&3ӧA֘lV_̠0ؘ'I٥t*in*V &/*x֦iAg>@쎛7_>&<F2ѲиvFZlޠ**#e븲-& ȵrԋjyW( f3T +M hGiym!kgk:r}yn,f;dJ"3X/˛3YP~LH`Г}T3}r$=;O-MyvRd*W~}C[ *rt3D9tD* ˻BslI8;;=.s痗gF_] ?SkiȑM*_Ɉ) 4|a,Q*q~=\`qŗTl/_=pZZ.K$t=Ht EOJ+5ҁnY^\h|׷WNŨaoOݖ șJXĹ!,THZ+D0:*CO/m&AI_ڸ g(N!p3ˣC}Hjݳw>j6EIYcPBR".mo E/e[:^}wwNNoiqP rDAmjB_<S¿mx[Xi4Z2Uqan CQ衉j:/:Q\$Z ڒCG`ZHr]x7 ̠O<7 y3ŌաE _!^ 3RewƢ3!7pD&fg7ٝ :Y83*b!;6jxsEP} Z$wKԣi4|6퇡Ш7kv"=by_@H|.]Z1`4KE hzQ%fl ۝q\eI=G;:H&2}=nۢeJDsR _{ hJheIal-[KsTQ#e,w6!<|:.?0"k`5TU4bvÓʶ%Y@ G.[7pB8PM/Bb֦(">8xBo/LZ;P޿O"*u\Ћ04r< 1PѵE |NDYC)}sjkyj"U!>XV7&4JlwF1Opl2KE9>+Eb6fku}Mbz*c )ic V+$-1;G$G\j*X*H.m8A/p.碏 M=;d.A<&>SQw61\K.OfMPD _S?$ZreB #pMD#Q̶)h9C`1El֪b.A#WFjxFß. KjCHTt r{zqjmǥSĖ;<<*2jY VV.dfW08,Ǡ ^D! K-"ZNH\duhr51$0\+Fc-5;Xhi<$aݖtDqc,7\W2|Jͨ՟?U Ϭ":(0\K YlZD,tUv8$߯K ՃU'H2fnx*њ`VhϟŶ;% u7 L"|R -WQIx,Z,I'BPöJ/PH;=M6W)ڋW6QQggWwWzH,WkU"62H$EKȍWCwg: G":TPrBN/fB_X*p ְB`ْqǾٽxC$2NZGI,.W KPtgZ1@n޾zI%9l&`0m[$c4JVbA)[*Ba`{0t G(U-O߿~T+biB۷?\T2Jð݉ % v/cZ._ZóB%PoWZ1Ko޾¨e!ј љPoDMb6cV WIH%C1̢''<Ȟ=5tm6#*EFpd_"3=^LݧA[Ϣ`J:YGxZќn_sݕ~ʹu 9*58*Wɾ6)[tO.& yD&rEv gܹ8&FvwvLk#U|p*9$HK Z$CQ̖#F6uln.9 ǫ7.R:]{7v% 471\ߵOص̩h#cKY臚ji[\XXZY\F1%׷& ~Brgv,/Lw4"* {T"ӛ*)jgxznn~D< ׯ΍"EwK=1?3?=93;=?Q(#Q>C8) $` {{ 6>4g/_8 b,Yss}1735>21>?:4ǔ VyB̠e&398ⲅ]XXY<Tgwpʛ'ooRhPOdWpܕY:ĵ(?<<13yH) g6dg1&䃥ɱ1 ;YяCFO#= t_>thHVZ&^nܢSoh/lV# t[mCS+$BV+9N-1ӽmm=-+xngNKOl9dpdN:152GdB.qwcӰK#5 -u̓DA_q\Ir,$'zjkkJ*;GN0ȍݝꚎm<`2)<{X$n⩘šʊܜ⊆ѡ¦c2y{6-Z{C8, =kH qg4?3##=#+'7(+1:1#77'#%>1195+etl VgGO3t#R ZÕҼȃ$%$EG%$&&&$$&dW4/+{Hx$G$ԍnݩʂԤxHA'6.FNȯl &R]dNrs ]n}f(7-mvk M=ӻ8:[1<}؍6n67[;[c=MU9YY9Ee5=#s du05&"ܣbV0|Lc}`uut1:)'kcřqQaA{=n"]PXē⦡]4 6{[`M;DpHSqV|tDH<^VlbQX3:D {k =1I;WRZ7 IH)kd{[jSb"\|^^+ 0$4""*%.|(wn|&Ǽ(XPp_ ғP}-:2"<4ħDWq |ydsC0XC Yq[?OGQǽ/{zĹE~=^ YHhG;~^޸>6Ǎsy$܌_skOjLK*|mz 0s:.1HE@5)%-=3;'{ِ_Ky5>sI;^.m#Q lJFvQymSGwOXd[k sҒc]G>8pz*7-P)9խC+!`cLIq|[T^t^amP< zFc}œjVh2oIp#^TyxDnXtBFIY)$<*`gsuy}mkG ra:7I {H{BE@gT ۓ= 奥%%M+L#gl+>248>n^}-٥7\жD`KUqn|WW9̜βjT[Q;88^Y; թ`y x wo3K,˹;V_1<wsh,ޟk+LKL*ٓ:l z ּ;vrr*:fw1>dq<p09!am9leG?0kuxq@`UZXKO+AP8176'x:O ǴEԪ9)ȁ==ɢ[0"yKgSh|Hd2u@ItH,U=Z࢖ & Zt-,^{WA "2Y\ܱdre3i*Dl;4jV!&$NvsFxWeϋzQh|2ǦN$WRy2 @pGat BAqO˒f{>%4 .{LϠ yR2KX))Ux[I'Al.*z޼3LBR 1Q0fUT@$ bQ'X2-P4NSE u+ 3;AamGw1#t + J\.SB.A\rPjs{ܟٴζI\2fIc ["2KrrLBRtJ&2#<$rD.UjJZ%m4v- #:IAbF/@iU2 #ˢbwa8!P5 )5VPwGݡ{ƠЄ}:YR:a 'VJh&ǤNw 2sz%Q{sRˇIZVSr[#x[[II# D"@: M`1(1MAERJ)iE>VĭeCZ 9=3>n AjjڱX,:E:)HJGseA|%w9S9 kDQR0]yL K@q0 *t"J(Oِ Rl5k=jPdKmNI*A1b:R!0b#>thj ?YKV+98/HI #ZB\ּ{nzFE&!H">"w4_k}\C|!c%M^oL٨ȅ,*bAQ&^b.ɠQɔ5%*g8OHi>(&V)b3h_ LPJ |v@,4l#XɋϝK^,lklGKl `_;PqG"cЉ|@bB&Ckby^ TT 2(wִPT{?H#kcjk B {LH@;Bw3UM)?CIYjרlvlZT@mp9oC)=YM!}*=yN"Â,f]m oIp@@c/)e/}ܓ=N nO>זꤰ')IGb ] Ʒ7L'!{;8 7fX14Ѕۍ1QY5QK|K!>Ń6p+s( m8Y,SZT,!ZKX DcRG꼊`{[:bׇTN@-:RL/KQQk<17jp#/ϮPEq0COdSٕbԪe9 5U޺+d`AhRuۜD4jNհ|Pnr:/޼Z%o|Ǐ&'dUv tL[8Q V$'Hj}|e4"ɬ]\VNoZ zNhY t^v"a;KH3{C_>Õ]b1hL2Hgw>xyn3 Z q!ÃSBZq1ZguZ) :Pg#݇iuֳ󛗟~zu?P6C@۩Fe+z5Rج.|fzJ0/?~u崚j r) O&DetXG5R_dGrunL=h;T"to^\=>űOR;pB:e,/-fAXf\*Xhx_߿|vyjkD1,G@6I]:r1c2GKQ-~`**|˛ ՠ!(cp$`16Yr.#*EϜv͊ZՂ2>=Aw<篟^_`Ɩ(Ba =a1\.s}!C5IT?8u:TL2b/_]"],=_Pt&K:Z!ik]^Ƀm[K/)RYn͕b e) [ YءI@_V5TlwͲf/ϥ/NM`h̵#]BeN\t?#SB3õCR'xgv-E*!~f#PVʢ!6(+[t~@NЇ#Rۧ6Ur6bt$R0f yc#>=eۏ!ѩ7ͳkZsvmSdJFBZ`JP gl[@ RL5"xC_låS#I rt/'2h"nmC{`S42CJIZΕ d$H@[ҭ lW`xI&whtƏA0CLO&St6eF;^ 1),%D:hjg[V`[b wNhq'SMmKh G:Vq>eRy8Zj 8g d޴PȘA1k!V7cHV5=9^Zy>p75"buʔIZ c[UQp5-3G`X>$ FPŢNs[n͚ۧ 7c5F1șmҏF :Cˤ274X\8ht HETgJ_@hrJFcV;J mj1ߧ WlZF^m,lY%J`NDd1#C폖 EYB1{DSLH@ͯ32>zHPȰin4'[?:^i)j^" \!K˫S.I s(,yш-$%5.`>2f.5ЏTy|0ZV1Kbۇ%خx YFZquN9S|ҦRI<yPCUp< o2u)>Blt5Ll#h$Oa0RS!KP1 |ݙQ|uw4(DB$wVqxT˚*rK%6z 03 U{(#,/dBㅖ;!sgZӗ7hevꘄ夁c% D*kF7N<؄Yׯo5J絁OyʳKvvq~j\Rwey'mp,bGRYj,"0ZvxT+H\ӧ fՙE+ᐏڊ+FDR/K"'7Rы)(<頷bAH7/z "U <+z]ҙvB"`cItU̖T{ +X!Ӱ8 jaǖ+59|V@e|k$W?}( 4A o>1QѾAZ 7'ܣcKW4őr x:vs,kl3U o6*_}˭EJQBUP.n{FubdsRh`Dg JXAZR' hUb6BoZt"Rh4Y.W,ܭvZɵ29B#m*^)Ib0N_}{30q?~~ԫd"I@;(cPܒqn(S%ɻdΠW\D j ϟ9b6&_oC)lT.PwG0t\'ݫ:|z@ȴGDPj`˗eW *" Vr!y}tԌ#Pi/M:BZ>_,O(UhN x]hcZ$L x2"p4' \HߥJTg~ͩQ`6o3g*=2%s\GY"s"G qx"WNC/?kN)`C $+`uUX4`U2w8^Nii8Xt:] >}yԈ4ٗ?~,LfDDcI`4' |$ja[2V+xu]`œ(Ы#UIL )$ rsu)}F6틕C4βEJoN"Ano2AШT]dx?HF:z'7UޝY(dh{iT&{I{FH&3={!hy:O˛9"m{o|vaφOCtdtj[kklkhlۤжZ3"`C 52eokprCJv{' tdO{S]umMMev ]Z Af!Q9-$xWUEeeM]mK1L詺c"s97XVZV^]UV>sDgyLIߩToل做ڶɅ핉ɉ’e4=P=Gk= B :,X[EQANVVVnaqYu]}mYzlZQUEyQNzz I-m&ppeI>Nn<ĜZo,/ˆ22r2cSғӲzT:r8 "wYZD>HPa C[X&yw,?'#:AD;LYĝƂ 9" Z@&(4&maoLv7f$$%䔴ܒ-,qY'BGI9E'eW .S͙<̬‚mq_̾+o숸c 0՝#< 6 c#C\yܣZ!Q配;_;@0$PcQz|tK#c9yl_hF"b3 jzF6Q'( FcX{uA*,r]<`̓EFǧ״vOLNMMLNO v6Ue= o||Oz-OnQ1)yEUeP(?;=9.&:"Q_#wn/ЈȨ'1P|-! B訨pq=fnz~D0.;RІ`(=z5<ދ^Ӿ yhX@OT7tknI٥B̍AظXYpDOߋl=<*cT Q#aS3rrrs3 @`3O&yB2čKJ-kji*q)FF\Ig|zn/_ gbz^ycGW: w8QS*;:Kº;ڍxS 2uI*iZBPR)602!t8]M8gk Ϗ# Uٽd*?:Z[[X*@v RcC2cl8=d, FgT =/8)*KJK૸c|(֨y 9 Q`3c纏y蔒MҢNtf@f-;'󥥧eUsu!b:=*Dz=ޫB\(Xx\^Yiq 2_PTR\TXZVZV㴴ȏweWnj 躹𖠐c.>KI*;*05U5g,P:xEG!+f,Ut4Ӑ]טƚŝ㭙΢Ĥ#񙝳ܔ|Ho zu)>*JK)ZZFtICU_x8FdthN䴒]T7=Cp$ E&h6YJt]Z|ЉΩ:ɏW~#>vv f )f'7ᣂr=1h2[Fژ;x"u*:#|W"͕۫8TI9dRgN])E|&O f5̝挄a!h(yA0o?U-KnfȠӪ C($\'&O$-lړHp5b3%3p Lkvd6A$MpT&_,+S4R?Il^eE;i'Ac + N*R?>C,腨+AALFZD[Iiߑ%O/ vT S*(%mig§a;h%2׃RJyℤ.Zۙw Lc\ՁzFA3>C'cNO] tDZLHNL)`k3|IG 9)56n*Ph./F&L*A.1>_ VZ.֛Ӫ0ږFLsܸ W1 BqY,&8F\v0I*l\erbv?H+V~jhBZWu@)uFj1Zw|xDHT*Egl6zB̥!Fr+͆d5!#F*pf\j +Ui V+3id">ND##1BP +Q#ݖ5cs"yتU Q?Jj-&#19@,6uTM\1H&=!99,&ՠ5}M%2D2MM Ơ2t&@$TFeV'iRH"`e&͊-! q)ENy"_ << Y; 24WJxR ̘ɠQ@P1R0"=;t()œxnXvfTpt*͆<.J1(d ΗZЈg<nH:V2S+7Y2ֲ9NVbX@,ލ$&m'}8KK ^Fy|&\X*f3Ŀרz|5nj<4bE \IXeH*٩ìST\He|>I[|M#$D`B֟և*4^|qz~qqjT (aEcQ~U3Z5Sq@Hl0]+X3Վ a Da.tCwҚπ37n/tvquyxiɅ <(s IxOaQM2TZJ?6m^Dit b`.tٖ\4]8,26/%$P$ZChn^=PNHD $#_+Z)j/TkB6 ygϮ<]_8P>A }gŷY95<( *1rNC'6@;C>d̐s3c+#X P>yzfT+"t~4Y|_&VJMݥޖN<:76 ͓Z>{vk)i ;\| cTe%j !6><ج/Xf}W&J٪,&HHcIX9Q;Ekॵ? [ p$#>3:zOoAA0ﰾl$OE$bd㺢EXl6/u4332C>fh_޽xW6hD93[$"4.(f"*XJrqT75KV 6VʤOM3߾yאHq !k4.L(|뻛sop݇lgI࣠M8_<}]lvHu{e;Nmfyjy /n.Nm!BLad〰.MFTZO O?= Ӥv;K__~|yy같=>ኙ?-gۑ0Xj;i]xCՎ~~iaF B u,;?Cb.cq`~dd2G;A0p͝8Cq^Ϧp>~av*Ug-sT?_1?Mno=$X?W؅c08pKB]#fSڷ\kF/2$Z{I X? ZGPRLOzuf$$u*]!ܩS0<{""bFJˇ?RL)<{CKԓmT⢧*)tw80~!)=h Yo_).B1Se1}<hmn QJ;38|+/{&mb =M޷aQ;[i "C =77Nm{{P\wWj&8KۻSaP'õmyй" ݫ_ڍחjȕ;ݾӠt,s]" |p|G@@ЫMݫhPp F>:K>Mɬ/޼9XFEDTN)$\lK $w& 1$`ia&I Yήo޾rGJ />}ӛK YhPd2m݃`HˋYrG={qwsuv㷏ߝtk,Wh􎧟~W6EʤSH\қbj Y>N]ҀG&Bn3E`gϿ/J K4_ǧAL"j`+L38r} ׏C8RȠ,nQzݤ)uzj|_eC(4`+4$a4$ _`DZDɧtNc/8U` W?F'0bՅYP)jPAz%dcQsg>w^Zeg9VIȞyH rҺ4/nbm*Q?ߞAA˔\!S:[WB є׺gv(NBޤK`_ 6pR>BDۢHS0 ~YQˤ|n_m!KAHw=ec&8j9ef%R|ZݷϷfJlo58bI1V_=i.R&0"aO`V#iB|f\[W~yaUD? 2jo5pgɠs][1w /POIןfMF,Եw`tr82P]C}2Ijy~gzf }ٹͨt]ܵ5ޫ4D_z>鮾%$U}řQ').fL>`y(& B,LJzC56, TV+8$i3lMq+=u u]B|y\=tPl9ƕ9}͕}S'DJ70J0D%\ZJ!'zꪪdzzMw`Xr2j..m<L1 ;ehNCmΏv4T 1;홑--ׂ"Vx[IIe]c[:„*B>ymhթꊊҢi כěhG'մBS+J+jQ֪ؓ‚Š"S}B)7T_PXR^102לWR_YXW\?K B̠OGn1$6v<-.+$1 ?7+=9%%--+{ b!g }ޡ~^4OFie}8i{0?'##=33;+#-%>)-=##%%99%=}z"l WgDžφ7y5x&4:9y~ uԖfgxIɉI)i)))Y`fҎfKӞ swlxC#{AVpyYٙY9yE%# &x2'1*4gw[)"f1ə5Ov{z:!?8:9"Ӊx_>==CSkwD"Bm@ FY0 S_[ Dqs+G6(  99[_j.K\\_裏sTEǦfwNBtmt||ltx 3 `y4FnRイEFE%gdWIi1,ǔ'nP7vd<Ќq>? (88,<"2ILl8k_{ nP>I"c7s^33^{t|&^+H  ^1ccKuFw9^@ޫECAH rC~>P/]T"Oċˉ OJM΅Wyy9Yɉq1ёa.u2nw>HBy{1(gDTlBJfvAymsg8ѡœX@'Xw/{hu>@UrF!6zJsS}~|d̼^8;_"bSr;7tRg4 5b9*А+ in|͕n_>3Mʭ:M8^[!'Uɘm^8{%|ȄqMfNǻJ ᫨wҊsI.,skyY_WžU suf9es4/,.YY9y9nҢ-*Ngdž?LxW" ;YF^_T yfeo6Q_q<߃ǹz񽰛4B"*0jYYPV[W[_W[[Y7450S[^5R8ڴ(7v-&<#3W8`<39yxz~vnlkpri#qܔ5Tݙ$sյG[%BduK܍C,2q*{rr(R氛q˥ƒ5zvFm77>@vnB@vlFu!v';1c[]ӡD$ 4X'jGg:T~Gˇx#04e[bzr\(Ya#:V)R4D2L&ð[j!n$/!XP< wk5<4TT0jMf -L+wS U `2mfpJ?؅ )|؍P+hfr) aD:3hة n9"&HKl 76c33hcCD.8."1*RSۏjyv~2j.30D:W$ hAlw&9r g/kJICeFF}zR Se4gNtJv!xBV`-v(S& RkinksD.,"of$:H<[:A%bH"-+ZFA*A[F\Fê.q\낪PJ/;!~vfY74Gl#It6_"S.=f >N^JLjǎ# G1Xڌ xڴ`".ۍ':TNR%Q(5n;ϝ6BahH/',PO/άPN&yYv5}kL59-~!I  gPD'riJ/*N$x_Nf"bZf@vdY֊IP^;/@2N [0'lXOrѾN6S$+څQ1[|׆qvyun [E!.\p\6Nd6GD]%:oD'Rd>s^-C| =yt|l&f+ ^Vr[xtQ>׊ݺPas|1ŘټH՛$ 2$勗ww_^)Sgr jtk*R!"j;1Bp%wW&W6|7`/^~ݫS$YkSd5'+"QDBV=BݫH%:S]^ rcA؛Z ߼-]*w2o E=H(héYeyX|>Gޛ+J5!:7?zQC$Qř*|XIR1JK6xc#15(*r/_>rZtjभx$̖< ɘ;|⼼~kGXO魆aPmNZ*)NQD¥ذayPQSN3^KٛZU,FLvay@$1맷w7NA#!WLŢذȸn85Սz@uG>1nKCULp4!QhL(GF6*gXqI` @Q/ 5+]B[eZShTGF5ub`8.4U;|<={Vũ >}n}Ƭqɣe)PAȀZܰIH6 k[ljCwJw/zk E2վ@H]_{Q1[\KkHfm -ӋO?9n0TDZXc$G AH33F|>ʤє7>oo2ҡIbE[OH8Iwl8l#5NJ[سS_|~dNA.J$bNJ$/^Kk:1 h-&ӫs_ۧb2g93+"m07xR6G#|\pDnJHHiQ|>}e-azӠ87Fox $A䉄!zztGm"hY"-FД/g*g(LFAd<&xeGChMJ C`*ڜS@ | ^);K8~3VVqY!F/6֯,)+#˘Ɣ/3بᢒ]"zyLbrRwOoN08V3[81dE$ćMY$بqHrSAqHwne Gsۏ__$,F-M4׮1g*&)փapGemk{h"8x9W|y{J`9ʋW~͕GRT* w5U^ TId'!kR`7[KzX*8"r{ytmB:+)RLw.6ҁSx~ga6Es#8Iom2G+M~ۛws溊MWT-d2]U_s!'@ *{9*Hܾ{ZY§R)W}s0 055mRd =:E?`b "k5f9|xjpZyf^3rNK.rw],Ձi|PJY`u:&YO_|׿~~DT>}s4j FnTz,߁js:,Z1u}Vǻ8\7Ój|uESbt]?_]""oŅlYtRaoU&g=FQdcRgo>|SJ#tg~˻ۋs0X2fq-+wݓq+_䈏z*Kf0|!/_XB,Qfz7ϯϜgvV"ʫWx#T Ki>3fkKZp|9|>@uqKF'̷_\&F!Zk rfd@yx{T)+\DNf3N] +O)aCX!wTv!왒4MP5EE3T@tj EA[$(`wmHKYiu^R-YЄ: 9ܐW8&rh?tb4Nau2X̣lMՔU ٢=*RL' FgwнG(˥̝]Pձ¦)<ݙ3{fJID[,+(*mRUR3322j1\DSARThf՟Z/88<6{bkˋ whfBAqi(?Q=&{H} G&>7=27829 ؝žʜ'aA^<_'>yxrS;"$srtwp|U4Dd^o"s;$<26%ihn}?xY͕鞺nB57$13t|zjbbrll$75!&2,}GGn~UrqwA.Ĕb***,LMw^{`{ \y2" p!~jf 0|ϟyP{N;{Hbڣa'/N5ǚ=sT?tmrkIˆCC#Zl I\<_sz8֤>~͇y$a."cS2or2g|<:inwmv^qeCKPo[(tˌ-n p-FZHDTlrVQM6@q><ڞn)/L62>_Ҡ )i-U3;vzZou*fƚK3=^掠zO>@]$4Ok%(ĵF&d7N#r7XYZR\~Vlz9y$%:̣v/{Z>2V=LLGeQVF4+(((vfFFNY.S,U8 `qRk6y6LY|={ S;pbrHw[ғ{:q Xȃ \p,vfՊSUI5B4YwPºv:wvi)che51$:tZxo WR]^8.sZxjǮLJZHuf;89ll+,+VP)a?=;uzV$5n܈ ψIEuMKX*aۜggvfL26 ZmEf;=?ȬJ2;d6N+2fаBOJf%a0p؝WNWR-fVB!;b1: y4?Ha/3i[Tcґ9BiSe)كX~zq`VAdh<\@H~gvI/Aw%`&h~T_{Z|BZIIkřdZ%Cb RhAhŹlT7*+)&~GC|3EGOqtynr%sFg0B5H坂Z1n8'>j^h,TƺʇTT{F|F'Z Љ& -BMedJQ`q@ xWvsj\z݁Ҁ͌X?xG ̩%hu{ܓFcM@#vtLVi!edª7%.V'gM¹1 4SU&dvc%Zto8?P1t ,b;;;H"S4pŠS)„ B\XtdʌMk`6 ZB#6614**^19w@T)cv%wL'.|'l`HBˮRW?Mj zZ)pcWH2ุPB@\JI,Ҩ]VFfČ\ pLzL*1' ;[xJb .XPotB6f01}i& Fv-`1RQMBJ6]Ti˫3 ">=>G {H4#J]@B#x<6ć&w!줢i@͎+I -y ,  M L^>FJ\$ (K)32nkJ=7[{xPM7.><5erEDp2J%0h (nB&Qo:-ZRIEfdUl rT;rrad"ۥ4ʃr!s%OܹKACiYCDҋ]^ZZEH&f(4Ȃh_u#7Ӟ&Woq>ۗN#teLY,6FƣPFR3ܖ5[RJNZ_]]pl.ND=G^ޛX/J< WZU2ȋ84 IQGi&|$o+GǷjUݫWWf4L1Bw3M4:4fW"\M'5Dm/t@2I]'hQЍS1GW"RU_{֪|]p z˷ʥP S[IL;jW"kȘ#bח׊ÆPBcKeғ,/77f'FVv7CW޼}ݛg`*e9ОSHDr;\xX>An̷>718110II/^ۻ d)їSHTF3V-_f+^8si*xcOnfz?9ԪE 9;ZNQ_m0}R*8C-`x*ZC~a3iURBG(I)) |հ *ODPܫc*`fKcVбbP1Opӧ{5P47+FgM 6@ X#pub9v{M.V}եb4 4al)SlU9Uq:qPtRg0i$6g+vD:O_>ݞZSSqC+,x?2&J.' ZPgSؼ:>q/nzت5JvnE? NK8N@vjw,J,7>s}}f>oW>ʬը \G6p"H%\Bg#Sȡwz58Z\mɩlN@F|0߽2.I0)4Qȏ?( #㓆b{| -&|Jwo?z|fB6,n H,s03܅ E_1̿.bYN{` T" +Dؕ >#vbZmc;M|qy}+᧺y} NR*inx2[k;6?b1`{ .RF%8 M\[R_ɜ٨eL@KeѰƳ/| hԦ |i/-DCkȐA8\0U)"O*$# JS' xQ@N uƷ,Jm*=ibW|O izɓakѕ[|}lt? |Pk<E)tv\"wqKb+3h!!KZp,GH &Qn5DrsQ7#lVC| nC3(| n|.P9Rg0۝b7"E'c LRXblQגQq.uʓyZUjŧ*x{ZAm)]gpĔ`TAwN 0eL"Sj}C&#*NJ^*|-(E:AU維9EԃNN_ 4F֧&uZj)*œRB_\aROpû>I4PifZ_簙m޷di$pUA6%^t8~S46s2]]4q8l]__ꘘ5Wϗ^~ug1D<^V>%Qx'~=7L< SZ9 &G~q^ݙ/}A@!H<}0PSڱC&Q%针м"ͣ,P{?~ ~?H`fG4$ߟ Oy&#w BR.:>o1 __  2nyИ[D"DGrW 1r\(,CZb6y~/_nb,_o~fJ:BH\koۡө"ZZlDZ,&%_~_>^iE E={79>a5 ^{Q1f"CWY 2XƐ pNyo/o !Gkl/~_~x:sz+0L WOkАá&yeWϞ>qw_?<_]VK+熓\$z@qiP_gs]?{ N՛*J`H5Ƌ^\8Vvz~4(y豦E+"{5F;EVݤ3X7o׿oS8T,S; fйp3ZmY'tt?8:glCh]zz}wwis._~_E)fS Bc}ϯCg͙I-8nۥq4C.A\+gOL?ΪhwbӨbvw!Y|1e"'_s'/8`&q~vwsjs^<{;F.cB|?suu<8 f&aAkwSN:}4/nFwAyL9w ho?_,r!Ny|aуeU t:.|PI Yճۗ~eSH%Dc?/_=}zsfHH3l%7a]>TYԴN`?{;0?Ω$~ËXZ5J6>3زys)טϯnnn^Ӎ^CwKP`TJ8Đ{{{a7ܼgLWz;<_>{Jl'5<* v)`` T侌_zH0KeȁQSn@ޮ"HrۗgS h"pEnE5Y< >AO'\@EN.IE_&8^^ w6hSIxTJe^I!Va_}'Pm;-Z:"|(-@: VOTI??XW1 6~eze0PPT="JVRrvÉt29^W_8E֛SÒ*BjgYqIeS \&vnTT_]Y~aai*S\nLy)4?X[ZPR^U?8؜ϪXZn(/((wwX@`hDBzY"dQk#]ݽCӠSqT63Qvw~-U1$Þ ( Lg)õxN_ԵF- ϵp|X+.*ɓx_|ll\+3$8F`#/ȣ'Wp>5oJl~#twnP7~x9?c斸zn`]n󅀯 餹{D|U.W7 @?%$_TTTP$+. "rS.AE&e6vNNu7זg&=pq>܊`{N⨸= D\:^]1Rww$7Bg@*bRk)j6!&WHrJIeYO¼$ 9/$e.l"j{ynrlxwxrAjBJ_eV|d!{2,|֡|F&9TUV\_\Q߷FpȄxj7Nm=0[LY:%v3:'=+LU]3$MCLq>4uڰH39殡榖ŭc؜l.LMjYe۝`oü*ҍDevJ ̵씌U9YYD"R.`s -v06$E|) >]j#%%$N흍Mʖ(ͪ!k33eT 1s|w!O ǰ-'%y$[~ tT43ͨ`$T NLebXO;ǝ1&٪KK*EMs8 ytsBdCf2Ԥ%1[m{{kkE`vv]jjAfXեӬW&@ djt&k)-tag*B|ކӝUS^LSCeWh#؞*D4*%VsXf-5%tkP&Jb=rk{b)=a2ٝNH@)4I-bCfSSֹv=f0?mиIQ9[)8q dTriTTmӆy~qu۬f-o&%iC`WteY-OHpt"ݬ$-0T ~y Y+Qy |6Xݱ'K!M|> Y#D'3nъtt8'Յf3ʉ =J}}kCf|yrF'}uyM\Y*+Hnw_\l&ّXG0k5602clW&Umt(gYJI-q X3Y)5^X.MH.Z Uq^T: 4DEeRxjwXßV&f I\DL漸9?=Ld 7.rWnF dE\ӽy=Tw [lg(vPV>):W7]iҪ.Q<_أ'ZNEbLt8/ABLor)tm?w0'S̘e13bF33ɂMU^1@bpR.U:3ҫRmx-RLqqv|-"G.aKjaiuum ԟKRB ^JUfPL*fc4`kH7ᴀ.Ȧh]]X_1^Rbtϒ|D "XeZX1kl\~iK|Ͷ7ވi(rqi}k}}ɠVI%2X tt Lji ^3p`؆Uh[]nzW:Z8Fモ_1nn_W!H$XXJB"hvLjhϡVMxCt?xJj J$zusg )E)5RDn$&? j(8y3@? Dbh.kZY3%T.QQSSs(,zvlzE L VnY!t_Bbm|c_sas// k( ]HĈ48?33b0C r1|' j-w|HѬRwk+ L>1yڡ.s}+LfO0Nս]D%̣0D"ENXaHABAnـl87ub _)D&b0Ӹ׆$/k(0k:aùs|BwƸ8=5uC^5#}mۮfh:-|W/C,\7."OP 8"nWTT+Aq-trřyvnCʸ7f2 BCCg'r{ޱtSMJz2v+[\EځH.dep_Z|;S1SEFPT9 -O _@:^UT6uM;i-Dzp|tz~z 1^Pޔ;Ô('vgu3j.-nsDbi^35 w.7WFݼX9}0!u @g[ZCM Q5u<#a'Fd)UN˞ɕ`r^!XHIGvvrzv Z\H*\rzw+ Zgt8|\ӯ)I#ݎ0ͳ㽭%ebUl9F,L}ft_F)@UZӨčך^ńyBiwZr5Cq :f܅Q|3 }yzǸ>uݯz(Rgh[qxzz ?VB>WWE#Y`V+ŗFZ^g`Cr*&*x6Ē^WnĴ EyD*(L+D&!MzGm܁ flFGq`(c^Ĵs,w npZFE5r|HپbPB!FӞ0x:RRekzueyYAZNwL}xɢDЛz!>Tm*8]ݽeD UK"x`wES G/HI9I7eIz JJ шgjޞBMLcSGbzw _ BsɳE:{B#E4yswٍFK!k-$Ǘ-ЄfF32UrV4 =g@,40JjFP[b*}wrFXTBwVR 'B''aFPVrIe=4o0k<4L'>{OʯCTs%*Ӓˀxy]vΰsNR65!ؔ:W+Pv5'฼a&;(rVE7$V-R8vPE:ՒU2FI~QDRֺE TjkyLj &GƮx{1}l87]_ڳQFxc' $VKx,:~bf$5#/%ҠS݌^zzYl^mx_k4EFJ$Rs=<Kb[{zk'p$ UMdT]ZW]}mx `7WI= ?5XurnɺmEXd27evF KgtgqRHDͣ Rsk{f$2wV׬Zʶb7ãǃ"uvfrtQڣN,7}%ol֥͢X<,bB4۸{|[Dž$ 5Yr#s# a%m$"z};( $/mp BϏNxgFX`#y|i,)~rlnNVt%EF c @AiJE2ᛏ>\{w,!/[.ޟnPI$W';S" ^1] .bq3/F ՛6|wX%Eb>8>p"N7$kk8fЉX\C9D5,oln?ojE94Stӧϟ?=X]ZR:DgW:5x܉%p漪 yek/_>y`I3b//VjQK\l{nDc tB6=i*fQ[Wwv|Uñ%7_dws}muckcE;*gHd*e:[m}M%1=EU(B{xŲ~puB. 7O *߿9^].omb-nLLe4<|nThdPq,G7~ۻ 9My°ǏOV!Ŧ,^=?aISeGֲqptwo_/duE#2?lk}}sowͨDXe=$Se3Z5\7XTVP_>:|j4 'MP抈=NRؼ{N3'h ەS<@ڥ㣣ӷ@B>ZT ? 蔦}p~rcsIp+S*0x `~IE^鯱p&<8xs~/_?Z7er8??;;Y5%ROX)8ڕW| 4ɡ F`9}@5:XǷo.j9U_8A׮;*xv+'t%ס*e͇O_}:^R l/Ro/N:۔P3Ɍ󆹴nT_?<5MGub¸_ߝl-kbJߣ>Sz!"4ˍR<՘$Ňvub>cGg߿8>ڂ[^vMޑw쁼9\cc.WwO߾;Zoh{scmuidsP -X}9/A652͕(P)h^88;YWyk+*H*2bR+Ea kD^7,0˓R[P  δ~paq1n[ &^VlRm #TƁ^XdYJtz+ ^Z3+ys-8nso /`ƚrbƹv?9!zKj&2S+,')V^ŝ~(//THgPÍ/cSf8v]AJ mȋKxT>8#bdF* PmUObr@R:CwN0ξLy$7cxgI)م#s82 wG7?k'8l37P$$\sLCrI)=HfǪ22WoO(l~]qf|LlBV$;WxÁU9~s7Y{$ QsEYIII ^Uȉ{^\T83%!6661ͦ$^wSç#6:NTn'f俨j@臷cí՗.~ "wB6at"jjeQqiyMS{4F>{rc̅!2 eEuMMuUuUEEIAnZBL7A*'Dfs;࿠CZDttL\`  wk6p?9ҮrwڃݽwMkzCE?8_@5(Qs%`~kHzd< aP&cw):B`8-ڥé]k܅ڃݹC!B6<\_s(>N|-$<Ĥ(ݻs˥y^IW'fLNoGn{UkKkK3}֪wn@!Kʁ=ى/'/T,I~T36иpy: =Xp1wjRl۽SxTVi2L@+D,ADlсw%v\T#!L'dʇ; cJ.6(+)zQTm͒HYQ|1\vn/T .0'- 11qP3 E |F̋ Jroգ舨h0BgrJjJRLDDx\N8O)c 'vu=vmImiBW~YAqE]ScŋYĬ$4޶'Řy^ufJx_иկ^7ֽ|Ǣ'K²Z*pE]?w͌mʀ}1dD`^gEՌ(TfUs%Q@@qBP`LѤpIXlr2U'N\͜҂̼L ήaʵpFG)\\1it`pN7s@~puXWN}$5UfADc42.] BF&=UbXe{;ꎯ]|$-jԺyd.>AfӳXWHUFulkzqԖLc\;}o.vTk]YZY5AI'>YbL3/X&ZJ( Hh ֌~L`q}9}oDUTh]Y^Y5kCLZV@lVD6 w}\ +9!!O2d!VfN+шD:rzybjrfI5_p8$/rW~S7@ %P(Y-VxV$ /hѕ7}. Nz+W1^4AEn`{IVTZR2?; TAZv׍*L\bCbHʄߖᦾ:ńG勠ڸw|e(UjF0c3cC3D@ЂᬲllY0P( #"kB'?cTHYZ=28>[V-W6v5r )b_'tꘛW/[s7G( z68Ó \"+$< JTj0>! jQk*\>e敤v@ty%^W5RVD"=12:e5y٥}3C:R0Aė ^ksSӋX4j~|l zreu/l7Z#c[n:f''[mC'18<R4-喏}6/JIELT@ON7`:t j~aB~blx _};-I A R'wrzHy.i%a|ѸGII2q3S33 ;濲kW˥ %ļ ]xY}ho J+:JF /IuFfل!&nq7g?Ij€L}+kJNj^Y3Г_S0FaY)A|mI3Y%9U'Od6=Dģ⹼tb?GL!6/z%_T735.UPf&PG`2m?%d7ѹ|\Zsܲ&F4 )<;EV,/䈀Yikax&e hQԴ"2ʥΎ.V FG2xO@ZЂecgӉT)r.yo4bbkzL j_D ז_ʔ_q`OU7Vq*Mꛠ+M:9QJq@/FrBω.`e_3f29GWhQ& %=s͆/BO$@b"t׶6*ߜU4Kf14jH б uՠN5J3FKÌb3[P!I1~P ( f2Q`}TVU";;850ќC3ȯ9%|ΓQuF)k9in{`t"3AtkW!9HΣ:w1${k\mЊy"?%B&riٝ<=]h84 ʔi"'ˍjAf)q zֺF0IC}yED,՟{͆?KZD/t=JywxbfjGe|Ū" 9efAiR)gBNqixM1n_)/MʬzHT#2읟oufrgљ.w:axn~qj~?@d-VGyx\p^EŢĴq"c)T:'2pɼuz#NNV|xozla-7xJ !oScq؎HPt2 r|'+r B:ߓX@&Ri9PΩy-41p~]Z JT"2}id" *ầ]~ LF Z~d.}뇋Z~x_|!Tfr>Q/` <Yl׍ST~qQ?^?>;7{50맷G;V<(m!<h#X7^\Ƿ'&ˢaH[~x2bMF#A+nLCo"0SE$Bk<~Ż~K,Qf_/߿{{qi(p~F/ιku=dS8fiG04U  {_zL]r,&yy <|nǿ&]mLm86r'rBv;Y%E#uxk8뾯^^^ RM~iϟ|C -ѱ_/ǯ`n/RBeBn?Er꥟ꭘ:"*.5N ט֏߼'0gmc{,o޿y{qfܖ[6cڇC{ϣ D<I]PE.1P TO0Ύvs0.'X, D%y# Ý-O~9FTݝu0+>~:_Qx6 W0d{scssݬU  ' f'3"+Pgq]KiY䈕>ZefRDlNJk"3VU͝_@0WI+*5ӷJ>my+5~pjtNzJϠܘrD\׵p֞,!R5(d*ɦ^ʚyɸ7k  u?+#{$;0s \EVie9th!FZ.mQ|NAK]h}P4#N&ug*܉o3g+"3k0TP7ALgZZ6(S"uuI+|7[R+~څ%4覬Ăy2[(g*2H_id6xUф瓚SD\9/U|'/rObS6`)L8v2O qig}Dd)] DFm_5ɢWe'$ִt-bgŽs3-UEyIq SLXeCq\;`Wމy|[IvRRJz޳ڦqa *k*ʞ'%f`Įqܲq՝{r|<=nFd3_INHLL IJMNNI-\0'kr"mWnm|ߍE*u4zᡡ!IYϪ{Ŷ} 9k/('e"r+14*j /+559!:22*..)-Yi}8ECg߿Y77Z3ǵ}$*0?eQQqUmk"$tgD?sG$|n T6:8,jG Ș1wn@Y~%Gg[NlQ)ںF'A)p7mޡ\ cθE B(0,*.5;*ˊe$Fݿ{)xBk7o߹ 鵰woݺf߿%ɓy4߸u{AzΝ[n޼YK.'B.5w;fRsK˯]^kI߿~ї!./)5]_z8N^hrIBr_v}4SuyM4/ܮ>r#لlZpMZ+n߄nv8+tH#^yaXt"U[Z_5Ԕ>JOLooF9536g W D*/Jeb!CzKs#s9,HH-'<$rVU‹Q!G$Ml.ʈ sܓ3edw^Nѥ*9mk%%_TcHd|PUVt-oo72zŅT.(;y+0yPfͶ=NaR;nYjRj"C5Jژ=V{:6kw#te&9"7!*""bIIiia1i9\x2.,xEC~8/7'qAaQeCkgk}ؐqIIl}vۡHF'lͰ=t7\[\WVPT\V1R$lwyzd@pZ#ZcM@Oɬ]p^ e" U a0}}DP:Ї#<W >/!ٝYY4^aN"iabjjAW\``F;ͤ'd^sІѱw0J 7/2(v-[FB fdN7 p6=4 [wd]0;yIz^qљՆ դsd,D/ F(AfJ(ݏ*z #7Az [yޙK-֕UAY <Hjyiyj62Xaø@o s.'̍ޝl.VV!4WɄl"HeeJqi}ee YܙjHyB;#{_+f9RhĹl:9J"1X|Z A+*qfʢ-.鶯CڱL# Foo-/S Y<"bKPgj})ϖF"ke7.;؅dx(20!Qiex EJ1@V@ju}kkks}li !YL7?˙+FTF![(yJψV77֠:KX48 @G~r'26[|䏈ZclmllVk!^jk[ۻ+fPI͉TY o*h_}n6QԜԠg|޸777VAhHFź 42LIؗ$3 tAaaY98:؂*iV3JCQ9b, `[VwRcۄv 'EFL=QOx0'Vn@QeXQ"G,MEմfҩ Q'uf>}f;3O"PZpi6"]e]>%ȄN@p, 2>06ZDХ)E)}+!O24w,ЗفLLMMQu#i|ģ_ﭤvd.-C*vv~ U3 ?02:3g%WP U2~gT Czɘjun*X흝=QpΝ G%AN -D $r97}N% !EpOC";ڛ5\g%UN8NbC?đ9fңB9ݩJ*^,'ō#DG7"rvvzv ml~kd׮) )S`51{wt'=yTP3Bsܴ#Dl`.D욨kWVBа{c-p$ddphƽ;O=~7OO6LTDc 7q-G>򠆞1BޜrloUI}ciqCSy٫)oP{''K 23W%#ocy rKD)/"xFGZ*;#5.7Ux(u 0ҟuwB9UD#â̍1?da"xSM u * B*9dzRXJn@?'&c M5"šAlC-5Dķlb} H6{NJ)h. ǕtrEѫN'wP$dE7\WZ`%Y_^Q>򒭵=l0\Ȗ#<|ClSB ؽg XU@mYh[)w@]ԖՍm'f։ib5J3_Y8*B}V$~6LD/ZP91fjZ`kz\*f7<]O䰉ͱ}4!<%4cD*Zp8u2f`qH 4Ӣ㻶ZLCO{;P)Y_?pR-r :?]w ͦ)RX(_{ `y}<šb[bFkfiw9eT :7Ћ(5j)w:6D_k7djC"b D@iVjENMc )I/IdV/_X5Zlˊ)h@-3D:K 9GI%dO3x*)ryhI|Nuпk3%aW'AnyZ4I"p1~NE;94j53ub]J2X v)T&IE ?9:151Pъ&S <4EcGնMM6Zo1Ʉ|N05&Q-%L"&Ƨ;3TP'cCP9=mdA-`(l!"o,-[5XnR8 hw7t2!htgeVZ<O%w@'y̒qXl~ⳎNCH|x TᲘ7X2難%)M'c0d2 29O"ѵQv|~}7EJb L_f9xtE!o-K\žAj<,fD<]BXT:~:Ƒktewo?}~'Q|o_?|˻VG'ByzJ >n:E!↟?aK5zŇ/| I4Oqk߾~zwvrb1T2ˬVU_.zOQ eOziBwxvgk}YM8rAwo.NvSIɂ>5Yj5&]5re|?9)%<-o\|_˧]I)9`uf:ky4 9 G2}?B7EɵK{ |d 4toY( Sap(cֈgp:[Aoo7U.& d*_u5JF [,Pڕn끏XDn} 4Y${pi*dLCR(r`nЅF|bF7Y(WV߀LWb2;NJdJO7{&L~fg߻d}.yKZ? wC΍,fI :y`||=[I0C?_?\+%\TulJ^@x~A.[x6"2(+^\ Fi LPoN/ޜ52;;`J@\~v/Нbּu3ݎ^"`SgYBzLJí%0E1h M}\ТyTalt6\T޷ִV2/:w߬kDl+ĄO}>YEl1T+- /A񦟸Ýű?,g$6Uȕ P׏.NVDNnR5Nl"Ӑ|֚%ޤAC,T>77Q$5$sN)Ko?S杸YI\\j~e >EI, 2f0+.*>3U<ˆ~bq &c2=.1)ox%ө=/_Idd_S9.{8壘ޓKfD~;*MOHH~V\^TRTX]$+)>69<`˥dlഺ*Z8?7=.$42.%3= kyk"==;!QK5Ob-O2c%dxhHXXXHxxT\r^Q ͚kΏ~x`?#U6p (^ 13=u%Or3"#bR3[fHlb狤>?ّk717 2s MgFzZk_4(Ly(%M?o.堈jv} J/y50Y h,K$,LtT>Mxp 2s4o0kupeqم&&GFGFjcC߾Lj+S^_߼ 8"6)=ًҗ/ʊ S"޽5h龨z8~ _{޾yjkMvj9P^6̛7oݼsJ٥׮%3z-!%8ߝbjWhgDO;u{o.א L]6oU(5m"2v?7CA50_$G$=x;:RY c*2RPJd4\#ā݊*՘¶H$Q{ۆQ L!xdc{;2otfV͢|I8<&$#ҘG#NN\\7#63L&Z[V5onbtkߝz hH %Y+aSٙE×i 6#Bn H,@\UkaATAo\ D X'&Yjz㰇q/1%fwy)a{+fAeu>d)mڒYX ""2Ѳb 4ܱ03:rȸ?\d9ޕl!V!68<`Rh]_[^Z@U.xW)-Y|]>#^]^[u J09")TF:VNr+A1->_s2f-:00RpbEMxD \X3.mnBl@ʣSI:tyMontH>wڈZ@ܓB[V6֗A% ,,@,+k[{;V K$,8? ](͗DvGG{[[VJ#8"1N뛻{{{;^}QZlbw>x<גkF7jbY;:Xrǂdo5ZJLhJzqRDVs:_ z> ^!<CFA** vY7N.Ύ6WW 3PGXLݣ%hX3' QO_v&ĖZT0o6c9P R@@1R5Fd]=8X2@Г0 VMkLc 3z0-(,[,}Z}~r fW׬f=E@5:j1tYj u݈r 𚗫^^ԌȠO((@}(yYRJHXC]=huex U|px{AbmMAHr;G9U5m՛p!8I0eJ5o~t|pYQ#fġX0低 *g DPKm:>sr]*26F*Y@=x=*I<.seTd@;<Y^zT-UyA! 5n±n#w* 373gBXPg4[Vw ZJ)\Ts˱z#}1/":tTbT_xoW?(Zd'2[)Nc6Bw JjYPՅA/͵ 6!F0105KtzW8Sh,LJp9/qkGgg{+_:z':lj?E#6꺧_Z#{i"!vvdseusݦF'zGlk iGmoVQ⟇NC3X i+rʦf:LZ+<AHڸluA:;ۚ&q ]7^/O(9]i#t!"wTSUnk' 3}?<+ jUȋEhP\B.ެrhb72yIM$WWoKIx݊oHpOB"R ܈G~u鋢'.T5f!߯xgcLv=ӡ]{ ?-{\z Hlc:FUIzrI?lAKbCu>Ã0Dlg=*ld9CA5F2)!ٵ6|'tG/p%RŽo1Ry'RE55xǬQ&!">6+Nt-KEk(pBD,x릑+~^X9G7"ӳMR>Sn⛅ JSx9'bs";k^576h9;==^HE<9ב1?7D r}h+S;sɎ鉎AKutvBk" 0l879&x\.F̠Xy*q2F)hۚ" 0bDKI!@׫k+4+"Nk@Vo xq0qbdʼ+C(5!e,fmrZŝHtѝZ X1)" .4#n54:Ꜽ)Xӏ7 up`5j`قJD6sIb9,wrV_Wi s4۶0x@F[P 1uF R탓;T_V Zo8ec6άWBT؛r2N[' 9<^__[4rA[Umk+f! 76`!Pb5ڕ=|_RdJd3I s[hSI'ӥju:iыY|ymj2P0m!e4D]~9^gL+?me^gH'E)[3*ز)&Bǭ9]^09uoC2Q.d)@aď)07MX@>j9gIp-Z,z%n9ĆaRo29ÿG׈9jP:C"WVBLJ ' ӏ>clbg|B'M(%Yj aTJ&dbǦ*|\TMdB;]vh,pfdZk/3dUmZ?tqGZJ-?fנyU8eYILJ 5+ -P1h\! H]a)Bb}$urޓYe"2&R_?sI:KE҅R AEUh…`y,2%1_`rx sISdEh/H,{^6/E"gN0/{3U{ΉW+q=9yd/ͅU(ˆ4M s4Ɓ1u45>%YQA=G3p uqqx*W.͡]DWK9d@pcűMx [?ѿΓ3XLwVX~,BU1҇S:gE%b1sh"Lw&<'3_<4ÏEՎGA v7\ H$IY; H$ UjbQ?C58f;ɍNI E CM.HkVfw ,ZqP<"n,Ʌ2?C#L2 >M'ظp?wn( mLͨjp “hwwquULrb_",*fa|PE25†o'qӔW3fyp>3hZ)!2oY77L*Zā ~O Xy6|NyULMjvM,I4)K۠WK\~cռfAsxkHdՒ@2'z{8|$xlʜ|_>͖(eRlbӧ #:x|oei`'P4ieB,OR!+/>}~kbHv}z{4l]|'lfCxB1")dbkZ0ĵ^9|qɇ>g)e BdRܸ˗,hҕ_?Y?pQ(21bsI2>2؎9To7RIhִl2߾~89ђ:CSm_?=܂:ɨVMiųdsN`~p=<-K['o?A _~8V8z߾|۳ý%FԦ,R뗸j <0n}*f߿}|oI^_lُ?{~ J;8 GcO`BfTA,레e`>!am^FMr'$| F5;H3:.+v[7xW7L,ԤW̲E2x/?~_ Ʒ;FTB2'>=ބМ|TtTs[8"C6Ǐ`1TkyKɦ6VPwl s&ؤ'U \D2쿅f)I#OR2ǟ>߾_1jHJ%qp.5:k6:"u˻g>ӡE!Hȕ滿}tu$P^d<ۗqseA؛Q6޲qx}|A 4@~p~YTP;h藹nET`X/"1E(:8>><<٪N&Pg{ (uNVLԓ7d%v`nI>wӻ椐'LDgO_ni|&i"2ʺE&c*|+4\T8śx]緡Ă޸~Qg&;ԹzݟO6Ff?_5#TDTO[ӽoԓCIB%8@2|cP}Ma=b˪תt~aI dvg-7aX, J*J!`;xa뭷?Yϔ*P-҆'.&r^W~v?(g(*`!=%'iv/yFOix>#6RU4GF=+nV6˘,x6cyBx`X99ZY7G6C_JY.:o?4lnQ(ly\DN"OI:u}cYP^fj*e`%-6fF$T-1C.Ďy9DקG%4vi|B6M1i~.A 1|Ilxk`:s ׎܊.d{bTuMb!և(`M}]ҎUrK'aG[_f'F?d&Kco|劋{rqvFdA?Srچ"NGeĒTpG]aZ\LlvՓmvnzn 1c`ZYޒU݃-/Rӊ_uv5$dW QYa7}<&Z$a Sٓԧ5x>i81ຏS2\;BR}^D~ 5ȃuϲRcbccb#""Lٌ{6쪇σUW_B|V`Rq @7We'EGFD&f7L`m. .Վ b޸V>H=me嵯Px*mx|IM͡ |o?HyZ52FcX b3/sBqH$qq1ml܍3ֵu  7UA {|<==d{݀Ԝ%UY^fRLxUvs^P~02""lX_'_]j+㾾ׯCZΝܾuל?79%zkr:AݜA?~;+W]?h%6hKtgq9F_;F}\;Ey86XcJw;o^9M6A_RPG"7lQo{1Ĩ8c#B`O^M*ICZNByk{񲪮UKƺg9n]w y8力ve߸{dOe ""txO4 {׮©~*'&ߙ>/AUO7Ӂ މh5ٖ'`ɎZ X [f8J9m*+5GcIq!U;/ϵ;hQM*ʈi,%&geffg%EDD22˔!?\3+H]#2 ^=yeCg_OsٓЄaANnqםvm-78[H~ModHyV>8>:PYV^0x|6q,#20(fNaOs9bstĶͨqUK M)D3% ) pERɠUCŸZ<.HO/gs;X<%R,.̓lܓb6r`QB@@j#htd|NkHOgV|o%֡5&fw^X`z8++KFA-.\XcѨS 1RWFVWNvpi!:V [uh֑ 5d^YZ J1Ia(,Q%AשЇ/1j3;79Svˎy} jYZ)">B *I*QW-")Ⴐ1/Qr33/ۙˁs#|Fcve=! o7*G%<\0/A3%8dNĽD)L֬y$^pdyimkww h)FaĠOڲIRsBeL@P|ۉƹ t x2=!rμpdPe| ְ j6K%BU%Vt6q;ɭd` <$o*Qi YR8$+u楍=Qթ e uTxIK2}/Y(犣ҺJgC}ý- u;8i6ꕼ)rK}h6 YORŃ:Z ݃=HY7aPΘT12ezyz߈'x)ehJkѱw|r|lcDCYЁb?>9:j^DT:2mk~վ>x4WM?VÓݭe(*.c,0cFVŌ6zk6!3 6a+2S;GoޜZ Ja DPd6NG J&R棔vC" >"ш@=P8͓kʱyp#B!)[XBwAG쬙u5W*TOCVnY+"&tR hy Ǜsu0חt*1sfAgQȘY6NNmBx5U?\SCbDn]@o 8׭:0ڋf 5,ӓUJ.E\:1) S*~xf4ʈn2@jhE{&I\(#eidwl rPNGqU7}VrG5] ĈTi<8?;MCĬAËtLyɲyx| "JAlbgfhJؖ~8}>W#C<@,M'o.Ύ`%Q'tvwM|趪3Yk'k`R11c JztY~CEbH?..A?UU˜mlFAh5m1ZO6 :P# d ޶*i݌^)Zė#[ۀJ!~56ʺiMVӿk] I%C̫h/B.dq^w77b4r1]2uyŮ&cNv4wt5\k(=>C}^ް\OB_lk]##W*Aێ~`S_Ɔ1e&㭐ݭMC(/)$N?u3+M~ zKrCjjk_ 1+!h)^W.5;*c+Mڍ)^yIrf5X;^2B C]og:\wH+([+tҐ\:q2782ܓfP*sqoZ';\[ _? B1u 5OAaY#r\ZK,St+Wg/^`#Rq _m婨exO~]ZXT][VPھpK) W b|6!+F2oA|-[&W s2fn 啍j^O3| 91f&- y|&@)R9: @Fz8~ē\ ةM>>A7V?JSyhʀLB aΠnpc٠ #-xPͨ]N@`7DTihNȻǍ>DF *s|k gڛ)~#ŋͽ#f82,> . HR 1s,ӽN KZ6u46ɝ̿׮xuaKZPF88VgPHa{b) `-{hZ:0$~wkqD,z<:EʳY:v yx`ضf[(B!BaƝ742zwGwdzuA&RX|"ė7⡗u3DSN~E(tp YLjGIǏ/NO|xfL}~~2VD9)D*{ ތ$l~4<e 8HDROҍw>9Z:y˛%ڇ,(uHhdw"9=n(z"n@iVAo޺ _>oz˷o/>}v|Ѹj:k0ラ3 b}KXc\m]|珟||a C_loޞlnX_R[3IxfyK_|8\2hәzxj#>WҤJOP?|aA}g(ĬI,Gfw{zdń'd.<㧄uVt-nN룊$Jyu͗?~}b|$)V[vAזo-I}DA\˸D%hM̌Bq:e?hK 8#OR-TEV!sŸL3y]FK jv 2I/YڼV7|oLE odo۪:,eWpqO*Fx3$"/(M˛ۻ[`>/>6?'6>:~)C][˦OLJ>c:պ~˛ -T_A3q۟Vֵ%Z[%t=]ȕ)uZIә6|o ؔvW,SlˤҘ?JBmBD [ź׍))8$+jx[>I2?4|޲^&J=#4FkI%w'R,老1!9CT\*Wȡ/ﷴbyy/Ӭ]|&DjR4{(K!opAI^? 4H0֎}8ZVIcM|imA dBJςC'I/1Lqd6ߣU:4U[^.J!ͦ/? +_Εt<ڎ^^#YY (<-TZNLn-[{[R#f2jQ7~IphzZ<\lHHx3I`B} $@Dc* %^-qIcZI܉@" DZ)O L>7b)gui;i(><]l,ȝ;bf Ɔ\{MbLU&?@V3PM3)y.5/ ~qMq]`ϵY&8-66%E}KP{iZ|fiSgow[]㴘Q*w&= 풨ڽ~,_ 񵂂GOg%'Ĥ֍ľ̙,vx^8M|<' OR3G.-춟3q65(w+ $čw=JO1i9+ZH4qQk~^n:W57r)OK(itD'*k{FQ$07X8.访 olt5o=KzR?%c( zaz('6u?/mǐcfڝiEm]= 2"u#>rNtߺEQQqыgyYqѡAl`tA/;Ӯ< #*""<<832s#?@Zuy[wܽcn_'~67'j59o??P^kv7; 㒌ulY9p9 ?~w?'AxCGR7n޺}ށ֡.̖K9EjW_%THp0]6fJz_ |5\kP~bqM[CcTT64456W,~tuz$;Gsdq' ?"5*OqnMNPBAIVIّꊗ/+!͗+x>N=v~^`M}WоjE]ϲScע Q:SJhY}ST]#1)eq`OHͶŦrpir 7pzuli@xyIq'EM}}ݯ򒣂CK8Z9=9c{`!w?򨝬q BT u.}=&6q(-2(8f^N$5Q^boQkCC-$2%$*ѨS }e#{Y5!큣ݮra kK[edytPӖڴl5( 5rl@)JOa@n˴p6R JkUf`~äiLoYY]2($*HdF7_X1]9AnkN*T0z‚2[Rټ ! 58+kUbBKfh@\)Viaw]v WMV|լ@ A B_Z;h!xF -W/=< H_/ #Pʺux|a+ROd"h>8:^CPkЫċ呁Th _pZCB=9L9. Q̺ h}Ofs*ɴ|~vbR!cvFB9>=?=[ |KCZ(;|#(Y1ZhRxwv~xj]YY^78 3R b65җdwfݳC>sYB3.m_=?_,A;@VFBn>>;?]5k.g.a\P=]5甁O7FT0ۋeyu}բU8S4H&A QT-tUJXȥ > yW[RozfϽ~f8-8>8) ֍gKՍ5Q)aN9Mjc_'wBJQ*VMT@V/I #q}eZhAІDV(VlU* S%E =:VC{xJhh&3C3D&( Vzib֩D12W ZQXNOR!YQ5kPgNgEGf0WAL `SrB&r} ^x * _<85l2:RžxطH"D"T w}`#7d^M/J5RjJM[g "K?WiFkqM \*t?kqE$-uQ׽쾤>renH>9*],AlBohnݩmN㞾!h-EY9ʼnbjQ t"HKUU]M} N}ܣ>6m|tZk"sqO̎1˚yYRZR5C[)H-y<DT:ip-*|^P:EK+tΌV5xEZI2C|Xn^B7=/~Q<͒Jm `_H]mcO›bHHțw۸fWҲtx +%=Zu'sT*O`ңq>`qѺ) Bv\;DygzBI?<]ЈFb'ؐ1ʝ։^@؞ڗUtDP`S<DQkP-%^ڬ#g7. %;T^^SU^iCsކ`GzL$1{Z 8K9̷ʒIWzn(%BaEX#&$b8ZZSp1'lSY V*"s<fNO +HĽ?[685CNI`*BVd߁kr*к2!FCwuXEyc]Q M}pmA貐'l"Mح_)ňX$r.kB7T6X } ieXzqer嘍܋ARH"!RJƒ^)kJPt;Bm5֍eP&hr4HnnV\JRon,# %ֽI+L|6sh<Kb<<; >4^ϊ`n|D;M5H Y{$H2nB,Y(a4GdM4ɺ9>8PTBfG#U ՚Nfa]X 2H  iJWUϕ0#yH Ev7A%I% 2(y\QHXxB 5gh\@.F8(x3([ۦ6"dKBL 5`8C]-c@-i;e ETkr>'=@|we룒{R9Xqb ]Y VQ<,glZ%CM+8tZ-b&1$:a;3CO҄(v|`M- iruȉ S0PU %65p5ɥbTסf$ѡS3nrMD . d8&v.;(ӒEfp|VS{1$f.!}/6X,2Gk[+*oG! T({P8"T@Efb ~`qt0sϣ 14lHX+_:<;ԃe{F"螤!bH% 2gY .9 P>%x:y a0o"teSoʔ,]\*\*j;VGl18(p~d3b>wt1銈nG|6@` t;7kbnrrtq~~@i"/ݜm*`G)#Xc,k5F$PdeR!Fs[矯#뛛˓5FgEE"y"D7haL4FL`|Yl 2|USn]|&j@ܫϟ/w]r6w:*5U>Gak"=Z\vSδO$Xv,`{*~>?8<:ˑcvZW$ee4`I7&|ͦjO ͝ե߾|rP-^~ ˝ea~uc -I]x*;ݨeq57ANĽG# 1H@)?ۗ_\lkPhz{pLe@hP{|%|+GRכEnx,\;wfv`%28Z1Alx<]Q+UZFQ"Czؓ>V45#xkh_ %"zxAe`j'lz__b%|\CBPt_ns,jLqoRA 4ri ̠J._3AKN~$Pk,AZ8܆؁`*Ii&L }ށ|_4l|9ЋXqHvzoI#B6?dޓfgLRRNn>/(#oB>MbZA:&X|kUctz`N'c#2r=0R*'dqDpJY4  nycsA#~b5;;T 3vu`Srt |Gx^:BR/,Rꖖy~mFx`jڙdlŶ,z󽀬653<$6C!bO)n@1Tg'[3bâ^SiMY!Ξ> hibXX\vY G¬-:Jo.I Hf+|=C[kƹ?K|?J&uN,hi(JI-ilk-N I?Da %<ٌwQ䫖9:mFLdL|rܼ籡!19/#s񌹖GVͿK}R6A@JYt/H 3I!)4@1eڤ~0ŽE8̮Cر֏os2@ش-3x"1=䙻h4pƙ<~GcޖҲ #Kі>wIky>G ]? ~m`bB͌ NMG{?'>ĝ-7C`lgWTCOEY Drv4ky2#1&",6¤?Bf6.h;S_@H6>{f91Aynzj\=79"hknY+bąى K-%sT PT",t_un|c+ 4K*;vwċB)G{:Z*+޽űDBl{qJ=ݙQ{|U\&8Ӱ`סT!wy)QQP-4,*>ͧ)!%դy6kmUr?tL:/쥊 zK|DP C>^Qesj S/Jm6i,mb*fEod @!ʼJpQJfJJsQ!L |r/xXg&Tڅ%ytHXX^[i*oIx3!Pҽl҅ZF^#`QZ3CRj*^sx<F1[k5 K}Q8!k;FR%~9=#+80 ͇W7W67V zG' ֶ6V zB&FކؓRG5[Ww}Om*Z<_ZcA"\_1lno,`A4]U4-5L|`.c+2@vOb'Ux|u^!D6sH78J8E!ޑjvKc2|0;d ~~u`{E+y\,pRvZ-B!=B}]͖t0qXTG3E9WVIrv~yshs^)Bx6׹bL:wű:*I !@hbqgx)JW0e2m.@j*x9MO|2ÝM12!!'ZFl̖lPvWJ!|C \,Q4AD2).6r``@hmotG6Qd3q&4ϰw2jEWhQ$+@vzr8/3AɄw|:C|zv2& 4߀R׬_K G[=9?=RI zL*LR@**RCqr unǜ =J 99,+JӃD=KE1*'DR0ehFCA( ]͛QR+K֛_: F\7NNN6U"ְ!0\D H|΢F&B}:'E"&5krP66սEP: Ch& wxw b|>K* Χ2vQtH_G/I*hmPTjBDk /mhdR cZR'nOg/`W#t>LT^?==XHV(ԃcbO*KLJ rea︊<_w'; /6㔨 X."ACh" uDGmo"Q4axڢ^ &CDäV+̯t P"L6C-("S(4"%?rp.>'TbN a!vOd:d!lEh(_9D*/+7GGD5U1f|l=Gb3_#S5j7qX,5cQQZi n!rV*0},'`?c׈ߗ!U}C.llHst;#N29;;45O ~]ыs1+E Urp~1(崅$y@oc̚_K뷥95f|͌4ʭ>c-tsY7ﺈ[Nx+t'>4kut6;d0bCJ*zHB+s|Ĉ=LDI x|Kr;ZSS[Y׍J&C3myP-]~ C;?}9 FFP0ApljD:S4g6N42f9鼀 Rh|btq: >bno AK b9GV|ryՅ{B,#Ih{>mtdXɹFAt}jjjlhl[I"Nc%|-T{gϲm-]E3I*>To 0:,P{K!٘5&՜iIݣyjrkT!U4@ܛN\J$R֘WJlb7(:/6hЫR7#q" ԧp1WI\pma~0[|quAPVH(~KӡGlP@.͙AVݏW_ػq ,i!,0K`7 !+=06"BGID)-!̫R>,ycY iӪs9>B ]SSGx h*9*JMD9rx-Gh*X%I$jB?0O={>iV {[ ׫E.n,Oe,OӨflV Md1ތV\7S)BÕ}ݨ: ñ^RsdB%Q#RVe+5VHƋZ\" E6Rk# :5E»3/i.$;a8B-bg2*2[9EdyAƧb|X"@8>/\|u/ͽ1@IhG!fb Joӌ[Yq阑Q)-39G-stF$ G藭dʼIC(<.+ CI(Pgޥ7a rE]婃1ח[:E "dbuwuqcwC'E8Ė_B GA$lL[XDL>$͡ŶII2s$<)^?ݞWUU<\Q؂xOpYLLtLCnb$0%܂+진cd*Dd<&2\eo,sc+V.쟟ix, {XdWuϿ\n)Y+kBTE\jf15UIҰWcL.KU}ri|tyuuu~*kQؒ2Ht^wTKEw/F4fG#Se>tt=CTEbbWۋyĢLF3Erϐ2׫=7F\jdRU"먷g.68(t?-̗(Kۇ_~U?L@ky#cܜ[fQ"9Km8]&w2}Q T6,o| 2w_η0:e5K{6)}>݅LȚxM`21w6FؐKH2윁ž3H DƲٟа7ߖvIo~`g\u1"ތRxBJ;q|y+uX J?dge^-qcuX8;b}eXb#-T |McR >,5Wg[nL*#tlӓ.s#BsBTwxxtBwFvlDݸG[KPrҗUf=j13Ko3-$r/,ol\}уif?'vxm=y3S twn&rjxby~˗e%XIc?MVoBRgFh<>′.OS[hiTDj5*raծFcSƚDr_K*Jӌ3&4(u5JUk&4w1JMh)A i֏A\:aABoP my:Y+b{P~lGDfyv{kp/m=<)9(#_ u~לPa-sd:nz 'ş_t2QXb[S;6YWO~)5sx2#*kKr>qz!TBB.Sc*L[Y$' ?>2 M$Xy=76T|@0 Q-l,B&auL@BҖnV;=lيJ |<Lid<\nYLXVQl0UOÃM%)mUىQa1TGv*w&RRjsTK4G%uG<{<64<,6eVzJBdHdbn(1SV=J=nĎ7EGFGGDT\x_O]zts8"n$'=9!:2,4"*1=e`@&tO zhёs:i_j#0;9X]yMs, YuDlݹ{KjQr03"ήDe~;2 g&GF&'dž{ZsBzn@oä:1Jq{, 4.#SMyAfRd#? fW!R;U d? |<3)&<=)]Àn2S;y/ m&w0#oVdzFheZڬBoèʲVʡ<Dp{ΡF۵`sk/sif1s>~[28 ]mΤVqdfL ǽ|"b_.|[TT\07+%!*4둧x;vd/2ۇy]\3<>Hd2þE|XN3Sa>va܅}WU]xGPj`SÝ]cmb89Y@r[׌vYXNK*ph֖ڪچ&>$d&FFDEFGF%|>Aݍh܏Eʦm~)Ct]~.Zr~DB;qDA7EN }<;cqVrtO@bWŝp*fߌ*$,rJ \} Ďv|xqFw=rh/܀~/hJ.%'8ÖH8thog{)+A!} }Jb b,|F^nV4SPKzMEO۠rVU)B /ZNJrF Ad)^!? 'PV7FD L>tsёm)؆TwK`h z/hDzR4Qh K 8BZw1}4;UӼT"'t+dQSx#A( )k:;pF7>s3;eݬHqBY!LZ5mm.-UpE4rec}y"L?1[6."/j)U@2!'s2ư/@%" Ɣ1F|*!~slJ-mS-4" SKk&5R*BXÅ>ogᢐ{fqv2Z.Qr`Not/ý5Ls)8"/JUW bG$0_zG5FѸ6avv|5(& C|Tcp{Y).fp>"SCrp{ESI2?+V=r1'Mt}WhW*U(4= Rf4.*Ý%Z R@MM !Pe5E3RnK1:"zP㣭%& EesY YU'[+"B*x)^`B%peCA^)}t>_;>=k XXDBs,@"f4g L@Fl(ِ*X谒Y"+ JnyP/Tf"g,6'K9t)4*e"#7 {JFmH1k&N$#z=MNOVE\ ܹ)*2*>)F)|jҡgh4Y,YB'Q(+g{JWժb?3AgB Tcd)u,HTwLdsWwOΎw\'Gi, H !86BwrDXhf/&&v{=!g|\ ɞH H^"r7,$ zd[Hv֦n4l@l6(xo}I˥B0v5h ? 0'/r, +Haȣ 5-X O$9\&gZtiK; /ѫQ$6Ϣs|P} p2FL^F 3JΝ,ft>Ɓ'B$?9%a_3ܥv MxPh lMR7R}E4Bg+%TzwǙ HTh< v1SK艉MXPAd%2 c"#IO|B]8ČР8a)'؆J`K$"\kߖxowÛzG4_"VS\;^KH#Ux&OhJD@m+J2Ltq+Dڑ| E4w^9T}?5RcW-ֺ>Zkt`3`nW엋KzS:q#&zNO|͠#,rwh:&5oXY]j2kJ1;-wGT@A)ʝJekXV$ˊD @"  [LHL.ɞ1/ l΃;Ʒ{ۉs|IU 2O0Tʕ0/iobao*sn}O ZXA}m,ȔV_R  ZD  t;HОhtfu#\t6cfT_[id1[KàlA5[M"-93ŴnB-vdBmm,8G%Ql7(h+UH,R:b>pwɷ,u~U 9A!0/tK#62;75EXBM5WE*vI>JB0P3Δ #/Y]56y 27f5(#od|L@Ls8 Om])s`߭dƢOQ FCgfM1s^Nnޅ!p_ZR`xm1)SxLЈӵo0\f|—Mc4j UaZf-# _#N@}I]CjhlbmXx,31}W:f 6ivOQHDӗDarݍY_)M~3v]_N4~~ykZgL.Ag3UuZ4_eq8GPȄ<&y!?8lH9EK!x"B.1=2p#ɇRD W />01+C*FUʌ{׋q`1R "*Z:]+::6+^zbޥtH|oggL}ׁeB+;L"(|V*Ɗk; _VL22CYBT"sX„2 `-r-JbL"Pdzzb5O̵iWZ*֜Y)V;C&%TA|D.@NbtQʧ:2%}f˛?VI8*eR1kN’2pyң>fQ(M-Faʶ.nx`CCW7e8ؒDBr>1Hf>sfK&'J 7R:˅Uغڤ_\^]jͲ/Rxwa^*cRtv{G))tj˟a'B f f<ظHt_7#hxz v3/Wj@_ZYY82[3Nb>;؝;)Ԇ%(| {7';_~=_V_9Zͯll-A;G "F k98<8W[R*ׯ_/vvWgaWbt#h m|J ۅ󋫫߿}|y"c?H}!Us"R{ |Y_y[$OҠ""}}~Ϸ/G:.,/ WPIk 0iapSg{2~ x3͚LiĂ@YX:ڷo߿\m,i؞q]|o(6W J ԦFUϱI5aV|7+8IKz3DˁR{T,,ɆV&džplj~']dg&> ,գHA#~iz1a'q,Px߿\,tT̝K,fӫ9$mx5 ]ɸL&81ܰ{eݾ\_o,!BxSd>5ݵb{L2W2D[><9|UaRر^ +j6㣽ExM5[ s*Y`1ЬN2_(QV6/B.I#F:L0k7?χk[[k !fGcI\l;YuyJ*aj!tK,*nB-W Z3Yɜ1pޱ!F#t\܄ah g_*\&iF_wר PI@hJ(>?p|VB#?=4({$Ž/׻z Ek}^vRJ0BCO0:L4]U)7tt].)!udIg'%84yƈXo= m_j\M~|x*.ftAG'g)`+C;}tci CIk*N +>Bu>khxwtvP>A(Oz:"R :i}^I$Nb Rc£'FLЄ tkyʹ*0M?[QX8#97"S;^E&W bfG2ՆrxdҼȨ𨘄⚎Y<8U blcԋw3x"==\_Y^^]7:1!M7 }t|Vn׆~]<DhDafLJ{ƦF{[!#w_Pd۽~!1iy>wwvw4ԔL{Ѿ"tg%l?(4*.%377;;iA^ d2Rvv_F57٤ݜaשmKo f3E?tv ݹcbs0a/wS?l؞F>nFP'f4je#5=}hflŻ6?Ξ>uҒ2I , juC{wKj)J 7RCE_s2AqRa!30}i)zMASYPLEM3ztE3;|Zp'{!{ZXAj8[_XK%&Nojrx5#'1}렶ֵE l Z^߫yiyeA+84%BPK%;¼bޡuJLC6C˻V̈ /bư9!%vQ]X][7kbxiOdZC43OG`1rB|_ӥJ˲4qIK.,,.tZB6$xGL)sU>[]w&hAVoN_T/Si5 k;k:@@ηf<U(=;R0\ 7 YHD bD(D+#+Y&L5Kh:3š>PlQ`q}pg}^& : %%W6W :jOwt-O,;i0V%֒hLD*-,l,*DB˧L'yx|q*Hmir2mGHiK"FlymhkY+B>}͆k|B{|z:R&1Arb]<@Y 3*McC*q\! K['Nj2Ze|X$֏N7 org$8Zk)l`VW(K$zX[2 2x|\T ]sr~v7B}?e(PG7SJz9\H6H;??#BR.A3A0!"^>4 ͫ%u8ps3::=Lh`*K&cXux~z!GJR*( B÷GJ!_szv z1g+|cDoy]?`V{'y'A] K$ $bN 4@WON D$p#yAAT{5kN4X_p ez!' /H;J4W(#ӓؚ|.В?`4'=rs4{eF|_k yKds@qǫ`Opy\aO&Th'0lDm$4kЎAeh\wx5}A̯*aqD P#pWkז9#5t0# "1Y|dK%W9 .BQZ:gpx,HS'8U.jO.F +oRMш[A}H$R!7T_2 qA_kLY} OxVRt3^LRwI@L|(o'Pi _i C958ϲ3g](2A !//"׺6| fba-z ,cwRVqĕ*1Fc/8W:*R4G$`fmj"Hsٛ}Djoz\I}arX҈kU}lUjJY:Ņd6-Y`-=5:<҂ "{"ۯU}IKpzfG@G(tB#+U*QD &BU"N KK2n0\"SuqA)Zo,"8"cP2LVUA,ZXZ^Ъ2*ϯB|-aT dF0fF5dO_wGwƵ|Z%zFЯ^cĢ['9Z S(YȾC~v̲`;`VB})Q(䂹W7w#Z*JW֜@R VTRMh,~E &ɕj5h5F"K~CG Rri.,_S|xST1@dڅφڤRhjڻ+$C2=|Μ(ՠ?bdku^%ظ沲fx,v>!WhT`EDXd{㥢d#YϕR|ƹ29m n->P=NaZF8b "&FӼ+Ha%)'$ rbw֗t*1M&1aa1ph, Tp\bWoY B;ɨ-AQTT&ro2!P\[!2S\^ asXr%6Pe0w( ctGUbyP'F_[X`_G iCЉ)`@0. !}Of8ߢ *kj3$`KlSۜqYd"IaHEp9݇!0fC|M"`xdLk-^ġ΍Mc E"QgӼBT3?~gbs|SZQ0/3ɵZ;2nK˥fgd"RxB O0n'ݣZY,BL uQ3\A_Q03sT6JYИ+kOg%u ȵ&Au rDDq|A f0 z<&$eE;)rW\!/]'iHlvۚIshT&9 bOvprCv5>Eq)m3$v$6,nZM-cA-2-/')||Q^:&$z90j*tpe6dx4Wt /&| 2f1m<*"l` ͒vTlƠ s("w8U~,[ S24Vk%,,̖ R! eٌp7fv/LqR3VCYZAH>=32&p1"Uw:=z>!*’g\ޯ,k)= Ge^y91^1EƶVV_KʯIHUVE&Gh w٤I]$:{kf5B# eGv謟3"%cZ G"# 6.gd6E{ -\ |M-/:BA6B%|i>;|$ r:=g1) d:W ׂ$d(-\'RJk33x"+F 1EJD6e*#@_=s{ygt+~vFQXT2[wpy~ k-zQЉIU &–J£O%9FʂU҈^GizJʥQ٪Ex>5c(=UEX=%ԇ\"MfK\D;X:ɿ|\a7//3l6>|?|%e1hWN1BjM'P8OWJ,dJ%UZWU -tsնJ T/As 1@~HvP)JBݳ%~B_]]|9[d/^/j[}B0.,cW{Z' ],Tqp8-nnnm_|><8YZ=8/g{[{ ހќi`S#fusȘ ObHu⭽S|zs} zmQy߿Tk0,&\]a+!Ó*`?JxaK}?@owV*3]EϽsZ?G5L諰*/o||>;qd?!f!C~?F%?6N1k0h<_M*#jXH.|0;0Jh7O|E }ןׇ [quIae$jMc^b'N.RZ!LDVV$\&7ԅw| ް6ЫД!gvDVʘAj"u͗ ufoHQ`2.$#UiљUscYAD$k ,_}9Xԉi"|gknR yhB}Cg+jؘWZ;#?(8L*UO?=[U ,h8'1|GT*KW!Cgn?VrvABSX8+&՗M5BՏR^,V$r)oƒR(ANf_^D&/)Tˋ=aJ4WMEtCNZC )Lu_i, I:_`#ͯ"zHU ri| >10^6|HȧO֕6XB 4}ޤD%OJ@cf>q}U2LL ~^20!TtgY~YBόvվNՂD>v"?k[u;> }E D佫i{WT[]=F!6>pF]h[eCE:\Ș/s^GF%gd$DG6`~d-soV.[}Oߘ73xXH?*244224$$842!m4n΋~|زva8:? (o SeSb"AħfkSm)ܜĝin nʚqT23TYQQ?65á'ߦ=pqU?aolW&,_dj~ESznvbdo`hl|rrr}nbг{V[bcL0ǽ>io׶twvuvt4UH }|jݵ@kWjç )/srҒ}<4yގ~˴c{w< zZZBq*C?~'>-a(3vlhQ! H@5ʰY(~~kMGMՃ Ռ0hw,k&PPj"QLOwbnwt..nn5 ?fdjp،wnD3!.FOВϼ}G<\\,nk*kw-ĭ8SsnF%ex"'eVFjbLD߳G`s:5L?nQa۱81yYT-Cߨ]8'*JB) 9?UR{&HƮHfL(U4T [;e"$с<ǥ? xaFl<ս2N7i-Sf;^g$'D?/n!!BxhV̊>{\=oEԲ`EE7$aOl":5gY|,O~I)I )YY/ _eE)}o|>}(:ij&>!;*'xXt lU3wS];9Yy^צ%IT Z& HP\={$]lR[@wijdc}|# aiYs)Y,/k :Z& v Oų8ǻw~Yn'C#)M z\caQ8B)+zd٪߸ N>G]{4S. Jo U 3ըD<#WW zF!py^ 92Y̪e}'7m4oUoOhRY\Xi|*KK zL HGD*]LLRRwm, sJnqc{kymyA/2)k+KzB*_73 hi}K߳)9->>e^b + #\TPԯllooAU#؈jezbՂBp]gϰ7#Bhawa2`_;^_iJdPMER_yG3Դ4c7qrS|^t0ԨHyI*ֲf0 0^m*  3;~b|uzWk!a@}x|WLRV6vWX }'W~6P {PPԛEIraqysdcQH13#=^[A3>cuw|P4X`r4Q-;2!vuwYa^-Axl>Fa|j4P!M$|И'*yq|!{5Jy`AH`=0l Y?\zxvvzUɥ{}_L@:dk)9CwT-T2;8?it*c9L$*Z:9?;asyX%:՗Ѭ@1P$U6/1fX\&VjuʕCSh%Gm},𽓋Oި[J!B0>ޚka.?Oe2h (jZ9 P㐇 hZPOu #]EL *a@,,G+v^˚hǒAr`skNOvF 48d$A@U?}2{,@D{v~f0̡)LR BA1ư )! H,tk)/i1Y=oe,:'"Hbz'O`lB`15 xM御uXA~pvV*90D,8R߇(4&" _ikC8Dl*3[gz Bop( "u򥝡l>)wzv(iF͢V40"n5-B_hi^h[c}tv~(MLjbꉃ{HE;U@b%=?͠m2P#w/["K QUa]dcݝȄ1|a}B׆x:Lx >qmDrK}~G[hR[S7ZC:~gCg،A  (Z]'/Dv3PS4~yJ _ˇ3Uf3t:fjYl~ym*@~Dm440{Ct4u|'OU bZ..HյUkk6hgs}eyiTCL-ψ=əR"hLVӋK[x&2/%YBo.-1F3}?5AP @;K-5"`PKXkUBfTXwFxS/|jF %PA3Zby2ª| Ie )ƠQh;+JD" )ҧb7ܻ BWӖi |J[Bzc3s鱱9JoC^(;-Zr} qr=({h-sV4U,3:Mh3mik`P,Am^`墮{ kd+)U)\l-ZvnA#0j޾}_=A劬 \ r͠ H:# a}:D~aÉ *YMF: 1DRGo!#.zP}5%|1l&WJq#V-%Ay AB!XA m ^KP%K cQbŠUmS+a$R!ʥg<,D;>ED.76xAȯ@0M NHN-d 0#t[wErQ=j'2TPWJ\-/dʤ;&=Je qIuS$:G$߯suxЕuFa/[>ʔWA-YF<3,OcZl_jT+,\^-|tua(SqAY?T]LS/D08#ņ<ރBwԌf] ػ.K*[u0-$Z4=V&]\ ; {g;bO嗫=X_Z_$;# K?lwZNf;⢫LiX\]X_[7^}GP4A.6E%1ϯon.J3>EzI98LBv~uswoowgg󗫣y%gۻG0N̕'yؒ7,4ΏZ8Wy|%݃㓳/_>_]__쯨_/|?8?Z[8/_MR4xu^P 5!4&V6wW?<"ٽR^߾>\n$IC+j]_{كZc#>yaau=;c,6'yf"IFWQ)/:I\D(S6o@_G021T߷Wz\*["R{iNֳ]󱪃aTDa6t{ݐ=4_ ܀~8\_"DI\T!7]h;kQ5YMdžp`V6@U Π'P< JB_m-1ИHXlIm=v`gDB`{˗ %J&z0uQq]mkT2?/6"k5fZ~VZ3xTT 1H Yt td@n?WV7VA++b¢?pB99܂,G`HSF"r`jU%hxQhN4 ~Ͽ- ZTDΚLOzQi O*M6zӿ:d52C 5f&Qa!aQI%M#*!'≛Cn+YXgG%$*qvӇXP7ͽxT2F@Y,Zƻ½#RKGHd51RS];21"5IA/,O}CrƦ0XP_o jr(+>qUzG[lG ;02E~O E9!>:"4}# fZ;y)CjϭM]P\}Z%c)6ή)<<ݭk։_? x~7YG͌$YLYB~~_Rp^j5svv1>FP+hm?Ljo&-?݌ֹH=y3g^Oe!kV@3F; ;! $G(K$rR3J}?i,Xw-6qn|3߷M؈X :B Ik.J}`mj mt0WAH! WfLjjJRrj=3 !SiP#F<_+㰗5#,S2:>.&:"<4? 82%`jSvHY|nյ}ԊBώ <)iY!ׂpy^i*[frSka9ԚWZZ6}󮩳4'>7LV&sLY(]X㸲7R0M5~jŐ<{T>%[_<`I69[+jV xلb2 43444a@phl̍ jh],V5G &7 z%.-j52.?5 $R<&+3ӛ9d,[E LTgD:^[T fa^kT-OSb:qȾd-8'lyqaT$\+"r`,1jS*Lɂ\!&vJr;yg45_cu+N@h"S)\ $P|ᔢwQ\,ubZ+ir-N.{R7)͝yتS"~u}cu +Ts"'sV 'rbʧeⱢpP,dӫ[kNAb,L}o;ӑl1f,z/* xю &<ΖTX*-OZ[6rX#6DUqTd4* 2-mrf>Y@v/ /ja佝eʔiSw\P<.}1S1'g7&Dzykoos=S(P&WW7VJ'"!SrR13;- wP xFi G;B,0g1L/n/jH,dMz*5naR燉D0;ˤPnmhgkY-",@CeXd y>IBQ+(gA܂Eg `=뗷OOV@ęaP/Lyt||Qs񾁅h(w4d`臉 LT^Wj/#wrv~WJ\.3 @ ӳ5B-`u ~p߱RvuoYS}tv~qN!Exl.ePȰ5 _kK*$ UѦ|'989=e'_ @S]|Ϸvqq ƴF"|b#"9~Aώ@ ϔYي0^ 7n<hDa16' S]9>X`q3$v|f3YAE 5]<W :"jat :V%A8l{Ol_ZX]???\ЩBgkǴOF;U#A'齈9;l:Ɨ* ڼJ. 9t S,Ƙ›{߁UlVz`,t$k/9C|϶J!ce(fesBT>f|~l' 08<~5Z #Ь[9:qz=%|l%8n=:Lֶ5t#Ƅ#Fhljh J}0c3xn  _RJӞЎM im A0;@i ,$ՍM,r ewFӠg<~R@95*yC_3f`vK`g@%S[&DPџ\1t,ʯ s,U.ack{s}cckcZKZ0{5Z^Dd*>y`tHhp'K,Wjt_ +kk+Z\%޺DPWK k$ͯ| ]P[Ko9C[I_G-=]U!\. H)c%$-.k!ڦI"D,ii4m.k$631(T ާݹ}/bYRBa5 -BXή!aByLe dc8FZcQ{p5CϨdb©"/A4ZW}ac2\20:ˣTָ{qaj=4_[*,tsץͳTتfyJYFc D%=Bw 7* .Qlw<`aG`*@ H Hx *x~wp MQ-0'3dʭdK6Wk@q+X`1sX`187QWK`s ,T[Z_[_ҫRcn)VbIDâPHcX OT5$WBP2COHo2N!ڛgN[WsɘO$H p_`]C N^)C8m3#5t;l\mv ),DHw[Ize*SY}hL&L} @y2-_R>79'Be&H;{ި3 XR*4#I҅][h7SGCh.FZ viAyCH~YkZ1eۢF9 aUJXCفeruwL0QS;\ DZ {Ykh5L$5Z!v$aXG&N&_WfJ? ݏ*LeiF2:%Pm *"ⵃ=K^>s?d&!k1|:XR)g$4b[ל`̐QP$%Pؘ\6'PZɖ-o5 бa9tČ2Gx}tt_ϫII 9Wp{%FKSC:zDu鸆f j5 tujjV`r [{[ 0ݐJdz;-O]+i>/(*I$,$6e,yBƂF4Gb2Lf]7L|48QߋL} 2fmU= zB|lasg{}T͏,>VO:: +[;jzhdԙWŅcT#Eڕ]h(ل8oL{N :31vJՆ孭U\6' !U2U*G)%T;OA%%eZ,iP,.CEzbSwM2U;KR`S sђB:7dY2Vmv4O_La,(qbЭ]\+Lު Ռ^|}3nl,"H^x$7ʘT}L̇Д.P^\UyrP֏N@Rvv̙!._~9Z=<::X)Čތh7ݨFg } YƨzXY\?8=<Ń Pmf뗋㽃X%BDhj"0ia6 B'>Yc;1VCΣӳ_oϯ@7oܜ}`gseADfK)lFme@8|k'7~xQš#4;W_~d>__U˘}~t~o#of3Z)BF */ֺ:ppS4њ߾|>?Y9\L°lw]&w ѡeBͯ^}k_|>?ܚGd ߮6W PI{EEFdB0K8:{Gs_?>NH&"ӛ?̧"Z5pŨ hC'^<2l%孃 ws1yjo_OV$ CQquDh=fĢTGwIfxc7QfdϠ)/6` N7Ro__?_*d".'/:{r`पiP_Z]=8>rCat 4[7'pácjY}ژE=%}MZ _^o&Eѹ|v>nmno@PBȗFK}'w,'Nny̏1qQ`RAM#F;\̰o[+ j3^L. st~Y1;<,"υפu`'a1chG(_<ߟzҢz6&GcH/j޵ƘxBPZӨ5;_ >4> u9Vi GI ve>s]{a7?+ -0@drf5Kk%o(.D =l̝BA#˧grC*ǨlkACD Jx(ܺDH,޹a&:KBKQ Hd }[4 yM {02r%X J.ѭB'\KɎ }&sgP~݁x?u/y0&$2y C\Z+:B^#XT𧢔بZ,+?Cq0ALr<]S=EPl׾k#q: 3=y\\V=QrYJm~R Qy5m=CssS %&&GOZtLRzY?%]ػ[P{~(D踌?Օdde(/}^<˘c~v[k ַWB0\*!*,<*6)5-)1&*"<:15%16&:&eE$[7Z/t5U#_OQӝr###GƀDe旷 iGfP+DR[N]ƽ4NdQ#5e2]rFvQ4Lύbgj{E۽xX80A"ɱں ȍxd;AHݱ6H̸ {sxi"8f̿mb~{<M-~_Z_S:+9:Cw[ EY_`f P+|£SRScC|=i0Db2-0*qqsgϼg8e6w&67{{n..ǠwLkLjJYh{,ǟ= _cC~Ʊl^?}?:m6۝ lڱض&;f7C 7>o`3$45l<{}O :P6v995;?ڃGC"ZךM}X`6 h]k 9%嵍:::?5TgGN% D"eRf{rB;[ m}l6qv|^:IyκK@e֋9o>˧ON 1*Y$qLܓٖ*0 }'Z,O7N  @p˪=ӜD:NOb:0")mbt7NNLOK3k~D {E7''[u:B6 v {G<235ywUuE9~>~ e\e$f mYaDL N*lk~_򦸦cӰ Aށuxh!=-[Ia_&n؉ jrQS2*W⻌znfW!XfiyoTakUJJFxb{L`_n9Xn2T5 gV)0`Q7Α a̡LZ3zhBeyy515vH斄Wj-F#Amz"$T3EJP8à@?RQW@b E+-x`Qs Pg)5ht";(¼A'Α82ARٖb+jd4-_һN.>dH_wC$B_jK+KZ1$*=@y/Sކ{Ƽ#iF7Kh@2>'4CPal3D&׬llm,.T xt"?aey9O_ŕu-3%ăkH $ <5W{Ӹ%$3{LjYݙ=d2 P}c0eH .() P l W׷w77Z9OF$mpkgkôbPЀ VjlG'$9c`z7)uk:[a%r*$H[.Dh)7j|b?H9AmK`(ڍ݃ýu=hly_ѯmnV %p+^H&YTKo)q XrG(k`5a1Y^[TF^F1s`n׌3~R-AJz4|#vt>؄Ny JXe"vd x}$}x?p_SPDPLFI#({zO3QXЬB2p4seX@J@0fD܃^ Iao]^B!}8R(}x-O7:ܞܷ\T]\%Ѥz,Zo@?u^ Cq$l3m^]o%E(3dܧ 8&" N9,kwBcAr՝㋫mJ&/҉YAae {s۶k..ޑ‹cT|(VvdQR)|ƓT&tm O!9,&e::(cF5,qz@97}F@hҰwvyu~ɤqt@'J"RhT:*m\]meҗCB?h`]y^S˂B>LRT=u5IäS=mTD!92ؙ..NWUUrYt\m| _qRߋobhSzV65FC  44*Dʵ`|Ty2~]pH<n__ionjk= _͟V,Lvõ-]h$T1$>vw6^!512¸˫q,:Z1@i6.{ &|^gn,! V}]& h^C qs&D!=o!4s)3Bg ,o N_R? uslA͒,iEܡ/Wd]G,|7 Av}B;PU{&+1nmcΖ@Zڢb:Ok>I]56v8 ݽM5&6vU IVB596- ݃t&ѯj:ې|msog{gooC@Mُ 䮄ЏL҇`/I\<+ɹ=>Wk kz A9BEGN&kIUNvIJiMQf2S]1c9h})$.zOsBBX`)$W3靡BZ!J65&LIT*r{UƘN mA៩zYQ#01<[XXffp6q$$H !XAXcRI1[?NcCq5%hj^ؤQfZ!`'.%_Q! N9(ud2mJRXӁG?ז;>OE&L\\\^Y^DtS\H%Q{ZE0#`z"0X"Qq=ů)<1v/./,,, ??VXG fN Y7B&@?k`ãL6}vL!l_,[DRBrV@gGJ([]`K@1lM$0\ k)D4WM",*A @|MH#"R8ǯ0r ,eR7g#1;|О1-<.?u%=OQ}nƕv4DX@l=Trd%3:|Y*UkHϠl!aiFkWM`RȑiJphM!tx- wA 4k.aVb^%RZ#ۨ\fuyjlT+)zxvٮ5z"4@F! !)tmن^9Z2E,M+Ij#QFTWJcE3L|cW Wr/\xKGE =4&'QU ark4 !7-"Nb~eEoњ4)(*խAUB."7EG5N4=&vEU-p.nH)dA0PC#$Bż> Qb[>.Z@cfD3_R4!#G O*{LXo"^LQBֺv/}Eb!lLy=cZi9>]UevNώF]e ļ#oܠX 5HvBX2b>9=އٚBXjT&_wrJ+khCWS+XlKLlh?ml^\\*~Gk::/_.77NO@j0-5&Y\:B;{-qV2+nO/o~9V&&2f}/߿^m(BK\JU|=_DNE2~cׯ':*Qq|~~rzv~~h`-n^]\o 1sEx;]3DMe2ik$zY}Jw۷ xyq:ڝav'A|fnf@*Ԧ=ݡ׋3P!+߾^|:4r>>6iC:|/ˡǓarGRXP1m܂׷_\]\̹Eb[3iu =4M=SSzɼgWk5:SA#lZLwO~onHYvgn6I -i遅L3D䀯yMf߅6.I[!鞞<>E@_@rP,VFF.! 1s"ąkt\m:ߡκ^D't~3j >JϏH릡=PBA; :ތc2>Yhɴ|=]/ lYFD 6on~zixW[[&B]M+&j9`v1WNJkbXl('m4};_@ϑ9* NCUsӂ5}_A\D7v{LYe]\#ތ_EE%αVUtPkfWc4D%{chFĚ_A{kudbPzxtK*T۹$SgHwlCT($ ߔbf!顇z"a!yM!/Y捳PX;~r)sLl~8Wrsq}9.v,C OC :0O$3]Ey $Juηr tyA靋$wqlj3FhYD];>^pI-SlvQ-蠤ũ3'[Ne(Cل!/&$yy)zl)F)˯"AFRH' zN+#ֲ6bkf~Oஓm$ݠ6luJdLRq^"!8,y?W,))6)MwӮ&5 [7mC2dїiav”ԴAB}]+i B[?gUrqir}l/}o|bmnR|RZId60/;A,lSqRLlLrWo+>.|m]dQܼĿ]4͈IHHJINOLNNK(1^D=Z15 Nrh!6^r202fXh|>O{VZ5gޥN1l {Yv4zf> /4`'?-HYV52H{+b%h >?^ QPOkk[Gw֕y䞧kvm.c6݆ݹ!@2s5gGcO=1q^wO>y}n6ͮkM,)*6.. %!A~O޻bS't?@VvE"Ka}Ĥd.PU]X_WmavJlX{^6ֶkwȝ ұ:_xBNIu2bB顎79 }̮?YX?gmw敵 HPRGx<.àSiL6IYnzh*s30b'n<>w4훷>v@mA\CowGQ-kp/|q(Ej_e%Aj-2 a!!qYo;8(qc~&e*nkBԂH{?xi&6ĄEFǦgg%FEMpЇV4Ξm,pt1O0~i+BǜpԴhMIQnJLXPX^Uk4r48ucerTx/y,OHJ{UP]ًҺΑ鹩OeyqaA~1/JTUJ=.V|tDDUj@@PdVnDOv6w,|Kʍ MWZC}~0Tco%~f+%~!i$N{Z$'!wuybaG{ tL4挜lBbZg~v|-ռV\6I E2q`M eA w,3( 4ʖ!xq]Kq |EL+f2dv^\#C=yƲkнTJNcFږXlNqd;-k=JÃʠMX; 9[WK((|X#@w\PS|akמ! Dql__mчg<@";Pv2"&MQ1lzG *O_pZZ0zק9#bQ}`d#fBCqokgۆ?׎QͿlQ%5Փ2@0P5Q("cVVϔ{8f~:5hbc )$ 4N3%Ɲ jYGk3De&B__ݜ:@fBPX;:y:9ǂ^P6;7#iܰ}pޯF5ψZ7cɇXo/v7\Դ &aS=R`TA[f!YO+ x}IYYy~uqz 6d]LV/S_ztlH~DѨޡukנptW/g{1,h3!ޱѽcj钐Le=89V߾^F\7]L!SYXs`k!5£ΰ}q zY~:[gYҭ77_۷߿ݜD+ro"*i](EnM .TcZ=b\k$Uw-Є:dWG(F$3R{GnζccQ+pn@Z*5:.ڷ/_.BE{v נFoҤ |!rIkVN]<CX`ͣoVt(&N`t~_(`*) _Oy`'{qDVsBp~//lsp~,jLB "Q|(s-3A fW(Q6w.|n_N>%\tР \똘Df>wiZׁgBfumkr`߾쫹,68?OŚC cUR*`3S?i \-T>bBzNRd׷O/nn^&FXdr!.j9J,y>}D6Sg<,&2}$D֭n~SaUnF=[\G]çt/ܙWp]IjL_zxTv DC2މc T_A D,!sQs-O<+Rw;q tpB-oNV%H s:UHM!.˽H+LI}Q549 @%-L|Y3NeT΢X4j6UMy}{@o{۷%m}o RS3ڗqOlXac ~f>'6*{(7=+'##Yvz"̊?M2]~*e;|xG_.HOHMNL)(#3@sē윪.̷^Hڻe6uMNR\tLllTl\<_>xsˑ^Zטۯ\ЬĕEa6˴HE9:? a3}Zj? ?| _dl$N6 fAHۯ_0A7Lw@@`6ms7ץY.Dops?`A0{gX4mwи<  h1m~lpX2]\-6a6 IyVT\dĆ>fo b3suϣ=ã K%2G19C^xfKx{!bh %en>OrZljL.Nhk7La0J2"YI^V7Ug+e{[wE<1%yIq M:2*222&>epOﺻ8CPvu]ѵ#UYaA! P2)!6"$(((<pp]9ZC;9@0;hfߴs%7 A~AѱII)99Ϟd$ņ'"3r#{b؝v4e` mxe1ŬИܢ<05n~lԊ8&+]>Y{aEmB`޶Ə5#$$Nu> xFR#,؝utk[ bJz2t<1 0~y\:qqftdl⋥ ]<*?8 [s*ڐ*0t`GdRbV# 2KPUJB! Dż(!w;K@A»aDF }yPj:J)2&i<\ 8T= CԮ>Z`<ߏ+APe=֌zN-EbVo:Hh?ЌNTE*2{ ZioD %)O6LzêFH_tkkR* Px]Z@@Hj;WNjY;!ϻR⧴ lolmni%"G1mjU $|Bg~h@pgr>呇[c ?e`߈$_:6RX_]__7j2 EbrOaD``ΐH?y/)Jvmhg] Y33tuڰj22!oNz1#udA;K1sFy+\TkI gf+&(ƪV!̻Ƞl"򁛙1K+aYJ, a3*ӳ-R12;M %Bm<8>نj2Lkܰq+ BqoA9+(8 hpkݴ[r1ofRQ(*u /CK[;#Z|]=7g}*;bY** āʰrz~cԁNR4 UGkǠ6#UE) ʜ1;2{Z8 4'jM ,g<>,.H˚ҡWJ{g'zlbkJPD=h$odgĻEuD` Ұu|qyyKrag *Bomb!0%A:rc {#OpyBTmɆR B'N9Kdd4''95(M!·204̵[Pᬌ!+T&>{i ~$mYkkקZ3RH#A}h/J^lU7llvg;kfm~ƓMhqeM5K 6b=:=۵((Vmg/뱛%מAo׾IDņ524KrxEFmhڡquݽ2IZ0H99,6At|CtX=M\;nO_*Q`A];kUd*<-1IIŶ2H 1l.#-N HՒ"̚q%K*nD@9ZKSenFlx_j ͣAlb3tǨ:1 k~/"ldi*k[r4CZ/Le&MVGՑ颊vl|jlqy\ SCLfyL3 Bݿ @@Gd >a Pǻ[FȔd 磒T &yP`>><@ q/Y|1H$RqŅ% S0IT,P8.(Ԅ5ߗ*t$ zeckk 6~jthnf77Ġ;Dues컠_+`Z .S,ck)gev 77[ k΃B" Cb2sGU'&'Sd{{kj!?9_Z&RRb2TZx}IcƸ'P}'G[|l-JrՏh) <:70g: U`^?u'y`[ygwd ng$;Z;X {(NN2_ fWwpl$}rug>f74JF&FW*Ò8O\̂wZ yJJܴ>6p{m|)ь*)wEy7yx6˯sGP~3;9h!UX[ի`j<l֌svĺ.X| 9dJ}q^g5UV2]nY& ^@Хk#oN1.Ϗt`; 5U) }1Ǽ1>c<3t'S(?Ʋ₷C4nB~xgU%CyPܫ)6c'|B "A$?>ޗu0ڤʧGV-rk0gX!@>..\\wm1޺F&;UrSRBi#&[璺Rbjh?CZ¢KcG;1/_n.@Ec<.6CA9\xA2x+Bu md4Xzɝ|զcaνT2nBe/_o|=5 Vh-=>99\-/~@v7쎵Ԓ]cs;b.dt!!ouk ۳ ppr|NU<ۯחg` k("BmBbaևyלA||%vƼf ˭t<5mbo!u}~zųDfQ mif~r':b51%<=9xTuysuz!dvui+dܗjM7C36"W 2]ֺi}˷[oLϣM[W Н/~<^-RЊYAwpS_0ވr"W zP.P^ d *}n/!%왒tz IkM ,GdoZ[=-(űIL#.aoj !;?}t&?Zք1;d;X,U6! B&9ef 6m}Pl6ԵxbuTЛy!vJj!

_7K5FD^2\}3x7QP~X'?>ldʌ0mI h]0T_9ݾ}=_E㒦Pn:Czf[xe$E揢U>.]+˘z[2J2ȁ\cᰈS8*鎾߿\N.y <ڝ'C>'5 86C\5m]^~e_4dድ۫ ЪW 3_½Z2*-0}4 p`t0;s^/3ڳXl0 {;NLqZg;߾x`E_fRɷ?~03..23}umQ§nG iV7Z^aIx6'5Ƿ Ӛ BzSft%R}#̴cgP~/*6<+iPܸ}bChNŗm\ͶѠ  L\b"ӺHm4tg.OLdADTR}ڸwՖeSq,D&xd|BSFTt f>9|Z}B^}/pxBX"N|z]lb5eAD|R~tXf xNlEڵ9# HT J{dUqlf̘iz G&5̼жsqM+ O*Y ӫu)02˖O}902{yuLHl'qL3npn+n(7,2C?nAGja+N.O*8%1aQmف^' q]C١a)oiӓVW|`,Gvm*!82)$j,ǚh;iaF"eEDÑ@"JUjGl`LpvTwU^RXB"HH!KB~]r|~ܟ]6U/r:k)R 492;T\4D:;ng*(CE qqIus4&&O5UQxy,3!)6@+֓N;(iO.r>%%k-.uTWVwd'&%~&SD>r'K% E)qqqɹ/ljmkX}Ou_'$&W 3]EƲX0KZDh[f5JK)x_ճ̙m 挍C6&5KxeUO1"bb!]]s9.BfNv 뎿ګh%.nw_6̰Ѯ%y)11q1 Iy%u9]f{жRP磰׭+4OŅ/iL@UA|}w9`cybVgJ,w}#WuO-I+e2iy47.l=3h иɉёɩʗ9]jt[w4@e&/~qi/^.+{yayؘ-B k}Vj?{Gŀ䡏mq(Tlkv, sGᤷ^sڜ#aXb1+5rվӟ^CGFş~?ڏC>OپyA|JmV6v&)_Υ,_mE.g kj,vncIv;NC0#>>}辏7h~`#Ìlc֪g/^>/IO |qC|Ԯ}7$&ƶѱёڲgi1!~z[\0+;d=00&slv`et}䞧ż,)v ({h> p3sS#C$*2S䮇s l0 pVidŢGZ_JOB IiW HË6oEۧy&i%"ܕw9 !A!1q pLtddhpPPXRQlcPd[]]~Ldß"|sAhn!QqIY9ٹY9IaQye]z3bQ=n>I~׵$୴G&fde>{Y풢@g-rtEc?`pu ȩgɘob|7u5}𾬴wm.L L(˩|ܰv쇪u }Ѻ(s'-өHKytp`?_f=1ߎ9D"^~&SIх $X!"/VLZoz ^(.4dܵZR W9{e_HjY?+Ӏ\GhY2GOf5*)&7=9|5!,dx;$yirfp_I&|°fԩ*1gib.UD<a:'? 2H*[jcfJ4) 70m]7 ZA! /3%ZquUVH$Bg OlxfyT o&a5cTj2U" G3ujX,A>d]zh޸T<[K\kFKXsC|CۗX(b-!fmcskS/dJY{##?%oHxhc-v}H|C_yRB,u Zʞ]BMv9PR{)%?sP~l\"K&Ŭ(eqcho޿g̳:6ؤ+F lza+ bKKm=~M< LDZ ѨQ*LJ{;5ӓtTVtk;qhqxP\G4.#tĔʄwPjK׭AA{Z!C&<ڵ}pymäQB;UJ{FhH9㉇5֫\@NH~2uƵݣӃUѠKE *aA,J}|m1v\dEL`tW2Qjm||+&&(eERq}cD>1ACPHy<Ac '[?8>:ހ桰؄мY%=ڏŁ'\QOfHX eZR$ J#a 3Z -'8fxYkE)4?MMWN/vu"_(qYlZL_sr~vz <6}e(,Ŋf)>||q -]}^98R(h,daЙ So@ -,5뉥椠o Qj5q ,#Q/Ar̔˘!qQhB:(vyS@9:d&^Gc+qC`Q543O,`d ]ʄ\&Ft''7!wO ̚0Bƹ>G/&h _?qQ4vZWBX"H4?'.j^. n\acqV 5T"a7-12Z|ލn3|svl \B93Vh# tT7_Uћb|\,vy>(P|AWkh@/Ol( <؄cݿ׺ތnjNyIhcq./0"'-Q({nd=Urcvry}usa EŔE.h/YkNʑ78 UYC;0w2TA0-b^Ie\>Ii7z{$Ѭ` +|-{DL5gϠ% &8f6= e0nckΚA &v!Z?2BԂf|+bM v|rҕj9>Y׀W(q9,&PY&xavI, `bsCN/BCa Ĵk`6D<c"Xӊ*g_y}I|*wt__cAe@N6_,ZȸGBdb@[ѭ#/B醃=0d^ ]0" 8EDG6Ѵ듢id,.=8>.`*#uBB>b&h t]o'79h(ڿtur^Q[[&%s-My" xy<¢} oha{GYL>>^0RmnӟJBKP6*> DR>Zi |5IѨ =hCի-+| V ,LedhCE bc !2t8:p|J|9߾~_۵(X_VTÄ>y6)N`Loea.uTV}3,i5xEHw60lZxoHs};&M%Bƌͅ,?އ˟k?41) 55SR "h4A{X@ +K>h>96́r7\3GF?}SF+ʫ?`]CJir8_13Ag%ɋEORRrBPVZCø'/V׷w7M`D˜35O, 9Zqv/[2SFQ%~llEnFMS===:LK D*C̄1+4)Sȵ}r3R_`$% ֨^'F"(`7!T}eܴ (6H  p,=y%vܐ9ZUii<[K<;9>D~`!$X7u,mP0"W)ZᛊR L&A'%T- 9-f \ɐ@kg T4,ro7 ZJT,ff(= QuRSX-uWiY-دݎLH(f}ݬ]}xɜyo5TcN_^ikSp$"v2f-bId(Gv? -7mDn xפ'Ӻ3j^g]!GP9 %}KLFџk{*H ,e񵅆x˨9?.ѺSc*f?Vwvt9,4L5D_%?^bA"I}]: d=3'WF{Ctv"Ih9<MWц+N7Mz-Tg7|\m1ؑG@٢X;CGRyu} Z_?G{~IbHt{{g7oooA׍*O)Mi' ٠;gy>wj"v o(Ya%gPEbEjݛ[4II!О,uZ90rFٴ(| 6#سEq[`o_^ Wm_}3qaz ∐wK‰Walar "2r-4|C) c_[=(+08 -=$hI0wNV:x ]iAPXP V ͽS~rp&iGaqo_fJ9:6ujh)vJrqTTA)5:1@c2~u~o_OOOƤĦȤF*SC ۂ8d!zSrtʇ)l~}{f_c1W C2p`z'MF\gV>riv(&:c+)k[[[ !+$N.s@1|͍]|>.֥E&V5Lci}QlfSк|z,qz`ke"_Eѻs}=GքXϤ]}*&gcCU9Xu:ٚe1xSnǗ]FoXIQ +3e\1iZb[rxB~2ʭiU*{!N18B?sVi:Z Cb &W>=6?Nr1 wCzK#_ RQToe(25 GѪRRJܝұ_mu-!3YqU#yQILxE&)ۧhuPΠ)1&>"z~2 a- 7Y:R#c?́H(+tk_oLb:Ѿ;_P@N.iMtHD]Zm'PXRo.\h<[b<~{cKu1=20Efli|NL.bߍʣâZ MH]la6Ͽo*)9WFʢ"vmqRgbb >,@(W5|PKqraP*#35Ola'f\n`vq<05B2(5Ѓ)Kȧ-~OkHyXqG[]DǥnZrP'MA. 5Mr4&L\&q(9.2Ԝts%Z03{!wI1I9坓*.@}dR.@6a4+1!`NhƐ;+swC`]0=%xɈK.=4:HIK#+[&(//LKIK(e/> Dvi!:9"f. ; gq1E> w5TVT w5W$$eUL3ZevUۇ';rZоĜʉN*|[Q]SUoʫJ 2vpf>ea-."^fsN<eMuyQqiiI )iiIq1qZ،)6CcrJaUқ"8>'9&:6&*:!> 56>!>mc,<,EEO6o?Z',ǑDu~]~zJb|\|BrJZ֋;q:Yvˆ#I<Wϐ POK͇yƦ̴Ɉ|ed Yfܽǥ7O.+cÃc$d{yaR١twXd+ 0".羡ޡW9A}ޡ?PUv!1F?4*>%+—E/f$Ą>2;8: Ykc'|G<  W!O@kHWl~ɆT,cMrX s:NZTliv#؜b?֟-V̰fy՜TlE0?_ڿ,#fq FCX`t Z˰j\06;foƤ b!0v73V| WRoh0 G}Юm ::y|ڶ?$<*> YqOއp?fɶ anfiU~liPyz\Xu^Cb<<= y[5<9D$QPEJ%,NuՕdDž=tx!L ð>J4"u} Ġ4:FV2eecaJD}w5[KmG<ϓ肊I"(tos/?{cd@>eDY!UND eV:~QP5Gc{>D4&  L}Y7bˈx̦#Vd7OL>ZZH@@dfY/Ax, |3gl6y!`LUGD&@Cgi^ Nua4pU9w&}_p YOe=/,yW򹫣YrDXVT/;Ad˾NCJ+ K+;>9163>Oiİ@?߀WC|y]/RtyM# ʨ#POkF5–iFAWI$|'ӧk"Ԭ`/0gF 2x=ϼ i[@B׭nk{E緶nZ7*%.e v|E(/;$ #(Tҭlm«itSը4-#ؤkWWRK+ H?%a~H⊣G JJg>7 ŞbD6nnJɤ<<8G$-6O fRO =F Z^ԮnC{Rʙs( 5ڰM)!JB L+ [Ѽ'VL:a`CR =5NeLE}3fvCp3o:E` N JiaɎA&HdeNPX4 \.tC934咒؜ѝ#- )=T{r~dR\9{f:ƽÃã-R* m268K*ä`cV<#cL#F5IMtx^PX<ɂηg* =kz O9'1l@B|.I_ JQ!=Y` _0"Sl/VN..Ϗו"@;G#P dƝZfX rT9Sb3u*')Ex&z0A5L @$#sDT(HHe? '$wAGw&X(+J rɸˋuT"Xm+. BSP`(类M=hV^B\\_]m_`'c U:o5f4ѝ\F YT]}d|:iַ_[RR|,WP x7Fx6l pHßE};ŌA3rqepl 䀯5-ͿO<ͥ&jH/h\cK94 r e°{{euNZxv%Ү -gt*߅~&Շ[|IݞJ=QDr A13CNLjm З%) 14[OQѓ=^. jCM<(dȦB4hw3QCP%Eb!Ƙ]tM-, ad>ʁvJX#/i\KC( ̝EW1;t Ri<>: pX,<*P>)tSnz1'plyigo{M)*ղ XيV|g@X.& sKM;ۛ-X%lɰUTHDT >|Udt3S5>Ќ=,&P& TkabkZJT% ">f,D7tr ٴ\>z΅Z}At[:{[hJ.J!Xlf*Bxp=ryN'Hn 1TPTbW)R}Lx+]6qD2re0pמyoIRAڨS3(d\B/Vz@2Y+`3f\y^5DLF9k0zc8r'2jC?Ը Os t*pA20u$S ՜79{&Ѹj45ZB"jB{Q%]aX:l E@_m)YD.},~f }366-(1$/y.It)?><3 IRc4/z14iU23*=rk>| >I+0 s ? +UE9 'FtSR&RDWl3[Jxp/k?ICqD0ZQQc6wOΡ#ݪV%=)4:R4QWD40xS ^a<ᡙ:=6Z4i2vxO+pR}a!o,/=@m˫mX*³*^%8>}P%Ğ~"~S2HЗpfR?{&d?Ɛ-N$H_dgT~x f;r18 ?&'#c̋'Vnj?ZE5 BOK/Soq%nBX5!f7ӌ BLɩ%EXB$ d E (Yp[㽭U CpJ?A?gdZ@ś ˄"J`'/cwŅEpe-%x )".U3 m@SȵF+5%7 qBO":槡׷MdS#;ݺR/ ES,iP+E ^r`tY5nnh9#XmV/Dž -A})0|##.2% y? v\G;:8fQ}s~eqB35aeDzci%B򧄄" =ۅZZ&Bn 棁#5s)4P8{BzOzL _R8BlvN>ޚN.!0I#^ b\&t/ iP_=>=xr&dt' PB{ni3b;iN'Xrf@h%A#4m\\|lG'.#M0aW.w*f!CNks'E3BBCb܇+B o|Ng&>cn&ټ+/_!cvsqObKzě+y挡n`݇:# `+driA;ˋS6;A櫙zqaԪGYCt^o0*2{ $er@E:w}u~jgGIkV׫#xR!شٚV1fP$+ .P-XoC;'*0Io6G(ooNw@ G}q7]a /ۃV:6:` JTխS}9^UPgB:43ff (=-(jOzh14&wD77qDָru}>329G\yߠK842<.24@8Aiv7mUPqCgH0|C/%&/6аG;&^)bz2C?P"ͬiaA@|*u!i- N՛Ϯaۯ'Xq4G=dw$wF#LW$!UV.L?<r2jq,]ήj&*#X‹jasw Q:A왣yRȘ~{qwf7.):1[~ϑ1xfb"9VW_t<F3Qx_lnnmotjґ Omxj1ZtTrVFoS` L͓/_Ob OxhX]_7-5QN}j!lV|wVL\gO,Ӂe^Yݽv!e6Oھn`҃)YI)^Lk2 $PPJcԃվf˷=a{,~QUz0H嶂ȌnBϳ+gFKz\NFǦVAW F%T{ 'krM^`p%wɤjZ!%F,N~oG~ŰLswOߌĨE_2a=t.~oP,r*^̷e<;|݋()-Xb$1GW_b.yk#~ٶ^&H1w9;*&gU]G,xP95^_҃gr2 ދMJlW}_I" LW>?Hm^`q:'.MsCQoz4% %26o/MxY-t O8?)k9YDz?c33""M<›qd_# 6ϳgjP}se(6$jn Nb Ė7%-Sx:/)Uv "@Wyt"eqy|Xt<8GLV4|Ģ)"g"x_^+kbmkM%y"+!"m}#WL^ˎؐ*svMgtdDG6-CS|B_Kf*D(FZnxǘHzilU1I}"cb_.}SXً/r2S?( O=0 f勉9[Nƽ&1pIQQqIIiIظ伲*0j8lٯAՑ4# ^"kX)11 qr3kꛢi#3ﻻ8YlT39%I*P2?'59)9539MKc:N6qqqwu~ZXۇF4>SSGLgЦ?'pņ:kd&GZjfo<|'f4-,/NL/q+_>xZʘ?2킩@LqpTBZO;{{[f&G43[NN%؝_~0ظ,{( ,*61-#;+'';=%162<]t A$CN$g,i>=yEm"g{9B>xY"eZ]v &Jc9A6ru5knv[C[vyѳ4^]Ǣ9i f߿,ʲپa_5l* fquP[~_GjBIsqքZ9 f- ]Bz5zywh|fz^pbClmvrsѓఈhe<ia G[3sO@OB8/~!^-ooh|(75&4}mZ{ e}ixRťe ~i ƞ֚79}@pcg1.@>a`|^٧>0ta4@ (+S}%Y1Oyڠ>⠾ }?0U] F^ƍu6T/𾢶orB!T$vjd)2Crjou|ӧѱIٙ)q~Zbϻ{?a-]f^QTqW, x =q32srx9 !~ {9JdCn}w]8k."$}ߊ3SDJaecKKksC]]MmcDW)A`^N^;"x8dف{wzV5ʔ_EGm]$(ScCCDE:~ӛ̘`?>8& `װQ7۲|}C^5RB"`f'qTD !4;6K7Ĕ*R{ȠD%2Vˇ5!ilkf@ԲNjJQJ ST) Rq @yjP|5I f.ANQJ$_0.6?y$+T*@ZAQzX <,2 i-k\ǔD,U {vhz^}Y8@"DL%#Ӫd׬.ꦋAu3t@7H~mk{èSVf2 J6.&?] 5$=rGwplXR@qJisk{ks gL-p=@uT. ޅ`R3b\ǽk9RL"֭mlnln̩yXVCUH Tjj{S;s<-#,ƘzMT̘BٴngXHk:)_%mdIg> )lZwvQ'xeF "@CjՆ}Z,+B>srʤ1Xl64i5r~ L#XV#Bv}r`d"a}mU<<֊ |LN&Bبbcgsմc($BМVJQ,>ps!0RXWc4_[X7mox\ˢ39G4ԯ>vvv=h\̮IHkYa!\sr~&rlǨ|.Zk{GG,C R-TGsqh3 <8<:;?0@X汧|@M~k'''g;k:%.a*#2&U43g ;|J &sP^"#,8|?ODBftwU-*D\.4]/LycНGd鲄XZli-r@(Q(\7Xn@k77ږN)XHU=LX=??=P } p/i'&8kY8h9J1զ],]I.W#>vsK{,%EH+s}|PG{&Mt6>5eB2*"?3Ba7i}<|N  0L"PA%`4 #m"^k* r kI/±Qvs PPnc{cU+);2c&FC`1:- pyc"TycmIV7MF,<:Ќd&&1V ho Nq|JSPҘX>yǴ3dϞPHC#:u >C8_^Cp,/e"Gi79GDMIz|'O֐2٧iDsW˲0+ hQ꓃ V%Vd}OOuP`RWzJ7cb7jR\np#UFf||Lv pZ eI j!U;Ato%/4k+_çOfD0ʄr2_qM/ Ut`,/kÒFxY\VT<nY KVmt]) |v Rܹ€g3"~O]MŁclUւ}$m|uՉAw\a1c 9^lpBBlAJ Mdݭ5-g @uh:2[ibRymabJn#j5ժ5gLf 1ӪAt:):8++usdaeBZsPwwׄӘg30e*PwER 狂OÙkRmb # 92ϣ|!`xkBL- Xogؘ{pAH(J餉!h[FixOUHքfRi9~\4-6'|\A?״Bܰ{z`}#`6i呙}?qu*Aݗjb74v4Bmacxj6c(xS ن3ĝx>G0wxq~~&b-2k` BoZ00 M7dV͡Hx_.U&&Վn % n_^__^1t W_yc{(C_|B{b>a0!Rb_,P(]*gW7_ 6g&1{`L,cvJDw? ̸ލm#r[p4Ol\qp~+ -%kf92P|oMul(<ې^h{zsafja,/Gvd9'8~q\}jYq~iy_i/BH[` Ŋ[3R*!s&60sRy 2|=n z\M 'T? NUQАRwԸ?HiZ\. Za"h| 3x?b4~o_$JjЩ%칏Iq B}C7#UVWX(=1(5 ㉁bɓ}ir[h9;+z0J/bB 8/mivF)mEP7w.A>h :4?GRɷۘÃ5h":DŽG"`_jKFiXav:>69 :q@ 9T;{D{3N?LlzѸ)Rg4[_YLyot&uPHsi156N3SyԸ>Tiθ{rKɾ_oW&r=0rkN|l3zjlf,Gn+_ƥTLR`R*0^i:iF?njU`ׂ^N*NI# |of!566WJV/oe+6њVv6`%fN~H+XozC߱)qA\Yl\‹N*;b~ՎJȡMwϳ`M#Hd 7fǤw.y`"U?z?J.;D "P,n^~92%HoШ["$In|#\ѭBg X<>kԐfߥGD C^B쬅̺݀E\YLdtNe"HrҸmӇfm;Ux LwYzdxq.,T5۽v;} bHa\ӉMj}o['3#ͯR"[\^]k5\Ao=8B!MѸk͹?jݣd(<]xF-QA%׮Mёwc OqجͣK,!`RFamYR!K_OeҺcB;-7@ ügx,6{z% ZBigZAYm{Ncs;OKt>s>w*æ_Ycy^fnZsqwk.93Ar  Ky~pf/ uu N,Yٮi5TZуf_BsQ O)j]]ZYl. =C:f]醔eF'J+5445ֽ{U$i>(NZ|g"ABapĔdM ܾ{DIGO&]7 4 s㰰Ǐ bqnv5q .˃s)ݹ+PIg v$ɇBnFh |B88q~*~l?kDx5^C?#?a&`s:ܺyC C}Dy"< {~Fr6#F{GDabcccbc0Qa oo. P֙0P #+)ˊr310q81ͷ*(n@ݰ8bCc3ӳScC}m U٤u1SN]j~n||@yCʯlꝜ[]8\4:yeae.ݠZN{yg yS08M0Ņɱ}SsKB]Y :iɁ:A7k :eqTI"O*i_aY |PzUwS & %II 1Qlֳy><- v&\Rp?QrE$%HLl"f ĘaѸI>\kQ.Io 0DڊâPS055#+;7I~^n!!:񣈤e_2tյBte#bX>˗QʓǓrAB|Ύ7E)QZG3Ք uFe:7>e\4Wg|z$GO_O_N^lx JȖ;K O;7CTciRdXxBƋ */rWg''gVYb\,V;' K5侲`'zҖ\:ɄHjB\^IR1s)y:z_iC&Ԛz#]ǩ}"ZZUR MV%N ٌ&Pz1.j+~w,Zcjtxtzu2GRzl1he>XkuFA |>:V)Q:#\bwh5[RQS#NgЛ767,&%w,g-Ѡx|B]lɎJ5WoȘ-C)uB:ŠXo2[l$\,S;OCy]{/f^!Ax3Β+RLmnllmnڴ%R7l[vF*A`0."颖=PCn{TOPAd86<4G+T:ⶻmڱi3)LֆN.jfJ^.HzR?Yj/oVbERxQ٠d#D@76 [$Q(eJmnTBU%qV;#R%P!W2R"bJRdTɕzhaZz"E }ˬ)M,7Fǔ,hPFd\_TQ/W9.R6AQJ(r VՠҘ7˪\.ξIJkm2dV^`IMkBzM'HJe2 wr R ~),FѾk7U )$&*gDG80WJҎW\\m77LFYz"!wv /TXfA 3ճ5 >.$"_*( mulO/xl._ğXa=8>؄ ċ،I c#7*r:pH$iL OnX b߼yxv6'Ό3"HIUÃÃM/+ 䏩wb G Peq'"3li%2!#tTBӓӳ-V) E"\el\޼Nrl8QN@֙FAhپwv~q~uub)CQgV;dѦI D&̌·Ic%t?Q]1tk;g.?]:tj|E U!cupz3|E>!M>;&j4;NCuvή?}i& 83]k\mi9 iqy9B w}~5Ю%N2+_(@X+jHG9[䗧 H+3[I-0,# ȏ;a4%xZ/?Ez\(9ӲնiРg6oQ11187Pn|mm+Q&wՂNӮK+ !LW_ 副gAj 4SO8!!I Lʓ'Sr keiϢgEr0Cp|>6i|vpr%tժP'M[~#WN=Fޡɽ\jqDan8 lǤP`px>}:;݄"rO$u4 A~)?hLv>hxۨJ.omD_Ou s/nvn֐аU$2Wh=Ay`ۨ1<`ojjJJ]}'{ ;9e3\<;2uMj4id5JoDO68BmZMzَvu mX~63l #:#dA#e[z;Щ_mњkPlXϊ(_RV," `*#02A{ $\"&zźg! ni1;L@ 馔b݌hP(d! *6vPJjne"jS,~@,ww;> 9b`̈NώOjJL "A4ڣ<4kLgΎlfNEyg5% iaamDPl?'lPR;da\-oѨ\.51~+AɄJ܆!t`e$4cYk`N M&TFl+G"|˥} &im٬6]jh6}q`Ӄ;I~zCw0]N)Qioڍz2$юDHZ%&{R&Ou>Yo׊"E2)ȑ_޲I&Z݌L-V!S#.x@/ Yx6"/ަf>߅%SKUS9C>(ⓚ2" iz g׾\mnP~M/}#t |]ZHTK}C:ۯ8yct^CVfꋨQl4瞏SZ;ɓMŔU˯/Nthr`5bNF=C*Uu>\oWuG0eƽ30&XАYUsޯșu |bNFO7Sd:3g_i?pF&)H RYg(s'wDH|( Wfٲ+¯hBqC|p}t;&=rٌ=]ʞ=^VH!ǥ/w$;BCa&vU2WAH^3:EF@0E{"ܢ=(|6cm&P,#D3aZ?OP,W;k;rFË믮<hBlǧn|K Hr8mY–5[ BԾ)|̟v/|'Vb&p!=9u;(fE_nd惑 :Z7hM'Dϙ\WX7?C|?zijtr!k}jFLz{Q<.IU:mz|~ΆYŘ_jԺ+hf2 ^k cGYߝk-4FMbdN*Bgψ/&JB]D2d|:IUR"{hb1%n#AT7w(D}\BZ(ըѥ⑊H>ìn\Qt\(^}&r9:/1" ؟߿  J(QIu (aH'UOkR:s,yoH- QH\79Hv#Ua=l U!~_lR.MX?Am\oQZ2+֘-;7W5VOCP߾{߾^U66m85WG`x w<5)=4.= ޕ,*TAeó3ۗj!C[b 亝׳M F!\IW,7=ڣ IX|I"czb6MЮ}ɷȖȴ{:<65"JwQ2!:PkQdbN ڰ8*!׹T!}"rۗ2p)&|+'=1EetS4j=ZN _N6g iNEbp n\d ROJmsT q2){' /air۵I~r.yBZ Z:ұl^ٮ *=~j6 xҲ2\D(h9|1(AJni>9ݰ2M'/6 ihhkYU_ Ji"g¨׈cqrg{^B#L>f3Wu{/$(N&$RzFV4PCm29Z<@sM`nUlb ;oRDlZӪាښw-=}_ o.'2y k"eZ]OJҲ^zY^򟤥† g]fD B10a `̬s纟IX19===# +##-55@ f6ؽA. W!k}>WHcU\+ [$8<1%m$Y(+"< A8o >*Ml{SJ"AuSdZgsEȨ^]5Pg&Xma{*>{Q]59JcrC O󰏂,BȾi-G];E&ӡ`_:6Z] v]'=@0q[lldxd|b|b2?y@UdsLRCF&S3K>ŋ%٩\| uНqk(0  82:!! N̬pmAq݁wWn&~.u[F^aʼoe9ܙpP#)nۃFسN>1E_+ܟv IӉ 95?.%MtEA}IQ6J9D~f.X/D~W(Rlȟ[._Zonotoovt  |~,h;Vė9V AAsaȯGA4mKSuE  026@L/xBL~LG!f[jȃXBfaEM]kGw`_OOGK Be?_ϖ+PfAwƒ ^7t .i &C+KsS= /a4{/ꛜ_E|CO^6άR,IR(T(m9L^gzg`75"m G$vN4`WJ 4|_0(o (]]8PǤgu=4.see. ă+.&:***61u ˚}_ qzk(Q}/og̶"£04K&؄ HⓚA3&#枃v.t:q>N~q#LfDž?z &40IOM&1"2 sT2#Kr-<;9ud)}ѣԌ‚'E%_(KI|Y3P TGxrOS:ÖP: E&fmlooio?>51:< T6벜؝kv*ݹzxXw˻ŢwQaGήh_#cÓL>f,T!&":ݪF0ߒq?݄W%g3T$i+SK,>@.q*rph)r5 鼋7!dVI"fa\DdlӦqPTC3N6=:.TU0X+BeuUFbLTBLԔzޠ~#$,eF`p% c\J`&R41DŽ~tNl6cW&vfFG}5p7Mvvw^o*#c h )+ V^ a?W!οEſhmM33 -R7[6rR!e3#Z,RgڀEEױ/cltLBobXR2cTIR@6:&[";_V$EvSpb߱[=Z}8|of $b\oٲٶ6-&TFJ0OԎ~n>+#~'t۲m!gFP>NT7vwwv!%x+x E.gmWKJQ&<25ٶON*D*˕…af1uttc+%BH,/^֭7x>3:YL ~ ԥDC]Xt ::`@SmN:YKHzG^()&E3.|^ :-:t7+V766{>ݤ`|Y5m\%mol6=ѹ(g6=}=ȓJW轳O?:;ږY)bMumo5x [AZg Ve4&sDCA3L6_n[Pz%E=y>u3Y9<̅\~Vן\( 1ݲ m⣡ԆP/σ>f/1Xӭk߆W38w#KfUx\ԇj*Lʚm#Y߅GKA_R:(E^9ʑE #=ӵ.̛ UA@Zr'8S"R/߾@|Ej>DT=V!SwCc?)=E k;C]$OPq]j<8A3 :G,T HO=+Y2S;p!DJфM Ghx$X)-Х Br?,`BI &6e#)ڟ<2 h*֑mw6LzI9oUbΠN: ɸLlX7q+1 w{D>?k#LelSϢׂW[~֧P C*$4џG6~|~yk3VǙj5 ŢL㕷)=BH?? Ҩ9>⾅#:۱腫lq(ot}y jD^M*ǟ>WhrװZt#Q9:?:96DIʰqt|+p`>V-S>Jֺ3D-0|ͽmV>ɐlG(wد'`|iT!^z]U!0pW pуVd.Rwzގ%c~I=ȧKXW|H/RmoQ\q^DIjFXB˰ZVȇsDD'z:GSi2E`ǻFh:ҭ>.e*F):?;56:%oa*mnY0RH1SJIo6"[O70=J* 40"ۖM46mjG/_?샚qJ`*2o^%LEWaY|0}v~EFpm4mZW%4 mP+#Vuf,HbA2ʃsG uU ԃFXY x^2Dypjd_Xg۶*Q)OB>_l٬f^oK2b(_7!6/D-o4,ǞUfzN'`G>`RD5N|_7aFW7A2цΡ*VӰFe'0] $S^V"T{v|0?N&-X6eQEJn78jQ *N"PvmrwhpnւQD8yMVQ/[`tFukb´}xzLJ{Y1q-,BԷ|Kj .nힾ\n֖ݤN*ơ7-;8K$9Z7<k83G/.* {B!7ѕK%1CtrCqG%Pot'0 4|zBb/ܡ!PI|Fi tZ{lJRJ|=Lu(Ÿrz޷fR* mScSVnf?ݘC,jX|`GO{0E{fJ! LD~c:lt>A k|bV+r8.B{;ld~njT^NK|9.\nA,|?^ſ螧Rk4/ߡۗɠd- 21x~ZŜ0/RCUbc Tmض/>C}>2}g- MgD5趻f6Z3۔IcEY>A ox,\m06ϯ>io*K]d9"_. wm("deRt ,uo;oB'C,F C5g8AK|.uKP/pe5j 'Pkא6Pb,26:s]] 5TļB1T<-^`` ͚Nܡv; tܙ}1ƔAMv)ɦ-2-޸|zti5LI .&7Mϗǥ7/eþ 3H]ˢNRvym0Uy/pM7{>7qځ#)!Xlʽ ~ fK[ݶ --Ŕ֬IzGncq8 j{|7˖t&lnlBGfM[?.^,6,LH qnyZށ} uU 頣/VCYe?nhl֩y35ħS+mTn2ྡSOIi/"Jh.w".e"G\YMp2jZk>վ8T{ l_j&3N2R ׀Iʧ\H:WN"$W֓S9ɹlp D0CKeJ߿l4Pjxi׬ѨT {!{#fڀOz?5^B[p5&Wݓ_/0t׊ڴ X*׉w\\,pԉwp䓶l,Pڷz)DmۧWZh2_uogkT("Bk~v1q Uv=w9O~ZO JTZP''p"_՞ J%Lk>fr49)>$Lԑ@AuQ8|Tx6:/4~0 ):ZJL>9$\QZt 8"iymbCgٳ(#"ɁIibЇ'Ą Tm:\](χnb(kIuC t GM6 B[wvl9ުbRB(cͱM&-<+-U^XR^,2Q' N L6A!s+Sݕ8.wCk+ u<GP̅yC.j_4M.QtDfG[ƙj^g-֗q!㳸~ZPa7yoÂ4wxjhS}\M+ )elj{s1m=&SZSM}S=uE 2g/n^v7Qʻa>kE*#痿on} I\JAۊ-|(]=j#6Sb BZN^a~^EmEQaA^VDĦԍKIPOG5{5 |%=k_3z*HXlD"ge xRu]aKoDu3={>4*/E' 8")=q`,DL< 3W/$n^HlbqC]X0'3==-=3mltOp=XvUq/~LJi:1\qdvi`W撢B< 3/R:ov>!cHyOgVWfGFǧ&zqwWq۞஗/b||~-%iu]kWWWGWOgkKT||XhMAbc7B{y``06z?<&_ 3/3- UyFNKbƍp-o?;GF@GC2UQ͎j<<{}@xh_Fo:|zHzOHCEGx m5n|C;ȣs -ϰ;gDDKes!욓?sqߥ[/?_hr뷿oUsi^ӄXZl!D| 6O-6ʯm4rEI}aNP`s- CW000ݻd36 LX[ҕGhf!<' d0 q1A#P3=7 r z{,t IJ)AlI[>{8'nn6C[9y؈ݝ8R~EMswPo\B\ă@?w7ڮ<OJY݋$>y;6Je1lɠk /p;0~f40|/6SL*yqntڷ s4DWmijܣ_Wv Q.'R@|7.o`,Mu>K!p)s+0}B#޴ -g(bb"###K%s]IoҦe6Z < ҁE.1.:,QdbfEY"^͉uƹkw7LǤʞY=\HP^|ZfFFzFVVv^~nV:1!:"",<6Nt%">!ᙵ#Rtu*&,,,*>%U۷5ռ~W\WY ͬQ(W^B#n'8&rVwQbDx$&1E]`p:mmyz ֣#"%]<m&A]yIߐx}ZLDsb ى5[$9Չ1q#w&R'^ AOh<Ϳ&FEb*;ftj:=>̒ɕ*L.ז&{j115*D5顃uy< i_"2*ڦJk482ܯ< =_ΊiMdP w@2#Н\ E$QP(3mn&E7Pqϩ&=_`2iұJoݶv6*)TPgG\*ٶmolZ XĝMDp䔴di)2PWvtǤ+ZF4?LAHiswqGG&B*p)tr-Ȣi)&.E^|FDI 4k_xɪQ\o<256#r! q:kId+y2K*xBf5./rjLj'u}\0!'b롮ԟ#5׾ _*uynjZE\ [,C@߾{>RGHkBJUZeX̏yL <5L-\݂: _dga7K׎T *'cQfE_ mt[\ƬU+XQ5jCb7KpBl'&6PPx#mK=Te Dkf~RRTY\A EBGI=\)? }qm-SV=A0H=lmuoy|ޘJНbkta4.(;Ɏ4HSNrtЮmB|e|Bܟ{k^A k: U:Cg˓]`y dPTs*>O") खu#xV0Ѷ8Lڡ%&=x>)W$.Z{rYL8B;FCc?=Gk m$5{YâldBwh= >2 Vj >}m0Jk>x!"mg)%Q|9==4Fꍽݙj))u@",p%L%!zk5Ȑ*T+4C[:JcbڐJWpB7ОGA18X./6wF]c;>rG._OP -\W "bP5#e)4M|bj?9!} "QUy*^{*m YsDfٳRwւq`Y…AƲwoG3N1Z!+.YRAVF% LdW&U'Zai`zDBϠnEQ }<"i 樥3jI3˔`Z|mȢV Ƹ-beo,=VxzACK2YOBB tM?׬Sm9CB1Ԩ5_(iGhkrfjVQR{gO X+JH _S צjۡ#.!R5z&wNDĵozYDH%WZ"M@e+mG%D;HjB!Ή~c܆{|Fͭ;>~= fcwCI}vrxiʕrf'>ZvI-[0o%`k>E{>pAk3;T_M&  WG- Se?; Ukٷ77 >J;Hd`B3]5__^cj..QloèjFUHW3񁎩;BW/ vx1~ f؁ݨ\kԬzvuk~餔[GLx*Rki*XܡwCV"V/'f|gs'4#ʌ++Պ_k(_\i;SW:"A,8@0eS#Eج^D*EIGC0 ؎!y,M_JQR?$c-rZ2T3`<*^Y7ퟢkpl(D\6I]"d"к;(dfzԿN\awvq-ȯI,\oH F8&E S+\1 e“ȵP ]0P'{Yl@?ho0k΋Mk#:2N/GhP# @ԛ7vZ]Y읣|w?]&Z-aLa y oC.8; l:b*cmcs,ϯ%aQ&{g,|}?A5]k7?ƿ, rG=5/.u `܁n>C|MrS}stHq߿^:;ݶ[ 9oJ_zOp:Z:vIb?%דoJmnطvO?}zeW 8LXj>ʸ8;=ٴouj)m0>pS8p֌7afHAl쓎U0.(ŗ4BBVM2$& ))nm伉HO0(l bF?cϦM ?:ڂO[67lf\@e0zBѝ[LzeL7L1:R̡7mɾaج&>a?U9J-]3uy]>q#T.{&01 &_.NIN_}xeyye҇4R9XPUp2e?(ƺՖ^ZFyBJ~:ОDi-te-UL7wϿ~=9xq-=yo3܎q!n>ĹӴ1}KdԖ.7"x[n>?_O7p.bc6~n X}u74Z}j2!b [ϟvuBp"_yog\ E cC86j'+S 䗃LJ C2Ծ(`ɄO 8|y?}{h|  mY~FӪV|R\ؤԑg!}911Iy6in(;qO{SX6+K'ִhWGc^*%,tGy26)Bn+!R [5F-HLhZf B%ZD֣MJ~,$%4Q w( OAL`XJs$7) V\?@5.1>'lu2@ȧ-& GղŧXrx< f(WY8.ʛxky8Uж/$љu&_$av4Rj :?5U]'2N4WmQjt/4̟*O&Y޷u ϬPf(ѮW<߾&n̆rc7yo;1E <> K(n{7\ULR_2s9!~NlE>=;['e6,M*߼ŹiD6iɋB"5*r<1JӈXOLN)(JO!BQU2+"ŪP1ghntȯ }҈Ixt MLLLM $ uvّ&oOgg]H@x|Fnokjkk޽}SQ$ sE<3 j{%&eCm>lB@g]xQn` 9Y'(r=.ὐs4:{reJy;/(/2Eqןۿ;kyyR;'A.$ %<q.@]>R;բ#.hԑ7̐Lx0??~zC}=p!A~r</4PrAlNcQvQ kQ͉9@wƙ;>>qL]|[/F   BݼݝgSAơÌ'd~T\04ElIbcc0M:{G ~h.DȯE㒳 +^|In:.q>vڳM87G)|3021919>2<\, 04zⳞo01hLJѩ4&F^__]]O 8#;,‰\"[Q=Ha2Y 4U]YPV&k'F wCtG T<7UyA~VfFZZzfV^IeM Zk{ E8KrnX{la,-NFEa0q񱘘Ȉ8b}\>mUV _"{^޾o@U6&2"<< K"X\R|&*q$]2ǗP&;*H!~.|U7p/ixY <%`EDbbb,'9%59%%%I)_IV?dc؝g"(|E,KLJ MWT\ZY`@ $v3bhq9F=N~5,UC,*&)M}ޏ]=?v~l)Ja#2)sϠm78g |Z=BK15yevdltjlrLg1+ ksSc0!r֣l4>Sj Z{nlDt9W"+|+ lH@]."%`trg wʅiH耇L91 ˯ꙥeI*5<j1I' =Evue1渵~wLZcfTD|iO5:^!&N*Zm0t PW^A;ޜnf $|VC,Kh jcjt$q˔Pl۴ STuF٤$"P̚HJ5_w`T~뚜ٔAx޷@4Ɔպi4 FA#R%k$ո;NYDb=L1aXz՘[6l4 :HP" joa|t܋- 켋C c1a1| ʵVYVEB_b%"F%8 =GԜȥf'}";U/)C$Wh4jBo0M9LB9<.OBbRL̉(!zN@+JQ)mN) bkje1h)% b%셦䘘% 7?<Ig1%CiNtd^U!Fhj\.Wy@6jRo:j:LĜy6e3:Р>RWϓWba*N&rAp&R1YZfJkm7fL$MYaR#ooLXԖg Drt6*T҅;>ƔɤR2:!ء;E+y+щ,»,Ks7nMT)aֺeVRTTA\wBZ6w7@JdbQ5;"~QCBA3!2"d ekwwӾ}xzmxv.BS͝}c3(wcF @1 1C+$P.]*Mx1˃.֓h^䉼žtppxB (J˛גSBg>;3z始 ;\trDJ6Ԓ;9 Cl G֢c+ żVjY :<:=9;|y,۵[Mjl*G UvN.~j/MndF"7vqqkٌ wuJ '|\}7*4&ƾ\HյӈSMr5dseʳ8b7CtU)>F">ٲbym⣡)W@ZO&Ȉ͛v1fHBfV2i_5+4&:5BQ.zdŹvG2gl}Te}ng}w@Y9:1 ڡ+OPƣ|'߆nI95r$.sFP]EJ$b9Z?תɗwxe_xU2b:_QQWΡ"=IzN.!ÜAz -,;玼aTs?RD`̵+pΏv!+FtkV6%U mlC{VM]꧊=ϟ!泷e*eRdybA  ѕs*Y6*')P="D"ߐH 5 ,T™~?u#НW`l_="` d.t̲{t!>#W!'_'e=9dᾎϟ26;[jr?U 7d}}u~vxh}R֠TܛFEBP!wq4ߧ]=oe:>;skPJ&ݴ5JZ]RVן:!׭c `pykWWgFM}|~+`n342 (דρ Փ-1s|9~_;?8蚽SNŸ?_Boo@iZmRְߝTw`U-"ɜ@sq 4Cwrz׮a~ F%q:f먼!(!&\`ndΦܥؼy5557:AutnoP-):93MGR|uzxm4|sOKUfbm.OI* Et~qu~ mzprrx讐#0%ٰ@3;\}k~U渤NX&W c$L͚H~o(APԒ^G\LPb3]=Y Q)_`"b>?9v,xTHt etΌ۝P]J#pe$GBl[& (J<)%+U0.L7|ei??s|==>Y(=q\X?「a9!zU(E #8|pq]X` !N88.| %tV [|ma=d6;{;PM0]=dvv!c͋j"׌8vz*d8P MIϊ*UsA`ko4O-,#(v ^IVIhNGU,3BB5YMuaʴ[`IbI6&] ) uI}d eSꗌd~f=<=@]+toTJE`̔ q (&+Y"W 놽cwh0VI i z\;3b%.+|M4?Dll{hnZ `j!3b|p:pC`OL5/C-ZlCv4CbW-rbv7KПuz -!)'%~b| 2T@&&s2+}im|XDiąI~;+/JI{5 dd9|ɄK,;u=)ԫO|Q kY2itV ׾~yW)p{iL_w?1t-ԫBLK^bZ ;aye$JԤ@; 4}~-rYi %0]|`p{b*%Rܓ^PoR#Ӵެ2JkA3ۧ-9\Ygd|r}}uvru,.b_HWc25|fgWR9lt7T}Sm~ˋxx aA ܐy)^L1ķ \7Y0)6X6ri=,Ts;Xep4- $saBn܎١Tq{{`g 8ɾUXa׋}XSWҡ!K7[56_ägI`>=Z"קxR/g;h(E>rPN2Jk=ߞ{Ҽ(l6˗sZ^'d?>ڲoC`&^'*?>szv&zF"cdJ|~ޭ_vu̗W@kHbF%XhI{KCQNe/tgdVrX%PŅM$?Wft9cizjJD-鞟kJOH|ܫ̴9PtNgڽ(Q{WR9TZjZJ*Z# 8'QJPaZjZqW 9k:"RF+|?"VUܙ9Ĕƥj?TQUڷؐgH qt®0&o bsfj-݀I}|ҫԴ>2/bAo9i[%vTvk(jT^.!KVzƇ#߾xELV8Լ }>4 ZCY|M{@{te=ఌoHr\uf 7/J6/*F%ᬎ$%_/0&$?DQh/PLADLHz:DBԸi0Z}J"Y˃ D܋iBC6k!WxBKMLĦ}!3y<_i4*mbU%2iٞ\BtRT~sdICZuhnBerJO8[S+K <Ŭp,6t3.3oCa.% OS Z(leo+`LuEᱩggՁDNw>~ ټ{HR{$l򓗵3s# 3s= J2A`\rn"{%7ON_䷃lt<"{Y/jZ?4Կ}QI"ఄd19:*:~Wu=&=OŁ@H+**{VUV\5DRg¥g{XtTz+of;_$8)9%%# 3-5'⓳*:&ibpMI]-BZ^ f[_j#\ R!GHN+}?J +rnuLnhMz':M]]m.JKmZ֓u9#76}УK &uial훪w l` t/I*ɩ '|1J^ZX\YhyK{VLoܑ@@ȣ8BfꆖbR ?8H0FHÄc .%#gOK r GP{! iSa DsqtAyr>N+o(:1ͺFO>^+ݽxĞѳsCx{yV{BK]MzߒjǍ!??8 n|Sz 1:ƣN(vChNj{F } u!u)lA=zF95~$`;rAИߥjn~(οoy&~(KzawI4Qv=~ÒR2rrss2SxLtûA.|jA'oz/,WVcOww{SW%yؘGNe7g}~|\mY`Pљ5 ym}ymiaanz b#;l2B9.O>˳Cn8>kdv`u*yB[|4 ē0CpTy3\5 me~CmWo*jںfVLX"ntBwN21$@Ј<83%).&&66.6>>.mhɥN~("F u٫\u0 Ֆ&DDDED&`GɅl!s]^v\ gL 4445ֵ7{^N%EGƑzHcnt>zvF9iT(#ݒ4oWhߐe 4!C(x3ϐjFh5i!pwcgZ&y\D}.66 bL.K{t瞆F,qisTTe0[&ˆU pJjdrX$r?*fբ*]5d|V;#EՎR8bcZLf9" eRBjeHPyWĄ(ܛu=Y\*r嵣˦J X"LJ Jl65J:2n]42!_$S5r1k6-Ccr_R/Om-![}Q*TrXm4, qJmx9WZ#t&aM%O*}e`g6t<LtFO҂otMZ R's&Y\#jE!r1me"&-Uܜ1;Fu̼r;%1i5sl(`2 }ǮB~/LMs%|@ԛ &-VI(Cq~p2616r ſja,\ggJNM Q&'82H$WmF }@6e #3&骚ܖSEŸtSùјQVHYRe*5jT*J &nb1w-ChK*Am{y 7N O,L[[vh::2jF+b*tzμwt-ۛ J,CEyzk}?$dn?#vBfJپan#hfЙ捽ýMͶe+2ҜMJˣn|-0rVJL)GHPngw\gG[6PHh#UҚ7wvw!'HD5R1qfݴ6h0Ch$ #:<<ٶjlO4B}ß0>i}R^o×Ա.k1\sѶUsgɠON.~&z Z'W&Y(Qɝ}(!354l%Vn>|Mֈ}g9݄Ռ;8:>A#R"`L7.3Y\wӓ !_TɔR[+\ tjv`"6ް`_juױc.a7Ul~|[v-TNDr C^X~ qnwS:ħև;26ѰBR_h8^6)a:Bi#HPa7^gxj&3F~e죔ߛCx`^.+i )C#3# prGNZT}wk`feI #7XL{DcL}rgh$c- R$}rҧO{fZ_Jʟ3 Z jyJRmrUЗe5ATg^BGLGE *!g'Ֆk>=;)2׈l,:RZLFYTr0./NOܕbp{3)VFN|2-8KjQíJ!#$8F{p&f)2˸zs2dn9'|j&02_tLt,JbVu`$XT* Dtuӓ 8ݰ}[}!H^ b]B dn=,(;@'Wr4VaA o70@~V_ч[(9=?/{*fj<x\X:^>!z"9ռPRi~`qdtea=89?r`Z%WD"ɴY̎,gvPohOz [fĻ\Jʋi)#5ԱzeEgslQ GXَN݌5$㶬&3"NE:\ SJaU .MÓhWBz2fgP:V"Ŀf++`{E2is"YjPɖ`=|pmk-btaK>4K(L,c~HGi֣sC( &1#r0GfOi&f*bcKTcvy VQf4t73 ̰ `dz'GYZ/'6Qסi棓Swhh\ѨpMcSqqohʄ/ fU1=BS`y"U;6VT( Y~Cj'aU;'ޡ}\Y[jbW%/vݴ֖ըR~IiSA9'mm&r8?1*S07YnlH Ș /&U<ZHGT*-pĿsdNDpL"*2jIUlE j/A>M'HkoU hosُOЁׯ<<5Kc[ :SIâb;Pd {ݵ2]<ˑվ z Ci:W߿K0=<Z_lH#_YiH{w!FBj_HctrI]x\՞.ms%>w 2ӄؼ>ze\xB@" {0 +d@$RվQP&?p .;|@`À66rq!3,H5rar,!.8C"C̶ z/Nr!2Kv0f|>4uzZJ(OMBuqÅȢi|nn fv5>޷&PܵXmv34U8˧3*G|$rvjKï*Y͓߮ubm]o_ldz#B,:^q-2k%=9%$C `Z֚}>2J̉UD?N&d2u:WN$VLe.C"ݤϒ fY`"ׯ>ѿ“ˡݨS鍠P+8Ui'C>Cݜ̔ҮeD֐vYMpèU zJ[KMM{;7!pD8/oЄ)V B D*!-2='P/վYR:-&uE9)"gqAw?8qb$55%](K`Sv>_hŴen_Ϡ_p>'St qxH>sUҮܔdBv/b(^^$%=NRH&fW9 3YJylՌepܪ%P*ZP/^o?_`m+8lZJoi ƹCkѲ! %漅bj `!̊g05dB>su:6j: I0T{i\AB>m* bȘ*FZyYVvIW Tp8BvU+Eb9Զ,:;AK9+ex,0^ tX=ʘ{F%2+'W\6-Xlj@lpK'r8ž<"> ǠvCMouӬ$,.C:)hnF_d-)E|M@*L.S8DHy 梵ܛ^pbURnKA!w޻ A\wN|^AG)4~EnrðȘx0<61@Е"%v$,bf0§޽]MUtB|tOzxGkC$4]"8pDZ̢5 cS33SS`@nEL@h)\oy,bx|/lLc2i*BYSi䕥9n:(iQ!D$(A\wmkTA^_7Xi*M{#;F2=$(q\5>;UY^FZ )9%-3um{$ɦ5H$&_`hTƛY&6(-)NHZ1q"8?C: @$71gfEDGL\b\\l\\ &"<<2Yv%}ȋqzTJ!zt~+;EAɑ,׼{hdF@Jn~?;&&)%+ˊʊg/_z^FŃQ8XaI!}vA~!u2s&TAr~ή-m}C##]ĸ؄C|Z>"z7'̡, =?>2:VZ=HRWdž'&GGF֨LD_sUq&>+hiiUHl@!Sb]&26)nd+r:;911@f \+bⳛizp避7::T]a+NM+{? gkzVΥN PyaR!JE,pK !H7_a[1@zR5,֐[ Z# Z˜c ]!_^|h`iq!.E/)׾w/(bI,/uzd0RR W,KqD(bLC.6׬!&7I:cJ>%ɑQzxgtFŨU2(drR[.>˦kI\54+6EG$bUJ@,G[>ʄC,&˃Ŗ ERRQ+eg3j J<ތ }y(R(Kk|lhRP b1}|dsBR2 Hy+Iquz[nX뙪H+.-$eA]> TiJ|=5PwidZ.t6W*AjTjCm JLcKRP cON|bUB.&d/̫"|\ளGYȘ~P67igIR)R`r-E ł<1әLfŨ3E5&Gky dm;NM;hu{FNonحJ" ׺0 ohwIw|<Lb9bqذmyMɤS fi25Hmjٷ='-7Sp{b1\n#!:BkmlmoomowOwl7MKTݣ--ǙjT"X͉%S=}BHbLy _;<-솯_N$@Ct|{{'D>QD39H-$8B=I;SpիB x戠] }1(sk v m7ܑylt e8|kb^o#f*p*wG xuZ聯l}(R>#%^pog fr¥c玬Vn2+h]$hǾ ڞ%| >}gtsc9/  +#-VY<ʈAMΖ BzOb]1.6e|=iIub%/:l3je||S0XgGk޴21tAАCoXHA"4QJKGw莼c5(uTo E[ۡ阘_+Ӯ4B~RI+1RH] 65O6 ]An,ZΙ|/ג!lJ)jƧp yTYY\j6 N}<=#ifBz縒9K-SRq}R KVݑ?;JкW[Vb jp)hT! +D,KLgB]_eswKZȭvF<;0A2K˗eKI!tR*O$|d:_OW'8FS6Jw@AAjУ$<]-OGEcBeKOwSJ aF4FSm.MCemC^QIbfV+tm1}3U[(RL@tb1qǨ ^wgȎEe0ɤԤwlī(D"Ͻza/&h˫Ξ5h^_쀚W M-ʅ x|P<\!+g0\\+vugRC4>!{'В~MBJדשcа^͏~2Z1ShVԨr?S5)dqj|DW-*Xi20'cm@ -7twz IN=S*|9W~OձI kRX[ F)흭=|}yr %Ҵ'Y| {_(iIļ^Eʯȸ (Űs1(F%Y5%cő>ΩϝjY8–(6wvvQ:Bz LeuZp>$we=pHA)z>7:,ٵ ` ϧOHſMU;֍9KKO3KuiG!cs4]!13|X}Arf*c^8┆zeIm#3*',\kzPj[;LvቯY-zGtwsG'(3+%i8\j f< r׫YZo߿~%Nw`WIrLNqu{a*5-stv~vuK^b /PlLU$=[RҘsrP;XIO~=JB0b+S_ӃԥMu-D߮yown3cؼ.xK,0w3=!m##βstȬXl#N_nʈowxz9y>1O*M:usww˾wԦq)]k|rմMFVBz!{^%›w ݾ]7אI*j_8b۠0mM>q|4677V#Nפ=5q1ZJm]JܺIUq-=#5sZC->ٳSXbh*UZR!5楧UL6? ל 9HW${T32aO;us_B 7#`YZ3[z~<:Ύ?IOKM3BZ.)t_>FCZhv|iԫrV]-OMMk^Mn޾w^/g%k&\1W>J(]+PlUq>BSw]67'j㴆ɥw$Bn(#H%b\g?:H]b};h"DZx'[y98 Q5:]EL&95kP,)Uc6Ա"\ltJP$`,8RL]?Z_ѧSxB^+RЮ Kmg{F0w Yԅ7,>Q\9ʠM $b޻EI`~|dS$2 {ey*l0zxmFmx>"n9B~mv ݮf;:g$㰸F {m@G6/1UwB $B֑2NJJoԶeqW*3Vz9]=9b܍-!UP10:= rgOSV>"c3鼹'`TA 7>G{%U`%4š8,xv*$ii|Z~q=TK-U1<9?33 $ Atɛo.wJwy}u_C|e7DLmdi.|=1q8fhff;ffYY%F3;=3*N~NbKEgGhoWW[]1H 3ymk*ZOY}>TykIHX̪!RҝOa:9g6P"-AאL#,NhĽRy˴@)qX-eyp\ B-XHj $&'8lu`â3ʚ"!gsizgri[(QʶfzIp ^ hpF+k[⬬,2X;9G`''ȗi>~-(nn'g&= i E:@S`d~FW5466VeQ1)q^0l1$UD&xLj1vMm,0w?#j<~aFЍcgg^~v˘,OA(EQA$z"?Ny z?HQ|Ѹ &M._ $( Fy Ff{<ѳa6y6moplBx|H}I6~^16}}LLOz6`LۿDH=4GCt<ϡyﭿ#T Rlw')5WRa}f7)68?ѵ3U+)y8KI5`C8zo H!>b?|yBb2HIJxqܽ(ON4 oʴJhS53g@-!91!)!h &gj;7?PU冈K.^ԫ K5-= ɀo?ΈtkvR5_қAޙ%Ѵٙ%Rٹy9yY4  R */؁,q$+&&%`M-/^ttu4P )))!S"I}=P#bVI-ibfX͍u`[M!935%9ʱG3#,~P4͇4s5 XzEܖPQeեU\RDuOKL!Բ-ҴP@vЊW7'0('0 Y݋dq8fdŜ[XkɠJU*P* Q1)2(GSbw]Nǚ\u@d2uJl{#XYW{G܇xCG'nAɢTj809{@n6VǦ7*F ^o9eԌ%a0 ]е>gY=:h09>k៵w6dToMJ`:xfJz q˥IE,FYJ,-!= Zŵ FA˝[ؑIJj6ϙ,FnZhIv?ya.#>-o`GuzѡLt-T4zi2,.[j2 N7%cd 3eRszd4ZwNit:Ҳ{ڝnn6 e˗ȩivv/G+tlfK0S?;sX,8J6[a 6 u9wVHάǥeHl[^_R Dj'Gkvvɾhӱj8fb]s-zliz mҠkH Cc Z\ds2`p%=wOV_Ԍ(ܷppRbJT?:>hg_:;rhsrݵ{xD><:!f>8&GbcRrF~vrrttp|ۗ'njyZW_/9$iEsie+@Lؓ1noրt[ O_>}yhEe/Na5zAf,!du>-@D@ͱfV/ :O\]޶meƆF!qAn1+pO# _|ok0A Y*i&%C@G'o>|׎6Uj__3"ѱ1$2I唦{՛_xלH:5V+@2uX$a *{ /k,)![}fa]hQ/oMǿVAHB^ $-\Wehaioִe.KMJ4 \~GVIk۱,&D8Xb4-[Ӛ-QGhlg[PjLzH={; p/bzw=G/"+^;{Kq^|-?;ߵ4jFP8 8zIfGGv|mc/Jk]rb5ytjLϮI ȸ8ژɬ\ Q fLrֆyJŁ2FЫ ?RbҔ }3,00Ŏ1;:t[t (Rhv:ww;mzxg\mK!i ]hqPaI`@)vv}z{e@l,ҩbm--sC3u1RID5CNۤ UB!Oo m|y==YG A؇6i3axn,xְbU5,k3\V ?^BAdChA+rϡ Ԛf*pU"M>˴/a35JxqfN=ԻZx"cYr'<\ߔD]hxH9o=+iwiਤkFږ܆7"o 2^R-]$Y٬_ 07P(DMDn_Ư^_u`=s'[yc?O= B8‘ȵ3p\np!XW\ؠX:x^UT>c}N4 ^{?7Ķ>XSzyq tTW%=w֍P6c 8j[x }?Cty19O>?~+֋s^;mfV#-fy?"IIbőz֖1CGN>M':ɤALcDZz:ʙ.bjfA߆2w.~KA+^jM/]Nf\1<EOc^OO#O p1'۠ƹӹz~=%o7dG'/C*ֺ6&$ Tvۿx`֊ƹZ?]cγR33ʖ9Ϣг;a)ˋX"g]Y# -?X"Ok=z;-@-XODF<eS=4Z>̑CF: Oti|<;p; RWLgO"}@Z 5Q5 ;a2Gʥ-l?ovUs䒑M7fC rtI%cky:9af^l`ŧ?݃$up;t bsrӽ=C[U^ow3Tr Tg8yFn 0lpFP8eC=:@3"ynJ#J&t~ f!j>#\_a [ I+g9>0"ӫxT"ױ,P>}<7KgƹO_ߝAjZ%ߞm I@~bTB-|K™B K*X+4 ՛ |nt|>8hL dJFc;;qHg7&N#ٚ.1X-zOP}62R vZ*a8F0#m&2]TbDc.$7p[)1a~#ZhCB#S-6R1ZpeZ[: 5]E&lk*~8U勄Ǝ~Bm^RIrL,1|~UIW;gZ'dpzZ0Q}_b߹sNyxTbeJf9+}Cɶ2?!TzÈP`q Zhp<S)[ná1-ghoh`d:B p9zg8_ $f ȡR[x%3$-C  @%ݛ*HqTh+ME1iXxL<~Z^.cAePE9q8zq[.VGȍ!P8;!H )=PH&y$9@{'PsWEZT[ ! 8]_zɯʅ\N!)tJ-Ȕ*\WuVrA_^ v?\<) j {g73]y#P.飞Kj9<wc5?3=3\JDۋíy$DM[kGh,i9g|83] \㘰k\\` "Q (K)ino.!'<R)c-6z~_H{O2¢l 6-0އ4KdORR>"~f`hl)xh`y޽(VlW&7!-T% jHF/ hN]"?]F4 K 7Qz9Bd`PUp7p7W}^5|oD RPO?_ i'<OA{~ȣvۨL_~ Uj/ݶP͇EoXl(;ʭݹ&pl>k*lkTnc6_R_B{Y&aan{kTCnY@M oV콸?}ɓGDFC^"]ܡ{`hd̽O2qJRȸ䄧bP1@:Q~@lksQ|STU8tWRqiO>i(wקc*Z<_}I-jd.om,/1gF{+(OEGvאPf1J{Ǚ;|~ȄB|!sח&{Jh:4ZToF𵻾y}I?#7-mK2\ZgNM-lDR.#qh=gIIJg®o|Bmg [̈́Uduz=:ćZoC&VT6'ii} `"=6|? 9a1! WԷ,8ځlԪ$k2B1 lZ 3,Z@~BT02HHŤM I;19\5ә4ٱ6z`)55P)Ul0ZUEشy(<-5E-B[m6T&atZ<[T aXb[4ܡB\ZF]=_~ïtGh^R&H 2n3!`LZ^']d+tzw&hlE3Xkڄù"r(] JDB-Sb? nt-I04w:65kI 8ݣ#l:PY蠟gslBPbDV.Ḥ)t{N]6SpjW/1}tvqow⶚mD3.أ4bBa׻޻cخHKv8!8"?zx.9m*2.^ﻜnG@'-H+`[cQ32m:=<>{go?|||iU/OF/O8wxxvYFf-.֚3#+8j7OQV(p_~ӛzL5X/޼*'C`ɖpy  qx(O,U!`./߿}~g3X#bѼw'pZ ƧSjXN)8i[H ۪JNZ^y?NF)sP̮w_~zw݉}5RNQSGz$wxCOVSi __S;VKpxRٲFؔ[Ud嫏PbPi ˿Kcߒ48&VipЧGد>ז: <=B&n[d'8$1&W pK2=twzwx*yRɕtf_V+C} {^Ҋ1Ďm5JDRv׎B'/5ЬGepMeجiބ|n۹w uoJ/mruRO'>_ƗdnwBfzt++u~_ktAzas~Ŷڌjƹ,6xY@i-a5m'i$Ϋ^|-"}|_[#ۍztTM\p;7Iu1|(̣ڸii3$ "09{mFH+[㗟N<5t(ٍTƀB5[$:ɵs*pR0# P‚GZh tnMX`z Q띐{^mDv:@,P(tw2bWa[[.fc ;ʰԲބ!t;L)d)H跗Gnlx0àIuxleTdcga v;rz !9ć>{yvNi)mB-yܧJY[zMHvnl 3/] G@'7٨l%Ū%i,aXd]JZQ9@?~q(٬^iJ^j4gʞ{L,gVh:A}[% *΢HQJ%(n :Bu&e,*xi2wc2:.~IZSk߾rS!j-ir)BFAp[)<1gJ2 (x "%{JmR=3jjsQ% 592vuh(i:yՊMќB-?]ZpWmD:LAwpRc3z5BF+&wX9/=NrnHT;KBV0pe56~ }VS"qqT2_IIѵ:Kөu֋z ^.YA* "X\ʦ'y*H:r&x#}iDclI='mOщmAQruV5H.NFɸo> H@rlcJFQǘI ۨOK+g [59\Cq%>|ѡ^WfU+WSj=&6jh-51np I3[W܅{yJ@FZk5j }~{urx] Sr~:1 Bt̒6,| qCk_[*]`˓]xĵMM8Օ\H O#U/iYm"ii' H"uh"ߡ,Ev*p$ >G}{mTZCZhW l&sIfD{e/m$Rݾs£J3+gANcpxԴ_/R+'vnHׄb(z [xZVuzt>0OE4ZQkV|medS"WϾx̷r eկg[֕Mn[BB%.m˓}`؞e*f-Jq>wrTǒ+z~"~k"O YwF@M\G;TB֭*˓3;IwA-h竁y?|oҪ <5dȷ(Y4m9n> 2`ȃy2o[P)qlײ'Woχx{h*D˓jKxyhe7JE|foAy2_:=Cn-7W?ñR&Ny#dvvr #7LvG?(< u1_~uvx|l:5Ԛ/0D3jbc4A1I3]tL~(|{6j$ql?|>lTotSRʗ`;LZ^,H!MFyp w&tRĎ8??ƇG@ פ珗'2N#͸`#1&jri]iLVx~\,z {|G 2zB #>N]_ ӱ5d;}: *V+cfa1P4_} )U"Jc]x= J??MV''ɗ (xB<{4ʷeai,fJf,ѩmiNWhTBtM n^HtJh6NjS3 Gɮ\Urg$"xj>;ZI{b*H*]t=d.6};+t35R .WetrFHD<͗4ry͍q->\f\1]O'b MC4<$6h=CaEm\7X-ӗ.9zBŁ** IntҟEj7@0gF`= \ >Oa4ٮR !Kِl$Gy롃CD=Ʒ62ӫJgwfM'R&\o'3e os/ўCܽ,}MJa3qUPa;MUC'`OwWE 6F7O+Q :hLL&>wt%QUsRQ_i($aq -2)O"`55=kgYܳ)~ ԼXmL 3ET8m9ϢQ{H$kNFO)]Q '+ _SuÓc}C=  Ǔ *1%/1:,$n5 ؿFNq%= Rg.)šɁƪ,Hs TKNbLX[ C\g<uI*ژo&i%-{Qʠp!KkJ& 44.zf k28W_`USy!5`cڮclٳ@?dCD7Or4U @׼σgg|5zkͯv]_kǼ~ݯȆl7~z5ފڎ'jwDKͯM;~|_1DQ}<m'}_XG-8Deq~ ^v@FFyBrJZZFzFZZr"7Fzk`8i76o>ib-*(gp}?Ogġ/GD~-O/lgeB:.=1BC.oc@ u&Vvx|T*Bog8ZS@N0:kxkP'rxdxRqCܪ@RR"D*sXyć>Y|PUBJ!2'TkCsKGP.o- D@bJI;,2 klaKU6Z*)ԔT SZ>\4I !ާ(<@DOmQc lg?iBb<\2i$b 5PIv4݀ bg6:f_)1۩ixzYdܞjzK~Wb뇗F=pDZv0/*cЩtIKMRJ:V6,aD@9 y"?!5On-ҩrBJbrURP_[7P򢹾AĦaRze |/chSr,נg'%K{&ffgGfJP_{G:8|lHtfՠVS+[VҪ]lj:vb,H yv'ZLxrkT̔' z862:s|t~'*u:2H%Գm&vwVBG%%4&hdS(JMHԌtP919illE V.\/'B7xba~45)dFNgtmZ5d0hT B~)3zSHBK T%b:Ak }f2tYD Fh6u3녳uTZȋZdtL L܆L8rTጐoV(gogvA3i1iS5ii (,x/czNIJH^S ;><gyf5t2  ?NW32jVҤ@Td:46nQaKJXll!:vώ\.MRX=f?~NTH=2822.YWSIwîpZgWW 2>:;;r;xtY&jxZ͛4URt,aI! ;pY;.^{}ujV:udr8vw]vI/]maxnϼ 4ooX*L,NW?}uV&:rpޮhpޅ5If7DcVU̔~bu_>9w[mI`;|!} w$7[eh8znGY" +/׸; wrqqo_ޟͪqzo/O~hC(E 7!F"W}{k7*B-dr5v-Y+cvA\kx$GBCΉbٌjFޔV0Ee4mYxɁr$fjs\iT D(x/m5;M8wtymUg?rcۓBF)닣]k?AVVKxE3;7m;EQ/_Q :ɨޚjTr_꧵16lVEZKc EO|V4cXJߨK\3BB,ࡡ?AGWɌa-upTFQP͛[ HǏw6D+7g P Ds \OV+< Ζs&!dNF0ʱ3R+񵏻*\QpfyrX,A+;<P=\ Z8&.o~%>" 4ڸ5otJd*&Z*PvvSsGspEK܍L^6hɃ\V} eJ-Yh{҉m[r/M2˓.R8ըվܴ`6-&~!G3J86 _~eQHrW e-X x%_4JfE!q!ENm_kN^×Q-C|woqb2yo(toY6s)*Ƞ5&72TiE>:?;==pڤ#c>ڣZpTBURk %;RxaGO޼zyy~_EJ=S#F|,:S \>vdM [\'!d}+5h߾~Ȟ#Rk4i~,gLa'Q{vJgy B2fo_{Y !z*uʠ̋#x!p\RNiUk_p2OƽyO^ N@.x胣,RLf͜|6k>j!sZUKLXUk#V+1vϥmD?Cp'bLQzȀUAh\(4@3շ8{|["Wڧ'.hR0S&q?I }5B>Tǔ^J=Α(Ԧ#?t^ZL#_j! EV`ؑ5 jnX<)2GAO_]S?/D TrDf-ɿ54ktS+^=יRzEl|qA!]k5slGρ/t^jR>^CW+V^a&$AAQ Ţ'*z?ə':YB|^B_}'&J86؎??_P|8b3i89Xr7Y7nCbJ%Gk-уwrn k_WG'g·N4SM^nqAG'n0y]pFܮ+xw˟_\J0':߇W^BZJNOZZ0f "O2f4bԎg=V8G.'׈tzȭwg֪Z%`[Y"v|8qK#uppZ2,^ {L^ffKz Juǟπ0Gm~}2p?0KmٙԁY8a/JƁCbRjz"rxSݻ6x8z폯WNpz|??;Ik b%|ֽX#xgfէ1Mm͑2\{p4".opm6#. =qP,ǥUMRȔYhFcݷozt.wV`7K42mG g6 sNQ- BXLvѫ_Sw߿=q`KMgQ͙{a]oCq* B`:2Z{o?}wu}8L&K;2G߿tF,_?_8mA#X zb'v.:'w,pRp읿rGW^;,6N!XxJÚ`';q;iDŽf+H _L,s`CٺwzώWؚ(2qhxOt7ѱ"]#IxbvuPAmlvk=;5 Dc6*eZ ?VpUɰؤ-Z0?SJZ"b7I׍%aVp,P1',>D$〮@j0W@cgk;GVbQ9=+6ZFY&rV*[iNC4XDUhCL0OJbra}ʎpg{xU"Yj,x,K7:c}6 J1臸Qrk #dfh/FfF^'dK+]3t#6#;*YÒh9e ]] y4+F BGYpD iw|JIwXBজ1XJ f$JvqELWu$"ԲNB.,M##u = z-d˅;K@N:H˯i.9eLF1ښz?[wywIFn$_0dF~U?SRziq^):NBݽ*RF>H-Dٮ, ʠSi5D!Xj)W/Iȵ]ϑd(л疷DmX]n-> ` FJQ'|L+1los63Kk;\-N50q7%Rߨ|!aaQSY2ZZ^^^lG <RdM$įzS|RhhXԃD )*KF<jA|^tZdd)OB SP@"-"*Ĕ􌴔'G!HP@2] B]KFDޏ^}?+kAD09!G(DŽL?ڏyb'7 t70fA(G _2VEBp9kw){';Fh"$Ol󿈰ls U6vKǵ/_@h?PQ5w_?|(?>(ۑxϱz-_-c|H ݿ{| _Ï!m7Rg] ^CQ_ubEC"vh>/j7vEh/\i~!8  >=xϟ>~^ R3 3dBQ4hgBcdeë-"6#%#Q1?sY ρ=x |!={Q:^7rGgV7679kˬڢ,Bj`A m ._y@̯n\e R!WH%"T,$"giPc#nM(Ru7؏'y ^:0IVLO,d `K1)qL8"0FԞȑ5c-Zgf5ٌܼꦮ5 FKq7#: QfiŽRZʲ@9N6L,KLhi5/w.O`fD>6mk<"6)111)5%)YBBbJr TMKъj{RQ0Sl~Wk릭⃰'9CBLN*Ś'Wo>}waVgt]|ë|=w}2!U*aS2#ACk.Q/Pjt惷_[O.A{wCQ:ꥢ Zf\@Շ^|MW{*ư5n'ɓ߭aO~"lQ\^<8}AQ2V7_,{nt4nZT8uXJÊvc5/t4Ѳ{d#VKH ]* 2h6݁Bfb@ הff Bfٴa&y@˝\\UhhM-hP"Il9p^X* =&Qg3Xe hЯWj}\ dԩ$\P|j3CF{InY}B_?[H+kN=@*d'S{h˘&Gj{QVn65'(kDӪ2Յ$6U*jO! RQv3΀Y]Bofz~`ZϢ73g^; m0uZ O(ttfdl2Fղ~E$d]4 ڎ:"6*LP_uXMl6p4$Dž{KT2H_i\ J ȤR4(W.zyMpM`(gB@*c/\ f ʘ-U.qL,PKeFY+)Cô@NPDR5 {A` p!?*wbV1#x"(0  PpPB>=u RʗM}8oBʙZ]ԵΟ_NpFd /VAݣ= Ak+;uj~1 {V<:w;fT1,STaP4]8!}ۺ3G|-}al"?)GdHi`4ŷp.nd*wv|IY򂔞Ri NieVK؊i:hi#Uj-'(>܅J o)Tz<˸8)~˳ Z.M*YÂC#$6eI5K z̮ˀR<=ܵJjEήw.i_x,Q 1GFK_{t(N:v`$K7-Q8;-YYu#^HTq u޽:I[S٤F+Q@c3xCy9e>[ klGkvT_VA1\BV3]fY1Fk'q|w'{{oaP Gzel"}k;io"n.k$bp] ձ{?\:!pzl[et}?]<;sڴjBf\ &.ԻMNMaz&.mQ8_^ǯxu#\}?=;>=;k5<Ñ_P2+=ٵsG6reFtd[e܇gpcfԈfW@\><8:<<8pdl}f\owIwHtJ 1-<#w'x ; ʺν=U3VKN\Yv$NzaO,f9&_͖ @f9ut2H9r?Qϯ&zZ"}d}õQ!)Փ+LJTkSbu]9s<=k4LR(,a'} ki%7&fx]H4ݿu\|wh6&jo71U =tLJhD-iLd 2m{~{_W_/l&zO1.SF|d]QpczrL`0l6ˏ_}??ٵtfE//ˢ(Ui}TĤVUi4za++Wѽ7?Z3;ӏ>\82e :P4 ? |}D#ꋅ"ڑuZb?.?}|ug5HJ!to#YN[Y`iZQ¶D2~+lnd|^r*Lm2#ݏ {Y5YSHdJuXcW/wU#<ˏolT+x}4@_&DH?O-@k^च-W{Q͙ˤӪe;smE @r&3b.Иe1L$b ]bZĭS*el"#͋y/wY!~ZЦUCq8J%_,\f`$q9 O("Q=P_L8OTMq &S4#K*E͚i)"ƌP>-u<:U zD+(hC-eo w{G6e-Ps)pt s?ܯ(|wp1OS\j#bqxzI]p_ki2ĬfX_ӵAwvUX=eD#%deIZ{F&:j<lJd+=5fQ)<9n+f#`j_Q11XKI,1qFzkuh0&n@}šϨUg.@2-EgM>Z^ІL3[{yM/3 b<#t,J[+c Yp)XAH¦uB2Y0Z} $j`O95Cb\_m,t:BʯY+$zZ\fD>qOAh\oiQT_gOTTwNnK%LoS!6!."e~".*Os'O={$b#a.f^ȨhDZ:CXA|j$u-&Bʡ|ĎPt Z?KF"hϬF}\J ~ UR#f~/6ZȠGhwz92 uM=B l1wЏ |UTChvP3?7~͏k7O?k'Ɇj^ w?"?l~?~ۏzP}/Q6Y^"P7_q{{+?`髸nU!`,8!տh#_chtL̽][4)W$銼cL/~ܣϓRR331i) ݏe>>Zg >% ܣ<9@/./&1)(~bïEFE{վ[`13#]-%dL򳇱>P E}Sd!#"c$;Q$xBgg55^_D$>;#GF8Se=LPѪTrT,EBH&b{^DhVOJ:ArVu†XW+ՅYƖ@ՊG;)| w8 }N_ʵh(2Ӂ2Zz&_V>8V!j1il VjB 6Q=չdLJgϞ?OOHLL j;FWdF5HKz #]d gVͮkZDc HMIINMLHOMM Wefg3/ADȵtj /6F+4Gвss,OT.3- C,6Z%G(fا5YҒ#rk*k*+*K rd<\2Ce>I_m{mĦ-Y4ROMJˤ׶u  Ͱ&ۻz{:<6CZ22}[Q'ƩmNOONӊk͕ř {fEE6 A*ٲև}7{ẋn6 /p$*D$sVY 3[puD{e6زz򒁰[ȵ~?|t[fS3mZUF!XcN3׷JRRR!geAX6ڳ\nVh3&6Z-+ OkC7R^Qi4pdJkrK5\; G~JrznGe2!=duwŦ`<܌:8Fw11SbSσ]Uod G< yYͳ|b@{xtt|t4lsbAfRK؝Lbʋ$wxK)V+SBj6S{ϩZ@fZF ̺[*h93Ϋ?l$R$Om aힿ|eSZ˶{xq Nd6:_jܠ햢R祚4|Wm;lF}mw//V-{Rb/_]_Rh2-fݬ)d2knPjϦr׻8 e'{>{uqi'$FW{.b <,ef{hUC"K$qzw0OpסYLw߿<=B?_p`zزg`=<>{Ӫ[jt@}wWkć5*,oBʠo./|i1XBZc>|Wxa|o*vHdz [oʧ8pz4 AX᫵:ۿk@FZsGXؐ#CO!(^k n'<[>ayP2.@5^'Bf`k|M<<<#Xf~Iie|%|K:WIŵniX|n#j? -_*u/CJ1DjH$d6^#cdJ_Wj BǗLk]tZ-K8A((ҪRgD=! Xau[Õ9eGÇG5[i]S"@]7V)/e*= ':@S5\ :h;:ċ>42h}K,sb$.0}6t 3=\\x\jt"d30&F\>8<:ɨXl)aX$#ƐH;UH/ZP| ::xBM 01 v{}Gؘ녓>j&sg\9\ZJ/G狕lN\Bzz%=64tOFlZKf! X(B!_BGx9=szr.73Ԭ{^鿻aOF$I |~zf{7T8=>d38mJr/xʅ`mrQvNf!oן_lj!kXnf IT\żLohЏ__B2DVQɳ㽽]@seTzB@0ߺu@da'jzlT8tߺ@,PZtn8 \nw=̖&Dnn03g#Y}oLj˔:Z]`q:}שa f5SƒcclƋuHVAnc׭!?~CJ*- áUF7Jk]M4&<gޞ *R6f%t*}<6X6=O M:[FԛmjѸ)\7*OOyl ЖD^o.M dM-w( KhUGiRì!yAXW[n3UG6E2ohn1pO"_j&aZ4t=\Ϻy#G)韢k$ \H9<=I4WYўy8>y(*,ނTAؖ\6H `&h>W/l5<l 4;iŜRJ06pBRTZG'1u; >:ԭV͗b6@mgت -! kdSP['GE`s׻؀ p؊9^uBk9Frqv|tv;mYEn*yMaL;*fQ%򆸷3f̑MJg;!gphϰfbVaaO'wmmE~kűmۗp}8Q #x(/)YqĞUT\3%5Bgt:f83j2kSt|ɂL}[Ť2%TjQ-:f F7ЮK7W' [(sU9_#Y8wm-4ndS7DCysyz w#Z|bN_,84ع*fdT ކfG߆=ՠʦ+M^̏G'Wq :~+#[j|uqKEY Xyrϕǿ1VCʫysI'Z  6ړϮM=l\術J{$:cxnۿWf8p|_.(or[5ܱ L ay'5 Ւ {Di]bפd/#c^?>9Mݟ|nm3ȩ!PnB${F*X] 5w+A(TWw+' }n'Q$M0W>?4&7xy0ifI5PEצ+R:fHCG I-a3*!蘽,6}%\ݍ:Q+[/ˢHvqv<\) hyytC273]|ӱ4TJp8J$q6&RbCG-fbG'{4ܭsBJË7.r yi[D`pYćnS^>VNogQJ^*_F[17̷\=߷ۭzp}J$M;k !i2zp]jhdr^"2_vAN6Qxo(2=G0 &eFȖ` N"O.z1K=xjptks93%T+ƸhT^w(x7кƳiP7#$~ ]3#ј#}jAŜj#DE.L)ؗ'8zauk}csuyuiq49VK~ԊQJ[zwNL/ ɑ.}ZеB#M 3ȱt4@-jnjo."'>sh@l+I `WD #;/??/Ne$P7?FrTD fqORSR?yx/#4~%7U @B"ެ*"H CC !-ſv5IUphC둆ZnE~3fEպ]?3cg֓@:Ә2Vo< .֐댏{kA?.׊w(z #7k~>~{/k qׇ|-k~?~Bl^>N |y _Qb k݆wT5%(E j> { |ׁ7/G} e'|Ezpw_kHG&(|jN-h#SBlS'|`O]RH[t콸~(gO?@_ 8 pqS2x2-++7'NGD7P /( SHsp<_kno++"aRE{U9d!D\;da)MCs,&gsssmuq~,LOP ts;Q }h E"L&zڪOGP/Q+|1RۆfVy2 |łu6O(KjJ:5ZFI}̋|&~ %{DZmsC3imTJ8 \) ĄaN߾\L#8$"1vcqFbkKIOL,1)w-h,zs5?QW׼2O(C eT2R.\RRR3-Yϝ-=CqNe l072.6,7[d̎3edfdDl&&#=(kmz+!pܮi֢\åf¢ҲFVN^an6LĤeeLݸ>LMF3oݕB"R{yF?VDLINˤU765t4756UPXL&1nk2oOD|}H0)=BfI)[X^lΣX {]oM5Q{`t9_ MbJMB8gᬰVV;;[5xw]!`C6DqxZ^Hh3zۂ,.LN+ᵹDPɥ­%&W$R2PH!`Fβ3\*hcB((Hɤ6 *J7J&kvl'V(J^?r{}:ͤ5ƍkd] n^9ULec*ΠךUB6=.hji L6RHam;F}';AZwht|^Z3[iߒ5j~E1^33A!wϤwj}uw7G<-ʡ4|~6-izv9$kb3AZْ x,cPa &D`LDIyT\V@ :Ⱦpd Ty)dNs!SF'`pPC"{6Az:.eA=Gǧ'{Nhw@zHLf-]D%Zwґ>&,6f^[(43E:Y3M`yz~qvkװ'Ei5zh6A-NW_PY[B~NbZLz[]˫ vl0ul"f_3ؘ*T=AAv3V۹wzW.veTh0Z/eZ flVR Af9~hp  e,6919xsqvj:eͻGǿ`|ɝ J)a$ ElphvN>uvV9oDOBZ7ez/szeX/8bRoE_kJfUZ Rఇ.|VзCfЩbTE*b2Cz\KqAӺz D:8۲Wc;e_k?^#S-$t|wx| Z[dN1$鯣4FpZL,gӉkʵCd鯣6z#^{fJ0ӻ%h x`0S]lDnW ^գXlZ66_Kmk=;ruv>R˽불nUQ|>gYmkM| ~|څ'YPjŁ5՛ <}D)-Iw=I!qmF~qIk!Uڃ3}2f/v^]YMlw(h]3q%2- [ܔ!9 ']vݢ 㰵;v2ґƨZSJ I#; 'A=x"6;8bT\kyC=AcLb݂얙ƹ - upxp Yr1>MD쇄Qz vW4!uƷZEp}k+ZQ;OV1lZْkˀRvZ!X!X'TbGƗd,sEsKhx2 (k ﹜6r=GJ& Ӣ<{LhFΘ͍nBNE+& .]ggȖH!d8Ga0/PZѾvCdr͆laϿ!8*t˭P[nOض2bcy "v{.OG2=7|> zU]F=_ :p;lBx#YWO\f3S8U@)-\o{͟Ӄ=I_B'-jqm(X4Y5܆mOn!4ʴ M.@q ,uPcrV-76|?=lQO@k8ʍ,bJ3R +ǦUq&録|{kfdzGT} : Ŏ"vik4^w|[Du$Z~Ъr-6ZuU%܅|FCOΎl*DճAkAi N\@/x1Zwg'~|pjg֔ݫozv]GGpqe2t?D@ϚX<`i#սi.;U>}4ؓթqw}w+_`KƖfsS}R^W}tA5@V*RVkvZ}ywOOFxym3Rh= ݔ'AE2zN ZY$ kJx(첅mϟ^̐F %tP\(On!vrSJD<)S()Ԑg~]:3c: B  G(^cGl| Ǥ9t1BelŅdzujL1`Y-= *׿6QoZxs-grlz~xN«3tnL`w:ocA#W6Y̻hC ؝ *Fk]+Futyd 엯Nw}(YmΧRxZZ_^Bt(z nP$rNui[gnˆzvktpmH"j1qAHLƬwuUCPDzq*W ilN0rze͹J ބf#id0ZhO>s_ \HM#-;-MY,Sqx"X:d'jcLzF>+#Tu/mIu&Hlo͍uWgF, d̐R#y퀆0!(e9<P ʚֶ9kK s̕m:kpY܄|q>Y dG=J'4t../Y%k93 7GLc` Կyi-3`^ddq*WZ;4:66>6:Y_MLOxS!>zJdTTVWVo{]皡%z}IG*#\Wbŧep_HMx(.:܎=" A~߯[=|'=@=} 5$A>,B Լm(<"222  Mx/w A0jvb{pRԠ_Q!W(ǃC?Ï zXA7صk5W$ ZA}I ~u]_W=CwK2"huNxܯvk`֟A?o_k~E/7^ioDf(Լ8 ?ۿ90!Aw~{=J"7vM3WB % |ϟf;˲IOG=|h-$p( ˚&9}[Xwe8J"8"[R;SC&w~0=O5䧄s )eh0|JzrbbBO=xZa}jgkI =Ѽ_$:,qzQ8oғSRSRS3S3p⦁.\rXkN *H u{Lsٖ"a'g|oFt|?|1?<2ǥL27OϯކΫ$L{N~KȀ5"$KޱGtCN#|ukXkqxBW?)#ZKȩҙȔ\b5bw/~/NyR#3:܎=dbsØ7G&+x=ӛ = :VM>l]}DM;7z{,ZeaC㍱ o\NӔm|':4`lM.h9zO.wtۭn)8 P>b3[.ǡd[;\ tȘHlzrf'w󄰖VZxmB@0PLY-@1^[5soicZS7,3y`ZciɞȄ@3YWov>s CwRϩ1`v` [f$3f3B'K 4Q/e_sM{Nkb[UVI yT>isYT ]ur( TE ݴkA0,mWzfHթ 8}b'ӮI)/#״l>a0z+vr[{+JDP۫˳(V:X2x2TkZ3O-|QӅn;\W!Hũa3[*+PcK̭_1UF`Qw?twh-{{ra߸ ׍n왣'D C30GM_]}ۻsU5VAgEiqH.\ ԎeC[ݱG >fyen[N8 uznnϜ>&rѴ^1}FVY_ {p\k\$Yno!naDGs~(.YjYxVJ-010|wZ4 TG?}=?9XP:w0ȁ@rRՄaH TcXLo['7Qo/N|dDZ|LKʞ.OxUo[]Rd!E65ןW@o{;km2{`=!e0-N~YL`EDf}}8dR̰3Y2O+땚ˉ#H~g ى߮;>*eqs{rjhQ|MkQ'g]06J$,5| _r絖%Ҵ-ꭞ'^ÍN2ߝBİ3Ґ & ;Vo3Bk]_]_Bz@j*{h9?ӵZs}Amr0Y'^9}m`p$-TcXiK= qȻg'ת[masډ& >8$]Q,Ψ޿Q1QG%6l{h/#M|Fz1R3O-,k;誠05KiH5Jk%aȵTfEc53ccճh[Y$N3}فEfΩ} _S N/A;-3sJXfᶠ~p=ͯYQoo$\F¸anVj)ksA]Hc|upK2FU|D_.{?w7lǢT/7{(NCT#U:ªn_R%;W_󷻀c}Blpͩ{oK%oҠ(vdIܡKP?>O+̾'^o0Joyʩ:RgJ.&ty ew%em[ Kʴ?]MJ*-mIcsH8|rvXTTTZ=u B>wzӅ{eJa;y?~r,R)3[W(58!Jn>aJyn?_x4뷏V Aninqh!Y,`*ٗ&L ;s&@_~t]8?ˠh51?  ^&9yAY.0 ejZOn_; Ai`~kRRX޷5_15#s7Croc[wdqξQu xGڍzjYIY#_*/h`A  ƿ$tVJeϒDc ^p:i~Xz]zI.+K+sRcXN3wPSr*DŽ9. m3=.s?ޜd AgyF"60Pkg6+FoEHg6c_{" DwUIl*O\^rƠٍc;;1 0M RNȖ%``->1ťTI*J%kz$#}~}r6^]aLW5.ʫdBZ9FTN$_"X'ݥ 4hSʄ5TB 5,*U1ɂ$dFEYLZZL%D"gjuS}hsUc@8\ (uJ'-yGu00!@n/_D'P(DepV kc }ty"M|31CuPXP*_խ d HbֶNnMM̎A*6m2ٶW-vP3^Ԙm~a,nH吀7M 8#s cýU,*D!SzZ1cyɕ cl$z~hC# DHqk[G3-,:Pf"4!UW&B1K|Q૴* $eHTfulW-oYLqr ^ 6{Xj.8'=/Yh\j9=GfT6T@a:祻;fn:x cM|B(tZLO L(++'@C&ѹ9j~%DP?+#c2 *Z2VǦSti\k֧_FZPQ&PL(xZeT(#m MC3J6f]:%++=_jZFVZB"-n*^Otq  Ucp&8 v#ZZ]20#2X,K`ij\ uFOpO۳rfU}pE,H廢݁:%z+^ׅ 7T&z E( a` B6\$2H TR*DBb vCx<2>T~ohAZwx?`!'CD|ؐ#~ :4"A7_Y-Dڏќ:K`3ʍpq> kȠx_ &:aP, ˺[r20ӧɉ '43Gʇ.s?ci2^dfeyuVK0t xv '9C:qa~-4+X3Y,&F!Sgiɉqo> *ZxS@U4v MLOM 5U1ɥo^fk8<a8ԂeisJ(MCӋ-Jh4jR!,Nv6V߼LhdEea qXAKY{F0j>>6#\4%9ǣ( %$t$A.ISZoȮoYnMLLOO8 *VݿqȧK! V?͢v\ݹ0?Rś"L.H%PK5 9]+>|YBrlX𸤗%Ӯe.hv FގL(JvgG [TB9u `kH y`Yݮd]]ᲘM .tJtKSZVau2D!#ԲRr2 PfFq 1$Rγ(5Am?].HmY{֚1MzI2RuX{hv=0Mdȱ2ٽ(%L**v;4\h!¶ WR Io6@  ^\Wuv'pzVtJXc%D̒$IY ü#Tc<;;9=8 V]~ nf6lo5s$`.?! ^ҾqPuJȵ| 0.;n̜r~}q3n,9} npnsˠ4 6 h JLL+ͺ1F n`Cy`9+pyyu}sm닳Ӏ=>@9Rϥ4Σ(tq\>0]_޽yw,ݳo\UpёNWˤ,l~e>B'fhLn2&<@?gykJgun?~>; }9|rȏP 6QxhX"28_~F=GXt䡻EK!C!0bs{|-3F矾1^&d\8ޓ]g\Q2bZ0U_~V݁ q`Jv0^33f6 (!xHksxWߕHkRw1f 60f=JXM{(x8JOx]?ao 'WwhÍ^nϩ7I\*8V ؍P@iyϯ1G fwgz 5q~V'{qFk;\Sydҷ5QWxhF섗 rCȴ{zs:lrhHyt;&xlPL5pdaD$ T7ɏ`Z+Pr3:HB[0@`})nj2'YYI0߼qmX4X.?" -ne6jKM+F7)wԲnj}E9AT+y &Rly/Qӷmb:Kk T0L? ɬ^fe rz1y8?]zvb0鼹@PXU?Z3*Y1_T8XVLHj뫋Sa?Ryݕ8<8.9H۩U| a2}SWzTV(_Zo}uݬqwD"v3G&Y w]m _SI8 }Bh30ֹiЬv9zk!SԭԊe96u/oB֭{ ˛Se{ݸb/7  CSF];1';z?:IFvw?!o.9Ծ¥5l5 i>ACa4OHk ţ:{D߿tjy,zԠZcK)i)c('P>p\ݢy"rn**GkQ^&ccb"scRnʑqJۢ~ǟϟqsB ]ܡ|? ӫKX1'pzU3g[6`%0"=M:@-!{;]n߼$W.֛ #zi1I^GV reG|>łFJNs;|T/?VF $."b\a6v3f6`EK}LAw:l[faw鵧뻦1 )8|ċ6tv k!۶ S'vډa4U=m\aȼYc,Az គg˼XG#VmjUfn> Z"= ~18@<=;? v|Lm2" s`m]d"iҮ_16Io›I5;t21E0P"Moܢާ'ۢ\9 FiWL{u21} h%Xy `DGg"Dc=KY;t+u pϮ_OG`Bl+Iye(jx” \۪mb93隼Ȏ?1I,UXՏUvv\r_ #P IzQp,j6(,pBK}.]]AKwҡ|lʨx˨Ӈa=UI9ȢVͫḑp/27ؗ.|Fmڞ:cԹ+7Uk@%' DW tP_//0Wnaluip7+94L2Y}9>ַ)rDa,%oϜ{cŧ͙@8̥y+2A71, (O/nZ kiY<;z\N7t?s>4~㏟n\ͪ&J9_9[ n *:rE#RBE_k2v>^Vg, 6jYQ".';qJ[V6j yv?r8_~L˻s˰M-)oeƢq(5|Ć`OkXN?ågwmZ/n/>`msDҜ?P2#6ҶeZC^n1u^qhXAӋ_yW?&[i7CUʄD4} =R('lؓ2VۢBdӋok:Onũ*VHEy"ZOH)gpiPUZZFtΊ#^ߞo,߀Cz/ S _Q-l֐`kDqVt& ߞ6u@.c?ޘn)%rj[qFbLC`gż-tJyC b 0^f^y?\ϦӉ~|s#BQBIpEi` l/.9̺D3[Ere°.La"q"fDBށ89,Oi\ja8ӬTѨT2ڶ H|| ;:|Q8tH4*n[(5cϩ['S79] ܲTn 3rS8ZC0ŎMʢv,)TvL%鼞ETwl=Oۛ3M,2L!ʭrM `!lN\JR$NCĊXJjPK%LHJ\f"Aw7ZH8%NZaZ"#-C3K  +mt ٹّ/wQ`(惉"ar[7Ϊm]n`Q$* 5^fv Ș=AAo:%%(⫴& (d*cxauIJe7Mlt>NnZD! χXnpMUuU<CaTNWh2p3oYߚKG4P-)Drk4׻$Wo˦Z+r"mhePɀX՝Sݝ~v31k?§H_qҪ9v[9 z)/-#PXHySCry,1l9"v8~^n]hJtgZN5ޤ'aW]0TN\\BZMHը$+mMu5evoG8]Y< `a_q )DN}HQ+bڦbG-]_=EưOLD+Zph)y!k|EPʥrD"zfi3vv,ZmUiU@KQ Mt}sd3tj`yE#[64xuimP̦Un(:W64岛 ;p (8ڴhpCQnhO˭R:l~z)Y. ڴ 2в8 4Ҳbﭷ^@0,ڴ:wD=@ >0ZY͆m|oCLr C:L/l^sWC9NN=%mv޶teFf i}fI/U<WٌF8,3lVD/.N݇9<9 >۬`pxkwiЌV?Kz匆1>9?ρCc Ep{Zf.&ZdX&fh, wY7n}"fvn͙ |84Юp."aA (*Md07<{Iк5cxB]}`|$݄xxF8,ڢ` b[P4`Xr5HĦ 4:d`|pЋSU8{wⴈv+R bԴ7XAKm{ x$d_{ED=ȹhnM;E9v,N!w[g쑰x .4qmpY `-2of{ OjF1鑪mL][߭:6l*͈p8sB{oEL.恚ֺf]r&(G&e,5ra;;tvIjTFlGXok7ɘqq)EmcHUmӘ2mclu*GV$4vw5ɶƅ\dا:x3 ȴ;,{#D9o/B^tx-nMw=Kttpї1}:a\j&oo|n\ " -./B>մXiq{4q01v(l8\`BL sىpCf^@΀JQkl 0sP0t L]G{K>2?UxSf]BBg!Inl$P/R\Ըt\ >F-?Wi ^ <=?vӵ܁md*))=qpK^M 0ۧs֠MWxLfpp5+41*euq/~a@PIM? tXk\`L_]_\]_L*nԮA0@<":1zf5yN=9??ϷgN0^\垮/sz+Qt.pH:.brH@b5Lh7:??*YwnO-:ЍQ(^)Vl ~??_={T}:䵛\cGZ?-l^/Hڿ>ߝx6jӥ?~|swMڕ69ouf$14zNcت73okg͙-ۛzۚg[ȌY+Ľ` ۭ$*uqsn~Ah[Ϧ[3ۅ;#dy12ΰo]1 ,Sn0([hTʰvWV ơ'.odr K{ՇZ:&jdng88IIvߣ?b>I7*zrE;vd2QZkuv=}b$:f:$BH?ͯ^fhjgF(vvx쇒:5PWH\  צǮ{//@qf;E !맑n&uC) ѿTAeFJk]MkYhgQi JyᏜ7yY|Fnn/C.bIi5in1bpYMr(7?g ܢ=;7uFeyWEҍN#N3XƦ2FƂ8֊%ft7 `Zr>;f<l1K*SH Iq/K;ZKğmȶ3 2fCSm{Lޒ.V|)rOzB~ lO>ˇ 7+́Ͽc WDES\ ȉY+jm=3cv~`}(:..`#-O5L-/m/wdc@q wMkrT]ݵ`m~y?,v4>%ޘNAA0\ԓL`_Z7,39]v<&`X~snwVSԲU<: 3$tV0'/%#3(ί߾꽷pwu6Z$7 ݚbNGOVkR]@⍉wM&g'7WY[P]0[]7!x[h17y%IT{`q. (VȱpQ( 8̷>xv$' $G4ۍ{FbPEXG 3! HF#p1Q šJhZ jĄq}a]jp0qHcvMIMMM Ob<Zt!U'[Cل$hjZ/3^|&%!crD[ 1c to.ۥe<),!(4:40/;  "W#W1Cpln^/x=cÃ=:(K:p% KwH-"}h\V63c<6! H5M1ETg4M&bX-faO#^n`fHfe| ^ @ OWw- &\Y&bqvF*޼E}vX Y@ Xș%ܮ-͑vU|{mHX#U !U. /N3r(Km$`ڕ-wԲt Umkb;wEsCgq cG`#eaePc^߼uw ʩ#[Z';/R82 ˘gFה]6XO++,((*,*}&8\5W}͹ފIp NpZ@eN*m,Aj_5Bgh4: MiRYYIq 66횕ʢ(8L% O3˛gnI:XM*))#Q\nUm-íTc^rV>KXLz#e2׻B.G'ggF{;z[*L @Սk~N^z1QA4y(x%csgP wnC}}eyq]ş[Zm΍Ur2wIkDptUR&Hf]D)dBDwTcJ&  :SNLݍcOAwf]Y7@aմ ̋4{G&ٸ-Cx|ߖnհd"uagVזUOc1Zĥ5 vC웬Ur{}Ec:z _{iEb`ANKʰ̸;YÀLY?K_; [cZ9 cq 1&fW.%ml3mqCήF _K/iհ_(m jvi8K O^ІG*Hi4zG&)/baT0>T-XSb,;^lUd? 鸧B 3f9k=&<ƼH,HGr(iL[6d̎FV],0e 쬮kT`6 Pr:l.ّdAdӠfcmMu5*e2F(Uڽ*^i0$K ^\xlcj@j1ơOkX۝U7vC8Nt;V":fGjLOSKdUVIC5.!Mt=YY_߻B3y*BghK`= ymFhChٞoI '? (}br[[?Sn 3coMj ^ݾ$xzvpY 򵞦fMؒNZY<̩nK`Mb \HgiG8-D"&6i㟿}%&/H$trvrn 75pZ6lp\_GaFe?6x%6kח@OoCZNqg_GXvsFX3A@uLJ_nB&~+uy~~~:;ȇyNQ3ߐaaYg>a{ήZyh@m \ݹS5XUӵ9qcO#ul ZUn4|=ն;z}WneO9>O_?E .y}pm\ڋb>~ϿxsjlAhNs'p}X́xƓkQ=ś?eв>ms"?|p{pC~z^- J2.$ŝJ;)aE4?_?ݝzƷ-w?||{|NJ*I[lk|j^$$*c[ggBkbxݝbEw5TFe:Q7m|*hڜ}w?#U}L60ݎ L(na{ >[z-ugQ-r䚍&C| YaŎ X*8c6);r; x=TNTj݄p(_T-JT3ǐ*ĖzRf4n q+(ۊ9^^z}D )"(?Qٱ S `1k;,jp[4|ok2JZrQߣqF$GΓiYT: 3Fꕶ"Jέlͳ)^O1SeȺ'ajV7ASD82 =-o[vje& joT-Ui[ʵ ("xS,~nscG}gaRn_ z:qYdδL4MZtkƐPzǷgvj ,N.$ "4.znc3J[W7ˉ~ 2ۏ.]{jݧ[z}6pVNc!5mpGYj12!5v9U_ywg?ߝ6vMs}a̢C_ۖ%N׼rlZl.Pzwoof5+Zhq`)/#:Oe|`}[^ջVv/ ׾v l}fÑA/_hd4 %TpEO / %yܞeξ OB7ׁ=O/OOOv^-j価HD CΫo,sr}K] { ,xuYг)&d&FO_I&eaC0H/UuN;vLg6xN(-hlm.TơxXm)-,.gT4,Iw-vg t ^vihЈf:+Ēyxe2VP~ niN Z+-&RL^ߜH;vz`k3ղ6.B()NlɄL()A*:c޷5W]FRhX?\fq4 p#NGĒE^D[A5xUJ2ۆՁ|52UʼnZ&J!{6R~S<Q&`lKBP9RQNfШʆFXv*L#8j(;/-.aA'? 츧o蝋 P%L)Uز`}vC#Q$RŠPܜ)ʈ0f&kpp 4Mh0@%XM3 ,4fdC5X$ІNhJ@?r`Q*5ЈJ̮m_6Ol37 \%+3JH8 fpY,q@D&ӹ5MC5L39/֨f{iyHL1 1X8P;$V<:QhFF!_ v3pvH182fu}RJ>YM ں s6Zazc> Dd&>vFeՐ zj1FPo|PU@Z }'MԂװ77D_Aİa__GhX5b+Aڣ &$Ĭ!P7Ӕ";N#F 2o(@coa~ S]?>L2ч׏_x$k0I.מ{:TVj+9L 'Ho|RND@a^5]SK+kkk+K s=m 7(#F9 -1`8iZFV!wtnE$w CV%Lu6pIRhՃ5FO0'f4.>!)%MruS7ZvmvYM]`nQ:#5M|~F"f;F7d&vX G{GG& q3M" X0#>KLȣ5.Nߩv-Y[)V1i79pzO;m$̒9 ҕ&XZXTXXFC3SXaGu7ё}tbkB0ph~^9Df]Hgs%R2g~F>+vʩ.[R^R [XV\_XTRlvg{ΐ]<\[ ?bވbpKL˦tIa>>2쩷V[* G ;@+@qcfBa:FVzñNNB~qguVg\'f16;i?+jZ;wiTv]\sh{Cg''WA}}zN/BPHpQEzZ81"YBW,),._,6`\^}-4p85kg27fBX1~6>amϾ=FD;&'x~uqq~u{Mr`|:h!&J f!!bY|''!ۻo*L1|i,Yĥ,X5CP$xgAg8QcoQO;ZZdS(6./iޜ߶588C{LH;Z|Gw Bwf7tz!k};V.FyIqcpgvDC,>B;VG&مV吸JSmܮ-nZ`2[=0t>P%ZkoUlY4u9i l J;T sx,r9G!$,S fJ+8?@ ڠH1\ 3ftuW@qcn ;&zw09)uisԮp\^#9g'S@X_ٰd[, #U0W397BkCj?y!B`o?V4qy#08~ UOx CQ71"|H^O Y `Q! + gwE^4!Zb \h]i,kU.EH#Q8ӢNF55jϿ0%1>@wW硓 zWYr|,$.";7;w1+Ө;cӕpO wzv\y 5FZe8|R^͌ sxw??ߜJkψstCu q:)RbmH>/i[ Ua|Mq9t`b<2ijEb `t)y-rǕ&_wz˝LPꎋdX5ǔ&{$neҨRSD) k8t e6'm|;KcJ= l:`-̙WH ţG?B AI9Qh1|mwyRm ~L'!IZA%7m6FYY)jւՍ͇D niZc;!ZֲHqp$8bci5_//.)85s-\r9oTH{ QI[㯷5==fw8rL BI)//IT<&xMA _J,$I4nЂP?X%#kfL4YˠˋK%RlE$ka59.53,ܘo,+%TvC\:40U[kӃMM!*6Wɸ4fbs>*yIĺdsG @5ͽ |R4=<<K<6B%գJ)IAa%8,6 #%g[g|#HRJ^Kxok LH R>V >*4r` dv-e[ "F5=c=-uL J#꧶ԲɺFJ*ҮMl<.!-b`I$/D*B$3Ms ]ͼjl-p_YF1C 1b=.1^,Ԑƪ뜚8 |'}r?N~Y%b" X  S/H XH D2Uc@ČHh+NP+& !c<&o^KdbYi9PJ6P7Jקh N \1+^`Qee$`TVNT?Km7 QA8pGUYEL f*T"B8Ս]JV-k$g?K&q 'XY  Ș1D RXio57w Ί=tevʕU#g8Ap,D酴5RR6g&g斅rZv,3kѾEظ7 ^ĺLRi LP>?UC4*\H( ;FČw,%R\*IR`qj^&= ^{Xha0S||bʫb:=:5879TE/AX %F q Ii$feMCKGwOwwGs]U/NWu"Hhśr2bT`{<- Jj'hq_kHp1Jl|BbYor r_gHPq@Ӹ<2BlT1K[)c2Q7c $?Etr#YCơ'G2ξdE;TA|,-(`ܐ:e i}S+".vqYfL03UK YLA5ǁé/)uJ&oɕcMzDW 1yxYKm<\/Kvmð-^ik[:zbvV+8-i,1p_ <%4KХX>Y"ˋ JzE}ȜPeyCnluiVZb,F[RrD"~xMgIk^$'<<yݰ3t͈@ sz~:KC nWlt5ԲYm&>=ؤLƱ]Fr^keLbؽj*HoU2W[!='_kuyy}syVG8{}xHInJwoY=iL @|"7Fef?=,{͚a2x3YCj_|_KT$l_cUyIw0tz~t?N%!нukGN #:)Mv]ϓ0-ШY rFM0ׄZWOQ2.ܪkfqw-O1i.Z<ײSi5n6xO0e\UM6w5PF4ԉ/H}c4=]10t.i?+AoyɄR-q1Q1T]8힀|q{]|by 4ݴ`4/|4zN{$mBX Z}zzz'uAm֋g̒qVfjd Cw)E˻QG0x Jd׺U43ՠXoi.\BzyꞞvQmO庼{wL|^`s}mԶY>U G"d.C`Ю7V4¦}h s~Ooρ~x:w}Djk'-Гg.c!Ƹ?tbXNngA_4hݞm1s iJ'X/g|v˯_}J[;;ڪiI>[L@ZR(ff%̩8zooϟR]y[j+kv$U-8Bc MYYp^޾_,a5x'<{oY;cIA8xjI^EgUwGk7o?|;mA 5}}:&e}gj R^=Gu3]U yO.u}Dn///B|b(vWK#2Ǒ&h;1="Wΰ?O??A&?<ۻQaGw YIxnIhW4/_˯`\k?ZH;*&rASsӢU\lzY+,O~|SwYajpcekr?8/;u,1-fYdr?/o(˕ȸycRg \D,^v(tV%#e>RԠElja͂\xFHo^a DU-7d$Bts1,QFrO1%p f=,uLB5yEw=zxN^—IGi-ҵNP8L*wA-_. =1W͊d[M)smRnJ"U~ՠXfPM`~΅`vbe`C"76n|MdA᣾pjHѸ-)O'mwڙtjJZ<>+DLGlΔhX5Զ{xz.ƸA'b g6Ï_W[(rwV*YDLCELc*\ތ@PryM\Cx i!10_)[Z>$-4Mgg^h4hSU䒼7obj9+UN#hۯZf Y9y̦%~op on+cmo}"p2/< Lp'|xeaNA U3)S*wƾr-, p)ĢܜUj{dLcL-8~j]<*(,#UcK+ ^8\I#5/JPA BNT_S7Dk̢"Ĩl[T[2)iN%M|mD"C/bh?BkX-QY{Ǩgn@k_@2#'pW(S b#t,2 tkTxnH#3HͰDX݀<>L!:ɃL YaB얔4)ՍÔqz-/vS"nor9o@v-=lCH#d, =&`WTVUWrXuFa!0 '&7x<1`<+©mjU #p8P0Ѝ FP#,H - 'SY;OpXR\\XT:+3+̮n<'vT 5BEZ ˄;j|" u52TPWZ^R[\B 3j{7wLMzj*:-'?/o}ǒjy@ &͠RKIeű7dη_Bz"cZ3K"(LNW[[]S+gD.Q1H tU/eB脴7Ε,lHobniq~zbnyero`hxa)Q1ɧk#d4`¶㟾",nP-Dk[RR!毮K"pGSuN֍|+/=c8wN(RFHBgWg6=PM(Snnl:V0R[fШܾ=sLuH i6a2no' -vM6l:˄R$AޘUU!1`?b(RNzAh^ֶֺM 4qcơjsc/֙Njk-U:nDŃdTE/%@ʉ-W5̢M?}߾+Y_YӁn=WG[jk*I߹X<y: 4>@;W\+4:}T8`|42*5Gv^eO6P[7MF6(n2f\f#mC+  }3X8!-/SgOD"/J;(spUgq>7NN~udkdy=kbqɯYb]^R k'>?";Z@;Z,ĉ%cw 2-Ҙ@׀O AryC9:>eRL(9~ d?a9#KMb)̻00xC`( f.k #_|J>o^kiDnbDat)4~p(} M*h`ZͥC4_^#9g~h5ԍʥg'R9$6V`| +7v[hXDn8 7ԍ(lK]"9qPMH 5pF O.sCH>XWW;,w{i!g`^ҀMR[[96,#0E~~z{Mz/}Iw7g^df1:-<9c2b:*5$0O?Ժ9㹸:wק^֪x4pi3}m5|TGO΃Fj{=9&ĘڜcLbQx`ek21iNhh4 z@5j 'G_nŔX&xT[hc|ǘ6vsmlOٚ@k1R2=laOGm '?x\ehm#3Mz8qI"^$QyI|o#ä,uq^@ 捃i6{B$>^$@oAi҉fL:_ژFP:UYhq|mj2w7H9Ƞ+>d<\'ȯ 2fK;*:&RlNLUAjOk"ѣ҄0}s`:|[IW)x '_7/ 1 SZ2+ׁA"6(D Ő0S11>|-p:wJϩN6s(D\,ef`lC(6:mtsG){:j^>L L Q-JbBuV^ i`vM)UvCCk;Gx{ 0usbS"-Ұ ΃FDl,BkA#Ҵ79hH$8u=#ӓcӃc &XVJ`n3I(Hy`=r\H*t O/ vrt0";&l.ޤ i# ( rrkUD8D-#RU=0? TL"kFAj,k |44&4 2B1+j{&'{ L'D2de[(A1zLB.cPۦ6j@,'Q ^wo0 ܊BI"0ELTjL8ڦ׶@9BYY914M!Aƌ0T*6F_l, HCMgJ3=<@q4"ĬP%f֑Ɓχ;2 -c+R?UˤTP7ʮ[Wnk…a^ifjR[bЙ NUcLQK3pCYPK|V@*T<52j5͕WHL;"{ 6!brܖ%1Ș[HjUّfQ50= h:cc:v5]=.*rB Yg )7#9f 2G'=/q{T&bfbh7^:1 Q]ױ82̗'R2YΡ5x_{-<7#%1L1p =Lw^0cVƨmjhJs_QX<#$ۅP!=,+*4bI`BJ*W·ljIc +_e:"7 &.6P~A+A;X`Q-=Pw}̐["?sOXN0WhuAViڮ1M-4B#֣@A0(Uh#Qzi([i|0m[mCD#zB4X}Ȼƺ )`4mF4xI*D)hR%?m/4QSPki38#k/Bk߇@SS@P`!+F{gQ*kQ/& k_iEG-z@~ UfVd6i@ṃh.$)Bw_{!kOG 5M@()µE|5\TύZDm 4$H0 Sbu>zP>{=¹=x0eTa~}8xE (܄GS+v  N߇91X "[a _aUո8Xb ! }+ xVv3>xRS&%$@@=0J j>3OV>{uv~IY)u^nIpa 6 II! ]83\P٭45Uq⼰j|J>.CTX^$jY4ncʺpcc}uynfI*)Iqqp‡yO49eN1ojQ:bcuz <Õ|00Cn`9Ev)wzMYv(o5n5¬l0YU6I,7 -#:ͦ#pyvNQ_0X?%$?%/6 Қ@8NN}=X$3=1$|)sz_qlꍙֺ*ds*뚻D}4ho ԑ;Hk8!NB꫒,xG XV^ZT&Ha۽y;'iyIqp,c>HHH,XUCj ZQnnNvffvNAaqi'.l#7C b$<0 )J74v,0D".'<jmߡl,uC#*uE3D`sٜJ.I"dŠ̆U4¢m:b9)w}pjW*($2ɭolkniyu5@f|cyӸ"oq$md) &@po[#IY7x$.z@HGG*1+bӼ7I&*ojeS,o-UUP83]_f1謆@8IG 561fBle#t*iwt]D 4ZV!\hr4FèЭbᾎ͛^)YuǡkbR-ѱbi\o0ZG{.^%Mg4L*~rݡ#m:)~^aZ ixMkr8>sօc ے~^MM>pR0J:y6؜3{m[VvѰ+^n`Vv/l۳UEiq0·pxMj80X^Q< Xuޱ9D;b4pq)Yad{fats): )hrC>1| &"'63dEguv+Ҩf_|_ /YyY޳h 37yp闇G ؈t,θh!c|M8 :{V 2(6ڬNwM' AYpEv0`00YMNCqؤp"C>im^Vv<$5,vljǯM?txQq)yՓj4c{X0y v(k-|-5,#ҋQ{3]tu}PA'!Njܓ/t74׶ۥyHG&<'t7`氡/B'!Ɛ{#in6 uu:j0 WJ٭ v~q./P2 x;Q}{y$ ' J~ݺ%80 ̪ښQŁ^0B}F_M-W6¥Fjn](8== jn͔P6@zђB_W$/^:&[ rr [uy6/Ay݃drjuz= ݝ^nnXU-4]&u܉n^%@0ǟ~ί>\},7)lVۖN/IOWQ5|24`~ (zy#=2VzG'N /c|`=ʵ,>|S64`l$voOOwfff 2ʖ%Ydf&j{"2Rkwr,<:O€ǯ/[P_[+q4b )zp5{"z?㏟Ϝ?Y=_1'F>NƢjDkLޠiy ¬ra^ aoϡ=˰TuVc✤(03r&ZiJ|j޸~ <^[e 2#6*U|1x2fO6T94PC-^75{=MwԦ }_靍W#$m浀uTǃE6.9܎w$_f)nxV:KS!B:>_4aw9ߧlx@~JT ׬3h"bLFe\y_}_(uE"Aqgw42H:6m|+$V< [ S4c;.7b;5mXغ8Y뇰XMkd%pYפij^ڪ˘fׯ`wh:$Z~-Z*OaӢLlyRliX7v篏дM7 x\ y) Rz73NpG8ꦺ6Ͼ[Ai*$ƷV{ R4y 9> ]Bv݀njCm+[~~&"I΍J+i6Z,# ob9>99;{NnO-ļ2ˋ; lYt&ɪi*6uMh݃qUh72ݣՔv@ 60NnLzIˌfT ˎՍc̘i`k{cս2)*.ȗh<^˜ %(Dȩn7hMʼZYv7Sui^hՌ9|VC4ItsQاrr KE9cUYjVeVv#UIb*f v⠴N mh[ąkkJKk4v:%+Ny`s:MSm2~UeuMP$Vme1HBK-sǍJL.}vߢ*㋤RQ]uUU-O3=a96s0ƌ(C\.9pFuX^Y]+`fټ8(Nj=\bM:z<*'\t̀8#K@UI, oF\k\]cyjUZϵ2+-Y"Q# 5P$=sfǻ[tSCCcSFZc]$Ej1"" 9wdTBNml>ÂUGO`cm#shƚSQ` US?"9iw`qp-vd:'9._Y8j-*65mǤMX뫍˳̤@<\C؍ٕBeKϨZz+rqƌ&G|!L +%Vemݽã#CR~E~zBCԍb1c͡\j,>%N(UTJ_SQN`¼fD3xt\rFN^aII Θeg&d+V@dDŽq@9  pBƅN[ kS t~G qFEEr``Li),JFu*%`A{ Ft{I6ha*=R!#~b1!*84v,zvx^R[D^wL2r=BAi7 SF? 7krqwrOt &`#ҝ'nqq8GgUѣ"g0e.I22ssrpYԔD]1ԝ~C,-HMu"0*45A%&TԉUccÃ}*ImEqnVZ $6H.XD"wIY|EKԬvł<{].Ű98bo2?))Jr3۵2KFebŹv|Nf\,ݧOnV-s)r LNrȘĬrIƾvrrwԩ:2P"UZ{FFݗ~_QGq!hHc_b+Cz^ȭVj*+ K+kItpaa)xu$t?&1J5a >Z*3fN>F' {uummc3 Szp/vR,({eI212>u}v6۫pndFgq:e'`- ƕў%Vڧ?XY#ms ݻՅ^H QO֚b ;v:uKR!WU]KEF4bdn8_aa}^()ۆ;-;9ZwY~; 8]M*\ o<' (% 5qZu 5`5mpɱsxztY̾ӣ-eA%FWC[tZZ M`D1h_?:<EԶͣݟiP[eBd5 -{O/r\4m_߾o T^.ejֶwz> BZaRd䀍˖νiw|_4ZCx$NƐ={q`[˫˻o~eT޶qx>qB7q--|- ]Ș~q`2>DrZ>>\'VCOOl7tŕ9{V*ȮCP GGv іç@I.tyy[hoijݼ1ԦSWtt|\<6 q~9/i79[46 3!ӀR\4is)b~ſ_??Covk[ZޫxhגSLrEf`]MG/?}tQ04jDM')EףNqZuba~uյZ, g ;֫'7C>D:fT"jYnJ A1#^Ѻr%ӫW/_M; D qoUS&%I*i-,/?} M;*xՠ]X NE+`\vm|_ݸO4lYiN˚4& ٍ{<lqi{jdRxPk*j \nXƖ{{ö-u%%uNS?Uav@P[-SLFy˜j[l,+* f/MLΘ>ż0)(*/k3\٦"|BT6,3O؇m嗔TIzG&865=\lW+\.& X(1# lֲmۘ5m݀(7Z(oN.Lk=-r^eQ~nNhҁkh'JJK" bt rJ+]C㓚EnXP[U^["֊X-@я1Blß-.,.I =CKSC]Rߨ,/) \..71~D $6΍ˬjR-nAyiyUM5O$St w4)SyiYuätǤ´-LqW^[Q^]S ]*1NUUUfi/sx 'u^j[cٌځ~UE5n\ j 0õUUy0δUgcFQHsLZdwXJºꪪjhuMsuIQ 7$ZD5x"O/W ,.yW% ZEBc{=.^.'e>%#;0ϕf$ s&8\xLg%3&$$% +s (!$.bbbp!HR╛ wG4}#E1f\2yQ0Č|&9`Zc;7B #nT)`H_ρ >C^&n [#TvC4Lߺ0 &a Hc 1cN(?*ڍ >WXC__IײbfU^ FOE X# #a0ek4ުaэ~trt"NGCǰfC?6= Er0Bk Ȫ0;}G+(cjk E^hDFWw[b?l'FlF_zz#x/p|mIFj`܏`f@}nkZěAZ5FP|:V MPJ1kh,2_6gн24qO@&LsOWlTԟl+DktB8l p衇)>dcR-\99p1*ъ`ic)d$ QL\TT4.Eq6v垀O.gW\Q#J^q̴(^MCES 3Q:iCkиzzn~~anfz|QZWQ ;pvHK/)زVW^ì[lg%GG܆qGc3 ʅϪVSnBM-3vTs˅- &bs}s =<>\nKuE <\za# PpEkt}x|z9tҍw*%d4Cr`$Ah-crĝ3FǬLMMj6/[pc]aj|{ rLRNl@:{|XlTJԞQܲkQ!(J'86P5PƑɹQͧ7юz!/VN[G?]m9zEq`SNʩQMX֎o<ځ&(/7;Z زznϫr*Z#cE'fUOO/u:¬WTWUVWWI'/G.^ jB^1oߟ8gzd_$HPJxPXWW+PX^<RYR$w1)Xdmm RP ϓwN=?:g3bϴ"$zܨ욮%M`T=0>9{z;rPٻ}| HЮ{qawp~2iàp)K0jڡ>8OG3?<&i%(Cu߬iuS+''g߈ݑ'5EN)k]RPhL9:CNW뫫oHdLzua|S#{m'gw7[ N[秳)L ]>y3$I7ŔiB-ӥuv $-w6᫭{n+kSda"'&ys ꝁMs~'ȇM͍jšsV 6h'6sMHU/O\Ϗ,89 f:ۦhAqOش2h/?/_9OOv΅֩١K\V343n=eKw˟| xӝ}^8zֵ&ǂY^h*"t?ϟ>ACgABRU<8`^'ʧ\$ָ`a:5R?BR]9;JU{2Fd77A __>.|_-UTmlgIl?ō4wO/ϟ~?㏇f o^?7UsbbGV4v¤B~®iUyo M^MJLaj4GQŪ {_~iCM_2\1 3l6`.&抇,y/__yC{Vz 4mxp{;PKè>4LimʼnVH—M6A^V"uk,'2H>k4֚W|^Rp͵ZǁQt&DcM̩0k|T/`:! k5lHx##&e=3`jk 55Պ9oYN"Fik-*nJh) C uu+eJYB3UAȘY٩{ܧw'5U Ϫ[׃`^A)HCI 䂚ʪ6XFEȢ3!ܺwfܸ{:żrѨ- Db41Eo/$ 0-l{=TJ8lPO"s&oms8=nm{LL9|N0ݣeNlퟚ]vzj9M:pnem)`O$"Q8fΪ*ʪlQ355Y SK&pWWV\Rx|F;tqpܸ)bGg槧5ꩅFQUEq^A`wYM| 8iJ-U t²zl|^T[Y\S\7hl˽xd&mAq՘d5Ϸeg׈ }cKFImUYqa~^vVƤDiXs6}vdO~TE򦎁zWSU^R_Yvr\"f ofJȍI)ϛlFCTVMdoTw*"^mM5 NöUH4##I Őj5;UeU5e!vA"mK6.N4TdK.?͍K-MmnOaL4(eإjV~E3PU2skyِ,`r$(6hnq4CCc:oc5qI@ v){0" (,&ƁX~ >nW^,ɉ׌ RWvno }^7x]&xAdbG7k-3z$rixXDcj>#*ab;lXiVO!11M#gH4OłYjaH7:9;7Yof$Ž)Q?p,`C81 EycGOP_wR\]B#0"# ?QPVU+KdR16()JIOBlU"""Dt9RZqIiٹyA([,p$K=G $bo`3᱆*U0i ( B,F2cC" UY4sf ? Q448`l6"v(ސc!k%?"o X6rp3m_{D ,$+v'P9CpGhA<1̆d 8jL#xæ!lFaDE"|`, "4/XDECBc`Fc Ոͦ>zoFjbp껑 ^$ hc'/?hse#߂?S 0iGO!i^͞8lfL޺XtYl;H']t(0Lql8ޠվ{}Vx2U迓wEA}Oql? 5Lkx|PjWJDs g߾hˤ@k?NZL#E ۇ(#GK!45O)VREp (2G%8 بĤ[EGt ZA!"lތ ? jkf|#l`btfNN#j!ʤ+;W2jasa(|Rq$yq)TBHFO$?I D4 >"G^. X\tTL,>&4.T N! `QbS\*i\B|bR26 |Sp6.OCP f+2%$bS{aiyEe5"Ru6(gTiR.n%U¼Z傺B")i\t-AtB?R4Fdꚪ¼܂:ICؒmKhǣDS}\_Cz/ Kh8Ѧ֑VUUVTT;)oÁG^͡U : TcӊCqIE\& ߓ582H,W5v N/ wwwuwv4(2_ѽٻy0%FG B܀\(5n|tMv)bT=]\\XX[fzznffjdYU/=Ǘ |CYz4hv@ K޳[&mVk flЛknl\okP)eBEߢn:,O5iR,Fe"YC~Yw &u,d3Ϩ\pLQBjen/Ԛͭ5T>pE:1O8AƖY'k;c^v7$fwi98s b~ysewaأi,y#2WЈA_\nPkSscWR 3yCJ$4kOtׯw0aiho_nmhhl]8abHbD0ȸep2Ox_ˆ|fv湁feWIi#10=N;{mɸUlJPly18ԡ$1Ӣ+| }巿?ѓ-BJPoy1\iEg z k[𵇗O_~x\[?~ٞk[&QJ[v= ;֊ͬvZq˯C`qF>ri:"ce`˩%ǀPqSeZ;L%Cw<.?;bp6&J=5?'1j"8Q)jv=<>?W5_W cM"L1 tUf%D=ݩI˗?zۯ_! 2Yzmo˻\K" dkA&v{+R[ן^yTҴĒl(F1  fĨ^ luݸ4Vda}=>6&@Xl/?=CvBM6;k^MSIZ<-ӸUͨ}6TT(7M7I ^&:yNlZŸu"twi>H 6V=jĬ D[O*Z1u#eF[gPd΍c$YKe{3 _B _^FY1;Чf1ŊF- |M"a\_s-" H))MԼVNZ!^e)YK(n U#\SWO;6Pw0T]QU? "CwBQ\fpfgfWNA LWVAYR "<(9#+تk~A/9TQ۪zz(d1"H]Ҩ֛Mڒg`lf~V~prŔﶨKSNk߸^`5 I+ pxdlrI?=:6$T ^]ǥN}o֛, MW̦NQIA~qEUDQ;5 u6Uy%n0 X:Y#y3FɪVʆ&(?7cq:q}i(1i%ɼnfVEF}tuTC`x@h |(!~LoXmҊZI&()...uilNmeLQI49GFbT~uUeYiiywtLSYl`?s")uΙmqJJ+奥e† vZfy9I1\]5 r$=nZjhYEE WS٭Y<T _ZrY1ႎ BW%br,کVX xֱ%؍=lh5SaL!pv(1Z;ov~E?=9^fcNtG݀:M"6|? T%H5$xև !R轐{XPwCkU[nkFkbkǿϑ4|B}O&+$= ʹ16tFk@k m?P\JQCIIQT[XQ)UlHh2ѷDw>D}SF^P"Y(SC aڛP`@3#:LP^5iY$![/ yl΀=;P_+[ Ҳ遐5R[Ա vOfl,q|z!a8  =caz@^_E%elY_4⠶[1WD EZGyrRqI6,0Yq8?#M9 *;P6Rҳr?07 p4FؠtԐ7ҩRdf81%#/V4w v7˅5%y)qQ" (18ŕ|iSVb2~Y3;߮ՔeQOG!fCpeq 7V5ۺQt7 +3iNK `qX$*{Z{mc`kYkgnL%]p,!J=mzNnooCWMhmod'Ǒ*fqh4R^ܿ|xy9;Y k['WOϷgu:/5֣8{BbS!7quUg[Pc]AzC (F؍DFѶqxաlmWZ:G&fVO_V~az|WLEsRv|pɵ}0hkQɅʊʪZH3<<{|>+J`M8U){X\Lu7uNjIQIa~!m-O40>uͶntArIm-W3J:C\O_j+1ecu]P<_/26׽96wȅx2UD2u%xgWX'_wt(uGV@abs*[7kVH˥+U-]2P"*/mSO^.׌}uɑ tAƟȸbqv}iU"I%ʆΎ!z^! xȧ<+U qjõM݃S3j5֗،c#CmXUTE n:"(L"1MlqiJpӡJ#S ٠ӯxܼf^=&tEvщٵ=QJEc([O7,75DypcdSFH;Q vW=v'hiM. | fKlN2C GmpGUɽj]2W7A#U<oT([Ɩg LYoo0ͦ@06,:H>yy }`2]+:Wpij OI,6mo2аH(hY.[͘p8^/;ƴv ʒTA_G{'F̀{R5LCG%.p~ + brrgimЧϷ[% $-BÍ FUGq(34Tq*3i>Z)ӯ_L OPH3VLL|UC@! B_<X8^ ղ4YAnģm%C5>j{utc?=|rk!l|q n{wCg]gi*Rll A?:>[ؿ:ˏ_n?ufQRN}n\"!3&2^Ͽ=.o>5, rBٹuy3ts`#G: A+ӡۇOSPϟi3L.w,#Tqy~4M[>>~:ϝ[;Bv<6^t9~:`'p`?o} ?'X}AP$Qtx 4YuV_~BULCw\ Mό 5HMn_0lήO!ς/?HS'Op>*$jy'qJ u:< ?u-xͳm2^`X,* H:*@:bYb>8=`!|+X {H4hG&bvu1dGWO_~ן.,Ӯ'T-bM.-Eqi-7GݾnҾrOs2XlM@7*IGaU{0~zs M7Er" -Xb\7ydc ՚59'21=|mfA;]^_B4` ݋}l/< 81o/$fggui(b,؃DcI2mǒ^OUmS`g3lc6שeŇ9HGulNlzbhb6ajDj[ZVtw}&oiVPŵʇ(Zn'gUw̮l]ҪZHܣl5U%e%i%Flp3EfTU Dn*))/u8}.n@VH:Ħ,YQh7δKr ˪J(\*79vDcy"d S: xܺ)b5vɪssr J˪pڮBܩ1\v|G]N")exK͍O/wϛfiGYSV_e55%EuEizD)\F?xOfsI]TRVb@cXfI5UVTWԊ[ƗnۦQ/"bQcb UË6jNv*UU8WY+i79].miXY !i %q%6qljwZmFϯi[Nj[E—ż%a[VG:[:z8-ƊX/:+UEv$6K(7 kVc˳㣓j ~iaP[$T{Cnj)Qo5a_wf5Lfӻ~EY6e96h4(UNjn?S]R2="7Ɠc k#q$X83)^kFndlJ~obn`\vn4ŒXHD`T!pɁ[{ǦKգ͢$> 2U2ɵ -2 +殾FQuafR ?E Z"bΉM*:lWYWJ Rx- Sɴn y!WTB(Ta}ufJ^{U4z¤Xb?.15#++;+;;+359>uF7:"*"mDf6SZR!q,m0̄9(2cwx;^sP: C+aGikF:G7M#p rԍiK@Po "}I4cr0lTn 4e7f,:,p=6\8L||7~E f$`}G2x"wR=G,6Z6h`VdP)PMV(ݓWÙp EJZߑE%cVza!0=F$c#Op[U-Ukf |%7<|U!ND@ ҖlQ6:(ThT -t RF^77qǯZj j(~"loHQ ūx{_ga794(FE~FoY CZɆ#P)ZQ"mmtR'HyI I56id6|-E]^%a9 _ot*Q`.<t.`L념%9Zn$C" 7z$d[9:&& DBE' pݧT!i[샌jʠ;2FO~ศZ0BL .i>(kNG #ZuCg6M%(a78|FwJ)I2c~}DR4:eARRrbb|EGFҟ"c r `!wѱ)i9y9Y)ɸjP:e(0HhT jI)'%e"X,UW`˥D}jkRxSP%ON.,ۺzFFz;BzeBTH##9 6U.w L-&fV pW?\[[ om^?<ߜoznyU>{7cJ&ǻ˽̀ì`\?~y;v- 擏9siZ6K~ؤ2qekenb{`xj` \rs76n ĚF*&)Lܷؾ|y?th2σP][&맟NW- y)Q4\.d'akŢE͗}*F mQ/ZVO_/7c>꩞<265_Хq~z8[Ӎ*>_WWC쨖Ub?kDM}ٺqDRJf 50LIU-ۗfQ"DRL.Hb~֙{VI[GW/']k:f -98)TXfhvsվl}4ir} b}}Csmk{M0 &o/jhSa6]&uufPjˢT)26L9 PAmVVmN 7Wwe!(4EudlZeȷRշҖll\\=й:zEӴGJRcprIJQs̪Nmz]߆k?=mZ֭:ggBYܟxbM;:!*eվUg%wna@zRatpsu E\|L̡s\_]A|mY*R)SJW9.R&$TNAr'4v ]==<9Ǜ+ȇ7$y}qԫMG DEnzVN_?|t\=>?ޠrxpquesU𚶼spusǢ 7nf2UзVF""m a@OSˢOwi ${8- )!Gή??6/O|D|~$xrQUĜʨjk탳ۇOGfP=?BO%*m\D2Q)8J(w=д`=j4%J$-͓J_Mv"D΂860ms<<}z7ΛwaP'H;ŖRu\($f:Q1's7/o7g4 >N6P10.<<,z.h*@O6}:^Ýcp$8|255g8<9!@ iVwם "~u7LvK)S`{p!ǗwIq~2LItG̨ ίCkL+CB>nU +8P/x4k͌\ `ǫ-os Eqe,,P?Y鉩I#\ 6į X6=aAv"F'3r* ffo؞_zn@jx-3}< "hRRl{zG G%'Lv*amcz1!6aLkyiEiFоUCȱ)k V{N=]i-qauճ2,LfkTZwe[C3٩!F+wvզGۋqJ} =oDgZ7ΌNN鷐dê$SE˰X[ kjp_Z\kALg]F|#'Hclanj'z:`nCTbr>?)b@,ohP4(|`Z,S58DOH.iG[1Z^yIqaie _$Uuu5*$2pKc[GAX2JZb זVr)˲0R=gz |fch:DgS66aE%xǺ>U5j-6լV+KK+˫IMUDc>N"U,76spGƧZƗmvbijjkjjxyr:S-yPƌy8hkg[ǖ-jLt7׫hzyhL(>*GZ[n1T(ۉ91aw:m&p̒Nv_@ЄԐ(K+!I,~MLJ%D>6jj2l6a;&)/khlUKScQ3ƙC;mB$-:.%/ DX[QC<6I9(oDZ'̜ҒL Azh$I z<KNMOHOKPc Jr4/I| ]*y+.,ǂA~jd-^ut3o#>F,ԁ49a'Nwlȼ@qkgiJΗTjF…`% ==%=A 3}E;3$.3Taa!l:ܥe{m`og]RJ 25Ӵ`!\Hx،*iZom_^_^^]\p5.fk椂0dS8烆<Ȣշ{p{wu~rxw|r~:p&eN6a7%u˭+ˇ bZ1˷ypz|y () &j%QܝÃ}C#sfΗ]|Tndt<ev^! I2U}sGļѳq9ʉGlaզy>6`A Qqy:p4׬yrcIqIYE-'5uϭxo^^n}K’xqd3ī1IYS8Px^iWIx|^MuݕWTVUW {&[ϡ|k]`]f@ ӋzՖ}I& B!!WYVZW}ۤ<cu!ȑ#769Cڻ}ٱLt7He\R64644D*D ݋ǗuC(-%2|AmTBu0xl- 2RjlhnniW1)ȡ9M܅ΝS] TVjmQMj {GYP' V=(3MrBPkCc㓳zA=4 | l" X@-:12lK1$ZX,?:,+޽5(d=(%X, MBQ<*JE[~z:|FB2v;u4צ;,ZW.#T0׎./ilʣ˛b PO44^B2 =ܝo,9bZ$[f]][ kQ*D:O0iˡѪlnЦEbIڃ^iȤL ڐy7Pdþb,/IԞ#0 F;IB N]\]ltfOh "P$mI}n|zy,_ -]td׳] ]]lP(n]#hɍI-VNX:<B`#0091:nkQä{wc]ٮEzrN{F2]sh 4CE9O+6=ٮ-LOLMb7}8\?)>7sŽk@QԎ v@K2U( Bf{1[d]%qntttVjnjJD iAvcWc#Cݠzg]k~Y~b }XC굹472 &Q}p5hhLå I# ʋDgztiibQgh5}X$ ٥8LEua+=^ 0mF0 GGT텄HlKuv6SCR'`s'k)0:ʲt152QIdb-r̮-8ԭ()*ŒWUWbJ 4N;zO(renMu)JJqJA=vX{E1wؘ,i߼jږgzUŅ%ŅE%ve]&@0!F^h[8s- BXTSzǛ&I aI5 $3 ǖLvf\i kkxbeqv^!k163 i*tLj-nԩ{s`Vkvx<nCX <clccBnk[ٜ6iivbx,NBabcʮѹed1&ѰQwȫ 2bl@HSt- $c~vqqqa~zr^PÅ @aeMעyƎѱёzIUavJB4@޼,PՄÍK[[UAuI.В03 NkC iu< '=%!J ;Cfܨ YAY_&7$-)Ǐ Sl0c1n|_ -3)vI8^Zc\GfQl5I~ tu /)/h|&,뻂 rJ ui>Mz "ЯuFi$$jGc>LS 64)xj ~ ͈osmz@0cb;%Q4.Cet=._xQÖJl^px3KaR][edd O%ιlj<*pxO[BrjFfN> WZRRXGYgl"ɀ$80M %gW2J!JEڪҢDCXW`ZÁqL|Jf~I_V7<61995>6 ,Ƭ'ޑp;c4dTd=CSs:.so1 鉑V0;=ԌMXUXWv-X݁jw[ x6UquqNZBltÿf9>5N9dr7vvwv֥ɾ&qEAfuM6v!ܨ؄ Qآɳyt]]^]_\/Ov剎z^qp…&2*61F7on><]__vO.o/WmM8R %Q{Yԁ4 n~dپvtpkq:v/sxvSw;>x,;)6 i5c:ӧΪC4=9>VOqͧϡU݆FsB8QRUcAdckkiT)Je}S[Wޱvx|wflZY6=Eg}7A@J?^YQ^^ %ygl2^_҃ ]Ж K3ت dUxZP;um^?ݝ J+8lo p|_eڶyvwwnQ4MNaWUdsB;05t4%o עFn.6z1"ji2Dȫ:Q;5 :XE&S8͎yM%!A.Ib]|+CddƷ)#ӀcxGX$ZSSKW`WkR.FEH5" 9t_X$ JgpT?hm|Mk TsIvCVDYhbfɨ6cF,$K<{S)@Icdži -JBw abhI!A-/>Ĥz2flGZah`Eh]U6}ҭ8nҲV7i ɉOTlJ1E[z`Dɽ16SPnE%?_/b3ey 3!yurscQKԌ8QApN y=zjfӨv1U_Ezm$5=RlL`G{.wնl 1yиsym,KrX4T3]Mni'ǻN+` 4-zܚ8^# 5 EyppZ>@ٱys/5UdSfn/O0L#o{o3v8fXҮͳо{3ͅa!`RxM ݁51Z]fBivbϥi.#DYt&A0jˌ(l1ot'u2Pm-'kQk fz~fy`"v7!~n2uMF""))"*q) f9=~iafZX^XZs xQnЪ&KJ 7Y:lC|~ڷ5M S̡`א+2>`flbٺ0_LÀt{ka~6^cY'ARIE3195ƭ;>\[E:^?P5Ѵ01>:>> cݹp.KtM&(6ܸLW#Ct)wץ'FG?GD~2Y4#==^ty )P0 IВMnM c=]m&eK8ѓd>thil4.ԗbNXuVl><]3m20hL@6&FD@ 2}jb~0 =KC p'l2=Dįdԭu9D_>35X\W-gJ csZTlWjF-^HTTcW ԏ7VNCI2 GSD~uYQaaYYiQAaQie02t S(.H꼑HD&:fnՌ׋*J _RVY'4.K3q Ia5jw='69D;bXfXo_[YYQZ-IҖY[t5ɢr,"im yCF-b>[= T'[q(p״p;:1etlڜfpo[sc}CS[؜\eu8QS^X&als:&0LVl.lhg%%Y?Z 'y1ns9Q_JNqԽҊ(j:䡰\^s\̜avl:8쒔G'åj_GdLZo%BFAu)`S_ˉr.MWEC.$Πx6jIt%+g/a#AEavzr|L$ Uk6* 2 D<3-/p,J1ưQ2D7qҌMHNKLOKdDP/Z}5L;RQ1qxD\mbF&RG;9LTT~l`a2fJuOżp)^?H!b^ɘ=&Z4BQpw^(@l*U2Fl:S` 0'F!jPXP& tA"@}g!P I̡a"蠿*h(~60*'4  C}"zvH^cl$R BZ 9[~U=ߪ5S{̰5Fwtioo]6xF5v-0{I#i Вe~m'W|`n`C?p" ٴay2tv$Fw;0YnX 9 '=[6l=@wʂE!itA:ذrPm_|@(=&&xNw@F2ww4nL1̗}߾ūۻoZg훪k?g%8_3@/JoL3le#?%k$4&>uJ|b1l0a6yc|UAۢ(7@oz- CFupAG',d:4tXmv 3ѩ2  <7'4^E[ymب 8Ł~]hz̓ө`0L?R({BW_4GrT(\s-**+ >'^nH6668:<<:>>9ߞo ڂDF'v -@Չ,WJ̾ˣm"OϷ{ptvvws:;Xj 鐰@dDêF{ֶv|hgkk-.VLϤw\UTrt I,Eu1%vh7w;nYENFM9a}"pZ&m؇fJ$xT*oh_0.nv< ґ@Ӱ#M&gUF㫛 hg\ȫ$besZ:zx<4jhCOF/nN} Y|[ 9CM:N7?TS <<lmumM]mM[]ѺTOkLKb@}_cSaDP=ݥU-5DZDBUs4E(1JZщ]7=16L77֜<tYT 95uSbfBsnoy YFT&5'lXD#挖%,н]_n (V Vvd{efWnhھM7{Tѵ`N\sλ]SсfHkMi|h\Pl`O{K C yWNnpv3ណF L{B@ЫkI)"7G{ 7+"[ ]HFA5j`R*%BA]M BA?6o–I ZI ~]ƬV(k,bc>Q!|4urGCQY0f,-.).-օAyyF}VZQZ\TTR^c\kC!"6L `Ao{JlS]ub(GgPwJT`i[D_R,ZWTd'LLU5 8 +nlJvkZgl.vjA!ɤʦ)pᆚOG0_E%W&'F[kG`w\v_IQD65}ŠD-23 kf &氛uqFoYnXbb3mGƥdgf=j5Z݉SUǵrRc鬓I_c]};:>-D247n[mV\j ZYV!Y' sl|d$f䖉p+X-6ݎZa/Lt+v* 4K57&13485fy553=5:j%T4S x+\مes;]f<d()An_=gqǀLR/., Z4?;m<ɔ[8_hVӪǼ@KFyWP\VYjQ^v8eG# AS=^82rr2`1 סĪw.Rx =-X2{ 2I }A K d;9݂(whP"?䩈 Z̻k&%1ȳW5ShLa #;k"1Aeď t}#@#D2-M "1I{q4sDՉhl(,T MArE<jmt:=ƴF e>MH"54n7w3>*g|/2Y~^Zbxϫٖ0Skkl~-Ry( 6tPTx1ZedQ.RԄ֢ "ȑl[S]JD8uF'P7, h13O$j3u\Rk1|,aE@P`ԦʊN%{TN =!>Z#iuܻJEB]iEJ D'E0x E?ak0;wBG`cZ}I)y̪_1'12^[t> %^NyE3?^3֢ kǯOt%A®EB  p0/iXK )9kK(eWeG*c%QAX`vP.B^1k~Y 89yHp#np3_T1>vxˇn6_[c_s !>#Y0Mx()6]VEJh3/cZJa uɨ "i%?ÀhJ) ;W&vTAn SհE[&>q0[RrfqQ#"e ʠYbb gddJ<$%Ԕ\CPt I jvnAaqqIiIqQaȦ*O!hmP"RׇY\BRj2d6[-&(7+#5%1oZ`FHI8B T-q]^[kc(/+-%!i\],_rWZejv O/,-,/-/NۻZK ӒmVqTDD-F9!1-DonwU>'ى>k4/mb\/¶V#̇lڸoחg痗_O7f{[tEY߰1ZDjku[Yt-zN?}0_}Ki1Jf ^e3ރۧg5_OOC?OζZ2cz`!oR -/gZ2Օ<Xp7 N=yYj9 7Cz O>QErb|E3VGkpxdbeksvDX IѦK3>ؚh}AnO}ܜݔټ %Ɉh磲b-6{g`xz}[z㻼8>&h)|j8csYΌ 6vw{kG' &C%ZZ:;ّg/-ow7_>uƩr,ъMH5ciwg6@tu'dKYJI v`:\ǘUMNH 9%{ՃNh$A:t^-6Ic'ѳz2CEՖw8WK5 [cptjyu~lgŢG}g.>mLwt c|Ȅ=[X8ٿvygF͌.P2 "֢>4֌[+vqW:8^k/K(8DGB]}ΎF[kpk^"WLb-h-9zm-fBk﬎2i5RckAR 33EasK Ρ- (-Fg:_ZcYaIQ.OTI~X7THχi05)g Djh)JXY骈և{Cm:9N/3fBrUTUee ;ƻj iFjcƌxhXQY!I4!ߴ<;`L ixHdi#oaj(x)fDʘQ$X;z>q4ڂa50!Z/U'.j밻n(Kr[tSێ?"nVg&].s`djmփ$#3LI9q)0:;X[_~Ǘ4O&!ZUQg-et =k^]֔Jĵ8`![RIz]oq olnmmoK-";;;![my>,߂j?e%gs>wk`|NSԗ2ۚ"G >i)n]\Xy}^o}m}myfm+/x[H45α`L[lh_^][Y[]]YOS#vSy~ߞGbQT* eKK64gFV U,c lyE#SΞv8/#%>bD)4d`#q搅,%#`^pt@¬ MKQĩ![ hSEe'e>,M͍ u5yScf74iOx[PTV:0,KIUabDk"YioN.3;<\X`Z6XD%aedeeyIa%V>TڅǻSR_*W8e!d`" 3Њh'JdcB198FkOX7GHQ*5"u-y;_( W D^#^.]݁ŽDq_sU2&BgLsI&RJe'ATs/SQx-('__k2lHM'&l_*j/bp&SBAk1]CEcdN@j13 }Z RՆ>Co_nN˗/^LP̨Ɂ`7+|H"kbFXEŢ7V{obb_~-*8j2SbIh& D@wYSܧ0F&K3FrO*1OeOH401zG"]T}1rQ 'jȔ+C1CMaj,foLA0 [|"s4j RF9fk#ݕ@%|We/*RG!iX$b80Ba- "4?z*AVִZ\#hBw1o*2pi$$#q_@'$&A5vװ\fSRߥedfHw`רq"X\%eAka>[MTgA㊋ 3@D:DzS 䀍Tah7.>\g1Lz]yIa4AxM$>dB)مU0n67ue9^IIII|iE5ٹ b(HMza(i(fg lv-}Ar~eݷ^޵AR]B2Pf=du Nx~=;?zw}nf6drxM46.oryVOey|>Q^GTjոY5ɜmy}ÓT.ɎoT+5̲K?.\@8:ItNPx{c5UKB1 ؗ 5{gogǟ>O!EO[miVj"6uSAKKEor/]܇~x8../,-mzwO?ߟ.[EhBqK۳ NN-ova%!&}ǷOЄfq/_C?IF.ők:XWYZ{~H BJ>?>>^~ހ1Bz= * 5k5j+aGn>ocDWa.C4N>4[tee%eʪ_ƶVDSgw;:7)h5ADAqD_N6Ʃ`Cڨj|$-}` 1vD4HUM 2cin@|J46477X&E |_l sR@LI iVrsamnIE5j5潍#Qֱ̐x8"}s{u@E74:{Gyp, O/DoplbbvwCPWg'^, j h0:MZ*[R1d-MMvIdɇŁXu>0wB4ܙ J❝]=d' Zp@Jp`B2qh)9?29=5:݅ rB y'bS@HsD];N] z]חs=^.-|FC*hRr0K$Z=tw̛nKjǗ;IVX6*L:VHdW.7 }2'SH^T^P8ک=<Đ>IO?\ UgC.h|^& %Uw, 颻{;x;^>>moI^V0C(ǡZzODfG:;Z{pr~$A̘ml]:UMZlNttN_^!)nG"eχ>YZnW?]C և52S{fZ.U@냃We^A9ز[Z[-h$PR=" vh-~K, uz܈t|}PN '#`,MJ.41aǀTJZK@5l23&'M*ʑՏ_֧!MP$1%}ɖv!DJѺX{/oe7Dux5֔{Ÿ3`U HVSwtv uUEnP q}&U0#+ f4vJl1SX}B3Cw'kjޤНik y X=|OqiyYyYiqqQEBweL&X^~Aa!5%y-H@ݓ- 'M.4,jD1jro ~r7"]I)$CpN1ORr t'f)dk1@weAB?J:32b-84&)fṷrKۄ]Y9n+6;K5-鲎 TPd, cGnv @ Q4Te)K T=g4{`\ lj34]Ds 'b`R+.$mZ4I}EzcHښ r>D3S+aNH3f1,3UPM̧FYM~2|V…]9RETҌYߊ؏Н,2 kn~ v8ӭnoZĈ'kf1j_wM4?س`'  4gmm"4+兔xK.fNHR XIR5_?9vHz-E5J:MokTuk!ɹ.q8ijwL ]S#fu]q?n__޳G#],D8F [X"h߿qqo a}BƉq-(mvO>}B<;999Lͷļ]ZGs(V]HsD~~97R]p IHw Z^(kiNsxK fL>DэysPD8׾f]x4ƚAї7I^k+Bk]L5}hጄHjG ]ِ5ԇfB{١xDt$YwU/VgC.Y^R kZk.3 %kƒ2qW)DaT‘`(ItC'bhLfuG3GjO[;z ܽ6oYrONb;)E;>+^Mjs>6"Z K%Z*dh1B1iԢgܟkapOM"QO5dՍ=*X]o$F]Jk;DoomloJu4PZZ'm]1*@^ Z cOUHC)M!čB`لwn AL:฽*Df85eeS"bndMtym3}H\2ϙ@zSv`w'>ZxH` 3#@]ǝP(?i#&+WTZYhI`fnѣ' vj+<ЈJs)V"]ãc#=ѦJO>qg3ɤI ȤNk#_ݓlkʋܮ,&Қ&uzdrXgfqH|*K"yWk 0Ɋ>z;3݅%ep}9yj*ˊQrOG'ZD&s=ʪꚚ"wnV&)R )GYY) CԖcfXIW^ٝ,*"[9q`-D{&\4 GV3a+s5i+ H.Q;dYn9bQ "*pt', K`"e/5gt '!J^1(Ye{!+08t4ZzҢRS@dSұQ/&bP9y =<47]# G\X!edl`oÍEkؐ\()i!]}A]@<6Q*7!MLYÁ FѨn0hjbl H!UWz f. "w8mMfL.jg)ES!i ;Yfp/bA;(1Y R)US̪EoZ :6i]DK[Q|0K >x~Y/Rn# mHqCk64TR]M.P ~Wv3*.gSmCaFA0hh!)h:3Tk:Y3 Pfi4/&6G{EoɲRirů555Yj)53f5G8u KPi R5[ gV o3F~^y4 lMTz 61T7o*M#&"ЛhP,!t wKK tЖki]CIy53]"l<@#87}Mc j6>}q_FD AR kt !ɸ9"ԛrNe8p\`$y=$A:'Mtdd,I4R12%P%"h\@- _rYbi.U+FSkpZPQ"d\DTXX_>2ESi/K4)I)-('Oz r]Y,o uȬ8O5vU5656yƺJݑxtYJ8:(W*#]2wyEe$Ok9NRO~.PwB5;|!rSEu&OyT#-H{#CDsW_UZD5a٬ 2ywKv=hk_|^XY~<;l,!TXgMqPĒ\%ցo~"nd$ CIrN*A da޽]}*|S>s闯?˝6 u;O)$,B`ߝ`}G_/zٗ;fy!;G"M \'g߾]^~.6F:*U6:l'm=y?~?/ߗht^gP XIuO]~?]ˣkP3HUh9~_ӕS1 &|w?AFPhnvjjvgoi8踴TO_84?0zwrjqmS"-wt܋ã FUni_ZZq0WOΙtS}]Mm}Kgw_KR3Y=7Rͭ] Fl 2DF5TN6 }zXY2Fn\-Ҳ+;lCHy wRbŭtչxH0|mbܑNeufN:t#'ymC$vcҤ25T]) VcZo)IcY`XHGZmt}p]][>x4x33!mvUit{m շnr,+klýޚww E!ǃֺ`HEEU}f{e<'-)jF 񖉯>zDdmjCJRqQɀ4O^t9R_W-X-=`/奄q=9ѻɢ0=.r$8Uom)hs ;59޳,t{/@P{KcCcK[w("UKS=5)x6STR=ݽCw&Azn%lҋI*B|>)h;/@.kk"0ɉS5KK7N^,pD,>^^CZ+X(y3@Ga}FTAkt< !k~a󭭝]d 1:50JIi0'-ZYM l>/ ~hicV|>|*foZˁz-nd2ܖE8&Ry[e\a#lX|XX#=+Q-:QlϨp@Zq\ǡtF߉V% Yqk_oo@?^Ӊ_* +W{~ʦ]T|k$tN5ELX-<񚉲v?~ZjҢt@k1v/b41_QRjL5FIQęϐdI࢖5IE8,3>/7Ջ@ÿ<+ {@|joDA#;^'`.ōOwXFv <a.jSᣗM8"8 ݘӘ &M;|'ÒEsGHMs8 L>raƭ8BL 0Hu|-ŵZM#PT]s,=w8̙ref{:zrƘq% Z͌c6;@s `BHy:]'fz/ȭ$(H;ƱKHqr;$i)@X[2r4.--=zԴDNչZ0T|KSgdfsl1'D2g>mnil~QqiiIIi͛7 s2U)s؍y݌:.Ѹ QkuMmmXUY(.HӔzEUNh zNa X;0+vuk(wœFWu|zga:Iqƶޡ33SWWL_ M5jC ]gdZM/h mhemLz%劚[o<:9>>:>/wV6OҒh<.V%/C!f[t||rz|T޿\)_@N2!JkZV_| ~9?8׳O/kJgc{ǰ`S_8? _}! Z7 {ݻOǧ *m۬IZ*P9dw%2{*i#s bXyɨScw,,ŠU)FY80Nahf`݉Z/ b@KŠ畾=`& twv O=x;KS e:% EȞUDm#$=5:z] bhwyɿtjs}zvHogSsccs[,H/ 5rEV'' 2v pwxb W''ġi 2: n{ÃÃ[OƇz:ڻGƦ$LrllM',FN-پ;Y_se} 5I;⳴xG "kMO ޝ|[TYTbF_ЌL?khvE^z[ bр'.TRMe7ķ8 Crk2sOյ=i6C־!n|gkKќǡ$ۻU^l?y"I:FtE/Ktl EPʭI񵭭MDezE,g4s蒸ssjPm<"4W<}Z 9ϧҏ=~pvaRpeΧގMMOOOxj-K%CX--T1}N NsQuZq[Rj2=]S?Lȇ[,x>(tW<%U~4)1/L&vH ,YS$Xf3@Vy[=v>~a c)l˯ƉUM2)  |tZV*fa Ԗq=a ̘hiF6inT-31PgR1 ig.#aBDr~*=]4o[$zh696T'Yf0{%~yj70ZXlvE%PE׍- Y ;!&>݄.FTmG*M1K1r"Jh)<`䮭grbIp"' .a';LJ6t7N5f/4l9\_1f6 tҷ, "&kVLLa}hO]aah͊B(ܰEEAWCRTFYmK2 8؊ֲy8fIlU0rl*NBπ\( 7V6jC,W<X0cw6XxMN?8&q5oNRk"koؿ<#i*~E pS_`kQ`/R,- ?toGz?-Hӻ[*_/97uEJǟc͓lu?0ik:S_bma?3şk*Ś\k[Cu n"6,^Su쟖R" XOׄ僋5=gS 8h?Ծ.#8+HyS<RN8kľ.ӡIL9Q&Wc}f 5!@Hft d@ 7DŽ}-t1`fx'\V`+jH1$S(,N+m ~GR'Pf<y4pU1 Xgu|_oʳ݁8%^'$$,NM5Q7BV#`2k\b`E::h#`>k?ZlDJOHJJIIKI%%|wc|cxDF;> ݴ+YYYוpVrDo8PeE%&ed/,,(egPEqsXc#blqK #S"]PT(+//(// ,R]"k>\}6 csparťbϮ-M"QQ+8аKJ,wwrJjF^QYU]S[WP_OWks}ue@AwCBU!ʚᱩLؚȶ5|) (-TD'e==aW%`9V|jjμc/ w$5|^+fj@X7zG/]ܻjlmy3ߺ:>:78jI.&W#2Gcl/rL2{7&*2>lJʄ kl2d})Y(n/3O /Ԯ.d@:2tnIk{{{_vC5H $`M=×nauϹHy3X_B,TfoW4v|FZ&-;z I"ν*ԝ O:,+IC[X RF';k>_q-YzX-X}Hy7X[\x;?f~S, 61) j!n \TV3^s.aWsoǒdHaW xC3˗rkMݾtFd֒`yBIk{;ʻ7/_̾~a6z=ﹲz.䎽{oz93;76)S!Vv0Bze3[>|J]ni2iG#&WVy#&e8R'WwM|-*nno2ŅׯEXgULݔڐ[1+ l"d~aqi-_G{[¬d0^FZ[sTLν{~slqxi'K+ܸqAT''pn腳ّ1pnhϐC, ==]'(([̲7]ݽ"e|+2`KvCSsk[=vD=H:nbF0L26] (H6121D!:ćR_aAE"Ejv /0W nSPL"Iaxk3E}8:_^n Nm4 Sews9P\Br&Mն˦!Tk= ƼI܆;{T.9r5E? dpNܘ_fʺHgZ&ԇJG5؎ ׾tlf? i} h V[|yk|ef ~A_TZ\:b߰Y؆ kS,BmON֔ t Et8f\ymRé9 of|2V9_[`,Fv4'0yzJ9Cl6sh ؎Fxj&n -;hIXjI鉦fibeZ\ E |y-cUV`g[S4r]lTsdpL |% r&,G{*s`>YhA8!ۈtH(=R2 iX!66i4 !:cyrJk4'35'ÿk0ڱk> 迕ƿ v̳Ev# H pS׎NvV޺JXqJV`?|pLj8ꑲԫV0ZN@:%`#Mp:2jF ӲD1Cdn!( zR2ƙeOj09p#b!iQS.1B^qk ]ÌqsI '*Z>>9,sJ>nhljxƆ0YFpFOdkw]7D;O6F[t jv)8 +9rds"b}}=]-M:nc*s٬F#cpFue!HKȹGGύ F[eSS3dBjm7]|s#w%sZˡ/!ѵt4qm>ɛL\02&; ~ցFcKG/N~9?sc`k45Q][ _KK߽}9ͱLZ6:)嵵d2Hl~fP| *-1DMWo=F*ͤ3q,K t|(JA:UVִ6"*3x])mmnmnr+|{@xJ_>{lmo GkξF}ZNK׷t9w7~;[Gq6C!yYnx|9*krҡqZ134"+tF5uyABiWSw6JG=/=mOZDzH%fqtIDSs,7z/_P'}V{&5Y͌EDifpBOS@N^mf_"ׅЉZai%-[[\27CFzZ('W^XM t:n 56"k1f,,u {=ɸhc6JJ,Uo?zj<1ulP(`F6O0oKmd̘_}R,He&h\ Q\I:)S%Ĺt*N3 n^m__߈ox2X(g>CVt6b'( \똍ȱLLT^YY]^Y^knlEZ wJ/˧fRVԖ~ǥͿ};;=Ku&bF*H=afg_L?z,G6_B4wMM={MLRJa>2߿{kUn7Js7WvcC "x9ef:!ѱΏ z rC8#I}h5p ]z`vؐ)ʬ]L%&v@K-na M+.7FF uO?k]Ɔz,_pp~M̂ʢˢg8$6ZtEoZb“szBBk>C/F[,T#Up&qOR~-T^ٶm7EOY>mqԆ= El#C0m3E26պYwz5M!͏n ԧX-;fhL}zuó `б1bf&_w@S)ml$ۖO Y1b-Ao0d\0 ]aD~_Ɣ )fB'4b`}6AhѧMj`m=\c>z6xCMD5:8JӢfvbgب$c!U0B6 ɯ1-$=Ĺ'ч160hchO,U#M๪8ҳJ%e7~CJEV GC!u@[_ò4OW ~$i 2ĵ&I! aM/du$Y!J]Bs yh) @q@NB# &48`!('_C,oF!ၡmBR:ǢQOQ,gÏO?9u*s: G-^K ө\[7$T:_dPDTy v 5׎7J;b18&%Ѵ{T(ӛ~Dq8gDn&I]TkXTCk'Nv07Od@;YSef|*̼4IqN-wՋ(:u =]m3ҵɟ`(7|&&>Ccz6'skkպ_8-u}C_{>3377;g#|u=]ϙ@Q޽[Xxܫ?TVhAŘq c⻷sӇI`uv٬gHGgH9Ņ֝OUтppKG/"Llc}e5qn5 m]LT2ǖ~ _Ӆ)nRdl.NgSq~W*\1fK^H$R! )NIV#i'I\!g6:MȯCkBdV73w$sBqS|:1 ٸ>ä坭bP$cاt-֓|Q)s} "m"OJkqy͸ɧӘ9]&qvw%b4lyGk3 q%e[QUwO=q`&M]^݈ӹB駒k\t F..])?z~yU5NgZ!5P;@cJM|Oaױޮ4u2XFJ0˷?]XZ$TO 'V` {6=aɛWDL6܆dlK$@HB h)  K7 {?o$=<{d2c>>:e陣K]9"yH.ox{_|23܃pڪdݳ__~f;EhUrlQoo%dz]3 `_ۋϞ|%湵=0 tj?{,= F7}BO~R5ɓ'_};NOb*wG_;sc^aiC9-p-Gan/Y{# /.9#ĻU׮GZZ8KAd̰{{Ξ>}BYRcѠtĵN䴖*{⺘*SakVY(P\-Rқ['67She[➜uqxZV ĺD|6FZuشS8Դ*Wb[1ZqyچR קҏո1YP5'ʝP}$Fo2BZN >/ϑ.÷G(d00L;al'x/"rq(D< [MJDG)?h'-r jň+J=ZX^PDN< @]%Ml[tduG J,#_9PXo$DIRDt1a8IJEuJ6Ad<#UE!e|wtN#I6?&,y k =\l i҅ 0oD[k#YZ^2%-ˀ7L%?GSr5?ˉda6|Y{Ý<w1c=9љ`o>ː2}̻m 9XIwd]:WsA&0 x~S<ү^~, Q&L}I\YcEE'+U9+#'Ӌ%x4bkG1ϡct6(]dY<%)$h' [hR%.`kJr6CNX\4m kId-#fѸܥe`#GDX{G^|GC.] ׯsݝYZ 4C.cu#N\N{[_rq&FEi.:}l(=Hs̞lmxǟ}ݳzO\e!TΉ;QHo8u͏>o~xӧ=BZKw1Fc8ln]}'5m|&XL!|>z_~٧y*q5Duwx!G?|pQi0gIXfnx;o^$Ԩ%TyOW[0\͛7s.H({|[PP+\rҹ3\!DX!GGfI]*o_bZnsE'Y44z ⮕|0X"-9pH{XQʴTdkzܥrk0q½9]|$J_!L(0(o:䌓 Hw8N%l]wN<,m dQh7tC V 4 ff~9pBJGg.I!ک Kd5\ v8[{dYm_ӹn`<`Jh9fE:"a:C}`"Q͢CeU`z݋̍v2]6+]97ʓ|8}8GQs:IOr+І^`"'ǭy&ݢ7:U;{;Uβf nt3j{-U6>`>Xx>&moRF@ݸ}NV8H`0xcΧkQ~} |Bpѵr ,' >i1s]ph!W4Cw1L Sllm#Y: 89 =ha5L$'#d&[GQ'xm|Ak^1ŖeDXmmUgjODN6XmTJ->g[XiWcv-F#oFq]R΀\kr58fhKר Un5FЋfרٶн7y[>˽.6}{p)=v5NVu_>&0ygzhJΧ1Ƒ;d]b#%z`x8ExFQaKGDE{BTbx#H`qj/~6I6Cy#m4xŏ= “J|R e|Cc48Y <I.ANtΧ ҄OYHe`bt/f,*X#_krt\*E,pJ떊+LPa^j7x?eD}׹Mirz 78_Z6WNzG=EL&;RE8z KR]lCƔF㘿1Nښi@:imb(K'!G%N bw\R5QwlD/yfjT-aw!]E 4%"Ӊ?Nˮ[; ,k zTG}<!BO9[k;߽55GS޽sS#dL%Y&AwR;Npwݟ;+AIxR|b^B O&[;yT?wֻ =GѭL5'w/^}֝;~[ܸiTR6x_kƘ]]9w7?nn\|NL"rã^Y>skwƍ׮\PI"܉sg_[Y]:qjwׯ{彳Um;/T;g/]rϞ>i*nҍ)\1/Fߝ]8wmf'^K1]r/E( cv&=m*ƌCt@Ι3O>q|Mf0| D qMeBeYiIїa:ڊ_PZK* e_XSgc0˩F2`2I@8\sdΦv-ׂj )6Tszyc\tb&%0fk5m9Ņ7%luol Ô4ep,@4{-ẉ~:x#qkhj4鏦v!-"BHYƆDOVمc[G$|MY))beZH .c0@\bK 6-z _\+WWq)U46FL0p(PckM\+dPQ؆0dѻM~,κ¤}c[eDsst54ڜ9Go &LH59`=k1yA6uMW{ahDeBxq6[mQY> l# !5s TBhk_K mi+%S֚Q} X" $W$Ƭ2v[^`8= 05Nz73l&q2P8;s55ybbFutMC884ˌ A@3 tkVqex^&^i>C@& `LV@;iC2Aѝ~1]H/9UQ}Atx>ySYL2@9آ&$5,kpVG0#cExfUŸy GLQAE6'kSDZ{Ry0X %R%'hBYVl;f̈́G=$Pu?8mQ/Qw 5 9i:o)_bPrKK*TN >DK؂`Fs Lni'.dXZN?:U=IKud65( 2>Q`A,8^DِC/ CZj:w X* G;NDo |vKq"&Eo-.-; _&$)( {ZvqQpՕae$|ѹ=J1=Lvr'Ie40߽{E%mό9sj~bscx >c3`tOm_I'FSUy>4udΟ={mYjLtvͽ8U>s B©ٖj)z"7t~eK/^; )w˶םic {/_|ݝ 4.Tj"W._r޹RZg]0墐H_>{T9H_0,c{v@Si)_[=/?a>4Lp&i֩i]t9pgvj}p-(pGvO4B$Z'pM d!`'wvϝ=ݩ2I0Fa]IT'&G[:yٳS eZ -c|Z9=vO2:'=M͓&qn#=^ k 1#d%5amًS9ydq4\ۊ,`CV{*v{.!MžT S,FW5"%&tkBn-[株CT/C鮫Zm+˳r➺RHi5@edfD ̗ytQ`GDti`uzh-=s'1SIV:3G%C 3ȱ`[]:[&CJvI ڭXn-R j:% TVͮP{5FX5Ҕ œj)^x[Ѳ'ݠ&;wp25z>UTyt[KTF1 +w%Inf5MFh((qH^0&/uIG0[lQ̱E vhQ߆6 *Кk6 wkM6Lٖ_kبdnjSt4PS+ -yws/ JtAчUy>$篴.N5:}H`qˆ4~85= P4cl2a:#+JRB4Xs<sMs$8Y={kS*"$Gq=0ӏ1!s^*rĒ^#=9`5+g3CV s ͖Jjj(^xE'7 OƐ R_d,#`1cG@RVT&}mQUFx_LGk2Q9SϯtZ[V.DuI3yn$δN4th'q%*Ճs)mW%Me0i2̹/?rxaECnPqa_v&{䁸VY,2ku*EҸBjkH)|lWN%NNI Kkx >|h}1ZJ|rAP0_q*irzDL0,+Np@|:õjvaeY,@7U4^*7 #q:gDimPZ6摽C㓴DMVeB SI_A0hbI 5|n;& I  0izb蓿[3#F,G @jU,Meo Ϫ k3ԠJU0LUV#<"5;fR? ҭ|:dFOnb?#B/ӡxL­%8ɺ g`gkgۈ83eU%V˔ʒ$gZ[^ܯ2/;ikْuTJF-`>|oviVᤌw6  rٮYi2K:7Zp{Zg:נՍ*vmk5,x`:j|pOm-u:&c fk F//ϴb\o5",ucmho@֔ +N9$'Y(({V78PhUC2}I`ņ $WK Me2RE4zP+HU @8LuM}a3ʙo?j$3ZU4h*VkÄe`C8С|D}/OS}~NW[a <* zbEIs(FŘYke0,k=ej; _iZ"D6HO#OdQ0;sPSi Ce(JX woލs"nYvdzLVP-47iřל H9VS[$B!U:ЂZҊe^7BZL|\zOmQYQU WE _A bT2LJ$D zRq=w'-V..Aj,n@Df8&VrX72(HYpOS-dZK8U^5!}(␌bTS1pZŨUXIi'-r)xy_6!yLO>1fTmVVZ"ޔ8PkюG8)%. qLX 'e%>\"-1a lyinFs?N4Yy.kJ"ҳ8M[>&m!m!{QdPۤ3nЕo`A:إxqJ P* 1kr@;`d8.Jo*\1n&ؙNc-cvHfTRoZOtN\bu-|niEf5֚Jƭ%p4Ɔa" cV <'3ߓzL#oF@bd1k 4ٛZM{ (aa%Ehl5ZS iJs5gר2_ L±q=Wf*[gyɂIGRlDLBV{iC4^ hdZ. YPyqq/` _pq,bZX)8#~鉥&12_cE8J^ѕ/:DCS(҆9Z 2ictLC#hoW 6}BZb>cׯdY1. ,JNN݇\v1:I9ApM ^Fcʞ dҎ]K2jKw}DbvHfQr|l58INH:~ʩVA7&O"|c2fI-OrZ1;H;Z\QT8}p@ZKvkZuj!eu|g~>ZwfzpDsnK!-F ;Ɗs&QYT1 "]yDH6#0Rn-(XtG_ jLP"UN)z߽m1HH/F%U8+5i!5KO&-1ݕ{ 4JW2UBhV3NS}^u 'x^7  T:7d_ʜ]P*#W>[KGg[[=U'6X8!]~Vs]ӯi[A2ǔ~+5S*m/+ b!.*2mt@P+- T(c S2Uj2C&O˯ J`b#0Yd5Dudp`&{’O qCF3Z pЕ;mk13'u(£۴ ^H@/jj@0 >H=SRRN}Q8CԲV ' IԨh@y/Ezd[ Ybe|}1 OQSM"^0#9GwF/ì䩋C=F#xiflH)HHI(9X2Z/mO`Ltg#cfJ^ x`("Ue,V3g1rrp MB,FS`قڴ+!3>8&%Th- 9[AwV⠶79@ =\7[5w haĵ~*uN *ALSF=FE libvips-8.15.1/test/test-suite/images/avif-orientation-6.avif000066400000000000000000004743331454007373500241260ustar00rootroot00000000000000ftypavifavifmif17meta!hdlrpictpitm4ilocD@WlpA8iinfinfeav01infeExifviprpXipco0colrrICC$applmntrRGB XYZ   acspAPPLAPPL-appl%M8 descecprtd#wtptrXYZgXYZbXYZrTRC chad,bTRC gTRC desc Display P3textCopyright Apple Inc., 2017XYZ QXYZ =XYZ J7 XYZ (8 ȹparaff Y [sf32 B&n av1C ispe ipmairefcdscumdat .? @@Ѐ2 D, !@2 sS=p ¢]23D*UL2<_MaI+%!bG[gG=Hl!N=z׏%,YU- g6z75x]5FŹGKNEVC\S7f}c #M>}cB1KsWyMJRE e| /-`7$͌\]Sl( :d4@4^/ "(9Y),)_Ўӌ cRuC`UJŊlS{L,m=V@3y9`!PYo҂757]i$5"<Ϟo',Zz¯Q95I JuW ,A@uW#O} *C4(#ePE-pCbc!"  p'8;tm2" h6XS.D_/^!a[fs )ۼ0j:vȴ6Uzf inQZ?qoP~7DAH }2dPQ TwWnCDq ܰ9WOA;dzB&;P؉ց\ WbOw7~(SDeUE%ivU}I-O?I_ӣ (;뼙9Z|+R5j>bBnk./T4jG?Jc2hQISk}^xzf׆yJ3]'uŦLeR t~}^Z@{T:reezLncp T'|'4면,HNz]|2ث",]'} 퀎%e׍9v`?h%jOyWz wK1j7lS|QC} B]сZ^K[H{[!i+e]vX4D9 \Bx=e@ސ_H<-z |Θ!Ua[Iw[v%椏J$lKi8#~UHB@ؓmky#\nn<璣Yhi B?SLH۟/h5NpXLBm;,_$]J!&r [q e}[qhoA!xc1R,57}dZSZROS6ʫ5TS^/u,\^ʏt{me,!+Qj69c-|/aW 5{ WG 9\=G ?zU*] .3rs@ZĶrWZ0˛|V!".ڐN )mu h>Ax .A90|D 1cڥLH{2fu4-ܹ7n.#¸ !Y@7Afc} W\4yy)za MBW_?qgOoO%w^-nc)#Qf҄ b;_Ӧ3a8R*073H[xQ<(CPX%.,pe1._IE[h|0{੸A#i 2(e0$I&"^ã/< 4h?ZR)Ν&uuVVX{f5 +GKK;+f`u>gLfg4.1 ØSYp𝹪 bdݟEDK;>dV4}'IT$mleԏ9m#!.}^f2$Z?WML=;Y9^6֯Ώ xgNW|F%-wpR)a,JN?є0q~%Q0>4'kU9OTԽ46 W9KȂqx˿#Nqw!>)[k\ԢSz"jzH8k羚;: CQfېmr:N9/4|Weh5ppF`~1vElqȓp-eCf~UzUiG ١i;7^8Hր^ ̞pԜ(#HϲfZ6|?ĸ/N}dv9[,'cs纅jqt1J7m=ԇN*/}si]q)߾cZgx XqOKNčKlN=j10C:rLf?ZfċS[3-zǰQB8hrqx:ޔ,BUUp#]WصX? l߿MT>a/$h@Y8yя-MϽpٚ϶ ^ukwJ {A18O\ &Ob?-&(ƒ M^9]*P{KWqcE ñ};XĀUlBٝ|"ǐ{G`c 56Ҥ1! 2,ew\xb&SBQRXh ҿ j=]mPBEbD8A՘(V5lx qSw7XIofy?:3$ "'rzd4n^wf{"qo&?"L"uXS X D"/]}U%{4fZ0v*U/FF}Ja(7D-M>j8goB>frUs[7[璼lZ1N !+m2+LXJ1Srv0=-Yp֋⨁9]m;礝 :'hL:DuBvl$PIYޢ)! zf] E|)wIJ& K- W'`Kfi b3{}^d;@2WQSTLEQpS5gV?K>'ի~eRM-Ȕ z,%PF3)ܯY r/-u_J> =m]"ߪ< vKuǼKx$`o, i+܍pՍco\v?뭹f4O%^A" K%W @Y0QN]g 9DިT)+~Pt*CROOq} lb׾N<4aqܱjNHxzG]58čo^.̄6>p;-̽ Gdߙ+ Uz <;Ԣt\Ү%DSOG4~:S#gg< Whh__#(uo8tc~zG@Tzٟ@'^tPe;| :"Z8/!'HӒƧ+ F :DF]~k}[QÂlAh18v҉ݪ3wȧς#:' ʗ.:⊏yn/(؀\+Oz%-3jaRH8 ߒo:8Q?r]\'¯@Ə*B٭[_dlazo(9[P)8yLgzrF'dTWPLp!2[-`PL9:L=//'cJxh%Y͐VvZۑGɮk2 ۝Rvu]>6Rx K`5REi#Ȇk]~S TP@jXxa(nGqÛ5vM-‚+Tͅs~W46?e)R)Y"MT/Fpx |5IӗP]U|(#^d@)#n|[s|rڀJ#bɕriwq2#BV46 (1_ w1 W '1U"MKh;t%zne@f`6߮ﱊD!QlG-xʜRr$**15 ҇c>SZCaf`<7m":ѣ';嗨KT4l\@y!?WyOEߋ;SH%'+us 0ڰӃJՇ ^Pcpb&*bH?Hz}7N r¬yxT$:u SEn ÁcAkcM2-UL+l 7IFF qȨc5|M]?H4&7>, r cW غLᓦlBUc T"cvn)NT Q)AtT%b-lxv2~Orh Ih,˞ҮހsB)a"$2{F妹ILAÃ;\VӚ>ޒEӐDφN$BUU?晓ɭtRT37Ņ/Kl6ڈRA'^EG][; <2'3/bPʹ[/=_KҌ:&itlzVdgo`9!E19׹{,p){?zTgK! o'.h+j@f(5n,ul~8 ՂoPaf4S }Vj[364JQP&K|Tߦ8 >sF.w0KSndK&s/)Vo=\5g]VV,9 O)~7Xۀ-q3zyF`J+CB R\22qkqA@~F6vA=tq4ؔB١1 % RkI4.&ms n%&,MXB;RKTF2 uMpH|@oC{W&.=F1B Ǥ}5g'$ٴ͉ %KZڨ$Ћ}b4L p*z{eI[ !?Es#\Lt3R4Xt@b9 LF 4a(~eݵ0o5#rM`Yp8P-`6tD ջm uay4c)DLgʡog%#V70-ڭݣwPLKPX`0o) ׎H%r^/O4 'FNρ_vsvJxPEM\NBwְh2r;s+\ЬD~de0 bfAѕL0ոX.iI`+: ch3QrO.SN0=1PR{!M='Hbs/CvYаa##3`* u^YrC389I^k*3b%"~1 ff; Qw_]e5IзVF\+ עEl8mIx;b39aYvl*c ummlqjmP;3D/m͘/V0m-R'(^7!ePf0UC-RS΢}XZb޿fD8ם B 0[o mlRҸpsS]&^QM\wÃ4uB0hQ)p[_)9{%*ɩ4X,{?M&Dg/ $ʨ7ٕBgX:h5ݭVqT#ӆ (LkSJñ%dNrfem{`~_| ;'nw1X *ɒ+/?ۈe>r=p`f-1 N!@\!ԲI[]5rܾ t۴RW]wE2ZIs'[oO`b| Ga)&a$'=%K 套(K)u =;HhY4-1mqQH$FŪ&pMW{OQE|i`pJ÷}'.ϸ#2+L\Dm?Jlf衖?Xa(pܛٷR #)z0/GuO_7Fc {Zs#W ]h3<&[3?_\y1~5/DPqe)_Mm[I <1F$lC3 mTCl\rJճ*!S-Η6E6v6nn]@w!+@lmEq pK=})ޔ'q$e3,nyZ-zJY2+%"OEb r sg}X?>7y^LV3bROYU86Q6]28@ȥIPA Bh,CK`7S-!|e p-i瀻L"PȹWFG%tB*q,'8=/L_-vNu#dRwg6i~"}&J7nι (r:]+}S l[ړkp8P'- %=B,DE1NL^@9s"LEh~Q &ݨHfܹz% gނ6pFի/h !00O_ib.kP^n(Ŀ26v6;qz~vⱓTXA" (-bDq/ݚo$Z;/b3Bv3VE#`Rk  S:S;/d:nIfbTM˃$#\d@E)v\-.R&n 9"Xo7(||(Jh&|Vfc+^1Ě\*R4$C* % {\P8FDٜ)ib!?~9N5%۞ߪ$*<.XjP7r; @p1y!{9||wFMd)C\A/uYR!_~9ߑܨv1`E䶣xC6T2FG/[:k:R(J3 *TłqeY)<!*G"Wf-_¥F% .Rշ_? nm#zA^FEd/:YŸnO02Bu+bi)&*V _(]nRGߔfbvT-=NҲ\Lwผ^PWbr6B">L;Zu¯}@um_!@KW|<0b`/0C sT=AN*߼c˩JPn/azWddYQrxÔsϟ# *{ |M{x⿗WZG`r$OaЩ {<=ι 2XV2#d`[\TQP 7?I|uBZcG!,IzҁhJTʪPd"8.?6ȪQkCD*u?F_EOdo/xZ-|nP*]~;r`㜅5WD{`ُVK" zqj os~zOa )h5Ѷ{v00ܝNR)=%Ut =R;L۩tә0,=eȭ7cr'2+,$(bQX[Pyh 5py,s$ud%\7ͽ౲Qt [[_~BeI+}mN F<`yȨ K joQ:+T˭jz˗ `]ecΤ.侬9_϶V;k)C4dn*V,zݹ% -rHΕ;Y@WI!C~V ѓe+I퓭^YhRoOʏI8q{vO޳] w;UXp2R«fsT&xVͣf7XR!Kc>*Z!Ut#! q-?Ŧi?)*Czkj+ z 'E@+뷙!7uA16w)(cs[匤e-}흤ILyPJa W˵=z!#n<{=ڋA*ZӠ36;\d""^WqP%o״hOqaucf0Jaw /4_Mvf;~ZlFyRTnME?I= A~/˼^rQQ/3b~R|wJ;~:;"I4ՙԢ- |uQ8eEC*نQ>'F:=›G~j10b&X7=oMᥔZދ/rW{3)mN2j1# GJԟw?|_0rzOx󥞡a1 Tlgi!񍸿*d)EIG`N tj\̍di.Y-Y6E!`\,m!! ]'!.O`s`muh]-Ƀdhha*Hվו x0hzt8GLF7XeHu^[ 1}Ǐɴ4s3Z݌K^fK=İ~˿z2DSg/]P_V¿@ O/4\ 9*=ao1T|uV{*KZjxld#mn5oOLj y8]+.*/dKDm^B5vHjA2  @hҏ =&z:gNsjM #N2>]?ɿЁo4SST^z f`冕ꙭ]CQ=m=ԌZT\ b@[rst0ގ5쎟;(xt3E>i]^zzfpl;k֜ Ch)ɼꗕ |2,v9{43ϾqIH W> 50@@Ed^ʍ|sy>(>E |MD+s]fTʰYYUMzȾ6GFv\z?-uOI]a6: Mz˲!0zHRO19['*Uu %:5+0/IS?LMTO뵝wWA/@4\G:]B NZ &ڟ<x$k0!oVv[e#e<", Cpz>uRmo3:Z%lx&s^E8k -Y3jTLV=aFr>DOLvv%\&C`maΑrwLtE!H Pq''"n:~;2\smtŌXm:{%3@jo4;wH0;ԲCxge71HYqsaɳ',i-ף5H.3 z,m̙QPʀߡ{ >\yIuRr~w\K& $ĤBI`c_fY>LoƶbX:OB cd)n%`|`?bM9Sn Y/Ij*Clf.ҩ{_ԽKvЭ".y?ΖZ;U=jMLZ[L>_hosv6]&Mu_*hH֙Hxv#}(t`!fHYœ_ЩTKw #{S5[5ISDߺA)y4ץ!XhB]x .%L;!#ʊ.t2-r;G F6c~{AiدKh:M-JTR@/ )'a&;nVzL *SR-ž^sq+f8h~EU4)v]qW&*QTkkI,-4g "r%btmopCm DGE2]lM7&;4[.iOʣ7$dc 72l/Dw&*#3gz[pWK76?~((Qэa]&p8"p”2'dKJZeDSgqU'~ 4p\lJ[ #ڇ{/Ȟ! 7e7E >M&{4qUM5|_&؊2SQ"7`~VO&Qꔸ*vv*,SGR 0Iz|m0..D^MVFP_)6p++7~?lyNq8Q! ?N'ڨ9GMjK\عH [mW{mд|'$1Owy]5XlQ/Cb\ Jh7SA.Rhb , FRa2"cA#Zꥯ vBW-͈ʹ<6XT>8$ 2 RX^!uRA) B> 2ISjf,h!< Io{ずz!]ȓʝu\Ќ*\,QkaS1LMDRI$b6SȀ髬B 49ꭃy]ٷB_+:Qwo5U٩aXOO @&$u(1Ȳ"Fv!,x4?5u8a$3j9\E2Y:)M{ġ#~ 7H*ku,ep9ZWCgtxs}pDT'wD&zz^ I_֚uɶtM[Yؖ::[nQr06dG)t vW#{ xx/rM .ѹN`olE6/ fe; l ĸp1 GEIb3sN5HF4jtx=V\zQBMAS<q9}.s:anmLkk%cɢM1l6ڦ=k"&s/<~AIVMx1ňݍ : z/)Cδ>O'_-W\M*^>-`d}pσ(Oa9os t'rkqT7_%H%'R5LX;OC~ϔ N@$+c,hHź/ŤS텃jV}jU1X𷝉X>A |I.7qz./Ii&F'm=?SF,_Uҕ(&G 4E^Ԕ>^\ </]Ǘ-AsE`v~]LuŤG2&餇b?qj*m,9eIUR 1?^ 23#fya6mpxMРI)3_d:)hew I%Ll.@*h,TW|)XJEk@qwl:e~ňKHP1sQH7LeLw\hVm'xAU?ִv%d1*`&$_cLjGf޴hN@_,KOaЛ+~7E.##₾ӐԒ<덮TMxs/*co~,*-Tˆh=m 5M(N㣴#|GǭDf:¶us"iF7<ϋr2Av`Vġ3f$4}Fv@qs71!Fa}?sx /CF.Z+Y8h\lMP(>#gwjAx(,Ig;|^():‹yQ2qG *i0s\ňL5@GuP)_O/q'éAsl\xUO.bsH@]_c6JRKw`_LKv'|KPrT\\6qteAMN`ETna'W !7vxñ}'0. {}>  d Ң^߁7hjٿ'uyQxyZhäwrWTplzBIPM ȣ*XpZtJ"E3k. B4X<> 9ww})T-Q嫜G1pt 둀ϓnpR]<~䗪:=&=SJ/T䆬Hw_#H+R/jE}8Jg4뉾 -ٵdRdz бLLOiWGDxۈ̰:f3^#?!bv/`oi/VK>3Qr^-KzLɉpx(Dl,"{+<cD̔1Xg?o[Ms_#W fA @&Pw8OAF"qA*uEWJ#I ru ` b \%_d5d0S֪ [u1:Ζ:߬.>e L/eD%W&VHsbLWUӏdPq|us9!S|b>D!ޗuУA~mVIsrvF̆]c8|h2Do `ž^J(ɿIL_@ vBBf~ }kֵ~)]anVv4l< cL,=x0S}Ua^~8ZWU]edjMSEnHnHŕPpՠ[Od#XjR̺H/6J %IҾ3m3B =M̄QzyV&N7(R܃}N#H)=xCE\VZ4ւwBo"eJ3ukq4rGH`φĈY]4!',E?} i6 J qKldYUeI:m#[& nhaMp]RoSe/Miui-fA֥XߤֳNzM,ZW$({S4Jy {7\M`Fw݊!E*:KdOIDǎ)S#&ZH`vxE =Բy %O ͧlfF`eJ(YdRC 0Ru_JwN>?"Q]ʷ 6OyDy(λ4k­/Va^ɸhhgr4%{1j@KZ~9kqU-jkPs ]s||%v1umB!uj>0+_DQ}B-#Wc#QZ?p's,`+AB*z` 9ۯl'<ņЇ;~#gG8 A4"\Hn 8\V@~1S 3=;f:Yz+hW)ho6J[.؃*l;qji6jǝKɸ=g>PIϯwN !!YˡǖkF5{q4a}sj~*T"L|>(S9"x׎ZpXpBD%eHvϼE XAzHcBe_StcR; ic }D![WsݲVkL :Un;з-2 _* >7sP:.y*MgolYL&)Za Ͱy7]n3StX>'K&Mk)9}ر X1; i&qkqYVBb/he^~mQe0e[(@0Ôrw]+99tX@fX.K^YjJT`XWAt,ZT[߳?B\fmw=nZҿٽ * %߶dgw\"ywoSL6D;c@aS}. uFe߈z6AL&iGr&^jڣgܥYc(L.%~W?H\N5 2#QwF7g tGe*zHz̪yNw[ Ypգ+e3,H%ĤWVDn,nO氺]|̌;ܖ9>Oٔ2N< m9;O.OoK _U_Ж_b;޶X8fHBv HxD9مm{JhR:yaKd'r/h<a8O/yr>#PD,bjHX/RXdT X$`= #w #jEhH>*N* `ԒuD}N{+1E]K{Խm(4s`^p'M; )r%[UsDkVl =[R+9Q7U_TF'wY.RFԙ^]O bю<|>so?S#\2JʎbuUEe6i褚c:n;'HBs|*@=iCU<2"9jugW^9 LV6[ǴњAD Knnl/O({\r]G$ů1I u]|ZmK%ltQshjl>hg?(>> ʇ~Db@<0B@ lطVyaO|?z(^9^ bW qAytp ̹rڽgW`u`$lCLzcд8{"3E_̊!ܮ˲XR]plPodpy~2,j#$V;.)Xxۂص 4N˚ɣXVо#&夳IxOM`!E?NŎ/ NfPYnw!V=Ґ %}bP>blaۓJ24ҫpi3QS taY3l6̐.3NqHJ_zn˃]L %=ӄ9QЄt20Ʉ kV$+g0 5O ;\]7~g]~(tO ŮtqY=-MM< ,? fjd =7?nIthoGpKJ.t@&sWﰡT!xX.>*'7ruy._އ)/jʎH+_rMfSloirR+JmZh!\+YX6'R`&̇X*d2\*SX)A 8aa/R&Q0fiX e̶*П²lٺ`|  VZ498~oQ#Go)A$uYVB-v6zvdbEM0wg /a?u`[ֈv/ӦAQ~1}UЩ*jx/}{.M㞦'Z^CQ)ۛHlhٕٝ AY}bMh!GSBxV;$vnIw8ۃY1{<sv?U0z7/v*ak5oTJ~AK=]I5E5>pr3)QPsL 舻$M9ajSt<%\zƖ?xN*)xӫ$}jݕ}F:Zh 'G?+PH );_PVha6.G^7Ϧm~^Pᇰ<)tV̓-̼wEA9I͸`_+7ư0ODJN7=r^j o"{6H4lBfY4>ZIpq@%AE&3KOÉ*Fg7OI9]3 n\V[r=hSIP\+]&2lg0PCAGi:u]y}{\/ (Rо Ζ}R_cYM! wq>`&/g b;cR{S' fBT'j%A9^~.V3nצAMR~ #a;۳.zMռN( -0eN6k_ JJszBŁ4 "*0#9LY-E8z`kP]py Rj9߅_8N8 s(:6nD58| Z x.O9A"tkh ̺&icGD_1JDǂoѿN )^rqrJ5gvcpq$aUBҳ(X&XH rzZ׾/=/ge!rK(>\ Ov% ڐqԽokaA#72yAW'da {7K\bThB~ϕ陧E&UEWHUj4}v6aU#Aq?B ët3Kҧ|1n+ >&vJvrʥg@z=2p".|D쭕yK1+nrNnMU`ҠJKvȱ<4jA+\22;:.SU}֔cxb m 9<xp^ëc+eA#,|-d˝.|9iI>nrʀ {5G3!+hjӨ%ƑԖǐUʧZ_ӿE͐腯PzdU<\H<۾*ۛʚצf͈fMr.2 7y{[G"^!߰`m$k} $ERq}vE`,Ԝ7R6z-Wx;:\G4_7|YS>dm錌g!vd 1kBV8ÞJ!XWpV-~ W(85 Z/l+>Em~Iڽ:§giu\O%6hØ"֊vE)1kv͡~'jES2(;օ IЂ<ʙӠz!PqK 5nUnuT?n0HED b/[gjwKJaNSP5VI#Wu!տNÖ>3c8GX&15L-Ry ~-(KDPǻu`8M6P}Ζ1QџYwGMk\~D(SMAIv%(9|%z,>{ U NqMy(BBo>^TlEUvF_+$'O]Z7(V~ԻU,B2x#9_I) ꃳ +lë;mvx"Y_.Alxc`r|<<~@E=H6r OV5IW>ߒsA֢԰'_hk6C](977ɬI]",㽚.v[%?Z˅iUG+iW8D?Ih7_ kPFR(h׬aGyT3B^ewAs,p˙fewTA:*wG82O35 4~W$8EV9IRV笍\)+3qȩN[eLЉ1,$+}4Yj<>-Ώ\xTAܷ"nlaFO\ |Om$T߲۪o^# =+]jDi@hQqLpPA6]4-oz:,n+"P, Eѓknge#T %* ٤*ߛ~xtBI(\ xsVxW'I ٗؠً7ЈΖ:!5e6^I.cm--RZ#iH86%*f8 Қu^ZDV%NQH kn޻?IZ4U("nYĢdzWMVut;:&OEK<^cIH8H 0JȚS\kKԦVdlF+cq}4 I\k\vG=ΙR&SP%.P=e1p~cDOX]C@fGvKgS*"4ψ ! pXDM е8o*g*S=1a;9ۜ5Rԙ{.4 kƲ7}1 WɆqAăuĉ+9Zayݣqu/nųB#WȋFDZѵ*z)KUZm.wfEYx ;Prϙwl89DN)w%_mzz[9vgo4۝ð-%d^>A47{ō9A QCM=L"y Bx WF+!/sxvC]>nz0w.Af!nv {N{2d Sa FJc _7l.%~\Ayn94^fNdGw%h:wlOsZ&-WС1a-ntqDTimǼOK[o ?ZtÐ}+sJ&soJſm$UI$w^(@9n$Bͷob;lN"I4#tft]myUugmm.a=m? 7zl:}J8JWQ=yIo  l}"ȍZDckՊ>i)m}!/z'}z(#a|;E(<(2 '!Κ1cI@0g* h {\<ko+#9ףjj9Mc=mvgbD,JMm?}/rTT#]ĺn3 .tvvU~|#6T pI[/R%IEVm RfGN9$Y HF-uF&N ʆ zCpF8]!4Duobm}#Q}7WT5VQ[<$CcԼX^/$VYc_Ǝ3uND kߊvKJ 4h#0ERdn?@ߥ,wYBa5'4V@gAUp. R N=ߙu Si&ig nab/ Oy#'9D0$-䗶Ӂ^Ȗ $*zPX:vs4V ]˭iQ 6Wʼn WJWG-Ṗ Cd͸,å":R?.'hהz1j\GS_$3]2-Wm# :C`UHr;gjL&M'5l*K;"0l"6IJ`YiW G /SUDzǒ͠g1䰇J-gƻUD!>W^f ?"7\h/Z nAnq5}ؙ̛=$IrYUxA36(-<9W_[v-`C^wVt "HmQɗg˲Dj,)}_Yg@P' #:=1ᑛh=)=j%];;1tL]%9DU;`T ]qrMѤiQC52;GmF_ͺȅ2q}abG ٔ٬Xqݖc1Z0{sV4 x|K{"ӏ0.VP=nFIݩ9&;=ښvÌX=t=I3kK2ef6 FJe(Ϳٿgnۖ1iBTkT GdAg˲}K>}cf9-Oͧ'#tfH灟Ǻ뿸aEmsG$_Iix~WoYͭ9JU<Q J>(|ZRkƝ!7̹t.\³gN^J,| D?#6 HEsbrdm-q$F.@<$z/xUrbL5x/m.J›;[_9ڇDNb5e&H͉{1-^LwVU(,g. R% ?wub@K6i@1<у#8e%%0i5+ҧD[) .չJ,nL)p2RfMB[{ HL*iB@1Śt6mV:.޻ɡ T24?PݟչKZaCtlt8jDŽxgfO]Ŧc<ߵMꥡBp}^lC@HT[xֶW43Pp;179F7U8%L HR  +Mwza o}Ǖ%#|'8oAmgp(N $Y;'Y8VH8Ak:)uL{|.U5%EsT"1YX/$x7~?$R*n ,dOz4'˫msזe xXMG_WCj;\ .~ݞ2nq#CY3<ŸP| D)~Qۥe`ffD5&Ape0?N"o߷BHxMd#-֮&~@ܒ*r|GxəbVzkD} N,>CW< mu@TLogϯ퓋hH,LwMH,4m kṙEl*Vc,י>2[!5e r%(VZύ.d-3Q=g*ҿmXlfE`^^cO J܋n{G Ae9%[lMp/#( qLlN}q.HHb=4dp,F;CWF|@>Cp8D(}",~nuybŦ 7c.h? ;sӽj~Ume'W! X1p_͏7WvJiV76_]i= oEnZ%򞥰ݚ Dx֞(=]趸Vi,8y# "4cyRJ\ ^L(Pp[?xlƨs`0g&?ƲyvrJڜ Cu tyk\ϴC}| ٠%@N>3DS(V4)qŞG{ϒ"x zyZXǮ)&Umb 1΍.6'<YѽboN-mQRg}z%J:5ShV8iFNr,^V⫈P{O.Rwz+*^E؅Jv; GjL=\(%]TL a^WM<~RG?χ'~dV"~g ì=dN7آ:0 /b Hy0X o,"Wɟ-l]QDGZY/N Vp쏂uJP~@Vc1b9M烓̪3 mRbqsCUvB*;mqQ`>]U%x RwgM :j%Ц [>~S/s.n9 CY{➔P ? }DڽL#o}<62$Z\r'g:H URѓ&Ziz S; 2 m.|(G݅eRBQl"ԙsG R” -HNjQo܎ӏI-86ҎFfNd@] OƽцXC3(1%&}`AJ9^MvߤO!sSٮ%& +D]$odTw$͐v7YzCG7d]U3Zٙf9A]'lI wܵM_bmLKjq -4 KM\YȮL\ Et#*(O[_?5%s.u8dvMd.g(⚝ F?Zv<-fʬ);~trٰ}uU&X'=\!8ǨS>QWilu{#{/anPeKMR Q#Sq:2ow jxv0&B{n$}iX~ 'T!]L!tfeOI sY! }4-{Jp(mdؾ@cNEBw1W9*(лl`6ՉZc#F[uV^gwgmpF*'z%G&uF+(mN` ^;[-%$]-pJQ,] jDH+R i ޟG-(w 3iuο[,e6o4{i~ u\H70Z $ĎB8YKc PH"AD븎BL펼aY!>xeMÝ?\Q_ tG# }:XPT'b9,oԶޏVLNF&FM^x &wX|$6%B[H+)/eU9~LwuKnDAP3ග+V%XUw1K!7qwGi=}hbQVSЂ.t_wwۛ~CIu?Rs aI0T6 KQNkTԮ!Qh>oLxQ>5VSp'*v'kex\=䬒4\\c>l?#{?p+9gP8H?B$:y0|mФƔ^n':%ibBhYTF`&Ox: =sB_rlmT^:_XՐ5xU8Q*ZLeZєzp*o"xZ^{1n 5tLnC`<f/3h~Αc?m砐5Ĕ68\Hd|Ej3zr^lZ1gE+G J\K,$wrw '3LFq&-9FV6Cǘ`1yI- C?e ;{Hۺ8&;F*%F`X$ݡL0~Dtۜg5LKA(=VTcpGJ5*P_RR0*X |h7˄hHJ6Eo.݂f=S"|D`_ U& C'^@CaV deA[yT؊\Дe 3IZ/Qza9 h 2ˉgKKԎqbwWE7Ȭ6 sυ_>w|GL~/e^48P"yN!O~_]mqGqM;ԏ"D̾J1"fwZ5m[ziN7rKލdkL>S͔+]w>|3D *a$n~#Txsno:RuFqDln| 7ְČ Y.M6O 3w46VO-}iTw7ď>Qŷe>~3P2 uŝ60{X#P8,GКI!`mjS-Rh)FddEJ,kyX)ӞDmjˮUщ>XYm9!Ԉ>A(8s62U#mvUxBr7 Di]4e@[ÎřoPҰBUGpkۆ1t0I9xC׾HSX"ļ~1g:f$os1}Lj23u|j,/jڑSd= Job_pl0;D^Yd׵;:+':ڢ?[ '&j[j20} >s)x[Wv rdr!+HxKVV¡unKSO;g‹ww6[j+e}y{}Xoy~sYG}1UUa|$3̷[<6?r}W*Ơ+Ɗi)^F  sִܹ_!$ 7 =;z`֙dtZ h(evpRY%n8=@{w~  مS0>|7&1l_KsBK.HI%.&~_';+'*IIg鸔3NM !Xaύ}Uzi- Bn)Yk669n*I#hmM>qR5]N?ujVFr#5\qcHgO&xƎjx`")r;hw-ܡJB7TNҬؠq!ɹ{BQ. #C4!ۯuq| W󛭴?/1ޑWJ]cE<$J󉐎k1\F@ U=7o/^\"-ʗ44f6]O)44s@dYF'LCg0ʌ௵#z-tBN0l ) i/}p0%!E #|*%lTq)\Mk'HU⇿*Ȩ"].֤Gt rd3T`>8?0L@ce`5%:*Ֆ6dhH[(ye $$fi@NBSv,Y/^]tnsT 0eȢsfsMeqʭh3o;zsg†j2B=7]˟}]r <Ƿ VㅼOB#WV0cPp8\Ḛ֞:YirNvV[MYi@X>Viw%=aJإw.~+Eۏ&`JsBhV;B>ܰ0Jx|$"^. )e4a 깛xKId{ub|$R8e*P*i4ۣڋIRm7FZ UxMtƲ͔'}v~05=(.qXB 1(z"Fq󅅈I@?xOy9UK:[Q$:;%J? ~N ͘oGYt S̥r; ?}Af\_UkTT1}A(V͐r7Sm ah@wG&$ʂs AxK|9FJ,>& biE6cTک75 ս#O$qw&=&>KZa^7nU{J>ўE\ȳL"ZB &fHnj8u_pE;[67_A .isSt6ލC"\ YaOK;6Vm䲎8[hL&ѝüui4OAQ4uְ؀}2 O]h9-&mQB٪A9|6MA?GyH/,}q5WE $/sn7)Tj.>k'˸v=9-HM"|"`L.M\u9ptx՞$YDhKcKCh !Vf*o}yȣW^ qtBWs_QxH_T$k*pG_6W7I>P,\ǵ eo$,0 ma@Rr,&f'8Yph8<h@Igi~74>Ï*C{#oufm#lf;C$ JM}мf*:>Ӛi5]'#4mlEcb~Ӷl\\9Xp_' ms# 4 E0gm53y04Z6$4Y(.> b]\FiϦV>tktUH JgZ1L5bEΤopW.L5˹CqPoȬތ,\DY(֥]ͳ_e]^WԻ'm JP+|8-DQmF7/G; m 81Û `P0.jAi+m^wM ciPJYi~fq(+* DR+|vv_SuOaUgF$օcڱ _6O2-Ӧ?" QYy펈@OѲjm'R? Wzay[yRRYX߶F;xړ9[sM1 uDŽRvc(Qcld55 M.dqT9јaהo!?aYe8clqԋVIxYhbNBvk2Q^7]yXOXZ~FẊV+ug)88^.C!ёSLbl(hοu߉IAU $YK 3~L)!"&Dڽ7qAO1L2-a3&b%$S &/S{*v<=#Yxkp> [V᷁ݽ= ^z9諪>d#SOвX3I_;EÍ{(cwѻS8Qbv nǵS"Tɋ < w۔]8?nY+!7`ja nH>g B5v_w\\s埽v~:D_c4PkN/źwOt1:z ґ?wrj8mh.2Z$in#^? Ψuz3h+Л~ɾLYx)yz'0}zXa!ٱsͷ3Q.KXČՁتh@VjA5$)J?@c Ps;b5*DYT4 VM)KF*a$ Ikz)QU@NIzTog5K<@YNz7ZAPF"xK>$[):]+F2׾DPn $ؘ}d-{Z#Y}Alԥ& 7-q?BL2T\AY$;"(15tl^[nF9Ƞ/>b"]C?˞k'[3my[ٺjUc:ݟ ǠS'Xe NjG8l 3':xEE}̶{Ӥa*vCo5aF_.Nї[=sq5\.*;-IMzH?ɚh)kueWMtHp具ֹSUm$ zdkkg=*44[)F>@iAq1<[xY9m:|X^ua~Jp­N/Irˤkjd-8]=OY]^c(dTK֚0z_%>?JB!n#4 jk0bh=#Lj%NO ]C+2]z%B!=uC$pp ?w;oKGź5~Jr;&ˋ%>GjuF5r*} ꧈P-CY| U(*|,Ң)ۺƕz8|\1hs)rа-dBgG F@@w^2W3;['3Q=Z>SWQ~$bUd0 yVB0xNjA@c w$Y4]j ƻ#TBHStr%wmi/ I\|!(ڻ?PTɼ{ƫͰHap+ed8v(sޭ#Ava&'"? bӼOoc{q&nfhoR,w8UCScGHsm 9hac]*fϼs]XB Ir1B@22jZ;[?~OLt.tS^St)?)[H/-S_8yU%Ua^7qVfߠH k&տΐS8/m~z l|=C#6G.,k.svjDRO9VJ(*18hcGĂ$ՂRsSx N. z_d\n*!:%ӅqUE]p 8ĔL!pj4/ZoOA8y5fP\ 5o*o7iB#NKXdb64D\t`NN h<)ϟ=,LMhF{hN$?ϾG٤:T~xZKXxQ',DA}#3lK:|^rOjLFqrl'o4=RW_H|9pQoT9)=@ϖfBt#m>7pW #֘ }=LHk*?I!>n 4#j?-p˶PGt:7қE.8/`#JQ &3ۚ[>&Clg% *F!ԡVqLX*sXUnhq23^~,yhKY@JM5iJ|\ja'>S.7MV r>I _=ߚrkKHDL$ggA9 ~4`> Sۯl_&o`eP?L}/z 60&ٖTLsՇ u^E켫:O*}엘Me\C\<]MDm%-G@ګ gidD!HQc“eoq|Bk -QzE~mK@ǫl-ڈ) *3UE{f"؀oHXhZ( e[leB@%rf3;03W}w1@Ss (=3&+I^q-owW UƱodwIj<™6qk*wyN "ݹ(HTNGgI592?ʵCuђ|h2 :\}4av2΋\2zFH ~&Qx\xq< 0䖐mmufu[dd,`Ļҿ\SXBM[%N{W<&R:J#U7;Fj5YT6/C&Y2Y} _jX*)}_N6P&8gh4rV-s9e鞛q!wT?heGAb%fM]#g&R [\2~k͢EH\eQZɰ Lbh,?K("&j.[< xDITn)]\zk_ۏBJܧ㦅F}tezV8uCǼ9}>:y7 1~âh `bB. xCJlA@}I\cR1#V48B5qe8'80d( D6 1O>"hظ:&=.`j^L#@ΠH\w'wg鏦UW*)0/ĸؾ[@k&b1 4YӘlKgtU~li9Ǧ]fj\$@!5GΘT ik؋1:{xpȿU\`jșcO] Hψܞը?S}UYGׁa>|D1<2ABOj_S_p{05 L{`[J 5SJW< 2Z6}}G}Y3>7_54qiJa'׊p潝==2tšKj̑-й+4EYқ[PYK[f%˓N#9bU1Hto,wÅn+32MgRD}W' 't0OwzSC7]7{6Hk LV[7]z!JSemH'VO{)~T KNbIm҃>%W0-n=|rln2-ӥž>t3j(%<0,UR:Nj#Q;},;U+}rdyהSsҏE ';DZs,_6Kff7݈ibRbK˕>Za=*v);Co@j>`FV㗓S!䏻2in!c.8$]fLYV i# ǞkGmm[C0ɲN.N8q)8X0tO8P҉O..XQnl@,B;U9N0"~:2bkfV1MB=O-Z ͭGcU @=dejdAKrz8kٮgx.M*$QC:0 @Wn48j9ٸ8,l; | oX;V +1/,0AmUXk|ވc &Ǝam=R<-'$sƂgo>M=7*`v@%xX,)\b"dw -ޅ30rȱD_g)?+N']BaA.< ۄ$nN_pҮ1WOj3yc>]hȲJ.c@Sy-FWMؙ;A @=ig<4 d)>v+M֦R4>kxyí~K\; [GP|U|E^ɓ=+Ss7܍E6 !τT!Q>2q`d)7 U5i߉r"S^7WD{e 8Lc.2[DZw8!*1At$'^*^&&^r$?; !S{'cFEo9D:,v9oJ#fd:m 3Vy|N aݗ77E! 1QU2l{`8$/fѺĬV$}zs,7CXX;l,J$zCQV*>L ?]lZN2Yu53<C=Eweth?w8ܒ1sf#m^ 4I '2#B舀?#q9%(0XUg^R.斎Q-'_TI0dJxjpL[Yt^zNXĭlk,j*:`E1Q9]%uOkj߈LiIGLٔy-{ƿV=ROwV |{9&Gn%U#̵Okyyue+R0TENxaoekY-at^1X da6.0e0ޯ9FFXQ&Zn.'&x|a=)3q{ zN$y|;:ebRV9+e 49 L^E,cB2oC 7 7Ҭ=f$&u񁿨` 6G&ܑÝ d0daD*5xqzTrIN2 3뜎o> 2B9^iJ}4kwSJ0^A/c02Tx. +dBbaƛ\RH4?N:2_Z$zsut vu _npɁYCewq9\SrfD?d $4N]&42ʅjaP0)ND6iƑF1™m<WUZ"4Pz2I^5fv&-ܕ)ݎ.{[?#'Z!_x1Ζi%ǠTSp'˜挸KrL+@ovK 4Rǝaj:v<6}q2V1Ty;j.u!r4^ Ji,igqrBeZx '@QX[:!^qI7V2Yߕ*T[3#0'<ޤ|̞T'~Uci=d[Q R)x/w6X5,D$}{]s*8fcLSP81oU^JRٜà:%z=NeuSYq0+CE/%m8+ :ôS:e̓6DҜu]KwxX-O\CPo&+جن7:;zNz4^$zWAC)Vԇ4! /dnv: 81aSӱOd ;F"(tiR|‰"))[Vt nn>+Z"ԭ9\[iÂuvy/֒$O3AU hEE&1UYve0u|*b$G.r<3a^F5yI2+2?T7PLDl\xR 94'v>8 &mF^g9]ۆAmဲaG;if߈0ߊәsO8(H߶f1(i%S[ʧ8fECn =P .w| {um5h8,q4S+\9 ɺ33S%rګ 1 KtnHGZSsb)T' tՕkJkd" [0_#Df)FM.$(CLS,CAlw,2dUfw%?u`ź2JA C4x.T=æ; 'PnLf pekwli=I'Z'\XBRƷTe'U$\z*WcwNOӣ# wPfГ8A G&;c|y U+HSU]2ɝc:0ӴiB\]fY |o!;X> gm.%|Iq[KҰe:Ilݸ5Ϋ-fO i7^_lazw#+1ثx YxYF2',̺N0muuf@:V .vQ QzZQC0N*?"uÎ[Wd@Q`tG3 @/S4C 2q=̖$!9 sPN;Bu?%pMPxWdEuP6&@._Nƹh7tD0Hbտ_U@.\7D,0(  Pe Ml V 8 xxXx# #} dcz4 Nj;Jf.I"wn=v2\ 堏o~w=4b>Sw@F o]dX1=mcv|wx1l. !e`>3=Rň8n_B2p|u)C\qr'W͍&WHx}iLxC'K/$;uUHYşz8賃/8p_s5[ޞL>Q?\Xr5-yKM>wt).U/r]BQ Vկ?#蘝C&KΧ i7:.Id@l~ᎂf:h, 7_NX-F99[U'BO}WrQCWioeǚC:H^5#m ԝjwFZVfgqR/(0:\,rŜ5 ("$ğ*l)T4(i'`ﻨ& 3:,o%Ȍ˾ h%Tӎ2# iT&.H =zUB_[[hݥ'Ʌȧ#Qf^XOW@ĨdCĺ: 1iov~rc}ZxჄ-!*.2K 0]Qʦś:+PUsb|cb: P_Tk LHnYz 5uO6์YN:{[Jx$̗T7lI-c|,wٝ(7#~s ^@$`sNڠyaA5b4CLsE,\4OY~SlkRg۱}v_\Eia@t;wRDK6Nm"5q!>z`\uݬ H~)%6ڰ=o![2('i4/#s"hX- E|^ aCUN5F wܙ>_N$lʙnW{68m s.1.fʤLpmZxn $n6jf) Gy쐾6͇IH4.j y1yٱj}x(j-ǙncoAOZӂfy0 {~="[0 hpШ BX68Y$L{w]ܘmid|.Xןi o~6XM`-e-WyK7[̓ďq-OMIJ9+qʮs xOvÑ$ ]G{O(x !jy4o]p *c_U#Un^H X IpDvDF *@*n-{\[ٌ phs2XgyMlZHp#g-iŔ/N8d!9ᅫiy"uv%dE6Xpm˛ײFdؽnn5r'QI4ef`rI jj-45 K¬+qN^zbȯj49Jnm@ DaPobn$a& {]x̺eSԅE.*ƭY 8PZCyԧN$,ɢ]HRod=,?jy'IiNWن߂DۗwB F5jD̝B $zʛd;fjwSJ,P* LmsH|TbS9۫ijT&0r{.Sת+YGj*ff!o$&xDeZ7R!lSsLN, fdٶI[ߙzޓQ~"a,uj5Eq#F\G{h:ݲF/x<a{dL;g z>RĨ37`I \ؠt*;.CGFr-/g̞Y)b&2 e_|ʨ6sA[+CKNҢ>.٨\488Fhr䶾K ny,-c2[Ī0;]r?6kPٌR9PFe3)'$D4d$fVO/?{dߟho:~T kl?DyěfAV| Bv8|LJ9H҃\p]iw4&uzZum1 eN DKH24T6xa2kWFҲP/r݁`K.zOAMfp :gdW8Pڔrj:.#ׅJ#̩_d ?6POY({y!";_22A.T즑C7h4U2>B d@F5FBx_(pQ-CU 2@ |cjv%Md?@WLo,>'XTX߽-TWme ˣUFQQx+GF%lkbѠWi23Kmz$TuV @!nd [Ԋ)N^B6"V3ikkV-2юSBOiօ.=` /Bu$^Yv?y-~~P\]ckŹXu܉ `y5 109,oƑO]63TWYm[)SL,]uZyڝ*?9%4> MZQwAUP6꽣gqcb. '`qsLQd+[x+Gj^UzFH9NJ"UG&~z@5d׿] L=bE]py40NĬvndq-5o,Km"27٣KOppgꥎ:6֧+Sҍoa߈Ͳw|)oZ!z ˹]Urڅ2 Dd*:=uF;vSy^i_sHPRᙴ'*4i=:qYR=H=3P YLo'*߷ Xl# ɻ1"K#gH\ZZ79H(ݸ&L׀LAN &$}a~ 0.{m:[* VYwpF:,XĔO8ikkuǹcwelm/trygT"J~`L YY%tJ\2-bXS^F}ϭ[YwdY*tpΥ{ͪɗ.tL>Na\BT+gϋL;'B Uq]#i仞5; 3aWn\0Gv&;1&OA0ɟp:ڲ1s!l8*&HN[PU͇ \p+"=mED x$I9cc/N0 Akf{Ԃ#|Xp#ސoZJ(sщIԓ.I9h 2xr~3̆ܦ%|0^iЊ813tvC=؈"Wk]KM}(d3HcGd帀HyCOfw@GbP䑲6Ci{]rGɩlIGd*]ҼQ$iR4%%!:g U컴l V#l5n!Nw$uM#j.@e80Assc%ӂpnA! ^)LVQ4nhh33BO@eEj zvNYXH&~/L &W (.gXtF| R|?дcG#Y \0n^{!M-'0qerkDm)U`3Fd|g@*5sX@+Ά,cs3'H(J8Ԃ $|\Q4cE/ ^*OdPjKԺR@ck/0I[V3O"!\6ߔ>^jr,$yLDהbvB(nO?5﹅4{ݷnMA85;)00ȾSㅌAI4%-0sq?[q|(/;VY8b?mP]eCZj DYgARpcg7kV<|[GaR&cNE`{9/[T/3=(FͫNO4q~xTNN eNb8{&TS$"TZI(9D|§DQ轑Z\`#Kkh<]5A;M:_%% G R@TL4+gpDLya汮-84;VaTH܀ ;;-1)}fPh<2BlZo^Ǻ Z1CV~`O$Yk\7VSGuc뛮GTjz/903C߭͑=vwk->md{fޥgAvc@&Y0"i/WE, x_k׵S'D(kZ:X,P>FUc*ϕ9㎐4ѯ1tQڒYC׾XrH! PE';^~R-LllG"tHa], Kwj}6 Ca,t$}zR)]2#NWK\&v)(njLp A UK%`X#b:hi%8^y:6;/ҎXxW졬wŹDq&+xE#]ş_i[@ :7R2ڵk tR+k؆&)Ϭ s䆳(V˗ap(5@.b0Bpx#r2ȹJ#rZ ╤珞*4sM…B28V*hC掻ם]L +(vvRKWOpI Pab<N֘"$i$nE6I^iżʋv@:*?gd,f-bӖxmjcC/Y_0YsX=JꚊNvy6iJNm\g8*9ڃ[xo/?1\ݯ(A{4F]㜹2Stҹ(&3642Qf 7:mBZnQ%$ "Ubv)Jn@܂uI3^l*/s;aFr( dA^F_\S.*N+#<3/ C ֱyWcQDG:hD@kg| smI[${H'OT}k^T}mȰF`B VB5dzݽ7Po!̗c%k\RL] iR-ǾR[ jkOKz)|5x'.}h5ٷON2$0U5t~ǣ;tNV&GZ'ps?ʎ@9i6o3->ԿnX@5 f'=q_( |P,ݥb_f q7jyvBDn\dit% 3c]> Zȯ*uY~vvj-ڙK[w mLKe1@19*#@!CZ)bDc F$ʳKgH[ XL"}P.a R%L^%6쇏h?iNBG#-0z.|e~Nl2-+75[d7HO"6 ?E:m*+1abU[~#jJB4nZ dS^2 ѱP+dU]3aބKI' J/aEnЙWoHnDCܬӧQ*nh>U帺׃k͘jzz)p4ǘ[g.,}xX,$/W "t^ձg"XoS)V}Jju:RR-r.S!0Bx ZvNĺ]ch꛶R("T?pg|3FCsBOVšw$dzV@$+0#5m}Ws85֯[+M>PV2U%'D蒼hՔ~x؜Ϋй'erVK@rn;o įF žIզA UcU@˴Aw C#7ݱFGA΂y%$X/;LHȗFKF@ɴl7tj4'K++0,FK?TY_ {x7 m[6 c7{Dc#Wdl\-u)iȤOIs3@YTR1Zui;ҷޜS@7R$mڤP%}IV3 PitE2uv,߼w ˫zUWK\>A0 =4QzY \-I5s1soMIRGv-%-6//O"M,t7Ć-|><}&q#Բg(2̑XŽ2fV%:y(4vBw;Z"JvoS۞/ U\nGx?) `!+yʳHR`|߹PCQ*ЅA8P nX6O7ܓSXOi6 ULS[ιR=sɧ$(Ѧ(6qҸ;YaēN fҳ\_/5=J8@rU?C%g7Voifu0O)t{z)$7se^ΎU(%i􂣩(]]Y`Mtׁ-h8aTVX4f"ߥ1 fjڧ-Bb]Y8bx,juWбx1 Ziy\P&Qp!D:$A䏉/ln}M}]}fIYʒ^>kĺ ѪI/g.W .3ErD0Pv0) ˲ڨĴiժ-7q#5SߛJˀɀK0I7o #p2}5~<_`wY~C&[T(SJ^Q#D$HQ] Ll8)Jx;Gl gAY- j+0MHӶĜ!#GicMqu:%{*/7"T'xEG`13Ǭ>9(4Q"_eB$ ՜u|+OKfoDdM[9"Nⷠal\GiAdOCX4Ֆ?P^P =MA luhd#].{ӷ$>ZOcK%llZEDW8; D֧|]mTz97?X!X>%1(7Z-8כ FV{Av+uꓺu "VE"ٺ_.EAFety\"~[#7A/*$n~$gһ$Ki>V6v7y4ו)?Zru=O]+K㻫HLàIͼd3kf9D7y3;8×;KxHҁÌG{3j%[>U )#avUv9^${-RnὈۻMƀu5> 7^#ZݬMpɲzFѪ#'*9ᘽC=iZDOb̅_d$ C_ı >vS%ׯazt/VxIMWF_dashȮ'H(: {'J >/Ԡ7$ Nߜﭠ q4I$b*x<}b^~=" DmbC݈iGш=·T797apCDb̦--3`I^13UTJd$ϲn]]Kp3T;-%BOS65G7.Ľg)ҬQ*3߃+있J"4v4([}pR[ʊD.?ԭԥɯ29@]pܐ 5]Z(@UBd#K<^2T ]t flsyY~;i?A08lvTm2fh$0_zNrWtͦ=;fp$4?Vu{7|ƋuoY00zbGMҚո,Qgn>=Ĺ=祴T`@_ԔI;4ٿ u%w"憷"DwF~-9z&LH녺Fv}lQu :vMYew!^%T\3hа}Ji EH`&nr?GOltw #_ L@ٳ~L!{ƃV|Ma)mG+_74 J, K!}(| S c@j`}ƤFks[Mp}\.@Ѕ+ 4utz)qi4L!BEQWFmo/B70NJ))[ڍK<1%ygP@*[f?#*=t<| 9:8m1?GRS?"8C^j#1Ϙ@uؿFTN[4:xB"tET**W G u Bќ>M`LC,/Z,1Xbs!2WM] \0Xs2|$el)1ǀ&D3VTO<؃aRd%+ȔCL0-O{m h',Pf ;ead(=h|#Pmjʑ"Ͼ F18Df=̃-t9;#-O_=;eiMG y :0C$Xuн?l./an97ަڰUtDQ9Iֹ><yf^@}PilK΀H߱w F0ɕ0\w7^Ѭ3iB;$܋EXkX'v]T *AL=@ΰċtq̜|ȴïkJI97If`3GRosP{"šQ5=+㒜@:h@uI^Qhc.A? $Po_Ɵ2y2318 DlieJg7U^`ꑖ&MX7v٧6?B˓Ѽ`Gi1Bg*[MZk Coľ X>eh%Ԍ'B^dBUd[hOC.`k&C`:R6+Ij0;W5X5jH=]/Mfxj{G"viʭ Fykpq~;e#WhL 2z,'ӣsثI$ezNNiq ¬-FvI`m#*2/aJu4A8g&3{Wi@1TbW,|^K쿑MZ VýWJ]b| ɔ:w+3IUU3Aw8A41GLho<1 / p2iE 8kCHK%']҂-6iϕ.5:m'eh2pnC] ȫXyhbfsš-}Ƶ?03=jf\Fne\^쾚nq$K>)\زC"6gazjE| )&u3Ex5aFUGɘ#*+|vo.1ĭۂT3G#>`s*yie0˟si:*ت2x,_fh`]gRC-AC2j*'Vq*XCkڶXiT;=BXz! AsAƥ߆FQb7>Z=b!:RO mc]f ] Uu/ȁ_U0d>ZQ2"I2Ca"/4zRn楑2I/Aŋ5$!l7X5}Jf%A+ Mɸi- PM 7#|EF{>XM;e.~0}" OHBp켓۞7%39- 6ⲉvٮۿ-+<|z.T{j*Z OF#ExUr-Yޯ%:9?6 xH!,'Y]YQE&cF_!ΔƯAN!$(|Tk%giCŤq'4wvzQgSD˨GUi>.ί+"hġCO+2?hWF|wYUt$y-s|p+'Xs~=8%@ RK{o|`ş?}}C?l!'/1'z pڽN5uqfKwfBРP*xxPL4LO%QŻS8}gGͭ埘B-h6- T@pYPzcS^e\t"m^F(\6+q?xPww*T&oy׵yDEW:BJucp=Tɉ(г^)9X-;*br63XKE6qX2y}0ZsSeb#o*ˉD UBl\D'*#rRobQI-u x[>0Lj:Lj=k:xDE*z7dm)}9!LeE H&w.Lg,]q8d4\%yLgia܌b(MDZ[ .o[ޜդC}TX7*:o}O 9/̸S Ǝ̶ C.~MU,Os:9}+W{"i?٩C⎅ N{٘SiǁQO .ņۼ%$*"M}37hG̺~9],Bp#c } 5(a*6&uu7dO;+C%+pCU|2W岠=*4n_H_0#ͤ-J?<Xb$]:6A-ӛi65=v*Aix{v ׾[ Sor$Z*vJ!%D/ W7'RW듰GKՅ'ߠ=ۚ;fӑQvkS/qtR|5ܔ`|̣6ͣ V:geߤXr?>e_u4)dT3hPd@hKE`FܢJF7*xV呞# ]ykZ}% KiTl L?Rsb/h3W…Y ^JMPjl-jk*Qb+t/6~{+ē@+,uqLE1?nZ1ʺ&!|OAC^oH7wD7:g05?&3ıu!ee0NDbyX8&=)LT,@u2Uon0n 5E 5psݴ^jDOS?a ʓO 8cbzºEtiG$U6,mϦ62HM7 ,!N1+i} m(WpPq=jՄQv-s:&,{tazя[ <6D$_;gz2@{#HB-|d < T+<ub`3bY6O  Kkbj6 Joz R9 3et07)euJ!݊>.) ICnfMk Xa!迱!Y5yNEDa%9k~t'0Dw6:q*&YBӜӰ9M!d5,܊&ڿd8)#PlRUvY!tQR#\KUKg/SCxK~??v˜aB3?ȳSpMd]R7džd+cQʹunm/"lZ ঐ oAt7OLt6/'Jaߴch]Bj9D7&7ZV,kЅfީ>_l ZLܙ%yO.4N2 + BxJRS[ 4'J~EGИQBN3:X2ЊvECaXv}kгfcdi;xX֩oRrv{Uԉp,/\u2ϐA.8oc\+:"O4wy~iP-rAq؜S_bi/$ (JnP_L|D? }oWaEQ1p^e|\s˟g|7oTk3&j,qPUivjlpz !|5 %y8 q*IG PjMt W H>_S>^Cb6G ʕ7٤J0ӑ6BðtbzMsogd')wڥGP>ۯ=yMwla.."{" u-.GP%,k9V陊1)7bq N7oD "+'=Ƥ]5M>& BA:t߲ݟX8 P+蚃0Ic@.3b -DXVGY&NS\I*LxvN:2?5×eEV`<+Q52'=Y9C* UEB֣VQ%TuY:IjJ| 1ɳt]͋4/#A8+Sa=@NsSO&7>e4_ ? 7*8:(%gjYbs@vGwpMSoI2\>vPk/^͎L*h`wK|mc"u/gE3L5O|X;z'DGi=&QΔ}j,bk8<+s L4ƹϘ@NiQ3:9xIJ_u\&Gp҉~f=M\ہs[V: >/N2Nn 4C ڠE\ YorD0nYtCN څݜq mqHƨ"B`ϒ`ױWX̛OPFǹ]F*zwk9a 2lHD^לKѮH8Xa-J<ׂU*}C^XޗzO RO~3nԈTP#K*l%=IGTξ\$p"@́@ϣM&h$svQaRB-}ilBx(YuKZu{pPQl H#t! a;Pĭ0c(>TeXp$;1o&45P3.!6|U^\: zℒШLe8j]zU;tsB_PnvSic#ߖS)7Or+DYŽK:sێ,(Bsbo]"Ch~!3l< 5Wj[9VCg߾wzUHBN&sygfqYW=/$OUL/>^b~FIv?ހ>=~WL<)p_ ?݊RY Ps&i'ɑ[!}Ρ Xg(vJ?+7eR܀pl?2,Ь99OxIAK\,i `Y/xD3"V_ gi!}ArFwj,y&}v ȎeҤ;ÿm|Ȩ%j9$HN*xš znvMGi=U {*WgZvI˕~dN\o(=F Ja;F"O2f8*~U/S|}!W2/E[+> 8(j҆ / ZSQ}0M%ͻ%zY&S)4Ę f[hOW<+Thk/Y}[ln |$[ti˺f۪NFyS}'6<ߣKc-ן{gii3Yf2J%^I?2V;fg;?*IJ0Te@D$rA^(kVK @xLD"WiQsA|\R"8 myhNu<1aGVi^F-X,Yܩ1\lN{?2Y0뢤tq-$]hÀ|ԢG<#ݹ;F68]OC=vy:gDY6Z[pϘDqFF-uΝ E8􂬿B ˊ ' +?[FUsYd2JZo,̧8m)"&Ϟ^)A̦@}ϾZ)I<{6 vҵ#Hk[n1TRoNh 3ʉu/~LH3Ö4v2ü ubBrm%ZvMRo`naSHo۪n\FLUA; z7_; $/y!NNlWENGH5eiX* NvnBǥwy:6){c<IoK'QվESTԒ:JֶefbdO7%$nVJdeݞf6և 궉 1GաfYVhbol*q[UmJz|v DJNiF EBţX$fQK-#]]!`)hWĎǖOrx:=g0Xu6c#QTe!x֤E0}|rCGAGty#%UE9X0`1SW&s` u9n %~Bn+EYo(癇B3>$18#UƁыvudd8? Y r@NYS +~ø|)nF}Vh#u{@1Qm eAb+z0>ٳKbNed l== eyu`VQ n tG 5Ee}Q$̭XJ3oKNn˚ wI??< ]Gp9"K;mr8{`O,a:~o|O3hMmA0Fa>Hk57i)kZnzi< $.6?i8eDsx6=i|v-Zj*|+<{^9. {Ka.{_Y#/0Q2q}m"Px|/qc\\sȐCOXuΙ~ʃd(ME顧S*/I:bO=MB[C#9$i an`Ģ8Ǻ yX n#Q3-&isB[jzQ^ B٢*"Ko1jr;A9g@1Gr'|k\*\U]2n9 ن@ f7no ,̚@&tHfRF t;3P~to=qϤ,tO&wʀ^K-u˙Dͪux,_I\rƄ&5T}ۖ˹D>ܫCh/a\G?b׏U/W7M..zH\%K[EB~sk8zrn*,a?oKPp<=tĄt˚"SИCVBMUـt][JPkМt`k38"y6Acȱ2W@髼 ,Ú^iOmΨoEI"tLo ab h$Ɗm%zC ?DMXj&eGIUɯb=$ӌSGZ.=#dvy,ځOf;ba8pbPNMX4Q='K}a9I#cQi`Ž0r.`]# :S ]9?45*nx)GڤmplvQZϠǼMX8滛%ƌ||hA >OniR UA-ޟκZ?&|a٠CL1M{+ :IKDjdҝWkv&9L4k+=w˃5nA_uaQ׵ݾkrK;Ti.Or(̟ O/ 5H*c\B55txWW0fS J4ג^dҧwbӒ\`hjc2ق{:z 4PYwE9}P#sG 7+͋Nc} >@ o92:x q.٤.utgckEGned,;#FP  ϝ б2l\ߕSKg,ٮw4_NAQ' k tbW\:tG~[Zw,UΡP/&<K>Fm6U9s:wNpLcx?eխkQe&zVSʏyϩmi(ēJ"iCP5  AR5Aecj'7R/Q6G)cM獿Ɔ:U_R 8{z@S[TuELֿRȾ@=Z'#`1aytܐC9+bQ5^Lh-"Q450!b/sDtsGj@R³idkaqܼ1T>FWِAϰ0ڶgXOs7z؜l5C"CpDG= [3w sT5EVOiB55șKSfOɛ{s*7c3'`s;EV^LvG~%ϭN ^̋5{xlƬޙQ(x9+<@28Q-ΦǴ,*U\i)HvΖN0-kk$< EsR'N0CJHbŞ(i3g`V^ Q*3[h-.)/R-6p pիMm P#V\_SDw=XAOܡGU^L6_-fr:χBD}W9 d9Qhh ,p2u֨DD˱^bnQW4fߘo2q.Xxf]K;+a4!WgENDŽ\Y0~L!s("~dĔLEa?.%֛U/Ducl, <ع#\9!I )&[{s+/BF 03.#27Uuo&{_]iCRƒb`רvW3zh/+\G룱NU?iY'ʞ&5k,Xw@Cnu_.¥ϊS abT]g@`,qMV[Lj_S.o6 x{!I؍;^ڤ`/oYxˌtqM~M2/f٬T: I?Hdmݛtt2+k$jz뉖-㰟Ct*#{BY'j YXT))~7[@`M/梆%Q^K֎{g͜ EY+FcD&uIT_aaJ%ſ)z1XD Y!s`aށj-yJ0v|qӭV?ۅPU?kNbpJvF}R8-:8 T~hٶ Jk933OkOR zښ.6&UtS01Cf[5;ODL=]Rʪfй}&FHKf~cm4(?ےG 'B4հQ%ƿq+^[n .ӊԕ˄E.Cv vSnv@B-=41% /Y ChDպN1fsšSBiA]Ѕe:&1Ыsia\uO"/Ϝֱ.+LbO]{c1ْ/4/oًÈjU{ՠWh=ĦN "@ 'Go$[+AgJ`zbk+CP %G!DEU51|Vc&TP7͕kt;ՅdM%|,Wkǀ"u?_q|AS)եS]h)Q:1p!@MiL^z{ wha4ߨ߶lX-4>P}B:v|u`A/{qWx暌P +D~L}k TEEVY} ѡc?$!|?[n|אX.UD7B-U"s!NyZWju'Iv U0ӈYY{xșUU<KpL:田~񚘚lJܫ r0EpJV><Ԓ9Qc,Tp*P(z/n흚;Qh"|lo\}gG.C^e^XOZ \!XLhc!ׁ{$i5pJ_ؕUnR'.KQ/(JN߁=AOajTvg' fd,qx#fIY\L>wS怐Rir\5alv,Zo^]Xˁ3?Pɽb768g\3&8Cr|yl6ޡ>KUPh sHA]0wV ޮ*ǃ?UX3xֺEJ@Wh_ H~% 1mq /A|H >,]y})Q|, PVQގE@I ݹm YCIzҬu&?I`*rU- 6 6dػyNC!vuFX6O"UΤXd͓,5=*DN ]Q_}@.گDn@h ˥_U`&&gF橿 RkqKc aع X *MimC{-dǏ*tnE>+?bFBiG2_ ھYqqR\{@F!έ./'EgW~WMl:bC EC{t"0R%O#l*]\*Q"ʆ1$:n u9&F D%@Ns$x$KєVwV@{gӨ珡\Ywd9Rnrg ųBAj3$}- E;AuJ##K5^>>Y2ݷw2wk)63Bj0$z?B v ͒k$/1b6^X>(3B0U&mЃIE$}W׌=D>.c7JP l uD1{ 갖.{}I}_ Nr󗭰m&6RWaӼJo&x TYK,skcx-tԥI2@ЫLC?'˨w4G lFaY>1,)g~Ob%–h->}vaADZ6@uЩ~:`=3H{NƷw*&@6ypXO,&4nHTӲh:? ݐEH$ʄ='[16O}͞\gb|s {ԴJ,a@exGh% |jҲ@TqNӨ\BzϜ5{ƙ5|x1Qh=WS`y5ܾa0H|I9=); X)lcC><(KTmրs'{bs?o!94U9鮉VLdR{#wlҸ&(?/q0h;-Jl&Kэ"bߒ*z8L[HMHyv2]VB>j<0r/ŧWj./'EStrͺcW Q:|3ƹ C~BșI-_?eQ/(S1Kc9(سCĤ8BD/vQv~B'4HHvkM6OJ o0͖S^FAW/I >ǑO8ML֏)zwE!F+ X r uMpdDmlY2Lxl͖h¦?M4b&BoԷdTr + jJj1N8E=q>00QSWG`L_3nl[\H:za)5M QOq-T|9y3 3r[&kHELeJ2@( ]j/ʐc`Ch1i |چOfPyۆTz^>;_ҙg/ef+=/N`Wqy~СJ1[ӱh Ymoz޳B9K X+=Hzx^ U4aj> k RyRcIc{󎋙=ZjK~VUD@C[J Q($φyE—[sT׎c^TDr,uVRjG^u/q,s/ʿiu9aK 1_mn1z_[`F8;z/O>^i6P+)' pX\r$RAo' βV!ϟZ&jK45f}P'O\!:oN'nj>HV~~ K)R\DwUiO\8߁(F0R1$ A'ea]lWjd!o-0HlS!:W;%$ a_F!zA@%q/b/ Vccm"@g'Ik6Y oT$Fv&~5Ѵ⍁oӯ v:4W j wD@o]nBQʯ"=_R6~tyJN?ᠫQ.lyVf",US:LM#qX,̩%|B~qlcӨ̸9իiply"cdzW(Q sSqd@*w̗m#(g^1 }Q=u̠qG}A!AvYc!ѷ*hEmg"=xn !y"!ȡɉMmJDT}iRLĽȅ ֗ylv>8<,edSCN yp?'gC9Q ?In"!Nm`6 ut͆3γ+}R'y ;$εxP*abaXx\ѧƒyio㝯 |Pu;o5xSk%8y`s<^P`#I,viqh2BjFM@YсweP2dxozL{W2ެ-%Mޯ 6S@k_ajFeݡǭp~5LGx&B2tgOy%o)ס?;Hk>]haIBcʦ6:'HB`JḞkk@tG(B1…`Po9X/f7Emw,,K ?  tF)Nx Y`bM's&S{[^\5Ρe~LJ!"ɖk 46gK0Ŧ㗾;GKnI<k#^^W{dO͸(ճ Ӻ&H;^de5uЃ-Ɨa}:.7.a<"Z bɯؚZ#L6a G `4A=&ţN\Q ݻٍ?>WȨyC1ShtWW{`7mh M!Kr0"]9m;J.'?ޫ<(n`|? |Y_OpJ<1k_`{ .O$ x"g܀Fm`c]-zk! IjV?lK]0Jw$%a;ͯk]N[͹87#( g>"8;'ZsR8QZR.w"}H6l95,dՀY"s}k-D f\a~w'Ӏԣ)xIgy;&F坊=Z!f5- ;3Něc୙Y͉f+o PTK0iݷ H&+~ ٣%(I?~{/_G{pB!38>L"&"}l)5S$I䩡hQY8'QQZkK7&PC冷 @}'eNv&xNi;(_`@ж$=67f e^m w}(^G:n; GrP0Wj/kD_໋@@\ihL6Aۗ Us~t[1lϨ|n !G$rf Y[ޒH~ZhE2\4WtIdﮤ/HekG j:d%4_Z<;=wenV1%-jC1f/]?/I;߰i %B%Lحx^7 _;ˡZO%+%]ޯBYwO푉IVCe0Ħx\HCe)$wޮw7^b^ t2E&RQJ>NnWzi,-EFofZ][4;yك *.BG  1㹎zof>u?mG0w6Y7dj#D֗~"")hVQA_ _?{]޾D]GU Tm};G>011ph7݆&Dȿ^Ɣ?dQK:9OxO2kݺmd/]sj@LjE$NDh_ć*W{VI4_#s?o^`x Ĵt7CUZ0 Z Jy'D0487qN" f=L; ӌ [lˉ{$T;_Tg!X'kGcQ3T> mI13d߃~C<(|sz ?zЌK#UĈmSUEˑCh^뭰7jMi<5)_ź"tmY4TY[> Z w'.]0Y& b2q~*ڙ755g*k5JUۊգpMr3uDBF]Dh?ZQy1 'O`FИ t_;~1&Q5W8 RIFņ'UieW]eYh|WP0X%{XJ8^HҾL=&&q:> d@^v̸ rA4BI豘's֙dy_kYR| /"`U$ppÌ#"3; JsLTm^ク6jńGO.p B:;fQԞ=i7_@vƔJA =W /[P3 4ޒ @]]nxe_glJ\wc (2aN;JЁ{NI> WeSB#bwZdAj'Y"zK}E٦lÃMaW$Iig7S5(.u/,&yiMUIf3U?Td&m լ)lP'V?^j{.wj;(^d٤N0:S+Bvlٌ]=\RVb:UE Ul^VpA755p0uMY\sp:%K +^Q)R$B\{h_L[z쏨+ ɕZ̐V%2c:$9?=i]={BeQ2iL3pFQ|7J9$R)@tsIV^!5S{S97s|ihAVb?5N( ~553K \CZla뛝SxOEGӄ,q Jo` w$UW: g}+ pvT-NtD JPX2dZIm&塟2LoTĥ^twσ!'; lW q#}ѺޝBGW} ^Ow٤Ak񋇁C4 {jPJ[v8IYcy ;L۱E;|;.)@[+ð#ъc+x|~ˀ7S!REb9@Eh>ʫ :% qkjU2 XRu;*/٧ciAB{z1 sY\P]O|O}Va!愼xvH O ZI=0c@9z t<ݖs(qvlJЯI~׀d* /22짹By(`9Y$yOzFs'e{PuA(C=%g<j`R"H)DT=,g'"I&^!i[,\-88`z-c>U [3PFwB8vՅ)O|u_S8"n Kp@\rxy<2%?Ke~#*1A)UzZ'DZy'\Rn3Dj;x{j;!L<8d߱. Y,Q.7+EjkUhأm+YMNǸ!T& |́b#0z'qA줿C,O<Ă4-d*%dsW?IkƣAUEns7,(lv`/ʶx{Szj`B gEa|yS$!1{~(hE;RN>/Xpde1gh}`n ,e b@NqXdڨ`2L$uU Um(?DCTח?jVd6Cp6LqDi+ɫ2J9 pXؐz,ř:ш_WS11= 3Ti2Q̓"Wu>d1 YI$zl Đ o6Z TN8` {0Y;aaX -k\P_ O>nRR±Nsa[{h5kJh)Tol52 _քdF9 H'eZ؂(]CWû6?7.tMn~ѳ}yZv5=ݒkȈEyH]Q%A]^XleaJNmUr"tեF l=XO=:OGz#=`AƝIWz%`Ř91ojI:lF }{#M<[.)JP@"E>,:18DR5`SH9nj>~[ڷ=.s##d{ɴJ7ABVBw[ x.d,d m}CO6SzlbE,BQ[XVU#dUn:1*ЊB/A>⮹WX.> I:ڪ"Pb|3^wvp5<m-)IT}̓SbNf[CBnbf}/aun ~+MT ?Gr9$>~2RV=ImJq]^7(:y892c3/J*" Xj&>Ȕ"VL8Yփja-3{aS9eyEV:~#U/M1B)xCȹzn^ ;iwxoG% \zW Acv{smA>/AIt|$FW\ ~D_rD25xlG =ԁ3~3  /?bh&BHT9lw@oSpEZ#;:<)mS lX$|_b W']D/3]NEJHWQY|X3쬑g8 %IO/'ÔJ!F{ON  "~=K :?M4窤E^f7S-5h+EE <=#mb',Ҽ=G(ҿ: &@[M>5{S^7~{LQ'±Sp6sTց* f7% S^+F2!ebo8{o['Γ w۫FVH&lj>@T\Ńy?ri09T&u888j[#l7N{&F[o>WAC> mj6J]L&3Z&`SzQy,g%$ lYoEnrלA8 u^U8:9#LZ !RD"ybˉP9_.:#*n ;Կ U{?b^ !ၐŋd=q=5CVdx>@'ջQHę?MF(:eeѩ6Y=tMjN4(A;gsxٙ(E]Ug>M ˝A.8omlA㔮_=Bq!я y.2gX6' 2|biv%}AG 70"])Whρk_k;`څGZ [^"ۇ ʹ=h#Y˄Y~.wwD:FTмE˙A{yh3H CD 4l,¿RBcIp"&BR^\JȂEY H*5MNJip= +bWG:^Bq"\IG;&}f!ҴDa`sϖSqHe?/(rp6qYCTbT qG\X/"6s)Jv, >/%QnA*[3rtw=ʎqпRPtt1HyU^ǣ,HkEX<)Yz}%D_l~h;*iGkG$}4mG^]acg6NN%-zgo8H io&5n.HAlQqKzh1!\sq7'WתFc95BxvwE)ʹ$<b VkHdײaW eNGXqtߵ ܆=a I 4"6Ω{kRҡ3$3Â`^݈o2@w Z'fE#jS-]Jc ܤ=i 8LVb#*K[B2!bz䝍9ЋE5CMڶr)J1l TSXltNdcYp7K)V[ֆ70_˙ʾ|u! =So: I%\non%q) ׃E_ u#K*~K=3hW7 _,X(\jhc\aK^D}DyS;wEq(\Hͤlbd' 0&GZ|*fA*n)lMC'U,&&j/ k2gƧ 0%k6̛7w1e*ܤ[dPxÑ%tl7>+1RԹmCE;vD32 ʣXܡ5-|V q$-߄]/Zev !In`_1["\RU%#4R3`s(o~ !e ڼגn \%,x.~ua=3(OQi1!wxzw 9U'm ΟLHϳC_<\X 9qPs3SQ;Y  ^"[PJJp~b' ({ə 'mzgk{'&Ͳgb8qJ2<8a0- {^T:)QΖG"aӊ-3Jj;E^MyoxM6:yȸY5)ۅ8bE~ƹ#\^BciLQ`Cbm" JQV`C׷Iuܢ O4GuY\ Y?rl+fa ޡDݝyR` pZ8컒|LyQ3I38qshPq ퟍ+Aٺ9NKH݊uX987n{Gp qtַ-2-PwW<K,Q;7fT<~` oɯF2Hm)ԏ>ap8aQEL3 \Ƕ.8ee uĢBk7O_/y6Y nϫy~j}[Q5nV!`loT?>9<+lRAOO@vPLOMܰ9lؿX|K/O%7.=_lR)c:1T'fڑϘ.'}NVi=|sJA'u8SPlQ"l3_ć8v$V;y i>tl":{"᭬cŒ[u#DsTDyXޮ~E27%ةgᛯV nƚd۴t$,:f ,xmL\R&i1;L$ 1wZSK^gCѮ`9KsrLg^Di tMN\+ F~s1뎆7\iX͏`ÚLq$H-qV>k+\\5AtaT-fL!*6 k.iᐺbskY1S%-_ObaK )Pp<m%}Ic%s*(b k%]O'<GHY=B #On+P9+ K<,#W= Lz??[%>6=Di|3XFJb^pZléO1oM||~gaAOO1&[,}aIE5AyѢmWXV#,ٗ-}u"jiyVި"tC>-@Km!}"=6ܣ4Fo*P}FVZpJl2)"_y[>- 힐Hٿ;M :yalyr|ܭ厺cy^>DLWLHo TeN' zXĩYƱ6#y+Vm=RcT,_Mg5Y\ ĪN#Xq8jszuI~8ϟHizS:|giUojp.[ǒrl,k@Dz8+`V!_FU{*Ω]ͽxKT5{ -t\|t9f|$EܶH斵7l'Xo|$bWI&ˏdиJGiFaV'1gfbT1P?}J,3sudz2]:Wׄ5)魯/,rVŒ>ZGJ̞dX^R""ùb׫MV_2.˷2dKL"nkd= ?;C} ,"{vd{I} ;}h]q hX*_3/y,v۸x@ݑ(GeNcdX"WdWP"1BSZvZјT2BMӨ+K8p-&0AԕH-cX$ib2=xf/@w-Ov5W^NUnQ \!'~RF2mC[<4K.b@Hг([{p'vρD:])o5>O >=d#s(VR ~5tҊBAFl5][|rsʁISc5_Np[!JXFC_(eOa0rGH].`{&dE9gy yhVֺy4 8RX[g4G$?CfAԷ$wT7] Qǵ [rJ.( **!P<9B>9!t3;]G&Ƽ͸ܳ{Bswg7^4X Rt*q8790tW9ӟ1oEowtҽ^$5):? V#Ùs.K  ISE*F#5s%Ɗӟ"=~ȓkQHg 7#Ye>Q~8BAX$5kOxa&P:l`3S޸?#N|!Ct 6phmLi0 }څp' lŧ?wwi\V3vh*p,x1* CrBx(]^A2+MȎJ jԛ'2DYg` %gtk2V -zv^-ql 8-7nȫ>[u%T?6kʵq!OC]›ҬpW??ѥi)$|>:VcܩZo=&@ۘ~-F~rbmdLaEؠYJ2=6Z0p\w@g!? 5;7Q򁞒3a;c_Ak2L:B3CwE( (j !j)eG[SޮL+|S4PH7mf1.}Ig|(faNY}GH q/V~(ǷZBZT'։ Rvm;+CP+nXͅD@c-SL(F+{{~ˆ(A ħ?Xv }-y!Y %2]Bh7%n3QxJTE«Hl\߲í5e&覨MQWk,x@ )ևʅFmC((y"v`N;LVz,(#DHid&9]M!ᾘyFy*W^YwWl芁+wԹnR8YICz8B4LW9yUǐaꂓt!˧+2,IǥE3 TNl/)muT4 XKG s[eVKmA\߃hGGGή sC` P@ÙiU쥀-'$uWd7 v},: )?$͆7ΘƔqhGJUHۼ_J4_QdGvucqBV 8AD)jUn u!FhzD/FL Z*($PK1|rD|ϠjbF,W)Ti|9Ąr,O&PvֳnWR5J m@@@Q+_nR^raend@u. 91n+dH4% uHT9֖v߾z'+Z 0 m=QeT=hqp* 5#1*ĔشF1RL>DN]i搚JS&B;]6p"XTpy*kv<+ؼཇN4eU1:%b6xPpp̡j8DlvD^$$=NuzRϥ`g缐qVEaKP>׳T]Uj#$c55N{ a$H$V' /;7 *,.T Ct O~nL.{j GB]H}nIURP3HeSHp(Sۊ!N+>C;zY}Et ʥS[6Y j1z~JAZ*Ğ 120P8xO2>3lSqdooPbϹy 88tKXu\@VÖ  ⁗5<[#pbn%mD;ugYL;^?qVZ~\pm.2ދA>A { >ix'e*9 1//>l\ԣ<ķȳa-0Lf):UkNc ܮ-Y|Zn|{ ?y{ ^pP], w SqLǁa [fEχiȑ0Q߸ψnA&#.Z ci{}_>a4gtt)uޫLZ#g7pE^'yX⺊IS|=zwzFHBKɉZ:3,Gֿz ز3P<ݜ1$xW):S@K4 +5B$I8,tp)Kܤ.WG/ـ 23ԼQ0EdĨP@8 #zz!y=pPg<E |# <=oֶnƂa uf֊ۧk?WC6zzҤ[}1*X/YE2 |b^*dtDNKPY+dSk DXh]ƪSΟ<|:៽׾}W3MVBQ  ! sD) _Xv +~J8MAwd 8AR}q([L';`Kijd9Og;)5wO03-Һ:i n)qW={*7kǪ*ө. ض,ͭQp$J-J4i ,|>A"ʺB]bmD"ۋ㴎+(snoFBٻAhDg7 5L:u;bGyc.E%(OY 0DфT^fHu>۽_2!{5Y2Ĩ$G7'1>9$[eyC^[sO*VՏ2B թ˝= KBM"ˬraj(0}ml:fTl&{{u½:bmcS:Ǘ`r%-{)=1%δ*Ao]{si[ '[FEVwhB_;.6{8-8h9*yĉ}.1RIX}o W!-Wfv}^mP ei6e)eMx{|'huLTH&1A ):T .uㆄ>B|:ק_{;o-#n y|D&K:}:Աthѫ{dk :yVG "f15 mAUW*mo"zv`z(F$fJsC Dp#,3^~[-`']7Y(,{DnFR-KSxAd !SJl,zzd1N`-Ĉ-c9P@L &(6`]E2v+9m#~i nB:\!?RBXe[3Aw cLbʐb*uŕ#SJN=P Ԛq鱿ɮ۳zf-{q7sug2 -2Y3k<E9H4_IxkT[UB%]`%At9QRZP}iq8]霌?D!e~:ovG}`L7c$HAcb1}ȋ{UAu Τ6dZmX\f(̅B I:M[7/5{7֚&FD\{ӑ8 w>"İL78r;gد2X(VnCs-!ȩRLmYiI*2Xc\. V+ڧ2uhƙCj;{.8cϠp(xjv? tUܷR> c άK-D6Vp8=LnV.Ɲ*$sZ+IIԃE ّ`J./mvY K;&` 4#Tf" 0ۢ?Raҗ!k*=%܂3a.! LuRܴԆ1ה&㷕EPg@+-{Kok4q+ݟQ)}ZY~Ù b"@U8BUs\J+ Yf8Vڌp1pn,́ MnɫU+C f-I#O*bMP?))kIZR t$S-H+{YE?ۋe7}uV2^A~c >B<+uUpAEqRMU@n׶Z7ݫ4>e2N e'zB7sP3YAj/:my[pc'M|Du2v2q\^y {C "H"*0g81DcJ .C V SrPVq plШC,Qy@Wk+'$mۤL5G}"Nb)Lq,#tǻ2X%*2"k YE6S[L \ȸ\cLDV0>uF 4 Ĕ>lQNA)l9h+v,b-6B4f7 `-Wn$."4d(#3T>dLB;)w6Uäh\܏>/&Vn$Z[d^"VgF-l'<6ôt/aiޅX9|lqtJ9֓_sސЂ~F|"tj{t@ !:P:L  ] %ʶt*2C?<^uUX#wS%hf쮳Ͱ>] ,8vҾ֜]~Z:ac^.;}F`HtEg~*^~:}{|Iܓ!9B}^FJY^($3eռZ UXs̼ャ zK@!~zjX\h޲Xs0)gl)&6 w"OYY;\Vцk [.~9G B*R1N]\OnUhJC!+y|#G@Ob'ВDr .mܹlvH^sZc̅w+*|,Ug{7n>4PyBRrGJ;yL3^AʹFlMK;0;@ze*"e6[W6OM\V nH5Yo:o𯕏%A(v ?ϔ .d:iGH5՞7t6 Z;}kG!p:B¯BJ5,\.!Rԁ{4AC@Fj]PeT[9e0ݼS[S5ES An" l8^M>;gtC7}x!|lOVBX>d]L :\[,d|)".dH N>g_Cl9zcrvx1foE %yqmӵE a#p$>j5 )K"j~f-_ Q05$+0g6[ VnsM^4%zWʜL]9 ؚKtIXP?m.8j>&S2&nlo.s%?:t|tg" fJ$E|W>uB<t>H׬;tyF5E^AjZsӓA&x&`%Xz:۝%핷#=c<&k|"Ǧ֒|$bco'K -EE`ʐ2~|LYIXYtfSh('!.oW9;1L, DQ]@rQBk-\OJ1DO$vK,bscaT4mބSl-:RCs}eL(\u?l9]Ŏ̘H+@kPLkWfRͺlՌsfGoQI|:V[h$ЊQo=}~w〇`|~/jɘA< *' zaco6G,^6ՍӴd@' X:=E1K|a/=d&h޵oSL'g)q|p>XQnG-ξ2X cŒpã^=seB.mq/٠{{Ir xqJ י4s((fכX!Զͽ GG'_fq*ZW8w\LWCNXǾ϶I;O=OoZ5[r=&_ "Мea,+kkC#s1DP #2>g*ܦ!"k`|nc-^nڙB+q){9DO= As.,}Rqow[,lt(#=n݆B°mt͹ω#suӓ5B>6$F:>: nth_ iUvY|( )WTtWNlE_}dt. -Z:Fyzڧ {Ydܺ(l2HrX?bݖ3SAf[v PZ2x3cD@h;ND7e`h@DCpbf>\pS Vzs.H;ViޝͺѬσV>9ppIvdcȣrMv 3H)o ej7YӖ vJ"M.0mrF>KxI!击~ EC#ЮDPcb#/;PKj"ʴ|-lŴNIu ptC:(Z0* kdV#"}[2-;aSϫ=pgx8^)@\T~ɓ>^a1gq,}tOբyB0Cq,?Km~Bm] WSÔA&py#Oւ?c0HBFX6{zme܀w +P\׶|%"V0zȴ{yFTA2T[$ADsGyyVN0ZL3΅yV(/XϏrr:S(6kVJsEfrpIe:A2n#$)K{x8`R| SdbD\}2!Hͦ"W5v^rK'v{SE @ ng$(y[AL%ң.R caE#S\╜tuB~D,%,ByHo^C_†{ ws>Sf['_<'y];TE k::L^J sSAiDȈmIKƔJ"Lyq3ѡQK&( !uE`>=$.A KdEe'!}N@ݕ'~ \ASp뉿U$_.' +^4lh Уd#ܾ ϵC2JA?qFDvF(obe-TDsNsd dI:,EZּ̅.n'Y-\U/df-͆]nhE‘ݡW1S*ypNIpy^Wr.S^ёۨT=oPdĜ4@zwz`Ygz&2&FSe8 _ɾ 쳗ka nF: w!5 ^ %_10C#k%B; ԏ ETDN&I;`8+v n%z=}ܵC簃f43@f'q, کoK`.u(,ϼ_HB,t"Ѵ #n,}ͽ>Pȡšcl%6^5F9}o~$C'5$hh77sLbKX_^ECbUk[^WF%ʾto{[c!,0:ֱL&g$b:R]#sjg8( +tсE yI=p(2$f^+]ɄC.cO+ ƑH֣=+raօ_2|Vl kNOG^'$5ͫltKPvԳl'KFN6JyuY$z/ƚ6P# sD[6~Q;K\X"jd:{dqqPG'B;U-r| xI{ SDW42E$LҪy'gE>u;^؇yTO{lX{pHTi.B8TO`mYTQ| :D1}_7ty~+|B["#A# _!yì-7;(\,O tMqen^cvNj+ z,hC 6츻s O겊(ccaEef&yFf|kK4~eW01cVGЏί|+wz{H@`gYZ .ȿ(seNrdg=rg!H-!54N'jy;LV]bڋ0EBia$ w0 fwbK}=ʫ% -7b/ m=0xz ]0*T47O2.bWB|l'YͱԅȄA}?X8 s0 ffNs D.RxMk^Ě8!"41A/jّjv 9m햗֒hnFAlIЛe8Tȓ{bBF\{ z_Y6{r\\/ 1t: -)0CȂM1"wIr 5ѻ2+;.S[j9^%1-;J5 sBq=F9z>hr(G(hlu0T7ds- XF =c#0yCN. C¢[vg]-"0uܙ3ǃ-DE!&f; ^M+p n۱@smخ{y^v^g>r7ۖ3y6@:4pj[N{6x*ֲxMGac鴲SUg^;@ -R(a_>v03&ak`d%[|[_ցٻ@ᶻd'TiU퇴uaz}ptAw;;ܙ'M8`eMyLMѶȚEukfzM;9!'J, t%ڦH^ЀFl7{wp˓Z1 <SdI d x9*Ĩq 2@3ڍ #_doh!5R:5mѶc./\Nq!/Nns Bivi=rD "xw&C=WU@@3XM$6Frw%,#vV1i!IvN)ো(~ ;8ѓ^˜}mӫA3|pw(1h~LzܣH a)=4勔.c]yQ41Űva?AW{:(o"Us $V!NK{i:ktEs3t V'09{Re_q<ӕwo)KfZv" ].>)eUv Na*rѪ>\g;8,I^q%\ Ps;er^g{k[_?0sU'&#z5eY p']9ٶ)tQrۓArMB%~( r R@Xr9f h}i|a/wuj YaԶ"v&$pۘQHifIm)^`"RYZ{N%=WۏٵҢj`sneu`52 s#>#/hpp#hsf{_%{pW.CP@*iuk9v4W(%IvF2/ !z*>wܗȒ|;An 0)ݽVⲷa*_'Tj *pQjf"O}Mb񍙫>Ux_Pw3&:г\j[H bq(/}aG# _iPtg8_z&V%mBɣv986i<>rMPY*Pt'lP')NT?S"[,H2B|H?[t#jhy%2 @雡p&GBP9H #Ϻh`+"Pv7eތ{ d0i6B"fL:P伯, 1m k¡ ?=!:H?*~ a0=F`#㣐ykvga]E/0oʨk:w8gfϘlC~,Uf1"8ns3;c]G+6K*T/3+{Ks&YԜJ16@HL gv:B7z8Krd@ah+irco!rՎGwJ 9rѕI5y I@,MePoq~zZnK|c)rtO5E_~6*vsYucߓvehF,ѧI&"9#Hfۥ[cEm.ٻc()eDBPp5\kJFXp*w _J\uM-LIH?I4~00܎Zo:_yUX[uE9cNһaĆ.G06ޥD:﯂ cY{$~n9OWΪY|U6;(ȋeab!-M ʎ@X\ $-]("Y3/{5C:-p W]9Ս&'dE=/SRia?lq} AU,{ɰ֕R%OzFשּׁ0\+x!Sp=)]BX]>2*\t]m s%Y´a1嗢Q7 ۭ[ _cق3p9X&բVF웖|XjiVO%5|Ym{GŃ 1%)# /jgCd:6Y1$t|5h-@ n \-U1^ۆ\(!duh'!6H;gc;mfyS> [{1ւLolxk{8`I.UKN]M/oI[>N2b2|A-n3Ls2,BBj\rq[*8g{c{=V?;`w8KbO~gB"ANk-'|98_ICqw <ݺj|AZ;z8 773@Me qҪMhʺ(TA a]mc[InH4H1@<T)ʩLz;9Gf[ͱO ۉRE,~`3(f k_X v[FzWOXA"'oIsq%D' ;vc/Va w䱄PCdS~֛ٖwt۱H@*wȂe@ tl8B͒^[$ u{".n.LB9)1{Vb nefU'2<|q|}Kb.Jѧ52+!CN )~d, o.3r%k,`5btz7v%{^h?L;%UU=.(GO&/.=!p%:dx56dffLmjBIwC gE3:?1F['4=:,% ־17tuG?[*K}FÄ8S ųg{XcX13 >Og~}\&.!V8rW&yPkz~O![fсA^7ٖD%`Sj -[}ܦ3aG"$<'D*uoN$FsӤ"-T;2%s,m?Gʇ"Yv=wp3Xp3u[^cjN7me8~=5%5>o ae&hihbaFIn^CD` F,Usc$@>w!5T"vm+WJlTDY$ⲅr/IYh=!מa0[!045ٲN͖T\)9H:ё%@㠅A 1%| JS(J= F1RM47ʥ;bd܍p:ZÒN[$ٷ=.cmcM[iUn#|Ԏ:wfaݯ@f+ S鬳IlpRB},b%h wS q H!)6kl%$v3\P5ă~ֶ~@ob:ʝVuQ[ ؙ^qn{YOkHs8OvyFdVvc֕ěW# ; ~[!9Ŝ|P˥1q WTyIvd%q.Tx>#S؀u4RZ|v[4~}u9GV%|xMGh|ؓjʗi!uuOxDl#4^X.' A@qQQ}nU缞UͻCf`[0}VfzX~bbdڟ̢'”@\2-J",oУf j0 a>9-HEieR,PF{5}a֢ezwBRTĻE@C=%cY: 7*M/-A^г|z1A@s[Bg̍PG刱&Vr"g\J 1 neD 9Oݫ1,^0C~ ZYA$vP/c/b V@ށz,~b ZfƟ_~u>EZ˘G͠Vsբo#);vv-BZjM˒ix-N35_|1:s@IK0Dh;')F*ÀQJ xh %4%y(mM\ E߇HsJǞD ;-GE#$3yb>F׼PmzzutGSC֚c Ҥf Q[QIi̧C0. Agʞ&Q olX!يϲ7"!d{p.so*Q*45ɹ6$nsWS} =!o[+2.C{A3 KI~#(c9 =ǑRxA5%(By4*F"c.iնX^ P,hޤCH 쩖Wc?>yn CdҚ vk Nju ZtM2tNp2X4:ÅU/2S9>C#gt;ɞ)*s2f+;0&YDngC> *.lp=!gn?ZԆ-̆䭠RS'Ղl 6@@Bq- E8k) +C|MBOP`Vg楴Kg ._y8I9ek[NFrzH 7Ǧ\;(+ajeqCI q|FxPE'+]ⲎNBhST 80x<ӊK!wϿX햎͖1#'tHvt١Jib,f.BLDo^WP#pS8Ҝ~|v2׼>OpSe]O޺6Z.#ߩb}ŪI)mKOE{j8٠ = ^0cUS̊;Œ o+Zi0tpq3)%˖㿏\ࣸg<6~q'ub7wo0 x"&S`zBjp>|KLMOnYq}~F'.{ H/;ȟ +Յ GAտq3oR{4K_Sʮe==)9*~xoUkuv!fvyκ D2ٔ`)LӷGpKTuZcS~}pp(+Nt3j1 o?.0A7_ϯH@U5R>-v@=9&܍fXW]f[e _zR%)١va-G1LSʺ~‚v;b{dS}2If `svT(:rshtlaVP&:ݽ;ڮR ˣq0 >AauA6mcp/`Sl~G Cُ\ƻQ|΁-WE|\^n0,3!׳H@ނ)#yoHJJ-xdlISRI -OL>)PrܥB'夯^iwMkb.IQJF˃qnٰ(w"Mbj7T[A\ t01exHe/<{jA˻>VxNO[9> -3 8Uf-9$EEe26#tYJ_l@ Y93|vɟ 7W\M ChX\g& }/wOU6Nld4 O¶/79X{eql1$4ddb£')=O[@LrP- }2#,L6NR&+WaQe\A Na ;P(nq4L~ԈQH6  IEkR?{9Тv-)Y=p-li2" EV> N-zg p7lӉ _^swټpzS:dfI=(qÅŝ-as%ӪТߣ jO?Rᚼ+ /fd{wIBS xh;@_`dT4OpK+ϋ&Tinƭa!{$eɜښ:ɰH~-vJUwr2h# y2vf^X 4 7Ck)t\k1 <*ұXߴ ,)XFdY߈G!i\❜@."~uwU`Y+Q?5vtc;n&eꐛz(B=] [J.o29:N#XQMJ^vm=oHSY͜8wj`M΍ ߰ 3R")O1)R=Ztsr1oh]CڎIsYG= 3k:@Kw-M%[22#QKHRB%n=6 fb-J/G*T27eW̍ O5%H@B&Dz޶Y+ VqM/PEbN>I;@ ?e(7;hBci2q1Gnr֛~q-g[?d*e72d,?>r+%$XRg ӑYI~=~$L C"4x]40xٵ^66]ZC6Uq/^} +[7(;$8*= &DQ;GE+)̧> Gn*B}u3xXVWL_.X9OrJ5#ȴ'hnQD2L=+yk3eP`[`c061LK7mH}9'2RsDYrs荑g .=29H#kWʤmTEYH w%ɶQ\#`D:]9&+Ѵi9>gy|5[@ѳ'Ѭ|8~LSc H1HP9/:>\oet`@ћY&\rĮ3A51$) zSQ0#jFFS5A(<Uo&QWj<,IlS".do\G4"= dԪ_4q{{=Uᛗ:^V$ Y}yBڰգe*X _GSHf*ݳ )v!xnl,\`|D3(8]yOk9 =ghm탠kOdpX-د?]=qaޕ/vei>@U^4TJBSx[+X.w\|ԦE?`c00-.D=/UȕWM ~UWo]f]t)lMu{$1 F/MFƋ +W3ے_5:[v5 x%EJR!v>Հ[V&"Xve+XA6 ICmN#t. m#M>WwRK>ΩEkMkj~J_O gTy7@HeX,!?>Nc6`¤S[$UE=KrhH}jVu>JT ""EJPixx:7jk=nYC:XcQ_ihWOpH Sow?XKKDj1zE©V~fr ̴Z(|%9UƬӗT;M~BǝzpF- U߰k\gՒ[PF5]mT(aZv/g !ҩ0CDO ,Q0#Ө0? `k;zB ,Tr"]! x8\qA^gQT(vaV5FID"R ]p. k]IlO/=h-r-^ֿq= 8lŕ_6/5O3GXO0H%K)aǟ- }uƆc7[)<x=ϩSrvIͤ g(x;!Оp]jXB I(O53C*nbElXߝA|V00gh]TCƂ,?;XZQ0Vi߱3ʋ,w leATyg-]s[F'[mvϸKh[˧m,1J ZvhPUK8(c;w$H | / d'qbo[⢹r?Կkx˓yTa$ zrYBd޲ٌcsbҮl@KH\!j׭D7!' !TXͶ BO?B_j (0扊g Dfmܥ}J˧lBH=+4>kh9SvpWL||hSy ЀḧkG> ֒bo ؐH;l9pn:May8rV۳(w zlj/G~b 46ItK$ƃZOӽO'(xvU(n?Mu֥h/&o á$,qIP{=XIW@!X5ClkDf#e<{ Ta5y!!3.2(IOŴ>ԕSsIZ~Y<)tn@:PeRa, ͷ~X:p| &?U `c1(ID2Mr`$z?]Fӛ2n-.I_ N5u5 LR(*e-apÈNQ9nHG.qVdd6?HBhϭʝL\H2 !SO>W EvKaҠ3F=5QῈyþM- V೤ `m[A.i_bEg$s8Md esKUvGk!Vec`L`p)ƿk|5k[H4Ez-]P1 ݞUl"BN:z`c>4_L/.P1j4AHY.hNwm/+x7 0OHu#m$YGV(X#2Ig$qɘukʝ'&k|Mu6s1,xzls,Ǩ^1ž%lVo$e-o=.!U-OՏ[1f&Ak)Wrbŧ{Qݮ?^Ne& NBVSh\Յ`}ֲ]0[m1v $$h aU΄rtLNJI&ϣ<,f6&< #Ӊ<g𱬰+tUc cbmAf\bO\E뢷J*X+Wae2665T!89asf x8N_-}U& ^Y:$R9O:@X9ƹѳja**'e P,nj2&){6Cׄ Q!ٮZZSIO-*@T`͢hܭVAFf1kҲ U̞H_W+'rԐ΃N.v' @[L핋;gi3\2)v;w^|E1#drt 'r迏tig&-;G]K?mɻꖴRY(2߸zί-n Il>Nm3ɘNJ0 c@Ѿ%]%ζa·y%t.ᗊ D6ԋxXh$[#8?֪lp0B/]q:4)ѸIn3a=s'Q-H { -3|^írMk2 %˟Duv\v)fH@uش7=#oy/MhŸToh pt_0QJ˕E%4ȫلImOsPRfbooHIjvČ\Y'S$q.r_!Ś1c1>,B]`<+JZVO\]}Yʶ-"[씋AVڏy0/)`;<=M:YIjmGM?Qk& TpvyYjJ]F/H*м. kLo˙F^!T|Nm)|%,K?9\0FqlɃ J b2:s\%'=9Bu_SrdO"dV[fW#PwAI ZP庚;R [%fXDRs` T}dg2H^-Owc% 0KMkMND?.aZZ}y6XcY q14Zpz?I JJ.xQ%A<֖mZO; CHEdk4m!L,DzeF Rʑp3#ٙUB 5!:ױݼ5E0(Z! 5|sB~_Aܔ} /SE?jIC}`Ȼ'$k;ohGV`oM* \eAd{+\o=dH;vJ6Z25栳@ 9V5݂/Cp~+eAT|2(TPiie]H_eH 0D^)+lm?Oc`bR 71<|NA!$<]~Mhp}:| aH4w,s, ?mQQ7Y/jF)n{zQ-RsyGXh yqNh4l'ǰr!U llH"N~DĕZM{YhoQʈKڂlO0fpTxUJbIr\@* FsTO,rC s&4j %b횀D[F:,d֊EA`yLXäm\sl.Xd5ɒ^G缽 `L@Xnk\7Ͽ=W4ͻNYpEVל1h(ϡerGs?*ZVp: g&[9LKYT彛~[%h>`AyI\'"_qNHsA[NK~`U" {6FPxiDi9S-sxRۙir%-Q∋76p>P u\`.j|3izwÓIR`F(5ˤmC,v*Z |j[q$rB @gO?<!͸|&؇[ko]!]] eT) yC Fjv|"+>r=vx9X Mلf̲ھY#9fx*e%Mnn]eo*:~YG7łH)*A ȊhC&\h{e`1!:X8ECw~N1 Y\!YN*" (8j Lmr|JXKCaah, <՝ F6 5m ce_a;Uǝ6^ rm"HtZY-·xx:p[u&xf=f 6skj295 '5ʳt/|~a.nb̰6Lɻg`-3!U|a{Ks`$(Tu%g GՙܕxVI^'e)|-h%P)0*"vMjXA`r4ϣ̮Iz1fL.Ds ZrI^@vד|`} HSqsgE1˶ ~#3uoKzs[l=> #ӸKAgҟ>Q.*"I(% Bw* "b:㧔 S$4ogjeIc^f#ߩjL 7N+ &ur7 hxKT0OAyLOr{3ќcӶIID"O/=~\; \wT/zQ WpqYGX GR}+]$Ҝa7!wp46B;ϣ$nO,`$yMߢߥJ-@S/ -vP*Í_/Q#;Dw*$_^qSjElny.q%9 #dY!vipeU3fu[C;Y?9= #, і/ fuKs jrރ VhbgzaS*A:$I*v99_~(E;8"1;]0sFw-/yb}@~:W[BdRZbbA)jͱl#"jlj,6B/;zmPj=lB 1QBcFc%O0uc θNm Ƭ?wml=$.ЅO~_7m*{Ķ\uyU5!V-nk's$$Ȍ3SpOCb8Ƹ;dc/fin#UF"hpYB|A`tlfU#pdp/NGLX^0 x4C튗rZuɊpzӽ̳N$cS3H{s>s/:4ԳȺMo.A& ruaj h|Ůq;՛[Ȁ$P5̣\FFm愍;&{! @-.OD_Dc bW36њ6eU<$!E=7Ӝd^i:22v Qdеyy6yHtuUs[TsΈOKfL*Ư]O(A skJ JsV-\JUQ+nP}ds"iqY_b[W伿dCs~FqGO}* IPs .RlR4l;0:]gs*HVҐvڅ ©G7;1/Uwa=cTFSBU}0=_#[Tצּ/qՃj9,iwQT4RP I= QWlCYm|}-2w+gOj~^]kq+X' lW9:h8yB`?*)B6i@2w'\DpĒf3{`,Fu(u*y;[d Zg"߾ x%9+qMdi!8)K_EZ9voZ=<6^Ix_֏2Mbv% )Z>FD\gPVd{ ^%w4K,XQC=W: xք 9PIr.cV~|Yҵ|RL2zR-m{*b ѓ2]ǙUb՜ ߂NJr_:(xDuL)*[IV#&&x}IHj I1B.sV݉ XEf$0(4)@_x#Blv >@x*䚌I %v5=mlSÔ@e9\Mo_^cRPkOu䵖 + Oahh=du<ݧX}NŵG!qniD}3't!a [)#WC{mӓO,NpA˶'$t%%kJnHAV<4֣Ho m}lD8^ iP_DA+ehB2R@"ԑW3IV>뚇޻•R?3.CtQ/kLjA<*,-Ph+,:93=Mj*pιiSV>y 5Nv-U6۪+gv}JaY2Asj+X>0|FٲRK A2r%(]wU\YWRD5u0aqb~`cҠ/Q]Ze>2BT㑮yqfJǹyai%mmhd-FG#46 HnLu}t7l m|fkRv}4SI®c,f)~pǀpak%BC!p'"DzDPDh'OYVGP̀u2v:4R9jTphDXb?=t`nbT\Š(T5gXptiKqo9`$[ \Z5vno9fV(q?b \uXLōh6AxC߼-2踑WLpSLZ"AEvWvRsDഽǯīafQw$<~(Ў+/G 6loDVob!]<&E.m'W{xv^ g!ЖB=ئS%{W8|q1/rHxM챔 I'K^fzaowm~H ޱ{+н [Ĕ8|/NP0 l:L2cW.}s>>(%2%-Vr}:--HFvt|/5Fl%dj6űaF_t?.ʚp[tWڛq*2*uD[aP]\1=~ !ΡW&j/9N?=?L慔wz!|:yG g >ϓ,fĺ;Mi3}\wsU_D*zB T`QxK@n',P~ #i?F -n3 nx#փs"ޣ0f|9 lx 8: eg~u5^&`>IALݱ/Y`%A>=MMz՗PQQ`6ZlT_o*66&2O Ju1;pE9n\Ku!cjuג?lΛAEtܧtyDA0{h  X(aty|ښwcP׀:3&9U tD:'th+NITqNL#jBd2Ʃ~OCm?rl]_1RpC&٥|Q%H5>gQUTH/7C^^_7wFzXq~\E{[cy_:+YNxx+úyKaBݫFcr T ? tL1X! VE?5lH: U 91<skyOVR̡&ܫ-IVn`4 #-`^6 XHGBhA=.p̬؎x ~Q 1cWQ>N7s"~d{R">(|3n#N}!;qʯJ?d^8ռX ҽa`W]8jw>| 꼼ʖQ^w`6\e~ *11fH+I^[;鏱MưZy0CAw^N\WbMP+K29饥6#J˜"7a`iVjeOK55wsM @`Z y 6@44:/{h  p5v 1aNY{.B参wm&"X ddJ]azS$,tLj^&TwȐ쁳j :1`fWL:1{ӷIiߺ~n O7}Z68zSW.*.vXS|2OiջK)9 Ԛ~)ENA]Ors.ݠ砈?bӼA'MuI,ߙ@x,5ӕT"ZP+W*'AS"Y29Gݝ 9Ù h|2GZD:!G]:+6`! 4$+ jՎa*H\0Y  >Ӵ_H|az̴ 8mCWdKvMByUղk (]P9 4%) R=x;(xnDa槴$ B:ױݬ>-FŹx&,~&v[|,>OR3m긼W}+%Byec?STiWk;O Hb(0k(ԋJX7Djew(* yCa5d!(JW7tsMCrE_`,2ge<a>Yb#yY2?Os;f1,߈nbX.^W9Y(_D;ITLՆ V @By3xe׸gyAtAjcѓ߯ď+酭:@Nk e6li8j8i{U\bvP{p8UQ|hNd9Ƹi2bTP~Y'܃d In#'3ލ:RÑ@I|d-I?ZﮰXl|ԸժR_ ]k&<9>^E3w p 3`@80Ä rfjZhk4q|Ď!*2,)|g1yos0!h衩f\bSd2&eO5mU%0ihdcX琑G5';RISAukҠ >&X\dMdoICOIPdkk!ocnA٫?SN0ڥ2;+ ``tMdP5CȎyiZr{>0lG85tk_>i*($|M (EmqvK,rK#iA2C>BTX}VkK*\ վ,WPF[fVb:_**y`+3,V}Xmlj!ײ_枉&]Bfڂ)&. En!}Q x~9zxEЩ$F:{8ڠUqkPI4\-3LKQz%RHSzo*b[+`U$ z%oPY dK`ILM,kҡvIG72h0of [J#R:ì;Is\[WcVƥ^: X*|';0N.+ͭ2vuoA?[UC Q#腶 u!'e1L12@)(9>=ލp04(gH?wmL8ݪ7Jc,&&`%)訕3Q>3뗊U&oh"zY 렐(Dɇ eO杽ZR =k@VWm[m-'2v&p""vl'4>ͣ3!ہ p街+n~ٯ.`f=?;+ ZG$dx8s߃'Şx}¾+]JjYenkVX) ZToe ķ a?fN_^r1"z 0I}xK :2yy{q A:)rgl9gz%q{!7bKu:Ag&LL|R 5K)WK1Ār?EjyAx-݉VYƟ[3Mp۔ ㎣)i 22-q16nfM,)dS[kLɧG#Cd ?E;ndp9>QWܲ ڵ7(3# _.?| Yd*]])ӚGiQn* TV~\\+TEL'@U=5}tq(@2(`]3 m [Y~A7[IyEA fd-CJc )\M + &P >ǁn.䊇8Qȅtz퓹k/0|њj](<4muE1`~jtQbZl^TzA1=TI1OY_Ԥ"pzzI;xDVǘ&n^Ak$~:Hev= E FC!"r)WZeEX耾1(`  `"z.Oo6M|yd-6OwW(  uz& &9/d o]B6(,v$/#?v(u}ޠl>_ѴikOym;ΛGVV x >qSBe+LCFpW hj҈_n81Ow Q?mu7f hYlxó hii7 |e'VcU{CkkoX .DId5\ϢGafg?3xHDw:n_9GXe,iG=K7Ys'a|me*HDWvT6S\6tr罜QF1E p7|MqBhR$KCvX]zeּ0ow5B$',(plFh2^|4TE ȸȢ_y>8i- yF:ѫ݂~f[܇dC#&9$S:f/Bd7~Dܡi[^Ès%4)ђqۍEړ(Aܖ~ȱQ̟B| &w'㡆Afjkk,.ݝUЯ, Wf?`)p[s(뿬)E v Ī\eβ.};H27j[߆;zeo5CkQ\-՝B-[p"`˧BzuKK'*]:8_t/{xb+jƹ[;N#FH_>,mW(85<;H<#eX(VT â]\^rpRaJ6Zwʑ`!.k}33Z5;>(l4І-{NkȖFȚf,;?WT>>cɼ@C򖪍ԾBl]j,\ӕ ʔ&#gYj}bl1ƛ8}<)є^w LȨ,[p@( A KPQJ?°msK!RIm+4\T{a޹;Ag!#J(B|QҶ̰Q";8[.I"߰YA8Ŷ!&օZABYuSXg0XFZX܇Q#eL{[Q[ 2XlnqBf~cwTw1:{' cUOdf#>܇q UFZ:쥥T~o \J< /&::Nr%[lT.JG7H@I畼EdEXbqtޭlJ(e7``)Y8E!}'Xoή<[SEt$߳LoR >7{Rw`r {kiS3wXF"-1'{D<6hI@"(~5hq+Q[b@zMIg D%ZCS ֕dOCM=3#W6-|UM85)GEwx sU YGcN$ue!h{{VsIo~3N,-[X*,.ؕA$t-T;*Y,>_9Iw83NPthmAzs2^8BoN,>`Yp.@RP"::G'Y:ZfR[>@n&÷')Zx5| Ho:4 e^'z'*U@%ZY!:, y ϋY'Zpk:)麑_cV9Eo`,X\Q0uVEQ~ſ4[x)jOU<wl6„n~SʗHQqO2ig.B.%4銖br:xlY6Far"?6"X\Ͱ !3 ;!x[9|)r{O'XZce& ?Oq,]t#x]~v(`S!32v/3uLZ}ʺuoZP[¸d>)RϦ)'W^90'ƒꦑ&gDL֩a)Q?%hFgF%&.M:[q#hzn eL o+x3dau7?c޲K8ey 8+#!)&)0dg߇^_\0zZ)|LRƢT|OHS,=TEˢ*=F86{$iGhs鿹p ~ 52T'%Ǔ*0Q/jfyu/YhNUà&|"X^GS@Yh{xtu O>G{" ;X_L=QN}Jt4>C^][,u#ոo ?41Tث/Gbc+J׍0W:ND;6e#5iV=pʝ4v+ krr>7 > |4V!B'H6}, $apͷ4JE%^ֳBi(djRkrr+ŐL JVM2|8~/҅Pd2+7LAlt luKog8T&v]񯰵chFRM!f1 f؍u/HyȢ.q6 ذ}dbIx n 0T^Z/yB`偘R5)\8`?5* rgu9/ӟib"u%V E+Ud88y܃*AR~:#CG!RNOެ:l%bCWUN6 J-f$wC"kcI#" cf+EB+auy* Ӆ_{1ji]tOk+ˠ>OCT9Y޻&b*cqoRRςm%iFH?%2yvY.PN5<}'\Z 3@K92\#....Un"g 6a 2}/-!QFtgFS]՗%vCl! 5X;Ag=_~VQӞs s 7@%[SbaſNrW/NTC_/0`>̖]G rm g&\zzȑg„ܤmZf鎱k M2Oѻw X˩cGg l٣FalM2}Ƀ>Fg5ZN!fe18i,Dx91}T}f\p6ezA%{s >]F:p%}z?V)O@;\l, }2.3lmɒoM%U@Ak5V 輏02Pe_z%Ud24,Eu`/#VhW*fe$^ UцAiQ8/ל֑f0$l*ȼ~!ܤHʹ {ۣG<R^dW? %1βRN63r R`N]6:pe{4K mU*=4@(Vi঩/PNk96FW <0͠(`aT_V?-h] ʫԐGW JR<ٿ nh)B7&3cjINݰ4{9tFυ#jU&YznDc\j/-p `7"#?#aadzH!ڠ2ΔGkLtj,( >q+mJVAukRR5*7rR+/Ac rpF*%L"}{A?}̋̐Ap,?gFM:,K{KAny K:C(MPȗZS "EK~x+Pb2 $eaV.εA(07mMdb.7lou@HB**RĿ 3Ӏ!7%߹DAش1 ̡1[hr|,!Q$bQvE,|rbEud t:ZN@q-:eݦ఺w$  38+ԤGʹ՗7 F݃r l~ l2ͱD>t CN,wX)]?-vql%EVZgfQcS{$mZqjBJ"V삐o ׬j\x J_;W gC ]V` g׾48Qp)-Vt+'!k7T0@uE))_/6a7N㲗~n]t7m?}AFE$bXQ~lǿK~WTA p TNйszB|_ITC7b ӛ Zr@=X/(zrh/b mXE`3Ǯ=QYHNG4◮0D: -F9#שѰC/|?7tHf8Jmo8QXSi`?{,'̤k:ζSio.~*0Z" :s^jȈRmy咬jr;m'vGjkR͉UB{:Q> Zbܺ$Ʉ#+1m{^bKE53d dXg=Va\`l=M B(*H*ޞ؝YBhMVFyz5|)0=,֋kfbw\O3_+czqg8-b]EQ0$_.%.g/zcQ b@rqi#Px؟s7fD۫x`E& b]qa串ɞ"fm>EU5s^Bcc朌h, %r?x>?+ȆؗX' ڞ"iMQF-D\'1Sq\9HOm,[Ds IָP$XfA!N,R3eA<0 /+si׿e!o pN50,ORq4 V_YhH1a(/Yb1N@O !Dی(J×AO\q*ܝو! \& ] '%G6X{Yѯ1 gjf{ZPłwO'²}UPkGվYmZ YOC-4#'ۮ#X vӘ+]ɿn>)6MiL`<#Scl1 O by_6#I.q=?=H_CONRJAצHk~ N#l-RH8M-B_P$:/)B/^D|Ar(E*dYO? Z΂q2\S[5pR d7o\, &f06I{͖[`$Y8t'rxޙʧ[N A^'6{Grq5QzC 2lR?ÄiR9:|*K=c AOT$IF*@3F2A˓P?DB%8~ z!#EZޢ.qIzLu:fRU T@vY}A9i~x,I'm'|,%əާv.^v(D+"/DqZ:TI"n Jewn{iz,UnkM ,ZXIY1@@{ą7AM[Nʳ?}?N:M:Xbn%Fh2'P1=xRDKa>1l~_]h&cv6=m!Ld juCmrpy-8ԩ e]`˶< gg5¤߷ [P0H|s9>Z={3k[e[FC8tK@ #8CT4ޕk1РW(6465/AЍ#G# 9 k8Kʥ ޛspqBY"~^ %ԍzjifء3HɮeA(e( g5-ysq͐Zy&aoKC7d5G+y?tR_a f`  ـb1D0IF7\`)08Y8FI/m$n o?P}vK pg}Gya~MNcB v "m4|-~JP GVxC#&C)+ `x:SaE%+ԸN#ڈ} :ƇȲE=5IҘR}&=GNSϻa%&zke7%Yf6 6A]fm3Y&)G5n튔l2n %dD M?Ȅu=j'!Q]*W{[kq7[D;\`y? PkCSlGj1jie^%JVjG88mJU9(ndbzYi*ꑲ %}Ƽ~V^h23ԽJӏ(dຕD28NaZL«gi eBf&utLz"YŠP4f-;4xJB`ut^?g$PESw%}qh%~S%I/sCm`D(ߜy$9h[njBn;& Yּ+g#3*HT!/5M'[Ly2`~;Em^R>ьcJ%M>z9Ͻy z[bZ$r9ML{S mz:,Oi'9tV-\U~o8wA,^u*/y:q촷s"Cg-խۻ6^5^ G>[#' _͖0ԡ8au,4c LUa{q7? zIuݩAmQK3E Nhb$`ȉ7:LdCh˃R{jWպ3'0s݀E:0JkC;'0Nc)@,Sr\AAR̭6$]ӱ^=v3CU] Nl9ѯh|+SZ\]Mv{ !0 j bA͝= [#3"Vd,6=GikƱYػ2xفwT zZY nyGy8]Dbi yv`W кms6~kԓl}Tͻ_^AHpj*M9?ҬM_*ٖxI}%:OV+뉠yl<Б>^[1rE/Y&S$ kN %Dt?\|jac07K_alwGX;WV 6G:"!)4IuZ8 p0K4hV6\BTiP)P IXENI rWE-ȻDwRM#H~ W^]ĵkN"G(m@MX4UrtkCp]D#5qABI4Ez - QpNKtKǟ랪x W"d{Ё13W];@ (dnDt:ʷ,ҍ )}i9C*]u֡ܤͬvEIx@jI|?&̖ܽbiLѥ'Tnl4?wwp`K4`/ ~I8s!b:z9:N.njQ!9r;0.!u]sS:Բ*JI҈ hW^5gl:V:d>P ]C6>tL\\ެ (S6ka4OG#$)\ɿ.l^1͐s =-,`tQ K hRm~Q%ػ(#?T,(\]uUt .k?6JTh֣dž-xWT =Ė)E}ο;%xD<.a5Ńfh+Pܢ6pdČAw>`kIeli{ ]v68Os3*=ܦݲzBe[U_cz*&36IS4cm]vw$}Q8Zwxvjރ4^!mݮ*Mͽ,#"!Bqrprܦ]G.zʍ#œ*%S#Spm6|y( P1:1iOHn_db[=ʳδX$r47ry#UUGcF' ?7?'l3 096bu8u/C=K3FR*MDt֕p&.~tbrYdu.-0X/99xl_>8*]5+-J5 ʠ LΆ{;8N<Vᾷ{3:-oǸ/7'\Adu{->_}ToOIĚ aFד¼`Ù1cW牸=q#cƠ@9\@n6fe%)Y&N|sAt7Qq^3fxE[>+І~бj? ՈOoV|kOLjsڞiWObz,$R*-}+@(h*vm_Mȡ&=:&Uie7T OG_oLaO54#^$Nӽ0΄Kv!v wʿ}Tt_/JRq+#zeAKyh߷1׻XBt_/&  JL]ѵ";J Aj"46ISoOdW9a-)LtVR;d{ӱq:;g?QSfv- բpwD<L q_k'6D1r=d[ {}c*׃8cgdrp{wϫCFX$O5 "-1r u8ڢ_>Je\t]2Jgv!J7[_5],% J afUee ykf.p Xx{o`؟yΥ_~NfQ6[)NP4EV. uXknu[X =!*({ZX߽$IW{o͔je/mc"/)sMZ:̨CF(4QCJ`SeZ APxs';¯>ҨP)}yi`JVNv8.wDZR- 湒he5*ț4UYYDбWU0$Rî2BĒF\-?`0AS@QM^0vLO9t/@  U5J,fy8`a:t6%BZMv˃Ď9k 0$F`:䝴`˙5\eh#\l 8_PgFMk0f8WYPNn6q NJߪΛi}CMrCz^FEOمh/^FרW"$ _,/H\/9ÌvRлL?A z9ꭎ1GاinC bތ7?m`.و]\R|!uq]|$ÔrHٯ0X؀Ɣ;eQjȺn1×F?SRLa zIǬ7jHAa8FN xÒ YYLucTRb' Y,5t+W@,z9wX,7̸^OC.TхLGX O;4D^6b%ėCBu_RL^)~Z~%CtZ;uk>͙\dR]JĆ%1-~-$+}+K_CHyiNB0OhܗArOXy_Xx`KrWP> Agӫ3%^&X_~eRt<;HS *"PF % y' 3V_%f$z.iXͳedMrK?Tg%qsV7ְCrk0֓~ell'i Ұ  ֡j* W`Ib؊5Og9965t^D` Ozͱ`R1X9 5>BaØ8e2 ˎX{z^4 ,qF&wiwb4iGJBhx. ¬Ӂ5΂f;*Yrk=YG_2Z`)w&&vyp:#zxov)A;ojUconSOb#|K ^\ʦ6K3tM,:JUyvpR +Qlg o}]XZ<s$T؛ 0Жm Q?[? #g>l);*9N&Heb=GD}fa ITRje1LzT][x 3%.γ˞r| T -e; Hى?#l2F*b@UvNkruJ3UL؁ZTf|a|Hΰ @5jk=pO_"F"4V *EM= s&* >]꜀0o\Y0.Õ"r3#?I#͒ 'f[46oQU:~jA$d&ɚS'//2X쒆ߎHLbRB˦ru#(nVɃ;J)HeM$,7γBqoWS&֪-Viƣ1TIɍkRJ]yoru.&뒶5̂%'R!lmCgO BOc Ŵgs?]~Mq^RxAl0:[ 2Tv !ȶp\;g+_qv "sHPA‹`6uI1f\*jr6~ujf{ Fb'5Vȧa | V\7I2nMBFw?7RTOC\PAX.B$01?NTCS ;5E*B\`cH1dWfhg)|N2 o"ӵkbQ^nب%5 f<_\uPzV.&"[* 1V&*(|Zt&UUvfC7Xpma?HCLNH*c֎aS}NFn, j99P̞d?;955kCܑGhJߔY.JNx8 @_x>c@dNkErݸ}1*S WdDC-^7+hZc:3@ 0^V&yu Ayrƕ]=isKRqo8 AFzȦAK r:wk 9Q-;Aȓc6r&eЍ;z2xмYZP}-*\Q˿"sdSW0n Jw?|x-!GJ|2\s-7 GׂV$5ڶf-L*vL n&ȎmR6)e\X+/PE`Ė;QHr]1$Ö1GpP [2ʅlEG5K 홸J|V¡MIѨw[&tGƺ 12*\%_ɭ*pO56KlCjM ȆY(|3[̼ Eeghm BCHI3duL0L-i?qv_?u6~Ԯ?D4`YFF&dQ3"^`[B h1"Hiw2"^[P_5>OSwK.$OK`"$rtZ_j vEOD΍:"1 򐉋ƀ:'HsTFƺ/v~v$9wEr*,|:Foz_/!託wVC+,< NϓCz 4<= !4[d"8țc^򫁒T,lۚ6݇L3vf-1iCuiPY_ W\):$Xa} X~LcT@Ѓ;=@/Gh.Y\dU0QAwGiPJ=L{М4Cth * } (W[D+kiVf36>GL?CGtN$KD2"gKO.r6n9yf0%Y+%~}m$ BՋYvI0|m1 u OoP\B F*uۣ1W ⊑ m3: gLXC%e9GA2*fN1:à;,!<~ґQ'"cl [*+ e繨MfwՇrs$n O )7-{FCw ͰϨwi "vv,3PZ،c5hz&rof⢹lc2dCܯ*d>ݽb8c.3z<8P8K?h{4DvY6r₝5ԱFlېÛ=|_\(è*SOݴ'r?vUxVYUI ˆ<3+^Rf ƕOH3Lwv@((!HNɇ1,hWty\Eي"1V$=~.Bk AB  դZxb$P9 ,)Yڢ,Q}*WM k'+ҝ lN GLDŽ!PYFlc)[E6_z!Ųӡ]-w% `!kdMo&%,wQf)gRI'H4 K)]U`sB0C,4#M&~ bƏ+gV,u Y੗|eTH^ SV2/fUn`vЇR SM#'N3n҆:N2Z T7žsRli[PYuڙ޾D[~}T6 %ǐg Gw9B`Tg0 `O@}-X`^6)qBFK:Sb2]G-94-y p]ǚ diryUFxaӜ3˗3j\Hn)sn/44ǰmZo>NR7,[Ǐ!IK0z.[KpBeV9cCn*NDV k-[|(t./0a/.M/QCLfH?'GO#f`]#WT"ؚ%/ &4P4])5zAi"VI,begNվޗ^fz^ҩk[."4f(>,4XbcN n #,pԙeL 2֐U5fԯq{90Ck-p8CMF,EDg뷊lzs&TO.)IE*kM5 j|iլTaIm1/}cGԳ# 6r?'VC!]g ?08w;|ЕW1%AqϕL19ct؋¶rA|ԩkaVsBhRkUv` k;RA-tLO#GKVVsUi'mAvz58YzU|Vy!60 Ma\o}/xmE4IMn|r-ʷ7vjO-|%7eE};% >Q8 <`)^(TGybN ;,f#x 9'&p1۝%.\Ӱޣ.㑶mRq\pl2$6Vmr'V Z-< ?֗=Zh%QD O>ZEGnQ`{2^uAYÁEX'+^+7=^EeX|Eas/k?xuUȘYHlcG ZUA܃q. C!gvLΈQv}HYD2:}"BZUpt=~3,~6oV3WpPnv6׼sBh(BPu!N LfWQ"YlrhylKvKHxKb%TUxϷi81cn>Na ݱk%|{tf-r-Tߓ=x=lMVurR[y-Q#[' c%3hs+D k=s.cyh4hOs2˃4@j-tE:J?l\Z*)x9Vx˟M #(2Lđ D. ~њ_SlO`D=eЙڨlp.6 D\ *W`!^6q}FZfuFT-^.ҍ J;DiI^M޷) 4&ݱa0z;/#0Ah|n;u/8Rjb]OA[|[.3沴#zKhkWԘI0t]QZ'ξ@$6x!5)CM {g⫮)Yktv=կb:uajM2[f0 qMY²(MI6iyT-Bimu'su)J5m*`"+_pzdM~fFEu1]sR"SŤ) wH?j#$? .>Қ@+ R rFx6 !X0:>VlqOSi u?;6֜#`<y[-cAu퇣n߁H៓,ϥ΁ ]xEYh 73ԤJ#-'x#PO{HЦZ;{΢y9SB}H,vȍ0us(UNj@i@dJߩگUK~m]65aA3_~*Y{}5H`z#~t5rc>YJ;SW2cZj#<[.{RExifMM*  (12iΈ%~c8c8AppleiPhone XS13.3.12020:03:05 11:28:10!`h"'(0231Vj px    |h1501500100 Р23(4(.`y '~E!2Apple iOSMM  .@hn                %! *# 2% & ' :( +%Bbplist00Oc+BAHHjE_O1Eea]PEIG+]XLZ9'HCy$ WbnRGjB?-,^c'oJKvDT20rliUBcCjm4ifOh}o]nJ?cZujHmDRWt@xck/Ie[>VdXL`>XE>waDkw<<FMrzyC@=xKtW;j_'YwK/  bplist00UflagsUvalueYtimescaleUepoch5;, ;'-/8= ?:2@Ɖ2 q900nB072C570-D99C-4DB0-B53B-4C15808E789Fs@ruFK7F4EF8E7-744F-4B8E-8E41-E61D3127AA11  AppleiPhone XS back dual camera 4.25mm f/1.82020:03:05 11:28:102020:03:05 11:28:10N,ED\ K dMlMt |2 ddhi--2020:03:05Alibvips-8.15.1/test/test-suite/images/big-height.webp000066400000000000000000000160661454007373500225170ustar00rootroot00000000000000RIFF.WEBPVP8X  ANIMANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{UANMFB VP8 *0* >1D"!t  9v{Ulibvips-8.15.1/test/test-suite/images/blankpage.pdf000066400000000000000000000005551454007373500222440ustar00rootroot00000000000000%PDF-1.1 % 1 0 obj << /Pages 2 0 R /Type /Catalog >> endobj 2 0 obj << /MediaBox [0 0 595 842] /Kids [3 0 R] /Count 1 /Type /Pages >> endobj 3 0 obj << /Parent 2 0 R /MediaBox [0 0 595 842] /Type /Page >> endobj xref 0 4 0000000000 65535 f 0000000015 00000 n 0000000066 00000 n 0000000149 00000 n trailer << /Root 1 0 R /Size 4 >> startxref 221 %%EOF libvips-8.15.1/test/test-suite/images/blankpage.pdf.png000066400000000000000000000073231454007373500230270ustar00rootroot00000000000000PNG  IHDRSJ pHYs  IDATx !CC ?3pdx@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S xIENDB`libvips-8.15.1/test/test-suite/images/blankpage.svg000066400000000000000000000032221454007373500222640ustar00rootroot00000000000000 image/svg+xml libvips-8.15.1/test/test-suite/images/blankpage.svg.png000066400000000000000000000065211454007373500230540ustar00rootroot00000000000000PNG  IHDRSJ pHYs   IDATxIPQA$a=v{<۾O\/^mxLf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0S@`3)Lf 0Sn۾'n=k/1IENDB`libvips-8.15.1/test/test-suite/images/cd1.1.jpg000066400000000000000000000514711454007373500211400ustar00rootroot00000000000000JFIFC    $.' ",#(7),01444'9=82<.342 u }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?&ƭy4=?Cn M$ =&ݦ~UoN҂[|k>]c0=jx]XkN@UUoW99HN1QX*UH-+s]$]NشēҮæZBkϾkZc2'ZrOX ̊T=qR<ڔ}G& m~)݌*y&23Q3IEpC`W|ᷓHgU֟j$#P'z L\OZ G$HmF{ gpHX3A)Ѿ'RsTZc8* r)6R3|n8N ^0f,݀>Aץif4>1R ;UYFeL?v3ک\Y^im,eKކqp9ZsU9^O4'[Sq*d0TټY hYGECr88ְzTZ2WFz8rr Zü 8ߎ)7yLEV#(qLAZW܃ՅpGJ7=MX#H9u9TŒޙtpJ#bp?BAC+(rGZIW#p^xS?w5YWq$@"GTV%T= ÑR)dxJ棕^8z\%6FWvR3`ơڧ&MYӧ-7Jr:UKo򞣚elb\hsE*p{ c3(ޢ9ϽoZZ`qW 'v5nj[\֤6ddVku5v& 1^GJs{{VU˪:v_~8[ҵ$e\zS'ĀJκNitXƧbky8aO9ʟ,p=ǥGA;A~EC nI s[1Mr}oBu0OzUus{J c8t|i2(58 C I=hf %S̊Ap,q!>CgEـn{~ 8*'*`(8ZI5$Ce.ڐǜTqS4O5~P'9IYq'- + ׉tOp14AM*ƳٌڭGў+ ^I}9@ < rRl:WSmK1cҴ&_cҡgұ̼U Ͼe`HRx5=XdWXJйd q;;@\AUՑtDFO\C UR:ZyQe+,MVxٔrĞ-kbv+I~#z$#hћ/!l]L9<jLq׽=d846ȥE'R[p# ښ֡mO=jأM]N\ֺO (]7t28{ vVȏ,޹YM6xb8rz]Ear3QZc:Z܆91]G9)WvZPNE9 #6œRF0i@ 8'5.#K d 銍#Oҝ^}~h=z(洄1!1=)cU9_'5^.x+hH ֵGvi+޵%g7PTos*t Tlz0Ibݸ9)TdzTWT,JTTN=);Zy|dqC$0^$# G{1V5҆y5]#=*Ffw qYR^j&iF"\yá7qM$Aje((P=}d秽Wi6y tFw毢,i*'cRCS/6=ELHT )Zl$ Ÿ-6jͲe-oYXӚvcfoڨ ɉY)!naI0HA5u_4K{A4ԆIYVX`> pI&OL4"N3ҫɬ"58cY}NZqL46x27I4Ѣ}ggʃXNVn;M) .~mv҅lGajd >OOC);HT.ZV]3ܰxS&})=*v`ڦ"A)'ֳ!̔5"bAҕā`jd X:Z7&PTJKum$*jE$Nj(2qZ29r"1RnHcҳAcLVg9楔nPm1Ȏf$=)y|:tK+PG,GZձMIW&N5Gy|ۈ䑁I`bb@+27WOlKcJ&hx +ެ˴?JOqS~`s"}Tp=y4֑qPHʧK(6P=955y;\m\E8508bprƞ⮥-X]7ނ|԰̊e`A(iebP9LXfpŀ'ڬn%ۿJe(UGwÚHYTTRCUfr*ic] { [ۃk3VTfܴEzq RD^( ƹ! !*"+{HQeI@mʟu(ri xNFlgjrvim5i:|qNBS'h*AaXK5h:݉ba'ڸUY T.oi5c#Շw$O$wEkA0$VJLH!z3(7'TWI/9-#6y3LFkFyV0XdN K85j% ֯Qz{Uicr* )GQ5QXdUw T_Wf#5$,:?J>c}*JS+WhwxD,ς?2*Gҟ,O !9cY~ۻ-N*܉ck1gKhNHkcҖ/ޱ兼CT58W'qZZ'6Ue{rjMWEL!7~S~W8f\qՍP2MKmq#D*͖#uf NRKݪLei.zx#SOj5:޵C%펴 *I]y.1}v-c+.Y9p'YbrM5iuCPT[wZvF'M溝=!'n_рb՛,mYDqAYC'W^uXWA;YT5&m<\(f9Zqcm{lG4l#S3n=ZC<lUͼ٧氮ujk.s 4ŐSq4*OE SB!5o j PGV`,s]$v:rEW<|Uˆcַ\ L>uWҲLR I,t&+MV8qi0,61],jTCgx V`Gֹٖ .鱳]!EuHrOcQf2}kdB3]yG"&ၫ~|8DRy\`@֝-+*> rMr̸DDI?vAU;*NjҦ@: (o^fpH8S5jHn$1M|v,*ǿ51 T4ȣ۽j3˱zT5V-'ŻD4妔3sc ˦UQ QaPL3'ۭhi1n:~@{J󧓱 HcJXf巙H͝4'wgϿHblpz񺘎zTXgwCQIcֶ|9/~i̒kqrPsڙ.vgȁg5[[`8't1Mϥ4Jgl@\ʓִO5AU8qڜDkRdڣ޽zRZK!R Fp=i'b'a77>٭)b8+̲jn25 qjj5F܃M}F@;}(YڲKy0USºZጏJ9ݺ/l~!=+=.- J8 L*7zqqVnchZ1W ösXsIGc[e#'i&m$k]!,rk['[ۇd=0=+mNѷݪ03RN|Vk(<if5MlT|HqZrԲh̷.Ѳ^TU=NL.zS,!ځllTҗqbjț|جT}j\6EGBH$POR5j#bN*EB}E$)% "p_95>;xj&M6WpzTxDNÚAZ!29=6G*?05cZ6:s׫ u$52"L[Äj'5ӮN{V=|Ji9f=kn28#5p6HV!WH^^jo̸ȸ ؚЀar&oشJnʠj8k׽O!XA$ gU BeRBCNPfЭivdܑ[vZFHiMl1Yp:Jaj kke5XTNG"56HOoD'ۤKt4p&kY/xPqV]6w_w^rF0khdbI Rk4X =*ݍ?UR3FBXvH&HY,XIeQ:J(V*>3ךI%;BUh"vr:Ui]Ws`p1YMzg=j VmJ1kuBqsRC/L͘"ӚӢ,ナ#XWa<$jq%2D[1>ښ9$z;F[sNldylBH>BB^Z+t*r*CWrI uizUy8im%px#M.qL/?Y(Os]=>TC*)9.)鈁#> /CGWPޣ3V6x8m ܏JaR=ZuJu&pA'򪷗k 6=+[;Z"$5RMY~5eN~.T)PfuPWAI\ hZp`L ~pK1d;lTr:j _'x܉Fz})`;+M$zNCX\ƽG&٤3ҸSvs\4|psFeq+С$ۈ¥GAO7F'ҵ|Gzl Rk!t$^(@qY1-9]a\7ƧJ}j, ⴔ Tl%ϾkN#ڞ%5#;9]O4Dvg5d.FE2OO=j rPStNH*?AZFHNg+PY$v1乸f H'ַtVH7E'9^I}nj|Pw&'ֶXj7jj FMY^q 6^c 5mB=jsUCwp`xQI%Vݫ ӟ²ؙ*4[P#Eqt"M`y5qZK9hOE9ip:TF9u $c#Zꣀ!Bcxh1qJESk`䎵=nqW|=w?t (TTk&qبE^q֌ip>P}*MįJ{pP|f3gg8 ayTp g{S #N@`ri{%]JIqaB ԒI@RoX{p= f^_b}(,fZ[m*(S[sH#lqU  8ɤ 'J 0wd4ˈǰvҠ,t[E$ɢ2qY(L6G=T9WN-3P͝Cz6PWM)BǽGGWm!IS ѧ%*z6#VGx 0nt|PjgdR}qU&lDXZ^d{&p֨\9/z͸S9$֭F+BwqZNTS_ޯڝ(K}+:2^iZq`iOnTfl`sRvs H#V#bGJ\MܬRz{QqԆ3nv嶌=*ZT 0ǭ9 2zq@8r:уYV *FG&Y4f {T䞂3=iLqT785F`Ԋpr iq8櫈~J;TfA c^r-I j񥐍ՋsIϽ(j[3BCYb&x5薉/Xp*QҢ@'jUz-a3} 2٭8=*^jb6y*4p $ֵ8 AS8$`T@rsZ<=>wK ]SNXz`TQFA9 qۦirO: 1#R4G;x+AAҲU%|ضHS8>B0VV1dZ̓犭)`n Ԁg˻YbDؓRFv?N6w̼[G tnN'5MLnz&)JB;yRu>,:~C<Ӯ?~*|qv~x\ Ì`T6|gZh'0e7WI)e@jhԄjPs9yLPO=jbsIvڣtҦ :ԂtMWcS\LZn;Ry9,sbzcҞCdTe 沝Fv柏* 4n?v|.+"cSޒ2΃5b8@v!>d)=Mg]Q{tk\wPȯ) yaZ֌g֏j15#F+}4gR81U={ԗјq\=oPOMkx1X K1l:>(Dw Uoma |nzWFaUsڱ%1#9ry ^lY_$m/c8Wc}ΧUZ:j|RЂ1)e$V,ŇjZެ0~*S!#qR$kM|)ṁsεcPvvFޕu䓁)ǧz!8☭ǥ5XTu5 NFEWmI7'Xߤi{V fGN5Ӝ fֽAcMO11Z1&Ʀ{u{ O5ֲeRT`Jc5}CnI< JƜF$dg &֬[!K k Tᱚ59M[{ԈX+ֲ=zb3YdG3S(98'5@K4#'ҩS"Y m2}؏k*ґ533:dmFcJo9@yP#d{w^-Ԙg+<lssWp 'U&OJuh +EjQ_9-m¯ke=Θ>k~aԷnitPq129Ԍ =Cq4e8aY8$ahWMs,@BȰSV-n$}k^J W8G?!+RB.rA TI sQH*j7 #S?ZBO[iOSQZaNzqT3.r'ʞvTaxjj#'t0yj&f=MGgjVf@JT,E:|Z 4+n)SlF=Zxy q\lnr*5AuukfEJkPfi Ю?YaN:sXZm5`.A~rXkjP9)FGAOX``sF9N@ϭu0ϵU|159]c=jkv\I$Yz`‘ҸqN3;Vaqww7AS!M-ޤۃ*)w9\b1ˁWapF$#˳j˗Rv7rKzֶuQe-'i<ՈM"Y*rhբ@=+N/<;C?Zv(WjfEI ۸ $P~$z$ΫOEo3f5n2*QjfT9{tK;s*ۑmݎANGlRk%ܨ-(;9V*{T@Jiszn/}h/ߕU=~ ē[.pFX|amYxr=9h5(]뚻Ê S,*E0Qq׮x=wN݀xb5ҥ3Z U;Q jhƃI8'ξQ#=kֵ5JFlZ +r53EpiLdc]cnSM8'NgK"O, & JMضPb(U$s f]`Sd*qsn⥸8|F 2\LO106gO3`S>zȥrjDbmגOZ[k3hmzdl95ie#zgU$l>ŵZv6'TfAbxrܶJ֔~p9隩?bW,+6O L犯j\Jeա86 aԶܐv\YZ ٲ'5YyXsZ1V*$9&JrzfG=N쑃N4|!%D¸kRAcךu+4:G3ylߥVrb8$n$.nm$^MtmFN` 23ˁ T. ۓV"{rp);)^i<7zM1a9lS`2WWLVVxJBgy]&q+@zBWn 뚳bJcoDc[]wAA=(ALWE&8A@gi *G4*PBoڒ{8D2zTV8GZHepsJֳ֚mdnvTi X&OCU9ӤgyR+ɵ%JVᑀ>TXƯC4[FkJyQVFUZ =&R@fpHQUIҲn/3Yx_&=Gzt[pKItb㊞(GN;OZH vKlsڡ`wvc-|YZݜל$\2:f\9T)j]">ՠhVrւi#<JrO8S/!hѐ95 Rz֕=i/u;[b@VFo6j]dQW+ޖ6 i:l$}ɑ0zlĄ0M=AsVL#l"K沯H=*(-h%vդ\Ub?Mo;皕3UEo)QVV($¶:SFpOK`a :7XI>Z}֥G\V\SPbK]r+WAeJr8&ڲ݀ygGj[lx2|]:`[VOJFN=j(:dI!'vk.X]*I荂5s͎eï=єZV +2'ڑ|!=?:!HG EC93~8R"G,ȧq'p3S$T*ؒKmllYt؞BFPt* 5'-Pw;=*3\) <%t;h27V'N`$Tr=+Q;qUs/W1Ik8Qֹ Op(= GgbN})&i1J,=R5;r0sNzm=:WGo;JבUh!H2c=Di+Vd*գVXRFE5a9FlO#&ciKٍvArt~_SR$&atP~.RiyJ~E {Wk7:5A q&l8f#bxn݁ ؎bQ<}M'5h[&̑RV"1ڷFT M+~uYNтAO\zT9cp~r+f&p;{-N,r(lcP8 u4w LxpOw.mPQhҴG# ׸yk! ^Z#-!}HFTK?p}ijȶYȻFeH #2]XXJ,SҢ*ʼnګZɇk=yE;rO2Uޢ. eG#f:V\tL˻>8cbG*:V1iå*WȊmTR`Ȥ1PKWVR<$dr*dD$UR$b-B` s:$b2*k? dGf dYS8MMqH-F!=Z5j}6${ǚ5xD=P4Z(u^qkv<C u Q5)1Rީk`u c5SFjg#i!YLODW`'=$IRdB 0^I2pn[2j 3IsrCzX$X#oZW3p{T[|#Y{UF1TL?Ҹ)̕;|vRS;xi Aܷ֩Jԛf@YCSѸYd5%lVvFˀ1V8QRBʹv~ٺ}ιu}x>\JӂOJ#ӥiC0(9)L(4縊nՍu˃y.uS\Zc{S[ؼ5|RdH1ެIkZrxyΞ1"[qVv>K)MlRtf Y gVNbw3⴬A(EM 9N Čcgn:tpO iBɭ;7{KВ$U#hImpUKdNqZ+9|9R(}+jQirQHF[fⷭ- Rw3SVu%Vcs^G"ZzۜcMLyӛsJ[ү 1NE0q^m'H]Zڝ9<ӂ~T}8J|Z#yMU,Y:֥lm'ZG*Zo3sޙpgz hj|qTUiٜC`!;J5&۩tyr3* U"1[Vuن`;VV1eo6 Ƿ5 /UMq7ٞVJF÷sy*s+6v7HFNxItA|YT{y8Jgpr3:|Jy$~iP*!a*w-aǓzַ0;73Y7chx$kD-"&G{VUǿXu)KGEFPQ*UF!Tj /&$R[w;IelyDYq&Jf֭b*7*b Qsߥf0_1W-J0MLd4{Tw-p)\[A>$aP֩7 %TV[vp*qw*!U亖Ls@^=>A9$ϳFaE9ck&+;@1OqYHRHWaj Њ=cV}m;g֧f,kEt@SH3ZQRV<6;W939ǫ~ف" ng]]? A |HD[{'&S Fޣ5$0IQײhA($0>2=B꼬ZFcZg02jy. 9^f2[%klXcV'4k{w*dPH?S,F1LJ?ֳoڽsVa|¡ =k"IsTR3Q$DW'ZPjݥ7*[5B.ySDة)Vn~_ݨѓ&idVVE=eΤ7Z›O9Z]+b=z]xQYZ,X ;{AзlAE<< N޹VLeVr864p{SSA#xj(-ɢ䠕qZJ|divց&sƝ3.~fnEgjЙXoQs,Nu2XzܪZH\͌]^9RjtP#I0#<]1B.]#G4\})}*&B3UY~lӓO:Ta-^##2TJ28zb Ԧ)Ni`'̌+ƫUFcA+yZ\f.'pf#,JЖ]ќ}*IqjN3[FUi! rsq]^IH8/ɬm!.AxZQO2sz4- ~9a_Ù˙Ժ/pTW=wi%ȧܔ]ýmӨ=}=Kt\2Kjd/3~-8D>p)Pp VҩJɚY9850ՄD1e'@pGJt)UIʏ:/ԃ֭Z%9͎9!BH'UK'9z;(pET5īkD b'Tr rPL8Ϸңu#iQ8⡺W8z,ztS ҆HT9=EU9S8U?[Qf T0kn8ȵjƸjv楂uP#sZ!6*z2#Va}ch3!boY[8eXqx& X$) ȟ\3;N>}J# 31#>fU@U}SLBkdխ݅utlx-Ræ; {[۩=Ma_x"0f~ZRBY̙ޕsS`p)`r96T2*ĬU?GnGҭCpx绎u;qTl JW`V->J=G^@@GZVm|4 H}HIRjT;R9cEWPCM#w+N8 sT vĕҮ*-ʣJ9+˥~Va>Զ܍U|}֩##T:3X OXM?6{\4ШNqV-"m#=_;L35Y Tuu~ Ɇ5^=sfܒvE=*XT&/>x89kk3'Xl]ǯJbjޡ(T^kȥJ͒h׊m"$"|c\ֹytN\XrVqڝg֔=@~5"?;Zl[iBqTu'&?Z%$z]Fd*`xP^v0xzsWR ׭TԐy`jPI[+ 8+WOAt\֯߮6˻Z",Ft:]OLK 1qpX ¹+|㿥>+tVwg`{R*`BVUq~jOD?==Mi#FGZ|g޲.d'NrJЃ o5aۅ=0 g:Wc<}(;T._?>61fH#w8O}i3)fQK \U)qMvB9TfqM4UݞMeai"Ubq޲no0p:ӴنVHaDIB7K5,STګÌ[5[:x)c[OjNoώMXJ8ZYWtM늯jXcz6Qzl'ۼ/sܐTFkvn[$VZҍ#f_ͽXA#2䚚 Nh2jYvtGs[.b{}*v 2+&H2;0A=)HD,KA?He?Z-eH9%".GTUb >بHz)T +>k_ޒCV&xWq{QzS\X]Mجrm&\8@޳, #3B_E-oo }qXӪ(^s6[$ AmfK;H4˷3\~+@?Z%RҒr1Ty3mJ"ps޷W  ֔z TW6 \>(?P ԯ(=)wvJn{V&ElBq 8TBۿҰ`^,`Z}+6a\{un$BFBI`Ұom N+< F եZ|yZ6ZD sNVM>BQ倣8@ȧ֯CppNDj&3*A'` ǐ+ڭ'S62kQS ]O Rǥ;<ةڪ'#e FjB.cZDOJ [HZ T[YNN* ;J*AVeکC>8k3rz%ہ&tᔋU ֟mjMylEJtvk ={Tڿt:AnLmm;?sI6nZ/cu!Q7@+E@yb&Iyi|+40d>+ JƧPGQZg?V%FU̲7sҚ-D(d;EG%+t?Z f3ɩmC$nG4mWBj2F?:k9#F%\.@Q-cb 7cp9HۘX;>yx3w'Y~O\lbUaXr!*]` k\<=UdH@5z @Xdrk ;m&hdϩ}vצj'x;6-XB@)o$@!v{SuT\kseaZVqE>իzF2a;+,'[@# 3VfeU Ʋ.) ipsS`/=EmicWɹ\f|W=L溻WgvWL֥0ְZvKv":[JTFdӦr(2|dxxP^)\FSMu+.qN9 WmbB0T$Ͻ^F8L<To(ݜߊe)dRj7eVp]îzԭp%HǥUjRPʒIwrXֆ`t RzbHid9kmB6Z޵7C[H;H[\ET [͎{>?=Gڼe[eRXaҩAlĂz[ : Б8I.2_zB8 *(P-p3[@k@)nVU]5e\~۠ k+M 5bLiC; gn$XCJ̪Fp+ћP7dWaz``ԣWK d>|A,y3On J*;5#=8SW,j;8VՕz#i׋p?xqZk+Vl _唃hZNՏ#*ԮpxU"F,*5V88[{akl>c4G?β5 <$ UxSde<Ո,o*+RM3LqB?jʷqۭ3UrH jh̤UI3N pf;]\`\0ȓ%$kwnkXQީYj|**8!n̜( w`Z+=A<{HeqOAdIȦ_,3iӽTj̞9Nil|_ҳ{zh2zՔ0^ /.Oz uL2sz9Q"՝6wʒEkzoը]ߍFQ *jƟ{HxUir:VEF"r99P=k@lyPdW9 \H%}yw6LHՂ`k nqW·zhP\I*s]F+FR0qUf#$VȃvVsV$NO?ut9ǵiiVљcO[D.YVc&5,@v|1ߊF9XoCFt<@qU ^ZFDbHX;vfPK|kùA}fmd'Ȼۭhmֱt1Z: 5 뚣\݋$I) t&q֧Pq+:6zIRs[*0+3sVmZ6G5P;{u2Q6|'kOZnIځ̣*jhе=u- W~bJUH9'O|DʣEKl2;EEQԔ`Id5^k-i`55{}4Fm'Q`J.#$zՖx< S~cz!Y=N+yPk,v4kDMEݹN*ͫy4ΐ:cõuc&5'ϯjƾ庿L7|bԃoZv ڠiZFjɬICjnEmXy1L++P( d:U{91TwL܁Ckz*ԭ$biSs}ilU;y3f1֧%AÄ$'Ֆ0{z!/ZϿDNeAWiZgXɴf!Pq޹FBAk"'~:Jbf9Lɔƙ/X݀"ա?elUh3kFPPXzA#$TZS vm;ZOJ0yҳM?r2[ yM3yc<d"Gm;U VuVH9lv’)*ar}+J) FVN8:uKSa%ZTO% ִ*ģcS5+Y7,ODcw&o gWx֜yoVQK;us{͒Y>Xh[ne8vZgyǁ֭-nKh@:JƎIl#i:/<_rE\wpk'Q`J[HaA䊌؟n)!&FI椸pʠ`)0^n`sVJٹ<{W6$On[I֬s'YW'"lmF\}kJ}0{Yy7,簬|A⺭%B85&]9].:)MXL=wPՙŹgew5xa#=EcNbV.I jE2T4?޴tiTMž2V*[ hd8l;M6e#[+Ȫh*:l)TXiCV?oJf޹0e^t"FO+,*ނ,dTM.$Љކ@NCP$dg^9-K'{N3Ϛki BN*^`Ӵ's[Ywo` F%o=j1W2*bk.8yv'a5Nv~6@Gu\=h JMNQcy;Y6ܮr\I#97AMXsaI'u#3X3*EKAk=d>kggݓWBK%\?~v2:ص\]/n{ի#9ֱ&Chw~J1Zs׊3]­=f7SU`O ݑv9\ Pc$Vew 4Vnd$3c͵z-fqڊXqV55uuHqVO6"25t@D@MȮ9 I&N8 E Z=$ҹF+&8乗pjGT@֛kh>rzSl|#t]xS.=ZqVh$E(D`zfE+# ҧ[%ۖ=jYjVXYW:U3ۭ1wz{S܀3T(Tڂ>}},m$.e dM2"diEy+OsSZ@7Vrwc9pn/97aݘP'=)_VtǕ8 uKKp=DF tgwE!p:#|ĞO"`m)oJ(v"'zzҸ`-s8W6cCUSlQId>j~) k*CN ňkl9j}l܋TAlո(88/kh1Su}1M g>( G5i!5#XX/"jյ`5@9 d !ž"$^TgYExAWaǵgߤ*kreZufgL/7Gm>ag~4$7<BF*Xרq8<#sża$[{2;U$W(ygqJ8yu T. ?³1 ˟³g槵$9Zs׽>FڼUBԂ?+%Yn(ޮ61xFQ҂y ^w{>by}z VB*ID5V(*ӟZt}i-+ewZ@/Ys(i6YH}x|BQ[5%~9[DVPAfj W1F}kӄ3YRSGr:U-#;Us,p3]Wۓ֒_^ [>Xt\F;JG|Qq ~лh8<3swr-0)=qϽNrH֜4fbxyxClCɪg=iJڲFMҵmmDz1)b7 HNu؜qC9m@Er߻8⥳Rb`x[2X֫ۉ$ A?Tox>H258[iUpQLA#BX* 9i[2>W=>E8 ^q 6'onگy+FUd8EcL)s]4P*J:tB}L>LxЇǽoƃ;tLgBI|{T4YYϷZ״|sS[#G#91 #ʼhB:/Z9#NI'5[ĹU\qC,`qd\ݼϲ>[kHgXR6tXʄ_jTeI~T[9#i6, W`>)Lr2Z{)XS A'jX9'cbdNM{TVySݪ-8c瓞[ G\~ >ӑ~ ɓ5emϩhS^B$ ~;Qy)oʹ;Jay[szZun$Le|`5clA Z.@QzUin 8,v.@urO 0! M%I<R##o?ATه U :=?:M1LbY0;t踛qPܻ<v:3R$^0 vBFީ&}݇K=M:R]53d=)BsT|ֵdg ැƮd#.pꖒU90HQ0u0Hx ֫\$:uK,A<6S+ |oZlze检UNON*G- ,",p?ZPF9BqQi g jB:Lm#~u)ڛ>ⵥP՝u"ľEnlSrN2k:F "94۬Dg?K;Zr&C,îsD.0WiU{S1ȧ$5j4,8t^]NAjZd"P6=d$U[և˪& k~XdjzbюqYz>v'Ժ?fUM5ÃNܸg+Vz"6xF=޳/8V&&`M)^Aɩt_/Q]&fbXcV&ۃ.<8K%1[MU_w}XOB8ɴ~i(Qךɽi֢isP,kCV zH<}j Or=*U\<.XzTR)y"'*`˲*ZNNqs+q> Kp9p̠c֭!i65vRy>`UVt}p+JDpd*EgjpyA RXR6~oj|3&3Uy 8]@&q:t7 f^ڴY3 [H>IyTR6>Rk1*Opfndp={k]3~UNd'i`;uRx TA=i9ai0hPOF[==h\{fKgVRʹ~uˈY*ƦR0sQw?uy[bg3ZP}"XrE,O֩NE֥,g&&!<x?=T CP89gzs6mî>Y+P#/U+]J5fVU\&/5K3Ӛp#c\HF =괲p㊵dcQO%aL}*LB`jR\gݍRojM9] vH %ۄ8rkZ!nʸUk0KQjL};psҹqȸIUB=1Zu*G$5TM[z󙡒 J}*{I95i-Wy֧-oqIR{-e;2Vp&)UaT/̐{/`U!O+W}*doOzԧ2V[5-d3\ zffIV֠<\1ozװƐ!<+Pzn rw&UY# ~&#Lzm&qktv_J@J̲#ѱQ[wd}my.$wmEq\yT.x’+-ۆ+V lU ׊]P?`m#mX\lLu7# s֯Zޟ;lܩ0#gٜodSp+峞zS$1@H9H+L~3F:TrJQyS$}FHT$H8U&enX,6](K?Z=l+?Z_\nڥ3q2 ++u>/.879Z"*㵝/%AߚԴV؆8. ՛:22,qK{U &+e*|u5!W?ځUVx{צ)=zGC׎`JK֫9* Q|J*N]*.mSU8N;SlqR#?JN0?7K&{uK&Tcɺ' Vd"6-Z37Jeqr{Q(j_9SE3Se sY1ggDy5ۦPy&jl>PXN*J|TZ@5flE p*t0:W&k8YXqU}ibp t:^&,sZ_:JgJ`e}ZڑTbn1oyߞ3mVa2Q|}:U KOz+Eo6f|VYaMF~8Vp#*ykBX0cVMnzֆne3]L#+-zڃb;ݮ}=)!0d[9zr?–Vc嫶"O'o^j\pQU)?lR INi1*c4Qq_XqTU uC)3SoPic1Wd}+>i H ŻXB3T;c\qvG^qO>8ۉ1R>f j 1uIڃ`Z4d{]Y6WDPtQsWQڸwqqyy@&3kf%/͎&*WiH~R nJۿ9*H#z ͔޵fkGWMag!B2y [LnpzTwKVX g*nqjم6=;ԲlۃKXX3k4-ش`ڒ6AWV-taP@kBpə'ǩD6qZL5ŷg#56y 8隬_ %CMyyP-Ԝ+B[eV̊7ǭhAWCk{[pLӃVqOڭV ݫ/CSjۼ8Mؤ`59d.IN-rB䃌֌t2NkBDYKCc<dsΩ'Zy$kJ@Ǒ^Կ6yUT~u,ISZ/m|Sڝ vyniyV1Aܕ&k&?6BOjBn+*5-3qQ nWlzTs3Wm~ \ *+vvsKg9\VUN17> ZrF@8y+o݂G*6IvTg^1i Ddd+WϜS[۬Qj;2Y6n9-ڹ-JVW, ֤[^i Yf^ީ-\uV9kyܶy=sjRMp:H~ g[;UM80OJ$fu8*]X1MOmZhqҬj#lTKedU%NkZ'Ӕ,=hDI^D3H>juKgvYǎG", $8`F}1195wJb7(b5 L<"J8KDj>BWtK- 8Ty #2x[?4g4#/ bZDKƝsqzI=&nxǭ^[y~C0 ]>69ҩ\:\V\pɪ3Kk6 XXV7#Iu=R ŶJ^S}Mts'\ y-~GC֫\`$iA2O#uIK3֛e=:N3#5gSԖ#ZLs#sw !TRnn5{xy⸽bm YjuoԚ jds[vSysrH@y?z>>|j[OĒ86>;2Ǒ)4R),o׊׺rM+"dvo.$E=C$`2W^>^Ңa 9D۟¢A1f^OU4 |fŚ_"`RejI'kY-.I5K1+g'ҙN:}FèN|U#TAB'zΗGp}ipHT*ӢnaHw1)aG5rW`)犾5XFN0HqRaX:Ʃ]ڬ3>1{%΋̥UGQ԰01Ho[*wxNF[\ zRDc bۥq\=Qctt>TcK5Vՙ8U"w3ۆU}9gy.W .tĀ/]$(v˖$IbRHҞb,*7g\OIbѩ yjiF9GsQG9;ӈbiEcȭbۃ2&1[9wi._R ,:d{=D̃w8D=7gqqly*;Y6>nQrx>b"ZTncPN+_MS*ex֟)oXj[`)PRjΠ-AY@uZ.q׮j9lj5;N==@*})O$H7EBHjvdL Jp$yF)I* Zm;GF]6UdUIVGW*jѝăIMb֔)W'֠{h ՋwD~ApzR-Ѵ%_CV.uV_,=&g ŏ$15Vz+?Uh#^l >*&,j@[RXם_]5Ys)0sR5i?sҢ6b''j.U1Um f?^`7Ue>cK wF<2{bn=j .xӗlYZ7Σ#Ҧ ~ʛKQ+`֮$tW-.[in9Mp=ۉYb'sk$t"@ɴ ҿvX+fqΤqVxY8ZHc⻀"㧥9aުOZ 󚍾yFG+BPrIt:Qȩ-DZ˸Z6g]TO߯4|j{>Vh0Z}dr1TqRꍐb'6ę&o\Ջ`ہs#2@n5ܘ\sur H7){I˨WK9?Zp<:9[F 9銻JXw6Lǽnڀ->~!GjŪKp7#ҳMx.-fLvg䍡bfk|ҵ4=3)S/9nE-m\0: ѵ$J!`=*܁U.o#$Gz1VZbOB vRE Lјͻ+" YOGm2@ >Nzִedk،m]ƂGKyۍ*R]8:zf8S%9Z1!?N1U&V'wQF++ReNu9f `["R`pxI38R]HB3ֲc֝`UIWɐ-W"ֺPpq\^ڊ/=h$ ZjY> lsҙlZu@WKL 昰2.'#'+>6,N{W!rf'v4?x=Moqܰ}p= fLT0yms# K=լtb+dUP ^L`UAq7cKzBNv%]58 ZG<Ĺ̐{p,vN+vFB1?h*Ri5#,j(9\u,En7^l-V52ҺD.-Y?-e[Voǵtk<# Z4a52ƕ U}F>ׄ,ԯ04FjPU80 PΠu6,5Y 3uQj>e $֞2(#qu!ϵq ^suVv (JLjqMd%ȉ x3,t4Zi ?\PZ$+n:5 BqWɖU< |VB$iBj ՘-C۰ar*WF$Xi7L.HoKlAqU#,ID{]O)R'94H @8 9imʌoE;Ƅ*~-,:InqgHV p9w%fBoBN(̪EA<.N쳐xGew#үGlC#N+V*~/T.IW'e!ZݮeLTk\E ;92`l "M#A=)4DjżE<5^"IoUb!gnOS+YIQ0f3X\GV8Y&ۖ⠾̔jklqOIs'ңŪeVt;Ufc7+6xGj7VTdָ"Ⱥ ȮM[q=ſjpj398RiZjٹlv5dfϜӵ6xlF8Z&B:U:>4{Ƌ4 VêH>j{PaJ_Z݇"14 *{r=;Tn"㏥Z]7߭h nj҆p<~8  dަ *ZJsuJX\Pt WlfaV&ӭWT"+uElY) (1.<49ozcԴ 3ք@ьQ5n$KҺ+mÌ`shXBZEP_*r|3+Ylf`s.Z%bM@HWm/ܳP1Yb\qYG1I11L{Tz["9Uigy0āJr;u-&T)g=EOfAbMe,Y8I?3pu"! /<* (x O 18͹Zˍ un`W}zfv}k=NZ1'WVg>8iP3R1b[@i& dG$㏥"nS })H8B?irGmF|@p'8~\ t 4gsF៭6p8R޿!A!Fk3S1xܙ=k'F:85Щ N1od *z<1o J merqWBWAd Ҧ}8pTOՉ XcI/Q}@QUgs1Z7Nsb͔.U{r 5oÜ+[=j7C^qd#U-iۖ/O=+r̤5g+F vF*ĘHYs<{}LbloV t=)DqZLNY F6HܞT^bkb0 GEYiu$w*2}\D -1VYW֫ͧ$U$bV8*#)N.NZC Lłқ(dcTI oX1X1~>QTnpG5+6~jD}H*RG77f@] ]fjWs1I5ry8*3+M*I=]}eW5{K5h jb6Ҭg>i"R0sگ[D˃ʼnU>P巙0 Ү! EVqeV,rw?@YGJvMcN"j)qUX^}B5 +cNeY2حnul+eGJ޹riTZZyXҽŲ1XZ|*qJ0)K5,s85c|`2 6$ pVFmgx5RYvͷZBrTʬpZ!A-!ʊ? OQx8E#ѷd]D3(=kbOOJPq2s)KR4HvܝGd&H=Rk~xWq:MpGcz1еZ܂Ԉª+J=9si>9)x"bPgZi;20jv,c[rn=m?Zhv=bY`,qFzw:m#Ҡreɑr sW5 .^kZ%agx0F:ԗ;-=+Z,kN6d+4 _FK8٣P.܊ڂcq=8 x+OȧC偀P1(b01dxϥQ1KA0qړ,)NfxAW9 kN;G/N*o"䊿0 =`Sh[.H]<{X"G X1*HnF9vͶF*H1sLGn%'bv z;I}(8[Pjp=jV &8tZh$zդEPmYh Q/Lj( iO!Vv *V9S2q#'**J)ZI%O:\bvvǼ Jr/jRw9t*985d*Ȧ[zP"EsZ:t!"l`&|{uC5bs]l !fL`bI qU&B6ǺōF AA5 `$회]F[,vg M* ?0\V=b qȪ2Gr/p{TrI#8"x[ڶ$dlc9]zUG8迋8 3Yc^*;NnG".^d}4,Hr=+j6jGLF*=94y;(^\S@x u>)#VvsVbDNPj{{fnLsV1؀Zmn6֣{ta®*Tڵpڧ5BvSUiJ\ozObk^pTuErB99XYlgG 5^Um 9t[I$qDَ 6C W}rf(;Va@l3Һ==J#4^r 9s](p=ʰ8ziK\ۚ;MK 5V,Ht%>[m$@hm,USiP m߭#jQ}ݥTs>Y.L}jz]ÜhQ˥`rGS1qֿّPm =ThN ?T.01P01PK#bH :P˓ j3K5 K`tF!.YHr.LHlXf_6:Wwܱޙaa"tzSFT+Or$l8($%GC\n *A+&=Gi {欋Cc&8No@Vb?j[Y:LV^xbJO#USb:] Fy7(A=)n0ݔ*vÃJSō3\ðNW 2b 8'Z `Z+t˃ dڄ{ٗ QBriW q]{xVEd\J@QRIYprMmZdeq 1H0}82T<-6ߕ'1TsFA Kx$c3\T1YeUn'`,Xs#&DxyT!JdF3jfݺӉqJ M`Upp=j7pW@H5`D#d*3c8⢖bIU7ORӚJa{CV{FnnkacmҸ0]ȧx}9!x s޺G{r7 Ɏᡓc j亂 Y0<[F@4$!xTfB){%[#s]X{ zWeƩEuvRE+m8hC歟 ̪zbQ"jky%s&wbH"v6HVShQMk\bI giTV'$x1ʓXL25oe[1\f.pV9<` IlsY7lKe)\-Ҝ8 @ÚN!1X̱7QV\%1y7)8*H$*E+1SJC(ڪ^<1Ϩo>LƬ׋ phmm5a>#k%pGf=B\P"pLѧH 6q>g. (J+j)L 5N:sVeZdV]{)try52qX~e5iщ ^*)O@w\#'Ur:Rgnj+~.rTa<κ*pkiجkK К`P*+4Qq1&,B1UbU'vݚ gl{Tdvo4"U:@@ږX|˂{UZӴ>^Xqa q]t8T7,{S-0"$Dq 7*:/iґxK偡ۂ{ӌֈу&躨R޷Ҭ#h9dcmHwH$V,0>i(#2HO q *b}+@qR[9[<stRYI RJM?dYG2}j,%Q*)O1i@("+Xڃl}sVR*Rj@ʮ=+q.ChRm /j94H6;fd0˖W &ivkx(†Id k ?I>wY{Ⱞ2*%RLi֕K49R\Oe/"EM*s[z~>5=pJ0#Zaa^YtJglܻy哒~Mj;rFEEoM0,T;Gg>iG'UJ` Y)Q Ȫ,˴tZ.JTG`U) Lp2CcENk43|;fK!'bj1A*iy`J[Yς]95&F`ܪQqt# MXOW^ٔ\=.H5M4 S-g6$]5i UȬKT`/z],*zӭ4ўr:9ۏjjXQ%q֯Aj6(K9? oqozf28Zɛuδ@ 1֮$.8HJ-KFfl& FxXb6マ+Xڻ g` nA 5pm`7EsnH5s%8kD2zsT|Oc!0q\k#+qVT@ HZ@Gi[Zh0M^N5s,U.#q&kxV Dr7;vk@+2A:T V`s09s$.CG 6ՏC:D0HsU=N3U^)$ljDi1L[bnHH62c=DH>eCZ7Iڑq&5;zYh3<})Ҿt'\PQ7»'f\$-*zt ē֝qV8ji*HqT6*9'81b, lB|9J@{;0 gpxkV"cZ|,iɽ@R9.yi,xP\jш*N3Rқgˡr01\LK/ַ;bJ8`9RPѹ;yꥭ ;¶Qh& XWÓ9Z˅^o5hY.!=nB{$/ayP\Wi_-Ū|˹}륆]dU@둶xzO@#P3`ƪH8l$8] 2EZbOqQ8hɸǥ`yrEU`S335[Hf= Z}Dy됾}[4󬔂3Rܐ+[͕񃎕R<[W#+Ҟ bVs޷pi\vo*b;A8kA9=c ǭ@>Z  Zʻ,01UR;zVA'qi"|JwvO2P^+@vj1;8QxtPw1\> s(j"A<"!p+"dy S$Q*R1ҒkGukG@ z$\*Ai.EI"dvǥP>|G7c86 ە]<9hY2&r)8 I\x$rIŽࠀGw ιrb+%1%(NK a<.<556bbZ\5=*LnQ4;@s֢kFANfÁ6qCX9sO`œĘ}qT'ۚm2 .nT*5Rhw*ECurs] B@aOk £ %S\6w=zzUgdU IڴVRjR(c)6MgjS"rwzܰGZDUBܓ˫BSpzV & au<.Qd_i<YyDE] fCi;AȬ^=*'qКthFp *bQ:%_hWOZ|3rz[L dT4'sgTxx=hde][nَYTzOlIf\sZҒGyܓ=xCcWQ{Vs{$1F {]zסJr#dI$ @Yq۰3ҹf-&95jb9ݵ͸Ȫ7P$qY$+ջw2 ݌R.:S$X58o>iyT`֠$[Q[N]Ap:Vɇ ڕlLONXPxPa9T.y$\ ޢ, gnq&8ZUHNzT689D)ȪwR{k;w.ZuiKq-jid$ւEbӮ6lⰤ&BïjX,emes]-B~U.\g$B#5F[RPEmVGrr`#"Px\Q#Y!er V尸RZh&z/#W=AlugHX#NӖdUmxʸ3VM$tKvknHV}iŵޤ[pˆ #qۛ2n+]-Q@j@Lˏ&6%ksI&Iʴ"#cL7T@ӎ*%IEL128C2̝+ԫ8-J<)-O)4ګ/j&eݴPǤb?*r'TG[9%fC 3qUJ8x%3=*fGII#:9&wF)J!1R$m4F mQɼ=*EV79PL+D'h2015׫=(q(uAN9itED]荺溥m&%mUN39=g?8%~fKʬ9ny_zN M4E~Pj$ =xt9}&5O*DqvmǑV木 0~Cq9MXS҆(OZ<>khSDF ň|cҴ-C804 njTAy(|p On8U@i1P51QRǂ(ė1Rɧ^Hޠ8Xc\lEXw DW3Q$cQĺ!.TtH&4fQFd`H 27(h(>bv$A5&NSma15Xp*'yd (  ubP5202zf^- T;V 4ٯp52H8ٙ 浭+( *;F F'tH5zUE)dC1L7A , r@J㚃R'mү±పcvqCkRƬ|V(Լn3YMsӥUĎ2KcJbRN:*ϵq҈!O[y+V88z c]^b A5nRM=u*OB3HzS!t qL>bpisFySbG5d]De4ֽST&V*]F"'k(}jݸĜjӀTJ@URwH3 :`6Z%UY/,jC\zUIC犣+*y=q3-q - 'O x(4 Umq@V7@'.UX tV9-g%FUm5Z HTҧ{X: Y,2"]>ʈ e,TR9N`ÏJӋU?T1PTJ15^bű#"\Dz*_2"jEh`2 SI)I"Kb)Gܤ$1R1T0VT2]DlgAdSҪ"9sS&;H9bXpGzT"tW9=ix0r҅p_x?ҚK!b\c֥c@ 5W qj<[@$ Ԣ8H#!z)V[$ uO kR.NR %z{)xQ5sTlqg>+mtJFwuUyrCքw*:Q׺{W:FmDXXP$]$.j;XtnO3\`3W 1y#5] kS% k-^|* T`OWlsU|YE5ەj&0R pT徕C œ\*FGJ9a eˁEFbX[Vܴx[Oxn+F_6?:*)Z(3Ӱ"R"2Wm 7bHKj*>^䑊H5"<ꠎ(L3۹db^7dsX:'ܸ=jkT!#r3>^翵h#V9)SSUGf0Y{Oβ@N+DAp9}kGx!GFz;=9W8>j m $}EG8jR2*K&m%dwbzV-$$Q >_zqc`uO׊ǖy!U^Lr{7/SZG=i# ֥ P`yqK@pqRMx"F)~!\.=ރ P$*-[ d-Vu2:j{FghZj V4oPTmN(Ē1An+)*tYyP(6O Tbq OAYZlD;Î%!lgLBpFkB&#<ӯQV``խ+r4g w̼p?6FN=j#/XrˎqVfI!ۅ *>̌vZx8{ N/n00<楌Z捻Ҩv@2=+LIuky+E\2`Ң6ՙsch/B ˘Póc ͛}1T<~ .sMrڜ%sq,)%yǵ^hx*T8;i6esZU֬ejv)lsEMEfA cAݑQɭLqQ6pGT~Aw.&A1MٳֻTH:GQ79V$qXWQܾ@p24Zv,|v~b=+Pgy:MfUq?N*9t*03JpK nMnE05Z| ӴdTqҚ8w9_mK>|V:T%AqLK=dZ$7P=jF= =a+q ¤m8zQ6rxMCO˄ ~tӡ )ӡWǷ.)Q"Ձ,a;iPNsJ s>ZbOcy+㏥3L[iE)5f>\U>@jE`C#aep)%Z\x r蛒mC1pn#PJqrqj{8`UAY0l'Lp1ON cd -A~iYN* ͽVl)4[CH< m1 F7"кoCZ6~(`ڷiokAkYv}jD:O[V SOMQhp@E׆(=i1hdd(BtsiHTo  B~›/[`jTiN5 [Qp=jXHDr)"#c#L$CE1ED.i&lS̠x`pz,LJOE2qN{gކb"ۏjK=*CWDP R#S$]r 3X]-%ccҵ OvҨ]MJKRJniY8ǭO m+B8QcxhBv JW#s}v9# v99tfDŸՋ OjK>թ[yq1ڭtak)zU,6F` o,R;Q/!Җ-f~s!<@Z 94Kw {՘Em1֭Qۿx=*xn 'ZB'G:Qí@e= }۪mbYmaSoG^*t.E| ԩ=1x{UPbpjO(A.n'ڪ@]3*#OQ^X݁GT$+>kXSxˎdRdkAb?:igmr#uc˼Zt%ڡ;u` Z]cҬAxci!ަDSb/L28bÃTcΥZ[U+HՋ4HV.:V(X{Vn*yrN.2 q[LxST< V\8Utćdd} e-oCCXMAKYvG:;92zT7ʄӚlm3@6pO͓V`L Ƭzm\?1=髮\s t7 TvP3ץU 998n}Sm;8mLrGցuvђv[y֡]Bv#$}kwӍO0 j~*2z6H>vE1 isuɓ fM3M.vP*ŀI"dfǽVj~ӂ;ssT#V˔L0ju)FVy ڥKHc[2"@1NM>.vRyS[ܑ*Yai/)YpY" GJ8~uTcRD=jͬ{%$n~& TiJ1k4;ǭFwzر#ei\]/Tf%) <Ȳ9SY(2zuI Nj1w Ӄ],qXL`~muj2@ X[0ݞՍs[WUʞAbQacH#v3% lX\UiJ  +)hTyvIT"d8>7K䪀4C+d;1ӵa C1ZV!gIv P UnSåYXqV>R W<Z` b!.=)0xqa!IĊAbʧRrzK!U*1Z*Z1n٩TF3U]S 1n~t"#hڳX犷 0NõaX`v+[M#F Ocޫr 2=MXfmk@Če3px 5si$Mj62 {c/![$TvB67_z ա /a+*JqҘd<J9=d mXcP9?VYIFxZmҩ WH wν0kcL1_Mh'zRc * |ڌT˷$tW`M:f$Y;pj0*+Dt<Ջ0xM{0 \dd /m#"'6z{dkVR t)=1[M0+.K3Ȼ&^@S Ra4XuOtf Ik& +QUt8Π:p JKi-xv)ɡԜ\I$q\mE8EPqq4iYmWtqһ_6#ֹkO"Mg:{n%WhAzdžǧ41 u D]} Pñ2cypGӥ9[>4-)g4sD,۾v6jWr 9)u$``֚9 rFNrF)E8#Jjd.ҿ:>2ITU V;3x l8;#٩7f8U t 2 `jSkU-!GFojۀ=TFG[#']]-`*C4Nk,L 㚖C#(S@siL31W XwBc8+h*YZi#7dtX&Ge]M:i$dz2x1X>cY,ڝG}[ܲ`b}/q%$ǧ5sew+Ԋ,qYsR:cjoĸ 2G>A\UXࢂ;ԖfTz5PecU GtZG1XΞeGrӣF;Zl`H")6 |E:A=Y 3j[$FܥsԊvkRd)gaӽ[Y?Uk@٩%~3)ٓm `Ϭ ^ 8jTbz[Ke[V-^0砫ex]d.J1R4{8=ڒ.mT<{QpBH$Pu8* QHTF,~bb0=AySQ,E2yvxkCKc#߭k:d~l qSŻ9Sp A85fSBT+>ùޠqiA cV eki407H.`ps޴[/#T-`5]CGcQо1HS"QRΠ lȽmzUZ2N֩_N#pzƹ=b]Uyr[Cc_u` @=)+ƸqS !FPf!dB[˃ #)PMA e,v =R{#֦L5bO4why* }*;,۶z֚Z+lmo Շ\sa4)\֜W_ZY gTqZV:[JzՑDs  tf?c gҢoZVYMFtI@Z.21PysEF)|hk@ 1TdB'H1;!$k2z+.Ӛ$85vATpaMps)Nb O$s$ :V1=2{+ Bs =$PF{A  vFj݌Qk?\.}#GiiޣD"lQ"jլӆwi, V=7t#6>1w2$jEeY85~I26>㓚ՆPsި^iiSAc W3NG 3mVdRARk*uYx Y˾P8h1S[i8淠6cجˉ7ZlH{gҴؑU$Y€=N+J4Fp^x(Jt\(^;;GIX3w>",VhFӚP|cԅ@`3 ֟*Say{&AQKA;tK>CҲ9JSW{qV"rBSȁZrEQ9 U-8R[ZݑqRg^B+ECYS,O5==FzEM'G4,$WbE;G1gk`J4΀棋Qc85~ٔKr##5j=ꭝ]ZWQ`\ٱ٬Y$#9ɧZ 7maQQ\6LJTp^Jj[ve#q[@{VQ%ZZ֊4E]uURp swtN1Va"6PqTG Ցq flibvips-8.15.1/test/test-suite/images/cd2.2.jpg000066400000000000000000000565371454007373500211520ustar00rootroot00000000000000JFIFC    $.' ",#(7),01444'9=82<.342 u }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?DZQN UK)0>^ %$ޜDjE 4ܲp*+.;# UuRTo$VQd5RM># \UixnQkQ#OaɠIU&]Fհ7Wt|V^0[Tmjy+kdrS.7dm0JlI+z/|ۇbG\ Fdle \w#U5U"o*{զ,YQ2sYwQIr6_'q{H@5<# Vx_ 9Ybe ի=}+xp1* I|pEYZfr9f-iܪ9jKvXo5f7]ijV jw~k*YX_j؂ !rv5<W;9Ͽu:F,Fj=Q԰ ڌ^&t #tIJѴD g4ˉQ$"1`\Ucp.PF1YI2僯$RO)!* )N6֬ `vI(V Mqʩ4I8}U=jtYԖۏ@,e ##s܀Vt{ f3N}`˨f,M T",9l W 3]픜t栻#fxoVc!U\c5oOR- TT^5i'¡ X!uprzjlSP4~U edy$qZ;8F1XWw頃j"p+gE1$b40cun룘F0jWy32IWfVn* @3^/B+XpvGNZ}ʁ/lҹ)mnjGYdqP]NP9ڶts \ + QYZ`dj l63Ri܌>б#W׆WՅʁK3)278*HK&sRMwWXtEF}\`bjx XMcV^xfr8{Sm]bF4ՊFe^>ՁJaBqB0:DL3ҷc0,c¼ݕ< hKd Ѣi ld]I eq}!\VW⻍ l[Irsvsbq0xF0i?{TY"=jԲ}QFza݊S `^K7.kJ-1$c[P0Fz9ZWA"Q p@5SL$\dKrm[F3KU `V *{覺Fwl,v]pF:茫+)iA V$B MD0e#"pۀv10ʢ203S@1Uːv2ǸUl". *0Ѥm'*!$5Q#8沴C$kUWL@| ծ!ok5fw]HoXXCg Mi 8UҘA굑][ڡa8/M r*1ycT$18K;S/k`z+V=db$t5nՂہ'cVm{|G9Fɶa]v[*?3}txVYrwf#3=q+np82}k#XRks`1ZV~1Wp%eHz?j1gԚа$`5 ve*p=kXekյ%rN:m-ˀGz֕)XH)zqQEKqhRR!VZ@ai}Xҫ7ԨMOD=kEN?#cؒLB~J̶cU} 8֒g94 aUm$/_kfe2#UF{GW3(#9k?iIRܡF3JgXO,gku=逬sYNX8. 8f\ ׷6N9KGz~.%-y]N"KkKdRBl֘`UV܀{;Hm)O`V6ɸ9T$4o. wg%&Rݼɩ5eHP'+9H"vہԶc55ֲ<1ӭsM09K|5niJ[``qQi?95&x!k|> 9zct[{FjBĞ2Ԓn$Q"˶'Z3]EѩN8YMqzkVbXCy;`e@Q@v]"hd*:fN!jwsژPR*[m78Y]7KҲ+)vͨ8\;f[`B0N:UZ!G6mݜfߐ?ZKqW|1ǯzΜ)PΡOLc0Yv). H楈|ێ9Vjy dۗFk" Vi姘sޡq,q֬nk\dGZixoo&bRV]67B ӭ+Dޢ[eg*pid?JƺVu`1\r(AǥJ)9e.? >P3n82K~5an#8W-9bJрJK+ }*h"A8uw fK``q\jKo)J\j7vLWE`I$>ЫRDQ͸W8P1YPGm31\xe< "rk48`o#t$rjvǸ`dV=Rp)U[ ZPAwOYS,Gs Uϥb%T{Uϯ^@MQxp\msam*]TTqPƻ-Xҫ@O+БPۍrjxT}kq Sx\NzY jyZ@s*C8*Ŕ|U[-v5m;Z܊5* 9UEgi/lR08☖$ {qti:ҺkfInaǭNJ㎝7d`R^JꌮdIʞ1ٵn\բS'ژbU [:<|(榴r1֩귪+i!;^ VT V½ϗxA05조=-x%F*XCU}WjJVE7Y&r#5w&8'U1M"bAz Ҭ_5皞bT-|}"'#wpi/.D(UqYv%#<[KnJh_`dֿ`#iF@IXt9Unt!w. a^!/GjrɓR 8@oAH@N8;@7-Hɹk71SZ} -y8jGf+{Gn5ӥ\c}d}iǖ1ԗJv{VUqF ^+4f)3X/q,2zGC6qfgYIy`VXB v\>c4g<Oy oND̅Qsڠ?7i4RWcӒS(IJLdiиvW3Q8+ bW֮ #ިIpa `U-n#&L*}Br$b jqҫnMkN`#ڙ),IQT3*)"b ֥[3JHqP$Vmä{yK 8hٴYDlXN?iYDr0?(EdsҬ3hݻ*? CN#V%ď{1ݩҵlo8]L@Qޯsw YtO=TX5\LT$coZ295qە|`[뻐 b1VVH.)G5mNinXRHCj'ڸ&kbIs%QnS[p^nry(\}*;2Y}sĀHې\>e×5u`i5k4M$ƭܘ[ddycUHz`2kZ9bexvglAmB{SؘϵP@}K.ЭU쀌Tur1QDΌ61Њ۰'k!C.ڵ77iic2EID#=jw [rYnj2]եy!,iBbk UmiZڎ߲\30z鴻62}VS@bx"Bve34dMYqdvA}ji1Uʀ(&PAS.cݸXfN6.OҲHNxں i89uy\sڢa1D.ch]1l0dk6 ~`k-7!JԱ&{ԎخX pSu\L,IAȪLv#[>=G^sO01<[VF@:WWiPžl@<ԗz>QL[v?@ǫ"p*Kv+֯#drڸA$*(PLHOBk\/ =̾UX ].g 75C<*ԓך#qg3ے#֚ob#rK!ǻاZFr0e$qd;yEx<֪9TظW9y:]0>ӊξAc-Y6Gq5 sKZ2 M%jHgt~U dDBǭXF1ob $,F ;QK$1 Y0⺋k5 j r<рpjtCu{TH7-s79"6%S8\{֞g$~u^m1as)'xt0Tu1i"`u{H|*ulhQYC帮cBi 85XR|@B(b2* dATO27 kYjeV`POo~ c#H,V6HFTj.o%($vmҳ/HUK&-l2{ Y Hchk=DGwҦ:jS\8$g+V]ƒ҇gpv;+E]xDDn> \#մՃFrVgK]F#QTҹbEblȣ@5hZ$pe^+ǎ=)zTZЃQ8nu,rVJ(SF~JMo2rj|]rO5uhCcS"6JcOcN8>j?cG9cҮۂbP}*3LSi8U;GfKtLs޻ 4;M6)01vEWӂxٵITBjP M6|#nR6ޕ^^`Tq[{ "mŁ`2{жX9T7 c ǒ5xǖ ޱrIzTpٙWCgE'+aa[Xw*10$kh8þVVR@ͨ,`޲u7OjM4ZkBNsXoIJɮX2_A1} t*D*Ʊ}%rsvv3+NJaNLn!Y$=Vc\=[1+C8Z>borVeژN*Ο(&/jr1YwA Zm\[2ol5OI;7SKn8RQE̬OCqŒϖIS=hMsڕ Ur?JѦ +;AJ 2kFGp==랹qkjbp=麅؁2#I5 s5mG⣸2 ={yUи q$}V9ż_J Ziђǵ"8@zP159=Eg.PI<-<}j2c5qv/b"kj#n}*e5ux0^@Lj>-|q*Ͷ1 >o*vnSLAUi!7e,'t!kw`#\q/xr1$IAֶY9Z7*W!x\ޡ.ҧDBj[քqk>a!GU 3N3#jHZ\2"(@PU.9r|9֍ĶhO56A SYZFbɧi/v6\Jn3VŽ勂q5n)ێgNG"MJEY/+H V6w!gJ[hʩڱͱq^-wK˵p1Ր*GֵT\w#CaGjI.0561ӊ# kt=3P)35jĠI&S|<{sQ4 T|J!sYhKTPNGxs-$7*8P BwlPu I4D1Yp=kNJq {޳=TbM$ u x–= bip1։ÆQtb\_p.ڪl ę >cV0]4ӤCӌinK)%HP;i`Q&3]M6pg_B7E!ǘkYm4%j=n8_ \[ڶm-"y`و W:_;D+*I.Z! $Aڴuk.POpzN .Vqu LI !0+ dւ@1ֶ`Bh^ݔh#qX.=nĻ"qCspA31}jk{ ?4<1Sqb3TR3W z|B6?sɭ(pJ0M5ݷ88F.¢jIST'H ݫ!.N_Zײ>HTk6T˃"Q֬l?/4bE1зњ\c]ȸ<8RUsg'NOիتqS!W0>a}Wm7Cu)MGjuUZd`Zpfvb[X*BFbYGJ4pnWjrtIxcn#55٣*1E!?zg &F>B563ڭ9cO+4Ogn]0ZsIFFIghF8(;jRlqL#1NAv,< +'ۥ$ʮGUEsJn֡6/ճu</wT Q h~p Xٲ SyثՏ:?:(5^[evBj[iLCčD#ޭkJM=]ҹMyi* ]1r A!bJhH#%y9h/ ـTsUoT+ҹYv|c>HXm`1RlSp 2D SIV+whp=ET*6Ff82s~Y]V@ zS| O=kLÂ8FbcS72(8ՙ,k{gkU5;9'V$ٻӢR82ϓVN:(Vu s+"iIGZ`@0= DҤؤiZ4.G,aZdhwpG4 çZRgPA9wD|w$XVS0P^D PvQɎ+R8b1 C60 `z-n0xM# SGs+aJ󌪁RDJ '*qU5 I l /)osVy\WcפHʐ3*2$+D8unk&Ho[KyA] mU:/yt2F=hY&u-MjǧLdQxh*xg fmM7ߑV$P6 {+dեD.q]^ʽj \zRLRy9\T A<@# 3ڮہ`zS.A0!,֟#72MK+l\)R@dԃ%OJ[21U8u!*8xn Vsb>\f4q)m" k2}*7T pjH]*\leIi MrJ=.%Oj/$,Axf(䑸թ9Y81J7,vAܫ`Z͗/FkcKZ@akqљI=6$.092m[ w?<~t5hv>\*v\q\љT''JֱQN= gmޭ 6&FMS$.JD;w`V]f(loo®3FZrM$,-<0>IH)# V 3Eʄk*Ku0<RXn;ch\O倊FjBF3N}˖z  fNF&!;He$YB aҹnzZO l)Ȥ1PA"mM!s{kRK@2Lq.) a=BawAOY'cb;id9nn(#5idP0qMi2r}[ڡҹ[n[%FjƸy#]:5%H=E1N3W8 {U[Me8 Icl5xaI\b0 :Y{&*1 L*+qgjSkbX0Jm_"E=yTm4pL˛hW%ҧ[PJ޺E ҿS5d~Uiiy'7ұʋZV,H[# AhđT/m 8-CTi:?<\l<Ŵ@WZԩ7PLT>G"gLNͣyC{su#/+5j->ga~Oa[Me[V9@ifڵ#V Toc+d}6=9$c'giǭ*7pz{w:ڠs<֠dHV^=˷,1TCc>' ^e9Ҫ uzNaEUkN r3ns$͎onCOX[ot{rX d]r3QZI#e[A sU*hEGw7TciI. tj@4lsZIZy qRz."R3  і/p+Jaˁ5b?*YbrqY7ZۊMrRT쩐4T.I EV8k'ldwK&##:{o#!hnjd=(p t:uS_Ϲ0Jghnfh[f@ϔ +A#F= ;\n.EсTfb`cq@ fiFݑT3ao|n]zTPUE']N)y*<֖ RX,J8֨HL aW+.]Ɽ*Ӓ1NZ;-Jn'O8iY:j9SYwzGZ-3J:2k6 s8=j%_ 63M+qƢRՋfQ0W#[:t/i.3hFք$ jIaY=: tU֫[DsQٯ?zڦ#ic8?COw`ֶ adQ}֣n3 $F?]%ppXS: T7`{K-9n<{> @jVg5 zVm#R]] QV@QqJ8[tp+& +hUu a &Xk@O+ν6ҙhpbZjc&1UqRjM-dop*ij)~͌`S ne*ݽ}9c@jNh5|+.5FI+TԐ.gaKަcVN.Wf5T O|7̋;P[׍ZʬHtVdgir*;Kζi'.sִӜB0ұ!7gy-DԱꏻI&6 =+QoHnk#f Yԙ= hcjt]PImNG ` kkaJn7I`j[Ґ2 v;h)?;<k`Jy3JJ5%AKs/ VAc3֚+lT~9&_.,/Z#yXckjD´v@UrpLI=qUedI wb=BഇK#5" TgVldHPnnjI0km5P={u]mj J>aʻsՑ܎BHRv54P6Î~^#'w2H|>7q%Ű7,Vϐ=F C#%;ZR͇8AtuBn#5u؀˜W'ʳK }\ ;U. b"O@<)&-3jҠX5$u?x-^=XE@ A>s |h|zWUչpP+[I/.z0Mc70Ug Veԍ<cREtJ\qU.ŘkAHPnj Ƽ9QIXPH4 e =RF<qև1R ,k[pڲ\.p~s3ٵeظX?h:V<ִTLajq1Ցyqэpy2hcf,@"lLsVx,U/]4 *@ׂ=>8.X?B>[xHp+6|Zk8\ئG΃Q]̲ FH k[)#ٞD3ŸRID]6c^*Yڪ}7VN W[98RGc%ġ+#e˅Wm@o)pҬK4*fxwtx㹴q;1pWOoK%Tw#.̽3SiG3n?@FϸeBGv$"cMaHfMɀk"dXp͗kRXVh͌ f-"h"*{mR{6 #"V=sE6j kJ6V 2k^O*3XRiɭ8 nG8}Ǜ'tTB6@V}2J3ҵ+>l Qek,}8i*1ؠS3U.e01FI0zׅWp1ʍ-:$)2y5T"Rm=ywb\YjP X6̓Cv$g5$r*!+DiҐta h2ܚwVS,f2³eR5F*ͮ3GӢA0f,|ʏju(ҧMN2?LTw:Msky8A[qBW-a`I^+[Oc#:shk#OJeIx_ͱz{+hی1645T`}(RE`5#N =1e+2R42H s޺<V.me r^9G<(V4#$ggU Nr#5J0+Js8-#2ɖO;˾B]=p8szcfB ֵт:b+.2FMSՏoۊq(G#VkKZ \O,PFҷ#@#3FG9Z#I㚫"s\6f8rOJ&Mn8E=kѬ @򕱅8dhȘ?*:n!Y|d{u uD#E>O8xٙ[yj OzkEzͅS·>ΈcFfێ{z;7zkyXNm ?=KFQ}%ĹdQ]>sn.Ol#u#*}a9+N7W I܄UB0?quLG5bX,@XVw y|z5]nbPXھi`7Ce*^=j+BZF->,Tɬt)'殴`j݄= ⵈ j¾6W5kN.GZaḥnZ[V.mH2) &.1Y壜9 sYڅik5UNOziI$Qr2sVpz@ *`iҠWc% _`$5pl' YwȬA[ګ՘tImh5䮓4evfkeP1R<'.>r[c#piΤջ;v=@A:p j5y#]e=T7$X,5W u&=q֣ N4)\B.F=K3q[m($}jܳ#g+Ef=z֜RS!2kA T ۂv <Ӯe '"LZM OBg4T8Qֱa[ֈ#8zZڶg6Q+6F*kd$ vV`aO˜S s+9cLxڝ*59;Ey!ikL)^)2V DhE[[8ʂMlibvips-8.15.1/test/test-suite/images/cd3.1.jpg000066400000000000000000000533411454007373500211400ustar00rootroot00000000000000JFIFC    $.' ",#(7),01444'9=82<.342 u }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?X5x@ܠr*#G0NۉrmEZT9@QL=!SJ$e`U dT)Gɞ3PRbBjtr~`+ѭ/~u8P'-ڜfX WTdu^1Uv\sHW rS@98GFvՏnˎ*wQړD^#5}޸R=Tf J}cb Rx gI\:\ŎqLW`x"$${aa 8殥"aXzܸQ=х)1Pj 1y F MqpIKm :sRdg((1f A1EV=Z>\UQ;Eҕh9Zcl'hhyyiiSh"Rz"&xQ̙ S! Yfi)s qYđe~mBTJƒE jD:ݡ T(뚺R#E F;UV7ovJ5z TڤbWi9U{h,8QUdf ˛u ̘$,ĖYZ$E–=J>iWc^^U(HqCu)>&v Oqxf10?2O?(9ߌm=jzb.Iyt1 ,? P)b+05-x+^C2 ^)B[h08)$3Ude'@:gU:#Q3ҕf}j'jY[2͔=>-H$4# TmAD2$xC!<}k^۞*GqJ@qU9$SGL3.3n *9r@sr[>N՟ۗӊCF=5(kSP@? H c݁D*\,p2k:65`kNےQZ$Fъʒ[gڴ,S2X:{C"oP:t'"G=*YKћJ[\x+e8"&Dp1Y_gkSMa\.AOXyEU,RfDȩ~rD YM6KU$ *Th QJK˄}*CpTtK,3ҷ$\[++SOm݌VݵgZ&ܸFLS!k*y^a"o8Hn*)"e#m= Q9YHRH\TSWGA[_,0c8X1CHsڣ/O£$=ѷN}*sH*Ul5C'rӖMї}I6j/ӭY"3[GR 0]Jc|1o-Յ#R} p!jF1 7qW%a dNqH&%<2+%X6{RءfW 1[@L6:vz85bs"tZǖXsLVqqeq$!fCc5a5Fk;1HT@s N\۰5djܤV6 8aSfS̴f~5YF,t}fdPVlSy lL*R /8Yn8 XHi,2QRG!8ӞF*m##ƭT,IZl}]ET54i#0V"#V 8p'ԫ>I$y*֖22I $g}C+u_sPZ0k]-v#ҳl`I&D9H€*e%HޝDd3jGl"Z%1VgHQvm,_(5Jx.VV5kGh[rTT29+\8֥X:_>foms ʥ5Ӥ`t,8 +C08yg  9"DTE$1dbkݒ´-m+X{X\sT峘< u1*eڱ6WKm,cW[+ҹ) ,xӥd[t5OVO1_<@3Q+[DLF _"Fr1R{T*U@;P6oGYڽA_ʢI<'ֵn1Yv񚑈oLPX`EC#0jžsUZ ֍bi.lFʞ+ >˝߅nO- P跙V6ϥ^7)b%Ӄ]"q[$akY,NV,x>T+xHbq:*?yk"%9RxfҤKe#+N! gޭqcM2D,A뙺Y8ɪĤǵ\[fwWO,#"Y#8bnɦ\/AM`殡eڦ5 N0DkBi#gRЕf ǵ\=굎R#kWr:Ucf E!V&Hhj#d[hW,YO+SNI5,\{UȩMBH!WdFhUcRhjgVNHoP+m &+"ty3U߅YA*ul"8*Ɏ& /9=i)g$bY@Tx+Z1+ K)9mYQ*+^{['5-xU.jxvq'[Nm I+~>LRH7QCr`ʾ0zfyév+q" '+:=4hD Ջ6p2f-a@GſjΨQp*M-wt1D%=+dcbBH+"MVKK$-cq(eb0qZBAZVvI W8@ZѱaKr #)zi,SƯ O\Ŷɲp9vSs)HH$YKLhiZAfW@ X¨{THBRrT TTL6H_jVo']¸9k2KDyem䍂Ga;@5hJS/SdS`fĝLU' Vq@3@n8Ui,ER z}3V"cd!MDUG5)ʊͼ) W5$HϥV]:K51F {G{=nQWeXhr"!xP=ݩa򧹫ٻE5bwUx1TXB}k%"a.AH$;RG8cR5mR),1ZJH?waRݑ9F3SBa35IJXimR.)\AqNhn{UQKKm ӀTomUU}#gHǑ*NI+\OAN%&|rVEoɩ[QZRI ;$~ aOOz%c!AQIZɜ⩽rn =j R9Zi=]xj6WmZ }]jZ{sy2.r@⡒Eעn[q:.EYybG#QF1V80c3H#A8ǽVPX5/*G>~ܣ>$tڙ>ݸ㊧#J؋p:Q|@Qq 'jj($gOnj%m@=aiI8/TlIF=jh#'X`EDrN j&.xR+Xy22qM1m=M*}*2aHGʸ"5eF8d>wF}Xܐ6U>^*1GWk!ϧj r ! !'D>*Qo'Q\>?u1اb+tx>Ab3ɗ8ۏzx|437{OGiL7dUk˜~T4C`u9TdOEQ$m5wҪ3bC0+Ja*¬=zR m]Xf|qOl)wx% TwRV-Qxݮ[q zT4wI}kYWhZnI$b\yhBMeCvkoN vAx^1YʣV1JSuH1IP9\ꔈ szj 81VSx$S 3ڙ ۧ1T)!{WYliYG{U[8 !@ȭ%7 }*̈́l|~4\D`\&n+WS6  #\>Tjki+pxIa2D3("ڑoјE[Oiuh7nÜ(jp~AҡmEK)$N"QjO*J~si,b0"3_ʈm3RKDiW2pqlqL2=i# gVP }i0F SV_r{6[+XU;kLtZ2gmDcU$du? =M#_)e^j#+:0U= ,b=inAgaxMhj))#9UQ,?lzԒ#78&/lӔrN1JbP[B ԛ|$`VE堸{W2Tݩluۘ͠eqTg%裄l 1N(]qg}Tp l*+1h u ` KWv@R㐮Yhe%*Mv$h֪G1WB~DvO{;TU|Yf>bJбEv]cu*8b1$ϭZPlJc5fAd#bA0!(֮D9YxF*d9#ԛۊlܱ8;j-@Fp$T=EXt0˼ZVrorBb8 zk4fL6 ̤+*jo8hSr1l)1M|T%U n/7].*Hb7SmmGc549 B VV0M8ܢF>%m4Z޴Dr{ThF5y7F*}Et֥~Z'=i،PBF+>yqQU2񊙤<*%9fR< =3XmjAډl;W#>1߸MJfw{bwJ:|h rO:H1j$b!a֡xqv;ujr *4XXwCEU%;4c1j'ǽP1ɹX/Y[XB23Q6cUAؔ`?Ka(9#w֬hw ,vn;i]\-㌑,SMq[Y[Dwz1m$ ]*ϸHlؘa>kV"oj<ϥli,%zpww&bx⣔⢀K+,jbXW?5pY{՟@V{"223MoO XJӉFF:Us]-̘9 )w`Am?0&/ouU$ ЋMY~L GZaHkV* ő'lڱVcT%= S˒jRc84b69Vy0#DӨ#c*eROdjC 1=j =j0I1WJ3T 0g9+V qWX-8]wi5n+g 4|b;p~^y8تU]X@b;ӂ4Rpzk dFS%°w󍐳; JD嶃WdSC3dqUPVGX6G˹qn96I62FPD@A>ՙ5݀ rTc4ƴ11w*&TK{rh $TK2sZ .@w { *m20kQy'[sǜiRV#8B?Cn*:t58]U*f ČkV10$շL V6 9D dqjtL^TqA$*?0c[HF=U$ m>Ve@Y{L͇fp3Unb.*7b@b1)b`z$FhIH=f`fwTmq^mq5ud{,j}@mg$w /^i$60jYd TA#FP) Fy …jؒrqI|:QmՐޘ84*JzBGַy˂U9ng][A&-  G{ ʘ|8ۉbFq\Q zջH{_0P&vL-7u$m+ҝ{΅=k8pXg4 9W'+7m V-(@`IJ+SIq66[E6Ip0MJV<9]qzeObhP38T5vHpQ,PJ-$IV (qKy V^%]Je`j@@9dٲC!D?1TVs*,[.Z0@C\m-`MtV~r=*;bw8A#)sY|".2gjyp;/-hAV!/-3Y}1\ܼao$08&67t|ٽER#"nwKgei @X/A]&[Y ֕&|V^R:b,zqS2otj1bPzR\S c1.g8ܑ֭\ ܐ1io#ޫݧT95>­د}kV :`c\B#dJ/5)T0f>yka$S@ n"pҩ'3Z&W1t,u6H00h 5 b&~:W3u,B|կ[#y7A%kJĖX (#'KX5Cֵ6m.F3~9+M-(N74f8{r9QW}9̎ *+9+! q+2IIJ˲=sP$5d;1ֺM4h_62ÑRbH+Mf_@s>Z<ɹ]E0Knfb&*<ҴB4r8G‚03N3۵Yȩ96Mzta ):c ҨJalRe#jNvUTS@*ҧvmҥ}Ees4XMQ' ⥷;[wcv$,:S+*FMPez-`xjad&{b w"PS;y bYͱQ֠hYMl[qeHkJX}N!f#s.lϭ,w2׼R@&[)sڬJv9*;8p[+܍C\]n (K ׊7*Ĥsg8'|͙?ZIXeL8[ [p&]M$lJ-E W>S]=Emdek6O1d#=*H-*PC&i6 WWJ"98֤Qc*8TJՁ0⢸ 85QVc" JشI1Rr1QqJfyZ({Z2;S-YLX,˜ {R˃j3եdP ʭlX5Bb21`P[c5U@4̃p6!IJn jk\LⲁMW3"mU[HkjAι#buh5rPsU&7U#9h\1ڤu ָ,RE w.})YW8e$;UDPd տ/Usp1 ) jϺ6lLeImFBqn$gS0G#eX b(:sVa#P=:5pZ/!H[%Vu&@ՁDeNXڬP ^1r*ŲaKf#Lp&&=+AX.:U{$cV9Hڠɗ%)'زB8*G{Ӛ :Y~Gv8 W[ BJȍU&d$ezqTd5JA uա'8⢞mT`T1*!Oqb VcWA} T@"=[#5l/T. (zw`r1зsKo.ִ,\Q*[AZ9+B$  <"oABpYbq[|X2ek&19AV6S[ʧol:XV)ػT[yL:pn:U}>馻NB\gTuSU檈%+ڬ$.@8pi^be{8&2Ip6E1U~1>ivKnp3R\U$»_0t&pr SdtQdj G6XX֒E$X78kg ye6 jFNxyqaFwK]lKӥ9t1SDH\8Vtc rqDjq92ad rO01H:=ǻ=({mqJ1$qǵB3v泮 N6ݙH~um1҈N$ !aS*D,UwbDč/Ҷt/=Q!}f01yKK9JI+9\(1*B%1 Յh~ȪqU㹂+FVݣ*ƽu8mRiZl\8Uv2h16+6|϶P1Ipc4ȁr?:RqU`'mڮIs bܷjϸ/\{+Z{8g<*6~ ]ڣ*ҲuڞZuy5[ݼVw}_@kjBgWGw" `8/:ы=)f +B29 gHAB{Շj&ca@#D '#b7R_-Zjbg2P(0 x;OTW ՛f&=ǖ֧Y G2lac,ܚߴHdn+|P3Y80l8aⱵGef1Ud3ߥZ Lezfdo6#iS-ǹWֶA 1Vۻ#QH0@Ȭ5dGPqLe k>+R:|(9VQ78ZMEc"(=oܞ9PIDr|sޚoq3k0 M[Y^OT5kiR2IV>[k~R/:0Eqf5ȮZl'Xc O2#~KGtUַPr?*0FӂjJ`NWp@ۊ@<gҪK\*'wcT#}i- $Jh;=kN/ ugdjPeIW0F[n1(vm0k['5Wj8n T0*I(`sUk+/#V="a.)2G:䪑:e[,Bbac4Ǯ+6Hd7~^ǔzG~"'g'#5t*f!bW ݱ*`΍֑XNuQs[Lb ެGsR1j۶Xf,gt)"-j]NYk pW V}͜sQ[(YGO~j3*1 )Ԟj;GR3PJ&T(qb&`3V=9" 2T&Vbf^*מ8 icz%SqT.-rxڪeb1TkDs[FHjNS5~⢾Z.11U`&9r1ڶʅ8ڹ,@|)juN8ufBxɪJFNJ/WP=ON;b̅R1j [90 8?6*LZc/ T:bɩW,nSR"N:B2U2t -\KƑ3Ab<ڳZ-O;U렓ΈJM)j[sX.kv&GJR<{eъQ*Oj$qs)ajHgXe`fi ڤ?j@Hw3U5XjϪ'\tm!:V,DځMt`8͋|<֨,Z9rd%:]Eϖڞ(x3|d5bITު*#6Y)UXɎ &m'8 ($Cc> qNQzw!dҫ\B8#& DւI $dHW1GT!;I%\q+rU=j1\2{$~sVs\ivURNq[cgbY[^n3u:m9mZ#Ҩ1f%  IOsJtCd?Z|$}jϖ [=)XUH#ӥe- ǎڥvZ4NqjյɈ`cޖ䐼48ÞH. w)yQ72Tʦ8?sYRr7P+Fez譡%=3WtzW@ڲu A#p;W%󌖮' #N7w%N3ǥdArRM}jȩqjձx M[:t`*ť}j=CX'Ҳ琺iHBF@=_pf؆p=VLvgVbalҹ\Iubl^ql ]q+5Õ>R qR8|*0PA^O&8U18T K*P-H-rŗڮ|ZRR0r9͜88#Vf&X9@_9H-P%TeNa`t⫪#TH#?Zc1JRwv|OJDv_֝*+ U6Ӗ tZ]@HkbUa!֦in'j[:&pb*T Ib@$Tq*`qVbx u7<xI֐ X9ԑ8SP3ǼI kE92b+Z ag7agNv-Čbpd۞*,),˛2>z49"Pv߱M_jxvu gL& oYփ3Ɍh]SrQ?hMraH6ŐA8H&VDnnI;8Zeڤ`իY$⤱mrEm(OJqR;@Q:u9ޠgYhj$F"$S,18e= F(5vLSBxLvTsҔ#GVr#*%NO>Z^1T.l ʏʲAR; ֶԄPZِEW1/18WlDόw;ܮ9ebނ"_\e'q 8t0{Eʀ&#LD vǹXdV5ƠGQYwyFOJ sR 1c Ԫ@e#.*[u!Gֵ`k4 ?JpK_5Tp})cѳm=kv uK^l ⷣS5h~u}dc#UI|=jl* N٩(ҙy;\[\޳$),$T1F|V ܐ B`G]vO))å>Or*b8)Gh'hAuzS;W54kŞ8, J`RD62FzVE&3.pdXlU5IǽmAӗ]ٻIϭ>/ch֩]x(mk^S_j+)NjX^@cq[@dj72ubp}27'𩐆Pź{rlCjI,`s¶`a [5G-Q[VlrVESY>mT~ٲ@<SH?.8SX і*xV X)o#30c+z+ `pN~k͙HPJl2fH&,@!5~ &Y Ɔ.)A E43 uvFcj޵ A[X2R-H~tHҳn0ִL0Ӛa3ΞZ5[d|`=S*?s3æ+XJӋ$=kU1vP>T3Zs~cPk6؟79v7DiZ?cr}*ر eZxU.QqMyȟ bh6VԒ  U0W"gΠdKiI`Aȩܹ8#eGм8#*c 쐱95<+@n= B)Q!Fj1,`%G! /\ *1TfU}hѱ=)ۘ [RjriMǽ[V,яƺ.A-Ojܻ`-9_-j 9;ҹ=ۨ N)`K51ZoьONv,xni^M޺DHUTrW A2BsYw.IR4fb4g9Ej[8Z Y7yq5+WGi#۷tiiFjE63!}*[]ҭ'sm_8T:j20faOiF!8#mbq @?1=*(سE]D߀1粊%lVjoN*"#;Ck&]t5ca* wV#g"LTEA,WH<-HWj@5.*[I! geR23Yڒ+XiTm* |'Ozi#R7fծ\tf7ĉ5,*B0`_ߋN/^ <`;`FzUTջkhwhˀEO$n8Zs[8.*u)"f+T`VbNz 5?勎Iз3M*JW=YQUɂMq6[+іyT85 ԍg St0b'YquPgZzli <`SJT5$2*v'i&E4q䞕jJBk$haF=]*21Kh"3VQF:)ɎvYߩܖSr*28U.,c@=*č2>VI#I*SqQCn)e#J[u'Tb)9E#sT.&]~ТˡDzW3qcUKo8oAm/7.)lC,PC;ASڦhZDNd9 c`VvX湋"b]}:d/>n)RO<0Mts:)$z'4yG@_AWX j;F8D 'TX+ԓKB d֖maAiDQk%rx{Ƭ+I@s]f x5vpc'ctD&?goquœsZs?+-u*ǵ=S f^\6-:WV+*1ȰœX:ԌĀ QjT dwAf 5P8VNOVL*ǐ3G,{X92@5sd!bF2 dqpz c8(J(#ϭG$Yw$8>_E6P V\0{0o<֥̅P4)2AZwҭ@*N;W:]fܣXpQT bU6Jaj|*Z(>RX՝j[IqtcvZ0( V'rZV0`ֳ5?1 +wEk&qp@#F+[Ovr+&SK>SWD<{8$6ob1Tn&*8hG7'8ojC[<|dtNƳock d5&c+qһPBF\Fb[9q # EzU@ۈ7 ff;*cW-ix&W“zVMƋ%Aҭř+h0C p]v'TB V"ֵbrS$c>qZv"6G"sڵO b4ɎٔU~{Ҳl@V}xIktK~#~;աau4+(+1V2K~j,WZ_F{uPprwOT5[ʭPvq֪Or9:lolGyE{6p+&n Ȭđ>OOJF1OO1=1V8<5_H3]]SAKwA1SƀBj0J {T70)/v@K]/klibvips-8.15.1/test/test-suite/images/cd3.2.jpg000066400000000000000000000532141454007373500211400ustar00rootroot00000000000000JFIFC    $.' ",#(7),01444'9=82<.342 u }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?f36M\8=^smfZ:օbO98$X}REh$-*Ϛm^O+ xLZn25hH7޴(W--5Q"*Nj^L# vъPwk~4CY\u]i|H#TD3#b2 [뵕,&#jݭL|?*" pG#Rqlۋ*J+ j4sտ\cQ #1>d9 p4VV]&R[[3tVB 5}+:b4)2IJk.eksN eyUjc,: ȑ$w|^&DȐXFCn&G^K>軕J͸9Nˇ&}>o+&{o|뀸sLqZɋM8ge As]q,QYڙZ4ʋA͌$Aہڪ0AϭI8zG$zVPz!Es}0EaY^LZ*6R~FiwNrUi]::B* jUUI?$RUn$ݜ{Uyf ?ɽ sָZLlm@:ofا=G89ڱ9Pzs?Js7{P VlAw"jڴX@ju+O rG$b };#HcO>yu&p=kS,'4ʁ:2X*հ2>hV#*Ӭ@ՆX lfk[yk}Y[oz$Gymy<֚Y@U\j#'9ݞhx-pDI,sXM4qɭ[{sV#ԄXE|(d8YGϹFkPՕ]䚆?jE*ӊ{sҲľl$֜aQ8ޜd ohA4 1Op>YH\Ո\5x'֗RŸ6i1$0ooEXyc 88Y21E6`֌NN+7TKoOXs"y8OA{SO{\ بbiēlH8n/CUeuVr+ 5Xrm,{ـB߅G s|#`q[Ix`sL5k~G$UӢ>$,q+.i;wT9&Q X)5hjJha%PYfPToAL}Jg9'N9 niuR;,Is.ՌtA sH!dbH;0YҺQ8隧w|*J`Wl7b2qvU1R\sqY!uݍz]RۚVTo0Afď;qַ,(oZԶsYvTpL) ҫJBrygb v{ ykR)#?-f9"-ӶjҁRr#YWY'[ʻ?uhQF=+:QFGT^W$ Tn ܧ&&µ!XI]&UM 5s)P S5pj$#z :}*[+_׵i-A[< skI:Pders[ SS۱ǭc vN5$P1R>T"D#޳YrGji n_7ǂ+TqicEG=2: {b!u2[ǂ9mSl78$dzܢAXwI&(Hmf=i|ݼ{Tz)rzζS<ǒ+s4AU2\|Zک]%ƟMInpQZ9p8&[g 8ɍO\W=5v,LQ%בVvBoj֝J P{^}).@ Ҭ;cڍq˻(9z/-28oR͹oz\}iMgֹfʶ'qLW}6 n5Dq >ԁ~lsTz֥ylOJ/a_(!JY(Uy;Fq@&늦ZLjWmіnNNMKk>+_⳦ؓư '5 9vm$uvߜS.h*{Vt&0KsWmw拍lcQƛkGï9"'P@76jXQ8Bp*;VM,J82({vG8':(E|zl-bK)DK9,kJ"Gp} kI<>Qc;V֋gPu ]U$-c5FMD{UCy,Gj!n9sH7r*,6:VhNA"{DUjšE8}i0D֫Aך}?N 5g! lцG fsOt a=J Ipު"&T2ې<֘ԌHWRlN TmoOZ1=>i9LVމ+8?OzxxϽf31}Nb.j=ASivL{ =*O:| c=+n k^qQ jbT֫ܳ1 y^^ZV89aϽkG vJ1½wrҀ0'6@7vpsE{88r*D.Ó9T`֕[cU•ՋkGU88N9*& ՐukomnKب~r͍Q }iAEFF <+rMB|N3v*Kb:ր ʨ{$  >&rU#cJx֬cye $[7j9'- RFzm)&*!9~mwQǜ+C$ .1JՠMTMrj׵[cr3oQј³0SsZ6)\,x8sSI֥aOݎ+^ħ>]G&c=8#%:PߎjшyY15#[ph*&[aH>Wm6ż43O른VWQ)6)oGdvbr_tLV`bIo"1qL$@(V[:|)'ֶHa tđ\Ěc] -Yzeœ [b>.XR t= .t bv(I4xGkӢ晩MgQ=GҮ͎ilfH%GnJ}19![{pߚy9M>Զq,+UXTd.@=U !<֥f֬q*ެF5+L('D̤sQϐ:n9U :\EAҵ$wy#Y#85Tc?ZKY- #ڬ5ɦI9pDTJ%6JDI8)]¹ j*Q[N0s+ZO*0 sZ+{ 2188mU?n>a=Y|=iҐGQܹbX:1I{VuD|\V+;F\n,yk7=i[#Ƥ4<%y5*xAbZٵqۺ`R7dv]Vkv%Y3})`u&T3jZZ\ܖ2=*jO<˸t=0*[m/;?riNze]% $e˒sֺ]>bw>0:dq\Zo yc 4v?5w(.N+͓{9TU+4簭]ZʔgճO.)rsqJ(zŻh[<~5p<|)9P$&JI+B>ZUXn /]I:T˰@q~$ԣǖqG-I>ϜR=sS(E+Va5Bol*SkF'm \r+/[Kun n6I&{KuyVW[=_1H2>ԱaA-ؿm}*톗!W fhGjydC\9Pj ]EtҴN &w޹v8R$dOбʷPzk;VƩ۫pJh⦂ 0qO}2U`]8kBiB#OZOFҬ[Y_T @YU*bhPzK3Qp Y5Rn\ fvg^[@?68"vF$L~5jݭ2U9IV܆a֏@zwx8qYi8,;W#UH3\яCu4Q~6$H$1BƝ$MwNǒƪO3(=xI.qigv><VlcX\FniFAɮIS5z(ЌlT,v@ Ƴ-YWe^H;SmdYn:+H#نKՉ _- #ڛb) AZev7fs RX!>Sf]sk 甙\q5 *8y=|֦4wq8r `bvV{S$EqZF#0Ǹ䞸W4)<H~犮'<ڴ,4 z_i)hܚԁ@ p*y@g,P1!ZC_N8׵x gOrskUezU9a`;U{Wtۨ0@DrK(ȫ6޵me,1$jmLrOZc$E3+FV'Rힹ4{!RZ&XCwܗ#'2jeb7ݲyp"9rT~thI9!duL{UME=cZ ڸ=*XT-PUK/e|cӌr4w qk#M>pMUPX*J45ۤ1sJbrjLrsW|p*QA,.|ZԪW߭RfyS:>1$wV*ź<~Гa<}j\'<mFe}kv͖+rLVm@=k CI)%U>eR8MbG5MpW$,7J3dS|HZS :E%kK`0U9T1ҦyQT;sG!NS)2R'~)';,Q[|?ڸlsH5^/czJIfy[8#OS>cQT56(Zl EuvBV\*jrT\n}O*Y U ֱ=u>`^Dɂ u ̓ީj >ҳ+0^‌` g}ڣlVt٢s1ҵ=6%i7A 2qץm4+1܁5s'mn5;Tpk?ipp*h#=G]8r!cߥ#M&E^భhJxRI8۳T1eܷ83K&zT'rx5`L6gUsUjF*VxҹklMR[?/qjYؤ@*6[ F=V%UqDsRỷ!i?w0}*zQJ-‘&g*I!rEsP`:U'H[sO’{M皧h)|U_hTYi5g\ȥsRXV\&c>-[O5g@coZeގ\&?xPGjl`pHYKfFd*QRI*U֪3y<֭p-ҽ@fXcf=U[i̒st6Uʥ\J N`T.f1vҭyrA'ZfVbc\JM'jl?N#ܻ@-VU,ju*iq9,<)R3S9MWSVIkC-kgM@Z | hPMSi#8֥ġ2OJS΢i[nK8$B3\N}HF mZi!,kVy\UF[Pc=OoAg5wnj6*oV#iUʒ=皹%e0PgqE&H\fn&8;GqV佩BNGSRTT5HG< T*jz'&VA u7dvSp18"qqR--XV^EL{s\Sby5aj~qWդp[.;գoj8V8-+pg`kX Fj&Z%95zI1J MY:R$;VN'&fÑ["y|ibS;;xLAO \f?QPy O4W 1#8P],yȮ;RF :h>krUR"Zϵ(!'>Ϯ)#r3 (n{3Xҏ?Z 4*w~T8i Y9ݦJuO?iAYn7.ǭV('ӊu2=RkuIb%޳tRXs[h )ڢՕBh) cm.w:~=dVs*4|M>+ۚ@Cg_Mf` R өRu?N41$vYҵD1 %琎BT7@z֖J')c"FM3ZVF`g`jнNz5j$j$)f tHa.SOcLUXWڋr[5#sȭύ=O󩡼q{,GvxU Ƭ-؋$NKTá4+*ӢIlNdH緐o޺{ E.#RҨrE_1ڪIW|sR"2k6K75N =5]\l'&0kNS(6N=*ƗmA't6J<4˻13dt"SMt{Ygj7k.rVWRJ⡂;`kD^dq H%`ii+T,zջhpI{$ k>Hpzn2m>n'=Y/AS xU9"ބ1KM_8ոbVp=MFx=EW{WZwBsV,݀Gvۥ1zT v ޢtܸYWP֨ʏaTePN*Ja/S4;8N[<^{VE!1 AVj:$Jw4& ˂XkTZMS-JI`(N[ڋ( e,ASNF*:ս?RSրsfqF^28Y4@ŋҪ\%&im$VBZh 8 ʢvWF V34$*kzX"UTb2\}kN=8"&n )Cv^HyFsZ5Xuv`F $VkO$Va\|Zm[lx&N8#œj͵,^TӡbT\~TJ< G8dQ sץ`I}_<0=2R4"۟zT=u+zF/CP .IRO`) }bۀ.IjDx@E+@"~LvWWSBdRFr3KbZ1x7vw6ҁҪͤ6F9%sr.zza%sRTEoMIxGv_rĒk@yǥqF.sj TT~3k{M14ۛ!m8\_V@%N>܋p\ֶE> _Yhb:vH9u$+y=mi,rHR:(r+&;!G:}ӓ59Y!@Vai.Ch^TnnVKe}j¸15$°ڭ}=jxdym_"8mhtuInpM`'gZ20I5Cy03[<Ҩ\ET${{'VeוOY3I&,)n%TA2 0>׮0E[Pbn^T.Ip=)2{SDGdU=OY{ nِӭ:;)["mUspqOt!2442輚IN Kۅr s/XڤIHYʐkץ*'4)=VE^}2d|dg )KU8Koly\>\MmXp RjDJDkFzӗOIǥ2cB۱Tai=E[k)"WeFpEE=Ă=IaQ̣q9oE<@o655:qӥdܽvvGVd-A mƒ曂0Z]pZ#F*9 ^ݪX8xvhw|ZEۀ?Ju0 UӮ±ܹ )o*@'i2$KtBP-ӊf]8D;Osڠ!ϵHVbS#pqZhg9I1SDTZ"14zjtnŒX& PP:R@ @@q6 V\jMy v51b٤He8qi,D:־vʢ2O =kUUN7UkA4dā屹*AlEwk&?"e#ϿD9BHWީ2$ZӴ(OJ}J)9OU7XE=+JBCݫ[A*%K,qӊ_Y~ucpxXlE'Jf:d -.H<={b$/ !+F HH8:o>Ȩ| +mvd!u8Qy=kBjI-g-jEZC60ib[ 2ke du)&\.׏9sqH)V@.O &[-QM XcmD< ~p$ T܀HG}i$R{TI&82\g]s]d0X4DX9id"b3ЛM5SNHw}Ue ]@dj/ZH'-5 zR*EԦRyj+ْUv"n|ujO ÌvL݃Q,~bQc 3qz|bk&<ZPtM}n88T7A/?][<xr;A7֝(\E1\ {V^v(hT&P8WHU\BVVVO]:I[8JnknUGJ&Uv}gI*w֜򞧭'5ch( *~qn?(V^#SBcqL_vMG!qҖS _j$˖];I#ssWR\z<0Aork=ct\µ"gc 7;H6c"+!\V0Sҳna(M-i})Sa'Q%tW:Ĺ=OJĸҬ[Yp8?hWWL*ڲ8yY$˰zÜsKy''[0Q|Ո[kQO$5Kmek"Km%ʝos% {{^\JTu sqKZ;U*ފaSyjS>W)_rs^!PTֺh41 R{Ԣ%`S5zVmVc 1ҳ1 buvELYV\:Č x qwzf0c32޳zcЊFBbsz#{R@BgXY:E8%Þ⦐78\,ZE26U ع )T3W'z|=W#|0:p y7zȼ$UhM*Ԟp@fMYŌVӣ ̧ǥc,oc`rEL2"IXLaA$k 4VCZ:|w1TIr$b<.kؕ;Mcb]T6JLܑRi']5dYUzԡJ+ׁL c5=0D6HÜc xy2k:B?J˒PyP #ܘeKp*x. KyXVmq! T+|$Q$gjp'|2ӜR!gsCp?‘ P?N'+Vx0y`ZĠ^+O9PVbt ^(XzO;ű`cU (,Ԣj'ךX<դm \<C-ҫHR4y$ [L{7,N*EH)šКeZabXTvhyJ9vK ~lsQ\&CUO>TGqڿ28 jF}@mL5mQ5Byi7,h!.y$Ӷg*rCƫKze|YO>]ǰ1Z& ?<)y 0##`VE'ZT=;y sSWڸkXyP^l{aPΧr5ocqZ̒9SLfcu8ʳ ױNzkGd+(! ߭ '{Ew;>lW2A1T^-F9m*FJY .}kJȀ׭j$A87,Hn>3^byj`+\9U6۟MDr9ǽJPk~5,+zBCmkB&߃*F0NF)i£x*YqtHoZ RnOV׎TtCQLlp8*H$Ti$sZtn@Wehԑ+r5cˌ=i<[ad$o!Fs=j`V4$Ա**ZkȴEnj#qIcNG1:2*ոHrJJX7q7"L1L_Z,Zܜģ 2ݍ +ي!wTIiϤh/! p+J$kP(E :tMg UN?&ϓ7ԡAwe5,\4w8G5c~Ǵ1W+T!qi oټr<\^/2>jgmc*! P gh̑`Ҩ@o4`upY޹&ޙݚq7}*78\f]˴5Tb=OlSfUA* 6Xmǽ?R3U[ <31˧H\Ʉ.zm{V]|IK17׫X-cX@p( 1U BBG$+QAio=V!uLMK~2z~F\85;К* 1ّQ gls>qM`^/je~+r}jK&T-%a k,c<9sZ<+2|ÜT(F9ZKn 0>A a]Jޭi׬M5dZEN+Wy5LE\G c܍Yr0'.`bƷm5yU~uctO֟$H>h0دD]nֲm0cT8^*Uo@XUGWyYZJnO6"*z _libvips-8.15.1/test/test-suite/images/cd4.1.jpg000066400000000000000000000531201454007373500211340ustar00rootroot00000000000000JFIFC    $.' ",#(7),01444'9=82<.342 u }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?#G50F+678W?wb1VO͊F<+v;`bd UFf%kXE=UHɐhC<]*67SD G*O#˜4Dql%Ș*?Jz)݁80r $Qlqea:ŏCQK *KCs51_j=ĐHzRLv㎢np ϻ G=MHœO4Nܜ{~U]H"`)ҡ%UnڻRȪwq=A5jb\`#23a֚=1L]Jڜur7 ڔaqSA[[̎a9uڂ91LjA78^jhaS.MhAn.@QUe3D*s~RWLZk^*K4!&H@ nnbM 3{ 0pFi0JΙ}9! [ u(+4Xy1[[$K @HzUqTqm@ 6B:i/wW}wdQ4ڠ3 峀*lvj>*q6ÌPI_Li2OJm `5*94Q17ݧI`ڴHdY5NFڲ"%⋓pF~N5 Uc<{EIYd2 ynjXZHq]n VzLxVj2} «k:][͓ #r\cg_kۡZd&aRd9vwN1nY[U 9qV% (qO²ЃUYdf|G*A#"\4d d،SFM>䆃+>_( 69 L2.e+d ϖ >46nXRhr*CQUkoݗN->knr: I܆qUٙ]ҵ,* $1Qq3C[Qc`*L|q\M3WEc0j+$qI>YAK94f#T;#.V(I/&qگ QJEqemrxKܒcN⣛Gq̣Thn'm6M*2? EHڳlV᰼`/JݸG'R&pȧln.]ZT9ջ=9W[r[Ҧۅp IP]rk`,i)ǡwEaȌNkUc$0sˉ9T`xL bȯ=jTq>uhUYi6T4OǽClG=L3E]i:W95݂Oj޴0EkA<{@Yc5o QQR 9sRl'*NFdF9g=jE9L7zi҅~@!F1$q$`V{ξiq^EWU*qU1;5< ʀ244Gn%e:RB܎Ս -w+3}R(%Ғ+eF:T ``Uc#'Go X5,Ui` i#Z /N, V[ƧJ [( Lp PTM(#gᐤlL 1o{:TѪ#&$.WKd s^~\ga  zukfg1\uWYS)C _',V4w!74kVB e`5MnǭYXe 5( 5RdZ݈̚ܠsYnZT@r0k[0dmR$dU8wTeYEhJHsYr>g< XUBmPG: XԌffHip3W3_ 3XC5q{f .2 *z G/'=bQm3Beup>̠8[#G gO6k*TbmԨFIc)&=EB[rW)GTv:?gt:a1q>t:e?8"x'+PEH6H5J{$qYS%=)E@=+Lx,$zRF*ӌ{5hcrˌVcUZ! @ Nwn#`7*nFU[+E? r*َ&W9td[ϔg+YOl7.}{߉0PXUYpv%8Ojւ,FiK ʒo$ ⥑VHCXԣ9^|e皎X(lcoSZVڬW.E^KÚ UmqU՛;6ҧ# { f\B|03M tqe31ލ"C#>ZOd$p3MSZqҕqҹ;ccTʪ@CC8Ys"9VyZ.I*I& U(P͊xjaHy@늧q{ &8)<O1\qD6*xj+ӓLI$CⳞ#oePvPޫ 2{Ö 0Ӑ+{uP8AlqQ-ٿJ:M95d-p@t(6AA$USpz@=<ԿdU^5V[V/cNH#Ps&j֭{K#9*ንo] >xS9zm~uHcZ>rmF9U皶(6Xd89jQ dw>FɩFAA $ʠw*7OL5jSnި&UPg/ҠX.7+ S}"(L5v DG%QFRF<•P:VsޥQ.ӓZ'o>nJW1Sd1⮉*#O+Ǒ)'W#s)CtuJ1e噂Os]F>dVĿ!n1T`&I2qZon\j xɧ)za3o$^b ,{s׭6aKNY12* |#*O3MTs@SڪK̈Q=ngf0ˎ2*aji.ثi'*=iVUsE8Q+ϽX ]X©Haˀ*%UL& [6y=M@"vFqUd +L^ȸUpHii1 y4%oE},M#j0j#ƍg5bR7?1SWLh6{\W- |20=GLa3K%ʌssQC.sVjq&rq8X;l䶀(k6]R4$UcbemG j75D0ǥ>E Fd"ESߊpGLU;XW)ejv5>vV@&܀dcޟj@c}j BFF~Lÿ51U;k;J9*xZP#ȓu5bʵ*begTX cљVLFﴸ+ pVu֢oUKSp)D7 &xW=}]fd Pic#x*wˑ{֜S+cMHӵe<[Wp b`aTq6FJ`ǧJ͖׀*#L`P7(튪!{`OJd\EW0ŝ8ܦ2j\ճS}"UfLÊS83QeqZ6F0Fjn*kt1"s)kVhmnm߷U3_D m" BRm~gQ`sB3 lsK8[HXxBȻhQm+WO ҒFW)FO)\T>(Yzո{=|񞵶I#5v)VBI/jżn LؤTžC#k0T|A&sުW'5v;,u>NьuIiC2WKjPXZIJpcqM0@ V6**槷P\> V{u'`犢JI |֍JʼJ{KV=Ҵ 9ܡsz0 gF9v qC8EkF[o} #}i$ه}jsR e֑#r)ɧ͂LNv4n@LPВ8ۂ PG@ѤIVR*FSrI{(G*Ԉd~U61i$QҪא*OUUdQJȼrȬ{!d~̗̄9+Uހdb-X%@I 1TFkLY@*QԦұQhe`ijQ!SJcm V*VdAtcY}q8)pWX0Vtټ܎2) C֚yY-ҩ3ܐʇK$y}3[P+ HU$@qh&3ڴѼ d {P-K ;f ZE&s"!95Cd?ݦ+Ndb٬cT-pW".GnˊɚLQ,Lj{yvbK: eۿީ4 V:%xmf*q*'ԣXq\I$ j \8䊰8`v)>BF*17AJqsPL~B? iv`4+qˮ&=85d!5#)=>@U${"TBp* fĖ)*R4dWOZcq#:}fW9WthzƵ&8\&5i@xUƶᔏsXgQbTB2RwIS&MV3rS:AM>w++ZR<`ll"x tI'U2r7/VӞZH˸QOCsɂ=*H⨢:p>_QU)#!Y3pS.$Ӛ׷GZ1߲*<ӟS018D9v,SfC %⧒J+\~O v+,6;R*aɩ&8ZǗۚB2:1x=+*dɪr"='2G1֯i3v+PWV0F=I"@ M^4*ݭ]kNA*xhFc#$8?9n*O)G< u5W sTo] ʦ9k^ɝ'U8[0>9{U$Xr*h1Ҩ_Yt> Z-Pc5AX1r03ֶ| d*PsҥYOpaNŁ\,>6 \VwgPteunvs6u7ҭjyv3ғEȨ<@G=9'qX1$gs8ԘZ 6f<`3yqdseek6Eo0x`#ޢuLTP3p{ 27ˑ)Qԫp _cr6m:#_ʛ,V/aT.ҫ@r(W,zTrI#ӡiy}+n 6_:DpGMol|i.<6VH<ͼ c1Qُ݁R8lHWSXwWGNT %d5{ +YCiڳ}ֺ8 Jpz`VEv X2EhnfFrSme }}+KM%b,Jc&#gMт1Ylґ\ɪ2E< q@@S&«JBqpʜ2M#m?[~w=qYڬdꀌ{BBC7KČL U4,ﵫ3"9ڷJF;O %qK%qDS ҪMDp+{Ukr`OD95wd#4ZŰ}*aZ@_b(PUXS'޳bPG u(B{ #EAS'i6qެfQki&o4Ō Au2Kdb%2Yӭ0Ɇ qQ'зBڤ7oe{ n:zn.}*TjA H8.#t$(j5!-]@ \e63eے"fUvĠYB.*2rqϭ]i@g56Ӛ{inVr$f @n*am·ʸK[Z5ݽMhj +x,5`l.*AkAuiߖE.*"=GyU?Vgwp)4"0*Q $g$`֣+MTOjٶӝVp`412jX@ O=x+:l ݊úeWnX qV m Acj>_- 3`իkFf,@jtH1j ST6ta˞9 UN;SQ4|ݪ6eI]yR.H'2.qR4ѐqҡH7̸椑IK G[BʁAQX̠քsFfT`UsL^ -;q4!ǨV@i?6:vsS}(=5id%>ԾW15zI2^ydhr;SB=jQh6ntd mOJ=f[5֛r*d#@_Z)XjҤЇB@|z6vQkZ UhBj'Ck'N ~xǭI䓎;Wr8eەF+Wzu(c3ZVJ5*iw)pU &6*b95j\3[Tq(+{}̮3alF*Ec)DYfH G(Gݡx\@wc#57CW3XMlns3Pr@'T,PH ҹ V*>o%XlUb+J#ǓW$.G$b_T.61^+GKoֵ9"*?*5=x*\֝n?t9h7qi,1{QqC'5\@)UrGN(u n,%NUgI17 `zVϞIBlֶW\f,b * 8UKQ8\e͛elv0Xf"dA%uW8 ]. DU#Zxcڠ;Z%hՉt@{V[f>sLc6ں ) ˓Ҧx65^K9Aj}sVd)ڡmI $ sY7WCn*9$dD_6L&8{eETߊcNj?*z3b@"`N=)Ht昃`NEB[(0FF$bB(?=9H )g* 8ʝȪJj)fOYMIKSZx\`Ͻ5HrHM\Ӯژ܏jsqZTN+lQzhop=GMD2-Hq2cJg)sjGG:nDO-b0G5W4Y=*V; ؔgT6ϭg&vsI,$UJH$3~m4T5qޭ@8}Cz~u*qhi>Tr1ҡLgl68xR_Ӡ\;k23Ҵ5@2L` pU gE?{qJ8(P89@|0H3XRͧB"=*խǽt}`R_"BWÆ*D8s֌  \^MqqNb0:UINIZ irȥE{tB>hm:R\Ѹg<~u#}1a1LU8%V(X4.Z3⠒0YwV;fOk28Uiɻt劎BSh(@Z cU#cO%,rsO- 88м?Vm#JI tѷqɮ-U #ˏ9Ρ2FjպUN:ʠ<☓ǐա@ɩ(,X«ps{3SKdcM~Qޭb =kR*Ƌ6N:bNk@qҚ3BAlG4+!}H㎵$oc~ _2k7CyžpS!d_qZrpƯ%;HjH^Cdb'ݷ֭C ^T1' qTR8q$a*+6ךu1 ԭ(/OCdvϥ2GAP\}։̫4,DGPf$H 285it6:m(kZk3Rٞ@(P]<"Pm=+GPsSX5H>I>\.+:wvƝ֣9=(FsЀzW "\*++ N0m_pxխJ ~b1k*GZѭw%Ee!Ԃz[z[4bPһ8f4@'UzLS- V\-',3ZŹՙlӌ"Eڸի[ 0! ~UքqR3Q%tL*X#SyCS%n! )T ֆ Ywr4Rz՛KzV;S^UFUFI\?t{ \[dJRTZpjiMtzr,-1[Q2ǀ1T;W+p^mQktն@ Ss5mΞg$fE<9 ?:*ff ^N1Vp3Ұ/eF}j 1TnwK`})+CY\JFj{}@ym2=j8 %x溍9㊸@m=fCIĊXՃ,kk/XmQs%K(:VtU%x.*j%HǭV{r"78 = g5瑊1SlsrkJ G' hBiB1'$AHOS=1NV 䑚r7aQJ\9e|tr`ξzXKi=_i꠷Ea_j˖;Gjf;,~c3ZzGZ׆5V;sg$WDj"-F@sw2^ϵy]+IT_1# 0~5vU'hqRdde\bA'* R#NVmʓg#?Z[Es5 L7~P2GsZY$  Own,c(a[dGopM8c+NxEW@b8+$YƐ*c'+6ʑȭ d(㌊ش(Ig5Kp`08FZZ6:fQXc+c5ey4pLGZÿsOr@iM^9B{bmlJph !Qڠ­?8&mJ zTOc0LO1OEPF;ydA U-Mha=*W̟+8Y94]Gႌ":@\^X5PS`gw5~!Bc5z,%;q5mnn0x Zkl,|t"nlW5ߵT}*敦Q#=6B j[!8SfJ7U+j%%3`ă[쏔Jʹg9O#N 5f-gLȣ˽ܖLmVݛlzT|Z,.[G7S /Pv%GXI@ A>(`3V#~3MB2 a1~9>`3C+ NiI\ _\@ Zvp֛ ccZR>ncoAvKq#Z* IیZ[ii2Hֵ;VVM ڞj:~m 1/;vH=Uc#*&LS;, cU [CTfTǽC"j- YqFjEی}.Tɼ#dj"3X҂K zuvFIm68dhx Jz: tm,*Vd $:&I3Jws]2@(P8 )n:42[ `3Wcw;3ۂW ja;UIKZm'cu }3#"q˻" 02xVXmֹMJ̡e 2gӽGQTOzǀsJM+ZkLa* Vq?Z+8#`ĜdzոbAey tQ.ŜS!O)ǭ^F=ڭ@&&U Œԩc5a#UJrPn'jah$F9J3I0^3S-? ;ux4}gւ*?;$?0'Y7\bkݮNa]yҩgU bW ]* "6֮[F`zmb]-ZH$f$2SY *1GZmI ,+T 5^xBj%`T:ԢN93HҴfSjɐL|+{eXbX0D`@4BJnX#C=T޲;2+o@`m22=z 4*iQWZ֘tȆ?v1QM@¢T>Pb6 ⡓A~TD!tenڴV(.*=mKaUjTqHRn)7qxbY\1D0Mg[9a\Z1UƸa;r1VUqRތZȖVUq6y\ՋXᐟ0*ٍb0cZQ~FLg=SV(@c,ca7F(}jHֺ[Ac8WrpnS$^1YPxAX{ i"P:z=wp F6mzԶFNr8ynOniAq9YU@.nl*i8vڐv{:1PͨG%Z Ee40߀j <r 0V_}),g@7j3vnXlJڵJ:b$1iʦ4+21Uiq孰cMi* 1*@4f]el[At2Go!tߵ@$9=ͮ} hDwAյ?R g=Ts)R M34ࣦˁR83 TRD8.1)JRAJXP)pzTB1JMvxc) \)"WT4F84ܐ8R '1P^/`Fj3**ݘ1+cj튣"1|Nʕ#Ҫ|dqګ 8$ RfӊX4{eOA]-4`ʣ=h%ypVE jƝ$T6v~C: Iq"_*c&[ڴ ޷XcN:VE , 6Fd\KI)TG.)D ⳮ˞5HY9#WqTB*pc$c89*99F:{Y=ҍ=@Aק8q&cң K:zԪǦE4}qQHİNڜzl㊍ 1vHJHQ(]3  N) b0rr*LUf8HFLV#RF9a+OԼ6b,nZ¸tN{=}$x"ϙ dGڤ?Kkg##lAG\ Ͷ5ZџN!ÑRKʁEqCOja(ك[D`c{ךٳHf|S5BAG9bc$xݞ1U/1E8jTøʓ [Nb+J@L{R8Ed8r~Q0)9-j u=5G=H"NB0>\ve89 :Pp |R$Q69B})sMf,q:1=F1P9|:zT&SfLB+G#jdHl]FҴUZd xis`v@$qWEc*1$cXmV%D8`~t dM0:: D'ʲ̘p[ ^8krHYS{We8Hjee 47\jtR!JԣLQʖgi3)>7̀O÷aTʬ*9)$' Ul.n) 9qT hH7,կk95uh><`r08>S_M28HqX313ZQ5[X Er;#5libvips-8.15.1/test/test-suite/images/cd4.2.jpg000066400000000000000000000573011454007373500211420ustar00rootroot00000000000000JFIFC    $.' ",#(7),01444'9=82<.342 u }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz?H\(dU䑊sx6);p* U1L(HS ޹ֹ5I$jͶ]@ɮkF:Uă Z%ĂN=*xI֦eq<N<'9f81U`G7pDSP+ i.Hś'AU[~*- uIZ PA";iۃjؘJtmT\;&*&$o55Š=w$\3yҳ$bp#Ҥ`lqT88PHZlG =ۤV+ 5hV{oRxrH~GSW&`$E wI;2k[0k.|;VY71ݡFPOҸWCkRJW=q\v :T5lx$`L- "o.#ҵpAZASO[WgP5'rgOcKpǝ©]jji5 ,zQ_LF3f-0Y6WrU.7`dOb\#<~TFTZlrne#!pF:Ĩ9I88Ui`c$đ=*ĭ['=2jdF[⪴[vA'UpĎ|q& ®8jKn+|GJk54wJm^ E?UH'ޢӃ c$w=es^G;csZu*#̝5Kx!)$fjƤ\-t@_eJ5KrG3ڬ%r!JtXnؤRf[جַ:85[O"GLPMr+>m#Ul~˨#\2+Լ6 rwVm6ô{E݀Spr@kZܬ9POhFa]1 W+{dq+83ONjK{8v:ӤCT{Nʬz[NS<(s]Gܤfm-xk8z>*{.rf8#3A.XۥE#_M!9,qMfPpF2Is-j@e%r\pzΘ<]-͊|$hopjMV`In5vzs\Hk Y-ÜXmcj 烁S@@Yw6\ XP\B8湻f Q] |ide'?)`k0F}kFɭrZy9[lHmLֶCncWt xZvt%Epkblݸ=+? >#?[4eVWDYAt#l< ϷHڦLwdfԠ=ef1Z nC9 8@$ii靣ʧ8#|6tIȥ01P9%Km+{DũrmZ6:Mim=*0-:ձz H8=sMvEkmO'rciVhyZp9\K1qU/۞jw#ڑjF*O620('WI}jGrȿ2(r$UkJJ`Q.BNje9z~ Cn c#&2  6Gjʞ_@#4#*U2%ќVL akẂkvKXcildTF T ԲK\^{f3Wλ&5'#*hf82ĮhPǭq+5W֦tRd yW-cj>QWxe$-^:G(gjsg[78ZdzԒ87R )5<:ګ{`+h.~_5Z"KBS%lW(łu=hFBF:7Vm۟Cm8=)kLҪO(YsZ>PV=9pWֻkFpv涒\.OS6'sUemiwb#+:BÎ0irUi0RJ&A=ZɆ]Lnrdg!i3j1he0vr7VvXbF=+6y4 gj!1KW9kp-?8CByP6h?#q^  u#m4F@5M8aj+ֵb W#=içjEHNĬyHQ7[j\wCWif;GT1_qVɪ"LW*&86: CzWy!ju@_1Zʭ&FPϡG*Ty%n@aWeqGVr1Ҝ9_j ⣓>_QU2ŶQLg.D n>{s\-jrМdsg#yfF:UE&sӊ˹A\RĂ?:-uA+b-F 楆t#Ar0GN 'U)Y<$W(DLaCXWSܜz.#yxpt$fB8d Y|r8[Y,ٸ?³gWu۩&ڡdjÅZdⓂvϭLS88Tv^:@'sz݇(-6kgcpq"m-s֤ O36$`$],WEb3Om‘YO>',kjη*H(#Ck!n9gGZ=*s 5ra#5R!d =yy@vjĻg,1Z.:ɘ 8g@Wk_6|VjAdjP0@T* l"$xkִͤ`Ҵ AI+B\.[֝mw<ʾ Vœb߅^+R9TF9YW\nc$ՋvfpdS3tY1ێ~ufn,>A$߭\V绒a>+]D腋\T^hW%#3Np8^aac;t%Y11LWsܷo1x,`qwՓEr[Aqw0x 2596qS!$;qS,08 ձکFN=Xuwzdur ]~U\X {Uo^ = Ie&]L&cnqS$bMJ)0$f;eR԰+K3Q`p]*]Jі9^NY܂$k6ᔕ*ǻp 3 չnB ڹy攘x#TXn }0\q]&+@,R$ŝ'ֺ-;G[ۅb t`].<%Fc[$sqg0`6yQaT@;hb`U1mN*[ZU0 1R-zݺ XڴB`qڰ% R5nM#WY.WLՙ8925pLJ5n̴N2:R#%ִmc$'"H d`$AӤL0͐GZCpb8wNUNSO˾NrkZCOSN`Yq撡 RXQ;qYS\`cֳ%9_j%""9*ԷFs{U)5/7ĹZ|Zph@&K*m1ΞCzl c!KuH1'c׌=RHϽSkw.n4 f^dOAlUDIa–MӸO T623՘+K{H4N+*@BG~z]`pj) mF,4xORo.MǏTDZБWibhFV}T;1k7Q͈ZE[[ax4"UA`~GhKA626{ITLո&S Zr@}*#NN3c#Ҥh^N|ez hĐZv!;B?ڠUi $ H⬠- AZڄGݓr0Gҟ)&H$T֮2xxrwO?flK4ȸD֪ [Ă2iaFdfmFaFkMl=JKKD؂]Z(^%Dӟ]ÊM n@Fbi\/p+n~*=2A8*{Y~zd$mqV='DpG5̇N3S>L'ȤOziJ29'v8 ZFR"it 6cwlw6' k^&=jv-!8Wl!I6Ef b#W[qZٸf6j VMx+[]NEvMw:jm- 5RvSQN1;ՄR&F4JA&g^GNÿ=Ef˯@MD8oSxG8S7&y[vJֶ*jn ^pUoqեC5R3$rM]f-W랽dGʢܻy1ǵUgm%ϥ>+GDGP2vxDSE:{Md ~ջUEYmgip+Mi4щԐ7:]7\51W_˂ޭiYrjҺp(;rJ+ d~ϓc8wzՆ"F\{U)R%z zj>0zV۬͞o{կ" @^j܊Ւx[MU<M.HbS:tl*_0u0Sj_ *)gZu !pS&Q#Z\}iʡc)速R#;qңxYU*fuPFi8F=i8&A1*a1VVA⵭1SU..SGΣG*1X+L_֬KJ U2LasޯĖ)k&n1V3j24c=jY zG~9`8N_!h*u< wT7X޹\FB:M})uMa]搥mJKHp:7o$ K'"Ƹ5"V87BLkTDW&bFeWVDgtիnrF;U+tI*LqWvI)LE6NYy#j9cio 9}f-#'V Wd0k&L2RkHv98 0MvUqҸb&ԃ9×F rY*۹\Cj#"FF84%;I=iÐbZl=(̞H$Gf WfcU5F #&ANiҕ/|69vA⹫r? »{8Bcj|6d&89` rW"`UV<$U,0\֧aE?*psOpbvLTH¥TpXc"ѹPuneUJS\&0F [ѮֵۉA\Nk5،w0NEC&8uƼawWT,x9NG ǧ)v2>2MG-r$Sn 0Hⳣ>lu600@dcƳ5O1lؖ\:殛nn5ǁFEbx%ط*QFޕ+NY@[sLٺ^f8,LٸGTwvFeE+ӥVwdYLգ$g䃊r9Zܓ)=ZA8Umްt PkJ,%zW<VR1CӏJϸ8uvnjUnb K/t6MBG<T_lr܊Ig+?ZÝJyY6+MVCZkB튚smi#q -Dn)%BI&sVts{0 *PqI|n*dOrEhK#}xя)]NTV_2Jنq$x81XZ%EcZI $PWIB#535NŸu vVi}Zr2ôCjpFko.w8֤2o',ʂݖU`Ec:\OiAYkjKݸc=k]Fx zUkUʌW=[\˞zŒPQ W#im&ʁn-+]\yTy6 sf"rF'c^*m8A 2C)mI5b鰼O-`k#i+t4YZE'b H^-jp$Pіo1xYkHkkNmmVbbph{2F~$T/Fܠ2W]JƸɨt.}ꮡ?6AD" 5M3NFr L@$na6W7r1RF3\ԁ;zWyv^6gk+ʫ|=#a%w/Oz,OdUexsZKxK^i.f ̓VD0An-Rɯf0cLu&O$-Vt6 q#n=0GR|Ds|G2 v@yWi00 sx>եdg$W瞂[$ɷ8b"idېHɬ;sn\eZM ld+z BU q:d꦳Bk/]~k5A|9 pj}Bo2}zU`+tv%U=uZ"W!&(q] S\z˻U@"I坭ޯj 湯1Hc5%+ZJcz؃NX[ J$8^"w k2K‚1SIie޺ #H1Fd>'۞*!U%85 1\Ϋ3$ĠT,.qm.k,sM<͎* iX68FoZ,dq& XjkoppT 0M3Yr[K$Q溝e,8e.33ZB5c7|VWpdH(#u3O&@J#~3i AiXJFGcҶ$Q鬮Rhc]I=q]L0Xe+b'S$=O<m}w+ ϥ2TG@Ցqryjj( Z$wz#ۜ Wsmm+?-- wb+'UvXlgIGHcBt zfNjs!~P}$J0JfJԭՍObf%/./;xh<Vd9"Lֆ;1Q[/<,/͏jFxcFjQqLe_lde^2=꼌KqZ͂E\.y"uY"3!$qrXQ]~"1j?Aϭ]F6U!T/"]C&\vc"8\i9m( tZَPj+3z~˴ZQiTVv1Z_ EUuKDQ(*8QT<-Ȯ*ɘrj2WWA"g\MG$ !8ݢ<5^QNI]&P=,TsSiZʼnq崵hKmL5p~@zmc9e*9{x9PVn䚇P[ۥ&⺯ "]wUml6 pj}Bt-ҳn7o¬8Q\"Jjyqcۧ# z2-$t|Ye(5ИK`.1bYI=䃎$ 6q֪;Lv fE>jE.Hci=;{pzֲě@\SrLE ԁH}J8!p*NqUUc!@VCotpwfV8s:ֺ|»M -h[13dkЁZv/qZa?'ڠIǥcdjj4LEYr5{t`v20j֗jU(D1p=}RPq~qN''\>B0O_Jo`0KƣuKb3],3P]/-g pc$VޚF Uhg\ckuhȰ@Xe5ܮ kCOTp]UՇ ]f $ =kU\i6Hʊv*p)l-lsRBg"r ua3BTZlUczFR8x.XrjtlGMiNPY@RQ іbB+c~ݴ`V6IԎUN)gpN8J) uSUF9˚aqZsrqqڸ}jiM Zgd"56-o]n[DF+AosWn*&a5t{AҔFxˀ 'n82ܤ%TK5yխ 쫰(Zw :tM[65Ӳȸ+=bT2:W7$1tQS\RXc"'f.mxEp׶o큌-nCgq e;s ъEtuvZnBj`*>ZPڥ-c>]$46~uX]<ō<) ҧD1&g=+N9b8]fG\z!tVR1[Hp"IL_Hǂ {W,$Sty|kxFTW#w esRFfm78fse*ozjǨ5md(b+jA*qZ?Dnj H+T%Aؤ:)\\8C#G$Sd`{Vn:|^݈I~sv(l]&e$ . .m4‡s.doo/Zim2l§ffSOG{{Tu?N]|OZr")}+B6PJ65)lpq\Ui%8 \cphKqo!GsqmjZKĠW7yk)G\ސ@{ x7"X>jS7oq˚P唱=)G5{v7߳bkwiH$v3 X@< bUR0y'ҟ̸e<گP8>a V\4t6EE kJ9SZNx8Ԑ085v6; 5 YCiJ Qgpb鴉7 ގBN3Dқ 䊑R=y4[vF}krU0zSV1RBuwx洖''J˻CmޘDe+Kwr9=*P9T&yf 8ЦB9I뚲T.6CV~%gd,#uF=)'#$dՃڈ@PCfXnw_ !yjj[0MvZF$bٙbw! kBB[8Ē8ۃZQԜ0H(*P6Pz)҃)c S[@W#{ i\7k3SFx5hIj^ߊP[ X3a5KJH]PkJv8EѨ qٰqTIAnn`MbEhyJv;SU|| c\!`[FBx$!0ujis  t\bLc, x*zu2~`\$g(ف՟i:T6RO5I TbHqؚ ]>TPI z3<֝ݪAn +LA![z1n%%[x5I015i$kDWhqη00O9.]c_#>%Z@9gIw >e LL`ZA"͜(=98階S8ȕXd_ݬ)eqګ4e$jY d˨I3rF Ic6tO,6V`GL[ɷ79AѴŷ31ksڬ9XW ۏ\WQi$1Y`&l'bPB.1TrE48⢙0q\yfYOcXL}+ܔGrG.p9RcLrpGҰBW8%S#)LָHD耎9t~+&@2:f4UVђpjhR]^zR&xǵE3/LWaSҫܾ~HH88Ѿ"R%' W֘zۉc+uG Uu9* I$ tr*!Hwֲ Lrj+' PH@.>{@ryRqUuYpqYJ-2@Z=L qwZb!hIRdcX71w{U$/%w]FDHYd49+1Z mAG˜WvsӭI 5rTgP%krˌI>rtTe1Hzu6KqVw,D~uWVUd*N0UsTUfLduTZZׁ*1O ä;sE! Zi.5h_iHcX6ьZ67UȦNZ`MfElZM$=1P,&% I|Z,H [t4 ǭtWiYq&sRGm_ZՂ~d޺-3xo) EajמPdR Ҵֺ͐Oz-[uTUWWVlgw1rEg^ޓ9U--Lt&(Aom\5MՇkpFs[ZlevxZ5fOzGu!$Lur!{NUU 9CW;itҭNgŏLZq}jΈ_@}c&ckMH*@*k+S'o`k'i9=}҃ [{A4%i%abA:sVF\Vm\jk3jqk.Vqvͺ(ǠLr{Q>U@ PhvAZvz&8淄1IlNϦ)e5%śC qNbf]i $zVkm~"l8AZ/!&ga%vRެk-VkrKUVV/ҴcA0*1! 3Q[H.7Enq溸,@jq<'1L  sT/1܂jkoۋh (cZ-ag溽\T-A-Kҵ4(ɻ.A TGoJ.rm>`"aml<{Tږ5WbؑSV;ǭ?F@.kfZ;U>]2*GqĊYGmZ F QSH2S/cGs$Jº+4UŒrU 4Lj򚁐AQHc 嘊lbCTX}k4e6Φ0YsFTUIrkGOx&,zbK_biܩ8kN>`1rkQl$ H} *] y[cQE [mw:Uf15B\8TeǾyPH,c75OH\`i0U;zbSe@'i(W-Hr3Q|ޚR' I<@ j܈w`fyHBH禘 $.d_)<{ ϓcӡl Tsug -RVfLsWGbEqHݕ\ެǞ_MC<;l˓zx!<~5^'8==;*+qu0BFW\yޚ 613T/v]K BY5GS!N0OJ,gs1FM:ֻfшV7\]$8wqARK1WuXC Yitq]NQPO RkŜOT=i<31]|=iyrV+֑ UNUFy5kc+#Vv+'޹&iFMA`NXc=HTi\&*n j-\u'9<դR+@HךڅN.ETn6Xטꓗ^|-`qh6xXO4; N29hS>d}޲/_RPg֫`ajǽQaHѨȼBq_nX ꭮C۶]p*KL\vW ef(9+5P3SDY}*ޡjd\@S{Z geH˳=wHֈb u 1T'/IzWm-=%W gV+85OE\65m2LIrHe3)#7j zW3<-/SҠx .x!~S*#EGd$p)-#)z`Ú,/p? tS\[]Ex2#hKhjEtqި4YcW1ټL{U;1$OJӺbaO8ylkR+O/ 6Fkx=C$+ Uȷ+_ZܓzWcwGխaU%-OJAc3X$"du3kw}~NR\V0PڰUq܊n Pb`qC.r+㠥5,[Z!G+nSlbf;$⧼ qқqy۪Yhr@M`H'^@*%r1WD’Vw#ֹ^rW#,px 6ZS%8^}in&*Ek-u'Zq({^\fCumqr1ұ&j,{qY0FHVKs\pjdă5jB=(X_[3s\*3WfÅ\L/<5x^4&3olCLY^w S.vg;:dqz"Y++;WyJM^:u2X4[VM͌kUE 6Չ#ʜ *F)Z@$e=* M3P=ǯqWSbprjkǜ5~0(U!R`.yy'8U̲1O=ïeiqk[N#ҹR9jѺ^8nփ?X394W4n/s]}[[qQc[ȲZWX7Lf \m.3RH廁BJʻYJ¾$\ *qXHV_6xsT.l BqX-v}:魦gw_#8I%xLlqӮj@c9 M*>񥬄*LJ/[?ѤtiufFWsb`P9SNȩ][%㐜g'<^جϽ7ik,zVuj.^0˾b'V߇)/uC@yo85i; PYAQm@ Uc8U(TÜӥ u~ﰬ˃{8̮N18Wߙ%`hq#Z`$bA{ *66ⱌ@@[s$}={8ZxJFVEb0v2mֹMfѢ609b1=2u" A*:1TnYwS8nrG>b$h)*J7b5j 'wz}ΫV`AVUbm1[Qj9sb'\ϸTBFHt*ǭhGأ"Ij]ab/TMnHjN+|H'oqr ]Sy\UI'NȮ2LjCte7dNX8GҪ ;K `tw38+hj=/W6!B:uP@\9,%0I50d3ޮ*PFHњ`[qY7]jQ\"jܔh.s -e׈ɬ˜ B0nKqIێ2{IqD0nFsc#\},0k>Wd Ⱥ&6 b!~5 ܞS Ыk.pjM57~ta4 5 rF]ұ5P7ȷlO 􋂸WE }jRqTi2W|-h߶]4~]@ Zɚos2E`j0@%@Y-2ckbO0cwgW>[>s\cr1^>DlhA޻% 棼P"FsRC)hT+,GOV:j*63XBR d60+NO.rpڤ'*PyV@{),P4\HLmUU<+q#{-+8# ޛ|ؔ9FЌְﮞ !nq$)lĹ "b|}+&5[@]5N;WdYLrMmع?/lVnHUִZ sTv?*t=T-\ U+lsҷG2`kv+q)n2"k8O+mA#$T/k1"f ڴ0Ag;eN7Zŷ}8>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <>stream application/pdf cmyktest2 2016-02-09T17:29:32+01:00 2016-02-09T17:29:32+01:00 2016-02-09T17:29:32+01:00 Adobe Illustrator CC 2015 (Macintosh) 208 256 JPEG /9j/4AAQSkZJRgABAgEAtAC0AAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAAtAAAAAEA AQC0AAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAADQAwER AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE 1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp 0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo +DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8ACZ6G+POxV2KuxV9PeUP+ UT0T/mAtf+TK5wms/vp/1j976r2d/i2P+pH7gm2Y7mOxV8befP8AlOPMX/bTvP8AqIfNzi+ke59n 7L/xXF/wuH+5CRZNz3Yq7FX1R+RX/ks9M/17n/qIfNVqfrL5T7Uf49P/ADf9yGfZQ8+7FWM65/x0 X+S/qzx72y/x+X9WP3O30f8AdhAZyrlOxV2Kp95c/uJv9cfqz1H2D/xfJ/X/AEOs131BN87pwXYq +WP+cxv+Ug8uf8wk/wDycXAr55xV2KuxV75/zh7/AMpnrf8A2zh/yfTEKsz0R8edirsVdir6e8of 8onon/MBa/8AJlc4TWf30/6x+99V7O/xbH/Uj9wTbMdzHYq+NvPn/KceYv8Atp3n/UQ+bnF9I9z7 P2X/AIri/wCFw/3ISLJue7FXYq+qPyK/8lnpn+vc/wDUQ+arU/WXyn2o/wAen/m/7kM+yh592KsZ 1z/jov8AJf1Z497Zf4/L+rH7nb6P+7CAzlXKdirsVT7y5/cTf64/VnqPsH/i+T+v+h1mu+oJvndO C7FXyx/zmN/ykHlz/mEn/wCTi4FfPOKuxV2KvfP+cPf+Uz1v/tnD/k+mIVZnoj487FXYq7FX095Q /wCUT0T/AJgLX/kyucJrP76f9Y/e+q9nf4tj/qR+4JtmO5jsVfG3nz/lOPMX/bTvP+oh83OL6R7n 2fsv/FcX/C4f7kJFk3PdirsVfVH5Ff8Aks9M/wBe5/6iHzVan6y+U+1H+PT/AM3/AHIZ9lDz7sVY zrn/AB0X+S/qzx72y/x+X9WP3O30f92EBnKuU7FXYqn3lz+4m/1x+rPUfYP/ABfJ/X/Q6zXfUE3z unBdir5Y/wCcxv8AlIPLn/MJP/ycXAr55xV2KuxV75/zh7/ymet/9s4f8n0xCrM9EfHnYq7FXYq+ nvKH/KJ6J/zAWv8AyZXOE1n99P8ArH731Xs7/Fsf9SP3BNsx3Mdir428+f8AKceYv+2nef8AUQ+b nF9I9z7P2X/iuL/hcP8AchIsm57sVdir6o/Ir/yWemf69z/1EPmq1P1l8p9qP8en/m/7kM+yh592 KsZ1z/jov8l/Vnj3tl/j8v6sfudvo/7sIDOVcp2KuxVPvLn9xN/rj9Weo+wf+L5P6/6HWa76gm+d 04LsVfLH/OY3/KQeXP8AmEn/AOTi4FfPOKuxV2KvfP8AnD3/AJTPW/8AtnD/AJPpiFfTf+EPKf8A 1ZLD/pFh/wCacyfzmb+fL5lw/wCTtN/qcP8ASj9Tv8IeU/8AqyWH/SLD/wA04/nM38+XzK/ydpv9 Th/pR+p3+EPKf/VksP8ApFh/5px/OZv58vmV/k7Tf6nD/Sj9Tv8ACHlP/qyWH/SLD/zTj+czfz5f Mr/J2m/1OH+lH6k0hhhghSGFFihiUJHGgCqqqKBVA2AAygkk2eblRiIgACgF2Bk7FUmn8l+TrieS 4uNB06aeZmkmmktIGd3Y1ZmYoSSSaknJjJLvLmw7S1MQAMkwB/Sl+tZ/gPyP/wBS7pn/AEh2/wDz Rh8WXeWX8qar/Vcn+nl+t3+A/I//AFLumf8ASHb/APNGPiy7yv8AKmq/1XJ/p5frd/gPyP8A9S7p n/SHb/8ANGPiy7yv8qar/Vcn+nl+tNLDT7DT7ZbWwtorS1SpSCBFijUsamioABUmuQJJ5uJlzTyS 4pkyl3k2URga3YqpyWttI3KSFHY9WZQT+OYebs7TZZcWTHCUu8xBP2hmMkhsCVv1Gy/5Z4/+AX+m VfyPo/8AUcX+kj+pPjT7z83fUbL/AJZ4/wDgF/pj/I+j/wBRxf6SP6l8afefm76jZf8ALPH/AMAv 9Mf5H0f+o4v9JH9S+NPvPzXxwwxAiJFQHqFAH6sysGlxYRWOMYA/zQB9zGUieZtfl7F2KpVrPlTy trckcmtaNY6nJCCsL3ltDcMik1IUyK1AfbFUv/5Vj+Wv/Up6N/3D7X/qnirv+VY/lr/1Kejf9w+1 /wCqeKu/5Vj+Wv8A1Kejf9w+1/6p4qj9H8o+VNEmefRtFsNMnlXhJLZ20Nu7JWvFmjVSRUdMVTbF XYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FX Yq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq+dv+hlvNH/Vqsf8Akt/zXmr/ ADmTy/HxfRv9BmD+fP7P1O/6GW80f9Wqx/5Lf814/nMnl+Piv+gzB/Pn9n6nf9DLeaP+rVY/8lv+ a8fzmTy/HxX/AEGYP58/s/U7/oZbzR/1arH/AJLf814/nMnl+Piv+gzB/Pn9n6nvHlvU5dV8u6Xq kyLHLf2kFzIiV4q00SuQtd6AtmxhK4g+TwWswjFmnjHKMpD5GkxybjOxV4h5h/PfzJpmv6npsNhZ vFZXc9tG7iXkVikZAWo4FSFzGlnINPLajt3LDJKIjH0yI69D70v/AOhiPNP/AFbrH7pv+qmR8ctX +iHL/Nj9v63f9DEeaf8Aq3WP3Tf9VMfHK/6Icv8ANj9v63f9DEeaf+rdY/dN/wBVMfHK/wCiHL/N j9v63rn5e+ZrvzL5WttXu4o4Z52lVo4uXAenIUFORY9B45kY5cQt6Ls/UnNhEzsTf3sjybmOxV4X +aX5+eZvKPnS90Gw0+yntrZIWSWcSmQmWJZDXhIo6t4ZtdLoIZICRJQTTE/+hqvOv/Vq03/gZ/8A qrmR/JcO8o4nf9DVedf+rVpv/Az/APVXH+S4d5Xid/0NV51/6tWm/wDAz/8AVXH+S4d5Xies/kt+ Zmr+fNN1K61O1t7Z7KaOKMWwcAh1LHlzZ/DNfrdNHEQB1SC9HzCS7FXhX/OQn5+eaPy11/S9O0ew sruK+tWuJXu1lZgwkKUX05IxSgwq8p/6HW/MX/qy6R/wF1/1XxV3/Q635i/9WXSP+Auv+q+Ku/6H W/MX/qy6R/wF1/1XxV6j/wA4/f8AOQPmr8yPNWoaRq+n2NpBaWLXccloswcuJo46H1JJBSkh7Yq8 QzQPuzsVdirsVfZnkL/lBvLv/bMsv+odM3WL6B7g+Mdq/wCNZf8Ahk/90U9yxwHYq+RfO/8Aymmv /wDbSu/+T75gT+ovnet/v5/15fekmQcV2KuxV9Nfkj/5LrT/APjJcf8AJ5szcP0vc9i/4tH4/eWd 5a7V2Kvj3/nIj/ya+q/8Y7X/AKho86Ps/wDuR8fvYSebZmsXYq7FX0r/AM4of8cLX/8AmKh/5NnN L2r9UWceT3bNSydir49/5zZ/5TPy9/2zn/5PthV844q7FXYq+hf+cKf/ACYutf8AbIf/AKioMVSH NA+7OxV2KuxV9meQv+UG8u/9syy/6h0zdYvoHuD4x2r/AI1l/wCGT/3RT3LHAdir5F87/wDKaa// ANtK7/5PvmBP6i+d63+/n/Xl96SZBxXYq7FX01+SP/kutP8A+Mlx/wAnmzNw/S9z2L/i0fj95Z3l rtXYq+Pf+ciP/Jr6r/xjtf8AqGjzo+z/AO5Hx+9hJ5tmaxdirsVfSv8Azih/xwtf/wCYqH/k2c0v av1RZx5Pds1LJ2Kvj3/nNn/lM/L3/bOf/k+2FXzjirsVdir6F/5wp/8AJi61/wBsh/8AqKgxVIc0 D7s7FXYq7FX2Z5C/5Qby7/2zLL/qHTN1i+ge4PjHav8AjWX/AIZP/dFPcscB2KvkXzv/AMppr/8A 20rv/k++YE/qL53rf7+f9eX3pJkHFdirsVfTX5I/+S60/wD4yXH/ACebM3D9L3PYv+LR+P3lneWu 1dir49/5yI/8mvqv/GO1/wCoaPOj7P8A7kfH72Enm2ZrF2KuxV9K/wDOKH/HC1//AJiof+TZzS9q /VFnHk92zUsnYq+Pf+c2f+Uz8vf9s5/+T7YVfOOKuxV2KvoX/nCn/wAmLrX/AGyH/wCoqDFXqH/Q sd5/1MEf/SK3/VXNb+Sl3vff6NY/6kf9N+x3/Qsd5/1MEf8A0it/1Vx/JS71/wBGsf8AUj/pv2O/ 6FjvP+pgj/6RW/6q4/kpd6/6NY/6kf8ATfsd/wBCx3n/AFMEf/SK3/VXH8lLvX/RrH/Uj/pv2PbP L+ltpOg6bpbSCZrC1gtTKBxDmGNY+VKmleNcz4RqIDxOrz+LlnkquORPzNo/JOO7FXjuu/kHdapr mo6musxxLfXM1yIjAWKiaQvxr6grTlmNLASbt5zP2CcmSUuP6iTy7/igf+hcbz/q+x/9I7f9VMH5 c97V/ocP8/7P2u/6FxvP+r7H/wBI7f8AVTH8ue9f9Dh/n/Z+13/QuN5/1fY/+kdv+qmP5c96/wCh w/z/ALP2vUfIvld/LHlu30Z7gXTQNIxmVeAPqOX+yS3Svjl+OPCKd7otN4GIQu6T/JuW7FXjH5k/ 84/XvnDzfd6/FrUdmlysSi3aBpCvpRLH9oOvXjXpmz02vGOAjVoIti//AEKbqX/Uxw/9Iz/9VMv/ AJVH81HC7/oU3Uv+pjh/6Rn/AOqmP8qj+avC7/oU3Uv+pjh/6Rn/AOqmP8qj+avC9Q/KH8sLjyDp +oWs2oJfm+lSUMkZi48FK0oWavXMHV6oZSCBVJAZ/mGl2KvFvz2/5x/1D8zdb03UrXWItNWxtmtm jlhaUsTIX5Aqy064q8y/6Eh1z/qarX/pFk/6qYq7/oSHXP8AqarX/pFk/wCqmKu/6Eh1z/qarX/p Fk/6qYq9I/Iv/nHnUfy08y32sXWtQ6kl3ZNZrDFC0RUtLHJyJZm/33TFXt2KuxV2KuxV2KuxV2Ku xV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2Kux V2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV 2KuxV2KuxV2KuxV2KuxV2KuxV8X+UjPqGtJcQt6lzLWSOdpJUYSR8pPWkkUSspR/jBIpTYjjXIRH qW9noU2sQaysmheaYhDeXUEsl6ohWXkxVGWayZG5s3NOa0HJKU348lvBvYtfuUvyz1u81TR10m/h Mt9pM9x6oiPqrFRyfhUc+f7yMtxCk04sCNqmErFLIdVfzN5j1FfN/ly/hhVRAJkkvZQywJHPWKNm ZqUoQXqRvRq9DVMqIUDZifm5YfMHmqPUJnN1ZX0UqyW6xmHZIQhkSOVkqzBmKNy2LVLAnISG7OKW eU/MVtNo6Q+qrNI7QmSZPiedQDCGjVm5sqqOPWvQddhGXRL0271qLSLZEljuf0ewiBtJiI5BwC8Q 01xHGjKzBqcmUV+HoKNeTTW8/wBItm+tX8MOoQ2mmxTSLDbu0jL6LMitCjyLAzoAArDiKciTSpyg HozS7y7o1tLZal6arFPavdRtcqok5XEcPpji7BDTdmX4h2pvtkUqQmlmjglnWZ711R0uQHSaFjKC fQA6+mA6hKUbw+0MVZN5R1K8by7LcRJG1paTNa3OpllkDcWZKrycj9knn6h2bYk7mUQglmOtW85a F9NhmtrMz1ueHpLJwdWlciNIwsblVJIBZq/ZUb5ZJiGOec/KEup+X9W1TTeKz6UI71bmVw8hito2 nlX1Pj51FWkWrH1ONSaNkSAQVumS6Xrmk61o+nwToi2ssMUEnqgKoEsfOUyF1k48pCqbrvXb/KQb AUvMvNlrCv5q6VYxmPSri0FvbPJbQpbrGXujKkhjKcOckUwd0ZHpy3/lEZUCoYZ5oubiw/MSa5Fz Hem3kgmhuZBEgkQxpKpYWwiUEhtygr9OMuagsv1bU9XvHhn1OC48vafqDx2skdgwmaWCnOT1miaS SQp8QVPQXjy3bxKXr2iXH5af4O1GHSbuNoteQ2lxKqE+o9woillM8tZXI9Uu3qSEr9nbLIyALAh8 1+TLq10nU9G1W5VpRZX73F5CoBZoLdElKLUgVYcwKnK4mknkzjzXpxT8qbC1uS0Fy2sJNqESinqv c2TXElw3InkR8KgV6DxNcN2CfNerMdF1KfTPL2m28Eht5pLN7t3LKJDHb83VuPxAU9c8RQcqDcfa AF0GRIVfLd/rN1Y3FxpFlBdQ3Lyx3OpajIBYxFWAdIxHSS64/aBQ+mwFA5NcsgCGEjbGfMOgyPZ3 t1cX73jw6fcLa2lkv1aEIhLyVWOrMI0IYCVmqP2uwjaUyudI0Yf4e0y2tYI7ax8tt5j1KRY4qTXE 0RihMjoK8lZ2oa13FOgycTsAwtMY/qfmK5FxfJFM+s3LGKARn1IbaMevbuwcyxtPPGiqQ6uxQIP2 OOR57n8BPJ6r+XmgadpGrfVLe3aCe0sTE68lI4vMDVhG7qSXQkV3G/i2M6rZlA7vmbyabbTbpZ7g /UuIcCVljcAEbARvRTQ7mhr0+nHHNtpmEF9pwsLuxuFN7aORO2375ZqmjK9GZOIO/SnKm4amSval pBeXNTj0vzkqH0ILPUYpTbzdnnjZWHIQMfTkIAjcg7BefickDRQU884sl75citLqRLK5ivWuWh4s skkTmRJGKuxDv6kzn4twOXE/aqZy2QBupeaxLPouh+YbOUXd3BI0txbQrWZFYsJYAq+oHY8uJYAD 4R+zwpKW4tA5sF8iXcc99qC2EJSMXyzotF4CJnpGWQkAgA8mANaVoRscrBpkHq99ftqsi3OoKY4k atlA0EzFgqgpISwk5GTnyPJaVNeVaBZk9WIDF7yRE10pYs7Q3FGINVPqem4KHn8VPsin2vDs2V3v bNKtFa3t7PXBK6GJru8k5O6NIiBRIUQNuWHA0UhTt0G+NoROjW/12xhhkZY7Uq0jOtUk+EHonLhs ZD15bdR3wMk00jRrDRpNa076ygN7JJeW8UTgytBI4iDcaBfgaEsKKOXKlfCYLCmeXaA6DLYaYUWd rK4lV0iqADRBIORL81tvh2avI/FuTk+JjSA0y00qXTtRWKMTW97MYNQiBVS1vOkZm9GVqoKEoB7V 3pRxGJTJi/5c6gJPy8ELwx3DWxlhRquZDHbKJUYeijvH9WdneOQfEHZRVd1LEoLEfzP0yfT77y7q L3cTXlw0xktUUxm3kin5mPnsTwkk48CeScePxUrgyDa1BYwJU178zXe6Q30T3FtBMkSekzpCqQsi Ab/ZTiD36nfIk8lD2nzKdOtLCGaPUIJmjmtrq1kDwiBYomUmRI2HEoEZlRFPTflu3KZNBICVarpu n6Rd2EtsstJGWPSNQT/eqG5epjjHOsbRSUbjGf3aUAJoVpDiZU8U0GJ7rUksFf1HdpyGA6t6MgNO goSuSYBnX5q6zJaW/wCgIliWG6vUvi8SnaT0jEUkJIAeLoeAp8qYSdlKf+UY086S6dbSRsujaDAs upOCWF2qokpR2atUieEKFJ4c22HwnkAbIC09l0+7srnSEjuEEOoNFHDHA3No5WK8A8Dk7IX5NXYm gYgd7bYU8u/Mix9LVtRCzFXurDkGVX5FnJRomWZpW/uWHxBqcTTptlcju2AbMZ8kXCt5FudTnMiX mqX8Ol6j6TcF/RNrZK0mxDKeUVvJGTTlVq133IO32MCGa2XmLVJL6LjakXGn2kMbqlCxT0QjssfK JY/WQrT4q0UdxTHjIpPCzv8AK68gvfM088UIiH1WdTLRS0p9aEkl1JB4nY7nev0gm2QFPm7yfawa jygvwHqvqBJQeJRFJeoAAPIpxrvvTam2UnmzDMZPLumxXBbToUtDbL8Fu4b0C8nJmopIZSrKdkKc unbCUhAT22pSWd3AsRa7WI3MsMoDRXHEAgxykRFyq/upDInKj0qOSsVSo2uo622h3xgWa/0uS3nR LOUo10EmjU2pVn581/fV4qA+xpy5UyQO1IKceR/MGn6np8llHzWKznjmN7bvuEnRpZQykkkrOGJL U+HbagrKJ23Y3uxTQrNfL3mHUNMBEwcRGHg4rKsgEgADfyo/DjxrWtCcgWQekwatDcJGLikluoHp LvIvpr8JPqNy6D4fhb2r1xtKQeZo57S1tbi2CCS0n5s87UHpFWVkLEF92CFzy7DbYZG0FjFnKLzQ dcXT4ZJrmW9ZyjJ9o3DktRUYN/d/CPb55JCdaRJZIkcSuzwXBWscylWXgpqhrUDk9uT+0N6EVJxv dKe3F1Zwtp99dOrLyng+srWsfqT+pEPVBooZ4gKmh+yvdqpNKyDVNRvFtpYpoRUxsiTcXMpEiLGg 5uv2mdq0ND9stXlhJ2RW6W2lyltpyRW6JKXHGJg0e8bpUgpx24RxhKBa/a7VwXstJD5cGox6prmm uoWV5EmEqqywiFfUd1bkU5DiqIR9mm3LAFSb812luI7C4kZ7lTcqrRScjL6gDN6isDxaqUR+q/Z4 13OSLEsX8iWFteecmRZmtrORpZJbiq1iVI2lZiSOAUMKVJp40rgrkgPb5Z7y5lEOocZXvIkhMZKt WOJ15wtEwNOZ+I70J34im8rtmAxvSdBW51TU9N1WeObSYUitoJTtLHak+sRWUEDgpALcSfgDfCwF Y8O6vMXhvdF8+3KCLleWstzKCBwDxyRNLGRHvw+B6kcj1++ZHNh1TX845BFd6NaBFNy8ct1dyx0C SNNIBQDlzPxRH7Qp047YOiZM78j2FulskVhILMWlvGedUQSSCSZzJyfl+7PESfCRXt8NARHcp6PS dI/R8MSWElYEdmDXEyq5SVUYtN048uQXrUdR3ywdzEsF/M3VbmJ9ZnnEbXV27h+NSkbzWCWihahT R3hLIa7cancGhJUBg3kGC5ls7Jku1t4LUunoNzo8s1PVcp8aSL9WcQ7rX94wApQ5VaQGTR3C2cLR wwtCLkgc4yOcvqM5RuANKhWAK/qpsmTIPQ/yOhvU1/UGvZjJI1r+5UPyUL6ql9j/AJR2pQda1rsA U08E/LURSxzvAsqXVujCWZmADK60AVdlHvUk91IOxibBRFnmm3VvCtwyH0g4hMiAmgADJuFJ7bb7 /wAXdks1SoskLACSImaKUhT6fJSkpZf3vJRCzDgR9x3CrH49W1WC9u7GWSF3hufWiiCshdZXLpNE eLvUSB/3b9OKUfj8TIW0DF+i5tZF6Ve0lvovUMy1UgAMjCjfDyEgK7jb7JqK1kxSxYNQ07ztpsU1 w2oC5X6tDJKgX4GdhwFCaOpO5qDQjEr1ZvKs8asyRCFnq3oOU4MxKq/FOS/E1S1aUNenQgMlmqK0 +nXMMahDNE9tIzVUiMrxMirN6f2GkIJ2A2wILzvSFuopTDKzRi4vRzkLMrOoDKVXiaEfvPH8aZM8 mAelW6QadPpzPA0YEEjTEgLxkPFnryA683psdxlZkGwBMbFv0lo81vOu13GStDXkJkaoUOyvxo3w 02+mhw0i0BFrk91YTWV66w3vrcuZKqeQCkiU8N/VMXM/FVV4+G4tAKxXdZltpp3e1Z+Agen92AAG Hxt2HPtvv1rhShdRlaw8zW2rCNvqVzxt7po0jKAqp4vxIPJuJHHxIpgVT/MzVdDmtYdI+N71rtL2 SN3c8FRZFRWLdWKyVJr9OWgMSs8ueTa3w1mxLwQ3C+pPaW7sWZ+NfhlYB4iaj4viBrtxoDkTTIRQ F7+YI0+7k02xtHt5jcr9aiuJmnkE6MFqZnMjNx4KPt9NqUxpCc+WPN8OtXl9JeMyXkXwEoVRSAp9 FzRDvHKW6dVoPfG6TzY5r17N/wArKvLtbs+vdrMk5CmOMRSWcaqPhLclIbcfa+dcN2wpS1ZW1Hzb psxRXi06CMPQVrJCxkdeZUGnI0Ct03qNiMiDskjdnnkpI4Jr27tw6LPcgpcOxXkqNI5j4kk0pJSg 3+44QUp5qGrrMZUDIAXL2z8GLKDVA60UEMoCiopT7W2HjXhYX+ZeoC48sXH1iRm1GzmJimZm5usk 7ITJzO9Ueikd1PGm4wiVsSKCH0UXltboqn05dOtxH8HQl60JWq1dHDDlWlAu1MgzRFlf3Ul9ZXSb tHC5dWKcY2Mao67cD0HLf8emNLb1H8j5IpPM+oemwIS0IavXkZIyQPkeu2MVLxz8stImisZ3MvGe SJTIgVqIrAyKHqFCmijxPh2wdViyf0zFNdNInFljUxggBdjIYwnLkOoHYCnbCSypWmaKV4jcXCxS NGSoYcNmUMwR1Fe9G7H/AGQXI2hhMi28Fzb6mv7yWBjHd8G5MFHKVHkNWY8ZY4iDvszeNAQgrba5 sjqSrbqeLu3C1m40QMrORxAK05M0n2uRLEAChYyQ7WLPVU856DOJo5dMlvoVS3j/AN1ysyLJyqWP 7xVqKGnX6RWxW9wzfTHuIbJZT6U0F+6NCFNXYUVuL0A5H4lAp1J8MQWSFu4ZHMlpKsrvKwkkbgg9 F0AWWRN0q/GRSh8Qflih59oEJN7fSTzesGluEhZ+TOJqkBglSA7EClGPQ9cMjswHN6Hrlg8mnwyv IUvp5HtSkbkKsciuAGUCStNuTA/aA6LlQpmVcuNPRI4ypWL045WjQgOhWg+ID4uIb/MnJgqWPxGW 41iN2cwW3L0JyVAZrmIluSqoJ5gIwZ2qCvFPEKliGQJpNsqxW1uAn1hCiLGSjiWY+lEyipPJhyLl tqA79ysm9e06wbSJNILrWaRBztz60ijl6jBNm+0EqS+1DUkA4VeOa4t5baqHmYvd27iGVJSH3h/d UY9GBVB88nyDB65+X0Fv6du4vHjidCzMhInDSITRNqVH7I9splMOVigbBebfmbp0kHmS91C3txBZ mRV9OOvpoyr8IWu9TGqOSfHLWiXNfq92vlm5t9QgLf7nbV2mjcDYvCrLJH/s5eVfGoyA3SdkTp13 H5gu47t7UJeBuMPpMzCSNyI25pw5UHHjyrtv4YbrZHNG+XbhJdVubhOBuI55oeERUuAhjCKVAr0T qdvlXAQgMq0q/MiTWhJWG0/fGXYREceYIBb7S0+13HtTFkibevrS3cRaRpviMc1KKGIYR07U2q29 TQDYYoYf53ul9DS7OaFJWvJw45cqsjKahiOLD4pFbqdwMPRBR1tNbQ/WoJzyYwwrMwJYlkLpyVdi 3Xqx606Vx6p6IiJZtN+opbg28V1J6UrTqtGURO270ZhxFOPf78eaKepfkNHx16+ZWWSP6owWQKUJ AmQfZI2Hw0H6sISXnHkuT6vYXEzOq2z+kvqOeKn0wQ1TToOR3/rlYWPJG3Gohbi4eUFgsEbdR8Zb nwIUgilEPU0HfvhkyCB1+YHgrt8CwxeojbAM8aEb1BqOORUpQ1tcX0l7p9tJWSeBx6zB2VfrAMPh yZlMXuafLJAoISGyluo/q7Sqtvq1vdRW86Hly9QTAEgryXiQu7Dx2yY5sGX+Z7GCyuPK83ERyPq1 usjUFfhLliWWgYgmuwpvtkejIqPkS9bUfLUDEeoVVbaV2BX+7RVEVUZT+zWvf6MNKE9LkV5SxcXh djGJKMSDzKsvKgDMARQ18cCWGeSbWA30lzcIzJHdypK5INHkDsshIA/3ZH8S8agb+NDI7MIjdmV6 7G5sZjOR8Uk10iA+mJYVVODUNVPJytBseJrldM0u1rzBBHH9WtoS95KkjI/V1IX4iUIFDVOIO3cr WmSAYSLHYdQ1DT9MjvowwEdwjSuu59Nn5Px6kH042NevfCaLGLMLLlMfrs05njPJrSE+mOTIgMJr XalONC/xddq7lsDtc1WWzaW8EZu3tbdmjthRBFPIWEb0IdiAsTqyrTkKV36GKyLwW4u7t7r1VYmU sWIb4qk9ag9fpyUt2INPRvyt1573zLbW927Wd/AJGjahZZmUENGFNPSZRyboa79DTIQwgnm3S1BA 5J/+ZUdtFb6k87qkF8vFS4Yj11jrGAFrT4Yz9NMsyx3tqhLZjWsXukzPomn6/GHsFsYnUqhdx6JK BVaN42UN6b8iH3+7KopkWCeU9Xm07UkZZWRZSEmIkMf7sMGI5VHh3NMnIMQXpXlSC4W51HVDB6cs l5P9VV6UCHjKooeaj7a0IXauApTTyuL2W1JnuUZ5viYAspVopJCybKRxYANQ+NMgoT+W4VUnkMiq z0SKSOi71AY/EdqD4qU+g7YlLCPMKi782aDZAm54RNcRGMVYoy0QAV4kr6PUbZLog82Q6ZFafXrh 2CkM8SOhKALxL1HXcKXGz9tz3yNsl2oGSbVrNatLNayc+R4iIq0UnKtf5eQrv3p8pBBelfkRY/U9 YniWrKLAB2qSvIPGPhJ7Hc07YYqXluksE0f0SFS3niiKQ0NSqqq16bM3ME9euVhMV1oYvrsnouIk lht6xAV5FWmK0+242B9hTetNpUqca7YWV7bPG3GVSqiRhUAGKNVb7BWpBU9qYOFneyVWmlwX9q7m NJY2iTgIjRpnRmZ/gHYs3BelfiHTBTG7YpqUWoKsOuEG2gvo4YpbpqJExjiHoSkR02LoyuTWgK7E 5O6LCmTec5Ha90m/mb1LH9KWUqu1TGqwySBkav7X74E9qdaVFYgbJkxv8u764tJtS024dfX0xlUJ ISW4xMyPQDeid/oyaAWSeYdYSCyvZy61Zhb2cc3Enky7+kFG47ciB37bAcypLHvISS3Vpb24VZHO pNO8zt8LBLafYnfrUkV2wz5IhuydtSVnLwyKpKLBaW4+GSZpWLvxVuoowNR8NASdhkaTaWXUcmna lBLLOJZZJUa5/el+DS81fsvwgDjVaVP2hXCWBO6yWzESH1I3l09lYXFArOyuApCknaqykUwBQnPl GeN9NtLYtHP9Ub6rzO6s0YBWQ78vjR1aldqfcWyJ2Tf6xDDqN1NEDIkjIjhaygKUjKqyK1VZZGdg Nuvvj0V4Dr2nnTdcu7K0dgLSZhbuT8ahW+AlhT4qUJyVMGb6XqMVrLo/myRFMd06C4uFIBt7lHEF ykoANUmQmRf5WbsuOOVSZSFh6HrqQalaRyzRmSKOaK5KdCwibnTfpypl+UWGuBp5n5pe0TzZZ3fp rJpIaP4d6hTKWnR99nBkbv3B6EZjxjszkd2J6jpT6d5iltS4uOEqssgFQ4ejglSVIqG3Fckh7DFG E8rRsCisFMnJBxrI5QVFWYhfgA+1/DMYZv3nB5W3GHp4nWEUP+FWvp4hatfGOSf0jzYorqI+HJjR 0CgmvVstAa0BDK76NNHcSsb4vS9Qq4K+mhnUqTQmgVH+EAUPc9VUm05EHm25lu6xLYWVvGgqCyl4 QxWlQKirV323w9Agc04srdrrW9Rt5RRJJE9So4mrxRoRQAU261pkSyC7WL24fU7C3tgwjSKUxO6g uxjWOMueO32Se344RyKl67+S1yX84ahbowaKDTwGru4kMwNDT4QKdKE+OMFLxnTNQE0umQcgFhCS l5BzX4V5sGVWHJE7gkeHw9cgDVsb3RNjYW82q6nFBqUq21s0Ki4lgZzKxM7t8PJSvFZD7b1wmXJk E7aW1Ny1ncXwRFkEtfSPxBixdacyV4uBWi06bk/ZeJks8oW0Eeq6kDOWZZ7lbTixqzTxW7ROqk0H p8eQoa/F7YmVbpFVXVj3mWLUtR8rXbqivHHPNdW6OftWqcJgU+LkAY5gBtUANvvkra0smmDeSdPe vE2l3CxiRaLxLqOT7ijj4VIpT3yJlvSTySm4eTTfPlzJA6vFdSSmJZAQkkUzNzWgI+H1FPfLI8mB 5pnFdSXFhdXVwPrDQQ3UcTMQQgCCXmAehcsA1ADQKMeqeiYflYttJpHIRrPeJqP909RRBCyE8qr1 9XpXBNcaZppEdn5p1ScCMtCluQ5CluU9xIr8QaqNxVht4mpAxtaQ2ovAplkLg3izMSDvsVkkVSQu /Ekb12OQJtiSh9L8xWiQwrEVkKmNUhkoIwsSoxbu3F2Ryd8lyY2nvlyHRrjzARBMEgR7BL9v3itz kkFsWj9+Kqp6dCT7kM4c03m01pRaTWkgm+uXN9dtbmRATE8ziBwNyq8aId+9BWhw2yAeK3upMPNZ v2iljk+teosXH4jxfw5K1e2SPJiOaM1+CSbULnTNPSRo9curSW0tCjRmRnaRHZUbjwrKg69dsjAW QynKgSzaM+c5bdleW0ijXkKO0clUqacfTlb4qdunvmafNw9yxbUfLNzqGroP0la/WFjVpo4xdqqq WpWRfQePq1PtZQeENgEz3fL9q+98saveecJ0NrBc30Rjd4Y7kekwWNQq8eJkXZOjU+7I0KRPLKG5 3D0PXryx1Hy/Y21panRb06qLC8tQookVrbzXAoRQ8JWMb0/bFOqimVRxxGTil3ObLIJwuHK0kuLa 7tvLq6fOjJLb23o3JVGAfhCVfirKrKCd6EfETuB0wk0aagdkht9cnhkuriehL2FJGc1aSWJvTJFa fEdl+VOtMSLRaH8p6jJI2t315CJPr7hJ5acuHqFqhQf9fbwpglFYllWkvZzx6rdREmY6hHFuCx4C SIuwNDsFJXp2yqVim0UkXmjUr19QsYtPFHkF0I2biQ6S+hU026FCvTtXqcJJ4SzwGAyDi+l7H/zj +jP5y1q6IJSS24Qsf5EaEHpTq3f2yyPNpeNeXIL4XRnnjeB7Vncco2rI0at+7A+EnkVdWrtTkTSh zHnIdGBej6JbyL+kJzKn1y5mia9WkjcZIoAHVfTcfEpaje69O+Y2Se1I6Jzq8Et7c6dcNUSWVZdk dizCOWCjEE02kJyMsgSWPiDUbCTW4bGSSa+miN9EiQSBjLN6qoWFXFKxAAmlaU8cnxAgXyv9SLIV W8qcLCa1JuAbqG2gM0VpIGEdssaGGQAjmsgj8BQVAyf5jmnieb+WruX/AJVV5gsbhipiurcNFwqT zmjFAwqy0b2Jy7IblFd6VPO+jpptn5a1xXeNqCC7nU1KlyZ4THstSjeoxY9TTDiy3Ix7lJ3Zxd+u LDzbq80hNvr9rPdgBo5JAhtmj5HfrxkbYDp3qMx/F3Eet/pQZIP8tvysjms7bVrbXFP15BcCH6qW WORgQyFhKvLgSV+yP4Zdl1Ij0REm3pUHlKFU1B5Z0aW4YMA0VeHAcgKFjy+Ms3+yyg6rfk2GTBv+ VdafrPmWe0N69ku7KFX1d0PJeDNxZRyatAcunlAgJNIlcqYJrGhvpXmObS/TNrZaXKiahdmZfUko PhlCMV9MEAuEHSu5YcclHJfNKceS4VHmaA2EzNCYpmlEzem1IieJYFa0rMN6dcckyIlMOez0Kz0g 2otBbxxTvZgRWstxIeSopJ4qeDhgvQV2zDlqJFkJF5f5zU6V+Y8M96gtWvoo5rmO25TRNIxZGPHh HUFlI+x9G+Z2CRnBlEm90w11tOg/NXQm1SRYtOfR7lZJJKIv72G9jSlRtUsoGx+XXL8Br5s5REjR 5PRfKfkny3eeXihuhqUkqH1bqImLnQUYRiBwV6U+1Wu1cz9ujQIjkQ8O89/l/J5e8w3EEQaWycfW rOXmpYwyE8A5KqeSlSrbdQcgYdQ42SJjKkht9S1nT9Xj1OG7mN/EBxmLl5eK7AEtzDBUps3YUymW MFHFe0tw9atrVPNXl3Sr7WIZ9SjpPLGEWVkUfWZIKgQuka1EI7dq1zX6rNKFAFuxwERUeSd3FrrU kLRQwqzFeCvKJVNGrzBo0hPbc5hfmd9y2iUlC60PW7+5iubmO3+sWwKqxiunj4s4LKqGVF+L01PI b9sfzFDb8fYtyQHkvyXqGh2l3bXUa3S3hDsQsoY0qAAGWgNDXfoflluXViXLZla+18j2SQi3Kusg uJbiqmSnCSFo1iXkKjjRdzU/D45D82eqOJAarY3dtNPZNeeta3Ebx3Nl6g9Qh7tZbZki9SP4l5uP iJUU+WXRzA/D8FPE9L/IrRlsvNGoubs3UqWRDFYhHGUmuaoVO3xAxMGFMycWTiSDbwq6muLiOKzs IxYr68s10zTLt6k1FVQvAAKOwp2p2yqIA35tJZboOqaZZ29ZkuSjj4Z1dWYgEOSxYoeUjVP2R2yn JRNFF7p2PMGhIpf6vdyyULLErIVNRUdW4Dc/h8spoI4g59c8rRXKzfUbqJmosjIIt1Viy/t7qC7N T50x57WvE3H5q8pNHJ68UwTk6EsIfskAAsS/X4um/StfAiAWwxXzUfKk+mtYeXrVo7lriF7hYoR8 KRvvI3pqx60+0O2XYibsnZsiWWtZ6BJpsNld6W98sUcAvHkjQLyCAhh6hBYdKlOnTtkJECRNolzQ si+VqzafbaJKsU0ckUoYenxEikkIGDq3T9k9/ahTMc7YNflPBfSeXjEmpz2T6VdyWc1oFgk+LZ2f 44eSDmz/AA8v45dnlHr1ZB6DFo3K4khudSvZfXDEyJIsR+JqigRB9kfD7jrvvmCcke5lW7EPOPl2 DTJ7a4tri9jAlQSzrdzrK1G5EF1I2ZQVNOx233zJwZRKwR8GEvSwT80NEt7DXtIjW+neGeAPNqd4 xlnbiBGVldEDSNRAB3oRXpXLsMuIclNJv5Z1fQdI02W5lCx1lZLRnjKM0fBBy+yWrIUqR0r475DJ GRO3xQJJ8vmzydGIkN2IfUp6kzRyUqxqaCOORaAEmh9++UDCSU8QYB+Yt/ZweeNNuLdlkgtYYJGZ OLgj1GelKAMKMPn9IzP00DGJBFNsD1ZD+YGiWGsalb34mlJt9KthAka/uXLXMokq5FFpzSgrv26H JgHhbzXELd+Xl/rOg6ja3nq/7jHKrdxswKqxf4XFTTfZf9rJ4chBpsniFJv+cuj32paDb+ZtAlW5 aBGS8slT1QturtJ66fFUpEZgrcVPHlUkb5mxyVsObh6nET6q2js+fjLJPOguJERXZSSvKnFdzQ1Y 126Eb5WCb3cU1Rp775Tvraz8n+XpJ7h47mfT3L+kwTkv165ZeRQcjQn5fTmr149Q9zZilQV/8Sxt MDBftxYEsGSd+/SmwBH0ZgcA7mwSUj5rWGqNdl/VYgu44AV9+RYU9hg8M9AniVpfNlxxAW8iowAQ UV+9AASQd6Y8HkvEion82yTxKbmKGA058xICoUdKcJGJ8N9/bMmGjkelJ3ZRaPp8AUy3DXEik/GV kCkgk1KlG+4scyoaKA52WXJmvkbUpZ7yW2/dLCkRdUjCqQSwBPFUQZkiAjyCQXy3a3uiW/qTGxie KWRtjKQmzkg14lyenRgpzXSEqG7VIpxF5p0Yxn04rOCn+60IrSnLsSetNq/dlEscvNhxOfXbFeNL XT7hfsMklxGop8m5fDt2H9pGMjv+SnZuPU9EgBmNrYRzEhfTWYcgWB6OI6fM1PvgMZHvYuh1nS45 UpYWwZfhEiXQLAgmjbKNxXDwHzTaNi8zKrIsSWrcaUb6yDsABRCakNvXI8H4pPE2fNDXCOqrA0bH 94oliYVJ60IBqSK/FkfDXiWTa5dxQsBGJCePJYZ0L8mAYMEX4h4HfwwjGEEpb5c1XU9I1vXFt621 vqYhvpizRAlCzCv70MP74vUht60zKlvjvuNMgdk6fzP5rd/3sxR7biQsM0EJK/aoeTOPiUjfkMxR CP4tHEUg8xX2tahH9auTd8WiVwi3TTW5BVz6gpIV5V4igYUy7Fwx5V8t14ix3RkvUtrXVIogbpkU 8pWpQRiSJyQ3wUkdXBqN6EftZnTmYS2KZbsttbd9Pkb6t6LcjWNVeH92vKnpoo5FBWQbd9q9Mwcs rJB5WxINppHb3szsjelJQjiJLiIN4lOIFNvDauUEgFUim8p2aXMmqvJbgLxkt41kVWRVlMjMqqam tPDp88zceYmUY7t0DuAF/mbzs1za3WqW8sSX1zBAJJ1YOXjtkWJTuKKeK09z4Zstox25ubDg4xx8 kj8qvqDtZav9eh03T1n9H1PhJLn4t1l5LUt8NT0rWhWuYsb5/S7DJ4Q2iDkPMfgbpx5N8+XOgfmN NcXt8t6J6wi+Mh4bOr8QasApVSgAPHeg7YcZ9e5tnrf8XERHhF3Xzb8//lppks0fmXyZ6cUaMZr/ AEZnX9wlQfVg5fajFCXUmq/sjjsudIPNyxnegy/WIptDs9G062vk0yGysUjWGOVAj8JpaueYDBpD u3epzW9oRHGNuiwGy200XzdPCl0FjvIX5COZYJZB8IKkgpUFQx3+HrmPDCJcm0Yym8PkaB4/U1e5 k9Qirx21hclQVrSkrJU1Ff2FOXw0u92ogOqb6X5fi04OumTXcIcku31Bg7AmtC0lqW4/M7ZlCMR0 DIR7ke+leYphxhvpuXU84YkHXccXiQV3w2E0VCbSvMEDf6TqKIo/mFinXvVo2rhsLRZF+Xl7/ueu bCS+t7icWxlMEXoc0UOg5OIQKV5CnLE+5AePLK8n7mSxhMv2mRIoyvwjaokTr9BzQWeYLj239ds0 AkOhRGZGYIywRhiWI60AanwipNf6niPekKEv6MuJEE+kB5nqUjWBUQyAVLVANanqT1xBl3oRdhDa PCq/oo26qxQjgDs1OXYGladR+GRMje6QUT+hbAMEt4UWaWtZWjDD4viPKhXqW7DDxFVsvl63eRkn tLMJMV6ByzMoKowTgpr8z074fEI5WtKA8peXEjJmSkcgo59Liq0Gwoq8u/cfPvj4p23RQVX8uaAs nEW+nrE9SsjwhnJpXk+x2r4N0ofHAcsjyKSB3JB5q0/TtA1fT9Ukt1utPukkstWitbdSGWonhKxV ccg8ZDE706VOZenyGUZRvnyTQYxF+YHleJi1z5TjeQU9Qc1jXlSlSptm6g5f4I7z808KIf8ANnyu YBajy4iwb0gM0XAEihoDantkvAHmjh8kdo/5k+XrwLpFtpAtGuVFrahHiYepPLxH2YY6DlKzn+2u WRiRW5/HxSA9HvvMmk2jpFZRT3AB4CJ0BEhBpRGRUJ5duuY+LJknZ2EfMlOzHPNnmu51ayaLR7ax tmSWO2uLa7t3NzE87iNCZRIjp1BNVO2+A8QlubG/Ly+H6UlR1LTrLTvL/r31lb+vaJGjTQKGZlGz mSQrG3xVPIDxry65XhyXlv37Jx/V3MH1S7OqeWptetxBBc2E6QTW0AaMJbSfuYfh+IVrsOPEcaim 2buErF9WjPG9r2Si70jWdOMUQs7eSS44i3SKKNy/qmiEKB1J2ApUHKZSiTw1uXOx6bUww+LGZ4B0 s2gg989ktzcafCYH4vA7IsXqKWeMlKlOY5RsDTuDh4Yw3IYYzqdQKjP7v0gst8lfmHJHcW2lRaJa T39zJwt7uYMXgSJSxdavx/dirgHvXxyOXIDCwGjHhywyiJlyO/N9JS+VtBuh9Yv7OK4vZ0+PhM4j RZv3jLGq81oeW1KnwOUiBIBn9TkERBPDybh8t6UrK6Wzs4QIGa8uQ3AGgUbZYZFFBWXR9PoD+j4J iuwMlzKRudzUxsR+OPEe9eENtp1pJzja0to1IFY0vJk3B6VSJTja0qR+WPLpJ4eoD/NFe3q9/D1E A6YTM/gI4ULdeQtLmgnWO+1C0kk+Fbq3vrkSKOW/H1XkQ16br8seP3fJeFr8ufyw0fyz5kvdbg1L UdQ1G9tjBcSX86XHIF0flyWONuQ4qu58cAK08SutYIKrGzyRk14cG9QLx5VDKvZd+uaPgvm4pKLt rydJaym4RYqNwG1UUB1D8AW3jceB9q4TGmVJfJ5ztTPKHeZEGzEI6HgUpsxLDenYHJDCeiCVlt55 0iWkdw7yHltIodnAryXbiKmtBtkjgkvG1P5xsrESJOl2tUVvTICitEKBR2oD+0D/AFAwE9yDKkHP 5n0Z4pJrfVZbCb7JZY1k9WhJpx+2uz7VNNskMRuiLTxojTfM+kC3hsxql5O0e0c31Zjz5n9hamhT 6QcZ4iegUFHWlvdxSr9X16QuY2ZoJYwXCCoqeDDif8k7/PIHv4UiBUbq+/R86I/ma3jM9WAdSygr XduvhTfDGPF/CpiQ3b6L5puJbsRzpNZ6osR1Ga1b03iUKYZGjLqas0Sqv2f2elTXM7SacTo0fT+P sVGaDbWWkWMlhpSkxWqM0qSRiNmQk/E8j1qzce9KeAFMdVpJcxuWQJSq/wDL+rDzPpmuaPaPdzXU n1e84iaWJXkV7WGZyBH8KGqk1XtkMOMkGMgfkyCZebteuNB1SysBGIrkvHCFJUO7l/3sxIfaPoPs Hp88tlgMgI/wj72J3K/yfqWjeYNdk1G9uTZaklbe9ZEDRsIpf3YmgVAZCXeMqykEd6gUFn5eIhwg swLVfzHF1aeWNTs7uxe3u0WOsjKy0UyJ4jurHb3+jNfp8ZjkAKHnXlDStS1Ty15nsNNt3u7sixm+ qRiryLbymVlUUJJorbLuc3eIWCwJ3F7spu/JXmnVPL8toNK1FpWhP6PMtrOjq4YN6bLJ6dFfiyjl 8KluQHc40IG9w77PqYnERCYFjkxfQ/y489wPLPceV9QDLyj4zafPKoAAJcVQxnaoDGo8PHLSa3qy 6/QitjLhB/HkyDyP5anutSikjsStjp97bR3cvH0lSSTkfjagL0j51WuzFa02rGGMysS5N+syY4j0 7yvn+17pYQXMNjCi2zSoqn95JJFI5UcqFmkiLtt1Y5OdcnXwC24+uK4pYuoB3McsXKlACSAo6fPI pUxf6mjNG8V1VaU9OaEkHpvzkUnbbp199sPCFtV/TGoq3wreggdxaMK1p+1LjwhFlEQatrKx8pWA BG3rW6FjXt+7nwEBItXbzLdxtxYsxFKhbWWniNgJe3h7e2DhC2U48la4NQ1KeF7b0JYoS3IrKjFe agCjxxjYU+WPDSbfN9oZVjAN0HZnokbp6lFKmoYfCf26kfT0zTkeTVwEKMunT3B+ralqlxIjVYxQ cIWaLlxK0Yiq06Ddf1ZKM6PJFHkl7eVZJIZFt2kuHhiAgN6rhBwYHgvE0YceVdvuocmMx6o8Moc6 TdcJHSaFrmJW5fVQ0KxNIW2BCcj8X7NB3pTrkxkF1TIY+9bb6Gbhm+t288stQspnZlK1P2q0Rqbb +1PpiZyYnEncGh2dlK5i0yC4UliGm5yqgPQ/Z4H4jReQr9AyrxJEc1pL9S8y6nYv9Vg0aOiEqjPE PTDmo+GhFd0PEd/fLIYRLmUWR0SO91nXLxXkGnQ20UnH1Xt7YLypU8qnk30jLYxiOrGyk4tb29m5 LE0krk1dturU3Z/Fj3y3jARuzvyX+koG/QqyyiRg0mqV5KIYiCIVi4mrSOPirIKAADffM3BMGApm A9K0A6dokUkdkhWVGBndjV2G2xYb0oAforkuJnTIz51u0aQxuFafqKVAO/2R22w8QWnmnmbyhB5g 1w63eF3kkRea/CGqhNG5D4x1338MhM2kBV8leQb79FTR2NoZVDNSW9bi3qMfskqaNx4r32HTfKTI tsRSffnMbe08g3lxqEdsdSu5IIkMUYZ/UDqxCSc+W6RsT8OCEep5rkNvLvyl1Ge2GrXERaCcS2iK 5PEComc8iP2eMZ5ZdG6LR1D2P8zvPms+WPLkGsafp9nLK9zHHPHNby+gsUsbnl8LpQhwq9T1yH45 txOyT/lf+cWqebNRu7LUrGytpY40ktls45Q7LUq7UZpVPFmTao696YCa/tRGVs41y71BrMPI96ba 2hmcrOXCl0CleYpxPU08KDLYFjJa2j6MSGaxLMSamWzgkLEct6mOpb5k5DjPf97LhHcq22i6M4o9 hHQUIJs4Bvv0+ECnzOPGe/714Quk0fRAWY2cK8ftM9rBQdzsadjjxHv+1eEKElhoCCohsonBqXe1 T4qfaA4n9X6seIp4Q0ulaMWraS6UHPUGH09q+Ibf6MeM+aOEK8eksyMiXtkyRr8QW5nj3A7+m+xp vv8AxwcSeFPvy/0ue3u7i6kljcyRBWWO4uJiu4ZVYSsybDuO9ceK14aeFv8AUI4n+sWKzKrN6E8k kaKrVFB6jceLc6qCB4b98wg5F+SNTSnmiS5jHEyseSHiSGqKMCFIblui7typ9BiYg80cNoNdGvp5 0aO9WWOVjxlqHoygioSNR79K/iBgpjw2sn0lnmIdjqEdsxVkdk+GROcgCQwoz7huXHmacT3pjLfY JkL2tWvNNSGQSGVIorh2VDd+lC3HggKhJlHLiFPY132rTIeHItU4nnarJYXcJElI2gdOUczcajkG 3ahdd0/aVl3+iojisKMVqMOnfWvtMJo5QyhEb1EcR/aBrypuNqFhXCMe+zIYlGfS5YJQq6erFgWa dnKUZSBXl9qndmYj5VxOLi6oOJNLOwsQVgazKzxqrN+0xD8XXkUddmX4lJ6jvTKxiPJEcfRo2Gn2 moXV5CojnmMYuJK9TGoCChNKAdhm5xw4YgNSVaXeXV75nNo862MAPpzXLHkqhWoXIqK/KuO97Mtq TzUbTUYQrw3dleRDkzyxXMQYKNiPTcqxqenEHBUu5Oyqt7bosNvOSs84ARQeNakCrOfhUU6scJQy Wx84RaTBDZW0NrcqjOTM2o6fDViTuAZZSKdB8XTCMN87+S+JX9qQfmX58tr7yZf6fqVnaeldj07V 11K0mdJxV4npDyfipXfp4HriMQB5/YUGdj9rDPJmo2ej6OBLpkZ1NkjnjiRVdJxC4C1m+FgzK7vU EHjVa/FTACBserKOImPFtt+n+xmHnvVdKn8jVigi0O8u44RBrM6tDaiUSAurelHIvI+mykAN89t2 PLmiXueYaBrN3pOoxX1x5s0eaKI/vVt0leV0OxCsILeTv2b55Ie/8fJg9cf8zfKus6dcwWbXIMtn dlJJUkkEhjjMqpFI5ZuRaHiQBTsd6Y2I8y2wxyndD6d2RRfmBqpsbK6i8u3dybmJpZgRKnpOJZE9 NqQV5cUB3p8srhAHqiU66IST8z7yBw0vlyePlSlWIoWoF4/ugTyO36sl4I70eKe5sfmaS4a80e8t VFAwjQyNSpBrX0hQg98PgDvC+L5F3/K1NGDiKW3uo2P2TKkZoaUNeLFqe9MHgnvC+KO5kGn6vp2p 2izxQ+tDMSY2kiCChfjWmzELuAe9OuVSFGmwG1kuo6E+sx6MIIJLrgJ/T4vXiu6/EI0QEla0LE+I +IYaNWu10n/lyWwj157S3URTm0MtzCgoB+8UIW992p7YxKkPmh/KPnCVHjkuoCrDjx9fjyVNwp+E fzfLCY7/AEsCSeqDTyn5sFm0D3E8YDrHbosvqIVKMGDEPJwArT7NCCenRoy25RXfv+1JYPLOtSys n1KWGgLH1g6LyUdK8aVIO3b6csO3QsVlvoOvkuz2dxVfgqUcjiOhqQPh+nCBSBG1STy7qrGqadPI 4b7AVVapG1Ap5b7/ACyEppMD0CYpf+YobMxwzXyR1MVxCC3HhQVVvib4TWnbD6SejIcQ71tn5o81 zcba3vjJHC4At2kT4aADblRht+yp/E4PDBPJAylFRyecrSNoxqX6PEvIu8YUTOzDcgqGdm3+eT/L 30QcxGwKPtrrULG3Ie+ufTkYmf1JFWJmoFEnpp8dSFUfE4JHWuWR08WHiy71moX6CWRTKCHqGUUq w/ylIbY5YI97GRQVrq9pa3ErcWIlpIW9FZKN4cHFMFUVO4RkfmiUlebRrGx4nnbwpUEn9oIrA7/P JmkBX1nzE1td6ZdzqJIoSA6lX4tUhiDSmzUyghstPrTz/oLhpZbARyNUqYxzUAkEfCzQ+4pTb3x8 I96fECUahqXl+9PqtaRMpNS02lwyuRSgrJ9YU4DA/gpEgpReY4bVlFsYUhgT9yBHxKvHLKdhzPp/ BxFN6Co/aqKzyLIc041KPy76bWl9aJe3KGeGKWW3dEBed5FAceo1F9Qio69dsYxNc1kQTySa98qa bOB6Gj2kAL8i0f1+JTQjgw9NI6GvQn7sNBC/TbR9PtxBp9sII7H6zBJFGZXC+usUnLlLV6Cjk8qH fw6NC02ejMbDzBq0VpAiPIsckUcyqkTSKyyRhia0/wAo7b4xiCpKJj17WI0TlE0ca8fT525IXltQ kDuWpt45LhCOIqsfmLVGpzuJloVBj9N1CE0ABoCOrUH4e7wheIoq2v8AUmUPLczQ9WoauRTwDBeo yNBlaInubVoVF5el3kIVYmHCrha8I+T0b7JO498G6ojSNO0+KF7pJYoryGLlPcoaN0qRX0weII2+ LYfLImR5FIiEz/LHWbm91+9Sa1lt5ngMt0JVKnmGjWOm9N4yK/DvTr1Ahj5s5cmGWw0KI0Fo5Apy UIwNT9FOmZO/e0bIoXPlp3CizUuKbSca0I7Vp9ONHvTYTCC30KeYhkMKVpREgZRQ+3M1yNlNBHR2 WiJHSOzVwoNPhTkAB1CqrdOvfBxHvTQUXh8rtGomsXovxJVXoD41KECnyx3XZDXei+WblCwlkBNV 4iR0DE9jwFaYbKKCXweVfL9vMjnT4A0dSs5L3B+fxP8AfUYFVH8s6De3AnSyt7iR6lpIy1aGld2k 2yQkR3oIBXx+UtH5h59LqAdwJgR3oKl/oxOSXevAO5aPI3lT4pDpZCMSwZ5Jq7n+VK7DsK/PBxy7 0mIcvlLyLxlT6pEjMDuw6MBQjkTyU7eGDikvDFBf8qt8nSMW+tOeIJBBhooA3p8BPT3yRylHhhQk /Kny1zYx3F2WIqGPFkAGwXjRd/cYPEK8AUl/LbQUnjR5ZpiQTxCcQKbfa4sP1YfFKPDCaN5F0Y26 iHSbT93uqsKDpsDIyFqsdqnIcZ72fAEJ/wAq90QzuV0a2HOgIVQ6V7/CehPc03xWk0byK0sGz3UR UfFFHcSEKANhT1KVpg4qXhQTfllcorpHqmo2/I1AjnYAb1qaV+/JcfuRwJI/5b39qLtjq2owW94x e64zh2YKpUtJzFfiT7Q/pgsLRZHYy3UVjBZWcMc0doqRRqf3knCNQgYiq0qF8cREBPEURaXGqMnK K09G1erK6InxE/tfCWqPA0++uHZG6sLqYV5wsioWUs8UvxVpVqhFGxG2/wDDAl1pJc3Uo+q3VqVW nBSauXBZWU8nJ2piqvbSa5dXvKO5ta28jRLE3pyc2oAXUq3JSPiQdP2tiKHBsqC866zaW1nCk1xH Y6rbNIkrVCh1biQh2AZXA5ddqU6VpVkNM4oX8hNYfUPNGoF7z60TZu4ABVVX1o+AoT4GtKbVyOI+ piZW/wD/2Q== uuid:2f435ec3-8984-6043-9af4-de358871dfb5 xmp.did:ed957888-9c42-442d-949b-0026a95e10ab uuid:5D20892493BFDB11914A8590D31508C8 proof:pdf xmp.iid:ded3124d-6f30-4f6b-bcd6-1cbcd9f742d6 xmp.did:ded3124d-6f30-4f6b-bcd6-1cbcd9f742d6 uuid:5D20892493BFDB11914A8590D31508C8 proof:pdf saved xmp.iid:ecd1c7cf-5fef-4044-9bf4-bd5fd9d680ec 2016-02-09T15:33:39+01:00 Adobe Illustrator CC 2015 (Macintosh) / saved xmp.iid:ed957888-9c42-442d-949b-0026a95e10ab 2016-02-09T17:29:24+01:00 Adobe Illustrator CC 2015 (Macintosh) / EmbedByReference /Users/felix/tmp/pdf/Channel_digital_image_CMYK_color.jpg uuid:02279014F8C3D911B37E9CCEB7A92F18 uuid:03279014F8C3D911B37E9CCEB7A92F18 /Users/felix/tmp/pdf/Channel_digital_image_CMYK_color.jpg uuid:02279014F8C3D911B37E9CCEB7A92F18 uuid:03279014F8C3D911B37E9CCEB7A92F18 Print False False 1 210.001556 297.000083 Millimeters Cyan Magenta Yellow Black Standard-Farbfeldgruppe 0 Weiß CMYK PROCESS 0.000000 0.000000 0.000000 0.000000 Schwarz CMYK PROCESS 0.000000 0.000000 0.000000 100.000000 CMYK Rot CMYK PROCESS 0.000000 100.000000 100.000000 0.000000 CMYK Gelb CMYK PROCESS 0.000000 0.000000 100.000000 0.000000 CMYK Grün CMYK PROCESS 100.000000 0.000000 100.000000 0.000000 CMYK Cyan CMYK PROCESS 100.000000 0.000000 0.000000 0.000000 CMYK Blau 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.843750 100.000000 89.843750 9.765625 C=0 M=90 Y=85 K=0 CMYK PROCESS 0.000000 89.843750 84.765625 0.000000 C=0 M=80 Y=95 K=0 CMYK PROCESS 0.000000 79.687500 94.921875 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 34.765625 84.765625 0.000000 C=5 M=0 Y=90 K=0 CMYK PROCESS 4.687500 0.000000 89.843750 0.000000 C=20 M=0 Y=100 K=0 CMYK PROCESS 19.921875 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 84.765625 9.765625 100.000000 9.765625 C=90 M=30 Y=95 K=30 CMYK PROCESS 89.843750 29.687500 94.921875 29.687500 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 79.687500 9.765625 44.921875 0.000000 C=70 M=15 Y=0 K=0 CMYK PROCESS 69.921875 14.843750 0.000000 0.000000 C=85 M=50 Y=0 K=0 CMYK PROCESS 84.765625 50.000000 0.000000 0.000000 C=100 M=95 Y=5 K=0 CMYK PROCESS 100.000000 94.921875 4.687500 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 34.765625 100.000000 34.765625 9.765625 C=10 M=100 Y=50 K=0 CMYK PROCESS 9.765625 100.000000 50.000000 0.000000 C=0 M=95 Y=20 K=0 CMYK PROCESS 0.000000 94.921875 19.921875 0.000000 C=25 M=25 Y=40 K=0 CMYK PROCESS 25.000000 25.000000 39.843750 0.000000 C=40 M=45 Y=50 K=5 CMYK PROCESS 39.843750 44.921875 50.000000 4.687500 C=50 M=50 Y=60 K=25 CMYK PROCESS 50.000000 50.000000 59.765625 25.000000 C=55 M=60 Y=65 K=40 CMYK PROCESS 54.687500 59.765625 64.843750 39.843750 C=25 M=40 Y=65 K=0 CMYK PROCESS 25.000000 39.843750 64.843750 0.000000 C=30 M=50 Y=75 K=10 CMYK PROCESS 29.687500 50.000000 75.000000 9.765625 C=35 M=60 Y=80 K=25 CMYK PROCESS 34.765625 59.765625 79.687500 25.000000 C=40 M=65 Y=90 K=35 CMYK PROCESS 39.843750 64.843750 89.843750 34.765625 C=40 M=70 Y=100 K=50 CMYK PROCESS 39.843750 69.921875 100.000000 50.000000 C=50 M=70 Y=80 K=70 CMYK PROCESS 50.000000 69.921875 79.687500 69.921875 Graustufen 1 C=0 M=0 Y=0 K=100 CMYK PROCESS 0.000000 0.000000 0.000000 100.000000 C=0 M=0 Y=0 K=90 CMYK PROCESS 0.000000 0.000000 0.000000 89.843750 C=0 M=0 Y=0 K=80 CMYK PROCESS 0.000000 0.000000 0.000000 79.687500 C=0 M=0 Y=0 K=70 CMYK PROCESS 0.000000 0.000000 0.000000 69.921875 C=0 M=0 Y=0 K=60 CMYK PROCESS 0.000000 0.000000 0.000000 59.765625 C=0 M=0 Y=0 K=50 CMYK PROCESS 0.000000 0.000000 0.000000 50.000000 C=0 M=0 Y=0 K=40 CMYK PROCESS 0.000000 0.000000 0.000000 39.843750 C=0 M=0 Y=0 K=30 CMYK PROCESS 0.000000 0.000000 0.000000 29.687500 C=0 M=0 Y=0 K=20 CMYK PROCESS 0.000000 0.000000 0.000000 19.921875 C=0 M=0 Y=0 K=10 CMYK PROCESS 0.000000 0.000000 0.000000 9.765625 C=0 M=0 Y=0 K=5 CMYK PROCESS 0.000000 0.000000 0.000000 4.687500 Strahlende Farben 1 C=0 M=100 Y=100 K=0 CMYK PROCESS 0.000000 100.000000 100.000000 0.000000 C=0 M=75 Y=100 K=0 CMYK PROCESS 0.000000 75.000000 100.000000 0.000000 C=0 M=10 Y=95 K=0 CMYK PROCESS 0.000000 9.765625 94.921875 0.000000 C=85 M=10 Y=100 K=0 CMYK PROCESS 84.765625 9.765625 100.000000 0.000000 C=100 M=90 Y=0 K=0 CMYK PROCESS 100.000000 89.843750 0.000000 0.000000 C=60 M=90 Y=0 K=0 CMYK PROCESS 59.765625 89.843750 0.000000 0.000000 Adobe PDF library 15.00 endstream endobj 3 0 obj <> endobj 7 0 obj <>/Resources<>/ProcSet[/PDF/ImageC]/Properties<>/XObject<>>>/Thumb 12 0 R/TrimBox[0.0 0.0 595.28 841.89]/Type/Page>> endobj 8 0 obj <>stream HKJ1}.`uR#bu1̈z0ҍt,a@ib|$d# śT3qپ^ e`R˿z *;ZF_fo^{zgtw0ՖLٗ6C͚ww &AiV,ՂmTxmn>`ѩ #Rkp]D{w|@pa<| O#}7f endstream endobj 12 0 obj <>stream 8;Z]"]l)mh'SW+#%hQV_!k@%Nc4nbl74N/lX2<:`Uf575_G\(,]as$nFQIQ0-N*uM ]Wb]ikE#ck.9Pt\aiq!#1Q0kKI02JZc^V"sm`gSs1 0ijPlcS*RHPLAjIB@`mN24(d&I@'2&/k;aA=:7g5,c*.:6N&X99QZDa1=9$0atCB? ]Hb&[lr7HjS=TLpRJu;HG,[HFs7#8248!)W>Q!hIguQ?Gfrqrj^#/5OXJs[*jKbe- oB5(p2(AKi92]MF8Y*'c5-VbVl&7JUIGD0CS`t+'H":2n3W[W"@:ao>VgWaR*DDOI WHG'Kfr;G:SRn_Oc7Zec.D'[]X>b600!a^bK%Tj:L[ ;aLc+PE3u-,.#0SU/WI^VtWgA!`N(c;a:7\:t#-S";Q,ifKi3i*'/b9&d/87OFYWt .*To_-cc,FRE'Hu16Wc-(-Y_bM^Ep1rB=>P!+`3V=ICW6,F/amJ>8"b=E6u`S4\]$ "f8s?/.cWpA!)_V;E3R-H9oZZM[%K^f#.DN0[lTfhSfAUBYf@U=no<'K.pIh;gA#] 1)ohLJX>FB^Z2Z=KGj=tj(Ae"Pg`.omIX.5?LSs$QNUK&!g5u+$(6I)K%u?I(pbZ^3-:_'d9QfB?ogWApWWHO$f[*to;$BDS?Ks&EL?\^=VL;\dCY@7@s O/g5".M:b[4^Zfp(:ZpWf*_(YMA!)%.QEj0I&b/1N$C1eY(gRm%O>A.(pS9'97&;r dbNAF-H>X2XXgBkj@Km2YFOY+D)P+&dg?TA+^7[DAh)"F[kG/taKYGC(N9FL2V@SX AUkG=M9dnR=`Nl69mU]Di-P`UDWmZ2\8,(%&"pM2;nVIkbloE=(>i*U*(jqa@GpC@ c2b+0^.(b](RQb,RUT/-/-"!P=Y$VG,Bken$n!LD$Z8*&Ec7.f`O i&LJ[5X.5ELj*j]F-T1d@1tiE-GB3*Q+#=SM_2Bi@Z)hHfOBbJr&"Hpb?ni~> endstream endobj 13 0 obj [/Indexed/DeviceRGB 255 14 0 R] endobj 14 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 11 0 obj <>/Filter/FlateDecode/Height 333/Intent/RelativeColorimetric/Length 638079/Name/X/Subtype/Image/Type/XObject/Width 500>>stream HW/Mb"&f4cMDԉX&ƊXQ " A`XsLN23g>هݗݧ}p=wBCU (O^UvcH#_vc]3IBF>oDf(Ľa%)pGX$B 26s2,98Ѣw;ӣ$,V+Wg-L ;_vYT-ޮ-aJg6*/  XK|?TywTGbL|%xfkOc߭+`(N gH(J 2('܇Gw2#0_L "XŹNn-–mG«lB0@b(}*^ׯZSc82#{%-=e]X|0 }pjt=qgǤx˟y֏8+ƾCRTa=3R xlg~LiYY"gyq*o}~Wo5Ƈ23bPq}$DO#N*”DhH#:l? eUhTsߙ.2nVp"eجUى!oq4j *Ѥ:.zӵYiJ"q8i^ЛЅQVv)6["UhpvUNmxMzGhVG'z1xKynIo47UN'euO.RKAmL;$K&jQ9癛<8nT g`hpSڶ>hahEaSפjxҌ1̤1ũ5=:'/äGP5d(%CJ :)>,j2R|581|;%"7 g`=̮VZu*Q2!3?m\PN4VivtkFVT&ΖH]fsdf_OSi. %Yx"<+`R!Lun6 sY`e'ӎ\h=&mYꕱd̖ހ2Pa߭gË3Õ·~h7 -zAqf #njXu؁I(:ԛ目KʺzRcd}93my n϶Ľl,!潢$?X^FՒe[l gVoFǸV;ϝZIį! h`?9 ˚ʶ:*ܭwVH!66 Xfk_w ̊/=!Im9]*[TV؝bl$bSǚ$^cb#ng|"`Y헼?!r>TdYz8 SC&{p46zcju12<8E @ԤY栗 ЛpdOȾy:.UǞkl;p4YOEgoywG>Uz{Z{}4@y]mnu}N{*ﯘW- -Q5ql ÷jNGrzowG{z-bb}HT-! 8XݬX•o4vm.VYs*Ӟ/7e #,  }|̾^8EQTCfjc 5S4)AHd2G15Uu>k{|H(΁WIC<>@qW*#l+uSf^ (ۉF$,*{bGg˩^[A7S1h~`JHr&{ii(%?<ι[pnpę fE;SߡNU.L+l#o8/-6mLU ShkEFheW(1#T"}4 )"Z%7 R@;nj;sg6԰1ϚiNύ-%_mqٹhr@Z<%DXh%V ܮzZy.(܄ |XoQ\>杯ͯ_m_o˃ݳˎyl3klm91qςC,@ Oؿo`tHyPfb9Cƺque1]]v_Xɩ7߬ں=F|Ew gF`"Ys/0{Vs>ږ+5߶w.wW~=@ 'CmI69D?Y?RfQw5cwUjg!MϠ:';V0%M4-{jvɴ(9RFͅd8su x>u}89)ݨZPl'PKrǴ"P/>NxwgG3t=;&dYOkIGI)0VR-vչDA))뫠>? zk 17N`c1LO 7yS(|ܒ6-N mP荦;%tsЦ]a_jl˗QiFP %c28݀VJw`gm՞ 2@##tU5ǁҲƶ|z^fiRR={lҙO#F6)6T%E$N=w94G=9Ͱ§@N@[ۭm:7޷/& ҹe>n:4,۫k{bЎpL:!CeK訨 MSJi"sZ rl^|$*6@{! 7[-0Z;5]ɱxr;4H/&*П+x D3y!3 6+vq5_k57V͡~S~o+VUnV8M*Y"HO j\y!B ?ܚ/[WrwMߜ-(M{4#).<O8Wή5˯mK2jf9Ki+Mlj7y 慷Br|; |{C$xb]@aRD!& -aow z\{VQ23$JY_|4riu.0{/0R0opmV\F 'Z#G$HP d5*h9 nG^9_/jKGT/,i8SF5 g)"Z\ѣx>X;1ǶVsruZF~t31 R2D'#w@(a/_iV#>j)q1A)9"δUeN,vGq{2_]~̷.֜͢^V'Tb>]vWrIXJM NQe鬃c̏݃(|p?w>с"1w . 0!D ECoC&h"5iН{6"8?;*Z%; EئI^/MC_7ux詮Y P O! S>A  D lp7:kL;jmt:mMa?&F )(1\OmmwWfl0bM4ӫ tDBh#@ z*P $o&$YeE&3sW9Raikˡ=kvҮ~q(Sy+C!j\2ZłIv|[^༡ՍaZA:q$n͑BP vhkWhyÌ6⺫R__)El(j /t1l^t$ 66ܻ(Ki$Ϯ4 ++w[jĚoDij;&灬K~lⳊ53ϵ뙻hRΐlU*b3 ܡ׫>ӗ\lِv2ۨ8V{v>pm;w2N %oxwy-ig7u|%:n͌s8ɛ!VjS\Vٕ#|ylb&[SPWF{ܤ+_/^Z-p^LN]XZgz.s2dyb87<`ntwm$ZįP)ىh#֗(9RLS;J6(7'Vϟ ~[S~.ؒg ܆뫯:47 "%0Fƍ~et iY0>УŌ1r>x!3u܅κ [u^. *֩Bg15㞪*35ޅ x_tc2ʬ8ɉ~Z0@B:P4<Κ\4 6dGwKͨzx Rnި  wA]gڽ]Cfs>6t,MqھJY&AOm*h_0 O,ji8^i.{Ƥ:P;u¡?JH|,75LF45ݐ)*3[ۘ9R[ "vN !ZZ*-ZãQf~W:B%0~(X^x[-#ɤ(@ߕ;|G~H\I߿_|nVwSj~?(s$Zkt?-:'j'GИ^%[hL_4G^|ȗTc|0_ŢTg&Z/ fӕ^Yk<6[Ͽ/GR@.o4[儆\xS5`gX`;)Ŏ4`T?BzQ"ByZ(,ޤl~/Bmo,VdЅ!voY!-u)!М>qA*c= IaH 9!)|fpX_YyA,jmj3NlφO JVqO¼VɹrƠ{k?g=?Jy|]gs .yA); 1hPw(~B) $VTte|Mgk҈Sl䮎vi/|1n8L'TEC˧0Ԓ@Gj 1 E@ar0֤Bv(O֒,H@Ȋ Ba;@ tIL -W:q(S:4;H($?_$!a(`lԆ"X \D 흌/lcB.ǫ Y&tNFFDa\8(ln*}͵6& Tؘ J$?V=+Ƭ< S\^_iYGMI,-ލǂޢQTDAD)KDϜ2\̚v֚?aZy~~׎WRD0. 4.xx% '$/ 1AP A.$$ɁpS DPC5N24ݗPHAl]bȪPhzcwkW24z˒Qx4VȫqK[JS.18R>,({ x&pCQrfR.իgg6*?EnmX;ȏ̫-n[)*N2x_C^PX@|U2 r/q)/ʊ≌A3?l^j պHףTFZ w{,. žQ|r>pOvҧ{i3dso\^nLxQ~c]bkq>)>9$yCsQWtLjvFmӉkz˩H诋%{C `- {'*rXX}/3zT}]7`ƲlGfYmk;elKm4U2XDwb,Z mWC{U )yP㯗zMin/ʳ7gDiٕ;Exa\̶յ/w2^˧!tJ"?| ΛL qOt0ӥnd(oMdG]6:вx:66x%.DyW1("jseb™k:&b_ʋ` -b75[OWS od i*o!'17zV.1hRԳf ũq[9ml-Z>).vն핍zԌ݃wN3Ki%FƒBC| /*}ŽVjIb(%= ɎF_xa+7q(Z W~.Ԃ0hN[٪DeZŸ:;(u!õU<%nHKa*<Ų˞=5H;'0e3`˨XcA0ҩdtڜ$G'5δ0 0&ME<ɀg=/;\tl<|y񚉿T4Us`EN쨏MzQ5'uo#if~[?RVGw3&qI[6"uq(Y8&$0c<|ܭ67ž'# r`]<0>X@>YݮXA V;(C~]N$xH Nb,xBJ:+ʉ>hk1/g?'!iaFU%o[nlxsjR}XlfqWc_e>l]^,W[w6DґAT"&(DJ0 FB:BAA^g;[Y9gXļJ|6BuNnrY"+ZVpi]3hz|^h{;AD)yM]e`ynuMod c8}nP4nM&DI;xOE4ƪh-Xŧ+9v[{36S2ɏ䄎7S[=eQ[i.73&DCޖ%)AcWP> #'RkMչOaъjj0;aחbC8\Z4qjj&򚖁A~l"  ɧn/ޙjAr&QIrbvt:o칖|/II鑷P}̥Ȍ˳Ҡ8# uM20i86?B治-7aD"9Q%"Q]5|d={>[m'&Sхu|!qy\OBwj_"4q%,qlnýZܮcƅg׉mȾq6״E!pHďD-!tj ԽH7%YZa\It5  gNʪcqn]_2~;2OLev] }f@%%٥rB :}3h[@ &Q ؿnɟ./ʆދ?>]ϝ^}յ}aY.zFͣ;w*=ʅkDq$_ 3C5\\[K"R,1p.ВC"akrd3䶝9?X7vw͎^ZR]l?}(#]5ԙ>9#,'>0yE0ʍix |lm~f:Im4F֒$ݜ ͼbX=w!!S_aga E"5W~2Z\00rr_u*iiXh輊t0y!91{>}ob{+Z)د^xpfo., [;O2q(N7l (߄%+}eh_cTB|Zs̗WAkLG±!YpCY&e~^s]eo~eEn lބfŝ6tokUg.ğJ71Qx<< !7 -K3QI-&jtLkٛ%*U>4= wǺLb8zP>K̋0ĥ--mYkj1NUOGJ} 5AFE@}a2.#IHH,y[+"$߂ (H#< Bgk;?ljKbfKԈgұɮHs}a,`$Pi`=5J3# %̧ȎU!=A,5)O`tF䙧ea(8BuBFͿA-6"Е~XeTzǽ ܷ, je#b>\[U[ţ-ކ: w]oJ,K+fzZʝ|<7<.*eJڳD7,rYxt")L|rmh bXek>86A+һ:+PEIn).Ϧ4< xK0&K%FƊ1"{CPX@ް  vs1ggvf_Oo}_l4Ρ U~d _헸uL` YfrF[H6'<YHY)KKGKfPPH+ FZʜfܧMl\DAm/FC4e39 |Ë͹z_nA1¯B6]09ab8[@.L.'R4d&.Lj2PHP_Ā}'o:̍p흝_lxitKݓ3ũoaNHԳH@by@h#K(G!:p e,JW] 8ŽT;\Ow[?74ˁƳ<7\|غ|ݲ]h*3-)kOSQ"^a}䏃?-7?yY/43~rOwl9fiO>c-UjY5VB S m%yHef20iH8(ʳ,I 0ބzKhcv˰}EwZ?3nM7&;QX@ &A'8=3<u@$uX-) PDR,z su&Rjy0/8ޜ@ *@SvţQ Evoε.T !W{]H8DP kϣ!-8K=N|IHU"P x%$|Gy,Ihc !388oq.rDSRr~oL "eξn>0jfc[i[s&0q+; bPp@pAZr07(3 ix/%Co-{?B 7.80x IA:8NQ%VmM=N#Fz9o dz"p/Ȉ_WȡE:JYtjWmʯfjLKccO~N/"?f{ZYQHrC8ŋHA* }8ihf 4J&Mwxur ׃S]e$ZnSm*vd+{=Gj;ɯyo{F P55[$+&*3Ӊ^iIayaTjTZD""-ސK$C/E>vkwugY(2YcvõX\]aP2U r!`sKZY%-N\;8mzFbgzܘ) >͌UZũFJSqJX^p [ 5RAٮX΂-<:r(1ypsM3YtTf",?eER?]ڤD5 {ĒXCBK$$"B6"R5Z~g\\s\w\|yxY70P[C5||o]cI429iR'ya(P`C-*ik`B=æ@-(K,n]|e咰YT`&l`7]:n>;?|;flj{Ynd%4HЂ|* Sm詤m,LdzhPzS0"@xp&VZD RB9 -Nͷ_?m_<1nMȌypW)T(ʁE6^kO~n{uarڱnïs7;ͅɲwl\3XKNDzC,x /`C ^Rqah+h'ZֻeIw,~ɍ'Aϛ (}dDA>Xק&zr߯gՎӃaȲe7ʹh_yO6B,dAez[r7x z'n_o.[lxN"?'x[5#=cnboaxeLy9[c RROBY~#M#@:yCB,ʼ2pUx S6Bk~ GZfl"d[YQ{f J!cOiΒьS }U\\ +OBma[Mq&p nL4Z*3I x"T`$H "<&2S!%g<$ G1e`LZ,nPy0k|s"Ax@bc#$3UBXw=G$lRjeƜMN/=t3rΌD4W6c$X?شm=?;:Wۇ߼~/!DʺsSBasz6]3ZkU3.>T[0QhWxG3'A(DULk1,L9DN  yO5"#jfɲ28gvtQ)E 1֞@rx"JyoCboio㍵]Աi:0yc[Z]ZFmI-<3ʇEyQ172(cPCEi̲k, ciAڵ$02 6nE\X&yj'TNV*K5vybV,s-.<>~nnk49=0̘ky0N auS&vboc.elsHXEՅQHYZj C1OBƲ3a2)3qkl~ d\Z82TPOgb< s0:(smdǬ4emT@3Ə [R\]i%Z11&Fc؈&V[HP RE@5hbΚ[f~r {3zczNvQfc,LDTQTHt r4ӠK]ZJ` -,Dy#(#4wì`qh 7tS;:#lCu`#IۖF 0J-@"0Fj%f'j^>lqײqc:ym8hR_P+ Һȣwք.3^e rg<4.̖K̼wu]ݾ_T+qUR}T*YYN1]F΂D-M)HEcbCo'9 \`w"M A۳ʳͺ}[ln/+ʾ`iz*:Վ1aX )v;.qEN ;AŽ~H.նCld x&}b=tSR %QA h&dTXmgzUuwmX;Gۧ;e'C227"~THNȈyud`H~KH~G cѹLq\DNsg"K3ٳ f * \&3n[a QS}a֍,YzR]*G@K+*T/jmfo%>;\_sWLČE[&dL%x?p"&} 1-h?ؕJ&]E!H@DCP}v$ yJt "i~@KbAc吺K2`bM {2N #rvxB_}&AP/P@ qGRHb Áݜ קBCz,vqWX):B=Z4=ºkommOSW2fM)"MheR"z{5dc柧Z+P3\x&WQpG)"-5y{ZxPwM< wȉOlkӼ ¦ph2FNQd|/

-Ƣ ]5g=̋կ0MʑeG/-B)+E .`mtq>%Irk2XQ8@I֪B֖$U{Mʅ|U=U)Lmy *P_R ZYYqƊƕ ɟ{lÑת( zjDw.61gU Ms# .#0_lʓPDl*J0sBwʑ'A].Ƿi PωU99 ҈j:^ENަ{D<$DEj}o׼Sz̋I /pzʹȍ%M1e[s[6|1}er2qI&fD|YeVl+%M"ޘge*aǣ/ꕸvB 5dPyM3 -L*Ɋ &$>I@#LiN %YW#CbD |7X]Dy P:9ǀ7e%;`R&:5D0{ʬ8IVwW mF4|ްm[[qoұ s=|:wPBBK ^Ut0ԢEX?nٜ[7?\{Ν ryj?e了DMl9*SsʁBsZc8k*f , 1yI@@ܚsêV>>>y\t R>?88NotS0Y\rAU;X^exPcdQ<#fbcC|82.>"@Q z@Dd̯Ab 魈awÇ˕Îܶz~㮼:G|e18?#5?B@=2sߩǜM6/Q!&BuT}k?\xGfdz%M]z}e]"PXiQ 8d'@ɽ@m%B N.D,NҹtgHk}ח#љLٵUVl>KwY*tI;P mEyIf9Rkv/ot?T<ОZ${[|:}k36`7Xʛ=5b Pv\xىMDxd3MZ Po(=ӻ 0H,v+.MO杽AǞ} -tKtL[C+Cٷy.^>u2Wӕe%a+odw=b70_b`eq0[]ȼîMӉjp9pmJHl)1EٱИ,0kċhH~,Ӡ:'0 Sq hMO0}DQ'פ#fES0w"IFnV+-b]і{ۧ0PT<24(ps 7̊ H8DDd2cLndWzbƲTi^ؕ rƝ/bn7.dsW܏ݪSZ!鬐/N8vwP3Bp wPVXJMZ*Iٿ,BߠN24⨍yGIu 7?N>v>nk^3K'QG{B':kaI A$(N@4=_[#+̳&'#bCʱW2./geb,|~xYcӓ#Qsԗ l;>A wvK^;vvW-+ͫu+,p ]UYʕBbv_EȄ d_ `9{W]ǧ#/յn\GѮldqMв!.BeWk0WeZ2gS0_N&IfwQQ`ƽZN=o|ܼiK 42*Dzd5( %0!DVs` 0T_oפ!Qhd4AWc4|/nYv2&Q8j.;UD'Qt'w )m E&גT4{cU03PّXx櫎,ז{ՎԪrj2縌}Fm})ˎna{PGK&!Eg,ŎtB[Y qXB<nW.i_1IFCf] ,TtJg.chtJm5,WCrL !i|AqygMN oV~2~:nxa}كQn,Ѧ"*Dk_bf*PSwN;3]DxNy-4`Ԛ"kt1c=>&pFy#TŃx{G.~/~np4:ts.4- #s `&mй>Y߱ K&poxt7Oh㍿/j($d FlG.iDq, ͻQ7=\u@YASr x›ThK( F/߀'xLG =C cCq qP*MYj|uRr -Adv6ZFtژrթx{T%WԽJ`c,29e*siF-gF/:kEʵy5yuN^QKБ^we(tqdL' Ľ]另{ER$֔fY疣ҹ:&?1.Aԡ%.;6nn/riKsh.Lc1B&B{3<@-9ZqnK#EUՙơ,-VF7cDU<QJd[ ԒoIe30ʤ˾Q0hSf\0[C eGYnXq8v7<¸g;FnwR5͘%b "Wx z(5(UnGGri7:k`m\0tƸĸ;.﻾LCtn@YM"ZhhKTTF'Zy5ze>P|B8gμK]]?-"Qj38H6ƻ(**Ch~fdwuD3g/v#DðɵFJɖNgr|ӠyD/H0>1?-]*\9J)cG0<+ũhr}mˠYblPoSBJ`E9y77:~[[6V֕[+\*POtBa7Pb 6jB' m,A8pȌ &R&{k&پeە-[v0>kͥN[ZȚ ]7{~#G1 e^p}rǕuz>:7FSejˍrYhcQ28N"sAo}ɍnO 1p,) rF@z, %byJt!ztgEAvt0L(B^$ JOnU;'&W`?:T`m(jN%2-?e?VmEIW<)Q3-4)SGPS 1ITĜs:Vgu^ݻ}sskk}^y>Ϫb]ζ c;>ڰz}JO#*ӧc ˹6l(I"KC9;P2<عz|tq?ԭ0#+vh>k1W'aJF,u,4i"/hX69Ҷ<b;i`YBm_h0Mna+>Qx7&[ͣxW<\ϮCWM0_/]OTMV!NOBOav2^M`K##sWxO-ݘ^*y2=Q,=׻zOB<.ED$$`BwaK?f_;Sͭ `Y7Ƣ++iS=Qd|:ZnH7luc@* y%)14&$߽|f@hShQ6=d}cO}o @e*c߉/a+FB6TxH`hO4.]uOۤv梣)K-wJ]L-z% vLG3*¼PYpV4<q)zEڳ%Ʈ 1@P_8Ć )?ۈ£H"3fg sA)hBtV7wVi4APWK4P;-}"bS5sؑ-D z߇^GEoHt+]jpڪT"W{QQrL_a=qn'S+RNLě$xpjs@+a7(}c666okClC*.ijemO?p[wG&d[w :L[2Q XG>/O H&V#H@wT%]n,/L@,s(B6 Iʲ- :1ZgCRϊ2xb2T5DIo&?3JaKx[.pHj^j UR j+Dx1_@ 7؄澧El{W&Z],.RMgH'yQPG7K&H/R)^Y"o<0{G^u>f5Qjb;^Yu9}-{KT9Mo䢧HV )ңټħtGi&h{9P_3".~ ._5~ }HL@ ;+awD ^iƌF%ºgz V*NLCVmCy<<$NP{GEm410ԍKC c|NZ"b*LĀ8DLyvgǷ1 EyٟĥޤVw锝﹏KVx3lOJ/ߩ42w ?7@} m-G0rQt ̢~w:\ߝ_?\C{l C=]Px<''N-?3a>wZ~q9L<^7$\V6lfׂ[mQy^R3:%o1輄۠$="r\K {?l=$XHnETͺ pP p묗֭o;|廾pΝQ.e\9д9eZ49ц eUuX. I MwޟUvZ]04uS4,yk"k/1O  ?EX zjkм3489~$C]o}*} a?eڕfeq1K;.QFŀʪ(]Fe=ښL?9s·:9깫6| ڦcܾƚ@UOAN:fmJ5z6Z;ܔ nX}FJ*a9&&rwج;G7N٥yVhXBϣf^!%>?3@}cHKGvЇ|^DFi 'L S:k%H_ I{yF=n\ǻpk]UɳmPUs`4,~6gvWw=u[YL{ yY D$qr(=/y4='  I芅Xs \ͻ3?ER5PŇS Z|BKn+ (aH_m>RMɰr/Zz%KEaηY;1oZ2]ŋB[NM6˶Mw}`r*RBC():a[ A+[H>]L2wkյjEV& k+|UCP?%yOe i<y ׍/zMˢ `90ё2TکQb}iF@VB8tՔiT,5)C-1P~4h++@3@2"` nߟJz 6Uzk߱&P-|LMFJ9V;2|W3FSO0 |-5]CY6~vuG.q٢Myo8ן޹ Rxt-{Ûi0MiT]lZT覲l ;80>7?APCVXe3 ޏx _U饽LI*gɏ!q< !NfvLέӶ ۜlK%[kT4%tQBaZJV=))eһ_ G~&G~]X!gәȧn~h *Ud݄;\JF9T.g(L{}Á@3PeY#{) d\B){.ֱ{ֱvcw_oޞSޑyvl?VN ޙUeef~r0yu*I~jf;Ŀu߷߿8-翭Y./NɪsN*U|81‑KG~ VUǬ5Aa35/ Q"hCɌy-Ovvȑ8Rͼ⯛Ztr\}q\_97o/SǗzPqh0yol5_?6 {ruc7~jW'> zՒٛP{b8 $<) As2\wdcmߨRkGZ`_Ա66{לq'窱DEDNI A qxUdy9zR¯PtXmn&OfՊÇ]$:`Jij*]&Gw;U`};ճVCcŸ?=Q6QA,$Q 7dekVdY/cAlBm* m.tF, ?>W66) A)k0G=337H_כbj]s"6楠=0dH Y $_ž) "%A9q7`gs>"eY],-Om-EgJkZ}NKo~K`΋=$@Xj+ɣL U^/ ^ Bq?fv&(zޅ&|@>,_\bZ%7.'@JT$z )d`lLH69Toon٩W3FlEɖYl/!$ U<G ^l_=Ռ/E 4"P9]N ke)_R ș8w ]:m;:sOclYLR =E\8/| )ZdÙn*&$+N5??hW7;wm>Îsyyl.J*&Œ[=f`˶9 u~{Coᛷy}ucy(@P:OS P:|2Gං?<bčt3ѥ(zkP4 U/ʴD@LFL3G,@s SOB 3A[u_AIdޜD۵c>%WHӌq]JާJw'c4" l+rAW8E""$RQ(V&#]::,:N:/'["'+p(rK2Ǩv4y;cYanmlN6kslYqg' c/^QzvNIгnt?} ,F:_]&ٕķj+Pw'KR Rp0X~^I` _<eC Sf% )80E [TovR^*J&AZxl0IF JaXwύWUu%9 P* hvhPۑug zK*f+ a2:T<>;vym?4/Q5P&ԔAhQ^5aODz-T xW3>?5Av )[]EޙO%##,8/&p_;֮>=#woXZ6g;I%{eL9\ YǙ ו>ߗs|eb<:=myfwie`yuz0V'-cq\VO 9צGTGNQ7*^G92*|Sڷ s~pƯrHMFŽο sRi`S& {Y7 Zf^f- `C핅az`U7C}JWtצIpm|읟~qn}p.D"jp,~6/UB>0_}q,_>9ʪCB6 CVI(J@f\/rQEOAOssL<|m=uSV8W^Uu95ED ė"CDVE)shZ+qa{`gvmG&aɊI"EQ ӯ ʳn dCmV 0S -f3QdB^"/b0A.'٘6kr =^"lL~RC*ǀ^ݦӓm*#׏toڈbuS%Zuҥ-a)VddP˯aYDZyyc* %=j#S+YnY'[tbm^jl0 nr+NFRoR1F ~'z8ZN0/=؝* 2b^5Wr}ZdBlP[ Ume1`eN%CP+ EC4==<:;Zf]Wpn5@,Q7Év9G|._PM<% X }h1wUk`N(-5yv6sj.{}eQ '3܎yn_HA*uk]3j_7ZB^3DbDLNŢruIk/w?#NKn><ݏJChH7~*q2ۢb/&7^~J] tVRI*G^%w`U0.mNߥ8Z+" nGi!VcЪw- 43Ar\,H `c<^xBΡްڭrYzRG6/I3dPfi(~R)-> "Cp:Y^ɁzB>KSTȰ}v?_8BG;{_];L"5!f|ml:hM eKhî=ovl # yY^M5;wG 7ʆT"c,н%3 Κ|o7\=Ӂѣu)m^Nx,N{Jr@ӽ$0CٵMa|k-$!ew8 ֒PW]g7@"?[$ 9>| <<6 u@56^^C9٠ 9QWp^F/:9Eo" aw}XK6> tvKQ*^5݋ǒbԥo l>X7;*·`hgT0 ?Ѱr`o`a(*xc5[bK[XPc0*c(` HQ*HE-ɦs3wfgvgvyEmy։RK#90Ab9t"qX *.1Hٙ5]tn|xo7yZ/Hf9]%n/Y&nt6ݪٛV$xd@H{e&?P lxm@:Թa2 u3%+ƴJgFiIQrAP@LEsdWoNdD(iZ|ˎCMv,40DBY2.;؉:詆G^/*@Řx$a^P r'F}wKHT5W2{>&v&.HTp& hVLdPơtTDJ;ޑrDSscYUeq}/F2{}[Zqm\y38M.w=FQexZ6LUk,[)Ztzf^WLEkxF^lRH< Խ >ʡcIqNaV߾Dkb> ; QۧӑvaS }|lekFzjAY\{Jڭ2@\ 6%ٺU *j׉_J-Ex$o.E͟MM'd ;xpve3_Z*S>ONrCgrÁNit2M.'sG\a@-2\Aή\DWH'YEݘ]`^W5x~j6wY%6#EF?OqXE0ZW df:8!L0G)ѫ|Rz;2<?B/ϑ dB* 0G{ܧW ޕ7 $mt.-RT- j bĒD!%"D6"Znz{̇s|g&x?<缿ҏ+.wm[D3JKf_yz wZŕdvTLlt`c}hۛ0OpI4B!ziPz(+@Ab?rJT5?MwK|#sϢes(%!YwX LFOD1 L_i>1;~vvom8jCnvXƓ҉ETktf|hXËt@eo F%WaICXn)̓tH$$ĪhUQ)|3cX9M6|1{mB6ZzNWնiHpف`$ +ޥ?Z%_Α. <:ţG]5k{iup|X?8_Ok+mSʢV-b&' "Yݷ{MB4YMLŴ)ǀ,O>Q0 (\ 䒧h-A k]9ޙ,y$l29 SqVGhlS.qƩ2* L'l^hMdfFY:.;{LD9YjyfjꞒN֮>q9܇v4MVfF c84f:AFW#N,&&mnG/ˑON߷z0U2ȟblz-_ҡ\(Ssd2b)77R/b'cW,\k7rsg˶d*[5By,s ~Fގ{P3CM~6XӏtNQ0{ThM7]x]C@S0oRk[Wj(@pi*%O_zPLֽLr謪)jfJ㞣䶫pz+5Q4 H,i0׋,HI7"0(;AAh7W /9#wl^uAZd?#2;EP0h(!G$?6~@wQbmPHE"A+%vx݂{:,}Kac,z9]O_Q\,_N&R[ڀO.I)eޥ- گKK/W֗gy;z}[ߜ?rUɊ͋Fh{}(̵Iz-pHGTY'MqOC=:b~Iqvyya=gpv0s/F kMV*(ucůE9KlatF0 ݘ¡9mdv.lܲ~Ӻ-Ή NR}>Ώ k^Ȥ|qL3> x4fLGEeHevfkj> }N!\~'捀eSe֞?Xj#.ZB  n7) o?}x33nIX8܉v!:z>-o>58?X..E~ nGܽIhiɿ }eOXoDS1[Kpi/5Ӈ>#V6θzGCc7G5AN底6)f|t>F6J6VK )Μd.LJATdDuؕ׶+m: X,f?4.; ET, Aеȏ绚,hazZ֮T#%S*:>i X8F5ȸS4ONNW5#z+߄͐ЩW<-~oQ H *_trxD^gOͥ˫RpKR훽Z{n#i.E\ZD^~bz!?07עlNO'P b>$5qL)KM,0ɑ!Z).o6=:ǬmT[RTJ URJP3 9DIFy2T޶ga{ֺ#s{o>/% m.(״a1[;3:6#eܘC3xs'|fԵXx*&zP_t4ѵq"(Fpa(Nh,܁J0h} և7(=Qu+Aw]xKתAgE.[_wa7\ى3H )nu(!C71# }zܾlkUpjc&r}þmk: <2zV$+6֪Zg.^2´NsIZ)I)|$7<<|KtKyvT Q_;TYTg~{ *TǣM@gkY] . ?EI`95/MqXJf@Jc}SmuPÐ3ͱEcT*7/=TR%j %g$0L6̰ofOZ/tyd1f@O|}SѦGZp2~ H-pxlntba e43!Tͱ)] `d oI4[qlnV$Ъs&CMcq!8=x#ë|l}>8?]<_Y ~.]/ΝK|p޹tϿk"aKg#Z ފFx$f`sV v\뼐myf# iB  V ] ϰ'8Yۏ=?OIH} Ity„$Q6ƹ1C$eb}qZ0q)HOĎ'wj5:O!Nѥ7xyی\![{{zp5N̻uC*XҤx9Aa[4Ll. V,$⡺Nmwpf!TJ@\ИG,AUgŷn"`# S?Ժηq^J,L#e9TEw"":Z߃P)\Y{wayL魻ћLb#9]83+d<;}@[wY|a;N5G5P8FBE:ª2 vN# o8/v.A׋p$ڼ P iqܱ-EA8bO Y ch45] Ue L!k`(B77xW@T(G+dVVl_A (vN}ܑxp7XpRU|f#z8?½kSX_]PaAm|Y joC= PU 9ImEb55fv & &`dӛNܪQa>[:5Pq&T܄ek0DR|%Me7=-bFo3s %M% c]D@/;%Ue"8q{V KB jlosj2kx8@j@MtFqG`x4I/fB_rg3; _f/lȵCģ55tݬʽ6- '[^ŖwiS)ϵ+NֻhӮ_'dik~1Y ui1;9|b0&d i7M%3,%#^{pIAYp97zș#"V}h')^7=`G܇ݭȊ\soǬ}!6/3fàphއ[azFv'Mb- 쬈IUDn}ފ9.}B]a(sѐ.0 %9( ;5{qӥI9&?z?}u''zAx6 ]E7~E?]yovT5hOX6bݒ1q分gEmK6wx A{?~ƼoПW7ɵgs̻wϮG6Ve dк]\,dAp\1 vug.t uU}DL]s4qXG7 +lSO_t0.F]sǡ*ꞙJUWrc)hPZ {}W?y+}y<!4ѰIEk.lfvYS7eg mw-ߞ54٢-fqcю[›\05فG1Z*׼B}:nG8ttZ-ճr*-&.U֦a!.Z^AhD/)u &pO$N:.; d|\,h3]{|[]vJgdAvcT lcyi0_h|

3M,њ_'mƩtۼ42Sjmb,4.@)FnV<JSA#=̶׀Ij9d2#: Nw֑돫Ч 9;8vRX?*s_n-EXd(zv|E,'h} =Db悢|]P #gyrcU f4ۉ< *al}z0 E^ q4g~d_NNէ9094ww/l_WuYKN%ꤼ!R@8BFOtƨDPlAٸۺxW%U#uEKE*:XO4/1S <>\dJ<ʰ}հ~ >4èprm!iÞc^02IJkQEM[ؕJ(QBB$&HBI$b*՞s'r]w=l?+-22h65zT {n%g9T,0E#É^nf<;1mqㆆnW"e~&Bsǣ]] le/Z ע^=x,džb$h,y@F׾CPط5e0>N<;s֧ RQ㩙۴\-ᄉJL_&'CvN#ٽ3XBp/:ba?l qP0bfgӶ=hUyl6zsa-{k}BNXMnp8,ͪwDNʕ'ǽYdfb*V:821M(XnTv (mhe;FLͳD].Hi`}6}vXuwhJycA:5`mn.(5Z/øKֲİ<|74؍LDMjXxT&:&"? i7.Lxz\TVT v͕ ,2H4%;˲(% T^LwWNYX2kJB(ICe@Uv243 :O͹bs֞(y Zy8-DS-hÚue`!CeDx![ ɘis-y: ew1|7?8S /h {"vw1v=w_mߜUqo,gvέ45>2FMRa6%dz~^[<.]_:zϯ{Ծ9|ZdgjtwpvdŻ74GPK{ZUPa&/zcoc;G𨥜$xka}ttsY 0vվTD/+ 9}cMnM+J|PUZAѱIc|uڮ~z>qfsY$d|_Z:~ӽ8BD[d֫?iTTcYȹ tڶ̥Ȫ4~M,PzvjU_׽;ڵسU疢׾a",t0BHOXVU'2iblI\3LZ~7aJٶcS̾̅ɶx\Ej |^(}/ORSM~tqZ/. B\)&` RR1QF1Z O7KreXG?n{eIkbP%$uZt]<*뢾E})ݙ wƓ;}u5lҸါyj@uHvDe`O2P%QIB^8l{&0I(B$xG ղb`#T̀`}q<@i<`%P- Qjp4+zoa>R3Υӣ!nl!=zrypU떉鑟H݈Wu^v\hҹTh, $K2GWF&jTS՟j8VdHQPU/uSyR T`_^kD5ᅰD%Oh,A=ݨwװvm?izRYr668[BvJ%UW27 VS!1ԒPhGd( - pL~2.ЮK̀P}? jTGwErd!.N;,Zv "ט*+MܧhNRJ`.Viɭ5t<j'?%Vwjy.y iGgLJ|wۭ^Fɰ?'ɏPTZRgaSIB "uH6 I"g" H$BsWg/={ͬ5g_0y]籯[{TBA`R0q&$(XYS :4r0ôrPG&҄["C2h-CsI*Z&Gq?4]( 풼a}{ Azkg6 =!;cBQH(F%¡pa^yVVb% GxYb\ DюD﯉JiN@HJg., FD ʵF[lj'j~0'o`[NYߒK̩&LLEiؔ{HD2tTK5q?Mߚ\W^ISh&2;ԂrzَqG>ޖ]X;6G' 1w3q^<0/w?|_ߜWY2w6w;'7ƿ=I_+SCe#RٱghXVi;KğCqphǣ8P;}F ~f/~' Ewf؎?L@d:SbC5g4,3& I(. *36f1Dd81lRdGnoy7NěiAʡQv[!2Sf795:mZ sT+x/ݱbD$c{*93&C !CuCڿ k6@]+d55auţCPoSB圩[1fԎl5sV lJ1(tt8&)8| R pAXNBPz~ICB26@a;Z3VyͭU5M3pȾ(Z "p薘T_ wz[0΍1\ 9j}NעR[t0KebiyQ{F϶ή.eY>PVS4>Q/̦궗CAG{ޏ 7)Yq&; #qɱ蹾x]@iA̺̲0qʨQEq qRĨA1*QPDQE1Je%]Uݝ^G۳9;vߵk\ ™%@MfbkDXuU57& ,'wvW%XT8k$ H5T 6%c5E$DQbR|Ze7_̊gg۽lhyKq 5%a4{CE1~Aik0]4ͩO G,̐68imZYfx)T|cG+M[|fN,ȱPb|6'I;_7?~kkEsDh*aaIx#Fp<ve7e~2V3KG>"iF-LmfB, l^3J}+| i`߲JA:4a_dUC5<>TF4~cqj4JHz,@W5$3 i.bjp^R 17^v]m[:c{|:4wmL>||72ձ`. 9i1`-?߿mm~8m}vڷ'k3{͙cpbےZ~:FXr2)RT B34=hG5%EA4QċXKs:"(" 4Q*ns1|~5[~jIܶ"ummΩ˿|޲H!x%* =m.=[_럮>88~mzөH[\kJ(P%)R>/V齴Ґ]lE6/6w"YyC;"Ϳ4LH .ajuYc~!-tks\_Iok$fRjiieCd8#ᔂ *"" 328=΋;wg^k|\}1ĶmoZՐ<3wij.QsH< lkab6ifRp"Z~ 9QM1H$>;^^'^묪Ja`QƹXg ;(#J/0G{q f&|*<ũ n2FR2gbRV{{cמkS w/1_kO\9o6.ݮأ;󗭝>?gmC7fFR"&3+@-Pxet?db^6(<(P7]/C5xhFs{]Hy.j4~N+5s`W:%lJVT+':[Qyȹ | {B@~WLƋ '_mxR2ތB[G^w@{U۽JC (#T)j-ܭ`7u~h5V-,Pk#*U#|X?AFd0:jIM #dyJ5LE##tZwb6?ͧ A~ZIյ~ot`Gy>t%.EX.fCzy11ܰ{(N&_/39ݐK'Z%*{}5_>?ZQM>} &g8C@×-+Zzd\2V$YvٳWF o}R+ۏŝax_ԈW^ԃMV02у|V ]Wl*F'JmGe{'f]Y>#0?(xB~>>1h$R}n<Q. ^ S" "HG+$<7" &幩riV<'+P!He#<FPNj9=7wU;\XAK/jp@*9xX B Ⱦdx= 0HD$h+Gft™c%M><ߟdf%߭~˽fٺU%ܶ0-.WutxOѩpYaxRbvƽ?M_[fi;{lg;nHyɥ6͜j",Jq.10dȤ=ZHXPBNLۛo-O^>\JtˀفRFmµ/۩Me˰EP|9.$(Du)iʼn[wxP'/ 7W;K٭vru\=+DìΡ].q~骂ti\6v5R]xhGqB gw?jA HtvSͥ^|*EÝkҭ]zin7}mdeOsrSPCH>3 a!7 [\onWl\^;/l'뢓3;:-y* 6UA{s9GIFՠcpd6''} Ȝ& .Dȃ@xjr7d@KI.tV@9*)HP ^Ւ;N+2qvΩB뺪ҰdS kx(7|[]s4w?)4#~h>Xu;98^Zd hw'fZsMmײsۡX3%iMoiHb!" |׍XF _E.BgŃz3-}5G{$ԇP]A!\Pudȋţj"l"!/&s{nss,/m:W\+Ns_5Wզ8U lTI 2B*Jx"K7"HE|Y؜@ ctl˧AjMiR}=P7@[OK+ȸűpݴ,W3.y.筥mȈ?T"] BwMht|XiEA+`" ScȕoJ$ʻ WEHE%P<F(o.G"reJ{ CH 򒰨dlJ6ƭ=~QgawQ3seWZK򱔊 ʓQJzqzwfOMc U޵g9S #d+OjY[,1!\QL(J6( nbO)<^lƶ!xdD@IJ,*/:bAUZC}>tyQVOmZC1EY6,g(P-ЪTx UY1hJu.pzCF"\èœǺ,ْpc>dBmEB QA81Rvo]cI֌IF`׃zr>]Ƴ}T4V *ҮF_o[2 /VHsSg-`&9>'XT1&)c;hjqo)s (\3Nb2eup>>q1-Ee ^ ok|2Qd")ޚh)NxA Eo)1uyyIP_D2oJi%$$ƕĸ](&*/A@QPTPeQdQ}LMO2=S]{9) i SR=u U]g[\9쿫Z+TJ#Gnh( o!alX t0D#'oc` m/vW'>k1T\FQtl¼}~ysA@X |&[xnY8yi::Q_ڸox.ϴ_Ou^wѾfk6W {1ң"IźUkutr\;pܡsc|p/4ϖmHKSHc\ =7'm{{;kЌeccgzXx+,/̬h tvJ]Hdq0xGk03tgry!ů,eNu9ٌz2FJH^&zvNwY7wa=mۯ=׿auswcW4BcV[븽;9ëVUc?lGl+\mJl"z' 2\ĦީP-$TfpmTH1^{nK6*O7jyI[dD<ѩe`QrR#ړxLGI9Άձ+qjw~oul[֖U:L{[(O!yXJ\6I=PCj$нLԕcZC{,=X9PDB14"K @4ڣLnmWٕNuy2QNo[,j)a^<ǗVƣY?_wK>]l_7<} bW0NǪMz`{,ޭ᧩Ӥqqob-&j2H8( $#b,Es.+S +,"h\ 4&c $y"$-[EFjSɭx N]c3'g>82sE&ҡ>9P}Zv ؘ-ĈzE4b P 2MvZE],kҩf.獅͏J#`,n&j^c*sEyێb^.IKTbkiTz2.VgflXw+a4ufe;+lʤ,a7JR 5 !VNNF. >Gޕ O NM#KYRq(JJh?>sucCgUYi}um{X#!$<80Z 󷏬:d '&-ױrliFָA.tsW,3[O-_ݎ l[V ‚H,%)s|Aʫi +$O67r|гiGR,)9 `67$3[sjP4DD~[S@sq6\1OraO)EH¤ BMZ:WvJS0Xu2axos92^G9uAcd@c x׵gSߩ=ݷhu\Tl?h:vTˬ_Q礿/eڐd- S32JӴB#1r7XDE ^eQ@AEDKzS۴f~yfuq I' H̊84) &jX.2C94 |4ң9YTLURbq+?z_udž.Ͻ`.pqIIHݘ(ߧоi;Z>61v.p%zPU%D,H=[ԯ`h 1Bh7%dLWM1ۺ/p]]n:m?޻B'\%38v߯փ]{_[O#*H 1((BR],kt"UQj'}ԁ>6a<f݅ݫ{Aevڹwxd T>X+E v}AGf5u`NFm]? Ի3"[KkEzwcH\F$"P^>JBz"dDbEh(JJh3# @HW"^0-IIH+Ĩ݉'vCꌩ~OeMg},vs f[3SWψyUAqN7wv'f7vۖv9bԕsUO&b S89 bUB'kF|קf_ bcȩ)Pʇ޿*DXNT.>Rx fh(,t_ -RA:Dh,# )iT)zo'ÞWZv׼ k:7Ӧ\,:"g]6ιhIC</aL3I}ej,W)7a,za$a4QI01‹&bT^_=h 5`[tg5 ZAr"D4S hh=Ǎ3 cS^޷X/n/Lq`oskmsY߳yWM՚)ik'fMq#F4@DLo"[ d!}~f2sK@¡w OD=p1էẴV~0Z"U;+՚:d[fzW]G amཫư`sABd΅6Mqu'Ñ[b۝|N}c~pzL[6;ה*gqBrx2Fz{p^FF6]U3ZP *0LV0-c2sj_|6]3;ٷ]gHN(n[ 7a6T{ u fx)+-$3^<W 7Ul$"k¯HO[ {oY5AkGMbbw2~f7ĉF#qE%CQ[ft6ހE6Ir[ZM^VULbq\jVإ)O0Ywv50__}8|fM|l_\};_E`{˥S󻻢.b[_VVABr\` Rn9ӊ.րx4JrXF\$I\t(y=uTnb4<<~ω 'p"q=$e<\a3fR4eC4‹T`5a <.dEqfѷ\XIe~rv*y oG@6̸aO&lʥf*R$ /'awu*l|5 [A{Zq.߅ >Upevi9V}_ӓߡ+ב_˫-lhlIhb4nlXbWG1TDAPlب"" "(w Q#є1sf烜žZ{gWz*K~m)J UkSLӞmWo)x}]]:? `uGvx÷sn_!gCN4/ Yt { /,W@2XUguEL v!:qX/0KGi>o^4)z.IV ]XLa A>2;Ł6O@S@ Geēm`v>ԍ4[ߌV^A=fp}fzTc3\XCͷ%*Iyn=iN|CkPi& #~Uي9Ms3n4>Rn.t{+%|>[ +3ҋ+ /S,/y Yz|* >_ub m?nEY|<"D7IN#[S^6KEkk=,ϘAV\xp,~'|'IP#"{/ &{;,] m)PU=`s~2tVGW[ݩCn*r,VX)^$e9QmoAj*5TGϑc{֮ 1~'í椹5KB-c3R:ǜScRvFE"ey"n 5cWLYX\\Ly%2̮͑;tmYFx-G6769\&'M} .MN F톺AW`w;$k,ƻ/͐iq*<=ŒWir>!Xzp4.(TSH5GmX]  ̾j@c!NkA!DР7kx\1vF!,?2Uu˶ ,RMFM)18H_/'s{U:>:a9UQX1Prj~LSV!T/QV^K^GdkDǮ@jU$;H6ͻY:m;.a{+l)4?fm/rR8R(5܊ʥ<(]6k;3Cp.s0@ 5Vz]S r OJ` t!$bgU~ cQa4"xBftX4,;Q/dYR %ϦG#i]vvCKYݻнYTPo\&#\j*RHaG>3ӄ̈$8hy>jTnU/K_HkkڎHb8U} _ɊogVy tZB_Bk6gs6p$d@7LNrGM}~ n=U!{XJ{hz,nskw^mɛRY݉ yk1n\zO^c`B_zA{[jl̼ !T/% 誮D Q\߈/|ʐe.fb0%VZR!E*$K)Jleƌg=y?ۧ$‡w (t_?&b.M5ARvqk QaL f aS|kh2S z74Wu`!8uth{,85Ysf]+{zc˵wgaw9{}O/-?xN2vG;ݺ91j GϣJSb2#c ]5my\ͳLFδ^n,(n\Kent]utO/ƍT4=>>~`m.U+{881j%2?Ԭ6(ތ;|5]GqZ]}~1 麌dH (iNe)Gx OJ/z.*cԭewykQ>$hQI$">POK욥 Gv^섄4~?97:%P,6j}a궮۵3dar흹<YZ6&C|ӤgQgu5 y5kikQHcWTC ::Dg@wRTճXLLPG,VZ,(bJUS eizj6\{LgbݺQ[ð46V?,NϦtl]QOfVKOm\ݷ^z+Y(hX$ 3l.X:+DqҨ%+`l֮+gYh(`vDicm2 lfZ, ͩ>&:DMl4q+жh"4cG ^U>NkZ;`jnv%!rOCAP˄u4 եHD421m0mD(#U< 7ez 4& qσ1~Rd :0$ "33 s;SIuLʞ)NI2tR1IQJjRIhTqz>5)G@`@bG7'`b~pde~??NvgZ}mb>eks_S@­O!.&G~K׆hed4.)9z9&E@ybFB4:6 @+{ϖï֝o7?n/Wv.<$xJ{aq\JVdxF@cg`sR:M {ɤ/L6|g9(H!!,GtЄfC _ΥknG~ ɧ -dA+5_~,vKnHG+r!45Dw\@DDQQ6ApAYԲLs{μ9g^19~>O3' ݇،+*i'ڽyɺ0 ul.ol׎ۍ5efk.>_V7LD(O3\  5uN~w,=EYǧÕ Kc+Mtbj"kjBQ@u?;ί[s޾F0DՃ2ՙ2+VP%QؑrfGf}COrAP܇xxa>h3_=}@NM;@?'CO9 *bPϽ~"1 rzq2([qiY6n~r"I'Qeh6PNS/}߲{u|i>j\Z}>-ο=Mw > #_%(KI`hIJĽ~Q91x3j'!HڻK#wFdA ?69Kŝ$2%)i  P4}ymug9Y 2;)W5R訪g0T(. ƈ{ fecO}ͼ}7n:NeM`i7;ʭ&ӬrU<,C*2aˍ)@J*͗U߆MJ;0̏-JF/HDeьExD2Z@;#*,ʀ1 ՠo \1_94v?[kTiPBu!>e^dDBz"-2BmZYɦ] ; VY&?;r/7e廝";t::5T}cf౥xNj6c*EYϡR# !.A dQʸ_h@!ېꏝ z<`=yoٛջ:􉠙A~"!Hy.#(+cYuֱE^I% n`V%C)t]C UP1 ޸k'SH8y61x{l:b¿f~yY-Xh+t#xn=Bsh>?l?UBP*؏p0U[ :1NM϶w[kn']yieܸ28xnp6?6gnb$|qzҩZZ2UN8.Ϯ%؍I4ko{Ye5V  J * JQb/k1{rOsv̛9yy .ڜ~kɱKM+J5ocbry={wG|y=0Xw{WER$ !ps_ͭ6*+S/VUb@\XY9O$`UؕZgJ gBbp(MN,4BEF>}gx/W/;PQ῱X|I,c֣@$9/á<){±IƳٮ~h*+DU2D:v_k?w7~v|3^o(SJ 7 84@}n˱cӹ޽pʩ)(E|U`LMJ,0Eׁ- >2k'dCᬷI ) xȇe +|EɌETf,ʙ:8fAb`vW_dl..H-(ϲ=46n֓\vk{kXm\I34a]k;֎LB 9#=hܡPs#GM2hA4FzJ1*U4/S6Q,Lc=f ŏ '2a:-LR8YU~On e[/7;I?CT oqXGH&vRZ;5B.eb>Xc4l W@<`o(Ă)(E1p)>yzRSF': 1 8?!A*Qlr#Dxe|kɽ:\ť#'ݞEi\~#źrJq%V:4,3urnzA!vitzY a~9T/DM[u~6Qm!Bh 3G#u!i P_Cm@Q2 !7q2.dq+"g9$&qO0,$YpS>kIr6+ WS|fS8. a-8' &SXTʢPlgtjMM&H#SI2뒖lT 0ueeQr(RjRBe֢h>A-Xghh9HT @ϱ:JȠsDGkY@s#$%30X21DN(Fs=Eirc)UQBֳ0h,+@2b" $"u9 a #hG֔@ka.y; Z <-T+L8:MoL,DŅ a!@.UC`k0L'XH[_WXٵ(_ҮOMMjs:iDa^z>P2AL0K'҅vKAVY,0j'HBH$D0$!~źA8~mlzP}i]6.>7!2]PJ G~:~u8/ͳsکt'?TkultcJyGP~ i|D({ uAPFL4 Buf:pI@ߒfX3H*\jsahg@m"5bXBb 3(%j ޞq#N^8LmF20YEma{A{~q{nuynlV܎mI.8yf?xMWݶ?Gkn<|n-F&( re8ʌ<wbQvJޡjxۃ}{}zy~y?sT{oŦ*\۵?m;(.4,GQa D=`416+`A H&ElAE@Q{јsd͚5 s/^{st=>UB\~Nԫؔ0 ) S@Kp`Q 1$qtrbh( P x#88DR%9DC 110 PUl*p4 []![4@PDo z+ v~˹{}qp5TUHBIPdǁ-S~좝V@3':GDegDpE٩e:C˛z2NccJ/ ,6߭6usr\B4|A Nɡԁ1F;RCk)^9O6c`˹e[t :ZUb<- uY礮WKͲD,bs Qc ȱnV 0Q&NLɇE%T'D:|| h6)5*Ӥ92jҽq4{a%sʴ Nd"x` >߹l͐"Gm_.Iכ?7.=nn#F"kͰҰ4;Wv A>0;v:\n#;҆BXz~\c)b7n&_Дe LZd+(GbDi15Zm ^]Ie@eNjb̊dm0~U1C2UY3i#ϸ?XDXX:샴ãfY_5{-5Ha4c01A7CiFsit g8 -+M·⒬ZZyMhΫT˳.I~s齏9/nT4uu ^H a@XX@}Wr9`}NGYV+^ :^1QCy ⁰X5lj&,T"&ŀ"0Ջ(Lz| xP hjPU9EP>&Z 'ʼn(G'S~JGVfӬU+:^Վ Eƃ$|"q >-Ÿ` ͝ Kal4dӨe~_wć .}NVssQ)h*}EaRði+RMRiJ!)xA x=kۣk$ 1z B Wp[W[},_nW?npmh 딥~(ྯuq>{w9m~;_5.nTGK~{xib*,5C 1P:! ΊäEcA}K\NB='FrAft$QQR0Pݎ|}ۆ<)bZ}lUPY3 @()9tflvH%wzx^N v!W3Cq}zy;ŵoھökZY}vi1-]yy&ũx=Qmo{Avj+VkPﵳnc˵/Ggno3QwvzfUV.֥.t|<ڳȗޏHVai.^HE""O((#+C Z#K).;0 (1,t( V{5ƂQ&hbE,ET:6DAE)JS!XML3I欳\\0OD$"4~62UO E8oea0J{̈ 9 s:;%<ΰd찯XFA|0="Al~!ͳ%\9]'Ƌea{B&;k!p^i:}'~fc ΰmK6 V~(WwkҼ3RFĭr4̤% &cPzo/!0*hxb"ke[D|zЁP^96jG*.k-JL\՘ J27C#Ͱ* ™xȦY1ovݩe_nuwg#UJ9HD,.ImeANZ!15mH2Y p-հ`)M|myz+LM%-$5VVpDlH wڝ(㠘WG$DFLR`U#B@sݷi\Kϱ}ctY|}wx滼v.&ڞJG-#;2UϤ0,qYec9GRTk-kzFj[¯;46x45//kK%(6~`\1"}0Z2 7uC '%EMÐs4lfx&gc}EYi]٠.iWvse,cf^&Aە脢-F-ؑR7V'زK֭L t`{lFXOc3 G#t7\ݱPcNnD.+s];{}]ʥB6 M` 8I-V(sq W1 60 -f2e&\XI֣qr"*H\>Z/f梆Z[Q&}+_!cZ!|ga#\ZU>%PmN]]g `!\+" ,ld—ciI]r@E~1ȎGV? ZHʽZR+{0 | $dVt8H@;m>Tg3{h_Z4fH>Xy(dsq~xeCА_ɴ7:*#T>1rc]W`oM K3A^b(ȸ b`3&%zm_]Y/8W6߿?^zdGV搟-6ϩ$뛐")WKO?63qz$v\kG4H5dU~H C@Q=ɟXR=IJyp;3YS]!d% A<+ MТ]a[;BqA?i~K`/Kʑ#mpgO‡vfы|Ȯ4u-I ) a_B~vf?f?{yub~4\_[/ݵMqRΝwҶjFQ< XB$*aBޘtw6'C;?|Gn}/7ÿ 'ԧ<\t9mD{13~zq2({:][?ݻunxS;-/Aos0T( [;w 0uʌw85:JޱM9U4Z  |jU(Pm<&!ǠaE#a铓wc#􅎷/$-?fr qOeQ-#,u ݩuc`pZU#nq8vyxhs3GW=(ۍJ_a>PI5JhYAX7ךQWT*D"pi-CYKhfF'H,ّ$W&IcnSL`,Gj ^țZ]]}1u juϧ`mX`v$MFlƒbsĤ$,TŠ<6~iir`Ql +YfHٴ{C0TK2Js -FsKܤe+ E㫠~I-jH% +y]6~ ]&5N]Ǘgǃ9q{*3|`-oĩ5d ݇;=?gxßw<{{'~v]Yl1p#"Qªd"`ᆰ`}fk5ֵ &:4+Vl2FaMNHTnDgY~<.Ix)9~1L08ߜп7um׷㛯;Wg@XT\(|Kte)fE8[OS MP\:2h-@kM*w1FYj+muհڦјcک[f9s40=2X 6=6CwwA4t}G#jHs[TSKpf]z12CHcӴH&Ƣ4X[߻oݡ~=.oW׮З?O_=;ЅC'׬\i\bUPŀum[=t3 GTǭ'cboEL~}lRU6ӏ͕+xq u87|.w!_:v?O`$J7%ƂnKyzv;6~M5d _duƚAL6ĵ|ˣ֩x!F 9RU J\G+(L }xx@CQ6ta`͐ʈ…G\*M9z3X_XN3 [ XR&] '[vnnܾ+?4^Bbd~asCС4a_7Spز`3 zrs\lk"!TQbphERF YlلlD6_V!D,A2m^j^A'yyB}tZ flqg^ۻ YU0cuV:r HhfS#WWTr1KgMҠ$TlnܚPi3e&δZ  qѢRD9(W7ӕ;mBb<^5#HTbqR$sƣFl3B%ZyJ!LrGa8T*Sh`198 O5T\/MFgLX9 s7+&uѲy6Ϭz[6pl ascIVdl{pz{☧\{W^#gIkV'kÌ_ըut [ lF`E_44*xq'K[o R4/h85QFaG<v 2;e!" U"&Pq@?>R{pβs~ky|=>\ߜ ~epSNHa"`#d*Q[ M^676@x0WJAYN h U$^-rdwCc@wB 7MΎP6rY1M l }0c?^9TL4enD]V4-|V(|+򞋘#(\iܻ:\Ix*EjY$ux.D`|Q 6 zk}SsD>}1k,_R곜sRX2vR+B?`#h,unb%1Dxن'H6m[pQ*b,36XJsd=6E+*4Zh'l[zT"@@`MB9X~iE1[ jc5ѡ80HfT`A%$8>TYǢeoY@@C{aS͊LbLJҲ1:)d@}a8`S/BZIF+Y[pf>6k ,c e,# M DPfS6.)9f+h r^SvT&q "ԻACa:P{EjNJ۳9K}}e۞ w擡]uWE1wM~]">l'Oo]-Yl>NkG)PyN)@a lY DFB(,w(+>#`R9~d/K~RW D0H&cϖ$q4O;+,S4-#R=j,R@ᑴnP M](\^1R0C};Y~Q?JԣFtoMmjT2 [?9s o>݃qwǡgpfcYeıhh8P[ uֲ|dgM!D *2@n,`1\ܮDi\ (LGgod[ɀ1FnE5bA6Q$ \z[Ԩ. ,geU.+冉&2UֆEںc z=~ѿ{s/Oy9zEEuQЋ;z4>/E(oս=/c鈲HGiR7.W'$Q:UŷΚ*kC{ȀC!!L1P,72Ϩ$bW{L(~-̺Y8g!W p@LdyQ˴!}?ZY޿BSDRБ[[ NhTɥ<Ւͼ4$b7F]պr6.;RsJ^2'd,Xv?.foDˏWECY"[Zj5V뵭P; 9)TfU<چEk]Y(K`6k||e6?khV{3Xf`fYo[wiVAuP)g(d~uxmw5VQd!.H&~t$eM'Ѫ#^<:ŔX9$NRhqz\Ԧ7IFXx<үOsoA{ fq4-1A|b`.;m@<.0).sDN8xVe,6w2-`H%S-uM+zNX#q~AӳRl-3I~Z i2x/îRײ[iz]Hـوn| ?C=LIwӁI71Bu/ȶKOZ!'@R̛J2iSj1uE75\B J73Kk )>x=ţ@T:w7y<xC/=ff5b2rm5Uxm)Ӵ0zG̡Z+_x[4i*o[&U3C'L03:7 :VoGK*|zr䆷O/m.=\jd.1\7vΐ·j7ىcн>tL;'m g~TPդ|cԼ0WlS,!!{0LCkҌph(/ Ql: g05E^ dJ!> Li IJd6AKy vίZ*^q{U^'s7.܅{_]nƏ/ ~<Ϯ୳pDž?|#2_mo|}rYD:;VW㛔k2* * ~W*(diN0(J>:aMyxܳ{q^\c\F"~ی~<8vFGI U|+a"ѣkR-kxtiM\y#LA!zOf}qE>*7@$Sp]0*e'DT]Q.x]@D.ξ&EoF2plH6ZVL/ P;9*fa󳙫yVSӃ&sƛ?=4eSFe+&(GبA]љhN=o{ " Yb^hnRN1 ;ΠY6 #ܘkN4%g8 NBmO <W7y`юu,I ` S͆fdFa|;MZ-I=oSa(:6x\ ~m,i 82B5ɔvWƯ6zT땻3?+ n !4Msies)*`(Ȕ(2  2 bej':b߿kg]j=v/*%fq@J3p%OxMΙ͕q JEH(|ܡ3 3t5{V"gQ|:]l|p~*5\["G]HoSqC) .uu(:h_sv5x )2-r+=FMoE;3ʑFĶhFGkAV2l4kE6Ēl[f1vPnŽJ!v<lB;;" "QH셎wCu\> RSvæ~my/-˰:3vwۛe!H44Q Rysd^bZŀc[Darl0y yPlK;r6Y?d 骫1džxbz` >243f4ݼ`MqzժĀp-p6E[umhUOM3 ĭdѓ;"w3UMkl0<3}\WM/+xe˩9&Vǟ,l25:gɈj-VAUX"Qf۸I)T|YdçҧFSgGr/:\2-I\"l E?CBqdǒNupjtdF'eЍ2Fa! ʂQ6l#2AC#vVT)q^vM^h(rJ"# 'Cyqx/8S9+k Th068P[:* p#8XlFtau/|q|u ۏ{9?sEVcnKaaZ0=[ ~_=qm} 0;/LҤIgI6%["7(^vgE7dۋMQ4 c8V4|I56>S{էO`@,\Yv>Z.KDž{+k :?8j&+;d}c-hz P͠>s% "#Ya#+o=ft.6ow~|zO?mO7ckQڎ-fG3w̷upFL..,[8 k t3%e<`EϘ# 885<h(̫f1 UL=(ә"LqWƐFP !wA2P{u*M]"$iM좪Ė2{2k:[fM#v-'yt܌PԼ/{qTJ`x4SﯘKN_hNd [ u#׭T=LӔo؅,,4܁-qA'j;3" Lᣝ(BC kj߄ b-NX}ƵNX:0 5[4fd9VZ>Iq-rFq&[}orYݺEh7m|:8B>z;B᏶#xD$5+CLq+MԆm{ȸN,,Vf7ly<]B $ȴk2O!%>n_O7K}>( \ cހ W{@<>8e]K0Ԝi*88H (( SYukuW~ΗZ{g^_?Nm4ZWIJ>5B6'7u 51 FE@=HBAl q:ÿ0ù@/G3:1803{VI5ky}O`u#3pO21o_| D_@B[χ7`Diȃu26jZJsR@ލ8pl\i>qrn ZS˝G[-B8>Ý~P$/pD|*=O_g*3}QCtTW-y>4e&dшC] Ԇ.20GF{1n@Ņ78/dpn2Y]pSc'!,9R{evT/𭥋#H=ErYI̎;{W>oO:'@ m^[ȗ(HQx,<-awkSɿ1`}u͇ î62UJݢMfMߨ- iФ.eo0Q:ϋ-Ȟ60Iw{ZE\]J3!B`F^+nph5yl[$=9w.2|O Gc@Wwk`l~Qx|,+` c J2@oÒTFS#_gZLI6aT,aJe0ԗE޴w=[zkȂ$@7릂{t=|xyzW/Զ"t6Ix1w`]&z>%|%컱p@_ʧeQeh?4T#DˬG($\"hΕ(}Ң[ l3² ]{N~]86>lVO6-ipq|rnv'[p{:Y:$)&E\ڝ[yR (x)|HNBgěB>̳y7F$d}Qh/i4ܜ( H{4@ŐۊjPUJs r%: NJ@?=g,Wi"+ 4!*-aoϨBu`'t\_[gݝCî޽薊)T$-Cm CpqA}L91 !> Ĩ:Щ&N,^YAIxג{`{7"Z?[Bw0aJ:xubjBU|^F*U% "I@!arqUoeuaVۀ=;IGhűlZeuٰL8qhQ Jtm͑x[s7[s;M؎i_s;һu`l9r\ yL嗺)mт@6B7\gLj0gBo>66f5|qZ(E-C&L'ң˜L¤*ݾ>p-_f;wZ`|5F syHş}0_~ٷmjKcM"Gӈ mІNT~_sѣkGUg#$Lr4 PhP+} zOe<_ctm];vv~K@`>ԃ{PDsY>DUfN|JFn Ԏd q}X;3l[7=F#;:8?=u _P'RG$-9 !08p3HΚ$ pTYɀAw]@~` Pǡ6HafdyLL!Q:b 1Ƨ3YZiX$p* ݧTO á=ۢMC)#Tof%Vlv&E@Ji&Ady,-Ϸ>}mt*lө:L#R*eî2z$RƾٌxL&LCv$h\jKWռj!.gtiF, dD$>%Zt+{JbzYMI Ʊ xL#c<ٶخ׍%bdY.r)fˊ"TL^ ?|ar;Xsi |Gcb,G{bp G@DF}zG Ii)o^AMjUp-t4}1N'E! }}ǐAuQdlh߻TlY~ Ma֧;.Ɔ7$%S's 82\`րWuedOe QpI9yQkiEXU~!x ņ ȧ9 Z2kKVX[n^ >^_OW.|K?k=u|2S\Ͽ~]؃?ܻޟWqpSV9$~gဴ9 mgG1>_Q7?R@UAx(2"AefrUleỊ ~<Ȋ-o(jsLdb4vl/% C!x ̠ȱ~<O)MSCe =c<[/]߶޵$ƈ`k|ٶ{wuu9uzw\=]5ѿXw{0ǐPT4#i } ;ӃcN[dڼze&%c}?ks|vY<W?nCy-?][݁DΜW pg%vnln7Ip t(4YLOop'&BEvyfvDg Lf,)6.VMu$y$"L_7 EiBzXIV26'LĭT&-v93NY)-h-cab*:HHk{ wIބZ踒%I(,}Aj)QDyڥn[ϥ/ptl+OX+՘9S+ts*̪0T)yܫUO=cxNCȟ{bɞiM&F'P`GxHŽ^rv!k=4W$V GY3O?୯u}`XSq, 9\LXdqc~3z|D^y]~ߍq}{yreuƧCa ĭ^W~s;g +Ͼ/㍯«L_@_?D[<yS вKsAŃ|HGe) 烢\hKq! sՁVye9r&; ! !5l2#ǫ3c :K:,xcs6"%D/O>GJd[Su}Ʈl]e{IUKWg| ~smG޹sϾwgWbgM8E +ݫWng$=#>͂c)~Y[Yi@M[{4ބϼG:v"KW{G_QO~)fw aˑ. 3}i ( ㏑Ogף`Os_o-E SW ),>L{ <+ {L $ABr0+;(&Ȃ@!PEB;i'i`&90Wd?otW™R3FRHɭ/s'Z= Z[n~\ybny`) %\6UGQȫ*)3O4s] CI+OU:y`R%Ε%}GiZTXeRniyR,|=쩪I{X0a$m]"cUTaRl b6l)5m˻%M!AFt0w6Q7` 3*ӽ|}^4ؼ3+m*~#!Ks{Z(k6bO|ރ]31qChޚ_W>0,oR:oIrzڬX+T[zJ;k&mVz&e YLH.09SQUJ.fy"]cBw4[j{V^:tONOqW"eѰ0ܾ,?[&brLqyvVu ȁQ )Nryh9TߺWF쮾:w/&W)i)9% ;laAqi;2<ѨlG4 +'뢶!&ryv~x;|JFX/折9C(YLTRrmryStuS8 y@×T-ORq PJtQaH|{utoii ݤ(cp 8d0HǺ-?Z@е\ suv#`qtF0=G]nZ6?ٴ'[JT$+]b Z=ƼXi=(%}bh0 e\`P O~ML(L! L$/H]o 25kC ]f-y^Žv:Càusۤ J@,̈4R?Q& _lEI['eUݼ ((PM0[:fThy#wTdײvלcwYh@K-m=3 ͊5_w"w3_|SO3mWdyZSWkؓcv6գ++@YV Cʢ[LL/=44G H{kƗc@1xGe0 }36t퉠Ga&GY#,ARL,J*^X0 p}7h]a*Yѯ70陪؎xöZ<|-~ o$A7<'ݾmL8>yIn|(]jQB&`h GATlpb}`Uah-u%ю[ d14fƨH8']D~K7{u5 c`Z?Ϛې7\`ZceYSEڐҽ6~phH>a<ǭ_Fg=Y?md}Ǜp%f4[X{œ*NZk5|@볘iR)Z7ܝd<~L0f>8x  *$ ,tꚌY8'3LiqjEfQ>։Wu8*hyd٘t[iQnf*(r r% "r)GaZ;4?}<^[Z$Q>kl@;$x6y˼7VQήԫؒB-O{=P q4Sb̔;B#vEB1enVZs͔K.Ⳅ#rzR'Ligڷ` .(Ϝk˻cZ{1/1]S8ìYҿޑN0Q| fJs. |g  mPWSK.q{!5MH*=D5)vI:uAgװ&ĭ˅>>s+WOW!lKKz`NX  ~%WT᫪xo .D鯘« ,r]D}|n7QJmn#*J@t޽q@i6Yפ^h̥ wHauMҐ~6NsyM~lyMl,%7 DT& KD@X T-#kZ@QX3؇_??~ fO>R{vj,c6a~ |?<9-k8Sp` c^C¸5`↑o@4ܨ]nTjx_U CSC@ǜ2 MfL΅{Xoij=̇ü|Ruw83'-F0MSH!Q$0@WA}iVߞq2d!0ta=+'ɭɣf`QYf4{c(~rNOh[z=Zf׳L7D+JWSy,-&~G]0#5:ݣ~߽%'/ğ_"og't~-_©̪'$l<ar:hE;eiɆnW6.|\Ur޲x~ 7h>x_cS>MQB5bG!&PoXCPOc=tj)h}pܽ /PHN9߀9R*Q j A)dӋ!Voey\oWgC?TA!Qwk6*"TO6VyxG|ս޽Cn"LzX=4'k{%OԜ (UM+M;ASM5б['%{ǎ*eSt6RJ&"Vf?F|+MAaW,+Y*d1g0eZpd֩1?X:{7< aARiEfc?Y'#ɕj&#Kqz*sJwVc X_xV'Mϲs]#c%W֠k1?6 aKb n1܉:7XV,s@b-aڕl%,l/|/oO<`b=JdTg+j+B?܋>CM3H}x`ӚF2߷= MRNJ\zӈkuӿztGuMӴbrTZC)&b!0' ϞFܾR72ވ h LV9ZPa@Ŷ:rAOSD|}eK1hcYĶޚtB?FߏݓٞǧHy\Lo[ :JQnrH*}|Ƃ3d6Yk"$q.,}O106~px8.g)b)UN@r cp X,pJs}Iu%Yq/Q\V*>6ߺ8,H6vϜLC9%b fnlirdoCѝ).󧴓47g$ǘѸ1јq&q\ r) - "r! xƘI*ݙڭ?tUU[ow?'t K⟹yRՔ\(12f$$wѫNj]B7-6jE :kji]o}iZ:')_@JE$>'S)ݱ8(O _ ч[1]o;Hʱ4 iB\ AeKF]T)ʩ}sc#_=-ߐÝ-0k|\ߐ= gd1l0nO{lfU%WY%SZw@Ԯ{]_eoˬ*/oϐu5<2['^ZM E ۊ0{Pq5[[q0Lm+.dޗ4|;&aJ*GppB^ç:["" B5M^*HKCݶ3rN(b駝6ދĆXzj'};=t:ɗH9N#/j5X:0~Rl blPHԕ\S[PՕ-UA}y>7G'"u%8j" `ՏfscY6<|.EvRe-]' +o- K1CqkgL&ai00$VZ2s_ds(z~ ?`؋쏹/{B?dj k8|…jBccG uǨhM2 b;}w6ep ~8غϾ%I:z;;?w"gN#~H4u5M[)5{FbXMDLNH7U`G۞ǑS#j'j'g_G!׻Ae| lwnnX:1kU:lZRVZ5^. ꉁ++7ío)45  hwb :* l G>8YP^aiYI :=Ja9V^}=}>xt}{a8f>VxN? ʫk5L1n=E o|{}{J嫄<@X4?ӳd4,bbf ScU鞺F߳q sjܯؓ 1kWv%h^o&cP5V%.L#Mf]o4M&YI Ϡ*e-Vr%6w5wRy8v H:9wD0ዊƍ%FUXyAL&.FbE{7^Iд9>J}؍Ǭ~|mQ\S܊ݐmTeJ W]IZ@ ,,/[J2K:aWI[&V" .&l,.ec׽/<>8|~_pDifA4U҈ y$:4+u56úN.W8<,`q?mϔe)'&l&3 WOO29M~zUO j)գw~_|.>E<,|.|qm9>6'ԚnRYbO r$nL\e`s/e1Lc[@Mm_[ m,,8uư=3Ry#h>_ GV} }D6^OJ2cˢ65SAgS?#@Ɣ]QorQc†,ƄG`OW{;z(~%{Imvۡw6C")_G4eQxD&"t2d[իjq a2l; dTZF@.8%'Q7 kOVǑ-AxEG8~"(<i^>1s+Nf'UZ[ LE]Q)X~$֔1'`WmrX/a=M0l3PWQݪM5ՠt8T JFWO@>t.}.j;\cҫ&0tBNـ %6喞(`^߫dmo{ʯ[oo컋~0<sFjch>/z6^SHH9A0C}`kf!V$!+)DD ($]&-X"(KZ>[m fZm M[K[ǛѬT{1W=`rwFdT_hJ\d3y(mI-(d|m6\cEi"8 b.d ?,K{X8X @lj6=5Rbj+Q,:ub)ÿ",b2t,s^1V= &ktTWѠ>{q8;3:Xbծ/QELϙ?OWRݞKs vAdrj5I+r,iOx*5LSx" "Q@§ ,hrM I /b̉& _EzcP x)pxE7OR^WҘy(+ƀ8#yFSк:B/4wƬ[Q[J&DB!ļbpX]L(Y6;_*YnkAg0 ̮'z}!fod듻N 8鸳Ws ɞw_Pk+-"e)j|*&9@**-HURg'P:>K$8d96%VVxFR*ӈ7'# Q3NE[~`H.d_S\oiYDqdM&1&nԉ1EbJG;*7"dvff?p>s>G1=nlGjںa:32 3ܡFH3pW89*=/Bk@Ƃ7̪FU"LWHBW?<|CósYڥO[Ҏ5]ȳf\e p]naWj sr#=:)T%B"uG47'dI~ub[8 3:l6]Zǻʻijv0gǑ'ͺ:1K ??,[bjoRɾm:XM.&)9s%kpfMx i1SH+p:mEc=` h{^ yp c,31 gO C %譯>%{/8r5k8A~ ;_ǻhfӻ^xܨ#D [z`/F,9痚B鹳;gߟN"c+its"W&um+\*坴76v9>LlQ\ײTPeT6?4rx6Jvuu_g#oos2} 텗1dvxd*ʚ*bAMZfKa.:EA|`!뫠 $R ^AOp8 (}<*ϱ$Ŵai R/",WI_2T v19{+!1 ]%Ma@oJ |WljrÃn2 1qo  ~pSfjV/d~&ԚbgY%f=nWۡDSzq@J%b$dBN_ t@m*S2%sJ6G^-uMFԫʘCʦ6M$R>SNhwzoe,zĬP@tغOv2HT8!w$6 Iw\}| )!fvhpX6C8l^r^-͸<NÂy[^5kLD" +߱ȅJGQ!̢i͚BE2@S)Ɲ5lnLBt:20IS]0JG!`|FqpH{_IbK&(pi 3( D<*ם\9ZCWәg&]Y,uE9,$e38;FY喺/v[aKSe(Keh#ُ=_?\y \.)wNGi}3\fDdRF0 %9<l,R2Ÿ͠L (VS@]+bq,%b'h$rXc,u`bkO)y m:Poe#B^"$#œm Kiˊ!c9O]$ca\"״G-)5㪐/YjgʫWY DeG53dLORfYcRn ( ;l. nɺss˙g~>M45p݀9˛\Ag^z#oZ )3Րt6fwѹi¦ĢQum-ԭ虌kM8D76ϧ_k%M;s9mjr"%L(RB.p[ݸsGD֒z" `b$3AQCMj9o?vϿ|~=v|?%͏#ۿ4rF.>NY"iG&Aiz[2%};!(bG/#g. sdh;Fz^¾G4?Nj`lSw/,() ڪŹlVQs5}ky o%Ocʁ9=gT2|z)GOD}'uq HxOÜMRmbGF21ԶR [,ޜ0=G@,aTN+#a_v]䫽W;^qgڒoEȗ%Yr k RUڻ@Su5xïVtqK_!RxgϺG_?'=U07Q0 xV<^etޘ1?F_uB e#@ma.i~>~+X> oDxM*ݲzXuxS p:iF@DBuxP* L :}~+acw֝WgO{?q鉻ڭyK]v?'N>Gγ)Ďf/{v(Ox=Vl~X ]pXE ء/ȣS^`I~ulH!a%5Z9L,+^`e˨BAܧK/SɊ<(vtUZ)?F# %67P eI1}щ+uWy)GZQ 'NEn 6YcQ#{|-wIJK id M%,6KBS8+VzMih`Β3xbV $` JSZj+ꅒ?V"G %YTzJ*WŷlUaxj%F]HL9A[zi:GI; ţɠצWhj8QE;c5o Oy7l&ķܨC@{Բj+ps{vlt>kLU&}ױgq#iIZb?8{afsm BYE#ޏ5V󘼰E:ثs!;OE$nսKX!6i8BɢP(,Sx7|>V'ъ2&_e)\Yd(Y Z᳨)n`p$L*n1t&De()K0<)RLn$EÏw_ {̛D ךjB@tϫ66ƭ>پ۶k;vYH9"4$|2YޓoS[0l !)OBdLV£JgI`Jk M5KYww73y3p\_Rcm]0}KŐI׵<^8wƁDslOCcǞ][,p  (LL& 3 SqE7.l"!<] oGU jֵQieUEE`f%* JnUv zenM~xrxp?&v)ڒ u؎>刯BBM!?MMSi%2@AAb--OvI˓_)zd9JB2F@6źsE:T_]3s:#d|uzf`%p2j[J2 3V ')UDk`cq0 f!wS,-N o 25_Zbbբك9ˬmnMotgyZ@zYDF4[ÝPܳ<GH"DJ7ZŞ{`g!55]W@A"ic7V V4eAܛP;hӛ ndNӫA\I!}(O!8§7YrOvKÒߴ)̵Ԡ..PeWB [\f |-DGa~O xo g0#D9H(S(.a-g/4*!U̟d2%Y*$J(N0J:;f6-!ʚ{ueǟY 綃1ͼRɭeKxU{6XŬ>&KaEu\D 8Dn*si_=ylg,Άb1^՞nװf yL{V|K &DLij=W_ak~ԛ}ZSH} H\;ʩK]WK;w Z1CYd:89/T19^ϻb@iJbK.P8&0׷QmUuoXb6>fBPдY +Nu۳3K H\&TvZ7s,WT, ka pFQ !M9l) 7#AE8`^n̍ŊV}T}8#:wU/4w&4$<͗J<){UȀ<#OOz<:ǻ#m:MĢe?[:EyIj!{۾0;Mw] k϶vCNʂᩜ.-ѳqKfh` }SbS_G!ݎ;[[Y8}5H|Ob;lj!Bj#hg`{":׫o':8 lmOQo6ML k6KQ6dI{0- ,=kK+UzEnl6U4ǒ8-5fR+PM/ߜg l~ҏa2\ ==<M(B6y ER3fÝKgdE,2#}Ggd R6B])Ê]otw52aSLp'Ag@Vj>V6\+ Zg%V_Q)1鹳ԩ`Zr!P]zH&A,ēolI]V;Fl8nJSے38$ *#!O "Eu---`,eVc`9ރ@Owxd#!Y(vr>}>? ȮՔ&2ҞmK*]1bDt̟;~\^ V>xO[wg9aNmMW9 0blRq<ļ"2F_"atc7uc/Ķ&0^_u*BƚDɘڿxNs75 S1ji5Q#. ( . ʪ,]iIw̜g;VZsTH(*$ht ddL tZm i!Xgy*~-Uho`;΍bP VX1@,D<< f V<[ x#.v6P G3`5Qi1  hVxˀJFW;o.OUt̵WYL#1j!Ϝ'wu.I c`!3jPYj*n͓ӂdm018_ghs/bPV+~q)UMngBNfD*|fZ|S˗iflQ\4^l~:X'A=jMiJ '#\Qy0rޕFVܸ9<{tC'-ՎܣN{5z ,g*lMQSsxx2P DU 9JȤ &&Kgߴ5J5JVi *C]o)K4"I3[JgXr/ xu &(X:"LJ4sq4~* U3ɁȴU7+g'~~c"JR]k){cW3rI٢I t |f/_|y=8xHXR4ͽ~8˸&2yx>\Q]_`/x,OddYB*'K,j3i#/L$RŸά5ܣOL`(Byڽf{HPwEctwZֲ'nZ7lTk, @5=w˦W!?9IZkO'1/Md*#i̇`-)3y G1U~? TEQ/r7yg@eR9VfEAAHQ i`p'pYm-E-!W LuΫ+p}c`[ZB 0'ѩjnTC pkόc~qC1h}i.HLHr7G{р3L(}]kCHUb eSsn^7@ }]p P1tX:A1)Ө7YCxH߃^Xbo \\_dQvcdP9|vM:kZ*_Ֆ0L eW#M{ue7V 2:7W2ɞ! ^6vpG_Jyk}sr|;:8JA<{Mw!?9Z[5||Wi}9rN7v"64V H` V$Db? F}5 rŹCO8:JT bDtC?0 G`I{ZIfJEr} e)^etwў(E/lzQ%HHIOiK?etW6jll)ˎO(l ˗YD@EDUQ@@]Plqt]gw?<|>].:\}cd89cI m%|+mOlvY(8 DK$nzJki_sa`wS KA|?%9y`__'D(nH](Z,eH\C\ "e`,n^I"5Ǖ@NGҫ+pUM @iT >|"< s@: @!lxg%yꁸ',]]wLC?뛑.RP^P Bdf*-Z'M7)saء8Y |yON+qLV^ סs}l}J{ݒ MQ0Ef-s&(MQS+3r_͒R%U?ޟ&=-$R4fWaxisЬTnėōd&9:P2.QYB:r'??. zĔZw+֜QfpwmuҜf=(]O&g잶Cvo^l:g/Spy 0'9CqA4台D9R¢Ɋey.rKPؙ*C5LϤ:e61%9,<+s8%4]\F/Ὠ8ߢU)= T]dCb;m#FSsGVM5yT7-dlB@h1J<׬02-5݉;Wѵo=vWW5[m N`Ѽ )SqDư9F7^L>ZpfkOB<0?]ǁL|Vf3gL2uJ{KV ^UؚǠ{ 툐գ_q<ǍoivLQv>\MܓP-:8_Bg(ټYG`fkZS貄ƅSv?=¥ӖH0߹CBB$K  TPΩ8l W+ :Hh⨀A"H+)MazCyµ\[8lʖ&htfl.%vj0 ^;P]R-O\dVhoT0|5_MTȩ3<96Q7%)`8%G](g) iGszuO\nN z1+cәv@\f 0 I, sw#}b.<7Œ,_4|S n12IB!eU+h4|ӆ,^_VYz AȦUڟ}\0B8)\F8<TQ^`q[ۄvewָhGԥ^-PÆr /[QP/Ec:_[sSz%һ4I8v(7LR&ݛOߙ݂l4*+Ӆ$R]gQ\GAڑ~"e 2_MuJ}=>zGGw;5p%=k]Ϻuc6<\9&ORUnlH+e/k{f۰}?-GidHtsؿzX;l,qͳPd]k u@B&dNB"7 @Ns_p ;Gqy?q Xc\ָfn$$QFA@PDzWTRA) "* ֬&fMs;?y?_ |n~JL mn;)-çtj ;)/NGg0J;$Nn >lwQL.qNw6(}o΢6A8ܱgݠ @>p3z+(灪1)@@sإ( bj?jg1VnUTBH=C*_6.Y833 Sa$vIϯݛo ]B&Pr_{;>Ik ǐ@Ñ0>;vj%tCDġ<ȋ9F&.&,%H;0/q5JIqU(EI=u"ջT{6ᎆdDS7}FO MK32*_̘(L2h!󧜻^ҳۣ+.nhC [n9ny nyzZMjy$V?%2>$(\޶M4=P_HOC:sj:9wz' ,  s!( ,s.=z?\tALdAlJqWcj::;+-p&`bGzfN8Nn{V5'׏߭w-]MFé/d$*;7Okʛ7X 5]faj&5_D|x^ Bǎ@Xu]ϿG#i(Kli$$yr]8>n./jϫ#bwU̕pZY'8T${$ę\ Z@ߓh?et/KffNd9i:cKj d_D6e\Y 1IM[M=sϹ<<:tRt9ܯ/+{à7069 ȩxxx0rWxXVHCAO7/ŒPr/_OtL$,|,i){&`AN9΂}8d=[uqʶO>FV<ܷx89oa1PCr~]`jJm|{aăE>A%@7 ;[9fwHm2Xn6l̚BV gTEJ~*֕ZRj"rJ'P  D}Wx!cNJ&t%f>߳)Sװ\Nƒ+ Zr:6ɀ>Nv{l˩u&H46!L_^2ڴS["*/O)P0PLmE@Wfj1`a\ sIt0NXoc`9@!M!dsx6¦%yx!(ٖz8˚~y,R/ )T]l+8¦Ib{k9x|^銹8 ĺ,zMa 3YdHy$R]WNWȨ YǗܴ_/‡; uoϮ -iu,OfrζH$E%iGuf]6>Ѱ9ጐԥ>J#>k %#qpn9v˚wQ">6V.eQdMnnZιYX f*hei}Kc.ʴ|y-*0s4,#qN3E9cL˝`dBDB)\pgf cy蛀e(l%Kq:JD&.O!ޚ^n귭l9uNiӣ2u]RDW'اpCg g6\NWezPF@>X4n}oJ1IΝ&+η5RϼB{;kjG:4mKSϺbJgr|50GȨlU0Xׇڟi2sòTAM`^:2z3~/O"fLӭݕ{}·M;Ulsui8XB2kyh RH 5 znOc,/l݋rS,KrU$f.)WEga?I|0ӌJe!`KKElPrz.TB#4!BFdW<$)! ]JcKԽ<&d`vŭZh0E1>Mu>]=]:IV k:KIFBFR8*MH'=ƼsUS h UI7=z}CF-kZr|^_c'O`5-j=9_MV/oޛBUƛ՝OgCSr-s {\]OX흶 Ws-k;V(mW8Ծ9zb᭕~'hrww%!^Ѝp2#y-` R= tT7].~F"nkOqyvmqPƒ&df273j5v R|D&Jo"UT2wݹo'>^{^>v*FgE@Y>*%1Xۊ!4M@ fOIșu+[lRWMYǭ>_ţJásݟ0EQG$~mZ&RX6h`qA-yj+N5WjAFi H~am,X{lqM2__ Y:-٧4>,An@oo, |YGmm\kULHyӄ|*Ƴ$,~l\yGL&Y y*9v9Y=BݥbRDБgmٯlo4exn"L`ܙz&K hdݔqwҜt'`_/(DC:zbFhýX=MΗggmeL+36"bSŋ:cM#:Q#uUFל "ȜDC"R~ CS 9Y$"#$Ș8xmsW_ȭnP|a6xsɡ{ckyIJ*-UNBC^M'zL&yFid8=g;m=`ȩ[ue|DnZȶTâ^ʩu{rw#d Þȣ #EdI@f47vVBk*$P޳(`6azA+br3HJO!)Ph gL qRؤ ,L3%9,"ǒUM>ws%%hD^b* ZTkٹo{̷lr7l:'.yZI*VMa'^/} (-W^Jdk MerzcN'.kw&W/0Yi6by$z#R9w*Ֆ40/ۃ%j̎$Zg((n;%NoyvߡXLWyCn B T1c(6qw*[P=.Ej}MgS^K!Ykpd\)L{)&VmoJft"K50a(KQxÌVr|hh""SRm::n-/].v#ὰ)F=20 _WnMlk?fTkF}`U?U>RR>[tZ=;$NǢ'ݫ}We5hu8EOױPpZErr;֊%#GyVix _$E|^ZZ ?Z_w~|=r *lxKqc vxX/ȾSn-x X܅1z1r3AAg3 ff5=/<oXgbX}DЊVhAx[8< w/2WW J / JrPO s%~HjyԶn Eyǚթl)uOJQ0Tp v~_G^.o_UϱWWW}*\6l\ @ۧPI@Bb0s=ˏ̝s@pM3ֿL~Yh){2kzXZkeQʹ6iWvW!.eq*:). UJH9CQj.C4^)DcK y jc0+QAQR z3 T23LG腺.U15fF%VYTje ʦVϘO}9&1L"(R D nyCG[="uŒ[;oM'}+hK$1 (]Y,vx4_cZ"byu"(:v!^ 4y1zNOaO,!#A]")7Y^MEBr] ejch4$fV5_>],?'(=J #i.:%.B :0 b `.R2%eH[ r#% 06'%]gh+2 q~V?LEpl.Q)ƈ(B'IAG(r8>A2gAh(6-ӀԜt;]GBK6,dFaqjB͓i|$:SvU.ᓸY[1dB~٣q5iݿMe&$3MׇftYכ ?:! vDmo7Aj[ pq``SV<~ڞ=mNZ7?GR_u~\9,m>/b3jMJt<Y:&|sIahz&бlZk3$PޣNⳅ^ps{?cOڗgւSd| cK뾤s[0"<'K:¸^55 .o !)/~>pS~..,)\(}M/7 xW4ͿE`9'faCt/7Aí+#p("+s,eN񲁏0KvBN"%@ٺSVN@ >'tV\ *QIeUKSk|xej;[\IsS]'hsq~f׾,O9SOmI/Yb]V*cH-2U*:zgl?@T$Wy⪈}Vjщ_ 9|ݭ5MۮEp%g]~(sR٘xxT ( 4ߏuo۟߿ލ4;g'2yՆmZdo8 ö5r\P@:!jB9uXI㎈(Qf?oә#5z:es6Y_j] G!FX8?=ôUxdV-2@/Uh~"Vwȵfꌜ HLU!p+ N91ڇ00BS{OcP0l"#a},^h盪r\ϪNwwk3~[n\9هiBZ6'76>6wI꬯ߥ֜h/,'4? F>4k٪]Z&̞!&+(}הiYǔ0 RhxgrrqY]9qFG>{CAa)7L@h{}r!QX__8t^tE'b5K|BϖRX( o)wu}I| nL-ylڛ(v"Qzy{bad{sAtws7>s eRNBZoWgSWwQ)<@1{ȈP@c'"zfɴKRp)MaUb,&M©IxS+54>٦ drR;`GN! L{e7_kWn}9~}=HL5~Vl3;c!咛o?Lyԫyv9;ݍ%j&,HiĶvpVJpg]}^=#ڻtn,xq֌}*(Rx@ =Xni4gܐvBnŝA|z2B6xoJn?\BMӌ)NE x .pBk H $v,P2(u~c.ˇ7[nb"閸w_y@B2ʠ" (*$JBByTRtH%ĄH#jDqgwv>;yE쾁ǽ~9 ǎlѰ2.OL_#VRz[Cm"RIC=,1RFʾŧug$,)Jp$qtuK(x-2kڦ`֣VHXT4-R߆z& {i. 3"Q`Q=Gru5kKوg0Vyѩ=VvtYvȘ9 '<%3fe'@ -]Du\b*Ȱ܍fBHG.蒼)@ŖORX9tL"p4[+a :Nh}pѲ7Z$+2gE4wҙ*(F:J@*kJEˡlB!n*Ƞp><}p}7lz n%K˿>Q/t|S~ # uh/{!rp>"N3s/n,җVQwC/h"o \m@ X|E|E~aqLf,%=>y$^R24-*TLs*gn2O*RuR\_Mdi!nkM7 * jBN* *IU }! I $숲m8g)?sh xNJ򸖯+V F"}!,Y/_'+Jx(EO#H`sŦ e P$v XH^jjχC-_lGCMaf7gz.ipM)Ô|*3a CU1IGJ1Z!eɳs!Fx;F(-Ce\-.1ԅ\_}6PH`;mVp|@8?Y'~rz4<ʹq۹a4>%<^ .Is|v!d|9; ^ t0b4Ό [w/Ë3*XdǼ>:1w Ԇ[*5M;&ܬ*qH9&CN5YCFkiTu,|:7z;̧=@̐Vy6["T4OG¨#(aYC>в LTLy+ˮd#>.}lτ/ݛM%< 7mY<ܿ+M՗AgCx8M}\&X4 c*Ȩr첎)he [:^$(zPi9G4`Я e-Iϫpb'I'&|F p,['WKHzVW;{Aѕw.ҟ_}}KMlΧq$IjZ$kVªiso~rNjOql7 \^Ʉm.j{|@>m&uZoTAZRG-ƚkp3 I s !p{nW^ U@e6 0xRaWy. R%rYcbjigTspk1y 'a2*Kn,.DQ;MqFxP]mfRC႑?\$':Co8@)QЄ9'T@/ai% D?iLr< hM*&\n ["M1GK@ٚNŪ2K }ް@_Ac8l% !?:|=“VR MapeՉ[7plPxߵܼDN*!B?G$A{o wv#9^S6#3jk}>Wʙd Qы qܚ5 y5OazůOധ]>[$\x%~ZPk~M]>e{:[K!˫!7")f,W~!'moE-Q aA hުd$f/9>H(,"|-!JH Ӳr _S&N9SAQy.{z,-[ 'Y`< ,\usO;WJ4l}t.<L ɣ7@LJw'YXBQCll/n;_#{}M~XZ#cV:DUAy'Y BBM7 QGKo|͸CuoGW#X1,b51uvwWZƏAcbdb4'e4&1TTD49 ; GHQiI2k3{{:Z(VEZHvSBaf\d%w~ֲizj4}Z}QCd[sxvW/UN)\Ẁ~i3eUԑ1L@hK[ׯLؖ'PpmC~ 3VnNb U1LPNEK_#G>oPU5{# 'kO 7 ?ogK/Wسi\±^~I{[Lv0t݋&'/YP7k=!(㭽+R.Wl@Ƕצ{ݥ4Ӻ1b~*6o)=YcE<<@ó9e   Z˖qy,,-ɞLlPlY< frD4v esn )hŸq#dι r *3Rl3\j2*91gnÃ4v%||؟n}g׈xq&;OB*ܿ khCyľs)OhW! PW%Ng]HAs@H@!L\I!#W;x&qjˇުcח,%Ksbƻk[6fU%Hx8-5n픱r^fjs5]wA-ԍ[TnG`Iʥ 04fيJ\/C礆gcc1$8܊5C  "̟J&-`/h.+pۭRf MaA*tgOb'D*yY "-o*ČӞxf~;M.d#AVd^ӛgeV9>dZZC^p8׸B^Z>ƒh%20V,"R&뒘,"1y9&V*eEaj&$a*. iR).EZ vK bN6qcvFpy>QKN%踞gF#qH+j dlm1&*6`MLcEmZ1g-[d5KJp tJw|*h` h-+&fۗBwCTүq<,r_):7ٺcvdb3Xu6\ӏltI,vs1TV) 3tUq=XԪ&DZ+"\ !crJ)/y˳+4 &qt8G'I21cd'ucŊ( {^@@+EEP5%ٔ3gws?r羯c74N~e.-Ļ_WҥTI$߳ 5*5GV- NF+h iWhhR麈D. 21FH(1qp: ^3KqOlw)}W[.#HS;.ǰCaqB'kajnC/j.Myt΁rN,ɟ!ɨ|Cxc,#wڥZmrlNLn 4=7<H|0-EX H` `@U2x$uIXD 2<#R=,Ǿr^ q(fҧ99q^[`=Oub {!5y;vcEeWb \MyZ{0BTsǝ!( %!Q<={AKLU3i{9qn!cl]mhӸ9|]]'s'Rn&ݕ#[DGC`d3/qȶ_H{wn_jWƧyQY$Q1M@dł{ { u/ZO#9 dG[iׁ%kVt"eϾw'_G_}٫@6uz ]-UmSV3a7 f3lɸ=oN#ϻ_4x$p|quk!s;(Sp~@(jiEHԜu5}xgI֎'$I?8lɦrJmGtCzTJbv>a2ǥԸ4Eaߛ̃GIe%xQWHz?Ƿ2yv"Nn s< |L uh"16D^JҰ% VװХ? Y½N 1x.z,jvа(OPf؂B WZ([ OswI$5/|oI*bOO#W͓?lld{?I(9>wM-%̬1"0׳(A53Bm*I\LC)3v\~ߢhfN Qw2:Ϛ"2ƉH!%0$~{Ǚerd -1UYʘ R@gKnoX€Xܘ`Q/9g?;L^L~"RsoyQl'W2hQZ<H8!$~.s v`Kf, #!ګt\ # h\^IX[]I?uQ{22P|%|{4 CSd*?ߌZXs #ǫƃ9 uel.Ud g U{!ЖkF!}JB|E#+-RC%1Wp,FZQO6p枃LA2 K#iŐLs_(KTj)Lm)M|mT_o~RNRs c[?˻t)HQtu],twBH H#R~)4BB *^wܙ}G7޳1ZR{6Y~c{-/G|zW(? $ n"1o~I鲻&b)AtɝԆt- &V)ɜ[F6K<)\q)Ei*wx&85)fjR ;cDMC32 Z |PU :?'&`C08^3φ7{qͯflc +& 'Z0&]#`,jN΁t.~*KݚJG57y o^U</Sx~\=pn:6) [VNe(O?Vӟ˿'}Wkxa<[9b}$nH6UɥNrioE6wф+jcV5Гz_P`c1=EvԧW0jjp%R5M`  aiASkM`ADĠr,%(4CH u Tj82TP&Cu]a@eу+nM5:IgAY= [l?ϼA%kmU#zi!ۤBS݀@2 J?*9 ? &fՐt+/p|/oĎ=oᛷPP$~ 23E*Zdh_8ʒԄG.:lBt~m5%J>#ULu.i_:ק |}5)>`@գ'cPW^mk @}sϤ !iUD_ZQ!nh*<2J8Eʢۀ^܅T!9Qr`ȷE+oI8͸de12}չ"%\B,4ZPRbttĭAG kɴ^3Dj攪>EMمw mW5<+-sURP3+C>.wW`yѭ@P੍'&Se3 x'3σgo PE܀_ "U{vX9ر06u}I/K3Kc ZoQO4\s[!-gA=H?OZg]bM%*}>:6n^f]ox<~-Ԅ׃]6c6& 8Ջ@0q܋r2mE"|V~~v"HËDM͞bƯXPÀE$ꤒbQ~]!L+v,ßΕPו\-z "4pQ !hҕj:ez>5@FX%*ҿO(XJ: ( Af _&;/owG0iKG@,]B?˛((}_u싸1fK,Ĥ^SihR*癆s\oii>HTƚh:jbMbE9A ( Z1Lg0As:Twfn~&yZ{=XSpEʵ$Пq( & :UGGU>/S {U2q@"{ (Gz O0Hinrw oG ;e}>D%S[- (hG YJ3v@X#$#{]0%ڢ\hTOGwöۀl]v|`MJ]j=Y e ]JS+.C}[)\Ǖ/ã7#'Eߎ`ɹD݊G-WwWq-hɭ74@z:PM~ 0qrD 8-xjY$&^įdH.9k O$nZX/kó.F818 0GYa[f1,pG1V1%{56M3EQqfɧYS?HÊ@?Q0=]խO!FB'`k} hjq-"b?wC۝@O pL1v$[\$ytHGu=_V%X 2XF+ۀV3t\DM>D@xs795,!c6bg)a";\*-˒+KQMG9C@̡TsbM0k݌i-Cv!p,{c ;hy676|`x}a6F$}E{q/K|߅ [zG{5vJ: <%9E_kdkSۯ' 1_'^P*ۚ<:U'^3X5ӓShy{j x2NÖ\u"J̇ۿ,3ciMc*QGʫ7uK:)~9l@A#(oZE8ĝP;H`^iV&f#y\Zr7U}4{w) #iu'R,J;XY=xd3 rNk[7+ty/Z,n(5_K_z.U [pmp0ƨw'dv(ByT՜yd$|ڧ]JuM~]nhRUJ֭v^6 MI:`JCs :S7X)Ky:|7,@\yIvtÿbX>ɭ}L.O'-z[~'^p$ŃBQX!}@\pIC%Z@dAC"MMbɕ'>w $8x)1U3 G014OUx kx sFV)̾ȶ0^F$6246m[! sT 2'LHH Af.W׽ݫsy8;콿3!ir55렒;γYrPx%ErY|d["=ȴs=7͡wsH^9fg$H6S@'_u`z@Z2ZN?/<ؚ3[K]`k }!e5 ( 56Xm3;jLWoӅ,eM'e 3}9.n>z. tq hWY^(MVh!aٴ̾]1"W#$,!@N}]z IwWgIfYO-cKzn_+ {<5sɳrMxIpϧvT{U;(_[,MQG'F9i=/H(Y0gnHl_ J6W`Hd^fEu{b_hJJr,KcޭƎ߭x bn] M6~)ax&iŪݲ+U-3e:L18y2(|lb3uu%] `CkfnIF+F\(3?f|D[&fɸKZFC-Pݜg@ /M ӣ#Q@aRŕO}񉢵~䏄/e\x\XK]/K!Pm,.&]>Yybڠ+Q)Crx:֪Iz ߻5ebItH*65(,5.|ѣ4Dg.ZBupTkbɳI'~?\Q8i<Ƣ+R}~ uFo|ы=Xu=H=ntٰJ0'l\YW%)܈E9ۄ?_E> V %L `0clIQ.QNK0 kSL+g.r,Cg<)pڷo]h!nNO_ޯN'/T$2t C5fvVE6Ӷ?dXq8uzy:ZhZEL3Tn#%C+ӻny |U9}0 o`h̆=_Z'a'⹫d/ T_,$%B:;58)05Ӫ|FB7p<#uAl?Y|em6Nޞ0Lu)+(`?5é0}Tl?eV+.AM\Ӧ&jh$qvȪ.ppٷ e %QcL&JWOWͿ48ΧS֩:}¥k塤;/|}{_5THo(hLdAB5VWƞ|*q0/Z)rmM^/gBCD@^5K"RgѬ(_4.ˁfZL+BP.1CچPҶ\÷1͡$1\ѬdZA 5)e|my=xH u#@lۀ__``di {~a 6׈my|$1-och?__~KF־%/O;ʺ-:HN7腢*0RR :{~U$!4>NX`\%2㢬 )*0RDu^Kempk8jor( ZDzlk~67DBBr_ӽuh2;hřj>%GƠ]hJ,ճG6.`? -TtSN!-Wk|IƭQ[ K4my5߱I$;0}2tctFE+xSwE3i?6e/_cOkbHbhyx%1Yz$i˕1I:l^kBϥ4&jl= ĆJpsy}"(~k@sm:ZWAPiW`~p}&0Ғ鬅1glΐQiy} e24G"Pf3WQ.%T{Wwc;TYb.ם w6OJiE{sϾwPmwξGOD]7j"HZM恩#3Y %6/ ӢLHf?qq Uq?E9iky]%UQVwLo:7F4 %9DLP2t"u|%7,:$MR\Ղڅ0FBed.+%h$|4=G?~ds%0A^+U|ܩ4:L15 E! s9~Nd._ƌO ^InsIp7*`хJ Dww 1WMS[dۜɹ4dJ?r5,h 5~9:'Ϥ ghT_8C=^#\%nȏZio#?$>'‰*wf%by XPA :\Q%er*H+D=ͳ3ry&ţ o mުi{ >FB?s NX 6p/#lwQey`] W][^ƻ{u}$H4vT|ZOw݇{kov^xܒq7  uB(.-H2'Q ?(8k)Zj7s,,ξ3l(ukvv㡞- }5WV! 3.%* y"򧙗l CZ(r=SÃE~ڍ8ؾ$8}|}(?Ǒ3"~=8=}5$[[Kێ:+>4=+S0#.0!:Xk+@(׮?=fRLeg[>HeY`YxmsWN%S%@U5PD@ed/zߺ8yҞ9?:5624rElҿ~m^QF)oۼi PqWZk/3t|D KrSCYPGjtjdqFJʫ6ܯ{2_ܭvh9o㈷Gܷd4Ȧ0VY*"\vQF7&ʙ0QJu?╄EFFFPT!,"5@B =T%쐐]Q֞0̇swmߋI@N)v7}nk{ó%XCo@xiG\?z <}u`Q+% vON|o{'Ns&ս /qW%e/l/Y*jen!h*bU  ޫd"r=cUkw`v*e+u9Aq}.h(b fqr!ut/g*y*XVcWh.9zJ2"m ՝x^w#Veݱdr hgvC{qΛTVmmƩQ@͑{X%OyA,qϯxR#+jŪAW(=T^_߆w^mza,;V>}˯|K-劋V6tĐpoڵcBStA"ϩ<ŭ_+GnkfBx~(.ϹV<6E4>/ R A>gr5buJ(bTj5 |lKIa 34h+N2[0{Fqw//}m<bsZ89QL&+r4 H3}RTɳU8Tf:&1uy|?$2G_㹭_G[ oM;ӳrz#iJU2'!, i-j M+aCF[2c֞aC? <@QEM H7R "hC1?;B:ϕw=ij[Se@ Pj )ES\2Y7uXWE?$~0uw?d$snDR I܅bmt4sX_:54_̛ӗ/gAj9A-? I ;Kp ֝D"XJ!Y KTY&"=@.`Y rQ ,̰$sS*\:9a Zcb w Zs\<NR.lOȊ,"ˏ~}|9|to?dߢ{{-sHXr): Gogזk*l7nF"Plq)jJveiy{S2uc KFgk̆`ݨż+e?W,OJc/en"~)w2_&w~dև/{';L*&W3B YMW |Šq/dq<7*m-"W4;AE^kTLAyQYU>X{+u=5#H#nӺo(݄:/t:(0ZWg9: i6 SO%<1qC`?tMǹt2:[nlP1g_GT2~Kw oŜ0h;<\ORK\U--]dNϏ3.=ھΛͧwֿ؊JXcl0_KL6z4iͨR2DZ<_o%{pvpVF"o$hu:A֌7 -zv_aE#anղ֪'d4 P3T޻ nM#&Az zsqopt  ]ijpA[%!I95xzD3:ѯ?2w1]~ư+V=a_cټ>5^HY՞ۂ7>@q_ Zny [y,56vfEZ:`ۣ L<1(89'yy! 0R+:oNCci-J(r=W*4*j-[v$P4]۩R9sNÔb#a{ Ujj1U T7¹§;b!r9-l}?dc.KG+=Q8/܊Vrw;O ـgvI,i2 *Tw٫5?,#33t߭U }Q(ҙvFg6XHxmko8@ p+j`E Ω?P3 z[Ԁ% VQ]H`maQ9?9D@!څr<#C!姼bYޚZD6{Ϯ+gSHwp 7$S DnL+*e$2M Cyۘzo͋wcE֯eI*s2;-͊pE~)W0xVQBT0&h8]Yo踶Y%霨B9/2e S+L7b0ѥZ}J7-1oV `7G/% N=]#o-%tkF_ >˦{Ks3zq `AfR6~N[sSACNz7q/ᅞ%0!YYxS/T$4EZ<7? 2{k"p%8 ¸o( D"$d%kT"R=o`n鋹s&}]|w<tR":Z/AP|NqDͬ׌r4ϑU*L)t o,\g7BK&D>cf'EF/ٌu\FnpZ9YsPk]iP ]ʜ& &K&ɬajm囤I|`AwMcp } Df\~YڣzXak1<9X|ͧ܈:8ΦP|&輏c'1MV}iT+BۊFəQ&׵ܗ_3/Jo|MQ<ۏ&{/.ۗ^3jS-rGoBZ~x0UG@kg*$4nr6(SeHS#$ʓ祳Н'+tRiˢ@*W@eLA5ʕVLypϡ,q=H^JذCy;8SN}B-!Br-pJ\&ɜ *٪ҝU' 6I MOqddޗXa8Clg~TYc/\ t=ˉzqeX'8.".*z,*E!ouX6tXP1em1hpiNxi/j7p㳸y/ =yn4A l.y0kWHzN"#,TY:E9xYfo! p]0mCƟYQ|{0Q\[Yq_D £\!C)ǫiRFHZmS:~t5t%f/Sq&}HfC2tXpr)T⁵E]+v|^Spj\JC*!R&0l3%Ek;6j3'/Yefe-E; luḓ9^/{_s?^Ҝr1Oq6)Qn fOq"ŴZv{q7a,xІ&QN*R^v!m.ƚ"֮2w߫Ǫv5 Q ke@3`)ڴRuA6!켆 UAң1s#IuŸ6Ѿ-X~XfD^\: RX&/:9pfOE7&Jf hv~{V-u!iVD?S~"hMCrوk4 26=hwV~ b&bK+ۤ952a<7NpvQk4;G#V@>$bt¿Wl&7\De"g0,{E2`à)f8ɲrԒZj[VVK$++LحڋAͩs95H}+MuW9 HpHsewbrn_+Gh LaaoIFC.oe)I0J&OF͞_Vv?|[(Ebh&YBEz(.Ynca:TF]G4q}2գw{{`jO)FPt5Ji:Gʚ`61Z!z3v=\~M?*}Yz\zϰxZQg(V͐vCe&Ǧ\q 蹲 l8^TG%2JRTAn>WTiQi1&לа$tlEXNy-bx! v rU՞.޸Bz"n[dJ:6S\0_Q|ڷϙUOVW^T ,%TYSIY !X*9LTxAb6]&:cCmkJ.,vYh4XY0&$R&خV:kRF[9OULU=Z4ceʬv_Q*8`ֳm.5qd٣< RN;4Cbs,}P9qw>ŠMũ1c1haWptIB^-u1snWi?2MBuvX)r/RGrECN] vvɴ֦AR _6 էŴh= Χ{\n.+~{x}]sr{{j`#^NBAO#TaD}:ӕL i.? N`?/ rrko]#>Bv > v޶Ɠ9~5¥1`u]( )鐊sZ(kO,㻑Bs>Aǻ a!_> G.dV2˞'su3it7VQIob=Q5ܗ4@7yn$ަ YȬ4tqf 4^!b$tJ/#͹uf, VXHtZQ]x.QT%{XZU?&+fybᙏU<إjvU^ԦW ;vq@*h[@Z `h/N'.H5UȹlrDRǧ ϒ;7Q\23j(+Q`9"| r0\ĕ;VPXV@>rc?X6hNj@NC@|qsde쬁Ŭ3Tf"G=d8K<0)\eAw]EXҒ$L2dˤd J"x]../=;{||G~+m|=EяP(9:Fu/xYEb`*7aqtS1u㋡ÅHъsm=eb t{Pi'='W<!u_BU.~R-PݡLϲ&s#_H2LbzbZ&҆ThcSgTf!n "91Zə!eNnzWLx!T4tg롘1|ӮbQQ'8B͔ʹjt$=y 7?JDWTq']J-"͢tlNHr57*#l+-|"uw"Xad  6ڞ8!ӽ4=]$O^~Κm"^hѹFӣsiD`Zš>:Ԋ)Vb? E/12YO i7ʡ?QOФ'eLNTbI;V\&x*]v*&A74g?ЫXZ7*#ϐdJ sl$34 u:=-Txtge x^&P >dmU#ҮӂUocR%1 p/aϺ?Bޱ8/he{v-?'aV8զvPCLi Oc،h1pUc Bأqa0=ݎCQ.r(±jLD4ik`+6t^4dĞ~vx),<5؜29sΥEЬ=BEŸ%f~k*axJZR 9,4v@%k:ODۆ!.+]Mڜ}K>װM)J]3( )9J=70+K+Ag(0[#Ʀ[\{5+Gp7M+~ 9C/};z=˨Teur֤JkuH~: ~ehHx`F۵T%-PŬ_{HBU[ev _q:.i-G}MZD3Su22VJ:!xA˃@\mo/ о]Cz:ȵur`[jxa[ڕdkmR͂XDs]ɿsHQ`n=}E _n \s^0t-zr An=,Q?LZO^mr%C\IE 7'Jī bEc;Y{dt;)B%W|Suˢ!J[q$HYЋW$/SčU ÓOIOxGI&)JCڷ~j+ߊ3; m#j߈Ek'9d1<k \TOMZP"R56f5CIzQڮX~뷂+nPBp 0' k+0f|>sSZ6`: J2(3O #kq;4ŽT&no'7ɬiU2uJA4Ϭd͕*Ղ!76U^eAN1PܵBSDvX(PIi R])x"2y4IE^{y1@d Xt`O߽o9y Wd@ WRwc阕TSͩfRSP"e#7Mـ fyɜY뜵w{sKaH:HW/a͚k|?q?|@ /d{#I8sCB Hwfz5mDIuѕ~RΗ&D 9bwRMWRp~xV܊W7> ^.N[ o7`̭pI*B,; ґzR % [rԪtt޳a,tC3mxī2*EaQ`XpGc &06#jEhVf8 ,T>j!k_VN5ѣѤc3Y\e}XluqQ H \l׋e`%/r0ֺ4-hR7JC_6鈙5 钱*ٸ,ؖM6xy{ty" H{#c?$sd͢Aϥ]0AU6Ni!J U-mkaQT 7!M/?1"ЇnZO6:JYbݿ_0pխ?dى7,7u1 Ws}Ok]<}?gXTBޚuo}l?eKvHb+m.y6|r-ļ~g7\ȥA&'RRXrn.[+_lәՅ$Zb$#btg;df?]Wrkߐ e_+cXMGD SpIQyksYT55bKYӴ'%FlO:|Y/}(?},y2Tm*Yth*Us[wss{{wr,ZI/^JeQƝb8w@.)zt5I]fD_!MOd#ے/:2Y:nDe#uK4[f[:pHxjS(T ܬNq'^WFp^)Z,%0OUnPvUN _A1͝P 1D`Rh;gciQATq9U^Bu;:{WKtQϥ׊vT{%l|3[l1#}g6ؿOR){ rЋmvE '^j~~_WIYaQK=9uI鿚c<ݫA*VCQ{;wqQU7fCDq>f݋lC%=We=V_Ґ_-C>o&rDqy;,MaG1"@Ma-.niᘭW'B9vaC 735Z$J2*Ԫj߲9 OeI Lg+@DZIdYfeaɳ`< `׌E4lIhFŸ9P#&ҸgIi+fuXRl Y<8,wR,1]zFnn5X f?|:€+5Vx,ߥYXfN_gPP¡4. "]CʆPEje,հѴ |^j3W+>lcIbdI,(q;$gɬ=yss3bz$jn^"yʳVzTF\ mmC%1v'@~~C7izF7*@ĐBnAbGY}"]n^eqGZUAh?oG¾U0e:!ܖp;$C.8.h=!:ypD}z~X f lFJL)vc=T[mK Z08hKJ"DUo~}z3:\eMN#2?^$8YWtK.pc.2_n.r3^ _C񕸟-9ـkg]3#vԗ/6}`mҹY @8Q <19Bh#\1>Sŝ)`%m?\//w>^aÇt~1J;ʧBB򼸷/Z"ᾐiNi>x&DB)_$ה?7 1[Qob"9DfT 'M^/ԝ8#UjO1kZ$'^eM{wH䏎K )  -1x ȳԂ3Lbn4p&)gwOY6'߬{ˎ]m)+ vjyuyn/Y"]'6`&lgaޟt_Du3-qM=$hzZ=: @|jfxx f ktn“D: 2)`ϝ0J]o_^%cA^v̬N =~?MgFi49#2<W n%LH0" *0:̈:zUx ;;sӡӹsKEݪگlχ[U~+1MShthFT#(JV _rby#RSw=VMO&Ql2Yo%\;`W gmNBG'PKYZ=_r̥wQ7bs*R05K>X6 ]ѣ5Mo.Kc,'.k&v!lzsvXlNm|ͯ#%S>O'sE^_d} F#4*ē*kFlSg0h0K`Uیԉ5q`t^ΖW|}1bZ۪*Za e:M2.#גh1oDoڵ bqްCvqPkHtqqPZћN4Hyؕo ݾ~p<:˔4ԹE%nb'?g<rikUbH^Mp@΅׃~.{qϫ;G@Kkzhտ)AтaɟTndݾ~x{]*).An' h/zDjZ+}E QvC+K=$n9&SdV;J蔄6t1u @e?BmTelܬSFh,~"յn;uŜߣ@/,I[Q[ņO*0t˷K5͈T 0XU #Uknb #c<$;\t+KK?-f61z ٍ AOK8s;䬟4~M2Y(7 lMJAEe8NTi(`H'ĺ8tE% u9 ?:os4+.asպS.ua!mRQyRŭ T;juodf M<ʡƹ51N]-z9 M+Ё-_ 0ܛ.IWE*g3VǬG4,u=<ց\SM_վ56 v4 d[ۙ4z&j?@O?W䍘y q!mx5r},SDyJFϗ58pO9-l7ItkoEXZâ8-' q@{uQ]zԡ0P ur&d6Q$l1b@Kb^TP=ZBGˡ؇O5O U3ق>KTϛ1G$uYU껳$L})q9W K;9ra''?deX\X*/>V6WEo0 xAB T)l@nP{KRP+me*9_A7Eo# 9Pb<)7yf+;IHr rQGNFU *Ƕk둢biRVv[}g'coFӾ23ƟjfMxՉ ".:+. XZ1kpЧ_a Kr(I;MF,ēy{6 mAᐸ;&c5jyCwo҆<^O>}S'xŬMĪLۢiۭs7,wH ~4LнFG3`Jla5"E~eMԡT7ƁjEWPUУm!HS4n{zuN~b#9KТ +&g 1V3>YP`hXI)vM 2oj"Mppa\Qgw(-d)e-}>C(n\w":6σ0f9q #lYS M#M<޵*uqN;#q"bp <ȍTSZ zP)έJ?%߲sGv@-'/<W{/(P2T<^cI\f^jU=zb[.Z g] 4 [BB\86âEɁ,qUe5PŐϊ2|3팍[}#q]>jN+[ "gS/BPަbqD̙Z$Mٌɮ &0v0bsoEr/k'}\(q%l5'c+RpY IvG!wo[Dl}^uT#CV+/n䪄2_Yv?/MXQnŭo(5p}!TwNr[G͓Z W(od#oO-0y E+^ m9a=_PojV"]:U<9 b5@h:x^~Ь-~!6.L12/MhS8Zo/4= OT`0!-:ބyjYvEF#9.0!Mʛ1jvNpѩ efџR3:Ks&T5)dmiG'A}![d׊s4-n&Aq7Vtg\BMqy8驰#qQ@,Hջa$Ij1|*EÂ곟}|0ݴWr͔Bh_ +ӈpáQ_!Z5C?ϬUݳgF^sg榸u3ӼZja15#Ly>kL|T犧9<+|ac?/S<_=,vrK;GF|%Fr2rVyHIW)(_=X^^[l[lZzk<7a%a)|Zg?t<ȅFK apǦohqvފnGvi>u9Y\ab^JxM&¢'1]0gL|ht$d\1o6^2T\uX#" ͈ӀrO#6;LYv :3@ƞ~ę^w&'|}4 UO<_킐>:pBrhUQ\+[ٯ)8 :;QfR6+9KKZ uT[ST5R<\xͩFoVIo+W&y ٥OSn1rHj I5}9Zޭ3[3oc^:W.RDLݗ-ƙu K"("Su\Y M7hx6v]+P4/7.TW2~\G̶'>j Xş\hb ޴?|Y9KX.ʏtwh:9DY+2JvLp"LNl'޾OZC0~HEr~^q#}|3oqp/nQ+k%g,s%mޓSkC`liO@⠇/9mX/??C*ɋvEnn*Iv .Q+B|S1+9[v:!g?⥔#2;'==nAW⍲tͦ zyI@: ù峼&!f79T"Zl8@g{rEQSi>nF#L@녓VG{x1LU}ETj–1/^܌[$H0氍idLiр=zhνc2 N}lpsf''O1f2y60jZHMEd]fDA1st{o eRnFOrNfkXO &טdSn 2@% j*ң >f(` ZU\EzV7HQSM^ڊKЎ?sf`V 6p\ǃZ9cuKcG_贎';ZEӋ5@{f#)aTq'ֱ Xo'_߫mm:O I7rm:2MlH-^P.xMw`"Շ˭d^Aw<CCqK`0'AV*v6z ] _u ]~E>(]/FwB A;D-DZ[>TTfΦwbr(n& MS0)bҗF{ -QVh7!A{t|eN t!x׋^zͪGqy~5q<(D"(Ub/{]E,X"B )02$LғI sŽҝ}~:BiT,iQp)v-za f^iGuF6U#z}bV٦C ?N&5Q> Cl^sh=ĨԊ>Gjt1,cVhKveD[GOٕv7Wi-vݣtUn[rs+ؤv8SCJ9_-U bfWϟϘ j[1<*,xWABu9r*NA ܱЎB \EVFy fXفT 5+\^V" Rrz 4ɜq+Z-|}9/6oaHDLFqnTs'e 1-'_R/7ȐDZMb]:8c(bS pgt5:*sV"[ƒ1v!H'2% +~'n1|?/>3et НZ&1%u/v;a3 e_J[rx^ R\w#3 :X$e;wzQm7b:!D* ~5ݧR((tR9RBq~{1ڏd>ίgc+~iP} }BxQWCv!{_K)BåR { X's'#CnN,d&ۉ' Wxf#l7:ˌ  Rj!J8G'J yﴧ/zi7)}DE ҃ԗv*YLtK"gw(b>^(2;ZΓ]qJx8e/fV&Dbc/-3tjk7]8XP7>*uC<],[uB)"a v#T.d|IDl<#)[a.X`Q~Z@֖rP\#<+܏&H\:=a/mw2 , ,z;K gL 9k/td29g or{O{PcnMuŜ;;T{It=G&Qӌ#M`$3 <h7oiqjq(zaA ghd)`T䵳S@^/`Sm$ՎXۊ 9:~Nq+(NʘZ5_Z8JٍV9z ቎DITdRTCj sKN 6tJe7#Fiܟ?+vVʘ2yxR¸GcR[]0G&A6|\4%$iT~ $!Q51Cٓ{4n $ͱW˻_ -N])\h'ʓz255=J%긓0}\2]踱abԭdm<^&* [73O8ajC6 ``\YjY2Iz{@k)>#E9oc?*!0q+hr|'f#Tt^9] m2YH4x^%}-*tFߗUQWX QNIjq;,h,pF{EV ӧt6<3sd_0 mT0)Iړ4r+Cᇘqڎ=E/` oӥ4,x309l JۣQOJ~-_~7G)K4FEbu%a^KR>ZH}'|=•I$v/_61;ܙc6,KʖOLV~|.@O5>M;B%wWͯ{v, _s88 r_s 6s||kHgWW7y{A]SazeNld* "v\JxeB`hE5%y8%:aIa"inH~/sřY؏}=+}O$2.H``jI>Zƕ[I8$#=:u;޴0%Ysٍ@!:LɿG *6l]rtU%tAmϏ$)/8yλacmNh9 'k@6jcnVډ+mAMbUL0jrٜFsvƯLqjA}zJmi-LH;ߠ׉z=xc@"ieR?/.52l-gl jA7/mdU gu oYnQ:鴒V UTge 8rfd9:01S M5'9qyM\G$Stkx9S\-b(!5A}JY! V7f.'ysҧDB3}Nr|Izf!U c 뭴Y 8?<×D頎#RU2D tB餒ܔz 7 @ gGg}/{y>Ow)1.cܹ@ĄL90J&1LxPFo:R5L҆JTN_wIÒ_6 _OӹB ~5($IjD !a:SIT %MJ>&XdԉhZ\6q`ax EHNmFPѢZ\q D]}5 ,OA实^57Dd:A5Y2: ҊfCR&f)kTr"q(sZ m uŶ?}N:w| i$iD-f ]J볐.|g*; :ZS˜հ!u_f:$N/f)_B[v5fؓ<ާ5. < ϳmx<èPoM *4aWm Rm+Zi9ZlAJkb1-p\{0[u絭6\{ $!d1ƏhܰOModKQ)\% p#TD^ `4h+irJ sh֣v>YZDv39 ftդ6ZۏA.oȒFp~aUfӄ^y5r ?˨)JB50G̞^,Tfds~E/"捧*/"HShPQE m4e')_}*O?R;gP,Hd'WCa'X IIb8h8Z 6ҙjt+f= H/kDP F'*Kqhx)[-y- V)T:U|LzS>34R>30QØ`ed\'F?Vp^]NXoxõv&Cip'i47 "o0mȊ :aWOYSCf^A¸+J})|ڋ ;FDiKҺ\F%h*2j}\ɷF ҇>V3N ,:furk?3ƁemLj˪u 5PyC/4^Ss] Y(ٚF EѢZ̾H8YFYDPZEѡ[v\ZEe,d_*UI*TRIe Id$ s̜3Ly|w僒wհfEl<  So8Pi]e]N,7ST`j]'(n`b&'jRywpb?1VJD RII.5WX:Ňl -}RsTYs_Z^%`#=&i ;kDBvg-oo~v,H>Y(or Ed:׹@(6/bOtиC~ҟt&5Qu50goV3f8wݩr^"oH;Ҁ1"` [X/ԞekDKIqBM|lzD tkNC2PçD5jy;.\Qy-%e`Et vk6R8L01|=(~1.Qm~._=0f{[MX9|×3b)c>yңqXk`nRڴbUT֩1ز8ɩzTgޯ~ LRc)z2}~y+Y>،l$6v,!WxΖn&[L6ް@!:s3Lqw-wxsV>Oߧ7?ne(b]n֮|fj۸ӂV3@YP,MfuɊzdIebm.Hs>cѣL1JlTzH:qGŔDypYht_\*7Wc^|ٹJT@Z+n-t5te joY WTGJsJ?y~O$gh}tc{_lJyef,7$=!]ɡkhSzevE =_r({0r i^W%*)O;s.нS<+ik 9YQAKi 81~pW̋*1PrxYfp_X?:ԪAY1:o%ՂP]iB`2"YTUDD3c /w5:`>4?@rw&g)1]Rǣ h_>VrܷJ֛yOGvRJdW:{P. d G[\~~..U&5JѪ z ~侙s^剸v7Y/ߠq$ςV3עǪWq'HlV,lT8V3k®`2s1dz(v#X B1K)yk! (Re+S (Wl$ԁ\aU^8>F |Y.?rNr_`, xfEei9#3DZ=sQh@e $R,dI4 [qMs=$CHrg1οۤ6A>?aQl_=oVV&VwMFV7⾙Bo7O KJDk5{1|Hfƶ+Y?ț`Og{52[OgZQCLewG+r\?ik]Y* ၩ;?l<@&>R~yª[coMYϖpgfY~8˫Q$8p'O%n7 [=Gӵ.]j[s y%Q#W=u!#d݇ߗr̸'3>tdVPk6u0aMɷ=QA MVft-EN62*=]vrvG,94z'8 &ynl.k`C'W;[aM8ìX֞tw6R]aL-(muExZnX!UfBj:C*{:T>g淋@ Lcvs 鸟"SyO^;ұv8z͆ ˡ]7彈]ZU-v|i;"aݿLj4YFҶG ;,=*=t谜ڮV2{'7RU(2h&.;9&?etX'鍰wM M:Y|.=t{}8?Ff=E?ˢ s/`mja2\%5 u(+~n41O|D7_ ,jKR=ys`j#u*]wȲmʛqIDswN{>TI3"Dl 1"  r,3,6gR~"9N{LTiT-vX? -$s0Ws$My5=jB~ Q:+b9M;Gwrs^|Qnx8Gxڕ3k8K i X+]&$|lpk#i[b$$.Y& 4jVڡeN^it!HKї/JBd#:69EoH1jJt=vk ?,e;!A{Ty4Wt^Ta,x1Q0G Zug=ӑ~zX5'X pW+|.aܛ_{QC!L pћ~y4p>LfRêJ=Ncq8>\,oʁr O|#vZ-h>kBEPk"U.]mB *T+a?{@9:* &Q8\D˦rEy.;áMXalYfJ^w6p(LSjU :1nŅ #yKx~"DI*;uIXYulߍY6~3RDGcvঃ\?4kQ,й镲t rW"mWTtN'xM,@Mr/Az&6L{uEr}'[?% ZE<*:˲ \|x{?d GLP>QM?x̗ҕwTHϫglPۨE&Vymz. Uvc ' i@Zeu Oоln罘;ο\dŊ>/NӧOӔw̦Pr"ؠT\ $RZ6Y5j?˩*9R$_|ӿI}fvVSy[9ˈ:ꀂ.ʨ̢8X"jrwwҹt:ENr `8٭rjwޯ/yI"Ȋ^xJ!0?;bbx>ݩ~%U\e^r-)3\M[k9 ,M)j2 WmdE+dTVTzU%v)]*I_}1T!0+kPktEH006qg7 q//olWVpҺ~[sgq0b"8Zn}Z‡i8X}YmJE6dR\(@,M/(zӪ/]2o=yM=)IR`U2x;aaɭC\Sf+oAURIaaINފSrl2K^z:Mn}-$6 ۱L>^[cGna1O9Q޺l1) G^tv")en,xgMkIY(Az+ IhDDnZzpmNR҆>cggHi[͐m6F- nD[z %֑e(CF¹K jk"V5K,j4c JMG!6!ePU̚t4x_qHupƚ+g] 0^ꭄ5Pbyԕnpϣ2߰!.nEgR}^hq#wX }N\Ln+)$=Oy=@*;fjE$J׻s84͇3BF/`\ ɔ2Xī߀p(ԊҔ\PzL D;ܸQg:MsV)\Q gfT`ϮYwj`'Mq~r6wN"^ .k(Km.[|v Tbk<'zjjp9cC%={]d~.`wkvŢ{'zFh׼;q]~^I~Dxwid@ͥxx3$+@F [[+ qf mV|{6PˎG&|Yvv ٳZs?[tRELXD>p{^wbJlc_Y an3'|ZxJc^Rqb?\lDV)˙ԫv}p*=c7١̶)XM9wں 9d,3u8 1AM&D|]oj˫ N#ܙY `JE}4f3D%ź툡 VP+5H%تFNC@ WQE""BYޗe\a~tkW)G38UBc2:LQPjA,E@C _xh<"$+tNQBpSvMɔRMSX|bLE< "M|FyV/V!C!_dC/|o`)C m w&3$DžX ד랏&̫rk#/m/jT#)rLKobENGT).=@pfQUVåhs&}/wJc’3 T*X*A&Mr9>%Jqv"7t³t"]2q*a^~FN933l:Y`p V]!UNHtjfWbX(z{MR!AffCmt#drx웓7k\6-Za3wS&5Mr4:ͧ넬2ձ xvT6`ߌ|ЯZurw! >Xny4_ .q֫WifZާVkݟZL؏v oP<Dv+7e ij!|F26R*d@ o%Fɧ@tQ aBd˦鼁Zv@WZH2tZ98*&`ޝGvxG?J 0KX3 !E3(@˺#eN㧣@(~x' \YBق:p4jTNݘh MF`uf+`:իz*v/4&"GApdT\fk.HN|kT[$Em~2KRiwoV)+ԝJyoy%N e V, -RqޏP/eDђEYUd[Vmm{D7Zd$@NRTeJ/}%d# UVaTfΙ3g|{s{(#V{:"c'h-':[֭~`oŞ'M.n讯:ڠ(`tx@: )f%WùrLbY?07Y-W`Mh[huWLWM  |ݷ[8!8j,bc7, c)^˩29 Fzr ̫l ?l[3j.ZSD.Ƃ5*ۀ[GM@*(D4^ 4P{,ia \ù2#2Wæ;y#o]c,蒔CTn? RIA!LGB) ]]jsSohTWrk8p]R,je쏫¢ZʼhIӰym`"b =EY ~ˮ>t(>#Gßu _ͯeٽL_G! ΁#basruu# %2Dڽ\?utjiv2&&'Y1n[Mgۓ^$3 G/L$>8^.D=L}qUZÈ[\8S@OpwGhh83!: aU^5 8%a0]m1K|gi8`S.nˁId5 &Ѡh\M-30'VFd]xT:*C!cNi9T\I')b/9~N]$$cVޒzMƞN/[SLyY-_ Q^Ed+KdSQ\]M$X, "(B2b=G\@%,H*dOTRI%%Ke!Hˢ=sN̏r>bg j@G;|NW6!|ry"le腺WU ՜W`WLgҵFur2\x_:1;RKB#P6O 8{ւ1P0;~/,Dotro#ni=X~8e>n|7XHM\|њ B+]vq9xn{CÿYaXjYʑ"WRT2S{c qC[3V΀*c-h ?(8 9k1pаՁ:t 0dsu;_xQ^# W]WDȜw Sk ")ULefq% jyEtqإ$^'i[mœ@[CZ$:ZLچy{_ Z@swx)6IZema禑ajj'DSAwNвfK/VI`'dXq7Dnx.{wOH&KDS2ḢF:.،e[ٷ"ѸT05c[2l1`D4$-3BEd#QfpiNqɪuH%.wy")lg,mD3؇XP=*Xrd*V6t,A9|Sbl2Ll)d o}pƧm|]S ~Im S6 TM|M3!\POO;bPJE,~0 | yv|p@jyMV5_Zgh2fyez!\C]N.Y6-e<)`@X2Nލ ?˴4 %0₠ bgܰQAL! dOeT*TYW*34g~Tzps_$Sg$Kd U=%t+nnTXҾ=Nz`ےu"/Z(t~3&v^V ^6Ri?"(GswR`Ŝ$ޡ:lsӸ>M7^#BV"&O R ȋ{+޼Yq䷛@ϫ v+j kF.jf ܂m%\nzruk=^-־Ovm>|['V3EgNAOXf}K}wLoxLZ׾6ӥRƝ Ç0qᘥ𚀒w}~L8Rmsn @hV k7j x #{>hr[WM2(RA9Y4έ{:h3+g8I`%wU`r_sWl* +-$j/U9B J%L^jEcj%GPP#m LB&`B^<=:>@fEhVȥD7t}0%AF¶0rqFο#PhhTfN3>e5"8[;*_?FPSii Й0pI:wvhJ .Cǧ+̙CXoï;msAn:/jo" =Hg8z`~}_yV; V%m^ɔL`%NX0<_m;!(s߰)g 2Z ` Ajf'_!yT|C)}Uzv/IyclAq(&ݣ[-jEf0DGO'⧤li1}t#0Fbȭ\JSnX!Q5`2[Ԫ·-?92Ǚ:D_C_T,ɡc$eT_ |Cv e ޹>+Z%4 C72݈}A/4{ǘbؕ34ŦqUJ^/3ГR&IAayN%rR6ʅMׁsWܨAm1d՟r~ModsX!-}I/ 聑im+=o|ZUmtq G An5-fz8iS^>ְ2Qi F3N3Gz+רFmE$fp3̡8R.6юo Ҟ%K@A T1 6N9u$r#![dh}96;x%Nm<1)<] 8?2fCrh-xxmv.(p;#Ӥ;d9/EsAfOhӟJ>fJ@F8&ӶʙhLD}50 8!{]nƥI27ӳ4f%{qP=3p?{{rymvZ<Ĥ>IwTΨUw[i#o<>xn:UD`|h: B_{0 ;d~-n~bbSz Gݢ`U|% ]Ф抛 u:3Bp&gkf>aPm&jSJW[%` ꩗ |R{Bʮ42XN0E[Ś& X+n"t2COmu)tWBUfil aO@/n;&~U/+z|m9g,0҆U_hka9J*{B!dLW1SEblOSS98c/ݰk8x빘=4 IiZl?[pUb @+FT׊rχJ.C{yeMQlrqwbz B}(d4<Q}l@kv$xtZȟ}?++@X[XVG^ynq"<Ƌh/LNW>bH5f|K(;DJQfU)_`UQ5Ȱ6`nק#YѤd.A63;:]9Ԭ0v4Fkkx=cpnAQcEdt?GqPbpqi-83캩j\}AyqЧn%Ԏf`!#)Rz_'сE3fke̹sNç7jEɸ%R JST>7( PjU,yj \Hrqa [٠g7bz?( a|1wX{{im3Bƽ}zs\KSF}9:k*~EĂ# mawt*5HH#夜䜓Fzogl.<'>Jg?rFtK)Q!RlZhmoiATU]<\F@֙ arkN)u3XAo~kyyk=OYESB)^NlsۑN,7rKլ@Wg =(1os^R9k};CqO)PIo)9)+JByN}ՉĶ Ev^0%|Y3` g1]2vإ̰Ktb qdQqUmUpT4U XS!It TƦDX堧̐bſ8_z"AԠUBYGټS^ G3T?K?lT# /jkR [ۯĆ^pr?!bv)WbeÐR(z^ZVEW*VL8zdJm0zMWqWngKtaozȸ&ѢYB1rݭ\ Tǜc,^e X(h7ԗU,ɵ\*cƑ+;$fJNa,vĬIo7Hu76r^ͯXFoBy)5_Wv EPr&l>LX 5⒖BsC({VIZ0%@!5Zy'r?Tvk7)մGR5/LQG! 1%J/[o.n*/_ S5<bc7L4PĒԉnA y1jFޮdq4ʡB{ "IVqL:m0`i:숩5˪zkˡx) |a~$)^k0%m ß1QƄ ݞ{:XNehIz" uoל+Jkzyb#=VGRL~[L(yRCacI ?U1J*;vAPO~FNsVK}59)Bۗq8~M85[_wKSl"SϋyE-iΦƌ'- ?I|"(H`T_'UN,6tcU;ul`(u3t"-MNQ֪Yz7_i5c hN"1^ChI xUM ֊#)rL֊Fk,@u"5o?؈\8u"qIc7_GHٽOwwMg)Tte)6~Vo+G<歐߉/9LN*sPy˩ܿv_X.aI{ (9I5 )` }PHYźٙ骑G{_?:gnjy'^WJ}Ty+i=V 4}SķvDn)rJ60j+8'h gS?Oq}~5-PtDTı(Ƞ<]6tTtp%PB )7zsoM{zw>go+ͬ{YUˆ6Kl,_Ζ +>fs;^6zϮ-',oH>3s-.DrU<%nIa, 뽷#Pp+n w.{9Hrt IAfMP¤_ť\Y$v}*1Ge> T^HY`is)ls)LW]XnGDF=mRC":6rLAS_NL|ˮ:V?_\X/shޑ)g.P&o]!5qj,Lcz9]bhN&dث!#z?ZIy_ǙһԈȪcZlWqMin;|O#[kOu" 70V#[Ep]/2lzIb98z~B%$1>Ωz?y@ ,#)V39=OSKdNfS*4u| wJJ)mN5U-b14n_׾K;?WwɽpQXrWѿUYxE@G >/3m49DU䎃FkF*N"~|U`>%߅fܻf$56 Hj̫\4\ H*JU4qȬs zk_5N1-lfD\Yf獞)]uGw-^ l~(ރ{Y0%j"aYj @CWUSiQ6"Z[Ƌ`W Þ&mws"9Ou*obГn_¬ƬO1*r T d)(QsmN2b`ZDk*%@ze;0y}1VeH3V|ތQs7u̧3эlvv&Lao#UHc7F Y}P|A+3M@Ҫ) O$Uz_w{*{ttn~$T@.yh^kA\AJ|fe+]_lX& [BNYcTi;KE:4ŖvHR.>Uy\4T Iw_ʕ^~Z#zPZfcNfp;u3/m&F2XOb242Z\*!֛I}3 ϙV߁FߘpQ#*x!yA09!aBECHh.|ͤ[^;{fM2]:27jie K|%tF!/Q^JLʘ)~HZ/C@#(5ȡj&֒"Ϻ@tZ]S}ŕ}χ(mlo c/I bg{+"V}@j"O8A j)=)>F'ʦŜ1)SZJtBi7-JKsƛ2%^ҦGPUH](5-g\;%ZCYK n/ "M k0sgV1vHm:Z?418odV|YV!􋼸M~"J%fk~J_ MPנd!N1FqqgpB[6, +iN7+H(]% $4e\6FcNJrV A:WŭodtCO ģ Mk8I[ +s=S,.mҞv*9_:L/-&?/d?ֿfC$ *P#t>Kۆ9|r9{+֏;?k;ɥNrys?[\akcv5y6F2͝d6)6,0F=DYĒzaS ⶏʭA< Aujf_G.rZ\sf惺ċi 6[e1&]us{#Ow,7yUֻ>v%{"ӭ$zD#/̨,r뭰>4?eFRkL\'.՘dNtNz:nh@) ؋}=K>3T?އp~[XXUJ|5[V1u$v3 u]Y~p @, .R}Y`Z#69o.{_7K-c?"m]#Pvݍ#C:^2ۉS(99ìj\њT|Ů2w6dVRgkidwXSm챫TvD-\omݘdYW6!΍hJz[d.\s%jYL Zo\6g{_;;d݀ ;oz,Hb|.c6bㄺ-7.4xՆ8.c.(NEv9CS#(:dWHK& OMb茼Y@eV|?Xi\iˡ(a8ԥc2Oۖ&M43EP>7ւcsw33 sv v@M4 E(`џ0Űv@glEq#o ]]Ϭ WzZ/Bj!ewx6 9;% P9QҜw_& yda2? R2ug}P7\80OR~\!bL;98 ܹz*v x}!y es+ē ~@7e 6X{ s"&^gh[_Wb:.hL)Ƿvqa6>/g'r1/F>-J(-;8b:-%J DsT8 +[PU$!0x8DHF~YvVP~~WNBģ{M *0pژǘ |tN?' {A:ErG8e܁BxkD8t]5(,5)}[}6@, l%܉:J9'?KG͝Fx3X풙;.&VW9Kʛiz@_ɂZ͛/ ɭ=3oGJ]ҹd^Pʯ~)lw^,d,[WXn i/ Tbor| {ޥ<؛tek‚Xg8kQp%,6 jOzow`MhP oO:-|B|q $e QSEX-r T4zT֮S\_MkQB"kAwmյ...b -d2d&̤CD(QP@xs}ѝy{ag *x R׽BB53͐/I6(@) yvJsƗTio-T,Vsr č1Lhj.v"Æ!tߣ_qb y.)@VsE :0#;oz~l5cÑ;Y:MO2#m5S ꤞ>|L0Bx&C:V89ʥw9;o͜va].%-UZD b{^4xE+@O$lY  xN:NJ{ t&E'wln_Z߽t61r7)j0Fj6!9֥@hF~/+!>)c[@&7˜RrT-i >**O2^II= gri,jVKՌ&lyNZ>Ӊs ]ܒ~H9Z$k)Ծ&Kwr(Z8JߋEZջ_ywHHܻGVm|l'_\.ڢEQz1ͤ| cYlb Ír0Yo-"^C5S|&i bǟ找\s'U*k_3Ź;BO%T1{잒ˣdR d%K˿ 11LU v9 2 xྀ ^  ],ܬ˩zk64ppهE9G"@zF@:• @g덛2d-^PͯǑk#ޓEf87eǔ{V~ p"K؊:Zk3)@x+@CZ9%VpZ2;&yocxBBḟCH鏥fAh-ILH9/9M@(B$ݍ"l\Dž6PʗPm_}38 [l*|Xk;T\=, /XW U6ƘaSZbHѳ.vy1yvPbS:Gw'm|Ji" sdNj,}+kMIiC]Ywb:N9|ʵIGz \Np5}$&mW 6[5|!+b>#|)%n߷)5jUw1F^^>79)s.΂7bZ" elڷd6 f.~#S-WD%\K.VjynLxp@Ci1$vwBl`+MTXM LaOdJ@7uFh:d(tyqNΟ'sB(%?|UV/~̖>|Z(>{s+~$ܮ_s`sw8h㍒lG|TGo5`g27?۹Mv}#uNq?ۅnn}s;)׶ ]ooVUOY=Y^֛JI3*Nd,s߽󠡛"(Wps: x>HtLJg+1Sq̢p] ~LYf8guC0Hh*sPPNxCv6nΎԀGNcOIJ(7U'0>x(Kf R&L1DbTSsV/YwY1qV#PA]ZIB7PmNw#Hxڃnũ[&r'4tsYއX, 'n( Ѡ:'4mfȴ(U' 1j 8w8|R ws0ˈp&p=x<>gW01 "V Yigaag+簼ǚq0&07$k .\E 8!ާ+?)ŐE TEsUA>$l~phA3*!{~k;uT†R#WgdpJl<)lM:Ąf`9ϠG)٪ T;2oq{]30fZtc 9Z-^>.BUbZ]ZM*- h>Յ,N#NٖbAd!ArZ_pZDg*){ 7el=,ˮߌKIiD{`X˲\+K-J%l9+#_ٛaw!s/WT YgNF]Ry|lXWknfT<T~ MV(&CVm%e~DS7rAi K:6qXL8ISFJ,*V1Z8נGujМD7Z`f6kt]( PME4e4K_~Ń[n8ouj6R:A|aX;C5 g2҉5\v}ZJ;j ~]mmxnc`YD1BW|:Lo#PDT2 ۹an07Ax|QjփK;h(,)W89F`:&# (׶X`|LFeQ݋b[yJ RQ2壓!v/Exж4Yk,Z,t+gx3?L#I}ZhBV'ܝϚ,sdyxey ]z2{et.Nuqctb5aţҶ3-ޮW[W3tcs9[>jf9+lÉR [VY۪/(VP1Gd:]Vy56΢uRÃGـwJV?'b<< ?.i3=+ if9[CoOVH̲:@[z }G,^ᡝh1_yX) N7rόN~F*H駐=DԚb3lw'p_Svn6u+|q7Eg&iw)|.F2=ť]Oڕ%IQJ9Sz2]ZO"1'5cl j{ ].T]i5;3h֠%?D_.2 n.|pRKqxhp` kN_aU.kf yolm=82WƼWaN`) ^2N%)CV7j=5M7('UuhVd zoD&ULH{ҩYݳ;Oep5O}V/65DV0W6RiׄHFlD;}'3c$SrܭQ[Jd?6v? BȚo)ZL^*=CiAɛ>IK]O8(*bh,W|IM L$.x/HbHOk~>+Gq}5`qP@plq- "!}UJRT6Tv@4""=g濙t=h*xz/Lh/s$q~[ŗ,DP'"w:EqJ 5<7yEr$G r"E:f|o94fxYY |޷["/g'tZfx0@dR rn3P;?)Ls*!" S]ͦia>vNڵEle"҂#Ka=~YPhe<Ya!񵇗e"xٟ[pvuܴsfLwPG֛:D"ֶm9Ro[ ARQUaK(N,BN#SAN=z W/$WăhiqqڧFo$k(?G|סz YYis`Tv{W#iowlře"H[  ݨf Z,bӱ7Fiڗ$7p/*?d+nMl'gbF#ڇ2_rGzJlHm\:Cgb`jN(P" X=e6uQ;o6t@I<KT JA5R^*L@{>[i-zH(;MկZT nB_ 8ygLZ+~s#n^~,(ZbQv,R@f$r|  bG/m'?@(O{d *)sOJg*Xhn5R0j&IY%.ŌV2)+an^ހ-FW2FRDI ?45-N;8n8+\mEDmn=jŴ[{ r',װ~۬U)&:3rZ w2%r21\ [gVgO Gcӕ*6OIqf^dX.} *XϹ5 іRf>)g{[`zh15b:B6ɨ B(Pϳ[?b!ʬ`Fn9gYO^Wۤ\nFv 8rK H7#4 >&\x.I-tl5Yl˯^/VߦKT>t7 ;3{=ڧtſW-eD :͐_dL63\a] 001Yy{x 9U!dLTcRT-Cx1[ SUNgM_؉Nrmr`+&GJ_wSOۙ`++?/.H7$e9jLllwwr5 YLmJ.t=ůD5nF.z'\C_؄ g{iݗ>_{7BIs^ޙ9SmeTj#3zaAw*-kOO=aݱi].yѬ4w۵n*gY=h2T{@>X9)*+z Sr^-l2gƪ9fkLE2)dqk(hp:?"ח,rجP~\lx6A1<Ȯ}*-S>KwhAN|15KZoK 1;>GѾ%}G{7 = ?KcagKfJ0 mM]T0i7ZΤ#] v~6 j/d.7Ue9 +:P,CN1\_MdY wQ@L#=gQnGTeJR UٷJB B¾ >=~s̟3>νwVM=ܰnk^Gs*~#nܚ;Ck™E Bt1oYz~OW]gP*!2hvt|",̮/ZxtY3W &܂눿4vӌ@iW*tV%qEԽKXPk:g>|5q.3Ӿ'@:Bw켁iOd4]n O{⓵߁[0~%f[9CQ)/!JsKV,coelklsah7p:6ijsf;UAd'CmbjvhWy=k\my;a7MN p*ĮlSfnRQ~ kt{1[$+SPX? WF9:PLWƦ!֤+)NhBVd[.cBɩ 23'<%nYt@Q~n9FB{Y2!\2 *g74Fm[Pvkau2k?@pڲ.%oaPxpBE*γy.x4QKtЬ07Ϗ˦ ]z.hZK-Š.fQ1pnxPL+]S퇹Ts"#a5EWxϦ˅#"SuZ<9S肤G!ǴrY>e]+Aɸm2a;NG+N:?vv#~x5uJcC'FfdLAd/|+|7x*{<\Jnh⊊L3»?L29m@D ˲!Q֏;nX)oפ@LYKqYԈdx0 r3^4)]Zp*Bfl=@X*fʴEUǬqz{Fy/`!\ʸ񿞭X)}&cO OͪZ|V{,MP[sDN(LZ.R$?0oc٠*(a:@*y EXhTO8ԛfG'mx朌@!UP`Q~rA'RshFl MmmGr+?rDXϩ;!7ym[C mZ׿.7&'1L5 ַ\[=_t}xkd>1^ kTJf4R) }a8бWxT7R1uMr*\B5iA9lvhmj.܂ƣ)qoWnsX{c}ǫ^gpӷ5 mB߸ρ⍕`/LGC\Ge =.irI{z_LΈbkdl٬c?G@)c4z0澈eu1fgYaV+W "]pO,B٬5Lg}!!j}|sx{O6P'O^Y<;>S%Tzukt::0T9Ms+/8$0i/ kmVgd*m RK|b9ju%a3KyN牍l~i{-ߎ"%PBQ|Cʜu3vSi'#Eh>(6tDnkvu йu8p p'{3))EYga 17笇԰v1"Έ#2ɆKؔHd[|Cu;i3]L5O+r,#_Z\|-)˅KscqI[ׇ?J̫ppFY`lߧ .9$u֎ Wc?9%~J ],jH#{\'V4٥p|%-yvg]6 7 Y\9Ѷ#j 4ͩa6tK2 50 I)Ah3%,,m6{f!B*=m%?oPP g0/jh.#&2 XSʬA:%Q$nL8|4qAV&jFXmU,iC1d[k˞~6o <9:}}ޛet AVƘJ4uМ\8[D0CffD}Rp^4K?qx1Jf}Gtv5"AN8`ꤳFkCF!RaDl;,S$eJ1\e]M$XdMdQmieѦvF[[Y%$HRIeT*dT@%  Ӎnyz9߽[ ffC6k!E՜$PSBb;0L2䝜"5ՅگZ 4x+AIG bIvݫǻS` :%4H$8xgwQ[v(t-Sd &-cY٫8/cŬdd^:y; Q7KK1sx"[۰|-\W}ps0ͩr]Rx#gdףNhFPHW; 1N梫M`@zғ )P&Y~L2hl!=ЭïX- m0+4M0N ")Up t:iaZr_Qn/z hBGQL!UI)AbTx,h셶rg|7݀gq[{}N^/a)|"jQ/c_:"eQmGrɴ alaR(N8sV65 _+ f;xx*G3Iq?"9 0هDۢb?FÅz Uk-6!]X`9zcN [Y5?yJҶKgkJ،_A\mVϷ/hniFh&704k~4z (]\[EcIU$s{f8+rK ln"p~k, I*I1 n&z E4f^/tFڍ ߬=uX6N`ȃh1zD3 EJ^P wOYscʗ9#?H]ћ@eae S2o>#jlƓ;o\{0y mO 7B&Jl>Iiڬ]%]2ڌtB:~}Kg>mWRFAmHX0Z?)fKJ q˩u]_nGsduc͟{; mͥos'e/Azn"w'2fr٭wkYqY@hJV dPYy#^J;chhi+V.Sd0e1}ҺDL&|P\u *Xe@첫َEzlﺨMA]Y:{J T ~&=tO,UKR\jjHN i4V%TQFh!2 iM`Ba T P]n8wv3cO6-2&l| J|/?2GѵO©wat#_:GP~өҴn $ <\H}U6Tu6^ȲǮ$nE.>~gh [|dy<(Է#\Sz|oٵ;7Yײ/ʞ6&l?z:Uq}kU˾s;IdѼ/F[@l<6k_X9acFA]C\=6iу.r qte̮' + } c0\Xqoc#܊V./-qُaԪb(iP_lK+qj5״b*ZD׀drJn*$W¨"39v+^wdLrq^=*O[m6L9)o<0CЀ I4AKn>/xɖbF'׼5g+۝y3~8]η< !J_2a>Gq4g-jLP"!5R-#iS%{Y=P[rBR/4`Mg U26X`i+d!G%u.(t.]OWPCf9pdu""%t {ŞgԋHx`'E42CC0ꨁ"R:7  Ҙ]俈B[%PV>| vU"l`iزC:TQF=_A0 UW j[ b\hO~ Yirl O0''&Ok&G*-2)*SuK> {F<"4(Z?9HL mL55qV.$g|fys&&_}&/etb{9ߞOK7Ծ#ڸ/Jc}8.eVR52<}(<= Tw^Pk^~ twwC=N:Za_7ON$d[EB#o D'wxlG@y ^V~J&÷i#h-)b9xE!"_[qOr(匳f q)|\ZZe}J_)g'[VLٍm$ l?on++6ݞmog>[kBr,|׍0v!Idb0w`>̮|~?_u;<6\-W IsjrWJdS/'ӽj!s]m:z"&"yOpʃ7`lNŖ*Y2^T35qL5iX&j?'zY"Ya9TL-b;hM;|it7.EJxbvݫ3uȵYom8& P4F!Abl3H-6< GQYO`@u0dAtR܈Nb:@8#t@6)P8SI3t NhٺÆ)i؜/|ҡҽ sثnz% <`ʚ\YLT\YSF=lݑ-{b/p+&g9n\- p;$okAM {T#:cUjX=GU\Ikl3>ZUQVm2H';bMrNXS^+@B6JxFhLyPN S3$ȫuJ7C!yEP Nt7hǡ_>M^@쩗"?JM8Uor 8j ݅h&֨b36x-kP.mm;y_cyxR[_IRXX eDV =)ӧ&<-9tTb-G)uFDT%@Br$՝stw$$$ IC(̸nN틭ڪK6~^ܻB)Y!5ί2s?ԇrȫwS7e7aֶrc%\4Le]2ge'@Iʀi >ƭUq-.v*ݞΘĎSOH&ǢiL1W0 Ϛ_ӋM݌qJpW0 6ΎQtbU!7*Y&ޘ P\)!Grc$&uYr7 odtKO h)7㕈\uOk=WPPj']2 Bhm5ݝV[a QkxYb*{'{\!!3+YqPbW{<"Qg vX!@U?|VCr*tQ(x>> wԇ[M Ӂ9d%V 353U j^5ow|q˖2ld}/*Rrm6j7ϥ/_x(pw1R>}XLer64tgl9>=~,#.=t?` s7L!6])[du6頸j+~*lCn˛>l0^^˟vRo2k|YnjT|V-s" N' b[AWdXwλrkP.ױn[ ."Sxy Pc=).3/^glr7([ ;/B _jDn W+ ޑy4rGJȊ ړj)Bed[eF 9΃TiU6Tx-PE$9CVQԗMo3EXnna*9NS8fn#+@ 9Qۻqc^!}1SbkRm)mh[4z>t֭1D;q)e*So̺x#j L{tasAdF.x+~Ogl_|,KW}Pr1]cݨP29kpyc2#dPĝ`TkS?z#e`m%u^)[r,)$. ]4[DX_x:'@*fj@HRkeSG9ICfX# )#(GۥLimyF&v͋+. /c߲!!GZL씜hN!,@'tASmt@e9 7ʹ|vlScFߢ~mF.\wiCK5AA⃰5v+ΊR<7^}[ѵDl.&)ig4k ԉ - U͊pyӇJu4'EG麼^{15"*+z jz@os=N8BJɵw{Ċm~ !a&T MҤ` d`{Iv2_1kD@wOžK?& D<ቓU"'S\MM$hn%X(άZ(: p whrw;w !! o-Cq\w\fkk,ٞo_o<||/n,34z(iWm>Σjp1zRԱG&IIV5w L MBғ@v!`,44֫E̓[5"-aV%tQjB@)L5Āꙃ3}cz1ܻ-J)ͷoݽPHW\ :)%ow1^:2` w QMT]D{HEXJH50XJwh-q4t]ղ_`ló)mjb/ǩ` HIY=8&撹\2hS9̬"T 7)Ӝ~e0L~?mq\;*_sͅ8X0.M;3G[C)x2w.?5o8jߐWKލ36>q~mVΝNټ? ֿ Ǧ+@?zj:mN}!C;] m'HzΕ7bkG_*3 FxI mjn܅~>(mIwLԒ=x έQIc̦sw;£%HP+U}2Z ]Ujcl8R$r UG79&C2=i{B30[Tϵ]s)`5m#V˽L03!YI ͟7`n\2'R*KW sdzե>L;SŕϫLN9nt>7CẎ1 #nNHϽ )[>neQv7٭ORk-% .>Ub?{6񗑭fh}k5MW߆"hJ k6=)ol"py9(/uOܔwK9bZK!7wLɩE]f"_Y*_Lb [v)E IM춉geJ}D>|^yZ(7,*[s/jMHq֩2^ۈ׋\Y$*е+V`+Nv\w܏F{(5&ӈ-sTF]"I.Gm ʛqnRnQ!v+j&r,_p3 bZIZ3:K=l*p ([e]R %_1dJxaУ&.ZɡLHc(nъ &Lr91YP;%GTsQ+["}Dφ*dZ `#*,)٢mq$K3sL8B)E߶ClY1'؏vC "t\tb;]^fk#olI@cZ,dV.H9)(lE@]r(suC\~?L/EۥpRh)G`$n=ICe]_:xn(-SHo _!]u8E/Ow!Yn=Dkd eE뽃K_KZD5sHkiZf"n< Z^=qWf\L6h8&%&%=:Jd__^̑F~,uHAǛ쐐K|({&]NP|wXH! gPl]aI l֭|KH㋄kF]-C5\9Y>mnR\gQ ~7t2%'və+^fp7ۈ'skOxNцtR̶L;vס|^D>ʽ.%`ˡQWO.~^,|l~~\|8][{af?ޥq-|*$^֛|2uD=q&?c{k,lYiO;co2ju0 eV0TNp_@?DN9?o-U߲:fNLj>hu Ǎ{Q&_u8#VOA5"ӷ \)& Jbsѿ; nqw Bs|JQgWd3MRW!:A͔Uk؆3 7LxՌ: !2J5K0'qv n[H{~0 #:A\Q`=31 Pf_)|f Bq$]4ı7k6W/b{lKiid|q*7_Op6Bܙub ~dkkI\A1]m6 5~!gku;CQ]/QMoT3Rը7<Z=JmPPatfLA3|tcޮ`BP% Kt~o=69P3]+m}$4eƵ>P%KH X8:WLiqǥbF4)Δr)єu]4L?bSں2#\@*5RTg {|9%SsxEԎ{#qsswߚwiy;u|YX0`D(CMGAV =/(>;3](vedH(`Tazh>:Y:16Y1]9%B<8^>G&13vglwm3tl3&.2P4'gigD;t' Zgg{Z1Kl&vn19.}^~LgZ~b;Wk)[0S:2^[v=6 z~.e(ģ{%OYBzU*<._Tq;\-*qY4h =l|W y -֗2b>]Odl[!v/Aa`aMtFAҦ9q=e?G|M'e,w)LJֲ_ws/۩tTX@q'&bWJlp\X *9X,MPdF&* FX~v%{y^k5I>rŽ҇}b*\f!ȇE{߮;L2uW "7f=7"SL70%m8GlqGD.^fV] ^XY9oJ PM P%MVL:)quDΘsW(O뤪@w jm*U5i'd~CWƀPuڅ"M{LnշlՄvaĠ|?Zyn۴-pĘ]诨tA-PdS$G PͦK!Y>;X̰ri\jglQS2GaU6OoY=}@@3*Xeµ}\^K&b+g,pdB`k775Uӝ2FymKBVˮ 'DĨaC7U|%~U:Hӌ|랶Xhdј%Q*au>T 6֌C%[n AjXV ^ItHܷBX:@9;+lPP7|))iRy5ll%9B6+ 1C̥k9n)ȷR]jVzx-w Be=?䩏xVh[CMw,Jc hwX~il?ba‚jxۢ{B]@D~8U*fiNXZEK`*zKQ\f_M$Xʎ4Hc+̈ݴi[GBL I [UJR٪*[U$=AĨ=9=g̜_s}݁cZM6o[촅|86Go,WA0SDS:cFGLIVtJ'0[DTQ-a2 v5KU+A,ڴ%;O 4e9#[f;9eeT{^Lz&t܀ϯ4uD q<82lc?ݫȳw8v]=4`[řkk!x#@_D0ݨ)z Uc E <} 2 QpDUr*jiʥ\Yglr(e~Y0+Lr:za{dSo)$ss/ȅ ˩rv7xL yE;w-E'veBaMzӹue;\ɥc cB\(8jCN3Z0:\JY١X^.յ`|kWl`k>z%?n~~^>~~?{wfs~IgHK˾\0|3F w`GcC.]0(kt ^3w7PzI c;1|a"w6wz4 5WrD0J/3 =9WH2Dt+mXA2VtGgKd/-/S1-|8[!W:CzPGފIl8L *"]1?N0Kg0||Z@B3:T!1|t`~~QyML'9 U녪O/pY"׃~K5-&+|̬1Ħ|ui"TgB׭k!錪ÙYuTSS~b\,EeD)HbV[-ܱه* SVk@tH@U6 P%6K&ᤠjfxeD΂ xcˮ31x "(GH }t:tt:\CNB C\Ԯ55UVmm=?O|{f;D`hFâ!"aX2uCf^edm3.\$/gG2s`B z0(ex1>U[یYjԈȠz!dp:ь.dL;0W3ڻ !;c~ fwY"&rf*A67lF.˽}˿/>RlL闕*A_s#]e+Nz?_,_8ʾr;xc`6 /U;IvL~=lMJM>B<|fӛ(|ιQgjLF|SLQ;wuƖcDO䔳F>6N9QVE};02F×C"WSӅj@> uaQfѵVda[Xhjg>O$LnxW Oݤ[j%WTBcF ;>"grk@du&,fI"n:v+Pg7©TQj҄ÊSjMF+$lk9q1%<-lcmF >$%zUz9&rUX֬? By{)4u&8PE=igP9],bN7hknaogʵŵ0/} `^E36b $tk[Utkݣ!%;&dl@W̑)KW%grN/26*TC}>u^@N"X=a~ \F䶓f-Y{}­RNRLUEqs U|mセ  i1 BN& #Gj@cG|YQQoT榸/U5LR!7YωUnJM"'1ĉ2Ya#]T-5nX-kI' e}]w؂CjAu3n܎͈;f٭D,J≗TPH}0.do Bn]ZX]{yq3vos_g|[|f5$w&:ME!,Zf,C6d )C"<"wgK z=FzM]O0U^·:20N݋EIZᮧ˛3T̂K&s g46OG p/$ NJ.޾JoS3 9W5NkBOtAdK!S_Fw'C2Hb͝J>sz Wl(GqT568pٵnbždY m eLbiӉ mD+уzQ{gؾ8p@W-fKL; fyŮ29PMH2$j/de`8"Clv0ņ'5ngeQ gQl G} G zX]J5bI9OT#":cFa ^Pj.\> eKO];;Hr+$I)wLS-;[AIwSS{+ܯ.)`:2,6@^ŊjO!l:l/I šIsD'sMbދx &^=lH .g}6N/1x 6ׄu9TH;h.V^'W~H>3kxa#sg8>̯vJ=e%d\!^ifšsN7<DVŲFsdդG&eBL|mk9J|42߆777Kp"Dί&+eP@ISC - (RHUjAQʘr'am;ʗG8\+Tqo@飕\4gpSi!F{k@*Tϣ+#P*(7<:)͝_gͽiɺT򇅕B|yNP0 &zX]*G: r0Y<<Q;oxdn?lX0)gx˺!&^ƣy'7_sӟrMp;ޟ%ѩ!ZPe/m6ǖwNLUA#Sdhh[]2d|yޥbѝD4_$7V**_݈g73wf6a36oDVZ^G1Ÿ[̿?ǒLȭ}:]|!6bJ.$@T99{˧:I$sC~f5XHW1'"Yd?4YT3,Y{HՁLSsiW|F3~\X+f Y_Âcxiwkkak|sB )c/Ddk5BvjQsK-v {{Kv>!>olxb*i3TLg>_&>/_#r^E"~H޿J, :åеwHґo w7lԌwMP@duo9߰1uNg}~z8/ע3WpFo5QYhnsŽ!Nd i 2eԀzbT_zLhPI+\jDr䐖n2:iə'&IzHńIxBx' CHE&*-tLNU(6U/< ntXng7)oWSyע9jN>G,+Lk_HUb Ad0 `T sdu]i*7xT(*.(*,XLy4IPqPR*N"L$ΤYPnƎjZ\ZwVI79S:@XPjl2q+r[д&EYXq?SF1=vQ⸤ᛏ["\8v-\"*׷ '2I0=A0=`Nh~}0q#] eX/_r? зԟr_3[ϤG}VN3&A#IqD|1ْH=?6^GWHwʓb UŸdƑ̬c0d61vj0Lj'JpVéjx.X qIy:!p9ZW8ZHC~硂lAXC&tQcRGWIJ'䷍d>u-%wǵDz|n}#L$J$xlk5XbSn= SϢ4xQ nnPneJ r:Y8<|чP{(ypôwz.H۲Xtŝ!,. |OhLNXfrYlIhWq'NnAƒPq ,Y84TԎۺaVAsPP:؄Se@TNGLHJ^\SӀ#r:vxPpLZX,tڞ]|$ͤ [3ٷTڕBNx`aÇRSGkJm5F;C6y fJ=HՀgA׋m̠)ssF\c5 [udxC>\3JFZ-m\eۯk]9$M*P~9#ڱvb)LR1u(k6Viք9E6~ 4Tc7,*Q5@k(xn?Lٙ-:S^IgBզߡ"9wKƪo wQz8&q+&crD:Wќw*:֨}4d"ϤiUdGM{ &]5JT̓$_=' f hCdWrR-丈ލdf .)S`,(s3ޚ7N\K/2h.Fً$Fl[,;c>h^pPG_{哎n^e1)wѣp`TRTB*&ZO%—-*|҈;k#ܚ.ֱu68`ҸqOLm˖$[勔ywI,"lx䦿{\8s3c =Og ꥄmޟCsiV(iٷ䔠wi$sNp5CnVDes!l'%n"; ~,*`V*Pɔ. iСQ+a*P>*KR@ZigrE>ku+5We̽(uz|ts%v-Of(:2@$S⋫z,]Bs|(YȅH]>c%b7?N>f'_~YML&UKm& <`ИPAfqczЖsOhv7(-nUJT@9;jh5KtVXZbwpK%)^\%2dSKQVGSnASw"4gT\99* 4Q D.xR v?P*Y7gdTa%S| ]2 E=)PsMu}9eޫR<*/qʴ iRI8#r$,޾X~e/ v#KkLڔ]9EwzZaE9C~ >m&=uui\̊Hj3r &mmŜki*"Z89 #qQRwj$|"U+ң>QlncR:Z~a~qy*|z[Q:['WXeu([rۊSfi!YGn%ǚ~mM& BO&9 EdEkeTa ă;Г<-Ua Q.WGYCr1]SLq)N)UuD'q]OCx w]s ޛV^' ufNJW\O{Qw5 m]3Z&KܞD _ܚPu <] ܗy8q^Mc<{S |pZ=E0_KhwcGT$1-\G)G}\}'LNIO53dOŭ' bS'Isv/z Hh+=4@Z0g@TnG*TI}FJDA; 4S`_Lnh) #LK۞- -K?݈~MQ?/M/S4ů3uآ*T$Ў# a i,b^ I# R<U WA٣j5,1A֞U2551H Hj CjJDEjx 3,!6*E.8v&v+Z\Ki~ƭf'#p}Oy°ޅ2S#^Ϻ~WXD+EVzOyRxABmWerw m։gx#O_/]yНӱ\ߺtXMꆊS1g\ZP i}UqN j7-1Ҫi^Y74y˜WzRpXo)M] q3EFPO_j[cibe3zOXVB6)qıY t/5u$XA!_:1L:&K$VLc3X+$j "ˁ*$ SJxtx_@Lb ̭+(#d5ҁ`#<0!%f<_훡X`#FU!^.$|)W "7˵LX U7 _{c+k;S-9yq8=8u%u|\R{\|o=_MXd-R)TUgRby馯8-sG_y'%C(Vx{I|e w&c -"<=jpM=XHygYM#+g^yqj#2K鲖i$ >AfYg9fGEgO3p 2h=?,2Zaς5/0(N (JCΈ)5edu'LS4$IۉρOF~- ѲEz'A~]m+.=$}뒇Lky6枨9Jp+\V?c*?GKWY8ZBw-dp E$ɯ I[&YМE,x>h%4g>Ji2W۪+6l*ˢݷu}Vg/jٺn,°)?t` 6|˺ Y~VL[;y}a6ċť_ؔ(/ 鐥UBuy43sJ7pF/:,٨Di@їy*F6 s"r{Lq )KJ?0yq,?.ڤT%F/0JtY n*Ap"~%k ϛ!냐EU\evy EڕQ R0u[. F3vT{\K&2^v9җz<ĈN|k yQzN-|0|X_s/ǝvˎ$4gI=|xw6 #T9*V(^.P۫TUm/NqV颱2'D OǛ8f]lGɵOG͝Hr)GũZbGq-Z˲1sZ *"LU.-_Д \#Daar &Pcə vT~uc#X89C-0*-[DlUSkNN3+`,ijX[NC}rsz9QzK{6׀Q& ^:q7{FS]~N40 MxDp!}ࡎdcIeF %h;g@wUE/.x>0+%KQr:xu8o#QPIΟ {NJk[eU7M2]E wTPjr??E[r6(w k(R6!g!7okUOְ<^%;%[j>a.Z/`'0)B#-J@&$ћE.遊u*IbȐ m0WuCE&"| af,1=8gH`"gˮn3 2xW Tqs'qlD*X,ҥjpmf;‡j"n7=s{T}5V{Np+Lʝ?7~@Ig6xf)hJ:j؄ Ol>H<}WI⦢Ĉt𱼽QL>)"A {X eT*h#L V>qhjQ@R4S^Pr/ W&*2Qpj.Q%$AKQҝ|Q|w2 kj-c_05䮛nHvmwla'oүIGʖg\/!iY \E$HL Tg=:=Ps.7] eMA3og;K#Y.SE Mص1;ɯSpz[=(gKO0q:0JǁN~QAVڸn.)]s|V-`KT%aUC=00߿;g{UuԱmt44V1 te R6/s kdm/=dj/Lw-뎜a>E*1~hV['$f^ksfj!b0~KNCJpUř;/`_Hmz?g4G~k1w]ߨeY(aGpE"im)q(*֫AEs뛴W'0NcS.ܛʕ) rԒ~faEsX6Yf67GDwYaSp˲q (#Dt&Փ#*q?nXXAw+{+]+F:S=V鼘Xr ysyga^ g+Xd>lŬۯZr!6U2Z5rFcjWz0#TLV 4@bj&z)D'yB4)Yrw=Yk&Ʒ& `P$)U4`g_5 rK6Ӣ ϙj񴈢l<~@"WR5ND\ 1UGa~?!֡,OΦ^I˄/ qQt]Stgۭu[,# >3# xàk?dp}:/97";c wv.[7} LIkh" 1KbShLuhNۄOYnYs1~d!0sWUU_yK3ZJ AcQ}K.QOLa}FE_xZM͖1$!PѤ-:GcY4I l4sfECL^PۻSvj=/+E2b8R Plq˗)f Q %KDPbf8f#G˛J(?2VJ)L}ލ.GJV!\ ,m p,oO+&ȝmko';|=*#U |O3PoN4h+jdz>hQ &TIf1O!$۪]xzo0'ԍ<sH$VWw7vr0TS=9u,yb n[藷Dϭxk9~ `s!Zfbt+i^ݲ$d$[VdlYMq3 Ln?μ~=6zFV]Am88yY@u?`u)C947uڃ/v"y,pB\Uψ^Cڭuߦ*HIxߞ'؇%T~|I9 4J!N2Lv$]2.LqK㇖FD&q _YA#B*G l/G3``lհLf)2tt [}̕Jl\uIֹ&s+]#jQC>!UpBH5y? g#d?J1wB|7]/)7 Ue>,-a֋yA+4 v(يӼ9V0_V;xToTqJB Ŷ#z~ N2ۡ)npFzC^ĻI 1 Ng4QD`*b[ ^̋:PW3ܣ mn/k(y.2BYNn=4K%(#<56<!8i (IT}|:5K;L'i-fYJbXmxdh gFGC "kFXJT3y-lgJưK`{Lد$vշ;L 7l'->J^#pqvo!C7E Q9?t%V5pTLir('1b)j1S΄ srՇuj##nSvЪ )f[O͍z̠T͔"jro{м~*ˁBՓλ r,q?w+|es$[5X~?_*L}CV 1s}҃/!}!c 5ޗ.u;젽oDҳWź:6kʪ# Ir?4A"12(Ύ׺3N9(΂"WNI "$rΖ[?FbNL*~ &w^0Jm=ZS5()]$)֪:;(qNm-2&1]4t:(Ռ1V*mrZHg pu 2MV8ʺtRm7Ȕ4A1TbM /-Dm .l{-JEÜq aukDU-–CvȅZ=4׍=:ީ¯tk~Gl$hKr,+NAx-$ͯ3qWZ|/p_wChvŋH*'^c 3QCDaSjY6g﫸!>)KmR6bBd>I}NYRynEȻB3܋erg:e`LT "OfMT< QI NMڕ д-nRK6J`8ؘLsA T.yWGR{X0 Cs Z6:T whP nT2D7 _Y3u p f U=j8DҞNV,"Tj!7f!,f`#- 1%aw+b>(Fp[~Ė[!eᨀT8/ lLjkY!T"&i ȄճG)d*4b[)^=H@4Q#5d,Bsm 5\{$~1U~oJ",~G]tkKĢ{'-cOX n.m\*W~4DJ$IDһDUʡBno/˱V*T6lroz.$e˿nWw[hM"CpTfH~oOFuNGx-wcy.A ݪ;L=RQPZx!3=ͥk˂?HRL\جx m&p{&YնKt^ v}ns;JI)C9#]NP:s?Q}Ke^\I6Iދf{_m?Z&Z|&i'Z+2+Yw 1z˫[PέwV_f7f# 68B* &`LP7ASF tjYDPd=[ҜzeutI?}旅uMzğ=""i\二g2Y/ByLdQPUԟY$!k$|]Lf\! Rs ~LI'enRK 1`(.ӯ&4D JwxDfc*Р$RTRIZ=!}߀Vi=N9CS~xϽ={{NlEF%KӀNK{kuނܝ3S 3tL_KnE{}!KlscID}5|Q€N lFjg ^QxdW1e /,'4n_ӤrS'].٪&O4q@0*:MJ jMr]E+`uQsvo[3BYdrBR4'PpsU4Ia5g]Lp+أS1J9bU*3Z@ci %]\ /fYщ[I85(@:4-1DU t O}߈ R^ֈgZdX˒qkiR(L**)c($*"-I_yoxTI`< Oj/ACH r{='c\YclqH&ţH%<*:5}sO6@`5SEV33;x;oSziJ;,r$|QY,wJ_CE;,U;dq9$*.HC>G4U8dws^ !F`)tX`W5tI=kQ&J\5Tq): 5*SmhƦty&"8{eu"HW#U}|e#HbGRL3%, ŭ3IVجJPRD*., hfw#،V$ͼ/o^ g>lF`ew=+F,S(D'MWWsFesKlv8^(R$[dW=v0֡W ?% z:z||Jzzx@: :s~TA:b!r)yL«Z0\IJIWܼ+E?~̮jͨrxX؜`7ͭmom))n{Ċ dm.7/}2}j{t۩ؗR۸/|yOތēڭv)e';o{M]JEOPzFI.Ele k3gAAÂ/4^e@}5y(ry{ޅq>$g PẆ8qpLp A5:&[@95j9/X#BB9Mjhu._ k&eK4o* dȈ]tWz\0SQnY̊S&Q.wm_rs]~] O>7ǡJ>s> qGxt1Y,%dhcwZViQmAi[DȾJU%UY섰8Žϙss|}=PMMd>ЗvG=S8ocV : 2]ˑQ_,zPI{Rp*8 (:{ii(̞WnGd?_Bf0:Js"UcHh*2*PYF|CGA[\)'ٛUMMWHYj(~Z2>o9 EgΔӇG.t|f0\2ȅ$S<'ekDe1NbFQ#`*p5q;1Eg"bM%ny: dq*vmŷi` X ׋׵bVlߤ`gViy9S_?(iP:=TFtknS@2JbzšsUf{@Uk r=UCuxybit ٺos\F=&x0uٗiuxרV;MbBlplRϛ%[uA$ NVPs ~yFF_84fwVW@O#N a\L0{;ծw﻾ܧAR'icM~V~f$fcۉzFfVŚ*>ͧǧJH~.L(k"D@Ҍda,m&{WQV/a,9z)82:TFVقsQSnZ,5Jv{N4Zy~+Y&a n25J,jzYֽ{(}]:? \rp.Jᨰ¢G1iH3DpbEإ1:2{k#7 "}3.%u!>w c9ͨ"v677)"F.eu,&\7&>B(>z]&s s;&9DC#MAe(àHPSi ek`=Heʵl пbOaB0T~ ETw e+P^<.٤fR=nypI S# f ycSiᙱ0@䋑Ռ"Δ[ȷv rL_zzshBQ$dF))\i=)VCB4Q^Jxh7u7ygihZ9)v7kLkrx$%bV[Lomnr;~,Q$'#5H6Z9@=m60VT-`q۩ku?ҡS}%jepër)#3-) =*|\_ ,kאS"!°_BU{u}?Ndzk?[ދ/nėO2;9{H_~d#wOڷ^^>L~:N{/v4G1^:A6ALfbXxajh;H3Gԍ:_Jrׯa?'{(!y aQεy6/ǮUD]ѳeY{`ģ>4Iѯ3; `i@+U OH?{$؟6hA}.M_t唴ZAשR4W6A,YYa g =Y.~_8ƭBh=AlkZ~;n V=i'B5> dM lаdM~s6uH^0S d~3l}Ql!Z.bPqM9]| z8zy˅HGM̐|+ӥUvĄ[3{oX`BQZ%nrE+~ YPQXfmMiMDZU@DQivuƥQ[ADńȾ'UI%*{*+Ba Ҷ:8N0nGÛ^ 6ۣY/FmSXG$\kF^U;*yCCtN4 ntgSņ~j ^ $AQp2"ty1. _mֻjHsfPraXΚDw9xa2 G_><2 ]qeↃ R 5BQ Bي6mC8Aꁼ=] 7>,93BuvۤvPvZ/@u30ΩP qA)kTsfH}?^D !/ 1aJH9kL&XÏ_IoAQCe|0 D-W$uj>098Z&"lS>;Z - |f[]O76Rdvw3+&KNO_ VוXa?ZvEj$ J>Z"tb=If6vōHlq ͯE {~;J ',Z%6ʪ<vZ\3VhɡsФQ94)@uTliD5 wkk nN?gqf]iul#ʥF<e\SCTy} !7\Q˿J@ԙegp X3V!׽2 \Vťr*>[[cA(tRq"&Zݿ>3_u'u~A3@퓐CrFսnJOI’2úpf=/c][/v㥝|v'獌 lݙ}%i4i f Ggbn-x0OV(lWoaz' ~ U+%CoIZ&֙`= IJ'dTet5yZ&&ϙa9hu= aZ0{om}˾i5 65c - .Am H XD{@OhOlk[,0bW,4 ;ӽ6[s>ȺSO+PCfq܎s5\)R73fXy\4b")ծT708.U92D(eV0G()B v(eF ' .p7^cQ۳N {(=$ '/IbU,#0{!> .ϯnFωPf?>KLgbR2e)47a-"^~vf>7lo[◭|>of7Of!ao&]&J[T`oԥ1^ Y}b=$15hb`k;j+L4L+7v%b'2Х@(&&Q 미 S^Y,"xPBFE'G=!q{'sm1Kb{r: _tD_X`*$إ6` k4|Q="ْ =tAZ3mUYPW+]m-裸[k[3ۉF E̵ӐT~J/  |m5CD8~]zP/s3Tia/S:6lJM hy)&-rRW rrLUd"xB]c{ |T iք˦5llHsUHvC 1v X/,ufS`\/Qeԗ>0oBI[Ƀ]/^?!jLkQAPה}em EpSu"~gkP+&D]4 AE1\oI%j?nTj9vlƬ9LM:& (p;(J`eugO{O/O~OP(%%)_yKSG56tu DlD+8+`s.Ȍ B[xt +C*aIvHe+s3bV7Ն{ EI|8Qx(13Ńj}J#Z/gP#^}[#* f 7>]|BWdm\z^:k?a6J '_kW{s<= t[ p3}08Wg%r6ҒvƖҦ߆p鷂kgs?K%}.J(BfO>|1rYA]`"kb/ m9~V4X|ݎʯiEj Ů`4z=kzGx>rhQ>;8VN0vb90ad`.qm˥wт*oX^5qc#U夹Ͼ+x3;E_4Zen%}ˣU=ܡǁÅ9Oƞ%xqќ`NUG,`g4l% 19dǔ r̩99D.+li5qX/J"v4k%MYa0gf .ʮ3^2B޻3&9}\9;{Z)ӽa%ˈ ;(w-lgDz(}C%$1뫌<8{X^0pZ Sҫqҫ6=Qv-ksǹy{B#`5gQ!NɘV憎/k'NVrZpvy /Fi,F|spzbbiogr@ŁJHa3dܦ/x JƷ-*mdk\~'n/;(D3o bx~8}doh^<%OLEªh$iMx|\"2aބj3nE«N4@*e߇YkQ .OZr-1pGx`j_!${*0pU@ EDfxg&OvK8k\麈oA;.k%yzNAf%W_$>~ Ec[Ժ?tM(|ϼލ|XI~WrۇX~ JK1\?b %.*Db4]F61{ ^ -!~P Kr}_oMN'XuχԹJ%}Q4ԒGS fGTO<P x %NGmWnܒ>!ĎD :00õ3V-+ hGθ'#kx  C`ŘF{˝q iP*t%iX~eʐa(ҩR] ܋西^]FrC@b7NS:aJ2bFXqMN"Xv*V6 P'2jxzEFVI24Amam5CvhzKĚ*HqEP]OKƔ' <ՏS5`Qqu+y -$Hc2cN k2^Ln7mJt`";īDPAFW0& G($MqO#Ԓ?-.Vr9 k^Sۆ48qz1tBO1?_>7T13gj issB!T7ꅶ^Ul"t/}5GPvZ/Ksf5B}zҪ%дj)YZ*}%=:]\H峡z:Ƨ N WwV/=V;XQSiAE PQ[QU{q]ftA3@;!Iwtҹ: o "1kmTA3?U/[z|?S9f±bM2-دjΩV=@&6OW:j$Bi Ѭ.z [`:XNM35=pi=i>̋B 7pX T91vЀ؀WZY"=%& /L@Ћxyךꭻ0扻eg]k=~x Hy#qN/?,ё.ҥ.eC(^5zI9Q_\Y不],'~: B~M~%i+!q vC _ e d-8I,n=LPLM1i`%p/ Gq pt 1HZUL=d V,cɈ(!!XZg/{=n%x=R|hoYgN]mӪa m[Xq''G$(m0S*mT(eK *RAMבqVIENyA(Di1U^gnHgu=7Ƈ>1(fɨ] `uw¦K|`cg{CgZyss@'Ye6ݶF:AwѶ`OZof_[RHm>ƌ^Uqipb ]+7ģ#af gQJ+KuUs (JᄠO:KC좞.@ 3n(۟MS"&Kͮ`R;U Edksh9T^pUK"_3H(2Ļ?eһ[sWecY f&㤢(R'D+S ſB[Qv# d(g)fS>]> q%)QB\3ON]kO.3iLsQvop}7c ?wPވR)P  (2loIl&NX7-ǡ_Z\e.I&+@ZŔdJ^Q2uЄʫ@*T#g"u*>R\wxH(FM%8v;PQ'PM vQ!UzH I k/|v}E,m u=\@e:T>JNDS$rw9Az5.5Ě&'jk jȒjexFEj>ErEatR$ʱN xZ[Ca)h@*oQբ:-O;Z$ij^ЩPu@JmuQ+d\mB#PѮw>3E,άn JJVj]v5cdd?+DhM<=%̬甋OJx| OBnKhp3xha(5BEW*uml4Iny5BL=UJk٥ߏ}]&#'! >h:"mۜڙvmQPBl%GGs"s\ UK|:̋-ghe 1WԺд'tO#@Lm1Ob}!1UA *>#y'jѐt^Alnd{?k|*G:8/0ovLYr2+xcr.U TқE{N8'Jj*];xqX'ţ's,r564efJqkыAo^VɡR+CT:_! ݥ[r·WQ!WlG{%D0M9Lߋy6z$\U6gHqmXvqn^6;a#&Hr'~XgM)2փK%/SR鳿RT u\rz|R7RG(SO A5^7d^÷Z}V ڨϢ b׍rr)d}'dX}_A01JųBTk8"S$6ޤVG/Go(9 ?+_̧ǣT^jyw+2he!l"Gv?i:$[$cG( q " CVoAash㙊?;+qv4򕭢1gZii!IVLe&(`@} sd :t]^9R-!'K?à떒s)iu/y@M-KbttJϕb;f{HOwYo] * uiXH}i͈sf3y6z&~wŶ -2ʖ%oZj_jl7]*yWvAE @-ѹhWy]V= -_4Y_x+s 0wkbt^aY~M >3Y. kDډAE8!2lܢ>? `rQQ\dOg0Pg\Ipp 1`@B ݕސj(|$sN_oR՘02Ka_ÌSϫ##UHc֡l~Ft`Vmʛ¸PǯSG)UA֋[й5'\ycp؅دfgYGdt-)'Hnov>z:Qtz-b~3o@;#B0 Fk9=fȧ&>- v }77Jx3@=lVr&v@ Yq,bk)!yo3ay1iJ4}D)nؽ: C%Kvŷ>\4Dߥt9؁ I> qWXWʼ(hsԂ.>QqY'?; &gQs@{]v/Ng-i[ ^g#Vl⧒?܏Tye O*w ݋)S_!$Mǹ'%LAV6$' |zbAЋ!^beԺ嚫YyOY:.t^lJ45LU/WUoziU5N/oPd;Y*}L?lzdi{#[MNj?[mJHnmn:Kd./klX@6Hq9Ꮃwrf"IE'X{y=A4%"PJ_52_P^PPK"8Z8UL_N5]e|^MJ."5<6*e )K(ҷӮu_MG%|a3(o& %G\٘]Ņ8Ma^\Xg7KLh_0Di;?N-|N.W|gK;b59i[q2e)qSf)u1A \Ƹ&DfNr_Y1 i:vۣ?\t~YzJj |F qa#6#?" yWR`),F[+&Q =ٯSQ'ܱuI[t״\M}mn n+v3+f3~UETΊ܂YLoр_+Fk0ՈYtT =]5gbg>lǨ1(_QL.`c"}4F3hn@{ 5.b,tuB#Z7ܳY(`d>N:tvhZ8)iOH("`iZoۀanHœf1)pY M_sVTEL.KəJ0kM7&|(GvQ!PA,Y7k`ZpA*]epGlPiAT_$8 fTN.um;"U@UN3iQ3kaA#T7RDiR{r9L! ?1uW<_;r/幠ֆ~'膆2C6{Zdr4ŝAnޟw m(j"e\}3+D㨙4ecͲMӌսM4սYiN˦DED8pu> Mu}5e~ؿa>l}bW:P.N .h2x+TZ1]sf }]:C@Ï)ȳd oPtbT=9@Q^JKu_+|jQG GW\A> gƕgtU4 @}\_J4DRa+m{ÁϾdha0V>!d⫛6K5o<&哽K/˟OE-?/8yt'Z;Z .CD`rNz/rF kM*KW-]@ݳJhQ \ѧ[aџRxkv+\UiX{T> q=-MkyFS250RA"NWĚ!I6 0X%eaƾ`K+CtG6垒䖛J-ѫmCa?;lx +#AUt@^bx ÓXՉ,>jEoE]F㌲t! `3 2#E:˩p tk#N!3lWf7m2[sS PٍÄsL&zԠgtiK:F0Cƒ}Xӕqe6LrcN`hMMvY6l5wQ+) TH&x-3em>*c:Ex#M=,䀤(/i$vDdE&ɌC6\y0EȌV#5vBƄD<^ .y03s z0:`eNE6U]\wÂbSEwmŻ3rEVFkj.kjT9*HߎJ, - c1fY{b2z2h635$iQ%,2^5^^#r8S-䈫K8hS%܄rw'ma!wRߌpDcas5{_˝kЧMғ傤'lpҹ&8%s/>[??LyOB5W0ȥkPj@،e|pܧ X6߿d:Y:xN./~QpiZ!||-)+ĝA gR`RQ`k_PWj8R"s9MVA{[PѾp1{>{z҅nQP4CNItYn TTt{+@0,oJ%[\^K'"[(Wl~+D!l _%<ʖւ/[·~*{X*ndn2e7^߶R\%Kт+ Lv\ FbP06=AI4)85R5r0.LsEMIϛ)6\0fDڲ@+Q _C?RF>Pc:J'uȴ`Z|*cPNޙP/DkZʠ21,V6BcNczVy~OWuC#Q͕y/|KeO\- !vډBJ*KVpiPrR='B9#ѲguގV=xnZT*Ɣ/õ!N7BLu wmxV\|ul1Oԍ<u!ٟO؉5%FTL3kwK$󋫉R4M49GN.VJ9Scw5?ORp.~ݎnJrѭ)[rt3@P ڷ}!Ppast?XP,7wrŃ2m+f62(B"r(#ͲG{jnZw;l4tʕ7V hb 1Z//z)b 5_$L[+9d@I( mT%NΕ6;5D(|*)X eXTI_l%뇙L~7Tx%}.u98Q1hK?ajo_FiRÇc>H0A Z\Wvmk/ҒR d&d2)4R b@={{·=y&Vz1SPrgR}^jhK")gUcDY_0K8d)ċ[e̡ PM!k*]+m$Pa|`J)&$G`W=Yck= |E@WGb=4벁X;—+Y G\;P*"ham 7g$??+k/ݍ y~\)B:!6<7ol9Xsbe.)"( ۼo73MX6ݞÿq4'h8]\ VFO%K qI䐆zY~^=-Q>,S>9d0|P5JBv]~S @NNjeP8_ə0KbyXYI,o$_v rJnHl'Tf6N|%݈&,uln-&|sbhT(a2փ|tu{):J#0z%wHoA3' 7[=[頪xӯUwTOdqeoMbcqk?&KBSn I(i%c*v]ɺC}.ᦨMfH$՘&D(j3~.UlRļ9D$F6ߡS{hب~/? A/fIkD N)Kǀ:JwԷYdims(V^KV?}auow3и19tׯwC3%FྀJef|p&eDЙQȆNSF>a{NxMnl~,S!|@Z8N0u[/TM 옜Ijf0n ]=0F8bX՜&Z;c<ŌүZո :]zǏ0mEf2 VLif|[dRpZ#N`baVLXZBvר9X=<=M` mLDLVN?MsՈ@֬_}˫Dϳk{-O0>oҟ hCπ%ҟB,cZ>dg3!pWjԿWyTy.`ܡMaWjn {uqO4HT] iuaS5p 11oړ>BśjM˕6kcB*8p2Y`2Y7Ϭqanȣ.{%x~3},/۩ŽRWRɳK[sŝwx|sEsע\u>FȖLԻcR9*T" RȽ:F$GMxNS]>RT/U)FT+kǵj>ɏjP.ɫx+>Gm=}ꁧt'1h$~w$x 4N~N2dzŕprey.܌##x`T169iO`Y -ތ.O-c|ڛLۛ&*m&ٵDn(Žr:_Ieo$K@`!f}^1=:s?c,)v5=QQ'FQ4>6`*׮9_x~)Ǭ wӷf$bprB|BAP#FpCw%7Ul@;aMMS8Yg䩘n`jOZAZLq/!je}y W4Q0*i3V?ow#skbi=/!YԌ?HY#:%GZQޤ[-1e=yYmVX]E-Q,@A[A1fT=~Z54j÷#hTbf' f7.^ quȬhxpٷ4&~QN~?\CV )dfR_͸gi1@ WxG,ЊvYv) ]CoJ@Ь] [}LET|])Ӝ$vvA-՞S}$-=91%!/11`= [ w^'{,f Gު͈ $cpRZ_$i3sBt@f8:(IH/"MNfD.H"VH4:o[.krSb*82M-0;H;IA>9K <26W?bO$^@q'Q(jQF'@lkw+j5eP^]HsK$rk~),r+!WP/*'M$Q5cz/`io8Uʋ}whRz#Ou,'yvp,gF]j8gÈWܴχvb)ͽ{וol"t̸kz a儤aR7^[#il%'Ćl\֨/|EISf9 /q5*O S$c@H-BÉ^ZSj֩rɬ~XS.[\b uN9}]e{E$ kݘ,C0 ڝ cH+`$d,=a ["#m<+ܽ㸼J0~Edž:8:8PwFւBHHHޛB{ @B;?QfeR뛙vf^ܮ$?ǖ>WWd _;%~(oxkcŷdT>2>9z{Н~'^FCmU20&-pA^%#6F,l橮e[ӠW&W 7nU?fXx-!{^iHǫC(BE-z/A>48( 9j圠81baynaEjot= *B] 4,0]S bS"i!CԪ*S00Wѥ"$SKzB\qmsp@z:-2m72xiĺN!PYq}@I B1D1Bt 8P'JocMLil0E 6\{ɄoC%+假e4^4-ubBΜ ®Rc̨p$_%T,e"0<XD )-r2zTj \ (n居﾿MBUc] )wy߼=\ezN 73BYqa۵&Q8%C)11kge;>ocU( { (z{[VhJ, 3 Er fb^-F[dXN)rgDʴ7ZnW)|)Ry ar־|fH;BG:䤝?ӓQyj0% fAϳ%ȇޜK4c>x+GLlTe^O)`:wb䆜4bB9]8}GS<+7YZ`# ǖ'wLB89Up!M59JLkyfⲆ//eD ⁀"(#88Zc9(rs;9t:7/IKq٪6j7y~\pE5ѩW??-&1YuA_2y7'U| 78Vno4fDVMKl6}R8I+eQlj7En|H-o'ɍd"I&w ۱t~'ݙvTf O?'2Gܟ26[_$pNr E&[CD>܎.oϯ_mZsr![#u3c%ʱ'EB_#'ҟK_ేEȣ- 3]eYaSή3 kj=bVȥLp>B&a2rQjqe'Zފ&S兣 Ov~? B-j0Kw+F>ߟ/ $~H IV2\9_NΙ]z`Uo`R^Tpz;10jfSM1Sn`KF䥸H682DP}g`ncŻpᇸ`] R3*sd BjPM@g԰gmzYWA Ӽ(Im9!5bev?B<|3V\]8OWg<*n$mY옞L Uj^%ᷯa$? /[j”V{SnD\i1dUrR͠C'įXAK 7Nvc5]?Et 3錣-Q$U}y3"O5vKCt(qB;l>,jaTjZ5 %L )鿵)MjP$W K~3dM&&Y`8 drEwe/UZ;pJ72iR)OPID*!ՀZnxJR[4XwaVo3h[9 e,Ny G#nL Ro&v2GY{;6h'~ٹ1xBQ)U%la u,8lm5occ+_9w$`u^#Aim/UQ/@l\NeTẃOr |fc9 /߅I{ WoF;Lro>Wn4ݹd0\iʓiP~ޥBEBHZB8O=Rv|\S#`#न W#:K9n?s]$#p˓~Logg]~j+v~qnJF>39k3_'FeFqU/5[!U0D0 !9BVyX%PӤh0 45HFZ<$Xf9UR5zvƚ/u;#9*|3F|<͈ pm^WZ>{sw`X5`HbU`S$hCfgm,Õ8q {CU$b2|΢%!žEcN0 KtD'[Cq`-@1=$7>on&%*===V4^bjM%t&Ţ `Wr/nA:+(d CϺ(:O]f9Ԯ`pPOpJ\ F;NCH'(WRIop)?eT؂8v̈:=Z.Ӹ,@s$'IB@YvY5-!fjrO=USއ8}6a=L=:GPO#QqA LS U'5*pnfb4f#b2\zt朷mZ|S;3}9OKăܲ*ˡg,Dx"H}8ĒrTAEӟ|>Е"mocXaC rtHVC }"9Ԏ?x.O(;GIa랏~b?lFo7=1u/>Z1Fm{ޒD&޺%Kt>{,6آ6>!Ļ.@{1M(Y h.s$7'լM3us]:&fٲfᬸQOHg@wV)VXw}á7ˌ]f@*m7̗S20-L t ~!K %DWrPSAjpZBtn^'(%="`Q|P)f)iUpEvJsNg)ǨcZ#iseھ3wGxq ZUȐ2]˅IN`ͼRgAX5DRu> K}Zݍ;!A.ҍ:4M/ɪQѢ\."һ`:G3nzpPx-ivӻO#_o3_!Sa[N?HX樕pvjd@D7ܧB%{d*oo62$fXVꐐi Q I hqFbsu*<.+iz7լW:C >774 VWkJ"]*GrR^kvci En.\;idx0Xg)ΨxpGgE(7JUjԪg_di%lYλ;|176 I9eZƎVH:Pӭ}nkճ$+W{SŐnm@V#R%=[݄ʢm3GfXky#&+hu+OUHA#(Edz2|jkriblj?='x4+) (gjǦ1]VΊ-(RQdqy,qE],j*^L[E˅pTʬ-a=4hKte M2{vX wAy%Jםd.RVҭwI5n W .hcxo6u!= 6q ؈2Ҩz ui$!LKDK=9=yݷyw܇w;V"һ.\@v RPf K,$ft*9Hv>?TlpCf@|'&>N)(iD<$7XsA,zhٔ3^8iGt۫,EU4[[)ġ\Dd(ZG+t2sJRqjy,Р!fz9uQEw_ޮ$ V?V~}Y9)Ghps#̑8?6vҙFQWt"Qp NhW?W3c3_f7lADbॴy#zɁ<$)*oeQ_z>< CwN|i̋7Փ & u.pg5{:4s=Z_L FN8k&$rUǢ_\wCpHf/ ŝ7F_G6s(_%7X8+n9.}ƶ&vI=Z6j7Z{Ihf: gYqWb5wf0e[RK{8ky.I| Ÿk9$4WGDU |I,tf<;l0WwK`cr+|mB"p. JwOP*a N ?̃A,7R [ubsu_b$Q$, iF*S{xku |_gCƫyӬ%W217x6l͸*H/#,\ V2 6I 9cr햫0G8/! :Cl:>dsa/^X݋g7RcQy7T[hfF1Ne>gw0FbLA6Z<-pt$gG{GqTtPܶ_XI响?+Km"iO +3-g#k#3oS#r^|%ufmDj3x-XQf&"*Y.6,`q8epu'0AXPjIZVVNHdcvjj?Yjn[Wp;lD%8wM"(#=oF|X,%E "M$%gJwF,"6A&0:(޽[ŝffXLIMm$s~Ͳ%ʮ/`?&AY tsZ1wS/Ʌ^r`5o:C928c"pnq4a$zCJ}ٙ…z6+[.M͡aNfS%b0>PH~fS1 &_ojsވΫx3!Nfq½LrA8)d6QB6#T݀<3N gu&VXweLʼJ٥K;vtzyx§\|Xq$\dvtI[kXaBh|O@m3cֲavlq\G\vULnynFAs>C/z) jƮq95ZPsmt G=uJn84ڻ(4s~3 J*"B>y jUUi.yF(|O%g @G\QpYzEla#: r:ūh*5F74vж!?J=W {iTymk[H7cZ>'p(B*m?o1)}$% 7M)\0n6`"̮V'.x쬌r+m5[W37:/LSiXbNS!$6JB Jջםebp Ih.PJ=O*ۃ)߼ފά$wt顗LY亳c7=V$KMƲo܊ (r;"*d \u|V@X`TsjR7Y$B̈^5qȢ\2\"G@\SoLwZ#<Z:]DZQ "U\0rFHdz 緒Xvs|r{=)q:}g;Sbdrdz2=_b/¿SoYzJ&#lj}"x2=s3̟,u~MF Ƥ?z%/XY=&i)O* poaL+utrqn\!7j-&7ƈw*G AM t/ߍ{oULLwSٝD|ͬSJThR>kǵfLlqXfMi%h,FI4h^ؙN'LO,QM@Tv @\Fٺk/2WU}af0c)NjfvוSE;)JF9Jg;W1gMއYjbS*l~P~[QG~kWF^QɉRzJwbv.#~aRA5i f6H8*aO$<:o⎳j)?Vv@ jݫidNcyS,\!S8$A%]NVyӅ0&31!JMOWB(FdI T+⫃TaU,beQGys=FϺyA@gxnړv*!w*v@Y^Fd:3s̚w4[blWßn |m%X(?ZD :#bq<zU.$%ˏDN}ɃT挓B&q=O}<iJ.uB3ug#:1pےVQ%gUmA*5< QD);^0E YS*Z"ؠ޲pF %6eN$7(ֱ'UcͰ:дd'tz;P<,^n"X&mFF 3*>Qۚ =HWr&]x#웷h`?~9IG$ƬxOvݕڎ՗L֩-bUc+Jlmxdbh%r+;DnNm|Ɗdq{/] yG@QJkї^<\nB-#\;m,U<LiG"MyeGjhJ3 \CWv-9S[1umଜ!S0&T۳.72>ҭ+,0YNdpaVS ǵ])~TΈ}aIQ*~jLrr8%݋CwCtvv|:yK^jG*]%vKȌcB ~$`6qM֑%yxec\)6B.Lx.ׂq~z>UGc .:%hrWHZ4t\O3$\eLBo=92EYxΌ;2ji6Py,Դ+N9xe-C N8NǃL ay6Vzie\i˖F^*(_%bkXM9T6;\3B]Z( 2@F:(tv R!^fWYM~]Ow @hgAUGU@2\jeJhb4;gOĢOBp)(-h Z$ kLJ|â\@<\Nﲁ?'S[!pO̫?v\\݉7;L栔b˽4YF/D\H?NlBr~ý.| h˩StVݳ@ߍO=> gW H#AXQQqU$B !!Nz}>W,58{wؗ }{㾴_Nf9$Y}bݣ vYDz=KnZMWpa41ӿ&88ļ@L=ę;"#GkҦtW>u|U@5Ƹ@ l|ύ@XZ&} <˵yh“EOp45.\)pF0pLD5H"ӑl2E`Rh"Dp=S{7=:v* Uv`*)V"z& &((!)!+ټ3ĩGǞ#o)T|Q0b.Y`h-1wpW4  ա^L5Pldzn{KJe[,Kjx/ R_j #>)Ԛ!l"U. bCʘ&Ԃkͫ;#ee~DH@Z2d ]N4]O6~K~ F7?e{_fq]jL#!"'솷*:+5CЩÞ_3``n7sbեTÙ^fyo3l㕿"@D{´ߢ9pǛX?f?NJp:.J 2 G v ANfk"|_qsØQr=9PD.¤#έԺ K, א\ϖtLgh:W JN_0E:&#pZiF|6E@ސ |Tfՙ!;X3'I6;k-(6 e1íR?.-d_f饷YҀYu|8 ,ȏ;Z$pM0NMy[T/ Twy+$_YUOT+pec\][ Sl>PDfSǒ[Tdqa!GA_EDN+ AkSD'tTqru2or#R흐D}d %k S3uw2,TigWQ *;'dFdp$O_M/.rj"S]'6Ht}7 y|q7,o'x^Newa1j,Z(*ϞGG!pUu.|.μ.%vՔײj+1c΋&=ajf^3=RǠ4HrjQ]Q}ӠļnHN ]>aoDՃKfآ5SvDE WJTvs0.䧂M13~CrsuNrM^3puW]BGއ=߭EV6uMv3Z:QKkHM p Yx0ZYh?ťюN!$ c#/_|}d%'bۓ-[ű[^]seGb6s : Ok\<8@ξlP8* y#P3\^_M%x "" QY]۪8:"G] (5MM 7톐B g9{a}r}|cVSI}F钮#LC^x6&7ƞ1Й3.mc `0^ ؜2p _Q*n=#'C ]IJ(b l%cL4agE9ͪ,r־f[T;w.>'mq"3l&zkTʏ1q:6t*Euv(R%v{L ! Y$oCŨQ{_4#hw?;VBi`K8h(dy'NEm&"a924IY#21\l2Qֲ'P Ggf39i/鄢 GP[d0esp6ieƯOsw9Ns2DHv,XRV2[&+J5PF&Ҳ3f }I&}o⳺uȠ++Z =qb9k; ޘ+ڈrPjC]Y6D#8JRgֶ¹:1+$^y" YzMYF 6<[8MlM=}?$'S&"vd;Z8R#|q/hͭ!j<̮nReʕh]%\(U D8zB0/V{$+s*UFU lɭTB[{phhߛm?hyJKLm [\Ծz#Y<^;1X3 ۡ=N`N9N=N33&ٳ-n+SHO5(esd |"-Pu>1A_ nwޣ%}]$4_6h Q$h /{kv᎖#mr=~t=p ~W6Ry=7' JprJ9|$B{nvݟ\\Z߭G9j*j=S* hjf9@ s:DX͊R#]˸Xf+y&^LqMửă \gË0 +FG`K=p+?ZѠf˪==mvzӒ _9Ȉ݀xq<]-bks ̈́v59 l(_~LxF3F0Q-bg9okX_Wfl ʠf Wڃ/s)z0݉Cbvs6Japl^X>f6 >NM\E'ITFMs A%ZV]𬋴nO/ߊe05L0ڮprLp'^-˽_S|$~º+$bmE%/%# ܈L4uce րlˁr7hM4DFgo@e}͡W|.0:jߣUgk1x j/J8$`0&9aW2= c] t պb Ls4*,ci;RPQ pVNyg)n-j-\e|wNNr~~;B?Ps;yR͖W6&q,t>@򞷆$0;UWT)1ྙF~l}W_=yJSʣvk]ROC|YFS7tnًڟ5s ukXZ=N\g-0 t~N:e㨧(U ҟ5&:Rt uP6{v2>1P 2y"J$VɅwQ*QHbq#4%'2&h7Vgˑs',9oL0$>y98ˬ7bȃ{kSa&52¿6H)ú>ֺ(Ћ~[5ԲXb8OJEwM_{]{]: 2eBӛ5z^/~3:Șf6X:hF-e1#550"ܶO)vԙ&6Wk>[Sj>$EspoLN ImSɭB,[Q k[t@6Iro1/F6P)J&}x_G|Oпߌn>W2^f?>yV2-JtWp{\tήb'$PwNJ DMI> -ǻFh: _Z-rO;jYX(9_iƋ梮mHc cdOhvZjILm-`bPE؄9 :V%?SiNOvhG(o<\d|*>݌ũHby#@{ˮ0I%  WcȈ= ]>"|(.ӯ4#lˠUeʀԎu\jGA77 7ͅff !avzNϙOK'm忑sZs# iӟWܩ_{(`R5' VַF :r|q e͒)aumۜ \u8-:"X™рj Kaz{.|TMC%.G cV0}Q݀L8Za_AjUH)nq{. Gdu>a6ޯRѣkeFYfUvܢR;ƨ0ӲIy=‘,q5eΤMSP I/ ;+ԼtTGL)į$Y$R# A Ut{++i@yR)SzF1[P˞d1y'zmlGIdV ;0Rx&`>>3hOb༂Akf5R&298Q&1[4Gҧaq|*EkSFOI0|L kްBP;bM 8]2C.GWP!C̉D碘lU7J7 z[7!VٛgN|Y8J>$4Ikݧ=]&!3dV &ڴ|MSLqģED D&NdޖK.cN$" .O5GDTI}}_˿K~.tG½19GbBlLG=zCn&C!nj/O:m7ٯɡ%ytY[+/˱**3I_͸I(5SZ{alUoy&wr˝`z}(q"O q?F_fӏqcO[ ^m_M9] V~Teg'Mvn狱f?W"qG"^%pNkcٛx|zp4("QԯCLI~<2kKGUNdӭwi;]6#3*eUh iIh :+~E%L|Y&%sDvN5tN32j*ۉtc@4ƪ z^,hڏ;r nMypJ@"uS 2uIjzpLGv%vn#U$ $,6}K!]`}L=tiwޛA2ϥ<,lyhtxg,IKZ)-m+߀ԇ C:HFp%0y5ܬц^0$l6_h  74-quIەF8#9w'W  5.;@UyU 6⦩`v!G,ѩRuG旖鷙l~%GQrWM_Hb(cn*z^2:aH!'UY.6?Mnm.ϵAo}DN6;2[ZKb"Fyyicp 5BA^ft3M Op|Dvep>KG WDvqW"% ,qubX]'fP19;\ Sա2aXvPkTlM%U]Q,CAQ~Ut 2Tq!4GYV>q#OV1T{n*i b]WIc4٦`ktٷTxqq(l%Kɉ*Y^|Rpj—% >ǼOǪiCl[l-f1Ԡ7MA>l]Ѳ',l,7u\c ;t|O_빏0[ لZt6kY/ գu^y)KnH8ɢ4ع3A8|?T|S1 [,0Xu;-1s;/$|Îdcο:d .ujUŢZlB y ^IY$33/13~?\32VY9kF}C " >ғ<|\㵇4$Y߭;U'_d=s =NnZj.SM\Nx^Hs 1SE̻myhDg}5{RAq&:˜ ,v 4S|\J7~VJP18@iW S ;{Nke[-/\1&(?57{DW*ԟD[j䈄oY^])2}ƾ ^=뇓&cuIάBdBCb5if,mܬ*ίQ>גp*^6(1:HKNeꒄȷxnT¹mhi-oݐ@5qG|:Fd 'b<Oy(PǨ5 nE[F5gozZ(TM.@vat={¯{W\@vIfx% Y9mBR,AQCaN5WF4[GX=lu4^C*B¸8k%[ƪ`Kx+mUR }Х,S!N-0FJ8kLwCui!B(?Bf8) (6rfj=i{̆>4>QmHn3LtQ-UnaODl佾 [IRpT>#WgZj]o LqP L7':%Mg]d,pgARZWw㩵$ 9e+(;6=)h׏Ұ:B MeZK m v j>  bz<Ո|hp92y'p}_M+!8]I,+|_*^I+JMlUvΗPBxK# >w /Y,vzR6?e{ySݏ55Q1]\DݢIp)D݀*3EJ ˡUFppB7mr倆=F|]"xDVs0 cr|);təD4-XJh YǑuL*>Dlm>%4AO?l8%H*j_?K9A//}Hd~Zϣٵxak5E5n14Gg\9Ռ䍢c3_nPp1.MmrK8h& ʚESIWq4AW\ӄGD!-wj\@46F08'~+.6/z.(Y+F|ӥ|d|2YX=7,,e%rQJמw@ bV"[wYk VN6{Ds@wozBGX̺H0@FDE[m7lmAAEd$=JT֪ bo*ꜞ\Ŝ0`/<@ e:S\h@||yj*uw$TAo>tםU&W1[`Tj[+wzG9d*40Uh4<.xW|fR>cd"O1g_/Y-2q*#9z%̬A7  e,W( J]J؃kARG")YSrkړGvr!3I V>54|Qag$=+S*@ &HZݳ>O(W0ĵ7AFa|0rSd]cہdf;gӎ.vXَ[L]G4p38;;VBc >",+]ƗϳF +֟ pJy$&jơۏoG`4O?ao%o~pO1eOMI5: HՔ2C^cLΖ5h9 g K$-'u< 4S_*tKk3ܶ2;t.{Ƴ@`k èL'Q蚆+ w; ӂNUzG& Db$2"wt8絗|AƁyOE"E:%lFRwGB bh^8GCyij,P )mm{ Y˷aOm:`;;ĭ('~Ky ~v ]mb*setPQ%5a(yZ]dӷ(L9W5p?MWlP_vԓ>.s?O)h7O%h7Y2@=07E\~_SŬQU.(_Rznp2f+E[w?u!BHuxO, ~'\y>&Ta=Ox>JVC(ʑYf]jꝈ,- \rNOoE"9bٽ݉,-S.K3*͏ -vI&)C`yee_װB/[ +ˡl-L hˆII7/?wٽ =(tUORa'Pf.h @{/=)ԓ~;H,2EVu97U타S(=JKiI%-.9]@-1sG]Hs7x߻a˺2K^O؇tUYŲJdd~b(;;X.X6ߊv7p:،401.¬򧘓ysOzt])~{yD_%O?VI%tUJ: *yQG4Z(?;U~@@k2ǻ-)YĮCXѾ~Zdxư8mt SS  K#, Ŷ(RiJ'$K^KH!%y!49O;wv;ϗ?@VoU/ꂅKzvե>rmC R[)Z{!N,`'˧_RB En5BE-iZۅy'c$?؝U5xz-&vPzTX)GTʸ/*Є3WwRAoHұ٬/F<#LѰǩ`CӴrAڻdH*I#6P'C1n8lZfRR9iڄB@N^ } > ~}:|5vs[H0}pfUY' 0وʕ]&Si%+$5k馐Vg8>S;,Lޑ\K{73}8 ۷Ҟ5C+;w;;H=Jie82[W07&,2It|VDO pe1 ]H{OMڼ s-ls'>Yٺ&_a2Gˤ8E0 U0\6?%KU٢Negl"pld[e5L)gg#pWC?+nffȶy`Z@[|"?~žt\Yiꮆ 1 X;#|r +Qg|)oDU!'M7:`P@z8ڵ$J89eMh!n$FȈdy35dpdqM]ˇ}7c:n-V(.AF+suLZNaٵDz/szbYc(Z7J >+͒! +9A;c/` 빠cmЙַۗq[./@DBJf^ L 1K:Cvy7d=vȘR QjIfmǢ?mR_/{3*:OGEAQ?w0*q:J]vb+؂+6c{Χ،{Tl#,EI#eJPeS|\Vǻ ꖀ?%`{ &!ɮ,-?}C0_C}1`*^:':g4~N(4μ{9 ׷w9{7}̅sph=P6@wrf}/ee΢'?یQ-)~L+}_k@ 2nw~Nhwfp)ħΠ*qM uě#VqR6W*1lE,qLB]% 2N abAЅw S&Ta'2ܪ9nZ\gb4Sns-q ʜQMq*$lύ.>\{ zbMW2[*L"4iW5G}2Ƹ,O0"!s #Rď$^J*naG!E{:-?Fp1ӽozxԡnD0 J&q;+,MW+mhVwv!C|s<Jң #!gL^~RBk$3Ph:.ɑ40'!TEM3!"ݸ8CW9> Ȋ{~J55VN6z kE5}#xW׮cÅCg0a4!*Pken$ 3p2Y>Cx5&cHk]@6/jF/x_h%" |kϓg> jQ^MU-o}kO_[^ۯћo9j,B.Pj1(8%Bmw>B/#G*Xf!'6(il*1@Q 5N3`ΐy{ |T //yWޣB'pɍj9.~]b:30;J9͐I0)3J#%ܹXz@̇z[V;jI}doUvLHAV'䗄dX5/76W7r6,/h-u=>w\ *'e_$m&bׁu$gݸ'!& E5EzHr܏Z 6 ML"sd0zE4֯ɜ' KUGBDcТ3x5RE`y[x|r`k}ii˙v\Aϖ!A $H>\goaKۮu<$p_RBotB.̊m\E;:n02/˵d9TgNsTmkn)YG$qR~0,sluC@huqICb%t4K'䧤#pbS -K6d(#1]2V;iV,z;P2w" ߧw K͐ݵnSB)ʳ]wrmMI]쾆|s PӖz' SƫKVfx?,"vOM</Kڔ1ّMj?$ld( :o^jf&oiQqỏ ^aQ[׸OgY3_ReU ~5F,LLwKUlvFayAɝ;&7:ϯf }\K<ʰEԊ\4 9A!*^vEkhZ |~}y_=臵vԂ9e\w=qq()v+§%/eϼG55϶/71. &Ө {έ N98n5UeNUfcUY0n=;[kKy)/e[9uAcFIwb&-sُ_ , . [{6x־.x#H8K{1]NBSb XA|SUw@5?g}wPn;}[Rpn4:5A I3[kE@[ݝj+4 @<{OW/ 3KTڰU$PH4ca)4rћX߈Ғ?t<F&axU"ՆW!$ft&=njF`Si=5I\]lb9 Oa!B qiRnƦ[R+ֹc|rFM.޲#†R%{m=Y Ι9k#S!@Sf,69!>hXv.tj]n>3M(5r'hL"7Oq]qmgm 8OU{T{TI28>禌ܥ 1Vl( Qa,jbm 8Ldr%NF^ @AA*RL"VuV./3P榆[ņ~5Q[D!mIkcܰ&s*>~QcE m :JCs1qf@EIE&d<{sYҝ tiz0'|2) JX`Jl~9a`/c GA pU,-YPbzlsb"L#tȖ9bi6a2 01{|T@A Ysx-C&#թߤg3#ɑF2{"#kKWsXl _G} +r?de?܎wa4?4qn tW07 })KꈡR?QpC6BGL *2l:!}azkC,N|e!iI7-WOU]b2+W2*22vmhXgdQtޞ1!'lwB/X^3. tahgE%Ϙ&T+Ͼp|/GIjDշ8t~YoQ;Q A;\ws) ]Fy7k èL /cˈua~@*'uvԶ_zE-8v7|%mq x?2ue^HGAvP5p9f&qOmb*[?EF[%W)ٹ0 =7 vrÅ5in ɨC5;kj.Vծ?[RI{'lzy# [fOۢwTFA{3ܪd ҺMvgȾE+!bre~MeYy0&Gda$69Þ0doc&L/lKBVq.d7kRw"&CW0DPAX&N$+DpyE} pcS+7H~C]Z qr@]C/:^/zqkt"S6},{7+^Mf3UjF +De~ '۩{?D]oT.eu涧zCS9d{Y=/`Q4kB3k^xke_ i:T$.Rv~Rn#-IyU{Iy JjM}%)Tyֶ3YTQH- a[4f,Q秚N,ҙcCr#{:]jsҸ~fzZ[}`9-7i=6[%" h87v0׭][@@n7<1_L),iQ;xI+V"Y.!C+*v7!zUu @?2SDo$=Nq٥2f;xOїsf\dz*!m(t:hd.](glCRwz&F]-n`w~jg?EW۴d%/|pMVP[MC61'tr=A_=ҫsݖsPf9Y1?oiL奆F-]".tߖ)c.xIa҈K4;I(Bth~┆*pOzGxGRkHm i7,պ3 ng1$ͼ)Qي L착zܸVd#ݠ4/{&n Ž6l 8-BIcU.kq4(ew;B%GVKQKrAփ Q%D@w=h>T*% kpokc:P}X"C9&MUu m@=cP )H"~q5Kϟ'UxOU%}RY#zPùu!aN܆iR.2E2-Vq5owGĬ"h?s`Ä f>\ ܻ??eTb'HǮUxP]₮B $^.c8٩)l W`P^1-K㹧ˡēEdaq,63 L./y8ی6QJ45RJ̖d$fC_g#ٿBvCˢpGcC< |q?:wXf'Y:^y γQFE>}GS"(<%k*0,ZN"WeP%Xi^ SnKf*ΤmP"fc3Ppsָ~LֻZT4reQ[-?1T8 Y&&Ē/Ys Cot|ҎԭDu,>XRj-rHυKL:, eUba50 $~nu=D>g!}()niມ{ko ysVI[wù^c:xKzGRΔ[BԖ,.bS\zb/2r~̹<8aw?B?$?,%**aP{"hp9nȁUR3 38~]BkX'ϣ|}F<̈3>MrSQ^ⓐh)(/9AA3RtޚO; |g4;f3Rڋ m][Lo7 눭m s=@G=2\xBca,tQVHEbto`-XU,vĝL2cn0;U&dj4 79kuT𘅉VM˴QQlnɍ>ib1|Dbދؼw1VW\][}w;X[$ޖ+7鈬 _!cX%aTAJ1 ܝR$!Iu#,R["[iZ'sܣ43uZIieВR{"kevutHrO<2wMczQZsdd%zdPGln~n`꒟ad{})f WwVPz 躅˙<p!HG/ |s,Cdz L)ڌok^tfw'8`٧RQ[˪2˳lDq)jJ3Զ\' lQb =CvIiU>7 .-ka;%u )m@x~awd, ׏}Zݥ,rkg1 H 9nf?EqrěI$t&GI[nBuK]P_# ǐ.&:+_ؼЇqpj=mLtFDv}$_WA̻0<>Hۓ&l?л96dL=k8kzNBt~s|-[6^oz4L2Sk`80k# 5Bwx7_w@ff [?&M{4Q/yڃl>Tq,s_<@.> d~q(8Yz=7l{߳韓0mN%a=)= A?"J+2)e*\.Egw2q[YlkbZC 4Y\ EXljt<)aqF71,.h|ZE ټiOעKq vX.buLP6 bڔ*λ4&WPr!OzF35nuL1D^RT"ᘔ$OBqP72Y11pHV(g'҆yC G֔.0ono G`EZgeݩ">~2fl@(DghByco􀅐r u-(]Y/KӺg|2tTJ~bhOˇ9}UP'̳QW4{'UƓ)_U(GLgcǾ_ԉRyZ2(Z,s.#L7RAl>P4Ve_(t}HHDK Rz3ژ}Cwͥ@ԬП~ 4W7)˸]n\h[[k?v6ဵ(t,lЖt[mz"ٳT9~T֟QMJFCMb^Up.سIcS(vѻ_)mߗ˾Y\;[Q]n] d7wV8O}D`jh˨7Uї װ,.QX{lsUƈvEˑi.J--e6plg-v Y0>w4eD{FVS)3K7_Cϖ퉅9T8"K ! ]C sLS4z"b.#"+҆>dڊh1^: j"A8^3謊8:*:*:x( "w@I @.Br_;t:gw9IBB@QLjVmm[{ESdx=YLA5at-Qc㜅Cؒ+BSi<e{] Ȥu+%7`!ﲆ#9gIFT]$_^OVښZFiUC@CE}vA7D9>.fev젴ovEiz!.27YWlYT]`kjqgLo`lY:cʾEri$ۯvG(6Utf ̷E~AzV怒(ݯhwbT.B*+8{ƜI\M~$ H&7aɴ^I}~܇3w<[UBa}c6*R2ݛJjmONRhox% 2%$ UA.-m%8Xʮ#)@GIŕ@ɫمE@E`b q{|j0sWcji{̝Bg2 Ϫ:G&gQ38q{X,vS)6]!>{IGDF qcD5G%Bˀ=.UOdm~Ieoc~!gdZ }‰ 5gW%pu߽ 3b䳂3{$7{+n탸q#9*F/Ok qse ¼xjHS_9 ^h ޺a{̊c=~'f~I/Ckxey^Mk9O6oZMߌ388 >b3DӗOfA#:XJgQ*)*rv .ܝ@ַYTqj/+Fu~%8AJ&+I/cvҾոͅTYD 9vMI1(eC'p\Q NCqQ[W91ōH)#jIw!iv,9n*@Be[J1,H*E d3w8|zّ͹Xp L f\k/XSOkQ7t(irH T*e_Ty9v6r}MrC[_No^n>nqMW)pG=lu<µADjxwCiӨYȞLOoE Է_H-pYr|?is=}ME|B&QRQ J~P?xGsMMwGѺ -Z!Ǯc#S% keOq6PZ&t on&f,$G]M-2)~TgGεsntÄRƇ@%T e!Jrk򶬲˥@uЦƪ>`mmO(VR\WNJ@Ch"c=ƶ~f;h,ˆ̜T_"쇡`PJ/\ 1[J)Yw.6em@k5>gMCٝ[$cG]I\"2wKs!C+$n"Trj3f9 , Ks. gwJ78E_;E,!]wJ}$'| {[;hmGi_,z[IwhuEKxlyfa!O-x˙@$^mI f "0t8#6^ m_l} d77=ԾC?-_\O1u Pw|2JYL,W{I]&] *ӆɲrx{ =ƥ9 48h|Ѧpu5*=ȿ~/yOq ZqB>NY\ahsoa {d^gJ̀&(]cԳnZ}v^W5^INֶEܐ<&a-@ }QA?UV_r ssؒ2lޥBL'ioPG+ jH'o0oOTV֍Y RuH h"REJlnZOD U~ʃX9Hg?0T;\ݵVg Ot.VښUY($t `J5~an d d]~8f[ٹmWp~cƗ8-hȤOmnfT+`BKW9RIuUɼ".8Wy{Mܞ/X$,oSQ,J)OS#͏G0x-wWs=PFuB&A gV7;oU,((=A [l+קPg_m;cbWe%YR t98px5H;鹥A"KXaG^uDXs\X26/f,H6(1FFg"U5]%6#.ư*\ks wi0@1yzݞp&:;142m>0-O-l GYcxk{kKC-(rE\ZA3-Sc/)ym5#y͏sqΆ͟sUvo-ǫް厄< @{ZB>KbF@Aw QY/m)AfζHӲQm-ݷQ8l=ZK9Ƅ$u~_3,) YHQ9~Sd}aՓ1ˁc@SM D ꙴ7Qy__:_ziFYrzHTQW<hiFOֆV@Kc/n?G563zkK0F̱ɓJIzFscIzerۈ# {t'}JӁy;˚'q }^}l[vu+;qq.*XS٤,v!Džplͥ R\w0i WúowW`Ff{nkdJbl=/9@~tL! vI3ڎC'G YG6 t^*Zx^FުznFjY!*~ Y C pZ 6`0+e<+X4EbkOP|s_ ^ ]5c7S7?=N}oV:Ե@ 4/*lmE5&GP weWTW%:Ρʆ*O%̬N"0 *77X!L` n.rPhqeDU)SWC -85dDNeHBn+ѤIMU)K LYaLACR$TiV+4{~m6B̚;Xs©-?$7U{xf~#ҽr 5v{Z0n$,w5uM4R^ ml6d4Vv.:aފ tǮcZ1ItIhO\V0-^Eخ&eUfghZP)P`/h+c}77AX~AA0cc 2Ez^3=!$ϫ9G&Yl4s༉mcSsmf8$'b4*ZЖ_u3uf@D2bia$3.kI)oUǸ]ޒ }sx٦ pO{Kpgqo9cm&z ;I- N<|4kpE}3<˗/|XôƼNƿJFOYET)tfSG('xAW@1 IʰE߭)h^فlp%b| )Fq)<~-:;AB~Wr aY?S,)NҊa[v@g"cZC$-SG eK/0V\ڰw]'ۖMEګYbbK; U:Z_B@*JX}Z{-ާRM_Xm̛/&dgrDI׺myC[Ll=∅JpB︃s!gx)piAE1!(O[Y j-.`.A9l;X{F.璚^L=rE-dMimK-+=vwe_wi m‹p+O/ЈDC[@P瞶7n3jdUŢ v)3z{e.āPRgt ]mmj˴×EqADʢ8"€ÎasBVC&7{H A,3sڞC9gʏxyZ3XV.ŜFf5jpqsviBW4**s%6NǼC+E[xaǂB51v1 _xIu:`Am%uʮ(0&WEY`ÔY]|ҒG\[+}bJ6qp*9X1~~-ȧ(J/M3 #Y.(F7VNV~5pNCNME ƐKיZΣ1O~ LteQgz [z };w`roӹyǡ8y8Lz>Ny<CؑJ;hBڅpQr[VaWf|kWPk#?At> mmO(?'{3Bo{3?S_;,M\7wWFE낮Ngv"7N[O2,, [ak:$/OG&6@>*fg4ZNYo.dW6ԃ6qeETw-$)9o â+&@.w3&^j*N5/F;s**" ]o3e$>Yp8elJ`}G/_/۳/X49 xKKʺ geGQ 3[&.>,6F3޷-d=DqA.`6UY֗Qx?V"̋{R7Ar!Ӑ(E|kr2Q^-BKNа4M)XP1zft-1sxYO Jm6䥑Tծtn!ƣZSDDIG{)>DCB{+,C`Cdžu PpXK;؁ssodc)t9F%ydd k\q Џ4'k\6!WkI8^ II>y+,{~g4lص gQqH/԰0o!=kۍ/eCOLOdP[JXc;KI2L 7VNCAVW/Z82v@x 7^';u_#;WVOD ]ILX]T*&.p;E}D۱nvUB! qZ==-`xxA+y c w.zɁEA%a ʘ6"Lo Ƙ?k\mMWl$17x?d"{٤>v.oZ~=-^qhe1 wS^lE)R:^s}1q+BGJMm\lsV1Ѵ“w9/3<;iS(jᴭtUzhC/!xYK9w^"n"A>@I(HljOӖM,u? ڙhָv|2}l8k~T[DҝT+=|| nl>1-dϩ$Ӑ!T4ôǤa3L^U% Rgr98Y`^ƂU9S) rwR/ܛ|H'Įi?4$ʸ2l(1|8w*zòa}C:íp|#ݻ ,ZIx[9<}Єf|Xz.}%Qc`%&XPͤWyTA)yH&TU=69oR̓}s:=0&8(&Ro(Xz5OT<1UJ6}su)yt oi"캉 6, 6^ϻ OWD扱<"U?<;27&-+銕h~⽏3\]Q4kWr"UA@""X Q`C0;LezN/ L={j>$,9zegU3k{Y-bbz$`1jrZNs=ORU"'㰊w#0d@kwfurzdn;m| P9tP$Ζ'%3Pjl\lvbw\/Xgiff[Nz 6 Y9Ӆ2L#} `£֊[*&{[l `^#0]w-@2ʼ6rI]ȷ2jrosYKZa;pI\yllzC-bu)j( ezu[Hs_K/y?WиGܲFׂ"89= i{xapU_Y:|5B}tȱ;3Nh ]F>OW^k#oe/rjUqc~F,3W#YE\+ifh'M q6mi!eȷ}{j]2ZmyCȘEm B43{,^/zP2BCsu]];tE×ڳۦ5 $M*# Z9!oG yX%"gJ2_+|*g98cҤ[N~^q3!8C|NQj}806Z>1GJ1^v/͉ܚǭqHTC VBh,+HPgjk):sShndGS,id5n !1BOO *徔,L)X"irB'::g Z1_UR;S:O_TtW*,NdMf-(4`am3Z! p544([Uݠ!h>>N|b71Q ʅP]_Lt$@ D.isn%{u:uQ R]f-.IoAK BFNv$'DϺzVD_671KJ S+MŽ/.q3"0]#%5hi8 YUJν>hoזѝ}Wx>:}ûU ɔCzѮ~Yw\uO՜-M8Ay&'Ի*^@NTtKd~4xf_Q.*K}@pz=!)׬f9Ѫq8XE VDt01rY=*ͣ, Îr%057V nkpPCp`N:I[ W}ۈ/K!*ee2oRq 6'8M6N!R5jVסC8ڭX}oZ_N00h-2"DFDh(O"9 A.Ϯ& Uԣ+^Qc.R.RDaRBMIOH̐II&a %$-gs|x<Ϧ:$D &`jeJOV>,\u\ק`utgz xًM7%=%6Y}}s$sD,Qg ? |x0N 8,U 5Ԫys=fuL{ ZTRVT F掜F?3;(,xB;b*]v}ۛ#xY~'a##=?Hz z}'0'V>|5Tgd3)_(WHfLM"ѵM|-ϣ&a*Xw1s %[@A~K-@7ǧ*Yku)`>̾Oa<U"8*fW5x[V1EN K.UYo%em)'DػC -g"+korR82 ;k23rhG<%ZGñ +6:|`ͭ+}7^?wW{Յ2UK^g1J&Bܘ:ktW'7g#.mچ޻F brA'ٵе ZSZͦ찢H^zz]fxqlIY(-v%UȜ?F .,v6㘛fNn"D D<n9 !Lc&BV`:ym ͬ $Qiˏ0tT%c?@$2.e>wy!c<_z7!-a_G ,!Y 1٧R6?R;:f⏁LR6Q+ jl9jvyZ1*W.1cbHeqo+4y x#v%\'Ԕb`b:kmXA"wd G{a|ٔXÚCog ) V[7iɎdT\eEyVUu4,"kCJ&$yj2"u4c`Ֆ` OG=qjgÈ=@d3)>Ye`/j*HEË4 $Qe4iUF}wmJyzf /IH1_Ќ?8z%K]V\1%*Z =>opik|Ћ]&Q*@RIBWfLOTخt< "s ,7As&|) zfrb6a -NX ){j~ T1Sw!]G e#d,? m"œя ;ii:)D1;ʺ f 3E;0=Juމi3e~ym.O=,4yaq5ykw3kqr&U.r#uĕcsC=3F'P+BWGLIC"I6p{8e1צ%M$Ҥ=#9v;DW8nj@.11w6 qb;&܆IL1c @zZ]UY$$~%w3UbS\eG+SuD8B:s_pB|w<8Z݋fF'55}8XfhNh ҁ.܋j>Žon+vo -H`k/MKKJo :IF xQ/@ҳS#pGRW(·Гo[Vxd3?g2ny0쥙U&gʪYuEIZ9t&"'߳c,ɕ̡JD{'[a +u̾fz8#e^|JpKy20{es}4xnyH.oIo2?{qՅu¦gd7ϿH8~B7Uopg#8[%II;v Gwy<0O4^LõC+u:._c8J(]oι;͌.ϼl,IMP$م@Ps zjy^+%~dZdI1@319̛H&/z5. 5P/vݡ{ƾ~N9akwFp0p@< $}ڑ/{uG1<*[Ô?0 V]ȯJcG# X"Z`&y-;~o ًhx G#ǔ_r_gUI~yʑD%QvK4G\C!bm!A^G(^M\.9STb4dlgC"1hZ㫖V[E^I|e8Ė ۪!a߆ͼ6HDbgkwqS tŐvQjt~yQN"͡(k6#'mMcޑ:q0}d?LGj}@@ɲ4և*z$rbR/+dC =#=1./R*6ޮ!E_H^&.$2*+\:9(65lCb3p3 *I؜SK;(&甓6FHH%Q7n U)j" ѯxAԋXM#!=F^2E~v!ZBɞ_ X#RAЩ2q^}@QKQq0plÕލ#[18-Lc]ot 2y NM|']t=V4gޔ\I8*?T`%`B%ZА泀Y͞4o!?@0b#ot\AG!-&GHLVQ:z0v4*>[RBYK5ںkͪt̺7D6Y>>>텃X8tXj1Id Mi83}5֬bnR4~ 7nxGQ_snPŨ󿧥A}y|?2TJ:9pŽliQudDI[=P*Dsam?()'/)$ W Vk'm۬lc"+ Uvj0. M?֓GTؔuWYܒfvY1(#-E29qnH?Θ"1o!Y[\/kR"lHʋO  &p}+xpowsP5RR^2}j"Ax#:. x(⁌΀r##DB9 9ѹN;!}kuO[[_j 6^?{ óu#19wps-~ ?FޅF8EB1{ Xev~m$TWFLCgZj䪤>qc.p59/N~ֱqrh%j\lvW^  AVhIдfa)i{f!yncf;S1*yjjJdi-MR"&86?H( yY&~rF6a6(T-fļ.DǯĀ}fv]+7?W4WH.l_2*IWOZ }eJ'W 3L"YpCa 6jXvrx's'w"Vp6d}zXOtQ$qmʼra4冶=alrUJKlڊ+i`>"Ž)əԷ'y.,FB 悼&3wXKow)K\OxVza͎-f.Қ2D`Y0.kĤΡL3kBxFWG6?K}AMZETjU!^3; S& !MTJߴѰAx9|f\#5pe'S RF=eEybJZsp@xDy(˪$5U$>K6>Y&$$NZ{* )Dt3gWn_XB]Y^M*=aZTL*alx+˪ v1̥ĺB#:> znBDc# umz4\~CKY̭ʡWYKgd`wXb.;)ϮW ReQQ2⌋`jB)@zr{OnzBMOIHPG=N7{Ξ/X^<. KGΗMj A]cSfl6Ie>fxeZT TjJlxY%3O ȠJ[[gexФPv|yQewnӞ},я:0 TW\)QڍLqf\ӦW5ulW6V RwQV+W\[f7wMŷY1F뾚xaOVßQmB&,nqrSNoX$Wȿ2?^5Fyq߰S<}ǁpz,ܚ ~"%@V&3lVF.J)iߊkCs_K'ƀ}j9WzBl'L Þ]%;zm"n8Ă|f qWyI, J*#2ҤnXT: -] W-yvmژW9A찠5xu1LW70f5uLdtd ~޲3:ɧ3HU󮈣IG,cqޑǟ9vOܡ3OAaW[BdCp)uxYWˬC)CZP/8;n8v$y68pFa6P0 FBrMWk& `%+i"# gUtQesKOkW۳b =@mql&,9- )Z-fII@DZRcg@CD9*J[)2#t:Ǹh՝!<&g㚢)eA~Yh$(QY `q=(baJq O M\a;G^kȆ>o|+j? \{C +Qf]ȸxt[iJ=b^I0Zd/J/f:԰:=Z1Sup`G1UvTxA[[%p,N|/I zfru횧U̵'4QȽiY $^h! i[ouiɷ+Y¨؀LXvNumG2!Zi/ku`P:}}',(1H\E:r$EO(bLGCLdǙ^i$},1m.ҟ d=915;W2 ߅jqջ@wï(qm8P 欑ax]ָ蚐ȿ#"qqueue]Wf*"!P+4ֹC7"-w:aE]9wN9|)C,k4CIj›ao,uˆ_lB_Y͞|LivzHZ2Z- b\[~Z{1. Wpc,iqJ0%..97L"};|iX/t,[9AI;kyKtz늿KM} C(1gف#sχw֣I$yVhkOaLskZ5|i6ǾFg0zY Gp=L0ܕMx l` :gLd䪍Kwx_EU镼D0\ɠ5ΛAopg+`oq\媙y1sF+eb=5rdx|zz xtȩ@c$"z6XݿPAK)9qW+5[x"81u~y0Ʌ0# )C Qc DmꞖ*o~ؗѐLcnP@9t'@?v s$rF[J0cE+'#:VzT (_C{VT9-OzJvlG +j^LaQĘd۲Co>8NnWx)sq:vh,p\ E` +9=01R {y]Qj;A-{JGhH>C/hhc:Ԥl'_܁?oO>~&.]D+OQň2['<{u6ual1`+z̗PTf-ASQS}zwv8SQֈKlSz{L[5Yy0m]dS'z祐NS0#!؟.'g<1DkR`Z$Ʒq@G.qLi`*}c⫩XWJ ՘;pBX6;1 3]MdcVUYu9>i566$͝C.W0鴖d1o3頦M6ҳc9j<\h2{zu+(+(?+뀊{J$ĵAb\v4%H+ba#wNeG46s=m7hV;6܈FGDu:*(z"KVL@@$2 I;lV bk^{wox׬]mk-k0о{vǧ1]\Pљ%(HbbktR➟).&>2דWM6R>MP+j⥨$h);==D_}%}2ѿB *o2_&Ee1E{¿"ߝXt_!sN]~ox,RuL'f$6~$a;N,潵_hupdxa~g3FnkXbtqlpG8?&r0c@78>ON~$\z"L"\tM~79 wx?(=BfiN}gXV]hR@:wkAInpP{EG[S=3hY4Jra)VLԦڬlK#b"+f0SNՋY: @Ac7>_P² ?%/dT1 OYkΨ"{$- EvKCM:)alK]vUGOF ĩ4{=.ZaKt]_Kr2#v7$χeAB0p zq٣#\ʸRjzntCxj3G;/ oaƔRS@t_3a %s(=SL6@QX}@.{k6OdК%\Ř2ݠ%C g` V*[ Qc[W[5vM ,rYI A]&5$>\AR\Wѫ:q`7O[\-aʯĆ3s2$p9mm}zWoĤ}weɀx~:Kg?4w((:3vT_$j80?﷕0gv۵8}+AoWLM<<[Es5zsӖ.]TȎ~mLu-Ae1TuΡr]]n9mFzcꥀ%s BF)m#vT|jn R !NZ=xkPUo8ߔifwٱg6zBpXt 4C%]IC3(Z*3qҚAGH\Nɿ3sƈO\-] Z+?FfXŝ`1bhJXhQ~s҈02k2-MfgLn-x0#l8*'qaJ{jBͶj=nf)YtPEf[aо<4G Cʇ}Kt۔jX< ߸k& Q.L>4uE`x9䣨[Ӛ$nJYY#ІSWvQ4d7=>H:gb)GHui>M"$(.T@"e/OLg7t!9/()הw{+◘3kfp]P9e/ 8U{ߩG:K"K't|& ̠`aj*rj@ ϼ kU3u7?ڌ߭o]^K4Ӣa 7AN j>O_AMUEro~s;+"Mk=I(;k}#1h7`kx?6'PH2(I|09 ɜqpP=ǩm3R{ӯwX4UWF[ѿ ‡SwWꤱGTA泻=,`3#uFm_԰fv =5CT!q$Hz%[4HcE%Ƌ L &"eP h|lh"P8W5 FZةλcă ?]vB3}I&t [{ӯ=/-_`UZs_lm+ae٫۞ 0Q}Ӡ-B I[~m)TL:'%mg Yc>྘;]2>}Pt>7UǧƒE'+>f=.M'"tvɦ;. 4`:|,7FuLy[PIs$.<ΎඡM&'8໇\sMeDg&\$d b}1?o?dpxKqF͙3lee7o4TDDExxEPP4Ξgk^L=/l|}e=Z/#jv /]>Po˰Ha18,'-7R Ցj#H;?`H92]Tb6i,Szf[t5p3 j8] _9;v#:4Pp&T)c̓q5`C8~ OUFgV8;$@'Y|Ue7MFػ8,ΠO=/FwdžKZG&3jٷv F4m('_:EǼhR8KdﮥE1.ƍT"I3@S7a=VF~:s,O 3Qc$s_u;žA;z>o`f%SwVCzʌ W0bX1؀/ ѽOq, 3Edp5szV:1X]LMҤ쁩Q><\`|dC=ENA]JRT4hNN2l=ijFƆs SnT ,z!Q`=Ũ  ñqVJPIdzI# 4)O_dV@-cB#~-.g6Uvkt6qa'Ԍrr^Ea66&3n&}E՚PF"U%o1;o,ʈ,8rs 'xMJ'+?UoqwS-g;cJ)Ka$bMQY6܋ Jk_>!)9}݉3aC嘅߲lB !b>y$蹫ن9f-UCd'Jp8 IJ0\aFCu¥<7HQ'b"~sۍy+ʯwliM$/sȸnN@:}J{$$\J-Ý9ΟtH;$ɨ'ős˼ 2ȷPnZg@Y uJs 4Q @"ңO{q%Lhkd[j{Ԉi6jpsɻe|u&,ZBFfh]θDO5 hunTk1 @1a ~Ptݎ?9z+_~5Z w/_ +4g+I'_鎖QڨT?0I~?zW?6(*Ԫ(Z+슲 H !HB[|7VәSuڗyw?pϹwo*aZ?0"J6~蝛}ʷJ7} ?k(B!xA |_UvmC_eQv6^@bx& Of0P}ړ6y8|;.cy8dIb/L@B'TT@& 8bӚ#u!Cbv+iJi=0NES;D;Ͳ%pVS/v[O#O %6M&J J>NY]7L,'c˯8Xfum_ s+ $j紙ǻ8QQcu]:- /;$NS295\8AChW3"ǞL# 2pUPj/CDE ~oMFӰ~\BvL̈́r~dFu2u;8ܳYLbitI8vٺ[hzrjzs:N(iUɄބm?inN鏣\s&]$U;8l47gm;#cƟ25M\;SC{ώJ=ơCWXI:I⥓;Łɓ7^Y{[@{6rF/gWva(>FW娾B˗|7Jb`ώ3R%7|3|lowSV@@]_6]yL!anqU<( $q'W9vlEk'1߱H (uvdI^ r3!g)[mJik7{h#?Ft(LY NrOLVmBUh5u4?C#ٝJ.lZ8L֞: '&>m 2ZofuϚT'Sjt`wEt;׹PkVPP3f d"x10Aiсh58ݛBӿ@AE2/Em-l67DcJG1s T=P`4pp{0 @ٜ8I4o-Noq+ .{L }}ͮO'*ohrU5M~&[}6"*Tkkoz?hwJ#h=Un{V ʅZ _q;0# 3 UY*7D`Ò ^@ >jϜ=G9T~½3Q5GiyЙ~DPo tWj?t_u^I~M["LXl _C}ʍos&(͔ārS™޽s-?r#)Bɬ|<ȝsʵgY''uI"V9]l!s+_r/C;>[R˩4$гՠ|4d(3g6!] *B(#*3YZq "b_}U"9ڙi]C:;Z02L)Ԥ^2%=W rNvnWo"q> BhevEB>+> >x0€qC jܑcYT+Q/c0A?4Sj.AFB 9>Ơs%Fj_4/ңi(6Az݁ M*+;R)Hu~QaKS/Fo9mTD2~2#{}҃$2 bQ+`EAk4tWƨ/ܦ6{:КJR:@v@;GU˻'Z4k -q]XL Rou PI#"`gIJ]sDE&V-y˱޿ԽB&OOɖl;QbeRvQ/-g{%puWIu؄۹MqҤs l %+21# GkKͨniu'!w-[DM*CF"+0SAP+G+BI+ҏ:vSpPVsy9ި!2Jh-kʦw7fϻ5=5>خFȆۼ1YXk|օ:O(٦YV*/QF9:F/:`qݧB$M]PDތj)?f9y wm FVഅ5,D+SnPaxrt|}t^Ao2SiNNhkJYu;-A/72Ixb>^;6B.mȣj/9@QyH'\{gڔee&oA݁N&rm78[K;˻pRJ)$Bz U$=7%wEPoWvgaO(aW a7~&6=O`hQlBzш,}D{?Y pjs^"SڨEn|bQ֢L鶅GAҕQO3\_M'XIE,:"D"(C D0BI&!$!GHB )㞝]猻[Ɲb~~?=s,fI_q|8Ƽ$DsY^[Gѳ6VC9ސD'ZjH%4=e 3rc+n:Ƙ1JRf{SױKz O@e=Z#h ¹ex0-V9#alE\-IQ6i !ȘOWfњ[Sp7zrՏdƶ$YNRw&Lc=&s@ڿs>εѯ3Ì%_“0i5M'zqJTI9HVoNk _2tg'=K/f| 6ARߛ՝6gIopGG1P>ri\"wVƲ61SqQACgyKᰩl*Mr\B-Q7&-ՍꖄFzC7<`Y5V]fҴr5u?mC{:ra`8$k-3k-QY2>%|`26n[}Lm'ԝܗSCWFI *Pg/^j?Zaf(QL,v&c7޹z]"S'ܓ.eM6ҼŸ׶g/;2ܽQ|P>"RCkS"Rlk[:T3ؙݒyų'LdyOLlLNi {x zo_{Nsթ}g),_=jL rUd?.wםeS!ɘSEHI$/ۊ;r yډ ^mFC䋕=|A^+nn ^oN;+԰6dB~HtG3qvvg2qn@>MI'U05*зRn@AN!pM%D<{z߶m&סJ3:4J /RO1%,o Wc(}&P΄dѱNҤp}N7u[glR|$Kkw͹on7!8|N/ F.!B,\ND*$@e>Téotz~Do+E?IFgTr:>H2Ŝs? 3_U<ʯi4Ӭ|Zo|EwY`P?䒏rdRe #FE>Ήk|y݊s,KTJ!EۜHY=MEKCN.N/LBcx_Whb;Yԕ!b5ZC&{){Nr|<wWSi7$`1 P:(]JEzhBB'HH$&!p!.]:Yk?y~{ݑ60) Jp3ք%߲_oI~~j"W?ak?I[vOԃ]_a?ÿ |q+n7F)Z3-aDžj3oJ3frgdOFZʿ,>psf8y'`6פ.rhI)6ꔅN6FO: ΰ'4zϞ(eUl4n /!'Ik!`JiH>f1fFMÁziO(>T;@M: `CA.p3}jlS1kY2%0nIBqpCfkU$m \=ݹ[2Kyinjc6nñ;.+/ 0I嶂߃c(t'LBZYJTtf4ݑnES!G^k;՗spb,4ܜ?~K[S׏~|˩~}̼JpzôF0e9]U 7o57G[VYl`¾HYV_|tu_3g[8 K=Y‚Pֲ%b#4P0g*ږӦc9>ѥ1ǃ8U\i+ZXrSUd XlNm2m/ BƼATBA@J 1{ē&[i%OZ19hs*Mp A͓{uA{kZjQ8vY-}^ԛ_ںڰ0ω`T0U%2\fgYQ cm 6b;6X3QBNW ߑuIcޣ= - fGgh|K:xH2Cʹ(^'jL ~?J&įZțT$ \u#OzN"Ҵ{<x\*sUyi4U*nq*ZJ. @ۃ5DoFC.-)dXxrt\T?n)S,i^UlnUG;gLT0yMT*;ů<^/B xrFNQZH񡀲P ;ՆH5h-;; akКdi`nX[ DV (xQ*祽ȴ.mr@ʣެ Zwq:߰b\|BoRX4~(Q*bz7ּUۘC5e]TLMG09MYdj|,V8;.1p\U%3xY3n"T|$<9b?1z_<-}qYR v.>~ .: Wބvvڹc/ _J#Ň+&MM?h4xR$aqb%(QE@AHQbǂ51e3I5LI2ٜ3<|>ܗp}[史ͦ2I>'OGLV3M\6Mf5YEK^_[wھ ^0%'/5gə5uI><*fL# f=lBW-s 7/t{6Ǜ!H{k'is$td]7>ɗ6OfkuR)Y@;}+Ri=ybabQ78nTg = oN޻e̱)Y:)^.wHXzA;.3p BKv~nD6#^yOJc쾡W_42Yx;+gsgj%Ʈ>J#s X 3y(uOi˜@2.INY4D&[M6j^'[/zcu5W[kՑ-3Vso/O,Ͷ)h΄LqkMI2a0-͌51-k 3rGuN :bmN~NZZ!xВzl324 }n JSAI}>B2դ=5"|Fe G̀X;= xPM {W?,fMװW:UDĝ'3nQ%wqU4_TxjDTĨw[ڨ'xBovDY<b\D-hsmY&\4l|ux*|&n8d[jƪ:oV}\(QgCx1Sf8>"edHF Jϳ[!%þI\U3aԝ:k?z뺙5mcYa/&dh<*?FV/UO{9iy䐆8ܭIbUcr΋q8.>Hr G+TMbAҒ#坧eBt–E:uf7VC-.u)ʸJA5S h͎}<Ɩt45|1H;]CA\nġ:I$AcB· ?X!XLTUiMB;(=$ПUڗ^ P<9$M"h; TH.\xˁK{4d _6ċjlq- vK G"|:j{owSr N10u}xyތ2I5DN3ekFBw~uv+xvytᾌ0PM`b9dz)@RnV̟Y2yap8{?^ojڇy5#z6Y}J[#\ۓf=Xo:;3s3_A3wy+^M|g&6PLg@ďKZΦ PZa}Tu\4[FW'd !.)5N/Z^TRY("20.bǔjbkcZcCkoTfyD Zjjk u@i'@FTSǸ+}T8I 0 B/E`e@\?Zۻv$w"yAO2v'dGTA-zq=TU ֈ%?)BS>iDc_U_urÞRjy'j? x(uѹv\%ސXk)ɢhJi嚩>CY`1 !߫AgQ7|}7MXIsLA>-S1j WǺR6=睚//bBBo$^\:/}r#y'OYC u0U íin>{;vڧ扪cŻɊkT﮽Kt9D]NN}&uD}qnJ;A>ivFc X(`nP,. ("   F]6ɦ.{{>yi4ru+2md[-O%Q Fgucꈣ-Ïc7cס1EKz"~(cێw`i<3Mu7F0X.j|TPUilpZ`om`@^"[P㤖 yjqzGu<*駰/.{1WJ֜jC3͒8tޗXg-z̴/7g/]j*vyȶ,|7xF1*:*/tW91Kzy]U6&dZP(R45#_DzOݷ֨aGiWEWMjXmedS.hmr -V!]&K\ۺq(=Xyuts29\j!(p;j94E ű aqpRх?""I(=J0W]ϰ4)!_Bkj*PACStOAYTzxTLI05x~Ν+GWJ#9JNbv'] Ci3:1o; Ů8ߋA4Uԓ*-]p I^_,; */ !F3/ ewJ|\/6}yAQt)ۿg߉JFz/bAlE^_Ht; DJ)Ecw)|InBY(*A+ .ҽޝ1+]ݚoK+T8$A1u=!z]ykF &qDɞz59Os|{M OQwƐM,ٛd^C9'䭲Wx FkT BA縔b\ B9$C"c%jA<%cQF Q1PH)$Y6B3LE%9As?HOУigLK^R$'Jk!#*rv?5!d/&*pe (B ƚkQ }ZUuKqzu}{Lf&gZ mhг.Ϫ44d5jhcxᶢf#v"G}} vFw۶zI&tM$J=aj2|6BTеQ2p)x2W팂[N> À[sOU@yEPǣoM{oOoٶO|l/#j#OaL+*޿ ŝ_st/gI狊_KS<{$'>)'76s)%6f[~CQXEkq٥%ytg<5ZUpP*ZsS}BD˩ѽͱ@U~<B|3n!b~߈DV}yJGYܿ\'VS8)6ޏX'Hv5e^[GdF@eϴO u\)ê6bf8;5kM߳ufʳa\}q0ed'V2"/l'J=-[ -&ڲ#4Y nݮcg%;.gyIp EIiKXX̺.IJ,{ʦ,+i:bq0EJ 1]C0B2H+@ (Ogٚr(pW@'2NX UM c5?X}֕ܝh- _ge SJUZ7Zt9Hs=E/) (}4Ј{`@ƠGP8X#hSضnFa*6:5[{nrS]q۩6F3Qcã 0w:2'r~{ssL1 ;+ƅt)Qy=cH J'dD!.$.*o_y!y ų8cٴ.xo_:M<`0ȥ~ :&z>_/q;^xXv,Q >(odr/_cY9.=~P[qp{j/毓mʏƎF'j7aP"k:LsQM(dlt͈?JV||i,An> DG2;Ⱥ*˘99mݑ\a@3))Cʓ夦lS7?,?n=I= $ok$4D({(nyItLG[oɕz`A0:ى2ϵe8Tr( TCWT[? UWiT! \\)"D:% $JHH#BЫ4^8epƗyy÷^v4Ej, A['+ݳoR\Z)rܼ'c̙U6wUjZ([5l}R/O߄eЀK9 |- Dr7AwΉ+ +LT1m^6fjjv[t?ZFg 冥>͐ѣf q=F)@TH,GwIntEj^9^|bܽku M{%| {."S/&kv2\hlo~e_k2(\g%Z+Yig˕!f^f;H!nߍI"'Y+iQHyV\(j(t.:L@ IGRf#E!+W $DUbrb؄OO-&n'H%^8xmm7w{K#*/-c[ ոKP<aN\k]O,Jf%ѾQFѫ,4 f6L%K\8sjUhէܭ7#-~[5$Z #]RI;wl|~=[temZOw,z~ݸR2-%P /B$Hm`wKr8%eoT;K4[-ę NZIsNy5AI=! | D\ >F s]m4EXBu't 7n <7Qy@x 4p-BKPW@yz،9&.3}Po6We[cBlbT`vCb` y`-1r $\zqozkcsqlE6۵;`u<߱PE)[YѨ \kڃdxBdI_eIڤ mM.wG",BCeSeIB(F,qA$9h!g%diS4d;*!^)g|NJ1>'\x"OS9ZR?蚩Rډe).ӧ&,7y VhD@A6 DP6APd'J!& $$$a!-qu춵{F=Usֹ{pYGZ- /ұ4ss`Qrs ֜?Q|!M i' +6+]f:?o7ynHIQB7) $@7CQ6}܊h]UdvKHBhPpYI3I"FJ&IBJuبAF{^űh  ZE(=7/vׂwM,&^m0݆g_ࡃr_=TmcځH}u'|E$1s>Z|V/u'{Ik)ϸւg^%< F&J-mfXm7I-a}q@(% T#Dj 2)|S>^~bnK;7ՠgy/ܮ,J{ /j 썼)bצfݡ-0_>gͪǻD!=dHs%ǵ7QͷΜ3 )sȩ;o0e~s?5"x|X/Jog 疏%\ ͣގwݾ 4BUPIGbB%ų3&s#bOU` !ҡzɍ*o28GfB1UX FqmL_ށ bIM :<QRm[\+M{!|Ԁ'v/B1EMFG2,U}6ldz#ƞUpsz{Qg 엷޴3-kFs;{4R:gϘjjseKQZDʘb樲<j,suұ> Q;Qhwa}Ƨ^(yxA:eN`n=9c8w#n']щ)l4~$(BlaL I)NC4usvy|nv"M7f5Llw,aY;0:28k]ZjfgUu3jni3Q&.A.7Yy+f<;F=qI| Od| .= 2S19&!D!-W >ӃNP7kOxbrpƁs/;(\:g$ \l%6x냴ᶲi[?I/^WT՚ V!8|߯i(~Q&mU)E> TJe]IwN.!|~70[iSytbެ˹X'P Q,[tG}>&d|Hb~s|T,_EW8K[ΠCkyggMܷk<.u輺ca!6K&7pVaK伋*\yyKۖyMrMj \J?p@#A _-U]ZGؗMzƾm]ԞUy֫˫dnّa򘬸 +QN afRy28`)5 F+h\EYPX&Wn%hmTE.B֐jjĊ /K;@kɏ1:omX껌ifw)r"诬xzc '|ަ#;~x1u /XO j?^Һ6`O2ZiV> =_j>u6[ OmnGc+[ee*ı.OQ^8t?o.; z˴ƭzK?y_`~ۯR3k}c5-s;}fD4kV$;nCegC3>ZA=H%5)BcP$t)r}=/q~."J-5}_Nq.-ӢL:*q*v]=V ␄DBC Ii"$mUі]ٝݙ5k֜nf⿞ynߟМ-PhzVڐoQWIk3!nGT*12o豍fǶm4 +i@*5`_0؎ʪ% =yT{*!h i Yscֈ.mJJ/?Ss< 6E !  a33T3#S"vр}C$q([OYiNQ]?/hgDBI0%H~[*G~¦ aIvFR[SqJ2Xo߯-n˔/sr[K!E]*lƊ+fV=s~БF #&P(5%z smb^*/,fbe2ŪmjzeuoY2c|Z(dzub#֫}ovd> pA ,d*mq\P|RNxZNx^mB<fŷ̧c- a k* 90,v3>P'n@~8I(~(swm%[GVȹVV9?,?Y笳7hb}o^,Q,oɜk7J/ 'ϫګ竒sb< 2݆@ R-S@2 (!59 ) nu RA-{ipwz=-]lP== mz ׄ1Z|UOo<>!LYl0*7MW&&MfҴ4124-뫚χ)ܮ6wӱ%wj0Ey(F>qM<>oX[WTsƎf4z= y,G(79ENЭdzI"@%XL+st a r!p9b|G\|t{* +b%א%MyGR>u⭰hPx<:tHD}z I};5(= J*z+~idLy1խIfM#uMWs|3`VV2~\|R5Ww.絩o#B??!ገ=9?_Q~+?x?K:>՗2]%>{#vҡ=5S{O,"c|c}d-yܑcC \DSbq+).܀Gm)͉{u[V  Do5[jP96x]mڲdM5Өj-lFape.>bu(Fό6c!ft U =ht`kMD[qcaꃶ?3uM/ waB_<',;SaF~>4ſ)/j z3^0yUǩ*+*BR%&D \v|RufR*b!ij]zWwyxE+*wGرh&U e/w^ނ[g`a5m9oKG*>rs,zENo$Ό\y ]=iٳ&5I2f87mIkx"UnTqGb3ĚKpBl9OBv~ƭHkCHM9b?&;И[|4Ģ 6Gzl$ʲы7삈oCPSZ z1$Xmέc+kCKJŦ|pV5*T{7f$#D<~XaVavjDžĘ\BlDBWj??QɦXdz /^yTlpX RKI_CJgkNE L!""| ˑfӿp~$)fX ?Cu D )o}$mOsO])VorOqڔ= ɇކ}vae'x[Zy(,q;eo2âOٹH{o d_s踚+NQufC [k%^{fWQsRm!=aGFҸcGO..>7ON. j)?d|Ь>Ҩ9X{D%U<"YH+j3b)mP@!駚M~}Tz\ȠXwɅh_OF_hh$fM1aEQM&0E3| BF>QO[0v43mghP澥YܽP"L8]br3"wcWm\I9g{h;E{Of o('m }WrחP`BxfVfWUqYp/;R~͵;"c2^%Nvr.pR BU`~p~`} SE纚Y ƌ˸v&mωSرmyvՇ*.$ G«-7{KX5.]i_OT, %cEG{N5!+&T猅%'HrǽMRBR<4.s' 6)FClJQ Ш+UHChkfS <6/dM(t ]ё"") EJ)Q= H! - ؀Qƺκ3 {νys|om: E|}ikYM4Ju{ zF>t#Urf?\)Irtz r@$5_tk J?X7n\o= ,ǟnJB̓pKE 4>}.ܐ,D[;cr_91JWQץxJ'PM!md@[>2H> X@`Ae'M%{mk]ճg΍ɑI@g5q`xrp wBs`"s b@2gBq mcYӇnY 6m OXkɁXty|;\ EV16hiTL#["AȵATx @s$X`<_:!Jm?."\kmQFn|l.X&$ Z!i0j$ҤѸOڪQ5Rcr/Reg(ky+ַlf-xTi9ghi(˵ʻsYs{ISYS rulRL˪5:߆^wQNHq)Ð3ԠQp5Py A}@O1לz مÐ43lHi, ٵ {!0dBڔJofWIZ6k\]\ky+(7%b(|h=i>XW+G O*.ɍ˔Zq]N}?gMFuOİ[S%!,/$9_it caL8 ` ^W)|MĺQsKۦ#7 "Lb~|{9Zun~fNʯ~qR~AN=T-H-@^7= oHG;^7Fm]\5kaޤ*t t_}чgUxiṆ7n۾N33'J$E褼ro:К2O]X .Lʦui׊pyJ?"?f f=ew$)REH-;f]#7~ҢWy Xw\/-0 Г/P_)>'ZeBZS#UbU S>lV <4͑P0DBn{B/PFˆ1)4a]=Y1f'Dlv'[s (tG>Bnٮ,YXn8 "#{cSВ84W$A4ٖ$۵@5gYOHa|_9dz&.\ ;tB3Ifb,la!ɶ4HhŃk,' lh >dٴC+Лo ʪD+{#3dceS11!v'ז: mŕ*D&+׋6WuBJ? fU5X<]+ %^OC\!WiPSiAPDT&"(BEjX$ {Bdy@aeO Ѝ(vWWtMuޏ[sεqky{F<5lhVַ5a݂zjVF׏5ox]/¯ ;.O!~ rST ˼`ڰX́*D/q])ܵYASGXEǹOrjDXbi'+cW:@!BiCi%WNSjq%x_<DzoՆ\7lКe3ez7 o|v 4AƢK8vpۡ2ڠ[ J{c~vaytE?\]HbwbqljQR*<-ZaytvOE[\2޲\+T/DS .ӐpBGX *,αQ#sN~Ӫ!V1v-h[6+1ӡX'x#,ԡ A/t%yHg14ѺӪewrXYQAZPhZ'r) Kjrӊ D$p> $SuM~hv-9D;ͨٯ.E.kثqd_sp7|>?;BeIy\#XG ps6H={ QGsW3\N9Hϙp7+Mi+Qz?tş2-ު0Szy?]ES,4~O]F8Ra&@CWEW.e×.EӗƯ*e{{O/%#?*[? tw]9L*jl@mfzdm;@NEin#(/q$1Ԉc6BSNL`DYs]|ϭ}Eg<6 e+X"%sLЕA* 90Qj[c+B;"\ =KCny!uQSHJΙQJ%s0xB5)D}a\ a#<\'D­(Y DΙueꮄKFX x.,.N2z}X3 \1|8z qѴF"hHYoo'ΙNr N%ڒaq(O5.pѴ Y Cw! uă7mDحMf2t&#w|j"-=NUb$vZQ5%Yߝ뜙oZX\T<W Iݡ</DJ-fNfdY7!o 2u`n{UͥdI+*TΤS./q\)71`~/WL#F\kcoQt 3? n=iUœKi~|j)T,ѵg;OC~ʢE"=P^H]gPK&% @:HUKh. $@:!PB["emg,{qs̜_Emč6EEF5t:O>$# ǹp PzAxC#vzF2EiN4|>7[> VJߗɒ[4OҿsĬ>휤oEe<7*Y再\uAh+}z/SU~J\Pwu:ozUu+6Ds)+O7SU鿍10sފ}!Ėt1,dg rxQ9H?52I+w@ ˋݶ!J v]ws9c$" G#t?s,y\fb@-H$m@:k{f:~!v v!f X>FrлftB}B[+!^EHUSMioV4B@b ,DEh=XpHG \fុc `9KR if!r M%梃t*X[S3i*:M'`ͥ,sQ⓬嘻M [pvr| HEB0 6Z(=K x ~OUme(/ztusV! 2HJy1:e=D]4:濪V?7qſiCܯگUmb7= ;B<;vh94;KT i5Hv򦽈< _z(WE ٍѾl1VQy߁RK+uGjCf _ ݷ._js nhW4gkWK ڲՐ0Y 9t jӌxfQ{^_/zu~:"^13-l֤1dۘwpun\7=;Ęp|w!yqFM )dќ!M(p2 \ǠBj\1Yy80O+/J<<3xWx%6@UZ14 [zϕgKŹ%nY=&]RIjEl㺔;V̚E Bj8#s ~l|K˭ NtFn _l%ӸO]Ao lG'$+$#AT%̈Me nK{a3y9^įvI|EQNkMԷ6=ω^;UpM^r7{5#ښ7*HY9xc]!ç{*I1r  qpzQ7<ӁjGa3qV;5FZD+rep߀oKAQ.!"t>\mg+BK]G 79&[L¨fP).x6='j"BUV*!DjIP$ ʭu .oU-]t2K~W9ȟK-fvJwʒ:%cjLLk%_tuYr^뵺UjEZ-cԙCn fArC_>|sNyY=:36/!ml渍z+'"5+'%gwt&*6`z{͵%HۣE|Zѫa\m_WA%ž 2UbEz~MA`Z\&DӐxt)\¹0 @AU:֯T &2|@t@`UHEjVZ#ᖌ:}mMTQ'B+(SOw "#ADQ$a"g> O899  LwSɖAqvxRRqq'PU TG $>BUcߋYU$pjbxCe78 ;[#F~wAɮczzǐ9W@bH, iy*0IoEƏ[)*M τbUA!Lf.&ȰL^(q0(o5lk4(*KAt2= 3.-,Љ~kEP껠.ҷQ)Xx^wDżOqW;2M#_ z6];xŞ̝o,oYkUcNLߗdD#A,PA! B (*!K•\$䂀!&FAeQDFGqvkvvBZ|sXᓬ(UMl\ nK{uyƪiIp5<9!P1N8O/ 6M~?8H}v.9h\ⵂoG]Ha,2*!tW#Oj9.lݰo֨6Ho\7a.ԇW)]$rftKD3b_'rrnג\ؼ,32vV+5sjޙ"[ٵ2R NАXs4, |P6Y] . $*E{E-H r/dv77]3J"dTfgA0BKpD}11#.q 0υB\dXJ2E# Mw6Ymr +}~zjT )@F!Z>H<@?>ל9BZ @BwF Ř*=;=f֩pT[$@w@k?6&dg #bG%bvњ Vllcݐx:V Ҝ4Al|#sj4A[4' XsQ IpJNr<;GIR\AHC9x[!Eon/Cұ{ At~$$dHSK!494c{\̣HH,rW=C3dB6:a F^%jnlDShj^+_I05kl}J0H|JTf$˳T Eo+ghKk3 dژ޼ o-} kXj*].Vf̑[ {3z$-Ƕu晎RTo~?kYU+t sAm=^:| c_ 3^q^7;m>l;6 w<'qqF%q@LnZKiv\\) D)() YڔSMӭS3g:gs_9nyz{{>o 5#-떰M-խ8h G GO!aZ4A<._V'Ɔ7rgU)}tv0y9NT^ҀκT'_ +!g !@3Ilktf_1e 3|\ʙ'U\@22-p&%G"a?Pč#t3!! l`p _; wG$#A>,;YgZL'DANdORw7(sEhsϗK[v^?/`w8QNZ'N^WEo˗_ۿyEⱑc#G8D oIv o#kwxߛ!1sJ57:8AhxYZEu&b&E"x-ɩ5mͮ>jQDO9TjBl 5Q:TeNZ\Rj_|ׇugL0 *}f@N k@E, AE^ D.F aՀ3 8wRJ,wJ "V)OXUR\X]joWQIf2bӌ7#NHb C4-!#4p:1 U)\ HaC3 Zm[JɆ8(<%`K|=)8 sPIde 0= /Ae:d5(%X.(8ɱdAPJq Uql( 54p>xxDb{AnqYc]a4mW2sߧ%%.  ǧ%)g~#W7'*6beNڧURH1n+D#kME"Ζ5& Kxq.BT:?c'dԆ"8 _1!v0屮M{a݁}Ks>0ƽc0AV}a*56͡SPGNމq`DL2#mYx#Ȋ!Q:Dӡ^;؏7rS<GUֿ˔,SY%;7C{/cqv])ϝ~hͭQ,Rc}BC1D vlKE2L%Oz܏j{A`cWZ?VX+ϝ --آ1MmsL3mujjnTWVʞy}Y_&OQ;ŻlĈs7.h>FU3׉Ϝ¥U%MDxD `2Pi X?salNna&`‘B`f*:lU Z0*CHQ 8$NبC"aǑUXh/:bL6=+kl#,$(r(ʄU)_i$~NAKÕEM2\QI{lJfn-NfiJᒕˤ'*)d ,** 0YMj̹s_wsy}>ϱ"UAA-w\JC]'>Jz`ʼ!iD3C2#gFf*xP%2ȔxO̟hL+$|YPpnLʇ8QipPJ=#x9[xna)$:`oRn;d 78(> L)g>N>lc͹`v|ItbşOr<_ #~Wu'틼{q{JvU\c_mߟ3 Y_E_# GxG™ײB.ꎒLw9"۪f)V.C+z !)mI]tSŕ' J?űܪZL4 FܦM[R6OĨD1\p (jA \2y2HW o멀´0%H jePBXU=}QEG\|B5|Iyb=([MT{oNԏ^`iA|(9jPm[.f_CTe!(W 8(/X5DX\xȵ8C]aۚmK Ѣ= <Be)tYE!%8-TlĴ^1owj!:RpLuU< R}Bt Ё+>s<=W [*YT1^@AlN*~EyO:*d+ Lxu> /!<<>Wŋ9Wvh5z#Մo.6|4v?V-H̸ጝs}UWQsb #ড~1v.tLuiKU5irAD3hނgNZ1F޾Č6:Q#V,?7NM98O;їo7©-VaƚYQ/lzvOm{ v':nd__MX$ٰb 莰ET5Q*E4+'yL^l G5 !Ioͺiɘ$N&kH{O? ?r`]}g }c|&8F\7A{Xfqj]UpM|e1"6]&Ld;PƿAnr$zI8p+: VD̗n5WNe q$'i֦+zšj a=~)vJ nad󘉽62bF@g=s:uA)adžSmp $ز@=Ar2]@GCTyYQÖP1&lsS@2"ՈUG3qӑsaw&DJy5M{8]q9Wu%Y^.C^>S^!WsK6WFxGӤͳ>sV. 3 wO:<#mf%,W_ە4rMK E](_y2vlϮt}YzYgGB^rVBjbft-e,k\uczJ>iُ RV̮< @O2ëPCe0=B S[Spy4(QSjw &@jEŃ j:n\A3—x L P!ij!t IgZܺU]~&YkB%NH"1J& tmB4itF-52;4vQYw+|d ܈υbb!<Ϧbbbzw{bvgQ(V*F pnx/ISoT,,}_66YB l""{@X* [ HI]EAFiCaqyýVFGII<:5 '&f&Gkz*YɐY^KȭinN(]D r KWX+e !=r}? `S~Tu6|/Mt(w|gNhw<$3(o}[h*>ڻOqhK}hوLzs۬e-ءkε]J_3Oݞ>8IwI>pH:}H^'ֆ):\E(%+hD, QQX8wuhA"Rn"u:6lҪ1%'jϼ4@̡- PA_ ]=TPH3`աfm7~E-R>cMsÙT-ЌKXr"Y$E$8 !<6xCJFb͓smGJHnbtAYՐ糊1U(5`Ua;h > Vq@?"4:$RZȦj\:wͦ-/"emRMIIr.Z f`c 6Vy;'s+K0'Z%^_[+{ps۬o{x+}zZRTX#ȝG=@sg i:Ս v|]_k1U;v\]ce[6c6<:Ѵe5n>2e2%Gj2RC*}t#!ŐjbC n4Xη]k&Rΐe@JIT C*bfCuXTZ-&yy)vU!.(rBj}鯠 3XŗXu =phO uBCPǚz?#TQ׀Bjr&s4(`%58j8t-]x?| D6}xdwi3oX07@5jfSE䶨S|c'H^qyaCfuW4R>tAc3: 0Kj 6Ke2DkZ4-efM1r;r =_m}sAeޑ0덗qϱSy?EhXS5geeRK +=JQ5A-C^.Zɏ_uO~MtK}(r`朻tWZ@HB< oL)ʊTqnj0ߖ7)ϙ ݓ:Xl{BTž\j<kTOӥʪDI,ijjMv}gyr"eNizUal=l:{:;{/=/iށ6w%WW#q E bJoՌܵBCr6@J؍^7kLq2hr=f 1v1&|YJݲ`i*'d~/ aq2PDA]!e}6rB } xU27 ]E $XCh+9k1Lktn_>5)\[TGFj!!)>R&c 7 +$-إ 6?6+N+ǛEzjE<)ҏbW,D=O'QMPEܘh8 6"#̈UP+&vSM3XMܺSeא1юrmMCb'P诂j"Z?EAjǭ!$+֜в9( A*(sa (#G,!(+(؊P#lhMEmH36rH'a4ީ.ԕ܍ޖڜ1B=فqwRIoK&|@NlHc+'j*ZC*oP|y- `RF~vB{)|<I?8F/7Ys^z"\:㇇/\֫VCyߪq UmҮJMbq&iSoY[w=&BCnjд޳1ޱ_T*7Go d]$l*J,UyS:SW]wmӅwf% ړHݩRw.ϜЕnxWvFĵۉg@ꃴ e p-UC}_!^3 P P|F%Ѓ=~lAZ7VOhO@[b̗y&y`H BHX {m$Ryy"BYQ+M'FŒ1=laP@(i!&5JZ\uLYf'N:p('${ÝrmdGc h/,'z„fX  ;7ECG3$R j\k@ DaI29AN'Kz̎aMJoV4SPsYu HO-qsNx>\3ED8a8%`;z\a =2se6RnyΔS tMKm,5K=evn`_e/>:ȕčo ir6UQAݷ޹λ׳{jI6.IF(ӥQC@MТ9-[77Q) b'ɜ įJG,pqr*OA5: vDk_;;nQqb:¿;,җs[6&kJ5 #W\*sm[:G]=dl{j&xlڹmoV[6Ɗf/ i~kDZ|F l?nztlPr -PJC P e ʃPD9"+n\+ԘdVEbcڬ#ULޔJh ²U sU*dƁ\m[Z5Lyꆓ󫰻y5ȭJȽVi) |.]DhL wf&gLEÂ̬O9"]${妡!= tVJV?$Y3~y?7'}JEbdhrjwJWW/e# zjAe I !"(TED-[$a_$} !Bؒ,*Z[֙Μλyq{<[rtצfo9)~ѵvԭzռ}Fp]%'z〬!mS;Py މˣ?$ObN2Ճ0|ÃgGOIc 'Hkc~ 6_9ZKc]Hy%dp 3}A#ͩ7'}yzTMlʼn^0a_ɒp:4܌$ eLU[{5?2REW]* OX pd/A\'V-D"994wTZ'ֲ6 /VW0b=<)F؇DH@}9O~? ~޼֋⸿)OCy"ؔ 1VEv#ˣKЭp'BhPvt_rX>HH! $ʢ2YTAO@PIapNñI 64P'wsCsZVkYlqJey-uc8f5s—sU7\W-Om#]^Tս$57<]R6N]ŦsCVlf,]2ɍWq4ކcرx;^qDKN )HƔ5[3v|w/Ϛ4Rw!q UmGĬ:3^ib:Jt NFҶ Qs6?9c S=:T_H]| J#"C{|,ċB܋S$v-cE0/_M}SO[@HPy!";0B G@ùv4\[utul,FOǰ-L:&3yÜaoewW#DQWsi %#$MBsύiCz4怐K.8*ҎC|V_Zp3m ڨYݣ ^B}"RFC2܁B,܈ 6mG[a>s7t Yrirͣ1?.Us~Քy-DD܋@^iʸ!dENAQrȱ1]UVC?vteil?1juFgLcc*\}DH(Cg!X%*9y|ztI۰wrԵU纔Y=}nc45I{;ĽLv6qRm\i}jhetkral4M\ 4 ^; 8GBN"#(pS ? #DT p68\M`˙a[v 1(le^^3=/VqaiɏçLuWt_[Mf`w">U^Y~2[^[7f2nph!i;X sGmBu?zgMAYs:ŵXa,~jܗ'ۯAseI JFP<ƒCySffE8Ԅ[`$tV894nEl0lu;i}GSW‰ҒΩ5狢ؿ8:u$;)k5yU}l@`H?uҎb?:63Ō 3 gYWcҞ(ȍOw;IGgn%S,Lp1潽\ӭ~vbJr/GwgWo_}ٿ|XS>^kOݺ,gtmfue{ve&x8W@lEr J`x(EdC! QAH|x`Q!fX0K HFA@|Ј^82bzH#+!d9j{JQWwFEI?HXmսmߜQL[VS|K=aTjM6UBLsԅ䉋amp5h\1+,MZ3&;A}1AUE-BzgSODU" *d '1 x4Gۈf1"¶l1 Uk+2P* O!#~D b@Usr-%NPKXE C9 Mt!*tjK5Dzƨ(ck#kC#æ1fcX6O0<ܠWtwv =y\|vB ?Ę4Lxϴ>n+^-F)ܚnoS9MB1L9F F͋*v'+F dTIMgtmjfrpR(mx?dKKBܲ(ቐl@_x@@twq=@Myf?w{$P|Μ5cf{F}cW?ڶW3Lgo5o ;]t5=|uk8V;x3|~51vwjx@m>Rs7e{_7ݠR=Hўh mFV)UiŪZF}{%(e.2_8Y+Νdm^iO3_ܾ%o_RY_}U>YM;?NA5;ȩˮ+cIXw-ωțʎc'E|;'g{IYPS Ͻ7eQDY ّ5!-l7в 5B@ $$"n4[[{ԞYj^j^:?5GlmOh[M]a[O _o.4ZO|~Cۄ~ 6AḮ_&Xr2osDqw<&R)J;/mg_M'mǀ쏁өt Po=쏾{)?{)9(T)d]wUx/_PWƚ#g腟p\Fo79C@4QX 4 8Á 1_vӡ 0Hs2YQ fd8F;>2b``<yTKIU+?&ZhM9ߙ+%ޜy,>jdcC[W8[GG5v̴/urrN.T'"<:,\Մ T S-*{-.0& Åk_5/BJ$Pb/ ǑBD  C>"T0 b[h1u&cC< ȲBVLvH?ކH(DRO(E\lRAu0Oۦrl8D! G ՞*B+v87ƙuB݆L-q!xthFYXQd/@ŷHy%jWwaULjaS&*!y)Rʼ2o ZB+<@{걕%݉UɚdQ-&tIBPcN1&JTX58 \q4ͪH]:"1y԰)B];!γ.45*u>d"%^P+CJDP1k!ٶXmP1c$* Bly2h QS NnXs{49|#=\ṈBkpG FX{ַ:ٵX?>-غP_ظx0GfFǣkK˯FHZIΊ쎏yXEKKP?b%R1:."2$_&ubY`|>x1`C:"e8Cq,>GR kP UKm h%&Z.A;!Qdx_GqXVЫ ڶՙiҤ `]QUuk3+ґZHșRBZmGxؘ ,tRSP+ E"wzlM,ϊ.#~{J/,4/%[SKN[-݊ځUŬ !]̀FNP@,hnȄ PS a > Le0N_4uV7ׅo?-=~17r~Zsjʜ~w^mtw zbY'[y+Yzx\+(g7UsOe͗2y=kr6;$$ORM,UÊt&d`Ac9Oz+q9_V)" (tpTR!xx(rÖ; bFq@Q1sR~z6s,H8AE}'%?L{IgsSfOV|`5mȸ/aWVCa+}ƀghk.3zǼ;~H[]譣q[fMafㅕT$y?ǒj)J`#故(c&!z atdaEI`BHH07fTB &d:w93g{Ν3igcjy*峋"whxșH& Ď)qsb3fUTF[Sh}JJ)2(TT)yPy$-Է Y5 ׯ%Q(c*<ơСtlC8^# 1w!ZsSF` - 'fHr* wp)&,v|bu[mރ;ˠ qu9= hFB:m&`jʼVE(jXfPBkuupZ9_$0ZaV JL HDN$֑v.Hj3-pP vjPJ!R1㓬dקֈ-놅<`EJel qe^MJN+dr\ á{ j ٴA8C}a'M7Imߔ"D3}P!Rj6yወPFaM~|wkhK.,Bl1օarXBx/p-7x#i0!.\#Kbo3 9NJ(v\>\maFdlFQ-) *zf~[334 ۽Zx-Vvˊ&:ȭ2; ޱ@"GCTD2<{$?ZQt*uءhn\!:}Zeru2fp%?8jUmr'xMK[{zx _IFWD#CU9}׫(a>ucbxhC\sRE˧=|uWQL^ ExO\?-9\J}04= CAؖAWְ7SnEzUiO r/^4M7i;{N|Y_"D9$kci8 \(9g1Cjo\_1ny# ;0ETqj+9A}P|m82HB?3_yvDt2Vŷh v'>J{\y6]>Pe+x5wtc><`!lu,k˹:RBH-olүYPP$QQPI ,6Yd'a [`HY$[dA+ S305Usۤ d6p%އ6D*"R,vF;L] ${{!٥¥e\ ,r\hk-iς"KV>b=1-݋˅{o ˤdj#\ Vŭ۩?;0&dWe?+vk-t χń[YTܫ5u ڷCM#,z3IL@3BؙF<_ i+N(ndGpqvRm`@}ȸ#[m5\!x)D$(m7pΩ!^FibZI6}y!gm1gC͙qYf{'c/iqgx02/A]lڼo~NvthDq|!zrj=eEZCZƤԧVu^AnIj[sS5uA_MF+< 4|Ks3_qR ĘWs!*[Z B*e.¤_S&Ch[k3qGs~Ror$Z*+Hsƪud^lT'1+ϧcGu/43ӳfEX'RMiU^Nt%#@O; bӐ퍁{Y H%!;J/#9fzpԐ!ܩܔJ&]w ]Rs2L;h.R,[˟p;T.l@5֭o{eAK,nldJ5\k(7!pXv3VZ#5jp]:Nk8<1>>-rnlO]f}G5޶7;*k~^xE?uN6?E;^\&zV1C=ၪNGTz*Jo-VJABz& _C X/7C3cˤi/n[BbTf)enۈ"Ib$k޷ln[-*W WCn<ד Ar8ȸT*IRpH w3d`BjDwgBB|C@zʈ 0ȋE~ jX + O"R@![(uDD& %@=B -!AAuq<:;gu_6{#3sPN^n>j?̮&˥eKS􅖝╶UNV{gMSqeRQb=qݼ@-)z2V4$) .gEݑKSɟ셡=Y5AeS5Ǎ[5mQs Ǿc 7imڰy@E.q1CeJrR .&OMZpj G=ȳz/-ʏ}gwxwpM^k\-`ʋ[UKam*;EX5=1_Wb4+Aѧ :3g\8z No;2q%r$a2w6l"EREˍe(-t+4*`mU P9lB z>Jj(m'M2ʝo- {MM <QՃjÜd^~, Qá4aG?1n6k#k FyVZ.dN䌸0psr_ư] > ^ Y6U`^ЂrbMے0Hld ZH>OQ?>Y^Ww[5؛mk5uv.C;CS?-ڀj܂@ڠGB~ c0v6FzlHk'Đv^ #uz&BԂO V t !}gGGᆥnq^rh0Mf]gf̺d^KW;Pd_rum#I?# eLBW4?]J9oT{g/d{#&-CuGYs:]ޙ/msN?,\,{Gݴ.qS} [CZ=UaWC j 2N]Uח1,-\qvjd+c ]F1]h,l"Wcl#Su:n4ɕc|^Ƚ.+$(Wڐ(BD^-M\Q4hejM0\'ER(On) ټX\苭lϹ]D-+ |Sq4|}U1[Yarr0& X1 F]=aUҘr*Q^49BMyhA36'ND!SW?Y347)MJ4&mSY}dK[xpG@m<1svC+>W6|I߅_IJ˨XY M~Ӝ;۱cqɎpH'O9֜3DoR'w#y 5Hu=y ) Ic )&(* {B>@X%^1ְ^Z湄-u_@ H;oվVNQG =OYj\gqIk]Ǥ1[4135w }ŝSIELMSqIsdQqC4wp_J&r>M˧:g̹=\y>Oc \ s$g ;3d /}HیRYJߏ#+w"Ⓓ$lTN~TP?&N%>N"$Buļ=??K 4̪}o\zoןcS܅W? ln}&o|;i*گ0LuJ2wL0O;HM; mvmdW^// Q6p)e &,ѿe>WO뻑]WV 9YFN'}'&I%geI<&} N|K7ΏsC&^+-nت8n޺'E垎я `0eBcR0s%j [UO f$5,ւYPc~'"Zy Q5KGJ=ź͗MUa ۱y׆3G}%) NYn?U3?i̮#?nŎ8ۥVY7c?aq9y 7ruAVQ->  s HvJŠhddfy jR,U3D88 ['Z3 ŬP̛bUA?U/b / •ѫ D5ɦmjt"Bj. FrR8ѬWZ%]6  Pc 0B&=p^i1:,#Q8fZ/?o͋5k!JYRb*Ј?@X<{,OCJz^z-Tmrk&u}irug ]=`%>]Ll/9sd,SW%Ӟ=ŮJ=^>Rgbc{A|1Ph!.tĽi 1jB>a\sHdz#M{ ia? W8wn|1 8N \.3i^0rM"@@CM]Θ֎2D(uLqZ9IhT%i\K SzZ X{W4CBAބpܱQ0 RfA ͆+LĞ)f7r;)ej9$8We4;^X, 0Y.6Q/7q7vQd_R|Z>I+2 K4$7M 0h.tv ?F661h KE;56 [9x-DVvG>]}PP(oExUgUW.TBWk#>h/ùw)O*AJGRraa"a3miRYziI]YVBgw\챬C?[黆(R]Qi`p I8usaM[s+*.ڸ 彅`l>7QL=PHyOlKzC$EZ:Ɏ=jOjW}q _fT뵯L<*y mJDpD쁢&UxR8}2KH6#;UaPEhQ8ХӀH˹3{JwKdN"K$f~RO[NoLkSWR<'y(e?t<{*_fXoZvppyusjf^LjZcSlUmlkidCdC`@`JaEcMrfbHeEX9]5_@^3\+Y)^9Y5Z)_9`-d>_v; W(a7\uKb)MO}v%ukq` aYurM V%HN]*WxOvCIKJz<G_+K LS"ROTY-S.R-\N_@MRHz2DNI#UU(J8PǡʁŘzʕxΌu=L#yDqG\[$p[~d!dd VTKA~B;7:ALWea[SJD @>.,26107: EGJOXf&u5? TT#Y%XRLB r3o$`I ? zPyLi'qiƍƪ}ˆ_7DW&^)W!wlȄœtinKzdP <CLB<q!z's/n"M ]5R(O[QHG<{5Uq_CJw6l)y6x:e-kc-^i/xl-S,hIkJ|d-m1_h#7 ~N=gbuQRkOFeDAJ96P1-MDYr9Xp4CY"3,28 52-"&# =(״A ʄ^ᥗܖݔ✛襙楖䜚ߗᚚ⛜ߚ᜞ՙםڣި֞ךؕxAݘ変ݟv]觊裗蟚ퟤt9sCA"*VSKI@D EE FJMH@ ;CHNJ ? AA E}: w6}>HNMI{> ~B G HFC ~> z8 w6v6w9y<z?y?w>w?{;z;FJu8y;A QBN"V%N RW"R3Z:jGdCZ6_P,hC%R7?)-&-).!/"&&(/&+&"'!"""%!&%(+"$% $%" !!'##"$`0nLrSĪd5SoO}evT`9[(_RY/PoRjPh9[(oF{ge;vajKE O*V1R+Z6X2\,Q$bAwliobUcCV<`CN(X2f=Z9F^2d=eI[F_QaN]BR%T8Z3Q1[FkSO1O%NK)U,\4]@V7YI,KQ Z1OF>IG JV&Z*[7O SILOV3i9R%a1k;X\ |˻8rf bOo_U~}SV-; Dd"pOxX9smGpp9@ Ro9na-pI!IBMNK&S.Q9M1Z1^ViRQ-P%Q"EMC 4 < BLJe6Ė˹̀ɛ}˕ɉvLFz=LWzYc dd VTB DF =8<AL Wec\QLJG A4.13./58 DFIMT`"o0y:SS#Y)[%W#S K{=y+dJLX%K}h(yȄӫyruuywdzύ}xȄ~rp}`j=[2Y3NM\%BJ"^>^-`,N\2nQ_@Cw.|5Vs= g5Rg/=;ET$c'd~SM&yR V+~R!]%a#e!n%~3Z§Eid}MMlUHhMGPE>Y<5UC8MtNūw};{PQm7xa rp+ F C~9 K> GMW,V*LKHO!NI? z@yDvD QQzNrMxeHWXD=\M<bWC]S?[JAXH@YKD\NIdUQaOLR=;T=:K7/[GATA>O=;M<;H96I<7E82LD>B:3A93=5.@81D<591+80)8//:22;228/07./:12<34<33?036'*7'+A15JS7mNĆp,_4wlyl{UnGf0a9N#IqGzJg%f:zuhzaq[ZAO"JFIP2R.[;]GV8X;T4I$T-`9P6DC @BJL$N)U.Q(U/[7Y;S2T.S.KV(\+F?GEP+Z2I%S'S.O&O"^?U8[3X5Y)W*U+\6]1T;S(W2U0S/Q[9V3FQ,R#`5/I?V'`D^F_U3U8` 7236527A BIKMT] i+x9NWU#VX"V!Nz;t,b!PFe&?BT$hMőĊ̉˛zvpryʃՄňxxDžwDžΈʀquoyrvkqkbOmNNA i0rU`=mDlKhDV.aDqi`G]<`7SP#k?nPjTgQw\ujÂ|ǃxx|}xtp_fAlNrYif-`v=xEd7tK_ɪȧåctjsXVbSGiWOfQJcGCJJ=VLϹEqOCoA-N|x+|r t+v~)x=x?vLGI(FHKJLQ"S)RU*]5gV`EY7Q+T)U*T)c2]JfMhRgDg9b<`=eEY3Y/Y&VNR(Y.Q'N S!W0T*R#MM X&`AiG]5P JKQ$GDIG y< AGBGJLMLIIN"T&DG?H T}RuQjKiMCnQHsWMw[Qy\Sx\RvZPsWMn[SjWOiVNkXPjWOfRKcPHdQIiWJvcWq^RnYMq[Pt]Rx`Vt\Rx^V}c[|bZrXPmSKqWOqWOkQI^HAYC<T>7U?9[E>\F?U?8M70UF?O?:P@?I9;a9c:nUԈţ~n{y~ymz`|suKf0c?rmБxd]$_0wp}zxnSeHZ:N#CIS&Y J%^EhMjE^=X.`7k[pirnthsmwvsxz`?whēۻڙi47EGj)Ju{D$oaWk%D" [I+TgS s;sNo<~z`Jamk6qҔ;TE;Ϥv u RڷfuoQYv4.mх|~7{;jws+aӣq^WV ,!KPBH;t`eݬHSf]_Ȇ粛2mUa4aJ XL9Ò2%1ZԄx3ŕ4#!R\nA=XlVt7@i{|]L)5@hi{`+5 ƀT-~WPkJY۵@M2!zQU6.[i+[4.*!7J(Tv>ugZG[*6$kB@$YndPvAYk;Z9F6+3>Gώ_[I"{H"Tmi(VJ]>/^7/5 Q[Bޜ%o%)NҨ/~]d1I`Bhe沄Mѿ_7m]BA( ]* [\"9t*?!?D2֣X mï=싷4j+/~ _wa5[4,Wkg Z*SQȼ`+ī̸wV4lQC~2G*o%zو=i4H8!8#ܜ y+ a %{:[ = >. !3pz:CHOH<I FBR])~]m $@"Xp@ `@zD "Xp?~ )Rc&8w`|h{{ i"{'r$r ǽ;n4,?1/IŎSf<Ϙ"'1b²'|QJubgMTzmj;Pk:;'/f[37BʏEJqe T~mǫpQ\0!O :1l[%Sےg oKʈ;'^8ۄh h(|16;;-yۧ}~;;{wQI[ AKA8/lIq&l^j'}颫zE5Oaآ,nѫ;n#}hI_-.«|Kp "t+.~J?apAFpΛ!qºj11HIOI{?)f$cx&K΄=a@AY2G++_N1r{&֤]Ѡ_D+)ȃ>.qb9NNLWn敾 v [AElfR U6|5BEPf?4$xdTQa#ᾒM !rrˍrb $@p(5  X[𩐊?tyTs%QLY Kll*U}L0n>G,wi!oxofxDJP0WF† =RhH+n)w/3=ћ䡤N 9}Ʊ7!v ~XĈI)/f7o<K٤~Ic?'8p6ZYxG P d=|yC/G_/(a O4r-n(ė*ة :M8\p>m2NO oD󧫱 "Z%e'gȺVmQ6'pnl ))| JO%=qn/[ՑLo+g[)F2iFAR"&JWBsm-d|ΐﻣ{àc0p,Հ?' //[w"+7,lǶ~u^H~bd"c,Y󞊨ބބeZw #걯"z vm]ڎG)¶,gX úO7 '6U% YNR=e{*.ׄ[;حP cŷ2ZAj- Ѐim"cTh 1b؎!& wŨ :0 H^P b#bdQqsxu 7UBQd; UV8cm!<`g ۚo C4#@ n6]y=\+Law?GFM]KkO˯LGRF) Gn YĤ2v>4g,c9U7$߷`.3\ۨSuۼ';++諅we'L+!?h٠!l(fК([36;i;>' !֟C/ =zQwN Mmo:z~f!kN5Ĥg;}/ލո d9xs9VNRD=|2>9E}u|9Txܙԗ2+v-b+aLX'Ұ8l?dM^ک[|_;{_I3Y8)ʞ-K8L3-(lI~ Q$ _w2su63,sNAYt%*)g;Qb֭Ij ge zoW-'P l:?ޗc7a3:)c1o5'.t ̺磩(zj9fA;P꣞ C lpWq(`H8 )S'Lo#/Y/@拚gUd)j*/}-~Zx?̛̟,/i)mIPf>/eK Zh"@ ,BLHd_J K  "AU@gv|?>sΜ{瞹3g=BlT :/L@ȉZh ˀ52p}_5>$8XG D a'?h~%:Yp@?"` ` (P \+z ^Bx y%2j;(vKv|Ay6^d"H;$_\u{4~Lk3|ip8^ M)*-H}7m;ȝ>MuNb.OA)ze.߷쎙 'Lǒfh)%s9 u*N1bnSQС<1NJcb_Nl 1xt}U|gێr9Cr|[wuC8>}agkheO1Rfۯ} 3rL j@(ojn JƊ!QcPKc-#FiwK"ov2+.: LĹ%D$@LEr5DXuXnZu =ղHP)5sq;œU]oT\fYBSFiṨ4C|"[I,־sn# vR‘Č ho(?RLA#R4{5vW51t> @Wp\ o[nT5+BmB QnI%5u%/DfᥲoC>xAzӷR3ە7e"'YUf}Y;yS:zMqde=v'AvP?}l?{}IvW}ks[YԎ:7ֿoª)E;9eu -%b߆2?Uw>7N*ZHiGm)Ϯ\ϝ̚mi=' {rAF~BϢaCwg[_7$RE9eZw̲pTZJ]τsNJ]QS>N4lݥ~C+qolZߟ2i l }R~ V'[ɏ|~-ј7aSI'B;)opW~ìQ'N?5a8a#^J@<4vYJX4SD|vjLްncy1ћ.jW/uλ""e_gpw9KS܍ٔUt'qFpF\)A?:Ƶɻ:ϻIFcQ.;ߖ_}{ wVcP/ j9c;uˢ0Z\5>&y֚i |9?㰰7~qYȴZ.rXK1n|ʰON2ܯMK=}dދL6#Y6#!H]Fjs͇@?4z6ZOٶ+z6~ w:m3!rQYV{ӭioiX,L7O,hʦxü(6yL<Lk@PErNT2p Uy >,G x+f(Q@!Ƞ VGS jN)p*W >pD^pA :?, M K N RZe#z.HW ]-_/a0].Lq8h1m3s9|D{Z_/q@Ŋv^d>wHvU|q!čh|Sy`uqtykvhr焭qi{s|‰€Æ~ŀ~čsVlJc?S#I; ;U(Y5EHA @D C:= G9 JU*`ZcR[8^Da4R6kQgYh]xal;rs$xWjqEw|rFTQ,0% 9?8]bq#=p+z^|erhQBY;zT5`xe"GzRtTqcqtqpn\kBpBm:j.a^xxu}${9k2yS uf@la;kbAcY@bTGmYWs\a\YEP2O,%Z}; W߀%G+6)&լ /  p2u[٥tߩ٢ћ٢֕ޞߤۨԦϣСќИْs1юk꩙ᡐࡖ۞ٞwX<6!6pDh1j.s7t8t0 n+y9NSPPQR"U*iDjC],\/bElZiGd5f6mElK`:PGW.\._-^6iPgHS$YHR&Q)X-X7MNO]-X'[.[)V$X+]._5Y2\7h:b0Y2`8c0a2b5i5mEd)mLM4Z=+<<.1?29\PPuh^ {n\ }mZ {hZr]WpXX x^Wx_Wt[SnUNmSLoUNnTMjQIv][sYWmTRjQNjPNkQOkQOiPMYGFhVUgUTgTTjUUgRReOP_HI_JG^JF^IF^IF^JF]IE[FCZEBVC>R?;R>:UA=UB=P=9M:5L95jRNpXWgNPaHMqhzbzɢwN{ႾΚ~hyhq[g=lLw}ϊr_rRpOpYygxqrag<[4bFbCX6X:Y6W0M+ANQ"KJIT2[9S&RZ4U2B E^BW4^BZ9S.R&T"]2kFÁzt|x}gK_Ankopuoprz{o^n^pxp`X0dSgEUQ.UU"^$[:cCkNk^`IS-W7e`aRa4W)^5iQY0R%W+EF z=LWG~<> :H2.4 BDR/Uy3> < = p+ah0GG<9 k&n(go%36n#r'9XPO D C:}/D?A6 *{'.067-2B; 6{'y's%y,_:ÙƒdžƚʔłÌuFy 4j?6 SDT^$d#a `!]a[UNG BD JQV[\ZWQJ<;99;=AELT VWZ]d!o,@ X&f7kCkBoGvWrR|Q}]vu{ȀxSzbgPy" "EPi BB @B}ބuqUbE"HE..:xs\3O~<3pǽіӽZJW[~Ə K@YTL0]zD1X:xѹ/F4EkM{PU䵣/ OΟU.E_صQv27NȪY#[}ܰG߭Z_M[< z}.{2=(yb%5OnOUqˤw$g:wM7,q'DmqgJ QQl]VYbAk8 SurE .4gWZnVq!-\RF P]YYJyuNCqEђ[zbos UYqWLDN*hXY4TUM,' &za3IXvT ǡA/v %-W7ޞ{aGiEt)dm~` p`1&t?f[Pxoy.հi2vY-/d[s  clYڱ#WW6>YI%d_ x-i}A=tBv}U#)X v9a#UڊaQ `'nJ9Df \F.!@((զ7tp:U14aVȚe}2w4bJ#5)+(isl}Ԥ #vȺ2a洓:eYOВU;>wj5uՑNe.O/3g܅qnʘ0s]*r֢~؈f/YXqb07ʛ! 1wdC~Sr_#u[z)Ky9gE⚧4rʼn ^)0IOQW]t _pC9SUI{쑦RJiB+>O}g'| k<^gH^ԒScئ Π%,#R†DuE=P/'d`C[zҖMϨuBFvR:╵ %lZ{hY;LŪFGCgab,=ڠXF+t0*N2KCbCޢ>|Py D ^9P)q]q_Һ<)y^3.Pp|X#׺ VY0dlYBXׇ~/ OA%i&\Ll۸U &ʐԮY}mFKUʴ:6/6-'勜3̹Zv. <;#@ܑB5 lu-"l\ypAD Ay P8uCa ;~&ai(gl%2̘NaD2~.zʌ0\U46x}@dP(m=,vۇd]6A_=8wÎ]>vaZT4kH1vGN?z JgE6"U %nmed!/+I¦*g5'o-K_#˳VͧwGrF%a"Jh:*n+* Xjb5e[+`*Т:*iijcN9f95SΜ=˽˧k]DxӠg /3mJSFa: r΢x _BW!*"\ 5䑥W!et5hK j^P$%A~@Tܓ[GntJCsr*.-iHt@c0\m+(#\:&ؗarbOJ\MS?^4-vYpޥ-Y9Yߖ}73WmJG)_LVOYՙV+>),PEX9m}I4<0 6 4]YH;3DO=yWd(? gmF%jT*mm[|6t _+;^v֕S6czjMxo*}bEX?{$7?mּnS}SK]((X Fά0rQ?7܅+ 3~5eG5L²w`%Tm 3EgC2*<0,x!zh umΜ+GG\&@n,([1Z\!i!܀nH.E+b {1x}&%lIKsޭG]%ڶ{WgjίDi~|<;NWgNrTZOh7Oߕ87מ>BgКгgB\l>=h , $%!Cٗ$ 0fD0b8" {?M@wn>pX l쁇+1;౞nhk<]8zW{qx?o \3d ?5(ؠ-0 I z@OtKtkLESQJ"MI?<[p/Ƿ}*UT> S}ZOSB;S>PNەF-u3eʹ"aUZSE!|␁{PY -"MSW똯WLj9k^FFjzWC]b'+Y'[E[Y⚗0b .o7PYג6L- ojyZEykKC&bެ3~ -ڶ=5!l:9_[٫hA"\c䉿70m8I}ccXG9zFyiNF2I]{ P i=7cpqC}끿]d+| &@yj+ްen[FoƘ8?8"t*c hKƘHsULX6 9 m|q'BU#B2ädKӰ<Gَ<¢In Kg:\ ~-aL^Y^ðS=7zXSi,*b>D[kث(ID9^OD=2) YEobjYz9X/QuoZr_@pst`]Kjm7!4,pp<Etngܛ\j9Hsz] ɦ h!pĈKa"gr:4|ղ(BȧMfE f|c3>kɲi>K~j*v呒*]CXNLB>F95'*?>E_X-QG:3 nVԁ_ٞՑڜؓ癟㤗䩢ޫҥʠ˟ѡԢ՝ޟw3磕姟ןh7%23 S,<UNJJJ[(z>v: HKGC };GE z? r6}>E= >E~; @MLC z9o0z7q/~= ADBz9NIU(KMI> MTHNPO`4d5ONR`+h4XqI}O4W %, /+"+'("' +"'-#.,1)1,$%*#$)"$!*'(421''$$% >37?48A7;A7;>48;04;04<151/5.,1(&,'%+-+14271/5)'-$#$)'("!# "&!$" '!$,%)%!*51:1,6"'!&"'#(*&/ " !(#*(#* " !"($-'#/HIQ"uwX`sqYy_{lypmXR&8{2Ht\)u>~@ ; |2|/@ :p)n$r(x-v+o#x)y.i$m1t?r>{C HE; CIMJLr9w?~46~7n)g%q1x:C 2:5<@D 40-s t"4|/t)}2v*r'5: H570; 8@= FFQ]1vxi7Z'?B JH?VPW!Rs? QHp5? 9 ;}2i"m)}:? p*|6> = q)m&:}9 r?q6}7 02z-u,]w1l$}196n#}0@ W*Io%s$A u3q6r8 ~54 .4 ,44|3? HKJ%ID?EŘɑˇɝƀțďpf2n5lEY]h%t2t2 |:@B @ < JNY'Q%T,b?^D[9W1^;U,U+JV%S)R)Y"c8sVz{xopku኿ʒėz~tdngM J qUИΤǧníǮk`ÂȈ|qoQY6R$q]lҚg`oI;[kh;bLkd}n~uo]b.NCH@ >NIS|1IN?= N _6^9O%EJT%yBY#`8Q$C?HW%Y.LCPvLyCs5NqũÊT~;N#ؖqr)m1x$j|'l >& ~Xt;l"ey sWOK<4E8.cH3f9CN_-\:q`ՌԜhvww|}_lBroHvffprrscrpcQƅH{?oOlWY>I9GKLC03,?=%_J5VW;Q;,* EԊ}}ۘߙ⩪߬߮Μܬ٪ΞϛљࢡwKцg󳈣{ԵzW+)0 c3Gc,Q$LT$HJHA ? CCDJ~H s;{@ n1t9q8j6uECw9r8~F G JRA@ CC PJD A QU KHN!CCV+T*ABJHGD}> K |TqM O0T71-")5%0@1?VAMS>IQ{6t0v5t5w8y.}2z/~3{1> 7t*06@B 3s)w-t)q'|1y-4 v(53:7FLM; =BLl=Xx< x3? <IE yB [%i0Fr7z<~>|< w1l(t3n1h,v9}@B x0z2~59 r,n*|9y8 ^+m3~< ;GDB |:> }2:>7n"r&|-UR CDJ:J Qd?_5SOE> 5A IV,S"R,Q&LS(W-{ѡ˘‡ʼn•S^(p5E Q \(_,]?GU!MJT0fMl]nTi:\8X,V FB MfJ}ԝnjŷƍwŏoURQ'lStxŗĞʡ~ZkɤЬφzg|}dbV*R]2zt~|t[rx0fM UYMW(g[pxpskPeEc2T!NX2SIE>X*@P!Y4]7eL_:]5aC`BX.Q"P&W)\/X4N&C;@ O Y-W)LO~T~@n"Kwn7BA~;zcku/o-},zwA\C) r$`};k|o_WkS3JE#MQ+om<JU^0jAoSiӐyҕ.ѓВ̕ɘvgfžmu̠~uڥt糜ięiܓb^QKjObOYLTLY=[K`SR?A;AIRD@87E#0 VA,ZZ>YC31 ?& U{}ݡ䦨ڦ鴧ϝܨɓП߰Ӟԛ䧣ԉ`◗vlǕi.d'&&1 d6Bq?mWfShNcJV+T%MIF= }:B ~@ w6:z2? }; l0g/w=t<vA QWV#Rx= CHGU(R$I; EJIKY$KEU$_/MNPIII zG S \^iblY sU vS kKeJ~aKpU uX xZvWsQrN sN tO TTTR~PPPQVY[YUSUXjf{aw_vatb p` m^ ycPt^KycOydPzeQycPnYEmWDoVDlSBoVDnUCfM;`G5\C1U<*cNIWC>L84H41F10B-->()<'(7'/2",,)((NFx1P[bdZ#mYvp~{t\W&? |7 |8 [(b-d-[ a#o.k&g!h&g#9 GB: {2|1<E|={>@;?: 9658|6<y6y7|07A = : < x4t1w2p+o+w2p+> B {7AIMA7 5y/t)|36|2> 8B > Bv+< GEn/t7w; t9REf$q*6ft-t/I Y{b#|:k(m(|6 @ GnMxn8v=n4r7q6y== 769y4x5~>w8^*u<DDR$JC J<38=> 9 BGQ+Q"GD?w.}9 < [,Z/WLBB 5< FV$KG@9 IJU6ōгƖƒ{W#QY(\?aJ^7R T$_-V#I< 99 z0@ K SR%L%S']5iTj`mjbG\5JC? 4{1x/}5~3;Y'xx}◸uitn~Vsk_@bJproKēʿɢɠßQaAs]{a{fv׎ta^3ANlI~ĄuaQs=}v0cZYmP{y{xogfEaH^>N"FP-Q(W5P)Jb8O(U(W,[*p\fF\7W6T/OHC@HJIMO!MKMU%NI\&Sf{LvugL {5DCvXvz2lu ukLaE>")$ yy]Lxg'qiRrr@t4r}:{OX[(hSrmwzouݏrrώrnYur;m:p?j7^.{r8{fo㸓WÝRҎWPxNrB`DeAO;1<(=!75#>1GHKL@2B@>KPGDA94eB, O7%]Z?eP>?'  1 C wQɁ٨ۮxأ՟ۤҙɔڨМԚ⥜Ջvڐ{ΎxCeD}J1 J#!j,oQbN^BdKncpcp]o[fOV)QZ"\0U,R#K[(X,PHwFwFq?uC~JOL u>;GGTT#L?LBC@T"HByCQ_3`.]%TT[} _k kj r[ z^vTxRzTuVw_ vcrR{Z`]~ZZZYt[tZtZv[w[uX pS lN mV lU lU mV oX r[t]u_{cx`u_vcyhxjtgobwU|Zdb`c`c`!]\ZWXZXl}asWoQ mN kKhGfE}aSuYMmPHiLGZ5V"MkOr4`"Ld8Y2R&I; {4v2l+](e/w@|C x<r3o-z6y7u2CG}8~9EQ AJ~; ~:> = D: C= ;>> C A >> ; < 67; ~4z0=q.m+z8r/|:>~<; > :{,~2>8 8 |3w-t*; 6~3v,4y2: z8u5g(t5x:x9C? x0 <Iv+z09C t/~6 @ |24ADsBf1s7AA=}5}7ND: ~5z3=FB p4{>C DL? u5H FBDD@ AIKI"F69IKPR!QHU%PEJ= 8 7 E> 7x,t'5 7 B|ѓʠƿ{gK#i"~38 @;. 7 CP!KHQT!O _BlYn[hS^@V(JB? EO%H@ R-bLU/?x-< :=W.mc]?MZ@uьiFc6b8m[r[ƣʥˬ~.[{_zy~~zynYO;\<ȁɅҢ{сkCdZ~rizu u=uzhca4S/R#R+W0U2P#V2b?N)U0R#R+AMG; MU'U(IA? ; 33: <= ENKB >EEC`.U`vHnR? ; HV)vWqy)i}jkoYM[<C`?ATB5;*rpLk#xpD wt:69K`]2^Bvqv툁guaᭂnŽr}kIlkw\~g0|t@_ٷvayWpHdGdLgIaGZQaV``ܿ\bخ\arYGl>[OLO\I^CXHNMWGOCK\w>4%Q8(^X>oZGR<0     A%y\0q5}{渚٣Εԛء۩֚⤘щWncs@*k;L+/[k^$T(P"Y*ZCaOiWo`n[g?mD~oqcq_mYfdtrsqtcnYoUmDZ+IGH{C t=x:HIVZ7S AIWP< KIPrIzXyVxV kLyZ?ZW?I^IAfS>o^BrQNvVPnPGiLBdHA^CA`DJ\@JTA>[HE`MJaNJdRMhVQfTOaNIR=HT?JWBLZEOZEMU@GM8?G29R3:Q19R2:Y8@dBKoLTuQZwS\xUHzVJ{WLzWMwSKsOHpKFnIDvSAyVD~[IuR?qM;wSAxUC~ZHz]PwYMuXKvYL{^QfY na reoUsWz\addbbj&p*p(h!{<A R1tt2l*\,Q@y5{0~1;C? G}ERV"MDFX%SJU(S,B@ HOSV(EDGLW!GJJKMOKF>JGH A?B>?< ~8{5B @ C = > : @ A46=;F H=4:~1x+v(49;y1x2u/9;E8114G8 }/828GMG? BCH> <G=-;MI> ;:9< @D :{5=GJ? z6 L@ EKKA AB?O"T&P'R'SNF>Ht1CLJI> = B LRNGHR!W&U/z{ŜýJl3dHK<547 M\.eElRofxpsggEd=c9S4E=; >?EINB4B T)Q'KG? >=Q)`GIA`EuYiCmodMpWύę˪ɨҴx0]zvzzށyrmU_6]4t}闷lb^AY0[:q^ex-w>nWV9V5N-S.R(Q#S1F>MHS%O#B;JE6 ? LT#PKJE=<9 : >?> < 9 B@EHe,wA]nIvxYNJDLQ#iGVv!jmxyahrRq|[yc tuTig6xr7wp/6*ELY Y3dGuq枅_ݩ~\ߋZXt]ohpmxb|SvJqGnFeLiOyMwIhDcXiM-ZnbkpZ qy3kϢiaὊi՚i_MJwShPdF`@hxǡQ[XIaF8bY@t_JbO>2, 5+8)*/3 \܋ݯҘܤݥњΞٙ妙ْȄTmer?-tAnL16((5 xZ_ V]&^2*\"PT(W,Z1\1](jDÀdYiTmRkb|xzuzdrWpfyitgh\h]hSa1_ l@nT`1c+gCkGa7iClaqMd3k=b0c;gNhS{VE[_Oa]NYXIMUGEQC>M?8K=5H7<O?BN?@O@@L=>H:=J;BB4<F4;L:BP>FQ?GR@HSAJQ>HL:DF58J:<P@BTDEVEFVFEVFDVFDQD?SE@UFAUEAUD@XFC^LHcQMwaTwaTv`Tt^Ss]Rs]Su_UwaWtXYpTUpTUlPQqUVz^_uYZqUV^HO^GN[EKZCJYCJV@GQ;BO9?O47WgLbBKF X/X,MM#EQV%R RP%O"T$U-JJN*W3b6W-V"Z(V'S&V*KIFLQ \/W(PNKP#8ECHJL: 4=HO+ID?:BCB>=9 =A GL$MCE? <7DP&?;2EC7 : ?ACFD5@MB3&< E: CEC8 ; @>:; HH? ISMG = N9@GLEN$R#Q)HS']0V'9:GIJ=HMX)[1U)UQ!R%Y3U'KHIL$V+pa’§ĿwbZN.OoHX(]0\BdWqnvuxbyTfGjK`A`7V)Q!O"L^9O&KKP#OR)N+U)S(IKKDJ!S#Z)X2O&V+a6O$M$o_mbfXhLW)gO|։Ǧն}6Wh`oKlgmrljnarLvuqwcC[.X)\8}偲ow0o@hAT-]D[>\?U4L M D9HG IM$JQ#X4S"ON!O"Q&P&KGJO!FFJJHJL"I"T(LN#R#l@q:] e?w~jqۺfդQߜR^YvPoKzװruguXLl^GxcLlZEOG5B' 3'=2D8G41C,;9$,+* ; ֆۦԞެΝǙՑٙۗѐvti~M8RoGO8E.F/rWbnK_!_&vRUY!X%U(Q$LNX4V1U&[%\(oHpQlNfF]@cFeG`8iDt[uY:|Zxk|irNnMdFe5_/dDÉό}uWdQF7]+2,4:3;6.66,57,75(76';7'=01D67I;>H9=A27<,3<-4?08;/.<0/=1/<0-:/+<0+@4/C82=87=87>77>77@78B99E;<G=>M?AK=?J<=K=>M?@N@@M>?K<=S@CS@C\IL`MPgTWlY\cPS_LOfRKhTMhTMjVOnZSlXQfRKdPI\IQ_LT_KRWDJP=AM;>O<>P>@P==O;=G39?+3{hj[]?kYp}\mKiQlPh@_D]Ca>gUmar_eE^3RNU"NDQ/N(W/[9[6\3V4X2V/\7V,Q#T-X4^6`7T+a8]1W'_+NM!O)N'S"^2^8[>[BW9]AcLqZjXgTe[fOS2L#S-`=eQeEcG^9\AY[@Z4W2R/S%oWn4^"_/etaY/U=W/MV"S7gD}3pl$r%u)q"uWMSTT![$m%JQ`_|h&oٔ__~XxTpRiOhLiLfRgZr`|WzTqWmYnOuYɁj~Ykw~,ooimt o|mv}jl sa^mgk`hǑVޠ[ha[Ys۳z'eZvfO~iQo_G_VAZ:0LBP<5N2@8A)H3("_M tRÈӡӢȝĜҋpŃ{Sٖ|۞tb#~N3U{GX4R.N, zVp vJ WzOtI x\cd,a6b;^2X%Y$Y0QWxP `"b#`/f;k;^/U&JQ`+d+l4k>oHpAtLkMpOjFf>k%r[zQCZ-(7 !%##$("$(),,!'iTwGox:㨣"- ;-$H ! فvVeB0B)"R jdQJQЂf3}As`q z&B03AA(,L !+Sc28 M>}谞!dilv  /Z{o \p "$ ^O' Dř ԛ}!xL p # BBj$P 1Il<7S}( IIp6> zA{ ݉Pyt C=BP&UδWTd*OkF٪Q6T+ iO D '|MYL=OWI 'I5nuk\VI5a#?`RM]Elf??C2W,K-BɨuE#RCRɀGAHEWTJ iBxޫU^N\=}GF1.a8~1oͧQQ̥Ky;-TZʘ35ژs+b_#^7q7olBlTN5f'_ 8Wd2 lvDJ35aK.5)%K~/6sםரS?8n`s _ T3ƣ敔ߍ/֣9:JK{wT6\xd˳"l5bQXD]Ng {py%zv ?1j*}u+]b#624M}j>A[plL;4rtFIkLzܖ<)F0Vod߭gSU*޸:f_ӑ3P[`y]CmV`m0ҍ%71mɏc4z@Ɂ3cqI3]/SfOK9}S݌]-UܤcUn-1FEܢU|5}Jٰkbm`~j8: nzgl=oI+W@ղpuIǛ!UiQАYYȐY-ehҥUg"~rRqhM%Z#) NMaϞlw%=S,[ -)A QUk֜ʬ:Ogzy@ɞAU=ˣ<ԜlYTgtT(Xtޥ̼8˳Y1 3 ~5.؂r~vpWN9jPbؗ%)lx!Y`}+%.KSxtrn-2D>@[L|m}R~35hal = bZ=1ARbeH3H؝,T|ݚ)g%sb_O\-VVNjxo]Mg]p:'6&W BbwLw: y"E`N]oovmvj(~B򨼷~mʪΉ_RݦKʾ]Vg?.\C|N(0Ц|9^Uy:yoKkzaoL;@:}_nذa~*w}kV5W؏̋iǧ J ȮGk%4˜lyоha6턌Rԙe?:ٕ{*Fz9 `?v ޿27-vCvanj  X#a!@; cx agi9{m ox,Gg܀yفqr(nȎg6` (㸺ÚNz{+J $ 4 H@BQ,**厪{7e-kAPTQʉ<7|1ϼă,Ov\O4C_B1hx' &Dj(P.oo{N"f3a,,8$! :<<CDX(OOJSh $_X.ϦjQ[W&6SK3 B9LK'Z"GFsmYjhNRI>к>:#>j^B%k͂UvWZ&Z9PXBLQЕFW'vVBe) ҂q=cYfqq9)UsBoZ?sқ>QcGQ3G%}:5>vzFxN<ܐwG,{b^JTYND+"O,`%&3?5r+L5ԅzއ~/Q~uIC?C?݊ueG'vZXc`>KqwsAB+썞s$xΑ+J"$3Mmo*c #jSKTߑo7ZyZ~.@UEhd"?0juܗm5"Q)к ԊU|5#KGǦיSe3vP^ϛv(M"Z^m;bрcmܔyOծq߸/l$zE yVo ](_3;Ö%;1MԬO:/e7*4zKA=.Q͵2uꎋݹiyԒrgɠЧa Ǣ07f5w-U֢Ch}T=,[ JBFdc^ɪo3wQ%~>C͸F.0bNuuV6ȇu.wu5j̿F8v+b(mn 78l+(oLxzi/!dLv͋協o,Px 9^N G2T3'O$Oh{S&NjM=3=p~P9c F24 Y91¨JVG=km3Sg]мdYy!]=yTC_vh ʸZFCgͩ/Xhg;L+Y6,EX W5GNk-YU%)\zWE-g.W.mκIثV٬N<*B ?obھB/eQޚa 8]㩨ie< u%t~.g饚pM}Yu~W)ygjDSNܝ_oy<a~qaE>^6{};J}u|'~,'q2B4DS l ̓A )6d٨mgeOFAH-#M^76NJ}~xZXo;R{IW[zՐS{pv ~Xl? t (x wcooHAQ}Ԛ7/}xk2޹XD2* V͝s)cY_lpl%IF9n"[׊&139oΥ?\ܥT7THFiQ&3օE:crH[B>5ͣh 4!lQF=ajc2V;ٽ~uu'QUIw'\'`/_W2-+#uID53]l_vJI|g*xmq#;]_6n`55pڳI0Qś@33BF.]~j~'  lUV@o\ "sx_+SeaZސs5籽B4B9gm hf*r@WJ[" {^NVL~dQϛpm/zvI?l^oקaݲw.ٛNS:|vo Sn{'/_yvi d=F4N)X'^xn}pf\,;*wjq_r|쓰O_7[g W/v)'y(Y"Nɹ}Ή{ΪRo$v:p;ݣwR:ǩudkwh5 9ߤUӗ+3rIH;нc3;s zV;FTigbCe\4BnY/'4D 4>(?|LحSq7w-[Szcʎe'Ė]ϛ4rNմAfޤ] OwYdCȄK`ҭ>dt?Df4*=vi,d3ZCfnH `_5!+&uq uHQ 늩%3FUԷ575:XYF>WV] :[S_}r7;>9uyMg؊MN5<{Ad-0̉u?=}¹(pâbAa uKnU)ΙXVE$'T/778$<")-bklz.s|ԗ\8Ư ZPċ?MhpNN=:aиg}RGJNI s`$D쓰DdkcBٰ &,1/ބ;^2}Q~?,zAa3-E2X:@-%WHH2?H+1Kl ,/ rB?8`8n03@ ^#^[;TPux&8cG$yqΫSh1]00:B?K\x0!Lܺ,izn2I1R{I\'Ym M^/_P\}]9QZ? M;!H&\HhCDjZiH,%U[ĕ]F,4 p;';G= nf 575m҅Ao, 6p7F[C=S`w03M'+K bil L@!p%xؙ{Ksdm?;g'̵rV꿱/$`4XoG{7 @:7< ^H@ţXDO@@CH( qP: { 4Ow(HS>  @^x< 1x@O @{ ,F¢/ |(m?e@9ݾcn_"jR(/5\.HQ!DW(Q/E?4Edb~vҟMŸ~_Ŀ8.h?_ӨY*eblc&˜ &[ү,Qdf^'O{Igyy$HЏ}?9s?Ϲ]ߩ"6w8b k}]gJ]U%w<1OqګZ쾱Ea_/|O. j2G sNՂER`J@{×p AS ޟ|3D \vf8 \OkTQ6bGs QHEٳzesrYtJiN{mHwz~hLðy! RA7mvނYSB9'Z% qgR} HG060ݜY6qVYs"{^5~$/Yu?: ;6KBGNGIS(T%PZ'UKIA? M@>DEILEEE}2FB:<F957 9s1BNV,OaOfSdSeQ^>W2Z7Q.O'BS&ɢţӵj-mKq}G? : 6;@ >? ?|7x/<R'P<@ : |,~/B< u+x0-|&|$0>A2ip+:O%cEkVcPbHm_jV_9`=W:V*ueɵƘǡÚtd J):\b*hZY1W#Z(aDc`X;F85h=~=`|s=y/y,v/o)y3|6o)q+V%UD ~+9X2T+CF}179x$-)u#{0m)[s!mhn%j!fZp&f{.}-~:sGdg.U`gj$a]k't(hb){`mh#n4oE~WiPy%gcfm)r6r6S]QF@W͵o}ùwֺzȹiGxMu_7xT\vl_ taxk {ie qABqgDluPlƠQgxi rBGs8>mCAiNF]TFYcOu:_oHiHfHbJfYu\eֿͧɑ~=e}ZxY x[xbnX x^EjN3hK.nQ1mO-cE"dAN-&:"=2=4 -G2p5汔vόh|3i93b=jEs8A+! (iHsuH~JKzG xDo: q: s:}BJ? {:r3~A yA ~MyO mKnQ]DlqU jR^Jfram|ktqagvgd}obrk un~phrcZiYPiYOp_Uwf[uV@hSmX r] ~i }hr\u`mOrUrT rU |^eef~_|]y[}_cvZpUx\qdvgZ{m`}naqbUm_QtfYqbUkZYl\Zl[ZeTS^ML`ON^NLUDCNAANABG::B55C668++)$#%#%   !  " $% "!'*/"YG.m%nYocq^ʎ:|pvgpSsTtboblYlNlKjXgHhMkJrbnSkRm^`FeOq{ohkZlbp\mf[6K!`GhdeAdB^;WXd9g2Y'P!X:T5L)Y(^2ZSa>y!c"Wu~rڀVn /[mb"wtFm{prL{"gѱĶo~&_,^\ xkdX\K~_#ás:UdZ%NvRuQ=qn ]<̞rgU=g=~ncz-ok_h  7q ӫm62M#l9% eT5|4~rQyT d ȳ5+}oI-5ǘn4uLҺF{TӚFMLu} C'kj8\j8JH:r/Gb?[΀ L~e[뽝b&y3 JLT<6uԸؓm50G+;sqSj*Cr">-r9V<пX5:a?;Ͳ^B3_,/"N;"+(Z+u' nq&ƒ#K%=)3ɒ茇B/f HL'A}sŲම4n75{˨U_ѹfs@7,ۛLQt(2VH,F@w F݈n(F Ȳy$cZFBwHejp؛Htr8ۏEz҃ʣuc[R1Sc\xOh k` 7a Wٛ7HVh hGN xyo`(aN@ >9PV?e|l?7$Р  K= q2 Hdi/R1QȓtDf0&a:B$HDBqtt^րv,&|ݱXTҟ)_H6sk/n˔e AGޤY<`0~#{)K~?1*˞+^P!GM!X0`J`KX7IKGDJQ Z:eJhRhQaIaKiJb@S0OR P!M JOD7EP)L= 18|5 9EJ"JL<|7:NT"|B IMAj+i)|8 := /u+N"Ĺˤ׷d:aLPl?vGBA GJ!> }=? |89>7 @`6P&S$JA<> GGIT3Q+O/IN&X(I"9q(m%8A }2}/A u4n)|12<hGÝּıpQ`B>sIfmLpoi]H8?I"[5eE^6V*o[i(^]6P#< 24 4 {"3 23: 193 8 B 9 }2[i!z*w$-6= |(d79 x,{-9|+46z2Yg&r/Y tL{Q|<8.6A7p(p(|2?c "abu8XyțDŽOB_mPSVzȲ̃ii֍qTkfr\S |`T~gV q]Lo_FahG[UXTߺKJڶ9Nv[NpUHv[MdV~aR|]NbRhWwbs]v`xbycv`t^mi inp$pm^o7s6k;m7ÛsAsx}틨|vv|bq[mJo[mdhIgSpt}׍ӏۋʁݔz؀{݉zuyz~{}x{{y}zxutorp}vvusy点yu{yӇuwrioakruutwrބvx}p{soyr{t|nfs\ravooernnqolkbohlkqdjYtwztusrqktvt}܅ncrwoqqnlgmlsvnhnlpqlgnbnej^kVl\iajZcPi[rvoqm`nilojcfKgWjdleqspqg`fNkSgO`>bDf^hgjaojm=mhijppxptfZ^/U,X5_B`NcF^AU6^>p^fSUGJ'OU/^2l]eUcPjQ_HT0KZ2aKX0QSMIX,`=Z;MBt-x:֪ǞѮȨkMkYN~SxkQj^fLgKhW[?JRE ; KW=_Kp`W5b>a:]+S+JQ"S$Q0];`=onqte``9L@@96 ?HKP HHP,S0[3u^}ϳ~uWSd:Rr9z}s~]jDgGY0J`5lOiEV0N)T&hCd?W)BH~5A `U&V1Y?Y=K%B[6RF CY+U3M%CH~FJM pLv6VO"IP(FP&]-]0O$I^3x%o\g+Wʨƚ|F|AX{v}iVKkѦܨ̒͞фȼsΦcɠ`ϥlzylqf_tkbydSyT>~k&poNp\\OkBO@HANFeO{Q؀NyJqMqWzXTW^ޜ`ўiūv޺˩Uv.j*f[|VY{Q }k@ta6?k{hlj^gXLVD9B9 :ACkf_M}HpL+Z1r?h<Z3(M.F&U/+h"e5jKlOb9nBiMhPpcvfrbiHa*i+q6~g3`N :-U)   "65<#%"'))*' # &"'(!! #$1))0''*""-$$5,,3**'! $#%% "" % '$,#"!#)!"& '! " $!&#($(!)"%%+#(!'$!&%"()&+404>9>?:>N<;P><WED\JHcQOdRQcQPq_^qWHnTEiN?bG6hL6eHoJi;vTȪa~Y Zlcur|؏tLnzxJmH[4]7ZCT3U.b;si~qxpoptsvnoojqyӄĂގĀߗ~|{}蓽tss{stobnbqdpsprtsyցshystyptzpwqtuvwyz{~鏾rz}xy˅y~qjydyԄw؋n`wuf牶uqfBfKq_]9]>jbu|hXfSmtnirwormtv~iGjPyjxvsrmYfReJfQfRgKeJ]?mP]AcBrxllfFlmrv~ucunpqi_nftsptqoxsxxqgodszq~kxnpopvorostzoifOiTsdprlfmjifjhm\jdpjurumwrshmopvn|}݉}͂u$y<ǟMDWʒ3#KHh%/Q6-7-Jn[?>s:yޟCK?H U9…2UP%#ŸQ#7ј9i^y]sVzX.,nnST ױBAn >+/z9)Z%#~C5|{*\o̗]$ #>I̜r^c{ԇZqS~2䩒|Y컜trOsoR/:Ӏw R0B &׉7 #+·(>RIr.DUX^Õn+aZCK'kǞɘ/ V~k!L T9[/eUп85mLS:3;KWwf7,W+<+SUs"~1?~C0B(]'y=(}yvł隝`9ufvwulmzyswqjZnjgm`1Z3Y(C5HMCZD\HV8^Iu|ޏuxvx̛ѩܹ~q'jAAdm{UdCSZ9I_>PhFZqOfuSluRm}[v^ ch h(j*m'j!dwl']"cxJz2o~|T6ilh^wjorq{yzkvk6}%}t0OZc#ZGxW?|\v5xJhV}\ޡ|xޗ|Nxe"ugՇzFᲗʮΫӑ΀Ƕw½uɲvͫWb̏bɆWzTzWUՇQUUwPpUpWoTqXsVuWwX~WxTtUm[^Zטk՜rϚ^ȤzѧnעwӸ۠𵁑q}Zo;~Q XtNgĎvzSt&z v-t4w8n/HbX!E@0VO$5!D2|M.}C<o6GVD(I2#b@XnCJ}Fc#v?yJ`'XsNe+v;v4|(eVG@2#7(D6'@1#<.WI:xi[rf_nb\j]XQD@M@<NA>6)(4&%D2'F4)G4)G4)J8,O=1Q>3O<1T8!fI4\>-Z<.vXJ{]LmP;sW?sW>vZBqT=^B,dG2qT@dG4]?,eMLgON^FEQ87P77V>=P76A)(=22:./, 6*(F87G86J;8K<9R@4P>1Q?2UC5WE6TB2Q@/Q@.\I?TA:@,(@+,P;BE.:1*50620/*)*%%,%(/&,.%,/$.1&08*97)87)8B4C?1?H:HB4B:,;=^1U.R0lRc@L]1c5njkdhTeKhWlgiMe6W)P(LJX/nfqxji]j]_Ildk_bGmcrywsՍuΕ|ύҀԈ{څt{qlefYrk{{tb]>fSfVX*bJouopy̙ºЪnjycO\8?`!jWkVjbi[s}⏻xmk\x~qnvxyyĀ~c:T~ۏtyeZ]{]A_v>vO~LnğϚfؒ|TۍtMېyM֏}H~o'k]騖`ګųǮϕǶ˶tзs׻q´tʢrʜg依a麥dʞbtXRD_JgHtM|MK{MyI}LwJrHnHuLuP{PM\֞jҡZΦlڦYeȕФ񥊡޹״Է˴g*t(a*\,̐x\wmv(a}uz-B8 0ZW0JH&eC7\NyNAv]FfGAJ!Fc/q8xA }Jm=`BrT}_gp is^VbMl>|N aj+f*^VR_!i,z7l*bdz]h[^]XTVZ\Rc^Z[W~LWWSVO}LR}O~P~LX]XTU_$ǟm.e)i(`'a%b"[ ]_p)k*f&da[YYa`yUwV~a rW `H bK tYJnSEjN@jM@jL?iJ>jK?mMA_E8^D7^D7iOB`F:_E9Z@4^D8Q<&\F8S=4K7)J9#L='F5,*&"),.57 v*l%n/r9Rm/@ 3y= ~>}7IB4: G<IJM'Q%JJ Q)= JDMW$LFDFH}/3> :>3BD ? B |; @ y9u657: KKAFDA @= LLJ|8 < IHGOJ:FIADID: 9>B@C9L'N!=E$B NM Z1Y5Y-]5W%_9Z?\7]?Z4T]9ryyaYU6M![<]8KS-V-Y9_DkdrohgVOS-Z-\0^:eIfF_8DIK#y6CY)V,`8ÅҴ͢޿m\=@OMQ,W2Z1nggFZ*E_,V0dHgtjWLR gGO"T!K!BBBIU-V5X2U+=T"MGC > BD4SSJD}GtB j9j;Bw@c4|O%_U*gl>tBl7~d3wi9yo?{qB{pAxn?xn>{o?}N z;khtTqo@{s?vo?ph=tg݉n:ޑr8ߘyCُr8πc$oetk)Ƅ|Lǚy}ִzպy¼rῶh绤eƍY_C4GBR]SpSxR{RyVxQzRpRcQfQrRxVo_zk\ڜn؟`՚eMz\|ï꟟輦詏ڣtȚr4ẏdЮptKĴ[|+{$:I@w(/?XO )RS$FX$>+;ue qG ]J|TVc2ch/ t:o= i@sN i`xl#x vyi_ fMpG yE Ƒh-Ďf$WuLrJ jAkC}T{S sLzStNqLwSqNtQxP|S|TyQxP|SWXxR \ uU tWsVg^}Wa^c_yZbd|_sVuW tWvXy[wZz]f&~W^ZWU|RVXZ!T~PQRSUX[#Z!SQUURVe!]VTTRPO]ZTY}M xG vE RUf$d`WZ efPPH?qmexyr{~x!U¡Ţ=q/` b!g$dk"m#~)u#z-q&hw,i l%k)h$\v,r(ecYPaa$V<up-8js-s1n2k3OZp/y4i,c%Zs,k!m!q%{/9? @FKGHQ :6 5 B= CWGx+9u*r'8 DC2: = = B z9 ? ? A AEAIA7 LSSC@ C~DG|: 8F?{; ?As3}= ~?<; KK? BD>BT!AA OS%V,EF=NP&QR$E Q+T/PN%Y2Y"Y+eY_@N'FC N[#MM~D b'q5|<<y1q%u%w%7< ?A G31/f-u1E CO|̟Դ~EeJ>pDjw:=A > Q~E v< h,@ADHX,O LX'P ~5 MK; h$h#t/;> FB l(C }>q6m6g/g)l*_d+h0e0e2m=sDyJ Ty<wA i:T*sV+vc6e4i6m?k>h;c7`3~^2~_2`3m0{o8jzkGyX&w\$t^*tY*{U$vS"rQ!ogP ǟ}T"TBH!P ]BB H Z"EDAAĂEu\ݹqonƹOo_ ^e#joUh6 IJh%C/9S yeAv *HgR4`v!t;>)aB! >IA] */<ԸZFw5ۺO02fNQAüE)݂r{JW$}R{5 T@[Z䋥x@%#ЁXTB*hNO "hX-wTJI)D*T$ptYƶkf ]X]PeζDdHЭH%|ZS<ҜkM|_YNlg ,L՝Lj ǥP ʸ,O$'sC!) $E"1*H?&1O0*F,dpA l@ByQl1"dF`":l$J<1 _M/*$6곒qh]f0ӌWM*U;4 fӂ ;&a|h׊uj#u 1v;L;YH 9xB(Ѳ0gBsh < 3B$ɳMP`2Vj/:3 2 TBv`=MA-xqRH+tڦ Ԑ R}rH[;pЃD& 4d/r 2j/ YB–`!$a'@  Vk5K’a(% ,".uꌎuZ;iiϙ3g~M<ڜPJHa9HB t8Rl&9METr̉),!m/\u8wvђO[_"G6]cn]fb.?aĸAYSgBcqD +\Mn?}+M/N>vnCԐ)ݡ?`E BCG~KF 5u!7 /|tVE^YYZޒKVxrF6z5m]dhڿT/Ѡ]oi m[/ 헲w;'mWs. :W*rZ !e1:`<XI :ء`aBp?`7- -] iĬFj ~X4J2#!M" M+&k ;e#t4 d;T 0ty!&Xxep =|}GC}BQ 8~0v@[1yG"T!^r|CqWw8qAP:zws<@>88{ Pg"@Yݧɶ5eQO$f4iٮcٜ/ "_W4i[\aۚ6M3]?653a^ܺ4y7'>4!:uRs |sU`LNJW)::zg~n:FQO8~įU#xt !Op-VH  'WC$/ry*D3:h ;n`U!hЌ?3yM"%Wl u 5?~DxIG #t"]#6z.E C?o \ {xm=T/yk ~@\tӄ_*P껀 ,Cx }WBֈotVq$C.7]W߬aHޓ_@1 k%[h%,Cpi?ƬTY87 MٸWd2uuFsImjx)DCp91:VoQ_Bb.cM)|̟7'r1(s+Kt6uI5z0PvQOm$;oé?pZ"_ڶʟmfϬM1\w;''[> Z)֢|oݛ?wm`Ep:QGh ܴmr}=1+NrA;߬+?xp wlV+c#9>Hܵ ^%tʷȭS{R:M]k;D=0D=Ӆcz[3^ke ߳2DҦvъbj2yRF 6k]T'ƪqqeZj"?za *3K1\k1MB%VPM%V( 2BRW+KqIJ'Ei#<Y%$) )™L?B$x A(B?PĻ]d9BNi;瑣s8 k% {뽣'J. 4 wsHwW`ӠX݄tej2TRIoBR$4#茢i !@ $!-PXQGgeQbY3s\ι8W^[kw_šb gub4R4\}nR/c 6[Tl{%kmGѥFVݖh,ka|7?{ȇ='u>2T.uv?͆mWw-olkBoSGv4e}<ؚxjoξ[%CZRvXN-\ {<~S)z.=Qk.:@yo|zu$a_*\%0w8APA |-BDCx^AB/?BN Ah< Tp(Adc7aܕz{5D9 @&u&CwwNDK<.W,p$ {W7"x\ 湣X <PB``c~6GT qe"}ss!IaȻ.9-bѨ|L7)L1ȠoqgCxgw7ݦҿ9SvYړUf\}%ۡQ7qD|6D_éFQ( N>1E( <ڰK7DJ`XU1)_Շb-лU+;#_DG;PQdb C?-~aBoMIoioM/'K3l)(_Úy [}X1p*1AtbZە+ςt[ܬkIh?%'"π!>)#Ll@kQ`Zh}τcۗ={S^?-tp[A캨̺yr}11+iӶȬx̰m|N2Ϻ_sM>ǬLr#ű"(4zlL@Ɵ!D&煞兞1oOghǿ#vYԳ飠-%'%i?+559#ɖBzqęˋWÓ jP*!jyOh9lqO ] Q!/ZT$|`sMqr yfȋpd-(JTՄ#Le%+f.X`V$;\It}EehNI5F7$$9utQ%Ϛv߰$a8ǜ2ƪA-#PSl4buO2uZr8I|Tf$m7idCɥ7G6DɢU}_¨˰RlMSn0Ы3+;4<|0.+2 ݉dDvCSux:r(4 >(2Zm4f"nXv+D1N@, =EsFH䝆($0FPdtQx)k{S?OZR{yGtNXFqG^A4k ȗ_"~,&xUbФ6xاJ-V͚Uɱb& %'l:h5_7qj'8&ApAБIU@(qHGN_Τb )˖yO) '' Ʊ?PsBc'D2]E 'Ng0\di'M0*8%4ܷ,8GLG(+il@Pw\=c ' | A!\\@ pb@ؐC! "D— bO8l %,6B0Xd_y=q`̓"| ` mq4J`Ƞ9eOvcQro<խSW*5eZU;^i~ۡ#[ύ^ih89`\=68!=cCOkgh4Kpȑv3B]bܧ[E1`dG%Y}ig#T)ڠDm,1JQ)B JCR=(ikǾ~i$kII HHŠ 11g,;!jI%j/hki-!!m"Gxk ' cXvEw Iq rVJ#B)*誀iR4U-G0_DxsxB=zT'Y$6w6]Gȓ~G9s_&&ɞ )YoQz87?q*|uhe,JmM= Y>K/(aQ6_QԊ𭦖D^+ G)j}L7~Zd[Hz+|ZN/7mz[Tm 1~pzM~)2`].+NMq=:.NJV \3Y&;%F+F-ƣ .D߿&s (xЛ P_ S m2`zl)7D+Ӄ=l9AA"zò0 5 i:]lqk@fd?Q}{;tu7mowi|tܭ]gFv Sb [X5V<)wRVr%~:cK{\Q8kչ}gcc&sW5UC g.kwVN, m$ܯjϺWVK9ewW|POfݚgUtGC}zIӜ73,SU:CvմvP;U̷ZZ:͓-֩vk6sLꬭmcMw[ssQe76C;B]i|SXQMdYoU* BBH ,BX=fIC+-B+."K$1@@ ;*K 6Ң3aL;eχ{NW{jǻYfԥbi 5ŲҰrg;Kl.P`u!2v24ZiPZR)]ALDP Uɒ r;Y2Pib0Cph γkQsFʲt"5HbU6g2Ť"$>'m5f@`OZhGal& % 1`a#J%]=FO0%mFC aE(Eo#|nj8e2E RD(vb/A *@$q:CLvK #\f A(pǑfڡda ygq+8l`~yY,i>H$k " sXq ` F+/P@q# Ϗ+$  bp s5@!?fcBNBS,Χ@.6&vQ}Ukpx L8eg/t>ψBq.^4Aw3!U|m)zӬ4lg{+L|of|NnZLEݲ>>{ z Gh Ħߜ[3A͵̎(]ieͱ e*p)C[֭p{> !-!oAc4]MCQj9L~(ߧ'^*᪀1,w98| ɳH)rU)X5{sVFN}0>ʲ/v'#?[~L] .hG;t <6Kf&.ʳVBJV5c<ö=,Oxn]S)}?> O,7*rVݦd0:a iڶ%νa[\e&`l:Yk!S ARѐqA**($ $VJ8BDdDC(!C#(Ft4 E_!{`O>l^Re⤉'H-گafnBi\# ;$,HpqHt759,˂Y ltٍ^O_5\PrbDʭpFďRBCt ςV-E &jy|#Z,$⢥*2eH %/ECH0@ RR%5F?s)tWJζ1ytwXqnGמ2N]9u{ӵg5=ʪ؋f,;$b[P3EߡWN4a%! QȔQ4eZ(GW﷭)t[zLڒ>`/h0LÝ 5.߮BGQڳ"+Myf.*{r5?G^7 U?5fj^6vTR[?njZ>:ZpecOVJcjȢzC>8g85=32}eO_;Nw-O[: jk[:Q_l۷7Mm7ƒ]S끿Ե?fl8;]ο7fRWBt'q] wtA^}C:!bO:KP2_9uXb>PlI, PnRO{R ݉ qY[>p:7ի=,O|WQbXq Ƭ^U'>-<SV6 a'ȣRtsa4A]5[rYո!hꐕF2 ]NGfhڍ3:+ʖ[hz:S~' #`#'G10~:Eͺ#F(y#n9~_:xR!E{˫^_31i#DZW&ɅK%ƠQp(l3Z՚6fE  KzҘqzxto-dw/hc_VMSO-E3V,/ |S㪀TDOЪcܚ9$9K=emSS✼jD٦KCoy?,6x`M kP_|>E+<|R3n4/̲[E 'Mf!HM߫{{ɨ]Fǟ^0.}G}|҉a ,5^.fBr%}>ԒoQSτy?[޸G)f]ܴnkqAC/|Xua) 3 :,?M5dyuS!j☛±kO/J|6Z&98 !{f4V1lʾ[x'WfU; ۾yrǽڿj_黚_;/}S5֦:SJ{avV &tv⵱SC8k5Y}yygkiyd27wN4ڟw?oiMm/+-7em~g2@s4A"p Og@A>~ @䀜L(Z{I,6bPM#֢, CO I1P]aIϤ;&8 &$ wH0Eu |b\l&xN<$ʑF,(T!Yn@v' ?=u 3̸&;r"INTrK.!s30carIIRH(r׮~{wN<}:K]߻{[` F1H$栃7FK(`i3;02 s=ӿL)@1"{4ǾX6otUb{=vΚh9@C@541 J@EdKČ*c?1:wד-{_ȏmT~^X` y/ @D/X+/)-3fmIC?R呿H# ß/ L;9ׄ&KW ko *Np/%BZnKlN5TD"ƏX  |F<&>Y\Щ0y p 2i Gm |mڱ_7SHy#Zp}K>YxK}+|Z16ZzKA#6)SWgVmD_l7&w_-kuuԩlniǙ5<|ZXq>oXSafpuW7Ͻ_MĞ)bhjI3zH~;8pYzϼ[a}_2}gK//d8Ϲ xj'!R`.D9q"ϬwWU/֫%TbN\[=WJ*+R3#Fe Q}JnN|mṠn[='<+jmRw.Vʖgժ qK״g典'A%(h(T/V]^Me$̊TiqpNX3I yqBȋʈe|iIͪo,ř6)#2kր}evsZAN##5cOG}4jd:6C=AslrNqu0Owuf@7ć a>`lo 1>q;V66vFBJL8$CV! ]Pp, SE$/9fD ǓX"2#Yۘh^f-~X45 f%̭Lv6n_\$c{s3n y \-L5CĖLk VC3 .c a! P032 Ȧ>! &Dcc"XZ"4 Șa@01 ۫984*0[lc<ff4-_w}pk?dR\eY{[@1PtP" D   PC興"XXu- r-swO?3sfyg9<=n}lݤSLY'lWݦnb'ݬ^asZʐ ?Mľ$A"Z>Gן\G=[*uPż_ƀV7\_,/"?W2 hKݗq-䯆r_k>m)R5W3m`{;*fʎ<RV$ KI o}WG $Szaix>_ 6Q wHwKsLJKϴ%s{[fPI=;@(H N`PbdFkT1 a YJӾqsRG|4ȱD2Ѓ+@^Re7b8k>4j8uҸE#;NVm`Z㲪v7A-f< 1,{ ifP?vI@e5ؙ?4j(i(tb\0YfӈLq(żjۭqߏA/&@A WΆd7".2mIAِfQ"-J_2LA (|S7DݬD$Ht!y3GCGYw0 ufdOշv ;{IaXaO8--pC1Ƙ7Ta3dV4X^Y罕NNџS)ƬH+XM2ӅD3Es♢L$g8[uC1sgڐbP~>Vs'n~ _4@ o pTAxPli|9(,M=™~ sL<͜}[1|eXvz]TtTfW%m*O1{^ UK uZ#" u%APP.mZ@筍tʝʊr;'* 3 )#jOGS@r$\W!p'4[#/ڍ"* u+]Ƕ]Oi>/r|y:kLZu3u0F@Vھ;T=@ߢy}Ȓ]ٵ MǿGOy\\DkGV%..+-c9K.YE5UkªF^5I ֶz Eq7gHF@ H'[ȏn\]2NrSvl"j%I MSq@7|e_ܬJiGT$_mRkZKl1[&}˖ygfG0h^u Q3/UHp^WY/XbֳI2[R#.{BYÄH0.mP,Ue+rFٓ&ރ ٓҖkK劚ڶ^nH`|2LI(7$(b,@ %y)T*"3C9dV, %\842c x@#6v=q `,X++@$_7717f{7[dev:gG[4 v޺9t:B}; C To((J DPأPf\Tr*N#.LwE  48AwaW9JAxG"@.L ;]mE _'s.Xdȇ0DbiD  Ekžw3`cpX"̍҈NEJʠ6`v7/hKylZާXǴM{"ոxW[giAk5C]W愗(%ƄK3uդ1Ⳮ$#.)?YS"z$ PSYFBB HiN@Îl@ "Ep4dB 6"– N(L5']:ֻݪW;O/kRzwV˚qYzf[~ޯ9Mp+G{Tך_FmA_,~2ulS%Ju {zpf(wuڋdliBR]I;zgvLty,jq4kZ@גE; i!}m*p!^z ,吹F##MHhSQ1-|g?>ǥiہ;ЏuӇ ^|d:!,+)0/+AG-*09j>]湠9vRA b+å*P+ nRM zRK/X 92jmTnVJ$PcIaȴ&7!T+!y]#΢>BAW5t yk|&y}j'7b;yRRny)Eop|tX.֊MI3<7~%9?CB4^8'?p=!ecEZxѸXW<2"(&cݍo^VjJT2Mkg$ X$}O4Tx?x~=Y9Z2k_2şdrQ(x--sƖ"iO}msM3o=9Wj{PHzn d:E}W+WnTW5_nU4k}:y|P#{[>:.oLKBfF,]?P7!Q<nůLj}W:q@DgʭXkl`olt7 0;pF<ѻZ&+|c5lf$1f$b@#ؘ[ T40C3! D]SL1C  `hh XaAFShh5" $0o c4.(Fc $bDCc"x`D F[ab =11!Ya*3C-1;0/?m'mh vBZh$`!,@ ;@'R!>zp@=XKe1QW ?,M~]$cr8/zfImケI SU!$qo5'/V|Lc2/E;1[meά}CW$&_N7|N(IVVNe]GWW6ln0h Gt?1lqQ Qf!,jszI2@"@}븝؋~=a:iQ%0r!ʱg/ ξCKĈ:!q{I<`ލR Q 7v`d;8?${=߳Or<&z`A̅0de{*Xq;&w<.Ҷ e vMg- ^\]}ŽInHH NQk.$ߎ\7.l2"_fc$JlKփ\rj}A:쵠l)]74w姭͚;)QZH`Phedu_ƌ~Ɯ7c^}/}+m_엯 ȟ/5C5ò?PSeLoMiꁴ K/l?s871K/7K1 N N>P&JFSfU2T%&LH8"|fT6_="]֍H&ٔڔ:2$/c&O6Uڝ^cKR};鹳(+TB(Ёkcx2QLg=t4[ .ңəOo~O0\7j,g(nsY>㚳Zv9Y۴S֩ar9yCKV#BnjLl+Dss`IʷIA-7){p^"=jy;zHRF뜠fN֡.5{ ;I;*eHJqfelҺmFS.}Fol ̝o˱1!^ȏG=|Pbz3/>KX̯]k1OUj*֌ʤ$=Ƒ۫~_~⠏9k?ܜ1>8XпXR^)oj-nYTƚՊ檹*Rj割kդjh/+P^zV{y1ygͧC҅QtI>6|i<}ɔg3No3L>Z6+ 5MyKmM~clcuOJ;\%|6nX\9~[puCv @u сǶ.O2 1,* #8:yNG];ۉ<=H ]CG '1me|t߈mybڹ?,4GpDd/;6:"tO耐LĊLAl6´ $B(|a+"C!B(d!`Bs+ B# 04:e*$4=,,P!@DDb46Fcc  gIF(XX@%RQF+ X!tAe"l:a38cX@& d]H1 \-Bx(OgpB:vvI,&Tt-ao+|F/>$h=,քY~,7 e௼=kTGy]L|U89k>yNct .{.m+= 3[=9@Hp^rl07< gpH'5ĸ܁8Q?$A0cD[67&F`nw .\nqս g"y6Qle䕆%$a',@耂,m[DeeEADbA}a5 ! LXB bLzsv%P!o:EуZ蔇 uDM(5ZwV &?=:}V=64lϪ.|I9.I3oҍQ~\/ҏ 5 4zXcёqVxO7$ W'ۃ5U*Mŏ7 K{KztWGڹ[ rVynPX6CVCɲlxI:r5:]vt⚾xI_dj.o-nj+k+}$h#*t5&T Q1qc hB4?\)w%Jvyϔ%K_{w(׌ ]H܆r{dUHeki wK?s_3̕ζZD)jlW*rpX=Pj$*IWEc*?7PH'C@:: D);:WB%\mNa7xs781Sz@w+a6 ,.^,o8e]8DsӘgY w|^ "1B"A'K%8GQ#-o52}ZՁ[ |$,xFT [=l^r}9m<8MGd{ 3sd۲EAɲ2xSJ+Zs,k/YOz7aSl{(PA&u,( . Ye}GLUKFIatP AD\AŷA RꭅJրxQ2nYVF2j¦PI$@Hvd+X ŽENP"UA!HBv#Emt d}sh_CUojSjlWلMZ;GkꖎZ:&alpV5Go tfpxLS`) m\}1C;`XT~EnnQ8jojfki8]nQ U|54inWNjJgj- gТn#FA44lA6Ѝ*}M:; MFAinQFV\wuT9BP6(4Mɑ|%SYܥ2_Tsd̥zխ&pߔԫuspϱ]ɂO:k / :svHMplLkM ^+:9r8G%me(]qlTƌөc.jʔi[|--).i0^*#-WM;U,t*j2㕠l#4-(@ꛞyauWz%E%mu]*nWH,Չ:f~gHGsufVS/<]|dG*vW:(QO4ڷj퉪6>:<6?5W;s@Qm\ܳ(^>y=MH|"qج?ng}3qIH̞wv炈~-}#!=$|})Yቘ'31$)m__z|)VS~Cv?__uEϧ*MorV,^}}xMšmFd,Rg^xl#yw >(wsxN@-sG  2  p])Q2/ć HbcA5`?  H$H"%Ap !`  CB _8{@&XZ$d4'*%<"0n4@ ^ u0Md1  PB @pT"*?!k1~TpPxo ֥􎰐(zR9  &R*1x!PDo'-Y xqכ0YZ,`awl9DТzz`jE GQhJ ѫ@ !Zhw4t+`iՏ3%4gg/xul{Nxܸgg ߑ9{7g{LhN{J$}Б\г!}nsSb$oBwNxL#ws1O_bc9?nZ h7cn],oHM[kXNBp=v=$߁GsgM['(Wg}{v{pݚcNĊAqp5}*n|I}ۭ6/>Sn5:2{u9`s*Ycrȱ$ ~t_?.YcqȜp w]Rn8UYgWuI+kUt?ư>ݐw!uµ2VnH( !7lQP@P0PZQNq^J388:ctJsgrҌS]Bܴi_˶_']Fɐ);UIs.)FP4\~TI4EH-( qyWf֯_i=myYʳe׽noneq7Z]B&>CJ~WO_.Y9z1f-x6gn\$_ɰce)_L.*:π+E(r&hD|/r:Z gLL6qCޣwL݂q:)YGEbUl2 yF=_iӎ:z k5 ZfXz9nl5Xp١kvE۰C͟2+X 2B50& KuC;T]vE̬l r!ׇzRk BEVYx iPSYO! $F! j4j;-"("*A@B0 d$B#J.CtYcTtWν}i@S-S˄RC =bN^7U6(F*dS1mL?T5Q)6Q>D))Ohd1e}GɩOyDщM/4^'w\%Y靻QAZvҞWm;,}rÞzդ{{[CRqrKY|׊L׸é1P+[bqs^'e娢cf\dO26"[qiT ̪܌kډ!-I;t|lK2qSS^U]n [tP,K:Gł'yCNKGGEUiyfI\'\VuDIGt+1-Z'o {A mÃߥ}A1~y`TCmqBArC!n/^|(hyQIs{gA.L8(nySSۘ#ւgˆFX-3 ]r/g" .(|Ë'ܺܚWuꗂVճֶnɏ͢eRD;&VaN%>i "X]P \黇9L.v!ߩ{܁'ޚswA4:R`1 ǽd>ePɮ%$IqALtw>4*b|ܠ z@pd{WICWT0; xyt' G~4m1 p:Lް':V!w vCmw=- YYKXk v֐VxK`ajl!saَv\@D2j]a<:ΎH0[ z w!÷B|7AcL9ccp֐6րHN -@NU= Jу ;nЏw£$zTTZt)kUz4*YCgT$ά0h9|n#/.-T{ [ޢ"gMl)YqiTI|↼Ŕ~0+ٷ+ %W}kaQG١s9aU>\qziwo3@dOp~]FI"`6&B$R@9g [? ajLR Pb㳀]ͮyDs$1q} n23E/,%:ѽ d35FLÞ6.Y0Xl֬ '|x%{7#:ǀLMc{>.D6EaOw֞I\G!h.9/G~!ly#62Py}-'811Y#^lI$G0< "%F;gJ7qm+_|ْz-'ζN*Fr3m5IQ2߭S*j5H]ϭk&d5^i7X&|/6vq5a%Plh 5ZZ'TrوW ƚ4c xbfDS)&;eAP12,VIFU^J5 nnPT t*0ڢTV<҉4&V50?" 3qG.<4_x508jĆs>rU᪮Gte,Jd{ތ% QcȑnS8F[{J_քa:/pAKjw/Yr-0V}sMEzEu}M]$A~/:0דs3TOݟFG"y+//*;r-O}?Lug^e)XiW4mM[]M?)n65mtNu>iz[)ɩF#j1="ǽgC,@ģQ{1v<- 9 9G% < t;[`oeGqQO H=d;G IT9lOe<'`v;F|"Yj4GaW5m;ֆ1 o wS`39 [ <dW3yhN0AM,ހͅp/. *ltel }ubx3 av=hL{;ثBdC.T=#m6tW: ; {}=6`;!wn/ @¹LH#νp9~>^2|%\` Wu՞߽[2 p5[˃^X_% b,QpHH@J8+*oqQR2.p3g@ }x_[H&$|| 㯘"W/bYti֮?Vo+-ܧ:4LI)I!PE@Ԯ: H"ɬDʟ#X7ЗPy,}40Ո. ^LG]'[f7Y11JM`$ 25D>cD>pa] ߏ;=@%Nc/r' 'UT %yN=l (`pwJYwe,>kKGO_3l>%_x?HT8,KCa$?I` ^<%L:}4RZ zT~ ӏ\,x JA)J fj,,bH]$i+B%D+ >'S@) zkYU1b-$|R5K><<}{]ܢsgy o_x=`üDF(>8ogx@*jHNELȋ TDNi0Ҡ1lqbQ1#w1fL4R>AuT uפBlT̷ ܙhQi mZm|U=jjkj}|4>>B ;)m:tڭuo['rKƝ;eTATB LcCwî6ޮ ׻|o߿>TYH۠~>;, ~s\QM]yARAB'FSZ Zi-( !DD@XPv¾ (řvFgq:{޻w߻|ouuOJj+,3 [o[ - űeh/mxOϋ'~|,Ƕ$~7ϝ Mh,{:Гy# ڿiKk𢤣垺VčZSKD;oş&.vFK@OI4G`Sӕ4[ ʳR6b'p4xQCG,gxoPh kVz/xՎkՆXr3r xE^ N;Zw; (lrʢζ.h|k(_nmFگp{GA݃`v4BNbd6N&@`:1qhtk>^F9АЀ\ޛB ~T> BH<F0z#0y(ngl`x3Mؼj%7y o7>i~ 4~$X99;I*p8gq*l%5W &IJ,!|9O8Eb8vS=12ĤtIs $/r,圛f2ޏ xF>gnCA$ lg~^|D- HY1eѦ֚Mv M8Ξ'3nc!k{*l)OYcp_w, [ 0 a3!ɳ5i޲P3z|s\0IRmp/CjȨCMO6%N(xxp,B_Y<#LS9f.̅UIbp!OeJx^j^jHb%<"٤PG }2S9߀<NHz-ygGo<׽Rk$ZGXÐ"KI҃pAsdɶ4襕BtοnZ+CFL̚r8j(ܻټYq sȽq'ϱ  }"* OV=XDD%opN+ {gUL$Apk &§0GО(f9ۘX`"8GV?\ xxk,~u+4֘𚰩~|O'& yʽOe.wXv>}}tudKPHW 4OfB*k.$G[4f_)mXvD̷OwT^4 4Vte3v? $(c!&Y2&{u>\;_]isY;*m\qʈGVc}=5zClP_٩ꔹ򹸶̞]•]eXyhs#T;e=l{"arvlJTm!^=^PlX!2?x i ŸujlS6Ĺp ڦ4;pQj=+z]*:2?YNT /\o9Y#+ă2 2a?.EHewk"ٖJ튂Xҷ[EYɥ-66m(k.jԤjk076Զ6i*[;KtW47 T6U^]Js{ %o/۟n>jR_(~Ss8?"X!Bb CQ?ͤXW2~oxS?UIO/N5Ou3'겇'/.jW]Y[ZmTv _ְϚ/N~XȎbN?doӿ|:3's~.;ysCcDpwW?'/]Z9%mβ\7Q򰨤6sg'\#T6ɺ\}Jć3t-L'gx@Dt6lDl*"E|(m6A8Qƕkl `! .4' `>To2E<qeUZ_;4$! BEJB*I ==YOt-"%A*"RTzS+RI] ;n;fn'ϼlZ _?d~s_( oj!D@=427>uu/F9!#LոNg\yüybD+1J/RS%d5M:K.g2Oy_'iFI.AHr%$ i.ZM9z%Bdg׻dSN3R 1Y1J)zKϕZڀxI/5֭tТι.*VM2R㽑}DOQ) !r9WJ+Ԭ1 5sARV֮9_{isN6LUM߉|͖ ӽ .+%ub;Jq;29S=Gѩңj$ !ߛgOE%+VQKVai5Kpk;k_|*'Kf)kCPNx>6QPAUjIدfpSAiv5ECڱXfxBXO8WoRi&&HhV s/WQ| q,a;Ӓ|y9K8@83O,GN͖2D/TI7FJu!~2%F68Rr/)gWCsJ__28Xe!ΣZ.>wi.lD^AWOR͘f(ɒGFQo\ ?tԢtgw{ƛG۫ <4ȋ5K|S4l0FD̃vn2Q҄F}rq{ ^ye=[`tctc`ݢʸՉ:w-oH>4n$&S֒RhYό3WO\<mU4)NÓ aG0T$|mQ+,jrI$}KH,zL??:ނ/ "yAD[ PNyWGzGǺ:oTױ#5%ZQa 4)y3w+Q'Jhiҧ$ 9o #` L?2iaE-m]6=[]zPRW7T~nezKS_ySMe ;UVw<)YcuHF 3\ ?.>k7(2xlYOaaw3Ь*Cs5/Ӽ߯Pic3hTQG]rc>.KN* $^as^c7q2ΖqA-!Is_ _e-= >'s Dw _"3$;ո{QОc%x)3&eyaY;j F2dvfL,u]YGJpr>IK8Or:SJdyM3Jg"=E컄fR5l%l6o6~)]$f4ҽYTMJ%VnWlٔߛD)>H+[5Jo,f,T  ,8LwbLs;w4P[QSRx^&NJp"2NH?;H`cӼљ*XizMډG5by>o IWe)$` `ClqLm㖍 ҺShadfݨVhQL`osTM}dm;Uwi hO$7Rqռ٭u'2siZ .ZPˇ&[,*yD}#"5!>+t$h.T߫hl5Z;eQ)O񣬿Oի.-|Ry c/OշKյMKe ]#A1°3j0zIDލ7J ]'t):}G~n=uzo7wT˚ݣ ӲźαY⁺B\ [z*;,}?WJ0?McVkIBxŴXQ\jkj^gKPZPPuiBĎ/#} ELer{o>,;8Q%+bf}2hpd6!tn)l84O x.n 84<ޏ [Hg_6u8c> q߂ R B: @("@t|wPG @ 0=dС5 S-^*pS-p܇9GGYY搧&{>yq&03vcz`/r.nl1CS M,wYjn gBLكSvpt0<'K50zIynyc N!BC-: 05;cw' wFcj !Á>׆c˜]|KqS==lk?B_<Ӗ2}6u[C~m[Bl @K6/M,`"< A߂~8>;B̓օ=ஓB~V elr8op/Si3l4M/GFS"/5Nyuض5F%㸼Z~` ! P@ B")HqESD)$@ЃHQGDDQi6c9owg gͽs~w / ⲘccSӘ*i J{N[̟7,O')fT\ཉOcVZ#{IAG㿀l.߲|1~$t VXy~`E[ jU>l k*)k775fSrjnu`_`1i:h-xbP6oR]&O6t8[ l:kRK{gݩ_cz7[O.s|V0{P7ٱS]q iRE##bkk_1`CI>+mG;tD,;G,q'z۫mo7Ǭ&&׸"r7bgn%F#M-'`z/佥Gư, "1ѸD VMeա+T1kJ6sH[=KrF'9dx,R\F;0C{wB&._̆#y1=Q$ ]wro*rתr@(YȪM=+l-n,Sc*nlE•-J j!n %[SIDIi~)D RoDrP3!F RsO&|hxjO\<)htVKZJ;kZk*|D \ŗgj}5Ӄ[t. ypbť"uz#J~|ϴֽJnѧlXf5p̨‰ {OC%HYGI}ndݶ?SJj8m?vB3T.O. qҩKۨ 9&JMJe`d013 Z#}$C3W?쑜iw섷 xnp!up.Qu+yy@peg 4;`ۂ:A"3=ks!.H/ Xvnk4K`O;p[ScTpo `A! Bpx]`bHE8MBxM@ح_wNDr=ú\"> Z:wŃ62KW4𠪦DV4}5dF wvw֔U4`/Z #9xd dSP>QF+yI zc$gy6mr/~APy_;n<~'d,![ec 3cc,c,%B•z)DEAf,2KkB"nTTVnuz}_sաm.݌ܴi{zt.8FoI`v.QH\/~/_N{*wr}~guWcVxs/*jo&voK2ʵEK&C*uO&8oSSr.BT|W稳F.04ʃ&j9:+5_]2sz`ltMnc 87e7KNZdTʉ|-Z|}?=cQ~I0x\3|s3ax=%/:.n^_ߗ0)e!V? + 6;9Oj<Ęv#^--JδHJEhwA7)&#qk SvV&I=R1z"PX|d l%a|h0oTWq ܆AZxUj~g_oq'ٹ%Gu;XJ$zBƜrQppSq>NQp2\h  }<'kh;=҆*C^r:--ڊB$t_ŗJ?OŹ{NX[k[*:Wt o8}+5 gUMK[-C{);d@!X~܋PX;{ҧKCq~:1S8)miZSEfIHӝ!9 -EXA:Lw f`ij.V6@'bnT P, @ƙ>袁5;2,D ƀߊ&&`fdܵ;T !70!|=0CnVs38D]= 7[6܉dp%X"L' " p3BiN~*y 7Dx@ Y mxdD2`$?g{wq) Z@G+K`83TdG"x [f80h=05`18c!#a1h"Lݣ}=#Fvʷv!WDSMx]WSPV%G"ғQPw#BG:"U=SI!n 4*kpX+@5V냦+=|>hUzx}A2/%ӟj6zTjhKjPL\QtP-?RbLU~|19]k-!aָ%=dݶ?ߌx1Sw1= ֯!n * d:ޔ={ RMZü_\+pSd{<,ݣwKIx8ijBi8gPh7 MPjh^H(B$$#@((AAJA:4 rT,gO?F|ݙ}c~٪bt|9?]lXwUHyy'jY+b&Yn_3 QQ %f >7 xfW ܪ"e-6/F 0v7@6CrhYxjfzRT0UY;"nm,m_4Q;yU%oV%nL ]@Yz sWg?lp>he2i\=RZx%`nF D ŽU JDwK;oh{T咎Du5Z[2L?u+ C>@$ ɟR8Og]K=5urfne*N=QMz?rA;'I$&Tw& to`CU~Ûmy\Nx]C GxdD`dV C.{Y>?*T̈ K&!2bpjlfL sG$QdT,!L mAgz#"h+$A4'܁fV@ނ'8)xt1T' & [Yv~xd|rp"T2g1U^MpE07vd4,c'p A>m+2 4/l7H.@rƃ/dNigx]xq@`M 2VcmWrK {n'X)k$gk[1Az2p95Vf2btuF& U:uK3#bl}m7@Zz}s0=S򾡔C֬f7 ml{)MA=Qu3C^˶U#1qUtkcee S:5E7r֊Mc[vΚCE+NG>w5zGؿ> A_D4y]C'0;QMC&y;IY/ |_TR>H/s yąBtU\$pqSQԨ(hLƪUƧ5k-R4G}wL*&: BuL¤\2햂ZWH}>ݭr{@G nzyfv_q\ڌA%lŖoJ3jKKVOVB8hF/e@DCD{V@-ZLPJ s{jGǔ1kkеw%cCo҇O5}G<<;rIabɅYޤ{'jviw9ZV0 sIͪΰC_tЩ\ĜGgӤ E-N!bg*n-m"`&gLϼqoNO'<κ~kЧոn?.Wbv{xClK̪w{ IsE禨\KԢ{s={߾ݫz;oɵZ/]pkywjSv7qQvG|wTgE> @! a J $$MBb 8P ,B{D(*[A,E?P8[g=×_!^=1s}Vy@gY_kIGݍzYoMRqq`c Ϣݑ1p(t@1|5H V)@%a,1 $96VP_6yiT궮Ϙߑǚ.}oG]6WhKrB+3C󴳏]ˈA_Hj*S-VQ.N:XQb|ة`c tE~`s4#lL*bnu(@>f|7&p̳@CR6x`t@,/V֍ߨ+o-R3X'i.US c@)m{sN1_ w6ŏoWFC n;5clQKpw9hL:<6zA* DL/CzsrÚK7$Me򲦥rQMc󂤶a`sJJ @9_Ļ4E>ؚ3O\ <~;70tjhP\%ȬLptLxj*0lJv(lpQ?EE qHdؓd 5Ǝւ7r`NZY. Q_q`'pdgy ! N@|6 6yP\  yn@siUd PޟN|3;A<pNH/ r+Z9iT:kL7gU.z7tKXSp }r4>YW 6mrzElO3ež?9v͕ jΐ~Sͳ˱}N==?]Ydw4;.1u2=&Q}ɸ.D wUR\ zE)#'ފ Vxp{sѿGM {0tc䭈/-`#urk9\gN>z ݊z7|etϱux s7y Vh3efo+-^__^6o6مJcnO#rG-rն&1O@g&ؔ$_oJhzW%Z9K>EJk W[#[#LADEDBw09 5A C =@MDJcHƿʶƲsTvy?zCTdtW|hRTjUGO9*B "mHHWvA t(u&g{3;ED: 48FV#i&p+~)xkmcmgrlg]u`bkn 9]6ouCk.z49 >6k#p0i0e0R$K }P%R$d3W'HK_/ęÓ¡o\lPdN[LbDf-幡ΗоynVԮMSΧIṾH^͢BaǝCaFe>m=Z:^?`ĕA],Xl&JFI"ʕݞՙќؘឣآ˟Ϟ՘⓰ۂݑ֪|V?_$t\t}~ގț{_kŎZiȓYc˘W^̜U^ΟVbСYfϡ^h͞alϤ`^͛\Y؟\]fW^jҒrp XF;XG= N=61-I-oN8Z6>''4!#,"'%!" +&&#.   "   !#"&# ,#6&-'%0$5$*7&,0$)+'-""://6++,!!$'5**8-->,2?-1P>BL:<F45P>>N=<M<;Q9>P8=O6;S;>U=?^FGhPQ]EFZA=aHD[B=aHBcKDgOGhPFgOEgMEv\Tlc|`Vx[P}_SsTIvVJsUFtVHpRCkM>iK<jL=hI;aC4P>?E34F55D22>,-<**6$$6%%';10=32," %+" ,"!&"!' $6/;5.;!&"'(!A8<@8;8056054.4'"(*%+*+7 ,#"{HyH[%U|< KC ? N.AFJ!S%W6N)Jn2w7O: <MV&_3LFKX)L$E"z,R,Z&> = D Jv9 r4v4HMFKLU)R2R&Q$?N!a8T/^1S; ~=x7|8GKHQ!S"Y#H@ 922={?H }B {>OO}67H{4~4G < <B m/j1U\/Fr/7CC Ep*{3 FM%H:|/:z7 Cx5n*ET(eOdFwzxzpZn[p`yr|~e2Z-jLU&A9|8GJMN a7Z/ENU!KOa?a 鄢bkc^LP.M_]~zvݕ8tFSk9A _Ru`rkL95M8<ޔ`^Zǔ(%Wt!x*eHNA<N˗] oJd|5l9T.mV2dP"؅1n#B1#PWv=3P{̔BCL]gstSG]Apsnay[ݖn\KیO/RQ%јđq-ēDfkC,M]ϚHyv'EG#[Bn݊b";Y6b0x]=}-y}3<;Ӳyt8'ǣIOZ-mv{m`(P5ۿR F b=|0-DPnGbWRedRxA3(.I8+S.gA/zli4>լ?P1Iat=@n k̶[J%Ie˘t T.>\eZ.$n(Qf/E>jp_cMnWLo!GWH1kiiɃP:X0h7sg_ݨ߃oM dB }On}nR\WN~0{k>ydq{c;rOa_b.~Nnǘ?6?'qsf礅kߴM]\6|e3iڭ/2Rʡ+6'ۊF8 Τ#lk CV=Н k&HS9RhXt_ <`tuвvW2):o wTsy$wt+ Sٴ lnZuJ Tx-):vН[n6vO 5͇k+RoVUK%yi`ѱF # 5\i=m_^ n5U5dcq{fΒ,|{Q})VC.0|&*?#:'A/sA#s[鿡Wi"L@DyU# rW'{>^C/aJgV7 Nj5J~[kfs\ 6 x M-wk_wox;ޒ~ʾz-Z]wI9.1'pW4%sy.j-*Yؠo: ;ox Y43Rkbݗ["f>f&2wЖ~BsYŕ{Uٰ\tyk*^Uz_&߆e:L.yFDFYdJgIl:yL=_pYf!sk$El:DF!jR8J=4Uv,AjOYqϚՒgԧ3iqvNy=X=:wc`u\.P/Bz/0, 1^%Do'(3,N%LTF* I%`}x*C}hX~ewAp r94$̅Ue|1N,*EÆeAm$^: >{k,gwBA{ڱ'ۭ7F&':g%ł$]O`JIzeZTʙZ 5I`s/ftD4xv髡7c5Jo4ݨQ%ﮑj/$ngU\{Qͺ󼆜}uY奎ҜtBaz^N),.*{@ź1; X? 8Y*UYq]ժGQoL*<64Qc\">|r{yWuC4u=+A-q5{2wb/zO"gj!s2.C~ e1a;xw3 RHE·ā=Ko=MǮs|)=5j}vp>8T3??. Q!cː2+gT[tkxe\*$Iʝeu]IS&K|c&+Ym + YB5?h|UV{xNݱhCi]޿6 \poJ{N{IIM%f|Щyp_$}\3oQ؝ɹ.yu3dK\ 𶭺Im[&M[Jglj+kݼd>@Pe 5rQu}dG&m$ Ǭy .i9c ܀QIoFq]s;:9n ѯ{ح:zMfǪn#RY|@hX ]@U#Ht'ƴ&n} ު:3m2rP< 7 Jܟvl=cA3{) ݬ&hH~*9h?} YA2_W||.a>:5$dVgT@wrXDET~Jg?AjH񨌞 DT (b ^y vעќױUP{jpp"4>qvսvɱݥ*3n箫 %[1s0c> I8#Ө蕤d Ith_;a~n@ b > M'õN'qwdA 2G18cfp)PIānhD`WxD?qsa@Z?GcfXD h`Qx[)p(kig XC8Ks= A@AX󽐋ŷ`k(s`1\,Ζg{W#3ypG,wE .N8r{g hAؚ{ KvGbn xO{x7대 4d"};HQh@$14/pT!ǤH.NA^81^Qq~S}pm[Xԯ_2Ձ?VVm߬Z?|]iP +w/#XnF4J?K%~Cz5 -L&{ 6oN VKIz=']tmm9峑s-]R֦u+g]Asߔꔑ/l ۵ESEoce[ ufrVHM%3Iк`ԟOw%pVV.ӟZׇ\ {a*Ŧ[a߲Nq icDy@l،jGoy俱& Om//tW/1Pq5n'!?FҶX i=2^nw װI[~C[.+~˨16MZ6,QK2fFRP:~Yw1u%Y!iqG ٤8#8wLlX~<ΠL7% 5.U[~0$`n`t/t rs=U) 0=[@SH? rV1:sGKϏ5Uߔ%cץʎIykۄSuu]2!U(g3Fiuil"1ʠv"c8ujhNr~ё9iF̼L5nSR5ݟܝYWƝQFCB׻™=t&u%S*X-v+5UbПYdџY]ҢXWةTVްRVLT]P̘JPp{xK٤`>ՙ]8h>*K# 3jG,_D}X>e:#g:$Q/ uU1qNoMjFpJsJoC}QzN oDkAnEmEmFtMkKlL mL lJ uR devQtH uI rF |O ~R yM {O tG xQ mF {T }W pJ nG pI wP oM vT uR xU wT rO sP oL xVlLeFeHbHaJaKzWBnUrX~cJv\BeIrUuXhJ~gR}fRjSAR;+v]Qg^kRJcJD\G<YE;TB9M>6B50<1.6-+&4*/=38/%**%$!/%*)$( )!$'4*,/%'/$&!*'$!-(%1$"-$!-" +#(!+( + %$)$*&!'1-4 %  &()-"#2&'=MEDFAJH/ LQ+:DW7PP*\6Z;[9FIP.Z5YLU&iOQv+J^AT"B 8E BDI7%%V7U,T.Z,dFfZY&J(\2_B]DZ@^@bL[KN(RU1\8`6[7R.P&S/X6]CU=I"X,Y0FK![<@@Q N$J.U1^Be@^Ge8gIhj\=fJk`rnqibT&V:hhkhrvqypg\3S$cUcI[6dNkWeO[:S+[/X1= r0k,FU/Y(];W8O!T%eOOFV2hTi[cYaDX"C8L!T&^?T%MDRO3 ?> 45= :l*e)n1{9; y)9 r'7 |5bb m,v6o3c(`&i/f*j,v8m0m,GE<q*ad%VV+j7y:v*+G 74ApGHd9q2tvfc1nc|UNwOIqKB|VFrZ }_WLvLoXk^[]|L VZ,JDA Oe7]/H!f=n?|F J Di*b&N = >P&ÌѳürvcfkXZ]IJ='R6mkrAf>k^r`e?_/nEuĞѦӪЪɧ|y2nq~0R~ʭ~v{c!tXYde ªgűexd~el cLZrae`TP L:;nIt;G JP'F~HV"V}GLTr3C f™|!{^C}Z1g@V%vI c0٪wlшlʔ}ONCI(Ta"I͗#U'_$]7T:Mԡ*Hٗ,DԊ&;^.j.d+鹧ⱤʤȤӪѥ؝כʿ̗y_uJS}buƑh_՘ZHIGHULW߳MNޱPOޯOTۯT[խV^ЩX_ӧW[ڧQRߣPIPNެTc˨Gftv4Șz-Қ_/٩a/T_<;8fNEL4*]@0cA'd?@.%M;2XF?R?;1K86H45L8:bNQm[W^KGK94VD?O<8P=9YFB\IE_NRWFJZHJ]JK`MLaNJ]IDaMGmUNeMFkSKqYQmULu]Rk`mblMMnOKmODoQBwWI{ZP}ZW]^]HcMmW kjpWmSpV vVz[|\ wX rSqQpQoP u`kQiHmFnFrMuV rV yR yR vO rKwP~W{T pI oQjLjMiLeHcDbAdBv]@x_DmU<dL6XA/N7)R;/R;1H92@/(]JBjTKV>3N3'M/"K,J+*A#"I.-I00<&';')D25TCFC068&,8',9).?/4@262$((("+?8@[S[=5<3*0D:@?4:@84>61<5-81'-E ><84DCAPY*T4X2iPoaqefV[4WA^HnNgEkXlWd=kP`-Y,h;X7AAMGO'X+R%Q!V-T)`j\lfnjh\ojpst{xuze]gmtswv|v|mpkhs}qohaibuukigc\JS,Q"HA W!hNmtkjomlci`pzyzmbharx|}xvkk\dB^Bk[l`n\gPhHP&G!O#LL< ;H> <z9FKD GD R$w) s&6~2u)y-8n4c+[$_&_#g*|?C? S)E;8}6 >|7 Z-i8w> w5|3F~8};y/Z#{oyKb@vM>vK:V8`EbK{VAvQ>^HoRyUuLa!h)`!uN`>{VFXrPK v;y= GX/dD`<]9X&X/R&IJ: x%08 z/{5wtϸȹx!q^cs`cK73<&mNGd [ V$^6nSiTc8p > T"FHY*Nw6y:H z7OfÚRrX zV.kD}R"^3kD ]!\}řñÝU[C?GF̜Mğ(P&K0F̩.Iר$QԞ3W˓6bϚ4Ep_q}.Yܙ۞ȗȤ͟ʟͰćiaeTn`rsosƝ`WکOPLPOKߺN[YZۻVYٯUXإQWסTV֤\V֪[W֯VbĘDd9m-ȺVϤj78 @TZ;%61 T;1=#R3#\8!f>#A.'9& 9&"7$!7##5!"4 #B.1B/,A.*>+'I63B.+G40L85O<9B.1M9<]HJWBBL75K51N83ZC>T;6M50P71K3,<gXYa]uq* ="i&R) Ej(RDA@(;HdvfY'~?<=rr3fCBI(-n{ vG[d c0/ a8XrTrEB\Pb`& %;!!$G]O+YDx b8I>@B2TGdH=<ɣBu:@9JkzbL!+pԽ vuffX&vt'@/>gykURv`f W,oV?B_򧈾yR> ?}#E̐o.ķ5粰9V֯-zrV* NY,doY5.\tHu7QԢ9s=ÒJ[Y#鯄Mq!zJ_|To"W-ڔ^hK$/rFҞIe7ɓ:HWC R^'LqéOxci+q#ƅ[郧86҅eٌ`s<`=kJV8+[}}CJt+wRp™5tfV˅_34_;PYKf!?`oF~\O-z]MZz޸|yLhL^2X\l~49[QHHNJKI@p e]XfbVZnO bgrp2{۲]wy<2*e-:O[[i\ŸwH`1 O7q2-_oX7C|t;H"5;RQGA[ܽuV7tṙѪҐCp8w Lq7bI" D9@{(`, ,fhV.oX5)wn9C}%FJ3,K5$5C*=;/C#p&i;֩;T En\$?8To@6Wl(e/1*Y6jRxӴ$zg}J6kV??r{RajLsjynݚ=eMBTO𤪪)Gf_"L<ېvC) ⳍ=!.6A%qӍ"hbZە// =sGІmߊM>n0߫WݿK1К܈+{lPyY9pm}Lځꡆ+7|iT6udPhG _X> GW3[V6 O^z|Zݝ̶b^DWx?qlh?~T aqM+\d+4qIzJK3S>k蟺ޥ'˭mZz.O[ő-3b-E©ڒrQ-eRRAy;l ];a&"m.R:(o[/U=-"kmg[) z,{3ׯAۚQxK$8 "dOꈅph`넸ۢQT'g =]0Bv[[cn95hG@s"E'& BRtgv5Dsq'(nx1hEoPXc$B|vM6 d!^7dy7`R͝<dT\!$@HB4)D JZBU) !4e"*o;7;̝;Nu@X^pNkGGw4!>vr>48#PB]rHAֈVΏ$ǤŏB@*8NT8BY?(Ġg;`3N~D!a4$f |ߓx[MY+$HJEjwus8ZߵFu6eV軯,E,!/ Qy M  "P8Ts T,dzin3׆W c_-w "w}p~cXNEs ~MlX 3Yuʃc ͱMF'_iat.vLwRsʍ7&#Çx_ |̹#z;ve,dFibwo"ǹLF_oXc/'7$5D(aLh^OɲYf| [өϋ%{Ig҄IsY,iTiҳw2᧲œV(o)eF>pgc?|pegS^ߏ" ^$͋]M{yu6iBVBp.}ҙRw*n/*sh2?>wˤ/esi/.ΤN \/[H(IxZ4#M{U3~>}tu9biҀ$SvKM6O.[K9;Z]DPѺj/8@`<^syqK~G+;ŕc m}ζΖ+]ڶکk;c7֖̋T#BR74SD94zxHJtexqqbq[W&/&]gNh+:8Y0V.Јy>xgTvNjKЦ0VΩiCS="Ki+U6n,/T .6T,O^bWgJKW;Jr4\ȍzT*c}v;$j-0Suwݖ]3s*{">4QvO`5 j> Ѭd ̍ppc $ Bۡԃ#ڠbƌAOK,M`c:Gt{ `9Zs6E_i FZ D ̈[`$P&`AG|pV337#[`47k#3 dpF{TR8ڐ3D#.m+s4c473-Qp`gމX`=E1c# وgT[JSFjPB% ҤWQiA   JU:FTH%zUt8z]ks^uz⹓ Nh^72=|8nZ=/IMʎUUIXݢBKnzvjݩНͧvuūbRoE7rj 7{S^]Izr1hz,փz=/rƸ%ͤ?CǾ %^?=:bZ\Vrd̗L&rBT#N( 7e5+f͹Υ-,Ch/?P.]f׉jܶir;9zyKa U//_XQ׏fK0[mλ辜k鴑Gs?p& ''^OR9+P3^\1L:?_!,y?c|}.Z ~\*[͢hf*5rqW+gPdC԰E_SlM 台ìOqgMq?eNrsf%D܍g/K[3܍ҹm7]O 2%S3tAقS )V_UtJ`nQbj|sµ9zlf\QD),,lE'[?O ʹxup{,iy1S+kC7Op<eA=^=H:r3c+7_!ݩ'.QcK)?֑Mפt=A?r&`E*mZvUGj[rO0ߜqSE wÅƄ_?E'lDS;"6|0{IZ6SG3|(CE!jQvh"}3ɘvd 9wj2-gdbfGa45LWg bJBݙ3b1 !G#°sF)bi@B,1 -tW%1clwP ]QD\=߉{L't`b>p@<)t'jE0= <(vu%ݑѨ87&jsAx@ ps Y=c0@#c} #ؘ۠戇-G#QwX[*X'S}s܈IdD4GL s2Az:ł?6`E$ HkSlb71G(p!;6xO-j ANDyyG`x` z*: r" ^/j*]{DH@RHBI$$B *6 Ho""RC"*".g3{;^ѹTLyW$]?ǹgs>V<*ܬ{[z*‘![%j@d́Y Ҡo]k'"䄎Ë#%Éݮ%|#ičQ܂]CzoR KoNϪMcdmI֝wS ˮt5VzdO.^^wluvӁkG﷏̍UxKvp@HWSq^Bn$BrLq@܋CfPIm1Bni.-XhnYr0//8-óAϡĉi4KaJDgGDgo~+ }9v4O& d~.E(zWJ'NsJJ\sB^G-hȖx L8dSwNƧ+yѣ%Vt7-Nyj?>XJ\C\S:]s_8dA[+_-6;;7P5-l-o^~"ި=eUW JVZXJ05{v'y>Ωe;W9/Mj JZfx(X0鯘s,eme>T.|,_LqD]VZ%ح[,D x hkAki[z_@2 S}1qE{Etbixlx[vK;(5D\ otr`RIEo[dە[7 w4& g%JٛP?؃ַO;Ǵwgb\gF[b4;/ i(6/yW1yT5ykVM3m=3=GeҙށѡfJ= nO1 Lqs C#@~41- p;<0ıW{}"OƛхL+^6hՇF(1t#zNl,Ցc5hgdS,ဣ)آ>a2q0Wxu (JO(=1:kV}D * m, @H|^u6T`a56y຀l+⹀(wXF1nDqn8q6GArO9A &Aa4̓'`v [);K} "ٰ4f`K|8olI<WQV=]HǕN"ّn0D;"E iXA,)vh xPTa)`mNH 41D{ar˜H&IPi_2 uA'$yhW9n "\1\(0 L\';B#`1{l`ȍ PKb,2Hd97GgC\l4"Hd+| YD ȴ^[Q0N4:v@ Ǵx14o\P_R`tp0@h@T 8FT=8ȈQ q$cIhNs $20H'bO y-|M;7&u?te_L8w 1 ҬZH:_qSmX Xn*ZJ߆V-;F !i=oP3Vujڴ1Ra5&n׊٢FyFdmxU(M&ֆׇ7k u;O UiS{…3BV()$jeʺeFheYnQqIV\%.Le? N›/ة]٭XۭUj2% !!()wT=zW Q $F({]R H;#yc=oofvyf-owb[dׯL8- ~NA6l'V3mgqҹѴԙcc(hﲗIGƷU>o"mVƻMa uu*倳NWk-uN`^z_%RNn^ϟLsTO2RK_eͤ 矤Qr|-<8YreO>Ш3Wģޘou>{j?\ɩU}Rv{&ĕ֒]}!N{HQ,).yڥ=_:-劲{ļ$?$v_FL<.).˙\=\/_(-MΖƪfU k{ơٲ¾ɚ,,jOُmͲFho`yioE%7cNU(HrŴܔJ )ޘ/,*tJⵤ9DuQ|8XN8~J|fb3㪲KoEiԧ)2or5;DiȢ;N TFtPdxa,]yNtVfRCGW!*ORȿuDA +D vүBknm( 1. 23YE[K7 i} 9ncr11 N֖HW+p8'c8Ww@0C:XC`_uᒢ`z JzJEWJigK͠K2/c>JC49AZ;ɟ{Ps#!ECNg>D(pdQ;G(}Q:+%^J~ym2}/M9͆~R~XJ3YRȲ)yµo'ػysWeQ:c͜lWs&s6&rI> e0Zz[11ON|Q3ڡO_ޱ}RRn}Jk meC=EzM&?Q^3i{Y1mNe=g/0KhEEKe /S?md~mZqXP|;:ګSsV["\:j^ثX2j"Ma8DEAXE;QNEp&HA"B$HNBD)(" %x8*#3Z⺳nlvG]US}>g~f>ZT^8]Uhft?dL'c(_a-`܎؅?|6t(U6{gY:೾2mtK(cs~*[d{ܚ{kŠmncO/yEEpU5yֳ1k*X Tzxd) $q_nIE*f ׺{Jrc|J~khZrwzGYT(E*٤H8#VN態Œ1ْxX6'>(l(Znn5<4X"@w|<@{K ҾYd|iPnL4 <24]$V>'6HV̈QO ;pl}qM$@WBL7&+JWz%ovv/tJTEsީɮgHSǛ;;zdMs7d+}+}-=e|2Fܮ,LX`Q# Pt])/񬩬py_[ʹ:j ѻ+/t5I+LeqBR A}B)ѤVN6+REsmO1){toL6xnTsWl{5G2Ey5gS/!0{GcG \jR)N0)1pLirH-InveZ勡Z5YRF F.c4P4%aLF;GɦzxzEU`0(`|GlÏ50fd|b]sVlFsU(D,WD{8|o'/PGm:^jt/Z"pjA5R=a1 b,#st)s8WgMWp%A:HŽpo?5yo\[P[JZkuoU2`Q&c#0v]k'iɺOmkFCKz{ dnGV!\R6b!7$?rd$伫,XBY6-|V>'bN h,^w=mJ!?5ehV3[`xyz勜u 9wd/ rܳ^sSf~ey0Zξ 5xMKډ ~b8m;N_"F_rTWUs_ >VN_UN =eoJ\弸<_N xOӜytOXf"^l/}b/>޴ueѸz%wz`(k!n}Rw™T9_O 叹^J_ے.rU,p=HQ4%J V=9ZO}c[A\7S-z(.䟱'Vҏw` CcM̯eĿI?/:uZ*<%uRd*" 8Gu+:#Lܮ0/  3ATdLdFDA&! c!H uz0$! E*K@j[{{W[Zm?޳_-dEwse$g?XfڱEF[=Ғk{uS fx%[fMZ>7$z0$=9xQE⨢E5"=ʆM~o`=٤ju(w&U "t: ]4.u)t:1ZsϢ}.hV;$8g fK*R-<3kcWw[Í d8gӾq$A;G$pxoDz <`cL^dm8lA.fpF\:XX`&اm9i ` @1j !Y@N-ay8׻{v _N/Kzz how2G/ǧ4 R]{wURj|컻כB99%N{sDo[PǍRe &l .e]5OJOo0q=t:NOJAJ|PrJb#ZJ=TYQo̼j RXӷ4pO48ڢ6/HERŭ[KSS2 SKC)X%p U9DQu9/?-m 蚂)-܈ f&9ь kG cP D+;!Dœ[#dHD Ũ-Shn֖@2ElQ#Y:4=Qjt;{8}]ݱ9J[C`8lA1cwFң=d?\͍>DyRHl?#ʒ#Bh(xa=p"ܬm'"r#S:I,8YQڙ{32BEwlEBm͈/MM]LI1A'f)`2 +1II@ŽQL =lOG,(`fhDùq(?/ ѮHǟ]PBΈqšU rʌ(k Ĝ"REj!I( Q!P~6- M^f4!obj6$: 3E4|WQNWq쬮AeEj%hݾR&*I'21;/ ]őZ T%ʠYaq𜨖FkƝZ3i<1둙_ܟ5bVe|/{6CY}jθ5x'~˺!Di$`+L|GL, v17=q[3y?I>Gz \3Ak'rẢ'௣@ݯjR[UԾ޸rfzn,q\ECYSzW/WX/XU@Uסn e 6C]z^fTYQsdM"@U;k|iY)dxpMSV? )u<(}j5۲_ 7XYXEیY^8YE/ Ѯ zB*VSU˚ Ö`GJƮ#7tڠ2tլX6G 5/u· bvNh7^Yt+|k~+xn\vʎ?l NՇ7o~"X7ʍ;6͑3-%ɯYAse/8V+r_Ux7-ݛJAUB( "e 倪Y=j|y[UۿZZV<4O[A-.`](QA -- i "7 p* f83d?67o{}>O3ά̚~zY3:Ss!:ڐAK{ un.Lo*Jݢvik HJ8 }+|hLG* 9垦q}ϹmicwDu{\o04uzGF;=5ia" t]ͱE֡SΖ` ڎA ッ ne녰\LkS@zpd=4GaI< D Xwpq%}ɶgg ֍yueDSH,JޝT/@rFeÃ,'a(?q(&: <<(VK}6Uy6UQ8 ijht=7Ä6#5}ނy(1W B_0D0I!QL=C ȉ( H!?aȓA9 6*vg7_5&ښd)DD.Y m8c{"[mN)6e GSog:==iߓ#9|쟱9d~{X{OGzc[ٖmf6Op{s>^M]f]L·X .ԑ/[6n%\{1 ȹWs[U6?9g(S{}׀/2+޷Uu.h:+W,oN/+?4fB)bl@s/m_Wl\-_\k-^|zٯ#f ?fq|<){\h?t-sU8px-/o.;=-rݘ=:P0R8xҮL~Y?ZG>_:'Fn._Q,׎)k5ek%[m״bY3&Y1ZTS^5-UිOQ1q7XϕSe?,;-o}/.Wo K {=?b՝ |, qNr> dV'q[EĄJ:i_Hlw>[lS rc 1cT Ѣ|dw,Z,o.U._0V͞Y-gULu/݋ Ӭnvg/կt_>ԉ_)WR5[';TCy Rp!A5qFEfUeMfh$u'Hnz')֏ial3E dМ6]l?f%y0ObTeF*RbL A*A~i}x n|J: * b5q/ x%$B+; CeFl!QMqG{"Ј$`3N!PmJY <'i*b1b}y _Eg_8˥C){;`CH|1"Oe:l!sD ⹂#hd&89@RcX ͑`E"%Ɇ C#Sl(D:ѹHK9!s9T;p(H'YPh,"r ("Q\p " tG{ :!,  Ӱ{vq pH֝/I i'!K= x"ӑvcKIRX$61$(b%bsw{M#!;"a8y~\^tf]um& ~~  01|9a?> ܐr=SpZɕΤy 137^(ey&Hҟx6~W8Yzn\ۚӚBN1LzN~bӯ˞~=pSBjcǢW'_k7vΫW ֊UT-e}3QIAfgؒΞoϕz ^>t)OGN >^`L2VN+_[P{]k{Z~yVܠx+T03Uv<#I]pUm4ո߹k)aWW=4Kpߥi*AlZ[-Yh7+ gy禥J8E< q\㝵KxFr Fuw6gY4̑c(U7T!6%>%ˢmUf9_y `uqYucIg/gnfq.xź$hB}4:rMŸ ųkUo-ڵ?TW) ʹGo-?|uâ]ӢF#&fXRo>],]jAqXci鷽˥KV{KvL. Ζ}7VܳP5R[;5KCڸɬsR\*6fVbIٶ+܉ ZXNn)HˉѬ8Z.ے凑Bnt K} •g;`]pԟ)R!$^i.d[`Zまg PpG`!B4te@^&Dy1@*a~x2mf b ;@B_HB#$HB01(A q?}sf~LkWuu8Z0ԘstCC^YYV7흚껼|ԭ}MUxlN:>3J f9dA 4@V\J,*KH„M2jJ{Z.BHB|!,!a A0TvABKp h13s*E{;83t̙k|۽rC`i-88\\(@Ѐ}v)o80#^xwqbhr|q܈~a==M@wjWkvu-EJ:5fiS{ ] -;^#TW`jWX՝\Rg2 "F+iܾ}:^ .=`r || u-Q4' Qa>@wg}~XdH)42ZfHl WB\?ȼ)`̅J-eC~\:QZt&i( _dk!-\ [# YY Z ;c#& `$o8d>:R"(-z&ChdBHW-1HB`)J!ekÑ>*% PJqX׎ sӒ4Ci:JD_^.yu͸0Z`2;8hxxp/'ʞ7N?k+_?ofw7tnrR&>dMp;~}fɫk{3^8Rxʱw=:V0T>\<Қ{-d{wmC:5/ȱ SO:ƙÎc'ޑ{oԦR+{qPK_wvHɱ?K482ih+OkTNJyo3r/)5͢ޖOƹu'a9֠Y}< Pܳ'6Zu*gw{[ .ͪŵ-WkZ^/ľ*fhI fܦsWNj~֮|==jx+iK]HGmIso^w?riM85hNnՖ>N1LKK\ifϦ0'yّޗNҗLuxa뭃/: * UӍ _͔/4LWQCX<^M ?f/nW~~2ߩ|:_ Zۢ$YjlW `?E8}v1_w@+e@60!g~z/HD$gy$*") J|7.uGz:/47dk^i9{dS#&VU+6W[TyvjxZ}Oϟ]c&UsE1De1|WʊL`gR !$HL{Dޑ]"%dEp6"TH(SJ2Q IKpg~#m9B,'!<^~h@~Q.D|{&i'92H[N!`y@PH!OSr+cFyVJ-Xyo2ix@e)"l+`tdVbE bTYл%(dz^$ Ex)V*h<̨B~|$LƐ0Af2ieFr"!k32`TP"R,.n@5p14,G# RVulD@%  ,I\@As'dL*Hid4ox$-0q$БA`"p!q#'ߏKA* J"XL&!J(v(4->i~ I!?$_D|>& eC(%>"B0v'N3HdDÖ ۗR>$O/pwq_En۟nߥvdNFss&&6tHVH枯-vK eѬ;v>~ѩꡢ .xgRc񊅶q#7,?N2]KtٿM}hT5aԭOw:B y=[&I2 ^fо:3ϴ_?Q>=zmKO)y8dz19;dz<\qϨw׊^u]7/MZ_޵[n\4S=R:WMKEo˯6\o>Y3ii;=tJ^x"1N3!4Z+֎Y\)}UM?wO1?/jh7^ӠA̸'Hp['g=MsXMM5Qëk̑g\̬/~hW?s>,,[w9C:Ѯ{&[wnU?O(>$dW4h5T=漚^vJ떻^ː/ W Ο7Ϲ/'6ܒ\̻v1xΥYDقe$}Duc7|k[hlxluuS{uw>lBیY ˃S7','JM-4MX^uNZ쓖)']7˟̘w2w2?͘,>9SqfC#˞4Z5MT훬x7Ng˞ɮ,ɱ C]v q+lŚg;s֜g*լ&lإ.Ю(,qȖ,lE ]̓H.hK4LH#C*9)d о@@qGb9$eR4R44" \'`kH\@8b E-" d2 ; @&+C:j2^פ\??eTs[JCk[ww.o2볳ef9-pn)$9pHWnrzt#aw,O!Č( "l˖GA :ˌB"ajfc{TXRʸXg*%59:7hXnb>VhnZܛC`{zȎ-Ws\+V>G,mo}{5+qy˴3iR]NO9՛nEdЯu,]~e\[frr~t\T=MÚ \.Z<\ ,WU=jl?QcK0 t]Q3ɥɆ?ouƪj{U{֍/l)U@z:5r0=#_ ]q=}ܟ3TWtԡ&uZ7}?m{ǎ55nKȱY0lM"[ع7,Чǟ$vSӣ5sb޵EЩ|A>^ Լ ;Fпu&.^J~'Ԭ .;jxo|n8iTɒiETlTd\tҹ٢gw _5^T}V9^VιC?{KU^mki޿ﰱ`n6XRM0ٔ ?Il0쎷ڛd*:CJƎVM}KcSvAvn'L\*TrRÏB|1Nʷ a1 h\=X<~rasGk-=F̃c-g{ZzGۆ ;{<8pmoX E$!l_<ײ!+qӑ\)3o[h7^V']{jCJՂ*2U\bv>>8 &A{]Vȃ:g{PP]ǽmCw4;ڊUYGSh.&_2%uӤL:wR|(Nȧ\ <Fvo'"l]l7o6GpI?' gpb -~9<;V 6nASL;`M`5 }"ېɎ N;`l?wI{? .>Ct }u?;>v@p^w ՇvtF5 |Q]]=0/wܓD)?ț:3 D\7w &^hvBq5q*^ rAHW8@ 08B$rx +]׫Rڝr}Ƿ{߮ݟO )p?6y; خTLHeaLw7A>twz{@V|$ɖİKʼnپXn JSEPKY@ y([nXI|68q(N!AUjND(kqCdiCxRp6>2yˏ !_B|"#GbpUL. @H1AXN8훎}cxaT%ʄdpq&.5T0A?Wkڼ˴ҮS<($s+N'vƝ ڞ-p{3xݢ .ZbǬv%8Ip)wۂOc&)z>! {Al b=hruaMEaRpF>QKW5f4)u\ ou'>-ڝڿ3uvB2E|ϽM|a[o׼~2tORo7~vHC{jCab(N)fTjmؑs\5<2Tz2Z~pG@k//`և=/IN+j0cDg+>X1g$Q$]ɝ[w<&k-nId3}N{?W;&r$S-OOs*`8磰O1/ޔ!g#_{8B'qd-@UјEs6MVjz|z#͍';YsgѡkيM/]/{ba /v_Y5WcBtʗ&o5^Qr֋ȥf6?^{5[H;W7Q϶LnRG\3YvBm\y3=8t~kvfVy}p3 x5Mv-TUܔe/x!L$wV5<8ߴg\[&h.h*/I AI YR +L>8B&<^`*H,?+d@Gr9 q+ .$sw@ bb5؎@\!Ζ!s0r`'BRȘ(yPǪ𵙉d yYƻ+mvۛj|Mʒ*S%?(ȯ4k.Fn.b_W*SnX\FVVMT7RJeU㭕b( ж](0A&Y-!'mQdp }98%Є8>\?ƠbQ!ǁ0 m#wn;tH먶gK79|^{|p|EMu}mg&;Lv)ť (u |}e%%P(\goC * tG6(a_뢑hcKc% 4$*‡ѭٴi3bΐVks |xT`֥ҹ}C%*F > .e-5\۽Ts%mIt1e)d{w[ϧ#Muu%@G3ʘ /};O ֱe gDGnUKeSC-N[#So2?e^՛7(^u)K`ogބ/>'ws"ߜ&;Ϟ_|D_%Of]ΛʝH>:ih=dL{ 31oIBMSźytQ>n&m7͓ƤѽjF ƥ'~E6wN٠¹G'̷M4Iݚe ?R(!zUa|rQn$ߢ._fYK,N.4n'(A4)E$1퇒DՕ{ef]k2p2BEviyf)a_~REN%,^SXBRMdjf'Wu+);%6m:DWK #R56IfGm-03ˆ$`3t@Ō#rGTݪ+c]}-'.\Qh:3|Mpto_k>չWsUG/^k幈MU{cRE"q'k˴hOakJvi3NXLuنsk6؈z 8z4{-[U4Նx~Ҁ€~)uU4QAqI妶mgg^32|TǁqFD$yQ9AqNؓ5 $30'Z+[mm-5G'50vؾP,cb)DCl m5HS˶eqN"4l=b%q}w+z9MLPL@`O16T"X:%Ӭ(&f[`g-h6@XT?iFl\Ă@3<Vk}m ^f׆`3#= T9C>`[lf` +r!:mz׍6t/gp8-.<6# 1 ^ Gy(/eERB! [xy@]f?5cWHVd>5(xy4!|烆/@c"%/V{ҳj25y|#M;qr]gD_Ν$T=t_7S}[c9NgGKVNGۨ/ -F W\lf{?oL}Z UA"hDJobiZkjw t-Zk+R[k3Υts{f?O~rSkb;}"i>Y#5a[Kc'3{9jyȜe{,Y5}Oam=it~=1Zw-niɫwA8ໄR>NB(I8;Y;=Y5D43?7}eR4W0}s1o}9kg&cC4ߪ|~sw[{/Zm p/pwDpy*y'2K'3WOWgߥ-/g?_(c|t6퇲kkSW{ϫ'};rk&p>gI̵ssyZfW񗿙/7lܙʛ 7͊g`+K= 9 OU% YIg-@7ts$E;ۛ@צHw;TWilOE'$DBl_S=`OR~f4$eqCblAbY`kȤs<z@ua DZX#d m{x;}Ds sA[P].K{샙B$99QQ2ّQGSCSd_8+#8ry bQR.:?.C9;:U9tIʋV*J)&^*-IWf5s:J)_x:+D='\oyv-/^re.Fe]H=b% 8 ++HAVI 0Jx,@"Sj=PV>,5Է:(li>mx<`sP}C \Dk#$BSh`wp`p4-.:s%Qt$;U 8U@!P& `ƺ$`FуD"h!uFFtaf{#4bKTE t.P$4(H:web((K}:`PP648MF$2O>팍J4`fHFd0 iU8 xo%1 3(=}@'S]="@G*pe${ޠ ӽLIV(PXlVQBo}1@ BWe80!5`?m UX@z<zZ 88OTׄ{.07T"i#XHD_@ЇE#Cmt <3Ac3pE>rWU>(]j&6nZZQ͏'jJ1׏]s:U䷈uij:ݤP݂BklMJM御O}'{3ۮ^;6lPgP(hӼw\>njn7([=GW;t^+:IJrn >~$6JK%AL#ZO(7GY9+#,ǡoey)gU2ڢ?o)~&9O+ ktZ]׮W=W"Ɖs|rou ء )7b~ Jӝ֑};gߔz{Sgݾ= wݠfYrMFjO;t 'Y,JLAH B ŀR*m#XB(K(KbQ,YR&"]3;Ύ3=ݹ~Gxt6NOdAޜ?77/k|sV~_ьO(})k^Y7>g N| U|E/zH,^:T5E1gA"RW=zzr{rl'g.s%+?JW J+tN5V0UKVR(|ʛbiZxm\}&qR*9u4g}4I\9+)U1ToT p QP`,+=v-fJXtQXfjVyzFvve)Jl.<;<7O__}nXXhGWS[Hj>]i¨xmcZTo0yu9E[/h5ݦXW(9ɱJ+ !I=ÀHF! ΈؽlmN$vDp;%aG}Uic-KGn pUr|\xW5qqhjG4y{X~HxO'':'~PFp4d;5"s~q1/-,(Jv8b/x;c\Ьgcd1;,1N dgoH`b]-tsh׽}wtܘ>08*HMqm񏣢{~фH=1}qF37{Y9^};cE 7W=i%ﱅPWW'49^8Bb=J2L &sTK"nĄXoƢoь uGk$gL+Χ"FAe4K4 aN{Y~?a^^_"  \]}} #U4ć~~N@Ak~ø#4|o@bd?;:-8"qrVf"70 V u6mEDafV`nd =<QM`'Hۑl]mޤvȯa6.3kޖĜd﹜iߦ4ɮsS]'gw1xq\8qVultzh5J_LJKSCۏՒż[fQ+K!hiO#kAܩ:DW{G)pV'q(fċ|IRsTFfRȌ o[fqy/}zt'Yf-&g >g `+aYtT&qx\0)RqƮ+nۮݛj=*ce/T/3mSe39SZQ/)+jd #YNu[^nSZk/6?=|Q/)]:/-^iQYkP3>pkB>UEXm~Ȝo}3'΃ʲ8FUdivH–@BXEDְQQ@VeUE"6Up@{vjt{ƹ0Un[~lsj{F/K7E [MJe)>eP͠Ro*, >|:wO'5)<\s\ditL*_6OgJpPUćKbyeqp(tA _:;,w >4H FF3>)>WJ b2L@R3<_]#7;o/OLJHǧ;4 M;9db!_Hd| >@p10[0:-ht+yCT_{kpG; aa5QXL>@SU2VGw ꎱ]Q18:A2 fnc vE'|4 A@ r9mMrAy_{{ smdl&F`il4:3Q6qg[hh/x٠>dP2w/|T2B{9R(]Y(KZYk'},m h;(`gf ǐ憦@2"" P0#x}P?zh4D6k*kHP5俪7+"54@򂦶!(6!g@Kt,@π: :&~ 9LPPCJAZ^A^Q5Qi|`nN%%C%hbr4@ hTi9UUM5JάZeNCMG/pWM#x#MFަf{7Eo|"?}x]6sekgj02khZG ^{ޯ߈C߈Y;93:oPߙ-mfގAgi_G^pğф_"SNAҗ_#\r=/p458zsu+tݔg>nhW/j#xR)zؑ/å􆽱hzBnGzs1~ؑ1PZv[DwZjoRZ8XuEI[?7VOj:SY+zs.LMGcp|#y۴ˑo^uFl؋%."ywG;~/Q6T^۴ns?:l?jg=3Ēh5{7w>g1!q!/eIYdh^fnhFܽR{Qr~kqskUwΕ>m\ܾR#){ִ\mj s}EZQəĵ/Fg7&VݫZ:;W![vbpk%qj/ sK%mE{mE?u>)Թ^y^#)~]utN\~IwIRERڻP6 .iyPVNHX؁]h3ߥelM/Qn-Ϝ^*6]d~J o.ɨ<v;q=ql\>=rL(`㋢E1l^TLYqHf@.e ᎝*EQ<|/Ir2X>d6?ӂ φ ΖʏH关pa㹼L8{JQZ:!$ Ezi ҥ(HYJh]NWוuwgwonffSy:|_,τ 泠HW+O;XR/T-Krχ`h-:؞r ,//]AkWVyDUx65PcobOuVgeoce,aUn%*T/2)Z.;tP%3Rں DDH4 1C-#G9L6YLB27K[pvQrDﬥ3F#P>z|nF>6'y;<#]^.~4=4=6MtCbߐb3; =m{-g,7&$%Ԇ=.bAr?n8H3!@8`6(b^AA 'O3Z#ʀ^5E)Ot:X507'`^>: (Vt!/w|5l[֝g=c#}S/LJ/}#xorx/E1I\ !'4r/rw`xA,/`@(L?"OPYMWau4~αT#8Y& bL$$ٰןB =dNۖ 4+TkGz;x!ك^;ȖbT"Y4t{%ޔ6Fla5ZB6gss{p4%;@C^ľNz #߃XLW7r!{+`O`;x9_>{h.@spwtߴu/P=$@8b=y_]8bEuj m8~,HA3A%.a~1hkQwc|s5_}xxF{AgJ}chh@I]p2F$! 4fdd&A==Ǒ/G\i@gF> 7..Z_]TFN+8w̪,*yk [fpL'żwO] {@bl3/-oڸ[rX0k[eUjYzzPz$xOil[x;jcd!K)(d2g7s$OV:Y`ӷA( ^ŗ1^4 vHMO̟"3L76ƨC_ɞ'ʙtxmGRv]~?l[Kiج¦;e3<#[0ff_nWyISxWWTu^nbY΀}ksےgnf%}qMԺt*j 72ϖmf'ݶי7mlg( 6:"6-v|uqm:[hO !_gV49a*SlV͆9܇ trjQCWlհoI?T/濻T}ꥭcǢs˒7J_^/~|uPspQ4Y9/}޾RՒ:%od fBiM^^-{Qo]k_;ҰV󵕒O]KNm#f_ ~9]f2i>ތ@xA5;c8HZ,nȩ;uE ՏJn YyQ"@D3eRVD0x UKS5 c F$ԊUr\"@)%cl:4X$T-DqY\V> 8X8aHEE`ip\/B#'d38t\&GpLEyJf~ O)}/TXI~i̓~ "|:+cټP, X%ɹ$$ bcaS}AZASUn4-|Frd܁j8Y87stV5ś3S=ꛁ9 cDLN_#bk^>3{Llq t xÚji(>ߞ134/X*fo Mu#ݝ M&ryG5gqpN@iґ !-=B !QR+ÈX(+%YqEzA=.3ݱe8qap{~wZYiZZl\^\՘LJ@2&$N'/_(:MiСP;ΖH"hh#ct@R (ɢ8A4 eb\ U8#Tw{f;fg;̵L̷aydtYXU=jh06e}ud}u~}d 0Xlb@bCR&$ (\ِ"APri4P!B"bbl{}LA'a `YA>Gî$20Q/eq .ED',2PG2`7("b> b@}aSA2ۻ' NPpCGq=ۍGHo#Dy;"Fڀy{񛊾uv^P!i^vqHVGmd}a=sQ]aܧ{1;/`4_uF5Wkk xat|| {CvB T_ݺP^kK #=^^`Ά`B0s# "[!S+07#}3= fj8 bh 0 u@@C`zag= 03 K[3fjj @@`@R:)zʤU纴U!gkO=U%l5>~ĪIƩSɣWCP'~X)>TkyؼZ%}m) q6I߹]l94HׅE?T0onwI֌r e1u/ ՌFXY3څsĚ⮌Soe8QŽK֪_W>S_&%72oᣪV_ :~ݫBaV)xEv {cVJL4?W?>\Q7 H&^S uRx/qf?w!YY+aGa)}U9g +2T%%%sd"{r&>O)=\ eJ*')00tcJ?&g{,k3gTJLĉ"{~0t6؈q{a "B؎A s >ZqĶ@%AXncURx| @>sH E t 0qxE$< Q4Pe%0 Zx+@A #Sc1'dq 3QAHCkY;} >zߎChh)@4+X~4@oP|@:$B~z8 λcA''pqD\w"~[g4"G@Tc gp7GpFwك  {an[8 yOz ΂5Fg.Ӓ@617P&b8G@_czjWϕ=5Oh %33%?S^_t떼[5;rp٩rISݛ1kҭl~Zv>xxY1C0؛;vn" \S\yR_}a5g.5𩗅U[)]e[Ao*4|8^<I.ݖu+=\wX5;4L7-mN݂`q+L%gï=Wl\ԌsW~,G-ۭ7K; -s*meVӤ٥_ nRm'My8گSp_mwҼW#9FjI{O vWvs/3~hI|؛.;uPC._$ܱ;yjcިaSܭ^QmxV0MWc?ߨ5u2}gM%o'̯,~l}4[扂=WD3mGvE-‰KNj_+,%Zj.|f{[ˉ4.װRfi|>n{uvSk?XNkU׍ߥ&Xa':<5~\8_:v{mµ&WzFVztiÁ偯X/_Y046j:yoģc& P(ɯ{'uS}cgrܮl[ 'B,"PH!%b|k0C1^0D`pٹL=f7w}={##+W/]YxqCCWW/\a>MVP $*26>a\zSP r0"it {Z0h(#0 Hd`!UoT$@#с>xj@0QH: P jb…D ^$8)(b@ȧqrP5QH_H id8ȣ@RDr kBNP-y\LI0yD&GRl@,4>Γm%8Q0!P.ߡDڐk6.6<8ȉ!XDĀ:}=n8m@0 >DG A(D";#@v(n$΁p7yhԭuY ͍s:N`Ѧ߅? ?UiX֛xfuv,L+/[amdLj"<}jwEsm2nVkm iʿ_49q*rAхg)|_;gSy NG36;އ\ռw,y_g;qXJ:xyc֥Sv陮QIs.f]m6wL%R5i VDMB1qI""ݮf#Y_H wQUdll?M+S$Q>1`V%J&9̮F%1)RzrB7iemTj\:Ɯe{BkW[Tؔ%5ɸ<W"VjZ =SR⍲$K8L+&`%R VnIjWJ$|q4 () $bX3k4x&ƤV_h}NP+] đ t@2$3h(LBwF,@E RA񲲂,/`@o :n 1A.\,W{N-lZ\X<лvZڕ]kݗ;{z6,XƆ_}jܣQhLtQɮlfMj)Kh:M=;TUSٰ\ I,`aLxsWm^L |@!q}+ K饅兾KYtB񅞩/'VƇ._Y413qmoo;MDHtLLı(@qDD\Qrf+"5O Iבv!kAlt=ݝ@M⹀js.19FBkxO2ʉN.@8p1֐ Bbl7 L/tC@5Ob'x<@t뵭Ivvʥ[@2P.Hawk:a/DajT|Ih#GY e[(и0\_&D9 CXB~$pA, |>b}8|p8 ֶ8xΏrS1;;*O2%XVbA#J(IS@Q HBDxXؕ!~::^Y!A&rph\\-Nk$q8 x/Ⲑװh6 cC CB \` EEsƀȹ?eKeYZQI_6J7V koĜh o<5]?4+7 PlBX7P &$@Ȃ d! Bؑ"K- 1( ڊ,EDԑڱ:3cOt/Ϲvs}_tWQmXŽ? tQhzuAӳP_ 2FC u-G W5bz[b7UW x̫6Ucu2GI4eVH6]wY^^db[[0Gݠ_ өF|t=s e4ƼvEq[cQCΊ}cM[9mϯ*Yq ~xCmh-] ]"LE= ^%t+Uczwy' )_MF_i7֌SBo".gğOCH7i(Ix>-wgƲ߸Ozs^]-άmU_YHsiИY*xU*>j}+݊SO\r弤$OoO\̘%WmY?7sEX(SN͗^6`\(Y2RP[~͋S/u'p%on#ԡBF?ErOsJ~u;}&se~cW{ydgȭU+l)y^Cl 3u2>n<F1$V`$\2+0eZj£H\9~hd{Ng"".ҐI!D5@sx(CN6bQ!0:H *>OV,'HjT5A.u3)|みb9 (K?`wO !B@+2y yʆ{d_S/ZF;G:7'F'm7ՋCGg6mW\kމ[ۓ#7㊎SA1;,_o..|D5d"ܶjcBT^<\P $2> GD#"aQHoPd0=n\3N]㳻q½q+cKV'/O^_7~u~udbfed|vuq5|uZU N 3p8N#'t(@CCF@i`4 + @>GA4 %z`TVI>XDtx"4&1UA87`_x$ )4n|8B8̏!G:D8d<΍9Maϑd D[cq=d&P8 k~]P¢Xc M߭~h HH =!QB߄s 2?-{a9#GXHE08@'& L46xT:a#,69z3/,IJTd?^'Ma X)@NuZ829#n2d&Y-oC_wh9-[ 3;9ƙC̍>7?J8{IҘnk[ 쮻VS؏^o?1ߘ'ML䅺ݴI5uAMe KoԬzßPxFIy:_'.=%gD[n/emF|c;EѿVxI{CL_m|1ܛ|˥-͘pջVtwqa.o_Z34 m:<6Y$ۺBQ60`Zmr>NF;Ѥxժ= z♺*겣R.䵚BY ͂LlCn N{\j M\Ĩ<\KȪQ, T1ĺQ*9- /ӕ)lʢ#|\(.b\{JSRm(Z5+me%o ) s1J* 0 xB3RU9Ӽl΄UX7ѺEzZ+,ĥA+`&('`A`@8pB3h"<팧yTp“ݕn.4pt?8{af#;@Çl u@paQ"۸}!4(؞T.? nܨ{d}1E'#@sS  28i>t/#~A^AB" 'a1pq >4cɜ!'>2c / dKBqN.Ȳ1KEqq=X(ȋ7Q 0j+H<塱9h?!ԴC S 8I!@;ƄYiW634ln62Ȩ9kUZn-u5x{-зxj|bhpi:2p%Y]sWYX=m ~ CynflaïdSSuk$6NML7o4 poTت˄ /}l/G^]Dous }9rG@僈=Ix󍤮hڥLlSOݔMGՃjKHJA"鰑HzlkjY=SKc#M&ƱGNLǼ/}Ԣ>| ֦o(6zTғ?$eM+lړWN]7YN݀;z^LIɏ=vm%L{MC3i\ YO)gsO_zKnD7h5p6p 3ҿG|gEoYS߱ak|A+?dv @Br% `("DT+ I  $Br (\Tdg]q-^^mG:u[qθqӱ'NsΜs3}~Y)=,-WT0f{ǖJX?N}5p=wddu-U}?zJ_0~|U'ɳd5/3+ .e,k?.(~.Θ*x_(N_H] Kr+~fOUp@ ^~:G uYśDGĹge?tٚu c5~&z.N,Y|pq# Pq$fmF19ZZue{T!Zb^jw']\(x[32f1`zLvF5Kx5eVy1pH 2p\Qh(l<֪QNPn1;k;Z1͕*SDyLJIB6jH^XL-ơ \j1ڮ "DѨ"l21iWjT *G֖IBX:ܡ5Am XrS3A<=` &F # }1)1 a k|`.$$ * )E}x A"1P4&dȍ ~|HԴ7'zFo/; g͞lk3[1V5ݞ9͍ ٖ"!r1Twdm'AC"ӪBri@_"C+fCeDQ]ڢ!;h譖atjAm!z(])Ay B@DK$RTXRh*.D5"[E-:\"x$: 8 /$ cQ@RHK bIHX*8 I9 <0K;>%A(T!"}7 ) ج8f-' pX }2G>`GX@c Jܸ p #4y6 ̏h'R AńOd"" 4; @B3! )pL @9yML|D1"p뽢- zN| .@|o)p-2t/zX`3!"(`Ϯ Dw`EsQL 'B%y!c IпA/.v}BqaP4J\+8W$2`Ob "=ボ=YP sd  G4j/e/` A^F\@O@vBF{~nYM񶯤79)zcg?=MrȦ0SMhM}xKujϒ,ߵeð@qSkC8P7IhiZqϳݍo)V[r횠_s>x+"J?#xDw*nquyvrdt%ܥވ|2t#{e[8`}%g~kߤc`$g wA4y΄VƜfvaڨ & Q{;=tZ6uY"7' Mu"oF/̌~و7#79ϸ.Y1̲Y|Fr`vh|"=ۤ1e۬/7 @ڙQ!1}P%e@%=Cu\I,Ap , ,$vC+CCgAxsnM?gM:wBI W1hx{N6~'ik΂n>=qj!Wuگ7h|ȟs+ZҜhY Y7'V}>˜6=;({= ]r|*]'9Ur?*ĝ1nIV:/ }IkIԟ(-|/<3g\k쩾;l:k}3g}APSB; ֱ֌ Tx 7߸{k|py@˵AHkQW j1fB>0M ժc]k i`Z\Am]WO KHbMlc Ih_@MB$VaX1l%:N'qLit&3Nکg{w߽w~h2% dK#莅`n,[Mx[R倰'ی@X4QM4VΧ"^lv␣HN+ 8NGH :,^ yI~-NtD M 8~TU`ކZQukq&[`" 8, Q.?Is6lMҔVa 2h|R T.7>"!|`7xŀMlt`6h:)<3UR)Lx}&qL 0+竗"/ǾXŗ}ٍˡUIWԕpb_*=k$D]HGb(ŧGVQ[W[Qo?ڣnĤ`T'`J y|T5(A݀L#R)uJ:X>.2X<;P9ۈG\ⳡV>' pL$V 6sԸ^Y =lfN?!٠(2%ڎ?`lDTmH"AҌS 31' tW/\B$(MV+mR:Cd<\[h wk7m3rhf}WsdLrµSUoW?J5GEOs-_fϷ=+m[|tbۄb(ՎӞ?мΘ^+ܯ}vL1~-7ر.s)v03/ݧ'{~S> c-i=1\Sߋjq̜>5&cYK eh[7߹}E/o ?*NX˚}+1_e<$ky"9ۻ7E[ŕO޳;^:V+K =d[R1+|mAsyuBcgie#ee}:6t{U|EGψ~M{(5S kȕ p9j3O@m&CbMK/&En{(N P$GSOpvTl\$Z$2hthdCm<[;ژs>yŃ/F6nბޣ6ן}ګ۝nMMּblrqL"蒒ȆQAIj<%ǀVIS `Wx7˃ ".THP:& .$Cv8jS +.@\cmJA;qWܯyOsFKve>!r( FkHfc.بKmcg"[1\Ēx$R@Ef!ӉP;Ğd | EG⢓IR$Bo} pt=RB38_y!@I?FOyIb_R=6',Rf#KjbT,r˴m$u:&VBq,,l&Jve*eWMFjbiBvX\o߰?( T-V9zc%v}mS꺣!-v$+F 8 NbFNJ~81s \1#RܙˎNJ'mˮly_% uW;ˊ+C]ᵢчc/cݨ}Ka~RR_9/5f2SD?\ OkMdv\;3 ވ5{im\޼iUY?KY3c$Ь ?̩T.|;{׺!6)lOn4ۗFR˺\>UIT8Q9#7$0[d\Mv٠DԞ' K?yN~bPhOF5?w?/g~p]!~}dO(=3W VǬuYN=?#m;sJ~]>^6K_K^wֱ^ vw̾ų[MZә=#UozfIZ/X-"mڢiדj .U^IE8ۆC.7;YОu^cV?^}Zɡ l& Ek6iie6]MTcA6Yɴ2j2ɦ"58:*Y]6԰zj+m5:z_mCom5}}wq?n#rM>F~]@CY]mצ;m[imqMfgѬ-ij;Jt69b:TZ`m*)uT1:k+˙++B\߭7:wKjQ{l=SqigƮi眞3 sonn{{7?ɶ[1e80Ri!׃cˑ d|nJEJ"Ũ~p@AFC]f/qm ufxCY9+ʔqjC r/(mB?fr3N众O}nO\ѿs'}oe|4|PFZ{mw% - fFUtefxݳ4zԛEH]ʝ3;M#wÿq}/]bD}oY]_R:?aT\a}P8BμMw炖[A=iքn{9tk"w}L8S:Fk=`4W9,3yn5SYs\F[Iz)Md9.4&@}% " ,%!(!@$%!..Rv :jӣNeWW;50]5os᫺[=c|a̐ GA yB) : yb? 3Ob5E4pX`w!8șx>9*RY27Io(sڏ_ֻ/(ggcdD[p~d%lOnxw-@6{*M3sVK%\3jş k|zċw'f ѫMEdudKLիſ ?JNI7Xv#<%OE¿q{!n-zgњw.}pSٔj_ae+M 7vUo/ئ>TwT]kW&ov;rȼ^f:oRNj^t >(g&9ㆿ3@ w_YÙo_o?=9`.G'ՕܗOz4r_}9&ѕG@}5?}K:󞰻 ߰FsԺܞoG $~2Ҩ$D=] !!2S`|a8Pbs@qdŗ^\\][v_ǣ;}1Syu1VkE e eAL3LX”oˍ$c$,V&O*q,|ve8 *pE1F!) bHQ$/bCW ]o/Ͽ{zyk/6v6R!>F Y'p<_ D·Pbe"hbW->;c%gcK%+Jgdί—@Czg̭[ nxj Fӻ+ ; :J>]̮;J6pW%V+}'tFuoTC=YoCno:f^:bZ"{Jqu}bo]Ѡd'\{u佨)jHgjQW]5-Ad_0QA5;Y]pەIJ| l߾!8ϼ#v:S7g]/\?v'=#~ 2 ,y֘q'_Mub3BϵBOe1ѫ/@Ӊ l>⃹֣/'4ކb_SEР>kTyN\[4\]i:AhR}꠶$!Z}4䶒\T}kRRDwZ.etS1V`Ƃ\,DId*Q* p,pٻo]xxg77.۹qkgoik?>[XioaukWV7.|p|/}X\|Ï}IH@x,%LD"q@Ɔ|9VP +ᅅ9O} |RuDt Q`8Cj՟,M8JJ-F RQyL*  ?6 l&%L`\}'/0xh--fluhuG eP"WW8mA{)k5OSmG.sRJj-5jıpmB_trOfЎ;v1.FwNSzbĻ躦p̋ˢ ysBY轣9Ho_m&7|]GP?PlH}[r'zϰ-uo\U['roߑ(-SSY,H%HD¢aBH’a &Ġ v;":3CTWM|C[ssO!!xYH~l'іKP}yQyZEc$tn/k?rFc3]_mlIwjg+r&?O50@7D߮3}o}eattw1sо4,3:U':W#L]3C{%@bv,ky^Som ٣y@w7ݚ ߶3Y:7[!m/Yǜkr1#FKЦ'%o3؞o`!7lm{/}&_9v_5 [ω)hBg}_{$˅'J3<`-%Pi*^ioT/cl.blLg=6ѝKƵ3呑sK^O/7C,1s߲ٹ }j3GtIs[ԂwyC&}l_3wQ\^Ŵ{$u{D9'eN;{Gꠡ-_#4kHZ*Øy^1^+˱r՟<_t*Ns%\hZwknXwY@F"AL 0N0 ĐXrCG*c$@b8*Gt:#BYCBf$bC)DXd2HA'$\>\P+S?Mver΂ 81tĴvw"ק-Ck9W %X* Y ܅ Vd|zQ뮹qו FU.cܔ,M#i!)(WLƗi2㒱i<)s7Zb>̼ |go^}o;V__[ۿ:|L;p5{pm?^=58+q-E]q")*j.c/\Asa!E"`i@Ũˠ %F ,(-,:8[9AA r)' <&#! DBb6xt: #`ұB% Y@Ģ~L`C8B4eH-uUQ<"D sPoH)Xrs g~%6MQ]4K2@*> l)!$ТX!GsB^HE $1e-6S&M8I4#ObtyDNe!ra-}73SOBkx x L$ 8؛ iLHOJDl"ȇD ('O/)Oql!|<7"B E?B$@ϸ$NB 2I-)";=)Yaxvc]lzǺ̊vxftNmAg%?V \uzGy-Ʈp]%"wj$sbhSxH`@m9|UZRSk@1Za迓5ƘqN6wMp[BwϬ圑:,SBqj,U í}!7ׯ3uӤKX:uVEm#Tbk mXa;޳]x_d˿R{_c?Nymtto%sܠI溻 O/X oxŮ_;ຶK6bUȷꎔ~g9s [pёo8= !v:qipu+n[c+zF>UmBSхNJ[:tDQ,nw(wO:(J٠- :s@ۥxKq8Amn4kg ܒ77x y_7xtw_|xy;/^~ao/tO٭7V~}s~}﯇Git}9cnUZS2AZbLu \ /7~OIpV. b|k#)9ASW8;uV,ZU΍-5du]=╠qV$E\3 57Q`w e^]-Dy>7}+6o}=ܬyU*Uz22ծ1Epq* n6m=Z8NGd\.y~Q3UG3sjM"(+I-oU/˕O!SoV/6ffZYa<ϙ8O,Of}^J݊6[dK,n5yڶ2sicp}9!GFz$3`ĵpdߨ6!:E'A7c&۹FCۻHomC.u?ԣ~`3U d.O.̡g[_;vY<}3'%).RQ&lnhl8 ?Qqrvf_Q}5op)^[ ћ[`zo6S$UBXBJ*$L 0286qvٜlYx/S33|s$}/(fO$V0,Ez`9RoDi|Ƞa81sS#(+o㔰pd30(&"dE6퐊W3JEwvQ}B=OmIN<҃opķ;~xܶ\{b6ߞ7TRcQjG NG ’֜3Ysr˻7z׋O_և Lq:d6 #k̐'^n{/=-3tOtNDҚj/i"͹zs:4  1ʁ5^ǣ?/>$볋\??._難GB>rscdi2O>jI,{ R!5U` /-r~h&8"#*O@?U:PQJC1&l'% 6YQ.J^! Ckls =]Wv;ⳬ%ѫ'z|][ SJfBɅ6}Ρ<^|tU~cg#IY)9zpƍJٽ~rHu& "t;TFxiGo'hXP7ҍCMP8-c'F_&(y>ZLWM%_.O:wڴ“y$rk+eb|`0bձKa4I ٓĂ%iEfѪhxNPOPU]ڣ(ܼD ?-^:){OG )0u-{!oNiZVLOQ2FI(V5;+77Ϛ` ߓ`߰O.es,DM9B 62#0a'0JȱGgI׊᲌b-B)f%1Cz[R0|ww^)@;hmإ~1~xofM /OdJd'rף]~׾]"Wϒ%0ndjWrn&e!, ǔl-'N~ȈSdr((؅vx#jAʊ&#xt\<<:U<k[Kuhs8Z N;+5~;to|j3 $! 1`8elaSB@z&3 Ĕ3wq2q/.3$sM^%7/v~;;ovTl{(M aFb0T-p&@!j@a.GZ)hrRT(ҝę_GיGxxI"ܹQCF%nͬ#%,J乆0(q *0v bizas// Q 9+G< 17\/9MZ7 4U?uGTu96?_&էI۳Y|zԤ+N7RP3鐆NzTWn'ayY>z@u'h~W@92,SQAY@.0ьxTՅ5Šzhģji-y\"v!~)-B ҁR+ *!M6{P)7ͧAm둄-+f~?6, 6 S)̢ chPm5,]$fFAvL̙-A mmU/-DE*N4MA}7Ͻ,SNw9k#Kʶf[dnf A$cT^]ǏjA}P9J.`zA2)5\kvV:SAzT v;fvWW/M܆lgI-ϳCkٳh~rr ~=hGS MdY9[;֣z#9B=bA %z"+ -> l[t;O6Ĉ'8h7GNDs?cy^M(=..F7'+Tõ_783D6I")?Qq8D2mu׻G[%rΞBHNŲSj1fHΤq7:nһF#9 /ܷn*dxe'>Ikj\~=9]Xx9rĖ7SNCxYyKq>\)g? 2Tr*VlF|n4oCPLDH£Gxt@#h%hZk!5(s}j)=+Fܨ@ذK>{~>zJvyeTjTr+%>Y?HEzHWqh4x "hPIY7TUݟE!^x~8 o|ھiUy0NV_{SpZx0[ԥEEުYCԅ ˲\VcV9.,~(J!{41&K4؃"]6^kb%*1Xc;[fwfw߰݇|y83ᣝ2:,@D< a YRP;s(p&U_xhQ9&$Rvt@bglԇ S}| r1#}0qq07ż{cxyiUTSre}W0N礹ay͂y3nYW!28Dg}y%Je\y GP.b'|S"͝8soՏ!7uw;[?n}ltKmzZDLT?hZ޼V'w5qE{%s4:ϱv0U2f!qŰ'U6N+(%= FɝR-V| U{3^ X q5SgsoHF\:т|$Ժv2# 0C\=9H J SF):BM:(16v@T<č&TlĆU$Ʉ q&&ZR˹ȴ2EhE/l?E.ً 77?Ñ yf6v3 WwSWMd=\PC}t C M7bs-߬r|,p]: Yꑥ<DRERGA5295SI4X%wƄ ٯꂀv %Ƨc"[)@{Tb\pJILSg*gt(0 6cA4(4t8ZRė{ :wJ߻P~{^Ifófȣ?D%@L N/jH\ TJ*ɢ=AZkz5I&WL&MK5b,e T1i 7U̺y=*8%8Hx\ yr̮knKVг^)n eǪ(VAo$'PXk~y=TV5O7 6`l6a I1Vwx+cm0 !$$M:fZMLmF~Ӌyk[ACM+jBoF6u [zm}VGhU?f0,d.df vR)ƺiqCDڴ ɷKrڏڦOym<&}eBj=aY&#潠]sisz\%_tu"g.yFrٺu{.Ҽ ^lעp۶.fMwzn :Ħ<Ob݇NdWޟ˙/6yԣ'ĽPgږ-eujkfՌ9p'n^skv>j{+oM~o?8./v:iϟ֟N &'㞋 ׾OGַO{!aHnꙫ4аñvkr]89@J"puơofo|U}5: WAA*u+7=q\1%cBWjNVN.1a!v##;rQOHz/.(.F0a KR8;LL&b9B02blj\&YM1l53LcBL7l;yz-|0 &>4F.I>[U|6=cjl ]rݧEql{ jN-@ԇ+ ]/S4'jI9ć8Hm~r }yP6ϼâI4̅5¤J+ȱբ U?aȚ0fUNn_+;h- 1$JEo$((nI$)\aQ׳ߑI{k?Dl+s[BZsTE BRWX ."rA n c ÄW1HO/. DeKH됱<:6]ެ/p_o4qy=QTBT@tL5`cp桃$zA BB*`a& fެ+$Yn;'ً͟<3xˇ/bw~:vӻDx9'OOrr߿<]zK;^~˯zǓ?o߭Dy:oDNM]f'*>0ZW 2Ν`J5PY!D=]'~ҟcb7-M-s/m8] cGzl?,<=*wB}g$L},8HySLqϦ^鉏M:tH`wn.8ik'~}KOq@rQYUDV|fOں-=+s q6~۷v,}p`mkt<):&D!Ӄ;{ 읕Ƨy3-( Z_eHGp*ŷ@, %ے eiv<;2x8L= oN}1xvm'ih :^_oXݑ,nu-4ܛ;冡Tf\#h79Y *n`DOi}. YMe >$ʀ04'2P5[Z:>#ӄmF/#hl1bT(Ԗ2n p 5Ynj2sX)=d]s^0]/"hk9J,ǵ"YZDhNҪXH֎#E"+L^|(>ӑR,UkBDy1lY*1[bU>G j3ѠxL i~816:Qǻ!m$[coRm-\)Rl֭+x8x$`f4]< JΤY 8*nrXGI^t-B:D2Kvpgt/`V-ﳭllbRfAxީ++:1n@=WP}u t A[ j*BYP^V]Qو4t9#UB%5P!ALFda‹@f j fF&Ls(XG[D0x ">)%DĀJYK!wz8p33:/tnyΩKJ:pV.3^枅I:sSׇyFnʩS~g>촘3I&j9 abƑ}0ݛy`hK 7AQѹ8qO4ҙx@֩tb'g?zdiYn~'[FZNԌ=cqOO8ӈGƁCYiH!Mg.iK'?uIr¬cL:LIGw3̰F2Bg*K*хy7@a~1:?Tܬ-w&7V@eV#Ǜڮ%堸a{i5*Š:;9{蕷1sHf̋Ź>zS`VJUAlT&RCJA޵JPV~އJ~UrZJn@ePE˯ (fLT}ozܓTXS|^ ;$ Wʛ)r&lIq CfMGE*6R D#n2v\ V 5XaƶKr:<%lXaOBKE6-hZԽJptے,C5&r|B"iGH#CWstAwtǀ N`iƶ ϔOy_m?oX' Z8y3zVᶚOЂ0$gR͝گK)AC"G:s-tR\OAhf~t?N #3Cdٵ-=4-ԌpU=蠟iTmXZ$P&Ap&K x)4e@ <]hŖBJ8zm&d7w jצκkY7"JK ,7(u| of 0GQ\3_Q=AV (1u߅ذzzBJl Lj_E3fb~lj9k5|ܗI1 #obU/*V{] Kxu.Dώ X:ǂaWdJOHdHyx>a=0{9=/gad0b, gwm33JV v gRs*AҪf2'%t((6 ;wB\VIW,@ًS~_׶Rj^D5 :Qvq7*(Kڍ2!@BܳD F[ܯAUC}-U<-j QJ,^oLFiTiaI ṚIF3Y8#5W&I^M\]+6}{[!Of$Kc3caz7,U[ p&2ՁYbG6CiNY)vȚP( :Hע@k a֢jr =eHW| P ^ЊS,ץgdz~Ѽb{^z$RBjI#%m97yֺ^v<m4O{> ֝)s^:LkF_\e~bEA;UY4.InA)0!b|~tyt_/l|:ݺ<.}O'eOovBobɋ#o#׫E4y=2.$(5t[=WڹSV޴c9sf,DڞVn;-AU~ W3  ٧zOU"mO`cjY6fD=wgMOTw rk<*|F#\nBX<+F@]Hm u$$ 1ie樨У:z1S}^z0H^0+/ͧb%-OU'ާfD@gvI,h-hؙAN_Cܤ!^Q䃘اf^ZŬ9Y BVa_JN(;!#jpi`G!cep666dZS U}s5婪JPCH^ s{)|P]O %m 7aևiIk4%oRod=U22"7[8x-ɹ rjFȿQ0) ';ܼq\)<ϻU .?| F-glkJ4f펑v'}Ԩsoұ7#ҳ@ZfX 6.\}v=$|p-6-.2>pVQlm=ܝĢQ4ؼ^ն6D2P4Wnkby"CPbp;hb46J  Ms\uTzuLRwĖ#L(PU *SGQX I>DT5ɁX5Ի3@#?,jU3qR=q_1:  ],u+lRx&],R|܉E6J4B1 N_|To{ng˺f5@(U !8*‘نYSz:TS%+'<%r;TP$^k$DR)>$BCkLnb#4Ԩo;!^sUS3Hpt22^S.Luv2nYGBO[¬9&XN]0YuKc}j>8&HA6`?*]rZ|ok))GMs` WĸeM]_]EyWzĢ$!gIy%ՏGz (/3B;"EIPv \A%ɵJZ=LIݍ5\ig` 2qݒc6& fKʾYr!p^N6۹F ֜%FO7 Ԍyj{wKt=oWO橙'7 ̏.z8N᥽eg0} t[_K:Y}ex5,]}qI fD|G/*0{z[ d-tU^jIzh~lVƻMIl ex0,&e:tֽR '=(8PqV `{ ^o\|zw/7|9|Oο}rz4ʇ7烀զ٧WB?_^M8p|yqy8|1,//'YNzd94[òQ⮕>?ǿ&x1qhkwX+[WyƿD,؉'k6FS4b *H`5{^Qɤ陝͞=f}̫{9ST+9^+#R;άi +5 /6 FM8\CT@5; >aYշ%y?Bup3\/eT*`=|MlQցv &06ң'<EfTÃ*DRPWZwa;e0Fyhxx4fvz LXOu5č,3SGHarVtbNKETmQC}^-=j%d36&'䳠痒6;I!_WƊ=y'z+~% nA_ˏf߫KRÇ pZU#捻 ?;i)S]3(qJ (;rRD!8X7۱nIر8Eێ0u 7<3 Hi9TM@pY[DUZrTޣ:yPY7BqYQԊ),xӀ'8N)n+Cԏhz$J3֎3-s&Sܥj?}G϶uqq8CHVdGW?/֢\?lMpZ~&L5IrE}$ $qE]<|Q?k:|!<yzj{ -[tfS8ڢzSx“lN+N]6jivQV[S:aոk&)t7ẹG46h:YaD܀Zzwi"])ZޭrZ<1De)ut}>)˓+ѣ=ZV~/a:&`PXt MYW"7N.O["Kg'DwBQ'V. &vl=|K&y =kdz-dX& wMe%V <JMq=z]iQB/uyX%k^O׬4xAuwkȺ,5 uj)ױ#l)'AG"d?Ѻ3\UDv){N2/JO]gK?ǁyIC~4p6 jجEPJȎщH L‡U1(fFȸc:o}AW΋rJ8H 2A̔i:+NEH U Ȁ(UF а:>Q26^> : syc9 FmcO\)Ռ⧋iyڹwjgNlsW#-D(/0tfa8 vngFpj"9so҄NcDjZj2F%6$]ZV~9v_V]^|I>uB@ .&_m/_\|髷g/__y:٧oVOOmnHU*.e0b>h-MD;/O&?L 1Z[.ԯOAi~)SUc֡JKYIBD6A&0L(G$'fd@:}J3|_ .AdqKZhm&.A DEQ6QEEPQQP5*IؙLOWMejjjyg>/}6'$,逎2W&;AȄslvK,8SRs A 1 04ǥA4R&; 70P3LLj(+eE\Pt䰲AZ* 6-bQMglVEa:,(LT_ +cV]/.ydO6cGEq3v%"i,F!QWPU#̆&>  S(F2t`s0, * AŃEy#q.&n:dU7ݕXs Y1YJ)Xpn 3<'2x(/ҶG: Bu{.?i4/F έV{Bѝ :GStA%t|:7٠̦IM1EoF>t~>- OT{y9 k4ŴwrVjyp++ZA}Pɦn-[/+vZvxX2xz=|`דԘ}Ѣ C\*uLVʨs$g/f}!^dezzoυzh KHSIݛ[gg-'cXD~8mL,7] pCXvhg>][w} S!`҈h/4+ܚ=^ oygG?|/7#QÁk疎M10Z* n`S%Shf"I&Jq(ak+#~lVA!dccJ:PZ"*_d:R;gchRwejwJDjqRioX#S+W+ :d G$aMcFpXA Uqu:d#U\!AޫT W*,x,Ҥq~]򽯪m7*Uݲpa;5[cx6=G5 H]SQ5ܘI ~(x?gjRڑvwml0v][pf:OJ땘Au5'l[ DkZtu8xkcK2vdÆN88Ö93+p][K%҈F;eqNEҌE)ps5%Ц81%cX{T9Q޾X/~q|/6F|_`|w}Zz0kpvѥ4̲&Ԉ\{u9y\:I\ۏ7ArO,-g6CۙgLU 0WŌ]YV9uCwJQl*X#합._|^|mgo_.nm۷h_D^DO~lzwlA\{Vgǯ= ߭?_>];zu'''?>=9yyqyshn{ܥ2b=]*LxMOg.l[ƅDnjCM5 qJ*.M@PT30 n*% ݾ aTYܿ29ـLA%e(B0b:%&A=x̭J!Yl6 6ZfHe!،\(iDS(`"WPIJe| iKMeX K}π.&wA9.󧴒- LE (nhI]pc7TEPUAE\AEEM$&N\˼jj^{ޭé:}~@ggBɉ 9\H dG. Z^ &ȠA\ fA pD<H&4ė ecA6tQ+_:z- rA9 ဆVdC]LTˠ*z \]1J+*&@ p!. JE8$ݣZ~PA blDގ !><'!pqX )!L%\Brd\tS1U/@8|29y\(S,<l&\$RsFNF"JHATDh2j3fwr~d+{xqol^z[ʅ*\T0D,>gE3Q݆n#겆Fű'S?Km+ke^Vޭv~ֶia޿:М:]åsq!5}Z}wQsw%g閭oqc_+;uyn^M_oO${s'/7ksXkYv5sf\_[Wm=rv/Il/&/&gUw:XZܼOO~^X0LD>ÉsͶL˒Ur.Q|ݥEL[ 3[pu^ K Q[ .JeKIiJbQd)F)Ԧe5PvqB(<ޏ.Vzb.EIUYZĀ*FwU,HcVT4qNG](w5jf(v*ٮ$H={ejBT-^+p5Xr8 E)gh ?Ѳ"ό#MkȎ1dg5ŠX3#\ V]x^>nƹM(ek-1)rV5JX_I U2hvx(Y6 ZaS(=YP"gCaG rفN.Չy(6yfAomHcƑQįqQ v,ni wʎX#AZQe 9QRmq:wDމdn}||;>{={ݻ}.I-l*đNĮYL a5+ZgW-'ށ`qo_`E@L< oۼ/8h`UjjXu~[sX~~Os}[?Luۿl\ ]tQ55W@1ih~[( ״EWV<%"}- zHN(HM4Tf|*M$TRx_ u X P|SzYPh 8U\@ Xu\0?2(" XK&g$R>9ѭ8O@JKϢP@%ASM CAB(H,NK"q) r4"09(ا1P),9P.Eɧ3ARr:HƥCXgԳ6s1_M;vŶS{귍y>M|1}:pmu?-B`Pcguɥ;s.|t}o}yw:\v[s x}=n`{{lk{˥y~8=ox}[؉Wzxd3}Ѥ h0Bƌr8|= -tw@': GmViT轧6f|yho4|DĎi~`0z02&--H,Ft)L.jRbej4>U)ٰv]ǿ9WC37;bfk42A&A  "h)@8l~ nj1# S?NbeGXwځxQ&/ɔ Ι*ITroI:풊|Sq{ at_ks7zGjQ+io+?;`ϳ[Vs@0ΖxgYS恎0=b qC=8Ew 5ǸgLGO[kd FU(&LÆڹ!r^@ *zeA"@glR;Bӆ<^i hc )G[Xj`7tݭ"4%Gn<Ż"<6bѡ) tY8N uBoc= kvMv ]7+sy!Ү0p \? 锫zcKMY"'zuʴ9uցmvv/|>7`nyۻ~98|y{~t3hJ {4^:2t,L'PPC s6N!j~&D7Dq0& w/{lC:crbZO"jlTfk F+͍O@̭ǏvB02$#J)\ΣtWKQ6{Uf@qV! +h]-,`VT57rKTspݎ*o9PW^E*Qܐ9DTNbrPL̆22[P) ="!/3/Hth%PSZT*Peq94XV%Qma ՘|TICTR V$\PM^ 1r:-xcCwuEtڡƅj qf&Z۠b`2UW mL:TAb=TFQ4YM6A!EPn"o*"ȝMDnx,ԩt^ݜߵϳ|>߻w /O P7 aiZ+_ t{[I/*UNZlJj%Q#mςhˆAw.XW2({5?85%p;ǎu:^MSieuF2 VN֋xx&=d7ph?mݙ+1yyIYN&.#CߩCt޿>\ ˓uE2;,ofζ'dHH}[Ԗp7T48 G%PBw~.o}Lʯ//3'{=w[<[s PG[?SG|d6 YVMGw붞c,= DI޵$@GO]tuU17|Xۜ9D;i4NI }I:X`GXǡY2P'|ĺYs< Vm0j!mݛa^ډ{+VrN^$vwUv\3 |?(K3Tkw&w'g܏UjoFΝ^T,,5 9 94a|P(Ê xSv֮:.]׎>ƻy|px8nqwtg%"yfwUY5ʃĈڒzۘ0ʶT]xW{ͯr;fzolsdO;yFu;v6g{T㷂jYvhͰ9+:͈+:~V2Yq8{۬!:}}AY e[.jy'n%iSLJK+TV R:Fu0H#0bj%"TPč0d!ccB®΃|C|fRtdاziM yxM'*툜Z "6.6?6V̍*d*[j~8Lߞݟ‚TS*e.-Un 6 ?=&"ʠY &L-a~$֍_A&B)_ 9ܾ`]ъz:qչپL Bu7hݵXYcE$PcgJbMfC$&qN7[};AB>RI%XLnX1`IZVKkופ "^ ?%HΝ\G@$"z)1B/BqY~!B+@ "2Vc!zMBjyc%+m|uh,h(/N=:M̂6DL69\ \N:RP-dn 4UWCCe) Ќզ*j(cT奸nlB4qyig^} I'x24`{4"`f5ʻ=-O+S GVZ0%@/֮Z0H_bQ999ܓB"!q ?>nOxU(PM=@mMT:j~ bd8] k"=H<,JL9ICzKZI[xĵ-$v"?6=qe,]J+i\Xb=%9lvbł(BPKQQWU)L֚19{1sgثe$3߆ľ;WM'cGL/h+o1{j!Mo'A+Z詰M|YWĚwebNbȊGɈa<3~صuTP.()RQmeԡ8Zq e__%3sC3Q<ȡb4*f\;BjGz3W&3+3.:9׫n[wȽ՘Z)R/ ַ^@mYf{at@2htl_ BlF@"ICCrs I]5~jJ`hG2ڱ  vu&?eO*@s<ag)'%cf <,:|̦6 FpRX6y{ ЁU:6Ԃ{w1ak;EBLWcHgn*'re,N 7AeŒA!(:`Ұӧqb(gǁd > POeG2t~ː2|AB03J4wVޘ]RYs7Dm'=QOR<%,%uӜ[m LrX8dHz"&9|5|:ϵx38\f{nNy-u!1UEO &wbۚX8Ƕ!WfaWmLz"Wj0@F62܅WUrekAg]5設0K x@5x E,G:H_ (k(wJ*诀w!b#T3]S3p5fT6#kjŌS̩. c8 /6d!9YJɚtmM uw:NDӰu1OC΁tHO~^*Rܳ)I|)Y)෤kƄ#pn)ۦt(ȿs\Oiei?\pIgT&gYѨ1j# \&&&(B +,nLVEd Ǥg>f>fbz]Y@>)b/;Yۯ雌M2ŒOg {IcaLBup j[z&> {Tћ:Meκ_̱>lCX5Gs8?>Evj9Q?:s}=K5W\%1]/[~os=c߹%ٍY帜֜TRgghY=bHMm/Wcf{}ޫ_M1k1dwX1: N㽊o17PNUսeP#۷:k/l{WeG ωfS>]ûZrs~,ZnjùV-e_g;?G:zIQެ71yirYZS/1~Mlvi8fė<:yIBs$q a`M0kL6fKzI~eoml%DIN襱ccpEN~:PWSӞe! cF@aGz\=n9s :[;0ݝ`~xv7|({X f`\hoV hFS$T^L Us4bI04`L&Fnt7-˭A Jm竇9^Pύ68fOfkQ&i>8Оؽ~(<{wasрH! SL!11i(qKUR KcT,y%Cl"esR +b ),4b)R# @Db%TaiTr^8ճ INJl9xɪ^/c, ^Dz Y|9䓍MmυWyw2$f!_`O8v]`116 2r hGEk0LE ̢!8V !%cTX%s ց`ǟ@R(fS0L@HC@JFjP^9T4ϒE0hXT[/ļ&UN8 Tt P V3(=iYThN1HIL"4=AJT_9v+7/`4N @:& 2׵CbZp!)л42FJ&bc_?-(8G׳`=ԣ ޾Q!OCzX6ynp3wІH 0C1( $Dԁa@{<c^hv<ۇUJgq4GL-@TP0-tǯ9I{G}r +q\KR؊c~>iQNI>!=L&ER)̙{qk50brkw-ΊD]bKðZ%TTOm;wj胳yo>;lrʩue9U'|ܩhP>Z(n%TVvsiPײa]9蔔A~ї\{o|Ni?%IbYV n ~Y#7=À{ᓖaYiˆǗx-|EZ7^{Bzaȇ]rrZZ7c^e!:EU\}J4FgZ^XK/{hK\ˮ*Jy1kU#*:V8դ[J2}J+!Ѵb65ӕI&=]NQhbԈ7Q@DAdQ@,c߄H4QQE$,i^é{nto31R^]XοGbn7NU!btWyꆇNuəGϮ: n'S7ѿ6rjö|_!!LEM\¬%lèw}c$x$s<`_N**e\!ݿ7v'gÙ?O)kpo:s;MX]Q?^׊FT#7צt[ɬHY);*:nGE]K3+ZjMrQH]Y]4rx]ñs;ȼ~RS8drYTg-b^,].qd"d^ xW#^Mtavº$0w'\dQji5㷴NՀq>I*jsrJIU;vՀYaѩ|  v6c$0611ǹ[mWv-aJ|28nɏ6gVٳ # sed׸YM?/[}Lڝ{[\nFy?{ b3ET'M3ױ8F/s ('9U턤0!kWQ?5>g#0IH~w6BEf~:CO (+Kax<%qDž.tF"<_|׷=D#Rs;jl -h?6{ m }zOܹ ܯb *,#O |(hbۚI ^*:pM"^!ş[1}H΄Wud*"#3 ^ K#œ xQ6}Զu&g9۵)OU~;yk~8Hʩef"[+;.VFJX}J.=mzy=IIg'`wQ N/t)eJ'?iz'Kê ;FsQ$b柬Y17냹v}Z~PG FFf>U|3~0ng"Kywbw?^oK}O1BaG5oM]ےsKXxfrpLg,,Vu,x~Pa!e3e൰Ͻ6g?˴), cfihNt̘,&nmP *"h@@QUYe}eq ( J|0eSVs?ܪ{sÊr2f-qs>~;Pq1+7pV-N~E4%߲)yԿVK_;ڬoŶ[~+j` OϬ1N̼]#ncSJrs\a$]/8GnbK_-97('n&X\YBg3z==$Ԇ~:mm̋Y |? /W݂ߊNC}mŢro}枔]7ݎh-J_bVY|*;匬 j]frnĪ5ZXgߚ6 ڵYj,v@;H>[-b*ZˮYWa;ƩdW7]F zV¬Y1|c QQﳾL 2w춶Mu8~'Ԛ-ʎKp=Pز _ D#ܚY=7x툷Z7~>+`VoW G{qM˧CxpT6yXNJsLcC]ߖG ^Wzu5sL犼RҾ48+YRtfQ}[tt-e#xUbBβi*hLnYG3{6מn "~e ^#feL@`-CKR*DC$^% w dN]O_"`F'·[Z4V OyU#$2!*ƨ* |vw]h^R⇻ddNWNXf}}HϦPimS:e뼐 el4_v>>Q;?Qy@1A0hJwQZioŴR5 ѪfJcfjf75%jM@OqZRLBDPĉ/+R)X?v!<#b30zF#cb*cpO&%N;&DFzOz( io'lA1۟ |raBRk✖;Nx%HlG{aRJNFix$W*5Z!8&xfU*Tw &Xt b`MGRAzX!ǣ}8>"ٍP_/z(jgڂ"47}t7=ƧhaрR5=M t=h;A h>l{q >G\ y-d1_"bCtA12_ àT*E?|bq^G'?JKKv!<=9d r.B`} ڶZi#DP^X a$r@iiة'ҊKnk,D3Iݺpޘ cռa?jW,{1PҋQ6`fVfodCP>,./pv( -8Ÿ.#wYw}07yWb٘;pml=[JUps qGѝPl!A|Y\QVTGcs`o䂖HLR))'g~ dp9At~p 䓓{dH>F>LSR}xP&.x鈎7Rw66^@smo@]`=jسf"J&`$ĴxYi KKt9M|){Θbe[-eURV|js.zוØ[|e:Q7NQnqa(}݊^5dx(K䲩|*f]JXsH.C)$K8)rhm /#~Ӓe]FV䜐10сa҉%%f %;?|]Pq8%c-6ũ iOq=>DMb\hgltgdtF}A@@TP6AvdU4"INOOWM3\uι8嵅 #ZE{>}+ghd_my~Hn5[ :TcވmXSKvwuHohl 3s]GXjwmz{vVf6=I[oEIv_NNP..kk]Dk4;R; {nFGIrΒreܶq:7͌'4Oj'CIh7~AA/&'T a<$ ARA bpT>ؽot:Pyը"^IMjhinlm^0olꇫs煠"nRpr}&㬙ےU=[NlM5=iwwg4 Q$uo^ߗ.l8ǯ~09ex.,xKr`B"m]JSra[}!Bcp kpǨbp[Q3’i(*Â4 Ny XP78~mdS?T 5xENax p{_ NW{m7}0]If'UҪ;1bHyS@u#_Yiު,>$ZQ~A_N. >#ie!a.>!6ZtO"=vۋӀgsYH H$p+EQ:܏yyAn70Gڝ_$곥Xk~÷UfQ1ԳQaQޜ ӜPO*)(:'݄OVz܆Uvgѣ;G} kʩdѯ:ɺTQ\II,$37rL9ٟOKˡ‡ųؚ`n[egs[ּ@ddD1(W>n=| I3Qa2;LF$Yr%a CpUvhVI8dgSPGY}",Mxt_%_Bl'N6JX31{sW)k/N #\,@mwvSĉy#D163XwiAe!is.)J?:-7̑b9ZRAᇴ *+>[QACڏT9ĵ[!⼍ :hT|foyy͸v!g)폞|wN:K'xWҷ!V#m5vjGRo x Sj*pQ5zr?LV2$X2`j2p Yj\#6>Iq~%7!j jIN2u?kQ=7W-T6fLsɄnFXqM|ӆx)'H-LÚq!?Mh^b.p.nw_ q\fMigi?,tL6Iۮݦөξ&1jp_ ","ȾȢl*&Q5{2ꮩ/b.v鋧NuNS}~ϫnZDͲQ v zrPhȚcTÜCMY 6wCMOi 3?)f$մ,05G+ыzzɮR~6_}w?yw\>j7 |E# #׌y!ja2& 뤨􂍞x>-|Oؤj5.SYү+IWCӃy!-wn*qY\3 M0XGr$XUmjTz Mi ?UMWfPSтl$1dNL6B l \54k D%ĽZRU=qUf4uU(wu΄Oҵq7$*ё`I,[wzL\mapʢVO+d9ct[@WS+p})̓ 1z!3ˊƴ (j>ϴEkSAE7^uh/jiHF< NF$?+_WռۙTﺇQ"啪%`% VA%ܰ.֍f}hu VfD%[nc1Lo8=mRba 8S7zjYҁ^0mQ0p R{j6)g_/Z.= zKCL0p  yOkykP TThPP{` "*tEHio`SNI(X߄K)$ 9[DΞvB C@ v#Sl ROEY$HDKC, )k܍`ehmkBlmu54z T?B]7>z!h@DEz]D?A^?M(tkaaum-XMPVh"jG# RY[\nAûLh{hx /jUv7 te-o *AD4(Ȝ,2KՠOpA "nF\ڣW{Ocm2#Ccgb kڣFg\+6V`lK3sԑLg$<}"2/SF~sg㴄rÜ)6(h&_%s4i}VQ;^}4q>FKT`{4zK\PSɒUy~ɘ_]+<:fΎ3} Bn~j[GOt> G;ok%{-%KO"jHm !`}ZZ?s/ Y5`<.v?Oh枾1gǩ?a7Ǥ91IǕ#'&mω;}o&TӈqM780Ie+3mW˦7H1G»T&gGo1KL첌wK`مd(KX(,ⴉs}8x-M[:bG a U[fڄ[SaUDWTk+iyuvN5rI|u,K;f:t/4m%-dKO*6PJw  ok@-RQJuupEC/i~?U֒G4Mļl\D1+bXDD ,e no&I{S2Sa~]}_3q+ߤZD?DKN &KuKx4}y1bj=M답I˨^rVџQn_}e߂eKNAimWZ (hN)$|25UE5hđ0dVGs E|2KăV< CUrM% gWK)_ 8 /;Tۉ( 44'OdWfkGcU]B0K+Ts 㦢T w\d@=99j̄MyMFT}#iuYMĊFІRZZkh5#m$ۇFcvcŶgǿnۭvcz˪l۶]3AF$=A8tBDF|i#!( XG; g!Ux}׶w_Ruzdʯ \mPr[$"?}D{CL(1!?Mx%S=~uOcR6B+I\~ģ4``V0}AN d hMaH;@i6꺹Xm''IJRsIڮ 'EQwqT6Vb` :QY@Hh @j(;ZIɡ끘ڊaҁF`B"tJDxJI3)>Iv._ k>1*d>j=Ԣ-:[i`3hXڇ%WTLP/>l*<y(@kG @'x^R?acS63oCxa=O÷SWwhۇ͉h_wb'œv-\-'e{%pQxW괷驞}ӬgAfm񠕱1GwZNuG"NuL]#ڛvM_o3uiԪ;_t㐎:<'8H՚1w=0;ha5+61-|Tr|E%߉(חK2Qs*Eu5]˵ ֍={KxǢuE}Gl5=/mEùЖQO◳.:Ō$CYq^Pÿ0vٳػs&ֽκcF3q`ޣ$f5Ӎ1]DP4JJoXjĂXٓ澸{9߹}93j>oh˅g3ˮqߧ,F'{pF p75s4|CRyāɁ6L[l F[{==.moj} *=VVS &\>""z 㜳|c*C6w> ȣYnI/P$i  &!f`1IH01/0X)m9kNP)V>"r4frؙr:=MDLaTZDI'%ОHJRLRUdZBONdJJMЩF#:) -sb[?%\+AgnqȤXhkp\x܊#2=+ڿۍ… ]l˪L J1 buADZPQ8c>cx4 {]d$B<`pv1(wd0 {gP}hj'xP킑{`D(2ptS3} 1YfBLB"Į^mm:ZaDD'>Gl)==0rL"ڣ'ۣ&z:U d&8G\Dd_? t8y|uv.vacºՁ ~7B^: k_Ǡap/)=g9i٠ 8 @3`ţԔ) uY V9[rm)J|T&P_I[oʂ*1]o]WUŵkM}s"%͊w0>>AYnTf9FH0x̟ gW#IP -ˆNvomس.^mm fEيی~һݖm { 9{slu7~X =_???<)E,~V\X"wgn>sEVMq 64Ɛue졝AУ8uGeE}Z"W |ZN"|b9?j.=gM=w͜n˧FMxH ԡ"^AO2uUf[[}]5#+jKxae0%R5xR!K̢Rpۓh;$ιT][d@6(}dʑyGC2g_ Ȑw` W U#5wCZt _''UԒi-=(QED$l f6aݡWuly<ږvՄS+މyJe}k0_mGVs+Nrџxn܌S3d[rBJuv2Kͱp'T id8J~PO}g5[& "h1v-iwI6d=he"lwv8K i! HG(?֏W@^sXaU 7jյR}"U]ҐxoC)#d ␙])[:u dȪ9//E NvG ɴ16XYI6ΎV)J2}Kr[BֶeiY*vMMEq@@FUDFdx_0R4@}>WW/89ߵz>=Y{qp'2(Oܸk[FTm>^=!,E}@!1NmÈ:Ӭ1AU4ijj⏃W7[17<7[,T 怒FId #VtJK#$iHɳ|z݋BIsmt)dYâ;@$2eX~j򔀕23ܟ:!c$ @Bmb ȭ@@jt\2?7˳h0Лz{߂:yPJO@{H$4 GF?4V3S8Oځb𠷡IrA qz@jjDQq/6 I$ /P/_‡V@Ƶo@SOP,5rPU/u c+Auq%>ƂU INA9x d|,=(.wsTUR; ОEgNh9pxK-iŧRRU)BV?K R-[΄RԔ3ri+41<2>)}٠Z͙NyͶUej [\]/g6mU3nֻS? 5%/Rb^[:v&YQݴzWzˣvo,-7z&;̲t o}wOԿ0݅ ;O!?8 80:MbN,O`3c3Or4٧Zc{&:af3?z2O(YQ+3H'~mm]7+<)z҉ҧ3BD֦{jbDMܘ33V]x1;苕SxfG`NbY00~ OبKۜA#-i?뷭cd}=yzuM1%#YKXq ~T_MhuPމs_\3`|L-*;{qygDCU̦*(.Q\W5T^V^Hڑ/(ti;aY5 /mKƯSo~uÜ[Ijq6X4n-Y~XaZ|0" v#5K H6vu*zwsez6bEܴ%\DǍI*:NXy?Zu݄}eМlUdӁ˥콐Ut>lʮEջ ;0>/X{K˂߽qgoBfy"9j=T>?sώ|"f9Y#mڽ㴌Fu֦ݫ:w3=tG(9O^ҝ;)2(r)t)rBiA?GA\^8ऍ+Q{{c}_ 2wB~z`Fl6l@om]ֈ%($9/eqb~@P%sIZUX9VUPJrɊLIW๵YBrpiHnw=iz]u;12*(']HQQ5 ľo7VGy/zFT>NJbъy5Vr9̵2oZX7QE _qٓ?Ⲷ%U>9 K| E$m??W/mh6^\t35cY-2}H_ ~ͼH wsԓq,e=K__ۆLL@avIt$hM^.VuXzu'u夎SUٵ*b_ karL-Z }tO3Qۃ[Mmǩ0CV^&jfơLD(6ɯZ1qVfUgG/!nұ1AQdw3~ɽWθ95O=B̉O"_֚H.8M8unzh83ƌ|$-٠%tA0u(od[vz%jfn{'OX8R{^Xgno,hZ&If,lLguw~ǪhUpkvKD2Ɛ QϙK~/rAɮ,RP; .%"٤P]/yV),\]Ik~(lN[i9 j ( 22ϼL2 2N3j>::^YHfxl˛郀]predu#W^/7X|1 *N)aprXj g+T'B;DUS"ɜT oe1Ճ}-}InÄuaxfBL1u H^,툓.`zewi>ZeZFW6L%3ZU>dLhӆFI5$Gr ?N Knֲ_Hv c"H_MVl@by;p۞&ٲn.#n[~p;d$le_^#ӏl}ƟZ˦tG_]r6DUP[hg"Q_-+-TL5[t/ 5? 4s5tr5L](߼ aY躾Оfy]M1{8$@}[[l^8&o kDO!V>_s|6Z?^q2q'  zI9;zR~(N}` ;JnDFn&iWwJzn\͸} 3"['.Kjj4?a[$;i;a&q"'xyW__`nݧϮ;מy^y矟ؕ~_F Q% $ J"VH8w+!go[E 0d^HƢ'q?ۥ'Q7,bC~W/\c1U|⢕zfˏtaV)>uKvtc⋗_zU_x } },9v[;:vPrPvա]y8S~,޴~ |>a[,)Jmk V]lx(oB=jίرI[˶̊z,.Ƞ"~qZL5#W>ހ*&iٚMUes+ºC!i:rH2̑]vaXY^QJ,5y}4 Jc^qX. EGF d&.iq({~v@Ny%S7|JVGA&إsbYOn9##T%bfqp-÷ yy;, E7\wCl(]e;hS[d3 B;?<a(muAQDP 5B 7'7Ă:X"E*ݿh}9wϷ*$ǣr:|;EKhnV? He-cfw\J=0Q1^#"edGi0VSk6(\%WoD@X)W4TDLEEy: B%DHGKH U UJNkXl +IhgbjiWje.Cc䤙D8ѥ@܄.O? 0WL" \f%b1x> Ч*f E9vn3}^s^8vMB2vh3E7A8KpC0c=,1,ɾ;@W 8[׶ݗoWvp`0eJ)^k5ICM:Y2gnDO FVH2H@T6rTiR1a&@H;QƜ&Ѱ"ly ]ǯA9?VZXSppp39 ଀_dJT!%/+W)Ez\N!UhWyz¡RөHQXAFהDrA7Nŭ>dM^kiUU)GYg_Zt1r&ل1U F-5ay0 &|7uy{Ph:7@İ.[XOY.g~H(Zk\uNWx2OēobhwZh^iqu54橫2 J5]VnUtH֙Fc:H gyv.XB#A̳o"u$cY Lg`|zJ=%@>h.2FԪ,,bA? o=X1hP95|;{®~:@dw+3jl[W"g+_X?uڎcޓiϼGMpɾMN`V/hGazB~ H^:~w,\b[R]?ʳ{uذ NﬓP9`Kn2ZwM^GJlNQB~u\)XKb_$'Y_>S`?%s‘qZ4-͜- և+c ~Xi36旌M5cמd6x'u- kRpWu[Z?3s9?걓bKB2r[B:--3]P|ʫΤVԖ҉Z޹q'$Ȱ`&qS'ӎ_syy IT*tK; 0g QQhoһM_~*GQ/G18 N؏/wp`oAa~X<+#Ay +{A?/ (NXW^Ž9@0A'18ѵni } 0 h;\ёl OOG] "078 xQ UրVҜ υUƨz%$fyGF'ұti9*5FT^_#jZS jCs8gb+@+׺%kNl 9,(Ed|W ;Y{35;nTEuRtb|e7 9`Jv৫͠ԞN<jݛ-p:;g0MU x`4艑xM|zY0_i+Sn1aSRwbWhvl`QLB.00KZzmn( ol`H䬬DpVN;οM!xe NknQ;v.2"uQ xm +yk9|EMr6D 7*c 1@6J2?A%G6+#Z 4x>(R/0J kGG=z꯶ڂgYV*l'd" Oz?DT S*$R3cpl#PD(>IXg=F?^7~2$sRmv,hDJNA)6G!T[AkYh] .C]L+=D2^Ek}[N2d SΑH]$yBZU=f$o<ʳKƎևSYAۺ1\xҜJl9e[Ϊ30+9|nVxv/.nNuâᒮjUF]~_s]z6#Cĝw[;K֋nPv:mx12tseC=X9K~3[,"?.YZ;[y9~eo_]w9y9Y_Qh*z; 鑖9(h9Lʺ[?'fYgAk)̚~wHg,mD~ xL*jZusCռP>oו`RfnXS1GhKF 3G+6'OkS\ɯ_qcskwi):0aiϦG~[ YgQ}0gjKw3k{9J!/W )a~>aƯ̙I#̢ r81]N@G6'- KD׶bkDVK|y7t}+<\X^6d};E.%XL=Ȅf7|($lǹ{hI[#wu=ȴή!lHi4cvs$Ub0WHyЄ-Xل;y,\#5IUCratJCTtT)\9:> dihC*n( -W*5=Oy9a8 bNg3`evMONκqKۨgUZSVy?t5<u+aX1XɉL;p1-b呻S(b &F)PL\)"`)^!0`M)Dǧ<>傯^xǧDLĝ$릸`32Tχ&2GTB,;r0 G#5BڰZ *>1Y.Cfqd' $}WVeC2j31Bz@%`LӘ?, "&3jU!d_ {HBHB@ @H;h#2J9_͓s[{ԭo̤Bq hXމelTGnL'ܺz|7L!`!><8lp@A:Xq]uۄ!CɆaܭb[AmR1]H f,J>%]@@oz[B"ܿjnAmO L+*&*ԡm~Ո;~ ٓWۓBCovhu8uyC&KD׍E:L V,: MOO驉hh;Pr.o'g4&ֱPyjxQ*Q="L[i_ӧ4qywEtgzZ.LG5sq@NKxUxk%)8)*t4`ihNFܤ₟R奜 б7 Anj/+~¿"o4`q=a^ي^Ed/!_8aaVDVWn+*cʭr#*ڌk>"\sc7sӺey5\3̩VNvffMv!zp:\\OO_Wz;"B~a |?gy54M+ᖏs^^O9^ ?/Dž`\/q7$|sy_AG'7fO2ϓYo^ӺwĽ\|/ICl ERtn8pw;4\8eSNIq֯X8B֫sAPO€ƫQoltu\y0?4<][\?]+̟,'M(aq.5QJ?dO:ʻڎΦ+|O#N O`Ap?X=ޛ7<ޙ1<=m{=fհVzs3bN붆}y1r,p-y.a169Ժ9;&XKb~ c-;o*IlĖ6K9F6}ldoӂqD6i[]e-&"@k/VJCiP(ӾHm⩈Y<.唿@ne(rg9{w9=ޘu0-^h}%C D\b 1`d1]0 AAXQp.F, FXa .tBtVƆ)ܦmt`m]Lbub#A.6a<:5I]ɷNnW;\`y{kw^TJev MSs֨QTu:0ӰوNÿT* MgභDjkxD dDLa*((WM|u|!H :@D%b\T;-%1اU6NtGT*Bo|x/Lx4:(;pKe5Y8x}%~i,Q݉dK`.qPjOG 2:_,0DW炖O)2Q[aQQ*zJx3"aa=B Xq=X`Dh9xfކ-#Ųi.ӧ4{YM23ΤIٌAEP}EAQYdSVWhulML&tM柚U{[{KQ~@)Qw˳baP g{?Rzu{k%sB=6TzKʒVI9(+/i^ ||hѮ-jEEh$@.&c!=8HY{sgoB1wۣҌ]ZGYh+6u@|CLvH ]wաQ]^oĥ[&p{q 3 m쌈7M%Âd+)}=&-˯ 0ۜtӓ>§y㋴:2Tul!G!᚟w O3/{S?OoGg٠_K{)'(`V\ex2B߷W?3𼌃qp7FgkNnʥszw.,㤙yjel\ѐ[t6\,;I􄕔KXɹtA}Z0 'Nz@e#5|FFd/1ɂu8g4oۜX5Ogiʭ.[h+Ͱftr{Vw5硾{(\ԏKaQ2*>Y*ORaqrsxy'<st.gUVm\Ҙ[1>̤zbqKu5}i}].V-kƯ/d]߳. g=|WU'+ Yj3B隃ip>lֳ>w$̒A͌}|owyٹڙ}|ߛߵn$!ffވyX[LdazǤnoMɶ9NeX8%j\ĀLVЎ1=逺I 1; 㣣 „'d5n==~sՈzеHAW8-!bП =OW)43&NF`ߍ͙iI6Y~ZfXL!@Dg. $:*@;P) Vbi+?04RpN$Ӟ!\yzADZp? p,rrƦ3'MG jaz S/3J LY LboT5 < #)z|ˆw Nr-Ov8˘6THD3v{ҧ+s L\K{Zol:oE:YofBڛiMu-bhub\`1 A=6r0A= 3aAryK򵠖FA@FLLX/ܺ+Q<ϼtnDQˊfͅS ~,Ƈp?n:֯ebZ&3׳{?Q _Bƺ [>6aZr8`q2fED~V mr'ԕ Q'v.yt`,BE*:|0|u::xwثSbMVNlKf ,*M^;`4$;}3v_=LyRk] Ѧ|#* ߯ڛӼ\3.kފ)G}eکJuu\SJ! TӉaC q.IMXN1u7lyY#oχW-&u;mpUʓnqš⪝fg>v.& x;~|9iL;7=_5X{i2e{ŵ]_ϻ>Sڮ~ȚہNL_~~Cݙtςa'EAzg[Q9/-~sqVj9 o"nѻ͢Kf6t+U\xNggʳ~9UL=0LYse3؋O:QK r7wh鼓ua"n|Yok=taBÒ]~)|Eژc[[[Lc#-8b>{8|17RgYGSQ>9GU9ZL8oglP'eN? 6QĒjLH T}G-=[ιH[i؝aC;|}@룾K6&USѧ6vZM{ ߞ8M'>fʿ-}]|^tJ>#02?a;Z_Z>~d͓9+^uG>dzCOۓ'Rx;u\jQ: j^5b A.Tƕ0$Ի4`P/㽭eʘFja.Ѥst )}-):I!2hPH !nQ2E.A) f\vZxy~;Wwή=58?}]X GA1U@($,* <͍#FNޞfk~cpQ),`^l(20qJGt͂L2V'UZ5 DU y fC)2Tb ԪڭINwt+gbB 7%4:fTFhGbι=w*m!TsQJ y4@,61GPDBLC$pD򀕝|_]": Uzȧ8% Gc;7T:-r /#rnf@dv q3ro <; 97Dr:~bhD͆?^x_dY1wodA-2P%3 @'!rs@-`ǭK2 8;U;0y-^^G0H]qq;V^ /Ma|x[9uSߋ˨x1hPĢ 1!*.T%kxh^e<1ĠJKY!wȎ" *A LUIxPI]CTCڷJlZw=6e{ 2K\v9Z&zݯW+u)_u<%aw WE=.. \FN~{qNmK{g,l]ֆF)Q^÷{6]![~=e@?P~0\y5DL1[A[~-c烽AU⡷,|;>şN<L1?ζΟ;d6}r[W{*}sBqoGƓa[œ5ْuXn-}=֕t R{<|c#Xvٔ3|ICP'!źǒrP}cԳ̓6x3da‘!p{4fJ& [k⏆q'dw<՜u6ߞ[@)8]3;S~بTy-B& n4iXkaǕ'Kkۧ&>u}^s/zfg,t+K^=vŋ5Ww#d+`f3 אR\'*7xgqNӍF߽NMDyAy&0oD;q{k7y C-?TכBr}e)֬sۉMfG-q 0Xoܝ&vgW .?1vw)%dYn Y$ȱB9L-AGf &ֵ3V[qyI'e# tH f &A*bi!#"6Gepȹٸ'+I X|4 2VAF0j+HlDI#W)ȟ9M1]u.<.ZeA L^:3Y f00Y 堽ˈE8R/]|/ BZ"99m:P+ @Aұ X4:p;coP 6" qx_u,$ "9p"{'HO^&AxHDM Oa@A^DqEJ6xoP#SRӰ̇Zn 1R\(gi^I2эk[O< YOhQy퉥J[-{2˨ wxJr^F1qAWrQX[K;jbV_l*X(-tPP"Y`Z!RfW:hKjRK~`FcR*9lj9*n<fb*)֠-Ĵ)&Ey#"B~IN9;  @) f3yb2A3pEdL%Hty|\A*KaD>4)ei.tFlza l4o4V[Bf\eiiߞhn?Jƭ6ޜ( ћcu9bo7m5x#ۋCUtqH.:k HbO2k~RF`7UR!}"~6V`J,rU$N +TJ=nm {6. }곥A콡uWEjgaZ:hWs۠ ;OM鬝i:"cњ.cxLhm#tAMvCo+/fy-nPC`C, *j4i"j\[̚͞=$?|33;y=<*yv*M9_a/r\:~eL=_>%)Q[wj՚v&^`Or_ztUۤkU1r {,Qy"J;_K?]`sTƙC2`p,tN]°{n&ˎ#TC^.!x^U />9aHN=uF]Q(.؇|jOGNS]W]yء-viIw^=랉9*ѩثo[yvסŖ<;+a~ յ蛡|*zG nCSqՖXt*\Ɖ{͙;g_9 -~ Û!݅oSqh=Zs1mCGs-:Gns!s2N&Ϫ*QG/NZ=]%.}h:SnȆ,Qo|Sz4uw> 5'/ojޙ_BFʹ̴oŚw?[כpJ4`,{ ģ }MZ͹ Zw\ѝ7F͗u6ֲa.'j!12{ܖ[\6f%h@ T@%d:HP_^bA1&BBt} 8ulCe#)4T#dyJ*PWR @)%B&V{h9ddg6Z(D.7]x5tyʫ63t 4@@" ؿr3DЙfխL& `zMQ)¾4ed?lA̟m\+!KE ? ;'л4V-TɀX!Pyy ft^V Y9P$3#l1)8 @JJHMAȳd,JŁ| \34,VHg`ڨ\0%3&N;NĐ >1=/-Cc'߰`ϞQŭܠPF:,Cq}s.pjQك1)~D z~@Ut"]܀1w & *awf0 < ,h2\#FPpYWhĝY 1U zT 6A4pA7\WQ=Yhe"-5 R4P e*:ل{ORA3xd ցF ^t"zqGҐ8oP&/@6?y3zP'6tE=IFئECbܱU?]<*%\_M][fZ].dh1@HB#I$$  AFQDf`_o(@`mKm[W]ޓs9whin%Vr-ViƬ83gyɂfٹ?]3gF'[c{7[iQ&{n8ɌN6p|mheR`%Vur==;l#\+oD*,GI xOzٹT;%FM29 679LZ }.d {s鮶p9 3GC=̱8s:*`.LFF//| Ɏo?{ugzN18=oOQ7IXK?c#E0&"cĕ wf'+2fW9L_M>zѭShs@|O1D #aF 7TFnuf̧;C? tﷇ߿~1旅{>p1W~;ӗߜ}== ;ts?;d,|[ç9vwFݛg?Xv0*MD/7?F% _U@B1ZEף% Q"VޤPNڜB V;UZ0K")>' ,{,MqmbT|A591UUC- ,D%AV>lOJVR(/-ʲR`UAEi xUU~ &_|QN(fpB`]L3K# f2$qO ,W.vL]=`6{H,\z dlfFU8D?B"`ހzғd@o6@ =b@Afgf&Y:>ŢB~,BAVM  ՙp\ f\Q"o"P|%T tB b㋈Q(%.$4uyNf-D  Fd )G 2-q=YZЉ[F!.jP\@*Ne:|_r/UJ0:M*9XԸ^X,iSj/ ҙ>鷙(UF"8*p4ȬjʉyZo1<#HQ "󣝭>֥BI[ICk8:'i3]Nt:ܤ:r:$ۣ$E̾H'-1&G{?u=@ .b)Mmeh万*L@TQ]h2zQDdUK8"b6S!frJyaBKNry5Jp%IQR(/c~0OD 2E.‹ђW7*ɨ|C.H5;ɀN7@ ]zx;s7xv,XnklF5Xk$ bWÐOf472 {P|V/(es d @4(!dR݁s'z.XNwu.vwQz`!Xvio|ydw.TNpnpdw>\[NW**Wsì)qfSބymj1~,_2{sk$'-WFk8+c')4`o)Xͭk69oYGxi%o&z~+6Z{S37洅+L4Js)ĭ!{#Y(H#OMigu&\D#4S:3x ' n\Іg m&/-S O']'q+eDso)gM]! koBH" * . B0Aqaq\y㛪WwNt*}9$0w]A lk PdkӅJ._-. 0OgU\`f#7kqNY݋!5o^N>s`K[w.1j͝vn|;\uw8y|🥋a\ßF- vD<\<򫏏zۛ?m;[~ɜr^r?geꇕ۷Z]^xǷqܩemlnbMZ4f!mgB JDe35gĎ, B.qjQ; xE#xP!} B]H -X]Ղ^$:r4*C ~ނ\;lrtE!ΰ;v5xqѩAkikث5eUG/gDϦ/}D/"PS%T@'e$J2` + SPNDvŕD^ޠEX#:<-Z3 xf fE{D̃Iv6?l`D@13a[A z_ؔrC\ RK`(QH)" },&SKE,z-Z55UȨJZ}? &`ݗ˵ Y2䫊z9-aQM&dnú'a3Xf?:QFHcjy۽ŚBFت%V*e&(}g~QbR7!tDIDƁ=2-9"UPP=`S.>-㨵B =Ful>I&-JcDюyɨN~ykٚ&7uL[zLe&y\v(xi?>߻zux˞udF:ɥSɃ͉SIū̘ԈzcLT?t{k-֮δNȴ\$ 3IF&UTadzFCzh}"Yy(zC]=4s?\o⻛;glN}S[_>\F5Z!h8m hŁDXCN$Cp<!m M4`7sNlyr4RDSr[SUc~@ bNZ!RS*U uKZl$Z'FwB DἘ$}Q8V=Fr"@_gd4?%9ے~w|1rwtϱo3=;9з^>W69xӄz.]~钇kWT>a^bݞ|Xuo*n:n~"y=\ݺ8siּzc.w2'>g޿66}9tO>/O}ZW_~<8btthřMY!6ƐI*\.lZ8uV ȝ윔e5قubf9jARe$~HBv>BfbEomZX#k}qwh`ԚDGmB[uN;۰P7>G_+-%;:~/zj XdFb`G[^d|V C wzi2Wcq8N A3U%tj']ER(YNtǣ?n?ڙS_YiZ(kVfܺ߯<{y{Ryp6S7>W>8ύ|4scynʆjEb<fwҨc|>&#O)l[L‰&(02!3O{`vB!NM&M z6!t~p#LXSBOظaM1WF]3eʅ㔋$)MQ.l bu{ 9F0zQښbCu-x> ֎C/BKx>&#+L`p d5Y& 8 ,)pU8:,= %4((z t/ΊAFX`F& XiyDkGrqM :\Zh8h|cœ惥brAXwoexiܕ>;R|yTV[>-OVħ҆YyS|-l%۽rۏ{ۭovK+[-ʛ/˛M?lغ.>x^l<ۼpm+.pgX_).^*,4lL%5ORA ="v"_id}KґQD:Ě8/K1 aF)/c>㵙`.M =qS)kA+ԬE<3HL$FhYeE;3suksk[6&5|Lr(OLjKMS՚Q/܇ ,MS4Q8fhm|V4qO ϟOJ[-ۅ隭l4߼tYzQ)7x=G偟nH^.tۿh}/oES/m/._OF}`|}XxIBv1=P.aȥIލSngbD(Ga)ĚD"N '(JhX̱gk Ӣih:I06*K0]OP1B4A' `~;MLܽ^40v+݊{mWQA)ThHqxlFʸm!EIxDȧP 0>"F>ك;F)>$tK Qy#b3gʍ^3>˄ : ,Y7dg52R&I$|jQSST=}$O/NzoIaϭr7 .|)Yo_߹\gp.л>ʅcSwEcKX_[ucл>>g* >pVy'dGv"?[`ĀGa[5^8 cFyHű02,"ٜXG;`_K~TWh*2#RC>-a80,^o,Ap0 ]ҪG˥Rg:ZUߖyG:SxON )<[G2joP{^jN\&j^77P]M#uPLC.ut%2RKdRɢg2b]Ug<h GAM9x^7ZP7eDzf0dlcl˶le-VonuK}vyƀg L$J1EJ.rA%WTr1!UWyIqq嶖>iJIvT/Ǔ6{|[`:۩fuF=C&Q#/خ]DRN.x^5Jm[lsҤQ':GVb$Iy/6E*ߤ/H5/*E!@Bo[QQn/\xpHb;晸]V1kAn~y V)90!Wp/;>˕rSe{'r>w_y@W `ȑSCQMО$DUؑareJE <* $ux1350U]&t P) u–?g {LW ;U h6<9[\Dnm3Y޾ҞRΝUvYZ^F pꢂyOTં hd~pBGݭhiP04Y=OÁgKqs E zf:WtB7i٠u 2rRG&_AF)6)t1|ۛW4jÂU65\e*;oO͙;~>ξ?{_Ͻ>|ʹswrܿbԿb2ʗΥrMjIEGSԩW 0lZ59c\6d:mzVtPsI݀\ y&sx9WMC=q?s1h8Oj:71d6,\_ݼĵ$åpk>BI`'w9)TEou$̺`nGS=;Z٦&0wtiѓKt-A]ecS wk{KWTnh(Vat6-ٸhqJQC8"j* sPQLJ.KT }tP䨋+eb3nة&'"'cT@WYݢ.tn. iܞ^:?~z7?_=j^|uŵ7߼t}*7W?ÓwS÷o/Wx?4SА2llm)lP>&p ʆB,v##=KX_ǹ5pfbucDG܍m{Ñ{|:&ۘP gOa8N_pMayA98iͩ`z3|>{q·U*׭uXLMZ]pO>C]9 "Iu/C~ۅZ%W8綯õJnڎ"-ھLudMJO:\܍9c7Ԅ.D~{`"N;i : ,оZـTs'Y{WMfr.{k]zܩ^~>|{q_2m㼢f%^b˵dYbIWQ$%e";EI\D-Y+K8uu) Eh ?ghbf(7;ۍ_luwZ:sv*GkE{LrL[Kɬв*`w3)$y by^9h3`ڮz<ȗR_5"sV2h2རSV?{x%?pPJR!֊h uxp5x))DN'Asa\t2cܾDY}) q832CA'Th%$QpB624/y=^qگRvJY.RZuۮ ޟFg +"矟R}~zgG{̅gw^lӻ~tSۭ%Y; xпU󭷐Q=O75t]8B/ hrDrl]y4pOorx?}~sW/6xn~?-蟑If yKVNJ:-pBFMcOoE<[IK˿he>ed^yÌ;&+9I$'dZ"S) 5Bsf44G&3 ńL5/hȦ` 59 zrlK wqZh0._ӵ+tmhGhz| v3;r&iɈ2S qF6В O'7ifbo #+u1OghzLp}lFh<=j,'W9xb ց,% kkb$UjD|T ٹZ\dyRD̋(;lrw֛EEyK3xl@'xc 8Q.d+؋veȕNyȕʘel[\q_ƒ>o ~ }@y늗{,7ʦ[~(ܦޗrjgfI7;ux/zCUAݬ@& 9 `A XR$My< m3: zF10af7q„b" z63Am5ImMs/d-/_p6\8w&̡D2 BS%IGfڲ|(T{]sw:kr//\8Y>)*|XI;D1 R R1rm9Y-YA/.D.,t+GI餢,χ`*`r]3<%`OAhdpToqXRyVz^nEp i LPP%9%lG )R zڌ%JQ{^v ~P*wX+߮d+yvSKҴhbaIĩJP'V<&YͫbVCu{ 9e&U몽roF%rU_ wf0'b0Yrr Okߜ]~1hs}zqݮUh#x~c߀vEje ʂ8F~B/d?"^(ʱkx (\[I/x|Nt11io:Ԛ}dJ2#'´z?ݬ}qvt:xȫx d5TŬKFhR[ DžyViYq{,)ѯ!bhtd.BC_%5j޸+V:|~vcO7i{ʷ/_ׇuo~<_E/K w"Nn9lU?Ly<8+Oc>\=;N`3ҒR^@~@@!@A VP|qQ%{ȓu9xYyH'@3f]d%-|} 3L#sM&i)4S̢>o_FCkyF b#Q #i'xTIs%W.+N;n,Y  p',Y$˳S^tj/2l\K*^f:&I%Y@xHi+k񜥥%l#}%5)xB,fU&qF"VvPO C݆yw"seh]/R0"}v;-'UA0A !˯2 ޹@_CUZ:Ѵ]\#%$z9ƩbUij235F$k)/IdJƪV.IYr~>PEj$29D43 β"?aMDpA|[e ̃ʼxR9w|dLb$9 ~L0sq~O?" z|,n 88.D~Xs`wgNynv&8NSxL+8l9xA y<$!rxcqx?R9䇤/FIo+$e7lJSWFmL$uZvtxN!<fZ\Ηt<jI>;o^߾͗GKۣa=imq,6Plq׶j [?Uj5@FZJA¬{#a谺G ȡIت|CD^r( &QQ9*&}=R=WV)3砇wS)Y[cFFaFZfz:kQk \ 16\f0tهo~xWOCd>=_sʑ.=a۴M5LX k&,M2 pBkj|3xƳ|1^ثS]W£Z+측eIC@+CeUUX(e؁cj1ܸty6؎zah!\( _=jwA s藡p|0 nf(~iu6319j}l攩 oW*TBv7Ǐn+ГwYb#xY?/1d6]p7EĸN.'ruUcֽ؏=2ϸz.C]|Ë́Nсr2bs)xI")ayCз ,t,%9~G m-9C:4\1Y|:33o-g@Uhy>>CF%_-OYmT⬗x7{| cS|o&f&u$8=hkEi@Ke&:rF5H\liH 43D|ż>|s(^E2 u$p~.(p!_ިVm˳ywb籡CLZOOo}qѢ}CӅר" FGӹt<&&zt cQ?/乭 '9qi*!pI<<Ƨy%Y ٖlvڱ3U!]EY (PVlkũWҽ|Bvqɪ-"`B S*<;g8_ڛ_?{y묿{iF[ Wlب u񤻮>ܙb<s;Qi '33yn_ҵrXd55 TvAFktsU8۬͒b{ooŋtD\qYR^  Ñ2RUKUxF!fc:%a:=/u˓ӏ:-BHDHa Lkԯ˵19OgsބIb[o9eQ{;,%qƪO ܷ&!aJ$) =1V)' "xBxy7w*a d|9➈^Uw߽2NTWDCLAIUf3sk'j̆/>y|}_GU=d0xxrpw}|3oNe~Ϳ޽,s"퍯jy7O"=gٸb*aZ,bJ*ivPNOQ%Æ$˫lbVlH"1q UpLh!^6/FV^7TχP!/h8'iTKZ[y:BiT ^jhL٫J<}u_B d6,NeZB| `L wk':GɐV4S22NL( )nT] |1/.D' VB~tL@{Cj'2$π thdLɄ6! EF |%O܆y= Y/#-}ݽ=Kwfb0m"l M@e F%TO^2A:X)V=8II` 5< c )ϪvELL֢4m2 X#y𜥽:Zze-#4,̐J9앍n# LACߐ `Z t0E5Y<_vڠ`1ɿl}#.K˓rf; p~_$)3p- G ޻,ݹ=pZ16{Z4b0s ^ =sp?\p`6ے'i} 4)}Ƽ6;hb/љ2eꖫԂULV /z-6$b _=;y|ϼ2ɔ! $=0 D8AᏒֵ#I>BȼQLe/<'>?Ooc  2TQMq3d|~GTb1d],zM藐JYpb:语rU|(2v7q+lWj >1 s/[i^P6ө GrHĿ_:Gzܼjf_1&0)i"xites]IIR$m5D}'oS-zu=d;xԬas/kYJk,x2kgl3T~y+f|?.cmĂNοv;u)kh;aXɲB^< /.qmLXz &v2uc:KYws|pq܋yStk d= p-M8ÿwPpΚyQ8VAxڭ/{A}rTևVU?(A!it"A6AGj1TBSpFkj)fv}Fo)(5@iwQ=0.j?ҤS$L:qMCWTA xU!3yJ*1{|1C\4|k 3CpL7MOZ`ТxMt٤G*ΤO;tԭjWs?g̡F8W0WZPHHM_7 FSؗ4+ER8ȐI}ExʮFIH'4Qw.&b\cQ6jy"E9jYpT1'V(љ{*L ,̄Z<K— ?k?s]Jȗ x#F&QA_,U ܂\W |ǾUoxYA ep zU˗$FUզP+V=6xyY OŬdd-LX׺`F˺Vu%ZF^p8M =ܕߚ"4`a9"3 mov/g,ŠkNwwG=֫![3EASYd)LK,b8f^ј$!3&5jbAmaTia&l@u[htǂ=ژ/ <]9^h6i^6_~pr鳇W^ޟο<7ή~텯?^/u}ruӛ8|/݋s᳓k:~4؃ ` ]ȑxmzONMud[O)1+mFRfl,ґ5OWNp5ld#gr]0 4CLKeSq%2,uMfr<kD SNq٧\}=>]UhuaWC%!q.b4"c1I y/#g#] 7H_\dg6n07g3)aK6vPjG=vФ>-$n/<>Oַݿ͠y̋'w/s[M{-|"|gѳQ(`΄ ;Gd \,3E >,|-,$FׂJ75N)b>% )7MU0T FO=տAz?Np{%Ij5N@NK'S GGi<-_["Ež&P '䘠W~AgJi^T k7,SYnFT|)_ք2V3;tpgGw'U_ߦ~)'JРl31[*fϫ\dXc-dz҉%#ߕ `.Z}הU ے݄ϻV- LɹV1C:fX щx#QxnpQ4 tN#7O :<* 8yjۍ5TƐTSTŨL{STWVvKI~8h/EƉܟ,'iTNՏ.n;U.rFӝ凝܅4G%An5マ螢9kFS77!#A'f2}la\LsMY8A6x58 vTVV% 8 z^92B&ø٣ԉ`^:4:Ġ!0k1ˀ1̸OO}#400HQ u믽pj1,Х@\ȟxV68 S[ﭵ>ڃ7ʣo7;_O~Uu fyQ9]9Y9+yV4mD^3Q+sX}X v>@[~3tj&'<)?A*FC-hĉ6#|7#X๝z?r/<P2#NQ#88LHâ$w ]}FEt,w3Y. 8@VP(Ʉjѯȼ< 7_MV$ : n?fHCI~s@эy a ( /w~/|lj S9%R)r2Fi5BQ[s>x VSȸAwCvthܬnpcjٴF:NnrN2e)1w[Q Aˇ~:BQ Y>@Ν2w;buRzI1?(;G/>s0s91?/`f$wV_o=],ɗLiބG₝1^=oą&fQs^ۍpa_pޭnTH ;ݝru^x<.gc`wC6\=jU|"ݐP8v&}=m " _W՟ еQ kI#zr@1Yՠ9 YmL'Y' vLbWN*9i\ O$I莐%<b7iJQ1lXO/ׇ:E1hwh,r4>^=*8L9=b0(-# Df?W y~^rMEDY" ĸ|B'8Xյן4rx[K [/\˝%n5/|zo X$g#X3YQ%+]JK?9FyfAv)h{r{unR㍂l(;(^t|^/}~Σ,XN%D;1f6$YxUt@3~NSyOҾY}Q垗!hpZi5ֳIm=VyK%b#z${M?%Ɍ0t4O0;`wth|Ɨ.4b/q|l 37U|7؁I׆B/k'&e~YCO#)k`G=W*Լ.lkν ЕEvr6`M9I?Ԫv̡脤3:BU<b.$bt 8' s9JՖc; <s /-Vx^a&W4Ehd -I+W.zh\|PLmryvv:*'Y.u(s9⭉1Сh>،L-N*2xK0/(wT?:J7d~3 iK m ,q>ӓxI.18n:ʼnvFͲ$"zC/z_ʫMBy)۔fλ8,c;=gwe: J?ENԥiB-ՈCԭ=`CߐubuY8Xޢ^Lc49yYDFj= Wt<غKOnm|vodجK"w.ihF.3/g"fmO#>8fTP 9tؙ5⟘0\v Tf蛱Wn߹!īcq5;۶JU_z~o0e;XWO;_5?}wvt_~?|ɟ?_?ڿ}_rO?\ 9;+G>8;mYc^V M9kմNUXo[MaO/~t}w_ݽo~z޿/=ؾӾU۳Î탃aSׯjG )VV䭍-{ǻ/<>^r]a4mo(!8[؊]TڽlAqt: 6'#OOG;jdW꼾 ں%^OVz[33Z*Ԓ>?*ꚑ$5cܪl E[&{]49"9nfpQePHS`T6D- ]; nka 2Fxas1zK!on-a& r.AG 鿣VIigjVU*%rY~?D։"ZCJ̵bYKUfh V-O2 Ks^-ifa~&A|ZBgt{޺o. ɨO N~cR^ILvu\}uL+ rcJ&^729)?L&~ @sN*NL; ڳbW?u?v8nU>笾)5+tڶFC{zw򽭞<=Nwl[դ)M?/1"N Wvڛ63 `W!n g_&\Һ85[ZWVVA@DP+UWfzm6M%eYVɺWke{%[vkw7{`{f/s8=|J5 kRsýuUFSw VǹC]=L~YYx.5wkA*#}nJ4-lDb*ûwWμzZ&d~5;] B"RaVd$yy-ji0zӇ|XQ|e=p~DHd7x=\"@#M>@Npd : Vro4JEfG~dczd19 wf6#X[]@v' jlEl<y DTt R؏@^M(dА82UE0M*N3Tc|'P>逇D(%a('aV8L@t L1OYG9NA,2؍,ʃu{\5uL7ZdVMgsQft:{ֆV:wnkG>UxXLr&]2Ze_{t3r{ |n8Hʳ]$4;tJ1S}g -th 5ÍZ?ZD;ofxc As`%~<ϊzQQ4XجáG1ZzD@XH\> 9(hu`OdCGz_?~ g_rh}dm]^|y\58Tl} 졶taKI-R ]Jx :lb! 2S6yTrqV`+fk)Q}0 pq_]N,aV%/K`'ey2wxn\xr48<QeC[#6+7 Ton_Owow;_.|ソwx w=|</|<3i endstream endobj 5 0 obj <> endobj 15 0 obj [/View/Design] endobj 16 0 obj <>>> endobj 10 0 obj <> endobj 9 0 obj <> endobj 17 0 obj <> endobj 18 0 obj <>stream %!PS-Adobe-3.0 %%Creator: Adobe Illustrator(R) 17.0 %%AI8_CreatorVersion: 19.0.1 %%For: (Felix B\637nemann) () %%Title: (cmyktest2.pdf) %%CreationDate: 09.02.16 17:29 %%Canvassize: 16383 %%BoundingBox: 120 -526 475 -81 %%HiResBoundingBox: 120.459767708002 -525.158701373139 474.820232292001 -81.6511627906975 %%DocumentProcessColors: Cyan Magenta Yellow Black %%DocumentFiles:/Users/felix/tmp/pdf/Channel_digital_image_CMYK_color.jpg %AI5_FileFormat 13.0 %AI12_BuildNumber: 54 %AI3_ColorUsage: Color %AI7_ImageSettings: 0 %%CMYKProcessColor: 1 1 1 1 ([Passermarken]) %AI3_Cropmarks: 0 -841.889999999999 595.280000000001 0 %AI3_TemplateBox: 298.5 -421.5 298.5 -421.5 %AI3_TileBox: 18.1400000000003 -800.945 577.139999999999 -17.9449999999997 %AI3_DocumentPreview: None %AI5_ArtSize: 14400 14400 %AI5_RulerUnits: 1 %AI9_ColorModel: 2 %AI5_ArtFlags: 0 0 0 1 0 0 1 0 0 %AI5_TargetResolution: 800 %AI5_NumLayers: 1 %AI17_Begin_Content_if_version_gt:17 1 %AI9_OpenToView: -156.333333333328 -171.999999999992 1.5 1317 754 18 0 0 78 133 0 0 0 1 1 0 1 1 0 0 %AI17_Alternate_Content %AI9_OpenToView: -156.333333333328 -171.999999999992 1.5 1317 754 18 0 0 78 133 0 0 0 1 1 0 1 1 0 0 %AI17_End_Versioned_Content %AI5_OpenViewLayers: 7 %%PageOrigin:-8 -817 %AI7_GridSettings: 72 8 72 8 1 0 0.800000011920929 0.800000011920929 0.800000011920929 0.899999976158142 0.899999976158142 0.899999976158142 %AI9_Flatten: 1 %AI12_CMSettings: 00.MS %%EndComments endstream endobj 19 0 obj <>stream %%BoundingBox: 120 -526 475 -81 %%HiResBoundingBox: 120.459767708002 -525.158701373139 474.820232292001 -81.6511627906975 %AI7_Thumbnail: 104 128 8 %%BeginData: 21300 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 %524C451B1415141B1415141B1415141B1415148BFD0BFFCA8EB28EB28EB2 %8EB28EB28EB28EB28EB7CBFD0BFFCCFEC6FEFEFEC6FEFEFEC6FEFEFEC6FE %CDFD0BFFA827F8272627F8272627F8272627F82726A8FF14151414141514 %14141514141415141460FD0BFFA1B28EB28EB28EB28EB28EB28EB28EB28E %FD0CFFCDC6FEC6FEC6FEC6FEC6FEC6FEC6FEC6CDFD0BFFA8F827F827F827 %F827F827F827F827F8277DFF15141B1415141B1415141B1415141B1485FD %0BFFC48EB28EB28EB28EB28EB28EB28EB28EB2CAFD0BFFC7FEFEFEC6FEFE %FEC6FEFEFEC6FEFEFEC8FD0BFFA827F827F827F827F827F827F827F827F8 %A8FF1414141514141415141414151414141560FD0BFFA18F8EB28E8F8EB2 %8E8F8EB28E8F8EB28ECBFD0BFFCCC6FEC6FEC6FEC6FEC6FEC6FEC6FEC6CD %FD0BFFA8F827F827F827F827F827F827F827F8277DFF15141B1415141B14 %15141B1415141B1485FD0BFFC48EB28EB28EB28EB28EB28EB28EB28EB2CB %FD0BFFCCFEFEFEC6FEFEFEC6FEFEFEC6FEFEFECDFD0BFFA8272627F82726 %27F8272627F8272627F8A8FF1414141514141415141414151414141560FD %0BFFA2B28EB28EB28EB28EB28EB28EB28EB28EFD0CFFCCC6FEC6FEC6FEC6 %FEC6FEC6FEC6FEC6CDFD0BFFA8F827F827F827F827F827F827F827F8277D %FF1B1415141B1415141B1415141B14151485FD0BFFCA8EB28EB28EB28EB2 %8EB28EB28EB28EB7CBFD0BFFCCFEC6FEFEFEC6FEFEFEC6FEFEFEC6FECDFD %0BFFA827F827F827F827F827F827F827F827F8A8FF141514141415141414 %1514141415141460FD0BFFA1B28E8F8EB28E8F8EB28E8F8EB28E8F8EFD0B %FFCFCDC6FEC6FEC6FEC6FEC6FEC6FEC6FEC6CDFD0BFFA8F827F827F827F8 %27F827F827F827F8277DFF1B1415141B1415141B1415141B1415148BFD0B %FFCA8EB28EB28EB28EB28EB28EB28EB28EB7CBFD0BFFCCFEC6FEFEFEC6FE %FEFEC6FEFEFEC6FECDFD0BFFA827F8272627F8272627F8272627F82726A8 %FF1415141414151414141514141415141460FD0BFFA1B28EB28EB28EB28E %B28EB28EB28EB28EFD0CFFCDC6FEC6FEC6FEC6FEC6FEC6FEC6FEC6CDFD0B %FFA8F827F827F827F827F827F827F827F8277DFF15141B1415141B141514 %1B1415141B1485FD0BFFC48EB28EB28EB28EB28EB28EB28EB28EB2CAFD0B %FFC7FEFEFEC6FEFEFEC6FEFEFEC6FEFEFEC8FD0BFFA827F827F827F827F8 %27F827F827F827F8A8FF1414141514141415141414151414141560FD0BFF %A18F8EB28E8F8EB28E8F8EB28E8F8EB28ECBFD0BFFCCC6FEC6FEC6FEC6FE %C6FEC6FEC6FEC6CDFD0BFFA8F827F827F827F827F827F827F827F8277DFF %15141B1415141B1415141B1415141B1485FD0BFFC48EB28EB28EB28EB28E %B28EB28EB28EB2CBFD0BFFCCFEFEFEC6FEFEFEC6FEFEFEC6FEFEFECDFD0B %FFA8272627F8272627F8272627F8272627F8A8FF14141415141414151414 %14151414141560FD0BFFA2B28EB28EB28EB28EB28EB28EB28EB28EFD0CFF %CCC6FEC6FEC6FEC6FEC6FEC6FEC6FEC6CDFD0BFFA8F827F827F827F827F8 %27F827F827F8277DFF1B1415141B1415141B1415141B14151485FD0BFFCA %8EB28EB28EB28EB28EB28EB28EB28EB7CBFD0BFFCCFEC6FEFEFEC6FEFEFE %C6FEFEFEC6FECDFD0BFFA827F827F827F827F827F827F827F827F8A8FF14 %1514141415141414151414141514145AFD0BFF9BB28E8F8EB28E8F8EB28E %8F8EB28E8F8EFD0BFFCFCCC6FEC6FEC6FEC6FEC6FEC6FEC6FEC6CDFD0BFF %A8F827F827F827F827F827F827F827F8277DFF8B8585618B8585618B8585 %618B858561AFFD0CFFC4C4C4CAC4C4C4CAC4C4C4CAC4C4C4CAFD0CFFCECE %CECFCECECECFCECECECFFD04CECFFD0BFFA87D7DA87D7D7DA87D7D7DA87D %7D7DA87DFDFCFFFDFCFFFDFCFFFDFCFFFDF2FFC3C9A1C9C3C9A1C9C3C9A1 %C9C3C9A1C9CAFD0BFFA88383A8838483A8838483A8838483A883FD0CFFA8 %7EA27E7E7EA27E7E7EA27E7E7EA27EA8FD0BFFA8527D527D527D527D527D %527D527D5253A8FFB58DB58CB58DB58CB58DB58CB58DB58CC3FD0BFF8311 %121112111211121112111211121112AEFD0BFF2929282928292829282928 %29282928294DFD0BFF7DFD10F87DFF8CB08C8D8CB08C8D8CB08C8D8CB08C %8DA0FD0BFF591111110B1111110B1111110B1111110BFD0BFFA84D222901 %29222901292229012922290153FD0BFF7DFD10F852FFB58DB58CB58DB58C %B58DB58CB58DB58CC3FD0BFF8311121112111211121112111211121112AE %FD0BFF2929282928292829282928292829282953FD0BFF7DF8F827F8F8F8 %27F8F8F827F8F8F827F87DFF8CB58C8D8CB58C8D8CB58C8D8CB58C8DA0FD %0BFF5912111111121111111211111112111111FD0CFF5328292229282922 %292829222928292253FD0BFF7DFD10F852FFB58CB58DB58CB58DB58CB58D %B58CB58DC3FD0BFF8311121112111211121112111211121112A8FD0BFF29 %2928292829282928292829282928294DFD0BFF7DFD10F87DFF8C8D8CB08C %8D8CB08C8D8CB08C8D8CB0A0FD0BFF5F110B1111110B1111110B1111110B %1111AEFD0BFF4D01292229012922290129222901292253FD0BFF7DFD10F8 %52FFB58CB58DB58CB58DB58CB58DB58CB58DC3FD0BFF8311121112111211 %121112111211121112AEFD0BFF2929282928292829282928292829282953 %FD0BFF7DFD04F827F8F8F827F8F8F827F8F8F87DFF8C8D8CB58C8D8CB58C %8D8CB58C8D8CB5A0FD0BFF8311111211111112111111121111111211AEFD %0BFF4D22292829222928292229282922292853FD0BFF7DFD10F852FFB58D %B58CB58DB58CB58DB58CB58DB58CC3FD0BFF831112111211121112111211 %1211121112AEFD0BFF2929282928292829282928292829282953FD0BFF7D %FD10F87DFF8CB08C8D8CB08C8D8CB08C8D8CB08C8DA0FD0BFF591111110B %1111110B1111110B1111110BFD0BFFA84D22290129222901292229012922 %290153FD0BFF7DFD10F852FFB58DB58CB58DB58CB58DB58CB58DB58CC3FD %0BFF8311121112111211121112111211121112AEFD0BFF29292829282928 %29282928292829282953FD0BFF7DF8F827F8F8F827F8F8F827F8F8F827F8 %7DFF8CB58C8D8CB58C8D8CB58C8D8CB58C8DA0FD0BFF5912111111121111 %111211111112111111FD0CFF5328292229282922292829222928292253FD %0BFF7DFD10F852FFB58CB58DB58CB58DB58CB58DB58CB58DC3FD0BFF8311 %121112111211121112111211121112A8FD0BFF2929282928292829282928 %29282928294DFD0BFF7DFD10F87DFF8C8D8CB08C8D8CB08C8D8CB08C8D8C %B0A0FD0BFF5F110B1111110B1111110B1111110B1111AEFD0BFF4D012922 %29012922290129222901292253FD0BFF7DFD10F852FFB58CB58DB58CB58D %B58CB58DB58CB58DC3FD0BFF8311121112111211121112111211121112A8 %FD0BFF292928292829282928292829282928294DFD0BFF7DFD10F87DFF8C %8D8CB58C8D8CB58C8D8CB58C8D8CB5A0FD0BFF8311111211111112111111 %121111111211AEFD0BFF4D22292829222928292229282922292853FD0BFF %7DFD10F852FFFFCACFCAFFCACFCAFFCACFCAFFCACFCAFD0DFFAEFFA8FFAE %FFA8FFAEFFA8FFAEFFA8FD0DFFA9CBA8FFA9CBA8FFA9CBA8FFA9CBA8FFA9 %FD0CFFFD10A8FD56FFA9FDFCFFFDFCFFFDFCFFFDFCFFFD9DFFA8FFFFFFA8 %FFFFFFA8FFFFFFA8FFFFFFA8FFFFFFA8FD05FFA8FFA8FFA8FFA8FFFFFFA8 %FFFFFFA8FFA8FFA8FFFFFFA8FFFFFFA8FFA8FFA8FFCAFFA8FD05FFA8A8A8 %FFA8FFA8FFA8FFAFFFA8FFAFFFFFFFA8FFA8FFFFFFA8A9A8FFFFFFA8FFA8 %FFFFFF7C27527DAF7EA8527DA8A87EFF7E53A9FF525227525384767D84AF %7D52527D7D522776527D525252767DA87D7E7DA87D7D525227A8A8A87D7D %5227527D272752A8777D525252FF592727277D527D7DF8527DA8A87D52A9 %A87E525227527D5352A9527D52587DA8FF2751515252A87D7D277E7EA87E %A8277D7E52277D277752FD047DA9522727522752525227525252277D527D %8484527D7D7D52277DA87DA87E52F8522827F8527D52272E7EA8A984F827 %F85328A8282751A87C7D527D7D7D2827285252A9277E59527D7D7EA8A8FF %5227FD04527E8427527E7EA87D27538453FD04527D527E7E7D537D517D7D %52517DFD07527D53A87D7D59A87DA8277C7D7EA88452277DA804FD042752 %52AFAFFF7EFD0427528459277C7D7D597D5252527E7D7E277D7D527E527D %7D7DA884FFFF0452277E7D52277D27277DA87D7D5252527D5253F8512752 %7D7EFD05527D27527D5227522752F8527E527DA87D7D527DA852277D527D %842704525327F827527D2727277D537DF8272727527D5227527D527D2759 %84A8597DFD05527D277D5284A87DA8FF272752FD047D5252277DA8A8A87D %27A87D525252277D53FFA87D537D527D5952527D52527D7D522727A8527E %A8A97D7D52AF52527DA87D7D522727A82727277E7D7DFD0552272728277D %7D7D057D7E5227A8A8AF84A8527D2E5227A852847E7DA8A87DA8FF275252 %7D527D7D7D5252527E7DA852515384275227275253FD057D52527D27527D %76277D527D27527D7D7DA8847D767E7E7E277DA87E5252F8275227F8527D %7D7D527D7D7D52F8272752527D2E275284277DA8FFA8A87D7D522EF8527D %527D7E537D7D847EFF2727767D7D527D767D27527E7D7DA8527DA97D2727 %2752527D52A87DA852527652527D5252527D7D7D52A87DA8A8A87D7D7DA8 %7D2E52A8527DA8272752F82752A9848452A87D527D270427527E52270452 %277DA87DA8FFA8A9527D5205527D527D527D527D52A8FF2752275227FD05 %52277D7D7D525252847D52F827527D537D527D5252277D27525252277D52 %7D7D5252FD047DA8527D7D7D27527D7D7D84F82727F804527D7E52527CA8 %27522705F87C7D52F82704277DA87D847DA8A87D5252F87D59FD04527D52 %7D7DFF522752275227525276527D51527DA852527D7D7D27277D76FD057D %76527D52277D2752527D527D52527DA884A87D587DA87D5251A87DA87D52 %2727F85152A87DA7527C7C7D5252F8277D7D52270527527D7D7D84A9A8FF %53A8522752527D5952A87D7D52A8FF2727517C7D7D4B524B764B52272752 %7D277D7D7D2727527D7D7D7CA1527D27522752522D5252527D527D52FD05 %7D527D7D7D272D7D7D7D52272D270527527D7D7DA25227527D2727055252 %7DF827527D527D7DA8A8A87D7D7D522752277D527D527D5252A8FF272776 %527D527D5252527D2752525227522D7D7D7D2752527D7CFD047D52275252 %7D27FD04527D7D52FD047D527D7D7D527627FD047D2D04522727FD067D27 %7DA8530427277D5227F87C52A77DA884A8A8A87D7D27272E7D7D7D527D52 %7D52CAFF2627517D5276767DFD045227527D52F827527D52272752527D52 %7D527D52520427525227524B52527D52527D7D5852527D527D5251527D52 %7D2727F827277D7D7D527D7D527D7D532705527D52F82727527DA87DA87D %A8847D52270452527D527D5252527DA1FF2727527D7D52FD047D52527D7C %7D767D275252522727527D527D527D527D51272752515252527D7D7DA752 %7D7D7D527D7C7D527D27527D7D7D522752F8FD0452A87DA8527D7DA82752 %527D52272752277D7DA87EA87DA87D52275252527D7D76527D7D52A8FFF8 %FD04527C7C7D527D7C52275251FD055204272752527C5252527D5252F827 %2727527D527D527D7D7C517D7DFD04527D7C52277D7DA85227522E277C7D %7D5252527C7C7D522727525252F8525252FD067D52A852272776FD045251 %7D527C7DFF27277C527C527D7C7D527D52522776275251527D7D2727527C %527D527C527D5227272E277D76527C52527D7D52527D7C7C527D7C7D522D %52A17D522752527D7C522727272D277D7D7D2727527C27275276527D7D7D %767D7D7D527D2752527DFD05527D52A8FFF827527D52525276527D527652 %272752275227525252F852767C527DFD045227272752527D5152527D527D %5252517C5252527D527D27517D520027517D7DA82727F8272727517D5227 %F85251272752277C7D7D767D527D52522E27FD04522752527D52527DFF27 %277D7D7D527D7D7D7C7D5252275152522752527C5227527D52A27D7D527D %52522752527D5258527CFD047D52585252527D52527D7D27522727275252 %7DA17D27272752F876767D2727525227527C7CFD047D527D7D7D76522752 %517D5252527D7D5252A8FFF827527D5252527D527D527D5152277C525227 %7C5227F85252527D7D525276522727277C527D5252527D527D5252277C52 %7D527D527D7D522727F827275252A17D27F8275127275227522752272751 %7C527C527D5252527D527D272D5252527C527C275252527DFF27527D7D7D %527D52FD047D52525227FD04527D5227277D527D527D7C5252522752527C %7D7D527D7C7D525951527CFD047DA77D7D52522727F8527C7DA77D2727F8 %5276FD04275252522752527D527D7C7D7D7D527D5227277C5276527C5252 %527D52A8FF27527C7D527D5276527D527C27525227272D2752527D275252 %7D527D5276527D27272752527D52527C7C525227525152527D527D7D7D52 %7D52FD04277C76A1525227F8277CF8F8F827277C272751525152527C517D %527D527DF82752525152527D2752517CA8FF5252A17DA77C7D527D7C7C52 %52527D2D522752527D522D277C7C7D527D7C7D7C52275252A77C7C527D7D %7D5252527C527D527C76A77D7D7D52272727764B52A1A8527C04527D52F8 %27F852525227527D7C527D527D7C7D527D5227277D517C527D7DFD0452A8 %FF27527C7D527D527D527C52524B52522705522727527D2727277D767D52 %7D527D272E527D527D2D7C767D7D52275227FD04527D7676527D0027F827 %20524B7D7D52522727762752F827F8522727525227FD04527D7C7C525204 %FD04527D527D2752527DA8FF52517D7D7D527D527D5276527C5152522727 %52277D7D522727527D767D527D7C2727527C7D7D7C7C7D5252272D525227 %7D52A17C7D7C7D2727F827F827F8537E84527C27524B2D5227F8FD04277D %5252527D7D7D527D527D5227527C527D7C7D5252527D52A8FF27527676FD %06525152514B517D272727527DA12727F852527D527D527D27275276527D %527C5252275227525227277D527D7C525252F827F827F8F8F87E7D7D2727 %5152F827F8F8F8272752527C2752527D527DFD0452F87C5252527C52522D %7D527CA1FF5252A1527C517D527D767C2776527C517D275252A77D522727 %517D7D7D527D5227287C527D527D7D5227FD04527D2752FD047D527D7D27 %F827275227277D847D59277CFD0427F82727527C7D5252517D527C527D51 %5227277C7D277D527C7D52527D7CCFFF5152527C5252517C7C7D52525276 %527652522752765227522727527D76525252F85252527C52527C27522752 %52522752277D527D7D52527D2704F8F8272727597D7D527D7C27F8522704 %F8274B7D5252517D5252275252525127277D522D51525276275252527DFF %52527D527D527C52A17D7D527D527D52525227277D7C52272D057D527D52 %7D27272752527D527D527D52522E7DFD05527D7D7D527D7D52F827F82752 %27527E7D7D527D27272758F82727527C7D522D7D7D52527C7D5152275252 %7C27527C7D522E517D52A8FF277CFD05527C527D7676277D7D7C277D5127 %527D272D27055252527C2727F852527D275227527C522752517C52522752 %527D527D527C5227F827F87D2727527D5953275205275227F827277C7552 %277D765227525252512727525251527D5252275252527DFF527C52525227 %52527D7C7D525251FD047D7C04527D522752F828525852522727277C767D %27527C7D52522D52527D5252277D7C7D527D527D272752522752F87D7D7E %53582727277D2727277D7C7C27527D7D277D277C7C52057C5252277C527D %5252527D27A8FF277C2D5251522752527C527D275176A827525227277D27 %275127005227525252F8527C7D5227527C525251512DFD06527D527D527D %2E27F85252FD04272E272E2727F8272727054CA1CA5228277D522E27522D %520527527C515276525252274B512DA7FF522D52527D277D7D7D527D7D7C %27A77D52527D27275252277CF8FD0427522705527D527D277D5258527C2D %5252522E7D52FD057D5227F82727762727052E27522E532E525252272E2D %52A17D5252527D5252275227272752525251A1527C27274A5227A8FF272D %277C2D27527C5252277C5252527D51525252265251275127F852272D522E %F827527D7DFD05522752272727522727527D527D527D2727F8272751F82E %5359537D5228277C7D282E832E764BFD055227522727F82752522751FD04 %52275251527DFF522752587D27A77CA883527C7C51A77C7C527D522752A7 %27522727527D27A8522727527C7D52A77D7C2752272D27522752277C7D58 %7D7DA7A1272E52A752275353527E2E270527052E052759847D52277D7C7D %7CA75852522727A7522D27FD04527D525251A8FF272D275252527C7C7DA7 %517C51527C5251587D52F8527C27517CF85258277C58F827277C7C7C7D83 %7C52275251520452512D277D587C7C827C2DF8767D52F87D287EA2A82805 %05270505F8272759517C587C585851582D5204277C82517C517C5152277C %27527DFF27275251587C837CA77D7C7C83527D2D7D7C7D7C2727A7277C82 %27277C5283515283FD04A7AEA7835983A77C2727527C52527CA77C7C587C %2D2752A75227A2A8A9AFA8A92827052E052705527D7C577C58585158577C %5758527C58FD057C5852517D58A8FF2751515851FD047C837C7C7C52527C %7C83587CF8275827528227F851827C2D27A783FD05A77C5958AD832D512D %272D51A77C837CA78252F8277D52F85252A8A8A8A27D282805270505057D %587C57827C827C827C827C827C827C7C7C827C5851525752A7FF5251582D %52527C5882587C7C83527C7C837C8358525158277C7C7C2752517C2D277C %8383A77CA77C7C5252517C2D2D2752517D7C827C837CA7522752CA522727 %5252A8A9FF7D2F2E2E0527052E7D827CA77CA77CA77CA77CA782A77CA782 %A77CA77C8283A8A8FFFF2D7C27272D7C7C7D7C837C837CA77C837C837CA7 %7CA7512752A77D837D837D7C2758527C527D7D837C835252527C04272D58 %7C827CA77C7C7C52F852A7522751274B4BA8A8A205270027F8050583587C %587C517C517C7C7C577C577C5158515858A783A87EA8A8FF51272D2D5251 %7C587C587D587C587C587C587D7C837C52277D7C7C587D5858582752AE83 %AD83A7A7AD827D58AD58275252518358837C8383A72D2727A8767D525151 %527DA8A959F827F827052E83827C7C587C7C7C577C587C577C577C51587D %A87EA8A8A87DFFFF2727275227512D512D512D512D512D512D2D2D512D2D %2752FD04585151517C272D83A782A77CADA7A758587C7C042D27582D2D2D %51272D522DF827767C2E764B7676777DA8A1520005F827278351582D512D %5851512D5151512D587C7D7DA8FD067DA8FF512758517C577C5858577C58 %58515857585158527C57827C827C837C7C7C827C5205A883A782827CA752 %522D52275252522D58587C577C5152272751CA527D53524B767DA169A1AF %2E00272752837C7C7C587C7C7C5158515252FD07A8A2A8A1A8A8FFFF5152 %517C7C7C577C577C577C5858577C577C587C577C587C587C577C5158517C %5127515851582D585751272D272D27522D2D51585157517C51272D527D7D %524B4B4B44764B4A6FA9A82EF827597D2D522D525158515852FD077D597D %537D537D7D7DA8FF5251512D585158515851512D5857582D582D51515851 %5751585158515851582D58275251582D582D522D5127272D2D277C57582D %585158577C587C52775377456F4B767D7D444B7DA8A95205847D7C587C52 %7C527DFD06A87DA8A8A87DA87DA87DA8A8FFFF27512727262D272D27512D %2D2D512D2D2D512D512D512D5127512D512D51FD042D2E512D5151512D58 %2D2DF8522D52525851585158577C517C575227522727F876526F4B4B204C %527D7D537E83515152A87DA87DA87D7D7D7E7DA87DA8A8CFA8CAA8A8A87D %7DFF7C587C517C5258587C51522D58587C51585158577C51582D522D522D %585158517C2752515851512D587C7C51527D7D527D7D847DA883A7525857 %52527D522E062E4B524B6F4B4B2753537DA1A9597C527D7D847DA8A8A884 %A8A8A87DA87D7E7D7E7D7D5352F87DFF577C587C58837C827C827C825782 %7C7C58827C58577C587C577C587C7C7C7B7C57582783587D7C837D837D7D %7C837D7D7DA77CA7A7A751272D827C7D52532705050C05270528060C0559 %847DA1FD08A8CAA8CFA8CAA8A8A8CAA8A87DA8A87D52527DFF58577C5758 %517C5158517C5157517C7C83FD047C577C7C827C82828358827CA77C2D2E %FD06272D2727275252A77C7D52587C522758588352275259052E274B0505 %0427272705274BC9A8FFA8A8A8CAFD09A8FFA8FFCFFFA8FFFFFFCFFFFF57 %57517C5158515851582D7C5158577C587C57827C827C827C7C577C7C8257 %7C7C822D2726270427F804F827F826F85258582E59515251527C7C5751F8 %2D5305529A6828052E4B452005F87CFD07A8CFA8A8A8CFA8A8A8CFA8A8A8 %CFA8FFA8CFA8A8A8FF7C5882577C587C7C827C82FD047C587C57827C7C51 %7C5858587C5758517C7C7C57827C7C27A62D2751837C7C26277C7C7D7D7C %A727527C827C822727277E277676942727274B4C4B4B52527EFD0DA8CAA8 %FFA8FFA8FFA8FFCAFFA8FFFF575851585157517C5857517C517C587C5758 %577C577C2D2D275851582D2D27512D2D2D512D272D52527C577C5851F852 %7C7D2D58527D527D7C837C27042752274B767627040527524B6F4B7D7DA8 %7DA8A8A87DA87DA87DA87EA87DA87DA87DA8A8A8A7FD04A8FF7C57572D58 %517C5758515851585158515851582D58577C517C517C577C7C7C57827C7C %587C512E537E597C517C7C27277E5851275252A8A87C577C2727277E0570 %6F9A2705274B456F4B5259A884A87DA87D7E7DA87D7E7DA87D847DA87DA8 %7DA884A87DA87DFFFF2D572D5151585757272D272D0427272D2D2D042704 %2D26270427262D5152517C5158262D517D7D7E5252537D527D527D8358F8 %282727527DA77C5127F8277D7D28A17D7E5277777D4B527E7E7DA87DA87D %A87D7E7D7EFD077DA87D7E7DA8FD047DA8FF585158577C5852272D2D2D27 %522D2D2D52272D272D27515158587C587C51582D522727042D5284535252 %A8A8AFA8FFAFA928FD04277D76FFA7A72727277DA8FFA8FFAEFFFFFFA8AF %A8A87EA87D7E7DA87DA87DA87D847DA87DA87DA87DA87DA8A8A87DA87DFF %FF27515151262D2751272D2D2D272D2727042D2D515151577C515851512D %51272704270427F8522E5252A87D8484A884847D52275227527D7C7CA8A8 %27F827537DA8CA7D52527DA7A87DA87D847DA8A8A8A1FD0BA87DA87D7E7D %A87D847D7DA8FF58517C5158517C585851582D5151522D2D2D5151585152 %515127270527042727270427272D522E7D7E7DA87D7E7D84FD057D7C527D %7CA1A8A82727047D52A8A852F827F87DA8A87DA87DFD1AA8FFFF51522D52 %51512D585151517C51515152515151585158517C512D272D262D272D0427 %265151272E7D59FD057D527D537D7D7D527DFD04A85227F82752597DA852 %2704272DA8A1A87E7D7DA87DA87DA87DFD05A87DA87DA87DA87DA8A1A8A8 %A8A1A8A8FF7C767C527C527C587C527C527C5276517C517C527C587C7C7C %517C5158517C5158517C587C277D7D7D52FD087D847D7DA8FFA8FFCAA827 %2D2E7E7DA87DA85252527DA8A8A8FF7DCFA8FFCFFFA8FFCAFFA8FFA8CFA8 %FFFD08A87DA87DFFFF527C7DA17676527C515251525252517C5252515852 %58517C5158517C527C527C57FD047C7D537D5252277D527D527D59FD047D %A8A8CFA8A8A852277D7D7EA7FFA827F827F859A8AE8484A1CAA8FFA8A8A8 %CFA8A8A8CFA8CAA8CFA8A8A8CFA8CFA8CFA8A8A8FF7D527C527C7C7D7CA1 %7C7C7CA17C7C527D7C7C7C7D767C767D767D767D525251FD047C83FD047D %27527DA87D7C52FD047DA87D7D597D7D7D282752A12E7D7E7E5252525353 %847DA87D767D53525953595359537D7D7E7D7E7DFD04A8FFA8A8A8CFA8CA %FF527C525252A17C7D527D767D767C7C7C527D52527CA77C7D517D76A17C %7C767D7C7C7CA1597D597D5252527D7D7E7D7D537D527D7D7D537D537D28 %2728524B5252A85227272E2727002E4B7652A87D7D537D5253537D535352 %532E5352A8A7A8A85952CAA87DA7FF7C5276275252522752275227522752 %2E5227272752527D527C7D7D7C7C76A17658527D7C7D527D5253527D537D %597D59847D527DA8FD047D535227FD067D52275227282727527D7DA8A8CF %FD05A8FFFD04A8A1A8A1A8A8A87DA27D7EA8CA7DFFFF272E272727282727 %272EFD0527282752272D2752272E272E2752272E272727522E5352532E53 %2E5252592E535253527D277D7DA8A7A87D7D527D5253527D527D7D7D597D %5252527D525952FD107DA87DA77DA8A7A87DA7A8FF5251585252277C5128 %2752512727522752272D272E2E52272E27522752275252535259537D5253 %52532E5252522E53527D52525253527D597D527D527D5253527D7D7D5359 %525952525259527D537D7D7D53FD047D7E7D7D7DA87DA8A8A8A1A8A8CFA8 %7C52A8FF7D7D7D7E7D7D527D5252527DFD0852515251522727275252532E %5352532E5252522852282E272E272E272E52532727272E282E282E275227 %5227FD045259527D7C7D52527D7C527D527D537D597D7D7D53FD067DA853 %7D7D7DA8A87C7CA7FF7D597E7D7E7D847DA87DA87D847EA87EA87D847DA8 %7D7D5252527D7D845259537D537D535352535259527D52532E522E522852 %2E522E532E53527D52522752527D7D7D5259527D5252277D527CFD05A8CA %A8A8A7FD0AA8CFA8A87DA776A8FF7DA87DA8A8A8A1A8A8A87DFD08A8CAA8 %A87DA87DA87DA87DA87DA87DA87DA8A7A87DA8A7A8A8A8FD047D597D537D %527D537D7DA87DA87D7D7DA8FD047D52535253525228527DA87DA87D7D7D %A87DA87DA87D7D7DA87D7D52A8A8FF7D7D51527DFFA87D7E7DA87DA87DFD %07A87DFD04A8CBA8CAA8A87DA8A2A8A8A87DA87DA87DA8A8A8A7FD04A8CF %A8CFA8CFFD06A8A1A8A7A87DA87DA87DA8A8A8A1FD05A87DA87DA87D7D7D %7E7D7D7DA87DA87DA87DA87DA87DA87DA8A8A87C7C51A8FF537D597D537D %59FD047DA87DA87DA87DA87D7D7DA87DA87DA87D7E7DA87DA87DA8A1A87D %A8A8A87D847DA87DA8A1A87DA87DA87DA87DA87DA8A8A87DA87DFD09A8A1 %A8FD057DA87DA87DA8FD047D597D7DA87DA7A8A8A87D525227517DFF %%EndData endstream endobj 20 0 obj <>stream Hl9% DW=#&Z AIn%dfix8-Ci}jcqμ-FkƒNulՒ.ub]\s9>~bų^?;~gzХ8yFe9Sw,.3+~c9J!kYyYV|jg,#zup%u )+Ƣ>T)s=ȭ[|l7:ETϿ;IJ&s'-Պ >EQHjU88tRyV22<+TL3i[D16Boۋ<)度_\kI& @զd`T;ߜ Ф:~RUpXؤ59k+^M܎2*(:=fT-fS:,r`I*2}hM`ՠҲʞĿ[$Gc: ۜ Q̩A.,bW3Y_*EM,R~le1t@84 /!z*P0#@^a!OT fNx=mPnS4U06nэ;[ *w.X8]Tn} u{_cQrz{4at25֡gx,N>3I(Er^q+!&PmުySi^ 0t z,PH2Rh9;l8DЅ 3@3lڞZɆuGc3zmuw ,MadכzމJb"o}Cm853JBB8X_, GQg (+u+xiYѐ0ma۲ؽ-u~CmBQڌ8 +Ecp\q_B-7չv܎|lL]R.Jk+gت`euH8F%h-܋kahXg S2O j㬶zQkhʁS Fl)L TS&MU0Zr(.֛bhp,+ʁK^R\Vz=k 3-EC[Ȃ&,v\;XDO0La!ʼn0%k! nmp ԡjӵ9c3;:(PajZ`09_8m9!4M#2,zff{&H,nnUeiKu-C)R[R f&VӰq#Z)[#!%!؈(VIQX @ղWY&#)mj6Ȱ&ՠ:&M:[?b=,!`>+mBu4%/ԙRUHP8J~[ r Ms9GPDY:)<" PJJܨSN 1}8ڊ=(ۏX>b<(aju/wr` &D,f]p<r*8e[rB}o]X5Ve{!&٣(`e*PNGämTz䒝#[ԩ-luj_nH!W8mX )l7U$,MԀXN:UBkOtΏ['#Wēbbi;s 2!Ԏz7+]}4XH0Se7DA)3=I.lw`+2Nܩa=0Bʹ+24bRO]v_ /Z sp#&0ґ`rWj-Qvh6c 82"G'CPˌ09H9ct3-bwduKodWIFRU#:vCF=hYzOMt02!7nׯ)MD|>!Tu6L# zRt)|c0zApvOyndFrgި8g׀(} U8Ye!Dh,H\ϺdDlYj{'R -!4/;?ԓa vKA`P&='읎Lk{Gc@Ǵ&=`d!Y) 'm^ҞZԶ5d6R"9.x2ބ]|Tw:_%.F1$Yl>f@x# 8Qz5`!5qQjfr18sޒ_ak ^v;a6JDpd$-TuF>jOhPwG\Q"Tb, mMDʳ yΩė%J(Fpƺ#61v.N NV"dt")ͻw@u Q&dX46z6]BvCYq(^~X1M{dC$.BW}  t8m^94rtƔdS1LEl<ٝ;- !^>e'Pr>@ƁeUb:9`ŭӶ)D2SvT_ބֆȻ͍W"aYbmtӅw"e!މQQmGUQPM6UۛAfBD AB}D^E.pZ.mڢ*[Lknr¿I=<Ψ>#;UBQ-HRmD:8ϗ3_7bSK}ɪG>kD2D0{{cF"=@(: 0sR_y`Bŀvy%1i(lO!{Pڛ[FP :vNj_,7S=i0jCxmyD>rtco [~l$K_7/F'@-N-NK 0M 4^&Ʃ]P,$h|y#,2toIk:2%`l`Mdn"2MVZ16Z"'65ђPPF 5CF+ggl(M΋:8豇G CXBչ`ƴ9zܭAcع SC*0X;GEi.|G)˩<SQZA%B .̯h: 0mV"7*l"Q.xdrE sqkVF,q&jbOeș6AD1 >j FEn x =JY);U~~O?| =M ܵ?>w~_>~GW?-Tί_~__-$>Sz]k<~c6۠(Ms 88zb%z=Œ-OQ5@"D CXv4Vr Fdm:d"1 Vfv"6fƉj*X3bDSIDU_:|qԽFK@.1]!XAP m;1N˺pV-|#5IЃAuJvKCӍ/T}3LfYXg˻kJXiYzGuVlxmN 1]1~ =Or%(vq  vV j)^'0~_YEP3pbJkEC=v2g3_LC-M խ:DKGOFF>lp<#RӾC!}(kӢ%)i@@^Za,*NTUP( Kc@XO  §MT*Pމ2{v@d:JA0ѹ2q'fV ŽCBYwCDUr#y!2ԶJrCPPί9CgTzW;tU7 եp"SN Lɛ '(:V%OD|\owx ? ehsC{/ed~-#Jn[x˳/VNWTU5gOWu 'O|Y]X HAݰ;aEOP̓|N 3-xF򗆞ۛ>V!"G3!3)ݸ%.GaA$xfOߝ>PdcVSnEh`7Hq2?ٮG(hx'}dz2(m!% h9crAG=7#| 嬶_?[אHw"4w:z~C@P!F?IMuAR)gU+!+DƁоjl*+ddcVi$5F|\k GDJ7y0CD3{Q)Xל]WmjI.SX׃3hBEG R@F,~owz#Uy41"F ĮחJkb1G4S[;q3Ǥ ҡa<z$t$݅go#u8`%=ahqѰdbfO^oa~ʞ |:îÌ=Zu('Qz]dkSgtDD!I@b y;]5W55_=N- ћo&T*!ܰXsP@ ZqƠ\'}?j2BNA݀vca':jL:}E-Za8E Dbzz6{R%xބ૬$*3NÖeH Aͽ'4 r¹)W貴!`G_,5Vw' [Ь0o;jY!58:0ׇSfO" a@eӳA:/4FsLզ'g_EG0mEM@Q2aKG Q+5P:ʄ:.x']zƹ(ącS:EY1Aјhǃb$7#::D>u#nĝ+Ϡ+_,KxeUCaԢ -S=^]G&_/2Pt`B3~.Ms+(hdN\DӟDHȖ+HоNﲞL9 !g  h{Ln;~"r|7 QK>Ҫ0֬qQTo2^yP' 7Wխ-lǜeENCв &Hu&Cؼ;HR|`w '}WEVaP0ϰ{(d-/,>kqi|C!ܣ{R a/IT=8@aΉ!jCjT ,XFN%/@Ÿr%E.lgF>'l y)dh@q'?m.`DOm2(o(duNt1uF\t5d<ex#'h aIW}uJ0Лe3 Ꮿ M3瘆azy=ҸNQ8 D`1!#{O~Aۇ=(EM4MW&roϗzp;QO0%>؀1Jf CF ^1r#FMayot:ETey$M(W<$L<,L4Aj"*sF#{:mGsB\D8 @a'}]e4AH"#ʠܞ~FiA| % 9t^Q -B1#ZOBf75:fSp >Khis(Ƥ,͚i, p3TzN'[qptI4QՓ'NeYKnM9tEx,ba 3nor[g? fyŽuY8K˵7BpMjb $k EZQVN>gxt PD؇ڡ93L~ o' cܑ6bZ 1$]vCG! 9U.ϙW7#* iJm<30V mL4u C6tF3@Ŵq0X@&y퉠:i#Kb> X"ZL\ 5A x󠪙%-'>9@eJ80X>,;J0w7-13#I)3 e+(2>m̴.sQT ~80%ZSm% ǜR$Qڎ}xsm j2np6Q,6ϪQcĮس)R雰(\'! etﰳp;6^5k]F41uSbɔ@=fd[ݸyD'S@{Vp465a6]_AHZؤ_IcϋrD*veiX@!Pٖb6%vʎ|IP_7y'ծf{`':bmxm) @ A"G <õJhPP-G`T*jM>.StcqEm+k9mQS xS (2/; d{^C\m/bfbRHöi pECƉ&NTUu$roqoAћ~Z(Ju"A: ,"{Lg9֒sd˂}4v>GI|Bʸgjpx# =`i' V&izҰγQv]Nt)N VkJsr5oޝ/?fa"% RVb kcnk ^ ZK'2a1DpF^4x쭪8Vo>Rcg"5‚C-bЍា'uPe%)&?4q@IMpWL! IE{<a`.uЃ( @mSe_R܂&!aJ|[>\7Hjg]DQ' )rZԱZF+L}\afELgCpZ -Mؚ,*O?zo}[=d.)(L9M >GK|Pl#uY[qbONǭ݆¶p|^b'xY`V{V⛝LNTəl)$zC)\JLDҔ6vۃ(' |f& B*\ƀ7&>iW2Ӣ `i{x5Y me'1̟Hqj `!Y$&jg,?d,EjȎ~gN^PVo4D:sI:3*O=B]zisriEcᕡXbD'ⵔbWg8Y΃-('BD_'s*g;z>,dž9I9jJB=azEn<v߶E#剌!7; 9*wm^PWOt@7,FaKX!!_'f=l݆ ֐޶VgP OW$4jt*@1V/>\g'G04JAnG/%bd}j؀9<HtZQr4o|Iś'3)< `,' K A UCz8FYGˏ0-e+ -X&C:vGp_ E%Lc]qt>6CY|ت%/@H%7=s/1]:A#GG1慺`(>amI#yT{ȕ^5#\CW1 Uw(/R8F}EDșf_dWM1^ mH3#ho;p~STΙ!-F-oʘ'!pͩ;I F<Z7G} TS>%AOiN`ڈj&x??}o?Ab߿^v-vG+Q6a}t' !`AX0<‘Y+iթꏪ{ի?w<imK֗[~WW?o/^~7><ÛoYzoo~?/o_?rz|?zswcCMScvǰΟ D lp8An[F#1 Ѐ(P# Tz<)Eu*`6PYEϷT5̠EE`A)Tn̈:4vi\ *^Wka}p"^peTœ@k kZk4XvD<^j\&_ H$Jvؔa\1|Vd;}ٮ 8džhMo`ۂ `kSTVn|p0Z .=۶c1j+ (hsӬL!e4c"q4 Th&,B7f`BV-Լv\9{2IAa*W$F R*]Gy$"gXe7$r|\m)hX $nV%v ,P{KnǍh;fM0W  }1zAKgmkvG*bhxPe Ts ˬ+&Ðj;hR'*9MѬ5=:LeC#CKؽ/N$P'9gNSQf"L3c2raxzQ@$E~jpoh % A?G 7GZ#x<F 3v45*:urp{@[%" JnA sݨ#dIٻlH Pa`(fG)8XzrR-o:pE,28 ݦHK2N3i 3P2z\<j''QdOjٍ]_OGX~b# 0;!!W`lrFGA>$đcil>Ն S$^sQ"q{X1X0o%Lۮ2.Py (ISi@Pkઆ\Ube;Q;xƓ,u2rQ:}w٤Oq5"]:wU9dkNhxCt dHߜJ\.DQped@?W@_z5 -R%*ա !hu SQҲ7bT货/4Eԡ%ڍ _ ׈PF@TpDgwdYdB3ɍp*kAx1ӡ@d/"brN=xy<MC @ɾC9C3zEw49Ř^g}zON8 ?L^sXf0/2ųǁ$[[kl%PkK -k0~ȝ=Z _ sEcJ(kbǔXTy > 1uA*fdTX P 2<)_'dtD\^exuhuC]R'<gWPJN\)(X> =TzX,#f; P֮/QL54 ζ ȸ]:gA#]Eu0EؾɋonHXxdl/IA.7]`sGc[TKF<}UXd"~Η,׿}*[.UVѦ͈w&"9 [==#Ihr : "28ET,?5W)57ߠ0Cuء ]Ax`ψ= M,+Εd)[N@qg@HT`@l ncOG`!c;1% ho~2LCtA,WXl3 ڶGN̅)֒c`70߯x*P$K 1enD2"Vx䶝omoEc%4Bba<@G/U jqn?FOҾKIzhJXiږ"F~ULL$wk{ҝ9d8A\ \]`f,Xhsa]I=;,+YH?oH231SA`;΂ BL4 A5dqCƘV~`^N.c3Vh ;mbqwr:r&vY]%<݅nȸz?!f]Kyf쐬x3>sFtCFMRXhI#ֵgh50uՀ$ AĐM._}]J~e}!W>Bur[; TFjI{u@Jr! !*Q5BN] ۻ21\2<5&:cƘ6ALgg¹;KN};ԉmt1{XӁA% EU@Z9qP1}p$7G#ĕPYn^^l5/("82"hE{ቖ#M \>6(Q{]=]@{ZFt$r+Rhr},"ڧMoЄ<4f{O7Eו-a9J%T֥;kjr&,An5VnR݈CIbDr" huGQ} %o jF6zg*"FC*||@FHb~_Q\m4 kJZ\GbGCV4e3R"!HٖѡU+@Lا]QKݐ7QMB)7Lax?]8FFTR*[)JO At??E1A A&gD_j2/z3r[UD˭6Q!u0{l3L}i8*hܙ;  7UCmƏ]f(}Ltr{ M4jhׇ8Aa$0f]>}$`1P]I_"`me9w(ѯy 0^OpBW@p3G=j:#JNh6J >33"fN52_2"Ȉ%Th#՘J:"ol͌@gDH"GɈWT,ԔB}6Z~T_ٌMïJJ_"Eb+E  AiZ`5᳇Z8RȐCt@ 2(AP2܀Lզg˵N_Iϗ?ƟIϟ {? %~{xas:"j.K=Yb9"6M5@847Ebm@q M Ɯ ihS );5Ox$i4M·۫I3A,Qw|Tcx}3"FufacTH5Q"Q!I\ R"&mŒ2%x:mR2%. EiP3]8 C9UD0_4-e@6'"c݈}уH3q)+P,|ƻ8fVht\b@B藺%Cn|1Z3N]~xK}>/b\&,0J'&#X\)CsT"6ڍyb<"(FUotI`dɫ ]!myy<X MmLL=!|7C/XM h"js@S;3Q$7L8n A_m"6}&AމBkhAr+Eɐ0Co7(wFԉ)o b0^, q+B:>oXTHk̶"3+YSD!tI4 <(4LA5c"P։`sD$֓`I"a$.܍k죬4qN<˗Kүb6b_'}0Nܩئ6<ϣ9U/^iKWi|\`KQW2lC#6pU_D!${R6"*gI+)Mھ<]5i'4[Aƕh\q.!;O u(qsD79x u$Ř1vb^z/((:)W *% 7kݺ1H $xbl b6VAAFQlT нlJwQ}>=l2 sP\-h:D 7wȆuun]"@D[}R1i{ìKjE `y1ܨ)ǎjROu+?#7`3܌g$3a F0+ǩ pʷI( @͖ys졫UJ d -TN}z-AGLĆ _7~z~O7쫯oǿk"! r%Wh^f$2=20ePE*,<esg[!iD.^,?."(,ֽT6;daͩɉNH҈Й> BQu]E;d&]9x,lSssG!9"!ZZ%|S9\?OrP/~Z1>-j4]`wDM+ ^+j^#\'*E[LǢDQIGzDE'"D0:'#2z?KDz&r2B/> 肠Pߗnno`@}ףVȺyn^SB'(+!ˡ¢2*uYXD8j fqqnt,IՊ0b7;F<c5ϸBPahDEm L'_0&O&Füb; svQYltxf=ܧ @# _ l {0{/'h'%@4})1(2;JUY#6hFWD"ޓЕAp*׳-Fq䕻 p֎|].vi]iw.mU|@Xψi@ {cvqNm~r)ㅮ KCu#B+ɲ/?%etpzMBRXd+J&vZn=Z`20Mߒ_V@IM .EFסV&4fH\9b4nA0\_"t3Ide?͂(O j%r)*PU9-ڠ ӌ/Уg|z·aYA r}M at6'0i?wFu1k]&bq'^+6eY$u -TW*9-ٍNr=8ޯ@,RU ,`;aTb Ğw\klo P#b;FuN#q;mҼ\7 fkI(ƍ $>Q2c*euGbtJ(ʹ:(/J;Ȋ.)4nuzTp/P : =ؤwkzi1IGe(ax/ڈ,7зc;qsZ6unͭĤW*>SQNd$\9Ir_l TTʼ#GnH"_F6l%X/AO䄬W2)&$ET]żRnk|nBEiOv,Rsq5b3 keO+HvsEIҗL`t%_pbDjf%儿9CiX3JDbPY)c p(Dh Hkf4L5 n%kTmavæ f(&nX<I V~SO>B<ra S{| :F2)L,Ao3 ^>|ω>ĘBk)EQͧ\uDjRXXb特\ ǛfRcT1`XTv=$"~^0?3C^3!AdL5 1mEG cUB$P rcB= rQw *2s Ι~}[鱂uW>)|+a{@c\E,asbQ)QPf,뾫Lc`bo |hc"NAh? +(bsy͈ώXW}WiJ]ՄVei#}ZN653?RٕC"+6rE,`ieS"d fa( cCԠ]Z c_,Б9Iwņv3;UːrF?r/=z6ZX/]ˊ#I{D3Ȗ%{J*Y K׊8Y╌>Ff)dP(rT`y#=\Ƞj= khPh!!͸AY^}RsY FbMo+ .SV³wc7v?yN B'PT 'yJ^5I/Q[;@ќJ,zDQb#0Oq:'V4s2Q$n~Bmo Xi1V: ^ aF4) נ` NRpQшۉ ~xA˄vm\naѕsCӾf9 |͜bc#|FDa*!퓧]RH0o!RI5yaaIBq3Xm:gEmHhK{?Aϣ H=.?#447Ŭ-ֱa5u3(泐 $P^t̕* v --PkR[D¦3iHۼjE1ߎy"I` = Z?W {A D/u%Jtґ&j״܂'5`5d+w؄sJ}Vve6N]˚E^jM4fVW{orϏ:xn9慨W/q\wva,D &vBoQ59Zt9BpҜxnFN&??g6r1Mɲ3KsF jݪcX`lWQA'u W+F<e雑FQi=Uv-?+LCļre3@6`{>{`(ц32\IWQ=ADeD&CRStTlQ<3_$:q©zTvM Zaf  M0' b:`1X=2  "n/du^oPcOaA?. Dn C<~x'vjC>;|.X. EltHxvho[6V<=_oѵ5j9҇ŴE$l:;T"T|;TXcv-l[A{]eu' Q3p!;ɨ=O^/~w7??} Rh>>ˇ'_~Żw?}>|#@?_oO򿿎_PFQK6{/x.cw7(7߀t6a=[xPg*g=QXbט&yz1:"^G SXQ@s Wc8a#r'}MIJRsrKvTdr?edgT/"-r!; RN:uؗ ߷ߧ:O"6A4 Ѡ?5oii,H p'2rI3{ѱ/'FRUh  WJC[Dd`l>"GA>8_XQL;f}z$Aս[ >zKk5<%C$ RRRy~E"Q^v csղ%-{ԧcup#t 9U MvbY"Yd C܀tʛp{+P v f.Dϊ -tQFzXOz\## u,#K:ywNEi5h7X{ys$~#2!R 7PY˼XAapuA碍Ę&{Ѧ0(E#D1]3 \I4)s8 wMΔ^<5)-eN; bɪ~<[Z7tH$[Xj! Nl& Q[{-[ͅ EE)[j8l}y]5R)lU) M?k|,_sV@Z3Eq$zk5ؒb9`5=nFsX+ٟTؼr?/rKft|4 ꬱfNIZ/Ât1StǐQB40L۵5Bʈ@PcC$d3&{?P~qj@9iiB8J:  8 2ưB5|ލ~"*B-н"lӫ͍( jQ5ޫ"~M-[CE8ɢϳ_3Q6w8+j'p3,WlW""WK D1#>tn!}p1gy-7iXP 646-uS0[P`y!:~T^-"фi֙gt5'CULhCN83_-ar9v(sD~{O^!Svx10;;I1 YbA:d'2'2PdEGGj,YxY:xm.=ʌI?Ұq'&i+pil@fi=ma 9H劐8:rjTR bzhH(lNaWZwIʔ,MYS B (<H+d90Y,="3kvtic@LX_A*-SA5yaHV֏`B eK+Q{tΗ -Qc.EN,kdZ-ZWSt8(F#?Vt yx#kCڗL6>\@g@ Nx܂,6 uZjn;kh2Si:=a8;K*kg@ź821'AGe)#p@Ր* ~SbLdM%Cty(?/. qmO 9K]0.gG-ngf'2Gܣ)|_)w0`íLڹlj`Q@Kz/GG8߶l:T;R;#3?r؉{R0„Us I[Tb0Ʊ KQRۄxSv){@Lh<Ug0fV1 j II@7DDVwh_y$ Mܦv~h0n"74`Ae3ltX7r9#lt:#J-MixeSed\ Lot-p_k z\Ą6g? Ұ*9,ziUp1Ũ2wFΠg-qEr MpQ X~;fo'm e&#: \7ӏ4rQ!?VJUs dtG*0}I@ᑞ8dh$SxI$[3C?/]/'BR{:;}q ~Rdf|e#fTH.i;63R\ se+wo3_Pè]4=qw\ V䦱O2b˩UA* ę0mnr3l@FE) \4Fqޫ>(6j ;oh- ?,s+1E؀[!}&lշo%P9]'K!4ԺgK2KJ'xwsAA:(!M8C8a]NQȿ^}3s8qՑ#d#3S8JzGchE^4LN U1 όobPC|/qChgPgH?J:ABdl54.]˦-X<\ǥ8&FC]ڵ*l y#`\2ҟJ<]Y#bXb,HZaptAy&Ǡ<QO IЁcAWr-BqHjwR{'>MB,de'ag}֝ .2`H2Xp/+$;u3cjgflYGNHz8Ph)ZuHe[TN&SF67R,8'=I& 0U/-vbOUu`Zm:UX[<ˊ,@]o)Pݺ52uq+k t=Dp2<ၣ\tVr"4(qD"sfj *r*D#*MX;.A%yw qF냇S G? endstream endobj 21 0 obj <>stream H[T_,AU2ћilNT+Sxù܃T2%Zݭf[RU>ﱵ$k$[pi ,.xAT :FoT*lq3"XZ4QM< dUrQ*٧˘`=* pjo?IֺUTUCT:"NnFm'>J/4F \/hlUQBn7H%yrC\? v6>@\E3g mmkTS@ J8xӒՎƤPL1 \r3@' 6Q8 tb&iҔя[tf3l^Cj:T rMђĪܓ7N'(OG-t V?|*Y܁Ng0pLɄ[RH7IGn,.C %hN׹ vA|@s2SMvAaHiIT |ȃ?GF, 5IF5<(YVI6])"]u ~/i=)%XP /J%SP(Rtf2!@pS;bSGeEqn@hյ/&RL\PN& q]V:;hO:Mbe%靮IqѢ ` oLgۮTAIO_y@bU17JsR GDZ'pʭi;ћWFz0?8;$ٮ1=hWgu yqif+McZY팝)DIR<}B<`!~h Qax0+?*"gX't0|b8MLTzIDi.b &1:$mwM:nw;ABpG@!yP)*7yi:;} jUۗ~% BxtڠDID>22B,zu:X]enwhV:@TT0*4&;tsNZ 4Fkbkd|+BOޡO(+җ'(giJ&:k$BOULg=7mPCCPW4FTFB[rYz%U=xfS ⷉ;>kNPLPgetzO҂ dkH>oq"46%3J:D "DHL[7~|nZEC.&޴PAyHH #tm?+%ru0Fv)#.>Kِ>K0 |`Ml:1`5QYqF&+trgrsRt?+.UH{Ӄ!JnHsĤڕ]15o/(ʙ]$*> j!עZ2`LF4A$"Ӓ見,ϝD?C3IѧRzkLL E S<#u5<9puy__|OwҊmpsufsѣ??\{o{7? Jlzi~ټ|?˟}X}8^m0:OWW?+ozP 22<] lqn>j MWWu_wG᧻ׇ-C3r]y o9.eKM_g V:>~nE?o_?h BwqN6 LGK;t*@&l>۽ ַU= 6OH#^lZ:m0Y^b`"≱*,eۥ_p:FJUÈWC*a|k햖&9y&DO.,P4*s" *"\Z"E0;=q]ZlC=ؒJΒyށ u75ڞ%a~҃m84~|r̀]*hNudÙDQ~?_z6\o 2ui^y6#RΓ{85nK}6Îs.;=~PCj`@B6L6U g]NJ;^{)O3S ɆXvlR1)H=e&zO6h"sMy]hGԃ6J#֪l`VN$Vy֜r|t_ci4,Df/#Q3wµ1F/J5Ȫ5?s* d^jĕERfx'%D=RV]: &Sch=n7LEq[K*ï'|{:ctTsŤ<6ҥݔj!q0[icweOJdu j&s ZCpi ZZR!UbHhMJ>S&gT5xc\KG醆8*YY ͨѦz *M,9#>{Sr9P)@+)gVZ?ipO-rE"j5rqŬ w+[^#E'}o׊k?lq[tQ#8 yb{̩uVT.d4FZ|?ڞW3mvs}.v&aŻ[L '*j&Xs Nrzzs0Ux< Z<!Jw Nr5c*>Pl@U*擝O2^EO5r]r4/ӭ1|*#a9L@$魃FI;%op ,K"ɟC+Y"$ɰQěXVJD2sȔky҆ylN0j=k״vML3bXē¬ɗ|sJ#LĢiwp {Rd\3ԉ@ L"B#COgb 2DfR3d+?XuUΣ8ţ\WQj4%Ge_6칾%j LX4} iH+۠hȜ8c-r[nU&Uc>,N"Xz'ԡɠE?סjη.imib<rĖG '<;شZTNKg7_QiHC=&OOWNS߲A↶w}VxXn6zYn }btF4њzQ/O3@M)d'wl((;Av {'l<SطX{d鵽CӀvx5x !/pȹ2./Z ٮgjZO6x'ewcX8p0C٘6GR.|.c@{NrB;\* 5nbC08%}{\ҥ66QlI+oЭhK*53د6:qcTN'[%Cf g*M]x=(C~lcvi5p\- &)kJ&#nBs es}mws˵QO/g45tw]vMv僃U 5DM)u':bgmC4+Z<e,| zNQXo+2brZʸYh 4V#8S'O %+6LrzCGwus!t'\f,xXS#Qhc8Vl98|缛bJDk-iqȰ|ҤF++kAkp;ɊI|W9%9;ܡ챴Z̉v-:,s?``y!QJ+ds 0C*s QIyfϽHO~ aRU^_ 0+ p^~_@auvfF/ntQnH#D^.eޘ?ޫ:;^PӐH'`%Ip9R'l/o^Mc2ZY]^6S۴֭9g쮵9] Hp>bCQ\pZ,v7@ 0]/.UKpagE:rPN/L;Z,BZ;G>z{Mw }L>OsoThMPUw MERض'xB[V#Cx7MdkxZ6N7e7@4Rn sIqU.wʩ~%)NK9u4 /kT3 z[3aa?`o]VZTy%x6Hyݜssl:ˢ-;6*\.-@ sUO<: B̢O F$MKnbEyՅ{ukڮm:?*LĤiӤ@ k?rtR3֖{0Yg7S6VrwYORw(Qo , ҿ<tnSxlepwv\eʀ4i *+y9MBh팱z K}QZ&~sh:Υ} Y mVf.F*˫z-36mnc)C7ǻ.W1q6S)Hqu8R кiF"$c}0=2 .Ij9jj:kmԋS+3dɺd,{cSU^TVDh[vu(Fu[uE̵R uE=mJ~DstJ|:-;̵SjvQuUVYNmd%m6$㎔TJ8@qQp29TW~Ak]*3(<?٪%Sc(aA1Wb nk1gLBuHWءQiP GVq5jAɝ_ >õ4ó9ϒ 2 eGu[XdAGQmcTzX/Y<[Y `_?ws)0 AX۪l{X6:m־Mg9{j ΥhtisgvQK*y?W*9Zϵ4l8-?f5InR`αotT7+fɨ%Z[AurЃGbFAڻM8?lXᏢV f |F ЇgVkth-fnIR x8hZ 2^k GRgplGżx (- Kμم2]т{&56uI kN*X%(Eb@ z6:]km M t>>H3>+C=)#Jx M<@: <){>1/mD)3~j? ~. ,l{8~ZdDm$CNyC `hJ b)G @IhggoW{mw+3&u4TK /U2F DcXB gfK>y/Vb(Wuҕ^v ZLU_;yW}n]7䑮s؎sWȕkU%[Z)A \!A J$q+cm_Bb*pOv}ڦUp>Hh \XFfPOڴF? pThk <+@PV`+ɃD]cs~-ލk(C4)/ MؖҏEA .YhVs{"Ihup)@#`!mj0_4"j|+9a]Yv6+vnMZ-U`NJuߡ\uӊdsչCoI .JE+m`j9\[Vke{egmpj9|Y2@ګ9'iKܯgM:КfnG>.lqt{t5Z;{ jExhvm|1L *`,`dCg ;ˈU{[Z4I#~dٺ!SpMI= ]| n*<, _y5PHt0! xTϯ2ZnOBuڮ!R_2)[6N|}X2:})VYn[;_혱QH⊆H2^@H>Tn!v@-1s*0˧>&74{3 fo !bCrsi98gVOi߁}]*䰿q`v\p0?6%ϐoFDhG 3؞s򍀑YK/'eN`2}1M.z 3$} i|W,9PGCV-ӷo+y.NW!oso$/ x[eL^c< .aQ:I,Y LH_?1n@Y6@ 7c,pz?oΕ-\697b/qViO pڙf5v) Kqy(qJvqM!|?q1(sd6.t<@_T(6D3*ٍC蘼5ǝч&7=2 '/v&ihug{mϑ4?ԻrN*xDE!ʮ2&kͮn1֦ xcOٷc:zc߃:]Q)C꫷w)5QaY ~M#v,=:4`$A`^>:מ}g+ôݫZ3`÷|בk=us~bԼzl3b˟xA }s Zۅ[ h7%a3gWU6z]uha_ w~_Ӗa2AlX YKvT`j-MWx~5u\ՊjpɃm6lyX$8WnՅ':Zi3lkz*iv?m.lƅw fn(Ic.phzHf"N hmH!>ƃ`;N\峳tms1u(>Ajз(fՍA=cc}?$,7h|x7+)HmH@} eAnƋ?(3D{v?f5flPZ:,$Cltc+lA䃿ߵgWl b 2g'r4}4Xe7%E;Ew}ǍKAH5sz 1##w]Z^޶T<Sku]H#]Z !?ʫlDz~A}Aj_-ȃB̰fYQ{˲;NVV.)2~qIhH< j3--FW"*+Iʷ,| MF=(Wm3 ]@ce+w((@nbX?ͦhҲe @ƤkG烣w5 8"m 9]0 leJ/ЇxZf# & YL ʆc:>arݲgz.N$J00}J0"EuHu- [8(Tfޟ)z5,u46$!Pm~m`!:4ӌ `Q,_.ڵ 2 ;tJJemS2<93YbJ*1I0bq(L GN>e)ekkQ l2Hg*e{V6r~ 6L;Z !>(QF^%/43֎,:(ge!ЭY6ǖpt5Sa^^u?4BjŽfWMOEk;&Ԏrl+-{Y? Gق]6 &gmNw"OH{{c9OL(˫cG煦r tڎnU7$ .a Y!bF` 6^ʺVm%z3TʗBmdUoO"Dmp'[ΦݓE,uhk3tX BmZKb PrN5SJJ^Pdʫ'`E- -6$. *V(V"d4 ض6sjgӗGh;O MLiSfSCcTNtgv 6Nx`Y4U0I!}y>["h`Eݥԫ# @Wt0j|4~Ѯ$ ;!{O RgY9 qL5wU"0k_H2ɛծ+l:W7]0re%Xi: sz߽PWvfYM.=kЍ}fRe1`!"²@Kt5l&o)G! O1BeZXOxOSz4+r6&3]֢SLqpquKZ]J_想^Խ_Ɲa9x"ёcif4-E lSbl;&CRQvnh@0 t3a-ٖ@1x4L_֘:3ݣau6̳8;x8kF8NY\J0gQbTQ^);mG iz) tt$n%-shs'ѡeδD /f x^P} t̝S GJvoRnPX1:P 'olLU&DVFQUX%QKmn#I᝺kH'yuzZ6 mq-9Q};&V}Ykw-(ۉ[HPk-xr5Mci[ cX%mēNW&sEh m$-PP׈O90@zޭ9úc pςOhqOk#<',`i::v^d:fpPƭ(:}zU(P'_)EondLk?bY27;,oO/ogzW/?_^r/ O}~_><o?~_ %?9\/~їJ]` ?]àdīaw~1@vb+6֯?>Dw0!R._لdM1~zRLaY֢)QܟT3w]nO vL ˾Řvt5zjUk|.]' >+`~nYD[gx{{X=?:T7"e{AHA<^s2wt9F\Φ oOǃnGIfv'jݎѥb` p)D߲y+dLG%:`t:԰Zx`CٷlbG6 (iTҮM uj &sQ;B?=5 ܑorޜxC - @Mq ^M]WNfd0mwd[%ڞ]l Ф&Ҁ}yz%c [e3CzeB;ι{ss{b,/sU:Vrʲ땱\1^[UTJߪ?UVQ*pIfŷ[@}6.u+o"*ބ˫DSj_VR$*Ʈ*h8JDIz}-NkK5ˊ>ÍRXX󢻏h_8Z/K³m-%Ed/qd_PXeq?]y5շ lW)d}0vϲ^ 9Er }euoܥL#¦Ct.wP6΢6"kJ.+q~ dߢȹ Y<QΌ>,ϭH)NҬL`F*0nN'GkR#ٕ%E 0my{ZՑkE^ѬCBޜCtʻ2JafS\pk7? *yvtĬͣ?ops3e;3s./lf\9aH-2Hv;G A#`M" #bzU+$nI#~5_ĨˆT<}_IE81=TXYHTa [s0y5i컷nSkc=?p15F^^ń/Q!šVD`p)Ȱ_X3i)0'Rv\{2bƽMIsAqK%i-Iڝ_vVFn ӞK6Usa“y X٬DT;JbGLgQ5&QvmϋNn/J볘^5':ZVw^U~%nH;E `iщqHA-Wܼ)}[ѕ |nz =ɭ[fxe~ [a$ Ύ}/!P<I HL[ӮL,@gw8~Q6=pu{4XA f$x՛ߟߐQSଡ0yT' %mد2!ea}bnL@=TY wf )م͠S˦5unIS\@BfӘIN::2qG-zjb$ J|(ϋGTp6_ƿ7¦ޏn2Qi4 wa]!"j-I3(T;SX3 +z0Uz y_'n-^pit6|Pt#ѳK߀5:ho ::9ED Pڳ5jy11[Y_uQaDl)Y%,\d:"s{GmW[{zǶNNҦI44-x&`h^Blcjɉm $`0`]WC^;>Գ<:>{E9^s晃ye'nI#7@%6<\ZLՄQO]cćQjؕ %hը&v0]D)ݖunf8^~0>n QߢFPAR ~(dbRw䰝4DL'}"O3^yXN['} μS8u{1.bՂ.Ey qEE=dHDDn:Yp(н~ѧ&g`y\:n"c:9\IMщϱK @)KܴT_6>n$X@@V9$ﮆ7ϜGσA[&h:W? dy:q?=.8[*15ߦjQ)ATu70;Ps(WW1{sѺt2qoϩ& \)RHãF.{DH`"4|6,R cV;6*PMY-jʠ ::]ZBq*=[ RKZiȔA&=c_mZicN;,12YI ƍ +{Qp .眢Ƣw{4(gbdtRt1hetǶ_я)5l |8W1/#9UQAiGwnM_f:؆~hᆦןqOV;1'>jLz}rT'YT~$ż먇אw|ɻWlG߭QZªzp۩eF 0e)ocvx^M|n.u53+n<^.=IyF+ޑ2t\# lY,ܔ'*ظDF dXgڭn1|l+#|/6uFQ~C="bja?AbW7?]}*x|~,ښ>+-uh>?1<ߟ\>8~_/_mNvNZq!'J ;ѰRi^{iߍ5~eC YVyc5}f.c3{/7Jzaa!:6̋BnsE6f\;fN&eV;Ձ~W}~UX՞9Z:Mz,,Yɺ<Џ:i U7*,|H#$aRÏS~I 0r I+EsG!:yzeqV̓Ð!X0wIR;AFǻ_lP]`bVUޯH̡ E3?mo5Lzd0LIItU۱‚Ŀfjj'lhUIcTϕ3:L@͢Wؘ;|:s0~)t[Wm .7.;t]pۙWζ JaU.BV>e쫤\ ܭ)22qgPgK1`QS+hhb JKH_v~c!LeBv5+0Sܪu~6!ݭתR؁p(Wu8_2jrovf决c3.v9""ZS $r [YXxTN 5򤒾se)iZ*Y6졞Oh cTыC~Лt .g(: av٪]_CEͤ.cǔEI, v0M{} ډHkuE0?ƭjͻܳ=æ0ώ.tǯl'\jǑQY`wYuJǜzicHN\|p$O$ {3˛\MMYte)EǞ1<_H;P&o)졢>;'ނng"v-~eoQKOsHw헒ܔ dmcg 7(违[zlltpn[ d̒V)d7$7)>Ϩ먠k{K?ب]KF*";ٛ'γ8.ӧ&,355U~*kҪ{:5^-a$$tN:+^W˚@}A YI:ɜ|IW=9r/#MSF,̗%CB֣9| i<N ;aSq#)pO9q Ec80Q ;uɏS= xzZd8^'JjIxxC?^ f=E/!gsgO9?͵|]&iݚ~~/Vc`m]O6-pQHc%C`lT%>.q/n:YFZ~2:s^~BYjĔK|Կ~WXPpɷC?l*^ekZ+ ^6{bRqr! Ž=I'0Qc[ƭQvZom 4Z{ v`ՂTT"W i'm)JB!b"Z >I圌_-/FjR}rZij`z2X itƣMVMhLD)ptky i)B+GM X sT, O5NBb4YJ!4Q-=szz~b9p~8Xo _%xs_[8 S}Ԫ^ ]G \:\ࢼ8\EZ.lLv/9^ &ƋF1{l&h̻^qTiu|dޯe݊ެ[eiN/ng{/?Vt%j,-C|#/&Cq:ڼYÆ^H9ڒ_N-mh>iѹH.O:GB@eZ%-h7,C'8DeC=t@_]<ϻR`”o5zzj<^9eY{tǡ䲨al3e3^yPκZ\;;<S!B`ײÏ3v靬eu5ɣ89u ň=8U\g5>+Eq%җs]&ڥPkU;PčT\Gjm6q ~Hv K3\r+SNqs! aFq']mN?P^L6m [g)1rP𩠸%-{v\WXMX)NZaVKڪTSLt&k{5zi|H;]PzyFoVqm z+PԭMl1>-cD:ɸ\ls|'d|iS_9\"괴Kw!de-nap4GN9eܾJUTcv1u,g-0Н(ffА\.+u,dǏOޟ"Ƒ򎡿L ïl~Jڑ6KE`@Qp]< rcT 7gx`ڮqu:Y_ܜ;;[z, M8<0##ĽXn ǕlDrEFO@g\ W1Fj&<.5G5I`UVpZ,)>|5i>Uv;Xu&z!Oz} }Ν#HZ E%&Pcm(=yOG.)G,~u&u fH .nςvUUa*̐U t .H9B?je !{X=mllCqGme܍#, |[WV+CcN{7KO_4y*1TgU:4kg :eU3$j /du>N1[GUc=]_+쬼ztjǵSR̅VX.4VY FvP@=co[+[bʧ.6)2N3^ldf[~&}%21kъySc>:fNI8͠7m;e3pa-G)abN}5jWzVk$M;iwFG莏\NOaqLv mPI8ୂz3o!;JP~'aɣ4aC>6C!r.?8^D4'\X3EMn=jT_X4̆j4ɛkQubZ;_q>oP(`>4 Ei~im[xB5(5t8]p>j!e^0-HNT]Sl0AH7_~Vqȏ`n2}NWL}QL'MܸX$} $aǖDZc]k"XvԖ!X9/a~$yM T=8}(,7[4f,56NANC a//^CeG†Œbϵ Wu禋\ Rh7mDmC 9BЧZ >4ysy,ujl=f,PDmS_Ue!=r͘ `f9F,+q'XeYd 'p&e>.#,&x3NŴK'Cm!жnwu d{A+~%vuQX@v!ijJ~!E446'k}Gk7BV:!%gwsu܏b{kՑ)('|.%},@0Ǩ!Qd"T4(5>y2-^`S uމ ;q_.L+ۡoB?)%2,pϠf@HCBl iPԭXطJ@H&#M )2q3Xzp/>cLa=B&)Z}6 &6Bzg K.Lk/"S\6'Wrh(#8ٻ[-Ucz=Y@-,]?Q|$oNMnРn=O-;Qtxg~YdgqY˳` L`FN^bL}ՈL39|iiåJw_-+;Oۅɹ6mggik\뫧}%1mcssž`VƮQX"pw7cMޭi.$J@DƃL\z(B?93Yfo@)´ L CtSx`pVɰNvsb@V!xE?1~(9ܩ|aNv&0RDE` rUSFpNO8jQ\ubtm"Z>Vz޳hjΔWM [ƞ&*y^ ^̇쮻GS!ZP#:yeeDqZ Ta7ĔfS@:tONhو[G"m_컍V$ |4ȱٯđ&odKy\M|B'q`9R&7߮Z/wQ9h%+y֛צ3oWT8Z [ ?DǥT ʅl9?uގȠ7;Ks'c [BlJe9,y&;[8 9gi~ȑ3ՋrqvI*%H>cL'߭jfѡ)ф{Y)0n\bYG>oכLpϒ>Gjy<1%5Нw/Y~,@t YN 蟗 YX^t;V͠1c)jY9D`{1 T†rHwB[]|G+qk%bhx$'fԼ]V4!m#pX}2fb U5K˱-ZEԍ ̝|RHw_ui6n=&x:9XtD]jٸKH81v(Y[BgZmpadCXW?S[A13wtvLNb-MϜ[ޗ{0#-ylẹ xJ`i'&g Wn\b22.1\R[Ҿ{eu=]2ˇ&ďT! Vs˔40ީB!UafUA f2  rq};wvZtOIىGG 0WS萐i3޹Bª*h|75Vܺ ;)ZEbFC-LٰZ Z9:@+12wZr+Hasqn#<fjIX+a[P;?;qt2v)U6t m{9 $rԓ|NÃ_quHyx ظYN0? .1">aY qCׅL6s2ȐY kTGy>FŸE%% SCrXnն({3T}?2T:3w 7g]? zWS! ޕer#4>bW{/ ;?Q\W M,\˽6bo{3)oHOa"Rx x .Em*ͮ;\ecnoE;/`΋kªrί;wFcoԸ>[ h/]c2N1O?{z.AWB>6>[:G]us2B 3>AR~I_1wOjz^U U#H>/A;İ &S>}HJɮ NdZz|元_71 K/Է""JCA7iyc5|ԝ ) WDzBlΏÆ+BB~5r "h/7afE^%U@(>R "|`)Ũl8RMl`*IacXQ_m*̣)&f%Ѐ3N@.35`]T=Hu2 kB[g<0D&Jjd]9c+æFо<}pgEgo`}9 ޻uC!tR>N>+U)f+/W(m@dχ93q_L6fWN=U`D 4_}0tz#gr~!ir4)q 9_cQ>j,j/u ̼'3ec3e+3͙3?g:mgjj$&FŸ'F" eWP1ɴMsb$&( [T\Q@v%NyἜ>y8eqrPW1⵰S$1rm10Q?˫jyN&,8B>n L3wޒoM30.Ļ]jzn،EZ̆ !wA,&ې{q3T*:a_ϭtAgtӣlgOl c ikyqS/5nz輌]|Z>xУdx5찙UsexYD~[7$Y% r|C %:Q"3;5Dr>cKAnJd[4J#=(zIdQԟZ{Xck|F_af1Cyآ3MH]@ QN z) Yz~RӲpQ3F7[$=3 0O>q0AxIΊQd=p킖Q̋2?n&VES皃v1G?:d5AV7|08Cxwv"1qϤTtW9seb?1 "a6†Aٮ .΋<@YlMob<Qڞdm?>X˝ҚI{>1f=5;d&e ~OOU&hW|D5ң)(`S!Ư5'E/9IinW-rD5_ھE0)F45¯G77/ןń\JFVR{7F(i[ZA@ pW4ȫ:Tr]pWN,‡%=ea<4KM=] |,[cvs81b5q5ӄk~5)ɉc{/ xƒ!'4[i7:SwGh(׎Pe)}2b4Jk2VM<|s|C!;Y]-Wΐ3Z:a `]׊b>&𐪠* htuv5 t{8 i肠>@'ENG]y_ҾwRҝ#ԛi&n7j[8|3מS0IŬ֨IԂMn-2dOV m0@k(9t;b v-􄭇~ WR_}k܏J bahQFv%ˣ/4ڿmhKj:m)uafʫm!|WCA=tMn#rj6`>BѽNP7zݕ? e:w6dIHe1+tM83 0s*n-gan>ҠU蟁r\͡+O:.I70s{eǑ7PWf1)fx]Fگ|j+MvhC%w8)3Н&8GwkzD}tt^$=N1KczVK)fkku_s$P@gig6~}\$g9ё" BEFRwb^a9!{'(yú":Gh\|(j'v93C?xji`՞ucvQGz{ctK[/:l\~Ez03 hؼ9y+5W7/yܒq"@>55s+{g:xe]֖SJߑ\[])ݦhlsrp /m"D@ H_. jx`JNᑖ߰%;1U%dͱJח|>Hz ^1(=s*v0%m׎{.%oP+BRf}40''폳7so;^5+> yAH]$fp_()L0|OA{UhcjTk*5% 2ȈH!bH"f$ ,DC$gݯr/,8SO 4oC}dXg"kV;`b%C69 ]'&/}Ns_ҿ)?4%q \`( dW} U%Nba'Jnu@A7!ЇҲlqmwED}$DD^CEyEYeTY01cHmuS$ǕzDbn9fDEE^6I}2Ry"FqϾ5R5̾3tsw[\С_k;)񦑪C*%Ɖ)1X׋Q7#]vEX_h+g_ϔMLzc%vd~G3m*L9tt`<[s3ͳ'@>ROF5IqQVw״C]yl7T]%2z ~p5#Ǩ@W2zW%vdDN=0 `mOԂ6+l_zX_tg\ߖ_Ռ 3M-X6 hGT#f|6WS~j. 䫲ok [_խ骼Ogsw7g*8}kD4$F}wLu@M.G1/oj~ť?X0Pf>ӉP& mށ GG~o5G)II}g1~W9VܓsM 3hꄺ5e>2"?OrFaaNijS<챴 O MplSIIZe 1K!Af; !}7y'S "}\9DK-pӓة;k$h.yUwpFx٧1In bG:|Kӆi;nxզ:MT':yY?hb'#@ Z=6-3i_\;`N%$G껋CH྄P^m{ABU^+ l+!)vkZd=0Ju@]7 fvwaV_br2WN 680m8\J+,Ѡ"ZZ · qv;JQfLS`}?>$ڙ'frtm} 'uYU\٠L銸e7Il =Fn<[w\';nQxAL ˥z+DFzi &Iq $oFn ?6hEОf1vc]-x6_񖉲׏Ѷ=4,5j1}%a. !%pCgFN4<11dE^z1wS}s|GIk }!wJ=o|SÝg+5)f9IF/I;l\s:?jroVL`\?tS{H˒/1fۦҬr-@7B}+L'9#/1) ? _}".5i/C%!qKC 2boI)kF(gO9x[+rk{7XnW4'F N/1`lFIѪW,;dp#asYÌ-L13a ѢTҢ)Kee[ %Id !af=s=s#'|ђՅdѬV:R'1׀[)N i:znA rX(fXw;E3wH_ôpS?5b}kt,>++.m4gC+T Nh߯ dM^ GOtas]rb]͜JZm(4ְfhЎ_+H u4~0nYȲϲ6UܴzzkY 7XF,4~C T P:JCK:CzP7{!e{,ngi/9|r5Cp  fڮF˄$Kz7WRnQ6WsY|1@=UQͣ݁BRTU!FJ|F*6`EEV:Œ%:oA 휸DziFgp‚>c {Qn*,N=j*)O-hĬ1}Ű;g;`42ϻԋJ&Y|F+j3ЖtBnÎYQ6/٦`ǝO/*EkH^Ez,({3_ph8) o:~]]12ctMDAxeaxtt3fѤc2ƤcLDq7 ( .JpwEdAq߂(I&SS/[uԹ{=]W@j:x{x :yثa()KZT$9$ )ۨޛ 2v}RNx(>΢%ed&j"4Q_\}aTѵ"wF@2GIC԰*e&aѕd<ԝ @/j퍷0U3m1%ᐶNA6iPuG7ZBzPNu)yΏtjJxykE4:-~#Vѥ{43+B{A5LC̉ͅ7R"i䎖"y"פ[ 2Cf)䋵5\_`]qӨm,?7ᑲ25DywjfU>#=E$!3 wN7e1)w/Wǚ@4hL G!B5šTuve$`u} ((5bQ@.pG:L b`GRg~%:E?b#f{m|U !Ӳ콈!|W*jUH9:A+RCΞ\xO8?[X])K Z+|o*I2 M,\@˩:&6noQ*HV4H[|jNᙥ"Ⱁyԅkl])Ȓp0[U-f8:h.pL:98?򎕤S=5 ֎jvoz.zۄs#hCnj㉞pP88О۝jni%QmycG .А'fH-:qhL1yWi=_?Y[8 v@+g ,ѵu7AOCf1mlw&`(2imDvѽ G!bUwOSSqfZ!;SO4Kӫtk`@*2lOM`)$>stream H?5Vjc&J!LIdȰWMQ#xpN 6uieKRB5vC+itUheKQ_eƒ%~<]z2C|1O[+4= d*F\{>>!w:ɡ*~ |4W'+qnq/[!d;Xt2ʻ[j]1JIn+gPtzz0d|MB"N[.㻤 vl(%6RV'-Js}]وu4L `^ϋuרAPs5AkNnqPU[W֡⬽^a0}ۨuIx=/q3/G?a?5*^2tmjЈY_0lwO JX#þbp*4}>,Ao6"6X^ΑE[mѲcqgқZò~=/(ӏPb'TB锨D^g]Lj2e!gdV~I~Q'\\,wkɍO{SfJc#h!\]WyF\xnYz9.#ӢOX7F~/ddz6AM^.Jn+X)~V\w Nprv:=̴aj(%=N`$Xo5nQ݉hGx(;m 5 OWk*Vd›/=xJ|fw|e꿴m}٬L?Lgj{/3e۝ɞsΖ*S5AJFVH?Ee%Ee<$GFCrK+` 5V |8DIgG+, =Fl{FLx=ZCqUPJˊO*;Y!<҄ȱf@٩s4M)>oL:]NR<`q:Ut(0oW>'cD.J"c^f)>Τ8Do&Ύғ ^oA#y #|! <垢&T)ş5f$~FԚ1]kcƹd~r~A"HX 6.=xmk ޸p⟎r0+ĨVˡ^oVOE&^*ԋFyyS29>觑B/gXʤH?/R\cFJfmtPydz-`OW땄1zhKΊ4Cg% *dh l@X;5RTJ,Qs B1GJN7w"ƥ])-I0.k:d%:40RI a洴QY+HN{()5Yc'~~3.eR$Ei{С? ]nJỌ̃̄oYfBS$L>Ʊf1).g/5,S9a˾ٔ՝]2L;_߬p*PC폰qt$BSrGkd8MD=N cd.6r0f :Wk%pOyy͊뽆Z6G)#.qhӯ\h)ByfhHUW  {{w.jY i@%= `*tZ ӵ{B̂|! X 9ہ疏)Q%vv;N\)(!a.\7P}S:$vR5e3 ~<~^2BB?#%vԵA^Dͷ37 ?/m/* <j8!N 2:!28T۹JyʬԴZgwvsq;bݮw;B椃$/iA W7` }r嶼%EքiuI>%$ZE Rn n RP t2" @# o7wpŠ9nkg@П{?{[tV̫؛cʄ{mia<]D!3(wy$ww W@MMΈ2S҄jj6(ZkkVUlICX?$PdkX,!3urX{Cwma2~a|BW~`=gokıYlj@E#3Od#EWDKoߥs0\Ϸ3ah~H@-$Hݺo z)="aLHJpc֐5S{є$ǖj =u7]nޘ|jO -Z Qլt`Q Y1ѐ0񁢄8Ns(UP}]UƆUزlfD*EXtȤBjx$I@BIC:3ڗTootВs'GrNKN<2[zRg5ꐰ7,1⩨e3 >>T@D/*t8X-Ʈ/tv)pvjWC]3."Wo󊜲4H . ל!D'P.O 5|&o+jقѮ9_?̰Bf HC_O^b"2!JO ~JokH_xNZ諣X`@w}?_U?vtOڈ0|uT`4r1UIPFCL"e+C ;?|F gey!i{#䱡||4UfVޛȚn19qG!38_"‘,z?ѐ4J 4e-R91l^VAZٷO+C_l֓Fi`U-t*Ǣ6@ w3P<<@PD˲jY|#t kwbE_4kVc\gmRE45 ;|wiy/"FW[Mu9uWگ^Y͗۶ᓵ!1ʹ[Ԍ^mY,Z[qWQ "KYTTPm[#S{;dND~^7kNw ]Vo|g㑮x+쾪=_pY[Gݸ%&F YheUU8Mk3hWΩ_UuebU|{8)9YvNZMdYUteHnU3qaI%^5%<0(FṶZ!wGA5~knѬLh:NŦ?n0i0(c1R~΢ 꼷&ɗ;}}B>0G{N#Ç* 8j)Oiٳ{__Z{{/V// MWf뉍m^xiT}X-wOĻS c(.ӧ3636mә; 1` 2@HFڗ+jG $!Z7'i?73gyw Aj[7zLFOiJba虍5Sٕ*NG&=vo3qk̾8!)F=^_'YdmSK]O>Ra0CiP,b^,6B5:4c̎`.aqkVڵ|iRi.m,ݣ\ }sy:Q 0wbMdڹ ‹2Kc %6|\f1*G&zȲ-ʒ 4:KٙؔN3'MU#(JeM1hD%K R'vҳT~\7a|ʟ1;5/9GŮu7iQߺm"Bi#!4[@Vp=\M90zH9UGnp/)[tA<Ցv=:3X@~eAKZ~ d0e$<81#yhJٷ2":-R._ f!3Uve[x7o, Z%=<G#L"0 ]tSFAmڵ]U>uf؁bB7-u }·H;؄nVΌSFbVL["!l!:_&]j>9g%>;}=*HV]iD3{Ar\jyXiŅs_1ǖA/Xx52]Dkoi$O\gndͷ,JxU$\챝;D̪O,YI/ [K'zƒMrwƪ '-dv$fp"Pqg^>B˰qZ^z U?cbNmd }Kb/\RsNTB:vf@B+-adTٹ85zc >.ȵX]czȣY;klblf:< /#<ևcP `q>N_</#􅪗>1Go[kءLwQ)gec+&Tf Zi'VB}񻂇a.V+pxe YZPr݋G?=4 v\􅜗G '&VTly0 Lg6i f/brAsWiZ)&N"h< !.3GtgH=y|}F%*RCyG9Q[ axGxYq̚9ޚ}j*n^Y1UqbO\9uIj'o)K]|oGzž>SR^ߵjVZ~y>GsN9ə4V]󺿸4Ͱ|26b_;ƪ.tU!䎙W^+ek!,єB2M1 `DEzYfAc>dk?%AQ3HǴx>u;4V O~ 0nlC?$9$4݊(_٘fHfԱj6Sҝ)i*ÔCz0ފpIDcUK''ܣ)sbI}$\;O uܡxف 7[Kt'vh>S[ſf&3xqI֞:zxlcU.$zD5 ,$$$zC#@pO޹޹ %Ml9©o||(Jٙ 9镀A}},>wǁdTHAOk.-a W2i-Qt+ TjҎ{RqQ %; [rPMXg^X„uĆTVrG@ w&A9q%>a@cD q\ UATGq/t%=XCdHtCЗ#RfpX:߽sFq rM~["%4 &hyTu sVh16^3K6|}քhP'uLeDw- RV1>qI뤑Klܕ*'5}+ޢ{|>Ji=qpژSޒsyPEl&3-O9Ǧ ;-lDH3\b I;<h_V3{z9L6 -HzԳB*jR-wi| tgv'SdPPE~>d _s_6pu2N@Iyq$Vg-|S6HY4i0OJ ‘ XC_3%4鮀+- Ɂ%syRdڵsݻ{-k=m;3{-ˋ˯_L|҈ǀ IJ$SKn:+n_)1SN.)fapPz/wXVQޟѕi'Tta# i z/3R>:c 6"Ed8H"\xFCkIH`?ājzˁW /†Imޛw+w%bW.~uէ="!$ؑUXYӿm{^ `_h/ nLt]uu9{^SꞚ^~}LÆGbd .Y000]ܔ102싼mEʄ;x?x/mSR7KbCB鰄Ԛ4S-P6?Tn~ pOOC?E@mRV&"ogkA%AW(l-':RZ?eVLRt:dҝI5mD }G@d1.1[*,*bDȎ&5Uws.|G!{5lKŀ\P2b6*[lT(GgbVOC*%L:(z* vGH8PQvXY= V<1S[Q eyXE$o;'jU6yO Nf`Qu_OC- Zf녁GJ8! -#t @;?a7YBnv*du6=֕풶~\ܣ8_ub ҝHq]agv+b c ЀP`1xfbEr8$qH[fe70I)JL{.)0(Ve**ts畑J>O-#\%-;׵h(]og~Y cA:X}xU͇A|~@Ux,-B3,Sŷ_Jj:ڱoswSq_wd__}ב^gHEoǖޛ%gE 5ZIk4$dy41%˔U:<*j]D+bfaRB(K迆>TDLq1*21p5x'M *y(^%7>ʵB.q.ag/|[\7?I Cܐn{F,Q">S{APaZsx|< +{!j+j{ARz: sa\IfzbSP.j fA ̹-UUSKH80'mbO-;rcF@`IFc؁h:bYj207T5R60񂻃sp(a|fpRca*??(Qoۧ3ܟja PѦ;b"i>x-oko_WǺ֔m}&:}K:]>3iә,˲\SǴ줹+n(l*"Zfd*"((n []]?9y|^;sM[@/_DDF/Gxfs>%1B|m)ih/fz kh_3/l9:XdP,"؞;j^- @O_x^`Gz0 %ؖoλ6BMNqkٵ~cDG}5S`ZBG/qR[۰"x5Kg-)b\XPwg9X7Ҽ*"~n)d.#D[R|sfhA!{J~5`qlP6լ3*n_ׄ?gԞZ%&=@nȪ6e4C\zi[cBHk]9IfƅIj/)|oZ uKٕRJjUĎM-0R"ǽ6Z>TF/UE/ ohK 5}}z7/=ڙ%lc; 9ūb܋U1o~-"5HI2r~jAV苀4u\BGkȺ8!&5T@`S+0t\EF5l[I)Y؄3kKKʼZnݛ$m|D'+;m$) %xlMvɘ.d{ĜA|LsyXgU¿e>d"´u?\N C#aLwÞIC1[Cn a|.૴πcᦖʰ1Z(QRoVNwZc3N mf4R|0,)ZB6G+"죰 q&أֺʁ_EV{}iD`?Z-jQγFWG*[7Ssoi3O[j]YnR<1rlN` ^j |j՚ mTmU~5^Op`b:FY.QXv'`^}@ϧz8W>4,SBJcy{JR`]9"vGv^:,O{:.qWK)qy=?`&˯ͳȀށæE^IiY(x^5)lx\.g=!?Ӓ.[/+د/L0R/n "NLBpM]FRq;J~OM+Scqso8 yhGXSM–Q**Im %%#g,D9|(@%]WPWə 9Wl⚗LŒTS)p p8$o]ga"_x$hwbGGR 3[Jj񞖉Dm~X%أ6LN0:K0_*]kn[Ӌ°T,TWͧϽ$!b}FLDo9575x249קC3<]F(#` :ۋ|uv{Q~蹅VГ/FSN%~-*{u`,6ߡ5I ŎAY&. UbF<0 ܩޝC>&L0*^2Oq>%PfLzMeZmFVjI4qWpGA@e_|,&qW b4 (ȪA@Qdd^xunի{}9U7A%i{}ҦcYkw7Qt\f>Ӑl5gF٢#]߾|J6 G5a\\|0xX%:ד궢.CڷtbbcF0m`+SQЛ| J=*v}њB{ui]lc`EgWp6ϣq9A}N88ms(a=@Z&vO:i;TzhA>5~< h0">g_ܑa$B"B iƱH-2/~!]YeUƾڟexhA)aZ'KVHI?,{sYθP"ݠ*vO@ , XYlNq6'J_H9v)ši H?70Y*nQ>JQ^Ma%'m4%.s^ݘ\ j%}?URtDZh;5쨅UB)Y0A [61ɞ+'))ER(\~FttPI/n:QLe`$&uyu!{@wTGjw Y蘑mޤ#л8`ݝЫZ:=?aZ9ܘ|a+Ԭ?m}Ҷ:G\kmaã$ĪsGѹ`mjcr,M?Rp0Zwn ҃5!߽Ĩ95bZ~E3*1S| mz.opϽŅQ3)l{9ˎV5攓TBZ^d߯ᒎl`Է {nb t{= jUt-wr.8֙mzk2j.\]>P&}"_TpzPxKDzxlse d(Mp}&:JCZ6}X$Du ŌfE hi-4Yp]ʀh>)ZkE~1OMc Y1l寣piu6A:ңh/1O ` M@.R{>r3 {3Cٵ̣F/]K4hpCQĢ~ 5Ʊ X%%g!.bb;ȿV2j}j@0ʎB4ّ*n{c_`\vhk"!5O|v')xU`ymvk7MU K$_E=5P&*2bfB[/޾3¹Y8tfE L&XGlRa3WS sVdV ֧%-sWVЪnOsڳݤܤFt p2Q~g;sB2گu(BC~3w^p-aOD7~oc5#ot[^.an TEܚCO4~serig譎-vV7jSkVdgbsx³(- l20n |:Q~-W{=64mMIz3z$JF5č!"C62^.' !zqܦ͟r?y|W1C)ğXΡXtߛ# @J"Jbw ٝUn ڟ,trM~s-j#4~3-9yjWѹUh㞁{z +讴j~{ʾa]Tdtt˔u6t~mO[ B=+uR'Fٛ.;;jO ΣwC 7̗_NtkۖA|Q)Ye\Ԯپ"( C˸r<ߐ7ؤ4a~-|gpUTBrX{]%m< jQc&0s=IOÝ;,g o+;jFY+y2dXVwyEl)}W,mo.;:+iSǟ ti Յa {F ̌KIέg'?}Fm'H/1~(a_mjs65Re2 4u:(EuBjPC*a"".߯&WH!UFY$im-ipTuzgfzjB^%Y3+_xf=nZq '{~˻_S?Ow:GJVu΢8(:N*qг7(:yrppIXDX8s'GpM&M<7g(Q &)bn :JM\lwry`wulԑTx5nIokLu{̳*ֈ%5 {nΜĤ]W\A3Wt/K/{G7?W7<9 ¨ mQt\>w ,YER215Z7Qw;{impFŘ1{XGU~m?9U}upRTwƌ"%}x4fmۯ$n0/\z!joS6ߔ4? TYt01Z{s+1>z$ llp\\c":6"; HVTzВsig}z" 7: 񧝎s~ĝnquF'~C4! v %vJ oJ~6 P)CL|*1U|x\ך!}*Mi=bf2qd$#$A^NڇU2t1o} ϴ=pɉXwk@O%vW3 Sk;rd T;;OE(O3̃U-F+38mGڸt_cڅS812VD ԛq 5re|Nd-ݯ&Cҝ3Xoޒ5\4bN]ɰKDIDအO|iY ƌbIDk]uZ+_0қ*"V^Z+}`zM+*1RRCwI!=8 ^ sb t6b{uCa 膤<-"l6Oqy}%p|ݝ&fsic- J"`K]""@P)" ")}/oQUbSw̿u׼qQXÂ$(6-H) , Kb!c{lM~e朣lWIi:oK+؇o8Skc~3{gA- o?ma5:=M /7Ee+1z1/Ůt@2mEƂ:%Zԧ&Z>)jlYOtj@ꩈ*ԱOǠQsL u˘C-x}_tGՔX{7Uw ㈤M\Nj<#5!= |HG)d m*Q'l3{TdW_T8<3Mi Fس!bΥQTm@Tt8^-e2#@۳L}Pv C d–:mzaN g[N*q-qjW:Kɉo`E%{;2һ^uSy!F7䨅ǍlGz;GiY9!,qAkGÂ4<G.?8&$շrd4[ GϪ覴;dcm/~Q`#CNeU4%9G}5yhD7[o?zë$NR7?"lG;)}g] .QAÀҫt -fIױI$Nr I%:;Gq 4\2Vԩ$J2Nsl&q|SמweB*|{W7U-[ 1~hmayU>5"v%J:C+\⑎^RAR$<*p ؍V>p, *j&\iP?=‚z_;_՘j3d>&vVF--IwIe. < o*VEwqLꉑpaXulC8Xj.̣W?&.O9"٫̒zY n%֏|&Ũ9Y\&߲ h?8i qಶ {Ssl"v[Xd4> i3}fea2qU|o1뫹5bO7;먐}eCVMk/2\uR!i;Yb4~QvFl`vfI٧[<ƩE=53Mr_ͮ/J#qx{v_ì=rA3Ϫu<5EmŹլJPޗ,}W rALʥS\ly>mfښNmٮ5v:AT[J)CEADDHPcg~Ϗ:g;dFpYH =T.=rlb!\*B[Ũp2YP\,6΀X:QQ̼h> i"S^_5F˙ޗՂo<#%%סMr驣̒p_xV>OV >5\BUenvQNFOÝA\ @oZ%w?6ꔛw4\4 >\'r2P'ǃdWfȯ;m Q"Sa!/;=j^BKaY_VZϗvz){c^cU+2:F= {&ĮIɯʇmI$%1N,¢M-?y^5ʫ&j)0_ilE|J`>VܷD- OW?9Fx)['Fq}V~Ȉ$7HĤNT GAx4 9*C w0lo*a-?LO'dG2 01q'fD*C`^|ms* `o4 /)Qc}[}c7&~]h~p,rWe k_"h"l])c.H: XV;`yWWK+b1ig[ʀU"uYi`>2,}6 ?/[&ٟBnV dvW#dΙf$xg 2J9E_p!_mtK'ԉKEwb= V i. g`'0C*ړ 6Girh64ᖩ"t}pU)&Z&H%9FrMF/5-աjf8)ȇ!FB)Pt]Okz{0AI,żteн }&ߐS.^ky?1㯚zo/fl*c\} #?;O;?L*̧g|&3rb/ۦXOK|Ʃ)hP ZϏ^B˸9T13dž)o="֫b!;ÈOF`j>ۥBlgDz|4 ⼚:xTO}%?)oI)!#{;d )iߎ2//]:T"6pҀr;vg(Y cħm`^#ؗѭGWoCLjYA#ȤK8HS Kڍ$慰g[CF昸Ib4D-R пOc}okol#݋ ֡Zŋ]M>2jٞ(ޔ^N{#xd~_뱶#YXt[=H=X`n$'\\( F<5U=.wa8fj_a"鉙\~*|Z&ޙY, j<5[_bnGD[01'RZOMwĠ| CsDmgV7˱M㳜*ң9tZs[ϸ[$Az>'n ׋ GAt)_ -=:762zk]vub}.{ã;ћIL', j2 6Dՙ!]᎙:A.܆B;F..$5|\  JkLIYj&Fc5^"(z"bG&րA,( 6b&eO8C.|/+rn&g&ĢVt '?ҽpd:GΒ7Vs ?:-澯%@ 2b7xGAͶ|5ww"=m=] *QjeE$q tؖʟ܀~~q׮, +O?:5_v^o[c@~Zj7\,};c+q2O/T vAMv]Ћ𫭅eq2' zI_W\O>,$3oO2nۤyϗ豷n4ύ蕾Z˩FG~{f--t:r%:&:/Vmm7Ű*B"-zxr^Xn2ܮ"a" zr%QFrơ91rGPrn*!{xr>ͭ2`K`YjW(r߱#i ;=QAL4^@/dZ|*fo$逢rbzlg?+K 7WmqgŮOSBL}ݦ<禇^KNfQ2슲 KHo}U|453/A"=daM͹>[@[ R[c#P`_]Ny6>_yW_ZZu| ,};8[7roU%+ NJ{wm8h^6 ML)p:G0;ZR}(UL~f9 yyJ¡as_a1V4]XiZޯj¹V3t3g*rBB'N}-i = ?z|6‚YZP|q]SoSO*FL|+mpiBǝŬөj!6X bք؋UW\ׄ)'kD<y*ô;vJt>s$)k^]': [&hHr)Y3 9uK^hf>=SakNyER0xBҶ usTvƨi5USB} 8~%-9OB ;>"A?m'Dvb<ʂMM?Qbwt88]#;%}PH84rMmWeT[IfᬐfWq?[*Bҟ/KZ'vƔ4{G,챹mÇoE:Psoгouϴ̝[ oCTR 3ƣYf |"_w}HrimΉ.9E9Fu%9C KU ?j Pnvw4k+.^A1a7&ٔ_޶r4IEUSNM|PJuw =)M#g ⮁n*A?JF QW)Arbg U b=t$Y)򥩣,҅ 90"~],JwSҐ6Y{w{Z򣞹Y$-+ ?,[eoMAQS&ce9eڲ݁ZiwuGsK}H]}NL֣aVዹ+K!DžmP2ͽH% ?}]{'۵\.gؚ9 9^99UR@r69!B%EJ"4\g>~}<=8JJMՄt )VkhUSN{mC]ϩdoHTΒH!\U0Ī|֐WoGG.r{Rr-ͱԀ9~I09MwHGo~AԶi$5/5P}]fF\+ Qj L?F᧎U"ǐ1fIi|*Z|_\yo$'gᏍm5($<ޏ܁|F4|i~Y4W~ڛB&ZN9^`zy6akW]ӠVU{ |*{ݪ/G:.NawZgG0e@PcR'1qsa)yAאs]ܺfawK&[Xճɗ~t-P +%v7X)) Xì:׵iZ%.eLt7ٙ[9+/HJ=rn\ 䡖xva0{*rHm"PYQ~쇞I'zaTî^ &5>ܔTH] ?wu.ƭّ3*&o[*sj /S_/E<+wOsWW6ނ^.b¾J= DmO`!d9ЊؐVn lRt,]h¿j -Pae؅ZkH#3<+|jD=Y59g9eN%:Jz+^-!d_%M~_8qboweW\߼<(&C g;0|澪8S?%;Cj֧8!~ƪQT]ym#7P;X*:CCˈ!S^TMG6E. 侻xt-kѿ07r?1߱aF=O1ۑ|^rɱi[\.{ԟ.I.x.{$7!8jIy $z* 6 !^bGZ2ג؋y{:YL]MwNf +`^J]G˴HA=K-Z?KA;30?M si%146!xsMI0bAvFP+mA:BSxV)3WF]5LNO2D(5O\ùQй+åAZXV]M<ŸE­1b2#$5g2j3=do*ΩjdQp$N5P5AL8K 8Jj.1Ks@#Ot+Z2]e68iu^C bM?h&}QruQ?&bx4@SNyѶU/Tm!v{&nx=R3VG/5QaQҊ0eM7nZ1l̾FH_KO B [^5v z禮cW5\6&:(9!"HLIVm 6W>>J)9tY kg9TA<ġ`꺪_h`fO3*v 3 Ғ;^?]Psu@U,/Q!EC~!<5 *c<}ag%BBIIKZ}0DBeRf^qԤ;3#SDrFVO&?>PjMu8l7fدqr}VX5^0;ͽ(0?dοu]AI5Rݝf8T4AG9;>qs t( 9ױMn {nu] 5XFM{18dGR*8al7*bOFLJT;=P ~bM ~j:]uguǵ 4E鄖PB + B $$J % )r39s* rVݮ'87ȰqHs5E,|V ^峃ZfFU`CmwT?;3 ;P j9 WEC'3P*dK"+GgH5|jxDAU[ΞTylOu[)Nˆh["龎 ?Qa#$@ )*ak%3ٔrb"LGά=\nf>99o] g\_c32F$iD8(2(]1/ZG09:fSxE )k.coE KG뇱cPrlbC:L.^MH%aA6&)Ev)& %my#帇[R IfUPjw%6Wvc[VD -sQtf!%=Iⷧp{ZZu'}4= FH=IA%W`0#s)cƘ b,D'A';.\6ݓWwe[ܒsrLu[ ٚgVE] 1YíI82Rn9<6@{ȗ{*ZO7ގ+ITͱҫ茳RDɶ} )&$;Yz,|x{uAGĬs4NW^X|wq8>Ciκ؟ U z)2U ϯ&&Ho>vfF\=GW$19FqrFqk8?zgvIJU4~$K2eC2p` m5o6f!iQOnGBJDo:fG 4>:+svI*PpY$}OB~hcjZu~ 5 rVH-lqZ5LvUQˮcr;{;Jj>!mH8Zb63 {j0.g]сi{v"<2P BIxIDplA.3˯ 5}i >2:z\}YgfFOV }h.=ГaӐZGzj7+]zF 9tTY ,sk#'[]3\Tq@Qlj?&akRPTqiZk _Mq$מu}K\k_ 'Vqgdkq@gh!1b\sMګfC#&VkHC,W>PU9F[F1 SgōwU{]jMvЊaheXT오Xuף$m(9r h^L[g)Dʩr7%)hkz>w6߅{ف̿T ~ڇxnI#ڇH9 ݾؔcsJB/>21a][d]-<$KЉSEUr˻^5vBl=D,Rv`{%u!^2wS!5ܯ&3Cc6(C6Iz~l l=e,=UbIy_e>[u~Fmt֝MMH?Ƈl,fU4z<rS#P+-̪a J{ѳ3G;h~]!ǢTlG٦'szٚ Rأy̛Yn(z%璥5r \CeT קkwM@hЀjpNy@&t2<.9OWHj'Q]% b,4ЪcaôGK%l vuz).6,?hZ,jiuO"Mg:(tN'$d#H 1!7]]vv16ޡx_+4?3oWWҽ}%(Y}]pPТogg'=-;A}ɕrc?xо + /8nAF.:5M~ /͢|/;'ogy!){ߞ}t,.'Ƈuc$?[ ^M'ƍʼn_;3}O6|"mE&v%'6p靀qP)jyށ!|+QXkKU[zBZƵS+ڠ̦+KEB{ |i]s|{=oed!Y~iX%; ḁ̂~`~ {ND)*nĬd:.7p+ΒT gCZqپ6 R%/8YvIMk7?eZH]lg:X~s)cv-@>DXm'>9Ec\韼$=.Eέx?Z=i$Vp@ ^ΎTH/:FqL[^W|caO2݁CCYh0ov 1͠˻G $Rqi2lڔGY &U2 zNX3C;sE)"/[gы? pIF nLT:ԫjA+f*nV=Pr '+fyT SA~7A?4ቖ[ï9ቦdV@yV1t͈BHzOɎ_> *m.EO3]3D-@֯[^&Yrf{Z~ew[N=h|͕Z7g!ꍏ'Ͻ͹ Mh${)5o5:COmaXPkV@/Z"iP<~| !Cw쮺:NjWK*{~;;i^V켧euas-f*f@B@N+W5VbC`ny6yrJ*dˠy)+26HNomSE'E)_= $@g N\mIR3WVD)!B/E?kD`WplQ#jPu%xӛz=`lG k؊YU oGVc?KFsfuo<6O#C' o&Hފny(gbݎ3nGײ;(RbIHf\K]èP~jWEu_\MwT1$ܫ˭Z ּWE]t9aM:[ީ+qۂ(gޣcy'&lyQQZ̋řU~WlcN=YdSL6S R'GfAw٩++Z8PrD n޳F.CVhs~t`Η)f7Ul 켇YճvBʖI9,♒ןyR/E^.jeQBH贵3{B&]ߦG?7B'E ~'vDpF)}Sݼ(hVQc>(rnqV' hH n!`Emցꏷޝ] j1SD+{" i7;U=ѩjݍ\Խّr@Ahŷ z" NnP!T: tT.cSreY A Ԭ81#c .H!huݘ~#0V}~uFROV ~LD;/U⑔G?vxX.>5# <X"OBXҠ)"y֯!fbF zBKSFFltaJOv]8i#Q|bf߀*z3\̂ze Nn>ؔ2$u /H]-w?k $HLnqD+&I1(ܲ lFN,BѬ{Dkgi4;pUK_;*eM$8:eWwDX4Q V mjY$엕C24H#*Y$d(di-g:K^q]߸gf?Vώ?L*o\O"sĠOۀZ@<`E}鸽@ysjyhdz@ >m%&="Gٿ{¨7B}Ina[ vw128J0K{<-8Ш.Ωe'+k|`>|}s'΅Cbuf73|H2[-=I}C}>ԟa; ya v(\ [w`onaўaEYBoꋓc<ūﺔ澤rA;X& ٔSS\ޭ̰]@DQZvHk^JT&<^KǺhaŝ j1XI |QIM[Vą2܂(nP"8XLE@AHӫu+}}^=O}hl ; I5 7qk.[pU 14"`ɋVmocOv-ȁ,t9j,v6ʧMrC :IKM `B(8%;Zb^,/[4^fwItQ*Nwy, -Z]wjU튧K9%\u5.,idu5r2x3;HI0)f mEc?p h^w0}R;ٮ5=i]X4NÜ̡9LlRScW.UxM x³ gŲrXl+Y7*ku5fne*Mb%,`ĥ4 sTZljX;V-8._ZY3;`x brԝ2Hvcb64 M)BLg5K}m@tˇΝ #.̶Q&_wO sh;1Cj FD#@>HDQAxD6v˞p/*m_ξ=v dzC-oN >o5 qN.6g0Kb+QH,&BRd 6۳ǞJsg##{nllT iw|ޢ|^!* |<>.y 4s^FCұߵ"saRjc¿\5igX=i$Sߔ3`GL/0~G4: ;$C(* րPBz"v^];yuVWc.t~^M+qo+drVX\^!3i -*b=fNv4ךe]9Ku'61&۳ǵ9M"P1!Z^PgX^P& yQ ґa;D-DǼ r@7 =BbP[=OZjp}ehMJm_iڰنTgtA5[tu3vp-! ꃭ8zYQP'P[C z%{Vd *;[y˜cHۉNѻ55#,p˥8M~z~3̼ a6a дlQ@KKȬ]<=qوLIĭr̷ #u#ͽz @zK< ~?.gD&[ܓ`:C`\ $dشʿ=]IɿU:J~I0_u^W"yo&7tIi4) ',h&IYXێ >>+,ِeZg-0,!B%e8MEc֢v_pTbi~B,w@`( aj;mY][ZWGmzy 0A]A; PɳRUꟅ/ɿr F.#Y7zPɽM]uޱ- JŹA*+Ö| ]9BYvtS6wKVӴ]gvŠ٤ߧBj<%hOнSc ۺ%?"5j}$`9HHă yu6^al[:4~A(=J"1-mNTg~qLUI]v$d5 D ߳1ҳ]lږ(<5cB}9 $u tBʤ2Ch֚, Nt@ :H^;MtmEhL|p#B)NX$0!1CFIMݙ&割ZъFݒo"Si,-/iy6. ((m㲐НE7+k|"TLqwv?^ȿPНj*Q#$b@rYð2l/vݨ: 2՛:CWo ߀Bm-mKsc$pWh ^DEa3.ђWnsV vWoaH<ZFMh6V 8X;l03ICLdia.b;*ٍI{ѹ`/} (m$Tܔ_uы(I uh4E=bC!˚9k|` }roIl:J؝h QYqBM!O7ྺ5>_-zO`KtniKٖU 4zT"tD'Zb֫I:)w\JCnU}frؠ3N=W5PLq.ZǮ1t yn% 9MQU Ln>%}:|k lD@^ZORD9'-ED skoinzk *I nzDN] kH':da+5M,y^jNP#:H‡i ?bj~54d3})Z ȧ^Ao.# (rJuR*YLc BCXjWF+`\ 9{]\&ڛg>g/ϗU k_7zԵi4Ⱂ@tFUPZ,%X Ib8܌UdxOI},eA?J5\Hѷ`ѐD7Y3wWx0{Yj1Q21b~4(f)ʢ5>8:`CgDg,6nyxax)ZXd$u:yYUbK9*dmrCJ+gm:fs3%ʺƧBCQ ޚL/uD>C>Tq2\宸k|@) mpvWA&NՋ|ED ـԸW 9$w?,tނkL)m)##ogV4h Yge>/(nS06`죈69f _8+pOԞ}Y!TxשK~%TQۂJ2|4@mˈ*X/68MDlxf +ДR;Z_#ƌ|dDJiM 'I|\F\=wK{YcC<+hG[ƥaNtlf"*pexvZ&y{.ݳs"iOcq# 6|9[A#'-!X7k-=m d.[;wO΁WT sp'a w"Nd]\RT]̛MbCPd-s'1G:tUT{y␯Ѥ`e2c"v}gS^sOrmp.ӫq5u`gvDW[@:5TaA P`^]Y_M߾`W8ߥN=|epr7)>T*[.qgIH}ZM93(ؔ76bz=֒@gs}x! i}1 g$獹sdbJb힒:F>㸈Q8|svɦٙn^+?'ƢwT{-V籜TRS[#2:'A=rof㸔^@>c -'mbL.&mk=eŮ{ᵮGW^6;5d朅p]nL=piKYzZbw½ d̄ l^&!蚸O8N O}S)sIi 32`6.f`BəozP~"ȃ#)a|(cgR[g ZPϯi>,l]?WDuMZsY0RSaLP^lcם-7洞o_DeҾt( xy8!ZYCب8Iǿ[Чi=)gvg 4;w$Bkb_,k-qw˷ Z] Hq55TM|w*2究&*{H).4=g6Ml$*%] (MG$јXJ MĂ A bws2E_{~sGj3U-x=AI>[Ɏv ޲^Ec]RW{曡gmqRCBNMlVg-uw恒w#R# :FUWJ]JVgjg-OW"Yy#]}1ޖ4| ~<-;KpUV? Zb Q 8ȯ>%6u[RB؝wLfSuPOSs0v1&2\>X~4zpb3rK TUUzaW-q?6t EXV*vdԌqB{ ڕSͤCu6R >\3Cl2!$%J Q $.XKl1I桊G}[󁮹p.6*¾se:xUpt=-bSL(_Xk|[ӂF.h7}T}@-qȰ`xe[Qpw¶ˁPP:\Ԝbtڮa譸)$Rls&9&1Nim!ZӅ &ۨQm__/ڑNԢS-rdeԍaḆ?:@NG1Q7P)_[/Ͳ|FZO f%6DhH Գނ_l4 5Ov$t%!ASLN0B?X% ~J 9QM兖[8FQOfp4 F>RaA]'KB{m|_n|:o:Gs,32.[Ddp-f.)9Wڲ k/~7,rLuJz Q02^U9/.T|_-y$\mydSv0fsywu%d^[JGK1N5ecZ(OŠsLjIs|1x(>:R-);5?QC庈8ٜ`# ͵{ub=KH+cg.AS8P9[it<୕hcGؠ;jV zSt%>/RL=R  F>(lWqs3#|UHO*bB죌T]GgԔ]Y]urOu[uxod!mBRG(h;2hWV?McsBg[^mFAquGAzqQZXca%ҿI^dWαK!Lg 6/ӍQ&W^ғH6ӔqMU`gublޝbzܽWʅU2<Ӓ~e>؝쐑!НIJ ׹.I3}gVƧ`4}}nYorMN2^մ9bcU]a@ϩ wIP^&؛!5M cm #bRo5U(I rWUWj){lF?{k T[Ih:s Axo&sp}}ݛ'k|Fl =64{CƦ9Ņ1["tž=Xyc;߇5.Gqqvdf'ac69SuTR訜"犜"jr!gs_{\cK~K7Ʀ,#Cz?]i9#PYV}փԐkӄ% w<=y{k:Ii6d]L)>ow<*C6HA&B=7IXl6zUd,؁}1Cfb'rHx47pbI48.Xg"qwb.ij1^skac.AUqG~3 =%@xY.twcW3m/٩k*c~;]y'*^} Hp/6{1ABrSz Cn sG\m;bv#0JpA=Xqzm95 B~Fޙ*Ot.!DȹVjg \y7GMR!}:FBw\Ɔ]x>Wkn4<<#li`f :Hך+w L~w4-(EEH{CLņ\/Э^xk~&Zef{g4B/^hv3tdB3w{$Vہ Hu!F;~rȱ "{˹16ZB?yV:Ti¬xYm'cT0?XHr) 3Wh3\ZQ'S<5Ǔ%{P ]puQΣ}Ϯƭ|!GF8,C\Gէ!wG_^uD9O<w8zq:o0?Mc()jc E¼8ij9|@Ʃ_e.wý]^#4s+z r.GO0IQS)GJV7yN/, ַ8Mcu*ࡳYFj[> :$Dy߃KQk;IMw"vy@'v"_R}L_OOgk˳*ߗ-w 15bOF%Z!BJsOɕ5BTdF.fa^MF & -$p0GY0MbTYݯYOMY>' t?[S4HOo w] е^YhP#YZdES3s%Бb~dlsߗf<$~ղ}d\:쿆|YƦԙ*%ąoT>)AEI~r̭8!l*!.‹;󕑎 *8a)/G8S`C.BΕB4qn%>=SWnQB6q`a|ZZjrĒXBdED)jZbMH"!"d"H|R7<hE:LF/phP@'èa ^XS%ӄLyf ք:MJJY.5Oɇ#U@&3My%n5T΄Xg/ mu9kU~fEșcl]X.95>UTrK*酿[Fm}YV;I };(d 9\a§yu8pf灠n ɣ7GYU)6X ҽ\踬k=cBH+ XA'I)zSι qGqH\Yj.)Yij 3csEiDyZGzsK\r@ņbnxqQZ 2/I( r=zM3fŞNR=s3 `]t)9껣YrYjw{H=ۃLaCheҗ) $m}.'펡}'saG>3}<7Gˣr2ȣ ǹMAՍUQRA)Vo B ځVUD??#js[}k;/ΖY"س( 2.R+ fPq{y.Voi8!vo򮗙Ӆ9O_(jLr0LK*jbWK[%'s3s5dȕTpg`d *?px9 bRޛ*fyib.CA9 ~i1%=Ǣf!&nzrCOwW9$([GN]O{5U;Eό_a{3Gy0@v '۳$(;[bjSN;簉Wt<`^ iY-- QV1?2!^#xf2T@'߭6LSmt9L{TB~$.y:r'.t<Ȱ/prm3x$J`o]_Yf/j^cTAÿ7vcwqZٲeLG{9's5`}?>mZO0b!?v~_ugZx X;Jc%ePcչ/xw^G1~l8Sa0ElM?N'7Elb\ w[mq+Ide4F[Ow-Ւd yAv)Zb]䅆ܒZnK hek"`Qe uS/Bg5P5#_?Oe’IrԔ;P$RS˙?;qe!"&[F+BtG[e_w,.Uրrk\u j+NBʰ\CI"a0üI"ph>PZl<7NiPs':Bv]˸Xo |f1>4AKR+X]!hiձ"wݩ2R݅];DL 8$.V ~ѝ{4֓=kdV +'19b *J )7ucW2FG-P` <v2&dk؅ 8t h_L&hLS"n Bc\zmƞJ+[}dL&14I$,"H(U3i *H*vA@hLpsZ}kF ¸ jDݿ17 UE*ؚ =ó쒀\>0붦XHua}$X{nwn|$3{SFό.Ja'&g!?Մ+ O:[Ethnы}5}$Ʀ$㢒KA Y2렂퓓2=3ԌK 6@.~k+)c._yh"\g`tceۗZxh 򞱱t,:5&-B +逆S]Q#Fn8.]ou."g.6 慴"D3*=j69Րn7卹H21z[L ͊j:zGFxls?jaM u) W$gi`&qe.4G-p$QīroJ0 /u%2\ӿ 4UDU#/s7T?Ғ>MO}]QlMABB1$!p;I? I wcSV?&x /n U\xkBN @2rF@9Զrʴݲ_*M^ߞ gDܪ%I_#6׃l y,Kpb 0 :Yqns؁:TA )!o?ՅwJ{1AD[_]r{VD&*:FjRAOQ콤TuS= q134v c䕞֗k J$kft,d$*ən9& (?*9J-`Gw5u# 0OcgD!f]0(ji:, Q*hU|):m+# aknν#j)ؐ76b$:KonCZJ~mW N%MG|RDF*җ>0G\X\qdCױt7lx" 99ddUB3 A#'hiKiޢ`!1 &.pO JF!52/m.u4|Y{*v!ػofU>bT[I JQ/VKoFdDlIHVVY/~= &i~e=eeg7@=9),CM=Ω֚ ^! .Wy7C3ёq{뻨:skKtQ 8%:Bzpus&9h-M9-c[ X85%gv23S\y4RGGy&lbwNXN>+"rD4 tky;Vw?j'EtgdgmFwwRIߍmຸEؚd~5ߍ8I>n`el+O𑧝-]-9>X|;{1Ty]Ӓ0+;rǫ-] 9+`fWFзr#k/Yv,d hKGK{9s[{O^b\GʋZhk}tے3g;2, 󷀊Y'\ikRpv=r?ׅG+i2d>")sxGKb {Z|퇳s짻k:f (.ӷ44ՙiLdYLh416 ʾ$&""* H@d]&?d|>9ݷV2!~~X+yHE[[Van5dK:EtY5=e->:=t%&椙 ."z1x^&؜?ƫٟo0aP-d▢w&Yn o ,O V'\z|v]5^ٹ&!_-K;K=,KL֟ BR|^B˨s-:Yաإ&qշcMu\(zp&E = !3מk wܗ4^ 2:eҳ@ .v!e؇f1+MA6D\ܙDe&% l}XO~ +%gVJfmDNHYtO+\< :UGQG*pFpvP/s Mc >5ĻĬyr6|6V̍OtW T Æވ=6PzJS8bK<ʶR{;+{zݽ/NmYu"/H/Yk'faw`ݢ=ֻ@*iM1-ӻ. 92ûϰO\+) 9qhT?:^%SbZjۗ[ܠxȩ5 .Tu #T*\em;^T8*DCa2_!.B.*CLlhke}=k%)ߘ!I/M1ik7-5: A;! h"YB|M P9Q]{gy; 2C u׌\0BKoYi Gaz1IU/eq-ql§mإA|KɇoLpIB4fDɿlpI&7eۣPћ".ܾP7њOwy츑L8w\WQ0O}J@΄j㐴0 ͿPV˦%Tm%RyviO}6]7&Ms-5fdp6꣥u` lj&įdh5)W?_ Vُ CHɎQ2h޳ &qޙ&XoEiĭV*w@qPK[wB>Wы]eʿM܈jyQH@%hv<8%5XXKv+!迌)n|^ybbâ:JH#na:fW>9&+@7SBaQ5by|xW9_]qTZeWXu1h2) v4K֞w>KԇG+@S؅edž.BHM-*09])TB3:ZAȍܲ/ C'Q5tҒ2Aol?G^,ë&$xGQ>e@-)m'*adg7R8o K7)m*;S\Om]gL&MqĮ !^CX#vVІJBց$! $ ׋؍ݴ?ztg9>qFtnɌC)+Tvh$ŗ >.t<:]'_(z*̍Iӑ3m'QY:tJ::vǧ9Y .b FъJQ;'VB!lYMfJo Ol 66t8G72?\ԙ?foqkc W?^ )%q#/ꆍ8dB:rL-H?|3bgmq+ ?K&rܽ}xtomжes0fv pgq9 x6Xu#ӨL2=okvڡ3Up.;u220d_KRpa>812w湵1 ?GG鈈^./0 )AǍtRG<OW=5um xUu90լOe9_pi [17;aO-el?k66欌9_6 *_==I}: ɯ8I37={Sr줅|| uˣ[sOT}(8d"|p J'G'TDuwvr@#)F)-?;6 WgjNxa&e`7} Am)3y!72 =K =(>nr6.%a`#z^뎂U EP(' 0!"6d63JqzYO2R+r}XmR&50o^~gSU1k $L|¶UaY98ƉWҰ;#2*W !h+lBXϨ`VP&&JYLC̋ip?X ;at8fn) {J&WttYw}ub2~ Nm !fs]!5 +k)?^cAfRЊP!Je1%ltxs쑑s}rfTlˆ|0U&]PyBį v;u=m 9Z09-3zCre{G|,Uq5;Yf..D42S[WƟavNM;xM\0v6,@j\.8 1c:5@PIf}v]{5㐲J~h֩:Orn,Y).U950OTAyĵ쎭hM.x-ВtըgHɸup)(ǝ gn_]!VZuy)#2} mȇJńY'BōѸ@m&N[/G#z1)_.aZVvMG]b*4Kw+wuV/:QO.CR۰4:K@/{a!V'Ov_&N+Jʪ!f+ef!.Q97nbzIμus02Ϯ );|EtPH)b ei/bRS8/Zvd.9^ۚVw:Mtu[s N.3ia7elGr:4 ̃s-v?^@ڤMNAmRjps똖p=BXeR@S)e[ʊ.TE:A$1 ȟyŢ׽cj㸼Iwݔpkr1햲 s{ Psť[Y=ؙwB7P]ʨ`Úibj_ ^˸E_QVboEJ]<ۄZZsvۦ>,Fkٚ.Rk*uaMظY ;mhNyǐ/5DZ7&lH՟Oq-mZTKo,;^*#f&:$LU w&äKH++T'a͛mŋ֌8ºRIZ$^ -U]*Uim%Е8VӮɜǣTP3kK>(4Bݟe୐TQ70 ƍw4YL:%ÐTr9 ɤ%ol-W;COִ/SBsӾ_~ P>m i3 5WSH.y>yU#JUp+`< #{gu?aF5?my>؞FW3x4˔(ad#FnG= h~>4?mw `Pi O.eAǖM8)]*JY)<PӾQJt~;iංs͡w=kՐ6Ý9fMx$"e7*%:rI> s}ʍiMӈgw7P41=3F%8Cs[ nS6~}ǎ % 53`OV' wy_Ç.Fq)5v-8DЭجkPZ%uP}PgJxmq3EPB{}w\tgeBP]˅;Xt8RqmˮѦ7.ǗYd6){yj2{sv/v^f%Gb~>;%#D.بb"|uP2qڗZ3sGL?]^4Y>zK:Dd¢W.*")?"ReC.: +Թ5Bg3 $W47|`YDŀue]-z@oxTI&(2ˬC,BTyC,ήwW5{zNSnOmO<bzRSMwSSiojjʮJkڥ-K[Pd,D'd?&+j+-K0 IȞs8|Ź=Ժ?.p"J#"_ϊQ`+;aԇq+-Fi_\+V|ۿ)Y00= 1g'ǤdMjX 'N)?1A؍ٞsSG<"ߏL'g+GSY쩴^tԹ"r=?1gN9;*FCM8nط!b 8|\g-RZ.iSrkcaԽH i9bF=-Xm;pOoYKmJvT ES/'tèyA=5-@DB&Q%B9XXQ@t2fqUDUV<\ ĆR[Z ^[dmRz;1^M%nt 8ތI\;Ӯ٘6)q[9^p+믇.& >9KhbQ ]/D%*ğ7=kp]~uDuHa*m`+/kR?de\bR"kOK3e'D,ؘ-TWHAT:) 5P4,\7 pT/f )= ĜݜE|şW_:%2I9b|TNRrjy翽OiMAX7rr{fqO< _|xkz˯>-jS.;%b5zR5,Srnh|?6$L*FE϶G "\\p:hC/,A,rJBljHi3@hXVQ?^?ǟSk.N?;!<žQ6bZt jQe@}>ӛbXMqwǠ n! BLM=973`ڡqwu&aj)a:FyCU_;*ZS1\(v%c{T@=eʵ߰g͚xp,pFО5+Y =gaz:jwX3G5y]d_lşʹFBϘHQNHλ 6 )"U/bǩ7i6g㊌{z&~J+FSO7r6 +Vy΅:%95TtRG<ǟJoms)2Q?~ p0 Īi; :2Qk8-rWsn)sIZyR ,wƦr'LX$CJ+f̴gR6.Z嬕ܜKyFr?;&f=,̾|*cu_tK U}h>7OA.iY)h3+aFí[x_tW61ЀChP=}p`]<]# =_F{WO 6vaCkQ :fզu5)A1h]H)zشݒ ;`)gF!ߓw% CO`FPg&dC,bɔݺS QA%ɺ8ɵY>m9EiXMkO'v|q0+i`n95%\ȟ֦#$Dsdm)=fks~}D D!8,f;p-zR-I9)5&DYðmz*" #LۙY~!. NW}OQ_{=lJŵёMK$T9&/:9IRƽw gR1i39vkZ.Zw:9|Y^cϻFQ`W=Qvr苘1ܷffzG쵐\uOƍ{e,P #pn}b*eQNAC 7ؒyvYhsjJ[9 x}׿w;b V.L,ߜi6 xӑ[=(u0EHD;v ] ytvWO6SLvIsN~oe \L0[Ŗc~]W,DpJ Nq6Z^c2A) mA2c`5FChJXȈ@~grMVnmC^_Tj(`F,O0+G;oP%:ɭ3;os?K;'9+FYDFƈ~XEI!53aqaSjYM'Rus;@h(5vK#,Tt9 a5^jV[oeT8q t}L 0wQ&jrSWpZZӐx^NK'-50!%m̓X OC_w"*: 7f! SޠL9Vسٰ?O-jBeXOy6^}qJ8iuII/#fsPEɏr.ȫ|XױۢFVl瑲v1HvDZ_4ƌaRRy{;6aQ&>ދl!1#xw)&A ,!V$LĊ&xK wj-#LU~Qmq%oK_F_F տ*DA2/wL֜+ؚmzFLdDʃjbS-8Y02f2vŬ. x9YuG?HGlarf`8.b;r`XXFj\BZv]ؗs9|ISCXSN`YL i߾) |辺*ep4l6aO}`U*vsP-@#EzE?- }=zQL$c%AVNZl L`{ݿYPTsy, fpUB<\&1)el?\izjm^A%tԇ5j36 3f*N܈vu;(.uT lt[N.!f`< `~)!?edeʩnVuEMd'Yț}Y j[v*l$e!J1ssu10EXawRѰ^BĸyO.} TԌ&ů .*Z~gi5B8\fDua5%icfqվj컺341r51f.2uklC1y&07]TI;KhWruMFS"ίHn]\D0q}46&.p_Ʃ7'e欂~ZŬYfUXɬ˘EԔ$'ӽ?GM^iY5&nN܁VKI bit3]@}xNPRRo峢sK*WD|\hZ]y;x耩 jsy;ZY2R$eziE\E;\G'k-#I-xЁVX!U{nV (p#:փUN`/IHP]iK )#jX '㠇!5`\(3}[qi:VSoʟm9V#x֜ߛ2q!%!h/ۙVu,l14RX}ܳ-ej0idw5cbu$BJ&b^itLl-D+9}NvwPnڜ  #*F_fAd6ⴀ^'l(5;aa^/z]D90[TmJ^SXi>r#BK] bJ~[\%&YeZ5kPiߛ΋{N0QFbRLw,q]ϕRDE*x-Q_a=%њ?yvJD y-o!9A {93(E5O$U#vҩK)-ڟ1=DSJUt?=,أƥ0>sBz!!TiuKMn HТS=y^6ǵ#QJ!w?aQ.JIX%1+M8p=xusod{THYL̺QLE48$aA\n'm1ߓ@^W#nM=mwŞ[#F AH,sfR+9ޔ 0~wZX8t p٘ZwETT];.(Z~zp,n:SY逢*O$p7xؼC+ -S-xoh~h>\0 F`A9#+g2fjujR^v>AQ{DTw ʸ گ3if} ]oKkΦWNzw?$h-ۘj-*Jd< :c{>R€RID ,qn@)VgBr65}pyKq,ȹ#TKe'(Ufss.۬t|؜B|  G"zl.q\'< \/Fںk:9Дkɋ/1:a*-nqP[=C3%gYD`(mbF.fd6c)7W{(ϨwiMC2LɧG&+Nd*KV5av۳PEDu6^=17m; 23ŒSY%1?iPGiԑڎ<1⁻ u5 Ō"r$$v#3~~+攋1\~pED=q K`=b1w캠a&EL/rv>6gn\FPBpIʑY% ##cKԫ|~2Sp"%cQ̲C`uxReQ "Ҩ=A5nРF1;,+RkalCQ] A7Uo~]d{V`V|rpVrx{F:q3\[?p:T#adӀU-d6Ѱ>I+[浝\l,(ht~_ooA Bo"x D!7A Bo"x3~ 06# endstream endobj 23 0 obj <>stream Ho [-E$[e#dI6uߡnRX.EvMI4l)NReI&E].)CI>!@~bv3o7w?5|D'68 Nmp"laD'68 Nmp"laD'68 Nmp"laD'68 Nmp"laD'68 Nm9"o±zN ׋kx#)0VZTޣR :j@3TVV~Xx(J~|344*ąEg*.*++K erʊJ e~_σBC(Aկ_O"Vt6EՖ&Z49Z#ˏ*:{JJWEa :/ Ҫ/@GsZHjYʫV47퉹}逺/E{)?K:$>eG: QYė%u+5ff巪n0>]_oQ,ͪڞ|)ߙ%dueY=RN%:hMK&,ePlN{:17z1,~?j&0}m~iuCqb{\!iFОCr*0. S]hs҅6>{$8nULԢ˄p"R5=\\9W>22 KV޴irNgJT3mڟ*]ڞ,afHz2xf[M C㵠I=>FI.l3D3;lޢa06̆'&@=/cÐQ2j1#V{iHp*l݊CVkDhnlȄ]}sd߃owU:K(]ϸe t@DWk{Q:E%Wvd:1R0ɯجtHE'd"61q)i 6rդ+u=6nOMH̃ >l$aK\Vn~[E.2q#겄A_I(& u?5. Ƥ\N*`+7@G-X~b:ܴMQL (B֕J\EYp݁熍ip@ZƨU&]=/W^Gݹ=' KxkV^bIA{AǴd&].>[w4Rv .ep=e|}33a91 ^b޴`IXM;8a3WE8x E0/T?}{{o/1!\ Z*lAUE!_'Hc26Z /66Ai]bYM#ȿTGʟo+Ȋdvu|;5xɧo?$Ԓ.9}Xs_S˸0GX~7GRK{uYpd ^D1n~ad؄\P'708>MOʩ$\υ|DυT]Z:$2^2f%3[dȪMxw B6>߰<7~{~njb0B\Jkdh}J~͢wNگ#hg~Uѝ*{>iނbƫ;X^K> ~?kȀQrƟ53zp=faD!5@! 1 GJrQd6bF,5Ld#F B4aτ-Xmn~hgw>8w+OU:5V[-5ɧE/5ksF rw1Y%pfw^ِGbA­Ʒ" {LU}Oung7>G'F<)AMaXGbKʭGC/!דAjS ǟejp-ffdqAD&Cp$g> (Ը r&VW؇~{|~˒[Yܐ[2벻St+&h;|=s[7q)._:﹄npP9Ȼq hOJ&K1ga^utЏ!􎔉 ԣ"|V]έIn#p؇n|ihy`dVyц̜_e}}q\/=O>eE%n˙OFyG~Q;GoJll5 Ș43-c_Ox5%(i,.+H۲N`m9$LƏ;I:W`~-U( 1IBomTr!5fbF5J> [W#tjl 'u_֝w:7t-&Ԃ.y pCEedHJ{˼PpԏT>]iy97.lXX!:n1\&_щԉAG;qdCXz;U +¶ J1PSz!m3qa/*6yYl4 yw F37+j~%n8_/eމuѦSމy'f95v;+r.nt}>: 0J j- 5C d{aaej^zY N/_9*=?rw( .$kFژWb^؜I_?TЬ[;uՈm 8^;kuiv@OpMUTlDƠd"CCzHfЋ0JP^n ʬLn)#6k)c`U8'-Ms)Q'FzsioW{{+@B~Ф_'o( nMaK-a>UnO5C;tJp3ږu oܒ;7_捬貙9L⪴5ƭ߇|ߝc|kvE0s 2 \;X_6zop.G>ga,G; 1%}f[[Rtw9_eiӢ,nʻ85;?yynǮ?v㢚ߦ6W}VC 2MЙu nm3.)dVT9` aeK%UtB%,ET<" .&6;̎OTCDD}ҩ*[Krit[oI{'"!*Rq=rxj'95Itl&JJEe*d@<ˉG@' f &ʁRP'!:Q%4 [@z]KW]Y&2k@%i+E2:>e{R6۫;q: iUI M|FǦ>ݵ>&gwXbq%16p1!+{ Upow.12E)>5[ M-mרucd{G;BeD˹˞gzbLnV}U_uMͫʫdH[mZ"LO`/W>iEvV^/#mgQNcBMUvW_!fU^NlT]-0h=W]ޚlʓƃzέ?>ԝj rQІ₹ 2["*. =/Ȩ]Јrs)<'^5׹ƯXMLlp|2 ZP5+/ğkTٸAZ:QאZTk 9%F(8aeC'e0rcf] ֨xOC s~-g}^6)lB"c#f}i빒 TN/40 n@LXw)˸\\]2̈z/e'R#|g)A5_āvfTDLupn5wy}`ؙP<F vTZwsQio`-R®_bU_2\q9ɩ|GĭLf^118 m!aֺ`rpM- dm3|xq6`)}xZ^?i[?@7%(xkq.;+ڏ%Y]*:61] r{Ș 7rQ&4qK'm䴅d7Vd1qiOAV3 ikC`^"f r drԁ!~ب2A6t2Ir.- _]+-9LڬzfIp$8XY. qyńQ{o(5˳!uM9~eF+M #m {K[伩#wΦ/[< ovU䜩Mؐnokm<9D=iyrO;:>{3[GsjcR%^pnNqmdL*jj6|nOjР+I9C領5{T1]47KNclwhj8fs.JRALKۺ* t;>EvsD콄_yao *(9ɇW" }[Nkcjh*~hL2*qfPgc>`c33g Ӳӫ/Z2!`.a3Ŭ_\N`c.X}SY;.=^ݤ"V ng]n8Z6rS#.Uב$&$qJ 7K%-FSҲ1`u|sLE!?}n^ץqcG.Ɂ[*^CF߿RiI$\ cINAH`cS 8' nl%úf2מ *.P.6|795&n1xfgzM 0ό ./Г.q@h`R-*-g6>N4џ$_MTRN _v !SKkֆ쀕Mxbe.D G}Yt́2)M{q>5q/7ڭYҪq]qkkO;o;/Rng}绍i?t_ٜir?vGd٠FHk\j. NQtwO(o÷Up[?6fz] Z`tUQ)ޭN]8ʃ39;NdqO]͔WNd5`xa-<~7r r'm'Nv^BI:2'ؤq'U%BcqGB`J@j)DJ'$:.W[TA8yjvL끗LK@LD#/,FJ5B : ;+9q:kJA=JFkgcN| )z4ϟZRDr+&cY-H(<,Ch$1^ٝXi:c-!{AGJL.R&UDmr^%2EHk d=92]Mm (zIs-7}dӡ|]/|h|aoeʎ[&,wr]jT* Qq)bsYɆqhUB:LCf«y魢ߨۘ7an`4f[fAi秗\&잚b 6V8sy73n~:;U Ր>x(sV_>R^)'˭/:.WA5s9yM)i[~\Pa6K>]rN5pQj *>o8WtK[ !*1sihه3CJhŤOy,(սN3* πYeB;.M&l{X ּ_C`tT xeAQZXiEtXUB&*aA?g**&jR!~tLG)H#+Q{6qH4ؖG'zucW,[&4rǶ<?Z|1*qLQMTH~?jeRJA5qڟf N>A* pFDRFՂ_'. tȀ1Q޼"LURP gMpeLh.W Rm7 z#8L9jD-clSq\{@eݢӎ3ޟ/96<WLM/G TFPI>>'CrX)dAP%h.dk%?&~We%~P`[|o+ ==+3Y-4 C]},4]U^>,RaRʮ_ѱ mɼ;Qt%4uiA~o̲9-۶:O&>ϔGrwoqe㷞3` tj-- Yyrt}LŧsGR=b/tL) I[} ȰvX-(~p:!O [W0} O0xGit`n^mo޻y o #~U)^)ķzА{(Dl%jRFwKv& XҏƱq'{"Ew <'7EkM{k692$Sl<6..ϑiӁa`6zQ0(] OMKSsURR\GX ۬`Z $uA"W^qK9ŽbOƞ@ 2u {OScCl PɈ06] A;b7yĦLhq숮bYqec'Чd2ZMYITWd&"}q\Mwysɫd&KBq6^V$)cp8 ظUFV٢Uq/ObI[|OW.쵼v1[jlrX;) UK m ZuXsz[ea z霭4!ӥmrЍ^8NCfwߨ`esjλ8xO4b 5Or6JgZIT f'?R剋m_RHO~]x8E[5L"/?u6#~2y [EVU?9Ŷ?YB)kmb.!܏2 yfcf1t[ELnu$tZ̏AE:2P!R0SkՠY^;~Iia7vuaE2r8B{4XnDJ̩bI‫ k'5eQ2A̧Lr4Ln1iͰ_Gn\s37#\XNGZgy[|Z3Ș92%{Bzahn sQz )IFvsR$?㨙K$~tJOCv YQ >7OE@l f H 8E&YB|Y SӞy6qKƤj fV7b~X%Qisjj%9&㰖qxא˦:IZ]e0VIL4L ^p6+iҮt-.N1[XwGBf~vѾvcCL]]j!<\Bu#Bo\ȣV3NSD"LjawP/3O N80oVڂ82%w1cmvבJ y 3 }J뤤Z~GC1mvŜHS,Fi+IDyT`v6 C{ۚrPzO jG3 z MSf_~[z6rE~K؈Lfn]S\.t`cΆK파V1 fA=zŧa\B{Y+̂:YTZS֩i#}BFuh5 G^ tcSsm xK%Y TX}KXmKBCCHe?M#|z~{}UT&a 8rh87:F]e;FHkTYh*a*f7 i'dI&V-7 Ќ1U?O% AI&ew2JҢR > yrYЋX\;~**ݚ燀u2nNq4N%cm#QER7H-NŻ5VX%qUڒHQ$)?q;/ZU#H85"9X  fkq@ki5+ bl(0 AMyjPg#Z=ǟ6&ېUbxXKJ`,7'Yii#xQ4IZ,xP-aqd#fWwfFՖ}`3iՈ/~X5IIT_UAޚn)/ U{vVG>m.i-'7 G$L܈v =_^- f*/ jR]CyƧªČ|S~3xlگ+:W†Kv܄sf/p1D 4U:택M}:9X'V-6zn*ܺ"6TW,Y 3-l ىXVQ16OPXya\epI v6bg{? {ĔKc%0NHtzKWB>yJpQ29dc=Pj_})C{,A|ĐâtXt{=Go_//W#NJL>j)s溽.vYO^Fw[rE9VUw !,Rf0K=f'}+O:% Q5JyP0 5!w7*ߴ=|I)a)v,jpq9:-C1i3B1l4rj%Vt_6tL)^ʅ+1O3vuӈR %Qc%boXl R5 fڛC{.*fM',}<):r0<6s_#!GFp`z Lp?AXeU136gIx ?- );i5T"cI̡ly1|[KkBǛe{|UM@Ls w.Mѵ$֡o|!3V' bXD_Knwc]֢+A%Go "x6pW.ȅЋ[ȸ,EuA1F7+1L{Ǵ?x2.T}JVrñfx,6IG7!s;b+V6O() Qs 3# RGsk]\ӈb\ jܮ)왳vr5 L[Ʈ'*y Y :#Rʹy8r'~r&#b"ZD =S$ڀ}֣^#V@.Uzbe3GR>|7;||cŧ"&H7Weí'Q^ֿpvW06Q9h%mW򘭫s@R8z,[46Q)5sgb&T@o@#2B긒Y)!6<i)g}R;-AFisytıa+&7qL>xz/>!pK/,c&g+ 60gI]մ} Qf_{j1pWڰ 9 ؐX^D(xgw".^J >ذ7fwU:1cΉM'2JV7\/}܍ֲ 9?  ,[S&81ʧV!CMHI0dj`B؋r!BÆ1`[B/34a!C73n\pM(zgXڪZ :dh ]ϺlzH@a~QEIOəF#Oؘ"_h/>퇌qa|[C:w~E |\{ s󙐞}HC)v׀N&,ß:lrrJ`lcٺU shK7_dS.1FYLΊYiQ$F> 'CRa=~Ku C M߼廥n(m8#F1pl} [AOԝ MTpR>d:0y-%dTwU4L/KUf~QnW6(he_v^Qi6} W݂M׋e1rA<@>͈U<-&Z 7[?sZNɅCȣ:㴪YlD %GJ?_N4ep''hiaE+W Vc\eW gV̭BДK/ _/O7n0,!FiE83o\ Nc%AٸX cDF1keCHkю/o߽- 1S{y~v~X\,x l?^^!=l$}n)G.Y\g[%LiyTpVl| TZA.DYwc̃]\(F#ݵ_?J)l;1U6ui}{5! djғyxGߞDRV/t]d;?%ӄ F# sMmlTsYȜ%Eߋ9t$$ݘ\ߒ6}c2xCI*)k -HGAa<+5SbRd@~trRBk Pƅ4)G YKߧyfa]M}uk w_1"hK)L=x'6$0NsWef~d'1)dk\J!9 n`F։67Wf~Qy{Z ']"R>{a(Г u`8R̀weFAK˺OG?y>Ż-O"W*V^[_==qc@> A|&İr®[=6!!b+ֹxs^Y^)ϗ ^w[\YԞBlp.$`w%?B(1XؐLiu䔐0w[_chYBae㹃%گŸ0~t9uhVUhW^=/Nn'5!E=6dܟc"Nve>x(4r2)wLp.ExG՜m\J#|xld-%0vMc}BLH8vk_ݚq511NN%!1wbnXZq #$1w" j󢋪}WG1KN<$%~2-:ij]ZeN~8pɚ1q&W 銈h{OG{Oߤw^?<{YSN+jC(EGԢC52M m 3#@S SN)lSLu6e%nᵂojwH:tH<"RItS22Vŭz5Py2=bB36qRoJ^ЊϷ|:ɚ-03-aZXψ4ǖF91lP'r*f:2q1 tSCJ>FDV! ֈ >=@UAwČO2&x^!!'aɽH9-֑ bN~G͑[*tMI!~G9Pr t8OʨI:8-A#ewWA1=O7]Y6G`qD7Dl^Aq+1H+ Ʌa ]UftӍO&hW,@59z$-߯kFl!xɧTHK%hگ⮠[t^뙣+Y y5=\tދa;3,fVc9[T&vc0LCM4pVȭ;egR ¥5eV戁 |'@-+{s3}?A7ZNeSN)3f4ykjb>XS^7I) &S4uM(Ȏn¬?\%5Ei:^ҳu9Frj?@| {Ax0I@ zk7aF+Q[2HV^r8(8UY%D>y+0O/rOSF.>|4)=>@Ew|\e q3=6UG7vƻ4|ejj]{v; 4 ,w4.w[w&P գ>YITf3EʋUq=9-4H5ϒ? bTO+ݞ4>jgjeuΒk'3G .˃:.tꑆ"tƗYq3E02!{7G\CjNm(x*93C?xj i`h5f%Cf`doۮ;o뿺|pY{uqAX+hAe9fί߂wS^FrspYduǫ&|(@Y{u_ lV}#g(7>h?{yګZцjGQjh! !R#c !VBb",Z9<_?|+; d+)W]1N" 3게s#r4Cu{2S҅Jdp`&ud%i[.Ni8rED%;ˆ5J{]x]1z:dRWJ^᭦BUK4@6v{ ˂Lي{8NB L^(ag DA]xw>nu򑜓?@ P!5aH߁rM1 (YF_:^[<mYrQmp8b[:St+Uv=ja'{l@S1J&>žJA%QGc1I2Kaz1Wx*/Kr8D~UV)QV8-B׎vYjxyRz*j7qmcCyJ #NJ ]_gJ/4|;RmNzQӝf8h5t8LS rZYZ5d89*#{ޚ&s"'YF~, 8s e%&g%>6PC KڳsO gm{4Q$nc]1n͹/2]qীgJ⎧N5ˈ!FIAN mK٪}[!ΰ{HѢ0]GD^ <c$Sr2/mN0beE8/'a3 X\jw򛆙axrdقr4f:m fwfle+^LR wb[&I>Wl荊t(|1Q9e9O]䕙,(5tKq]~Ƹ Ҡ{FIת f=C{SO3 Xh1Cն<qFNv}E8. .mם.牂hJOq+5x0o8Kۂ:Ю@x֤:LȰ?Y^?Q2"zo]`Mw[%=N}pjNAݴa*?EiAy2掃IGP}oQz mw +(?q֊0e8JC wL-g%ou7Z}:CB\`} Xeu0TV'/ РϽ~z'7lw Ud9+8+LǭVp,]c!;r|%vNRM!L]},yY6h<ߖ1Re |6HS/HQ Kc/(^%4R n"]/4ԕ,N(o)pad09ׄ !A~q V oc{~٦Ddiyۇֵݴ,9fs0N 3;9qk"Zv'{NJl»c_6Wq$7*A= @Y(ϷG~>];T-֦kُxG3ɏMRJ#z+Ol4U)ioW[WUu(rcI>NJo`,}Fz~|7.< O[JK M%-7 QEE \RqIETPDQwqOP5ީyϙs#<}]GK(h?(?p LɁY'+m?ыN2KaE0ЗJd a0bL F̉G1dkR#M9-4 ղaV9ȃl#m|:U3I ;_I!1z챴"v% #^^sW6޹lw*^fSXNEpr Ap='wzɁJ~:]O ZV hU }h]u |:Nq}%bo?Hӵ|TJ-rf|8SV;k\= 83Y5'@8u&漽.. W"ذ;9W3|w[.ԤAz+a9QJi,t]ff$x>Yj+ <ļG?>ą ƑrAOa+&f !"gnQz/ 4`[ gow<^V9NτYUVJ#`ozpnW k{'IqRqZ!bND6 V"ਡ띅K;gG8߫en 9;w8/D4 wcU 1sS y^H+;t SV6:K| z +'8Ojc>COvȿ gӔHY3JbCLv SVe29pYqj?R;NS e o/YN(|a)mxkϗ1Fr;%ͱoU0P˵xEㅚD8|6|v&yiI?t4腊C\f$jZJޜf'HR~&C (jtjYw:RO՘ tE)T!O}=] =8JXAsҀ[ #vЋ1k~euOH` ϩf;Qqqpiԥx83h,hp<-i08JKArVw-xou-q4'@M:\ضROu 5Zf ܡ{Џ悏$c,U{ tP79zL1a:"#^-p'k`m2 Yl-UY SRܷлejpd]Р8/PaN˱жzoul̥v,#nzqk#HD_ J>dz6A!E^n;JI͈7 - Qf cfUMXǹQZ(﵉-l~DhZ컎wO%o4"璗 nÕ49<ߜd)";ؘloe~o6Z!-qr.xHVkcpAU`n/kKL(̧Gx.^߁ANvÿkE[uu>б+5="DŽE]ynabEрf]uKc|m[bN%eI=O&86-nH)f$X%ĽrXr-,6y,}t( 10DX*M;ffr7Z1^))Φ(O"~,?WMs0IS~,Օ] ZR+r3eIRs1$ިQϔԔS\_Iks4mQ)[YY.Ijf侄.eMqA6A%Yj߼-j[(8]p}'-bN7E*"h4hHb|[rԺ6rxvy{SQH)г%bWM:_e nP/׻nZ'9֏1r`u`C;Z8CH9yZ^Y ̧C] 7ylk*:Tv+m)t+?^Ʈ c-²]x9!l%T嵘$>GKwm:dhuTԗ E8Z' GcM)IR(!!(ݲRHewNXB0E枚-;v@dh ]ZDxȊPq ]\z-!ɯ$Ԝw󘄈 oPh}gUS$6\M{3 rjι1@6;yRjGӞ-=_luf܆ 9,f{yA , #Fn%-&*q;[XbM׭~͞ދN8%_x#§=Ԡ iUB]CFHs/uT{V]RS?<9U$D(ur* C.Do^SSmrTd6Rt)᣽J^hCF>jq}s8x' m2z8lJ tworfU 5Miy6* P>a?vcR.lҷM&拉h)y3V;ޫiAZ-VUrx9%7>i R;N S0ރ\ad 54L]m!\~8i& '_TdH݌Ӝwn9 u4'yoUFxp}t!h 8/>Vƚq]kVzcuAΧbW:> ;åb8QW5]a㓝R* YIPO/ j)g0 kE5Z(e6vo4 ɭlMcO>5/z2l]CKF>SSPa= Լ2vRe` raEm>.S5e&$n  2:`SӊmėVqcS hE"ZpjhӼ:[n]<5\Ǝ:y !@&+;Bg%453,}.v4y0Uw<_ho(vk=avW.؏+͞ Z]x2 ۟cdPwָMA0-tmarVQ( y]r~p+|S3]rZ{ s*1*6x *;m譋Mny_B{͈ e8UQ`ٚSg.ꉄ=Xzoy[)"ĤZGH`g)x!,uN`h1t6DVxSӋZ"+-;9ݰU}h vCՆve p5.iguiD)/`jk xdz5<8/ `N (j!>96:9\EVz;g`KZF>"|]ڍ̒S(pFEi&U˧i ҍA:Oo |i9Pt8Ax2SG7%=vFv7΋[މ bV4ao-ⰷZ33b]L]t2hs6Լ3Cyj^LAy餟;1nVwm֊ jfm6r;jNI.QM-~G 12,@>gD F1bpPyQ3c(4ZejD{P[[ؽnA:8WcWd]H8(qJLUSa MW~VԵ_}!:/(h5=z0`E(q9EQz97.<8ZO:fh`̴ F=-4Os9~b-zQD;ᗙѻ]oi)ф"N>y]ƈU4]%t,]2NB]ɻlk:,dUx"_hk׫5UhpNI}3X҄M~(vՊ(oF騴ruLP5TzjJe~Uɖ9N"b"uNl&؇ 4X6:oM݌=0퍐cvi.zF`^5ScFW{ۆP2|`kPVDZIfC%h^;_4Ԋ ZXf`k燐d,i#巾l1fQMϳ >fCE9)FiGH@KO=j޻?>ܞ#]6տ6Շ |M79hN-'N#<{qLR9" e%qǍ /ʮ<׭lNTgM^Ziӧ X WAٙwa>7 xGP#P5.*iT#.Ԁjօ^Zw8z#xzq{*.4,b%/xYdwIIᎅao$褧.3œRFa%C|X7|,)AۣطSgxtq@on~^@AD % Ľ G&]m|\=<[#?e'N$BI[%D "$.KJ;(ez̝v^gy{|wΙ뿼555of[U՘\CfTA l2@,|@2t>XGSOtթۛ,_ n4Y[_&HP $qFhăF 7 lR,`{oJ-8]kǞ/o;`ΰ=[ŪӜ8wIq\*? 4Pĉ> I є@GO`⧔bm k ] ?/W%1^ZS,Z%P')(AcʒG@ ID /럜30ö^~0Ű?:ltמ,Ż3ZMWRm(*OF r""@ @NH(P煅pT*}SFeo;ƾl]nϨڙ:Fc9 BZ8Dl60~x&@ bIA#.L5 5֙s4Igm?;]j2!Yt_}ʚDK#-t`DY`@2Z F &4(MN8خ<򼾚6КplX0gL=wol΂]ɚ5kB' fO$A 1qPAB& A~ $BvdtHn*_LOZOW;p7cOW4M('A+x10Bs& ;*biL#bR(;PBoC~sDseo=kyщے.6-ukO⶧M6i)6ρ(Hx|2{{C "ć2$%ëTo_6Mg+Sҫٞ~={fS-BLեt@ _\&pxGd !@ PwB "haaFBs^t+`Fr-YJ^/Z ]{aJ1.?)tFF _!yHC^x4p,h-U`e}G&xi91i:y4eX=䫑`x\LiI+ Bu >QHK:S}%͝ѳ W]K9qk ΩU+5I=MJҲ}lsYǍίy=q5n^Zx&~0]*c8m23er)\WO0UJ };:mޔ)9YR㶏ξ5WەY3ϔjLSEtNwCclRP;WdDą,)"q[k>;\-h=3|~<{lTSd-mџ8eIpi\`dQE %N-U\u( p;Cmˡ?:=3=+4Blab S 12HD(MktY Dw}3Sgk!œc#ɞ^] jJ|貗H<fD`g&_W-CL/?^8ͬ8vpfx箽lq=$Nnh$\!(kiY>\(f@YVTTgbd~}*9ɴ%3xC~joi㌥)nb.vW2ٜz5G%ΒȰ&mkQ|p$m5;|BVa LalgNXvbujWA]r #348yau*^&Xjɚw`6}éu7c&#-}Xg GfRgӹ14l)juqA  "M2R7d#-~ԙ0FA(S|OV i?`GN[fLfjS"Nj%x|,?Q:k5/9W|{W =4{QkXVٗRPdtk?aWKDA{c;w"bNW/wm\U GqǻQLsXGn*x!z#/O~2~3J=Ra!nܡd##~[ĒKM(S-jKϝη`ԦEsiSp'Ʃiu*%c]pmo꣎o{^ݝv'!mn;g}ٜi=]'?<ڠ&LJ)zb\bgn Osfx%`eWBBU@mϯ]l|Ygfp$iߔBf#䜼G*eP!lѸ|l$5-JGbBk`V4ZsA@g+mBxvn9𩥀T q‰[rԬ#2vdC1DjI @ / /#,rE}rHňh0@6œRL|J6Wp?td̡-}2cV.灗ZXzHհpb_J2N[ԹZ=nD'%vh]+uY5Q։Otػ~Tsħ\|f#b>84k!ĵWsT?ٔzk.Wqp&ޅ % _&6^:t>cLPdA=iGvt\E⒗EM'؅em؞h%[(l%+!HP>6N4}FV*D`@K@J%~_ ІJnrwNzԏ}y9r۸@U*׋FѱZ(Knh6ۙ6R"[6rO;Şrf0Ӟ%ݴ7EL_6Q01e:w!5rPb2眹)iLzrns({oZ#M5 _+:Ŭґ6ԝvH9'g2b` u-bw/Ӕ= m%W a_gɯ&jMJhȈ=Y2ĺ BC>R_fg1i" Ri'N_TVu Y%sToK'\ '16`,kc#Ѳ9)􌞪W-踄S9وK~SO_@ށ)лzq0o49?zBgsNSq)a6DŽhCHR1qi:J?eDjkvt]FkFuEEa@#&r's:APH$\$@9;W"x_}<՛42r6N_+@&>kɦŒO>;cfuMǵx(~[޴O6'+Ap< %Y't]ɺ |QpSk,KD02ϒOLXw=WBa/ NZ>% e`/_&Г$l\.>9z|~#9T{AX]ygwF&^_+"_EIK.:A!e܎w}d`6[:QDOA.kqؓ'qJݙ$\YAsVXqD~\QҶ_OeViSePsR]m%|m< 9zzCFom^hE /;ᆬNPGKݏ]ۛogTC過3m{ԞJz3B\"o+9H)숑]1CTTt@<N\ eyVS`3:% kWIq5G4ʹmD. ^Mt侴]zblpSr+_.d̃OIui$[Ȝ#8@i_WL2NdNjk:* {Z6sbzy(ZDRn ՠf6) =B8uOjbwsvi̡Q0Ѱџܧ 8e_>@: P;WW.⯇טhU8tyDtw{}v:R:Pm`Ӆ= ?$ceX )|Lz[9[No:}ss=`y򉃃 wO/>Trn#,lLeMy2=*q_N8@'\Bֱ_,g͵@l7vsI!momRC1\r30smCFr魴]fBb\\bP0IUgȨ lNnhBsKp˞tw&+ߥMnr{դ{~ue_e҃-FJ|P=!T1gi#{˘ ݿX_R{n- =L^~ww)k=]LJ2{JKxU?TORtzNO`ODI$wqUQT jbܷM(";jRS5<ݗ{=wz42^@o }_oLF7GK^YgY3%b;ҤWa OV9Nj9Qm?-bzaZc\i)ua=Ƨ&IP5Rq]a_|rڼrB[~PѪ6*i|kA:wBmAP*::Q.ɥb"k63g5Ԇ X uidNN͢ul&'kU^% v15N_G$1Ia;Stb4DGMkȴU4cɫ} + 1` y^&\O@I.  Jipg j9%ż9Ak̽~Hn+Rw7%WyՌGHo8.v&׺6:ȶJy氹ǓmҀt#Mk_V*2l η֧G|_j[zQ`ѽ` xX41D6Ӓ5 aQ&lvE T<2vL裛_ sh^ zŚmS?7_8Vzq/-Jg=1#2|8J7_?iΈ9*pӱZ.r0 jMnkR|~4CuY߬Р7;T*xy6[`3%mxIh=1=W@-&ҽ+SRv69+d-s]YBybW@£a5?_6|{Tn_ֱ_jnk0K22 9WwȻ%߆W1PBJGn&}V2:{W{Gm m:Şx2i]~KiA}oO§CjlA\Ou? 7yԮ3r{"ZJkXJ-52.5j ɧ`~ S{c r 6D!S%a|{ Ȩ>9R'|\qh Q %^~u3rd[A A=';Ha=W+BZzs:(t pʘ>,y4s+H+R4e!0&,l ݚ0czF}PM(v,d˾=^@e'y Ǯ9! iWN@KY ΅mt6R0ȧ3z"E瞭v?IixP}#] QeF=rgo5ór8) Rj[J-.t?NN·]혣<=r,4Ek@fG󨬃q$e? Ҧ{;Ct lY }ZB"Ki>µ(;]&\xe䢓iRmDm^w=qm b5-?*6 Kn6йuS٥CTߧ_S6C/vμnnG",6U}VNt,T|;d[|u{WaOA YJaf8 >]WY;a?,JHI-q.9\VO h_ƦwyĄYK WtHY] =>zV`嚭&Vcu sµB)r.រ%3[|?m7CbҶaI,߯6մãfHH /ݫmF{ۗ{աx&f 5ԘXQJk `Kk[p)ӿ$= 3Lq̴Ye٤ [df"""(*.ʢ(ns~{~O8:.%!>^c,rhGY,bSSgU!9SybC+ޖڶb)"A?`geTȕ!rׁI<܍:ceVx%/>Rؙ[TwcqWw_Y=r*7e1"kU &wZd,hƾX~)'iGJjT(O0TGӳ| hj/ TI9~Go 浡 Ccc3M "hEq؃'!)(x96V;`7Ԃ7Jc^yuUKCBWW::c-V v:xW:GؑcFO`F8 nѳwU̲z_J E2y8m-OgPȇ`8\G^ ݰ=}][&'cS TyC H@KYI\swM9(wM2ZRoEٙaa:{aU\xyUQ&&'/!519O5@-@so74&`˶*+Wd$ҫѫN%7O(HJ7%] ,2ta<܎O f8#8%W5S̆ݙ9@ɖYr4t[ZZךsCOԋ||oha LJ"zK#ʢ@okc5V=ԡw{n,u^ ޖr6DT} ePV $q=2ޏ7MdLyG禛^Ԍ2C{f@:LmCa1rxl*>=qd4T5-u*ȹ럑a^ ?]l<0in fhEqb#:W2覹#f _bF]ǺFɩ.1bO7>h/ vW w9Q1Z܁MQSԠrE[R|m*a3蘁CcɃQje4bo%wS#t{ f~^#h1.ayem`ڄk͑ЍxP4-`!RBu8 bDĸ hM[Aؑ"#eahrFކYְ ;jrGMwiQq8$^h=_hE>Ц>gҪWliv?Z>"H?HNQ~؄[Q($RckR/ʀ?,e1`u醄da]%5wWYg-m˸fǟ;Ib*RBKV# m`cW*¶Dd<*dG虓Lk>5њY!zd|Y-j."] GapsmwQOK813>i+>qEmxQ3 #-v ɯ" o`atWIo:^3#U?~N5l T^M k 24<̯a!<1dSf#`dؤ#Fl}. 9&#evZ{dQMpߛ%mOg:dl(~M~(%?_^\T]?ݞbˌƀg^:jbW OZ湙ԔIR9( t3 Xzro)=Ք=PuW5] v[Չnɉ5fo>.Ͳ6`1wp:\"jj_ђe)O\?2>Էgk뺸'L,s7-G󡨕۱D*sj}ߚ>ݛ'WUYK}/2QI,a(bd`t޼Ƒ׉y?_ZP2fQ{oAc#awQԥU'qOA&jB:1ǣn5ܴ 's*`b/{IT@t춭G 7-_c>P5=YA,؞cÏ4˦/@ajUqց]%hO5F4,&lۺ;C .r.mu =+m(Iy꘹G3C3ĈÅW-#q#ːbwE"1kN-83-Paܓɻ vzͱb5T">5k'ݞ^q)i~-ٿA?]ǛSc_/USkuC7\Y=}[A*Q^ns>ޜA³Mأ?61s |a3KߚDM8♣ /B%@.^_^^9\H9T-ѷ@|xH >/hZFߝ5L侺1Lݞ>vM`fڟz&[_(% Ω2J,ȱyB2)mɑ*7עF6-b:謭I TUutS֗VO!3Rjyzߧ'`|m:QU9h>[sk^做pL2ANMwȉA !60Q;|4WA/CU\[H@M|֧{ V^=Gw, 2}+NA~qyI@j ^,Jc k^y#o~QBJʵL+Y紤'0~Bg @)EXy%^!k7DKqΒ^"{@f{e Q=ճ՞f[ttHa}GMp2G&@I,8X8Ix{e@At"3Q jo^:_:ky3t>%0L`kM<֓kg-p ʫY%'82r8q3,W^`(J><\АR<}= n!}WSw5G/4kp7s%G`~G,&ͽczߚ3WH<^蠴T O$ezq5s Y~-@<{q.?i9tW]z 1p)Q9M>QIݝC>p02#zHDˋozu #Q+Bʶг9MCMmo/Nb2g9ć_N&&JAMpV4$xQ03lE<49f3_Js>8Iz¨:sjotWeiٕwmbe-#a,uD'hz(#>ʉe|O . u[k#@Sjz4h-OʱFl#<1zN̠7A_KH/]sħ_G'^ݛn6߲ UTBs꒶>qIa q蛉ۄ!#sdbQv!J 1p Z7kSv)tkP1 2bԹ+YTGh\VnդE nrA5PzG JxBf( 2=3qGO@K{@_M$l. 햓 ӭ"&-i>tw[`;zZByV92b2~}^ > -½tD!{5ΧaG;Rp~|TeBk9t.`an%rUvfǖﶆ~!醪!AӻJ(P7*qIx6ifLY@UyGuK)k콃ۻ',H:_ܮ3oh.yזgjXWd戚O:M:WN-16%ac29Y}/ÿ04ه B(&Ghk7^TƹEb[ra@YS'& aIb‘MLZ8LT1;8iMy_i9\A;'Xrvõ?Wh4J5Sl#U!)L{Ml2qU8 &2m5T#ʿ]t/5fY4p/ǡVX 0mS1-&޿Na~)6e "(02Eo1/Iܐ{:s-Q*{SجIKk݅?G؞.JR6DM~u[c>jă{Qw&.fo /'oc71s>8 y nm+pefG6䧨Y9,oHPY2,Eί} v>:H #M``Ŷ&N]bU¦yլVߺ{z Ԋz[Zs (q}xXh)ED?PjAƄ+:Pk/8vBvG&ztN"o"ၪ.FaWҰ;+ Y*>X%[ow =%eg;sM5T'f/IKoڿ/>Tr-ڌS\^_ik5S3IDM3qb(>D4(EDXA^grf)xoދgg>Q2R9єҴ~0ϙ 4psgopۃjWAA:aWJtqU εؔ]b2e/ݳ 32094B. H9Ewfȕ%>D]ڔ2Bx՝1iA(rAdWNE6EvʱZ`y0\߮E5IϏ:ٳB)vyUr]R= }\S0]@<ߗЊ]6l#w`M j([i_ %s ~}U43 Ǥx$ECvXBg|C?ᑘ w,O7d5DRAUEcWS!k8>0%)iL_.XG[& TצfK-8VN9ȣz1ҚFWӄtS5>30 >yyN d\B,k˺~4L阀b2{u1ń4nsާ}xdtoQV;*߇Kyfͅ5J8BC[T i |ȼ=N٦fSFq8h9@Lߖ2PRWo:Z|z.9`l٦i%ԭxnp`+fTxmUVZW1B) uPQp7O,$!o( X@x6q!3אk 9J- Q*m ɮl*9'-{2V2úeP7~=>g9!B> ;Dq|OB84eg 㵏mUwUmٗeGy5R_FH9sOh0dͳ9bSHE*b~ݳڄ$Ȝcۧ2Cβ&ERPën#i3.oF$d{z:QqO "0OM32njuDجK>-txXG(q9ڗŚ>շPOQ?#8ZۅmuEtx/v%3sW!#a8ijO*܆FwҀ1pU>x*ܥ@~A+@Һ R&j*gq۝5D x  nrhbBGC/skVyM|g}s?!eI윣Qs@gI(ؙc:jg^$ܷ^-Ꙅ9&lh-lʉE[ ԋ:2kW7p{S (jD?` ä|?AL`WlSy`ƫ">PSr\JGKb=pqG+R(\f&!3QK VEEf8kҊ{>\ Pρ_n SGY+ԛ:.|O[O[(ey}lV!raebA|ąIVz7{(k?W]kupS[;DWKKE08@|={HZM?z> j}^ 1+2rf/=CTq*ႤF ЅVDw+}j (l󥘺vDG)ZZd* lu/-T䟛η5AW@ u ]9| kjɽii2uw+TF1##҉y.EG~w?{W@XS3Mvѯ@y84Yl4c57~ڝf/5 !T[lqbeH:I 4QAϕ^0\Z pOHRq*Bh^̣ :5sǠCG6mcw!VlڹDܙ!] mRd YAb2Jb, f9/3I)rhA%!h Н͡y2OϧݪFdfg[hBE?$PPo>l\r3C/+c=6YYUV_;-2ީ[gG:46|]hm57ë jjm $ʅ%K *4ДoN\t_#,#nzG+s\"3̂m>(Q,xUSGYJ,t]s(pz"h izbCN>^jpvЭsCOmBw#'Ź?0^3IӮ/}mC^sb޵u #䷧^55g?]&uPzvL#iA@?p~%w1J,jV,ofOɪ2CFFHP4 QQzg)yYfODWOF!d* >˭ ,DvhF+AtȀMp 㓌;Ƭ2lҵAr-&d| Ȱ.d,6yOIp,IJ 8hluc.ݧ> 웃 Qg?߆3$1a\ܹn4Z[ubJx ypinm5Q710۳~зu6o=|rk`m}tK"3Vt[}e(ZRۃ5/jcTҼ15Hۙbts5ν׆dl8\b} U`7^K~ʢ<5ߧdA,7vJ~mH>o+p~6\4Xu8D#q8j],B^tܥ҈O0Rnz'E&yI`? %\"d߳K'7NEz I#ڄՁF_0חC#z -?5#z>g22xKEMs+_-t;pp2\E saw,@{KAAݞm-xTy5~{ ^J##/۪} 9[LOC<3ˏ x3Ipqz|kQglĔ8>`;15+^\II./ 뿤EI`/̜;K]ig&nk&S)ػI> #N?e2Q UL#JඞU1\6@JqS Cuwl=B*-؊/LrY-}TcZ䷞'Bɬ\1ri%osc~-6 ? *jS#|,аH0mjnY8Vh(-0b"r鑅rkgŕI'V6UlMp Wwp)Km<}f/%3}3QQJb|嚊Æ#e<<麲:msi8.uQMUcv,-G%Ik2~,R6+:6xN>hVsx@û-9,X}g<5ihSRmv: 9#UT} [uYJZ0% d* f[ɧ1d&8G=SweX I*QU% 3IY{ZA0\3ᴨ0@En::) = f]ɼ$r*;\vԁlM g&pS :2xk"ҡ}x3G+9ׁCOq}Z\W];Y3I:0 j$㗸J*lm %9WbU ;%,ޛS ~l$Ƥ/TE[ʣmbHgtdC363%kTH<07rEkў 29oe؄4!ޔ}{Ev`m lsEWy8- -f[.Zyz Y}AUz^^BNtB76u(r4+-66$\8 / 5*B1"鹣udN9I.ʭ6TLgXVj7`8Bɺ[Q:$`4l_O|uä^ d:)?5C+u6WO9I&!ŭUje}߮"nLPߺGc vTv^6(jF0b:\,KP&Nm>U/jA}VmF+[8֬r\Y*~KAb*^0nC Q G-V3Τicڵuf۶viذvhФiRĘY2W [ pQ>aGtNmIrPb#sRpIZ: wJ2Y)}R(yP-kB& Z7vG`(ƟiCƠ^HŞY;հtcҰxϬtYҮrWέkMƢe;f6ȢmEɟf;ղm`ŢgAɥ|hˤͪrYĜa<_:àg<̫qRΫ|imJtMn>k<{_1[(V/ɡ[FʨcIȪmLɬ{dغҳ{qwQ˫ye˪nTҴwmٽ}Զ{uɫoN̯t[ˬ{dģrVĢrUštQo@f6Ϫu`հͪ~pƣ{]Ġv›gwGi4vMoDi<Ơ{Xͧy_˨tV̯}nͱ " endstream endobj 24 0 obj <>stream H [ 7>^nsS6-XĊD@GcEAETbP,4QP@E,Mt`晙wg-#A]JT v.Y=#hY ֧Σan֯U,>w/[ES0Kk̂ -Tػ"J"lCJS1/uv_:BX ȕ^)|YYU [WcK~\ܑ0UklҪ9K[mR7'nv$90$7.[ CUaj968ᱞ[] 2DH^҃MaWDZe [D <dF2rn9@N%mO)J.|;X:P|]v\髋bjx2/a5 ˲sUO4OW~{z秊7B$Ȕo`_8>s|VT>3w>'6?2}ݯ]c5^h?aZF$ȫ({g'ݲwiJJIcSD&;r<(4QզM sw".)YL06y 1o' 46)/lS`[3+>R?3 ynS(-&G'a< U }1Ƨk5Ы&g~}MP2t=-*ji;F&j"d㘤Y&, )AF{z.~sRQTGͷfoԀ|(r1>5LxdaϝݏS`JlW,دCƼ9F[}lЂ+@-2|*"D3zh'%f*/IZg 20 4Ԝ O^b*|n覧:𱫃B!nUY3rԾ1˪"-_;ĥVa7Ƹص>D &fkM3^5o-bN 4c&pdm;wNm9r]On5`s duWy5>ngb\ &vBykjƮr7uՑD{.aS4VbZxo#dX~ dX)Vts}⾁OoCj &{5@LegEL7dOQjb $5OȈշ̍ Z;j^XnܵB~XM?t v6>f*ݘjN߫=Z`V >mY!#ߡ% IP|ڋLu 09U16q2=s 9"_Vvx]VʅE/pOAsP@啁{ 2/nYf~udB*tuC2޹4#bl眝(GE[s "[٦{Wqj{ީ~lw5 'Ǘp%fyCGϲ+`&mȰ En9&=x7a#Z t/P sDEj \ D%ܵ9j` uK?C.0jd7tJ)@_Ǯ2<2vip^ڱ=ևkR6MiؙԽDωZ1NlKxBB|V-ɏ;@SNqلNv:AmHєgdǣ17'@N>3aV[OXa=5KRX]Q!=[5 fx5"l.EE n w]$W욺׸6i[VL-p Fޖs lܵi"l\ vi]!~@-LMQ^mQ~ط^jaFX舁;@$$:f6b&.$ȥRVS*v̆.`N9cIzo1 N|ސlz{WfEOYFZjNHoo2i~FN52J'#UFt5鐒@B%&`mw^1fczb}$_3둎tt~xI=tZ*ZT R~צ>q%+'v食yىzWUVv K^)Ĕ-=H@w;6TIto5S&[n`형^B WRJ9ۼqg S[](?֌񞗻 TxWң?vYu珬aNH9?Z>BjaPZ1z!F3,}LOh8p>f\@HXY {\J/J/& "<\5T|b\'C4DL[rcBUBDA4>RSq_Ĕ`FYҽ<֍!0LN_1߾IbYytlt^ٯSǏDy mAߙt(y!6lL_!A_'7)~cYsW 6"Xhy6#pWkPHD(t 7i=UuIF4zfoFNo6_|\3 ҷq^XW ZKVජbjyi?{DG+n~\As3#0܋i[Q=:XMELN_CK1-0Z4gAU f rf\czHpA5z?^.mFucRn;*aVúWBDUVD%nVHL0[qj´_[J9Dd;wCDH$ZHBiA l>qEna˻i/uBz3.fTBW8@"nD3|ӎFEa^}-@;*XkE냌.xI+{=Iȥ*:Uj|?j~tC =|o̶&S+<`-0QT' Dsq>g\ ًYCp&e=ď3Z]KD$d /2A%^>5+SFBXj8c5ẁ7CK=/eӮem5Yt$%V\tK 3p21ppDkmfש'pų N6&=l0l\Oab>p2#eg%_y#zV+CbZ'*av"Z=歜4Bq2]g$AO6_4#z'VUJK2U_kh^Z@Ub4=~L̩ ~[=·YaS껈hu{e'9.64 r].ɕIs8=}c  u@쮤vWZ]@ $L1Uy./?;ϻSg c8(z^v;VQƹ,3UҀeqv0.B،,$+hdk w v3#}%s7YQNk9*梈p먄%kkH(i\Pd !nwpZMoĥR@5}et ng"T(^dj+3Թ>;IntG-'d k?Q%/A580sA('QӰ>, ץb D- j g;>x8aChʮ&;fa-aI]b#eJ gY yx Ah,y6mnO} W=~O|ѡPkN_.(p-ws^4H-<&Ϡ1Ht"lЅ,BwkBoFo_{Ƥ\!K#Jέ{.3Z_f5D%-ƜnCivP6 HD* ' =ڦ/W\flRښ[ؑ5ѿ/U MS1yʏkŕnE(<,fO%_X \R?wvD?w43=n; Kؒ -Phu^+ڎ)kA^oB$Ef 91$ ɽ7<Ⲍ:H?55mΩƱ-]Ǹ[AEJZ ":v^R+?VA뫲\yv`_IPfzmN]\m6 H{(RL'4`GH{RUfRFَMMlkd};Mwۺ}}_>~|ZWkyPV1lQýҤ^{(^f{ L^Sބ >zlxiw ;ƿ(ƌ1 2͌}e,EB&"-,e+JI%!%YYf1<9usw4lMB(%I9\/rirmsd_flӎiU&gHzc}؋h-z3fB:@ibLa +2AT|ˁ -(T")8:mJw zL`آ FCZ +#k2 Q PZ.*RaQ <k\֗}3x|[J, N|#pElj]}⣴>x\"z lQ8RNO$Wrh1q|뛓GqllZ9nZnOWϞH~P6j}` (=GlzǺ:!k(,HTr˦n[Ak'?v+Ț:ֲQ57F\?$t.[TRAo6g^(D !bTH!N92 o|3 lЭ^&Jfn*RTXAA( C uFiz<5[۽MحW;x&%9%55Uѯ[9(˅\+*<}E04(5B:l c#n"!w|ߛ}ٙٱ+fyS-^Є{;x[ IR{ DpR~67; ɃzŽȾ{?T\PptfƢaw`+g5dI\xf*$5W8>FQ$2J 6 ? W@Hs-Qv?|sC'ĥnq:|Meiƶ{#=Ш748a@(3ƦS}ˍ['cu¬] ǺۧRic6;ic[bzmƘn(x*N#HͺJ_[VS"֯bs1Y˩G?d*GL+ZS*GڠȆiabj՛*6=3s&3N{ffK:iL4Ƙ%j  nhUDYdAvx,xd_T\hIH1_T%Z$X%W~B`oPF\/[1Y6e5g=vHl=#U!U, TA~|oWC?.TEEȕqmp3x~cryTZ(vWPN*2pc7yB!+#m+C'>> }nêFi"CWSwN-0Υꉤ р΅LN.P09 A쯵|U|E ZQS?un%AAZFFEsʬOB `o%gYdgR2v4=Y9%Cg,ob 8_a*E]9DѦoizUi߇׸t@0:dShguL6x}ZiיM>l)mf^<#"bfNzY҃:ƌFm٤{:/=zga 5^OwXŇwp?kN AԿ-?ɹăcwy))6ehiBL՘00'^Q"ۧ_,k5c'n=}Rg.Ͱ޵Z!ҍI'݌ytl^;3#ԯ]j4 V"1DQ+RS#n;귒 8φHm}Q\@.Ϣj[qX:\i7جf'huxL&?'9@F}^ڊ_ۈNoƦѩrm;؟S攲ՄViV]i~`GB(yaH>#H=[4mӋ'cyy?4Fz,*/*Ι݉Ќ8hv'L[ZDҌ#5Se5bSl5ԫ v^(]wUӸ A }-®DT^Axn9Q/jLcy^)$fBk} ֮cuAV6K*j3ٞt1ulkpjbAP% Wڳ"Vq茶Զ4gx?mojѢ}8)=Z 8}>j@:F Ǭjm=Kl]:JE ^1E"{Њv­/Ӻ2NwyW!#4|Hx RX>r Tgf ӢjM{Wy}abm="3ѽc1P5J_.s~Z)x3f׹QQ R R^Zڟ&};\Sx==v`7߈{ N)0vۻ2> 8dz'N@$*zjBF*FC]QfX= Fۛ1kȼZVKq 9uƝ"qsA83.c׏N9؄P 3whzKL$J,rw잃3GCG"nG3Is,OoG۽ʁiv!hZQo1q~{Rwi9~iH1<11~#5N ܆wCqa^q&Dä<ґ+ {610o!-p}_?۞Rc\LD>H91 v0]e]h%b5Y7񠔕 ;ZJm5ȼ[鶢%d**iC YG!A|DC~~q{w(hnȂbj@Cd]>TbgU}gǮ}H'3|nW":?Me J\{ d @NUY RajZcLz `k-- ,HlR6q׉ivLL619if(Z[N Կ)=s 02[,XFlO0M z{\G/;7*jc*xK`@Mb}`W~$b:N`ʹo.>GLԦwm =  PR}Ki+ޢ@ܤVzGC]x♃>v%-3DrdNѵudGA|Jh7߄"%\] g.i㡁 !%l#؛w| |}) ȑB$i$5|J$ְ15 ܟ?v?h%h`ߞ pwPw b 94&e_8To]v\P_>F#\'ǃrfjӱ[?ܝp–lܦ\E暯;~FsN ,d8QXEp yhmksGDky="WRd-?k٠K+˟em6ǚ8\ł,"A4B~б{ eڙ)Jhx=Gˤ@a: a"/ .j櫳Ky̋,o!!o]񼯹6#󛴖 M-%nRO RW-O}q 'a76݇rԽYhsfJSbUZD;~}B-+ׇ;˱NCO/"k=Q5$lRWA:.)KZ#W7<^]ߝ|W@ = a#9;~up MlZ[]2TR_YT,9Y#Y+{(k608^צt]%h$ۨc; y%lvjG҆h>9aHmY=Mvo@.0} 6A w]qm_).4_39MfjMej)nwŕEQ67̅J\rc P"AwD)O3]G{}2c}2J[}ڸ5=)l ʫt-u&rL̙YxdAI8E~m"} =R:T``,̒꘵P%=Fq,q'ڜ)%RAι\*^(I5FP4}gEO`UCBBk\]RZ+<s,̏uK-=LIL2Oleιe_X𵁊GbZI@a ,-^Ձ5\dw(3t)nQ 9&'[l#F1&c䔤)!PZdob@isY6F?VnG#mr |q4 GHI._+!v9;PVfTF*۳k.l(幠^%?3MhӔ=8Ԍl>Tn3ҏ?`9.13-nLW{*ҫ4IRqug`NYҏ`#K}Vi_ ^~U"p*(_+&1᫃E#䤛CU ?V:.>ҭ33]>:8x=7;¡[UI̍|/1)0 @0k@wwjGpNqU:.S֚g\:pG2<03Ɍ6ۊ)oAzG5܇5ġ E˱ھ4_)sƮdFU=r4OJT ovEx9>[S/ яaBm }79:U Uvy eGed3 C+o }[k9БS-ږlq:(;`6zW:*-V$nb-cMJwJjW}# X$/ uUp9VmhnXj"\,qSggJFw<ao.U!䑢\75} 7y3ITR '] >mkݸdE76DՕk}!%thb D Ȁ;ga$B^nv]מI+Ԅk_EEa}(? +uiKMiҗy+[P.pRoeݓ +B$^1) a"Q)9P=􋀖00Tu=5=pCqi">I1S@:6<]׉},#@.U̢sEN?Z܉;et$r7'`d.W:gjMjlT&A_F O2vu?ݕvsv6d2hl1qc`(4Q"6ĖĊ(B@AE@L$g? 7Շ軧E?2zZ]QPb,1 GKҀ̏ z︾R@E~ErVFrI ,!F\+%s")dĤ 9%˶LNC tyoB^nJN}dZݑ<ߜ-ijf9N;H֖;DqčPkU heP۝#0~`UwQXY!?*x#1*&o|wwzqol҆U;mb!Ig)uEfI^suyOfj~q{ko|G\tG{pHb 0uprm2Om2J1uk88v"#?B5}0 ?DŽ<:ch</ RY ; Xcdoj!g".)I)9l Qt!2}.>b]hbjI_iGyz0w /cezmI20ڎR:}9FҐ6MȠI|>2On'$HX<43YV| ZӏEs[u9Zmdt{Ӈ9T}Ni,nR^@dr2[`sq3<(dA alO<[㴬`/#7wMCh?@Ku&xoOq3`y;,Z՗]*䰾h 5?t,y Ɛ>jx,,[NULZXfe&9/ Nuy8Nv*+3O%>X?&@ݕіq>Yv(~|01쫢XfdQOi؋|8&2_ 6┝(6!d蘫?etf.,Ҳr%5MDAee3M+rWD@DW0DD@qS׼9|{?T]صʨԯᔹ)N9kQKHXj8f5yeZRneph}'2kegcM+yى^l+xDya!] ݫoemi 0p驑?'0VJ#ۮ9z !F\YZ.zv؜:HC^\ nũ}s`Aק/v1}ҟh.c}*xo{ p"ZGPɳқc~\930wK}*x`F#TdPr͕)FYP@ΒIfگs‚;ؽvt]#_M A1{+mC<똕cRh<٫NuiT@ɽՏ]/Ĥ.F_T;*;T&='S/. p,@.^_Y %gZzsK<̾YP4xwƹj2büXئ yB.%=iwVb_@7-c̐h}=IL{K 4ԕ ъCi#U<(S6Vh8%ͫ3ش/,f_Imz֏hU9v15ސ WFAp^nz7 _H6ވnpNj<csn|Z~RRQ |Z.ַx_6/}F97SϖU 腄wdP _bjwfEi#O(Qn+%tBc6ޙeTrLjdrXԡU5]He: Y֡X]kq* pބ;+@ o4|6e ag 詐2s& eebO?1qHR}cf繁+㜬yn뇄lT|;FO?w (E@[Iq)BFwYġ %:n:0!X*Nтfw!Oͯ~7|EȻm:Pnى5<̲!C#Σdl~G٥;4vO`l1)1 Abʱ[?Ey==ɇl[MZ/{^N:]*J޹ `7MpMO,OI9{.{ f"-'9eT}f]-7di,qn0Y@(9^< IG)Bn3(G}{۹UcG*=[IA#QnUM'SBhd@#{f^3\~<5aY饖ϸԭ~˕.l}&bT}^{FC+X0!CP#M.#廦O扐KcSAa> ;m]!4pSs?4,?ۺW׿HFEL/ yV]Q:|$dΰ ,=LT}0'%k%#ۆ1$#tZ xZ_/Sn5!%'x([7LJ0iz:S&tb;e4M4wD n Ȫ(*Q3fqTEv0* dS̛|N9=skTM>@+O6 .zUS#4ͷơ9NX}lI~]gWM,?i8 mAC"f6 8IDOCpεB>;OڄBF6ɱ!3,c%I{3|b4 kw-Fš̶0?όĪ;/,)Txo35cUWGtWrC6.ðaYky˷81u bXCD伦H9熑)IiTZLkMG~}XcBCʘٿ…_2=UҸ>ѳO]#=ߜ5Zu_cHETܰNt4hDMY[s_VY  л;jF]B',5<.7fEMOL܏VFr届Xz@7x֘l}4/! l}xCjT mG>^T#_B|G%×8fk[@GT:L=+Я;&wǗdoS /K|S.Я6Rluddю |XA(EV;I[T_S>C"6fbtczelf,8 *_S+ n7K7&L޶L2bFVS,#5)[AdM[7i[Cb_!ݳL,kyCa]'!~֏;Q{SUtmo'>Lsup}Y3;Xl0b"6;Qa6q?H JY1$9JVv8QE Q@FMtW.A_4Ee#%~TE,jzzyHC?z ,=-"n`wr.eh4 $yWp9)tc~g@iRp]'-*,o[S#Χ^4 . uuJ&7L܀ _f]F?p/r"T;dm|Te8[2c G`$m!y#-2|rܽ(W :ZNO4\W' 8Emyasf R<9'BJ0㈛GJ&Ѳڢc3m0 7 .G˒j\ى=љ}^}ߝ@</TPK*^n Ǡ'/$(#3o-O|nJKؿ.p-gEg=._C6q'":FՖ#?9T+\C[d&Gtͷg[w7+a-gһU8RK>a}J . &u{nwsi9ꡦ+ۓ8C;2qh13p:A5]ӭ=)왵1p]įu .=1?94=rb:Z[Uv6Aޡ>Z ɳV=g^uh|*)aP],)Uòdm)ksCTт 219".{OL.H(e1=~"Ř\p%TcCMW_diߙHOt7X^$#@DLBדzJ/E]U%Bށޡ`_WU]4lε9 _ٗd{% eԝ е7do{{vQg:ztuA hHfB$BTHBIt!`ٝw>=ﺐŵ?T`wS16ԐaF]GEɵv!t*a󎈮&tj8"{WC(v+rs, qs G(&Ɨ٨-gmמ V (9&q[`hH靡4Tm] #@P,rukg*i)7K7fUӴIčy$WI, )e1HvQGzM 1I@MzeϽ`=IhUERQXMq`nq@7:._|׫8tK:  g鵶ִyES\Xy:e4lJm\k`,B 7gZaWkcް0RaT^P,jXE/K/wrJZCԾ(;u`HA XRn7'h4?97A1!?eG!lLָ)wIA96+8g(.E/#okpO1w&!xeeFW}߷ǩE:io*iA1vI)+利ѪKU.w, %%E]tϢ2d}_2Yr̲Gu>I+0*yA #UeKMJE~%1Wqou3`-t_NMstG?ʸ3KNyeԒ]fk9iH,e''8E? 7PE'6!iezG 3.ǴBf,d-m̘ sN6{ Z!c_uT]y!5*iҨ=!fKު3)\oWY֤WܴM G\H݂ɨQcPv5<ԞOJ%.%"\ !re=_i~u3ˁo2sPsLnI )|IbmVZaz8)%܎ H.` +1 a'H1!ފWs [GgnЯOΎ1_<(WxVg9#2go?RZ`a*t Hw(74oPWC.Wށ;C$)=nǰ =%7!ºG9ATc@JgDTK؝#E(9_@ȍ=9UYlvdR_nYα G9nMן4MUC;HMHEfkGxhn'wwO+%{z>9b\h.(TZf^'ZK{`WvYLoL0țޠ/e܆"Po(i yrC]Ҵ`.1E]~lRyNۨiL-ߝ<:Xmw~lLP4=̰FNA7I~`BWQwpS ~QuKOR:=M0r)[g8mpY>v.%Uz1wq- 1`BX|{pw%ѐ2RkIX<02r֯.ɛώ}VU?;a-_[>TQFtZȿ(_|fBG}6nOKr}v-m XȈBëVz^ʾy#f]IDχ^@zYgצ|bL'UZ56Ѓ} [vg]ׇYՀpLpcڼ0~;{de&HL 61EI**O{]=S*4 if7~ܟ9g9>T ߜM wΆZ,Zfo3  uQ=^{*|M3Lo11Y+Q0ZeӥӚwLcqjPEl )n 6i#m :k-̾!'4Ԗ o䨖T*'mx J'۾#V#n 61Ҷ5Oiq`4 ٟmDeKa9Lu/WBZ> Q x;v9i@ڱC,Jm=v'qiȚHYO{-SpT13eG1^\DW^MTFU@ 2ޓ-:H l#C<(^);seW<-U@E#sgSI{1eokMǛޫA9&@8O+&]"M9ȸq˧Uye芤?_|SJcK̏UuꞜO|M*o{cl6̒ /:3hdv0-pdONҙw;?!Kf.&ic"iQ؟ 4% tjzFgpӷBu]?o:N( 9vlǕ֤y0ka%:BmL&01&2mSM22GگDU:}x%FΌ ?Bkl<%fLd(f-^F| VEF= : !{"b9/s6+@Y' XHU2P?dm_A/tW,ܹXXd<1HS$gs <>舎3/gv-3L؄\ׇ:H}Q51kC\6!NmDU?w 2(i2wh3-3cÄ;} fGaG uMR@8w8+nPaybCteJS 9psN=byNr!#G:"nPscss_lI>OAIosb+Fl"]~hXAW%ҧ4%d&^le^Kྲྀruۜ}N]hbkiLkx5jyO[s) BN;9 |ϯNүOY؉YR F5n5'PR(h/2L[}y{yhd7zj71{t|x`=qfx!Jpwmk)}<ZD@'J^%R)S!| 8k? 98*鏙d/.ظ+_Q (r@=z^^_LO31[r^18xţ@"ӜUB~8QYJN@LǪۘ6[ "o[2 8nl-:`d 6zSBP(+&vKlY Iv+p.oc$ԔYFJDw|/>O*8{>nC,kׇ0cҲ6A[ Oa<8Tqh ?+8Eļ[2sigbz-p"|&ukZԴqyi՗'2FQ`ܦY ɂ'm7fY[of5!);#:%euJE W Y#ӴքIDHٕ²F5ifMDo}:^ck/9x8=Ix[:mRmLطv=G3k)dY{;x6\YGjAo#=%]JFCHjʋfF?9e̅@szfk.c=ZMů~2և-_X49 v YvCU2:qoxɥƇCUsڿ2{J+Offz{tҝIXݝ61.QKDT (a]b6;ĉPPvd5 r8K:S/Q|3MiNu%T5Ԝt &ciwLRQL`K?^ Ê `!˜voS_ do:v~-&gCAY_vY@?4_'WN0f?~0Y 3wqI36zj痒+S~Y[[?LYFEjK@V%$&첶c@ $Mu@!eWa23! Kp/.D&;GN{*2v wkmzN=rJ),]~:Xiy5Џ.` IXzYy{nF>H%=F@f\70F[5yQ۩=5Oڙ_DfW!QiUJAf;9 uݡ'iI< d91 w)W^\8q1[KX{_W>)Y7!e[ =:>$*Z.ª:[IMZ`FSFCuc{T,n. Ndr5{=72V5dU}tЧ-Y+ț0܇((;!0E<J æ!A901V:7䌬7\6Sw3ޟ-k s,-) t7\dSxI&b4쪸x&k׋0Xl^Bβ_XC*|_;YYRpO/*R>TMJ+SAIY5g+{$%SLJ<01d;ѴK݋, x95 k~BVYv_u}օY! "T= ؞ԅ~e^:% K+^e&%k FiC bAI]۟P5 W%~C#9A~:/X'Ɉ]А\f_I溺Rj180\ 5T.q?+ܧc^^㞅"ؓAUt]gweu)yF(j<U?_E=n5YbB&mw/j⋜+󌋘KQqwrnE,֢da>` zo@!Ask~klt)T5q؝3gqgvGwamx7B7$*U9 {#@hy}ᆵku匑RsqIu|A@3: 1K5yeQ7 ܭ/qyv|률}+c3əU.P첰 WFDW+ct$:5Ou_LA9ba걊I!˹%tE ]yר<bA5>r#slpq6Sv$w=\aK:v)]ӝWr&EɌ]2ºQf"#†Xu9! viz┋KUƟnp74>ćg^dTz]C\-`72dmS |[fA^鞷Vy$[t5ka%lz6-ld PgԣsMgFyRʉkdI#F=ywy7.ig[ɩW": Fu޴n9u#zpZ0g"ٖXw IPG@w#f4D^) m^eDjzcROoȐB|1Ě:\+|rL)i!ƣenhwC ̍ zR2v#vO~}tx< *+UA->h4?N;`2.+nNwHh+a=>ъ[9 =g0!c!"ygKA%x!jLk-)+ I ˀZX%>ZD4d~E{XԤm;u*Oy!#-+֜u gۢшf hPz~YJ7bu"d&n>v_ t qɧ>}u y{G*rccf01Ɩ _Gl*)7ǭ\LBicd`|',|Hj,ʷt8_4k}&uDLCa%M.E,Bv;2(Y3'F+8u`A9;w l$(S+~ƅ{kЋvXBLhSZ'*z֟MLJ87GQqԱ (vH@rޛf!!Vqj$BC lFW=|9Us:֦,(uoeP0r++o|iA{f3̇‹\l@-w *{ w`'g(%^%:$b$4$(!f9G/ʤ %'MBywGļh}`_\ڑx煽[ -1u9\ UIː^Ochz#ěC˜~L-i[~%eoG\%'hԊXYp_C D` jHk-s  YIpa=\b2. Xq `dmv^6_`gK&@o+eyFu|܂2VF;F5pkN?hBp\3n{y1O^ܴdՌ{fRzۦ m=rXnYZM`Tf}YF\vglm@-­i31q%jYu!_aa6>v-<(M94VY8XXxMI/ =~۪1?BRHH҉(NU05h_8yG; ym9WY)G3K,ÝCrҋHOxvokx!LKٳsRsS&/@^kk\K*%uɞpyI)گP\r1xgiwv}+_x ^D# CB(@-mFƽ{SA^*Ǘ Ts:#6dW&ySføߪؒWks$t+o/ˏ*1Qhz}$`fYy̥ݼ=K-ԘGtE<7hd~w9;L9N4`]N)YnbCܷ8X/k,rSa97?Gz>}mpuNRub}U!~vkqwnod(-78V\|4J*R}l|EsOuC"zU+?-ܙaa2+VΥƭK[oFJMȦ,t{O3p:HWnK꤉XKVgP?dVD'J:(b׵IjEF/nN KO&{u?4@e,)HJV=.I putR|_uэQ=MۄG(w>MAE.J[Һ$ȹ}P 9g\\d ̌E-qr.Xד00۶e#ef .Ǜ;[8;$[DW_>M*P,O٭a-{\JYY"ifZXƵhWH蘀᦬eZ [ʠPvE,HAoWMݚeTQl@ݕw^q`u︐rH.P!JXزt0S8iKI bvpGd_Q<(κMW~RP/ w1*u/h?m 3'Iu߶);\fzi@4jut[Ưj[W}YE]7W]Q&~>q[?tiS5F\& ; !!V^N]7ΌpJBJB`0!tV"hWv/;YbV .y[Xq+9JNIIUu9-++.-r+Uele!S\Vr8UX5sʒR&0STs_ zm9)"KjgU=_dj{9NAeP:b pue"&6u0PWo Υbn%{]ZasJ* 'gIS2rvan eaWUrYKdl/hwt@ݛ=iH:>e{ fߣ{>'/*-8 XߦJ/i/v)&VyccUϧļ䂔^֓YC%l1D3V4t={.WM]:_JIvF2dKIbdn/)v$S#:j@skc&dnmkN>c=ږ[XrܢWh6&OafIz ȚHEY/jVg# k3aOq!WgWua]}4|lȦφ|L/&hVQ0̜[AL2jU_TT'V2,L%Mniμ]lp9;BL-cQrE?B݇+̵Yt csF|zsNKcm;ez$8%0ļ4v'I|bbo C%|#OٶHxLaIyL/$7ݙT/k(ڜ>ݥ鱳oEً""`[yyÑ~icl*'CVm*)n~-sam? 66;Ř$=ĢHs#7&ۋsG6yPgg'?g=Hp=腙ku?^m5 sa.>/^6(e5ٰMCL nA:9&%2˙^PW'nWW}KA85/R5?:3.=شT@A,Iap#[6tآ#::qmڄ$HyG$nDz1Z5effpuR6d66jϯ;n|unnfCAGۈR1ig|'8Y d$%{Nگ"hG~Eѕ*{>ɹ9Auk@7?vj I߸v=H-0/ٻz ?X|^9IFi\ޒ ț^_^1L Źc"qf#VAL7ϯ | g#&9TIrc,rLmsDD+ܞ+~>w|}auZrwܻsHڽ_>?S[Ư;䪛ۉ'w7c` `XH!/ص'n28.t ٴM!܋oy=EiIqJZ!2c3 7,taZ"f)Zºwk'VA::v`5{ofw EaQ']%,= S`-հuI2/3#]%خ*;8obVVߡ~YWiEv~Jp{3r,F.ϲ/#k;dRBA xhOE<&1ءFÆaVR R;*&2a]b"-ZX&ƃzȥ7?>4yG>V$ܓZ-hTBn-f8g1dHK,鰁2QqbV|wkLd|JrJ>_92-6ܠZ6QRq08da'\xԩGaг[}km\ΫcaгbH[ ۉ>sZXuÇ|5@7EQJPqǰø=#nL}9?-k~h9VW4w󋲶9IS+o5hX{?3m8xx@v`eUQ .cxtSG`ѭ#!l/C:YyU9صY̧c~xo+_Pw~xj+{v_3/O~/Ɵ5E:20(J~X=鞪}^ߝfy Oq 'ȺClz2ҩq"q!61բY ̒)zk)Q5Avt@k{o cMu/ζ3h  [PV`i DmV#a3N7#5SE۹VDCqTi-1SGYU~>gq!O|aU^7߆ޜqv*/=KvA[ D/sV࣪O=~ZY43}pvӔKʛ@urd6') c)奬Ow\́:2h _$.sĜwzQuoP~MjF?-p0+xy$9Y7?9 y鹞/yU1Zz6DxrFx.9_Dy)џ֟6~zFqy}W CVhbV B˦Nlq9WypYyY aW- zӐY`O=Tvkabda628RF2zYUC׬~Ao:qֶCK ʒU|DXH;J|t;&4 ' 9 Y褴O}3@d`VհkZRي+~a*|qrIlr1 sn}r~Xw^Ud@Q#NY `܀={g)s1gVG q'>tV̈z+8]~G}ŕ"t\#<l DTXi"dkZ8n5u\Y,n}Z ӳ.͇(В,GK/nK=joBz(ܚ[> k9[4^{RYx"9JaŽ 7f%TS擄WTqU3dGbJyX_n iX?}XXϖ~~ACߙ= ;x:MOop?@\-?CzffY!bæ,kW-'j~8"GCKi `#Q\h4p8Cs-6hgJEx^tT>|$>M{M1.3NcqC6-"`-bҸeFFy8 tς|6z9Gݣ&f3_v\.f"8GpIKDhiU';ԴA}B=ixk!@˺}7mȒRҤ*&1 LXƝ}T؊ Q6j7rS7Yi36JKkc!e6 z^ m&X1@4M+~v!O]y>ws vg1_B5V+lv6a{0Uv.ggJG R򭮡FِIjJQ#>9zF:24x55tU  Qv zK2lh)AƯmzE_Lc;"d,"߷~̆,Lj:LZ3'@Mwu{J ^} uF%sN5՜ bA_iMM?j֫c}F ۓ`>DW}9(.߈+ t[genߣ-4p[%_̶~N y}-EQ}2e+j> {*HQJ/Ө15H]ճIHû配Xaqc|3~`EcMSҁ9rk>xzfcG)bXcFI[?KZ)գsu %?k9@$qNI޿(n}ލO.ȷpnxžnl|!bPy"޾QZqhx 'i:6K'P92iX];/4}bFr i5zU;R 2H!BkZ[H9lkPyCβ`T RvbJqǨfp x o^Zx21^&@9KzpE-rKh=2x/}{t m.K+"!S3#~1t zIbZ+0&>u"p&vĐ]۵Ӹfg 46=?/sj endstream endobj 25 0 obj <>stream HSyu6U$%5kf&wq4&N (r=M1qf" 5A.M7M7l>Py-nIiBqE]ɯl/zMI%ٙ{f{耦'Sy~ Y\|˅=(C{o:><4Q e\'!Ibb j-^y7*1vi!IloUR3q@nU4mO?4^X!6 ԿTZYBŢAGܤ.ca)~{Tc$Lt|gc!,0 .wa)hV0Q@RI aҀ$c~ɀW5hlKGm0C0ȋaRxZuߢQ+XMY&aw1w~xR \s)@Nc\PVId\ڠ`3s?ɢ(lBoV/q9B$ a@vmwEv9 tԢ6;Qw280XO:ƭH ̟0ot3iLJ&L:Z!}ۺ[Ziu$s%ccKunaJ|!Yޫ+K?ξ}|ވq(bt{I*˿T]g+B~H4Ka]oX3㳞!r56zo:q|:,+bIVgc>xW3]#60FKm({_ ddL?BMПO;zhOҳ\H/Os"DIn*º~6>D盄hcW%.u2QO|ZE]4(Z9\|'6v%RX&dtnEs(#}w*/v0K5HaS c-f8ⲫЍn-2Cԕg]UA͔EIGg&拞%*jhiqd]>N1-tX"ǜf~~S:rzO&ꙅR̍xPBsIHDۅ{S},[omE}>mpAz?4rzh1n;* .Q9N,8\BS1tM:ᲀt&SK ը]un쩆Pk$M+S{~dc!c10IT!e+mI zUAO!]/GіV^_:urs&log0/cv0uz?GCqFBaJ%k<v&nI$Ao4Ygʘ"pwvՍs$E1/Dnq6EqXzI9Lv~iʤBAy"R?Χ74}W̹,e1J\?B+l rg6}8UP6 j]r.͘g[EA3o+Vnm"[SqUqr#=2iQ3i+0 9t[;dwOŅo[Ub9>ZvD:N/9/dԍVOV}2!!r4iZRuy7Nwz=ֶ6:cbS˛S}Kk_1ۚ!*K!o5"qA;FqHM94U-S9TV̻X`b&nSO}[/$rxD5SS۳ӬBnGg:ٸNRZ<{:Ie[~Ffkz{]z"FgMg]He[}[0ە8j-Z!e">.nST6ѩچ}㈛i /Σ]_y!wVؤ-V]-u n5凍3"'6&fW"gԍqa]!WJxOO3@ZP͌SO2n>2Ng M[!Ii!4`YeYڕ,Kc˲iOIK?Ah4_}s("F6@Ӫ̥f^ЂĐ~H02T69~iøz s_+ti;4⮑86n_y [r;yhz:Eq*Yش!z ukO&9/B4 JøPzJ`^ݎp6ZyRi,prh;%2a;DLbi2[;mಎSZ:V"/JXEi\HE_@v|#q|m ,E煽U8ڦ IrjO^:U_X0cOmxZ!n@*D=xt~L 6a'SR:pOGu qQ{h/AFNRa\n y`?b7ƚ{xvtO 7V')a ZR .Fb&8's`7Jt{닿yS.搩V5ܴ  탹x=Ki?5MtW1_mrΡmMC߹{MDoy:qW&&Q}mR*j柫l3a2Щձ9º>x1B䘔(aʡN | >hPQ6Th/.eW٩"h0(5ÂV|R,[8f-'=ܗD;tlr3ž`vU"DzmLW߭k,dw@Dڃt\ ?+pnq9 3E Zv4I(?JcFӁ]X3*%_[±6L ^ <^>jWB-/#E-jri ށbhA)F+ଚHY/*ki稐i3\RK8N:)uOR^K bgW=Kn.XΡUå5`1֨j٥oCC b\0]0WU_F>V$٦qvCy'T䱜-8'XE`+iGw0v&9wיߊY7ҢzLq9(bsA6xuiΑ5̶<*Djtiw͘V+AC$:)傑v)DvDY_МQXD bS.IlQ!V;b`]G΂W/չe⟗ #y0ac8G[ مVGE8O9o+Є[bY G-W-:4&2-!O֡q73%1vtI .#2T9 !W5P]>}v$9)owBfWiw4ϺOۨZ/ӏ<6)BU\CBeQ.ja n٤uB^:ֈۡۢz:H2Dy3M8"Ro$L1ˢz.֛?N}ZHMҺ MB>͹~:s( |5a@;!׬}u8DٌF' a9.ӯ&4o8sLge{DY$a = !60ݶxU%RvHRI%%<*zIڇL3pqgif:W|SgQ-.6 3wi}A[&1HyՔ6-4?)mϜl7,CuLwn<c nՓQ65e*6##<><%gȓ15ĆÖƍg6L#ÓU~M\Bjat'_x|`s3W]5GoӘyy4S bTD4@m| C}*֋80OO` -\ M[䪮L"ڧK.˫RN䂦z)j1â,hz$ѵe6"d@ |Ώ)$ܗtiZ(Qtmޙ}9ro>eSzMՔrڤ&x#~O<ҴƒX)8dag3n}I&̠}?S @CuIrih$jB~? WU 6>~MkދK9e5ԪA<\ 麲9Spe35Y9?QE9[:$SՐ r5b`#2'#-lHۑ(鰾̻y|]2Y-$}7V%jIJ>n4J鰪5}u+YAY;r5ez&΃4&)4t1~}` `oL̪{Y H`Z&eZ 6`3N>Q(-E1"M /.ƌ"##h˝E+L^՚#kprY Ch:YDŽs,؟V4 Y򘏛Qyl$'k{A]K'ᲮuK,*9r"ה GI$]hXႦSQj酴#L| >ql{1yޏII\υ_{/ltH*QFVN KALT̲2( fDv^H/&[o/e7`be_קڝ8v+aIx%L:h5 sYշ)+>('uw~Q|^ѷ)g\@rnUc g³KԊvާl؛シbzqk)pTW$ r^ (75v̟(tMS݉3tw4fD% o>Y-IY:hb(*DE}y[bfzkUޫ{Y穙>,&'Y%P2»,>]жQckRS҄,qO=Lo,6-eA%%l3ŇJ<Qt`VĀ 1rR*pEǣG6#0OAm'Ƨ7Z&zFWE+g^T37ns)۩?ZjHnЊsC5޳oM&l[IZLsa32cp4!+T#55*1 3P59C3tukl[aԿ=fw`rv_E/t͑]r\g /2.;e/^Q / K虶)r)1ȶ [ $;{n< `UO1q@ŭw)s-St-a-N9#_7Z ?Us.tf^cou Fe|:@+t*IB7 o3 I(>!NT _ډn)53,*X@Ϗ=D4*:x r!&<4K7e2bۨJzbt]W|̱ <Ư|J,< ^0n1 G`ڤ/\mM@9>%TŝnSU<_z:O6xݮNl?S +|딂m]_s˛s2FCDIMvGwQ(/cËbr\܃*> FiiQlQvLS;qOP &j~=`O\`S{dW@{ 9ǣO4zt]A a kIrOUģ6\p3)9E3P}Ww7\x|~P>P< =CߏCU_0 ~W2*zF&Ty$|lrZ&q$X|xrY7Fz=D%XO̓5Vg_n2GZɉJ}^˛*xwS f?-8Ex1fkKMXkh{#=8 |>c,4Gr]HCD-.+J/ S5g& ~Ttm z&A<1 $-0a5 $Z$m5KDx[gg\0e}(ddž0%ćOK6d@FXѮYrKFAa93(͐MNE8a~>Í}{8Ϯ5:+C1$Ԋ3@+<5lOzJ'Pww>`|9P`\F#e٧d5i{:;70qx 2bc?JDh*e].!lD'>ׅvsViJ7#]]uսP7%͏?dmM蒍U.27G[{Y}Upm܋ 2W:>r,3M);؈P}}WFrbvl,Xy5GS7SKE?XkC=si߶iYcclZ-lC 5_t{}kTk1swMOwW- Ѿ*$o QnYS鱆K>䒂k*aBF U8&"$hQ9V.gUa ]0d{ yƛKB C=M׏Շ 7ShDqqlk,kw̶UhI#Wս5W Äɖ7SE)8Hm7YGoׄG J[uXC/Ky.R첶EyUY\wRQК3mFY'Qq=).wD=y1fCa4 X:" R"D*KAV"e YC4 fyϜ_x\|nM3@H>ű?W[eMȘq@"NǩtKv@3e1'kE2Әk}.uC3ܔ/ Kf=D]aV'8=چZ<3x𝾟c( <0r$sii½nb4LR^/"xZhZ3^Zd, bxUxؖF&f ӑiB{pG>v)c~mυ,p6S #f&hc*GHY`TuS2HӖPRNX1/e䍂2NPixW5?ڐކwٞ'Z<q2N?:ȧJ?B| ^Q]`Yh)5˹v*k zd"vgW_1§s9>Dp ZI RbIߚrM"7_qi` UDEQR.B0.O0'v3hjJ}iCϧq>~*+b89ߴ1OI=nZSÆ ", yjGEv iNژ2v4B3ҁz#&!fN)t\o|T_?]íUnGpfK2FT/d(+m+̘an7U=跏g|OC? ӎsjłZ~{C?FCfQF~Sv}W<™ q8Xh- zidC8N$xC|(D*Lq#ag rs0=Te*4Yx6Nw_k:*A._0s95Bޜy4 Y{:08W<jA|lř'A1{RRܷkL) A_b4܂E6`^T\-5 B}eԃBS"͎|^jӂyAMe4%w,e-[V?F 8!`LegYqK,,7XÑlR=\H9FɾG"i$d4\ՒQ |n8hMs QۍLm7%#MY24FY}l`ORepZ4FVyLVSIf܄qZiJ}q6A0KK"tD/]_a| DԈO4IQx9[jߑXـrHu`M@hMݙYA֟m ~r7 l #kަweu V:c<*V+`EYN4!^Prsα?M=~}% mŁKz5Oj†w0Pi;NM]u Ee8&l;/)MoI_4stЌrV+h%LABII0|R.iYۨ!wu!XW]=70(`w{K\/PS<]/y4gN)k( }NʘiWsK+[#)v5-uٖqzxśQ䤕䫃QrH-'?DYmFA<  >S %)VrK gRw|:F}:C-FƻmdYm5f=C>_aa\jVd{VdLBS=9z3YO~R}7?Rb4Fϣfyv&\XY3䔵nD -](yK2os%va t n!.x[d!5C9\(t&F8gߜnk%3"*oңE~c{W*NοuBLDـ?c% C{+ HUm()O%ڎ >TgY5Fq?+imn (!JU/dhl-1+0""stxw:B`';_%WMpo ƥ)Z*7)F8):)jo lU^T?nՍZxt2̾4PN91zbj.Q@աm0'Frmb;f*2>UFKPNumI]v;aoՍ 3wBNd中g{RR:{ 9QnOVe9-2QsSgWANgD?]n?7!|ck'{oF'F) 1WCKma\Ot.2 nv_3D}?HJh$}:Y _?4B٧9{͹g4do*V)ܮ ==_ Q[dМeZk\#PL_C3gΜ[>Q+bjwS?&[Doè&gTѠ]DS_=3a}>uI^kK^pŽ\`hD7B&:l'.USkYpJ:nOϩi||8єi!m!MFhZtSE5GEz?QIgu~9䝥Æ.Z lw0 5F]FEli&4y:|O Df^xw16k^g[ Q*V:z_J'\d `>;ҷo611QBpl".!/3\L'5W(N̚3pk] \ıR;Ӓ;aogʮHFX1H/zwud+O9Ce{f.@زP [C+y zA j_y?;'>j'"]q3@}2ap 7Y~[9~}"lNWdc%|C -gK'?>e@Ekg1,b[ V ;jrjVsd H-Zib{WIO,!7^ īcf!|UxR^ -Diǧ[[[KW"KL\@˩=!lTܑ#ﻔt&T9>=GE>҈Rp8z]v Q %``^hjZaYc ;] yI: "f$AfI5;:.}U!%*Rv1 Bc`Uٟ{ӭ;V#>ّ7?r+[!eZYZ3PKڄ,ѫ!u#8 DW6ŢC mڕ?rOW{hX-`bņg ܏.Yا"SrJOfYiz0 %+27*}9rݓt_,EĠMHw^OsΖ y2qCFzGI.0njZwz4 (šnOp0.\ƥ8'W/mݝc410{cV@j))tHqlƩQB=Q6+oYEU-bԳA3uTBbG ,ag@wS55 'G ͐(tniw4-- fxeVIM0Ǔ4e-(H">L{%j\ETxjYޘ0CKan[ Q?t3u@9%&kgq%T[0s꘹k!ѧk+iEe$%&IhYNEs{8sQ]scrfsMw.nlXĝi"[e ˯,o?l־<[a㾁g >Jwv8)U{; )Q[dFL蘑=f~%DCGu@Ń_u{U6 &ЯQC-o1

ͧnJ:Ao=^9p1RiN?SN- /l[t<&*fەt7ĢP(j|TI=`f״{tB6hnhGZj5u =lJfxs|&lK IB}8>AK%ts!Ibg)oWAX{DAƱFx0-ٛʙ91@}UF"y Rͥ5 =;Yn|d噸-w$@H䬍7asǣ>ιY8>KK/DԼΊ5i[G>kpgEdVFpKsˢE%Vw%^ *vCHEc,kl%6W0hea<]Ykf% U"1(/=~i*^4SWk훊5YnHL?ѽU oU~Yq:,9j{Ѫd)EQZh%J!-li{_m;oʞ P_ȽZ0_OQ1uIHE 9eKW\_`r=Xp jGmy'K"aIH:_Wl>l5I6:z1aMB1/+0?CS{^b;`AFje{նr9)LI.R є`X` 2>w纬*hc-?[wDÄ[iΒףu問DypF ި")Lh0X/G;+4ñ5Ǭv) ?AZ>|7aՎjME@uqޮBl,B942RhaJ4=mg{^bG.*k- `+HyI <glagov61U$Mq&=n[nk,g_4o6?ĴYQ~RPE+r<[ ӭK,B 96RQFpkq\>ԍ I{8S 7DUaY1,=C3 x m@;9[[\7(k [_;B;~w-geP6J,eEQqKBC\y P}=A5 w`0)`}W5 J p-}G=Z˨|؋D bi:9dwf23nG㏢rjvn`jYs͡z5FHʇ&a , 3p %L5=ЯK죉ʰ>h +8D93ܠ^f5(NKKpR=W{Ps4;K p3MWpg"9鿩ia9sJwZ%'QO@f8?[Cؚ[s{4nS&zWeY3?.ܔކ>FjN%lA'HpGO$ttnd ܡ|yaBJiѻF5N&'S={*Ҽ;kL@j p-Mm{àAlX8t c;H" AaPvBt/9IX&_85' 'WFI {J{/ t7cBhá.J8癗 a =* !|ސ/@,E_O8Du$ "@sCw=cN:fNZt~Z7UW أO@ؤTD$]>Pp@\s몯kGZ[zKiAӉ Ni0[(f%ֳG$ofE?-18 oƭ]v̡_B;Awahخiy}Xz4HJ~ c4„TN¸TicME>ө]N_/+.ϩio^9kV%aVߕjfFr=j,*Ubܱl㑐v@<%*P%.IScW)}gN7@&elNwNJJƤ<~,U[Kȹ ӳ@ICw"v#WWEmYwbSп,_sr:'ilGw/:Ê2%Uo3jqQ -6ѳ@ *+-+%„M%ygLK_ktևR|69+u]?2h߻"ǐ8f?n^Ca)<)"zg0A96ݝI9\X?f|r(lJY2Ghd>xA^?s46";}eͥ9w؟-:o{zyQ?xWc~}G߲<GdzړQŁ82>Nu^CHDM_%96wf6}p8]:ɩC?);W?>4SmL)]ysٜڜ7*%de迻, 9箜kG}C#=G: Ț?ڵCP26wOoh5;q{M6|`cfҜKD9ĵm%7ah,>Ph 1K0UI2jhϷ3712:氎 Jp?(M;[%8\*$vwݦB4/+Xhi<ђ!wYJ.g.r/kA^EdʌOi=[cDˑi ȋ({䢒s.g75PPi;ř*yfԹ]rSH8 yڕݜjMnZOLjA~m9dG9ylFf!sVDuXUC^ۜ85Q)쑰^)/NB^"kW9JF愑Ԝ^w(Y;,,W-g`v4Do9Zt_FŲGH:DRPɇW3 Jµp8MZsT BETAx _҈y7M#A0>šlh ,d)?GqHFBĭJ@ogja\K% @-XʺpBpڃp0EtC`nlLɯZ8\'>5_tq; vX)&Փq0k!µWc_z샂Wsq's.)e}zl?ӯ_[KU^2Olr@M6DOj~^IWa27tj`~W!@\ I1#C׋xҥ|J%_ ґ%h'=O>DxSC ȹZ%{h)m3ۿ6LgwI퐇> Ɏ5Vv_aCG=6FD;6򳴙NwZD?\F䒱sfJGƀqjD9!]eݜ/{%W%쒓5Rf̣z*{R9qlႃ5Z; p'. qwNުovgNcw&8 yc/A2"3ƊnpU[3lPL/| Uک=ywPaӉtC W,\-HB\Fo#d.#`SL }C-}1-p㙙K]U5yi{$] }hV(d3UP";)ao񫰞{q9՝xMuM舘w?3U @POV1:c srDMZy ?ud` ώt訬 ν'YlJ=Y΃zX"tm-_fr`'#֜Gʜ+_fvBaN骸hEӔy3i3!OXssѕ\SOy*W}{;m.i`4塀V{jr{Ĥ,"f`{-6]x1\3E"BHiF ڐzAP{7Mi9P3Z;;:&ݢ#JLMՓq3ն [3Oϟ1`$$x8tz~ݚ {AIAԾAHS"f[|T*GMRa'}>+Ƹg9K1A# TDJiY!t19W{ TcZh\Wt]CۡRZ .!G4bDxJ0CCM! aIC< j+ؽlÃYyT13BsFhب,y5z|VS:\}HjIM13!ysQ"V%`\`Fz]B\\iѿ 6h(e&9#*}W^!>8>Vak"۴OM[}靉ɔcV{'{?/{|*nPI#䌜lRj61/cs3;|Z%Y`V"dɒ /Y Y#2T#6׹Hӏ2鴕MN`^R_9=Zs,&NLFGA?p5I-iN^=>XAW}&O9d3QNq3RTp z8Z%<ER tM*J8c$}!%AAm8wjw4b8Ⱥ>ҽuqHwҹc=w0#>y}EbPxT5GORY,fg-BO{hF\ؠ)hk¶KFi㥄>p'IJ!?a5T>9wO/G4Nbe"Rz. GIwZNݷ+CO.&!i‚{ IC]8bJ.3ؿC$:@#)33p0'v/^=5?+{μ;RNq IhSEAXLlCxYm*|l[Y:2j*aeTdhch1b/|yӰz~Eϵ}5}|vEZ R.zrѧlcBI#UTkBoGbk:sݩ΋NY?\oŠԴו'Wbj@t[@Jx¼OTʬKO!.n' $x0Xv )O?E4ƢXg|-(:ż2 pd /':rZSq!01y4A}Q-i`-"׃Mm vSDuNJda1,'_7ͧ YxR8e2F!oFt栖50{NLd':eڡ SV܋IuI -IoC0[@*u9&m0x }=ߠONLeۗ ed!?f@=dglr&3$hYKxTb%DA$URDQA"*bD@"M9OϗsqC5LCB^v[،דP6VW1P]RTl Z/7M>ԧV1,7{6( ?[!Ԛx%ŽԒjlK] ֿtQkmT < 6*O%'׫kYT_< Zn~a 5u։4xކ[9b{kLfH1/"Dj{zTc{ ^ Q#pwInigmu pw1-ы5lX©\ج;udSkY3|S  ~63T4\[,9E#~E Okzn!IuTi }\ wqxS()ܹYzcq*%|"dZqrFce5ݹEx7LZ핑q+^Wq!K3땷dEօ$d]>Y#U빬ah2|kC_WWv6b gH)zXB2 McSƄ9EN_"[mnjyV tD3uFTpYն H]s /"Zҳ bSL*p,bئr>P<``Sb.3AǍ},s@-Q0p{#c>m?˫d@*J< $9 GUwզzAOv O j pRnQ &Vͩq.,|= $T)1Ň"DzMCV0? ,51 \1*Ex^%zf]B*rkg{qit]RG؟LS~ܟmO=ώWь, :MBU>8횼{R G]?Ds._6fN4$JX1 i}~D8eoݒ5'*nݣfZ{'+,2&-]X&]u_nH0o_dĪ;:)ϯ4;̮ÎuVGeAYA2{1C EFARR ! I(!H%@hz<{;/~o9{Ϲ>oJ)?}N+~c̝cձΜol݅oINj\Fæ^K<6SQ;RdJwe}[׺;niiu֡Ĉ_WA#`ߘ61AKtEʬuO;{N3+;U"e IF:8i.l{Qe7:h=7>q/Ot+P\)/7C9u}dmD,`)o:ӋKUͬ#a7TB6hG:꣍K ~ 7OEGe˝y:7_{f#>ĥzm- pJCXsYx|Oɩ(y!mrcGƀoMM%Ѷ%W57Ղ91*lႀV|~sY-+ ©I,!rD▜2p~lRNY;I.pm{aզV&W kc}2Nîshyb}|lploIv5nUk[ʨ<54PA͕kK.)󦄜pPn).9}c^")Q#<%2!,\$=g6Zzˮϵ_=Vwק`K+3UE|? nh98Ry7lV:_ZV[g4b-:1@n8qi26$Q 5!iؖ3"_I)ˈ|\G}\/"o:Q]FH-L^BO孍Tډ hӼfkXW|4Ȯ_eo4[:┴%w e;ȇ{*BWi ۀidq|ŇWy>q}45KXxAU~-ŧf7 7g%x)󼊞?j"stٲxeW\+.L=YdQRT;Ӓ[|KC?ht}oSCF-z~*_¤m _qQ~eyXxU{uj~}l4b); b; &mM2CMwwm99w-&ѭ:&e!슆S]Ü7Bλ$k+i~2I_Ȩ%)'f%P Kѩ]bk~5%B,⎚Z3{w :p6v~mkF3n:uO# ]EW_"]}aQkZ}% ~hyOS-t䢐͵\rb_l<d@MC~h|zĥJ|17VLD4V汥I`iLZ.H̦81,8;M<ޛb@A6ɘUW@.B$;>eC_y+G8@hy3M5 ,~c 8vȣ<O{1;k4^X!;RTFPKdZ[a9l*%6hXǕԚCЛ|j*]s˥Iyh{@UHM8<[qm[Jxu0㸤MSpO59&-|jʣX q30PNkJ3(Nj=MHGUFq$t )uF\}cITЊ2rZve578nWNtm yfMOwLend=/eV7)ӘjI,AWĚ ( U)JS&s{ɽgi]]Kݶ (rsj^ [N^><}3 jYD/ tCoNP쟢嫅+WWJNOێ7tn)yg9)yAi?c ;Q:lʶ9ry5L؀-- ϓ+# )Pw#4رŝ|ƣ(`f <0oa{{n9ɎZcNӞ:7U;p%1s fI}`>):P#<%>0ưYc;Q =Уw<M5tw\.lbm*JMڵo|oC>`fyVY}򺜘mx5V`SصR/t@o{jS>ҋh)61xw]eb`!KvW$ǡ)VBEDy&O}ӴY3#L<>T{+8-Yh l2n͂]cu욹w{έ@ŗA_:؂h厑ƻXW; u~&>9=D5@CƩqeyRPuKY PI1;{o;/l}JvmH/oQJ\# 9Wؙ" δBAB+@:L^]l ֎t+DK~~%gHqjQ`^&Vٸ--w[1&#zH5;z9"64ҍ RKAȈ5YASP lOM-# 5Rx>[N(N W0ح <?!֐A>2Ot]Ao?Y#?52*l W5t:)I Yڅ9Z]Vs}₆[qNK_U= @Sd2r ~\xOqy5}qsZq,z*j*\! @{@!do$2 !$d0NٓQ9yra#1Iq~c3HQ1vjg5K Ұ1 z7aPFF7AU[[p/~lmJalߍid$6O/9jg}ffmD܌ %VG<#gϭS }f2߲Ruͦ1EF]p[], ZgM:] Ix_bvi4M.J?1a-WKrTG/t-`*R<=3D ,҉/J)Lεgd]2XZHz{M|HΜɸ]841Qs;s v\*]6M_f2EXtwcZrULh8doIkoX+Nó ƻENM~x`]=АĪTՐ*TU/$5jOƝ|RVJ}NkCh}62lI{UKwQ';yD{/-p~j2-@hjZMCm0djz65|;K۝C,O$$çXG\|s1y4AC}jOhYWW:RRqA^t)+:63I78ơ'Sd"{~턙dgNiUX>9E|1}ʫJ&Pkܚ_wUz=` !Am>1 [TlK(YS+UKc:&ss*v2;U`55^*y ts&$.HKkn͵gǑi =_&ꐖ 1o| <[SpC#(t8.ƠytTO~[EZAq# FC~ڢ"b`7*3?t5Ot Ga %$y\D'xTy$Cƈ K\QU4/'lK1KP"oX!C͏St9N`YdI־{Si2(I|t d>WjկVF-\lW$1׷eS6蟙 3w6$-N1r1A#(e{5v* [& PJJwy즩&>B~V^,1%P /- GQ(NTȦm♐YқߞEe/@kқ!% ֹTdCnsץ}bU\դMq*iUlA`WtL s~R3ݑ6%kFaU(,ȹcN2Ԍ_iH jdJXNpϨuԉ=4Hn C<@jȺ.-h˃1Lwm/vFdWJjDwS 5Ez-ޫĕL\8V21j6:2#|tK4:w@{MiA5"7hp>|,8ܜ 4@?f񝻛MKbr13XAA@{Pc4;6ETU@@3+/η}kC )3Tz4l8 BʨQ1h࡭/UwKax['4|gRƤl4‚jQuhAf$hn: ;r̂bE*d}7Ji ,5#$= ,|4obov/_ړWx̚GzA!dP7R:Q]OQ s9#76KoME߰sk򏴐eAt,q/BStT[Fu L,S(XڸW bI;sg\T&VUy}k]/~ΫUv4Ow๶IT[I*X_Yip[|H+ s! P֧ȫSK `7Zxmʵ-@"j";:=Hq\cY x #ZjtIrv '9N{4.Ti` E]:r6a_=Qw2*!&ȉ==Z[&UƨEt<2FΰN3N%j]"ר :ݽU '8-lI[1O7KEX<^pT*kq˜WGw;ؑϩ"V:s-7ӥf\\d[iaJLoC"9HnN9Ms#ŧa۫"¾sƯv蹙OXȐCo1Zd*A]4" ?xyهz1Ǵd? sW[޴Þʠ ~%"\C]t SV'k?eBW4[!VX`wا` e;tPpw"W xDmZq^5 ./@׆Qi>!IcY?k2r ίg Z:ݧ[ OiVc!S7!Owq9'"SG%9u(tVpmt Bymٺho{C&6bIhGrۣy4H3-q/_qֳ$h>q z/?eQϿy"g7PJ%?dS%8"ʼcl{=E{,Sz=ƅLNtIr)1#2,aqZNMsW]4>>K+ُʽᢀְy 9NѝI:y9!fɄwҾ=yi$fUk:2FLT4q@2eo8pcT ŁJPI{{z}Ϗ&kB(OLR_\לs[tR~of~[l;4Nc-ߥ8qK]fdH ?L˽}8.tVdtm}-kҢ痜#|34X5Owkn -k`b`7hzP.e* 0<|d!{mp8 .x4յ: &I#,TQH,pb>V>:Q_ߟ]Z¥Vte}iTWA+V~bg#`}B½ ;Zhȍ!kvTYZr|?mݸW28 g;2fxWrvg{:SY/E%UaÅܷA -GLPMl6h֒X'}XCՂ;;Sbļ}5 a:85Z{Iٞ൲̛6&tZ3= L=]ӉM;12;uhg1T~b$Cns:d=zg[h&EEi>:.sV6uCe &x]l, 71Ѯ .+.l\"vhN>X\n%C =ë8VjԔ]d>A]7:')z2+*@ziCm`r(ISĴ}`UPֆh9 QYh $wulO͂ɱq[ c=zjz iF%'CKugl[,!%Hi!EJnOᏝJ $0u1~@zԆ6tcPB%wW͝w,]~c-{22׎KZ&g]x6m^ݿ7%rɑUΏȎga Y.HIloptIܻ=e T&\5C%˥Ԭj, e޴ RDK]3z*䳡uY*;6p9AjWnc%l}'$E5uoɰ~ԇ!t"е)oBbBb.\k)N56eONtin9X;6')35ŧFN@Nskq\I`L}J1;LcjA?vZuOU gIAH ݚfVLj)Gf&ڡ 4I<xma0!Pͧz=+-#_͆s[ ШѪg6 ]myU@YFOcd-n3G Bijqcil@i$^!sNV5J`EZɰ%ˊc3:ޙU"'Z[*<-"Z1*ㆱ0`:9p[Y5'=1{D8R~c #N Ou<'.ӌ1<ïd+3Jʂ-Ȩ~d6kϹ,jtoUoF4wsOpfb~_+g(p:MOՖYdB|"oݵh: oO{wkcU,YvE܋|KuM,yA5!+Z#=:]A9g'bTlONI(L_WWE_7+xAgl})X^ -Oh|WF蘨ob Cc!!yȊ:D|7X TR/3->pݟ$g^γ*4yfi֬ǥ/HĶ&(+o3_}O-9cW[= m%d=vғY: "4Ch(T=&'+4>|AgC \fvǐ+@?ĭ-z >̳pGz&[eK巁כrzuu8 l y_U.4EJ+0IRڮubh|K:xe3Xg= yy*F̪f0g:MlE|e0k/WjV !kO,ۙnT~ shJ\y&qZޛA5RnU(掊ƢpWffK.UFu]%zlcuE e >| ,u0۴zgB!8uBT=zgR/[NZ}I%d{h9b#K'\^2<. Q|,d[d"և{Jb;_߄' 1FƜy:l2Hܛ;4mb冻QC=I eA+=xZQ ̳rUt(`Yk%iQ3푞'aj>_Ⳝzf}*Xm9-RqKlAJ̵[iw 7Ʃ+mAG|2l(ޭbAvhHR!dtJzڏOwYqʬ:Г3(M} QR?%sa!ʆxw-/{Q|jBG" հeg_+UKr|*JպHz` #S=uuMÀ; [ǼP0ȁ)yr&lhXk`h9&4\8Xʘ,S}An2KVh$J d^dZ&:{PV>9P`eҁ));ʚ-7-9]:>iS r4+I{JV"b }M,gޏ VmXPE>˭9~䏷DP*#r.Pd,?ً v) $V !^׏TDܯ:e&p"#{SvcjF9kY`*y:j,qceߘoBM9nҢL2^ntmd(Mʑs ٜ}c EI6EE!|]ANq@F[ {&ܕap}qxRw$LtRN$c1Vlр6 E@/E:vcEAETD, &"(v[sy$n ` hSrU,WC{ vs0' &3HrbLL…[,n'諊92jFTUČ3[C˱aQݛ瓷uuE`Qr`j ,J꽓8OͰu44"BU;2jzx  .aWEAR•A݄:qYEJIL6c").sG7&X5'.~fi;T};!w6xw|Qb^ڥ?zVF]1=>H}q?ӊ& ʧ{hUīr &7iσ_{@FlȑOMyGJ\yyݧCF)PVh>e}&|<$޲ujX ZQ}$q2b|qgUuhH``@Ciy.ȅ̇^m{MR ׆HqZኂ5F̊ Iױ\:ZbxutܑY(8'&>TOLcHt,i-{`?{qF:BUfl'FҚuE &_$EVF8Y͂lrp^Tg=NyC&YCX{«a1`GS[*ߙg`<ښ P1[#Ԍ)1"TJLQyU+[/~!(~oGOoh#gK.Y~ [a~ox=Jk>N+@lh4}N) G+=QJz}5nbʳ}U*V]qaJ;%ZF%*$cCa>2* K̜>U9H)\b`_wbOYG`v;PFqþ.Le 5ǵ:L~h݇gZ .n;LQ"8Y@G1 n*q,bǽUG.{Rv_E S;NV$;OW_M4 "AUН En(~9nU=rG˭iy.lp-$H4H<_ca+1&,?0qkXruⴤ{m -d" 撗>ߛ72]*B T&`Z M5wTt!IzɁf5%ٞ$eutĉf /;DM+"əM=]IqJw Z8gkݸWNEUKsf*MK)۟iy#{+9M۞& #/z}$D@_CL1VqV5 v٢],[ w?1{]!"Y*X+<ȃ3?1I~[`5MM?K?Jĕtw#o'ị]-ik~ozՃK vܭk־r\q:TWiۖi6 {x|SuU]]&d*<=mܗ-3~3 $wT 8T]0 הnawNfgOffKh8ia_z 7'Wϳ*Vn_'&IIH1-="#)9rK4,^yۘ9@&>.QJw*$(팥9].9Z VV瞙P9G֘}=ӎ\C/A_^!j'b{69fG7iU3mE㐪pH.+v7ҨZﻟDzUqLzjN!TFH.6rZOV6*@8rpV.ek;g:)ozTbդZӞ,'CF1 r &u]sn_SO/l T&'"vP'${ټguį@w|Tw)!e{վ:vB¡u0̬փeN訞yBYm #y:s=*B_Gݷp%6N^ƧMQ<e{F@LUVtZN,Mrx{}&̭Lhx>5&d~Y%VذX:C[P+h1 ;虧Uli;z $FX 4>P<֫ZH9s?4"dJDI.7ޘg'5lYr$jeL\<&pM1-h)JBQ`6"!9lt׬5zk)9x+o{dT^ė5 ȅ~^Ly$DP7ߢ:7'洞=՞ޚ!E#@rhg⦮ͩ[n}JF]!Y2)Q 3l1 [AdF`{ CogUw[&B*|1qDdU+lMgS Щ1X}emj}OdU +o~Ofwx1PrQG=!$aEFzq[~dsxY >O-aBDjHE[ehZ1nY "2<֯eMC\":fm&g)vhq6Qxfm'@ƴl\Yr*Їzxg}{?{D=]|aj5y:į` 6JYN'^1OR4gs2佘@Dy7%&l<򮑃`!{pQEA-; à vCAqWXVp*f$A6z3ϴΜX=9.;aXO.2k"z:,{EhZ hx؄~ v1ǧavlo]D-`Sn iŞ\g3,įVB/p zᶒ qҊm4Y幔Z 1˷0-j!B@grKE-&BGA/2i~FNOJmLa2i$!!&` ^cVx_ cczI毙HG::syVX@jS}T&#rjn H(mX@d_^1I''geH엒( eՐx8V-AfRI8ƙo-̅??R%0;^Ӧ;]j)u \)[PP:xǕ?q~Nr U\ǻS̟+Av9ݢr(O[xȽ$7/;;fb$=k¨y}.eݓC1.ݮ`iI豞{A75'Ivkfob~d%sP+tɍшȖj~1`=;ɷj~F\LMظ҃7>n@jNLL!f~P/ k:w,!~Lx{Qp}^bťDubo2qx0}Zj#"Rjv7IOV?ݞv$|w~$`SyۂDZf* G]{a1Ed>B~.2Rn$_Op'fƢFK8ȺV)v>-:z M `qK2 A܂CzYثc̬a~=^%׊u+O6~w:AO'Ts7;#qyaY+niD" 0FfC,i.3fv I'5ZRɻcՐ^佌~ԇ{!8[qpPs-+.]Bֲ=Vkұ:uuُ.h/,wRSp P; i:Asy '~D G/T~d/RR^'n%F\.Eq`6[9~vTUZ4zHCNVyVB8(59n7ݪ R}RE$,)U5/W)U݈\fe=8h &8!i/*ec^,4qic!/%󃟽Gg2=CZ%Y8fKY`ڙkU; 9OMRxYR)e3GjLFLa۲>T &ny 4;4 Qa!k=z5(/ GAMl;JfKN2t;{A3|j]]F~ k`Kyqq{ 7#RZ&/:ayLH"Z gmGFt⼙MIͰ?eav̤N:u츇=]qb8t kw%J}ku tF>t&_~M l=*,x]!MVg} O1N_#!?Hh[~7u5vz;qnd#FR5rASRޖ;Q>42UÌS,z[3Zl5*oE1M faWzv)2A=X ZP2~,`aU-լYO4|J+s'yhmC&t+FI[РQ?bS@-#a_&qA3di^C&<-c8.[AƃZ`V_t"A;&~[ιwbxwM~q^UqYhd4d} ғUnF?nq}7'ͼ,ΣF=KjɓyRӼTE Fs.vf|y"ݖ2": =fT/!> >8oS+1i'FJ$Wس.(z8xyO0H)3naϪU(j#}s(iXn׃N()n$ |J[iꄘX}t'/aMޜ='fdcW03΄3ƐĪpR$o`<2(dws$FNJO 2eюDubK=AP˼C:Zts/fqQon/S5I)(}]XS[--+~2S}>y?"=HiTu0MrD7fW}|en*>Ϊr~'"x\E)v2hu26 0SOׇ P|"ZH''r؝AFp)1c'r8N{}D&׼~"B&p --/_`G3Vmx*z&YVmK.ޣDXsw:  0%%J/.8&+khVIqo0`m壴{' $|RX^@ߛJ-{2u&hne\TK"ZR@+PjSػ%l'`q:HJ\Pd `r C/ihڿ=yOS+WeCTh 4]i3@3D  83VNZr M+ˤFADX㜈 k֭=/t}:3|3ZڎqFUJ#HZdEH|ʅ1$;<(z/ i qy(mo}"|]]j^;ΰKk(qU/!17JYjЂN4HϬru Ws Y8?~7z1a)kZCv_1_d5).Ci6eW:V -`2A;2aVGryW:G7Oun8zږK$gU)NscNӼW?"~׌P4;!bY.pa0rk#gI‡O{/L1te9(_m'{e>!zG}[#@V7؜ 3Úvws~ٛqψD HaͨF؈)D[ %J-L~LkĐ$ܖ,ץ4m/??}fCGfPrզT4f^Q^KEh~])N7QInd$ eVm`[PK?.tl.EBhҴQfC/U+',[j0Cex/2c-3̠3^" Y"-*FBʾ ff1syszs߷`[?UJO&_|G sl\9Z#( 'S[mA)9 &g6GMTN|mG;>c´h/h(V]9*7r]!;~ZTw%ޢd4_RMXxPʈ׋4.\w캭N[97xͮo*GÒ; k`?BCmPuχ2 Dlm 㬼uLUw>dFoc-zqRqP8!9տrJ uZ.P7;8 IʂP\XF|!ɥ(a}umuSޟ̸ql-FՐ~߸GdZK8>w g%\Ѭhw4!^ԕPkyBh2%_W.Ϫm@h^95L&{ @JXpl&F -ڐ:90ѕ Y rR(}uYf6g{;{[L1,#?nV`/BIi,/BJ(:cۿ;9nO/ښu9Ӻp2bZݷ57ā1/ֶo+A$R7 %2p\ @ &UZxR]3gխv<^.[ϹjKst/9}͋g+id|7i,d3K19Hפ2*6l{jwm"%_V?6s_$S:!VF?xLz R |Žױ.}O"!cV&}$a_EZ_~cYM" g1~ĿCn6ڬb,8t uYl"1ƾ6qCl_O+  r(=_AvV!\/C Sjј Ԋӽ)L!oe"eu-G }pUYJI EAP%\xCPUZ0|8Mkςl{c;=~3u+~axȞxV'J3!ʦz8ETT,$;@Dl5&(Dr87sں%mFw̬d"R RyF+'i G"Q PFTJ$ &Jơ}DmyKFhsyץoKk]z'І³Į>wx<#HަwD,$bh!*y _g>7.r|۪-uǽG< 6 3+g*Ȓş1c9X!aT6@}`=m`+4n痔- Ri\S-ŤSU{U?vM'vkY^=pIW-~mM^b{ ̑־UAeEXD yT3Yp NugPv32ܶCklVn&J'C  Fiy1]*wz^͆t77u+WI@sƴsHO_ KBSQ@[)L0BeK9t9ﮉG$gתZt$7e &/;qE ixMmmw&%'Q>j?56J fa0.Z q{xYZ?]6'p'XPlJ#*@YeJO)Bq@s'I/h]D) .Gi4($U4-Qu1) :`b{8k?筄;ɇ?$5ߦ[$\cNd}Bδ&\F?ȼഠfvFk!7qoK5 SPac?efOi$5q2L6Quob8PC<0wWW{c6o&ޥ?q  dld> qsuΝb걉 _r>˨i00fQjB+>%dV],2^eL؉MMo 19;2 {nKQHN㞒 ?Xp~?q~T ciG9U4Lax'\-`~=*9}7{P9$ZTAf>:u L T'nß1a^_aC:uNj,D$B3Hu&B3~'B]Ld.'dInO!CG6Ua=&1/}OQ%+ʴ/d W'D󃱹`ywo71yP9~- =׷];|`{P#8{Rz;:uLtMu9 80=&5솂O7;#fԥt"ePE* e0%eG4?ˁ5fkʂ6eSۆ=ats ^:1uo mσZqY07I#mvg7-QmOIpA0R0Ow}96 $։\gPEL8=lg q3y U:8D(Lx;}BNH͂e.ckS&1@z0 9|I|T}bg6huyCHJ:JRtr"r\O;qՒ 1Pb>%Խ93eƈ=p2PY~b6GĀeT0R+4pTU`N ;#ca5.c j|{-D-@Jo*sE4HbՔ `Cm- & ,hbR5·14:6Q](NG$0`7(Qyp [|`l'6b[ڄmmےZl;2vzX/?P!LXRtĺHM%9pΚi_]|¥̛  Ë3;yBKPS ERSg)s7ID )+=/=2irQt?@i %^8}kԣ">YS|k`\S.(e3+05Qgm;6}d/`CJԃQL|6꿅oSg - >'T\ ;`ߖA} o̽XvipN_ ?o/ ^Vm^u5H,S[%7^Ovʛ G*\O|7S 8o淄 4hvl9~ Y+3m$4É (0Xߵ9;~@v͢'VY jsG=teZO-thwJA30 AG{WlC/ؑC; /Jx%RKs|lP*|Y|P^VK] a_}qgVz5kY3l֜22fgLlNZdc!f}v 3v~oLtH~WϢFh@'x7SRk{G/C@XS➞K`4}5U]ŵc^TEH-Ao9T>y}so=-["֐yl/h\rnWBC.2K:]uTjh6$ WpeEMEQ̅JLscP"e AQ5j?rxsOt$'y3u]e>#GIǓ|]^hb@Rȹۖ .} Tǫ:[01 Q:tDlI˞*_l>6P1xҵ@s/J&Ao=[ ԼlGqOMV%*'󬒳y6T.<2,&ʢ?Gz7EzW΀oVD~l,`1Ҳp*n1L#oS\s-qU43d&w_A˼PSs/es %ժ% egS.D36לe6P[Q bl s-b!%0Oz_̽iQ 9e$-#lcMJ1aA{ S?%vⒸ"s }{-ގhO` poa[FKY|ïڲnDgYZ vuumX„IYpUlK5aUխaIf`M^#}P*J\Sr#m}Y:02ECL su/7Ҝj2̦x+ Z/If!-eCAUTp> ӷ#O'z,,~{cTBNfp[h, <#@G4-rJX-槢C0/0|64_38ukw6EnS-ZιV}o|7pdX0'd+E0|(ߟᒿ9%.#wcN4e֭g-ˆ_x̯F>F2c539vL2RĘ]9>B `']2W>P]`kmM&`,,CLUHеo=(͢4NE =|o!)ҡd;T}t(~|f8TOMXpOs RRTS|iUw վBzS⁼ΰJrm2\`hwOf즃^!~su6[3\+ &''|_jk9ܛ*1/gFAM?ߝ`qr:# u=:΁yBԦSFI#$La7FP,!.]uMh?%f._R6vFf|=PI٠+͈&UVp8]nB=p%.rb6v&Ω%- \&SVb}]Y)&!w$,%mSU q-/W`3#P g"MEMTB5H.*9r`m]]G+ 3]?&z)|v$!& n1Ge^,s8RNZrNנ$yk%ajkڂ4a]F⹖? <;հ gi:H1@EH4IzX^*UZ ߔ !V| go{ą:r +8$ #F 3v+;gi'AVAjl$EzϯbŘG=@9'uiGoHաHKt)&C=7{ruo9K-y$_0>j_AIuOuhk(Qw^='" nbv󃌃`Ce ; Sw<6 @ wy򺌇@7f(9PiB+=0O2lDeK "?ț@>腸}I%^zT^xiVa.k.+\&y 8^*ȪJkbWO\mɏȥ[)bPalm)L2?Rӝ=s\}lsNCcF9 pYJ 7M7x߶/쑴4>OL8S24@iw60a?ɫRw,SO,URhT/~ᾴ2S\x4Y亏Wڒpg;IA]ML;#ej~rKMWMR]FqIԮ#mw~&$2v]VR!\6{gjw9(s pa)zXc##M/n;%a'Rix-$S;1d6C܃{1}1@ l΍^{ 8Vo0?\OUs\(v}G7̈́I>hv_kd7$!j{C~L\fOܳ9J©{8/IRV lv\iI "$;J>K*>V/f{w!JiZnÄ1c\jHim$-GXaq|en#:Zlz$3QтzRc#mc^?M/qq@&p1>z~=?CrJMSDIcqʴ_6+ ϔIGMLYE,#Ş?ߴㅢy,xo `F\(*ct$BQγVWF27`qh{4Z2H>7$􃙲8 >x9Fs-8]?<s,틩k3'Av)zZ_v0Zlq7JVewe8|wqczPTaV fF1G{^l=7O0,@iD(E7;q6!Gi 5^Rne}-hkp'#I"}uE>%xG֍2ځ6 `|vlq4""1πn9k 0m[CdUUTJ»NFtߚ6RyDםjzE[Cwx A|]*,>fo8;@Vvn.UGޱH)%wLKUܩr> 9(LQCjyzRS-" V X#l$^#,AJ ԽĐ1n3.u"YIaJ\.g¾n57\7Nʓ@}Omb[.5=8틨i?j6)whE;ċݙ&>رJCe2~4Tͦ#"Ӎ$'oٯ*VE]N[_S}r@:WѠ%`=6[y%ةLN0~^3әKӪ.Zk)J5ZBEH",Җj{J!5A,$\|?<}nYV'%ioulG\f7t ::Xpw 5  º^S`m…Niyn%%f%؄ dSN{vxz*>K٣d:=\` 4t2rg-&g2rB~P!gj.<0Gu+Y:ͯ#f ".8 \O ]&Cx -g̡gW_Yk⤜{"6[M^kMV 4PJ>ha㱜Jk]'80H 'i8ӟw:GNOS]__5Qpu-8RŁwYE&zTTGM jxf6"!To[m,&9D @@e^k&t浱իd ^FƸ  q*еUtȉW;|ok}cO] 4D.?7[b/B21K:_[tKKFδ׆2St21&ܑj_|r$yghC9:L˿i\BB?;_^|$e~ 8}`#58j6~tb(;wǚ&:5@L14܋aVXddWKp1lOw+.S/@O:7ǚFuBnJu4:쯝憍qB"qy~]x^}>]$O#ͻS "] zw7 ܥ/8ǜ{+Ԫeju,>}7QttaE˄HH1.lUv5"{`k;_rb꾴6as:7pk Ȟ4ϖXw§bP.ʥ#7'H[6!k|Vm#'N%Ԣ׎V>`>%czo qH991HEy0oo!kS/66ZsD,MX!},]M6ޫ%:$UIgsY@ߟeQ!^ ߻A3׳{ڗŒJAJS/eڔVO3]S526[ۉe4M4wE+.(Ȧ B@@dGAB2o9UT} 8p\m|e]h|OZ:"dڗR  +su]|jGn[U9רe> m>Qb Z|Lp~@q57Ӄ1EQCےWE켭=䖓#7M̈M;ȧZ*& ObbA@ar*K A0Q'j lq{s;x=:M*ew_D5ondX]gjknN ki"Fo3Uߴ-40Em:!jp`VvgIO=B >ű/p+YHKB`ㄇՁeja:"4Uǵ Шy婱_1M9 εtFlbCA`1ź؜Q}?s$,{Cm3ǽJ.|T(C: )8/C"Xʉ0$(įԝ20^u'+E?q-nfWBb:,cE},9 z$%;ЙDezj( .cWewI1ؕErA,ݗ w+<`mmS'#g+n8WKm ,fڅyx%U 5_%e;nD&l|4*#gOt rX kG`y]C!le`UlE}RZ>`egk|jIlg ~,~EL,[E }C~gJGXk˵۞7𸵏s.mi_Z>pj~H}6/FfD5Y= HIe_v ^6&Πc DPtW /pB{vhwH&Fl#1cw#F)3c[\}mcyBcc*8x75zٷ~| W,rwOއ]-ێ?~p3fdtz3Xj藒*@e ~IcD &9;HåZC>!lHҮlR޽vq׳tgɝa;HY+ȟoDZ ]1ӫsYկs[ӮlMÚV8FQ#˧sUsJoAyGТoNϟg<ʘ[3͞^@ȝb>|NYɤqSd=QȞ]7ƞV*ˠ\.ˡeC›f>Y&PȥsQǤoMV$U$Z/[7ЩfPڶsiڻ{{ˮjLh>ή|ϭuaԮjPӭjNX-̫aAŢ_6ɤc>ٶsb\)àe@׹ypұnZϨeFřW,P!NʣoNղxʦqVQǞh?ѫoTѫeCߺn^׳tgӲufͬqVĤqTԺoKg6kAZ2̣iNײ{tҳpMi=Ҳ{pҳta^4ǣb?ʧgHѯqX׵qZܽ{|عf>ʧeDݿxuүmRӫlMϩe@ΧhBѭoSϱʭnA`+״thȅ۾zնukڽywӶpbԸsjعxuط_1yKͬkV|z~׻tsͮfM̯mTѶyqػ~۽ԷwnԹraΨoRعѳέ}iϫlIҫe?Чd<ˠd>Ѧb>ɟ[/ΥjHر}oʣi>^*H=ő])ٮu`ݸsfѭfFӱyhάsȤwVR j5<Ȝa=ήn£bƢyUƝuO˜g:\+ș]-ˡ]7ǡgIß}\g¢jơxUŜl=ěj=W-S*ő^-ʕ`/Ța0h6Ƣx[ͫzcˣiA].n?m7ĕM'׵p[ȪrTǤqKϪybΪs[Z&ş[-ǠY-M%ɡY4׳qZг{mnAuWЭΪ|iʦe=ַoYΫkJ^,Y7˥mSĠtNb$ʣrOӯua˥f@ɣb6JGțZ5Эw`sJV+bFխzgț`1{Gp= FHǠhCͫv]]-Y1زsaͦ^7Ho@c6q@Y'ίyeh:sIZ+ѬylֳymضxlѬlS_=ƪhHǭrWͰe? 1 endstream endobj 26 0 obj <>stream H[nٝٙmm6Lm*320SM4 FDT>ӲvfXy} 4Ⱥ*^!*xMDB # 0ja #O.o{"IfKx,0> `Ylͨ1;fvO&| ;ж v*1hs ~'&f:̯=LZYc 3:3뽽A RtVt誐 YtELl;b&$ef"?ZY2 b ,%6u^sLA/)f*r|ޤS&"i$uk-Iם5FFxPj֘uJ%ex`8))u>9Ư-9bb?9'A>r@I{'%>ؗ*䈢 Vly_+_+ 'ۓzU7F[T 09TQp >8tmOr1fdÓv)Q!;%~vQfo 5QcoWPÁf CB)ߖ0kwy>eW؏0 _>K*V8ț=ndB3k\G5Մ?jʱ\9ځ#/Cދ/,XTń? NQQ-**Gq65fqy1[͌U]NՌô ( (*@JJ,7mG]؄@@!=S5V_~u#xBulv 3?Px7t92i\?矸^3f`zqE./zFnK[9W4| v1!asq5QP^pIQ=b|T#gMFbבwǫ0cƭ~o]f+M))8Xݧ]\z2$B(yQ „{xYcuI=6Xq]؝e5bOĪ݁ZVBq@&;I­_:8J@];.zGDI7}U'AUtČEDJŸ-;|(ab q y`.S)Q+5:?PkQq}y.Hu#ʾa| lmRJ SkGjҝ/Vx~>)9=SZ5ɣ._ɡU2E97:L.[ gl̻)>e _+:Н[i%=:>àڙ!TM^{u)2s諏28jdt 9,hڞvWY S9%c{w.E={&u)y);Œ[1ge-Qvs*n=Y?XU*P&ݞ%6.JAXr;oɗbJʣVg2x$Uŀj+D쟃?3IiiMo8X6BҪ ۚ|[}z^wJZF'ץ3m&ͲOD9 JʯʅY/L7 PO ՞|2erN9t%u,\z! //{~Ug-# O2v$mE@@&&b\я~?aMøIՊ;7GnGܻFQwh]z?P#֢6 9@XZ -*n6{s.(`J$mѯ_ =ǟ]x>:9-,ਞ)(S6y'mHL>@~hSdLtއsQ؝IuI鮿G1/$ Sέk^&=2NxR8EBmT{>k%#  e[u憮\ j$6| mCgzD}2:??>5&R3&WZ^Kƌ0˾qͮ}ksTiv)Ҋi¦2j 1:x~,8y_6a8qK̓*9=yP+eoW8o j%?^Kn` QqƪΒ4$-)x@NšOv'Qp[J&a֭R68? >Dz'/B2`gte̎=#5ad4WᣰeyG>%`~*\5'ܮ_w5>_9.6+_uzՙ^481x8  "$@ ҧO+`pm0/hEB .OŹw<ϏwI@9Uۑ*>)j6-H7C;!KY]Q#~%iW&V&}?k!|1ePqvA!ؽ_ccGҚ%QF̘ƅYh69*?e_MtDFLCؓ< 1`3q^L7L)ҳZF@ϑ1 YG>xK%CeL)`TCEu_ȗCjzC}3K 2[7jڝxK:㠪1U9* meփ& =UsCWԛH >U$XaBab*f&Lڍ^Zs%0L=ҕ<<3Epo$ zn[,@ڡcySoEݣ̪t'ys9GCf܌k͉0/^2W7{%'V q. ]rn dy^\Gn؛!ֻxk؏R9RaZ6  ff{VGk˃l{D=Gw!gͯEs lTDl໮󇛪{fnE1 y$ ~ ̠ϙ'ZyG%0Dq٫K> !"VPmDQ-rKvQ)9-sz#g#z惼 "FWx[yXI{z>3RR7x-g tsS<2f+ ՘*;Q -ԜRsM vߓ.GutT&=cUj2ibSm[&gngr5%mVZ tV6g;?[4! 7zN&8eC/L? m2jln*zGYR"'d"ѺL6e7H%Wؒkl1<* 9!"nF{LO԰pEߓA,nt!'5κ9?>ßKã/>)ږRUKฑB/lTDrX?boiA+ aG`d_㐳g~W˨%'h nL)A؂Cؗ0cZw^@#<Ya%u h`iNzca[RAhI*$ ̖|+mp1= *:2;7^Es!9!2yĨI6bQZd Be4 -`2:2B͒}V| c+{ sWYCi})x^nXLByTt*UB6{zQOҩgݏ%I+@{pF] AY#kQAGN舃9RZpz3kU%3j]؝_Yh-y+9c&t 9:.:'5t,dJ'쎫0tg[;ڲ1E=,z]{,-3{YQ{~ߋ%ʑ,کI= SYjj]YGw\gt=FW$& I\8HB! IPpt't.?i*<I1 UN\;ĝtUpp0'k:yk0DfNI.e,žא =̭}J) fƭO)Q FNwGM!Z5}6MɅ אfQ}u9Y W__?ߒJCB进_0YSN *[sc7}h/9$C3fW} *%!odV|=B~Bpi΂` 1D]إSAxd];[̢W->X[H "l,IZq)h9w/H[2.5i?"\쒜KZ.)%(o$kL9TPMA O2o^C5yDL8uGؓ0馗$c&}ZrK6)` 0q}/Hg}?5} xwjؘ]/ZPA ͈+aD:X6gIm|z{-jp9kY7蓾thՎCs1fjP#8:K*M4|145Um3n,=% 4 S Rcȱ9=RCCFٞYWߋӸUH^f|:m!!JfҭgPc|V!hn?~ d` wbfA fgSE5_De؂>\}x&XqQGEK|^֎[]SPE=Wq{h1A]Z IJ+VgG{p$6 Lx_K{Mr@';IFQКr(E* =7{~QpTp7~K* ( ʸIܴ3/1 קNQ~Lع#K:Y k&)GЯQ0'2.h˹XQsCaXӛqu9|ϭYDE Yz&\4O}ᖐ6f9fV #nM՝vL d6(iL:$i+뚿WN }N %Tܮ`VY{tAۓDN2 &1[R@Y)X ZvQS aע֖먩d`,d<49ZyS 0A4)7,Dz(6NTk_=>A&ҶUXq jM|QPK{2H9_ڿ1Vq(DgG>O]vih$ZJzo^y+o/MjO!ôiլ\b$ޘpYy]{$8Ӝ]bO=D>z|->R|zBOܣFsQgeiJi[h _swStB*QX/Ü[5SqynY#/}{ͼ{)BMEIIFIprs#,o)?5]0 ᶘOeVꄑ[Eɵﲈ R˃èS mYekSP&6];K.ߘG.^_QvY嫣W7Q(5,5rigfS\&Lm]gvLȮ jA-:dd5,州|r+%IDJ{UA#aFƌG+L[}lwG̢n iWW=oXmQӐaqf5l'U\,V"%P%(]TӞ٘\#VI%5*B7]sf"hɥ塂f!*朼Q؂]H~ɫa}g0'Jr]֏Wamu\'^mOĪQtB9?f &K٤:&ιƢ6hл(qD^u`FaS0z,cN;+,QKu̮/8%GI;K[!=ahͺD`'2Vl {lҏ#iS>׃~>s X#je pp}q*a pC[Sqt_%{b  -s?Og [e$uJzYy*,bdק%-s&n8DžXKH%wY݅dQޣ"GM-o(aa5u2ЍieI+ |'eX_hK۔ :[T{fU$%>ݶg!-x; ^{n7F  +{u>.-*>PK+R |bFnSM:IG)ψ,l G*Zip^_gMr@O{H&)=I$ 3i_y׍h&nf=JRpˈVzXpBļ[[eCQ{t̤[ f/18"QK3q+Y7Hgtf A`x!$^qq6p$E°q}l/*:1=L阵ϪzRvhx)>qgzre-oAO W!F 8Xf֯#F&/^[dĀZ؝C%C)њU51 |pO[}0`ҨPA}[FOx̔W!΀m)fuwd`ű⎈ZCFa'>..JAa{evS) ~ƫ :@SRD{O,I϶IYޢ\jħmz ?<^| 35b_ɤG8p.QIz JD+huޅ+K?S{MZ/Nk )ֶ+W{Ō[%e՛[Ζ/7<%U1Iz2ioP Vf'Igj,6%?Ϝ_ǀ.C]75:kh ˏM߯:1)87@niG[fm;䂿N jmXZ5{|.yA$oX/+]s`T-%=]EZ5˪כ2Yy|#f↽jgڨV֋ȆIW۳ޛ6 κ xM J U۸f{Eߚ]ݚj:` [K?qݹw-t];iVlZd՛v)#di, x6lp/yK(Ѕh%Ϥu'pyAQxhS6$wz4I#8'`\$`ҭ}0?unʻ]?Qv|, Mhd+VE|_CƳaҫq). /4λ k42r-`Srv%gjh\םw}1B%^K2D%AW,)tgVv4EMЂ=戴}(%_O~?lxs@l{G/>ȨN=.f{84I۰RQ;Qyt4fϋ8*zރ~gPTJƆVa߄}xrѤb}ڊQ T' 0bQp_ً Ae~]Mt)|nűCv5֠Cݸ6ryԪX/֧|jL}5ssc~s/: [6#ܚr`䊑I2vv5n{4kN/>`V 6i|9ߥ~y7ӭ߼TJzYU.ߕ`jgS6ǚ_;taFjSǾP۹fa•!Z1 Vz`΂O 0l2@=r'oN.ś`_uG2oגQB|3#- $H6l @"D` $H6l @"D` $H6l @"D` $H6l @"D` $H6l @"D` $H6l @"D` $H6lԸ򱷄wbbpN*K"gbLp]ĒɹRB>!y:I*O1ΒjD0D%a,vt/AXT`%N3C b$W!X F'H8:F'QT@ұDĒ NS1Q4K  ]$ D#_?Z^47QBkT&+M#^c1 VQ$''}ID7c(%XDD_ kaP)\iD;ra,k6!)LMv*ZN2ᆩR  U#hJ$mʽ7HjqX^hzxX5 `fi=DtBEš+<ܮgR "3*1Z\  Z.f *UVuv"acҦÌu߷drG`I1f<2`J߸en=RSLef0Ϛ 1N$|afZHJTtw449ӸIJ+#JHy ;ߓU"S5JمDz%M;zT: AF%ՐB%(o+-2')/N0q:6FĴj9Q$'¿ŧ*k&:"zt}{R2a/=kz~ac*`QX NJ:5N ӨCEƍd0L"wY]sÀ!C5beW&7gQ^qA ߛq߆Qy+RuT"K7[ߍNwzK8e*Y7|HGtDƀa0JjRKa^awmZ2i z>st9f WɀCL.SaA0p*Vv`ʸ]b-r[X?M.c9bעnB=0uMOZp $n1/:}߳߳y_n/t8[nwL%{OwW[9Q:r#My_9¥ #Uu;\iq&eU8 Kel1\_|o1%<_Et#[sݝ:Z BJyM LA FR?B_m΍x]".ƿş>R<dXuLq~蝾?mԢ6i)b,,~jaK"4zP;(KݘaI/ud҈1sG;Db"KhgD}:t,(<'V#2/]5qS^]7/=|n QDfԮ$+ٿsϽuut֪ (/<2oxoyrncwN}gP@5,nq3HZň p h̪P3)E'RzZP/hnçfUV4 Ϲ=L֪A.lLo=$ӓfSiU9$&|Quͣ;@VpnRI9.ӧ63t:c'Ӥ;NƎqmNc%B꾅B|ص[O !ZI! ZIծ$K?>>);!  :!zF"A G[{s=y.f#\SAu!u͔ ة.gk?]Ϯ[V\bV˥Pe]7Cp)! ~m>pii94nm[֣h|2Lt2l3lF>ߝ^ݚDO!.UhZR~<+xTYT}'6/{}:TX݅{Wɀ*o_waࠂ]P[?YW~Q5+M/KHW4ܤ[=W7'fpYAίo#ozKv_/W~|'ϯ<7~B,i j2ͰBRq<>lO5~KPp#7>M䄐XXlPDŽmBtx2[O5}t 5t <̲!MzCvӠ9Aytj=Oە XY2@B~%ޡWv^A6䀻KL3kV{qbaOqc9:daQ#/b̨) ºAD5i >% y̬*. +LݝI.q a:2!D$&!2!M7Ÿa0EI`m$p18*8[WgUltunҲQ > "-wioL؈Ցܪ}lS] *o-D,Zv>q<_^V4Ubo)㗷@sI-_q=cC+zbqwZTzmMgͿ!h2`Ԝ2d@mzYHm; ;^ށ|Y~sFZq0#{{{o#fm¬*,(S.akޟ7&y_&Mk,f΁d}=e)7R7%w+_[gN#Z_/˸EomQW!mfE9x/O!\goia鈴WeEݒ`1Yt֤GRs$<*{3o)Dx7 ":A¬s?Q A]ntuM?EޫOΉ-馜GqwgIrvY\T\H/d $CλTd1vޣ 2Ӕ_ބ-و̚Ysd-a6F67^ZfBq&vwjOЏE!!iT`rN]O;m_w&%W^]LM۲^}'2vUzkE>jDMQ9{n>aUuie˧^5d%Cf;ɕGu;ρ]%g%~hi=O,Xzs/O5KZG+mHyD596!?%z`,%(~ݹӨ(t%Yk_V.ɵ=߆s/|PsiܹWт/JOrḦ+v^ .=^], g)ZycnxE\ (<ٲI׳;8ٴbf=f˯ۆ7DLR|sItl:L1nc{:F)6͇mf2( t 였P2j>_i;q2Nbi4.`s\iW"Nnv68$еZ`9ѵv4E}?iZ1N`Bfva `G4# +p џ|cLJ9G%>x W["ܗ׌C)Fއ|zq+>_踔^55Y4zDM6*[:ڟ}9ILㄕu#7ݺ %lwRgp^QV3dEb?|NsD6~WBuOAk?yRr*T\J{/3~-rloR̪*`#嗌8YqFf&MRe¤.݄{QKQBNMy/p`t`L(R=+ʯr a%c Q& .f$A0{p%Ep`)<-m;miAKQ] κ1Gks!}p빖ȒR듒>fhK뚸ݑq܈c\j#X䴙MmWn6 \/&~6(=:9:.̛!euyև.ș&d|z|U녤sOX\sj~]NZ#H> yY!9Ũ-(:ӾR/6HH(v=">Gz tIp~Ԛo'~ ݗKhuM 3zg{-_؞UaK_h:]iפI-gοjA[vWeV s]VWsj8q5Qa?Gs9&=,˸Um t}WnĽrObWy^|+з(8*2R+O+!6e=6&谦 ;9U}-TXCm6Os>6#E?hK߯6ץ}ڪ͗ ~#?TѲ+z&hK0Z>a#QjɆjbRW0Q^-_Jax>..iN)i>݅3ԉq`J)9? ǡ] 'R‚5TfYކ,ݻkУA?\̠6^zֵ$X 09D]~  ȃ.mQok\Њ xfkz0XL.t 'ݼܓ6q E",0FK: fńR [u k¿(/̌:NݟCuoAsukR^y8aL %0w4rqO8 >=6"r@?{V u.@hWn],%Rj`+zMqA`vZϼV;\D*Cpۂo(뵨k"}yif3 r֋wlt\y $4L{N|q凙 "5fŢ)r+]3SOˊs[^pkVyvgkR5(E8"eohb𛄌mi8vባ徛T/ U욾[$`滷RDN_y!hCD1hN\g\L, b N6&!O].6i'')ǀuJw~yčJ<W)44 !=fNJ>n*. uJ9U,عG^V"Ltl5Xju UiS%4dH4ҽe5+㲌o]?-}dC\|Ue|wHGT*P)tdV$4%?)tju!pC&m«٭,aпh̬@_Cm>\SZAϩhk9\{e}G0{H))K!]);қx[ނaiGܚ>IGb01Xm:;8>h*(}3a\1"u{KS?o{Ҵ[ >a!}_UҏHV\%ׇ;LhfK*MѺ5;eҮ?!p`]|ssMи»6Dq}l 9!TByê9Ww(uÉ9AS5zY^>{[:.1/C~.n~[G5%:s[r%ntݙ_F^s/?^8^}!G8);[4~;t+cp: b&ݮ֓{h?~JJV-S+b$azmCbEt}i3^Xf\Jv-W.ɭ%6Q3 ;h81Q?9_ZFk>^ʬaèMK5LTc_Y!,jxz/{NT~F_cL)jeI),d #l\Zi%{ >؊[4nH.s9hp=a΋la: $sv KnL$ԽI9G0PmNHFxy6e YS0cRL.IG1baĂ̈A)f- J7Œ虘K ZhϐkƑl 1R:S-um>goJgwf4a3Hn1i`eZ+mϬn>YWUӐyvȡ:X2^u 79cgn[xq*$d6 B?!pocGή/h>Fȁp>I3.y8ݬSّw!<{!4z%I_͗$w+=şM/n}Z)E7ӤO(Yٞ)KMM?ZD<ҶW.tJ&44D9S/Sksm1@SiCWO:U rk EV$Mu\[y.ؖwrayfέu 1Z~ORzN%:I|vBjR =Xड़];@thƥgܸ2F bx/\=)UC z[ RSm׿@DabcoQڃ+,Ս*S2vY P*DB\Y\L.sSt34IɄI'@K xx_mm.]j,[b286[ޫ]oHt-Ko2q0O͌\4tða(VwI"ͭ)/1 3 +BnH0IJAmwWh33y!t3V#jov8x]BnaE̻hZڎ 8;ώw\x̦ iE7U ",r0?qG٤I);K$tSfvd_7\he֞gZ[`3n_yסDm򣐦:~JqAG24 2']20OɖeMzÓ32T O ׫!d Ti-iC~[-mGD)F9-+.Հqu6CO=?_Jr`mnz‹q pl K7EЙ!sK\`"v54 fM7&u= ,lR %'ttvE}_]n_%n*OȽ<8218} ˿wUD¢qH5 ,uh["ه/rn|"h$ldW(lHCUEN@U(f$ib>':D,m52)^-n|ECwiMl'۽Ƣie#ca#3dkveq'sj'瘴VNW-5>CZUCgU:4+hkC3qDNwB402k.ns'I8,\a_on 踪OhkGŨ 9q,q祐~eQB KU!m  Q=j~)ͅ:AXϺjB=AvP!pEp\Zb򘏊3l܉qm6a<ܒ^*5]tԩDl CW%_&!oI`ww{C2m5Rm $PH͔AZ# &p$[=\3m"CGۺrPqyuȗLP?JcfGj`4k8y5z E4ǵ쮦=JDu㏥IxzҤ=2jFP%hq-ŴvM|ĤW~F:ZY.jeU}bZ3BŌtC3[ ڥ1K.W%xI4˹8*g$m6% >CCqƵC#BjY9[&Mjb0AxMz0>'BA3p5&H8\C3kec.:(:YLK-Jnj,0xg_!0SlfH5ԍIM!~97I؄~5Txpk6g[60/w빅'uj#YNMfA;k+ffi [caU~r#ݾiV1) 0 -Zbb2|U>t-"fZ{,5CjG)Y[jL?($:]=>TM(:ncb;3]т7XuLt|i_|7LH=( 䭺O$N8Ҏ8QwI]Lcw,01*7&>/?ڱo&B3,BfvZ.4;PQ7&Vɮ u}oH.sD^ow܄iCkt,=.GMΆVN?kN'iee+gih5&Vp1NV7mSmmGܼTOMP xm.owh{J[v)&\hji}S[uĴɯ?naf>2Q' sv#i t*vWB>ݍiiZ!cVQQ<6ȣH}o)[H.&;'Lߕv:Sh IJ !\ߒ]JZ],  %KeٴƧ] ѯzo<Z$[rRuO=;~iøz Jm:T{ݍs8M?es C{\!\|'o{"=BC&2K=Ne039D.{+i6Ke۴P1 F$a\(=L r?n8y~<r4jD':%2a;Db: 2[;'m - Q+r%R,{b smEqRHEOw|#q|m ,@E끽ͥv#.B{0)irL@_:UoH0Co8Gd{ \nS3Ÿ10~Lsap?o5.{9X:צ].b$!fQ)ːĜc!ŴK__+''ܘʸq1h[9>Zs: f6q3/'N'92Rie|p辐sF8쯾l-w~4Fl"L8Kwݝu5 EgTDof.r] =ClWiViPq|oEݙ]lW0Т ܝ+xft /kg2e=J62}E~nمf2^}>g!k "nJ\ ߄{ Q^,zIe yPLD 4id0 O၅aj?2Z%SdFJBvR >noy gCfr2¥1xSv1]̩"v Y(6 1e)'o㤽"GT+PsAm gE9Ttf,54Q-;u x1W  &S!iO}v:yG~6&IƑ# 1%S4Qm=ٔx"RfοPJT@g }d3.Er9(Ҳ9T{dc{YZjF\6Y{xiw͘BdVrR '2or1pAovu/ΨoV,"n Uw\( _r?>ȑsKr5,U|x$_0 &},􉣽Ļu[[h,qTx|$#܋/=M$pTtgh(_lsȌT?[DDzDۑ%u+SR%dC6P[>svi$1)nwBfSi8 Aw4ϚOuT-K'$"Mpj7/=>2dY>qtK\0 lZGSo iM{l ommQYP "&Rw[nS󆥲1}+L^pAڴ?{Z{8ݥ?B~3G=X56ƆJC`iS^WH+:bne|R*h9ղmöf#;/7;d{)' W[| u'ĭ*6}8/Sp$aR\=l}s2jo7{{}1ˢ:.?N}ZHҚm+B>͹f~2~$P6ja@'k:MLlFy#gUyv!\C. SssH8q~5Q|kǙsf83.("1,},"!E鶵ţ%,ٗJİ@J*- h;I/J[o=__Mu 'Gz(xɦeE?o | T[F|fd9:sm߰1hM y<ܪ'CclߗLPлr,`迃a(OzQI| .aMSrQ]C"m0og>rY^rji/*J.h˯)n0,ʂFI#E:`f' ̊L!E2 k9?`uI/ҶQ~hM׺3^S{ߢ}ʖ%>9uIMF^?),xyڥ(Rp† bL9u'gVY)l?:MA+AʧN]3Ҷ^MIԤ 4\U7^:^Dyn)V Wl0jzT9+[%01Ap9#ϑd=!I-B|`t iV9\Ɔt]Y{˼Glu!5B?p-2Q%dƍ#}YLB/n)n9A F'\\/+mO;|H^f(ri6ǟy1h0x0pUdi>`)ǧ4Y ! CI)j}W|,N~(nPc(CN*icpmW> EeC;fPa=)ڛYAK,yfUӔ^VT'GKo9uj%&] uƣn>tn~j>Ch`*(/VHfr*P4-NjϪ>.Z'|ȽCq+ o!5m'1S2&Qʩiȹum%`{֯8ﹰ\v ie6G,Ֆ*}4nRbcO8Q\V~; ltŘ^̆(>PT0t?qTJIZ֭ld}eCҒ*:0I#%1=0e-$":ug`.J؀l8E Gqn Rګj9vV~Iu1fTa9X'{ȁ )>n(Yt|U9 -u 3Uw^Y܊B<&E!nT~0I?ҕ2l/h(ThtpiuKJܻ5etR:)Iڷ;oh)'ci0TT}:Ƨl}z!A4{¬O>/~-ALcRҭs0wa [o.&J&bQFa ,L.+ѹҋEUEʹ '|ivgΥ,pXcUm_&ڧm\gVsʃya7}j{vUUέnN>Lx3xZQM{w_Lng:ʣj:^TU" r*ٍ.ykyeli|-)jGб^*Bgf>G F>&:Ԝ\ez)N9YY< &9<=Be;zg[BK}rF9c\sccjk9%"՛' Crf~)BŃ5I~}"O (RO!S3lq1;6 1sG y_A/;U[C%yZ^&w ؖSj= $D'8% R8ْ0$!nYk[J+pIiB(8.<?ul8-r@'W5cb3 a cc3${l t!(ak{kOz\e*A>9"i*'ggڞ` аKFLt4i ):5$4`C]5"!-? tܩ*f7I6?~)"e-.Top 9+gVqƒa|10xZOp)'J);ݢ7.S|R}Z쑵z"~[DNs I͗(x{qPdx-CoP`.a[ 䋬%a:٦I~-=?nę' ^IOL*4EIՏ nX'jo>y ,t7[u͞Evyu tܡk#Ӥ4 -)xmE6:%>=2#X󃅧?X&o=Y2L"-Ө81%%@;O+x-]Ny/0g}$ " |= :+Ci1$Ԫ3@+>TL_ zj7Ǒ1ƈwMv?`n~6ɉNg.1 ^0KP}hg~mdU@:e\spoUM8'?qryfS"x?j.ocLPn&A]]iCAθB%-n} !$$me+o@l vȸyr8ګ~qbJ2F;H>^Ȇ[f[vG0;oẁpDF96.k: o놐7y%?HGn#WLƷJkq!BD0[ 7/wBJz>z٥Ęa=>Sӝ_4o~ IäT2-m)?V'[lBhV[nY?( !DwQ{]dTYwGk7~/a~toNֲ00)6FⲦEeUE(< !o2O`bSXfucYOxMH23BKSo;5;b0d) iKwug{xɎ@'XrFA'htB  ZmpXo# ֪Lϓ[um\dp2tn+O!a^Yoo)dVp5EUv|EdAZ]i|>WCV dX+N[C[([Sc}_bh巚áHa0͞0t X] &:fjM)DЏq<!\E937YV89`' ݍtZkJudAE1]!,RF CUli/VTV&NľoF907`MBMqrm?_xܘ+Ǹ)vgT/ P`%h|)gEYZ bN$>MP٬ 8W0|؟ V:ra KM4wKlą1OOx ϕ!w3ϋ(lU LZCh[1j'dіj K%=x,誮I(lڔ<Ãsc'd̄6M%ȄHJ뉘ѷQNpS,3 ` = ?Nƌx"=^#eHgqYHp4\hd|0Jv~fnap6B&K?ϰcoو٨n#z۹z6]?e~(ђpu ֣g- }nf9MsV{U&^YQAьKU)Pw̼>'w{ЙJRb-t#/Yd%)Ho٩ [j9-7Rsr.DԳyB+-IX6%3`ԨvTв(V[޽2eεnSfhE>XC4P?D}׷F߭L=,}ȇ}OIm)dt`qG;+ y-m PymL{eԟN+"4`#tB_s{Y86*ܧ{_Jv́$ϓibc&(6{K[. DFiDW5 jV>vKÍmp1zd=9慢.31ɂgSp'@7Z|RgjkS7r-y lԃS%l47@N9D9we `vOӳQC:RA!s,C{#LF)}|@K40=gu_>qmhuMm}CAu,sm~1)p9ϲX\:Vmc$U>!;Ҏz7BI>uMsuP|0X%@Foʩi9/=C aP^sC萝ϽQĐ_f% ͹lG@5^G;Y/\tβm#,=%Qou_d4͏dN2YFȄs5;l^B 2vU[|C:SZ¹@XQ%~=2Lsz8:U"3A1ǭj)ś=yaQ(#F хoScݟF1#!{σDJO]1B{BW!,-7's8ԅv?:`wx9/"3hGXl-1/'<7u">{|{2L礚_%V`-_8KSSO+@W)&xwkI )]kB ^JMmONЭ>ʋ#dؕS옪 zp햞 0be{y~w\sE>Z̽ v`Õ+M Dr9'lEx0?M Z2;9GH 6?dO~ǬuY=`zwQ2K^ }݇ o#zO/˹B c9j"&//¢.Z4|R6z1Ɋ(&Y`s"Q]oEʙɇ v` FP?H׶b#"d C[[q.֡:! U^TI) mĿ4BYa~غH^Ʈ$y_o+]MLxҾ. *jVƱ,7H>߂]dy؄MSrɧ*rؿA|jS򻒓m)t@dO+#kS=?QqϦkMcNL?Oϵ eeCAAA@%4 :,/2Mw4_$ +ӭSe s 1ok'n ۽/.l zPE "@ِ%<~HUt̮9[Rڃ6ġZt ?ݜƦO#0^/zGѹҿ j (\QX:*d}55+QXte⯓= c/- N3+BQhg=Q~[[ Ac "jC56U./a(\vGX+a^%8aYHJ,pG梸]ʍ[e<~w3iq~0E6ШQ٥^D !ۯcuLx*":U@8S +=ñآx8ExT{]ϊ.pj|o*^r9ƇibZM ?ҴDW xgig13.fM,u2u/ TH|IH Yx؍IҋUŒ.7ut8:h>p0hWx y>@E$d*-Ao3zK#V7jZm Xqbyϩ}C20=G^5YdVv 㢪b$9sjÎn*{4m%1/f&Xo2.=3Gc;e7ewoHup?ڀs'a/I B\@{w4ÁnM1 _9~_)A(<0;처UL ;Dup4dAH訑O)K*bfԌ hp#]k hw'E+]48eYvRw-=JGBNAXONbom᲎RڑWy])Vu&A? ;SC#".l▦7a-.H{? S[K`w~4.E]swg35Eܦ]D -AC K;dܨRcs6W]_b@թK5 0o_ɩNXQXJcmzޯ[:>=£l;u>-`w@NlF.; ԝ;Zc6is +oy5g+r[4JOGЙ{Fj,q\D}Y=;ugkMO^ML8;1;&a㎦pٟ%Lx蚫^D(нW˩{a y^ᾞY77h[eANVlS_k]#ՙF*ܣga̹zHGl|ND߶]g(7JaNeC>0O5 "^631_ŢGra-@ĭ!S7׫#7h *^_4]sZ2"y69cJá.ݮ6on~7GRs8nqu6δn3<(3I߿\sqYOtT'V?r-mͷ@汮y6Z)9C-־sSpB^t8kv:*e-;yϷzC9;~Dg:T縺nԎ=#ԖjHؚ"bJd 0BUhը[Т*FT}'_q=us1Rt"]j.׻(ڗWݰ~{Qr/H2 I>T;kV/^L)jѢǪ;mĭ嶌  uI y95s6Qkt O){*a~@Qpwu:*VxB`ݾTr)o>^ ٚz~St"5e㾪kB暲%Q~'/vzvIlԍT<>cQ?wUUaz[Ľqkp1Ô@5'0TW-k 9k]Q\L+ܤ׳+Qo9g3̫5AͦzLvluMO?9 `C~}x'S/Mx9U# Ј?>AJ Rqw [H5yT;Vx\\;$~j 03}&v-Ik 㼜w^~bϝ?k}>m03\889ʯY)rI51GX^VV ֔dFKfb,^SlO5NYA2gB10 1"J 2- M ) #QS>z뚂:ޖc{ݔ{M4LJ쿒,+yQ^z]]Q@gFQa \VG4Gß~ pnSHG r뢜7ڜPwf3t 5ʪ@Nk9A,jQd[2 rs^H2j'XL [ 8W{ Z*v590˯M ̋k]E4MyC!!Z ̴x`?#>AsF,K62_B3%.Ѱ$fݔz:/8VD-[#D$O9Ş 7J3v~ 顇QkvpVZ{Priܔn =6/5b펴BRl=>t"w6Fws-)Q0jl9#̈́mN|В`#g]0Lr~idJaVRg$jG(Qԝ>~g?T7r!Ki?c 3 =K8霬2Oſ"&t8=@ ?hkSv|_f /|x%. o+*^Yj/L,%ZlȱtnUNsἘ NFKi)|];9#Lzx,lvKYy/#MwߊrVdS>V!,)SӒ`Ah J"@/ :X,&q9.Ufz^(r` V{űj>ϳjNˇ'&H жV౳3HF{pw`giH3nK4^Vx~R#umDLS3,͚l `7 r./u6R>,!F $l8 G`1$`\] 056h?X)9TKH> vۺa\3 cV[D  q %9'D[38P?w:ÇʀE^?Sq:I}D)_kUuK&1 ^OQ@f?;$G-3#w0W5EYLxQq^ƻݑB|Wx4%l53*)t#6`AG P6 8XX1a@)n1xJQm~bC<_3µ>I+ LpԠ@{4AML e,M@#&Ίʽ{>uqH;]vqhnUEMу{qu%B3+;Mr{)%L!{L4ofiy_u_{x~=9u? B=" MAn@\@.C'.ߓWQ?J/p.ҧ5A!-4zR9Ih_a |ϓWU1*r+ugZKj9)P$w!ޮCBJQ`eW"QUn\J>3TX &$8w&@y7$ 58@@kɻN5O&'S={*;kLDjh p-Mm[àAlX8t c;H" AaPv<: tחJF|UtdcaO/ I+$C=!<@fL 0[׮ $HPNxjH!\W|:m s u޷H5ۄ+t HIHp//P|nAy p qnyԕK^^2զA\1bf~I yVerT20y9 ȇB{ *6LS oḠ͘=`(y'ǂdDHH@7 ? yS Q \]O)gNلSn+>84֍EU/붲|I,(A%16 a71iܺktڸV얥RZ9kt9pS0 F:q:(UI!ٛUEOK%Dqkש"9sh/rǠ0jW4״>,ε1F`" 9 WM#%T |_S+'*+#uN<aN_rqkK':Z[6s5hkި+eLAl;JzQ .r(eX 1KSv-Țj%5k&oR3+R9'iA%$;E1§r,3N[ <@g2rݫ )eo}0ܙw/(W+ߛ*ZmA9c+/=ݣ01 @bT"<&qƥL{n(pNr|YbY楙fUg]nV$鳠ƢrX%Ɇ< i7o'z+[¬Eь^rᒴ^8 ?v߇}?tCkRt~uRR2&G+(O:ٵ*YIJrx.3ۍR] ="͂e t;e9I`zoxVx-aj~YKU˅cnGD"9̷6QL֝1?}-[r0JPCueAޥ9yf0Qu|J"Ytwclraɡh)e_TgÒnLJFhGK ۈUחeC7ܩ|Z\n䗯V-r֙SF_Q0] ᒞecpgDNzgQNjOF6 hL8]{E jK#5}Yү+~t$mxOɸᤙ>tsfJ隘̛Q(@ E-kg,.bjPؐ~vT=74cj~FѮeڴOV*hၺ a2-6!/fmTo蕧NhW W/bEr 9e]̷iLŋs'9,5Li12e}'pD=Q6~qmcO5~hn,vл ́W2ߔ9SqF6z4M>6`i B䢷'g i%,cR|uB|:aŸɂK8Q}!k6dII7qKgQXn%R>LjT*yp8wjPN? ɷJ>Ѯm ,/>s!pS>QƠӊCpO/:ݯ9#Ҁ˄\\9;OoMO>~+yFDEl2KG C܎*ZX@؟w9@ya Fֈ ybqޏ9X`qYh6vk 3A {Y'|}s=jjHK.A.!Aq/v>ZܝBM=tB+6\ݒ_4_FHm@A Nm}9vJs=/yx*>>0*Z(8RxͰ~Rws]xwŒ KFkToLWp4ۇKbLc*GuRXSE/kM#Rf;!=STҊ IvlqcqmT*Gzަ56Fp ͨU-z p'mfo2Y)t1̑c:˜l!][$M\ endstream endobj 27 0 obj <>stream HSYNTMM:Sd25IeJ2鶺:1QƬ.Ⱦ,+ FE@vxA@$ȾljdOp{~si35VPu rqwt8%f}qoM׈w]p Mlaae'UvKH/;T 9LePt~mՌԜ4%@.= ɓKQyHq#PKlƭ taW4^:І2{^ӥ8p+%4xLH/BjD|Z Ds\vg}.D}?x}nD|(O8"+]O̖B6Tj_K[iS7د"kXLK~TB*OiA>s3_Bi+U@P)(m) =cjӃTٮl6Iń~1&=-ۄABRk(.-anKY׏ &NTKHL.Bq˻Qh$f꫄_4E蚰~Hh6qT/v&UkT3q%T~};i:msyX*'L܁ uI1k +gMJk)wGN[vJ.`=N#x'U +IP&[e¨OʻeSe9ȸ 1ad@jGd.lQtBTfnF6(K,d|[!pKz̓RL[ri} mB=tDǤi?dvFg `srv⫼9h] ڑIuTK}5^F-dxBnN y UNWrYP.{@,:mŖ˫;J(:XC~FoHg>ẒL9iu1#;Ӳ s =ȸfwytWY$()I5i oR(gl$<=Of2mߜ+Z ؘ `~ h8%&#F.vXwa |f*NFV~_v0ziw"n7H*iUq2@w<:Բq/zmS {/l\@n( );S;&rgh5 *Ln0ZVKb ;^!?Lj*{5iXb"j̃hk#:,+\%D5@O5Xv˧8kSzJKP6r"jzp-×l rsH)3;aTj".3eG&`Xh-| HmRP2nhh\ LI8]@L[*;'Z.n`*zg5MaJ@ OO|v* މ˷sտ{2Sv™0<^<1m6A 7er;| a&[Ż K,>3.%a*brn>dO(8p!Zq7c8n6.%5撇]:XaigF岌ٹF1q8Kdi"d1aG`6.Uo[#枪]+?}HćzjRr@5)P"a #* _mo/EWkiny?]c=cMEUȪfk -7 .g:,̿v=AUCN#eb*e)31g??eV᪾詩&3]$nItH4.QqMP%jbܷMQ}9IM)srun|ʨ]z&Ĵ\jn5c@2{Ԗђ=>&U74dz bqUXy2;}r|Gz%UڌL茝XdžԴƗGCh0,ȚMiXD)臺J3e ê搂\ 2B fX:9 ~ ֧BW1m`Wf8f``4lTx h02pb3ׇ#I2j@}E;'>د'$U23vx*2fяt8 1HG TSփyHDAnz!5xN/8ug]t>c+C֓5]jcldRv4O/]O8~ݾܛU1`"/tOsI *jTI۳bf./aflߓ]u,sv+߰[6iپ<,:#Bxè6gHQRZbgغKЇ\;&Nؐ}aɷ%Rw^aw /l򏰂X1>@WW]T3Bih|ҫ@h}}psU!w{O܈ o# Eoηen>^uCWF)cc5V-T>mٴ?IۉQkTvȹXj5ѓ떴zNq=T_'@#;tg [8 RtWY{sR>ry0j /[rlYug@&1N_x(XGC|JŒ/ł.kܷ9Y>\ GoV.e}u(pa@Y@5"AjLIBO l6lxzϊYQ--<;!\"KƢĬ !tw؄SikTuE0bx{dÍoQERyғ_yRIu) 3P}R!H`znGxis#KmPGxhPEhim (߹/ؤYcD8`S:ԣ rIq/%XHX;/ t(`X&>et$M\R\?V˝9oNyǾU32{^IoAHK_hhP}6)].t!B$‹ ƹ`5l8.+u!kgnpۏ:OBH(徇o9LEZ_.W;n@:Ch;YBMSZј)ieoc-+J92CrjM@FvVw |2R6W:moz[xJzM[-Tap4 yvef$#u(7ԣmѠ(2]zͲ͖~Xj)6]lkQ`z3RW&ƛ Uo/Ks"BܳnR2YB2떳5Jy`}p*>Y>4ٙ}>_# v-ޤ֔:9pǽt7K)y(*Y'U~-%VO_KGL{egREq9F:BWCLk[z S٧#q32sp`OB [q"A'/o ݄.tފo<[FΝkZELݰ{pYZ|w!:uSZ%*b5}a$7W.~>e6F0/ׇk^n qZ&ѣb`$uj6,)jb'heA͝5k,7ϔaԲ6dlJlj%ADϳh{z{ 6^!BF-\ԥ1UjΑR0_{q4!GW_4L'H,O~}ݫa=.Ѣʈг'9Z宼"~{ *.<di`2ZΞQ:Pe5bl#觿L0^J˳ozE )}sL9gQL^Zk:6ѮGAN khL$āq)yr2g;fp |mguB;BULS㪈94>.5;cBԏ 84(.I7-}Y.۪hZRSJvWۀ=U.pKto_!)ؒ,bA'9x]Us 2"­ z rol1z r%bRbwɣҰi}[m5?R2bǼ3?D.F.l:[kӭ"Zף/7_˿x)xGN {Yna^+D?,oz OQ^42cgv@WEĹ[?q l}WN-.5`tmP8/p;[l>4n-aE BƧ8Kq;LQ!(~oKv #x 6s04S=VБ~g>Z*;1a lʮY5 !nHa.R-%F, 56Q2qῌ}_d5zyKXg;㸬}-&kL#&-`s.v0)6aa8pk8ls360]Z6NTjQ2P?ٿ+.S!?7MEyMf{gd V dulg>[J'GtVZLs̻ܣ?[fs=rTz$`ui5I T굼rqZ8#J@_ϰ>sj}:.5BڥPqsy䁚 ؗαLL+EFNQ WM9ȭew5<ҕfҼZtxn2%>|M}@ڥկ-9쌿u|DaD `8SOJkN"c(%^,;1#U6%LQpkT=Uem8f#uxjj>v>W:L+ dlbW+÷ET a,l%db\ S@,CUoPȵɆb2J"0=гNHk9EFo+NΞw(ȹn gl1 %3]xpmR _|~#*e]MRmlG>ą#<*.urGOq>%Pza:]3$5ر6flƘDc\⮠ ʾ<@ Fń(A@QdNgjիU{; :5|,Pl>]2@ϣ%6?oD=%wX9«2:e"cz>9JJwAZlɌx3[DpqN~=P ,X,S،pYu `,8LzH-Yt82u!$t}k5A=Bu~,-Ač=x`죺6pdNv33>i+:ullұdQ3 ;WR7˴Z:uWAk:ҋyļϣڙ;Ӑ1Xq+ tm̯a"8!lQ"f3hdu ,b/o&'8mCIk'މIstR9BTGceӗD?&/sb9'ҫKøg3,!7u x_b=tNalMaH*JkJׇLT }FtPI/q:q3I܋ A4Nxq;? ܰ7RJ֘c۫d#R} Ԛr6nFqݰI0YWv輍iT:DWYm[͏monY$?ǫ:P6=: a=ς4c˦?_8`]žTSBͦAM .Q ^ xVP{HIUg^əbr,<w [,TyWXȃn=Kd؆I[zQŕͱGY{mb>qK{P)1D-t:̱r_Z TJ.nkku_Pzg04SouLS<2PKY:J2)=wϑ Bn<֑K h^56Q{{5ϷBG+ȊDv,9fP`ѕ)[ج1\ϣȔ5>-Z U'Ӵ6HpyT[7q #mMR&Ϣj=`!=3`"KPkPA{?DEWWW!%D?z Q} Qy{ ܆Wu:&S')}l3tK89Q@VQAU)67/ST{RBAh9a10P;s0{fںQ w;kz*\?ZzuOƀЊUAD_Ωh9vzR4hVu==c{v`Y@iR5Ԡg,Bm^oB4p#гHh.ſ2}J+MxLtk][:1tvhLdQqaDv,]\(, "h&Ο27鞪9*OEbP##ffD,8«lx ZUH܋5%u1y*_#5A/..[ĕWCʞ4:&_.!lα4zX d:@G_wH &pTĂ|k0WVT@YOGQXI,ᠻS4{c}߻ۛ=N[l|SaɆ13uoMΞ$=qxVrVjjU c#|^`:Zyc[b|;}y,=#xh{SBzVӰ#FZ^9Z㠴b-Lg1=pn;o^1_~=oM#}kOn|a|tPCꆧ{t:<\m֧}^p[>罍'IDW^uY9L.Gr\0:./iOX { o+;EQd[hA%d$&"j+я9ؤs+7u[ҒQgD̈nqd,|v,}8NzĬ:U5.wUemp+٤ [Dֈ%&K$إi꣯kS}(RjRG}U ܋\\ V-F455'&h`K<5z.,S3-e2+ 񙪻_ǥ/f ;ͷC4eW֢ vz8 ao` ȥ~ sy`wlThl}1nIoilsԽ.,sĢE S0}Zzݡ3a#@jm:jfze^P3j 9)C(25rQ .Vqw ȿ2`c@50P,+w ^U.iN'tbŒ) +Yw3r!wYKunTeL|r2)st""my{eFUH4G4ҩ]ѻtjI~į  C~y9>Hxc x?a? f~ïJ'Be\8'TQ=.Ik>5 D DE \b}JRiLʥ}r,D8Jng?I1Xj؆͵Cly 4ֲA5>/jZIUBcֹIhHʿ~Zo dV:590$li:i}4,mȽd뀹Q}6kJW/UJoOؙ*'Kj5c۔>jă{QԳPA w= w1ᘹm y5S8wޘ$jbu6 D'DDމ[DmɀK">P:1?n%!-(˹yV2<^~竷-h) B١|w)<~J*SyW3ȗǿNz_QʖLmF@M86wm)3&S6 3uu$v4aOqy}a|ݝ̤9iL4hc;( F)tUFcW!(""  (U1S{x~ !x dАQep9> Us̽& m݃iⲸ[z{XpyVQ =ۆH};ӳńk<`K=:x&mOE*v4Txx]wJ>PS]u |P (4̷H,-ʆaS89g鮒V&Bzn*v7s3toԯ#jNakmkP~emRx)7j#3Bv_zDG+<*,5yKg!c .g(6sU 1˝8 F׍y)cBсjH~5 8g'%llV)p ׳OÛ~S9-؞ҿ~pٟpEwҦ $ۘ f]@a\'G,RugJ%|>Akd艓mv51]z~!X{5@Gd؇DLSOKat}ykdCkj GE䤌=:~K@8&~4Hv U>P3{sBƶQ7ٮEvrg\591vZ/4cg4UDlbtr"V+J|Qji"^~GZn-rQ^ s6R?ٵ3 Hڷ mƐ:! y;?k0M'[&5b܁&o?tꄹm[Â|'(ySԍ8 Ꭼk 7K)1K 2)pq@ My%Ac" Rc7hM/x5TLp,抌EZ Ă!mX FNx~n`drԧF^H9m=\OE iШWc=uz*B=ZVFYX?*}Mxbd5G+~~$<?f9I[ܫ3_/t#η+T 1~hf?"!C{5,؁PzT; [BhE$ .s!=Υl+@sȍ6=@p@&b"fl_;\fB\(>5,nޑjDï2rf$] iN[S)R"f o'f Gz2D-Lj)||h[ پy"Pєhx4ORTĎP 9'1rmf#oOsՌ2BwTYVw!)[!V:5hdWǂ{ D~H6BScUa.֥kgK@ !GTD7숹!ιk߸UuU.>jc+Cؔ#Htlo9IpPX*HO7UD6'~WxBYCp2 dB&?gpEq= js2~v{?3:I+y?Cv]__|jd*\mʱnA r0|?vD-|ַܱ=:I+%a-p9gg'\<^`_׵ ܓJK*$]w))Y}cܭ 9ͥdnM":lpA+mwqtꉉвPLxB?\P+HpT3Cl fGQbvTE݄ N9ޏxd(Ѱ. }}~w{8F-'9P^ap3̭!T,`l_o]%k,^ظ7>1 *BG٘l oW]hb#Ǝ {96z @ِjz\,þArNINNW˦e S{@ k#8䄴)ʥZS ݠև-4%2_S\_iY߳g2kqlI4NL21EJQbC" HiN06l (MDDEl4AP3w~{y{?ҵalʚ׋%_0W ~MNԫz £e 2Ύ/[{bw8BPR}aަ !#fo͋W>8.}^ C=Ч&`_G>Զt #h{0n|K $_O( 5M:Z_C)86?ɥ@}nXUI-=5 6R4d[lu~Opd)4-<,bkhzܒ$ɻR*4ݕ/Yg$&.aCCj' h٧c#|&fܛFb^DQI!jwSl%%?$f9pPo>L . ֞h"*/G?MpʿwjwK.77}]hm%bWVi4"f/9m-"&pVPt ݴR^ wT TCb()C<2 Mj9^mߟeo(0%ա;2Q+BFb{V؅xPO~l{ Cz?-m߅/qKǘRg`ώ ҁxfA'~;bjTXHCJA9,#bkC\x6ׅmߞz+mwB, qYKq0Gv * ԡ@R!"0`YW7*f<5BP7K*2ZB#Ⱦb@}2 Kfp9z`d"XC#Z3'u:)"o,cj4\cR 3nڇP)k//D~?D>?t`\}5*oecv lOfGi@ϧ:3:j#dM<׍]kM5?P`O@}1MǮ7mO%t,pu:%Φ|wG>^i~Ϟnz?ۘ vj(1/ qb` LPۡ`WP,}<)#0^gWSNS-"w-ՏE.tʅQdy $j]~K iJY'+U,ȣ'4d6 QbX,-85yAV~I\ yaX}OM):&pn-7'fMiTNg]^y_~5N|Oz.*hT _ҋ{ӴNuce+sdNTQAA=dY9SCTP@8q}>hxdbF8ܪzYTh]삵o8K[eAVlmDŽ6F&dV}B C 2KK5]D) tbغ*CesrLZ&ng p:[.ߌJxvl;Z `˦Q>}ԼC3NwUO<ЭثkԌ}hDD4 -wtll',@Ïd3ыղ<YP-E^7 .fC I^6ćECz6~[CyTcs[%=I"nOǣhdD[/ 0׊&yuL0*zMQv8_$:)| y&y[Ts3!- =k sА\j} Ugwc?4!|1]KkWWYWE'jLsH.Ho8[&@ hi:_~9 Gv.xV&0PJF:fqQ=+a3>kbK 6ď6~`TroMqsn9OiIo/ӳ6jV+^ϧa!oEtA,; ?1=:kM}񖒒RP>Zv`3n`qJf!:Hǁ3 -zq{Z;5N( ֏[/ ^m++ͤ}lnl3^51D+?{x|6eYkh8GХIQ-U}/NvԄcf-7ne|⥂rSV~3*&xBNcyo{/̜aI{"nk腛&\IXpI^3%O?ˎ, BWcsy0z4co &S}t`]YYq𞖅hYkh'4V1-|;ɴvbIv5$';ײHr< 䧞TTE>?1AL 5KMkk+$`xS\r zi@4|t~싫ʤГ)Ulw#BWaOw')6i۶Gm0K/.DNp+).!у|WzMaA^]|.O~N}-j-˼!F\VqRxT1˩B;07}Knv6xjs&|{YҲ؆O;yyjzsl(`QRL/N^NJ`w; 蝦k*fq'lxSYU68rOuU3z_C䄛k8㗲\|j1O1*Bc=)qs>I),|BF sOï"}k?)i 1jm{'97ȿo5/-~, J Ձ\uqMG:pU2Zhk".}|F3G-9Ձ<Ƞ1lGU;Q3A:0kD8 啸+f RjVI y0'G<,y Rim)ֿb&1_ɹ#c( \t@!ܻ)FTK[jBM鷿W$mS aVδ*?g>klڥm+W'F/N كO{hD,t@[Z wS+ƭGlpVq `,v$\[ND] ]*rCǸqAZ2)ar֍~ !:\:#\(:%z>s#fNQgs+k]nF|؋lQ.vM %k:ڭ(uG_!FܴVw&IPuC^7+G<~u#~I'Bގ?tSΗf2ܣ$miIg^88͙n89v63b(  ET*f4QB*wB%EJ ~~~~]Ws8\VJB Kדuau.˫w'01%)&2ɯ3+ô%f\egj{R_lC,s\DcMĦNӊz,ɸُ{8E+yjFއy7Rƭ$IMp B6e`,jUj5/$[Dnm3 ZVKłmHdD .Ö́2+E]ψoJE.><0uCÖo௮ק\QZj' ]`0ůW*aAhfTDlU_41̺c51HCQbLYz}1;p }`jKE+ ?VNr;40%u5 WF8'`"koxWE#- nwTbpqJb{p rOY :St1 0:aWQ :Xzxx#alL^ &P6{ x:{_Cuk5-U.Ŧ`x8Xvj`/3^ (p֡"J*|o^`!pqGF幾PLvEsgvS4_+y$HU9ܒY䁎xeM۟ļ-Yu쁖^]摾쫁?55 BΗE~㉆ Os6۔NsVyuy(2O/U2IP.*Ǿۛ&Cx4va|+mg\cݝV(N51ugKKzK{n36Sr{{OFQn܋9J[`U8bl[m7$=4([j* ־>q:zMm sK׵Qӡװ?O+ǫcCWwEqͰK\*vm1mݓJ8t? &XH&wU7/, 3ۙvt2WѭA|ifV:*&hqo8?v;Uc*1~iu>!D>do+:M9A, b羹|%ٽ+я}Dk>|ޱa &h 637 l$1WN5t=]ם,JhݕOAwͽW.%XFFXM:]g%vF1)A=Wm2և古՞t.i V3n 䅝dz5L ]l&$ 0P͙nf]K3TrZ=_׿ޖa"wQ!LA\fTa$-pgfdSpMm,1W\sH2({pi-駦΁ss蹹SEOE;UfSs$Ȭ,ƃoT_p+l 4AW>6%}oouX5۩fl%H09B}'FP،IBG*vvCdmGKǺyq,҇诌d>RaaZ14$$>O1XkMB˙¢>_Ȑ_Hi1)i7[ e yi(#, rҭ)ZuYCo#E,ܩ!tdBzg?ASAqaXzron!1 ^4lYu d,J'}4wtgܣ# * (%JBH{#H RB  $BIP"ug{s{|z:JYWQM cvb1}W Ϙd)>3]E:¤sClG "g_u`2Yؠ:Viwz@ZW 6mktkOKц^SqnChRA_>g?\D]]#s$ظD  s?;ަ FAvwpO7S 2mtԦP7&.u"Tȧ؅^qߖ%ggRqc,VaWP|pt~Yw],5RaߜBܢwGFz*[*Gǭ5%x%:6{U6椠ίkٻWW|4o"'H);19JHmJ.K.ո=#6I(!:DHۙa#HzdCF\6>C X'9*i9.,.ozxҒ %rK/|VmJBn:Km(vgա9=M &_P =CdG/(!}gQu`P>Y$iVՖAD3J[NWG, ~VlK) %4IQMtv]2Bmc V-~qYtn+#S*Vܼ }Nl:BGxTxp}WzcԽƏmȠvGL]k(4M;#GU9讏[eC1ũ]o;JnDorwOu2Ȩ_Z+ i<_{x_ry5x/8tW+xba6IL yai̯m1G[gԬ ևYFI^d?inq Z%,yo8[eU{0-M}sBwM-gX@\.x|{ k)᪨pc{FZ~̬0N* nKb~]D yׄl/'nV.|roKO8N_ڿ1Zm$#{q1X P4 L͒!wԑ _of%냨eY 0B4<|gC>p]dam޷kӜJ Kٮwv-ljiiea 賙ߝm)HY1pR'*z]v/eSVpԁI$62vM/v ƒ=fG= h7|[j؟6Vل9i`$9=yE?E,zpqJ!|KΧ|cBw%?aB~cK]kπ{yTLKA]0!Y>=-[jeI! BFNÁGpiEk:vOυX9!FPǩ7΁Ԭrc'&OJhE6IVY}5#7rWvwQ֜`:G% b|ȩd9䓕VWC.\ǃ|jjyPElIA /[#GI'KFg5ņ0aс z>>0qb |شiRWM/AwN\bAǔ2O1,]YZ{½^2{j#SRT&JUؕ'^ʌccll06 X2$ ZZ¾HHhGZZ+mqݺUsu?fi<%ʭO=J.^ڧt7|2N&'%v} pCy+5~1|~SVn ~sS70ZĚCBl:Œjf)ѭ%ŗi2 !IEsd v9`en ~Y0ه 5-7etxHfhCMqYSH)~(Y1~܋s ɛL cbUBH=>Ur}UL,YNfW9Lwݲɮp'kԜC6V4 np,T(7m=""iǨd2Nrn'ckSmB_K] YFfkN謡R#=By ܪ[Hތvs"ܻ=;YʡkQؐFɻԬv<>:񤉲ޜ#M_|W_G}0fH|dU=qB\@U` qayTdc*%65YmҺ˄}URrNx$x4[W2BГH3`vOA:Cϼ&eH.Z̺;|^=!<]iTFHλM' LP eZDQ9 }}``QXT j87]Bb.*إzDV=3V}7#VoD2* E O~>s^u[Id4ַ0"ئj(aT ,,\%gL=Vס0F}xHftOBfp՛q.h659)N?ϼ0}VwVCuҾ̺27Z j[҄Pk`j̚_)*+'+sxˬ 봶#A#&:K^1snx6 =""\%%8'=Qѥgq9@y7",!Y{0ݡ=[9+.@e,9&3цgu7Cc{uΑx֪zE5]$ax.Mfq֞EvK²p䋜UH,ˊ!/a|FT0ocSZL-gge`دͬ)s?rl4BF#.B\LܼEd)2#SH=5"JE#g>V9C_5܍'o h+&`Uw3ۗYI$,ި@JxO{luS<_*-(a3һLǬj}RjɧV|֯pIj{8_/ٯ;HsUBo <"QJdIqk^\37B'`oP~9Y{+kI'S6Z=,>O\  vNiK5ߗ%ګ*OS-DU*?U2A'cE˓0ntFBIz.F^ǐF}亾i&+yvaagZfD gI,Z`t( o,f nΉPMzIµƹv k_D e3BV?X:&xUEV1%7j~ HdOLjdE i=9}mjhO7~~:q_XEdX|Bl w#$c"*tpl_h?̚όvf-"3SyKfƒ~iYՖ@T&&951X"6b v;@1*6jYEE@A[4x̜v_J/?ٿ5n?Ppܙ`f_v\INhW(R~?Zg>[3E·1^ֶZKTc<JŒ^cU;qfh%|ibn.,έ.X1,V.PnIWxck׈cՔ=iG҈ %[l]#~m߶x 7xE9 t²)D%^y7{TFOay pti6f071eP&각^r̬$COQ;F/) !`yL S/ ![Zis0}_\pU {2w=FeBykl;BJߍ*>8f:Ĵa=G[GGݨj]*g/a.稬So37 C?;;X{e 6-y8 HvP $*|,mhLVTk̅fRE|~bE*nșŚxtUn'j<4>9]% ]t~ƍXm8ϵ*Υ'5sU-s]o;M1--&_!&tW#c![u@a2Q=<}N OKO 3n?DT3 %OQO_@UO\9x[SD UdeI|K=.mۃTgOg}k=xJ#Zs]YݨG?QwsQﴢ _g4*uelxw"Q 9A#"n{IS;<™n nP{uJH _3j0kQ@ j1ϫ߶TtHς|q޽OFhNpЫv~-Q9'ChnpN|S}r|I-le[BV}J`&XV摰z#'{e|Yp7u,7h0jƔȸJ(ijVĈ& dۘ8\2{COڜAVB+[!vO{S68̓ ˞50}uf,_NZEi pw=jKl"9w8Z{FGy*헤a@Tro SfȯCtH qdi[I DގÔ{P>f'+r&'ћ@wYf6Ī9 \SS`֫}RfvU{g] ;V|9x>I^-/;+ٙ}XI*>qW#l8T3J1T`rP!c5Y\4k `0n\gS\!=eV\y\Kce8n}P #.;D'V5`rTmK9RpxzexEf*U1qA53TfMi X~d*t'=Ĵm21&1Ƹw@YDEd&1 Ⱦ dUdMu2=dx9;'kf4ȹAKmܓB4|}@ݵáGݒrwѮ[5j fv.^*8tYX8ġ /~楢{䑠 INb˹S¤}{Lx<35F!к}LxԄ=A'YhLŶOC2 -ica#U`_FvϏ,3Tt\̬YdM\UFyfSͽݷ+2EyH(QFVbWa_Dˡ{yr™H)]}'Y-Ai6!`]ge;TB5ZG7/,xxKy~EH1Vg~tNh) jHHi,#!)g ȚҙK^̦41nLIh1RGHET{~ t͠J6L{LΚ=%' @&].yyPi3ࠎ3s!w$LM07sL?c}kz&IPEդ8F3f2(yF WJu''$ǿ.XN*4k!Vyc3/x{/ތG=;*=J˯QSy }4GFe: TCH7b*\K`ٚI 2zPu'$?ڂ5eLTh:·EumZ0`[")]FKy{pTJ7RSsFbWVDsD {c%^ &)%,+`sܴlc ֚࣬wH}.)Ƽ+Q-+W"Kܢ[9Yހl([}<ƶ Ď}`;J*AeľT4߼d[tj]BaΚ[ DcJ$th@Ί<5bZZԋV[KpɎͰ.ѣr&Bחeٞ?VMl\z[LF= ȩQ!+zrB*Zozh+' |fn} ݉n+_;6 Unp8ٝz.*egN`wԘb+6M8{ށjcRArkބng/f5i5 V#D>NGcvhq/%&D=:"%߇ڢ7eW@fq{X5}^輞ޚȤ4.?e34m5v7o^)- EeQP6Y\j齙fJ +:b"N3x{|?ch1swdpUʚD BDqlyvរjtzKE{[k07 ,EY?U,0c/wܙ+k9KWяμq2l ?ѶR #+{ғm@CW{h튺/Tw+IvR *tLwW\r&ιX:5ݯ"GsS#}ZNkSogkY!ͷ yllKFbwMFXcL#U(PU/E!e ,_|5;*ʓݟ=C;*gdDgu<]K^yMyx&d9Ԥ箉TSv/M ~# )AǸ'k ϖty ==cwÃT詩rk lWO晹@fȝQJo%F\*]y )&nGKяccsyh4 `{-?20_g2[ B]Y$A} BF!=Gk_7zu~5K*b񞂕nvsqʩI~վJ[ѐgHK$$#g^o)Cyr8MvM1]G:",h|-Q0^YGX7"MsG],0Ȳï.EFk0rF{c-熤6!o)v `SYP0ܟ4T Rn apf>=+ϣmʷ&Ɓ wގm V0])6 @Y]Z55ξ9 \M~f3}&hV2@ANܖmnEE¹ *e] 770w] lGYw4S9[=Z* ̀c}]}6{<>h}XpG%C!}[o?CGi\ D.E^,Inm'daZ!CXj{lu >_kd{KƧ/K<Kݒrf>>[q; en"|:v3Wv񦷈ۓ'u|g{7ȕ>bML"cCRQ =m_UfV]6>[yPT>E K}ڝ!Mַ_hӟZLۍ VV}t\Uߍ:/ gCN u^,|b%>׆Vt r[cwvkH֗:tᣮ5\I|1F<ƀm "=zi!v6qޑ&Z$ z?_]~AEvb#zPxC]ɮK Q |Is] 1cH!6EC;(7ޱ)7^+>2Oy7  =-C4J;k:О\یz6ʅ9 hE|8A32u(h=XjbŌs2@}3eM1!pk*%=}9 ?24u=%qP: C\͕Lu'cB ;ȏ;녙 jGLnTIHAضoc|^^8G)ksL?90vig}s Zl=VqsjoɅ7:$HMQV%󉩗f?yT9=)=jg(?p C޿`ojdåTZd/}'K@>÷ed-֣2Li'.ع$pp(˘?sƯ6$8 wmؘJ0L'LF>з(wWHAgGlkBJ(nqCJ܎y1Q97y0I 1c%UyOwFYI !%VW^RV;B-②ZDp>䒮8(܃oGxuf<ޓ`*ZR7TحŦl)+_Q><|p&&ƿ(p/NtY&!:~u2o&qޚr Qy^βI3Ũ3%-TA"Y; u I;$tp@OAnԥ3e'S/9b㡢/+넹F |։xtܜ ˋ2g=-] -I_"mn+c$"J 3p-r>q Z] xJ%d*_V6ZE\x1v%Tj<ۈ RO/*țRj2udf$`0)`"H:)Gsk8NS~>Wu`"h2=ΈL|Oߞ,ڐTWRߜXy&njV @sW^ʍS3$X\rjTQ??8etS~_8M/gQZ/vJC;$d zc""8eN@Ϡcwr]0͞1b4]3ŧ SJ+x t7;'x5$WG]'O2Ur ɯСbN}=2Jy4M @9U#uo6Ҧ6P"de?4ߵO9˕1\s}Y󯻭if #Jsa r.eԉQ JO5)AsKeuSJL 2?5C3M_,!jvmTY 7)fk^x0]A(1:ȫ547nƜ-&Qk]=ݥe A'FKT5s-xKJr ؖޗxJ+ӐduqS5Bg^mjQ_ߏeɪ uSN4 -}"g(Z ~_,, juW-;FKh=ŭ>^Kd_ثu>ɡc8Lq&ݬiKK,y9Tз&!`y]%D^Ss d)%. 9ŻHc$EZ qY\uk>X=/ՕvFdL&mRDfP0ƮRX0f/*HbAPD&1̚{|ss~osf1jeg {˃޲JpǶ~^հ*N}p\]OmA%|ckK{sP vn* };?9R M@W s`ͤ^6pQqse~Pn.RVYtY"'m+/Js5Ӈ.fw I`Vn#2l}y{ fE1JwdM̎:2`I|~tQ .xP)D'Q 8{տH[%]]) . mAd;&nΒ /E5"lPά (ϣ ji@N, )Ck1E޵YG[L a}45"ҁƅu,5eQ fUo/t"~;rbW&) %:Udڭ0+5]/Q:ÂubcJc@&xKz!#}QY֦8誐S}u)K&@nOq>s-7T_̓u._O)~⿀->g_A*qyhXsPl;:IjFd1oW#GɻOs$Wx_ᛨ;t- TT=,_mȏ"$H@.;P~xjOIy12Ø[K W# fIዙ43^1-n&$ET$2:Pu_wWv9Ty%#VL=JU~9%zվ +O~>?fV"=WSXŨO|TPVK{hM0:o_- .byMyadK# Lhi*:jh)Hjzm؉: ZkIET p=57j=v+3WӞIm&3midFnAA}b51TD@%*(dW fN:{.y"Z}2S2gmYZg_:gwR;Cn@,d%7{hJBtCӖ}z0>92^ioS&"MiwufΞ ~pހQ!^D-k{geveW^ꑶ'LD؉OxGk \±w4I(hmw_,6_A)=qFV%QX  t΋5_bn984Q51`①v&1M'G[J?yxzY nŷ $%{OpV1&TI˽2 0K 1YOw]\/w*c롄 <Ү.tGT:`;5md?MY1 {OJ.|K% 84~r0&6> E7g^^pC)dNRjɒ: 3r:^yO!v1f^vjWu6Ee ^B7uZ2* /!AK-Bm7Crl{Wlo&h8_e=!;/Z.Y_No#@u\ÉEv6+A渙;FG.֍M"QD;@) 5$* -w>[!nEVI=$;%k3:aїd;,\p& +Xyҝ¯袈ߣ5ͭbRN[/x `#A>9#hsFnt }]/,Slx5 *;8q?[1!@ы:CJbey䌄 vr5@0kE) 5&׼Ep̶BԦevas)O9*4FkXG~/ĴF/j|< 9Z~eF_ ʯC aur}jY dm3tՈݚ#HX_%eQ3^J\Cir-mvCÆd}Y*,$efw\CU4% q# A~-@%Tq >cd|5 aU7̿L{x! v&l w"*' ^t5u/@ndp)Mm1 xa-hQ*"jsЃٓ;3)n-ԯ et[Nqi_]6)ef >܏v&%'MmjMjSBHД7,lr\Oos/a&LL'S7?{3)'+J9;/Ͻ;vHhUC@N.?wEețA)4{YYTzK n Y{%f27'T"u-ªAOޏ[n+N\1Ӡﺷ?ذ3#4\ѡ;p9K~YGnBڈG>2 Xr CfG7^ZzU5WSx zèFR)id\,x`666N x1?+3?̙鴝̤i$l&I5Fcc*+ v. fj54Ը n Q4&ә==y<\9FiuD,>xKau}SgU-[[7*"Demƌ zS0; !V?*^7_4*># /[N)65ČBfjۋtҳ σsm7@&jٮosc -UˍQtle3.tm=`[nBi&;LApW0CW=J`hXu[oP9.!^_<^A^L/q Nw'y'nYw'zV]>=Rfz_S' qxC(U{+~|*1󳖸K^d7%RR ;8|1//ўDz!8ea.AĤYjKžfE?2[1P jNS+܂3_ Wv6Ni$;q]\ 3;{IK͹_^}E4(8AMfoYBjw$aGW&gUj,?Z>^8o{\5AثCP 3%/k8ʌ[3A-4n1wTg9evpU-૴Gq=:gTe5˃:ZIPE>w|wW՚]uq6k+%:tH@ۦ ^$ꌛA5hI/ߟ ϒA{޳1./ B:^Λۯ.$ԙu)_;EkR[L9Eju`hߣ rp1P*#k{4fT rz$@|b@* E>A-r1q340 6k6zwuڵ\p%~3-]S}ZskYi'KI`g?f᪄Qʹ5s[$ ƍB<̲L]ѼX%9i(P*zth)ْ g>Trhe6cf=T1+44]eS?-?*KIx!gcw5c#iBJ;?*=UTk*U֭ ^QmOLwsDGaT[]E);sʸ'&jYD{?8}5T["q,c?µAϡ1e;/ vwQ5Nv!}Cu╋:])Y:5$pWu] ~bS]bh9ye4567?)4 0YEIް.O&IuP~8x@:ܲv$ZGĖ<=6C3ƇYApWE9nhwP2l܌-K8o)8{3fqZhQ 5ü0F-Yv%fp6_'/6uŠzSr+2:pꤱ2f)qg}mߥڸx`,9(EH9O. :mM'`73wMw ܆E͎2G-]{5ewOփٴ, \+ 2jɥO!%Jkw;X_Rd *meP'k2J%{7LDD?;YvAmltqXp VޏA'dҪ`_5Van&.Ča==5_1CSԳn^ξŸIrW<92 (?h&Ad]-pl=kq]=q?'7~,)A9 ܾ RӲ?Jf%S `>>q7`T?lkTmJ.[>B^4w>;\WK K00qzZe bFzͼ]r2Iv5ysoU܏ ee,C<Լ 2rgln5--/ɨX7SgOTC/ԄGrdYFx®;}y7D /2Fq&m`ᚔQ e~s$m+:aj٥Rb b6qW)<2f.!bN)9iA9DJ`<ɔk 3 aIѭɻ5Y^}O[r.io&"nF jzYBlFc 2NV ;m׊QE,+ܬ[qc1/D?OQ/6y{KƝ9n * —_}ޏ|:!1m.r6_Ka=4]ĨL ȤyĿӎQ>I]B&hX1urO}R1Gٕcp$61֨ p>>Y􌌡щOG}9B8ŌGA ;6`<(DUA|"O;Q"7GVMwJཔ˸MlnJT_RIRF1-bw4mv}ǔ0@5[Ho (iH9gl ) cRrQHN@XèzU=)Ǜ"_!; ( 5 Xv&u)1s v)؄]99[A'$MZ,' j<&Ci?g`:=csvQ_fC3VD!kcwbZ($VزN7}_yxjqC)x[LO,hJqe }r@U vo1Wb">vk#,b%K_}//-CH؟5sz[pg{1 . /1jꆳ˲ob5y8ZZ I9bv0y縦F~CH;f*i2k_σ\]:Nkrё0swk*E#Nj?D)qA¤-CݣK.B}rI= g"QFF 5^lt&q/= (Obt=QRJ@b*k%]%C#C\ew)Jti,: [HO8U냭G@> هNOlݙ#^iUAT_ bJB?G 2Vdd)9,9&^6H?άB6CKL[_c7$.RQ'p[Ыlwr kb5:yo5E'Y- /*uҮwo F*OR+׸3o0 dϺ&V%'F^H詍q NL_Zƌ f2"9GW.Ybi#:9caeat\brs;Y QkaU/Ec $Y ^l5աNFK\xӱ1IZW2R'iՐ+ӍԊvf)ee޲5qq?[ RhC26ޠ8弈^ܷ nf4$C/9u{n7m>@nj 1封ۖ0qwHEJY?BKF457%W:ۧ;oRv -mKvX_nd4(뽵SՑ*RfRšxψ{oE739V v 1ےFVO=ޒ ~{qIU1 1ɕrT9;l5\a'fm {>8]Ւ]r> ˽9:\ԩR6~ t5޳˖yP"bO P4. )TZe!&z#n1#!&RV0_< )Nc0`EJ߾uy}e:.x!d⾴Ojɵ=+b#+5VϬEu焋#~4XmtxtO5vD{z>ms'GE).Ӯ&49ϩsNh Y6}{BI$utUAA}'+3?u~VpIç ?Cz)a3 1@%u"R\:XKjj}^B덪5a%NjY)=nD. ;L}K ݲܲ˞Y3-op P\Gi )Х[~ &ָY;)dX'&{?oo%a*S*aJɕq w\ kQQ-NXEoMyED[8T1Ӕ[9EͤѝsrI9p0~;r|y>"a_FX"ǔ" fj-qp-f-ϻoNh7%"c< 3gS1k1Ua>cRFo]R|RRP洨3+9ZQG r/s?Ȱ%Q=/f" 4ԊhI B&/ .6\rw8 q{˴۳Kq51k\".ckO/ߐ˒Q$Sv:57+dvT` ݚcG;Rkz\MhmqՅ]4ev؃!= ^:02aװiqh4b6"&%uӞ+߸_5_ Hw>yOOϣ:z_lؙ3RF* 4z太ّuM6&&5&FQ72ffo& Br!fƌHȻ`c7b լfpUHJfasy%@2Jv+u\ʎ78.i#>i&4TTA݇ nsXn9uCY{2\;O1;+̦kXy߫+N\&!щp1ԗ⨪jD++Q9_v>D2 Av.kw!s61'5_xs,)9~$$YR1OMWdZmX)?q?=,Bm:sB:&1%expgDp.ɧ Z0 ޸3!d \:\/]},[UdSDVr$kcݹ6_֟>TVsړ1^PlhY)s%}x5,e0lV0ꓦF"$fE _g7 =2r ϼswX#lŁ`OS;7KM[ ;.nLJFd(byoI^+=秔&}H&>{c) >X!UdCnvwv x_b Rg9H*r)=1|{07tsjI]*%L|x[enG)l q[3۞o_bOCxK(L|t cr&^BkXH5)*}U.{"g^WeUښ˚ZLR^[(JBEA<(b6XZhb>HxSAy_h묝K^=s~?%5)F1=¸2Ytl:2*Sݜ~Y"GGմ 3[N]ݥ\s{UQFD^BZNrS浼mcr![*I\R&,Rn$.MP6)#²"<rg?^s7 L5$YŽN+[Cruqmqʡ#n0DH!kTK 9A"h/?bI!|=윦gf 3Fƕ QR-jnFM&H h񳚻qaKUa"Ub??gk>06 pwµQ>aR! [ x]5aX#7hnm[77a 121.kǹmev.2ڮ{7+3iq,<~CN5]]U7z=%Wz]p1-UL'աL^ޚP6;o5*:-oUD-!cy ԶTXxQ0LpmUz(ўy©7+OT/ؠؠؠؠؠؠؠؠؠؠؠؠؠؠؠؠؠؠؠؠؠؠؠؠؠؠG4 endstream endobj 28 0 obj <>stream HSw~kfvNI s I > Xkq\7&:!SZ!-ƀ%t%a3?҅4igo;4;Zg~ODSJQiEFQiEFQiEFQiEFQiEFQiEFQiEFQiEFQiEFQiEFQiEFQi~&&()iЌՋa1KxUR+пXms\ F Y5Ҋ*.@ ?.M!LvK p}=O_2v9#ryJ^EuWre<.V3+p*9eJ6x+/T<<˹2.pȒ4NI:mU ?ȕׯQ5tESL:.ֹz[6G8{|GO_ =Į(+gUTџ'}cWѓ,Ϸ}VIֿTTpYB/2~Y]te}Oܣˆ}؋A% ;4GO߿(M6o%CVk^8C_:hS.^iڟ%m؝֧yS2ny"lQdMK&mP|^#xt&9?Ϭ]-iqe =v:rAP%(ޙ?qI(ؓuI/c~u7HԦڞlI{O$\ܭMLP CXЪb6CKRjAFl,J/3a=eN.>Ӓi{/`vCx=*BV{Kv{Μ :Mf*D0N˧yeØ.yC3M)1ܪGaoX8Rk&R" ˨U$_yDHьob-%8ΡT@՚ ;ɘa C4=jRVv1bSQWѴ6B Yp$'ɠEDu_o5_y%D/jaI!Qe9(vmtj,bQҽ-lL)l8oz?t= sa? Q0hsn DHՅyJbBj*:nbS0ĮO̢\#\[ [)Ϗ o>,l:?M~Bm; [Ώq?fPhB,bҖº; x]*ی8jc jQV{YC<$Vd@\Z,dٺzZ p=j4~ 5+-R9)fJ1uQp?PaVQ k,ElPm~y{KO-I龚[cO| Wy@~YIzI%(ĬDFɨIAulrfՑ(,ٛS-H<Xcec>^GaMߋ'؝}?QNĜYk@)a]aDGdW"3WafgoTSOMY2{js/p;Lɘq:06&FAtsu 0`u\19$tn$нv%A??}O|;.lfgw~$V?\ts ݥ# .Ut ОM̔1o>MvЏAGE,̫"6}cI59KOo~ih|a"̬8 G2zbC|Usɟ{>,;k!yu^q.gVn~q+NmDKCF*Jb&z2(7TĬi%n~ҧMȯArvULd9¾"=aϺDwk^~0>Z'At<`Qc X f)o2 ٿmɱ4dL'}!j>^0ix*),s<)+%uzMͭ] KGTHBD}TpʡcsSؒ 2CLbb:9 \IMd^q{KȰEGqdC8*h9r[]aSF=*ؘO-=Ր y!|FD,&輁G2t|?^UK;+_F.NU׃5,˛߿5ԭ{//l$OMM*h%.p5b->7ͱp])S"=^*7Y;גq+6*K! _1cfk{$FI [FqJ: D:wEWLt'fsu[bf 9P J /ۃދ˂z:TOT)f%ӯij6:Ef]pI;*IfVgr`nws_]&HStfg\Y]3ƽȯ=^SuUQS{h27tH~̩: fmͺEr݃%qK/~Z{lÝfAqM֒_|ߛ||kvU40s 2\;_6{or/7Fb~5&9X8vUc*>.1r-piq-<\lEǹݟ:| ]Վk~z4Tی% m#:6d2AL=T̪ݚR/9~wgV>48y[Y[4ڀ{es9u|NymrQy#]'&&nQ~5owZrvoV {!^jrsZCBcRwKOU뿂+sKkŧbO6_+ ~EW\ݚeY7 /%+X9-C5ʂ_1ŨV@`M}稰Yz2m'8n5C`;OTPM,YX߄wY "6=^<޳E}88Z\4u}h#>Fs}6TtlgRy mn ;3zmL\1' jYDnS W #-͇nvȝkw?nNO`6`S?>OϐAꨠIMl[z->1q4O}J!||w qvE2034ܠ1 S/c~fwRz&Hx{v Ye 9 Fm< kQVN.X%1E Y)}૽ie`f$$~F#/Y^$Œ' V_X7\b d{竍)$xˎe* ~,9W5lx%ߙR1!G~"t;oV7WUG4M|)<~1sC@Tp̞W~!FXψzkt^e&bS¹~|^vi /<eذ2}[I#<7 #f% WITlu}1vs(Ӌ)^6ӐIŷHt! XUFbfOKǬآԷV_kA¦G|W4ɰYžZ gSͤRja&"yj L#2dne ";JJv)/+[+= Påؿ~ B& tbbO=V*<)E\O0~q\OMi ovkjwVjfg\qϑ@Q &1tIPGeG$> `8Btwd 7{q .n ^c|C]Yr eW6,mLNR`K6L`  MOd.ۖNƭ~٭l+8Χ_6iMW9Ez ޘnsO֏(6P\\ٚir?t}G;巹FDyk(8{w[Omhwݷ a 3uX5b0V:WVcp'y.xBٰWm'2oKF-m=*̎]tu @ 9q9R>E; S/ $L\ ruOяrq8#V㒲OVITĥ<&&W]uWQA<5haKуeQ HkK+6JZ:W  pAZ+R@Q<ۜܠʞe rsRYFpHX+:sY`2&Wjq=QX'hβ~C-wkQa@-e|T~&p@ƞ3,GuH7VL\[{ʺULv,pGv{}穬Cp \T~$0h5Ivm'r|POv}L@/F ʣl?nKt?oHOzz+zr3`VAUW/iuSx Y&K΋ L!up&ܧ|ҒAY\PhLH"6Rja>5faA ?:6L$9RrDT!cS1.Wlx ʥ^=RU3J&M=&O.T%PrJ WVjTtd=ClR%Tb&ۓW5r]C9TPw[*",{u 81ژ0i%U t&&8u ʊQ%e{+UWS-"z Δ"r<%pu޻#qL-o:1m|#ɉkU ipKڒ]:Ky THƏ=s?W t!{§}>T vzFZz P t<;0;h6~5_bl0A<Ƈ_=J~W ɭ:M d"֛wrh|=.b; ;˨I9$>$'rL|'=Ϲ1;Q|^-9K̰q0׻ɺ ޮs_H{4Bj0a`6Z0V4.0)ɹb0#*Q6?]Х9xսBD8?P~Tl:뀽&)1v.KTXr-'.LWŽMrIrMj0ŽjI-q [h.FK!j} }Jͣ MpU.dòS 4患/7\f, %.[2{n";C^2SRT2 LA1IBX20xx_ڗ־$Y 6^nÀmd-8<ܷ^{9vloSM-\;0sr[ea z휫6!3mrЍ]'/526#cDr~w}£˯uܪays7ㅕlUT?aXu[^s_lu-*v}3\Rt=|}t&& g6fC&LU]]?ΜbN1(Z#.r! iV EHOJ  +a&B 6 ggUƒvK%jWUbN=H^\]X4ů-$ b>ea%uI#mJ=1vꟛj~w|<:>px%DSl*ӚFƌЁ=`{wƁ&0 0GeB4t(2Vv})=W3t5sY2_owyE]2sbxf{R]8.>[v\>/*y͕r}@|=dwc F){y ,dk#>˦}2.ms)S+72CVVI79gzY*1d/)=x!=CàYF bVI)_W*mi:ȎO{*,w3Qѩ&):K[v)8O`TVNlg-7QhoL-+OwgOs)j߃*;OhSxi018}J#i҄vn{i&[?{6t,_I\R'2EmY&QㆦswUz?j7ȚY |aҖFY?1;/f_6~&iQcv-uVt$U3e>g +YIv=Gx nq6w2]ǒ8j4sKܪR6=PqzP9 a%o>ssYǧZ&i`1ٷ͂A Y6I2~#皫g]F춚v"=%!gR ;6zyM8 ta[i Š9*]G*35hR II燵<'CG6wDtTbNS,Fi+ID=x*݀ ޶:3Aau3aUQuSa`iKqoK/F֢ȰOs Q~ LЭ`+lLP7Rzi1H3@[y/dԣ,>5_ڑzngQNfQiMOmZ[qP ׍8jn{G^ tcSmIxK%Y TX}KXm KBCCHe?MGjJn5qg#SɛQ,5*@otҍr)m; FHmTcYX*a*f7 i'xI&V-7 Ќ1U?O%SLdsKEy)6oP|R3ƥ|>%s v#TTT޵56k;&k&N| l[qq/9f3 s2}NWL}QL'x'߱.ۑq_.,pbˎXcUȲu!sYn$$a}|3KA`%*h:A,hOU 14 }" IH>BGL{&]'t?,fc6ug{KwavD}еI6:rןv.9n<5ޒR>iܶp[n9|ߟk뚯+kΡsƫ&kWSt܄ca.11D4U:mU}9h;ČN=6ri\26PW&m6LS|pF׫Ĉ~%H4z"]v9ؘ2>`BtQ|TH95\S;"eWrx+*9g.cyLupI߭id)tT)^J+!O265KzqH)Y'| ;y[=!@.蒄nqT=|0r\ZE2(PCQ ]}/՜_R %Q$46Z166BZi_;K}b!#QT$1&v9;|dlL?+EMn 4`&ikx !S&$, 1,>>yǥM7dܸDl9V_q M\<+ eU4Wj9&n\\wYJՇ1csd? %wc]Bu5 ~MõݥSU?㓄ew門1yL+g)aʮS|rD Ոؤ=a˴D Wj %4*2nVT^UJ8H{81̥S3kZF`ʡcۋ`9׷㇛5bf!g ¼ڮ W Q#!;RiOO&1R >C=_;.|Ԓ3>,M5A଼{e;&y]B,pO0 bXD_.wa֣kV~% @@ڍqtT> o>1j 1/|4qL!S8B5aJzl\Ɍ9ᘜAFyx'&ȅfH`9dVr.RtJ60̆_4 %T|2L=2'^{-uVa60s1kqpygNJIT_Y__1^.l::M/F )SCiS_ccЙ‹SJi$̌'*T衔,5wCr4/#Qws'&]|/B…Tǿ-t;[.m#jSp}bނٶJ)D#R.Ǭ5^xlȵz%oiBGĤ?$BυL>lG$EݥKI%]FJi>*Z% bҸCʎM99^ 'łoZҦʦVΉIêM̰*4P>o#Yu{xp,&gk,7Ým{=if8{$`C>ca! ;1R#1xs< 5CDǠY`j>w-M/kN+it~$+5^ݨ.,h}rek1 B#"ItI)aLbnLyP.HlK`f& 2dfƅKN[c6 Y)GQ|a&ctfmh 4wM3*ߛE헅w0{v~voF ;KCU6񐇛^{W>Üa۸[w^Z;$`{)"ƎjXZTBmG3Nk-fi_eVRsrzzV6Ȇu{&[O c t|خ֑_[Դi._an=R7rIR_=5`:@; 38dvo Qanm⺋lҬS.TJzp 1Cr;~6 $\w0O8yt)-谔3wXpyćm;qHs;l{o7}w@_8W\&oX: Efnl20%eo<b:0y-!dPwUi ,;KUf~QTö(lhev_QR>ZN瀫nf\zrAt90ZcfՀA fE*gj8z^e]$*=r>h8, 6*% %/2 ̓3vذ"gpm7˕+vSը]-DW5Ҫ]riEfe%$6 z gfaIsjrԍ1 lQ1zz K5v7̝bqգzf痱8rmd3uI)|"p:q[+!JLy߭b䣖nХ*N!b:M` WI[B ELJv~6Po$oS@&a.lFWe%t8>*J,!asoѥ?{BHje!Aᵸ+@_&%C``uHM*)s1QHYGZ[躐ɖA66~f?4qZq2K #dZm#Z!:9Ks3s HH0)39-笺y2^Ux'k=)Kj])a3cQ-`m" 6!0u9VZ3 bv{M#0`5\SLj-%?D~ذ8Lb  \}P]%3uzI!@]RQ)&ifэfj쯍mf$D JZu}?Dzj Giݠ0@qEاL~mG?+kȕʚ{e]~ۧ9fh%\tY:(v]ԕ5pi*$<6>HT~ú g98u˕|qEzY*v|awQs γA Jܱ;qyɻ0e#(t[C-lg3ŵSBܤ*mX:^գhY@b}ùҒWb̢:ڡ:썬^եUwjK1w-c]RčoJ1>d)O-lfWNC'rvs3#3s_upNH).W %MrQn MhTɅurizuV"byصJcX7ifEYT=O qb 2|`9Ahl8F!GiGY\+DLmlLspe ɠz60\$O: :X^SekșVQzdHMĔ `Zfdm%g7s6-a%`AΒ"5s\Oiyukک=jv'l&Dc3+6F @͍bMeb&V9A<2;;Ⱦ]TuTwySޖrN?gzWd4!DR['n=x8t}6'V يKigFRޤv_]<<{^rf{]S TB$0w忀-k\Bt ƣ7\Btu+E*lNԬJ)kw{Fvy*ٵ~G u"/p^-6yظYȻ>FHu}$^;9guaI>9fei%=9?d!K}N{'S5I5U:?2P d?THgVTH[37v^x2WT l/:03`Wh'J&.U*%\OCؕљkv;1ͣ,lZ-SPoPPΊ95dzB \UUu""1l7= -P|ʞlL.>um]xWTO#jf73k]7jb.XS^3HIBW8I?ߏ +dWlptG  *v=gVbV x{$|f"fCijHյO&Q#\puO!\, V@AE7ϩ8;y+PWr\Ӵ!IgٸVh!a6 '{wv^}{m]wG|?سDm!;xŻ﻾y{}ee,<6, [e8GM<џ?JZ ?lT|#ef(>lW<]W}W;a;;mG]vJ ّ!B"A5"h; B Es|y4߈vXo+O?/gʒ;X&1'+=D`KܮijSbb ƺ+||N5駺gzAH 0 f5D ު;:.T8 ffn?kiLߋƇ)`$){ ̅z&#BNd$@[h5~EBw#F@X#IY)C b)[t]HWdkPI Ts~jkު~ה_/YpCy.ۂ,Љ_*W p1p4}34]}o$fClPI䑄# y黉&!-T' qҟJ__u3y-$fDMPõ(u>| LT$.53fk`:6 =OE᧒H}ESɷ嶦y"r#A~ G*n.XE7~8):A u}/u qG>\ֵp!ʰJ ϢLc=l0QR|!TjnMVB >۝Njk)م;t>[{<]yilk0M{Ӿ0jƚuYƻñC". u$JUʼy:I>/zezZ>QrYL"tRPz-KO.7ßĂ7ېLmKX 3)㭶㪨ʴdَ~90̓ouD+UKzb;* [jNWux(9i ƙ*R^eSBh%.~1'0.8FOVafY1rq\O0RWy X)?s[[N ݽGDoOd谥ynVJ,R!F̕$TsWsl75Zxc,1 `_H7(mډ E; ~mpƨIgGhߓ)/dA.W!q/_oZg1b;ٕ*({܉ oВwG |8f3m59O) -Ohn6!wᛝu> ʃ9g=VT_lB*݄$i{% #l8RF/ d&i80;JP[̱t؏<#n5<_5WGֵ-|q8Za9n3{<^;PlbZ?'YiQ B mr22AO>J» e}2w{(Q44 Pmgi mE]TM=c: f{"dtEO|j)Nf.Xg@mRMBz`K l;:%MV@uEmx^x9D!VxYO̒H]_0Ճhy | !%bִ͒Lm`V@ Z@[{Е8/vF)&T^(cAp2Ѯ(v_2hVro*e󖲲٠%X46lCogk!}mv~Aÿ06dx\CPrL=_!!,EIQ:Bق#BPQnf!Vw}}}Pc3\e,$!༴(W ? mvYBLCE!nVM0§Zpn(ߔYתF^HSqcqȫRdv}ЃHgT 0dT[ /h*QD|DyDKxi0ퟍ39͡rͱ,7? pQ~Ou>w:^?=%\+5siii-7 QEE \-T\RQAAqM;539g y<ϙMWl~0ky2͌/&5@*T%Ï5V٦'Rz9XLpRr4N8z>G[8vza~smc sl3tg0wI B82n v#^^[3:޺J^%l"7*_9y_dk5{ >Г 8Ł9h\gik +[Ձi_ʬ2f|4W鉶\wfh'"X] @%9mST,BasA_H]|o5BB}WmBʶYI@mvysv!V '|<)DV;q>&R 4*SdmzQho{4HDR.(9 pavga?!px m,2z /nlk+51?,7Kh0o?2\Z w"]Iss2~.8Ng)D׎*"E=7v_ltjVy FJ'%y :C2u4Rr 9Yh6()>ff94O"-P}^F`rRg2:L^x8Vr3~&_VVp 5T^9Vfo->JII<A5Ю~#%!P~v(* U3RoWY.?a^FWEX׌Gޅ{NHi_U\䍒7 Fˢ/UɺIfdy8xZZwQq6V mo:beA =ajύz#1p :Xc ߽ Ps<o}Pl⮖89ӵ0_<ݍ퉊H{Tϝ*t$nUg"MVr/h^J('ͬ`!4!]([-sİ~v?|ve){c\GΦs m)&RoepG|ЈM03(yUɃ[Rύv\+٦h&'8#%"Zs8N? G2\o_K 8eo`XDR,yك,?r)t7MVUSXia-␝|(1*o2Oeq>>H/ 5_ۦ%q9D.@ouŽ$)Nhzi, Q qhJ.7ˍf/͒wg>&F#edzl\cnV;*!7TcWR uN&qEK%;6EYiG=[mE=M0uTi+Mp4y35u_1d-]NO*Jr=sn6mZݲe̚rIS+" JK (<); & Z̙ewOw!> Z,@CVĭd̃1 ( k<4 s OFLV<. i] 58լqfRog$|*:tUVot7k<7{cl' `__%% WLelliW)k>Kqa}VZJozeMnGˢQYET훦 /pBON7^IH?n̿唓_UayDΥ}~ZĠspsCHCc|8L*DϿ;TgW:P׌`ajW? LUDL06W.,)bڒP K7ZR_NIg5K\3:1XqHk xdo` 393gBms(o嶆ޢ{jNϻLhU%"?ֽf:[mձK ܌+Ӑ.e|1+}Ue~}*N ֋#)d)~Ps6>T¼;E&T)dc..K9Y<ʦ|.qivI-h9{ϿL%ٰ^MCvhSMZ+;u9UN_\7.%De^ 2垥!NO'|:wfi=dBkJj 6*`L[e"6Z`Q1j/l2AC ? nٙsW'}|>_iNXh7!My滨m119U|\Hǩ07W;9)սVٕvimWFL9X^Y?5@Gǭq1LyT(.q⫍!lSMTU[uZ mȫ}EGcT,uHRf9Oh+X` zSK v e|nPo_,L@G=>ٟ,׬7[^m:NW@SdXqGιhQTYu)|J{hׄe6rjp^cCn29yއFm~<}@G4H49)V0-H>t01ѭbULd'E,m~SѮ{GksAc1M|"fΎ7C>a(F/ȻԳ >51CJ,k`L䱲ܯ7yrϊ |Ưt׵#z44Xh9)rF$bq8M:'8f{ T:BKN:aV4uTdBvn- m %lbmr0lcVI}S'Bbd!&[i>?YLm/%WE/*VIi@dZz]!pb*hXaP⋍ް($Sp< ߛff0зWx IA -a$@mpN2^0hOVB4Lj6K[70\ F{w*:W&3sJR?j]&&[+nܓQ+=.\X#2)vipTuhSCXJ/;ߌ[aSC3u3|rq:`Z>I<Fh|jkﹺ,z?cd_4qfA^'j2 2qj͂`+9I$ܒ㡚ԃ~V&al<UN;㴢[m}E/SȂ}8[^~n,Ba!(xj.]y^?*|dh{6CEښ.,9h:jT<lv29iy-7A':va Ɖ熆v79>8B(8d(8T`mnjV=xGɎ5tpb(BvS<᦭0fkEհKηVwR.[vG8C0̋׾1.gtF>bo\̰PbyaKBml2tm"Lav;zw<Gĥ~YS̪o}fkGщBy_ف}kA`a'I6tHZC˯˯ ^vV ˆo?XvidWzXG]R/gxear䞲85v?tTd6؛QyZL3>P2e]qZ/>e2 nVD+-rʭ:*4 R|UXSyyVXS|3$>TtP"z W*c7dYZs4\8B\α%WsIsH{C/.ZT#`A$7vѓ?BF8 bޮPڈ(/HMeG˦@:lp:G_~$_mOZ,ؔ].NӒzMtS_'K[OԂ2=]kϯ/?uMgSe  fy,=b G~62{OUŅ"}dvܞ=ր{@5i^ &h"L>ed)!mCvQKK6DM" OCd{ 85;U[ys+>M=` =XC7%4LK^:]NxXNK*cPjBuNH'|B|!JٶzN{S"Z/-|dyCޘX9ZKr%9 KGiU$ke/=&:#`DqMy0B/ֳ.jGs̢Ueۤb\kv4("iEA |ҤG(kb|]Ue4x|OLLg/$$&1&>MqFV Rj>s+|z.'ȀPNS{ ⍳UMrSeU /GȻԖk+k_EK2kxvaJ` "J#㲴: Ahw)PpnHWLwJDDir%,_h wvFq:9SՒ2N|Ԋ(? Zyy79xB'v@A(޸8^_#Wl^$#rI~̫5I<%c꤫%lW Ì.ZRɌ(Oz@J+yo+F'MqdHM;mMP`3%( g/{;3="}<0HGy$Ţe^Xصr07eV.m,(;/u|@+53` ļ i(VasyXO|6B Crqq$v%$j-Ԓ؋R4A " Y,^J;(m}2gz_yqޞ9srR"@jp0 I`G}I#Yv4I;uħvPڄK`K(*5aFOh$8:D!4 L2<}OXȗݔ7=T1xyџhR0e >V eG ^A4="ќ4ȊBdCz1tt(q9}ei915uu'Z~sYR-UR!-2 \p ==!JₙPQO7K洢/Ƴ]{.pNslo{@Z4kRBSy) $PɀB|}`Hd9 DXL}n*aemtϗ#ªoXoMʢ7IE;MII n"2(/oCF}LJA8-hUSLd;NђբQtГ3U!%FC"H`"? "D#/||? i 6# Z r<rRlY]QfѾ㽟\Γ6o#ѶFo[`JM2p T7BH髯%ڻľ!|:S<7X4pWfV;Ȟ{c]U,za('-[J7vZ;[||_9O\'[ʵ9sa-.٩ahzf{i;IZ误#*$SUJ7i=uwOd{Zt~2cxST]]M\yЪ0Dw7ʨ>҂:|zbIh!B1 Nj?[[74^Uain3YHuuPPK e'- 9TQjGMAUκoUzsY߶6?{ΡvԌ֭ k Jɇ $%hӍ2-{iМ6bq.6'ֆÝ;ޯ_ݛΏW}SpԦ*e!?y<.>ƅ<1V]F7 \l[:.6 ߟZMvmOMSOݨ+ ]D`-ytvս:t^\ {^ٝ`BS+I5ϾNoδmP[f =m).37}jϲx%del7C"U@cϯ\l|8X`$aJnsNt#r0ȅI;wDn>1SV=05c_':V9} ڙE9;I|V&< %97b@Ɇc©[rԮrvd519 xWASP8 Ym%"9t3ʷ:td .P&['bazoxز\緪a2!W¢-wsq!Ի޺yߡuLe`D'_8Z'j?9cS1t &8j Lڮ$Va7gɦSu2xpK~)a2~cކO,L 4r/ R%E/35O?pZ>رlxn٪o{[IL[zVp ޜ}abJ.ڛ:wTnjN~^8f{U-uDkPSƑsx-NF!.EڒG+,ݟ ~؜:ave6؝(C >4;Tz;C .`/S]An!K+.0G քeA-=ৌs2vƻ-y9Y'A\]*t%7aO6'Q_^zDuNEKlys:0!m+'ap1ەur0%R ?+ҊHQZ`f _=Z!S\OMi:US55S:SSe:v]\Yd߉ fBv 6B@HFL}ӽu?uzdMl=WPcdLN" FLB;O{%P`r? c/_u0~Uլ;8 9O kK,ٹ|w55րoqN| pYPX}/65|*L,7&QfN_tr iȓΛ!mBE8HLyuŌԜԏr#KzRGoɍbg nf` & ΅](L̮8BV_5pA"J~-n\{M*Ds+hmFDx }4^w5h-;l>3&)F~E]5IF'~Y bSR~Nk p8O!;oCP ޞ2;2` "<_Fם삳yLR/&%OiA"$uiZ;Oyz-~eG"̚#Q$Ձҙ4،U q\ٗ'7h &&Lԧ H}Hx`jª[1=u_{REĜ{J 9k-QzMϏG=גj׸ڼer[̚%;0a-.i 7fM7v[a[$.MW|AI+;i%k(}==SʄO iȤ ͠0j`}N]"޷HO%&ڙe|hLl:P"3W"G%(f;6 dD4Kx~@l)^>6~lAN:eJ~4 l0 m߅QE YOvbkN^a7ьv_KjyϢӨ$j"L愅ܐw XwKe(XCE;ݿr~~OfiE;y"z]{7,j6FjոޓwiYs03&8fTż_䃟D&[rr6 vh&vk|8 ߨ싧2vwΑvM/ \ Y_,Ǟd=TDMμ#Ο ܟZJϥٶs8y-NWJ;/;~=YzJ1V&# fdG'){/l|TGn( )+R;rWhU :J3VKb8Z&IwAXBǿ"*:Pкj.Hh[#"TD|CП3fpTt^1<{MaGְTM89D|sVpږvֳ1 vH5|7yAm'6. :m%7*Փ#ug˄K rʦvFo4_% ɯEKjO{ZqȦpwJZ8f6#vZ+Ě-9&𮗷Y@LmQZ ʹ3QS1u>URp=U{7 yxCaK>R%̍::G,op 6mO]!N.5 at!efw~x+l|&ޖK[AVyjm{I+u.<(x}=})c{xwQ%*f_j{yi񥄆Oq=Qzjj&tW:==I`wDI$((*51[ &hQ}դjy/{Q}_\F Y^igwX}Q+%WaOWy'K]y1-jza]ZSB k)=֯&6HP$uRq]i_zrڽrB[~TѪ36*e|kA:BoJAۭTtuhMx5\KDצlfDh-R J%66E lb_$i^% v3Kl4J"NOPCAĔkpTвh'DSWV*j=G^Ч'$WDT&3g/v?( X]ţn%I-|yZ |<:Q]#$귁Gz՞efIvkWP{C램 dX?B RGnx?ؚ }x+AMwQ ի`r]xTm5t^\StpO܈ m!< gOf[jNO% :VQ@y! -#>w VʝՒ>O4չF.9Cf/\qI=YC&Zo\W 6ĕ'i;6r*UrO@£a?7ɥ>Y_=P7R/x5-%nKF۝B;ݏo"kCOk3?c>+ pϼkvŶquzb_< .?gį{W!5('U@{7pOC[z[GF 5xs8laCp5ɖ&" >g!rbey%*^ZcT~w.2r )6FxAl6?e7›_!JkQaZ{CCeWAfEr` e.޾_Ik8ߠT9!~z: d-#+! 9Jqv8(>[W[;a-šJ?KI-cq.9\O h_fxĤY WtL[I=! zVp 瘨k!Vcu[ \Z8qO̒_쳨gm>MZ6K2a~H?r1ۈ$fC=۠~Pq["jZ"\ $F\)}H<7jLQDG(p`5E@o jeu\-WO f>1e'#;* -tiNq33-eViYM+" ,*ff""(*.ʢ(nuuz_=Wugeб1Td %&1Et|Ctv[IIZ  iȐsmDdh,w=#_LҮA[r9;"G'8xL,r"J,1F)-p,2R :z,d%",¿q'lEo*kνah-k +'N%|UDLZ2m mpqƩ=5eu#-z !A=7uf_]0G,W<3 nY0mGDoLpOhy9t}k$w.tXn99go 6v^ei WOSU)-1wWsA^-{pE c^m Uᒎ5LgւoN)o꩎A| hj/ TgKi917dDoFPn1QkK 8^`t +Ym z2!FD. kMmzhR0W9AiC+晤# GQ3~wivkDd|c rU^}=@E~3`>j5uΒQ>pxkuRaYzm },, mg,̡^wWŮe$>DFPt!Fphͻ&0CqVe}媈dWz5أyZ wLEiiaWdC:1xKؕA@nӓ/Q$li^~S,ٖR:KȪZrnW{m ]dX[U x@]gIi9goni-ԛw{ z R)&,x$icެ _Lw[ ~ALU*Xƒ?%gE^i*zS Ys~Eه œcc&Rbtُ}z6$T5C-Tr7 ¼&l5] ٖOXs_q;~LQ.(~oKv)%$xe1P4?=%Vj~><Dƞkz6eWŬԧ0SE)ږltW[_ KRүqa}_b5xɹKZE;c} &뻅Y5`W_Fg0|}5R9 . fC]S*Q_+?*/QX Pg&^㱉byJzyPGhk_Q:t{*e=-y1ţ+Br>]ҝEyF/$ 0uC4Y{:rҩ#z'kܦ뜆f:5/WltKvMv>:Xd8P1mbBs&í$SDQ;r5=oS(rk]5)ףdȷ?\eWϑ+5Ԫ+C/2QE,[5wbKu#o':rǿ d \ۀGfJ,*˫K 06اf#&h5e۫笍5r '̱+İ?K1YWvIT:@YmOn٤8nz|f&k?Ա[ޯ뢾eUvU"j? 꺘MXwuw_ei*P#.$╓Ϭ=3+8j͸ 4<:\x6Rw*< )w$YF͉[zl:O-\rT@՘\duׅ{ޝ>!b=rB ?X|j͜$I*M4g4hGB&K[)1xGZy#ėjC77?1a~5}KI*V^m೽=ieː*b;'%0 S}K,L~'AtsQTye}W+taR#y7=!Am~5?ӊ<]SkSu!<=Ǫ9 蠶9JX2;TK |ʁ.6pg\Ʊugc62s1s|}ڿ襗auI; . | ]so)}ud/~%leaV_xf(Gf!7j(vƥMfP[l/u"TPKdI82JY)T9<1s(a«hxMrzeHK59u>}$:?y"[f 1/5C z ˨:*+}ll+-ζC<bb"&j]@(ګ]dE<6`##-cm@"<3Q kn_;^:093Tͭ>b>UU;yb"Vjk*WMI O=ql w׹)Βop  Hk˽x [ 4M -@t0^qZkC:im!u=iYARq @vh&>߯9`yo >uu}%'+JY\P!a#5`&\vSp9 A21&ᛓaDϣZ#<,AξkzSjn7 J<3،ibᗻSh虙M~gavxCZ2" (M.U23 /+)rGd ?_ffm*?p]Y:.]~dTb4D]=:F95 #nZ@M.q R{SQwɅԭUfI(Ma q`PzI&vbfǶyQrjZݧ /YSUOݯUٿ#_ M n9ijA%AqZAe\d5uZḛqw읎E#! {lГ)L%1? ^7k(Y Nt蘖 YpPe :ۣ`5,*S{":u7jPC6i( dƱ{: hR0I{G@*ȅG#얌T;+ ߝD?q/b<+}9h>,CQ{#LdPZn끒UrZL#8s jf1=}CeqC%-s镐vֱﶆ~r" A% Y!hoyU]M21H ,ߑuRF=|ٓuX/|:^;ېox.hsL6 0+Cr)OoξSP}Kʷ Iy`iy&n4~x^!>Udþi_o98w@*=xK- :Zmxtj64-`Ҙ;SU@J75Wp?='k1,N!ΡT$?>\ymo bf.`M6>B)ș yUkg ՊhEX /kǡXHAec`ڦco'[lYzxS, (Vh8'I}E[;̽HpaN&.vTR}J>q{pR.nߢ6IuQ41kP|[Лy9axYzۧQw,tH]T1~/U)!؝\#ECf R26L_%ǁoM7S\^_ii3gwg731'͔&1M3q,1VQH&6@hAAD@,i3ٝ?e^ߛ{y>RhyL萑CZ$M~OiH'vR`ۯ<\2{4ߜ_`yUtGA1Dл!Fv/:&ХUa}4 te᪥R4z1A~mW{ n1#IQ(vkۧi 2H]WQMqZPI-2W.1- 0Ij|KR2L.r3G tk+̷g{rZֆ}uJm4̯&OC||M<+B5I܈C R }2&̽#>a^ q. 9#pWC\GXh- Jo5+z 5tGE.i䈡}f芚hA}οތQ >-!34 > ,3oί!m ? jōi^!QFʺ<|{YI}Sߞs`3I+UmЗ\tx],x- ؠӻEGڔ1Vɽ^l3x&lS-R;]si^us9FĥnaR1T6uG@x4 N3eԪ@ >E,y}gk%]"m<‘;2FOr.jV럍⋯OoV:l2vg `)OnUcy"E6M30':yRK"&pĵj=XJt[`N5dK(U3ǀ-'!}:?1}VF==kF<k;ņ1\U@݊?7约p;cuձKN푶[鏮~#rIy{3ԭO8Ѯs;\} e^-7#|A[3<^S@2vSor2 'f;_.q*Z 3aS;@Ð;ʻZ(f,55FȺmK1տcr.Y{9v"z|q@ۗսp&TԩzBh31 CVg{TlU<2^tGN.4iy3FͲb$ڮks_~.v-lo`d]yV6}C%ppoē5(&hiN%4eGN>X@u7Zt&ZU8q>5./{`7ɖ"!n^VO"dL3?SzeWsNq>:&eIbJ056O--0KK* 3OCuíj," ~$krO8^$UZcGǎi,xgRfƉ;%Y WU=nC(Z|ƣa|A %gk )->φ)X;ڬjS;ٯ!J~LQ*s"6V=P˜Ϲk޺'Bx2+RrJn RuA*:眤|PŚf{ .XK-6풨e@!ZZ=}be³JoEX= * :ҏ7Kw6$Q6,iZӃ9b_zcWt6T;QUR\l`>o(w[/$0zu#aӧSk?b1ϹcgImW} A5h)`g >Ybд"\ӌ S/: p0)vi]}%#FNsʱ>gs/IzĤF z>oAmHgeȵN5Cٔ?gѪw'orlᮢPB̼!cW;jOMT|DGY[Z8Ԑ=ODCҳp!m3P^j|n]"ŽNR8p δ&)/ᎁn` *Y+,{LfM32N1ƉI&c2FQ1*Tl(R"N06l (MDDEl(UPdrv!w{s~NVe*pV]ᐝf-ɜMd}.du-ow&AHXlɏD饇zfX8;;bl髊U@rAuJQR)ff7[(0W][^m_AǧuHuB;}PVCDR~m^zk2bv-K+^|AR?]cxb,Z|7ki~5@/l"z`1XW'U$h"X"n6M>uSCH/[y9V z5Qw˯T{*_"ψa/ k]RdOFtM 2K)̼?| x%1ieqkcNu*y.[уtU1S'ŀ-Љ$S_^5=\w@u"GՌrO Q{b[ (#13L~c2,]ŖYZU^`-*b,⨝3$ xV/¡x榯-mAūg!MS}H-n6()rAr2n 7 ΋KiEbMkՊ(yrWIpL7d\JFѮR9LS*cīΊ㵎 |SI+tXH%ZR7]N?^j>YlD1B*vB|7ƚ.%cz3NJ }׋M>;A\Pj'♡\QaA5 PF/ΙK__ےWj9wX()9¿lqIJXNˍd`>-i2@r+%;' u?}T2kѮQ7ÄzU9RoQ0jA "QX7"3ɮJ ~]#1w#leO}4tnݡy->XC}&YXxSOݙe48![nɋD<6T?º)Ljo\SĐw.$Χ.y2OVOkipG;65sObI(l<ҳj*FgUb@<0TG2dimҗp//}*J6>vku֑QAh[r#˫py%a޺>MT:VZ"GD8Eق,Y5+gj t "&tn >|qR֑O|o%;Y!;M{q4(,dMI3Iy Vh*B/ taֆq^8ЕO0 BL[_ml/!I*YުYiE 1M%qoeie1?66l?[Z]HV[Aj~"rOQ !.# | 591@K[Q{Zjn*_ݚk`@z4gW ѿD?gwIKp +ЫGyAZAW睊p1Rfh+~g5 kd@FZ[\Cnȫ"|s,1prb{3A:i{|mЎӳ'y:q*^l*S>ܻVT?ݓ )y MEyk6, ޥuQ-чmya=O'6ơ/5zJ@Ǯ c3j:xߏU)zMTcAZ8H|Ex}A΂pWF9,)Z 3']Vh|CT=;`{>q}t R"陵s ^ rQ^~hM%; JSNyojލ˼&cbML cZ u@%;|G4ڭ:w$9T+{9UT&HFޝjyUĬ3#HWٟɐ96ΣWN fGw`>c#f97M;=S!϶^͈rruiY䥏89q{D]"4ޱ~b]Tmp0Kf.cK85> pԄ?x^~4߈Z~eh#Zw!b}?iȺ - 0?#uEiR'ɺ iI֗dO;J\zV 4(;'תP|䧎WGY?<2w-ݦ%5ef &]]D_X>925j eaUrIg]$;[bc!c .*qIg& Pt8Ǯ902.%)'Q^n(L?b+Rnkҭ% YJv=%f;7foɆ~>耝Zy '>BA&wj,x҉8ظ̣9jϕ&2ΩXq羪&eu6#p oM4nd^!eF^T2JBV?"[ˣ/ Ak.W%'^Ƃ C@~Sq2ۄVRM%cך Au95j^(bᬠ(@AMRozȉ}Ƃq_KGȭthZhEٻ1fWjHH, "HvV?B'; 2vkq)ne}g!mo}h)&5-u~U.t"䤄_ WUzoQ| YBm/&:^ m~F{MѵaC?9Cc ]1\"uo̍ |CB|BQ2~oK&<47Ƙ@1G<>~G-vIܚVzT}y~[ш9Q8r4/Dl$H'- C-1cdQYi6ʩd$9ůRI1&pk4Fξ_q$`,@[s8Iڍ|ujf~kjY>3uD>pTsԋߎv c$n)8jb]rk( "$9/m7CucuD*9Yptg8v6݁mfF!vHH(RRqFR9%r$Hiðϗ:- 4~:< ⽩419 h?b{I(s/aqz&2peyu4&j}$ D[ fEu}<^m-s|x m*}`X!'ӊQd5{1&%Oz0w߸UUY1N ymg(pw\t f[Di쩤{bR`Rl(z ۏK0å1a#Y=eKM!K-yIDWW$slC^|[Zފ˪jaApFD%Dte_41uG|ce϶)w$@=%)+`$KM/I@Ki+;w|_ɏ%u9XT9NeE2l>YuܻyBSHiqaˤ]Um2{$^X:.Z?_3#5x1fή N>?v2T3rw59NQY' @zk*%DŽo#H<*: ,6I̔h[_Yc&fik#ieQ3r=:>ޫ'3s]evhn-̮8i!wi ϋa}im"Ky?n!Y-#``TBWT"b\S`~lYVTmBϪ4G/䖳>~wQ5G{qI!kjwĭ3vff!MfWoČ="|raT 13fJnuS8-=7ޙc2\mhddW$UAmyjmSJWrމ˿hZH{A;:&|u ]PPiC,qg݈x(XvxW=Qz&~p w yN/DE-_!~izv?Zmzy1>5lzoݛ@6<#lZZ1@ҋ;kWvmpw!>fK? ,̱K8q9>eu[Tz79֎tMm=-xw1q :Ͽhn9uSrvte*us +ݨ'~l @09U5!מC+6a^O1˭JQ 0ʬ~%<NMskKOPM;PrCʺ ܨܭbm)!=ǃ ;bW#&- OàX"77Yv{*2@))OM+; ̎>E M#i<֢,(Hσz>g6Y@)A3*>rЫ:I]쁉oL } 2*J?eƕyJ&3$vM⌗ q9v<cl%@B BZ[n-Avц$$V`BgvV݇s=+P" kp/%}[YM>߮ˆ5K,Vn}aj>sv9#@-D(][w0;q|~hu7;85;@9f`\,`0a<:rBrVk/rRj>H%/X=f`PPV~%/JZf?ߓKom=ǖI7k^l95'! ˹uz / |~س8ܐoM=e͐d".a]%E(]i#8? ̻% INnǍӀs*{~-aE ەC>RUB,$$1`=&Nیhg.bO~7<7%;e#}krx[&+e?EԒkm+=Ы L}z$g3UFX%잒uGy" {kqۺ!TQy{7U@;@EBҊ1c0&53@mDb, r^zsjQ%PF,8偑[Faq!PvHpQQZ`Th y/8ތV[ x2ʨh$.|5 SVs,0=)kfuo}L!gQF7CIz8gEutf*5c.L5ڃE6 Ux/5CkAWkh=4N䷁yPLJ̽% ╼=vhE=lF]%ti+nDzZhMљf̪l`_sOؖX֧e>qɗ15\ @_;LHڋNDկ`^YؾUVBĂ;DkKZd q9!No;63Snq铐>viXR?Fԫ}032..'AD%$9|;yY P_v&!tdg2~9Zu\ >= eI">stream HщR44m̤$NL9츇=]۱cL1`00C7ݕҮV] !)L3L/_xdUzգZٴ 6mc^21nnP*Kr~`U36RdV#fQM>AJ련UըkJI-&+C@$9sk˰qܷ Xt| 2SZz&>W$s\='eS$JRfW"K⒖MTpqjvB(4G9. ݬ@l-fwQ@B4bv{ &=OqDN &%y9-Xp%7e⤢%9PwR?o$ݔ:$D͑Yx7 !YZZ?R\+n/x%LW 4g ab7Y$]գ%'1<h2ٟdv$ SʙZX3Z lj>bI?gv-zz0a&k/a |0ca3>d>]A}ܫv.bUOғvGkTP!༠Kd@zƿ@z oz JSI D4З@q̺l`}M r7 [|0IoP25L'ND-emPV=*^T FZ8w}|ZV#?z2V ĺD9&zQEDvMNIo= /BKy:n4~-U4R ˚E؋|{5$K{ O#˥'h1 җ$,Q >!sTlLi̬EzRJ­gsYo'-cnDO'qoX E6{qS`yn3~B?;UYebE>W jʼ.ÁÂ\oB%fv@va+QfY1j'l:;VL/kn8pxĎzU D1nJSZ7@{TUZ 1(L3H:A҉W<88)ɕqv%ىƣ5Kt?+ \1*S0fT$AU.8Oeh.7kĀSш jC%Qߑ͠neOՒ;AauAYTܤFL}MDl~z}P?.[|Do gZg>Pٯx!6LG^a&XIX,K EE-]JP9Xlrݗ鴅i |<_7ۿyKQndz|X65:0Y.*r_3>oć;$:]\؃Fp|ܡ2 Kܗͷq1 j'fd_e mF2;_tD5/^߄Ҝ xۥ `AY2fWkOWF8-8(=fI=9m+YV Ľٸ6tfj#^] g/4S \:;G{8{y=sgtM^YbHIMy ѼX - ! #PFnr1gv蔼ܭ_Ҹ-R">+R&ƒ^WK7ü %LGHJl6Wj7!AH+7\IѭWS}¯qj7_\ey_V9Ceހ/1ĉeFb%QRTR,JfXf1sszGϫ}Nj(޳[3Ӝl@9nTot⟲AޭX1o 5z'DtYbMpFcwq5$(Up9B(5WI, ƩWCܥNƫM aɠժUy#CRJQ|]*zΘt/!iT2 *MUB]5v~5Ƅ=1>q\yvݛf'roXHL ?3Jr;oJK|8f*FĬzC.LI$>)ej2.fD .{˶}yd`tE)NX+ȶnjPť`Lڤ ,Y" ("߷l\(`$'k ',kҝxT{C- I0X6QnZYg)Cd6 5n(cusvG)9[0[q|ZUZŋq]T{Eh-o==0Q엜Eh HKd@ P*XrSt3r8ƪ_f>^-mבӵZ6Fߓ W2x=(HKC),BT^&)<RV\LE٦-нol`{&1,ʹoCwJ=X%e~  TM .@Q@y)c <Ƿ[ȵ}֑{jMF>wH|kc뫫W9sT*R Qlu k֠[ ,(Ujkō YUEHw}o3ѵcUY-z36I e,o}M#4$ J/Ire})#܉OֺLNÁN[i3-yNש;֐E3c)"(} E'փ^) Z@l4vұ M;u@k>m[iŴr<.WHel`;k\L` @ad-ptR.k[Zv{T6b-hỒhm(6g9[|[ֲ A%)QZΜAs$J~Op?CuԁatgN{:V\ e !-P % }Ynron}_HEBE?|qЋʖ 陈;Șq*6g G_g8.b[zeM]sXY REFk&J⨅4:ɪ^ 0 zs-t2b%RIBdAGU?BO_^K{z C;.?B. Cf$Oٺ ډzgBHCQpfr0;VjZlD?:|S l/W6O vh/,r)Nz=@kJ>ʴчYtȷ$7:%O7x;58c3 J:z#ώTd^[+!,_cTnx_I/pi:C{e3HR}8|yZԹE%⾍=d@`tRU55elbhrrxIQd?Q+w#$ fphN:m"I4L56᳼_XЛґw|*<+ (~)T$By*Caz]1vY^uXį9r/>H2F]('&@p-Ōݴdw>Kp;1Jg ]{3Ǟ I#2qi+[jhMud2E=&J1Q~A|_T/3޽PaÐd^/ wHqcḇE>Cg &"7f.˔Y +["2p=$!CtĊRu 0<q:Ӓ]FʓF:ہ{j!ı28XɯmB/a.'`mJbPʪ*u|atTyզt"aG|-v\G%rTC9pသ՜P)a[S 5ɰzjbʌ*l\yjgFEiL3Q|k4pX+NI ;+aTA&e |sT@H *Z]Lzcק;<܅S@Y::Iwr%9/m,䤑{AQ-֐tԆlqÂZI!EokI&ĥ{oXIK%œn)q `@M ,ዎdPL'\YȬp~p;_+ r a ηLz6s I8Q}_KLox+Dқ\RX#4z.b{m\r⋈YL;s~MʳC2;'-< %7(56垘= K؂ 8~#󓛤A:$"'kaSl[S: +EX< ʉǫ,zek}[3:\}>t+J} E:2ap  r\G,ٟG8AOv[Ha|G_c瀞ј6;ڈ ~8Q_XIOrbλTHQE۴ K )nPOW)KY=q3ae^NUg㮈yE+8wuGm3̱@I{ғߩЍC 1B[ nuqzdY\'|d2Z !e{.w@Q2s %1Zi㰝kM nn-D_`f YDO7$z][L&$.4bv DQF>0Q@T~oz3՜/?W7WhoaV16tuEPkޗ6S*j3EMI0u`8̩&H&gTp~l4gj1Y+@#w~n63԰,%#Bݔp78l(׼6'ȥmN\mC^,վKC=pnQj4EM-QO}N_ͬjV́rsz|~4Çe 9Q0 jp.PFnqPo+Z|?YgGN"#:CK=ذ43.FQtA.çL>%@B{7GB eZeL&f!sb;ے6Ʉ\Yy')_exNδ^&hB D[;^7^l o?bU&np^ػg|U'eb!Iw yMl345(C5D#J?3;P.B 0m)B4psxG<">@+)PeStO@7d'#`‡[y"4I0ɦl ʎ *vw ͡#oҊQgu8 Fq w>zy~q*Fcf ,#19x-"kެ.P'KBOd8&{!}.תP?wꪰ'? RVo4-LRUБ+e=*c_(ꊮU4J]!D64QEHO>E a )gyI%D?2AiM؃qJGkM@g*js#k38Qr$R!H sUFFbsU̶Ѧ1z1wFif#vJ\~G rQB 5aw>C=@ 1޷KIdz3Q#tp8FF>;|~#NI jF/wMh ;V;CK".6:ӜNơl]gy<|iuC5ZKHtvrϗ+3w\7mcx%ycSn.Ԭ%q a8˵Q,br\W;d75w.F\. C.$!߶r+KGI!;0m_!h9v9I_ȯAk!Su cr0Ur|U7Wq b(dz=|=~`WK8bUJ˲L Ps1J𾲎*;3l8[$ ?Пmxg[ؖymBZ(%VKu&&C5P>k# &^m4ͷU*oc^COS}UJnlc0,"@pj OYrf~T101qGz]2Y@-2IU3Dd4!}V lz䁐PR3^;#X$Oݓޑv:E8ɆA9.Ӷ54s\ՔآeKj#*"lef +"[7{9y~w?$넄(95v.%쌡]zO+,uTַ׻1Q|{q崷݈y&P*qJ()9ԋ]~f#$^,5S |t0݆ߑJmt8> T=W2BnՁ`uicYXo7j[`wܰӵ17q BxHmwĕ],==O;eD W%!y2~6+-pPW+{!`?5ցNB#.^`J>U6Q̛H9QtҌ8bҽw_ l#蔽Tܑ Y1v^<9Tsnh(h( cWQTC꯳|H'LCI }]vO郍k~CmC8?)SCSKN,zzc3FLܞfO7C9jWCxUiA);h30 dHHW܀rƛh98̫`T u:Nɹ7=ЋUV*!NA;ҿm?l|K{k4-v+1\'!*!t|7Ֆ5[ceW1#UxXh<\clT p!MݟH0uXVfqΉ @@e@|?5=h5tmy< ZDx  q(е/St𑚏ZV7}ȿ Ⱦ6DJN ?RfdJܠ.薹-?ӌYdf'頋e1c31<[N~@=qKq@Ά蹞YVKBJvMb- {{ܟNuwYvpoG Vp[=c{mB;0fց 6r)nE(*h4s |SՄL-#4Jw%zcٱND/%$EFuKrOŸ_%&\ZEW6XEbc>>7inRTQ!6?D9->Crz!΍ʳej,>{(':>!(E6.[ɯ؛$; -OO\G(T'|}i2~*7ɺᕑ^y԰:V^̯;04/dZcmފT`9&:W"vq3,Yc̀ .sgk<@/-3`\ taQ,E&qj徺}eSU/;Ac#xM,ZZ;|&>}W݄]jsZJ{R}SDC;ZWM86!dBK*8W퍓<2Rځgky󫮹+B}[I h%'j3^20 %чy7N[۽πJ~&~;jv4}'{Yٚ.).`"| h(GT2t(+hrsv4s0tW4k_]rRCZ91~GrxOJ 'K,K ;N|P1hBTQ PcaJ%~&kW,>[1!QjQ jFϦFX5P` v9N9)ͭ>]yǴLЋ_)[צn\m*bTc^}FC߳cCVW#;7".7T&f!1(VտwۻCf>%g#k^Ί2n+). Y$_R ~eWfЇ!A NPM7m/fkE.?.bMiѢtٕnUz̶ّȿ=Q :B:>i52Vtue6XYIKk8uzd: KVP`Ev!):yZjqC=Pu1 ƒncPEܱsC;TsJXm7ZF6 W"9md e .p$#G,䉆tv8RG*.h~ˉe èq|WJ؉c8`2K,SU>* < 舐p-v@\ H )!1<5"C> !e7ڳB++ium6֧!|2c}v5z7$cŠaG܃4OQ?:a2RkeDY'oj/|ziZf|ךl_&L]~p۷DW&moR?8^92Uqõ|oefvz5CN[F> ~q/%"*4b4%* @{U&*7]C[.(j4Tʰ>0KUrFP}!ku4ђkNXRLC~_qQ_x2RU`JN4q|Ey~wCC[E3|RJWmRb^蓐_ֱ8u&6 `y _iI? x֐yt ;F7 ڕ}l`՝ tfXFljX&A>e'toV~|6nj:Y+>[[^}_ls_C+'f.ףV;V;KJȻOFZGLnt9DmD\w7^p~5@c6/AeF]? (e_?e&O3'b`]՞UZ8cϝQ}UxB8A:)ahyPpUc< Q]fg΅Χ9Bj4,ỴZi_$dʎ=hХ9!vO1u-Bls_Fy(n[EWš dV@H90"Rs\֐vٴ &#BeJ.['6l%=d4|g\2.J}_j2OeTtynS3soTSwfLml6Q\sYE}=̥QӲDEDTVAIvH[r {>Z X! o u+0񰥮?{!2k a]syt_J(paaEAYv/7ԧXFR,cS2R|?ԟv9u4mMZjULCO5﫚,B3 oO0OKlU&2D(ticUM#|rVšA[Uȹ6"|dbzLj5Pl>#aSq}9"asFa]-D |vi`o\T uJn!&) ? Ƴ^Z&G &+iFߘ'oydǶN!SGV7fb, 5і4 i_4fJyejZOΞ h:Fm[=}3yx%1*bj)!$"䆕--0ga^ FPA-Nv|r &¦_ sN:1}$F Au/Y뇞]Ng)'cж8tȅxWU:Hw 0~)&-%|tAC6@uI;ꜳjynIuc}wY.Y*l)L$3D:xȽVx !:%t<":^~+ENdg$|happONBUݷ4[D_ٛT)>ykeLWr|qegy'l3`n PI259u䂀H"]?:~ُ>ftQrjj1g_oxτ&w ) VTBnģW*wI0Ratd'+'~ ,6dؕP8*t}VbKF{bQZiڈ ĀVⲠ][{/G-LdhahZk o*xgZ(ªzRTkҜ'TV_[Edz{crN=X%/6[ӤnD~z`א:rkoĨT*fo<#.nO7{B=%l".kw'QzXPs "K=r/QY_<'X)z>v]>~%mʱCL&D9QL''Hq=1!->Ԇ)mqA>mf&<%w侓-*Hܞ%QAvcP4dDPzY5Ha]*#geXآ*8fz 먏@MQx:!FBkLQrL{δC<ېV8G Wxaye<7}ݵ٣Q Ϟ:˵oL=PV&#@M1=WP-9M7BZ6iQc&!!x: [}}˴fSOqüZ2! *yF[`\c*2 3;94RI+#Z~᭔ @\dA-Gulgy[]"U˰|* &2!GqPY WUM*!5GԄƔ91/~-Ҁ_1rd9Si!yS; [\r܈o:2qN&&e$wU{ 2$olLib;'6Ωg_3/Ir#oH'_$ ʑG r0'?e)e5`WB'-E4`%xWҾUaW;7:.fOɄ>=iX$–x"oBƽyur`!N"Q'el<ډK$h1 :5- {eG.36!+kX'[ZJȝ -ٯ_/KjIퟷ'E $F;eγy͡@ڐn(M,Ny)0#MsNLMȶYM?+3ȪU,#d;q}qz.rzΙ>=Ig1tV3]エ P)؉&$3M4Fʾ "ZP,t9og_ewN}>sP SV M_-ƒV:`S~;椲1eUS2h׏01[تRe 4[:pVivAJ;aHmQ`.!m{y +Z 4_~z>,Xՠob!$BqE-.Ic&r֜mc_v b\p[|KPlRZ֡dmrjڤxhM WJy%Y(%Df7?NzOMypTWVVr69`gtЋ7R i#ҕ =Ep }r"DCۙy/mV)ew#r1MltBOQtE]1ẢG-gQ+ dq;: gp,, qB u [z+fF·As1)f'?-C@՘z x;\5eG)jjQ2f1IgѥO6`Gm vtfi+8_7dafkdRlQSYVCЅD}9 %gKCCB fw2T_(bRp/9`fguzVSeIwU J.+cw\CU#ܚ}V¨M%Z{}}!fddҚf4i2NfShz94?p- 8jwWG\ $(GՎZ)i`]1šqר> )O&Y%g{I3ᗘbr~H!?R?)>!u¨3$wX j$D)#^D4*);zyGϾnblu3mZBoU1gEzbܚ+^u=<~*%g ڥ:4*zJMJJ|7'LPc WFAkɣ*=3ʕ4j6%OtH?\,$'S߄ZS[z2VZAnaGb. ȇ~X\R`]3_ /ד"ޚN^vHL\Jw;USH-/+IyXׄEރUvOp5+|7ϚD NkNϼݚeޘ^VL/#_ ~WI+kC:%>1m}7{"~x_V_>!C/L 4)ѐMm%eJZ`Uh*+,\|ଃz*$ep=&,޸INJ9;οU֕w`^'ވXMyMeE)p26 Sd% a.a_\Ǯٜ1 "ƯrͧM8a5p;|%W |{>1?PSpG2wjOaDLJa-SWݧFQܖ^ڵ8+3Aoαk$.pCRDGu*J`ZM}PY3IDH;TªV3 :7&T٠֒CMе̼C m60ӌ)>iygn~`UcVƝBS.m@oJ^ 쑮ҊSJCIKjwǦYQxluK=9<㯶7[V.㖳֎Z3!9$&\\0^IH wBB@9:Ipcw]]}|'G䊨>x6N8ٕjxY#V-'nsZӁrod'7gzlڂ3EG-A:/5F0kw]!Fra@6B]BSEs2vzloy %BhdG.{0gOE"ܖ}3ʶOcw!% 2>sÜ}#t~sx~Ve_{|㛏QLGx(anVAeVQ?2O4y7{=&}CAIv~Bix.Z.0賭11$l9)Y6|BLd؇ XZ^k >f}3#P_OYd#ꅽF5uB>̣[Q%zUώ+?VXGuO[8 o q^PQ1g:9w|qk;fqYAJL2MAI@IxhŰZwfy{3AWUIvty3Y3ΣV vN3ZQ0J[6 p;Ks;tk~m o0>cgզ[tP`ȪTP'fAĽ{*p>rؽ%eaT%}>Sw: d${T?;ZAv1SfUz&k 0xlAD1[XK*|_;mYY' )IܝskESA[]> 50]9fA})*V3=RSHJ b[ژ|z*QXڥC͈ܟCJ-J߿"f-cwA~sy[ί_\ܙ!rzIэ@Q]z9Nw^G_s*S61 _Jj86~O%+iuQ#z|]_z>M18nEWR@-*4"#CޙiLj2acv@وU֖q:s%PwSκe=blYSu-_삳&YZ\DF 6N!i8-83x3.kOPi J %JHM% %r JIBzHOB wdK~~y^<,}F& dmc|@rs6np[^9 \m"~yv%cl\\Dw?[=hƆ"Z!xR5..:TҀ80oRf>6}r~9(GX}f>iG l첰 Wf@D_+;֤}l4:LG\q^M鰕9;b[#S%5RCI(qkK?f/.cCY,!ec}CK-M/_w\ܖM24 ú1f<.JYFsBҘSN.9jbvVmj:.u(褑qy= >Y'b]B6+v׎IէJ@H3:<bmOFTq`V ɤcj&%e亃UʀW]'tZ8MGyW=[ޏ`焑:J(IA5=g09 '&LY-'=6 A>=x\c+ LMPKj (M=3,v:F!> BJF_N 뉍Y'VܓykXa=3e j/MZ"F&p!5C;?\,ZXp0vMH8_Q=_{.+1s(O,)z&ӀrVFwFml_4R22d3=)@Wg.5?.v)sh%"ʯ9ĜjcnM\d"a㒈Z&p\v Bͣhz5Ja72ˬS;\E!dCZVg`T& ny9bɜEDɚؽ hηEٸL8/3ԔU5ݶ贊%c;, } K YMr@[GVeSÒ@6BB 1{rI"=5O=x'p/`<أdTpK"A+H܄jfsWIHQJ,^c|LCq9n}<ϒoOE24jܚp1PHj\pdoG.45N?a< !?䪀VSf>)f@ 91ww(7^ e#\VP7΀\SW=eVk E=@Q Jt+/=,pO؝W_4\ UI {k0pw1F΋ZؚY9]aTfZ^W,"✢T2ػؑ{RtvGy˯7^Bh3K#&SƞŞ*v>=,G6'Q~yU 5}*RgyvSSPڛW{lH8UUțfIE>->&<9siVL90[56@(mY72v[[߇[WɥWo43׭W?3vpn#xJnMYamǍP[bu"|]#G;Rכ˾9ݘpPYMMVrO=>VyvgT?bjṠ1 ڟ0W ?x-xs!WQwWĉ xݩe7Dݛ^9vQ3G\(ռkU[-(mRqB?ޞ~us3=CT,R瘆< ԊGSf|VoUȸI5ASھ,i٤؊JvF ܮ0pmy5tGGBa"{G]|*FI$cgWeg,\,22ls<*z_BV)}v^,< QDdxWN‡~uKVo(SOsg5K-^ %ellJ[۾ܠ EiiέgXv)p6fCuY8taTvHQ7&Z.VQ4L;6lZujqy_z1r `zlMlqֻo_=+oη;2{ܮ# ҝ2rRf*a&Ģ *yoH51@ ޻}keY 3HwwD%'~Vp20+ @U^Чd@vI#Zj]ٟOoO]|.L|⎂y{`{^يC)+4^ߒW9u)[ʝoqv/TqY%|23s>,dwmW|{IlȞ(9fAOG)+TR.eO^0+L?`dNr%lAYmrSg_c&nxw[S=+ѓYV1QTo͑Bz!&NkHǨݜ_qO^NۨuUsUR1ڝ46z~)mDӶAar"bf^{?Tk%Wjgnv븚qYdsH6!'* ~7y9eO€1?jpG?;:g "!I%kK e_Mw^Aɼrf%Qf:緍"7NX8VB׿bU i Cֻfw6[*A%ą^ *BCiEj@◠ԖR n}Λx>fޏ_E˅#o o_z3>طEѫ}7|whGΑu˅w鮯hk.x+'N=.9G?^yƕ9y6+jWZ;Ϝb?f/&;>tKEWNzME8-=dJԉņJçƙmԱdZTۖ0RVexXԈIGtJBQ[?Kh6ΌD.oI%25I5RjQf|,K's鴚ldFX&=1eiaJ&& 5mm:)M_gĎĬs exDY:[$-[\cp%֝,ւ,άhq*L;Ǘ:?8FʹШXWejI%>cΘ›_iuhD/ZLZ^bzmUsckcZb);!U .a:hR)ӌ$?Sʗbt?8=xQ3fL| hW5]xzPJͺAjIo"kY)V6CgJ\+ $s|Ð؂A &2bY|_!Rq)_$]> eތϷ҅[ggҶ\.)ib/FݶL clvvS4{2n:tŒ4TF釪gzoüp{@>hׄd7^L"Qd@/" 6 ˑzN]OLۯ:*ڞѼY7|hNa!ܖng&@O9Ae3C vn*Ę -z.wE m9&E+Xxxz_k"P!stnHu> ʪ|0.@5^=K+ YAܕ~"4Q3L)o R.>ru. 8] <%Lr){&يT,bzmYb&&=sB'LʢY^m^d)15#V&.=q~]B'ܠ6$ 0+6NYPa!ܖ&NU=GL6tҮmql00_ o endstream endobj 30 0 obj <>stream HWnF~GX3s)5'vۅHc E 4yfHɊc'r(v4snsnso|ΝѣGy~՝a5>oW'1 Qzn#[mU{SbsO\Sg*[$~|u8ϖnӳd=:)O %TA~j?TMTqñnw,2Jbe|j%?֯6Q"JkbaC&TM(לr vFg2B(Ibeb5.]_tlU6gqj;Uk8kIݸٓ78ɕғ~~/<ɯ'LfZ/!j?kH~[/"8_NyY1>$9el[7;HW4fIzze_k`Wtx k_.{}{dܭ~ųK&K+'- ¬I.(iq!p&b/p#$BRq{$B &dC>/VvX:aնqݛqF竹k`Ts x]u #WͶbvg'P=ܢna~jlϨr׫(Tfhrb`;`ﭦO26Zkg_lӱ~{;!ď./;TN{vj|!џv&5T%c~RZ2fB砂28iX3A %N童Սor>Pj1o׃WAZ_tueF/Ž^4[l=Vy{ӵ/[|n_V Z@uݸ_M^@_`\IUOyҕWjʫ]gw)iܿݝ:!aRs_Br>Us#u3 ?4wf ճa A;[svhѥݣ4~v~gu~{C]u36|eYXjn\;=ƇwbĻC?-߭z΃Y.?./pW8Mq?ʸn8SUeJq!w{[[[½[v"ֽEKo6ܣ^ Mwz+/Y{5nW*({5N/b>q6~qn|4˲<+2$9y.r6O,"/IA Z*ta [EVEQŤ$%-YTRTA-{DÿD4~4:(qgFmaR4K,F6˭,maK;IIJST2UNMj4͢4OL'h2Lf*әlG@dzر :*5pSQ „Wp!JhaDt*A%\ )Z929^I")J)*URM4T3͵R+V:9P!f&I @d@ Xz  X%ʬD)(2ʴD2HPq'PdHIFω2E%`3m(aS[!pl$D&B+RC,A䤀'ëHRKSR9Es.F"J 9C0$Cc`(~fy G+!Pwxж=nśCU,a>ЙBÃԜYJD Pz #==(Gq sD$! N2&% _b X !2z4=!xT4!sizcā|J6R*zנݹYइ$܁ȽdCgd&ΊD.u㳋7UQ#;ɇi$p{]Oy(5+ TB4 n4~?B{ o$eBBQ&Zp-|0CMVK7RL1w,b7:@G #<`F D,\P(іQy fP2@"|Ѐpqf  cF #LcvM"HH lqJ)1pL qc2:\<%Ʋ\gc1il-u+=.0 %922Xnj ؆;+3D $ q7Gׁdk,c+p}zcplZe[ V#A=yb@eS W錣A=C7H a_ :W\M[:AԠ  ̈́;=?@)8c4 }ĝV{W}_/K 7k7Z.EV߁Dl ]QYA^fktܴҝ¨`աM>e^t' T/8if.Wn:tUTp5!d/|G.~_,\(5 .P}B ?( :uo{K;Ihlg #uFra[.w醗w*,[4Ɠ=4,4W ,811jX* 1ƘBۃFZ҈`6B`&e]Yq < == Q}~ k,< 5 - 'r<[6]}T-< 5"9IiYiiyYq OMMKNdx|cqE%tsX*Y#J<}[uYg0 װvkUSxmYez#Iw nKw[Ĭ dKOlɑJq!#@l~%qo%Md2BhEN/2S Jh 8o!_8u{$lIk%iN2Q8W׫-qͨjvy!yd[pu.FdžMWN1{UR:g緟X`(rU.v1رAY,? pWDyW[̀:N nfԏhp8BS#8'dGla72֐' IkJ(IgsZG/?F9Wx\JwYT~O/ _CkU< wk=Sϯ-J*SSZj"+rs~r˖O-UqJZe@h ! L7YI׬t^ξBH7U+#GrߌH_X"k"c``@~a@KC`CӴ@0t1bW50̰IEUmA`(,M]o`GP'Vh"[gQ" ߤ}{5%aޠv֨g[IjYV cQdLzdwcxfG}PsPˆRûx{WIHUFG<8HAQ|% 2 O$.+q W=؈BF$| %rG%g(A\6̥GQIgtQBim\GQjguٰ% o ZuZzh黡vܬF6Nw{B6nf֫tEnݙ:L/h:M:gby?oݛGkwuFguZ<.QUN+sbd Me`^pJ]%ܽr ;n%aJRN\L]ͅڸnk͝խm!M]W^';zm}^G{*X{St,yM4}$?osːx]o~RƞZZLQ[g U{[pBQ_5/BV}/W:c-nIJ:ЧOY.P>\ adGQ0tp q'L)l0:&OՙiYI9ph`XP恶S8E٘L,WƽJ)8HXἡAb‡"B€E DLҐKLTA(=!e (LĕȲ[LK, 6 ԺIC1%F߄eY*$~Rג÷%oK~Ew^pijvveK[Rho3SZ5m)05LDwFrFg;n[sǷѱ͐mvT:5c;TL& +3k%s3S-w 7>>&4/4!Jhc)2*mm4IT_!Yo_0c)EBІ=!UQH}+OYi!z`O-e?>dXUh>}RSO;ԃ I*CVbc#NdHu#u+9mQde5+4-4/,14345FD3\ $BhO (+lu m,{jmZ璷]fgN &L䘐"P" >p`8ܰ\\ ǐa7[UURf,-Թ_?+Tf0у'>6pyTc~?;W}Ss*w +ް޺/Rm\۽6bΒZƚ/ܢ jpWnS1'7/ ^}?^M+\}S5\oNkx.yq #IBY5Ow z^ٖ?';#3C[h=U>]8X{kt5l `#fC ci &̌!g$c0 yL "\c۶в kO^a8Ew2)MFԆSɩ뺂y,W$[ނ4u\P:pĎ_v+7m ]5jo}b2wP{JVvqUM]s`8Or=+)TSw/bLmXws?Օ$9:`NQ-"b"bXLkE 08T2Nf:nhڂ`)hiiέ^׊s?8O Xm!e [EpB aC L`w19uf~} M&JC S "Bgv uTs[U$gVm2hKtvCr]Ȧ p'' Jإî-bPB$UҥZjjIGQDvQ~Yg!,v#dz٬,򒼔6٨FdHyV[<4y؆4l3g+kZzȪ4 ;yhCcK5YVDl+5AQsEbwXW3!lI.:EdF3E DVpQWDDA<2"Z4["  IAK4$ĢdLEs#騤c.bY䘊DeD>%( r$%FNFf IFN'BtPGGԔY@ 0vb@z?hQr'=?&D=i$Ek$5zIHYQj䨧۟,hV?,xce2fCQjCW Cp|<^WȽv^QT"DFI:̨PcۛK䈧Yd@B&N:Jvٍ&8IDP ocMѤh|.>a  WQj;H s^g}Xp^p рK{ 5`8AMC]Hxҧ9 >}2'o*Ʀ2@&25y !M>_>|wƬ.[9vl-,XX >0l{8Rff@=գEr;KP4 D䨎UGuPYZҫQ% 3G(=Trޠ[y/Q9H`A @E_~x ?}*&upNh)+, 5s[EV, :[Mw?{S+}s߸Q3f [Uo0^Ft??ϧP-?m߾}]}|6{x{^øǘ[YoڟM\g~l%GvD ȁ5^&SH[ @@Y䒥3#9uJY& #@FkSkhU5q]̲5? YOjs#L.Fֵ62ZZ,ҰThV08\0- 6&,#jN!˝<vOcqޅQa+GEPc^,l/㞶0o ^sypBLm`9 qnj8p-x `Q #dQ'DZ-ص4pj^uuׅ5N* iO LKܙy)FFre8.8IaƯZ8 0> v ߴ#&۱x G1Q6(!H&ZY[^HlgAx'l.9!)2 8MtJQiWdUk"ERωVm i/xH8lT; 9x$`vVil*(jx; jQ9 ;bONHA" q kQq]ւ"O<k9qExQeW1ɄA2C!#E H|{mHA{lWkW7jDlbR uiH01eM#ALb*З}\KLH,kÄPa_2cFl'$2f_$7Ce8"c0#tYyaZB`1 QCǎHJS]J!yo'9ZDRRIibr\i[릮Hiw h b<3XSA*Eg[odKMKSx-7ӫx#2Iz:T?D`^KL^ϛ|I4,zcR֤%A!#*zJ"=1x*DB*M=r3 (%VSBm[!$4=eKm5OG>ՎDu.wokI͠ d@8uִHI#:[6[VoccUJ}GrXNHZJRͩJJe.g&gRiBJ%Cm]ib(:c끮g2_}<}<<jnlU"X_S{*1c-e<~;X 6<)08ezC=*ルh]0qh0g}" }<|gWɋ,=]2뱭 )Um 91kM@8-:. z)]WќP5l h{D7J7]rw=~s/@|9{qXGB[r7vwDPV9w>,Me|3lBsDy@=\3YwR\&51Xecԋat=%]`_MU [lY Ҁ4oDf-C-f x? @pdWE-3K>=Mߍ:nzХf.RUeRӽdSxv :4ﳣg0KM[Uy3 غSghPMhl9FZV vڂ+j z/e?i`Ptx]3쟳żWYz?U:`͙k|NmmN5VNETUq@顨UrCryY>"dHpzR;ϊ/ϭnxp"Wt CN?ʚ3RKiMc%gLMvV]R]_48~1~еZG3ӮQmԮ긔AXvtxbdU_Ph~F^.iT cJ`yȩmkj%]1zգCpύFV$ X`OȲ0RpT\#SG^`}{TKQZ˳Oݦ#i~yyS )bgFײnځ$z mrJ-I{2|\hCA~e){k}˃ l?61fǖBq[&lP_~ɀ%ٵ+C-4ucESFatq0 ^C"T8tsf9tF 9(؅b.ja 7TuSD~/#q#2t }ٯs ~ݝzdefƄђ3dXq\ǘ+tɛi\{qaeBokBi5 n$|)tONV9쥱w#HQ<b:0{RrQ]E`:u*g-}.}3RaW pY6X.NɌUEcnMTG?K UB5}g- Y/dyC"< ԣ!,l֨16.g$$,]ZGor^5cvҚßQήD^ 0v{.[DDbޡ܀뜉S!{. V Iy~{C6~)W@,Ki@f;_f77X҃Kwmfׂ/ۀʂH0̺A͙LED ؁&5P(&A9̍sf>r@Dz 2'r"{P4=c2Q2>en(KUDٸF#zƦD!]!27 f3~ot`rj7x&d$yJZykv3d Hm`õX殳x̭?_7ǯ!A|6iXHqo`O0j+`AA~88 rp=@XǦXbRHK{ܢz>pVWrƂ + d Q?WڲAu|n$ljߞBss@-@8Z)?P+8e7C#rs;OXo '=dEkNȘ #M G{| jbU݌;)Lv,i|h,u)1#!JNHޘ ^NQsj~@AlTf_* NvƎ||L4NӁc▲܊dxQ -;>\9jDT#%!-t]hv>ìB%c~?AJ?=<(A uB3~`ŎAx?M˷#ۭf _}R斤ɂSOZ$^ͬj` AQ&2b -LF\դ@hAh2g)ޅ XX{0pZb(Z]L K$@dR8c9лsQA4$M!탉;X2H8PY PŘ5.rHf:s%:y#3!YH Au\JTGo0SبvC#Kw0 yWlCȷ"E8lLYFS)UlJH%f ǣUoD$v. ;inګMmuXj~ q S^~>HDW%q۹G7_߉zM\7 ?PB壛,ٻ4M qas1" rIV8^ uq;E!؍as_F&f@2"N:SSŔ;ő2D4E.`ǩg¶N"(w'$ F~ Mwwdԫ3']=Ze9\':O n&GqZ[{`JC}z`^1SNXo0ĕ$we<]`4S k|JtOШZ_wS-']ETpgC?i ƒ'U'"Qjzkm𜌏ɉ yxWH}tkiFg+]]Ƽi gX[.k8mh0O;3`*wW&>t Æzd22o)X+#G!ޫ:!`.bNNq7z{K:G76'le[C}:93o M./{\1Cywv]46]N (AhA}݈?CR3=s:OiǺ7H޹(&mjk9K ?y8?N7w)" sXQBY A){׶ [mAxҬ.mVH0P0+C24bq"auprRS6[gnf@ܨm#ԧdʉxƕά3[>`Mh ܰVTO r {]:91h NcJ& 6vе6{I3F0b_4i.$ރ`s)cÚA4|#b]vP1CDL" д Q;̫C3wr? 0Vryp:8af݄ ^11p԰yj5~!|5ۭ^ !{f`S>pR^Ō@wV(tu5/xV 7(#u/77HmH?FXyT(5=GsFsp㔍 >DGtqw*u,w mugu׻/v:]&|=@miΎy!w!Q MP\IPx+O`PE$Tɵ)Nҍ]]+)b^,F0|,x@{Y:81f%F+2a<`'N\KՉ\$9PL5$* X=e f%U)*=Rs!KzVT>A+!7eGY\X󪾋WPz<,5Ulf.V/Y)]ڠ:uؼ$+Qy H9=ȿUr$ژޑ û X&k'*?םs R2>Hn0XHOL {ǤYyI Z.71_OnoW7n?=.-ޖ\$q._ >K*VnxA7!Ir сNzywR̗x׏?]=|?=}y7E~>Wof ?֏^Q_.~oWכDOꖃzF4bIN$?OW'{(pOr(Ti~8-@+`TE2ŠH|jW^F.Xgpd2 ` :8]czTVx:yϘu ©HTM^TH"X0)FcnEDz +4Lo{Stz\m( mot1az(@.e$R( ųDjNFN"):')V&L}oDēE@+RD(NP:y.*CjxnTS$Z10sArQt8W5aFZSI2%a) "ɜIGYh <+fQaݍ$tp:(ѤfSsX翧d^̯ y#t&4(X/ ھ} E* ?{ endstream endobj 31 0 obj <>stream HWRH/T l'61Llvިv:iw+-bgGm~l%6$ё'n}/s2 O#.Ϋ~e?w:PjR02},?1.Ɩ[L}E :} d)B.40Iq|MEI- {?8i|uڐݤ^,?~e.J˸DibDSvIqD*35\X79 ;{yG&,L|ZpAzlU'Y3mt)`oD~[oߵ 8±pke=kXk=\pϛ.I 4L?g{N3T479 0j*AzZo8_|sӼ$7`C .oϺ UKA{!K.HU;(| x29$Rj@U-@R}nt)`mgk٭F6i 5( > \Ί" 5W8ah|{ D\)n`#H$Ǹ[nib2y  29d2Nk|_zs`]{Na}J8Q%7 k,̌$zaGJL,h~vK%ׇhiI̿eQg1ZahO|m ibertM,eS&Ӥ)IլIR*pM`+nlp9JI2}fKX.|)`\2R`W%W`T\W9,Ha  D|&ARlwK|ׂ0%kshRI4Ė@~![qJh< IXCPBm&Dix3$p"# QS#$uَye04 y=ԄZ"7 Y$6ᓜF(&Gp $~ F{d2N|_z{xЅ 1BO GY-a|WY&[lEtI"V/}ѧ" B7_AP"p}v?0G-yGbpM* P@HĘ F0ACAζ429:&)vDiҔj֤mY~=}E?2=a7Fp9]͉)i4fT}TVsߕ6*KÉp5䐲WQ)GL߱G蓶9=<xE}FP%2H U}|iw>9QߕXx2CϘ01g6\|}fSu_ee*,ϝi靤?4}NotPp`M,G`a•[i+q*=[{XuȱA=Im% lGܽ_; t3/U1I.l۟e$IR*ƌh۩ :Ze#!|5AIt6UIީv [ݰ": n-^$U |ح$x+AHx$iy:(fǣ3ݣ@+~S]Yv&4Qst֖B 4O2(,fKs.#r;a4$#N  3TGw4 vHai"Kd9-WgrEפΔ~9JrI᫤ ~$}fg=no> endstream endobj 32 0 obj <>stream HnH{:Rl $n'i5VpCeU]0WeaLl2h0| K c11u><\诧?p| 49+vj9n <~0 :q#4F8Zc"stQk|ҏ#+&V/ J?o(4ΣYA/~{P&j|xjhScîGۨfx_+v~u= ] Jm>"] 0370/+oMi>xcn3n|k}͵uN"[gdGyY$|IVhbE"{LL擏ۓu4!0D\1A!`z@@Q=R 4ӣuD BDy@ + /z{#.-2X&|>#h$|R*&s3Fc63Ŋ`Hz 4֮SI K1#bX*vݟY$1|Bl|򳞅+\.MgJ~K.#i5kcKߎuz/ëIhb]Jdü{T.>}UE\_H8GqIa0@'/ dS9X0A "1ESg dO{cn3] kP~7s:+K*ȶHdԣֹ"s=)VԚq{r&s~&(u6+>(\`s%G\ISώ%\S_zexֱb1M[D^fZ]'t^4|N)[ΦnQJ 7J9fUF"Ŕ/sX>Tswhlx6]eAhUL V $bjb{u2"S30qP#s(>͎c1j:qe`v ٻcݞ_ݍ!;|mғ!_WUZQ:IA9)j`kŊ`Hz 4֮Si3$q̈%T8^B2bPi"FP S0VdYn[ח; U zC|c\22k`tɨSZx lX{P& eTh먧^>*n Aܡ%'7 ~ ~txۥJPZ +:#XNmc$cFİ0U\MҮ%zEv(Q|tUbr' חq#))MtǸ9=CGh pEXn2_ e"&ʂ ٻS Uzmϗ3?"ھ32ʛ'Yr6ά1NX6: u2MH Kꞗu@ir-{/WÙ rzsK/gH% %~9X'3h[d H=CH"K@!|IVx(uA(e| >9R <'a‰2 ˹XgcBC@Q{:RD8d̙1fM?^8((Bjg[MAep3 ޝYJ_²9DDI|n*5US)'e\8>޺W΀gPk_^d`͑%jNGk9oB46ݍu&9_ e">P>roT%tWAsD8ίCdx"w-t''Ϸ| LAz@p*R!׶X"9X1-SYcMe:a&Wda@w)Ah6!1\D{;%% N8~oK[f*+VBGht<@LG a@vԁՁADo$J`*A4QQ~B/W{O0IHEB黜/aD>F1ycC5Nçcԛz/Ɠy~[AѧVg+Lj规ޣ-FVSV[sAߧwzW(jo֧߯ yy/|_ziCC}ǟ~?? w]zWp4ۊdR]s?Q{=eA"dmH?y}ӯ=/f҂f YRL:IaHz<ۤ8 V, 1ވWrQG6k#vf?bj""4dmi stл+1?DeFi:wHs}Z(Y3&(ϣȟEԄagdQ3C:SL%tB;Y`4r3NVSS% ,Z#RU S {-WFO$bR6 zڮIM6<9nw/|la5 J"C[6VK#~ut%U|ꙚXD>"xB,ҡ(b愖Qz%Ƀ.XꖨgVDhۨWCScXLQ ׈_$Tp0qC 0NESk];#y؉pEװ|nk=i{$sa/j)՟hyܧjt\TׯQ[Êĭ!Sv"`jx}e ksyՇ}&붛k&/%GԐ@Q,>`.).AڋˆC^!-91eV 21J80-{teaNo%S *c 1sS蚴:P~SR^''@5Ec*Z%.(Ȓ[;u_8>O7LHWfҺ93&лjȅ)rRjCt"hU% H5fPU7F/Hj#i=ɿnE:uېZlzUg~GєNGN p& z鎷$;RXrkĢ2N7/Zgk>EQM5=P'( lʫ4nK,.gg{ bkUBعC!AdžDLɁ ^PHOMrS Ad;+6/HpEtz:*{J|˧*\>Nx feP=aY rizμVȪn,NWV&n,upiŽgo[/WlhdRKبp=y}cYLpHZ=2bxnr5|fk2A. BfA%5*@FwԈ fNoՌo8hQcޖ6fPh "vH#3FJ>@JG[< ~i=)vYWwi5mY5@&L+*JWޤ*9^`XN({g. ]FI$Ps֊}G Eb=|Y+E-כ5'z5i*!L "XfO0z,ޚؤo|D zLa lc )Ӣ- ӚgQGn{ZVoag,ֻc3W۹QugV&< a5sݙ5Vu-?3NP1DYRJ*8A4gݲ"[,Hy/sktl*ۈ+*ZccGVV镳j 1*@`5ʍNܽpef+2eʄtVXk˰ oCZ%Ѡur.Gv$^(Ħ$KUV*(:ߘeH2݀\3v&No͌^˝H 5h..Ҋ7uO_bw1qg0JZFT ƓGEME*ÕcxA`M+-ш7-ud+ |D"񀻦B0y0|3$jaa+Uډ.m,wҨ}Jd"ަIүl"ߵ%] pIc+l{_G?g? K\gWgmypy=qoe~{l|qu /7߿?O|v[y_P?ןgs~}˶ϿRo+,x34H o: YSx_bG[{yOr#qRWX41@JJqrN9{rjT|uyN_Gcݒp`ne#n ɑ=t蔘=DwS)z낒} /Ǖ~Rn!\=,tLaKcUY+sER"&)dmmIekFk~IǩDy1)dGmR*֎`rt|jbkZ붦K-QzTΖnoy;:( -HNؤMTKQz+ LWQQھ L7 ={Y3WO( q [&/W!|RYa0D*] gfhO&dD8kRMrm\!kiG砎VMwhlLnzcek \91GX&#^8!6|<s, |&&l˄oϠVO =){)qנKtj-8ss3>?.sra)NrP5 mPJxeHW@'f% gbҔLObdThr֡wWGb4EfHCT”dւ<"תaqO>ƝsE/IQ4.Nػ|pI Iߔ֭,ke/:1Bse;ҟֹx}B#F{eˡsJ}t{O.]7n<'L@ ` FfN-N#l+XĘ>x+~Y!tD1$zc=0\ 1=q!Шę?9Gv+V4I .0v$v~rO'~\DSsfkmMn6قx ]"%!LCFAZ/pg T' Bۏa{k3=ƘG EU DHU!tu"I9T&HDC :JF49! p`Z{'u>xX}ظ΁ \Æy#7wh|HeL^WH)[vO7~7|?$Sy0"Zk{sbkm7ĬduMsJn {$u4OL8@NK=g8{-.{$ -,0u^.K{Yx\m\%[dKjLb,G |fSI(1<g:1n%r L٠Q(غmI׫SSQ?]}Kv0-g ->ڴ7w.YveHėѷ@+l05_^'RpZx?^

D)K|5d.Cze-gEy˻K3۰%-Ao Øk(#q.þ#9$Mf5"s1y ȍ7xc9 G Qp$jXp@"0zȡHchyOғC^ʧDƈc#@{$t]B8 y0eEC:`BA9r75&Pmet1*x6LMz@OP2ыR“i< AImek0`HQSQxp+'y-N7,XZd1sÁVXӚC+U= D]DrVAիE\acC =~|>1 @](E#ېl-}<6Q1iXbQȸ$)?/>Z.<,a?yH=DA-sYzwF+>14hGT 6آW3 2c*\kz+谵 fM"|G6kP`#A4ft(B?>"#$@:Bl!*sjߞpv2|)(hk@0>P$#w#{绲@w0Iq0ٌM_0n\Y0XBPAT)|-b\~S]8Ȍ!TA6 1͉.I^kW epIAx2&d1k@Ϩ,q3M%$ &QDPK,X9S7p@=B!.8ڮ*%%\% =RA%i A7 ̓<@!@ P-|v'p%d` ЁAAQ!Ml<O"9ڭǼ}Ȏ @&m(MEp,6p ] G#J"Q]B-l4@ؠx3 -4 y (DWe xEpHXЙ"DXX- $@ x"EAba!A IڙB'$gi]2@8D툂],B;B h@$^6,VDVxpt`^}^%T$@902L$'q: -`!O@?x-4$0xA*w)!`$ThhOi(3FRBAE` aH# AȱRuH̟PY ^0̐bP%kel]@U#Mgۻ4 ll- mqR_) "ZkHBb2xÚF= XҢ|®4De@浅@o)ZxY\"L2[$ .i CϡBM$ "\A-A ă"@E`v("8Th TeDLvVOλlseC$th@ ePl% L+APeIoAEĎ^ `@HP}z@R3ɊBɆ0C&AR^6'zbÌ0@ t Jn3/԰1VlA B Jãƺٞ xOA9M AuWm A*4!n1R/N @A3ZI Γ'f؆ȗ*Q,@v[?L΀&A,- Rt" B*t?`(<DozHi;p">cAa7J+ l,B` P@xh5v lʑICEbi6d +b$FHxLtXĨQpqZ>@AEpn`LؑWyq*4DՌC1AwA<@5泒A "ABjl Q4TD$ Q0$B 96C ȏ C"0dɓtDR$t%JkrR%f>hV*Z:'TTJ7J>N ;a ^*aZӏHVROTU, m`l$k}mس'E kY`&r-ilV th6ذT`;L20:׶}۶ԣAyN#:ۚ<q[S,f#¡#l ɇa뻭͸"m~lgzKrC}`1-oX`boޘaZ:) o_tqo;oNx>ѥK(qp NF 9HN GW检'0W#Kؤ~loKY,#LK8 Lxk Z,G (8 404NPqO(t0O }# F@7x$j&k%9.26lN5T9LӒ#Z݁# M_c4 Mَa]6t,;L6[9tͳĢ *# }(Ya @KdBtZVD* .xq `9#Q4$44H` h=(,Y#r򱏅SwYlZ'ߥG9| 1?Lgu6pGp"&pP# d}ΎjPA%F $@aNi%RFa2h!3jƌfƟxQ)llX(]iiSpB:] Z0)&y"TrBRyg*taSt  p]EHf =Wqnw|M`8l 1lh0.k*4]7Ҥm nt3a gj(9hd#A ~VƑqcM3I0(pExVsafu@bC/0 |Qkz1hN#|NP J@X%q#EP b T7Xr(+&` Ȱ>IYHO?\t3FXd(H^T &H>0p` >w 9@lQXQ.1`jg^4ż2_+\3YLjaJ3۴F\s@81PY=h'lC< %n"#$`*[d! y;a v[" XC(  @ |K@J@5("hRƂ5̌$)8 ,2`.axWx q,V]]nmt2"c>@D@ e$D!(!W$ M7<I2q&3y< ]$)N3P^$ot!a` ?~ d"?I |c@ "-z*@ !@~ɈθR* /Tm q#|7!>M{ao1mə`_lU@f mCpp:IΧ,88Vlk-mh6 %A0F@!D@ %w 3 h00H8A*Q5-GRQȁ3 $ uj1V#I9A8(u ~>?GhAx|Z~F0%ec0$d BsZ@7S4~lGjS,P 'ᏐwI |J61 }zi2%ƹ #6M5Y#3" oY`I5~l3,{7Prm ,'4aYp4<,Q6L >gh`q҉ +0580[Ң.l0/M&QWd<؀ 4`A\׮O,-d jb ťnQ 0)uAjS X5$`#V5(4T`A|hbC0N͐d}d%G"t `2v2)rB&Pm/! Gs.Mr Ǡw ӣm'8xAZ/76B0: =D|c{*6MQ3h Z)Vg~Ù0Z1(8\%_:AO60o6~Ĥ6adA!_$ @uh0] $\'\f@ cDGꨕ (=&M`HddI`N@ҪLJ "-L)9HFŐFe  @M8 LJRo f` J L@LQޅRA"FXA naNA X p8#C8cZŃ>l~`À 76c3J3z5vcm6#65\Þ:c[ek PـA4NΠ@,K~@\&jV`  00!r c0M8bڄX* , S` $ .bgN ` !d !&jkf ڪ갦@$G@BmlAA : pr+'׮pGqq+$B #b$,GH&f4&AABrG@B>ozA|pLs 'rQa R>w+f OA*+b̲,+@\!8R &C662g|4>440~:)2C׌m|C׼oh3L"8Z:#1C:8:CC2C[ca6@`~=g,! FrB@xH-r@, E'FDHRz` ꓑap ӠJJJ\,h  L66ai$63]iX q{ *,>B0 ! H`s@ b0Zl%6,4m6vLcT'4lK Ɓ`~}4qv<%TV~Y>L2k̥dy@4 aMf *& `d)րNHN p.` b 8 Va֠B&Xt`nnA 钎*2,l&l֦#`lf!̠`D! 4@ !#j&qNA&QqHbhRo _3#2"2OARAr!Dza&3't!Nc[d D  OK@e$¨}/ 6Y08v*~j#65 XNd#J7I564 8#9#6nPkV ހD"> '* d,L'tJC$D棎* al\7D8``nbuPdaIJ gl8@PFpk!p*DI0X+ f T |Aw>nhdaXv)uL6N5BWtMk~` 1 9]! Ƞt9< R<a բ :n*a#= ~@. N`k..u q@ r-$^2.H^ DFr X bLꍽ`рpA!r!o! jZZ*lU[*#ƭK$\ nU&=r ^m_ p a&?B oP(+#|)]8aRb'vn&!wRu+}Ğ&6%<Etu]lFm\@")d !Be!WýCs|1&7F~-6hkCt6޶90oX}i.Ar?  a! le j7C`hX`d@ 0@.7`%tTRJG7 UBn6@C(a6A<ڀ$ ahL NA`# \1N3ڀHbq\C( ( FRqta`a1 X `@d 3jjP ̷R*h P@ "((9&42f] |DmNtv]3`!0brP"b&"+z`66b#r!Yk%С8*}AB.:G\dgByv ci"wl'G dӬ_ R ʝ}!n"@(,R2:.({|$C} 8+kRs7F:547/$I/FȀhm69#2vΨa\hrA.@#ANZKlt\DH`+$-@Of˄ L8` ``?tOJjw>A &D&?>2fB\9@ r ʡ:! X TpA!AIA͚ޛ37M/4N CݔX<rX6kc@A`\tN `2aFF (`8,j``PQ F cn abRR\ v,c-{ @$ ht tRaaN)5r#=l֕N\`vA4` \"(D0^<13*6CY6RHyl!6h(G],5'dСc Tt!ɗ/]}zfr+U*Z@TVOB?#:VT(,DMZɥ E Aj"0#F˻H={DlIM7iRv$3#.lm#/m9ҘS>}9٘M9g̶Y]ezܻxp`e֞{`eG"m6w-}.匥~͠ü*Nx C:y}FSS}pEҊX'1Ppp+lEAE?Ɯ8߸1cя+@@P!19B&'<D?lq%sXb-E9UTMlX2JL(H@KУ]E-9@藅k)‚7"(I$Q r IsYe;Hldi-~i4Zhi-b4MES%S%?xCP$(v. dp"RD X5h 8'8A$EpCg /"T/,  p3a% -*+2HAB,tq;вF,`@@%n,$,В%ATA F+=(c)~=SF|qlN]Gj쳏fB0.i KdHbB -d 3DA aH}D2QGsD K#-K"3AK?KQ%RP"/pŊAB2֡(#_8*q @%d9J <͠ 8A \@ `@D f0# ,A&Ar\ X1j$!)UA-8)P*R4JU`L5X8(r0^mp8 ʪ@ F,HK-+`gn" E0>̩ [ [h8а 8 tABa~a_2QBF\ii5Ђ,0<ЏqyO HE(^E@{c k]({c`>m}!wj%ث l&rjxs 8+#?V} uB|p|j,6#s$P YQ8ğOAYiuگ7&9h7z12FZQ q?YaaVFX K\/C+MOD%{fD#6K48ȁ@7  ( x Kj $@("Π !X ~L0ZG d:$jTc])YB;2LkZSM4=YUن,ڰmP"Z&m IN9ѫ 8ذp`p6Z0r: ( !0: O1  Ł-B."0};HQ a,ipС lKAEX2!K"#9pfF, e zPDըֱk`[*Mm|(0AP06 !RO }E,bYqtNMh[0%n2FCv8!J>H+}St=mCZя=xOn;/c,E(]ܸu(d^6(7 7 {/= % 6O#\7}fRK+^/0,W\Ya6$`$dяMb>al YZ9Y0"lq Ot#;4odo12LP7G0Fp]s!P` h$0XFOb pEBg$)zI @ o@ G ` Gwh 4p2p 9 ZBdUbja(2p \k)kuL??O"+Az ܰ 08+ ON+S? ہF P {cn0 CNpP UNEmD, 0Q/ 08 YTV K2)9p ՘AHSI0 pSk"!S[iR tSI P4QUSc5Wc:g`&6sBsA6 qU6pW@ tcWSX[wu ^vd8Xa99hGZu-aUm W ,c_  E0rU kum  StC\Q `xe ~#? ֥VA! =^{>>Q||^a4}za )` Ir}6]ߡDְa$ $w< 0pCOtm !pC[bCuDuӚ' Pe}Y F` sr`cP*(~@b $W%:,h E&tI G8 jI9C2A3b]p=)PL#.vk!.2*^` Qc У" A+HNB j?Z+0 +n +o NvA0V0lQإI}Tx p Rp 203][` &aTi]0s`sSs| [5gVfChiC Sj sP7 Pj8iCj 8PX3v'Y9 Y> kP=B <Ӓ 0yb1^0UД Y[0a0{QA>W6]b")mm!3'<"} R Ipe m|)#;Gm@d/rЂZf0PpesyƷgUPm@WU@'Ÿ.   7p⠺0 @rIY1=P@hp,P2 ! W0*jv r)^L+)>Y0> Ԗ۰ a m+]1(&c@H @ֈhZQ/u03QNr@ *"Сpra&i$@(k%%gTIi@1%FRp1gE\ V gUhV jŤ@j7IpWt uiuS66Eag%CYY1c5 v @eR! תZ@ F3Y^1 @0 9#x 'z B&~ eF G!>A*u@Ma`?G0U>7;6ųܾQP}`;0B%俤# @}Vp]Г} Ut{G^IA#;!HΗT_{!?—!.*BAcNi7}GUG<6k `(uYz=UL =82#* 0E@b)i 0GJ2O u b;e RNv"~Cf R#|1a r`%c j)HVݴ1T@^pAT&+ . )Ā1(jf% }  $TW$ I k p1 dLQkr1k4kq]>×> QlYл?:8h~38cʲ,l0p# 0+ЊaJn 0c S9 C`  "-bPI ǟ2/W) ` Й30K}}LE0 B`5PCUVY& ]ӏ VVcS x­݀6$%v_OO`Ǽ&9 <ђ#Rtccΐ   U`=cxXխY5bDΠyRӤBz}uisI^zG ȑK -<2gćc 6lbSH%Q䎎.e&/TxĖ-9iV }Fi(0{46t&04۴ Ym2JR-x}t8CM:ySxZy'(hUAFB'3>Y&ԙ|>F/:z?Y2jcP\#ǨdKrnbl[x#AN5kʱŊB -ZE0oHx%K`(Wn^8$@# F 1`S!i.($`9B$  3e4Ď&(DkJ!  aK􉢽.9#E`~Rq6!HMpA \a,XV@X,+S Lr3Dq𡄒:စM8)cWJST)DSYT!nrNr0QpؓQ8@:pŒ~@$aN! l&M:jB褓2X >#>#h0p"Z~HHlQcuAb @ ~t&!{m_}f1c`hRfxeP E_C!Ő8]6egH]I%^BeE%g%g_yb/ abB(Ggѥbcu!d5tE/QdW\b|Mr[J)7 )`PtjN! & [K4h! MChD7<$wJ|!O/}c(ׁ2*({oE(jo6$'.:f> ~ڨ |B: 9z郖:1F,cjgÒZ!^ 8pV2FG?Yu8]!t@(d! C9İ b\'؈. ިpk,!>xcȘD$O0 $Px7(Wp1"%A"x ,P v;thPDKEC@ G4MOGA0Y@_B* G K By.M(鰂" Ǚp*9`0& e  ,80.A7P!'9`)W!,8Q3r(LQX⃲eIKZ/-uu˟Pùuk((4XBS01VT_f@V1}1,bf0D3,q '=[86mlHN,< =#E*N0-0f5_  E8@0q>8@8AN@ /x0F 6nU6 h)8.!{ARDPPF28X$s)A#871H2'8WJ !peMb-I?( ,wp@ 3V i>aOF9@}d Tty`pr! Lx< -.1Kȁ1)5#]ʙKN/j(C IpA,@` UX ^#|IҀy0h`oxf5X|xcb<ΰi"$( cFNwd$9Er;fecG6Dh46Q2XuWPE@IM`ҟl.a ؄J4,0=(n&nE ]` LCBdpYC/zх5WjhiXG AbEYZGBgPh]b\Sm(!3O);\ 4#;`!1Ω ʉZ̲ɐ"AK` IH +Im6} **= ~rYP (h"oV0 (V/x, o8^8a T ½o7!98 KxKOXh:<.ȇ|?萀Q|pjjxO.`.)R?Vq!;@" 2 8>d^`"oP\ȁp-Z 2"2 HI#|-pв/!3EH@ђ-9LO)$86J< }qNB 1H(JY jCVf !E5K2zZˁrXȰ6 H DP4M8+` S(cSdfysqѧ}p'r7zxw+АPЀnFc(1efxx'xxe lDꘊ3I9d@Z A^J9ʙ녳*X)ZX*]8W^xK9EH6hacӄZɁA$d<le<1ґ[ɏ!9H,5ʲ3HJaʒx;A[h+I)!3:1M66: 6W/@!W ,:O\/i @:hj#!y7a@:r=ؓoo P8/x8"o@xSXVr7H@pȇ'ݢSȿMjЀ0p%]^"o !@IVjwHo Ka|@y@*8/z2"߱"5Zσ]=hЇ8 8Ӑ 8D-91ٳ4yK8J(3"p%݀3 G8:h 2`cX@X31 D |`qH*#CɁyp* Zȁ/@860 NSaQDSy>Xagdvŀի1DHH2#QsVm}oM؝ْ݁(+Oc, 1,yOǢ@ J 0ZܵcH># dlx ŀXA  0Ӌ9hKȂDZc`9 p dEZ̼t ҋ/1؈ j(7! Kh,Ca5@`|-&MZ3N:@ذ0&$*?,\@Z 5"!#"ѬI> H1W&4`24K3Ń](> 8E,tJ; Hvm,2i2`( H( $T.:3+U -dY43TQw9[ЇB"05& _XOl @.8S: ++Ph2`8SShQca~68_pE;Ӂn[TQP(/B4nȀz#&"~#7K#&n$+Ά>@ sL9o( c=v tp _9©q ac lV@oC5I_XN]{/i (4Dɺ괆ɫ칲a䳓ꁨ͈0*ԉ IAX;Xٯ!IbJ8<p!f#X PfCd+ 㵩KXx0Oh(/asٙ#7070y/h[hi##cYc/K!,P&Z[(N'0Q8>Gx2`.` Rm0 |VXg51'I(X XxX$0X"^@b`L8^K# y,[iji| QH` ڒ@4}2XWHY+Gc:$]-DT:4P/8@:#93T؉WӴ3.`U 6XUVbvh{U H 06?u{TtjIhsEl Eqz#5 |u vH,>}](1|"~&E{b{Q8$@T*7CHDxՏY)*yqUW=>:*t)_(Nj9B`9 T]xSg LGwdcu@NsIdKl4ɬdA-,H-k FZlvԂ( X-ij1dsi9G.]udΥGD&{RXi=6pm'Mq m~@ 3#QPș`ҧKN|2b<ϼyrbN6m A1Uη:,TRO|",<#r/(IpY4S 0o$H'ܚ|]r 4ʒQHJ5tX^ պtaFB|,' oĒ#LY,V\2i@$bхX5z VXrCi0QPC d̀ 5B)RK*)0! ҈FA0 a(d $R ;M $hQA 1(B 0 -EEFET+X0$@-&b $QA9QU𗞸IO?r 1T\-XRF!SF|&N2|đk&D/ګl$F82>ȶ5C tc ٘ѭf`Fd. )M6쒂DdC{f褒H.3$<..3$ '"//l12Т/BH*%L.UJ$ F`G/ 28OE10K6muQ&8p>^=bGUTPmvZSM10 @6P5QA;XEEPMRsIG@)QMHL8&h9QEȲP (ZG?Fh%|cIPaDoM}X•+u7@ x7ߴ L7o =Rga e 30N񞟁 C00 2$TKU0V6ՕkfC5nV9ub8-!%j>!@>KsI栒D%mJ4 |j=K`’gpO.7΁^o>A#hC`ou3w~7R*P`>x o-3pupyg`-ְS;~D tX  r.Ȁx wb5p` k*Ak~O?o0. (&H#MQ9a*0,"0+a.A "1!)嶒E)PKdA\ԑIG(m`$\ (Q:b,V \!E*@k~i P Bp fp+D8T'|'xÞACHУII |X \XB5 C t `>+x x @,5P; ϰBBuH@0DX~xDMhU 9BAU 9ă L E BQCIhXAD- 0BB@.x"0EX] 0A@,>8STPp"P@]C[6<PK-ȁtH=i\$@YGq?: >K*C8/TBø4PMEEROEN(B1l30<-'LB96BNPа\0-t5C;\dc<9=?EB6 2LX(ƅЋ@cHB6@Ժl 8ܳ X$SʕƔEhقmQeLTĝyN 缄ojLjQ}ċ\D46lCZ!=@t&%h1 6؞4#>,8%:88@JkY׈]mT,XB 01x' P@&̥`C,$`}w% =)t9d*:Qc;x5t6[8 ӺEq?9ȪlT$dlBt2p 7 r 1J 8 <";=Kp?>O1M //'dP}k= ʹ+-xЂH*2O2L/\0$BNN@X¾Q66ىMލMTMp[^NN6]PӬyn.<;HęHpDeYY?0qіINI(H4bcr̞i'Qr2]_,_P@l_\LA% b0>mJ >fTKGc\Ի H=  <k6C/3@9:03lrC.:hVI΃3-ET+:T T0{U03'{C*|0Lե(3ĦؠȖS7ocĤZODfN6^rYBP "\ApHH%ʨhA͛ aI> 8T Ahq7BP xALAġƁTK +2@x'Qg5ܼ^A\Vo uKWG_R3T3h=[(b !|c,).t%r<͠\f!$ dڶnSpӪՁnQm2ImMrܹfѷ'[{Z֎aM-ĈC1l$Le͟a>40W  Ks,~})9ٲe)B_`)tk=s7Yp%#4@\9 p$^},]oXUl6l zKNO Z ,Ȣ7 Nh ؠ`TN6Zza[^.ae . jjaBjX%PHj(!ƅIYc0 037Y FIjG0ɧ$F^apN!C3Ҳ}Zj 3ip R0Qi3,7`nm&ۭTCw3"W_itdM.I[6Y46F3(`'}\qe6Hp,E, MơDZM~.AMpAM* # 0?#*$c]96\8O/D=f@&FG[n1ci_NƄ80fk6!y$nzy}DnGETHC% ƆmPHPl&Ő00# @k{)$"J%&]HEd6g G8c_Dذ:ArBׅRg(0E+rAogysʽH 6K7+ d!K`ФY}ҒˁRԪ,Q.#c1ۡ5"MES 2v@BWX %w| aqc Y^=xXW`q!LBH &3H]'AM@?HJ?`c #07` @!`Cx0! Y"<8kQDo #Q5:)nAQIx 1 `x `*шEX(d$0&V`R4$a(ސwhL+`Q* ^ K`VbjQ+43EcX9SYhtO/ 5GKVc%Ԃ*4,0-dm )  rn+`A @qr `H}?pHp 9 ,,D]FBJ&>thL;8d#`BP! d܎C@ P ZS,Ֆ`d^=lUw]j7n_ח(Y|6k(3eT#@PTdB&ֆ&o*B~8h$/|Y&f@ 84ф ` Yb 9 6L@dr q P3f0b 3A9oF%dцTP@:,H"a4 1oGxB9 d{;$8I!jF!$LVM$@-8( De#c  ĐA ,kP3LgʏQǾi:&2ʌbyi3о(b/:!ƖMl âVsY0b [js24w*҇,8(xGdq3@7,/!=r87+T ¢C@h@E o&dt@#"~Xʰ 2˪V3ggY|nD=>Z4#-P@]wP( k{_QP4"g{[bض=vulHtHFJ"Աr"H!hA + 95\`$L;9bsaCQI3b*!*m6Ք=o, f3!ngŒD]Tܠ*fMR\&fYB` $ <# ,c,An",;0>^J`XOʨ za! nL,d` 0@ @ MZ-!DX H(JL@0-B XAҀpX| AD @8$1H\ؖז}i.--1lWh( ZA2 /R0ڠtpBeb0e^ppA ( }ex@(N 0 @%I!`l @^Dm0GAje@JLj̊g꬚.|`vf yf N ^`faҀjv 4 k HaF2̆m. .ao Km&\!qHbtRq$#.6¶<#0G*,'&#`!Z$v!6rA+YbzBi!@M8}8ȿ,R6S0~|8x0S߯. #8 E~o~$(l!%=̯2!*,2z>~v#7#,8 K$N`.$A5,a@*@ʯN N~@Hj,89C)~^,BA8 `>X!H$M X@ aiaTTV(ՈďPLԊdHXALXEb r]2#%.G2v4|} SZV`ea K-ڠ6! q^``o aР ݢๆG`~} * 1Aj X@8 { @Xpˀ!PQʪhj̊hv`u!f xf J" Nn2` "5 @mF$Irnu KR ˱^rk&& ˰m> Ǵ*tFKq!Nb4oӴ0g#0'& xRAR, #P$G$r\zA `z&@?z }>8Ú2 +ODR2Bc,#3*7G1312*, 7nMP>:0)8$ÃcĂA:nsJ6\`H9m8f9L< !Q) pq$\Zmk, A=DP0 0O! AAS nSghre o<7 @@Ad౒4 _iBPb $& H Rd^iENp0a5`ؔHV||gZe4j!-!JABY66 V BE(AWZ.a9x I< C*xa0dGa2`Nњ)#Pan` t$ rN"`.N5*jdf*jpUiƬh`WXx~u"+ 'A"A$Elr^ o&$kհ (.KBqJ#RrС%%\sr"$8)vʞRq#z!Udqst3ic,1KFjĢ/‹BpyOdA8TC91pV1r\oҏkIXؙ ee4lo3la`okK Jtph hH0@f*/ # dh(TjN@B,<(&a`=} 恢- 5cɤr 1 HX dFmy!  Дa bIDK2ImHDH>-M$ͫ뤒N f r , eG}1!mZ}1C7 E#P6lQގVe`Ĵ@>Ge4Pm"uC) 5lFa @hP  a!xea@i&nfr"V "&؊jn膋{mfW1@د&)"y[|[ANr.*Y#F"B#*"$`E˴bD  !gD'Y+D6z/ }8t8$d9Ld/k//<00#4-/1M"c0*U9փ"&Z8I>20lK dKJa>K{!H`Td-&fЀZ!`<OCZ6A=Aj (@8#?0@$`@̑5YŢw sN 0Ȩdњdwvca$AwqaH*mH@dG$ a*md. >ԑ o!g7͡V.agMiG(c2~l%"/8CYlALw- dZ p` e26&]#eB8IVڠa4ޖ9Dj hA@mFA[ETaVoM&3;%2v Hށ#Y۾I!ڦo`2m\ZnUkfm N`]gn$F!"(k_>=Br:b$.#gRA'JoF A~.}8ʅCIS27cvmR%/3%Q,ce cT2Q. .H#s.asA6e Ks(ʹdߙ36pD^X) /SX؞9O#𐝂VB%tF2ɛ@!Z r_Rg/,R[(PRO6}ό5@ҏ YrDEYعYs)KQI8*1béxIA2HEFV%0!Xَ5J2Ò`;>$V!&NjV.P$IF%F˻wfEJɑ\2WbЉaGHC-+ Xˁ&x%ؠl8 04ȆYEQ,/]bKCGLZ0T Nh 8mP&c@r "&l>%q$9T 08DIA0زq&l\hP`%rb%!`H< bDGN|T*O2G|$L&Ç jB$>D>(Lj>LAdc Ī5TJ| >f Ot-l/RMnxČ{a4?H屔%, h9T$(H@° P@_IW C<|"XҊ% xC gI!K?YC@0\"p$^!-t0Hvj!l ]pMonÞXlFO,VU7.p`5q$6x$! auX1VdG r9P@?G"ġpA@Tv.BjF0B }`.JPH![-l8aQؤ!KHc&z\I`"B`FEDTI+-0 appp p$ (:*, 9aO V@F8$fP 0">CBLa ?N(C'TST48sS:UEMeu#XnYB0XGPX! ѢV3 m!!ЭuW*l7>W10e_} /r0]`3ؗ/D 1|<& ~c#) LBY0rm@Hjg`b4$j0ِ5ơ1pNS36g*6Ev NbKgj[HF6 Pc.NiC\V !bBY )D&F@k*RpL,>FM 8@ BxGxpi!1xUTuX?8Qa'aIt+28AD?xH 01(/&H-|f9 g)Hb4 (`3-E35d"D=)(+8*P8 mp7! [aS:rAp.D DCsʁ3@ydl!r@%z~X"uJ2)ZwjTj0 ݠ+blV+>0mS6. 0 `N@  ׆-f-"P.fOO+@ Owb p;q C0b/r"' (Ō@R0ŌS C ;2H2r`2 u U u P ,GV95G86A87w75[c n3?s7I5`/F;cut74Dc&r5s#9ek V@ v n;O& .I?@0hp +1ys>5`d7! . y0LUY70 2Pap'@cy rpr h@r ?l` @9'0zC!>$?=@=@ c%!RP,!u !_]??~]@~0 !Q .  pհ>~a5E‘])t&1pp" O4V8.qqNF36CE&J0Q@%9qI0d xF)EI y#y P`f E0 %J Cc7Q8С+5WRI{ <0h05fA` 69&c 1)` P[ t0AexaVKrL8*RJ*єMVMtM+ blʲj2.j b8n6 mmTiO6O/2PrpRr2 /p81C1/P@'0C0. 44 R3X7s s/',6asYyX67r[8Gr yPĞDc%q" xU2v"j6%q2 7 A ,@.YtpHVr1&.U13A3G`vw9C`C@ bP[`yvBuSue <@ uŘ@ S9$@ Pc:k`Ky}1 p 9{u ,d_B0 g(qKW_a؁y$VBt@$Zq9&JIGI> ꐇ۸'r39Si8Q QEiW4#m('3#I%SC\& P&?ЁGp{i QT۰"r58d&pH?cE[H @& yPEp6I+PId rCe{b @KL$LPϔTj*Mkkڤ$+n,>0uzmۢ`.h*-.s@ `/, /o81); EQP!S ( @ 0ICr/32rT[Њ2 4@ r`s)e"sH411F#Qgb V! ?i 0U:87w3j35ӹ Z SU7ctTbs-Ps!| F M=PY@w! ˃ r,ZT|,rb:K.2=zt DeU@8%RKe`+%_VcEf1XMl+ܲt5V2t8L2)(] S:wQ%,ȱeZ l$h-`ϋ˙x 疲[-۔b<=`Xc F{&M5kC d%ΠD3/A}~"`Y Ȱ@@cM2l@[p@"p朗Ŗmrԇ"h 6ؤ(M~e#cW~f:8!X% 1ŏu:Y2(#y3>41!?#y%TH"Qc 52ptEU5).!H!HH'yDIcQEe!eNQO VRl^kqamS裏^(gdto0śTq_tI%]ErŗyA&>RegAZ:7\d]=OZ*/a ORbӋ" }8;ؚ=>O@f>9/?a##k戠VCZ#d dG)( $0@ $x#5 Ꮎ(m9ǎ%@ ZX2RF0n 2|DQ$,H%X(yKP H),0XjFYŮ52!r !, ,@K[E tCl d@a巰L%2EzB{/ HK_1o}V1 bxoⲘTC.IB 3Fa-!Px@:qYqBk<69>,A(p4=NKP$i, 05#}ȳ Y|B8,V@HXp" Q" >"@8袐n$$#rc06(цzȑHGXks ` p8= e&9!NrCqK?)|C jP>)$sRF7 4QꆬqMP]*>D PTadAƖYР"h8sbkdq(بIMAaPJl c }Dp9P+6a9xm`8Q,+*_ɦ93tejX#P~I}#j6 E9Jf@f}MOjTé VB `v;ey Xȧ>I1x㟽 (,jMkX2UTCƅ:$b"Rtx3! }XF{tJD"P~{# oA3|1eGtYђ3-{8Y6LLQэE6!YQ$PYf"-Mi+8Bl8(pϝ mNu;sV0Dj@ ̡A~E9:N Y(S[ъV͋AuUpK &''(F@"Հ.0@cam>WH(X$[20i:C ba@Corٌ cXh$T8-ʗ a !Ёa؋{S0 0 ),j KxЏX!Mp."[2J`؀n(`&P*2 =8@Z4ap+Z2=((B}6Kp4MAC2SmpW4(p[[8["D@2AB2X9B>V5X&^XbDbnyD[DaEq)@d}>gCW30LYA'YɶO's6^Ɇf'[yzj7:g8ek9g腕ZJ)÷g7yzɸr_gp_@})>0W(;8fuk b,H 9$!ـ *2++;=0=MH0&3nɢ3mp 8-d0iH q6 *~+x  胑z#jxx8P 9\CT`s;-F%Xh/X؊|h 0 )- QQ1iL8>1  . rQ[ȯX.S R )X  .k?@a!. X@lMzP/eb/4Ѐ,*y1"IKS;ڄ6Ф:"pMSBI!aI=h-K 5"}=HP#H)Dqh}"ю53( `A;K"ABX)(0{XWZvY:H%I%K >i3-E[kNDM&G!&fDA6QIVԀoB0H0Ygj kSV$Ȇjk3h`7bx`rcx~gFoTl]0L)oygu,yؖy8:Z0cЅyJ{gxƒ8hK32"H)9M؄"srȦt3S:̑1+:v݆44I2S*#9K#؁i83<:Y@A*QXO,o X̌K7:P˽q+q8^XXҊ--!pd@0L8XIտ\9, ̂ÂX7 UI[ HeȰV /@,ԁքRNpj@˂Tpہ@H\a 3;4K:)PDȮa/XX  NZ p爏!ROMçC*Y*b2qm"AȌA K#3Ж)![@k6 a4MŁ1Ȓͤq Aڄ@mwՑI*mK9:i NP6X[R0%_ҥW _gpPNnLHmzfjEP 9qZS$YTjzZYe0&6$$ bGm+O:pwÖiTgx҅oD8j_0spa7g dU8]xDTp8QtHogxZPE(KpI~Ej:qIW&,6؆vבdW1"I.""պ$9Y@5[!|07.I|oH5@BK7,@,ȉ -mٖ w ʿ̇ѼS( p 7Z S8|V0XQЀV4]ԭ/ؔ|8۳jh+%Z0\~U6m/i<.puP`DM'xMz(0%$4[zp Ԏ~9!I&RTIH#c 2k6 5 -6p3X44"0Q@}p YJ &1h#i0)WBpLc(@ . R]5A>I=0a5]n[S7e)Xa_+^ EtDvPTNHLN6?xWxYZlT,pbSm5FSHj^0x(;hQg(adpPuD](c_{[O:yX"_#BI2 8PCMHTe$en`דlWDגTÔl(*g \o:yȂOP ,>X^@0lV mYKsjĬ?Ɠg;]qAٯ 0L|>@Pٜ.=eLcwE)0hx[:NR/Ѝ.]0Y!x TFQovp"l9̜wphV z0`(R+/QH⨐!Cֶ !@:$#a" 4$3HÎ,0x8`*1_M+ Yq`MBp5MJmȢ7Q(Ptc x@Yp,0 Ȃ/31֔no5:DGdW ood&7-6_&VS>5P\a$@5 @*S_oOܔN&H!΀W XKA]Af7Z)aq:~{˨o]}dv8v|Vx`yۗ2U]@*NcUs0 <4+2䘢~L(*04WtHu/;I13p"麳:#[,Y#Z0`) $P,0֚*0x[M'9QpO8 jIڵgɂ :D ^HyRr,a+_/ kmպך: 50kI(HmԻ7Iޑ 1,P1.ܺ%Eʭi2bJ2L2uv^Ʊb#{ %$ . jZWnGYv%;.,kj]nB 2-Hd:ZP!~OӞ(6D{_WZxdv  7ی8{L-lHc mI̦)҆,v")H pd"8DC?蓂5)1E08&?Q4h%8EC) !Xb 0X%\0B1f eQÇ G2h(&(`B8݄Ci8C7jxL1E7!<N;0Ʋf4L6d  r''ВJdQG*k0.QG}M"2I/o/<3L+ƜN/}< ̓J* h78LȈL"1oQGY#@P%`"M܌3X`37I󼳂J߬6UW=Vk\%%Ұ"^Fg 0lXS%7AA?YA%A+\U %GxI72'SP,0 Hq(Q@KH@ ]x8ÙeV>a4NB>tUjKqNq䳊|I1 ӈ Èf,q"+Xg][Yrl(@H7m l B谖j(C] +!9 9xB( \0(a YH@˴(=i#[e,t[Bz`0$A .*&DIl؁-[aA Ml"EhC  A21Q< 6pAQZXÉ0@TqQH&SpF#L A P!1COEA|@ԢEEzT.epC ժU JU:"`-ܚ >W#h d1/xP0SM0C-R|[V6>1cԡ$}8 b0] ׾R:LcC:\(Gt ]C` D*DydD9tч xAVP̠p4-hW((h`mmjL֪QgV6(B"I"1h͉vxps1 O+ D@p6"QD䒀7@^hAC+p:!2./h;ZB~YZP )!]8W@+yZVH%4@IȀ2C_ Fʐ]@N:BfF{(_^Bm"r+ؚlH;Uoa=̬230@yM(JAPl1 BGyĨPMCpA@^7ء(pH*Sj U$bEeZ f-|U*O!ꙣ:`m[62"H7DaEC  RQ1a)3rLEC2Z xC4P]$+Q0%WVSkb&M8kR}֊3#@=˙WկUKX+%Hd6?0fC܀!!@ (@ZTEJ o8A WRdC\XN8AKPZ.*]^?V 1. ROx !^9B5@rSG1,H )siA.n1V|Wu LQ/B~X2r p@J9S3&Z#K,*,a@]c1{y#q SD IE(.a ̿eG?ӟ [B>l}8+&@El> y܇Ȑ$RXCX’&Y֍4-X>B"A ,>A@AY- 4(Y8PˆBM%<%-sD(`ɒ.ڣ4J\ EB7!C@41ZF&ݜ RQWyXI_Z[ XT@INB̀7}x_U+ĄD_J\7MDo `5](A0,PAl؁6#$_5`@pD>`@]`prIEhE9p du-@#TW`LC$6)\ 0`uyBBȀDUXc}P=~9op@ `@>܏U+)fbL# 0-kP(`| {U@_% gm(MY| C ]H!6AYCX@,P"B`H)I uzVQU4@ȑ0A AD( D~! ˠC$EJ2(@/]a8 3! VJ,8*(.%*[%"[hb&pb( h Q[<@/XDE ˿47 E-2K*TTɌ[J):ß) wKGN@ @cRոBR5*p`jUa|˹\> 7 ٮ]ܰ@ 7 0,7`AX\?-T+fցGB?P?тFeAB ẽ68ADh28QB#5xTPTlEXL+$ ^/(  p%lf/*+LB^<4t%wdLF'ye]  dW~l7o6$,{W ѲiDȀ|d؉ ؉Xj; NA,hL +@v€(%HG- A٤` ܌l&FIXÅܪ.b: '#>ܭ`-@|Q"9 A]Q0B=!:D@;I ʢ.ң>/*S\/24i(15>RC#,, @b(Jp(/(F2b` G?PzCLxxCmIp@|Ԛ:uS$B1hB0/D3jiAPȎO?(2#GCq^~226$A,as@,ra-8*lfBª2Dl̢ Ղ͂3:d]e%dd-=C݃2t Blj0P@ MY=H6( z4єm̍~JW&xMx̀P'p5P.AM ZAA6Lmg #&̆n PodFR;l h&ʈ~;&1K$S_Z̵\<) ) o(49ړJ<< A6h|n<.)9'BC$ԿH7T/ K5K| Lc" XC|i":772T@Lx5z+Q.ơ! A쌦@ʣ&4ޜ́zcU% ~D]n{6 Ȃ\ض&0lзHPr tӦm%mZ 7}1& hg ʦ6YciGqMT0gtw1{RHB#B+s{H)td|X6, cϮ̶8y'.HILxeÇBRzdkf̬ v)V-T#LQ!C$(ϖ!=$ΣGk5h 8ItofH>:tAfoy#>tE:>g%JLT.LFd ua^x8   8p@q)(11(``6ٌ)M6)3L1ԄYjL$sL1-M4iK06.9*fŒ,N›3Π WDM؄:(d @ lƒ~$S D9,i9A1# (F>fHx|KXЂnCp%@$ oc `!Qȇ0mce@WUVa%I(!VXE f%V{[T1ceqbѺ0{tMTd(4+0b3#`./uޙwfc.>iw8)n96BnAny4HI G,'#}>jk{`v=8Ipc8pj@i(lH`,D(iX 6凤ئi}i"bHx"΀n( H,LD uh'8N#v!fmdm}lZ#e.y# H f!w|'<DbNu3>O!UEc!`::N txL X'x>ĠX6*yp"CϨ0$h8 1$,aK{5ЉK,06@=hzħ1 P$Ӡd106aPqgd8p*xlOxU,p`Tr'1K|B3 X0`5 P(Zd" p P^K%xn&k9I(,qIv0pI ;c8 %Seu?~0qص )aÐ#n!y4^iךv| o7ḻQXtAw8_spA g P2A!ts3?f@~BY0Ї@P"bz#Ab/dt7XH 腅E"dGbiQy FBE)"G"A]HBX qE Vδ@etDy&$nje! Ґ̓"e:RcN24H tB^O хgCPc(=mr(p\z(,0#h($͗V01H1.HR8)&Ɗ@ ʘ(zuR)*wx*PQ݉$ Dź1n޵)0Ɇxi,e)*8 Rm TCH2SvN WQ-r!0IV(0X0R7N;fE6`%$}y=(@ZW,%+Hz279Riq L%Rh؄- takDzwϬc4AY\ᶃ~9nrq}|t  o;5IxZЍ)AAx̗(Fu8(BŒj {xC Q{q:A0W5-PZ#F ʡ~l]F$+ĠEzr'@ePҍHim2ːo.ՉV(,HR^Ex,3\G`!L 6e! P5 LnOMn)\fR2 *xyQ" $p9IŪ (|eAPw'i`m v@!(  Ѡ^:? ϑk&"_n a] 3hD` c$XA0q"0)]buuJX b- 3EOq >B8RM6EQo-3Sزbiz 4СD=P][LrkGMQid ],gq5~g6,),ƚ-g( {YK-m7m psu a!-ݴ$W,5ו~,qpcY?~@9"MڥX vPŊ#T:֕)Ç:>q'.Y8%{ 8`7j(؍j<. Lj$ӍLɄN2&((iCOh0E$ ϋ/")6xc6:XHdC# ,C$6 Oh̐7oԑ.'K"u u.kk̪*nB mC "-l%rf%gq&ZRDrq WD? P2#7kMg7$`0:qD-.'I7{BA} S#J$1J2\ +tJ5I AAs2 Ê=]d$)2Ƞ +uRI +<'0if7ULs<%wzwOL`KTR)^ ~Dm`+ [g2;D!Y()z ā= {죟8?a5t h@&Q84e`'~Dc+ԏ8(@@j)t#F"!G9ڑnT# iHːG$Hl4Ox` x7t,]aHDXևDÜ1^d`Ap1lPAP 7 HLD cd0GY\9 QE!V򕲚Ta IEV +X±t*V,EAU0p&(A ^RBv{`a,r`q xlks/f9fP )D g`aCK> >aҰ=hոA1C@R6 ``E@,Ѕjb GXc1= Yh$JHRMD%[V)8~rþI'wUT W5r fxFAr r~,G~ 63ۀh6Xcv]ܬa `wG؃Y_oH@ȅ`UVb$ď;q*q'0[G{@ǁπ>&d\hAЃ84 ٧(э~pC zr @0-oAeDBD fh^D{ XRX Tiuh "e&o20 KLcP^J2|sU*.8BK'x-(yx|B.*:mʕOcEJMR]իx9XrfT ZjC(yJK$')Kﭖ0NA; ?>i kS;G?!Oxr:7cQ`I8€SaYh.&!Ui2|b,hՉ< Y=b!#@6$$Q PM U%qILnb #y֨;;`(hUkk.~ G qLGpq E28@2ۀؓD$X7~n$3]K~z`" {@_ϓ@OzCVwq)` P*($D"^Q7F4P'l~{_ WFxD7 bg30@@0 1ҕ<\%LR9 &80T01o C2 dxLT$@gaȨdA\xL5JZ9W܈F\3Y2VfwsbsS+ L.%1MU)qɃ/"b l @@ P+9@&b)^3@ k @ k(i( q ^y {uR& I0 @ )!8&4QR0 5@À ` Rq559~?`LrEsfnJTs+oRuo(UK6G@08\R2d%4pAt@@g@>:mL0+kӋ0@ E A`"a qSyE)b~=;` vs(7 X,p _g v~~J@Sq,4wU t]| 2A21ju!W!x ! xO'=/(y%D@D * ВגDDH6 w#h0k$İ Y ]&'@ Hd %N&GByFh)}KEIF3IdrYapH1v}Pupu{EdT^eR+bL*"giL>fy,ŒKr&gwfgKhgcY"TT?%aZ?h`>/` a3^0@ j)0 [  P`D  0!2!Hk e" Ġ¦3mf5 [S*e qVam]cPSLR8G:KȘ>oTv E>s/)A@AJ ~hͥB&P@r'j YA ) { A""^^!1 @" ">p")` `?bH 撠y# `/0 7 `Y01lY @%Xi)R1; k< IF a @ G@ p_̖cMF%fdFK%@ 0 (Ā F@` 0)fJRns+*>>K,*r PPaɓhNŠ.@/zu ?1@d@ @ , 0P 'B?:Ch !:P B@ PY1Ul0`4&Z;% e8 `8* y+?Y~qPS2G2-tjpT6T;8H6iC. Ӏ5Yq #$`@ NppRЈ/8.lPühpYR:<` -%uX$<Ss< A.qVT s >pQU0 `?*D&`9 PE`:SS ŖC21;1 ƒkt7PF pH 1< h r'Di(Z ` m [b+4g*BL!St$q-r)s<+ⱳeem6[ET+8*f?r z! +<[M@9p.^i] Z l)0`!Ilr1y")oPG{p3SB3 # RPpm?q R~!s2@K%q PJI%Q7K=Z U vPmLq p3^YV2`WV9PY0 \U gk0O)Gh@k@ Tuc)- SI Rn:^P P@r>;pg 9d,@mA ,t EAA 2I 1!gE$ >6| #: ٰ7S"f`C\E``(@ X OLVgtFɇܒ kN e0 Z #sL&i@&Q(e"q0< 0 |p0P*m@Y6fnvy'l֟v[V,[Q`K,D+I&Lcr @?rSw  @*=@@1\0p @ UX[F` !a+C:V]DʹP:p 0 a .P  NA8)u~k *Q1s"Sc6ྂS7c 7d@qo֥PR#f#: p /8R, mRl@  7.i P`XpcP<ې  <@hP` r P };Xb ԫtrJRpkvd\x|voWq]Iaw*A U] &pEI$]ܕx^6D0 U; 5`/bDmD,ڮ} z O :b ~I65@1<'u\k i|Ġ ,Q`I IʔbwrFb)yd|.V(Kƺ}< ` P@D AL* *gs6*KKfbb*3LLM0PM.k.+/@0Eqtp@@p)SRTbp p[ B x` 嬀aW /IaI5 ] Q5a*RdX@ ZcC,srs*C Q6I# f6˜QF=fd#툵MD64 $)ȔrK[I(ĭXZ>p@\5U֜`V? P'Ҧ€"G3lmC[E6T 8cqlWVYY$·Vss'~HdZzIwOj?"|z2iL>|7ēpq#w8qPKq^x࿛//\wɋ ş?ʸZ)$ƌf90'}p 20f^80ARp%yXwao$>xoyћ8!>Nd0xbVC dz!$ b IG${7DQ('ad$yf oȜě0L~ hcRq&/mk ԁ6H=68GatDT=4=0=.]#PE(TEfJ(alÖ3(’K, XEx\qErA#K9ZhY[VD -b^@UX !!TPB`%< FQt5ܔ]VdPX"@Ieb d@]{&X11!XW Ml05ل|$K?u9`㡦n"(Z(j(JKbI.nIdm{FByǦG:Z K,~[|;0(ւ}WW8.~t"fͫJ\Y hָ"L9!'am,$H[zR.9Q5: ڙ݈[vxK8rN9ㄋ˾|玃;io&).ZH(Ѐ` @B$Y  3d<1IhJu d0$d oG/'I&F RE/:b(ЋrI2VآXE9z&3bPT"C'> ŨOmQ`PET DU)$0 iX $/uL,MȂmf8 MYD9hĠ3 #04S `` gc V$T.(1(&Pt+C_V@0 a$ Vk\F@u#AQfPr(B ӆmq"׳g(7r&=S Yp YE5QRiNsHc?EM u'IƶtIXt`!`@`@VWEPH8\?8 mK cV&"X-5\b@%$; .!cѣM>7AqƵy#:&ƧښSq[O _{d@ Sn7 9H̀E"!fP4^}2Ã^WA a"8E9,+6|Pq.Pp@Lb A {uqA7Ih -ʘD$OF,!StCKaH(0)  $Fm[L954x!v%%NUus>CP0g  1  @vG+Xj`n˴@ 0+p`(ۘv8@%;$BXl=4?(ݳq:Pa7ϓI;fzʹ^n׽Ogw_(q-7p`=qy`?o @ @ |]0pP-HBA 2 %/^B8A5:IGE %"aDEdK41z00IbY`dti`uF}r0"NHW.sSBE0|#'\dJªFNA, fOJ?/Vـ2 n1M+bZ 99Ȃx)5 d@O4 6Xod8^@VxP5-(b0`b t:۰:-h-⸞:@!;I-Ȁ3.ڇn$ЀKڏ.ɋ Ria) yx /f87@7 j`1( I@gth峽g=ybd@)2aJo@F(d@"PЂ{^˸=X"(*1`%(bd(F ۻqpJj~ L1ˁ*>(!"ۆEڀ;;'$[2IL²,=EᲹl22.$I1@D|(Ko9QX( Qȇ.ȂO p'YhH*K (%"9(0 HP ǂ2pFG5H [ݨ28X~:ިAОRM8i+a;R ]MUPnHQ1 (IX B} " }P ɐ'< 2f@R8b)ђ(D@tX0@r!BU0ЂrX]Kc!1 s*yX7%xc31,1bq1~1؉X#CB2H:E!$Syь$*%MZ2CjNʜˤ1M$LnigSShтxZ삦x"ۡ0mA8D2 ]"wU۾UP$aXpO4lzY@|^X(XX!`!8F(l'pNG'SشaXjpBC(6E;=J-y( 4yÚ#ċxi ^x ҬRQh }{#*zH9VXԙH[):XűX99[(60A8( W˂ɱ[Y &HaihJ8pxCANXꑺOBU@Vi DPa_VȞAQQ؅)PIT@VTPnzه/nCiIY0n3xI zfT~XF (VB[bXLF~WX$!|\\jXKH#||DO ()(#a`Dqq\[r`Z1(+$MЇ(؄(d=ٴd2ӤMI:O$Y`0B`ޔ2b  ( wY;10 8ww@]@©ȁy}%ZE!5P UOV"۳q%XH{h|50^WzP 1QͨiCi+Q=` 7TT7QU^! # '=.0*GBBh P0c9;y5Kp 9,O@xg+UlY~wGhG ` .J+Nuxmv8ۈQޮ1;QJ-Cf/bp>]n@+~XbhuVʆil0h< q8N9!3<5Vo(<+J`4'a! dgr1dDd)yB.>0D]@ $ t0׀HT5V^ż偉CA тÿQy-Q0$0?I0yMS2XZ[نkC `Q8QsohS0x z@g r+P 43 Od"a5!%L%?PFhshԁvЁwxgZ`)apJQ!/>!u1PmBHX]CF6RGɺułŚ5$$ #7oތJNʩi2X)cOX)ӡC )tڱlvS m~@-MܪnʪuӏPlYg'9G `vͫw/߾yasĚ5l9,/xkI%41ʒ ὚#K&KGȁK ]dtaEJ{j2K*e*t8$,˒jPvɒ~0S:8d 9܍Ddx\Cĉ>hfTH^H!E4qH%T`<, eTNsa2eдN;qN2|L&#(Ȣ4 :h?/&(`D>ѤM DF8E|t.GjK( 5%$L6HD>HI vM6 1')fcd$ N B6( b$;Հ#+Ȭ12 !bJ1 3I"ۋ7Ȕ3 1†" :4;I0S F1hJS, kx 786&poа&{XC1av )pLpV10A ShTm k H$! QM>, aphkx#HS QN>ބ1`JfcKnJPE$FMT#[m8qetr)8VMP}RJ5Xl YE@A0@xlYh&\ -0yx ȁ029]p5w8EtCЈF!%cD)J("(FqpщNYqG4rQ# Cc(F5(IpҐ#}I݀"2I*&+"B(3HjSP䟦@QjN<DcT3^!pJ6M5n6Jp7f#*0eW. \umX eMH$ыk#`'1^ X2dz \.n7# lX>e #Bsc2: `C>D@e;Xkcјla [tLe [* LeQ64Ta  1@ k4"RXCk8QP'0!$@k8#ĀrP- $F 6$ ڦ~P@AF|` iN[BG':$ t6H ԃ)+~(`EJ⊑AukMW\s%j &w|E(ÛCq *PE)8Ld0"ZЅ.a= neˆ FO}tM(**C}*+dy dU&S$! $HkPKop@h@y P0S"ȅ"셍H0@%nXIpyhC P )aD:PqeGPd[#Gn0F7qJ4\#Gj@ђՐ '۱Ii@(2 a9)xR" D" uHFЌR9x f6ݭF[M5S(cԂVX6z1q 0K(:rtK $ ;e-EF/&jhZ4qb qPC0Xs(@<[JtW4`!Lv!=b-b@ֆm@k/-hVBY1 Y <8@5bG :B@ p!QV&U "jQ0Kc 0 Vi4E<3Q}P&>87:x^f2<$s⊩l* ]  Ns#:z9$ jws;{4k~~(l/3 c+[h%(A)1- `ЊV|#psb mN$BH:]X_, 32@(e#@ ,A 8NyϿB.D 2ĀTP,^ۅNCA/EehMÊɘȋU鈎%CX%ёA%<&Y)@<QtC,U?B؀ I#e)J4$I& ,Y(-$-+5a+ FR,hᄫ JqZ, $*nC[$B3a"h1\܀ 0 ܀8T]%w-BT$7lC=&K=q0 >) ̺iX00HL@( , (@P q(ZtA Tr +@S/tRQ{x77M/@CUeUVAUyYMPa4J H!8(T Mnp t+T]_m%}\TTH~8VV 13.ALV}ܙi|h^fSRlBQTG"C59%&@&HSBSr4V my%#,@X AY@@)$(Cҕ8A=$tJ(C 8ܨhDtD+E*)_di@d\AczA.Ā3B.C !/<dJC ek"@QA2CEXLQ}щ`L$IIrf ^HQ.ɖ.Hv0.D &eR{g&`QD"$A! >A=D_y  N(  BrZ!#EC3/LB1(S.?>..  \ntєpT b@LD+nAC=T-u?AA [R @)'ӬAe+a?$,UR^ PSuW4m$2o0ϼ0];@q UsCi6@@sC֔/@gh-B9< в2x&.[$knXQ$쟍H,шHHH٢qBrB'r ^gv6I8tM$( ;h(@D{:n{≥X|`1JIR44(]Z)h=hhA,0(ڷ?0B9dfa"3 0 <B#K2 h\*8(Fwuʖt@>h'@9@'6)(:IB }\LDLpL(5)v,ű/" ̱yʂ+`EHHpP CPy@zN4  CDtÞVMt~\4p F>Lq= o5$QfaEEdP?<&J20Z\k`B+$NOŘGQb xJfidcP7+k#TN"l%S44A$C(9N0B5Fl\ x+l*-1$G3,2$mL?" Cy !C\CY CZ!P@LÅ5@&lvd"-xm_hQqm!'tHmspT`I9 *@7tC($yV@-\ߚ "gɛ1 %D_hI7xn!B- 2a.| 3 ˦}&:/ CY$Ӧ$7$B3 p.2BCr)F9Ђ+lX ̿ '(F)B)@-"7Ӗ)i a*>> >Pb@ zAjMTAI|S l sB>, i./)ƽ=rܤlkp7*A Hl$_oܕ)HA\!4d%rsYTqUtaYWHٱZZ3 d#2``qQ8Fh +eX7_xI2$?;3,&LޅSZRN?0Oҡ:܃ݰOwL:U(H@Rɲ21DxR%3$pDG4-sjhy/`@*" bYH C9.P@-4"HN-8l&<֪y-XQXX<H N_`\&6bʛm)08d""X@d>?ZlXԸd@_s+,sHX P5*Ly6硇vdMY8NfiȇnpAPF#BQ".g}@l V"N P)-bU)U*J UGb$x ^\ pF)%@YF`-8ǎx@'D)'x0 %Zay0b'"L)Xvz H YB{6֢c(l-}p(``N~?_9`h^s`4Q]8{D耽  Ew@ " a`X0.اk`{k!cz87F! P-$A5<j $T~(D*=V[Z)@<]* gu!202 c)É@ĵ$@|0WCKZ20}X"?v4z  a9AApΘ<#S*C)%Y2IҨEvT _p "+US"V*?X%K]ZU5t0@܃կd$0b;.؞Q[Ĩ{zA mEAoXpt=^3zr+EI:ZHZ1p h@ Tb0B2(YN& d(lFQle!kG3Rte ш gϞuDEv [qr0 %*e#hc)-%0I l pZOU'8NbUFŐKEV de[:ad@ars-EaqD0c8  ++ă 1@4m{7[4QMaPfeMj4|pg ?APGMo%n:)!"+% \ Q8aXbH Y2 adQd2 Ab8䐇@4"!@Q nňVȀ](2d<XT$6 UR8`5f # 8p X \F4zPf0n)A%,`A?!p@=AqRpAcԔ,WHЇ5)]PRE+[ |JP @2V".uyeb,""+LqXHzNhEA@$aa8 -N!HI`/f,pu ::}-ч7h랸C"@D2QA[ʇCf3ώѝQc3DqR;]K]QTd|_tjK;i7Q@GzICE[FҦm$!QUD%(A ᷑dx12(x \,\xuZJ-L6_n0܀ ($b4=x#uB6) 0$EQsE[*d b  "*0|dӬ5 rK[٘f6٭&6f5os?X. l`Qlt @4b0kt`F, ްD0^Haxȇe AB!Jj¦~C}N!(hB52Ŏi)L8(6l,@6\Y>`;%0b ` |A+ 0 au> 6aD!dl0!`^ 0 t JfU,pdѐ0zF WXӬ[H[K:0EXa i+ ! flvrzf^!4@aab2::*d*`Bj;,>>JB< L ح}`nDfeVe|FLXX\* VX XO$dDrH8O =f! AĀB &! |%ZXAn.̘f `JrL \@桻p30ia@&![Lh.,a'Gm l:&&dv t Ta=1p0 Vl% =S/oXp3ct@XOF B=\Y惿e!"  8֐hoh@u"+ `ab bmȁVQ,jI@f:q#ca@MNځPd-N0elFL g`J ߀fiL!Eœb%.jbJ#&lBn nn̠j, (vsBA(ʫ1T!$(P tn@ bʁsx -U ޠXpA'FU.KL\` 0&``a>cp(}hCDe5^c O4R#ЀaXEd`EV"v+f&r jހ$֠$Co„BvdZh 2@@VA@=0Ŏ@Jv( \ RaxJ$@8al @`K, @s:L8p ala,aZAP4  ZI?S0>krv%a2aXa W($d(H, 8[ &DD([> + >4 t!`f 8@p,`N  -\ ֡FGbB>&K֡HE З=> KteC|MKkKifJM7&iT4@ A `BNOQ1oA$nF#RP"$o>of,p1'.$ca1,Ն*'$\)^BZpAtA)jVAp>AX-a* 51L BGn! ^#{V6grtr|Ld#: ~0ou6~'7ru94!4` Ƥ`@~$`GNDA>L0d>H^TdF0`A (C1`B0daDt(!CeY`vdXa@g'D@FSLNs XSǬ$Daw"x $xJaK ,\&ns<! \P`RPěA=wV0!rQ?ai Xit@!X R(cX% L P8@$6 ZA hV9Dڠ.lrp4{a>ʠ m7~I|7KdYqJ ٭cMބM4jfj߼׀g "XHP!3:x@"&& $%2 b TlL"o!pdxp|pԪ'+&C2BW\t"' 5@4pRh(5.||\~(oC7GLO![S`5ƀg8UƁ8` p6A>vXf@NX@0!nH) D+ A T 1ա=$3a(Zt)!%GOՔN :Edd8 yb/NA`t|9A xoI육B*M0" &! &2=Qltp={PU$7?o=qEq=,0Ghkz% (Y [u AHmE P?i4md-1( h aL`Q{+ȡ>w>7>Z>~# hz#@Z"va@v!  `JP&$48$0a۩ &x D$|)`n8!y +H;)$G0! n #BDg ka@A@#7>!%šqGBWAtBXaZ# F#W` `ӧ5l#`Ncm|D?c#~69O:9ĕ#'596 T Π$@VY@A \$ a^ րVڷ BʫO1Uve(E s!e ch(D 8M:;@svAюgt `A%C0> %#lc#M8sĹcl|lճ7Iti+K 2v aW^ÊKlXf1PRw/ְu %.M4U{0֬ $Wb„9P/o@x3} g!K]h͐=cF,e!̀s}Q$XΜE2 *ć2}}]>{?{2>]>,Yő &(j_KTK찓N*0b")%2&!(d#c6Hи 5fcƎ/ 7"4&2KjPK, 1*.d 6d2ZB, l ,7$A K.S  c?K$| p0J0PjACb噱dZ t1Dap(b,p&PAj h0G>l{>{h>뭛l͵ FqB Fز0Z>0l6000skR UÊ7aB9޼o/N°7PFkHp7{3$ 2$C*D#4҈94B Ca $0TD7+](K>$p {0lm -D1K049<<Q/ #90 +0sr6M%5U=d !pr}G/aRFc  ] ^:";u 1a!RH 0.`$sP\H)B"#HRhG;Z"2)H*-TJVz*Ġ btg.P\q`SU JlJ6QƄa (ő 7@2nPP%,\P#8$cb2 e_+V,9 `QY0êp[jW0e,8D(lYʂ]5M܀3L\-K{H55k< 65}p<8 HF`bD5$/cg a$x'Ndx$>1Ce*SGT!f$4 HBͪ1|l`KI`#< j64rZ|X@\6eKE$b1 [1AM 8E%|%lTZR'ĩV/((3tqxLr #Ds8I1.Pt^9b_w06,%pchvY=! f0`  K3o81y#ިC+䐽OdAoMN` gkڋ#:e$ۿlwȄ"2D@<OA\; ~<ZauFX p,](`:*W86h@ H9z&hG.ԣf!FKю. \ TĠ)U`prAp-ѩ, l6bAAP3HJ.9|}^*X@AI]U$@? 1X-_^V@p_JUejj3\ΒVEGaUL^MZ:fi 3 )Fn|YdA E$ ll@0 , db  Ƽч*_. 0j*:͊X$AI(Z5T 64 GL Q eLlaP`@ \@qm!xxAhĀ} ВK.4p֛ !(>P.(#|Ӝ_#y Ԃ ([&nXZLtA+quv;F: &$*b X-f0p#Q!.! uPT Y孑7 6ּa!cd0I@%:`4':Da~(Ov!=q{j6N'Kc}Ўv|pPߟ n/L#ŻQQ8kCDn7r HD/ _}E ـE " bDvcc)B& { 76p^b$ 71'2q PPP߰W y@ 0q'$,B@0 HH hc0ؤ ǴP+P+L۴LLY++M,m,-ΤiRLBMRN:% ֠?@ 0EPtp o 0 pp u7p $@ lo#kmxZ0nen21 .o/S< S#SbÀr0I )046u!@ }58'πqQTp [  \ UT  P7Vc;Sm@ q]v L9gvfs0!< Vu kQ %X 0 e42<;7#|&` lIP< }Wd a I>GTyBO}pe 6=A I` MP ۵?lzwJ{0J{{r{~p e |^|e||Bq &pB vB+6 r :6` ?# : ` 07(0SC7b>~~f (#H"ـ/$pcxEOJ]Ep)DdC ea F.x7 [ ) ƐP ~Wh9p0` >P]@ RAr9@P+{Ѕ+@j4t+ބ+‚TMKhm(Lr- k-)-Բ +t;-D m h@ aL206\p b` /0lu7P0,P@: +QBYo?G>4]p ]RDJp P.hy  !Pp@ w  P 'SU o` cV`S!5:G E5u0q!}W0t P @:\q:Y\g!%;YFQ ` =OC3o20 2io` ~#~cG V}7ְJm5 TWq' Zh|epA0wy7c ]4@%㥲1{1k  34pz |'} V b J!bBGi !p 3 ~f!MD#IIEBdKEWdGDE(`f P Z7  հ  %a EioBҠ01'pe %@@be`6 Ȑ WPȀ+u37RpG6pP+ +@ NM$,KLhҒij@ j*-r.jm.0irSVEP hd @Pw%b9ЉS )Q2(6u'@ѵS2*Snq/̮0%># R 2% /0Njs Fu:_3PH*הrZp=p[wp- zU{j95ZV [5}Дi#*\pW]qTaz:"k())W;kȫD41/<(pI=11uP , J SʭpWP>eTY`s4=`^^Œz|)KM~P{H{T_|@| 1@l `& f^}} Η@[CжLEfk~j"0g;"Gb"2r2sk1U AY %]"2%o Gtf)mT<Ip 3 TC㋗ @8"0E6f̓ԃA۝dh+/j( 0c۠ڔMՔ+յiܻ߻M٤+j5Bpb-ѫQkPE :@W `^İY 0Va_(QEv*eJ] C%.G `ZH @Z6 Sy5G6U6g 0ßCw-Mq > # "ns |[ᑄ/ X~j%Y(9bZ/SQ3aPZ<X@ -XPaB QkJH$˰f2Q)H2d9QFHe#EjJ.=y򢙄:YN̛$u޼ d'B brF$pj5P\ U+o |ke  N0ZX 4,>ܢ!Gz(mаah ܚ3fwM֬Knnlذ' )H׎"}=)F?6 Z-kۊyH08"0b$ր[edVYU&ae.Ⱥ oCIH.Xa@PAFQCsi0 eBX $@X V009 6eI&dWڐEp,agY%ƛ^&飏5ꍿc:(0Kv@rkÒ#l[#8|^YB\&hňV>ʹ A“-Va&ZKZsW]sRn 6bcdu^u\Kq!BV\pA$0!0I›0p卲#5od>`0΂>(fd֨Pb05t%xCby"X2DCC:0? PyePYB'kfeVٔQ>rP6"g(ui>:81dd vc,BI]'#B $ Ԙ")h"4oAɦfBe9,f@# '^cp,oVcc ln71l :> Ox؜,Ĉo,`xZDRIeTl$|f- 0D fn&9謞6dn741f7`jXh"xv 4Ak;npc6W bX =)P5%iaVaP:8ԡD:QŠXD #HF- cBB sţ PN2BP:HJu3x%,!L[@0 @axs< KAb5l [ALRJ=@}y2%J%N=FBx *paUbvU`A Z*E)k*X% ,^IS1jHAb1 %1 7TXbxhP:ߐЏ~EM@C>!^`Mި7A5k"F':1J d"["Q.[f3zT:5=LQgʊv4äxӞj|٦zUY5ljkҠ$ 6b)h$z36" "xFP`ddSK  ` ): hч%BUcC). SB `DFIĀ+9K0P<\чy 8YPQ_kG D lE{8 3d d>``j̱%*mx 7tC@p Am?7awT}8̹ mh.;ñFsnl8VP6 =x/zH ;p!`*@ ,A@D<х@# BFԡeQxP!.b+XF1LVFr)8aeN\j rT<$fFniML: 'p(0WZCQzdC.a [c\1QhɏTs eUMh0a<մ*ŬI,F\:֛kYYXх[(C54QT#.HWM jd 5:do! 9-iMCW/\zF+ЉBl'x&>C$d*=`{D0E'CG,v>(=5)jJS68*Ҏ?t"N}jʀUWke3[*@ HFW}n/ֺֽmp H`$vL735H< }N ]h.R&(7avUTiѦ%ࢗ[*+Ar !hAx-&pŌaw '78  v7njp7jvCFy.:QM  ?nn_`lct@5l`*X5Ip]A@`U(2Vxz @"Q1u1!1 62:#k!**+,2VF EF<@ALEg 900 b77X39Ȃ:#k(4i#`K%$#[Z(4cph8Cu!8QaxF{gLH`@uhQ39JS99?zv(9ҚQa_X}HpC fȰs(Ey7pZT30ȂP3%  "*a+»?bx70RB[ 5xO90gbI y! J` h(1(=؀(H( 鐎@Q @bZ@Mh` 8@ |X*1-'cMj$Xl$X6@X |j#32Lj#3eaN-3@d;REQ!$&A !88PPdPRS ȧȐ:$ aEC;\CxQ]gp,0,x`oȂbIIa;dpE0g oTUhW%= =O*p=7Љ3:0\j" ` 8䣍pm *$ >H #8P/xctXJ(4/@*(/#-Jb(eqqwЁԓ61 is"' 1,NQF(Nhh ++@̲-;(# 0kzAA2t3FA9;>@]W$# m[;cA&9([?M],y36+9 O & 98Spfz>Pjz_=,AĦ_KAa'ejX #h6x" h6uyM9H>R$ `‡%Q`ȇq .`BhCp xC劌a ̐ 6Q?\e @ЀAM>0vh+ut-2uGT91PMU!S_(UIUl bU1P,κH+xae0VS?;$|Z@{ZId(0xmEIou_\HC6S+hHo>JqY~  C5ʠDxXa/2 "LJz X ҇ #xYPQR0ٷЍB@2Py;*xЂUZiIЂJ,- ll@jV ͢Sd2e2e!`!=[aa?,ELN(4S\4O4IJѷVK0c3 jXZKM]`8@6A=X4j` ,0 Nσ]ɻK`BHQp{. E 5'ɠ ̇PSpfp[!H4p<X0@ $uS)0jQ PQS&`?Xj2 l%<"r8?9LչyTU$TT%Up:Ƒ\H11b0. Ȩ3@a 9;4F3@O{Th假:@|H >srr8yBfqIH+`W/NxY^YEH1o+ 5XZ 74 e ߠ BȽM|/`#[IB2ix`˷ԄM8k.䠯K#?ڀB\ SSdlpUx~0H0@!s$-j" ɇ| #eƄ}5m\+jBQ?y@Ҥ&ݒ.C9{P oȂo# Ф]oERJRZ0 (:8@*j;X,OK7N"*Z{5XWtEmR&%Dbk- ps\.\P} qeZ{{Nƅg{j`@ẐM  |Xjf؆%hrr 0pd*<돠{L ب 2 3EG) jشQeXZ\`sX oJ Pa U^#uR3JXab()3 5" E4*2HE5$$^`O 3:UR)e*h)~`)e'~trf'eN|&&ig2&a&B/K$ɠH죆# 頗"S8:h3͘D6:abEFB & Q0E ($404%n]L4wm>Qv'C?cRTsu;NK 0ĥ-}Hj0e-pY]mZ@{kHE΢+|4[Rָ&kFB*Kas(tKJ 甀4 xgݍ6 U$|(H`D|x# Y Y  i :($(@" a9X `T(`>  0x#Hc4pCb-q bXEBz\G1%uJx⠃  (D!LA{KcDHi< 9MsԀ(\ ԦVY)JA RSB*-Y j 4 y,cff0/6pX'pE1+׸Y~>|7!kdTZeNlya3'$-]sŎ0rvŠ]ȳ6L <~AE@"`m~0I(*V4nL b.N(h+$R+O~Sh * f j,&1}bȱ F(`Z0 $uTn+[4$DoR׼*C \r!9 ӛPAKPzZWX5qf;Y;j TڵwU-EO9@K#!PS"X" 8@\Pl8F[-hBʜLɤ\=8MTH64OE,ƢtL0 QmM(ԘL-!Ç$]H$.ଜT1G5Y;hJńHP2 B,)܃D4`aUTr@]UE)021WֽZ3h[ 7@"Ű$h ڭ1G1VoiOp E*r8u-atIOyt|R@]r$1a;<@ IAh(A .ԁ,,<  Ђ,߆D>yA%\BL] MI&&7AT 4&  q;0Q߬XTB @g Õ̕(]8)Ѓ L ;YCCqY I ` ̠ `\ >ҡuDu^$a !PX\ϰXaqZA.<.p!yC6(B/x$7'T bK0<^A/(T$(BC&D7XFՂ>tԔDL6",2"\"I| 4\!U.~l-@62\ 0?qypVuPHQ `CV-ͭ[؜AMF $@_)C;to#bYGrXE ?B,YHYةW(dGA>ljatOFhF1JES@8At-Ps`^NwYE`IS0hIB`P|F^?eZ+$ 0 \L͌5-8>T$[ V߃%XAdۄM9ph B>C;("`KA;,jVlA_9j!IY%qٜ%}%<!/5Ztl xZ,um4& yv>\ A|N@qAh/Li;!c a;A:adS~ hӷT(\zh^4p@@%bʜL,n&C-fn P>@)v̐ Lhi,\I /&I1M5d6A|MQ@l@Ld\*c/yʮɆ\D>d(lͱJDNݰ`ΒtBC([%Z% I2-xPЂq(_(ly$+8Dr>dh,k"=IH<O#=Yo8RACo(FT<ͼy UQIi+`11H $6  0\cM`B6jJD؜ `gW%Ȁ)V2`eApK0'T#ߡEZpAd-d[Hv 'i1 o]*̪6xFߡFl|@LU#<$hV]r@qyFNn+OWfw e %OTMHP`t]Px"xp!X0$l25Ԃ#AVlT 'AЁIQxI-,C~&D$B 2<؄@t AA0 `#-*`ȏ;B#5R 2-9 áEZa Y8w v"h98ky f%J5 Q-E-R*ȧ1l _PG:3KBKf;;E9V*ec0#o8ƤgKGÌ[2)0쀎."c>.dIeL?4zČhRa2dLҴ.Sǩ (1t?w匄}U `dA([o2H,XDdD^:\Q_sNaE=jRhI@j#$g!g=CCJB."CVþAhgHހğEMd1JR3܀q$vW:(ڏ^pS@6{Yyx'yhy )Dz~ T9/!u ڠ\ $ %X_ƁLFXV" D::2SSad1Z52]b`9F&*7r"8oȬ6nQ 6t䈭K{l6Qt6.)ٶm˧SMkUT2vԁ&M0`v0495\`M$&[MjX& H{. 1uFIDE#͚ͩkY!XXYrSlhb׶yJx߾hsua 1A 0XT7 * `H{9jJ=ߔ @=nzM  #xG1j$x&KÀ;/)`"r  ẎXPD O}h,mYRGձ?p(FՀUJ rC)S-yx<4 Vw 3A@: 00^r 3@6"UtAʈ*`[`=:uLRf8p ׸эu]S )"mҫ^0xf1?A0>y29c? 0 uC"qgQ0Nq\T4Ϝ!4_ =zvB JOĉfb8Li!GR"ԣ0Mf=DsrFMPMQp)~K: )SY7hquDR9p+i hALޠ(p!oLbB5 l+L+#`BB<s|f3xP:`.ХbX`zh&lhCN@4<WJP B*#YVaXЅI@bXt 22AcVk|hmźlFH7nFaè`quCꐱctE, aB{2f*/63 #0PNlf)'iCR d""PJS iIz2jIQl-v޲*_AKV=N96K[Rqg@ b $ $.!0$%p* H63k#kjkÀs{p*t!F, |u8r>WKD \ฺlGR?%>7Fӿy}{.u 0pJw6gW/zwn0o`C吾ć2H?6)l!t$ЎHЁuP<yRt( P5b Grp2a?q&x'[ LczZ!B9Ȅ¤.E/S:F @Ђm<-ll!EIP!$haҬ JDށH< ,YL!Z ` L ¡ѠIVi]\f_bڅa&}90 SR!d ! e^ pNSPU00: ʀ9??O@:`k `fO~mN$o6! (ppគT", -&p r,rBm@*`p.za z!0^'0X$ Ȑ JnOQ3*w0VàbIEjc̃v'N :tkC;Ž}~<!؎Ax=`+(>9c@kA ZЋB8!ǥHD@bHX/7>d,jC'[AdO8 H @LFaJ&sT ʄNl (,lAm-JNm*ljj@/OQ 0N`,j  QB @4` "((Ic Ρ> ΀?O  ( A>a&@A@B' ùP AVsa-l144!' m_*s~nĂV1*\%%(qT .r&N,V+B5zaK*up! 5KC>AIHX@縱3At LcϐbaJk6VOQ66(=A|p}1;a喀A؎!!8B!K/ A,c& vF7(7~,o Fg&WhtU`tC` 8C4TWr*IcH8,բrs(zԈЀa 6!˂mD*1Ȏ@E7V`PP< `ȀQ@da jV1! d/ `ĤB A x@TҬ0 h0!aAd`iТдEj s | 9llǖl]PҖl}\J-w!F-n9\a@֊! ?>Znk?k$?K>6US=Cq3J$j@6Nv@6<0ƚH(F-mJ,X"TT .* WU' T>p7 0>AЀrnv>LibAxahO5G`7h"DP|zKQ< P%;-f٦ xn` wCB? HkA`ƈ٠J2!nܫZ`7Z {VOxF.dD@/f녲BZc4W55I*7N xbha\4$qm$v`V ȸDRf 00aOy2AzڠeT TfmE@h r hX~Ydhe>0i@ A7#ALjѦ`kщ9`ll۹9Q` `mCm㶞9C q]\ ?!o5> >?7Csg8`h `uea-w6m_a@N@&&r)&o-F+*BFz+p~-pLIW-j7-NAd,d CGB@ .Xz37x4Xϔ6Yt5J`O VOKDW. pk;x :L!n` @ "#>jAS?SWGc 9 @[ fˆӆ "8n+ xV//#D@rEn4Tx6Ύ†ĎIrG!/X la` |B,'Gr(@daA1 V* ^`(TTVrH8t ,Cf@d ZZ@7 ! @ylyvol۩mɞ%cXq:?cm$T,4SpT?s2p9 @V:>I>ct݃>9L<`pBmW}zmZp&.&&)⊬ z+rr|TE"5n- q&! 4۩A5IA+ { 8 t*3xW!:;Y1Et$N#; :rWš@`A ^>!kx>?$@M `j7P[^{.nҋ勻=R'n.@ >賡2")rڣ>9+s>ƛ:S, ϝ+MÇf11#pɵZ`MQܣoO [G]sIMٰi۶M)J'5`=Z"mE9XT}6=KnJr+  $æe ViF?~ߐ G%Z&˧VFH<SsgJ: ްa25D M05)ݼw]*Oċ3:xΣtϤC-'7&%ժDKpv7[+'"ѹ)7$_CuL13 LHa|S #%4xap 7\@p'iC$b2b) \q \o:!3V #Ap!1L5Td8NN " h3e5BtOqKHs>_E b%l0@Q)0cs6zL "IP1x'=ĠWxpM W=xPz| 8:A,t!xCl;ilA*,["1QE<A.tTd` ,HqOAet"O!O|jtN8LS3E$C$ISt3EOHs1 Sd!,d.$D1~2/qV]: 5<9\_BoLP7}ż 14045Z㷵r RJ0 qATG}TQu҈@)&ܤw$M?QevT&U)D%qåkm38B Ch2L2 65$q ~2 X"e' %YhZ#|Z`0:X?Lʔ@[nMtnc>r,s׽~н 2ֺO)SNCEo83tD QZ~ß BPgAFFRblhf| Jd~N7G#BH7<̨H;L6 '%B5X*00Q4+X1 9 A9BO-B9`rfJmDL h2Ny WA4kd̈!pJVFz@ =H* qP 3!0/(_BF9ta}HagCt,Uz%CjPupl (ؿ԰xCa <%x^bˆ?Q0#CLYp4k2=EvEfsjP'Ŗ},5=}C} d0T6 &/SC!A kE^ 0iҾ; BSJj"!i[[’E:NƓH'wl4R J"|ꄤqV.\#u1t-Y C *jNIB b 6\ V 5*Xqq\M Ix_jJa9̂ .X40>-Ap^K';'%x"`wboh &>0E= 0A xM3`߲!\mFgpC:rJ_0@N0/BDh3:ۑCul$a$&F7$]P UFY4#9B%##P&JY&U)m@)]`er `P€pt BJ5m pp wp ~g0,‚ @2t 0^0kPiՄhB@A.d &Tk #03OkDO Dl clO0lf2uxQ2S5@4qK39y3v U3xNtPF#Qf45L [<0+l5TiCT~49a Gf378OM0pUTwDr80"@'q,k, skPssZ .  W<'Z@.ވ 7:$+Uu i%p0g=elG> >[ [yu@  a < (3py) s0F` P p gzz:"a Pz0e[e"QvšD!="#DJ"9t>.R$f)a~hR SD0 .tbSEp&&2M@ W(DGf'f5VG17G BB++@@@0H0J^PȀtH= P)ErHנ !‚4K`+0d@`-@aBtt M~.R|p/I1/^O \OiH01f`1⟴l2 AS 2K@39ÈRh (/GCu5 ƢȀ x@* ? Q0(TV)GT1:7hTAB?EP ]8d0 dac@ ܀gGUrkh)AjS H;zU !9$xC CPP .BQY,q}ŘJH p)j C"{vi֑hwpB90 Z@  < " ]58?sQ`ה!r #r$Áayz@u ?[M#!8"D<JD#.Daav{-2`!" 7~P 7WR @ MBE|p , ֠R7Q9sP(~'_C~6q0`$hEP@f)ǰfD)"+DgvIr5 T-}`@I@ :$,4i3@k@pg~ ~MRy>p]/21 Oԟ 1`00)Ї~P3X < İ[>:\@ϰn@A ti3,I>(Ȑ TPw:T]F`Tp(G!5z l(wQ`mk B21V9k Zʀ w WPs<7`  0C# ]u)=&R0 ,X >z4D{ӑEv`p!`KE Ȱ = < 2 5Q'BSa犮r #?"9XY\PF0Z@hD L [_F_VafD1 ;j"C$IB}ytOrEb'[ G t$ ` |+q6z'b(I_da90@͎rE@pE hpI(@U Y+fr =@g 2J$ ׀o˂J@pp9p p->꣄ ΐ 2B^2$@&(+` ~.P0Ip #;Oa(O1H`C0ʶ  a^~P;>A[裓<= kKཉ69JѢ ; uS 9]18E6PV1z[ysKUs ? ]8?kZ QJq*Tը9mayw Z$|sP1l1 åiBu~s2 ) 2p I Nz$ɺ7)jc `Cu$xo BC PKB”! ! '!aZ%Z͢>8d`D+>#CQ$ʯGB0\, bOBc< W$ty` 1̊F69ќNy9,9(D m@dpα)T\)fjhP ITfPp=t (w0Jr-rK p٢"p\MhDY"AOY,Mc0K #Bl;-Bm2:Pe^C3[i &萼^ -?#|8c 33 Ees0P+PplnsdbP F0GQAlQU]c%E {` gw @ v_v G ĐC =]b WCP2pj* o =2ʀR N *BkWj޼${Tz[Y[ F *){a ϰ aq4a 7R'NY l @-d_?$>S|`x5;ʢawwaS v7 "}T~uEW$%.= |Fl 0nc9{9{$o7ր4Ч mmpWv[P9Λf@g hEQ8h,Ԩε;ǘ 3R6~PЦN hC&TaL/,ua{S>Aԇn-6E^$UaV[7E ̼xa&.5YwW?^<ٳsڊ;wgND ]"zM24rTz3>x-, ^ϖ[}NG7T{K#tqf&JQM:7M7ذ'5kwRIȑZljI8ନ@t6dO;Fk 5a1fmA4C &Eq$%X^n\pA \…!@B )!z P%QgI?Qu BVbh0&1D3M5L37(̃FO@IV dxX"L*a^d^bx:Z `ZNE5UUT5SM )<;X,Dh eC N-!R0Ƀ (`N0K[n8ᤓ^^0]7 79|@X|wF!bْKV8%b}0CDpۣcdb}.& 5Jz8F"phÚ#*`cx(cEj-zf& ΠO ‚ (ijz$C4хZ*" >Z4*{Z@B Рeya*`| zǔ{c㨤j#‡)0+@) U_n|*k֞bw<>1t,SLͼI,K7s޳>z97n;G8YbJNӭ}ɫRb6,9 N:.xl ;0B 9<4ȍz9YA=uLc)ЩM ƃ$4! qBA ~`\P Pظ6"=E.r i *8[KbS$P+i}IMfdSt\IWU'?O_V(Њp Q>L8Do)PTZ`2d.[EKN2Wb5OlƲPpb\%R[e%']z(u]\@ܘF# `!@,_;a #SF:.! Ţ(t, :B}3(ԣp B=Db@uyBg 6/ C;x-"0 X g#m(BPa :@ dE(x 9 ExH@3`D\׉8N(Gb9|ns{kWFGnupaRڅ%L1nv`Mlƴϐiݗ5AG ,[s!ne{z>=} |>2k@Fv31`udؿMFJp N=0@ĆT1 'J9 &IMR҃82B!n[j4S@ zQ N,0u $?11Z20c|c%1 |␭'ހT`R}VXAYWD1Q)dgXq0"6Y40yi!ZwtKhځhMx!]n*qfN4q::]0d . E?+{s'DzVQ6 D:Z88XPH-i Q-^@4m ]2 \@!(A p3 @j /"5߬<B0\~BFGy<^H WU‚} 8D:)Q+[2/ˋfE FTK`g,׆y^XzY^aZ/c"Z\Ĵz1bos B\( [E{ذ mN}]@gB' kFBc_+!^Ӊ6 `A⛄jW8WЂA%D8ā PTcp0$E4@i\KhFF6Iv-%jఠIƨ.a ]@B+N@gA!r$ էFUe-UX16R;mO FiH6hF^3[8ɕsji)va&=҃`abcB&sI^IdX@p .) HQM؄ ZC't=E`zf@8(4p6S8 xjz:8 +h "h (/)PPDgې7H:JDd (a>@b:(8o 8SN8u0HќH@}@)$ P ? 5Pʊ 92ȘI bȋ9x̸ 9x98 Ң{ ;c)o |0/[B 8`W988xJhJ;kƋc!0/-q} ڋ,ɯ~р?$L%/bH|I@P$Qs%0SUB(2 &@KX5aKh@;>q0Zzx11VIo@yA\B^xPys0P SчMXsg=8BJA0o.CxK1cAC^r_C~HA=`@dbNNuu50j0| BeSd}ߚZ515Єݚ''nЙ +R(xK8x8܂xXK@陉JD8PC;x%)m%jZ>C%:x9ƼeJn|*tHώ1HXZ4|܆k. QIX؄bJq@nhٱJ)F1q"zȽ۽'}%"0Q10-D\0;KDcPx1άOm`28Vh\xV_(9_`s0OLO?}ȲD4 |8U@=o8$T^ܴ@7vNq3j]ae LZ00\(Tl^! &N4@ mꦅaNQY(/āQ{RXIOɧ=PbH0lz-pyʓ`-9ܙxWЇ9h!6bxCDx 72<C * ED QdK ZH]Gȁ* * 0 "R-M+>` 01HPlhA S9;0t L,o,sJ :c ZQΊJ: x pgX]h9 >xgP;pH[90 \# |IJ@JalV*nVkV(#oUP'H!P8J5ou.) "5!ܗt҂I!hJ&Q(~"0L`&P>5d4#jʓd;0 >=72D@B0To0K` لZHBe)oY-K@$.sA]3`ڜCU0 3y%va3=#A a [k&x>h`[uAg%bHۡI{}&ɇBwiMPiy-hOhMR5J8P]cmݙȅ,+f0)k!M f]遄x]:ULL*@*( h^4 @y@H]p_& * `1W,2/] М5m~'H p݅7%ɦ`!oЍC]H]Gl⑞HqqT!::-ΪTPՍ1:P#H"g܄iTK讔95ZK^m`Xsi+Vkpoޒ.056,u+H)Æث/uUe uދ0|uP亦pFJdkK=6iXq9apǿx00& $]8c 1vi]P7~ЅsKf-ۃeV K<300;&g3or[zsy&Cg8rg)`mz9#C[{^NPsvgb0-$X*=p`4qM%̭!qpUX;B.5#!nH"8(܎2ȁ3`GEpf*CCҙaufPR^4\ghPm𝁙 H*Zi[CN3(+.{kɑ{H 55$PfH'8l! Yx9Њ>lo ^켨Tomj:AI+^ m{FҸ^t bf 5>|P(}֐iUV!bOXni=@X!'Xq^Qc.XoJa"rX8'duF źNpI%2d%p|51]9"P,}>b0c (v5ДS>A ]?0`HOjTف'Wh^_yf *LO@t Vs:38~90#szF[&g4}^>-&Qh|҅E4c ň`t01pl6F=&5EdI{R٠  pzxᎇ G1M&mpI-r + N:UC4W )`^ @Eua(r!+x 'A11w0O<K;oehSWXr-Fp4TmFWH  TI0Ok tBBZ'Ve&O8ElM)Qra.A$8H3^`@"o tLȘ:BBCHE"UgXByv20Y8$8ăT=Hы"lE JDo/#G5|'];(X-`(Qlp$0״1E+ђ&h+me: $EYȓ@)cNP8iDvZ x{#~P:.u)LqUJ!*U+_jW,`li6g:Yִ6 0'@"fo%( @'n=]ъ!lc c>/'u2]kؿ81D)QcXZChfM,2[g*%K~جfڨRf,-ިFE*YBX[ i bLDm TDM,ܪG8Ld*A >@AA.!r 8]Ԁ(Q`<,*@W !6"^>q:` 33߲Z )HTNkZ/6Ӎf'&:S؇P9AoalLި 1Agv#V;P}@H`]3 WXE8GYFXQRU1F9 v L&L G E cYg ' Hp1k [B $'I'RAoVK~@LSK'BUTLcꊘ> ˚P4,j!.ZX$N ( PYW|á:>pPUBÈH9L[DE0˲˄Th%KԼLnM) #4Ҿ @;=dR,(,M\D9YĽM>̄LIp_YCITYC% AA; TXD l8d.̀7<)zA&>,&__Dg&E_ߗ&@+#J#ՙl`2 1 0o #-#\`W#R Z#@'80L5H5/H-HJl&h>q $"z<-+\%$$4$4`2` bce9[pqlV]pb(Ƨn##&(HAhi8AjFnF((u9G=ǰ$)±yWڗy%wxX8ZVGq{ ,XS>%qXdwxȆ}B!$lB p7ȍ؈-ȍct_LȔ>@-I Lc %_G@-OًKє 37@*R?`$8.@o6)F5EB70*C֨ *B%@s&1ͳ0ʰ d h9턬k= [+A/B9肮v|BLB"|B 1ڞ@*rBJ\ aN(:|L|9!H 5 H?4".h3TCB; äbq݃)(C>| CdA%-nSAVz02C̄m$$ ,Ul-Ei- [<N])<ƅ:pc\A @B=W l4Oe"oCBک]."Lo tCf  dsjEsFƭOB:,,^g%!V C1@ C ܀..L@CS˵ <84 K 뷢Q"-$PA<TɓXKtQm rJ1Р1!S > K 1ud9<4BG #A*. $! `aj_1A@9B<}J(@_"C/  ^ "O1\Q{[GM(ϴB$R66]"(0Bt:u)  i+5C]\Kp.'h>=ImV9&X$A`@Uة%́%l<\,2qN iϝ)VkN#vBh6%@ 9`B" &dQ-ĀQxP@x th:OҏJ$B*t܏x.\u|=fC}ó@~'ݿ8$!7(H3PH8 吣P\w^WZ>+Ђ"hl xAlrH ߕh- 5ᔠ2%X@.`bD},rߒ+ylX,2lUªi\z"mcCF( xY#)t=2R3ْ- @#DAL%0%L(0Oj`ydԸ1c>1͈Tz ׉yuy9Tn6Y'6&UtrHڴ0R^_Jqj8E=fŊ(W81bb+. ˨^)F`Xρ…=.0b-p"EȺu<ߣgj Di7n6lسg5kuoe߻7ؓH |G-[7 3@VN 3h%Rз + mz*a$b `_r"<sqPBxH!$oĔgxLSs>QGM%tzDRIghA}`Hp`ƹ=Qn7M`D}pӄ玨e 2b6 6=mppisӍ `YM޵ׁ]n+bE&!V)Gc^bԂK;V B UPFThCaL)"QF! Z*0Az<*ZR."FLs8#M1bcgdyCoZy,! i:*(8BjM(#j6\Zv8,Z+*6X̎RJ/00~8d0{L";.+e.{L!M[$4\[]g.~ӭ^}YU|Kl6)* giYeXg~HN@5xC'*D&: E~ p?~D |d   E؄+o ",2€rt L䙢 D4}XJe⒗2](`eR$'ȃ(܄9(@B6P`%O}F찄%(!QQjSR3@ @ GɪJIGT*HҪO"D65r^1-e Hc p1 ۠8Q6đm2Yv(h3;)!!X(vΉC Z@abrA])& ]TPul2#GXϠF4*!LGK1 iK sTD̈K5©SQs( !)u%TDQrJZ7q˖-*PilA(?J`H dZ8b@Gf| '-jyH`S;0]a3mhk) !/y fz޵ +:A&~0?(qz:G@t=HmG*T^ /AC?x-~P殀?hC l! gϥ$4 0@F1 ;t"V@W/pBACyH h UΖ yHJV>0 3!|`.m1S02NN=FOz-;*T974SaؔvFҲ8np%TbUFFɏ9$\S\W 7{~h6nc kYe{($iDACI |!&ph^}6@ a3E*bO\$ $cN@2l]SUHA -Y*FT1 * 1dT$ZG<ԣICBȽv%"va 5Tk1 9شlO"NV|ׅSߠ7pU*%AAEА0D@Z!r޵)W\G̡"K^^u,&tFqcwY(gw[bx,qY 0zQoJd>LK7mps [Ԃ{a !f D@b @-*k"@ -@WhdPx`z !BysQ!\ T5̥(y|*ʑwB2H5NI&65.y Nf2)jOD %P"a @LTJ )#,$8ShS8$00$ czaa-A.$2d@cR eAH| -!-miX`k,k0¥D:BRB$%> m"nN@;V` ?!*J-*B,Mފs: -!.>t"b:1Nj0r頮wXYbx( 4@\ȎԢ ^^Nzf!NN7rXc#:+{ePrhW L,(ab  K,! Vj/Doj!bʃ G! C'joo0X OtoJ¡LNlHdAN!HbMJ//R @PL@QiSp:@ E& O08pU4 b% B!b cY#I%9)Yj`@6 ^zj_"e_60_N~ k N`AtAa4f"bg@a0x@c!1yT04yf!6J!*A4hh@,!&w6bT.aU"1@Pa Ҧ |fD FB!g+.^ JsN@q@aslpn@@ ""uw&Ce@aaPy q@ A0e l!GL˴RSC99Cl8 d;<U+`\ ~ȠV= `@b!BHB 8)Tu~ȿ`Zb&!: PLBQPN3$%f %{~eΛ`j㖢 hVC`6s Q^v#P8I{dStA tA!PMKw zA eZfg|FBWAH jHJFDf  H !kFPea $`VAzAX@& Z A2noހ8p4+v 6 4ppJAu>jNpWrsN" D!.QvCs"K2xGd @DZP B5jOz!q@Sie p]A94AY8C9~Zv􁽶2GS` `ڠD `A#mVh~Kd$ ԡ&$Lbr ,@ o&'&!])F땴 > Jr$`€d` : 5.J,`aO2VKʈKƼL $ēgI-RN3VxVH)fcURT`%fR(Ojf e `S؎Rj喀 ,!83\63ԊG8YsTҭ(1 t/߸x71T> aʁ@a ͝ nE|/|?  !g*BtJc`AB&K@cQ. `Nb O11nw0 XAh& 5 5_Spnr8vk Ϯu|##VD0Ȼ\2\. C``5r2^)(M蠍ݫA(0 `4<*܍iuhNjwFX=0b{Zifq߰a] —}Bl` ڠlgD=.”j. AB0q.""Csw` 2Cw <4,JX@Ӏ` R{iӤ z^h]|ekw 69⣝}k9`p`a p ~8@(;SW AU T/D V*﬌c>rN(`ڀ |  !E0a 0KĖA2 \`˨hĀ6K4kFLvɘ̐E032#<T %Q'!@"x-|9 q0\̳F9T&9!*tR<駑OM8jDj$ ͫH (dcFL>(LİHc3X!+KDoZ!{lX 9emXu`[3u'`an1żQ _Ї7d7g"׾{V"p"Wu L>qDR&8ch ><"0Xs hA+M`55{D&0  8 78@hMA; mKrh*_!)b-2*œ1 É"CEnÈDȠs'rBG^BJ,`J,Z !NpA)dTN8TyP>M>O%@O%TQgUmDXzX}R7^x3o2 GYlL0YƆ-Lr1d&G6%a TiTџs ߘCdžKF0v XE 0 ,`g@8!Mp&(4"uhC. BA:aDXE"b8)N8~ aJ AHaB@9%0B PoBR 4Ĕh! TMC /TMhA P;(,dqr2T'"M*HU8nU4ðd5`J j`MAVSX´\sX:3jUuϰ&Šq2iMt[v 7PoTA>سAО]L$Ɏ =E+(%@R> Q΀qi( A7h栦qcGsZSJm  yxp`rb7,:굼B9 #a`Ёg$P\\@ p6.P)P4G"tJ,pFW)Y^Gٰl[]B~! ]*RA. ECuʡ}iZ* kH `d~0F2 f[I(6"P8s/:F1p>6PƷ7 BLŞ_J([ssSXGtsXCWa@ݔ-BY_A0x SZ3@ f;WYްPYk.jwW qw2,5#ƀvs[QY\wUV "9Ցa,q]v =e>^_PD #ӀzUEQEE )P &m0 Cc %C21a@a`BDC`FzHg m PnPdp} 13,S PINcG@&r7 rd` IB zEP3J@'`p7 Up$@Tgo 2 )*`yF*6L`L +D ɜМ`̀B8i#\y."ٝ`NrI8d `8kZ(.ĄP фZTO2.ou0Gm` f 4@ GlGD3CG{-e >0di px s`== 8C1?3p4V34 Pm8}@  q 7 u/^1vPu ΐ W9@Jmr)` 2pW ` 1 AG9AGCYc/NN(pV;@P&E;XhepP.EA[ow2ؑ@YZ1\)Uѧ!j\N]9y3qy1a)g j0ZK]9wb c zC%Rې4R2Ұ `$\\l"٧  "z ԫzA2y2yA# p] %tE=@`B 84"QL3:D ¹ZaE!0e++dREEdeg~uvBd290RǪtx&0dCtP^pI[n\f$G U\VXJDJ1 H|+s0@~P|)|gD+b+҂B `K <ضk |h;].XOa k$>p^  rЅc<鞫jZέ 0wv3S'Z`gq46[Z :>1 @:nW4ߊߪ, + = 34FSmp(  .T 5p '@$ Jè0M¡ DpXsFX_sD:t`1Q` oaap$k0 {N]>Ճ[G>֓/j m%\ƥ4`Mc8'y0,\[҃3F90 0e0 R ` C)RID$ V2R PRc!ŗXnEսW#b>rWwA^ 0ȟDhJ%_Q,%Wh0g 'zhhDB0Hod%3a|WE10 =@K)L 6,̷B,5,^io;iQ*|BNArƐ|`r^AP.A%DPb8i. [J0=4$$% lg$>Epep j[%ӕcz 0l 1"p /u 7 Ā 2 pTg\Nrh*sZ0s_|XpZX{sU1֖ )YdOo:o A;v}@ qKnpwM5-rp `>P <vA?<]|wI=q [jmkʦ_ |pAgy A@?1DN2 F!F!Qp14|-`R"-,#E+ -F#=wp=@gj ^d` cG`&BGYp$0r>'00R2D! U^[a m2}Qx/j1G#S10 0S "a%B> zN"dkMCo}! f҅ ^zyNg`dasѹgСAKAH #F|󩟾9sXb#mܹufӻ#F\sgϻ#O[%#n+T'NMgЭ AӣC(kV(m۳kmEC@f@@@f",PȀeH`ADB   6h 4*Z 3@ċf(1F (F:QBu,R$@$ `9F4J! Daz쇃>(\b/hI)Kg3‹0 HZ.z B1T>'_@"H#g$A!AK#YfO1Ea JR52bX-bF0nXic[cuOVZ`bd#MY#ZY(]\&3F77 ys=:o`p#z=ƀ!B@4am[R@8ϤHȀdԯ5ᆛ1p(x 6ބM6 8(RbeMx6yg^} ti]RIE]xxaN)gDI !d0Bp@:nɦtjDzb!c!BGjRc;+ƲC= a$-ˍn%aD%hY@fIf>8 Bmja}x>x;K.9wW|cCޤ&4栧wݤpdPUn[G Q HE.q@~"b H P9"&a+@.FKȀBh^D:pk"13Ex`A) H7 юw `:X h@b)K  A,3Fh::!*6 $FLa?PRԢ!)GRS¤)NeCS2T9Se` jnXC7huqdKZ9bM'0K0Yjg $/XE`ղx0F3bƘml8%Q|a >6|f۰` `8bXqHMWhf.'L]B&8[%\e%1@ဂ`,g ԰9X=3x>6f9֐ nJsJ,J~µmh(n5`,15XJ!yn\!LP)|(9"ȅb@d0:o\Jc> 0\BH*_`5  |~Kp?$O9@=8Z8)8𸵈 ˩6 ՙy`7 dH:h6p>h6 ߘK`W{:o을ݸ:ВOںv(S.`:` M zMC`868t qAH~~, ȇ@`Vʁ5\XG)[%4}+}X!)ڐ"<X1SpGx* ⋁\  @Z`/Xꓡ0/@By((;SXu(D2!3I 5H?JZ?LG]n?Waі1~b&cAkA`i&4c1BcԄK3#@Koxo8x>031g=AN(H! WJH P+&Jh1yN s (+>B( D8:P 7BHZ@Е*X P<Љ 1Q 8UF EQ Z8EŪi;sX8X#iI` Zrr(c y:ۉhnWPB8ўӞjLxଡ+B:F= k r:s Qxw{QpD8v҄rurb L!'\ SM(H D(1:EFà}89 %r肟 $VS[+Y([ȁ[U V@5ȇ|ѻSX88ŀ:@z0}y.?걻B1C!3CYIITULZҖa`,jOh9 64ɚf p'[M8o8Wo =CVS9px1mJx{'kp 4(P# W= JЮ`a Z :YB``ѨFf,_RS>S:FJDMAGvt``}0|.~&HT=H$H kk+h‘+"X^'!|`.qU)!.X@V.S ч1k1x,@= ` rxO!Gì*r4 A2!4HH]H,-5X ?BKDIyC9p2J}X2EX PLSمn|MA_ IάKHNc2x1˥:0]?; 3iĬ x o 8X kgh&YZ7F#hH@"pkNN2(hpϠ\J 4BQYxF.U(B``dd`FT܍J^pCg8gPT _8i]_ȇQH!)DR@0} ݽ"8) ިN*`(z}aˑDx͙g`]D8 0^g! ^%60KHWx#`K"W` O۝9D63vlT~q a~|i( 9\1;n%JA"H8|<Bq(Av}!Xapb@SY`1p*9k茼CX#/S5| @55W}W4^ATK:葫A aPF]2DEdTErH T)P]Y(bLhe_rf2[~?k f,?e׳hfV(j>3Kjb0W0`q~KO-vxb~( %VLi-(4cCd ꢙjqB x)ZPpLgXT@Յ7hWavNox|0G{S% !! +Ѿ YLѩ8 -Yц%5+X8%]Һ d  èi8(oa<+Z}^P`S<ߋ Һ>!Z#iX@.G[ Vp0}0^ph`uRabP+aKIh}9F G0KYX6Z(1 YJ o *`5p)[(y_Gp`[JQy 8 TK `c_ 5ȁS8́|1+PaՑdY(I 7H@2XqD253CM2ӲȀ?YH?8{gIQgI 99=KΥMK3Y}_,@;ۄɂg 8~XT曇>oO 8@WϞ5V*Bty5ϛ u@!JT4RȜ:sU⇞CJ-QD kyYPaLpN=)y)P;\y(ÃWKFayt CuMٌ>usd r#Z铨Iz2fdK.9rHyKV ӯo>o_{lHI}lw7Ńb)Z8̓L4 8Tp@ P G q5={آ>Q0{qD-,(#OBA>O?P@G1AUPdx1D ]Hq#|-] WQ H`,Hd@TQ",#* XC8fcBD :yf9+O@׷pLZ \SȦ7Ŗ s ϾZq~ߘPW,qq\ <8r3V; Kd &6ЌLdhC C@s6!\ ikP<5(H{,c"D*ZB<Dd0zw{f)Dh jnb?Bb[* %Ůȅ/ 0$b+ #r D/WZЀ:sf C𱇔P,_&;^V1v@ ф@Q+/4}jb.e :7R/V /Ctܸ$ K`<f!k B=utOF 4Y # QQ}EBBů*?!A{TE,~1xҗ*tHĂ(` \( M>"X@ \ #\4#p)A>0A,=0 Ch"A.0N<-x&$E/C9B a 8 ˱ȃ5tù@45+KlSqXо'.BO+ sP BKO TIV4P3ȖKAL_JL_H&6@%` jWCx"6[J MbQ7H=씑i&O C RiHAbDMJPY O  \_ ,Ti`^8PJ $A>*ž L‡CtA4H:_,$(+p!}E)C0| \/ ;@m@x"xx xAT2i(I 0)܂[1%LSh@3u¥4M.pamR e1!R C.p2x78 Lq!UC*p d$3ȓq}BG?LbJDR38 P@,FD+ ,nS)0l( 8AXIFCDFc= U)#&RݔM@B* 33UBwC ,_ޛ`g &cGD& B5+X푝~@(C` (*$*6t1x0pAlȨH<(('AdDAB A A @p B|}B@7<(#gg$g@ 0TA?Hl$C95h0 *5,21T6gn4]lKh4W?C//#'tp<3 mMGH31DHcN \N2bpЂ+a*=C˽U:"Mᥞ*M.)"$p,p@wBu;$0TC5ʇ0jq_DVTq#,9lP+BkIRjAl9mk<w\B9-,%r <̤+ @sy<l,O}`"ZA ||BB'}B\"5؈H |tHU47U@1 \ A P8 +$ ?/t`LH!WB׾CAM"DT@7-xHpsP}-AP!(Bmx AJ|HhFJ&NBdc1fFc*gֈGjJc493EMXqϞ #Cc+0kذ&k %E=?(GP]Zej!X&K k``.[”Mz֭ V,QIR[Q69дiSG} Be+,zMgtC˩tr\!S 3(T 3lAμrpjZ׏d!B:) da֬ t];W9jv%>DC˼+0ro Ckތ:N:a 7ޘ47\\yƕV#>xB) W6 h +! }qt &pmpB|$rHF&(ـz,5@6rK,ل"M !$.a0K.) tJAm(SYʙXc+xCy]^%_4Ǚ\EH 4  d8:d%Qr( !|nydSdXLugv;p hvZk1vm-Z-sαxٍxyXxx%-h ޠ?Y dbdi#.1blƖ9,Fi90O>0* 0`c[gjٙ}蠅hw؁v>w(giap)dBڀB:2 ŔbB4%XV@s4(#4¤=ԩMtBif#(8M( :, (e\paex& HrX0S.g8ȔvԈÏi(Hr"HIMd–MX 3ZfЛy"͢~: hxh X__-i[lŔ; `\';Yspq.3D!NpPP ! )&H3}0% d y1>gP{3o7 T@1 " 4D΀D*P Q8I%$IIc`qn` {J0F`\L>z!KQ$(ĩ!a=lR!%@ Z#U^Q1Q |B@'PL O@ydΘ"*Mn]6iK#Ik`%*GP#48, EEg 0|T# f[ @((5# g-}5Xh`HB,b!i` MxD'uE_) T!=A!^T J.Dp#gDgzE|%H"T fso+ dh@,:"!l(C'; .>9YN?$FOR lCB\ }.ILQ:A)yGT'p <&r b,@HP !rRVmd# `A#P|"v&18`ILGp5*)KyғT> ۰Kߴ&/HOl QpÀ <,(-0OW!^ WbP. !m8<`J Y%8 AaA9)[spj] >1A-j EP4BP})<86*Y׋IHm%#t ߘ0f14eg ψ'ZqA `IUZRkգ s8͎pܼ-Z<ϯ4i\^_ a`_:ABPnr]`A8dd#ӖD%m&ގ`X~Wh\8@6 Ё,hDAz> S`t8E$I0rhAx%`[q($Q.@5e*z dܾ}0UxѰp {&_\6Eo B@o6Iat,Cf r()v!Q ) D(6k BH^mN debM R! aB~B !^r* 3f&`NҸ{ 0:$, H Iތ#(I.! H鏐DI,Ύ4aMn#FbK:)$R F`@NA N+ a Nur@ rfm 1RTtRAhAC\afP4Q,/A9ྤb5bΥ)e˭J ^E%٥E_pp>eAe.`܃ N,!l"*,b&tÊWD`R1>n@@ l!Qq肮JvCk:A:l!Mn Bu ,NƎ$dn$h RR>b1׼ ׈ڀaE aL !o;At@x$̐dN,"I$"n"~ȏH؈V?ƍ(0K,N֬<ɓn$6 ""'Ad! HzQ !| A(D@lЇR :)$@r ʤ1 *`  M|@~%Sa. UqY[ʍfQԭJ `]_]߾'( f1@cjΥ8bb0NeR  !b AeDA%- N@b'dcHc 1x. $ &2  2R#F$$dZK +%jg& xk~` 8/(- dȀN$f4 dħd(`(` B@ -ڠ AULy.(ZdFha40@. `> NzjƼAܵ 65cG @X`"`C fj98¨C :BFiFJHR(71pGD@nA*Sf@|a!Z*ܖq`Z!5]A7eA(1l\@T6GF /"pJ7(NAmϞUΌ`v& ߤ"#Qlr5V W&ia" U7x7 t rL7n:nKwM#t⯺#~@n’6xB/ yuW+pk% ?9S` ~ aKK|D$(TN ק Ve   T7P.Y6R^_`"uC2v@c4Á֯#9vAȆ ?H8\cX@`0cHT!yl NȄNb N,dh(q]Cl``FbU| 4I 1buq Sи!Zm$"HvuN N. IbjnfԺ )!~| g (tRˁFrrk}Tr |1@`4Sf@:%UΠ$ uaVC/@ B NVA BqZ)ܮ4JT\`13K9m]LQ]^LTf*cbtqcTjP[Tf_R0] >{@A΁E5;˷XXWqi<"jPA lu-*4-rH p ~##fNPr%N% kgR`е'6!.E\րdj AN[hb V`M: DR %DsQG߲@y  C{0@@Xfʠ4?Sh4!${dTcpImE:OT7z!ULmuv"=NX|`u>f\A > RbT9cE ai HH$BM3"K&aJS?&8 CmA7w$A׮ 2!H8(|CZZ 4^ET(> A|!S4r$ϑ a(Qr(KX"Y`@ȍtE%)؁/gEL%ƴTy`L&in.ؠA7dJOgx; *FN,A=.AC<@l1^€F̅;?hfvbuN@#Z5wBf>¼M^AÉ>Sks"(f6i{Kf4U>]qބ 6R`aEq8pP;qScn4 Ί` m&w&0lI6Ġ&LCh5{ltTaB9 dD.”#0(mAA(BKmJ*3RE- \M t,"S3F|@lȁj201%ZC}cD|1u,88 0s 7A+̱nBO,JLQD6p# CB` ]AzR@ 2(G0 K NB 2$D Z H]#.r 8a$P&v.} #1zыVvA X @iPx&TCINt`*P\. !Tԥ%LY`TXrR [jڕi ];S0-[\1t7pŸ.#X0B+b iHCUGAmƥ ]RW SwK_l8BWja ]sZJC Ɔ<P=a{Cd *Uۑzl1="k~[=G ]I(06;HPBG*?"\w: &5s"'P*.#J|Yb!&`Z0k xa %4n@tq+\Ak8P(Ї%Z95PPTX[@> %0Kז]@zlyE[ҍnav#A&H,tw2hчO 'pQb${ ްT#}-5oC !``Sc "P9!#W8N`g>8zh'?O~3 4wThb,dE#BUd)H@>lp/9!W%~ ݚ$P]@B<(͛&#}/>}:H E8>c 8T`E5!.P.Ka0ml@щPo*A $\rT5-*ibsST39&+]{lxڡ! xV|K 4^Z 6pXaSbu!FE(v [<">Y R`XT0WO_/TD(1 TC0@ jBHUQKkG`)G72 E3&"(0 n$;pZрEĝ 8+WP: Y& B݅\6~|pEL M5Q#F536R!l|uBΣ\B?6ц3A9 %Vx\Xg]!1X\+C⠆`byo)d`z= ]wc tQ_+!ƒ,L.tA g(-00 3 / 7PpOaFˡ.pT7r1@mH P) pAd!L61sc !qeD#`Ex [ WWVYX 0`3Q V{9"%PPu- '}$[m ( 1@ű@3\b.3 $6, aP $J ҦKlņ'KklˤKr))ږmMmvPcouSbnŒTroPo`apO"-pSfrppau`ja\Q` ;dpq P4,y,+G0;s Q<~s ԐNV ' {Sc002 B U FQ_`aoUp04G$ gx61`E@j Ge gP5Q&qcU_GP4ke3>CEpU`I  *r =rp2{&Bmh  ARz]$b YeP|ק Sd}3ݣs>~>0P@G:2I7D!] , "" p @ #(#v-.F Ii#` $18Msm8d8C1E^hERqGZ8fRDE A Y3bEVtCe Z%g@P0Y}H`Ny$J "VU0P$"u.pe Pj\p a` ^]krKƊȆLr&२HʹtTM)‹<܄x?B`Rdxn0O,~:%@u +zi /SF A`` W278BEOgq,i 3+@W0+4-Z  ss iI&Րp@  xv,LS )be 3 b0"4 `֠8E`Zgd@ZP*^/EbC/cs9]PPvyp`??`y  \ ` z8GYpUGg@t ³Y*s Z&P`ယ9>ES0>se~jWʡ#,U &}9 0"k a J _.D;,_i s P3Rz|  1 A 8F9Yt fdB ev p=qeCLF9aFEZ!Xd!XgEr!^m`C x9P;| 34'`;6I~ y8|$L2%3A- %@IC'0 <ôLl8L&KiZҦƋ%T<.ƳPfvzëF*8ƒ˲o$+J*:EƐPDOieZ%#gp0;/;`GSgSlpb 2sԬj ` CWư[um`NEf!ucd 04cV@S4Y 5T^X^P5h9;P1WEpCp Tml!@A?XJj^9Gb\ N :k, PkpW0GP@St |v ?pQГ ^ _fA)=CUr>.p 3`%$uPI bМ0 H Űે۾["pʷwgtE06dSm$ G$ΐI0e L a7yQm@E`7d`6uAf =s!iFiL  Qt@Ye3y.pB}`G ] p [\k+lVKiJ'”KtRiٴ)P4*eg }09WfnrŒ,rЂ*QS*:U^*sūN|pq@dir '09E r SҐO` 9 `X@JY',DFc @^ce 11kVDH; 0 #kg{` Q` u8+ 9`VC2PnjKi8@UU5hkQ6iBX10N*Zt T }yB +1X|J9nbA"@K,İ蒣\$N3Pm4 :AɺvK ]3MخfۍZy>yx͙3+cm5/ +1t Yrb 1FtjFH|Pg*XB :9>ƨh>g^3fТ W7t|E(طpA`ܸ7Q4qs6J8plß x06w/`M ܃ r 3 DȀ("9ZRBZ(h c9:1fG0(/#,*h9TtIB|D~80ƒ~¨# r8pX2w ąU,b@3M4( h0)sVIa#8šReOkRwءjk9Bhk94HXjTWO%fm\weXxSI44` G@j%9h q#z(Nx 4I0"A`DyZ6YA#(("h/[3eX@ѧ -B)X6ΘA:dIAB(4™* /؁ p ErAKH`!jzY XƒOa h ʡ* d! :y*ubi‘R#|Pc 5+?2P+]609.]!ޕ@ [Û5XY#1&1sr njb.8eDfyхTϐXcy!A/T ( # o/S:pAP6*"Hc nC;l`F6P(t>%O1h?ρ T k@(zꁵ]!+61B@,*p pT Ua7|'0NцTR Θ6-D4%  H 8H`P+q pH!PSdN Pt 촀CO*EbJVA`ӣ)G%Ax 0|,RIÙ"E.e r\%#Z10W`E+0nB^ӂVNņGŨ d!LEee ߸8%e\hv@p%Ӡ$PX 9XD <,к %Q'c~1MCe)V!QYìBv,J`8868@(" Yb($,І~DF6 +XQHDBP([#a+<)ޑ@,8Eĸ[OOfЏ~H B;Cm$K{@%eJU`Z\LJplE o:5@v__b (Pڐ\|!WF9 kE f``fb20Ub7@Q \a I?;Sz(ЏM\7ސo u8APR }8r*up:'Ɓ&BPhb `xi# ? @Q!7n P;5AT2= Ey<jFZ4^ ,]p7oh&Wx }3!C'Piha xDp16ÛJW@ )Q`FrXQN(0W‰O1RQ%/u0EQtj ]8냶t#>`=Gb 0D 2 1s>l҅5C} .8p$`C 6 l 3b_9"+ơ@8PĜ{,@F6ԁ1 p6 "2M( M@10"!Zk=@),60ap/3:@>51BЅy/_y"cB#r |*)@xHV*:XP:V8SJ5m(C5]_JEtЅgn(6dv9N<YɦWnK0qKbȕV`K7g(xvņJzgKHbX#01:x(Yzhx{@P$H|OX8~j@8q*2t䫵kMDRhng!k" @ W(}8KPŲW #24"H[E84RrC=:@DȁǪɁ.ؤ;Nz@.X13/-3~*ؒ 2(1_ ] (pH)KsH 28ȅ.HR)\3V(r^;*`vxUUr$>Ӄ@XFD/H!Gadxx@!/dX^Z g*zK88؏q`$SmÁ |Ƞ)\j"A 2BIp4Țz+ hz`Р*1 (5: 2xg+􆂩]0N]P\py6@0  p#~P,@*oH |jw: -FH5VZ5SB%;CQRh5A,!R=D5H\E-V (bKg6jBvf&[KKud}ctzbb/MzBVo_)(&K`;e\o[FIvp&[aFk }98P+[XM8r+$t!l28$ϖ8(@=mH[:U[M@HY 0)  9+p`Q4E +QI؀mX XJfp:(>,>xZp0X!0.q@T `Uȇ1 ex/o}<m w)Sh:KHI$`-`xYyaVPX<)$U54C:=551U2(RVC٥+D7G}N*6ekVɫ9\q7lk'uSd*OQ9xb?coy7`IJrDzR(Ge(P ax BЁQT|;RԇiMaWM2:^_UO֥3H= -DBf|-'لF:[?E3( ("h#":B6h2Y:+ٴ+.Q!x*րw$IX I(09zHleH$S\=!s=1=0ٛ؛;2d@$ Q*a"/ǧi!PI`x/8aFą?ph[@ qU` cI;\ YzĭN8@z| p|<1,n :60nhTᶡG‚T,DOF vr/Id8xTJ49@х0c6`]y(~r} z (N`͓;!#;,V'$%CQDEt_~R0`;3 XohE\Oh#/]ƻv ctQj9tQO9&>]9Typ4#vbx4Me_TpI,&bjSO'ifZ rUO3Uـmu|\}D::(, ŌWnr A\0WheH Ї!섁omf M889 ` Gpx.|] eVH9ʣ8} [.pQpq=50Y]@t(=(g3(MH}X6٘Dx-dXjr8.8. <F8͆I@u1$`XpBidVX4aX Ky( ]0Y։pGJ +ƘRX"HNy zg"p3釱G]BILxG?){i.ȅ1 /dSp$9"Jy68gM iǾ*(hW8Zʑla+X`3X1WCSJCS"5B5[2,]G@bzns`aK\9]i3Kcm6cs9Skvaq '^Lo'K o'#N|oRq[9E#x(*1|1o}yP U*|Sq&`mh҇#ۃjH}iل'48s ܄x:YP4 HIGWHqpHcR.D6  2dH!֙=%P>2u˰.]X#I\p* Us,u%̬= t]j2ɰo)HN2-#J8,8CY,QkhK̩rlŔ;%f$hY5dȪISwIj&!*{L2 IŪ ])GKBOu͌\QC6Ί"p8ǚZ)|WUU8܈Kbmܼoҧo0kljIc^}#)("E UR"Df-'BgpPGTJF/x-,3 3 3O/QG"!Y<Q@a7\\p 8l=2 B0É Q@%TV^fZdG &YJWQw`{ H"=c{ 2(;i-Ys^bFXbI+Q 0稣L0^byEGp@}cr0lss0J)*mEt(%iAԤ-\"-G-ZܩJI8Bl{g 0{l&8Fm`kqAn8lo8|W,Q\ ?! ?Jh d@Λp hT@8&Vc D˿X mQD?{"xA>,0P52 5tq 4T#]CYd܂HT; P Ke!SdCePQjM7KS<R)@Q@@B$E"!m3΃7k`|6I5 hh(hfp*ثrBd*b8&=]57od!o 1Pt"}hAV"cb52`s Dԇ d6p  RG vqBHL EЌa -ЏmB8Ajyx ް0:a-R -F |D/$b$Wƀ%Ep!z7#@x#d pHBh$;-#I1] yPJ`*`’P'p@l\nW`F xA<\A%"@)[bCl XEPDF$^9e vREC|ZXCh0 Vv#X h7|LMB0bLbB b0~/7"|B-t`2YbCNjQP |QCc B̝",CQP`pÅܠXH#)!<`UW3OhA Dx,TBY'p]Zhڗp`a#XRh3,=C"H"|=[&S4e|'aC7@ T8E Z-D<%nS-"|C%<96ǵJ`S\B #IfAA mмpx؊>AHC59B0;|%t\DM l&АҭDPРD4$!| tP@=T@8 UX%DwA# (J<h@5HA T040C5DģE>`@ ;(*(-8-,)B,C8nMlEm)@V7@8 L非 Y9h@HC)B@\L15( ⬂ hĂ `*$ 40\H[01G|^ԗ|`*CTC QG=mh7܆&8hLX7\ $UX|(G=(`!Lm̘tNCXA0XʮQ*tSY̓7U``<' ʱp77×A 7$$2A+-#7X%|BY!} QOSM-BpüJ0"#|+yZx&Rtϩ)[iCl q>l,6t̵6hBy TlLD]D%06KCpABBJ ,xEr%+@G\57D ErPBQ¸&4,PG \#A?A^MT+B>(i[eI8H he=:X<Ėl%lSAp[& B C9\@z+82 cۼfLBhA,/\]Ѕ XOOeP*8A8A AhOMB<!lCpw2,4Gm&,o&@`OZJIG- 7< %sѕT J|1 B <(X| 3H@< B( /)\0DhVG.B\,O?CQ0:CCH_Ih ڙ. 3(b@@9bzv/#J8'di7zG7ݐn[YTnJ00N%Jii"5!8xDZr ¿BX-D7r& yЋ5$ <Py Y`9Q M* U \&́+ʹA@>YìJ7A +sA[=#g"(/H2v;tAcRQRtC V,8^!8)tB;CeYe8lAy8Co^S,24f/7sM N|4$6|8Ad<@9N ]M Lh=*ĂLB p&.'A 6Av-Z&h#Jw,q?0s;NJ0DC HT{Ŝ8%9bTA9;8 $D|Ё<]C[,xVBAЁdJTLoc]oV?fU}гRAQ6PQC60@]swA@!tB'Yfwkno%s$282,4z*4I^L6$A1HEOJ&@#P1bV sᩃ\Pտib@hIGN@$YH.$II,ĀN8rA`C;wgq`ZS`j4*ڎZV#l氱ڥ#8rҙ*'8rE$TA Ĝ"QDan$atך5,7*A&b 2oV! Ӈ`K$/UhMV6AdkfTac XtHȽ.ReמWR )P`&LyB>ς c~wՃ~c<;xXyxdХ0K  1P 9ЬApV>Of91Ŵ㒬ъ /㈲$B*é,6Q#85l}` Q'qz IPl4 @bm@ H#$@B &xX#eWp%*emȕ `&˫&(PYTЇ>@ 3PD6B94a jIxfׅ@HA ՠ;uA~`(@pj6BMQtd)H q? eX)ݱpeRU\$@K]:'\ <p*_lFll5P5 '@/4 D8cXfapgU30ЉNnSp=st#^ndrΊ-\aj98Ż` bLj<A"0 b@ `P1NPסN/$$  fۀ ZTA/ `ިP@C]= ̀)|,`D @W6A p.,!0l `[aD%~b^zi@gЁ4,p[mB@-:G+8Gal6A``lEJQ R@Ӟ$ *e (̈́~ *aϊ~`T,!0gae(W( "mX`'VH7! n3/ ,FA]ށA(O .% 4]lM]0ز_La ڤڪ-`  d  nv(jXF4\@ &ba<@@2 A.bQinA6BV/ ! zaVD 0 > :+ fVA|B4eV(!6ooqp`Ơ7`q6 . h * bloh\@ U J"&A&a2!P  # N@4&ᲠzNP@e@ \&@f`&@ށ0@\ǣ`1Vo#=dNo>ROf/>jBĀ@-2 .K.#@lbIbF˾G B/ naL.ЀP90<Ӭ8 Nx@P8gʐW a @Hn3Cp8gΌVUʤL 3̈́T@Πd N~`N&}(ъ6q̀ aW,!\~(:U$0 P\\E ) \@|ئ#X!Fal!--pںaDM D1E Q-1 ` h!&J!ഀfb$ llF@x*@:$@@fdhN!!djbKa:zp0&!@* Pnv"Nn QѶa'TOt4NNfّ{55!`  A|yh!@Xj\ltlʁ$`gVF%A:rV@p"Ahzwa b h o: ڀ ,#(ԝ\fc+#k= H+>$"1ȉr` n@@(N48@b n~s> L.'~jdf3Zn*DOBHjgPL,`~YV1,!`W\ : N6(Mm!9BY`&9Ϊ `@ώ`$`p) hd$!`:AX!$$@ !C٠!2f 1x`\4 e&!l\f.4lHb{NnJ4jfDK X$ ր3&Lo O!OuItQP,̾QQ1*'ؠ(Uay!z! h\@hT5&fl}5J Z!FtXxK S\A/ `b|(r`L[U\˟*ʣҀ]յ= `,k . `1 @E--.rHdi$lJ9R`:Qv77 q7AprT`!z `n}Cxp XzҬ(&)@( b@&7`; gs\nr@$0@4^28\MC)p&MawI#cȍE7N!4J$J{ ${7#| jޘK\j X&!̯i:N2*cUIRu0`  qXwXRr #N&¬/jRg+@9U$@vA Mj )%temJ&" S€udV.J~+`(_7 da\!qQ, ,ha~);J *\c\x#Հ]K6a a`Y&9 `{BrS0, a"$C"DI!j"B!`n@ZeU_J`Ήq&pgЍ]uX`G  &όR@g]6Ess/34XlT+J/>=껾,0+ _ \`ZAF\JrdS`vB-lD*ĶVlCDI,A&b"doa8 I4*I<\XsrT:`R*.@MP<⣖j *,86``b AMAs aL v`mX!=oSǡo,r BȊ"(bW*kZ|2n`QoaH"$jB)St*̺d| ,\C´)lF*)CX meMI2ʐqa!Dpv./t:*gӮVYX2 QEc-\(#;l@]ʕJ)X)'W9 $p7M`4$ i q( T8pl7ι=wi6=QRX)VH^f$71epVU?ݜjr;vB +u 21B#4RxgTpP9UTP$dC41 ROr۴M{"dT`"3A @<^T8y-!Lsb ,`ǔv #yDevHel%d`|qÃ?|lԢ|矀*蠄'Ƹb1LGHç4L F\rĞXx*0lajZ 7sc꫰ZlXR0#tQ +R##H-CGXc4?&ll> $Q6lxŶqQ>{c& xFk LpPRD(R TO ,wm@r)\5>,0o KXBق #±Έ "kH>`@ Rؚఐ dv09;(P3J܄NeTPUPDRN! SUnH4\8 ir4jr兀\nC _V\kg2B, $J5bÊb2ˏJxCG@&&d$p1,[p&\ru᫉>Ql-$w>`+ 1Z #4dUĢ8| M4. F0axGVL FN@4h4" 14T C A܀E"@E 9 85aAxDqi(cbD)d`"p/QL]ȤV 9 8"F?P1)II2'= FvPC>G7DB*LA>e­!tT U!-{ Zr!`n#@X<`EX$CI.\0$!+ 1` `RAgJLL|+rYNS~087Xc(v^t1#XC#2 GufY,&Zp6Iy8NpBC8^9X$-t!HЁ QެS}?_=hU ^(#*x` 00s v0aP,١X$1Q@m<hlA% x'.Q K:Pe JZB4v0#Asd`Pjz t"`efY?x>a.Ҥ lQ#'`u磱iPlkE s8X'䇝>KO'-"MJihXml1`iAU ! z+ | q`DkV 8c\"/g100՝cP[F,#Y@ \$g>h#UCs+޺HTKD4nVBPVчgb @x}a1u["+:ٜEK!r9^NI6 B)@K!e0(q9\k8E9&aLY?Erlb@Wʍ=C+iP/R.skS<se[ !NpaЂbVa)huA,n~,O o F HB|3~+LAD"H< %@ [[3 x^- lk%*qRc=@O Ρ%( )'KHe*Dgrr` e` ;@Od f*fbJy) ~B+lzA J%c! ,Ͳ/\c ۰l)@VEl2IH>1P/Dh)ۑQhz13w;  m@;sO@+@Fpl# llRR3; [@0`W maWP6Ufc SC5@u@}pnA`7pB &J Jqfqn ـY \u0 @{ʠ :9XCP nrXDr3:5;L (IPZ0 o a_ apSW vd T1pv+"Qw攑#Q?w#?p1Dt\pbyE<@WY v P !bbC T ,`H` |31fm20?Q4 Ұ tp1o  @ r0 ,`COb Zc_RcybgG&zp's 0 k20i($'xH f'Xh;0JYf*kJ4+,wr 9<]ЛK.Kp ;,R/r-LDvP0s2@ .Ca/LgzNh-1r|lRSgt@#Utm  @kymC &3V1RG EmIvkYT  RT@p 9 p^ p@P6#67qSpxk%ql8STaQbp :fax9W:n 89HYi1 @ 0yCyC;b@!h<@  ,0WPW ^pD-)e3E# ۠qc !x\"/DA)! U1@ \0rb_A zT zIhWn@ F u.@߀ a >[Qg8 {cRt ϧk@b IBP cYZbS%a%1c]RcyvP G ;fԙ(}B$d!8JAr p)'Y'RJx"8+lG:Kc!U,5B b dpiR*J CRE-*Y\"SQYxڱ)JR {)S4 D1@۳۩4R+3׆30 2pV5RQ4 〟.Q,`P1j&C`@ðbWPv m`go,@ 6p rpxcqc5VeEG0KA(r"G C0 P;azosݸXNspa9.G7 CtW459' `Th`0:\PD c-sw.D!wT>4/sj/Rq\ h@PRh,ߒR*.PBTEck`#∹"fb ?@F. U;±`*}$  =E?@p@FSA @` D8⒴` p np mUՑտ ych Sim!g{\xM8c @Wp##<q2\/ ?# '"W <p  B< poM&v b x<, Pp | p`ֶP#u >K྇"RqӴ@ < gbAtW,m%&~p a:F% P&Cv} @^P&!HI̯Iߠ P**v   ^v@ofJ;aJ Pc> Pg\@zϕ\0ڴWҶV֐&ti-kjՒf kGTQEkCbdž0"mY f= p*("cL(e a+lŇ,TeQ|pZo-%+ ,4@B]NA*ҬVEPDL-•3K,U0'wFBAVX|.(BdX; XccecNAV -գ#. 0 W=€ 6j6w^z^|w_~ըZ&(&Lj#uwv8bb79#c$byweE@r"jbX )nE32$pז#j Zف#lQda}d!.("+qtkn<#&=bMNҚxk26О"g*P"؆\, J.'ơJ IIJ`ٛV(HR$KKΠ0/8 *b:Bdq6j 2P[<{GidǏN(#Q[͵} 3\k7w{lFlXXh;.0 NXb!(Cz&`Z !(@2@ $PB"ؘr0 h\`WwXPK'@B%2!'c A|D! F &m(&?6`x$efWl+PDfP  9dk?'FI<"C `!h @W tB.L*@+">eDЊZ< 8 !9" g AFqw| {SլheZtS)0C. [:7v90iqe 3vO|S @1Ȕ0~]0*.XEƮrLe]022VT/LGСU?RJXBJ[+ppYQKG`Udk#Icᑲdrbقv5%ۀA܈n`-X іUrLZB+ jm0ܜWp08XSe1 ¥X–6&  ŀ/"@AW8 tP\1Ȟ)\[Ө&ķڸ|3n|+?fmxPbx h@Z3]Pʂ( 6;'$` NH6P* ^@ XNNGWFq5x8`\x) a&h rq F8rh㆖0fu 0Q* ! 4 }pc(B&oHzL. ЊOz*$H=U@b$BJ1n:HE*>┕V>YessHDMU8 4 w$BH[:9լ9mSC)8di UoNRmumbh/A_=c]1J (@g>( 28l p 98~` }c ?&L0(p6L-oEOTdF8)b㈐q+(Q5ExSᔢvKb)Qf8t8X^qndl3ϫhG hhN-#lE,nb&@׺{QM$ږkطִ8SjRCʱUx6*X!oHB,? _] -HW8 @B>N~ h1BQ >x#+ 1<W`:+$)(‡!&6, =3·+IF10:~R!cD\q xc`# t?t%xHNHRD>xgH*X3HM19sx h\ h: rH0 ;Q QH$HXxbi4e&MӃ:YNlт+Rc256HOu29„yw51C[KwBe'‘ʘ*z ~zr |.|6pB([p"q B@ɩ6Y9)+9EMM3J(H}؄= a[P9!葇=81|0"(h1K+O 6X 9Zq p%(m8Ƶ\n Y(73`YH'(M9XWw15w hؕ!0u Ԙ-Kí-ʍ@c;#G8a58i("A#M+4O7>@  %@C)@CdЅgBN:*2$$agHgxscxS BD M Ǣ։@ x 8<c @X5`jH&QH(BbAe;شM&=G;K``CԒ(x8bV@2\Pq(a zs KHoPO8bb8P-a15(S(.irx@j QXĨ}إ2(Yh @QX8< cRāCE+(X>`8[,ɑYEM؆" H+j%c z("p7PƮqƲ0zҬBtdz7\n#Mh!H[3p~osKxc: SPi2?Z SںH܊; QրV"jy<^5:Z, []! ~L@ 0veǓa hkȏ 8[(O: #/>&S|xc>p#yY#$&*e ˪"(ҡNE`|@Q{3:Fen\bԮ9q9F:T=6x9VKޯ) rSUHb_dMp$;e CI <>>5,1(Y^=z͂QaO9?o$9`Hƅw`IȕcXȽ&8-hr@r`w,x 0]~b95(*@*` *q+$>3L<_DEYކBYu:WN=+(3g8O87rJR7Xhxy@Д$ ѡY:FX?kx6>̮\N5肙QV H!^7CKhٖP'wC*I.5D5\ކ]jz ޏ(ޤ9yЍh oBgѪ08vyޗиQi }|ȁDȁ#ő sXGy[!R * g0-rL]p0nV*M ZXHel SP.Z#`ّ񛔃*TT!)(*&Mft7tǼ&{;Sa2y-:ڈ0nق-H X$Bࡅ#('p >|58LK]^KddV`1/.ˌ7r 0O@o,DD.}p+ù>% )1>@}3:E :Â6臎1cyr*8*agX79#{~6>Wxs/ѤGOx4+ȁ>XM%1QYΪs~"Jb8,BEx3 أ@0,Ā()xqV5@a0$q:$4;r:jK9(VZ(5 #jxxj8{ CwaMnBSs3ҽ X."]ř.`!l1")42BUbBU[݄Ƭk9Zf/ݚa`-1VT8EŃ`̛ DE8ntm؀-i؆UbTq0p يmr j[{ h"'Sa9[,OlY`\jUHo8cVph)p Xj(U‰7/"D*nuo VxHOh5xppKۙGf V[q?dQxW$\a~>pL:߹(9+وX>+Z11e $g]`hglŠzm   T#/>'L0b؉&q&L-(r|;QD7fP1t.]3[ "RXīÕ#ޕ5kha#; H}W°|] cXGrdg#F /ТdmcZ, h[l[s0j5زgӮm6ܵvf%`.8숵#|IڥGinKG,Q{iꩍL0f͉D|= ȐAEX^;8܂ ("7dAX 0資-l+EQ,{PT+C 18h&8l){DG )}G$8єGpȈ5T@"S" pSDsf=aM)89"*&%,I0W06n dĠ>ҰơHs>⊅c w@! ECH8l|a SF<I$1jd0>",)D;E$ +p@"AHȂambțA3T\%rX%XBK 9x D AAr(f1'Y3G ^?T9˲HMEIWQB(7=; 7 >#B<&J@ 'BAFtAmg=Wz=QD gxã2 U7 / -uM+"2}da`MhTIJRS Th QX8"QA@@Gja ra@1Jo #R04n@#2 pXcZ dvh 0@p s WKrGAZi>kMq-gZ-/7srD?T5Mv8c C+ 1H AV!1GH0  a*x,( xlB]6X@M g >^$0r"hL !CSE6dHgQ{@R J)MÊRhVY4l "AYNШ9扌AQOq d @`phh2x @?@ S?0P[HD jd! D3Kp`K%$Ylo gcY#a04mi)AG`@;u4 t"Va"P Bx PHto$@ڮ@8uxy 8BEpkJh ]aPT0q OGfNƆB[HkGv$^B7\C8Ox;7e9a5!M=..4;qf9%}g7#]tY`O!H}@,o$5 .c*p_a\ $<Ra0.s,V@(X~W,qgz4]jKdf! 6$M4T]Hڵq+m ꅫ$f<|\\ #@CH(Q\9"]tSJT`1?Aklp ,PD?!ýp+@vGRFt0y ?^ۊ @oQ}hOis-ɔ/ #B=!h]]X ^v ]p}9 )bYΛ(*M9jGw6E H6$mNSP[89B  M)Sf @ГT[AAA%X'GC['ɉ,h ET>Y^vișɴd- 4 B6 7@L MI$5OIA6ʈ\C!"CV}(\< 3MpxAH|Bx%T <"a=$TU@Ph+(ZdMVTgU)@-(C/CzM906F+Ffl'|]Pwލ$IoPl4ilwlL\h|@Fu,ؿ)PP|`P*|^+`+CNLT%]?+8$C SAY>ϔoIwtG FPYCըyרIuΕfd"M Ld5`ɒm4 R 7 B8X,@"[ꈩ4F F2'Ysɨxe==.R0`0A7uFuCV (>djZYn 7I¦@>!`%@®Y[ZH?@w0%@%%04ǢӇC? sD"qIHR؂v\xA,5Rƈhb#mӄ\ TDAC܈%)%Q8"_ CHĕT,J+Tx--X8n.A7Ș &KuΟX@ \#-ЁtV|~I(~u<C5t2CIA*0Bk|q%#$Eo<%OH$*mdYCfGt1v̇B+C1' LEQi(4CI5"yf6XCt๬@8En'AAXB4PCTRC'.%Z!90M2!ApgRwZ \ܢ+yִ1mb zL?H@I?=!x|-M%lH&@BC+lwH+@xevTşLmb]MRD(rX!f+ R" \IYƢη(ܹpS*.B*/!Ad,C lR:͵mFJw>(pP--H x)`!/9J>ZT ;/ӰDUZ\Z¢X,DY3B+ - _%Bu@ՙ'ɉ%$-8" >pٗ@,ق9?T@ 80Xp|>\ YДM$Ө)ߑ$IDebFo!R-FD.*RSdI"Dl@BZIoB9P/WTیڔj@iaB\g =T֞B" 9CGJCȋ]uBg{j 1mL^PhOz xfV(oBB.C>11`1EdBWH =Uᬠ-+XdT),^uD 7xtKR7񈌼&D2 Ҍ8pN+Y w4DuQ f:qDG6PCЊ R9m$Hg81Y D2u=RS/-BcZ/c W}i C*8Q@pX/cd Xy,lDkpE 24pxN\V>)iUC>\ (A, 0ȀAgooWAzjo}xYlko6]u4dxIi]xTkfxO۱7<<.+`C$78B5$w7;+2`V9#E>8+xdFw(1):|Ɋ$ MIr qdut)Rڧ(I>ᯈ'oCx&f8@8 (7l5mM,'@pპ$s0Gw&ǣBЃ| tB'/-.1]'LHS$ ,h˥i6]7!|+F @sp@!&tz ĝhG}vGu`4B:b&W(i0`(Eߦ)T$4iemñm ciF)XK;nB6E+RR=O2*ΊYWtj=B(b؆BçL)qBn y9aBW Zh֬4BH*T T$DBTq r, m^58H03hO 0Ъʣ+,X܂v*p2wC4N7Uol`3ؑK\ۜ.MZpUr}|׷~~ kE;kvp#$:BvcZb ^@o@5V邕@HdpN d1XX#h)'+ ! Wd}xiMq)%iMx* ʧ|:Mz.+8"JćBmQN/14j}F(kIP)Ҳ%n6~a6!`ރϽ,Tt%zL':)2y6hdjU#p‘6lQnjr@ RE"vEKn  1B)WڐEW Z)cx,I[,~`G<6em!#K kDUPZea}$WA!pmdZZM`(#̘a0i#RWK{z *++ ;qN > a hËfXa1HЀ(S`1:("`+ e NQo8a a" vf.nyaZ$dhKK/#?*E?}o]o@.ؖK.: $]Knh.ZrcĈAIta(*b[ o>Ӌ @ (r P6`I)46 P& L'U 21GP`АA)O8(>iW28pc[8mX(5nQ\ćF &6 lhH ІAh 8 T $C*F!pPeŇg=+࢖dptc ؚ>v  0ELt92d BAAG1%6a1Q%,q5a:<w'*(d5`= Js("6Ai}7ִ9Q'Gq>rB( Q7" ,eTQ)(]S6ťKM@^Ƙ8}P*: 0 1td p22 a'hqܔ ZЦaxCPpEb5#]# B-B.a=3cl;.@ND@#ȦU-s9 2QKA"Sd"7ZVԡ`)N!I(DXӬAI@+zI&7oHɁ0rP_ rKㇲ-(!?P&H"n qjL&\E !0tG>Oh #BPC2O9+i'x pjfBDRPĒ"D(,,"a!g;qRe9Yd yjHKa 3$& E kNo;OІ=oc t,;dC6*JDЋY*(R*%U(AUۀC q'QxiQl(:tԐ ,^`a C\j)0vxJZFmKca0ǥ%]K0 *D`n2ZA`pofPh2X+PA@ Q|)#"2D>VH2 nхan-0}309|Ũ69V| ʲ|ÙAiQ7JT#6<u2v͆G':b#NqC,k>; u@F9h*!A*3`YO y(%n2ԿZ0K&k|L3s@?jʼnbq{Q+ʱ5(܉51 ^Okh8HaCQ!YFB'+C; r98J>Ѐ` Zn!Z|Z~ 2 l zZŘ֥]%%.injE"E~.afa8 \ JV``ci66H""&`f(fl# rR h0  hm ,  ,P&jjC$bj-АXŠ!!,V*X,-+In*oR &M @ދ   1~螡 KƑC>L;@:hCݮ{#Af .n|y.EdF f\נj*NP b)B`Vh(Ɓ 1d b,We\ XBK(rEQh!O4(((4EDUt$deH"!FbFr%=Bᓲl H nLaA[PL 0vZ]] (3e,m&`k4ƯJAbb D$~d\!&hP; "F>* dL$ "W(U@^ !! $b* T,& x≜ F)-JZ٢ *lb--Bi l&@¾t B# !B!f` .cCb202 3 X 0  ,+ ,<8FA@@|!In@Hhq.G""  & #c:TM:J''e ;<8c:;$Apf<:~,! /.`tH Ā*Ah$@~$"!ztrJ~ @"DRJRb XiBer!JZ*f6bB4\"H(Hł:JF+:RRO&*$$R MLfD@Ǐ`fI| "/w PXXe0 fiZe b%S Pb']!Ac1,b^- Adᛞ ;~(DԦl$]aUl$Y0=,;`fܧ?Q(v( - Dn :46` %b,J^\%+'$;CjKޓls*VmSlv!-b@o#$܂^` B%4a*q2M߶(` A[4z`! dq>X`XqEwgaxn@Aޡ!{*& `wGd$tMiWA#eKpe0;fk~f: b@ H@XR 8Q*H@䠼$vOS1` &6VAT /ATb b-fH(IVbb( 'IIR/8 JDLȿ"ZĦĪ&h U$8QP4,ka :n)C`3J\!.R-D Wt $"˂7oY[/9Z[sr)06l&iN@ 8@eAaaӛb3ڀVVa@İT"BCj@ev~3#V b@ W`  a!Asf Q!ifgrkVo"9?KRF*(%Тo0o@k&A~ @` ArCg 1+ 618G+ CWРj#&u8 ri$5$`$`ZD@8tZ ! 6>&lF Nw詷=Db=a||zS|Z~g:`h+:pkz{`700H} x @X P*K Nf` dg&"Hj a d~ !V[$F'BKBjf#HlK& `2p¢ (XqW` %2$*(Q4oPAHM 7S dAm.6މ$X`)9!0Ee)3c@EP`C!9~VT$hZ l"b@(`N0"l;)" p sP(iVdV bǹV`s&OХM-\ A 4M&n۪,0*$mrj)nV5j< ;r a aN :| s3R R >5""{!2 @S nu`v@0Id aDw@b! v= \;gT J~;PC,p]J=*>`&*= axZNzGnYaxd>>AbR6&a!a7v azta aX@൦HvYU֗ǡhhV -pnP>QɢFi&&6QƁ<}'5iOWUXBP&%$xeZel!e|}paF]@ľ"b6d4 Y  \a\SZ]H2Ѵf^h}@A[ mD-|K|͝||=%ܢ?<>YLnnЂ͛γf6PA&t,"1s7T+*2«GPTPY&0XsT-&c4PPAGh-0X%+q$MrC= e!OLэLN7>DfO$h>HB!dCgv G10P0msC6N.t&:i*) |1?X 8ly+f7XIP6@8B=l %ElmH;-!EP7r3 nsmD!. ܤP@ 7В{-pkm> /k6/7l#6pKF3.xE.'|"83@@R$tбF 1,$  ,1 t T0dT`K X"G UCU 3OxG/}xCYs)T#0(y$+]p*]J ]H%%:d Fi_FcL 7ux?YPUV-IYa-F|]77D픔K" 2!)H]<N>iGF BjJG,,Pfa-TbE a}OFH{k<w]k[BXu-e+_ߊ!ڠ-EZmP"6##/CHPFxOЇyx h($fQZe9CCVf,cV /7`5 ,x]AN!rta @nbL$ Ix*[BF @<`p "Zbxsh2%4 ְ~5sQSR q x 3p`:  h8pp@0\oҘCq T`x-]VrLo70bj-@ k[,0wn3x*T#w lnR 0 K*SY 4M69@v s)ZD7yvMIC 6$#4Q#Gp:XbD+b B0xCD8Ir K\ע*c  lE{0. F?+9.9g" C((2 !9:H/Ah/dj.WMJ䙖P0P ;C3p`0uh@3@lh,Yh2Elm0%U1o0<,@F IInu. P6ʰ PP ڠ ` :<0:I8GTQRj'+BP`V V$vp p5P  (x p 0 $2 U E O U πP0ހ1 "`!cA"M0 e*Q$"P i]fi8@4Ch)P@d`@J@v)7q)T 54+a#߁^yҰ#.R_,r#^Qq 7t3 ` ; ,a@MbagFb faiP&eGnt&vuGwB 9 1tOC) RMtFF *XeD Vg(3WDT#8r#5M䋜la l0ppiveƦ~!v0Vd#thV}4 s-LTim`fD0O;ft51~PPd` m0-ឰ21,;,R?XgpX hk@3 Ó #3E pw(kFX f5@ 6cfSo]0rP7 pq?Z o`¸8R9I xp0j)t9E{s v k`T  p*pba} eR`D!&h&( ns(v&gɍHp(gel`Da)AT-D!8IDC}+}$LI5@%I$*?Cb iwA"$QJ\p?t~Db Ϟ.-:ȶJk(` A gm$ -F,2t@IP o<@s9 ٫Pҫ0 ] ,  qƓU %qcTB B D-b]* p- dRHg`m`r7Uqe:D`p`p>-C` `  7԰D9.Rd23K)$K)9*d7Bw%wy>ZNKU&*,.:e1'*CT[7"?m is..1*1lD4Um1b ^,XKbD*XgŸ"!$ pX(@kX@er0"QXy'YIAS9ԅ1'%H`Ţ\|)eHa2)n6.(XÆtk0iG3v Wlժebƍ?Ydʕsrw̭%1KYִ[b(-bfMp,|! FIxW|C{rXqB\:, 0In$eRPʝR懑"(= ka/iakaL.`lij1+,D DE@ fD :ǒ MG[#a b=l@[Ē=tā~ԧJ(LHW\$[` hÖ.E0%O?᳝2S>DH$H")q4"ARKAaRR6%}*5c3*&K˚te(2B6@ PYdMl#xÈ)CdCY[U69DMF.6DKl#0B[la#\m!(49.l݃ Af4fJ`RHb1zzLc16%Alc+IVpR)lB96:R!%0J" lHxb"a-YcaO # VF7¨9ozYbX 0Y.HH" Xa5)a֑B >Kl16&pŘKD4y #R@L.^=veI+38# 9G.aXp!X@lbYIhb㺠#:X XZ0N胖rWa|9Ti x(t&Af5 A~lQ>6/}mB\*-v\NŐr4a BbP 3 ,BP_҄h4l?4[lb[Ġ-6AH.q#L@XS+ nD mF9)#OGuO|G8aCQQF7nLa @$̰Ju*:U$%eYNmlцB+ -Ѯ4X3RA#Yzv1ti(NW|٭C?`/61'pJ0F!w CXV A(]ra:v3cZO`l! X>A& Q{X@ 8Bu M"^@$@GJFꐠmI1K;=ڣH}hDi$$ M?J6W98/"m3([.S2jBP  h0rڸ[ ;8sYX3@qi>a}!CK eÇ{&| cځ3 'w/!Q0BW2$K#WI46!J(z5"n. n(WJ" Ђ*Eȅ\pe?8(\ٲKb5p a)Dp^x:X:q$IX bx{E}|@xmȇ|$axi uTzݸUOдy&ѨO0mAmyLh0Bp [ 1c9SxG' lX.͇jx%a|rhix :Hx]aH:x0;]H)-D$11 (x.6,*13@EqYk<2;?3? H}0$hIɔjLIMRARXIYY:1<jw**i΍3(d JŒu`(cBʡĠm)P[!3[RyhzqOsNhhrX>( {fV28  m "06p nuύ)(YP]*;z6X>|X"0. X٪ؠ5`@$}qr,.8p0ӿUXnR S$Y^d!{/&h{iz`GVȇ,@ ӓkNTx նw@Ȫr#wtS@X7-} ȂO:j 7]ܚB vD@,G1Uqؠ@ \~09&F)6 = 'J0xm~Z(Hrفo )Ƥ X}D[!U&Bi؜Mc)I_`RhXe9w(Bm_^a>?|5pDQjf$-GF1S)07l0Z@Cϕ8;Y ϭ 54yN5qل}%*c@ɷ3A21#o){ArW4:o1yV FUЀRyp&y{!VTU0'ytGepPGbTo U>B00bo$kh` GXUbOOK]:=| 4pXdGUsf#}S-;Q3]:7>E MF2 ~2$4NJB4RpB0FN?7PNE` 6%qCETHhq-gQ, $@l)q0N{J?rp@^SL )#O67gcٰ&T PBEsX/$T@4h|{FnX33ZoBEVKtEm GX4GL[XKҤ`"88SQ+Ph LOSFES-lD3QClq-cye٦Z q60L,00K PO=AHiYPc^|ӐC.!챇gp6ҏ!LC1 KaS0$`|7C@aF/ׅ@h* 7€@#8@ hO[ *)X =4\Hi`PV. I4Ph#"sP/!=$ (4i@ cX H6@ VHD$ ߀ |qa Cx gj55ID9C,p!`Gr.O'Kʱ$!`n`ҕ4a~aR mlc'?%VBT?3"p~ m ~0NY⚦,8*s)9-~t0&y^XnUgC"аuD& b/8#PCPF SDb63 g9a kz h%\A$u!eh1T 4+PKaV7"' a\ኺGP%0RmȅmV$ 0`"sK%^• ATJUv`!E POF;L*ȲB4Omc4/V.*_@]o=SZxE!"@@NIa}2`X1ܸ$$5! $I`G\-0PB0- HӐAH$E!Aa(|°D8EL1' ЅjCL`B N„ :) `l M<3QZB?8e(F7`fcX0 x@?$ ݬB F7@\`I\( 9ȡr%JXYE5p E@ R5TCLeWYhuEx,裮#5  Lj 9h3@8daZ8؈>OS:7Ykp-qr Z2) J~fv ^5wH6{V{}':0b:Ln@(ŵG8C EU#qv\Z9h{T\dQen6N \@ọdA"&!1 #Q7# `R9Z'p\pj6C.@D Q&Lc2pg8[(x lZhBo$)jj +DU( ( $Ă( wHA䀙`@A?7H@MXMA?A+!B3C/^#(`58@ L (=pA XWT(BZ%XOlBNphD5H5  66 pRa@AHCI-@dNC<&4ɓ*Cȩ@̖" tbHH0tvC[;@ G<[G}T8`Ji ǠˈL$K ,ù WYʶA!pÿ@4U@1F\E? |l ٴ͉YLUsMU|OH*O IE ]@'HQ a PEK80ᱡ$W!JR(BB|Y YxE:59p5nENd`-٨`U?r!t"h@P"X ^t*}XН` $ !%]2:@A7\BIQYx0@0x-1X (*-B!< i f Ր*10hEXRno&}Np0X f.+2)C8= T D < sACd,fAW@{AlJ+P84)(Cix ) |7%xEQ;B9 $!`GA37l8C2%pCa%t 0@=_PI6ӪD( M?]X;J*&OUV.+t@/q$8F. A>t[tB :cH FuǤHt  Q#5¦ E#eCT:DBjLDh% ÐR@8Pʥ~OjeVZ@]WMcjPՌ["HT*]%D= 5FaֵLTŹ!$SRɋԊ% E۹$0qhQɂίLK\L?L$ $- (B9. @JP P*@LP@9@(7H+-C H(\J?xЂ/CPId.`* ffȀ m y ɐ=hX y +Ct;\*gcyο@ogBn@C!f` $0i>0@:u H!H80I LB/(B+C9C@A`'H 8`KН1dyA1L?lmB#ŀ"P4\ B5 6 n@4@>p,%@@>@9x;xC d^ %6l5p_PBBWX2@ El՘SZ ?+5$Q4M\q= >.O\B A."(BCȀ`'A/"[1&N@3T8tC7J5t]*Lm*0LEc͜Lz16BB7ICBPDD́O WaDTD $FP\GKA*Sdl2. 1HkS%ae5dc2k ګ-+XEY]HkdkEYZ,-%CB< j rD W0FP<6! 0"xA6oB?H(|?A‹${ÖY7<;Ha.L((]BX J~ΣBfn+?`#\*ّ@.$(\# \7-Ajh>S=0%9M bLF.BO7|\%$-FHA+BuiyZBAL-l$$-N`;S+=j/ƂAL2A2wT8@$TGLj 7D# LȌ6\NA\]XEP_AS71 LtI[IT&-ĩB2+aDA$sY9r^͸,;j8xy7DA lDHELV<2RL^iaW,޲US+ÎW8 nY @4QL @v(D&pVIx:s n pA9XBd-L2$ 2`2L-dA <}bwv<>L(Ȥ3N %í M;܀ E@Z˰8Jc0jE?U۰@PQhĐB|%F@2Z)+)aLXhK1 yRHNe9*i-NYk`p@;rd#106asHre fK.E "g32#Zp(lH:1A7C~ CA-a\[F^Tmq#YhrUO"1cUmhy'Z, T D(!2THRD"W^6/:91U.IV2*v쐖֎Z>xqǑ-wr Qו֤PЪ8iP>u"DG5%y@n+@Y@Œodʡ 9" !o oś6hP & ȧ,(Vd`[qe1<+h9 ~@Y9)$[G&m}Y(icWd)Y(M~h6\qVc8m(b()qf3h((6Y6E 6ذ 9l669MY6R}U BP41?:)Ï2b#d}ࣛg Gpx6Hn G yU#}"Ab\$f$gЍ]wQx1B83F}f5} *~(6Ф 8eqc (-`x6 ``eT(ѴMdq3QWD"@3\$ xs`0iRc*:`FkkRhO/%"#Xʕl#VT$X'HABe`>ە ]6 7ihQy* 4`*ΞΠ#()@u+908ś Oآ* >yc_C78>4*" x~7TR駎RAF&q^a1QɇBT10" HJNnb{D[(EP3jK06&91bԇjr@ --H" s6# ]M>a' ՘DlZ@ ޠ%"80:H` b( Tq a$zCo,NnCx$`c,;8 < B50@ *pG b-!J I e%iXc8 g@ә(9A`oR 6 >Q{86(Pk*%HKJ!AK8gHV$T%rd (qB V,u!Hֲ|hI+ֵ-}ZzkS)xe#]H  8B`p-6(PTA$ w&IJ @ Kcq3&&@%m.&R-"'s@I0RB QԘ~ n8@'6P!"H66mehS"El!!p]ma`08␳!%s!p c V"$ cԡ }i dcaZ*'f_B>P>Q ̃ hEDv8@N~@Jq2W 9d#; Q@h+k(#q dh]/GQO>F1#X(&1G-bp! }Gz%OY lN_izf`TEqC>n&IIZb;(YXCrD?nU?&1/yQA(PҔX:H!RBe` 0ַee!ۚ>}-m!ZA}O$ԋ(Q0H^(½P3dq`W$b",3nYGА͡!bBF(V΁U,яA7))է5-iVDm W$Mt48E1Ya:D֩ l!n)K1dm 5vW*_zkAq̮a֗Л8LCV@Yc}h8` AsP8cc(LҔqP@*9xDЕ:BD/uVLx'@N st8 3K9!`5v$ L ȸ}xVgg eBF0 Qh`PO>).>^@n˿D,t0`ad4t YGhD!=4ԇ,7``)aXikz/M ZSA6q^ %N@r|A.h!a!*f ! A! V!pA, n+k5LXL1@!XaP7WX* lac9#8xc揂OS9zc, Yt t`A ` vaD! DGdL>fp $C!rd6/ ADz`  Ft @#Aφ p! n!nހ$ &HX$`ςLFu.6~*!($V!ZQb ,`_D! a' ~P&'rT@ DKlBl搘 |ێ~qܺi%\E%\Ѕ\1"!%^P  |UDM(ael!c| n`k d#h @8*Ǒ&I(CʆQͱI kj h  aJJMd# ]p8RA&Nj$%ab"Flmĕ&*c knQD"SdP+y^ 3,C  l!&_FtJMЀ`X`0@Cn"!u(@`HzA ʡf a@. KrA@A A :SG|aDAgd@#FwL.0 z(Ap!0NH*,298o:C~737Ah,FaL=nlcW!Al'_f'7n^feYv%٠o_wzH @, qg?F($hEOL*$*sCH@@o 0r@> ր ΈRa" T$*!xnŠ!ġā(ħδO7!&rɏFށ.:4`^͂H@*`?>!&hu0vovsc^w7(v`Ҁ.ÆrAҠtF\ \@V &!8'0,p$`,!vr $/ J:GX@D0Dn0L P ,zWF39gZ0LA `Id~*,*( #NɘjAj! *6 & di %&O K,9'#(Rf``B$ 0 !]c;8U8YEx֭)mZ%P ^tUg_f'd & X"ZUe&ᴋ$MJZ;4M`  x_QxF)87gF'7HJOTfnk:}L2VwuOr]&N"*m%^ Z!v2#_f!@F :JhA (6n&V"U9.8gZ&ЀR]%Z?,׀RD,( |AbN@ThA.'ɚ`4G,rm) hy$4ހ$lYaY`!Z`y@ A>>-pz³=JH 60?=FrZʢ:=ArDt@ 68w?z]t- @RlThaP.4 `ġ .Ȉ'ωVNa곻ׯFd` @V^!X J;m< e( QҎ|V X3 jlc!  &9R1/A9R`H`m@ $nxޘSzSթYx[ &puCi}PDBԾ}H\"cF;vD- KGr(,mkň+(ܠڤMP~a̕,cF,!DABU?nB1VhQmB- EЩ +N8@iWOKlqp },NV `̚4klj)lHϟw|>ƚZ;Ra#6WkZ3iҫm^#jV6g , FC5f fo >]qdh#~֦3ps q%|#GX,dя1P@ PXb !T.L-GYtL*}'!R2Cat!F] 0! IF>TNO&($$1;:AN R9; Ё gp&prXE8RΙ`@ ?XP\J͖3J$1=v(:م]T 28,BJA HH>$dZaPQN$`A!AOh - 9T"<d *@$\p!*qv\0F\q*I$ah ӘDĈPFޘ-9;HH 50dɱIpOlXBFVY ;HsG U> EC}QPy-T#K0fasFi$AOAc ==e]F'}Ç|nx23BDލODO83Ee!eTRI+?ԤQF-ca0 iMnb@AX1Ն10tTQ,d}EE,$BTp,4<ȭGcfyV?8p P-1]̃u S80>̃D^p$t c@E/%+YPŒ`%r D !jHTzG5)aIFXar2`(τj2P@؈:"*T,"9U7u]Ȕ44hF|=ܤjW2S @5yb#$|``0oP!h- ZkP#  S0b 1qSLbp5 dYp*p!IL"  &B F!,|wB!iH!"?MX'v3}My+1[B>&8Ԭ1F-~11{b6pm&c !r%1<^RP"  pSn0=ֱ-eCL8> p 8'-$r qH$2אH` H LA$8Չ H0W 8iaր *\-pC:)@6$z@v( ~WwPD P @,t) 5IIa3٫Lf<*6;8mN#޼Fņ2+ͽ3TLw3BXAT5 F f@!x#PG3&;K+ ȂE"oB1PDP{u0V| 'C* !p!^H %r>+ |OT b&W#MU +@BG>a@T<b%L)9 Q4ITm&1|#V]=$QMHFV4 iAc1i b8[& ?`;;(pz4xA$&:+CVk#a^K  5w].~@@2A7qib@1bd*Y^h?SH#˗-d(@X ggOCm8-!)Nc3؃>.{0c|il}~r@7MQؚh-mk7yVH{8QN ŕ\ \1 PE0Jd Y 2@}խ.o'N1IcE~D{E!D\ >|4~sb7CaA^x e?G5pYm33'fVG)q /$F40 '+( t A$cQp aR$h b)yAm!e` 92OCamP@PF ;" Ux8=g`d q"P@@xXrC@ ^@JC' 3p"aq,1E"` p+W C UOr(l.)VrB#g Ðno]`lBHH@ ^$p $t0 l–Bl6MNwC&`  # 7Ԁi: 0+20 P 'V C0]qAgIBt+S o Pb(W mhp=TP\ \ 9 0 @ =5b0H C K bvaRp0 GR7C^`#r4Mtv @ R?Vlpٓ0?0ۀwb' tg {0d1y 6gg+A D?1 m#xS7~ [NP@['[ @|>8q|}|Ѕ9\]A 1ا]7:: gaE0^QsaE/%E Z3_ pL@"߳CF,񆲰G@ Q"0;Y@ r3@ u@up@P@@`@0oe0Q1H@ `@'@^$ 'G`O,@'Y@KJrv]j#&$qJ$2N(P  f*:*[J*"Ng`l@{*[8 ߄X` &$`N] @ 2', +IvGY ki jw @ o @' 3i L^3^ 3oԀ a 0 .$i'Tv K 0 h'uC 00 *% v5U@1+h $/;2G0@)0xyE m5h51Az?AP((ƶsl_tFҰA`uy[w{De`[}[[& &> C9 \Pe] ;̷Hpq'~S0L;w39Y;E@=/=g=n`v*wF49x$V !)'G,xwbAbb ]v<0)_c PKA00ARBa;^='йxm@Ua-*F_^,[hWW$hf=U @ԀDi of}Psj3P3@ h`"EP@PVkh@aRlOIIfI'@Jdr B &`"*IЫ@*h7à ` Vg {io p,  2.0 zޖO,Y}1/\@W @lOr.|O1&(  .mz 2. vrQ : C0Z0up a*${Xu UHk(" /B U ?)pgk PV62;2 Rd)Y+g LPc@0 `{PD8e |@w8qq [\39jcj`%99\ҥ\  ȹwͺf^`YcEm?{q gBqP@E_Q a`EÃp`>SSvw>s5 5b?Q@;|ㇼC^=?0 0k;qb(%6eQ l(;'aBP#<5y. !nQ&6wr0~ hPVYߓmtcȤ +_( 0#R3Pf v\\ ̹/@\=z\г6`>$Jw&K(AAV $$(oAR $4X"!PQa 3@,uWĻ$$N( jIuUF|2Tbu1%0]oɈHC,bR(,X4 qk*5,'pTw\E˪iOA+tYj„iI% NE>Ȅ +W.Ǖ+TI(Y(`D(K$`8!@a 4U7M+Sb&YSnU b|sqå\U')#F b".XGSaa $[nG9Cl# FK}`RaM(\) 8X98YYXm6E38ҖMl9`3!BhJ*YN,2#O>(#> TP 48L0!8QGTpy44N;ROQd5Kěr›ea N "8 X:#&Y0H ( J|0>X| DCpdX bj}Sx' 2 C:GfTPc+d; j@ 188A Kb&LcA9Ez(>@/4 O$p/чV0*pE> x'D 0"x|BDDNb, (>ApHB.Po ? .ćH8n -(#?%JT$TLQJj&Ma*P ySA*]e@b0X)TWj|2(Y{6" p$@MaͲEᵢAAOsM,5J{͠3 J{UGd6ZP ڀ}`-\6Ȃ P"p#d(7T@%9Wjm#ĘY4MW"D? 3戽q/V  T aM%-YmީOoԌ P!_:r`4&E3.xax0Z酟1c汉 ! Ȟ5+ȁQЀwak 1i `ax ʨ@ &jZ@2KH$:%X- P!؉U(0B%3:xȡTC0xtaSr57T8>\xDF(dhx P:q8^d@5bVTK4-(xIȂVj5o(U[pb  z e`U 0j&k9k(1``@;T `؃qɨd)& D240$ b+8&L8E;;84'ApHLQp'Ĕçnpn~(ԕ}P Z9)IzʹKraAa H6,IY(&)ALqig)z@a|z:UzXjل`inIYZʃ<ȋ+o<YQJLx3ҚJ-6h,)9LT: zqYж(9xʂ+لѭ#;::* 4G9S?W60yi2XBȅ@ "`RPGx+: X`^X L*П31Q `[ Ā' D  UV@ p\q#qUx j@*(8dV7d7HSEB̂0\hhI0bT9`(zoPX oS`DI8Bݠ:…O^j bVH\Ebr؉{{H¸01'/([XB؁Z@1f~Ȃg =)#iɿ8,x,a m v08{\E8LE00'+l1ׄK2T690Or,ړՓ e۔) *,K MK8́CZ/n΂CSdYZ׸(B/HR$oɿ GM@+?8 X؍y(4 bX)!([p)H|p@ $ 5p$  "e5[7E 5 8d0PB$[P~\I 0(0\9xDs51Ux8Hw01 (".*p>V0h#jV(T ,]>px0(=[ՐM[\!XD@;"bFab<0b5`SЁX0BP0S"[.Ё$4̒ A{Q ݲ"9nh-ۼݕ .P`cx7`v7HJIhuIhW{2H<Q1'#؋~JHL'~^95U}XɀY~nn9\菶m(HKhReѪn6hABhH#*˛<2~Y(!g񈯚!J@", nxq[jiLkY<Žm:LɖÒ5H>h˵:h pM ̔D:(- ع> ׀o@X>H:i!*[,K]ЅyξeYψp,7jH 82p樀y`#"_@  !$qo w01!Y[NT -. Db5X!Q+!t|H,HP6@\ b(xx&h\HpX!0eP`{3ٍ! B\@t:4 쀐^س7>x5%/|70:/0)<B 7>:aj DP%pQ/_-Jjd-7,X8U![VUWBPZhGȌ  x 4 2x bH }xk bqZOX"7vGhhJu=gs6p(>B)WKDvȏWT{Ŕ_n0OquXVH0؂}zR(\1IX<3لq$[ca-yYxK8`iBH90d9+⼌/yU88(HcЇiZ0Ȋmz=qז(X^ɳƘa+a+ q:z $,jw!-Bw)2.ȴM }+):4846h:sD2n1oHZ#8/8~@רi3cſ.I3x87(/`=5 P  o(r0B7xk X%HF!^8'H$XM%  Z7V[xBF?I\!$XҠA p@c)]}D8CljDL[9,e:\Q N@un,Q؛:}hU,8qK>pcIK8d[V.\DA=f0a|qM9pnMCU% iԉB|6IB@{tKF@ŏߛ$HBKib+ʦ3Η0eH.6LYE*ej IRL׳c_DD8eLW>YMHW8+`o~$>̀E^$ݨFz8Mȓ>$8HOjlm1FrD ?QD۸%X-l AHBH=EB+$!pHPh6C'nÑdDBpQ+g2%l>pF=t 7tĸ,PDÐ~Z>{B }RO6V>%@a1(8Fa(*0kAf %p`r@A|R -İm P-mb-<%!Qb?P' <}̰n2C.aV&paL3@BZGxQ-@A+C-(I\e!}PTx$@,C7rxL."B -3šU%;tx, 2W;O9RJ5ŒD C0#C 1<hY73 1İ'  gF-;JC= %@d (f|8%0+Pq$7s: É0"$K"bLYAK92 @L9a9ŀI}`$F2 4! |E/3 2lW #- #17 axNr<+$b 2i|1 Є&.4![tF ]1b # aD3С"pg~s#\aYD&hQY$ #|h<#_'# 7ʟ@ | PJ/E :Չ+9(  ӓGAHʭ0TCʪ F-tԐ B?|Ɋ@M@?ȁ@Y LOÎӠ<+؈+eQ^I6l5D@ YeR <ADdAwAA'ad3ön <*I91GYa&+%((,ǩ,P h p=S5ɫp10pTʏ`mPm413LTԱDlSr HIS 0@,!S2KLE29GF} <1^g~1fDA܈B& CDJ>@JUȂd58u?p^۵ dE|\ CIqBiI?TU?lAXȨ ZpW]8B9B@*\3<((aD LC;oV9t\8*)0B N)B#^?2/)hiyCmB8hql/5ڡXb6 ~*t*A,2 @AH (-HX.3(ʼn>B4<7#w4PAn d8dwb9lX/>Ж!C/0ݖ $@B`BYELrd,§uoOHAE%4=LFB;W<&wLG&)z)Q'|9Aec+r{ Б}$@8V.296ҵA6:B$Ld,dX T3Vs34`G!Hz 0&?w)B7W~$0Br) `<#tQ *Dh5B  %@0C70cdTpB gW/O-DMkcxؘZdgKlg#Г9ϐŕ~~ݳW eWc#3EH/PmYo\C|"\ h%6C \!$>Bh (%b *r Nh# E&I" VbIb7, Dj"%!S9'FJ)h.Y&r v%0F70(ixRFOKv@0DX QD TQ @p& Ԣq00X#+ *"S|]t)GhaDUY L.)'Yey0p pc’xV or^e9@^0Xd!vpzvZŅ?Pf*e0|S2E|HX( >E|⫱V .-a[L#*4tA@b2,f1yL'*&Q@e* 4)M8.Út8'̌䑌`&9vH`هrfќYd`ݨ t(n B4mT! (8A\a $m?ȓ}pf6\ #>mp![|mύ&UPDr ET\ 걍z@BA}Y@<<Cc9|#d&`XL~&2=IKoR ҔM 0 Ȣ> ,` m>!>S|8BS7W *}8! P`! /TatBp h8&6*\!^-+Va/$GTj{~FQZQ%~(HiB`QGW2B4rMְ5+YCJ K0؃"$pW2w|\1YJFj>Vh!%c-2bo &@PP+,a I̒i/b8C~S,j8T hhɍ\`QB33X!:/ ܪú!"H-84CE!cp`]ae F1$T,8X $ E 15`X1 1'`~L Zъ0%!D $H*xHlA-/ C 0w*'ULx#;.8WcaP^ހLa!N&$ptf.J |&GtAP NX N` \$`hl `8z,FBaOî@xxH& "!bm HAbnDF-n!D!@D nA)Tm@Xu@ T `: C $a2!4~A L VH{C_3|b#9#9C99:"ᄺ ^ h @;f` R;ȈH* l`Ɵ?fmM2nc=^kRVĭR6QjN NT` @V]6)D ƒ j p@P~OaI,SMJB eG`nr) >JvMN,Bҩ >O\i2%e ZA!MGD@hc_rv I֎nDU#aR TlI`ҩ lf.ᡨ. Δ^*/O` eAG(t!dtAff@r$jPt ha Ǭ@$#pnN@$y @#v  8A ޠ N!@FN /d@ʡ!kv<ؠmA 4@`'o~L֫ Ji> $ Aa[ ('VNJ . !8K؁ NA( x x`#R $nir.aA\*2vGA gqFd4 a`Da"h0ȚPbdJG nA RL L!f!b*\,.ȨB):6h QC!̅:#0u4C >1(c m`9Z`9:ccgqh8I!Ҁ`I K8R?MA\A a@"cV>%ap$=QO.#J@ n⪠ A]aL%\m RfH6.=M$7 KR 8rxrTI%`S @Z.Ve"M2>NE!l\iG)>,rP=\ -H, L bD,N gNg haHb$&NCg\\eR\_!X,OhVtd0O`Ng}a:,J5q6DHHt5 jpaBT D@Ёh&itO:mf&Pa'fain ``ekPNa&An Pd`! TOKp+! b!Jsv& 8!qG1Xk>dfm+Q,Z |0blo  & āXJ|Jl'\`+@* ȧ  bAڷ sILLanT q1 8H#S?3@ܸ2N\ 86b#BU:H3h@c88VÄ"a!Wu!l 8PTL~䗤!V + A(.ET``? OY* 2< 5 v`ĄSd>dRMP\Aң>AZ9M.ްIZnK0ࠀ#9^_S BkDOE<.ecO9Ƅ$pL9eaik;R?$~4>V\L6AZ9FV\ ʍ=m V`.{^Wnj`Fz輭`' E fb$ގ &EaXF2Ohzaw$@l w !lkFGkL|A4q!8'qK̊OVAjFu V~APwjSF!  Pkؠ&@Xr`phoV>@y7 h$hz f.4q AQ!@߀o1,D`h![`_CvnGA>`|!C.ZKv' A`4ZFaf .@ g^~{';{.@)@Q Q88xC3؍áRیSCLXhH7hU[ 4@2C} "Ax}9W- cWSMR]sIa㗹AN^_aG9iNG$A*Qq!`IĤ.GO@^@eO2C^ٶIun? NJTtd9`@ZmDUd栭VD=F r b-'$aڀ2FO`OQdbvj@!7`͵WO\( vBڊ%)`恪\!⌀[J`ER!@*f JBqA1OɥN2DꩡlٚQ5*7cN6*XX (FES LEΥM'8\E%}RئOK(J-6ES Bld9FJ:a:'ڸ܆!Ba6 6X2̈o\OcJq\6Gpi`S )ƍ6Wӷ2+ݻ]AY%ijCa{c8_=b7Y+B` pEp>gbLR\0VwP!'3 -TJ}D׏%@1,p &aKXH

5-2N( 6.`A @5t'7P8ILG7 A@zBHcBDUQ2M$/{MĒ0I7RN;좀(  O@)f}geT6PE YEE @1a*FfӔ0g ub 7Q )WghW؂|O,aKPKP'$la90M)`de1 B#Ğ>RX-R!Ti1"/Y 13PDG# GrTR:R ]^/a8"hQa zrg5CQ AUՁa'1@ KhA7TA^0N|}ǰg* p @0Pcq^C8*|" G$@KUR5d @P%9`:-@+pKxސag %-XLW q8i:YZI |!hQ->lTŀ0X 9b.V! IF4p`ʈE,R@$L`(bх.l Cb bK 0-쑺"E؅w%<D&/YIJj>,9^{! >ySh4C{@A$H\{Q9I m]< -4YPi+ oȡrPK|"9VnCmb) $YpaYVP5t\ֲE83Q áҀ1?8k c4\( 6H{$w #5G7!t@ A^PcÐeƨ`o@̐=y { :~G?txmQ 2#h"LWcƗ]2)!kZ{q>:u苔8Dz)$v?~`MlB=d:}h<ӏi Π4| gB |!a"oP ''!Ćy6@&/el ;Ay`7p 1  NF *Շ0tXpXh\8~AX:/*Fo% rhr0sc !eceÍc"fϠ3\ъL@ko֤ oxa#7 'z?"T)?/l Yp(0_@- ʡ hA{\A.q$tt`CX1a8ss Dn!![g\V pЉN=]%#!owG^&#@{$I`7Y'GtdHTDC# 4 a j& \@ ur@{`jPEq_)dJFBPeGpAPE01Pg܀e߀aBs  2&l`ձD#r"M a gPT kB^W ` 'b p ^@0aIa 4!kAGQ`hBiAgAoHAf E!mqѶ`4 J&r@ @l#@@7C`9xTc eaPKV>XB@P@p%'vb ` F2 o 1 0 p(} F$˒YU@ 0 h y6 P OY@(`N k}+ KQ Z TG0p M  P @ 7eOk$@SRw)c/Cuus?0w0zI1#31l\(o5}  pU,Hm@ 4Y0 & l{'+[s,st'97Z8 Pp '@ p $s7Qa  2`"ޡRY/Yg/C5/5{/VW (S iF(IH(df CsG|Hvnf B} *. 0+S 50]b tTh5+b5yZa0P,PS$ZP p7 I 9SO`P Pc3|~";)^;j ǻ,  >:S & (0W01V*T1 WЮZКQ` @dPpQ c@ >]"g?" JGm`h ,GPXf 4ja AndFqWtM҄&!F`(J ` 0P1' (D@r1m@3P4fPH(څA ƀlQi"'j"s@0cX^2JSyhw!J<Ŋ2"y@$}pa7s$pLnjPp}DA$P!4Fmt4Qo-\!O@ |2ǂ '+ğh h T:7+0󠯻G5$ f 7@ )\R~ԣ* hPd 6?{G`aK#"˅< iD?d 5am@W4V^Ya!&v>HiFhd-*&8Bd8 vP#G0fQ#4(kTPK~\%nz,F pV<@ ZP  " b Ƞo\[  К 'lgB}%0gaMd HPUtpgv*pu"8R\,`Xpo} ;0Q =' c0Ȉa@ '7+pq,PinT9"ZrCp Ip-' p *@ ZI , C`.S0  0ݺ a;S; K)Q)5Q^ _>T f`(phMڳP5`"FERjrm ( 'Ё*s ڜ͠ 9IL@.,nB}nZ30de pp>u;LƌPS 1G(M0'G1_i @m  1`%zhPU@KB TEPV6d4hbETԅ,D$FPAMlYAK6kql,0g~3b J[)R)y#m1F!Wrse %9P긲#FAAB\ ,BW+Р9JofЪHůU+|Dg -BupKD&!t˜>Ϟ1%Dh@ o9k%Syoi+U>o|A8`o&hch CRWN(g)\dSPBf`b$xÒ7X`AhCIpD7cp0q\F108 :0%08^HBF I0@YE^>)oI%P&CVb!b&9~!GdQO0I›7 {`UWYA%_L}A_MH&W_uUc}"Dd1 ԘBY525g)!y|GHv\dv faWfy%e JM,}di9ؐyra xبho @PE \H$4 xΠ("RBTH+c9a6+B:F?NG ~' ؛A80 &((2制Fj! 6_ H 0_(`{c(ۘm\fd;6(C{n\x WR)n`g\9 `؄qX?CD[!܍`)W icJλ^kx"ʈiCޟ`>{"a K ;DG;3pB} R Ze <8<摊:.a>B@"reN> Ѕ\} Y?R÷!|9[ṕtЅ0. \F *P@F/D! Ьlc[( qsʹ*ַpȣV.x 8j2`}qe6yj"N, k }&7HB;W `@X#<>1~NghP&@N+DDD" (l'(ڠ2IyLgWG/&5@܀BVmGa,X[IExhhH?ЀVp^LG@RЍ" D7p沫ؙɢu(9A9I҆e6Ȃ3 T[287Ʊ<0/ŏlolDQRK4ca dϻ<mm@@d:`)0``Z@2hԠ.f]hNWp0.:`"dp*x3L84B__N(jKʈ  ;Fꀌ3X$u]^" @4cGv6"@@ pKr %1(e< . ܊(0Q_x1+}BKŦ2#dFM `anZx {ukZJ5J6}Gp%f9$c7$I% @@ HS3e-|5,eSk_ ڐ8 )0H `>mL#z PaZ~fSN"rAA`)& |(@Vڶ3W!) }ȂQ8L#c~" ~E\]lŵ̭GƲ6櫏$!?o80( &2#B~M}AH Kx42  aV7(2 yyp @VpVd Bsb xU UfjT@VjHjl\R`h0p GOYoXaF;7rXI`{*I8K9-'u8yj(D8bb`3H0h7>pY9sN$訟ˆl[éd)Hy膣,Jpn9) ; YP]؅nSuyYxY;K6"xR,Vreth:| z: HjZk#:H؏ω2W`T8QC٣6(?Ң(HxMxxɊ6m D"P X4 UK>6‰3YBaѮ[I In-M+٬0h~+]>c `6 #$!*Ѝx x؊A>D դ KpVX^% LaAZ`/!O Y @(tp 켮i)lD)tT:8#0pC5sȨ=-,$^0O0 2*{R*.!)ZXD3P2  KT T((/o8[ȅ+x/z2Hp  jh0dX< P.[V"VH~G9bJ6ٳj8U( X7q]}.08&dcF2%(*8vGa&1A@R8bVC;h9F8*Gvb!`$HNhjImI0 9̖2lA4ʭz?kم )ٮk- `KH866/829HMHE.Gȁ5XewD̂$>"Wih( $ʔә͸1 Bxl)--=0-1#8\@IL,,[8 JÂ[?rcq@OnLB(Y}ǡ}`$[pyCJ[M ZDo"-@L?)-l#H^3} ~92Z8U ` xB@#,|m0g@Ѕ <` !t0M#88 _ @Aə` (^O58M `|@ x8Ű)[[X#(%sꚑ H#Qjjj>S2L{و- @ x;BPTD ~Nx5`5R6NǞmPI-ԊYQ}Y( x B(3ê&rZ:39}P98K-x Y@83˹X˝nj:/y#Hp㪃JVȂ%H?hbqE + ayК0a#h-%kvk~8DH9 9 31$*7@+:8C ˙9`KTBXl^xAoKk+`P*,׸Vh~ނv0 xȎ: H09`ՠ(/'o  Q DQ%8.Ѐ5&II`1@$t~Z @7DԼ3X2JhV9_X/ <(u8I'Y`$ ]R={ʗ.BtU>UfQBP&y[ $%Ą jb(Шj$$h|7ޜHΛ,u|:l-'LI"&!G S=S)N1r!,.]1L+9[}Nz\RH)D:h:u֮Y7m_$&~Bb"n۷D8yÅd\^ȕ))21ŋY@͇5j2j=tgb}}\AM+}F\QІ+PP%'ru<1I1|sB/o|#'l'XBul&Q@mR#!A /"r1-B1} 3arXRW1DgQIhBB9,`7kb 1a![Ek sWVg!8uH0*xcx7D#T&F S8H.AD7X7,!Kg11 N 5A"ܘ@~f8Y3`:8>d:!'#|]hQ HldXIt10YFG8 @S-N0^x$} ."Y*3v~C+ϗ># 2.0-za9hXZ+)8 ƌЊ~#43(b%\A+f/ Tg@F,A%3D~6PUg50taopN!Tq@P"0GIt8A 聅Z 9sk"@ qmh$8ONr3x1St`dg. 3q]cl,戠)!h @E>J`B]CS+Ȳ0~dᮔ1l"pcQ7bz`k }C?)'}R -4`[!6"D >{Z*f*册T# b >xȜ+6_G`A>P5prȂ2$?)Q%C"`Pf l7|xC|'$'L@`O .xCȍW .@19@"#$L. 20* ".LB"1 9 -)DFt,C6 A8ęo oA8PqH}A8QuZ,GxHxa A AvDZ3|@!lC++70 MXW|H%dP´T TVM X‚KD-K (+M)ë|ə❸p[!+ʍ$p Nb;nB ` P%p\@U54\ 7DH2ԨlC\A PQI,6y (q%]&p+,cД ~CLv) 7mC 0\\ DA D7PޥqS*- 0X&>>C5VeA?H7L@? <yc P| `$ A+`<eNkwͰ6҈"VHԁ+ܕcЏȂ7KeY[4YPYf/ ]\ $|]_́b- (A?D±H0f8D> ? AECuJ@Z*8!/8C9"%k*7H.᱀t$ AMy5, "F\]T=&,^!?,AdL4#Lh]hLRJ<"B1RK,&8 I=ЂU|?L6C٢$ N.q@J`$) A\}`EfBD`:H 4YN :C ,0\A*@4 D ș6R&Bm390@t% rJ Vt6h&)ՏmlD&9;Y V޼SɢMavJmlm۶)_Q+I0bΦmI}M b@.oy K觟@ F1ĘUI= \ĩD1.@ pi,1-2 YH xIRk*8pe#(x#foe:ZyFa飘&TADtE_Sa1&T>oHy0 Y9.MȂbMlňoo+]]hVx#P>ŗTdAZi8(d fXa#8, cMϐ@T b0 o[ad:9e0p #5a ě:n`p b. YdB e\X" bY%lA"p'"褁~~d#dLZ_n‰$pLZ 'lyLJH PQQ3"^;0B rW! :s" ht*BB6hJk*(Q<88(&`<( 6P܈VP bBlpQH,XA蒖(8  ؂B.m*B]A Zx }P u B ]P-p%W"NCTg 3kC} PKC MB0Gnh L ysa~,7D+>|0 1>\QJiC8+7zh$߁$' ,3 p(-07ԡiɖ౉NC Udٽpl8(*.Iizlp` 83K\\3hN a".Nq a(F0-|>B#+F@gd PKU.' rYE ~@Q 0`}A/32ʁg # T D>r oL'zT8,d !LbXb`2Nb H)d@# ZX1Y%HDdD@`` A%AZ1b@\,l:Y hB#="1 j&hiM (@ q0Ai emkZ֦۴mpl0nBv]! ̀HȃpOu (^qVaD! ^ \R@S j[ @BK߰Y$p7! D\Gx%!Q X| WЏsPl9EA , [+1| MD0[C3O6gQGj\C|YKyL PAHJ BE( Hx IC`?dI"LD' !=~aQɒ8WPD$:r0T*tVUAU90 P1/48HJ N4~ |A$!iN0o0 @hQ9CTE% G ;hx:t# $&q&e7ghZ;a6A ~HAL Y,Zq>q/jT#Faְ.Lɼ$C$V0,HE*x B `80/.ta &$"zZ` Ć @ Cp2Hz40@>ֵ] ~Zr-lBGB ~ڂ}c p *`͝v} al{f<ywe(O`8FL)X~lU'JPUʬ L ,'  @-,a*B%`8"'E @!`Z!r s -> b r!?RA{((̊- V b`,nL  0D8UtBHF%\3X--Hb6D,주HV  ,,FK48R,4`*`(`dAS!P ptXSpnd 6=j<-`3da<|)*@*H"*w`bJ("F%Ȭ-$@B8ajma TAb\ PDn@`* ܘAh(7 z6DL8Z(̞{$ \(| XX^N@!tP @`절 2Lb<:%A(XRq`~>FF*2% ! A (yf (` ! !Xea@_ . Aā; m^F 0 X  * e@aEa `  fh&gʀ.` ~vhkH˵↵&jfpoFԀ9F f:+oDO/ O|@ ƺ^p UJP6& U3"2qG| ZNZ Hƌ"N@N-I*_ta& C#@b!pDd` az0+%Ț /m^(@vT >a@Ag@gOAa@X 1 s1 & 40&0H!ʁ@3@nxa ,_fErHf !:aJ^  `7yshh:a~!3nԀ&jk @W9O"~Kk3woFk3x Hzc?ST@98`@|G?g IbAo+r f(=i7I^ފ*@Hd6[NBSb#F#jhA|1&@4,h# qv4@ S ,-J zIփ s8|#,C@ňi A|ŁSARAW&(R{pBHRf`| >+ oaz\YQCYY+X+ 0D BXChb h qY^5K4&w\Y,…"ܪD#y\afaĂf@D&.*AA xf:fMI$d`K%x 5V.ĀVA_8Nak F@a gGA`SnU, @rDK.rdd@ LaL!b!E^. 4@AN@D% @x\Koy`p@d``r&go 졳.wzh:XKtC8&R7u&GpdK˹vWsv!x&n+fXd80J?L=HGq\Yỷ Bփ梭U b"'d(J2v(X@Li(^*b&&jl\WhcNM" O|)>D J,!g "GTI,VXH}- HTC4 DPT%x2.nuȍ~@~Ӡ lڠ#uJ=`$GגQSa6ᄼÊF,& sʋ fu"()D@f O;@+ګ `1kD \3+IagjfbAlI(`t!|"LZ3R4ĂOb8q8  VŜf@_VV x x~%uΡae _aՙ8%gK'Y)$` xaaX"6 aHaQހ* a z0#$.&DTntvjqduncM@`g@ \Zb!lA  & e6CK (CdP)ER)g$ ^Ol͠ *79hh>s~a3uiFk mm+z+_Ak;m^Fp"P ',+R`<GFʫBO! (.Ĝ (|q *Dtt(^Ia\@ vvE$,[ef"! 2=P-!tMȃ$]3A 8 iA(z&" 2(VBg""H \*6| ,9`@)QrdK!$3aVP2 8qv`@\qʶ6m&K6Ba>#mN3b bLhe䛑 `&Zh̗/hQ8᢭A"7[}fOB?KZ¥A5q`A傈Y":Z / 9B bI>,ՙ9@D2~I^ 06F9 $߼ъ$* 1Μ@@HW*B},v>v !⊲62PH+Џ+"ZAFbJ (QpyH,-K*ŁZ$6 L/LB$bJ9@F#(,LsP hʠ)a=tsDʀ2p($Ok ̀7aTI76.G*bhq-H,ԥʚ $Ncn Z`$ gڀ$, q` <ɥ*13n *̒A˫~. C$StӍ>!sXgs0GKR `u";Dz- < Rۅ;L=0 PqJ/`4M Pd҆1PCu .SN9!^,A-@aLR-r"Μ`Dyd+s|c+CYX+ׁ JM'B u !@23TdS,FE''616 0\2G1%l3G@5J Jvc P por0"9W`8c6gCA~FpMg L83}@@ ̐d\7l f sp@<dQ apAYH'uA  e2,( oJ/a`7zчg к -V}  asEFp'Y.bg%Is@@(3BO `~T033AT $F>@mFnx8Faq#&P$?p1X1QaA`). h( ІH'&q$Q H@B"eH ]B#e?=tPaT{w76@%! :xhv! )A Dh 8~02'JP~SI%QqPCIѳ,զ2E*5L!jG)5d`CҰPWJ|MWBFq%׺hU=Anֲ%ac{^6g Ȏ-Zv h@CHE"fdDZmaHDOa 4@8" 3tӼtc0% nv pp-`QG*%.ԁA7:ӆy`$XR5:liRV́PD!o;\9v5}#P*9C3!V2T 9O@8یṾ)+xf£7`Wrh'zQ dS2S n Њ$@ x  -aPF30 6P3I\!7Sր?FR3pk-$@ DNýC,/lb,8-  жixE  a`? 0/c"  .ă t>q C ]HB5Kzbc:mʸGb@hP0X$tP{> e acy1SKH]ԍ8sa7yR@9 (sv"E&NySqؕv]]*. ʩ}v#TL,^rV\ ADaHtcTY3/y СcYŵe] CZ!b6Mbeя7 0(0NAg`(xd,*ݩCz0dYmj7> g!pll:Z1X PD Ml71Fkv (79^@MF&Z 6MvAbi@ld d -73UpY鲀+@F@}@ \WΠu Ő.pX' XE;54'0!'Q@H@F})]7dˢzs p7LJ6FІex,@%` -rzvP <0!@ }K$qY@ac0  p4$  ` KN` PRpàð| @#C  fl" = I@ ʠ !. I0 Pl.@'qoDARqWN GN Bq)(q 0)O4Or*0r0s2  QffO]JBY@-*RR1/$XSK "iȀ Y`3$0 ]0  ʸ0 lp  : $$R0k?'$@G"  [A "ZpDM< % N 0@ D` K( Ұ΍q!#O$Pґ'rP prrrb 9CQN)m-P32AKa8C CXg ƨP' w ܰ,1a[ pQuL5VOV1ƀTD'-R{GC]a8X32 )fP15kaW@4IyC G-YeF:a wE\ 7hGpp )Y P]Xzqg`1UpFDOҭ8) YQv;q1(pRr upGl ,vX0 a*q `& Iݖm1@+|W` " 7#jk5P}@%5P;lP %A.1pư\o K8~/pek=Z 1>U5F5{]c 2mm ,0%Ȑ Y\v Sa`D6 h 0 "˕X~'c,p #a _2 jl!]Fz p@] o_b1 LIZ Y I-B D*6tA<2|ͪpyM'\N'p Q|0O s y [*$O>ݠ$ s* `*P& ~+u,RNg zCt/~C< ZE\ۊ)Q;̨ĞϷѳ940/ :k# Ђ" JK.A㟐%yL3ߊ ư116TS|͟!чJ!5`Cf4gZD6-uN66 p`{,pcs8Ix,N5}^W': @x!1U'p J5^p_Q}Ph B!xQ}v[PyR!ey=W `L P {22wSŀ  lYq,i \Ů 2b0 @d P6Wt` <51J3G֣ 3"y/3# ;Pő kBɅ$ mC de sY R8p-(}E12U%G\/1X DbZV"V+hy#H4g$T뢪P!IIU{0ŒxCօ0}x U1P-!E 6-.asBT!"Ϛ*^SI Ԩ SNqdS;YdqtwpjE [];G$]M7gH3k+~֟ ڕ o#)ßl%9l9@>c#&h_rqƗyhaR!hFyG0 F0D aVo. 0>n\Yp(( &&^c6aW#o9h>((@ 9 x8>K\HWꨃ:@M#,G6Dx:8]fW\:( Vcc9@SW怡YeMdBA fȜdiXn~h`i7ZIT! bC;FDIC ; * KE&[1>1"$;OO\qS~ME:Ē>`+!& oX)& ] x 0V9ظ$A`.' PC$ Wam* :i#D69HeHtIGKNchZCo#bqC;$H85faH!hBVEE#FS)π`]u8.|I8(XgQAKZyO@E&*@ GAs^X`669"6p y%e^09DŸD (g |V8jbQ,1Z"Ff$$xCjB @10 !OEDR l$a pA,!?DP2s Ђe&h $рլ51@nܴPQ N7Lp"'Xs|G CgIC3$Ev=:-#cO@XA8D(4 P @.`( 0AYhĆ<)2 Bc l%Qr"p`a%Xbz_?D(JsA+xuAS<l.%/1KCG`%ހ LPT(p&QdgBq7x"'kpbU6@0k`K/2@RY !tmp# )>U0P/z T@JpE"P`@P!2W b SNJP=}7ypGg$9qyeUA `D^8 ! ,EHЅLż> #)U +A | ; S.HPq܀ )@$! ($N0}8C%@El@ p: a+:A&0tk^0`M78pN8 ,'=UØA / ! ,JC 3y{#< |(P΍)+#EʉPNGoz'@{ L%̤8ꍄQkpI  ȤurOT!caNL'd kXA PK˷/_`GٲТї.*{(P,l֭%pɞ*;Sd@ {졘–@[FX8ަ~71&(lo8q{49&]&`74">[GH#/`s-Kka v<†M-iGm@sgEcP4Nc@ 0slC0 CnU@%@]+΀7 SEE(KQQ$QV/QDKM,*dj &LrH>"MRb5ʀtpYe] KYl'U ~QgrpE)PMʤzQ<Qs[F{1EFCY P 硈7&:` E  yĝ]pR^ QG bca" q%B{ @?ui' 7lBY*uE>] j'^ܟ;\2yq-YSK3)Vl8<r=-ЩR|OV: 3L/%FXA:W闵@*ԌRm)DD-t[HYN| =KSdpw;*X}|ayzgnˌ=E~nC-3:ѦPqZl@9љ @zWyFNn5Ni Sa|gqO,-H{ȹxpDx'S4p~^AўHj 7s THst N b`G~vwlu+#ea\j0rcK|B $ HG)/8 w dBɤ%9-~KTX4,F4FG Шl`rpx:#W-9\;s(GIQ^ $1j# Xd|L)6'Q +xbt'V^ja,sc1"Wʅ:iW+LE|T I>F5JVFH5 qh~YZv"]aSaeRFS(2UKLF,G&f6f\ 5a 9P@058+Lx`5²4ңDbhK$j(ee(FQ #)e`4eܣ Ʃ(m5D3֊ ?_şg2PNC*A55ȪNuJ20@粔uL[<%:^ %R׌"2 ϰ <3j $Ͳf/7m~zfhom"3)Vpj<ƐjtM S?uЩ-2eLut(T6)20 VH!yڄp{ rzNsb%LdwcӭVI$!v^_`%bdb1Sұ<}<5 t)Nɴڋ0t4kEPCae!:K/m%#XA_e W >q$(1+(" ;(S{p hC0ϲ YrQz5' cYM@z^( hJnf,Γ2"p*\̈V}r1Θ"z '5!c&ZQ(aEq} h)J@z;EYnpcAO)bal`cNΙ=Z#?6~T>;nו7AbguDŰX M8p+ XFuX);Қv i kHrp(z΋zͷuaB)Xr{CquVzFAd t~X4`Ep ӅX3]ɅR"^2pf ˬՄP3JQbQJ26L.&^t%qcCAɏHͭ: x4Y2P ks,(EC)0baN}Jy4qbhhCd1Y<1 ~u9 yQ17ƚTʉ~hQ1}@2h g{@(%v ߿[E!Z~jѣq"1|m|3.'uEp bG'~Bwp~wMfN8@ DrȂ|(|gV!-ƒGsG7hs^ )\`&t#{C# 5'b R XnuZ'!7,F pYⲃ<胁dE4<%hF87N@]0P (P ۰ , cy|a b  \7"E&5uu7 \tĠ_}( }R A7 ?! ±|u| ġrE0\ W bD3Jy##x3|@ S~R X #x)|`"E  7RYS &s3R0:W(rA9(}TC];!#}S(cPP#"f*7]A@ uP0p RsGzs; -9#d#9;#N#Y5,0w({| {2P#m` xU،XuP0i6L@ p:ސ W'3d9s'?Ґ9?-+tB~'wDMdٚdy6  I@`oPP$j58tq0PEpח /f8l']/ 'S)@P3\?#9p0 s@aF` PȠ 0 30  * " :P p )V p 5P7oÁ,pL,k(W'PKP :ހ 7DW7C.S#ZS;"P @\ TPT \f\@c mʦN6^70a' |S @ 2?،IY"m KpP 2AW4';P?Nz3\lkJڥN NJmr: ʫNz0 j(0 84o^uqp*a@ '?3TR:2QW!nJ N6kʊt  `0@S 9krV@#]@P0A*upA FW:?a3qKtT@ʴS{X{ ۰ZIY# qSE"V>Ұ pP nq  <  }` S0UiW@yf@ <חl U;K+Y˴U `B IbK. H&)|" nV 2\d UGoZ9:P!%3EL(1.ts!) uL Ѻ+{XqSL TICA @g` 0|P0Af mpϰ< ' s:vD?h?4?l` cz KVL[|ūdPq!N 8VE f0j!{; aV+ia)e 'éoPP ^H:j%4< ," "V̿X|ũl0%ʷk% ]b~ 1e jKcE0P,,Ywi`P [  A6LHA@?izY0 ܿ!d$ qŷ4 '{a {W'fS%+k K 5p` d08G.Q y)zl` c,-R=R ձիmN ~J| BHC ^EZ,x! h@P vKu b 6pL<(-7u0@ kZT Tmէ>}0 fQF9 -Bв0uEu%g@l|Y94I zNÌR }5O7)):X (yyByНaS9k?*Siڦ|U4%XDRJ`ÇР5L":DAG!E$u%U Gغ`ilxU>(p81u`眝%N zSPb ƶ&Z+wȩӇBWus@x'0ʰ#M;0@"h 64q &*|,Eg%&eb\6kرeL$uf%`8;;eӏma/bQ.i St9e+vxѢXFJ7JKʕW9o:>0hŒ ;+0.L" YR@+%I,<:L%Ȭ e\Fo 20Ǖb2q#氉-c#'zbTЈN/\Iy!{&S;+ي .NA;>[tclF' h >R(Seot qK5N< /cb&% cմbV`e5 ěV@`l9BK( :Na[&B*e+zAh(%@y6`7@=C3(7x -a0ƈoZ hEH!0"h 1㭳QQ$NUcLPfbuf=!oX|SmIʒ#9ckRfFhhC:+s@ 1)fsē--GD#%IƚȓB*y ZRF <8l3U6 mTXhH>hgggU5򉽣amV5∣ShX.e .){f0Hbmn8u{ȅIֶ[%8!Q%jzf@2SB [%D6Fxl S hL7Ft`'(D p@.r;H 9a lap#EICcyԠlozP Ũ.AEUyqMl@K-ޢo{BJ>Pax2-ѸB t28Đ3`HӍDsab:f7&Y'aP^fN94D?tH&+(m8c/})LdKr,Rڲ $x% o  F]&0 d@)NO[voDR1_ĀcadT"y$d#+/ȉ d@Kxl}9RpadVu0J5т67.:n%jN[ 9@אAQ@H1p *2e Y.QZH&Dk†!SvR9c0I ق8e ɩ˰uEOf9 Di"T s@H} !Nu0.٪U`0  Klhc4̦(&`Op:Xh. 9Ѩ7QRc0(qUKgy5RC}Hg.xzt$̴^g#Z2Lq @ixBSW&;*zĞN|>BxPМ$EߊV93m LŸ8z]bV#c\#B0:_:Br`7tHNY~]]D!| m܀HL*\?4 0@O:1h˩!$z6]u+~4uqr/[$r-oaߋ P@Q\ {!0p'`t.M\TfO,E(ه.C l! k`N$ x׼F-ܙ   L`AGT FGPZӪN2, !zijVы7L`AY8Zxc[,}pD[9V؟:.9Ȃ/At@`(pIBH X]>t'l^73۹XQ-XH[.@($;E$j9.ˌRC(b4;Fn"O0r29h^(b4@tD ?эsIJ [brV:`k !2[+/#A=ܷ8LAɧX1J#Rp@@j:tjTTU`6@ą̑ȠJ:0ɕT))B0i"BɂuL-q0[d^Hp$G€,|,˅ T/'zHܷ,CĞ ̹d3Il( ̚3SN{JNѶB+\ҋ(lтIoAAƗ`Mqx,q 6ҋ18pǭ)i ǭ|Pq깺d=$}+=Q;ĆNPqN 6:$xj dOA R' ɻZ=K˛#;;Im,hI-áP3E?Oԁ /@8z|B@FX !2=3-`XEHFH+ ̰ ZK2[ń pl̆$ Y380ϚqNhSA0DSZZ)884">=8 ݀BMxu-Ѝ7XG}u ,r9oԒz jKȆHU=$W-;H+*$m+KXOja:8 +PX L8狼+4"Zjʸ0LPxC!Jx)C M -CHg Te@!K)/`JX [͜৷N@3ٔ ō!h8uLFRS%]so8"h%酆%bpI!w5%"9rC)XȠɠfk$==\ = "=^:Rȷ(Xq]!u0XϚ9+2g|M0c:lOxt@ɂbp]׽ɭPj %s@ R* 9(X@gC+(~^ЂS]gE#Di\ !L$b^e_ ZЮᤁ3KA#9Flҍi)eZW~$)j*=t,$)ҞQ10"@0^ V QB1ؐO4 *%b#2U-O!ȇB>qb (RsAh!ĤXS[\H"]Jjϴj咣|[S`1O8D 9F'Ky5Tt<ּs^ὡo8(JSP7;.FFa>S9NuaCH{KԠY5 7ȑ8!j= (ߞ[RPBі&+]ބІXS7IF] 'r@ox:&!MmІx @@lہ9(H!B+ XB:=d&s+UAlU-]QE 5hrxlX!%XרO{h!XX<~OYQ<")b:dh`@q@'"TO:j<ޟZIiQK,S5XN$f^=1|X!7̀hFLѱ X8[l (A04!̀ L !Di!b,:(s)Vms.n,s.ߎCYp &kK!a5]N]D$H;F.=a\+_/bө$,p*Ma`V[ H׃H.lFI9rg`ltBJrHWݠjۭb=%8n C݆Omk*CPR!6@ !Lea$AJ?YH o+G. PX $7 3_8;TU3-]\2{P05 㩦 }WGmA6#k țJ9XXMOmxoaH $ ZoEeXL jAB[ vj ^3`S vz RvJ*\S0Y:.m](\=NT8ctwD$J^9ŀD><ˁ`zV-@AO2͐ӞU٫ꛠ,$JLxT.=Y rɌdUXWN+g+F ӟtUL-p,0_.j,b}tPs窃?0X Whz aH9`Ԇj|wdRW%xѓihYR|ߍ6@Gsظ?fM`%$<3D y|֧O>ZAF̈ZG"~>Q b: ;snPgaР ol84f'LJT`yƎ'; s` L GR8:TR0:v,%0qSʈ#$HTȴԪWn+nD)*TXG@tБ7 15it^ V kc6f3÷V<~$ F73.Yh( ݤ oDNQTB =#Fjl0th`\617 0'X)Xze%udgLB^AP,Yy%Yy@~ZT(ac4M@CPsj U GDRx5߀*|"3" Lra EMJ 3GQLAolPK Y rhP)v=J+Sb3EYg Y!fdu-f^qgLaTU9/E sE 8իJ" qì  |T9М4a9Flc`ǧYDS}&81RD)oI,! G< @EE ί GlɃln݌@"8uP}HD/\!vJ-`9%qTj٫6l0} ٻa0%rW(ʟp— :d,Q#C0`:ߐ[qnB`ŇImbǜFը] rj^@!nZ؅yZ3d$ 0&$Z rh5APp1OjM)1@Rj@Dd 8Dfb,8AIkK ƞuG+R cl@"/Ђ@%d'( TA?T'`D988pAC8z7^,e ؄ͲN9Q yZ?V͘"B @zFÚpZ/@+ 8D>hR>i8 0k \M*A<-4jőMRR`+b R,*7pDٶDAHM|ø.+QBAEaQ~ER7C vƂig MTU'?LB TCiC :pϴԁD|@К@/,jU FGgH10]y'dzm2A9A?@ ( Aztp҄+p HSB#PLeeж.T"YLK塅2jk)?a\+LL`ɭ P,/A(,p8jI`YK<@-e1ebj,p}bFK6AS02 %|,@1B6iS ̺-<%Tԇ @8\j H`D\hD-5/!$5["MBLރ3/5%CcI t N'DCe -Qfµ3dMHBF 3T'L@t37fA|1@AS*2PX DSp\lT)*|CC4 u)0 yJNXZC0+] WB K;h/(48܂`5SB6gKBɎ[d:D8W0,&edE1WA$iõJx@7H A5Cl,.%LBv2RҘ:MW0BUT>ZIꭰeP4g%`]+)3āH4\H: wUD֔APuU_ ,#s|uׯ X І<70\ykIW I )JjUlduG9+Jl eOD/hGH}:R4M 7z6O B8̓OB٩'Aɠ0&bu _U&9o&Y ,0ib1BW(#}-76grtᡎoj׮/;L -(&XR6,_(Ė9lD.0NE *Nvd^O:Odٳ?L!N 1.XC SS)hT3V]AUAvHĊ2 cQ/dc\ '`cD7\A: 7D}#DS+P mN VkF6jX,b)6 ǸxdʛǎGCXpA }((¢3xQ_ISiZCR\ } Mlj4P|kYa< @t`3@t6[b{pY7oD:7'@BAKKD)bCA(ZtPI;2b;Q{ ;"FMXpS!ӀB! H8p@ @AF*:c ȤRraB}+TyLE-0I@~z2Mx^lrF" B8ڪPY1 MO*`@8Y(QP0ƆfC!0c@GDm~FK}V`=G9$i<7C1(cGd/X\(EȑF ^C <Cb0F t4mJvsI3x(K^E ТH-fQbY y!;0{Dm7UIzR jc1YX;gvA/Z1 ~`..]^ K AG!0 8xY#X /$N. I=5BB I)`%a4g)%8GNE$(Ӌ.-|o<摊7C:a%Dw9A]7/ Nm% B -!, c.^ i(=&JF#?Ρt?A eС&7n> (mnKY  6z.ЌB`OA #o,pJ1plq0M#1b(f!#! P PԡF g LZ"/xdR@]M$S:,/j onﺠ &+!b~\# ~BJ aATPFn!"n8&6sSE1=.cI*Kst ög P h!tAV-A i BDq6˕ltϓ> che17! !j` X7 !z"( *@b8!7m0kQfj.m)b40EaST>'d$vUR;g`&8d'` ~4nt,;`0i!hd`L̮.l>S]gOrq d ! A! ]w!APar,Bs Q dhE2aU>u>ʣzlx#UbwbB^R!!q,H 8.dl@Bs`A ֠jDBԉԕ]bt#?Sr0n!\Xh@@!jIfep *l AE! 4!H!DL VAeA7R:`YlvNAHr 힡Dc}V8e tW m ` &jZ>-ۀm +1K5[!YhsHuKuCYd  /j$P fa~@),<dvgL8j y&X!DS'Tq'T&y4ר`c FB1m€ `Zp(ZAό(Lh 8pa*/6 (:Mݭ0 pi Ffi B0m0\r a(T w7Ajo~^3W8&3`,itkU'x` P%GFIqzo^h'$z b m+M:ڭB=]TBܺܺ(ς\C>(Z}Z2u Gfjᮬ0 ڄ(8 "NR| b8Na%$`CKi"tУD`!,)V+N@^tm Z,A+g,`Gz$g B$՜!e,+&d?Ҫn+-*}ψ)Dn++h de@ LKNb1cIq sl͹4-+Z1ƍ;fLhD6=:ACBʘ@@,UdaGɡDnT(&r(+ Y"|S)1bV(QS LKX\q{qE0b*[FP̣"g<,^YO~%Uy!4yǡUȐrTdhȜ\8ƆS @Hs(?b%ԫ[? -B HS,n(E 88?+VI4p` R/SEbPOGp]eze`12bCe,؊=eKd p|A #i!3CF|%N`P~cIo"%O7hLrYQoawI@g-$w4 _p4-=i`EtЁp^ja$OeGg"<C^=8\ #V)wUdGvxV h KZP Z#>9M A @excfo|cpYc }Lb<,LtяA ]b<9mQ4bF1|R-EP< @BN\rp'!F! VD+z( =:P-`RL3FR A̾( lVI@QrO NRU΅m(WZk QlFh M1f݊ve%.EL+xtIt7Zn0V*DQwE1B$|[4}^ElCQDg뭓~1e\3F߱ G4Q42{ғ8 8^;"L(B GJqYdU @4 9t-:5[ E#f,|Fu0cvPd v9NpV <q7.pAo3A_: =)"έn}*(pEHG68牢`e` S&44a=H H@g R6oga H@QIHB V.H1yZ8NlkLl~%=#YP6iiyna -d"x-pS/\qFPoB$1lwy)znR|A/ N` T7eq %g0{9r UBA ۄ1` W) )`Rf$s"^|:FE9rE=Y8nkl)$P ߓ|"1ns65i[T _S ’zeuo1,pep#xKruHDpK8ysqyAf1EW``9  b%IU8F&aDP4SYgp( tT 8p `1Tfpڵ]$ F1'a lÀ~0 @`hO@H,W.d䎄G7P!z[85Nz[в5-w(x(1ŷihT5ڴ_op㋒1AgT au@4$Ppf:MO4;0 WffffG'Ps'VcXBVB_F!>S~C4l} ,]v1dR>vevp3R1RtHT"/OKayF uf`94g!<܀f!)6(VMu'vi SmYbj{ӖEl>`! Џ}79ؐ16!+UII#ْS:#w 1fљl8gl0>W7#0`px й`f;](GX:j;w;` i:zBe3H * 1>s0WX%p !7; pPfttw![H X1s:Qyl U[C8(`Ģq'D X' BÛCZ Q{0S,MDڣD:wru0Kr@ x&UZ3F%[4V+'vހF,R@?*ZpTw!µ\I x` 7R4'u$p8רsgP 'wyƕtfx F$l;p0J!cQH $FA*g`g=1 ra7bp b*C`cIQnZ[!",zn|jgi0;ri1BD:? $(4A5WK4pCs+;ik;j+:ub 'znKҐVG۱zIz) lk `Vp28p DSC4t,7Ӡ_p*dݚ(]*; 9xo繅ۜ#Ad7|q?b s"WYQ?VU ofk WK3;pi l !:` ܺ{ Ek`A kP,  Dv#bI䊧s?%Bnz?tߔ{Sߐcppik$*$YCupKk;%:q)F 014C M;1 IiP0{D{;QN\[5Z RLÿu'smRˆvǤܛh<` F:$)B?2WpW tDfPۤ! *) k fkQF,Cl[XQ/б&,¼gг%4up?k)p(M3 jCx,{QRwy"z}<\`f1#Kg T1`T¡zz'8W͡+EArMD]@ ' (t(iIk {4 F!f?DXEUhhT`FrJnH?Лm,Cz|nl͘rf樎Z8ά! 0W`0G)ڍVɁL1Dt1/;Ϲzr@R"`q;q%#w P@   !\):uscvI9cZ 90H uQdЋ[mQLTSZ DJ< `ى pCJ3 T4!1|E@}'FlK-/J(yBLq{)0CӦE2m Lm1)W,&M\V9P2 0 `]s bXېYG K-9 k>h $ B^rbW`rU@W0>EG+-Fcwy^ky0$+o^ 1&.` P{0P;RS:~iUi7'T8BnY ԁڑ9c܁ܼg o[C!CNK 32;a |B, ZmIZq`3*x7C"1vC)s+yÇKW Os P 0 bUf{G4~.drM7h ȗ]kS)斟 j9-B!1RoB INK16;Ȗ;&Bt'٘c?*n"oh=Ցrq `|S <)t5N0BX˯d"2"zp?$   p:.,Y` Eŕ'q!1)DV#GD0Z k`s #Up9ؑPH%Eʐ RAAkC]@- O})rDTRdQ8HSK:T8/Azb w !8 \#ބy0)5;@6vx\UfΛƒ%sbKGp, ̚4kqiֻ}ov(IR8Vk%ڤOSLĽ`ch@k@H .Rd){aR9p.( +FʣK@ ρg 8#DjacOl )(lflѤӤZx69#'-:iDdh /S$[:HJHF'4 6 3 :.z9*@F2ϑJ0A!p1 1xxBMSc#K$5=ZeJ!i~_ٰnI6$v&OEȥ,D"DIHbaƒ("Yq/:~(G3KiyX+@|!ޓgJ?LTQBHA sR`dlaWGdTd #bՍ#B"*J䄔yܕ:*-pXM9`"ꀪmL>"(BxԌD*!tH &TPIz-!C ҃(&@c.9r''I ohe99h"4tf!eVNy$, ēEyDF6l:cq8k !`a 0xILQfNKaG, }0zF0 [t!Xa?poF07X"IAHDY>c yaZ`9 bB \ Q 30(0`` gD e(ҧ7,*aj\㰄H6FJFbB4D:5@c݃-<%$'Uv,$>N-@Cp# %V#q`"ʣBZv!D>QX B%iL.P o3 aBVK33ˉd1:wKd#+R`j;;HٙS@R%O%q `>@^C@1>M`q)@,2@b{ `&:2b$'T &:m x@TX tKVءq#^hڰA 9%c,$퀛XҬ jA 9^Wf:ጨ%FH JK5&ROKl]>\1;` U&,HA(E `0 `0"H<+mod8q+x(\5Vp@o]2Ds=m;81 xp wbYjtA-RpV'/xD,z ((9LVQ x*G`Skse8$tձVDz¤P 8g lq"$qE{o x|R`* eT EHdߗ%t;hCs{)s$ jc-cly!x,`zȓ걎Í`$)1d+Lf:ӖBM-1+DĈ|u]! &*ɰJbcĠE nq)P>1-ݩKU+ÀAsl(7B+4u#ꗂ"#`8zpu;J$X[JW.FZ:aJсlE+Ec!@  `Fbf-0+x0&!<9p%`5ա$AYHEG`JFN=9KķB~XM E*%E?$!+B{H9;(hXIYP죄""lZhˬB ;(6hK 0\p죚 Iw:7pc*t˘4␁a@q vh `#3c8#jJR򇂉6;;¸c&Ә? 4֊c_A 6؍AS7yFY3tIV:_0"0YE(pb"ѝZXp!h)L3 e10:8Ծ`轮*y|xA9>=|͈rx r _$20 ;C9瀊80 |X`UhgBϪ -`)j =hB:Eqy>-p:̰ J˫Qp2v  BH i%$8PGOi!xUГB-ü˻ =Z,ȯd *ڀƃ( ȹA33q890ѐKc,K#!Bba 9:@1P: :$P [ņ)0XOðQHi*MJSp97ИH@T|H)@ġQZAB[%#J81;(5:@>0 =.rBHI-*"i8ќ9V A-A)5 J_1 e7*NeSyTS@/2؃-;QM6qĝʋ @ @Q"b)e F``o:a8#ȕAR'S"Ri2EZiSڐ#xK@`4=G0Sp,M +)6X@J`%V"wvTD| :I'|"@ |?R:BY 9USig,ۨ .YY$*fh# hx9-U8)")ti"PMh<Ł"pv4A|j"c!ȗ]IlO`2| P0-8(I`:H4UK7zFUCҭsO3I0VCȊX`aH=z.[YB*PiMIM;M!|`[j0V(5 U=B{ Tx =T89qdPE*4FLB&X{3!а90Tȷ`($m9@$8w!Д TaK}ĵk"( @>h@q}wܑI#G93U"#K@oQ޲^A Dh;:qFX8(V+fUJr 2PpP#? #h&C@M^Sw_j x$ҁwGR@E,`PkHm >* bo( Y4۪2:X[ܒ=2gHۿD1}I}:4:(D0~8r2 Չ@"`GC̊C4w&()Ѐw |].;XFL˰?OC81U;V|H ?*6ٶ U 9|V1p ,)5\B)`,+rXL+(#:#naN=pvFq Ay6:wLj7mJP0ДMqz;e9904΀h@` .d߃k .9V?L"2UU`Yb*:F=3ЇM<#̽r݅w6S@б HQM7(-K7ːޜVW ̸  _rlkx;?؜9QCSx:Q ou|{9:+AZ[f1`63)TZwMxX&8$@-P689.BH= ONh5% sc-1si[*A=(:xhlm >9-b, XeY\jI50)*Y*LSaF} #" bWf~9|`t'! &j ,x0'&jXmC$90VpkK$Kn'GeAp 0P ;*9| D[\ KrQoPP>q^$MoXZK(,"T]W81 rK?:%PWA(N @40#zCfƎ4@u9h!D b4C ju:ZQ ozlسXxAP郬|r\6x"PB'GϽ2 {dS@ X6aHC2^ p@o*iVa gUAO1=輈)S4obXT ZXtXUbzDdr)o^Xyȅ>ާ"q*;U0w|x@$b0dtgx@-@[0R_)g8lfz<9"Qj?A'_g|'e1 +`@) C;v,T(Q"ZGH`Հa`ĉ7+B1 b 5zI<5tVII#q[ѦNB*Ub=p7uk^ϊ0pJx("QrE!96P%BpQ# \/cάyʶ,c`FR|CM*~p`BxPN'"X>蕨W:$ L uX̃ c 7,Ql1E(q|DY[BPX#>'L)TҲFAB>Bnoa  AO#p1&iFC"v!7`8@1$Y-lH5Ca QXKY-֘csX2- shsƘdzSPpe9,[-I"HPrC kl֜-&)g3^+  P7oR^ a o$ +B'+sF8`sN1P)<32eBv8ilxCPa|d3AM6eߌצm嬂<BF o$ h[Qj=LrӋ| J(, ΰ,|S`B=YX Dl8Z1GRAMJXL!|bC5%R$4!I_.Ă[ePًl֊OH9Y: f(dkX){l?1NS n|%)p?PH86),F$tCg  Zl:"F,2Pκx d|)` 0 G-:$3hݪ`u  !QaA/N 3h^$9WZH>`{3ЏDAa,Xt l*I t19뺧.6KacĈB +D4m8IE,X&j,H! 89|!?JB5ņK@(hM)OCrH0_ _+c4Cl,Xb܂-QmRsC>z1S (0 o-ty#D u!#"ZOk7IH```dķ[ @XkPiAV](CxDŽ̂K8fIE =Jz) #TGTp0Vt =ёPZA~11κKF4srkNpj\  rΣ @Wt(NrBtȂE%o/ w@"x|/ ^{X=!Er!cM8Bl֓Yu!-$(sfwq5J8KT4KysƽL{sr"E˂RvcbTaDpCu(%"@|[W*8Skw-˚ɡC0CJ?s"`Aޖa~y?V!HB2wL\LOqM"ycDb$7 '6~"c +`96;' &uJB2|44(+[2}G`Q@@'ldV Y $@7G%JxXhx)N>#L\ԕĂBءD@|Ձw@1(C*%@7&p0(8L$̞"@R@J\xZB(A1tHuiCw|DjHYEH-iݞ@H>=3 2,Hdȣ)tV߰ d}<1 L@a@<*487,WMNTPA9XKP~\D$;W,H B,l _B\d9 C(bDFsPrԓA`OoUOk,SAD(ɹ<ǐ9 p[Vps[`@(HLB""]6BQmtJI}@ K<`DŽQ8gt +=x A h_vAxp`CG2FAC `yע&8%UXDBn H 8 Pçt W r䀵B#o;t t0WX.aDv$e޾0h/X,(]J6*L7m%_ (T!DD*^-;C A?D ;<48}BD3|n%[Qe,б +%$6A'@'tB@Bo;JAH~ <q.M|90B޴F́w{72AYsHpA GuEϿXE8n t˒l{7\ԊgXQDIY t8b8+D0˽Feψ1wlK6|+@ DY7G#Oj C놟*.0ØiTæE/m+ 9ZzI|gJrAB2t `fM~h14 xn;$\nD8:=BL^KP@ 8Kϴ@\A~Z)ƟTQUjB(6\d48HSV*PA[8 \Ƀp81 8G.`gh +(5c H,H 9' A.$K !H zLBQ;6;ӓ=8(eGу\@&1itaV0Eb @! hiK3_ (D0f1>@ \Т|9A $[], ]:> @c/S J 2dz2#`B [ -`\r`rY穂8+hCsQ9e8" l] B 9A&W'#[4$"&g!0Va@22Zh9[6ň.5 xW#[f1 ?@7$gDq1|Xb8Uh SE\ƚ!N P^1 V  [ L^ 4ZX(: .8>ZrT=)H|`yВޫUƿk!Bt *@@E3Bf g=($m"o'`  nafc)1 B"q\*@ B6& lBB"\dKqE?6av4qAuC"1c Cc,0 @gX)@,b+Q$3B{( A{F(n!%$$(2hBTa(G̪VaT#AD1#/79H(A6Q2ƈMlDCH.RK!K SqxX.X ҙ,#NHށjhG#N1 qY+Fɖ<Ӈ` t c `@'Ntp@eޠ5xM"g0n!CgXI!g'P(2[aV:"9w`$д|Gwqᬦ)b"VՁXEQ~֐Xsx A A0@b' 0BdM>c NDV`䖣N(뇅PU 0` 5&{|Z'0AxFp<L̂&E!PVj $AQ1 \9!Bw"S{. "`Z [\bCԼZ7:riBNER §x&(s`9zIT-`%eɂ ( /U"&dYDx`}M: e@3) ýnleQ"$Jl•I{w"EvVvAK>z" `D=Z_2TT AxD b%2 p,`3# b^<4.bXCh/h 7x(!Ĺ zBؐU]!sPU#G%VdF ,`%.g x:X# POLN nAe$g0'J*J~ 1~FZBA .cKO6N '$)߀ l B@ġkT" XN'*y _( P!#$znNH:~ aV!?V!?$`,zF! 0b+Ā0`1A30@l;,f ?$c+J( \` !lXK@rZEȦ\ `d@+[ XC6H 262BTR@N6 <&f`I a,$Bof,Ibᱢ%Bx$(nЈF D0 @d ''F.a>$M?z !DTBH(Bm> d,X ƁĘL1 Z!jh EEk&~ pBx`/  j'(*V&V?{"NFh 9#24^,bpRN r ׃(ڀ2wavXH 5iaX" 0 ja%W!q$'M"GtJ2g *Ib'`V&f)"!ł |p\$g &`1.-!-!r&J>-3@O cVD'-Nʱ32 zvE/`O< %R ,LJ`I`!0`c$VD6-e'fbHd'8{AL"N D V!")~B:1* %d"Lᖄ\`z!V0`'$O`V I;᤮'`A6" . 5a`p^.< `,j,b4#8+򡦠!` '2@E7D]bIAQm($B) JI$5& O z&!Ba d& DlXl*X ^iKg]4LA2O?veW*BA`Π\D|\b#&n&L@d̰,@^R UODLTFUbfWe4ե*`n=4*ND ND$ 7av03&~*L2 ހ#!.^Nazx& ACyA{jd`&cGL jTaA1J"3RN !QlbC $ߪ8ir"d QrugD3f'fL@K 4 f X@bIsOd7 k0+ ̜4n4_uO`+h!FؖX kBHgma/ᥭ/AjBfN{Кqbf7\NO0` / 4S+`1FldJzO-Ѐܜ 6!IJ րf "d,zPK$NށlxfIn(9*ҀPDg81"FbD+zd!qFB F b`|Kcb`€7,  8&~GjaOއ(*!>Hnar./8<-TPv,6^G5L"LNl ܓd"dXr&Rp!N#`'d@6fcCL׫] E?4 W D A,P* 2#2 OBEBv !r MB}!] |)EȚI/>b%Vq-H,.$(/jjb^(/fd^:f ,A* Ju n @׃2  -H+iڠS6BHc>^h!4mJ!BqA!kSNB (BlaVCyH@fN-L S f@rB.d Ѐ4)R72b'a'"g Iy" !*0B3vE PzVZ B Hi]aE&!Xʬ^A!ހB"l!5ܮ h`>> 1xF`cxz{V@V\ /8G&zepX >c${0ڸ3 ,JQ%,.HxrA&Aܥ g$~%6FYԘ[U=\VLN 4F΁D6 zItUW!`2Y3fVq $a$kz%!lрr M4 U@(\"Ms;)D'V @@0$%1J ԇ8D{*i'd2BmWv 7H7DQ/ 1 -'ŐjA\WSJ*) )W`D  ()rl dA ǭ̏Dj !Y,lGb@s1mHLDy TEjD wDh#tRu} (1DȬF!sD`G2|,C,TAހy OJj"i8ˉ kۿ%0 yj]85w 9̃yYl0p|.,aF\  CqI* RÂm@ Wxc7KqNǚ YnTntA6|aȁJ+K5 :! u6! .x\Xᦷ?"7H 8ɠ%.(paتEQ@p,ʢC8/| <$PT _=ApH"229X`GXPF :*P1eL'CC"vÆg<HX4G`xC1d4xC6Bܴ!D>de,l h&r`:%Za,Y%6^=DG<@,Qh`͂EH*A&8!A" w; d 1 ɑv5$"@mE"x¸ !,3C ̠pX/! rbE臧T28 K cA !Dpj!l01 fbϫbKҰ쑏 B!@HHF~#gF&# A)3(?lK8DNQ$ƨ8vBV)1ȁX DM )#ztF b( xn+[,Ɓ)mt}0C,ױ4,Q2#v@c3 b9!}W% cuJ VGGVr p" k'g L Crz -.0( ,pv$ " 9a @L"pE1 Cw !, .G"#@ RSkյd ve_DjOqؖmqu-' pH1w v ݰ-c 1  Jr0 =W.kC"0]#Ӑ#pQ!0 Q]Qh IDL\qL%5b?:K"  . 驪4a [C7FG C5C`b"!>y2?hWA8P KpG=IaW n Z %r r;|' #*50? 2 e'WDO'rdg!g P zc3@VrH Zr!u- 1 hZVi{fCЍ)m`}F81&R 3@3Pu'l@@8MɈ TAAq0T92LJ&/(PM F PR.`7 N,&dAp4sG*@,9?ҎP (9 u` c }BA~~ c <*/= &){#{ ;% )) 3`+P -ӌh3heckG(p 8b'>u34>m 0 ʹ ! 9 P?26~$h2@ h}n'!8a"+B\1j`Ct0bD@-nAp3g'WgPOi;s km"7C2+b4E/2sv9E u% O {  1!b) ,z*(g-Z C 87_= !D,'yx2A60q_O hB=LjȀ(A吺Ev k  LQ)fEq{C PNZKBư  pb`E  @Pht3T B ~17+Z !¶uT[A,PbS.*r\L"|z!jtN*NtB}Rs:ǑQLq$W@8 }yPM&T 0 (b;c#*T/8LgZ0'p80r SY P34 BBZ )b&0-+v@ 0C|k$`SI (# Q03!)F)QMM)!gL4gPg~:"@A 0x(bb 10 `X8 J E A, 3P@p@'&) 7;lpпAL${J N F 7y 1le3D@ 3J*~'; E ~k@2q$1: DH  v-BŪn[;; s0 $n6O B,5 I^09w]' пU<wțkVJ@JY<+ lM!3,m1?\q` ! T|P(J0rȇ%= Ly ܲ' 1ᰴcK`\3{c {)nZ;U;0KQS c;ckUr qr<P v ?'Ƚ u l 1/B$qCtB'Ǵ  -Bi `Gmp/tkMtBg|]qm :}0 ;}t14 g A(>2@02Sv@'9s]t ]Y v>[ o0"BN!'`3  IH RM; p"'˫ر[%TM96\?E0%Q~B0".H>IEh pR < Y< G9 }s3A)Dt` :@s'LK&0"D :D<0;1)tg19[30oV{# a51sL{`q=.L>b{k-)368P4n &MZ`"? ? I,Q;3Bd.3!PoBg uPaS ~ \7*kQ Ds3@9D@R XEpERnjU930G-}pb\eμo@1j \7VQ|4p'8P5lxC q0N>@VX  S1qʘ1K\g <\d2#":C1KT'pʘ A NT!X.p:ϞI0o` *XDpE&g\Nw EAtի&fA+T` >[O=PYڨ`5br* $ A,*N3=I" 0 ě^e 3J"C`{9h~2[8h4x" CL7g)*>˥6[Ba@@)ŚAzDa Fz y *6mT?[h*3,!`þN #,rq=[v)H৹TscZ8pՙhbFhecE-\AA戙dTր?N^Hb8 qh Pv^˜:% &A !DR6᠗.2jhyÕ;t"8xPt9A̋#B?39x6$:ĢXC`II@Dظy(x@/TAo$b 80%&/ -V9@@V * $7meV>c> c Zr 9II¨ Ut{u kٝ䏃MQl3K60jfBTbA'Pϝ;Ժ˶EsDH'-9*0"ڠ4c 'kq(G:0)2|6AEx`,>V]Z<@U'EV!)XDIQ5C+= iIJЋ zBGgs~l9~ Y`;+ 7Ggnz>$7pCX\!VtD+nVJ&a9_*e'[AeV4%0@P }#yGT!(n U*a <#* @@D @&HLHE$0/@LՏT 8`׌pG+$x'5O-7# ?$ H0xڰفM0J@`"àF,aYx7BmaXKiKXq;-+e-aFe) w3,vGmbMmu,ґIq4&?"POd\Q'* Pph:WC'p<` pK$f9WT vަEe[^)NP n+ ?`U0XN`HIRĵX`(jh@a򆸹r 6Y2gp![[bH.(|\"KBaPxB0@A$4@dx`{iFvoUIFpsaοSYUwA`qɓj~\;/0tr'P S6c-ز)m h˪ H- x1G @"c֨䆰CHӮ.\h  ໖ cB8p-@J#: *ap0[@1)+'=}"Rm=-Nȏx@ Lr% 7 HW&=e'1,Iq?$0@ME i}H]rV!2ZпG@* bQ OSb}7ҏ1s5F`HjPM/:8h VBo 9 .SHр{pP8 @9XI`1M胴`I$࣋(m1z<<  \a,yH[ -6 =W@)}1Xmop3K 68҂q 2W:ɓʀ o3oZ8 `@C> 9 ѨZHW)`)Z;#м ( c06s{O[1 PA#j&Yb7X@@4 po(xj{Š0Vh,_5h'Iʢp,W"W؄7Q#n؃ YH%82ȁaTxj&KX~H4IR OP$[y" 8W8b!_8y*OKK4r6H؄[#"x`9Jڄ9vOp::0 Ӈ4KsN9 fyXZ)ē6!`GzF <Ѡq ؆(H(pMt$Ԩ6h`H4} %ZK tM: dN,p~XEyc3؜A,؋MȂ𮖨 ]%#IʡoȚ[AA Ț0!!~0)$S(K'}`H)/ !9j*qᚇ#@6'¶hd1H8(GrBv9.xbhUҢ5 >S-- {M~"؆z@'n0=))܄)~DB:k8=؄":^@؄CdWUw/9@\h&? (Õ(HX("Ғ!ÞFy26~ 9(98AqxȂzH'6ŏ{,9o`Fv( :WXVԇ6HQ|`@0U.:0<9`K8: m`~RϮJ@B\*@\~bJM6 A! ؆\(U&!m)-/B(hT8M8Ї&["@B˻01 )F8!],]PK0kS i€ʸGc0h/ a xJ[홒`Y.VX_(I@ɲ -@8`[HH,݋H#1  ~17ȍ è%LI#p:9J#4i%ΠN" X$'q؈58Ů䋰!aU/ ,x*gp@8~ňbЃ: iЇ ЇʐVi%3xgh9[@=iyt M@ @`rrx !-RB1& ʂinmpe\I'n] 2#ȹ`Z˿2 ߁8 idFNV7Xy 1Ӱ˘֞`Rؓڡm s(\@T؎V6?f`bH7g `9h6؁#8Ȱẋ.⭘ )`~(ƅJchx +n"Xnp7Ȏ{gϠ_ e qH8{~8tPG(J=Ѓ?I:"Wa)U+  /A U؍ *Hk\8o(Hg8T#V:Urxz(;J7G98KިIKGrp F(րul \p?٦>{y8X{v"Xe:LoOc0GQ ۝rKA,`qpXP! }X#p) Ū A`7'1@>xdB3;(od#ت,)B}796k&+S8K7s,ldP! ȂM`:J" 8[4}_Fjq0'w9 h*?aΓt Nwo5(t~1s@A\QX ÿ0ldpd0Ro JւoL{o/9P#® ܘ617UZu1+s51þ`n- hjٍ:=-Ii4[r_`10Kk }~ ( # !W[Y)xr"t^y{*^%,. "qA#\!{ am;980!A Mϧԋ0w &bppo mIM?ĸ!UGa(䚃V 隀$f)8}<0(` ˆ@b1Ppㆰ -8FWlTK&kB dhN?|B%D8DB+LZP*>'Xb`.ҭkw)ES͛:]! o"H# @N̘xw%"ɲ!,FAH S"\eIg$J3KF[@ X#b6h:w# Dȭ8C=qV#C #EX~AH&up B]R’R0L!1KXBB7S;&Au*i60T#Bȅ!]zIW ,`.b B^8S+IQ&EBaWAL{r D; ZjVDN 䨎-A$?1jQ0%+5GTP@@J/K\:rKU|đ1wBZJ%}7mH60D^Px%<$=eVd4rFDߴ2^#!I B LDD! (0$H7 ]Z|gXҏ1vK.LP9Et}'㱴D^1.6I 1OʀrC1KLM%8T*m W.I+p3k"T# p Qmԑ<'{#tN"!hDF Fd,mI%|%s@q]PBH՛7 aG Z+ï 쒌(RC d + SM,"$A[@+1ݴuPJs "9YTx<{5(nп:~>AH\~ <vu%ˑ>x~3Bf dL2ؔ2Hn9"" (,K{M'{Ї+&p ҢP' BkIܼB@^RjP)VD$ӑ2ڨEF C 8N^D<`c!@*8 IE8@OB2$EY"" j)e0jn`1^ƒ~J[K ]llZI(}h1qzۀCV`5NJrYO"C"a@!TA\ˈx :ME 8ͧ,*Ta N2`j%VR)C R5!S@_@nq taDgڰ  c7ko$c9$ 7xN(\+ڃ9&"MEo@<gf ҂q]u5u(̠jJX+L1Q 0p0_GPd (Bb7\!P\ 1q ; 7ُ.x0 ! %G[> s BBÆ r 2R- W;q#m!=P66؆u ꑊ$!N #ƒ=,dP 󑀈%; TeY%X1wO] TTgaDO([P1G n t Y@FA4*XBtE5[|44ֆ /1 E}0@` @w@ jڰvjŗZ!޳\|ÈzɗC&i@p30MAXp@ D= GBBCU\JA0 12A W1 KA0O N4NVIAVI]PgTN(s :f_Neqlc:'~찘bǁ,-+eVg]U0YpJ>^Y=M3 Rq0 70Yt[s&OJ0DD*wpGz%{" )}0 GGRBPpnSkフN)ʀ2( DY/D5Q ƯJ@,$l,\:$pOF +]5 +'퀟ƑztIC-,TWmBt\wm:1SdTPc%-XAk,|F)5 qۍE^w8EP[DR dݜ Х&.'L+SDwAl uG(~*e5{"s]gSK@ "SKNagFqwG1(pilX|o /KAQՐ Єr462' a{N@*Y»b@:UbJ23SJVS` #08X1*G#!GyDĞbդ0j4 cI)529E'2'FSIR>O|E&I& (l>hjYUl~.Ba2VK‰N9/a 8›XB00B% Hb zU5 jBO $ F#i$5,"Zm!ˤ̈d@~yR- sOH]TST9x0|VҢ   d (8@M *0y3V쁒:Ƙ,miO@F/e]ATp/!H j\4{F0Tɵ&O -6z-4A؉U" Yfk5 @1d7a9l5Xn; 6|ChEt]^Z!~Xx̖_?+\U,0Mt#Yf6eE"& @Pв!2@G*Zs)T~F[@ f34\kZָ&l},v{Ȩp*(M  X6t^v6=mCr¡{0DFo+ .0`ݘ@1"-g9[H}# ߾0ׂ 8؆w qpgV%;T{c1PMjlh|F@'O9-nDZ* VaA8xlYڰ @%ڐtnl՞1=LZ?ۥ%bgߤ'}2~rhw<<RBt )@y{AsH;vAtH';-Lܓ`14H& k3aֳos˵!DbAFh@!Ac6W TxmxJ'pW2}qu&ja \'<(q634gF/nFvM '{gr7Xy%hm {P7Zv:\|m !u1m'Yrc @@ }` `f0r'# |BTn Prh~5x>Ѓ>ȃ0C@&f^T>Pl  pQ piP'} RG+]P=pmp1VPTP hn,G2(s}ȃ؃؃8 7s1l,p nQTu&V31@H. |0ZGmOq@$hPP P^$^0s? ѐZKs}p gG)n 1w0W'ȃ6wwAdnsRl* tA=1 !uqiVRG`8uP`G D2Em4fzW5g=8=h{8Vo@ !qdupn`|eTb ' ܰlMˢQiL!@Q' < kB;Dl>9/usLj9#XyIg!F|Sh "2FQ CG'2ձi7y@)r  P ~>6{4/РUJ<8ڥg %CHXD'u@l*{R>S WE q+ю9}хA 'PI DJ @ (:RQz} n{kh٥]jgRUOugZ i:5sU4Pp ׎iYϐ"'`C%1 Ej '} kqFz-ZJ@1%.'$@Ҁ}@X pWQ m`8[s٨y$C: 0q^)2C4#4sI# *s5zv{y9H Ѓr9sڳ=[P x%FwQajN pQp3Lٓ[ } uPPȉ} qKj{} C pF>3-&- p󐗐 &IXx7B[B[(yh@)}0Q&ʐI%x>#p(57^a0` nKpo B:` F F0&81T3S )?@i'oA؃A/FKDk.NPpRT4pQ$Y:e p#?lp0qE[F9_і `0q )BDkf+u4a m$D[/ =H{\ |O1'4ńE_T4|<;-uo\([԰e %\Ka}@ ~;ۋhʥf7kjyx#<[ BY(y pLOt`[Ą3A0 , F 9B(՜0ff jkaP nLpp W|`eaPG19+f @ Pfȹ鹮а 9:˜; i]ѹ|v}ю#)kThѡ LF|& һBnH(;֜E2/`  }Pڸ <;T \ n)CEJ/27 #,c\g5Ψ\:=:vm,̍`1 RU sN05dk"^J7q0`` '0\@=!= ڝݬg(Y LG:BDp@7q&-G[Z`|jE!/~4nTZCJB ^R[db Qb; 2  F'" 11kb0 ٥ %w P7u*U6D# P@px+fĸ7̃ `ڠ po7/{%U&RGݡ1%2ZkR]ꧮ-l` @u^3 ^ a W@ o``3@0p9&1P nwy`z0pnЌ![Z@$% 5 K|]R2sIZ{yZ۩ 'K 0`0 T ž k>C4rpsor @4IohM[Lr@tb$Tw#Jk3Bq- 0P@Ӯ5 Қ< <@   7 >mF` rE { //(r 00/g J!X@@%N(TlqA?đ #%PD!֭1M9usb%⍃OI&C0t"$Ч9s #ذYKϭ6xS9;vxCbB|Ÿr11_OZk’]Ӭ3NH6G abݚ< \6M@ FGn $'NtjI$Ųiu3EEXK(ݺ`(sRXzD+#V3\ ꨣ. XgR%<Ѱh|I8!V,c,v8Bx4C32 gdCV5Jh6*xh"hx)ȎXK@2$BZ.aމEM8H&N<=a咯vKH68p)FB :A&84DSA E,v`CA3 6+Tt DnԈd-6d3-o n„%+"#PIރ013 D"3"f`q d@%a^JAl kF4NPg[9R~&R"SSd A(e/z'8j #hQD piD7Z\f52: ݾu[J.#vƒK-!vHY_ 9EtAŠHD7$IX" D("3:†ҴA$Ȳ0s0 1'ʁ dTHD"zOm f Q",;NU`x:@\5 ] x 35hh uFODЏ>e9b#9)v.1MjEk]cI =~8 D ܌|nN+0?D8ؓ8tOƿqd&;`bcD+ hd J".!MDoo@F =PJ,<`zlp~#" 7xN*@Ap&X TF)|gTMڲ'F JWJz=<[jS* h{!`0i{n.+bb@"(6P >!8wjF~Oh!+ڳI=%0I8"880>H/E^X>KQÅfj8,#ҳG4%bځhQ9s0(oЖo xA-*X+NZPB>hC~x7a 2rY.@?EB3Cp@{{h,.#*O9 [ *@[/*#o;I@˫0R[jREH0#`i /)"ɨ!ёz(^.j |s@S!9>#a:ssЃV;A3kt12 T`Q |)<,2VVbäH2(U6#` p'~@qE33@`Z̿4+sˋXLlh>QS<Չ8(pSe=2e@d 6ϛ qb8ԈЧO 3Ɍ:scѣ:@9(DN`rXZb)Ĵ3 xϣ PMQYd !D[9~B`fL-ѿ8c95KU9ń-/x FBό'xOЁwx5G<`Xp'C@ԉ+c"3ŋЊD/oXqh9gȂ \xkz^)Yr  83h")Qsh0a` N` XaYPP# =V=qGs˯SH)TX]i[ [nLA?A['!K dR`͉"ٻ%(oQMT]yZBg7ZUHhF`9*iV-Ff H3[)RMs%2N0j0<9 ؀S>]eP |=T:ԐhaXNA4 "M{H0`% ~500ڡLۉafDܝM%#[C2Yʕ8u4>c(chm= $0ĿbBN;$1>Y./$ a x;"?!x;ex)' Sr%[)Z(%IFJ ;&eY`+T~p !Wh鈸`(m؝c&Y]PE!;ш1:!0U,[ ,jo0 3 #R;8Cm[k؆g bx;H4Eh@d@‘ {h-"+I%\ʝվdFA 03iJv(<;^ TJ%So@Gac)cVJi9 :bmffīg(=l:3 {FwpӍ!M~`@h=I0>_=&%EFd,d|;^(;x`]Ʉ#PJz8\R~i 7pĘPڵlySBmֲѱVa&b]*j;[rvqc^>;R-س=IQj۰g3Gu?voh=ΉmN֪bi$]}K%8d 8,8$ OO]mخ~F`;&XEe¦kI=6: _tTQ&s%9'/,6=ņhX_Cgq;#٩s;'; N-xged@І .0pS6钦IGs( 9YEGj(Z"h FxQ\஧b*8Lq[˭ [떟#/2>#ޒ*^g>-{xJn6j~Q` 4k#G7OrU4%puB*GwCGez/kbm NXkrՁTZRL;s{l.14ʊ*ʏx Kʣ HH'R,YVV@we}2u kp}兊o]:|A $AYāHKDPX%ٛD(ʩL)C! ^+I7ȿܥ7o^(+T܈D-i`l|kU+H% ط擱Vsذ :Zh`#N*UR^r(ɓv )`Pͨ(Jp7KRj*֬T(!bǒ]*aj*sD(4LM0nSgN 'F<pxTƑy%@7h!Toܨ@RŊiQlŹ!/9wN NTCknD/[R`7` RlRCi;)oX pCL2r<5Kq ١z]ܦ0J;IjKAUZrM8V#|R:+rRT 8]`T X`':BX."h!' 9F* [ʂfbfpJq !I#BANvS0Sv @@GÑ;r zn|_ޖ{ÕN72 !Xk)P?aP)"# L!z(Nʷt4"?>R I8Pga*"F"@b4z d C %| R)36p [>b8HC |# 8?@+Z4Г2͌p 9AdvV`^Gh޺ќۃ. k(85I6+  ؐ,%:zɵMEܔʻ&|\;+Ze(s:\! rƞP 3]A0ELT dԡqSP1\Q!0v#`ZG'h\0qpK8c  *JHzF2r6jzGɤ.p%X@- RdK= JPlɢpK)]P:6U( NŅ!X T̔"}HSpd$J@:ъO$5pr`&Y5Kydz:Wt@k>q~*e}?Bn({XY+,aK3f0A[QD,$Ѭ*β$ @؄BFZև"\趹eW\1X+hNb-Zp, tr q};GQrTo 3Ox.&!ru|$*쾯qfW]!8 /b* LRvp:pB 01?q^YX|"vG`'bQ=Y{A9 :%("u*G)rhۡ~"Hk:H(S lBɛrFÃ`Jn &u,.ޠ=(! 4x*ݭ9hC|X~ (] >q`gd @fR clY==!֗_CzIHRS!ٚZZZ=Q6n} AlMpkn*`KQ5puQjzm)0jx%@ # & O90louk8HPk JA j~M |(g` `Cs$B 7ϹNTiWDC:Fm̧>Ca  CQulC }!SIC>Т5TPЕʿDg(>fV28s !?$×x%#:pUlP~}†|BHk^KJMU],7!<<âE$1R13Y$y/G'* cIXx"YTG\Fp4Pe= بA ؂)e9BETJ@ 91\EUW@Zj'ȴ@Q)ȉR4\%,J! U %B1tC*@cv5U"L$.%0y3|U\>lQYdm6hGQQu'@D g>Ұ%)dU7@ti(hT@>H%}T8Evj'lYFR°hA\\]f]\Ė%#TR'3[9Afd\bkLI ~} %hnnڂ%@ (a(g(g)O0'=BOD((\gFRL HRC,d])]>ha5~#BNA6F”HBdÃցTD+8 {l@SXőţ+P\Y pgnG9Ԋڭ H*؁DbUЁQC`+4Rl9iU $A!e!`B &,E\t4 _]`:dRA.E݀3̃3@AhDk 8T"{5Ƽrb\(Z-*,76l+B j>ZvV,GhнJjv$tC;|'n@hz!X_T/ʊvRtR. ;,ԍh">PD􁦰n^ xq!M1H<'v`1x-?:f/-hd{7 Pg 6tX Z:`bF9BpbC6Zc TSf=zi76;2aI-vj@T(ѣ/gie'#$c<9 @a:ŇX -dcZkJK!(se `w_}1},0˜Ju,\h<rfaol~:r@H}Hna@N#;ٰUxDǹsd6pjz|Pύ#["хHl T`| emaz26>kʲ  l!AB1c!𰑅B e!h[+l J8r[H9p9AAGxnӐ9g>Oz)g# Kv#x:"i b*<Ρo>!@ю&I:d#::H]Z&Bkf#x0& dJ0X"q"# \*e!aFBlH@2*KaLN0n\ۆt첕ӌ3;<#IVZyD襎0&addXT|FrrIX( 4Yχv kv3OLkF[񔟚PFO΍VuI3A T&MF٘c!#8.LYH{  VW2جVM֡F5haN: jod($Fq)Gnnh %?JxW>$>PƗ^frEGR\n'* `da'|\cs3u.w6&zY<^&oAcИdbȦKg irzXqSg! k_{ ``YsZ2EVu1yHL S20CȵF(aHb&3zUC}QZ3'  _Y0CF7lt ~  h6aucnOc!BOyxpཬNҸ%|H#X0@|ubU!G'"4pM[t@FRnZ0ɗtK,ƒ >W/&_a@* * '腩.m0Ff3p|B{NKF->!hBd4B`+ AB4F!\؂ F (-Bw@@e-C !$Cİ5FT 'U y 2'*IfH $x|Z>p^E>ΘnDz.KK` N]K-d֮xer.a+ʕ;5iEqBB1X2t0`a!% -5h<%!?6$D0*#02RKcYnZER[!] bMM (J@@j'px `y z"g9MgKSC`2:мS+ԸP,D9%NcX-u Kca!hD $!H-x+VcL\Z1鶣@#=öID10eTC@ +YP)~ <X9P@+l #¼ޫ FxH9ͷ$kxhEum54CP [Aꅰ?t[b\~dYA U!+jdZjF Ĩ^aBm@ڠ`1k (!c 6Z 2 !`adXW\%0l(-L#."JD5z %ZyˁA7TNv}bp =! nتt1U]U/F BK=fVG_"Q@,6}vn'ݯAJ[.E {daŠ` RjaQ#tH#C"w4BN£uclAFG:H! `!T!z4b.T^Wԣ! ̤jÁ֚!h(.` . ؠ.rp@tk)""x\ &A֠hza t_vOt5! a #d `4EZƙrP.DG<dA*~FW JUF! lh "f.$:芎N1%oQ%-n-@a _H+f@ٯqʄ!ltd[FN R`:f)m!N$B'p689AhveJ:`IX! !Še!Ȁ!Q+r|A.#<$'.‘p1!XJ!kT > С7R!!| b` uj"bW\ ϫ"^JQ#%:w|Av6ced!$Zqpq!B!Ђ!p"Ÿb!aB8!.( 9O,JJ!X X b0Q QF`2hKH6)8 n$s! S/gF rA'Phd4vzsA{B:$.SP2mVAd`lsB@ r07ҟ|a8"`rs!pIUCbl,;~-F>"1!g3 g, ` Zh!00`ha#! J@_çQS#!& j#h9wCOpeMW! JdD!XzFiD!b :UDN;om.p;F~"&-< f Of@|&N @zBv$uU! (` RӢp h ddUUQC[նt sb!r!>~T } aJV,F %K52lFj" ē`3NN&&s S`A4PA]\о6`.|$gn, j!X AR7F7GVi6UrO{R*oBf.1鈭,c 2gn=׃>]>!w`0+91vNaA@dfh܋\G4#S!Ru!)MH`ҠBno|-*cmLf!f8`$@!Bئ&02XKYCp' trG^ktpL$uH@QAPC` ?2. k GWL2yNj-Oz )|NZd![Vo6UdaxU2`Dڄab HYT 5Sb0w1TfFrd`1qr&n8n1PPcUNua f`?f&O X`=3 Pk{V*|Z Z(!`  B1ӷ(c.AX`PQ-I??U`+#GrdsFG `*E؀"x!g딢lk} la^t@b TIT7c$\,AlUЭѕ#!h'gTf mٳtc(wpIYpsRa\aYC`p-bᝬnҢ,/n\xt!\x@',N 9H@ \N` \P"`,͠ h.ڜ"L6ksUBZR7ld.`!tA~/Gfo@AE(c+g *&0Z+\bZ6ɓ <1ZA.zf`>C8֠ `8x$ QbL`@\RJ !wˆKJGaX,@h(len!Bh! {Cqc"&*., cLBn^`r$!'t-lj'A8Ꮦa&!R,9VsɶV* v2Th 1 Bx;&bWj !ʖU Qp0r!ANX?<$h/DCV̈K脥 ԧ,!´4Gt($&x H6#یӋb &+0nVAaM^uP &̪@6ᬸ|! 1aGfV"8|!MZ#0T̙ {!Rr`Vq` *<`-RN8Wv*vUFז%]2W TDf @?Y-`,¶A(uAKMg!!B @&* aD|,bB`ьk^<#,N!tbhsUrmӈe@ T`i|jkH9Tz,Q *IApMbJf(t[E0 ɒ`Ķfs=lq @OF"Tu^tA`(@呉͜9)> &h!<[z-uZ'Ma6\V Xl! p VԌr!8{.t).H֠-J<~p"2fOJ ~ 져=c !x 7„9A:" ߼Q z%U;Ԅv% [b"L"pRp3@8X_F"8.UYA}J)R’()B,@pZS)U$@ @4].E_ vu.3aR<̠ Z#@XlN{.a 9>D|@&YW\ʂJ#L@Ypt3,CeC0egB Rh#ADb,F#:)+HVC sZjĈ dntJ&FduC1` Oc7&pI0b:k/ 0:Ђ%UH+ 0[='zE[xO0dY bGv{F`yi1iB:3P]"t#t5Pp[`wR"?#7K0 1Jc+X=QTK,`-炦ugĘYݦηtݗ=&䡪0:GOSFFg@*l *PW@ @ Y=4iͱi[!F=FS<^D-(( %7Y+f>1w ղ!" C5n!]}IaCGG 7 CWYM\2u 2 C%n&:&%~Vw~HEoXBi^oڀggKb"2 s@FNl4y jb`e +(Y` 2 Xb77P#c!"7Ds""40uqjeCd0P` P=D,Pl&wgB!w^ntgB_bnH%PK:ڠ1":'%(Y< [m eW@5-?HH6`r )<3?HAPkRYv wsMĤvxj] S9w'gهӇ|4Ex YȂ5 rhFs)RgOv,qT@ I=1@ i A'@ 0Y,8V b"&Q!kKQ"p cJd]2GeZo%p)usi]刎7TP~ !3Lo Lx&}SHZ1reS<g XX'F ?W PE`3Wpp Qڡ2dd Vq+7D+S@XgAt1v%0@%R) p0dxP^I8m nBH7 i&T&]`%Zf]nq:9o_%Hg z{"QU>&y+^d4!A=$X ڀ `'Eslp @=3u`'PP Iph # f]C ` ` p"IYp p8.fxRF_Gm@c gpA  0T5_nBCc2&[\0T @U@99oa5gp'!Ps sGDŽ-]a+ae5@^`#4'%HF0R6zY(p ` m@[K @'PFl Wt}2j x> 20Ty pw]  g۰E jP+!{ ȅb;%X_Rw/\fzYB&$ 0vX ; ^pұ#pI!#$5T+sO5!z_$HsO>qY'&WPG9(x<u{@p,@?pGb >Yʋͱ) xQs# ;^ "IP ZpQ <&~UwM͋|" 2'` Pb05'AUST3jœH B `iog?4+ɢbb6ZS 0l Q; A `@pVPU2PQSesq?K/&S\`I pmP4 l[y>cJ>30 r@-9)Cke` 1,K`k1gJ<לl @ uUyR-|`3Eu$J&a+;p P XS Y(ӶW@ V,}5P2Z,K͉8pIq nsi` @ 4IGpQ#jI:=PS˃ZZnNa ao1~f9L1ڟb붺 Vx'R4 DF` ̗,* GIqqx`}&!H )b5WL5fҳ H TY@j ,6kF,>VV0\r"WmP }bdKիj%v0K9L&nKkb6%hg {p;:;p]y ,۷j r4u!2+ 2bV!`+ ^69YUbٮ{IjkRcR 44Y,@ t5L P I nlf Y0v PPp!U ] bz9f͌դ}z)C2|pgU`5'J7KzP j -++WӕΤ`,ue +oG1[[S!s-XVzN ^[@r!o:˖x| 4HMJZ"@ɼY[b6NH%#y8-X` 0<}&^u@DrS 6j* lˈ0s0'4ċD6(lǖβ*$db #䘃 ]OBĹxl k9[(\rV m^W,`"&zC7$'d7Fj΂ 됛;ܼ> :!@C"zF#!&y#6|KFKĉ\c9 4fVRfKJ+e'2鬔֋^vDk K 2Ù@,朢֕ÒdI$e\NZؠCa\@&9 =,ajK z=֚Hǥgɻr|e{H NJ8< N#;Ĥ>$Nτc= 8#^iEWgf\ү|jH%p%XOR5-tʼn)+j\%KHKl -zdSHdtV,z-Q\$ lAPX[48^))N AxIP@PM`A \؜&9:X 7-MH6h;ϐw5*"GzǝfJr!~-կ0`"hV[G|ރH>HZ|\T23x  jɭv!6#Hi S\d_Eŭu\U.$0saC=ei0+h Ј0HaЁ5 2Iu.&D#!)d8^/ @e`f,NF0x p舖9lbD13Y&%ʫ*S6|rlh3 r"k  E#j+/g *Dɉ܂F(yn$ֈV=ht\" rqreЅrBDt4Nsq䛅I@C""xr']S6 dA= Qqd]!N 3E[6.edԾPX%B -w8ה2vJpHY  ݊0eO¾H\PĺH0 +"k . l_,oT'Ϋ$C4>7  (խASL3G%Qf=rh%DlEym=F 8D\="/MD01h!2=#-ڹDDQ _G&P#K#ƫf NTy8ֳb7Iz Q&:|A. =nrkag԰FrGljȞ%,=O#~!8ڔb-q|w28`'"jU6Uyv&&tf4ȦC;bQH"-_F]lTV-lEKD**MbB]mg |T1=衛/y% Y-:pΝ!tlfs`."bL_j@==¹H3-fqǧ=B+})RЅ\sų.@5C{ BI4>hS2 _b)I;  ҈N )>ˁ1*~x2vH5Q@[(,¦=J7-:)i2jZ8jHȞ+1Da<:;\-c6!8%IꩊK#zn?[d\L%o-CB@`b PpL8 "m؆pZ2E`|H,-b .N9>ٽ˂!*qȊ\Us %;3Ҙk+XI0PEo8cLδɹOL\p0!뼈64 Cj9X IP (ʉD`EOEۨ V=A4*`>&^(ȂX[2 c(cl͜K $~S[OX䎟Cof28&:gtu.UK~<J<МK CPA*й IKm6+@o "Czq%\ n2ȅ[P[z78>ᶱz-X5:$i1~3X#D 6$#Ib٥ ܣś,IQفx% :֍J2hPA X8zPٜWA#!i jȂPI鋸X ib.3okel\0:pOjz 8x j~ O^6p`ڭ.Eے _g<  [TX[Є ؀[G6E $[-Au_޺[T;a7>`!A/O .{aI۝N*A\ Z /ópG ゃE"B=ls !`oeЂ>N^M>iB:dF(u y9S6(r"4- v^5U3 ޻'UFSYص= }7G8[Vx*hH H [ #9 KB7n@@{e3Ɂ^:fM BNȍ[^y%I# zHj}:vI+IwwX<"0j08qb )r$ɒ&OLr@iKlY $i؜<lYu9,8rϣ;ᚑ] 1ܺ q;YR x0!Dc( $H $*CpgرNy ɛP`C^UVZ/޾j%S i|ZԪ;jʙ wC8Wp|IJ@YV!C+8Hp RI1 BY $g!$ʐ#!#h#(0gBl\ s|#|FNzq4u:}UN%YN;\ua'wI2!|g R@ ! @"q$  H1$WEY((HHt,!gءEhPiBZ|s% s1a|$x+Ol9NBoa# u,Ps-6ꤔp"RRt!Y%_$UI]qR/H BڡMyRgH1s uS Lc۲v$;w͚d%Te{  'Q B`|QD}ӊ0]yu ʌ0c Ctx%8,לͫ$SRO$Qk䣃0;pphU 'i!J+`#B@`I|#?]:G[4& 4-e?(w5I$.9`s-} }Igd P7=\-$(Q8sS pDi Ñǐ2<$,vS kaI$ʛP+xLeFU+`B(#$` 5E 9@X#A񄈷@"d $ #   z D a0T = 24@w\UUbV'Wd\(UU<֝dY+8A`(p'9cM+ Ă!j4ƅ E-8ɓEx@:B$|0 2< \]0,f/SpTr #h /BKcfԺP5) [Q8qSB?;mPl(-@6}pIAF^a0@oc;P)Āv?&^0"KP6|]/o2X}c qvw:d( +SʓZBjkXJBd*Z~c ?sv3`ʅ&d zV"Ip~3:ЎXC X>dLip@,(qK(EBb9Qv坡|0Br,GKށ9?ꃡCi̓9! x~kF!bE%9xfBN. .:P D(d(0:o:(9=҂L@ѐ8@>V8c4E@Aw谨3xIC(;lx(5%:0dH%pJ@BIN#k@.V19w_< _8rYT1WDA@`@/ V/ C x7qB<=<0B:'UXNOH7$T(M^ aD V,-\`?SZ=#t\,$y ý$`<(š7lKPµL !pԡT , p'pG,,UA h" BxC/2 B,ⅈ|G5h5n_QTV @f ,rRL$PS XfA(,ZQO\40@#|KA>߈ԁ.2 p* [Ā8Pp%B*@d1 X"BCAELDdTp3AN!D1i#0dBaBK1G,KG*Rft C A& MCJ\d#p$$!#:A$22 jo% ȀhQ]HBB_Lu.c~B@<1ƘH<4xS1=97dDԏ',UBlKؒ-Fe XB꬛5؊ȜDA uE, ,@e"DcA9îFHH@ؘQYߪ*$_̡F̪ j9yBx#cڍiy۳ BP$]@AjN. @lԂlTG^NzYHe (RI\ 6I* Y;,o8rE80,1KO"(HAP`p4S2tXCP҂7$&òGH@FN>(+4u@+$:0*zGPNDn*IdhT\<4SlHЁ3B*;&@(dl2Bc`(c||*@AםH U Nf'\ O$e%%Kȁm HCZHtK,CYo$/@.p_/ )<"P@Y5.Bȟ!5dMKr 4Ĩ#b4#IL0ԟs-^0^(<THM7A 9BBT* B.<|p–*|'/U͖Ƃ2 *}#|A K@иd v|.dG"TICiBH-8&I!TFORa>>CZ3ĄuP5_4(h)BA@c` BL=@)|-t *hy@5G#(PBm> Z?hC~iGNЌ3KrPM(sKwEL 2Oz@FW}!H$G@9IF@Т (@8bE1fƌo 蜑@$QJEo$^ @k(. Lzdr]& e UV,x{c lv\:bkr$(eBى;o_f-z)~aGՒ\kFXhUe8)*f78]Dp]Hغ4qM9P'jH t"̪SE'ђ[`]=¸qDrwU)؞8j$dIU<I\CB J>o@  0ڡVl9$$Qh6R` Jlƀ9v$!&X͟0 yA!K~dV,01 qE;a(b&Q/0XNV NDX`&& 0Ȋ*ȋz'>ALVAVǒ7HHI&%(pJX $gu$'Nd#A&2fKv8rleBp%2.| Whe-f#̶Un 'L d @ 30EҿZ>#0Nx# E 1ZB= K"X9FQΥQXYe@2jUWM>J`J!-4;f"*/$B '2(0#,ac]L mk֚09|!KVR*єBWadF 0Tga11lc1&ƲWX8$B K(*G4_vy E חUZbV$$XCUꂘQcx\Db&]H 1I&Wplﬨ1ȲA?&m'"&fL IDĄaR %:t!*c:H YS\8b@NQD{G]*68N K9 H^1 Ude1H"&+ #*zϧ1DtqƬ4`LZAupa+v3k 6)8ce*Bi LV)DD ) H${Xx`!h 1>`"Р.;wĖD 8b SH)9  6b!2p8DP(.0o $ 3Xӓ$Qɒ00xBR#'((r0!weԄ!I&鎀F9ĭd!:e&BbaP#P 0I 8 `2b. \I B \!i6P#tDAn-MZ.nC>fE!ħcA$_@"@Ф"Xۄ 62%x"..B1 |a  [ b@n/a $XG UJPAA,&rQHDA]\a\pn"&"m"\!laljaf&*4 &!.4$  Tw@np# zA`!ɤDMħЎC ~/ Q"xg"(@^~.B)+T)%b`~@~ 2%p!!0 ('1G`0 l*#'IRM"A"b ^@"jP"A$# Z&&@ޖInoN4&".7@L &H XM6a &# F7shaIh(`, Xr T#N)~ Ź׼ %aT!\&T .D1#B ,:HAS$]hR"4ƐD vip,! 'ܧ hA  :"Ȣ|@ L,K|!4 6Po p"F<)F/Hi"a|eF')a XF(8P`T H@juR"23Ff<"!+TVf*&(L[AFVtYbBO\ ҠJh!&-GM~N "(@n ,,r 1&,,@d"64%o ".3(SX5e@  l 0Xfi 2% 8`+$bI"A)!(G $Bf`f !$ȍ"x`K%TEc`@!!2cYہ+0Bd0v`-$nDfBv'\`6$Y Hn@=_l(`/r:_N`fCKrp&8fs^3G ! A&l#7ysd` >,\B;(j` X "8 cs@ \ dS%XA!$( cjuTC%-Lx@|  <&m iD`#Fa{$bfw^ &(Άa"^5]Ԥ! |"Sl$.\>pult@t7p@@(fhAb`8 :#Ga $" ZXJn`tb",Ax$b DB;hfRXuOg)"M%b0U\څ*HAg!wXZzM A(xE`*` -Il A,qÓ>A}\N:B1\!9 X)ba(| &t*Nok a+@,"F)soހ]0,Ao1#>(FO3)a )PT0HJUE@\偔A\ (  b(Uei$b ^4OQ 5MP8A8#@;! FrsTc RLߌ&+095wd< !ihC! )l"/( :؀ ࡖ'O&) bV8S9(&: O=f|! P4@DFg4UXGstDA^n$C5a 4%NMqT`h؉h@샼R#$C@d a,k0T#(( d [Inbl(R= Ng0 p#53$T%*>`QDr"aA78XvOTĆ@v)/&vkEAt@$P1Kkt*E />"!P(t`"Gazz& +)$b&%( jfGXN"E TC"Jge z!]*u &rWbA8H" =.#.8:3k8`7&Eb(a$u9T)F pna%֨FG` QhGTWrT* .# cfN!)`qjbcP#f Q$B KtT$RF%B# fAA"B(b1jN#Bd/^XWU"@LoP" h8D!Z"fi >д& .apHa(=fIl $>N` zɚ t#:~*)繠 :viMTCOpb$ &>%!>ހ@$(B` !"7{F! ``"!<ʃ7!P9)c/?cVFYE!UfB555  @P% *`@ܙY^0 7}ac :t F9i2fUC.oţH*] }S1eچB&y8S(mXC,`yf8^  a NbJF0a&@@by&y;Tԑ(I`Ei0ܖboNwPzOMsT:^ @,buy@lPx2x!1ɔBR*l@+\  P҂ @J0ZLF/Guۊq0XŢR|a8Ԇ,37{1#S'A'$A?u 3@҇+uf<1 $k CÄE>%-R@B5UZ}]2p]0 H=r] {bNEǓ tH ,T 1Џ,"ADdQ`& / S5T3'te!5I.h0E(.R .[3A_4c 00 @ؒB?m8@y !P@-I͠E_G`,b$PQĨ;T.0k8 tpдKD՘th-yL2t8h^kY ۬X$px]`AՔ a%a8G>~R,XHH}$ `g:!IC UDh *$"3؈6.Bp P~SfP XqdWP,8PD{A%8W< 9-$, F7x$f/g+< pF9fdIr+!9C0I.ְtJ A(G4Z$SKI"dֈZdy ^lY9 g TA 18pB!-HDDER"A*]A#崈RZ(xkPVqS)u;UmLхUu RT0XpL킸Ot)5{gLa4p"hb]d9Xɭ$zL誩8pGLkN!r n H/(bDUB}8%8kR0>ȥPXЀU 0>sx\8G")AI"7 \ E ʛx EZ`4ߡ6"O74:E%hKZt!tOM# or_p&HB ib$`/9b4|6 Pg@  ybdC R?pApW Z r`5 qjrM2' 9P^F`< ZƃB΂G$,P@ `cD1/cm0RQD(Ft I '!4a+k$Tks$t^ M k @!w3Z@s tGa__TBGQtq<5yLFu0 ` (i@H Vju(}f),@  [Q! :RX,'pWW3rprr @UW#xQz3%`,`kq@@ @2 xMrs̡R r aDr) @'u>gÀv!ʀ\E4Ut Lr@ 0.;$Yp I0Gp!/GQmMUY b!C0Xc `>8 wG^@ RYcAp @B VBft Z@KsS&X g.!CHA ban8#qPٲB1@"$ zB%0"C?sQcE0rGK K R @eI *b@ H?90KA1#0 K %IepVH"X1>iq?x\v|= $1-`^OҔQ$P F6 N9Y\{^,m`2pڀ @ Q%a{Aˉ f,ۼ-e@} P-H$(2r 7B t$7r+S^˫cؔU@ W:&'Dt]E7 y+<0BuT7o `/ <Bb 'pP K;لGt>h X`-ւ ؐ.0G"Xi@[%0@FJ  41 qesk`P  /SS,a }%2a ӝLa% U/[p?aH;L8B $"@G9ITYeXTp9Bs0@"ARB=3 @U]v  B mMBp:0 /KQ\ * 2.ۜ 7(+_ P@U' UP3 @ 3O1f+PLq+Gq?pp 7© 3 6i(Q9K_Uo$_bb@Vغ$lP)Uw1 UPĪ#w%U4X 7P Cp |Vp7AU1 6"`* k}IJbcPOm 1}XHBA "`&$[Y\e||WYz) @!S "K?!]1s0Vp+` co _QpMXhv FPpU+HF .?q^gdP>LWj^|m'\Tk`!GQ3op'v> qT$5a7?Ioz0F 30>XCԐ)ezq$ V1f[ }022U^o08%}lj/&Arr^r'9f^|ŝП(° .P+{C(bI-Y $X`TS%48*P q"f0'zf,oxJ$q xA9dt`F(j&0J'y1pm@i*]T(pHށx`<}MKAPpK"C M 0,2 ?)6b=gϠP<2M. $Ub[SWP@_ǴTSr'@n_⊁ t*h" (` *K,\`f`*6vTѠ@0#eθd( ZqHF#K &>NX lV@PK>d$x9x+ P~ぇQ2)ocC؀ 0[B / Z -*֌b*b28tKS Ą_s"zQ vO$*9yz` ꨣ1.z[he :2f~QtŘ qEP&I)erp꧟x~f2 H2(#Lh#!&pBI~>,0 g I4#|X *+:킁~J l@@X" &2wllhdjCLA fS]C|0".!̯75L* ౤:8I:y& ( &)ة俆́ڙ5Ƃ &vѱ2["H.qH(:6讬?x*\٨1?\ Y- V:w Ob`o \@ʱxn0ba[` I9 '`'暰 ʽd3^a]ZênFY$Pd` 1a`E XQ[ 21qN(; @G"@ *@lU8]@+1%GKCI(@Tn=IQ,H L2 Ң`C R2.upE$`E;P@Ȩ *@60TnF* "!1U \3N 9y*dtb`aj oHb 7x^$PqB M 'ºk q 8,#B  5x#kABCAQ̪ BSxfs#r:e;hM=6q#R%b[`H-U+e(XZd KLUg0rib jJ&S d+)&,B<<,\Y]><4@ `!.X%t!s >3h !7l$l'8 "X &  F&aS&d(F/& ohm+Qࡒ; ,$E oK( U IVa(;HH*Tu0FȤ#Ѯ dmT^,K Ffok%mF@&(1kV@I'3*`!0hLcT\5qLJxja C8P֭ 0!^"H/<+?%sdu;.MT;8(P8ZpHoESR2 @eIizu'\^ fQ  U b c)PqFFiH0XBjk{8@ׅG#hedAWn4l0>:T.l"B>:Ut0žJEH3PK}/,wAؾRzT_t4D5fˉ|LE]ukЁ"<"!了zAc\ x8naLY[*FU& kXNt 6C[ءqg=BZBc`0nIٟp˼@##l+j ق,%a(|{Gh Ϯ"Ci<@0Q$ާZLJTR, @sqns"{Do ZKK.B p5dzq+8\67J$i<h6Q.Npn $ Xљj d s> .+K0K9ZwI xc_ M;PxA4 3Pb g }1K_6#[A#pWPb`8j+ɊQ *(K6 a+,  0>@, EP i137V0OTH5 .j- Oʀ ڎ)$0!V005hX^, 9:h~!I .0 cpɳnHˌx71+(<nL2#3%܄  H6B}m2ˀ~6 @ W+K0&M[3r y2, ̱HrC7X2Pǁ U 2h opr7(UH0:¨yJDđh*,H@R P` xj6a;*hiŜr\k<>|; Dx X4صs m 9۵M؄mL*W`$! SB|ǭȋ$̃<;`( M6X/,2D@pkzC 4ѷ XQXLኳXI#8EPHF\&- D4@J.;h*6dzK.6`B 5r8k9 }y1hDx/˨ G3y*e $#z%`}B@%툝 $I$BrE4 ́>`B2!WGGٻ\O;2w<3  0 0TbazgT@>:Xt8x  *㩇11( ˠ #3: X>(9(观d-3(ez1(@vkҬ'H8(T@@I7 P[7p U L9>Iz؂ !H8r(/rP BP_ ,_8`WWp-0FTP9| )b!RF]nBF6h7h[('m^#(Xc#ФI1%t+%لͫ( 3" cpw\¦AȒT0 5w:02~$ͭ@x ta60Gza`F8dj" {Q7!A"1c F(FU؛̱yV@ۋO T &̰0&hfjx PD (A赇 ):+ /1"Ͻ*\Xw( xR_k @PЅ* pHX@x9k{ۊyxݜ;[yɍۡ1kY!)E :_)̙7B"))g͡I`@ I `yA:VM 6  q)[@R$|4onT_ d5w+cHۭX*`pAq[6G8Y( ̍8n@ɰgyg2IXAD`g8S? 21X;@%b> (#9_n6lH@|wd9 \ȅ`DTƍq7] =8:QYasfskJ/9݁( FW n(H--hѼ!1ZpgȎ%L!<'isZ+288{/ xԽpz|Y0BTp4GyT]'3éʨ\`H{% ty=j }Љ>^$@!,bV0X +1%q;.%6fng9:PٓP*P6z( Fh 7\js72z2`C}Ȕ O@yW 6W@n !4! Gp ³FIL&'(38j.h(q)8+#^p|fo6G Dp!qcV#* !$0W36Km*1`Ox'b >D)!}X B!npDܠ\AMVm%Tv9 !dgʵ>碚-&8.e@J(؉ E箓B`ItlHAƤыE8GUl߸@q X:` :@DrBMbIZÁ:} :2%>,_<NTs:JbfJ[)! T[ᅄ9=Oރ&(!QӤ*E `T`!,`p* p؆> *5jXxp7)PT$cC$i l`YVӔ%ޓƽ6A -&0SU ovpP@htHG^a+y%x\T I_hJíXg'('(Z`dQBL-x lH1R%%@疋HBӮ(OvD \lq(FrDգ+XkHl g,"*,m4.$Vk9F@ɢ\ ʻ%k0o=im(߲C~c11zőe!G%= H~fʕYhXt QvjP7BDRK91l A 3 *D"]xC*BJH\bE0\g}N] a#M`PK گ?<ˆQMy `5A7-lCHE?%5_ƢA ގT!ԝ =aKD ٶaBAL8`IkJ %dBP[ 'V<|*8GU\+]@uOʁFAޮ_XϸE4K[HEH(?PIbAԁ? 3 e>%hP '36@2< P :ԁ܄AlA6 RL?8DJJlډG DQG^ňʆN8kl=x 09uֽUTZl>lGcPYSX.΃8GЂ]AB_OY:''(alUXT@+9.lX^ nvJ?ԆA1<.NĄ"Q%`C%|*bY X&@L c;(R E ĠlTJDp\ !nlJ5] 3/pfb]lBAX@BH%r]bcd (ȁfL-|XhAABW)Ca786lC=yX_̃!'382:<XM&Ah@X$[Gg5VBXpA JIAM$8*҉4 $P5B-PS?--A,LL&ZE JB{@"xY4/CU 3I@BC AZCVLц"UUѧADX@*@@ՙ@,VDW: A ΧŠ+a~}%BP9Gh .\ BQsE͉G5.rp&VcL1*$(Aj;Ï0ȁlH-T ~Iʀ@,>ƞ؉-M}|G69Q3QkC%(wFEC2N`|Lv|AtJ, ĀhRfYq@45h@5P +.(NV d Y+P`[x`ʁF#^(Ap"Cℊd}?htA 04-6LBZיq,nPP% MYlBa@2/C_T1ZvfVlLz@* lH!*AMTt+@GmdAc<|NqKt"a肙=1b@NDEv$?@VuTmX‘V[5ځ  &)Cd|.]JHLpXt)tAsLBٸ͹ [ M6@ Gy뀊ABb)Su%ZJdp B_ddT8lQ'68A BAĂ <*Ah Q[T %C1Va3N _چ%2A`P@_ aWJPDalD\M(.` #h܄H(n/,IJ-@CPEAdİ_,ذPu 0։GaiP@eAu /Dv0\u"D`P@"pZ4`F9 gu œ8tmA!DA$r5B|gZD\ bB\dCKR=D"e5jC"1ZE{~<ԇzTN8p*,26|Ƌ#ËA<B 8Bap6sfaK.ǒCvp HAׅNht7% \u0E10w|`}ֲ 6Ah/(ԅrH\ˁq@7eCd%$@  heOB\pWH] (`)(b|]$`˥]c`<2D-@sH}% CWB+u#TN0)6,d?$)e4D>$0Btād,P\׫PBB%CB JF6Xl@6%'4I/Y+ $O@"+ u/Lqɂ\b dB5BhA+I!ABj|E/Qr:Qk|d #C[C*̃.pIPP ?`ʌ Y!ZRdqBKc 1Wd9UЄ[up#'0Ԟ̖ϫslN3NDxBY3Bm,Vy5Tu&0Ӯ^Ca" !Wgڄ6&\ pHxЃ$,$ڠ -aEt.K@LN@I( "9نjĄoa# F6 -!q+.QƔ. 59幌Xn @y+""Ny! brXD0EQ$8'IF"Ă``M6fڦm"`D'c` #8>c:lAx )*j NnVZ"oͧKF58!8OZ:ް¾)'W^Sp aދHD:%2ᴄe= GiJ'79*olZBmq lLJyxV9nyń2NJA& ai%3d1 řr&bZPxF>gP,M9!:ƄEYfr*\ mBNzZ0(#ûڠ: 7Wf9l!8ʛe* $':cfCGOrf1.,bcccݎps`\)JNh6<{t櫣&":yn(Hɍ1q&a,X3Y!2}EA!7Cl@L  Iݸن#H/!P O`[@"uOQ؃.SIPi7\IXlm('@/>J+`Г4)LX"" fgbUYGf `dE w~³c @41IDPN A:`hPULLREͱTA+T@f1P@ҏzTSQA|@O_KGd˓Cfqf>|"A)V L)6QY $cf9+J%9Ԇ@pcFg饘f馚fT@:N$@Lݣ ~0 c-';\b1JŒ j&XF+-Gf hVπVb1En{D-   cʃNf*K+V VŒ._JlJpb;v 78DToQNl(ɪ - 2K0%sHn["ZsgnAX&%L7 -QN 4Y<\5M7.CXD LVe $X;"=% '4H6%p7vG=e1'Je DG `Mz~4rE/H#MJ.C-a-Q1p{K:aEoSqWo}LfX@i 09 7ຍ}Ϭ2T=) 8G,@}BOrd A9OZ=N- 9Nb7tBnL)jtn{n{ !uwC(Q>a=<&6Ujk (oXpX@ǔ M 6T_} rexl\2@8& H DxR2ne.I'-ȡ@2NzreZF2F5ȳ4TlL %FN\^>^la:*g2yM 4v% -df|A&U G`(.h,m|&-;![F7`6}n 鬝[XMdq Qt :#o;g8Q^@q na2"26&ZZLjeٍάMِҕ,.C 2*|lvHAǐm %u/"蘑†ԝrK+ޘ'M!,a z |ek!TC P" Dy\8vUJJVRscz,4uƱKB2B,bQ-B  I&E(¤p0qR&#; _29E"jqSh3v0EZQ5(OpSֶ5:3SʞmKHW-=v#RO"2(uv/ !zZg gNDnhh=R~3(7/n\\{t_BBț5(NBP7q>ܵ.@EA 8Ȣ8>Շd/Kh)1ڻBStCk 㸻,EkZCfz3ccL@w#0. `,_כqPv½RBq,]ٻU3Z\g,WPq*<|6g kTRX@DÐp/]:7Q姅w}F\p'H*ᆩ`=v &"Z2y`sYlz3(qf9r@w!p2 旴  D 8Ҕ"*W ~nu0 'P P*mXF G03y"|69֐ء'` ` F{('p < d aPscy"b7$ D `Zy;0As x?p s4p$բs ա3(R9Fav~aymgY 7 36%(,>AAMF0>m eGKy"TAA*NP2W42p$G$:@ s.Z+@uG@ i mj (aRk֦  i @YU(.DZV0E_%pq>U 5rm{pҔIz\. wmp~ʫƀš a py r} U02%ly"[g)p:~m:]}1 F$NP5#3MSז067Z( j}dfL 4'`+<P \p 0C{\V+!}z @/S>%#VKH#;$ 7G8\_l pPp@'g;@a>Ϡu = r YSe!CkE1r0]re=Iy҃  . Moa0$P4KAMA_Ұ 30KK}0)pJr` d h`gz< =1"`0߀3r" am` FC*=qs /@/<E9p#"# ̖Al P+j? W 0A pS p \Н 2d)'m1` *Ghi/I¼ ;a?!7@#6"(v 30+1d@U la|T Ȑa[ pp d x39-m)Pr|> @gwdg`*b p`v`j+xP 0uw J !p p  <T 7 P u Lz+r"ˮ a1rp Z7DՇ21,yL?2Y 8 9<-v qL@ L^ P@08)+(z}P " 7 l mP ap E F ' `HJ+b rZ!gX6A4 vӥ0ٜ ;}p`0S0}mp P= H@ ` E 6^):3 `r^1y]rA5 r-!xQ,CM A)> P y:= 2a @ aۨKK`za0@ rb 0k ` ` rͽr }ԍ 1 Ԝ:pYT b? A,P[ߥ=-:Fܗ9Kl T pN-+M3` E*7d&u Dܖ s{+0A$N%QL:/#4.P %Py ߌ SXP8a^v0,ܢ@pȀ ä0)(x~}mՉP p rx,cG+2vCҰ1N*@T !+A~@ n꧞.N1(r -㨧Űvp! РPɮ[ \ b@ a`F(f,.Y0P} F_ &rPyygIIpst];~1m Pm~-7R 0 ` b,_ ` @Ϟ a p @C }p #;v~o0!olsL6$kŜ^}:lYre w#F#M_d2t;l0,P,VxjjU!\j@  ++( ˲- ʐbK:Y!x>:X3Þ9dKhj1kxq(XJl,z9+8yE]R[`J :`,6>3:\qem\ ;ٴ=DU")>8C+f'!/AL3)*MCU'VLjU-0t˭C>( gZ7Hİ%@긡rF^CHc>q!58Jif#ʚK@", cEA+ *L"#!G B*b^)(bc7.bDCNI5Vw"je9k@@pgZ%KVbcF0n8^{+1%V,ČeQlDayYuvx#@jW]9@ZŽy)SFBAēcv\ [R`r \!dTHb Ӌ"@[jND١e|& ,ef"b(YT]X\XU)B$CáB p=GW,';^L0zJj{⡘O8 n,a & ElQK b7a']C Jy=S |чOC*loPG:aFЎ$l8C j(T^aHg/cE@GZ&Xjˆ @U֗bEE2c!Cp p!> `%@ukCLD`5ҀV V2|+#qP\l0 : :,N lR;i^q0Ll[$'ANM? +<@@#=ј뵱-EcPb2@Ɠ`f1DD\g$H9 ,8 R˩$I䴝LjGpA/䐑n'a?5B B4jPl G !pХ hdG#IdM$5!ކrtƵXC\D@D T~@ hv4"E%6]XCheyc,^ǚ &#L z*GF)+#dEd$@Ѕ\p<>J$rq  -a"3@\ "Pū7hA zc3h #&5儨<'L qupv4F# MY8qS=d\Žk%9ɾDla6,lED&@ הCXEғgeP`A{%<fO)'9я6$k褞ޖFASt?HQ0V 7 @YE"`)8>1x|b)63Ǝ{At,ns?+0'Z'8fw鰝jЁ9  XЂ,V)R@#R'Fp,1(ڛk=3I-x TJtXU8Zq`՚gX,7()(pa?`2c0;`98HM #X [78coCRK ibh@LG ep߁ȃ TH A";0O[, x0Bb[b@Od4F$Z`6>HM[b1B2 $96B$q#+?B~*ȯ#=[2Cpt.xG"zPHHHЗx*yJ z< Qbz)=è`!(a9\E)"Q`]@\T[b i+QKEl"װ 0* ؄Kxƅ9F[ q.W臬9TQKqd@<Ȼ8R @Q[IyƖ9 *g<YbY0FKm5( fjdƒƓȯ & 0/  eҝ9Щ$IRJa(SGKEY簵aK=؀L QP<MG',8j At@;b QP,L ,p6ɂ70 =d9MiZ T&}`Kw/#|KNGְ?肗 S9Q@qH Lȃ05ZLHP ЎL % zŨO]=Sxm)q>P9+(gdFpQQ !2 Ф؄%詞պ&q01<.0U2̱tR*J@--(=UuP ` DÜ' <3]HIOc5PCJƘ(\j|?mq*vßg<M2*|TIx[N:8hPR!%KHiWP3,!`QVe!DI˰%ӂQtk=VS^[ 'lWiWh$G}Q쫡_ Q[d60俹A҉?j G6iжjȇ=ۡ eÌ 30측PHjTPbU =PaWS]= 0]ӵhTIxQkxNk`HފX1A1~lY~`[5 pOp%Q  I:@Mtg+Z!]lٚ%>͎`2|6Wi݈. 0q)~] C(GPM0zt6؄-qa aLU(U òO<>hRM ::]]U[riڣPAׅ(`’,g6Tn 6 iB`Z Щ9)d T-IXc6;MMxx,%fȝ^Ô  @NhVfVd!C>U['(.r%qv- V 0``v;jʤ(TKyKaEٶ' ` `axDSDM4 >6RLL! p|`=wKKFLTc t4 t ;;X-n\ŎyzX1 qyxht Ɉ{ugD"J3v|ħ69DvZ9j\,݃MzNQ'F XP`*PBy0G;<h`G3}HTR %G!0i5Bbq \  ٳ߼9(Fbu9XBS9j:H,ڴj D+M-JpКAdǮ/hwf;.br1Ȓ'Sl2|8YgǠCt8JY8Q@v,Т*y$$2Z"!i"Т::=acZA Z6Y vl}m$@6C"&U($ $6HψP0I9xSRd dqd-sDϼql8cW-~LC|;bP20(/2 )m:DyÈ@yѨZjAo]}@+4\ #:O9O/H"ol y3 4&qIAg=Vco +D-u;Yzղ4}uu!P>4ډ6h>Naڧ=1@ L<*G&EX@FqLRs|+z  oxK`13 * R73$ Z0qROҸ7Z.} @d; H16@ - B 18olXk Nrl8PQ YV<7,70.pA9nhf.G ú08P`VCd9u 9| mU;{3BЧ@@P,h7J!qDXT8fØ`Gsl*r3HE@U LIN1;4r0 BPt&y -qBDX@ɵffo)sL3׹6pkA>bRt Hظtf` i*DxAf< &!4%fJƀA>-kgx򞗖 mgp36SB2BF÷NȮ->áJ}*W)c;nAL !L/z XpCYo9 mh*u~-S k`2kJp\hD8̵Ībs~)3$TBBE4+_gJdl_M-X }aA PPr8*f9f9!(όE~^6kk8ue_Fty7)E It>BS. `c o@a:dx!7'h&;2pe)>MWP7]욊u(8\I6pOJ]A ^ցx1ϙ \}>G\ц`Z!1H|e@$MQj\ bP S|j$?G|; A9>ZaBudp[hDaݡ* 6,~aAJHHm11xx ȄY]?=YIÁLFUH\ ^؂3p@+\B-@eARj¡D5B#A'\SAϥXVf^Wdĺbn(Neo d%z J1L@*LB|2Ve|Aa=S \} H_A AS޵$Cp:AпR>=mbˑC݀@,8g`(Sf|orhLA"_*ј=8}t/ *q CQcy b% l_2b \C̱5RH=(A S_ l|$@YVh"hM& \c$LCk|C}lߌ9A3PGe@*^7OB-+ܧ %fe$Sಂ&iT⽣@|hAFFZ@ *^͎t qroszVm <0xG < 7AD$ԡASZ4-Bj5Reмꬲ`TxM";HQ*!kJAu t] :EUɯr>B@.2¶˰L |֑$#-&f `g0CP,K& l$ ) `{ST=A D D(\%? (jBq"$nz@tJo׽< n<^ ȱNF5,6 k`zʴeNEY|#lɁL)tAvT>R3 SOq)Fb,[,֯*OQJCI`!qT42p1r}63+$tfl6P%>l7.} ā}d$l$e"5OH%Lf1=\ܳhoDXl>5TKiшfkV69WRF32 $& CEEAT gCSl4ό@ l 6- M00b D5'ظ,Y׃] h/!A=RM{BrOFG@りo϶^ʘ,,GyTiف7MD\.?"KF7 #EOR@=\3&ՂՄ됷PX$߰ō [%aY=$@MBv8U)3^i5@4rWW`H,A| !1tbMo9@ހ#Cyy0-!tZ }D$h#zBט' %A ;j )8l:^Ac8Vm6 _)qjX c<h*,S~8AB.f<?S(҃m9Cf7u6k%hP`lDA@j,cY̶WR=kd,@ĵDVoq":3H!d*BN7B̳HCOp`J @X1 LGƩ́ Zr4}qxC7K)B9C#e:ܲ:6L ec"\QP@Ĥ< hAJLBT i24y0E hUh@Znl(^('7ࠎ>&)6lI[HK,61v#drjIo&'B[V7:@\ )ĄPB <ʣ+0;S 1;B~pT><|8đ(gZ ҥ `dtaj%#8BRH8"}~Qciܤ d8k$0e(pTiU:RQp,WY [s.r1t:HGBԢfS!OvKw!P6$Ð%t`AC;DQ@k)&$/z_ԧɯR8X!ˌ$pL4iyq ҋj 1\bHU ml'=41w6 Ic)0T=cpccC@e#14$H@yW]!$ChG*f6udC~&-q[\KJB]xRQ @5`E 0) 0 EPc %15S"M!È/8̷}CN ۀ~6 a+74@$ o@ NdV;hȩRN<oU@ W$sL4`,Α5H ,\K BLT k 2 - +E)bmrmG IJ`j)s A.Rw#eH& >U"ZUV%<A 1Ni!jD7pPO:oCNbx9%QSmi('t@!(+)UO|M&_} )߀?!;yg]]Pr*N\avX:nITľG,= et$ZC҈ϲiУw|NmP@nQ6A01&ÌL$a4$aBz tOV# Z[Č[ @Z>&@sVr#&.:%"h\&r;tLd)JiR=沼A]bkNwGh ̧:0rJ1'S6'DԈ@d^@NL(r;h'@#$!l%EI.A9N:Pʮaހ&ela#l!a>LHBni 4!:m Ѐ\< BĠ a$ХLDB.$$_MR 7ǴaC6$dn)$N@|NrlYh0Jh0$(zJJEёM%Hk:bA *wfP@ (ƥ,@*.yRXԃ  ]@@`BBnA P|. V cGf06lm$>C<"hCn6dDLhArSADTjqY\#7!c1ZR"|btn$*O #p.Db :2`jB"RwR@<īcנN8 Ҡ.FA0 TVA?/-e$V %020"&2Ь!OeNr`UlR5hs;N.aFl"~ X7R@9Ff,Ɏ8 dF:s nAx!$Ę @!`!=`BDA/QLQȇu @/`^Mc8:yx-p@ l 4eBBT}^6&`G EtEC!EpMUq'Zfb!K*;vb,Yl&Kn*!!L)Cr rGNb#N@#نDk s$,! `1n +F _P_j+`!] RZ22i2BsvE(" PԪ n;\; iJs&5/AHPW8B/9D(@#EB5aNĀARDY 21vg%CR=5wVBx&!.xb,nCtGF$`( z5-եBP&ARX!w!/DM!c26o)p&_N|THx!I'|b-ᜃ;ns4EW$H@D b   raRc*D- (3aNw& v \tlR#$ KDF&|jF%Y~ʯ!1@Q PPAa|Pe }cTByy Cq44 G&C.Ûxū8⢿ 4Hv6.$fWݹe YxѪ f z`  !$ý̶am 89d&96#%6h8ޮEI0j LNsG% j &`bD,nȵ @!#5B'Tۚ~wqw$Ypl`B̐vv"ot;xFI#de9F zv\5Z,$Eb Y!VAd e$P^$In7 @'TnoiS^N$ ~&3JtIB#zw$R9netxi0bhnIaﶀ@h| 23 `:nT"K!NCM ФB"iC 6 rnn)0:@uh'lGΤՊb`S`Ȑ+S@/OjxS88.h%9Δg~buмIdRJ#ʉ  afڃ*a`A=1 )a4%8tBJߙ)vk.1*`zV$ !X!!O oHMFP ,`+tZVBppMp`3Ic8ftBz!J8R`!R4!Hn"d\aEc!3f р`)`AuB9ݑ6=$qKN "|x BFqv墇 J!@ r@ րm:cĀ$A 5- @!ň42wFuj#IK,%M XTC $!G{[)dBֲE,L XveEp`?R+uI&IvETvWAM eM$pZkaXPJ@S?%P 0rhÝ#cL1Ksv-]xفR}7L@BMOqStB56t%wDLWL1̃y5&]1F<;p 9p"ȢOEP@lx>8I̔]dBV%E~09S5AE\R1Y' T7ܥ3BnmP '/S/\ (HjBhlvnBɢNS! #}W Hl9͒Zy+<؁u2TOTB)P _DLOuBk3z)1PjKl2Pp mPG+@C pE+;10_m_Ix*&\$i\?_m T3cQl@0a 0.' ;,T+ (I h3! <Q T)f pN#k[.s܀T1 , e7nP)HKVg]BpsEՑ5V"ECW-֫ZbXDM^0<[ܫ R&;(%H4hw-+." C ToȂa L h \Q,MF6IaJif&x׸Hf⾋t5ӡ翙P# HG c/|1RpB:bha#봪F9n0,o2}#|bMƠ 3D]G$uwnrFc<"#Cdҗ奤`!avCp/,%Rx'".k^eMW7lhM I^d1NB+,ELzGxaEu @rf-P)T ȚG58.!LaSq>CUsj3)3')-lzM6d `z{C+cB`hE+C` v`wO @ !Y:P(Fcwn"Q,(2]h kF"ɘ.b7OrLj#g֏4Y" p @Lb,', '@ Nؚ5N=Ub& 0,:ʰ孃v`ޅ 3 0怕˹ȅ9e W$%c Z۠$v9nxXXu#TB ԁ80Q,oy Bq +W(\`9L1Z$   XwaDoUB6tʚRdbf9$XL vsS ô7 lcd-EaP&k @H>\9#-Э4:㒥a>SHƄXD,n<neb!ҋn q\_ d H^DxKJ85B}zT!BP.Y?!VBSKa(a5KP dUVW AA5ZAձ6b5#Tw0Ӄ3}Ib^qb 0 &9d/Ѕ/O[>5T)зRŐTO[v27!A0 A`AwP% Obဢn,0 u/v@hyAS`"zK 45P0X VDfrf 6 ;"MG2mdCV-NOB Ah%`ߠH b5tfԇQQdv Av8D a G7%Py` tXRL0sVP-5P8ndvLJ0]"°Ux4B(M@pv & Yc `{8A{rݑ~u5d\/6D#H| "F\kr ΈD75;<"h|"7d\.!ň I uW1D 1} >R0Uut  nPzUU|(( D t i&_70ayW`?pL0 R/@3!Y6w1kQ/"K!bх]`-VY:g ~U\w[*q R _<C/fm^_C @P1eUF)Ð VUy5y@NSyKdq ztrWq e%mb b <m WhIHIew[e,wc)̨ 1;x-OZh"Adq "7w}g= %gU&UP#@V]@+Be^(#@((@ 4:irpb6'9` E98z0 0 {DRRJgvr# qH̥H6T;v0 pӰ:+d Q<-9 Lt9w)GQ'0Jl>$AR(ӦH?_4_fՉAmZ`MM31AFW$jm˜hQ ˪[:A@BpE[o$ᦈfdq _AAD !#IrWRI֯ `Q\ӂ; GZK)-4l5:уhǯ‰!5RM`+"<[fwzox @3 S R, ɸ !O ơm _8LLw {"UѺғ$!S<Ɠa vkz3Qإ/Wb!`Q͝Ad[ b  d@9 @3a28]boI1^"a^@^3G> bp~?5)I1Mrbb0 ٝm20,־rf<0?@e9Ka!l_ p5f|:I'2f<1> TA53 [;1Ut,0 ? $ XG`Y˱MFҥ:Ku.mmv[L8`ѱėe nuJsΈDJ&^3q,p y ] !Jp3EN nGV+`]vQٓ 3= qKhPB״@ `qY)-dь} ,a3weKrCHG{.#P$/"flPPJL*D[ bRp p8'3!$=&a&e dlv[>X$\~, N3uY@^ ~4(ǎ ;At!,GG#ʥHo߾BVIomo bU;ÉsBKff^! ?p?@0`e! ۀ:e^ KaSk ,IpNGPnR` p31U=qUqbR 9a$3K@ }$nH}b YPLx"OaQTUOdsF}7P~Vn2pPp!Uy>˃M=w?!K0 Da "p8&r)1B|A3D B|I`!nɸRy8-X`GӪ0C|sFbS;9-Ub< #mW\l z bcR,0[6)n yґZt֪`$Up @),aP֏8Z;)  `܊ttn*JHi6DI!q( 2H:BVP %JVpas Ax8@l: 70`*9&+HH60b Gc 0褹kSȡ V&5GV r8"i30(K[rD=6I| }S+,g J,!!&riGRJ(!FJPOAtU*+x@G`3W]RkDNL(ƈ9,yѮ#\1 ##.Hm $k/6I )A}K2`vEp5}~m6mP8)37v-(,(8bC/ X.8(9&AJa;C?(SJ* 'p bW " >cie[K1rS :rК$eEn(sΎg!a  NQЎ[&Z\Mjk6~=ï\Ɉ2e418ҙ` > 0p0()bcO ,qp)0A@_(0~1kV K i24cS0ec(9L}K_@571 Vd&Fb [X#udHr&()70P21l @6 hHN` " :xT .p C`x6=\0ZM 02F)eK1J30+]PA@ЏLAĦ-V[$ݴ 2wkHpg ,8doJ%+AD0[بK@բkM fC|hMۮ`"t7Q@Nm"Dj`T> j2B`@Q*x:1T)J7)@Gzv)ZB5Ȱ z%&l 5Poa! AWbW^@ 5v 9%2 6`{~ ٲGzy8^!- ⹂k A/2 ҅UaQZq1PAª9+gJ>2(i\=c0G 61DP-<k|Z0HlOQg o\ ɢ >` 8UDc4 Qx W  20u8(IȸAVt @n<ހ}ʬ r7BuX3P}k|?c-'*`Xf dGLZ2`"MF@6@\ 0 8I&vȢmh WDc"Pg;T =Q1VPBT$C#X4,!0c,r 9qLFTqA r>@H uX9.%lQґ@YU$ [RAoհ(,3ja+1(qtAFq&E!nBhCӆFݜ0'OPfA,;`$"Q3(W@,b!"P!g۪R''?u|Vw:@+a@ݼLFF@gx9!H `@SHrH6sT1d[b]0& J; R-*҆&Cy`pm g`D2C8.AK! HbW(PU(!fϰ!cb-џlZWrď|D4JA偈0o7-\A^W÷6 ޱQl l^'md')9tuBjY mE"6ם̱d ! YS?'FGC#װl@0VuX(|X)z:H|`-=zER,8B8脂 IB1 KD&hbaNh2P9c026۟#0$a a1-/(!0 }A@l(aɢˢW861p(J5AA!#2X[+3  HpQ^dH-])X`ZDk2q?b H+t3 HƑ: /9 "K0o E?%:PO)9Դ&QǂH")ј"  @1ɍ/P0aj3À1Xt0E6JpXLsXO03<9b` b4?C283-# j#hƄ<>0i(#ً1Yh h850 A)q@101W0E $1z\xK@84P5@o0(gT7VW(aK-hm(kI7KT2q‘B<JƹC#xyCJ7[(:0ݫ yaM !5JY 4Y#|Ě$( ~xw70SX!2(.a W8>tH{ۮ$B/XaBM lI F`jjI K*3R8p>ЊR"9X @["匍|/($:)qـ:x+ hp6؄z@`*|c^hH(Q!d 8;x;69HLR =};Q)TʸIgq?˳21Q'm @#9[:p*S8E ;}h|<((6XȚ=jVChтH @PF) 2З #I]5 a1W0zSHNH P p8M86H=}نzp򤘙ۃ{Sf-d(5P5 wpG,bvGϧ+tP3@=Ҳ$PpQ,Gz0@[Ax`TeDx8t1`+ʫLGv @x:(!V9:^A,KoX ȟZ+h50@ԀOq.(3,Q)PYT@*C4 =YԻm3 J8Xk8LhL>d[蒳B +-bXXX4ُs5xNb`ZGP h)=5;!=Ї#YSM ʇ@X`muQ!σ`N )49>-uE0[#!ږ$j8o{أ 93E#1ӃضIXJĀJ&Q q HK (`8YNQ+-kqM] o@ | k Qf-3 3U> ;}O8`9o?FH;0~ɘ( }ʐ?Θ 0bȖK04 X9 33[j;6X^XU < :X #&_84AD.Mй k݄@: ,ߋ-I9w| W*SkӁv@@ >A4#JЃY)I #e淁h8"1 03؁K3Ɲ#`B]ok)(@(bP7^mE08ϩ-_Pc)xd3?\mŷ7K^Z:D@ @5A 8*:Z@sQ2[{0 F9xSCа[ 5}.D! 9+9RB8 08#OA$ރ8]`Py/(r Ҕ]aSkT dY޷M *숁+P ;N \|0p< Oz yox;cTO\7W =JT&oqݾb0 ThF2\ȓ8M(cB}(c.cT[5XT8 o$s(p%8 8`JA4?W~rP^oXp~ ȇ4MJ68JS7g0Q\0 *jX_8PnycAQcaFD(&r &^qo0!^pXZР`7Q|B2qIz ۑV9O5D@[,vN2=GDo0 Y G{`* f=,e/n);0y:9NtO@zk<߆0 /1РNEy^$d9_6Ҡ07Ia0M9?ES)!ÚnO:  .hYvIl.Str**iH,0xQ#؍Ϸd݈Uxa?rW4K3pdD(] 4޸0#3dp| y`N:^P !2 uCuT_5H!J N5ԕ΂74Yw",[+ " Z [hNPppZ[ZjQh9T¬{1$k/N'?0IBhm G적 <}@ ٹ:4VkZ,z3[FNz5VIfG-6N9m!bdDo1"NQ bY[^1WżK[v1b{fO( Y{hz?WStDS1Y b dGް LW0oh@  NA $TM&}9QL1|4ǴTLJVKgK2uCLlVA5[Њ=` E)^ F9k{3$up AY]2I9h/69)@$ѤM8ƍViJզMH@\5DdEL}( @4s15qTR7FL 1o;H9̧벻qGTFqdB-GaK)1\+ 0)1A)2Lh#ѤK/R! #.4)1ϔd@AI XSC X*hPP$lAw6(&LH+z$3ԀQw$,QA E̠ H/9M+|1@T E* Q!}ZN@U81$ԇ:~dDB QLyo.q#)Xj1.LB[R*(S]3+Tl%k$djcW$*A+4&ƖaI o #A"`a `~A6g)q:@đjuClQTLz mŤ5 MJv ʢnS%C>#B(/&DD~+Rpp՚mx-0]E:4  eԜ@`yxCxkelKLB/PƧBȖi5yD]HaGqh7v`”'E\v $TL M C B`HLHA ,A"+1I %LyUW9tFyQI|C Dp͐ulHYnh*m566a(BL 62pBpM.25yuL&Ꮲy! f"T] Z>@5G\8N=LMJH&"MxQ@Yϗ @1$>)IANLq@PIF(=M( 1 ,1L@5  5@5Pl.20!&! M xG,:%:IW8,L^=yG>wCx(,ĠD*"l859 = 3R lhiNHd)pYJA$DI؅BT (,Ht C>xA:p`9BGcL$ySFeVpSQ !H(J9\`dL vD$;@Ă̄^}؜S0QI8FRK-H5%(1<-)Y$b"NmDhxc0I߹@ 4P`"*Ą~DZa>! __xX^j"AD4$3<$x6'C=xB?HWA P䠨E5(Q/MNZ6x+x@L5E,Lo8HhrP7X EԂOMы J>ĕ'8&`8b/_ZxA^`'ĈchC1$?4E(HDWxaE52܉G0`XA yG5֝ݑ8`ęn٘>Bn҄wאiń$tQUِ *At%ȤDx(MĂ ЄLLtF \D5\(J>8A@+B9/ \L3'$~*VHhO@JLd(=< A=݈#B5Ă6`؉ C\5 JEqqHׅҜtas 0ty-I>! $@LQJ ($MρxǎpU*B gL<D<h8DZ+Dֈ vEpKB>LX7P$((G <ͭQL5dJS(IuViN,uX5u=)0łDDH'HzXEHѝ7l!B욿ń.!?8Lޒ`M+SBD,Mɜ\TB}A_"ʚLGbD^tA8K-\j-ttuN.Hi -́\O=8*t`ij8Ll%d D]/ 0=IСYhа˹ʂ~pDh[4c:N!`LBۥ$tA/dH@< MĔn!ɗRQS5|tKo %>v`Ѓ)%MAS*# ;<lP/2?8C9`$,6tQg&&D=\܉Q3[ń0,AzbJ%A|&&nhYe=84BBLu)o  DT0˰UsS@(I0w*r^]ջxd/x/\r܀Kt+ T֦(MB?HENtĄ JTH"@1*Bnd]u HLbL ]jښ)Aؘt)&*d3L T'7l *P$Ȼ/R_!ܬAcsKc1L@iP+Ax id(#MG.y4fD3 M4*Dk6 2vd+M̦ˎ܏9E=v,tXr5q!qq  /B6XgkTP@"@ Mt`6 7RFFStx{HDDC7`Ŝ|$A`릭(Ŕy1)JS oW;E4ȅD0IWxS*)PAp8Q8i S:{(j++hA@>5d31I_!%h Eքu\E)::.ɀx~GJS)w^E7p8K ȁ%P> +؎Zĉ`E/r#V: Ure,c-=G.|M?dAYdq*s*Z@ jJb b*x +V]0 Kd3VGRA%EImcbP2r@&|Q`ZkX`4QQm"{嫦d`.aUR-Sk,gMX3c@Z1Bk (-8Ii RQbNeK@- 4P-}@.v *N 9(x30l Pab'h B ǛO(C9kx)-ˆ$DQ~#Jp఍ P΀l A*:R8ȘD&5hi$ E"0Qp e "X)f"'@?ֺ "/Wa :X,UhC%o*uQX 0$6H `򞙀,ZjT=ЍB8:V< 0jׂ8v d8]\))'D& n#n. QXDI…^oQQ&"hh B薬jdjꪀ9/~6W&"A\$BaBz+7x[xv7vTn_%0@!$4 FVN#&@& (Q0:$b!I儕BB@[ Π@t X8E^H? Ѕ A"S<@-a%a@PpNgi0 Wߢ0@|Η"G(:@PF SF)&(]y`](h E!6 pʡ$)r H,d"M`uGf " sr<ħۜT E`a@@o'@N d ȤhjUd0* FGЁBdE)PpŅf5Pjq}wZ"&X0 .Ip $(K[ Ȃ&i%hҏ~K`B x \<)ל&5П$xR:" H$l$*$ Lmx +> ta2,Lx 2T a/@ 4dlֳ Ts=8 s@%"XB.c7!gB\A¹+P\a@.GJ M sCaZ 6 2d!%i-Qy:q28#I/ސ 1 ĜtQ77bXQS#H`gq`YP@F!Zg 8@A40Z(23A.BN^6WBnA~P.FBS qbaA{'abP+B n2=*B-mxVڌhNsd 0S.BF gY{ňf]U!4Z! M\4KX"lBfu@JCxXFa` 4U*Yf@WCa肷"uh)$34%a@\,ѸxyiE(TaZu0ƴ҇TT>@Z9f hTVq$D t cT薄wh"P;nvGc2B u.pI`E&䀊PhĖK-\> }g@XH2BԱ<|T[t ҂1FFbHa)T.n4k4~#X AIB,)L71ZI@OLtч<Ȏй}oBz o`@2hA)H` B$0$`[HK*=@ ^NV2YT@֛u:Ϝ/% jPdzHANRz:mЇR">pB+8$Hm`6n+TbC;]I ^!)Wdr P`> 'Rpb1)7Gy:@E$/ݖCr^ރz E5h2T`!5Qܫ ^9L"`ˑ @S)*Hs-DGV@=A 0b"d@YJHBd bEhL8 &ڠ0ڠ a/6 5Rt%H!l erR( ,.EYdbGx7>!HfT2@GrCB7D!@ذ2 n.   @>?NAyj̬@FP$ Mh8@j(#-&D|C``H Nla# 8(`#tN`,mV r0) 0f e*FOo`i4  t!X@ԩ.C`2CnztcP/ sb@܈B0)#.& %Zff! 4#4lJYnkoc|kN ` Prfd P%zN "Paz*- 2TDVng,\61 J +xLc%a6AB]^)(#^ }(( BL h)ʕ V N f88 DRbԒ ZoW2299<V b\*?H!$B`!!Sc  HH`$GX` .!j*DBŽĎ[$%JV9hc`DՌ&"jFu0$^  `!% &)``v(u >l €eBt| j h.3zPVڧA |C zJACL a,,, Xcs@Jc c_ֵvCMd*An V!:&V`K`%/,B'p!qf( ʮ``&^ˌIb O\r @!a& (e.NA;ta`">֠.^LTB>*hBhr@AQDB ؂dbAA8#-j j 2RRJ䀀n/$@0{5K)s 8+6u"/6aRm\&~bΣ%L"> o%f$d"\^ΣX`cp K$ `rC!!RT 1`$nUBg-.CO. H@j1P[ bb!\@"\>8e.t`l!d$qGNJ V7%1Y rh9 &UR0CNOAh"4.|V6>J&za.2g\\ڴ@!0($̎@!n즓FxΡ \ChG<̗ .|V#:a2d aeiH P Po Aن%0@Π<"#V P>  1qu)Qv fE&Y sOv8/0hL oz%>BT"X1`G$` ly'?/NPAh+z'&frۀ▤^v@T:%O@͸ h^/U^Cc NN (8=4#P:E 2Jo b.fi* 04@{brI&D b vӾʭz "I!WS@N`G #o kx\ahI8*hA$`s1SA5a"N t!<9 P*b_R Zmf h! >F oXo>7 x > LJJ0 hU&h!@",v6΃N `aWt ÇkSg3jTU*lJᰂS@˖r9 Z Vp Fˉaj*$gY9MmDcaIN5U8p]6ÆqaRTX*'k3G ƌQU"uz,YLp${@Z!k^CXq5ѦAfP@ʇf4< $"thĹ7V=8 2LrPyՆ pljI?P݊ɡ :#<!I*r4Ӱ,7PFp%ssoBB@7 l#K0E|CUb$!TpGU Q.d$-$P6քAN,TSK 7 @LFĈXS 0atT>tYV-;W,!rhE tA10V $9 uxƌ"(5i j&9CFun D)hD0xF.Q\BQsH.B|Ddx#78CZw w Ƙ~xF贍2QO3#\Fu"Ea^A!}c]0 |*:SluXB hfԂ \6Ofe!#Kqx9t0p{q G:!@ #;8C&Y,YTdE!Y@*R9!Ϙ!HBҔ!w! fr. ~ *1 BFP 9dlbE_C4X>D[YQ9|a`+GYjrah(4H*.G" 0h,,UmI! Br.\aCpQ$:* Zu@:eI T#İ@@oF3)E7ag,/ٴK\-L";rpX#K18Al FF8DNpV9=#pC3 z#+XR B9_ Baqܰ1dʉ7X77b} qW3q^rAW 1< xyFbGTR!.ۇhm'U($Eh:ߢM i7]0p+1𿡽[7sSaX}l -~І"rG%܈dȎaH_*!`A>ͤO Pbo?c^J\{C@Qg0E <>x䍫G>7C#F-3,@HBq0\`AV̀Nh$3FWk<^Rc`MIA[!Gd%adQCTA#B$x<49Q %xɓr&!> ؛Š.00 D<"zeJW32WtAB˶T F2Ё></,$ j ^P4;=͙XBlbINt~.HIB—cTBlQ bBQx&Л[X Y+E}x<0i]YC01UcX,aI9l0yFwZVthz[{ Yfrp OOA0xm0N$@г$bĆr3rc p&W0)xgY$@O.gsP! 1r·@iec drdűRRuMz/7Ŵ <1b,K6IX7`]eo '1>ݡ6cgs@pzP.ve O3aFbo$1!0od q@ff ` ` ahG8F'" 21Prb^}0^09P:YeSe70F>18|"4UP\x0|s еTKtb qe/ CveP=ԧ7R#/D43:soQ'w&% F|7qJb 'gj W p EpgFPwLjKE <Y1flN4QI@(7l 3 V @`hT )P,v,N|q΀ ekdA e b 0@V_%*yy~5+VÏ'!LmdUS EP0 2%2ep&P0oF EP}jz󐓲@a M011$ UAzG!Ia tj=!CYGE} 1@FLzY.@ Z 3)#a}L{t%@'A0 +p ${#a  Yl$gUk4sP/byp& FTbF7xr ErPa π0#n d1(@XG1p@ k7_P

pቷ}0^'CϠ'&zmxdrBP!~bx_pi1YqQ9 9cjಚ& 0 "!Nafm E ;L"3Ap cyxpA%Ф=+  F ]*pU' 0\`]YTryֵANqB1zV''P#z2\!CAR0I)򔏆tP'I!qdFGr0eKPp`+|g@GBq4~zo͒m+ly $xL=Vur_Q!DMQL^\b,:@uoX!FaB7gK@ dF"9ŏq^ PWd$g X/Uh`F`rvYN 7 0 <`` pRXCR@o )."Lu;>g*P#$"9$=6pr`xtzPvpEn4OWt w )0|+Tgŋ$b NY' 2@ ZvckrUS෢ rV' y}'%U }z6 o#!l]S,!rPbA'p~$Q_'\$ x$7U P``% mp&@0} W! $D Tup@u ~ ^PҪzrzt@jo=\1 ΀NFǠ:뽡Nj*Ƚxry4}qF&`rVp&gxJ P!~pA*dޏ dp :%ar׆(Qdbjbmp݁:1xN? $XA .dx%F ) .Z #*mUk f!< aF ZGUMڲQ(ٚ@Y&Ks|ЪT"[qqeL%:+a$0~@o |X+x1k FZ9ּ\NL< ^#CMB{0ps썑>sK+pd9k)ЅBoo ,OR3 >Ϩ ~R㫯jeR(%(B /j!ra & 1> 0p7̘,2{M,Ѫ ",KB yt+Po$C>0PZ*!(8a SL Ix W0&) `M``" (JVV>y% (Յ6re&JA 4.rA ^nhF&E(Hf".W.@삃`\Xˍ2T 8,Bətx8B9ę Bc#* !4|`ؤ f` pGyr%([/ A|p~IyOBF XAȅ$@i賔 5q ]bZV#$ylJ!drE32 `w>*Xm(,U@4( m6s /"v@QV)KxZ6m 1" K`: 5XA UP%L9LX ;q 'R^#^7yzQ*I LߐPZaל@EЁ m'@R 1> P, $@GE0CBz tLB n2\!x {HABa @V Jz) kv "#)m"x[)؜T 1RO > <%\Cy pF6B~-!"#"%U8<;ҭf@s@Ƌ C/B&GMxR A#i;"XuVK8S 2P2b1i Ai  "a$X*JA$ UBdp Yf T9 1 cE%1^p`HCY!@*C'BC Al Dx8-:@g >R 3r+Ƚ€,g q xK7uֳۡ 1Po DHBZ'`@h] .pE*t]BB!\*d fr 2$,(Y"T``HQ!H  Q %L6V r->![$ &^9!pwd@0}qtuE, m9DJT@facN4ip bјj|4!<q/#^@P0[l$%+pDC6c?YO 7WCFu. D1@!> H&J+IL`Mr/U 2 p ac(j =06a6Z+27/;{rot֬TOB k:kGc1ڠ a"rF g`P*J L)e0s f[? e)A-X 9h%)@ft30i P Fƀ of BQ!y6#! >qQy󜍄T{ Yj& ),$ Y`ͽq1+cܟ96X:FChC*"@bĈ p^I?%2`& 583?;ÎH]u*;̰*gH.,LxKAHw;31@9mP8 z;ϻ%f2\]8IGȅ8(HjhA\h#y  Kn6y1!M nQ"ۆG tp_t( 2 >x"1GLa >aꨌp)Cb %X^:%hZHXj˱ZX]٩jDž`ЕQ07*UX$-Gbp{ !SF,@ [3b8/8[#w܆z6`I#FӱGӴ>P Aq Bذo@98=-6!69y?ʂqjЉ;-8C7I0K@ x H<Jf".P,( ~(@a.Z{`J9,Љ8郴@#aȰGنp* D9C`` /xIb@+ ҌT,-UK:A i x 7̂X `PU'Y0S6*Pp=Y!?ɇ)ػt0:CGܰy9DDKxr ?jxxr2qx xƉȈk C[5[ /XϞ0 @FkD@m`6 18+1)Q8䀨xo~9n X p.eP^0(L KojX$$AUԂ QPSa EU; ;G/{ÂqIO8AY6S7 x%x8{Ɉ9`6E(pBA @yr (S %6Hyg`Gd5z30UUR[lOO2GK8 7 b$ Hl#p(0тˋ-!){{xZS(+]`gV\ :S`aЅq#(6_rV`#8ǂ W9H[8HGH Kl7r)L]Ƞ~8N,=p 5(X>] Y* x ᪂#S\$M}ZzP}mb]#~DHsCr7*!][\ eH:( a#! H #;E A)) $(ቌ:KU\ νXU":_ Vh2dn58"`cC&.9ڀ,B 8ˋ yE1@Zרc@}$  U킱! x<P5۰\-tT5EPXhC3EA^@8ȁ! ,WJ @o!q 8dⰢ /łȓ߽k G  . LX 0 t`J=N:ui +PcIZٰIC 6J,h,!8lxU݆JҐ=Р@M07- MfP_C4Ydb  `NֵMFf: (DC%xar⍋ y9ܨߪI'{IӋV 7v((eukPG8wB@>JT!]ev *l qXXsl8Jb_t + DE)tJaCM ÌB"H)y)*((PW*X W\T,2NjP v-A  lCz% ʩX L زqGa/2 ɟ5RpUnRٽQ$V?w1uxR`S$94Ic.'>IӪ|>B@ ̀!kw*J_<(ln,TM9(E:gF(iHĝĜ-ɂ y7BRB9 `,i/0B!k8_"` MF2o i> N_a"[Ƞ% C5%00ئWMSD&RhP2I}Qlh!Ln$d a~G0˦<8,5AZbd6qͼSԖK!݋)V ztaPZ\ @C98JE!a^b Ypd0Q!Q(-mR@$FvQj{ Hye(*_c ԗ|a*esZ p7f e$ Z_,"\tNP {Ag}" nrh\m رq@$/J[!cK^ABԾ/F 9BDo38e*}= ܑXG@s*N{׈o8v| 3fnCUM,QӢRUrha ֌.\Z"BHLV lm6du!5B;HFBBhm㗅ې +z Z\hv]/xdo&2'HBmh, lDu.4, ]zeɀ v0@S{lp_ch,2DdDiq5:<quT&M a)' MoUTP^Hfܗ/T*Zq3 d4%U{%quBZ'yѝK40oj#bfʬ,sҘ;@p*x9ȧ>򧨺]? K5 7wI~nx1fV.r|vaPW^= Tt>&^J ƒT℅7xC11cXWrܰYz]va B Qsb!W6!G;s=7=3J#w3A ]pxPcp` F`q˷ nnBM)PF 6z}d)'s$,ޗe8~Ƥ c@ C T/B eAr#ITF Co C:>=@ 0 Л? ` '@a@ip£p:{KN  12s[[DwtC!  CP Ȍ Z0 {  jqHItQM2-&'<ȱ+ÌP 0\ce! ~m+h Wwh{Y P o\'^FCzb  17-B( w䛾@o>sfPЬьȳ͠qw)ɳo dW0f P<@ % P o@M?1 A $F0 Ԣ c5=1q u>.VUlm" ȌPxȠqx @k0+pIOP \P `##z)l0GQk Kx5IbIom;M>kv ֽȎ ^x K q @7{{  '@V-&Uk+P1a)G=- 93G  A B!b;Ǿ3qò[ .@ @ԌQy:)k 0y=>:{]\ KP A׾=6 π1 `37S$P=/FsP< ޤ7Nݯq rC[ۉpd 0-< v}|^  W p = t+  "^r` :.P|AI> ` _s`XYKEs>:I7x`}&K Ǡ/`ħc Ҧ=Y/l<#9N)}NQC; P :P 0ҰN I Ƚ}Z?V >8U OQ/!*r8)66貫e؞)!9bJ!5dicY~Ŗ=Nr!̄!,|ǚr,x=x@!X# 2&=hB0x%Ё Alk+rS;$p 2r,]X PAe-Ca (ƁD-ЂP$CHx]av  '0dFFNU [`Rz 0@Z6*d[%xc^PD Ѓq#@F ]AE*Ry p V~@ p% MIhI,TDЍ`Da e]0B'g- O'#5+5bxiT, l> e20H[DՎn,$dIsl1KEG8Y#bS3YC kBbS9@ n3pxp_J>TĞqD4A^6dG!\ bN F܀5d0Q-hԂ*U%LKY:P ibRWh2DDxtY0hУ,6 Ɔ!M^HAٮs6P`G;N"2( Y7mΡ8M<7*"3'zDS!4`dF[q opj .A 4;BP順`BWӄxYbRbcpUևla# [h25M-?&br((^C2=BW "p-v,jRs\TH/j WE!! A D-+_jd`hۍȌmMJ 0Ӝ5?$D'PH:@āfHxC98Kx>SE=m!#N`c^PΘr8˔!U i*NKc +ˆh"&芞jC"[B#`@CMx0p8@ꨎr'eH ͩ@: n3-Y6)R0HUˆ>HЅ*y@*;&A( 4o`>Ӈ#)[dZmҖ鸖ʑ:HDc8(J1yG T諸M@Xy"2 2a96cqT@`X8D [ H@'0O{ ͡m0q b@dyt@()%۔;P>g=oXi7T"e%VXZ)x .HüK@Kx"d: - i'1`';FK,E1"#ĊIKlE2O}8Q bO'ppT91?h s]@U^,r` Z),`s\- LMu[ɛjQ C;BC}d2Ī# #W*(qkڕ|˧8<9QQ˅@NNX K$%`;]dA T]*A FG=qݨнת=QXO =5TUr90HA M:r5XqU"RR_Q_":XUKh{8\,QR (J#P /Y[.`RnX2\3eVhFK8L )A]1E1dܘOKqB}ENA"]H4baJ-M-N_`H0[ oHJMП^E;kaq( m V*i"a{Wdh)ߝ`! 8;;lЃK L4y5]eAV#! 4m)ab ؍譄P 1zDy5ЊUk߼%Ș@-1ÈV oCJP[3>$&#dM}W`/`gp"6;RW/M9DЁu0$S0?O@!n.{W'>e b㭎s1C0P`IɃ}k6i-JR 

˾׊# XE.&n)ڈ$}*i~ŁXoj36yOXs-(AYX\+ز[OF)86hbY pߟ@%uI\:X2q۔(<$&ŏΥ6*ZWxJA@>B2l!āt` bۭhJ /=" `G찴S@07bj5%<ƧVmىuNy@JhǡP+ ?ZAx9!@ :7n@w`1o{6y%XrO\f`G8@!LjТG? au&=Ժ+ VHM zH.XEKɖ ' 7hY'fVZ j SIO8}CVWF@0s~V .<z T_ `RhX% 3;`!C(l9.=(7\riK01 WL$xJu(XuA'%.K0"q87$K+'dҬk)Pj#) @rDĸ v$Zbq. \(9uatRN` _V,NuppU{MeCrZ3bN`':r@]!X *޼Zf e(Ü3-z2%ބ1˙ 0(+ 'r,1eL1FMPq5db4R%^ 3ʸ@L/($ŀ( "D)QfI?@H&09a27ZA! .aNtA- oܨ ],!J@AcIaBs8arї:B%xo6r?яe\^T!j%J ТboSS9DPd@nTbAذ2 pPHtDXA/cA\sM°FtQ9p@!  %@K W|BJ^0.qEAlQ5e(k4aN.~\*RA7Z#( ##R*9 ͯ3:36s J!9̞@ (BQ jŎ%(a&;n"|Cs%006AkNTE; jH3ي:Lb`Ջ:h+@TT~z#FR2lL=w: 3T{3[&H*Ј@B1$@[KVm$M\]_` #XF.0vڠ8E):H& 4z.̨0 E/M\G x02~cȫQ'RccՒS'ǀA]M^HAB2х U\!.dO_y a +(R;2ZCC5- T1z!U.g̣oZ0 tlLP]\Д,^g^EF@Fx޶C2( 0sC+ ޷ }%W|Qw09XխFS.' Δ@̉: pF*Zц\bu1qBNjJ{AOkd&\c-0Hnє³#bMwMf҉AD0 fWš$#g@A1T0uWK<'Qy,^-m%(0/usEZ|~Ӷ'0@Ƨ X¡^f41TZ,4!`90TFu_C+-A?~%UX% c͝PT0.L3TA <U,^]h d $eWAAVe[ A @=CGTҌ8 oHtB@'L ,TjVVrX _P(XSad UZZ9{]NXL9EB7|' H@x C*\] B͡YVeHm"V1&20T,0=ȊH!&@mHK8PqH@G<CU_l˛]DD~Fj@;$,Z!/:dC&p.i`Fn19u9[Lʾ@@4jFٖza5 :T(Y!8@>dF8:VpB61D. @ EmRh;D B@@k~$dI+|0Xp\˘1"tj}5U vAF$,AF9ME.X@ ĮfJ%̊ieXnCt.8Hcv=@H@ngnD[C,#@h | 7G D,(C5&yKV~d픠Wa|CU:tҼ|<ܢIpuK@ͱ}"̀$$܈DEiL?@AD*kd*LGù)CC"]C00B@8:.q,EPF Y*B8H4`aÛY3j-B :<h%(c@፠3| f>hL%,C$FLr$PS2m&a>@YD,Cp}2A 9:&@'`CҐ$9F9 <֔A ,tw7l$??[ĒLB>A; =ȉ@fhX@2tU .mC+(L%شPDMXD/p9TQ}BBeNoDzv}TT$p'yEFTiQ-^ڂH? YLfZ7Z[iBJFǂ D BD#6D @BÉq4CD*Ց@y"BZVBIU\LZdgDŽy7 ܊:2Ą,)R* W99z p.Ю*x!@A spuO7(NH 4UH4F2(Ą@BC,*$2CwZF5px+h~2J%EAt7|L D]N\`<g12E+XDC" C/pZNi~ e7aƏyJLn,m AX,`@xC-{z_E(A(CRBQC)tD~ EwQ@tp E'Q'Bxy2D4@L/A"L t H^pc*}T9&%ŃƓFmރqԽH(0<9FPX -}AP9- /:,4CjkO8\bJ[A`&==}:f!-զ5h(b0v^{{Y @U5NgrZ`%(G9׊|uj0m5Җfksb@nT!n 2AH`EԚ22X?-}"N%5jA'. 3ϊ3he=醩':of> *놳?qĊ yƠ^HěC]֠0d`GdX4Ș O`̱$"ir#R 34# 6hZrrƶ/J LP#ZSp50HŠ3Tca(:0=̉̏Ȱ lΩÕP<ИB 㙳y# x 0xf #/ صh%KFB>f!\z/C74DR(  2sW],]m2צMk3^ߤM,cVЅ^@8D5|1I TP=3=DcP |U)0\[);Q #KHڧ:0 ?cEMU,Q[ "ƠkKˠ0x-],$-8ˀ s}/M;B4-Lɓw#B̠*Y8f#1.jNTe-mϽ! @b:ƪ2:VbuA:`N5˘ ԟpi?e{테![&ENg7 MV&]DBWxse|c LieoL,Ed (`! v\ `8Er<\JxQ)TBrԇ *LF1,t<1q50H5WD4GCkjFqhE*z! Dd&Q,-P)]`l8[@h BSҔ4%r i iq[)"`1 > =H\H#R)U&y)ƒW6 `ʂx;}@Gx7ro&p'Rbc$X$`0(ŋ0a0 ɂ%,) ܍p&am-JJHG ֊rȠ vV,d>uA"AaA%PAa hb|"T0̒*B՜,Yj1ˁЇ\%`Ϡ8Deя6"gdŨK+A 0  !g@^dCz@@sV\'` hARPK5*-q "i,n[c [M*?^Ё㡉2i` N ,ϸ ]-USO2s;" M^®rJ FQ-d#}Q/vDd,Z$(,pFfW$ $-AWn:mjI|JhB8N$& ȀA+2gT%Q=2[H 8DPdM`B[UdVk8npІ"lE'F29$-(q"O~k=D2Hm0_&@tЅϴ0 &ے:4E &f [!Gda @}%V5JkMܘb5~q83ppAbxDJXPc'Oܠ 䁢 8  Yz@ `7B@zľ1Hlb} h+<|G$bO-@KR11$&>x@0P'2`V)v9B  Q -ݬ5L⷏NLuP-RHdL6`C}8U(rKnNs[DXJMLGc!% @$A3@:t>@FCU|,u3Ρf=ưԢ |y_xqߖۭH d '1\D#^GO9 \!1D+2.Β.abD'(V2J>J.T9  " "c@GXN%T#l " /,' OE BD*HXZ֬*ƍ"ADkDg@D Dx Ρ,!l vd td'!" > 401d!1]Ndk8 f@p!6+kpdmjn!Jq Aflh!`3 " 6`fx\񑞎"ehB d aX` R! KzP%UD)$&@ $@ޠXeY 2̰d [M&wXGNpN  [B1J&F N@ @ N(38taGE@a (@lc!fb`:"(p4$L3Rn5DJ9a Rgh.O$v8@0!Z!(i _aaJb(h3/ah^/8hUE5Վ`(@G SLnJnLA$`*"Qx ~Kt' XZa-MSؠHf?}|EҎ'>X DE̐D`G-180 RZ;nNvSe! L3CAN-iG@"dzVV<\=` Ad"5P2vzH2(ƒ,/KMWMl2U8Mw/p@g2w)b'718 (@2$JlvRrGx! LuZN:`"f k JUBO^I@*D={(fS b?/bR?ڗDrr)L&~  r)+` Ò! r"+"A$/(<9@9i%{6UC;Kcs6g60Q B %lV_"2ʀup.Ǥ@lDd2J Pf)Pu r E~U! A'` ;u@.M!(&VFk5oSwN@h! 9n(^BJ.>Hℎ,!0S8 9u`w5k"\#^8@$la0?bJ(Of tGueM bցxtk!@Ra("r8 {Hn!XOAA%)ܨ,* &' :D'UU,o̍>Om6r X/"$8.[Hxb$/DC .8g)#aWi[ĆW1@nA 2ePay j"` *n!bp883 A9H@W t{B젗` +"M H?!h =+X+>\{" ` 4[2of~?{?{!NOM`!&tfb`[bsM `9wp2n  "k *^'_P"@FA98870 Πک S«)V0@?fba(1mjTl /b w@femd aqJ@R,Bv$V*  H$(mSgIV84PUNK$ 260<']y8^l" չ9n*8AedΠV81;,2*@$j@ \L2"vlGBL7O/f c!jE`MhS1q~7pȏ8>A*X(jErC.R„S+%B1_8<{t۟ Ĺ 00 ~{APFS \s}%^)b` L"FcæV*܉>N3f LVFJ^b %s*L,&g3HcKR/ON`1U,Kl}[Yji%#Td,K؂ U/ؽ|_v$b->/#E8dkPB^v@aX8ܶmH/x'!L>])Rra<@1by{ o&$i\7T oIɒ%7cʔ)0%=Sr`YreXYF ],APJ3 (='}^{R''dYc 0DlBIbl^d_0JR'b)Ȑ tTMj0 DB Jޔs#"7hqvP6is'`|7,~1|c oL0T$r7j+G1,4M0'tPIO ^)LsuUfxɃaRZ*t` :! {@'"0*sP ԤaGQ4Jhf  ))t"cD kS`fJovqSg\@ܠf@>F#*߸k%bIIszxR+5gJ4G+L<;n M>a $ <`fzW09砞`#*> `]BG\Z\?db+0 "AwѾA{Z)U@NOTPg;,B|.C[81Rlo@|RB('8(@ l%;^0H(ʾ$DÐ.R_L1 |=0pTU8Ʊ9@TH|P zeD U?iCwŃ:.P70-q B=: 0Ts{DrVU`PY*A`+v zr4ԣ2 >>01.bþ\œsV;Ljbd1ґW]%B<-(r9 Yy; R  'h1PK9> $0Hz춴Xj=rH%$%@ ▭e,5ԅ|$G(1&ͦĞc>L/0 X@0 Ђ5xmUpR? nIun&jdϨ DHG{RǮIF {E&.xSn о]DR"U/@YZ$Uq,I‹׎Ē4g$$I謑iq2PtA5P$a]s@lO@W@qHb>- "ˆj `M 1&} } ap{' Q e)AQ lmPaIsy\83<.!Ax)XBG)_$9TDoސn|-VdН%4FzaC,0=+lt^^®ְE 3 X}AEVpDA%%:14Ls{#n(% z^~pg.*( <9rκeKsX'ms%AVua=)MIѐ|]Ky픢i\4R)YRIrQII1Whթ@-wWud@$u"@K7d1DS,l ` Ԑ}!F D m@ E3kL.kA.x `<M[zUA `z ' { \{ P P B+W56!+4G}00/)Us)}Wޥ}}a44~"'|Qv#$av5"׃8 xL!,g@=`C27=a[8C 8b&wG zVE,z?0gI1@ ax) UPpd @P)q ] $ I0m$ z\Nȅ oAP脤1 Ik  WW5#˷| ie/#h.Gho~[q:W##F/+%c ` J%.BD W@02T B/ hkԴ/(e>"0?SX g R0e0Y-V2g r ḃ)7L3@  Fb PLW*Q  <ȏKȏ\oWGT ^zpj(pn=5VC`q|WP_2RAv*rXH2a P#7@A} B$2$Bb4F>u/ b7?Rd i 0zD$:'Qa g\ؕ¶^Pl)Aݐ ŃY@6ע@ ܀-PE)Q)x1L7gDdBZ)1XǙ_z z5app0%*!+/.qSYv/'h~Q}K|!]$C{Ia(/f/9{b/\Ce0;8p #Xs Xm`z%c pkF@ /WP4L0 DhnWPPoR<2 , MzMЄڄ\Xy5zvp k* >Z PG0gxh8(dS }}IIK; +*[B:ۓMEñNDϖz)&8EG Q`ƀ}P)akq  ) <8 k 0 zM4Z*?*pڰQ}}Ф¶x8Qy*0~hk"}%6),Y46Et&)9nI` D¦?3ߐr?=d: w*!`X(J4r:!mO$Ug@ob9P 0ڬ\zz wz +q)j3qS¦z:=b@X",M*!az;$t6wUg0  Q1b^F)2f"[/]WPi:l2XԀlxvƕMRLPQYnR/Z ҪzTp p;*v+5Q  <ƋG`y+[^3CL'C$J' pMBb Y 8l5@B_-WZ b>⨶ ;-}QԐ}Q0/Q#ok62NX˽N*4 ?zvωEA"aR&|;TRE#6ղ!6ttP>a4TOS u ȒcB6 ((K ` &x}VBC  $  ,\\˵+@czapƅ\'+ <`?M4/#T/.G}gv]5 s;/dWlS1^؁T +Nְ)/zֵw*1 Q0 w*l'm×Z$GTMJp_v pBݬ][ۙ ު  Q5g<2 4AMa$,6*1KART4 ]XTK9=SIbY#s'؂"ѻ}_}CtD P*;` l//x@}0`aop8^Ib)!ţ 3~MXp85P{\vBD}='$Ksit>@KMR Q[aN Ӗ%| .68PJd k v<3X8޵o^{ FʶʍQrI`}ǎsk[1 ֎#Wk@Y[*EKOEQ>AM~ g@ ?mV\!)a )zQ 5Ȱ( =8.]oƙ pa?vJr 5$` R(M?3@D4}-$$4ns؂->:(A썭t &b Akg_W ;vl/L[a( ̬i} I5Ws ]9>Qćlh|2iȷV#Ɔ9'EoRR8P49!Ѕ-)2B`nTjԬ\B% >}@JQuvkK<G , b ȝf; 4hL64i֧JsNgymʁt"RDjIȈK"oF*£#i::6`cN钣Š86i9Li!4 ,ɋ.[6ч6لlDMi!aɁ0BFp 5rʁ܁3؁ZҨmK)FFbb#K;ҷ޼|w^8z7_jio I#(H>`s.&RHR 6ِƪ[ecYB= ûQ{1N@l aT pl g}Gv1J-\Hզĥ-Kw-s͈^nV@joE/I'45" hf\p[d`66?)}ח pQbOyf_zآz뭮2=1Mq (Fs6m,m~{W^.p%`gVȡq=!ʥRQJB':]sPtK$;!,b+@@X  &41taG` _A`vNboz4.--+v]I6Awd\X3 sP7^;`@\8#%lPr=A8p9\4:ȡ(Bՠ T,DTpXbB`߱QJC ćb|؅U8B0;b('~u axml[ŵMu@ILp"N|]C<р7Ɏ-t>$SH(e%. D B)ND ERh•LldW3.`Af1 SrS,ӝƨrQ axF/7LdjF_.  L%rH #ФXDOX-p#g,!r,Z4R梁 F!8TfcD,M`%d+EbA0 ҁF,R"B=dmj69JQfp-(1fչd -:Pۓ}^%i Qm蚦3-4Ab$Xp :g8 +@Cl?eD3 A h+x0k` "L=A#x-*p[7vnf8 _" }suLKH r=s vri|g1/# DM#K b5tX.s-o8 @i+M~f }MS@DbŰ 8A O|ゴRw\A8*Rɾ-=YӎEA @ߐzqI rP.S|#l@b2-<U@6}׮>hKBP '6s ա| ^솁=vFVLjJ/MRчo1S7%0 %oA~Za i$8Y'D wz1oG4(Д ct~,)B?س +YۂѰX_ $jWha+Vma躵}ʼn8x K0BL+g7I$< $:S Xc.>WiP*O]С $\7}LYSCFT kLgB DX3Pw^8ֱlD߁!X `b^u┊!n78>\ d KHnO@|H+$o 8堄CJ j{b|3H˳ nM<,6H8ȥZ3 .ePb8;8*1y{:s8py14z7A;Ѽѣ: 9`.#E<@'37C 9G 9#@=؆6p6<`2> CEu*x*8j@,A{y($1 Bs)p)B.!hQ/0+2!QKco ~j: [+ `h'<`|V x$,G@UK`@5[3M|hBD١~@(KjTTeU@rGKaTc#00.Y>4Z[ƿ`A)#spFc58X@ʈ18ph`0!h! 55#qKF6Xh ŪQل=S`!pXPbX+Y1 _ ,2 Q eQK/$H|GKǣ 6雤h.@ȁrIU(8 jx4ȏ'.H@W#x4a%Z8, )*"E@Yw@!PB(@8U"Ҧtɒ{`F8 L#=P"򧁰``0`!+C8A Vqz@ˆ)"bXQ y W68G"NL8 MxzA& H x+M&Ϗ`$j0"&<4_)7"'0Ё4tЬ*ZнF=A9S ~Z AE OG R(# y+Kbn E( i8"\bPҁ0Z ȥ$X".'H%qOV+V |/:= &?zͭEW]Զj j95 :(s*kae8Le)y臝=W }HIm3b>>1P(U:>f-d8W{~.?9K>TM@^q-F~th* K!HB#5W捊%#n@z+A[{FԅБ8-ab[Ė*[xX3`rkjNZm9tC!aH$ ~ T c#ԛ#B ^Y3/ߖqTxd$k $ç5xpV K;WooRc^o:bÆj;C ؃8cF\_ l5[zj P%Ѓ(&'Z89 ^KN#.Kp5kpHהX ]K \[Bc9؎0E:}#O:fcVx^J[|a!bA؃b,WeJP7ZaSRTpa _T1x蒚ꪪ+YzFs2p!Æ>\9$p@"Pt oKljds @& y `9@KiB*u*ժ Zk#1`#ұ]R 0# |kIn+K=oFXr;%Y62\@|db`#lI۳67ڱ%ѢMÁd $ÍtQxfjN ԡ!y> '@9ҿ`kK#"4VÏP5Y84`LZm}o0ŜF+ȔJa0)Z\%2(-a2(eV@^A4P DAc̈́?c,D 3&TH5\iX$@ѐB#@3""_F2 - %st;P2} F~N4bZGaJ1~ FR2qYZ &*2!)R@@8$P@,! 9xBAc&P, 7,TT6tC,\Y0ٱ,$DI,&mrް[`a2$ @ %E>鲹C" pJt"8@ @}AXz0t-Y@eBStK~R`\@˴0AְFV4v<`1! @4Z Mx d-dPZ|i `0\cAxO |AQ, xd%,j2`)XF6QY|fVCnL',[yT@El0z%C HD/oi@08zQ!|?ø)Vhbc@R礁`8A0qa\[c9d0Z "|; iOh)-6FAq/YS HG`pB :T7  D 3 ,bx97`$[900o&p PsKF^҂(H)H+1W*bX+`<[lJ.c|99ΚrRfdC{e/> * D°2  ېm g [GnSbt8 $vԁ 6 *@9PVS:2TB$e+)s\ enBn` gH-@iU:7Ƒb00P* ŽiX^C)@e?@j5vss5H0@@`:5Pmߐ1tx!(ƲV) .C<FLIP%.a#X ɀR6 CŌ.p@#k`GW 4f>i+*߳!P=-nKMdP8Щě-_Acܪq bOC $dZ?ZJ5!5>#$VOP)9D C  +ZphR##E"\ X\a6TO5݀i`"Xq /`Ł:`5 Ic&!F$1 Ir\%b(ÜX p0X*(_)Vn󶦀#^[Zs]+ |#Iow!peX`#V$AP Dhg*4H,^ Ez&C`1ETAC´_EAHP<+ZӷK%d[\SĎlK<]@ֵɉuH $5|B@w-yGC@B@QUBAOe7@C; DbY_TU6AO@|5 BA L@à+l xEaZKȄˑKvH- XD,;@ϴ@HGd\ MLv0)UV4U=̓3C" )UBB+(]HA$VBLG%<uXP;U @I)|#|A+e[h0EWyUEˬM );!E̗`E{ĦL$nL@+)C.9+d~v|oȝibCx9 ͂@"3У9ɴBJ;E V`Zd- b1؈~.FqF TCv4PF @Df<`FF"H冔X ) @&g-$c(KCtc C,(2JEH,@@?Ba (\|C<^B}|DP}`(z9A$ ( 0Mj-g>S('BWc!9.8 ׻!HEM4@tCtl`4jRhţC?|ӚXaL-l[ʨ^4D!@ y^D)K# D>P3/pF p܀KzR|tD`G3.26B$k|Fc4`|C<\$ӹ9΀Jl%*x-~*C1A" 8 `(@BE)O0 @ H֢ؗ1Έ(AόB5p@n5dB;=Ȁ l}8}H4"a$8t;t oBbM+P?h@ * 8K/F88~@4A &QX2vrŨƥ Y4L,/|Bc((C*6$4)(uDCb:] A/#:MA\o| Ifl5| ( Isf0;#BDUBt NhU aS~tH%`0XE<1.Dg!<lYb˟d՝  V'#Do(:CfN/ M8w4.+uȀL |a[F6@ )Lk04šM -QJ \h`kZʥ8Eȸ%\r$ֻA@!طkS/-K] i38C"_p#DlI~ɑL +3TC>L`2Xr#QzE?!ݏ@@-dA™gt@'S (+uҜ̀h 9-r MO;Ň;.|$T -C1 )@B.D @tϗ(AX/DbwowKIEjUʃ<@U(PC(C tB,A6`/ 8KraM`b@u]d9D88c% |9<4lA ,K&ϼ'7DψÙR7CtL+4|YRh/C},@2􁺰7<,e/ĮLg <u MO|3IYb9wA"Ln|W=ϱWL9xxTc; `6|1FM欏A׃=@@A(4p4 ;.i9dI'QQŏl`̕+(a:kN%WkV٪0 H+ds36ða*UaX\1)aoCʡ$ Cp1 $ TXBDA_8v7,ڡ-<{vmvY9M]bUs*PLwNŵP'DtE @ Ux (x ?}"Ks1r+or}ochV럐n!."A(\IBr!80BhB@l ULB!b5 #f&6jE ,HjFn1e)`E."FN'B^ 5(Њ*lf:N 97xC#Cbd W- B3dǵ""C YwŅSd4"L!aՐ (za.H(&.QrILTe*'hj.&aaH@S BHkE7! Tȧ  8'+6m#TN?= `&K-H ~!'d(FRL$YL!bY{b*$HȈ.g L"($4HbV)@5u…oz9AZr f@,&↤etzƭre ` h:p0@(D!V')2R"@9J [(R!O޶j Xf(&Isԑi$IBӀ b@6`@ 9xc 曱搌! pH y\~Sju*%fB2"ݣw*I>GS D}Mx! I.N0qAx%d "rߐd թah'Έ2dEi0[QBHXPrAh@H58P3ȱ <ӎ@$@5'h HpʑH!$cX`#\۞.VxIJ0~Xb}t E,q:O|1+Eo8ZgC>Tz1 a;B[)xpCΰr)hAq@Y2R".a8P@O]Z%2u X0bI dbtM$(Z T<0YS0aTa 7F01>)b8tOp   T!V 07܀⠆@!?g)TA1Rتw@+Xp(@Б  `TGA `dRFv,XS>U$kX4MHG⦞I@,i 1oxLkmH _`oHч? Z| B TNJM R `J D'F$@3 KADW$G Hmsb$@*@Lt waB $FK. d+K/XF>Yx; dV[ bA@! EM 1U2 &h!+`K @N(,b371$. *Q2xP htb pq1Cֱ A J@(t<& 06s4Ŗ '5qM8`þK`(>J X,x 84< Yjh@uBf40)=$$`KbH'F@0$#-E@>YBwp }XHa3H X@Dqz9&]@`NuH̩GlJ4.pc)AUOfd #ܸ7@aśK׷E5ɢ{ VXc(eOkߣ7Ct:F bLgI5}FD,)UCTŎH%٤rad .BC Ʀl)bl\OYD}8E-ג!\Q Vm@V`nRaoԃN@,$@8)sN+<D2JO 8$ fȓNaKb'k(Td !JnS  bX!t`gk$v4Ʀ @.F! !s h J 8)`@htB 6.f@(O0  "1G%!'g$!JFAJgLA@RJ3֡  p @UpT|0$a`GD.bB1 TG=6i NN`;@?&;>Ӕ!(Z bdHG !; ,AOH/Ir$QBU31$dKYA**,gXAL8w֡!An"`D' GG-DH;4V!;0` ( %@<&\CktYXAVu $I/%Me6q) (H/Cƞ 4=LTVb3$H@BvfJ2{2/1z!,lb\J6!Ą(@Dt hv$t.n4 HE3D.AQ 5O AA6><.R0Ak#KЮk Gc0d-$`,`nX6ioA1QqX:.v105CsBBn*J,d BMus9!@BϪg|ub "QX H>! Q la>!mEx @NڴazONzaЗ QV РhNa*6`P@<4lA\1nK'n6Kd@  }"m7 IDTG'ec_PFzt'@! fQA0sHHs _ib A >PXYohA44ƌإ@`(}MQ$a8B.'j ֪(- r\(~}L.gtX@DKC8C%$(.! `k .`"0K!.poC M8w0`aYB@b@ 9]  |t@Ae01ll$ ^ʈ TrTe7c ޮ! 7: 2\o@G znC`2&c^rH|o#1X7ЊoI P "X -A Z4B eiFI7SrHjDZ6+ %]]Q4e *@Q29.Ё1"vM^t@lA>``G7BoJnr a@`P*t)؄$!u!P[D~8 XI` D|ɒdqM*pemw-H'hVZ%fx`y# @[& G``BMxCc%x&s#5A* 6@F 1.10Gޘ$7 qNA˰dA=`K ih5Sh)Λ3(* \C/B,&좧#L 8ƓwV¡: wAh1AXI/hd bzaEoj\.!<:сLxם6!Yr7@x#Ui3@&QʈYhx\$%/[hc5y\ns\Tr4Ya>*ʩi1`|\)/ľaٸ•38 nC\8(KTq`fXEN` ?W%$[d vGc j@3ԧp ;iaAuQ/^W$sb_#__`c )@m3Rp$Q/ 0D0 t qHqW{  p%$rER$wճ6Fn1+2C$! P ; b TwQ/IK-% J_ @ [vJ0 `Du/uQЄqJ%q@',qK*Z@ ' qnC-ƒQ$k0Ld^xQVhbP` Ega.,6iH pjBXhpƒ /Bk{׍JQXdKvLq% _.7g`owŏVmuQ!y/I gVKm0aFB'pPpxJe 5 '@  iS`P0p ` 06p_ QPf3 @+%a -Cm 3GPƐ~J'p5E}XohP@Ph a0 3po i8؂@Q uπ?dg`.Jw/b /q|QF&&,s Kw`X)pxIP@B' =s0xǁ ' PmdyA(s"Y/bu`%`悈 k/guo) StQTt5xvP@^3= ,oPOٍc&,` @7qaH [ᩣ0@y0 7o0Acd_` r`a BGe"JdY:40ӣ/3H4  գ c *>kyQՍ0V5eb g `kbÜ@2QGsByc r"2,a3  vuJ 쒠=  ze  TtI( ƃ8 A$P o@dYNa aPNI הM;RR]-y_b*d)1Y%K9 m0Ъ ;j)p,Ld/ m E658 ?` f 0'io ]oh`/_q YQFt',!.bЕqPdm_Qϰ#Lڧ SFFp'uA#_ EgFPio"Qi/lТ{\\+mX&i o@Ys4b V#(<6F` wE@ EQ< d5U ߠ ~PNrp BcYA9egSVR JiQD4 0C;j1"t<}) xQ`  @hr_ ܀Fި!`A&F{P @[ (RքL9 B gns`lDxKD+p$0E !0pBj_ PNYNbKhp|U&w QX1zkA,2PTJ}ŏ@ -ؼ'űR-Ppm ? +F ulX d z8Y`gtn/PTH.w,<a@Iƣ# 8 0,L `^`5Kb- [nK e(eJ)-G3X;FCxubkk,Qjb 6h _ j"C  eyJDA8j3<+| @ ? !e-0`- H @@F 8=;/2Z0b}gd b pc X  ]ܱ} }PgY_Vr`&/ \DloCQ` 7{!K 0a5\g ^s9͏ "~P ;` nh mDs*>&1`{IS2RjzzoFd2jQV gou06{`".@a )5t0$b#֋"` =F ;8ಋǷa`\q~1P$% 0Eٍ BÙ0mP@5^ݣf.lVj8@l -X-N ~h Qԋ'ʮtF:"P$'Q̓y~Af yk1Gg hp\|Q; Qf& 2 h ?ݱe\Šy%[ p5)05ze5dآ1 w2q,A@01,=joKb r Tm/Y{Q.z[)  sKQN fbSKZK[PP#b} Wp Xb/Kg>6F*at oPɣH#b &+բ$iH3_]j4w $7UKKu ' w!^ѬK%@/E>"\ TSb^ gx"'J`p:pC.? >#c.MѮ>y"#W9 7/¯/(u0q$msX֢mrX ` k4a 5''=sQ?tVC{kqz\:' ts Aݨ Zx]K1XN_Uy}}n-m I)AR$QIUhPM G^ `S׀;31 2 w%\rrR0F. \mVpm5gP!XE-B(E$YI0-mpM..(nɳI5!FOXdy3}ٕd*0b`hSDBFl}C!^r` y0-8A>z2J7]ME# 'Ns:msv ^+9Hs 'q7p:ӵo0e@:aCO0 U(;A~&8 # `W%"xM ϗP2b[@Mނ8l &#tę*aFocKMzKpB HÞq!0]g#8- (` ,t9Hxbhbi68, :+#Tj )/Ȓ0[!oȫ$K9l]Ȕhە(DŨK~p(dF&WvJZRi !K(RXr-B>h4c*9cx@=>+aR>bʕʈh$Tfw5C ZV3!nh !d$uAXÒ"RK~xYqx&"5j#!Hd x01~9)="6a! ,? H*\ȰÇ#JHŋ%aȱǏ CIɓ(S\ɲ˗0cʜI͛8sɳϔ"IѣH*]ʴ)Π3pJիXjʕ`LQuKٳhӪ`ԃSgKݻxlAz Lao+^̸ CU˘3MϠC(ӨS2h"Tհc˞@δs[ tJē+_|%УKNسkνËOyЈɪO~Ͽ'`&qF(!BXBلfv_{(x8(j`,8.(cp+h㍴}a"A;Ԣ!8=W Ae"I aI3Q"VBTz)q&xd=#,%B@%qw嚀6'4AP扖X{F-w@&|+2A [BR@vè?"=V@٘!Wj:P [lzF;QJ:w AIXS$ͣ=y0ӡ@gC6-3P3! -^2'Yj[U X+)@!rB~ڭb|Y<0QT'ĝ4ȫ m|Pe@ta 'A͘pS;QkMtG`MY cyO;ͫ D>S@SLAp-BS/>5=5^&~%-P=A6D ~ s>苷A( $g/༥* d g|^1  az$mn<D 1)׾NM$^4}>Ɇ F U{/4,k2M~!3JӺ=(fɩGd#~X6fXo!'S@48a*3)Df N0m~\@]:^mb 4?dH1P'J c!hm"BGqPW3DR&ak ,&6*#^@l6jV*VDo@?Blc2P7;*DoD84٧[* H|-Y>Ɂhi $RDIA$\Z|,A&gke.[F$WJP (BHJ]rxl",ɐZ=SpIg&p9`"xԗ GWYIj"d9 .| 9@BhJDb3 e e=7S .cD"guCfY'!1Ѓ75H:hAl뎻D!G $k^%ii;* ʼnƃ hjcѦQښ@Cm!4r#!$TA1TiDxW'NtWb=$ρ/5+ ByF FQNBIb%)RJC @c4m Vwf*{"+)g-v.JFg;DnU'R CZ-Lj HE8ڲH #FSX KO7e] }hMThP+ ,DR lԔ"lC^|%C 9PabWp7RWADHƴ: QQ^u F̎0ZVaB3W-yll&䯁w2ZF\UqBށTx7N>P"C nf[C`ieܣi#鯒 ǖ!3 _V5rrW`fo} 4n : &p3M!Vׅvб]Vl]+D@g9f{ ٖǒ՝s OHؐDW@{i )[=q ҘZ m| qv̄߿xY̰MPBhgBA%ChL߅N7@-̄pͨ>nLA\Bn+H &H!DŽu*̈́ 4k$SlAʾ/#>_FDm re>B`!}DQ?OH&W!.J5ZsGH}DŽ0)N'ue+WDKv$GHb/}eT&y%79|7x"WwYdD ;j/7p7!kG`~QgU^WTSW"a qA>;+8 O.1{xmhZ2)yGYgdBbyW//P;.rAPIb3}~P`Rw*pDa:P4S]FZ9 w1~#xWvc?:Ya4Q "J2#Q~$S'Og ; d !eh1zAsI g"FX%At*E`$F؊1  qQwndeŁ/0:"0j0jp2#1 SP.)̅ra? b@H$ aI 3GXZR{s6rBXYC2X(D#q 6S7r+d-S0$0.%H(=wq'P1'7'e q )rXf"C4A fpG 1  &ʅ 0 *p+5h9`\(Q; oFo֔c7YPfLS$  v H&q oby*<$}JjjKI 9jИUS/)p0@0IQ4I-P;\ep s #"oQK I%xihi`pS@@0]q Q1, nzdgMƑ8a!qdQ9%J\%ZQ1 2Jw'j~L @ U#c9^6Zut pb ))@;*0mzap!d9#! wOjÐy}׉ :ʦ qyq z aU4 fJ5 "` Y 7"}T:"uQy9+ʥAq5@z Ċ!` iZ i4z$:k o0p( a`UA(smw Hf)np +1'p J:6*[ kjlJl+ * 0**(*:  *ڮaEDaW q':kjipb!*a @JPoBC)+[ba 1FX: 5p!jƨ]U[ř#zfQZдj+?~[t'{`}A) E[DK8;I !t#b41 { ʢS}Pb "z9N ;? kx+g0ȕFw6Iuՠa aW+pDr9:6.%ś;X ag9`ۦ9q@O[\@p+| YY"$!!/P|$t+$H 0 X߁ ++wlPK|nRj QVQ8*E['D_MD>@^"ў} q Yt|ZWWd :PE1I#*X)4CQ q h=5[~qn+0v>(] aR APm령 QVL]0%z٦9U ▣R(I +  k 5ul5K 5@ 4%C j7Qf0+2j<UP4!4zAJ6V<+Ex$x+K6μ#]+1ڜ yӋh7h/DM %v2- k@)6 !? <aF& D3 !#A)r}2('TbA`cqh ]%jK<MOk* T \=z++ZA+=I\"VFZAq@ %!MֵzaEv]5 J][w2eQ.*򸦚Y[L ! H 7 ,qԉpLn8ܡ mz ,RP*On0kZ o1pЦ=1= ) N љ K!QDjw  1!$ΚJ*_ | {/ τ dPƺ Ѣ0 [* Ja%#ڶz6I %b͠|[1 [Ejݑ*" eKAh~JsjDk 6 Jq0>qY*a}S:Q :rz>-\JNS˼(mV-QE~d0!|I@ q8{Hz[lN1JYNWz>I%[;s{j}t;: n -93:#1Q=do|O 1q}qO?Fh01\'MN̟9[ Q!㮟IN!a'Ѳn'6`d<'*^ N0x&Г@` -.BwxE E$YI)UdK1eΤYM9u"dPָw(8oȔ"SRfrK>A4!T9cgI3&?'0#̈\AlaL,܋{"wQ᳉/fcȑ%O& )dqD2R6 SA/ I).DS $=tU^5B@ wŏ'F嗞Sh:lHQ!p; @]=@"!'@@i?( / !@h/@D,.zA8CFsqG{Bi4oO ORtȊLpne@E[K  ,L/,HEH2K2sO>OjavrC hH\h ]+ !.fCn~1!LT@)-@L%C("5P[-Ҥf!%Ub5XdF TX(H M5 4Fk#NI5Y2jօNˠ΋"NnD4U V)2px` ViT&E#oLK1YE0)w!|Fxb!0#fhfsh(>x4K[zY^X]&AilE~AEBFiV{*iXh<;:L8kE_$W>id7Bf`#|r}Ƒhtn2p(')q_haYE!~xp$cq{c3%%!J5"lS Ёi؅FeP؇s͚LF<6 :zaw}{$|+ƔJ8UBbʼnDp Y>>vSXƷt@ fP9BK0ǜRM;G~iHҌ1ff`Elg!DcrpP3|LO+xD$ҤIqpnHQ K"&)pu" e6fgCF81%=YHxEA%:ML4#tyShLѨ0dLi 5Rdrd'=G0q'Z ,C% )H @P7]ӈ!I`t pǒ S%|h^)UfFqoS$˅̅@j\d D Lidg;XCQ@8%QaŲ(~$Ȗ402,0zqQHNTt\@7F=-%/ՠd4"4dͳ$XF?WJ'-B"ejS@T,I4]V.|`I!N'"vi8SU iAĪ*Xj4b `n]i+BFt BH t!AV`C[Y ,yzB&)N?R}jF6PKoW3|K^.$ i PȅRų, ӫA7ӥ~boB֦1F*<!&ʴIWԈҀ.hV#ԈSr'M$n Ӽ;P+ޖX!C3SC$-C$7uxUYjg_\ X5g=31yp'(QKѠs%F 1^laI JJ!#pE5&sÆ@ T"-!/$LbXNSKF .P&&} $"Rbe&%@DjfLg&Av,z.!LT UsSMI2[ ,Y^۴x!4Zgׂi`k5W^F%RHf`H1Lg cdSK WG#(N4EF`,È ]ɘ}o|dYAJ9&SyW-znEBn&I'W`p Qys[wM:(%Dj Acjbh}RIj$M"FtqF7&0q^zY3[71:[?ΧjaoSK 骑Q 2 }.&uI4p ;&~x#d Qfڑ)Ĕy:d4 g1$ +Z wRo>tO;/LxCn|=`вL1@/I+vKH)(h)H`{PO DH%%y|Cho6Sϓ|Hd&Iy󞑈KƲ: )[/%C%I=ʽK+38(c晽)@؞)\9A̾ɺ# {BLY9(ژ?u0ѨBk1DiɆ.".J""7V!l 42ah^RB@pB`d "i' B,RZÓ } c ֡aIõ'Cb!-A:& 1Wľ2"ع@&P2<6ˑp(L:Z R!8_c̓*,cYcS0?lL:04Fo#a[F~;` E3(A>>*CW< 2jC"uGP; EĔA0=׃pƈj̤CBl2ZȜj^B0ɛ)kǓ08JQI)z:pF)ۗ"|~qHE 8? H ) ${D1i8șGFx@0(1ÐWx 7o2K\ >`Bz0P-d'rd(KY0? 0 D'xFNb{ : gd#"ɈԈYK[͓x?xJ2" 8Ȼ>L T)5(bN KVs4 >OHKBlBP+aOʒX aʛ.b3*QkvΙiľL<O[` CSKDѤ, @ OUx L8@JRcrQk**,M\R<-ZGà d t DE/ R؆MTPPSSIj+ҳ0\9U 7SS0BYc!v;X@ ]=Ԛ`T]\Uh& % =ZŪRH& #3Ғh8,V҅Lp] S8FSTTHX֌LDgMtrȉX$sM |@+8HPȖ1+zPW-]B Mn|'0 VNMYjuXh WNu }QnkN fhOFN/^\X`,)>ܺh\F+Zn@f d-b:0dm`qSk(`cFG Bp/TpG8yrJYƔxO4G]2;^ۮYs'xOxjE:F<W8.M aF䦈`F  ՑGL (Mp\=~my@dluxuZGZGw N1lU:0_hf Kz^ֱbzI$nw$w#H_wb3| ׈>ʦB^ r# `DUu) 呸'5xw kֈt?=_6 O fcE@j}yJ7ve% ሞ%'1 ۲Ҍ^qޤ k0@D/3 h:&?kO/T3a H1@Mp30,WGQ峡ox`:`0HuC^_"BqcΉaMb` 2^%f[Hp,O?gױz6LC٧nLw_H@Oah 2/1D( aʔ#Ȑ"C @@0p)TN@3 Qx)0A6 >,G<:)ԨRRj*֨Z;+ذbz)C.5E@9Cw@5 27Ӧ/b*N^T$T%Yw bWuLSf4k gES{|6ܺwC`@;RV`n4ҧK@[BH^4k;>B '4C*PaWOq& f !Ad @0GULIZ6p NFۀ)" 铂par-(1"AVBAh ֏\\\Uwt z @H G $`#I9X2K7i@(cRW6l L6( (^7mo2:wqY3@? bAG\б@H=уg@0 %Uw%_YUT ҳa%@2|. T!)ZQUS.a%(pԗ ;P i DE$oS0#GP%!y a&@s8-P!Y1ma-S-C )Tى"* PdUjF 28P6/ E9лUEKBYdAlGZ/BW$$,3T\Up>@;PZXzۑ-,b~elQ`BAI zqw@If!1/';F`@SP@gRҴA6:޾f E-}XF?|0;/aQB UH\ '``QT*~UYNmi 0<b [#GH%ÀZY^T$$ C !H6C - E7^Hs-C8Nt$W͂_i=)r)@# Q" ö㿡H`K8) $Ȅ" @(bRDE (&zaB0zQI^BRqo bơ".veUb4d" Ȫb@?z d$R8A%y5RS AGف@}' IGq@L2 J& r(@%Ѝ%á JAny&s]rHa1f8d,=yHV-9@눐q"UxGj+naHƚOu *$U=}U ة t%t'vhSE4CJT GRĐr@uD>j|#Mu ֠3E,iBΩHo0@pӏ n8CZe'<OJe0! @hB8/=:LQƱ.$䐈:W5ݘ ;K_lV ]FNZ:43Bgޅ3`3Ck1Й$ HXzۃR$\x`\+W 24 @Ua@@PY#ÒHt Atѕ {$a V`D>UV *fp2萔[E~q᢯r qTkd~+viܼ!]|,6U|j$5y"X#dbTF{,|"QЉ35(0|EZ0@? 8Rdq`WjBWyMPr˺H1ݟ@ErIRAXq1f>9FH=aY y Z*.?dũLBMF1@[PC"]?0oיIQ̙/B?6D %ln4X@xHӫQXU5 B["D-ěՋUśHH?x$)AAthPfQa~Iy!DR;Q[WMQ@Q@ r(}CP@X H/$D]@XxڞEbU\$"^4@[B{54G]l@=E*sU2D!!C[a G%iF|#P $^b`}aBL`!aEը!NT5@ "XyD֌ hꑞn0B]F $JڐU!"8B^Ez @$}sA-Aޏ&Tv5Ă] @! aC!! T@H!ARUĴpeKH+FhiH)O!H݁TNPCP!HJA@ρ cB"Dq:m\mpS@JE(T@%StHX`!p ꩞l&tdBH,NEd!̤@@I #@AD]})EbUd@ǩT EVD!F$p8BfI@'E#NE @VRvN,H+l%6 $,6̕CģPE`nH#8EI;dVMT>sD{Y `H'T&Ahs~k<M&"E! A|Dޡ}I<DH,Ƭ *H$>q%kY@ub+D+՘ @ lBz Dd-`%D=t-C= m@+2#T$\eb3 &ġ )w/# .Cvpa!rŨ 5VDt4$*rxE 'ƮAGp(W@, Da DD#4MD D2XXeBQ^BQ0E~DT~qր-SB7J'aHJBkO#8Y%A@$m]vTp"薓¶F., ?JA}"$Vz!\E$V%Bv mHV"*>g0klsdHO=R-C VD#@cD%,h&AFiQԈ@HR!-KT@MmZ /Y%H W+0@@Aلpe:- D 2 .AA8rHQ4(™)PAlPجK8dğ@NF6x BhT8C D8I7zFDzoZ_]G/kQ \-BPĎ#@#zdH A? Gd BtU%[ĜiEֆ-q8ll ],y^px\sV<|ZnÈ.̮7wI(Aʚ EIobht@PNHLYƮ [Bd@> Q D)T,ȂAL.HG?D^MP\toDg0rû "rbUt h`0^XH0U+_#T@8Etw\DyMH(qÏ D0E(SxAP8a NJemMA>ĞX;#D NW A$@v @@Ԫ@hAW@DH !}с3 =N/X}Bm2NɌWn`4(7A]hR]Olt\l ,pC @h^f;zfZE D1B6$Z6h B4P\qEK`hV EllYr` nݮ^jhFsH(x.b`0L/F3m4P m#16S`* /= 9Ɇ` 􄭡(XȖ=ِ7k6jPx#/A݇8: PAbi85PH c/n٥)Շ XQ><%kxnzZoHݤR 8 )@S M؅:ҹ6hv\(*r3`J8rԙ!E6VYizĵ!١3ШfdZ@(lW67ޜ>z(&" lY@u2BC#xUCP BnHp+!̌B8r, )(YBQΦl6T BJ CHkVkX7Ȣ{a @/)+M&dG)eR;B 3F\R:D&^P@FVI |@ȇ"Αм@JQL^ٽ@ #t@JOj`K"(:B=4P 8Ša4UIf80h`m%l IGg rIb͇W@ aC,ڡG0M@gN’C)8(n~V6Ue"P$7W 0@rfL{Z$8bY @*;bJL0:ÆT`b D0FH !C E8YG>Gaa T T k0zATW b#yzO @7`m*^k Mjb)đ ĩ P!d&GtapH!@!@40d%vK2X HaBR d(0]id8IO`"f!@Y  k?.)$§G6>i Gqj1 ʀ،%ڑ%׀K t`q0 @d*S* ^Gز\Ǩ?|e ߛPG5dRʟ iX#Qr Uw"j|@* df  ! CfAv9@3 !~%Qٝ, P` ZcJf"L5`}BN>s-,lb3 C2(Z4$ al9P " a!@w kPitd³4&D$d ᦊˇu @#@@P qA0 S=D!kC#! k `,#J@6 7$}CdV. r5!,!@Ld!1`A/%XxV([FtĄ'y!2t Rm6e s!B**!1r dTF%.f·&/#i +#f "tOblM bjN8y!NlNB!PL l"j:BW"!!v 0\%ب&`a B*QnI(S"\c \AgJ% v6`^'dv`S !xG" G N32p'H!c*>${:ƾ뤼2%fI& r2Ȯj !"GFex#f K*L"d4`&#F!2BeBr !У&#j (~dd!bA `{j ¯I@;(!.H((;"!V‰$zaC AA",n­cÑ­ B"vE 3"f]pBb"ld @ /&D1`2&cNaNz$~!4|J(FLБ%2@((V*!,ɣC 3D`O7"_bLp$Stۼ &v li`Bj ;—f`l0` `l ` i#|@"! %V^!| @?BH8h#bF&*9ɥ 'BD'B}b~Bb 1C^dOaP+*\N`K,f!0b !FF kh3րcN !$B+Jk '@d !f( S=!%<!b I b# /!8&R ٢S.rjl0/#eLtTAB?Lt'#&m`M@V2!2X2`HA%:"Mnn,LP)/`#k +(,Ԭehr|C,6Ѐ`ph8d=!BR!-Z#g\#!j^C,n.G s ` Ƒ @J z˻CSG*|>L0@$Jt}`Lm,iTHS BkcFP+fbdjaQ5(6"PQtpjAf#8C9R` rjAh>%l ̳!N? |:o8HU!Aӗ^jY3"A)")VV$4⛢u>TK*`aZp[KܤC96&t" (RB*^_Dgo >ip#t21?!)0#rH Q{c<$0w. N«* ҫIȠz zcMC`|6O 0 2Z Yb j ؀" 6,R;XR$9 !!jf! rj(̖#>#f9">W fM Ѥ`2b2!o7#P@o@0"pq%dB*K9Z* B u)6u[F!#x  —#ƈDP {cJʥ@*QdH`+(Dtv"6PNJg 0!G n3Ĉ83&ΌL} ĶF-hǃv>l "MmCpPs`s%!^3[»OR75 8wY``&t lѢY,68ˁP!ucE@e b1h sc0t.h6GԌN u{,B` j2tc;Bp#B0cYIJzE!Ex>!R ! r bUHڡb*34hj O l.$n;?rMT p9@Π(*Ce'*E[HG`Sbweg^pCIa9Ƕ#^b|+KI!n}סNt#f@?brDfRa3+@\ g\I\=3@TCʇ_jb2|Pb +!fn w ! %AT##B}3n @-ax p"6{ jU=ouY>䙀aBv"'R>"#q Zo~\v+K&RU ͍;b/-t57tf"-q!GH`$F`ʙ620ƍ2VKLFZ:Bڈ2%*yQi"LR͠ h0GfP/+1r $FT1ؔ QV9*@@F^RZM1z)8nు5dBeg~P>i?~3‚ |c`FreDm L1>ݶQ@yB0_Gf!g@GFDњ mCcQ9 QlŤ 6sR td.nD@@Ta"WEU3]Q- @?5JVUGCet FU G@-|g8b]ؠH ]j4H@=UZR,ҡmi(UFMv1w0#?DF@9Q+*2 :lt]F- @#Jxc! J6{}> FɲyQAD@!@"m0&DFnd!0D@f8kԪB8 %A`1!dF;gD8$Akt%SxEN4ɖS 3sqԟQ!ak@GH6Jyg$@@ LI@T$#8%0Zf1C,3D%K?Qpy_"u4o>|(h@! cpefгjYF>Q`~dכ%Wi^3,roO2PA(㒇@iˮ NJ40>K#P8L>*AR8p@јbdQ |P㐅`#2(L dlb3 u ld-7bXE؄X&$ngBD>W`dU5 ``?ֲ0| Zx J汦0"Bܰ69hP6< qhypXb+\.p &JFd@UiS0T. 5)!"Ym2ߡ8(bL\sQNccTC$)]CK Vn#1FhTf4HJާE,ƘMʐvĀ؎O*> f8OOQ c*wpZ93P"F|̓=\R2lxR@s^br$\8(H@_0 .0P(Q@ ыL@ P0Hc0ab@ %b#t %1c# 1F4Rz1( PT!=2g [V2e-xE8yV} AiR%47H773?nt`fR,fN=? 0c)9lxפWY)CR aL4!==q@E*x+@WL6RX'NcQmV ǀE 840 1 ` O} G$oݱ1~a"0@a'W!6@9SQ @Y@@4!k2cC&8 JDF"7 Ix^}t!tHvbcxN#@$A-OJx  k %5H 88HGVlع:8"3' ܃+ }`  CU%ar9n(3@*@J( ;VVj A 6>%Sr2RZ D QqVI\g:plĕJ1 :y!d,bLK :D0~)? 7 -PS. 6>@5*0arz5U_Qg Hmpm&;b&uav!?d} C$VTI5"$zPEaQuρ^Gs&JFP]r}V(!m|HPeq.IN gΰQt*b` CIh 3E@][rT{`,Û` Q$:xc\*YE2tp8+X!A2lC4!mbbA)A~AQ1A/qXAor0qxzʰ! P.+d]:(jcN@r F2Nydq#IU1 ^xfLAo+7V^ @Չ%R}qО1e^Jp:! 3`B +YA}{P<O ` GLdWq|EV)V 舵""#*rZ1Q4-& 3i=@xEK@yXBR:@\ o*PO(~r)QbA7au:1q+S2S>5ôCd%qN4-@RrDF",DAF?` +ec&[#ZcS*%af|o7@7)A7?! & T$`hچ9t4N2W$Alq2ARPU@C*c$R '4fc Q28 ]+&bS*&޻j1(fAca> p/ g:pA0 dz c*Q"f::&4,"&D` Pe#)g]z+"l[-gNlȫy% T xE'!^ iA73Pf eHnB@J[r4օg@W"[!g?a0"+V_1tW@uj*3 >kFTe ƇW>鳳u5Q q#0e@&11XO١A0mALA%s(b@B="G%#@Q0 J3N5E mK :sKMI7G %dW!ˑ gW}@ƽhW9eX;%Kh {5t80#8;ŤD$%^p΀WV pn֖P`q ;m O[qj.c![Nr!Z2~?0!4'q%k@ò8e )4 P:`ų`͐9 rc004j~$ E(%pu5lC[1Ю&jG2Gasdav)$C8}r 2L@Py Id߲R/ &>l=p=@toY1c?b)c 8 0D0b!r'ϱnfAىa EU<d_w6/p`k~ 0vM"Eu) +CWW{lXhUOcqT!cZX.ڭӋbyG81_Ut ?Kwftt%VWH 4c0p> ruuFrH 53OlNVhXКG @-k>{\஦(Q{F])bHjb WOӥ'eOІ4e>CxcpX6:򔓳@.8胏p?l([3'|]Q.x~$%5I^ `|o`o.`2(  xrm.RTӥ(a"y)B)*2[mPCX0"pmB24h*}ʪ0oTHBذ9HY @l9+ #c 殽kkI. KK4٣A[P"L#-XrpE~j$ NDN:|{S4b+mͧ:锗D:F Y(8!ǃ62  * }ԲMr7;hos C8 _`Ԩ\Ȑ!Z108>(ztȃ E3L`ΠTFF3D)8 6c=hY蕮].g RdS?C5*a.f. ^qLmWs@='DJ+07 "K }"A>TԲ G Ua3TeXNĪ R"Adt1I >+3HpC+_5K !`<aArl)0| BIlFQp (>ƁП=(TNC ; AIgBY7@.s1Ad~0&#*8b.@ ]8ҍe7`³;P$o貋?( ǼԥjPK*h;|=-{)\DE=a h^s P`_1”DAEUXMVB .g3r`U;A{“``$s!]bByAP(b#1YCXa3 ㈓>6P>R>s`.>DD @XZGƓt3k!#DO:Ě" 3걝.ͅ2G:`OLpQ~ NXs1AxMX q 5v9H$<^>9!6sك&S')(puZ 8(ӘQe1>$Q)u FIBGN4S(1 AFnBl"H(ТFYB(0a'p^̠!}FuA(RI?"f xd&(? Rm4(",Ň(РX奉[  Җ?$-&]D!9@pY؂P A H.)i.@Qxܝե+ZUTvPB $Q:I)hRsaAB:W'f6)i}LX e9k:L.dAڪ2VvD :Y$SA?p~N%|lsb2c M&+ 5H"B4͚.8(aLDD2XŌ£Ȩ^rW!ԍu}PEr/t+lLB2 Ot{o&Ц=SSLDuPc ) g^7`k|-MիE'a:㓻> O<ȩ&$od& 1Ev*wՒo:?g + -yK&2! 3Q&dΥ>nO 95N: D RWS Z7زyWd TE;S}o$Cۈ.>SwI/zmH`AЃwTt@UuܫJI6a*ވON. [N}Q-dhPʁ~t* ]ЅT !ȼ3Ȯ2 61):3 Q^p " rZ 2=WH %1=HyAp>;PCpm8i; (-#Yh4XoM)#`I!>h@YA3*B139?36H+@:ڍ6ޘk:#% JhmArȺ E1{ HNMP;"8$ M3Ȍ* ! o@! 3y504DՓ0/V*DXTxxY^0B/: n=P!1tH@ʹ5 Q\uHWS 理bWsت"X4Ҩ̓~(U. = RݹXfF̓,X4i޹ꉨD8h2ؒ، @/`"YO]܀CW54p;(>D^TUۃڹ9vzZڑǘ>`a;[HyGa u J П05ЈȚ0?SىJbB \1P=˺SAZ\q2}H(44 $01q4 Y˜/@du8 j!X3p%@X3 gٝ%e20}ӓHSFΞ"YxσX9^՜"ӇqA1\J2r_-5Whǥ |6:K d9;H >Y€ҘWȌ Zѯè EA6؄- B^oeQ!! Tb| .rQNHDjn=9c м YwK( XXjzн;%rU@SYQ=I ]{fF8m9 f gH m˘j`ia@f@Xq R689Lb^@JpPwբ g] z[ ƍuhFn Љ>iοP>v=) Tj4 j1lh5^Gn%̣Oy\\6V > Jp@Yt1Z,A50)e!ƒ' o{> `f(bhL9.Ύg2.faZ*< )Y X "ҹM8xRao 62pHWҘ T1Eܖ= 0Tx*q8n Бa z0LXcH,6 \(}iSIv+81%=K3@0pYLCMa>Pc1* V'WjnOI\؉:H-r &!9\Ub3Lf~g )a* ]s5:ab6)kWDz"]!YP 8 LVY5Q ˰_ <;a4W48 n7_:}(ͺ-J /d\\tq8Ph(#H~;ЇqɩX<3gj1I#yqˆUayB+Pdw N\q >8 ٵ66pLZl5OR® iUZ#` y3@sҨ`]@nGLGO7w!@C,_,?l8P ׆f @9R=PBLHAA04@$"A)(dCqE.Rd0FE,fP/%3D9<TK%B :0gOU%/J!tP#B90T& _t,I Y5@W?Kr0-͔O`ygVІ1Đ4Zj4D.t.Qj0@ @@a@ݺ 9؆tt'T] |,d_⋐"A@A @FmbVdVp4UPj%Xz'ly!3L 0q a r U}, @kLLTEiALxНkM|Vr-> [$EGBs06o7 nBHc~°B9c@:MG.`qU49%k-fF(]7P;dW(K-@^A۹4  A_~z8́VKAT+x$@L3 B -d &FV ;HdP{XDT*D~@3a:ovIfA~<9KhK8,g?,\=A :mlh:`J@On@@,V`:IcĈ0L!SrŽ`@RA :3Ơ>jtUW0H#aqEK rܶd@)gRgxtMˡR-@l;m  K49Y^ 2ߠg@ؠ%@UK6bHcz' dȣ@8n|Aܪ(ٍf X@@;3A(JkAQdx̂ fUL?>15  ?a_ WBPSL8 ,h r~`4 3Q Ȟ#thm8^?AØqlHG0A6a&6XRfChrn-3ƣ+͙†#(}@Sj4{ M4Ju8״pm (f (ГPѡ8,@]ǔT+z,%PRK;@qP.ţ0n|[qR1\LWAtA`hyhfB2 w Ļ\]7 L>xǟu,@@@(MA8Fm P,IiZV[~@CDA pๅLɴ$88[D|HAM6_$ք(>OILX`K<ܒ)ݟ ]Ӱ[Ap)G4x c^rM$ (QF>4@pAd!YK%c<"4܁ Ba@@$zM W@pќ"8L1j1)@5AG6 DBwwLA 'O 6-ĄPNKP7 + D @ r8|55D(!7puMשD@D ]EA\=Hj_# n-LECQxfD@@BRĔM0RFo ^ Bm bDKQ)Qɉ,CL VD4T,"e\*.BPAF(H8kH>*G `Zɂ-TKla9KɕĔHTfХA D f&4@{GםI@8H4Ȏ>Dl$\@,"dAܛL阅I pNE @LDm0,2@hDqÝCr $P䇃y_G*7LN0GLTBLa \ID|6EjEl1bDA!dAL@IK`@ -,BK+@,%ܡ@`EkA\maNpa@@-HVBñjyBLƪ"iAf!H Ĵ29>WXAAt@ؙKPPz &Avpϡˡ -,K'ET@l( ̀E%'P@EAS?ƭXG|LruaD|](I@oĨR @HJLI9I*ȴ^M%)]߱lrɒ&XAtha+<_"Dޯ0c,D mB6AĨ`YtZVhKņKD2&BPcAh@9 @D8*0!$LmbơtAHBTDDVaDvyJЊp gg@H#Hwjn5{Dm\IT-89 /-GK.8K3@Ā3ЂDBqHXX@<!LTr@D Kz!%Z@1XPFǔJPBMFV $@Bm<-@tPv"LЂLj5TY&@]̂h֩5Aj ġj9jQ-ILףbV'M,p4By.f[6 G(Gd2'DDN`/E\$CH AoT Ne-3TGUɘX.B-$BF jFػY8Rw3cB\@w_N @<A@ĈT FȊv_il7AH)8|T(@Ё:ħDl'nA]>o8@d>0 mD$_DА.KlSdfl>Ě5F0jFG@؂Bx׈6he$| = dDFD ( Il!jf4@Ȅr[*fXpl\@7c:Vɒ%84ApJALua[ڪ"?^fHjA%Ȃ ; 4-fSg\Y41qXBVB)ҍ&i*ği8w DU@%tXVI&l? ]YTAY-|šBᏜH,B6lQ0ʊd9@?C9KBMQL.VӤ4t~IPFU@pB4o_|s|M8, GMha ( fI #rE2A7" s. Cv Wx؞^pӏm u[+p5lppB)+KZ73pFBγ&`""!D3AR'oyA3Jh3,d@8MC)'V"0!(am:Y I9`#G"!b bGXPzC2!ǖI{n"j -$:j: ! څ ;KH#"3pDH@!*m1 +)!ILh>( 0~>$O#H3@n|^f r1=6Mk5![*'#. V׎(F &]h)30ER8Rqpd*7!=z݈(#r]14`AR8 AWI۹f of 11`Fos`טhTyn#MRGz(! p (0XS &h\J|!)8z,:!% "KLVDuAf (@&! i3 ʘdL79 wA;k! CJ !0]ly_B/ u*zE /8 x _Q>H" .4䠤B?%$H~$B)9A`ˣA~ !Ҩo|Òsqp@ "XC>ǐ!9)oB ƉPt$GVS"MDa8ʉ ;f r GHI#8CX>8ë-'h\BX$kKDEN'L a R`QJO7ZRjsx` 2S$f;0׍p% bu.ppm,Ă&֙ED)fPKr8$EpOD.ZB +gd>dB&Dy)"e<ЏX"&Yp,.}1a&e"U  93D 7)`qKՄ߄!R#kP$h r8C+B0zZBH"\H CԼ 'OJ%hE7ԠL@ H i`\ B -ʼn0X?*29LmyZV*> ŁsuB@9'p Kg R"`(ч]p2De& 6! #!%Sp $-~H?ި%A"d`jxG>2=X"trTD'r@M$ ;VeDe*r@""E/V1̋ T C2J z'd ),M^ Gd_^ >"Nmc[1;" 4-$І3(k`2I0͕!jM`/*H>Wnldn#BjAfD3<6D|s IiXdBۋ3D\?ՏІ~X {Dbh8A8pBxc<ޘqNfiossg8фB㖚 $9QL ӆ jB;h"@Z k=8%  8`y!1p7" r +;' .0!(C D)Bń!vKIϒr/'MȈC!Hm}CACR, , 7$scPHy)% vlaVe< 4n9ks>Wld-Xd:X[z JPHP'簲G4"b1`R~&˳g d!N'\B3΀)8f `J4C~@ "FC*'{k`ն!@!(8V6̉hw%:Y`j"<؁!؀ `B " kp7h./ ' Rޤ"rB@/W a/H!xGf ˶FzGN1(@@xpDXk(0 ")7bmɆCeX'7c'z(2JBC0@hayS|>x hyEfj Ra,'Ю ` N@_Z2b@\r<喴'c1=#'MЌK?~\&@d4NB$0"1p #&<" ~h5$ R%R%")ey'!iIXזZ䣬PJu.r6a4%AJ̦Fd00'@5V6뺆Dv7;"!-'".(NAJ @G w j"j!&8pp"P`%Ыs&8$"NNdQ yK0Qί "Ƅ8`B %$O4WPUqC7`DZpBU&oC" GtS#tT&t"beY#$nnXDX5!$NbU0J|Ū( }4"`*rU* qr$)V4$"bEQTt_sWJo[my"NԈ!ʁo 6`M.1 H\|jBl"4-ڀiD &k4$@|#b@L!Bu/2s~yJNk v.i5ؠDf8jR^O5`C8zc%"Ioc53 v.dLR4v"Bs`rᔋ]ҨX\('c CVɗV?>œ(44q&8>4$+'81:/Ϥq?a{Rp` bdERMn5T?ZƠ a& x-H`BRX1!^HBF('(b@-./!:'@ :'LH!|N/%K b֠0 Xd NgFa`8R0SN!3B:(+9隻FRmE+/(F6'ns"2W^)-RI׀}Rg%1npBRw*> ygQ#aza #a ( N>e=j?qgoi&BZCSzXr+"`p"N2fS^%jj蠔sbB s  Jįݘ3|!<̜!HA%(Θ 'r욯k!nVu@a`\8h4 @2B_#d$W'] iLcUr"M#ţtA]`hƕ(<<"m ݖvMT(!:u.{n'l@qyV` ~ d!a5l8AQ«D cbg>JA"l, 'g&+ځL "!B-ouVDu0F>V12e t@YZ+RFa>b: 7z\|" RHR&UkcŽfkdcE@x 0{~ ´TW*qH3BKXdYkc~4 }iHf*i/Ua_ ha * f 7q0 P+T}w@O\dLhG@iBmL&ut61y %YrƎ{qHQ7_Oa`sѡ滩G$ yx CF)\a E"9?K¡" ;9Ą4)CH8b؍Ԁ԰0G>a "d*7?A ,_իc-2$CB)nEq6+Ť#N[R8h#?Q%h`kr&G B>bAR#T}!  ¬#|"TaRK/C2_qQWӇNH=YDոr=8~Gg$K 08ε9!dӐJ@ u#h8CZq"XLόQWX?xDa:~AF$ ~D A2~:ap,jɒ@xku%z#^u[HtBDg(P_FF73FXf$gܒGl%,1BR4`=SXt]"EX 90-:/"d@k ³A: .]ud! [o+Z *eʕ{$LY&Lpm&)a-4=1&. d}1I(ۘŔ"P8cG x"$uN>l \Er(G)|d I :tI7 tUZD@uP# ?[߄ Lb! 0!f]~SCoP= $d숵6B #z#$!8ᆓUZܐEǠ[AFHE!޸[@g*0<Q@SɹRɁP)<@ϩYf"sZ}&'0Y#JWu> 67]ncR[P"N?,Ab\P;N8 4q<2kr8UEjՏA"GbzuC}'\@r2)Q_ELbd9pu` NYԇ,!3hHAE+'' C?mtj$uHUWr$U%[9 %hm h,t/K0H66L|YbJO0GB,@Ӈ%EJ"̒$yu3#0EGng,dC.h _¡U} 7ZqHL y b:1@7i3 N[k(}1>zl@=rB'mYHR1 Bvph#pSE ^(`AC2]4 B% 1!1 C!CiH` !aa%e hp=$^?TR W#O-3+'7q(LEW2sVCuF-cI&%R葋AQsvZuFLF[iFz x('P&h[ %IPY"hXF: qE H )uVhfK%W:x*3 $!yvLw [s bFqىAfGlV'dU\Q8=@<29mPLB0a|1a,͈B""4a VtHpaca(Sq@p]H ^u13^)S@Da cp}g- &UTgzHFPv {/cV2hKd!/"}0(f|bbgHq+ƀY`v`( # 'PI" 83 _* Cra ,Gp ]7GɱJEG& ɖ!?4]_P;1P\u}OU#(s!\\a1 s b11!11a/ ֚F -6]Ӓ "ߠK!W#wS+A'//7T@B68h0$5h@|!E,""PN[!qOQa3`8P:`( d9*#t3u'!TH!~Z?ʖa$L1 PzES1! ?XNR`_Q 𧦙 QG ݸÆq!0:hJF4Dё!|bái6XU֢$.Xh0UnǚaIRS1X^ fOe1Kz(x u}0,]*Y0 `aP4 h9*jhx"3+@D-& j {hK>҄? Բ { dƫŷ?>_ы‘ LC*!Sc4n4Aa CC@p GpP"TP ($!%a }~DA 0@zA2q!Hx!QqMRXbFGk[MEдLXh:bY0sWt Wq<|=C59 |#NT`E0 Dk1M [AB,"$uCڤCF$ra mP #G$! c4>d{ p @ A J1 y1A 3`\Qq[ "')/01{ ]A:0`2 `QRQR5 Ž!<2S9hPIo4Am)'TVQu)&wAڵ9V6uzSֶʋ&m$lYlg{^ӑb@k@ %0 $AƴPN'Sѵnf:Lư(`LXk'XF5Wc=qO);"s5zf띈LáKhp)=c ʵEm M Q6k oBBS ։a/C1m5^#tq7Û\#^0/Lw'02"Kӫ0=UFkIG,7$0 Rfh@:2Y|7-Ybx hjq#!Q xr.)WJPqa)U)PdxtG9̌y!]6PVA AC X))( +EY$&p_:M LO 0[9A a8d1O"G_9y l$>lA1@NA upjA"D 8 nSM{ٰ`f X)[_lHC  zk 7iD9!.(*05 B 3\SyP,Türbv[ꏊlX NA;fk|:|""Bo(4 "  R?h +#`@ ,Rh)2hnP# )ѱ)"@ R"C ʦj d2?b N HC!/)h+r`($c.:Zr7PC*}($L"`I>(@2[|(1C cѧ@-b6HMl{&V :ՈxnJ^TR).5ÛgzH-੣V@! 7@UЭUn!RhZ@māLUS*`o? !wJA0HqBġ *aobu]6LH d,+i 5&p"1rp }J 25.Ȫz!03-CB6)> 'ن,'C7A#>-HRjRKɚ=y!f: : ;C4q!r!qz-BZ::k0({ :,W͟䡋‰M8r?Bp~d 3ء%:|,h_+BF!4(d "Z|jFoa "jC^Pl DR4 DC j8d}!8(<<$,1sx9khDUF0>Ùbng19`9P7`lUA6yJޤ PJ %ryYX\E"w"MJ 7 (*ۍ9Ztn@v=Ԣ2jJR?8/J@|7X8$v(=s. C /*L@G ĘY C @(GAQ0HὮ q ܘ!΀J `*,c@X@ BwnJ-1wX#jQyPbI0ܻeAD&TY/ȉFKpF9TEs"*L@YZ8QT#aT wTJ` (h+ˉF!d`$oR19/@TauPXc1)@"B#R28^A4(^VI|7)Bᣇh )`~LP",a ;1e:0gA4 /IBP ||jI4ECYY,EQ~TZk< ^A`pŠ$$TWƞ3 U8SB6dTAg IMPh Ŏt2UC %5ڎRќhp%=d+Fx|[ .SDuAXpUdACgCbR8$7Al4s"؇dc(fC摏5psWiXV́tf@`.S¢6M`UC\d@#tv' BFrX*z!PC~EUoD+P ݭ^N{@?Zl5 R|BvA=N*gI2wORۊ dk~.d^;#}*}aRcY$D!2ª%7 a|cxCArЦ>HvC!҇o5S2o"PF{( R@Bm@S1玦 }qH戳"Jnt_$ =A*0>@~fHs7u)KlF+2 !3(-6<8"0؀ں! IGtH"I: "dCHk2 !EN6 hJT吆9o-d j N&EAyMEO+nc60=:' 6*[8'L4$)[l@l}LA`#Xp.h ;\7zaVyA^8Zj ]4%C活^тUz iimFp@;9;Rx-C I k.x`x @z  9iR 1%;*xrЍ@+)$o8Q5Ѣ(k7H Va?12M=0Лܺ #0"-I !  Y= x+*2z"{R(-o(R)9jZ /Ȗ̡Kޠ,.8M.Ҏ1<@YL"(1Rz ,^6RBp2H6H  Ȁ ú'8 p$@@T/Z Z11o']`_8:J9/҅* !(BFT>+8@aˆء60 C| B| @J'Cد҅` ( kS-zBPi4s2,(09#6Szt)P ҫڬ`sE(RY$ڃ00;>A@ X"1C0,g;Ɯh)yxaP p d*ЅCd_ j.B/dds(&C[!|ZWsMHx)̪FQKܷXCmx%xʬ0-)^^(ɂ7^+ :hG[čR+Ʃx?.q< zz#)kPjH̡80mJhS$E谫#}؄uD)*D h QY ;CK btHT]]"/ aT:)%C #ـs͊=2#Ű Ъ pXsTL:+I'>@rƹmÉF "; W3J~Q)#xJTOh~@KX( pD8 C$3pT3p-!1pt|U[=HH | !`9&E 4;(Q2p?p]D}(L&H&Ag;˨[HQ7x#T2``H!s 6 +K0Z0(x2OXV$7mG:mO8B9lJ7x HlُuwjsÈO9H9ӝC(njEDY|m<1e±*~D(#5#Zւ(.8sE[zNpKH1t-؅i6k 1wnr(NJ,X]CBѨ/" k݉?A ؄ HEXVC9+**0-*Ay IM:8XuXdrǐʼn7ؘ0'UO>4&RzM91z&_.0Px-s @wI0',SBKP(}8IPdV*hX`\aH]DQZ䟂K8R܂(LAvUͭ| B޵<G\py'{׆8M'~3 र%6*4S|3H{ҭ|Tӫk^/ycVsSjLZ 6'IďR# pm>kZXي`2\Y]},K5ч7GKX"=@=bUo}i)]p\F$ $;c̟g4UH!{R(+xR)R-򆰰*%H(֝+K༰gh6P؆ 2TK2[hbXRy^SnbR\-IEk. ؠЀ&Hux1@u}&gtHx,ȂX 8JT6@y(Т6Bw.Ix$Nz`Vy肸!kɰηF 7]XkZy!";a5 #*3B y ܐT017x ~YM =놰PbNIj,P hYY> }*Wj[}p[[ hKߥ6Y74rː;l #}K!(Ѱysa`:0opS˛bj >洰KMH5E9isnx$.nE X?\( yDDkk>P `oSu90`ʠр\M9tlބE9T߇B~nׂHj?J(pMH=덁0`@?/`MM[P ш X$ "unr  &x摂i 9FѶM>^f>8jq '3EaF ."0Y҆:WE1Y1[{{F!pYd*h>m쎻 YjID_G0 8l6 )-|ᧃ0pS)Wni`-ʨX 3wZXn6@yc˰Շ(Pԩ9wx 0} 5ܞ;PՆ0򆐶߿T#]XeQo_ØJ x6N]xpђʸpF膈ܴ]H-ӻ% B(soDv  5З.ZT؇Uʨ:U~Zh,Bp #IH*B$H{/pJa*B i63̠ !-$6kA{``Ke-TK-Zir]uIG|nFf,ؙGEBC<-TEx@}AQ}w DAG*+}Sp9`F-6Pm(C ώB;Ur܍C-s0ah]/X 6_(0XC%a i%>۴$+8 aE'i^HU`!AtP&?Y(\{ξtM1Pu>t@Ԍq ]gYuֺ@Bd CVN!L`F^`G+@" Yh58ICi-;W-wۢ+6؇1\UBk`+ GzȌG3xZ GB$Nt” e%jDSFjRR$PH@eFx@oIB?HxwyB_-:(T*_*vJP*ni% _vȆ(0r7%,6˪P 5 ""!E .Iiq|* nFGb\W-XV uԁ 5Q/3.ryf#"Q dd p@F6bR5R)h.Ơp"T3!ͮ/KW3(p!AFR@i7R+#urH &P`Tf7M!F0P:) } H (a(HN= oX;b|E90Х(T(2"Ѕ.[DHXcD\]Hҵ;)Ye1l2@?|Ȏ$$X(8g!MXrk!,Хd`Hr!8SȀvƗ.CdNB8D  Z!(J#Pkyr@Zm$ȣH(bb8?~%F82_х78Pm r $LwʓXc?dhTe /ʞX;t#3 -6!-Hs4J IZ#ERv+0&ouzܥDĸd/*?F$2VR2BSpUɈdYkٲ>LF!Ž5$;Ɖ2"@ b4uٚ]6{"A^i 2fd@ BH1h (#ۮR#!+w.a(@FM"Q+2yFDÞQŅlGSyxGܐ @b'v<6a@r}dŐm!K \>g !D[ͣ4C9T|w^WMP1->DXD >x$U=~Lle ė(m -Dѹ )KՏ :ĉg&B/$RC"ZNF@FzTy -  GZ MFKXCUF@@\zqe@`AȂ-DY֢99 ;ִB=ЃhރB-;mF\F A>әeC*w mFhBGgDьMB9h @,G]+X4Tw gS3k_@A&eq$4khGĂ{ g-#d(= |VYPCK"1AmFymL=@$;f**q.$Ho>^+DzFN@&5*QV&pzqCWGm|-FV@8G&FY-bBؚzȫLBb\ gF * * İ%"b|*c FYppBl̒ l{ţpxsL:^KY1)D#P5gDq L|4 i k.^䊔$qR ,m5FWYp@XPzw_#0aY5i"H0| TkAPmy 2[3OB0\D2 !DgDB?a#l`p­06@(`-p-/C ĥ+x?Ιɾ9FXiǐBdF' Ь_A= ʇ-,iBzs,q@e74Htp]b!tAHI*D2q`ˤOD| ^A@gG6dCj1 ։*D@  (FBVHTУIHW=Hq=Jɼ\tP̨GCcw T$ ;|O\̓3 }L@5 yFI<bygTt$ @.+ěԌ9BG ɊȊ-{J5<rxFZ8F`sZAN \ 6qX(!BTv_+DԊW-Bi*hIP734p 6&pL`/D'KgD()$]w(!pee;n:B* GeV(P|C*XFxE8> q|`\`e <(0HQ 3 hР 4 3 RpI+WfK\#31H :> NPX(#I (@X0ՒYdw 5ZvZic4aW}$7m2Vm %̘$,:+p&Y4,XWx q 6 `` 9, H|đЄH,Q^ 6~d/ Itޯ brQh$f,0f  J!SnŅR iĚQcDR%Ś|b7** 9,#x, >a7]SD%}Qd[ G*`t;0+Ub,A.hp.ZhQjE\iRMȅ0і## bLd@deVUzB@)P̔^#p'9j ,KPi BUz"["N%HBO&VBRDTJ)tCg#*%x;,EE&u$)`Fr3kKQ92hƎUf,&#x5d+XHBF Bd c,8&^)9K zCaa5 *H* (x@-@@@ί4(ndwBRАMEK# u=R8(Zl1$=qK޲k!Xk]hZaE4 t63. EX[͠ pc(\US  2N2B5=;hZ 3@1v2Cea<2A>:!`a?w #ARy[%B%|$" :< @P) /tYcY+bCf0W$ @g Dh҇|! }f (@I@*O4zChT$3 02qs!"JR LD)N6r6Z.% KaT%\$mx!ҳ/$LPV (hG7"+A7-DbLHwȩX8 LkۍVb3bƉ98NE4R:4ɢXsRJVգل!- $v 2@ bDAB:CvT&:xv#g%(@1d|X1P=^яD/j.>e@ -֠ $!x*" xLC]]ohbo=nZH!kLʔI<\y "YH?8qPSpI)=0<$QI Lɕ$!x C^:Nb!@@B @!^!+!- ӟ35 H4ò}d517K` u]j-v@8(u;#LG -dHuYNd' ^e/@F90pm%tP)rP '_R,p] ã9 H8ϒV$!@Jk--`D|i` ,b\v fBX Th!!T4`\ ʣhRI:AZRq+Т2@ s/ˤJVE1a Ɗ1-=KVfh@37f&L-{ T,bb.VcCJ*<70X$]F7.SA+pM Ǖ 5cBn hAINĀ q@ Z%Ac+ R1 acؽKOLia{ 4Ƥf0 ~*jEPeCR$;*Ɨ`^AJa"(Rʔ$ }%#D&rH>cuvB?5MD;JX,!+XQRtKXL]`k1cҴ $+ZZ?u#hqVne)-` lfE\`x@8`!vjH~GC0`Y "l T-z@: K%EP %{^n!{ !l|ԥ;δC>}fgn%L%pv- ,%r``& bED%bd^B%cLa'Ve."_JJbZKd$No!B,!A a X@ d@B@m!"p*tC>€kdz(#)0/d-0c#Ϊ3R (tBTg!vU(a%~|%#H~ *P:n!ؑ@@%2{X N[@I l@=H;d ET+$dB?&ڧnR cp%4/H$$G FHh!0h4@-h8fX[o%$ @i0R`ȓ!6 < U?r< rժ?/a#'U --dSFFB)Kz-P1!qYH@.5!B6qgH,Ěc"F,#Ee\zvdGj&h$q#WlhHRn]!h-r &Eq(Anq!Iz'$qDvKY}΀ZC&๖nHQHG=C%>K]$ z%\\-P%b>N猔1$ t2v 3z rT"']c1$4$p-D˾G3vD}e KLƉMfȆ , B8 K#tB)>a$§o> O"9)b)):n 4֚$lcUne&3vY%o Eh/"h#$~ 1&%2  “L Nwl "`O%e%y Ͷd"A ;E]%Qi7R" a$bn+•:5d" 1<ֶ j''M:X|$COǨ 2dgpȩJՃNa|\d!(` >%8@eoIb"Dt% n `&*57~BA.] ,_o0@xj,BU&zDbVIєLj$;ɕ.RHh%#GdArR!a'jeut!1N$RvmF t A\$vd R$Y6g{1mW$[ߠA6z%FbLA~a5v#G8ҭ0ELIB?oP 3bg$/d} &"lؠYަ%:@P ^S"j Ljw! tNcĨ &I M4+$r+(lk6D(G$GZ'7K/PPՁ/ė%6H&YkWq~ ܴqOeO) P@M9޼2YqV1ƍN 1I:-D'[0@::H At6f9Kcp&7b V9fbW0`KG]:rApM!Y\ wܶZv-]8Ѵ~Z@s#K.p(s@%'K.( Ux . $ `Tt \jib;Fs,\9 `G~1+ (~mFwF-)2_h [1x&)ņ~M5& 0U8t[&={ c$PR2eG %ADJ+i<-ђ.y-D"TqSNKk<0lhM` u4җaF%]W TIsI`I`W! 5B tPqI FBtYi,DȎ›Gs1at&u]8;:w-bd-7Jr ybYc ҵÂ\ދIp fDA %XW F !@"Dc,4 F"Eb)F!*)Ep: \TQ$t( ѕFkDyy3j`Э Ѣ FS5y1p{Н& { LXZ&þge/\ (0'ЩQRxPZ&Hf/1֊iy,LĂFuu5$Fj A,"Hlt`ٸBn(bF[e 18@A/cb}ApF):YaDfG8hfdp" HXr%jZBȠOj! 4hD.r0, 06XCx325.pX5AJi$+Ksr-2%q`(dWsGGhP;Q::stK iI!n#+PGBw巷|줽" 6p*Ke (EGN A#ud,nt\ t3 bX|22 e2+@@>9HElv3DTRC'r}ho` "Dh7R*(r+ƌH}t[@!ujPw"f- cBl$P88rppq2PxlH)68'DBtJe2@s1t(P%+~z?;ȡ(ѽy!EF~PY.isuf1-G@$CՈ`N:#D b _T r13BCRPһo&Y ʶnrKI 3ՆlD Q Pp`2/ ")?XVR<|! >Jq<n E +$G%~2pvVgAu߄\&Qi 5't`O0^ i#([aa pxq/' NIv` gBwpr^ s C|gkA^D @qmvZ&a 1 700Y }Pz'P2}#>h'Բ.o] .RP 0 ;qp..&Tt)Otd{)!'Bw Ra p7s }J1@E%8P6SXJN1W 6x# @((A3h%hy5 Sv qO!\000&2\ R ^x 4lm6Bj(qeC77nc ?gD=%!E`0S2b)t8㐜"a$9@6.PZt{Arv"B\igOOc5y5sx#(=x(?T8d ]]g!jQ:a ZZbA!F05a Uppmq8i*`bet!99tSsa.chLR`!V·]pHՐLo.*z&2 AR$t[˪ D!~w 0hg0FNvPt Սz?cT'Jz"hAdVAVbTQA>aOYʬ,76t]ڬq̪Ceq"QjG>RUh L@Xq!Gk %B(*`?,1hΗ`Qk@t? kW$ x`%HR-б r"wQH(#[QBkt& zAgæ)d?`K.4[ɘ^P!Ta !ٝd| ɶAP Y $2 @QwwGRmrU6Dl#G' bdž 1 7+PI ݒ,P]B@oVHkvp"U҉f-ZV-3\ 2q !j[>/tf#0 eq >}0:b p#c0{#8`%g ΁U W > @ `/B!9Qr S? '0-PwwC5 &ۚ@ " jQx!,uC!Y W.q$ 9 1 q`.2T.jTAU t  !|sNW-]Ha-" Ac$ [wY; dԊ>J䀓&Q]-qKsq-! K1? @/ppsPYr'{KWLywg! v~3 X8`ThI@%NtOB5  PPQ`ljJºr(őWqX8`,2=w@9"8GUǠKi+zi"$APV.TZ,iNF;WHݲ P3 b׎F FZ'Y0s-џi;"IkMr.qsL2}i12B:h T@Da;i(WR[N+&f2[!_!GƒPX1=@~@@ #(9lB#u xMEO  T5Ap]" D`>P,셓KL5pav]u8FBOc%DhȊ@ Ǫe;I-(3ufS@*EL8h#@qBai{""cz˛JIHE NDxZi,ʍ[%n2 2 Q }rE&HF%4̛j#JM⍩fh4hJB:¤  % H -` XH$QH"p.`1JV) H4,ScLVG3K)&. 8’. v@%ba26@ H  5aHQUuDa3!ҊEUS,F@`=^HbҰd Kf }6iآ@hR=^F8k#ZxM= @Zj8i@aJ4阺< shH#C Y8 YP:,k z:ujS3n&Ї2(5n D6ܻD tJ" h!-W28Z,ZIahi"*25N-sv8⎀01ä+ B@iS AB $K+h@RsA`ohaarXŠ1@QZ-k1yR 4SSiD};l Fс֡@&{(C g ,gX!ΰu|' aNv$KdJ%V",eqn D$?HL{ _ܱj#<,#Dh5_F:Mƍ(5;8&=ebfkA^hy@qP:ʳ }ha։u0{ҵN -aA9Bde )TKiC ~$y"" E0<+|=rp  F c)x-L#GFofNH(`p WFInS-*m~` 3%sfBJ%VиF!kKV?=f˲^Y` ʆ@adjE*t $W˜MK'w/Q^h/Nz#h8yvD ׉jb#TYľB6TRr7E|%qZ+I y ƒfR.TKan R>X"~L!B[4v5,7R`cթN$g ipUt_}^蓞z6[QaђLK ētznKX8%O/.Qu$a@5x#)Z5{ Xhʋ[ UPB8K@ ҘTHE(a3ޘ,i8!i@XЖ{`'.`P j~ Y: K0*kmԀ;18$X@ [(ߨN2ac,@Px 9sDn0x-RzD =h&tIе I(y6|>npH/;zKж319(’796/1#Q<ђ,;ƿH4[1s. PV"w pM9aEz pz>ڹ9YK$<8`Ƞ 4 C+xlh($)(H`29;XCjA$N:9ȫ\ٰӈ K $B͘ Ÿ$Һ& @@OD̓7TH EyVqIP;.ꀁ ^d3}!i7LJ22; .1 > |<=i~+Sv\ )GX) @?!$GPl(SHρ  XS3MON¹>:!бi@$Ɉ#pbo(0! b3dk.TH~- Xe;k؆#YA"*ʃI$RH R1-&35XYKK8}OCaf L{DtЅD̃x8H=Tڠ8i#2讈E(pQQx>"yâj#ro(oK ۝XD=XG( B1.Pаx2͐IX%X,42Єa9WݛZ؁##yHA#CI ~a^":XHj"Z’Q@ʱ͒99`C 氆MJ#B -Rhٽ=8 +)(uy`Y-SNt $˧5ZZRC=ږĺ.]( l H >S Ŗŷ%ĹL41֑ gT 5)eҠ 1:`Rӵ([:;pM* "D` GteP ȂMp@ŀވߘ;6:2J`% 0eY㨊C y; 0a#kx,} !te٫Rr`׎ّ8alXUEd<[j84IåKˁL3%pS@AuDHg0bU=a`Yy2 .>My \X3,,M+a$[( B8*,`Or>yEm`4tm8G @ |LX ،UKfτd]1#( ed+6H䥑K`'[0ITpUQmnV@8 V#WV`0OQ-8 ,JuҜ؀K![С:S[S4g(hX˽I߶hu+Tx+CզHJk%Ɖg;Tc̮beÅ[BX|=K ͂vՃX.؅q@/Fc2祶1ǃy9':o>IՐs PVd]y8:pd0ȊTrʊ3o Ԙ/6~Di 1:h2Kp3B{Fa(z@Y <բj8I4P:Lj@P.K`jQ`^5*w)Ź93~ _h#5ӛ2Aø`_v^J` N(wr(pWK~-JR2xH=h( ɷ->كm @d†B̆PD(B'#ǎ5LI(.3ܼT]9 4`Ќ@Fٰ 5 B<:ɑJRZr( JK94ۯ PX'dpMkH0BZkrB!/v8v%DX9u Z?e:X:4 d1ǦM6ivm0j;ZƍNX={RƦӗ~0[Glq?F9ZhG|m}zHג{(Fo&?6WeY BG\@8G!ACA:Ee@ *P@H76MC dƍ>b bC`D̃cGxMC` H(2CI$C"edC@d@,ozE{< )w0@@"$Z4 *R6^a+]ciB< Tai*2BhGfJqV)H1 uO?Fmжn9o` r94\t" ޻)]wyrJz-,VPP|_F:5>\9$'B}~f^!Z%7gG܃0QhQqQ*bKC$A4C"d~Q4Bu KG4BZ"JPǖpKmÁԐ#=TSD`Qe#aCb*YgŇXbV~[ a`p~Ip P /xaHNCАI@,>g"ԉ*vHϜk@JǛ{Gkn w/0)xwGa 8)u (nBs :iR2 $?8SCcX8 J.Oבltyr P#"dE MkBL DңGP%26!o+eDMqƗRfJ8, ! 6'+B=RrH?Q8|DXU_5DI0ը`]<$ 0jʇj]ऩ@V14= u`+WLnu mr✊ B,x L NSs E89!7AYb\Z9p*A yr@[ K RCClH!#:T >p8Ԗv,ji!BESf\  h T х״RU!`A@E 0A݈(C?d._T (Ȃ+B)KD0t8U|F(ITžB Ӈ BH@)#!:@0Vb@GY؆+xˍo[n4Q_"8Ys9wל#́}2ȿ:eB! RG% `#lP'p[tH=P`,@pdM48 !=GRI(8Bqpv[:GMJq#&i^$;F+:D9J Ue+P``V9 FX(X%26 ДH `lE%="bm41e ;6 Ffӌ! B[uk BD,BOih(z&Je!V:@8@nmm8- B<"]%Gwt5!ⵘqWFb4<HIQ! Rt\[~8E쁜m\R8|r$l"5m -@!fEU<d 0A 0*B֐$B$BqKfD "=C,AT B,1JzyD$;ztXHADAOfc*$!]n]12ipmlB`W|xD5dWcOK8-Lhş"BphXCԉTMl@8yf}&,JxAp NL ?@4D(@(ã4D#8eD/F.&B[[$TpDHV-M/lQChIC$Kԁ(:,Ap6HP@eO`>7l< 9Pޜ|FQX@%,J_mBȁT%E5D!YT ɖ'MrBMbx7 1 ;$+bCF”3djh*T]Pƍl( R)p| iuyu}}X%kyfHмBPX`$yD(XTe]-4QFCX|dĆ\(x"f~C袠~/&8C&y*iZ 3lC|B:Dd$ <\nI/"TW,PHQl@=TYVO6REXv)H(k?%d&g|E< Е0B1f@qv@G I C\lD=:'у  Phͻ,x4GVBvqďb 4H-܂ ChDthDNH-"@vqDÉ+YL{-8yȁ>"D.6ĈAX/bJHG$K[1_/i-k>D*0BfnJ$zma*e{hp{{u$Wr/A)t5PWfh)= ZhH @/C{#sx[G;ӣ>G8C, om-XJ z,n&hBmȋј/@D%qce-_FB+ )3P|iQ*`p .$pQW!DMՁH 'u:N{+ Ia66 Ĥ, Sک].kqG{XR˼L=6yD:8ss)Gl{ er>D Y) OeN, \&!G@<[p:Ƒ̬0tHZ 7D6D/CH4P20_jthtyB(@7`XCgGsH~km"&wZzfFPERSqC$wH. ^~E?X̢0X!6BĀ DADQeF(g@EzַD`(d,0Ј;)t `Cq>O+WZ-lZ7Y -XBvmq8sD;4go"q6Oe8L8iCZQ!?P@7Dm:D'vX@Wj#h *01J}Ƭny.? z,d2}BL>d |_CPDŀ #Dm/u}>q721'o%P"|YɗADe~%Swe娷#> c†;PqGqQӑ0G5#[8f˓`fN>6eWYf}ġx(2/۩=`H!=8#71:);I͟v#=<"T|Вva<?ܬ8ǪX 8jgQu/)LLȄXX̄_K 8p3#&32ThU`5Z^Y lt0qϞ%N8(d#w9.&(7$Zt& bh%(`;:*86nq~x#[H~@ k:*X!F V0eV#e8!78!TT&Ǝ|9:Nxƕ7#)h:\IWbM8/<" .9q= [VN;p#ivI#3S8#Azp( (8Bf p%=&)Ҙp8,9 0 4ӐLTRAjZdh2^WcW4ed3l_)`Ze }T lȌRNlfu$9 #Aʅ]#'8>H7} L'ۡT D: (7/>b3E8B$F> e$#]XCu0c>ъ'7R d-I]Fcw&wyA4i2&J5)$_RMn"E~qqSB.BR)Sя>#b;[lTlHfXx 1UU'qh{;y&p=4f1ElV DbH@w3t~!iF32 $T=E>(t"zaIR'y 6*rd]3G#o\Gl!*gF8hX-B@) 0фP8:刿HDGOmG!Me AaC_x6{-81 `E!%[HLeyHtl6duu~&ʽ!& #ItC0ki&vs-3<[0:LEV)Lɡ{hDu!:BKZZ:]/Uu2̝֜B L @8" 9(/4 @2'H/N/0!Z#^-# wr%|P'~6ɜ88f#"$wBt!6[tgpFgba`<ci?y?Xh%r  8u" #H#<$84:B#O?AX#̇3!dF#@Z!pjS9& j\) ~H8R 'jBp9AMP@.!747qlAXRgB!A Ťe#9 r@#(&D ZqAb>c" c UCD0 &{6!|`0K04,$T@(.#S#dFM79^Dօ# ࠾MBdYa? +y.F9:kpb< @c#16@c \#f V0#Hl*^ NA_?SRgaD#N4pIjGLM;"*T5Bp$Z%g#a8P۠Bn5:-0 @ :@aԺA#WhJ'* rA0aD $#$!&ȁ@Y2&0%C0 vǥft 5$PP ,tp?b $mczA"}Ӧ>>bC^ԩCp g6E$|jJP(#DUMKlgBRdSFK(زh2ĊU "؅!*зI' C5& *W@* fIUgf/"Mzhq PztDM{i ѽ,!  Nͼi]C%HtTnIaSAM0`p=m57Q c ֤0,C#VoaPNbPWZ`PMkTg$@5hGt؀rҊzX;]S D @Z#ԤZv<73C/3q :<A9% 4dR ) lDE+kQ[~`BnC6Vq^X, A(vS PHvCP"C$g~E`dqSЂ9 Q}9bE!E0JeU d1 N9'YlYu6$QV (S= 4͋Ґ0T`G "F.1 #ZRcYt) u4V:', m FH3^oR,RdX-FceKR^U@D ]LVхp8\pF8 V\`07# JRM;S406 ^``s`WRsY{Իja }(R=bQ:0hgrgu,x1; S: "AR_&5+]2>ZP>nLbDP֗f @;Ylb(i``7AvYfS\g.@"$PL?0؀C72Ģh`@g(xAJ8j"AD9R "V F" x B@hBZZ~(ŦD =%Uz2P/0BMJb[ F &AΡZ S1U6gqCnGH,@yFC+@E`;vPHvR"%2X| RIN̊שv(0 m{8PdDu[&"@d&AIO&d Sl.QP>R Kb4-PG'&H0)u(DAW)Q#:h(|RȂ,F֬.@ AٖRJ5:j:(1Vs@0$"h![ܪ@%>(Kk1N@af%a1 B+0zDr!j'E9) gбb'`#@Ra'A)QJQ=$0j sAtP*X -Z_!)|]:(FΥҼЈY&5@M ӃͨajB'MR@ΊPeag7^W aZu,7Gݽ-XZ" eqzĢ̣#,F)ѱȣӇP @鏄D@v(`-Y|Q-I8щ?b   O)%!QS].F |de0b"_ C"(sUGb lPE@xIJ֌]6|IM˜0 YylΤ3 w" :tVN['r$`EZмV 8g\UWD6YMkZ \$eVvANP z9d[q(V' uKXt Qh5msQ$Y!ZnLAc(l e , 2 !錢:3f67"RU19,\! :@KP Ib` plVG!7 /'0LvElKPdGA@ fP1p sFe~! \tQa g ^piVujftyE1gTJB>:J\I@CiKI!İpDuSQ'F0L±i|Wr61f1W9cD@0XHT@MB ε!dAŏag\({laH(x#rDo8Hh $Jz 0 -rCST QE32HHF1!R2!3^L8!P xl`x,@DD|8!D`h4L (I!@*MpM$J"@@D!97a袏~M8 CSN"BX) 0l XVJo"<{ʅEVP&x^q0@VY1/1 bI +ԂKa0]t9,0gHv'x6Gk:2kxǼJZO?geG-߀c9a%8o0N;Bi6 K Z&!)B@Kp7b K3& {ۉ {jE: ! B*DN;S,cUnv{YڧFzL(!qpn|"⠎0\@I#5!EAHQ6"(m:-,H=|Nm Fx:)<x`Z9uQØ&Zm5W, VZ#~\~,o8sβkZ]ce%a@Ba*o 1@a/ъ!9@w b@ !^<ҋT E A& i|A}G_cBJZU;EH%ӕ%!UR2tJZO\N⠄,!%y VCB4P8LhC#BF(!CH8$#&BVK!+AbåxB%mX2 B!!}0D!#(n)xݟ R`Dx 7`07[| H'L2T&2(|J !zH  VX'aX2ט t%t-} DVbա3]!u  ̈́X#!C y9 Gǃ>4G o7j 0-FT`;ȗedThЅ" r@b id$0e%K(x`҅v|B A[BV"NoQ/!Z td D I.'· AABLdGKQ2}9 oA?m1H4,U -rgTQ!`=v GG( qvb5(BzȨ" 1 z(Zt"gh +!.CY ?1o|BȺG <$Z%cڋxХ@͑6iV+@הjk6Eϰmp ".Y!G7H|3;8MFl "BH60ш 5Bʘ1}tA2$O2ww=;S?DD :poP[jM@%x=i iIDDт"G.F4mv WK j ߉Lw<̀us3Rb8 !r.yT!\)i #Nor!@̑&d дd ^ `WKCd6 y^e 3^q̕b K% lޕKz]fpA$- Cl_"[eIafa L x)5&Se9lJBѬ6R+:hJ1b,':I@o:Xd+(> U&f HQ$Oh xi CHNH "+#ᦨ5l$ix;"D;PJ6l@8 ˝cҿ,ȑ86@"$oy @:كHq 41؄`8H`Mw'`"aZxPI(,Cuj C=KS0XVȖg8KKh\8HeC#77`: @DH@d`:\h>xj+68Ѱ#A:A r~;4<9K{ #}@  9 B ˣGX ,@:K #в++#Ӑ3Z3eX{Pj#7CyKȂRL2 B#@!XX/p=ҁNJKzg3hx?16?&Krq;&R\SP@$<"}{>ȝ{MIAI1A :J(H NKB6!|sX|;bB<\KB,| (Os2cf?92o3sPb/(V*qxuA@@>36P:98(L2tdZD00تKD0[DO؜3h 4"4}:8@$8#0c:C[|DfZa#s,A>7 >,  0 6M q9B&&6$ixY jyZJHnIɠpQ/@qAgJ0IdPM񯠀Q_:tM4iRh>^9K !H=XF@[Q$x  /<7,9`)|:Å7xOx,xh[Q-9ըE<!c%% 0z-K`W9!k 9<@FKZE$K4ŬW&#Ȍ<Ӹ6¼4 9N(b$Sq$A>A᳐~P;rG(`y{%b (i,QУX@S:H $XH%3IɁهIxɆ|gH/EZDڟE5}Q'?/IA1 |A˝(AM݈߉1p9A-Єr$P=2J| V8,X :mx3? cEjJc88ԯq1Fͩ}mJ# dFy "86IZŌ%Lb0\`2քEbi80Z|kC`V(3UVP834)I:{'9#0Tx(Lf$\jxm:Tk=>P L8*Pሇ(K|/IkP UYbل_Y%R@ɇYQD_()':B@Yȍq1؀ʐp1 6A=ymՙR|<3#plP#p$8$x HJsHX:brXUPa20,('㇪?}݇ayTV3 c V}Weú PW %9ɂj2c k^Ѕ5@*嫢IlYD%wSMDk;W9 x8EkzK:9HV,'EU9X(69 mj,p$Z "$dC(=ƪg1q x0f>ʊDþ"xsv|NفMEnH3Q߄+0}`~28۱ #o `A. @'Fm :p$'2Y& jb;B#~@蚸 YFYH%$%&y`jzb钑}@nx'(H\se'ilsgPaV}|1m؆JA6D;Vtn8胴X~%q(b p qkm5o •"  -ӏ/ Us @q [Kk`p 6fāv\3LjAs\0704r5iGJR͠@/ 9x~ӧ,p A5sC%B|m4Kb}J=LX:38% ]ge[Td`H},Ӽ"ه@Fà/&wյh M%p۶V-cHM]'O>f TM j-rܣ8Mf SEI, *2 #+DWxA CO.g  |@| 7 uxNKh1 .` p3$@132Ap3<5S"@vxi]0xJġAB*&eS@A\Ⓝ_s1$ 6 ɄJ@1ŜS̚o ' $I -@"$i >edv|ȣ}\C"ag1:gqM1&ްt P-aG=S1`2Rr}P+߼0sIV )D P` u)z:GDSBHj$A1zDr)O Œ 3a ќB N)UB ۲VVBn 99Qr@0$5>A.P* CB=e!_ڍ~p$j(nNs">Ů OM:((#8!FŌ%YwX#S ! yzl]rP4ф V\" YA&5| 9`1a`@,PO@.PbhMY>19C $աN3$'a)IZbO+])"IDƒ%ILԺcHgb b3#I7蓠*DlI (@XA*pBAΦ׽{3Qe9B=rŏL# )YZ4R#c2(e9!M-J5^Кip8h  W Z`1#0aFp8.cCV b|'<&݉\ԤgrNR 9P?ZaK0ԮhA@Z’; `T}cD M%G @*h2 N<,d!FR7H# !$M5 H>p r<P=p| ,QGY g͞P5Bðe-޸b d^D4X/\+C &W Njxc XG$Ip4a>qT"¢:^J=tv [6Ȗ7fE{ԓYI,>t9 I@j,9L  A& !:m%dp ϕ =tU )OSZA\AΔmvuܜ&)'Jԇ)_Xd`nuhү~k׺֙'KnW;,Aʕh o (#܊pX`\ i`Zp\+`d@;> K\Z;A&@x.F3 r)IIF:J피d, ,$rA5x퐝YA|foxq c5'.v/1)2'肽@ ~bYt+*v O,}y"5C+^{ * jEqc36Ԍ-369Huv>d5`dW>Klh:Pk2t1D_լD )AH 0ȋٸy ( Ԏr tmݘ͟؈O[WW["<\x|D_[#2L6ȉ,ɉ6H< pɬ\aD ʄUP>odJ=UîIs'+H+(AEB@HGA@۹+L5HD@4E [W TTOWL}|xx@(P)LJ*3DAx1,hto TAc9$VW$ȀR%O(YMAD[]5~7GT(lQ`D9Q@u#D=* h`OAA 17O̟W`1A$~m5Pt R@A06 `,` Px@Tֽ\OCAET~ŒA<-A FIəRIhg/`N/:ȝRAI ؍hНWj0_1 ZIF~xD`uvUƒE8 PA5Ui؁t#+&(+$ vaalB."& DI@ntIg90B&hx\tk c0Zi%6 (:N(hgG TJ9eG]\9>Dp&$zc8's"ްVQks){ Rh8 9\j@[K @wQf$s1& T Kqj4OPj ;jHST ..sT"Bf Ȳ6kmnR4N!:Rˈ;N7yȘVȌ\#RR؎&瘪|m/_gkݵRmBFUPF!$bHp/,qF$",a';!o =TVΉpLJZiUH6h$>F7D%,>9N8Af8ok Wؕ "#9XjiPo*\,&_FIX bwޙj#Hx+#jT E )/v CmK"jvYheV *\WN"l& K׈{j!^)> 6E(&k%la/HPD h""؁H &r $H, J,Û"H@@ ,"Pg,K4~Θ -4Y֊7 @51r@VQULXI.#-0'܀\[|CGcAA"?t7rBం,pC\&2PG(IH;"CX+5DF$0Hۦr/<8 J\#)xIJA@F\R*XNxJd-:.4ma).xA`1^UMp<^p"d>9 "2|85NY0."~뻫:"p?Q ,"?x8O]<9%miu׽kAOMpz(xgRb0O Z@* D"r kp >`^Ӏ5O\ (wVD kDE< K4 "~Z/ \FT_p<"yq`$&0pBoԁ^BZd"Ї18$ %h ,?'If2s\D.h_P-6U䒪`;863_!!r 6R=uY3nW#ő ܴEX" 4g1*D`mpF~c gE>%v`8C9B-as:@Ov򧦔=7tοImdJh +4yԣDa",a s & Avq?0(R;N dq_ŚG")"nA"+=ɏVY j"lB4&Nc!5jB d.nľ| t0*zD,H.6D""h0$" !H|䑲fd8o 6ihmZd/;v@|D'h -v\rEq$ "*nG&;^k)V*" "Se1 IVQ\ Na"!1nݼ4*@0&2^4P:aT) _b$_CРj,%:h>GG Bf&^78zb%B(eKm.D5s) &)3^6<apI !!B,iB\tD?"Bj-ٲ .D" !VDBxh8"Z!7'`A 92GP/!?*!!D!RH|@&ȏAN7x2mTobJՀeUPŜ xb6W9&XM.aXe&vi,)&ZkW68~`WЀW)" d"T*`.UʕV<")¡}m jb`9EHkd4o-(k6.$΁;."6#9z "`6"9Gi":# b.b2"ԋ⛧4a %^K%b ."Hڄ{I f,+ gT\۶J⚴Vʳ<, IKR 9)h/W`~ _ kjy"~" &&: k-z&"&Xbb <`!b ( O所T63(;C8|Q0H9da޼9X k֔vi%l9 6*uЖ>lթ֭\& pЈYyTX@:ਸ਼X8(hds0B88655q'BZ=!=uӱ!@LBOC_5*PH ]{k5e*:?C)ᾚLt}z;@!O*Р˄.'mpB5X[a-bʕAM!QS8 @u 5+H,u!)DA8V9=ݮ-+A2ؔ&B,!SK-ZX'Zn6$Au @'~+,uЍ58K5޳9A1DY8Dt `!V+3@]Z0UUjE!lpizupPG|AJM}C"0Q7x % S$Ŵl^ 7HtC|Ŝ#oJ4&0O'ZIATRg.e5'$rq+'lEB@e4Jq[$p&@ap-50V62T!dE?X6h Vj0 6BN}e|Z=$D|1d zp'eQu^ЂEM]XItVԝmE ig&S$1JcẐLzc $5+!?7@P{J.Mf\l!!.2 `F0  @#" 0&17x8@=\70U栖*EBB@\R6M`lp"A,ah, @ (G"q$> V,9 MO&4 )Ch8*izrn R(\ @ ]E,p|Ґo!Z)B6A]ʼnY?dq Y&fP)2"B D HPB!pBmф| AVY"esfq"P"67E͐mgRMȰ1p!C B45%ZaJ-lqHB# сWWS hB "@xGC. a05J]-PrPƚB70|i%RzhE+ƢЧ>RYhKNpgLJ"x؁49Ad'XQUl tu{ZtPTizW JQrbEVh9qծ 4MJc2 |c?VlB1PWB tֶQ($n+@B" 65QDX05T&$T$61[xպtHĸnSPCК":dd]W.*ds%y+X$ &dTG(Aڰ*0Z,W1jB <>20fD mM@2bS&yDRZ2VA !I1GqR/%g%#} t KLXcXp~.!ȭW:apoH/0~hAĀ 0p&K/$pI&uIU=4D![V3W <ʝr6rP7ZÉX)>mu蠓Hf) f;C%7F*P2ek`V]r u<!(GȚ503f PBd9fT!x@H0BgZcd@&,#Hk "dVȩ2B4"Wi g&\ͪ+3ɯRQWek?lY6!ōbDW%tBt@R,:= DK;q?<r $Y]_m\ (P%` o uY" pYrDac+NcP=CbGa UsE9 Pyq )ZV9YYYhpG&%[: sIu !h@ZQ%"ط.tejT {mI@`- %w@@\%3ag!% Wآ_0S$+ ng42\ i Aedqki@r"-S4}{30B}1eMoTeXv^GUg"J% Pq#T0\AmZ ~@~E JN"e^''=VB^ U u,pv_ E #rp7T a ur +5=)`GW=a'r$;W+:Oe)DV&Y GaPYv Q1 [ x Alxݨv 80Q 5F{J~7v ӣw~Wk3 @Nآ7 sUNJQmݰ 26hXQ4142 G`&l҄iB!_s=#\FFуAMSb r0_]8n7|s 0@_ZK6g)M!o} ,sF,$ i SSp6E$k|ӡ2CrP (`5EW0ePqJ3C@z |5sN>f 0.  va@@4DMAȥ%y Z JġU7n+%a`s``P2a:O,TN_ai_op  & g@ ° a@O[_MFPP[ FQ9Eq9A+G8!?QﳦSwtR}G` `"9#~yىp0k dY}$͗Fa Svʦ@fQq .Lf%j= +H p#UR.$xÙzkH[/<3: 3Yٝ葞6ɩƧG| .]q}qi b~ՖC_X5a **QE1icߐ%0p 10 N9{op0 N<Qd2v^'â 4%VaR&L>dpN!ItsN'q9f+tv*[=N3I*eЗ 0 5+E|!ϘR" YB'YA41E) 9.  Q̛@[y< q28  x(ΉXMXچC}06QF,| 1po4^CF0 F@z4%SWPRP3 1  6I@ 5]P"Zp81%s` wg%Vr83|\:AI:=bq4EHE%'`E;}Pr Y U L4[bujQLr#p6?NQY["jѿVkԗ) qd!jwW{qZqXgP75 cd@bj$Ċ`gԫ+ Qp`̨b<GKܟwKEP\ q"| Ȁ AĠ !Q |7^7=dA~l 20 @ۇS'&Gp3[K1*Q*Ga P%p@cě`|U e Nd  Nް >:iR&*TQP\Plmn* U#2i0R@QAl-d\qh S'{`*p 2R1ET2 #LQy6,0B MY ˂o6}| f۱{44\Ѿ2Nj&>0@y6 P|\S 4 DZ@jXE0 !`J@Q \N oPp1a^%2_ 1ޅLk`b` 'A_WPo`EW }z<d:`PaU>cP{'o֪^b 3u e{1d+pv.h* b]a }` Dle@-w3Bȷw1u.5U#E]J'S0۞Wg9Za!@ F1{"6QM~tU+Zl`,ȡiqEk0  !] ߓgD1yK%JqK3]MzЀI0#L%Ɛ<X : o@ S{% 7y;`: %YL! m`?/Z`z *?>Ұ(_m@(/ "Q€`=~lhVC`Jb=plkAD+"@4 @uH̆Ibr0!6pU-}kESDP9um"Ll,RNS3ŭ",!#n @ b(N0 #k:<qS,`!d#T$!CA{@ @ ;dHZs y ,  x`CN,pj  @$!a `G9ܸ  KR~"MRe|[$ِbKrI Xh(+Orut8J.2OSieQ~Kh @ 0D'E@tDhrKZg Δ# b]2|H:BdEkYے>¯h$_dJ*~+\aCܵhN":Rlb&*^OU|#@ 2<@C ႾpV#{_X4)>xB,$ m8t@DT! , :a),8pUQJH:b6T"hܕس$4Y\CL)hJV/~!ݔ~ 8 83BkA e-:0m=c *psg`jCj` 9C RAP\X"B%%Q hg(b ElƐr,-wleߎl 2jL'C!nM4Y@C\UCQ}胋>"H ch=0YwlHgJ">:Bn&g9k@o!(nl`$0XM,9gv` F̲n5.(( 4rNh) i H;$llpRuy]GX4lH*NB3;BsM(E~HW =Aڲ.Zx{/8 {i:h 8T:p)[q׉?@vY(-npA!/q BiiA w)2qU JB;x7Ocj8*0똪9*h*1#+3,0x!"H)؋:8\`9xI( ʨ^ (0>s*)6(Q/Ϊ-8i$4@hTxXYAx/('@%:1 ;@as8 ()  pZ/t. r:x/ @@!S ;x!!ưKȂ,P@Ad{/2`.H$`Rq^^h<9dk%A!V *hxbʒ#hsK-\poI ЃExC(3 HXQ(o,0:Wأ+BD`輫,I3ȎxKZa) RcI Y+BG6)x75>`# ':꣓ X?/H 66ۈƜ: Z >ɩK 00hTN&ӳ =N  ۨ+r T n@(p9dqy3p ]x(SsP)P h /A| o[ j,明*l 2 KP(5Z"0HyЉ=˂+DHLDF؄eRC.J[(͎0 ]jM 0 PP * X5*@Mk ۡ8-lsࡎh{N ǨBN>X]}3X8YpFBـ=1&) XȈͼ ZVgDP{\x7h:@UD"%вy*"Zb:8{Yb }hiA= jA)dцHÏx&bXܠZ@҅@():2 ʛĶd$9`K@L97ÊD0E1G3ڏwPGHX.s#)Hď/r1_D>zT@ãʁN!Տ7 4<CaЅ3@1ː7Sչ9s {l`ŀ%ua!VUՏxx1(%wلd0ȓ#zQR0j#W Ď@녷"φX ](/X:PM!6{US5!ʳ#s"P?ӑy;+ý@g2c $%H?sDbDmՅ!={< ʳJ#`}@ Y# -ER E25G+ڶ$E985{xŦ7pXq5E( 5[׀b% sG E \[m>4>a8BMm>HX@G*tUV3B%ͰK ad^^M݅sRx ]D d͛]3[0(7Z^x)l<fEE8M$gP(bUP RX»!ls80qJPx^ 0ɂ_ktlM9fʥ9K8*P `XZK 8iX4PzT!0[mtq]E:_ 2sk_8  <%̏ c8@#{ە Hcj\U&`F&Y%JC J&rR&q5 Htq[ SΜxϽ j9т#]0^ ՙؚ@@ `nP l!epSn9@787 I<[0O, I'(30DhXǻƁ5%& }_ [89-H7L,8P^. Sp.pғ%6:6 @XR,v/ q~"d  26yĖG Ϗ`(h܆:Ά$)2XD*X 0BN3k?`Mq4W?y@1tچ4e,6D))I ؆TxţkPxh!S UHpc{qMgЃVxe{h oH* P)3lJ؋7^ ^dn*^o(hX=}؄x؄tCE1o8caH \ZEUPيXipZhӎ#s 'N*H[Z4>ԎiJirʌ ȍM]9UYri;Bݎ0cze7}h Ee` {'/'܎Hx])_3HA@h06/JMD=zĨcjPwЖ>H l GpyP\Nׅ>bݡ+-2+;.} QD0`h b|YՑD(r ؄Mx4(/ G\[qs'S 9h*.(bFኙJHҤ ^ 9 8M UFۑ06:g/ + )!ŊfL`", )b$jt@b] Bx6n*O>IZlj۶pTݰgѮ^r[X8VT@>j1> S[x0gdqc+ U@kF*]G3 *:Y%5g9Oq)w:. @ ujm g/Х;x<'z M3 7{u!2e)0cppe9Gc|HS \" `E;Ղ}38 P! Ms-=-C \EWPH0HT9APH."Ax P! Ѝ$FEZp{ 8pDTN OPzĉ`MEUTSYO h9e Xc 0^:b;&0 :ĕ-#9]oԑ$C `.D84.pP- :*`95+Z( t`CLB*Pƴ9.F7lqB-73sHąE@2+BQ!D-S,4E7>P\NT`;dMn$Q:EfM۔R!EdQs,-+!P9eH*: 5ETeQ#,P &p d`Q/ y!TCK} ,84C]Re;ׂ6 % ̆gư :8c< F+Pz3J8h7]j!3gWw| 14&ZHD6hb+A^EGE!5ZH7ߏ6B$-$hA?@ ޅIDj!)a,Cݪ Q cED0u8SO(L`NOz4D^1<tAC:P.srtMT$[^E,*jɎ` ,KعD\7S8pHcчo!UEУEրIxg5[0\⸁6@!F#V$s>l83DP8,D@U # ĬVnB/A!OAS%Jc`Ea8P1K)OdžAGg+L$pJs!r#=pjˋվ&+s!p@)hHB(Rʘ`JNrmXHvTD@["hyEJ٤"ӛ Ȯ"h77@}vRPH"[Ke(QaYKlsHԢ@ZJ$N_!UJ 1CgN:P W, 2V"TMCO4p]CJkd0 #$%簜a\z[sJ.U49 e!# `y5'pE?{y@"!k^CXf.ŏM7&H6.ڂ[ jJQFr`HFրBD <9E+r`T:xCѓkw$hiYRA"pbH5ۙ6`r-3Udl@(@=M.h#!^H;q7] `M/93$ obr6`Eb?>j؀&P" 7AUdj@yEMwa(…< N*#Xb!m чLlRՇb(ev/]ClJ%R*)<(qJ1/.tY$ы03O UXAlB؄,ǙtF -1y! :W`g1ްCZ Ua1 &[Xi*z%E<k\+'#+<*72Ѐlaٔ8W)q BB)!LUM;#H n9 EBAVS1}EEPνU8E8lSD=ȍ!m X8h#9DmO'PD YDiDNPbH3"`LE((KlQMm؆mtK1yq `L`H| Dh8C`4 DTV<_xE1ć` ȮMjEP@?p,"A<cCEV95qU1|c!V@$E.'HT N9KN9Dl%hLC`ۿ-D'~ ܵ(HHH,E8 QL`B8QDVzpY]؆C3\$z8pE"dIMET @4H l-''XgJNke(0E%U2H;oܦotV?l>PcA0tE/G,حC@X[C<@.-8D\ML$C\GEht(@7tVF1MFCfL`Y]A`|[uZUEdCtZDPz@PB{EUS~U@0̬,C:GY-A+0,lhE3RBbj†C!a"rݾ<<}0zV?_2$F/ i7yOTYSF0sPLzUS<3}țmA8E/By B B=qLڮe&pJɍ-0 E$$ ?*X7 BZD+)( &A:͑WD:"  xW@PYDf40<,EEʅS,Hq`XFpk<ɞhP^J-t]0@AX><w^U`#N.;Q 8ÉQŮ-B*\4(2 WBP(KAM%.DKR[9A*(nk+@/< @ .y^^K uFP P@~qv ٙd=L9LNW#-4\dwrWR<CH% b )tBIA'چBE>B Ζ@DyES005+ [@EtvZ#.(WZDLAd<;SHl)DS)[Įx-AcPpe J,?i F:.#p0{sV`0<[X@ E! F8ZDS|N!"l G )4yD3AxpM?HOt3T< |B&'R( <3S 3?-BWa)qz#kc68qm`hr@n++aO k'?7ǘ7>E(ӦN? g(`MDEp4BI0wIP UZ!sѯЦb`*K\'`6 hEs  橭yt^H%@KB9[# ޸VZp[9HG/" "R8B#٘>[FZ1,M!b 0? QȔ.LFGX`RȆh3 = Xl#j"hΈ0R @4`"rRG: (:(   d3׉i* e=R#)(f+,p) j㙻H=풅&U"4|(hPpr 6SIPCπy^9˧šhI5" 0V$Y0^X4aeH!$:n0Shֳo&{O>B'%#YNvUcVp@ڐgdfgTRm咸#0mVh CxTכoJ"Ԓ1#{|`Z"b,c.ْٰTA0*X@@1X18<"k#r&RS!RlV7zoX'܅G Qp*v&,xuCH@~G*QӌZYN*b+0jA]Rc$ -EOe`(`VMX"y  2bF7u E>! a!,gv?i Ak5O@ҐJFO^#勈1aGi@bC Ԙg= 'I"RaDJ3>FCh#W)]0F%7d'0 0Zh*0vi@!ĀlاS,9vesFd;2@ %`>:1I`$;#tE$@te7AhqUbB! *TdJNmƇ:4Ept$ !j#_iE2PLfU!aj%٧h1£T_4B:l:oj+GpאffOQ,M,P@u qށ5]KiNBc]Rʘ$EQ&r<P8 5.n!~ Oj&ؐL$u D 蔆 phh'8 [taqKg={jZWÄ& (Z 2 l~\* B H4 $1 A E"@bHCP5B%) ~@{HF)P iH6dBRk)-hu"/C(GR9<b;m? ,qP]e޷a ߴJw4n3P<^98I2ȝ?D1~@q}gd)KT/@le Fd  5&[rKM("[@+8P-ګ x'(Կy=QN ]"SЧ M҆}3}}. )O@"CCq/t39GQҘTTzVr*@x#'" (ՠ @bLg6D }ɞ,dDPs'`$3F0Bcg,@8o >cU,k x-pB 8 &, <.t-ffDv,na b r z!Na`qhn,U\[l!~D4nsIHF@G!`(yn .,ƀ{!IeR@#Ą& TV~ P"n>"8` J2"6(,H=A BQPQ-(RRa2wBZ\b"&!( E->>VD̤W 5EFC&?og()V(tNR!TS.*c^lh&"Ă,`F1n&T!! ^yBJ\ňH!AN,. A@hBJ)>$moI #"vCTdYfJ8D=K.alFlof(> * z` F b X\ TV B=v1v@FJFnP.ľQd E&+T,"J0C+&2J " ,"*4,v F(Ә?TIg,fOIS*-#" !N 6% at+(@A0"FR!*,6tˎV!4~a%` dsA@.bǢ@,*H pv9WHD$b! ܔd1abP"64E/(@SC'|' C $> d:C>bʿ .F8$Dro`?rs>!(vBT!RD= $#jCfII!m,sra$=! \A/Hf%35YQi+Tə$FdJp VRNZGX\N&Cx&@ExVDD@ :nc/4 " H!˂Vfy"`ց)X"bX2@ ''Rae"(`@$Ғ}%RWw6B4 7`L6UBFAcLc0&aA!<&S"@2 dhni>mDlMNi*a?ia,C$D?DxѼ*FY4`f(x i^Ch?vBk?ئJBfЀ$tbW("Cbd !$#"^&ᄧh3q4 `A )r@dc#؊Z)=+Gژי<$DlަZ؂^FZa7Ce&  b"8IY0`n.Z i1&v<qu!6#F&#* v GI/DTPV ۥhbp&LP(Rid៼`Feb3 2DBi"bEa+BJB\'z@4" jl7`&"H!Y[ w]Ե7 6\7 ty)^by`4 B8enN{`"^!R.F8D$v6n XH<ΧF;`F@ămi Yy"H7 +NTw̲ h'Z֠e0-t \Yu翉r^B#22E<IHo6"E"7r X'FC,> &g-gBhCbzG>-a@\ (xѠ,Z{* qs Ft}v?n<I'D"t R 3 ~(9i9۔ 5A’0f\[vґ続Lj%~miӧ>A@4d 1$ 4lъx7^hЊC-L$N0t w(r,P2ƒ5DT?@>045 "P@XQBB%3 IDCZ&H:0H BR 6 P 8%`<O\dtEgq Ĝ"@64w0è1\U00` H@F ρԬdM $a%e7a2T .)іGch8YB; AQ;w"$;XR5".Ic|^fK,V`8?n"q[-1 LN`?(In4QIXå!C@5Κ(pKXP^ C^rHT#XVe\X^ Z&cA" ,Z5)1B늠 dɧ7>=*BndIN24ZRQY`&MȖ 0iUYxxT K6FȀ&mdm6:̶Um!*#A7!lnB'(pIߏ+W1&`Ic8-`EYiN~ͽyo79Yu$ AqyPq MlT d `C aHAԠ'*,h' f] vWsP4a]%0hlňlhCMŁ&/(OB*3ƃJ: -arEDxBrC+$ VLRivbBD!ԍH#lB2;Uby A° *A &KBdw!S^qD)D 0Z+@rӔ;" WdЬ@LHHyppt2ȑBN 亊?Xڿui/.2TPmGmu2߀ 75'q%ڵ]ʡr4#Q^7ҕ!`"_r( '1xq"!;lp EP5%oG8() i#0Q64 &gR@/+b D!W-p @>kHSEn+`vD+owBx2/G/f0UsU|mS?t{ ! y<%OXvccQ|ޣrsPa40 n " X=Ӌ51lR'fBfuptA 9ʐ/w mku[EpP^Kvp < q&q# сE_8Is 5n1FJ\c/5(b`Yi ^Ah8Dx p!\pq ߰B0XPPFF5B*-88%7&28v´!! 'b U;b4t.ReTwcBh`= 0!(thx3]US"d, e|@ 0 .Q2uIDqaf _ ,{'SgBuycOJD-J]x!}iBf D.+9 fYP p} A w&bPAV ÆflRZ2@2ѐ+ 2&\ !":l1bIcI !s@q*p^C7F(q)"r;:0 3` 0])R\";iDM`=#Ђ,@!3e(pVOc c:Hb3ɨ!Ca`:×J@X=vPDR+{ a_ ~2D'|7xp 1AZg @k8@zq2 Xl.p2 $BA(9H(QI={ٙ"R3YP@ "I')0X6R/j<'yZ 8wڏ#[([  2Y!!Ea3(:QL!L<3Ks qq _<ˆ3q8 8-ACiH!wr^!^.z@3ub`;0A^ o":xzrZ5@4` )ScU򘗩c`;Kr; 7%c= Q%?`0t ? *!?@+ZiB A 2 x' (,r׮3sfQ2 .yPAC Y f1 (@tۮ0) )\س<"FQ'U;D ~' k I(B`~TE0lS#%\ņ @2p+2# 2^5!!qF{=\q`1F "o8ٗѧ@qpBD-` ``ʔ@`= ^0 Q##U4Ҡpt``99HitF%"W®c䘒(HpX 1>"أf ɨ%k&uu%<QPzrAi3!R  @PSbw& +4P!qA1CoQQ?' )UpBעKvVsqi E|EeÊACF|`wW>p6p$P'KD B`w,C'l'LV p-Z2 !>\9%?X)nAIqe.ZUP;\~#4K9!b @ٵ\E %ɡƧԧ&2Ǐ";s fMyny Ap A0 ;B9d>M_11]IyW%֕8Nzd! Phk^&ET<rm0 iu5Q9* 5 @Ak+M5;Wu'RBk0A5 Ռ$d۰-{` Ef !1\1@hd  =lqu߈@ < qFl "&2K3[É2!0 $Ä͂"Ɂ4]A(4\`PGU3WI1P;'>Aug[|w804 594[C^!"!b oF Ni ( i`F!E$Y273<c͘'0!%ZbP6Yp)0r,9a&ыN'kk-lغbΑIBp ׁXuV `$p;gW]&}[-Swpj ]Pf 4m*'6IU mڵgJ0=f 834{Gm~@=AxB2Rd xQ^)k#J˻-76 `墅o9+.[ jdi&3hLSΠ(9f+bFk>giƹH+[@Gީf>'YhB2B R coQn ")+!腕^:3( I&ad(B UoLh5b3 ڤ fmr)-RE 5Hy!gϚ;c(7JN"p6@f f (j1?i ^$|hꆑWC$8* $"  -0 Z(J.b(H/>f)Nte'u0i̺ 9*spXPux]B6 +^ei}1@|H\/ Y+P"P CS҇1D RFPD6t,)xq8) p!b]Cdj9A\<$ PyAaMPPkb@}L 5 UH{q!Poƃđ>ZUh@`Xbsh}t 5pBG]%O;+(Ё[|խ`u$Wo]%R 0s>!FD pdK #r3D`,k=%𸻃Q 0-@D:<x:3X5iր"8(!(/J$ x $;'g)KpHhę=&('81@x< ċ:00%Qk c4 (2 f!;5r:Ȟo@A)]ʁ8:8rpX PuRjb${`v W =Zcm(%Xj+`Ed4eYKOc|209 - NC h``hw32 4#cۊ5 ( 9@ Ȟ0(~ (ԇ ۀ*@ ʋ硋B(ل)9.),Y% (bArBbj0u0yY)88&V ˣH(aGITwr'%[9ѐMs+2RH 2 p!/A#2cȂEI)hֱf1|j:|r2L/!|[p¼S AZbhXP;8}}_Q!앙x>B@Hлr#$*p ɾH fy@ɺ?t̀r9" 8 @)%+tZЇ==Xk+ߘ$p70̙$Аbu% $-B"@/D@Rj_ ;L# E N> 39dLCiE5U肋1&-X' xJIq '@ ݠ Z8pq =BK`S#17 dVy( 5ݰPU",=[  +50QcK e6z ȢQ"؁,PV:ܨ$}`pAߘR؋=%Aұ)͋lpB;7J( 6xաB@+J :X(Њ h25ih- EMg1;6>S:H܎e%!.D'A$SlPBx\ S)] q(8.$/pR͋X2[#tۋ8^Ұ *<rh0hm0]Y4rx_.3vp0w<1p 0GFS+4Uxp+ aHX ~ 65,5,0 00ho[c ` 2yadIR H_c `.P)Xɝ$:Y؆ȷR"1^۔ tS@ ͫYڃm9K38W9-X7D ~):Ѐ |XaӉ3ǁhT(:JH0, P`%Y\GtӡLӁeHMlPr$h21z# 'c)p!ITg:j0XohJLZmh(WxX,Y@\\rH⁐8rtρRS(t =І|$%I{>H>%8ѿ`f6,cpH aS ?+H"[ !a## i$ up(/pOD`Zν}M8Rԙ6؆=#hbNeSI,[К*=i- J96 \0)p!.&ј.@6d %̜>B E͋]Xދ0ʁ–g) wR/K:"o 0 mEtT"ԁeak ~V+8%С K2^q,$Np78|b50\S  ?"[㿣p܊/BpXM[(nf'x8/@))%̡Ch}؆;JhRMRș*ȡ8K(0ч6]@*45+Ɓ'KHӁQ&)C5bcעdP lX[3y݁ -80LGhC0Zh" .^.<ېcQF$gm^".j#-'gXH1AϣЊ!(8D9f>r1 3 J{{) 6\aJK4o1P?`#xςbPhg5x"2n ;g zY+p i&r _+>؏7#'>yi ꈱMҋu/ %kc5 [2z(o&g.q এ 8[[V'jL]$oS",mhV0P Ppح9xI(q΁ctxk'#3ESH p-!{ xo>~{ abp@(6/cScx:P?ɓ< V㟀xIZw`c 2l o@BLK8mک$pP,gU()R؂=pl i~ٹVB-vК5H(Է'JBR* 8_m•,x!_[ 7Wnh9X2 S!e0a%&!F'W'D•kb;TWDʋBS~PFBzy+PVXS:[\+nHBX5|IM*tp,jH'Y 3Y(^xY,t+ ؄$Z|v  }bC!p$P+H"q2Fz9cwSu b' 2 XbB;\Gd p`p DV+1A8pFH>e)y?|_ G,H+QlK?`UHC)B )RH @=0 C X8P Q-RBߍw EXlU M< -Ph,LJ(v.:<6 W6ƕ o oB6h2 ) ]2$Q{",m wMJ0,/ )T1 !_4$P+pa+T1OA>RP&E }a! ga&,4N4ԥp7WN51%Q+o|J+qC,7P qV /dؒBy  !HJ rYBHCԇwS0;wD1^ԯ/!A; ٹW, @SUX@ aB&& 0!ԂBSBȱr0 2"XxFN!QV ,YhA J dy)X\zPF pC!ƞ mh#!<(3!V"`"Y!FphomWbS69$E 7U(6sFT8&YBmm *9rF݂H2,{؁5#p,(DAL)$*g(J+ !^|#=M$&hqQ^C4/*B!,\`FR􀛋ǵ$3$lǕXdMq( eJC)&&Lc4KܲK)HzK!Iʨ{TB)mڄ,' ~1,d\oɐ(6Uw=Ph~bSiZ4pT!b*Z ؗzv[QȄʐ:DOl,`C@0 0!(" ~nV= '}i WQ&*!v',]ȅ\]!UT"ȽS*PTc6L2X(+6 h΁ RXL 7BU7xUL5!0FB:!m bB #CjRc'nK;;-ecam@G'I[f60i`R%1qo "i=/DotX Bf ZHVP/}-0 &-Nda BpUfAvM5mH֬Xe[Y!7A9Q/Esgү: A8u%AM?{X|[u,Y ;s6!Efn: : ezGCp\$HXy7LP CB`I* )И JVMr1po*$CceYՊ^' Ab KLe?tB(] %<Xa,yBPۈD^wŃІ<ȃD))dC6(ē%,rFT AEPCBp[BWO6|T=ؔviOBI11# }zC,BBA94G aX_H)J &0Y` )qC@$0[$289.U}@Dia6~]!R@O:JB@R؂L0Ia aݝ ], =%T9tA\N/d %\I4%%~γBTbBeBC1NfCHCX@-D+z>t"CPzHD\e6e| W =݇"L;@)b<C4BL\]@!^W@ MlkBEBhfBfNV()tVhExWdB0†(Bx$M) t%"E)`C|%U X?uL·HIK3Udć59NB @heP@$ɝ-0e- RRd9R@S4쀜 HΓ! + ؂aX`EBGlT%VBn5 Mf ^)"b $DB@H?B$By }1LKBEm(x&WBCg5|`B z%~MXVJl'xLrH@dlh"3hVB†(܀GC qEB wT* 5]FB(8*8 VBYQB,RmQIUxW5!4A*(7F,0P EU*č\&e S dz@,` .ă̇@l TȥDŦP8%[BH1ɚBC7 m1l5_dOV8Q_yNւzT@4C#xjBtC%mo2T PD!G>up5@C|xqE *L ЭxjhI-ȀXJvh`ftOĜ4͊jU|A $R%R0`*XM2B0L.W=><\]3kIJM`ٚ)r BȁB CD߈ 7@@+lHDB<-Dh߬\ +4@Zj-) PwT@ mP\`ҍChod:gqA$(5aC^@.AjltkPwHe~W%A)mK 6mțB&0Dv+<:q$C~E8u;D-7f*04*zPB C:j*pņ 0.BȠAȍEBj T\J^ GB`D,.*CNB/V !Ui~K1MHe>d jVWD4Nd'3W\&T><B8 %h& <A(X:mi 4D|uzkt62 ~*x`)ĦC P&Fz% (&mRaD1z<$dwNJ1Bjm+P'RI$D )@*õ8.9$.dB@9  @98%9%p@ABv6A%C?L_ONm!7l4/lEU S@+< )+C0z!蓸e5"e`Ƚ ?Q`H  @n.q e/K88p #vf>s 4Gd5 HMl&YW:c 0C#v !) aN!A6kX"hj4==!|3IuAtEc>vN >F<0SDż-F= &o n )܍HJ=B? K#.22`` Q:C"H䠁t$#FR\g|]q`|q < x33P<@"1`  '~D<)(#HpB@-$  T5Ʒc:-EnG](!,a0bdk0 P :@5C1NX &o-oyZ 0'؊9ja)lv`yƨsX!H36y&9;vjk0}Vfc}H!^:B>ÂSw"҆Տ8Spv#yڪW7IId/kdqd(ّ2V< x,i,biZ>rΤmAA 8tcu-FxJ@3\FnFQČ$AUB>d'XUhp.A8MEILÙpF@d j'- 8C*>@Xث.A m$yх.f@m':>a"#wC!|87óOpk-0F3c ;QXiLḰ]jPk[jC lX*`d8,k֋|ƈPc$ui0p8Zz6g0:2nC6 {l|pTC!lbjh(ci|P"-3td(HdOY#6e6tAցMR 23AD 4"` P# "H@@">2e#4D!:vLg@6?42c b)4l 2r Z2"tn5芍`Aal!*`k A*.c c`zap7Y P3ʾ![L^",5P"Zʨ$#4J"e b&!@nV"*@dΠL%RX`Ӓ \ :EtfeD |,txf?R`fDmA~ "0"dOduK#($6eLͱbde#5"ZS4,f"~A"0o"7a9G$"Z 33vl<$(C!c#N`u6Ҿd)*" " "r&* & vt #@(\c@S,'M. ' ;"g 5gYXE-b~`2fŚ"# "17 #-E4,8Jc\.a-C414379b29m+?lE/2#M~`e:)ؚ BRdA2T0#s#p͌<` ! 0 $oi#"F(B1#׌(E(GM83c V$#b m#jGIm!cFzFctb2D ac@L>[ZAQDD@-3pvTp9!2 |I!A6% Fᇺ  B ^ 8.!!.z„  -> 34ܬ12Dh L##E78 AE 'mAZfm|>: 70 #rU6oX`p2)cl(Cd m\dRԱơR'#4aB"f&g2$4"=G hdDB~f3!lR3VRƀR">6aAlZA2$ޢl&C:a#"p2"!AB't2Tpz)C;4AZS1B w.)`f5!}5C"g_v#,‹><<6#24( {8@Tvpv3XIH@$D?A+TDT ٘ aRawrE.A"Ew1 qVZA7j<א7bZK+4E^E`8`r@`ʚZPr*m`֠UAoҖdL\N!|LdSCFb-RG!,S'i~~R߸< ,3deExJj&!La@7B2-Ƃ%2a9:*#RZ#RbƆ3/T ieu# H63(a&R"z "f ' ӣv6( @L,`%;BpGB  gbJi5lw.W\ ȩq 2/.a Y7b- v-59 `#Zh)7e[Ύ4394`jS0l$­R$-n" GX -ʁW7AlLq숙5†wR5 XtFiH/ı0c " 85c(@ p/ ,3$c^$}xO "25 !*'#`8a !$cdDm/[2>1cz#b) x( D#Pj}Di\!m! |iGr8 0\HDnC- x,`&a >Eȁi O 8,!655JKh]L#VSZrJ28lj)ynF"0&r|fŢrAH:q D~ K$d'öm2)#!ad& ŽUv2ci*p(>ko p#^\4DfEțʠ 2"2#"!o 2"P)rZ&0U!f aD:~ `d#CLm$6R"NF 7 'A^&(CgȨ ĉ(()1ܼ)VX@ aO8۸n J :D!|<D3 8E@,a>#Gvܐ2Jc[ oV`C6"1CXp&" RFX"Lhr&5!.{!W` x#!b >ƀjDrjX\5C(8(a' *Z@(&4D!@ݔ) >=d̑%Yb@8%fWZyIpOl0Đ>"BlA@Q DD= c)P_pR@A<.=F+P7B2b,REWF soq*4\C\9 qB 4`1PRh|%֨F_ 07-i#b)nsL[ O⽗&#lHsDn` Mr*H5oK/]4qqUA9V9E{D!#Q:s4(R"Fd1 A FU R)A +Q55Z0,3C>x3a4Z @,CWZ@@M %lrymh6ь%Ripjؠ4]hbK^a$p hA b!F@d" I+X')`7! ؂rMRLEAO!\?Y4tڑl`xd8*Ȇ*R$)x&¤Ȅ 1@{ FLID 7U@9jH#m@c Џ$aI!#6lMT@ u{TЁ46DHw|AS$8 *܄R "Ž `Z"' ZᶰeHE` x<'9؊+/߰a 3 "@.q@b&5 s d>gPX'k00R7zHp0eUbD4< k nZ_U \a #5=~~oAoR 儸WMZaB}I3L6Uo4iZ5Bp~@ |.`, Vz$UBȦ3D.O q EE0 ^$ d38- hXh ]BpK?fH`HC[ⷿZ `njx+}l("z" L x$7rW#*A\`2f4a\[1ޅmvUotlJ10z'`ԁ1P BTF45h0.cd p7LB48PrGr1AF1 xSk[!KuxF1![k.)TOn 9"FKW_ Dު^8H/XƓ40 ]+޽#] \?Ӵ)w2vsW "F^5lć޸R'_!G&PKX#&{aH{v@ަUGBbB b*܄Ch׽ [VIs#M#<ĀSC_ &ߕNLe%i}yVPPO<N@P`CMQS a `A- Y00 Q>đw+B?0Cq+x-5`dtuB=(#TuCA]`&HCC r9UAq#&ZQE  21 V@ Y*0<Բa`>]?1,e=YC/lKD/U)Fqtq 1rL? E# E uഽ@kP1'TPIAjnE N&wM#Q{%Ը9Z& ANDZ: aN8Hb tC5 ?}%1 kl|7Tc$'@sm4a%PRCO"U ۨMVd#ppxȀ.0vhbKsb]phE8ZU-.h⊓I9qT5N)3@{Q'Q0~W%N5lP9Wg la"P~GT@7.`<a $h`kBb zr'S!25%a))d!BcҾjbWNg%V:QPM (B͋#=ŚA ʥ\:q $""I4%gcTVX4s9_v]'$]cak%^B-M -1 A|akv/ € B tС@? s%0O+urXOR!0Q^\R &/M 60:۰iA{>jAT͘0kk6[6r-;k@NtѺc ?` )ft]jΌJJȷ( $ɎҦ3P<-b*:u zB9` OO^D3%޻đ/~uyXњ,"ǏMDPB 6Ц 8M!  )(`[Ȅ۶5La$7P0 "*D$UC4 )TRBpY } E,pdGJ 0.`Pl.Vƭ[2ǂ9j+ LK)Jv%6l ~ZhҥM'H FTd M64;vdҜVrZ[7i0| ~t/@X NXNL`V&dzyVgM[MItJZ@*+Q|PE41: C1#tP%wI7/n&WpP(U@:n0 BH]lb $"Rv+eSh6j3Hk2qMqyW(@FuH(8&RWIO&!TyKSRLoi!c {- "-PUT#q;[+W#4  DBvBiuA ɧF@B\ `(FQ|YtD&J `8D1*]G#RK UX6nE »X a@ \|Ʈވq)1jES4l h~)md3%krEـ}1Rb-vxB$(QB8!AGT `)}EWB:Mv>Ĵ 1r(PEh,aO50`]S\C:*F W1Q/!2:A٢BGT5?lBC1ƒB8BdЏH?PDrK) a{HȂ5P y)ױ|$KE))A(ҧ$99 Cx9ٓ{= I()P ѱ( ZRQ?QZ8L Z (NXQ K oOJ#* =:IH^. K |G@6޳B (:#Ȟ$F#/6ЍV]`P-I,QHP :.`:>:Z6+hNHHXs8DSGy [(M #A L+r)/[Pjbl:8I8߁/R~`# H޹7z8pH„)H$ψ 9 ;H'0ـy͸Y++IHJ02#[1 # ѓS;IQ2仈Xmp)7(YD66C3p b9&/  Ъwi4|;[I㈭ gyQ`5P*oS!H@[@`V8x#A>tF'j쒯SqLVp#e'H7aSgY:xaHhB :txs@NHT o`Ȣ:S .7聍[KWȢ9U:222+&чdP4ȀwU)*Ŕ*6Lqۄ ρ.]JTRķ`Шӊ2T+KBFz0URXb* 9RZSZ֊$ªHJt%PboP<| F H0o|4pSx [SP[Kԥ*aC$Y[&%_Ҕ& O_[H^S Xzqbc!X<=-[Wsa@^Gp3^( Fbd(4 g}:$D/0`  `aJnnЮcJ"K8')臾C`Y #˂'[-e4p#d0[J8_0\1J0 ð/Rְ~ \c Eѳ,M Dcc $= X^!!V0F;J{{xipz%|+ I"\²Zե \@, xQڬ,$qؕ3€^H!\Fҕ77< g])@ @1aV MOԡ ו&J20h80 9xXAx؄c1ҐO0IF&P+bcfs*3.8PrL1LM(IMFdJ%VA$2PSXin&WHxd G.xra_7\ "H? Hwy xN| 0=&H!.bvBh=>X{)`9`#"۳~W.E(~H]aQH Vv}P$` gD?2P9` Tk.z' ͅa@s:q4zSXP asQ?Kt M7\pp0x0 ^|meV{'[zsSzmik]g!M[i$`qjjHh9u'pbnl]Q,` >LXs  xdЅgP,Nw7r^p#|w J[ OO9"L0ŦM{ ! ? X! HӗP&n OJPข8NTG!pMl$S,)4^'x WԓH\E-^&N m@0[X(,҆F)lnuOE+a6HcC -uBB["Fv ^*x)< g$ B]W8b&(Ȣ0@F q>+ o u`'$-qloQ[ˤX_~LSP *0Ll"$RU-PR^T s(B%  bR^R/<@ D2X3uTWPIߖR}1 'P LUhtTgFEsE^ TR7H0( MPyZZt ݢ=<<HE/'4)4-u Js!GuWc}Vom$|LdU"$dWy -j Q6@DقBi8*#L@ERu$fP-H@:P)D6at߸+TK 'aM{&qcZA +!L? DT %^ > Q(u{"94$ pBi!! hg)Z]6(H$)\& ?iipAýե6!ϫAPA;$@BhD\<2孹V P3,9! 8Gj2NAA  R #N!|" $(HHp%/`z0J?mlTׄlO!DaTi7ؐ zIe;n deb>Q C0! $z 1E!zv oP̨Z: T,E ;Tl:(R\#8@\os[B!%o($ @\ MڰづZ܈~ d'41X8"Tϼ aL@4WY) d/ާ.S0TɨjrO/hd~#C\dxg-_2֔bJ*OZ%H6An[ xЋ>P ܻ0kF (.CmϠ ,  Nv qPQ0UQ8*D rB@$1 9dJ2 ;?!  9 -(H !n*e > jE Ap8A+T\ @C@R?ZѲ,x% l83!H Ї7cPI&L5~[Y2-hHZ ہ`@VuIxSbT,Q$` Ip1ԫMU$ DBEyWT EeIzZe&DP`H-x[!$,_BV &a@@pH`&Lƽ,Q\7-(TfrqVe-A}nA{tȔjG5hIAԕ&ĶF?G E@I6lCATiX FAE,,<#T(^@*_\bBHdD8؃ TtEa e+ՎE,L,<E YӁX B*4QAgU(\œq TBPR^8䒜 CDJdՄ>5DBEhDXChBWOSZ,K>X%4 N]nD!#O4E?LP3i$WtJ dX숎mА~'LΎ~ QQH)^pCMc4DPBX6CUA4]W A IX  ,l L3`NdAppG-D)"! '=}_&D)yL&Tf- Cؤ(p%ĈH _,zȨ%H*\BR/ݻyZB߈)(G  (MghH8$Te, pkXاWCI @pB $dˬ@ڪC%L4lUD>HLT9j}EHMl FXB}W؋@WȁQ!D@8ց #O̅QQɒl¶ UAJI@@yÍ"aK4#,J<8C98|#.`ABEAɠѬC %lF:&0O00LK@XApAݓ-X0+8{Ed^\B(.}CAl(ROD9x/Nsm@eQ'z^BDL^\"LV CuƇXT8eAȾCFg)R"agMQlHcvza<.UqLoxC` gh$FÕ6keUb"1 h+Gʩ~,)ϥ#.!8H,–9l6$)6MNi\$i=v~TY;,\h9¹ ]W-$ !|W.Y8 :B `5Y1+RX%[D1k Z!%i؀7 Hx Lg23 4Y~k 6e3`6mK*"+H@( d;M،7Ig>,ı0`ob  qYILZFYSjbDh$p;Y UBJG+ l9$ޤ16ۤ&@D_g!SbEϤ$ $ 7DXoK ϚLO%ocД d O \*t DԀ1 #@ s x&)An%BFe>iY,a$E  dlW'MrQD)&B؂-6`E6,*Ժ/cJ@/X \"th mұ2.spX#9a Dx0Re΃4 C1y Ơ7N!{̚h~`aOYH Bm !$jC(3gc!9/F.8!NXI.K+F5T0BXQ UD2z`A/CH  / 8X n!5.?|$PQ>|=У ҫH@W:r6.i6:P*rrFu"QBi)pӘ1]9+s3`%4 E~I !I]gB Pl "S˕~s9G1 S0J@A88O ;q4YsYy^mc¸clfƅlqlg VpeūI Oc6,,\$ojq#42+You6NiCXtq>BV?ቡK!j$ b u5)@Ց(wCE2:% gP  'Y@U.M] .I ÈPJ/$Fם #\"RH&&i4ab 9豥tG5\'`D6tz dY0E$십ZVq EVV E) c L2 1 /8wJ*480nmCTp( bHc'ؒbÒ?aoB{Ӹ"eav`@[u{VXE&w2~9cR4h0v$\l]"H:˥,V#蕎marQ00"$(TȮ # ipf,uhBv}@N6L@,BD+ h+!μxu@=k h8U&U!\>}VDK+tWO]^!`rEmP8QpN 91Ȝ1{ZЗwp1xFL q!ܻ*x#*7UH" lux%D N2(L!(@/@rp`()`  DY$O|+.`V~M-R`'΃ 5A()`' & v,C4 0_-^/*"M2f2F*1ċ(baeZ<)/jr'+0eZ".a'F (`,!*v0h.`(&hbM8T(=0@24wb(N a`΂iB4|othhv,N@20nXFF0 G4j!buu!ArdMȯM*c!!t@F@Ǯf Jkd̤K촢`(b(IADA"$ lB6dM`A`%€$`Rm #0`fD"s !P%!+b"8VT2"H%G n$VH &(btͱl2dB-`b%M6lR)*$6Ԃ7m(!*BB#!!`+bbc݆bZm!$|p]M//g"NK/b/a,w ëd`\ +9b Mb1 (2r%\.`VBkcI$F19 A b `"hf w>&Ha$kH=$ >"^̠zNAR!,d!"dnA{t; RGd L8 !4!B! B * DO be6rCX >Hb UC{!-*" `dd"&g!X` 0{DJ *$LB6+%&">N-,&V )`?(n+|dP!@**Z+,%u"F4.#b\(BI.Hhb6E+Z BxHHaFT (c(+& "0HcF.o*6*P+9lR4 )˓>k.#R )*CV=> >"?~@DY`FU/+ C++/!+'uwP"Y"#-Ae-b-o] *F :h`Xb>1zP2.怇@ @)<4H&}N K-fH bdA]]s! iachc3΢* -b$΢pH?>BgOL!l !TRİs>+2z)>MB .d`X@;+̾g(ssꪠaTa BK0QLd4Z (!VbE`jml8L4{@ &"zXJŀo(ESaba@Ċ(.`SJby+T: 0$6V r:U2:+G)+°됄"R-:A.RvQ"Ԁwy2W.Chch`5jD$2`z+`(CeFR"tb䂎#&U:B67/"CfM-;+PhLBWWo8N2CH d3Aa@ ,wqP]M̛d+`O0 nrG{U&g$$`!rD]HeLc"AG 2MF uD L$neC,A0`'a 6hA bOe$8ļ:}\G`D *b!hJbx4T0`TSDBQJ$ [4s6YUO$ !lo$@}@jekb~`ZP!k(h,$@xV"2uՂr(L@we1pU"a2&+daH沷9SM߄qO"\jEl0ZD) (-k@`F-((fb6:a!ڪm39` TorM t R4[6h!׀ ` "$BsH *+b H`F*$NDz$Ccb$!VP$ tGBb语BAcҀ@BxEuɉM,$ ,LAMV!B`Z!ZhQ8p dBV_K*S&my&!HE #M4` n!]*!"DB 24A6` }/`? "}h-!B"F ! ۈBvբ{skbcT -x iA\&(a&ɋe!b- R`@FmaMFah8 !P.,hT,of @&¯\2+k?,8pJ-&<4)gm hT n+a%6&(`;F uͪ \! # o T€L"Gzav@%@FBcU$@˺Kra"$&!bArdX`#/BJ bR%A^*qlG ;pa ` ѡR |V}$Q N@b& Z@BΜ8P9E01`~ 0d8EGq1DV- lȸPFa(M|a!Oek#GJC}EWahi h$-n܎$d&kBv L#VKh"gFnK 8@(0d@ጫFr7na- S&<nO06`Tc ϙ ,ŜF*YmZmK̙cK</ݏp:FA*#d1 7Gt##Gt(73CK&y<,F1H!3uDUCa0YU 4R> AF>RtAc 3L| B+ @,I[C4A r P a2e,9*]2I>1 :Q(@`L/EG m<@9E3`,PirrC P2 1 i06$ R$WL+P P;Dϴ/H0Rf'Qe%F C[E]QW2#Ӗ إ #G+Aזf7#Y7 +бgɴTfU=ptUJ ! ]mGnGVu!X{JsofpPhP[)PBmUEyXbg#G/bH1d/9D†aP=uX&!1A}#.@TV*v !a jCa]؈c Bsw1 5oMR#AiCWj$ZL|LCLh$bxHQ#J(V %A .aP1pJ*\@#M1% @Ȋ *0dpH L}$dяM_OO! o 170zčn7Q8K`Lj"S hBDSm (,)<0,AO^]A|`/I20hLc]#+ De6[e"Lr Xdc e{\>ch6 Ќ .$UXC/H5x+jvx o$B xGnVAHp!`#bGEP ju@DL-a dH!ԉPQxQ:(C/@!}>p JA/.ɁR-<$ *\rS ##H¤$b$_[0 T bh79J+b+GK"&,(FZ,*-;f{Q+" c1&ԧ83r<f m6\BW:ny`M!!YTx!rK?81 s z 0-A.Ḍ 3 ,a ա+fcD'3D -%tX@:ECBYDsTDh25@i#`dW0KnT!%*b(F!#ʌ`D w!C(w"PП0x# ԸAX&?Lv@" ڇ<G BK lK(F1@Q4$Co"Z0 QCUa#d:42KD:!q$Cy C Jօ2  ]cD3$y@h &Y‘i-/dC(LL8ľ 3k#sFFv" G^icaB:\9XHrMdA39H]l.*Ђ[PczRQɅ8|AOgrEOaCN AI 酅 ` J"pu!x2(/9x).8pt  HMR+65d &!! -01XD(4z8 [rb % }@/z7##B9o|q~`#AJ+Ł &nv@10"n!u$p%!R%A UP0PF 1$ 4/F1cbGVE1^? 4.¤Q3dCIjs^5)qPj` @X^ d\A c/$!D`0b 1t0p9!uF@ 2 u5 E6ujuq# a BOP9@")S~'ugkRP xQ2s 21p+eKehj&wPOkp%e A ߰P Q l` P 0 `#K6o@p)"7dQ" `Q)KU <ЎN QS0P|7e @b/Y  ( !*#41 lD vY?rZ$#h=Na{{xQ{!Xen0937o%9pH5n]aġHu1!qM0c364ր8 1J4A%*3F5PX~1^ Qrܐ5) Jt*g  `3f  m@ p W3# Z3 +:8b5c7gBvc59 P Q0 |G o@#r:@#)Z euR= e@ jϰ:?o@ l P.!* )0W b -P  } !~1hjf PU x-4%jė/Uo^b ް}`!O  ,aY .:}XtgDv&#q ;t 0:~FF%ld#EE8vA0r!f^B1cqI2@PFv 1ߵ уG^1?IIZ4D3@]YSv ±p '4Yq#B"JP1Ơ `N1 &A ss 7WrABYcu abP"',0+, "W $ BU6}S>Q ԘN.nհx` s;P p psԠ9j?:B %4bP dG Ekj*#VB'q{Q* `+<X R4"c?TQ3A(f{Q! E 7&Cl.(U%0FĹmS"4Pކ 1FYƩF1Ֆo[ 30,Zvі3c蘭TP4YpR4#30]m QQb5DP%W9#QtIO@4 v,0t`/sP81_sUmP8^P %8@ !W!^B%T2k@ }`!3p| "Y ,5 BeZS1Q@ d rua@kBCr:lP BkQCgP ;x@Co@wi@X)mA/,"K@?.`VB "ޔ HPۆ jE 0 k zR62B  V av!0p ?/Qx Q.A0a& 0PΘ: \켄P0QNoYpkhFTHp0n55QKSxJ܀3)u@5k 3;ű]vIJ18s5o"m a BBlV"0g4bL6 a779T88 ^Pp~ P 6 #Aɇ#LBbh up f7##ǠW&] ('RnqS|h G9 M5 * g;z0< 6 j Ub FpP$[~fz! AC!.0B4 Wv @ a)/% eCPe.2 . b |SchD Xmq m@߅ 1v!ma23SQ\nmQIѽͅ4=o4`±nf/3nn!Y.;om 6 H)CJG* 7 W҉k3Lh'`q Wm N3_Eqm1|6 %@ 1vPe@|WK D- 'ճ !P tJ @T @ r'Х+ XbFc.X= Nvl tfz YirTBQ~cIb &p +" k+{o')V! 6ŎJ@]Dc N-SLZpn0mnA !_qGbQ.7Z4aJn`.;FA16 2 5 Lxb]#AH8n@4s0ܠ836hn!gy_-+sћ@戀0aa1ar'a"lGs3 L8iR5:%mͮc7sĐގZ p7؉? A 2﫠0 1fFz 7fzޘ[F4gĂķQQ%N0" *W mc  ,ui`=0  \:"c"71[\%!S%P5HU,!'XQD'L)rI g௓8'gLA%ZP6ҁI$#qEBl# @0)X"9SLbiY`@[D'/ٔbށi 0AI:Q"Np;񬑓NQikv+xeʒ]d8WZҷM9pu@BЯ~]Bݹ։6!D 3T0P3yry@+:ڧ_+xOGS r^ d!b!@" A o&`dD* IěDE א^&JQbn FGrǖZTJv w\H$VN.V@< 8xNo¢G)gcV$G, D$~" frJH hP&"D{e nBV&Y*5ea fP_}v $'ysUw]v]*Dd(dѬ,$j,@#,G H c*=论nӫRbDndq+((b,ۂt,h3f\"ch# f3b$ҧ cz(+鱐B $68pEN@ = ċ8-(MEOd.}qQPB_NZ 0* # b@ pX(5D0riFId dFd]d"-qp1>@dj@Zv`ʬIBR{\WT.,RJ !Dyft8,G ݠ%Hͣ`rw=h Pɡ3pTZ^ß ZQ p qF[I@ CUR|ECX:zSsEyQ 5-'[̢H"1p\]c$ccq ,0Q"'kf Xh@&(7(l"Ґ5I4@Rs 1k19ǤQ,'Ԁ$ҙ Tb'@d }a1;K`bHJ+'2Yxeke N.>m 3BX͜  HP٩(p" 4(T+ou1Q!CDk]"8*bO DnP$ϐzO$*EbP$xN6pt`C`O2EְC~wD[@|$:*jI*z?Uvԍ *H$F:c w~"-(l-:Pfޑ…x` 8fL9QD 4`ā*aҤ*`H(:YLUH I(p e ɀm{v5+҆z`fR&xL@hа-0T(dL(fJN$^"ԆbY!GU2NesnJ$۱Pm@?6(,uH[BDn$SWN4/u >&:hac?h\+BBʼnt+\GXD! \ K 'ID ǟ   $u8A5 "3b2-dTz14vpHVu@DnE@1t oEZB)adTC*QI" Zx# r+~ԡc6J": "n.%G$4*gsjx2AuR-uD"fb7!iV 3c, +A[ZDrPV`d#cae/Bo lь[;}K %$C 6rʤ2݁.ӳPha {#BI xn* hHP* _J1/#pp(_Ѕy>+o@0-Hϣ9'+)aY9R*$@U~X^(((Q 8;G{\mC=e$0.@,x H<эK[`*PD0yHH&/h 0y81 @ZXs%cXI#Bj WeJ7*:x  Vȇ’f0'j]4qHH?872z `ʉLK<<K (  KB;;!OqQ(@h Xqlx ( ,ZKHU p!NZ 9xXkI#`FdPðd8ݘ5BWՒ{ JH .&jLjp[JLH8#ґ٥XHKP:έxA#Mx*MNt/X=9t.T#:B(ǁP pgbVRi(u 7Va0(3Z`HO1*i8(^7,@AQ +AAT6L аYC:H+PYPo2 U9Kͤb V]cHS9D+OёeO[(1h-`f!/pDzϱԉ0\ ]2#>  H8(:qx//6( ı8n#nHWj3c7rYVԌט[UH/#KHWW%`έMM`:cM cJq(6se" _p8&2OAR6 Fy1iىF8?S :h23i'C;%[>X4+[iX)aٓ%\xC8Oa &eCZIԔ ( 77K(M0[KH,P7aX*\(UP=3㹁bHq ml3u؇o--ȀnAэ W]]FȣE0ҕ=i Va xA _/3 V=؃(؃ eCcAM؆Ir , Y7׸ `񽵯C߹ٙM0[xN[K` [92VjA0 K]5lWЗ oҊT65cPf^%QzaG<$EgpSҔqGI,SI9,r4Mq &F MHmن0Ja5J8nE|>w8/<hI`INoM `C;L v92H@u 8IZh(@>#PH-؂pӶqhf U0, lH{XMZvpbK;ذy 7 YMx!3\N.Űb4QȈiYUN7#O:<{H  ՖHJ9r} O +{BTqCbAX%.p0jM561ТGE>5Uwa$"xlwNYX7eɌ 98sG? .#LLiҒLBBh0uW@Ea!pɤhA117Sp> %/& C%vF1u8 "Cr0rCG0WPbLL0G?ÁLP(K2WqPPX(i3ty>Fc8zBU3Wm%AB`$h9Ib'>z|Ě(C?XC{cˈ !C+.)ƴqLF+sFGM}"*b8%J2CKI{VL9<'X'ˑE@%.R$'_Bih$< 2a%q Kb(>7?L$hfn@?C(,Y-"L2fo| kcG QL1<`Y7E8ӵ&hkM7cMrpVE2㝓Z|ȍLmlJ=dL0i vDH-cI(CsDm Q0o ~R 9]N5mLSg&6\F0IF53 %f:Wuәs Z,BPO==P:'\Avq$dI@ ptH[b(A щF| 8!;~ ֙Îk)>iCS1BqyA]/)@,bPmb0KĠoPD+\! {T  U<tT G"Įx e҅7Gc "zu}0NKPC檇g|JOYXb8&p嬁D%0EmHb9|Y%g$L]@L`!1< !.g5<C0),x]2Do0 7%dK7Xƞ b +K+GRi %?m1 @3411lpHI1IиCLAv@ MLc)] Y38*'h| M= %nq4hR@@&O^A gXpЇ>,$fp2<GR%1#5mpA C`,n%CBrN/1nC8)8o@ z?cUC`$F8V`:LG@C#Ť.\?vU RQ#$N@KAddRɫ^mbŤ+{yh 㭥xѕ+sPBt>CHT ĎP8ې2y[ŁH``s!<׮`s8\iYE`LQA qHEŽ0VB &-sIl+KWD ;6Brl1~~;k eRd S6}pM&L}C&rP8AuCډ r #̮ Ca-Í%Hc5&=g\~`L64h@1NDLʵg¡TT.АW'.+Q7U(Xy8̭6X5H lBPЎ-2XXO倅ӏ@'=D< \A0`\üZPbPÅ`'śUp -$B]*tE$Кx l(F(TclCYLGGuJc?V\BC5ƤiC{07XIt(1^MMS+LA\=HbG$0LD@ \zЇ`D18t&phUK*K?(B hP"`|[7bh=b߽i:4!3<N M+ UA]7&hG8P&)>D?0f"RJsd>G6e刌D8Yb V ˼0838E=*:.T @xBtVO]H[" -, p(Ieexz<6Gp4d-^$3DBIX$@"B(dJ)96LE:C5J+C@I+I!(PF pgbЋ<hsLLQ ʤ'DZ+!yR9(!i҉(C8̃2 46X/@2$=.ej>q%،Lc̎a͈ȏDI@Bb0a=Ćt|꫶Ť0,h!h@@hNopC=C |)hpтMiԁތ%0Wbx!0AABy@b4f6FKs@LnB]Y蔑-D@\yL0Cx7JC^BK$, R@{thS@RGs@Bh!("H@YTA ܄%t'2oͭI-u 'u5F5$)LB=^^fh,;Y¾=C1,91pB)0B4.Inx$pKP4C^bm> %3h՚ "SH %0%pVDIhD Q %- ^FUHp&&(F=G\PWQj|(Gp̛&CpȂ Bhi,GD_ N@yiO=Dx>GԤ-mCf&AlELDUj@DqDMdCąo\AUwS1P L+ '3LA2 k"ptG_A[@nƄTAD] P-!B?!% M3lY.܀K #A LJCͅ,)",gpH< |^E UجL/ hb5v=D=EcCTDL`@b9]7 Lف5=:lh'F+uW#XbhlLS$N3%$L 6@/rH.*@U DG*,<irG=lD)xH>= !!dp<H]>ZB7 DƒfsPjSjT~lN7ַ1(тA D4}6Hn_BmG+ +H6C\X1|'@Dp-ML!~Be0pzUoc<K|BOU@& ȁs01@<CD%׍C %P !D'D18L|3- 4a^HIp R "9L٭v$?l6Ubج%b )$-)@u'L>ӸT10_ &Dh (VÈHa7r-P^{$@%W>=+D/k{D\XBxBA]N UXB6%@hIB^ )x̅>2v Cs0\O؟)t%*o׃BKaCd4 DDABˆ%Eqx`LJ"$qh0% ͉M`Vb ]A CB*P~JT`@A{WMp'AL@@ W0L6WAT- xC 30X¤5.  BN ۛ:Yĝ`$%YSK,YLb"ZB']/޼X&!$ujRQFzi5X%0EVM(@`$(|D3/dؔ0%Iji,T8T&51myNF";:%PX+H"@Y>l>#F36V6MUƸ89́|[.]"FW$^hq02n(0l-?A^#0vզ9ŠhN3((m8 (Ѐظ =9$BũF6 1K\$&PF % qęڌ%!; Kፍ9֪@B.x fxHyF6%&2xI"x3@3Zc/#i%v%.vgL"k 1@0j~4d Z(5 B$\¸Z![XU&X}gJ@G֘ĠhJV7iK(`IȠ*}p_`%2(+ @ZYZ -x(ODd57pil9 &d \IT$B<+ *PYu049𯘃\S;[D؆hBRP/Kk/\7^N96/H"7\n+oWs̈ `xŠ VXр66g}YNj΢,11(&b%r&j 7RŕxV (Z6c LY 280flTÈ~. k#Ej"HO"倗~"_E@tlnPKvV/!-Wx`.@\ ,a O"(IR1$.WaCG<1hԊKAҰtH]K>Q"]Vd j3DK3b3h;9pzXMG!@܋& K!2S Ē5*'J)rb6!K¶ ǣ l9A Y@lc׻$9D{M@ECB#]*qZrK41n9W7?Ӝ-cx&;߱;CMe(9G˳L8|,kD!)AzD < i>%6:}pGOAp %Ȯ<&PCiib,h{L'>C< UO _7x@!E>)3tNqƛCi<5E@=01 A! AeP)1ZT߰N _.F]t`f ϜMk ]oGv`KlՊVP,wCZr'4y$(MCXM*ҵX$E~&٠/P0yHD$& !$|ȲdN`3Y\)HAKb%2DPrL"y@segyS<8%9ȏt`LY8Yb-p~,!q3A^BᯄH(AmF~ǒ5npQA(Fz1(|9eя#?@$1! NJ4b eMv%:؀ח2br1Ԧbc̡y^+@f@WdxLyW@y %e$B< $ڐY4gxhs Jޞb!!fp̘#c.Q82aI!y@Bh<# 5.LXCHTB ;oM, #`Dd# t@JsҦ )<8*d2_IB`W|phR_fAq6 R@;A'.q=( [8@Ў&ĥ'I⤄J4YS0x3m K2"):*7(<^T^%>uzN`` *\D#- Vp@h2 r#cPj#Df 6!`D@ I  ,Fg&/pF(Me$a%thde `"&AFF` z!$$ދ@L x.2_8b,,i &H>n<.gL<<7JJ"mTft6MGfFX-g(i%)zݔ)(@h2&O4(@pX"OVj5>F"`B8*ɴmi O?" n>f7p yn@/7gT@8\/b5c&|!hXB(BȚ^BCr ~rA=\:F4 H`" nV W#V! AyXb@!]GA>!(y!I YBl@"@F*2_"_4,~ƒ&`m Ρz`G ! A,`@I& m(?c?# edC"n(;8Œ$"N%;$"%?nUP I[%v*)y,@&Cr`2-P$-L*%)$޾꠻88B|ҵH劼)NB ^VKC5nHÊ#lg BM3Hl )r$f ZE a@Q K(FA ̅G. )" ƚ%Z) &ӾX!diK<%B<k@+$"B*NQ_ 1Nl~ CB)C^ Lw#n &w50D 1`#{:@07#pGjh 6( )v& $ `c!UA"Q" %VDBw%4]Dȣm)\ȃv(Q) rN!uE4g 6oJ$3NI¢pX=@{ib2`~ A6a#`2`IB>:w[YÔd$<ڀ2R"`#/D*wLPm#"Y\quS#"Vegv! U .pA *VH-v49EF"p"V4HeO.b-ɀ %@. '0b~е~M*ҥ%Be  T# ꆌ`P$`T ^xXbuX!B"p,2pҚ";2,4j$K!E[`` ~Vy6n-ͱ+#b5)aYU;"%a &=fb`v&"¨)0C~L"$%PeYbV) VNBTHlKE[i,jVfܑ*67vXOIu >cmR%p@&?- `p>Jpb@h&lx@0 CqqG*%!E%Ⱆ$-4Bk 0BQ) 8AbP]yXZ"8&wR!Wcz-'r!] @P(w=i؜⭞aaP`OY%biB&DdcV4G0Cƍwwz'aB"-9`ZLVA8 iaM ˫ x'#Cɫ)){qNpn72"X*$i%)XVa\:)X&b""h)u 0 O-| d*Lڌ^iB<&Phf/]h@"g)ɓ>T)d1(ռ3*.>i;!†Q'JZNp(e{ L馝,DK"$d{NL `U"Ҝ"Y) 5Xt&Yb@ `fV - &@cW}R~PVUDU^@Wb%^`GZ3iq\,-x&@HT\A[<\F |^$ 6OJ-` ޤz ~ [F@i'Rq!+tէ) XWBsB 6w KMP`|g! 0` 3`"c%F人}b)R_!L͕,WƠ|~3}& 2; =V|q`<}xa.PEk(4+x !fY .),d rIlZY1C.%EaZrDiO?F+kq3@*|_ϜP1瀡mEBsB<@1 Y6mP@|(2o?gK'1 # L57j` 02A>aBL)2b\0 Aʐ".#N ]+ʕH,K$Q 1ʈ촐*ċ@WRM%RK B  MWFh0Pf<  8p" *Ctba @9$3OB%c~.%!ߌBpP0\Jo a =,/TŦ ymtLeIc+Ez\^yÐ%F@&MwB.pR 3XaIMj@5^pOtȜc1/`I|8iR|B+:A  ϯÃ:-|S PXp@ }bw#l+Pi9}` 4AJ?CKP* R4DS(1\!MOfzu8W i$8`Qc .BZ)#@FVl y1' (b8my& 1E, "'D ҂)d,Vc]X=PD G$ -)5BՔ0DRi @^SHCk B!aoahSQm`KXB.arƅP`x9  UuNK7P2C dB1P +1#~lwx@i3XGLXS!Ӟm`SR3E<ul !itq amʞjp,pyD Q4M70T duHk( X`lHFA{ANt"-X!oXd?WVP&>A1b=ZH5-θNVqX Ű13HVp5?AN9"ruH @ ^ J)920F"QrPCId% dCDA/b.   du…Zbhg΢G!Lw=DPN,-d (ƅ[I7A{ŋ ZFB {)5>&)D,>$jPzR2Yt!ж5= P+c@`S>ϙ8-ݐ7|%HHxmp Պ 3FKPZ3 R-cBH3$Fbief58rHB?4K+NzSG!٠+~ yPمeB1?Fz tP/~u%ٖM@Zo D!jR:NjZ"wDEȥ5yx.)3 |g\XF 1ؗgI/ ZV6GgkڰV6xtq6* R ޶dH㊱S& IbAr(a!D.uh<" HuB!29cضy D";~!(].DLzsE*QHV}0’T)XNNn^[=)c@ڐ,p^J s 4KўҔO)@Bf$0e;͵qWH^N:ƒ3l-S]fMuNfHO/ۊc𹼴_gb Y†L@E\u 8c8MR4:Pΰsʃ G\( P$EfvոQz!c mQ6&vT7} P00#7#qwPppB`iqp hBUV!P@a Ĥt s P'q !G&p< v 'Z  7sDZCC!Bp "G.u 3 |ť0s9ibmգpBo/" ")Q s?ljAe>e_3601o&@Q~ʗmπD"M-.'PܠXu$wQ+@ l6cbM1@ 'd6u& l` 30XژbΔ=mmr`9|cL  0_&R3o0`p'qo\ >c} R;q~:96}04C[$')rS+p?XqCrv} &X4Pr4>3$QaePad]1 m1E-_3iqpd $&TSnUg uGIY r.  'bP `_!)0 b((}GC*7 pREE2 #py pb| *'NQ qqf2уAsAI1q9` pT&&~y?'rKpSQY" p ;1\1"fqq50@FP?a h2 C#:l1$61)0IP-b0I`CB-ղ '4E i j $0Ur]0  B]("ʠ _$#]P-0Iq#* ]vsP(@/ ɝN >Gޙ N*T1lo& 19nf@Zj  K a]=L84u{K#옊hw3UwLY#\YP-Enik1z'Q !P` >C `ucuq GG U` PUgwroH@a 8gCT h w1%֊uꃸ `y*^U)6=++׺#4,ʕa0| 1" ϻ_m1:dY;lE ! As@UF3f14hb pO'b s7H@1w[ p^H'o)54992 4#Cg0<&Qu?ؐ0[-2p b@ g :@ƒYgP  g/e0.JK>@ A0Q0H7GZ2^0Xx|KatE'0l5Yalp0@b#mu:jR,K`s5})VL>a#08a7FAG6,6$90`>rq A Nŀ&&KX r sS%F &%pHq ~" ;)2t6e0 0i o Re PA!#SCib1խٳJ[1Xb!&_Ѹ)5 A {p@`ՙOe$ gGu+JՇ C0/r1Ydr9Y@ }}pY08U`;G=b)#7*Ȱ ԂpP@d pR9Z o `w0I"'+Pp\/  XLA0냈 u§|? Ta M+ v)ZpAMgA1͡;>}p3#S6Q+5VNmr#a p6X% '\' Rg#+&`'@yHaPiSr~0d-C a uP w3Pd!Fq~30=q*!r R:A ?#1-B JAL> BT$UP>IEQB<NYB S(UIR0Up hvZܓmu"QnL,Er}d_A$c&# @ < aUP[WWN1k0MQcItպBNGtPgjRei\sv6XGrE[=V}Uph8M\D!zma۬m@01c4l8<\n5ʛk^$f77\{-)Br\KrH0K "6lpzP$xwAA([)D: ʧy!Im%B|9&d5[PE%){lPQƮqR=R=]ltF$7@'yð>#u秂`O,UT3 'H(PKt/Q0\ S9u%`M GQ`kXhfR`T p%(LjWx|bs gؾpx.uMRq*DU: )^pk$44 {\b˂FuBSB5KFZ#DNSέ&!O,qF},1 c-um̤&s"#ABif R"B!d88@LF<\[+ ZetY_*xe%h339DDtV'ap`?D8k4&8=A0 ~Ldba/J@Eߔ&uߍ@ xRxb6hg=ک 4mj^c V%IKyqTVA;M `!HJm24!6xqmmLiR&U$j pM D 8]T6`# r[?(¢PC=h't/F~Џ~pG;0pV7Q;ḋc%']tLCW%*Qܙ4qςuxCK\EoWr5w YW2PeH G1#d-İ/c"9S#@K6 ms{6#X>e@\bg=iIs)|`A^6?;8פFK*fa at7';cʗabnF]Q1vTfK{CH5cu5a Qw>DbJOg1 Pk`khuX'hbg?1(QS H[c"7S >DaOVf;/E!@47zHq3 '@ yd` !u b5$axjZ=DwceS0Q>t1Ȉu@G}@ W|Hhd:!5uw B!ćG0TV+8,b]o[$d6TsLjp,uh-[[wk65 E]#ͶW7b:r f*/;o0SA2 >,Xϐgd zң19zXOq/CK cA9a7D/d,9QɀP? vmXhQ;R^JVA{7:p5tLx@pL3@l:iIi\p 1P upɂ2肷֌md9 y9Rɡ0 PPP` -N|r-ȱK[فB7gA,bz HP wY|` y^ \W0;trA6H!54AE,v Kb7탟R։7ɰa `x,r}0mU18ٙ $pW.2)1`TL9qzD4O:* 7qP|`PP Q o`0,xV^@ R 9V.}0W7q1.C: 0!IcTmJHQvpp ד u|hQE h@ 0Чz=R3AyJmL8&F;2=ivPQp0G͗j\@%TZpUR<3R-aWR*Dl3yaP@ްu`y`۱ .XK$p#鸧pSS5i鷈@DOli r '3됖6EŸTʰ{a@ R+%`h gS "hZ@  ${46 YfTODA!v O9 C K^hPyL[aN[:f5+ '@ p +|h ԇydDl0P1|3ФM2p밦) ސ Ey{`wX'cuЧ;jof$qDPZ[DrJ;Pr ؉p^ Z:J zړ@JpG`=KЌp`Z nyt@YmQCG\m@ vDc%Jm5 {tʪ, `ZL X-@@@@TKq @q'WW ` s ʨ3^ss) W AF*8;}p~GW|+!zP[ !L c5ד U:*H/6$HlPiH*L2 F PxTF x3ɐ F_ڦ "aBȄ qޚoH?yZ}PkQ5uUL"< vP4*aDe|1ˊjB`X cK M|̺@ @d:-S"$:3'`쓃\ }p Anc7N[|p@ {PЙH*FL1~ "aoZ΂ -0  7 o;-< Tp 7mi3 8}zsK7Wc 3@-3,<,48($`6Q_B HC d@ W|jd0ATjK`v=@ F97R%{38DjAT%opfj 5*&F׀BRg1N&1 P -AnZJ2 -MVZ @}0;7Rpc9S<5Sܙt;p+0.aR`ݐi?? ^ Q A?If xr yZ-!l!%p 55dKxJ\mR+Y\. J]ٓ]|PdW1As.Pa qP? jE` }^P2k \zbAN6`zf-FUX|9]`iR@ r<ڍ u`' İF0SA#ePƬDLȯ.F )\>_n-ذ+_+\ NR Wیy7'p 
Qk@ `QnP m0;+B" P£A(}*!qs,3Kt _f =?Z.11^S 'pG| kY@ `AV`܋(adb ? u`ɥ2¥s( }=C!q7ՠn77 Z^\^ˏ< ]r]&n[}^PF0ER sp_3/U%!  k`\aP%NXQҎXG!E$Y֩@&eΔ [q$(1PZ@|% .)ܹ%<Cq O{+ 7 B%gΎZJ=M~:R!Za>)xIڎ )aʙ5oy& |s  P"] b:"Rdk-(/zM&5}E^D\9U8[k`& Cւh 4@#(%&A'fBb1L59~p'1x DJ(7)Ngʎ;=9f r噿>A%>K."BȢhňڔrJp3VPD@,L.XXq $-J(jD@g8j,(A{Ι܀"-hO$8 ʎ06$8ŒI$0 2BWV`CkEWv#=t zT|(r^~7C X&VaEbāH!H8۶b8b&!ƛ۪Xy1F s`BgB ΰb<>8#" DƜOk7!;Z(phd$`{ֻ>eVц'Q^ "\&"di|sDH81"*tzF76a(Z;f: "0ϼ{ƎlkYK`"|"!b垼w$?ZyIA_(tE`09t+b)J˴PF\Vl,L\B:u9 { E`uZg@/K^ಙWBH@_AAK a+Rr x3s~N0<9q1m d v|m(K#Kl"HL%$E43+HRC'^TW\'<SJ(T@C"{,:ozcBz>kAdjDR ൭)Fl#67؊9+rqH@1oCFnh?eȄ[N@S7DDl/!k68/pkΏLC6kϻ"эl=uMs (nk j2!݊9)\r95) x3WbKp9 o@hMȇ@Z[nEZʨ{c,Ї>z Li-HLOBjI+c; 'u1) bѭ0X׀,U`1ybHK2Ix㠦ЃL6iAӞ9cЇѝ` }:,xЇ~pjqA<pCkM 1;Z?њ؊>(J!ၧ8$y@.+'A  6'# &WȂP `ؓ 6(kÎBgHa`$H@> X|7H@31{Tnﻑϩx?1,0 ,zNs + 0˪-W* 9㩃bp`'"gD@  EI` /#gpcp9Ƹ0tĤ 4@3|#u 61 l1:"OP 20oS L*`=,3iQLc*ؘJPyz #f Nl `Ky$vi0`(2H q1t2̠f[n$\XS0e6#+!;<.8`i\Ӽx?8;MY|5K?3J'2oCzɊh$TNYpRkPNcoK c`7h9980 #5nHK#BLExE*JoBk1+ +.%xH XM!e.+0WAID\UF2>`H[PŏMѝ(O3# =l 1}VHHn(Hf(1e㙀6P#HA lj [FR㙨ahzQ4*;#]@%Fy1\6䔈#NZP"(؈99HcDL(x(OaD6 ٙ80I(`M֛BaP@ a-ZBa5"\3;FeMe1xFR Ӊ 4p](㈍6@A/\-"Iq'Xӈ Hشh/Y͜ LV@,$kF -uߘ% i3RdƓMuǝԭ9lc 6{nhb  PZҍBIhKf?EFh8lN?yxAĭV ?VyXepzE9QPʐ.=I:ЬK)xFB'jd ]>kyZe 18k8t`bR9y#b\i=JuIE}%nA#@b"yETg,2+&pŰsD(AJ${Cm/-i C A@^x2^XNE(Kdz!~K6}lyr^-O҄Sf5z#gվ{!7 bl&Ru =ЅA4/ @ÃP 7bq r8AKVg\4|93s"E/C^c8@r@U#^y{l!i`U0q*eܓF )YX QWl ]$t.Zgz{D[e6%))hH#.I !F%"( vfmErIFHW`RyciaSsh jK\B._*kwL` xKu=ژJfnW2}< ɏQ@2"F[PT'2 )mEձfPQ]v07"5% ?ER:ܠJ,iRVb5ze\nc%by[uqs*]@ s CV[YYP8A.ZGG*b.€̝+ġ1_'@BpDŽ 3 ? H/" a]J \x& ho lo0S2[2]iq׼&.`(R"V{p H _D` `rA i"1b :A%8p5ZW VEP.@''1 p%.zHgM$#Foΐ[i=@r:qWk0%$a:@ o%ഓgb._8(u3cxFz1*7xF#$U];wnVNc1t B|޲C]DzRp x+_q.L/|ҪgՔBU ʘ0pA}%)U%^*%W-[5d-W^@DcA>0;xY@4 D *S0ǀ?tϡx%d^4\|B@Ud%zD(`+( O > `c"`@g0َ$` `\CX,P$=PCȉCpdb%|BuKdYރD7'L.@ @aL\?}B CmQE1ctO@]~ZXFu5;q#bbTrzK ;@ЁKA11Z8A'ȦtE`Z<'iś}e\G|Kĝԍ+Gdj<7  ϭA/><01Mh h}4tJT % ;=|HfRi#0tFTIړ08 LB2KlF?Rˆ]PrlDDGq|B)FC7@{vZKcǣh@K\'%Ǵ'neb@)o~fJc@hZ9" +tLB$n= 8 88\+#1/Õ]Z4D13d1@RěE@@A8ĸ <| pADB4)C E+A<3!XDy%@PH] dZPTM~zfj h%|C0lA$Ă)CD)hŴlqbK,I@E'$ L1]\a0xRq81C'xxlgKE&91ă!p~L@z@p@?Tfd6q =3eHObcXX@ :p@C2DLp >lsͅl@@'$@&V]AZAl+ć,ݔc\CS$ xP4&AM 2@vT0 K FvJ-fdp 4ѐ!4@$ORi_dn 7:ģ,>$2<5?U#D@'T0@!B@XR=2s [^5iТ G\,FH@KKJ008$ 7h҃+ _Śܲ e/=FtghRHkEDZ̊`kJ--L<0*)97X0HZ' ^I-K<JA%@Y%!]L,B3 Ai 0fŜq-a0IIؘIE׀012[DQ+䇷T%C@@65>$tA0T#^܃*hA ppcZZ[G'(ė-H]TAhv0]T"m+:jT'7|2?|(  lh 2[HB X?">S ^,Uce,<4Y4Ch@@P| +B&n@l B(<<%\W%PdJz0ZA5*%@8&0hd4tS9-h<3"\rx 0Et/.k^K˹,tI0ǂ߷܅lKl T0n2)*\8^@(B@ZtH7hS ?x2BxP*hAW18<. V*F2=Hv7`d$b,Xp҆v2{H\.*w:C@( DE6-6 "Ā.ռA(:C=xK'):cH F@)PL0cȰE11i O aYC&+y k6%l&_܅5PQyȯ2AZ1Ȁ2@P=CXЁ5$A= N9DT,^x˼&V43AB0:$¦HE vGLNcÊC*L^8r-i "Vnp},TqQNx5'HԻk" 5DÂbtD,\̄P(CCy%TㅹWKpB^zv7 L˾3$:UUB@M6t"ZMxZ76ņ F?U+a3e KKAXhd`HCu  d(g`FUhLL2Sʂ FOb ! b(Ƌ0pn [,I*BJ"| `K)Rn gA3@[<+ 43*+^Ęs8ĘVؚCA&"pz,~ 2B9H Ƌ)(7/ЛD번.TӳGIq#jn3n#4b#nZ2VȢ. [)d q r(9^jwLSgϖd/0U.N0F9=DhC@=oM8,X> `^R@FZh0 cv 5j Zt;#Jgd[[Ā F:VX4`ɛ8%J@{n!P&ZDQaK@Py] -s^f ߄Hw{Id^fׇ40&种:"Ū>\X%kHZ9)6#WahFp߆M҉Âus:Q!0d@o PUgTC`F;@sp`pRoj7x3쐘U #;b;^/^T/2+<| )qz]k]QN+ l|>,^<h4E.QV69I"b]ل&D.t0FT30"%%>Pf@J*!U ct0\XCHj 9-Ri^e 6|#՛f2&QAÈSjjA‡pd#Ұ% YT:g)mDI%,!x!}\fqrnI_$b;<*[! St nb cp@?56@P܅-H_QO@ dZq ą0M brʕ7DKDUCb0ZqH{C/p$D$p %# h`dK}B bB'pp:ʕW8Q3yΪx \L^cŠz< CT(('|!H  лP"F`#tbJ , ]oxYCiWB57@P8^F:Rcnt!hiAPOb&U]_pBp.>9&8& 1&lE,:T` q[TE| pEd4zjS`ʐhyhE%T+Q f! g($hZ `ZFS +8qZ5 /x0pe HiC6&#y`Wwik⊷ OyhX>Dg(J/'hH _4EXCYHa4fȠ RӋ`!\5oj.(h2BR@f8 Ľܫ zPh4gS$HF8"qQ0 &$*dj!bCDvg1H, 8c2T$(8)Ɖ1 ",cfjk8rR 3pBVC86p$$k9Ae̥Em~dL c(l2|R rt(+ ZBb0-kTA%d؀ P 3Mu D.w.@6 ` @N@( 3.b-"iN/@+φa= .alV 4(܏,VF4 Rh*bUB r 86lV+T"ǺDȤ a.%%8@—lj@>+c,@VD#v8G3t΂ (J =waBe S.f` y"&*"1kv ƴ;S$\aPq&rAvVafV1Ec[v(X|~MS tYuNsp&889$B)a@lŮdaUD.]l. !.d Ac z\AT ސ B!>] Ȣ b!U .ApT*eRx2BzlBc@Ρ4nԁAfJ ``_dbPL2 uKG0 `?'D *XeI !FՎcNa`! b!Bb@@POj׈ ! Ҁ n] ʡ ! !MRle0c -KΧJe!,$@pFeڌgzbDHd4 a2B^6 CGb"$XOġRcP㷮`=$;|D!ެ^LN68e VHC\jw aj6d,df!!j%I^ ml`BG;ödJMTa4B,8+l9!n1`m8>5h,cD` R% jsm[!n,.-AA a2'8BL;!HbIiŲR`j5KAhmVOS\@ P; V f/o9i .b"k d4z&TBx! 5fN1&f`6 !1 5b t &-S8i2O$\#$<5Z%.D#6|(I!PdG : HM GcdZ";( * !N]`0!H `- K*!FC +˗{3kԢ~!6AbjMS,Q#Sbcr$;@"23B?B1""}`L # bP "  ;(@6 f 8`l)'r=qz`A NLeN3!ccl{!3$Tj8#Bt(NL,5BC3RB8eY1 % ̄)|]A0`sP(h,ha2 6CC@FA!v]\X@ aBxɏ6MF,!@t1z|۴ Fo iLEXA  c\*\m@bInhš0]}xbl1F̹ &dƕ,ֲhd#Tl3;"X9a/ 2dC3ԩTYB ("©5 hQC(@顆 bP C<=S oK1flB+`0cGќl~ͰXⰵ%]C`M10oˍ "@q9.譌lsğx @.-\ٻwD#F,x4`MJy#G׬?O;P#)`DQ=K=^aT`,$p.'BUq V+N9P1aki}A@pQ-(Ղ1F|@uK&hD4&v98ji>FwF cCy-saKrtW>'GY^CuXZ-e rga%ltNYtJj+ͷADOSD ,>!T@I F*<$$Y@N$8>ILE6eWYX$G|&sH@hiCghF9!A\rX"tР" t"Y(fybuԑi Z,Ր9q@C\|ak*SG m C=0 = *B} aoz'8†@15Ums+jKq}SyeHXt^iFu9o|J+-+[ BXcI 3j} 0hk10 V@ٛK(? !Rd))_n! YpQ, @4 !=]D-1D:eMCg-5 MF t ZIx$x(a 2y V֐b!1p`<&6LmZ@K=ğ>ҵK.@ >Ҋz{>a*0d0NA> ."g@R[KjX!_F&(ۄ6E,1 #XM`0)uW I·U\ц3lBN1# G>$%`J=d7%cotddљ%l[=if CԚ4Iu0{A=POt3Jd< I>H,EIFb;H'Qil$N+(ԗ[! X|4` jkFz r. *6N*PjAO X##ZX0~kt =#IN}? KdG xnI P*mmgcV8Z~<"; rǞt';' L,' *4-EhT@%G-F#:BlDsȯp{(H޾ JK8S~U+3r`@!\ /')D 5`.-@0)㇠Cit6@`YլIq%fMCnD X1pT/7"r`cr#˘aF<`rI4q%SQ|yxzp[(Oli`0G %j¯"a!ՀHlXaX*.t1ɵd]s']`' b?A/#`<`DUYNWқSo:rPmI?Chï+9L@3epB]Cf1$v]4#)Ʒ{)D4K- P ΒDC R'9rHRA 2,XJ #I5%Y="79V'ȱ>P9N`0 8[S#r0`c+HW|g;8GЭ.Le^ ='L)Kx]CQ#ɝ!H,BۏOȩʼNÀϠG צ^j^?,Wj4:pm78| +h |؅}8` Q>R'e͎vGl?D~Q)n܌F0xk 5{~ESof0T3P(5a )@8@?`)AD&0Fo)h]! @9,â Bz|@ .V|& GP'ukϒ"1|+R]9~v$.fGJ7J\vTTАf~Z}@J\;A:o]/aRQV ic/c1F W@#mTy',SY{ p@=tPDzQƱB+"%*B7,P B0 V@ -#S~14T\S!pKK S$! Scu;lȇfx\0}hЀG^&$%\)G q1H6-q;34s]) Q(0g5]@A3Hs0"i?P81S*16J# M8 b 0 $b.Dx$ dp@ @m2&+DZ,Py=R AMcRl !<&xf P;@Y/'-,ə5%>ݱ:bdFz0I]S c 1+Q :qz5M$i- [Vr ѸjEh3$=p08b.4@ yr#q` [9s0 bPO-|vuyYcE&pGڪ' Ee{!JGE Z˱qIdFbv%"4r:%(s 3h-^tcdHa6QA!% t9Q*D%# r|Ŏj#0I82 o+Јgc :Ҫ TJe!'n:ca:L:WCsi0F)Sy+L:p,WtC!@tdu. /|+Fqg5o I}eHc-,:#ad*=>Io>3k77y|QyŵFpMv+2U4DN3WP"bg!] }q:G!`ll[=~˦P UnWN$ r 'Z^O;=b Vf]vz{a#fQ Z,V r`^p'X=78U` +j9 IaCS^`O"O$9`/{@ϕlZ=ϒ} h "Ig*9JG ' ]q-&@1Ql~ZFSk%0(0(S!T[9(0 Cz=!Vp  Z_w}0U@ ok4^"=tBpBΏ~[laMu+ sRw~\S\hܪ*! xo&wC@aoٳ 6%т3%=>CEr MMPt`B A pM0ᶰ0nUPPT 4ZR@]ȏp `#Z*<>/K!F;2Q]cP< R~6Yri؞H\i薡pIͥC*3dbلjF]Wk k oZAaIꂕakPFU$m*@4TIjU8Uy>q7~WnKZ1c 2f vnv-6ZJ$i؎:e)}˺%Ci$'A4V'>j>wJked6{5@p'Vi(jô"XY)ry%, 0f7#Z1bߜ4Km厠& ൘iᒊLhD@GnpJ?^yH`n| QxQ SZ!L"j*ҤbLX<FB#  g# LMl",guACsv0,L5b̡`p}6FM:AY =a)Іz{2 :#9!g L[XAQVfE4D@ ,+0p>@c6b ԁQu0%0*eI!:$tJmI0p|('pÃjb!4" 0-phE؄ 5 E1y"+S$\5 ; B a(F1pd)G9YEhtfv,nDK49%06hdG@(%6,GlNnP!6Hd@ %iIOч4X Rx%ӤC $MLk"A7`fՈٱc+Jxm53*³q30HFGnBPh+(q\…ms(IvmufF%gHG$,\W' 8X*`$ 7HӋ#r@3T:CBCL^/&vAu "1HrZ ʹ#19zFH]h9@.Adh }'D$Ĕ 樗|~GTW.k=`e+llg7 =ܠv Q\r: bMRw'erCp e(si 2*CV=fb!R+% ʖ $;Dé%Ub!~j'[0 RZGYd;a0x< 9eGP%`3 &g(` +oXQěH h C bx "VCHJWy=oAn@Aevm%Naw/uU CeZHV8'y%, K@%0`P*D9>ӈjqآ90mk "5A䅎=%pH~I P$"r.uI@lF&$)%>wfz's&YN,\_3*ͪד/ݼO;L*mkc[ 5ltvPО~ZB*nYf8!^00x4 ś%w  1br ZǪLRaMA!O;o}GzCv]&P,AJ6l>$ݙ_/tL4'ur[[Nu 1ͯɂ[>ӂ \a((uV!#zFY%3wd  x:b;<iP)hw˳9H#(H KP-}(n 9 (7 ({k`"HuD@6"㋯a dȁ+x.P1 4 V8#a+OkAO9%،»#0Aa؈ސd/201)A`ށcSow!Š`mz("Ç&g^(3;s~Q^ȇԒ.Hj81H.p'PV0VЃ8 a9# 'S -C⸄OHFp\C؎{=2ӹPc0˚4V8A}Zx!ێj+M f_NpT  Тoj .)7;1XT+9\ Qq [~.`$Ȃ|im0`F+G5\˵Z!2HK$#h!wDR@ KZ:K= n1܃ ``618j(PyoJhbHx/6 = `&YI0p:G4J?IP(ci^J98乴Ғt܎h ! Xx)V `HWJKizrȇiy&32w !ۋ{"!X`ot0<ؐRoЎ0 zMa@Ӓ9#P=lK!8|d :CtP o`Rγ{nM ,9{KO԰ z5Aj*7c>>@]dsh-`-b P=pڑ"3ʙzh/Х*X*bN VEL-"8X8(4˙0ES s(< |`jxXՇZl6z"t@8𸂸G!*9+>//a `=BJ0#TV=RU rp =xяxq3 O7y1ȅ69cDpzʒ/m-GdYTz*!z.X56E‡VqMh)0`БH B@z*X^V`e Ybx<{a9H`#Z`Yo@ɔ!*^8=%ɔ> U(ɲ0!Z&K#(й"HxRiBa0(cH-^ m5N?Qɂ~39ḣ@MC KH0xTk0ڑ`aB`PA5o@WSHÄMp҇iˊxϏkH#PI!/6`J @  xQ@P̎z7Ѐ !nڭ `bp5C=(,hhQA4dXQ2=rmKHJFMR&eAB*]L (r(@\f8x;f> ܇H-I,b:Mh0HL䩆{w hKM$LYk 7H.Eդ*+ ZJr)K)("4$ gIg4 UX A y2H-^F ꠓГ#к %F" Fj^W`4[ Y LÀ3x8L"i0vx .Q}-9p5k 8(ƹhŊ8c!(p$0sI0$`@z=@dw~pI1Xb /^DЩHihAЏC#C Bgj^p `!Rx5 9C׈Me1 0@Co8(ڥ9(f]0n'IJ%5m`4b` `!/4Yh3A1ť.ffFKBxh "F"Z|JjE.vpnH SRctVkkxZ S/6P3nsSp2-󊅏k.99؉zH( I8F=q M@u] Koݧ5KbhS~R/Jh 6.Pp 讙@dXy8p:U>Az˫|h̛:؄PUH @ p3-:/m&4jMz(lzX>^g ցG28$\`'33=zbFM4FЕI} an]x8]p \ x_ d`O(n7OS[MmAA`|KFb7QF3nRYح!faȰ%62{ҷV>Y KLhKر#? )r$ɒ&OL[-αer!5#0!*QAvEv7-ěOYG2G$tFȑ udK  ņI4gP( @8e}0*Flg‚ @$HGj/2Hkk C7yeG kMّ2u1~r!'<$S3B,tRWg4PRQGiY{O %`h1F 'saG )a! M۴-lB ~`+Phx7PE9ULG2L# +ap 0H\!f.n pXFQz;i %H%qGNGcAs/DlȠE/NtdG*|! g ^1hIRvp ! ip#l/ mc }@> *A $QX" HG@#A HG&/O JBG&Q!g9< c>hK|g)c21uBBu2[1L#DcL0Nq\*âz$3ɏ. }(p%z8e7naaCܨ'  쫂G oԬ aE(@rH?F, ipHmu@*# (("SԐBK C+6Xˤ3'I0z `GEs`uFHA|O ns Y"-S$Uq3HU$B? +3To(i1!TWhNSRO~C08fJP @ZG@1aiQy 8^ Ђh$<:sޑ@TC. LA%W% @9 )n0ng1 ՞y200RԢ7`Cqc(|%G ʁ53ĈE)2OGR9#la8Q$8@ 4L&DvS1j!^ D EqQ"P @#qajZ,@$ rЙw%"e! Q {J1O0,<8G+` '#<9M]⃰'2":cfNtb`!oD.Rh mY uɐTiE' #t,Z'/ӏQ`f9duGd ve,,򱏲)hGzE ᡡ=$ QJOyd (XIoF5@Q6#'(KYr0iMt(ݝ :wX8_B'9[mcTPNGs!H#g/V(#M(Xw 'б PG@"e1PO${jYު:I:0ke| @@ [[z[KHo@[ $m<Q/6lHV?3q J;H֏y5/IGdӤEP6\n|{(ET07 ye}xPřvDuD0ѐ Dݟ EAt(Ȟ t OG 2]GKK2:$IUGB  `4mG0XCTA^(Vb;u8_G ( p>ȟQ-DO1@ \) myDuȽK̀ S@D,qx4z FOYXhQɐ(EP(0C9lJ i(ĂFѰЏ -P L7D%Y ۸ 7h!*~Ԕ^G@BŊqTeH&X\QC 肃ԁ7LB>tA +H)(#<4̃.7LA&yP\LrA1 ;bNX\FONx^vC"$(B C>B,܃=们ܱ@G9PEO7[9C IKU/"8AGЂ,BADP 9.JЏGe yDgbd!P@$"PaGA@ HK5@2t t@XΖUtcL9R%G@1`XÚ :ɄKN+pPGr@0,DtrQ6Bh+D =ttEqFH >d4ҭ J _*H  %gH0$ ŦlQtDGHH  A9 0+Mktt*}OhvMjJ -ĔNy> )R  |I!ő jT p@,jpI<1:Ry$xhUóhGp@LnvaZ0xnU CnF *"dT;ǔp$\X#8@E {*dA@}D J浬= HP}aA(NtAϲ0@|D^ @FH/tiZu9`.lx@rF@lGɈE@aP@Ræ$A @iCZ!8@h:WEhlj>cPZBk~t,J@SpL@\jq<~1 S3oNCA}e>[XBG@m*V .;|HB*8# CZG# K50pE  J&#FD \; ^H(C0O(ۑxُP7s j4 HpGB/^G< 'ĉ^3> Mlw~%A%a~*2tBI]`CG,-EI;k lF1<+:FBVR!T%yY<„Q\ZCGGǧB5R} VoF$HPcX&Ă RE !) èD.MHr$#mہMؒUJBa) J'+8*V>8 d80ax#/ʂ9 FA!Um^pifY#Av8pFd!YTdQ#1 fXc.$o5RF[R 02.ʽM6ܚZ!9ߨϟ.XPVnu=Sr0A˛T,g}9@T'fh9N89Z 80FX}Jhah▇b`,=\ jEK\:2(*( X(h#` r7oPs $(N H'd8qH%%\0ם叆3`UyWADw\00 Qbb1.@D~<@+hZAy@g,/_sG\1 Tz%P-L!qp @ xqZN`Jl H`H3 Җ 3d@&ūĄP}n.U8#CKAP9B>&KLs HJHif$Uu`8e; bQAOX.-d110X,߯ T3p @ 0F&:0ʓ?/I8Adbq$).=B@A(0@41bʌ 8ȅB3 ł>4  tN87$E,aaQE!L")Hޓ!UurЍ0Dzv`:ȍDF,Q/ - "Z)c0t! F - t 1ʰMdT=_dP\{GBm'胾!& 2ɳ/$B%028 k{j p#փAE%#zǏ=Y]F`:U\=ڱ^dDRQ,&is6HB敎y F 0 e(#Y<@GވW%' T"i,†#(;yCZ<&X #z n*l~&qb ߃oq'Bl,1rg fG^"( )77"w!O oEox3b62+Fe[$j2!jBoHBi\RStj 4=Da$Im(- a?eAv $VTV% ]a9P>@2AXH;jS V X N洚P]):70U Q '0IJ'du " (Շ 2L~TA ap &9J|+:02-z2,!Y憽Feȁin%>a ޠΈn*26b B 0`j@zA2dG$M3 M-!`p\ l!e By@F2oOz xA h᪶/{\c`=F!6׊6 @ #>s2!63H`&eAi@bb >hcF=@$V )E.aGdRbF&N@`7Jx$&!-D&6") N% x@.$EU01`Ef5@F$aGL6`t,% bJ" O* ֫"Ca"Q$@2 7HN # 4sBf6046].! FAE1|!$ d$bX &# 0# ^"@& & @ @J OJCHf@&A/à 1XiX ` 1G`3x Ā R  o@Nbr@X4 HVA5NjLAFA& Bert vh N.D&0~rn `,q< KJ.<Ѕ&A >a`0x"na "<1 eXhhC "V-!kGm Ɓ`yTtހ0!4:QEVՏpB\ B>\K:謤@,la 7B`ݨX4 Ҡ@4`vt taLagE!vbAP@Pj*I2hҀЀ h(@ "YTbLbp g "dK !q}R0 ׾AEb"B>ĀX   eIY("L1R, cx l ) !RS zA%o@<.,93TBIJ4 0pAJ$# kF5 FPJ8vb'.i L XFE" $ ,BFv*80bG᥊#+H`6Aj2-R "n4n`_T8"p. 'O-ia,A49:Ȥ4? Ȧ\T\a3 6, b۠a@v΀u+DЏ"ӨYo!@*XfWw]sd#ҵ;]sT#:( bgF\AW;) 8Ǝ r0.  `U> dHa/b+! +VDHu*n*.tE8j"Om:B2H0\ᝫ`)2xG(`IJc+[r8bU" 0L\UX0  '̪A|߁D XCv!t: X j N=tsN&ᅅa 8B f%b@ GArEn?ARA-x p rI'1"/B"3..d.LV"]@j!Y&J#"dr %od-A,FbģQ "E.1!#"𘈈"gǚ@"ߡ#ZV  D![gSJ:"J#cx`Bn0@UF 2 n*V$E?@aA `CP0#"}p\Da}0"W NafH*}ya dE:1-7#l 6:rvk 3 IH!G `/Nw `!V\\*gcʷc<5z] ! #ng ӿ-h < !2J 2D|xR Y_N tn5"caӂg:qZ1B!ӷbV\/ .{`daܶ1gMD@XL#N,fr W,-f   B%z bjh9 !T fs MUT ,/ 2ZKQ#YCF#IAYd@[! \ I~+&az+ vR_,W$̬Qr!HT2꥗ 6aͼyb~p4 :d}@"`"uZ]~h!N60"YDd~&i1GW@e6 AG \3>k3lzb OI0a@ 4`,2t0|bEjȱ#GTS"V\ ji`Қ< [jvp"< 8O Tt,;s0 Z}70}tإK H Y"19!;J0aޜqٸ \Aୈ,N j 1aHtT<3fɖ9ߌXB`VT(r;"ȓ#GJDf ƌZMpT-4P,NqCbc5H5h0_>C  QTFℑ ]䃁fTrLІ+] 58Ha ;M@9@5DJBbT us: A͕-@Z0p#R0  U89(∤FD U@'4Cd*< q:&@^<86pc.Sr'[ \AS ɹ FC " : 9a6OM-?Y6< -c BI<+pDu]A8 p\ i 0ЀLc FP l EG4SQ*t"" ;R()(xqa gBQiHBUOVI:`-dM >;d>h( a1zA 4 ')x$p=4'x$6-C搜\ 0h1@Q(lBT*w؟vΡ (#j?D3Vf &A$?us@DHbhTBrq`##֕s8K@S!С9D&|Ո|lb Pų +1[O堚P06Ї^,C'4ϑYK ʊ!*ú0p9h$& e)'n-$?x4A`plpNI/ "R*I%up.lU -Tyȅ"l3I͠W Q!@t p+1#a2> q0̗p4GupF$0 u ;P }` W0.rZu x94M2*$(byPn*[uKsYR"P2Y$[x $ZQ30YKP !'svzRqu|u[p l`r+9`OC49D0mvO4tQI҄7 . amksRSkP] I@Wu7ƒl*f{m6A͡g:0 9%kFUU33@ $ N0.' >t#I0 ]pn @zQ[hU0Ő&>sP ڐ&YsGo_q} $vij ^z'|y}ш!H7pP)?}* +m` 0AFg p)Hmp# o71:hBh@ . pI@ $Y %tC,`4Di3'ÀB50V  }1 9!NpN`yZ PGt8AP!CbP%AAr(s LpB2 ` 'P;%Du b 7,pa $ZРvlP F G}@Ew ӓ`XOPy2fu b?53E?:U'SaFQw .B IX!4I8q4)oeyp3`<R 0G;". ϶( =cDCV%Y{ , "uF~gBiEϖ$PPq Ff?Pҟ 7aG` :sQ" }(MXU 0${h1n vCa@Đvp4٤:Aj:Fl UwIjq" 6AaL R9|@i~Y50 G6"$SI'Y`0WbIY>E8=xa6F84 TtEzF1*A"՚š93p%@V\ d+h5O `Qvzy oc_ w({YbTpS: bP! ? j(3}@ 0 Y p IBSzi禟U34<[ ߰4n 1QJ? R铷M#QRN#  .C N?F@%r% uP@}(;GzpK} 9QH([R0CTa\ P3 b Tpo =B1Z3mLe`#80 w) }_   "# `!pnC{wiR Pnz[ cDiqr AC4umo@ QA6?7 knS2Cd*%ӈ5f9%8%of"Rф1\W>(2s1{vSȰ bŠ*TB~$q wT 3# ` pAt1CА.<|aU 5^vb@>P >1{"^UG s%S]دB)?q|Kޥ/{ K7#$ n8{Ј7??aKp*~ 3?D B2?RT9.7 C.),IQ+gP,P Х uU@XGyvQuN3o|8$m 7<&;;_ o А:.w7'S r ' Vne7Q;ehQBn\ Vq  `_(fyاa @}DoyG c$*QVH \@WttcrD }[ =IcpPmʞMvhQ653GaůSktbbAQ=+u5V?pYP=#6QLMɱ4 S[{ pPYc*',ԗ"6p+>0P8ꇾPpkXs 5ofM\Q@ƈmK؄T@nuP `l,m\d6i%h"tVXZh >ѯM5xfIC @T@4I D@yvAo/ڱCKP-Rx#0->`wh0acPR@ E- Ņ q:N`8c#T)` xFi+#3(2bmb/b? kMȲe9.xq  (dbFZhr lT:K(O°LL(pڐ hbNbB;6eZAQC.K83 @#;͘Zy>$δ:$*|`9~|K Zg:{GbA96q, j,Я%HP+r (&\y"n~q&uw #ǂI\Ė q', yK4 j~;"x&FJpLD8iuyf F@h0 \=H1.T޵hZ؁Dkk.o>l9!#Nc*^̼6⍳>D5 (0 }#s 06Ѐ}nPvP'ctʒqW`-B`,٤MVI'9.g6ŖM~RcaG vo,aT}c:(I9GRC b< 6@;,lE@:C!&wG@ZH#j3"Պ?LapPt2II48g!LxS"0%Q@Opn+\YP.Y9޿EhR3wG'0F΁A A@- Ź`@ >90D(\ًT=9g\LӼi=!Cy3$o0&%SJN2B1#'k(f/QTHH: dvGJ1C|1@aEWSTcɟLexrxzMȫXksE01Bq~mmύų&,aJeU +W hBT/| rP+b],"FdPldq@ qa 8@`ȏJgN0j!#Dwơ2caaHn+,<@:촎@1'L=b hz#V#W\]ޞ3#yC Rd1@p( OhL(rghW!zcPICG)I}Y@{pс +_A^0&5@qp[uƏ"4(G@R x5rMh 3 @07B@pqSi³V"8]It V#zA:`z Fd,ZbzrE F8b-Ev^v# ?u ®R"e+"f +W0B hJpEb>#'xFYugA*@RTB` f-u4F+V)P΀|AO"QJPȤ;]Ah t[B'$Lh*Nl,` aiQ@&FBÈ@S+ \(oE!y# 6x,("dqbBH./yy#j b5!}S=xX 8^#+Mu8+RWe~jr8[- !,8 A Fop/s y,j@-XQzUG`bpРa<:q~F+i:xXI};rs}Aځm 컸и /xBqK6'd0]F{Z ; ;?UI*~ob(D]T:70PXPY.p`4H  &IC.@,xC d;6p' x(W ~#ۉJ+ȳȦp A\hKXP[AaN܎xP4Z8~9yvuH+Xch:;u"zЩɐ@rŁH7S, ZA!0%\\ʨ N`gB˚" X(8oįN cW}X 72 (Zхy8g 999 0"I{)1$8 4 Tx(:4/ )T9q19*m?Q6i82ʓ7p%ɾ:\M]81`IpR*H F2|n8>(gĎ3-4Fvޛ#YDxBX10( Ȓ  -Ђ0x#$P.9K(OJ|F JܜA x*hgj=2QJA(i8QD(?!,:5]5(O8-C1"M![y`O908>p s×"W!J8aB(6*p/3rPθ%p-) 9誁c8xQAC]0K]ɰ E 7 0,Rp'PrHD' RT Kb@pNhQg!r* a@Oȉ> Ɓ"q7 VȠ؊%K"D#@STKxYLT3$F &A M؀=GЧa̱9x HI88(3(zӜhYY0ʱi C9m%gh Ĺ=0-v5k]܄IJK5,\pi7\J\Fj0@ o`. %d8i! ʹhVx#;9-T..D`B4,c '}OL8:K HKTɌIa9Țh0ҥ6Ъ5,A* 7Ӱ9.*6Jb͑^8*_%(~[ c߳* :Ka` t/P-i̾9 Xoq\i gx gx#>8Մ ׃Axh#c\xe}#+/- hX5Jo.r`KHɏָY(,'"usZ#!B} p"(0 /pЄ(HD* Ȯ* K@T@82Upr޽zJJE}20%ugH[ x0'p$< _蒺XIJo*TloA @ HyAs (i edJK ˀ :)QMK J @(@e d_ N?6+ ʸΠ,PAƠ' p1:` TZ( 0*qe|F8IHAlx_K[ чs4oּMf N"<{}_ql١xhЙ ;GE0>\L&!xb+B,#aO` B@D80FRhӧRfN9$D+Q*WlQjJ{G!Qy3h1k2( ԣ䌫"p~u~%&BPal0@$pA C  +>Ia.bFaL@@ sLB,_@ k UEH= Ϭ@ 1Rb:k,BC79\"-5 I?5DJr6/Z Z'@.+\RYF% W3#Q G BRtQ ;@"g !FpH,#4!9,S{bLՊ7#da\# "Rd` 8 b$E$`up/)9jCfKF(F׆Q 6b n4A :k|s0 AKx$B1R.f09 yc:Ȅa-* {seB aN̫ ^zB! Y7Ĭ!DCn9 ҇R/za5dJA ̕LY_P0^9M qAp14 .P ` (J)0.AG9Yz  AB6^9dbi<7Ĭ18A7p&86H0 QenClCnE'f CT'AdFnNӲgދ)o-7WMxHAP@MAN$.%Aȩ"PF֊APY,<L00@@Љf̄m%C9tFQ0\=F3cJC*@1,. lEg dcȍK CWl0 IDTQ/a`vJ/D<^dJIFf[jNB,BjDD2-mBޚTDx8C@’n-Ёz4D7'9΀!V-- Y[%H|$I.Mୢ |K҂4mJJ% +yD+1HD) LhdFif,TO <8(H$!lJ84#CD ]0((IH2B͒;Tv`B5 F@! ,J)%g8Q0 NQ[C\>}0AThӱ& 8쒯c,\f'(><8  4n)qۼq=6l)XZ~ЖCP Aс[5iF[ۺt ޷XZV]}r-ё&ADc`GІ@,s+,(AuOMahՐRRTgFB?q ,a/ 2 DaQYD_t Y5i5Q)X0 [&W'}A]sl<}";@;W v ly%WAuBlnp{C-`KKGb8Pru9 &C+ǴUDM1t,h(,5s :22fL,ʘ bLbbNƂp'ر0xcP@Ћs :!-4?ATA @D:2GR@K [0?vp\P^` p { Ϡ|)\ \w{Y n= o0A`5 u|'h" 2@e7}'w l&l` x*>2Y&+s0 qlA5nhS6z |" 3o5U u0<@Q Ѐ-6 4XĠ^@pw T06b QR*$&=J,|r 2UGy'pq Po $0uǐ TEzncH'It uplboK]XGB@ 0Mk o BmhrP_Jur2`+7o2rq p "(ydFr@|T`h(o5' ^`Pc(j\`{ 5 MC;oUA6YGBp @sopIVD#zW@&YPf=xH4)`Qep]  I` s ЁHRjp(2`hPo0H Q7 7~)~= J~ )t WpFqGcq Q{(M0 eBe5"dR8~p,S9517@N] \f62|ZӘY<{6[([srXQ pko]"jnh r sl bb5\`4C +J5 a԰} Р 9|r B8 /Ba_3u st:55\#P ^]WB P8hD "'ׅPFh`K}vyL9]p n0!_p hL9rb1 !n"g0 z d*82(+z23~oE XP {آ.( 5\K y 0l` ThSP5}` LG& n 5V!c֥_)6z Q90 g Le/("n!Tdr 9~ ='Cx#?eh`V sTqkqQ]ԗYC _l0WH< z s`Fh9B5p u&}z0NJ*zq4 Z吘 ە`pigAAp:@c]8J ` S5Q ٔ?CNުRp_ $u0A J(Nj ;j 5\ Y`iQpE=peI] bQ "PPD  ) )3[] pS&ůbE: F3G^A P qx ^8?-ū=J9]-%5PJнCpSCP ڥV wVGJailي f ߐM3l Z5=pPJ~$3K;P ac@И?A+{TY9w&` VTۼ/71j DQ (PP0G I :{Muq6Z u [3@Z)\ h_r@pD [Cha 6;"P+Qv~So@ ~eA BjHI >WC,|2aey |,tj˽<$IpNŐd][b Hmx 0b'hKz$*{%xG[X)j p@9 ȑdJLB |w&,i`p [l"32So Bϳ6$, Z6 0k ^˿&Ϡ)r ^mnD@\P/ GtP İ%\oG  > YMpM@Ր<T_g!Xv Vv30!ö72ġTB]o -7)ȨѪSyW\)b7p}PP/G &P\@wL] ĀK pv )Ȏ[UWs"` }PS?upi bcZ 7`T`nb z 께0f+yC&]ml$&LIeJ?7+|w o ` " 'T3 *`m`o᠐*}, ҁ~hT})0?WlPG`0]/} `^ 0HLNNW0YԅsM 呢cP X/]5!po l ;]Sy5ax&n:e Vq3 ~D\L`/b %ՐA-K2-4a Z)Rdw .GFkرeϦ]mܹk`dqq,!M q!D-ziQ]!m71bFP :$$ N&)drA6f`8OءewC+DHE]&!;xE\pJGzc=U`brj-߂K&YF.(e h>8dHj 9yop+Um32;E90sz@ 2tLq.a4S& P"dzxÎ@<-#b\h=YR梱&g hRc9 <9^`K'(:E0ZcO PآE\-<9r|%fF9n c!`j~#8c|L2 eP;M̰|`ɌdʐVx{AԤB:eDk 0f%A&Pjv/-\ph؁ XiݰT:B.WucZ?#'Ņ_-f 1ܸxDIZO@F*ek۷T2*vT 3w&ivP96:ިa.d\3@.LmbS-d^;ZuۼcXad!H!0n0,l^l8S?$E?.jʥYa'(5wBa gA=HNA fp >F~$FCeAq;\5`- D,!pK bV Xb58tu94RcCk5 pBjd  TO66nzxcB֓F5#"3W" & |Zo`$0 0Kp9+N Ȩ'R* LCT`ǏR IH1-4 v'H1`6 .$svkRCq59qiL@`,Pk]i^&s=4^ġ<$! AFBZ`0 z 揫GE @3y #H8xP Ns0|o\`.Ѕ ;.>@+rP)([% 3\2Kq7J '{ȒP>,aװX@k|͸"Ja@=T"]0G09;'YXY6'dA5rH:KP;PA=7J4om{O:AԅO:*(g(I؝5x <}u^X&y$ЀQQ7 +,09ظ@hœPpoiHt~M;ǁ , a=\Æ9bJŠ&;%H: l8Uj#oca`0; V$jF2ps/,b?~\hoX:\Ѕ++ !5!utse0hJxK) zc8@-bK@alaVX(&Q8Q8O2/(Kgxy˹DH{5|I6l:">P\<V\ ?_ B;6Mx) K-`H#XVD],F1ȂGcEg(>9BC =Hɼ$HY!XP x ȉT)c`8 O9($p&!x@ Ok4YX8 28@1Ә:Ȑ 죺RRmCC>yPlp@ `ŹbP@7x>~Kxa #-9xh0@U>= PGq !!/&j2BӉ s7!sB,|HAU!+?٘aSVH j\#5IPxM"bm`d *Mt2P S PI:ȁ+H$a@gU25J"98#;#xc5# Gᅄ>5$Ѓp2'>Uqpv(@\)٥ _S(9 X9@p` @@+z`5';X:ؓ$+JyR=@8mDU2LZK]`DH)pDٟ ]䩤 0)$%tC9=|CIImڳq2Ii:&PqH,@AS23sU`L ;j\qj>1M_ڐ!Q!д}g8| tEFC^QG97lCqT\;X;]P=;0R( joK@)DRTؓJG^<h^\ H͵T; U=˭}P\ CV&`f_*vs]ʸOKSHp2_D; D8>u5##)5:ذC^:q0#_*% ) $AI$(@1c RvЅV(iQboa);`F"% &I)2ZoIsqZblxL]RǓn9n@Ѐ iGg8ݥ#(?8 Fg:/G~x s8Dw5XQ=0)`qPO iZlPЋ xh(V.)ȥn9#Q6Z K8f98pb'NI0'^Iy1^C=ZЃ=ۂ= a *PG"9ű*Tq^I;8 4@3gbרw`sGC ͽDdaU_s2+&YU=pI cN gD%`N#h$c>f)w>NjCT=iՆQmqqޠZ@PHߺ[ ʑ<0hl %q@l} .`ꀍC%p`5xD8'Ge$8\ p'[YN%nV0Ӵ%n`0oH!L)=(ú5"QAuT-^  w(QH4 v[e`…g$ps3 `lϫaЗ^ tF õ3̽aXxKXs'Y'nN7ྖyetT)-( CJR2Y Nn k:\0J1)po5;; whiQaHj`s\b&'9h;(Qs9FpXX>:1XsLj-00J\>l ĄP6B#ؓY[HY^ޟ2K\=(F  \0Lk HE0C(s:n$Qb Hb֘cuƙD2Hp{w|[Xpא10 ^㵆6 ? Q23bqH[0 h)=mِ[ Jȏ99h4xV[~xCˊT/(Cڪ]0`MZv@= P1{x3[c4Kr8RMk6y{twpXt`SxP_Q^)k7F\%@1!6\7@M*l#֫G-X-O>}µҥK0]: 9s.٪շ9ز 6&- 9wLq7%d;V,;jA# b`vD5JTal5Xo3O%o??y8.G.m4ԪWnFܺw V<'nڇjifGs`xU{Pxcɹ0WAH,QrKc/@쀌Hbs9G3K`t`f?a7 ~2z47rrNQ$!2!Wis APPXK)tٵ]M8*lPa6Q PG(L S?8Čvoa9&&mJmYZ> s[ĝ@ց2Zs͝SLtB@Cnsp{4H$Hv/x6B6B~ĸ@L5? ˃}2M ʂsH.#cLD#jVz7b}dz/Ku!(VIh?XrIal a S-FX!GK`o0 6ڙ>80db3$Rz1eih1[E`7t`]Xa|'Z߶|*X0}Zz"#CS,M6xd4(D KF\bK#˶DW"NJZF 4s4_hA?) yZ3!%s’s Q+q' sf:;)| hZiS37w!gNJOω`)yUW4– :jG.L +KWXO\7!pcb p1 %.,VZ>@dG-.P8C8,c% # uCύ~1V5u;b PBָauaF@ pqLcs{sub,A \Lnz}Z`1FLj<,-n}EhXSU]?A%. .j aIKWQ?hi_  < DDicZX7X\u8sR(ЊxIC^41cdP4Z$^@%wDd AP&TB1N7Xz@ <WKwѤ-D7>Oq o\R"qA qď%8 P+#t`xp9KPdPÆen7x%ďVP"ZYg7 '#.4@ |BIf mqbFXPZε  Vх@2@/  xss 6Ђc$z@SF*#~6R,|'*> sFZ+\ч>|BW !|#x(q1HrI>;ERebB]`.8]\PABmu$];N k4KS# vw2V[K2DIAM( 2DN\a % qYNFn(;.KeGĀ &0) & 鳀b`)(DWtK @M l@ -(:x|O"#;ϭOϏ1$(fs}}>V =C11GdX$d|v裟N]}ABFdAd2aE[84Q1|\PAJh ķ |}z,P.4AH JMU폽LS-ԕJ$h kS;@,3O wH!aacEZ$hAaw؉U̳N E|.ppTTY5`ԼAd6PŇDVՂ"*D Đ5'\HZ$ģ\EJW6(;i{M<, t%P4\ŸBDDlܹP- U C>N#k2(=HF\!Y TQ ?@L9hlNj!xls|W<sȡۈ@W8H@ .HJqIc'D-H"&5A-NL s'0a]DJd| A6 ]T^]@$\QA<ŏ|5.\W h(BA#:a@qj:=B@dc8.>@Dϋ z G=y,`ʊD`}!:jCT?BCP͈hIPTN|ċ1Q&}@.0A4y"-L AX^B\K$J Hpa섺P1}ADpRP|%X l%YTpX'kĆ2%1($.iB?ڌA*i4ӱ̰%h˸ q7ŋnqpGfXEu<@D 3D0RdɫP,T \kO\MO[cρðط'(RPҀ@ 4AzAB-E`)iFC?%'ԁ. 2 F+2 ax,p1]a_1Daa"$B<:>]m,348,R51OM$Z@E> MO`t%eC"o~;@ܺ;p5G$N ".P <K+$r +t@!! - xri.5 ܃0 B'B5$3֚J 'YtNYq jMB]7# LJ@' b }/OHJe%Pxifv7`@ \P$|--; ?*%$(usыLU W1B/xap@_nH-0li)Y0_B M5KG$+H\O#=X8 t,R8GԠ(xt]Dh7,P0߁JQxԏ%9a6S޸(4za$@@O6\h"~ad/bCL5&a@uaTC!vcixx`<Xl C#vko(H@?aC,o]/Xҵl3/D=Bծ,s8q͸oTbMEG\$PK -%u<':0017XE< s"RkIqfF']d @C T(XoGX0R IûWaPSb,D^wvg\Ts50 H@;pl z`W5͉c+ΨtLͤ Vb!sEhdQ jVXosTLe1S- ^ߔsX:ۚlR Nʀ,:pPBF˫pMDB:tHNEE;)*Ԃ5%EE95tbˑԋAwK($cI5p@/P@@eh=N+.,8>iG>ƟL-B\<F7tn<V%OqH|B ڴ1_iL̨.0L/}ޓSH7<);'@-DyqgY$QTwt bG}k3=#9},L 91wp4yeJ+Yt%GwNrygKld.Ƥnqعsoͪ6<W; GX+4-؍KނKUXsN۹ma{Î?F %j[]`Z}tIΧOL̈́2ӷhbrPti7`E#ZQ}ĒoAcC?֑9$ml[0=~RVI$@@Cʭ0 a9Ф@H|Bو|0i5i'%vڨ$dA҈ZńpjDt+ЦZ",;8%ι~Ab/ XÎrJʔ V&2#@46o&5HeӬ ;ƈ9ȓ7\ 蠋v4eOi@#LT6PmL=LH#bthj>BNj$6 8`ju X#-pQ!L!'(eB~Cox|R*ص!  H*-`z2༪+\˫s/S3"c 5 heoFڡK9,DU99NF<6|@14}.:OiT2h` JKY-9fsՃt+3>N#@XIt H❑ݜsfp<%\!@c7))p"T)ƪb7zRXA]#0AJ,8-ĪK20- )D (0xw q6'%n"5DUlf\QS4?A vZ*8&֐5s߀[twLcP=7_D7f1jV5c2;$LR Ê BQl6"Lju.v G d 0*V SbK bl/*\C!CG#(M]xV)F69Ix^ ZȞ7V,/ N apaF7xd ߰!#hҖ\9*u!4`P'.Q!J` Vz%fy3wg$" xG,j$tP<p yb#bDMh;`׈2dQ$#Q! c$)7XB"H1,\yR"&d4&a\)'”@`FqURHH>A7XE쒮Z71GI1 ZI'&N2/a `0F+D#d%6#Fs 2]{A.l:9*NH6ጞre}<7`^-H3[T GQF '76z\L>4ҒPR:pԁ~Vp/FP bO10te#c|R> FKRe1U~~\? $b o sq܋}`̌`c5lbR`gzfҊa T¦!C@#L@74@ qEꑸb!VH/ޢ״n1.2(zq bK fļ R E sWgp!$`,.m TZ}*Aْ0&F -~̮f.A9&z~B1!O:*A p`+ `bcNgƂlkzDxK@L$8l^θ`AjlXX]+%# X#`#hCW \Oďtߚn!C!6LGI)^ NKtE`Hz`p ._z!bz̒$,JȊ  .rM+HƂntf>>TC mP/d ̰WO8r a#b46 "wD6h'RB YXaDL$J*By^6Dzj˾̲G !v߀+ Q׆羂.Gxx #Ă~xPgKd IߠT&ێ~ p\|nm@A*rpF+@q@!'D,IԂ2"IR"OKlxGԮ $`@;$9``$`˹d@ 67`P/NĎ".@r2."آzn-C#]F@* ,-<HTF4LSp#yUneP1f Fz"4F}KI~@G1+G0<x! FgL(-z( A XǨ , &-.!N/) H@%  0` 9B6aG|6B(VaLC$2S3MA@ng#&!?-L6"L2,00^+pLFήacxl*d4uM+,x@,E$2'dzM.,gac3bdd2  r+SA N, a7kcēO-pxi0i=|&rHag ̔H`/ۀ(a8 Y8>tjo:t f$ nd%X! Ϋlg6!tE?lfҏF)"9 #. `gH-Ib ռ.M+ @؊bx1B),b%VHf!UN2x DVE @9OT-BpA"T`7bj (V-3 N(P66#^s=A\ Rr" rҾidJ ؄_yy"o:1\ %WEUP7PXTWOƤ&6Kf%Ppٕa`]?hALhz vM~ӖэZ JxZv@C .bxm7HM&( `CLZad(@@CVЎxH,PjCX1N#~{4aPa4A*#W_ǕZgeOopbZ,6VS'cg(V2[֬ƪ?Kd"$) ${}c7^gU%rwڀ:c7`22 uPIrTBB&Z40jQFf%[S3m_"3U *svk")U͔$(2@$hhqX;Ap/"NAz/aF*E**8 `7R++!D -wq3@ @pg-F`9Xł P ť "Q+GGhD@}ys C~~ʐ^CW$2C$$NLWihQTaPK 3ϐ>I:0< G?F cBaI '^?UBn$7+;K ld u pQpہrU' q8rqh ^, 8'gZP7 ܷr`-2 C i`97 G.@ . M>z&D% gTfV\jKƶ>xS3w^CJT]C61 d8*A@Kvj P#cGczpoI`o"Ƅ"foMo }PNgB I @f4d{S Xְk@h8| %GlpPrKB%Q-.tG(& X Yi @= 6#{Z]XV{UJy PlI Ȑz6^΄YIqU&6tnh6mKс*bPm'hkkLLcޤ:AQJ/BBa RqBq%^(7Z<Ou}a VPC00fOJfnhP`Vv&rʻq ~CP Ei# u.H`:gj:1<@  жYgeê2bgvi#c>z1#z~ )  / E5/ !,¥ "L#g{Y3а 5&~i%a G#Bu`=Gz'YZgPD0 A pC DP?k ҉ |$;w> ` ` N(ۓN]~h~ ҕK^Y)I4%\EJ~q͊ yag ,ok)wJP1&ñ1M;];pbU$J 00ӧ})pY*7cҺᗽ` jà}A@|=D}U ,-Yp:r"pQP m؝ !5}} P_ Z&b %D^a&rI3>bm#3IK3=:UI#[E`a)*d4VU V53, ƒ@ s{rb4RŜb(* r2 p`,ah[| p jf m9WPp +^p,#!7r铜pν T@u.܂b!~ʰp S 7kϰZHQL<tG?VV>vg)sS jޥQ-֤QW-!`͊Gc#7atyZ7ë{'$jتz:Q }pr3 m0}W\9лD ]bY0 L4x  } rⲦO1 V ~MJ!Gg.UűF}2x $msʹ0/P&M3uP–&;&Ec蕔=1V}2Ty0 3K5ߐьgtr0:Uv!Oc060xuʝ6?%Wm6oa) N㛲[WZ +S8U7;"7 mp} !!+D[ņF @t1m#>秳쎔g2Mt&huԢyePb}%a?TuƑ=3Vf%??$xG˛^1VF'<3fBr "{mH8k(a'^VlSb' Vei۰ ?-Z } RZ9mfP%A o|dqy`YP @9 +'-0 4Kh` 2Q~-i? ?[ ^*(S 2Hov1?Be3a^B5&\==^ՊjG?qaCbvRtl*_f"3J}N +ꍢM ˄~ցiUB}Q(( &UABϮRϚ?LFY2 p!NE @z6/L]>HС@p@e 2r8= b. #!Z|.PuᔰUՂG{ U xO`J^Yy>x:y1.MD;te5Mgڈ"^/ZJA[XB ^A-{mWSo c 𥅐a(#T0)7(] *   $K]XՈ 2)/ `7`²xi JDgB p~U'!1u} Ezҳ6# {1 9TK`A.zSb`6"B O@eXZ 1 A57,.s#~a1 0,*{ b#` hE1xN< yj!oP6RKMu-U 610/K(]r7N( 'V Tv #qWԁϕ7,TV,9㔘Ģ%$EAzBdM_SRB DyaghCl*r>p@ qDyEE3Q;G" O!r|MX F"hх.H! +~* @8|bY\hAI 2׍, ْИPyg"[izXq괳opr ڥ-j"@Lt Z!EX8퀍´oIHjWò>Qo \lv  ,m%& *K=r2+j"mx1wZmh}H 4L[iБB9Q9B &6a Q*fC@x d ,=@"X C0*$Fn)J"b0" fL0̜H@`g86DG\f`S F-@ $H4R6Rj^O$"]`gC "T)/.yA"r #7>C߲kS"d) /8[ ,\Zޖ֣ZVX:X[8ɀ 0ڏ/: N{p|C00 pݟ$P}V';Q q l,b2b )viJ? iC2qY|eA׿R mY )cc "̖!.P-S)q. !у'/Њ%@U]SO:(8KC-@[ 4 k!gz/[}؀((:ةAE{`.!X<{ɽz m}H=k~/XB0)c3wHNˆ" D@R]ؐ,L|&!`vsUUz тS9FL kZW=PE0'@A,ٓ:QEARxKPs ܙU=-2~8 9\3yh@?)-rJh'¸ r0:+ {m}d#؃| 1a!B `0L&1xx HT]85 IО hI!0e`IUX-XϾA0 /a"t\86Zq\2爦(p0'F>8c ZH'j퓬ͤCP-@;' ?^X<("Fg>06dUpgX:rVːC?L]9[2rMi`i}4H?:}G#z#\؋wlc86@S`ЄX@d6)x?YH|*08+$*>alIH ЉZ $!Y}pRt>=r3W3J`"@&(D0Q>RQ1h(-XXEeP%rJqUR9۷!>kx(W)l~3SZY%v@ B5`$Hn*7icEhBHD )DT>Ҝh5xف(mHdp[ۼMB{+(_I14qs](0KY68 7*t38*=tI1vz1X@@R6r}Z&)bbI&Vn 戔Ȳ =&Q& cX,!+~[Y #5-=Ț>C,XK`S  d F8SWnz[D 5aT&hچ 0#}8YjnY"Hb똜 !ÁS.$UCհA0TK6m^HȈ%h`tC*hsI#C]bn5Wd)voFn2[&H+ > mPOmQQ =PAP@"aČnܯ̓fᵈq: %i\Ǎ,NVh(6xI :⒥dз!Q1m6[89`?d8 PG1PMA>P:M"|/T<6U*BZ&NgxYU,$IfxDnQH `Q.ОS@wx`o Rꛛ!ph-0zl%iMt!`A#G- Fԙ =[e ̖g.Žrf,+,j7g#7X9XaNYD)s> S!P&CU<ހ6MH(ovp B0"߯&A"UNys!W{*f+/PvhЇ$zpqV>W wK$3_I.w-ל{P*SN:A r^d-6F&vaf.s?F]($$ShVxB0r )aؙss$_ Э(eX>" [ts0،UwE2({=YXɩЀgpDž(HZnv]*I*44@YeQ@q j $1yQ-6SQU(X=bChZq- PHyakP :ɕIQp)7( OᎾ4 +f] GMpÒ'^~60*(IhIt ~JΉ݈,X5ğ81*߹Ν{c ܸ9s&hD@_J,TeLPֽad *t(ѢF" +ޱ\F{@"r@\̛' ZȌT~@ᠷ,Y"™+$+!`#y Z  Teb>_,e-Z\8*UʆaZl^K6 (hi* gDx@#d Î 3ע pY9'NYc@\ӕ#Pz F@Gv$ҋ.E PԱ2esJo١Ň}&H#u(JK1F1QE97ی9AL0MP4-RLL@5%@gPf؅ERNIg"\AhgSEYs#bD U@l[98(w^Ph f`R+G9r@Odj$aRI[Ƙ.E2;; yc .ߘ^X!Kh6.רּ[A-wX-]ٕ#jgANq=r<؊lAXnA#\ }m"+:ܹOsgzn)ib8jBq  8!J | Vi`I)dklcbI{UPd !"\,z7g(/h@Ž m۠[X&i @ b*8ґw ue: >z%Q1b*בFdS(,d  t<(7I,E2]3M)J*dia"zECA|n&!1R P+d@у_΄.z2E 4 R ЏYvOpf5N BDSҁEDmx3Y@JAq\ da+F]7UtQ+Ĵ$AMϰG(i #yTj l!,@6}xHAw@ʸ@Es'>txpbhX4rtLNk<+ . Nmϡ?l.YTQ*Qn4@3gpfpGπB]0ԛ@2 (Dphr(A%ݫ XB E!Q$@5RIX)Q@?؂4SY(B.y[MI‡̀+߼Q[,@<@ bPT 0HAaI>`$#B@FiYh :w cUKv$BȽeQK:TK)<?3p\":l!'<#X>AA?x)Csǥ]E0gĎ::fhYwCZPBqC ^-P  #h%&-CE( @* N /EIyEP!p&8T]T8 PI` b]!)\`ՎƼ\F),QQ`B@w/A,b-0)rUnAq,I  m])XN @+||c?$3B=Z5o>>E_1#1eĈ:clUvO$`@>|h1)U B!Q8)i<vuw,G\pbȔ|%Ē.Փr( |G2%D@]r#1ف|]| B4[IPv Џ@D;rF) R2ORtrx-B (0TC5DQXB8 P'u!វETI0\0+ .+߸BTLYQuAN g1dBUĂ @6$T:A'=L)(qZȶu\5Gt$B UXF)f/ث @1wh@%$7\f\BJh"@W9Lk')f`/x:G9x1T(h&)tAE0dEA?8-DjALƀؐp[aB (NPMUC GQ jL5;BIVr*$(/8dTl\aeX0e,$` ()DRe(spP 'ˑ4 z$)@DK ȍZ՛]U)‡0~pi6`& ֕m!l00ԃ38gv+ ,#1 AhԕekpYh D]xQBw 7ln Qn&@A+ d>d&p@́-P┄IP|z-N(0|Pdx0PI$&^Kh6Q?P.5,. 0`6!*2.+t-|-B(%h"p!D)f vu) z(u'Bˤ8l\}])C9LLB9%#]+@7|B1'<0 @- x(=B:r .F,@ɚdFp ]3!/1pC)ElDL C h@lB?BSaD-LQ@?Aɔ-Ђ$Ty!̀CuA+L#Ђ}+C$p# `P@k(e,6  `CF5FLQ߂lawLDZC}D??r*@(PGB T(0 [sJ[8bE1f\%+3hG,>sç>jԸ ,4)9|BX)68ذ&G1(AR+9ZY 7z-q#I:o6 07lu7Z(QszKo1#N!N. CHcFЦ =ojɹs7-I4….LC@hqB(sȅ[n !ͅIi!Fu)F 9bvD Y*BNlseMZ Hİ$[MDI"jEXAPF;+eB;@;N;TcdzciÕ6Xt(6..tG  d TtJR%4r@‰:8b$>R&-K zb&dhiN,1 ’O?ƈo쪕O:8o,lgx c0FbDda$xFBa ;sx8V b}%x f N)8myex n 羸UbqAA-YBhJaD9d `>ѥ6iMʙ$QF $!dMjŷU0%%тRBY&X;0gB_vEO})zW#FFAX`Jb^@'V p TQFBCSa ~x(71)0\A)@m#`A$jX dbc8o"1eb*[ F;X&`` < 2T4C@FQ $ OD,$ԍM>xC1@J xaK^` Iט~LǖH`Gdp[9%>(PnF0Bj2g,*T\W,`HAPŐ˺A:"C*juc 1 X  @0XrY.SPLB} HʶyȞ|l`AƄeJ;܀zK"tdAԈ0**XjL P[)E/j"F #`g{0P 4NQ(":{5D )@1\Q @ Z:^$'3\ƺ C!m]#S`@URo(Pa*ny0 )">Ó#RyPF0iFuF(aU A,.d)|&FI^&( a HOA`Kd@K6$5NA,Z(E .'@NdDbjC .?6}E! r>N) } $z @>%UrGN@PP@N笒xNc E4kS8eQ|˗8 XG@A/`#X&%@AA@H\` a*p! V^ZA N.dFI  xN /b FAt tKezb d'zDRAR 0, 9b DfHgZ/`*q*#wb jzt!"hM $o ( @D֠ v&:tPTo~nNeNKVir\jNr.raPn.÷:ɓ!CXx4pa+`T`ȎSe+Tq()~m/n/܉ A @ t n`O @ f` d'R@r @ a ؁^0n@Z lF ]\z@zz"4``g lr"FcgvT# vl!ZG҉H ZALc %$ FFd hQ8 (. ~h)$ 0 5CiYf3DYI".rR\>l%Us "Ou 8a `,&2 ,"FP r 4/1 3 @!Z&!V/p `;TГxH K  @?0ZA t;w;jv.%0A\'t@:Aj뢈A ubo*BFOjg)3ݢ``Hwjd*JdBnbM A$LnLB!Z cf\$ pdv ~`<j%PNUR F RB!‚ql`+P@gtf¤ EQ`"Y pEd[! a^d Z@ E U``.NZS O l4*[=Ba+ LAε5t uLc;9P* L ` Vdq" ~)A6!kȒ-i(hLlo/OaL߄!!R`LD@VV ͉V"r ӫM!AX`~>u1kw5a'$sP/Sl3D RT} 苾+LtN- v6IoRe A kT s3  Fj?Mt I$!R*WFj-kjj#ط`aduab!4&F 0o a !D´ Tr$G  *R\Q˓ϱ~8 IjKq#grQN-ıV`@VNQڴqJrl3M Z. T' L aRTI0'Rxz?ﶀz <@!| 8^gR@`8]!JwէCAڀ)a $d?Tora `e")'L pT" j.vR!e!2NȪfLѫ (GX@@tze tQK 2qNv4C)eWsPB)j U@P-<RS+ xuTLq! PT&e-Vt0x ZY=ٟS a @dOk.aQzho@ rA ~7Z caǡQ9W *Ѐb"iGj( ~0#%Re fF2{JL׍ G `;G0 8`?8PHU"NQΪSS ɹ!%]'ؠ$Ra؉QFEҁl%(',~-s pWeA-  JWZ t1ﮀ "ᑢ=,AcX,B/ GҼd  0/#N -^! dFb~4*j`߶$&L8DKD |AD) *NtAlV L $8+ \IĈS9]R uڸ*#l2~kk›,`7# 4fUn&|S cF2bH\g$@+cZM`TdL#;'UIKX} vB0oNLBX+Ybжx/߾fx †vۧVdc\%JYϱ8!Bi'Ԑ!IЧH=|lSMIS=*D,H8lJX{Rwӫ_Ͼ{t*@X)<63Q\*8# 5 }Np0 C'܀ N;1DC0"B }CRWЕFT+'U+Bl1@AP_YFIi,@a-&Lᄮ fC7`M5( PPDRPx+M)8dW/+Q0@ lsϜ-tP 2cQ^ `N ) 5|t3EB&pH#i[ʴ3< zKQ0KrD1\pKDI4l'xR6AKM#3ҊU5'`vȆHCd;-.q6YMa5 ! v..#&፶<( u*0ch"CxrpI _^J(>P'(aYiP: 8 )%@8ЏC] Sp0*f z.@Bb`#iEpX/#>:@|z|.1|à(F/p0|e$+ ’#,rR#ԂbK&`"$h [C*#GeAOaP)ۄ}pt /aXBd ah?VIcOB/$ 1uMBszPgT(U xFÚC$TC,@lCr*3,d8֨EpjMFpnp}"CG]|9|oU,ApG 4tH1R!t! hM 2(&L<C&^æ4YI`cÁQ6>FlI"Z+`$B<.$؈%fZX !1 Nv C{F]@ Zk"Q>@>EO \d_Bug`q%R%r+&40SP zW4+ 1 VAY8,8GVT# la#93#sWч%Z9=,МrX?(Ggsc<¸4KpX@"[xl-dd PC*桋Tv B’W)81P&(l@> %R`#GI*#'`T`XK2IF$'Q3<@2hBI`D)1bHNc R;<STx4 G$ЅITCEZ3f'f@X$ x;f` #C9')d =]mp$Z% ]}o R _nQ$=\@)!rG >0/8 Dq༣ ֭Xq-!0%JY)npp:(ʔ7XP !gtv6k tj!ݵ.P.!;SA> ű vo'=! ! q yb  p@M3Q kP00GEa pKqM p Yw\cY%<"m} ʖ10e4#TE06'aT'Pp6snlpE;0E*&G H&b$*68}($mE44Y 2 zP  K dV#\rb V&Tz oP9, kP,X!㎿ P o#8?@ /!>X._ghEZfwP> @xi0b  W0ZW UI B/1Mx` `]a,C 'p7F ) 0m ? :1lNVcT_Kq` P`Taa_; hi p%Xb L35 "n)piDnPmiP`ZY@ pU Uuq97ظ7ytvV$m Pa@@ K'`d "P.SE݀ Dmt8 BDZ'ֵ0VhDى.M RE Q-T ar` 1*IҒ# 3 a]R%F'P) F  PCo0dpEsp &* I#,% *:câ!&7$t %D_F:}De "%P'Xc}42mv ŰvpG G v bȆB9d% oxT u r20 ! 8(ZXLP gNW/ e ! 20 Uh憐h.V)# b\ف1? M(0.">P@d@-i; à ,`W=5і8ߕ`)6O,!F&j P#5LєOyi$ꚡ&2}L"sSbSKmU$buB'_%Sc5V ע  )mwM@9 jHp " p` ~| k. L ؛J 0 tEpU !C yƜ -pug` y10 9>@==nWfvȥxĐ~KI!$@A!k qфp `تwW2 jK6_$#TY|`ea fTOJp'5!2rDd3Rq53t5e)H𠖗C%G45Ei"& 3EWA2`a<&]RCjTݗ}* )>b"$ |8vК]0r)9%ws ? g@{GT܍M@QɅ7@ 30F00I p c'IopKa 20,PUC&K%`>c?5SxeK4Ts _s6&+1K"Q&ƐQ&+z`&AP : l q C Z˓p F9$ 6(prMHLyHF KHUo%FyI I0 8YfKKit0Q֐pNg@p0@Q|Xs3aś6'PgpJLe +uf{x>ea6Gngn&f%)%m-o&2'nr5Eb7 @VQtENUG][*qQN `d&O(φ\ H79xGbTz媢>Ҽ>#P7vⒼ$I VF |*G2@G"+`>}$?bnj3 8YQI.ej8%OYUPeFE8XxYCt $tIuZ}clUgI76|3rҥY7aԧ[f \' cFȖ3g'|0cIi%|7`lt)vilqy!Ӓ(1 b7Cv کRg .`v)E*` .dAA>m(ހ9 39,q9bąOZA F%j',8 "}" @D*XiMb&pi `d)tM4J&y+1,@X(89-8O8%'Sʼna^y>qVZ9,bVx0c T929ӌنӄ} :&c8O+:\4c&cX.PdcN`7C]֛ĽgސCo0.OnhRNAPB.N.B/PA>c){ blud 4`KEM`$.a@:.I4@Dl&} 3hqЀDiF[q+pI N)(N>|kYc&C#` $` 0[T:6J@zbFJVXCdZ'sCz57F `y ivf&`6#Zr+9WxKq%Z0&#ggB 9p"PX\_+p AA ؅0v1.pPB#+ɈwD'xW&E9\B8sHMZ+K Y'#\B 5*p&F,tYB \b `pmI88bqQ[x#.II:NpPd*5Z~H(m%! .@պ.0Fsɬ7xg^}":(1,!VKDNO3`e-3O6F3fZy+g x@P2k!:,3¯I2B8d# {xBN 4"!*Sl?*K_BKѡߵ(~8  i?8"P ]2ف]E@aGa m` HKS\R̠PHɅ3tGuE?GHNkGf7 hO"phN"ktNłJړ&1 abHS090WP i8,6PO3C"+C#a@|n7`'!s_mV-OT+0 d0BHp ;@Ч7?'4^a ,d"WĶFEMkq &ц:E"-!1!Nb ej C!S(Bb@8@Sb(`e#Hz Xpx7pu t<YpQ$`ǃ^h%ԃyx - >x%`&jfذ+b Yh&mlCȂr8#C@D`1BnQbi+)/80YK0I& W qݔP"+ dK7$۔.)H BTr %SC܄+-G"Z6 RfQ-QCn0B0,ن-,A62M|8s] P+`p=`z$p-(.Dj?+aHĂFCb #}z M(BСc"W*zV>oh,  Ml`)EX zBU+-D.X}7H$̀4, GRpZpj8jbbX\G"Gb88[#to07]B㈶)  x~+a &j!Gpy$ oi8#؎̀#@(ˇ' zHK[GR t;&Lj1oHt%ZdȌˎijHӢΊ, oٌḥ09b_yopZH:6@Rd( C kDCD]D엥, N@~b(((J1(!Xz(|X>U)SPQ_8$pI[ 0"͐Ũ3608&[Ko1bWi0t K++c mAJlm mI8Z Յq|o=X UHR8*Ma0/(.e3p3}13ZFM6ZM6ڟ::2:PL(̛ e 3 pN p0*[0E@:qsY𨄥(v舯6F2#LXۗa0HU0# "4 H+3B09@Qe%km}8t@ xq%Dﺂ e6RX.Qv=BHB}UQ~Qah:z4Z[chg$XGĀؽԩط9*`蕀JՈh.}1X8 6ZZ@0ʹ5/~DE8H@ȁ+01 K [ƔNɔ$zi pͬ֠( (^!&bya-cYxI5k KHx: jj%Pdx Lb g@3^Cg]J֋<Ir8 eNmI^%W杇Lօy z\Xbp6㈿N``м@1o @DWmXx(ϱMm#d.= i.LH # Dp1+1y>@_i2Gp PK3xXf0&̬r)=ȥӘ[&41n@HHʰɐ K8078TT LǢLJY¦ryD@ CDDdv0aSCb|Ite Cmm,߰6%Ѕ W}>ZPq:oQ*WN.5@U@ZXkCC.@j"ےj8|61XfF 3kG@:X:zu`+UG#YI1`P }^H Ә  ?V`S4Wᐖ3KLت@蕷u d(IPpIhrd*np_0M0 Y(0d6(ȉ^*J=LN"kFugXF<:(ab?ꂾP[6APx @QRވ &x FH \ߡW-h h-d`耑Ȍ:Hf ؙVƐqTvc~:xjNH^8sg Bd -;`犆 /*^ l;^ߖWWZ`^"7rHW7d^8r@#  hD(M8#tSsa#Jp>_ g+D:7X9`np18QRAQ9kk22uQwRixΉf%@ӴL,( srAOPйn,m20o8ac[0:j __>h98#Ea^q^mxd@ЛFfqh@`g8z=B@%W5r~ypXr>NIZ`I[- oʱ`#p XB #0(Q`5`Po$ʔ*Wl%̑pmr-+K٪AHhUATӕ+Р.|k/Rɥ7= @#.ߴCм̐͑9i< c5e60cWurB1ST3Xg&FcK๚X+wtɈ&6s&; g}iݼTYZÃG"ڂC:Dz3Xgϰ߀yƉ p1 \M""3EqeF0w3̠.z 2!2圢##] $L"kVd'1=aY=)ZmÆ50xd4$AARI1i%ZC+]$)}ΰ8"hK4%' @p@Gq R<*%”C JXQPA>$2RW#$me5RAp`'1CNyf *cM'k+̽ Br'AmØ1`|p^2Gtq`lm oqNaa 7up:0K"K|P o90o BI+p&ڝa*(+xr< s)W@4z JtF>o#71 dAP9 >Ϡ<~ '*!.?s&Ѭk;+rA h@' ă:֡a >dyF6Nq >bt2lIln$uМt H @z* U8rlAڎP )  >Ʀ-H[`bs!)^F└ h"T.Eb$41 oqh$H(4@$cS.1q@Cp6Ǒr 3jfx1ALe[.Da :N:iuH::ȁ Z1A;0Za G/ЋXaH7tDW1`}P bihg$-4 `(B)V/2`8 .cb87$ O ;(敁dHpG2@IpEЏmԱ9@J؆P!%4# T')P(ɓtGOtp(`B,`A”Pܺ:dAɇ$Qe$ (,lH mpq@ckLi\r@ : ȏlBP@ .@RJDU!U+9tH4 J HYX=tRIN!DCBcҍEE L)$ XR2H0qFJCqJot vF+d Z܊+Fc<<AKuV)bPv38<"0¨)G.ʼn08 %$&LPK@-1#!CIK6@LL S I&RU Y |B_a@-HJĂ酹2JLÊ%< TV-o$FeD9LZgp1(,Y!@󴁫3 ]Y <Æx& <ȤU ://d'0.SzV8ŀ^Q/<sԚfc䄽y2Ќ # :c>(,Zrm1K-c"B@ B?\0 rf.JC-0X7\/UX#V)BU ,Db# Ai $PJ(B8.xCOL[`9 [H 4+t44)tA>(Ek 0H ~<FgTڹ onHAtxFFG7ٓl$s@K"$|L?DuԏlA a+9'BoxGC"@@ )@(kJh4p3@cOh6@C,B"PՉ,DȂ"`AIXlZc.&m(#$ ѝJBD4-]4[ @+4tR O_Z6=L lS8yAt.SN'X.¹C1ytX¶0371^y/3p:U Zh2 G*@h^.La@@ X3M +C)N /8 ~JodҀTRJ\  @ѹM8B!+ѸB&Ĭ\(@U<;+T`[` ec[C֎81J<-H@s@ D9pTpBo"<]LqQc%u[C7c/pNwqcYH*{Y+^GoY}BPW3B@ @ 77$cxCE){# ]84OqyK taKɁ4J#hLA9E X""Z\~kp¾4H(ѹD]&$AD@%P֌:H4W8=`ߒ 44+㐔<``"HaE+LL)10tDx` WVSeXØO>yCn(mK8>&DS8U8Vh )&*Dq!;H Zh1NBn`L=h>z`M8 x̐)GN"W`R2ؐ %A8=RPqJ1Dwh46aʙb]b[`#xQG0vcxCT}aOΡ h 8+3,U>i] :U)l+sgt.89"'h<|h޶ AS8!['EDb,8I$`.Kh_/ <#U*".!m" T`ى 8I,v6ȞI=H%]4hjS VH2$^-qapDQjȕA!bA ́qx-P}" VL8iEM)TAx'P*sgDu*0bsyddf EN&@1q0d! d)L- W1ڊT.9`(#8$zp#'I70>b@˞Zq0$"=H? C.*.0 m!^,~lpD΍u dJJ $ A-M=(*i54@T]XÓ!`&G!#APAĨ`[7!piMc574A-sƞd\U'bY\D jK*R1g$Zd+\S38D"1Wj`^3w p o#BA6% Jgf 0)p aC(X!8 D13քp%ˍ4Q|E@?ڈckHd^ݠ!`ķ@ ̾#aH@&j2|]A>D  !-|p2- sg2'TgCn#QvTÌ\X,P1/T1oNeuje8J :1XQǕ\ $t -5IEVyA'-`8Z$|qɂx v(@1NEa͎br߉ jdGvLBbn$B\j J@8d`yf)ARAr|CP!F+q*z(ESR@."ߠ'(`. Cү0-@.VX2|A 0s l @ N\Nzs! $v0Ea"ׇ0`gē=M2EFa p!{캠|4>@<@<6jAaB.(@FM<\ }@f `a z L\J# "XA#JN@)O"ZQYOB "CNA)```v`.0>,/Ll!B`a =ou*/!CFJ@a0A A0XBg ![υ b[h> DB?FAIhΠ VG I=Vm* 쎃Ʈd@>h@J!k[L2BZR)@"~`( ``aTA6N=q@\a1!OZk`Ǿ`Yޔ?ДHOWw0Q$Zi]ND]5/a(F)g* Z E *'M] <Bg fFNE xbJx{-tOee@bFhpD\Pb){ =8A,!EO8@`b!|%|ÇaT!Y(] `Fm):p(cir@s5KA6NA 1am'"y/.RE/@ `@Aw XpIP`/ 0 [ k!l0΀h ( ) E`!C:jM`jx $`h8kJ]DQ3PD0\Vb(!! ?AI րH` B~B:`t Ѐ Vh#̲N8 Y\(C=nAp#nKh Tl'вE!)n8]i! G\a,'2`V'ķb  /seTxayk4QB "bb+ Xa+k8!f !+N* 8`bD`tl 5$Kh2WkUOv9aP͵ $#] 1 `D/$ !O`iA!a2hC\ n bbNX$NwZ;tu&NBT$V,H'NbU+.!o2 j(^\a,)@/z`œ×Tl` 4  !āAHkODf9DᣰeVAhtP?!:F^!B6 lZ!$p N>N"hD<{A)m7 X0.A@Vs^Gf(נ $\*#"C:\8 J@ ֵE)` :aJnA ۰ }!`+6LRmW^gV<-u,aRR!]!(Y/u'N*7, @:߳5$R GLDP$8Bo.a`h'ChM .u|8<n`fPJ" F$b`e@ r n6=ARo78aGH!*r!%N"wWIGH)<[! eaP\`@Ճpy>J[@ɵb"\yCWju(B+bU Zݣ*eu # `0|A&0IH! tٖML7cA d >*$@%bIHB64۶9%5AA4I? @x'c r!'B .Xe :|1ĉ)QbH iQ~80LM[k@~0_ i 5IB͡H(~g0XCK7QF'*TDNbXȔ)b)2,;VthH`eZV|બS'+cd8O0&ۥ 2gnCطo'>cuZ?{'8>NH0P@E9˜¥mCc"F-y D5U0Dihd0  b8Cr l ,a6pjri :ؾB 36= ]) [%)%!a #, Ȣr1D> Z@֋SiDRbI0\@5`D@SI`#qeR;Yא=䌟@ş1d 7$,|߰lNp:ĒY0 ԣ h72Ăr Vj*Wt0(]iSl)х3EUzD~$N\ 'J%RmbDEV6B pUF 3DeZfZ @ X@L)C"' ̳! fЇ~Thg7Y 7R/6Xb 8"d x @luŲm0 !bw!ZC0.gب$Wހ{Y S:ʢwh@ \–#z}I+`!L"k0,@4 X >@pd %4!̃%S(#yYT=X_0:^^O@,q4)F2XE5p36q@s1(-b8X! ܐI!B!W℄bDcsl7D$00.cI @$c`9I  JŐ=F1Ő1D-dAp}am~ѹbM# o̞AȀxЙX  m{2D,U$ҶJ@H+ݞB"ჸ2 :$ȣR")j竣(Bo:SdP&>q =C`x"(w#c A E>TfCAg=EMg!&=Fq&b@m !BweMgf!(6@)v *Ԛ@30$fB)T GPkh8B03+6(wnk#nGROx2phqvf.1;.D3{3sra ׫ AF  ` Ш<4HGPk#ĐJc pFZ 0v1RWE2O{( Me.  ¤푎 1,qOKg@\>Z3@P@s EUch4 <$@U Pju]7S3k j7#SiC/kJwYhu@TO U}s#b*fxUȅOL Ш= - g/Pi( T"rG'@'Sgoa>RZ$7/ d N ۠S/qLN|[}{1Rx9qu(BW!5!Bבt 5."'!A >}\r 2bqaS ֗\d]"lbЉ "@5m޴IId"s S %un7ٛ%>5*+AiakhΛ>6-$T1а8k*$#0&ЈmXI$gΫ) \AK%xG> 2FCr81nf.Sar\bK0YKaK9Gg 9*ea,>z^`% Ch00fAL=-!gHaV)f7 $y Kf P "T!d@w4[FL$R`]Nxu0)SQD`1^֨膱0/Tjhp>8:8KPoiNmdaԵ~8Ȗ~`-g8Ay BBJ=a桍5i-OHE^mJ |HŒ$X8I DzH,'Xߐ|z@Ŗ# 6 rHCsVg@V)nFLC"Ā.V!@Ο$vm{#c99ASg(>tcavZDnxUXI6Jڰ5; ha8糍*b0*}x ,Zn`p@Fi9rbmwC&i] l%(&Z6\9xh%E.(v<(Ź"bHHN R 6F+=T'xp!!EC58JBFLD(6A#Mp I-"?Mn#roDe*qgx)RSE Gz -"|?iLgm6AR5aaHS@#2Xt;X$G@0u',Eəl#M.I4"'"]G eGk(](89W״i %g O~\O7M<](BZOD`$. ttRH>=@r>`v $)K &s d \=kXT.XLp)Fp{#Np٪B9x,e S=0rab&)C ư>H Dh7&lfeР'ǜ_vx7C1.MtA "4`N& D寲ZMR" bǀ> TC2p!a`)l4CI Ut5Yg!Q/ ?F. h% TXLF94E=("oFl"do5Rd+F" }DL$ Jɍ6@~<Xh\趹KyXʈQ 1|Od8F -tBְņ&((x@ 4(K(4E+0` "E /_6FR. n q\GT { h\aKؠ7C6x>`a.tsKe ` 5Ϥn)0*$pQḊ́PX+7Jl"BHw ujE_M!zGX }$ Ag$„2!p~@C`E@ 6!K @B emv7kuZ#rH=1w).a?t!V9/d17Ph`Ƙ4Y&eXwd{ dKȤ V2mH&lg؂u@y ZaA^YVz)ox@ K SMb*"0= Gp) mЊ7^@dG5( ຀S18*ŀp'W В a( 9xiIB?Z4΀:tCHZH̫*i!lPGi:Ѵ1~8tyH :hDSIW#Q38LjB@/<3X-CgА輹Kz@6؆K `p YK y :8 N8{ ,8D Dch~b8rx̩T8]l$Ѐ`臊μ My!U`^`q O.BH0 e"D  H6BH HdsYJo TWA$90 X<(Y39$ʻ7O ᴛ#lcyS"ŀ=iZH! zp!ļKȅw h P/x<aŲ _ԡjFGh 7'BQ i"ά#;l >pd0IIҸ)aXlo2WxOdJi8 ح ˻CV im%jUH<+&BA-x }%d(9>8s!y5 kN hgAhD]:8dSk %eث+:IrPyb01LpboOHLU#WAVAO c}p ,lʫF7SF;B }n Y Mћ7I#U# x`Hx#EsO18#0 e .?DH@HИ# -11a } @ q?dXВ eǨgxP`؄a tZ_ZʚXM@Mhs҅P9v !z.pϳf&^Kt@]x( 0NLktãH 2SYF {/Ff?t dZxZЅQ֊MY P"!Ł(PІ@5X!#h* 0h5-K0 #DK{KzG :6=_p%)9xxt-b=x$c8DUIU: 9 ˈZP\x jXP*lX=AG{PΚ,jzv)0\dh@2K$ xpNn\M0KrӇMz1h>8nJ'<ܥт Ps :xW><)h6X@P0 7nP. ZO 5 )r$ɒ&OjS9r!,W+(M $lIY3c2d"E#$ ~Lnh"Eqa@{*>hlMWNt6$(WmE5 WgdBh˒-[sC,y2^a1DVfŊA̧ZY94 "\Y2L.' \ i46&Ħq(F2rxj&!9!MxP95z1oX*F1u aTʂ,'L3yQFL['L)s,A oAhh h",mC7'HQ+uLЊ,H 2IF 0bcTFhfk U/rn ԒF!@XvB/b,[("L!ET٨F0 @)Lf ai|'R0$@> uc&#"} rL.΄HQ7ˆ/HdpAr cF?`&Yb߂kfpR3#a Ϥ3!F輫 j'YFL Pd!`QmA!7ALR0UoBZoU^jcNlZYP(2 M+] U/adA%h$RrY @"Hl?I^_j"dZRbt? )ضaK? vp ^'G`aԡW̳7S FJbYsX(I3p@mLcGxz# tF!G\1U'sŸ@ Ye qr\R|sB {,:ra ˭1 .oB$gЀAjH5嘄q@,xM+y<:rDOP# uHQ hEsB*!4jCvGcdopHpyhjY` C#! aqaL@3Żf@D H9!0B6q8 &Dkenx|`bЈb8-=N 0$HH`U4B (U#,`*H7XD'`0+BWD 0 *71+de! !+Ąp{:lIohձK4lцb~H jDڀh1Z9C%T|tIIB'"rQT`@%* Bb,@!uAoNj 1!eCƐ Ty*e0m^ Z Lu&fj˖c[hȬu&RdKpYH%PXG^ Dd$CA?$0\܀hD/`3$ ;6olhb=$@oF5A+zK,@llA>̤F(*|`P hiB|7`F@<:HqfLBl?KU6Pz-Y RQ]A.aA!`MRl}LnB\FH: '80\f/ƈ Xu]&*,V\|J?VqU@,T \hI̪eN` hHg- hοU#[M;XtHN,< o.l4Z!)~]9B2%,PtB/A@pq+>ʂ>\BtY…LNC悄).`M&AUDM,hɤnP&Pc^bш\ [Hlc!đ@ 6/)h$!t0vۂA% HY,0Cdl!p<<Z  \OJQx^ ;KHN1 f<%0 *Hoz n!1O tC?;  4tU7 _\2%tSzF \|^TrS 6tC4ĕdqPu h=Md%ȁ %ii(G/*($02D[Tܷ%L Z9Q99H K_$,_$NU0H9܌ݙOQ肑iBG78H0A2.A77lHD\?Ć ^, el|]/p'¬A\#af ɤhhbզlVB9_ (0c gQ\"@!,q4H`c2C! ҥF<\X 41`7 !] Nsj>mK 5h3|[D+X1B9pA]vp5 7Sϼ=hA2,E31̶Mϸ.^ {-KIh&!F$^ϪjP$: 0 p1D"@\0`A7P @ F U`iTdĊp 2VXT} IOڴP9Fr JU( t5 H$ܸQc 0)t #Gl؜o3cP"JLl3x(I9h xdee3#:l%ox>cM+ EIE߲r 1:O0}x9E%"XZ7P , ` vKLj(1 .V8?p@w`ʨO‚! ,JH*\ȰÇ /Vv8Q:VGRX@(SUn@bbW$I21lX kְ8lJ!&( _nNhi] ԠQl`[SÈ+^̸lj@Ɓ"d5V@7}{ƅJc ;j6J`)PZ"TX 7@[=" Z;Bû O,0V2Rv>QX^B)Ah衈&.spP,޳~L"\Q;2\lwo@P!*< Nx*Pm M9]{)CY> qWF+4 eBMqb }@Sۙf\B0@@8I7o k17S8|Rpb8|{6I*P| YwxQV"Bf ?H"HD"!D* 0@a&OT).t9> b1VzY@ d-(;RC⇕$) :05IAA:q \ء$4 0f.S@x'0:Iw ȁ@n1PP*@@8!eCO!B@ *'$ QUkp g@F4frhSM+-`- *1x< _*S0U@ ȸ qAW+1tm@ 2p|07D .Ǵ \@`4&@!1.2=([ρ2!3q!uWAQO]3;.dR]7 7(FpvLc8(A݄ D.Vx9{ ]R@W BX웃U٦s 973Dp` L!PalM욡 `SWx iI{5S\7EA-e Źznx#yA0wN2[T@.vNr@=Z:|I>&ej23@@ևlw孵 n:Gpg-TSˀrxxԣr#A݄ Cșl" ୙zS'norP ·Z a*=L`0aW vRbfc8̕n|V*lLU.ZqOD g%sa_pSd~'6 с1&*'D!P 6QgT@ sP]Sonk` "w h(5N˦v G K cIq QӐD}2pOpO.!)Jq$B7 crw ,恌3& #! (P$ ƥ9f @w>qG^ s 7 t/ XR 8aBT0 A M@ATt- }>}m f@%5CC BMUg#F@S-PdD' : szQVBD/Ƕ6q8 M4Z6JL="ɂJ$f$ 0 t  Ŵ? h@\@f2 vp>\h} G{&!W r  =P Ā2n T/e31$Ty >OrZpS)@X $ k!(xFy )1(PfhM*HQ !W p&@ h2+/P jNr# Fp<B=uGɷ!9ZȣpU q /elaiIAV yeq,0}`2v g]rda.@t `'kVl 3>b0  P "&Lb, Ew$а Ġ|hF$R i;P (hThZ;G@o Z BQ CZ% P0gas!-Jȕ1z&<f' @xo J srvJ$g&ly`BFC+لN$,C p X R*!,BEae@@yҦg\"'zH(qwtؕ7Cp =PvsŐe ߐ\`79- 'uP` xv|%2 _+ffĠ ZK^!pM0 l0 (AEApq8Zp \ %Ng0 \+]9B!j*gp=P= WPB u`{b80H fI*qY!5irp ;0` |r+{qdJ_(NagCav0,1J İ] ,ҁw j4YHP l b5v_[:l" 4 b\b?G+fD|z~0>$ nw+yG`^s旸 f,q"] Z$/ <:9^鄝z4Yg# o PT3sP Qv x > g2V @| ȐћMF+TPʕ\pw𹅻d&b{"K ;`8` $` Q5+,Q `CAA K3 Ƞg\g!Z qgӰn) L|Re)Ұ k48p lpp 00lr{'' ЛD~ö2-6TPd!-wӐK,0S_' Dʼn+( k1xƨG#hl"8Q:"oWgrk.;$ .ȅ);KAb@r %S5d%<\009wlȘk"r΍I !@ {` 3k)l";G%8]'G4/zm<1l RGVԹj1rl0k`*I`Y =y -ho ǁ/QMf9b@!Ƅ{1ѻ{0q>%H x:1-`م }޸s,瀛`yF4gt= zzު8b ӄK؀ \` 4i@ uI˔ `b@!JP=s?ӏQ^7uXQ!2YoaC p (T ` Qԛ$< l<`%. B\pS" TP\pPr a-Q 1:3o!pGC u@_x۵s~k%Y` 0>LHEC̼0m"~`@7 < '!g<N +~bWXg!wC `@}pVnHe `4a:1<:^LuPm SK~ -w+ҩS&]r@r htLa~+ڦ0-jlnv?6;܌\@Tbtv k%\R ' 0)Y^7f3(< bp r(cgN¼}SN]  9 o  @ YŊC%NXE5VL@!E$iS|q$rE (He&N$?"e %i'*]`'HC. 1,U]BC,,Ooh\9lZD%!>x@Y̅ <:ET)F1w ehLaC!؅jZ c .XCGIѥO'Nةo$B`KU|i4Da J*̗04u'#1$B1yDԠy`ذVKKI!f0K0nb+)9ޘ-z@JQaY0dA0@eS`H$Y`Cؙ&㶄j`0(VA^Xѓ{nPB(d+td8z"Dq&y&t&&IU&!PzDPzo˦F-Na/iyIG6Śd1B8  ,nx,ċr deO\3c$Q bP\YP.J"vI"d6@.WH(|X`Q;c!G[ iXLI8uӈ!w0xXW7HSq ra4" ըV.![`#9Fj8Z7c00n䂋"*<>P x˄ЀwO&0fVp0`@FP YrHvkiA?jmι!x4d8![,fsC*zN)D|.0O>K٭;KB\ ϙ8~`V!zC"b$!Tb#*>{ R@o\[´[ha_4s p#X ('tBe]}CuAs0;=$x.SO2 tIH㢝 ab(/U&!SF{@@@>(~([~p\` H oCg"1-() $F5. ?C&A@I WB4AI8F1 " mc!uBM 2'@$vhWuA]xH,ŗg,)jgKXB> ~$$ T@* \>U ajH4 rTSUEPɞgu/UMq q@p1腱48d<##AFuY \0 0J/ta 0I`|<\*!š3bhM"/?B!jb2$YBnBL"FWIH̨@ ӽ*f]Xi/|umQJy@Q xMur ɍq,\x՝WRP a#|hP0]0-&NxT@$t't/ 퀍A(I OXř.K5;V,ѱ44o $05<$q橺ͦK R)q ڸA\:0 a]AIlԇ 0S Rj DЊS>2 9+ V|Y7Ǒ6s0r ^ÎS: ,{-A&x 绱!T6c taM13U<5!nqȊӟD\B o"Nj&$a1Vx t8İB@ tpX#l oh8I.V"=xPKA% |@H@ @_ 6 86 =%𔽸bЋx91{Ԣ^r-P'a'18.STh` @<9J$ *"qr:9Ő-|ꠗlh% 2d9;0y9h@ A 0ER6 .hᱟs0))&mкPۙI!胞x %zO@!$7h9%x!P9 E[4*<[B7 \C biJXsY&p%V‚\#4apy,;2~8UDuXȌyg"b̢ D @+9gx2XIbqq5C9jH )#B(aK¸~ ~ЖpzTI: @}1 &QX$_sd9c6#pK `,iH=QO&l"ؗl%i"vs WDŽq-0vJy0̓5"6(CK0#>95߂ 8\$ N% .9iPͬwo`ZVXx9X9Jx0NLX>LQVXHV LL<Ͷ {,0{gb O%lbk8M))OKÀLP0EsCY9H2Αk(҆}C`$=@L:Di`9na*K.刅{Xb KX8I j*b08kjMjs)K[S^؉Kv(8I497L`@;∓  9 i%E]Ki@pX TR[DcL7D6]{(SujKYyTs*Rb>mHT 5&Ϝ j@Kl 100V9 չH8YU㰬D`Foq2UQpKmؙ$a,rh4%v(P5AdH [[04c[ qu]?ڊ >W s ࡺ҆sd} Xq/%=3:-p_6O8òteP 7 q`5: έ%;(&l?@98%:#` \Ĝ `a6:[B1uV)LL>OE9 ѻ5RЌKrؗ)X^ \xYo 71OXLQ0xY;ąpc"%(BI;RS]UP$Q(Z ߭[c oH̄(Kc臉̜^@b0G,J!cac* HY ;R qVV{3bHC5RށCUmo ~c2"Շ &%DqЃЃ$: RI5 ]WJY*ېH0iY: 8P4b!L&e9b)E_Օ#/">sC(HYpI2V^f #ʼn|$x$U+Bvl,x\y.Q0:L 8G^:]ÅÆk@=9^d\Yjh  @V Ѐs!xxB8OD=OA^%^n ؇NjLnWl"ɈrK-`  LK!qHc0DAnX{]Aҵz,8_svpi5*qʺXJ кHJ518 6 >Zvu^emІIp_P cLN"Iٺ L1h֞ KJ{焀H7E$`;x#;ECٍFϡR)1#tk*DwXD`U(=J3 7Yƒ!3ȂiK#6]sЄPVƈ>i';2"4tX`f8 fj6^ K=(us&qzqJjH\nquS#h\p"V;OصЩY$*XO^]tohP?`O4:Ola"(9Q|%epheSP@HOajtW^,Ѓfj>7뫴%H:| ɒ :>]{F#`U?vŔ $Um*%3h-:8oZ`4[p5?"8ż7u@qDV􋨆0l$6X6 mTb}[lOӮbH v,RLa^Зj``o`,jgE>]] ʹȾ,u r*JBuІV*X{qsXhJr9ȖOJ=>߽ODw.ВOa8+M o @+jr:1 D@]✈Q3đ9J[( #S >0^TKq^p;^V|vg HV2B\ZU<U5L:J{ieb}v͇Ha mhgIs$J4 ,a5j- Ӏ#Or ș% >oKFl]`G-Ҭ8rA#s;s  Glݸu ^.81^ N >dw8&#YFO WʕrZ 6l\ZtG.m4ԪWn5جY} 'Bq*1.p밁j`# I8aNsIU;0r7 0\ч:Ȃ..D @`8A4)ޮHS ɦ# :ST<7̱P  s;$H 84J:MkIp3GQgCZ Yxku@JQ0LNHH.0ԡE7p J`@_^*;D\,κ>G$+H FVgz:3 Mg(@Qb{-A =sҾG J%t~@U g~<]x12ȳp\@E(. 9 Rؐ`k*8 c<5sI2TTȉ~5AQATX'|6dND+gzⴍ1?9& xyvИet24N}ED B\* 2eMdI'}D}xaTK@Ap540u߈? XAN4PԂHP A%%l~xYVuT#iA",Au,GjIl E $ @)"BUC͙H1x c|]Ma঑alƛ- !BEa8N#˜>Jnt"viğp]tC@hDoܟG`P qhn*`9 x\e<<GX]TTKfs bh()'.t uPG~V64(hJM՛T6Ag%U0H'"9S>Ѓp^"Гm9 GҖ[Bjǎlчٌq[D&݇#&pMTdF%%IOӨgh *)t!5XCP ƎrTuÛу (`Prjj$d)Z/h ݝEyx8B! CxgEhiN gNvPJ gDBL`E @IiPS1dHEOD^NP;pAu!LC/5}L~@@O@@%Ձq0d!"B! @pܷ .L2V2)qI:0w2jAh#((AtA(@$М@h݁z #IeQ[IG٢Ai(!J^ve܀DT ?÷iN,*IFX G4ix,,d֒IV,L̈́G.E w?LڋQC"Ɖ~hhm"ln( ӚIX1@ёo!'Velg&}aߝSV?u!@*IxDHqz@TYFy>D#n ly4%m2($ {vl!lM2q:9}Gm2AvSB`q vA>(8'#ti(!0<4pQ>DmpFwh7'䟈$ǚCyAl˔LQo@od@BxL4~|H 9tthJoBLFDlq,@F42tU|L f;s47ܬ6/)#:k-*$ih @} ED y uPVi؁ʘlT p#tHnMvH ;n衟ԉYF1 P;@PmKL: .#GrLoG)Sv/A9P$9x 9_VJLT4 x"[7L/e| h.Ò|=.=(PF ,6rqfX|Ln\sֵ{oތkAp`$~.a)<,6Ka]ݴSG?G6X}Oy ;K I Ԣty x1Μ{اo,}kq]N^ jmjXD;:P.81H`# 가( 6R܆YH2lG(ȑnj2RLF2HL1%SYB<+@~p33PCMD 2$Ь2n37QN8FЌ (Cͨ? zZtKP+`P@#N"=)e%`XhB$n\V O+Jx/Xo"6#cYPEJ 4ч Xɇjd&=O\@ h|1 (DLqi%>0@C[aϞ!PЦ ƶ5s͊9 aKZwL# v frIAAp`G ] %"nt肌2b΅xqhfBPQF.bNh2XTu@cԩx7H"H|0Y:cŸhA&y~ 7{ٓ ptH!'/ v_>(~@ \7ĵ ֞6V1?yp l%3$Xx$k#ax1!'pò a HaH@q+đr er!bq |: Pa#e!ac.# I1l5`xjLr!% c@+(@Aw1< tr@ ~&9BDpb OAUP bT:$r' =a&;#axȢ k@1Lxa A..H/u@@bB".Hy&L MF8Í1 *&_i+j83K=&eTIFID Uk&1 t 8UN"\ZߢSpJI|3g2 vwǸ`Y3tDyv8'"<,4 @b2!N OD<#i}$p ;$ Ж7dV[+ϞXxE?)5adFmn+ytbD.oyPYL%c'D,E2d@h4%.hkTV}ZyTd98" 7PthD&M28rZCM9d6hQCYgܥ)ml9i`І`dR-x|cj"7$Z)AJ8ďB)2ɸ h,}HR,8U j obp,| 6a !e 2`4b,6ZW#Nb̤05MD 3~ R RxEK @V(4Sk{c'#tf63O#E^#T5##lڮ?BVaġm譸MT"N.I52F)P+(`$K EvH(.u @ APPāN ޣC`$#'oԈ4d2e|>ABb6T8$C&#$#H9{6$h&Nx9T&.8tKր LHbcozXEj?`@fELT΢MTk6N&.&+0ƠEЀ! A B~hLM$iFA4 4mQCKO >@'@!HcIC;2C4āPeƭQiHCD)@!eQx}FfhRg'\ba@AJBH@%0.lJ`"ἂ,E1!*r W _*1A22bV܄[ _ ZPh'6J5( C <8rB8&C0Դ4P8g5˸Ɛ f# @F<;C)K֮`xA4qǯ.j2.~$DVlEFA\OL 4ҌMnEvtB~"&b'S6 ހWFz #pnTM$6D3N4FgFbP J}2b} =J)n/{b<ࢀf`9fYDh䇶 ȁX`c ]a8#.kpfGDKx2C x"al6 {p$jRgs|+bL:.–.D5LRȋDF\Bmv 1y$r{:c D/ 1_$PUI@Wr !@BP# C.`rWpd`VMDtxaEoIiG;ނn ڇ 6Lcz! 'S~ReOo:csDR3 l-,n ʂ !i̔=X#`32 lu2muf2Y]4)$f3s*5@(5#L,yH;Dv`6gN/MhǺtk#==bs!yA##)T*dJ@ !OQ o,>Za*j#> re9yP,&.I:WG`2'gvX` 6vwrJ Ac6]` a32bf0l, #y'$ Oǵx36Xf碰K5^I7u3ZŲ&,56d H.ءVdC"qO!DƧ@Nda}IE{ T JP x'- fK#1p9C wk~dC xr!N 5b6)[z'}53F'\cfL­GeR\MI9U9j'8(XUwjE{D{KW( K  d9=z `ASYxyn]ٺ;,q_ZjtxfR.Ԋw@0 bԊbx\͇ik dGՌN膣rb nwel?Z#x"g7Kc6My'nGB$ne=2y!@8+6 ?:#Nzu4 tS\/b@67$+(u.Z7I4.|<"C Ai0DžK KI}&aS ].e9wG_ J c>ʁiM8#\UW &D¤\smf.FaR}琱JT`yU.bg0Tv𮧒nI0B Pe%23סCa`0]$t||?Q %o apP%W<b?rɢE2ɔRB@|tX!0.`V [fCBB@fz`$`:FK͗e 5H}5:htBJ*Ӳ@CʴX`AF(WGR,ň!2%R3ir")SD7i2&(%j"F 1Z FmS sF0 9k#6Jt)mw6j=zARj3Ō;~ 2oJ-X@d|@:iTX2y4%8=ĬvKfoIcGm7nv,pNڳWAuxxar7ʑaCo(ǃl:nv9y` t>OVEJJI.( Zyls4 ͣ tAbTрl42 jP-DS` Efj_pŢ aQZ-0g`Y >zzՂTpѸprtk(mWZB: bdm)xd я,r|v\=i>4݁mSwq6Ϻ@H87we'8aFj z]Z$ 'egHT:^Pz_?!q Q,`pFV(;rB sQ+e9*#rjgPqCGO\AYVKZجqSǏWXI`&:΀ o#Y`  7 bK^fQr0A"9AtfOO0 ܠ 0 ?ZdQo'py3 .A 1 j6p0\t1a  PNWTCW^1rȗ4<2nWEЌw!ӨxVxyF9St R0<Y4pV@t*`ӥ렘z1 q!sK4N^ E~tH+WUbL`P< A3@T+ ^'" ᅎTjD*!avwVAv+d7π! uYa0T]#4!+Y#hd0&H&/,؂ a;UV(PN1<:Bp:21p !"]=pg~S2p^<agRVp)hbt( T c't#PUJ )p9B' 6WK Q4ANJV(A7 !k @>XuuБ4qu }@30 pTRHYTV^h h:Ta n@ zɌtmZZ,X7'(*PRИ9 0*:pQ13 19! fW*`Sf @;pPSJIp^4'vb'B7]*@<@ aVtC a*Unzp)R u^189bQA%y3~8a`KX,uIĈ8G0pPpo9 a^:2q9\^-K˱TDxDmP@JR/O)Se%%5 $X2]Phhn_0.w i")Mz2py| 7> y|+daVR1m(N}sYxa_C@!*ss2Ѳvjn#(.]׋K@&@U@ o  pjcKY,¥zPrq)R)Q HEVIRxPzi807 ט/И,@eᢅ{<"P<}kPJ`p2r& qS>b0U;pUR5F7 T#}էUӹ}T!~¯/4rY(75J5~5qKYA&"2 @@$@p ߐ3A @

4WTѺ6rgS, qsJB7!VK.Ļ+Y !A6#S43_4tt%~!ѳ}|Au$aT+RL 0EF}!!ȑm4S Z@fA@)TkAPtZjf!xʂ{` u 7UӀqoi !s2R<  9 Bp Wa0  c2qbB(tL#ac24Rtk1 ,#8xJKiA7QX! 2 ϙq 6'أ >H6n5) "0} P` lp  "t9ѡB'䜵i*_4 x4 C]mvL` { {O )UҢڴ/XJ!(.Ck2t@#tRK!Ԏ6 o4w*P*6#6`&M5ܶQڶ @n(i _ B M5m)z FmYխ_Ǟ]vh*}̀S T3RK/,HI0~ tiH X!`Rh%P!82 *.8E! !Nj.)!@!!xQGhBBBg "=H%@G8ǣJI&ɫx9.y!@= #-6l!۱ڌ0=6ЄRn`^1 BE!H{ );[onn}#]dIɮ*p`,Q6 bTb&6*22Ř"PPxBC-ъKqx %x`(NV1ƶ̢Ea"ROJAF(ѥ~3 SK9` 6 a0T4ʨ~@\10,e ֛9mRJp S4$ `P{Sd3KBPȏ1n-WVcHW,Wf V!Z!` p@8 !'-Q% fd*W!QޕQ*uq' ɓПcN%|"RH"aohR򸲺>rtц~s!yHtIDd|Ft Y@Z*|!]dLfEP^!@X9ʁȀ ]0$Daj(թP* jkͥbbXDC N P$ΈG!\01 8hE]`3_@Ynre!j BT@*ڢ9Sh]T. (^2 X OSH"0%FHBLd2}) f22P ZR!te(RBg!$YρzKFVUe41JчcS6,u6nmdT+DTǡTARM! Qn ,)Zu(FCPBCx V+ jGH @U(FCQN|UaЂ(I(jurʒQX e(}U4*і.(a^J9JzRHh vp+k4ohX1 \0#"*Xp@XC0S`j` .X=u L.0i^g%2~* S.CmRe$J*18}; hRH:⯖ <ΐo. zpQR]2R!KhbT %ϤBWpmͧ\OQYr@CBš8 QPH?pNf),hcZSWx حЙÁ,73*\I'P6C)B*DY0(S((>) Pr6F ˈ+)tp{ )jSTos )$~)=h)37 LjUD0 ? FO Bk??(B[9 V :X?#.>\h"@~85Sg8  @0.z8exM p.@Ib;!QB! j,6 ;>si%Ġ> I! /lb2qЃ d0<)-Vx+D]h)B iЇ"R  i$)Xrت%<g hF4|P1=[("0j? (XUa:qR?񆅈*&p3( xW0ZRh px#ص)6tԹPAx;t}t28QzTbc%@&,y "C<9bpb~O(>HVOxNtV)38Y.k8 n`i\Paw8bC- @ P N- F$J(JJM[*LlJJu{o٩cH|ˣ~P <rǡgE`$p^Ɔ#(7*l˼p\h O ք-<C9 ~7 F(哊l9䣒VK(HmГ=h>^8`\20@y 0?hEhE6!|k!xª Axs, J"SmHJI&kA/`$P$Q9Z "HeZ4//du X@V,S) OМPo^*N]A">acOM)6y} -X bP!䈮HYH†@2tɝ, '!p;%цȆ6@LS:})*9]4#BOi8 2ó ^ !zIX6\)UDFqPDD=PJ})P4 8Wa)P]4"6`f.[(:#Mp::M:ZТ,",:"Zb`$`esR6ROUѻ}M$]?I0&+;I!+@-@d ¼]x̑^ ay΂F/90=987@rhKʅ"Z ɆP9 pШ;ّEJꐍL=2DXQ9) ʑVW[$,syzY&/p) `jjoeX\l!X$$')9,6'H|(EK؉ !!qb~aw#Z^A$.d(927rp}@gr>T9OP-$$!UܰO؀ Dא np}suPHj(H, F)t#0 6)_,ȱSf[ M긁?hH`?L[0[<ՁRp1NBuTBȈ8PމHb20]*Y 0K_U8-!MJPEl}Zm9u@@[Xдf4/ 6ȲaiIr=ĉ[Dq@U?goR~`b3 /H'Up,H#$QioDGQ(!bX-V+>0 #؁Z *Z󮎹#57B1a Qj$?@ K]f ("U(MY(Uk)kPKxK%b ll4Tغq=#rΕRѩOA NY~0Џ#Fb$l˦LG*j0ۦ@^n{E(sZUFeU&$|aTF$DOpA=&.-xb8 ]p9HpDZ <#u_&$9J 8֫p xDj 0P[Ua`][0BXdp T" k܀/zj%:B0hɕ` ~@3\xU,:\Ѐ% ti8(L*7U_ ԚƸq>dTI4ȗ~$葍%):A00~Wۉ@_Y6Up[8݆9bp# ERuO K k2z(nK=9@[(hDxc4t:0(P)z7hߎ"q^Yth顊RH@|mY+!pIXB!:YIЊk7qQu*x lU0r } XQ q@v h@t\3m"m8rƆ(>70]0 Bʖ)s&͚6o x@-HtAx0c.]ۤr٦ -2 $ &@`,hi F31bp1%][>+N#X7kĈ@bKx DƉ@FJ9aO;{Es%{xF$RH,B% HKD'uk&q$-u xm]`(6 oZzr` CV6d"%1CKЂ?@<@F*FJB@?0,P# P9fSBӄ?$HHa"*r-D@ka =Q iH{(uLd,.E a = <;Ɛ}Rr)ވh԰vBoA!$]G9a9q"T ]AP[ԁj\lQGќ#"G[38 W=UASj!ۓk{(fj=h.I  N.<; P@9N!AHQ*DqB{m 8Ϩ{`0PJ> r8ႻЄ&16>2AɁnՂ5 ԂW\ W)$IQ(%́] ,֔  % ؄P{lx׀HK(Ui0 @ A^+HM T PS@DAƃ@FLXk5z,CJ-`A\Z\11h$A`q(̅\L?$1 :,w@!lBJ|C̀CWLT1D{XCM!3@xmVRA95J?X*)$L쥅`f4 f V6Z5\H4D(\o@5MnEhRELm YyI 28DMY ۸) ܃|<8ݠA?WT&= N@,DT4$IDL0I!@¯Q砘 }KeQߴlJyNH zSD$(M9p$'ͅ @B x]xmxXQ 'z̡d%7X0D' D'h:,%L@Vo㍤Pv,LL%fAp1f2ExPO B"APEFg \Ѓ4*HL(h,͘&΄uVBDM*0Ĵ=Օ$UFlØ䛧!/UB1|NWW1DX]%h.XӤ CXE׼Q:GYF,8LN9@hnA LNx15`k'x. >i10l ؙD\nX>@,uBJ1ĥY՜`lJLPOsB -#2Ф@A o"A1ĘQK-y`DL$dK4$Me1@T lp C.@Fn-BA|i|РM``'gd< 1N n^'\\B'0C dkxY1!~.!IQ3HDH¤D <@Jm>h&H dG#ѯKTPA4>d@})l6loUoH24A`J x|B1Ƅ`0oH(T !-0LќӲ@4!8՘a+ = @٠+@$!!dդ2A9C9 vȀH V[Dް<>W&TT`pƄyզKx>E1-jJPE|¬W;o'TPdv| |h$A a0@hx1P.C@ޡYB%+ @~T@D2E(9@'@X7CHB7@lBypk@HyXX@17cFt8xh,x˦DтkWv 0*7`-&< n"8`\SI0Eo@4-iK=é~ɬ4E_0[Q!YQ+Y8~DΰNVQ^p tuL RdȓsKPn*Yq )A%{*O1v_,nwL8L,@'wy:(I `o,&D7$4V# !L)uC0 yVW;xEtЁ A@x7`1phcojM[G%8I@Yv D`bGH mc_ڬ ߀ɡ1+[X^C9[i :2`eJ92x3DŽ0KBXVh3ičj C8)gpZ}KM2@,\@uMP!F8bEPXZb%L.rB/ c͊t,P$uYx/V, 1֪VY-t5A)mLil[X0[8\#eyJ7ꀁwwN KFZ ^+,0+V#)l\9s KiYj*g'u,FA %NB-[n`r 'xjoct,  XH<bY8Ƕc䆛"nBVFN $8C"4V("Y!g!l*#\iaB@y,6 PGEP X:H A|G(`mje:O& 6 b2mK,YH.(؜@`sӳ Ore7dό)>᮴~ި7N)$dIP@6dJ8a`9䌃n ahE-pqk>qQURE xf!V& #~?PS|XIp:AxBဃ8Xh`a!7 )c݉+% GOŋ* ."1(&cyKF+V[)#v*}ljLѓaL.f S OpɢIlgI$х}H 󇄹)\RYD V e2x!:YeH0@qw~?pF͍q!)n9e!GeaM![*^,`-ǃ I/grv"4 3/$ =ǃd`x F#[i ]Ħ: Z!6=djs :֑F-v0фeNNAXƒ?ɰlR]&B D60KxJPZ83qI,d%@?g\qÅ9Z01lN n`KvGm <|t"\ p8n@ ?6tX0!~ZH8Ma%!AD%ƒt 7@H]p bBn!a Ax@@* T5b-J9AVLMj A'fyRP`9D-l0z%-'Q%WLqZ6@)0`z*;Skcb#&P&-htVp-a<|YL-^@  2 G86gbgtZ ә 2Sz.:Apu @I$5F&m*=zx8q A!G0b-;t[@! ӱfn"+"Y ̣ J*|E<$g`A]tZ pS aRB1Vx-Djؚ[OcXd"< @4P!qc.8!P.YӘF"\Heh~yQ`X9bQSOLJը s: +/9A q a[\#`t 2: '8" EyUBp/ls2N(i! lfa7Xenĕs%FЄ&B0̀/@Uj ܱ>"sd) PjDʂ 2'JԩlB%,01QLxPpak^VnʌJNͨ !`i``*n @ A@VA`m!^ ` xtrd@n~d`B@ aXCRl2f""V6t€* ~V_(Bt X LA *\aR'<ؤ$:e OL83:!0p)z\)H҉ހ,m |M14J55&`K*j"z,+ O lC@Fk 0"ta|l`DԢư! @ 4@b/d Z zl!&_DI[.'Y$  bCjAl!8 (!M"Zk!\`!xِO,A~*@,"6KV6K̤K"%f .A@*b+<,!(D5f! i J*&0KP*Jda)44ZI!Bn)B24dp6"xgC?G9j96g  | PQ DA>M$[*~x g]@h>YAfo|K !@@` 1A'V$!r":Un `D`!}  c,A$@DݤAR0/An5QpPbpѺB؀Q!,LO[CP$\з1ZaPjba-pD`ĉڢ)bn`Bq+AlO :7."6GxʡqС^"nQ!Dbo#( ~rz/B(g?%!dC4le2!MN"6a!.HD`zm- " 8I؅@(bHlB\a+O@ tD)J !2bܢKTP"h) &\! Z%ti"\)A5n=}Dl NCT: Rq,jpnNf'P+xP!6Vf آ`dtNa % @ zA*`J.h\S @V A@\ РX*%O(̕XDPm!RFd,Y-fWLaJ:L'2+sG\n+ 1a$@8$`< ``(a H@1ÏS"H$$C(L&BjQ yOˤPfyOb "6`DtSnd{8A7A mhB >4" WNAAE^G0u?NcuA! FH`p9%@e,!ڀ Эl!k!pBٴ/ΰ|a){d!p- d~ -$ z@a \. hĦY<kh:BX#K}{ }=椬@*pm| ;L+sm &͋]tt>z;]؏TNRІv! U les FeE}s|}Djz )`o6 p @C zn.f g*aeA?#{Ams5m`\"j8(`،-f{@U$ jW%@q7ȥf\Fa.)b6&2)@?ӾD="\m̤FwK @ +R֠؈n8QBFCF؁ ^7;<ً!q!2 \-5IrH5p۽5>a$A@( A8J0Kzd|arV6a߳\mB D6'Pd | 1`̓e6P, D4 v t`!@ f%#,TL¸Zpcq.A2Z՝lH L0f @+ h+W\Op6/L`4B 2%*@ \id;h3d'a{\'J\rix@. R Eȷ@a$:(Gtrw%i4 aڌϠCM[dC?f y6K$hh|k$_o.Bf"1S+9 1}#>A`#dF4Yj3H %< O?r!m Tp DQ AL?h S#F<B\ܤ Q?"@)7qFo#)i w! up@'YYc#(rX#M-l]RgiN5 Ӆ wpFxs)l+A!KzYb&裐"I#Lz}ZsEhFF(B DqkfB2H tswj3 GXr(Bu0 z)@} Y5U+'GClUBAal 1޵2A #!A4@iTGIB'&#6MBTĂlܤhsC1uso<+)Cd~QHfP?,lՒ%Ƞ B]t` BW2-F%l @a-*+ښr4)\r a$r!k?ʴ7!z +ռ `)b P\"_Aq|0jmG4T_|}j-B1"V ;@qIW-~{K4\ @"Z 3 v#?8AP X;T؈SDA G*d*?dW,Fg x|Z  WFh+ȀNCK8*=U+ E$MX` }?@r04gՀ>L3It1;4Ht !2Ԋ4 AKz+e3i}3A[T lM5L@% 4P+pV,s}0<>AV0,;$+pܽa1p01|6'B"R>6@G/fB41X"< ͙>V.s+d‚5T zBYH;h~aI*/h9\I ZxA#ŋh6 Go@Zk>Xt-J{I~quI& b%tXwU 1B4d}h4O'SlxD#&}9~1!/yfH>Ugn 2Ċ(@BCH@i2 V^#"8Mc4A ᚹ4P%!U]sfҼb+H 3hř-A•9-2eHᬁKk6xڐ|1chۖ=z%ъIŦҐpZHER1˜nR1CHpF~%^`vW."+}$DN!Щ RXgb4 `U0@FhzS{j$J6E:d[Q̝,%*G:mt/{A2 xhySRa밵$_&,@w p11ܒ0u) D\1C72 1 PJ!wF8rX#8-`CDQ9<&pU: @ ~>Up49+\#BHrZۗx8IS[=̈́G+ҧk c3aEV  f8` #<0u@R_S8L1 ?GV 0e"pWifbpW rސ @6;PJ0nf=3@3@ NH6N{a8tVc*!Us4 ?i\Rq~`|weZƇS[9 p=nV'=v\:0 BoA@'8` u}iä]P ,`/ĉb``ke :r@u;tGk6.n%`gKRd gW lc>a#61 4 `#6?dԃ)bU@n  2aF E pmؐm S@V$ Jc"A pnB[: p(m|Ң|2[@ q8Q9B|S&n Q|B8hpeu!!BYa.'p E:W8q" V] tjcQw/pRr Rˆ;i.Z2>11xG {-*[=xLհ8-Pf a"hBqm*(w)z0B .h%ۗa@pEz1 Bpu8a0c GP F<G!R䗞=AaS9ޭq kF0pFlzd m[ nM=[Q !_'[W@Hf#\)m` "e_0L|WP3 ? E8#1.w'_Ȱ£q'&I(c {C1;֡q0n˶tPBP I4e"NQWDz9LnSyf㗀c>p(Ơ9FnLPǢK8[90 @ANx@#NpE= כbo6|(>(\]aws}3WBO 'EZ 蜝41J"@5%H"⪽J{qU CC X LR[`l0ҹu۷E`R;bJXst޻Bp^J1aVA!E\e,6̅RxLRFV6Pc,Q yo[h?9!e j6: t R1b$tŢRŢsCiE?[ё70T o ,h\#cꨃBVt^XIlde HxG* 4rH DI*$Q3*`%lpRL¢,J-b]BDR ]&X)DvQdM6; Dx8Gbge@ʘIT4×bD* g2ZPG8 BhEIY/ŠU b[,J~ DbHL&PĎ}@pT"$h/w`DL{Ka* 4M0Hib X{ #x *03X _@ ?#쐉,N=amAgdju雦YbUHSy~3kRsC@ EW16)PؽG3]!PMDSA& ʑ 4@[?,= m%.W XHFXEeǼ1vR(UiƊX3gܖ1}P4T%xMd@D#Eѵt([Up10B} jiD*PL(eĠ}2#2#`PpŅ +`l# `,4H!hDXQHЁ N V/b \7+MtFFRig{f" G,ﱦEX%آ9a RZ$1~9ZE pt]}<26b{\1Ci< *&Nr /4"}t0A,c#@!!`uh! )!蠛S " 9YT(Jh  Rv_F ~6X$v|g P\f3,bࠇ7 cH gD=y};pKa t s@p@@Kڒ2,ʻV~;0ONP u'\Qt@yZ_J]AH-Ia0Xa(FrL^:& :C6JJy<"3x,2 *'806m+B=6r-M%^{Lq 9 b"X8G]i~7(t| _,:4薲֏p<p{L7bR? t>Fq=:685pHypj h.+tui됕屈 P +p8o@a*#: bЋ5x+a8S n Ӌ'QR JN}׃B+ʇ{#ae`.X`5Π*NckP Lp#؁@,@9 :-Z +y@8 SYD8^ˣ=;ڑ"y@yq*p+rHbp 6OFSPHxr@Zra`DK"S e A'@P([[C ঀVO䘉c ̨%* @45[/T +Loh[,·S7@ &{[8MȇO: { 809Hh @(a#6ȡ }H82 {GiX( mG@1T{,ЈT! x3@X `0X)@MPF/ C'PjQR|5< Ѡ@p07Hɍ H7#"8>tMqQ7P h:Q[hSNAZl9<i΍ 7kFFkݙVԃ$ @Xq;0 ޑ(-q>8(#Fgt:5L@pR +Ѡpȇɸ g'@FĀS6Gȁ M3!UMXBJ zxm3"bxѲ5BvjlVpG835X K8J鐗 8ɞk !kpDO{yD劖Y#ӈ ab?R̂qyH0ys8sv@4sp'#)tK- PǢsP[Q@)x!xtЅcBS h458~25r%~8{iYʺ3V;n"-x-@GƸWʜ:pS}J9#8j#x Y a q# WX@ bK*˰ F-IO599cϛ*u; a_=`!!p-XZ'z-PIuT Rbw]ɂ4([Gs`-T_(&! ih/H`yGW09(8Jo8=Gq>98W=+UHÍ,؉u,9CQJ(I +D@Ap 2=%'˘OV0XeLFe0p`R̀0&o0( ( RB%]x*FeuPUX H/sMx~YL .. HPɃ!_YG2$ kHDZT(,FJ#4qAi,~%a $ˈ:TQرT,1OPbxvԏp$.\H3qQH&.Uu PU@F^K0(Pc+a|3W>xɛ*t-c`.kYjP Q8$^ b Jh6)e2ѐB(SuBjD+o㊉Y xyaዘu57H+`B^+?CT0H1`" tg%WP)Z`, @93^c@*+3 |c GdFL.`1ؗѠ}e@FԢ!BHtѠxRFjzjxA44| Kؑ5O0KԑVP HT@4 +xbK`PEI7>y 1pnн`ɇa&[F@{PEoF ^0ҧ XzrJ6+6Lj68'R@ æpb0` 5ت%̘2cR :w3C ]VU,Q *~b*-2L  "f #rvisJ4fl N0f <#\Q4 Xnu@'>J$M:x0RAiA&+˕HVH$_2LQ؆%ekĐ'^"([,D\aDx8m:7Ee=~"X"?AmŁ :NTQ,NSLIDSub!UJt _,870J/~c+E4L0#2yE$ I p`F=F+mF"GDP'DY-? DdDC"ȈQ!Et-Y%QS-PX ɐ;I$ ޴ŕlCdK2B+ ,Lk7rWDA 8p!l-3A#""7 @@Hd .Џ-8T8 U#InxED D~&VTp:0r\MxQщla!>2J(S@"OZ <$r?.E()W9kq}Xq@$%'"O?q79|-JKP~!+p 0t7"-LdE% PMi&GxDVb8yt +< H n5NA-4iG|qb8@+ET<тRAD0Z"(!A4&,~ՉXYU0 a4<7вn'EDaP |/XjSxxh :>p0 G9A00Ity}X+0'm4ɇo@ E")*BR| 6EWBdR!P;3IϤ0>Т¸?bk,p1Fh`%DKMlX u&(OCaTapq?bADؐ^KUA. 4+ 9"}) ^P/ &-&յ)#~,x#+Lj|i!VjEqX1ߡuY)=b1!>gR "J#Nybx^'. 2-LbPqD1籬ZU-Vos_H4`64mn*@X3@Qk`_eS["`e1ibN&5Qy؀cC OLK.r3 @C*UEP. 0 bp 4kvpkbbR.ʄa82!QDQ]0=r& c:v!v@7#؛ f,htF%"Q.QZ|zU{!j|AhC,Ib1YÓ@ZaذBhAʉb(!֠@|K|mԣ"h6u 뽁]e=SDp!!`n2EH!T( 7h%h&@dXM`: L]^ "׀ +*)z(@G'4(0+Vx a|(8ЩOPM&&Hȁ%\(CH?P@RI@EpAD`>D-xA։7p@D6I1 +CT-`mU[K@Mk!+XUDd|*L!0;_HD5$&(M5` x8A`,l*E%Ŗ 01f!@4!C"\x7tU.'IDJPCJ$fP=X9ڴH@*ei'P3Ap%\"TXl(%xNXIB9¥BPQX(L4I }H# 5PA:; aB*PpAɄִ„0EBh$ytQD|Ed(BUDϼE X̀1zA?A>qUkD-NQRKT݃2`DL!oC5 FDHWD0p/`0̝AՐ!~JQ $#'XJQ|DhX1k;$'f#ID◈鋾PA_1PD8W$̡ 7T`DC 0E[ C60`@5TM]Io0;ldK, ($Ap"$D ;R$݌O=^Ѓ\5X@iDta;FDfIeӗ.eTDe@AĊXF,0L|t80En  LG  UB`@ PAʜT@#B CkB-`йG/@J2LJ;ES 2#VzC>H-YMAJ^m/4%p|I^aC5~ F a8\; H ҏJ;, ==PRLQ:$XCN$ S:)D DLJbP$$)lL/E(LGIDYń,,TPFs* (BQ@m5NPLg J4\ov1EfńBJ-`YP*BoD-B-[DheȂa/| -D X魄ք$YKhEIΰ idDppV0 (#@JTitBDqLL xF d!'DKDkqH@?H"`b02t+0Z{hDt8GDRn]*D0U #U}U@+YDó[)jpI1x dJKDBf-#P~[Mj}L/Ej< ( D\.I ԮD5`Lj@>8j| 57LDH3pLq .&dA(d%'-Hipg`C, $.7UlT2Dk9DUE$R jG*8kC~t$%t3 .0P 6$ $QDP '<3*)EeZ9>%'M/$B %EKu)LC?$5^JeE(\%=L$MK81\%0D+QDe4l1<)E\!Q,gC\+%[B"!t2$*USRvB6pCp+]̀ B$TP@W).VA0A5^WP*P6HLCV7ywVAHJ7IldA\@%j(C|h/K/:20lv>DHPA4%KX“ąxp@ XP>/bD`j-tn/+8|K  W2?Dt݁K{?0sR}ќA>b@/]i Ur:3lͱL,ekT5hȏ  S :?P7w3; VKD`C h |tٲ-;PO VUD -T`J9_Ge5u=D}9 Al2VHJlղN;2AmQx@q*_D#-dp^D 2%]Z)JDs) RgE<|Ew4#^bBW bt5 CR*U:f|Dh2<^ʟmʆB/XGDlc>xXf07X+2<"X>%a$Y׉`dcF0]h }UEeJEK ߈3ED0x!fADA.# 4x`(x25`A" qKoHX3PH> 0x7Ւ4pҤpj |Aj\ p`H"jxp $IF} *pLdY$e W2pN !0#X#.9ք S0N `(AKTL2 `UݻuxpÉ[2\ĉPq0rUf2^ Ep!1@!0\AL"k%'U.@jɪZ-p b%UTX( VVa .rY7x#7*gϐo&lDÖg p Tr*JIVYN o d͠ %\-;8́`3<ܓf@ y1]n3(\N9 ӠʁÀ/VXb.Cb,#f11lzNv`6jgyQ7q қ*, hN9妁t " gp@ Yd1o !膝zL$Goh}P&I0@_*H Z8U^y8t]fGA hR>OP@ie:[ d .ҕ@)m,H\XCޑ,pֈ: wBᑢBt;rZ7BZͲ86:(TZb&Fam0p_ZfXR(1 > "0 'j95Vy#VM'Psc(.Й c3rf|q}Ix3ȯ¼Il Aj0`7\ZxD$i7ӈ}o`aS BnyDxFS o E@!#yCdZa YS ø%@Q>`g> N@h%Vc>j4,O|dПXMG T.a6LWP${.NF@ POAhRh@ںAqU2"rb<|Qtc . Ygg: 2 edk.(@z'CG/Z qtb   a;Rc HDp215 i8 RH$98NK X@Hi%U)0Є8þ `&/Ǐ#vؽBq>$D4m*Pˁ3 t<7@0Q,qelU)iB AON fݓNY4>$m4 6" c IIkaA@@!$0$(Hl'#UE 2TaiPH>ƱRfJmbOmC˪U DYA%(IDiŠQR xÄrs (,K 18@0`3cZ-@3^D NM8A X@DNO^"e}x76j ʺrނBv(l̙UTpK<"xd6n7 I0 J Tm_Z\?8b(NV` m؄$POk`3Ug)B+Bz#@@hP` ivt,&?*;B':1tD  -dba $%OEU!P|U?Z,5i_ ,[RDR"\,mudd;mb >08ľd}I+|6c_ Wrg/L*ўjg0P|htY! ޸2J!R 6HrnF1&W8f( 0E `JP'*yC/:`EYou!P@=LB/׋>̀)Y1M=%u2/!dc,V[\VG cm V0$'SE%|C oC׵`5aE,k9z=G3AA^@ r \`0D70#؂^#HiB!X!(I+G3/A!BR! $q oamXdmVM*hdLHao$ Ma܂.v-!ʅ\pHBXH8vAo aV!ncX b(` !^VORa'Jd)-]Q@ np!2U/pHT"HPRDʠ*!=ƏRfWjfffCʃ zʃR`J7 :DA+kf & zdF \ "L,c,C"\G`HO >MqFzz!.@. 0٨ ]V#@΁Ho &HfÂM@ J2~W*tօtaQ o:|AcPOo2 e7P8&! VAxP haHx`X0 BNFAA'@($8 AR`3!֍6al.`@! > fil`AmB XMddn *h3( >RP6$@N`栐d=g\1# 4,.n{k+W ²1: f;# ld 4*AZ!]*abZ'! ! $"H,$$ !aZI,DF j4T^ Ja @%>(XJ~2mzM@ _d/aZZ$FZ&:oڠ|N Ae 1Zd b@@<Տ& g8{b <7"T9HS.sOtč !V}„2*Lu9H;тSb 89~M.N@ Ĉ2NWf4E X5l')8K0mJ*hq05&)R 2]$ 2!$*B?z!v$ Z, AA.m |( Ef\)VSO8Zo+`P8C#͑: 2;RO+|r \p$d#ƲBl&H8 bpjo|`Of^ Xׇ8>!~O砄~ЂQv dvÐ|W̑ u \a_ s_EeL^&8؄c].|a &$܂x A#Fʌr\/ L {>ኈ*" ndNGjY e E9`4%pC ZB:6\Gho & L Lx3uJ$3s6JgSU\N)plX8S,h" KtcRJ*bRFa.R:\:!N;c5`J αb( x0茣yQ2'۲ vt 3$E8yX| weH䙚dlae2uC0@ZlvP4L $`37(L ::fbE`6`V`h~F6 hD ,# N9{!19 0,a,ꬣ6!SN"8.~釞pb F63fIJt ÂBHb:Cv q1^ORZ{Bȓ%'ꙜA.Yu,D٦Eb @.`@yCstsU$OD( 7No#Tv|  Za Rf ZPlW?ycdrJ~ތlQtC96A=2Ocį h,pq$|*BAhB: PG`݅XSaZ E@ʁ b@tA1laR "@v!<{oYBY.AH„?F¹๠`& +HJt mgp$.UQK6@. #[.>H\78 bs`$ xɄ w \'t*"rj0@,vN'Da sE:`d3!Llʡ|&{`z B\FF\G pϗ%+ h`?W&i W\B!Ճ7$ @9De-ٕrVYp<p"u|ڙyP# A!raMmA"Ee 70HpPk%  5D8b( Y6@1^,/ 'x 7@+Y $C '0@ibcFlK&4>` @_B[\J2oS/4s$sF(tʙΤ|A6lcJIĜ`%t!j5̡kK( U4 $P!V\DZ yq @e$@7A:4 d%_Zъ7A*ր ] J)˒5' 0nԋ~/>  * WX@^|$#J.Yi'IR d8 <V X3]a%R4c1,`8  TÖ48t8sTE8X z >MO۞(iz7Er2#G9 GP9$8?87Ishx[kBǓЀn.-f?!!d#f1ԆZ'NX\+ & He&;y|.qEA^DE?SDHq6:AC;Т:/+Gh˂,q72" D@ 6`?Zt$uZGv{&}`Օ>p@rS ?PkC>rE0v`oBQHA d|L t8( g VdA|ZtgOhW'AaHE bP^ H,,  y Z)3> pa-$J)@P5K"K+ pUh9 ]/P( zt.87K!EB{4&0W &|X6 ${x]W!\A @,7ȋwdV(Z^rްeX6F**0ԢEx$S% lA [Q+28q0@2>+pLz><ߠ˷Ԛp,|#k?pQ bL\ny@\5 whg49tI WlJ`lի-Ӏ mmh=hܾ s6HB lsv&' gT 'a yF  oPKF"mp Uu p 'D G9 `8V#>TvJ'P%O`zC%/aU1`a {CGe% `:D` C "6i5llL%0 Es `V1'Y3 jHH?qF @,p49 5Q "7M3S P+ ȴl6԰[$0s IЉ18Z vQj;gx9f$.9;H=;U0Z C6wQJ +2 I8 {l[qP|SU + 0F’+K 5yr5"ÑqE:'ЩEOP>AA*K, 81!%1 rli F/;$ 55Sȫ#mQJLprhF Ѐ L.1$gS/A:2/P \n3Q;,iAqA  @d+D<7:vXQ ܡ s[=SR s pPH[j 0 b@ ` .FFB9)0Im` $ b! sp5e1u&` r &F&wz Z J>eZ7٧Aa uF0.VAȓ_5@&A`F@5{F

h1HÏAod)j#$6 #l Z!5x9ɉ~6ko)n z0/x() P(V: n=60adU& U%+x JDJa  X` 1ܓO\. [:H{!Tn#D5UU D 0|&& &Q&.Wv a1r)p%O^e~AV8!Àd`Wz` RK>h#YDe+,6bLY\uՓZ6!6'[6~ *Tΐ7I,oHfi  ڧFB1Hi.٠ryB[d낕fa xZVj>Vbו8h#U) Y6J` =6RE  ~4Ho% gV9#; 0 }H$ᕣ *z$o5SOx0CƑQ$D$d6B:mʡ >"N89K$IWY:b 3X@dȇB=w7dl3<`nIDo*ڰ`ppa#^t O`وGEѶw A07TUb)t9N x< 7d/Ȇ /<>8d `*FkLz[ Y }7m*²i~B+&QbPg k$AƁ H@;D $I"^U*ܽ#-ʢ @u8 $U@+TYG|Ѓq UA>@ϑ.6c1Y3HFpk)ہAY@ccYu @@ϔh*Pΐ#'d+>QI<#`#8R@oل5 4@>^U$  YAMY!ii1[@rN#g JѣH*]ʴӧ k, l0 @PÊKٳhӪ];*ݻx˷ߕl *ܿ+^̸L˘3di VLiNEհc˞MRA$N{Hܞ0N<9Œ2 g|`Yf2y1E}.=?ؗ(X.aҐ|#`}h m !Ba@ "(PkFlh596Z(cu޽Dz*݌-%= 0 QkαaL&5IX w-%LtFP%|dAB\xc'[L0A!P7ڞy-^$gI Rt* Ih\҄Z⤤jjH 7!ˤǠ a(D*, HGF"gJ{p_7JЪ.3Zi AADMru =WY$h7>t3!>f*Aۑ$J@2t|. 1J D%d)w1G C e +Ў?$ tpCV1͜$1f`aH'P 4 vó#ՌkD3mAClN8{O|7!j [ءA^Ӷ7^,dnՀ xJ@xBg ' +Pj4y aA*  X:B DB3;k5/P(G6U-nU~oA;r7K*A>NtC#)t`n(@ zUȲgaGA,1mdHDFF<4 P"9@C ~X@]p rŇUL(łnx0^IG/3-dx2H_WCD {@4TFPA؃ yNږ`jAsBy5WvE45$ 624$a "ty OWIV`\1 @ {A| ؂ xd! DCYRE$.! R rX!"rIAR T!$2@T5HlA x0o!)ȶn {|ʷ"PÞBS!i 8I HR\Xj9u5kj!`0u-uLz @`p~2CسQ U,ATɽ~!s3|+tܔB鱅 l 5B龩O#(),!:^訜d7iD{ L63F[HrD9,pu9倦Ȏ 8!qTzU2g'E<!H\sh͠XQ9DYA·d#UPD>W'bezyl@v<8ee T& _%FC|cr AVk[=IN@:6&l9DK VδHJ$V Mpwa4@<!Dށ4\O*NSBSe;,E!k~L MŇK*)}Nmb!(xă鉊1Se* ^(ڣ!8KL9~i=㢌-\Mna@ qAу KLH ażhG DIT^ F; >HE?۷mP||"Ī@4^~ iGIL> A rd&|LiXrw_a?rDT'w{fho nf dחbc0}H;rKUwNzS>Rgwj0g!$Wh\nE;6Ig7 C {9A@'~}>uNjf,(.(|'n0ȢbD] a0QI O0=(HbG]5BS>T0Y"[q !@,X[p %T0`X |BYpAP7GW,y! H`?1Me1s>8~1 $`wR( #gC劂$HapKjp NL (#~q 1!H0O nO@(gŇ+x$^/%c[_f@/O:X,v0 YP*"wgÄXf9QV%Q-O|!|!.hc`oV7Q6uDo  @Er45aiy,FxK@1#LzK 1k!tNAj^O%Bi-1;V)CXwU<qE9Gr WE q 7T&Mx' 2r1 t<_i$8_nQj Iwm]0,bdɶ'Y\gq ,·Af`(U5s0eeP:$An!)NF3uS -r?6wjՂB)/ц8UA0d6s4.np[-JPRtWCյb AѬB8!Q&jlf a$cE'!Sr CꔪD,W7{a*Q0 M3M5$T6"!љkL*$^hb7 1Hb0!d2/B@(/n8P ?N=;C˧!B3{ZhYT,cvbYR)yBrMP1Db'J * .4;@5!Ak!#`=1(`p2LK21 uȢ aТQDY)` {_ǖQi{j"ɑP!9X'^2a  02; aS!#h"(p+AB[nh  UqL!$9h@ GNK1 q1~M>q}L6xyҐSyy*3y;!j`a B["L@Yq+GyxkHZ# IFpkKLKv[04$>RDc7dL1Dۄ3D+!'#Za2y|)[;΋(, <x1 x i˩_T''FB 2g[)r'²ib r%SyAa%\ < R2Z1Cąb& q |ِ XŀxT&"glVi: { ,uM3]La+ D4k-&a}3Iv; ?ۢKj;*Dk{q 1G-o)F-!Yn5B_ a?dM`.ۣ++}v1!{ ˰{lC&ݢ@ޏ c"G=m-qCc2"7XyqRem817[2qr򜷎/n !Dn,]l֜ b((P]6@ qcB\&ۮy //*r/(ͯW Pj *0(큿#ׁATA&Jco&$h;˛a欭.>Gq묽;*~$-1 ΃n=(aCa #`UM>zTO,n]C1xcj `%*;ЫOqQ7,q x= `}/{n5mq O+#/ *1y-aA0,0:>Q Q| o_$i! XA @jB(X5XfB"(Rc/>1/ `# 7DN$A$P(DիQNZUYnWaFݱXT"TVϊ>Ie@‡h{$B3DYV ΢:3l4eŽTΘ崙5ogСE- AI&+jj K0ƣ\?5,p op,c.ՇfBCFX\,t1%(_*iu`E+0 r .h1lC'20hNf6hvM<^-eΨۚ{ny eTFۄd6a荼&i7HXq Xfr4ی3"py*ەE MԮnM] leFHźky,}[!1H?>y *Hɮ*5>H%u5z32œf ջp ! wjq׃L,5G$<6KXJ:Af` S0”5GTgfoq~٣u=|z !*Br1#FE'^): _ɃЫ],E⪠/-kw. P"@[H,Ժ«Q.ኰ<9'@!O`3/9ßD{aۢh_G140%Iw{zrsk!Mn0Që;'"êXɋk+ه ꈖι\Ӟj/؎"xPQq d:8?b6;8#}BԪ6s-݃` H(.a*b9ӹ8# ġ8>h*P><Q',7E"+K &LcѴ39(y7(Qp"B>z%5p ")b| (f@ :Ч)@+9pfACclüc*nhAK)J-̈`R9ҀQ8U ùC3Qy jhn#Y xW0FÂhV */L68H$r,2/!%T@̈́Dlu$(XHʂ(έ#>я V y)O>{X[cAB $0X9zX0]QVe8H9R `{Zk,&=uXep \@8(Ь+B$?h͊p6ж@#i M#Ԍ@(mlTM݌d6m͍8̨*xzDDWrQcM4<;!S` ¹A h,@()` Ä+''ٙ (Th]p"Qd'<5tS*>-13d! 0r Ո,XHi4L=2 P6 (UG켝uJH7ZՌvhH[N"rKP 3'/{O`т4-5]iŀ8E)YdFS$FCt ҈H[7Ћ(P<ƏǂН؆e- *٪$ ЈCܵ2(Z# 8 d: i,]т؅ Y{2%0Ua ؂GdgU ) 1*ң$,1 q4`FQW+A${S=Gs[g(BuM4 NE O#H8+Me͝PYXװQ͐>H>#)QCS >=9Ҵ!@Q@];g]+Q̢H65DۢQЊy%Ƭh >Atl4pJ^vbf&PZڌ+x@(|gΌ?.Y#N+ec6t\gk(]9^K7֙K͈n+|)kkg8 &$^ZT-4h6ltguZni >Mf&x`&CimG̯Xf@ T>P[f+N(H_X\u( ]58gx؂c;`p|XZG)P g}Xh)Lq报HD-xoP67 ?ri͂-XZV? qFLE8.o&Bg i) 0Y`ϻUp5]%9HD7sSS@3C@o&^_$tٴ ,JhS݃o0 U'b@sh XI.SHag1D+Ph箘gvA-L=XM6p;S}VaCGBOsNOKȂ+ &^`砆B=,G`& FfXШ5Wo:_3'̊X h(uw`u.a ;?Z8,hJ.why>Q[uXQ v߈Y0]`p x\nisA3yy˒_xlm4Bp̌(y@|6!Xwxyl]/Mc@Xxς$@gA.^ уh|KlLqsVgp}j7&p3ٳҤ5ΣjjXSAXG4vp%XQf@yZ߂s{u倯RPe h7?;,hA&lAR$AH'\4DF"G,i$ʔ*Wl%̘2gҬiMZl ֲNL~)~aqXkX<%\Z*{ \ڵ{"`Eb)\z)*Y"%w$L!Q  ȱFWn5زgӮm[4R @Y"MGe#)#\[$U=ֵ!RH-?z,AAI!-;u{ȨhHEH v * : ;T dkYax RGd$NdUV3 !6H7E#\I.Ii(db%(D(Ci|y&i&?f 1AnP}A1[0]]Q8#AW Ɖe2Q=0TP0.Q0ZhI TPe5.iG$`+ [[O;XOAxBV"-A$ A[G7BEXA @Ky"=Œe(K0 ;0ĽB[c wИ(BXD 'DH 4ZPAf)E Aьx3\Hqk,W>A!<!YؒY+Y+A1]{55QXodAKtj/>LEn3(BPPA vKA#tzoa1R#ShHach!H!mQa>;/ JT0m"g#8(o r[R$wl^5 eC-lҔm6T#H%$ɠ*jil2IabYpaAA-V S]w'STVNXzRTD%`&! !X4"?i$An$3I-r@02>&$H$Lƒ[y0(?8IH /bP-)ADe$$D.iдGd0J@M)"x|%,mB`#N5QAD4 F^17B [ZbM;sB 8Qi/X`ɖpw=x$)BD>C;Db)y48/4DBH$3H R6$ DC?AHE =4Xңm.$r2;)HW.HaӼ j)PJ;5d'QF ~"\UDB2mP+H #AF>Q@-"i2;țrQH/ b2'D_Ai|* lpX"T2N\th^ M`C'=mOv"`'%NvP 愵,^^! !e|eŧX. - MII ;tP|&$閒_$53"R(n0<ttpRv5.el +٠ mk{r jVZ#Q XL\^7 Kڧ-Ftv%tIE\PjI%UhH  `_@?ɂ )E`WX$vrA&0`7W: vr~syKEDdp@HBd* A1Ydzs0| _Eq ۦ .d~QT$r3A^q8lq( q"Lms؍ R /a4[IvB A,2ݓ ,#J (!᝺+^ qro%Usyg2"GL -~3MCf bMe 8 >!nb| B:m@t$1wbD4p)3d#UG{Hz+4.2AD|-B4WIИE"DN47&r̈́XCq*I-,:D3Jh1n Bn#BB,OdTiA\MDOd%_5$Y>"0It@7B8#B %Q xcX%Ad'E( B7ĚĤ6DD; gl0hpHJ6ҲPh65М,yx1@:D6IxKk 3W9Fٞ< %Q%Oc8>Nփ\ ߩD2 -X+JoƄA<c"DHhD#f+x碥Ô"N_N4CɎ!Hf@McVmly Dom$Bi8er$,gV#L`$hnpB FcFJIqW)E }o, 5&l]"IdI-BDml̙:ϙ'DHhlA`hZoW{Upgz[ k­̣Ԁe< &F pa A'aWYJDI0khpAh -ATiD060>?PH(N30 xpUDd+W1vR†nڟe;cOM7W'آYm51kmAHB"D-^mɵ][2F8t ~ڀyv0A2^MwrUrIb$1A*ǽAx?D- LMj)+I(3>VJb)MA0dE]?"D,-A@O1yV0Ad H+F΄r5'-lI֤# qjIێ(m1nD87>%C;;V%_CSdK# \p']~45JiZB3Ef!k5j'4 D<\I) 5ԵIsA(F8@`0nA|)G "Jؗb4E\.f08*APPx-kB)K0 i6|;H ӠE ln%DnĕA,/A5mX+Oe.WG'bb(J `7A̠ J @dh&MTVGpll"7bБE@qܚ,L땈"vX\^U8oI(PFĈ`3~% QʽD͗'oA"*d62S B?3V7g̍HA0c)붃+AkHP[@=vJel7BD_CGj1D>KhRMA@\I:/}#R"E MՕ=6;q:B\&_RRzIhOޭwS;5A8BhOșBBd81gWnDhvgV|QV30C4@#KT[D2ώ %A@)zFpDHOYĺM .dȎF,,)I#+'(:aă;^ ;)%DHmHv5[ʗo>2H4r9bD^GdѦFz}l B)J?F,(B J-ZqP /4C h:G "#Rl4!en#$% O/V OB`iPs8M[&Iw29!\Hc:@b$3C2"{B>^=#9>&`h7LLKsn E6iG L(q>Dx萭TRHr|"<!CLweS#e"Z9N!mCP-KD#Wr/gf6܀8V#AHcDbhH3!:)vd|Kg<Ԫ j)D8wN )iR5 >(IqhwurHDB,/‡+ [2[jr@1}*=ĸIBB],]lDz>a*L^e`qHƁg YG0 vE\M zp`(Q$r`I7T p7] '\m `'.X$iLd W0͹^tE".)wXf$2!@@wp TĨZD=h{a.ɹ92dQ22+ajfn\fX@E“͙Q!!#d.sQNj1GdX@TEY|6*> VLJ(@ɐ- !2C5gջLUVlEX߈iPNu"ܧ-B^`Ёwo>HW>LȀW넜xRN*ph;i|Ge!H#wNU,03Dbl""ؓF~ O(S hEC@XMj["j.|*8ݸC;#2lL (tÒ m^x'!\F") B^N,7b'v$ L8"v@֒-$M$7 $]"% A Y4/$LKb@"vҐ33ck&NB?2"J"B:(Bb--#/*Qlf0B,-Cc#`#K$# <.KbDb Bf#jr=5"PS(˒LbYec~( BS#F57C:s^f&5d #,!J.$^"?jA`#85tV bNYbHr4bEH)p1XJL@*Ƙ"ch2ϼ`H< $& B&4b[b"]" 9iҸp }\ jA: v CݴV(N.2X2Ƥ@t@j"~"d<@PkFbRIΨq"f $ .4BL@ +΂$+U#6Jb?Brւ2Ds2-Nb !.$62MV!\%5!aS.ADBP 5!TB5 xGC|GQRiY(P5bL  ]i'$?]!rOkRH aMN't^AfLÇ/$6X9veY!6.Qd?2$9 &W S ZVAS#`hu M'&A v6%p5"haks!6S>^ B_IC"A55t#楘 R @#}l#t2n$4j> N1JV%WP T @N5 ҷYҚ$ YjM5t9bL mq䛆V%P#=#ri04J?%NuTWLf`Eb&r"T.W}~!*t"BG2b7"SbzYaoVP@rA!.-"p'Z/XL"(e͋)̋Z =U ![J7/K45uwwe K^z$Cf1e}&êVuEAR7`YYCTK&X]ϋ$'5fs- U J4wA2Jy'&dB!$֡?>z"OQ§fs]NfTT 2w$gb_ tg@X$Pmv"cM 6 fx"ėY=r9ydSD_~Lŀ ڏspGb̈́X*f5Yf]b> >>BeIW+I}0. 7B7Ft5C0KKGJB EN*yN4V#W^ZلX'lOA$te$ =v'L:X%B*ikW$Ta$[`BE;!Z CbJ9Z,?X%b_b !c7bTW;Ȯ$÷!T V.Yww9d3a Qs#M@HAB1$< 5bY֢a &( hm#Bs?z: 0dI vC| 5P"P# [hȋ٘1TdBP.`FhfLjk<9"D@ WQ <.?o]/Y݇I{a~5,s1-r1!5~ E.~k0 vmnR)DB9"T938=z`<$>]-d!R fi:!٦7=!D=ڝ(Tx[#4#`9!؛ !S Zy"fx4"I#'8B  _ T !04"!?&Q+- @#|@, +f2|}bn1_ ;k#>~4jG0?|# &.͝|AŖ9&vDM+P!~`R ,"<&Ğ'fO46>ZB"'B"DD%$o#28"a3$P@h&!)Zb1ƍqGR5FHlA| 3LAxǓ;gtYϡ>9 @R3>!!5{p =l 6OHk\A ֓Z=LH+%%&|5 G.. q`YatD?U3GpAmuB M 6qO&p ~̀ݢh J$PÎ~HCٛ4,a|냼s絰gCZHfX$KRKiEB<7@UT)XReEF&ַ_E@p4 e1U'0CyQd&B2#BpxY/BRfdYwՅP  j L:pPnI=j~FB E$SQhB!wB%X*4 -  0jFf4Bٴzb`qM58 :,K/Gmt'U ^! AcTHP J;5v@-Ief~SctA6GWChO%. "%RQHUTTFq/XjE{1qI&૑-Ku GJD:q AaJ+4#4! f7A; y&edHE%0}ED!Y䋱 =,B ԯ%a6daBXs l؂s sDh|#$ Еp0HI}i5H@lYgfы 差O=P{\ %1Xbb\( NJ"p}H 5ۇwl}y$#ђV#|qLFf IJj @p KWڌ- B D M`! !0=6RDDr\Bɡ!G w$ JPYDғ;x (`0&i*qt #(bZL%+!@P# }6>"D(Zf2R&Li] "?CX>aU$1e*aUВX3=x _39Ns# 54, 98Pڲ.k!Da,d&K9ό I6*,Q#D tŌ|!#!@H;oB?b<D(7A-$ w)A@`2;}pYxG HMy3R xT!Wjd~>b%"0B$$ *`ppa^pژd@.Y9fv/ha$ C-"Q. E.4!h4>& +Jn)!U"B:LϦ6%1XA@TEkfPgbԄ;W TǞp < Vq'/a 2+~DfE[pП Up DW H)O !<`|@AD+H9Z$iу]7/,/.eB.#gdd Knwnġæ qh3ExzG#aY3bKt %~1#cq X0< aw!yqlA  p { A `AC@p!kh ` <TsbI*H|w(wև}D (p}azd/ĄKBi4gYi:O F7LTP%0A ``cpaf`Q7 `AuUpw`y`*}r&ǗBpq:ƤY0x@mPWO@0c8eCmi[u`A uϢ| ,] p63LuQyW$+7 YuA9D.zp006bE  0RF! h@8{ǖ lȀ ]gAZDɐ rT{6 8ihX4?_ѧX6)Ğ$Z%9Q3saixhSR@+ ? YBY⠁ ٔMd,nYiPoNRa<3Q"2pP]q /DHKtPzZh I<J?  A]` 7  9 `iAmBr˙?)^IK )Di0BwՕtpw~X3zb'*c90ky3 C:͛h@i̊ I"w!!`10 7! VUnVoD0 ]KЛ" a$d8 nIbJ oq4=]'i (Qgf0*aO r(* JA ; +`YӻiisViwi=:`V$@P܊32!oŸ b69 qk$:Y%"!5)Z9PІ-!y#qW2I.:%mTr&P StVʴ {@ `tL̡1 ԛ 1 I4g43 (Kdd",}Tt J08kKP ?.=EhBBp0LטavS!a!{FՄŀ|@P`i" ,qE,Bֲ EO)u ǜ/ G: !$jk7gCh+ z ѫC? kFPaWp3aPu j`K ZQ !.!b,a!@*Lg@z8ӟ }I9 B+PڤKX8 ܰQ{R1A `Č0Md*k qu AXҒY i ,t^5M/ 4 v{,bYt@ 0}iA |IGP TK?ѪK7e ` A]{ rپ0MIM@ ޕaTQ^"! 1 OPqa4 qg}slEz;~is0 ,W*QƓ\l c@v6mMꖿ>q 1ڧ E,Y]b

6,y`3p0@Pv2dg#Vs2°i6mv\ŒAޗ$de D' o :: BNX00x 7@24id ZGu o$820v J8L(2n4A(r=v4zJ3ʦ a;!(lC 0E\1o|x '"o!m CG`h!4:jȠNФԏ uQ' M9"XȠ"B VV4f0b!n q*lDIB@b4;PqDX<0 ;.H:Ö ,gJ:b\ C 9Ha@!FI&. I;B>Y 9RD$.k90־ǯ:!9(˩(cخsA A b ʼP˃jao10k0 MhK/5io @HMP (EǗ@Xo2;!0ɩ@<ǃL7u9b(*)2@(ZFHׇ_!$$+[1nFcΜo8E|X0bu dO/ҩ:e(}VU=h OU~P Ґ ҆,$ƢF.#"²n?i0FI 1& 02 Vx#Aʰ0AQ` 7[[eY.Y)XFav{((C ;7ՔGXv#e ;b{8g2H1#Ea3D<tz^ @&WbXV/vyQNZq 1zs-:(/.6\AV%lqo l`Zqo89;$'  *wu2jCP82 ӾTܷkM70ԡi H. 0 !bEf$E2AhTs~ 8@* 8A#!D\lIeGll?baue(:c, qPA␌#ݑ% TAP?=Bfn|YNP|5c:U0 (ED՞Р¥:7,G yQ'R` : b%$ҳ @xz'TFA m0@t@>H  x񋇩 q~9P11{h)Px:~xB^:90Kik7005:Ю =sY-0SLZh?H"4@Z#04#rCZʂQX{ph)ϳ$ C{BH%60T@ 93Y#@Jc; 8JK|;л<(I"3U&S4C<59  jO*;x@)9x7xкy?VhП:IYߣ\AUy4@KQLKXr< `k؆"(IG\)25`^j`5EV(?q`q# "!иIH&p,@%(;^AL#"}jAa#pޠ՘zox^"$mk"B £!(+')? Q%}#A89 3K``| )x0x  oh ȋ@€֬HBgA{M JB0KĠD"QE*; Sܚ4@YLjב; hhȩ`QCc:kJ^XI Cb:4(*PS8`PxqMM=x[9R*nmh?e91 ^ ȣ0T0{)e!~i6v~t,/lKsH1@Jx,$`9PL$2u"p =8#C*@oOZ Z0#;I­<#؏{cqHs `" Zwb\ 7H:0pV`k Y@PjD䐀jH:ЅTȭRsy~ cZ b<5"E@rXMJM1uxE;"YDc'΄ L"y5 jXZl (@=o @H; eW43@ |@I]vd) ] `qX]Iإ4>$x3і*0 w[8;Iy6ˆ bqRmH-ڊ< ̺Ĉ:"\zb8`F0%<2#x<0a$ 1CRu>h "q3B*B%j$؋Er 3CLNH_u};L̻]0!P4x2sD #*E"R[N'MɻN (P8(C Ǝ ӯ\8āc6p bڬ瓟 4J8ٝ2YHF%MF kn؆EX^X1P)d+G5aڅ XͰxE@},2* y)8 "*;)/-`* ]lV8(7=]B9xgpp9 !MO  (90eCZ! 2&=a@;2j ]0+#9CA#ㅇ6h: @V` 190H3",xۅx#(gu9Txh01`Xh1o2[{Pux2IjPנW+yE6V R\VD1x>F &7Az BX H 7@ؓ@H\[G>GaG8Qy)e#bpJA; Ɯb=GHP)PP "pKcH&#T Y v!s?ÀRv=C-19#j`JH"Xȿ `813^܁#K-АX;"1e> K\8f1K8pƕt 3%qx] PJS!1hdÄ^0X\USd= 2%pс3J8 c0>xԩffQ}3acXPi@_Eg1xj`O jaEZ"(UG~n ֈ @IQ(xG@*r(drxKxpZ[Fke5X0>3 v!$GոI2:Xrʰ$M =q^P,$RS&XH] iߘPV||JKڨ߸OsS.q0F%F*-/\/9nѦ˼y#8bƑ:YZ}m#xFBhY  Х.PH@qH> ?7PO- ޜъz/ q=E.jQHSnfnN&[>%pE?(!K41йT$dH7_8E*>1b`qcrY(\ E5]08t1oPrZ|X^hS36gjRހ3MY)%pre}S=.h))h@bCZbÚg{lJFK+Q|ى8PHп2FB)S( &@uT৆9o<h%qKXj (쥣&/x HQ%hiă0 \ d#i8`h#|o`@>mk#ᝲت% RBah0J$7a2f,'xld+KՉ)rHDf-H#YHBb@lV V +* IO"Xv.tŚ,VqЫ|"N81"I-Κ)K<0WܭrV/Y>[(!%\EEB/V2"(NV#)m(QR؃"5AM@(F@$*B0p\\`RGĖ[7Pa"2!68%rvpC1"HpY#a8xv1ZH2#@vرKe.#WkĄHP"]CH Dr74yHc5GasMSk\1R5.A"|` U[8Yъq%FU@%C@Aɲ 7ېP Tx [IYP#K #M)L` !,VDXyT"H;% sR RTHEbakaiЎK\;R`Laۯddͱ V|+ftYb8H&`-p MA;HpǩK!@B &<(o!^h ` P= JkKűbxȜ𧘪 9-F"HƠ_ YȂZJ0FL%Fwq@\aԘOQdF 85hjb*K&rR *M sD /@L2( }" H ,#ҎdUhXUqBU"0ń JQpD4[w$̀ _Knd|+ ,1PK!v( H&Rx@%_aETCvH6R2+@wCULp|K`Ɋdy,X-cQ'$H A\D33uNJx GӜ"sgI 7]}`%.\druH'ʘ6=Y$( q^@pfUܛ_&%Hrz ]V( :Gӻ\.o J7\U9P@ Ԕ Cy x}+i%3)V QDu9$ K'q 9B=jdJP I5f48 4[gdhk[U oD"Bh`h8F JJ-y"/d 5hce I3^03,&IīĀq3`*ŹCybXnTEE Ղ4HCxP"%xpQVpY$*e7Hn^#28+0Eh҃@{:$a Mۀ2!X '\/1`R/A"d1MVC,JJ[?UVyU дA1bLdP(VHGGGǻ$x$ VXB [_EE~#,"t 0 HpH$e0؁6NpNȀ`9 {XaP hʝUU Uɞ@@&Dpi\N˜d >A11JDT'3Ј HH؄POV4Ld*+LB5JR8H` .D*Sz^2 @Qa!⡌YIL^+@?ðh'H\8܂HH!YDD wj%*E]tHz`\|@$HDB841 8YeV2c9Ĉ<\0\p䴹Eo=G!mBt% F7 v`ql H.,J ӣDȭH@DW5X1&CD \50.¬,A\TV;!`/G& 9 K\/C/:x}?3A34E68*+ s7E%gYIR+6:8AP B3ȎDDqTV@drHtǪ\\k6_zſ"_z0[H WK0. V@bvF]l 2(&Vdpp]A.`V GD r%qpd7odVLT m(] vF zb`+d5STa! Z7$/.0ߜXrŗb<WBSlH< 7$*` )xކCB %P4IeZ6?̓k,*x*rUrB@(8N lf.`d0I$KPYFs> [(dp"H@Èw!G`EDH(Vx܁bPQ@5r~]HHlCCWEVHp^ ZIcv' >ѕL@!?,P mm)?\xB33qj)%l5h% [Ь#΄8561/T;w,XM7 Qx\E\V- +Ă TN64gVETbaW(GTa/7Y8X{HXHC2C,DC1C@DpV'镊H(IB q 7DHSQ0;䶳E(% 84T6H1j"6SsHEZ(hN^iT[T15~Kl_cVD146(G-4$\+@ ܰgAY$8bB4,RbGr@ n JtT#5,qN' A>9'NpD$ (PN>%!a \® +`M_YvG-%,2 0v <ȲV¸p0F_ C&8h@S)j[B\Ent p/!CHVzXXə?&%%D ;b-OwxW[`И>$N\`>4jp vA`w8 , Kv`LDEI6`$w@I#86Sq$t ޡj@K @$ he";Ȗ(b2l":J f>"*X6DdT I)S$ uz)RpZj)V !]%5KO^r%I%(hbWZbι.:̤F`/!Hm!h n&$!HeiM`m`j^n7<F >`3!@VQ!V>8ÊPl;ǎgN3;h&; !Y b{;1nx;= ce (bI ϼb:mc&C{V 7oЦjpOjTX ap $` ohB#2K'/1 3L2ʬ" jbMa`3 xbJ-&#¦|%(pF6Ive) D NQO z Nz F$|`I$E,` JB԰} )2CB:(?xk"ȃxFB,9T7a+)y )(LD}G!1 F` C~I` $®.VLIAbAXE"JT @dBB`cf7Eq agL٢DZBv$"#g7@֞QA&a+ Ut9؅@0V|AK4 FiKseZ~$8Ѓ86n?l 1 M @Kհp$$! CIJDBb_U&P X;bXL hQ`"{`Q?-Q؃A9@vIf9 0\7%UN 7papvWB_9,ԯps(W"8:$b4d;]\. Ő}KwEҸ)h7On+U0*IRk4}O7sD .#آrqF11A!y̾8#A<d豵"6.{0` T OJ"*M|JhON0&%u*!O& ΕKAA^gV 8͊b6pg|MRDMA/!4211=VưcHlbw9fdDpiy6̰*XMB[ ;AS>Ԧs7s% zD<;J[drpCg::i*!\vp! d7[&B @.$Rh!>Aඉq.Gĺ GfĜvIDuu!;H!I^Πʄp$*xh*3`&d+YVx b ,]]&# !!b! $ET RA 4e" J*! Xd(rpbzeP@#&<R<B B@ހ7䀆Z\`?B"@v@`ZAp !uvP!Eޠldsܡ Jn8p Knm",7 LdTA沂yzH@{$bURcUr"~Wb`1΀ qTNE'ST"ذ"G$("$$Yp2T@ ?Q"ob (&`!2&b*bt@{9;C=j&'b)B}ȟ%~R@_`|t&@Ê00$B5km">AFk"bq{ @ >ƃ8΃7#!0!8oi[ҷb c:>"u*£<G%+Cp`j:a! (A @v$Bngբ PIsjƒ @\'P!8HpET..E h N嶡 Dl( Hy y vm%ad (U2L!r"^ !Jj"qO"T< pA% H!XOu"( A"@ (h"<B BH:gB;@;-9OcO2i.+sH`=\q)/aQd}$Q~ ^<.f%/ T"m }= r t@ :`3!Б @c4#!D  ?[A:IbHv:ːE" cE.Dlon-RdV.C8$+XLdW"vքM!b ށ$BX'Ӟ,/4$b2֎Z !!1[ >A"ZVӧ< "\ 2]"! P @L@B,X)*$"V"4i Ba (f~(ꆴ2!"x=ͣ8㬲osb5qg `Aq¢ȶRQ.Q3YW"e jb %B VU$5Da"&bJ ΀s%ԁ hM6ۡ4E$If̃WGi;F"pK#biH2B FcKf< (o :xh @"mj>lr^DKmbvvt (BLV"$ՆPE9=C:9`{a`ZaMXAEf47!d"NȘiQpo!,)e'.8""8!3^5 DkVTF''O{uR"aՅ)P  s%,1:*j[(ݠ:dGA&B7RRp9g/K,.`@+c&⎔A2aW"Rh *zX!U ~]":(EbNnΧtA zNǀ !!a38`hz$r`P.~ f"L1!A B` Z:%bbP":`y \Q"u%l6~T" fUAAG)5B_d3&(b.GRVN["ӗ\%xRؐEnYjhc֕j9'Bh{8[&Bfhh S=:4S\@s^Mev'swBsȆ #qJA~x5G z'y\̃ИK%qŻ`R\%KdlMF! $ W"Ia "YGzA+#~*r}J'%$ s 6 w""|`Y͘B"("|3 :菗xfyF\W\..Je"&ba?".!t!'q0'X _%bgzU [#8P<叔 @@;K  B%p3; pCG`X"I GD@ : jO<\RQ<<+vIz+&$K.A pi3 ٙƂoPiF`Њ߾]u()^m 75Фibu` +(d42XdcKQh*۝V8{6> P(SA.(T)fK`~wiC"_ATz2j?Ea8" u5BFHLjt_A N P1=]TQ\MP.2?8WIu( Ш9C*tBhNA|.I "#eJ07l\"M-OR m46qIdM%P ܍.vBlGoWÒy swY1wkݸ>̰d ( np1 Y|%Z\2 qP)%SIB! ܆-ÍB.qdP H8판(92% y|r›1=e A0vQa`E,8 axZQ)HuCB&MH?m`$<@Usl$(ר0leZ?\Г^UŰI1Dh:гTÅlbY \щ&Q 0d 2 4@ l.Ϊb[!,=҇b,0W0S%3 D5 1xwLfx&6*CuE68)$ 4whr S^ǒtjhUaH;\:v`9|ܙ H%jgtc[B-tL@ yVB@g/fFԙT#aq&YCJ\V94!ő0_@!YZm~o.i'cr2P gy ҆\!nEF mBR7"tDjQDC E s8k".V Fp8@;\V yG7ס`rdVswQXwPs^=r`xq,Ti @W_Qc RarU^3V7Kep`a6^Lj SWuúOR85"8*vh7.iG8OxuO1kDrG/d7eLV%ъw%ldƩ\Y$%f8xr 1ra@zްj &12eGSdt@5CPtvBU]2vU12YV[a 6}#/4#3<)n"wBXzZfL+xQB+T}‘BBB*#Ar܆ 7pYP `4!!i)8!I!i",X5F/8%\1\:v 7HЃ;םq2ÓF ŮD ,ШP3.y8Б4;qtP^ =944Nmcuaa΄7}xcc<lٲ5"Ծr,Ȗ~Ƣ؛rMto[qHG:M2 a 鮝!(;epȯw[QeQ_F *51Rt&o>@}4A  { a) `` `@<ZC`(@iߐ F%? 7/i8*YD@c'# Y;"Ym` %&a &{? i!Ie ʠ`VR0c\Rpc@S 1'uTp2w& Zvcq 3UۥPॻ 3t #3x TQӆ#^J;} 89]   ZҔovb=. 8!ڣi_!+l,u' ,GQQqQ2Hhy?Lk4Hïqf-ׁ'Wn{1 `(g}FL0nK' >k\lh)(2@BTO0D.Q)RaUK`OMk+!d$RI6.fբQX;T)=4kb<cE$H.ViCZ&YsE8 Box2k#X ɍʠ Z `QQp0q ޤ7 a5Q8`ޣ;Ủ^PkDǛ!JF0GQ8mb q SrA!|.OPw%^rC7LBcDvq)v̓v81Oab:Ic$dPe,QdSd ]^arӶ;D[$\QR x4in;\6g ~pK77 f r@ @ |ɷ1@!mQB:BCZ@$,o --!ZYZX/o`)ಠ*!k( pJф,:fX$=^!L7<$NW İa Äȣķ mYt = 3` as@- `9* ,m!ˆ0.{^ z5!B7&uhx:E8|#s ]I qI}*!ZDžk\;FZ@=npb9@ P [s ;3@hJ$xG;@HWV?jT@;lp qQn~ 2H2P!Is q,FZE <Ģ2,A/b cA$"ńTBGm2Ԏi̝TfD~F?pF_,yxF]&RI' zH!!X{v, 1TḫbFj!"p!3 R:!dU TCൄJxD"TZ@B@CʕSemJH8Еt#gy$ !X6Q%!  Y$2a\ !"@׬`+TșBՈG@-q7 )ErƐK%xٹ6DdqwhH Ip~h PCIa`CxO ? ?r:HNq$'!w# 0 `C6%vdǐխEy dgHI[݇:5$` *P)ހW \ kb -?dkEBJQs"x60>Rc b30t*UqBAx#2n@ fB!pUVJe XP,B @Q+ "g@Dt Bh슆)F4ay9H" d$oc{2%]@iA } -CptƎYlQiEqFkȃq(@H5.(/!p2@Qb DeBF!!e@, !',AAC+g&  ݈:c 3\5O4ODZd:>KQ]$G7YSv2g]t=`s vC&` PEջh$C9/{CIOJ>H-d7\j bNq6 ,@ πq gGijeeAYF."` u84c BB4Xd5?% >^ Xbt ,dAxl0ֱ :,EN H◊U1cmH~8 @q۪Le]ncEYB:T2x'">7* D.f( ޫ`x#!N(p  n+A0!]WK -BG#&v?%6c7`^ۘ]l<hMEL-8k:EHHW8k<D@jjASTHȷ ^{c:@-Hʤ$0h&Y*)|fnʋظѰ%1%1 谤ܜ1)ܩ,-( -tH)D\(79!e"e҃ !:,D <M}RCuXN{A>|HDTHX6ۭ@  9H< IC(hhL m lQrHrɬ`H "* O(Ҋtlt) JxsL {jb.J Z*:ܴJ-倁\dp`(1:XXMuIStN ф#QAe 7o0h Q!mYI (&i,X,9-"",C\C[sS'>( 5m)13h6i-`00 #ڑ;E!;=܉90(hL 1؆ͤ :!uTES0 `;K FB\O*W>[HK؄kjL " 85x;FσUcRcG"q# :[TH3ZPDնMt =xHiH Ln`.DI0 Т D%@FXvX!N⯧#L!UPcfJd %Pi&0qy5K1y͙&y=vb1K#{Wc᨟3/ɋa@؂!e)+5mR*|D,3- U[[Z"0+@LˈXјX8X5NYY8V8Y} kUMk-h (MX (dHrE\^0 2FׄދP^6P`ЗD͆Me)7 md@cJ~k8I!mp*q/NNY$eP$ @I2-Rwm&$s a.Y9(< wSѢ9%5׵-aTS\CP{:&F0LpE;&;c{,HL8Y UZ(MywHV9lVU>x_PxHH448`aPW=_ tQQ׷ ~%.οuH]1.U#oݕ[=i<}r >y@c}N: 0у/!hUYUPQoY~C0p/}$+b)6'mphJ!txm[b(q[Ӣy-(~[Y!̰T)`IJ) 2 OJż)Z9h؛Iqd{ANN5لVɁ>z+zQi섀#,.p^ >/" *4NqN (0%hV^@4^>9Uis0φ0\  Tx"sXf^t}^n_8 #6߄Ї`FȬz,>^PFT1hFpS7$.q%@)qbH%x! 3}:w'Q +A ' fK칛Yϋa9;Byrsza 2ij E:4:KPOH8c.#f~%l c{}}>p_0}LU̓F͕snP|,!dAYӃHK҆:XITo$SYe@)hPF7`ac.NYr@--bП@F'2B0b[XQKnjCPy;E8WgQP6P8wuC=;@N>Mx ]lu)\g6J)m 19~H 17H{0!*ti@ĊM)n-!"2`,P(Bj1Xz(k!W{w<,Bq\iC ]?R p:vm<07G 5(V*>n6"0&^o֨ʙ g0Äb-1$C‰/I@)CpPD=A3?SH1)4F=L$T4XX@V(mq (D|5?} ?`S,-Fcc% pY]H~<K@ %ÝD֞rh(!"ml@V+#AE7, $#ʹԨ.P,@}GgʈH11Cb @/pm Fs(oV1XZ4Cq@@-=u8+w^Ccꅃk_g20`R8!>б?pXF{CPCxH al9"T&{",ЛMHhOuɀҀ5j Pc1E*?x4P9bGrG,H䍊 n8;XAҋ!:HF9 eEG U)81&%,6K H=d &=OKOi$uMJ,ܠN\6B'Ј *¿ll =%+ԉN,`% Sn@ LMa3=6Y&D7 jӆ"eչDWl$K;ZYg@+z TaIFRF`[D>bgq$v W 7+#1'Y5(7N;=$6pj{a X1nLFbل+@ l(UQm+6qhQQ!~?uD%- tt<L_iC^9:qY;Y /j(h)#E'RV2?<$&:yJNbدEC<*~D*=_pǟH)oT,dyiE>;Ǎ=c Oa,|VKD:xCB݈?XM$ԉ7޸m F(P" ` ʃb$apBC ,d)bA0xҬ//T=D47 J# UIM:h=q3HǙnA\B6rh#+5pV `/հ.|p6R %ǔ ,G˟$(Q8H=a7q }rʁ m E(Ոy_?}Hd(lp9!yHX'b"ڊxh$zA6H4 W`vYҦA=@pW=Zq{S+ڀ3BIpgFC`P]C1J5hoϝ, 6l ܖ=7zƪN9!e[pa[$r&ɽEo0' C"R"L$/A@[ PLR `|x@ *|ո6E:SQ19}^BJ,X(ȅ͏eM`OĬ(4DPدDfɅWJԡd}HF5G14NıENLx:ʔ # i-$bOqu ,8 ЁZMLXcR&ZC`LL=m[hº-mȏ Hوl%40;GE1SMLU$XOn%ؓl#$cHbf9&pp6DD04考w 4}A1HC~1c]q P(n,F)w,Ht!yg-(QJRhyxV+A/ ɶ¡\u҆9L& AKLI)\H*"(L=D6MӁDEnV܄ܸx} N6ISQ$"M JMQܜ، Cx²XC`C*}քKQ=$y=Dt8(j>H-@цBFy>~KcA`=@{<og*oHTrZs C/G.h܀]L':D9v dlohMCУ=m0l@$`FmXdmnX5\*ꚉDrD >aF/\<Լ֣jM.ER9x -<琉I⤘ DTNLSVxNxR' b'I6EC1L 6NBXY*UhQa"Z!ƟNKT?ؔl' 4aȑXkiD!G^%8(nSf `׼DL=BDo܈p%HVnlQHx X@>p{҆ wX@%hڥ @z7Ng=G xPXd9&|#)<ڧX(o~<ƴŃN[],8ml" +BN HCG2ȅQi<` ~$x*A ő>#x29d, T2OHCg'!M bP&ePЪ[f0$: bp {:+DUHztlD̦- on !"MD~Z`@{Ёw,C=DUD8"CF㯍|Z:q{tbCc.!HXأĚDgCp8mDMİz7[X@K'jL+l w 1BfA4mHHCxCh{P<6L‰ =}u[(ɍ$1JlD)HqŸݸ! J̑fU!JD6m1r\40–`fQ:vSQWZql8Cijz^p ̿,LAda4FIZE+`4mClḰX06>°:nF@r%A ,.l fo@jI\4 ^ H2p*ȦGƒj l:B ! ܳA =!p I,Jv#rZ a VH4 #0$KlR7Bn;Q$8f҅FBx cƒ 3 zrZ{ (PZ \bP<m8>-x:$cQfF!Q ȨCG@mL;=+p+mI:D#> cglnX2Cq w H;(h"(g|B sh1y1t3A" @J@8Y pTW$B7PcO P`_8ijM  YEDb !0e  ^#rZz 0&XO[HnDW-<>Rd}PNӊh$FBR|`WG"9TE u7|CPPHѠy J|DSD®w$P Zu*ED$St $;1Ї>Jz!P/@ C>X੗C 1SPF ; 'G * =)3xÏ 9KERˁHK xИ@=y@!=(z '$K/£ eG nK9GMx-47hHjbgP@P Fʝ-(7K`'DMCF)@1lsݴ93tBOJ#SZK dM)@@X;g$@#1_H&3m؆!!!H- - ċ!z!4EA iW@@?(d@R8a%.1p HPB V >h Dl1BT>K4#aUOj&h&+\,V%\r3m@ A&:4 $@Uߧ(&mK]$U[Пc$dЯ@:" P!)zd(~=ؠ Q8$@Zo7Mɚ :MƉƀbL."]S@Vixfx'H"vZ F8ijV " g A6X 7 l µYBsw&M)(RHo?6ԆIoliNABNAeE! bp Ri2,9}v@1_H⯂ $C*(eTXC @`15PsA E 68ְ.0,$X,fZdd@ïPؐ%]peA>H’vXH,V OCb #P5KJT2pBТ%l᭩Xj"@F(d ~`BE}SSۇ60@ .t@,$$CU2t!g(|Q%AM Pn#*ڜ6 $H;@) ?qxP6-Dq@8 8 No s׎Cy ڰNgh \-EN; ."G']Ot-bD1msG34o'-B=\)ō6hJ)A=DbJ Рg"BvM %4ah  Bڴ6VaB"ˁQX !X $`81 b VRDb&$PH$:K "A 2X`H$VXn*&!, j((*@ +@"B"@|h /(. ~jn E$6Ak0* F@G&NA R!\I |!#N2&4I&P%4Av…rRk0* + b O:BD8j\RZD P D4s R jh~V0h%$В&e $j0OBd8ZtE3Ё(,cfڮt2P5`bd`d6m VAf<`CBD@B$c7=@"E1=ƚ(قD^xAm\TEOɨioI&\B.Am8 @XDlBA\v*`ta1 E݆r:7 $ l4'` NOx0AP"<,ybMD$vAB`rR7`~@D"Bb, f ۨ-d# b6x j_b"jaWw@$|!e0&@VA"`R$2K$-$!2` vP $f8@"+f]o]Cb2$m P [(pn(^Fh&+)"+`@5,{21*:8$,Ȃ>b8a"y+3"E `l0w 4y #. %3$:"jb V +"e8 0)5@*jmA&# Nco)EEJqorGL RCEa1Br$joDaHFjGJ`Q  TEMF ౚÓ3.RiEhn,=$>AI0r[ R4EB:Q\HPli<AAP ` 0yƀJRA`7$+EBPYA $Z JX$܉=$X9$DouPp2$1@/JC}O>R1mGI2$8xon JA)j@&o@pD8n3 \tFDEJFdo ajD# $a}u_Wa` Ґ+@Z aOh JƠl(Ti"VON.1%naF܀ ΀]01X@+L1ⱄfEd3%$K D d;ABXسZ UMK r"郛L..B\aE").hVJ$.!/bwTdNq q`]z 3ʆ #(`8b/^.8U; CB{ RΡ:c1|f|h H~ؒ`L\z AF5v"I)wG D;۹YlCDYE-@Ig4&Dy DjG}T }pݦ,Lm `l&m]Ț7צ6a8 $"F=]!= c1\v]hSђ'etj n Zq5!Za^<}g~2碻*9Y`1K($F T!6%AK &@4;AB .4$HZ DB \$C̏2F㰨+B+w >8 u [)%GBb-K*ִ.6_tmOҘ VE?%6tfwL3 fX B M q8AyOٝ}J/6$qFIHEᑧm.OEN(8s9X$v:Diy:>DcF6@7cj:{A 7Y$S'L(@C)  ֝dHq!۸uь#9a!2b. GUa./vx*7$h @؊~rER!YRv!a'w-M,VY.1BMa1p@R9  x6aI>Yuᰍd0dAe N&UD=3N8DoC ͐ -^@CNNDCh:8J|=* ж],HRi!CjES UUSOmHF$@<U2OSzP*B :XKETG]:uA4OM1ژ4@< /NT )?2"MplPGA Dh+ÈTTgnjf0T ;0D0g6\l—CMD|@-& ,c.L D+8%+)CʬZɒ]НC nyGCI^ Ah̠lF\S y鑤F^]|='DCe (8Q?'u_ -"0-"?ƓMuaپ`w"t 09(Mm}07S t 8A\QAP"@U 9li5`JO" xjlO+E4 a /xe\$QWŠ.oc&򨠘$! ABP*WDCSJWaI2dP IdMT<-"tDࡲF)NACjR `Z8_9X 1$kC`Dd+d$ƀV$Eƃ1 r%9BQ?%I$|[7C5@CB 0 j|D$7fCR ,1\#нюl?HN NpH1'?dH i-*>1&0""ݺ~F :yub0D|kb$ Yp4|6 hNpɩ6m,R 0UԪɟR(C F9?t cʰ*B": L8u.ᚈI~2AB)*@PRHd c 됵AL|I&ΊB\U$<(~B'1YmWbc ѯ,,F,F PXrgdT:/ˏ9#C e!IR>@a+G|a"2-=AtoЄLKCn30.CXl>&A$3d͗σ]`QC7;^nIѭLu dw-9=Yn]#t)n,DKev-)A f3l%-u6 9Ї5Cސgt" ~ HТ  # T u< 9`-0P%`MԙJHW֪hUո*wWUUa$(\V< v+Ci"$ f)+r%Z0V#A@kn*.Q U$,$p'VBa,q*$wC S%@`E>?.BK UZkC P~.;Z77bpnD%dG e ^3QtD1 crtD_\ppP34Ja Q l9)s<7Ձ3~P a`Et%`Ke! 8@ H6 2PSt1gԳ;4dxr!ML'Lud5@aJu1|by;PTzu1%QWBc5@PudEept#T u",3/7=A\As S1 fuAC.eKLY°8u\gY@ sa10IgHGՆI,t@ec0JCx ⵇP]"_t!-;?et " ? {P`u/vtK7aAxׄc  F)Y Zw7Äw*BNup8cS K`DSv2:M1еPM!QY@x1N; GV/Wn!$P!>3ɑ"KI" ?LqK[/C$Q.f.TvV BTnv+[Lqk & @ ?0g$ZW: wˁ1d,K+vVQ)>"Q` d0{D\w-:a ĮCibeH `]kN4 3@1h&J`{$4ptal$!Xmu;N5 }=p~0ePq@0#8' cu@ ?1^-@6^`5X ))3>v%}F^5e ]K}»:@; {W }nDop! ~ Cc_BG _@ 86 Jka3 AFAA$K$CamG  Z䋼PA0B)9m40 ,ہzRQ$  o$Dp@F- r>WBR14LP08m@\OaF;*S#X@N7I>-,sY;(#d1[̵2& ʌ(s8 +в05V5`vBA P0A,!|GT@bK;-RX]CN< D4 jw7S21\H0G(qA>@Lg9${pQ璁8@Y7h0e`X0ŭTw =A?@ax@0 Rݠqb>3MUP}pm0l Ypo@] kPٿqs 8A 06M5ʏ1%Il u 0<S 0;Tm3߸n4ӱd7M ~}ax@%30ey~b $$Nw ]JKk@tk:w)K^K}{Uٽ;&o8e9!"AR"E .)?a!Dz@XrZ`,M_$P "p-n lJPl"P)[>` [ByIyu0ӄp"B -?i X,8HVIlpA "5ZiڊN6P IД:ܖ+@.P9 9s?p@=#᎟BʽA\p^| `A!c-8DH8 QK N! 1b?ȟB'nؼamft(4,n4fA/n&& !+4Q0XO (*#2&2LؗFQq@HM/eKd@s(ԡ;:PX&6n q.V}"\\2BzЃh)  ADR )HC̄!Ʋ,La,uXC. ZעtUd>CQ.]L#m 7gd 9B(1e`yTa CWb, !+W>?]Yx"/-`D $NgY5 +axhdg4ؼ-eS$ ԆBR!xF0b9# 4if5c64S8L-m:t7$rvD)ӊ@ ϴ #pZtxm8C 6ckr2@n4҉f툡5 A nCxë 7pcJ3߀v]A?,Ը.%ed/!IdghC 'x6dF!+L⃬+Mg<5QVaI p[H@5ti*PkHOsA2j0B(Jc1+(3EiMS.h)"gߘ2 $ U&d!4MXl6B blc\{uq/Pvp! 10IQ"cOF3Z*+`sbbm,&HޚW ?ǫ졿?o,DZù!oqЍ܄N*[bFCM.F^| J+'hu܆/cS &ԞhNP*Zb-9H2"H4I:`59_pu O㆐'GH07&D_rܴq60 yadpІ 9j9zlbаטT1|bvq\ihF4җ&kD,0@HǸЀ4XVp9a,A BQ6.Ѫi(#G9{Yh>[KyqA9ؠ9XKK*q5( XR LhZ g Oi7"^gIc9$ 0c™/:@EVҊ*6胅h 0RԚ؉=d$J"Wx$BhCA@w77( 4&  z=p@x''x0'؍5sІA Y;=s؛=p٫0tpɃxr:тI@!_sh6Vb(0H:`Fj"nZX ? bX^hjG8c?? . *aH$Ń`@ڳ_yx Aъd}A:@} B9ځH #C(8@ Rx2ăXx:ME|;Xl$5<;fZ)k&x$;F"A[#<0;軄6$KD)Cė)/:j5@V X ,KY.qx// ڿ=+dBA65A W@1V+!J\ȅbq 8Z6/ 0X_v 1PBL8˃v8Ё8LPc ͈6pWÏ y Z%xP@c$#(dXCa@`xU`D/#  ̜:S68c>*/HFz0h[P.7H!V0~ 55sl@ Q@F8//F<P3mBx#u1F MF3c1mjf*س-@|T8# mH4Xe<ë́ Q릘spTX7/`/Їz/X @Th@~XUK99 WaSB|cY@H8Xp[J@ѹpz^5 A"7Ȫ:@B8Ѕ{;hKZHЙxL@ X-LW<:Q_)WXnKA[bd`I;O68J @P tIçaā2 8\P:PŻ؜q9ؖKDز$9g,H3xk0]R];@ 9ZZ 0(j[?qѠ)U>6\ pbq)==;0fʅYt |:ytFә=cj: he`-&Pډ&(hT@TSBp/`<֐V,^m~ $%` F胀)ԃK+?,ax M"TK_Ȃkn+O_0cXGM6PL=OnmJP#vxlCPE}:1hW1+>( 1ڄř'9*%iь>ăBKKZtI&ߕIbXP"nSzWN+  3<X +# g NZT/j~0jQ  m0W,[b| K8iմjn ljP[7[0 R8(bH+}R8])r*F8#$)Qӂ!&1P(>i(訝y,)sxVw$< Hf!3ePg,WMmngTm>8(VH0,9x_6.a˖ ieiKBXԣ"s5::Y+R6PЄOH%N58A+[* 6"3P0 ؘE 6 %3T8S  ԅ:ILty ˟gM :0gxnBl 1sv鱀2'j_Pʟl>T.c(Ь:0,0h[H`ciWK;QLxVhO^oxj S"$C5ԅuPdFvSMdGrcn uH$K٬ȃGqUUM˽Z0@wį8pPTez-\:mX\ b0Ps8D$10 H[h5gr~8y,[7K1kp Zf;8@ X6߄`H7Dogi$:3B4HjE$V+.@a.8v-S&撀PFS p(pGJPx 7h!p!ÆB(񡃆{ࢾ֣38r_N(`7!'-( .`:,5T]B+#Q%c(xS N? acp}#Л+(6 3uRF m7K %u-) :*Cd᪅ؒߚvA j(J (Pp{bs^* d @V]("FBV@,hA[, b +x'(u a5{†G"vhK Gh-Wt!Bܣ(?6?iP7a- E5, 7&L&S:"*d#IGGK)%lc*C46E4DB0%KG0,pB0Aǒ !%)4,l+bҐ0OÐ=`:LOv1ɧ641 btЧ"J2D}H*5BK+7 mp)D!V y!M%GM/yQnt6 ɩ-@P%'tAv$` BbF%r"%̱ <(U}`@Cd 'gc`Y'3Fl !3O s /j$]b 9KKeaeKNBM&@^Y7"(qKЊ c&o k+6\* S6ؠ* + 9)JCN [ -Xd eLfq@m"'!F4mFG1,!󽎤'}6 pCQ(xHN#9`r-q$;@(MNRĩQБ[hm·E&[*(ŷp_ B7?U@rh )!$ ;VcVi72D!KB -5@ UiB*5`2#28aVeHE8sz!1PTiUra \b0 ĭ4Z<NISૅ%JIB"Π]sp e0cr2uIMrIf\a4- ~W3@q 299((?7,)op@ΐ6d C JAk82B RQ\DhB ChLK*ۡ B np@?A3-TA*A*K/ @BȋXBМer)DCL B>`0CBX1A*CW+䄀my"(B1 7Nƒ)a |f)g=eX7/A'ݒ?h/, h72pͮ 1Axʹ0dT1B/{PLzNS,Bq<0t$ݞ6L̞q0h"?(̟ZDD&P0 !-$5h5H-\ȁ5d-P^DA`h~IE4BԖIB eUEDPCLCDC ,0Ę!BUb,ԟ5댂u:DCBe}.t:qHbRCCIJIkC8%2DNH궸&HJxSH@*qN\(Ssq'!XILCB%8\7|:EwLbh+BX2qQpQl՝ 0+6l-$CkE)ygle(D,6 ?\5  yX+p ,s̍2܊8%hB$Aga@h.?0.d>@92ОB0< 2f9̊U1) ȳ ?hiD( Z@IIImH VmlH:FU5KC FhQRBꡰ*IW@mԋBBɲ}tD.8`0 Ci=$jC)Ձ`qtBC BN*Aq),0DKKZTI_IնtiD]>!Qxa]K.&P D&C{.X5BB!Q A=HEݲdAA)EWȾD8 .*7DF1D1 ,),C\BB L a܌~ŀ=d8@8Tn(k聮bGBl4LB @$ ,#>.D/.7 zȆ-*(C')Bܢ0 , 8@0T`*tA!|-G O(@(`FߦI Ȑ$ SaPhVKJF `GlDNdFXCG1܄w(BWDZyp{mC6p<Pӥ1-#Lؚ<*SXD$IF! 0TC L28@DOL ^GskjhH0dB=M_MotgBln'9%KC`L(DgB7$$2B4CBg9МzR@uv-<-d2O'Q + E=SP)}6삙CM1X`t70QR%$I޼~P{Af׆kSxí,10;;G L|U(;^ p76C\*4qH?<$K|7}kB13! _X0`( ɿVK}Pd%%CB8@84\-^:}@/ X/gND.DX@4:e tW ʩ(:4cw&#Ią6D69İD:78 CxSA7Bc$K*T.@¨sL}4CN]12T/a;D#%^-)+DsC)qdCWPCPg̾~?4i@@`"՝<.$^((WY|5]A޿7 9@XK5`ˆ'v 1  7,]1'Ind-/I r.a*Sb<NVbi6㦉 IpnbP`o-Bdɭ>k`@M)pInphM(5-fIJ3%+Pಖ f3ɮ7HkcNV 6xpe8c;O0 @X(u` @I[Iy$3W}{kN ߶2 HbP7c8#ͽb #Z3NųNK$0+)r$h%yCrZX` a$IB\$Y?,#@ȁ0HG G Q:% 06$&';֞9?WN1O8;0k 9 6te!O27N&0P$#,!HVorQ?@ٓ:9g >)0t%0Ra 9I$nXB !e8]q%P{4*73E382 R29!nz 9iCx,dzI--'qF,9868nr$Z< $z:Ƙ%N8a>`LW>"D>IDc0v` ?0Np7#z'eTC+$x^21`"^D+Je!84ESY XC"sPTX10dQ[XFS(3|$V9ࡩKa$-;0pr|D$>Dp'ظA(8cMhb)) Sm##r)F7N"YgҰ%,a [IHbաu9Ld!~h1F8^@|PGҕ $ }i:uP`@>P)@v47aH,I` MnbVUzߠ_v`Q*I 5Gx@?61(㲰NNH7Xn%vHBlq)<8k[-d T(u  ?w>_i9t@D8G+ΎP: J$ :b9<=L70P4qraefg}!CPS'I͓$]h]ԓmiIqA'[yġD>CJy?PJuPkMyȣ$5[8>:]|!h # 8<6ԋ38}II. tW1 )8W  ~J!cpmNuA n j5!LdN`Op [\! UVt *R@);4)4Pנ`FE,ހrB $!ިF$az d+GT jPtbTpSp! 0 q|?Fℂ@  bh6c Xfi$,v@c-3ȠrXd i/\!,+gpcFi`1h.3tN6%b @pP"6Ʈ=.PM& `,p$4! NE(bcIF(,Σ55#$,@(lloXPBNbHbCN@)HI nMHFԃ> %x x/M8-́|yi!!|Aw@vfy0rp`Ҽ#:HAL 5ڞXJ1`HB,A'H ~DTLS&%Ԗg|cyl.SE~>H'$B.Z%7g.*OTj0`NZg nKC%@S^Ae^Zb o,~`H4q`d@Yb8t )&HrR Pk & * 63Hh(eD $GHdP"lcHQ(tCl 3t9$X>0 "L(*.=$P<Q(` A `c?# #!"Uc M8qH 6VC'Ya:j &;d]#:$am! zhFN}z$RL(zH^KI_־䃂%8Rn 'Q2C]Ċ(D$PR,a((,E.H@T?T p"'0KSaРRZaURP@$K{$N΁`4`̂.u.{6 $E+H A$|⊢+`da`7X`N+!v"7OB9W edl2,! ʮ4"7Ff%`Bp q j% Nb^IH@}p@H™6U(-R އK d$Cbq=~%f=AJQb{o0c$@e c ,YF% Sգn NHR,szhm?!^L cVAZ8#Ihj $X68#Ѽ+` ;X S-dJ@ކ$?FETHPb~Dq~ KTPA8>vB`2'F@OA0 ,LQad$r@Xh8x%bK(|P(aP$b (*b1>H6?`Hb Cp}O⻈d-bA>>"f8E\.\[d~R@ h.3@n]9g|+Nh*%Q-O9Q6lme,aX' >c/bs$@$ʠ @ld4sfmúcĠ\Zgf 5!XABQBvf slCʡ!FfA%rI %4;Q;@#fHY$" %o3bGD<P>Ad *?hT LQ K,?5ER_RS*E>'{b9`IDTH z8z'iRQ @dzz.IY., @eThN Hb}%15a 7jHBhQ,m`HC`@je ,/R;0;_lU(U(7l^$j S`3@`BI4)P6O"a(J_+;9 n6ozA=6ףmT?Nb>lmc (JbحhmAbFfe&!Xʖ%&!rE1$8RHc Mpc 4$j0L|&vL;v`Ph/WHtQ$$.!vmA/{m K1NsIH^R \hV K{D@$ A|&>Fٵ#n^$:e$$d`h} IBBWh]ranVV`5N& nl(77a IA6¤LO`+^:e„Qfp1Hb@7`hnfx=m @x)L5pjG<޳5$!i,K4gI"k!&C$؎,3ZQb@)59e,G8 8`kdb6:`>+0PuJjGR`%i-NN .2,UpT@'J{,abS3omT8$"@#vi@RlB @?*!hD$@L.@SW$. vT9.GpPn ([_ H`(H"x! PO@9cE X!pnp\c1ƐY5S b/%+<$$v`/!4j@ $,x7H p3cNcΧC(3t5"f%\=ڞPp=Qbg%"WBk <;p=XA&\na"n+"$BUQH8P ` lɣ$v?| ս` 0mIb>36RvN${Ny&` gwH>!n$8bu+r'0+wN F lA~F%0'>e؛:3*LIn`X 2 Ѐ`bQv> .P|/$T! 6Q< b'.V˲Id  X%#d@E9j`m5Y+ep&Wg UZ$⨚MH=B< nPAT S Chå $Ոg`ܩSQC}`DS)j$HHhEt_ T FDTTtQ/@@ԡ&0ɃұnD$Jw7k"*00@$oHV$}PUSM TPF@k@Gy]Q1\-'t!E_ 21 s ~qRS 2u 0aLI Ad@s@Tg+P}sqFdd̥`1`LQƬ *B\)Z QC Yr@pfL3L70 $ahS\?>2QqJC1u3TA)9$JVuDN YEns͉DhTT{Xs[ GXs0)dl 'Vv=P0֨QСs`28>)HI Z i 1!_XDo|@%Ov@LX-߄9T.ӴU Q>쉁L p'PA Ո'Gma.BDgXK,1m,BeTw_]J%2$a[4|];%T8( p0(Tb+>jD 0GD 1`@CHCt)jXU FRqXbHBVPL$}Hf \$b% η- ?np0e(E A0) P0"K(n ,Bĺ 9!XXЯ^@.3m, *P'1@C@b k<"GبMlf \B@f`]撰@`h"T 4>J s>| 8A=!Db) ,Ι"@1D$S"N75,hnHQ ܂tKovA0aAODd^@$%8rѰl5D5EEEK^:)u8TWADHPY4!:i*hEϬ5AЁ_а KЀ&,%9E}o<АV0V~&Ps F-cLQ|1T4$TlڧV<jA\2`+.1PKV)c<R9ATm BE$"ؑ'R\GӝR ÞC>$ndtD. bHjR)`’(CQ>4  BPa'>[tRt;ǘu]7Q5bqp9*B/!H(Py!K`*(iA !QKO" `VbUeQ*UKLĩ囁Lc%UXC:8(/tEX?#rlQ'c@ YA%kTC[жT@[0  'sRD-G8 .n\DDP1 C" B !3mDF G @?0=q q!Y!]p \@g`h4y 8#19! 5ܡ7c]?7vqFsJPX"5P]/< Q 7P1!A#ivm> m6pG"ywyF g M3 PQ]KN` QPRO#5Q ZP#r PE . K u p yQg=0+ uF9;fʰhW6PS I@ `pi' )0*@}kk? F oP+ sB+"6VP+2E+% XTh cX %.4~T [.܂ .>IԂCA0fO4}`7vY4 I  i@[N0.  :Cy0!&`AZ1Q֠~0 L04? IrHPq%x^qK&c1ܠ"*Uxyc<8#1 EP5QzNa1ww[NxȧPʹqa%C3#e/wOkba z.u.VxPHHsQ_`њyh@3@%̓'[1 1  C g !R7E@AU 'd>794*E}%lbe>% u)'OziP`ksOjL#CzÑ_5&$@ ]  0,UiF'E@[$ v$ i00V/(Ke )0ˆF d )>SģF@YxBW?ԀfA "0C0P 0u:iz-` FQNEAFCq #v  Iå7 0cFS ꪁ@a]1W[@$GFB /P(U[@rm@ "*Pau .9,0A RӮ(': 8d0QdÜ-"M(e!u61pa78 ! N{}q: XE-BPs?2`P@t`_ 8apbrn8Z1 '(Gʷ0 )D ?@E+BIP _Bccq ,p,*opT'iRr`h` &AkއvɶXjE B* &0,ж;%QBC~; %΀{b7`7UEлpoE$ ED>€ 's((04ub1 $ /.0ЪK@ d85&,]P,p y1rH^QM?s/ Tl_z2)Pq%5,@ tv4hUBQQ`Pxg4l` Ipjf'|X74Q5 Da]N+˄.w<J*QdA3 Uqik`n =RPAaLa UJd pl `R&H]`Pau @'ȰT !,YI58*FjQɢb] p (T? *)\T@Y)}c0(('q p'pu = ֲ`pD?AaP d;̔* o l`Y섗@$7|JvLE   eĚ3I3]p΁WRS`!tE|Jt'r2MӑP7JUP52 @i&c3k4*!b6/_ 5Nhc7r}Rtay-Q0aV8sQ}p!{NQ-삣aa \Y,!CπU0pFaEQp $pY0 a@`f Up{jF m Glsk@Ai'b) 8 )4V*9qXs2,P1}Pk)r@  b0 j  =.ڑP#0 9E ' rDeU!YMql=0P .(C XwE ozc)B!B@Rh# VY'nmlnB*yP·HuV=qtO% 'X8"L9H8(p{k BB91zDJH& OZ ^LX,J -@%xOX3&ʊH Qb߶&有ޘ !ؙj Vc\G,K8iޚRVTpX4޲Mv#Ha6 X烎s&hSȃ(a M$m[0!9䨕9KWSnѷDe5# H"Q.^$7 tÀ63!j Dx ڒ* 4a wihExJ17-'ƕTp !!38rMzx˖M v!!Ad7|f"E\ WT)`!@sC G80jYCʷ 4`cn"- +<Ђ F7rxCz00)cI  `X-h8RDWTaq0ƪ0t'Ip@\ mK@ N!.hHDQxH J "6q6@8pv6 z2d DAqNW;չ34kd5y@r3Aҫ$ 1_"r@2"Md0$IMT%4{Tfo"^sP3֠%uFU9@2Ar7#H~rE2H`ԁEQgl䀑0@ cAU`Q+:040|4x *#!JVdH"E]*qVD<+sя$ZqbP[ b:a'h]a0}* g c"Dpq%x# X)P5-pAAEEpĕ$X^N## J&9ڠ;P% :|"C+*e)1  `DG&M?&`4Ȃ g688$d=HA2yуZ'r{pa(d\H.WRL.N9'GӁc4@9ˁF}b1ILtpяX<:' B$%3D;SPRMDF3$|3N :H<@` S\1J!(Ghr L8!M9 %QlCHҟ$[\կi a 6@`T}i20C[DZVEt՞+; NQ= 0 NR ^HQ}[ q| '6xH ɔNP"J;c#-l݆-f J*߲(t5Xq.A ,`!0p&(XrIJ%#fqcx]B*$0FNh1ڎLՒ^ ܓ\"os8zCߌ DPN>8 &xQ:; `$,WqEZ70oQhA gװlԅߺT& Pσd>Z!A |x@ "% hHw9t0EAb< [oAx@ (X+K,`WفZ8`hpW#q#hKpOH+Vy!8phsJy …%xÈ7)tB8&H5:#9 i#5IhC25ia8#PWYH=/(زS,/8AZ:K5;hȺ1ݹ:J pq(;=%&騦ɉțڹ9i`<[X93)?FCYx ع(҉;iz`K<(nph(O(}؛_ЅY9AK1yX7q3UE@mFPzQZ @kZHrB 9 P)PhZh 0Nxcw9X 6ip 8.S #xNP  z}BB#8*(Dgʷ?z#i``_\L4MnțQW q(FE`/ȅ\xxƪiKYFm;[1> 4J(iZ`P Nά;x(#x ~;d:C`40xyzJͼ2 )[8`16NƸJ;tZGvķ9E!Qǣؽ"!JI8xjH3B 8i85ƐȔHxT:QpIpH[C;B8 C#8 ɚZ9@6XC aUQP!`Hԏؔ T h3Ȝ3)6KB5jL*(^녓:)tDW=VLHz(7 7cDkHmMЇTȇ5ȁ(]Ґ.1.x306=RT| fEZ26S{"0cPEn؝=0~XK9`T8x ?@c\ɜӧ dWÑX#Xq? YH(ك*׉:Q = *&3@ H+S#9@] 3𰀰P<$Y9=[I <y |:xз8'##X A9nTW`XAWIWꠓ+vٜ39х>\/J9 8>4 sJ1 0hw Bf%h Q 8ܷLVe527ᆈmhmb֝o鐃T1!: $PIT JB^Ӻ_)$:x^ef ۅ} h-#R`\Hy R6C92DRrB*V`*y8S8)=,&#mȰ\@ Ύr=8#WӁ׌ لsD{bKܙ4!{u@ƉpXƃP^W= :I (@ٷ 7x-ݑr}(ꈥ["N`y 謑il_gXL{AcCKE pV:X& F[ X(ғ rRF9{Xh*7Qr]9xq6x)hxʙ5DWq JUz#A*:D x( f5nN  8rBy<3yxa 8BX0 2PАIX!d)1A<Ar9փhHm&iQDi訚sXYp̃z i`fKnN0OsƭȆ8)+ZxMЇebO+O 7ΰŷ@KW~`.l &WЅT(8 p 3H /Ҿpir+D*8 h 8mA9@ּ@mTR 鮡1!SO(07"pN8nn-ٞǠ7hug@<@9WpUZ\x&z:H85qԗ{Ap8av݃ZpI@]p+Z;{n<sImT޸YMV 92B.d)( T2\6tل"Nk@HVoEmK1m(gڑ"`; `؁9``S 2OxVA-6ݐWp9hZk680YWu4mi9GW,uhsX8ZpFL_<{Xx΁*0;觎y Y0_p+Zmo ;/=a`@ Hb0K7u괡@@Nx1|#U+x@7sUǘV߾͹`F5h ȹdkPZU6l0X 7(J :Ϟ< U*D$_t`ǥ/T@@doޠ+5A.%2o^<α};c߃;i'xm#Ī 6Uð`0`qp"ǀ!7 "d%epE@@,ah`wϟO=PRATp07P_ՇA4alxQ$-Gԕ4-'W8g)cЏ4P_6b6PE"A+!"wd"CP,m@,dnB-34g!#{Dh`e 2hY!$ R3AU/SP$V`ArFp ÑA$AO>#ڲ@>a@0R-Y1HD"$P%/+Џ%ATTL`0dP]@>MIXH+h1:PN9tWV=pMeF+v#  …( K"i"Շ+Fb1'28 oH (h  sP< uL ٝ2XoNkk ߶FcM d"AhЇ J>Xig࠹AwA8g0E KA;xY]BhDP|)Z6Iv5[P 0nG z%]y1rާh$Vogm?`) 6QqAAݩ>0H4!c ^8A?,xAHThU`ş VNi%Shj@P 8'NDH0 De@! BFO|" P%>"~pPX~&zPHao"VH[71P;@E7^/@z#*&m:1='C1]pF.nc -P t_$ *cd4_`N`*t1r`ټV`1 rN``*0Qp'!eU?dĉCt IAP"QnqA8AQ>89h휄, : \Z??=ځKhW"&HQAW$3LICGwXe)CL ( *=pH XA(ȡ\h! BylP>  f5p@Ú:*p#XCы0!9@- Г#`0Og 2 Xdp P$%le~#ѣ1 e%61nvCņѯ.݌#LXA =( O*d QΔ/bRCn#h&$n XV ^ Y *t ,WD e,-tG7y+G> (' a`-|n`![@EFe 0 *#[L^_" l>.c!TQ:X vX֬0TF/$o-KY΂0{un 'b8z |V.1 `Pb,a R"h#A sZD Zh4{S< 7ְ VTlq$dm` oh@4f4؂EЇ-`H]5Q!Wڒ@*zjЃ:>ܵ }- EZɺAZ:<QM0~ pX\Q\~ANAA&X,șD57p}]a{T阉{GKY9QΙ[T߄\P=\P}6p_YtI+.LX*@@P J\$7Mi4 9d:%E)R6KPQX&[ͩY&I 7Y4A ~XA,y 0  8Rv8A &0PIPtA@DX^-Pa %H"g*݈rD9Ah(0-`A0Trý%1Q%8 TIPP+dAK$Ev[hR[kXY|@FDt1<^ ]@C/[$:4P19C1]dR_dV-(ˆ@L}hxh:V̀8C,Kp ݭ\shM9QY<  $@m95>hu>|HAПL&ZcDHcTO@QJ|OXuՇh(S `a҇,"B|u ~CinN> _7AEͩGoDIϝ b~|F7L -0iD} "h-Pgՙ\df*ZIy`COU4V%,~iPAn_A4hn7=#%Qp9>%p@ "An#[I%a%XCOQ5ԉW&%<+G.,[jD !/4FPLA%Ghp_"p1O hGg:5Vg2& h7m)D+AܡA`0לAİpiK]3f>U}bF+XZ@ AZGiHv"L_2X@ ,L1:G'!6|‹вEgT$;Ɉ (G@PB[W:C?BAp5vLJx /La@ t߬I?jG-P%K3pL}pD84&DŽ>, ԟG Xc%RTR>I< *dA m P+ ܮq ~){sYlsT@pWt sy0I %:IgH} 1 D؃a/NIO+DW*1fٝL/T-h+ xS'N>9  4ȟف!XC,ZdoEX6cOߜ,^Cd #$A C5(o4!rp@g<R(ƿGt!X"QKHC0`@AZ V 69UAc3|-XXsuSg$i8,:}h $ a +Opͥ9 lSTС֌haK2NpC=|N$1f*,hYp `\A"9l `.>"z)<3n^ah E @P5kwG{9=ι@-ۙ#P{N63.@ka8Rr2z-A9Rv33nRq!cCY\`v`cv #Z={qeRئ dFD!X@J \R7n#fڠDIfGٲW|Jڨ0n~tQ r:f`XHx 8x:Khoyr(0 A@Bet[E X">uKR9Y[,099h 6=@ xo6`0&6tzzXYCG"& )Gj` 6zHI0Х:tLa@CxK6)ϽҲC [I7;1#vF;q=R;M pG :BMiW6~|H>&NC@" 0@wC}BZR 2ܦ6eiØ:B+2sv#.(ԓNqm·ҾKe'z9F$(JASnRd 1laY|"HA D?:S@RP/@hCB|e P6 6 K:S'TP 4Q@n(:f#KF`$$ @(Xy D5 H!WB%Y EpKD+  󄲞A! $[07ހHodNz}C Hn`(HEbU; !{ŀ ǹ@* ;&!R08򨦰D-seZzqX{@ H* VKC` oxPH)@ 桨+I gGpxC6usФpM4%MP7PCic ka@&' 'r;v4Ii|ѹqw?lhM `:&=DOՋp7 ^u;ы}1p g|eo{0F6rKܹ>$ ~)Pj3W(8đrDZ a_6@cY$7IeƑc$FpS)H@Pc!QvbO/ֲf҇(,r˫5gxG H!vWoAw9E=cЭ7$c <ثtA.^ "Ŧ H0 $8@b"(#[P$M@ |WB҆g!  t \aWe%}H+P,8DzxQ#[L֋0|#Z 2BhD 8A{#ty]%-&q l.]Tc}a:hʂ! (8[GCk NV c{%BA(\ ,,)h-@yDz/pUL: dČ#鯛 6Qoy2NFS"*>C,Z/c3b , 2$V$8K8O bFuDѭ&LVr\x,]`AbtNݜ] V!FNc/94F7>4[(y|H╕i!u0g2VL$8ȵ!XM 3" 0HE}|3x0pkH#J[L• q^Sc=/\I Z5"C 9]`fLE bXrUՅ|@ \6|D0_&q b5Z R(`4Gű.q1!N/2k8G:i&-FlaY ,m D;#m'7M/<rv!c7؈M `ؤ*X 8XPjޠ |&(>J{2G}G^p9h;~`9D/DlJ:m 8:hoTFcblM/(@>k.:Cn , h3!g@htaN, 0d @B%Z0 XiaD$@zg@"rre  FA6a栏"XB!"\\o!\ t!&j!`d(\)$x` _ P' J& + ,dPO"* B Z tranoH t.K3N!lX' ޥz0hNVc"mtcfpp@q9@- ~v:PM8v@~ pM`HCA;<'p*J^F5fmfdemVxޘ8ԧE#k{E JZcd@--A9t! 0~`ڠjsI6AM`,|!VtB6uCP#+``5C8:QQRAI* !1RrjH (t` " Ġ ր#%!a 1.XAS lR64`D|) \W 6 )ǽ "Bȥ 'B%q> x&&`Jt(n@"@! A$v#ޤha*bR7b "~(nVa" W0@RB Ar`)b|!`dzU!ax& 8i( a fm<j'*"(>$DPAP/M7cԢ.""TX5rR69uBN#,u\RY$S7R;!S  󩾣sc=tB{5M#< Ype#9B@ԘEsn_ Ut8@G6R BaMD\ʃ,! #fU XH!, *n0 VրXWT H@!T$iV 2iVgFlB1xtAkᇜAD/!E{N>[Li0aEC[Af ZNFb@tfS`,bZB@Al!@c!f`StV B/.![ ]¬eX b 舁DR d̄ pS l΢$2Ot@dE N`jo M6H ~" J84Oے>D/XuP.#g9VKv;9`CJ7W(b7U/׈ײ[w|g[I< wACUm!ZΧ4"fA<`!="8^P`G.O \Dt> V7ps,"\!ʃ+8dfaPnJHL deb^^c̬ bzb!jWa @n/x~ 0d%%Wlr%@, O<쇻g B!BN6"<  0'!\%0tRA&@e^~|%!zb[[@!W`&gBbb&&"/8&K D . b0|j\ n`."TajI941:N}a:mB"[!R'0 . ( M!W7R!鋈Je8f) |@ &@3M]A$aA UxVvr/F3/B\kA2,"3ZbBL2aZu4DM8U m;}7vbq$1fe4{Lf9PH:9vrG L [#x @"w  @ 8sRt#/8`A`8`M),4y𠴃pp JJSȑ#F`SIaF6vD@`[8qF6ju#u 0ilĆTI ,+  " D ox-$&'Y I& "@'@A{,OA"7ߚS`1+,͜oj1/}j:F.'ˆ <C1`Ja`LaC"D.b`|6L.1 $@}$7#[k@,6pofB,Qi0ʅL:H`"/ 9334 )F?!Hȥ ]LG`Z6! @UU8{$Pp0PP8eʊ!:#O8 jO O)!i4 d@ _3qƫPiu]b g$ 6[A$0 5 @+ptk2RwFNl*N ({K6<)"B(()Q3@ePQ"~H5D @򄨎c! Knܣ J +` &bJz` (8H6q) BBQ@ r=eJ#ѣ@pD?KHsKAZi@'ZcLL >#(E GqBn"KA rĉNѩ _@ Q[ A2-טm嘄 4 $`0wHސ $&x HH4 (Eиo O@?VH5gTE $'t$@09@m#NOvL !A( ' {8n x[Nͤ)B*5-q6)@ f l-,"o#X &4v}+r'DDlSXiR/Ll.:<8RZ#{Peeʃ#$πÃO?IbDv "Je{dËZ s,$ ((#Q4kl!!3t`ރPZ +u b^>,NѤqj8I2,5>AmQeDEM%rX;DAz6aB(Mk_H^k^'M3ƫ ߰5ia od5eH6eBPsi D7rz")B~or0< G%/CMؐa;v( 3 q< N1ê@uޅTTw@B9cԁ@Z&WHr0-]YU1X8!}EA9@  4ʪ03 w akE217,aG?66 e3A~($ {J{6,`7ģ@ Hҙ A,gz P)0z/SY7AB8$&9Hw  PrgH&g277+Ld tJf=!$[KDʊՑc\m'@@Rā"D<J Z+mh>x9@=0LLX_bX 0=RRN y.f 4P% ]7 n `JPbDUŁ $:1qS 2 ss0lN 5a^0 U@3B'u "8!"݆ PXZZ@W"0nwm"u(,4qq1)2 "?'1;G%s(Ls^)Q Us_2P%te\)r) \E27s,PFܵ("e ",r*#,)C*&WDUr(Sh 6awj!2'APkwPWGQ@uZnQx9cKu$ 'L0'p(k4Y@ VaP%PI!]P ͒Ilb%PNt$R0 bf  A|[+ 5AlPW}gp G`3#pU Y0&R o ;} 4S7i ۱tcbP.B3[a ϰ; @#! P $]PAr3 . PaU3`^POQ4$^A4u#"v8Z݄>UvZ` s B{}g1G^)BT)*))0GZ830G?p)!Y&u4(@*0[nqs((9Y4( ]fFU)湉)q te+.2kar3a ?P #w/yv.q~[14 }gvbCF.Cm 1{ \1.Z(6-:TD8 GM1srP5D#SԔ&,Mlb b?Y o@ B3!  0 @>q 2 Pe !ihRi8}f,ijGm[wy9|Bu֓!b"v0 `'yo`U 2 P5`@`'9@ K>u }p b@ Y8t j5,p @gpdr lɖl#}@[8F0 @;0IdI%`"%Z C`|Hp/Qc m (Px0BH6A * 8ک(Fid]H sC?@t&B^BC*wB ;? 7[ 0Gyu"(* @'8  J 6 fw8P3#*62I ۊ@p P5u|ʓp~@ aeA%PaP lryq6or6CBe2`{Psg8 h 2՞QPip(4QfA9s`  ! O!QxkIYP YT @K ;#Q c0"9Ui .0N@ P$q l 05qlk`TY:a 0 D;5` ,]Q)".-62Cs'zW0-B7D[pIl˱,(s}1PAr 1p"3:4xӜuČ@@)H`GA%BQel, 4ސq W Ȁ u ap"0#\06CS65L 0)R Gl D0D`V{=P. I5՞3io 0%yg<=e95"! TDmDz p%vpMpM'TuaX9%=ÖqJm}'Y  r=' € ,@>x).A"pore[31@ʟ[)`0۱ 0L2/h -9cq/sJ&2=4/I*kϲ(#D+0R)j R(=pF 2L'˙723aGbP{ʡnLHb3Wźph[G0nh.91-r0~"K2/Cok!"p)a?%=*K$2GUMo` z 5ZO'>.p ` 0 p `VQ M$apIsPPQ;AaN1Óu. .'@Q`pQ"c !``GK!fSpX!VQ 0- `eqd4vv@p5pL6h >'b!^`D\eQ nVaZ} "<.ق8o += Dnzg( 0 `T(~@L5iNY' ў? Mgz< m R S pDy}ٚ=#A|43$phAJc,j%%3BhWoG,X=MbR*;wZ9D:?X9,g 厮4 @ġ !ڊz=, ΐ+ 4G Ǜ^zY&5S^ @o H~Ƞ Z#@ȉP Q"p"H{ +%",Re@olEo,1f#92~S(;&&Nc,QEKHr|' #?(F@S8F8Fʩb`/nBX!'' 2:@  o( i>ڈ/>J ;PCx#,}"O:H!qĉe!`L` RAA$=bʹ0p,@z k ($VNZаȖ,*(u,o`.#ŢA >MBX (hc5Y1]We묓R"t(Nda5:J"`e8+E9,Q.[Dz(86bk& 9.n=[6˘=" KLț0$ ^yP{ *pQ&,4Hlqf'(̔Bx(H բ{H )UXygV9VZ2i+KT1`M)V&`d."ok dX e:BQ89Q<@"@`D)A"^jG$(kX `hV m-ps(4 e1*,d!Q@EF-"3\a`CXO0&&-o"d@\ "M:(#cZ}NqHGPcɡs5 1e`ʜY΄ʛb*  rqL,?`\'d+~Hs¾T+1iRpo[D42)F\AR0х`[eyWUP& oxCtvÁh9"("g" eDOz@ Gaū!"f{jh c"U 'Lg op+Zky1EgLP[ 90h ,B'A 8 c Z4Ep+QUʠEN5<( $Zr0z i@ppSO"K8^u$4PiY $b VVҞp@ :d"i&Yc$MD`Y%24H ';A ) В-8 {e4; ABY 1l1 ԡD+uch,(rOć%@n$TBy{I : x2[7q1 L>7 P<'QW,'kk*0eL^m{4>>lf^$3H,K = iA&mL DPΫad/R `ARbkƁ+q1yQL'f%$>Rq2?y-!`9 {)(JHN {x"E Ļ[9@9l9jb;0ɱ߰cT 60 2+2#: ]Kb).{["l(B!xw `.!^ !(y@H:X=qo+Y4dQ̫rˬ$`2v @&kMXہ яcD WkEz6؆Ո=`1`KNU +rƀEȀp:V ƜF9H@Fy(c 3) x< d,"X c=z${(&WǞyd`n0hfȬ1RHkɉ< "+~8CyX9xW b"^)ˌX?; U)'^P?`qQH4wȇ:Q:k)K9 IЪc XD9 0H6F(!!rRu)X#)|#`.|=L@ 8o+8rX1xG),/HY1I0%1$ 5`rȫ5HI)cQUL0p&ӏKap!K6 JX h T쇟d)V XH,zO?Z 1P5eW$})4(.c0XSrI9uAFP P $,K T%ǃ!98= ȧ-5ZD 8ъy`:;,Ɂ ^ :89*g|_=8Hy=b -&p" tkQPJLHWQ|`p8ȵB+ ;#Hc 2,O f)6:2}8aġuXv)@UESe0|#͝`ČL6+ҝ=2ȁ:oF=9;jX2^H f$W Y؄rdo u<{qh*0YXmc: 3ƉP$W%`9[ƾ[HXd8[,PP/%e!X >'('0ڈ NJF׸M؃(}sz { tԇR¹P,!澰c8-T4m6X5PңxW%#g=3; %`\ ^q/'q0AM@tSp8w?!@ȇ"tR! W9H HٯpW8V`1͞UBx(b"w\Z]$h}Q? ,|h8|8c*)!9)Ær]4H(3a-+I Q76,fRY| JM-xH#a4X(0x= )u@ ~= [O.e@ʝyȀf6hM<}<#Hܘ6`Y ȱ2c0\LP[ 5UKȘd tdf:lƼnh!Y|X 1=[ȅ89xE  H_̊Jہ:h > 'T\N qjh@i E$$ؾ$4 ąjk DP4tS1'لЂT9UtaWj܅Go]@ݾ'QJaaPW莈hjlha(cɽR o ^ Pƅ*ۭaЅr{Zڀ2TɈXp.Sh`0`!tT&KS`0#(+qF:J]1VnGMQ2P" pH, \tVo@ڎ?r 9G pzL=Y'ik OЏ-X= g=vp60K)B΁zK'18vfKVB0c 6( _HP%23hd| cpЀ0X1Uqߺj- &k(+BDy5`> 1Dhoh7h("ֵBH{)R V䁀PX(F$w)H!YI)&ߒ/^ٛ5p`~6Zbշ,0*1 >Qx7 T- qjFDk\0kC^DWl* ґK搌%F~#&QJ4)H@Yg8l#K, D{t CW`7>| N8b6$-Ֆ%`A&B@p@ t IYIN bZ)P״Rw uGZ`;jEd @و^KZ-Gko| cܦM MTBpm@QU H  x3EUGG}V3$F+ $AoR 6SG$҅D a $$ 4; i@#  0 ]@>] R>}Y P3Cuq@ !gn)$RJ:#:@ E,IDNEBK(Ȑ;FZ -pKTɝu1;[-y3#(06ڰ #LEr%qB2ZP6MP`32/9Jcw3p>^1Z!ĕ`Ipohi RhB$6Br%(UEDM`@80jbA:( Z%P/>BÒqSta!r@ #U#208nQ@z*|Pp ʈrOt@Cn `PLKz "G)F$ 1 $b7! Z $a2I0 ` tpC-Dmݣb`;iA2IbPFZ,is0%$LH9 PA'IKtCᐥa[ fQ†#t6G1%M4;m9+"8’pd^` ##+jK vc>3֡p!0_,3&)  *B"lMm6AQ%)UGH "+\FDU}KaX!r,0 A@ 55YH`$^%w![(EiB>j JJQ)$`ʇ]:F0@SF ZHsWB@-PTDJ(敷E,U+w$@ I(D.g50 4(%rG@CxZñ*r,~`3Z#%DmLoEF.^Ár7DH5.S`ONT2MgbʑI"=aRI$rɈ8iu} GF DTt`,;$$rwbbb]URfF!I(Mt%ӑt`N+aC 32G7tn''ljUx[ $JgHR6%>$<9;%<@5 !ZlP#7"&S?Sxcy m26́ DUN0b8]p Kx%%(-Œw LC; Ct=D DMLT5Esȳ DTJsIePs9)J+)=B a`DD ,թVDEit %Tex`±@1B @U]ax2hE]\Dn!I@ODh*0@EDJDeaD:!XRDP6h7@ l,`4-C?EZl<*MP%XN\V | 0bЌ+@A=VbboH olCP@ E#7Y}w\8%A~-1((wdKYVD^dDEs&ѽX1DDm@ED.ypX+@($@d6IEJ1b(@ЊlDp%rOp">Z/1X|U>l Em@ԃ@|Llȁ \ȁ-XC0 ( |LDTo_hyb $'h T_ElŀINEjU+l̙E7lNG bl FG⌒TNC@z MTLhhDD^dZRΜ1Zl|CZQ $RLTŀRH0*\̃TyJT ćHNE>UAM9kXID-DjлgH,_p G! ̅kF܎.l>2$P0mt~s]  Ji k  DU_IU ]L 91IeHBCZT܄c)C Ăc!T"o jȄ`A(Dc/[ B1lI08(p$ HPH/dA+2r;_/<JS܌ K( k@:n^$x!7+4I^@?Coe(LP}䮘!m+(M'k-D%\EH,Aȼ ݓ@T?&G LPp1fԸq,|43kVH J ]QH!Vp0˄m8֊Cw"Gk#́(ՏM0Q4MPx-[pBg[Rsx gԁPG(NH!^^8'Y@ۤ~V)*h :H?#Bka S t(=@ LF:.]X|O B@p$V-P ժ@)VA@<\xg 1.nЀ`nXb -ꢿ0`&@Xb d`!bp!t+N_08o:FK(0A( zIa.c5`:@!FjpjæId@. 0=e hQ4 #c`H @Kl9 0jJlQ;AȂtpH:iIڋ22"lu-2i)@A}Q5U۞Rm5Y򶭤i 2-g5,\]+R .B KH6=\q.c΀x9.`R(J#YҜK`,cZ\@aZnKPxzd 8( * DAHd!2Bj)Z1-&d"n 9IK%5P0 ΰiSl؋"F0Z(+PaC !F#-"$ E.I`)@U"P@4":#H-d Nz``G( $dY 7b$Ky `Rsv[5N(0ICDB `8w$@5(tc0`<{[ 0w@ B \` E1j؎G 9N:@K(`T8Bp `7,|7V X@ \b #BWu7x#}}@k(P Wޕ(@R6Vz$M^Pb;htTLe$@B@vLWJw^0  R1> H"!(CmM!H¡0!.5v,)Wj͍P( B0D-R3D!<  /@Jw9(ܣ%1mQsq-BҗrH$lNhN!,3\NW`31/B 3n胪hQ pI`zg0]PfC9^d:Q;yf52AC ( ZUc䍄*>#‡QgC :Od`Xbs@,wHo 4:1Fv JhUO|{a;pCP&xʠ 9@V}A*b> 8:8o j>sצAh6 c F! tbDB7aA ՁPE$5b)F7mQz%*ԕT ,>%bq/BNP˄ pp*K&x5\@iS$X.@ Aی,4$ oC3_"Yh ?0mM0auÇ(lw|S#İ b!IIj=GiNKC۶$xX.'@bEB((B0ކ7O7&:l ޠd V@  Mހܮv~/B $@>! Xt!\@"">!E!1 L&^E"Xf A( !2k J! #abN!#hn TP :i fV@(b'Ά".N#f`n(b,N!R~B#6a+,L*`2czb'ĢdPz&Q!O:#!ɞBTV>&6A|KdA56ȀB3dfl l$_M\h N *lJ!6A;AzA>)/ dFJB!=d4(GE<="DN`6 qT%Ҙ9 BJ ``#a"c݊dD^C̀` N~>bԖFow p O qH@$ 9>'ƈnM6|B[%&5†d^A!L ~'_-ve)bcB&ilL% ~b!m'2[pW@&@,v'\芉gt@i ~ (,LD,.3lfJ(5ΆK A5ڠJcr `:|N fۉ:& ֠+a$f=2V nSH)as8pP<ĄxJb.d)b."+j T*I9h?N7dR`X &8Ld aRs,< J!RAXB,3TXV"0B`A!vINl4"|AA|ir4#b@"ݩ<ZqN GAA0 F T!x%WA 8ayP HtO0qށu\JLk!\Ad*V F FkFVA-Rza 6f b>aa 0Ug4F 0`$Xң_.Xp-nZj""t_E%1"~U>LR2 U,rI WU#u]ZL\\%,]3搠 Lv*[(n(dbei @츋L),`@5bc;,$X5a;1"7rI# b弌Z ڠ\`'.A2lAtN&},r`"Vf FP>c |$<)ԋ }F4!Dig,dfkgyT*dlQD=,p>p Dpt  I"-͸q4H ArVunXaʡg NdXڠ-^Ra=t 2D ~d g ڤH vO Bb&e% ֠4h1ch4 $= TAxbЯqT$I)-[ 8`tK8E/<,!؀v@suD&AbAS#H<( n!htTun`HNoRA=c}J!v-!Z t A&a V!NhAKNrDa!H9$[3~-RTSy;>%!BKnMA2(#pdZi<bXs;]<;ff+6#-v\H/T΢ĺk%8}"8gv^pČ``_`Ro+tna>)N*Y:BBU]_ݶ4 NLMi9r3eDgAN1mu6$MdJMD5r0{zSHt z; rZ\~Ķԃ0 ~!T1 THjJB3~zS0I5΃tuAڮzl>'a{L{wJw-@Tae79W-!>)\!P3Z%uZM`(8`ZlN!a>#d2&6bkKE!6 b6^)ƍ-f'ŠIh hAaOߓa?OiV453>16!n`VVVv& W5f\3v)jȠ n FCXGU@.\A}h?l8TM8Ҽ!Zlq@PJzJA R .p@;5@a xPK& !af@76 "D?| 0CX Tr yxꂘ ]K*%M̼UaPNDs&Lr&I"İቇ=\#@UyH,2 @8yPh= |UNOCD IUhg807Ay|νu5F̻<Y؈A6@gS Xҟ 0 80F҆jL6b zǍ0P|YD|hI+ !a 7p"Cꙸ &C@u,1F D1gcC^UyDY$+BCy4 +. hb S D} R a K(v,A tH0$"d ‘Y`>1 CX _0ESL#V)@,!SF$:X J (R \)"f7Xn P7 GT J!h(>|r_ >2 MhVc 6{4܂'$6F x v]oW "؛&s[i`aF &\ [X|,l#8C lw} 57WdmtР&>3XZ7_Mg1/acH1\8 <&"1q ahC$!0Gm$ |Ieb@T1}1 Z}Yd{1` KD9aAIؐ$9p;@=D]p 1{`-=$Ϙ<qg*NG,]$16@@z@1Qxa'"VKP`Gχ\$@NC+$6'37=ImV }ahC?DѹEipgB .qC?8P5an dMozs6nUHT!qkAUNP&Wp2b}78A!r ʱUA)Ũ0 *̜L6U(8A aS1Qwh'20DV P U7Ae@*=vDX%}A5<ăQ`kCjyuНzn݌~6 c?r NpgOX5(qQ$ i o(DM^5!EY])s^~Q!PD*pɇ c8jHQЯT]`, p"֒җdbFĭ99UNыTA@8L 6%83Q,-uu#0 2pp F Fg'(, E,Jb`Y2TF 7`-GEQg!iu"r2#GU&Qr 4]`@PP!W&$p;,lvFgP@  P 2G@6 MQ 1D8@a2= =`'+"\+%%hr2`D]0}@ pFYnV4,q>q! T@DWP# ,>?q )Ġ uH)Z)@ ] U: JQH+*kG1(i Yo}8h @R[<_!P&3r VIU `P0l$,P h o0  ` In!X PFqBUp?xqBE)h]aE((Z GY3P_b)@?,-qx$^.rVe)`WCq)b-3ʝ~RhQ=&}! 4;MUw".Rh 0lݕ=P <_L>#ހZGpLw &0a!5u`IY5ovE VF8(Ң d G :c =&wGLYbBOIhPbp@ P@ !:?` 0 pLW ~$P"Ӷr;b#B򋶐DQ"|B)[r'@(# ?2$(fŚ&8bk u\6 [Q7e<41 p^ |Ò }kPbk ,\5 J7ye9U'a ,^T1:O' WEp²1:0q1p)p ,&qN ? 2)IY]ѓY&VVsus%CEdB  bJ Gˆ FAOweQge2u@ f&8p )RKas$հr,tt@ 5[5af>[&θ"DL2ڞspw# `` ۀQ+!@1ܠM bas EУXa&g0s b M[ 5z)0 LnSF"$Yqz<:@@ }ppb*PF6^Gs3$[B b 'X= ,і #ӮPE̞{^PUsĻH -'XPg ~6 $Î ,\APKaPq? +89xFP`CEqB%e0l|`"U0@  ;!*> 67p^#*58 #uSN#>`a51| j<+07`r_jL! Pm$q1,.Q|a0ED-rk(S1}apnu 3? ,c6AFQmxK )ܡv OVv9@MCLQP:t g&=&c=2|(&ZXԩg!-o8@-̍O"#Ю -a(H&|ڔe хR4M6Dwl `d[lخ;UF8`w3f!+LO'MPj!>(<uN:^̙]QrBa!-ɱd7oHX(a!\1!4BeC%ԅ) BIS3b(o<Z8e쥍,1>1d@Z!0N腖3($DBRB81ʭj ƪ7+xA3u֒ꡠ M#>9Br6 IlNsn1N3:fk\Yw0.=Fo23p%xcE n(jB(|(@jh DR,P}e)Ze;R?3cDtl~ND *8 ^. @\<Fdk@YFm\X ③_(ו\hD#Klذm43DKl/ q"Vo' WL"86hC.u!N0RL*I">`$oHE>q1,o@,H#ȵ~4hI(`)2z oC -L$&ΓA !<я̳-E& ' hk HEֆ1ohBЊ7 0BaZX@,Q xBXQL H&0b/YN>b2cȊ&Bt2QA$LoPD 2 CEf V 3(y@َtAPE?7)X<"~ĉ#m g7d m՛Exb}CDaB$ GpEvَ(؆X’xSbb`H\g"r TaX^ɒmc4,hʍNI1n &l!}%>,-Y%b -qk2]}7ExL`"d.(hА?'QP 1ƜXV>!XTũuE*DB R,!1>#b[H 8$D `r̃*O3%S@, _LF|PKA, "3@_}Lk/茆#B,`r11D7bD7A Bq7C2b1P[Sh&# YhԐCQCd0r\$g5K$0ofz-2IBq"H"QG@P %P)P H<t۶#[6#mn;P'^ͱdDF( iFWVUd(X+ U߁i)bȩDw !kdE%`` 9 D14DK4z!>-+V ,DZnix]@ JPG꬇v9i x0e_/.14Q_YOCSTr"8^vX` N)6H@5Tt\8"Q'zuF*R0|9Π ZX( c$mM(A0B8?q@Ap_ \}Iڦi "S9dB*#  AЂ}ЅԄ>X#]*P WV 1:, ;U  7 7ܠCi q Hb|K;'gLR#4#v5C1;Eh!a8ؐ_Hʔ26@LS5͚> jJD;#@v?PeA3d+b\HGɚw!@=R%Hfqt6HK@49(@]\ J6(! (*Y68Y`"ё6胃7 9K@& a;~:hEis.# W3Xǁ,  Hxp 9@d:[  ,`:9!:]`2p/ `!Xsh@OьO5" x0yTjWXB Dxs@ Ӡ^4Ӳ6;#Yp8R.Чج [,|1(=-WxOX.9]Bɸʘ~7"5ȕ5XP` ` Ј7@[Ђ0h# Ym,'0-qh2,# D2ޓHH.˦2Y` IKX,ײh1;1?(aޠY X) yA/7" +4 ` #ふmsjQJ#veȓ7U|ˤs-@$i"6'KЇ K'9:;ɕ2Ssѡ6(1TD_\m!D @ g0t:GZH4<I ]pZK>j0琍x7 c1tdi@/W)Dь,NlJ#_aЖ~@VX،pi"o  Ipr }@ `U0Fa:Ohx0X!BM0r`$-@k6ʘ<=Yp)%s'2*mRp=i(y磈3);_9lp bqPH|"fDI! ! Ӣ s:!Z(x#LӒCEp?U@ x↤V#( h5.ZPY"OW9SeҊV`+* iI4 ܄hVEA xI '2:-I5>96{m(ù >H; sohc JachA@\l U,JD0^ pN@HQ[p! !#Z0r0;Nš Ơ/> YXDg=^d{ cBIȅ@3H2gU٣)Hk&PnPD)4W99Sz@S^гYYJ|A%A3 0Y;z(yV@Q9 P\m3%V4.  8#\s_xK[*+(c t9(EpES% Jt* /Ek&>@hLY6 *m9+ + 9Ah=w[bH> 퀌+ȁ\J ,a`Y^XY]0O!Ж> 'H HnqP=`Z. LflӓPX1!]x8 #E͠Ļ_-:YRhJHy=}=X-(` xɂ,h PVZpJdk 8Y 8h}| F )e:'hE` F55숕L=C;4A_Z *izcv5ʊvӡ6 xuaiD߻JWH }83b<2 ])*cYDI1jх$U Ɂɲ,Ĵ 8M.g8)T@ VȂPq.;s(r$ aO0= rcK5I B/99bb ?&$qhy0@Ow+9ᡠ; bZ`W;9hƎX3 g2. i`yH2{aH(n+#Of(8V쐑$b` u]Hx؆q(H 2i?R!Xmc8(z^Q7 j:!GZ z+%&%,YI$`)Y0$JX#fu dIx0 Yg}ЙLdIp) .LH0KBXKY+ڸEk.޹yIحoWq0Hd-`̤(Md Q W%XQnYyg{-k }Jx f!eQȫoWL .!*K~.>%POq0CqݐzBFaDBLB$蓂Is'W.X XB \1o&cYm6Q[hw4_TY|G7p0 S$q5@[ A`eI #'Q`UI;% $VB.ň0Vr邌.TX ]D e> eN] %ҕAcPT'TB4  @R?heI$GmF(aBƥ\F_\RFuj4-V<5]r.%$&^Jn7  ΍UGGsMd%6mHtwvq^ucN0oن!7D&a}#Q l1V Hc G'fx$d-lg ұ` .,  #GԊi_~Fs7~D%dDX !BKGkN {:c mk!V82-!@H)LC3Q.D=ŚgCR1 ;9Aŀ@ yG9&(.:WBr8D5e a.>ፄ@ EY@ *`b_mוBe,HHEtb- )ИcKc˜b v5t$5cqla EG  [4V,}MPb-) 4Ob7І (m' b?ѐ@bD |$ʄ@A*JBK-%De\Kֲ"DF>S(h%K=BcH-p'36AjFnǠ@K1~*e!Iu`P:\@ Z.SЇ-pS KcB% !NTA+<I2(@g° !90lH^uqpg L(8Α4E{eB$p8q0Kǒ K )C0[ B6 n0x>p\0%w]SzD@H]kƨO2H$ @x!Glѝ '2jȚ5S{8Jr$vKT9lBU i.LmGlGҚ!i 1Ot 0QD3`AQB n H4"(5+, 4(/քtFQ  d#cL AL @xi 8<2T3$ $Ї@ P&R3OE"9|, ]X!p )a^tACEED܄l*TŖ1&HV((I|a4f7dL@h7Lj,$ 5<7Kd,RJB Z dMP2I:IfKm J!6:ȶ$[dÒ[V*cK5 M&&Hp1.#15  Dнa |0O"SS{: !F`hp#@@L@Tn/>R {)E(}GpP(w M1F?q%C?iO:jPEQRKX?JuЙ:3HmklMMdPzTǟƱDQKЩn$<5l6l؆(8MY%FmBQ%8l`Eq@tHNQ@TI*8\(?'dI| HLAk%H%D8]$ 3$bt4(܉1pάE㹆Ѵ<@4C}cP6Š FMbhlSBJLlUKI!Eq@a_ I nhS(G=TխP C^JX.Ȓ+|N\PlZxlX@BcJ^A@kH !hV-@?)tV/T"GK6 ( tB}Z@t\pؒM@ &ynJVy|A.F{ҧcTBA|ocȂL!HBK1IuH Z4/f!%Ѕ&2B]*se`bIlB|ɎFxIp@<(0$OȒz6D?.e +p 6ĈJu `IIlGQEcLEo!-\1hSCGNe<=ߒCEk!DlQ*LCIg[5?܀PGE{ÓlBETĚB 0X]ɶ %I.ӝZ|RTAOf=sF b遱i"x(!e\܋%'4hJp BEX&DЂ, Tq7 EeN• $SUCLII܋q•Th'TßbIh*K)ABDo~!ە^$&D5 'hI>LAbt9ZJUtݑ&MRU$A]I8%V|<1h9ZO'*TZftT"ˣvƏ=N]F?.Dt,tz=&DF][BܟA mPIaDN \>D}BHaŸH\HȁD D t$_V(N xA/PÙW(ENK/9I|-(ӎ4TI!g+KB Qpbx*lhJK(&ҚLB53'v$t* *(365$qL,A1 Iw0T$"T'L!8aEh27Sn2.V|`5RpxI*`E h75%RG*8ZDp~bh'`xas %Z&KʌBPP,&!dZIS(ۨgfUa!,[\Qr* R>.!B B l`Hb ( ¸p$Cj$b楊S]*fR_|n#qf Ʃۅ)PXG(@7KVc8$)e ZbL>>_ ~"+ >\a+{\9x\"ud*(#)AӇ3Md!:y[,K{W.!nBc(#iZq@C눸N $AHA.Z #70pOGi@1rHaN.H84[䒁 ^aNYJ"1j!( |H@DB:%:‰%rjs8L"rR&J߰f$>*c'8A !*!Rco[FĨKa6 D 1<) Lc 21̥$@L/R 7]B/% -eތ5f=6׉HDQ !(X@4Hp'B Tt$ BtB+@|dbGm#%ُ2D>hAEYQZr+Gh,@kiKRq]XJ:AgXܫx*9G\Ф O~4PZ6fY. F #B$ZP  XqڌM<0LB`K;p`o(Fi:@$q 4p/$d =@>>£4g#o$7 1` G(0*l)Ibzy[I DXS@ bD{K"fRNH nI%w%>$r(@ގk)8\$0vijHth f fH%cL d ߾ApfFρnTlnP`(wr $@5!lDaTL( 9A&6~L`n$'Yq9hpc L! l/Jʪlx I%v#} T"TB GF?#.,d),ORo$Ajj)T\R"b9v>a} " BTB?&HBp9^2,fGzdӤdԥ#$θgL,AdAR^u0C)`},.Od*P`^8!)hD`Qi >*?jHt  3EFb5E"6L%UNH8 J8@3ڐ4@#2{8%ejgd+ P r$R$0"%(2M" `mPi"N`Bf$Lqd`ApZ$ Z3f .jԭt@##$s @`r"a$ >$z# l&bAV @`@l,FA Ee51RgAI%@#`lkhyl oR%y#8CDaJ'r` CTrJF!FL2‚uF""\RjN9GAf$P & V- "ЖcWs:Rwr$u GA#EHxb$IH%_V$xz-w%&^`**H&`.@B*W3M$0JƆd#p*D:[OP%`$(da8Cc0*N `22ᣄ>Hj:p$bE%F>%P'7w(_U#J $b^f"Rr>DמOF$/DM7'+Fm `p$%FXjnLsO4h=&):xt `Z ^`T"tVALnBlLXT4~nhn9N9ȒO"~Br q4IhBtKpH7; '`q.Rr-R?#,R{!8Np2bLHdCDb JX`cQ9(A1W*Lbb,Ðy G .Nf>hg"H~~M*m|O/`%@1 @v@AibbzIb`ZJ,~*@t( @E.Nv[/$da >/Ht[zFV>P'$H""^$$8`2|X#ze$v|,")m?2´FL;JFN䰃A⃓Vi)H!O 0`7bG{Qi` 8,dL4Άii X z)uF 0` &ǖvbn>A6 C"<Np |)Lp<'=vʺ;I/*m~'Js,PDz,pjNxA )w R!*vd)!Nn<+PI>Ȣ 27atTJM3Y@-@=0P&4HL$#hfP8|M$h϶ SAݷ wq! ,xJ @A Cp @L=|!/ 62,CC1 dȢ.09D{G"|޼q պ(3 uaUm{: jX,!B2lWS'""c0@k]VPP<ut ٤BYc@@*S&a,ac.jש @&OFxlpomᴤ%6f`6hMӦ隀=ԴǖKR86GJq> WK&Qc  C0THpB 9t'alaD" #*aL,a-+"9QP 40T 1;bC[V,ì2)ӢĐ(]%Y CX`m_[EpqÏ8.a^"#T= %!җefe%pg˫Qܒn(C00x{=p9"o!\qўzزH`-;g!C!;Hl@ Ch<4>T8P kJ0\J!V|9L;f ҅)lp |sQP\pnʁ]7{b\5t y1R$%8]%C`1$ L7PoFFmXכ(IIO! F nvqO j;LAp1[# @X C{q'\,*,Ա PK"b,HuL^m]t@Yn[EꬷiPk=V:$K^rI \ 18Q;xRG4h$84aAP;SqLyʄ+"?HnJ5[Cd$b3Yŗ+BD w 1 PS"jePZa,< ʠ *!ux'nv P.H$Ji&:M={prHE5e*HQ*'(l_HX51IȠ[=A @T|c`Oc{! b |( hDSc)0D)I(G$cYǩ)W@hUiвSt? neTp r8ni GvCTF/nP=C [`>-x#&r+ 4d @O)nr+YEl^< na1.E+䐄rN\ s_7D!Epn@ 8' v=`\"|$,!C%xk0(@ ` AF1i*ҖnVi]'kA F0$aP=Qu4Aۂ0RZ0 QVLگ-wrra+=lM?j:jYۙ\tXg0^A9#1 2./ ńE n,$Њ '8}̎\l^ReWp-;.  fp2/$HJ'x$_}q_  y #ř%,k@ZXwO/w4q&u<&y{ 1b .'V)jCfWWy[^艀s kdиÐOH1lz0 \8A c8mq$=+|[1n[kl{Y @"vRRl5e4_S c  c%8 s7 uPs` ʵ' &(y5= Fy7z"VbP9W6%0 `Nŀt"n9 NuE?Ç%!6EX_yg/ж` .3=2pWlM}\`(@0 Ax%z[ |"P" 8 ~qwYcA0kFe 7WI V.E0`!h0Vd{@ZFa>ZA06]@hT( @xY Sp!Qǐ F` \  PARF5(0Stan ~BV8 gӅueA``p W0 cHDC$ A g{wa9'I wF3o>\3lT=up }@\1a iUj m D<0 ~MuOP9 k-F $R H +v?D4*P p"Z`kcKjTXР3_e 15 P0$  6T 0 B+}CwWyŷSMНh؝f2;Q@#H$/s0dp.n7I`K2)$)qjb(瓄p3_RDtA6>A't@}! {Ҏ(Squ@>JIB[pyp20 v9 AX%5)DP1 2P ИБ/^Dv N*_A6Pk ,57'B ,   #|R9f\P=A0%8<> u ߐe (50\@Cui",PL1;a!2  Y5K+qPbeqng &l1&E;(HŠ`)) v/=P=cK}PlYT Y ;3K(5p mCu@ +8ȏY٩H @CiIu$ *Op-R`@ + y9{"JP?z>Z @ 0 Cz.R[Y]GG#k`<a@ PU7s0t2=( pTuU0< $$]Ռ 'iMf@ .Ҽ&` `#csC:V@RaX2 =ƀ쉲dZ C#2B At {+sGKm}pڥHb  8 I'R`30ڋ Y ~#=[ W5_b MNXpk!հF:c a,p/{Ɩ%am&vI& !#pCP9Ez :g 1@ Q7u Kwh> @p !&<3pgKp3%_y< kN W"#|HH"cR[% \k{$ GH:b .“0 a K<x G P ZB('P9 l` MQ̰ G@s5( k2AU E CD;H!Nh Nl ^u-dM XI㘲 ) LH C < Ā v_-ZZ K6ng`}L h#oм@n آX PޭTA {)וr::>b,pb@n} g A|k*3l` F> ]0 Qqe00 2Uڰۣ$S7(0 ,WpUp`pO bvoqڛBX  {OzTu- l-#2_v*/K0彰n4Wm)

sz{E@'Wp '1 AP؊?-, L  *1ΐ1i.aT, 9&0H\ jEaINrN"SJDJ-[b#-&nIBx\{0 X#X.dH{BnN:"eK4!I% fFR=R2(JD 2?+4Tx䔂j UJ^&ö&oHEF8`.V5H&OxEc D)z!& PY #ʋ[O\ 5@ ǫ-㔭0P1*bpcbgt`Y='/ڃp1JIIeT d0r1ÛY,8c.ÅX&|m~*e@q %\';Szt:Ġi=jfB"I\n8屨 oBF19 uM4h`HB\B_V\2FNø]B52!43=A,X1 )%3wòDLb(SP b@f@art`~ (F+&C P' Ɛ 7 Ph@3D1b(".4w( VR [%90X B!#Kiр3t $SdO(5E'CsqeAH72:(GVQ.l%pъOL@1r ,Z1D0p }KIz ? V 2$dSie3~; hQh>K[Kk@!m /:!(bXӚ4Xdu$#$aOQMh (Nl &$+x)Air2puLZR_ jh-;RRCb`q7jc/q| RZÃB[6t=Һ$" uQ/0)  o !5C;0EM(#ⰾ941plaErj# H0ȓq(͓|t2Rd ;l׃ cn}{Ʃz^!Bn h Y)F1߰\7$D\P q`oh7B$T81A gKؙZE2.S PA|*V:X*T0 co|p;ՠ٥_>q~c%$[wIp5_Q TF/Kf'F C"&!+nHE <` Ї%ĚZa g$ ?1a0Sz$X80Lzd~U٢q%v؂b\xHHL7[Z%KK A.aڜj@3A=̇Rsņ'B9P)C$!;P0bHFRy%,F_ i-#fy*#1`(èЃV09\a:XA([%ȝ"H9b\^H h嚊j`&O q^+فKDz7ȇ|jxTd)HE=Q  I04a%4iFG˫bA=&(^8 3 b㽀\OPprSa^H*g`ʍ9H*:@#:c~P Z0OxyBdk's/P HU&4D:?IHWI7X';`3ha.h,H H\̴x<ܰ,9$0:Ȃ#@Q~dӡaMIIK0/g&ҋ*|'z(„6.* K@+!%.`914j VϚ <9H>ȂO IЅ&bĆK ;L3F bȔ UX̊2 ~/k죌z^ذY`/ݓ>EV Hm(8,)HZ jbb0 llHEaA N7ό O8ohO#h4A(K66$T?Ŵ>-HX- TE @EŅ4GK@ %X13ېۘp(98$8QݓJ@ؤJ! =JAA_z; B=3F(9xJK4Ts-bl"ݴqӃ(?DXgALƙ C@x893 le9kXb`Xb=׹5 (c;$*|]$m8 `[heQXjЀ }%P+9 @eG,!A5`>3MExgx`A:4 mІܚc \KP0DXNU~8p7q?^2ei{4DAPH$ @DlxQH+T2 &6HA^ ~p0F~vTJa> ):]TR&zI{4;xx)L C ӞyyC4el)nΤ i6j\L)0SF+hVXbCt_+ FD7Ib@I2.!%[8(\X60 ZH>8 8WhJ0| TXNS>8:4(p=(cT ݯJ%P+e "&Pymk܆j9Bo I!bX$ )< B/d 4^olcjȪ~4 M,0 8@  h.wmhJE6axco+ _9`<;0Dq~;:6Qe5?Y 'D0O\9`{*h\yVP!%%~@@V`KUDK )v$h&huI$.Z]&,>> 88zpoJwq߆I/3o?84{ |"@Ըp<d` LaەO!='lh2^H^x@pje0ЃK)9x1OObusFNyiRG;!9(a z2*m(^U&d':f'yK;>?Dz|rJ({J( @w!hugv`sFvsnJL^D@ksd. =0Qqeٓr;J=SSX0'~\6.K (9׆Oװ.OjP ~ޔ;3hGhijo 6&?p+|@m vo|m(/{LJ": P5`l0JK8as$ xFbY=sy9Ĉ`\hqag%傘 ^  j2c& j @+01ʈ߾1`oEFN}cx@\7n8Ъ&zN yeZ?-aG܍$7S8 6;v-@:ǹ%JF:t=|t05زgӮmۺwd2-` P|qŽY8mK@ '[@:iБ$%'j~J7H%5@\H=} K@a+H% 76zZ^|1 tb0 `|d@F}pF%AIp#%icM$ y%a9$.S \"!T((<uK<v (i(Gud^sTu" /,~@@IOh).`r Q)%Zғ% o喉둴]ڰĈڈ^2H ᒣ8V}Æ4JϤ$gM&%7+&{Cg $K/i%+(@1zDs+iS KÃEWŭ8PةGli.J"\?zd I8 $R(~:TU<<*[ U^  Ԩz<(Z$~S/2N_|ALa$$esQKeAIRp80p&;5{D/KMJ0%PF!@@QqDxZ>yў 6,1?ʸTv.ɧ) ۉQ)P@MOA1ψ,l*UnͱOiOP|ry.T~@n2[`,fuKoJ+qk`)j3 Gьn`H0XL o "|A 7bi [w%x,0 :Q6#8[[x#K YB)@ TzR` V2Qt 0*d^CMZ^`dM7Q dxJ+7>8 >8-n0Geb!0a:  kā Ax(p`=%"i%.Y H"ZB>CnȽD?a_\uo J0Loҷ TIR+~,:|dKII(C/p;ftfDh#OA Lq6A6.^>p{I2!'$5@&XlѦt:Fv( EaĢpVg\70t@I^ Sж4 !IOO$X Rv\= PՒ Yh_ #S"@ CpG&8#k`EQq;ݢ)a Wt%|*%u7/aʸG`z/K #v= sMnvlR$2Ēdlxߪ9H%bwfSJ SJ&U` [| RLʡ~k5B `/йEO%/~-@1$aGI(R )8D"lc Fd8KB`|^` kK G PZmWA C)PKƱe?L"S 1TEIrv{.Q mh5n&y`cH` v" :P@^ ,aV-#O+FЁ?wA"tgY+E\vH:&(Ag(n=jbԀL80vR,q6MDKE;rʣ d_1 b1ED!$h.Q̟a A(wBXj71;ƙԜΥ7@h2paM@,z߈$' !I4:h층Mm"KY=g$E蠟>EFbTDzRz.jdAPɕ @Q`U)}R9Eel #@YSrQ:JX ơSMQőN5|B9x%ȈY!#a!¯$/`CV)NPJ?V_\$D5 - yHbY$nmY^- Q))*PpI (,rN Ԡt3IB і @?CqG $9U[Y#3A!KxZ͎H( |B؀Hl?AʭXd[:@E 7 Hx@pd?!*h/2*0GAEzC%Ѫ=8`Cv (P n`D*+f,@ KI5L/%.=,e A5$Q 뼕zdޞC@GWv$06|%7vE 9FBqqT1Ma\P1@dɡA0@ m BE4DDN$X$y˜D yH%\3A“FDI-mB œMNd笢%(BC B Ԅ0}ŀ@WJH@kZfGtAXzt@D|KDw( . 'Md'PRN|+@10HgDQ}dF@pąG1[Bl!;LE` ;b4q Jfli7DK AT- gXK\PSa@+I@,SD1@,,Rj|JW ]kS$I7ZEǷʉP1xCMwdc}%@F^JPY DߜX%E}SLqTA) _L$p[aPb %'T&lnliL5H@> -X52q(Ak+ B D脫ㅪ4!mIڤi5u(Dȩ}TNʯMH}|8%&1 EjïHDg<@\*K*,0@ƍ6$f:ܧb `*`mVr+fhP> muBη1ՙ ClI'4>:!PLX2q`?՝9V5eNOz*ḰQ;A\#|THF e(Q BmE Mįԧ.,Gq6ΦT" `-\@S8V^-%˘a` i 0X0Nl  n \:ll#v閲je]YEAIڀ775X"L̎2B(pU$ PzB}Y xCgj14,nɚX8x_E)W(E[pH(@Ӆr(C`fڱ*XVbZf@-Hnd|Csa"ihh€diXC-l/;0Tϼ;mK`p2)ъ2shY痾F4HHQqיG@5:xMbm 0R1̌D$xCZ֠ fR؀|BH#..uE [\$@;q6+dJVD%$ G`iƔPOop$㘢5H4,(00(`-ܘC=(%ñġ䄩%1ҷEB̴iɠGAtL"$Q7>JDXx$-XĽ[_5vPL/aOX' n|ڀd\'4ԇ@˞ܾ@@ nE@CdE \@*b.M\t&nd^sdp@;>*P C܃)ñPO r|Ǝ#'itpWuӛ"m724묄BO>kY@ZXJݰD znIXa_h NJhEPR#*lMA]&vv[p5/C` oL)KC>==Ѓ G|R@4`\BLىzv#"ZSlEt$.ŴVY9@29ea < QQn,ʏ_,@,leJ t T7ndP4` 53C=Ph@JɓÚsEiQ\#–o(dA;9 = q2m I[ IܥG xV#EGVô%$ [NtL})_G~4P:䄇ZRAwB-\͊S׀]d aD(`RuX*LVj~j<+C*ywmӵqFzAD+:l)j<H3uPLX DSpDoɬDEܓ20^dSX%["-Ĕ擄U_D%w؄H2@A!k 7ˮU@WQ 7@{y/7 .$n@j@;ILdAf@'iB ԃhrvM 7lP5|9k1HL A (CPz $j+B|z|EvXcFˀEZzMw؉(ĵpuz|A/p@uv5ԇ į-̘M1e׏LF-HJNAشB9EuWKx*B(}-3d]DD8Q@60`h6Q֎f-E(4q3 @JV$Q]wITV)AeN;ys~.*1VebL WJ0`nh+M%YKD&L⦈0R RzIÜFII:E*şi$')6*=,~Ҫt\s]tA'DRHCѱ:,Ā@!r jP7Ht$>r7V 0δ=iؘqTxs.R/BvTM;v@vHTBoOKĖ,88胿!6bڈ`"qp14I#`m$WR)pJ XiP%@4'?RE@ ab $@rALtgq$GK С2+%P0C^PNr1bTJ s\i{g -%+acRF U6/s9`'E=,uWK>G(z$ zś0(h (ᆡ("n!mRaŵ~cym|gj 8Q)*kO 8RTb%j NL1تk r,i(UDFew Xbj(C*M, %c3꠴: 9 7 S1Fq:s%F&(R46@;j W ~P.z%7 Yp8c# o87qL&"$ֳJd ?Pga)!ކ\@{Bl40"YZb%G`ʬsQ%eJ4~f)_"%.f$Jv9(t=+a L!*Jo&1s#@ؘPŏl)3:CTma P4LC!p!_h=,f1^*͈8,r2 `p!ˍa ʧRB}b\XJhaНJFjЇ)R9D X GHA$7ʅC35WP0DTY)?tr'b/}YK0, aVJ$Pbg!*+_iuhdāII- tcR i5 0e2%}(Ġ*F,``V(0-%}(%I x!= "݉ ed9ԡ*P<|AG> p0KPB 0EڪRÆpJDLܽU.yYJ̞sݴiF-!tdY[NglaK+ޠLh1E|ZX%b\mʫ.$c \9ѷ0xc1~Y 8e?8؆MB BgfO< 8BL;x`]|JI>ѥ ְ2mqu0tad"iKY) y ̓tXhE 4 b> *-`X(ӊIMOeĒ],ҠCj=,kY `K+e,k AE09yBNZ/еXsf-޳{#!os%r?zhZzH ^C.FlA4΋%VzֵBrrB &0|bHBaBIBI>c{0$g:F)-҂-(ff u.P})i x {aJT g˙Gᜄ*jFh, ʮV(\V=v ـ p Rn{x ^L@D 5.d#@΀uvbȏv * RbLdO',zf*Bx C+Na.,1B*4 ,.@//|140c./%#+a~:4gЇJ{JP@AI>F xP :+. 1УkR9Mt s"č @$/ #nghpw ȄlR U+aHcHNo 䂓dTBMK*l)'aHbH, lJx JV0 h X4jM%Ld.10@n! Z7x49:~[Vl ZL@ @ar"B@")(#h)PGCSbوE &b ލ2p6&zF*A y 4f.:2%:C&1tbr θB8C%Ч,&/-m5-{b1k-"-C|rbâ6&r/r hibz0xlr:,F0@r "@Mb 8Ǟ*E&%Rr؂.S5MQ|!&A,΂?FY=RJa*X%;aLL0'+T+)nx8 N-%\"Dr$j,1Vg lEEA_ : R&T?aj&R+!g(; ĿteG.9b*fm g b.ə(O| zRU|܂dXG&' ^+dK~ m& .@B0L$'d,ajl "A&S@#$du^cjk%L$ % D DZdRy:6'8V'u@EWnxc"%>DEN JR n.n@nZQInaV3Ua@e:~A \@R3#{b҂b@i25.Y;IԺn9fp'8=$(R`$-)Z`Tv `DuX"aR<( %ү^ԡt'>A@u x\F7e[7tWOh, 0',V #Šb*p5 hdܢ#bz .!Ϝ{<-.1V<̋"Ln2D2 Rߦ+, 01 @Z<"0g =GB $B6b U2 aa4tXA5TP'$vbA#c]@Gk`7\(#%v$%@ ,C#A 8TW&+P:CenF7zC0 #wbѤu B Fylx/)|bKǑ[Q':oKl2J;7s .K(q'ȢN:=+ %'S<@66'.Ȅ{'! B"e@`cSc ua_%eɘSZ :dJAD ƅ$WO'3 a*%^7$֮'1’fl4{dc,/%߲6UM.iIzѩB.@R1 KvЩvL om0ɞq a>CB 8Bbo ^3aAڡ@@%@ {S&uІg8'AFu7"1r'8KZMi7mC,HCrĐ"f ,C2,؂|=fݴ㐸ijd:6\)J@ Bm݁+.~^oGcN6!dA\@GY m!nM"~ N84ց Aa)ubESB-b_ۨ#05%;B^+>C5Sc `L<5!fg4Z3'Rx6y ,x~ n 4dz'A(L}w-j(I I.Tcn[<gz|XrG4.فȉqÎ\Ė&rԟF5x84eO [Gc=nQֵPCn=ćEH DE }IsRJ  b)M6.)PNB,/AC_LTh,wTrb`D ) f@PEq4scsubUGwPU6Z^iGv v' ~l  jzoS+ut])7cdg&|^ w  H7 ӅD Q`0"Q^J*P8I Z24 *$L`$Qm\l6IadYQ06DvEXChuÿ! 9-QW)hp6uɖeȢ=dq oQja Z?n?kr薌1pM+I6lفZ]w0aK \0'4Ċ4$F~SdMCTF8b҅*dg '?Ӻ.R PG9Q1h2=%JHɇ`1 iY3koô<{!Vf68Qj8G:G*F% :eZ2lQD/aҰ^LX D&,4$ C³Mn`h'8@_x9@02Txn([E ʹȲQr4$e'c",#^!ȉep"@Fmo Þ2iwKgA80$+o(FWԒ90&=d̜P A6B*nQP&-eQT&cLEQj`t)PEu *mjI D.@L&;E(RbU +E۹9zc>PDT|!az> ‰VsQJlgrX/" aHRS rQI;\rKD9,N5OyFd2ŞefҖ:"c?)VR qiN,)맠Ze€(a*f0 ԏr,x_YZgQNwp AXU{0~cy՘X ЅvBt5( 886&bX p>)ܐ5F>7lhr\€wV4web0,`N&i)8~2S cbB.%G!CfdYrC% +bPrŷ295bn9xirz0hΈZaB(&٬ICX:3,H(?:uBA24X@)t=6 skȳCV 7EUfABВ)V U"|)aC 2:4KD𒒜b^=YH!:,(.VnIUʟaDlsp,M0̙LR\yrS\ۯK1M6a'R~ `DŴtFTsC ;0إe_4* Piv`aw` V A hlɄx26)V~t`bRf !7Vذ?0y99؀I1L%q<>d]1\IV" 2F&eWd2ER30j";FAoqM"><>xR1FQg~ ~3p r"rDKYKr]r8JɄ5s%vo2d 0s]6Q(` Pl a!H "pmd kpt,!Nc G"!: >Vt.vEH0r#<f=7$QbPR8TIK S$h;S=G10֣.?.R2s#У$@$1=Zp %4M0 2#:M' yvqsDQ d5ȄufUK*Bp@,n3,pau@Nl(,D=}ꀌ/h-]@ Ԧ!9I0:n=f7'm z;{)Pas!+A{I"eVp ṹ¢px@d-K-dH$ZR-cW>1c%Ig3E:%H\4C;ΌaC]"zK ~@<2ơ5Ic:]ir5u5̶ KƯDv)Q!,!2, 3pë4P j*`Bnb84e%kOMQH2(PSLS0R\qqn,@ b[h3VJ-<҅ɣs2Gh[30O(&'2#YbΣ] Q\0P|_FPp4p* vw7PXww2 R" G pl "!u-. UG%r "Z `qIrRҥfqQ%O2ШO=} yEyaOa Sy ?X- :uYSa@TtZ~=A\!p k02Kg$R(EJB)m@1y*P}lBA׹׹ADB+14:{B0Z;m@Ȉ o̕.G2;g. z$XrkQ .PZG^(. ᪃ caٗyƞ0GqúOW55:" 7zC2J\~p ]CE$NP pI0 0BE靬*UUR761Wn6t6 !; lBP}m  ;ğ!:Չx〠 (;X^zlY2 Tl On\(jR hOA :%S!Oc3qE #QALx:; /$921A\7a#Yr korƵ7>` VN Ea 0LVLb#vi#<=W)" "R&x1g|zC~EY"%x!k!=2!T6(kkҪ-4Ҭ1&.ˮ :ɾLBV [J  Vq,PA1k(tqrQ$4ԙXm\ӂ zcI S1)ǟgYb:; 8>-juh &k%DHPIX̨U.>rMm(XN>(醬\px iV%T":ώ z!&qZFu՛#!PePH#$Nrn6 iF4G4y-2+gn( )Ğ1e2Ԥ!:'gAl|gΛ B ԯFS5SͯUVbq!ô\ = 2qnС CND :;(.`b@6)CAEޒ0W 7w= Ppaօ+ GğgK.wo(& bV)G_'G\Ybt6yf@l3nlL? 4=؂ `i,l & !XА@q3dB5`EnXژ*p/TkWZ:ρU IWE6=X!x>B/$X찀R:8\ FHn.=:݂\|< o@ `H "+8&)eyFQɡG acɿ# $qzـ^3x0gaʙ|eM 3'zT $vDtd3r R) JC7S֦v`#dKpR%T‘B"4)A]UsDRLE`v5U<(FF찄eTE% ~@)?|$@ v -G}>RGLA:Й9|?n$"zHl)HZDG$UH1 ~6?ތp ]@m~m>(!^s=ƘBi5ZC`f7̈!-t`1:NCP ֠$c n4&hW[ !Xb):cy!EU HS0~Y~9dDf T("N˫V 5+{YƂf>é#E@ (e02Z;18 iJBH$&B S1 2 dV3xt9Ɏc1\ZT8<]B+yl /[ho\(QmblC{ ~S  H=63q D/.@ Ķ!Px4jDCj ~-EX!Е4y}xt>SH Rȡ#ڶ;JN|kt|> #z>*c-g8^@dι`3a` dx:]HW* % ۃ(0#mK,3L5 zi=jP>Q=@Z Dh=HG |.@@xj`!h!tJRڭ#S1Oc3FUZY)8 4>4 0]y?@D[Y8839!8"d00Qh gNra dhqH@@]hc&,^+:,14UB9 >Ȁx j)a"Bڀ(%`Y (4ԁw!'.h188  ;CcC.ɈhmQ!yr)bQP5z1IΩs8(@38{^D]H#>ȂoZ8a³jAC80$mPSaNp `JK`: JƸd + `x jE02 u *R)H`B=yAIhѨ 4Gsʂh@HVP(=P Hȏ""p\Uȃ (ޣq{??(䣐. zñɰ`/ ;9 بy^xCK# hJ#H_:5_])<K> @,Xr, d23yL^ӄ݊3=[B 2ʀɠƤ `kyˀ0Qh4Ar@ؿkix0†0ؕR]q/M'XD@ H>PCB漴2/qA;h9]Da -d:P B  90BXg0ӕ#%ΚC% r nm<z#0B"͂ z#mp5i҆'/ Xx@, iq 6#3s Z [=UU@aˍy ±p'xL"xX,J#IhRXP뜌T;N5UYj^/p!2>ACh4_9V: ,#8p=U- ?SY$-&J",=8=h|6h䒸؆L}H̺ ŪN`׆|+h=QmV=qR@rB0x`.(`rw!Ss X XUX"! #::F%5tY ؜"pI |//VH]H?VaYh=H \yd>>x7@d (D(:IR8,dj6c ! [F@g{6[@,A?L4k[˰F K hʂ +<|͍!pF "XHng} Aݢ0ưE+R>ȏ3 dAS4Ty9yUhb38(4R8]PtлT K؁xW=D 4qhT)d)ryHcWpE/r6^=BkЋ(x6~\]#~hq Ƃ(YSII L>H7C#\02u`mVhm@n^H7x8([`KpTxgC1Qӕ oMtI.a 08K&#gt#Dek 0s&'hxxA4ydk>Vph|)ltʇ$3=)ؔxfƨzfP@ UbX5DAhS)N #,lC6t}kCY0  @H@ D +DD7L Hf/Mՙ 86.N0b6*U%bǎ ؐ ,I38I8!S 4ЩrbD crM\+ 2$%!B1"83DCr1REb2.,1CC &y)kީ\2%lnE?rزICG@ImP" i;%x;H` -kY$1J4 YCձA@pׅ &wx <.7h]®M%S )GY'@8w5-|LQ @C@Bk 7|!<$XI '}eADVC1p_1?C[DC>^]! Hq@xC*TN^Y[<1U2|R90j*44ڣF*t6Dp  T@9TJWe=-Pb۠6<µ*D5X*|.1 :PEXAmʡE>CylShA+ V̀#B^phƩM02C@bi (ĺ@0$LcQ@4w\ 1, lK9 BDP282Q)C%ؤP &X؂ޕv>ԩ8phN¤͔44Cs::a6ěF|⠚A Yc:8? 5|\)$'lB8\= @ڥ8AtlCZL%As2n)/+//1H)0P/dOJ3DfQ%Q`qr11ܡ:iN V7( D+<6j_ϝk7A?h T[zyhXB}; ,GUεݥ|G~#kLxC"xCNtPNb<0Br4 uOP;ALB/LKO'A[3mt.ELXA 7 gf=ǁDc nXIM4@`G((r( dB-穞~@9BJJ h ($!aM虨 6A (\9A0m: s AρL>5fDӋ{ 0a(=8'NIa|!f0uo`)..1B# ,}CV,7x(GI!&^zIaabx( .` gx&>6\rQ 2PIΟ0౤`VH9f6 8 $ ":ȉwFلEVa Y $Gkĸd0*r@Ă~:jlD/ 1NizTh|zꂅp/E듐 3 *B裘 gڅ@̈Pg.mCKØs_t xˢZڀ9pb N&g m8XrÛID@FN]v!<붏VC1 /qD.acq U[X" q8։X" ?@nld+Fw;86[c.cPXHE*pwXF@LBx@]'Va!@hfLP4Lo>TA ^@|1) vB&0pm0B=p c x! ?x#,-dWsp_B!a(8ʱ V D1,Dc6޹@lc 6M4AÉb'`A*@PTJQBN;^5CKxp& yMLt3=)FW"51DtƥO+~c`pEࠠI+ ƐC+8)\B#R #&T( &3b87% csgdh:)ŀY 0'(cp[0{cZ{" Kt 7$'8&t $p@ǀ&* `Eg YB$hX zY?L(Bi mDŊ9qMgq 0')м*W܀o}̡ E7Bȗ 5brX\KQF`CD+pޤ03ᩦ@UOP<d8I5F>yMh'- Ż @1|enO07@0|0S jΑ@>t6e 0N0 vНcHɶS"A?+'18 @lAaŔ+ a oX@ zk RՊ8: ]'p \ՁI\N7MQKaep ԡP+ n&f=tai@]fGtnj #!2P+qzH$V[#KC 9ablX?s)"fCjl2:ꨘAU! r恟37@cƀ lq3%=n+Y.Ztŋ)PцEV0rOW q<: . ,xM&X!c,nA,F@TdXD&f=Bt&")@i%`N*AʁRa@L&-n a"$.U0g"#p^R#8` 'X7bu&J l/!t "!aPV,64`0 p*N` gz.@QFnɄn ,:nc9 9`bad a" A@FA`EHE5Ahbn'$`h8~ I@AlA k)"0}|Ġ&bNLKAB,4h& p 0hPf<)(ŠflH)!!OR6Xe !"! qw/  @R &@&aa n *o L+O@g!1 C} F!bA.-@^a^ENfe$TD`(!n&G`+!X@`.Jh) ʅ6(2\*(! bjdBX gd6'bn 'C'!`ARAtA=6QbiZ8ͬrA((4e!~UcN t(5ʓ#'U~v/d,2z *A &᫐a x@ r,k n@ j@sm/<)` * !.6AZde@"GIIa"pbHvBk~`BbNs"P~Ps"b# @kj XὺHEhg jS`x@R ΁5t:&`%OobQހX Whp4D'j9pBh?qOجi eǒ-/(ÀaCGt*+B+Բ`>!@o o@\@̠^`$4;~DJ#p fDpBz8 @k ,ID5')ajhTr"X3"-!*๜pB Ā2%.3h3nD*x`7&Jtí !v$0.mJ.ori" ,XP mZ >)4R8@?naKt[($ntu.W6@ V ~P%`h! AUD@2@ H \;reIX)H9Ј. 8 laP-H-IPp)PpKg%5g)a".`N4eGJ!N.C(c2S'%5&h!hB N͚E7,Lb2/l"4DI&hЊ~fC(lq@Ё3&.v5+Umv=6V_IAżNa$bC*b BX8E$\F07A~PtkaI`aT'um8DT4,P(wr7!u" kٰN ?&PBSb^#'o[8PIN&DBRK0&Q-!J @j"b,H OO.馌 1n%!f mWuU(|VcP!ġS#`[‰Hx"x+¶b!6#| F@kThbƩka4Ѯ@BaBN ~.Aa?kI- 6nŠ2;p"G@T2m: 8D7S=`2%SpC<-tG\(PAp?|bq&RIv@E/>70ΗX.Z,iWݞ f@HH.²ȏ|aXāo]">D@x炎"C!\i`djwԀ`kxnsBB .4יWy@)!R6aA 8@)d3 x(!pXA=G udo!&|PN2~0.zÂ24$I Өclb zQeuFayJlo_فA @anpxԣmx`B\  7!!8b1wR@dcz"DH j! v)(ABS UBԮx"a$;BҀ 'xo\`VI %9! 5$ qb$~?f\aD?X4n$}0.ix>L4\1|R7tXk8I(opPK?X%>JiM0uk H@.\a<Xl>AUbz,*ۖț;ʁ.oav*c[RahhZ'.`rsĚU/a$bʚ''n&0BA\Xb:O]*Km|'bhNkwY7DO3Rt)S'׏g&/!a(O qC3g "k ՐP74 P,t堨rNaѢbd'" A_Cr4En5  _\8 n@: @ r+ Կ*T FeJ @uZpJ6' vBÇ#Jg&M`0Gh 0 HN2DL,rZ`̕1c, s@0ZI!0& q2A9jpηgCMSx'L0b؛,жաV>4/M@' 0}ʕKUU>PROI6zjRlأi{rU>L0B 2%l 4w tA8p|`G08pуVh qAȠ b ASʊ`ՇAls8V 4@-;1Ѐi Nsu7@@+`F_M` ɖ4[17ߴ2Vadْ€s3қ3O"|/p?#.`$Q?Є6 miA$&#b*.L #3@/1Y8-AT BQEӆ)#C(гSpEIsHg"A+;aȮ.B!X%YLuXcMx0hapal#!C1;&l`D t)0;q@wUm49Vb]yq}ԱWk}l 6AU?[}F|S̡#Z GX2`tChE~ p 9jK(Fчg@ \ͤ 8j5Mϡ0 ËeV& mܤ*5,-lqX{E UDBXtAa }l0ؙ؃5y`h!5%(ؙ"?'=:TIA `7/Ijj&Q:KJbZњ@! Z =>7# dAC7o`FL`&Xr NAәD`A !Zz) kaqhC PbHޣg+$,P(\$A#UayTa%)  Mr:b>18CLRayCa@hJF Cv m'X{RJ0N}I?Iw-toY2pAn!̱1B ȁ"3 "Mܙ\=r^@=t0 l ֽ--00K2-?qtP"+AP䐁# 2>ТZLuj*KV&p3xD*@?"cq "簃fVs|`c(jzMLO \BAgjkV!u(rҒ$P N8k[;9(NC"YAm d)hQKA`EvIЮv\!AqruPz,OH7! R*m _yBb2{U*4wqGq opJ NP3AKӓuE`$u3 ذD%m^ d&*V X( r SkK SG`[+"¦1} dUa ʠ  Ā  I]v+W'Q"Il?ETW;0G[:]@t0v6+0Q=>By6Q= V2$+ C2=m!$T0e3TUk6N"%@0\D~eǑw} 1 } F ~BBp\yEA'Ծ XR `BWa| l1 6l0#/ّd'sP'0Z0 a ;)kMDh  Nl Cy;L+DVkTpCj9 rȡi#pea}± PK `TD&0)lg m ^oa]-R0 $ .7 ,I na1Pt21P|2!V:=/  lrZ M#K  ~.J$7F PkE¤p lf$\@z "='G%C@`2dU7!y0]a .e)P.3`PeF r:4k 1+2C!\Dg`o&a I rW`,p r   hSqI1V\t[a wS3k@h1`"=%^H2 cڇO=F$~pHkzLvb " "т̕* f.v zL6 &@+[b&Yy0op3rgv pĀ|4] ["W/tv Pp;Tа)Mz9-\ ^Ǜc!|_re"r8Gj"k0"DZ3.ucJR3Z3u o#ȃ&``$`P+Ckϰ"5ݩ \pmMwN|tFä܁(Jp ϐ*1 k×p-,*/)0 b`}1] *! 9 uPݻ 1bg8 cdzv.km ,h1 _ Ie0 %\I$e^r&1 1FpBR޷`\eAo0E0@ >r' `;3=ln1Pmԁ" Z~\5.6= c{Lkq(t5 E mC'w Ɓ1 8u.p ~}la\975"h_F,E` k]YtFt@Jtp!!`R0]2p\Pe-2qnJVvP k 6O*$n2S )-$&~$=B#S?I>3 hQ0vjEЃI5y=p\W %B}@ܩx"@?婰"m@Q[݋)5%QfvKp+ְ#ET0ېkt Z] r$`M^?o}$h|#H7#F2`[s.pIb 46`0y~F,u I(QC$أ߻*e1,(B,1~#l@6Т F*SmBFAҒ/8G10qtFfoVa|Z8ӈAoa0$aP]+@bSS&o,F"ʁD1ȅF 4Ld39OaF9@0rA5A$'(Hk?l11^ ó390q 0d 6&#Y|C\ (u`_poBB !V"ACT(qqTF- '8Q^4<@F4" fKc(V @ oM4&B\m+@ʜ>粒0wH z+dNqN#)lYC@ 3 JwtwÁ>T@#hMĠ0 єnӒH Fbh c"PB( N4,P*5Ԥbp80 Fx+! 8?N  TBzWK3t>ԡ|^8;؆W~1fj%[h ij s=*@7 ?+C Ԫ \@iyˇ{ӈӠKsS Ѕ*(* Y8(/Jk:T4* P+)jb1#l`X#ePFArxwQA{,$ P W{S#И W21G!SG,%+> !-nrpaaP* -@@~j#s1x/7dX7O g( Bi"ᢛrW8 CXω9'P/ )/Bm7Wah`7hPqk+2`V~0!˓q49!ٟ]@;*zcU,ϸ)wX |)Fa3KD0(빼q@ ZWM3 )*(.5HԐCU!!;⭮pȡ-:p0И:1ix:X)B 1Hh XItQIP`Ag8lV(aG`**wxP;>M h2tH/8S0EUx/'1H;a`3ںbF8Mq 9b&L${Y`AQ\(5 Xi4eHY֘唎' dx!Q;ioA$q9h_HWͫE `Б6b)$闒P!aa bH1wFV׼,hh 1Rs` ҢA,X%8Aˇȭ(- "Ӻ0 HJ"I8DCF A30H%IbxQb4oY{Y'rPEP  ,ϑ, VHZVД=IX~H>> S) .6̇vHKp!+#auVĜW` IZÅxLg\R@,xR0<-KݼJ-a@ }e=a#M-m]dN/( S'`>pXe8|p5:9:O)X7V:ՈU|Y-b@Y/p)aMYyT7># q)PڢrpX&'phIT`K@-m8K(7v*ӿh K9 zY[PK@6x>K{녎!t`ܛBSbp @*- ].a%-m]۬m ݫ nrH PVp8^nlyU Yf~Z>^ Ѐᚁ^@޾ &ӹ=<ةg:1SK _6ӫzϨ)7xXGIΒe(;h @(L[8dmxoo<^G*ۀx$ר ȑr jv(jƿ] (YI%@|P>>h![]y10DmL@hx[ V0Z (.\rD$$I1_)N  @,@lF(`:xAd<bJ!L Lh6\%p{D`1.l4!A `B:Q0dιA@ ! YBY<>A,( p:&) ip-EQv $'0k%yRJk U@-@:Y+d܌O o`TvP F <N𸋠K=B0D* <7YN!e\hx&jF =cCSC:H i.F9@@Ze`@ K\$-Ȇ0y t 0HrDy" NJ}HN֋Ӡjj?SfB TU" ^BXB Hu@]GBB?@ZA=YܣAY$)S sjL6P!%#1m$yh"F 04 䰴D@* wid24Rko8蜥Q.\>cO`uh7T:<`Lf"؝/","}f@o$Mm2ӇkKTI6-8>Y7.1mA%̃ 1JXXM܄ +HhY2 ܈ }2B> ``h PؗGcB˸ !u܂:j䄐6Ч]chk}]6N$ETM[ HWաj"$(Z"A@ڰC|$  cfUĢF*pBp<||B@!ɠD BC^÷5A (MV<@`A/~ 4TA(xx,c=+X:EI`B2mQipHtLL 7YUΛEAHƑP%pD13BV6L]e_JDpz b8 ;Z ^ؒ )2$T$14ܣ@V\<L<0 AN<<@Ă)k>P@dp@! @<@\!iQ0F-`7ZB 6dGԁ@ 8̚i)\REQL$ğ@W8CZIDĜ\mȁt!Z܉ r?RO/@GX8tR!D!t$\@AX`\I/Rbzi5Jc ܅lFdBJ&Vc!pA!D^I}*U@P\) X>nBL0FJ!!{́-'H@@At+p@KD!` \ t:0$d(.d."a$ g>\T`#\ T\5p@UßTP@M=lFM,F$," "{ XՀD*ipBB0(x+l7 mBvOZ78 6oԅFyBJ'fsYC X IEGG@+ d|؄jzHK2a-C:C;C,C, ,"-B`pp(8;_c %A- 0TB\֢p3-#pA9|M \Z5<]7Pp-8i%%ix7Kn|1dAx'B9X:+UC>J6($(=v6V,B qm{@]G!aQl HjH[B<#\Į%PeA dq>}pj@2HF*0>q9yq A@U9WU33a-<7.>dCH }"07z"A]҉EzI/Bh30,-@PJ7 ?J 03,F7)RBtiG<-$ǹN,x(BZIje1 g3A].iXF`@X#"D%AjP@!7 T@@~ʀn2|&1^Zm"B̷=ցFgX((ypbf{; 'A!|C\@e #4Mxh@ubF|6~Uqz05!L ЂTv:#7HaE `(0dB oB"LUz-"#Qco, oXBXB .A]h/==V#B Rhix)4xB?pFl>Yr@7%MPX9yh?Kы!l/ !^&`π\x <_#hAH7dxX(N3nDkCv@221AJB#B5C(@]x*S^,ȥnCʭ;(Ih(4>Y(a㓁+!x 8 :B,˺ ib#V0L+SJѪr&F4jTlb7kjE Z!6OX ܒŒ 梠!Ē,8$( Z A5 ǖ"j K}"5` , 0F|QrhȔ )V-kb4t P鮧i4ik cࢇpI`0|%38 :Lل5TS"h.IV$цtLN+M¢Ϻ6ݢz6`bhN3$@43(8Hbda]ÛK(m>0K]a!!H`B/v^c̔ 7"@hQ pB 2 F\ϕM`9|؆6Hxckda %x^,&hXNͣ&}T`CNpW7g:8!rM I`zX@PostEljE@nIDD /!?)l W2}c 0+8%dV$3D_c C0;`_յ'xC"1%@ 7Z$ԖN@' ^Ъ'^=0DSB@C>sY}sHkG @8{ EW1 7PҴ0IXZR˨U5 kv?S9d BIҔ!Svzчp,/RLg31p}A򞀂٪`QI V"~=3 Hs jo;3Շ VG?6Ői8 %@ ,Yd@\+hyX hbG,8MU Gvw`j`Cė92V;`e\\lcl. rfh&!N`6[P 0@di!R +m\H# M 4 p^ ,Q8adv!Rd\,k z ٖ@qX@J"Cڠ Q N"` 0ڦ`ef da/q-j+|Aސa+,0ށ@VCA$@Mse1F&֊c,Y`Z0"" b3D 䴢h&d2taz :h@t~A,&!9`1x!hZa!L{ *,(`h* :`6fj-ȠIn e:/.n!Р.8@?ba*.TC>O# VD CLCT,a a $Cl>`*VO @z"H D Nj6O1kN R:=b#!* x0h!TQ4ā)L3`)΂l@*M * k8JNg̣T2zAn &n@gtsJ@IN|4JQxt7,ڀ !@A >b$$*Q"a{C { !QA `iT#[! zAt\@@{4C43aC>pb>* LjC{R`: @f0֠.z c bb !Ci6E"ꇭz N e̲yf \ bҪABj%Zq2m6M O!5ӧ?@FN_ JMA. Tv`O@abN@ N @p, lŒ )a2PSSfg χhbC(l.K\24aĐiW,dC.q8\!HGeTlB Hq:| @'qNV, @1X!z/2CF! ^*QD 핫zt oN V .`"(`4tj`!O1=䍀`VAR=B# r f|a0w؆x_o`O8 p pVqIb@LDThTie!;B,A. A!5CuW jal!4H#G%(!&,H R tad Tf=,b`z@bV{n1&0ssua;.(j&/WԪja,8b@.!#%VF8r` R-N3`OpflPtj&H pk*+aZ` D!Jb#jNRSI\v.2>#?O y|!AWPKl&і^9#܆ ;&kA]Vf0JAk_2 gߡf" `nbc0!4"~PDjjHlR`P/@4"X%O@aOy>cL $R~5J z@@{at;dk<(\7Y!Æ}ct!ǧ6IA9VD"ZV0$ LZ(z \mqrR{w A'vniSha&a\n-$_ANX@+Y[`YQ ZZE ,1-Y{N $1pL0.0E{ hbTޫ!< A&*@V2 T DV`M!o%` pHL޹`.M[# 3>)j8`{Ꮘp *cfba@W ΁R6 H lE+ 6ʵRׯ`&q^F R f\Aty\|RQ+A|G N@,G;JJLP&O!NTpH[-T&;`*R a H\6  nVܧ2 }aKÇ C+O-@3 jx?j\p^XVH kBB(%HVv{8=n!}F1P12j# A g7 Z! .tMSvp!prh7'hAfBc/-1s3%j+( ƍ82mPþO\{$ڠO,3\1ĉi "0|$7jdaҥΛ>ͻHb(QX'K+9޸8)Q|s*dZ5֟;"j Km‰:!q#|@TnIl,-!͘9A_+@ɜ;{ƺ "<[k&x$2Jăy&DgfHF p97Nv+0'.7o&A<%6{ .@^DJDyWCghISshU+u#CkH -3|'Y$ .` 156pI4 ̕|}pstuIƂȁ0q . hp(@Z.u/[IƙQ{3gP .R $ RE/dI~P,Ed@;WGM0Q @d< 5Ha B U@cp `YyS@̰-Sz/-FMȁxCΞCԱ04ah%x} [F܌gDRÈJL+eKA^޽mOOHAF틄P+Dl#XUxgU['=3%-W:u5&Ip %pB@Aw@H D`f,ޘ$x1<'>-(ъҏ3 "(H"0(Hg0` ! RL`"a tcPYpHKX-Yi@Dt4HDV FRX[#" ( 6 ؑCbJ2pD  T0 l'45cU)e"@&"D۸ >"W \ 6EԍPx3 GQ H0IEA*E 3ʇy 8GPID :Q>b@dяRczϳ3 -P8MZӆ> 0?@1 HH ) ]@2U@oA{V \e2&11{J"]Sk#Vp3(5:``ݹ_8%BM"䍒>"V;u ` x a"BO)P9(uP>#1KTO? DN˽N¯5ht(4h<""2֙NV%{&W [#LGfP!!diC Ł,r)Ҕut, "qB EB;.!NB%fd hl=񢼮8lZ2 lضM|SE\+0y ˮgMc]dJ^ 1bc8!E*D`mZtq076}#%ƒ: ) 6q]ZJE pa x ;D"pp `PlHc.0WچPzJ !DbASBvĚ[1@DqN3M3+\ J<@$&=C[HRa%Q{u-yag"NKKK:h9bpZ@HM(Y'Bz*PGQ pǀ 1 ÕDdp )@R9C-L47 mp8aRZG0F8gݵ71 LqqB|@d\$AD(`p9&."\෣$v HPF!aj 6v!pOL |?Wr?ŹǨ -]XgHW>&DԈZUqR b _ pH9CX;V%"F؇Cc"A/ "řj4o\S3@s" ?&^%]> 4Ti('l87e/S nFc||5Ld ?D`0?l!Q 7 0G 7P8P7B#pc`@o5b4U +33l|J}8c-\CX\T,]+w2oZ$UZq#kEFs`A@f ۠g$HHX/H M(($m 0x4KP !&p@"T v p!U qvgpv$!0%p1wC(<` p/Ypha` 7@'.qbGW0>V:T:P4` H:R0G la ` Ilr@@]T1R(Hz 7,!4\k1rpTpF`(P qU ?}@^Dr(Q$M= PB H'`X0H p(+UB a=dQqC5G|Q")(EPUEk[$` Q vrW 1pMb"q2dA [KAI a_u'D@|:a /ؒ8sPi $uEQH' wP1u "'paP.q-PqЇӔܰ|oi C\۰kc p?P:7蛦Qc0A[$#s$;V2}2L zV8`js 7PِaQDD$'`X1%dЙ8 h~A 1,p UpGPu:QX-tv'O ke TF5" G3 G QУOsp ( C.SE\ExoMPY0 J /OUP;CPyJ'b ;prQ{FLy)Wnaq Ip!S ~r?):b М@g GJUcsjT_FFp{ dGp @   <חBϠ)0}h@"4i$=z m@4Hb ]Γ 0GT1E/ Xh0cZ!*mDJ{ BEC&-E0!G/,)`r$@.Z{Wذ'i D[#WI>AZ$$k q$IYp  @F`," \D! W +B[AG*oư19FgQE?=c#]@p a"E`f=1k p9P? -LBjt%1c0@cBs7ĝ*"rkye ڠi ϐ] ȱQnr%l $ O9Kس\p@Pp >K VhipKx F0@!M05/e!wg}xIT| 3ȂձW8D@ux/-VBء8@7XFpM{Լt#v`+!5I2:a`` iۇ  nGp@ {` da P h=qK "8aS4r m+0$""!s2u^F[|, _pK7 ӐW* ? E"[jC j44gj:L1ğa 8T 0)'Dd9" |A !s:0aE` ATe,I`p0~ʶq@ 5CKoP @ Sa/L k p1p/a*+ }I0p @@0° PUz;SEL'qspЉ[ L%bM[)h+,P  P8% ksp {P[A+Z5;LqQ` { `"XnzG"mD*b pYm4^0@A$b+ϊՠDbh ] 34H `%AzH@_|H}(0z2R:5a l]0f ۆߏoKׅV*j R$@QuT 0VOiĝ1d5d++ E@ - ڲlpaM>Q 83VhaFA'N juy SZ)0% ؗF!R!N5k7a0 P,|Bc7joa 5B&|i4F@FWt3 *q F} E+pAN Cpc!oP}y%q_|MT T:hqMi RK P`/v  QU`)k% ZQS2FQ}XceLi p ' 12&V? SfA) ZQFW%4glNE"l=h1b h[ N~v @ 1Ok S5'C"S SĐ.+b]s i Eq 9#Ԁ  p(ݫ(k:Qak}4ɵ Ր!""3 J[?1ְC(`21V8hRgް1 Zo3 !].zI1s$""tKж0C0 2 Gi0 ` KU )7b5\RBX4Vء1p~[o%,wJBa!'JV:Ц CW$}TPE$P*2G JAY~NVS:! ClZ|V@8@cUYϐE-!xV-_,9%$bd|5<#&'6^&hJfխm#` L^,a7x$h`A\Q e6 @@ eXeFH ႚ cc~ :2(7#D`P&!H N@$NpLDڈ-6-y#> P f jXeG% |bJD3͢xdY0 98A~Z o>Zy,&HFq X" .X,`C\$c:#`5_("/{`D]jD,8腘_Yc#AѶ` VKL*&Р_8Vwl#*`38NcN)&Gɱ :2N#/=@^:^@ \i>0By"h\`:8wojDnHД{G$p>Za,`6ϊbhiK#OɁFdIAW5cQZ@IfUqƛ:#BG&Lohd$&hfTc0Z #8bxE?tpyÕ`x'c(\)[& 8 ᐠV,91ILqP&)T0}eHǧpq(|`6`8%F ]& E1^2T^peJ$ a2ȔDۉx! p?,I#>fspنb @!a 19H!O]"T< ' Du HrƒsA H:Ρd! PD'b;X-! ,JC'AG7o賐ď.@>2!́pŕ5XcOVQG!uA#uH{NVy0-At$&m+G! XH ``'QY6[Q`27{&|"ѝ|ɆL56"H+Ԫ@I)P1c (Ni0n f2c+rQ^$H7cZ$4 D R(Ԓv1,E KDWlS/F@!ETEc(P^L'/uW_NHP <@C ' BL B@28P5*9OGqbkFgf <BFpjX"֢B^ "O })N㌣RܬP!wufQ>Љ뮼XRP鐕U)K+qp@m9Z#7s5yS4ΆT =IED]z1'0B`R]T! BMP:ڪ-h%rDsb0 [W-2L< -DJ'Bx`EAl@ 6!Î'#-$@7+# I)WB $ŘmvAqaB@''-).,18@ 1DR Dr+%eC$BW 4p1\` 1"LL2c/G/=mAEH}~w7Nߠ-#}!׮N3Z| 6#ƸQ J%h# `hT6#yC p L;⭑ " R9!HfB-XB-\m&1sh @@0X 1F` GjE)FbLcnфCLr'ږ6}BH Fp)vp v@ m li[.]8f P`%@ E3ܐ$U" b#[ _`D:]1AF츅yn2A*>T!C$ȎR[K Ry(?^AȔ|:~hױc. bvm%`^T)MJD9hE6YūǪ%ٰ fnGln z7& 3!AvX@%8%T* 3 D|(~}”P!.D`ȋ i7p O@c2#rlW)pze * ^h/AP/x%V&{=9d^%"PF }黉y,<]\"#0a}D:7fq+BP#Bb+rd#ֺ=3 ҃l- qP(]`QXȣ=J"dXSTE@Ն11^?z;2k2NZﶸ.8tH$ Paf.Ao[%O9#S2 8Bbka"73 P ̶ /Pz0 `v z N30qvu 9$|CRq.+ v@n02yC3>[ dz5n jt-{"= s 0%>Wa$cw ?1 E2դ1 /`/wzph ʦƳm'B0 B& *50~1"p/B/ BqnNw,C*V%\ `S[w %/`'%G3\lϥ“1:vffv u87 m Z @ ԐeT(Mi0 RY%p#qF1 &Fg5M#Wbf!/-o fy3`]%PF PadW 5M#F[fVpuvp_p pWʐx (ҧK`Ђ/*J"ؗ>EP2 ؇S I[>q%"a 0pQ@ P5sp4{xCހ hX0%sE2Px0zy^P  p?(v+ BaPA/(Y/! } tp Y-21!p@(&"9"HE^ :<BaVġ_[hQ$w:!z$q}} 'c S!MyJ-) N\f6 `H[70_0% A o r ̱!]@R0vg  *Qp.#/A -lV2CZ\P }$VExcKDDuf C90C 3yd#  9g }  Pp +@ й[rcgT2@{ : yC)qiQ(l#fK fKPZJ@s,TWn0 ހ1c W zG}WZQ-Ѡ >t7: Z Yt<0 " :0 rй 0@[QB2p c~1&kRq $ֺd%js, < a`7l!Bci, P?$4QB  2#ɀ\ \{qH <R g 8-ꪮؒ} pR8]B!b"pLvIĀKHܢ d

k@ vpN$ I !Zay ,sq@Z @tl@aT0>;Q[P1662QP^@`";Ai bLޕP>چ1*r^&Bm |. I N1Q = 0 &I^g[P {>C9Nb1@ :h!IQu 1?۸my =P9":W$2$@=`- @֨0 ] @3+J&=iO2`ZE鍭Š vߌHf(Pn@6 0P+i( 6P ޠpNP *A35ML!xe Y$;>x|n g3ٹW|JCP_q=|T1R3L@qPqpZʜ tCxnW>s`CyoK: S" 9-i<Ԇ)f(Oxlwp~D%dSd^ m';"V&1e:g`P] pB<=g E< Da "nA 8 @*a"|՝3SPve&1r Ku0[ xFQ-\زͣ[!4V:`$4X%#ɥDP 0Pd$H)R.D:Qe.$%ZQI.UN$NZ*{t @,BXi`M((CCF ( 32^{1M(1 5,HaC(!4 .rp T}BHHN5"=t#N9 'ѣi+/4ȞrL%АڻI]°<%cj92h VdOtS`(sr}&n|Ho@`$#&@A6bj󦗻H! HL l GE@!SD-Bq+v^98:Di!hO>qIcD$o\L$AH*1@)d8X2D|X`cD_Db.Xab${[ uT*dXDHuU?r!DGŮj DD!D&c(-&Y $F.F* obCϤƒ6R a9@ =6/?e,!8aZb$hD2ܢ͂jdg8XAS:QQB F6BeZvd.afe@PFW{)UIgRC \T D.xXlK$qRNq/&Q bZV$ 0*FhrNA&SdczK`ĵ>x9[6ɂD & 0yoA+Ge1*)L.B >bi bX9.a$JRQdrBygeV/MO/-zy0Uyꋂʦj$0G"e{%` E°f+٢jj * mIYH09añ8057(j@vr0@6#E4TIDv{`# o(Ť %,1`!qeA)e@P1HiQeG}04/a8Ѳj5DEb(YhV򢗺B BaR9a[H.Ӥ+CġlQbC#XFR̹hZSԏlz]BDD94LQ$`H@K`#H zF15"8:Lb& ЁJ7x%eV(`>7 -#I_a"m$xqOc)%!F"bXaza9esƐZq}]@9jiJH]&+$ Q \EtɱULljSsb;CZdIȈx zZx=J}8M!($+Sj1:I6~ I—`$Ő\Iz.~o /0SZ$qoDME * axHDavwo22D(CIBb.O;`9  q3ēj'1K|M@>1K]=cIgV.qCzvsu$7H]:*\

"4hpVx(6g(&u8Nq_v@\5k0Mhn:,uF7t $YAʒ+9H q` J_J8 B=b+vA, s @M s 'Hb%*.'n}^Fo@H}>~^SACx'>&#7$k$Bj3F(dx?b(H>> 4a/ N$WaüV e$يOl[Df>6{zU_ɭIp߱Ǽ1Og*ѹ·>|\Cן0zEkjq A:q(I 0I"iE??IHdUzM$" 1 f3Lt@`R.+AKݘ IV$#!\BI D§|HޑP&H h oh'c<9ȳ_R [ KkR x ;%\.2h0XjB,|P<8>h'@Oij4X<09(b+7Z̃Y٦dyĹBAb18XЅQ d2?W3X݁ D&].] )PBeC`h&x0 ?>\`2I3+aK 蝏A1<,Ib&Mf+Q/0Z"8(!A y0tCaJ?λ-UQ@^O@KG@O=O( +LiM*A_ \-P貎&5Fڻt`ZѸD@4:r-C!@HjQZRj8RJʠW@wRsZgRf-K!^YsHȸH8Os@q@  LO$;0# dX| -) 4IxXxk ;XQPH#)9\x:rʫ+U1hb&p:Uj@őh4#15`W+"a W aVnZ2 4K@O8+r]sV@z0Xx!\-8K~ek#L4 5< kk9uD(~( xjH%h`0&ض|gs(6ͬBxpxQuPuՁ6 񆄔+h'# :v:K`)ӹKX:s|X#V8V7 #a 6T\&8:0X ~(7P^$:$ApS_Q&$b%ɜOK<!hb)gц :\x/C[畐 geӔ\ ) I* 0980-E /HKx,+7 J4) &Yf  "09m bwPhOȜ70ځx09 . .3Zi! h4BmM):^ Ô)[P",A CsF` ]hJ[\Ѐonq/9m0Kvuq.yg0!.9 v ;x@/x(=$lR= snDtn;`ytA,Gg`;C[+jBC[Q@ !8$_aƑyv#i.=[ۍ֐N뿒81pzoSHh4IflNn#`w4m.5# 뇎WZPYQg*R0ޑ`9sf1$!(`p96p A2z!C.H/V&i-LRP''|za+r$pF00#XrKxH7}D jɒR2hˮɡ&M%G?I=G>7l\9&O[>Itcͮd !_ԪWn5ز=iٺwv@ ʤtU0:LdbI3(HS]yvX(^ɉ_ ~] e H84h$5S+R`@Q`8 Xv@UZ] !z1YQE 6ZLD%rѵ z 5PCy4ds,!br1s&211pAxv&i(, x&u[8C- d@$%zwqէyK$GCKANX #PS!єV\+S b:IX?zhb (bo5M,{a 7$qTqTic81Usۊ%fD+FHU7da>F\%"KbbP' 'Km8{$"+IC..W  %rQsw&eǡiSA$n鱭C|Ԩ0OM%~%X@z4.2bu7h8%0UB7L:U@)/;n14T#7, zc]I<>MMɆ FXI?a%ZB>k)Q@{zޜR ,G&`ۀt'ML 4^CV @Rn@EP%ZAd\<9JreGtҴc?D~U og1k(R H+*1)"%@.b4@.GG@ ZbS^+ yK*[Z&sP&LxС1t$RsvSCZTM(V eIN Ԩ"IA9$9zˢ2cp>ӕ <ېp8:թO[9 l,ֶx7.(<:JIC20M sE!`WCgB4ĵAHHqFz4N⩄I,| PHP #>uWЀQp"Q@ #0{ƒ {( ϱ;gW\FDh'!mn#ŀOk \{}b[,R(FNDɇ!JDH%k"CXP<qQD`@+[.@ƵᎬbB ATL(Ȃ2msW(=Be `"7.@>`` +8X7!V6bC}8=d D1<99@s8Dla @EfݝcCّ8EmD8!UԬDCuŗu%\H|HbMR1p< },4LP[@4\ޤHʤ^{1ZiE4FV IPQRa\XXmB&(Ů_n05+7O=Ĩ@)C,T08OIwhtLC GFC@jb5G a$]QR I"M^ M! HDq͊GVDGdD|/;L;5L4"6TW{) )8dy3A@9ͱN6XEAA i!!,(]?1B, `aS tYЬVs9茋tȧD@dVc)NȔOY|p$Ake\N`Ydf$Ft4XHcR VH"9끗;T^K hN,[HbyC"LB"!AC% &#X1p , `!"ZCCpҝ A> #G 1DVl daCxV-`Qu"Mb3PDPQn7u `'|i 7He$U] M+l J)r"R`#?@*W \ d@%XAV*B@xHYӋ ŧWnyDp2e%E4CRjH]E)5G2u*GDR'"N)aOM* BH?fP|[O($(9ă r6mC7$--pt}( 0CHLEu_ 6Y]n2Qӣp>DݐLptTإB̌rГ9?rBDzrTϹ<|CSRs'Lw΍S ~9$CVW\eL0d>%hA@ܞT+9c'aA'C|UԂ5t%_C`17^ CTCnj5Aډ(!h@5‡9^Uih9`tFlAofXb9?(a0(@%) f'<ט&ZFUa K-%x OAC^KT 4d,h@4%%Ui*cXnX&j,CC_Z56y=x](Y"@@hskdj2St? Jo.ijCBVdJ:8'\ńD1!!en+vfUVH||BH)#Ȁ+ {bTiE$9WcC`fb.& o& nXν;A `x dOx5BԵ^̋t?t tmDRXIuTArd')JX^-DbyM&.ܝo~%^+ V,SddHHCdͰ0?@TO#t(+5H'^BXBr]*4V6n=Į&0 D& ˮ#&: 1+#`L#@ :0Qn*@ɨ({DϹ:֞OrU %Л4F ˂tIEx BOE9"\U`Hb,Ƥ2A|A0 oDsw02Q۰5`¸<OHX A2wEt)8 C$CDHHjFue5 &VNrN;3{lC18B7$AA8:3gQ$u)-.4?aSJCT4' `zޘ3"JNj#Nvm@86Ф9eN;wPJ-_|R 4ox8ǎ S& j bd(°,ƃx%HDsKhPD0ւIL CI" ,ȔL둧%ĸm h% bǟ:>ixxRΈks虪~ʭp1-DahtAΚ=A9Q[ PFPuYMujS Sd8e,&z|&Һ^@1jkbx2  F Ix8QkMʎ#)bIM$c 򤌱.bUJʲhÒ~F Y[/G4& >mY={ H7~#4كQM!eU:@5{fE/RzdȎ)QiEdM@zBxbPrb?7]M'SYj KRa-F<a3VdhM+**)yPzTP'` FCXŻD- Hg )?\R3 DP~񐇨|9yYˀaYpEl >7 !*)hG d X SV2VU CPqƒXs:1ևh]=]%+Ԩ6$˖kAZ&(cN xP +_kmf&CT:QlcIYU |3@,7Hˆ% G8` k@38 $AR A&aV{J`V$(h(aI!y!cah :G(_1x(ŀ,pȨC*)`z*%/). {C) C:v@_8$O# @Ipă'}!&v+x"&(8o8u0q3z{@P:m1ːF|P@6 JMrчԊ1JXGshͭ?7!p,PYa^~aL $ <qҜH) Z 2fjZn}jW`6qo` hEZqeխ;\qEu73Q)8Ba# e eZe9B1ea`-V ^?.L_$.HQJNiY1GS!,1K1̵TIsR-!@vI"Ё再AVt47o vyïWw6 lX T"[/Iqg(49_ +DӅ;.FYBN j+ oЊEnuȊ!6hMvB\<z]XdYYu;H&ThqpF \X 0'mZ8b" n:)''An1(&zJQbgs'lla0 DdXt>Q.XM;u" 1ҜD! >v=kXEs]@u@Ix̚hqp5 @ZBIxD`Sd\πlSb,~,<(iD3QdjW" %h1Ax)*T"+lF_Z&AA$ƙ `聰a 6Lׂ@d1_:T.:CpuA(aQ0H IXANKNY Ѓ|0%Ah F\EZPp m(nVe䖐 rW؆6B"g.t(d@ PÂ$X/\Jj zLZZY*~8a9|/9`y$ L ^fr $jJ," TA:$bNbM І%B"g ^^BOa@D%0>5"Xb0,„bX VST.Є CR$!(ǐ%,o'0_&n`fsO܊m\O'p$c'Nr#:#xLkpf   (LAX6F! a-~ d b jBX@Arm/ZΆ mh0Ohd*BJ'CM X(1.*̸,Yb0,)a@vb'>tKܴb뮎 BvG(` :L@ۀ0Op! R` ax/$/(h H@A"α :a / $`fL > Gk/% šKN͢l@|"C&+@Nl"XF)'Brp>(rBbC'nF8%[2abheV*@/8.+ЍTQZp('844c@ley18~`>Hz#:,'*@`iڒ ̡.@QnB@p@A/L ,\S+ˆ?"X& "@j%Z-BȍE+PFJHDM&t&AP&e%24V! d9 V҂LaGda ӋC8)caCCNy@Ro S|zz\` H gAA `&pE& Fݨť \P B@0,xA[R-&`zj J @ v'Ykb ga ZTKN%oͲLXʂDSWBdd) IT2J'xvDL'uP~(cvF8zCdzoKFr/N ~֡#t>hc-.-3@@a V&VCRRu*X.JA k%J4\VD)nfN ˴D(~.*lFʷmZU5/Zk-ҍ!X*"XсAky~h@dLȂgel8nW, P>&Pz#Pe;8:<~`  C>xga( a`! PqBS/A! `2V7 (&ގYH>H vUfL)BbEG!g,XXAXkXс BʹHK*s(͂" (*BmnOt`;wLYԠ؉Ӷ ;ցaɑ/рBC Vx@UF3a// @@q v&N"DZ`)q"0B1 r̅g+Uor'mXĢh b`[Hv t*)SV-1lA( a Ϋ2ZTt~U`7?FPv# C))uơq "Bf(E$<xb6 p.Ȓc b_")b; a 򚦓 wFy&Q1u7/'fGm"K*>Jd1LXHFxBsbd9СT'("do}Xth zhKK\` (1չU[v@$✢,c.Pax)::%Qc|A_ )הABơ O;!.l RXRЩA 2^)edT @ HuW$a B ,D?peCbllTrF"|@h†| ~4j JjFmZyVX"xhtvVȘ|<*ԙY l'0mx8;<ꯒc9% ~#7|AJ,סU( qbx\!1LfX+edنV ıPU.Wq ABo=]ʫA.TZ;=0VohPFNh,ԝG'sBwV5(2l!f+Ss# og1l! N:Db-H&& 艮cvwt9e2ZFe+<) bQU% j@EcuF_ݲP @b!5XaT>QAšax!B@ x?F{L&b@j&t6HsFL$iEg~ZJ-%`)PxI  fL-@GҔDHJ+Bp DL$7XVЭqE . 2VBA 2@I`9tR7rǥ^*}qXg`x2efZ(?1*GH\f"03(X< (/ X RMi3۫1̀Ni>ף2p. D8w]$ #(Y2yQ({4gܠ0EeRz!Ǐh;0p\1B`Y Ln) Qwƕu,c59%nbF.[ NI@۱ E r/xwF F88J{ *\a kEbb-$!+Q| q4 MpsKۧhQS#@|%Lo t| nR2Y4%69%r. jĭ)Z!qX ܦhxP:n\k? \(BrWz580ia WM)t xhP* 2656`7o` }pC10,``wZʡ &G DZ@Pe}:R< #drV){qD"2g%%S]UW.u}}x`#P` u6"7Bݧ#&O manb{48)nwb4z1 9@.P]` PKEA|cqF Z98,*͢6X!La>-$v)W{X{>aXP%!|g'Art!{|$@,1!A-1VhZ]' [`1 P-g,sIhb17v6l 4Ǵ'9#)I(9nUw,F cUSA0 0T}"hxN68 R|a 0;A/8c@D8b0[A nx!o/t/A? a"}*f4(L}(i$cKb2?"x|LBr1ݧ!PPK-S{@&#s]R -2SQ$A-Ӈ is>0 @ 3uI,a"fvx' q3|379bq4Fwx ?pP1 A5pXsJMyx@0&8*3TKE33PZa7$E `IpP@9pCGuf)S aəA]tڰ"-q#1p,%V$ "fR{ʡ7!mFn%䢏燙- St  RIqdx#TH7xj ' $(!6@@fʒ"@ Ҁ'*20` . (U+j:% P\#I b>P1h)#0p`;`Pߢ-g&&w@Frz q!ir{)J)ij2ǥG I$QbN7 !z-F!$EJJ<$3kŒ'©v0@)3RW@lʢ +a dcN+0,*7@T,Ph0 t0Xpe 2 @k&P!z|)kKGa JP C!YRuc<&-&{t.X8\D"aP>A$<ø6@3lDdP_v,Mi#D ([3 B3Paf7*y#f 620Hn QaPWG p{Ma>`P}P^-!* b,$P>[r8 j;#G슅хr6>Q7 ! .0 ۘ1p y[rd~#=q%њKwR L34((38+LjB0MpAhM?[#  dBM `% 2Ж!=-,*,pЃ},0m" = @6]$9}V>G:t%Ca$kWX}*E-z~َ<`".@;.(j4>  U&1a&2$Mx4͋ VnQ(|''YA:SW! n0 tJ P:xt@ߗ*O)BKNP*Ix7$nz]LJ+o\!%97y!~s1 [ 6` #DVN?szAi1~@.@@ [;CHP[@ (> *<Ai&)-c+)E N"J;r G$ިCj 4+'D(``-+Rk`@E:*/01(6BP03O80h r7#W!TQ RGba e6VX` p脊8 :h7 n@f=- bQHtKH;농.Weӳ% bEB@T(# lͽ.`ib1b@ෘp᧕V:ttAF  ;;P\WB&`I7,*p䶬t dG4h<ؚ0h0q2+h#ByVf5WX JbVfIXIoS1(B(T*Ksc;^$X@= V&Na3o #:'U(b*;RCF bh]C^W 9>X?>Ĺ}:ڐ ڊリ+d=,"yWK;kY'S\ 93H6DxQ)$6R-@($ńd (C%41H T` ?,Hv@ @a ‚لkl@#Ui3Ar(MD 6R8vDXb  $GWwbq̨* 1B ͱbBn؁RU%/bA?2;T yB : ?ЊtKQ (OiէBթa &~@HRBdj95'@PVJ (H$ 0 bS] ˱a4*7UHic&;"1H+pZ g;X R4℺0#!?BGz)><@U8Rh*;jT%&*CA1SHqA؎qV$$$`a!DXƌSnljB$0H/z&S"q?eŋK>(* %ܹF21yybT9tt6;UhP@+69 jP˻`(c,0/z'"  ({‘W:3H1@>GA@(ut8^Ybթs@!Lщx$qaoWL $P a,c LVTOwZ1 &вbhiyċ$!FwDzvG6:E鎜c@rDasǸau]*D,Y2_3+z q; zI7wO"hc4 7YH~,Y(p` 2px{97<pllv;&-%0"#XP+!Jcr^%bGGqVQsH@!ЎxL3=Hכ)b@2)vP9h.7VF7F@ tȃ<84H? 8ۆ`-s%P?;(IsQ&`?(G`; <0 L<cp` @54H6Eq8=[p.IB9bSeK);&tBU9&7#3T(暕bDh-GZkB) ;("Y+"yJ#R3=xR`-xGxB r Z*PD44ӂUH h6p(5/QԿ1Sk0MEЋq [4w8Ec"=ૃ* Kۥ.x9)˹[xEɼ[3:-kB؊ɲ1땐x.992 a"n)P.S>(ri.(V0[91`9hцғs(Ѕ.N5ytH` O*A%SJ{*nHAЋNB 4!{) H38 8pZ/`&{~1ñe 9$#t<@'es`7 +sJ H;'[tw}:_a=j3L>#ma{7 !H~9V1tnf̆p]x4k ۿQ|:SJKū:TXQJ*P5/P/ =y1N chE;K`SEQ-,Sm,tMN1SQA۬TDݐr),븐rYY沨P8xGLӐ~ ,/gp/X;ε|85Obi;0X w$Ƞ[.@-@ eNU`""(Wd=52~֎p8#eG0"=I0؏= zY5uy! @Sb(Wab]`^] ސŭ ^T30MHKS5!,ЀK~~0dfS_d<1X#!Z-^m&޷WF]5:(6 e.jX,a#F|8dFn€3 yP_0[j ^ZPybᰏsecZ>[,UH6 μ:cJI@c ly8T`(G ZLMq;sĦ>hVx5E9؁>@>,vѲ(vtSp رH1U )*O"OҿSưhxj`˂60;^P.ϓ_b09 &u|Ir@5&0-8'eQȋ+G[3XI'3dDRe(PCM(%AF*A! m5 ucT@-pTGjA2vC_i &UdtI+2 &*q r 額 ZGQ, Gq4pG  (< ''ZA''])eD z Azg*Éo $ #b$L)1$* 1$ͥK9RbPop-(1(L7M{lPqE1 <|d4 XP(%hQKE%o]tZxCF@HM< t5d]Ơ㮲J v , 9v܀KF $iڞѱ Ȇw]~rt_R`2s)lvV9&2Crʑ@@,{p6M` i9#2xCT#ӷRY Ȉ0?(!8c̪j*dL+BqK7q(M oɒXr`@A6,ec t X\QB9.&&$"@>,Z l0%O I. uy-z.@ 0R z! rDnx?r?βa_Fpj.`6WiddP1S o.pqK-'Q! SCCMBW Q&#x@&1q" p)l MddI-RP1- &psܲOF%.jXƒGȈ~T+$DFRQEBkGFQyG>.R4ČAH4:~#@bH jn"F40A64(B&q7mdV|Q U'#N)q,q̈6\qAJ&,c Xߨ"pgR $@]c*Qc@!EַMewA:Zϰ޾C"%pd#"70"3b`r1|GB#)e57`-bJHz$BAR1x.ѿdDMB4`%ZMjLfR"fD{0+(`,t8 +n@[H+I28T+Ձ8DJR%:U L%|/3AAJ̈T`~h G4QŅ0\4zi4x4FMp<p"#pT`t6Pl ^$[ꨚ I$ |*G- y%# gBv>*GěRF.Ai,u%S5˽"R@nBX7*GCXQA9-HR+cP7hUهڙ-x Bٱ7>);6E> F) LwT5)Ʌ>qĮʪ/TWVCXBP$  *IPὁ׆+gr.gĨԤ+4<4Ee=6h1|x‘Sd] MzB?]/$2 L.: ^+BЉA@ '+@ dͭ#g%̍a)ny- ~ZT%@\WqvȄt4>@(\)pYCfFזȅlʅ4W'Ir 8^)/d i)Gp@>Pd+X)־%35iԨ930 j(p5d] Tf7qѭFhFS6R.Uu("CM.%P-rC=TA\^vA #bdA%B"؍Hrg_I9 Lf35/Zΰ@F7'$JjϠ1A(bíjF@y <A=CP-7Ȃ7T<3 8\ жQ@4(K)^Bf1L̆,|-܌>g*Tw5\L_Y3c*AQ@ Ԭ}@ ,-lC) MЁHA/.$Wr>46  hUxg0E[?M4Kv!C'מ3Ӝ@3ly,vL-4\L[>vFpW[!_@f"0O*P.y+h6PuK$,A5$H$A ->>n(?4_BT$A̺xwWg%>*\Frk+pȂ,iP6]\G]Ԑ/3E l4RC(*8 YVJ_VՊ-_@)Z*V$X/^R,e&"vP.3?/B%|C IhF >Ϟm't9΍uf@9s*w8x@+矲 PCYP@@ꅯMzy 1d"N3\rDpҲ01DK6ؐ#1`V`! ȚKT&&.1!k[dAzH"  ZRj Z~%s'Ho0B-}T -0.8B0BnAWZ1PCg1cOߌ"9;2&0B86bS8]Hd N0F4尤o6 ( īx0GOdW TR q\H[v2=&qRg(9g,v.:( Zs#4@0@Ҕ#U0T9o W2.V1ycS6 W> NPt #HqX*( ,I3* iYCz`6h&G -\\0{buqeOx#VdB.VQfB Ȑ *=@ă 26dD?TM"%Q4RHF Q N*aDt` 264a`D 2E@/ @ia Gop1cH@a`r2>/_x mǼ9<'D'wX:.p77B2#nN#hE00 G S("4@"Q@.bCQ8s@ 1O(b4QQ$ߘRD#ѸճIC=98` (A1/bT}sBTZk `ܴ (-?Iz <`?pIt@4K|$*J )إCbR0a+ư1$F.3Цhf ,>Nv ,h1qE=u1p"VɇQ@ R+~R֊h|<Cӊ9Mq`0lBTБz js>7/l*##oㄣV$oDC+#\A Y (:lm0#Jb^%!MtI:j#sUBHBa=daT!F঴s#d`.(1!]܃>~6)ffo{A[ p!N,hHD v[1 W\K > @ѶDKS s;\Ydo4C ԅk;]$⨨'6 m20Aa f[B;mpC]]$5lod+pqb@=c5#~# LQ q@`i澙v%{6lgepсuVgCڠ(pQȉl6杍? Oär'0'0m=@ p-|ō8􉔞!'4ܰqX<0r]Kooq6zD\D! AQD떎l6`iAaH! a%lv!d"% #R,j 4DtnKG.c0"a H\㟜M| m&i*cVcKz6b/2c#E0f:29Ψ9k temB#Y&y,th! M 8&3` P#0a$&AB! =\(qf&g}vIs4` S" .Bx Jj||^d>G *: #d't#`aMb#ȀȀΠN# ܠ A,Pl8pP8rpV0pZ@2pDv RkEefc/AE^r|^Gs',az! B!! agN&`&! @\ban@Ί]x`'!#!5x `S!qj +0ǒ`A6! 6Aa&ABj20 bFn"3!HBl6Al`EE.2(@`b*0fd a6g Ā6E2beV#6LPp`߀WN;voFs tVa % H+u*LRU'!@ހ111"X@F4'7nczZqfˆCGI"2& T^p(1O74$/ޠt7|z ha†-^z5~lYlAL2 ˡCi{aHQ.Of.8@4e(G+S)`@r#6"j|0B@e'صIB.!-sTj;\ !H 8HWaaH 0JnY&oGT0ep^)%QaF20ırGlFώ $T0 䴐XۆB>4^z(`.Lk  ૚AFxЖJ.\t{!3P@Aΰq1" PŠ qKQ`@@1_8T2%@~$fjAX߸ z(u۸IbI`l^I_-`@ U6bVYM"̂?O܎keK@ME3f+c2 ' 4ZA4"oD'Y`tVgksju:w5nm\aAMxz־!ݖSV\wrIŠ>0$Ja'\= y`)-RL&X,$MZ+@jdD~`R tEZk,](aɸ4a5^l#>βˤ8 Р)@$i$ /D pO@zDoIÐDeKNS6t~c8`Er@eXOa"8ƫAPe @:a(ù P>i~ ޠ|]V tuw B"DmyO@an.IK" T )M#@KAi(h^Cg/'`'``pW`]\g6v'uOYȩIBAH )L:AL(GĈhnڴ&K^h9M%STp%f#  Zhs lU+x& q ilN,Qrb 0Z! @cT< ;Ŗ, ((b<h (-ZA59u=x" 9ҀM07sv7n:݁Qhn 8)2p50E =e[J!LӨS\e 7հcF$B\u` 0QbX{21 a9y,Z-}#PH (;}S,$"L+C xs'8!o,,W<BH!6 ]8xF1p:Ch ~`"lcu""yd.^"8-(3#&q%S8[EL h60c[6p 9hJCVqI^H:Q*5R|0R@ ` }mRF 97foBMQP,rX r'̶ra @jT3' <I)') 3@1g ^2)wTp Z% q2`$ o a$3!:p0%fIhf4/&, Tg'!] qzkQq!EU$pU}4v 0m}"@&_=A^PBH* E0mpAڂa*,* kO#Vt `kk@fSxofHJ1S [9m M, Q_! c9uDV r ` I0G81m@#VJt14g|)grhhtvAFbK)E1Chq QUkgn助N5> 0"\5VH[*0y-IaZctaa4Ȭi#"k6)bFCh c0#"2"V@C*Z#YzOz 0 Kni! +7Ho#3.ف!ebR!3``CX{-W8(hňJ%8fxLZ$T9 P-2ƕ΁Nfet_rB`eW_s9YVrxZEs4TD}ϩ60b[R ! 륗0ZD]՛:Ǚy lg=`JAG%dDD E*$$!"j2; P@DT)'CԄHQۗ@ j`)"f1CD&[\ߘȒ' !ƀ@"9I x@a/o&BIQ4S+V\fQB E" ձNd N Cų$Bp :.;}8(sQ b!J6m1b@#U N;F1j@zwd)0 o`x\F  +|C~{Q "fhGx7~" MqP |%G&Nut#L4#HT$iI@5Д$PDf4@(aDX TA;FѥPV FP (Õ4ߠ7-l!He1@\QYьqm/+Z9d8)ja性!ό8IN1gTN |d902t==hN!#HpDH= '?Y iDV EErIΐ9lb"0*tqElI`A:@dcBDv.(HjaMXp$)InC$A].B"aǚV7fpYZa > I1ѵ bi7T5+3.tQlBB5U"fTPS3ِu7Eo*pbw1Bg5XyF, 'c`8AN xXakHR">Ew%r X&1:@Q= g SK"@ ( Iț]\G?4$!q4FHNYAP `BDN"RcaD< r("DaRipI XX愲@E^%ȈH 76  6Ƙ Elf `hDWpp7KEv*10M$mӫ C8<ʼnܮ). >q#`70g\ٌH cژxYD6V6A,ȿ+@ QO:U<9: { 8'X4JXDr }[`@8l!^' ,X {B "?99;c5[CЌb0o @b0IB@#3`0q)BWP bTBa1zګxab7pYsF8Det2& xq78a8 #jBb#* Xyp{ۍ<|z7z;8s0%tDdr_#3|P1 Sȁ9EPauOZ@Y1qĕH(-*jd4:MRD3r@ Z.D@ؚoD#Eȇ*E VA :X.b(3z!@ PV`؁1oH# +$3j΀y⌊Ę 8O8Paym ̸8uo8뜀`2 yڃhܠrp᫄+;D+N>xDDy˚\xp5{i99Ȃ@@ͦr >92 8( IM8KZڃ 4pFqL@p@ R+31ȁ킈SP) V ZG!eHx\3a*[Êʜ"#NDsy@B؆ !x3=~(_ܨ7.נ7`dHVY:ij 81(jD$#\:jCq#h\800)X`z@`"!ʂ1&10&dht(QdxOG!Q UMЇ|2'XL(uȰ4yzX. `ȇjũE :d(".(-;E"^s%j!cp  c~ 0 K)DTHFIKpㄼ5@,PITQyXfK& 5pt \bI`ŭ=*t`g>xP Jm  >#cj+[<pP1XqW4:hT'9x"uAu93hbu8 Tz=8s6M0ZZt'uXXX`RR $]5jE@7`UPВy, IB  S-@M>#)]DV9=p K+'GoЋX[Ya08؉;5>8FISH\(9z=vVaI}ǝ}Pn(bbeP)g mu^!!X0Pح%!/ȇ5 Q8.5KZi]lUY)|@mz(6Ї km_PEJ@c"|"!%V8IK${hݟHIceTt݉8y96rN8+B="* ȵp0#8  TY ؜q#j5q\x %HPVbJg zzc\`]S#sUBTX% DIb|¥r1pa%aɂ&UqȂ b0ਟ lV ؄mJ؄2TY]\*mX@DHDˁ0 2ŦTb.fz> w i>&|PbV{2X:c0) .6I`y@7蚣*[@aVcӅUBrpp$`C(傍J&KPHy@@>k)icAp+m5ZZ\;NH U(U`VQ?x4tO !<>^8 z𭁰nk= xL -ز4K(;>]%dbXVx!hQe[`=_~ [A|6L$"7)9HϠB@n98 *i~#s\^@Y [nh׸ePpYUt6bimncY7 hQl5h.XtQ@k,(:w W448ӢOCLJ&%|tȐȿdP* x =+q=H 0IXV z2qQ@jPF5i% TTQjV~Ѐ0 .@Y 5.?wp`Vq&z # E@>b#̓Ԅ- JJO VXL+h=VGV^\1 dJ$Y>h+]8Vg(c\XWP{aG@w C+V"^p819~=?K LSw9"P))a<(\UST>*%]c2 EOP:-]$ {5&%|S%@zX2s'\2|rp~0~L=AHK D8P.!ЅT\?t 2^y-J14 }F9r0ϘH+DiOB- =e߼h%`ХS F@,cS=IHO%:c-`Z9I"`Aǜ xd! 1v~Mf,ІrC:)e$oy7GB $0 VD>Xl[aSS=Xz`4f>Qu1H<+Y0 @)'h`o\BF t&o}F*zIHCB)V|%D(TXtl[@%*'8AY€z{ bx9H×pe´lBHc  K5s;=hy< laG\.\TpzcxιFqmxXQ' E)H`k*P4& JgK iF ` ` \@F")+2e%S @`Ű*T3~\k7WA]Q]oLʵ t\lHr.ٓ%dbtg+8;hCI IZ4$ y3-^ГL! GyEd]/ӕ o0FvOz \i]ilSߵ4؝"#PF1m \TKKZ>R6 VBjL.ĉh18?QA/z5qAOLB|Ii\nT1Dx7@_ ]jQVQ8@ǁݟSCMO-{I-T2 2x(F,t(k Q<$([AЍ|d%hWO8O|&@$ HcX10 ETB A ::3š9Dj.;8 D0 cTD>˜rf*hT"T121FO\AW@ЂXB[?f@;O扆 T&d bM䀃o6Fp(ݪ[M/VE Ћ5N=xO$a0A:0A]'6 .‚*FhxưWXSX$0S4b+e-(TE#7H !TĎ.x7W*)Bz< 6  Cg 4E|8oiD (|Y(Iz \XF=?6-̀L :.@!+@\HA-aApJ8\G[Pp_HaCwF@jIz+P8rO 5LIxI PA.`ѬLХ-x$" ×8C.x@*`FεP]h.kjHj6yb5tP Q#-A!˷U1`M?LҷXMX괡Ct+|۽1_ hh}J 0 h:­U,8vь܃ ;HrYBWVXKL[WAP@݆9ԯ}Ch/hiSt <_4aL+6B=ټ( x(- wBc q;3L/1 <B50 BtLLATc%aB R !  $ i5c0|`<0` l J=J ͉:ŊI+ƣ+WPv ,}Q:H'$Va (D AX V,)Ր&I|q@Er?ZpcolvB Z\u`>RXZ"Q|NF[J OT5a' !krPӑ#vz)B=z 8VJB0xPIb[*UŁB6)' >J{認~ Tao $˛$" 9Hj& `X",LBq qpH$@.9.-hk-$$ $8~p6":NH2gŗ+[X&3B D&(QNTȮ4F@ :EGQ 0/(pE!AFg v!e~( ).g%V V0uPVy5)HQ[RjM`6 <8V D (8C3H`x88an.YT]+,gpj%@z!>c@$fOxbX)G 0`H1E€Qw,$(LH y2ȌBwⰸ5hg "YZd Ð !prAlpj4rt@{auRB G|o0<@~ GRP1,>ze9t3 1N9E E ;@-!P rYBPPꟳe`eZ 1p9i=o<zf UTZKU~:6B2>B!@fЇf%*X @c 7€ 9,H&a G[0#!ȍCE5ТQBri 8WEI)8 ,K [C[-1KCf'HA=p$c, C!l}a00 QO48lb ؜>,橊u Byع" dKs(U.3AX=:;VG<اy8ō($9z'< @PFM A(-aY8+:]"/ io`~ ' $? T#s$;eh A3aB;  EL,l' axGK aA$)c 5  V*2E$@8C)#ȥޱ@t:!i@S C ! 67dZEj@1&$# bh\@8AZp/&^ L0 ) jf `!w A  #['O]>pʴiE@5*=vSti:(P@0ͧa І3ߵfaȂQ+@< ?H jCdF=Z`?f"mEx+m14B4PcpKeBFF:uѮ@UQHN~(b-= Ce=8XPD N TO+z ua]dNB&*(6 Y8E<&䏳0 o{ hF^UH W g˱+@C'DJq@x>;,37B> b~,@$S]5"HODR ӂ'PZqLa O bcû% <ӲMaFC6 XG! 1cB E+" ˜R{*J)xI`0ΈbPZcہᨙ ,+ըHłI$ (~wKZҋQO`C(2NdG: yCX0Vy* 9Eh3g@`)BȢ +dNe]1 x8 MPbՉ ?\ȅ%=I-"F4\ +y N`HR4bf fT6jw6! R"ua),=QHF_St}2a8 P ƭPp#5yeC %I'7@p8LE,u8ZT$&Ӈgp u] Ѐr Ba] D@@ @A  nvX rK/*+l 8P蠃E+:CB!LMN( !8 C`@L?b%#;.`! Za^i0H-$cF c] !ƣ4@i -*!8yz MHPJ @ ʄBz.mt9(A !3fFA8QN "ZK&2cYh&R't A,JU' !&//,nЪVj$ ;>/96PSanzd( (`Vlz!4b!+A%Iha;Π `$" (C+B0`y8@5GB6A$ O"+-POpD( g@Dl D.+o XHF H  |A҉ `<:eN?ZIwg&% 22! #,!rXa\nWX`Wl!8TCfpP`. T\&Ӓnj \9 =!7E 6#868 Vc a?Ah!JfƩ .`Ȋ !"UM HM -08ƣ(<"za ֠b .b"O&NxHDZ){8x OT#,(,0VFT  -&fNJ`Ww3wN!@Ă>T H!l ! `5TE3P @<# afN)@rBwa~E@=b\\@ ,rЂCN$pB'[4›2v#( ~fB h;!u>TB.& K!4!_*@:0!`L p RS2!E.$bd~D"BvhN.$8D5X=?# )<w\$ A6V8A*"![!2J)$M1HN!Ar!z@Uza]*`[J1jCHAF `|Cb1N ޠ~ \10 rB&0UtrN?|A_'NcE/Rͻ R !NCQ7ɣBhNUp; !iU桵GIubH8u".""B!QCR+Hb!+aqog,! bDe`Kub Wlot9E 3e#~y\aA{9@~`żA fwZ!tGH!Z!Dxa?Lˁzavkxd<-@VTr`, Od 0XB\đ&&! f\O &8 3d I95gYd8$z-!SdJ$$ :g8n[ @ `]vpW,)Pz:B5B.nMT:T?Jk$6`;x-T 'VsL' ,a $:cQzL3 aHRaƮn8 O ²T[qCJ~ލD]Fޠ$ ?$Qa@Z!bAm6BL .I!|aARt;a1"9a [n |gKû# 8P! \6)(W*bWL,,P9 /!8t&|r3!.~Bp`2b;tA(@Zp?\l>X 6wm d`NF ~sVŕc\I@Ff!BeL A`@đ ,A0@=+FV aZ;`,fiV !rR)x D du !^zTorE n5BbK`A,9!fꀔs- D\N w# pPKP/!u%uң!S``@ `p)#z P!v&` h?;%AȅP30Au,i2ɄK"֥\ 2 `71"#T˒d @s*~ lX`Ȉ Oxx>4BA`tGN4F= 芆FlB%d&lBkA$*\ 8 Z*h St8 Å,x@:C/R bXC/5n"paTjPːq7d! oݰ jZ 90|Q'(?$@5\b0^"A*@Jf la ($hm<4N sGJi h>!%DrF9t6p 1XQ:eL@;`Z~:BC?ZXޙ<'cNiD+S؀ lh`Bm"P@Cߺ+ą\ ӕ?0ӃD#ptГ#; 1Ru# dtb5%&b'1 !SaJvB9N R#;sRMe H&T WE=^hDZ>Bd!<ȅp x]"5.N|A*C 8>pPHm;GԶ Ib!Q`Do8ȴEs K zЃ"GR1$f1PīM2 څA; ڋ!@,Дn]E gk {˜" 3QKU%A@0@HrZXKE^ &svTezA Hj 1Fma ,`7BdH@;x1HL"L; c DS!DS @ DkJrFePxie0Ldm|hX?uF \x:% P-tK ȁLI>I-X&ʠ]!s ?A9eeAr8Ԗ dd†nZ;'Rݡ4iWxY_1d lBk1 /)Ǔ` 瘣v4e0s%(U!P˜3>6'BD+&_ÊTb6;g?9".(#*=U j1J16)`%P׃6@O$m £\eT)^FjiH/R :"AN郦pHq m8@ c l>@Kׁwz` 3B14!Π jW+];Bt K, EqE-,(bZ 0o`'Hހ JUn;n!r 8 S r 7` 8ް`Q 9[(+EwDD' 0P7q̄r!F Wp" 2}!0vjvpy  02t r0S/s! " 3P[ ,Q;2v''@&o AdsdT%(eY-CW0 da5΢" @ X'p$a:P2E4& uG,i|'Q*pa:NT`'"r0 'B u!d؁TVېm{ T1#Y "P>8?Vs}Z! a<&m a2Rm)(z1…G(4Q6"#lpf } 1#Kq'caGzsqBQHQZcޠzB9x4E5uR%Laph @ puBtԔp1#UBu y,HA%ZԳp-" Qg'Lϐ # v7#f `Gp 0VAޠ"]F7H@! @rw/@@&c1db#)#8,q"tL}58i3PW'T9f/W+䡟 fY!S.%&|}P <q7P*'?y1lP ]B&$?49 '` 0'lDpK1BP/ 0#H3Fqg?*qA2&`= hP#(FX)R7ޥ?T1! 8Xr|$*0j "mTqQK-p3>}JؑPhձQ1XqP6) p7 :ft„/#Q4 P`֐yQlPoLP`C1€" C" 9 I(*Wr44` {? P5 Rg@ @P>)`@0 > j 0D'г0#ysP5I:C[)AM!*q  XzQTX#"1A WBm0YCsIp  ^IQ0)Q ;D,wyP s` mPrЙQ { PR d& '2(@e7#P<  Q 7 ;` ֠@btwT.LQD8E2ʺ 4!"1cl7J~2bda +a` +V5'@3BY`fe 4_}# Wڑ;r[&1Kt>*20g.=gMsPKnXz3@10$Cv C`B2 jcSk0OCB}7KӧM!n+;}` 3bzqAWr`E@p-?Qw" i$@{?2YEJ2 o ᬮ+{ <:}koUpaf&M ,`bu b >&?E@"Q8?p0//z?$3p֮W%CnMQ {1}0S#R'v!Tp B,O 'dKSg>{@I&D {EXb:AԖ#"b 9U7 r8a8pD-^86E؆Q$F $Vټ4@ $Z@2qD ". o%p):oMq rHؒ)-gA >7qP℉몟~A <o#=R B8h]"$Sۛh T<T{QW*d~"9ئ NA H:(ai ,Avܢ QxDWl*ȅ&Gy ]B # "o8 Ҁ.`("J ZcFB5a5n #eB/K`H Z̢"D]"6#j#L@C - 3z-,ꊭ.*Bg༨8OA6218  [a觟 Hʁ%3?4,@N&!ZhؓgK5$x# Pzd"dN~>|X' PA7`& #\!5 6R "38hÕ6 g|cbX7?(W_lF%\6x\y#7t'bȘ:m #E),֢^'hKH~ qD WHhZ"4ظ;; "5 y8PЍqc=k "FQ$$w"lnqylfEW'7:~ k$6c,>h郹~9lغ!ҧhwo0 ]^!2iɈOdzy J$gHE>p"9"(6/`*|q$< 0\|߂fЃ,bDhҚ>\gQ' nLCzF b"`S-]dayhEKtq 1`N$ʻF؄1Bg$cH:p,JgY" i [Fc~ 2#³`1AFgb҇>PG mNp, Osr& c!&IHL4c9!$Vq-p]cnCxA-~Gaةsʚ(()2|ѥY.ˆP V$o Yx7(`0U}#.IRE6;9l:-xX:Yx` X4t-]R0i@hhS 9$?@q BЖLP" q̐"ŐT&Nj)6~ bNMoۼx>+GGBPcum)^CEh|op m S"DSfF .n`^%@-QEΡ"x( !E a,#G|fEh:Q_tQ(5K "dPMQp$@w6Vxc ˂8" 0LEəzW؄;i7[3O( Ѐ"`+H`[8M|=sd:q X 8oۚ>h ͚x`` s鋌,`0(y;y5+3v 0i H~6Sp9BKz茺hR J@XU`'U&,9@ )Q0xz x8:cyy ZHgƐǀ〺 0s@ a*`<x8WPǘxTj .PIW(8cCdR]p000#PxZ5 @}`(8 DH #"NY0('q3\Ō >hĺ i/"C2yЅAIO 偈4̀] z 8sD6@pH:0i!QMX=JL}?okGg(9XB`BBts8-1 mJ«i%Z8,88(dHx7:gHbВm!FĪ!RL+H+~A6M H0 HV`Ԋ/HScqx[6kq.(0psQ( g#,H9CBL x&䱍\a`0j7CqӜ,v,W#~ ~ɩoph N@5LVb!K1:8E[o._+ȁ7 X:82M)aL=Bܜoz`D`+ZG`0ʊHoHM08'B@ZU(#XPr(<.Pg3[`0ʇ2:`6!Ђ6H'0,U&:~A9P:;K`r,,Hȅȴ Ry>Xt ch gR(+Z,25 LE~a~IY"(K #LHBaJ|ȪgNAb  "Pd` Qz3h1h V p] @x Qa yz8[QI(@Xs $ (`/KHҘ;P#W+W3XKVyft 8}nN cWhˊ\7-؆툉Xx%p9dM h ьE09xNȅSAN`>9c E_$MD#=xmh XW~⧘ ̉Wcx(Z%,xjyjK@6P (8A6Mljp@ @ nad@Bg/S>ᣜƳ ((чZPJ2 o#9~X!bBp L܎ȈjpՂ.k?E`W9~K9cIX BT įذEMR(,mC:Cx_ɼ-(BH(Xь*K + )lR 0(0p 6:j5c;c9fWUpiUNh]r=WAUZəؒ%:HF3=Zȅ+^'ddB9=8 nLb6hH L̆P(hiI3XY\Xg0Ha c!XS`mJnCK`ZMo{6P h `.XZVPqȖ~^:x}'p)`MZAJB>OggPIha-͂,8X&`( 9l:rh PÂK >% 8A hqBD@yH"槙 8 ABхD8@9 (3((IY8x0`|Z-s&"e 8FU+K 'bsN;lt#KM2p=![lHn@X$XgóS5,j:䔅pKdK\}ṘY:06pLBx(*ٮ Hu"8՚Fi' 2-pqgЅ\s  p K @ 8B㡐 A1X>0eV5(J;(f-qLxW PFPX[z8-!:MQlMV! /{?0S]8E5x*[hԗ`ThL QV0~"YNb bhQ298\( pC"ܠ$l(WiCfHp@ET{ȌT FfVЉ98b愈jw`Bx@EF;:'m k(DE@PQX`-(0(09H,e ;avv"~:xƀߋ`3}uuN0NU$N|&f1VDn09W B()0bѷ`sVQ)  "ǎ? )r$Idb?uĝ @" 6zv^}H TǙisDB{CV!F7,c"Ĥ (p@#8j+@>.hmO)$BΜ PXQL)a@H pA ǞK CDa"1:@h * . 2 3OuA!B zN *m0Iײ,sŒ `P* @PL` APpPlK.ki$r!q*@$1έuGq؜"GL2$1B !3JA ]F̰ FÉ.eLU@F' DqNF q-@P @ DAMQ9At@+L*7JlC DDב?mg!QsG*@;epDu KG!up0,g`vF\;@ѭ+WYWd@Rۮ%SGtr…J<.1`D.RLQ996um !h4c1E 8lE? qF DNrVv?Ї0K  n SH#kK1P"XjxD͝0(GQa}Xd:Q$0 q] & P  X0 VDl4@uSwsH`0 (XNr+GP#HYS;\GZsV)& )~jx6^)5E/H!]ʑr$&Z!͘H: ,gܐEL1 B =2)V;)1Iaxn)G B X"S q+K5IHrh!r䣣8XĂE>zAgPG 50E!~/n$Rw>  WcUk;e$<7AEh@j:cKui 06bK9l=0 (FQLr1s#Nm2V|BEچbP?rG఑#~ s do2DH1Jĩ I'3t j 9mIčlD^uE@UĈNl Ҭ6Ok{  d P0#me؞ݻx :QqH{\v1%䝆QN%42Lz3GOǎ(/)vH @ gtJpXͻ7qou0H6^μBuP:.8X,c41@ Bm @- }6P^R9@@ ] 4T(CAusF\飏fV=U(s0ࠖ\le g "'yS0QP6LBL)0 "[JSbM%vYgחd )c E2f ]pî(:P`(-b)8G*\h1!7;pSK<D"g tC`VхU(Ћ`B iD޷` ,Bhl0.Nq.$K4@_OD"ֵZ9Ak0z^L bX. PP7<@bKBH!B `ƞai  (O7p`C-v l35h <>v"2#pk@ ;  Ėm̥.4-MÐsk@d!x<7,CnOY"phP'K@5(bPD#B p1rH e1B0 d*R^A%"4b a/ `ٓA] < AҨ9뜢A0 J @(b.P ha B[LU^ؘD߇BQ ZPa *LAiAqIO @*, yRHG0^=c;RzUOeMH~5.2BI ^9> n`v gCG$[oyoB$cܵ '!B StvCF̈1[4zyMu #$G[wQt*@HXE C`ce4X@T`@%uze6 ЊV|RPř^ `h5;hK o88F0ȁkb0('j Nr2V 3*)KNGv@fL``DQo|bdqtn=qAMe`ZBz(eX{0 |◊F҃T5p@`pXM :tay a9 se a`3,F;F< (Uz8]̅ST^HHhb|qB}h/pmN4N@rA0;87K^`,;4 %8@8^ a :G1jN)Gm\H-j`iVɁ sDZ]c`yXc _;ؿp33#QZAЛ-5^&0Wgن*qnvjFDP#H\Ȃ9I2?#wöSh n.v3ݻ]6HCϤ B)6a @_-PF!AՀN*7aӰ:t$4@!00_f xDӏ|r1%S$ sP3@i 5O0,`j% vXf'C,((&RU.x}'Fpq2 "2`w ;['F(`~QZ`2w \ 0W5u\5@ $ʥ:åm 1@p@<1p5XPfȁ] p|P1Caa s !Fq@eh5O@1Ϥ@W@pRl,v,oGFp cQG - @H:"APWM'jv؇bEp p|<;'p 9pqUA*P $7PRtEP %e&Qbpr\0=;"'G` l1($n0 u@ b$}X':c'ȁ8ypkv,mva UP  mp>UpF3S KP 0 KPT_0:ZzdSP|= P Q 9"pw;s!#Rr4p,0$`{"xwv pk§P#;<-" [80b15 `КIpO#T(5VnMA U3p0!5dP56mq"5 u ?[@maWMZ^p,Y ИHh)$] C }m䈎>9#B0 Ġ $TZ'r_QZ#,P(LMV@f9Nr,>P  0y.I噘1Z v`ڠH5y ( /YB1 T 7 Xk OrZ N tZsP5 "3oP0 ϰ"W= "bPn02 \bX &/Yɘ vPڠv)XMPijQ^j }zOE <-Q;#+ a$ 4n@%vS;z4Z䵄WG-Q$suV /yiLo/oc7A%ZQI.eSJ}$ID^j!&7̆hɗ}9 ?/jт ^/W p zy)n9v\&5~SՍ^b&ݰ%Oڴpy:LH^CKP%B#xbe.LeZ˯-˫:T7/ e dz?;`T-+HAz D@Zɕ73'#`79ZIbnCE v{GJq8 8 8pE1@ʼnPpiPyfv' :% 4v@&+<*6<)l@d_ bR A"uJ(aU">r8AFe9x)>tVIi#{|ad5%ĸhdpoCP2XE e(Np– |s@ K xGKZmb؁d^ϥP+lJ fD&ЏY1*-a3x ]K2Ve.] % Oc B" Lxig9do8FB K!aBBmq/ b- QS@!b"p\n@7! H%Q T`7q,da&hI@@,%!1|C!YO 2E,\&1b#V! Hq\bNd%$19ANj-f1a>\L21yE1@=A pQ\-w1gY7mpAqr`S [/I-rN! %R&z705Ga7%<Qސ3<(l AehǗ@p^y'`0i8 oHT^Ѕ.h%+,EqWo_(#Q/ |`Ȩ/`"Z<r12& O7gKGV!0%;@ld.SQJ!׍LPdHzKZS*KBXQ&:1>j-,]4 EDTpCGȳCrRBϘqQ# 8`G%Xf%bC~Ica#fxA@-qM_뛼+ P%  9|B~h3Fd`) *Jَ+\DӗX_'v )x˄voΦzK!+myYû0 ЃI"%&`73 -4{A55\Db;Y3 ^t jBt22, ][VeNT;9|"30?!=S.H\H $B0$sAt!o^ Is$$5D l N9s1O%L`0z.Ai9zQFtjJC$Q .bi| [^Hԡ{XG|2c QK)'t.m_)92ۧ@K;;R\IBs흦 ~8dqfwly VXe`VrXZ`P2д9#P\`8HRIOb33X{="-H_:7J7xo@Ca#s 8 P2`:6훏Ρ.LXCV(PQ 1+8 7lP|;R IX҂Xؐb]c%ĚyKм4)Jo2x=Xz{0ZZ lJPj…70 >, c{B7h) sa0j\*!22!5?_򏯸~>†K&*& ͊ X( :0 q&8@\Ġ SrF+29RF QpC/Bj.@Ai-.I$jx O7`)2k<y{*S"!I 1KIEQPlQ;@0- R"NɳbIb 8MT#(̥kB9$jHi$[z(A 84F# zoh,h &|,X S0 p.ಧ/ LQ.Q|@Z7 sx!;C0XCP$NDЂUؒOyG)*VxbȊyٸZ(젆L\ q\P@8'~C$p[ͼE=5| m7+Q(b 0b1;`d FQXNQP~Șf1J KqCZ@#7IH;_*FY.^ǥ/] رK0Sڌ~ PxЂ0 ;~_C߼G9=΄.8$;4{ lz>:F89*ЕJ$V0Xn.,Uѡ0LxX-Ӂ1T  ޱXG;7tj3Hy@!bGp^C y0#D H Yd Bh҉@&xTYP{Fb@yy X9b% Q+!#U9q>Y\ `lRS\٠8! O!*?b8DY8\ Y(!iXS? N<ڻs , DMt0qחxm+I(P䇭!؝˗?P  G(ah\T\L`,K(UOPN**lOLȾk|.O]nDR1(%Ր@(0ҔQ (;_h(^B4wٹ`i VX>rP1 <9s |Q}OQ$x9&h=m5Q装j":7,7jO4"OȂܡ9'9`O EJ>:0T,%5UXe 6`fmfitH 0(gPYe٨e"b;b`ɜ908U )VxV¢  #j|>-=ehvxEUwbH֨yIC9M@6PV0!P s,x  l(;a\́¨F킋& EM-]PZS MgN8qrKՁF֬Sbm}8ec1 xHQW[6ϻ`K[^@5\DڣwP8$;: L76Xo [ e`wP`2ceX⅒D?Z8|3#f? bә0H\JK2Ѐ8J L[~oHp&g  uF죜 IihGL\U } qc :MW9HK3z. DU'xi8 e` ޹!q,G\> ;OMI !QH`ݨ-ِ$ '4SLwQXӍ,X D6(̧Ala98exፈP/@1BBw71yy\LA51#py#Pn4kURJqhPajl],{[qC23?+E5l'YF f<$X@{OU"[0X(;m 2F`k47,n= `֘v_ X'㹆Dfoaxb0{( o L`({A٭-1tsC &{%u;s;K 蠪A0՚45O0,J;" b6!dXU5*{(Ip7nD`{7 9`<#'0X[xgJ3>Dlu-3!!Y]ʡ()I'%@ 0zb*FjKzg1 1ݘ%g&# K`[qfH빉2X+_{u]V @XmԢ(!,i5y0`K0JcKj7x`wKp !)-GYfT=C!%(:ʊyNn0 \4o4Bg,r#x-J6 oSl?y;-Z>O1/ bxNץ ȜxgxU>˛ɸxv`pP, .eJ bdHRbtZ`^ 92O&bؒ@ .F%W ":u&j#K,ٺdKٰ#.1^aWKƎ]&ݚaT?|JˬK '+8ƈ5, 9qvoZ@`3n1ȋ"2̚Zr9Şaa p@ L6m+A?p,02~qo 0 Tk^XJD̲C=#RFjLsj5Plj";4Fc|ĸ!KskdAB$ޅg>.qdE#OZ1%cC+F|…v0O^)J Wo|;č ^mF F"&v|AF`0n76ȥk&i{B#WYT1m5+`+B#; ^L݉ =\<<~Pe]q5(/+n4Z `٥](ٱeI?pѻ"5LEJ"HL`Q'$6H󵐼)O42mz&B+.(npc#stxLOm׿ϼ:<qIB60$3pG#0.2擜gpGfj. Xpќ|費1r@A5ϵ0T1ʹDA^M^}[T``Cqŋf Y5 7 c«i$ć AW }^838ˈ1yzpV1ttF|;}E1AD .@@+C1ȡ4 @_0dJHQV(M1 0ǵ}D6N7@@-;`&bf܃),[񄆯%l̙|ĂK]Skah[|BuHRX;L@Ո ]*dY#L.O`DA QD#ZC,p%Ќ%^q\%<\E+A"GjĂ$ h JR)b`A\L-glFmcaěD X8lډC rj%J< lPii|j<\8EQo%]7 ٸJ|[ xyES/iSq(j@Q?YA.J?U5 +2zBl,rUC>pVPX7iܜƛt-F@c*« tga(s`&ˆ0AS2cT6BVǣH*=Ȁ) uJìA# 5cDn"R-VEfc 2b,FS"LZİ9V"x+ju1j e3pZS;Dul$#@9C8.CE@p^Qvo9X'ODg)d`$lr8فA1)Ch4b&ptf+AVLF|=knd/ j?ClQRtct$Qa82ln<5d,OsKsF$lEQm.}@F`HXЃA>F(Cij(]eu'kFj2D=-p"iu~Lq bLi7olj?yưr( |rsj]#Cx!4t$AFdIoTs0 7@YFtB% e'KF2pb^aD*gj-.֠IdbѪ6 :( q$aLjklfi䫤hd=Cdaq#0@x+$u\cNZhIG@}*=֟D4 $6}b"%AG*{n))«jVF7( 6`j6EN SӃG( βC;p@ i4;% ,sG.Th0HȻOK(Lbd)"oZѣv"jh!>ND*nL9APy+j xC$! q> 0=t)b⡏S(C0d U\ $8ڞ8!h%1j&LmIMp4;D|7 |0~R` oV 9b Q1adfTs e.Fc)CP>9! Md<%%j$,K@!,41(2ӆR#H>FJQ "܃W.yQk"gGw(1j_eHB Pjp!=F%/l9*R| YBJ3$mTC ԈRBF1i '>r8ga5hE  ÉtB$-g&'6Ɖri8/G*3 W2r(NhXnCG@!!tP D5 LOcxQp.*Aү IB%"j}`GJ&@%!@')$%: Pڧ [l ^E,"∞Ap""P 2tiM "hH)eZ HO6lXf((`&ABnfp5roNuP!ʠbA0!` AnJ. ! M̃QF*Lૐ Q(d!dB AI$LGIA%Ӿ+f,bNQDpIY#HI*)Gp`:pA`O\ 0a!Q ˔q!!!LBbADzC .@V:ppa)v%8$`z*>9o(lY"{ZB%N&)N&&X"NFf&@ Ȕ #%&f51WFn Rxy`Ob@ln(!wRnTfxba*n`ިJr)n'&‘MXILL }D8#V%`(gN *`#ⱒ v@2 b) `"᧖6O.P$pJ"HG EmGjj2zb(j(aI!95e@ L\@č@rB=L0&,RQV8"09JHzz&[vW7WQBF \!XanR(t: 玭c @ d@=bLL0!pexa 0ld5n@N%OUfLc2(Bp&<);0jD Ne\S>G@ilޯ2FOIi&"qkgD0z:3XC(W`11y*ܬ}bY~@U!mbo˔R!AM1!qnkkNP%<Ǥ#5m%LCPEafD!R=(`I4BJR @i "rWP8҉ANԀ؁ ! a5hhL+؄GB*z1gZAJ0J(( vj3ު [wNLVnb*rVA=ne5Q@ A~`+L\cj"퐛lb&AΒLOMPT+j>2B簥*v/3B&AWfvwē.V3/ vvx'c1h1`xCO>dzwj""{w8:=nTa]Ua8^ `ĠҖ8ʡ7!&nVly1}H}HJ&VfE e,oXrA HUE!GA*m" PgdČb>r$ kuRd!8wj`2z1@i[y TNJb8zV !a:xn56|y(5!~]`N? L RVaL۔OU*YdM 7b/!8a> - AD=egtEcMZ|ТRLHpؓ$!v @!@XgJp?a2ؙ`s:@O`\Ajy`y8!Z LA}CԤxVc \ZM&!L1F Qn! ^ڕjڤQJ9d7>(y{#@(Zz|A\d۵?z;?n&V"CĠ @{>n0*pgwW*jz*nM("q@na " mPX9;A@` xߢh:ݠDzxh(ɥۆ. rb N#W=@){F,4[POb @dTTba@aBFRBΨf # \(Լ0O2+`!J]P! ? L.+V :|1ĉ Xܳƍ#^B@pҤ!%T'\Q3vY*as\"P< -!7xÕ(\{&@"Ж iS;m(qMx,P0*mZ`ĀfM[EWNxtׇyboύ ܧc3%6p^A%ն۸9 eE `y5^S>=F SaPCU 7K;i26=(K,ŀ9v 4z$OuWS~jPv͵ WR9KthZiz%dhY5 L9f$*. 125hXF c5yVCȐu$#0-!EB@zBtާ:C]z߁iRCba Ĩ @)$\]7$N,avDWCzܠM>sC^A- !XOvP1oS v[x 1jxkE?^Ǟ:hB&-)5AT5eF̊c?Èb}VZ π[n@!,cͷx`$t=Do#_$$- Ј~XG2 XÃ%u 4ӄiK\am 6WW2 e p)F[T e#d#9r@3a{{ F{$_!KGgIg;jH,:ؘ -`F݈UJ? F|L&-#}` +D7 %K[ i 876ZBV7;B ATܲZFf\:w"vT#g0Xb,80΢]u(p~7[n Jf3lCR(IHάs |@K&2iS* r/$.9Jk87ae8ZR̽jZzC%-LH  4!1"=1`ITY7pe''"rDe'~K0{2KHQK:Te3tNMH݆%cy BM 3 94^kyF n4Gfc 6EgCMH Lm$q)RAQӐh`?ڸJMXOԊ᪒~@\1~ cЁm]]9`FX&ktAePttE $$Xo- dĘFؑ౅P %?BTӮJ$PKo<4a. Ph-2m^/d7lCbRn@G^B~aRE': !4 8Ky#; lD*bA01?ƏҲd,` ?{MFѕb ȏ֋}.Xdž *}Jc)! I!/Pə!4!q:R^86etуx"L1E@#h%.]ve)=j P-lk,mc P2>8H"$RXo Y#7]8y$!"cϩƦwP),7Ad':V~'/WAnM1]%X2 P=d(!rx0YՇ"t;_J`숯d8~[ Eap}-L)[EM1 f=Ae@$XjWNHM{pN%$S0aŻ  l֎n*ľb"N0.Ju?W~ toPhzx[PA{.oH@t #V4( 8EyQ']``44+cM=v5UMNBb,8BUqh557KPXQt-ov.UP K@wڀK0`-y#8SG P=*o٣0Thik9SPP 2@fpi 8Ђpp' *Jp9.Q@S0h$`$k 7AQk(D "/ч VQ.;1 7+Ҧ-}բL&}C=Q#Ӵ&\% ϖ 1 ^.csxS1 BBss9֥ $`!ZrQI-X@!`` `xm o JR$ka)0 t ]@0 Yf 6ɕxfB\Ez G.c!))V`G 4.y!]"$1L&^;r GBA-`B#BG!K qm+iss8yS%а  V$inc7$Uz+Z N|!Z2! Y|0| #Gf [h_7 ACR);ph3JHWyy@^g\b*(/R BN%c{q9t*17Y8V+X"Dɓf=Cz LE9B 1jHƌjb1 T0x 1ptV`A li < z{g  |+@ϛ  bI,2Ӭb$QAV$B*Z\pD`(Ca$^ Ζ޷cA14BVI48A­]$" 巒US0b$ Une {O3pH_(h A12pP6{v_-8o$ x7u0pǘx1I@@0hpp0 0 2Ftƶ%T<vu-pjB$8]  Z_62^.~}3&߃ 1͋l.$pK0"~qE*16ƆFv~ddE~8Y,ϐωp"2 3!@@n~nBiG5qD=~(MZ# Mz@!t ӏ6Y"0 kJ"P[Z%F@-2ZJ #L,X `@@&Xh" b@yOY 'J]_"„ 9.#Mii*'Fc[NCޢLy4P J]֢͎0A0tH7i]}c[+x$q@_F- і!2\ܯr9mew?W6W (:X衎HNh64J#W_ZD:4Flc8Vhj!e bU"3 p"I:J .)yN   -Ji.5郰XK-,ay0* O 0 C٩a|(ȭY`9҂>*d+z"He@ "^O&RtlL3Q5.8]6AfIKF1p<bR?9LdYPAF{*YV AʟWA&Zbt`ǀن-!]H PDb1o_PyGyЊhk 0v,GpFNX@4iww'B86@a(NE SbyEbT3Dџ1B!@Q @hG0S8cBE8i#"OrH(@?HN.bBH@EZY%LcYQ `h 4 w -&k3 -kMҧ䙔AL`:󏦅44$*\ dmG( 6X(QxI X$J+OJ))jsr(1851t:(x{ S+ h݅b\ V8, )Hx^qdQXb" E@V,pr _ՊV+VB a%8ʠ YU 26m8i렘6)h)h4h ey`1'<RN9@+L##X~D+|^pz>.rZB`^`-⃹FLb"Lx㞠Ek {F`݁ ~47ʁ@x#z0.dڐ)b !PBjIH X_+d`S I0U`#ePIMS.;Ъ.}Mҙ2ɊWvhWJ5BzW 7dD'Ȁ vd,5n [48Q"&)Y^r&XaZASAY9 c,z'0&i}.t.#$D0a@>!xk!%t6uGuh HP TZ 6Gz`u"i [)( IQjЯJE @؆@b>#s p$_q[#A'0Tl)G,;"H@PX6 6 Ȍ0,< 6ks҂u XѧYD'1@׈ N<+Rv۸ O9)CK?KЅS )KF4ظ)Il2h1I㈳N_b`aA xC=u[ x*Xb7&`&P0P9K$K*bd F*{.(Yq4)r!P!1[2Ѡ]VDcŁR[ʉ^Bhm Z` yH#g~臜~@$ Y^15@`i()VȂqFb b)X V!A:(0`aoHrq_`[_x 9%R8ND'0 e4Yߍ^0rS =pS0I#KIwZh ~\egP br`w6S̳'o[#/ ND8sWW@F2فQJ@cX4i?ҫ3o/ 𐟢/4~JK*̑%.L`;O.-`H(({=zBxDA ,\DPЯ^:!\xD}N:Mg'`Q@>)8.,+1B]H. vEuA:U0 e[ X`](w~Ԕh s>Kr17^HQ.phcÆ/h[2Fb.$ 008g@-3Q 8j,̚ޡe8p4Ng53h]5`@$#țo0 x9K2 0LZ300*^RiPЍ0ёmM6`:  ll>V6W_qX@H ƌzmwJI1b%L9ƅO v MVpsUX SHYY8^++=lk2Nca6$ iَ4`K6ZXu)V0:f صxhj2Kȳ&9qpb*oH 9hj!sqO b^1x{\)\8{*R!yx"3 =(My֜)*fVKkxLE bX5peqQߡeQ;%Aj$%036stbH$ҎDH 8\pAcf6NJG(Sh𐁸P68>[ЗUm AnjZx(-tD,ED6۶QJ† (`ⴉ&b̘F59bqI%`(e)s&͉)lMUs'ϞEF he@ʭ[9$ŕ+xsXSǕ#P |Jk%&pcs|3 {ׯ}2ͨG/.&|@NV>36a"JuÅ2Wv@!ZbZX A ~3`'ɴUR+qȋ (Q7ay#AB@XjȐ.i`H,PZZ~N*P@AAm( PWHSGrX&)XJq O/f3@A383ѓWH VQ}aT'f}@p'"ƸbLf{f Y1%`U mO1}$ƒŬ9]a+^@10BDL 2jbZ)D0bMp5q 1a%T 2TaŁ7 bH1*$ta) BL $ .7 i (HC.>83N1dDOrL#M-l@xDŽxQP@=DSزYd!oL0yM01|@3wz1KU`fq9Ỏp_zb%dT(toӞ2Z‹nמ .Zʴ'v;&; 6x Y̕ "uĮop@7|+-7HKMi*)#n"nPS;Q 5Z"%"MJ:pD-;$=_O ! e: M'eN1e Y_mo B<#3t#+,@q0rLS4s psb]2pEp!L< mC Pƥ& lb D - NuU" a $ЏOCu1 o'8pbtn(G).P ?Y6/q SP~Qy"]HмzP"B$M6[h/&7 C?LȏfŠMd3\٘|@0;Ը7!W9ewyàDAQ1FXxgp >x~!%Tf"gV\Q /v.An@2(-Ta4 -b H'° ֈa47W9K!1\@ .A~@pUuT)@ ni 9$Eyo>,9JP9 ^ J7XC'2%[Z!c k!.Q/,-v)(䐆1bZ 0-а93GCS%$8A@r"y ґ*} #1# (F?.A0Cs R|SډXt &1I kg@D95:HLMaNFL%)I-t">í(|Oy9+8JWdiݹ_LN`XM,``2F|'$L\f+O` #PmhC![+` \e1>o`N"PȨI F)ءB 1K5#q-0X]1fn bdPvs*`| 0 ȃozp&/셌 JDЄ oԠGv + :&jIaKPt2q|`@ Z%Lhae" m: ,D02Ié2 >4[xxUl69+ZQ=Ff#J5%NbN1aP =X@ Q*Ĩ0#+&dސVO$z|!`klg/=.; *CzCI5V[Da؃&X ?Q,{|YDp$ C?(8JE*%7yӘ$hܕ.kXC l d,1[[ш0H7tACP LLԃQ@(A\$˛ ]tg-0yɼA1 =?P0/1Z+e :| @T|`3R@ax 3(*8zwr#uG*O#0H|D8Ă)Ă8a'tJ $N!UK$6$`L ^("J8-M &t0҈p:R^(y<"$aE!W"X9@1 77[]DE}Q+I1:0$:1Ѐ.A}BeKL7 @daFI@W8(H?XҠJ*(]lX=QSA P_YCPt>U ̅5\Bb5O1$Y_: 肑UT@-O-S?Fp B9V@Z| M\ܮ܍ c9$PGAWdPx}A5DN4܄0x^H{ĮЂy xP[F䅛I|C"NPPL*0`F3>1\YtX"CAC= ښcC+\%"%N%Ȉ+| C?V<Ór7֜$T1(A1 '<: ?T/^IL]0%B!:A(d,  `@HfR,n@#TLÎ}' !‚M60KC6,--pH ɒXI틬ALHAPXە2=DIHOU/8.XSYdaAA  F ^r̚A+TIkZ^י4nWA dYTnZB͸B?V=Y+=k $YW7re4xZx+Gݐ^2k$_;M|B G(BvKAý`Tx'DTHH-xӄ!, RTQTC (EFDS%ؖNB*İT)$:$1dT乮% Bմif]ejN&Cl p@ >Cy(/ 苎d®T6pFm$B Ib"2$zHZE@E,A,~PJtT>  t(T֝A%70p'Iʄ F$L7lYC=Ӧ@-{Gr[c-C\"RC PprFM+=f+05ih-mDNz%FEbA\FHc39fYYW| cB/<W"F K#0̗-O6,B?E?@A?E4T<@d iA҉T@,9(Q_׎6sB*Ah4L*t)tB Tl\R3%"L,HeL6I h8 t}x3[uOAxgRO bL\0"#c\כ)(,MX[f`|͗{\k"ٛZgxߗ J/#7$`@/LGZ9nxE&/?`$P-@ P}:#B,vlGE.D DA>ݫ@p@\dJIBcaCLdND%ġS ]E a#:j%,ց_}C7X`zH[ Oh  Np[ٗxcB*.-mE*0B*M?@/zF1@1|t%Z<9x[&860.(Aa8d<,d,+@R/5%D.@ Lٳxx-I@?^A WGaKLBx#d~@+^A$ ̃4_׀An ~-8cd_I݉ NTFeXlg_Wl8X^E SULDxS[ÙۏQ/̃.B2.22 4742}T{,11p:8Ʌm%@@i I.0% S:0[''ʺ#L3@^]XU @KVw?غ@G4" lзi%[I7kQWf &}Z;(k@[: | ki L[NNsU0O0o+#s2vU9`kXK6lK=vز`@OF,}ԪՄm7#6G$}ig<>ա5Wuڴ<ސ]PΛIZL̅!.Z-Đ 5BEo$beb0:%>H '@( x@Gl#Ȫ7 he6[NgtA'4C4iv8 )"wn\侙o ٌ̲Z5֖`K&0>fң`^f@1 F dgHd@lHHDZdh+OX" o9%2QXPL_':QƢN;)a8X <+ZlƖ#, Y`A=6嗳(8Y, w:*):y WZ,,Z"Z$XNtzi%(R=Nd9VA70c\b5V: 8Z՘$j9Ԗ1Tt 56«q IYe@X"]Å)@)E 00:%3 ![O&w( vXYq ǣ`4PD>D2"y HAyO(4@XEjI:NIsѫY .ZCiVMku#'a'jF7,(FD3B! Yxn+ Ñӧ:D ] ۠@\a|oxC1@HŸAAq^-)^Q޸S*T䈣tC1X(ЉP VE.j l Vt :@*")I p@Vҋ$e(,plb-+[I T1h!'Yp!=r8Js-yCM 9̎/0+ P;7PLjx$x)1uB5c&;N> aP 3'@FRqmp#=PC&T `A91:dP EW/%Xc"1x9PY8!lB10BظA\pA".xG΀JU7ƒAKI!,-X1D*G0R _^ErYZ%fn6K+$Ea#ۣ@KxQ@:8*LQt'sT'5l@'ܖ>x/;l w;|]nlL 1s[/%coZ"WmMt,EC9GoyC?ъN /Іob E2h Y f]0H@ ^KnPu@h#z@BC(Tx[j\NNܣHdѰ68A I%+\  }'R2%fmR @2$hl!r0#mMMVCru,!4jђw'(ܚ1ŴaTIs^Yirdx*ULgR+89e`'̠ B4Zې `&.恌0|a{0׉d!E/N`>G!| xNY ^6_Y;4%,<% h7bI[Qd{9`yx#U,n <wis31F$טG/9X-NC]Ri@n`y&3u8 'ZXo m쵝m'.D g+(@68 y Wv#=`Z R0kIOa^`Ԟf]*  N !%ԯ~DaL$hI>,~e|IOqe1ʲl#NJ#@cV? .2+Q;< 8 >mR%`|@7i*ze9d 7pF"cBjXHN2#q&U'-A9 A/Axx*" $<3!* El>M7H(ajJr @ cހ\a@ E_d {"bcb$l K(V(Р΀8 W0%$ pbX+ZfNF [8@Rm :@ob s`Wb9\UD0T V$˷~-O6#Vo$$-N  5N`?n  xc?Z"v!AAĠAF"N@H ᡉpޡ I fQ"%``~*a.j2+2db6R@dAL`r,dL# F L&*  A@#on2ΗJßl*jirn@o,8 n@U:n1[9U0c'BH\! l|.a9  N$VV A. ! &at\!h h A %PAZ1"8O /nH`E`g$6a `ČLbd. h)`)5li%N)łf,("F[#̀Vz, VZ"^&cH=Έ#g Ό( ./J`1(@0lOE2ibF V07AŲ9zx& ·lb8Z8wd AQ>7A) mR:ƈMƲRW0j&7$6d"K̬$%bbhbAr`* dS; TO5+,l$`$̀ZV%!Wu` Df` 9,(c;p5`o&3#0B`'Zkq/>#\<" Tt]|Yl5(csMឪMei !b*=a5 Pg ޠp(Hx@,jnB6%1)ivcR]:;`hj@Y8frn$(LX"&oI"PbUofNu)UÂf%F/ %zU_@fKp;H7lC: ZPW,36V2Hn86\ h꣼Vu%Oq!p25I3wN&5'2p`i0`b#3ąTR7` o%A7-*16[ˆZN)9KgjP)k)G lw*l%4os$Z"잲48k6i%(Gnrb 衜gX^! 6b>]Rעti`smTZ:$FQ rkFc16ldB2a1 x4Nq H&cu!! OR@6a!XZuZ &NV/\q:s0)`oLB'o(a(r*'tDRo +0XWïf`0`m ! Ą0 ;c2 rf389:mlRH;+[yC RǍ@,b&][B1fYef`bnM7t ܄Ġ@&TKsL@ZA Ac7K\3^hB;XF V!'gq*$Lb"6And2+BƁjؕ_!85`U7WABAxf>%9 kZbm2p>W>je~opTz8t]+MV``nl&`>/7 `)!=V`D A ʡ(H!!3; HuyT/-j39k8+X:es`ma`6 Ob.ԏ%ĩ%0@-(:B) RP,`2Se oa6.1!UKLQH`!BgDt(vv4C(^ 97.4\CpV1T$ 40B`CY@Gqb:YN5R|7uz!(%]IJBnze* ›4-.52hmd!a' n/F0"ev@;PY4NEY8J ]@RPq% K;1^]W(g)`} *`F֤lMo$ݎ3N<%"HN@׍ )Sa`a=,lY` )9f'j~(TAe~9҃׫/b$`lA1GZ @ 0 KF\p1["M W,'\#ȷ9쨥p#s 0'9/[(1Ŝ>XfΥ0^iN:5˄ RJ6nF'0abV#۶J1bTd9d &!oDϊx,"UWud`b 1cP,e((i )eV2G. + H1,b@C3q8#Kߞ;9سknÃBp(!GŃR&AE"o"G+ NF`+p㊃gƜux IDF\%GO1<1 ѨH1}K )+dPdo|vV]!-3Yh12]oVDfD7C&9p+oX$َeqfFgG  0 7(',JD2 +a  A STP4G& ' {XS5?ǬA*wT3&mDtD4 =_x c ?7Fqy]DŽ$Fo@Q߀҂3SYBDF4GQ1AJmL7:iYTa gUU)%ic p3~%DPǓWFh d\!hd1+P@lC k")b`E>li/F/RPDJ,I4NpoO QDP2N" 0 DЂuޑL "KR qP$go$h4lA3~2JÍyF 0"0&nrB'Ar+ɟ+|6ps;031HRDF_PMCC p0 \8dG,4B r&"b bE1PD F8 Р/"e@=ҥ(Xq;k^JODʑ/T! HG""D>d . C0d+¦OI"5x4!Cq38@n4J<iIi 7 #Ɍg]J3@Ji7(pdz8`g.Ƅn.! E/Ё3{^K)4F Wp`C) 4LzԙQ!)B#vf`PO~@ jgrޱo "CvZ`@ S`J4#gXMmզH!jE"cCqT"r~F/"[a2(BzH#FYX 9_{hl- vS2@ n=#NsD]/CHM_(!< j`R!yʍ\7M i 2+^LCɁMWh>P_ZU"u 갚YMnU҉B9؅q@j +X)< Z zL#"&IɁ<*BlScw%03yY|+DشpEMut 3"RD&F8,O :%i}ƒMZœ{ c6 P6\ts1@/|[a/rZ3Bf0ILx" VS1"D$x/!ܰqE6ZTrȫsScga>1*k.Ch\j qB"5"T K;\'~(PNAp<`S |*:a|jp[$9nb<Ҋ0 BԃW\1[Bd ;^%ȸA8Ԧ%"P @<  ҕ a" 8 }qzp10@H&rI0ն)b Iyg13Epdx*>wFs P r40z3'Aى0L zW͕(&yGe @ 4@[J`Y>@}.Ƀ̶`RP@ @!Ggd!6ÀCZBr E"! j@D pP 'B @Ru ca ~} 0> @Q@[ W`` )` PC600mW4z `N8eTy 0f~Z` nWb B4!]:Rap 9Tc93 Đxc[Rwtt*X#  ר08X92 .*ptxRPXQp@yg`AUAULyk7A?Q 4I, 6"pŷ<P#ҫPy5'gu\ 1\ 11 "?"0ZЉǤ㔤p3@ Z';ŐcB˻&{)> 01P`:*k5Pa0>)un4(0;ПN3E9W Rh ;]KhPb; cv S-$,+*lM!O1j1 r` F ) 8%X! Q G0n8  r!`}$1"0p0F ;m\ U]r BjNr@N€ y &` ~ Uzh ;$oR,PDT"H ElFID !a4u&]Ș3 '#_Ft tR_ +pL9+@PtTvbaR3}!Q  M rDP o /t P3,*0"߀Y2r3i#?I4C 0BBJJ=c“y=Tdx{` "MVO7)V;5qa!E *% S@X< pт  vL|4ބ%e G ##qd İ I y2:ઋ[g&xlH]xŹb[G f B_9tG4n&-_R3>KXK!pp:=$ ^>s1p!qI!bS =+J Eb&c?A"sp}2` s1ТWTP4Pm0rztXK44`P;s V#`X{$c Q*xٛ cKua7(xw,Pw Q݁ڨձ1LGU gxЙEW[RmlPk (rT0@})k"60 ]P=".!hW)F[D p2 30OoS-3`I[@6Y @L0W@(MTgq.?1*ȣ><0CŌ0$ KR ĊC!+P ,D^Jxpck/:kU@h8ɡ-``߾0$HfͿ@*8DSiA0(Wy(OHVpQE,L9TeJks5ҷVLPCW,!P'K0l5:gr#%s9u=PT0 䘧AbA.*b!\\b8eAND¥g@C!0qN<ҢmZ:\ pҫհ| SphP4@dxz%fxOŒ;Z| ~"K³0B -`I/H 0 5`- s(8JuH\ IePRfXWVKhN86ˆN9K9ֽO.9#@9`&8aO3&I c |٢.:\C}'N0D,bK$BTubȆ8јRzgsꌘn낄SA Ai i4FI"pưBI5 Є X`A (mO`K'3S&mBp@3 oZ5֨NY%Q-a@bY.d`ఒ֘6B ,#49V!x–`#[\;>ta@Veh 8C*l50 ^ЙDEb80O=)c"daȎ!U쯎7\%<{pC3# 7$q4ÐAa jkEdd51&|.^9d$nn,6! !qaJe  8d tC8P)VpH9B6h2nQb'i#&A1E n!.4Y`s՟VdPesX!A%3l )6a=@.G? F+hoВC ++LBpb7AR,mrpIH\$pZHtяg 7 P6e0tafAh.!clR? A=h^^gW$S!D D s#H2DPp8"jE;0XIɟ]"#?q/mfFh3+fڅ[!)hp]p'OXY%px4(V( ?aWӉa^ 4L/(X6XM\FV4n(M JP*BuXi#?pa\8[i00TO \KI"ilnA7eop0ap EhCpHRbbB֗: aJv(ny,Vnf`øXaG:HhQ*oJ bLG[4H*5$EI"@+`޷!%@P4NQy sGM :0Ѕ!è z^LeA"[)o!C PE pvpVf\Bpr Uͺ"[>3Z)dېsd!|_By9,#ˢDc@CqTjPȠ?IOs+v4XUIE9Dj,܏\''XÊ v\ `:* 1r)X/ap3G {-ʇ[Ki`H=Y 9#ap1Zˆ Z)X wi-h2a@s=~h=@OW؏+]HbeE@)@ 8UpQ@ ->@ p|(8WH(^1D 1q&3@1 W.kꪂz!(C|zq 5PC @VK, o05'B'i7!0thK#t(HV099,h![ 4+i!4%G9(%MWp-$Wz%. + 2^I8O(IfЃm9 8Cȁ/BnrB@B ('|1h"8 +p,Q-#(캨r  A:F:ۡ 37 S"[ɇ+ Gx,-n0)Y$bqZ js`HGtqxQ*kG ; ↕(b /Tt 7*Fb,F(:o;(P(st)ZPSP/X(rKr*:>hK)B{*-l5qHbIO H z, ʿxx S8X- w  ! vQFe Ҋp rcdž]y4KOi\1KǼ`#H1#16Ȭxiby7W|+1@dDI)*GbX;PP뀈 {ah 8OB @xvҀ7ɂ<] H:HzI#BA;!epZ bfPԄ4촯Ɏ5V2Nd :vj' h.;wY؍BtAhQ@ lOKp ћ1`Xs$[[P1ch y 9 XZ05-tHbu]9ǃ;HC쟕@ aԢ$X.D0XDDr҂X@P93io: H]I !+TKc1A١@8>QM# d D@Zw8 QxQ᳎@[QNIšvEB!pcDxX$(臒IPXn0XC]qHWc`7bmVru9p*SdAF>HxY" ;y8DûXo PHQ@ zXHZ(1 ZK4kz yH'BhKֈ PqUJB4VbVDɐ~?j|M5xw@ Vjx-۬Љv %THϻ Ӭx(6#*9b}P:pb7؆hhc3,6xpH+|Ndy_x^HgabA T`IctpD0pj`b:\WT C  0Vv4 l@X Ph`Pr mp xƮ pa^XQY u[9dݸ;E!v%Izhs;1X]#pļPmkSwq$2r+ȐYS׃JYa] 0̣oXGxpfbT Hu @x?A8o8Z>Mp)dŒYbxfU91aj&ȶj(lœ"b ~p8384uY0~P&)ЊY vPkPM/nવ'"Z` od*tJYJa*o@&z23~eHk8kiX U`l({0!&D8o ji9Ա@V8gSpi薗!lQ!c)SGjNxc.vciIr@B'y2a42YiB/_(BV1o?6`p}tp">p1SD73Y(Y8DQZy+z-G opJ4Mc@B"oN>I oQvC\`L / FڲY1vy& ϡЁ$ 뚶v1ciʲbms\1>H82 \0BH1B>UR(a޼ m\P@L(Rھԅ$L;}x4q!a 3x@"Ukf4 >c@o(Qap(Ȃ u A:Qч6*0 zB@Sp.g꾘g˽wwX{a߰z3y? B6<A5>+dBH2+ s.y I^@I`,+f^~x L~$W@ 26^.[J}\2@.7#lC R !RĊUPYUZ ,ia=NP*cr 2uKT=6B8[Pd%s\Ur-A @*C8$^UOA-`#P0"̀ [ވC'R qC3&T&!!RݔіP7aJ'ȵw 8@y-ǠT+|2 zNƸ҆,|T3'a ̆0T6*ooJ+#H\`\wQQ¦A#DA2LCB2Lk` -xA–$*\b33 qA%Oԑ&Cސ@Y-9gR b6DS^GCc)~E]RC/aG$Sx N/.C,C(0ÊjPAyڄ+. H db}FpH!WBPŀ@Mw 2sk9!GM@  F,vS/^#|uo o̠Ӣ'?aEy\AqbAhK,P=x,؞6Æ~AG"V|b,PְJ ;v3m.zI/x!xfA!Q# .x2qP].Lk F$ V>za@Ex)HaFbx!h _`UCӵ Ѹ"*#`6G 'FP .Q:EST x AȈΘDF  ,~‚#P`~A+8ʑ1\%"tQz5x^`D/@yL + C^&W '߁qB81n@$(t5",U².2)#А&ATO;Db} <"59@a bk&@*̦T9-U<*V ` z]#Ky!cjv1?-В ' HpDŽNqE]b3RK1 $,e\Q6F "M ;$2V#"d)d2`OraVmHa dոE_grYqO q8JTjD}Ǚ ) @ J(M8A q=?pƉiUtiDUaqE$Ћ P"BLDI 0`P# O50$"h5% gBUZX#^G+苸3("z {h1^o&ATxC+p`aų̄#XlzOD?Аv0"P+>qxc @9֐.ҌPAYQ7 HA@ `,,J5(&^XA='c)0XBz W ar` Tg+#ց@r4`!QFMUhi$1mPĆc8~ :& /T<[} 6 P0 q$h\k5A}(! wIXlKZSR V<u(q%!)+Vq1D, h{i%(6 ''r&\Y'NQ@TFM POx5iGC$x5 x+P հ(:p(CQ~ (C˔M-h =@%ĕ)e\v/54t^ 4C8AMY?싼Qm!̠C(yUФ 0)}Q]IP8ǝSA@~ M^ z"T,B-\X"(" (Bl<ă(^o8`AGCU]DÔAiV H~xA0GhA@XHdB5/A V@]VAdL)~3LD9xC?d'}P1D39zyR" ]\ A> a~;@ dq xwv`$A0`”vNC%уڑYaBMR@3K!8bxA6!9b& 4tOt2bCt'Xd` A Lֆ,8,I!@ϷCe IA4&l+7f>˰}Ȍ,[B6%hqI$$=b&e x0eyC݀yڛ DdP~%ĂL*!0tñBQ(!R/;* * C9p4*T8w75'C Cn O5ѽ 4:D$ p߇I/R~$BAC\ɇavCL2 Ht醄_bC D@AʞĶpeC)?:LPHn_Np @R*p7XTbID6^[,Q@Os~y -2 b>P\GfZqDZh~TC6+d-Kz]52AA<?K &=~1`Cr6?A\'`b8DK -rGh ZA(f<]$A`tQ5gA\KAL*Hz4%C0DSv_ pXYA40pXB&2[I|BP WXa!jLB9LB?G@`IA =]B_<!` A|ß'G* :MCd@C\4D6̷[X`}p DS$ $ڻ|2R(@RaS!\aU=z 0`V `R%kD\I ({E5{c0 6|'oYf(RBVY)<$2Da%Fa`}Fym76%!N*ƫaOBv9d, @{6#RpuPjһwW$h`ĈK )t"$]44BBֆX] ^ iBY񣨜. #@1,z@ !Y b8Lrh: j6k8~kGDkYE h.ySE2$$!B2fȐ8ܫliq3Ub\M.ҤCREP/FHpBmhR;s^u#c߼(0~Ey^;lXf ĘrŖLC@uA  $ 9l /H&h)1'!ubs v hEO 1Sihbb8Q2s9LE *: |.NP @%3 Ylm6% EQ_C4d nr;'s7 WvVYs?o\я~$ 8"o6d}&+" @VUzN24E0T oIH#-! En0Q&$;!(t#$9PR|4yG(1(Z.FۡCXd~ &NdU`7H !frX Xp:|Oig!"GI}\7Lp$t+V.B/KDvL@X8!P<VVhBq lGoHD ^̭!dL*! 0"B bxGxC/C:H5u≁̮+F`u$4@0g cP[Kh@d8M!)M0)Q7n" G8@<)Ppr+`fGS7 mo<ㅴbBHnֶ@F( (z4 :t}iCSyňW!.1K&߆+ ڒ&NL &zq Na H!@!fHCI!` UBb &‚1`zAnP!4` 3(B #9Z$ {Cm\Pn 7h:#3t|a-Njġ#0@!e " &D3NQ!ۅeߐn<΍4¤ܮl *"n@a :! z4ahO: b |ݪA: {0;!f n -z,A$ceB& ->l &'Xc ``~?r7ňeFP}BJNCJ$)!;`HJϒ?&DX}b .@!b  DBL F!ABx`ibfHpd!@( H D2ᣮ$@bXf 9taBa K!0!Ы>@b3bL` ʡza&fr.kd`t>3NN`F5a AR7Ʊe<2Pt8«Z3N@'J!taF/` &1\c֠N0hn^~@]XAf 3$Fa !0'tB60xp-s@R!L!E!. 49`$$0&䠮@SM!-1c,ftݞDJ؅Ң> $48@g>\,!5FhNr73pe; \4wc.j hH]:3QDH@B"pt!ʡ3!c`n.osP&AfԸ.s"ؠd`4,ATd` .d N AN!С$\ Ja JAE=s Q:$Cc`rla,@`l9N!gA1m73\axNHRZJw `3*N3Ita>fk5Xb@z r3" 3`M `. ^NˁC@!]Ặ?@N0[fpfS$ @aDd b&.`O! ‚3*QjHVB  vV,@rb,c`8d!9.9([mCV er x Si axepJr$> K\Ç>Z\_Ea0!p9V%v3($GV!G>]$@N xG'aX![h 0!Xv`J ` €+@aA6HZ3$rn N64yd6#ۀ(af"(4 '$``6a,a ~*dnlA_ya0$vhtPxUXi%q K!H7LPڃࡠ&K. Օ:GHUF| +J\Np{2>Tz.C A1ޢUdiN:}⤏ h `t!"p53@V~) '$-d$`F!zw%3 FZ}N` !;\i\!<R`b.P&(j4oF(67~WI6/GXx @B:a ޺LCI qN0KcBa;lP!ovN/>>c1dHH$Jv!2R$HO!-x`If@2H =|r- pI!Bxgh {"p!;$`rBS$MeB cGO bAI9m J:\nBQxIFV*`r4h7, $%r,^c8`eԵ4 L=NmxI&fPƣ9I5Ds!! lxGtx醊 -L7# 9d^kErN/HžvI@Go\G\d;p;$JK G <#-PހL#-V,N`#% 6=n6RPxt6R$ 5(LQrҠMQlʼn UFFcM+ m9n( `VЀ)vҢa&榆\XVԧ]- W T.Uxk,='t(jwl펠@'Z铳!`4>6AJN D c<Y>oKߡ; AQVE#q.KI!ᄨjމIJ=,ڀ:9];` IDl*kH^gd۾W6$S @ !DV@ȂB `.3GjAzI,tb9`' b(sB1|xJ!-_!S3~O7tV BR60… :|!E@s5p[R8r:π@$>3hzFhFo8xB(}t :2ևVq$ J6?x uba[u7`+0O1qC.}F6@̖f !˛gvc3 7#O>bX`͛ 'ثO caXJ1Gᜒ 4H$y? Gt;pu"~ l}ITU@K0\B'!I4:?H 2Ƽ<ȡ UVO=EPdu|@ ؔ %7fQ?r,I .x%4ÂM//{i<>B&5B$oZb>CF,d$xG'37u$Ӊ<ʉ"C0 p ]`*A9[)?9d,~"HaV 8qq`BD R!FZ d Mf=CCfv5 +!8U.)@HbJ DF4h>V$4G U/6\,I Q p 0N =8B 4-;%l1Asp _q11N+hKQYvQc4cTc+@0*sv3pya 4":3%D1As ^21޲pC )ovFڥ#3h?39k09RuqVt 5ZYڑbJbEE@ dx@h# vbQ@_! AG;.p l Y0FvQ3se5$% *&wU A9OQ.d} 0%4aO[UHO Pt { >qc3'07 !ΐ` u8E8r#q"X7@`Ƅt8%3Sw}Q&Pus@@5oaE`vgU`E ,A&{0!ĐLS`8ppq%]F(pcFp cD7mp e26A PC#0M0I`*' $.rP4%1@@ ߰+Ag#jw- ;l 9}`v!`(o8P p7U 3Ds o3Le !Q)@'KpAr+&? s02v`Pbje  hu8Bt!C!:  {/rp 3n9(YE'6Q#[!-o CF :{]ISXf`E%Y0j< - otWKA&Hp ° o kSiX Y.8s  " p"E'էʦQP[QR5qOq6??#155x1^a C@GC FoqЦ`0F]:0v0Ro5). 2$ Rc  B3t* 8H4%jDd`.DB`!`T AS5(jf5@P@@ w2l ,39Lh 2BVgp',/2,)!۰ "2 { `,&kesgs8S A-PȀ Z p݅3#wgv51ii t s0a!Q1'5T3'r a {` m:qe&@F <q}d/!O)P P,hc5Z8P1;p8p0OSpNP`A)` FRcl'X@Fi'ԆNd 0"F'.'6 !z| P@ !=bP \*` b Q"3pu!wqvmpMpC1 2FG@ Ph = @ p `RH) #)PX3tn!z:`$ @a$tP`_X1ĄD ?cKf'%AQ`' ֳ Q۠!B'uv#A02 @ QPp0a Nyb^b r I bPwX$S @ #a u C>p0` *} m2opi& 0*tv! s Qe[8%vrA'[ ) fv {}0RHe!Pha# `kv?  jsa `Q`h/ 1J R*095 5AԲLѰm.fy&K_0P}ѕL[W !Ip+R1Au}%I!Zr6w,\˗U v L= `Hp7GpWF2LiYC)S 5v00惓"Aa+h& 9\YQ /0y9[҆"ܰ*{?lEjTcl&8)1#0˫+`\5ܮ  AA&aKU10Kԏ  $Sd6Y`, U@W%@&0) RKhvJ v1q~`0~ Q #0<  upr P@}+0 xr s$O & z qnVCf`Jvb a,sJp_OY)~`? b;fgT`m/2%5tC[˧pi PDP@N}| {PpC B2}LL[+2EEu-G093* px (ُ m0ਏ)4Rop  3T[۹8b0`hI44srr`-r`V^%W&9L 'Srá& [ߌ& VK`NIE`I?)<~ΗS3L3G?}p[7xP 0 1Ixa C n{B%z3',noA̗%db pw546v <`J a#Q0VWuP䮪RLۦ#>%GX|4c)MBdĠ Z3jt`Pk q`|05W`!Up+b VUW DDP` xAA pci*t@D-V&?~i!P! 8!))''r Vo\1P⛉"ȹE("8!m&36G>,Y@W"&>{Nbݠ8@:RUmkVDX3l!K1#F&1 @U `0o(}U ,:7nx:|UC$rB~{( H\c6ErS|Q|`1(9@78dk>9npef gɪ>hjġlL2C"X1p>P"{7(๊"(`6"dgz:ZA8$b`bZ9&:: BKd,t*@5aR@M"Es*@g*N1$0N.pN.J -40،P% &8 e XE%hBȕ~)=<[$f`>~X"0ZA< I./i ,:F{Z )@A"hi%$"fMj"Wy щ$a73>tJj"hs8aZ>Nh ,jNA090H#ez1J\!@"@%]pR(#5p͟$&Z%xxv  FI# '(\ >{"i /h%t/BB|q1SO>"C azx ^PhRba ؤ0%꭪'-L4D,uOR| c>~ }?9SURy *@XF"BLq !?Tm$?r+H$|H`DpC$Hu+zcxX~#B-t "E촸h#໑b5@|H$@(6^$`E3rcmI ՙZ;B@mr#cAIiD|ĉp"񙡽lxR=7W< ߀K!|1BZZ>9bHQB"rN4oTnf1Mo"bAh1ܢ `E,&"0!GryId'@N9dFhKq?DE2\a QF"P:HTCR-^K9핦CX@ІN@P 2 DzsFbKlDtq ' g-! c2I D~ '<Rb>ӐZ`Dh( /ۦMiDBXU'7xq64m+uȊD* n~0vHD N$2dU%35a7`t? H>Ma4AuWUp|<+Bʸl Bu=acU",@ 0TlE 'qaF"D .P$k)eP Nn4),e-Ѥq)s<&P@!Kj}pcV&-gPْ°)t&%.}1dPx!%x i m#>+A/cs҆`d,$l(|r,$@[t ]1*";#YLj)Mn,j1dB 7I"a A#)0Dj'o p-tFӹ]h߀N2,+Zg%0L֌=*XcnPJ A9Sc]d 0RC*Z; -2g|:io#P̺Bc /k,ռPB|C 'zR:yF9n=b\<0[8b(@Bؑ5LAbSa/`6z%zN (*L 7hM@E+@)j?|" I`hm }0HW \hEgS"(oP51tgYJh6h,\ |c3d`h!@@[p4I3`,O (p9B`"z xp0cbF BMAg<#'@YQan6, I̔EFb:yGAF!vA;JfK1ȠO+€ 4)r8 6 NX0Eo8ءI? W f{D'j.#b%Q+B9(odUKI/ID"<ֶ F:$> 18`:oi -F2P 6+ Qlz-aښzQ@ a cRH E 34Sӄ aFHYO01=(3lI4 ~4FV.%l»&Z3wc] ;lT_Hذm }hAc@m D+t!Ok*G׹+A\IR8]N*LSȀk3Gmwc Ƞ.hP xd+ Jr9uC9Dw50b(ƋJc X(JI-wb Y^`'.B [<ͩG̱9?[.Q*X{1/Q)rC% 9X '8B5O8P?P&o\`_;1 w&yԓ\ ` `MTWo' А0+ $t:XdvNTsz5 ^<;d? ) EtgZUvU`Ѐ %`zd& #uk>X74E@2GRprxPUCdnUo U*;(A?} FSFr\5vZpA n߀ K5" IaShluUM@7h%P j1uja Tg6?fg <ѱR6 Y{7nUx6UUؔPyg;Y0R=@or b) 1  & hפIIhPm?  =F;xlSo Q5%P @0u7>8([=) Nu $~ \ A?S  bp ISP5r("0Rr t' ¨T 5XZ4h~c96~%XC +`bbg&`&Y"7Q(V3`(!Ir ^M5Tٕ: 01%T5 ?E(tK7S9jYUk <+R f! a go@ZJ2p[eG ]g@ ,jjTe5jW l`l Su}44\ /TU#@ ]Ȩ_t lAZy kF@, !f"d|6o@ ` #"]put3 (Z3CZtJXK:VD#}` dR@tvU T7 7 Y*xUPwzl7 zi)PC `UsLT Q 0 qZ7n q' +pAP( q Jc7p1uUo WP ? 砩 7" sI4 ڗAP5%"!Tj4әʣ%6`a|@ i`xq 1/'+@+~AApY `ZFDU_K)]Sc8w@¥l -fnW, N{IGJK .) E^6Z;ڣ y Y`vpi!q_ 2p Ӡ5$ ð[Gh%LlA&#ZRк|TvUc j0ש Z+1M5hlP >9t \:MUHJۍwZ;EԽl {.K #ף Ap A(ki`q bg 8:beA`JKBtɸl\q"0|(<2 T @U Hb֛ YT K  Id4% ?.h'`/wӵs@ UD@ `P?q}00 $=Up`)Ọ̇̄.h=H=}=Ihu O< n! g ̬*{ kM oP uP L%% A 1hqe YS= m@#Z@Ps ĀJPYpKa[)t Tp VİW+J,N<[zp&ф66NEA_2 #| @#'Z:,=Ր`S^Ȱ m. M C@CiTDCZa˴L` 걀  lpp =b8$)cSA xLZFt%yyӴ|z0;p4, ҰP9ڜ2jo!IGcdB+o ` 0$j3o=|[Ȥ4 9 +A% PĀZ к9ȤvBwZ=+o@0 #u Ca7P^o:%\NlV ~+Ꝯ=p.{ `G/& pƠ|^]%6k볢p)3%)ֵR Y)r6 Pr@?։05tm趛9 ' I )He" sps'\\@ ct^aa  "phs+8zP{J۵ PNrPj.` nY+RcH(I[[~ oa{r6 J&1 B/ذ*eھK]Wpa:Bs`Pd0\ o}P%`PLWj&"@m] pňA cpaA $bK)Q; m((YZ @+T [?kyQI.eSQ~h00*Wa8޽[5Dd"e.VRIBdnQ^Z1bAzy`$,rn#Ђ#>A O8:$ޣ1EbARK55diUScᣥuDyG@Id$h@%A%n( &.&i!̮l(d8HHDh<運jJ#MoO >ɲh#82 c`m9.N=@ 8cџX* 0,`>b9 zXUVv*5f֟F+@ ;[d(ND?VR.8!FƮOI6VQqo ,,W#x&@^].9h+<>E;X@   @CNԃ=9獗a@0 }s RFQiSLa,T)jJnH&."JcCƠBCUN"ؒH (1iH;ޙ ~#2@C\;JAOQ@L `2RvV._!?i-P/DVJ:V4` IH+Fbr%]9Ao8ApVCi 1pr8b+Vc7Pd2 ]QhE"h@x7z[{AP=b;8,h!³cXZ:ҰHm[Lm[FBclq/>VXxkֈˆx# Je/'̮te1@Ď\C9ȁGZ/ahZE9Vt`7XQ@O,@)J丠wz<=h)An<v0QIpqZ(pcH xbSB%U@L 4 P`eA eJY!7ࣟ27!k† D8LK1lDM2\‰h0Gq$adTX!@x-Y/ef%3>Aq mwCYF$$ł[rJ g86dI@Z@r-v}$@*V -2U$V!Z.*2_ %dC3A+09Xs8%&Ɯ`9PA_Ja'%>ފ^h X0ہh͎kq K|e' \!2H>bO)'SF Q bˡ@* x6 pk.A-LI7PJ m@ERhD2zJlaϮ71 .p ut e8%aքzr@^:io0pA * WoL <^ء@'$`/,P iX9" YR:0\JY ! #R2Zq S^n%B5K2?L/$Z10ap)KTLHB5<"-fH1. Sl!B ` B_ҘzՄ:5 UJ7V:A\(P!>tF` p AuU~Ҿ7p`Y+ӵf./kx* A s2U 4H y` i my%6.fb\xJ)pI(lHs l)AgAgjBoCB#`Òъ 7xtb-d*~@S_Tˁ=X1U#"]ц40mbұ!&(,xZ8p!`e` 2TIHMb 67Dm;[;s:qXeyATr‰@ I OAȅnbV(808$l(&OBg@*6k(& 1X.਋h##s C+6؁%(1I9bi W %a(@FRzP)27lQl Ꝉ%U̖T *; A3PtЅ^ PGC%?P=bbH$Xd8 &aHg0%Agj\#s"#pȂIbt|]-\Xr`dxg 1c\Pi~#0XhDcȌ:XVMNiɗjMq ڔ|P.e0eH|<5;%ȌK02 *Ђi i t2!a>HpU)ī`2, >7@>bL]3oHPH[~`LxiXTl yY-Y9*id~M\8Pl+u Љ(T 3*8sц%h-&}1B[O-xc gLy\3'P^(=Yj[Gl`+08L4KPG4E2G|Ӛ&(Rq#71.d} V`aPP7I\%_a Hb+Lb<*AP6WoI HAy`*H 43n2-ADDD[3|I@]x{\V:^,]\`.Bi([xi@jE8Y%+T]Ef{T`m d8f2>8m whM! NXUZ*a#׾:@ ɣ0AY`37`aPG7 `  {+t";` *IVBK*@Lҝ|1@`.HBhA8}iXЀ"k+E ЀnځGk ;hDd3,pkDEޥP.S`y (K(;Ps 3N%X%Eq0@@⼨ ZAb`خo>VFD78;-#4m*9kIAH 8PX l話T:S-qN/BP]! $H7,Ѐ7Ѐ9] 08GuDG܁o腩uI"*▐XH2H I^@8Ep% mfAs(0Q_Š0:3^UAF`\0a9B# Xn"ܼ+0/[+ Ŵ\^^XH28AAU X~k + Q( 8%VxB V- 4@, Ux郱ЊΈtVXĖ`ۥw., $` EchNbdYӿ@I8R%-,{tDl K&9((`~8oY9:qjx-0x1ᝰѺt0PY^{0BXP7l KKyyĂHՙ$$6X9@Zk4 Hu͝jx pU`SZ뜷 ,V%kn :ETPiqAb2D+Q;b6h PCK9p"SCPM{hF\%L[PEBQᾺajAZxj n(bp#P ywP ;P ,I^UO3Wo~e0ahUP쑱~cD=@q&3ᛄk#H(mP4OAƒDcz(A)DB2Ob-JA5 $! "IEad_01= @ J>qxx-t!AB;8Q AЃQQbkHt80,Z@q1n˔89\""H!MUEH% +(P#|= s.ˤ2\v7`$u(zF1Q*P Bf>Z'|ЬlD "Ju%Ao@6OPC(|D+`,E%* `0'GF 9HZT&}E@q#e@r"1ĸ7eGÙvB o4q9L@hV 9 C3;δF͊,Qj.#w?4~!BR;HXʃk 0X/FA"_)KScDq2ae(-H# pU9|Yg ]~c ݎr쀍$`C!pWBkP)?"ML;8`7aԪwԟHq0p]H0FҲX6b ['e (ȠKTJZBqQ>QqV%4EqGNCXDl FEc  Y@`=ѯm1 v,b!0 S$` @$A9 L.7 Ks Rk9|:5j1'0Hhq}剤e)3YФg{cd8: bz_,EGUf-Ϣ4d;Q ָpv!5Sks<$ 7ZeL^yD8ELv 0`}ggtKh xX^40q5h< 0F hBdVB3.(pFQ'`KDOz:wvFLJQu gU2ט qQFoxG0ƾO`rCi`A ~cBJ2#n k ` ca*О6cAΛO '7j5kG|.3?!#| n͟M}2-@GȖ6wu H!ǣ'!_ZbK: @=(Hdb ^Sa.\Pޫ=_^V1|Ç) ംQ/@O~A9p!U4Z:dMSAH[KZCEI8<VL²5_>pF>TZ] 4*ftCDFS wϼq]nչ"uw4^L[.͌@B(H@J$Df<̫A$L(HQ`lFD'8ì;a\Xl)t F "w,4E V؂L$%\ATI$Hgod!a l8 D7c (A;;BhF@$@BE(OPJH@-f !@ Dqx D"!͐}_"mVœ &rH|$D l;T;EM\ PC+05AUb-lN!tB7tC" (Hĝs}= фN`uJ9GB[@gca@`an:@A $8B,'@_N!O!Pg,$#p14DL`%B('APM.%ԁL7M-řKJB#02@ H;;@%TBE!8zLBuAyĀfp<ȄI@IL,ʣIC- ,%BE@y D/<6:@#xV>C $68X(n~LnpfQ ImA C)l O~C(.E @+JEӓ`lJVTB-mR9|| O22x*,4@+ҏPEB%@6C1\O^3J``<_) 1oq C5Fg1?L0TB1}: 6Hf'L)6wt='C؏UۋO" l˶?xtkDx:O6Gp}sMh3S1iDL1P ?"(BH?xGEQLGoCQkv$&GfʾCyC$DE)dH+,l|-}MGIk1BeP+2_.3!\@+.};H7Vl5[C'@'\*Tu*%# f]c5܃2@9AB.iVğw GnymQ"Q#QsOcgh"'DkBz4nOmIO&D7@+wbZ+腆4H+}HO'UW.A#;8@A(6{*4|*\B)`C(H@L\< 0$1ԀЪA'o['(Ï@DۀMuQ A68NC8+GXy4rLH0ACwɞa0øBA 1˒8 (ȅ,UcA4/. й*l C2Zb ɅSބ^g۔"P"HIq"GR;\F~p1AA, f?AT3Td@ųN /x̖`8[ѧ( =$M]-:818mn 'D=w\Z-#`[+@lS bp;b9츄 56Gj7.!m<{#sιd XbC6\/}W5$CKWsֵ{o^{O1| kNB)J U]"~@va:X<(vNf:aϵhNp;犁דb XFugv,9I"G @& 03bO .46N?$ځ@ -L:vRb0 xщ)*hE+@0$di4ּjb(1 a˰$\I*b&\RX邞..X%32bp9 XcJ84mXl,+F4vݴsmF[BMnX"7T`>2p)o`j$OZ:dI)iATR ,Hol`jWd!EO*bRc>oouAGֈ6+If88!`+i${- nAʎuԸ:]%dbd7JcЯx3^cHEyJ{Nf bY7Lx 0>F5#墱*la$PR)1& x[c*y#uk+Z/aѯǟD@ (Zmx#Ah $4GFjX&ب\>EН[nggjべ[ל*_.pC`qh8VuHD/:a ސMf񕍠QrQGАK8D0?0V\9J  XE2b@'GJTs(rRSi9gO.P htyF"ɮwY]<pp!0"_T (_;wsB L9O`DA 7TmՁ8_XfMAHZS3k'HM"@Dx# )5cF?6rAJjl.J1%A $(| P`A!ղ799|khBW ƕ)bm&L27rI?Ń-@ z0HxK,XPyAJhмdb GЀt Yi߀ %oB&BO'W՚V/5YoJHO̠.GRS 1@Q!ACx=Ty@:ÜZdl`6}bhA(Ѥ+4NAV3>q" ` -3k v:PA <1NmScTA\' ŌE乥 ㆷڄ4OYqdԸu,Ypj:>|%Om:I)i<0ӚVӐ"GDi1ʬJRFꀦ7$rR-uWX㼦N,21!a@嘄h qdAaL*EcEK lF<+(0fP\y$5֮Kv`)8C+ `^Yp` M8㽺#< =%7 :')́ٸNOFT0CP`z!Bc'Bi] a 2zf:rCMk \ (e$]G^3 !/Jsv\.G6bψN 3R 4$b?749pf4:n]@()6¸S6 oNJ29igfTXt(fFd!{#8@ MM Enb"sđS -T^,jFBL"Eh  !@!LW7T@@! @2c82#53N#3v :%O>R02thCO@AtDQ(u ]^+jt@4ԮvN Xbxbx"BDAN8zp{i%>HRj @ }Fg8PF J@UMyR4~y߉,ub] <0z_BsقH)O!/U .0NIt(syrő͘XD$EQA lvzGVUyjcB6r՝#@gAF #$ @!#Z-4|4d7#3l&[VoCkh.`C=dNA`)e-rd<3+y8ҳʂ# ,S@zbK)5K SRNx$Ph`"C:Ri&ϱTPHU+rvNZתaweEtTS`( t`.\ UH``aL+VSYcJVh#6度 NL 8$ n}9|ȢBR ׹rZU+\H?o Kj-{ }s 3w˕ PՉЇDApY@\`j*UEŤoNn iRwO4U^-݌f ^-Jv@:"Gٌ.:BF! #U#b@",ciRJClB5zJ9|7>M*^󸚕o f[7"]ݒVXz@Aء r<[7x<ÜI.+7.U%\IdA.{ vǡB TVy; 4!Fal ,!>梚#ĠJabnfIm:=+ d "tRQ :xf$z9ȒN*u5vE! ʧP bf0iWQG.DyN]U"}In !;xmcx$7h" :!U2,.HT69ʓh4)RR*R4;t3&}k )q#:N55B摹/@"( 5 ۍu ^Z)Am}wA=Aܸ5r̹ #6?~ 30(~OL,sCA   NLU`@uC(- T1V[y@ V1Xls`t_ b9&D!(S9&笆wq#6Pm-$QL1#A爗\A5r М6qE`$`7Ahhtҹ@]0z@v@I݊B tDAPV` * Av"L(%!MՐ)\0Y!Z:A lT? VHg3qcqCKµR /I]UJhfdd&@:S%ޑ6KAioHY)l@l1'42r:\`z4ۥ4X`}&@s \y0gF2yhM=tNP®}-sJUXA:AĄ_KB11P! m`)DhY k.pQTK<.1KZWJ eLP<]D@aQ$Ț@! 3KqN-@C6+;Bpb\E.*X(hQ6+Q:H \VIw_@V*-\hyNB*LH tq̴ ,}d=j5*`$ZAQlfSHG:"qڐXAY΢?LTΡEP(e0;`# fB%@y. eҁ$Hً yml0ZoTLKadf:~9#R66\Cк uPJ}?Ti p!̂X2@\m=D"YeBj)CA*ReĢqZ@VwRAxe@ [d ]2h&o.EcXjD|y'a :iGBc4/0#SVa&O*4DSL-"IЂMP[):@pbK `P`D9b%{L0܂@{Ybg44TlA&Y J! VCDc rsC`JQNxE'p֖>lx!`;gxyZ(Vɔ1 S0x.enCI6gimX6IT^= /i9V2THYP(m9Qw./|jy|&PP$ {Z@0t@us,"da ѤD#{D@,4`ac AȰ Ƞ g2 G&Zm" xw 8b ( E(&bbaWG8(zy,.D "ֆ,"ֳֶbZxHwZ>c l2$=?6P#IsN!&Ha ^#9Xu3gÄV8EPe3X.zaQ q&Cw7hQ*7gC 9OPuuH I{%<#GzoREI'1= #%YaXU؎ǎMyI Zb A WHx-⎤38X19Y0 `e:":z($(txoeYxra&<`2+C'50oP#GTb=ЦЄ!ᅑQ2_ Ћdʣ Bç KR +A *,Vl }P T0W@b0 mֳ#9K F3kp~ );(5"Ta#w94%e:F">uUZUQtpup'|fbaTt}i)5x@T\T;n[Z!'w TKN*90X*@Vp6+@^p0m'+ p! 1p2[W7TtӐ  xB."V.;8ytZ4G+PYڠ߱F%Ng%U6hTSc0Jf ceveժ=;רGR,gyෞe RTZjAf%pF &acgQѮ xJ_D #0R@6icV-;kC'pB @'@_ q67JpN8Bx(wA9m࿴e7r(&Ehl9{vGn4:CIf3Sl.da'.3S\YYlRtIF a%yCQ#b@QKS0t ktVfĸm8V$,Me i o D~,Nv gM Z L0EIѲU3H[HQOG[x|!@^.rS%HC9 :KsFPR,GS `ʎ{r#;Ip;z[<*zY[Ԟ,%̠ 2 ^+R@8vQ@aV@ 6Cj) '@dG,axl7am!Hps\*Zu'J3$W8RgkQA#P0D 2o2l'%NF†23%2}qne%H& #GzZ-rD 5x: 5 <A .q6<׹P "GLM}W;mSCJi9L0rSqᑩt$` 9':fV%]C P⅘paDb*2bCAf09h?n%#PJFءx1bQ_ƎDZ \\h IIɒɒh2+*0g0Z?#Ydhʂ?2|H~`hRTZ VиD'k!s1.d*e!-pZH:c P\+IFSF=ZO ;"=cIpj/q(\aPE!TY,U]wy 3/Q)7`@=-Jx(q"n:vfF:brR"&$$Ph8=0>`W@ O E05z,tp ^ :Ő@RΘ 2".Dϑ@eئ2C[ Ĉ[=iDdK"F/-,%x@)v00>Xǐ02haT)q 1!pA2ČjY@gW""7F&PM= FiUd .p ̨FŰ c:bDs:NEbw;,aTҲOXFbD,$i0  *Ȑ!8 Y,8Z.0Ft}C 8n mDz"A2VQpޣLAT p ɠ } @EBƅA$+SɈR\\;mhIK#fKߕ2Sr(XY{k%Ś@Hui kW0ohC 6p @|VV+C֑D5cz `H|iw(9?8<ɉ>(yvPB( v: \ 0Dr/1E@"蠄6n #91FQ*PcD%(L,^$K)?EҽJB:(K{N"B%A" DeOG@AIz-$)K)"Y_h/uKe np*k֚0 t=C0 ' uuOJ GY̱yOÄ 2 Ƒ9LBLQ !RB4b2,܃k՜c`2qRHKpe|Da!k!TaOa. I$-ъzHIWm)JQ 2%ltБS<ʱJR7^DGhL].3"1]A@xIgJy"!-^ƵpN] .\ bM7(CAINOV|d=ܜ`==k`<Fx OJDQ2vu[HSE s<8p2D0N[Lc!eA DWrg4ZT_%4͈h}J a@ #OpBhLCK1 ɶ1X nn )V]@`Zy7 p-0>P~> 5&0LWJt b@k 0 S C*Z!LxNga!\0*Ey351H:D{ U\QUx)5£ Q Е:k06O!A] 39`xx)$)J4ʐ] P<` +*P V@藆ؐ8|+15*/< Uã33B;9# . *PB(!dv"{'#9a4XA`ʨ0B" !TH "8N:@4@! *@aH^yR(*qɩJ &tȢ#;K<;|§n-A=X8tb 4f; $mq\)r/NöÉX$@ѻ[+QÉ( "dW:aËaFC9B4LG 9R_%: aX* G`XMDK|х,ʌ$c`px?Zȳ3XRYP @(1`1XŠ:e"Z;mt)R"&y4bj ʢ t袸ܩt˹LMAIHiɸබE+aKj Ha Cd`4*)¬7 [16@lP=xb@-3CNX; 0 THX6X> :<'ɠhYTXGI>0 BةQe&,,N@ 8HڮO8¡Q;:Ʉ A9 c8)D4&a %LxZӡVG]"NA@+ii0Zɰ,)h)tfa1\X8Nx-"L:a˕ӱW;/5:3I=V+? >2zS[ ȁY+O(_ c>xt腗TE"YH> 4U`0H HaH4#p@ObaS&ꤤKBQA#bQ+5/ө̰"10H)`&mB01 $i$,m u4z"!Pgਓ2wQPxaN76 N ژp* 9vc!8T׊DJnЅ^K?ZЅS8:p9["EAIHjE@0A]ap (R٩H=\)aR:O/+3 ]R[\;YP4 ]9In 2G$x3N=(Aĉ&x`/CK#pq^1&LY %RĮ覲+/5_i ܩΜ2b#P-.n:IX҆Rݛ]mˉi(Qr[PpP&};!0:]FHwHpтSX- D3)6uX 3d~{9;O3VH6@ H:! exUp|| ȇ*JT1 VZ%- q?yIH&_ 6by)&tA\)ެjQ=rŧbAXXSwЀ7H(;%4e Ѓ2!Ƕr8r@Ge m ; wkbⱽx# G iؠ{[i0[{_Qv-]` 3.s "Ga"ͅ3p': Y,ɀې#i0*Н!Imh"p)( " %ebs0$=]< ]0Fa dae0S]⩴z{l!T]b냇iAܯ1ޞ4Lc1bNn nL0I.{Ɋc?]{.ʁ+zy€Y="l;Oe _Ը I곁33[Xp`aPl.B%ra)s ,`0 A5zbى<-L%m8ѱua$F^ۛ#8W ~~1ꈓ*v[- *ri) + ;-S%d2So zt@DUadyЅN[9P*X.郩U@څX%M؄XUv `'IjYf (ٓ=Ѯv "#F٤";(t0=+J"PC* Dgd :_`{Ax`wضG(7cB\صLZ`6۬*%8>!(,5: 14-Hd2p ZkɏPRI9+s*HqނHT@È]gK< ? .@`Ñl!q.bvɶ UX C)3yy%"9D Sk;;90!y0|G=-/ƣ3FS0ץ&M͜x.9Xh)rHx6RƵsFXr0[-GMtuZTS=TQ.PQ)MP@ʠ?k*D(]]YpرwىVYZąv4Gk)W)W U-@1. &C|`Ya8؊\(?脕J!3^`ttr$1P.]#FԺ`MaDpvvEUi ȝ (]Ґ:`@@02x3(G Z(_I0R #}/ q?Px'0t!:6-0M&!6x $fLaBL!tR:{ |) *(B£B%-2NfQt8) 2*V|C刕0q 5rK Qj /x)8B gESV0!`SC7Qg\tI/TU%щNF %,WNc2Phg%ʝr=l{d¬nu%oő$h@@4 n`ll6(QDAUyG6aX/(@"&\!|3-t1]`b"H*:a}Q:l'*A$I8;mnKEy'F,ܩ  .aP,lYy[4%p!@Tqy6dx>{0n&:XMUP o8XIjtV p̈́W1P:D w`؛ aBGq @GȄ8IK}C'((A:a+ N@}%h;|B Hlav|B qBY@Y`ULZ8C*[?oWQN9ABKu\XF|@}æH,_G |(SdbbNv8\hLET}nhl!6m<=(ťB_i5A%>5HC-Ԃ4H8LsʜB8+EB98@F /`OTS<H' ̠B@>`MC'-0A|D8BH 7Ti'N'T7 $ 2ԡ.(DR .$8RTŧM(*$hA9@ö 5dAP pc+Gp F\Ҟ6*Zs W6`hR1.0 *~)IAk5TR E9\HQXvд $@HHR *ÔFi\@t'D,'`7hAYB>;h`CHX*r]BeBu` 2JYH9\֐Q ʳHD%zl70lG@40(8sDXXC55>lŜjO>:"<@C;/)UDAX5Tr:,(cs/dL8x@v*AA?p@-$ $ NhOr:j~|yGL1%d+2F@9`B @_ .c?RNR/Q+uM9`#"<8ZnLW5P{@&]hT%4J x7(4hS *D,Fv[Q@P,NR8Kzz3 zĉmN9++DwsĘ?\Bojtl2  A ҟjB#GpTX@ 2W*xCe‡X)PB'%- 0F.Q*B85)S(+lc9,QtEiP+5=tiӤHb6' .Y{8)xiӭ8P aQdaB(ƒ%p0f D8021(0&>7<'Z`8W* 7 hxh;(O4"oZɢZdVZ" j1H"KX@I%^b'/ .O:-n!M1J ' n 3lb2I;BѻZ@;!D@/+(Ҁ"j(J"9kL6jE4KոWaVJئ BNد]yh_Nbi NVѾy -48)"L@GpǒRH SхW:gs@8:\A_7O c;r8@(ņכCo,>1"O,0X泘jb,b$E!k!&!J( 1,p 0eI9 " MFiNa)?VHfS@(ɾhѸ /B(WJ3 l;D%. @`فvv ea4KΠh(Now:]} fXc8M6("2Ү1"|((z (rANx>`ͯ@ɓ߈o12B` Âʑm'a7φЊi'AK *,.R`?S1"2 $,Gc; xc婬tQj GZ# 4x+3P`8]fp./ a C; *YpA+D1 @o D*>3##_c^4 6 CFؐ.-0Q[],Ax_ЫX0H+X5>d!#Hamg+fy/sAC*BOcRbK~GyN`0 ]F1 a4CC+VJE0lasH{qA* XbK~r?#8qrB(_@x- 1Ho`#-a 2ątxë4kK uà[ 'Ȍ脋MGt1S.UC`0 Hڦ`%,2e!,(ҝA+E g36P9B 9Jg [ (YELloEΰ.=(r 2B.<9ҙt]>ȃW H>\\ X5! *8Es `/(5BM`0TpBi:Etz͐3sh@C a' ` U҃`#k Ћ:Ejj:) k7JN`? Y!B'LڈVXUXE $p 4`J*,, ,,!!3Rrn6 "rnt5jg;&WF $'C~CZ; a87! P +\"&(F&t@'0" 0 `C~(m^An*=HƀB``+\cTp E(D,( 1,0@^cRzz@(쐈za-z$`?&|ezhraJTa2:ZO.עA TLT": D!  ƍbL` L !aBҦh "7%`p a ("ad5,Pά5v^  jxHDǰ@6%+@(0Фr#<~nd Bh<$2܅ҐEdK<J@n+~KD7x` a`&@4kAsdE#98@kf 2,@&rIXR!\! >Ah@蒥LzaB:,R rhɞF 2J @ @\Q 6*X;{1Dah-VI nҦ)1X7b") 3j!uQ\E8a VAf`Ft)xn 0 (8M1r(""B QЁ]fF:0$@d}ڎ( $х"q-+&F"AAz8A1z㷠h,.?O d<`&@'A #% .Q!'Kff. SlNJ .Α-0GC&!Ƕg(ʯIiF#(Ŝah.bN*%rRB b(K4Au@lAuZŒZ5t( ps,R FG2$ @g UĴ @@FNrB'Gk>.=x '=GdNܳsK'tӲCfB FPk& M>c+-@& `g+_`iAC0u)u RE<>Fk@$ k opl>AX*+>A@Bc4 b z bdY #,:(r $K; `jP8*Pge|y f"=9|AQ笧8r31{BSY!0ï@&S|!+cE־A3N @h ` "d_DZpCdN >վ&af@/cdv ڃS>PTNrveh6!e8ldIJ+ A x B o ~DY)6 NkR!Dfz1"{Nc]`*ovj0Lm2 9c  dam h fnR@A()h)B(gba-@zTĠm!Qi8(H`1X! 1N䀽f"bZA?BDabFQaG1p@$)d\Bdxd\8dt`U>À8d|ƣ=J/[`N Z! e@|E x1LLs/t CP xjk6+,o `  T{A7A0c:BfkIV ~`XqNc8` 9vp`* 8 PaITaf`h X`頰 ȺFf\ @3͉lFЋFIqk<D0tW}>1d`+ +``4NYTcF(eF\ 6-jK#F# nZB  nŜQe ҁ €$@;SSC}Cvd r 03 XlA6Aqpl7v$0d;Bl&!8>,a7,U@, .UdTfr;ma`Idb$}"+ .!U4F*B>Q֫GCEtB}` vW@t~} x@wRf^& @^?09,4Jld5K Az`dU?B(2 O2z  LzDX2,2S;Ҧ`(EEY-~ 3 V{~"HcH|e,mNa,UB A0Dn:+Hr bxn&<r<;] >ZǾ/*o%ötaW\"N+TteSjE `V h x Ρ`n …?&aĨkN `2+y fˠ bȍKM>bL+""?98]2.CV,5a 8 I!,m H-ASJ9@1=6-#1o> 1B @0"֧N'1`ɖ`i;'j%Ul@( }lBDz bA@`#dpTM+0Ua\ a6d$8#h A^x$o@1F &0L`cXl\ %0o\"rqLj(L[XZ7d` [%ǚrC6e o(p%YZt}.tgn&] ZHaZ jɺІ.y SP$"`b4n9[ٞ7> P0Z@ ! b d2B0x  0Z;(@)N+%01M<bpbJL2ҋYCFp@HEΘ @I= "%,؅if .WnҊ.RY'Zl lQRR!PuRKxU "]$|+¢7FI'>6R o$LZ%B . F"P,vӂ#,N#-Ix`L8P}@lٽ *L! C` ^̃\(@ "`4i.ZΘ`G4S4.l#E X5[`0sY!]PA64 Q~]֋iox$@m]#:BcHb@ I\ ~vа/l!8t ;4")+@Բ; dMFCa gt%Hi+vJcb Rp\*'X?Buh`"H͘Q)ԕqB$갔Oan @(<1xH6g,Yx8 +Fm,#J:;Gp'^1CnPqbH5bj^ Z2@o]X `h͏f- ?{ 4^/q>):VK@$c 7HBDB@TcA2,8N;XIDVQ92joc,^̍+o # p%{$11W40 Ĥx5 ,0!Rbc\'Pl@P$U 7rP$ހLB`BV'g%'R";;R"BoD t$!40wM- FN & U?R`aN"0sW# )0P 0/E Tzj83E ea30G - v1{@30a` `.!Y$]_`r9W]!UuIUnьT& 5$ - }@* >ts P6v',$YJΐ umC yAg e!؀ =0ȡ\tg 3 !.P$?1/lX0|?c ` p`k؆qm~!O27AE0xk`{'%e1E0oY0vX=Q#rU 0T1&QU 4e47 pTU\8mq8g)wE>QFKRca$6DJP`TL|L 7 @- +s0T_ KP7@ t; Z X 0C '`T`6(\q`v0 N $ ߱\P R  R 4D%!⡒P?a3r Ai  ?Y@,$!A$Y@ 3PtP:QYd34@JAÒ,u7[;4X!k # jd WA%a8VeW gW#'U|~zI/TV oFVQp Z u3+ ub @Jz 3ZKp< Āss;B+CP Pb/ItcR&mހn٩ @   i!b PSq!k/? ?`AYyZ gJYJ 2@ SU02'F2s@#"@()w5EFppQ1q?4/~EI-Qp!eF CqT&a%y"&%a 7<&dr` Plp  p+ 3p _2ހ  `O$4KpN;:FYK4W `T`P\VQ iJ I p/T(5=S]aA "0 { Ņ?0gPc@kC ׆~<7} g}DU3 P@ -S`Fe_g DP-!2`cl8P z?yp :<Ƣ[.1pH7d.` " k 4;CX%q's<` F` lm kr(@}9Zr%$a E&P` k4 n:<@ZH `*@m/lp vPZwUހ XP , i$$H/A=&ã p ,`Ԑ6r끫S-,s*UyA"DEPdh0PUU1*p,Bq}@Y=R 7lۋb6sk 1`&T(#BM&B&{F~T ZSo7'@'  j*LrK v u rpa9tqA,a/]qzi"A5DPŰ(+)8 ` gX@ `= bl ,d1E!rEB4P{Ql.KhyPP!}f1=A`Fe9k4:1p:C- rܰnolrs G p(UBa Im%:a$G}Rc ZupGf*0N5.7@ 0 5qʤk9ijA&zS4@FWB.]csqh%?` ٸ P=w# @dpma &l> z"?p^1KJ7VTޠ9mJXJ+AU 'P$(q ðtcˈTw%VFeTz5`!&Xq:36QFp+: >MT8,E"gcUo! pB5A @  7P iq3Q 6 " 'Tqb6Aلu} ,@ !2x3^rd P0 r@@uQy )g~f.CE-g,4 p@ 40\]D H䍸$4XB03Eγ?[К 0$xI#Fр" b@B`ȉָAvĀ9(6L9&h/>v ), !Kƺ29zJ 괫̜?Nozsx#,>KԒ `ؘ@aF&,2F 35:G0s 809'Nx 9 {+5{ W\ᆛ(Riƒ,ʹ )0U+ ( NxVLኍ9C)] udLO(]ؙBI8$}Ø~5lia}4ѧ|ber5Ȳ& #o"/@r"ך.كL`[l#` )$BWj<^x g CP2i#$m(DeXOOث+M QrU񍏅; <r9V|=aIlK8qLWR \%s@h 6 6OΓ?DbD" &i|Q*gP TaXoA RC jh;v3#H:FLat Y>؅X"-b~ dANrNDaK$"tֺY^y-9l ?%صȢ @g< yX~ 7eDV:NNb ;XqO!M,,^(W+`<0Cz3AZALA& Yg1!8Cr"J6E15gQIosFA乊HʉE+T !1+Ă{qm/44Z23i )@45i5>֋ V0w`p.5N? \ "9B r@ Av5H@Q\{6 Z @2ؑa~ è ϴLhkFdi,uL֠p`)Z|I1 FrvZH#)9S 6QBp2BWc:6m~( 0hp$ttP(`b*(D{ ھVZo7r##KV@@I ZȀbxfyQo& W؄Jk@X(Q4ȇЏ@iHP^J0 Y ()dPQ5҈s pq)X!( Ȃ0)3  X 6Py؉Hpo`8 1:0D9Z"9H8m0E6] `41@b@R( b3^(b@;{0ة:8P €(8 ` $8@Y^oU(@I5yX63Iw*#C, *x/1 ΋Y=:H(H~ PrZM4+J-[aX( O8H9 W~0n,( )8#?=+ D,  6xD h1[(FxOTQ m==` 1sؘDo 8$\O?3 hqboB"@y‰ O4++(Q,E;I }7!S@NDXx9t BVK H肍/*- T6.P ! < (ex>+=HnP<*(C89Xd֍zh @T_-ఄOxix ȇ?!9 =JI [؃1`51 ^: 26'ف##T@6A>EgB x9_(A%DXt (~m`bCC]DBz6%+};Yȅ.f5h 㙷 Xu(݀+YK‡ P `mpnElHEj{W<ئ>!(gx NVА 7)z#$ʬ&2Ъ±#P#*4iӵp :36H%16`Y=#(k6]8.([zȅh\lKrJA@хbm;u!HnQ9=M,&Us0\?&@AfnOj.(1fqP ȉ0$^^AIX`/i93P ؀. hpXʪedHv݉PYdeڨ|(PBʂXU/ё^"h7ic6* pw[01HeU #\6 Gဃ܃(96Wf+gA.Z7j61#rVD~^DFBaxP;z6IF11bGO+۵F@1tu0'Z*l(\D]yp\ b@+$T8En@G)&c9ӚbI1 #N&HIN!D!c,#1&9TG[ a'[NYl.)0nuZOtͥ/<@T8ɰfAC'gEKWqTo#QmzX+(c,ظ< Ak9km+ #4b[['xCA^>چY~aXF $^$qTq^7$[a RJ_gؑq?DIZ>v`Qr C1}R1 WH>QMA gd:SIyl4T##|T Mdpxм ǗM56 GfC_gw`L8jtr 1X^8hv(VrfA3Cwl)&Zv/xl0(߀B6y!@Mmt\QnZ]" ]_41dΔS`Kz퓌A Rd$<*d/</ bq$+%qtl0CG X7~[,3u=CL[݇ HMSvHC K1? Hf!C4d^A a-^"EB?lW|A] L<=3J 1)B,(ILBHYuYXYԟIElEX$P!lPx Pn")I&%_ИW(O !!zЁX!*ĩX|D BҝR@@[\O٭ aXQ$h8T'R1(dJ$̆RVRCҥ1pDcŨ @] {ǭ< ]5XxhMT;C-%H٭M?7A/|]PBLLP3a$x׎ EȈ}!B 2^Ih` ,FI|RB 01Hk}%X74,l—AIlH+_؉@5 'k` f1$D\ρk*lX9щa@r4 &=tO (P_F_B"5LmK XHPĤqH`^'ȁ[@7tdhtЭዛ~5h!Y ]bmE'pH@UGa0BLo \GhP'*+RlVBk:`p;J,n PR_1 I 5D#@*P|M1=t±A`V%®O~ɗP ZIV wF=[C⷇*،s=:@({2BAq<Q/w ƱoE,t†@0g ߬e(|α'͒ [d.XLBW.jLV |<5N~_\&X<;{Xdd_HNXUxC/c2>j=aVЃ-LC9MK\Ŵ(Bӻ-SYUZGLbPMOKDYt@E !Dw0襫W:(VL[s| 9=97$| IT `vr (bQd'Sdz)62Wp[7k mD1b @Wѝm`u l4.Wr +1D۰Dtb0Xg9 0nH* #^&! H#%:1%&]D4XɋHo:1D cf3( JOwba&=exG.-9i9JL \s&KYEKID fI" xLY X!1Xљn%^C8#)6k\ c;/:xZIV\9VZ1b.+a *bpƙ\hNǎp@OKZ Y(gU;ʹ>82OUIK 2/RU !S`&hBkJ#KVfkl10r`3FWżKౕ@9 Ø\EV-zpV׾\S3koJINAGD(r[g TZ>Q&XOBѰ3 &@8FԼ9!$_ :Ql,8E]D(,?"+`ysCN UG_RA$p -75}c *U@ k(HH!!xXC9 JZP)V7UF5DRG|AP2H# `WcC VЇlHOfBA=sa]1VdDr LFw ǀQ,'hYGe`HTc)t`{$R TD"Y0%#Zц><,)_棎f@Z PDb WGqadq%&#tLax&N0/̠=LR:x#QL: D_B! 5"q bх9m3Yrjޢ+I"7p99p4GL@P g:<8v Bdg\şM>F9<5.u0K"FВٚЅ{m&pBC2;u"!H*8%TPxl>j5 :l=(Z|( <ʑ@1Hd@G"( aEg "ԍ6ef:ZM$v8 p]~fܧ`4Z$Ȃ^ H f@ւtd' <54@> @d:HX,,'3C ʦcF! f#9 l2 p g >! Faqa! m&6!G1r vM(OH h&Ikk$r$pz_@ XD&Vc5( @nmMi&b蘂j!9%l.ƮqrlG?,[O$@)A[̮ ΐa %e@ *m%R@Dk&&a  -@j` aQP:ap5PD,ޡ@ qڀA#=af ~Nfs&0 h,_P8t/%!ceBda-a)rr2`'d4g@40dk`Rfd* %FzD2Sda)TV$i@I`h/!c,6S\5`*f"~r.Ġׂi&\\:@&tdJfW"0PzР d6A9ANd㸁`RAlgcHE$.T @€H&!%@,avaffB5`BVP4T$B! 43 (`/v 4/a߲$ANy( f@~e&JIRiƒ $4E60YD$Rk@~RȖ gQۀ 4f:DI" FP(( DT%b%4P8yls*H1fBXro?=f.]wYރ 0lǓ@"DByǴÖ&PTZxY%&/4`Fxsy,, —&Cv).U c3*c"r` ޡ02uDgBZ/RPl*-~V ha DV:Fb(PNk98w 4c,xE3f耝{M0Y@ʁ8 wXph?, ZFN~"ܣ` `1:xUKzF%B$ 7B$T@Da&lb|dA@Πr 6u>c ( n$ / 03 ::bcE2S MXfb H`iB$j/P%<_ŀy$ gߊ(D %xzʁ>/ VE|cΒ`x&`CCz&A `y|y|!FZ\!F( Y0>Vp,^r$`Jl!'3zMZ\EeN.֑  <0Ai\`k0ƍ;j%@ot @ PTe$x b7 oHƊU V@ƭi 8,w0x@j_Ye8PjD6@4o. L& @!%IXN*“0Pl @X rsHX G,X  nL +APJ.L̩i+iң+Xʠ2r$L9N;3r 6DP<7 NHG Ԇ7ȄI3䒋TtYͅ0,O}a@DAJI%F7ICz$tanlB]L d[_-:$Ua6 b N,et@LP.h5I W x{ABQY|%U1 wGHMH9@֚0"̎3:$A xH}R[!kZFtÆ.$1n+}` }4 @[ #Kp D-1' D~`pm}_`PM~bXx t!AYpO,]%Vd9P!G!2(0 (f\kPv:/4 P5^$Cu@I|“ pN c. <æ 2ir$7TRJ唓Kq{b@z l)b),|+7TWЎ>s${ n"K.O8 A\{ʭDP0#/JHW'-$BL}[9b(_LPmEiAංDYHܒ 6_A"1 R q N2 =X 9-f|"6q-V@dP2xFG-BW ~0Z>AEӆ]uh\HG C+J/Ġ qPC&(i3_^TЛ&XgrRv k~ xTH W IPN?H\b"hakL AAh>BȒu BH< kXr0xn8a%R\2D =%tA B+ *Ch2('8p 5Xh9`a&1 51[)ՇafПTF!jL q'x9ЪBߐ@ g$т>WRQ˜(@ 9 1FbX ПA#i'K0 ^$ a2!ȾLg\l# ޗ  .DBg}<f0+AbeHIY:| i t#Iܢ U #aE `2 eCTb!L-LHB><X Xpw,@ j Nf!xO1c wK`7b CMo0Z l`c 1* $U~@H.@6VI8NӟzV_c`ׅ?lW`hhO 6D$8IKЪPOH }+0$1 "@>E ,JP7(aHb!6#a@8K?uʠ5C[!3AR40 ۅpOaF/R"P4)kxu:;{" d3GM{!(>^t P+A ) 8p%k r* xƘя>bd"U!MdGD+AHj##^_?02 Bǜ !4@ :TщA<y+ j% B: P2% @V|\*a(t ҩCs#z(TX:0D':5"MNŔ.s)p}b ob–bi ʨ7`oۅ UE*9@AFյ7 EkT/(T P_d@*@ edD aA,ISJzUs̨r \;́ |}7qf)e8")T iHE7P pr.K bbaRvU`pBLbEp !0 uUu!xt;7yȑ "!s9SW*v $T}@gu5$4{m  A JGX \0 0U$K"$iAkP*&2$2 k ؠ ʰ w&AkֱCbk$ 0 {~p~r !\!]`\5u[Dd+r8.4Pj70^Rҁ \E'pXwK Z -/"5#)/T_&VwP!r0QmpiEP4r` PT> /HI6"+ @} n>za  ! )X/ qFq RAkSn0k9b "8@ ׀+~h(c7Vtu:i ڑJv 1,@Owk@ Kpv0u@;7 Ő   N BKDP8R ) IPxWE_ pG13cPAW"WkPd@$7qq!'IU Xt@alw98D#2I:F 5 F#1Kk3BD$ ;`~zE;Fx%@!,)H u   'P R, 4,xȕWY7+0))zvUr$E0=Vՙ2/P pg/ 6!9 $! Q@za) Jd cP"Y` g,&R /5 :34 ,$@>C 4z "Q'PU(cO3z( u W$.Nrt#04rQ.oՐ%uP ؅gPR97T.@@+|# V*1fS~b1`QAWR]ta4HKZ!c>.10I@ huU(FI=.q> {EF !3 *r.gXlgT0 1 !;x} 6*h>1a 72ֱ6pĀX!o)QQ2uE  o O!h7P %J9 `I .P)?]ar$.V5}PK67d Wo{GeU^vf23ut)IUHa"Od"VAxc"/@{WWt.odQ ! pXAkaO3h`X";5 @52\:SpOP_{ CopQ3k%0 P;"*$pSGX)53VA 9+pK8_Yq{* Pϐ H X1 yhK_-xUrA@DॏGZHsm 0^ FIUpP" i=TPgQpaư i+ByH Qk w]B0 3c6b gYbD +O)@gpQ3P R.r NPG)zGa@ >#.#)^ uU Ɛc6!&RKkPx d_tUaX  JF16; hpHXHO)ϠJ1p+ϐ ^,0Z^)%1 P`(\!))_tAUv9bp%WB2)p, ;Ÿ2b65&4C@G `  0p3KC^%@% A' j! )VmgLb S&'"& _@Pݙ@y5no\P qW lUB'@O= @Py/.TG}^gO3 > #SOЀ*sؤHr ̦ jI \_` M ]| "&RKM0J&uq,BpS"x%a 2Z%?!IPA(mHGc'ŵ9y.!wR400 9ՓE@6:,D\Qa^P$ F0߭Pgc) ހ=Qq T`l ;Fo т qHR0 E r̚ksZ;KtPKq 2L^"fHKq9amMvSkY ]xZZvF"N : KŘDctI$%&IH5L0d>:qS_hBуWr(Z:>AƗy TjBJ5mDT,8 MxjBz BdX+2k1o"|!O>!: 8!V2{Y" \TDH˽)(M \P^:u}OjQ$xtb2dx#f`#7 >RA}:AC1F+js9< ƭ `@1E*Ά9!l?ށ |1 BCa 4Pla, &ƀG:+^ U"=f D s '>rSs+pVy3\33|1.+r@R&rX!alQg$"5L\b#BѡL" 4t_v94*:d.ın'Ѕ|$n/@nT8HLYh,<k0ՇzsaffXTƚ BEx(oгLboKH +,E4F \0/L}T\ aM BH7*R;VOt khU!@M7&$bzÃOԅ ">a=ľ4A  *~h3N t,fXm_ ˆAN̚|JOf ` @$@7pI21y+7pa m@h5%6[Xxt:2/.!|b[q!P M2Ueu0$S!9p&,aTr&'+9ܡ>Jýq$dW$$6me+0~mB/,<#I:a9HbH f TP09 Z5ڬ0  V-(h.iBYe3ˍ1Igjy?́ ybh: !a9OT*68/d ȅp@PÁ( bɉ H 2$英`FH&8(1# S 8I Ѕ( `IA+CdPZ;HV1YeRȺr Fď7psjCW[*`tH*'C}R*\)x6tjH⛐.s@ې{ڑ$HYʇ8@ VF >2}S ƸSJ5x8+E`&E8Vb,©JKBh# Y&;A]|I\M8+UgX,; SW` ^ؑ2芰 o @ױ,9(/@!%˹TBd(CYQf `3B(t [Ї@fzZ5WXJ7xOг**1`փ8o`*T~Mh̉|) (z1 Nm @ؠQi` N(89d\Ip틈^ 8 $6e&m NK0K8D08&u,š%KT+6WyHD(8,b# K\x@0-tB>`_@oPN$ Ԯ կk,h P5Jחh@츄+9ДpI, n؆ *#[ۆO0B]8S` B( J=:8Ȟhs^]&[)Sd  5Qu)K0\?OD\NtE&Ņb"0< p ` Xa`y(:} ҁ9L]`$[-ML0GezFqh8ip50C^[>HcR m:,#F`ƺv%)*W8* ,2*AY? T\y(S y# `0M@ 9!0^{IX( zUz$KX5@C`XH*d0M: AB<%]=ZB("LX+׍ѼZـ<9&B)@P90)%Hat3لS U#(`a쐖u\X[:WHW7Vo0 k|Xr1x 0 9PgǒNb8^m W^ŸҰ mh(8mp"8HXe!W#PVWnk 0 ԎK g#-\aFFﲢe 9 Ś>~4#ӫs ,?yUaH.`M &縹 4+0 (\XGpowKZ 7Q \bD8GL؈ɪ!{mڶ9#lVچZA%e X-<8Vm؃҇I ݄λ^0oT;:ybMH X(R ([2h Fwo;}d\i.[\Ѕ``ԒgHf젅/kn: 3K[ $%1~x98^ ߯ E_\PBZ .鷔Knx0MB n:D/  SVnYnH`6=@%W(  Є=؃3Zȯ ! Bp*03py`<>gؙoR h'] c`T g1+^=Yx]X۸){6 eZ@kY!8ܞeq܀;KxRdyH`2 ~\MPH0*S"p ^  ۀBim D(a[Kd"}p+U֘`"ѵ79s=~PjH=UU85og4}}K_VahựM0ҹA%jX ^K0PKS0:%И0`$jP/kMyJ}`,F_n `F6 `mR"D"܌m:CH<FX9s.M^Œ)#(Fse "$%) ^3"i +K_:_G(hiӧKFNĤD7oP$N5c `³gI#N@``@gQ#׈T8Tb4, %k\+$3/(@.]xKs1VJ2TzCrG/~<>یLeB /tm[/JƁ-Rg+C^OI?1PA/2 EbuQ6P$Iq&K`XT'|7ZKʽ)02S"#ep@LD$L"u!   Nk $ZL(Lp60YvN裥"v1+,4S/Aя-?0S LdAPx1{^K`:SS SOC/zO׾.tB\d-<4 EcY8q y@+``3F3,2?q /6_~@'d'.߰@ mlbNKQBL5/! |dK >CTGSM#֡L-*7m)<Ȳ 0#/DAj <`bǕ'uxCi4Kf'Z:AG\l<Fe20`] "k| i]uz$#LVX^0b&K_Ԉp;$T$$]@Hva ?06v0 . ,^-E /N/Q|@jA6 1U (Jh5 h ^r +)t"*`0x mɷ^6 RWxI/H Y1ꐯƺEd_R> 1X4XV37P7`T` [\ 4ؗBoL2Q a$VˢfaUDtK"K_Qš`#jqJ.ŭb@ۋā7"iJ+W8[>+P\=RUA 0C_03tm2R  0 b$B @%BցݍP e NLO4rE =0q*Pq% 0 QI. [BN0@O:}BWl>Ucj6V/B*OQdA|q%L$9Tt@S: 5&*up77:h w^\}>MsT%6 ^}0Y MaCg@Ɉ!t8K$"`*S1Z%-  Cu-Gd"xI'b3@Ոs0nNxN[:pKЇ3mDS>#Jܧ\^B H8i oA-}V^RA\~(AvI+( Z:xP-zC`9sMd(\cXK,ǯ=c( nLj>{ (쀍0<#aX(a+S)4`R8&Lu8;I,BU E`El{eҺGlKB>4-xCx|!L̃]}/(p<`9C|sidٍd Z$+VÒ|d4V08o:6ĐQ)J?$Ђ ވ@|b?DƂ A,&[1Dn!LEx B NP\Z!lIDlsA R*U<G0T+AKp_̠PK*qoRD#J.&.ѱKb22>O(K|6hIvI( ot 9t Ix٩-0>%~ LLQ. SD7 #Ë9"#ag.CC0آ91N@W' }Qa" EpFEc0E(,<Hv ¤#X~A@/Ty0eKHAQ$\ ɴp5g 8VA+vddI,1X$` ɗdC8'u#8tZ )ΠB_ U )Մ1$\Mcq',DY,ҜeL@! ,  H*\ȰÇ#JHŋ3jQaFAH'K}Ȳ˗0cʜI͛8sɳO9RSRH*]ʴӧPJJ%:UZ` 9qTKٳhӪ]˶-N#H._m˷߿ \Ç֮ %Ij  k̹Ϡ[Sledu%M,װc˞MZ B%@c֭k+_μLժ@#Ë/u}$)B O>&@o9D~hds|-6 [ \A](/ v (aqt%XTI7"(4v55@@rt@WH˪)"4 ǀRqkc@"WΕA Vj[Cz^yD 2d( }!&Xu w -hk^(~5N,i  <[dCpB HHq,A+oFXHo oDg;!&g!$Aːaɩvފa#"`(ԜV^˒*ZD/txAک7o'UaGPr=HX|߂3BYɌ@!U@ F,QB ( (` Bl#PMWH!4dkHZdj7I"XOaQ58+ !@,><.?[ {{ͭtQ$_Xlψ @"l{[85 rl[@$A iȨs (`%+IܾY6T1bx ˭-*.Y0H,d =0`A5ppdaFBh66bCс$ &Kӎ k6[1np Gxrwү.v,<@P5^tc{2XүQ!C$XDױ^z wEmpNr! q=p oK. D זH'{MJ$ n7$C?w۾@D\@!@!·pB7Go`?ӷH!FW(vU qK'YP`yg~pqpHw0{sAty7Z0sHc4}M24>zQv{Qv|Q smiq Q{ HxW<CpcUV\e}bIgBY1v]pq8L@1HPqaumQ&Eу l('QK'd5P{T Pmn`|`'wa~vFwF ~ @$ 29ÈSqf4 T- 3ko=P{KmPwap ?hvoFpFpf0xHח^2MpT𴁛atpgO.xQyFuAyqwA PU{Fww1mmNmt̶٠g?8fW[I䑜TQ qs!ig |iFaṭW\x)~(qzfR{q QZ/Ujf`)F)n"aT! q!S Ot20SgB@FxLp7qɸp0P{t{a fWEXM`!^UTwA 'rxI7v)38 -RPvQqjM\-Akjvq ː\p0v0cπ6)Q+!1~P.qJW S-e@"Y|kPHќHwp2`ɚmI[ ([&14K6gk JbEV ˕L9Tk3o4Si~vY :k3f` ]`9BKeg| ]h`bqa&>]Z (fP; JpEqk9\(%UHg+;I(0lTHJ(r‘}(q™YkƬz#j! +rHD O>0 Z rA9kt…QNԉɕҽ'_GdgyB**_TjP*6[ցC fi(pAU^|AALGiXQ5LMe`ߥX1VIl& ^,4!9FH]z= \D@3R&K@}.ݝ1k!Ѝcw~L$)s†PF Mf$ZVConj珹6 6@;% 11 WFZ^c耈'ƋN#dY厱ౖ>g*}S;\>7HnyQH|zή[.4bK%1z<֩f쳓`i5 .d>&]z1sV`ɉ{QU[m/Ia F٠#.6~e̴z&e1l2 Z ~p~ќY䎿'Si@4>G,5 0 U10UJl$D)Q`Į)NLMfP8!-e5ZQ;m BD-10:K:=Q]v`yG~_HbX>kI_O 1W:43Of^]W8FH>Oy'pY_[ E?^b+] <\%Z?O j?SG =\N(P1+䇎$8 eCQP!(*hLA.Db3UdBYM9uOA%Zћ403Mj1R6Ie-“/_̴Qւ"IUD`f+Xٸ_&\xhVj2^/l/Ave,B jeuo~wW\UqPӝU6mӫh$H"Udͬ/Y") $ZqŸȩ(dɺ l8ne P%+hl+`27 2älPtpFkF9pI/(䢮.HS' RCHZT9r˄|sL24s%v& ҈J#&{2YZ/"oC,rҬ,ڲ.#htSN;őPiR835D )JϖP̴TȮH=rHH!%b%\2)J8tZjZldS*O /=RҢ@:,)kw_~ydUY5s524ai3v׭5D{JADA)40W::FUye5͖%,R Vm'P*VDiz%R n mYHꖫjg@TUkPUPLHlgX 5؅FJܑW;oY M > m1YۇR^IE$W{SW}i59f) }T*Ԑ<a08ʼ>)YJ:QɄFzYzwc*{Lc`S_iY}xoʲwr\mn\ y9/{$`+$ajb:Մ|oBh$9Tg j^⫽ %2\ȝTHLOh@P?)A$a_mFU&H#q"gaPVóȐʥ*t8I]u$;$cؓ5p Jv2āmpn7c !ˠ0/U.u=3FR5 %  EubA,sP7%5 ź4 Y&DV>҆+xMV[%qXT !0Kmnfd[^kБ U1U&Si-7HWru^<2%G *WD)nH}nx/7-3to?%iS%PU 9?1tsyd3eyd |ςw mߑ˒eexn@(Wy& 1@0ˆ:+ K`7ذ#Ȗc¾¾db-܉8 :(: R0"θc[ ` $X 40@0*]C؊S LYȍtQCp–h)=Sm?&Ȳ#'xȲ2CƊIHZ)3R멥`@A><[PÜ$p0!:0!9'dC E(nh^Y" LHT;؂Hf(xle0@j7P$ ($@P̕H;LM0J8i ,i!U` hq, K臂4 ʂ؁TbŖd+AGHID3hJ5< +dcEQY„ NPK`,,Z̔ t M(P%{ ~(Wm$! 6*u'ft)U]4}4W-C32 |k-VK44N L 8A_۝v̠[ Qnwc 7p} #JZ-([.T ˥‹$nXт.2p!D){!ZY=Z -i}[2DrՂ-K[m  R#q >ոBUќg -5QJ5u- IR1a=ٽ]UZxWX|u\P֗^ݰ[ZP!QuK$Eޚ@E/ۛ0XdE8%]"Ê9k݉PVD%/ߴE`F4 PC(cZЮIUS4eU tPaZ8£JU >`GzI=$la!v J`Ӛ ⛐A%u#pN0-H V#0F#մJQق`ၸ0P9w<@S `Э ]Ԯ04lׂdXzpQ&4W`~Lm%2Z \l pK(>L?3 S')HW0M]-`˝?~Yl1#K!`k䂽;L.ix)9-W 4+b`R(ϧg֮"hUKgJaHוNمadD *4MKZv5dѽ\HQ3iXo0ZB%`S]UX +;Qx7] kI)4k = g8UH(MPe 5h\ %g&nXn Fg@/s K~M@3U 6 7xA $&?v>(a OSfMKpPgik02/m ,u #-֚<ЁC㗐  _A^`dSb- Hvi. H■N׵͂oxHA p* v )L\Q2h 5qvk ;V-nx Njo^_bHAI  $g+(Xi\y/ɏorP zQ 6뉁<Z->x@0ۂ0f^MjqF_lw-Vtuu t,[O v@)TCH urgAnퟨP˝s#e50-HT`.i0hl?pq6'MvMV͟p^oKN=^҆L^clE 0ɆR-,wϗsH~KupܕHhH[U2gf7_H]QW cT͍]Xo3e'nʀ;)Wo@͖\x_;v7`ScU0h[yɧM% їPߜH]`z`dfx zcJ ^9ܥ%y.|Sn22ĉ^R@.qHi8@8DBeߕl)DOw /aG?&tO3ՉDN^/`@Gx,hS: ȬRk14Ϯ{Ю "&AvT@sک3@`2HbF@ܹfJO=IS윶խ=7#k`f/̄ Ӵjײm-ܸrҭk.޼zm{̃c(J ᑵP)-C@cP(,>d\0@qo f4(@+ z*ڲ`j$HjeMdאVv5‰G&f w5{. `AOL|/TK|x * eǚF -  e5Wsn=AXeV(DHAAHфVSN0Ai1d)Zp@ A^ 4)w5(SqYGԔWsәE!feyb DO5T( Y @1(@'Zz)`&A!mN-V)d$}5vP dsa%xߌ#@% .7tAeL7]PpsϬ_C4)/UA[ujA4Qu@ d]Wyou{7jNӮv "W0kƱD}54imii1X !? TQK^Bٛ[ A*73-22Y2<|b)¢RG[ ⢤`A,TS!ĶVo9[.N{PT{g}q8P$sۖհT 5A,A% @1JiO/u[kf nPƅ''=nmSj uha<:PP )Qh+k 6W~< W8] ~6VfKbD: _ePw)@6l"m/l ołVN s\ $Ej^D(LpD]l‚kA!B@OfT`{:DMe"NQא±~# {,5L҉_xQxӓD)9[ 4 lJS2a)!"&bk/}S\(pl<;ȋE?v; Nfxcx?%bp3?PP0<':y lZ-y9 F7T q$IOI*gr;Tᄞ T#2@3I)(z;xBtZGҥFd }&p!E9[3!M}Gv^|*T I PuH%uF?BSiV%3GE@fdk8J<L /~4T_ c2t~a@R$bO:cAkϙ0t4Ycyh C$ ĵ0yrbNuJAcjA7BabC:ebB:T(p2uWE/ 25H$ ]&4K@Qn9!(X>QfH >F= 7Wz Yu2(Zp`[ al\;e!ɜnukCPZKx^BEb"q9AYL/dE/TJP@ƷEd*U-U2dYWR찂8S֣f_ߺ!06ÞQP=c[HYD|!:;FE/#A笆Iʋf>`-BjŵD .o ԃ QrFjB (t;Cp4B*sV/ɮ7yjd@$,r 2 ),C6T؞KA4 !İ8S1!zlM:d!܄yAƁGNB^x|$Eȉ$@  BU1&[lX̨" /Uz^Ќ*ܨ ЌAC?\MX%\k TXVZ ;<U)y89ـDgF@ZQ,fx&P=X$AevhZԂg@|AYdi2z#!!QO{7gCLPE L5 A_VXڅ#xq2?#O @pl7Mwl7m[X9EH{%A\\Z$8<~JPfö2jCZh% |IIyƺB۶n!gq*NPk 3q 99R*-Tիv^@4-p [$aI<NE| V,\BmeCdkC5mN쐷[M3֏@JFVbAe w DTy:EHK00ʅ"Cओ[DM!TNؖyStZ >[:(zȭm-HdNΐS,ѥE2Dmҙ0`0[,S,A.oEO! V?VwD_"Ī|PhOXS7 /ih8AJ\((`xqSjj SS-R:P.*O w,SmN% 1\o-DjHK4MMy ׏;:1$c_ qep[ 7D|VJ GSh ;.[p6DUB@6VV6C1  qM ĺ4 [[D\r$_d"R [MX3xV;eS@:)OA], Pc#x@sZ⺅€F)&(,Mnؕx؄ `Y0 5Z`46oPf$A@@(6 V :;+YeYr #ēbޥ&gC w,h2 85xGd2Gguz4oc/{P.ư 5ih:08Y0_8\n"/DS[!B5ApC4q1V?vGӆȕ`g!9UoEy₌@8R4vI ?Ii}[\TblcQělw uA5APCfv?p\X{`5dWu$AX!\(sx#zKm<>w-Z1Dv Ĕ?lAlXBZn6Q|Lh-u_86hZdjۅzD[b*Eu<]|S2\&NuOV< /oxA,8B㹘^v o6S}t?2x)oa8G2}ĉ(fz#D7hv(<"'O8B6w\q<6D^%f5XLaǏE(.G9Fkwdpw}F]/xe?{ ExQ}3"۹%.r@:oxaH[Ps|(Q%:gBU!YXIӅgE lhhC2'꨷KDJzܭ&g۵[h_o+,q-amBGcRl«R@gN<>PH5t*StIL@jȖ;1~Od =D0$7rkm:*b>+/4`tDk0xaB iį|,L`vcA>L RĔ SD2ygN;ys? d8fB͚|a^xpA?vlXcɖ5{mZa=(lkmx=KnB/EعȠV`b2" HTx2O&\&|@! Zl jvF(ª28%khd7~yr˙7Yw npYZݷ׮Yӷv4tFV>׏/0*-Ԧi+W rPHϪꅡ)*3H!eM<U\1 gD(Fˑ抐`CB!2k DɄ#4(R6NcQlk t;誐6|8}.H:y)h.HD@"N,> d)\kdI$:Ȥ.<RS$B2CL;DMp!~*M֔\uݕ׵z!;<1`Y'r&$E:GaTGCZҢM22tu" 3BTS"eU ҷURUU 3p38>4VZͨ ZCU{5Ƶ::1?B٢f *hFG% $EUrNhi+<]l#Q`L jZ5)S5c7^е垛ߪ.^dˢKHT b$214L(?|B,RR%Oe:'ېtJ`2;rתVmՓo߽8:b٫|?hO B@ȭ)*795Ӝ TN4POTVC*^n['\R `F pDc@H)$BF>df4 9*@jT5(/8v$OvuP'’N C !NhxjEB̀<v IP ;p)Uv.$ABr1^ NF(@1>{u 9+Q@h&@K>de*$<Dž$AtXD0ja*ZU"a0D0L$D'<0=oB`hY2%pH`&d8r=ty} &YF52ȃDeVAfL cV:[ɩ)S&Ɋj!uspiwI> ;h;4.\>!U5fjjmz.0$ JMA qȱQH@i &NR"c Io DA+(d'Bj-)R^hIxk4[=Qiȕ5mz a\@Kj"T!Ӣ`ܹ.tڎBE '=8AbhP!7BCGihբ "\yV..v, {^3[9!)nBR @u[a wqbxC#ᄜ\Q=c+>iHȥ$zCsLFtaQM I46MyE%}k!l>Fr/e/k:!QB2LN'RMHB^(AQIO5~D^DG M !I]6&\J""(/_,pu|tl\ܼ R'2蠐@p-iG7FI] G,t.{Fk"M`D#$(bl *w0,Rا3~ !2]-.5rYd0Yu{ߌ ԐL4 f MoӚH"Zz&CH]rn]H\:p qɸa.$sF79!vR26akimx,6ޜlz7v_R$vl#w"SJC ,v)pe}|3'M.dp>-B'8̢ /;L!9}A ˠ" ޣRĂ\m rJiT^U JglqnNL/f˶D <'Wӓ Fl!^9FE-F$zb1;-n"|$"%f,ch\30$KT:7t!22E#!KH.TQu]N'` c^S!n3GnxBD2b:`1syc п(:Iub <4P +(5:ЦLݧX"s/r^{EU׳Nt)mg7^=_ k; phI&$=TR=P=Y1U,AQr@(S BJ33*")Lh Ą^r+Nnq'kVct`qS@U`L^P" .v!zbP"ȶ '':[7!< owטHi45''W'&#& fspcVҮ ( `mgV/ R$gOb{I!v,'hw'xxs"t "ց ɢ$ІC  KF!@v'e3& T XE< "Mtt4'(W X1cTf)g'0W#"eX,Fm"d1)eOik6r5bb,nn*9r' L4s'n"F7$6{@> d8x!39:!!j+r]6TB aOhnu L&AdI}yyO4tCtb9'rO.8x,'89,8'RIP4ҘRu`hTTg]4N",>1-8c8!L;4ϗ8s ꓹ/MM]; D-kRը,ʠ"bb~j+Rn-b%V3lWz`d,|W ,"A!gtA  o'``ˎ`F'˔Gu; !. ֊/F|GX\B6x.pY^ưj Uk1(P m@ b2,w&bT&i!&Dy1вqBJ;$ +xjB _yfoV-"e;FbuB>F'.k5`cdrc Xn4"!H@!FA' +:->!*v'@{5J(J!!< ${Hqa'yr!X{. g2sOGX >'NҸ'<7{˚+ܝra +$$@!ԝ$A lc"ͧ%^Nd|QD5<> D \ !"1T5P>!p4Y! 8`HHĉHxr ;wx)*Ch # -I u'E@0Iʉ"\W(]Pܧ}2S+(!DjԱd˚׳lۺ} bD +kJib.I1j m|X>eVk%MH!H0na]SE$T"*/8<͐AƤ@ G 0 L Qa17jY"TR}D ЕdY"j  HǔP5!uzY1rH PPIs(C)ITC@T~d 8~)y =dgejAm$%# Y}ddpCQ0mH9yҖOsdeq[+BWr`1 I]aDA%!e ]s)ypH 5DԒ4@ ƥD!t1Ha72ASHVz!pXm(*s6#$@A," EyJ.rG= - KL@1F]R5 ]mۺ`ht4ApJ ,>3/PcthГ %iQ}NJr*CX(̔VJaUB0cm3ͼ.+Ap6 }Яs4B(ElP05BFd$][ (YE݊xCY͙V(8}E#D X8Ȣl$ x)K(K\TXqIYCB@0!PL: %HHZ">]  7$<[$Khn2b4@OrޯW } q;Q!D} Bb X$ctfPIp>X0Dhq"1Fb#pGL=D. 8,ʲ2|@Xdva(1*fK=)2Qَ!3CL0-C27z;[pp"DAW^p@ʝmx/a ]$d5*#n$lX!9" C>w<^6!KCR 1RlrUR39g ʔh":HT01adpV(5!(&@Qd  %hfb'Yd@84Rshv`O5*)'CRI|e&` vs6"f0( Cy0ALBNWN2 ( $[D*̠xdPD?1<Șʄ@\x< > SJ&q D18ɐ!d,=d,L1&Br"OEjU(BjCB{$?jpU2?Tt ;0W 9%~7a9D(Y8Ԏt$:e'rb 'yAq\A-B&m"0Ta! khkJ$ Apx6SpNl`9\h0  F#d4+aM&4d C ^(YXx)%hm*cm ` m/ɬr!3,Cۢ^IgU+(S bDad ܵPxg%P7ў"P>3D4Sx!kx($9"p~ P`$p ز~  fxB4F! rnUwC :7XE9:b<ðC" @4X B* 4hCdC@5C6UeaNA &2?xJ 8!<%"sC3e9aYF)FBR(4PX#s!B@ڳuK)B7rX aMrA# Kka;B>ȽE!2cWudp$ޘĹ~0t!]GЉ3D|aB8B.t4^ G$2,J9U,iN$4l,`7ӈ QDnD 02ܪ(Yq"$Ra(Hж-B(JLW@-eRd@n)vlA1^t6Qvlxl:S'GjPW c)A!zpdl**6]a~Q 9qgu2qׄքz0ralV=}caDc*367'p69@90nAu<5r^g fq.{w^pRN xWOɕ\pP< d@N(S6@V E" 0l 50`` By|&+t˜\W 7 a@zXqhYr|'_CrR 縈 >8X!m7 >"RvX"@Nia(A'rQlu88 )B[Pbc=63 @qQZO` qR-%^pN%a2Wf(qu u5x1$QN(ʒt yxz:a 4' ֌ ьn):(!VVr h*hn,8@n8`a6[CakYIQ0|!g`#uP`pQv8d5ӑI U@^-D'IR7c R.t iH&@w/$]tQD{f c\ɕ00B  1zYp "P`Y cAh r/|l)rVyj9a!klWkWE)8N X(Jb<8 瀚p$5CWn`C*Ued0=Q's(bth@ne.)pR@pPYvL80YSp {1F9(==bTY5I zg[B Fx08e`L {& ?dCMXvHq'Lo4?JCQtN \a Wma #pRO!4Pw 1a bWDPD c98 I =C! ),+#Vboy0 .0:ȴzJj;Zh W.5*n䆠xS{ȪA Eq"f`  SAl <bvPl9J5@Ca2`QGA^C-&h4M&KbڐAQ5 #$G0ٺɂ =?ЋN51a9H!D3z6d69x%Lҫܘ8 .Wa #wh+WٶJͺzY*a۰k8Ћ9w; y{PJ5E6 %SQ0G|LR2,41&W ']D"p@l" P{ gր04=kF  0uHL=B`58`L[BzhlfC;.w|r\ jI <]q(@(t=.0;EơڊL3 PZ(@ 3qw~;>ƜQwW,@w0 2Lr 0\`J*@I3G#!ەiT$S<-9SE|(q hA }c9;~As<;մƏFr@ HOp|mcAS amjcN8`,(`+:]9"ɂJI~|q q(AɌ6Ԃ$!dgcWDg-bH( ̣d66dPewSa18%A67\ ;։6Pj(o} ;I@p̂e)sJ! VlVP1 Z2 {2vA9cQRNx!є=a jh-`p@.`/Rv3 F>*y7+%tjPg.#-UdקP8g$sC|| 9QiۖcЂZ%/n yq@}1 )S0/U i{ N;*!*M2C?И/W_+ zu5$ϰt˟?JF0y{c$ B-Q6+ř+ ¨[vCN:ω##|d@&R o\@Y,!9Ԝ6)HкCd''|-m"Bp6k)Qq\bfbr ꪊ>^C߿XTr"C 8٣,j%@C)ѷ u|ևaF 444 wQm< Q@T"+>3iK6wqa˸H&5 g={8+3 4a V,:k R>p1qm E A >mE 2@g ?kO !SA8 POKtc\2ֺ3{F )zz0˼(@g#+ 0'OQ@E H2$1r$JBCL5%*Xa \z!QbPAZ`VpF&/!Ȭ{]!U 3&qCB5m GC5.A%i.X❐mlR0ѓkJ0m`!Dff8K>y¡ٚ ) f@˽ "\pe8AYm\5hGUW 8!(nK0 0sDpd΄+f9<>@)' (jr@"#| ( jªbe*8f r!  2v8`.1%@C$h9㺖&䦭mh~`c"&|#"("1+&2e2D t@?BG`PvIh,eʇh&( ]q HN;p YdB }$KK(_c+ ځ={3FNtoH"2tHo ]a ,80dEIhEI%JT(OD@ ńC8#Y*[%\DP,NFY\0O@rJM$ސ/0"hhu3H14VX h" Ex%$5фIĞHl2ZfnNȠT "Ƞ#eTh9W`6lS"ǶYvY$mrW 2偰hy$dx}oM쒠&*:@AZgpp@ė f "jpZB vsmed4 D,l EUq `m9B\MIv(P1eBBM8r&n[BʆFP!D&6Q$!* >bZSo-b@qa%az@R=@vy)])K V haHED싒KT $A%-%^ %t p @!@n< c @)$a0$  L$aE-fYGJ{BJV@Z9bIǡ AIMj8, "p+ENⰠD R'N%Q$H7DHDP [B:&njS"pBHNĨeАD&sj*2p!<4Hp@3p3mO4=Ε .k$%9s&AR7 / $NU*F& 1Havu&@DqH6QL 6L7h"J"ꩦ3ܴ̍ hk=ܨxf"bo<ړx^DAJ,o&B2q*ANЇg,&H1@A]Z /(BYUAA/KvXzحvQH!rE0G!@ 'g,xPBSDy#%}@~$l! 6k.(ցDArBC"D"g74FJ PMA(bCM[6$AlC;%r G؁Q-K@12tZ9)B*$&XHXN"g `2!2xᅔ+H0a{ 8.!:  :9kB", MbcDEN>(H{L-LZgmh i@)/Ml3!Q; l u swa肄hdh; J$JH@K &?⸢S Ě;R I.*xh 028؀92 kx9 !x@JB6IA"  A~ p@=(ۭxBJJ EA3!>H*(q X"< B#@]+ :~fM؀y  n(k , pj!C<8)Æ3X&2 ŁxN>D(L Ya3ƸD;hR ZL 8)B+hP{_ Kՠ˄H$/Q@CM̪AY8H8`NА1y W<0Ф#Z*ь ,}f̈́ #5hpboH *p/0I=)1o\E* XD$:QNX)( NɁp8BÄ0a$DJP DА E!3))$c!P"Qϙ@PĀ"RS0Q( .> y:(4H  &="kq8bb̄XWA 3hy$PxiŐ`@әxn{Xp` o+E:xy$8ߠ? ` /hXI h  ZЕҁQW<̈;381@P!ܤ :|PUX:!EKFwM5hQ  F%h>(ݙHY(JɆlЍMсF+GYA b≭͢R,hSEښ?x}9لY0hX v`52,:e ਀\4/1ZNJ: S/S`1͉!M  HXKl8a/_+ q3iPch!V,ĸ*fHށh' ǥ zP |@!V`M>Ёv]`(~K]c@^ , 4Ƒ" VنpQ^x4p=@0 P6ܢ4!1%0@S}<@ 3{2]h\ _o~!o@ڕ}Y+s <8XꈣpiaIT0<@ -{ߐ0S@PMXyԠ BEiHhVmKeA,N b`ˮ;֥ih{QiI HmzBXu }ȿb (";x)^`$6 58Bba)Ihfa1ɣ7 %ȴ4V =, ax!/%_yeΚ plN (oZY-e_1ǠH ehZ P4:1Rxȣϱ hŕb\8h!x`XJzr"PkHL抟3@li6`-cc 4`((ޝ4孚̡ X: _HrLqʮD1j(0_n5 !N 8Sׁ/ZlbC:]Ɖ?$H,Á(>>W" 82. s`X"A-IYl. $3㊇6hDJ;(sJg3䄀ef[/Aťsb X#Pce?ha$xK{jOALFB9"Ȏ>4SS`P LMXhl,E `9o#K@`O#لh hˠ a4r)əjYMBo=~ȁ6,,0I;=hp E( 5[ȂPKʜY /0FI8<pnjZp P"PD((;pK䘁bS 9i3xcx!- ЀVWoݟN4&@4h bf5^l"h/RgO4J )LkӯOtDXhY.<f `A=26nx臾, y0Z/ @` PaX."3$J\!X[G$hU`-mG>fdͼ" 彣:=\jKa+8O~&388|`wlI! )p FL| !7 ZZ{pZl$P.&!By6PIE$̍Kz1b1(BAH4A!Dj@ [(D **`ԲP  @&܆Her%ވiAHB&t@(<Ʀ6qHx$oY5'c 3#-6@MA 7SP HD5CZ O՘0 d ݦs(GlH-G 6<-Hʔ|x4D(zHc?xWge0{1XYrдZIVX 0=mp }@'>`:GjY\}$M  DTJHy=KD@yQ̊\7,ct]l]D^܅IxB@[@GTL$i_EZ茐>uP  D)՝byXP_ҝtQ@OSG"$.XAEW+ɻJH@?\.AGiq/D4$ p* awDT<գlE3XtIDWrtY=G0@Z xߘHZ a oZX@VteҩA@ìDnGd`GBO y D6G(RaZ !hx[.IlIcDB|0t5TS b78 b)KxP`}GUpDͷЁ fjBũ̩IbZH4}EtIDZ՞"+B|(K@Z2Bj@a߽GLhwIHIp&S\iPExfj XuR޺ZrCN@Pv P@lVxn&m+i_6HW VC")RʆDXj)U0E/Xʲkb.b@D9D肋}%DG).!TmSwPαIL$ ,h֢B/; mCTbJX[Ţ^k hS 0HJyZ9AZVZ`A:nDd@DZ 3%: @A4V|xʸND(mCan@lZ68<o>AG*Hr 0b{-_⟡ЫKGlXGȔٜLװH%S mLԲD|JL-Tbm<đM>+0bĪ@D5l#.xCL}-giPB .{J:;: /xt+K7qz4F;ӈ^ZDLh@ĭ[$W(LqN!anP{Nm@(fny!YN ~(/jLT@GxACH h G*${l0ES(&@RR@lǗG4D,Sx7t҄1@`UPk@V0 $B<шV3`sA6p&oUڮR>L-oDIDGj ̘#  /Sa2,@$vk$^.E߱塇 Ītw4CZh^2DJ|h+!0FWF'љD=\6 4u1Zd`F9y5 fjIhKd1&rl5| < @xwĬ3ZЈge 2肽 ąFO2; ܢ/$ < &4k&` @a%̀. "Z, M0 DI;p@6Cq @%"\Rt& TQɦӢ$hE_Tj q+lzr4Z$hGxZY4)od$nYƳZFweZT\g+w̝HhK gj72| 2J nhU TG#h`UG0JDG[j@ȕ.#z|+/&K_}lŒMf}KkFOF;Pvrym}L4QqZeZdC3 zxO|H@\A9Ze6 DOæv[pw]oqy5 Rk{6XC DkG D9\rwG‰{B'K.)$Z‡5>12\ߢwCTAC$UdI #K(BGm$A?|α@Lp L_hK(B9Zl Ēʞ7[ͤ `* xm؅B?9u!`U}CxD@KDaCruX1PH>&hd!SdKSPB N?r 4,,,)FTbժOݶ!f8Zjۃp[eB[2uBHBd;|Zƅ H0B,7Ȳ!DA 4( (9BZ|:(." a`+#ҫئ=jYȚ#::sHlnƊt14j+ }]j,@H!Dr8!V\q8 |)~ ZLxUF”>!!lHjȡ)pr]: ;j!EBel~d\-<$]HD+] ni4 ZF8G-vAdyRY#TP(K5g-!ZRuՅRwi ,/ 5R]#@$ص*9X6JE 2[gDʖ=`؃NOE=I_R 6a׫>/Ok dQAJ?) ! ޳2:Cv8YXZ $(jG|@ ?  5P+6xـx8gXQ<B$p!j)YC-9^C-Yf5QH5 n iM.-sڗY`8 \gr\@f| 4%jPMSdABfd%BmN(!isIƴ֕Pz&u #!s FǺHOyAA !uBAr x̋Zbt2I^d+jC?(ϙwf $@C Q#4&8,0!̣ e@| H:NHD- $c[ĭn%%[P!lxO<ĐP%Չ}ryV25 | - aR!5TCҢ!$ifXK%)bܒq JņHA$ +\78zn`ф'2c+61^ZHf  Q*dƑ @tS(ħjSAb.lUN}TKE/\*ot{!EF2eg <:x ڬCղFvpTcX e?)wCಃz-!2 1޴A!AR<=, i uB%`9o0%YLDodg A FH8j"$, 2IR :V1v PN)"?O&#dub [ec XUa5X7;-ݧ~\5'{y* j]Id! R^˩jbh @6B(15)Ѐ@@R l'A\ \|m!Ȣj!}'eD Ro\!TP]bb BLm(胔!C(ܚ *EAh!ΐc@p!6%t2!R a+2ha a&I%Z*cr2MZ¨~\!0SaZŨF-ҥ/!\.og.%Cwd!!~1S2H tjB&b9%! N;96 7 q)r#vZր!+R \bs6ĝ!@ EC+ja ' L=h_!aA}b ʨ Jm"7%Lq%8qπ,Pf@fB!@ [ȦiB4"jBIDjb < <h"HH!q!@)R*j(Bd9ЅN"@$n` + % aMZ!ObQo!Q!ˠ%f)V8%Z%"RE@L|4r2'p a% HX \`ت 2G#UV$q@;>Ina! F+^ʹBa. א(H*.-2d̪x"_6lb`S0bɼ !! *$(ubPG!))*b*!2+b(b1l  l%(M*:)Ӫ:%(pLR/,g$!dD^G\qfQ? |B0 p`z/ 2'!/ap! <bJf)C*@2TUdJcbg j k\f2O6E耔DRDR 2r(#ڬ"" JB'@hC5`bG@DDɢE )EA"b҆#,tnlL"T.}@` ރmVuh1 zVgZČMU!|atj¯ʄ2 \@!m B~5I09(J7l ;@ un t:tWc ةW 0>! XUw!ـu"?!^ EB lp!@H :K‹  $@k#(bsc1l ³~4A \$ZHr(hB$@ +Bj3»Р1JdP*F'P6α D_~!@* FW4RSb:Z x$ |S}ļ@@ $w+u5bp"KЅ2 )3AB6B̅Ba]IH! Ddƒ rA;N@d;lJ)<<(E(!&Pp.Fkn(6 !bRMxr11&lN=E0RЯ!FRy(@'4" $'֔!@D `1d#Tt l"#HCp0zqt3T!|x9J<#a jnm. $d×Y C<`> wAHrfu,'b  6ea!p$`@! |wGP'@D[z ,$+3` ,L!+1$ȫg/'6@-SKs0%&⢑AVUe!&R^l?!(!ta UZE3fG`"@HN0c$kW0M%)I9:$z!p"\b dw$=z5~F]lO~5@lȇt)##IQN(A dcj ?fl) 4,,C1OA[D_,* !X"Kk"B$ bA!&! :2(hRI@~V': an,fBgX9ANABⷁ V'H l{`# -[\q%Q(/`R8AytC!lMTK/!ꅾa .!ᄨ`L  t12!„[bb1n &5(7v$~!']"|o؄bj&!T&ڷH!'nB~[ZC31Ā![Bub2z Ob .BLR%^{Ȑ!a0W+ZC Aϝ c38ݫ  @ r$>!A7rrS@WY !p`fG1=t!ҧ:f(y ,BXc4% ~82,9><$0y μ{ ށAbABIL|@&{i:lrBۛm?:;"O gvԻ!%$&_nNt" b FD " eCD3[tsF2`F@br|!<5l! 'vitDCH)DûǏ0.c0΀ Hz.`j<Р l@!;T R+); | u?#@ IP @‡&p  C.t׼CAH1 1%@T&09>aBbYut$Ϡc 3!5]DR `K.Wp1!u!CZ MBafH{l`PAt0$B.,0}TAT!EQ]1X@B3's<PpJAj!RS=4d{'k D|jCjDUYYe "!2a\nA4W3&Z!yBBEA<$ J"[7GY7j (*h X.G:Eڮm*m<|Tie$Bꅁ\/,@vƥ]@23 cP8JAyhAO>t,IHG%L2Es@_ iTGe!UÐ "@080i 0$Cfu%,h[ȓ?i!o PXFuZ2b<+$y*FU[ 93vFm%##o*J 2 g nidBLfP|yG0Hqy\B*Y# s&T-X^X+<=B&7))d{zDd" X2̊t E*+O"PM֢)*҉yF 8 gj(D\h4`l`DEv #AnXRHTyt%yRuyHJoo4 Ku'%ND"'H  = O τ&T;xBb ɈEYH. (],֞XM2@TNb͵\3NxH@e*0JC|!# *8b#~E }Uf1JԱP QpMڀ!$xWBi,OTK1'ZPε*5܃UՆpC6)MM(sm,Yz ]!RD‰01D8{HR#j&d!J/g(\!cDI$]szIdO]ET ThY0vbv3BZ?.X BdS?IL8*eJGZdDak!f2Jä+%kS  |8A !`L0w!2?-NSxEH|%(`۾'WOX Ыqc 9Dቍo LA"|>]'mRLZ4"UTUAx!M7 Ɔt,ARP }٭)edT7ӋIap 97b"/Daq]dYXHF{AWGHiM~?+Eʇ2Yqr"NXLErei[܏Q!sS $W&~ʹ.$.}pզ$@lJT]Kx WvD2d8_Juz?ȤYsud Rs9VD`SՔ <uC(A?R$2GQO^1ʥd吤$8I\N`$u83ؒ&Ka 3@ @@uco !.!2]WQ/U=$S#H5RaiBhC  vci-XS,AG{ER5x!4xtfRW4 <1 m"6-y z 0'lFEw0E4%~L8QObs_W8Mwux3mMowqU9B@Tp+%+!&a` lWO!AxFkP1d5b 8ts(V! HQFX)! p4}AsujMcB{ qnt} 1"[W" aMky$R-P#/a @ d,vAsE" LBu}@ms`W;f Q#FC,/WA#cwcKmVlA! ”t"˔#Ne:Pa3Aj:{5s mW3XP@%uwm8ej*FjG8_T2!hpnۤ#P%P9d{kY;#iAxu!  ; D4gje$6pmrHe^~Q\Wqrm%%ffIZSSSϗlYMMJjAG*+" "j rm@8UE/١"y X'8~?// px_0G7s q$!ާF1 MG 1U@,vFA%|KKХ@A AZ"+p#9cM7#&""BA1vuF㐓#mwTPu DUc2q.}@  3%iƟ0JjP PjF ̮@Yb|?q8FUlj3`hhKT @ a@SAd S`2dh&y)p?  bs$i a3UC9Cх@խ!!Ҿ(' R(f"q!+ {aE,_f[wE_֠ɭȌ|puqS$"+ ې`baL@^Miޱ}β3 ' )@FW"M!m\zgƐq{h|Qʥ՜3J.QsN:\"a}w K{ʙI1$Ժ200Pyg)GAՃwuҢ-=/UP&^ؘ!E ~%\ _6#`ahhmz q"29a@} <]f@r2ab,$ Q3bGa+GaC:!a70*¤9Jb+m007gP4osPU%G˺bdޒKutQj$4C˥@Aet:JJLh)/C.qpwQlqh@CgXDf +Hb \pJST/4!:Pr/@ VΒ1 ˉL+ ,"#Km` ^ *¢92h ?Kp _tlD:0,g{hRS2_NeOq! eQ Յ66vrwsa( P}'AP,2/r|(a򯹽F+Û1tL6'=n}<}kF`pˑ'vHOEP'Makq]p񃡲R WB,lAY U(h 4%N4.D5n܈pԸ(&;x=Djb,'qpQ$V`0[zyp ^ҨI#G⠳0NFPHL`]ݪׇ}Ԩҷ/ /CZH"krI}H3DI}*r;a5k+Mՠq0`I=({cW~#R7h06Z>{qAuК7\L>{`[liM#D jx`mA\H@(&r@7&ɣjH!: Ibi$Z/d"'h( ErÈ6 j"SHǠ (Π 4 $"3(h2Z/@R? JRY PP l b@OQ'^h%iZS!8dlFX ({׹xL;Hxk+ݎE;(h*V VR!q僃*Ta(H<@]e" < cCh7ƒB6Y'"2J 6'mTp&NelM| 5.*pHS(.Jr8&lj".9/`U q"Hi 6ۤՉlUvY,YhWz!^شվ@1d EZgE4hAg'RMa%`j}1cg|l;>$_7b J$x H`!=s$G ΔYh Zipb8 W@aKi,Vf=j4 p#uԺ]\£=Xf&a" -aLD'IJx+{%d7 3ZLCtXwd8JQ C "bhw(h*S"Ytы/1CtcpUi&5̠`\ X!b I(poRH 8Bt aOHDj$G$Їr#P1 Q ڐĉC2Hp\f)b T ]HqBR=)* 7tD|& 6HFƁ1l"1D\ xp0 dp BC(Vn$ T/e d\ 8z4eUk@FH2pA3h $@l7?^\B4'dÍ }.:[0+:) P$roBrhO]iAh>ȣ]LV:f+6}1{c ɥ@r 19|3D֐R$+ 惜G  J|;%w` mdHRNW#{ذOd@TC"V.@C"ع+"*p$&WIE/9"Nj}d @o"s8PĉUo_e*1ecX:\e "Y͆6II}JJa'6ihD~F7!E^`@|8Od&`/XQS9l7Ԉ2&nD"C8fA1V{ 8Sɇ;y32ɩHIߒ 6:i3+/7ۄba M3<;̘R<_H3Or>8yI)!  Pi O# 3&'0ҐZY.lC,>1K ȇ./r6S V8_)[Љ(XX - S`&x+xs p("[H?C9gCTh``T 8@ƃHK2@C ] 94꿃(+"e$(G$0 C5y2@cǓ0[PB*M шdHh.=Q-HZ{ h)©B.Ѕ CҐ>x #؄8I$?#ZY *(%p 4Иn C ijS\}3N\8I  m ɡepu18 :#(DhK9%rh`98xs`34^0elЈDv05xx]ɀn膧2)8$'hCQrDM4@C`| "8x! 8SxB:oɷЇ4l`a ŕ( G܈ (Fi^}! B 5#Gx|9lJG`@ ѡtxx5ڄ9 PoB?-j d6;Kp4C̳}ЇȎhʼnxhHMd.$%/*`4t1q / 8S6:h xЈBPNK(X(>81]!ԃ@ 8BlPuC݈T]~ 5xGZ#QGH, MP "9ֹ`ApVA0H G̖ j 6VBSwdT 41%ghO mN.\ ̨ *?z8K#Pщ:ʹуȃXZi[.~>IHM3R%dH8h8{ P`BX\8lsЩ%Q1S׾Sa7P15Xt{MF@)*d #̓̓M#cR9UB:]C@ BUя,Z3`*/aQAPύ\l@ع#X[3Sj]`3#gy8W'4-u!p!g]HKH.h7zN# ZqY@c M؄ i ى6=YjE(34]Ж= ?Ń-`ٝ8Ap0@߃@K 8rXh\`9*aRy3 W %YۉTț'& KF4*P)8#PQ!<#NcƨQ,~>Pǡ6 x! IB;ؑ۝f ۨjQ]:$͎6K؄;5Uآ9vugB(:I;M;RNP׃7Zhox<=a( ~dDc1X6ca%80DYBhyXΗUE;gx Q5}xe}1ɑ&IЃJ"<c9 @B3<3 kmD4#$]ȹx pYшrCKA }yhf#*Ìڮ WPz# eueehP!)-@3p x*5qQ7 NİbR[0& K\ S | ڪa4G x$ PXIZi Gla7)n=PSMg `Hab㞚<6G?Jk߉hCa&_x ^ !*WV`往H)Wab \D%3ޠ=lN9V4ZPVI2kP(S̩V䷉( r" 3 Z:IE\$"dF[$YhK274u02tH@8"lb ǶTɦ,H.`x `8U6a)j<]mj )8] Nv5XrB |"BZhr@7#bܗK'$LI1FSȅhGʂ1I̖🃠0s>Oiky pIq+#<*8gyF W|8@R?ø/8Mԋ^۰[7rT+fbW%M웈NZH0OxN^x 8zl7m!,/ݾlK8Kps:@h uk5Hx^!ԏ0I36ЏvQЏ>mABlvJhմ t(`&HP'V")r)5kv&dA} O&q!Ox|FP+x)X- 1Cl)F"1fFXT h,G81ȡ ʂ @_B ΠݺQd1}%G"EJn|1_5B"0ꎈ(0vAZ$z`2bWf ,yK)nX=b驷sӵOeC=E!8Yj $ ֞vKP0DPt-%BQ}Q\@/r=Q*H aB9"H]pE837#ȅQTDAwqGQ GQxP|aMAhS%40_NSq}NAI"WUвFX rVGbDktpIP,T8-E$@ŕRAG*hM1ED$VPY8gj$GA!Dh$aEF/L2oUA,L4I/T!TUf Fl#A8E_z_iyzE_Gt W\%Ɔ'Hl@hAd _BcD|uaA3Lg@hAa@Q0ϩ1bA I%%AnA {5DRoDR-[2\ 4&x7YP4aP\D@H$[nQ[ 5GAXrDfQAA$E2ghjLkAf`Ƙ@.ODlj~<2y8DV1u_l\P/]zd |M>aEDGc 0G/Z$G$%0өNiiK3T[q:R31Pҥ 4 5P…P)BZHjjy 'M 7P&?M.AZa #0bA OS8(<_WE H$MuU~!Hg:#"krcd3 VېZF^DܡC&pa r`VD$1ȫx]ݪvCM awL Xu ]GuOqhT`D xy),5F#7i[u+I$!3YؽX \ $b8,H5f d hg:r:lhCOGP BЂ:F(Z? ZdArsFA(f&Т7ybĕ,.u+H- ba"AjI"A)ψHS8b K )hG88 /:3&G{i/Zv9X7 b#IƝqNqQ0a%Ed 23ab Xuь`Hz&⾌@-=ώb- 607Q'ɒJ 3!؂t+H]nf0 LzDP`dDz ZBP:` ̙1PA UAt IGc12iD)Q9Z a%o㖢 /r41y+S"o&wάg{),R EHAG\ e(r4Nn-l` J DzŗW 0 F de$ eE`Xn $0IB )]QaD7u;HH,pQ ϖae2H# k*v"k,w/HJeODg>Z>M)giC k G$rbnRa7(H+TVmbP1 6}YE>r#򳜒DXpMb 3pTAʓ ⭶{6wd8 Xʑl] tGY*CY@dE ѹ/A3D|A W` G,/+vXvWeLi_%&y ;$yٌf:bRO4՞Hp^ 59`WZ(8 \c6dְP6hx0o" (ÍXnrAmM:(jv>gn->jE~[I%2bŲHx#/x.GE<Ņ 0X8H'1WHLqqp@Hx 2T v ,j$l}d>MH hTJPUDNXÚemTu]AT"D$\!w0J_]AIDHOMD $DD0*qE$,xD%_Y~< @Q |n|JDoau|XÙ=}^tdeĿ<]u<l-lLLPDDGXm7_Q" 7\n\FFɠFmZ4GtEɕXm`@ˆH% EI>[ Z B|SS=[jATNE~XJN 4D䃙d%FI^IqAAL؅_GE,Dx.4FD@AHD@T>UddRH*)Dpi"ݝMPDt]DXB5Y†rEYEEW=Zu 7]tJKa FŔL9EN*ȅ.^DG_3NpËxa4ԀfGZAPq@H(WPhl E9AH'%8S,V-dfD89< Rb,$_h bTLS8n1ImGlP@[rSDXTNUF+!GHi@+-~AnG,T˭PMABA5uO?M?IZgD8 JXGx(f"r61bi9&zɋAA`Ȉ \ Ƌ ų PF*بAPx$uhGDH*eH28P<=p QmGB|qC 5DN"om ^b+4DT4\uWiiND~g(J)C=|aGX%Q݅Da[be@Q+PbGC2ND E(j#ne1'El\<@8NFyl-A)o\冼:(,CbGx)GtK$ l8_k0Io\oBqPWD3l,$<'|2\3sꈌ7\؈]1guDW B K-ѓԑ.aZIFKFDz+GL._ b1+@-BSh)JDXҾ_@Fm><H VYՆ07\mBVZ"ig@n( X(!^A_̅RD-EZͮ֗-Mp "nXvF-(D nP E <3GA+̇@E H[b\10q4]Htxӝ%yD+FY XC *J@Y>TvDUEhD+6A@B# fa!BEߴ @鈕3u \ID {Vv䑨DRALtfLlGd̊%A#m! QA@o]&#fi(mq \:&Ml:M_GXb~DWe 4ERAF ZGXD̵&m aQNLKq-$@W.&n>\As jIjĚqGL8JɚP< 1?>w%8 "LDҺ 1GtR* Or*Db GAC>(0EB0l&I]h!@RgD_-G ]5DD 7hsPfAAW4Z_D2]$: &E9\ӠF XLf/$ P`2ܭA}Fk0T:ѹK1rIRH6heCNF AăD~vnCc _܃FaDh,+  J+%- Cqh*E BSZ%]qRL5&dA[StHT*Gu2$}w'79)4ErHD({I[VktJ8gV[n[jF.FM-Zp@&UwXr}83|&jL3EyC"0AuVR SOp|L8%T#C  Jp A,ȱ[0NpL0db+ #9X% n8pŢل4) &+/RVbJ`(}xI ʚ=`i=ACƩRșLJŸTHP?ɒD&#<.;}bL7=?}*;Λ<"idJ3%`L/-§qhB7giz3lJ/µ"n ~,TjLJҧ HQJ@Fp賨_ `r0,S* et ZLS2': ʅmR6r1p &-u&8&Mh-/ .MBŁ:]S2UTf0qh*}7pd_|Ql޲S8ˮF(뱊hѪ"Md=BrfVkiZ 8p&[`2 XMM-m#HdDdȖ6$ Ț2.jNM=v_*>"иVa#t5IT)4\-0x8IJ(ҁlf )Mpm#24(dZP4A%Q sR`:az"2,T- yF]0uZl2`yEwK! 7ҷ0h!`19|U+*6@'y`y!;ޑ\)3EPPg@j#g!vy`L#"*%KH/\Epٖ'K!|f@ W83H80)$ah!h b"N[Ehխ*k!)pS!d1G(q=1IGS5(B+.FfP\m NB8:73 6%V"gī|n58pԒI 6P!@qͩ cfPg YKGz\@ C+kH=BxTdoyH4N]\7ӏ^d SW[H7,*` MƁlY@ݘabkNf Ch;'>zU"@XzX4Qp$% "Q%HY C+b T"]+ZaBh,cYi67s, CR @ۙ"03c (qDN&`Ҙ6X 'p{Y3, [4 F0iIka 4'@" DBC"Zl1TƖ:xYCP ] : dH5j1/%)iS?V*3SEH d#:XԀP&HI,;/HΪ1Gl1dsE4+" a 2MmrРۗ@ $Q(hs좰E,saeeɁH&E J1#YCtPɎPo8w`rL1@h@.o?<Ιpx$)8XLa y,?sl){X\lA|&•L@`*B#$$&b|rI&R" 2D&K!nb"bOLXPU* lߎ@bP:"p"Xdtn+RMHb"i"`Hi5st 2&;&kF$ < <׸K Jk l BnP(E+ArFbBr ``s.ఖq&j$ K\e,!;\k4$/4D+тK`(`H,H߾M6`$4 (Ԅ8X~9R"`#ǐ NB&!B #0!bhd(0$q RBbb,.rH*pEBo$F>&T m@8am*c,g Zk, Z1тXYfa E 4@`` =ki|}&4za|*r ł-Ϟ*&k+"h #2b6tNcMbR6ܕ4$Bc6n jg(@1ڥ a*Cta}T%:J9I!p/cO0Moj*T7+, ن4a`.$ (k-"P] d!<$Q8(S&N̸&gbiS-"Yq~`@twp :&7ol76a7ڥ!Рꀠ$D/*8bUS:ˠl \5m"_h 2?j4 a|uJN .`%0B N~"H!(»*Mu%OtLO%+M\7%9tPJ4Mp#J&h " ߗ02.bT& *I$R;1ܼ.@ Z,Z8F`#Keb6 0IAc,HxHPE J6Lh#4'Ng`@$hM,#* $u&j(YJ ݚc), "=8vQqM!:;"Lz e`Gz# Q4^"|>-D`0D!N:nbdzKn 6a8WW`c RKN5h%l[PbPuirP^ib"ýS<^bdb JGO`-80 ,,gO'c _M/D09g,G"' O#n z[5T $FjPKHP24%dIPs&I! o,?l jTx V@R1͊CB799#Jv 5H"LAm UoXlu+nCsI $>$|"ZXQZOv<t{أ@hLV&DEȏYrtV#-\TKکUĘM#u3L")hԄ%I+VHB*LDibťd؈ N/`l⫕L,+bޚN-klR2/o@pB@P/߶anTҍqJaˍEvb1'}hGdBXjaejSklBa[| LwC d!T!Œ#zG c2z^u c.b{ ܌͔Ne.=9L-9$uIZ)'(N>ӘC&C"5NM=H ƨL#3_c;|~$Vr9KE5Fm#/\&,rD uݾ+JfQN#!Zo4lS&ib <0:ID2Bt  M~3DXM69Hf6Q"3!=+ޔu0 [%AD WŭNnjЂpԃx @[Wpp}۲1D53Cq> faT͜)8㠱7mՅWAac0*k(HIaSkf*Ӄ&_ 9BiHtkK VyقK;oݓ2lUl[/*@*ZhQ* e[o1i!3'4X3<&ԇ[DP`AZqpp v'A[Vih `\]eVBPqRA SP9Pd :txgA{gD+WhtN |AQ(>hJQ,WPY!Ed%4V$%] ,{*APUA E,HI'ePaĊ, (SC$AABjf]V4πh<¸lB -XBKh,?'_Bgws1osvTK^BtɼaKeSNNqC IS5S^sK*Q $șA R.hZϸI?XгzbKY1w#<" [h 2f ,XF1ő3TBtoВ OgBi>)EQDGy " Z1F@TpAp(rzB$x %hBtXB(v$A-@kAAA$tAT_<4yh\>BW~+hr>Bw pPW;Hc;jQV. FR`ְǯa+H-JB`UA@ҏ 6}0 T@SZv,e A %3QY;2'HĠ63yBfU}pHAʄ ,gX`p!r92)Ho[rl5"0G6 ; AA (b:3m + ☞05' B5.!0 ~)[]AF}La2&ge 6h,@k#e J\ {ϩd (c3 H8_ ʜ* ^lh&h*f\qބl@@ɲ ޣfJC%=9֛2ဌB>90 lF(H?F%ZxDk"t"CYxtjY؁\I$vZ$^I BMh ? XÁc0}kŃt-Ix!vE8[VI !"_+j@HЍX cl< Rܯ&}UAQ6@FTa'("r?]D1!"n %`b  <=¼3q`eZH9ai;+\! G/ǁw:h3x)P]qXhrd"[ &Z>uffRd!W-r$ /v!$Zb_ Kd \"Wy."vy @ .oh Em0-r0ڂy30҅V|9^B5̄WCfdc gD [.=HK&$e OzW!|0E`ᵒKƴ|r+ pe|-f 5ER8)M9N\IɝjX !Bgqg(`_MY ge+&PZco(jM"3` <0zTO#e;R`+ vWňVa^ګJc N))8V3X 4ofq>%y0"DIk-j(;q?"2#ۭdW|Qȯ[! V8.]zAIL"B3LC Z 5ў4hAkSNyC7(v / ꔧU!Lu渃4k=%lʡ͟ /xl1רw`6TfHC/ڐ~Ev7A&|!)3 cDLTGذ ^ aW>Z>}X<;x*y p)hE mXEhÖ \0h&(S2Lrr3Y QZa4 4k pvvp t<L | Uɓah`h AvڤpMVQv ]?f{@%LaF`-AsuD@w:'!B9SQ~1ylAWGr Pg!#f Bngc"7}R>U n Qc)"Epb|(b g'R|5"6շ4-ra41F5\}kAԋM07~!?d5cHk'""h($@`4vFFp }+a%\A f@ʲ=Ͱ==^S0 Fwރ A. /@n)#?GE(6-ІF2=vǑ8i%SxINPD.G} 1 # ?^"p*U4`QD&Rx!Ta7RfYop.r CV-CBU"P2Ӏ,P[W1 YeBG*gZ~l;)mH:S!ag<.9ngT}ՠfPA#qpQgx_! LcipiMTii \!-#DƞA ҕP>߂?kjpqiOS d}u?0xH za )A aa=xSR#b  `buX}'6s gI"p]3'S؁bO,? -:F;|Wt ~ 0? m Js`Y 'Z!so]%:ޱKg_aY!Mns8 g -r~5cPBP @_A+!Ă`X<)=_Qi ِ AM8NvT2a s3  }onFYC#^bd~jdC`1a%^Ö%<Tp >^^ &}ҵz[1#!Hc X4(TF T#يPp E<1 Z}Us))F#jH0gA7ZUs>peK1*;pAsqO1T=:&k3U,@wFhਛV]I [Ѫ 'Zjfu _ QS=%i uGPR@ x'mr'> -@=s>J-ZD9)x*ʒgAӓ1=0p?AgAdo aH#@2Yt#uCRW{' &4 ٺz>f!p_4 &`F@@&7wk`.0*Y@& Հ s@If$&{1tK:E%nVkcl jq ;pS,e: 1 &hk{pKq Qo, +LKu{h-)δ+j ;vqQChqNPdRPP k0YT9@4hXU|+Q kHe1xUz G {5fA!3*hi8R o Ic"a `IS"aS{aZLZ7'hp ѕ>Qi H $Me!eP`9%L2[AQ/5fR8I B x-w:  6z#XX/0|+I\<މ, iŖ!Fw`ʝQ8 "RqJ@ A]  .u@wxra)8V1b| GJ)1: 81G»l ɸdqd b.[jD)fF .7 T9cɽPc6|g42\t4Ee2P`YQǝp*p4s:YV  l ЦF}DZ:} Ԡ2ľT~񪜱j@<P,k郏V]="0`C  q]}p4=e뵇|\7)&`ՅH%UѮ[dGPz8)`A$01Vkpj1 QMY +HfTkQ`Qea2t#T^%1.UE_a03` &B:ܢMǘQ p|plI_! u.rYpWK UBP h96"k0] HP,\<H"ߊ\aߛ2VRbiQw̅93- I$@ Bӑ;-{T;F:ee.}-H^k/c5%Nc p'00@pr1G^)' J-lLe"Qe3'A3@KPP)b PTV5!IMUH<=W@_7h)&20 TB&uS;1qw ;a/W 1p1A_1XЩ ߵRiYIvľ#4Cn33]=jDw@׮h 7EԉPG'B+a'pX-!)1NVx"jA X!Amf}7ROHDz;'DP!A9A![TAxH D ?a8/9 [O VU L4U` X-6Tj-jm7AGZ9X*7WG)-\pqG0q"rlU$$j+ !zˇHpzPB(hjh}P+;dt"!; N Z_˺D`9-Z֟L`. "HY<EE0`4@HKnP#j *.#zJ͖l)=G@J=g!*MX!ZcJe8ǘ~&8h; 1!Ȉ! xT ǨpF8HX"9(ШE#!p Yj +-dC) 49 n K}n,%J^ CjJX40VM(ǃ`ɓ n!Hb(tʂ@R5XL1 ?2a) DB B!߈#N!@8BŒE(98lt!h>t HO!FTK k"PSȠ6b [@S@B\ȳ9GCtHEPp dC&6X$E%BQh2NB(rQfq& [G@uGR Y42q9H$2ȕJ-|(=8GI# ЈrZX _;uBXS@";"DwAxXBr)9B5RKnt',|:!t>6Z)0(۰&dIx7;[)h3hQ=:'7>}[*,7ca P8 32+CRa)9в$ż : DTGajP=8iW9%DI$4H 8Ƹ S /0-Gb KYǃC  uɧ*ZPwqȅ ".D9ErC<7)!! мb IW<%!)Yԡ Çi c `9G/c6'9nj:X>M Ņ#oJVVT 9ˇb!H:"VL p@3PjƯBhE%3ʖ, Iqʪ-Xq6B ;C*Θ54x 8K.`' [D0Z%Ϫ !D4x!) !/{C2#Ȕ(PW)>lOH"qByCЄ=8 \54bگ "K6{%iRL`:0KJ|p>DB"b xLsjHXUYb` &"k$P؄4ݶh*pZhu<" M}6#bMH>@;(pЃZ@A %@ɁH ȭk!nԻ{R)B^`LTZ`CxD:hx%8gu8;1U`8b[X+MV2p%ڽ6F[`FrZ \[i (XH$4]MXڄUIHG!ˏx~0`0"s+& 9B30o.U$P $ V\(כHEPEP=J -C <ȿ{99AƝk: [h[ܐ䓃xℐxL7:9 蚸|PV%ԅ[i-++ 0`0L(2}@2 艖K ͪ[%fiZ3 YD-HM Y"3oY(;VEXՅnH0O(3r+N­.4"p:C )(MW1+6XT;Ti|6aX"fet 6"%j A6FN[PK5 z*chi,;o,ѵ}IOnL EWlE i! 3pl 5+0%b` 毐=kUb@I <ɢ+ȅ;Y}XLj;!0L%h(S;8 ț*@@RY-x.8TCs I؇ᮊrxBdx5a%!0&!]Hok.2)I(PM?!5[]!*z bw<)j` @DQh(WC[FKOQި :H8 ,r^)߶޾K^NPp++ ݕg1{ӡD60&)"V"&D.ȅ*Ճ^n`B@9Oᔅ`m(Gd0j6㾙yBZ ;J*hP+qIژn " x HX]TmcHL'i )PP: pI!oYG>Tj $:9HK*A ڬII`Kh[?8e xLH8p3+D`|!XGoP©@ppso ˖bxiYu`r @Lr%a^ԕx ʓNQȥ؂.`x8˘e{ 'ˍ!| yIphs[ȽCaX~yWE0>,N46@D|a*:?&ҿHx#f "7M飗xywXn9R˼('"C:[`q7 {dRH?h!FYC=x)X< (y.jK Jyޖ`pIե(MjKpg!d:TK,m$#a1N ddp0lO hXUC ?xY'$Dlf@@`  Xn`ƒS!3(._R䫠7 )0LДR@{%ɑmIp56GEρ;UKZ( /td`)@5x*] xUߦ\9mΈ$ !?9:{á _kְC!P ;f@$F($1cEOzn6%)7N& ¼! ^A5P,$bSi30-}G^; ZvAa 8P$6MAЁ%;ecP b)(!L3 Kc0P !3@NA $:`& 0@ܘIK&dmR%A0pJ2A|v ol@_PaKVG\RC8c5{AeU@5 $ZGkmedx`d"Ԃ YPr8(C(fWLpR~H $ hE" 5'2HzH )I)h *K`> τ4;RSUm yE-DX6T.J\s'S8¸ߢ@> !RZ;yN,HX"Lc xcP:xj'` ra@ba MAHx(AN h rcB 91+jqv9aլZ2k`7 ҮKSgr.[\N鋲VD?0kAdaЂ%ty '3XZ[D ;(9AR:DF,C1h#"FjSLXcbMXnQN) 40;{0Kds0^0X ?0ouW7( rL !pj tB?dp RK U33 JHACu O Z{;H23"UZ*RS/7$q$'P!:Df/"a晰CJ~u/g ua`Ik $I 2p 9A7 " 2/Y2) DmR4T)j byx F@Dh"c`!\?}:B&iS㊜''ưdL*j!Rc2quIϜ &<%1ʂN7+rPۥDFt聨 ;[ul"1^Zcj:``CAq2C6<64 f'zA@S:sh2hmۍt)ob y`7g< bG/hx 1iTTigѽڭb{<'T<,a]^'NY-^XBQYUCXL)DH ?b ZA VD(%ԁ|࠵^;hPHJ\̠CdNA\B󘖢 1BATO +KؓA9!5SX6̄4H|T 8lJ, P@%)@,X0FȖB5nA`[A/@AA",%X$:D6PX A&&ՍG4(&I "hdAh<DT%A̐~D.ā\dCK.ԇ.^J$(<|JAC"4.􂍼HddASlWw _]E}Apy asn9%P@g@pz2N  0H *1@*B_lOACdƬt|x_`2\ X$\8hH$]P(ܬj45M l@Al7H%PQwD_>IH\lH&+G;̃@LH 8!0ة i3dK<`tq  CvZB~TyAXcjp Qo YƍKV=fH4c>A x6qlaDd`҂cd 4OPv`aĽjAt@d1Yy*(g(1@tڣųC㼣NB,rUlD8}]%l.@. @O[iKOkB+tli0D74 zF_h#'COF,,-HPG0L֩ɀfjN u*6 e(Q _튓o0KCy@wD>@lB l $P+ Ee"Δ@۔P_A؈}lK Q.A5߇l@M!$TBDB/nJ6ڄ]2٘ܘ_$`__ |H*c-nQH, E.i,քܭ)nI,X@u k!uABT@8@Ѐh+wTd KUȉAQ!*pFHL. '0A,bUŖV@fbّKl&v"NAA ok_hC$WxA_t`PxH.kALB9'< ͕JkzRMF6BP H h<Hdjj lFDD,ApT 6-HgmEDP?!@AX\:[=;XC#.@PnKb@n4Gxu( NlWA O3аh< MDBl/H/8M)*Q*87Ȇ;&CXG#o\KCߝ\Nx -%PUd TI"'AkTT8DX8mJ=.29k)bo]vN@@ Cՙ:BDvA,^dihVflm܉?YABmۉR7x@D>пHvA&|8v@!P@A8Sl4v (:pۄNO~CDARDF>ID/,o-C"we \Af4DHE[ӕ[( PYA)@;% c7`G`VP\2*g74@\BT}|qՔ×"xXCB $ Ak|@|A6Dz ӝ:h(~B4j f/-@a:-p>P1R~#%A ЄqA.Mgv+@͌L!ċOU7xH2 cF̀+؈Ahyk Z4 !# /$פ0 O@ (meObCњܳ:aJHK:mt)`(b!K0|07&Y(:P8 !Hd5|hFDf@6db肗b i!V%b."f!QJ iʆBi*ȝ|p͇1dr= ى<1ᦪ[ iܳH, IjS Z&T H\ Ґ&VtYhB%W˵D0N9"7A2!]r%脆v[c}{H[6CNI](7ޝ9drqoeRԞv}nGPYh?t(\҆ =~%nXHEaB9Ҁ, ^(ꪴ|l$熰!&)i3B%HɅdX2ʈ ڡzIT!HSvȽrQ+؛s/#臫Ȼ OE a舜6qpXhбe,-=9 DYO:!R  >oVg(RPu3Ͳ [-EhvTdj MBƶDHkw 䇼,ʎpk"/ `*ʽ mAM!QkJ O{6.j%Q9dYptW5!] ,k?6Ë ?i&4,aD(AIA`h5'$ $C*6nj I@111Fr% %;9"ԜiOuZR|G MOpCC6 cq#q QQ8Kla8A",THFxB4:DUiefd&Z Z5yC.ODg@Z#Y@.0WpX# Sb>HcO:ɕllџNs!B`.$ AxÓ 3A!Ѕ'"w Mh @80,1sA !LG (g#j]H !08QP EetaLVcr`h)A&BIXAE)&ɇA2$ #F<c+u+,E)p!kD r m N2-XN}5 U =wa \hs|,~Ar|lc Dc[@#pA a:S8\N6JCC0D"!fVͬ<3l8amRK]6Ӊ+~5rL!=nXjFHAuS iK 37]%e9&8@xCEUH@CEXAM!caNz# }ήSi0$8֐$z!*J򡵜WCtʆc<ncD5 GEb-@D#e$HBP>aĚ <Ĭ"xXڤ@_Zvn5rrt"Р&i!HVYJPo0@uTHLl`4&mM"э56܇O ~Sd }^iБ d8#y3OX! @J3N[JbթMnHFo&RB#H>hC.є3(l[IQA `HH x^0A>\H=]BC:R`1`! E*AD(4(! >K%p\K>N@ @PN9$RDHL&= 4Z$bnCAb s&bbQL2 !95@CQ`]:v5&J݀y躇($'c8 \e@WJN֢(scw&`Pm-Z<%}V4Qtpv=˚&0u4r8ZneP#[ @(D0tYGd-k\ P65 =N!|!*c^%Ux3B#l@ؘv #!!tX'.Lan=`=b;cM8:AB,Iނ ?6$5*>`4T  $A cݰa!@ d!xA VaJTkrr!NT 4FAx * aL^Bt >I4`i Nn di @ @p%hX xJ |l0> n On<",`A~H@|"\F B*:k+SNj0N.x! S[!bP }*Mo "#>b,Ҫ` CD D1"NA |2㕈!\2 !`(F#446RfZ=ِ!JĖT Pc=hģ!g!B*bFQtxt'N( ZO"VNc8Y!>֠ &8૤'@hpc'Pte!DJ''hd "AnA h!o! NIh~HN Pe<NA8Ar` <"b[AA`DaW@rhXY+Ynnv!@n@d V|@l4QA 2"\u!'TP>.-tk^MObuDb/4aP@+PWhd"`!BTFq4b!#VoCtr*V( ImMPv!77%JRAJ*dd Q!,N!oh.fTi +| b"OEPb!- R&e'F!2d!F E Bzf^'hJ5j%6Xz  &= NA" 8P RW NarRBf> N aXB D ЯN< mrݸxC(6 N`!k+$^}/T' -~ " !~ an!uxB~g'_'!"q@1ub-B5:0ZNҙ D>β`` ^+Fp!F҂  KB#H!X"*!Dw H\.|z`&s! 2W ޠn;Yn e z``@%&a*$h#("hYC7B`/!2In"`b6*Kqv!Sƻ~&" A0=`RK\B(,A* t&\1B&(bkbGr!^&0 dk%G `d'A:mfZN9 %Da!!4!)!;R*HMuzȅ|o䷦!CFΒ&ZzA5DbݾAgm$p4E! F!:!"!jgl3LcH\ }!|!* n |QZs vRB . ,bn!SN A @``8&;z T+B VB8;l!A&en& 7#i+h&۵( _, r".y*m0~`H )/د!>boF<!!2`b3Lz! hC8t'J>7 &!tB`S'N;``'|82-`RH T +IR8 JÃr42|!BdBhA@ׄ,X`Wbu,M1xh Bb @ M0&"zZn`=|`  BٳL]!@@a6 &C]IT7`"zdA}!v(IW0\0K^(RKqe4vA."~`*B 6 [1u#J,ċ3jح`8.v`L+"/SD11RD6Ԩ+b/aH$`IiMJDL# @Ua.)o"m nDS0ņ?~+-P8pDnn81ۤDlQ#D$\!hNLfNCA!MFF-0jA*L4dæT:?tdMU*B @V   D7DlAfm$f6EnAou>u&E^:QamFD hAhdAXr,@q(TGz+8TEDM$A WNFA8J"(l_"1d7b`3@l\b ƈ[@WE/ # #/3W\1T.dWXPbAi-ED92Q-G9W {B-BFt5X%p[mY˞F%e1bXe-h0%5>e,H{DfTHQA|djB2&\doY6^rT *H/|0JAy0"P$ 0dM.0oiWArM\ą0T2Bl^@তt& Y"Xʴ'A2:3c)Hk@0"o7fГb@h*  Hj`fLB #HJ"D,ЉQA@`lB +QJ4;( @;aw= mT(ЊVXB9=n@6Ѓ 1S48E< =IH!08 $=mx@C6 Kvy#Y5`6R=4o( B0#YS"d r?t;H%HIqYT6!Ǹ ۉ4rD؛0#OܠFOl b3Zr<;"!QC~PD\Dɪ AV}psr,t Dg.37~pϱ qa\h:Ky# `^Aa@Z\"X-ԴP";Fb E, %A]4"*H; "&hD@Zc3$5Agv a` b+ l2)Fʗi1976CT^ªD`:9#`u|XDl"&` Oa "R|b`*Dm-& o#rʂ 9s5H RF} bp RX0X-tc(:*Dq$i{=HB XFtM*1< $BI(mr 7 Q °Ȑ n4JT oVP P>L2 Y1 j19q`!=_ U_$)= &=:Qp=!`#591=?pe$+$p/8s8'a ga~ Qb:1?eW!ubv S)(@@.w~(2;UE1 A̅}Pk W$W2u 0w!g-UgxD;u17"s$l? !IhdRV~RVz}53k`73 | `|2A(" ZU 1 ] C7"O\R T p  DlpWD Р]k m8 ]T J"ە M>sZLp8:`#9b #wc@r@b SN{p'TDB Pq!՗]#3 cs|({ Q/Kfi ٩R )pe t#DZ[p P"%S WYHY@8'x% ȨWmy8@QEX{;q2 x j]B'";Gp Mk %z') ( p 0 p]]o@= Ű70"K  3'X~GQ ]0u1{D&zWIV 3_ ;aOSMIYMU52h"r`m9j" WVVOr.PuSsx8;hg)u*qc |0?*:!d[uAquevZCha.fw9 A'rMWr#zjfAU@q2ESHa!nT: ƴAkq -5P  K\ pmpPGY\Q\kP0 \ RlT o <ѣU2k% |4 ; :06b ZSbY wڴ 63 Y]`"Ќ2^2 AjԴ \\p~KF3% [\P- o uK%R'6p(Eq TT7ѣD >3%3 Q >-2x~L4\h2 zAPADd%%T_كmxނy c)%5 Jy= G&B iALYPRx"L3*oȁcȀ1TA8pbPe`Tx4DYB$G<g&"sA]~B Jasrg8=!e)3T4 &Ok-Q*c@P;q bPռ2-)4y5 İWr7t(i<@7p0 @E Wm7"p WP@q1D0 MC0 "#6 9: I )>lq_QE3նw:U2ne!$['P @pzQKz 8"Xm|oQaeOkvr va},/1P`r%a0!WBA r#Y-}p4 ހ'`d O(Cb&"UC8zp.DJ|Q 0jva^Ј&=,О-"zLS r ϳqbP\;W0 0p@ W 6n[0;* jh˱(@ RC-8jT(&6! &d,Zd c'ou@ûwgμ#@OH@uS Y,Q,(8({4 ܸB l} { VBH){D./A>?CDd%SצՈ7\("E78 J (KcDQtd‹~ֵ%WP7mK01 qu}01.Jk=h#&@g k K65ACrFdtn<(`8D!Q+z ”xS S /G$Gzb8Ob0<p $BLvNg g+zZ$OKDR$XR&L< &J%)Ŏ%!Ij"Q0x`.!hPW6" ?.J h~dKR0V[ (0̷Ј-%(5JM_kZve!l}:!ȩNU:OiQx :$(> Un>?&.=M&i*`lq ]xlQx.l6<>Z55D kX[B&Y?Bl171XV6яlB4rt {1%hSH!f$!B!%D J&+!22йb&\JCBF9?0$F_yDq 6#Y⢈#It0xxiE+pH <)'A d 8:D0 LuTiCy X &0 " E>UX !ĉf =MU3XjQ dp1 ab Ґ&nP<$Z5{CaQq-q>_ <|]dTl7oHT!&Ud5KD@ckqɡ4ѭ\וW#HP~F{`[dAB[@"%m_H2,1$s\t7t]u0J- w s JP> *&`)G \A!'F >x ܀DP{'0xB'(KCIb"D!.)*ZFl؁ȩ @HTJ)TcԠA..=FP(t'XMA I2C8.Ir 7PХBW[$Bڔ hL jTk&5٦ԘG w Fю0,Rb< ' Ԯ$&A Mw?&g;;* eb-Ф̽J!Eu\UurT֠@D$c!``j+K-?g.A8@R 1jskNJG>ZnGA0>'yMeG}:< RLAc>r $yj3 <.29 w\Bၚy?P8A-# p[9薹≤ϐo~hq9K["2 c0+1U`C ?#Z VH Q\I!ȇ[:p 0X:Q+!7Q:>/hX_oGx16PO.+x*r xrjB2/cD XMԂ ,!0.$zB  A+ OГx6|~ [Hb# }S # 6 >("ۢ1`SuP *: $nb+ )9B+$0#$$XB;E 욷}X TLhUCIثK@ M!K3SY1h c- 'A;0Ȉ "C2bʜùph5{|*'I|Ђ b(C2|~/Q6Ṃ~`Th7. r8,g.%+1L)HI,#1\X;HMm#i LY$:PM| ^MZ$TȸHJV `O$Nu8OF\50i 鶸؍x$udGwTkȀ PyO^B oؒKoop27HڒFш"A8P# ) hS8#`(ITQ & Ȃ tsi~0S9p. c09"dP߸Ϙ'iX-^Y-r 3< g1:˨ZHƽ 7.O88:xG`.8%9(2L*.)1D0MMԴ,8jKMRA#u u*fSU|T|Tb (ZR5zY>p 􊣗Íu(ψZd 60R8?cPCwEv }GYuX߈1G@:%n:\:]dč ؀=hQi@M؀sTZڀp88ٟWrYή`xuP (ɶ"A@0^$Qܠ!-yӞ'r7bS`PD!@#(+)K@:h`Sy``1tcio0VXaCv7.h\@C܂.+. 12hL"<PV~\i7" 4@.U$r7 Z#}"E!Uۮvu>(SA`9E9Ȍz}-$ 룬#~" 9P#5(?<يQ3Sx0 iٸj$" o7&@ a(pS#%]8$YQUI؀Jπ. x3B3Àoq5Xs9~JC0hX"'QЁ.J@oంSS+A\ KM9/FUw!,#*Icgɽ0ȁ%+G{a*]!^8)gF`՞bM̖*`<hֆK6 Vl)z )$ܬ3N 4 (H!Ym , g"6@ K`-IZP \?Y FF1" 5 & 4Hpģ Pg#63QxȘ k;D8% sYfiyX^!!y B="D `8ɣLHb*扢 uC>9+% |(q7rr[h=s *cVaVS ( S]E6(?zk*)C-F:aIE6Ӌ$6p&Eh q?"OLa 1bZ=3df-=n= .Zba#!'$ zPE z !$ك P40eSA皯vXڻ!so+Լ 4i2؈hPO>P&Հm"h,҈66O-3a/6n#)`y|xi7ƍˋI$:7Fj<^F&YT\ Lگ #ѩyy=IQ{H v9޸7-c0Qr[0¼J7%(V8cb螃 s#Bd7o\ =bDAg2QnP<(DnD\+齐e3l·-.B$ҜىqV:a`:8/8b#00#hUָ n /8[C pZ8XQxh"ئ<CPA}pG ζXhni wX)ژ:H#m0'Th+l(6hчNS-ZP~w o88zjc5hƈ,T.17? xRyV'jhrIx+@M)@ 1P7kTp91Ao!tcd^P!*80M4F\^T!l#6hʛ !:RAl "9E(pm[t&W@\BY(xP,S8OC1d bqÏTF WPA6gs Hfۉb_f If@ZsBAN+ЋI o"cẢ_A;*˸ 5@]XKnA` X5 8 F;bL ޾VlArg dv $ňr,2y" #&!9\L@1` r \ '>6xǰ -=`)!(EpiD ъVȗ~!78G.E*~ 1E,!8AJ a]A8Ced ҏ"GlL YB0v*l"=%Pq2B=C$ЈH.别2d .ps 0!rbt%CUnR?Я} !TEUrʼ-nIˤZ,g,IU@$Ɍʂ Ab0"  ҭu ~0XpxT`9 &\&,#E4$8]؍(hD#v`HĈ a VW4[`" CC S>!H47Ĩ? mz{ a<1|6< %(3]MmF 0 )A8k! `@@|o@ bѐa8!=zRhA%%a` ,"-AJ(p+a  T%$T4b *zHB >(j{QrSJ})R )HWd'G5C3*l63phЁ)i' oXAh!s*@6 Z)d{WCxqUcT?3h+aM AW 6NoTfN/4z  *2A+;AxHnW .TCcbIsX guCk*Kx0i%i@}7^38A&u S) 85 rn=YQp쳪XV@<5 SB  `a ]MaD$ @?|Fip0=!`RBvS큨A :nPYpD"VE"0uFp2L$VlX5ZBܽ /B^x)%Y3X7I1 #,{H ;|Yp4!;@r؁@A5\L1\a ӀA|  D'(Jq)iƎ)D^%J/@l :āۡH|d8UADlHX4 *pCJTTJ/8`B2`LT@4U@_VAc%̆h `ܟAL`@5lA>K eHixCu8wXlBAQ =II'*nE%¸yA D"O^EhU0(U Èh0;!P~@A'@!H@lSD3pA肙@9xVmU)s0F A@`NV:M-OՂL\rS1DwImF8Fy)Ė(!63(D>:D(AdbDDA\]N-|Q<P>.@6K@#OR2@2&l$gH'wLBt= DDLk&p(ĴcAг+A $BD҆{)Ā$?V9D:ɀ18@: (@xZdAP $+TPmp$ 4@K#Dm !؂Ӱ46C+XB)IؽW+ @1pZAd)pA9Bp$B0)\^qGֈM6/Tq($c~X-J@@+ 3!0A4I )D+NUtAYtA)>A-<ALbŅۭHEXDgATFGXk@7&L̞i@` uV@A0*LR&%s8'm YB 8C% dxpZrX+P9ijE15@`E_` @P  @,`FT@AN9DF)ЄD7TC1A\\plT Ѓf@8 a\iq!lDX$B"ف$r(+B[Ji DV D9Y *~W- {%|L@/A1Z7L2pA.r#@1jlĀ Uj<? ,̥VPX|#|1@*=f:ND0A^ Lidz"Dt(@%ZBXġʶmYDݥoHN٭ }0b SYB DVD R!b,(L}ۿ2U*A?ĺ#AlHlc< Q<  DŸ$A#K@a A@, xX"Hͮ $4 hF- mpkjX9C1<0DG eiq-T$A}F2:Bu f)A@}f!v 2d7W9 A$'y/$#,ATSa. . `! f-Hj.@O|9< c}4  /qD0tlGV2Ь`l 0l&dbDtF\D.TA9-6C '@x,@@D<&c 0̐ ۅaᅫYFd_c;fF@KiuCz2`5Lz鱀 8D[x@tΐhe9Q9߃@6tt@ <3ʜC @Xp9l (C(xi/BA@B?<{AeL67|%O'B@1 wAj,W lj,҈h%@C:lnCÕԁfel%R1 0nDmWl D|b/WA;ĂD11K<"F pD+&( <() KMC'D@A8 =w倭N Ttn8oU9t*rl@8  ?c  NQlL@]( v UG!hEX@T$DL;|:}LXdB4C>qΞW : ,Aġ!A@Dp8iAxI'p<uĜ1t,,-( DJ4K-\';9̜CZ8QX+D*& ĚCV 8y#ByBfABě2<;I:F5T^KĒCAs҃2 `~h6\ׂ 3F ~ T6 U\ 0!$QV;%)x4X~&_N0@' @TZ05ua RbO)oT.ނDbMB6 ̛7<|XkV6L."qt @B0ļI6SyXeОBX¨?)%e"*4u|Jf1S&sy@֧qLh5,5OՈzX1;v 2òeQ}ol z멖UBud)y,eΜ^0$2rQ1c #=xEC,je=rj{ 6V#QX伐!+a&Z +=$1Z.=J 8)/P!4pv 0%RF!J`4@yʈY;@p !g*;j$xh'a4 ^:PIFDpɓ,c#(VhVe.1|bxAi "`-xуo Q~/n1RSTQF l C f-?ibc6,gˈqiv`!LP<)iZzHb5 #I|j"\򱨔Ir"^x+ 롫IJܠ* ]n_ťq2|_Ph_} $rX?npaayj*O !%"^q j rs6y-%K (R_ᇇr-%$x;nz)@j%ɒ-b&P ¥^"aQSP{Ƣcć8g -*1j-B{3\bX6㑘I:r|<;eyty Hƒ,0ӈ)90B#7bO0Zd!dtAfgpeD>A`D!G/AB -A%VnL-oHߵlؿ*Q"%a`@bYfҩf(%9K^ЂA-b/HB[f1Ae+`IF2ʐ1vDc J fB\b)UPH+^uc/zK@a 6EC,/CPDF)He>q%>* N )QKb7ag۰-6 ׸7`Ӕ[`hddlfCl`i oxH PbP tjs/KJ -aj"Abbmp?QE<@Vf@݂ǺŢ4" CxC)&gC7I:erZE9x4cgO.,ƒ\`Øp900#h"+Z^ @Fp: %,a) d40 Px =zB Т@nLZ!~LT{RL#.F5BdԢ= tt%«[aiEJP,zJ;}%JVŇs%Z $C {P^U)SL/10h/QPPZ'tdEz;zh ` D*ƄHCZt"3}0B _Jxq\ %(k'.QD^0`nV*2Iɺd8 e`̯ !![1j%X,+%FԈb2Y#>rوbm p.%c!Ʃ(/cv j")%#m!"4Ъ0c6f%r#2v/4fRlC1:GA=`zAmnB&Cg &"җs'!(! DEAA#! >'C2N3SDxCeĀHn`n2@|$@HN!&t!x,z.!3Kr"?Ⱦd.AzL@2 9Mcx`6ba D!dpg sAEA 0"%*K> YvEZ GҋCJD:j A<6%d"H&Ңe |6t\N$DסE_BF(le-b\,UvMlȳ!\BB$-Hro2FOmR&&K !V4L_@>& FiMb6"+K0{g6k~.7kjB8`D%RBfS0 RR-"n`d'v)zy/!U!L<CAZW-bG((p 1 g%` DZ%00CA|dCD(G>UƤ"! *^kw!l`bpAVc< xO& 6$UA d4`e:*:t@ a=J.b & A.#,!!8=dAM^D&^b%a%!ja8k2ꂢ/%LT^Ɩ(Exk*/.o|1oIGR(h'0]B%YP!,K*0%G7yt$$ 5B7%!!8+hޔ(A\7a"ifpY:Z{0ifC9Ve4 ;&"B4Q% =R+ca'QEh@{*2 ,H$%`M ~, uWM:}6`3.9z3%.c+8I_?8 "0ģC7q!7PXpb;c5`1~X*`\Oz"B,Ѳ @UKF>EvE 킜6ʭo L |/@:9CQ}1,2%Z l%SMEB*+E,rRb"J\_@-bn"n%6'- |(B(A-B/zJ%! &JNV6RgrNNtI) Ng!v)-Bqca&RZjb f2>#) 1!`,nRO@e!|sFv$(&bހpl"A0dPf`aCPV!'r$6r4$_l|x,s!v'LR8 )%NZgH^od XXgG2 <2} 'y" jrd 'pr3)'hd#Fxf^ Džg _kpLAba"A!/2qbETA` A 3;Mlb %؄ ~'U"`6U!<" "<x'd -G>&E-( N`k&"x="k-_Bo^1kTW Q45[+}"X>-.J/n=$Gb9RR"TnPk"$"\6"\]A2O{gIN[}6Dۛ6"ih߆mg˒, Ȋ^d$k.&1J Op`@GB A V%|$2N% مX"%;L8.Z|,aRM"SlK`KX Ĉ 7Z}f ̧O~ol|32ҁ` %9pL7Y@WiBmUK\/ 5 B:O }OH $|C$ؑ4G5 #jg 00B@(0!,k*<0Ya[$u͛/`} `B )tHD' E EC@N; xQ2q  $}).>A`52BQ,N) u+Duh7@w%BM7YyC 56h  @{طG &(DiM` 7l&)ZD+@FhbtDC0$K %;Mgё]TwJVY9RZ @B>M7ձv,QMJ #x&k@g!Tc%SHBd44e}w!X DNes c %v'dh JB4%DZypiLRIC}\) a>t) EQ'vgS{ ?`lP5A l°MB9L#Ƨ M0&K>CC B(lԝx\-a;H79g !6a9΁.0e 0 (hZU!FTRDy@\̯! QE%D !4, 7uH2:܍9@nrHH1y"()$$H Rx} H'S2D`x&TEpB hOcxG=GI?Ч HOJ&W jE(B&` d$ECX$LÉ$E^DI2l@X;Mr$b&oC -h VB 0D  UBIX1xi- oGpOdA-k%&D`s`&7 (¯*ф0( 1Ѐj 54`Ű @0i>..y$%蘐r2TRlaSz/VA$m7$\yKHb܂dKȒ BPK[&@9r )\Ԕa2D{nBh`T0b#j$o'=rBRQo$px09 IQ^FNQ<7Ip ``@("!bhH/ܦTbO]ը#Ĥ@)@/R1ab @҃2X`? ljJ.6.%irXbh7kL!C꒐ !K0%C,GY = b`G{&eXtW780C[rqW7X˥/T{ЁqB!$!$o0L2a ߨ癣")1JJ&dtAb][r@o@쵐{!%)=R0L H?"MJ̦@Q1d4œMdҭ!T731'yO0ފЋQc@d `q=HMLC$!XU1zD0!`yfZnU%@Q:^1d%PCw* +ը*f/E3#bLYĺ0>7@}Ïf ea_@lBрw2DB+D0e!l8-%x!0a-WoC SF6jebn$$s,c OB6ݾt+ K e!] 0 |@@APp  "$ |"sj 3b_h9H/aQ) Q{1N qnWnǃ{_ppS C L?U^5f|$GVs% Eir` z <"5 !3j $U 6i61nt5 % :@ $?# 8` ~0Kx# 8KM$,"ɰq59B @M !M= rsWpp #Ű4?(I~Mdqv(&h2:~$N* nK?6y P <$ "b%i 8(q&"^ & P{@A‚"N* 0" 17Tc} 30} Qu')K^A"@MzGِ ,(M3( p9(rPm u0I>eE-$p8p bQ]'8l'x< q&={ A'v''[=cP AU kx!P `hq?1 Z$ֻv--JQ ļ+&< g?.ë zƙdž PF2VDmA 03rS6: z=#<sZ!ou.K M]_v3 U1Uvx V0PAQP Qʠ P1n0@I4m*s }P 'r MB#*QC !q L-LД7k|$q sL  h'M!^[QBźԚca) KO !bē9=}zE3v'aitb}rtO&Dy>!osRw#$ZopRSݬfgA ;qЮSB2 u-M _00 la/uP Ȣ@C% (sP sGP "fa ' pz@S2T0 }F ] Q130)NsA4D$)) =WM'a;1 r4~cM,L sqΜ@Cs 1 @椪0 QB7VM . -FB kkl"tNjn}l s( ΐ0d1ӆ6 6,$<ٓ ?֐p[(~Q'k 7?t^y^k=p~ aeH NR0 aĢ,,,K:a1L,\T;S3,(\`Ayn87 D<84 hyG`Z 3 ;Pfo p-dŐ`k`Č X_`D S 0/n}~}#Z\Y20WBq=000Ɯx$ " A + d1V61ʹ4 4#>[KI2,,!J eh`/2ʼn\pA%@[!mK.yr9sP.49ma $@Jbf7N8!:#6y.|C9`8~؎G:;B9zz3$%X'D>$)8p}AػlxTR;Ģu4їH*z3<S$1.zH),#i (m n$zv` )2yoB 8IVM8jy\HF:cԅ@V}#@z@|ZUPzs0"HxءVi8w$?|₶.(qC#*7-0s>V$edITC X1! _@2/FbA K$ZE$la98cEғ*!/`a=a DT**%Q#+ZP$*lzHo#3TpHG<@1xxQ.P4qvH-S):X ^$V10C`D%@`3q8` c 1,2up4ryZ}jVÁI'=^oL e JoH{LY$gX-,G(doPaB'0ٞsE%#J ` k!8 ؐ̐ 3@zc{"-q!|0x!\8h7h8AqIri$0dכmm O$/y0>)mpC]:LJ `My95bmdSH*E\,Xb` hzRmԪa*8 w0"j;E ."@plSPa@S 0<^a^t_Y:)T` ^Ib?KXdHy o0gҨ8j ~8V w;&S肗$?x&`ȅ@gxЉg8Jh;W@W0YPmpY0mɘcp3:qڸ@  d9@;h$ &言fZ 4H`! I:x 4CD*`p/8:z%#_B@B**C9,+&ym" )|2 1:k`5" [ H0p6Hĭsu JH,I:ڃ&Qp_=Z.Y{ 9ˉ(^4w\䔑2^Y H-POUQeĖz ~Z/wO5 V 98J,O@.=ǂVHP (k3 \<\(ȅ8W&V7``o@N[#J0' iC'1A68״R`ȉ呀w h$ ;ĝ  | 1褯4Ak8COx;8x-  [I]*L8?h:k현I"|W}2 T#ʆ)|L1 WKɀ=x?3$&V4\Y! \QDE(.ʬZY\>H !\Ps&`LUH 5b=PX68 ,@K0\yͅ@\ ܂3+JG3-X|Atc!p`M(M-T:쿰|c UT>pF}!Hp!.0Lhj̅ Bag ̙Vj-`58fj;\x%if˧{1`bX0(^E9ܣ>FuIa{xSeXpFs0XycؙK7s`,,KE>ip\`4Ȧ 8R)=4rptLGRvZ\ H]˅#s.&Mxġy%j? (ޅxTg/41&nJ޸? /|L ߲х2#D6@?KSjx`z(07(f11pWn`#S=$6`upp: ^(,[XjxXaVP{AU(# ʻ.~<)^Z x @1MH=KY?{%:0AE :QGʂ7 7ҘcЌV#L x=QH 6Рb H]dX۸@ 뚘V.4KR& uʍӘ*=/[ x#- wʞ;칤 cA!Ї5$O%/WF^X 8@c8ިM6d%VNug[ UUcoL)@;t^ؙ%&􅀽ryhs Yo "c8+' m݌W{1 rj "V?Āuޠ;P+Ô34/d).# U =bt.|_OZdi!~%~Z)O$8o#n <͠@1 ugk9`eV0׌QO@Vhfw>vl jmSFM[h)-.(FDFmAt20@ [dy&( B  tD[{l5xG&(//̩88B"DOP1GU Pb9 v@BsnqFv1D`Bu b`&޸N0vtcV1Nq &Z9oj HkGO'mpxN=kJӘ+(6hzJBor&(aO?aғ!-BP!<8WL<`G@"T9QQ 6"`Xxh!37|23.BՈ%rBsS+?( *B l4\B0G0;\%;#ICHE!SG1q&0\r }$v\G$wTSyi `;5N0 AC>0-mK6Gԃ^pF  Dx Bl@tK˫ PXt:g(]қS1'`V e]Df> nYfC[B$Or,B8@BI"]y[-h v čNc86]@Aa +#T/\i 8iPxc)BCCEk+kb*]T |G.X)B4jj(*Z DtCJNG}|#&M1!V 9Ϝ/ pEs|JYLdZyxFȹ@Cd+=z+!7 Z%$|3s @GFl(<lP l|AKc: ƒwH)D*s*#NB H "R [$ 0& d# |@P`+"AFH@,"~@ՈՍH@WD0(_GP ac 0(> B"1 Bq&/')Y4W Rl%`4760y0A8%I"=q{d-= CeHd!,AmlkôD NKHcJ3?IҨ!K,|"L ix` iNJ -[]32.t%(h(IC%v$#a `H\bvPg XH`;@P`;$j  !g(-=40%+^!&I<@q\"|s\tVB)>!  D  #%vp H^HqB37b=A`>]dzg .buNm! nX#g]PxDktB՛c8q\&+bZIrSr77y YH?pjgaD!7U,T@q^u .^GthD"@,ˑPN !x!q]ᐋ`""LtxZa{]sǸn^71Nt1_]haMp&,&4A]}+Ԛ\{$!UxDHC L"\0 "o#L|:xa Дb@fJ]S A-]D0L"]C04/Is>ڃ8grاE"1!3b'ǀqALGh_"رAlKX-LUmzd҅ 9,IFԓ1w-?t; ytnVQul>s'#zGC"\Upy#7I$\ӂvV\x^腤P9yGj BX7k@!2lˋ d\ΎNIWP&B>NDB:osFj3jzj8 B͆LÉA@{4 5C5[5@xGxh($A@D!0 ÃC ,^ePFA凂T2]NM   DЖ Ta$^\$DJQ@K (5@ `uBp[u#`BL))DȀKM_$c9FM!2 @5hd FTA(N<5DFFr#-DhA"D)]fI!ȏN*ACi `dΜ #3HG ȀH,i8V~SɅiu(H؁B,αi8 ebD3`Dcda0] 4t((L< C&mw$XBdA3́  Q5헊,Y|)|,72`Po*4@MTya>fr6Q4 Zxu@BEtPZ}'Gg"BE8gbE]\ab`gHeY`!N2Q@Ļ @K[_ʄJXI EER*h`Б)8D^D|8B,NdgNW*Bh\ݬ2|i|h@!e*$X-Nd-ւm]jb ́fh%ȕ #`"H cp} (y^%D3B,Ny][B[0^8Ġ8ZN BϜp8&̛ ƨ5$4K(N$Xø"D^UI^p@!Oy594#BMNlðI ~%1 J5ڬܩft1r1ΜZa8le.f`'Dh~@-ff|GNT#dmR Hh[ duu˩Ɍ|Y||IBHϜ@@ /`m" 1CA6N!2+̈́> \Bhpw^s,QPt?>3^D&E\NdW/XNB4y57Bҏp'NP). @1mD#_d)8R> %V^ M eed1.R|1XC1$:aBhbPih1pvEt͘ D|5*#2tH"XM}{0[333sΰnS$0t"2R@;^8Ҹ2"@0xp  @ Xa`"Ie}(PqW)3%bHTph^% T}z\:U>:p+B2h @` *&sC((mpRT+` )@i: %XB0A Bzl ( f@7Ÿ9!Fvro@.i`ƁjdGiVkrT;y ^N[jT]VEڿ*v7 }3|4U!㝏hCaM_h:4 2z$P" ]&XBU()va[>䫔XA&F+L `U] 06Ж [5C X ^9 %E1(f1i ( BX~P' @ @aQcy:E A(@/q smܠɎPg vEy#t@UQZα$=7ΐ>q(%$BL4e= E*4vt!  D =d8qEL |A`5eDM}("Qm#;M 8'c A[b:%! erܡJ< 3rL'g6Z*Rq2`C⇐X HF3 ! PILGi%(CR<%]T I!VE/gDj % Zmhk  a0 (beX]Sſ@*hD#̡Łp ` AXjq+K˜p|@PD D#H-Av%`MmO#/vZ< zP~U riBݧ1Z\l#1@5Ɏ#1o|/7XW$piLd("0Hq5c pH![u /@Ę 攪 ='u!G*`DU[ H"QZ0H)"tcK } iA|Z!p;VRJwҊ(YYگ g:*,Ie {gBp|Ic Fxz` s%!\V ^=K 1f H旱HD 2,!eձޠ(n<+'ЊS>O7AMDc'Ĺqbw@* É !.T GJ 3aOEGW]E*h`N2fJ'j.>b5 |/0s˲m9Ed HS5[c0 _+yþ4#D^'jEHÂk d$t-$6M14 d ⱆ do`*#V,٦)8T aB7iA`f@/?rڣc(~f>j>ucۦ)l\4`!(c("d\n D$?$`qx fbmIN=޾m5. bAap~dAiʡ  L%$#x4!-O@pZBxTz`Q,n*< Ρ j U Ƣ)4 g f@" !"""^!UX +l*zhWN )>%`.1)!1 ]X@}A LP`j 3ejUz%o4"jLfhf@ b :"3*5E,".Ō1SsC Z .>S_D',c' O8 T6 ^K3!.xa $bycCA~#! Y "@fS,H,IpB4Foh fP'h"Wd8*uZq ^p@0钶Ae)H+e0MˣddFG A!=KEEiF£@dxPni@ƤL)nI+$bdAN<,T6 24 0"| 0Jިg\X# ^KZi$ gh+=")TPpPAax@``rĴ6fgjrx!Ne$NTNnP 2AJd.$L 6.Qul i F!baA:c"UUxD@!F,3WS$Jaܠ ,l r` a!uz "lh ."DeB%VeN@1!l&ʌPJY| E% ) ̪%1.!p/1b`4烟2d( ,,i!2Nm-XX 31T رe )8sd Z:!wnG 2ia $S$0!('k|fn@n&YJ:r.^(=Li)҄Kant)"Mgmk ZX+U>l JaF+N3nd(BP8WƔ+upć[,./L x!v^9,$ Pv Yw t(!y2-3V 7%(*dTr| H>>.;@-oM,jh)@x BRD#N 8!i4W(jArIFv)rRHGb QG>PLG8;A"tHͺ0!CC@ 5{#*! Њ)!)x 1 9%`D[)` r@a*{b ,!Lg)}1 9%6!v7 A85S(y*Fazb^*">$>46!30jԢi=S쟖q]Xy*#b0$ȟ%PjO_T,ntJ@V d3BFd5  ;4`F%2;d5t6b3~ 5 t Cv1J= " D "N#a|Q@Y/!Ι,,#Y%#/@}Dezw G\(&3d0A]V3P j\<3^ b!l!x" ƅGY^RFB @ ؃Zo |Cgɏ x 8|   IC JڞľDv'p!;?T"E>| 'ДiUD$M$*G{b)f?hcK ֈlH8,DMd@# X 19aʁY%{:--$`B !"| .Ԅ$`HW[%L `ԾY  Aٹ @ X|;ȰÇ#J8I ttk`"Z!> 1ܸU ?1d4ԲO]2ϕ)L @tA+8nPyK.U3P/~j4q, @bgCh4&D@F Ð4dJ'D i媬*{2=C.0 CCja5Q5 {Ә)q ;zYh mڒ%]d1GD4dDbR +BLeaШ@Lqz 6A ى#I,ڠ~h  p@:4I5)->C CVJ0[:TfW@ y04 sӏC Cmb0PW 4z1PftCg0;R =Q8A7'1A(0:C&u@t)0VzI^H$\@b $)=aHZ؁!p(@?d!rYaC\qJMKxPċ!G bh&3 1H,)ݘ cC4V(I CXv\Cv(D4 9.փ =6CৌwгI9E- QGGZƓP@F0vj4"hDߡp@:N+2<&u!Q]6(N-MYrsBd*ܢ 0,A@lU_GY~ YPB < SC䱐L`-@!H@#+l2( la#֊|"qD!b=ҧ )Aمa+YCVP"E0}ChClrHUa(VTslk ;,(Ct cHQ`k8k D >H 7)/Cm6 هC `ޑ \l Bj.,a Q3^m=Epe%t o$0ZZ}{tA R7lnGϜ4 LpiM CJ`6 7.!M!^ 1l F ` ` Fp@ iVi'7$q]rT`'3R:rTaU]Ps q qQ(dqq @ P@v v1. 04V1Afc۰aD Vw '(P cQ-a1aw,BR lQ6F# /7Wz|M8D(K"0EDX Ax+AA7%.]qc+v0 Zpa5|D !P5Es3|4".=4 KM&516p]\p 6oCt"q/^`(@7rTߐ8Xp*22VHDmM` i0HgPa"Tya <@@)L Y&I93:0Wks9oY>T2WQ*%-U0fS 9dl 4+dP%TxIէVl(-0Ъ?a. fBWDPI(0j񝟦$CEJZ &qjĐ[aȀVK RZ)B8gZt6 D23]/"76Q pj#!)_ Y"QU*#"8)Tg` ?KG_``Vs${U  H-RBRT`ih ` U qt)P2ut*ws@ 2upU0` p,2Ev>0e Qb@T [ j- 0);I^fN)y-GB^g,Z A  yM$С`/Fk1yȊ@(4A { Py  k ЬT͔Vj4P+iÍncL(6s 13 29ipFE }+.Ps g5` D  XsCQ"Nk6,xqgZggLm  nIgPu6:7FDtACTi@ɒ HSfQf )$%h-ԫ !_=:Ƅ,.b Ӄ 1wQ =/+4?' Ѕij @Fe3 7ky"t3I iA <r[ =қ,QP $6q p=i (=߅3sr` :4#oerцoeAI`Vr19:UUa8`rEPQBL(QAtPU q@hNxk9q*==9dfٖdȟH^в3xragb*n,"˫ +0b=w* y YpQ P#Kv 1~6+u.zGQ J.8H~ "TF8QQ4M  AyFN{ b.n1/ے>zNJ\ o;YFI:qZ]pX?sqHpTuFF,<`[+R~m` rp^| -%S* ɔ<(ؔ狹(Pt*22!Äޠ|+ib kNCq-d T:޲NA;h0 m be%}0Jz3SWs`Z0  I Aqm]iAo I2vCL#w73707!#4v ;iP А_.47zI]Nf~ 5JP`|R *d.,pn, JLQpǂ#dqJtP@ HpV631 +hѩ"VQw#!E(pP a9@b&>&( @f N1b e&:/Pg9<\X:7H@B~_ԤIC=I5Fia=6H 9 qQIlzpx;;x1pb80Ω %`;s1p#,HqPs.\YBF/,`T ĂzюF$8dA b fOAPB !´cL*dVt%OadACHG.PZ X *Bpd :i Fi\7)6bE&R! :':֘Y +iE * /AdYZdLo *H.q(0($P xVXaqĹs"h:,ne68-NL,L-#P6eT݀fNN7ZDh !zY* Bs1OjLyo\A%bx.4(qH!yAoqÇ`тA!tMy $ZC!%   *3.HD!4H!]d`Kٹ@4]i0 3b:0HWW^y_]H\ )$qdBPo#ՠbu֔ȵ֗ vB&u `+*@n* #Db6AG"*2L! ^L`n(@_!\0d.1C RE` 0F , Ţ2.#%=+ :⭕HA.!DUo +yF*Cd$' (zlDFA@/q  *@g";$M*ք4A7~Dd"PSbnuÜ  /JR*3 y<(!N!YNv;q p[S<AC "T3 NG=UtQgBרΘ F!G(,! 6X182QHEn ֲf@(m3 DqNAUd@ !\HCŨpY ԐF.v6B$=*PbyĐ?7rt%JAaƨ6ن^ 8RѨN8HE::XYDQZZ6 b  < x*`'`vSCKp´ӪDzЏApmhAKeA#Y/ :.!1g9v\!CPexQ~ \"@1%mJaĠ ;AaQ3H*4)fByh3Sހ&'ST6.P EقckAm,fuF秚Y8X@gSAې0% H2'Q1GYQB @?`](!.0@M ȣ VfB !z08U'Z&s O(h&FNS(﮵ Qb(#!N BŜn$FؘC&fo)o:@9!%i wn7Х#Hgu%$#.G_M66RHm<{A)Q=LUڡ+[mA ޼NZV砀7D` Ď*{\ )0 CPZt3.==@@ys0`%8b` K8mz-8y&eJ2sbgPD@9b징ۈt\03铁94PS*(2Us Zɕq2‚:iAxCSp>* %PRI H;H;2)B5#[Se_$, xA2HzȘy!x>P󠚞+$S0UH$x\2H)%xtȍ!H ɇ!A,@NFX mr7??\ 1b IfJ0EIL Ű<ϑy 7ʐ?| '1JBG|v'C2i)DPY1_)0ZY!\[3 2s N p̂L|Ĭ( :P0F چM([G3 WD< *WTMbMpM@x`? \2%"PDY5 [քIm8 X1M p1D> > ğ?)_TD tI*.q? ?@ǁz9UGǁQ(̓t u7@yAc DHm2%A`]]"t+&qnbn/-u#uAxHIQGYX% a_J7ҥ.;BzCavh/P"iH\*I15S鰿yP %1 Rzs[ Pסq=Yib \1=bg!ܹDm(Kuw(54ԍ;4Cb(Z*XDW4}؅-ː]VXXH;"0m fƍZS"Z>؍ߠSsA@>Ũ]8h@yL]h 3͂Os$$-p{HX}M ()iHF~a!$mg.0)?1܈zN` /=^paS%-i=# iidZ00x w`%Œ:.pqwz'ro@bSb~0@%d3/X _|p3T\1:|===-u- *Ј"Y(u%Gt Ll609D Ù ἄWȳOeRUSeٍU#]N5bcчՈ`2"uc=( 49 g8c:`uqV!xE$Sp^Iax$ֆso  ?%ΘI  8<ٶכX ul?h-h: +3U7u?`x;/2RwphP'5'Udb {X )è!4$p;?%@Tb?P8${8CvdP{M pWKP :~PsO; KL|X 0 F}\ 2€5+k ` DXS,R5hd $0`XmWL^v6ێ,Dnf-Є1B6mh e6&90^>yv=Z ~C_l*3S8@UGR0X T)kk- xHyE> I/ 08R҃70 :سqZrJu4s^ {_)tB9BCahVz :Xbp I.P#jg^H߽*l;/|vl -4dRCyWgP날Y؃sw N:8Y nI)pdP 1_Р.X&Kǂ*hBҵe<3eX!lO#@"oF` BGnapAn%hbBJܳl6`8nФE@"CffB#EwAEy ;APAUܚ/-MbxP@A- @@hlb[l[K,v`$>J #.0Ĵ,2eV sgu3 a%7$BAlh/b8;nC]7 H$ ѳb_j굶s5(b7q60#9AA_4 ӠpP, p4A'Y4!@*d-{>}G/J D b! r$ bH9PAE ԅA&زQ?AA9u0k $ Q@ATU҇S EquӍAa}z.y:h`A\d PY DALj?@ 9Amhd>FGLی9tGlEADU :#LO L.t"$Q9S` nI-Cp&CDA V\ՖAuuYٵAvԇ'A f 6Dg .ozܕZv 'ZVE6kd p\A ;M|(Bav0(ZP^cG".XA_C/F`EUh uiL(_1)d 905.J/E.a8'YP=.uZHe-+'}"C l0|@ 0%( :,NP =`C+XYYc6IMn ' FFO(pwS~" qUAh4 A9ȳ"ȁCuu Mב(J)b+cC RP$6Au !9ȁOrUDI 8RQdyLcB>$"B\$&#8@ #PB (*V+"xCgxcx:_h<IF7p"1:7dbDX!ȱlx@b$$1N@'$@= mVD[x3 ;*Ոq XA PA؅Z+b$ ә[x?or % H15 lF陊!Ҹb $wf6),v 'r @jZ^ԌJZr}%gJ ڗ̄3?lIĪ6L`"6훌ٙ)kdh%3;)gT) 8EAWz+BXZ讽&Y$?B?8@EԅhkW| tEw6H 0L $ @Qq,{#!aAAE( *!e cP !' gj$BPn%)IV̍q7JT=J"` I-BdɗHj"N?C-UBrJRa)"\ ",X#p Wpt4գu&( F3"NeTFt1 RhFZ5a{ J6j4v7o7y, eTAkn _FlNA"h%Čmy*IR@tF}hEͬRB%1Y 1Bg| Ԁ@78ABZ!YH'UFb\1lGk$$T hNHALwN"erCzi:=A49B,(Up YD]YE\AtYHE TA>@/S_DY|0A+@+\D$\D%HC% Hh^U\`9E,#PjJF=EAC5 UBI-'"RI7TxJBPzg|ĤTI`iLD%L(DcEH(DbUCBƫ`DҙQ @-A\Lx@@ :)Z_}U1EQ)Zc[x ÀY BGs!!uF¥od(]RB|׾q{1 %G@ûy%A92< V.M0#VcAx1BߞA8~!iAjRz=.r.=x#5P ?]ZEP C  u_"TTAou"ı^!fEL픬%PTY--,BP.] 1y"ġ0JM1WUD:ĎX"9JLc ^Sɸ AW-3HT/u^ ԁ7jʙI$hɨi+n *ܩ#*`ved[v 0_ RZpBeNge6jB| #$j-QaLBh. wSMc?Rqq8r\fi?kJ?ԅtLL:\m$X& '?2/pFf,`D$_%BDuRt0B>lȃ^JlU ՁNAX(#X)pA; "EA <@A ڠ]D8^U? pJ,PF>I4ښExAP8LlH EK\_" B/B@C* D*A!h@D ωމ^PABtlF @ cV(;)VL&6oXBȨ!܆!D=HFRg |}#Nt[%9:\vEaRdQ#aB~R}s$iplA.-ak*WfĠ%y%(l v`1"[F$Qix#0:H)*zAԇIxjBA'(C!B\7)ުv:N$dmzE\)_ P8tAtl B`Bp=B 0N='.}v",tE}"YEEA.Ġ4Ag1, _ AXBXSpCPxȃb%AH 2rwMoJU-l]iֵ{ om|#pȺ+Į3n ]7E,Me#6pLQB4^c@͉޴:K BBЊhKEZ g~E,we8{!#Z!tt?"T1LDER u,e N/d@>AsNJyRւ>HLp&=Koo y(ق%IhIg ~er@1"=AQ} 3N "DspL'Km=K*"R)CtL4F&! ȩ~"*dHEbx*9 , Z17`E9WHL 0 x"9 $ au@5-@ DE?#S㿮BqAh ]pC F@ v F AOq %$ϰ6L*XTe9CW6Z7ސ "]+&#bkK/RP%Q, HQYUMB@"( OC2SRu@$(zz@e<ؐ?@"t3 '$A 0=,'1>%waGn;! acH׿yB紧BeB aa$&@T'i 6܎`#D )8 C N@84ɐ5-D3a!C_ :]BDf K$  $O(Gu:B[ Ps:k g r= (#¯xe->p>-]HЊm ˒HU>8 x6"hZhSd2nEpctA@`hrQ%g J@ BIJ- _YC6 帬V#Ү!>,j2P'LJ ׅ'UL cFA@|̧mC @ BƃC tBb$qG/E@nlluV=Xj#FArJ~-t `Ğ0d.ALZ n` tM`m tKDNo`rd \ E:䞜=*G0zd{jz%"W":ŁPm'b``V%"``o t h &Na N 0 `Ӣ`#/" NJ"- /dk&ւ>h B(p*C0,-Aj`>."`:e&!i(A𒀢.qb b]h) P Ra7hf vn6A``"zD&I"r#^ MBСP ,AbC6d)DF* JL~EfnOl{b@`  Z/ġ`5@&9ţf<q|J.ѠnG0DK6n *veW 0 9:B`3|Ԁ3B4V"^ fM$ o@X s#ݯf  6AT~B(bVbkC$"`bSEe&a)뢌⋪*t&K\ (`\!lbM,Bb2BbbFS&iT$e4R#.5(>.N+6Az# " +H +QOH 8Nab3A39ʡ $`]` &$X=l"NBNp&HilS ĩDOrB'~x@PYl$G{D >'~$*"uGHXoC@ɔ JT!xo j_!2 CDiMFP r( [A>AS`5!(@L m<@[ 8"oȌBAoF_lDJ-|a D ~@ǶK(1L!  9,mh&,DaW׀@XH`v"[b Yfl%b1v둲kcF0W.9.ra Ģ8@0NH/ӥ H fa |7rn\Π $5 $a #;`UV bc? ]#\gs bnBLPDPgPTDsTd9!uX\Dx@D,joyaJ.6xdHad !nAP. .A@$&p* oڃ@!?AmP F~z|Ex%( F\;EO!M@J1̸*ɍiqCL+>jui=Ja/rDqbD؁! .|!@h'&a?|bN|8omd򈡌8> D"{T G)qILAi bF! !F! ! l!la -"\/8@:fh$}8eb8 dWd6Y 5/4`K"HZta=;<<-!b?s$d$+>`IbB,bI-qD #'>Z( ]T2ݨwՆU@!Kl1rBB?xPK8J q| j IM +}yV'"D 3tԞF.zDЯиE>:cHa*P<5\& 7uTXO;Ha;tQt)dȠn(<򿡡V C@?UB0sg9, ]蔥[r(:*.6vL6OcG" đk&FjDQ"#S @$5Pl_sq>EBT!G C{ZÐXb QSG^@"^#PUy\C%] 03pPE9A4Cwگ:jCu]nuʝ]T c\VU<RE.S;' {8̐xf3$VU56a% +yg\D_.#CB EK \F9ap `(\P1oA PM %A8$Hv2u~t4TrNiMrM|@ŐQ(E).PKH2T h@U i4$! /\j*ŐU0Q.!hPs2hAőU&i`p_ESdm`jȁm`.![\/LX18HN'NqT,q@ 461k`8ܢWȨP_,$>ZЂdɧJjOt6ЃO@yCQa8Pq~ͧ`a3y Eg36 6Nz =PΘ2`MYc0v`+\ P3'!n2ԝu $ 1Hl7Qm@?d(m:BF X@=^oIZQ! hk84>uFᓒ@b06ꤥSP ,D`i),h'5 ST8hcZx?.).r;K P:@!,4A K3.&IB` "LZ 4 ψPbeD\smQVn<`cޫtbQ,B@P_(s[H6ґF`"3NmPDT S8&"LpX0(ht8NRʐ-y /z KQ \)> q 4@SNugj6x|F@MCgMZ1M\j_)RX ")#KE*uNn 0@1>3D7iyKKHguD?$a<8b] 6O|o Jh*E+ZAU&Pтn1Ot"\D3W7]!o-Ct"ZT^b XDt ~.D!+a b, -\U`v@E,GEʥr .=1[10| (D6U,iȊvI: $ (!O(Cô@ 3fw,|osy Q+z2|꓾e`Ze?N:#[PSPn*@IwƲi`H _B3; '~ l>zɩnRsnLk 0M';h/.Ă\iZǂ*lԉ7N/lFPC|P_ⰝwrQ %@8CE?3 p;9 PhC/|`I$D>C$00 VȀKe0ߐ7;6FFi` 'pba IP @ ArXEy oV< fhm~! b$@w]:q`` z".ε+\r0XaB[X.X_>%0ذ[İ n:o ?FZ:oFkʓZb"l$#, ( w)!.`0{&( (*G]k KP 2  >]0` 5p \1Ha0:ta )p֐OqDf60 :qq0mRJs38o b2Q jȤ b:QcxgzEQa+by s;>sV }{Q1SQ1G Mc{HH{2Q}P:Chfu4o0  sȧvQ1CAS[S0(liF0s`߰Xy%j`G rN#i p4rsf5lkb`kiV}bt-f{ H?c ax\B& p*^ r`Z=` b+ , 0 7ᄓ2h+jp>.p2.{ f?y&E2-@ ER0 0 /-uXWIy4IP,9J:1d&IGo?`t00w17PAO!9E@WGce a FE+{qfBMkpM`L8KaH򆻹 o€4g|Z&4pw18 Pa0paO8Ne 5L71aH3.^ #@ P@ ޠT`"QQK }0nw  @KSPBbi FXj Y 6=Pp oP frib4&H ` pPo0  ."VXu(x?UY\ p o0ǀOD@&`i `Db20 z,0?ZP C\{)&@1-Ǻ` :" a} 1;C8 Q9tbS0m{P 2E7P :u\q ps`fg pnQK:{{ܰO0 Gk24 1xSOh|pc:7VgcK:1:$4h= Qa9{P j 57@vaط u ~)b q!%Y?Pgb):d JU@#6 #;(h0Z 0 h)`` iY`=FcE``V'0uhϰV R f%ppl@r$pj0bY4bp T.&C (>"PHXKA:2"R[ du xTEI&pj8YR$[0ZE&3:1u)g lF !\p n_0 2si G)ҐGG` qJЋ:9tbH fj_uGH *1@ Pygf1w *}8r T QA[|ά8l R)Rb9ӋA˿3 g3 tNBKOmP 6'4 ~pʾ }È0ϑ{#20(1;0` Z;jN4kٚv=|oz AYk j$f Bw. 1QA |`3 `+ZUĠ(yh, , q& <.0(Yj* PrD#W"f26oF, ap܆ 0ZKAX~& Z& R 0 @:񹷐~Ԑ;Pa P    oM179lxCn*;1?"Eখ a{wE 8m!̊ީ%OAۼ\ *L NP55:p٤$:a+GRs:A A& ]+2<9`{_|Q3e9:Q@\<1@]HdbȐn :g |+:!\u]m ܰ 6i 1o@@b j!:op:0E=B)握v]:S}j Y F !m,ZaC0ڦR0$t؀AJ*oйȠ Oaa b Cp=`H"P Šq̹'ȕ\m,-)h RKӳ=>q Ua X(u8L8QJIɬJӽ8P 3}0:!L=l~:C~O2,CQ AdP1x򿴔*뀸k6,8q[P6QU,73e4ILOqɱ Qqf 2%o;Y$@ߴg' Qg4g3zL Bh\ҝ%`_ o s 8uo3Rb=OzdLmHZZ o prpsp ~Y7`ă!ZARma  >xÉ!BڠrӰ$Q ސ<A>zBk߼CdEP$TDZJ# `@v1(;bJ CVZAj%-p@;ؼ,Ȇ厂?(&:1=G<*h-0hXX 4 AX-KPA_Ana#86j=H@oFx$Az C 5u#حΖMFQANXr@'a59! %QփS P8e-6PRx̀Vqg8:чBB͗.a@fz:r>NX WaS:Xdd#:N:HZʘ y#F!#hAc IcZi0b, $ P(sCZ7?y73 %Mqn-X@-RPCCa 1&q>$ poH  o|cr ze],P1qe0E""UESFX`M F@DxCr j44 9B E%[莩.@&"(J;rr) ai1YcK|" \JѻUx|#`-p:d`.: 10:X@|(t1e+>FSc2{댳)@48:n uE *68H6rI; h)*ľ{*8H縭 pƗͧT-W f/&J R1TDF g /(|.&ыXC'3bL lJw.EAC`.Ե$FB [Y%vp`HSC[j X'18`I$>QǠIiYQ}yY̳;wd![ < DKMbaz,@0j aiX0ȴm.p3H8|PF3Cg:3!|7@b  9N@,goe9`Pb r:̠ ȅ9ٔ>!P+3d E,!Π3voA $@!L RA COY0 بB훑gFEL F <"1q!Wh q<";MsVƕ F`C+oL . 9( "\\PX7 -E cЦ\0 Dк:"fy=J*(rVPϵD(.9 d2 tD0: S\". ܭ* b|hbܑ oX,!+hRA*RRR#4t.^|V4$9$. R#.4BeC  [41I } "p-bt@ UELQpwe@7 2qzlFe`m_VgNA03g1h?aaR-.{80`6hl= bXmНEMb'FODPGvX⎸%C!dj  յBUІ:"H1/D/H0C/1%#cA z_N?]ĥV؁B1as`4 M 6{QWo_2xQI4<Sm *Cm@>C v%^H 7`%,A Vݝd. oz P*V r7⍧ İ|l~u7]AЅw% @KvЏMb5%@ fQ~4M#\ 6hVIgU"g8`ʹIV `)0D"Ƞeh&AN ͖PL! A}b~uHq4A aF5IAŗ!=ߐ'Ŵ:pVV6 3"⨞r@K5Hq4_%,.X&G&P.qz,`d3b4qY0h62 Ab[ Y/bПŚHs8 i')w xS}3,JBg;:I0+1(;.*,Xy` %q`Ȭ7)Bg0@>"ϳ9O !j=.p1–!%5/U:1X 0X{CA 90 ;3Y|(xEъ((h"`+3 ЋbBQ1Шđ`{"(@=+Up* kxz+ʠ D'p=ĈP"y  sE !? 3 C G+ 80@Y!yXہZX(g`\  |o d'XS&!`" (*9(,X"홑 qɞ+7- I)aTx7H:HghB91̓w f!jKxOxC?b4ԅ^yrih:I…ABF 899`d'pJE.X`r&" PLĉ8)(Q&ȱz~yK8 K(ЇMp؄=˃ km  @IФ9H调0@!K,ɛHؼ4]$8"F\ \>т =Y#5.E\y9p=Ho2qHHPKC 0E dH2 $ X ЋaW$`G*B{3 3بʚ(ArX1\ +JF ͑ɓ) Q!1app¨]" Y:xG{!q68x*Wnx0`|F8_D6=.v+W0"ox.=7c7hVҡ78Ry > D%/-Y\*-$0/JٕUI(Ÿ"S GzNwH3^@!Daܨ/iSD((D@F OH(Y  MWP(莱-;S Uxj49h< P J[K J[6Qѳv۳Xj`V( !X=\T:Z*>2(H@Hp]Rr&R233P{ǃU02J҄(4;3I Q P `h4(3hyYA@1(,xyQXŀJHFY0!:I-P.ȇ@ȇ4ʩb4@I'*z+59178#+ns,j*t| bvs5KB c#,K:Ȃ c]!x#O *^p$ĆR x0- jtm9`y7K,"KHI$/"E'!Ķ ؘj!dU(+S_p@4) 2 hP iYGT :Ӡ%4PQ h XqĀ$t{r6 ZYEhEVӂ(4{p&M`݂=@R*m.ݹO0ϷhȷU'@ L'=X.6 1pPC p<_HFT=SP$`*>*Y;UJoi*6*[Lင]YG<وG_JuoV`%yRTA89j LGL4IbYs@ I7ȷ18d^.A8K@4"~O@0^=brM8J t5;,hN,Sp:"HrD,[2}.U [B DO{!P f "؃9}>S.>dĸ EML#9x U 8 F|PуqPfɤ&H02Hx#x< |nu0$v )-'k .egzR}GC&$ 'tRKhĀpZ iB?  {$되ja/pJg&#힋3,`?&p#k"7Ȃ,;!. Ak@.eLj*)5V 4 gЅb*86&)5쁂M0쁇T!籅9 ɂ`ͩ>ЅrЅ0tHlHib0r،q0:VIivKO2Y:q w|6p=0vd辀UH0[Xp2 h[ D( ہ̱TJ=P;W=[68 [&}(&Y*ȃ6mƎi8xh.ˍ&V烨u4tq(+2yGx-0R)e8B yKXpM}: -\4[1>,Ǝ#,HÇ| -ȍ: 0}&,I_8)p.Y0`|Z؆¡9ƂSaaXGe؈̲#Pf+BBx u0Xaw7y,o3Li;/Q0/:0=9".V8K1c| @Op [sWyhI9C>3a8QGOF䓫>@ @>Cq0 Vӊ Kq 2R )":A,щ IDQEd f ӆ@3&#S4m{86AQKƍJ|K4N|㖥"W-ŷђzYHc-j!uZ%@cP0 )=x RXCCDCX_cG*kPa t7APP>1ZD{hlvi8z[nh1P$BL| @1(ы0Ӌ@*DBCm2awO P2(DTP-s`42 PaL*iol DTM4F@$Gv35HbsQ+ƀ dLPԴXe`KCẺ<LF"T q1\<}6'u8bR0u^6@ LZth[3Wu2]< *bLsܲMNDHP,@tYls+jmPs\-wW;@TKqCm!P?67҆xyE%#xvD'@4-6J5 ߓ%(DI@OBHј A` b Z H޺^ lqRxP[" ({/ @I<3Ux~ 71n */'6ITO2㾱/,$gB dKO5"F>3`, S a(F1 r @+T+)H21MDՕpN eV|cS7 `6(x)9$ RHeD61a Y@T0D0&xbH+Q&d #E 9HX00  "VAD+D!!`S!.\8*Q+:!3Db'etA22ee .1  .`>k' '4Ł-. D:%3@Ұ,mtH@ 0h629l$ǹ /wha, NPaPHAb,n(S:ʺpSDQ{J1h-ymnrbA7iB0Đ`"P0o P()P;G&AVQ!+\x(&!&)V!ñ+]_BP2(>bF/q o "&xJ,DD61ْ`(Khp``D!<$LG?L8*R7\%Du-dX[Pee 7Cz]ĔȨԤf`hN8@Hh9&KFpCـ&^M84N0$4T#r82x$K|87G,h haPhCoРBhzLq)臗r9x@VpT#X)1&BrЕcO IU&٪1l #H+,b!Dnc-21bn"RnuK6B䉢͑ F1^h%gj];F((H$D N@DJOV:$xlalC'\/xA_:0ab! `8fnp<Ai6qZ>61! >F9wsט7P.~z8ۛ q;> CeLfyo0H Ǯb|G 1ˇ 웵כDAA jxP|nL qXa2BPF8*D`M+XyD \@DA)|ਂB *$اNMB>YS!LO6uuȤƘ^ADtPXC6Hx e xbTS@P,p;@DM$(ސ$8ATЬ ccB=C)Ā.CRJI1| !ک+Auf ADPQ{iA%Y@BJSE0TϮ]A›Wpü31\/DPnzPA=%1@7$)1,W/ ]tA" C)6,S.™(QvtB,ht4Ȁ2DJ ._h;c>BAqL4A@$T@MT xθ~+G|"JBz Ž%DJL.hЍqiMf5VU,QIuB3c@^+ B_A s<%i2\Dd D.F)8@Tq<C Jx]9M6t2 ?0A5Dt}2/p8(8 Di@޸Bg$Pl7qRɉM $ CF؂Mq 9ddTq@( )[HEUH(y2o*ɑ>.TUȟ,F0Z]CLB2GA1lCqt:P`ЩqX-h0!tD-ێq`CZBC )%pA!YBVȳUVG<#G44 M[ʝϩâ,dDL@+d9 (7@ PA*tP+j%TEl AH6A]+ qˑPIC؋@Pkp7<ЂQPB=A-At= TPA+A1y+@/0>q}oԅ&ޅBLb BB8qM0- ؂$2O3orLlK 5NQ]nxgƺ0oLF]4SIu/DZDC^OG<'_P)<,[^CPGƞ6߮k6APr6Moenk U TLBx@D8$AP yx{XDB<%D5D i +tALDhCh)\aK|L@0UhoXBx 6 B,DWk^DJU9DMBT9,HcaBD= DV[e*l6POg7̡xx1hAėpb 2?K1/_%$Sa%\` )r )hPDY4F<,0lFtS5!qAq0q1Guq#k@dHrp>LFAd8ǯwlY.xdHB$$.~ A7^DnPȑ@@PD:D=JSxPͻJK-kaK.9>c,08 0R06.dCCv`KV:Bx79 @OZ9 -p 2c:o`c'-~l(a&VT\@^D(gR%ࡘEFJ)`yJ(~6@70\~sN4P l@AVqa$0X|¢!d)(a#dm(¢ a(J:v$C*%.J^dX) `pǢ4l321C)-؇29U^"[]RE[ Qj" 5"2Z>'|mBw6(B %kTZ)ȀSFiyOx0a,Y,g(%\E:z`!jzi_iQĢX1 FH$FIB>Rvb C0@= 9 Đs6c9M8h,r%9iŘ$4ft'Scx䙛߳"lQ>#+? zyAO襗08m6>飗gnXBDnJZ X fE ^h# E TH6R%N86PBS@C(`|d+V>lqk8Bv58r h/bFTy(Vi?peWQXh"zKp \G(#z 8T%R"H%#]4 =/iENe p2b#´%067d|6g@%)83%{A H0.Y`b|'t9XLFІ6YH#25t<v80%oPOnI%Z28TSF,:7U'cbH&<> c{S5!6BưFCyG ɔ@ &"c@D "P% ib%g 3 t$]E*g7 :h}C@n B!> pU'x7T! o(nOE1V*L!ϩRXCWE&#"" 9Shv @6gF~i]6Yĺ_JV[K(m}&{lP"h/hTc&W#)sIbe &3N.X# m2ʌs,"cjBF kI]nFz䫗7L6L;/`y 1\l!P 48cNXbz$wbZ\D+zpdbX0ԙ'92bV Zq YdyA14V\0R+`%JE<"x4o>ud% )Iz KآI7c z# V-V KԡZW=ox1ÜD$(' @3-9 8<ڰ\0dU&$D_z!|A *XqaB #g"ҨEK6!R`0nA$CWZ!H̢x=Hm결%QhVD: .TYR#I$`niՅ2zs,* P㕢<E2D%ϝ93rmb`Uv!g3Ѕ.zd !N 8;4+|BP'؏~TD{X9HCk>䊍0,ൂGVҁȯ"G!{铤7%Aߐ YP5BhA!AB  / att&OAndlMnt ZHLP"',R$DF ā , /TLA@^,W d"v :%<R)&dA`db [(biH"6 ((d5rn,N#!2",@b `""H] ,= %@ 2)I( Δ2¿b89LG'\1#8f,`l`TiZ,#%QUm~je`"", €,#  thFjJ!nj'EІFoIa,(n Aa`D@z!nx`wOPIЉ8D&5h -kH* &!؃/`xj@4BBWl@D4Jf \#~`6\2\$` "Sa3F7(e} *8}A6"+2‘(f.PQ(lbb-.a@2B34+V4Ab&Ri0,aA,,B E&R"aBu fopflB60~B7A'7@9GbA~jD¨\T,9KHC2glwJH8Z2,pDz! J,&͉,BC`g%Fd z!0Vaza$xRA(+R}!2DLG#n@7Ҭ2#RIF6@,L*#$D "zA/j4.N#0"jcX8* @6a|!`%B.v.2 a` #4-b$HcA(&S΀Z@ B^BB a#l4".@:WI /x*v',"`2b\(.(AO-D-B #rm lTn^hMf0Ta!`N F> 2tKA zӳtWY*N'2* I'yXE@tl?å\wR",I3#-JT/A2~P5嘈h`,"j IA@9,/-z@Krmj-:.x#D$jx`>! p7 V0=W{%  Xˆ~$dkZ=t&:T#S4~ZNR@N/ls$`\ٓcVVV"(@ ]+hJ::6n2B"vcv.^ª,ba4b,b_  :y "k%Ŏ%%if,B"@>O&Hz޲2?+g-btɊ&8Q|m tΞ(gwltkD `=Wd@dX`J0"@F\bEt/4$G .AxL5ؾ*zH MBOz/,D L Ѯ"8o$1Vo| mO݇0PIJa"@xFZm-+!*KޠR]f;DpWc4B*À"D":֮"d"%S&&.%0`jJ'2hW( Z#"D*7mb>X%z 4(HZ%Q`1BclΡƦQկq_Aހ@u# !n,"- x!D5Bf-,BPy*eyPDo8 oMs8@,?${n- `d{Bw,|-IHr/@ kO@ 9\ ((@ff1ʁz2#" m cy'#0n9؞zry|g@Y {%nl15b2* X@.a_i#K_ϠZf% a > .# &?̀|R[g\b;¥MRb*™%W**cBuA 6E{ yf`1rff`r lЀ$tbkp xLA*@>ax@[t\JF\{IB{Tcv:D>H&8 ͐dNd%*4~ tafxly\>Jtd ҄   r SD\OE d٦&Oo,gRL!sOvd _t `jI&`b$~@^U.ca8h %";4m3[-#ơB#瞫 ^s.$@:M#h&l3:᫅34+<]}k2Af\*`WЈ \p 4Jԅż((}=5hh"owjb|,آZq X„! & @3*@  I2mpG Q1$O +!U5pT52k<0ۥoZA7Lc|$%_-ۜV`jNSk\2oCOQ5"0c&L;,3=;ц;@ rM.@dzs$Uq'hU\` %Ki<[ִ}hJ0p4 1 $!rJ ^x-\rg%m HQ"c1#ဃlG H-4C5$ci($5#>%8@LC>p MIC@tWGC 4@=!:*@{#  D1Ы٘k)+7_K # !-y zY0AKSaszB  $BKpzEߣM QDac_a:4*PP @p-Pa@ uu2H > <>@,H iA\6$+}BGdb #R|!p{czFMUj!GZb}]CF r ]Fhwo`F@b G!BǁTa RB&aX1!pC4``Z.1/F3 8Z4P]ru,=^He,Q L1v"-_Cn x`:q3TP FWxA ?8`cNPƐKq>k1SЋ1@,pYX"j|X9.LBJ&#' X"("N (ZnmH KiL`DXp?o{Qyvê>,#)8Q*KgTI,&'$S_bB@D' N!O(7BHDE`*I}VH0(S$E1 UȁB$T$F}{؀}*,q,G @½U>jD>he1K P^B,XhHDpN _t)N(B-'a<0H$&XC>@ ?(H0|t!!1 8b T %&&; Ba00Z`!e,gʷ!)Cbbt uc>EuR†ϽAD8s]8A}0r s@8D:x.D@ӴD;cpP]E F Lb) VtnaA"0#⭂cc%<4قMF'j-URZv$3ff{;%A%#"JO R"kJ"L[hB:0+ܣ)y+ҷ $W۸ *HP aڐ">꙳G(*$cF۳VMTH pF _Й*Z@RAI@ -v@䭟 3/^ <2A&kA98b2Ix\wP,U WLYlb3E0maI䠙gR'0uL!ClmJ ƌT E 1B @|RȐ':sAAz X)r,7[}M0 wDW@B>VV#v:)BڬcR[ g:h `6j:{;6j'[dG!"dE!B 3@DRt(p%>'XKQ>p'0& B`A S'#WPB5Sn$f0}"h+!Y(;d(GP Fޱ 9((!$P<# #\*+R&v$R,CUl$q=Bg05Ws 0KH,IP$1# g(h?` E50/M'a@,p`00* 'FpV Pb?^g}0eu-}12csp Lqs` mv1qFPP}vQkGv26<T d 0p9#lFPy1 eu e vza8zk9 1X{&"Fj@E@w  a;,0&Hf30c&@tsYC8+/4$CUS!Ce%>%V%%w'=~vD=#4"W`kFaU!A#^$qV^aWSЁQe#!@X"@X?+#f/8Q? 3E+ӃB!#ip9E48VC!G K5,"0p$1.9xI;7 /}0-02@@ 9@)E$?"@RF#V sC`0p0 `grqu)oP2:gqjXP'6]-iLp4sp> w4]9m!xl@5gkM0PPM0 _i_V-H1hO]jv9s("4PSׁrqQsc}gy2R)#@ W }K :_$@P (E$w\a G0\AF+# m! LR~=) k(*dpl$p\s UŔ#~`  z5tr'hI{ uuUu?R+_#g?Q(ɢ#?@!lv%W9I1Fc ar==~̶DG) hZ,#-i>CvB@PRB XH^@- _$"9Eҧ!#v0/@#r/w+A 0 aH?;22X'p0m`m 0@:6KJّ- I$awI${ o0jb Z&zP}@P)o@ުv` @f Đ 0x zzv7 uO}&5 D52@G ) UE0R,@FU @G#ޡ!p>4\b#iDpl"hkDғB%Q@$z*?&<_*T2U T9^ @'45$j#o#S@4" ʪ DI%7LRp=RW%&ARr[q#$ca%CD@YUb#%;B]qSs7k j _#ABaP}W-PQtI` ;2`$;R s;$-ˤz6m Jz4] 9qa 84lL1LV`0-sP3w 3sǝ 5reZs"T37   Nȇ1cg"c0RP e`$I@F0 Ҝpȉ,L)p.W@}g ? ("W#0~1#g*#=s~ ƻ?BcC(%O+8/l )Ng+#:|jLTV6 B@S NWAT'y(#Ѿ>" "YlrV?|8O`TO"B4 \a T}N44r?uB< x~ @ d ^3PT`OZt`*GUG%9gP>k@$.,!}`)-1H45|R@]МD0֥ւ*&A05lƊx $f Y?P0(1$vƀzQ hjF@4TcQSPyxX@ MmEF 01z7`f|74ck7{sHJ49{ c @@#r+C# @ x A9 k p ]%0tQ3z;CB?BA('y҂ [=&=$BJg!%0E PP(>p?WaaFۏl}Dj G2 ,Ԗ-?0SvY#1(G 3)} u!kG !p@g,!A) -;Pp5R3=3y|{L̛Lm{ZY}A2ЏuV|z ^a |3ʴ e/m , *+03O ڀO!4pIP e8`8v`@ݣ еqw~T:CҶ 8 %,.+7B7ܳw!%*=@=b4:@)K#&(>CRhW(B^۵xʔͶ9\Φ ŽrRLb_v=)ѓpߗ"$Q3!"q֯I])5'9 aHi i0 Ԁ3wF`لA2ٍLq(Zs䅞)r YLKg r1n:F3͉>ڀi`@'}x+St<9C3_ qÒKP8Cƈ+Ոlrq ȼ!"0z` @^q 9,+'ZQW6 -5 ԹpݛocrgQ@焃gǍTk9(06"'6lv`R s^bSk4?@|tA.p r@=$rJPό `pB {;;ڀ =.6`E>-٬[!6:84p0 "4mFԚ[4Bmn4rBNఢf f A rθhG륜X(gL酖0 S&P. <- n9###O~# @\yW tjc(*zoyK: c K'hXg|yH#P":zŋ*r%Nf P: & 0pCsZIt&t ##*JSo Rӓ&!Vb a $gZz1W,O1Q:'a ,}("(`6 M+ %0:})ܘ$7|pq#:M'5f#; '(Ж#vhϺAA7'"Ӧ"Q[\qrހMQYqe;[RXұL=4I>Fq@9Ma4p墤dzxKRw"(O#(s)KN-tR/9$@)'ȉ>㦈 M` X+ X.@1!pCaR r|B\(G>KH;l&d&1` 80 l 0jQ iXs7R2.P[(GV0` D @ÈƘ6RA6 RAvbgg c^; 2Q XL&E*@I0B j7BIR Vb`E^؅j`0A (pZXc%H@цxېr6MI0#^nPX7s o_(݈[F ˉrt(PoPҜBm l6!@IN!Gl'3Bs27-gJJӠY_Z).'@ o4{u0`$(gCثBhh`*HicrSX1 dM@? Y@ 8 3 #B!BhB6Icd!سrUl;zoUc)a#ɩOSq'~>dfruO aߤ-@cdpFfDL"JPC? 0t10(}FFt>ԡ *N4q )N 7䁆ր@ZFOYgM_=46T=vjԵ G=`[s mLRR !Z؎+9BA PFMAԡf5@ %8F 3|zҞVrLZ M?Brd#4ΉGO& |osn(a/#!+>uTU/N8ENh1@ a@4U ӵ (*I+npxx%@KD GM*))=mQe[6D:%la M-0m8 7V@e+X 9UǞN@4`x. ,J$)306 ]T\j@Tq:г3W?Ⱦ+#(P?pC;4  !q_ 2q+ 6P>>π ((Aӈސ=csK0ࠄ"ԍh #ǃ@ 2i D1"Ӡ&!Ί7%. ʉj͡K((#I6:Y)ٔ0۔,V8 cVؚNА0>HT$+HvmL#v*D\`;=ІHJ [n(͜0msgM^HXX*L-7@U^x,P. j& ox0xbNxA Z#Գ?Ns AqQI5,'44= 8 3r ;jҜE 5p^)HT+;@})IT06T^ڭdTmŒq,U%%N(ِ_"}?OaʍOx>hLB *\Ar=z0M >|IY a3\HQ`Pb x#oh#K09T^9x0Y^iV$ 7#vg(GK$Q9>tLVx+EP.08B+$҅hXhPd.8mXJ$Ktx%;Jr(*r.Rh-1,`CX-ỏ.{-$U5`U ]ʉy(-7ܜDghKذ>|d Rh(b iRhӚTbªր؁D*_=p5,bJݑԝJX_Hk?0ܨT9;h HӠN08D8s`Np (09OnQ\]f9B2v@y@.x8X7 ͋ˉr fà #Fݺ 暾ݪ(xcuybP(*+K}ү Ӱ t=@՜}tٲ>S ?Aˉnh!= 46lT^* 6:''oH95 81K IWm'۪h (v'G@t)*#xYccu{rF(ԗ8nh6`#y0תX,hWh2ٵxYK̦TL xvS8ph#Ka%1;N^8x?]ޔm9\:NgnETGڕ:-hn_9t@Zv8bm`   ІGEIF(1H* Pڹsxy-2Ik@e(H Ѐe!ȇi 0۲@Wj )gH7q<2 L2[H28cF J  6HKH٠. uP0">C`[g) fєC-2mԖrT0JRx@}J%$#B @M*b!t0SէMի n1X+}nhnp)5؝* эpr 1yCt 8 @:`fsU0wԐ A@oSX@&B !.^xtaD)@"Cin!ͥ9GfV.ar 10Bs 0hVa@0#&b0h^pzO9}lփE%3Q+~Rʎ;<9ǃGsHtCO1PCY>F1ĺ9޸sE5k@j.RH" V +7d!`!B"Er@#+ l!gKDlC&c`ls>!na5$"@-;#B&8% n-@ Bx` = SHʁX ! # !Z$%A?/ڒqH"0nBtD#¨g0lr$GSKB'^d)|&B䊜SzmhZ&1PLALPSu B@ BRŠrƀ+>@j 0B\QwksJ3xBh$`*! @H TJ"#t1IItq .Q*R|R0!#YL]MAȡ03<'L G+7G*03i|3G cW4zmE=L M7 +6v2f ߖsB0O"ŀ17 Fl76Ó96$J ! DA7aT/s*y @up@ FD #Z0yӋ'q9(hONIl`)Cߨ`% Du8m+Y lɇj3ay eOfė)HoP( b6h/<M({q‘3#hGь 2)-H0 tbP~(m#yJPB$ OB D!)O9i<2B ^9|"`SІ#ZUl+]bG=`qIIVhe3"rO`^ԛu9b ؁LE5pmj3iV&&HOgx  m03 6!6~!T$e0pP" d ǜ`:2bR}ޘD$ß~nQ`6iV~Yg=,HJ+Bl"]ȃ0v=_ۢBI@Jtn`*x uC*9#oJ@t[/A`R?`H6m>Q 0 % Jfğ1,H0ElbB\I "M([e Xuz RPxT`Da!Dp( ")Q" ԋ& @ 8.C0͊!D@ ,DQ"oF9$D92݅ GNyG58HARx(8(@06Dϐ@ f1BVNaFX HeyH@T4B*G| WDLLN5q`3KC8C@@+LdLHER9%HQ'WJtM -M A<%'$: pϰ5QBX$P_g?C=GFۜ D1聁CoB!XB`C@AHD`]/DK%UlxB/<`<D·$A Ic-IQA 1?h:gh M1ܓB@2M$\BiA,hA~AA 4۟=G `@~BxpEAjTZ4 BT@BXFCx@DHv C5\q< B>$ҺHBD HK>\DاxC ',D+L=6hA+<-)@!SCVD@XPS$. ^p4Xd@ACB,9#XUړ@:HA1 -Be H J0.FP@@YL+AAe. @#xB9xQl+DA&% 5,d\g&RM ![RH$W&(&Oؔx[D( u(B=f0C_h"D7tpDBB` fA kk_"x͈աp,DhBMgG (l<-N hJq\E޽2U5H6-@Y)"B,߸5RNC tA '|C$B"DA/e{5QRMt8|y}uAM p8f8}d"c7[^ W`V)^.Y@0P;5YiFV)4@#TC\F1m\Bh:h2d<L:ߵAĂ*hB8tA%{w'BZ`,Y̼HE!f$aE-PX ߖ@寁Q!%QțcU$p$muXfC . B^n)ȫ^Bh\#h&x&0 C2i A-+ b*q\ƹ\0ĕde#Po&ȆK0J ^q8,nH'8ʈĂpCBI PtˋB@t Ee(p$ C Js/Z(e~~HX5`@/<+ڹ4ċH; ԡ5L3W <,p@PYݴf ăJ7QU@1nPP@ԁA. 4F8c:S2HETeM*u@ 4fCH ,eGzdT*H)0-B,t=tx'-0CH\*,).DPD}BE ).-T-`fp vS@-5&5ցؔP0DdMl@ Xp@ɫ&%\? :A;@;  " @8J,r0U ~: IzPЁ;P1rRYnHlC%PINpCȾ#IJ|v`]* vDy0r8G։D"B -@ yu=#`7B+7f L~+ X4<\0M̍H^ tԐYQ` 8d4_"8砫P2H(b( ݢgJ-)he E7L/iuշorA)͖1c <91k`Hl1sNpTHBb!qL BA(Hj ꥎ&Ot +a8e -F X#~(K,~l9ȊQi`N\@6袅~Z :L* 8c`.2;<)'@ O DŽZ 5u PЕb6!( hW2v `H9 BB4Y#V:%j: Jgi&BJm@">j) MeH߁ f UHoVA)`Ud0Y$ kRV捁(IJ `^>HHjGഎe(Gx6d l6,hdbÈQ#Z&c## `.2byWc{Wq>cvh /aJ@ Pa KxZyι2ॠ-e*Wt!-f/\` P{L -98A{`stDAdtʑ,G2m%KD!Ǧ8 J ,J)؄F5N066 @#!D3<"HuR*i쀅"V"$E)Tu0U\uc H5}dX(հ VņR` WXbkФbYB(DQ*Ymx@ MD$@Ò:Ґs8䄆 iҲm,E_ن(En\p!ƀ­ELUYBB镁mhj6~B0 t\ ^!eX\م|8F  M 1IA17:mf7 E`d`9@ i[+ CGg`t{Shp ~b9 eJ0!@F6&vd <q: v_d[ ܣ P)'T$ $4P5%3 eڲ}*DɏL_ARHЯ4m]f)}" ܋7zb i)w@2 ;$ d P&1X!!8N#\@@dX4=ȡ&K؂'@cjMG+!7TfY+8GRĚ / H42+L}Q&xC+4<34VC`6#Y(pD'@" @,J / 9&H+NP9a;Kz1]lP9 ]@ #dƒxVEctFHb` IA bBAGHBp*\4)lJϊ-8M 1kBď@ij[Rb(~M, 8B |U!@6Tuu8t q]Gh'7_ 9JUW:HLɐRY@$i@?@ΪA0d H qy51%mYN3Rw ^f! sL rxM٤mtA8Y r,-AƁ !h+`B=3e1؏BN}K rh*FM I#K(6ń4b2r`dX`C`+YNq." @KϲzAz4E](t>= xڴ Ǡsh t# x{{b"B#$+!*h) !`Bb @(`A&Hh|d 8@#T"!ĥfm!,Ax\KW~#"Na |  pje((%6VKԍ ^npDX9jzZz%uŽA KV&``)`>NJDSet*ĿadBb-Z1o 8! @ & |f>~F2X 5b1 ,$j` ^Eg :c ,j@ J;Rl ߠIgC, "F r&bq>!c>= |J J!j, LBN$ B@A|Fņ!,4 `EdzAdN@梌VG|!XJY/Z @ X~Nm|btHzRda"5TTnh JE `elr)Fe#-UBX+!8Rh!@ lꖅc> $% " p BV&e!'*F:ra!O"! n:>½ .Y``S"JN;b6".N!h_s#`AXHL$@ \`@ tI L $ -Y@H-` ʂ4LdVby! 4&C-aI7o an@f <  (؆=ܤЌd(lރ bc JDpDA2RNҔo 2lj!aʤ ` :Alʦ/րʁ0Mh6Y&DJhC`'&j `LBJ4.ePe7 |alBla"  Ne`2/e :.+@KEB# &BUs«`M7ƺXd ~! 5/!Ns v &.5 ! V( d""O+( 0i$#9fVTCbYf`@k@ #S!/MBZ\T*Q!~`blhpZVl5&c. D! :Z[&nXJW5] E#LjsY@Z ) + 0B(0T#$$c sSS@zX$jE((IT_Jv " * ji-~$lPO$LPuN* X@ 8 XyE:jqraAzR*!J=$m{*Z%dxTL* zxbg@0 L9*rq!H.OCg (t=GbvW! ֔`FDAqȂch0 5@GK`"!$4b2;Ay Y .`-. aI)/¯&x1(@29Jb^OF ʲTH7 XWBrH"b[! hkնD=)dL)X.6wؽ7|aPF`M.B,AQ_\XNkCDA U.P@ZtX!x*x"ԗ V ( Ȁ Y),PPd<` ѬDhl/h'J(wo!nyb Cd@!x5o4ĖoXbbu|,ԣdb l>. p;!$ BoC>B&OͿ#ڢ-863?G>Afg`PhYh`9x |ᅼg8Pe" *b @-,)dծyh2#, eaNZ K1]!LZ 7c衵ZC8s#vXJp vK .&`bG"֍NrS;"ɕ :  7-5FHdaOȆ!0G\$$90mql8@N2ad)pΑ( dH( hnbcͦ9@&HX O[ *,! tLkЪ T^њQS:'2ep^xABU,Th$`#'T YyۥV& 6ܸHA@.1rə@*\M`W!H > @= , !c*QC6IR8+P'P^IF'0@+B4C $)$goT6De) .-pq@u"^ 3Fxt% ȁ$m DQ%P@}B j @$UHC~!*Nt2Z 2}'Ipf ]:2-3'P1<C =D_As9A.L*`Br 1r =H00< 9тȠC 8L7İb}` *ASwpMTI"#K|Áq@21$b%H ҫ_@ e2fb [@P@DmijEΰJ"l#w?jp 6pBAM\_ !z̆~XȩNՎuQj{ |1dJlA*21dg( .h7'2  Őm_⬈D VO2lK_FNḤ!+XA*t @ 8'&T$3,gY' P oH ud7t_ xH肈QFЇ$VF4 Ӱd P*n QBB;`!'7,H2&!YБ gbb(XQl0N< Y"W\h x3-)8BRTmS a4$ rQ.taĈ7F%A1@:R )Cъ`|ANԧؐ[҅U\`C`N7d aX\8- 0 Rf(c O(,nFl!}p@D6 Q*|den$щLd Ԉ\B\% &C}CtN (Ȃ\%.aHWDFr-%D'xģGږ+ Dd!0CȰsgIR )PC+E:Tzc LXR1TTy ``cIKV!ӬL 0d# X@n 0+`"q5ZP3bUEoC\C'>S~g\u]yV%H"C8En@.v+8D` \X@>l" Z0I% %n,Oq `7FZ-5 )6:f--ZH,d@"#I AQ2B0!QHXOo-1 }F* 2TXd㈀ QϜW U8/X`@qސ4p ccэ^H a 'i=H$ ,%@ @bd 1gXvX or1 Q(:Qh.b@Oa]7B`{U6:)uaBU:o@ \>Pllp qK=rx]8$e3PpA+ YW%ĀCW+"*kP J?ac`6 Ё$+tEuϵm0YR'pIA{0'A&a a '1'6Bd g 0A9@!" *Jq_(GJr|rx`B PtGozq|6h/91s`HBXm0BPvk aW&p `P1m@Q@(S aPr$m` |pL%i0x` PMMGf [ d F*PP o` GO Tp @P8g5Qk8\f} }&YTW";0 &R S:ddZR",] ]:I:~4= ;`#aS9`}q0 ʀ i 7=' H" MqC2  yp pi 9jc' @)`{P  A/6Qszr)EP.DU9P0zb,E 2'?`F,a fY'p",@ XPC! p!qQ ǵ+H+RG H+y9-R0HߥP Fw@1/zt U&2/)@I a$ L %t3A>NGPJd2uV%3px&%dЁ "@ .@"2d C@;..)y c#`WPU^@0V 'FP 5] J8Q69Q}YȐiScI;V; ;p5 tÀT.% h@  )q2Jc}9 ̓% 2"0ka7$> 9,0 5w?9]YPvWP+ Dh ' (0'`(!"nc'DEs gP*g&8WS>>pDzezu2mwْH 1FPs a $m`'!)a '.+r% Mw Gz0 0 uR,U5F'R>0-E}wB7=U27YR" A&- j)y0 *×2"loXTTF>,P${z.k< 1]0-/iq٧}QA9:M1v'# e&,p/  pw},X'+I|U@,}@wK`p<'P>bS -о3Σ }9%Rr|u#-\7B9,!A2.dV\U $@,«g1*8 gV($DX HwB`%0Ä4=:j @rH{0%A]5Հ@z]Χ#= [PV? 5Xbqn3"< M 8 H| ~" 4+*D5G_ U.`jP`5p Sc1HY"upN.0hp%66b }\j3(B'iVBT\)Zpg#Rأ69 r`+ " !y'|hքP)p^)Rj)(W)(D(84j(0 (Қ$DMCB'_Ybc%(jKp*V=BZ!!K08A9FT8\3REP3\MxP2Ҳ6DQv Dʡ%3eڠ!h,9Na  Q J@ cw F GHt;2odxl)SƠ/ 5 X"ғAVZ4JCjZ_[zX&XxyrrJL-~'iHPI7f@x,,@tʁƃrkC(+qaUT;@IhJIVᅗIΠ6 .Bz hdDɃ"5%Y~ Jۀ9 Bla\5~`ʟAlK܅#`C-= ɡA:AU9`0vU X[4Xua(Yhdגbl\bqD@b QW4 b 7k%zdžˍgdE#D. 1XKbbb"@(62 idU+D)ɜAf m1 Y-p_+B RZ@ XK &P Oh@ ,;&$C)[P֐ckwXCzq$Fg1 &8k5U{IP8y Q@na2 ]K(0xqF cf$4x3@jĸR# ~(%A,H}xFbHS @hN1b),a!QFh (MI{0TY0L Su)*.mZ1e˃ ӥND$1HgRʫS-BbXZv ! "d !ۆ1CZBh MW,-C16`_@xj5dW=aM<ʫUsAE/#`'WҖqQ)o=v|!A?-KpĂp:3hFFg1b0Pg@ :+(m ,%2(0diNp1 $BXYAå&j~% Q 5BA4t@d0Aĩq&-$! DѲ0,0/Nq\("i[6(Ї: 0V6΀I@x>ЂYBs9ڃ=f9$6J)>(0<7؃HH(TI8- >H:pۈ3n04 @/D} C1[p,(%(r0X2 0?򒠪;Ms PiDH39 AjVPCzK9o8 3„Łh<ٌs@`M(ϠR%Ϩ5;r$c]g\\ ɐPy<aK&+ ̪7c,X Z= y xj`y22z[={X'P ]HS$PGx Bˇjxh䑀.I5ddIH&V  wP`̂0h4.HƁ\/(z5 xȓ pj(@)`rD18F@ar5qЂ& l5*s j Kx؄ 8[mJܒp~Y?R9K0Fk*h4G ( Ж98*<SC/D}PYp͌k8 (̡h._B-ҢK" !I<(IN3ADAy S:8 ~ 9:x 80#-r,Ox0B=FCYW8_PP3Q>|q85W$xJob% Ϩ{QfbD@ 2 Ꭵ@);p@`Ĺ[IapQUm:9w\Ih+ ,%:@>0#S)7, ^O8$M̂ ̘^(^_(qˁ.*%K.=@xKaZ؆؄IlCcɻ97CP9 HoȂbB, AP8CJ>0̓H0.LZ8xH)`b7aK8Xsh8;!C*Wc.NjaA#8N" ϡ8Tm2 x% (0$ Z+z~ #ܫK0LG/ /q¸?;W" # g۩$(P54() 9 )p`Vک5:\H`܆zhQg&֠*,+'eP4dqʁ*6X>+ [D7Xx) j` xqV09]@v聲^T% TkW9X*oO/XU4I&1dz88aH^J'Q řJ6!(49+iA88zCBOnv=5LWh3BH.TP.4 Xx(?'x%.bۡ,b:-hWJو" |zm%Zpm{nm KNIpc?$x< )DFe%ʎA 9C^h?!jئ1'i,AXA`T )$](_`v-y0Z0xЅ(rl4%9$>@ @ BXr|\G)Ax>A[Iqh6!d:֞RzB!q/"9H(hY lHN{@˄^W!&>S*~bB:3@W躍s؁| ^$ل"0@ `(Ё %rjB38t(偠 Xzlp:``F7cҋQ& xs%ÜQK$k l2 `o䂡Zpjh&l fǁ\%)H Ia+AQLlUx'Ou$5IHq XIXHz9TX"Zŀ7(X^X%9[(8q\@ oOe6 k+^^H\`*bHr ''3MIVrPi#hK$l;0P4(FKhAܗKaoHPaJЁX `1$00[rܩ*&RG'0v ~@)qr7^&jY5614n89 9l%齒7(=P+@  ;a EBe҅Ssk z^6D ^~@\)7?DX0ɢ>j #k)>V(4)X9N(<g^i;mEAuW0G$F 0En8( ʾ!-Yk$( ( LH(% ā{bLhIߞ=F\hR#YLc 000F?PՄ#($1h#9 (c'&@,͙c 'N!W5YYe<,rʲd. }bDCHQ 2Uj ք3f׳T0g$NK  "g`DKKB:^HA@@Ԓ VI 3iI@@$V @mځH.d>k;JS |1 5  d@d(Լr=2P)W䂎eQUa ^/xA3FLEkk6K<Fsx ބ@JB\%@1 S.A?%$oX"TtFRDE,qb T@ ;iI%\1ydRt0P%dR sy&cBBɄ3J jʆY-+`@ t֥d1,je1$q--q+!2$&@ ^ƺ 0l&@@9f$,țѷ1PG} ChiCf"+P+^mP>c$ТUgppFsg@k5MKIs Gc-]`xb@  ߐZBeZ@E esAX@JamUUA)!GBncj(P#]! B>'*,&8Ai| UV2n5Zx!8Brr:@Z547 [RB1Mx 1D$"Ixܼ.l E-(ʉ 977 g {̴$`a7Ӑٮ++ӛeT^ CbhJp7簒oDI $ "oG4)980bdm*#@6QE PFDX0!Р "KE iPW@pz>VW0=PrDRP@ O3cqM۠x"M4-AI @Q`6wOȓo1#rƪ JYD-d '`9(AlC~HX^$:! e du@* FZ `:ڕH$f2ㅪm+Uȍ:*"`9Hko%\l":̀$@5x![@ A?T3lԨ)mNA?)Mx)Jr`9x0VD@d@T,4bJ aB%lC'e P@=gID$ 7V OKD+DVFA 0!YIA֢i4Fm U%Qi(Be@(EK\ST\TEF@UX'ԁ,LE.QJR$BG %DEB]B(V7Ć44Z]a D@/WM8]$Ja5yGB ?#'@022B)pB"X13F>$Гi^E j2d 8p058!F| V!L5,CabDP}ԋbUt]KPQ@% FbB A8w!OKU`beCy%ԁ",i"I>AxWWB$D!@ŕ-$B|TFhLFǛh8o|ňAddz0HJuT[ ceD)/$xCXX/#'*-70/*$ S C*JS)g9z$O/@ؘ^@e8dBdQ/tqǂK㥄SBHQsb@G&,ۢDBUfS&*@loɖEEA5hTQDhܮVC 9@Q|MFA5|DGA tDWۢTxpMZ BL%uoٻ(ܻdoB01lfuvtC@?\7@0hNq ,"'FFuR/JA$'eA+́C.YoM͎|!3V{sD惗ؾAjBC~qB))  1x b*|\O6vPF6xτ|*6 1\?Ȁ2+ s$ (N ,k;ʝ)BC.߲ Ô'@[#mp U+QWB| 0D$]9PV@8e$@'d#J8}33$ nF,ʦR`6JC@De7BF0^uh%DooY+K m%VVBXBPkE̱PQlDb P*hQJlIkZ  +_t@R-@ ·.煹AA[@v%`yYHB=Lդ/n*t äݗASI)T@*֭M".:TPF @qQc?2$j :@ $r`1ʕ#V?d02V0˱qFaH(&#2oPѹmq AwaT@1]@`څ -}r!K\HlTX )1]_T@N)pxrP Kly3e(r6raZ sl~ W.]'02ݱ>RKK9n$ge89Kdt:YѧrH gck ͲlL0r ڨn,/ 1%B#18(chc0460b6p ` L &8E1چe(ʰhx0(mDԇAWE3q3 (0J`:G`p3c̀H(3nڠ6N:O•:裊)""ΚA6W ňC!gRq9AĆ #ި7R J^:U$4p)0 rz:/xh6HV4pI6*5o`j0:!D,8Y צƴ NK8Co9.![XlVNu=p)(QFy#_&@xV17ٔ_B9e )ʏ > 8ϥ|$HlO'/D/m0:97+CKzK5r$Ә8BONtX`]0 tPH]OS4{}7Ƥy4@bS8@NofR!V0 8 }X<Z3QC#dX%d @Ѻ Fj>lAH \E " * L^yN$'L΀ `^nINDddBvld?+ G""`*%_$p( *x `nBF, ްd,PyOF,E(~C|VRŗr3^,۞ ''@}HFT/ K X d& (c`$D0 ΢1] `E|aX(Bra$ N6_`B^3%@ATnւPs9%i8#Ani | 18&8fO+NgEzJM :N3ALAvDE:Pl 3#h\B,6p%v6 1ZC4Z%%I:oL$ #Or3c3 *> 4ԈE~(%.CE>Y8,0+_9f 0BvjH`GF^D J,i9N2°NH>%%*( "%)ºh8m$$o=9*%>!вp]pm."CЃsavRĀW hrQ#{${gG H\Fdnd)~aNу@b`tAd %wh7k{}~@P* 4DDw,z}zV PmRfzw#ևzєPDg3oTؤSP6NT1WBX 8j h`fA*H.f~(Vp% ,ptaާN##&E7:ufpmف_1"N6b2c) &Xx01(p+|ŒWRe{(^tO(0Bj$ (em[DC@& =O*I 0"G4:Mm^B! >6HL#8 !z79v(l3\C+,J?=%|891ʃl< rt3O"][8(Ԑ9, (6 ÷WE,an[cݎHrxczeU6CF*\OZp~LCyRSyGd3 -3RրRm׼ꥦWjf~L܅E^OlŪZ K6a BbNdAŽa,liT]9E*1Dǣ]YJm԰x H~1RmPm3,#t[ఐAa* xCo-'4cf+ .+HF6t T-(@`O,@taT(z!ha]!A1J}1d v*ʂv] RA` b hP_ d3 ,@(gIK-)$f 1[" շlKD ߾U6\0@8 ŐNx M^E+P`Y<}d ˦BIWl!3@y V+mVMb$^P0w!] { '!Y"^TsF3&g+,P@ %m6 NBҷr[r-~*o)4B"p6J*"'w`$ht r*+nF*l$d`tkČt6ڋ J!Dm#tH? ͜΃̉ey($;!I93sK7QDd$xDH$;<׹JsF-8@Z7[H(`|78b^G=ZHb _TSK &bB{ @TA.O\e{F\Mk*TsCC0ˆ |KSt% $."Up`@7ҏEɂ+ąVk~te@>XZ(, d/8Q`FDV@`dY$ !pc1ސIs 3@ %I PH>\#7 3>$E(:!)|gɳ)$!Q%bnR!H8b٘'y$pХt l^5B`G~Vs9m~-(XV/gDCZ2& @apEr,Ad)nPX$0K1#cdE01P!;G?KXӝAK8HaobduX#A[8Pt6H ѤbEU <:wS.@)~>&=v/̃oshq^$"H5²L|dN:7xt B4mŠK! @?xq)CR*ӹ>NFZr\Dxa1U 14VY5$\p3.N`0GG1xM|;gH*ÀnWqRE,%(_)!HzV!M3 ҤStd ^SZ 9}&Lr@8~Q e/Q_fT'$gG0in,F$ Z-193M06\LscT1%(yO{BDp`P!M%pxT-8ELvTDcMK+Y'9ˆ(]W 2ՠZi*P *IO?87\B OE2ȧ67  gNu{d%`6x%c?C'ה?#ha?0lPBD 0#(1*}&̱&EdqLSMsTaC 2#P Rn7)۲$ZfZ(6a A z A' ߐ H8Jr?+L\0?^ }@PP, Ga` ][[,R x Tq)v a9E/4T!\ T^FD&! !. 3AJ(uZJ !aj1}$ Q";X"Ho xBH& `gLQU{R+%Hd &+PdpQe s0qh;UPY Pg` 90!c e(75 9&Ty  qs"F` GQF}R#fc:q8Q*0ed׍Jp) A I:3H0j@%C05,d{ަ UQa'c%w@1a@0a2n)aR}Wqo6h D |eK)yDu7 (+n/95R1@P+3=1WZc&Z,#0C 9aIp Z@zyd{4i  s! rGEj & q× A= 3QG& "321KJ21 JK.2Ã~}P)p@7 )m~2XAP30:):QS7 Tg`lH7kQV7*fPJy{A(L3 Y/eyp l6g P"t4q ` tP.As!;x&T-9W0jk+0#rPLXYP Tq Bp е  a>es Spo>Ż/&p@ϐ Mtn_U#ͱrH %@ , `su_M27},PKY@G~dڣ \> 05X̴Âa& @2I4K;< !*q$p;R{᭓S{I7tD!LA&fR䤣QU:5ςXLq %Q+FPTQՑ:bsgccf0P6ݱ˼ ~sy2{dC Q!')G0:W#RDX c3  #PrY7p :7LNK]F@ϻ֨.tq;aY} FX'B5 y;b /GDGO vA 30H,7E.O.eW= 94?krUDTF5Nk>=7qB qQVp pqk0ܥ] 7nQZRclML t1!{aѝ=0E|٪ tK $XР@BNH>zP"8XK LLQRdߎ5M4mq @ֶwРXQAWVyF`>= ́r`x F ,9Ө`)ɒE#_F"UM.͙lWH  7cOs~j !u]`n)AXo H #0N<@ 1@^tIsf &L^pg`$on OO v~:Ra>Fo\<Iڌ ]h.R:.:N`D((fM H8Cgڢ* ;[r,B ]×\rRIgCO,bhC pY9 ),NJ:.C^zrg-zsp9፰\Q I [p'肃"4X*9`x܊Rs(:3Kd8C*Y2]&u g)5᠘cq %8("6}6\1~Ȓ86L/&$1팰*OvDEP(ȅ@$ H^xHѥʬxh6\_#hCP /fi ы%+Zº2U+n'6 hg9#"`fK8 ʒ gOpJEȢK>:ؠ1[\g,X78D)aHzIUxH  ;~c *H*!7 =UAl.L P8i k);<@,i@q18k)c8al mxƃ O]C$<B5a!JėB)x`ȑ!@tgcGJ(Y+EtAl O@4PmF[GF̏1 \#Hv @ ې* b ka@ ƍ=^P"P&'1;~hq! c2K5<QFAl XH+d! $K:ǐ7|" S3Em\IE*8*T%H#@8PCKS [2p>~ La ` L `3yRcViy1 g@DCY>tmDdxEe0gnp#@:WuN@aB$@VMPA34 ]B My-A(E(./4Alp{ p d=$ )#aVNyH}!yĻ]81P(m_хS  > 6HM xM#H0;]@]Ȋ0_Zԉ:`@h9G( 6T+2`pV@"*:tYH`:horXD{97 S30!0"@N 0_Q"!Z ˀā""0J" h 2Z #`03i B&z[[̀K(+P#p10]3)Xcp 'o h 4p c`0PH# B؆Y0)[Bp"`<`i}&h:ȂK 2J ؆#$E8 3<Ƭ/{]31Z!ؾЂ='(PI pX px 8z a -T0]68(_!0xɂ7(!) % І6](O(0Јp | @ 88ȇX h !1`A+t XAF(IJM! VI=4eB@_TdH`"P )f"Ke!YhfX $]-L{~@BHyE) pT:2g2Ȩ{0C_iFWŸk ODF_PO$ɯSL#Y210PHZ).8HYh uٙb30:%mY98V& ۸݀q𲎀oj~P~8ƨ>ExH51 |X;cIl~BD3m iG5:op*P&lF a\XR˰d!_FsXExѴTPNFRyo`c3 L.~`у:ohp<Ydq78K(Awj8[ XգePxD fL`[eg m!3o0m"s{FyX뙷[E:Ȃz#-Pcށ 938sW0:XS$yE>JB<ջU h!iT8m|pE!`&m= 6ݻpNwCo᷐,(lD VF!XRXMǜI7a3G0oHP.. b(bҀ0HJ Cs LR^ &>"=^ PӢ4С?x@&~ ՛ x9 H 00<)n\:X #A7GY5wp$]x3 sX T#?eE{50bv RhHo }Zh#hCS#nS y"UwӇQ xȂOMTK 7Ȃ0B8o8Sa x37uB`hC>HlO Kp1$XE 0S $##!;携&^=2| XPj@8ijBȉ=" ` 츨EXVb !I@QX9Vx^r`bh{t8 T!\h7SP!0KD 9YB^X;#m6J8{^m :OBn7[AXUbC_pdz!;s ` Ja2 |`,X~1VdHjx`d]Y-7 **\np3>-Q2,^eۖmH c0b (h0>ڍL^_X]859 P3$ q΂ω2mrJrI(WCZڑ(S TAJ_OgpIK!kRp6|;Šn% KHO7Y-'E~X2&U`*7;Mр: T P3U 3{(!QHV\ЅEA.LR 1abAm\ @t*!*W jL-N7:w|œ)? +›PU?#X䔡+#'< r_AZ1E @/CV>X *1 }q p ~)aS!)DΜ&0ppRVBs^m. @͏LژS8 `_ hfnp6<&Њ!Y%3vg 0v-$~hlIf%r1 daa|P@X (:-C 8A /2B1E~%@Rr4j{1#j} "2}c``sUy *p(o$2R5{Z"uRRA˜IȺEyaYwς/4m$eIj'mL_38SF¡[PXp~¨5Vi+G1ƬR)49X!( SC )`! (P0I&UL"\(;?b!Э ()"PbV, e!è; Ҡ:$ @%,! t(! ab]K'IԱ O#jPCLb)~I| #a`%b# 0RH$y\p!Ơ#RAm!ސ W.Bg ) 0aFɏ 1<癋F');͖4+ bsXZHI`ؤB %`d!sPLv o$Edp":]c2`Q!yF>B[HLV bh;PB.E-  7T 1$d!&iҢ2cdph>$;0x21U `1pdFxkCԱ9H2s@ʲ`AEW@C(*`;`C,tQ > ]6W Xp `!. vDHlQ[>,$` CaE`ƂdQ աDƴC]t]juW@%Xʐ_$Cl1M[4H1c<& ,:cs1 @3˫J,!i!)bFU!йB1\u^RJW9F0h|>T5OQ@ ԃ!PָZ"":QMWlHxY.|!F9|9R8&'h1.d6q$Ew\ }hT02pG\XAC]IdzӋ0yheH/>%0h@>x3>"~T"S  R*ѹgK.qóŝ" .8J@X2XeH&2A%'QoYL[Q(J K9©y6NЇ"?}BZ0I?Np#2oZ ԡ Bi 1up]mC|A l%7D <L8DaO|¡7B[ m$ShQ EdEgB.08C d/0/8=-L,h0|ZAXp0̾R %EH RL#$i!`)qЌ$)C,ƕD C C=*!]0C a-D QsDD20#DC0i"&QA]AYHp*>iDEQ 4C  ʨ2uD$ <@A.- Iô[-QPȸE?C\$.<>-4hF֔+ F]@-d,D )0` q>G LŒ:pGpXI~dB&H`Nٛ cE|(DA#PB%܅|iVA|Œ%,V,DFIΔ+T8{$A>UB߈3d`A,pB[WBF @wx7`nX'B٤@~0Au0d +H=8 xPPYJAX!1?!222h(/T-p@&CP UHhܲLA; H4<#^ a9,"B BD"$Ku5@HHOAv%]"@Еϩ.x&zBV"QG 8%P_BL 8%LTFt 6I"K0B!`4,D0b CuI@OVD.`A0 jL?Hq@+A -D|6ޝ xЇ,܏i@W|\WEBrFА_d:H]tH|$B[AB .ЫND\AJ}KxB(wgAKAt 샻LA'* !]$$0 +8 2uGji9Sd@Z@0&kZ ]B+X@d%cn\RB$0-D4 7&F` PP|@ F ><+|x>-h8gW-dEAFcHTSD(& VbL-IrX,TE,!$1F,^ (ۇ),2 t B@w8C! |2wHL{|S4ݻD܆6E}*57f @Z+JB8$OwAQ:/ĮEHBҌ[hSJ_P/R@EVR)2rAx<M%< ,BiMJHOįG7ɝAf(DЬ5B8\4`GDYYEi+1ʎ j"pcj((nM!Lɘ{ 0bF5h79EwOޞ475Dadx 0jAZ @2D(@sQ,0@J DL6osH\A" . )0̆/Be,_`C`$T88, k2Q HChDM7,0D1d3M{!jJ> <@8 RND-DQ@! ,J$7*H ,u VpD~#Q΍`E@E$!15k&x޽ Qčz#& De2:J ˂B !b :pS{HadNHW.g !ZAO[n"@7 .]khM]6U 2Zw ۋҤh˖ {@M69@('VMo@05m`+#GVriֲ'U  Ԇt? (@S" $-  ap@3xP'q X@Fi!Pvh?<=E O u(Q 0RUb Ӝ"D, QMo0:"ĢL,ex\9QJe D(U1Pni |@<} QQ7zVjK59rme)&~|] D'j&&@lBiRxrڢkl@ &gRTi8ЫI%(j,lD2Y 2b XdðFͥ2R$Ơ^ ,&L+Co\cp/P.Q1NɛibƖj7PG-5E<;Xg] =AkV0BaH|}p!;|!L @u,Ah d'Ã? ЈQ*9YŤ褗.5ցdT*H0LYc\a[cD\l1)xA-37\ dK'" 2@#t oTic>~Q  t"P3w Xv5$287B>0P: p1(Ap!'D1Ӏ4:X+HTmEC[vÁu@TB(5 n={FZ 1WD0  &P _,o1A#N N M&n8?܁b(0T;^A&rH\ (@N0~X SquPy 8{'` ^u@ PJOfqaYaQ'"`s3 r@5PP @P:$i(Tp0, p GY8^" > K$ѭʡjL`ť0GE\ sd:4{A P ]78NMe9JPA,%mVZ@ |8Eh2l n M,,Q h/[4#͘ 40ZƢKaUb Gf#ZOB..1,$l v)O'5e gjr!C. CN7O RMO6l,1gVHwf`yKr'+& *ծ x '>H(4 I \`m3!"\,a=K`J6:jm;\AVfxWoB^= w$)`<j- ض<. ) P6OJ[,*u촛2: -PIPpABNbځ*.>k#h&p\xb0V86h9l$0Mb`~h~8Ѓ7|Sw/wz'Z}k8Y|VuЁ HI ē'q 6),*Dt`ΪͺJGˆGE-qK43(* 86X%t˔k\`P(}j>7ȣ&҆K5D<:<@;<?ܘ5ZJQ$!(9!wID,.xwR,PQ4ghczYEJu(KH-rY (o[ԡ锶hF J(L*סO]t3k%>r[td9=ʑ:4ʷ#|C%~U%j(Ic+[`ch9H9q:TD#lȨh] ;Qtl(uS25u/(t-1X1k4Z"L@jX|LTEM|OxŽ:U?q8ɨ8;((q,bJ+}@,Ζf)*#@ "9KfZoH& x5,\ԬR$ZZd$0ǯ%#cuԆI#s%pPt=[tvݧoW 8z$I4@HeIT#c}غs8J4,+N J `&$kRI:fTDN#[lf,XE)&0m]}7yd"ѥ@>EU8[-ii@WU`-X=899ռY1@P@`  8TDXpx H)ix40Ws%y\ pXA;Ab ȋkcȋ[ 7fѐgR\ͪ=t\$yH:K27a P 0i0 s1Ʀ"B)B# (D-EQD@֜ĵDŀ uX2!`+ LD 񋸠9-[Jk#.2Uh f9fX5F̍(KEc3B/^8I~JL#?X(/*AHA[Pe>ؙx8Q`'VH< Dq^n`"JEwdbIűpԯ ؉1 [Y O ;618Lj6kfk!.+k&  1Pd:pG Ճ'+j/ ::#b^M-U8s˅_ҋ|ػD%%rm(`$ڥ * =Fg]t9?0="jHY NJf e +/+ڽe,뀀i:`ŗfb ?,3t*4i1i0i07`>]iB͂~fo $pU@0>7YLZ0sx&s*@Sln;pwc 3%Ƃ 4s Qo@>ݢK?RV2gMk aJeef%Adk:-SiiBPZxIoP,4@d MTy+AD-(01u;Ӵ(x&0;EUϭ=G orH( HꊠJpN6ċi[S#[9;_V5Q2d ;PGJTU(mc6spe 0aH:9:ДZƳHOP.vS~@VkJ U؉g1㥾GuGܧmYf&a IuMvY.2" 9&@ߎVh VlXDv>6??(z #+[(GXfG{?Ki#f\Hi0H [Q y[Zp-ɑ#l,3kjdK V{ ]$a&O2m)ԨR*e*֬ZdeUӆ(PO(sϐMkKs% eX1@7f2AZ%KK?QRYfd|z #s|ҜKMUO9F^3]"Fl .~o` v&/@X Q%…/%J,hZƯordpW+!qPN9SQ4S5H0w\iTp!Mu!Whny1EZ3#3#fE?,Q ّ'"LxLb@"ϴ8YI3Yb7 zo"'4s1m P@%E`h Das]ZKǏK q H&!()PC9dj!~}rXͫ } ] ba( ̪ҰЀ P$J@B;2p)(C ></J"8;(-^b`>1TERSL19H5(Sp,Q c”jBBp;Lw'~7',"[@AQJ-".tafL_d(z!pGRdQ:p.FqhC;0Lؗ48'fɁ @7XʙT&%dcٜyoUZ8.ڡ-DhH1(CSXh(R<!7(Dި D 5H"R1]U+Cw5@ S R:=ZLflLbn;NT2u @1,qL1. ,{6ָd$k^}b GF̄ @-j_ԊB X <242BLc‚L ,8B: ϰ!ISL~ `T <48xT/T )J ^aE,rI)JsNY.ywHޔ ɈdIԊb ~HSYczY}VP'YN`R0>2LZVI31bHBH!Tq4g\ f. d}ILH2ST,CPQLN|A'l&/V>΅>_5E-YsERq&3 Ȕ;Ԑ?![fXW S?Ԋ}6ߐ <֘&و<Zg|Iٸ) ho=)\0aozIFFC#wbi1 )YM`@=d ڝ@0\p:~\q21w"5_$iCcRO'-KHY82q@)ҚdG0LbA?{$rI (Mh8L iA G 9(ZYv]XgPrnOU. _/ (DRQAb =0h+``TB ¤$D,8* xƙP`ZSK܋a ARHx\JaaS95@J*4 ?4>D -B,pL@EB- kji4 M-XRST RC$%M2(}0u,Za.I 6_[,A Áa2H8E^` 4A+L1ʼnCD(9΄L{6R'LX pIǟ\p9"&$&>>9"?$A9H4CBD6gDEE&RA7 j$O@oPfr)%MB' K49@ 8\1\[Ld\L^iI 12LZɸ8'nS7L1:"XëL#LXI8.E44% ptq((\@jfނ k@-lҋn,6mf H@P;@Qɒ)6p$xͤ΄],DM,Ug9㤕3Y9GT y9\|a 6L@lMbp)w< `Ѡ8YNDMdpGd]W @]G1\?(j@*2LjZ*qj2,엮4"EF"pb2&k)Mt OB+͚1N ҙE9`4YhHbD%ŽX'N1D83Q9_U~BH )<@̨ѳ*0KFPѾLFx=F`p@Y 1L2@jf{aJцefAߌ,Z8  lY C,P̈́M))x$,kMAᨂ)E'C`)'RPLőЋSWU1ET+c0I1pWZ=C*[؁ @,ZiRIEA@Lc/)C1E GI`U\pV d!Aʈyhhit9ĽYSt@jZ@-iƓ{~ʙ(plߙL0(;x.;¨H']F΄kY LLh (C#En.Mnpb`S`M/AQ]⺅0^7wLLD[\D헶 tm11ԁ&mX\BLo}(rܨAL\d0FO2?Ѽh(A(t|U1NƂ@QC*IVqP+^#C@&$€oK{Qn =ŹPVSˈ$#r[\gWULZg @N1֭UkHdXg~̘nTn.4熰r-(C5,JuYHP%B,  JT28*jBruJ҄ (@ C P3cQNgcq ! N|Y3T 0v;R$YS,A QٸRAX/")Ac8z0{y"|WUi,p 4A,xuH}qgqX£仙R|Bd"jx]S0K>P `xϬk1<=ETb !E\\iVGƤ۠/Zl-y5׻Fkwτ+keu^86c+ `1 ){zr'') LԍdsAN2zG1ËT[H:҂;4u jBb0) uiCRPQ2űk\D !K35oYk4W^4|YY$"L*aAWڼ!¢d y [+\t))B /@5}'CO6;@)\#_>V'76;< 9%D*}dZ 0QKD|^؄ [f-iMK\Z8|p@p᝖ cw  SIYzXE9%ZBi 7q+-!e X/,KbJY0 \nxנ6T]+rh>\G4!SFt-sDyD!&6QB>|8 Y@Fe7̡s~(z;Q;$|.,yFtyHoLBn уc5a1?!dzJĄ?զlShԜX5Ryp>71#@AӕBW3RT>?VA`1$@ @DQ ջb8 x{DCmN .Ь @$zZPDPeY / D(Y`FJ(h)0bgwb@ A,Ү-.dHÐrZ樖Pc|f)b,M~V(bj%|/A0|oL`涞' B"Κ X!Fb ( ` ^bp g!j NE bAa ,a<P{#Xq!j "vǟv(DIx D0@jCk\GG3x` tOO"v T`^B/T &dbxe.HAV !$eTbZI40Q#? VzF%2V:V4bMV ".eY`Kv2/RT[Bc3 ɴB KpjwOd!8A}# W8QvP[pD9hed"(%EKֆ$aA@Aڃ@[b !! ! ֮"[ 4$4 4 PphJ%Aj;" #1^Tq*V.;!nJG2?.-8ʀdY3Ӗr+Hp-,a$b` l^EΙq 9,z >8!n= X![B s* $%b3 62hpA$`Z p` .pT2 tQB#p ހG5)+W(͞&P>+z|-/. ݆. zi GKrB7s,nJ0[2g '-& VrLGE$ :=ȫ  `1!(Q b!­"2"BYb3OB*V(FDۈ%F)J!E`fT[F.u)V+g` ŦZAHJqLð,0+z%E*'*0R$"VLV M2LkmA _WQk3FˆA,ePsР QQ&.$'B!'G &DA#^@!`T|`39jm%^P%~  ntCF- ­4?#e >! d jd`3hmq`t 8&F \YzI[&!.b-e/5:\bL byXAD`@sA&"A j("'2"@6 DvyfA@ R!.. U#^92+ ^E"n.G8g۰TQj)!? h~B ZXӣnn]"g)u+InAvv_%)B)M]..$;ZadzOG#7rar 4sQ Hnd@ Gr`6@kb6Ɋ(A#*.^n䢎*dW%u(o"`vH)TojboBϬX`@i/j.A>`*YG@VaE67!xx |Q6 #yPEBBT7;%%:+Ug v}*B9Ăɖ|p`:EG[aS NA b±%<F &f'%d ?wy̬aS ~RʀJ @ Na v?oTdY HvBiwhEHqPA0z! 8x)0#efkm R/3,jl-FcL /, ZJT2\nCcNbX*4$^񖦴gj b|]&jh0dCBby8%V%dFXB~:`ZSLƩ L%4R@dڋ%Qx b w'7'C9I08bXc)X 1($. B Ő* H<2+.~S FYR[ aLkin/&On%y c;U & uCKd!#L V @3gR]B x[AĀ[!C9YtBaƒT%zA(Ll|4l014)~C k%*00䓿$"T ,d$j:~-jlOmK8knafH1ģosH}qLhT*j0V U. bUdY# (ab .s& > '8v7y#ܫ T&-&tQ9'Q!ڈ!&AZw.]u)"Uh2[.vWR[~2DҨ"Z _ZK+ENϲ8ai bTz; D_*2@Cq,!_B:Ǧ%Xyb7y$H8A] bY"{"0(,3u  @NX5@weB~y`r JA ‘ %!ga#ߝ%.)efwGd}lUg#k^BGjlY=}t_[]nzVgDhQt] :T ag : > `Vs76!)#b=1=1]'z @ "4* ! ) jQFXGP?-E #qJ%NJ@L< )@N Z% "-s%dP,x$$X'W-v@e @Ε&( |;B,=+@+=pIc0<@Zs 0`c*o`g .]` PG9|˙`83pOّq :ۮB:wvܮmINeIn \ (<9<vzL+#DX"dNONTGŀj TYUVɴP6 IFt#iOcP X7vms|"tDA)^,|Q=7*~ڨŃ~'W1I<} j&A 9[~ Mgh@Z7mMnb.u.^бf`f$:ڊhKk02A@œ{UCC,U S#4 bVETbV) :H@tPh@7st5$tpA뭧Ū %2* ?`E6\`8#NÛӖ?kx@MWҒEor9^h'qtuvkuMB@"tC 3R7 p(ȋ+ʧ]{@44]|e\,D-e P"DE RL  @0[1N6`9@hfo`L_TuCi`@d@T:E\`b|MNkE~>8fnY"4 Bf8!E) 0"A"9tm 6VׄxN\, efk 0M ZíN` BpfMYD$Ti i)$Ad?!%)6U F<$qoQP!'a71SZ}Ea55ZAQJHF_y\wo#p'm9E]??`x L0rbcذ%j' W&[wQ+eC8tsC "^t,8i.tbO'"67 6%f!39jnE 1AK ZbV YB@' ApuowkޒP,1 0 RdxPFp܁E{w)?>0 TP4=R9 Q7`n;a$ it}qqLO8PlmE%Y* 4uxEbkʧBlOALQr^jD%Y$7CjUG} }//M0BE%64pQ8t-M^ՀU8\GA3 @: @`>e {R> R 3 0: g4>0**ppcZk%hA{#O @}jtp E1CcRY!$PYT $'!tXtIPLF 7h%rݨXhN'Y4// 4O%',KjW8  hR 6 0 d q; @Pa[p6c1۲Fn,^$ @a+D9Y'BkB 挐TBj"亼;Qy@!S!i Z0'9uc$wM !u\T."xE Yu"KUY0b, $qˍGK&5R#ƁHsײ]F>Q@ |ܞ<*I>p 2=!'^}7٢ށ#۝!{e$v$/A-w5s;{ׄmn""TS{(/D \ˌ:%}q0 &vph9F0 S9 E9&BJZ%Hp2Uoa)4nþsaZS;=Q2d#R*C  @ ,p@ #F2\ 2e 9cX",ESaJy N͟ rC(\ 1"EF*EQ D-Zz:;meˀ41&sS,U 2d)4Q̊DwgYfeIfܺ @G 8p cbA pz[p`vf@&HȬG U*`,ČD ,jv0y)cEJ@!|*Zj!N3)8 7;d ʂH&d*@!4[hb-aiepI8O*[dAɄJɥ A,b*%"C{4u)`\Á4-Rfk6S8k98Eq;eI) G6w"%pT&H#(BI TYM̺O!_R1.щC@>p!`ʪIm2`(#\yM+u+2*y+.؁.DoHT$1rɔVY%J8)G.Ll=zK<'şUn /27z0S )bV~ <p z=l?y37[4jC@Pl% f(.Y%xOJ 0"σ |0\!,!I´TDg*mݖg⤔ بI&F~fCeӏH}idޡAB]orQKP=G'=[<+d?̔{LSM@<|-O4!`0|5!Ìm64! T P oÐCVqd .I$!*ULH'$H ]YHM>:oJ sPw*^diK)RDJtx)YCΓ=찄!?:ѿ|`+K D>&btTo'CdO 3b+| C:3у)CF^#@ PKcn#Pjh8 Ȃa*%jBot `&>X(R T0y*ʂ;1e 8Sɞ%.DhCHŒ15$S-]H E46D2D9twd  mh"9ElF@h}S x#PäQ*VG|` j]ŔӁbrC@' Kh0S 'ET!> `曬 d4Q:rQ8-~@@awHJ ^Q P}:),Zp/<NTX^My2DNw #o)j)KDĴ.?A ?:>2|C!Xo; _m/F";A@n+:03r h SyцDD@bIД$P@md&rA&)P2d_*TV:E>rpդ$6S݆WD! ^0la `0'[YR `&WR5RIn!NBT&C(")jQ0CU9Ä֞:N |ϛAF(\Ҭ2/Qfʭ#bUs: P<?Zqoun!/42?ʱ L Av0K%,p'Uu bR"p.p#Dδ,L̙@5@H |'W+٪@lAW1-3`A]G0C`mCPĐBX oQiتE;~nLʆPTm!)RN6gD'}H[d8N6Ǟh,Q'B 89YsΑrh.V T್ނ#h (}}㎌'||CU#˜8/p!aH!'N(qsO~<>@Qc HW;FK01h+)xG&Uh#s3Ђ#$2  ٜDщp".a4+C4B" #tjBm9S\'b3B#>i`D~=(4sqczB؞(S>"Ҳrl).#ɒ93`25h:!N4x;(;Ĩ9kO`H30+4` N7V@jJ7Jc̱ ÖC{`'#oR)Iв8o2 7a<-p©@Cb*D.h@7#>~ -BAp?6eq-8)x D @\q  f it4/  X7a \b*Y88(N1N?EI5](+\M;,d68 wb`P"!h_#5c$yx,f4! p< #H9 F CP!J XC㐿y 'r JV0x:(>HF4rdCCȠ Px"<A"fq1;`PKu "Hoz`/YB jJZ,Ȃ#"ΩOB IkĔH> ~W6ؙK ȇ@J ϻbwp:̀<,_$5N*``莋io(*BYИ8"͟Kmafqt8Vp @a~0wVm8XRa7 q91 -7o!PJ(1 b$FR W!Xyjd 1+1|66KxCTԙN  O/IYchNe6pOX@lOVH lh`(t,@)zɷh ed-o[f ؃ ZI =o9)B#誑z8 RRX^Z! 1L Y &0Ӻ0Sm)aaQiwT  T ;5P ЇLZԢ9IJHЅY~,x67p5e# XZ6)tun?BPC*SU<4u/Ig%=$((Q@ӇXb!R5ѱ*b:3.B\ cC1H^XlR+!LDIy>@ m AuIb~@[19ґ3hB?A*Dܸ VJNyMH6O=3 `0O^5`8.9j?`lPJ]`tHq+U)c"gHiD]P 5wipkY  \(g qK paQ(3b'M=U#hÐS"ՒҦ- cfskȏKjHh䵄4+Tf;,M5iH< Y\[HޟI}daP x]_[a]"54~jȇaO=,G^04"`@0[QP,FKa` !(-h!L Vw*fA @&r4Ұ P7~M 7"wq d =/JR)!Q5. I@!p-!rB O<+ iSYO `MnB MD` 0pJ^;@^2p`bLJy4fTp qHcVXD?dBM6_ b4 uT]d>XZY PMEOp.P PN ,pQ9egX:X m#nIpM×z' apS=7u8(d(PZ i;H]QrQP#/kAb0fksSH`ø.pZUR5A<" v4djn])(vD$PW4s=j36##@D (ki* (OVhdx,9Z6[6JT(W<XBS`0Р& ΋-D711E>&@2;  X3 ռ'1 7g pBY>BtJfH%=!3N1yV'BѝpZ,! KxFnmS-a-@$2v oxް%TEz \CPSuR1Lbϐ$jU*#gL@ PLe@Mg: .v2LNpHV`P-j-h(%8!Mp{BH솹RHv;!ꉅ`Y@8^bX5֦,6x&?\P = ܷd/wY@L U37VA4= %)mKq6F!ZNf]\tq7(L -\AЈGL  8Slnn ^ cJu8A=Pc$OAKʾBwJSFAæԐYCI1,o!@"\5Hvs.1 P%^&X 42(tTC?%Q87=liLථ Q1m%yxwøTazXA;hQDqs@ NK =9E9@>`2@6ƨ!H.sİDxVb0T" 2>ezb,KpAss R@vl9-¶mmCAG; JPC<`d !|;X!/x n@OV D=^88TTiQЇHi_^H!P7)Dh1Aa.i0S(H ?L `( <? $B1y dqN.93)P) IO\0@ y|HÅۍA@|`N%N.8Hhd9\;<<].ϰ\BbN% %q q8A'(ĂDqTrx&dd|;~AԆ!B@=t>$-)Ln*0X51A*TAYxz$CXMBAýAJ9EEEZiC7!5} ler ?/PjOD1$0숏숰@M|. + L2xLFb6`C ZfLk4@/̃0§^rӱne9x|B5SL$& i nN' Zf0O,00O]*4;$ $XpXÈ L޶A-4\5 a.Dn/BO]XRT = x^H-Ad+( !K:_d\ @ Q,?PO@\B́숂$k7L"3mz~B7$&B"Qg"nhl\A90]1xCH'\ 6HiB]l,6<,dZm1Xz",Oڂ>-X-Ül !Cl4!@-#h lKHAǍ8(\-`Dg͎cFK؞@ zoEiDxfՁ҄-9<ÛgҬgI`.^Tm>PYs =CBAi-i=쓑IBЈ30DHgMDN TnGyr &2hZ"`B/B*bj+TXETЌ2e7UCtCH1  T톧ъ_ ޘ,-ӢA@rH^i+(~H)+uX ڷ)앒@LR\ 1ە<3;PiDN$NV DL@V+D@-')'AA QIxCx03XG3vxӕleRt ݉%@A<%ݕ@X]'CH'z()yAx@=lq5E$9$%?!l0|l@ C,;v\;/BF mUO@[8}siM<\?HV<;<k|3;x"̏A{H5,C1P 'Oؤe)8tdk#e*ԁȰuE9-%8C,G'8J?ӱc匣8R&"d"ÂM72$1^'+HI KK(\)q Dpn_ P|*\+ k4EbO-́LT9L,r@p,%N<ֳ @L0f#sA1c\54h'`` `Z]K.}c"٪~ !ĕ WΙ#['PÆ8g$Z" M2$]tѢՋ aD.>f90xyV \Y0P$VG)S " q 1upjZC1E=#Kc"٣oSC[0G>=4K2{w߿ HQqte*o.Y|0C3怎!0jj(&()7㤍ؘ$x\BDCla逐 $k(zjhv`ƞ䰤K,G6@fx^iD` PZe꥗P60:  c _ c9,蒆n`Eb2 E㏆TiȉWҙ@ ړN)O"8=š(Y( }\Q:o:RȮR}MVJ.^0PpM.hE0!W!c"(Œw 0"zh.zBx. #FCD IՍhb n*blKvd1 }R ʖ~gHRJYIdFI{&Tf!z1F:Zg&bDʑi7:aoVNQpFPN:C5HUytn.CAȶ@ <,(,j G UN(;d=*TG$ʡ!s"4ƿVHEddֹmRdSEDTטV02@*#h %8 cS(B8tijK4 ]chZJE֋1b4CF`z"8Tx$p=M7@2<y0Ѐ(\ h@ACEtcS  $`RS`Ed@ "O 8mQ 8 jAЅ%U [JIe h(꺳5 <@@ Hx!h$8Ju 6'q `^ 9Ct FHڠwՊ](6`%8v#}BpIDED ҇I$"yf 4M N!m#L$V"VB8"F9h TN  H iPSD$` (<"Z !϶FdBw k+ [l"" tA$d Yrp ]ȇ$;AHhUQC4Y1#!l|A AC5/ O` # ) 2Fp$-~kGa@\Z,bh<@WȏV87Xi#p0zF,S ml&xD.c7 D^spf³B4םKe ل,:;HH>@j `.,H:Y^r,EL˔P(1i !}SCr iha~]MxYxCzc2}U11c 2Tl `Ix70o.Z(h1R &SE+Ĵ'Y*x00x@*'-nC e1M:B Yb<񸆰 t)0BqJu>` YI QeMII@ A+ JEF1ac@Ѕ,a)' $!ɕ/ <9$Bl.i m$`93WhO5\ S 2>^PVa-,F]#`8ހހ"V`bO"N,.]8A ta*)Cȧf&BС\ n!!k"Kf\ ެn ,* `@@aHX!tp nn!$bj;c$\Fde!(@;l!*LQT" $ E"e`V(`(@ B$4D`~"dr+!!2$" I& "R Ytn-FDdXN" &D- 8,!О t)uaA}J@J..ZBJM,NpAP!n,\ьh L*EPڣ=N |e%t(@!u83;lp k P 6fNaHC5.b"*! FKf dPB,۬ 1㌁4$. #! $hNkړe!8A]>!!D|Aa &n`@AIJ!&ޠޠb ]A&grP䡢6 @ѠHa 戡(d#M ,Ajd;{ t`39s3cE a T! bڃPaʹJ k԰HFjFA(k \")ܠ#ѧ"^"S 8|o( ʡSJ)DH &c 8'Ah 6F S$l¸(P&$iSDae@aц0 fKb=ADmF:MtzJ(a 85D!`vjP"ꁧ@gcFGAe[d@ d`" )d:n)#C߬?"lJBpD bjg)! B"$B!|`R`cg$R~>;zA-#)8zgBrfh!Uw&ogJQ 88! "* d #*5 $rmSV n SAp:<2J`&c2D\` QF3-`aT@l$8`zHZLV6;v@cFAd.7c fPO}!t$B$-2%+Cx}?̍xvCR0&glUKV. 8!t^pF*$4%A88 rԫ!ަ\M2\;d52!G~`|Du#l!"b7T`V`QvB4!av#c &vmrFA$1a!b=0Za@EgD"oFj l GcBJ KN]( g|; zF| ,Ԩ!.;xnSϡBxRA&aY*!,!Dŭ NA kgAb~$7"$p!pm1Wdg#CUQ)XP:& 3 Kv "" XExx$`* 5.a%d#Gc4 `V"Bh=^itWlZI(y)&Xl -;I((By/A(jTy9QKGf!AI*nBHdy (mM( Nb?+}7^82TUYXKxƁ Πz sz!3Ё3-"gy:!׶S=B 80pH\\YB*>CZ.Χ9(.a!W'BLo(\,M2/ C"^fN *Z\b|Qp)hł$ Hb '%Ng?J//n^l!"N"$.*zAlƚ#CjA3 AoGxrO/c 0tп6@wр`!2b!ӑU 3rn`5{7ƂwzΠ hڐ.TdB{e)R)"X–PRLM^nN(fx*<;o*"OPNA ʂ9*N$$Nx\NSO )  g ;NZ]lU[d@z;A6dECU6S4]@CA8S4`31XSBNְNx%4֠ 0s@~5(@o$Ɯ:ʶ8Dȼ` \)"y b L6;e\B~+͢b; `?/g)eƷzk* !F"z#a"o{g|)xt`Q^C#C(i^ɀ ,r 8 6챴IV ? E8XȱǏ7x&ɓ*\D8JT"$hrXrݻja@@YzǑKIa@6XA3+#-&g-[f~pIqcsP瓑o1"Lru`ߌlR?n `~zsDTx8-#FrC]>u,},Q/(vb'iDxӵth @oZB7\`:C cpM$\ЅBpp ?# th} c@J,A1X`K EhFȲSJS bRT9EаEAuԲy,ӑw a VG ב]YXiwu\l|Sh^`Fc5wo|20ux3n} @)p 2H"}zc X$(`5l E2u0G{I\,9+XHr!tOE@u@0M%" .YZYr20 2ZX{>хH&f9D[$ǞUG+aיY37Feӵ"G+:Ȉj"0"0*ϜJf P@}Ћ{oqN[DYQ[eA1|_| +X +M @E#` ^$EPVwD{A)L> >#Q,( )h[@=]x)%J+ EԥN-@Hf"w < pz$`,X$/豄Dh"0"%† }"l~Q m Dzꦻg@G*x g8IEbsc`胁1"Gt>+̠a0#ZsM< dMTA&b PIb| ^I>t’~BrHLYX$kH@>(,Hwd 0& Pc>% H,o"A,R5!L!0$AIfv6aX ӬDYG!VE!ob+Hf&O1:D΄8bho mbssLH1Nקsn^s>8EOk9WS=孃+1DŒ lQcn( bб4ͮD& 2$ !.gB/@ZcK0 DSBadC`;?P N{h i h>vR5P19 YUWr,j "  Rf p lpz:6ڶPTnaW"P*uu',yG " p4A @ PcG|0 g,-_%!a|}o`B0 m@"C|Օ0t!Xf#*qYPq ,yXp|o \ ttko`--@2RUCi1;w )SK1u8]rF 'NY6({zE(-l0P:H 1 [W@ o9AzG6<46-PQXG7 d@ 9 gMh"TA!ͲMb`9Y`KiVqUPpCY*b+7#ebfv@Y= b90 D 2R08/X2 à p%3~y?TCUa/-?4iGC {kP_$f 9O` 8u7AaJu f U =p F}_ ``צ< хtt/:L%l~j P~ {K}a ޠ@ 7t: V T]pk)" 4712PY* 5+@ @i9 |/8PkP@ W%k$uMn@ O:t!n'vieABV3cC,(v`(gaTC0T6 83` _,htXW@59h"5`Kv0 q1 b,ӱtT vF &' CT g3 AWAGp}@,/,p1m $05gYeO0wUpS:":1tWU MWPf%B K%<7M20 2PVCUQK+;00/ &1aD5&r3 ?c@u20$s IHE-+HU +@" p\5P@0AEp``lr!h|dn3\3܋ ߀ubbBh2SÓ W.=Uc\FS X0 k! 02"U17q?j?8et@%!2 ( [<<!.#%H!)P'd P#0D`C@7u(, hJ71@$@d@:Ua@\Yp.oJaՀ `;DahD/;a P%i0a }Ph@<D@7]PqW3^ [@"p\ \ Y p9QDnQSOk!6˶! k`= c{8Nsɶ065="h+OeWf0OJPY+b 1նSJR.Gr^ A!w ]0 AaP`qH`ηKs 6|2ҪE&șSc3!98 Մ I|6cƼy"P8>{ -nɃO=8sE`syH #p*x-0`p )0/^v c 2%a1F̙5gf.y1DTgdsqpbm[} "*sq4ǁG@9*H /WGKa,VJ0M XRnM@*x 6D L,l4l‹g Rܩ" czBfE_zc+<؂,*K)%P@Fmx@aNyFbz1! @a !&wFIBF,(rB K:Q i ZOJ7(N` H2 XhιZhK> NCn[NCrfg7 !1nh[`dOXѯS&Y#0#906ƒ:"(0ƄN$ Eah )]a9FO@GTN}6Y|xf ,&QFAA*grb IAZiX`hhGM)]D3|Hl2 x~@wHMMyH"yfX9W0V9:MS *ȋ e fOpy#@&Y5Xu|@|0Y)*#`z`.8"9,"h N4P R1W\qtМ,$8(6F:F0aꘓe(cX0GdVScWhGf.0=Њ HER" ! H,< NÐ# Wc{5&\j @pT"A Ep843zE@ y@C$!Pp' x@?l%! `0j:B1,os0A3l @aV`JE*t> s+ePYV=ATX% < SR #vРGq/gyi7#Lf0;CaV"2ы0hcÛM?M @0OAb:tH8 X`88HMq( ZTHРx9@Mb(*4.8]eE,QDM>P2:Tn+!ZԊ#t'栦oA,A1 YHKW#Gc F-N =}XPIc0> $jxpK"B!K}+D m(1hA DiBA@Y@rSΜ W."^KL/ 6("0p JAGDq2:ZF3?`i=RxjSDq @ heA`d[X(2 m^0*XI'.@90\#,?a4F ]VeX/| GkԵ#G|\j`0Ԩ CDܹ{^hd\U:r>.D _bPrh0 ;. m_1:A.[EpO]ABb!)9B0K@z`@"v@|a=DAFos @g8Q@ tO+#=%+G0fɕy/Q%ɺD'G*&zklX@Y\doB |iNp8"13tE=JUT%5m PX 0bh}u 7xi‰GhwPsQP2 13:҂ kov 0 b 4 ?6 !Z /N 8 TN ʝ->a> ]XĐ$!/Xкa *`IG4#d_ H(D0W1 c|8;M ϛC R NPBS8g@:Wp Т vd꺒Ѓ x A<(p4$-oˁ ' `FȰsLi0 j(]Ɂ²`3[ہܰP(z o+o /PX*.X0(; h)!bP0$.mS1)p ؄PȔ >w2@,r눱Ѕ21Y#X<ŗi9% S9B0>%" S@l"B L>( ! .p'Q.h#hٖ   pQ  lF^@B+ }؄b;"XDj.h$V 0!D h@ww#eh0i01`xxĂ(l 6p q'p'23[hOPI 800,`舊)clqQ3 0`"_" $aN8sxgXoFXrRLH ҷyL@ )5D`HˌG+d,r+HsKȭ8>8f&ЊѪʇHVxH t/$m:h[(U$PϔlA811ȂQH PҴ 벮ShpvMb +[&޹Č89(:$iΙ)^`H`G$ R-o@p")A:qaP D X;k"cP6YPi0<[K)+BatY3I4igQ&&Y-Ѓ2S|/ DVc q-U,{[`:4=8=zQ13uS(]“&a*`D =E 퓃Y,}Xgȅ̀F NXAzsi44 `cdY9YO=7U#T̕KsnH)6i䉲K68%(6Ў@%m5_4Vۺ,B;9HM\B!#) &ႦpѴ\虞!Ը]h j0:(K ),È18 @L0؂rȁ*8,G̰:(*ZEM6U6t `18R lVXv@@a=Ui(EzUSՋ( 98kU)R zam *KHޙK8v&zA :X:\D&1 |d 5q %$|r*8jyXeyACIذ5@;@p@ ;B-08*O2Ͱ š!xn%ig)+֐(P+Rׇ:b:.3gsp?`?`vF0YP @@ah`e0-ٙw@UMKȂ0p, aVB(\(mY(@a-Y(dI(f,8Cpj8)88Y,`.`@;\x>Ab)Hwxæ}*b`]a(ha zH'P\}­q#00TB Vx1T8(1Ď:P9Hl)bWd`!vgj)M6(7҂pd8o2JѩTQhHpvhA`zČ%쇰VkK"b2pH %i΋0ҾsU.44S9بr"f+X IESo,cpH Th`r(g,RЂDh5E:t0\FX^ȇ@ jH+Q@y;bXX94 ZY(&xLoFZjȼ9pQ-lGNLjCM_M48"hӂI81x#`bj( =g!yq(!PHc"V[0e)ze@@ ?YŹY[VO:/ 0`+@R8&z'6 h FbpB˦,$j`e'vS @9p'):KtY.KzF(o;in\ p .2l!D{S PDž81܆>89s'8 ԤUt)@"]@- 9(p#P.?]"!^mX˗iUҜovĈ-9[M#`f9>;CLșy" Zч#x#lA0ƎՂRV][PԷW ӕr? sK!hX=\pBj#tk 8A0B ̓NC ^]`@+,t}O]$C ,-Ӏ B ! q !X BAF Y"p# pbY44#pLSLE W(t0%ͷP@<9x#-,RZ*p*a}QHLgJ,PM_)Bsb DhFXZdrVR}f4ap2 0 pB@0B$2@ oJOތ-^;@ }0}ϼqB`)ASl)Ng?Im//%Ru2_VUxY! #CkY\<6AP)'p <l )*R/aD @] CDD< ٧26?%s̑{a *N'.x! UqBy*}2 +;ꥯE*43L SQq]tW . +D$CRtJUJP(lhTdy2C0'p301D?uCUqmOΥ: E* Y×TD !CO|<a%@F_'ࡣM!32Z%pTy`_sBq tH,dxN:6܂!_6 KJ o@!03La {4nx.hq l$bHP@]^PrvNsKa]"D":Fj4$-'ꜭJRQ uP"A "?n` 0(*\HxP! A)A@XD. @Q`tXA(Bb\<:t I#ܰp,B}<NT-dfЁ!)BB u6!z BB n!Ђ-(@JN4zƣ,@sH[ΥE(e#|pB4! ZcVy$}E[Ɇ5խNᏌ 7x'SB`Ay0&T3C`A֐d[&$9 ،NWQFڃ p\](P4l(&eScm] _ 0P KABK! fЪf1= ЏJ@L|Q"nJҡ-Q`ल@N^HaQ["XFĐe$[Ņ ,qSrR 9|s o@ad'㱎5j+0tpŤt3K9X-:G I @P bqeTbs 0@DȀ:[# 8̃H1,&@@L% ) ,N5X|H`4@7OCN!(R=R` /2x`  !c,YPTg!U D?"mx:ZRV Vcl O^B*ф8k9)| C 0X(+2Ì 7DL?ZB0d"WL!T|1HV2jn:[uD"ޅ+8q!!RI=` 0,E1xͣFPZ. #_%B:ԁX`eQ$A*-3 K?@ BFC B(ӵ 0s92o8'  !NJ$6DCā!l tm ~XTQ.l:Ё|Qla Bg%&0ƋIU4S(L #Ǿڊ54s8@eFIODGa$,8A/F^2Cg|DL-?`dbCd3(h Zdf?8%(T!Q?.ėCq ‹oB9g8 |B5Iv@ B TL6/MADO7Ix DYB5*VvA"<EC AA d4FdrƑq#xIf:C;BC,C8TC5e+&(ḢPCY;b\@-]xOF= A/H4B #T0Ap̤ R@#.$B5 8((E18 优'\veL81A?zB96H@/v `yP9v*NhvAD@ TVTv4fH$bG7XA¹B*@B*_1XQAB\c61lh`CH(XH=: :)=.4qhI PACa@L̇@L|m A(Ԃ@f/](m%$C3X*t` uA9Sa'OH(4 S.] BBAzHo*b9ћO\5iIAO'@z P (.&TVB%4Ȗ"4,ĜTE U&B؆,Ą6Op(A 4PA/DEEyF!J2Pz̸DCBpE\@[ SBAd.Pg^@@ VPk.1EY(0 V (; |C,P?t.H - <$@(T~P 0O:hYlY:H5YVCYJ͡+Cˋ B M)V. )Cx aĢ 8܂$Ȧ ^q>TgC,(PvV<.-8,4 -D< ^U\,@@Q H+LBX"# ͉d? 3$GRZA l UC+MbXm^>qBg@<ا/+ž .hgw Vmv5VlK;$A VC$Y>C<00scasthCX.u<2ЃpvNH, 4BC9*HhC1:D>`TPxтɮ-dX45B ]My!@ 5 .v?I<+8vh3C80 * .|(2DaBjRF%C ımEC`B"3xkZ\qu* DZ^ B/ - 4G爏 T1CBCP *AC/VC k1hUN0ˀpADaLU|(C1P"ġSxԁA@C ,|*|PDX<0-@$HEHc ws|K-s Vp͋.($p`Ke?QVV aH06u!<vS0a-T3hU+4飲7!1,Q$}"#&hPMe dt #. : C U!KQjXRS9M!bĔvԳ^ aP; ) 9CSAᱥ>8a=de J".X -A( XNZ!b6jG~ ` 1 Yj!<J> N>ag (H,Hhq 4`/0 H#VJ an@$B@!i>T[$)bȷuSf zXFd{FS  [S$bŪa]0xQjOaBa|?x$!TG*BKZ0Te8\V \rD8 c(eZeĸL0/BÖML3Yꈫ$K Q%9X !D^ 3NRI$9Ē0!/@ꢋr>' $EaXT %dp6ת/tdHu@b7{k&І1/UfhC+-ШC&~j! 0﬜i@0I H6.Ar,K@͕XAx("]`ODbWJxp&el.8#)U,t|?q~04fAMHri6Qie]o+yJ! iy\ M^.@`y:FD0Km1N Xq $8# *$Aީ1 rQH $8*zLuØa #!l@" $=Qӭm@%\яo D+n@ȓ"t!X!@DL?@/x;X5UeA "' c 9d xPKAIPTt#; x($ETB),6XFaQ` Ht;k,KN&1@%CX!&$FI%PQIU( TȨli!9rA1b ,C'  ȩ-!h)Iΐ2~B)(-Ca8~TW!EXY? )@J<ƌihY 6 ?TeW``\iW7VDM0 {F K1G*P A 8pa!;$ %'%` 9XoFcp>B85L" g60 PhseH `3 cEC1WK Cr }by`\p2 Y#< zK?rḤO3`, 3!^XEVrj"KIn+6$e_a }*A 8[ְE,].(P(,\Ap(kdP#VG5 [;i8Z>2<7Ho!x$lQ ibCa4r%AШ*Id`` Ҙ(N3(ʬ.QBn7 ƂFdkuE+f!GArH`5YC>F.bmv"BaBqfg44!|I / @k/e}kGay+ɈAԐcqbL  &V (PF.!#`R:(ZEp>5-W֓,P##q~ñ(}@5NTjʈcEXv)]-h*%Q >G| V!P∠cB` b>*NB#N H ZZ EN&ZUd'8<(dM 8'\ŏ v@\: hTh┡ A8J-q%N%b!tI9rI/. @ UbN^zaHMvE#ERdCH,\\` :-^18*  *@22NSU2BMtAV s(%' =Ѐ(PS@=.^Ub\C3 %γhNA6(p8:!p! @(.`S`\8`B<vֶ‚.3<( b@p?rXRib΍iqb!%@A$<hh4a`9auKamO?%Ow!@@Ф- 8@ѥ})?TDFNא+$`GhA0 ˌ!%N`$#!.ܖxV">€B$ (G@0Qj5<}ߤA.h,oa{$T"c ,¾Vbz1W'/4c=>{0`1;xĠ,*:~Ƣ.;KdaL\a܋e8fcRA-ʧ!L -E&R\sb`&1p!H֠(V̢ԎD8!RU0a &2 (*_)*RP&ň NgpI r ؕiI()/L c"(N_\/8 +.!R,L9\ka@Y.W‴BV`` .+a@`XmNNBdx R a2g]w*~{y%)O=. B&E(> pD FaҼaʁX(A3VaPD%PuLœB QVA**"ZаkE z &fH/z @ i0fzeOXq caad/*A-sDhAgL/o-%b\@!7a,$F_bþEta\a 5.BX+憬B93Z$a-t7zA!Mc %) s>(*ʊpρnI`#0 E.%n" N!"F9d <0a: cXrol`h`"*& E,YI_ kGà96cd2T(< mGBYZ V l/U8[+P KCo8d [a=a^ky#\uz2 PUm"PIr,)\I`'{ sB5N o>K]mfPD,}4҄AoǏm8̝3T^m2vod&>i u zٲJ @cAr-!P\I*b.9SPDbvAl0 TWAAeXmqPxb11ih.$} <3'ЄP&p4r9C 99FTuDVegCdTU\)P!0Œ1 *7[f!>p*B"# "o!P`.\I2*.[N-8M*s6/ -tB`mcԢM  a8cb@5(7A dGRR Kp#difVנ@P0,,FKP2B* *+x4 HnCJ B@jh̥:%$" WmqAܨɋ;J!3yYz Py0- "6(T`R9vb0SB]@I R"7`Gx!nKnO"3x )a2 P5-{g0NO Fgfr,J)bgLO+E01hKyN$v y.!l+ pԱ95#DFEҍ9A@:@\F4 5HPob9OXbt2x6q  ̬9u,((D'hU~7#0,HFV2 J+I>)+mV @-QθB r@R&TF.z k.@& -^ ze;6sѥ0NPhCl!*:ђR[^8-= +b e ?-†p8 ,Gz#bݝzm,̬v5#s1"~NTyVF}Y!#dz J&aUThQz0ccHэ#x&1` '0R>pNk`0ž[ *:"]g5X ar's*WpC/7,sBBa`V%2` qUy'-XAvWZQtƠ0` 9 b URuzp_g%'`0<3܂-2OP"uqMN-F%I@YgW``,@& . `f {2A %c[R#K P  %u"Σg@`J`PSfq pLdCSf')1@ b r` 4TG1q5 FW.+e 4! Seq@ܲ2wʘWE&!@QDo"DqcQ$*- {!%r0 k@k0de$hZSR +PxE[< } C"&\ ,?!s5"i 72A ^pyq5hBc)icEH[*$,RswX VHR|oG ~yw 3<WS7`B 6σ+gtp0))m5 F @,bP4F a{ʧ*JarTff C!@( g %6e Y$@A@0K"=C27R 2l +Xg +U Vw"V --. [Hһqg0@tP>BoYu%mp't6P9T-Q!@nGF-0ZP *?` 03Rc,T? S)6a90$!~N%Y9+:)T@i1##333T} ݄sAS&Pu2,@Mp `$") ?37Y,ǚ!r Th,13"rRUqA I($pf,ᅱw+U+?0*fIa]{@z *㬲@}pMI w){ p6UA?poY(\t&0 !Ƞ P8f0*p!T2BmaAOf. lr&2Tt0@4%b=k{"'6*!DPD zJ?}YRP[Rsu7ܵFa] +Rp!! =I#v P [+gvA?"4``0U7`' m(٣pHrxn#)00j) rB E)4k!A`8** 47З#F2 3 @@3#@J(5 Er胦TkC$\H@-Y&0_t $O 'Zy*U+E TF̱Տ` @!]Nmg2" oQPҒT4"6&ȕ{" C[ 0K& J5<hp{m J]jW ˽Y=9Wp[yOK$- %A,gɉBLy+l( @U,:H*ЙNp$B[.Bх0rj (欁0b&6VIbrK>I aaD Frt)Z2 la Į`xL=8͒R`W(I[\Y(tI>ɂ.{ L3gӗĮ1,䒴(x% 䘠B" B8臃>0:TD! g*ƃloPs@[\2 (~C(de,֘sH B)F#PUȾc0 QFFV K1FKd1{(4#GΰTVzL cƲeMs)@upV&%%B2g(7obF!M0% ި'NX" Wڨ 23 \'<=H.2[}u G[I$ 1EU KKuAqd)—*Z%PhG! q-L$qYN~& M}m,, Mz#`[/ecyL "`@`{_DK6;6@Q20(ޮxk1> g71js Ѩ#E˰.DX aCl77IxLk3HB% ]І)GҔIaz#!MyC"*[B|07. rWW lJcG bh A* a!GYdO&` klF eJar n.v7u ? )Ev=E"@qgpt%3xVn{.`ۘ!& dL߮7s8x,)\!RڗK!$mx7iCp4ɨ =z؆,0a;S2,UPH4<\H1rI:d-KA-J'6PLw0iߖ{<{2w.=@ݖ=na0ɐ`1BH@ q#9 E[S5pY9iz8V#rI* Z4xN#1 kA*z^ϩ xT(H Bد ׃0B`&BcIpZ@졀rr 8[) rSc{Tڜ/xxXx{aaX=H^WأpWo؆8z G4`H; I: KҌ I hA%SȂR؋=09h#=~L).W؈Ig6S5ic483KcX z+IB%ŀ<2U ن:ň.(.@n[FSPc@©@;,=ё|hMĈCVW)qH ܺ XJ1 蠻$YLOB yK_B.YbXo(ǐ'1I\`Hc4ր V; BLh~` J8@4ZH70`8I Y(+O=mV"%Jj ŊX0 P650E—ą0Xmc! ,JH*\8_!10Ë3bKGNS bjX\C 3} fLZ& Akƚ5,KKJ G d:fJT jF-3-# 0uVIX+nBnjKͶm"' \li`@2L@Vt0As=eą *`S@ !D;W뗠[|&g]8_`t {@{؇P lQ-fP >sq3>f(|pH(4xSh7M ,Bt`@@"0U @O)3Lnem`)昧Qlte@a@#\<@*SL\'W/5!\@j2)}pM DiviiF@, ~jꩆ5Lm$Gs)22MР4 .,l!HWtAвUSS fsqPEO# +BoȪ#ˆ+t$IZW#RBPfpVlm%\A e4@s $1b;: Mu.i?(r֟2 ?G PGF|3XBrIk0|R3 Nx40@1hsy#L{ fsP@NX%NaJA"-\@"Qs#@У00$mq@x#qa= r;%4P"2~Х*smgk _WsP} u:-$]"rl~LŒ*rvn r'FN_`40Њb#ooxr; R 6)`lvSp+_ I:bώ; "1j@ vYx.Уܯ nA11$."] . "@6!nwXVAxX`8*(XA>h[En%f *Th,ى8AFԤyr !t+FÔްrl@PPKDeLaGLR`y2@ AvPhx hA`Cp @ =C/1C tB'Z3Hd[A( 0B`(TQ{* e @:mB0%U\ 1QoHc4R&nK`'"o,Opߩ.el6"PZ' /Io slS ( ;.?.w C0O"Hx]i3bp  X``CHʜl` P` DD,q3b^q5k\(TEEXY[a9b=#y78/J?eC!;+? G0 {Ty"6%{$8rR: =q͡6lPyP6s;#  [d5ZTJ3V l& ҉y0 )OW$`I $啉`?! jMP'X7{zψ`,p lpе5{AuqW&@k NN Za,>*iihZ[ cfcj;CBbfB0p\vv`R뵓p T(Ie*Pʼ qrB%] {q¥T7A ˱ AŬX; n[ u P0 # VasPP7` z334HWWКa+3~ư) E6lPj o|0 9lvzCZ\7 \ I( ;N44e05a P Ԁ O"` o:KYyVmڅnz:`^ &dP]0 xtɥ:@1(, K7]`}A6' : U dyæp (gWCu'Fq ` WP`+aapo>$?NUfU| wл ` YG F` i @.B0cͶ-g)!.BP 9r-)XAq a4< pl 5e/S{X; )pt4!y;s L4 ,Ȣ|I}Fb >qZ@ݵ0`rʊg}:r#}: ܈m$MgJ ww;j⏺ hL #" 93=>53/$Q̡ssKzBf&'0rsU F #]=F` @@ ]:XF^JO¥L,nL7/d 064}@@e */4k MS:4@~X10 'PvK^*G0`PP50== &f| |@@ 9^[:B^ \Y %2G B^=01r@q u` a+7A

NmK 8 yS 7sWV y K; }DZ$( G0Ygr}_7A87T tAL PA xΣ6\ @ۥKrZͧV![}g KG&!ucQI.eSJUY6mn$4cDKoh#(Mb9z@m@;j> Hh%0IYS CȡUN]d\#` &L9# ohM X(rR^(IHA'\8'*8v8 , cC5 J7^Kf_|0Kk8%">X-R +ZơI&I(ƄBH 7X3mTb`O. 8Lg] \9d!kx6 ,Yh1¦ь@qz#8c7| iVrbZdC[olⱁty2R2X:Ud-r w]^x䇗ܑTJZRS-8=#P8voLz cd4dI P+X6%CSi+O:󱁈<Yi\$`O$ "PjӋU `G|^Pf =@CP'Y+kXc'P1)# 5//KƂ, RE=A,7Ȃ1h}L+YKL)0[$MƲ S(Cǵǟa䒣@25HIŅFK`b-MSt(Hh P )؁ 95]+*Lcj%F@!7-QFMF:A.z-y 7GX7t;xihoc]C3)cY  @s^PKz>qR H90lG&  QbFx"u$r0 ӎK)A x[qFxq0C!?|Z¶{<&0xeNԊ9ܰBi{z< } B_(5Q[1H?uTF ,̇Gy1 MC @T JR\f)'4CY@Qn?XS=v8@ lթE6Nn؊+v:2Dabo|,u y5@yqIH"< ĄI<Ҹ4oܹqLb*V1$i L&H1g]lL'<\}" a.5p'V/}q1Ǻ-Fc>&_ p]0xl(븇2+B[# miOO ix=hcm,/J_Xo@ ]11LKA{D=J+uR Hѯ H} %sX76 hruX  y K JPxA'K2! Il./ ="GԪV>wЁA:&'RIh\ Gq "v of` w^9VÒ希9 {?x@{(PH1%HHA3l@d[`,cÙ# H3 YO0=@bI1J8{豪!4g4HIbXRZ41 :0K*#*6`!a8L'7@{Q=<ēmzg&)eZppȍ {CɕD7#>(00bO YL=BFѯ3HY *5&\(+~pVAZ`.p 9* :*\@0X( uz'C8 7JC8PF,Ba-j L0y8qxE98Ƙ҉šVZ`4 bseXIؔG<1%2-pgř#">3`@4M=Op)(~>KFѭDZZt߀) LO slK؁-:,#\9ȡ0X@Vp69;0D+3eb P(F+m  XPTp;DZZ +P8@3N"¿Z sX@ ނ8:gCk`#[$T\;`LtM8)BUЬ(N10Lc|m Q=P$G<`9/c8 Y() ŁöIHзR"LEx:ezA  Ld[kϛ[HtňX)ʡ b@!9P(BSpMaŧS0* ڪ1 8t!cA棕0 A 2 *3p"Aj"'y,,0.oӷHؚ w@FK96F<.`Yr nPC䓄XJn;U]\xCvKC F} ;X3 Q(W8:bpb%(<~x"mEIXX㺉K KXKZ-[ d{X0/Hh:Z7oL?|!*IADؖ%X,ڬ(j8NᐘVf*"D(` 9ЃB/Yң`Qcӭ'QU{R3#HF$/-i4 i3{\0 !Yq.p?]p P++Q78AŶ%a`{BNYX-T>0„"ZZݻ e$M#30 %\87`(Ԛ!%0 i\Kpҟ:b?1VREa#  P3k=p$A]HY $&@1Z\H X{e+j[^%UJ-OyV-8Xɂ[&\P$.CB -$إ2.Ԋ4``#ZAKo~Hz[zX@ ("}`"E`*.K 0cE`Q7B+-E[lYj_oC$4X;0/` f..qi\@/a WСZ +s\^ɉ\@'r9Qxw l,jzq2NrAH[IJ>+ĉlt0i\\B ՊaXsH-%2%"ܸqH|@SDPP1l`i~3L(H3j%R%Г:2jHCMn@xg( @fעaXD@}> ][Cj3,Ecc NlB ,z0MN]@gyDA\,)-uriopprja@:0Pq4 N{ؔ0EV[D]0 Xbp(4 r fGzQWaK@ڒ.GK7X II cxR4=_? JdpB2  iwIG?!pqH횀Ȱ>xtH qK'k ,>%]>,6FgFf%( PA(vi"㒄H-[(H^bꍾUfބ8Zy8 ~ sElE:?@-h0F8XlBX"i&Ӄcxc.)@dQdG71>Wҥ! T}n(kHnPi㈤** ^4),'za)[&Fk%(3X-и`f9؃}1a1OP5X*Ÿq@__@'@a gu0'Rh"ƌ7rD,:,iR$%6Z¥E?A4$B1EYQ x^"]UArE7ULV EoAA5AՊ]8YaH.`5V~hDH 5QZ@*!PiwV81"[#&`,e+`A~bcHH|Yı0, Ɂ`WK{Rb@#HL"smḪ@! #0lq;CXۆ t:@C)&1,@BRF+Q;pYZVsh IiT1.` &pl2< n\"##-aVziruҰX-٫a<݁4L71fNX+bC*aS/ nH,Ab;(52_Uԭ!L XkT>C%,C175iI_3LDP0]y_&ٗD"F%-7Z * ֐xeƭ~kCB K յ5#  GR+ 5vPFAϻ!w~(SěEaTֽ1:ސL7Q1RD)0yJR&׊(e\A<Ɖ^,dUnp"QDS #$f(\`W ZaGV bX4lPWSHP=6- .Eֲmcמ8 KrΫ=bX(ǦbJ+ HUʃLL섭5MPg`AL[A}BB}Mk9 х5ȷP#uP8K~lB}QLpme0E`F+,F~pB$DvD5PD;ߣl;'x!GxWVUYQyZE3_AO8UQDU!G ,P0"bS 6<_DFML-®`TTP]LH|d >3$:HڈgԼ6A_-E $ɠ vBh6Ta|lA  Ip5݀DAE1BE< 0"GTp *SE? $S3|FWtň_A<6P=gk@YO:ń RC Tvق9@%B1x$@L,S"*NS H*#UD7N5쌦l5>Z:G;UbĂtp9mBǪ? Q5Scdm tDdD3<@Dȣ];YDS>S0'BCĀ0BD;F\@B@#ETM,5h/,U/ P`àTBZiA|cv054ipE DH4}(%:]~FV `yJ=U%OaJ\h53R PTfB(Q#Ap0Ax!T@4@ \aVNH9˾c}F 1ǜe-'PȝHnfgC'E[ d1 C2hS̃ dY<D/fOVL/&ERXNB|E}F1QMZQ jj AXE0kDp@$+v0 #]dI"W O )f޳)`KFB]b tOfDĈ!!.-H-cp@)|^]SLtݭt1C%[j.8̈TőL,hV2E F#0\u.5}rhnBj5iBZ9ŴUM?L^bWea"e"^C X,EdW5fG>3 1B;6FAl[5kfVM1Cfb/ [EL02أ??.p^D f5 2&:D 1`IML@d԰σ`E]NdQ O9˥ >=83Q8!@h`ABw@Wr0 (lCd"XMwUjfy&H U UAW'm+EXS=YQd ځ!C@10&DǷ8_0ق`f[!_cLpL%6ŭ.xf?5gS*/#  L Tp @C6A0 58AvA>4ě, j'}@(@%?|Rp,A5~#vԚe_%2'A,?Ə;hHf[OO\%0V;7Q]CEr;Jcuo`U݁ 3GՅF.#=kʟPAh@Ё,>hݣ+D0 c'@L Fj%j% i%Yr9\G\@YmxEAyв?-.lQۍsءL zc-#g׮fsnz8Q׉X(lSMҴpc^M1sjIb,h\cf`ٳi׶ ֦*drqxpĥA8`pQe \ʁ JD`g(1nH|KŶfc vD Iؒ,O蜬x J\P -r˰{ʮ+"(0C k8xôBS%at@b!mJ)TV0mf D4ĉ2\SsP$c \ S?( "S#rC%J(FbxBmJR0GphĊpêB(bjǡȂTB*سj F%B<'F`GN-r%V'*Er85`JpD~od )I lp!~ F~* ;B:aȠtG#Ўbʃԉpу[QRԬ8IZbt8>x|+:H0u. =֡AR"ʐH>$‚3G(BLJD#$! RX(=%NG"nrA$$A4sJzH̦FeRVI{(y e:gFj+Pq#4FD-}E,DްYK`T~ɌO*F(%AU%Fɺh%p?C)q)Sc"<8 xIWlM$ss0 )CnUPBDe<BPH$om|VP0-;t#D\H=upi*yz.DT<@wYGE.?\&jV UDR}D|Q2mC(BVv lErX恮d!vCJRZ:PUS018` ,aK3A$ E.+pt_`q@0b ap;o 'L@wvu@iSQeBǜcȏXDyʉzl/bKGaUҲPtJ^0EYB"r0%_ /!|U-Rzx gG9.&@n`)* &Ra5la DjaU`fJkԲ= `PF-%z/lR$H' MwV4% .U_y2l:e}{Q>VX-uˈR "fF3UG90aCn +˄0z8G",Th@P}+* ]V=x0!679O, nb"Z UL*oJD!ˆ Y. 0#\I?K%)P47.ȦK}H@qġrlշWG∑J"5yo O,WL-lҎ0<1N`Cr 9cK@A(;0Jd5H`[cZ5Q&x`ܹl/ ~"f ]~0A] A-la,S)n%?j&t-nFB=| \YMn0r"Bex0DKP'@)Dv"'0*I^tBZ&A¨!,N@;("p!o ؠD !Z8 NAv$"M(Dr@hNL@Ơr.'d 3"(i (\`Vabfc)OJC%%6'"fd$*1J!hhh,1;)xK(S"`8B 0&B!p̼-N>R `"#o R)bRNa?Q XJ$(B51 85$6@tD+8`~ Ťx NA :w(L!N˱ )%,K"@DǰAHY|&BԳ #$S);S6x V:g$$%9aT(i$%B$tN4NK9EN &6C;P ;`1pl/,/F#C&uPi>d'P>5/!BB%"%QP@&Bjp^:"DD@8=(R@|htA T N<8L#(KIzx&+f$dH ! fFx 4Bb(,ɼbKlOM4aivhgȊBҊ8aaBSt@{JzaȶѨa:H"" J Jfc J4Wg 66hgo(dѡ@'5@锎Bⱜ dUbXS(iڧi3-~,FVƥYQRa3+y@=8ܧ\GTČXrEkUP%&Rw$'\W)jřmP08:Dh YV$ń!~ƙÔjS {e`z F ~@Ѐ g"ոDh'9V%b{#$RتXmïTuc'+R&e-EB+$B#ȃ_񌧳<+j=pr> @.#*[WFʑ䨵 Uko)GG)j=kyYHW)X6F(@| `֬Aypd@!  r/ [v`Ԏ , Jh`6|Q,& nWgb+vNtm$Kƀjv@FZVf/)Ahl#dB<-"@(BقG*|KYbݮi{"g(ȻȒ["J@?u Z\iY AcnV"J`y۞0z'`%  \8f@@@ z|)|I<@4ut&b%G+dB|X$~bx?4~Fj"1B?ȴr&wZ(+ck-PUC\@h`ل$1С@̧+fZϚf}NT G""r35p98u|AD v% tfCN%bLc8t6J?<n &8,s[_pFcgd}Bӳ6o""rYl$-HK~Ǻ= AۻE{!rG`"^!V`"Aw(@ af:̮_ZKSƩQ^Q(?8q"NI]=b( W=@:;g?,0n`y8 mŽ"I%8 8|CPZpѰ!1P] Βږ,iι`4؍b%;<$ELKi\رcTNA傌!*ƊB|y8M M9DEV7NV [x >X""JWЇ N 4KLϭY Wqp­Ik=zp9,CNDT>9IԚD q;T~!ws&O-@tȃ/a:E wKt &i6Q607Lo4NπWQ)G*@STRIU4WM# 13V[pV!F=($XQ2>0l ]atbW%(@.0C>`Ds2ZujT $ 7?C`%RTr`"Z1qA1O@^,sjr酯r䐃6=k9}fG`wCE4P@J)XXLPws3 #?U9%T]-`26ਣDf@,E*sh,p$X{2I "@J# Cq9+ @&x2 ha:r8ɥ o]B%jL(p3ډT-6C9$*w<,ACW[qހ`K @ =){.BTED5RI<R9O@~-Sh108ch"C{|<0c2ʹ8DU@".@ AN3(!a i 㜣!7hE+ޠ8$7)ExXąg5Ρ 'FDŽX\U0"DS0= @AoKNBG9iq$(bqE oIhR:!#v!2%*MhdX Q.qiHGr$2ps9>)dr @Y* T!J/EDT?Ebp`.DIIUwJ!bLG;zՎ10"b(4Pt 7DċpҫDӮ&Si T6hUhͫ^E 9` &WNNDKBw< C(ȑZzM"C?q Ue/q8ERYS U.M#d 0ޕq d6pLΥ}RU{S A/r Np8b >$pu?J*d:?jR8Op9CP T(Ҵi# ?-nL.*U&U,'Me+Ŋ;/)DS8Aܖ$9&8|;`0 *<6*V9E9dЅRVK(CHQ[ ӏLɜ4wdo{SgR>#a!J8 0Pp[0€`LDЮ᪇6. HSyUr!t08qh=ÄƐo tȢK1)k.y@P$ZBK)TWMb6,POqk0-\HE'(DO}x@.`Ƴr( $Z;!B}&y" Y (B,O0/]mj#n?8 .rruo=a?6qqŁ@spE߮HъHg?$X0;_("|H:d@Cj !61/}:~*D WvH@a@x nqhNpZ]Ā @rVmvk,9bu!mewwD 2[!6u*);qEϲ:iaQb;cp6`%6-|xA+1E-zPNEp"RqW 5Q'v < auE|(|gq650R|R8D%hq WtpJ 'CsQ2I~) 3@ @k8"uBKJ'0 Ð`0H7u&&c!c~"~;OR0OFgzWl~ҌvEw HTnvX&u`GL,Ysȁaaܱ' Q)@ bpSqNqj5R 4f $#'` cHbi~6(szb K1^%*D@:@5R Ր,2 0X`;&)&m[ Q7 aze8P @+9Z؍*)[p3v**Ĥ0V-XE^Cywb,!B<@ZqL5AW'c`7h8p pG PqVVIc>Td!`ևnQ10G2hA~8#2@89$VAKJpj}A=9Q@uCH#nވdXulCmXa80!cb[wIQbDd6ĠvxX12y.T1&!JHs dа<2PWS I+ CՇd e 3 8"Ð%'Ps&c2y|"qjJjErM}C]` Z@*P 1X>ءGS Jі(0 i`N*UZya8BZ*~bILPbx!F}2yRC dnH&EX b 242a$a*2 CCP* Cqy Uw#a[:Tۥ #fqhdp~IV0Јq2] ^*k D EHP Bp3rZ``~'tEChWaBڞ$:O Z#{q L>EPhXD8y+rc$5m*Zm'Dp6LH Ny a;pG4O~Ҵp(*uk'` `#0 HCE]r /QҜj ΙJI_9$ $ Y 0 0#AT'Q, c&Dڑ 2 'f7CD`v)wH1ь;_Wbi'P0!|S6r)5mlS@ DtM]YAKHH gkp"pS` )>]d a c0WG2\ H{ %K0^* ;afJC5FL'S`,}#{'AQ ` W{C3h,5a@!FLSBv*%"*zad~aYvC䣿beݥZ10K2`b005KNMg FQcRC@4 4X a[ýt2;1wXTj"@m%WQyѢ(NN)Ya3mc2AlSEtĬ[L[7iVC1q6X }` }E"@U-WI@Ռ]^@[3a`9X K/HFHc L~5HD@A .uff&Oxa>1vfQJc_ pw& ~cXWA63q)`bA0v ":h6?gy;ǖW8P qyLD,a݅aA% 熡iPEW[h 名n VEID=ZЄZVPA = .p~kdu@m˕6e 'pi piлvU6IRgԨ5 M6k#kQ\qk찚 smzOF6 TD C 93OEOF5P ^$gP 8 M@ M|c^; x Wl|6AkE]NNcucJ!MfZȵ 9j) c TbT] ?;_]ɫNbQ`<`T @b 4h0pwQ#vЦ f#@ʃ' H5; T̓ph9n<lpTUV]rZW^Á gȂ#`Rv !T Q``- A5sΚZВv^!@f0Qk& `ӌ}mØڹ fیJ8Xp7\g1,plAHR>hP@ab.v3 nq4F#[b d2ŀEZ2`iɧ')1GyDܤH$8ɢ%p䝃zYrJZj%"atB2 EP@<-DH?; :;^:4t%j&ۖ;0L¶<०P(oCT@# &0\0GmΙ"K)"H#K<6$hHii[@QPӌ 2?vji9p gXjHut6]M ~&H"UX|D0[1`jN 2L02=h8D!E? chijbO5ٜBs 8K8hhV'c ~H0@r8!w,Y@Q);辖滠"n1䢎< iI7$lјzL-k+|:9ȃFJCф1Yx D@D,#MF|P-e9kR !̤ʠ t_d`R ;z mL% A :Z NlZ2!F$u?"T@+r^B:NH 8c n>AZ2˱A܂hc  AQ5NZz+/HBKF!8 dEP wlyTH0 }# 3F?vYI<$|`e Y@ l.Z"K O:$N|ȗJA,B0 2isk99 ؈5 J ['$SD H_KA;s8% \cHP9Xr/Mq@"A@&4#qGŐ(ËvN$(I:uNbzjH qLlTG%@$AxΛ4$y#2L&uX)Q:  XKv ;QI<\%tVi {שSc< Q|+B*&bq)Ui0(sL`89"(aBP P no08 ]$:@7eD/Uihr!:2 !F+O*C5*@4xD"^%j7 Q9 :=(ҪAD`"UB£cn9E.#  tAv?CSh LO /dV"Se!Te!^jB.ş WRC 3S2 DMcB@!Q0U:i @sah% *b>E+@Z!(YrQe0uA;!./@-dA.t u!0 a% MR<%:o@R*)\1bB 2T ah)8ֻJ88nT`!:>H:P+e@Ca l5An *͗aBN)'rJkIDЁ@24C@d1QF X y #XU@3npsDX d)B !=U/ %J! S6T7= EL0?Y @<79a O%: 0˃8J $ ox`KHadD =1=h R)XIP F0À0VҒB'ބ'*bh`6cV0O-x$.2xDN8,bHq l, ) ̰ga`h/tB K#A<PM0 ]=ѻO؁# V&8֣VJʝ< *0Vx=T3|>@͖7iD9mB>H0sT%؂bxMX^|@Qp(-9xWxa@7XK7K\U:cPM1aR-X!`[A@TʈѨ/h XP@BR֌8}$K ţ#=#`JЛ4?RIB6($j }`K#} <֖6 Z ,.p .8h (0#Vnx踚Pڂcښeu2FHTуp@bD (gaAp [V30<~xRg77(O9& \0Ѐ`R>I=YSeAԲ"ͩ( 3 Q`D`- ip;RL-܃#kۚBha^= 5%n nу`Z&5MS:eK`Icա͡q-8C0cx= ^:870csp 8$G/P\$0Y؋"(q`PZ 2G, %b@}UH "XiPژyS"t - Z%ރЁm jȩPx9[ЇK QIUi t0hv; t !ȒC xx7|Kx▀],,Ɉ1(0zD-0c-TС'x eĆZưZ0iɸ؃oIp%]->xhOOgbHQl:EH{+LL!VihCOèDݜ\,[F2E BH98`JjOMBm6c+7= X/(` @-h*>T`,~Wlg0W*+>Xmp_1_+dpUqVhUJ@U0 f:XwU>(]HJqhx8:Px%P(q @hV` >-IjN81BH9 䉟X /P8ti(O```J't6nгۧ=:`uc™$كunpJ6|ʁh]-ͯbǃ׃pQlhEmΫу_Q9V(W"#=ҶR$%ƈ9;UPxp 9WgHoHR3nN%0oF ^10Sꌂ䄲aF>YN bIA o 84ȩ_ jt DZ`Z0k \aaj=pp:]7O0,'bnq WwcH5gc垚ᚰ:8C0FgGW4WmtO8'nV8Zxbhrl V@%e= Xr f8A8^d^)0Ho^x@ eqV>yK3|d(Z (.M4]24?kVؼ_<3=g3iE0*<+ ’pG 3*n%:phHr'U E%@Ph: y_@bb$}^l@8!bbM>Sxr0q.;GWve(/U{+JS9(` #]etpk $ X DԎXZ; Gi۶4H1=Pp'Ϟ>2tF"Hf kְZ/{ ̡p yS,:B(ϴhѡlbgy"+O&D@+Fe§ʍa?x'/o.D qK@1;.h8 q. f0%7y74h$!57킪!*U }=$ !CP;ȡ@r5ZS GI@ dK ! N U A3&<x@M= bSZ}$ d E֑>Q@*} JX'sY CcH)!&C\4V|c@|}s@ D ?A`_7bv,Ѩ? #2a11"*Q '' ~? !4 a)u@P 2d}Ѕ @P$ѯbq 4_Q)=( N}qDͯpȐ54;BtСK9ƃMQ(R OC)gTPG@<p+,TeXQa`mcbKZ2 x6b\?.o@P@Sp rFc. ɩq9 pdz0M"^,P-Yx$A b,UK \ Yl;2hsиE!LQ- ~b``R؁>򠟰|,aA% K1D"biIHdq_ j A@хaC ^EBDY3Ѭ'0[q!T CІm<$ÒRcQ)H|7YE0m CZҋ' o(Ǝ4mjG nOT9Dyo_la!)2eZ 2Lqp1\ ED!.Ϲ`)@ThԂD#K%~0`o hUJy p4( rEB3,,bC_J0`  L5dO дƴ}R5 89S*!ӱ'K C+Zћ0d^zz+R]b2 jÚx mD琄R05vxPGE pP)CHʇNN];QErn'@ TW@%=x1yOʓga`Ȃf $r4hB@"~xhVV9NF  JzeLucD0L-bЪekT+#a дA#OjyL Ue-SdT z:09XCP!E 1ypOv<ȴI.5)}"|0 %$,oh%`c/TKXo|MrZa.!@@ ]Apρ@n0Fh, bW S@ڼۆ*&Q%ءvDuDobF9 5HfA |@IłHU@>tA+܃2HAH_4xZT8`QT2#piea^HY"(  @BPC=,8Ȁ4AH;;-F78_R[OhtEOIU0c>F8h D.f;Ƅ<>\ qFCC@X9%T 21B"ڌ -݀?p'* @ T*x/pAK~tڱl'CC8~<) ,JB C[J4K{P@Y -DVQVЃ)0429Z+[vP. 1|Dh<%L@܊!N艞hY-aB4T7\ ŝh \m &7|)1dG/aMh 2$ 1 9y9{C9 .-Cnd( tC Cއ<8} )d@ĂVѰB΁͚.rJlΗM yN8}=Xh}>8f dXB1$)֘C+ @mQM:DP6]0dJӴX4FHD :IH>"(*@T*CɁxC/4줬2@9D@C q|@):an?) 9A"*2薮p.CO/;,* %}Ji `CȞ+08 l}KlϻKV",,,Y="<T)1hCD)`Ͱώel+\P [@A AH-֝Dh`́֨%hBCtY\: D$ &n̍k!=?.$10q閃>B}BJB+x&@`Oʾ006t?h[ʀ "Y/8qC%]l5ef%D>% tІAhJa¦nڷ}fP+7d.J t `t{9ݣ=+¶J.& A EgBÞuĈC8,(B /*@P+̀VhPBCWClrjy`.7 . <@M9p+CJ!2o7TYv#-;^7i|a L@2Fp3@Ԑf}S0z-D' zrB37,:,.B$ eA+d'4; XSxa8Ol'?`)xi8u BC9(dvmeEPiT9-DY^Pgf,qٵhؘٵY(P5u=DJW̰!5_,FbɎ@λ^"~ Zt&bB 'Έ>V$2t#9 =2B栯~> y!h@(*0_ɥ(aY\|AzOnOQ -F^Ir)#&#c]ڐ @nH!lrX`@4LCM@bVdhHCfE6X!D؏6K8@$F1.X  UzBL>(LY62]:b_ !9,1SN`4bh єKub=ohv#q(˙]5;ŰINxsb7x%bbD$љd*̫ ,iH`0&w&E`Rd[#FZjH:7[\1Q&-@pSQkpP 3P W,Q)Ӧe> o!0vn`Zj?*ɕ6\{:v]ʚN 'fA0z)1!&]hEV)`# wjA;@8dJ ~*f] d`oH"\qYf(XE &`)BchgVy+aTÐ;1йC` (p_sᰍ6f b (7CFmmzjS,H&ꏍ!6P(.DdB6)OCVD[!IA`,8!LgQ!H&aQ1V@:zm`v@.1yx!z"16p#* $ӝ!Ѐ3H? &PhH!!]8APK d%҂r&ɉJVI ~0t,.p lw6DTB 6 1'V@Vn \# !D7[1c|bt6Ưs# q x١ʉ.$pƘx_޺, Vs\vGΑ!FȘ7$ d72V"mRBZQ0;t4 paJ <* 6Aj#MH`\' N`~6l!TF>!b `ae"I* 5aRf'_ %O#@VNbf"B B4Č!dh!L6悃6 2! 9!&@(`-6 p@H!X!mOF(@X-na0#C@HǶ"V+rlnF]Pb{`L" n%s`/!AXbB6jXHP["}"&2L&J N!9O x#E T&p 傧(\3dȊop =q`PcXAea6X` fj!@Ji&e@T5Q7_ծr!`RBI X- v04ڡ!0@GDn}r!".D8$}ʣ5Ѥ$A`2 to'3 `hCJ$n tNNaNAtWN@ a/^Mht}b &':0&؞Bt Ԑ!dNhh aWh2YH ! ` d 5j#e@-(8R4 š`"XglCPF4L!*zgdsda*[9 ' .o8!&W#PT&&Cd!hZNjQ ZF$^n74bRA/:vbفtw w!"x~W K17+ҢCiSqpHS"@C<\- 6(Xr Fl~k֒ p!Np(! 8 8%D<(N @DNO(1z¤p%NC'\c 䂪 ">c@l 2?h㒸<0$`BuIu3bE44mNA` $za }4yt+`AZi!Uh% R{A gِ=QX@- ~ % #16!B-P29kRC!g$/#lbDצ=Q 0 t@AA " 4_d@` 5&&׷P?P bL8!L $'q9qj $j(w\sOaA$KeD(Na Aˎaha h@(q;%:*(@$h`!4@UCh6RW/}ڤŸ^Keq 87X5RQ*j[!B$b ia a5-o&h~`@~҅66`\5 @*>!--buYTB( rm:c! L ʍY=f/dbJ9f?8G eN r~8{~A0lF50YΐФj$G64f'<ߏ= N0ZkP[) Ҝ9FL+c|)4u\9HԜ` 9vԪ`ηV|;аrZuxVܹ:xz隌]"Fжxӱ-TxӫDZA``ĩ\9]z]3f(V'#`@jˆA&[1,_g[[ະ )E1Ͽ8EU," +<^A>E R> 57<u5%r\4OepD0b%PMMME18gW $5!dMClɉʘ8w_:T24W3BΔÈ0lqgla);$ K`hs, 2$Lu $$-T!K\т/ P+dK{eAAC$NC!44LsJK164 AbdCbV?EYm;4$GCnAaL6dY3 ZpL$2 :Z+ V~^@aL{pJe}5a1lEg[ri3bv%W ::A16 I@a}҆+vuJBp)#X7I$BL _73Ċko$"B9b`]Bp3` Ʀ$EpĆڐM4 FX[̟=`F6$JV$BR"X88!" oDVDZCeuHI$b(4А$ 2 Ix0w# &N1<ъKHg/pېKآ%K!%GO!&pt%0]#`E,GdGBA*oC}Z7U c6tPA|R.f)j3@9x gr) dF8r \N1 b0L.{CPt^kE$a#)0bՐ ys;bk&7W* VM/Db*1 F"$!T(hm0A)>JCXɥp19``@ ʀ* 6b֑git3a1fa[3uPL r' VSP61s85v,ob +  AF1T+  "0`Q'Vm&\ Q!r+aR ` puBt5<7pZp{i0 @b$P+HqYNbP1r~q}0p; d7dI&T.S ,V?I$A +;c[?g Vf#jp 2{ .0Gg p#31%4Ԉ@c< `u`SYZet1R\YQx ( %U DhU:Te#oy0RAZxX8m[W +A7P''uP traP<@ @E I0 P됓 q!)BB"b8 '$|Q@/C m@VZcqf8d0;q ,=2ˁP=EYuX+=0:g !k/90-, ), A C@h1*OAHљGah.!40;:aLA`z!? YOB;Vx]F}pg(f0lCU C TP\.EEmXXm @"UUtX$ B yUC.""o?  ]BG$"??D qP0Xm 07C_Vkad8.2rz T UH JJ0݂ Y}0W ?F"Ͳ saYP* !PG$$0`]cbnq$a u0Ok5$F}g p )Pn/c wm2hoP9@mt`0@0PjpD'} u@S|VP aGyyqS vJMq+<0+8&PΑs@ ~T '1@ i@g x p8}0!b k( ۰mB]w~/g ?!DzZ/ $@Hp]-T]ӺtRg*p2q#R`TR3-(Ku <6juSZ;t$G o } !" zVR $ё۹R+!+#o+CN@-+!Rp 9WBÐ>R ԩѳ]p"48 FJ;.keNrr.A0̓X(|oo0 jV a$ P L"B9A: JaVPg@yv]!QPA: 4NJ%AqG2pES3+03 k`d} 2%S` N!P: DZ V;ZյZ_ҵe\ⅬmRg` R G y &oK$ º A tauq@ sz uU<) mH0O, k5.P 2J+=@U0"bT0*S !Ї`aI"R ##{`T20M%wBv ({#L.PFPR 8̊ 𛄦y] # 𛮜+q6"DP)rp&E_]+X;yZm ڀ jj, G:p ,pf ,W$T($/Ġe(J`d8@ $)0S|- <'\/"*T# $1,01So  g#p&6Ή,"!$@ۅ\=['n2[5y1_BvMW9v 1 >% WGM1#} aP[%o \py ,y }Ep8^CxC:'̚.0u(UGVx1ۘI:g>8I(3&hwT< JFZ(+Aސ <0  qG GRyPq2z\˝^8!짼oy`| 2~Bip` MAp7J <Ϻ1CGD5L=Tzߖq|UUz#  LQ !v4~{ g Ac* pr` >a>\N39uU$QsqrKg?+qcvG2 'XQj(€짐지vzi)@sNm mb- MQYW T KP]͌-V` :6mT /  s":{29.  U@(Ü T  3A J$;3gT~#I&G (2 "B#"+q8!K?1f  N D¨7 ҒB2B@|Q+e3·9rز 7oqUΉ:UΗSQ'̟0pe56G"+mG#iuىm`rqœ-[  b^bq`vpG"7L@\DeC8PX. &b @̑0pc=9Lj9ZΊs#lc NfO ,0 1c1e@Z!Ck;b 퍤| Z10 B"D4DE9p\DhT‰>;ZdD8V!NdA5$ (]xb"`LlV"X""Y Da.XEWabhC>bMb(M \$B][c"&5*Xh h9@&*Q &@/aCvHڮ (((ZK*aFh~;&7/C,'P6(n`xf_ =4SEC0 -Qv.2!f@=D!9荍XB p%h8b\Fр$.Q $! txMhF taA(& \%Z,,$,6w|m("8`}3h "<&:! H6Y0$  r8(01@= / @ B˓Ȳ&YBJo0F\5W3PD\XCKE*aKxH+QDcp}_ 0#aR7X3AC!"XCbUuDd $DE0P`]'8~lPF <#("HGs'2ȏ}+z13w}G{.aE|Q@,T!~&w.EZP-d+(^i A;O#; $Ld " h֚Ĥzp+:=d#pl@E7xC11PZ)`/blZG/t9.0 a`0\q$4.Q q`,pfm㵉e#Wb%& N{ iL C`'D>g5P(ƒ>x@H " 8(ܠ1 ۘBQ!TˈpT ꔄB)D&11`Z.#@dE+`C*NЊ BJuZ4#I ]X<@-#QqL4uch yądNq8RЅ C<&! 4i\wİn"0X; Ar@p\S4  ^t]tqD1"04IH‰T Z&@Qm](mb>o" Pb}p@#xdCĴ @.lBx&ʕ");y$ uxDi'TDk3\aCg$WH@1QH-,/HiTJ17"l`@$7<hElUJ19\x*TZUM-f*(:v\/ $ 1L 4D@=bL`,D@ =,^1_Ac0x1KQGx.8#5&07HZRˣNA ݏ}7 zP./H\8UȠh'c3DqNcE  C2Z@(C+nSS܆"x} V.2| ]b`cqA x+t:# &ō FdGEQr ;p 7 Q*2}h$Y|s"mf1z~5A@>0_k&;##3: :@z<S8>wl:(4;(JH1zhW(d!/8j`aN89иRl/~|h EqЍ!H ٸ䒍Z$hJȁ5xaW>x \XP`ߛ^ K\:c(  6`7ʔ8 .a(a- EJʍVQtN82 =dq X' 3طpTX:x@pa25ثluA634;5BX">0(y0 +Q-b^,|VJ\bS Fxw9%: 5oTث1h#b=)!EB D ^'FXHDjK=MsQÓ*X+:ù*Y<v(drHEiS@' h Jh(!P4>PNp)wRZQ*GlQ}(I`!>bXn<ޜI 0@SP"_H@)i1%*,B Y;T" W؄y:5ndĠ~ `:`CԘ* x3`t (tм J!Z$0|<R4O0x8$oUXUX'o\`j2=cM\ 2or5RxR ,@IA*Ox 9:IAorx vd$z PjмrQP ( @Ё¤H`Z`~4(t;/6 T|F2T$@E@ {ҠaUU&IN!zH @MQ,7xXy 5,ȅ\~:o(P6ЈQq7L@K[[X) Jo-UPUq(8pA 10Z B~3(EcgdLy#*؜<ӑ]CSI`nQ"eH@ ۨ@pz?HDOQR4۱Zȅ#q>q0nyVR:e eHV XzA8B?2ZF+Z`RQO(58LI~`HO䡺+Z5(m/(:0T˝T8H+M $.(dd I7oȂ+ ~XkY7)?W(>pv;7@vdgЮIWCȂK$j+>`Sd ]IV0I`1h q> `A#+@WA4X} UP51'x HīMR仺6*ʵm 4yaȁ* H:1`ppt yPԈ6b~:I?X=(C,dCJVq.ѐz6؁hQ"KUNLB$< n1bx F9b_18;'L 'h&}΄Q o#*.9xPfQ[#2X~̅șX$h]ЂG8xX;8xI;n8Uy ܑ[y X@9@ykx8 '-9 V>H]&$@dWL"ӫ]~["9h1#)"7 P!HX!] B*-m,QApxБ@y,*1`+4ي rLV&Z~P.x*k~S _h `g Ã0fVʙ+ԅQ`AIn(8P#J؛Y+QPB>^)),N3MTȂ PZPgؓ Wą jhІŅ Ѐx0UB MRS *fSH|ÀK`{'K6 cD`> *cy}6yp67pYD FЃarAc aȝi8!dl+}t.VfCF(. ڡ|X9]hjaނ 0$ J p5bjOHN |n3uJH18k֢hg-viv__:t@2/U ؋jjh,HSxl0 jxw8`A4w#>`p~P$ v1i7:8,І'M+ 7p_cISӹX](l3 J+QV`@/ap!9pੇ Abd*Wd@>̂A aa06ljsf%x-2mj0"8}`"FϠL(29H8XBU<ا /M Tn7a} .lb HU :lK-p)pػY ۥo紒#V9ɱdi`F&L8Vlo-'0AgMo,,B f|poCo`[qx @$$rE64j&`!CC=,IAhA>2!ZR$-'8AQ$9Gя!XCrcyG XF2  1Ma  Xa!bE/Ёbr Cy#OFFr%ODqS`/0D~daz  N.'X t A*+@!7=S|e<l y@GА\`Cpi@D$N|HD 3A9EjZ6aKpA!R&Q 1XOF8A[8#Dx4#(}!|JZ׺؃HA` r$0 w8,#}u\ B)[0.h/BBF ̍q:h:@q1EEPU>TIf ]A^&<o8R#  eh+H ܢh 2 T8M-Q kT3; E"b U?Я6uitec؂3rVʁ6w2\ay ^+>7"l!VKT ԋֲ A)8r!f5.fE!`$m#Al >H>MGyaXHCХ pTѦ+(/L-b|&T/ ϘG.` mI5w | "653#Fdp*PfP@*C;EXt8 * a*\M(D ѹ5JKTC6 ~_‰DC6J ^c}. ^ /`9H˸uq6!;jL}X /!(Cz0`_ÊG,o P q=BkG~a"cߦU<|SQ`%}jD*"|& IDDn!4) %< t%o= ya ,XB $ADPҊ/ ,R=uSm`#%rZD;qLli!l9o  5MѤNЋ*ܢ'#,ӼM6¡O$hЈA$A+@@+ 1dBI_8@Gp9@"h> CVjOVfbYcUא ̀; pJ:M$ B2ũ75EC)O[Kw08CoiA,.!O xDF\nL%h#(h " $AV{|9Cz@GqsO1X+.dE ?,L@1 "D2<y8CLB҇*` AJ&`lɣb<pzXmI?VSWe Z'_$U/NA8hߕY>#|Yp N(8kQo|R?g!AtA{dB0)C^4>Co_x2b@ud6ʼn@"BD,A5MU|L2BPY#1e-VzZHp,d  #-E9fTƕ7UηDΙ= *H|;C,\!WSKQ0Id]-&&k|'^J\ |.KN[\=:3,8xC؟ĥ6r5<-̀I.TQA~D?(_Ё3(u[3`]rMIxGA/V@uJ~y㨛P@/CC.@Y8^J("DhAC5)w!`8BEj'9^2x/Cm"ǀApWe*j WA.Ct,AU@-J95E7Mt׎*\oL^SI@|-`VAڡjZ( %C?P^Z;I '$A8 *i2?[7sݔ=D[kŤp]`GB|i1;GJA|b%PAfx(T()|CG?D92\\NC"@4Gr3p@)LݮD/dDzQH?Ñi @;t'bI,P\Mdy()1nk#Tf :*!t&q(pH>F 씙b% f>8팢VY8%ʔI%|ҡ! )0ƱKh.ڐy##%(%H"]!440N|#% H½eQ7^8𧔯)'|@+1 M. o.a‰jЙx}C$Pԡ:N8d x$(o&! R3 1СD]>z-*%*їqA,`U D]#>k1NV55~-Z@i"`vTu(E"_t H" lDXB $V肺 #B'bd:Rbgc: *1d`K^u5ęb9@[BśшeR9J0  a&gI霐 ޘ8Rˉf!zu4 q& w'v9Jڸ(fʖ{Kyqf e6&:|RF K9a ]&಩ŐhJ1h' 09,M vÂ"39'&CzM@+Z{6> aSC\F->sX@ )& QIk Ƞ~L;+ EK!PpFrCFh! I`@5,%h#2-Q/j:Wr g#@dG:P+qfk!4!n pr@$ ,oEh TA9^B`a$bL8C^! TUjŽUp}wZ5!:C`MH{CrS aXXႵq~=n 1LD2~ E98"`̞72s: 2x(oD'U@M8`+E8 -MCfrb`,] Z rp[l`C-UAP/"a4d:dFc\\!W`Q:h8Ma)JQ|%7p :PO0|" XN1 ; <2L,1b`bg!3{BQ߶ \zYJ;*dXΌ3quAcr< Ilp[f2!(GPY Mdq Vh?" 1t!xy*  2!%R.P-O؊ZǦWd0E4EgF1Z=!f $ъd1$%1!0qH@aRS=:\3ɛc`:TrJ`<7G 'C9LWFq3P-o=U")%h K j$S#I8q@R(n^PA;4 '9e9vj! Y8%²YxWrKv"3vK͢`X2W(8{gc! ;or &LŽ!mwg> i"&e-q Lf^>cԍ& C2'`&D$QM踙s/"VPZ%Y Ph@F 1 N-p\ľ6yh#jH`dyP> kDQ(r9W\t;cz~ m aoH&)Wa2cɴⅆm&VX,Aff! t C6{3wh+1#9'QY*v/ehJ hyg7C F8@a XVt.~Q6\0E LPhNp $!bde"U !$ E3kB1 K4\a6a`\!Z L(a , Rج%' $De\!BTde$dh&b|0!j"sk , nHb;(o)C+֢zuo 5 "BxY.!`N c 4 D&!sa 'fb' V4>@6"0/. N,!! Fa&gHЂ^O ! 1b\Gl&"Lf Jxg!K{B'&BN{XȪ$|3"h'9B. 'r! aD Bja.6 `[aX`  BlCāA# ]1 (Џ 'N yCc t,R΂bB X!l᏶^p$lʢʇ  &UN!`M&J,g^&&:Ppr>Szβz Xf"!rY>Z5 %g&.0@.)b9܎hvY4oA ! k"` F]f@h*D)sb9Pn1\> f A,0 P"mIn@RJ8,,f/ lf f] '``Zg9t%,jJ`DPI%S&(-)׃x8J49sU,9F'I'X$ڀ%*'a7I~X& `6nb~oc>4e(( :&fB0`9Gġpc&zCb;lI<"\m)<]upi]``(HoIX?*eDŽ?{AbjctP6Є,@(4' 6IFMDZ3:'dH.T(ϊt3'@c0;v :rae\lp843{f A 8#:-%ZN;e"K.RN @1bU{(c֤l&;n8!U!H':L+-w2 +rbP7?ϐ^<) `ʁ?B.a("o#h$t¨ʂeib4 ?G~РGu!*@d!7HN"*n&G2O6N%g$0܇c@Th~!A÷B$~!+P*UIhj !d0M'1h`"GZ(M^ f n !9$jIb;XFT;,<[q{D~oRe{;ܭBr8!fUGs{L&.}(VX;9` 8A! , *! .MzvI60^ޠ|!^ڂ$ N .ShWr,UNG?퉼N`y&F 1!PMa eN`B^%N .+o!Aj4b }!)t0'@f[ތ#yO`P``D HhFH֊ ҆0:8GjVŴjJNa4殀  *~BPK҉VgFYmgd &7u`(xK.^6' n4dtmjdPZA9h!1b'd\'R]_ Ax YT& ]%dlX@B 0"1ʒ%9 n ^ m\M8`+MAM@E*PQIG' o}2s@IK!v J].0fUA)6_eb06۴І,F5'P@,pG=&0O*u 4 A"u EU߸R%rL A`AAu0pUe4$AV7oS1 <1HyAQUUQU`1H"4[B XDlg$'k\BGD LӝBA6q^*^<'x E%Epc0FlF[PaXD*4kR#-}xc(E59F @{Y$k"h !La+gTѦrzd]w(bA$C GX t!."^Yv| \1nBܠAHX@TB/+,'y%Fk F1oq3DLzhStNE'PDGUVBHAX* X)XCPkA-}@AU+j!KqCKg+LC2 .sÙNt%<ƿr 8@Q`l1 d }ҏ|@A݊A0ESA"bp$nf́7B3C8\MK>H笢#Hh'%Ġ'C2_u%p0VB"P)XaHX\"KF lц\  q#HK[bYx Ն˜sHȳ19A.! OPgm9`LP 0Ojj6IM-7Iȡa XP-A B."-qݰe& UHՎ7C*Iy8\ox#@q_6g֡$A+Q9d @ C8_ X AZ +W9p.;3+h1>'s!SB o] C h"S>ef R7#h*`$+xGq?Q}Pv @]JOO)FF lo".ED@(j `EAr((:S %'|$wɂԑCΔCD`ATaN@C(:"a~e}Dq7l?(|NU@dLU0K 4"zjT`pQ2@P 8 &</r0_ zP Py' 7N3#O&QpŰnau0=?tU`GA=QAa~KYfN|cHUuvP xAF00Y0TtM 0DE$"QzP3Q}v0p 2Fpnn 'nB+SA;Iq3&QB[oӧI# 1 frgB @krs @8@o`^ W 7 pV Tv"CGc-l0nUAQpb)r~ aGC~ AXa "  "3 j}S_TA;&RͥdaK! ܀ HdQqB]!<b vr_TpC t} z%S!p5 aN1R@H?ސ#SAwgP>ՠLT 35l5׏sOSg/  ADD^h su-A"Ta598p(V(@ puR8'p&;T\`H870kbr ߹ "0TeMᆆY|F}@q3rF2` 95!]ׇ1@R :_ ՐD ?#ɡGЙqteA(`$+@` ,`/r&U&Y@@M2 4 `- a 9 0G$ a^?|` I ƀh!* ʱ]鵺b gIwZFIG c17P _$1W@yZ3I)pE d"Fc( 8rF]A}j 2d ; C eŽ,ї10 ї; vлH5  B?0`(9Q|QC PAD` I ]wfw @b y!N64' ?Ay !$Qai; .0Xta6k b"O+J& x8!)O^ yQ"@S B8OЈ<'r@ leQ!`Ix@21 O`$v@ v[rx.dDXC] ~P k RX a2 0Ǖm }@-v3"ERQ"aPAMzGW.q TjC MB Tll!d(g"]d=wRUnpE3Iv'`8!J!2A!?03c F2Dz bpb  :Nї 1G'wb0]M 9@R*N!] ݡ{~2!+:2p ]waUzRU@W:.@ 4D8:(; <ɛt_'vgg n[QA@Pf'⢜R^ 3p ŀ 0"U0o`0a\{0g.Q UAp#M kлKP} < ZJ51]` KDDh,Q Y @!w 2]Rc؂zU*wgBgCSA 2-[b(q;*'J4ho!C\bd3 G[g!I  Tu(@nY D `A7D\!}AUI0ʠpDA ]A\yAr+ph"Yf]k6K'~$Ki< .]5tA.nbR0wF$zE2#L#i&(Z$o ¶0ҒIgv@!dP a 0` Pa7UWR' `ߐ: "|A"cm l"K@$"3>R!Q! >pC5 ȰT3|`T#ՂBA&:a#ZtЖ,V 1*قt\k ]FFj7qbXT /GmVaMB0%2}Asӗ\EVRLB2s0)('&w$PX@ Dq} 7"2-vK0o-:R`QDskE_H:_,1 İf_@ACCUg`1Q+pj5*OsG cɋ/^Ę"@z%S 1F\ 0k G&!|e۶`L`DT(((+RE @3%Qs @"yL@]BM 2|&Ѐ+[%nBD %*|Rim\mZP9Ĉ ?b yuv g; < l toAURxBA$% 8*PU˚2PG-u.T SG3)KL 3!A7WL@BPޔ#v@[Mm AW0*,4b)Tp ,ۡ| u7`͸Fkljn{A+3 ǵih4Av {RdQ# 2ys )x-A=Ƚ L]߭,ыh UF4riK A@H' % 7ox&yT U7Xh-dTL@9ъVLIi4!m ^(5 ,X 'D9xU+! hE1Bq }N!I;@ 2+EI8D^MT1<`tͲ- A,>R`'bϘ z'(9# LJm 4N hXF ilK0#)Ѓ"<xdFAHM,)74D#y2Da*͂$!b Ny5ĕj d hͷ6|ucR @8 $ "LƀY1'Nc0ԋIh44%UHń2PEOJ]"kH3 asa \!@վ!@% 0E!'ɚ:ERTַ|GT;.Om3C QAr9h#@z}v34 h` @,x OhjO9@ƒ$eEY2+:U;fۥ hASnS| w0PAclcbnޒ.P : H2 S10 qb_ =(33,g4[^P46Tggp` ~5{Q' @3 H!:uc\ MKH4G` ;P 7}b"@"!`Ԧi1i`2B y" [T3%>9Ug$Z s!3' 6fgC d3 pE|A:Lp`P Ga,u2@s6Xca  $P7P@!~1XSFs5b`x## L!h7Ɖ@ wU4(~"- qX"6;hh%jw@W(&8iwNbVEkh;@.X!TD\:6Vd]f`9W.!8eYQ*)!]P&3fz Hek28sB R2 Y=b$6V6\pu32Sa2LА ')\P 2UR X)_ei;6E9x@8f9&>g2IWY3ed  )`@c)8ub@\U,B@ B,pcF3>pǀ&_0>30eǛ"H0rP!"BEAPJ@sRp*s*g`9yIe(A dZ_EG*%"gp'8WH5bAbT%^"pr>W  Qٔ01H } P0 k~ 2Bx&8'w fib"ސ;F2!0 0pZV%:W%\K(':=jL\%S 0!d"!*dt 3*:[wE3%30ZvW`}y;` P`1;R`2@xMW6#]pÐaDd*[_jQʼnLZPvCɉ&M(P0&1:z0Q m(C*T`7fA2dB43i8G2v $3cxc'L aiTDJ}X8܈iapEQ 11PvZJ H^J=3824w 1=u " 7v W&-D4"K"=ROdQ_~ F10`y;0 $@%;qeA6X8{~i"!  `1D бjuIkIaH7BG0.3`L3B~3(ZI#ʆ ЖqiSM  PM80 G8Wa S!)x 15A2( J`<3v O Z%juԜ1Gpps9 pt' S8y ` #t#P :R\IV EXSZpc p4'`LBb [ ( v;.ǃ:au@ Zİ3ڠ o'(VZ<* =Ta5xG l G0 0h3QzVX `"PtuE[wu1Hp( Ps yTQXBLӪ oc  o$ 5ʉ-Q 2I;0hvI < <7lEs0`2Ed  S3t9‰7AKz=iT57[ȹ +(Փq.ש|4[ Ġ[KP"91 K7Pa CVʥKYcSVƹ " sn/KDp`,P}p3H <(<.N6C\` !t q =: Yz$Cp] -|`ߜWP \@Ƞlv A}BF`YP 5QY .|![>ĠieU:ܪln9>Iʢh{Zl6g- 0 _yr(`o7 0.y$7v9ES_ʟ@ z kJv 2` g \Qk0(D A[_ްJ<pĆ?/nZ<`:@ /Ȑw\p[) 筐&&-2JDskuPj5؂U HۉI j/ [,yq $RF` v qy ԳDb,Y@ [Kx$JؤK ]o K`sjF~zVD&-.DL?~MŊQ=WL1rH$, T IѥO^u XM{w  sNvlU ] wgS%N _&`]D K$# BZ|T9 ᇡ%Tcȵ\80>;G΂9 zi#(u);*.rK+xp;n >;,$xr*P"&Mo&R8@- &7> i/Ö8St Op +H  Y Ц1`0ƶg"K,k9XI &.wd0w\tK>d*nx$&L;C'KT($taFA?$I` DOxZ#8Ӵobb&$L8qY3ډ] N+a5=pԓ0>1 @KeIaw{lK 0 ƛPӪ?:,'$l`bD^&W`-"b&X'1 d LO al0b ̳׳j`@7xQg;&o+N JZl2ZK!&V~K-^ez't30EYSEaHBT0Ѕ0He#PdLgƴ&# pe~xaXV-y#ð!9`~Pj8L-P2\Ī{,_%'g0Z XTYa7B\X@OA&ыIX(h@ @1Ba-!o1sLdȝB&M,(FV Da(xb/"D#3BF9Ip RtKK ѽ(s)eC)bh=caA<u08nJQIĿ1c ſ [鍉ȣWǬx|<.@D@s X([$d>9eT,?%,$ \ܠ+鎳H<Au ´IA:fKRc]ڐ[ʄ `Ezi-#;P?pIb8#!d8pAAQ$9H#IO+. `Gxdzb5 AKHCx@Q O6Ӣ3âM $Ӥc3wTPSx8]%.;2`\IL=- B,!G;AU[1ϼY-1 jwd^pa V1 .>ƀc>a^#'K4ҺV ]p?1݉ .اeyΣlR.cS xW{}.B>=*j .!VPT3SY\7_Q="i'om' R#߁b xQ& $eN$d %]&(A T@M)bgoXж|Gfw F/hv^40&1f$;e`2F%N G @I:?d$tHʢ q$Ar! {*"QNNr,Y7&:ȉM6%<})9a8FSGuii2k.}i >Vmpo>w"rk\佢H,c~X D&dFA:,&tTlTa;؏ /e?@/RdP$UM >WHx>{+0E.h?eNOX7DF woBGNBؕe5GPx#"+8p]A C޸B`pԈ RekZ x79@0҉@8r;:23|;(xA7`Q". X8XX(( DS ?D`>8(x2ъ #+ цjA>Y#I0) ZÍ ( ebZ`i* Fk*O6 6~F~Ѝ&1':; pX@Ɉ{&Dl`I "V H4>2mDɹ5٘bXX#jP* (Oi%c .K" 8e\8-ː79`(b/8댰 6X+k Ā-%H@ c,ȇa`!pHw0(A, fJWb28Y*2ϰKmb sp^l0 8X ( $kThȂ! p  sU*(qH qȂO8ak :0Oyc+bJ-$-qIx%|Y˂+ϐɂ[9P@/* uV 42=Z .Cf9D31I&Y 1ҝM,2 k.i2F#Wb"* D.XjLD,@Ѱsx=YD 0zDL^jbz= OЃk ܜғﺁP:#& U("6c(`rA$@ QpAQ-P-ij\S% =-BάXTE$ϟ9 8ϋ2,xĚ1 rUqIgk$YDf)~ [H m&Ц2S 6`MT Jl#`ЖH'IXP`T * 7VXMUe(DPӹ6 ZbxēDȲx| 9]^Հ4HȤ׉8X 1KED:Z)0ȉ 6cT@KղaIm ,X*!5[$b1!; @ VE.0e (-*UJvZ,\ai&m2`Ojy_]!࿇h[)s(:! [H3sV28X'Ԃp=,ÆzJԨ򰑴x(=#8(W°P5.` (b"N{TV螆l:X_WE|e) 謩3e h\m2B{qHQ\ĥ$g g@'.aIvE=]ڲ5@X%)?(/+>]Szhڤ4rf[p X+ .xH$kbW4.XQ73܉D:"B@LG %` Π^ ﲤ=1= =9ݘ9S: 0t8lʫ@)w޼+`^s&yWpә@+Vxڧ1 Չ gUI&f`J-.V'Pee*j:ɞ պ|Id:P|9<# D,Q(@"C ۔VP|Hɧ @9XiTD+?xg[늀N?=7@jȰP򃇬Y HM&wxa !w``M5PUғgePm[x%Fh.;M&moh j@a7 {K( ⶻUTF'p ,:+XDk&q QL[u# +!x| @oDIpR|KDb 009r dJr!@/jL+~LFŐ"u^"AkP=ܼo0ЂLg-Xo΄a AԂ;i T8:Kx=$\=4+I1˜w4ty=3h0-vR,ě";-`&v4ḷWȲؗV(w j@`oԉgt( '(/-X! vՐ AQfx*@q8c1" X28ۡy5juvW@JvBaODJ~W%--;(WbIĪ @D-aӮ(H)"9@MMcOgcr ) Nsk]-yOEN!gP?n~: Q](9VtJ.>DM%`*/U(D@ WFҝ*ķ_5 ɷaL0$40q!s|Hޔ qј`5hu .8xr`@9(GN+ !N@=z$6; @^e,ZBj~* F>Т ZLuQQUTSU VdL6'ڴjײm-ܸi'.^2"+`:`8m5qϣkK \2ӎ%.9unDT] #yhK}#6P2y#A09!f|hrIWB,@l^"* C YR1uA8lÁ+l6@@a FP 18cZ@ 4=J,/ `<6{GFHV@1eg嶄g(2ZediÏ{VR3'c$%a@ΝS]^FY(]+-%sXĐF|z2@7? }hEZzIbF;Q E!5q7l-$ x#-Ix- @d{m#B$հ#IS}5@ZGpN=]LJ*8醟@dp1 D)uzyeW.xDKE (X7|b `|rDAʁddIQKHv 4G!H*v2l;dtήt  ]w @@Ք ߪZ3@̰BL K,F1 {z@@ 1,Uqe<晙 FWkC oxZ 4HWsL^y IڑyY` ]uHjY}Fѻr 4Ro̪U O3RFS5I2Sn {(#=ӊdi/,5 ?0e RU*m`)&HtxFв*#%{X0pJ< FDPo($ٹ $ $ IӼt![Рņo!C(ą5!A=ZI`9h_-/FApA*0RHBt$ɠinİ4hZ'h9tLR-1%7p% I1?|fκʢ !ٝ6b 9ؒ  }1<#є{+zGiGBqZtG8B%9 xo&qqP8pf$/J[yKqiG5OA Xs]Is+U'Р&G ;,21ZJk UJ] A/qL: zR eXOy"V/RFN@=$y%dXdiE搬Za kC %X{`CqZL?y>sGY  c &qr!cc0 ASH 3GHS0D4:< GuғࢴISF(s“nNg0c|`HCFD>Ɏ># YBāD$` pu HVYsRBWڶ =YJf^ǏA ;1$m,3lF8 Sp.NJ@/c8'!UJ052i-d%gk!)ӢmdbhȢ$;[YFph "U1e׬` FPq JyeӛXKV h}%v,NQJUZU K v0|:*Ig|48A2=BRiaH`)ng_Gj=X5f'IC٩#:7@LV%eO80Y`(!#,]egՐ1 Gl+ʗגeF AfS@И4Qӓ"v!H) =uxO$=fNҥ6iXhO"=SX;ʤ9^9ErڠlЅnhCgQ AYQ)|!H #`Ę <7'!FE֑k\J햆 `}p M3؈;V}E HbԸL 5k$Ú@@!F0B-a5Zp S&mO ӕy);c)HD"VG£WzY"F0alFγp]#?@G̐XB~pvreHUf9&2hJH* tn@)4# \$@1^cA d Db(@IFUL X_V YN[[\J|HF;PK8 'IXB ї Zl>v]$M^@D>B9Ia@j@B3=D%Rsd9I_N%X@TG2) #ƀþNRH]NA`(, F_yF)W-^i+A\#ݚX Fh}:MB1TU>eAA8LMbIe\dC} f`4,^((w~)$( ,I7f NXbH XMל/$k pQNcR ( 3?'Y`Eht3xd1,$&9|\^VdQ$$BTPlحŀ((? 44A,$wQ<'`9 FUF^@QQ&Z"DJQgD"&g 'Cƈ(N6n="ƀ)L"NjVԁ+XB}iO0B)'|iҌZWh/0y!xQvofpҿī? Hl66!m`  18<p7V#94^D:AZP%D9yGT` 4޵"p @̲/? 'U6zq!'mZIfH:q_X$syu{ZMn0 0>$CbhD-zl :d9@'A::F46c&"0E,d00 OЊK1.ݴ@P# 􀋕B=vx`FceAs"!T)<ƑEbS>)Yb*L\Zd>&&la D&) xP v/z A1 ehhZp&?xZ  zFӍ#x "P$r! 60DǦY3t쥮b^b$&aS3NK<ǫG"4,!GvA}HKT>wNNBfCx#Ҋux E*BC+dz϶إ.׽qL"23`dD>@V\ȃ.2Hʸ qb;ӈm (%b3)mD)6Uc~aSd%24(t)$c`a¾F0@~!>bhdjc`S9%Y |e@O >#R-B% e/$B  :"T_\EBSYI"JC>UfD9`х0ʞ.r(6J^'͞ &SvoFd?5Ss,߀6ſy!of`z V{D*$X:a6osU1 a ! }7'K )Gq8Q3-#xȒ 1%IL*N=!bCd+zL83,Cˬ \Uv187`v _7U$JiZ!_g zrwnJ(޽"ttĀt"}(l:(." A|k `F |('.|ANP" ","!Pb"\'"*pĠ2k %zt8aoB0" p r*.-ZU& " b]J/8aD/Pe_pAZx#A AɎmϬ'"ܮY:" .Pȥm аIa P< $nm~s@B!dHE Bp0"8OH8"Ja@þJA89Ͼ8KZ2*B h؆Պ,)ZBW 0#?LVآ#xLPk@|dkVdV Lm L@pP\c) ~(fNFj RlBE#xbQ"E^6H@p/% Q*9 HkP}%1.b1K8k*K^DŽmL2d'D˸.`ba%/{KQ 1`2(!03"O""#@1f1 . n@x&>C&4h9dk.jGX@1 H2#c88vS"dC(AKH @&&qAAB#! .b6 :3!"` EvP@3*"XA."6-A\@Ā7#'+%4"SshBBfX)*Bk'+/l00'a< u "RG3i"Ckrk  4+#Bd0-)bH(<>bFx(Jd_|)pՔb%d_2C?"&$&'Rpg((QBj!"+  .elKf aQM]8KSD:" r49!D!&2f';J&O- hⴆs.̕0'@f")Hi)As&1 ֤ΡSy/i|e$d)&x 6"!gy@#"ZMLՂ9cwJ@L^BO\f`%P+hHN"*tR,YK?bN"&IZ0f2rv p':k,LOm:hHSp2@OPDa00sL}[.":Cb{xY FR0"R@D&(H!"(% -&)KѲ VO"%Bn &KTO΁!~0aPNӥKsCTp[+Ҥ=@Ό/s:tXjWbL(]K,@t_AA`6mqqmEnAh-.Ea.@$\2 i 9 l/"bnF 8V"@aBS,"ozTx:jcFWA0 %p0TX)|5&Zp$(S`Z:0j6v* 0Y)%#FAp0 #V}:ә')"8U3Grs$aaDތn\IgQb VR(%%)`xѕTp BgR.=%1 T:F̈́CĂ#%vP=&(bB'4"B&֚Ysg:%be:Gt9|@R0H.C X@e/"7;j @P2*#K.B7%Hy背z(փ[G .A0DyrV>b&b91r|Vd)(A*\M=1brQcΒ1NL))ڔ0+gckz"L|G# ?: )bMMVEʟmF,^4FFb}fH4Pg:*CP@Z(j! z Hsy9,bϞM =%\bC0`P30R`[ *-lLF"Iş%+ [^v@T˶Px+.ebu)PC=Ljٴc 1.X.VС`c6=ZKπzv4M 8˛?>cЬx3D @|:Qa#ZZet ,PYZ0F$RClCv84ϐQ8LYU WV ELXr)3HC NDQ%C,$gX͕a[J$@dGXb NFz`$FU .VuU-'0 &!AsK,ZMqisA@Y7Y]ir ˧0 t 's*E:db@Ӝ\0XyzS/[OnUq1P$uaDӒRQm- teH P?>&Z%%'0?puH&ӵUZ6V۔T!@@R9`U `pNeF l;_ sD %UT 眓tV1?qZ|QxT)'jN7Cxj~ B}xAw=`Z2ĈVȈU#h[ T-E*f\*hGN5bNe */JubxC9)$FI7]Ky$٨[0QXnD(5Taڸ0cs&hu`^GI02;(Kݰ\uQs<[Ch lb)\T!t^*o 1>ЫLBc+0Iz hJ @$A b!P[&A)I #Бcm@4D̰LծǼ$vp\!. œ_Nl%0ņ˅XHEmz )'! M\V6= x1 !wS K0 Y."R!`~WwJ2I@,P-:=_@Q9_,_4 0 ^6 T@ Q#]V1a  b:^ `aSaA1RN @C` :({DǍ%G*"lD&⍪B`Վ=7sY9'3  C:RQЀ'q'(  ] `G !a7#{=PAw"TD@m1_BQ IYJ xS#A Xc ;pv p  ҊTHga1DWjDw-yM2W]Y8C!ZaTV1N~%v`3d:R/;`m:r 2V~< Pv\Pu&ss!203ګ0 *h tuX#dW;!ne\ImQ 2)0 ?Pf  5kPf, $ M@nP#8I!6} };Ds `c)LV˜I6de8zz*U0Mr|Z@i7!NK8)mrU3 :,ؕߤ!gTFc;3c'QKX'|u/09!"ò>>N0܁oop>V:re f6{k,U $ 9@ MԋF a׋9eF99i&/"1/-${'k{zߐ7s8%&Б5 &&DE3R,NAPZS(Pa߀ su J5l0 Gb!ppP|HxyH0]{xCܻY=D%`/H0X.bI`"'D1Nb Ulᨔy>Hc :tqjzY@e!b X J…z(!e nђ*:(f% HD &&g +g!@Ơaܩ&[L PA 8g4Px(nG tK+;*&aD.˔ (!! JKKFW_dbKx @x /b,؁ 7V0ġfAX@ ƅQLUdP0x R0Ah9xd$T+Ty' s+}|,xqQJ"FNFx7Ĺw bd+gg 9@a+76sͳkͧtu!W4bl@… 017獇#$FDK$3\H)bn#d&)owHET҅tV H;p$IHL6Jʇ 8lA ?S)hG2V (cԪL U2!6[b1@;&n8ͥǑFbV&4AnFY%c ~΍odEP9p<YC3.<(! ?V|FoāOcư$!#  n,a7`? D}`>#|Kzab}঩"'9уN\AT P%Q*<4N܂-cA: '2Lbx  |o仒X"&cIB5Bq!G܂Ych&{ d%7BҔG=:A<4sG|8(u,|" a@7Pc*%1ݴsӊ dˁN^(OT,F'0@|vV"Ix]y:|i9 dHPbh#$(S8Hɼ_/&aO])W"ΚU$P!)V>NZX0|jH+ PAA2pxQV"Zh8z4娊ъV@ў>S@A]@(KXd8X0ᅤtcb X$Gx9r\}/~i+u*aWRsYe`ZIu/ObFX&Ta$S{`4\[!IKZۧtc AС+i!JDG8APIJaf !`u40X'ZCfT^ܔ/n6QDjX(;A }ٛ Bb8 t!DѧiL# @=DƘ`:#,GoX@c6E_o4kŵK^H^ C>r0 8Q%l &&'!@ovK }Pbxy,(2€ ~␃ o8 i`(B24!L/`@QaHڴ Uʬ]mhҵCt ^!?.##㈰9 ٖAHޑzAkd\ lC&hX+Ԃw'>c,0pmu^8ٌ`WުHq*7c"%F B2[LzbC yپ,C uIq*mb8vpB ".xE6 q0;0Q{*B * #1"j2&^I^K5R#c}`P$tȃ~P*xq:8Z.  ``@z،p?+=x07p۫yV;OxK_1o9`E4'39>8*ˤC6z10cx IȚU^h pe*V @x87DX b0o^8;oQ`hI4J%Q@x\`?pXŸ U - Hݠ !yGAp  tP#MiH6%\¡ڄY0K(o/`ӝ) 0,w$0W >x_zCxyD雃9eCG9|!I6iI#`;k0݈G<>8 89"H˖s.Ъ%0y 7I`XxL"DXm;-b87X-v&V,@Ckԃl M9h} TI * % (q T 砜_³͂= C0:jjCJ҇5L=/Ѕ:H7xc^ 6#xuC2E܁#9>i_R>,|H&09 K2-{H:OZK7x UX0"IKAXmE=xmض:bPy 14ʘ 0&ȼ@T"84(Wj?XPP'Rm2LXOtI[ZiHM99;zZ:U0{*66臥'|xNi8sG x=W3aWO6|V Q%(Ux`9M#9#x0Ya<Z-Xe iˤ:(V(pAJ+x(6p%H m@&!5.}E2m!$(YR`ń( l!M.X.X~@MS #߭-1!ȃ`KU9̙spKH ެcٞ90pyp xhb$F蘶lc6hb0x8NPG?.3$, $C|b1RuSOZ؁ ^bĥ\J`P᧜rx>H):[K07\KHV? ĩ3U0w9x)A v% g()bzC!H框MC\$uNؐN  >TX>@e [8Ȅ$谅,p[h0=p+xS젏=B6H|BgiFZϣFNZsZ Nϵj+e8y7d!#6dc#0VaϵU9_ #hIWhxZ ?KA$0$8پ0\% uAbs8Ҥ F094qx @\ǜ@@4jɩ-쩈N==Ds-s0d%`W=k||K8}k$YK065rSQYx 7$0kAkeS:,Hu>8]GGz!{`V- xTت:m7_$Bh`=x$p^E|Ddk.d+X%742746,D(Og$\भ2h (&т%,D ިCAQK*V(N~-U^IE>BX - 2G0ԇ=H#HUpj_q ȇ5+yBTBy*x{̇0hT0T(VᣲjvG[`̎Usf(RU6Vh~|˂qysF!nȩoEtP>ޡ/ 3HHE(!<[U}=Bdᄈ5(_//P BY_㜼LHlr܇ T&9aiacս9lI69_Qg 90%kXJ([OP>&+8t^Z,288*3O7o(a9rDo;׶A*cWH- -Ce&Z4*oiQG=vpc~P0Sv[ p?NMHCNHoyQD[9AV/9+w߀jIfIF񪹲Z0@ (I 2 K,:肌7)'2 7Ej}Nh 'DJ'91H0(Iy* 5uX9 rOeb⊘eڒ_dM q63lҏx# 3VE_c'(F+0.n0 VcK7s`uBծVGj}K#?ɉ6tCC1 @MB`3A/ 蘄.$|X@8 bXE~$ X|lĂDCq/ )]Iqi@O[  E65` ?{؃-t51bJie,J?:ąʬ Ѕ %P(poip@>e 9I>HB+!NdĨ=Ac sjNv]*8IO:ٚdX-.68ns$~+poլ2'r'n95IZg cF '@a7%CK170 ы,ߘ\Ln8Qh7Ѝ)d lL(E== 4'EժrB*H Leja8)QAʢ  gN5/Ei6 *h50b Ƞ sa1d9QU2VsW)+Z9Vh͌S|WDd2mLxm#H f R OdrN@|e ; 颙&b4w($1r"c( 9@PV4<>! |2LQG /EjRy,>I7% x 3$_0R&>`8Ep3?h~RE9 'ل>m\8hicn\BO +)Q\SA2@/l#`P |0)pt!Lj`E )\융 \ lv5ߚ'I FW_](s-^1+G. KiIjB P%'I^K ?%]p=ʱ -D_u4ZŲ =`@iCp2yd/9!%| ^ `  'q2ܢO,d19-RW T}6}c-I9R,'JfP4 _p^px4` _.EM`tDFp<`#*%ǸĆ$Z%Fad- YpbAFb!SamV p^IEbC‡y D A@tD3hޭhH9 <B0ŤJ< ,CrG+CLTh(00>ԝZ@DXI&MB~]@0<4@y.TAxlX@=%6Ac $JP@RT䃆 K@7UI!& !f.0,Ь|4PI5EIY4XVH|Mjmº,T᥾]JO).̃Ga m_ތlM T C\I#IE;^ .{@uz|Fyh8JVlBf̑q] r$o1@>.p pM p=7,%l"͛xYP#\'mV5O˩a= )I=~qYc($TS2 >FrE\NyG$5 Y*8CQE#mOF#I1$sE!8+-Ṕ4IEBH#C"X'Cn54nI0L*ԐJ8.1a} $"2H| AN)ebye @,+%b.ff $IhIB`@BR@4,D̚)7A=x PI0-S C)3 Ð?3d]m|; y$DcANŽc BOa9Vfao<4𜶐k=7AQ9Ƒ:L :xS|<4YNV8 P |駋-AB.3X`C:P8gBD V-AvmEZ9l7b*InGbd"(½>XTp++,N9܂^,8| eGzRAmdDboloj܆ʕYG'EY<ՎnتIV}4wp ^p`@` |1J~xxU`-Y]*]5#vXb t8qrƉ?; db 1@. A,eZȅ'\Ufj e]*mal@ iA/#iV 軘qcǏ!ՄC|M;<M ۢi.,XVR=r ]XVFZ1LՄOLOzv-`ٰ0gT~;0i|K/0F)Α1`hlpKF  J; ctrF!VyfggzADN(%xƛ^D]Й$-B\%#a ZREFt1ƕ>c>#&xCMl co@Fj@L LY%HDj2桘bNb3?5+ζް@? ]-F` I[prHXЧSJI{v16*ĕI7꣭d,+$v(xgFkP' 8?ZAj:nL9fΒ5McsW Pyܶ40}K,y3؏ #9гptCD`YZ @``Cn5bM1>dGB.f( F!GW9 9㣐g 9lor!'n$ I5 &i .@2L. "ۑ @8C1&ҤTB  |%0e"/KR$-pHuI^[8,P7DDPkp.ꠉcaeZUZ!P}â}"y!zF Zx $r50 -rCxO8 -xN9G/hA΀-`:AmC\ ^-8dP(d/v!0AYpVH  Scà|\%82GFŌ#ZxtS LgK30/@.u,ǰLk 3R  ;XA`  `rPz?y}<,a!aA鿎k{BQ.$&$4Mj?'A[;6 kq-u`N=q=K'p (젍b$<@.iR@d؇TaD3j H 'pE?) :e-4϶ԀIu-`. '-0(m*P"ZM#阖"vLY-ǥ!Ɍu2pob /n f1>8I` 5$-6šFIiOE^Ҳʅ3#ut̀s 3|QF%ӓ Rё>23`Blk:E-g0 uwFٖV@(w/-<-g[@(l0jQ dzK a\oZ{PsEn"D '*0GؽY|zØ-kzzHO6G9HK.*\f~92B`ՒKl*30g`x̞(n"J!aeEF --D@ӎ&(lЎ :$$̊FN@"0Ңb(:.a:fX@ /%O'o  X!@]Tcq AVXoA..nd(HX`JٰٸdžAo8A9?2jg<dcڌ `SC>~&A#@ )  tbYlm(jL ] 0m>P„ЁP'gjh Z!NH0+-rF|oĆ%)Т8p8`X@, e8!6``Zoa ~V0e 2n!X*l0BX| v' $0A  MQ]4 \,zL`b>ʗIlE>'?">)Flxd™`2hzzK!zD3HZNagM8J*FEWTlh(ﲘ(aީ96;(Bp#\La Yn --*¥7*0o8!0&Di&E&WOέXfvXcMh~v`$.(7$!Xڂ.X BQ! ~r\lp@*;ܣlG>6Ϙ`b K&>hq1)B DB N2%@Hts|A DFqQuЁn@~ &!3zF2Ρ-a+xB U-X` ..p"F 2-l>/%0-H 8>ӬnG?-`@rJ= r0@w[0--eFI& r.AD~G>Fɯ^1>fCc׌ h_1B (h^l0+-¤|ANJgB ^n@nTMkZ0ʻ^roI'-\ېj(Wn(TXaVAIE",\N S4Z-.@`Te-^bXV`b0H@iOV" U Р gFzңc`?%<.1$K`4 _f=Ff$OՄF,:+Cl$\(֒z t \AN |`K ``@Hj@P-vd2**tEt" Z,,!89 $aڢ kd`Q !W:)Fr!d!ST1Tj*6B<,v֬>3&>c/*RB4҂BtBj [cB˚GY(<@TB &Ell ^. C$=TD.n\Kŏ pArm 8 ꔝ.?.BjAcz/V|CQ x$ hc(Y|ADS>&0 pA1ة4x婆"Ė%X^-!beVOGrB!\٢..R? /QI.gܗ"ilo N+]` `r!o.=v|e=,ad5 /^!\\d{y$rxKz a  &H# * @Ɯ@ 91HnF"R@ _mC"#9%ob, |f҂!B D3r`2uMeIΠ 6a ơzUXyb z$/@ݖmw؆؁n! Zt .24[-@A, RyvzĪ&/$ :꘤]3=@|爘 *z&\KF"EDj5N-$ ~Miw72/-OD/CR|ңqSBA FKlȆT$!{ J$ zBHLmE)W# -$- T'-TL3ee & $ րHJ" ~ӂp0/-!`(JEV64V`A>8v4TfwW` {m2 ,1VJٿ>Afa= Af^=p {^y[?˰ ]]IBd*'` ar! -K AǣqPzؤIz.zcok3gœ78@"K#WQ>{iH zJL5ap47"/|O~"@{rrIݻxKݴ|P +FV@d"X<#kTx¡NzIK$et TmHh9ҐOL9)RfGGa#.͑#.o޽|Ks}܏8=s[@1W'7!Q+L` u  B[xŇ7J"Q7I P 刡/L2LM"(F GHTG63d10#@1PT#@c#@>F])eN,09eK?cIUD`j^yhNb bt0O̳ \tXURT!2;9I`52]3'4wubM-lz%iWzlAl-^|xw%g 't QG91F*1x  R6V*=c10eEꂎ?<󌏥.}ih<"ТHl6@'f\&+#}ZH,ƭkh9!#,T!)1t-[ lE Xp>#].6"|[@+QHh'20vI0 bS`HIk n՜K*wܶ! ׽G45]17ڥp17-GX\xsZ愠P4`=IO's80< Ї/\C.8C 0R)t:?##08ҒF6P PxWGUFB@t0'-MI9|k*G誙wĆ@ϹD:ЁoLb6 m Аa hJDE'@44#F >>@)̀9$%/ ;LRwsP;b5@k9410>X1X2~)'xƉxE}CfDpȉ'

8m#aVP#0UXCrÌF 841\ӭd3] L@F P`ғ<f{Z-긵 N` `صu+qBA-V6 h$`%HZA[A$T9$Ѕ0Q0}C=@01-A?ap8ctD tPAŌ}+\Oj ^RQTfʭXљO@`$Yx$0 u#37ꠋrx"XGB$-m P ~ +U5.H` RD$xrKh# aP :oT#0P$@ޑ ϒ#Yu31;A1t' zΕ[؂ %b ";p(}P9egcxFf(jIqu o Z !mϐ2ؓ[.S6HW  ,r f 8 AIG0PLuK p`&BK" $ l1p7 Tb u&  QUg)FEWDxCb`KoĀz ztP 'q W.,jWgScΡWT.R|$0A0dI-2 ^0}|E0'5'p rXf Tr7#! AŠ v  P|6\ p g 2P2c3  } :P^7 0 %)TY$%u0qap*K#^rC?qCX 7#A ` lÄ iaQ1ԦBh@@((P3k" U )ba9t &   ߀F=,}Xju VD;c1.Cƈu %X` r"j 20$[@1A P r rT?\p1s )82!N0A2h "kvHa&$w40vՐI$PA9(Ch9!@*cAa 6{uA I(Y* yp^ )`Q(G` `*# @1pw"AC @ %8 qr w#v1  > cHRc@dbA NF"TTY0`s) Yp/'Ph02"2fWaY"efUL-g\ P\  vIYWW > Yb$uP< ~0rd W|TIz@w  "^e"~2uB[M,FP2 hz&p^w @ 7Tzbb2 #>2` P61^{(Q+QXxtPEmPS$`p96d$@ `  fw'Bo9q ,4$#PYH ua+RXQWI<|t;aÈ@" wau@:"P:.7 P ؄ 0P "J0p颕K+ 7vM[N"!it)WŴ1R@m$ɜa2X2U!`Bن k@Ah7c?j xҾ3ty\qw tTb}veB,@€vY|&kpwpiG`X왶A4R{pg;>fAc۟,-|1.  P`'0't @[@0C} Т#:8ui*Js T&[Ɖz?W+*1~hG :$8 SKmK1 PmRrȠ2AS7  HK3 ۀ_p 96]9Ձ7(203k]vp8#291 )&PX@ aHC {UeW+9 ^W^{qQ2Wu, <;t~Px  >2ӯypC3)w(oPd@)2'( 0@9ɧ>lauQ3b G)wte 0͞. t#&8] k/.}Gp d;pºqJق HWa @*s/00ډ"q~~!9qY0谴򇹂 D#Q*NE8>N #Q tZ]\tɯp9X <&6m]z\q0QML;818E`!B@52HH({Y">x#D& GV%=!$C-L9\%crvHVki.5ԯߦ9GcCM-ib38lHhʕo&Y &6ǖ-&s- d0;fXnUGaLt!}?{ Nb0.H!*鰠M ,9yp stH+G[mC`U8z'*%U&y.VQH &đĘbȡS"f$h|^$$'N. V\en `Z o\A98Z+l&RV.-'cb#o dt9NO aa4c@3ق38x1JKZab.cy8lX#3Er݂ЀD^*c|1pQo]f[T6*w1ڙ&Kic`Tc [005#pE (vxbm"∂F .͈B9Z r'>u`b  L 0/8NpxQ q|" BЏ|4'7g Kdd<ߑhptH,D-Z7>(г^-ā {*i<JCUv8|aUG֓\A뛦G1"ɵV Ð9Fs& =0GPԊOXbSJY³XLRʒ: 5p}84 L Ƙ@Qa C\B7E*ST80AEqQB",B  nCS;cNbU E@bXEPZ~ Bd #ldTAsXeXa%q6a9˖=O=4ϽЃ"ԃ@61`df 8qʑ\8a HR 8`hQJ$2 p<i=&ɠe?XA 1 !xN-w4*&Lci A (%Fh&XAr 5Dմtm{phhpJA]CpbzS@>~HִGQCkx@<.K$uGd8DX y ! }E@ィa߫LđHȽD]bs( $ޠƘCTkeLVTĂiP4 b:€K*#ܘ@Ru&E)܎D1f&Sph3pm!/| 85lc8uIx n#W/p5Ig1Bd@T`:d't9ǫΔFhA!AS8`PכX +k b\vu36"j(a^@j$aajC1+IbQu8eCP~<ޑ ©dU\f,>dShC &!0N@FQp&̷b8#Ve; }I&TS%|%"SNe @p *!!͔p@@H;97xh*=#A(W20h)s-%QI@1t:Xnjnr6X.Xa^@-XY( + q[`T#ЊXJ0k ȚnKYJC#/g=E"r%=8 hЛh`PdX~>p_ ɟ`,(NhX(t ]aNɇZh 9OS -c}H}4hi6m@|HmFui!BF:oX⁣(^wճ 9.Hȁ@aѣ #ePtZ*l@w`=I:!9k 8̡5yDI ͈{7N8Da($d`N(N`]۹D4 @E]a{PEPUjxA o@ix 8Q1 p 82ڤT(qP1nvơ3 rXc )PJC F;b\9y@DAX0X99x!  !0H<@Ux*, O<ʪUVX (P z9 2l6jIICd:kC!5\09hD=uI"I htbuI1O ,\PR(/H<(+  AHS5'!'KkbőM$hؤ+,0V`3 :x8~,`OaUЊF}u T]Q(pXp;xaNo(Aȟ] 9Ը؁#܄Y*! q-1>"s;0&1ҵ^l6!5/T67I p^X{k)и`ٍr CDXܰxJgPPEB>>Q`$IHPq)uxTH/dj!TچH8UPi$X^+,pb؈!\BZ+YRSP+2Pxx, Ȃd(ٜ(Ȃ$8>pa2t[: x ȂwPյ; OpT5UBHQx K0"ñOrj2+ 8!K:OČ=h}) 0j emD0؍DX+(PWHZ\VVxՃ 0$~K2: $Q{1^G8 B#(%SaTZ%-F^umBX~-W 4 $8.CqDrtˁy5~`Z@=XMU^9-O.U Qe[a]+S({r )K苍V1:hZP8lx柟0@'!5 +M99K9@h?5~𐽋N^^mzyW(TE, bEX* TY8 PL=: 86p9E*TY 8+ T%J)lUj} ȇ9P 986: $FOc)3Y0 ;p!F7S腎RŤ͜r`$a.Z36pq6q `ᝦޙE?/ xCF\xy\0`e8B@h&@rlpqYX{CXҡ_v !upp 'C`' JYm ͍S/{f]z c+++*Gz`&dRHKЀ^hXI`Ŧp_XosI&Zhl9 J+ԅ5  "' _`ri,F a c@ Z2r(=Wygʕs<,~0]| *3CIoZ# IpG @2 X7qU.0Q8:$ʱZKr^;gZH+46} ˆ͜Ky/K`0b` ;.@ 8uӁ)XJpEP)bLSB4ȗ 8xa3gPuw:ScA2@Np> m?$KA0$r kSFa" @ AK$p#.Ԭlʘ $N.Sp]u"@b#́Y`3GH54GeD+|s\ybFqFX& )qd5Pc(Iq: 3:H)  ( -0xF %%YtF/7 DW<S T8zYxW.6S7p4JO95[>c%8a-8 ko=]ɽ$d+$!!@< wRp7a }f.T|FC8aZӸJ]$8u/F(I%TDG2bB*uAs%wUkMs%cI yf+<\? 4Q!F/I%8yP]0xT2h ROw0EvyP۲C.䍬Ⱥ1A^T8Aax(C rJN11YiҮ-et&۫2ai&-{u(0AquzQP WW+R .PՈch&CG:)G,rsoXMj'ด֪^L0fЋ>H FKXB"jH\v}c429ȡ)ܢ 9;H6 )+L.(?X6%K "zrS-y BzŻQD> VH DFp Kp}`t%$p L" D'v9`A }ͯ 4b6!a@ 0K`Z]" dD*:Ö YY''q~ 'H.: D$! :P@\ 8}$M O? ~ '2TtbP^ɤYEb -]"DM3D wy+- Pk4+ҏy Hݽ!L&;@1P EmPh:]C t RjYl`UPMH@$ͨ+ Bɦ.&9] Yх*!L§T,#-L1*jF-'칊 { Y0Y0   I TЇ-aG'mPp*}4⃐ _9H.u[8 Pt!0ba vđ6 ZKP*E%0{UѦgHq>xdbrTm }6=5$8( x]- С _ bڈB q2d ɱI`SU+D!UӸj0\ B O,\$W@54 dAL3qC1PF G\G``d H?uOf ._I)݀)nɷ'~\"!dP!` KAG di)YhDM&ZPxOxc 'X,z)fLiW CxZ $gÐ>èUGh;I7t7}ĊCU 4DŽNj UHAsQTAGq$78d yhA,8\G""#,#<)0B_|(;*QH 'Re"'u`+C³ LeE9`AGZj⸀SS* A@bp hU`80T; ;K~oG`,  =h= 6@ -XAL Q ]H@?Š%sXI DC,L"Pd@408a]o~ N(|\'ȁ`SA `C,L+x|$ 2XE!N<%RdjH"4؛A$$ 0)PeUBLe_EΙe,R GFzDp< A@r `,$]_4CFTK>x<R-`$A@>耬`iIgXZ|,-\u8^ =@܃ P}Q2u +PHP?v T`1<8p$)\5XhRhFh@1h nshvi\ 8Bѓ IG$PFZ9NHJ J?h8Bm]odDӠ('2@AP 2#\Az\B(p fx"fl 1D)}"SG;DBA`tM.녈G.|Etk/%!ݜ.t ,Q8т@@B.T D< $ b`S@ TX4AAi0i6*AtR(8q^N$@^YA܊ S̒%B釓0 D-̦dxMXmz:p2) 1--AxCC̀A C9Db21 L,\*hHCjiҭ{p7BTX/OUnSA$- O*y_JHTmhS2F/NWfxNPDДPp`B@IS$Ԋ:,$hATPf4$FߠI58-NXH| %!OtR0 0%1|d$@#LBC$L P|B t Q,F ]#,pRzÌaӴׁR `@F> |Ŧ4@3$ QP2bB5p$@0V2+X$7'Q:%x%ߌ'RTG84d?-V pTRcɖ5{mZ 4@B@hYX1rԎ5 ` *ȥH }C,n#@/Iw@91{7pTVoĚW& *F'`=+mFPilBV X^U)U'L<Q$]{*n@DT…zAlF+#!H&nvp C QcAi.l B b8,jl Wj/Ricf(X#0$8NlĘFQ)PbDdJ)b;9:8:0@$DѬj4b 'r# e|d"N3<3R[=\P{ʻL!f'INN9Pd-a'/(0 '"e٫6I` d!5)߁dikT(h&b*->l (gĢe. @,!eƛĦ!p!#ke qПU`<1ExMx!\% RtDuXP \-E ~y4tdF r+oЯ8IX@f R0%`o `g8r EdVYC Fj4ħ]$)[(y%}ܝNpIZx#(8at(-\P wx5Xxg X@g}8Rfy( a:@dP[xwТB*re? (@RR>$PAaRWp "2L!aHT0%33jwU07_A""va#Z4>UC8(LJYH>bBGJ3\4f{A#j`$ 4hJbhodaQ ܌%y:Ћr7ҩ$U\ p@PQAx.a% o b #-A!)E d(#b3U#.3oɑ dlR}> #эn8Qyc))ZQ3hC,/WC}X%B.pEp B+QB$7 eFA|(x˗B2S0pr as(@10FHr@p`Qˤ )d \#ZE7-!|F֐j1B49 XŌo d7d|-t `Mh(BCRP`_@p4FayNaEaʢ-v |쟾f*#@,0_u XCɊ\eCVU h?`410B9 1DL&aA򆐄GpCr@ 9 ҈+ a( (1!Tc]m"U+Uc@hp': j:q!D/:4!FCnHRIOx $^H j$[+PCpp21_D<2BL x)㱹Ĭt 1zfR)HagjE13r Ԙ:(Od@fJ;l>FQ" R): !!]H4jĺ0rt A!T/Bޯh 9$&78 ZNz7# w>x&\m"5h_L.H%|Q`h:)t:me S=2'|+@d8$ܩ -G ?d# (]hs P\e=cF0r\dʜJVzCT+^i@6Kt. pvw7D W`$މ41K흕-w+ً^.Fz7B M |+0$Hd2`ϫd)X@3EXPhᄲKO# @к0( td V%RlgJ*8ƪowTV х.x@ ܸt'()NaCac. \88 _@Ɓ6.h!qbௌ `s$8 DI$DOJtaҎ 0BG7]4ր&% 0%,F鼺A@٨ UnL"6D& , B 0 $# –;&Bd 48 a#N  )`i z0x**@  "/Jch~`il ހ0Xaar$ Z+ ,@0 _BD0Ƅ$-Za'ac6cHDH>!%DB Ôm7zf&^#P ^bb '$F^$-J P: !zG-w"/8Bgc<R@vr~`&2͆l- RB$N2,Zూ1v>? .dE D,%@/ NR?RAh1ā7FڂB(ޠf #\*9> b#!PG`baRhn1VB$h ` B&>Dw@nJl bA z!fha`NOό~d rG1ΆBfB܈,0G0kĬ,#X.$`|jO-l;\\Sc ]e7;S8Z@] ;0DFi 0$@+Ö0Vp0L2$`   6+6E-Bhfi>.QC^<K"8K7NJ-ʈO@-b"Nj G(sf`h1BGd . $&UhDfF&i .a Z',0.nLt jqsMK9 F,;R&-0\jϜ~.`ʡ;fq lAܒ3@bV7;`+ڂ:4e&u&,>96A o-,BdF0x. ?V ɴ0BBJ2H  b 7 @VgPqD vbpW 3nۘVwB-2Xjr0 ! 擶%DBF,!9$Y ᣊska S0DO`]P2!F(GnlaJMvg5)\&/8f3(`>BhzN`L:#$N=H"D7{!`%.tE% ! * D@2>ADb *G$nInP|Ajv /j `:( m 3jBh @*a&;dAoY6(4Fx``@j `Xi@H "<7V ڠtK0΀@0lA#f$SA\l$cLhfR/+7t q7D0$u]$0@2 Ȁq4( AiAT/_*KO73~U| 9["Mab5 !Dll:l]RgDZu &qt(>0e"VIH hA@\!,{I B, ͨX3?BnCi;B|2@8o.~\> f Dok jDXy ^1Fsvk ".*KV-$?,P+t  ނ,D- >VAAFtr>M, Ǖh&-ftl ~aՂbFϝ}a{%8z'x A>LbwQł%kX `C2a!_!ab` ͂7RNG ;|F@! xeF2 180gIh! P&%ZsB+.+}>O-hpè ˂)P Ax\A@#,หX/8)10 pu%?B0L (>^\u :.0†`&!, F#hOU`& HFM45jBVXX*,C]_ڀawLv3 "L)8b_cfc`0z e a&Bq`-T X׮A%N`H{;Gvi`"4]h_\BEf jĵM*V>5UP# .)< X*Iu@H&hld9e(>#o:I{̑k,*\9Or aFU9Yɍ$`&qbb g <]/ic Fڂ!v D Xʪl nSP@\`Kpr(-SW6ah#`&<$^b7n!R?5=Qxxnd$밉GR"/tc` p95„ac, _Rhr,: JhZ-)=A*Z+7,! 8 n@\Y ޢX \$Aa`_ VXk,`#+- \BeǟPowZbH z(*Eɯ㿌v0Gb hp$e9 p`^$ @uDzDdp$$J yϒAU0Ed4^Z%L.`k#b@};ɦ 7Tp |dv{9:E ۍ|pB\,7ty #  pO/^VqUGBS`LK#%u rQ@7a0 #0@1”z @3=[o`և Y"WS& ?$ N@C9b5&լ[ 6nPp@M$=ٌ&Ԑ@&j(O]`VZOCΛGγր 7 D0TULWDq IEV"Q0"p TJ@IP@ #P>0cc5ԼEϏ7 |MdN¦Q`$+2ɲ+٢ZON!uxQd#H& 74a GXFAEiOo<{YOlG; Jh Ğf9 4g\^[%n\sR}EKQPJ%Ai0 0c `$9Le'TAE Y| oM`qZ+l Ɯ3GS 7r@+8d%v5'|uޙt@O"t>(PgFa @0e)&WpjQ ^A?E}eP  Ly [nX?06*pUA`T% L*V2%*~zp!4A ^ L P{FPPB++hA?h&_ 1@,PߜK}V<4_Pl 2#^ -40Թ7} d<u|\7hRt}DŢL 7rq@mrlz`/8ȑ 8#F8$(A-6@"f_hu`V Ĉ0޵%*Ȼ k+Vĝ (h2CS^A<"1 MGw4 &tNUbL`LP#kr>@a%u8@ʞ!$B`ǫgu/ c8E[VEA&8MȾ6 zRt@ AƔ*x+ GCYto R G@0(rQ 2W6"E+i&3]-w b,P{'5P7prFg_G FO21D{a@3V`0/b 1dHq O)-޺0 5 %I%$ *$QGhq#_[-_ƜYfΝ=3POpHa @>uTUD3N9甓 ӠH9 ]B-,)*XE0`t[&K&6THӨxhk:Fr :"H ' >Z0B:xØ/U"WCBM ؈H^ˆ`EX2R"#6hȮЀnj6z2/ta|QB&E^dhC/"ap d@! ,}JH*\8p6Ë5xG0AVeϠ21Le, I䤲Nxs`.B f90 $p@K |t$abN@bzKօ  JW`#G 'H!hd$A`I (H!ZX$8PJ,gn9FBO[t€2.}{6MK0X|I0HN ;<`lIOuI2h]|^nQ' E g"[vai; @7;[@7@\@1z-HpEu䜇DiHΈ!lʌ߀ Ar\Ag07p F7,Eh"t 2TSE= T|Yo)ud9@&#H2B8A@@@g2D *Z&S8bLrYszoتmr2TC ;;=8 =8P\91izp]@h$$\yS S*@6I,5#;6+'肜@x.$h@șK ` #06,gW0cЬ 7H@ cdc{ 1h1A r)H348cѲN(,^)qhct͙ S2T$"L)s g-Uf/^4A'T[*,x.Ktxڠd G޲ "H3 ?D pa/%2pI(PqI È79~ryp[zA9 "IQ0反A3'$l+E9r!.6>`4# ^^cCL[ yhmi-XY{S^]?D>F|"-T+#  =@oq B^ 7.qny7H "E-,Fy 4uS huz%s\XE@| ~ 64U+ k4d8YrgZZLAd"=86CM@:Jx5$xvjZƴ%YP Lk.0\ %lŎD|èI+*s+cTA*< z * L嶦`CNУ @\͌GpXNva\i`)-2AxCr Z1AY: ȡMp2G9Z4 e@+!KOqʻ b ܔPDu O[QiCBe.a7ԨZ.d@QA H*uN”pyAp`(@(FHA;j#7u TB |a1Eº*3o[pS}h Z)|-:Ri LU98#HR~yBV95e'XR5 C @,'չ`P.rMLk烰1'ԦZ8+@FbbRذ- UĂ@B?npGq<~1 3a"4BM+ Dp8nqSa 8BE p^C,o;# Tq  ;ŧ~ cn!'P N03#}  .<rɃ w{y@]7ucm Y  %5. b o0)Cv%`Oݖo80V lϰ7c|Q(TՐ@ $x !chx,o1.] R6'ܖRjJI _V;q "`4P@dUp lӃgle6 q;3VUq oRib a%R5QW(Da"&42W 'B+ )wt%R$?T*V,H&r& ߰CfT pv$B  .I!0U7۹ {ect.AfW ~#` -  l 1pb0f^(RRqM 03088 05JoI IJ@z}i=Z@H 1~wEFrfZ ~ o`5\gM8Q50%LP Z1q 'ad.IAc48^" }Г G ` f  S8jh%' P*aӈЈ_K1V#]dP)}[0%g,I,LÐ"` Ή ~4-"vibT(T0 _zP H|g"xlP}'PS1x-z 0&7x2/*z45[E{ ڤ^ q&PLT!Pp ) 7` E1&A"#`cm^ G)tU 0)1rdR> .CΉ~[!Z@HpŘr4#4V3!QF`0 ``)㣴*J,ftGJRb M*\uXS&;` 2`VER,:'taWxӈh 5a`Ra=Z0 0 qr ="-fKÞp r p G Q˵@k#C\4G]R$gA#p]v ..o+|( Ff]FB1%D2)<pa=T|E8xt"}T\ o s03Bq i,u#Qey$Y@8/!P fYے )izc r5aQ(`%uU> J\KR3\Z`Ȑ+oQUM,9ՊJTLvq)pEY&C p"00d! Y0;?CrגGE+' +4<@5);D,)D #{򜥳SLS K  `=#1= '\?[ P߰ &l` 6^6&5X =B .Z` ! #Mzp bPuzu0>} LÐSWI?oёM&7|Ae-Ye /xSFr8.N(1}-t0 Y< 1b뒢-\&7 }|jXtP6E5n#ZE$Y@1T'V ,V 6XB,$Hi'^I{X #dW@[h|*x lA%|#ЈKlu@˙0ĬjŅcB Dۍ%n F `G97E`jjUX*%8Y>K/gɖ~z3Ҧ:,ZgjaIbO ^W!FbS1ÄE 04$2fM82Ks0P ;ج16€`ac֒jdP OFzd ^Y:0!)$:; 'p$!VsIw>{D_KE\qA{OMWjFcc'G)h>q4Km4a.6!o@u8*}G"W"j"ԁ,ۍB& 6ɋ`eb1 zEz)d&M!&x|aڔĜK 1EBC)I'zaQ0noJ %` f=U5+`lI!uLQ"֔a(m_c+C0}YFW⨹#‴Ɩ\O~IAy3*n  zL.w4ծ%4C{$0&<2F>Ix8^lFgOrJt鋤g8vF0Pɢ4u̳g QA!α^2hYu(|Un#;7 dņe -ySI#L!\O'$x&}Y`.s0˼찀T 8z~y'A`n83 a$" o^Bn2|L`xWgu ${# ? ] z`Y(B5YTMH4 Kz P+=6qad9'V'=ht/;;=^x"*aXQgyQa1@1z<`Tp̰a |4 b`a~! ؜<Ѓ$NC7c E.3#?I B*90@.mhs`,۴K9c<9@3P$;^q P.̮bHHو!! \Ȃ,8wjKN7@H!: aaH!=0!r5tmc,pfYt:zq[*@D)ؕ@Gǎ`Vrǜ'"_ ŋX +8":+Čwx8j㑸ɹX4Pi hK`PS2bQɸ%IR< H `ЍtR'0tbR@==?ٛ!P!4S}Ԉp:\q4Z 1(4 *2т$@5EI˘A* )`%#iIccdjayzPO<"%pH0Dm#7xGt`O-/BX.isij.I>pၘ<9w!^" `ːP 2 7IÅ4HExɵ3jMj 9H7iKHB[OR-)<'ʍ3 %Q#I09Ӄ'/P/(BPZU@ЀGN5#ˁI股(Jl wQ8@3wq+Q<l+e (_iKX:Հ4A$2TKXIƂo 64#q%2%@EK8MLMd+qX)cBεry3 9W D4QH676 AQ irPLp)jrFĚ@8[=$А+E@Z 1\Zӈ[hA-u脉H(L0p0b=Y_y3@>9%賋؞8手2: ⁣8wЀQ׽$-4NKI0b@(1)<l8\Q^~j ˵yCC[p4B?>m_f~]@a4{ѯ PnD'҆ԡO`>3_CȒ $AQaJdG\xMS@ޜH,3Ԉ=ܘM4`Z&i )Π@G軉 "2WB 4Zv2jdU&iipfg&,2Rk!I{`e.je\݈&(s(sókVƢ pd[j <4J=ڜAK8 l{]P@7H 06mLZMj@iP xG؈egޅ]ʠfR2@:42 !@ɶĞb`YbxYρ ÖBd8~ al0?hحFW`)]2onjz k @P ccD\!kp[QЁXP@j4ˇ#B\8Y=7+ѹ ƨC 4`oP 9QWBO$:3̐FP9g;:VLQq$jeUhbjzXX*$Ni[]UXNzVc m{*8>>B 7D q؉(ǡ$łsM1% Ð1%#5SBPpt`Ps{Zo|->"Q1YZ$1؞vJ&i0uXTeIxEL3:`EHHlq∅B(v]snRtVY6<@_,jyh$"V4~pĸGUPq;y J(WI0\(Ԩ$(VXjJtJ&=?8@{ZY"dDov&Ghi~G/ 2h,|`@pshXPY閙Qm:V gx~D2$@,A9sB^7Pv6 08 #)9N1 (^X@@ QÀ6'V)d9Ym# šb.$l5%YoV*`{F/PJkkcFx{2H\`5Æ?Da"{u4A`` `$G.$b'{(r)&. "<'h"II*I1,7y98W278ɸZ"Kj.8nbxԊoAI`AKl[-*ibIslu^D9#Q) 7Q7[BQM}>CА2M J 4Wzc 0m6ce+2ڊXe UÆG5%XQH@+P!=#PU)9G)![Z71-2ASP/Tc(jQ9CԲ@:S3zB`8D~$ft0@"lv𠝬5HJ=h?LOB%Yz3/7d hckbAI |132rb^Vb_a 'VuDZKq96lbЂt v*@?!=C %s(C#FF1?QUjn8#\Md'AfImKz;WfNA@@%C>@/ʁ op+ l dDk\"K5 i&P^ݭ  @O-1u Q!´CQp0@YU`.Ђ `)I 11C*7$ND``d!AFˀR;CP;}3xi~.8(6+@q/$Ȟ:l v-(P=̥;NE*h Xy [؋ ݒa R @iF)M/zjGPhTcA{MiBT @,MYy\8VX ,V ( @tA;zvkepI`.NLDƈ '|"A|''hqŧG/d>0:[=_a]ZR y,8c z!V`% pvi*D,G'gQVv:S( @}pdI0$ LT;9N̈$/- %'-{8M"p AX"LȀlcIAP=xCC-ԝHPa*ٌ/p=:AEmA2CQ- ?dT@;U;f6 9t|=eM@Yb !!̉b{M\.QP[>@RYA8gTbPN AP9 =(@ } BA0B"BDgD&O*<͙iQ,O<$;;B@L.: L9d]uWdg@ h eOT^wˮ~M}#/hBt1A\ֲ?HCWڮ} (#:fY%-4ds/mB`Cvs?ɂD2: u@&D݇/W C:A! KN JNݑӝ~Kn0X o{j m`p)hAГpaHvx,(0@<hi0A*\xG4ERh#0< @')PC raRHҐR PAEAeǠ bˣ$hso^ )U +Æ1,`Vtrdɓ)W6B? M( hW+ji5D9@0WR(G@oU(v\1q#2l ntmK@4yc;RM}'F$"&˗@͜ʄ*7J$Xr, RYC8 9\+ggxЦCR3ȤIFAĚ`H (7-!F  )YUҕUVrt!# J?c(ad+DK-1q"=@Q~i#/CA;> R'th'{%-]%% r2Juy2SLCJH \4 q>Cȯ! P@f >Z"'??Z? RNESɔG>n#3HS--p>+ +j j~Pdp'-1H4.BԣKV[Q3X̠ plj1M6@2j' X,7`xU Ncv#\$6)%`SO^赏qD~j%aZHH(^t.T>3Q>҆X]hxH_ :*,T,ib1@"oAdC+"T$!B =@!dg8Ɖdd!)lFeh "X0*PщNKJFbXoKxCr:r4 X1DUU b+EMo%" '+g"9#e#z PBiDCK+䐭҉#! V~G`)$Gp @@!UJfhԤE|hbBVa U6tl.Tу`>]hj! d'ۉB*"y 9Ih@2(^yҔj%ȦREŏ"9Ɇe: =b iHI\-< )V+@<+K$ B"pqx%d23!AΰB 20%jG.ч><@H1x0e8 %ڀG#4jZ9 RBJ-D':F#%_\ʁ:!hW\mBNbPĐDC )֊ D"1Ȱ{ )(خ +%V1=TФǭP bQ%N4i vv- 8M&%@z9F+BCc-2 I[H"ɅBjT剮R勏셛"j6-p[~cRO8*VXbGP0I)) #l( bxIAP٤>I3L1"tH .DMUTD*%I>W cL@n!1_eHU)~1AC2(}*6)4 KǞ$tm+Z])}\v0@6v8!MΎCFW[W`פUja9Ap1(D I'm/ h x={ #C T1NZGA`銮J`s - 6r=dC7B1D%$`>H +$Va=v a.c5@䌮gy#jkD*&kWH$(D؁ 'LvoLX^ECF.΄EV}FLd($bB@T pxt*ꞁ'.N `Vhf A\`"fXx;t%$L<\.V=G a> 2p7:0!Pn79Kգy)@@e2h%Ƣ~lN 8Q~'/"xA)+J!,: ů 'k!̱.`kT!7m` ,q `IQLJSz!+2 #%' %d>b"tF+B $pf2P=#(bMQ=N.M"8AaUnڃ("b@#A;piޮzoED" G ?1 B0`-Ktq)Qq Þb}L!X&( o :Df!/6sRduL|s#كT֣JS$fш %*gʂ~A&67{7761%! vC$ ` - 2^.mN R$D`j.$$bŒ@A/&b $b0]Kc2b0A r#(&X ư "'.@#,(&zR`$GopA ~R &7`@PFqfU r)L05z *zl!rrqT $'<@4$D'n=%O$6J c6֍%#L*bF/7S*X%V$U&aRf~BvrLIءRRUUUU F'(Cb UdD` Ͷ L b@6d1TVK|VA Z a3AB5pkJ b-,/$h:"*KCiGD:O$.QZo("1>H%J3" ƊZ%*@a ʇo=@ :2"ႜ pV,Chg' TTp @ b@Dlc!9p2V#A j>$)J_DzuPVCR)(^pAMT(k%$ y UiR2w,x7>gU#r[$W4c1R5+hm!a'!XaatvIBk2U@~ {?$Ї("yOLb`Pv\!9zonCb ys}&R#wnlP,WKFeU4Ecvo>H:w<΁WY xbnS&=iУUv&1C dJ:3`Hep+I^aKl!.@!uH#7d2w&€OҋR.877PX=C)|"Rc~0k}o?,}B9*L x/6Sz%4B<(u<†'K@yx)WU?ݐFi d`ۮ 1PYg8,"wpK(o@,CBQvA!Z#)&b"& = M"">"}L^K; ᪲w$*Y@䙃3ʫRCBF5Y2Ea$=.Ҭ|U"S^='N> A`U ,Hl!YRJed:bL a„ xN#-.xn!\{'OiT!6ͨ4x>BS$A ™w0qT BZʃ!{=یC.?KPQ$ bڌAy( N!l.DbAp{֬pyRZh"ѣ|V;NW˾`Y[ˆtu`Vi?:@`h;" iO p ]u;x "l7E # #ɀS?@yB9GYp(b27{9Q9 >CbƃU)1݌8L` Ô,b&N`<αlUTze =db ]xuh0 >2Qa A#; L'58J8k_|=]w2b)D&<&BA>@`T&q( J @ 7 *J9>E7ZbzS\qZ3D.mڣLn`/BDK >{Gn|0zqET\1y \,؆N")xlyA<1$āݎɋ͊ak=䄢 JR9OPB<8Pw jʮVRUY(hf} $1 A"mo QK2,-9CV!=L[{_}'Ш[ƚcx@a Db| #3g3xbm=@TU *P wm9G+J$ŒzC eDB\4&)jjJs ef\Ku!֜+-@$VSn̗E0d.@TMՂW?r;f>+cD࿀Ci K>Rr qq1ĉSl1ƍP6D Dd`Up @E$$h9x`(ҤPU7 y 1ZYF"&IqԝK"ވH6pPLm5 j6m5)@ۻXťGJ)A[f@hN1rMp1n̋o X"`cYMZm*\=`&<8 !n8qECTDpօ@\VHhAI$EN gqTfGASvuRXZ,OQaH>9TA L!K-w$ ?IYRوvPUe@Ę$7xYZؖO;nB#*$o7KQ˗6h3%Di\ey^e(Y]!mD)>@Gh>^5B|b * 0"#$VW)C(CFIDEP&> 8RJPK3JyA48fdeiQBVF12BKR@ݖSRČfiN  /`C'ǀDy.pâX]EX1R r%v] @P 2tq@`-6{N== @ ?fҏR ~#PqEWN&Cv"'ݮS \-SIm%]ڱ$# wL%OPVy@T#LUȈmgCcim24$ t&Q|1 `,=EDAF&DHTHGtKDRADQ?A=/q+mqM0b< Q 1 A rFHen\gFRE' B!Ѐ)8eΡ1en(R-/on1 [;AD8A"$\('ρ jA:iKsb[P0,pԤF5#>9aՀɜ\4b qbh✗5(&H^/ؠ7/b()2ghpSR{ZJA$H@,(c!Y!8zSV@CQA1&)@?~T,Z @ C:IC411V[i..ܚpta.)(IM'=99hl pS.-#0E,XP@E1sb`p4a">#-pfnJDBFHtgMDQpOM+iɉgA&秄 ,:*GVD *}%5QLBPE :ёt#o`5 Ti "%̉M~E(" 'Jطi!nkD%¶&fęVt a`AأjwL`'Ov@c1A * h1 oXHҺ>ĢpmX ^,rYqcMP 9N!҈ ؎nAB6F0RE[QrNV| m@0Vp9\CS `9DU()(\׿RUSQѲz`P5L'8Bf!FZě.fZ-B 8jZ,&\G?1xUZ"\J  @%4Vht%Z(#Rb`E ޡy+ PW^pĚ7R #^tPTV ZrI.,p alqbuމ6pIDl#I'Nz'̒',PccN(hSPV$B9 U 8Ia%B9=: :Q|wA"5L(fT@`  a Iފ2s^ Pai5 ECHnId #j =aung~ojDD'ɗZq>]r)dQ=Y=bӸ*b$xҠ6k=! oΏUXOE)ND 눏|={BB /5Hxjnda HD&@@$ F50rc筄 (6 ,6;PX҉G"C|UVBFܤQeŢen{]`KVG+$&qpW52dbX G I:`qQ{ a5,9bvS0 2rUi PBlV|"o v7#&8+s x%$6BK $ +L6EKu'K=X22jg52d%X2%*r, pnFȓ>Z]` |'P6E@`q `_03 `?Wv `?lFz bp e/0j 2֑)NQoH-sCx-',PvQVvT4DL"ԊVMmڐ}jks pdzT!%@N!GnsE(# t)p&P$H*0Pm xHR $ra e@ Xؐ\`!!+VZ5wCj B`(+&v%eA~i8($!k4( K.!aG-E.fz`$/#, ; R'3FZm5x!mpapB6b!,-z XeR%e)o)%)0pSz9Fp4DY ,@9ov3Ib6C)5 p +RIhk7 VJWV XqwcFL bSXgXy"G13#i vĥi(u 3o6f_xc,Rѡ \5bCDُWsBј`P+p Vl&l1ՠm@+EiC0xH@ tBi\2(>^:#)^z)Љ)y;ug6z{m0mp p]@ ]>,s;Ay 68R ˶ +^ʎ;8tC}"oIqtx}C8jbBQ-G2 D(7p2'0Ou&QO=l*2aҽ @v;bAN-e Phi\A Fs Zɔy4| N P?Yz$TG2Tq ;.Ǫ ( |R먖N I[ ʲlc#g %b'`5ˢ1_7hs1{tjXg9!>a) y \s=: r`ѓqf*5z d0 a0 '2 ̷!1&$ $,;^JN Zjad6aA27+tV6 pM:U{E0#.^.B, G p 9_ݢΙOu qmUP܋rq5Fd"`PAC qypg!l` '@Q8Nz@ :H9=ㄋaP * *@Py5S(P3[BG$c+zCa.`62 58`l%e"GTaZP Ts̹pc ` . r1 Yvn j< ZI d `l@Q&63\>~ފ@p쪲 zzN9.zbP# X L0> pH `|'2mM:A+%!tj#8D!"SB"3rb`,1nMT)@{sP΃Z@&q/-;=:1 @^ ͍! a.C*<.v,޴r$& @s5Հ'p0 \@p_ Q9nPQ$`Eol@&Jq@ Xʆ:ub7Q9hsK@҂#zf(?DJezVeJ/+gR:.:S3BP/bY~KA1`pIhx\JYV( S\ZRbU^ (y2s|jD|fW!`0G^sUTکrV(V$x!P!( ld o@\p^`. Xe-aIEFТE9)V*E! jPtbЙb"cęVY $,R*U݈#31"kP1xX⡪88Kqdz`g&PXIUL6SNRHݖC= h)PR9fMt*NUt*"" F9л#I! nf‡gYgՃ c 30 k$.$hW~|g77pO PH A$B 1 (g0H…>r<'t\|E\|+1I0tx D Ud QK cK*% ""^pad&)F0 \K ^0K&PAA/vBG;T806، ,9ԧshT{YK<6# zY?׮ qe~[p?`Gܖj!(9d#^qⓏ"oio&e fP ;Z 8ёdJb1`>fRA dDQbN~ U h`e !LCd3 .D2D#l@!\H#NA*4 &V"pB,X L6%i9ȱSБMa`@$p-a&HA5WCPc<:_l8( Hd AH-%*q [P%p9|X%xL ȟ󶇡 uyCOxJiƒ\ t8)tv " x! Lz1&.Op R3}C5b`B14 mmml!sCh)(eaL8n _4Y&T"#3W8TI(/ P#s`@n4iX E0j#: D.!J9"! 4(uW"H?r:ZbƀA?j c_ϨZa}n5bB0 eѢ tBc 15 `z?Zm\j8Aq,(L(Uʈa[ĵ>S|1E#*Kbo>I@g gW kbRp LzdFd1 JkzD8؅L#z"w=Qp00R0JsƱ$ t_x\AgB!9<B#~)8OL<8ƴxc0dAz]W+|Yo{Xlq1GzS|GZ/y ?@+Dx ZBD)äs ub'Fa潿-c ALw ;scn@.ƛ ZPTeFT TB!4dvcHvz` `A8B L|z5oCaZ'ùY@ D$"FAyg-1Xuޙ0pc8@s7A%X=81z Y㽩J7z rxLRUJų-S"N` 7o:VDd.L4늹KGAX&H)H4ob0) >)(Ft GxS( rk#zS,&8+ OȂ,8:8#H8qP$|5y5ꦌ-bx"x -8:x# \-钮AaBi/" 1U7&l`JA Y^I/"QP@ "SAeAԱjXʛZ891XB+#oaGZ907p:l+HyX4\CiavI:,?Tz8ˡ?䱸 |:\a80P$X2[Ƞ Em=ӹ3b籗Og%Cs:҆%(.((_C !XU≁}ɐ 1"F!"Y :8D8a;t;4{aZ)K0iжG~0VxPx12[EGi?X mo\- Pp ^􌄂ZG``"UKjh'-j L.Z MĽ axHT;C0$dӄ>G+BUFs48J869P+POlxzDUD; I AaH&1HP^ŗ{BjtT`oPQ(F&QRZ!Ш*)ЫzQ[#$P;؃f+W<ϑpзLvCy%:ؕC*::j C,XbIN6HX2 (0_2, ^8ŅTh(VXIDU "3ƅ#u+\EpLx-"*U@y( U%մLЮeVU .6s68oK#@H" Q˹Kـ -HHvl)G؁Ggƣ }H}M80}gy\Hb {PЅ8VxT*H@+1 aG8aР3bBݳo D ×Y\ӊV@#0+NdBC2Ά,D\S`b@i4 M6{8mȑ:a( PH#(yԉ0%FNpg6PH"W]e>;Р PA8*%pDI|#$\ga#0H*gȅ\h}BKׄwp6#-R:8cAi7]|={#+#cDGc+Kr-Žr i~5%_JܽHNps gzsI[!Ì*PQbn1H~KK u##Xꙸ,0ߙ5b%Hnxh5'Ƴ[ 3枉lp ,f[Ph>޶!$ 0oZ!xۍ7_8$C#0.{IcYS2g<38mc_)i{ȋ,D۫;)B10{Tl%x9!ZHASu kZjTФWOi( "NPb(;#::#jB (u$Xp?w)֋hMc\kp0k\ϩ$0`y+_0W P[*ȁ%: c0 O`C^s{=񀇃I>^_DyDTD^O6=W{DT%O*%*ĸrY7xb9J>g@SSЂ0~$opNPH-9 4a(&'w膖 d 'hY'[Bi1*7db:WY6PM5dDf5H?H8UWuԩc h%&G04s``Ziec6,';H#'XCx`Ni @] ’F{Iԋh^VKB@"kMrzG(XR, 0}csI7x UDMu :\XD:wvZ" V gkC#R@8G@8?FZe-)Z}1ҹ'* 7cSzkF(pȺ Q`Z Qt16 $M Had AQ!!'(+o1M`0찃J }RQF4C +!K`;1@M PDe%J2'UbLQDMɁ Pu<0I91ȥ]hAs3 :B3oH?Z$aD7p|Lly`অ( t3.6b .Eeር@+prϨ.BQ |3 02vTt n74.3@`H'+Ї>ln;3J Z$mQj@xm(9h M X'Qd6ȁ'kHҐO11Yz)/D(c&;b¨ _}R*$$qW}\A ?"X$D2ZXhg8P[q%`c a$&# \q\(ڎ8tC kA2J; ` \rz8IÁTe;?x붳Dr;;$Cr(ՊQz1=^,\ !f9Z\!У~IA,)c7()QP(P8A U 'a4!>D @9d)b>@FIH`(F1%?""RTvEX8r4 \m3&(F\i-s! `V dL.N`?T € _b@Nha<8B@ČQi7̘tb@ܨ UC^3%W,dAy4=lbE85 nD(dVÆ< J+o lD iUnxP@k]dT w~T+:"}7j#pa92Uo c֠V(#8qK Q+QVVWgRZǰɑ)~#*H1QPbO'.%Kvʁ t12a1P,0;( 0Y@`3D0E,"H3.2 ,350 Vj Y/^eڑj:kX"ÍMŰh# @D16:Nt npلG@cGu1(UIN@CxD̆#]9gt9o$%[  l}yNX be`C` &)'a^(K#QXX1z ]"A f v*`_83Z 6$bH;\r_(e,2Ѐ`f4zp*VtwsqHZ.A#.:8sah՜J709, r d6$ E"4"rX:QT#1-\HAH0܌1cE1(`%jS7AH- 1Hv*E7R,=SM@3<20X?(: 1P-!|ȋ@"AxpB) 6؁[C\ C/AF,pJ|Z`j$kj-@ @ B!]085\6<,,hQX}L$L@xQ`(&mQA Z$(J \+ v`20.1 CϕVc|P\pD4PMؠ HbDϵW1F .-%RbqI5 ЄAS'̐.I4CB$2ԞM99 *(Nz[, QA'vC`P0$ 8H@Z %NtPB/E YN6@*Bz@BtQZ h>Kt R0L@.BVl`(NeLX8ʇRB` xЁr>&NE l 28t xD=CT J1L ifl՗eL/OH+ S+hd%o HYdiBYlA<5d@/Q@/dRK)Cց.(QA"d 2/B6C* t 08 80) Q @afk* EJ Et5@LIC-QS$ Z u=&hBoG0xKE߳Rys`xZ؆U>)C PѣB\̙!w)4UȌ_Lϙtq KA `HGZ D.uI'C@3@Bc=9CC Q]dy@"%7ڤBG]#d/`R<::. 8 ܄pƋ8s"v1׵ @9oAsC8L]X"W WVɌ($00 a.X0'x]o} 4bd0"[m>Ć̑?X'L0:0h c@ WVN !]6BqOdo ezRA(a\yB\㍤:M2)8 K!D4@ELjA U`id 0e)VƮ`ꇺ)q("qjz-3`R BHg8Iэ52COǮx*P7¨5!jbe $*Jqn 0#``X!줌o *gp/sT W\b釃:ڠ~xQFc~HBB KyFd&T(crb!0\>xƕ7nX8$uʧD(K0L9P &a.!; n 4`O qh VLUT C۞ѹTT*^Xlf)RQ`F|g;Yc >$=?So.ă䠶 K[>k搣w.anOO>캍繁!|\b)oHJ^)^FN)g^A8cOAJ<@{+*42F x r8.qU700`' O( B.a=H Adlv Z,@/b] k1"`F $L{F0,,XМ̑@*aJdlY?ş(#qcChhC0RK-eE!<ႃλJ!|\,{.K)'’rbt4 9DwHJ,$t Bl8"#|JV{R00o KeDIe2 !Y :җ: 1@><@1rg xx Ҽ: T u\bdCړV!`,0]*R hY i`2Vt!hJ" nÀ.:,$K;n A # *Z . 2oͪ iܬa=v"'*f"Ur@oDa&'DzQVN@2@J)&` J.R)n@N,cN (A8 @7XBd@r z,U$" T"ʡF >/ da ~`.14/SjSI q%@JC,,fB^aC  I?*ƍ ,AIzt Aè҃.L22tN ¶.@5$d\!%!' A؁ |=gtfR@a@`K x 0< :@JbBmt`9a: .f)lXa# $&Y|a#!@` 塸a2$j1tZCl`20ao) ܑ)Jk)N[IHxh FOZ#c;@IA p'J:>;Hx * fS?@[vLpE]-R+,"*Oޠc; A |A(E <!D>BSRVGW!\IdB-EAG%ޕ -om0c 9N(iR!V*c,!Va .7(Cњ KȦa3(0&;*a@"8f!N@EE#1C$if/Vn)j 3 CG"e\DG>f/+%Y*7sYF J9`d$1&@Lt r *5`4p v)4$B%(4v !ʕZaX tg*;"UZ)RRd+ f`!*uV$b`R0N7*v"2U !$ !6I`3iptθ@j0N l$ j''V.᧺EV{m8pģ n6}‚2,J~uN Abf` I ` <((%lXt*`tDB4NDCzCXiA~#bIFjN:RAa)TT.Wui̐!ihP/3ʡ rN$B8`1`ш5Դ,Р!Ō߀f18ha9)xuKNd`@Ҭ#P#d>tkGxJ쑵R 7f @M>–SR`3j ^v]6`(($)a`nB $|9F#tbɮ@J"@!FE4 z!T$[k&`&jK68Eba<U`..@[@Ee)C.rNO2H#z7 ,&M;5e@ jBXp)D0 `J02uJ"p )'r">DA8N<ºq&z`k` r(j,l](&d+=KJ!"ߐaT#4RaЁb` rp6Q,eq ,5&a B&20Vsonދq@Xp nbp pcd )t)bArjfS+or ٩Ѫ$.辣 ”a3@#pഅY r":$kL|)n' rak@< B}!\` )b.W_6b5x &JڀfG%V*WiU5-./Vlc&j3@𡷐Azq2A\#!0`e1,ߠ,۴c bz! E(}B>{A#cY D>F=r97" }^xQI \ Yh}3`R>@ &B3m 8A {ֳ"9b(]vO?IqrbO81`^XR@srΉ MEc:a6/}f T2PwTi50>A.\kf,Ņj%,RB, 9໓XcT9ԣ͂uixVJlE \ .`l.9[:4bE#i`! 39$!DBkRrю C v`YD1z¥yz҅1JR m@fW$ i|, Xr|fYhifl\p $ &+mЬobAtG@ UK9AFܙ[f)"C|fqK I$!A a{ 8X5xDsqɾJxыnLD|c%S k a.2mGLXZ=vX ۜ 0]4;Y4qLp.=xs fL0 AAflmăYOK*/Dd1U_$A8À.i .d8V1ӵ DDI=plmP2ym@ "", wϣzlW_h3'PHaJ9T7AIT0I`N'pS/7Qh>dI[t-*AlB{<')OHӯƄ$N` (ԅ`g[- AlقMa#I{өb fc,}RŅH*+frn!>iT|X@$-'8%7Xx9(Oц>A1XQ6\EX XXHwp 3@R>4jYdj*5d,( 1f ;X+aDo# hً"d DHC#_ FZЄjy?  w[X}02cJ0b |c?1\)?0[c/A jp `S^;3.WCБ`myB^A`4E@s[{DiI( K@9V1 h'iUA7n/o<x,q Np G]IG6!D?h*|Q4A~$? " e`8G1&`0D(`._DZ]B8BG&D@DFĂ9#^pD0@/ ''QqB :RчBаI:!2C!<Bm pZ = hU /#@X+Q5\460wpK?!FiC|e @3\$Wx"([Їk`u *$Dg<Άt J,, *ͲΛI-6![LC:E9.ž!SpCa+ zW,!XP <p2)P+P: b5|1!'nP paT'Afv@Bz (( զf2稃i#f"6+q:pTfAS/K˗1iD#WPITp&-rQiA p 0 6 CnXDJd4a|BA*mS?{ QF9+Ep,pT9+[eDp6$ W 7*3 ]0 'v;B..IP{HJR$|o s!s|8!ouscr!)p/!P8RQ5jQ]``!/2mH604\0| 3sN-GgUg71 "yr'ߐ08@8x!XI??be+h &Z VB7r RC Pebw! v77'YpJve^:Ex2}4? #::kP)$6h +)]{'V(]-Vcbx//fo6choYc!// ZpLg\Q%2"a Yπ0@g@3 foWgvO7 aQhǘKw5*#WqaEr$_${Z N<Wp BJG`kHv)4 P6 7>2a7ESy0x) Ua FGFlsaaPra`Ea^j~1QJoj@ ؐJ)HV.F^P)R:YvFI =rXbl`u.tKWp~PXcJR$y @&p<`=:gՋN8G@ s+P_x"g%u*ew ,V1Fi}!a j,4qO Fs aRB) 33 + jhTPf+RQkmhZ*@fawj UV6x REbJu=ϴд/GyPP!8K b =ΐ # =;p"KIX]?.lP  "\E p 1hv[5gf0gĀ"O'K8+ ^($RuP0 FZ%궥}Pb +cQa2 sʙ n44maA;ũBI xtE_EU]R)^Pk9hDՀfU B B ,@^)KR bz r;?r2!p1r @`Є"166arq $lm( r? HgAs6wgcЀs 'oh8u"$'f,1 YI CL[(P ;[A& Ű4Iq5p'Z&0Ր8hD%_1ylќQy 2P9 w)$1 wDhE"j9 X2@0 1| SXI!Q0=#sS!E/P}M$V/rQ PΐcLg+T 1w[АqIW W?4fQB`lA(ia >@ؠP F,k0{CT'>$J w Bƴ{>?@Gx9@6^feVQհGaF ER&,R-i  ajt`5Y ED R =fUɬz/ /` J) #"}/K #}M0'|Bm\e_&-cυ=.ÉTP[d

t堍2 eE~8<aV* .= C  5+P(#-@3 8rps4s @w["#0\yq_Z20/ Xnh5*BQ@>o8AV& @/]mI2CR0IV IZ X S'ItrŊ U+(kNX ⥏9Nr-b/Oy#N3O!S'%zE L@K@`{'JY!GVF&fH Xґ98Gli)o,ٚfh dzi oNmD'tQa@A8g @)*gǀ:&\Id'( i$`|NbŔT)E!qp oP!ZfC0HCQ0 ) 0rrNxIt Û@jNTǓ 3 z8IRHe. ?i/t9>IR~t8EIRT(:ՔNBpj\Т wH`o> # 2pXPQ;>tA''tހ[%0{iY41D `,N* RF!GnQF!."Px# PZF@atH-qȄf>Nf "!1.8epM5dF#AK#v+n8ՔK:tY KTGmOR ,*<5]e>GR^hϷdy7h mxŗ%uYPKh Fp9$sFT# ! -rSC 2@Nr%  IBx7PtA B yQ# e *Y8*@-*(ho; "9,(*KĐiLȤā/ua((A "c'b(UPHBNըf5l0V@Hcvp "170T1ꇀE+TD k~N2/A^*#JpA}x“g vX\Qb%`#p< 5Zds+@|*3T81 `  *Nьf0F(S (%,!?+ 6iPg@!T&"lAĉ"`$bSI"-YL q(/:BIt2r"7eNBP`'Q *x .$ߑ|99@p`,AVrk$I 5r'&oX /|A`{B+"K@)~@.bRd)B.EbX!ψL!BE!20A֐@-!149I=颐9lF'OBCB3\,ۅ(a8G=p8>{JO F KNT§R`$qYj$ADA͔U# 7d UM 넫pG`8#r|p`U;6 GT(5z7TpRN|ԇr2+;ۃ'|>\ȏF$B1D9 NwH2u2EKPi;@ ,@WFAe .#HE VDܳ1Lb=gLnOR`܀I&X @DІ"P`YD?O0b2YJ@ WBصXh@/`M@ℂL ]kKC׺CyM!!W8Ku訅@AOW[2MF8:) }B%9pB@xp"ȓ\+ %d:g/|aD=lR -~&\ >a 1V?hA9̪+\7!r4 aQb)G%XD_N: eȌHnxjȦRq7Uؓh ">o]+.ʂpQHWv+|`6]C _>ȁ\/ M:xk =!| s~Bgh\\XB4[ @60Q'X3b Ӝ9tKQa5c87^1Vh:8諧ݩ0> #x@8(c)c(2SNx\h\"ɬ Xqs@&!)z<(o|K7 9A>x70hʋ@, `.|iDС|P/BHFq T0 Q5 p`4cH ?,(,2:T4X,o5qpXv#I'2Upi(]0ZHܸe3 HV8 I3 9p"8J?AxsYbRVXS`h8,k; 13Rq]HeX w|O@*פVpD9Į hMxHh<zw* t ":eY $ʂQR7xN_`.Nȁ;>`(|^Ѐ9"J!# `X4 {T#.aFPPȳV"=X'PVQ$!.:j a`KO*]^9#0n\7@"%:H%;E*F tXotSq+)@)Ppe`@ѐ߂ ITR{O1 @&ᓺ+AթQ:CUp!tB 1KDz0.咉sA ]s'o % `@@?# x=cPU=;A"OʠkIxj 2w36O0}c8 Ȫv6.&+v LlRN:?@!E.( Й# jB.ȇNÙXX@@䳠4G6H5 ( ;: )59ʼn6p§=ZY(q| е*I;p!  X*0CX~8 =q` QRCTn=S8$8p[ OX}ipW Kn0`(c`;HYSa[$2a(.K9zA%@*x&6" Z@d&A.M HVX|Xr*^9` x]PF[Qh9fާP H܃/HE/dKUӅ%{\XK͙D ~X(&H?q)H Kh-$@ ѐ4ߒe_.~c@ v8^x GO+MЋ3:|Y6LR(Z~`  p>PgPPaXP>hBiAtv0j$=4_h]i3nUi0Q]9 Kb`mVpd2d=@)%*X*+XGЈNaQC̣Hz =(2{)ړjxj*&-Vh pUxN_~ SoWM> B^5 [No8"q: ƕ Q8' >g ZЙ:#09A#HDp+18[9 0+ZD@!S(Um.iݐuXq Pk3Ra5: q_^) 4 s娧::> [\@Rpj,[> .PU^T=/FX( SC_0P qЙZ<ɓt`)`H$蔣p>]ׁlXn38WL /97W"!z,8OWxₜJj 8alja0l@Q0q}Q8:>O0s>8ͩт<7 QX pA2"=Jͧ |vp`'@ WBhς% /pej$p1 uPeH9|8ګۚ |7@'$z |X?Y 8jЀQHЀ$H/l$jTB" ~rxݸT@1@DXa>*; PgΚ[0 hyN]_*nd}8lc 4FP/PD[G\d$@o!pNy2mI!MR{B CÄ!!ލzdԨ0rDTŢ/u+!Hiva0i 0HS21^Jx;0lD[8b 3ײm-:0wSpj- @"b0U Dpș#s,AT 燄pgm'z*Ngس7 GB6 @15z(H:xax'՚r,PX!,0lURej[ff`a$H0S `Lm=LSX0P=dO>$8(ज@g #`T[@  9$\TE/ KLD< [,%D QPsap@qt;bPA%D8h \1b p# Ϳ3+C\Vk2vZF/P h@VAja(,&>#a֬7qF> ]Müв>X<4+~OTZqO,2%ĬCX5pxںUqt܃"F>-%'*k ˝ϴCWf X|CD 1C2$ F\ <mVh3!+gP< !ݟva30O0ɩQZhDWsjv$rJNMV⩳ @"0 X/< '!"[3b S"*"1 ter uf9ehC'PILb(g.͌H 8 (p@E_ CK@ f  (ZF0Dp oH ΀@`n"ccr@=˹! RXGPt BCy00!*P!h R\G P D.0FPpm!7H`/%Hzݵ_HD\ F0L%b"CpT@ky8@=y Q+$Rm& 0fF9 $߁$;G+ޡQ A ڒp":er2(D҅tCMxH.`ʈ z 00"N@ 8'+4, 1ubM--aSV֚t|Y`Vy{uD"(@IIEz1xCT ְFeR@a"Vڲd%^)t:;8b_B!ql9jL `]4En)H/Nd;rxC c{T*rK[B+ ^b|\UҏEg.(=2<ztPK <|jO U 7\j/OB)324h +!шX|AÒ-t!0J!^A2ɷ @ MF b!`e[Nrkpa"i"ĸ! |.W=n9@3+2|>MFK>Z yl qb۬B8"rXV(apFszH<!X 2 H4 ^y[!8 5l 8n%Li[ +Z+Z!SOFTЍ8DMjzaBD CZ9# ˿C#ʆ#3L:K F8 za4@H@5@F2M+UD눐CVSSk'ky؇VQV~%Ba [P3y#Ġ,x}-OàYh}@ҊHeNR \b1[f !B E =bC'$[EtGn7ttv5}Xy 3 ǔ|4.i;J^v ęwZX>i, uH5B(B%tA<@@+l,EA, TEq/$lT/DDQ@VTU4D.FƔLÙD&Xha*l!DA'9.)P8d*Cǜ* *#կ5z"hB?\\Z @38oBMD*$IÌ-$ evtE`l<1}ŠЇl6(hI)ChAr@ JcyPxľ@T@Q/,A5h\h ÀMJ]iC1K0lӴ"llcb @ZԍmyDUAk IA,[ ܈T/k|.Ta(}zb@Aԙ8bCxC$Wj @ h? n8Rg@ԁXCZZ%lp;g`-Ev$Ev)P}B+,P5&DC̈́{hU'Bd&I?q,"\\BM̃/BIC¢EOlDFVC@RLK]&]- p{%I>D1"HUDCXaBC!XS$ Q腪?8ɤTe/ ^9u`;˻*lA5{(bLn( `NyN90HaXA"l)CUFdA4U0, Ӯ0Vgf녮[pzN@M x.,-lEkV "-C AM@loD\!H@AE ¢ I5L\\!lh<.̭7p˃7C>b? A)>Ch/,7P-edIp t68h37_@5`_ᎏ%@DF7xIp3xh7FO8І(@1,Cth+ ,@&xIFߤ!qiTbѢ ]I.$K /%6h0- '` >Sy) xPn̨`ˋ">CCBU89"\s".0b30[]K&<4%lnPHH`\8L`tB/*k6ɗ]lMFZjkM?A {8 KȘgx@.ZaPأ \\.E7&8#8.H5J,9Lo(ވĐ"ۆE 4OZv(#.JJ6P'z:̨{:&Ǖd@3qs+9q W\) Bt,HҸ%c\ LHT*"s9Ya:$fB*745F^J!tq*oI7΋r ژ8=M7#[i-" $86ʪJ͢`T,xPWq Nx)'xh2Z4LHD@y = j^zI؄v˩O`a/Ox#lI!+sЇVq M ߾r`~(BӬ }&! RڋzØ0ϋ%ꩼAWaٛgRah){CRp!Ieh41-w%M414-* _(`_G ,hY\ُ`gASāP yp8ʣ>3`/Q$oa!nR $@R\\q4\r`P ]LBg7,8Go"$H6Ul.$ AtIRܑIM:+d~. y(%J%B1OmA)JBh@u.MIHp9NT<%} UHg2xF/@Fj[J rx1F9 F(Gkn0r:,2dS 7 뒲^ ;ruhCPtЧdDNNG `G Ta=[T7Kd&ϑ9f}HE"Q]U@=C'|0*)uj̀'e"s/3DHAb:K 02#N>y!f,=IS\i#!b8.bpDe=9V\L4# V d#M(х̔$ Rfr#  )#Su~Ie$PFT0Ch#oa4@u (L@${ U$dȅRCԕ1O(dGC(2Z(KMFI$5+BJ \ Ƚ_Z1ۍ"'M,ܑ" ֤q9Q Ơ>%o(WB,xt%09x;F<#yCsCA3@eut<=# E*wW"K}@ w.DO\a޷tAܠ43x^916q'0v{+`Wc;7 QF\'uP B\9?y cX87ր #6EY+I,Sqm%möE2hHEr:*@:*!{BaFgXà4'pb'Has3, / u΅ @= JWh1#1wDł7\RA>H ;q|X;OɍN%n`K=X> Z,|| p+!@WBl|z҄lJS }Ü t@nK0B*_M &c (,D]zlU(2Zh@oFS gq'|iZ Iq>cE{xK;RGnK1qq@7d:ęx`-]cT"d&`F8BXd~o9Dn/R%*0A)J 2"0`4ɣ, ?xL+^(@`ؠ,aAR E#`ph`@,ʁ !!" or"!Z!ꢎ!eE8`!g4@&'`+@W 2K44Bal!RE7X/"T 2:*!pE( Oo2h<0` -! @-(Mj.!'P!.9܉F,#AĀpyto'oM0պ"'0#zD㲠!g̤!nF 3b`*hn*M  !4:€2"rPq QB\a_qN`%bLD`r.A4`3"8%.("AMbE "\ 2 M >$!`e\!,N2)h!g""|2 0RA! (RvBSbU&VVrFa$  %#$~=-(@3@@`R"Ga\n*/!6>PBtdAZ*2* 8n# ,i)1B-:+[!.`r.[$!gD 1 (PMh]|"&! A`k|p䬃@_K?5l~(!AݴF$,!qLC>1'N5 8 B6P !@ f fF%* Pb*!0%N>.K;M?!;VHLREKT4(/`>!+Z0 VlB1bV ,~R`8-{@6 (`!4m\!+@QNuM#Bi fތ! IGi!A *oKb^("@#<b8:h@NIt1 /N`r^Xt/f' #!AsSr.1 fPu躃(a0!(p .!l T\zڄtոAFFB`4!a)Z4nINA @Ij%0t ('LUBbUc8 g"Nu2 ;^10+( lTF\aX5zcVH,T,n(>Yi , >/ƣ VF`t+Fw-`Ѐg !bAWB TBE'8!0O jGR( $& >K).AB?.4b])v"YB!!,RRN1t\7D V.#6#\!J( g." `@`,A|R" ( 3jGa$MA,ad W!H\wzu1Nb%Nn^N] < fta|sRBD|tAR~,X=o#,D(!E 4 -7! xx-'trq b~@PR 'eh]T"/;#(#MR!qG6h, @່wSTr5)`%XuX#Ȓ)jBD'"jޘHf7bl! &"بB4@6K>2!΄JoM% 5!2b(aR M*Π |a1VtB.-|&k&P2l8# 8 r5 xu8  |PB*!,Id!t.,蚲PN蜹& 0\!X$$+ޠ 2!7V,X4Ab7"N!|b((#}L!*! !'`P,)b!]z 1IdH!3|..m| C[m(b tXg@ '!0 N.&"CMa`*AE1B_+g 8[:ct灒5!* 0;!. +B @\@wQ•I"!p,G8ɨeȀ1,b?|M٣Jv@%un N|ӺBo". B:(.ō|4mh -ƻ*YwP gA`>tߐ;- 6&Z)('b"CN4hZ\"j*bBO67M vG t?a~# $+NK!$i D LD1%r!AR`6)Ge8) c_jw^4,dtA0rH}!!2¹G(!L}Z| P-~^D]b$(j,#h,C>G%$4@}7!2!)ޚb*9\w@ Jt^fVaXYHa n` 1pI [d A=O;#4!x ! ⍄D`@$|1bDxx! :C*8( H$` $ZԙAMB@bU}@Bbk&I<я[ Ҫi3!1t{ aD'zt!Nk!>4vma#!U:3YX Asx۔`1}BC9+mдY8Q}b)F0; 3IZrIxr|?e@ zQg WPvQDEG  ߤ4A PPS@\i. u-8d0P er ! WKD]2t3DfM0@4@ZrS Mc^dF bIt00 4 %@uppF~ =aBd1 FT8zrʸaxǃAoffB Z;Cb fS}ZS-lw~AY*dƨv3mud^:U47N7 sd#Yoo][ک Ƙ c66s10L Gb?,A`PBd(q~T[@%QB%C@0A=sЃ@*T!UG@r5B f: ZBybKq4oe2ʱ= FAF ? pQYl#2喱8tذi{ɚ̥U7<@^`!_$@ { {Cb&$=`Wx =zM l ! ,sH?y[/ I0 CJ%K d 0ZJ-IB=% ES90!8cm-3RB I%bCh(7$ThpTG0zT P!X\Y+LbC2tBB(gÐЅrIPѢp2p6װJ Ctg !k 蠝Yi?2n~+m 0{Xg qw x`cC` P`0DC)mmvw0:CPQ،jH+̀L>u_޲.?`B Cb q !oq/56g0CN]gp摢70,!`HĕS% 3o´%d?RKN38MB5?S6 yp + qG0Nnȱm' ~1hXz7Pqc:0a <8WP@$wP3x-\\H@ `$ @ 2I&$Yx;vXJ4*HZ4rx($,QG| +X.<"b %:!O3U*7$ e!8SiO38\HD"-,B`HD&0`&IL3Q=r52>d j :2` ҄as@ JT! mVB2MH 0Z9ja!1l?N hbr4T`!^ѪXJh@h@ W@F^0@c>'k`AD#bbqE)v+;CQB@cҊo"1sztM$3 @N T Fk 4"* .&Dj-$Yt4ʅLÙج$mA=a8P h+sin:&؋8 >؈ 0\> 90,9K!o4A~$+Ip";"ԏ~E7pu5Ѵe5@ªIl،Id"=p XT ,l%qbģj9 [qլ,, qte _H:cV7 l0/@r| 8`b 8$>8ta#F7L.!Xe}ȡl9 ˂9-j\J qCy.Pvmia F ,+a]B[Չ9^\K:(X^w:񐏼'O; B|E !g `V@=`Qi ;NQ"B崼2ZȗO لyVvȏ?|3 hxBvip&Y@,'/"x 7M(Cb `0tx؀}d4uP5& !)t< S{x 732Bx8{*7 @ N2`h4\O ߴ" p o ~|!p P'` PMȷ?aRr@gsh(rPRp2z( @$GȄ+@ Y #T=o"i"9 <7 qqmtZ{xF`$ ?H}Cp K}a@ }7 L$ M9Y_5+g8' B - X|H 4?b p n ps7se֤ 9pek69||c fxs0qYy3'83'K3а Y(; 5Mi?' `@K@x|84Y,`-Gl6ٓ'' Ln}n3p*Q44)M[~zW (2(g F,jpyTÒ4'\? o 4+GKs q T')Fubx3Z ?} QCVHw&yS s P5[)ta"!U\@< a#r!Lrrvf|W`$r' YQ ] q'w&e>y1K |P(=ZT@p` >2ə+15T׈h_ 1ɞ' PFq$*+'$ ?p ~@r,yo +!ZMs×"u!q^9xGBSvƐ餳y{U5x |)  0"ćsYlrHy%IKW0~ ak)С]t)8Y7 Y@gMtkwL0bPp‚@jyE[u:y\pΐ°rtФN  "ګ1S [#g t@guorpr c'pj6y0 ȠЀ t !r xP*@ k:PJsIY| P' T''+'GTu(bIy EK ` s@WK@M4MWְ gPد{xqx} 6cY8 EZ:\gיp[N։ "`([ #B1; 0(UC98 sBB;/P5 Q @L0nzΐq;p '#$U0{HHky]j<+! .]@$X%_#F2Ǚ2P F2+ p rWP4 `Tyۉ WT P [xr wF= m! _5']20֧ kF #'Aaȯ Z@[8 gpȱ4gL/g= uu^o[G1#RHi@Gxez E p =?C ̕R,RZdI Z0[ W.`n q( {z [z9 ` sPp7({Q4%ݹLur ʺ<ZpFql tFdLàdhP9쌵@g/A:`<p6c_gaoF-'` cYMM # p} pP %?>-Z(Dx@0nB1| Ƶ n3.AF4JSSÒk w*$p* Aȸ ,b @NC  0R G 2~By `I5 AsA:KZGWM  S٫P Sur "m 0r~u1ȸŒP / 05B< ~Gr,r Ÿ3_ôy!9ΟG_|  ƅ1 {b 4RpEa9`E$9rc+сYRRbVH ޜQMehGs Pq4*ZĩT!yJh-k)e @''+[pOͣ `])q_xVg &՘APNZ;DvyEX9h&`lLh#&i9u9,EsfĔҌh%财lhwyz-1&LZ{3{}+$^&i )0 D jSH 0ȿ#vOԮH8-\ M$-PH@1SjVoÈn`8JpONʈeoKl sL2ocb $LqdD(f ɈaN %7Kh 6DS$)'҈qdl)nxnІb#c\^8$R@؋% >|Y 8csYj́YbOp1(6Tn9qV2,c||AX 7c p!:uTF) X<_8W;Վ? (@enr…s>/|nglO\Es3'(_z .& 6h[1;u(&Eԍ(F=0Hc(`m6Յ%pGxfz=C joAqur_@BK՘VB H PFb$I]!J5m I! 2Q[+@hF `z,o Z8`D(i"@xƭ$ؘ8@\F/@h6PPF',st DT/" sbq󤋂IX (Fo'>90.b#/`yz~|CHtVg$JoC+B ~B"0i`?-nCP*@nLz2X.- I$Ml%)IӶƘPQFc™^lbb<_E(Q`a  Ć4Em 䓎Ag~@ ] ַ#@SUǫ-:A *L!(CZSϲiF 39/P8nJ'ڟ=IEq6PPUhhJGP+j lXe` )X9OȂ~K?lҌGcuA ?Y%^8Q7 {H00x%@ЃS!bqj%\P7[4{~#AShO@a.ϱ񑁠3 &Rڦ8=q3œ1"'d8 ω‹ lэ{<ѳ?;'Ď 3`D!$:e|JiPj@Å1)H.K,D)a (1p^5`4$+RQ@ 7ZÒX*# KɿZFa4^¸2d%0Dq>hGGx!@VOVH3bw# # x\=,V٘zH+*P*ȿj W;Eo9=X4$Z.>;qXP &FimoX1ąaa55,IFP}di1b·P 4VL{Z+%YJͽ` j` bj> +IA3Z& 5C" P 98],!z j[`=ːl,pesӌ&x 3V9Z40³(\$vg}$98pKy+QKETȍQ"1 UV`:LxXh"a% %q6 % V[Coaƙ$DlTmL5I#*K°Z9tWI! b@5K͠r ZH?PWX!;cv -Yp3.UnSZ`5dFQ{B,@I !iHK)##[6wHOX=i4˝ؠy<+mpP^C҈! Op҈-]ٴ@HlІ$3~0`f 5 |["T H6aϛQB4MuMϑW5 4\E:* 0+[h!B (P\o4eBE!q-4%EĖ.whAm PIxʎXu6pM02_AsxS+`*\oOЀT݋1eV؍ }MŽ &1z)`@Ȉ\x`C k$?@5]0 h AsQ[PQ AH5Cg MkcA\ ܒ%c]ȅ ,$  |1]ݸ:I?!(vpv~# 5ePT )X9(O7:xbgA])~1 hjq(0Q/8 SQQpU葁p0`0W =VX7!2R@#G:Msp-pm_bH7apA`P=HZ.ws7d^@t^s$k^ˆ6AVYb9@VI,gxށH^E)b*Ч0%u;@r5qU!`!@$^xf&QfmS,-x8Kmt ׅ ;YwX56M(n1IvAU1O|70(ΑV_J)l.mh%Y=6:! g]hH.ANH-`5Ahsd5T0#q/kMoZs\\1bBV2U]U0c%S9Kp}Kq`ϝc^,w1қ3XX$8-r'B42.5 533c?v9^p^a?'Q. nMeG dБtO0ՒދV`FrUo܈3"1Om`uf: m~vCjGhjЀQYxOwsY؆6Wp gp|Pq=a> ٓ>TOm6RP3 0pps6L V(к<T%WˁXX91q豤|OA{w`C f 5zh4G0k:6ذԝJ38oh/7e[% s(È󁐀AjoHݑd% t[1p8lh`bZ0ύ%;Qۤ =}Qq8pWG(uN(MȥZ%.ٚ9P.ҁ,h`3P @B'Rh"ƌ7<'P0EV@! ʁI `d@1, G"] `脡l@'ѧds qZ)~ ĕo߼~ti9^ O`w knIV;jL f6sd3K = ;9D ղgӮm ~eE9ǹb$ |c\OuD9%[ۥ> ZG Nc&ǘG*mP9liw]wel"  6- h*XFM1"r44x@FQ D63#ّ@z$$xJ G7D 1sy .` a7x!3NdDOX"NW ?YIUOb%Q#%gY#`7-l| 4>@3P`(G@fR#ÃGMa3:گ=BB-kC=*,MP&7pdA92RaNsK`xd @{Hs 0s 4W pJIg@:*^G5z42*c # :Ȁ;7p %zIGqq?72 ,McLA9#ymAB.:L2I"(=s\U߹5ie !Tˬ$"}Ҋ(nG 5G ]| l,` p@n}pq{3 ,H<4VAX{5nIj 4K`wx *P'D-AY} ͻ<?#h@.yvְA:0Ć-aJB2=iݩ$50h#fE"2 JPh$u #MzǂKx.|!B2=lKDolHσr5q jv +G!;b} `0!DCbEV^ؐGXJ* 4 %,i7$@- qAE]F~(E0$(@C=0I #$$sزK"SRVa/(;B59p|o; cjE0' ر-掚8C^3c& qӎvd46a4)`OL=-E`<,܂ ]Զ^ih+ճ95zУ(AdQ&rLi7%`NSGu1S;.աmP5U@k-Aa>P )A"~nop&lO3xrwyTD<"gx*؞ @81arhm8t{Ebg<:YFTcDU⭂B,bjKcd&sZA1c+r80;tABc,[E32{d$CJA+Ck21oy J'R8 *HIGrAJQxގ`7jݠ')?|sbڸ82A f[1@H, %YAD89op@Dp,Hw]} } `Ͳ! lqaʦ,(17@EH@}`+,AmD>@1&Kc< D~@4x` h"A_e*'j!bi%EP||UF9i)$8GC^\ n[$BsUaԼ#*vn'x@" w䇊7";8 )(AM' vҹUV,GmE]0 V"$B`%f\G)b}+IjAO%(AXd4`ȴjjwH>,0,=F@6# $87pCAzB+8(pT؄׵ҷX$A<U"S>lADDOનI]c_#J$H@q ^"$El7ӘZ筗o0*KlpCl,@,6s\͸ ͝fkDE{lDR#.AbD;tA Z}YHyKEڧQ'XUBXĶIcbmw9hh؊G8;mlm0(DIG}C!!Ax湊&ԔA@E\1Eh"A~q_Fh,-64SqaIJE.\3x?:MBV؁A_Pg /xᚹDkƄ[HQWdNu.jR"'hh}P"kA*IeVQx^ pLz9}a4,NFHaVI:$P@२/KFYMQh$NDf$Fvkq2m|+]^J$}&=)9@  p8l .('XFaMT!{Chxta 0}$ ǕPP{Q ~!_z9Dىk<¬ySrE]\60.$BpC]$ӕAGJL$YL.3J.pA28o'JDQ&|3&2옪2l&{"J~?bW_ +AQ$_ 0E&I!t剀\ȡ+\,ˏF(>|•ĝP&GM%Zo nb#ir\O2ek(Q3ITVLޝC<[+jЋ#1R#9xZ5G+G-a+/Dlr Ho68ׁJ$13.**Zq@ް[D>b$@O5NbWh ZIH&+t0Hc@X>upTYdM B)F0SI# Bp; .q+79Y\[|H@(mDiI aEcۦVIUɌgv"^Y"xo(jE/WGLyW:W:'X 4wAۼa8?|P9Ξ$Ul%xlhИ=6lk1#@ҔQV2˜=hy-ISvqn3 EiVp{t:%3f@ cP38Ş˅NDI @|'@܆23#ϕ ( =)RI1yr S5Oav^_k嶰P@rZr Vş }ƂlWߋ'A!r;m*O)ωAF@\>@#D9D9 .`PjG8f#NH"JHЁnΪGtb $h xՌ82u+bOG! ӠKagr"6J0qcF6{Y]{z1!WH.4Borf7vE) 5- qs8( M:L#A A#-PΙx$APPГ vx<;<Ü4ZUCc b#@15S5\rA{;QjݨB%2})*F+!^b"7c_7M2p]: 80\{$V# ,Jz" IaAnOYdk#_F8%ˁ F %D$[ [~KQxE牲CC ?Rʂ$4C pLm.::>]JXJ8Ńc/6$ȺuJ?XUDURNЋ%iIH = 19 QYPw? ƙ־8|08 䕃ۀ-6hO+yT)<O)$\:odR;s͝ w8l+<*UlKp\;~Ŏ@ctW:$I@Z&|ׅ>$YXzًmRy37F萛z=A;-J𜁨Q@F+@kKA %-Tq!`9 F!$ xHb9 dU;ĽC]-ml`3ÞW??f=1gI1D@P mXiZe% I$+YZ bhq ,H}*Kح@[XBy !9kNR^a](18`9B{'?rfN4hIAL{b2՚x[|`xrVUG?8ЮN.Dyuasr={9_z! FHApE&I:B+aؖg6BeD)Fxd6EG9x Nfi$17XWJ}";,WT쩤sB-{I4iwE+E_pB"Ia e6LuG LyLB'$7=3JAl$HBM*s?@nx!.l8kVd=FR/Lc\KgfI/Кӕ ($ 2C VDO@”<=Ee^$2/npIa'r3YфhuV^ŵT)s0e90A Wvˋ`\W4 DAYpEoX0a&UE]@7ك_ @{eΈ!+xZX6w遱^~Xj8?0gy9 0n4fZ*0H_f´B!.CFUxAxA"H7M+G"je#E< K.(xl-"e#0&Qq@ΚْC xAkd ʖVb_":Bi"n?N*|LNCH$L5Pbxܯ (bă)c>mtj+AN&`' nCS! a)H޸" IXn Ao % 0@mGt"$Fo% (DAJA 8Ňb$"D!0V:Bd50C l:%oixX *exQ,K%ʒ@c_ġ;~GZ* a -^Q?«\p6 {EܤRBcCl*0 !>ftdkz^Cejop5G Q&Bvj c "QNQ̩&0LCÏP,P0t(i C -6.r#;-h1NCd$"ͦcѾ2\FN(1!.XV3a`KIxÙ.#L0MB$DpTCd/%3"q/ ?FdGpDVG\C72Gj%w`*Q ǠNyRp@aZ$#6"WJ^%*BdGâH \Q"ꃂp2% 1^ O Zg bh1Eρ 6Bs4*4a=HBJT2y$fO L049 < J2@CgF& `4.VB!&)/"t-Lan!`Oh4!LtK0,G 1QZGJK\%FP06a@I<&8 ;jUeLeUdova*7ԊgS43VffVcJa&crqLa/}O-2dU>5xsK5.D VqEbSхTZ.FAnG‘4.GWS$0Vc+ pnpD<:+LtJ6B'7*V0I7g8 3gJA ʡNaT\~`&|@P# 0~O@ 6"u7&kbPl8p> v/8a3(#vyf`.kmJtҖ[pCV\a0"TzEfvCU%ܨ(0|i BA_ E}')~ZE@j@X ALabVlt bg k :a-"V/]bf#N6#M.p Agޢ'3ExT:1("%~^S0f(b&)%^7x})cPE t|J*&nVX@ZJĖD ܵvBVY!l+! 7/.2 Wn97CU @`@@6c7l8)AN;7fr#FDtԫP$s>©MTf$P @)hTvp/ zP )جJ[~oV ~Oo'Wpˈ'R\1/`B9gQ Nn3V&c $eO"6#`1(h hDPf4XJxö¸=0~vU8&됙B rK$ VA '\CA \ U%b@ E2Va3y !.Ú:-B=v"0 Sm BzSC GO1a%czo 3A ~A XW\Qj}-s,$8!:8 y$ EUbCD<讶`F"xC! >S<# ZABBbHZibh@,QEƷx  7 thU`1u>Qt E[T!.J"2j',_%Bpx7U> `OA ->Z1g.#X d]R$Q$҆QByG+L!B5 ` -M "-tR P"aB ,IK 9BSfJp)Bڱ /@V5]@w@ |Z!E x{"*GJDP)K|d4 ' 0-`-x8.βLB0 H\60"9tܰ{HHP7fp$J!L8BQ y U #M>_QqG32z\sFVoԇƚ8E Ai& R 聻  nO  Bm n8` LA b!Ȥh9VćAv֥l B)Ъq2THMȜqB ap X xB4M;ؕd~OҜCjAExc fsgkcA6&M\XbN{0. 6Z ;&$,=|v b$ %C j*Btn 2*" @tAUҽ`w\rI6=DN5.>TA,{ċAjZh3@`| |VՊAB# |VX@s C[ʬ[Z©?L{yĐb<2XVH!$Dh?;pA4A@f+1t1 “o!2's̍ j¨N֊!#C0FB蠓MF2ѓA }A a@gවRA #bd1AtsXA@p@V$^s"f2l@^h`ZuEt1.PE y'AȮ!` 4 üHQ;A;"jl7k;[DDDg7@g4 @D*l%WH+pAGuq)$14B(` Yb&mkcr0mڇhKa$: Ï34 @ϼK'LT } MBUjС %{䣷R,<\%A "?.{2J!r-ٛA(C?*rP[W.h|A bLQGD4^l dt>d%E ; ~ )u) $8%@KdA`F@6FHd 3xc Ѐj$&h]n2#%6QX πZ"ڡ 1MlŭuGI)H8-i#ZU(C y*m66%ART@<;|A3iY)Fq{JW` +)6*RUkkRMR$]l+tj(b(phlzhC ?J dTy%, A3͂8eF\xS-"I8sZ0UY;A@ FQEpC CffՁe!K)VJW%d4Hчgء~ ЀV1mrXA)LPx AOm'3/0U8FxpQJ_&`de. l9ofC=R #!@]p!YAVEAI< f xYH#o  F @(1u7V@ 'iIb0&99t $ ̕A5F8թ~f"砕MU.ؽfh&mu GvZbUC+PoD+b(ETbѰaӘND@AOۥ1IT]c!-X Ȍ ]-09"6ABiݮH .q 9@GO AToHu@ ,A0.@~ħ 6NMj !;"d>jx[e|*Fhx^28* q0X (n6,'0HZQ, *VN0Li:թ/UHߊC$}8G1*_@$3R : x-ȗ %ky'ht mj1 B l`>dߠd F"oez0od 'C֌+;%:~1ڲf ŰppOR;@DmeWL W> ǥ+ - OCИ*\ D .)OTubA !H*m$>)l$X@A Cs:׼^@q}VD )z0&`odh}`u a67!ق `o`jd7zaXcSJfpSxlFKPfPLhP|b[S BnA< r @B2#</ 7j^\o 'Xp 2`INpp0R.2K g6sW9p! m}q 5`I @1xX \P 2 e2C G p tP0)0pu}4ƠupCj!Q=q!8 !q'x;!;QGU,:g't!/Wh d| Z z%z^(0pp4K#xUW&'kvAzA6a :>Pp%p!L1 `QQ=0S= j]:P10cHpg0-Pu _px Ej g 0؁hh ah=Wx@X2Dq3TPXQ`Wq4!aXrpu)zspWP(er1E"fVov o/i'a1 p b1( ҙհ{i Np`?Ӑ14 yEa*W @A+Jp]A0 2 GsGr2g Po1QQ2,s擴v$_PoQ0SR)XALً}NqvZ ga7 6j ` suuzN F5ʰg4ɤL'7i8vŀS @ `쐤0 pN4E~Ґ IT:'(!ECnA}!6yn(RAP)Ԁ\r JI{ { &g֨_93u` @Psh' ŋ{i`ɠ3XP 9 ``a<0 0w0 PuI I:B!~WlB#8OްkvA a@##aK@ 0NƮ]0TCeBҡ A pOm:RW5b+`v[ZJ?xʱ ziKJ "iW#t yj2vo:^f)^p hGyJiX\ Gj`PaY6$qY | 8ag}>aVr a'~u vD Y K aP ; ;T<20JL[ ip'B(((/RJ )Q\YIch GǕȕy <ىi;P ;𼪁) gk]2 Vl `ЭX ܰ m0Wɟ r6 geJkNVڪ`V ObOQJGA* 04apCC170Y(/~nYC+PO! 8Fj 73]] QH 0/"` bXAVd:LU `fޑy)! yHmrpu~GsQ|, ]b3@ȷk@]p1/,Xȵ ڔ;MY ה}@ RvjyvU]n[p\s0_rGmJԨ sQ3e `Ӱ(XM<0¶sgQ'` ؈!Q&zy!1>aW[ӄ &. tq`R " Ƞ u rQ膰6 |1Xp^+e;psrD1HD` DVF(ձqb9L&*$4.!)qt + [ }<-Qmnҵ0,ݶ!,2m$F ͟gQ sˡY͔`35SD]̟X:a  E (*-hcV,T C!0ZKj[3 ȐwP}rha0U0ΐ ^ o & Ю2 o0\; (G QHmPx^Vr#VB}̩Àp%}\G{` {0wd ߹ F^j>粑)1Rk^E M JCz70V)Y6錎ŀʮj  17 Tv'Sd l0P!^\FiڐSL;H}Q+.aZrF, " `23OM r4aR?(NBʡvb'g9ֽ, g{` o \ۀQ)` ?/ P`,&° @ ɥ ݵ '=ǟɟM^N(8 GY BmJ ȱ`VxCNArLxPls< `OIԫONSD<%FLW9al3D;1'@71b4i0r ș3%̑v,o Xt2H`'}`D- P*1Ĉpb[9`B_MI[V5mƝ[+ aBWPFG^n0V]Io&VyVǕ+nހy1c&|`l=su; #9m( `\@i#69`  ~N  Pgb\" zB-!-&%8tIoěy!7nV.o.㈋89q!d%N+N@0 ( 4* , Y2Ö#9b}"jƠZ VeuU p^f@N9〃 nޠ?#8zC= #h%7jݣ hec5Xj<Cq9iق,e70r=:(e]ʮ Bℙ9g'PF=(H Q(L\A '2bq#[$(   Ns΂I!T)Ķ/X 20H㡣k4P#4)i5o+Cfg^!X63b#o$hGZ հâ6?c\T 0/f-[qJ WsF +WE0&v-J9l  ʢO0!VcD' "f =.\…&Ih91%&nVV_qf@e^ABG'2'NN@` .A0BU (vܢk9`| a h3B 5ņHTl@S[W zLA^Uo'Xآֲ0 W<[̪0%e=%l ؤ.duhGI:DS=16@ $}p & 9dv`?ޠ F  C4ʜ0@VFiQa0Aad 4۬ HSC!C b)A6؈2na^>YIѡ *U0ᰢ B*X, 0HESu};iȓ0??z>*PCg$0ǩaRVAaF´hl.2%GZDfx`a#d( @$3 Dj6O9IY2aX<XX 6w1 y$Nr2;(rrMyOzh?@MX""(ʢ h ܇62 -ʱ*^$xr6qQMKO G 9][t/v+;?}"͞ǿ#^t=0R,W:C!&%<> ,.@xАX")J! od aPy Zck,|YSQN0<̀nLݰ97+ SAnU@Ƣ)<7cqE8A0W@L"j5D\B} M!bхY!Eʓ2 lD,I+ EjUEFX*k0ϙ  eG47 W gR3(G .'Nj $BL cQ !C/zEY%,P.0/A"e,0Ce҉/PX z4 "iDdlb>L\#t 0 "=0*)s7/TpVFy]o9C*h5rlj4+- Ȳ [)tՈ|cρ0bA+oa3 8"t; }X̫`2D"yBct,$K \R>Tr V+p;%jY6H303B7" NrNqx#Vkdp(B©K b:#x72#H[kbHmɉWBۑc;PP(j;Kpِ02A::[iѪia9[؈#001ذrI7U182X+`&N4  -Ds`e P[J`RRxOВ82PexK:N  -*òt Q%? Y~ )@摛3("@401` ȇ,]r>(Xo10pضڧh$ @1O5ⵄ?bV /3a /وkLOА K.`-{12:Dp^cZb6&!(8:r@;23TC=u9^`jxC ʆ@2 [NK ȇ@(.G հP##$W(B`EРTX 8Ha*ʨظ_(d c`^@rx,h7b~Z``Lp.oɏi#Q*@.)'aD2hbG(\!&\Z6yp\B :Fr@CF8|و7XS8rn q: )xOq?xUښ-([M| $J:*mȭT| ڀEԍhX|2GZWa|E`8w㸀`t5n 騣lO2(R:x4;68(] ĎjѯɎp5bC [xW{{,bN)|TyH8(p\HbXBhHN(R`m8:e:4+"HhH5)<ܬ7q0e!=b&h|!&, (HL#=؆6MЇI1 6`"|0p' Ս :G009l>7XQhA1m@я& 옎ܲ$30\Px# [{$i v̎+HaѰ8( ]:Pm` |_LM\`/?+À,9@D4.@ ) @2:"FXnKiJ #6QFji;Tq]_˖I0^Nրn'*Pyx0@U(7)`<`[>d5_d 2lHF&I)0XHxn89 p.+:eh !}h=#H*Icm e3>آЂYX2QI$xm4S\V 1ہ/Zaϙ1\Mљ5j*\;; 65d5xn1A9Pg~d0<dh0dB%)B0c tNp@3lHCMţ7}SVC~@y[\ <+ :eFH`fX́s[";?c6Y ageV q > Z@BPDހ` 2S@`wzqLm&ʜޱ6Ðps"bm;nQ:%.-5Z#(h 61"xM6xTT ˏc0Dhy8Mm"(KO ~MQH{(pHD8\zڃ%PLb1; sYB0/qEOz^ٸQ82p ΕC)AnԆx#m0Ҹ1رx6@Ґѐ ADVn |01 ؈4yY*\(uI݄go.4 Klcsd-#CuN`dBW#8k WE+w[npD'1oFՊ01h@ޜqɳg#OB -8} fBPx0>}m{7bO I&~kN6ZbASvP .A'Ah9=֤bϞlْ%?FSBQ@"+h;H(RJ, 8rN71|^r|SQ?sxPhpc+^uEXcM1upNF Uh1tVHDߤ < e B97h>ը -ֆ`6܄J}2u! C#CD lJq@X mȢF A&1HK,QGa'`h VauQ7RWrP 0V8Y"YdF9'Xi Y%Z&Cu7zܸle[/ x6?FH5 F10 b@]l !$RZ QLoh)*Y@!-N 97% @s. E Skg* ="E 14AHea%{t08Q QІE@C -ʮ+,)04J5LT#(N< {R7Ÿ .ƀ9fEgLoQ aEI ffP ƔM70(%Kop 0MI/'evDW؂)ld՜:x#Kp frsbMTSU% p`~8TH,K YK|"e F )"=Hga!;\@"pshx6Mp (9I!c H{Êt20bA'eP/1@?/C;bD("IӉтhL`ANI8 ƴ)!.xP"9uaf\&Ya/DDxP͓Q'` 94ս CxrEV*ScHq~9WH4TPӐ4K&A0V#+bU84! 0 m%\Q/dH  EkacHpG(#D`T$_bO}`:VY^s@gad RL 4K`'*@/D@5ea8BǷFܕ83A PPF)eS`:L*DŁ:4.@%q> @gA*\%rm`^B(Z C(Dx" # ı3,pd Rp&εZ"0]Аӄ1P a`.Tڋ c$RIAG R@3?&E+k1Y+| !ІWlB1@!F=P^,a'%}w&:tU0bE[lÃlE9Eg)pm*дg C/j543;dKgHE!5xC~k((g> Rr%K"-iHX|b@ iUr:GGG^w΅p;X@"@mwxT?HAta k0%U98o~cMm.;oSQJ9 ,;&VO`+ (Xk @psL[)d C$HS] Hec K7D l Vq /F(r D9vKdwI{E$ȃ`A ,ІUmf@>xKAr. MQf"[l!@!-ӓB5dp2t:$d|%cJF[# ^0[Q:/%$8b0 t"DD9ùU]RAy \(28 !az8oe< 0B2 Amf:!ڴA:ҏ RsEA, ԝB7x tA9] @mBG$G-Ԃ5D5p$عĒ 0 tA3xēqx7AБۜ$TI(MWQE@Ya,ɉ5 CH@tY_R  \EB<.pl/ٔMjAB%0p?Y/ CMX*V$% 5QDB!&!H@˱! 0U1] AXr+[P3ԁoE <|% g r 'd`$Ṕ\[^kA n  "nz:IgD@ B" CӠ69C$3,a%CdHIs譣l$C \(C,H\ $R@ H28iQ xC0qAD}őAȫh!܏/@ Y.pדnAp W%mlɸ+(+AOj_P=(D=@Z=N;)0͠dA`_)0e  h@yx[(!X)Ypِrɮ!], ަL!iXaZiȈL+h1O p$'z/I,k :fh'ciEހ2(KR:hC_WB4$enH{A@XM/+^V\:A(Ī Q),@IU =B/ .HKiP#@Cg/in:I۷EA͐/o <`y'0`aQ1R4nLXaV1T @zz)[ ?k6Cu'bhæцjFJA̓^+<$,l7F6#-zv؁KK.jlaJH`&0&0[)>xc H`>KhHb@GTND风B (ef;|atx tITS!`gpkaUr!]ESz(T|fЄtAhmW`#` i#gAd ,@ BXA!  Bf|r[ 8o`w7> *dH9bHK,ȡo|dƈ0Âb*Png&X+8HHt0F'BBb٬34$WwRh7RA&V:B9X똇&VHDB(UXY Îào{ZVEvrDH?>F-e# B E(!8Uw]::xאIcyg|$G(o.9"<#H }5"cvҊoageY`LR3B؄FjaK  ü ~z Ԅ>:xmbnМ@)C@FW0nK"-*rEB:LB+&9do8`Xr`^ v V]H0<(Cĺ.}^G~ eh]@(I:$LX9ӇEҀ8PyF BmT{O'9& ǔl$L4;K.mcp8K+K$%76Wa.vGtNhjHeg, BB8s-` pc Oϰv]fW ;r$~HX =I,x[<G1%$ X2`ڛ^@P$ĩjVGh7H?E$)<1BpG;DbmKs9`0_2ITQy@(c 5Rd&b2,D;2c91І| U7 oxƫ|>L#LwBӅ`>OBHhs!:t!P!k)n.%hY̢16# U!ʇ1 T(cG@E8B|ȈΨ%.H!kB`&*;P,TCJtQPN c82P@o"evC0EC('!PYԌцA u6Cq>o&5B $ ~$6 -נ UXR 6!B"1I(#] B&^@H?* *62>53GDg@)Ґ!w 0JO @0F/hEҢ\'EE!(`13BXס,pE،*6i ͝-~RA<CpGIYQA@c[9@uKLߘ@t1KU6+*c "T\a `!/<8ef66hNQ m`'#CЕwBHlI\*h<1$ ڕ@,18މ]uxc?Pa[`#D4aA6ɐCv,]BE,! V`\:b!˲,`.\?$@=<ĦT)ABު g'JB(`).!p#nr-kdP. EĦK r7^Td#h# SxI fRm8 @T8Z v%,THݎr!N;V@BA$,y44`0@TY!c1f@z"bX !!+(HЬh~$ 0N {þ?& F$M ڊNHDf")g#KXk ~'*R`08".qRAL 0WޠL0x1rf J5iR  댏jf%!\R#8"V\1օ04&FYĀ!0W^ [,&@L֌ ,dn H a*aa( !0WaX2!`L{WlA X`@B0"ʂLvh:Xk H0X'jƺCN9Jd INfg 7 N D&aW4NAm3!a4n  |$jAf&j"cPT(3r?JPs*!R IQt!#D-!KhA%(y2 !^ !:( ހA<ؒ`lY!T!g>! G3p,$nSI,Hkhct"K6 #Ό j fz VxY< x1kB*;NnoUPD16$cQf&SSmYTpށ!,y *C$18-F !neT[!Va8?`!%>Fnq*c\ynANGI "Kuj/d`,Hgj2a(GEzvc2|a}(cnT>@N!6c3؁A , !6E QQHNJIBjK@ afNBV?f4h">H'o'W%sB (YЊ(玮C#g-׀Y\jrXIssydXe k0nPa,]qM$YH!IJf"!, 6hQB9D@RbN4AxI8T!TRz6FgW TFY"O b|0@ VzY0` r]v{({2>!|-e#pMzjٲ6a}w,2L!! $ &C\!lU-{!o6kOΠRG Pze$v?aށsN9NvWС%F!ò څ l6 (& a?bNgj:Dd`$G (FJXnA%̩Fau0RGG+H+J)Ozᛐf hAFe7mz`5As7!,5P3N:YOy /!l/t'MM'o.@d"&J,Xq>gDr8QY 0"U onY2nۨv!(`.'zռWdΠ "I%b!zo$dsF0%HJ*e;e-AK6q3wY.H:K!t v |3z `[8T[A45ʡo)γ20Qrl ɫrzӫ`8nCBQf*!ke[n93l:hah %Rn+Yn;A\%H*=yA#N>a,&B((I!+BHwB0 Ig=~Hf!N 9uAaFQUJ;&e&u (Ҍ#^UR4Q?Xan!z=AgyAn$CN#NmAD`_e['`, hg2w2lgCj2wWK0GJl$<Fj#H@ .r'~v+f6 HLf؀.Rnb] @&! T;ϦǡuJjo<1#foPi7# 0fE14!0# 0& &D=€`l C&b7 V&]t:ґ[ 1`S\@. `Vp=K>o(2!1FA!MN R/b  NI3%c1: h]Wl1Ű ۻgzp*T8Qt#fڅUCV`3gĊjh5։0E/ױL0{vMl9`7Y|s36@un'0GH /W>/[փ{ J/BJ1B!Д9g` #x4!u` < )"( J[DKO"\BH 5qBY ]!U@׍q< Ge=3Af]<@ @"(rPÊ \ Fei1bk@e|DhM6 CetN ZӨ4q'cqHn I#ñqqs0Gsh1[Ƅ4njd$i A"r4̦_H0rK|%.1)%19le9`WAVЄ(! ]| ޶#BA GLS\qꏲd$B`'JF C@Rp0C@cD,$CK~?"^ ‚x@0 0F"- l#u8V `Hec0m#l?(!H,oda_X E5AD*B7vN# | .{h] X@':k|%t-^iٸ7bݦpo}'rшRc|'"YT#Ph)<#ap6ӆQ!iQ @@-rJ# x$V30d! Prp#uxnj!" X:)eKE(JD-Y^Li YB>A,\ ]0T aHTх!܆!ռZ@ h2 bIn`qskx7ŦM9s` poci (L+<_HT84Ą0@a#JjAh#:Ĕ|D!8 [ $ -`$Z`%HfBP+[WĨ` VhrYx!Yx# " $pO<5 Lb^Sbh2r U4pjqMڠPg1hsgs[ɶ!9-}X@n`:_R("lH$rцP?$> R"W t\UP"@ 0ĉ@l̐gpdE|u=I$ 9 #T!s[O`#jŊ\M @@O" ]](4rӺLe0il$GZ0t[CbؘݾaM ;oZ shFK\g H ` O@o .,!6Yaka89v$Ȍ<7 @ Ԡ Xt>X]#G,e. dB2b,@ Z5p4P>*dB3))}Ӛ`aCatBq}uFg" zB 'mS p^hRi& X,,q9N @@@v@ @Uj}?P ,9`pA[Ve5H[&C Č$p:noph+@ D:0@ &^ s!d s1"pioN˱)`N 0 o 0`WvfD  GpbIТ@hR !" LHQdEQwl!XpU9wP&05?jOCpV& @  D#k$ש2% *'3 qUDŽ:=y29P3`FBa N(C̱)y6"$} uqb Au|uIGrzàr &OW,@ !/r` pU #p-CP&mhx~uj2V 7 TVhJ*lr0bDa/"p @ .@ASP^1dh1<PU@1V3@Lrf(anaT۳bcP@2p  `C u0y&@!I `3''A0-@ < (BA{Zw΀H9p̈0_18  /kp q AkkJ %@ %H)` ƴ4aJ W oc;fe;Y3#h P k m0mX00p m@ m $ *I 3@ ހ3| kpYԐ4tr^ 0] Gzk&1($7UQ}@Pq" ԓzFPG/Cp(tr H]`rAkp @0b H`2kvoIOpI;z12p[ʘ|,n0j!pQ!,@Cu@ɹ$92@iPGL,G@' @2Aī $,:?PG'@Td@AnG؋9s@.pA}3 Z0 ؠkBK&HplTva uX>Æ W o $]Kka WGG \:Bpgp 6$ l}dCD!t9VY*0l/#27I-R,!-0! YddyG Gt0 BBTI3?@PVDp(=qGZt`@'$81;.la_H&0OVrCu)$lP,/Q{pҘka`o@`hTO@,!|V @YXt9( _fu4{W+DA2a`(jVb9@5'('fBh @kSIVmTQ$B*=\gH:HK>bz%:Xn 2Ș:%L SbμyB-\/aH#{n`}۶qvp"@W"Pڤ  O ojX $`(8:!XkwI.BuыXHTQy`B'@ Pn9ad: e@-&EHAHG9>@ =hB/ Op9raD h@FP \ЋC2%ئpֆ*`39d4thhÃ&A8  !ZY6o8d0 !@0 r` Y5^DaF`,Te砱BOBk@aeQ X\f!wH1Kb.!Vo f9K%,DEZ, a|:+}1bB[F3O9X 6p頴Ã(qhb ΠЧqcV@éfyA)B 50+Z5b9Bw5P5F+SWQlaKʲw&!Ajl2VF/BQG,+B!o 6Bރ6(9 D9 t*8AŒO}*Ģfk b!eyRBA@"aMKHr KFVƘh@ N0UŐ%BuA^ZQ"LcaL9ĸҒ t\b=H҇:|B%Pb `Fkdւ$ND!@WX"5XJb:፜1tt@VP*.ܢ0  :L PEB(hLA\0@cb0 8B3j] V a*XPK"\1\M!>@/,8%a KȁYHDT"0uu\)Mm,i/X\HqFSI ~a`ȊH6'0x` jc!o CdA8T2BX46uY#@8BlLgK{. XA$6)ANԥ$+K$; 8~@a\co`JaɃ('"^che/>'d04H޲`*%Q*pX#цUъR(l*ЇP!XAE#C \ҋ. gdr=k.` ajoǧ&-Lc-BZv ' ap \ r5a* [ ttgb@xo`C*p5@n#@:Tb /WȹU6X{0˹(H'm_>8i@oa\ 1/5хc:@ j;=D=aj*EtPgb8qܺ8{D;I - lE(6̃(@C*+$5D^Hi:(o*<8• n S/0]@w²G|X9D1]Ho(xZ@px qHHn[@V%!?X1RȎ<@I@:. :B;Di8QX q;CNqP$![D`9s F97|hpVȂ!\p#@\T X0K0cxK`M(spB9@ XD0W;B!b bPyw@-:8+H+PS j@i981( zI6QHx' G:U3S`l%c@AlRo(ɖx,*ٔѯzZG@mpHb[(7݄E4]TcR,S_W:U*?}#$58YLN`XXGSpX"* YUayY 6Uxq^8 ' P0%e HNLB*`XRoZUo0Ĝ)VMȁr`11P`̐=x>5mD;B,XxH{{R4N@U;ю`a% PQP(DF xjXcYE+B S}S @*1Z#km"b AG7AȎ S4MI5( UhWЇM*چSBӃ30gCE:_8gIRbÆx@Hș8KPH4 몃@ pp*N@ 0ȿ`;lYa(FHsHdR S`0jAxG ljZU4qwH+!0^%l x]\^x(g>O3i$&S}HG("M0:['g-DP$l4^ -7/!e΃تk+xکYiJOpіج6KY(EN9c'ch*؆Oh68BiWO0P*S Kc򍐤3l 4KX_@:gL^I>tj`/wNKA)RRH@nTRij [`Q468$~Pz]BjIT/vК3 nN/ ː:>YF@ˆ0W f Z8>[*Whf0YWjHÃM9V/(ɪALjӊչCS=a'w\[X&[H1nB]Y,[~X1nޖ.)In$R?BPisS*m |hlxbdZM䐙0^x`2гI*6f!9py윖b: a*Bi#YfU) K=\\-SC =※ԃ (d!,uu$J"_]W ~rHD` 0x.A `yi\}FV`SjE#I؁%`58.@,O3x)Ċl54{rO9Oۄf o7&VK1G]9ka:19o8Gr] E2P%|E:fGV>8`{eԐg< 99d1:K虴A= 9>t k ]AO:ܒj/h9dr"4dX9K0m4n 3&Fzm! HŪi=Es4\H՜ghL]AQxd]HM:G>Bx"')$`-&Č7rرV-6;dG6*/T9QOmq 8e (88  S _^s53+aɖPVl6x~%kD)@ 6YfF5M;9F@k7 5p"^'#Tܼm `<3|xVDZԁg[,?XO#rbX֞##{ sAfϼ!`^Uy-12 hqW@ T aL'M/\G}) lCSF `XWmP@HQc?e 0q$hԏ`|) s3Ђ%-Wd"d <#kEE+6M-ghBd2ME9Ñ!Y(4#36p#.@0\$Ę3Q 5+tFևNz(Q %Z 1k:-#˅E|9T_"Hh:a@$IAX*ԅ.]+XlPc[v3b]X #JjyE0 -q@Uh!oP#]a"=: p<C+ZHCRb0Mg\m3"\PC$`,c+P@U@ BckCl5 pwA, sdѥW05r$[hFHA c đ=YEI]` cL`p pql*d|1* 4q-/^BB?Cb<X7 Æ@RیD87H&-@E q7 VIteq%EM9f"r2m8Ïbe Km3F֑H9% IN̴bECRA1eca"$ы-?)#ft# yMhdTB?f35ʈ.ZAy[z ]"Hϲ_, [VOIf쟅.^F3mP0я&(jF s1^ RJl8#2V~P %cC:nM n<>#iЏ*@0yaK 0P +`L¹ ՙMD*3(/~0!S8VX!O*d 0LxFu~J`K4+Q\P MʡD>DAl]lC^)Kſ lF$וOY@B %Ži6 M%B\YPi0U|!QLdPL\pČ@Dͦ4_FM#IlNP.Aᅜ= R%HRF!|CqFш@gFP($D9H|^[ùTЁ,HLyG\gH`I|TAcȵMJŃQP%`[T$A!דdD8|7]HIhRd.@A0*L/$@[!AAOfYǥ&H yĀǚC9DlF\-ql.XR1TR@fAIh`@rMA-D %[d\^_&LX Ld)D]_4b\'Ȃ,]AC XrGBdH$F8ͨBE*+D+P^tF?Fց~ (O9Ц41:0-@ _6l!tF|7,ApD JM=M1x!+Zd EzVTOxQ~pmB?`D <|EA?db!YAI=mN jqJWC.8<Ap@A)0TDLnjpTq9Q@CԊE 0LdD%h;T6DKŷ,g XfD/$Z"DōšU*5mE&nC<ŨHq UH* COު>T̔,`D6 @<b(#@'xM)D\d&+ڈyN`. lZ>mN=I>Xh ҦHZB`W(UcUL1M<-^tO~Yy)Y<@eC53Go'\Szw{r`E+0/بs vd܀h@&>M@Me h(fKtC 1D6R@CF8UHaHF T+ȏ\+d"gVχ7`X5imKuyN RKwxC*ZtM L }gD3~'[x`ϝ+PUgP. O gG 0HN VhtJ1؁fc[@?Bh oёHZHb ]"H.RKQELY)ו ɲD$  zAnM SQT+t<<He`=Zd~5|vݞ9), Bb[H_YQ@NxFL9L9$ND1AL CBOFAFXN43V:#$WD R9C/kpGMN!_DU6HVT Mp`Lbl% U'NGh!FlZq@,+S'[xCM t=j2L e`*!wih}ULgÕ DQ+m%* xneg1Bv 606̨hjĽxO|Pp*ʂ`_I1!/P0!](¬eDtG+ O @ D8AoD[l| L`T8PVOA 8`@ 6tKGv@ Z  Gan৐?-032[8I0Bt1BZ£r P3XҧH lCkٶu8CyR <# n (A)o {&@ 8Q 3y-:},׋ siSPaW 78@8ǣOGH1G89\ T@,p$ @0 y$9:vCȵ6;:W*2,a*(B [8") `.UdT"L :h7NI0n`  y,9O`qD0* l*R! ItI1!`)g(,\7Pd8Q n',@[n@Sc4GF`Ŋ2{Hrlo 60ƪ KTǚ@,r8bkPJd6d9:#4dfe9g7OrUaHxcL..MȸQD8R)5JNF>jÕm%6j5ه PpA ;aXXh P9'3FßK3-'2Xݦ`g&!HW8BK@zÖX(܎~(8P"[1Ja\i:x9T\4  䓀 B.Eo')>*0B.~T\M L j8F:ġ& dx{#tHӅK` \ XE `8 o [{Rhڭ [6 ?lW%@.9-;"&̮p p92+@+YIGhdNvc(pxRڐ9`:Ҥ1"Lrf#86 T@Ņc!@ހAS D).A:! # t .00ab@iQH¦+Y` cTZm(Q^FŶF!Z;P`@,.O6GG?Y J#NuS*MȘBՠ6#)LTl8or\URU=#2]@X{L Pya-J5>57(tRȋA O7n3VE)WB`WRrERh4 -v.UHO!ŬP`IA#:#K` & 0Q6`^i'05((Eaȴq G֪` viJ?G$)Bcj4좔 !r-MCCD]qjJ3VJÆnfTiji aa4h=RH:H2v  dJ1 =0 PPi djPI7$+cH:wJ nPio7TþWJ>tW^{\h*T< WO3d|L3[L~W@*A`^AW C j)_AFT} !qY\gR* P-΂wq1٪@( <`2UაkF6X9# uC -h."1/Hvr+!0 C=at@эʞz bP C8ϼ $EEVOzDH2ёw''IȥꍃtbpDq: aA^?L|+ҼPu'T@jZ@WOU1dEX ҵfSiWʱQ]}YHEo!KldͧSE +fTAՀH$s8ᅳC˞EZS 8C Cei=VJɚa26|Q]gmUpEZ8[&ug(k4 JW:$,%Y_Ϯ%4q)Yiflds家8g.S!/s2=Ip[utX1Ks bSr[5H>L`-6M 3ĕqxyr 86&I PK;"@# -u<9ځ93bR)lH7Dh2p5A Q h7 D@X$fB\ $@Y 3ӵ94jLBDYΖQiLlb]9hTB)N Abk!M#&?Dlf.6u:PjkūC ] p8&ˆ"@q  r d. O yjY l7 붢ئ %E Y0S@e{ 78=-dN1qCB*Qⶢ@tPLXaR h@y0?kEv D  k|'TsHA-(3]<) KxP"af].;;v\>w\ .?nyk}wA{+-.L5J4-`C|f`@d .vw!s/}M?{ PȻ-tEX{e7O>06zgdQ CpF~z}n.rp׀7w7ap~H0 =68pseҦX`v&&u[ G p5yAlP{apynp FQn lQp` | /V7]6'x yZeu  V /wYs}0gbvzQ a7n2"H3Zs@ {hka}`jOw!ng !{ zW.letRAi pu4`jF[G8zv1u&6 nnIՋlrA` .0'ZFp rv2ql`%e^ 2fgv,pyo!)؆I`vI pс` Y$`z(uG~sUEjk!! 7o(Wml2(k֔F?(FI -gd'Ԁ dSa29z`YwHg}VOUPlהlCJiik.dd qziPKǖysSE9k"5=UZFs8|q1X )V[ Ո |gT+'}  Jjքu*g2ZcF$ `Vt03fe!wizzP.~"KWSPѧ ы.dyܷSfSw-L[c܈P xcw^C9uahy &|=5TD; #! 1Hc.)* ={ Ƕu%{J]{['Xfۛk &jB8hlF"+kb1`in oXg|cC!xЧsР F1 8PC:Yz+jѡ !zPx%nd8 A=1%{i ݰcT$9ˉ{!}})pH>PɟC řr;Q1ȇKQTA:ly*PfQ9)gw0 :k~:. p6KarFȧ[,+ 0Q[l0HZI=xVp wѕg f,nY W֬c UA˗ra'S%@H-NP$II0#ֲUy>{y ! )QfK$.W{Ysj(]h}?! LW +wm&Hz 133sgwfVF IMT f } !Q]$b:ҵ |? s$%!xR` d1kl iL0&]WS̛g1W{̅hjRf(Hfh] Ѧ5`9!kj a|JfQ#p/SEA6 w%R- 3h!29!PAQ#0IQOǫ8 #` L̽"zyrt1L"<37C]a3N F ɉp܅I$S?v0kLUѣ 8*%La@mI"kM ^<" pݭq-mT!f 60نpߥ&"#g"="+Ga' q@RK(pSQ 亙<p8 WE$P99@N a>˰N{UE ~8݋ ѐk%aV\A,jPffClv r揅,inq"RfRPVcXI#! ;. %(K:ρN pp_C7)]4E`#AN3ژRa'~=n9BD'xyuxA>pPe>=f #jmYl Z8i3Ieٌ??^˞M.=B1&Cܮ*oն=+\df1iN,@]L!D~)n6fƙDxaOV g&7/J&Yey{ų=ٰNxEQdl 4xe p3чhahٔ]p{eb^d-S4=*Tto+:gZB:T\/$X 6Ch!'O2 e A:lF)UdK1eΤYM9uO3A$R`6rHUJ3,ًÚ1)LREhY&d"Aís_``QK \a8ب0ڞp|fǬfPܑŦM f`]pW7 Sޮo'X"_Q| d|.Ia6$PXw % {InE~}3ppC 7K2TsM6I8%(ƗnñIk0-i;h+͞Jr2F뫒J'%4S,JMRK5Tp Λ)P 07t@ 2Y>&TVfuY$i@8L*SS nejmGR3NDw+4J٪7w_~}H;HNmQ > `g5V)y Qv˃-sYjƐMRSVyf;`fȖJFOu$^yU]XuJ0zeiz'^Z]1,H"fpɂ~e| ""̸8n^9h2UF9ͱs` a g} zȶ]Wk^SWoSWZiNlLS 0@X ⹶*& +%-LO BիzPBR)1rgWa :Џ&(r ir!ByÖc` $|ҎۙEx\AU}WV<>$0.NkRAF).& |` mxý`%4i+72T9A ƣO0Op CQo {Ivhx+Pc4U-C-flR(@jW?$= a*ACڜw y7`}%=YIeƂ`Ғ ԡ\e]A&H!c^>C2x|ŀ:72*AnSLЍ+ܗ6h+ oY"S w$N$萏~eX>fQ旾?FI32TIC7I"fj!́™UR lj`` w8&Tb/%j L%/EBz+̋3ANB!=ehdq>w`Fp8z*Fj*8'.2G^TH$] E $Hq7zI0]2L+P0 :2i ӠOLʼns%QIc QV}%el; ( L+*UJ6sUdRf^w %,gȺd$ YJ[XmmPdI+jk\l ȭD}V' b#d֦e*]X%Qa$;ؔ 5UrՍl]ARk$i"Mr-Fvp [,S(FW I uvMGE94 nU",umZY<ג ꖠ~$mI|fK,.yL.q‹s _ wth*NzBDQq6AEhdl?bn`X,uie>B*9Qy49)]Pr$[ɟ[ aVD[],t.{0qh^o4AdZ\׍ }6h>\ G G]A0yT)χG9[#d E!1,Cv¡X.|R.*d 5^Q=f{4P$T g#%>< 9%)撟j  c)&a`? BJ;?зHn>>z,]-ѷxY # +Ҋh;Ӌ#0gفB>ףK/003XᶧTj 2.a9) $`%CQ H5H]Ȁ:&&؅) *T0Fz<(+#*Ey/h(Hã8gđ";4 q;pa1)P4p.;<h .2ӌBe؅,D[Yx-1E& H0!wpU2 1B293fH69(_ l#!C8hځb<(i-dB*A :#ȁ:>F؂!L:\ uˎhxhOfЫ`)ʔxE K>`t0ZDGb|Hz93a Sɂ`IfrɔMIc +[QM0? @ЯPCX stCH!'#z&<tadP  #Y ؟0؂vxEqH ?Q0!>ǁXKvDJtQ{ aLÓg&۱HKؕ=|Wc .ieEuThL Wim S6\0k=kl؁kڕ4 &س\hDJ ^%? Dv<[@dL e]pڃfcYH[xY]Ă\E}CX{/|AJ cٲVr/LU֠6=ɡ0I[h}=#Zh8сHTCJzYX]GsH X|LwTEӏcj(NK}Y_#aEJ%]XlVVJO^*- 6ץP-u lտ 8:\-ǟt~-ENXӹaS؈JKޘ> ȊdY If; OF ۇXxRao-=t\-*F` ڪc]$3R"מ1%8IOa0"TSS%B`(Xԅ&8DPM UD5 pa+}6:\553;hR( cı#Z0ZH ;cT ޟmuN /PUu4h"RKǁ@S .X‚QVM 9Ձ9 _}:f3-K5 $ MX^:u-fe4b f(Jcޝd((ۃexE_a  -I|'  RĒlȀYh16"DXHM@e؊_KHG)`Հey 1iά9V BY:#a2\@Z:& jQىWϙc@GS jkNL ܆>p'XjCphͫ@XE>P͕eeZ^N65lK /^p쿠[xHT9Nnn 5! =Q)֘mQse_ ӒGZ:b~sZw mpo ]' xq"B~`<hE{P .%d7GMρ>ʛn.jSTu_&hP&->z铨ugݍ[?b\-fZԗP(jڢgvLO_V_V8VdaPyN֘-'O]I W |]zЂ&mU \Ac4zEQetCd&EfY;TLҘECVx/D&v#M:$QB$P4pT^#nD:UQ&'%Z DifTA}Ha5xp }MABD o]ĂDoLDTBT!D7\FL@dAu^^z85=*)6Dԙf v6%Fi$S-\a IڰZ{-j3Bz8URFtr&EH@@(yOR>]^Q('0B&u xd'X ޑyWeGvqg[EBs4-iRi=b00qCwck!50T4Y1uKf 6락ZK4$ڹc QׄU~<+ V^CDCF`|%Y1[ j$1ICD$CІK:; f]n1r (IF({ȗ<\z#%WݭIzqPg4CqBW Y^Eذ, lYJSF<"?حr#1 4D6} zBbG|uDXLD|v)4*0d? I$kܚV!24P"3lƋ"C(gD{p K\≤hSyqR (nJ40KNA;B-K!/yKfcEԴ?<,X:& "FQL5LY5v:k, =~T#H .:u" ]E`hDKtsBdDvIXⲣHpB!9{{#Ɣ7.IOඒt# Y&E 5'U ~(q"#3ӅcOԤ B9(SHztBD 3=?KfFY%kŗ(F aDQG ҏ:X4 +@D)B$\!%X681Mi4FZNŘAzD"NN=!U&'oh4 $ULe!t 9ѨJD:c^XPLCP{և Ј)A|Q3d,c#b|4{[jzL =}1Gc5It&\KXfӜH՛u,'?v"6-1&DzEu$'rUfI@<` D) =Rn0ň(S 6EfV;D2 j./4Ia xߟ^P$+ڍ Ț;od @ܝ^D d!qHEr[m[xBHj[ pP`jи@"H `H1Re6``',$iCv='<tWF A!Cx%mJLn?5׌6"E,"FJAD;$AdG,ՓQ=).PCH DDDWEDl DЏ2:@Ih_WDAApC@=qAėQ"#CE<+xq]i@\Fp̎XMH @m5E`F, uFE=D=õnjĨ=1IHXAZ^QTd.'"bG@#jDqH:xeмFoQa(#aDA7rAA@lv(dl(ndlD0DȃA/hCp+B9"PȨFz D$HEHC@D $ABEM$c@U34 6HD,%lQǰA蓑<l(MFMLGMf%E *XhD$N\ F$p$ AN$hD6`a3ދ'aJRy DMa>.J@}τ-iDD xW#YF:DAI]U"x݈D$L] Cd^V'vB^BI Bj#DEEtu&q!H&NTqtD klkF("DzRG\=@&DȘOd2IfGC ld8F7/)CDD\RDDĻp[&I*dLP-hGȗ0V~-QkgZf CLD2hi7|ΞDDB-'Dd~ċݾDyIA_"cI̼U&(j&H ung-碄5=ʒyڵH\t@^|vD%쭫H@@֠CHxhDRHLAU lЊUD](dSv6UfĎ,%D E B'Xp~ F`DtrDzbYDVDoČ(ef pGLAHEmf H]+F\G/kxRYLH|%n8X@RanE(10A8iI(+dwN!OČ4[m*F-DD_>L-\ċP( |ΫqFpmqJDʒZ˒ 0@0pnEPrl gÁMD6C,62&٠JRc A|[:{5VkE THntX2}qpC,FW2bFrJŜΐ( uLjG&l((Oz 8L &홌8ێw:F*1KY\Nblf>,\<_i]^(qDI $(hD*Zf@tJ `ҝnq K3JMb`,uD= F@N+F܋TłjIPHH/AdnoE`C$FhXAuDt%m1?IDeusJH#FqXL Eܴg@j2mZDSp'5fQ` a2sDj$Ut@b '@8JjvrTKGi|XiE(EL So^Q8H MH SkDVo"_q8K`8D(12UOJ{LR x(=ıBİВhi7uEvDi^10KoD\gN_Df tD[DxswCA6EP.paJ#d3EDE{x4]~ 7E(|xJ`a?CDB&Etus^ H kwDX wywGO|nun_8Fpuw!E`v ؔA#\P1FDPCuCPC Sr 8Ozn4bT EAF%4ziovLA/]]th~dJk@tI41A%aY ֚S{3D4(wr0I:_;JRY-<j=Dmݨ:2DkD5Dg8īEDvm6:I,f̂<=9t6,8`IoBT@uƏj8abWFXEMD47g8ۘ@AVE`S#27G0AoĽOBq_Cqұ7=HFuaCO{@u1e)D~Ǹh̓+z1H81bS#A(@O۔z,pAf f1V:X~Lpp 3DIJWH]aD^DYkkSD!GLɵjܽzNHAD;wW$DEp##tyL3Ck:R )%TFXmSD|E0ā xkG`%~FĽ1E,4+v7?D3 @D)  dXhaD)VxcF9vdH#I4yeJ$\ A k,vm""Bhl@d*1Yq1\74N2G R ZGMD&2 0H*blF!3m5Ј"*. |0Lqbŋ7vrd3]c- ^ k5p0s%4.$Bbe@׉A: y/<0niIv_IU… /fKwZyzٷw^1{d֗ٓAvHZ$`[0J*"h,`-FKҮ"Nm \",?H?XBЋ ʡ,$vfӈ8␲1㊫BTK91-"e'jf\l/^#d3@BcfG|ȳP2D<#hI #ud." )R!$S #ABl;l$CZlQ:Llu9WN"!$np-z4P"ڑf"Ҍ` "5(bӊ*VR":+0?HH#6Bb~^k=I6BvX0CFV\q.@)ń:Sܚm5mu,g6#(?y,_ g(U…𱰬:HL`"7݈lt"` BmJ.iq!; = ^_lޞMzw!BjIL WZUMzXL[/jnysN 5fˀ/n/9꘢߽Ơy=#t? (x]7p! f )z!vf{+*\s&tX?WP9X+ kY@wpwX{ǀ@4ρL}ŒQ8CGvm@#"(`sZE"hi!ERE/(}ABe5o"CEId<fftEy,REd4$EyыΆǐiIh .B mM)Q44.gQCPD@$" d4i#ZH1dy%g4EYD.qňa!irw)ČI$^PDD٧phW.@ /b -$6EA" %q*GbE=3^!VyAF).$u 9&#+'P{Nd؋W`D8/q (@ Q94P"ZR2dX!0 Ƒ^XgE)N *6)ER| m!wx,)ZUo+eD6HЄ?5!)$b7@Wm "9J)"5 e_WU;MWi NQcfoO|c*U]T%yf?AVyYf=""0%"|xiV9R58;_3vXӇ`vD/9Qٗ"[2Rሕ% dA@W!*e}+11΀3񌵘^EaR'馅X. IȉŸcP;b8,H,9X͸i-`=ϼ3Vs^r4=W ĸReD4H]zNt;`9Jt㛨`)mHm9Bhd^K#Hp]!@BIN!9+)'bD&$GU8GYcdgNfYPa']26 G8$uYD^: sH1KV"={$i󓴎P^. x].h|FK~ ([XGC":"Jr"fgI BP1bhO$烜8i!΅"VH$@xǝ u"-6n!|@6bc":/!(dgvN <>E~o !!6"O#\B)"*(d#npC|Kq*0@"MB!9Wނf Q <  ;*-"\%hL ,"b ꅴFN1"ADD̔$c6f ԄSJ0&n-mG6"vtn?&4bBК 9q"3*8V *w/#" $0$+$z7r=z9XrD'`%SvR"&v'W$1ounc/G53 گh$Qvw-bo:-pnA#Brr?zSBsCV b",v|5k=MFby})cZw!83!!o&c#Ct8HhaƳ x1) w!D<7Һl$’,I ` b"s|y(bNDGymnVQB1/ tqϚIy5X"43%BB6b(X1B hrx$ڧ{V"Tڇj;)V6 EPW$f8zGs#"J"@+p`!b@0"@Aa#^n#82 " Vj+baLdʆ5NGfdyDžw"}stS-"psx#Q?b&aI*61$,#Bd `:BM¢bgҠbL%Tw=X# R\8nq!/6S"#Q" $"p$E]l f rx0" 9h'GB F1X!3&',B"dH&L}`iǐ  ]D@`"b\o#h.AvS5?膤QDJ}b. ^!~p`&M&@d]\gǷՃ" Bh%6 $LDlPbN8f#DA.&)"F[p.2q"#!R,nCnYjP 6Rq]a " 8q8,%L># ($P"M*D4u2" (' z޸[`Y%ࠈ u:" Q[o#lٍ֩](;JGj52J@t  )``@5`)3<pB>ZcM%35"U"T`!L!gVUt"{'b#g!L}|y A0(bdfj@}a !DIn|!p@4!#`G7vd15BxS^X3+y@ vL' \= UM ^5sbő"V,fZůAb="!"a Ȁ$2?$Q|B)\2M=' >hL<ћ JvQ qb q^B>z!z"a"n!"!A" #CS2`~0#%t&pʯw"* B#3mlb}P, !(,hQ2^" #2jG{H.)„<'p!}$Y#b"T!"4%=޽Vtp=B'B@͝P !#]{!T)"Qބ5څ %H>W,h6Z b3 *#Hj"&Fb<`3"~!`!`!X.!0H0>IJ0ĉPXōr#lj2珙A0$#kڼ3N/6 4СD AEEsRBg|Q&V$8( lJ x 1Z. -p MDrx&$d " I%&<8 %杋1& ٵ2L &ZtPЈS,/F>B4rp2ti`-X LH=~$j?>G tL@8OΈ N } {pAP k~E6HddT0c96%&@% a` a 0 izrhL1ELE:2 APd B D$NMG')GP;BYgN"].#4HaCghuA8pfhYX AV)| i25t8h&Ѫ#*~HQ7A!ɵB 8hb)5@4DxRH#}1Qp>f52ћ u'eE|ƞDLp. ? $n#FAa=9P BhFViGא9qq_r4ic5f6ϐ^ADFodFRJE`1w5j\HM:HdEJ$( 691 6A * 0#qoNyJw-tAj sWR ~Ql mHUAC1D ' kD&_TZ/g^TKbt&}E@׺J̴Ή%W):Kc<Ռ~֐DM$4 A]@ {cE>E $B/ȋ# n 'H8"!ŽrypAdAclH#\B0&m ܠha& AJ1m 3 #&&;CrR6Մ/ E+U%!Y~ K2dEЃh|Eʚ*/!x`6<(WI -`"(un:@\Ie@a{GF0|`メ_ (g6J$ R@_Ra^(̠t UD #! !Í=,q$`58L<>"gn(WQ=0+!ЀW=k W#< -:A6m I@b9@ ARU`H5NR".@M'I p|H' w]J f\$;-㙪ZTB TW%ҩ1Xq+ \ V)8!ZD(RdTb!@UMa=$:t.dPD$Aj"&҆ƙ XPeb(X,ܨ%*$ R&.(LH/0" M'b aQ B?r s HD"P]B&hx; &B1 W%b1x5e_DXZ#8pD +C_7p &{3X􎶵 [Z $f=s"y=Š{,ȐDf9v,.&b5 .DU iٓ(K vrdP@8D lh " 0qh@ ᢈڂR^u"@@&AD6EĀ0@@t00lb"mp8pj3A@O`UF4?E.,<$EAcϤ֖..d,P%<y5v EDG u@wUo/U*[q8b>0jv 9%28 ' ݟؚ(: eB#&i#f59-`pTpB=qdsWX 'A@$dM}q((1b=/Z"^kB# UHP+8p,NH;-GlxB:2Q¢)DhRЮZQmL"p N(3a/,`J,j p /S 4X6$0' '#q0Gyez7f !q `HTAj4A7J^kA-Ä2EPd1#&3 %^(`2H9Gц0x t70Q!XCa,rkAGaX7Ww7'hYP,8E^GdA.` 2!F6p !\0\48"8\no>B0po!o HSAa5 A( aTvxfq8W dGQib1 RL5!@7U[^arEQ}p !ְN q&Ӳ3@"ڷ(,| ч9u*E!>&F 4D6@Prǀt daLR3# et%5kIa(@Brq}DA 4y7 PA "B@,>7q/o!]7Kp24phF?  &q#]u1.rA& @v7Wu 7<0`0yBP8}9X@t7Y(54Qف6=4)'OPW7U t@#\Er#3L0!&E0jQ99ԔgH4u1xq깋 ,R* tR kYD Qzhwt!3Vh#Qtp_UPO WSEyt !mh 7ЙFAI}#i5$0ió0 ">l !ra§A!3 `+tYU*p,EBIPB,Bw! #%g'r:,7jMCёaRtjp P(8J@HJ!` 0KT9Ku9{AQɠDiy&)0j7~\Gc|(m@MQ@'`О< 1!RbX(&2:R)M- ѤR147G" 1cRc^_Hv x[rkS}*@"x wjÕQ) :p j+$ĨJ̑ J1A*pq0ژ{` aB90s( W0PeuP-qѬD8m AdvX<4@PYQsu׳~Z a+,^ GuuuG@wm "D{w5UVklkpH)Phd ZQ8@& Dxґ/pzҡ0G;aA 4 C {13V3sRA0jp a ؞u `"_7BstPY ǖc89G+FSJWG)\2a O Y6x b.1 .{s[)"؇ hWI+#aXdp#SP]yDXjÄ2TW8@ a4VR1V8|v@ц90R#* v54"8P 9@Pk'dfW$V$>^=6@,r M G8Bu6vCOlq!hD>wĀ$m%kC& )< @,q# yŖavFQyw5y%pՕ`  H5c zƘțn4VF,6?71C)7 !{M E}5qba #a#53^O A0Oc"Q:YeS#R3cRh`tu T cP#!!!!B5<^*DѠdp 7J"65`  Q׎whiz:%yA/51 x6{ϋ8)T\ .rd8Q=|fa?|lѢ F I0 ȋL5aJ6]-"<9PQYHa9@@+-/k%>9 !+dp#rl TՉHo ǐ_=DPsNu `MqoAf60f -]#op1cόA1$[ P<6&cM`660YC yѴ]!cQh l*<|G.,"ܧE`=!8pWpX5Srh5A&HgWԪ;W ^h19FshW5#qaA'e)(A {pޛ0"*XM`*\e1Cg?r?4j4 p @.<Q  ٬-J/S$ZWѐ6F)ސ(9c"堋IOLu "_F,"6)CrҿC&,pr={"/5[U!UB E] +@` d] fQ :a"Yr nG/_krf1jIjja1s@2P# #0LQ6 2uO^}h5"F-vOYF)b4@>*HA <ܠ_ x6BH&v~`75[ZQf Pޱ'˰ p,!b@! WF8:ih^;^m.r`A V!p "@s`$F[ o:G>63Q@Qbd "/ @<%QH# \S G,4X!"8p%"Ur1Ï/DddH+ R$,}#1Cn%SJaM; s jZy+3Cz޽yK-䬑/p|)2<hí/[lDŁCW~ Wxoےg`I,W=D 3hB3}RIW`WB}c ݨ"+*&(_@y,d bȈ犍(K&YH$ x6.~m *0$/$'D>"ZIEw5pÇ.TȞi dk^.J qHkpr NIg@ Zc{m@N8Z"4!"'5j^1iА04~f(hPF*`+{ISe\I:dKT1<eY5W]G>Kƣ!c D:HD{Hr!#1"&HPEp ݱZhe ̱\ yBJ./֥(Ꮱ4 >Zp/$hEƋ^"a+ JUaZ \P;5‚ ,BVr bO|iB,IV AL" $H5&PZ'ІKs Y\*"bHtviw֔W_t "+' DT_00D) P+"yHj%!>`Z*"{ %  EH(CSL4$3"i #m=@?&܁.Ðy! :,ސ#DµH0]dl`hw o(Iq80JEh02bԡ#@#W0xd`p*#1efx.DMyɆ ah#BwI tވf/\Kf,Wkl56&1My$i1b6/Xi2`BbŞvӸ i U]B&n"[sYF8@%F +AݒUAͨ{R pLdQdcV.;d9"bL`s< 6$ Āa- $9:*Q"St6@DN73 I&T"DϐԂ;) aDȀ]!{ `';p"őJ@F'nI(&D"B> rI]я2"f-I5aHB Vu<QH9h5 +=Y$b@"`)+.{-#ۨC؃'".Bg*=؃R!#258 #u+灈xa/H6rpSH6&<@1@= &@7ݙ~@ /%kA  *DZE$89p !P(`8(hŁH6iqE5 'ʹ@@  !iHy}؄3,U;4J8;˺Qf܀]8  d bA#y`#+B4#a+00 #)+R/쉁C(;2[Bpc:Da % h=#kZopk1@ђMOJ <3uh| Zٳ-  0㧈0Ȇـ? M(,a";yp Q>XiUA i\y؜c'C p͇8xs PI@ K:yCһD\4xΩتy>|d\̇XX[A) g2*5PɌ ثF {?Sċ]Jh,ˈH}H{Ȇl˟6@Eك`W+ٲXA# RG/ϔ1Vb#5*P[*C| Bt**OY[Gr` \7| '\>)@*XΑ؆d2! fȅG}a)[S1| HA6 MǼyINO,&[e Ȉ@HpJ;lyQ.ؿ.(E(v3lT>XP&(Hő!$(XDA c3L#93|mR#zkȟmK=X T! zoґ DF2r /9rوX㼕E[IG_P3-H* 0U*B؄#؄"}%:Pzx/\+2 yUUOP} T0[FKI:Ā|)ֈ8ET|QP?h@ZW % 89@ٰC`WDEy ft ěہ,;z"DʑQy"``iRX(598*NG"*0* RZ7+54@y2t朁 cp }x``Ml40%챑-ׄSڨ(%TX g86@}%Շp\}Iք`Bc ͋cIÇЁЁ\hEsMׇxPp}9)QU3 ujQxT9;̇ A0%5ӄAxR 2z,*9DK閨 ȱy HX@*:Ng0&H(\*3\\ :U-Kz 2kBשaPY/PpDއXd52c;O84 b29cxੳ@t~ WQLkхW8 xX'BC Дc>ZK:eQjhHLRY#"MƕH341 ќoHiJ+Ep,@+[S_kfDy B&2 Dh~a غ Q٩n92k;dRL@>jL{ 2K/a¸F 1;v-Y @U \8|LԱya#0f.*Ƌ ŧ2 ,x 5iK.RhM* X+`"8jݠccH؍j ad^X^Xn_yفф=vF' ف8eH~]l@& Wb T`Pl 'l@Zax]b#؂Ј`M `J(bml'ꮬS|Րn;H*"? Zd>pHPbh 4ʠu]84pG`1n3!:@ёF9 i ˜"ZKUl."ngnL^H̲HxU%eq9z.(@&d:+bb|[3l<-7%) X9 ЅF yZ;]ȪG)#\N.XMȈ'!F acI(f @jh̲͙i&ob.ZojAIC_+M ٞ93<{~@ڌ2 hdYodEW|,P 2vXDxlcf7K)WqM -:(?Y(j8.䮸 PwIʡ*ؐK_)k{ZË~_]y6`(r  @TZ6U\@9YcpBZ^c(Ѡ.Zfo!),AY \!$\=j0$İ,)"E ZH@J`.1(}.t`nS cc;D YHi) yXh(\X@ah."+A/ým#`(" VMNA vM|e0M:HBH0 SB Pl|y̟l""q q3&IyN.|AZ'0oϞD_[I&04TF[W@f A-D"0U1Y9RNU(@^t C<5240"T$ ֡f$.ORђWWxuPC4yC#=D$eY@hTw LC-HSKBZVED+C-I%l +1-leD5 D`xz̦%eYrqd-$'U{48|[>S,WTD-+AdBi$AЖB, nn;Y6ʵ .,zx%+ٿ _?m@~$wX^bO 8 “wD_mndOSlSQ-(B%S8sܓK<@t. `aPYBFU4ԲCd .>/GUhl`s+pO\CD\C)CnVVA4A (zP]!KOTB,='S;Ykôm ekﲋNjA$_Ib?&>BeVJ }d@ Hxg%d p@EsW|6!3 HĴD(bШfy5uA|<, QbeaeRaDCu2WN{j C4 8`Q"b!ra"b,^ HJGo%KZ -n RAICJ<TR"TxPOwl. 7<'ܑ'AĀX+08e%R9'8!< ]CHob q [/*̣ BT#xAnDzb+-b H* >b^he$(v8Kea"U0警:mꞲ݁ bّˠfGK0SXBJ*bE؆GbH/&1 VHĔ O3gjA1z!ݠsMoE+R Bh hYQ:g Tt%kG <]d1QF\7W"d96CZLX цWB(Těr/d.\CgoDPQ/Zp pD(DPi 5xF Ba{I^*a"I_u"{˓yifKh%F0&ܓ=WŅW$UۤԱ 5Z hR]=G `Mx:1H=@'(D$CdKXdݵnCJtD&T@ PWc%aǫ1F[MX ppm@װ1X5^E>Wx NQ1FLBb .,yTTR`<`AX`0 Ptn"(UpuShOu†dy@up@D<. ^tuTJDlAA?2&́"d OL̟fFA@cp UfmXCx[ޏXBepDA9s$ܟ( \@e 㐡AX&Ge8]LU-KhhD7xisf%J>r$h ސA|Nʏ+AɒaxEnğȏA-X&dTT|D8=X $&؇UlZUmDJBLYE]a]I(BG* de'PtB" zCPAxepE/BT "tL_F(B@-P}mQ.d[Y@BTMƍMe<P7zSrz.4Dm(J2N'IFdhxjC8K+S$ND22kN"AzLOh."-d°A!U&]=%ƈ|BE9.BPRLA P_:R(zBc !/1H@=0 A 0 Ig&@b j l-0uB-K0Xb%sA,}LK xstAbX@R*"WXĕ@C5DSΆA}sY|  glcdJ7n֦*G:Y+t2Df¢lAg$/TiDi !.V>SheU+HXpI0B 'D p^c抛T)bHD2<_4(MzUAHt$H 1BDM/xC 2D_ΔA]]`+Tǘ _2OID_n IjdB4pC7UHL뽡1220/B(Iɂr+X63DdeƮ"OID`2 o\ObLDd@>BYpA,T0Z=^QO S\OGlU9D`D\4xkHH2=t}(,wדU@HD 20MEx\etH/cB8M=PtA0QcN_uAGHcGtJŠADZth=qb4E^H$@YHX< @C, ɍD"ehSE A_"Ė`A~7" P%BNz0tz Q#WuBwCQ^*'.s0Np-P| T*1`Kz싗TvAJAv Py# iv;A23<Iso@ @#⁖MU=E{ phɪ[JE+P.HzlL*C| ϧUD .Uy8QH_KP[5FM/DԁTz(#A@=0FP)_ }+R" QY Ww9psm0f6?ۦ6@8lTІ!F\-@/ @./q D""sEbKe 1/nS'M)'Ak) Zp0L%e!U* HkkA ,0lfx༅\BA0UA)pp^0 EW$*x, pc -BZsEXBrE茭/(ylBp#OZ;2Кݚ~xS̡a9p ;һ ҥj(ΐ@قV9#K֙t6vE0sV Wo7" 9 BDkI8!n$Cxin &0V *H 6jł*QǗ`Z&h'4B8p(JjjNL=zG+zjLHМ*H>p d2] -fS!| ^h QB3M0B<j 2h9Q!X ǽR$~ >:^xO `E| `f)}6"~(ި(*ZQ*T B2XbEߖ#}m)ae+9P`Buq'Q ! _]D&9hș]B /*"R?{ 2} „Q";n6:ZJa~ 2뮰+̳2d,A .H*sKP x8QC "I5#_4 >Hs$=ϒG|E2ˁR0:W $8[f aZE- 4QSh|@bH(Ğ%ʴ (Yra8K%X'2 TaRYDGHAD%zK2%S.@d蠀@p X?'@>(>?p#-VE MP#$(ɏG$JW"ؒ}oUP\E!$1 I:sAb/| ԄG)ou> }`@SA 3$R0j @9A01@"8%j,_ H"`kH^nAXD0#bWAp?WMA`p+a ɦ@f(/U|(ƕTGnPd` pBgO"$C !ÊoCR^bIѺy5 )q RDTDt))Ws8} *528);XIqIeK9!Ka ' Ƣ1d֫*P7© W<HCL o o\N(Px{A)Ӈhs'*@5yBC͈GgAVAPf7pp!.DIa#" RP"d ' 2h1DD/QD!ʦRDT{rDܗ4HlE8eKUdV兲I { C^N ev?`=|1bk!{@]ؗF0ZB5kPW(TxcGBL'i-  i #-)IapDgZy)0R-$ ~p [ c(*1BhT’b '03bȡ x'-iy2L 0 eRPG#? y٪" 7@+1T=a۳o`Ϝk A CA1*D ҍ"Ct1 e%wB^Q+^X:d~ N䊠$/g@="H\ϛ>&pD듦ŘTbžJP5Y n XELg{RA ѽ#*j e10|% TzТGB 3EK2 m HX*ML` 'v v@xB!$"e (!h `"ؠA"R_Cf}"B(Fl J! Y@c>Bڀ#0@.ac` RL" bk!a!  A JB o_N I*bKNCrm x曢 'l*:(1c d {$ P#"+, % OdnޜHdLR !(0"X XB'&@"X;q"HN"Jn7l!j"Zi N  _ 킌TkZnCc1zL =8@ c :&"C`^B k n" iE*/ NhA"Li@^VIh 4bt(alllKlإx/IrZJ| ڦvCؐJqi܂Ma,2 ,z!= 0hQ auī zzE/z#a1)+oS>+BtS^r@"X *VO"l)ZO' tb,6' ,l,@1f *`a/n6 Ԅ$@h d lx@p  ̂rXi0:70aNAdZb B #CeԠBj!@!JrBP A @%"p3b6=ĽcE< s cٱx H`* uf~j "*ҥ%3*2bPX),!,tfNb>B,?.J"|H;a/``=2e27:C8$,`U2֠6HH5H"in(n8 㦸8DZ 7V'Bc_* Tnp耬Wf )<V%&qAnLu XLĠ !H@ " [Bh!.R!` S u ^M|4k#p!AG@Ae 0 #'B/&rBf%4V!>'D'

!8ּ2X++ҋ(;v?Bjb"N8k"b':s֛V4Cʰ):#wT&F_f=N @P"KBD2Nh,bC.M X D& Tf>d,^ #"&P XAw/,oE|@ Xr-&" )5Fjoק7'')~*5a"VXK 2g -tAgTȚ/,`6+6!a`"0hJcVBA(6h!a ."5x 6uBngj|7 ( z7V N[@$[,1(g*",f(">¢a(A@X!P&.ď!` ^@>b^է}F!9Fh4hk} [! /rB،EKy}St*  D _&Z3Ғ t<-v Y" R\'h c  @BY"P0**E<*NP!@р, dk$@'uIH╸`Ddo 7zcqK@ЀH@> x,4v2FD8 Pl ;\!:Zn!7 bZ[[ϓ[CP*D 6hC B#W@D໒ק tu"nb"9&է$Jđc!Dbb.!B%M|-qH LRGm xRu RE`H2Bd7!m,5PlfAEdK}8$_`d9&0$UV UjDW{eV G !tQ@ZU( @0?XR=M! Ft4*e.Yķ- xHa )e_Isq >rs%9GЫ!Ll> )jzTQ-mT"[@B$ FqT =F㩠cD=6]g_1A,#_:PA")A"Xf TFK IH2Y"3۱hƑhx@LHB8+$V ,֡ZK5ᓞ,GC 9B7-Ђ1FRj% XqsuVT4D$@ 퉎RHpDIm`]MͨĠ9_H4i7IJ"PW!EnOhJMINDhA<%ڐ0N!t0+(P:gk\]a#1@ʑB$Xb,HGTm\oԨH jbG$Ģ;s'A1k 8AR|A\H꡹@r %v7*D5 9xR){XY[!z` #d"U—{` _u@A$55Dd10mjHbEJK~#GA`5\ta@19#F}DAЄ~^eS`l#Lhg;ꑱMaO 1h:0 Ig9Q3p7* xC Jg _b0XT!&:@/HP0>@! /gjpPBlL:4E:5qtp ī`( :W<ĂO!+O+֑}@FqPIl):d -65ЫKP>$` ɨH3a6j0 U ¦ p(Xt!%i8nKdqAK4hJ@B]X>8qb2 DH8rx2nIoǷ[' ?p&=Msr:Y1`& # 1PFl9!CVl]HN[$gҨ ~K)5mi(5Gx5^qYbؾ$#y)r1^I;RF pѨ @D5Wb[v:C"eg"V)#Am} %+0kk& tBtl}БI'EZ$].5H03 f@|<"bFpGzH 0ϳBz6F B\Co!7dKPB1=@lUՂ-l0-H 9QF؅fTEoL,F=H%:p2~G͔wqZ 7Zݠ= 7H[jF0A\!CAN~,)+!R1 1BVʳ &7tuBWsFk_'Ԗ'6wCo cqeg0a Pq>EΡ90BR"8ya*"%30k:G#grABc^qGq4Br >T3qqVe=:s${ V-w!p.rp XE O{A!Scc4X)!%t' ʴ 0 @w!3C@L5B:b#Ai#Qxnj(P$'RF"\JyR+hVU9dHT7uXy8^۠krhjptz[aG5!! z8䡇8pXԂ# pQ`1}7 `8$j$'ұzg `P=3BJ[J A6?gJ# ;UWJ:uUt!YvlsTVb,..5g &S$1FY5GMgp`Zs'-Lu FZDHpSW\Q81aB09'+QAm@!qhb-]&bA^En!Qzn걕3qc2hGa@Gy@f!()%?r֗c}RB "*珜,3 g@}S!Y%5`0ps 5DНNGS=Ddg?-leGp-s\Pye7+@=(?϶)$U ι+J߶X3h%m !T0;?I}i9#0H$M8NAHe?#N?+8rh$wC1c 8S m&mgQ`P"__ha'j 6_06LAlb=q*dC {(Z"G\"[,AGw)qqoP` a7p"q:" g0CdgT xW Q \TLIz q".Xl%Ka@fR1vqgv|Rbaw0j#a}.3YDxIAM6TKQA8Ea!XqQ&V?0n'4Xk5jBm>|'q{J`gk17P}Ah7![(}PXPqO$8=Q8ZT(7&4򣄒 m@DIm{D!: WʣAS7BHIҹYI)pP:8pp47~ 3\VpKnTKX% % @Po[}8`aek"!@ Ai}ݐ&$HM,!릚-qIAupx X!R` {6+3crCYyc' VY[-:gd uua}_Zq` Cbt,(C°Z)0ua+ e}8&(7o[b S!7 D)3 n6 jAK뫮gl'?-gF G1kPLvKS>PgI}-A_XHh)7Ho, I0w4kձV6@`4\P5&7[2 %Ga!!#, gn5+6?J{ln2qT>7fAhN"կ P"7BEr= ( a)aac'7?'Quʘz0t< <=ac-Vmn]j2}P!0# <p !K>qTS e1ݵ>6pc8)(BJ`r'l j+!0MI `Tq$:6#ո</cR)Rs+ŬL2f&/mt5-Gٮ Ĕ#z,'9a&8'(AK7C BrfAy} 7Щ!`6Jbl51!&QJG+|wR`t"HrtpcX!E95nPi8h`;J7V T cO ~g&@3i!1kI M۝$m;J"u !@G>ph'cŌC"eaCqG&55fl(fC"A}vPgnR;5)r1Bwc#

ML4YSA tWl` `7d,R5U]0tE&|4Af$% >>/22 "B!Q @afЃ@#7l" J2\}Ȼ65#T"3!'RR'm] |m@9GCh"Q̼,>D LPq7JAFhSwDIU@D֝Zn9:X$&LqCVYۢM_p*!H!` /!1s(ql;Hd <,dذ : 9("}+a4HxװE8E,'fCQl,Y)jSӨCReJ1Z- paD_*;)G]aNd) 1l u%D({荢{ `F( 7f4 Q4ef@ )bʥŐ. .| `%>1u"%bM 5]غr+lL(,Y2MBlҾu 9 ̌9( b0!ݓx$5(%X)!/A `A9v؁`QB"d!ڏri 8ϡuT '˅fa(2 2J@!a!ơ(9b،) 2a=4q̨Bpk*cQ` 0.rl`@r!.b^ Zhɘ&hze؆s.gFRMBNhش!x-;]h3[,!"(j)tth>{ /$%.m.Ǒ! xa ,`Xoa(_ʈU_M]heO@] ,< υvI#WjY#MB!jj*64nN [VnV4KIA9IDұ.ˈ "LJA5[6yW*B^ 6hZ&c~ ibTz7D`虘Jg`R!h!![>cGO`3Wل~!q_&3_ƁKcbN\hn$IR[B@j'JA(c,""(E ɂv 1 C< # QC,!Cg r\tHvW򁗈v2-Fax3c xl8>djPĠ UvQm K@#Bd1b-Q|H82{a"iңď!A&2 55sC(BDJPı!6s18 E쮊@ы*eN%4z.1يp0e)$"H th1|*XFx))1 7PA6In"Mm!P A (" sh$ 7 kCI@QqCaR4s1̂ $4RDyCL!t]rȗB&z"PIRpv0gjDӜ؁B%\9Q% ɦU/|aZTr:qCСT$+:"q-Ȣb3;[LO66xc%%^6 ZKX>IY *LSW LdI͛, B` 6&;POtD{Ɇxd»B"ȐT8Evw#<"=f6d KDjE7f&IR $laCf 55%* Eyq*yBQ:kPANBgz sxcF)-nknk!D`G~IXǯt@"E*h,tu!Y\!Vx(fC+&Eˊoa6s"(z]l! +ua{ E OXl))EmQ\0J͏"4АEAl4bLБ^݅bљ&M@ 3m@UhĺF,Dz3ILx>F2[ѥ%tHY@ B3^pS@6$1k-"p![/"DwgGLwB,_f\nRẟX˴R1Լ"c::3NPI:`9r]h+Tb{g(Hos̲皍>6h0@@~9(X,H?!%`&mO|`|(\3 sf8$AG8qo' >X<kiXa9v m D4У!Xk [pG``x4cv6H>жoX/]HXE5h)؇3qsl\fXk*.@Z 7 29,0d=2dkpP Л㡏Ha#{k %х:5[t G腣˳Ȥd?2㉩p,thc  KjԌ-k 3%Xn1o4:Pش@-^ iϘ~фܚ=Ȗ"C7-#%XZ-pJPXD5ؑ B(a}YhY`?F*hlӁO QhT +م-3?X>H @])$̅@軒h`#: 0G6a ؞y1.p's ؖJɑz FFo* Œ 1XqtqFH db]萄ld9,c+IDxMh+*J>:o0X]Н>h ͆ ;7V.H eɈ+G}n`GP I>;qʒ5`TU'<eo`+pgK #5J(.CLR Dxx5|ZR`N{H2pv/ä SlYE0c5AXJ7݃=]IʇYժQr1T_y38o0( #w$+Y#h:BЪ@*Gqo,9M?ې90c@aЅ[ϣ8'\@ tq#S)Ye;p:G H KcQ ȔJ;[h꽸cЃ <>X{HHYJjR8@j2ؑ|-$\X$؅(6d4 3VdYTy!8U>5i<-ZǴc=8q F G2;Ě[Ӵ 48 ك I G72 OupU [U8d  z9ƹvѡRX>Ջ@(dAȾbҦ!d@_7]^ oVKH f݄~5.@Q*כhΛMpa-]JmptB'Q%_mc ٓ X 9!DacD (I0\XZ ȓ%K0ȨY[,XtYE5ZC]9]2]9S8ظǮ3Ɔ@T$o1Mlp]U>wm! OPS1>+/U^#}ɘ&E%eemB #t(*/ٍ^8_g(F%.+U;Bȋ@l#/೼k<m "~ "4zх8 @߆ j k(EV\*h6__šy'q`\T V x!``5Z 8=05ءHڦpeS[&Z& ]qXNgр%ϚwU濆;RQ;BbDU4٣Y n|WH[X À^r2l5 c= @MR e=Ieu@V-'T Rdp 䕣G[[@=X1U`XԁMtJvaɋ [(H@/HVNB<.a؉e7(3(ln33ȀZnXXk>"ʜȆi#˼nz $ͳ̫Ja@e \`Gm N l%hh~٣S hչ P[}ؖ# /kN.4ve OzI([ΜdgȂ} ည$d(txf]~8dpo╺+ْj t- iM0q؃[j[4L%fk mo"ل۠ʸQQ/8h>ڡ3@9i$Evpbjө!Ȕ< ד(:,wƀ5qhY`͛ # *> [iN[#H[eMWynD" p9Z[H:ժ`W:x\+_Nco t։']ax9Lo27 HV `D_z1hB9A\^ ɰ(HȈ$͊iuNԒX`r=Xa_:;[qᛉR 0Q0d`X3 07bl8p`Kf?YoV@%yϋ4 UOq`uv[xۣwȸ-Ӡw#CB~PiXsj酔žy ,@B:7Z Tؠgȍ:][V _ρQ`5 Xi qgN% pZXZб‚1Ȁ1O.Xs6X.: pW_Vrte; )h⦖ d \{lT$L6P0(a2P v b08Db3,<]"APLAa } K@PF2FFAPtQ7RPg%}A30ËgAD@`9MD$]fFdg`tfrwJ PWxETV57 [ o$ Gc 0҄Sv'/pXfeeMle-|` m DȠk84A <:|AFlDʹ;!!ma*7KPjа sd @AS|KSP٭=31 A h"=9MEuL@@lLIMc b&Q@NqM oR%gP#Ȳ&K/9l"H'&R5lva%`[)QbLhp)Q@;+A.=eB BAXUII@)@b1}a9<#-@33PbTw dՋQƭckW \du"ҙA[|R@a ,0 2 0@r"2P¸y 9x5)JX,{- EC@QR_z QB<8bRR0E"|pFd@B"RF ,Ykݰ"J̊.EDEn 8 = [{kh@>q Y *(w"7 }D%=~-|nb~ +e$ `  \MeP '@ddJ:$2I+׆ bbڬo8A? 6r'fs:D 2 Yf*2 P9 b jDRUɂ%.v*Ζ-H=::@kj©#ȃT'(֠ `@D4YFH0r(G%P9٠ <gʆܨ܍pd%͘Alh(!H@EVnpodA0@M#=وCA 5K̘[C$CTQϕMY@K L@ue>hADQo LK<@dW\mH$uU9hFK4۳ŏOBhB>`0JXdUcr搐 .VPLA &]EcLЈDNe"Cح E>m&G 壷@,plD46U;K$AEN$L Hdd 24eP _>0b BάÈ,O\S􂸑 ,1eA@(E%_.Fe=Y=QEDLh.DD .Z..̄.m 2 `@8k [:1Gr.xD9̓/d hD"5OYAx%x H CN$@\Dpd D 븊(05TdmD %l4,C-A|mJX`DtaHCC=$6l#LEy <IUA`?l| Dp@ „)4DCCDTDP@tܼK|> Ţ KQ`@d$FM|&(L E'`qa@ D<秦IaER^"V~XE](~xb9lPB49oF!j5O\Y@hvmA4-<< Spg  4-7&*)QMnA BTlMAپH&@*D,  Ęd. Ij FYI7@D J n)\ r1CYh ^[ĭ-JA͘/pcDpWl[E&*JDBlK!&^5 liz)NH }O H zFD/xùč1UBiNwh4v`- ~e062„.*[Ev6$t-o( ,8DJpAd$Jq6A"r 0rLp@? t]3LHrx!zC AAh|!YkBJ,YA,̅mZdEU2L9P}0IQݖϰp‹1\F2_9Ea@rٞi0fY䃸GN5hlaTN4wEMpPcD9EF¢DN='ZYp!APo53']SY!I"`ݴ??r|T҄ FFG -DA|cQ¾XX35oBZ/Ҽ 1Lo&GOmD;C*d 7РACߚߪdl/@T@]H^AX&ȭ<ˎO An|88)m(JpÃDFkZE!Q9Ş6ALPA"NdfY*$YYϐ'/c QLB D3ɽ L"dj6]vtݡK<LLOb]ÄEzVlq&4ȯ M_ č+D`V-=JxbD.3aB OBZ<1o ( 1 $D:oLɃIPaBO Pj5PPKYfm 0Gju!T} (BI!8p KٶMG @rЂ(R$Jbݳp~*'*K( t@ U0n $2py 4zF7;fF-a3͞5~dyUȢ&**dLȢP /ܾI&lj%!"ƻv61?  9$\J<5( ** o qXC(QH켣 )&ztdkT!X(:RB(2f\h#X,'=Ezq6(9.B\(kJa *Krqਡ:ʦBH2Eh8Y<}k X MrCH4Z@(` G6|M!`"e$ enn"!`o>w l"4B!2c6"kDچG:JAۀ(Bw`ܜj9!B}IƑ%Ȁ6$*zZrFgH:8yƁ HhOxKK`&Ph(铅V(# &!6(ihn\ š0!Jb/%b TW)z@a X\e]s@n2"!> C Iֱ-Lȵq aE<9!DqHYJIb`Ҵ ʅ~L̦m n:S٤%2ڐw Œޚ ~؆*8CI5 A!K8pAo Q(½$p,f@S+!qN O %%zC"+)T82Sܢ 6Zǖ(8@&O #a3[(Q1@8p~9GNH8r_3B> ȥ;dBݴu!pU\\. u@*$ 5$7;yՎgm-ey c&6)UB&6l!)e'PZ^s(dR&=/a"CR%KByz%>!OH)X ;*d1Yɒ P@4x8_r~_*35"'/~Smaj*yEj1w_ia@U:H!_CND:ocTB.S13@#ʝfJy@9bRr\ĢJH!Ge:!:.%#} foF!6TJ!"OϢĴ-D&@6d$p?h0bk $ 0j0Vh*N!#g"I8-`&Eh@i( '|נ  2@0i&&=N @K"! ! N-xb")c ~Qo!A*0`bl!De x*b-V( Lߒa&ĠˢE#F X] VVC F.֏~ orbDiM B-.&B.KRj!a V|&E4kb@A${lF)RBb:*"e)Q!νăTNHLB%f%zȱ$p䮜A1! K$ wƌbZz -N&'g$ C L ( x Ϊ/s8n(!FLƤJ!"k*dP.M:`ekź/F"/\-ndj  X,UJ !a5F3r `:`eY7DN[`v=()Q)\*<CBq)3aD g!RBRJA&`2!ziFQT?6` nrp%o 6ְ$!gf:Mmb&z$ dKB!!O)Zp݄ <(i&4UH /j0LN_D\kI|-TIU걮otoڼ `!14l9n!0~ Ri,m$ ,a^Q!!bPb!/6u4s$(-leX@Mf@0|~t)&آ`bǔp`-z Ҧͳ>=Q}N%>8@o"?0$U!6u$6(V#t#,&)"&BBxp:mnx:(PDIeFJf!٬dB8 @`Dsr4- *@]S0.b K^+DRr 4!@d8LB 8$MZd &N. V!A!a4~Q:5Q !-0c&:#J, !G]+ 6:+f)Vj2d>D*Xc Da1O,l fbăEl*Tb;e$ >%b%b&~)iTZzJf8m^אEZ]ۢI&&.H0u)@f:hq#̥JQ! (n+Ip.+,ڍn-!¥F[ cH2GB2 Ѐ"RC"OhNaP٢5l j v! aVi"Ej7 biB @B9a @tEnʡUB4N4 Y{ fi+l-H}<{rp4 [,Zzq G<$\dNĄ\i +%@$b%bnhD*8 `!v"3 K|ս *)c$3!۠ p` ; bI` ?C`.JqP^KCu!j]iQ4Q%wV`E(B+29"4Q`rA7h Yl $uBFyßℇBiĤIGnl SbF{@DUDBOJ*;kS.KB<*^h$(zڢwy~0!C]q@8 '܉   O`8tؘrB.%,`B '! C$$ -? lH8!Zjq1k{C<[@"}M*>Fne"V≠9O Հ~+ \ Ja!bP-dQ!WHY@ky8t8も+`dFhGZl8G!R@rr BbFAB:쯳bY6P .@pBB.$Y@pvz8r'GK T7"U^2Z( %zK E"bnc 8e&HK~-!n$r2u"%!M#nd 8$FBHP& s(y*J1D@Z"D %\!V"#7@6!65r`̠"!%Fg=7t%bB{ dSeNFtATA9$MU_jM`( llL ByH$)+rȐ)|F"}t!BF@ZfhJ h:.~DF@cBzA2IvK2N 2C G„W[ 2&DnƢFEd!\ib6apa@#O`` {cN//P !vjBt{j^D"E%4/*>c&d#G4GG0y p:t@.!a tVg- A2:zZCm:  Zq~7jDOKBAf 5qCd&@=eZ) d`]Z.C)܄UfE{$FNsȡ0fb;Ń &C@ PO!4\0`gFp$HG8 ".xM@5!6*z% ce  ÄD >$M)R`L(lP9ڎZ B2Y#t^ѨR ^"4OVRN5Q0n&} @$"C4A 81_SE̒03>*+ Spd Rԗ<ٰ@%0.%]bĊs$ km_:r_O|}[۶)Ş{Vw6}(ǂ3ѽ M: 8ǵ>\?FGP9%Ҁ1FVdio<7p7HPPlȧ_*puIA'1m"ZK֔hpK1%3smcmj/Z!i>ed&HGHmAd\P٧; gEIj75ij>}A^Tҝ3!KFA"TbDܳN`(~)aI:@$(`E"G fȬAt^"0RFA'TIYPSUPo;t1IGPtmAMFp%'uk0;vkhk[xQ!bLA ~%vl3}6ôLD\vdhyC_*.# <| 6>߱7*#ѷ.Fs &F@c/ TlT6%UtѠ08MiK.]hD J!+}Z$1K1yQADCGDIj |DJDiD]S*.G6خ+\f: |A4;JNU^}JS%)RI@D>@d@u*-YPĆ4ڸJfrLol ͼY\IMdaE b ,q\gca-= F#bW {I1-Y +2H 'kҊ8>l"2J+)HP X QW~lBg1W"҆9F[ȸ2)Er#DoIAE$rFP̩+|A" +@ ,2Yh#,ɥ@s0Ydtˀ+Qu*Q\U wH l4w( ]P1BI#3E1 cT̏pGi#u}dxo`(%A TRi0(} `bxC7:\ "|>mx, H!  dXp @?CR1S(anԻ΂Hc>aku }#^(/ Âu(UaBgnv$ ab`FHj$r:6y6HBH9|ЌD+ &]b. #`ya2㨡R& ?G` ("rZ}g}+:*rhSژ A^=G ;d` Df4<(,3a,q [Hbc  p ɪѲt[VdM{綜ԏ]<v-8C]55 E@# C>G>JAAph+ H'Y@lkU@sC2"bhG8 h*zRA c2:IOG2G&D%p@#(&KqfzQ6F̫֥9\_[Jو"pK'f!GZ9, lt +GH(H9(നqS.R7IU2Y"\k|#i}8oh.U>2HeX\1Z0aEN1PEq%sp:c4'nj2taDDyvt~/1 Z S+uhSTu*vuY 2];PuaA'WQ`XcnU}LIe \LxxwdY!#u P3"= e3e Cc/%23*AF*c ~;2Xn b X`nv }\QE-?A&# wd?l$cQ~w- oF1l (H"@1 BS"2\5 Ȍ](h hZaZF+8ahfΉ`qA\6V0B9gg30 ad!"$>ww]TGyKIx~+5yN\?>uql?rT)#HQ PЊ"8A1\baj!&G#F~[Ц{*SbUP\9HS9NA &!|/c۰ {wU~E2t0lP(Eљ4?` QU.1-VPJ*4Ub9@kfhp,2L@6Pg67*%f0kdUX'9z ,6 [Wyͤ  }0"s\w @Hʢn-Gl&qނoV?R}f.1xy@Fyc0`67ccE"Ri TK0J<5P`a#&s3q&ư&!T C ( _]P99XâH̳\(RXufPv)1(d^JIE`d 0l ZqpV.yjTə]tr̈JS(jssVJJ*K1obdxᜩP7HMb BeI810MUp(bqzZnQ7j_$}.ފK2.>&kkxXx!iNZ+3}`4Z򤗦!8zo` Σ!0(BB$J12VF EgQґS9mEP)W35Ar%[d<{@eFE0Q^Zc{` {H`5p|sVcNRM^!&`#r6 QJ4lP1 );u sKsOgi 3<*jQ. ^RHP@0@Ӕ,ɪQIU${ *|j7@az?qNx>XV:?B6^4`'ڇH/3 "ePRmЬ`]FqWhN,A E@)Aq8&? :^!/P1V@LQJӵWI{) gLO97^aM%.5Ka@t: r GlTf'< ) [Ƞ"}@ 8,P8M* UFnƧ6!i/qߚdCp>"a>jy-QyAb0%kyT!g)u"!$\&BBEP [vF` H! ^S W0 r)8+d?PK&I0Hj0[V3h?bYڊQJAnJ` "fg7 "vN$^b_煁\|=Vjc={%by~ԶpYF23*1QU#"1bE ۫Pl=zAA5 o1aX!Q0jNK @m0brb  'br_و!ۀP*9mW ڡdEx#F0 w|&5`EY %|P!=+JAf)HVPA` =j+ 9E zfh- {e- )Ӄ-U^@}}3@V}@n3X#.wD $RNF_JaO .!6OZ&0p{@">7a#>+bEqu`#Z_l1\O|1 uЯ&aސ}xm'ܷp6F` . kϗE3v,jD IPvUs c{̮?;0e}{JftU0CEPTaљX΅u<Ka iegKSo1m]*⪅1wiMQ!b^ ?q,NVzeP|b+1x$qC5MV6tt "i2%"^Q=0#a4e4BC94+K3&@H04ؐID C)dPq a %Y . !Ν;#ED8rM-6 /%&-g1 0ư qlkX(njCGІa\R7!nWؤ3VA k@ 6r0dD XdHC1M('#i]7y"t5,Ǣ08yP@^hH  J 9$!s1}DWPӗa0g!|[ =-@a"`":Ė[RЇ!M("C[`/oAKα5@"^c c0y%2;-R< DS$(YxƢ?'"2'.b!dZr'N1'jh*d'撈&1`  M49+Jk=$ы+6.(!3@#6be1bQf€T rr`9 !S45ge#! 6( j!F66r#ʶn\!RQD:ye.""Z!ZEh Cu H@d H!P 25Dk6D(rL  ZĆȡjX# |xc DXZ$QnQ2@ ڴ@$a1] 2 !+"Y$򬱘 J7G4$i15: A) ERJ$@B 1QWCFmL"Q݇"2#.j >ujȂ,H $MJDP2K: @H+2ccwDLffM279\‘*q`@`V`Mb2 CZB!tͫC2 "D*K,EA5P-1"WȔ=i_)eeU@Xb+.yI?QjY@2 XP&*d ){(xcA MŐz '5lS0躐1^0(:>3E+}7NXBo=H`Z8RL6UiJK: ;T0̈U8 CIAB FbYxC6:k UcXBT1',bkȭBBɐkѿ$w=(kxC'N0C-)`[(d%+RSjD" X[ Y0&2:!l]3@D *'jɮ b^Ȗ!Er/8-^C ~I{dHYH1 F}L>':cgMsQ 3yFRJzC B#!B2lBPӆlޑʫ"u8rQ[U#i. !XN4(&& Ȉh@(IE\O`Ǭ G1poLNA lf/* BU{2DcQQk< (uH#N5 iCoNkDǽ*C:No,&( laꆰ0HB@ lƒf1ƞ  D9/bН" oC /H^ Dq% = b cnnc.r0%0dOcBXʷ(PF:B.WW G(/11bu P!k(0db nC 0e0h h8i t{3I泊Ich9H(E0z; ?*ЁB٬8! lR[4`5C 450TỈɸZ |Bh51P?$Y^ \g2 V+HAf P@I8L2¨ `Dѳa"3m$ K>q|MC "kpެJ(S^zc$S ArX, >h%i:4sJҰCl/|*Ϣ8t0ȗXd!9t!؀܀: 8ч DPʳ `)98i)=( cLPKX Z2M |̓m(4q8UV0u@H) 0bl.[1lÛD<Yˍ-%;҇]UP- ]P`h"! S1a+]BOjxHFVHgHrO#(߫ITү"Ҟ) ˁ | `j+ɘ֙T,Ș #< p͕ " #PˆA (6(M hDX@.z6>:U&H@]'Qh<$b<,eH}ygRUXqQ@g !Q[tݕCmkXD h9MmPk=Уۃca?#Z# ~Tv7PH1L[`p`E9\%Ygt쌈I02&8Qf)04L W9 bqh y]!=n;X"Vs8(yâ! & 8xD8x(_(81 's'- A9 } Myt<+ÆеsH項gH_(V)]+ˊ6v):9@M#ڳC l>A/>KS|Q'q"xTyk )bO;7 yRPYoL<.vDqt"  R ab D+"=?ħ}&p~ex$jb!?WvH0RH;0shԟ.8 rQ+Y+yh~/C>@g胦,x*JM``aB0aĊ+b'#ǎu 56YfGJl^9.v`w.pP@`i6nd:$DDF)jL-S4\4a h:WG-)BDBkLEU\rԱ }IeLFkBD}I  '4*VDGAN^yuXD.AE`j9JBEt? UUT-]FtNe.l-50IPW!lQh3--+E TFo&[QQl,,cU !bADPN\`,]G.$ApT FqDDߊ-r8d9' Q V2D)O r!F`BFa*}B |{.c bDܸPmEG:%5{l)ږe$DSJnG&Ui.6I\pI<\]B唓+ўs7qZ FuM 5AFPAK/iAJݵz #B:+F`B" %QAHYlE#Q_O91W& ȆLzQQ4;HT PƁL8`|i""0P+-0upb4nTd!!D>PfD "Pq$MԜf&,$H8}1YbqIwK[O r7+&,t I a$ hDdGWb[Ȁ.a4#K 0,a \pv>a!DK -(0"}%Ho(B nql#ՠDCV 5 BjD$,r{.8pDo)6q4{Ap03B$ qaL@?^EDUm$[E\U#a`D Vuc hF֍nYEB,4GLE2! !D].*` CJW5 QB=<$"L {ŘٓUn\" %%1+ZIVFb !ADVL3(Gp)D2 8QoP/i>'h%蹐+ᑴTđ /#@ $%*)˲ 1BTV#'yT=#¬hEJي*QބrPR>,^)`~CEPAw> 1"+V Z]@!*3!8I#bҊ C!/DLg]E6gc*Vo(eJAKtALIx;xE! u s>DNd+qFNl!FpEaɌJZsuf$r y"2ٲR G7//e; w 6 OTX3!m[vJ ,*0?6[GAACjq`9hBBtH!{ er( 0ǧ8,# D+ @HH""$ e()8H( G @go0\(/T􂆴pK`{Ȳ~tzQb+avǣIFP\9(lEv>it=+H.1b L.ƈ] {qyEC lhӅ@# p^diC$l X ?L*Ղւ4c[!H\_mFM]Q.Cc)݋ fo=TId6q4f Tl 9]$lpxntjb4J0%(ͩ~W9Џg<"1it)*Joj!391C?TeUBL\|Up<7`@DGF e4a ,D>F(D -vOdeD(lih AG\Bܡh`Ax(x[EB WF "eAϽ؅[F ,$4F,$D4I>4A"FxOJ\ oa\DO! v.., 9@ &EBɈ>45lDNJ=ŅOa{f B|ar>!@DYBFXLF A}UDTS 2[H at$ IBED C(MʹLPDJtONPb0#3.5OO-OMx_D-dWPG‡sa8 >`lbZDhՂFgƌ40 EP C ڡ`p# اF<8MwZFF-ZF=zPVgDBTB8` pB!~' CcY U"(MyY"DUF@ÑdE8f \E'ېXO$M*&Y|\epčͺE@\cjB`(I]&(?G,ĩ\"q]\D+]V-Ii&pPAjB^c=sH5t8,Vh%u  EP׊_EA>ZD`F8KE RpE6FOdaDFHB-ɤ VBW6x+mE6(DIѐ\H.$€5"F|y X`$  Xݐ"ޘt J_eGO!\%X "@,­MeIkFLO0 -|EcAUtBjT4$*A.8hOG/-rdkbl*h Dfep]̆I,A=@08 Fħ>}B'_DmAG<'!|{ .rC 5)YL׷^.Ji.UP J DpG Cc8YD(jb+(dDY-YSu8_m=HpDi! @SDEHӇ)>|C=k(t BGD;N:3r\!DžG5G(Ph E^8-!LUF%-t*|n+#D k Sfc1DPIIIlm KE-Dx<$pKFl$N˞nF8h-Cqʅr9ds.D/;$ОvE(g2>-wvu'Dֆ"m܏4,|UCDAנBt E>lOAHݭkC|m§mFyEH/B%F삇FH}[,EـDOE.t+Ln9[@" aA/PMEE 4R{< NLO.5D\l AV@8ȑc3|rDj^. aos`52bDHU]xA4yF 0N//,D`c C5iG[Ua$|@v2<<]ELB#mRG^xBdy١D X'fZ-@AcDKF-Hm=~ZFo|.C46El4D C܎F?~+ b  B$)3Z +(I۶Sc *Uh #[9i`Kw(\ >$ʱU 4V<$A0BTJ[EUyĀB o!$P=. .P(! ڨBYV.hZH XFCVIjŅl aHlQ([-$ 6*'hR(6  4P /'yz#(?͋lR*LR r ZL# yH#KxFr&aT6[(}j#&Eɇn(ؑHMp`cc; !bgꨃ NtiKS! P(^TY΍xM9M8l#j8`c QH|a!+J@>TNJ0Vh\n_\HX\:9+bX! Sd(hA*9ɏv}hj* DJ $n()J6j<]X꒥]9*-!̂(OYp@B"' /`6{F ^(@SBOeMeI%Y"DܒLB pR2a2R4MM`LI9+ Z渄_% ~%gâV!gcu!@8l,RpDB8-џ7G@E0 Vb!򁳋X@QDld RB!=Aj B$%X R5>dG,!"kYJb nې (!Maō̤ WF`*h-3 (1VQ E`p|8Fċ- "gD-U\n׋^$5 Bqnu a6 hiwz`e ㈄MlϱD5v%"EHGC H Iy`M,cvրG/IW)I J$Eٱ|<`gIa]U2AhEWe8I1b } `BH"1D-l_БTI"BQJlR|T ]J;ҠKq3y!;$jW2qP$*BC,F (Ȅ.(JBbcbc"f"V!:a'Z'n&`@k6J!4fp@w8Mwÿ=B!b "!p*$H4M2LD6*/<"F5&g]n 2#" B% *bIB}6Cwg!4Mb,)(t(K{rHB#1t!:,",+ ppɒ@ARP R D`t{*BbR:U$`<܍D^LrFgt$*j;%F.!Las#0X"`Yr@A@ `7=JDXR@`, M "<9`^Ss6y_G* ɆR:_b@6Ƭn8xVin*go* p "kNtKhE* B]/-g!2FG/B.B @ 6^ fV!*!ejB045J+"Hvm!!5V!3h2D"(eTi& BF#-p@,V;`L0 g!8F[l}hLݲ@_gg;QLi`x`ufc_ )#!cDc G%n@ @ ^3M!Pa!>D.$qؠ\"Ya `8s!(#8a37Ka2d`D4Q J" " dd S^w&`Ѯ6*iRyZ6$dIԨ8L(Nbm6`"h,6 6|g[A&AA ;0"rn hW~88vpFx!l!`^0:=:l Az C31,AH`,f0nբLT"H3@B 7qr!8)p2$N@ q  `` l(D6*E"p~xo,l2 d*j|Edm>yMb!Mኹ}'BKp%eJvZBlS(A#~&)È'pIz$M>*  + gG ߘO":#BGhGK "XBgOED 5vuAz "n+\Fsl\9!#\o;•!nA%,P[h!6W#Πm*D6 Nr<,aW(@#&UZB@(z&}$d#!$1?J^T # FLQa"0 !;tAZ=pw# @ n@m ZVĠ4F@ ~Wz!ll!$I, &[#4"bLVB` & hiઋDyyR`<"f(a7 daj %+fC`@Іzk7b"MlaFXd@z{7B/;'|`/*v!"F+/.]6AduD`BvǵgL!|"@"X9y6CΗ"!]Nԋ:.B(% _I[$5(6no1=Z]4.y9! |5 -\ /X ʥ@$Aa X(=~⺀?H!$B$BB(L"LA ,f`ALi!;o@-B߂` E xd&N>5g`|n.">h2~6F!!BHb!ڂ/?p-5VGRRRa bĶ3d H<5 J#"(Q4HƦp$@bɑH#pOhs5dͱ4,>B ΜG%Z@<L tApf ?`NL,!V@ .]d!b8,cHb%05=M<" @ Al-lGoȸ@"@AMF'x[=4\O{V BYRv|kQQ-` W W1a+5 )>XT{t B0@&І5{PA)XsD0l2Ca 0bGȴ8I,,9E*ZD8@=KVs\Zg @xBq$3x@D D4@ AhAz25@4A_}3P3 ԋ.`W* -413=U*B<LirxPl? U/a(` AY` *"q:(@e-KE^1P , D@J/]LJ wC #2+&Mbg=P2Bl }@3pQ .PjqoƸv>ZqwAİs W<q  Ѕ0Q]Ȁ 6wqMӅz   2AEih0(AԆWϐG10r,p$ 8ц>6F@!z4)lL>͊HsDA0i 0 H6L0X@ XS G09e).obZ8>A;t pgA:aJ1%O9G)$ G=pNX \3Ij u At^/ $9Agf ! a E5 !D$وh,h" 'H"Bxi ޒLKg @@ ρ Kl Uп:p`AdupM1(1|m 8_R`#SAH&ۣ UN'> q0jA @  W:EDAO)n ހ/j^0񆨨pd7@ !*"V-ɜb zQ&;%,6AB&0%䒀"=DPHhG5 Z(E1i-)%̈Je28*"&`R4>QjR )`p@Rk_ H2,oX ˈp] '"Y)(Bt8P BLP'+aDCRpg !Z!; P #F8,dhpOodP-P@#im:2N)*V̑v0R VADͽIV)1D HP59Dˑyf 1@]tml#6}: LDx:p( +QPGa%ep3@]BwolZp@[%ƛ +xTP+1&߁`> th q|G &gIO >Hc|TLC)2)yDXOƇK@h։B;Et=(D =H pKX!&A41 f)"A` SQ@x9R*ZVxSba N5"<8! `>r&Aj 6dOu :GXс+qy1 #⬬|FHtSx6O"2>ii~ޱ2H2yZ\dbqē@;s+9j`߰p [IO7po@ P\p @+@54Jz55+aOcА1rR Z>80!3BGu?v')  ,) +4 Q* P 0 "!.Q$B.\<<@0ð`eJgv'&T `fQTxw ffax((xll%d*:By7hVVV#!KfPeK7j;VXHQjB-g{{5%'uyc pXppPIP`^9$ YP*A$M P` Y(oPeAfID yNR@9]@avJ8E!Zo 5'`Fs o`a8}ZN 7qЁ w]x6-n^=@%PGCnvT>AH1#I1G!E;w ! S b!!<#8reWGXq !?KOMS6p ;&bbxbvjF'e 1 j''H` `lf] "/EaYȐha'pPXqH0@pEy"j7+Yda)D n+b p ߐ,>q r,kDED1!63Pm!vxD bqB@@HE/EӦTGI %t!!  f` p*]A Xe8аqOb Ǡ`xHPw8=\Q p svrM(D8rS$+" %?Pu)mrWbR<͙c,Frg.I1:Ko`F,r9b@a#(AwHwlTBfy3PyjC$h?'0 GdLDfE'QC00&004ŝS?2?I!+` JH‿14P qe U 31 Xsa Gsd\õ ʰh 01lp =!@p! 5l@ a` + aK` T ѵ )Rsz+rDŽ .0 q4v Pr%6sX3#47'`0=iO_=&%)UE#\W.r?``Txj [tv(w:w7kg9VaVT 3h :A+Ɇɖy%*jPk.ViEz5jxrEQ{V+Z^Q(!)@ 3bkP*SP 1#?T T29ZD#A1 *8Z V[]$ &6Ǣ W\Pǐ]}W 0 }0@vQ! pÁP or+h8 85Z 8Jj2\.T 2GR( tD%0"#Qp ?`0ubQ ۣP@{Qb0=aPn2sPA(Qu'jUR%4ə⺱H oZW))ɦw b|Fm0;mW:tЋe=p?D.;᭼Eg w{<ŞU0@>'8)@ I^F49!9aC&q2p #qN ϑL\0.5]p r<.y''*Hߴ5ϱ3;5a6 }Lp@ 7 ʰ 84KWI9p2 9!ܷpVY!q #x [eAb fTtQ);p c=$KS?}:#S423O!` ;C|`'ah qȖyxb)7&)/DB3D3@ FB(aY$!TP0P˶"a]7sW#Z ,@g0"$GB! ta@p RP qqNZk`E 0t 5p0rPn5,[ u b6O<@1`Kp7 `Pr1 2IyGЍlیE+\O3w(f3!Ӓ+-PQ̼p)$E1 I& %.0%2rT\$wBȀ! hV'lG5Gחx'ɐ- W0.:Qʦ)/h =&ϙŭ{fz,ܠ1#291)'kV*' PDKʰΒ=,9BͨtҬP@) L*T7 P¸Z`}+nоp+Чp (!#T .z m*r7.Y?9nJFq" >-i)Sc`Q VzFqD.Yye$" `=9Jv|fGȐ'@@A@UBgUr&蓛yVa Z`VY 3Thj)kuuj1E#QcIJ!œK'%QW` W;#0PFOG4Cya AU b}At2@ܯ&LJA9 aKmMM@],z IP ]P[Ppt Q5 M7A :PoS.5pLRA nQR"@.Uힲ Y 4ߩ0JC˄ฃPHÄ~lBhS_ HaHB G#XJHt`\7ShTmWYUz(uڵヰd@Yq.o A}tF3 I@έc%aAtz0D I&Lu ۳D #|>Nuo!̑Qfs۬^oovpLBn+%ꒃ\As7MBhA:n$<NZ .fY9NF\<oP@عb0b]hE#FcbHȒr ABV,'L&0OhU)G FJ,1DD[ߩw9( (G9#~fBj"JoƚhE(,k0"$ ŒzB,a1%$: {" 8{ ȃ"3-#r P|7H,y7 {0JGf;':›n:(Hźodj=;Hdػ>ؓ,*2n`Y3n^Y6DH@x KA[6hlf`H,3bX&C "S*0.r8Hm=qF(, hCDz8, 8ZRȆ\_"G"8SN 6gtY*8aR@ G [J¯h l `J}^Jg[[c6BAV`4* J5QLB"m^ьfu(2&L7ޕ/2J@s$Hl@(0X"H7;ȅ0;NNB#ACA^CD g)әX tE-**;H)ę"eaCjp @N :\&b 1*L2XBX1%IdQ8I\6an -Nq(@|/QF"BShjLjc (E4PhFqT&NnTL.o[O|)rꂙ-0@ZAAn01 s! D΃S\`{q \&[4&(i :|xGQ1DC[<2.X3q J@hЇsP̄HBJЁ$#8j[ u V2Ɉ_KCP% a@F8/0C4[.z( zx`$A.l8:$( s(&;9x(ȐRjShM :KcPPـ#kZ! }86Pksls 0 @ ;˂-Q@t tP|HIORIPє zV .Ya ehEe \& $0ZG-􇆃AЂRXRK;uZ`$9J1y/a<#[ k&^&p۱SCdr@ G(3\31SH~ДHM 9GPH%8 M:ч9 ;m0/  n(8Eb84j rX.KYzV5E ߋlH΍͘ilb@a0w߆%\Є `G܀}&R(H=@l#mxኯ U)h|B6 m}$PJȇh|!Y`'XI`Y#[@H|CDH=.xhgSOI8+8_6ԃ'Xt׃J$ܴl`"A&.D=1 3mAX,@Tȇ'zC#3: *WM$Wcp4*L3( 3B@+8 UUSΛZTI3 0 ;5` Nxܓ$g}'@pؓ"[KH0AoxNWKRxw|#XG(h~շ,[Ɂ82ڢ*ȁEBe]%6۠ ΗӈRaH~S8MRo"z !mڄY1wp;1CA80𜠂9 I0*8Y =:7x>hJ-0q7`ۃ@&SŅ/酱ӱiBPK0"F{M6LREY*!jMCLHWj6 ]͉qmЏXՄO UHpi2XT\ۤ؈g.քNEwQ5޻AB()VؽG oQ`r5Hdp7b5$dY1P؇Xh[> hH5V> (Xă  ݌AZޤKiMH$nG!Ia&-t+b!N>DBDHrڄjh@!(1hX1h1.ԐKGȁ5%)cUXPx@7h-En8te@h`slޱJ?HGA˛{z%OԥKv "fYn ߝ# S5X[ X[ȣxːcc UKgpVt4OsE4Vwph!Q@l smMYxWx霽l n^Ox.;>ǂ+4^-,:ЦhGpΐlфRn0/Ӕh.:OgG~,ώcd* [aF*8D6X#6;o ]5o^ j&5x;zw&nAFcd۱A+>`~\T$-GU%˦.շq #[[}nVX N.hO >Hh *UvFټa@$ꔌVmMιj!ߌ|g 5E B \Ӓx\uP\Œ7&`= 5$Gڲre D) z]B`k$4(G.fH2k&Je1b502P])V-7VX5nZ)@,@;<@ $ D) :HO=t`lKoP+ђDInP h}:8$hĎх 2>@e)h/OISysnBa E)Ad@t A )BP?mCB 7  σAL|:lAq #G FjQ7LqP-pQATfdF6A”5 ADq wAFBa$C''y G&m JELYR )MM A2E;#IUM 16P5: beX٩5lEPd\xF{XVwBkl;J 70R*@;PpFE"q ruSS8EP1p&e$1BO&A'x4`%Y|rlK  M~lt A 3Ć-SVX1e%j6?شtkqADf$cJ<6B&xW#$@M@@Hh}sQ$7 4n*YJXU<9ƆVq@&F{4:PTRP)B"%iF0cM $ʍGH*) iN %Q6{(CtX~J1KA1 D´qdi ؋nEdР010b3Ke95`%LWA0b h@!X8D9Olh e"-0bP4aMDHD $ @Xbg N4na U .C'4Al@ԁ-CV1#JBa @+fȏʴeD FBv!1#ꕀ{K]@CFp '&IX$3`bY<@7 X2F.#]`o 'ȁXR 6O$P W)AN@jLB :\ 8@VTAS{8a#GX7a eEDl{HD7FaD).T ]Pl!]V1 `1poKn)F° ~'0 NT *ŁF82ۏЖdx6t1= )G+)AKE HFK.wߌDOV9*bPT2,C X0Z$ сA 6\"(##R6)c\1R!B|튓F< `T?9H9 "!ȄIMhNFd&]QF4I -)Q p0. ^!|QS纹LD amf$9*Mx2P) 58PAŊaᙘwd)$-C'F aB :vJ0QMB /YA" 1PfsJ1fY<a/6, E9|#709#t]F.8 5PeG\RG@d)t! \ D1Iw< <RIi@L@( BX] @ i9 E`_ԊAU %DX@M$ b!^ :(x |BЉ%HDp@5E Av!A%7V!@a (T ~~]=Ή5VJdlP P8eE&b!]X7m];H2* C7HC-HUKm $ 7% 4L+$B AB1AOI%AOvbp44@QF2<$ 1 eCjA(8A­0`7^Pb\S52 F!ZΨV$e(lqr`5' B+Uh@漐C 7 (8?AhA^S`@#;}}.L*L,80T>:$GBE7@,idhC*QĀ< @ݞp@DDd B[s pr]z(h@B,cJܰN6ȒM!N^OPi#U A'A"20SBWXNʝ]dXppa8@!D.WfBapTo z%Eu T쁋YFhe\¶o"_U""H/ƀ_6Y%BHjA$*$]_"/)B`*(`C? Ā7Au C@@9V@9EA7m+y,-)kD6"#=4|Ay@:@Pd0L]B|H+P=:T_X0A]F*P=" |Sd0DBT-4A!I/hB(q b ԛv_ YWR5qyM]g(N FlO”?@uRpR/nz*"BA厥%BAl ꢀj[.B$<]Ԁ!B^2o>Y%P'2tCAUE A!9xutH],A =d^K3Nz'|B/ LODpc8"!*6$AP`#TUBB%01$ AmP7TH+|?1K8E yr$1R\Տz2P P %A+F)!4̧m0lK5b+8t4X|7 +~BBNGJo'D!C8+-m"d@/·5$BAP/O-F %MxjD2LRg$u՜R&& M@$D )ֹ 1< V6Tw7A[i_VLB/A,@pJ&aB`ih% ZLLDH; xvĥ-FԲ-,$ $A 󑤹Q:+AFFՇYutC<'BN ,Úaw68b^7= 0żC"2p@K+@+P Pql8'9` $S&r~P*0#B\|9JQT.H(-zs16Pm.D&u(.T(~BaA %׷;q |`S~8jY^C}ʁ1t. }i͛4$%e}de}OV>忷$|كO&|L()|(P!pZ܁P$O?$3.Oe]&T 1r5ƶmq;Mm6 M`h'gMx(=JێxRHaKR+(qN[t F۠ρ~mH`eVHH dB]ÍS%id+d*;"l!"XnX¥%>So!Hb L%@h$OJ"7RZ( K 9#,ȈV,Hb7)\>Cg$b.$rT;xPK.h؂렃iQT,L<+:6M9XAX0 wK6>K"n^s fHvŞg%ًk$$ Ͻ`/km$5 '|o(BPm 'ET.Dmp݈I E@sٸJ'9uVU & "b`bq ` b K`81aZ]с&:`m3k1G`$Lm8pdE| 嬩0OYsO2>@=Zvt-rYv8@I~Gu4Rt H& $HXI;.&KȇLB*f,%$F)l)fF>́ItlT;ށ)ҕD+] Ã@$ „0~WHFho7F=D ioF*e VqD\SbEň<שr1KH -&#a#Q#0tQK 7l1@su [" h70:LBR錧x)#DT9AU40, *Vha+p7@@ jl+> B:PGaxW,$mڇP@zmB\;%*@vm='7v]QLNv ᕧ$y}y!j>Pec ( 0őM,m{6~y HTnav.Nċᩬu[]N) 0?Ji(ck^ n;"p 㚁$E LDLNDelc6_Ҭdj 0HBc@ !(;" /Rt:VH$aR\.aD(s1 ^ \E€!x!@@R3aO n!Z oFR^>npjA6Ke/@g}"'!z YF+Vd O>! dp p覸H> ܣ֡ Z1 vfH@A/33nXV!  @Qv Fco`U:a!-WX& F`atp:H$ 1$FEd(8\#gj pr jr `'ݮb68>C=H"L#<|Rq R@f#qMIBD>*wTB`R6)! >AF/\t LC hd *ީDdKI2PJS?!R`M$?` dHh&x%ޠE­z%z$**!f3R9lTHb%΁0H+ j VV@~l!j&>R/J~+[ mH(LH=`B3TrĬA\@EPUZoV@a4Zj4/lA  C-sxDt b `.*:&v#7`FBtXJ\Ҭ/f%F~"7"bQ_U x uFv\! mBI|p{aNqyDBOIBT҈Z\A6fxu*P Lg bxK$Id/9  dxyJ#^KDzAjv3!_~~ $$K)рKwDw>AAZJ@$Κ !!Uf x2dbf/*.Az5:tp% (g#WeOeB|*0?#V$F JbmKEj la%<$K.){?H"Ml5$$")"T *X6`f㨏z 8C#51WGiTmSgLĤnbY8 p :`,l WҒ6(>WS$JU <׾[cw*! JpaĀ +AAG340#t !A3X(5ɕ|H {u vF/jlCaQHʬZ(ʴ"F.}@u~TBGxTOMDD88EMIM!ĶY5G-lԤ0<$zbDh*_>᩠C82)IM| ăD3Q1vYBٱN %%OOeI-a`/.G.p 6GIuuȨ9L MXE $QO7)$N>VXHT̟T KhVB!!Hu|)qYrhR1ŴҖ|7HHa Iz姐.XY/GTg!zD ; f($xȦxZqqzlsw #Wȕn sCrJtS>Ezl}p4HkbYVom"y,* ,}#X#MMP@OM+KYf7AIdN#]8ܳD){bP'k48 tNPu.hl*fI`Ef-P5'A)B{F|c7QRJ0jh 7\[XVt66ZPR ㎱NC(0 I|blP;GI|rsZW+gN%(]\{Ү- aHBP q(Xf3XD/(M!SH%&EX6Ol>% nj 9IFbsDK4s02T!r*g k@ $@M1/]($5bMFmHجֶ1& pz4E;@V1XP!&APD8 g.@LM'0DcJ1uAꤓ> sqO uvhBZG(=nv )e,b0r@#P6"d)&9_P=Ʉ ;=Zg+x ֻ<~(wJH \*`;҄[({.LNjC1xKQ$F00.a^Л X&xYŌI xk0*dxXMFr&aHDZX ^b5D ㌧e9DLlY X!IDIk^3k t$tĦAIM c^ eM=AyTC]3-P;qFQG^n!ܤ%Rf IBѮaP!g*>B3L!kK-NcJxIY3₟ $ bϞ¸LhJ}b'SH#XBZYc7^b.Pz5 Z<Dg D7h&`2@j2..(ؘ22 !X2q|Dt-N ɚ0 :suO @+bas Q)V' qgNAd_9$eVh k?B`G>RvQa<0wa*2ј9q Q1M|Sr+C%V-(V5a]y5!hvEWԡW) `59  B$Oa JS!2cZ0"kE@7ŗ~p#%Xc ޘ6C5ڧZ6jVkhPlV9QA=3nPD֠ :]o'>e'Fr_/8:Ge^:pIS @%u<*gJeRG%))O0rfyO#֒UMI7'\ аPXcM `z@ƒz cԲ$Z P"p ca 7 A.>1YS\7vA5@%ՐhY?B 2ᱚ 8VO1)wehڑ5)'' I Pl1P@w5aFz#  B7|!ҍ*[C")"#65598 7ZRĠ]A%)A< W18JKnS (:n"$Y+ F(<`XL`H:=ad H900 hC-')7aaGLH``&i zj sM 0Nfa fdԅDuA1!R1/#   @*jy2* ј5 3]0|X 0 p#LUy#:hhjT{H@3@ @3J{W[  w@GOa +҈I"ukB[(#¦*##G~} 6bkTUp I; l&2J851 j%+^hyKRbE5h&vi_, & p7c6e2buT.&AR <"t.P KG/₨M7,<0 Z(b#>^LPz@F-<c~*<`-SRc RJ%& pb0 CO)T!5) 0 c\3UQ`L0|I ipgͳ9zOtU11lOQʭ5 L akOAU51j1[9Q!Z!"0lJ}Ʒ  b"X? 5a5  8%K ^_5p`H@UqBoCP8Ua0jD(0 "fhK*ArHi;eJ! {[e:rذ:`(. pzv{L,n: p>AG- zj^7^<0i fk0 ASvɕAMq05 '06vk7@;S ͫ5qxP3D QZxDҽͯ  {™P˩"4 9 ؚ p*L$z'3iѨ&bkg" N{ d嘟k G72`a7O"h-8(75!V"]RJq8ĐX' =!y&Q9:1k 7rU(wr94jV I= `Jf$4 s]0X_0:`npM׊3 S`njPa.PF7@fbx.5=p23׻0 .`G$ofH[. L.2e+E3PbK]G]@CUCq Oڽ @O_JE %30^3P ׺" K/"dFk5n"|"e5 f-*)}10*/la.\Pi>Uj8$@""CP/^$68o`9ar@9z6 iڰƆ=Rp00 Z7Xp % n{x&{zJ"7\#zàAVY3P I0a&x7Cb*6z;b *C= <<`g%@t 10DV60Cmv A 5,0!K2KZ 9l9 KF|siN `s9c%*bl Aqw&Xqn+ @nAbђKء#.`F` n àơ$H`( 4(&j(ࠡ-xȢˈ0|J+`,I3D4hH!%  EJFG'hh *0%4T`I" U2!,d2K+;.:`1=`Z@2lТ7(l₅A"@l%66!O8 hq 9>N(-e b@$tk0$x#줻>,L04F" $jX!\W̆_^g S2΂"u{Qቅ$JXUɡrX!hWևJ⡔r"7q4$ 0l!xHQj=)L@‡*T@P2lk]` PS\` ސ\4l D 1$0q BDPMhn,{C(6e vX9|c07g|1`H1<_⸙,Q~BZ+T,;XV(j9auȂ{H8Ё(7%/ v<8;1Ga@_I? W#]ˆ8.=Ù[і Ș& ]" {a@nY!r @N"0\gL88L2iC:LoMEr){8'bo ڞb MmP ^a3 HCP#@@'+@Iԁ@#} X(C. QJL\AѠJ 億R 5!pI፸ '{FTiH,H0 ba7#b#&4䀠+B-Rk;yƒDEa-k$;Jc ػJԩk=+  c+` Ent9ZJРm0hkHۆJ=s(ˆ ^`x߁(1R{!'l('bXm 65(e\ ,8 |;G my35!/\Y$7 1\@W86x0(0$,y9'=z`q&!T1(bT`ob6؁Ecak86`dI[ib=ǀ :ͺ? 63 5dX1k(`Ȅ( 顀* ;辈7tTz P*#(6yd.'(k@# KFZm 69x0Lvee Xpcek[We@25>Ji8X@ @"~1mdS@zbO\}GϜ3z:a5셃ZNcx؎H@#[(ݢ0ʮy!Zw#k1x*u#hu_geEg=GuPzTHnXu0`Kd*  1QrOV`@g+tz49f%P4 /H@r M,`ÊFᔋ? )rd7SJ7{sB>#yfŕ [%B(DlX >cqpS׊_-n ؊0H:mnO  ,ED5r|c tM10p ;Ŵ;Jtϱ>&xb~Fi;[d ubA:xĞ]9`avSK-?|9W#{K7@#0  @#'p7F6ڜc9`r0SRRnZܠUFJh.H,3 a`pJJPXaaPAUXB {duQEby&\#m@RG$'51]pd :pAr"3` @vjybR ؚiP8pL2@*Q9gcKg6{P~Dx$GpTEHx`N; z<y%B AǦu4$jUrx+0*%AH1$)-XʥR` t։e {P6q!SA8h 4EM[m|) 8dKb/'@0(}QEc !B3xoD9^+pژ`l0(rYl:ߨl7H,2F٩~,'@*xXs 4' @ > p͔aޖv9the%@6l@c LЂĎ jlDoDn W40DZN< "aENw"II0>"rp[BGRHa*b pQRuStk\A(  ! <( 5 <҉OE#6¿/ "sUP)8( yI**L1VPtKJ6p&M]*A"␧lhA XW ZM|Bx*Eq"KC4 !CbUKy\(%9|5d zMΡ2hC[#=&55*Url2PuC7hыD<=h:…gZ #Te@1 JX~kQ 6Mh> fFHZqo GYBJSȾk2iA VA2Rғ0”nH$<"9L~  -+UR!9^' 8H !pi3pCf\D=zjSA԰R$e( vmCa; }qH"ڧ ܂'<1dz]H .#؊!h {Gt"_rf=#~MJ9 $y3lY:ܠɧy$*oIzj  JCl]X1Yk.@$#,yKi*v :$PjHD&OTX"*#rqQg聱!Č VDD;(A54Z0lCDA!DSDCShO)T"HOxF]`Y%= H}DяCNU&'jH,$\JKhdGm dH n$BG8 hATHD-/ޣTA]BGEԁ)l@a 2zB@HTXHl(AHA_k]63A",:nN"T#ortgA`?tD` X3E6M(ΜëFEMkLl4,mĪPBdځ`Cvi!/LG%FlqH2(e( cB5dEd!ASIoɥP b$LG\#:ZF,4 gTDjH(.5R"d$iQGR9DlC2:ī`EG$ī)pDi]hrB0@65iƍ dHpxm (,AhY;!;=O,AqS9JA"UD[@DA=Ap "yJ *0G`7ޕCE<|TD7tC$ޤnbAC<BjE& xACȞE$KjH\5l\C IDC}\dS9D(R.s@!|₄Ȁ L-^ J摇KLL5.(%SO{GrA5~HKx.IDXNVDK0`$J QO3@ϰ9@|N!'B2`@)0(3xA,A1ogkM}۱00H/$cSVDA(I愄-&[5TdAU 82zDq@0"G8 AG#.TR-%B|}NZDL&FYN & .'^ ILƛ/B؆.&F_UEU B9448VIX20AxLSE1IAAL+,>%I\pJ|əS<ȋhAL @EoE˴m,k)/F>HNLPL|0 !KLAv_8%҇ 0pB)02TrC"B ; N7t*=Q?(i#1T {E˽\ˁ!TwXH08LXvkNYz&uEAbECpF~ @J2B QLAĀ?@o!@c(*ZC2BY>HdbThviAA#B/D2BLĺFPlc̺bęZz A,w@YC=#I$>P:UXj܀8Ds6C.SiD=fhka 4ׯho1s;:-N`E?OKE=8 $%gԁ6ȄXP8(d(Z:l1 TdAp@˂1xƁ,)9YU[(n1eW#D[)(ǡ>Hu̦GAK B{ȂGEn;<@̃OϩEHdD72BHfETELhi':nEB%%)ۥ89TcurEІj&T 1!.J{lBBX]/U1/, y h 83W*T36{bB)+(e1 Ą_Eą'ˆk[D"qnૅa4iN.`<2lVL;!xYu!(ܰ!(yaD>6) Fy xX^۷ z dr*s9w7[?FB}C @j2LL{ * 7zaN_q$Ԩ|snͭ)#R&RZhc()p=6F$n*pV4ADؤ0 & @ lH$ b)H)/H§> = 01VRRH&\,s;"sfeˊکnor! C"C$t&}xXB@+T4PCE;B蜞#NZ A*!KZ!sJX Nh Z UmW*h X0m Mx  =1D(&耨"<٢߂$ $+BĶyb*@>B7`+L!hxn* y抲~2إc,eO0-I%¸mg(s `fb.D"zH2F2ŀBغ2nx-2El"5!\ m赂(ky&@K)caA>T ʚr8eT^Lgw~ eA "Hnj')eSE$a+ R>CWʊe H܄sTeG!!]#:,\C[Px`)%NdiQR@1C+%.Z+ȢJR=P Cbx8ՖN"W #$B`` !.~ GDLd,&goCZ 6Y)F6e Ŝ]9&bcyEYoGZ,/>.AP\/hFoR$.!`Et CP1xm E!@jFЖp2v"c24b8r1n bsħ 6xÄJQxA BOȁ$ba @*MMZa.Q쀪N|D$(< z YHij#2"-@(?6mU( kr%'j҂&T Y>  hdqYhTT'TZAKHϊ"ԨeC\ X bddo &R*2 mF mr7Э"N"j=rGCF*Ba:27(.& bG+[B7@N9 :2g`nc:4,#NL;Ij=@+/$*?0H" o(#api^:D"@P`S#Spl0PA$3EfJGbb4.l$b"5 "NZ BXdn68 b7 MBP A GtbʚdI~N줢awd;UYB/On{lԦb1u!g~BB!e B>Sl?"RA ^M$L@ka`o0] 5(@4H"Vl M1 uwoz26a1 "kQ\H!4@@VaH9W 5iX {G!7%*7o% f"A$I`'fN,7KВ"%? ` {Ğ^PU9C8{4["x& *r" bbyc%MR J‚coLh4, Xa * ~6Bf:Ί0hwZ: ֠ fGp&7 JjC fȀJ`ot-WnC igh fh:2, N 2=uiź⸡ PH3hriQ0 B  7 U/Ku %7>yIB pWa mn7Y7+d=M3}zD$T TH,Dg4$^xQ[#"=77/!`Rnj5  ֣v:s/BTP  /o 'Ma1k^H w.V;`$-Ƹ"tІ FtCf@ v7"$ "\u+ڑ# <**qȋiS$Ps`B\PQ9{1*rAҏlpI*.YǗD֖c "ϧ ~laaBz:05} "  5@ ̹$NeO. "~lwIK`7NSD`]"«;F  "}&S5k% YB,(\ B Xj, U*,>lO5c/<9 JW'E<&-/P+JA bwƛzK3 -j!A6`+7B) d.8/[0!%f:rd*bހ=*,M  #jfBH"O5ɒp50+"umo#4=1 3n2ՆocRԶ A`333 ā;n@$E븣I.`6巪0!Q]"Ruj-g!sd)o-Fm:AW.@  nhM۹sjӳC=H,0@`@ю \JakQeG%A$R=:@8PD)J5UF#p0QRG#ܠ<VMB,zID䶮];!P tQA$]Tv|jʓ)J5.5l. I$.<'sWv7ʕU&UytL\+q$-6JoHQNw[lNQ (?ա/N  @Kl J!DIT(F pxÉ @ `l@!N@KJIxH"xi}, \OBy1^RjSx0 MĜ(МdTC'D T@`AuYHQ)nTE )[Jԅ{Ib= g3?0Jjv*1R&W0GԲq資>Y$cJ@Q"(uкT5AB׶*ɐDH=AVS8IJFm$hu&5ݖ[orjT¥`M lb Wƍ&Z(.HD#ʈ25$&G$JHԈDN5@I`G bP$aIxTKE(Q"u@#b*iSKPB9#?D ?fq*7n##?l!f.y3TgF-.:*(:@(`|M+E)nG'T = D.{¹z0_/4Tqu,Ú\U_$p +PlUqMʪT 5Nƨ\+_DS0Fh*яD,d @(DAk"cSa`xJ00,zİ&CA%,F `Q2`l.J FuX1 *P}\Rt%XvpCPbD 7HAI%vQ %mB"@G8L-r> iCk_s1&(r :ǖq+Idp\8!^LP`Τ&csDGIO^F~a.@"[:0D%0T'Εv{aLM%撧,$bäLEUP"i dW.9*   , èB B:2!)h[|eHB)6ў*1PUĨN^&08Uһª*8(l!KR0)^ 7Lxjń.V.vDn- %; P*!4 0#vH-0K,7rduR"aM8b P @p䟢4|R%P%FM(&Y [ JR XMl4cA,tL=iQ3C%7HP @0"4%vxF9@"A{'A{8`RUrcE{XpT$Ҿa?]X`|U%!@% "kQ Ȁe*]8 ]1- ejv(k.<)) /Т  2NR^In%/6%J\$`-F@)TA BSnB FHhbJnhG`/ P$D<H1 ^8Nj$2Z1Fl&s+l 0IJ,A -!o-R\2$.)Oo#M&5 .pq"ЍE2"Dvϔ&Esl؁5(#ܕf+ Jdx@ ([C":DPJdg_>X`ebi0UoN:\=`5di"D|:C?\⍿J: y%=J$ֵK4BniڠKF|߉bzX?e8G{p0gP^z!Rf5IB+/)6dT=TJ%b e(>cj%RYF* ^C /@* `GXBx%ǁAcI6vK(Qe_+"͛\Dpa%!l۹ҭzwA)Q+JTs`~0 %VwcC1c*pAOLg*a s,Tf G>urhA9&uRuLRY3fO)pU1e*0RE QueGD x%}gKB}8dqGJ B3:[T@@Rxʠ ʰ 0}&.`FH#-A Hc;2$ 0 JV52w# ŠzQ$7"&VQIJue"#+aI!;Ї7/1y3&t&&Cp~c]z~d@~G"] !rve pINVi@ ` ְWq@01mYHr`-R܂?5q-tahsagʃFN <.1<.CW_S R @S@S JEL-r@B"B?T7NH9I-_P^с5 U^x}0b 5 gV7WmZ7&tP3C >7 cc'y}Y h4Mt yH14Dyixbb7cJ.P#pӚz?8W2Tc8qu("Jfmk2 n}"o G ;`r"@o] ``9hpJpCw<.!CD!* v`eeCA0JeO(Aa,`,H#eP0  qA-cx38(b4 _*A8*u$A ҔtP)A$BwPᤵ!eV1{ړQ?]T`PБ+!`ʱ`1uvP(;R Q[t0F! KxG2iȰ 91 U >4))MhKxz5wȧ* h$}y2w(!W18  nlD$ )&`' ċjLzp@! y:r0 MHk1Lu;%K W!4 jEq 9\v0OM+)<gai/xt'4wT@grQ"Y&PC/5(0CrPaQ-3Pi鰭2CrDU(!w+&*@DAc&Cpaa?w7*#7w a@6#*E8z$11",v 7zVz(PGvvt$7JR ˇiŹH `pbp.Q P F* ˺Dp{{2{(Ru\g"Cg4p{4{(Q!(H9u#V6j/#l.Q_*AaAm!h6fb eR+k:`8w3!iE0-Btb6Ȃ,[p@,#TWQ7S*1FI(:Rjb_vJa"#ζ/~ī1#eZw&4 02=K I}*ʷgW KD6ӏ*(A qiwCEQ`)<;` X' ptP@rzARVPQ0{(3bT*\ YmP!H`EL@f0B[vQݡ/u@J!5I8m!YPQ *Dm+M|*v.!`Yj#C HAD($@⚫ : /j Z 0X!s_ Z0/׮086Kx opXKHmӖ!W2"zMjsy#6M"P%/3s/(|P9иm&K9RYM##K |^%Eҩp$̨.|~8N3I 3 ]p;!_ KP NmpTLYv u e mt,mv+k* onp>t,r2yI@'a/FAw(D4FV*94"%p>`+5P5qD S1^2*aToX4% %P\Jh*A =Ki皍Y ]yj!td^ȾZe#[CZ[i-d#V2<ȴjP 0Q2RYH"#z8_jNt!&IA#iX ?t `)ɲE6Ae3E ^q!89H+Ƅ~4;Ked(͠OAI sH5f,!tFD Pn 0#BZMUwЛ+x8 ppo>cBhN?~PBZ&9\ Z@pI$KxZ5(^v\/)k6 @=2ѮL ńuC;Rm \Gn9BGc7؇:D>({T~4ABA`ؙFll ْb곎kBΰʭ %z 0h@P࠱HHDhI ZglB' RyZ|iC+0ZU2BMH"(yX)-!eypָူ$D.qt(!]b.}@G<8!0bpgfp!D2%0Hg8qh#=X ppi 0hPbhFEE4D9;x bAF㏭<yVDp Ď&@C 8X32 ?z%j_ZPM! CRBp R-1JP%3CGA nI`,; `B 'XxDw9СWcbf!Lpx2ѧM f8HhRb?OՊ+\!)HYCjNJY!C,A0@SaTL-t<ޠr#ϸ B-Eu|k2. \.~4 !HH Jap7YSр̆Im3L9Xeքفc!aF2%D( 1r/= Ƨ:m$hDSf0rcHC F"?9#ds;IN/BT32$#| Bp2 @#S|0AiAp(l`HME!Az ,x1!B|q!@z'hy,;d t(+D3(ףAg}!8U?3E*(6ЊVDJ7xuAmHAb]Gz/`9E_Xz+ R)ž -肄 H5!AA3H HsX18N++%<RӃn8v`?س4A\P"4T~ p m7H6\ L d98A^+f0U@H5v3jō 7PlqZr$V)D!Bp<,. Gp,_K - = c>Ӈ|$4թ8҆w WU'ą80%\z|AA  AEe<5jy.fVD 1l#[(w>k!!&`f%-LQAB3&A:(Y΀D=NT#.Pƒ(B 4e貗6 (' JGM;PnCՇ=$oCr cImY^glaՒi.?Z}Hv7o|l Т3&Bq s ,i&+[ 6{Td80Pk+V`o*H̓$pgIAX:: Y&pl (48x[$9w@ 4%x؄6C ;! @8ؔM1) B< 0:sY9h31 ")*H22bHbɍq !S# Js4=GHxAb4<㽄;`1 $ vج!q>>[c^^C92h=ܠ@bMp6 {nЄMk(%q#)\`/ A598.v;I  _#c4$pFxλ P(ᐷ h5F$H=᳐C#rT#(7pK:sh=ⓑ =:%-g.(iX{/ʁ ?cq}?7?*H2XɄ(D {ɠx@ HX .:(Im&[I940ԈD8A.5n@ -Jz[8K [ c軄60I*cP1-tZp3%@\ 0I2`3#>@\聄*\郻&XHOFX愬I;1Ă;`ԃ@@ٻ.̃ػ1bMĠ AY$zQ#I-Pp+r8\턪$`X@;_d@bS=Wl<,nj gl82 m25TC>baxȇeH<տ"1p4 A7zQ :!ɒX}!89AA.d.p</9&#Zp w1Jҩ$SRK@9X90 VSےs KE44LH9WQԆD=F`db(FX`!P 3ECb5qxc-+) DF ,^b=ER @؍i"ރHOآ-mu@ӆE0И(BMʐ60SЃ@yDgI(p e6?DpJ` 0=EpG @%p?@Ǥ4)U҈*`& }5pJӇR84<I\Vo`o[5\I3B+A$95/T77"w6w/ х B(@'C9ɯ=5&zsPЈ.aF 04RDN@޻α索s(EG~hd492EOk5I Fb}*b4*PpXUO ӢЂOv,hF! 9 U)Vee=^5bM€XEP u;0a-62|Y# d*i v.i_Q0F~ɁTE|@)e]? XB9TPںZM C?F~= gLJ0d+44Ԓ 爢XE3CaHԆcl8 b%8( .sNu T5. @`+g*BQ_0ac/HL؞dx l/u0+lȀDlSF9(^P>8 ( k Z`Gފ"qyбz3Ņj)GfmBZV. 2Ha3iZez͔*fFphHf4K1*H&}Y DЂ hU0P(CKhB3#w֘& gOʪ҂e4;h9&,;f΃4 o ㅤhjDKPs|iiY[i0eP~P@):=Є9#K:f"Q!!9Nȥ2*{CcYV8w?uLaPZ:@xLaPb`LK: l@_K /P0΂.0!9r 깭Ej')\@_Q`B2xINc; 2s_! UPB>&!Agt4>@o d~(^փ1`0F\+`g=PX=(@@AF .v XP6nA!1`*l"?-jW ~ 8I #m-SSتX$k U )]do8l%JApϠ&M{`jE}) Pprc+*њ> qTD ) @,M Xז3DFZ-/U \|n=0 S,n⣛ O? H ` F A4E V 7l PōA9A&bcGXb`7rI?d1Zgp *PO(8Q UPVW e)Kͺ(p% "J Ҩ #%H3YD0)P lPc҈d6L0Do ̣$| @3,NKP T7$ÈhAC)N Up5C KW,9(]} KV{i :IU{v"R U&X  _ŋ\ 84>v!Spq;,A*zت %D#b=X75&(Pv V-YJ` У nq#f(Qf(b$Dg+WB`TM 2 VtMր2Cf8a5 bI|q:TGk  zL.%=z*Jʃ+ ז.)`K@1 90 ꥯY5am`HDӘ1H[p&ATU #b@pXHzjђ [Ƞ$DxmǨE)'65ZLqJSh:H 5Df27Maȉp.L r R>__%$s- Unn ԁsފH3XTw=Y4F+6Ho=P9 ҜquaY I1F H;э2mH0" ]=E gP@I@$^s:PA:K: đ**犜8UHJ)"i&JXF'@U'R=}zq)Տ/}XBpUVz x-T"("@ZB5x`TCyop HTc11Tj2Ná2bի,PtOO]dfvbwʰ I8şS  J"3|LJlɫ` /!u aKU/"D A9 @*|6P,RD`@M8) WѨ:HMc Q~NFQA"YHT05HAȨALApܠA(TVr(dp4ׂ"P:UivC]EAl@[WR6h)d6$kBآHP”ZLSJ%CEeE_ǹdYF Qv-ԁUP)@A)iBhR "nAI6$AԻ'1(û=_0cŏMO"jYZ#@"dYخ9秀:-Ђ.B/ 9VЫ/D UD)*(CBEDI/}@C& 5^@p1aj\aHicPgMaETAX8V$`0 ^҂FE(f&\ALҏ ]1R XߜB> .QE|hET IN-&:Lli/8|Mk>0P`N~Hl0_!eɧE8O:$Pͤ,t̑g<`F*dkURE_Cyd+XMJ]d/f ^ŦjHJɘKDEPJJA.B8<<oЂ7DʊdIPJ9y*Bo(C$BH 7 GTp3\IPD'Y@a}PC5ddm$8̍xpqEQwEN\@AUVs@=h6h7xyHR6SAxmSZe`/HCBWA,P 8ah8CBPcl+Ʋm롶tBsN@p[3زM&jP]zAJ `|A չʬbQaJW>9.83@ XBTA/xC|J`lDkD3bo*ĺEDK4@`6uLMps],f^( `pgJl-d5L$gC# * TX=F ̂hD1-#lAX@N/*h(D4W 5,gD` UȨ[ӨAB7uHUUld PXzâǭh6ԑ^ȸ(V7z&5[ 8Tp(Amp ɀ-[q*(wY,g p#78?_)Y+3DleykA:`2'`B ުhABL0T (KI{B TU*`+@/` Ş@y*$B$h6FCD5p! V]@@z8 cXDĈ0p%vX})ih%ԩ%TB?vF>` _LahwC x9!0 BE[ 8oQv|:,! P<.x F0~4-bےRF3d ~<(IŋVX|XBK2ML`@9dJk$.V_Dn$lC)\*s 6Z(;<@ Px, NA< vM=.É`G";j ΡcNT&|dD91K# LF)`dG^ f,8ddQYĂNɨ MŴyM1f!zt4@ddA u|<ٳ#c!ir`D*(Rds49ri3ǖMQ F[*d"H|PTJNuYA(P<ʂXw,9sL?|(4FA+#& m$xһ DM 1LTpSHo=2B_ B[: x,)(5*xp 1f [*TQE!ɲ 0 3HS: !`d"JA.8ȢFJ (@H" " 8PvAtIe8Ry9C&FVqIr*;F šJ I (&$MҸ:H!Pl N̏2:܎L Ɛ *K Ha N訳Ч EbЍ!`FƼ=yؤ 4Y Cbn]2{+jx3BH5(KDw >!|(H Wl۲^Yln +(>8l(Ƥq ( 1eW`Q1';b7ˑ=8 W#؎6 .*iNHҌK:JR!@KK -ԡlb;UKO-r^RJ*# @-8tXң=a_%x O@t#dA'+Z!KlB]`+F0B X2"MuD)ud"'B /.Ă L&ƒ`+^A4itE@T3vpPGL/4bۃV`xD Xg4pdA* 6A$P?OdHs Q `'mE;rXAfx5BG,CcLS4mMH~,d D ޴h x 8 ? A%!uCpАr#q"rg< 10xl}hf$;60  $<,2. IdXr7h!K]S*]k"BDc,5QHF2o$˴ y `^"N RE"HUB)#Y>Ged!vCAp=A<@:RV|c`D?t7rXO# `8ʡe-YpH}ꨬ, ^\Rc>&|D ~: dd Oɫ# >(fC0 Hέ -aj @dx!hyy|+1 { dG$oLb;HHdGvʖrup6 ,|RHR#HJtqĹx6БzA/xLX[j `TF%hJ*!>cr%āVVu)2Y{;!,+Z0a,Lv!qhD+I*ex}L!|۹Bq#2CO֨Eqd`F\ ג H]]fdwFȎx S'<+H4c!;?b9Hpppؑca`20-vsh #OA߫u@#" d d.0IJ\ Z1BA&8Chv{ 3_<8`6 zgSu@*hUF#U'K( ;rʚ6\\CmOČ߅I~pDfyZs@qQ y)KfR%+p2X0z`7Q(~|s88ăL|F+  C,X2b B2OZ`ZK)F"B` -rb.PB4:bp ,#.! F6)<"D4a >t#F&aFbtCtk: 66aaBaء#x#b$ G@1rai2i B7#An$8 A? ###@ k2=xҎN@#`# :ci2glnpJ1ݤ#F J H2 4F 0`:B @<|K:ja br/{Px +'\#JG,%R$e&R+@-b%%6"%J!jI"}Ft! `d@ /,-K`q $!-D "%ÅȂpʂa; .j Π,4<:bH ›3Ǝ-# P@7 , @h$`(6! >Gd P 1 & 4Am`p: "Nմ/Ap| #rAg <".kk~n$`j<.6a#:|*t# ctØ<+ I7v @@ZAĄFq*G2iL1D20NA4ėG98 dA\s:gvh` 4O#b X> <\ʥlhML\Q /#FARd]#QPd"!pY'*G%YHXN!P#x^bhZAf\ؠFu#?r .L/h҂ @Av7*dyB #@%ot n.O=B, ( E`o(a 1VL4b.qF"avMV ? okd $0C2ӄp$X #02*dA5BP n@i0C4d<P^@h&X@a;4+ ֐# hM:~g>āl,@ @46cfa 0#in":"°ZhE;{8|‚ i႞ED j/F7/4 P !0 v!A#@Y |Y fxf2 ˆQc2c f,윂,9i$| 9c7v$mdey%p@hDn\f@>l--XdBH:<€Q4$ ġ a Wp%::"vyK(@/KLdu. raQ.,UJ v h7זeyA B(0 .2V{t#v@ x`oD   |os@p%po@A Ak =FIt J+EN""EdVJ ( ) N `aЙ`%`2F+aRK/"QR*R*!!!(%[|q##PC Db+TA 4LY YBhWx8(a gzPr@pA2LOL YjQz n` ?t/0AG8`/TMqgtE.T"8@*"#⬇">E$ 5B.Z8UL. ""H#B,\`Nh"nzAAtV=)M]:B ,Ck2KU2]ѳ DZtFzRA_{95$j@dxAa4A1%' |TH, @o.YP*)c X 9oM*nʞ&YGED|gdw-!i p3@H!͠}`E]FATTDVtfJE~tRoqT.@MHc!3GE<Ttl(7"YHz͂eETD!37C 9h807XQ5&P#:R7*!"aHtЉ|kFpo Iv#"J2ta@1`*@a,:}n{h LSv }r*f֟2 f`(x ^Q"Ɉ lu+ @3 UDphCq!(  @!ÅB "\V\A(9 Dd^@KX!& QQ%X B_VӠ8-,!ZPF# 0WaE&.$`22XEliWa 2)X[600R6.)'\ PXH " <0Ka 'Ɂ8QoӞr.$;5Wa O %LXYhpB8"Eix $f'B I N!#}iGEVUEp #Nbx0]aH',Bԋ &*Pv~s<#ڀ5<z!$xhAUpQ>xcu0kAW*~@<& ǴaoUFVAjE+ N`x`&1 Od-qص("mU 2QRv`9sD^xZFUk.PMb %/MB SG(ZJ5`,nBDX+d cJI"pB,镮(EfiP, !aٸqWv_;0@9~d L|`ϙ/c 6`T?FE`ib 8\HF'51QsҰEdKT#ͧt}l3 9wQtCPNpU N\Uhjh{݈D$zVh koÇ HL"#ʁP'[hA?2Pl(*B ~͓>Ol ih1 0fw ZЧHR!!h}ggT%(0| I I # qes!1"C:pb' 'PxkPU$P4 2Q 0 N;KH(W9Uc6" 8 ?XyiaQ!{PS}$ @!]Hc cU91(1Pd@V`l !0"%22=Akaka4>U{ٕr2?`Txttw%o'i |.Y!n `Q¶HVPw#?p:)>64$!r +c+p  8Ad 0"Cb ,NE<yt\՚Q\7tqKZh\E`\F 0ZI IVZ ǸD@2IPZZ`"C7$bBmP@@Pa Jl1v` ,4C𕬐3zwPHڬ `W0W5Qp/"fAO` r T$;KGK# ְ )ci1١n5}Q91 I(lp dX\XP fX!)qu TY+ (IR4j:uT k/bfH zf"]d_A EJ';R 8|B¿i .Qq}]E !Q3T "bR :m 1'j+ 2, =' FbVį#uЋm̚tњ`0*IQ-K1@7\.]2r` "Ӵ&QG@ J`mlq1 @;Th71zgmQ mK@a 3`)`i7/P4 D:vQ2YA$+!2`[i`j;EPQl0h>BΗ;εi zF ۀc A2'H %p@u( E8ZҠ*B@?aj!4 c$?<2[X5# tY'V\=-d KiyUV!b bsp;q 0 89U!-"6h; U t3,$# %mTv. r:  ) ټp9 k B&M~ 6TCkRZ͞}6mCoPth ; N_!^"~L^ &Y7K,I21& Kpg7M4 0P,p!$cz`[1QippTA @Dky@d!} AMxޜ` VOZ$#KЦXէ(!9T㞓98۰ /&D| &pY^Bi9:hE#;֠nPS;6REbA f9r )L:z72\.S v@mԁЂ\`+P 1ha 1QS! p/(-8pRR{ٮ%vU #u[JV@U0? UKغQC_/xԛ+ omY,&)$Lb=)b,Ǐ=d艢x-3N`0mr!!{6&@fi d&K<]Z-ʰ I!{GPKPPiFᒊĐ6K+ Z a Hs!a̡ Vqz z">\?@O` V@,:Ga ;3Ohc QtXQv0ps8Wv=S$+h0֡+0=:':@0"U+8G(7[OT=`;h# P# k  WݠU%U&\tQ`A`d2L!?nqyQ;C) ;۠§B@ZY"/1|Q` &dC |Bk"@tED/Z{%2#@c )JI7 )"0+#E ͛:ڼif,TODscgmqd< wV}PZB|O ⾟̙#'%qq!7n.@#A @ 1lXG4䆝DR"9ThY.\<1 1 5Pvf(8TNDZ-2M1`db@Ufޱj. Fij=REl9kjdZF8b 6px"ؑǛC"țfx+Ym~HXh!+ndk8ҋ "RQFq:e!Eɨ3"e" 'D%)5JQ 6OOoZX4+U+ >3F5"f#a#"@Xy*<: ~Hia# T 2+q+*0h/Zr"%V$C,;ip3"B,+մ `d.hX;I %B>6[ ސVpl$&[ "bTvHK栉ϲ?SPE(%"d9["`A$Ngd ?Ei#:q6U<"ki3e1) 쳪'+`Q FI^3\~C gw.ܤ8hVJ"@a0( d\46)d9*P<ptO[)*`~ ՂY)Ɖ&kX#y0ޑQ}cM5AAJrؒ5 ݢE KD8@=d*J%֐T>H 0QUI4)q$ "DdALSK orr&ԡs'@b$9҈JMk X^T)6"\}h!ᐛ4F/ Z2Į#6E^ȁz1 CfЇrOHܸ_^J!pt<0Gl#^v (Y]y::2OF%/`]d S *sD$TqV|c1p# cDvp9Mrpc>qQ @ bA \ڀmX?Б  36L (0Hs5n@i⟍ \t 9@@4`C@P&4>QI@FCp UNIG3 ˱g=lB!b"Vlnl#IbtX-6;0>+L.~>~ʣ@l@utEuTJ7 ƀF$KPkDm\1@I` BR> e) ly!&> .)`VExG ^2 U4*(eC"ĚM$KKȵq4nG>gQE &`7wT>9xI:$t s"!؄-[6xޱI:P9 4Q6(mɊ"r#7oo8@wsC3"H:E3X(/uv nxzLZe7ĬI/l((R/<\4ZYȷʊp9_ 5=ĩK&2p$5(ę x ?y(5ԁ\x.H6;Y= p@F63P r;0Uj9C x  c@=UzxPl&I< V6x(Ȃ^䊳#%r(ds0Hb{%# 8 Yh60>_/PEt^ 9?c :ںk\9N8zPFs!ؓBPUL3 Hȁ[ @T\:Xa+ۑH#Ȑ a(8%\mAA/YE28¨(r+"ɶEa L,^b,j#a vhy0CnhdxXHCjj(J|ps#q(ψG|Ĩ8Zģ %хOga UE k;0Wh`/P:1b4Fpкg\G艛Hἡi ch ԃm 1= c(0(`%Z(;}7 Z*(cc/ً\OM(Lg(d#[Ua@g 8$6 3#_P_C1Z d҃9j9 Èϑ pCIFn!XPΛبc<:%9MЄL8K5[ kQK cC3؄`M pp (Ȍ!cÇ,q)7)1o}a`,E091լp>("pX208yHyPN ʊz}8ɚÈY[#؏ݸb|/7r %:Oa5?Q[T#Ko9J.YcaI| H` Tp8NKYkT8`4Z٨Pep@$e0 ^`Έ`$9i`1+0ڞeyVH#qZ;`E`a((yRA<*z" qKhm cm/Hr\xɤ|ȷд;cz((ǨV:xT5[</Mʉ0~]!0ؕO]A_#Q )6K\(n.g#0 h3gȓ `UA؂-`d>2hN=%36p] 9i 8-oVҝRgVQrp2NS![h4U icԴ<:}H-1I=Z~B:hi1d$q3IlDXB<"Sɘ8xب@835yH R/JϑN1J0VE]c:Nn14N&(N>kM^˹؊2!(5?I-?> X>^S(^, i)<`BH!8*8:I!W0y`)iNl]걞=[ڋo=3 -icf1]#x\H]c( fҟ Tܴ0Ƚ ΂hahv(pf6Rx=5) # F`-`ʕ顁UG~z yC@8-656YFm`2~li8&@!Ψ;Ίz.0%:0 i f18OE̊Aw(cI}-pk?.V!T'@ApP1 `d +y@,U @}[@L9&90b 6mdb8)BYm |η =BfOZcdVl#o( %>3f ''+շ fk KsciGR"m<1FϜ'*2[!|$L(҃ѰHM1?8$:,F#%lXBB2| Nd0K$5ɔ2tӍ (  ԤL N|$24p'$k 0l> MC" P RyMX8+ R) ! xqB3(WYSD$Hg`Fb04 `@5a @Ar0O2|DĻt C3Mċ n4QL@ L v!3 SU5,fBh1#D CNtE0%0&UP5'&Br "C5&$pJ,! %MZUU@ !9"(j)c )^ J+wCqC{1ݶ+hԴ CtS Dn !F `) nS?T!mU(b+@>`0RBbE0c la`}T%[ W"qPX ɘI,`T0(UR8D9p #J&18Hu^ R#ůbXjI^$6 Y78 0!CQȨj%TDHXH5b IeZZ2D$` KI$J Q@Ҙ@ Ê +V(^ @Ё( An15k˓'A;C*H C+Li&mO 7 qCNn# `"q C8 -p jJ;B)mH 1O>;Ej "}x`V<#x^ 8.UiE oC0ɐ B+\>a780 .@b'~2 &iu #D$$1DE?6O!$eyBe f!+X6)6,Hl\-,i,IdH6MHamlcFJz+2ށ"D2.)H= "$wAEC 1Bc^I@(R+V1j+W2p-{Xp(ZbYu"ՐK⒀!N/E1_΀Θ&5E mpE #j* )8\2CӋbD !Z0Y'B!۴Hp i0 z jNܓVpycp>ƑOKʻQ2]O& bPAé _B0t*+,ҚwNH*H<:*hD6S)H)ȇG|؆Fj=.0^?>(YOƇ1@%TXBtp@$<]|58@iY;JJn)J `Z)0'v>P@<1D NDB ̉jpAC[ #s>0X2օkYCZ NJPUDER5(CD&pZ|TĪKj lfg4UXw(&E`м0C\KJ! ^lMW'H4RD`KL"~auoqFqRIj &LsV q!A)@aDIX"D48CAa)yDm88) BTU@Z @sقVD܂B,EӍN"%A{X8GY}£wRDBA}@^T?=Gq@^ԞAB@BE_3@1܍).x0EhD=o !>O4ITC,P0: Bxݹ BP5Y V ~ ФLExn/Du|ÙY Gt0D?F1B8ԙyS>(C\T N AĴ @,Nm|%h)2@)HRr) C')''`Kw# ?LFB"l(95|((.0`S8 .ZbH8 DB>Qlt(r%) 9@spAT>) 3fQk! J$̖BE t %8D8W+EJRbD'4 >!DhnkyqXIXeFaT `aMEȬdpU(Zt"i罨pF4I"!D"<<C* D)t#1A\Pj8ED&$#+CF,)NHxPvA5^$iBA-d^Bhl3mBD(hw6 B GYE%|hlaC1x7BtD HEOD# &E8yhүAL2G !Xw!5Ex$1r'J PԍAR6u+]{D>2BB !JDpϫ{iÈ@9AxDUh,mx^Fp=BDP}`Ĺ MdTӔ֪c?IT7P{0Yê?EDFEqDisLYq{TE+B90Ba$B*|:z@ ԃ ;\ 6VqbQ9_K I8YY:7Jj+W† >8@* b$2D Vr2V)%iZ (M Vr[cprαlWHc=01Q! zEBQkVѼZ3%ֈ^+(+ )v=V mPK`Xu% m5l ]+]p^}kMYOx`5|p di1/[6rPɭhCqnHP"1dRyf%.:zA]R`XȀ`E@V`ȕ@`B8O :H0.9!`E rJS̫" 0V20& WVrNZ;heo05YcVzP,@ `\O&DWC6? !R:-GU#ls%CD:dZ:_zY\hb:Ab'ANd1)'tiz)yʙDQFbV 5X\jX@7jH '1ŪoUjQ&aE=@D؁Z:\iTDkR ( d@ 'nfRX6AM^-l#a[)d cZrɅ@Q1Z_ [f#q{BЂ"B=paļYE!c5U|/5#BA(R(sg%m *W᜕Ac g8af`V-9C'Yȍ-[8l=nau!:\9AN(9#F5~@MU߈;CoNlԝ@Bq-72KNm2<\`(7@"tp TZbD5IbH!#a#< Cn><JNe,CKp +JȔ)8 D v#xNF;l3}@m`=}c%hj=@iv 8l"YmQxՀ hXVb=fNJ:YG;ux+L(x`l|&@ r*bP;_ BYPo[X[ -labù΅ɰ6X c!SK 0&N%'PK gSk"ߜ>KATX Sl`?XQPV0^IXc*P4hVR>[>W'l0l(D@9tՉ C8|Bt 6"'Dw(|'x ꀦaNQ@?'DAo(0k8)JPBzX`G9n0 %v[,y)i!5 A6o5Baդ`c* i-0SRqQ "1ݴʍ/Kp"  HP 11j0ZIXLy`kؚ3y@8@d NH»){ÂifEd(à e2+2> T-cLfQ Q)a]HE*tM5r!z^zp 1X  5Q(i+!dߟzo0ZqJ8݆P7@ RZVH=9Ls`z cF S؋Ê8+`  au)tg."Vn u@]'Xuܝ*!ө]47q((Q|8vJ2ht'ͭ ~ 'PDf0;$2^)dp9I`0YZ6}lCLXΖ']͌]ٲ Њ6B&[PTHYH@)BlPr%uxnUAքC W&@#*pAkq?')Q·1':jK#ϕ30|~:я~5"HksopQ(Z\]Aw(B,KwJ 08aZMZ-"ΡNn@Z^M. ?8@"lBCUpABǤV9㍨b%`m Pd Nfb%`i"0QFzmc5#h5jxp n6!yV-(pi8c BF7' em0"C~i^ (:a5~@ xq1sk,Xc(hX S'^bv1T/5T_mPPD}tAlQ@ 8 D b\! /b4*@ @WH,3   a% ?/ 0@, 02n s*&!``/'`2% \DeTJMVpgIBMVg O$S&]4'VN-)"ѲέNKR x Ғe8b#1N$N. ^BJ% 6&r%,*>!N)zKaCa+a P,dT Di~ 'lHz3CT3B22tR-,5L;8i,5C^:V~VN3B6Ls%q%!'pB ~Ԁ-nr&>_,aNhNycF䴪#™bcEsv Eќ0NbABw*"Ѧ-L*]|1J$^+]<bp0( d 78%@pc @V#20]\@ U"8!<)b 0L LEA&8d5Ҥ0PF#1 CL0ND HcD8఍AU4N Q YEN Qy@Ȳ,ԏ-;@!2( LHMv@U~$ AJ$G$Kle CViQ`GQ(QB<DaF$@.$H~4'T+%$P TQt 0Hg'Y` WW!+dQĕj):d\FegLB@Ph%V_2h=%1_~\HͰuB!LW+o#Pq00@= |NRpםw # R/_`9zQ :4LNmF s8p*] $h$t!Q9ЭV()2(lBAƩ-RDɖ@!@hOXF*(> QiQ % >Dqin"#Hl0WDBLb T`!&I$0)  Z#T6AD%WLT*'ɢ(xDąg0&h&YK ?p@rH)4q@GR{HbcB(&$ 1*D ͼծX$MآАƙE9@ @ !H8hR 00@@u3]/KDhCBFg@97#f>C#DГ B)Z9 [4Nh@;Aͯq8ܹvÎ(Fu>n%s hPN"FƾM8X.(RjXH E>. d V$LĐ/UmC8 KAAg)$ IHf҈8I3G88+ $_Bp(O])C,P80 SʈWv4E$VHceHֶ"N}͂GB'JN 8@i#_2#a:7`"l )RJX}C6v qF?Kq4{@NP/>_u ޒA-,*r3B?>"@g *;"V h =O"0hZo&wEؚ&"# fL 6K_> }ZD K|c8. T|0c ɼ6LpM:Z * Tx) 0\1< }z > ,㏖/ j pD] ` +pf+.k1h(_AcŔG.a bdEWGN]@C_उ $TEN0ɴ`ԁ#ׁ@ >d]8ZR5^:mH)lg)^Ha '%">iDJ24 qrcQuDzh t yQ(Xd +PxI>$ p\C)j`Z! i0vABiA c7;el]Z `dg HNW`.弫t+ ([E|A C8G#Ԁ @MxMa3sQgMm9^?'Iha @g .gxL{e\OZBH,XX`B"H *` 3 ]  #= E(čq\)"4d9(Yy( /"chч?yU"n}[A(Wi"@1VeVfvl!$pU*S!A,)9eB)9@Cѣp%&+.prR%<! lP<$,!#3}(\BjirZ+a{g @\L%+u$Pb G`p$ 3 %lA[d1 ݕ!b%5tHs_- $B3asOY{!5`231 z$60b P^}w7\W `x a F 00Őa8N [` T 3A1p^?1B n(H.U Ġ:k{ P,p"r8C0xbYUT!SQ,q* eoۓ=Sf.9TB@#%mB!C}ACt?XfPiN @AI,D#PS#m lRp.]RRb ]1RO3"x!!2(1MSQg`O -#3)_dm 1x^Sr B%9Um 1 2x' f \ Rԑw9Mia#x xp 7aa P@p3IN+q` JK cNb / ] ހf "aqe"yT!d 41hc6TJiOz,E xqPnnG\ܩ A0V1 (>fP)#S*$?%qi=fT# m <p ⦦=  A)^ "#  5-90JBW)WP @?h"q/'Џa:0\q"HpPLp@ 4) Nr@1Qmpp 0Ity}(1za } ttYpL16wyW΁b(&x1  ` uS7N ^8S&  d  k0 ^ Y:,P |{9QTAGtQr8,22b2rZ AF)1֜&ʈKDB֣!GP=Qz9$%zB6+Din*(G;Z ɵIoxUkpU0FA~]b_2R@{ ,@s  RQ0$2 Pm12#fAp^F`C2 ` EXF3!dBK*P ! !dZ6L _J,uAl`uK`yB bG&;(ٲ W"0LQ  ZQCN{p$0 `zp"xv4 RT+I]:0 g 2"U"^GL@=>@XIj]LNR}{Z+Gh@4F!4rpy"P"B(܂@p8 kaQȰ3 :w@"ޥ9zq0Y!֔ks U H _av!IK0M_1mk IIπ L6w[0aqxWk uh KP  o\9M="0 FnG!/R=k {a0jǡ,0 1jٽ%%߃>+!=cPc`>'Qܢ-IQv)*[A@A)i_C;Y!~ 6,&Z"Do~-,%K>.09+k`{pQ/A?@ YL̪a\!:ͅ!Q }Mr -p#J9 l `3Kr'PN19%,<L} dVp!VT@zd3uwLVSƄ_͈"EP <qm% G6!41P!{'.@ YpE:I;16Ц|3o%9PР#dP mN08JPǘ1R*B)lh0).4HS%Y0gIZ IX>M)ɠӉjH-HpDe16 B ̔0uVx12 {d$8-6$ 6h@] !P1*3T8XHCD,ZOϠCr9F59cw1ҠaO=i FKΥ#v ,`4`șcl՗@#c?9& `0IE]Й!$6N3h]ox>RIThm"h9_b O{SJğ:n0 g8h7QQEWy(&M\1M N[!|褎VXFopAS KtIVYe dX(1Aؐf`g&#h!{h=ԪW) B "\q \uȈ-#*Ղ~»Q :(ną)+AY*,[&'(y šZwSڤׇ1u( rJ/ V H0@4eMsfD,x:,ഠXm4 Z4 ɴ N0)h9)i:N# H c%c>Kd6!!6#<` &on `WTDoi#> 'ؼ>N|&sy:XLEQHq<1aBO *YFaJ@ b@8tA^ zxPNlLtT4e(HSb)S5ĸR b 3x&d$"XE4:?+8@")ȬRZ4 "aꊭ",J ð`$+C@p/;H-y4*Aq5171RiaPAqPKd9H-D.$Vtݵ$b b9AhEcXܒ *;3  tx"@Xf "}gU8@ђA8( 3 "A(xh+hBk59 0j!# &p|T y WAI79@.bD׋I(:З7e pF. ю rnI<$9#Sh@>$P6|:o\Qxv"M> !X[X  'q& $J Nh(/H`dfii5BhĄԢfad sЃ]ل$8l&117b*XnDem " ѮpHKlAF_!7"֐ S5` ܲ FCZ{,&U}p3`SY AeA =kMkh,Σޘ^ L" @@tZJb0$! @ 4KXMƀz 9D-Y0ʵ(OA>#n:W\9l"8+vbia+\3H3pS\ B@}h.lgXFH> 'aR;ء9GaɭbJ'p%ImuaAT 2kZK[WD g5<xC"Q^j*0p- Eedȣꑻ>Aa#|c~ICRMdi0낰ǽ)hn[HSnLq)SpD+Hr5<osY,$CM&uS6$*G`Qlxk͎DKUAҊN75PZAf 3`Q}8|aaWNZ0 5| F5$2 u0"Bv,18#rvr-9蘇/rԥ d# ( 8K9n mâ ޗ`$ >{{v(;ޑb Xa3tz tiye q W[`[3+= ,MXϢaኅp#-S ڋHp$؇,D1 g# "`qȨ@w9À5j n`= n߲~h.8*H:%Ѩ@X(S2L,:*G b4SLY=)|>98;;9hu: 9!000ǁ☮ 3:"c p'7)9"XI] qk2z4Ad@gh#(PX;OFO3)2@77c7E8Țw) Hx*;?1`D*P)FȂ$/ k99 6؄pڃF68赶08 cV (MtWɬ؃؃M k`(PW@+@ pu;t@@Rx#~k"=˿<#< ',#`QH[h@ "lcJ( =d8J04`ӘKHQ ٔ1 `&/$,bC/Y;$;DǼжд@b+ _Gq//TKwjX'cP*Bςqb011џyZX 9mb`MDX=Ӝ>`RڋS@Gh@=N8 ))s(>+gxat1^ \VКm $h0K P9aa^x+ 8~K:j˃M踂@,* Ţ(8LT!W[Ȭہ¡MeM8L88Ԙp0 paxAHhA~q( ɛڷ#jJ-l,p.|T+X=peK ׼*W(X!d  R7(pBphŖ.3b4X␧b< zB (;x0n0,8WH6tA8 ヲ)+2b0Iι<-RcD;Qy<0ٟz0*=;jHj$x[Жɂa I =$[aTIΠ028+Yp͇(؄= (h1hWÁATLPHp n; !N։ #bM5޺ 8(6wUB(SPՂXx [-,C­7K-@(|̷"ht^/juf%JP< iײcIخ iWN3<-:8WJ  SG:oI YVPm0d `2i/FCY㛗]|1E(@;"ٛH ]}( 1tbP\<5ݚ:QsOͩ4 F03<$Qz,bЃ-EΣ98a 1bh0Vx0)OԚOD>-0X g^ =:@5HD8:  ]Yx#+°` J(0,j5,(8zى  ͅ M?4b+l 7?pD˂֊8P).{]6  < H }%GmmHTކ1^Ar|Nhf. b RV%"0Y02} HD8E$6*(. 39.K 4X$)ab3(B0R:1>Vx>j;YO0K.]ܛ麱yJ;W6J;=qA: )g):[!f:Q'#V8<2O޽ڹ.cRy4>)EtOȂhU0\Ic:a:-VPc6LP-pn2:zɨg"(%)8@ٶpȇ>r9@=AV@8ObPjQ@p+::&BHϿ;Kj1`;c``KtZ3_ɞbhh9O m@n\ПD@=p#;N3gX5(1@UhZX.)#@< GPeXyvHp\!Dǝ:j,ϐ% ]_oh}h4نq $b[h$Xf;,x@` ނ!O;6_&j0o^\B5蕉@F}ڢKߔlh-?XH1gˈ9ơK Ra#i6Si:tܒƒz@$y`mp1 ~?0xc"f3{1uH xtpM\!] k%C01X Yb  _+7[ab []l<(jXƌe#'9VjoXcd0&1,Ŝ9V~32cJ'Q>B0@qqDqЛF(2hL/AAA@Pph P8 TZ+6pB9KuqAx2 )AR5ITSM[M" F,~  ` d&0h/ *`* "d(B,҉rU ‚5hgU$Df2c~$V <$V$@6Jh5[\=YMhb)bQB.EBիB&))Ɗ& pER!Da"c>$b<IE. 301#.Б 9G>J.,A>pfAHVBJ ; rolIEe|yp@d^'AznM8(q6P6(*!dEO')Enr q hXP؃4 4a(` !-Rp'g) ?١Hy=2ApF~Eb ţNqJ 8PBؔ!ŀIj+t7AETK AԹ5a ( L]'SL=AF؃%#L! "xBBoiRZU*| 0$A ƶXы € p kȇ *RLM d]T+\W(%_.i&hl% }(0A֤*b& ,auVNt #@0rMMVvMeTȅ/hH$̈TfhZ,:)E/Ї'4{p{൙('s Y@ASyUh,({.'&=dLE˜H RcO[=a?GNIT݃wJ> 0A =HP*t,H xdtT@@B,Jb:>̟q"{zKrR>(CQpŢ|$%!Hr` 5H aFq8H" le U5A -80_Ά# ?c ^ąOqLȔ*x%`*9Blg?cPJ6a%Eifb 7J( \ 8a CSa0$α%p%Ř0o$ 8" iV#)FX@:xͱ f`'931 rJۭ19KlF.P$ Ldg#.((`fV2c9DCCDC $(pW ; 0GC4dLD1YN|T+uQ?dLh=NKhJPmqm$ymykpE\<+! */lL.'u)":% \SP#@ぃ.ɀ* B!"`ADM JL2 DB9$B$֊gf!DB)"+TKb1|JMnI?\n2M0YlA>_|(BhyـH_r()nl{DyHLԓnx>#%AT(B-HU$O;)_NYY X;6{ zAP첇D -÷-h:B,` .hL%2q;B iq'BCZ)\E,\F<|Ó-9|A`uDJ<ApdA| NK&Z%4D.{THZꦮ  qCΔx!D(GՕ椈~` a^! ,cD*SX-I02R+$B RA C/0.7B,8B5P 2YC?49|<l-|WH/@7l7pxPyxÙG I<0n?JԛG  w3Dss76c5nַZp eHO &#3icN1X#IGȄhϽϱÏ(8 jB @jAl[/ C9$KF?gy310GbiE2B$]38 =Ljq|l!D's|OxaNHeVb+ԤZZAOTM$$QO D Ђ0'p44?1<:]<|5\Q-5`3Ad&@$ET(dADW"/C`xpGt< dVi,(C,PKV-{{vG#I4 m ($”^Nc Y\v|xE)Bk;b%k`+9l8 Qv$.*@k`vBe`>1b ^={*vn8qIx!. hb*I' ,@i2g4RVߌ̱$vsLX+c\ |Ek[oϘ,8p7ǘT|r8aR gc<RS6"yzAgd! oN>1=":08c| i)J oah$?ի`A(d e4Dllqj T[4졃h8@"Tb(qV1\ @-9t~dYJ'\Ȃc"yHKL@n&rB`Pޅ/3̖-lZk!I-&Ǝ 5^J2-8ю 4@ޤW'~3?~ & B @WbbGeuqop&1Б<>%@& !  K$NIvs3l($DUNs X`=s܀i=ҹZX4>QZ$jQ#"YT֬Тà0 !T%b# ]48q3a<3y"t  XE(#:50v B'(n O`b: J (&8j5qEN0DgA:@27= v84Ā N V1MeJ mIjJ7%?6M};,|du6ѪB+Yd m #!F!E :ҍp8I:0,IlՆUDZom} L2I6Kn&R,Fu,/<{X.D{ @DBPB$ 6%Tju ͐1K;$r* W# x<q޼kpB!Ӹ=| ZLN!a VPȂ:`9KG-8rsu6Q~?PF <kʺà:NЮ@zPb$A/pJމ6]i1Uw2!.ʨּT!@iD!(!LAA:&ڄd/ D#~lNd% v @ $(iN!b0rc™ Ѐ$l1.b N@PNV)*X LFP !"#bZX l o RJK A"X:"0at.%k (VtHk!,b~(૆$VHb` ƴl)|bn<.p%JBVBb`&:!GH̍v oy $ -*,[Jp,ͺC -o d-@4R!#r&LXJax"x `& ` Ρ}H"% abNaA ¾8˾n#+#b%!FbJB !f  1@f `d1 $r? h@`32PrlE E0BlEEhan& a5LJ4map#dH\3o!6xZ,:ptc-1l>ȣ%``a(4NcrN 3 tx.8t !r1Gi  `B DJhndph\C~(?f@uJC 0ր5*sl(j`C$@ F7clf cJ>gG$` (bBV0 5! :6Aܬ6`,+d' ž5;* )!H H#\Sa4"4"r'lb(d"!6! &%K$K0$J!`"SBpU)!ha mH%reR\.2aǼ!?W)PrZZwaܰ7T!V`O `7X!DO x$SqG:;C/G <(=g> ᕨ-I IdvsdKyxCxK zr :8B9 !a#jc,^% 1K|Wz8z !4Nawb` z2 :fPP """$ĭ&eaX xa@`ab""Z#:fe hYcC!L: 8o UU:'⦤C1S(V@~KdhR0!`rӌ(Y faN*%>V`c4BKI~|tf&!(J!2z ^R +ARcj VziD Dz \7!!_w To \`~Et`w5@XQzq :c. CG 첍&-fT!DGN :+jJ߀ছyff;0 ՞d >BIG H!@i^Fx"7&5 tcA.& yl&'4(4d œ`&!vrG| _PN輂bu!p!~/Wץ1aQWT Z 8t#E]B[ńIb2[-%$l#,%!  8!HXB4 tn]6*@:""&!v$&!$RH䊏!=N@hMZڇ,J>#iV!ݮ%uI!;iJ@x Z!X!Nct4`wod40`dP.f@Mr ~mX`ada! !)~z! ۺ@&LY t.ݤq5*O)( d'T:(X*@6lAZ&\@ay'Qx!aB]?"nv{>C!c-`\T(/ @?tUhZȍ `XE42C[&"K%-h #.jsJ؄@(@)5f 6@<Β73A >y 8,$$i)p2P BB%aE$z+e ‚/!Z#ᥑodĈyh oÇC7ضmuN9C 5'^c h{>&C+ZB:b R L0O>(a>"@k47aU\W\aX7^A Գ O#vb)PbheH9TnG40?&d% R dPGE 1P=E1fpE]s?Џ,!G؂>ljɆԄA@etjJ|t3p˾>:E -9 b/ա3- uC@=l D+pqbX #F, [2t.w5LFt  0Ѕ 'ȺѮ!k N&@1c"! B@B}8@3:V@H`d@CBХ@[2Apht\BKA~H( @bb-٨03gA-}1(Зg }QَY496*0!s>JKAY@>Ji<U P/BVia;`! {i$!H^Ňp g? Zl p#B3@a0Cΐd}@ H/"1bG7,5!ָb `P$lv`E:aCMj*?Y-+8AB~y R8嫱H0 #28ARngp`mh Q薊*Ho Fov^YxCN744b&r@@ \lHSPgfH]h+42g,xxˁ0L.\'0F@TB)16 L1*̉tٌ2 6wi1apM|b-n"YP( YȠ%2G0? v@{+@ Pcrp-( 1bJ$0jd#UV|(jBƕĈl8B`M`lc-PXX7 &[DAٰ Q~ DbҎ2$"|فЅ+TDd$h@-2RPx]IhZdLG^ŠC]>M DF{ µIrGMDH6pDlK\"E4Ar! H (XA@,ydE U%Gv5WF NƭlBhwCF.D- ,rL(C*5` wYȂ} XaC 1=P Ґ@IP9cq%E\!؇իF#!EŽ#j] _ϴAUHQi@fg Ga .Z䁽BVB`XĖ.]@MfX*!@P(/q.FA@+*4YքQXnm !BQ+%QAM.pa cuZGq u2Gh,(#a1@`k}(E mb eҳI fA W^X j]#7nFQL5Q giyBP|:R Q XMP 0v:>]k25}`BH4Nbbu ,0 @ b|q#A R`PB#Bh?Bh4S`1tQU `1a=3 m77 WؐL8}!C@'3zOB!`=TmXGsp.; c 0{,08rcM51ssGPi09BqKtYaboO({ɗ)_h pEaFp)XEòDV2r5]lrU 2lBl6)a,bb J.0P d9@ `+b)SXX@g@c.Ik0o'j=AB `L  S=5 (SX=Qg@P$yRuK3faP 5`y1 45a$LUgS3 Rç! @c03 V38Ic$0!gD/:ęQpZ 422k FEgqe3~SS>  ##Qrs #4P!=P@ 1dEV. rP=L 8AmG*+XՅ/Pf8pv CJX|Lؗ aj/^Ad)Q=# ?qC**E^m*r"=$QqG0^d QlpwB"3O( d0mg Zpu]p?ŸA*=Fp^1qp(IQ'{2}p@[U lp g gX@Q053K20 :Y:/~RÐTA&BRp8h5BB1!E$X]`Td' PYq:MMb)BcRI/{S(`]n #9p #uvfQ a*0> <&S2p . 8S.F`@(z/jRX 1& DE00,whP;Vt7p1j#~` Pz*es9I؄廗rG!=4@E@2ᾊR]s!QXg5s@UVzlWE]6pd pS k w4X)n>3@$ѓ^EV(?4N%XTp^@ˆr@"C K2Tt U zd'kvAB s$pu+4o!G`w dx4g~ k@y #fZ'c[v@a0 4%B.M0 ,zg3Đk:@@%#9==$)&߂Bæ>3sJ2H0!o0Y5MEzqsp)`+޶ ?@uIֶXQ&yDVQd]G E u@-oɠ*9p2\Q'G4q}@`, QQd%02ѡs006&њKni?iZ 7q}dUy3 Wm3O`XG]qqyq!E2,p Uu )գP!  RgMG;RHKpeB20 df:JPR`ڪ@ Aa zg 9rĸBAxAro0A_Z&Hh"z 0p d5  XG-*h\@6p'Ld*)aOdy-D P   %U&D 8JIK5a@4`( P͠^hg"F_rFvդ `9@eX K0v2(P P2 P 0ȪX8 A8C١2ڰ9(,q`Hڨ!: ! 9.AFd(g:&j$'dL-h&Zc"A h\ az*C/6cǒ ^R`^3BҶ > Q E9^ <61CCkxX A8XiWE\zB8TpK7~0X$["1`>0Hz 0ytm+HH+UGf'rPNTȧ|g. k7(Q)V攟kd04@%iNYA/A+XR|V1E~" z@-n%Ơ&,3IҼ$IV FDJӍ }* CA 0$XXp1M :@zXl` @Q` t5Mrfݦ QC7Ԡhhe(}B”C3EX\l,px؈dxʀZB< Ђz C>DfNIHC)T34B:@ hON d^XU<;@*bŐ7_YBV.dũSYTF+ԡhIHBP#$PM1q)  oCI iOMVɊ8ICCaE!T~JP2b1  b k;cp`!@H>AdEob"Ȇ kge|+m09 +_!G;&eЎ "}A $(Cf9 7^27mWp@GEҽy)]Y0AP7Z1Y&\j}/†gߐO 2@>@yPx ACWjtz›z! PM>B(ԤB-=H@@%x0 5q-)\$$. .Zt=xX*Qh,|A|J(A.lepŊ20hxDYч[ iz7UVQMLN!3 QE+p!2[ V5L" P8xaEc8' TH`'G )Z lܯ*-@Bn;>Πer( ,JυP",y`L5Hț1gAyEj83!ڐ@ (f` `3=na˒6a` %zI]*qu/ac1S^Y8KF( s&]ѹE F5w\ ^R힉3<%p (@t^$fā 00X8s8<UA7IY0pZiLZS@V8QF-h8}bɨDv8F2* BX`,Z0Z(    P R@F3+zu 4 x"Z@4؁#`fzOh1n+epQȅ+² d H]1IXqІʂX 4FxNNc$z̊~IQHa# 3/f,b a v8 L : XC5C;zXZ@0(T 00iۃM٤0(80Sh"r˱[<Ų|K086Oo X1ca VjN q0ѡ[ƚi" ډC.0'Ȋ[PB Dh  K(Sې9$SZpL4c} pŀk 8p(DH] ,#8ؠ&cX10-,EjP׸K#Pb GOZ(]LY8<fsFl4a.HB0cC B62,Zp‧eЕY*PLg 9aS,)h Xh 3qUp-Hb qW=P'w1IeЂK),~6(gd+s d^Z2i{R;8?`f×P0]8+x5VXBTr0$*LS {p T=Sy (M`4ؠIh4_ ڸ08U9d_Mz(ŀs (HD۸_XMsˍ p%I{00q0YhVܦ Ekzbmp&Y@ѱBj [#I} K~ЅarH8HA4hȅh :FE@ M h X7ՊLuڶ"U(%(D(UHh0˭$[ iNHX:[q@pQa~?|a&PIfdFR*R(D@s%gX\&ډ**Z  875K&+j `鵉DWiUpNxEC(UpS4z 2a S(ğU_68bߌL8@9m84=kDID+cB#8D@1å#g1ؠ9HΌ ـo}jx>(T;?2@~8Y@. RBEr<,Eq@S`ˠ8V- lCQQ7E+H[ X;`Kfm`VlgX8.zb(7@9( r̫]8шn_uى 5F`r J +Ђ di0ټF!GZn(/QJ1)ȇ0 \n1x3d_;LKjNh_H XA6Dn@4sť6`1=i(o.k8`Hޔ npjWdB8q9@(8Y8(#P$9vk k`R/ٕIp@['Wr>pF) 6<PRO,A60XPܑ)@5XT~a B! zF8r@Ieb%+i9d`? e1" ea>VF J/g}V ;`u970H[b5+@ Keom*7#-NNxs]w"u/U t QchbOq 7t y`߬9z܀`BB͐>`yM":F(`r؀0q6:/q9g61ʊ9@Q&Y4}ѰaK0'`Wph x(Z=c$iF@,yȮ9H/Z0=p\HSZ,Y / p^l0r[pp+Q؊wH7@m(e/ ЅY:@N$ H&;V!XNt4u(eepNY{sDr8!<! DqDhT)Je!2n,)HT.&9pʨzYEOANe ]!d 5j\HD 4PPʕ1@n!byqƤ,Wcծ-pl5p{{7޾0r*6|+ p8BA! 䖏h {R  >=BW`l{K@qNNx BC%%l`-P7GyBu,2Bs!3v]3R?t3pDˌe<@U"@<P4BTW*^(BAQM67  1FM5ptEC, 'iTRT)P}X2-\ *lCgYuB¦2 (#BA$ %N BRu !pG'1T@BbL")ӖLR`p4i*BaP]mL`jWMah*pj) 4Xi+  acCTf GTFjGlQ2q0l&aIL8!j!'Gp7㜳ΫqQZ=u@JjRڅ"5(Rn鈞PxqtRSG?!Ǎ,DItm+AIY%sBЪr) ɀ+QKԑ7G8ZʆmT Th-mWz}ҹb*04!{| #] ( Tƶ"F`@U9\ҷp 4 dB\=BY 3 +.$J_LcJ,-TCp*TB:c 1bI 0`"Y쀆V LHٺ1 ΰ2zg 7oY!S4]H{}7=DsaBg. +Ɗ{(i h%E5 YeA2l6 "bB`;[$#i6|#Mp7@ ܁aLmԒ tV q:zPe1̭2 D ?b(†9LE &r+"4Zp>&Bе$n74%ġsI-%X-qAqhICBHt4&-nENqd'- a- ,804b !(Bri`&K /iTlA@q`HP[F$%@4Q!g/lOPBJ=*腭`#B lI&I48Z/'`N7C0DS]be5f!JʿQԴX G6FL_f|PH!m$qђ#Dq(LF$]F?PstNDfkȈb (C``K!QĠ9W~YN7/j"(coICv" 3G(%  j$8..lObRZ,Kh(XP  z-*09 g[B(9Q c aƗ9RpjEM% Z':1 C4-j92!pxX1 Kx+N,\P WPV:{@JqXY]19@ P.&)5 ' }xF8boȯB@)LhWjd G>S\D4aLk+$Sx,j,b5s,1;PH̐pes ]86=R!rP&UϽ$ΓXN[l$;0v+M9b^.N8d} 8A\Q!^HMxprs(:N"$thKۀ1%ChDbB$It6X=rDЏ>qf }&͂+RAT/Y3*/(.Q$`\a-dЅ@`,S(u(޺Q#d$Py7&!)I OEΎsVB 3"0Y EPqr^iM9R)Ӏ(%?0h9 4 E|C`y7 G@e@YjoDal [l$ʨMjd@ ,ZVc,P{C+%aތ7, F X@l)!fr&E̅hfe GTEB@Rz8nRBl'Q+d <@v P-i )!d @BJzp@8}I@}l$0TAKKB $ PZB䓓`3P@?EBL'.İl `I@ "D ۺ]`U|dPpA'ZBE ð$ @JCCHa/B$E>XHvOT23ք7LCTTEPVq 8|MDKBؼA?D3—@B$L-Ah]E@>iLAР (VRpe * Be fe5p@bVB,-,!"!GD&z%vZ'3@˱yBX)՜S3 gÑST"qn ᄝ DǗB\{C&Y+9d pS8p|xy-nBlH@$sNt8|̈@A ,M!BBP,"GTp^R'BN`tO.W FA4 1 (dvT- ,B\]A)U28dWG"NA/$Wu\RG|/GMRT.rPSR&qE i00PHG-pD+*p&E*E,B",ŢMt(ӁyB?l ( Ptl43C/Tz3FĀٍiPK ;RU r D9 @IrD nUưh9_Lb@! 0c1^Te|$0:G66!leHC(%E2\2A|z7؇p(H%X(TCTf 5-avqZpL&bt.8[9@NlU@Okր̓qRqTF`tŔNI5L5xWR GyN 9% |, o AZ%%&N%Hٔ+p ,,f,Az ljXXXRk*-z½]t8NKɬpDLXP @cQCeIA܄Ax  D/\M62PDe lBM5DTB9tR@Ba\h^/̃s(ʁ-4 .B|@+Z,`q@Q5{p`btDP_(e$7H<$d Gn9:&^p^hqf@>FpGr ¹*G8+ ݼf (-GuOMNy-y w뜍E^sxGߓ-ǃpz +@ovh&!-R%t;#Elă ]trB9ɨߍqA3(Gl @nWz/Ё7XLJ8n/Go@e~@ԭZh *4V`((@jICܒrJ(~_5 K菰 }2]@݇!81d38 [3chCD5n;1re,E6Yn> KHʄ87JCcB}$GB*>W6O(\aK.W((¦K1"Pz*9.1 o_z``D,[΀aZ!ZCBd$VÈVn%ܸ&1Tz>8rTDx|B|0yT UuaB> \^vrh1@OኁVYo>pZbh"? ſEP ȆJRzTٞY!Sw\  cn ޘq#@0" haBza7,$r |#eh7pFa֌ސoЉ+T4 1 b,F Ka>4ve B7}La-YGM#gSH;cc7b&0J+8L.:(B,3Q$:h3 M6ኣћbc[9C!gl; !jFcUpBH?xŁ+Mђ}IJ,$_X??:cc'hEB@ CX3hIBz%(J|B? pexu@I*Bs'HԏK p)ǺtD),@P/hql&hI6`'y ؐ@G i\ ځx,$% M{3,0P.F0C(EEFHp-DIǑmE/!, P@#rЦxD' EKiBP+Fl1+C/3re[TՕ)]YkΖg.I"aFhB0nAhbT!-JtOVr 裺ˑX!m7+[vƕ&$ qfng$*Q) Z\fo3*ؠl$:Ct#dФ:ry xȢKPO0hÄ AI B n}x xZc 6S`E&p!h sysR:oJAӆ ftX@-P _bH_WNt Bܡ>wVۮ>OlЇр@5H e  '%rQ/;V$NXb.1|,JDxoa8t"m ö3:lUHp!-b)WT[K.MB1!G2Ў6!K<P0[,pR5b,.a,ֆm;iy|cl1F> PP HK&dɮ,mD9n rD[t+#HZ#ӛCZ:AN cAssph~ʽ郒ң <'ЊV@0v*܄t&h@NFHx<,@T 1("j J*h+3t2` -tu-*?nhD[HHk#?,Q/!t{T0{?R 60KqXL;@M>!+ BΈYB rQ 2 n ֥ؤ* --"".LN/VK"#^0m1.t΂/#3W8#xFĺ|ChhT+r><К8l` Ƌ+(A,(D'`6&10D't l`+f&N"vWdAAvbrb8=B{>V$L h&dćEJ̾+^OV3N?<ZBt!W`" &v`8VN!}NBXK@"#jh+3l&‹?րv A(@rOdEH($-NTA\h#dĠ!J[* D`*UAo'€gN\Vb` NP$I"Ne-!"`0".&1~"/"ޢB/,0*ܩ 1B&!,&Nh@C$'*#()8$1&#!|+A21R&>"J#D|+2l~`~cx؃iAd)!l&5 &" 8@IN@ !)%sI.X'/!@DNƪ$,A,GlA<1q4&@4K*ڠ%tBbl RAQPU״y!"$Q,0 $r-׌6P&*P;4e|~ {N1!cZaSSE|!<|+ ha n@PO>¤,@Kb/%߀րz+2*,7- 2'$i<-b qUchD9&3z=b:r<~al6I۠gtg.fed@ڀ6a6l< k> #bNab,,r/,dB#JD )Ig^;Zf3g<;pC,A͠)J"&gMg'%Z4<|~RPZXFoy|f @aHTѡD`b!t$`]΄ D $YA rhe MN!WLL2!*W`$>VAo U/F+eQ0@7,Rta -ݸ 4uCA>"ER6ŢJD2eAmf8hɖD^2+vv3BA~2+0`B=lc oB;h@ƴ *P8d( D6aADOkk: 8Kb;:xN1P:k,(6$$! vBFuOGB"(dGr+!΁i`&ddX"X&'"Ű!b>NSh#BDN# !&!] lc/<.dl <<$>@abcdBD ~ހʼnf,@ %!4N@*B NM0yʠ?LX{!b,`6!8Gc(xB*V1ւ+* CaX1|QB#0R vϒ4,a]?bnD&t0YגivjB8rCh*&|bzI΂>Bh!TaJl3Db\ V%8 l8r =dH=H!c(Hl Y:NA~SyfQFk!# ?"it %"Hr *$R%dbf&t|"!,#h8!& %yxV@ fgV92rΠXȔ(Zj B ZjB<#W {DPN# EC'i#Mp @Izx#VbBӊ&w>!VAV@ n"oE ~H,7!! lEo$ Vn+L g,DzMn⟂-@`O1, Rktɒ+̠SQu*,=R1V'D O+η-&J,B8&v]6F@-tBp$+>Z¢&"|V YZ|雅 cqPt)wPrFdB&!D$xF` ~``%xb2 f6z `KhA~?2% (`Y ]G8 &?_ƲY$!@ͽb<׀E $~"J$HeB% _ r ߚh҄$aEJ -Dr)$  X, b[VBN" rmD֠J%`Ǒ-% 2],Z:"_.935:b%N"ag?&7~~ m*ЦeZ4I|5i~d A,->%?d9{\4J'`A 6t(6*@D bӯɆy}'|dɬT 8!kBZhAT#;X 4,%2NpAV v& `sV~9#P2j9<ܫl@,zB%Z8 {uczVJG@Y-X( K)<ɀD䉶HH&GbX`D(%B O(x$J#*KZ `e4 LM d ~; %{FJ7"=rM>!|#V-}/}r Ӓ` Ç @@4ć1$E2v\ɲ˗0)8<1P`@K0rh :peBP,!A-rAXZ,]`i(9ʁ@6`&XDfP6Mh ߁& ŘOPbS`[G,A,&[sgO#*4s`%e@یFn&qޝFw2+Y:N@kDs > }8s 6x+8\Ko S%P'S@@AXi2B@7Uxuox, :>@wa  ]@} CRTqF7Y`4 $-;g]H1} nW .'F9@ C( G D$50zX .R7 V` 4 &D@<J@) h7 TP$O&lDRq BE5s^Yv}9Cw V60B&ba$-@@@&tB ǃ D >s@={ fq =k WTBX2قfF4%x%|mLs# ήg= 8@w@%pF> +tQj#RG4[  c n0MH!D0;xNB<ǫN, qV"Bde0!KFp)Y֮QCs┭Yp`R (g@`Hc R0H-𲯄Pb)FbL8Dma0`p axzW:".6"“#-4Po sq'EKA;^\CF6A8P }J n7@zȂc #u9k@VXk s⅝&A[17 3&M&+ DL0Xao@0$D/rq@r;y >\1Z@C_IAР+HxZC9q*+CV:4oP`Bႝ 98ŎTb\'0HՒ]!j Ja-@b1!Ph f;еPȺ$ 4 'e х,LhuX"SEmgD (e+ YTMч%6\%`K6flC+l` (lmDo7 @$3zGn8e)^ʤҀ'a /YB'&}܋mdHiErqI 7衣(8QHSY@39p % Qs. !1jk!h1y=돦X!EHRf\zRMH. s0(fK!2R#la ףb y G}1`DTa ڐc@8,\ alLfpGQo@zVЄs ;C)wS 4E8!Uy dhϨJ  ?a% @7Dэ`Y1\V|$%[ )E,A6ebāM#rZ]OT׊}qx00A[ 8!Di(…%'+N[ ls 23k9 B!/hvo|dL݄O6f+R]P. JEЇ}p+qF+BUt@c&/"ַ 1#ED8p+O&>bH۝\Q}Lx!=dŠd:ɝѕ$R&P'a\Q s4P4@` 2^ 0c/o@L`P&CqJ@0pbX V_1L !u@XATLLF VDavmp%#GA@  oP{}@=1xD1#&Ah VQ4aup@O5;#3bh3*e. {Gf1 ЊQb XYn!x2ABu7P  0*`1 q#TKp*Ġ@`gI0(=^ W,B5 ,SBjSp :9VBW5 BI@,+d:C"5N-{znBP@@  p.AېqpMsA5w%Di-JgU:.{7"Ք,F1\GpF0PAe l IK,$ VrF4 zC .@j_ߧ GY4IPp)4w&Dn=3}.S`} &`g41+G=MY{%(Įa6Q N{Mg$!4_PqWd@&! @"2*B}prKp*(& P. u0 98B5AKNv a!,qk:zȲ+RB=PlIPAIlcv[:FƏ V>S# "  Wmd& V4Sю*.g@qp?VPpP0_nZa]dpx! l0Aw }s Pp217FHH g$- p +ȗGq  qpaq͝~k,,hC8aa\bJjIfM 18l^uZMC[I2Q|m;mAiPp8;URK^ 1- oi Ff! 1BI'7EqanJ3DZHMP 2'G0YLQ#e21p%21e-BH? Yp' $d6<C;k>`- 0pU}C!"PUBPS  ;C p8|&00g o !` IjJZSY Yȓ`PF.}T~`Yp}R'!]$t*ς? Ьo9($ Ȱ 0*a:aSvK B 2 <!@R; bU20)1 aVȊpMK#dN[-qPjmZV6- x9ޖVAwats/7m\1LamI[3 P a)+@050H*{ -<,=-%{ &A+0%A;IXWV0lyzE0 Pb= Ӏ |@v& 5f\h0m&F@Lkq% !1N|!g ƠAeF!+ίȥl=o?kͲ"ζb?] ˎ\7`vch`.9Kh6RAFڰD\QNJy& I#Ro(k$01C&f_ EPd !0Y&cFX.EFĢ&` -z-HB6q`Ah'~L6@*y4(eb=k98HDu\! (c8\ ngaZMa 5 堂((a@(d!X39HL&^`b8X\qBB)A &!CЅIcpha1 U+*q֘ND˴v103qPڨ\(aiMnoPA@x!mp6Q?T G6"'49 !b1%K6!5Т +$YH сBC1Kk)bQb &k[IQ"i|2 RKdX ZecXI%3H,D%JvEK/#rԜ%қ@՘O$ :C\t$,98p*TɈ |M$\2j:{OuhCAĆO}2Z%I\*qnCM@.Y]NB( `S cD?"Z9FgAp!@4IF.A q3Xz]Hl`c T # |F/ч,@!&*mĐ4 "hčp*vZl%!7h S]pۆVE՚m$́ vy^\"wGlwl ;xWoC!"aOU"5)0Lw#sHJS!xr ֧Qu%$,a0_ECNJ+/gLkh, m6]g)(ްKsg JlBHDq:p38gC֐ Y2-|䇸y)l4aΟ *B@P mdC Hd ;z$pZ6v#YȰ!'L"ua(=/:OG>SL3}4+QA0 $ 0P,z10q-'N. / X=R9Aڀ(@7bI+@@`9#:2x~s't@t8#ߠp2AqoȂD=R|dV(أB¼= 6+X$ih{ K` GC b,@QX0B) !hP ` \ B@h<:8,(Ecp ip  qpњȑ8h *YA:P76x ӻHAa=;89>`  @t [0#؁K`)(`6([(h=$Tp,CymC]q G΋7X; MB6goyy0q`E$т+6 ^XV9FAĩ6(BʶڽApEx.̻$*5Q˚yB⨃i:  | H-r!79~JU0-/x ܲ 0=Ra%LH!IF@ G0&+ > H[)hNⰴ Y-(ſU($#@%{h IOZ;h61H3KȞ IŋyLMxDƨKi(a)AhjƠ>>#yhG\ Q>H$6ʨ#8ɾZNYpMxn߸`0Ғt!WhĤظAtQSPLo6Й*Dg܄J`x<1xS\JAjl%`N5:PI p9c [x*9p ]鼩@ ЅZcc(8 ژ8 TO0[LcЇ#9Ȟi5//@L {hʯCIXB@HA*Y0<Կ00cXPz(SP0)DUΑ$ xl F O zSb.@hNPEUl[Pm'ȝɞtPijG-}͡2H0ƎIpoX9:B]>:X q X>'#`_HнNylDQ{`{? %h2D…Ob0 Hb~;a 񸅆 dr^- I`PeHFQ |%(P$@p)0& rm&wVl]ȀB&UKt8 H((􁟆:fzIi*qt.Kwh i݆HoiW!RKpKH.rڄhn dk6ϵ;IXz;P'B5Kr7eVI_D'c?:Kxd^52h xFЖ#0pN+\  xqk=G:~DT90D*tP;1KɐH-zX (R(@yKKe zP PA7$ddx0'#x{Y*,628 $ 0 |tQ$b|сX+8$p/ 0IXbo,k`A`+"!'X@ 7r#HD$yE"8%$̘pM Hyf( \ NgA#|"ت0&!X=9BPPײV?90Oưr @fp5pAYډWaHfd8p%&}$lC JӀ |ؑO@yá7 "cApZ[3?HĕxT˛%xә [,a%ho9G.LZ@b M %r Q  $_!CǺX*e (PVq{:LP>`v";5`l/3hњ@/V]0BRݺ։V(aS =#@l[-YW~\~P`d 4qirMjcK%x)f#Gl8r~ OH`mZXKu$%`7X.<#FBuuhT0&V|He1JRT4M;RPe_LZlUB]FR@ nxs \PLC[(Ta4<@+=KF&)$D2($EPEGN6 Iw }>[A(&ˉ@xEgt8(zsxl%QCAi~y'Mz (+l,GR#\1G\BKl(m R$$QЮRJ5 ] #oUЉ[$M-A  q9 x"&!DT3x@ np*GO>R)xEdw6@jK-?E<TL70(^:ӊmPkI"< *nc' -eetaʒNnD7+<^^OA1ڬ ,hC v_$KƀW%C;+ +tr3RnMSHar{%l[|ܮIء0\\1p@+),AgiSG@hD @pOc;S7"+)p@& r`QI~+ S eo bA/u\0)$_N!Rbi[ٯش%\{4$+p aR$&QXJ(ULgU x !#UO%a"BbAy_&I : *-b l(V: ]]!D/QV(p .̠z@7Ml,HA*ТzQD\&V=8o` R&BPLQBв>a ]A3- ҍ|sa5&5Q- g;oh!C>CD* Z#`cAN7ԡ\gA%7 X UTklA)[$B0'T 1ĉ0gZ~x<ᥐɧ_E-K,(rhts> _|ǰ 57TqA 2HB \{&)$b;1b4(X4`o` € #> p=B\W& D3ц+4w}1)G{@,h/9֍ec ʎC!\Ȓ' %%vH@MD @/A6SȠqӤ>hsY)+J EddK5Zmkr-\1z kٵz4Đ*n&IJEhkBN#H!VE"pbpKe Ӑ*KfB!6Ew nx{^lA[3Q%BCPŰ 8EOEez_ dj%Wvm 17 ,yČ:}V,0dJol*4.: qS[xeC` kERp3QP^Phfa bxT 9~u B+z\T`N7`oT\!K#[mR0/p 1nޡHfb+U<փW4QаmIS}i#5Y#L=KقJ 1 \Zߕ=b Kc A1ohzЂ<.hLڊ hb"%nkGbmB  BA%p{5toq_Tpk@b+ճ@oW@y! cbs 07ZTsbDyFf&" Z2%dgBnVp}Yc,١jQ@ B&Qg6ӴWАj r f!֢S-N ( S9Un^ \P-_Ӑ.^/J.gQ%1uʀ!@ X UxS{Bŀ 2ThMJ&UT yX6YU<VРͅWWp+b `4=7 _K4c]b&:gu ikN q EiaW$4T["3"7ar_7}` 4J@Td+K> XsT@1 0I3Ȏ `3pwP  rT 8}iQu.t o a EIHyh0pn20 B"q \Ny Ȑ Fc[/ ^TO8%a ?P4vDuðAPp*0 oP (c\Ul@ `PE2}Bp op15БCF  +Y7E@!@Xop8V8$!P GR'tu9P4љT G03h2%ZGvsS! gr e\pb[zrabg"9 g"p> - 3YrW5+Y.sPG "(D ( .pxy0gBvv0 ?P6QS*p ^D`gZ*CW~N-Hj[0}oL8 Mp 0 0!'" NCqp0atU @Q ٜvN% H 7Pr=Nas/>%(5WpRn H^*@ tT8)U8gP 2/ <<6kޠTZ9`  %1QWPs f&Qs&eT`&I"k J, IWhW.vaP)jŝP 0* aauQ4T$O$ ǩc: KPsK < [+%o3 {55Y2b @@2  `y -z9ހ 7>?8J*Vt  +j[  7^7 Đ'wt$_XQ `C!SBB Z  t_)E-X `_U-D' ^r (2: vk 5<^?QyMǥt sӨ{ Pd RiG$hE`a!('6F@Z}b@  NNd%ۛ€ eTM+nfԔlF# &K(j۝1u@ jDl# z!Z P`ZC Y!@kȠ5tR*8>% Ā BzjP0 9wp ,<`>m@Ha @ B[neFbHkFcć{:B 04P$GAz63(hP/aw8RR9! Y*7<0!{ttG6-%9p5sl0 Qs` 0

{Go/)3Uz`>`p`Ak2 ΀\"L ^h3TPw.1I` ߀  85 p G[r K i$,pAr-uj&4M )*X؎=u Q@S'MU+v$ .B;D lj`5Gr:yBફ٢sM A\Pr8 @+QP[ $9`{{K7]{d-Del27b ThMp؏ą r@ 0YnMkYH:@ Kr̩xj5xkt'\Z#\7qC rarl.i 6, ?Xo^%gb2 0 P n`@i0\B^ +m GAP#Jcp 4 '+BB6O .{Ȋ\2->^V{ ̍ 00ݭ :Z1] -/A.[@Ho:-+O!`=Q&@ߐL4HO8SV \KM2M-Gj{@F0R!kӆ Gr0`Ps#jʾ M#_r[a(7x#5d+҇ҡ&0]P  <D^[p\5(Խހ O ~.% iCL#2 ;j`@-jrZ7u!E$YI)K:cQY͐: D![">ʳ#1b!v, XވXN$: H .B6hժ|6O!'Q~cIO-Q%KAc C ,Tf:O3!˛,I֬ɇs"I$ѵ;<@H ez,f5jQwoyjFʪC.#l\+$ˮĸA*(C|BRZs5i/DM7,'{Bc rˑ\ꅖtK2ICCϨ $0̎%(Ę+j|ꥋZ*悰*G H#yli'q$=tZ68 2_H5hN2S^z 0NH= ӾD $ *5!aa#VD 顽@ V7&Igï…՗:AF!qPF-\sXhLh4D. k刎\M*+(& JS)8LLL Ok#lf070ÊFJYEXč-(GIސÈdFuKp7OC Dj%gbX+  %$>I.]-d,"; \CY1%8P K}B"XEY k+m2: StXk< u$QYݪ7(%8 XPBh;;8Tɭ0x$}*d 0XؙX  0O& JqJ68#0-J  уt-v9B%(RDb)+BA1@Au: 0ؾJف0962aXB>*kc8hHFp%3Q{ډ N@*x #Q$? s!xcKQ-XBi[ӯ> x&rTA@$ s <0878 *i1=g&#iYӃ<*m%!+jBpz`H8L;OEp9a:q`MDQ@Zȇ^p)Ba&z z5*|:jsa710P V Ug9@ [Jcw"!<:KEkK) 1 Q-7>O  F5 X҆cHT5鈃)רsxVǴ1 @[0@9MH*P0:mЂ w Y5W[ClQE_<@ :$ 5ES=Q9И2Q@ &@ёں8|x}݊8N`[`Y2Ɋp a*4H Ȝ +[pz.(0k d#i\󬆨|, ⻱p8ӎ\mX@-: $ڎQxJW9,>O)@Ѳ9(Q =zjޓ`(;ShɨC0Op?xa3x!@iĪx#EixVЋMFKXQ (X  p# *1qASZN1Dpݽ ,g5X[`!9.a#f~`o@rB>: {w0(=($gp JP %ыGe#8# {P8&5V=Ve⩑&ogwaiXlHXQռm0,ohh\@k2+QdO\IЃbЫBT$Ϊ#hUaq8B@;Վ;&"hNlx&ޢ!qήXS1uuc;@JoАA 74@!j+>8>:a5fɯ 0m`JْeqVtmYY̽׾U)W[K`Hl۪tA T^-l`g0xN w~tВ.g4dXPX(4Cb؝(T 7[ d\mi3E܃Ef|<#hi!* 1?zP ]h0aHv@YS:0E%Į Vx8ΐ%Vh 3,:VP >{ns@ P8L;O>k StY(BW m]ղ |<Rt 6XdBkhSQ8`S/nxsIR -^BF,ּD'ә ^@QN VD0_w8C}whMIe S w>_b#EnMxq 7P) Yh29`U9 \_ޔ ӑ0+ 9MX?plxi?@@0г9 ~xHцG_e%>7(7@Haj y8 WkvH - y= z >0Oԝ5 K[؄~ NY~7,cuPPwA -؀&'' ("jtD-xhwR007uN0@ItX]AL` 7rQѐ$ʔ*W8@[.#+̏Rjq#"|5>AV|fVRZv%̙OX$BY\o .ّXA-.QЉ ;C 0C!LㄗXZ%74E Ϙ1Wjz ҅$(rH%pht nxJ;/D|R;/,V LqI Koʑ E O߾15eRVDqN.D."!Z guXWf7RPFA' <="cT#@P5E!ka]z0I0݃mS1.@R%8Y uĞyUT@Ya͋]rs|F1ޕu蝙 ilj"K Va!4bd%[2Z1yQkXYl@b3P̠Kl8"T$+l GU~R/hXε?9 jfKʡY)@"vQ ꊅ }dqK5G QFYFp/0EyR.l *  t; *hXlߠY{qCp+Yq `6t @?Y A0*^(RmQ9Ť"?Y2UJ}<T _+a}C2|ҩTG|s+oܠFU\B01@pM7l[b}4@M@ 5HF޻s}A;P%( 0ҤX;t2I ww -:(uVdL. L8 5)LH IGnJ}P00E,c7b+ ~L0p`x palJwU{ 1MG!Y a|=DazlA-(ԂQբ"KBM5?~ 9/lINhRb%3n:rQMi6f~2Z1VL Ba E@)9 8a1c`+RQ9Ȏ89b(LaD4A ؙ${?;4O` M,v{|D$ $A ?Õ7E^0d +3KO]OXȯOue>`@MJY(cjSNPT1MPjrP-i+G`!#T54 +l`&eO;ch $#m0Q gDF@2A-D$'GA" I#`@1I4ENE .N$({kDЯV|Bj/XX?b,vJd -˃pLS~ѪnyիNyjwe3axЂ52waHOg(Јz&^ 00&:VLҢA*nӇ%h6(<P-,c xuR1BWIDP9VFN@j6ue0dY[0-)j3M@FYAQAO[Kix]芈6L3de#T[uReEOZ1J,^+7VQb *qlOXLTXDLx0dKVo%@W5E&t,ȩR1 m)pG%\&Xdo`(:W$1 & F#T1,n:m x pOJ*[CRe&VDZCkQ9K"Pp"epZes@U6 > BiQ@"zCJ$@)mp:t߈,qr'P $% 7d'%ptT0(f2 uo(8"BnZ'͹o {!./~ORRqv i\b CFaOBlJbw=v`PCo&vEBp2A#Dۉ@A7E$3rDv2/];COˬ{V lq[ b5#qID1}QovOY00 <̨ @C/PNNgXO̺儂Xʠ, h eoT0XDM@_DYVGK^0z11GAlJàFL$BkxE !TJH}0jIM|O찇A\~\7, 0D 4 Y )%Ge/ݨu'A]h(q`Io;4l@A쁖J$uCA.zf$BMG('O ,qyD"ՄJZeM 1^sT"1R} "Ee$PoDxCw|Yb |&AR1%]hj| Ptb)8 ;@)'H&.bL&ReND,n1J=B ($ ]TtAPK4|&"l-* @anu|K[D^ŗE 1YX<rPB-T1vGzDلFVz=zً1..PRm S5(Lf3Dh$1)p[ICL-(e)0,-"F)L8GD␋O$ZDgM!t(pt*?P!JXy|:KK3|rDjAlFԁݵu $G0? @. o 4LC9|HXLAPU!F^؁e *tݍ&pēJ HqeDT"W)!1քktOdu&ZrdúJHxhR~$D'i# sJL*TClD֒#v ٘Mu$IRZEM,:l*mDnlllzf =L'Gg:G%Z(ZL|^ИFRH2nD]Kza"ÞY'JDÈC9R\2~f$)F"BhV`E]'AI9bogT.d\B,\D7Hl+b a1I!ʢ:[i]0%qXKduI$0XARcAā1@젬%߀B@`PTwz0GGTZL"(GBo;ECaJa@L4 K!eRZȲK"5ZZ~ZK\q0GoD2uiL< }hT4[C!s0vD4G@ hlGTr\dFOAIeL,rͦTDO&0Ip~2T؝zF0m,iGI+`,"\ G5\hն>n*q뉨l* S*"WC&0_ǪS)MP7+d?@SAv LpN%0NbS6mp #D < @5ZkX,!pW.tJPaeN;y6;ZĈ90LYx8,Ybm%ZxN"bS ^% ¼y6̛0SaDtJۆ wPAФoN<{nЁFX0mz.P;abFaN-2> r!eaq8s[M׹w?xV-^niӬXŖ*!qŞ3ԩRK㭃 k5r1 LF ,@H(AEBag\bFXbHfMXc5H<9X(&RhV2F\)9:pɻɻ6{*@!\c)Z =X@piJtD>M|)/b2);SŃ0tUdV<((&HKY[ `e0fS5 Kldz‚%NH`'bc Dh4yݗb gZoF\ (ЎZ<V /- `՗ϙ[Zk(,1WŽ:ڠNmȊم#"|s=H{BnA 8g^noR!_~CwvH$7{6*H P@Y҃aL%[ Լt*+@d}0r쭁 d e[#ܥڀu"vo{ic.FbAhz81}5㠸>F2 #dR%anp/fON3%bCv@KEr 1@ vLx>*'s)AP-D;B]ACX.h-(Jj#,5 x(4-!;dBesULpx0%1q>uJe8a<*b.}B?6;ċP&0j@ ͸#v41C6z P=z >p!M3`'.:'8'BVbi{&/~_"dF] iW72! *A9$DNCNtcT %ED"!; 8R wCNjÓV1\4QwZ1K[<_8HR=VBGI0쨤&x&4$; c$3 d;9 yF^2G\HǸehT'6}A,K.!=4qKVZ6ICRO@.$Li8OB5@'Lt"y*P-MhO /ޖ r<!aaPmF5 f5O,5 MO0*X3g jP74Ku=r=Bkك 8VZe @r=%{Pfl0 rAN8A|pC<JPp>NJ9 BVxYgV7nb6TXB2Yp83؁f6ȡ+t0ht UdJmm -9Ȇ$[uMC@*p@P F =*^A= ՛3(jhf)8*bxǐ;9@/a `. ")AIHVhX h/))Q83U&d)nԿ2Y0)"PӜHv`lɌ¾Z .K4 B]tHNG((JB͝R!9S0}K:ޓOU\NY gn 1⟡P@c [ a+1DڟaE-v>E!?2&6 i{6 (ī=J{!d;/ "!Xh4y42X@W("N4 xc$4Z/4]"񗌜}.%.X\yK!iNeyDeD3|a BJ^B:hUCH' qqD|BvB"nEnH `ZAW`4.`r"'"n! '*ETL 2}4T!䤼„" " @:p%O'P( Ƌj2.ȉoUp=fŎ5 pࢉxD(p ER2,3>.@ŔaV6 VT B &,.%&! 8DMLKbxB%/ ')pp ߠ~qoFvdւUt%: ʪGgboP+$eΎؘ0ɪ6Ż" bg3BV@`b\q\px- 0.S^PW18Ǹ0Tx 8A\ 0 G_ǒ* 1r*,GWc'64N*f bA ̥P"%$C42PGkl\`"G c !G-NehPRt)B(EeB,%F 0X )m`RBrDX !I`BU>+]@K`>F &0좎BB"(cD3 3m,/' !x*%jP#5@BUؒ!.$d̷a^ F `]/`` cz n.@Fb̨uj0(b )Ag%Q"DH k)Ρ0Ll'삏0sP-R"Eq!j.#T`AkȚ!rȻ(s>g-!>p"{ndMn<d>@ @@s_Ҥć4¥ @"Dqb`A)b2*.++`k@pO$trogAUF]'8tD h~KeL2* A93AqĪ[S`B`JA`a_`܄"Ł 䍨axA8ba2 +:4!@ "+AAx`@%^DU&'#ibu(h(DG;qXT38CFd \4 BdTƨ%@p3'1+C42S. f , aLGjMsI@n'6}JI> =4atq" }27BOVRjPI `v!C2 rJF Cn;b - zb]'?uo(dGTiR"d]lK_Ta * !`Nixdh%6NBAЁt7aleKo^ g$xxh[mBl!RCxvIH4("2.A0"(+v@Ȍ(d^XaƊ@!+y.6xsFcAG. KPHxh!CUB]%-!to[K8n 8]AJ ep_e DpnUp@{ izwm?q(y>xXE+ʔXmT#5)x@ s |9gNp7(!@0xhqD' 2(p]cqEV j$  BO@A1vtk qbpOe_:Ϲ9]xJnșx/9oj\``1DmS:S"/Kk= :N!rmz gv s~whx!p§{%w"w rXAi {ᩮ )FO>NŪs"L%1 Hf=Tv2% %/%(vb<'T@8o!.mbN*(K>)2"}.xdF!Z"y?ZB\?xybYbh~e"!2v j"K"%`VlzbmՌB !'rNQd& xqdUf+AQloԸs`eJP`ayn E_ Pi7'"6y5G <A@+3P(Jҥ,VĄN!<@eV;j#J \M# L &@H-Rw|l!BSx2N d-dr&*d7rqLHjNE91<(ɧ)7Xzzc>o4 ⹞BVd +0xLO`[n^*(솎cL!!ba!vbm=wM@@LM{06Z`ysB. $x Zy D=Sq b w^cCLYAf "Ĩ1a1ѡ &`Z> Bb>O,] * `B^zgN52Q"s`gQ3\> %&-'0퐞Xa4!n^ k7b* eoy !t;J9!B1Ԩv*m!~22"JB "{Cq [VJJOhcbmn!(ѼSzUaH;@"jőZwџoD q# Cpɋ7.jӃ`LPfΒ%.*egykzY cv%YSbv1VD"!ČeJ^pqV(@ hT>E d/CL?Fj7u JT<F'/!(@y<cT<& 'l4!ۧo9ǃ/$i zr+HQ$6.`A60hHIdZ;iI\}QȆWPWM82EX8>{V#xV[ J]ȰEqC1<R7Ddl6bQ F J"uEDؘG$[iGr)fyHb!ʎNDH Z3@#=:lu=pUFSʛZ htAy#dk(bXB k|` yfѮ[-(b]qfiw%wQܑT xK"oo<̐ŀx^d.\J2Z(2Q @y) vcヨpl^,RcX9 Q AR19\r\KتEJikp wX;1^≫nf}fZXZ'#밅vBP*=J 3 $b`Ev ~ݫn$ / #4L Yˈ$)~ H W@ Hk $\P bUB5l.OpLJQjst h$&3fڻSGH<8| yP”nYwACVACE;(#6 ċ!R>cF63> g%hJbE݀5`n^Hb(]U$D F#v^SJTa! \>T a]#)6M.Xy-|S |! $-e$Ci&$b}Y$p6יԘ J MӨVD'׶)Afbkh `cDH\TT(~r^+_!T|td\ :ٯiBNBVPIm$,H`oyG,cOCPŬ 4%(ZvlB ] Bky (eHV``<1Fzk.@ROJ" %$ b@At vS5ċD R}W@ѱَ$;bi-8n\Ì `Z /`E?La )# pUecua)|d RE!GLܜZ >0;a2 X"nDjQ0J\ɕWwa,5^"nʚ`Dr8I.QJZw$H^umjAC!T"SJ' Z:8x{G,&X HFnx P Z#Z(CYO81Q'IM/9/k&jnNT~M&B7v詽xCPΡѥ1'0.bKKեV$ P /HT?< T bN [m.@T0g Df=lpYz]20E4⋨b 9'jSPT "üJ! a<؞w YhL$3L-ӞIF8׃q34M0Kd uJg)yݕX U|ve}1pbH1N\9ȺIĬiD0,7ފ+FpE 2E|,DQCp({@)kʬ4BR~Aa;UJ8|S0*U 2(1bSMA82t 4@U!'%.q* 3FvlI91?*)Yڞi1 Ϻa p.B c ٵёeVs3Cfyi٩߻C N#Abx3G/7$$0$!R$E"F@_t0t%! 3P0r@^W xB *Z=M$bbe; Z,LH%[%!!Bl[Re7Au Gd}7ta@p |FCҀC[#'E]k05 pdAD.Z/:+C*ggLD;`bR 0/Q }P%kPY ` g 97b0$JQ]xha<a|[wCZ YCBA%b,D TǍgA8(B?2fA\A~=~ CErbTKsrvkG;Q 1&V61;N"&$a IE҉DDQyE3Ƴ'D &NQ Q`pGp P 7"`}  w0@sUsK@= Ȑ~ͱ:f$A*WU_x2#rR@ P}p=QCSlq%e&k8voKsfQ:qwPBXx){v^+/AC%$$;a0ʡ ;d=% z0` X06  FlS1 #f8qgY K@*! D8Sm+ZByekB%!#!^&8;!x AޅYk~&fr‡D v[3+fYuh T$NA% p* Edy'ԉas!`>4Q I0P (wr0 Z0yVP kE(څ>=:bwhhp8!!p0 ఞH6e#\$@ k$t|9+oI@Ia;!I`hbCMΐ1P9$sQx_v` O 0 @~l>n=T}#E:'.@ .ly|41 $I<`BHi0Ӱ! i C @[e1~ztKoB8uY9Y]S@&oʢIK)Aik{謣q6H$g!Xa($,äjNPzps0` ú`@E` (p-Bj=A BIgfxga5[ 4_q'tvVx;qa5Bp]l0?O7-v#1+.YeƔ~9n0#IR$_52_k‘<^'ePsd^#.^+! !<`E` F6 ` d1I}"'UP vR#qj`C)$. ?kSS1ExC2$ p'2 y%!&NV/9Z 'P Z .n准^ô^ Ƹ9p KY ks)Pz|D.ARhzTT`TK(!.wNr5F)0@+g|@7[wg}-=mA ; ;p 7pDS 6 C ՀQsAjzM0(=k'bG pz+f('ZYe w `Y|Zp7  0 .0; 04@0֠p0>yAnv6Xe$AN ) :ESD#18 4q j 5s0?UP8[PuTSĀ~t~{ ৏ Y Y.pS @=kP :%) #)9"|Bb}Ъy&H=vLP Ic1I2C >+H Pw,ԉ+@0]Gn!vC@IZxV.K:w%J%^Da3D2?V% a78 = Q}Ym?JEC]JcgIÀmw r w0 < "@KYP K I``ހo Q2pG$w G%,\!eBi>T96I"DPfB P x+ ei!@Fӌyi@ 2\06UbaA05b,.,3-蜞,(eJG G.}C%#V+0k`TEdǸk|`|) Vi%~ 7`}X5, xC8.PP2& @=n;so1R J ReGizaUGc[R(an Bm @ 0`eUbj&B*hLQ()xa,DúƳcQ,& ?,P "hL2/f6[e&fB " Ò 1VI c$ 0f˂ 裠ROJc*6:h9n= 0;V^m%gr+,} j*rJxYS RF ROFyzI%a#RA6X&P\$|sazZN("Ed@f#F$k}+` >Hd MK5qoS2Z`ȇEx2`W xi0͕V``IP,7:N8\;S&ƥ;:a hbQjUf 1 i$A  P^-y!(% 8M  F jVS"PfXd`eާ8pHA8 /KS4#BfNBŖ4l+3d^ 2l ^ !b=4xʂ+\9|bh  d㈃jD?XS12AaRmL8zZWP0i IJ S@$Dtt*+E/8w6AFӥNo8B ]N Q 64 ""-y㾪qzFp: ߔp}dP_R2/2ycL9T0o8#gP&pڡvB |ӞC}5[Q ji…1Dht-i]]:81,oHN tB*hv̕R`.xc_o `.ȅr0xbp$T@6@ m L("'e' J x8:'Yh?K6k;`b1$i y3!r * x[a&2nAbBR!tb@!BWz7@8G䠤8$.\ :zO8 0P,7+2jDFDn.v8 ~7gO؂M@<Yt$o9`#;; 3]wP l q&rHpa3KM@kT.@XA)`̈Q 1Pw#G ͨS7(M[0 Gx1+*c`#B (6n:P Ԑ+:xPPiqH1` Idx +a0dS8-#Ddk8~PIw' X?p:){H"|y/`"& \`p (ē8Kϔ@`cc 5x0́[xU1A[73-®rҗjs$$ 22{(8,#R!B(RxfȂ>{nBr5s1eG8|]+X{Dh( L 6 ʮ` 1!cH<)'@1+\J/qr; KP?)[bO臝7!(@1+r;Ʋr-MH5.dڌXv- >H%I9` V 99HFל{" O(XУٕQ?`"C3Sh E<:@!y;*@*YM`UJˇV4!!=U;uc5{5'+c2G,QBR)0ȰVy=0ҕ!̼(@ ( x7bD**-p6hD@,I0CqXP M J6` \J#)QӋUJHdWZ d @ or@Ftg !(.a.`,fbu12)IG{5 00iV׈7dt&Қr٥ᓴdcѨ(+l~p # ɬg D )vA`}܉def*(x](dHLPl  e脊U-Е2ܭ"QԲEߍBF.[`\)C=X*؃(x(7vJc@5ŀ|0)`ؽgzQ^̊\6 R)Ԙ# AaBxyyL(UѶXyI) \H5եU'钃sR9X !ʂ&cςU)>6,$Fvf{/Hcea.(SxVd((i"C{4 ;>{h >hbbݹV%6yfb*؄_=Єq"V>+P@h&?) dC[*6`mohXanѸHR>N'm Z@B 6'Ұx`* V6b^(8k^\5sa+k=:05,@!8&t=#Ejq{ bnXq (vXJ什3@4(|Ih`5Kmqs}e/AE@#chPa{;)i #H`m Z1U7k+ˢo+@ իc3J~UoI2AW9;b_W_ xo>HI+׶~Ḿ+HO)T %)JxSЌW%ehexWh$:& PTqː`}mHhQ/QEPc4!@! !@yŘ ۶J W;d7iscD'#Ț Ոj('A uګ;ܾ=ѯJ@iG ml_v*dSd zd1*I0$a@kVMfz.^%XI`30B ր{V Q,fE@xv-ņhDe*pTYr[h9Є=x (pn(0 UصMr/Z5pz*؁0* _X9cCyF>ن`w~Ҹ"˒0ҍj*T)ª1:: 7XnĀTc;6!4+`k$h A  Mz X@xʜVr>Wb5 \ bqevCLfvۥ-V@:m*)]Z<_l3 !֬HCMPڬUk6vfoy aB,b ɣif~z \!WT4f<'f&VFL@ M3o.p䵑V|˷'m1ujK:`)E #rƆ7952u1bZiQԖ RŢC31bFa1iu3 (uB IH,h=B8MS8"Xb,L83uL!_OY54`yDdYtD sYV-H&m%UXh)s3uq7‚ƒK ;n C9C3w :2EMڜSLWj$42:DI'= >`2k3060SX<Ā5;\"${se%Q{eʀ\g6!Fզ[D+`e1Ww5d@b +s8MI~BfcbV gaחX@P1Ɠ~ %%8p"@A ,G90>\SL&'B#+F"P9vL^3a1bĂI>Xy!E$,r`MH'.8KncևK&nxVln` WiG8\pLc&8 0pINʁ 4.aZf`ͧ @7A c57p<'@fk67`#HDpI4! g!f&NpB a8-GE%:٤l$B-L!b &GyP,I:-tӱXB6ȔiBH'bPP#MK d:Eb~"B.siW)%4#J1x @ici@nShYjP)\,?Ł,|r搊h.%Da<D=\9tOv@!1$:E?+k,8L\D2q6ZdN-"R8E,[0[F 8P9& "K8!\ "Gȑ3qKH0)Hepb kp؃- =L6,69@?|"F=D+`3:ɋ`cM XglB3#FXJ^;4ͮe+D4i!uJl<0(Su _ Jo@~@@-҃$ C"AP!K#D kYD"(maΕc@[ef"DIXI?'Nj2LG}XI_|tA88S#:cd##5)=1dF-,"Ud`E0RR`  .:ٳMspFj@ khCdquʩ- jhx 2E1'PQG\R*̃C.8nB 730.p䔗A[Ad1ABd-$$2/0'C1 B9L䒶Y8xC/ԪEC (RQLaDZP #YDl@A&A`ߨpK+ɺMg r( UlAXθ P @F.ɉfWy tF?%TW0-- /@! S}B 0|@1'֓%D1@2?IAC"(^{EA.QYW?؏dAy$/8*lDݟZ0T !T@[t[ta@$K^ceH@ uB!PFMRgAom\PlFeEoxġRpFFrPxaEYIf`v[+Ol2f CAe]'C.#B:: P$L@Ù@@\D3@fD9?.c%|J?P0jr@H@D,O5)r"49ov @90#LHJ$8LscirJņ C>qJdJt4%s t@odLotJ}]kF |f@am|fW3 X.(xA^"; \^~CP2&^crA I,$J1h1xD1OA6 e’5aTEՆ )$p"`!#D}Y@u7Ĥ$$(pZDk&QQq`Zh V JDHDe %%̮hX7( 9efBZeDplArAcC1L8/\#0QfGL@Q3u@@SZBVGt .P 64LMSt]Tr,@Eh\XI)`urDT0lJC<f`JV rP4Mb X݊$mFroD MҀFXЮcAR'p8C.Hl*eA|MëûCL_&BWfiv͡C oTW 8j.Ո!v%ecxEXD+C΄Ш@P9xL\$b&\-.TLJ0aC5B&;C_0tAT&XÝ0cT΄rd_Щ A+ˬ*$.DԠJfhG0Y lWR5^Ae\ad̯ @*hfA" /A.DͨEf>B)C"cB& ND3?NVo178M -InYB ;ù@,qU)W L =T(n0L\AlT7F/~FuGu 5l]Hi WA  %/*YL=Xh.@4p0)L!(\@BB_cj- $dҥtD1bq\ HJ҆]%,F$p 8X)O~Ģ%\.[~U@4TY@aE/D ,NXp np-_"0ѐ*AYiVz0AJ[!ClJД-C;tl/#4ռPlLNqɧ1'AB΄hN@fUЏS S\_D&E5`r.{7V(b%]s,YHZ s5T H+EHYFl[][9PREq#%. 7ԬlXgN[cG%PVcSP1e!B*&0Ӫx HDC k!Jf"9)+nt HL2D7{e.&2'ʀHHFE4$Z -]Cxot ȼ+ll؏ėDzʩC ~Bm4B* ՆBIɉ: qn$Jl̆F e7uI|MM[yBxAW#sZTHu :QDcnM ΌSFgQzVpυ[o ny1ͱ%h 9M 5LT4Z~Uz36}߃!4t%b2Qd[(C\͎b6VT-o*!2o*Cp@L"V5k`Bkh`-rqBBA r xG G/Ut  PIKzڻ!AûjB `A1Ȅ'cZ}'xo9Q+Wߘk#s|hDKSx<'c `Y&gBTc]p"BJ *WNQ 0dN+| )t7y,gu@YbYZ%4VCcP|ʛ%W#H<,dYȣ腃IoNHh1 EAڣ$R( @Ȩ6`b 2˳9+!Kc#*!ސCxګ#=i`ijfĠpT %Wֳ:&>ƣ+xn7ࡘtI8(xs2#o,QsC,(V1EI5$o!.@CML"ĄL(HDf@6`'@j8@C@SI%W4ব+ZoOj3!(&c9{,gNͱj5LhOM¯8"TJpexty|Iۙ\b ߸- .9* R@ nhVnׄx8 4o&3bXc|#_Z)Q ězIr(G C7=J`K`UhL"I蹄[aƭ8!> O+orL'#`n% A0KJ<9+!9 HE@Dc'*o8G„,T{#n#v`&] +7 rWy܄@2$t' zS^ޘ* ZG Fb DG3KB0Ĉ }Rh ۃ1Ѓ$ rJzCLkXVVjX4ng:FJѥBKW#IP9^2a0 p Koa{%}@#D Z|oH)]8ĉ\0H$zF`旄P9q P!Q<@BG wP^0aU`%p,_|PPu(MB b$qq!GV.!z"SdJ0dYzeXuHt!Ȱ WiLI1ՁI.1"0z943 z pl{M"D%u>&o ~3*0;GH.EI k@*8|.!W h!U0bZ(׸t dG}BVd$CNC, Rɦ GАY#,+.5 -_BpxT2!!Ћjh >2 vV 1V>a~_9kҤ\mkIbL Hb #*YQENJ9 KVZDT<х"0bTr7`D"QR7Յ?Ɠ0$u3NP!>KFBFۋU`<# vDvG%*^[@,Sr`8ESTzji:&ހ az )P@2/}IA d1ISҐ3]iY% SfLiGA 4SfR;mEhK1ԛf8I Z!=O)rA`7 1sLB`?bv5WT`41Z8! #:g!TuqyW;lw`ЋH#@?"G0   (( Q,N@ab@ a#ظbha-?ůKF.E Jhgf)%6f0ބ4;d+H!Pz!W\O"jhRP TT !!xhdi?! ^Z#( {.n$At@" z?$< OiHmB2FaX #F (="{ !@z>Z$vM C? f0, 0yNNeƢQC6|+"! v:zőZRpAₘlCRt ΡN(etA|mbbT@E 8Wk  h'! : uB-P1JA0,bv $ID5`Tꮂ`-Y *Я Ñ'+$@!DQ'!(% '/bglf: wZtlM|AƠdrOzx9aO@A0W,! G>?BeWh $rYa2eB $@<$!B|aN`f#0#r | @U,`:,Y7h`4# :DgD+!r @l-\鮀:jR4i6fh"Nf)G/jIaPL2(?qΡLLP JIIo FhByԬN)l26t@,/?(()vaB8hQ\,!>q[0+Ou `-AjbOAzB#&'on=Xs=Tdn%\ /ybZd6̀, krFf桫b`I`R33 aUcJ Y#mco6rt8aNI w_ xsqywa @ #B#n(*"2<1B>/], ?LS|7!JհR,, . l*(H <' :T[2rnaM]D+@phÌ-(J4 it/kQڤHv"a WvwbKj `qUtSdK(R9C8тؑOxNg0V`ye<" bc`mvzd >A&:ʂ.RAOr!,,=BafРww !/F@* Ѷ\`A^^/O-;!&C=x7k r̕Mh"1NP,3RAPAgLIc n> g$RP@bVM 8 8i J9"6ףB!Zeaarv&ͥFtt<7!P;4 ;aY?Ќ  b23Ƨ`a "*{On-d,#Z'fEf0'! 𾢧@hq%1Jv ($< .J/%7堄$;Ȏa4ܔ6㚋v8=ē 1e0 :z@F!9X k+%v( r$R"(|7` *)uv 0~|WV{G|D  e>BÀG)'>"(ujfѭQlRA"5Us+a2Uh"RtaA &av-j>k!jel:!J8Abpt^H' |tA\+!䌇!Lf<à+ax\".;T'v*oF+Y$u4{rX+ #J}hIZ6&B[LwiOR !Cp2Ol;x8/778 Eb.@T@'LA 7W :{F@ HZ!hs DU|BFbJH&[֬Fb>M B\Wŗ0IUBŊ!u b1@V߾c$a I|(VX[_h `̑/#&kVl3&U*t)_}NSq;Wg"1B:R 7M ĵG47JD$TӓM̓'O/ҹ߅=$k#M"DB0M|7dE5_\ȁusq'ӔZFlt 07b+r@YGp4؅b!TA[>#Hcƀ!U\q3l>1L3}抛 ˞Ű''$d} 2Ȩ׋z0`&"`DG$P=U'x '" @1 eFӗYb|]AsN${>VA@UG؂qOx%UKu PZ%Rev\p( pzU}#& c*iizu%8 .0, P QeBEB"Cjd&9uC5r#2p b0P\-.! 9f Cp )~nc | mq gȠ:s7,"@Km11FB7'i!<. mpIQIktC4 y{<Jk'(F X "@ cQ1 [X4(IP\u KHmPĶ5>vEAPe,-seV.. 5 D qeD  ba4 z}@Y#o(߇ $3;P#J!B"s <#U!~X :{&Kk&8(cYx}03l" Pv b @#r- YcA  p:k } ?d0t%!9"qb, D 9s$B UmF Da!Ѐ9 /b:!$` p pfWg' W_@ B @J;r$`#LA^a<"0P_sj~1KB=ԳI6UvBZU @kjP f h@Uհ5XЕ ȇ Ԑnpz59I\C\P7e6 Aʚpna B1pYe vDQLW ^m" Q0 Ю be() 5G` psS#rt#=-b0.r#|WX0[ zc 0Rm;}+" !Qvc(,`,f*:0 L& ^8E@/P]QZP7#8w 3`+e. 4IF!+%= 6@/qp2 a0AZܖ9N/&=1 0"$ s`Cr.$7%JnZ>"TQ /P@n2'NQ& jh5_%SB$Q|%@m&a0'h$v1oCaldq P,cQe@g.r""Ip"_UJe[>\pIB)  GzSI@ b!dqFU@/ѶP PeZ5[U e@ n mzA&R,"H,kPLĎ/\1" '@F|J<}@o?r 3qzѲ7 oc t6 IZ((b 6vp8` +,AZ1 m!;:3U[7@fa*[M-->RpzPE7dJߜ0 Jq[E ,X) ذbhQr/ 1< ʰ5)ZD"'0_")~d8ITÄ́ 87oL^EMd~{741 W`.,m= |'c(3 Րc q\] kcr0AѨ߼ QBjagtQU=M/ .)1 yPq=} F W8 ȷTʐ<1ifLf%FVJoARh%,"S PpAy 0 MQ<٬+8Z k ҥfR >I)՛c22"-P7 N|"Q2g Zm^PNbYnX6q:UP7ң(\: scZ1P`y^pN{b97A@|ŒL0$S#M!+!lE7 mpm2P!֛l_E霋^FB'ҥ& %\  轳6r ᅬR-bPLpnPڌb ćzk:uP(^BP^uнԐ= 5V=N`  m@E '" :£`*] X9o1^[kU#HN&yv6rsiT|UF,<"@V3 ڭ)I"r\IԠհ9.A Nd 6P$@ ńp@#5 T !u+uJE@enP b- rz. N0A8.AI0 ,< caP *k^n Вq3F]2;Deղ-ԐqI -- Հ R\V@/6)h3: Plm@ (5,-1, Dsk"p yhK03ΤY7ߌ|ۚ b V T%ɟ) &vp`jf|KI4d ` @̞bM#0b҄ Cȯߋ"<c52KNdQCAj`RPG)#VB[41P@XaIVV$ڳXq`%:o [Ba! ع :IFQuNxfMA <' z*= 8 I+$DΓUI]1#q zgQzAFIa! AH$&~63c8 8tAGgbP{*F![H&Vtxa֙h&: "7oxC+ cQ@8/#4Tt .7T0`!.Pf"X  $`؃囂8OZh Sr0lњ.2W& \̂$@!f!YBѺ&lxGwVLީ48鲗&,=X ࠟ~86dC4t1rXdGV`u31{ì Quwd`?e6V9|H1hl(P #UTSe oĺ`#K(\Ņ(h4BJɓnaR(Ob# a%3^XB K #I@f@d&Bo^-7,uf#4ɔB$*E ttOKڗ^ a/0[8:E|jFgn4(hQt0N ePe#uZ ΀m01,N Z\%L#&ق :avŨp !lF k0#r%A@@x !`)-կ @<*p078=EsRx & fkPAHޗd~Kh+8Az!F\`$q090`x&A b # D9NI/~,T!p$QC R/4`B#.4X敭HZ \4  JFV: H&c j C cT@\_Z&r0" a(G9간7[ !D@W@A?ĒHB>̣ XA*&b8 bx# 047z og"2Zta ,ЙlGEXAb$/@5)]i2͞M=n P5@P xC@ ](bpT bxІ39 )" # 0 ajD!3PeA73UXwp a DOb"X1 hAPl쨫 IH,hQo A P@fA6 KC"X(i!PCTh$4t#)v@ 9Y 4ƢǧQO)`,Bg;{v  XHm2DE:-\ЇFr@+Pds8i+"y) PbnP dwo_a\B,C9:^cC8 @ 5jLjASW`T ٰVPH(b%r42l%l>Xjo 1w@E#qd  xutnV)N ¬-tb`5F$̜@n; BAH ZhiDx9 @Maw^px}2ztk .[C aBF 3eXX  lh˄,ڰRUQn=<,:fg($T/%n \,t7`@^tt\NhteSl6< H8ٔ"V&|0'4 uB1i`M, ڹ/LC qFfpݚCzonA0`>zK9>I4`:ODFOF G5WbXV E ~DxBB"dx 8@b` Lc AVЗVab77)0 *R.0X!r)踂xF5jn Y Y<̫b^ *1t[A/gzVh  xIgHشhR{HqPMiXb`$p[QLKх>X)gX DDH @8 ٝLÈ*ˣ 2 9@xW?7j {7y 08!Q@#V {BQ3*RDכ$qÀLAch8ȿ]:l9``9E Iy EX{PxP@SxAqؐMyS`lX-ba6àz: \,Â0bsi0 x@HE:@Go̱{|/ဗxxc, sĪQHED- j ˈܒT8HT(+HtAqHlN<L=8+q0Ȃ_0@Ă@DE(d9x)7rA0 PH5ȓ0 NBD: $bI6/4/+HX |xht2Yxh4"{Ä􄟂1J<7ᢊ`aVJ&2:؁8,[0X5qIX$K,.2syVpHg7xhchC>@sT# ɠ홿Ɓ iq^i." KӉ@[?5Mdh*o I*DࢂM#q9 4@ )1 Q $h5͠DsM5aK܊ ̔O@o LR"10"ռ>ぉ0 ՚hB9dqK0rȾ>2T吀/` qY1FH"%MId6DE:8:rVή EgX>P Z(I B!"ej\:U C@Ti HkB,iч#e/(UD'Ԛ"CnE[0z\6,B*0(7XD>xدi̚<{dk2r٨Z4R($ELWa O(* q`WBF;hNRy-Z  !zbXXk(>po !Bp$`OF0YPEꉻ)(D`.٬t+х>g @JD>8nn10{^g8.-Id V +rYR6NÈ>55pZ  # q-y>z/K0~hL[N  %7oЂ.^@F:yX%Xfqpj< \؆Vsj_4 Z*/ kx0Y[ #!Ӣc]dhDzڨBirx 7l$Ȫs" zőxf*xY@BSi؝ mB":*0J؉`r@ Jj/z:ȅ:"gzI蟙) \OD.th.(i1z%a LAD, >h f(0܎n(OBx :hHRth9}BF v`Jbfgv2zݟ~0c,Ox ܯٖ9!5y 7Xd}'QPj toeb(fZ_NKJخe(XS 3M$`RyȨp (V ysD8q ?}2S?e@BoF F*XO'֬Zr+XWB3 S 뀁TF'rr"@NVL04 Cqbsn.-t!]G++:UeQ dY@R밸H`u,qYCaAz^<t`$`C.XE*Lg` C^Fh jy i,'1>!0^2fY%X<4 10 _\Ƙ<:#QUT HwJKD",(GFC 7a4Tu rढ़c ( KD95tda [́@` 8Vx>mDBn+GTuY&OZ"p&SB@.ApH;b ,O-'k4,APlBAŢԄٹ~C8<yvA.`..aI| XB+%B~UmbhX0& PH ԙ\ATHޘa&T(xUnr$'K)08@"V?:/  jG <9AL K%ܚ]@ڗy&5Y! WN< I 7Al X\-\Gx^nʤN B2h}TR GɁ|C Ppa4XGBA @g\lC p1tdu(`O*bhVA,!:׻ܫeg̕-\%\ 4NI'Є"W<]2OAp7.#PQ@qGIȁ@N/`l1?BO j0Ed,|b%OPp(-|PU%_ex$`7&Q p·+1l 17bՁX?pB/ןe2cLGh5mC\EZcG@kS|l6DD0%|YA8L4U)PE5 EGT?7uA Xl4V,N[4 &<]X97?]; |]ɆmdElk˓TD"T%BPN |8f9t$(A*0*CDIdD,60)$mE< ppaB 6tbD`!r(KA'a;8 %upHB,NB9u2BA%Bh &F`$#PSغ/SDZnCb$H8 Q 6PB/Ffa[O]lvY1S P7@hXNp&) hKFf `07r|p[e S~a\PP(7OE0腧`!O d9ȒoXހbmڐn$'@PE"9#ؘ|abp-ńֳe=`dK,[$!&8(%F aʙd-V pYP`̾9&08$LڍdxހG:\"3b=n@HҒӛ> \:kF3?69c` -!e1aH0P%kr%ֲC!bl3*=K/`-@͢Q ::8o=0ntx#.A (LWQDHr3V9V0 RT $7F Szu !BتidX:!)L @C6C:t M3ȯm( HfL."zrʃKĮ5Y0#IEү0r B@ c\H8FV?bb$A[?:w]!T`A(V8q)XdFH bgF@G>82EU! ,JP 2u`D ~ÆA97ع]b$ ,XtYsƒ,fM/o;4  nr"^UBXɪ+Nڕw@[etr ? ւ]"}ٱS:\;D 4 ݤ5]P`. su AS%A Ҥwp6H=FdpA@m6{`)`:r#{If @-4XqP},pM$QT C`A|rB1"Q(LA&t$hCT_pSM䃔ݒuNho2@h. [0V[KNw kNCV7`Q v (1`hSbU?8Alk t_^tqhkvAG_;_ {P c%h,ATHi]6t)ʀ1,6|FȼHj#kr!(Z|(JʠJhlH'$ PG-d =Au &2B" )"͗ ((F8(1 FWZzhƒOM-WnGHFnRת A 0jUM"s"=p2#ۑ /#/72i] V>[Et/v 0^b>XEH,<ڽ|s1|$5Dc ^|7tC  R2VaD  +P$S-6!>ӠD(ckm@+gH)mn_̈7!ш_"CN jV-0L35qj<5u72X2 t;@aA-,p(cLiD-/ZAP-g9{w3 1"g.VM \` ]c`bvΏzHBLp& 0 )Jv_@P[DQArNnH@dvN 8We#axE,!{ !7^y"GfLw`lYfWD noXV!)͝(E> .K=X4b 'kX('n!%e %IA]R}>M6UT%rɉKjyҗ5#11)A`sk;MXD(TnhS awQF ;e1pLKnDjdY&sPe(06я@xК)(aD9 \ w)nɆ@h'2J׺-fzX[sKC-EԍR dopdѨAdoOyՍjb xx''o4! KmVYˎʮ 6M䓝% 52a9 uJLIMR7H&[9;@-Oł P}Y0+/9H:vFGv{'4ߛ0#oqS$H1 2M܍gh t2JBd@2e\W{\bF/Q̝"A)fxWȜrPegΘX1<7#HNFy:Rmn 5AZAPVX";k$ضxAvvxj*i'J5{ @-zf;t&3Tu\L+6G~Rċ@[LQ6[zA ] ^%P"jƐ{{7PPjVAYU$U1($VC @Z@ z<~v`p U ;`k,V upPT~3 *&WuW79,2r Ect*B_KaCpr$DuIBT^K%WuUU/Lg2@ 4Ap}z``x `<.!h7g\#ef  ]`"c\w> p{%h GՁ{2|5%h^0^ƨObUtx#HHڐxr ssb`@s5D8AefnFkkP%.GCs>2 cWnqJ ا2ǐQ j8oCUmR5DYvC/Q}dvQ WiL#QP4   o F_HkqF)}r)+;p3 j [ #[ؕ?U فʷj鋂anG ّ26Trnv2CXs}+* omu$VYRhg'p<ul$\a]$aP)Yi;bЛKjt !KS+^A]ʒ ZvEԂIbУW.b#f{UvFfdg 5IBp3`yxny9Y2x֓:ltgIT~wA^ 9^||v7ee3yI2]fu?ǃ(!}TH]|*C%ey";ա.7ILs r@k)FִffTek+6o p G!֣At)I8:*A CXA{I7FteF7] Yp%Y؍E[$w7A|`ݢCr}xbp jfof6 :70r~`\S p~.dꠡv~j#L!&#2ϐnkiR)@{)(Tz'-&^LvZDR9(&FQ&v೶of)k@)vƉoS~=sl ސvN׬qS( A7q s'|;Gݣgf*-Hυvcp'CM}O{9DI?i.bsܧosYz[) 6)0ls SN01RlSOG2p`&Ib>:aw|kz~5L9=ib7`tĴ6*XFAmEPQ 1H .ժէ̼QF\5g#h+cleTB/ x`@lҰNsYiծe[p%ш[]oem6ɛg۳si+f3a$3N\9x؇C;?iҴIm<(ӅNHN$T"'2SU9U89a|]!`Ԍ4j42a>C2WɘE~$UXGil\0ő:zd dZ#Lt魩94Aop{ 0i0 # 3]B:΃UZa/1HzQePGp"gF#,-)"Rl`U9$N-jaZl*ݝf))EM^ D5 X&bNKJ163ũ1u3 [>cX @`DHX`"I^TRA$Ua| _U=U-UmD6Uˍd=f"G&r7Hc"f22Qya R3;/YD8=, +V䣌7G1$Io^8 Bs oxC10\cvkP !C-`h,8AȀh8H!&6ZCQ 6ֻm`uVBp4-v`J{oӑQr$tId챞~C t01"3tuM1kI@q-j 6V"*Ґ@8#^Zc S"H<1U91Q=;Sr.W& `CI\\$@~GW@$A)87V=x-u h|srįR0_e.3Rjđ38LVbD&,VMa{;<#QH%$9mnMha "ȸlT@ 1 F9m>CnfZdL0d-]n,2VG r1 *g׹bLgrH^''af,Kp0|yTXG=G {sMfҘ!^q#" $L$2\`RZAad((\w8aD3!L$kd8654+HbHDqa`=v,Z@'LmU]D ޜ:+I$NϨ+GǛng,й;Ts{߮`FP<=ʰً, + V ɋ8@pelt 5gZy%U.aa ΝUX(]^#'IE/R>_/7B@́U{9Q)9wT{>HBgz)f>bHӮ @0b{1˳8S> d'mz4†0 1W-1g#HAoB2%:b DTm*K6B:Ѷ2ێu xdrrι3s3#XʰsxQbtWD>PFmk>:Bh ^rry(y(ZCJ0 Ǹ829˞ꬔzoaN  4=$bq&F@1I8Q0\H-c=8'K&3!jp.,6XA;\4j$)taAz>e I'crXb>rFV٧%x dFNFnF`BG(Er$t \tIc O Բ'k:AT:-z0SǓSHӂlH .†l(t(_B[l|JFHxJVNѠ"3 `Bx*\ MD'[+zQs A9`2 1D ԂcИ.U!2"k71e#U]|;#6V'$@3?MqAo,6bX`b(:QWzrs7h..+wRn\VN3-M ́.F!H D|6&{L78ps!K:-:J]S#[EUU@K l;G %HP܋U_T^]E?h\}IQK, 3xy XZxy*J@5|ҸrJ/V0虞X~d+m<.k\ đd<+܌.m0&QAt$kXQ0HäS#S*] #ЁE9!;QuYOUQh@Z%ۤIH:P$|0~9 (xP=#0-y`BфR(qC`Ҭ-Ibt51%T\@+N챮|2?(O#,4Y56U++\ Æ@K-Se*˭T?N@K>T]x@.H'Wy<{†7k>Y o'i67@njEe9ڷsέbIzLs t=A~.Jx~jX62 j0XX[숌WJ %suPnhu3GM 8DE庇505cE<^5qh`&Ѐ$p: O${}ᕔ>Y}aB]0X0,0sNƋ")2u6mKত6o7  AWY u8l`lCvU`C=UD]Tl)܆X᱊D2ae`SPRuYt#+ٱdfjQa H:X;\@\? Z9 DysЅml^F`BV0k((*FJqJт.-8ᰛPS6m_\(jKA$P,@$`9 W8^?N`"t3\^F` 2pYlP0+5G&^=;;F)dB>2 Bb0JP.^0\^$jdZ ^1 eœk^I 8Ȉ KPІxq߳L\Pあ|ew`tI})>Ehedc&`^8\Jh*{3](]N2??QC6c6n*,b_uOtȺxOXlƨn68.'{bM1P$2 B뚂<a=iK[(Wwu.\Nd¤@ T%\O]PWn؅]qЀ圢`#_Es(#';Ђ>Z8{A W;P$y$^40#P'p-$o.XB1F=p"Jr_zZsȎ8 =A7aO07878FUXpOth~t&Gpc k?Ed"|IMWw2ExcSEF\ +#fy0=)tcB@c927:.`   ȇX3t$rЂ ؎:%vV@n5Aa Qop b(j(n(k*0VIԂeGWǏ V%3YVրVQ׬?]e({sNh*͊&.{UyK[tbk L^p*臬'EZvW/PPHwQMǓ8*<{Hvy>G~wwk0` 7u|jUB\ ޸FPie ƌ,x1V!rER&  QSKNcS&0QZR-X:$.TtB8᷑noF~#p%[#qVWn(Qta,&MRPĤ 7d2]P3BQLK!(&TEld]6Xv`eʬ57K( r\JKE 1 (ay *sq*E6LdULi q&h SueaCY`L\ xsmgbr8h+!Gudj7!j<,AZE_Ur H+JRJ6R0VNJ[0|„Q-x-,%J_PqT\u_K,Q9u8:ĄQLq\V͒ބFI(䨦G\Ldٙ`VM 1F&|ft+1Y|rݠn̜RwoGiw=ڊ%%?+"·\M kI - 8E+vd,X`KM`SMP2qSt8Y(.v /jS ᳕7 uF(Gȱ8 d^z2hC?ş,fkQF6<vIq7㏟X>Ꝗ 'Fv]i@+0O9ratEr0bȏ\2ڜn-i $` x.D!a[hp4E\R Pm@7p$(b8$`!$,oBClK&NU7IIDft 14>\F2`+$# bpfCG9\Mړ:%1-oKb%Ҋlj'1[j`' D y Ș*\!.bT (DnCN(3oO墔<)p*ҕx )S  (JA^(7Hah ŏlŐ(Jj`t#ŬRo(њܱcVWʟu)H$r #x ~l*|lpӉ%~ʞR` 1=53tyC-zA)DzF$dWNnm+KZ\LZRWQ&I, )A*&xpoC 3 o$ ,$(Sf&s&h(B`E/gḯc-~k{6DBw8LՖvSOOI@bm|ڋbCNp (_dXE+^9c>p9AWac\0d:k' K=3 0 Ɔ("-B  -Gy a5AlepPd#*h>15R*.e80;zd?0܁_v-Rb5jO{C@oYG?OtYбuWJF+lD&q ̶a!%3 e )LX3Bd';j (b Y^c@ֳx9Rcu|q,H 3`cZ 0d87eQHţ`wfD"Txr(AQX5+'IƖ!ZHlKJ+*+tg+;M)ي7p m01df *i@Y8[>/*" ЪuFLEl6 I鎕CzJJAp!ב)*$bP : ~PjHEoYzp9T8θz$+Ԩ12Xڔ%=4$0'Q]x#+OPUu9@ \%ES=I`~E-% iA c:5e j>.PF DcdN-\8g 0(-ʇa+" )()+b8 |*$1 qC5/^~dR], HP+LW;;R>XflTf@t\od XJ5ǾdT(,fQMx%HXŅxa\%1XM@] < -mĥ) `MKӁՆ5NR˸EЁa`C0 T (58 @O=Q+Ę@V|'HK鞢AYPYפרGO`BxH4YĻYٻ $cBPC!BoH<(?l=mfdD%1 I@>P]Oz$r g˘B,@ EA|BI7 8,Za8D{|gqxԄoi54!w!0MT eO؂- wFJ2@d@QڋW- rf-N ʅ=66c5 X;j"#B<78=X Ș@u\Ba\B U{|t\:)O$-'gC\*JQ20u e|/1'a;  r_| G)a~ 01X<-^5.btQʣCA`a_~X%d~(@~i Zə(c֣UVXC_" Ȥh\>8 %BC@[@[^A*Ѕ=àNT61:ʿ~eB GBT%b"8? A,7 @l]P1e "kg4*xi#(:hFdtChtHBL] }Bb6?i2"e"xd$Y%^LN%@RJJ"

H3RC}C@j <7|A(/Ċ$B"粊u*sd}ʁHon":B*XQr\XMh$PfG@5^0e&*@30Xt,[x*(01|74AM8`@2dkPIiAP&# Gzd]@VpKN{Mz,xfYG%1xel)"=WDq_}9s.jHC]!! uGԨ^ +Zx(LX4.yʋ؈hy{M)^rIIr) I'1`66L 0I/t.XIxfe4erP$\kPKPwJjT`Q1`U37 6X_wWub$Z3J!5zܵA|nJf6wZeFbz$lbT򮝪&&.m36 GWu\ohC%9\l@$::;L Dlrȁў`kl;x  *2 Sqڑ܂tǤ.R)@ جlT}BYC`a~ޞ_jO5Jx 4cv!xĀ OAXGx%H*< Ӟɋ7R$E/@C> ;Q9KDp@3B"AUTmgDʁf hDx8'D]l$hַ\ ")t豬(CLaLMy6:(_uNmå^O''1\O|+\YxᙂwR CT'<@4AC"?=C";23г/EdC@m3$hn8(t.0@p~`f*Y5e=0 =($s30glA}7?6XiY}e7Iw}4>7|NDl$O.P˼D+9D%l|#է:'MZLˤ^İ#:ȑZ.dML6fLyfK)`s)hd 9SLz :/ oij02질`p}2N0Λ7yxI!Cƈ?tСO4(& \کcd$*(#OIO*+_Z1R?9x晽N8zsK^8Oq,E=85%qp1 @?[atb=m[ G%8,ZD: €0:@7D@V&Pf " "K>Z)yy X]VސK؁vƤh: $WJ yaxdY6p22 0fc0*\F'ꬳ.m,:㓺]87@ӃpaV'xc9xS;83_me = =`z\ϢHKF@⻡Nky @BH*[NB@2kXc 0hX[ dop4LCZI-v`6  Pi0%8!L8k|%AB70o1rh70)J>d|_1@2xd.p`ap2ٌt86sL 7NȌ?zm\  |!:HLh|E@@i4 T*tVc-5pЅc,00wEBIZ$# D߸iXrh E׺%WlGZLWڸ?cT 82P10FQF%"V ` 1V+A"281 787@=oBղ#U9 DQ5(H,Z#ȁ8Gh@󦎡4pb-]o@63n1u0Ft&HJtD,aG;%t@:j_R5x pU$Af%'}7RAaoTxXtѤz-R D!JZT',#),WZRdK%;.UKX?OL~L >^A?k*GӲ%8X΂O)4LA$\& v3ݒę, u3K<7 {Cz!91]8e aBE@T pтFxO>@K"&B- j" Y'r$$+C<9i+ V /PއI߈Cg[3޹7B*$YY*QKbdE_FkM:.GL, XR+9LEa 獪YM)&20# QGR 6tk#I$!BtT S 1:<0yT'eUY_ [k'1xSd+!\^_Ȃ ´l)tHBfk-I*L,6Gz:F0^PQɧ6c/@`&-nCun` 0G hz H:A @# CO` ZcA)(A?nlZ"W]Zn* A>!~:jH,Qn!T$F"L 'D#Cn_(:_~ޮ _BD'>v4e>z8 ,je0!P3@:lskB@ PqB06BP4H`Ggd~p*S; M躠 r:d"@J3:&R 8ѝf+)'6r )Q wN ž,au^xHM$ȆbͲ%JdF*%@?$.D~ "_D-B]BBt*{ v \#LJ0@L\R/yRM^& joKx$` NI#jt XP `a4k"!BM5P"͏bi4::AH[!&6-6f(Ϊ.66|F!6?t .`,̉?n\h_v&(l zb<$^*@$J(FS܈ '%Md4H@Oid"f1K*&03 WQMڢ~,&F6hDt bAb dn: POb`,: ގHbG= \p䷠vzd ,- l\  _ IƨG횺b+LbFN9 ffM9pH.G*ZQt, Ϊl5&M x Ag, @ag"&c`.gmjh/:cW`X;a= H ZLs"JOH<Ǵ,,_*nT "C, ^ tpBVb$HaC+4%lP^G2cQe(Bz6y D4# tiDx=04,bBBy" S h >/&,Da:j4G3X!Rn C lUԤ65ja[tB7I&I`(G@Mjh p&q$%Qt@*,dorL7$BQR'@N]IPGse>M =W xzº  00Z4'{ # Ohb b43zc(gM,JWh5@ .>Y@N :TZ@h +F5t{$%,pxdFoTdpFDpH"(F(I!u%&>TsOsK? N{sY]X?#r==7΀_R6lw,vΆ"@A5 #L #Êwon x! DKnc(-@K.fi(UX X3C hɯY#:T`@`>Vd ∆s#N%g &;_ jp ž6Os0R荝‚]$a2)MIa3(P$FhH,z_&jqRbcuB¢+.Olu]s8mn͹fb!4` T@NdXg0EJ~3ұ@cjg d4<RSk@ &:L-Z!Ɠs!sb؀$\4o09;hencGjH{b ́MckEM"hpc"2%>s.udY^*С9&AElse7] Am&b|l*Bꄸ\=Fb"o! h,t+[k(i( !E5ĔD콈݂GeqE]e@o,B.nk#P`OLA{ /nQfkbW0FAS&xoNf  Fc R#lӠ 7 Xl WA<`)fvDR(߻F䄎(9!,AB9fҜ9)!H7K`8682ȑCQZ\: !#3h9.eD &ixu%ӧ|ku(?=7n,͎PZ \ڊF$ذ놸%b["!ɛ$,8̳g'A:rE꼩So]ܻ@'?${qݼ{O FLZ@UE \RxB6Ԣy~LKb 0L<,ŴvB )tIOcDxuI#GRqy4!$S|!!4@MT?@aD-ZO@G*<|TZ`/_qa_BlP\U a8@y9_#<:&K+<~pЇ7R'9(C\j(ȥ6n-hk{lheƜ zԩ2d'C$09hL筴zG {|$5 AsqX"PF)~cD^R-{lG^aGL2%40FT0ƒb (l@3ՑW,Jbť/ZrPdaNK@)XIQM] ^YR\ueU2ZE}3ox|t!ݢLjXAR[MtѽN#MhD!brrX x !yY#f`8mC7P3g K;)V #p%,7dxpoh1NԴ +(8"IKĪ/epA5n#q!-Ћ3:֊D" 0CZxd>@тԬ5@`mp444bZj!@Z`+ %+IGw840Aa% u- "C$gU%7Yi\X fW)h /H!)%&XFo8h$ oޘ2!.RJm+!Lcr`P5ReN$BaQWS)ZvuJ& 'VCz KX.FWSfyQ-7s-w EC\y(´`#c]I b͊+mIeđoB `$؅Ki [`ZgαxRc S5jHrpI>˨'":`?A)P#qBb%:|9s=VG0wխn36,Z@1nyd!3viBDrk2-N 4|~oJ" I@橔%E1$#yi ހF*p`?pq^haND/ps-V>|[ZQY^r[0p<`&pnZ]ИͨT3KЗ {gQ#0" @hS*x4v)5BPb `Rxu!#A uv{7Gd~x}X r87E9 rtDZW+Ӭ5T6~,CԉW#w":~CtsPHPM y 0Dq<SFUL Zvcf; haqmRY}G 8 krx APs'Lz';44{vIT" V-CTgڢ' -Z'*O 6*&-ftחB7F"(F=Ꮔ9(D rW!!l]OT.%%5";1kh>&H>lРenAmE PFu&VR1G u] R0gR G } @ " k?D8y LD$%љ6*t-bb2N9H4Uu~ 'fM2$9BQ*jxDVQ Z}n}eJ3@ }y =a9%͉ : ed!Ypyo {8Zu PÔq]k)pI5C* h+W?@qE)P@f h{{p07L as6WtWfBPE"%b1V(X0KfRIh $aVza粫'fl$iJBى(lWuH8ߑ8µDjXonO AI=}\Ġ;ٜ;iR23]REO_`z';(R@U\ e+\ ޥJa& a` t.a +x'8h}b`0@Rj `6CʡHw9懑S*AZRX;"*ײ*! tpH%4l"UDFXE#[p<sQw0P u"e;& 0DT#\b3IIj W1 ׂ&iH 7ER }-w\Taяj.HGeNw$<` xcʳ# j҂Z%&=G @1Ш \J}dc?:8v~@] 0 eь?DN  `(Q.qȑsl}&监sR92LjVF*~q+r`$$Mfs͎#v8†%ؼy=^2eAaSKZ-6GY;M&lY*^y ~aN0t}U:ysW+0,I"ӧ<RY> uxcPM:)?u/襖Dn޽}z8 4pI xI}c}@I;U e'9QO{NΑ0F>ZA#L#Z MhHBKRi )ĝiR"qcRI)d flg!t򆇰$0t'J8c:9 \L~ OK$ c>Ц4jӥ@B ͏uRc!u@&6 s* h ! SH#$ b"bQdo4d@ ">!$x#2#f:=IAn䖧vIJDlI>x' &c)6 Y+PAo@c +2c&nE5-'W($ cnR7,~nL'[l1(M^uMܡ_5 aNu f:8ڷ#Rb ZT *a8B%aII a⣊ KNJ>Xc&0JoRqd(8Ҽڃ`OKT e\-VDf)|@%N'^l0|cN /KT\ :$ROZ9'OdB  ,Yl8s \ԊI)FK1Ш/*nh8ܣ ![ws k `n" d~GyH`a0%.A ق>Bi擐U#HqH&0 A9\C,f(\ȅt/yJusAz"B!a 'ɽBT kQuZpviZ  ^(!ܠ0XB]YPI}AWYČ1FeZDA†: { ArǸyH>HSh|4;@x°!*t<0@,lN 1 d"  !Io@ oL>&e+ yqE^QŬgC|C005X1_ .1aM`$VЅ/WTx! Q@n0ay_T3ZSf*# D_Wo"W=D#{NtLOx NJЉ ?xFED4s`IH Ö`1Ђ? P,A1] Za.agG^Zb,1kdA'(FÞ0)FivREHwA0EVef7_ Gd6ܔћZЙ1og[A'f$@sbQm\9h?lIK_D׹KDOuu)[X ]r33n =q %HVo~=`4acceN{'!'Q,Д:Xsx/9:@fCZ:67KY cʙ@5h[ {s8 Gyt#Yr Wt=3uGZ0I>i dHԗZP. r~9 a byD=$(>P;>pjI  cP*@ɞk 0:x x1].Llp0B/ihC+Za @SJ`z̫ 30 (5n xj`v,@S""'I8$-jQ+ "#8KI͠;#I8 ѐъsĩx~.`5I.LDKlXM屃2IPeDԆbCь!#@(ȿ'5> 2Y4Z2 H%@cë*HJSsp]C4ҡl)<"ClKP j>**/Ѫ$ UXbYbh 49œ|CVh 쁂 |W=:@XA.Pw7ՐW@RAP RO 7g OOZݸU 5.6 VQ] ;^#QcQЉ fQ+jo`hXtqL(pe&L82|7:DDq$pجSN;,0!5z'PCXi3 `* 5A5~~p#]a)FIIIQ U 6@9xF3FqZ؀ Ӆ(F]he63H,X_xΒ*mU˘X#WH᝚`p۸é[q D{cyoxyw ģ}æ=֛>1x6̝MK#0(Sa3@&aȆυ#B Pⲣv% N $T¸0 PK9خX1FрVIXg[8U(xMPMl&pA7p_ob{+j._Wɋz.P%yB`4؁ Nۮ軥" B%b.'2"`+R]#i8̖"ddܢNq)%j8^\`2|+1MXdi$KtmWRDP$1Y@ /W9xCT讕(hFwx#~hZ|ABy$E`DQP51abU~Xb8AB ^WK@&y 3 $axapw% +K ݲsF)8{Å%lj [0RVf xE J:V(C4Ly55Y(8(RGRDx*-0x킇^h5d`>(VKʇQHw{Ԑ(>0c}^M:,ApAM0t UwjI#83hxpu- w^Mu!o ]5_4 ) (pĐ Kq21d jxE}u:*\P;^*=տ-c`*T3~x0֔04t9]@> zid|Q+mU zEL EN HX [! 0 \5`BHݞeW?c@`zJ9K*<*aVpx 4e#aYq5X6n *4#ȋY ^^%Ȃ .V8qu]+*oۉ:8;DHbX@\ȯ,:$w@N>> Q+4ѼQZw'FH fM BJ $P EWL` PJZX~P fCG;J53s ֈ\E fK H݂ ɽO$z)WW0"PO,^{ hOYI:K,,%:5ȊXo qNĞwMJ8q󱄪B@ 5 ',71FQ 4H'}ҁHQ`}Ok`]J}n_dI1F Xy"?Rk*Z( S^.cɐoYj8@X%zuLW%02|kucɒOߎ2rB9, F23`O,}J_O?N,ylIСK,㜘s4{f[ot16!7[s|շol.6fРa5TXXRRoH͎Zlpf\#Nk{C,yr@'dS\ #sZ2bMWo`nO4^+.rHc~;lbk ґKKq:OYr-O h$K3g_: 9l&%&FLR#[+hK<чN<=S?!P]bDWFld<r<9K\]Rt1MCY@\-RB mrDYSuIYPa{`)gE e er)Ss!pP70Gq%fSHƨEwQQWuuY"GQr@7Ys5 F*v͑+' t6qM Q)K,w\PvQIdK@Co.YUEa1F/3K4 3H`d4o3w0ɛeMs=0ZAY Y@ f/G7od@5]S a|nqPkXbmrX 4XEu%i%wv*4W^jU7ؖ,Z hoy1iJ[--ĉuDBgob]`6zʔi+XD Yಫ  V |8MlWZ$ko;K pb@@0Ki`I(Q^%ktY80Ki@e=l~jo# 0Ƶ" Ղ N;B .`L !~% 2>A7ێ[i S@R ;1N~=C6{Q9ܦRWZ{+'$V\b@l2E}#5gBٵ4:M).(`S}60$ Gġ$ pt{f5B aRUJ&({bi@t Ȓ)H-8' pR 1M: s\NCPe)Ujs$懁D-!5͚HH ] #S#NTV4_!T,Neˈӌ`OV9U,9#!mEѕ#:*e.θ$0ds1B/UV@Vc񑊲) !Ff/SlLYv`"h(#3(#TE0&WpYp$Ri!D?aҠ¤YBY Dض, * j:I7{e6ak֐9˱YTu.O[.ii֟^>Ak5#u7]1nPv 8P kWrX/ 0T)&ciИFCjї:@FXِwe1K"!`q%dz!A;u"XF"ETW4G?VTl`3gG(GkSxS)T!gQ B)PmmFBzT#Bܕvʺ5@(28k)$" `D/x@IH+ַ  xbzC1@Coo$/ wYi X("ݤ&1| ~zNR/1UAN232A5@ @a?MaWRs٩ie*F0cX?l FS!5`f8+$0дSQQoAT6a5k2&E0D;R: BSmhnOlq ղ@ \)XD@صCKA:!x\i!b zhG@0*b I'k%PK ($(3jQAm:b`4^-Ѕ6afB*upn)\ kq0HUC)0LjZtLCBCgmk{֦y+{qlL6) 6xB,pA1BD|ƩHjoDa08C~™?2(ᯮ!1 4C.0bb+/p c@atk {!_1uhrTA\FYt)@8`$P@UPEYɆ{]XD0WY(PYšDtcJ1RㅕXJ7PͤA%xmp^G} 4r1'þ¼ц(vHY%޺u%xAa$LB5Dqj$<7D? 1uBa/!F4AY̮XP@@?]]%BqYAYHtLC`T@ ;P @Adu ^+h mM) BX t0Sup<GIXT` X{0EAG0p^|Ji De GW@Ac0 qDlk,%O"\TJCpdDj8'xH+41\UUa`JaC9_BE%(&P7@xM(+@*#Z|<ʠ5([:ƞm+b8UY9!MR8_ĝ #-[tlHqߠFv}1ȍ`CYi!:N𜃞 TdBh C " $!F P-DXPIYd %%2w<POBAYätv0 x_h#X.Xi;UQ;5V0XОtUڀ;mT}`~-U_[M^Xn<^DIDoH yАW$v@Q@ܜB ?\] }31AWJIZBdB26AY+9HAX4eĀ"BYYhI2$y2ةYT-xC>0IC T 5`4_` y1FLa1o(QWJi `HDhՂ%'T {( Ds 70d1Nek&@"iEE%@*BWii6Xo@`8}<՛'AYʂa%_E/|`bx}UFY:tʂd D<e -l%L@4[]܎ ` :XOA%Цa$Q:`lLNIt$>í0@i>C"l+(îh6hImiZ9)' ĐEͦغcA\ՄV3h[1/u qDT-NjLв n^6J<ּ1@olemB'jz[%PeH/`7d@VG:0 zxU+A@B1.?* #0]u -.8L M)H',8Hw5,E 4q@x'y^)R@/@,CM^q2Ă2H qIG|lA$X~o~Wuyk(AHĤXJ_DXRSPIj^, H$HU ^LxFȌJXX% <@i@`)pC" ġFB# 2p?(0[_pJpjCtBgbMj3, ^(W@9a-&=B,9HYPW&`ou0荏1l?=}Ոb.eǮlHZrTAxWD\M ʠ㜲b׺!qI`5'@ƒKCD*}I+7_dDE hQ["pGG$6 .WkiuP0d"78A)g8AYĩY L@ŠJ-6"=(,pBY Ho\>Guto^hLnbޡ<@+1д1dܡ @1h9I5( )ǩy+Azf2W#03P-UU,,^# %6nA@i6-x~3'B `_1==4 C?:@7 _lۦܩL5h%huD8#ŋT7@+O4Woq IyPm_  pr jd!L^VQr(UtG~HȑhH <!U+010: zR9Bw*YTh˖66t ߔl`'Fg>B5Z57Y I9sNUF\H``ZBLXGXA@WD4 EKsǖCvE @eX-T)RUxpɱh1x&2BR'Oysㆶb㧭@S;叇VF9ud%fmY :F8+ @F@{oIJ ڲ%re˗1YaA]DUiŬ3֜ /[@i;-͚460欑9ٞ3'd^F0 +pęF- ,MPxdiVH 0'`馜>IpK>(xI2B:8%n8g;xABj0QnZ!JL|dKI .P.}` q0k;[~˕ m2ٴf D Ȉ Z(`5 8de[G2G' x(:G/ÒPZv2•i咲.s6[ja b8L,J#Z  i$\"l) "D& I xF]9jEsx8GNV;U6t3; f5&(X İ GnZ͓Q>lLM8k"*4x'r +Q1.M$ɶι]Ρ989 x` ˵1!#Õ"*˸#3` " f+oMi觟Toip +">v,8|v]BDPQ]I0HW'ֿÛDH[!J)@1Xa%IeƮ&&G>"#,qY{о˛˄ Ef@VG~&hD%!V:Rjc3B 0X$"b < <*UFv#lpR9ʹDX%5Fm6o 1svbM#CCf8Xis!&` csn{uD$z:tu$ `FW̠U㵉=1 #Ę^6v$edHpG}"E Tv>vBd l_ M!`r%#L%l1cVHdx lPҐƌXj`XW` 4[Ce l:dbJuSsHZ.ԊO<;"]1E@ N>񆍼(FRs^?$$C*@Kl21jXEX?bŦq <"RIrGdJ]` 6P@He.E#x1q 7x6Qyi1թv AD!j3 QV=b)NUJo&|b:ʅf#%bs0$ Ѕϙ% `\ h^FQxOAo: d@&$e`Zs+8=w T^*P2-Ҧ! I82b!5rYzlqAkP1,1CcsAɪ9dH7rرhxta(AqR*[#9ģf5R#!)Z HDV| uH Z`YEa)IrH!bvPjoU3fx@@wd' ,xGtEJ@_7FU,S~ViDsPs.gXA_;V$V@"Nrs:* m%Oo9G<OPbM1G:D78Ocu# eHGg$ `b \Jg j.@k-n.4^4{)˜a h @߃|dPp!UjXoli5=~,FMqC߰UqW9Yrܘ#PdܠfbD3ъ48^[͎HO eN#E$CPKeHŐwńE7Ql@ְU(CcpKRᓌA(2t`6]AA2` ,P^".]Uuv0[<]G'豍n^ }x40DGzvVW6V~!Rpk d&s@2(cql!KJ .f o""i)sZJd\G[zA9"X9\&9@TB ab/b$ ~JC/4"N ,Ca/V.g($`HB4 t`hԦc&O&&+ic"~ 7Nep ª@jU#,8 ,G~ "t6+s*p$ !\HUD@,dx hb $KB4.Rg*0C$G$ P0 :/'(, lcv1(̼6Q=$NKH ,!Xtà @HL! DBla6~\@7n,mC+ +0.P'p@= h@"G#0 L NNC0F0,Zr 1L~Ғ-+,* 2D3 P0I  3JXf@ pj.R)LXLTjB"c SJsf8K l`N, slc(Fnb B $%@  Y4e164 Ym Ρx " =x$s(9[cI2/&0* .){`!@/@N,N(.B28ޮfiB%&dl2_&0FԢj5knR+f J a9n(,F%>IV*Y FB/^.nr01 ~`gsw/eTN.98@.fN䥺 sX܍ ,`$,X N谘)4X%t$2p"6L,`@S`oLڦ=D"4& x_OCn&+J*j 'J Ô":Nr2~c@y`o.N 5gv@*K0$5{8a{A?A.JD~@6 0aTT;X=#}v:]0".ӕwlu$DG]rQԶ66"$b_KlA84! 6 4u%'9Gjic̹֯$:`_Bjw,fd%K0+pF c~4^or=Y,1"FAaH؜jJc#`͌Se1uDQ!Cٌ޸Pn$PE6ʟO#l1G"^p#ЂEXA;TR Q0]SL/NFa@bs1Wd&X%rXk;rKRR2 K )H%jubGFN -FńbOkfNI&j+D11x}j$Xj]NB6E}e&<ܙ'X/^3Ϡ'Xoc'FCE:} 6Ko%%SL:eV]E.xf-83࡚oxTGC8A o$Vh6Bb aRZlO dc:(pP-l FRyi t@&0Z˃/b SˎXuNxG<+ TIBtЂ0! ((ָdQ,A-E(.A[jZ U9p! cA-l)y%𤲣dS6Z1 DaPSF0 c'Ge5bTZa ]pBuxg ]"+~֜ : p+@a!c` ˨҇@ ,r H RlmC,ph$2])W`8mxPVA| B-A3ܱs@}4B DŽa@7<³$oL-H0x A 6ϷjI#7bTH*ؔڨF!Mu &O]P7Y]DVro8 >%`ȯ5 /!%@2ˑuր ]`\_p v$) Ɛ#\mme6)x@dvYz8IxRꍢb'!#O#to5>VHӋl!fFMBL?u pǐdڳ+NXViNq'p%m)UW`jJIS?5a^0PE]@E5Q/80Z0ARZP p UwpK  Gw P/TO'0:g9I K@Zq%/an-p&GcJcaJCvVhC6D 9e{`(X?P?5YYPSar޴rV }0\A sRFPhR'Oj?HRSb#a~C\ xO-t"d l 9aZ5PQ&6cgb E  -5){$78u aM` B$pc p ] Gu,@Pu`=1Pxسjœ."o#0fpt۲0@ 0.9&J!J7D߁ #Lƀ=G`0"L$,+K'df'%cxV#U}3P t 4@CD1)Bh P3'AuL1MP&&@[NT0a^'QuO^ACps`NR Nw4A.P ]z φ /p@G}0 & ϶" dH" tfE;oWUhP+@ h XaUwJAiDa` K%2Y"Y#K'g25s2T7d$a 6M2ĉuG wGI]~F&wHC Et@B*@7> C }3{є~0r@[@t*n)u))1U 2p R r0 ՀL7 /@0M   -C;,.daJ0i;J?6m %I33j0TTp ?7F2!a cifD[@C0O_}PQGlOd i `P>Be].RhoAuFD&@P'()t^F3/^ ~g 7^44r4Ą}"Okr~>b2GP @\t,Gsxk" T7  °@!1V%d-4/ cvJ!v՛W85th UP @X@0Y+ !!T˱ A!K0K25S3#Cq5h5 %BQ֤"W#z2 "&=1CuiQ#ԇw'Y UP0hs#S)ahMR kLj f,rΩ^BDPT@> R < o@@7#ZuᥭQ1.d atUU&tPF 1^058B2p1!P?B0 02p kpCOfeo"4Mf2`rM76^uBhB,4=Mrf0\3@ U7QyB[pNvHw ,) DT !a, IP I@ 6Xk T7eW}ئ Y^fKyh;jV c0[RX+Qj!q p ^ 4T#Q1F<{4|2GqiF"W#qif&L5B&!cLi1 q63@B551@2O:[E'G~!3T̚`#75Q 0Ępl0_ z 7P\zP^C LÐV|q S  >PÌ9 P6!tUuL.f Z-< o}<Gc@н\cQ4@U0aU9 @{<%x5 3`  @լ '&"(qR&*㴆@1&GI056r3g 38C\&L[-ޒAQs15Y (RPπ"255)ڠ vΜ]v L HmKl N` a"pT=,P,X$'eS:o!K=)` 3` B $p0Y m;apŗaBe,PaP,pLŰ7 p| q LpAզP1-L+4 |A(32>}kS8>t3TX( u^Z*"l}` 0«ڕ]).p#Ok p@`"ڀ:0 ` m X`+x ,+ @kZv= anZQs>c# cgI=&*I 1 p= LkP ǒmȄm]1 Y ʠ p [^biR/m3n$.a $/#tw3dbjGF{B^PrppиLNڀ zpNnϡ E pc]0 !PeG@Tzwo C s,@ q [m:.`Ȑ+zmh,I0 P C@@c11pWs ,]z Pa0.h9KRB -?2b&w&FqRcrspE^ .$S~O'i8WJ- .@~%>ys\2&8) {N؁ |3v .N% 0_ N1 P2T 6:v z/wPTb0k`We%A%Y4nh0ЛIFE $ qaͼyuB@ $vXq`9kU&d`@&Ǣ"r.͜ґs<;v<;iĩK;ʦjIU+;4L-]2+ov$K6=i,",odLݽF\`+6=z`.t812D.3P%`|Iը"#rA͛gK@v̗cկg^, ?%|"XHA" 9㨛ě|(w*J`,2P @$XXe.Љ)ظ*vc&`pҩ9HK˨&}*|:2#(:ҭfƖKq#X.ؒr"Vp1OΪ>bm*CQa`1nsiNB x`Er CFZ([#|qEdDs` ^ID PB@@5^JD[ e*C@ ,e!] X` /b d,I&IOXY#CVX!&I" V`%|Y!|-{2z  ꩧF`*1tJ'\K.ki4=o#j39 8Kܢ)186l,LO>d#px) =R|ᄓNsXCÍne!0b.0Cׁj@:2sâ>H^SXwrfpi G̣Ȓ@nc$a\ ѩ{×H.(n )X $)V"2xzq:-*wMxԲq3 ,sx\lᣠ) )Y-la0e?95ZxZ4pLxI Mt==M`SCX1F`hÁO `} WPZ1ԡϨЇD`v3|xaSIƧ `#& *P s %ڃ@ RbW :5TdcW;"yU 8}0 F0P6ƽ962 B!|!C DxOx@IB#/_3%.#C2)B#nqUդH"7!+F8ȵ.K`Њ9e( R&I.gOt\=)gmB;1- u#hsU]Fa BELa @M@U8áP:89p5J|"TRE"xtjBM…b)Cig0G=d{qȮtT+pF8äؔ00!)*k"@[B5 bTC/1 ^@h,$#1#C:ԊUy =hjE! ( b W@ VfrUt՘[a5b ,PH>STCVàH,ߑ!"ƛ6|c/MP lǒ CrXn0$,&LLLR0(8L3ҥ%(Ip v#+cÇC桋r(9=w_!׻*e`lp~ThtJ.+uHet:,9@.L]Dc㺻n(WVPZ0Oyɏ~̥ԣp8d;h8aC9ԡ,F bhb=;|ʦ2ٺB4_cL`q7 É$$) Pc1!傊&#8'YIK`:P)ؠ2˂{,0X @9JaXPeXPU5rY…X%CB0Щh77y:0o0TRF:0oU(1)ý LHNJ"؆I+ZD\+!  OȂ:A\gЅ!cHjpn2zG@IB_ܟX(7(:00hY}8c a  wRud `:wl 0FO;5 ?!478W91أKQ{/ pIЂIH+@Xs{#JtP+B$(nď$|$ɼQ``:b`>{pZRaPS*iX>_[(S(XKoo|*`KX :H Xp !b7D" %  8y K "Z2:x@XDa0Y),QK/HIci1'?4t+gzUq@p{cYxQЂۉŞ#r@OO7$M31KZJ=*o!3aEV9%\h7Uw'xp`eac3d\1L 8Aⴁ8;s tB +KȂT+ہ\j`[*膬(y#9uZ=Y0a,\&4*B*ggK;qfo~ `+*xh BHPE,lS*ެ F)CU/𵿤%@f0ܢ z]L"  u^L`Fr' 'u\.JL/YCKpNYQ$($jvc1 j7H^T|`ܹ-зM]_M H {cTUs /$ QPkWJ Y8 H{H{_y#⩴ e4u|N4~1YH@=M A܁.XMq>Ŧ%<+5 )0E!H0ӳ:HXL2G x\Ai9ռ2:>PF%N0U1^$BP>h6B~"jTIi[ @[~Yݣ8k#47 @6 dacERhHePͅj9\)59H ηQj 6F3 dwzF:^J6!A W,EE_ 2npPmQ'И. `, 6҅$?ZЅ^6 |@q774|[4roiy[_pN6l%_#L[I5`)p8I]pyy7,b(ZrY(öRH 5_ez]cA>p 9M>" `#n 8A7'᧰hC@F(ȄTOyGr.ϥp/p[QVvoj, .`؄5 PGTH];< HqX XQo,b0\@0P*?QrT} u磴7/]o83H Q(~H5(FpiBJn(L @10 wՐ*FΥ9l\5ijQdd%#"X ȷo(QapFh-\̧-[02Ҫ79Yzt"eRA8`*II $*&դIRHV'uF/uU * K%N@Iڦ:$ re^ CYWn5Zl9q-9" pTӢU@oԉ,CkOI| 2H 309MR)yh.S$@ .5PtWb V0Hx1"2A+rx0;(dEQ$lGx0#MrN|PR8$% GVDY"'Z `42H tW^$o"U>]LCh81Rj%`'Ud}x G4F+J j'F*p (Z6L>=%B>V#DR]r;\",3Idb" kAP! 0#.!!VӅ .RM+Ce(ܯX 옲~™P 3!=F?VZ+Iix| b#6 ((UI(" EqXrx^H+Kp'4xĆZ\G'S%g|`<- HD$%=9 Q `@BS;uT*RTa]b ST#@,iE4,$$I!l@b 5)b n^" dcs+08)I5PM>0p 2{5(-BLl nezB Ra95yTB>B q@ȅ8)2uP' X+=*:4,Do̠"+^ E< vAo; 8#C/0 PfYjx(ueI .Z @BZ( rfSTa3e@\W .dKЃT!S9Gba1PMD8COa#!iK vR -n@Pr \C?T 1ƑpEhBRuL T X5\Q1Y4HE&1X("°V-rÎIITiV~* ʀ;*%%(F0@4(' 8O} 4s=X`O*$+ً*,,;j8^r `ab̄o8A`ZŪE"cRbYAj gQi렺ưު));ne0@F) @!2hͶq-[kPc$;;3*uHuxCPjW+R3 Yƒw%e/n ") K`UD8 %UBELL!HtAF.Pc5iHa,.) iΫ 4^KBj"x@F8` ^@DbJTh XnА ՀY ( @֓fSs2$.1EM7( WQJA?:`9Pp JEP@ ١bvRi+[ C9-p鹢 uL*q`sAj؀$L Qm֡jAbrаBOcE/-:Dԙ/A! c&pƀ-BAlfS5>)ZSc)!( <#+CTeT#pHSS@|QI Eu@X 3)J? L$_a}Tlȟk$ol-T.tGQK邥/GJx @Yp$B5+†ܜEՠv $I= MYATUay <:٥ 7уHQh@[b>0QY+P ((y]7B!=>6#Y")7PC҉D0?@2@T䡭Fl$$س(!_B\4F]NdGR -a8GYH@=U8TC2zU/H0Ѓ yz68IETI!;耇DUyA kIP @4&M$xY P 0\^t"@f[݇KtkA  0ğ%&C܇|@P"C8 @40NM.$T3#,j7(pTAB,܂ ܀ΏKNT+ \PfTr peXUEY)5Kp.CDYT~՝yH@f< `@>8`͋;e5IvT]jvZM5ќ = 5I6]CHŴNxpiF,#!=VF#P@@]"=&KcQPJ/H[EA6pVH (jLʩB!U0$[J@!LC!,X (`A Uc`3ȊM$KyVG/ă;lp$x5%z窑_d1$fFŽǜQ$׉\Y,kIBU*MD4 "Ư$%7"C>TT&,H@"8C '*F\%vB fTAM%+depX+qAq \1TV[JJ{+[a<)܃U C5=X.!ڮ Y(`AY8*$##j T%PC@,AZMq `PRI2T$\]jA94BY CLBdP0,m{:#0$ǎ`Xԅ[uaNTab9s/<ʣԁ1_Mv UY P!Pczl7T_E[A:.'sB@ڤ#d, Bł u  %7%Aj0.VX@ÅЃ[1t2O8'1 % (N8M9v|% (hAYDqo*p̸ pxNE Xg|'zP(G ]56KaHٕfU(-Vƒ|4܂V0`c_ȫX5|YL/1'44Fɱb/܀%|T$:FCElEr\uwP3F@䚑H/̛ %Ӹ00@؈E8&=G D\JQ+#]{`RN?+T)a.tΝB=]&+&s T 3B9l Jyx;ȦAhB:kV !/Wr@`%[(zW P,*j$ձf+Y`j>%\)VBNB% ҃y$hc⍿`Gbqj+@({ʅ 4&Ɉy:Rr91W"7qR ,fIaҘ3Kvx |rbU Q`w F| b8Va^74x= @%j69ADH ?ĴNPTɨ98V9H>AYYC 7 q`Er 4d9H2 $ / \ c"t! ˒" Z Y\ I/ŗgi%rQy/NH:k50m<$XC3׈NU]eE@XO3Y5Lf|dPPAeP w[MZ™>L$y6Ebyc"ɵ[f?Zp4Q\i`Wo0\az' πh\9-e.x gt9 8:`Z38^F?%at!BL0ħV7 i0;7VF cNrMh @ P3g ޤeTR:@Xh8ВyaL ) DSj Ib+ xPm,q b$bGB B -s Q;Ȼ$XsBGav/ #0`]rTF4ye/tb 1|!o °b* LTb?TS8pQ ba>xH9q(egLD"@-hYYr]ZQNށ ܣYrb|8zJ"vmE0 R-I6J¾ڑse$3V@ _BHxai, QMh9(*p,2@E%h% .]8)| 1hQä EFѪV+7$2qOƒgCŨdB70a͙s%bEB# 98`ŚPa!J$hs7 qR.0#Щ{ $c}\ 84GhCj 4^  -_T@y%6zf z48"T l~=a8cIK!1@+  P$! /Yte4$bMzr\X?%#z3N <RVvVj <UM+0L[B2 j# EL,4h!8bƭb `JDw#ɒVDS!w c8`i\:AU,d%K@m]Z)*0VOD<Xh=Vee3°qMb: $@:1C`&;#-Y @Ѐ8 ,QI2() " PEP@`r$(Hm'( E Dȸ^B + j_ӄ:++KpvSD \0 Rg<% YmCT\8P1;ƀσFU7 *Xk@3!gN "N@A&Qjt6 4a(  )&!\"l`jن@s  N&$! cB&B& aY"/ H@++! @*Mq!܉/\JPҏA@&rb>N =#d>& >4bhJ 0 N$Cz⛠`Wzā?BHpX!zEs! ť" ,i&!޲`m6c. 1D`(%#R#!*!c,&);k| d czL@&\hd `tO@A'Fb/Fb@3C!.`aއ4' ! NBẚBr ! B\&Bh $B8`$Z  a{~kw_S2׮QJ"$C%r@ xK$a̯E8¤sc̄zW@>ΥDMpOZn(NA?,>wt!%<,%Ժ%$ l I9`0`$",Lt/TS"`LT+z!,Xil{j$a6a&l!d0Cd*ޥ1d\6JdbrNIBvFzKC r.L$ [ 8CM$dTRy:"Za!JiBP8`Emn4<$(T*MSɴ"0*Z d< Bv-\hœ >!*~3bLgZ h(#kc¥~$KN XZE&f rZf 'N@jsd0l0~J[orAﲀKOu..EuJs&A} FP%C hA&(2 o  VBvza.0%(!T>@j@i$He8 @ >a$NaNEf R_E蘜TBs%4`J9],AXcIi*z40NmL2XeDcI  H"LE IBjHr"#:Nf+X(1+#2k n4(N17 c,NEyvf"gQ6 |Pn*9sJ&s*Bh,(/R+f_4Y+RƾbZFBСD"c$$@!bdb꺮1~2dF"'F'Q@ !'V1`kCƜP d  p9!X!$ZE?bZ(!+k,dvpk 6^'da~Zg#ࡢha 3Do'+d_odeʁCpCP~w& |!A ›6\OX +8I^Y~J K3`Y$^e!Ӑ5  1~ѻ#W lb%a (0mCf"`;Cș^ |P\}y[u%TF`/GsVc7hEGABmTQ.}Q؍9܀q%R>I3,EޚpTw_U!"1uAoL`IKuJ/[EuXaTBi1L)ζA0RO=*EPƴ0)lAgP@-PDoEB2ijxtU7kpIXF,-}c(p8s0yJtÇE7s9Jެ1WAon d1$H.Ru tB x@A0 %#C-!R^Uzo %D BlEpJ֢-@aUgĢ?- E>I Mla 0X)I 8rȰ A*~0ab8hXxŎv':p`3C$5H%`,R>u̧>+},` &<pCP o*A Y*Aj&s0r;NS ux`IB8*6s@0G{VeNPq!/0YЃ}gyL4  \# <&'W;+ }$ZR^{8)Eqe&T*p1 ̣4N b3*1rY0lr$r Bx:^1) 66±0 )4 gy1CofX `d@,wNp  ް/5F= )I]O1r&`G8"`MȰ Xp[8 f pu$8"] p0:i qc Z/7?dT7#edH2' u0PyB}@ S) Ԍ a*YtupWL Kx9jWpsvpwZ`Y 2 ?6p8`€ @ A3@ Zq3+!T+) /%̗\h]oqx|VOhGgPdPZeq&DBt ex@ m<+q FoBb } 7#xcá ;spl9 ` .r sذd@ $ b@*dn j,> +х":)al Om'Uw0x@"a@u )a!ހӂ\N00(o 9i&gga-l ndUsp4q4Hjw ` 00&0 vE)p CqO Cu 90tzz#Sdp񨵳 )CuQF,y IvUШYvRH . S7-x' @*Pr@SQtx 1fH <`PW up@4= &wZ0Bicb/: qE5ql, 8 A ; = `?`G@pyu1o0!kU\@p&NV dR 3A*i-A|:Ap:'7}@! Ql@42 ` dMJ <F: [ l@^ s\0jsPU3Pm@Fp\d-e[1Aň `0yAԀY }tD<=w"` p_QeħQ0&L+ L%Ŗ*!AД* }A )+q8T? p3}:` MD*Հ*^  J3K ('J(- r9u1CЖ[!4\&u3qSfq03+ Q~'`Gh*103}Ynh3VQ:ƀHWRP02ϐfuW;a, R%r 2p73aS:ek, zb9'xTkb5`pXa R T}"P N Gj .`r+U(bc 9i Ppgt)êb$)pQ}`=T58K ض )/vJې 9p b&m׬EBp-&'e4'%P>W8Y` r;x,a3K D3&l G 9 DC:<'! )v39lg =d3mG|*ģPY &S:wIpL+<(`~ 6lCۢjcMTI 3吓(0P"` -8Jw" a $y1"qdPw8=ȪҰnADSY s eȐvj7 \ƈ5cMq ! ,JH @A XjÅXDÇvx @2Y> Y\|0Q.t|aԻ([ @8UvuB5ֽX9ta q"mҪU!`RIy c眶Z10XO5:1CcP%8lÍ Ea3%9TB4Pu"E ,9*T*I9JCIi6eE-t:0ZdhS X2 axÞ?>{ KsN1` 4:z @0i+|"zVFfP (T,N\4THj&5\Tn&`>YO z=:M:tC)4պЂ ,(MyҰmB0P pB Pm WlgX1:g=hA (hS9 @">ά `@tϑJ`,dQG=uEfe|\w`17&hf2=2AOeZ9BRT,. xapC<Ӡd2H>2?])'NpM@$K`\~ brgn}ۓڷ4 z<@BBpiL PqaQ4Ê %Hav+VİUpX P,@$ L__&v.q<(#֐.@|Ђg3-D $ ֚HB. HudTb,|s/2Dx2}HD(A Bd}{JD Y|G,lc D/ӃepBwzRÎܓhc|泅'Ri6%JB *64GFqo㞞-~>Mn;Ux{W5x%bYM4tH2jaehW`>y.+@ NRC ϑ|;8^o&MNv; p*p-9ź H!) K R%NXHAG=piK2fe#>Uo;$b7N-&s֞\&>b([.@=ۚbp4hR'Q4CF3F;Dr?yY&׌xEc/1Nuk-X9sHpG-S'WM l`[ϧ( w+b'v!$78&cN=$fͮ }̼Yr!jp  gVWq7B)N.f: P:LcT`+\Dor.,Dp׮T JБ.x/ 8@oaFKн .O`dƩ1E궾 L.A@57uiA@M9ip\~SZx}!6>Awu9U#6C+fatiK:] p֦̿,P%8V]c¢>|ZP(/w3C{jkuCjކ[C/2Tܴfh~h^QFbAQ5!at~P xaI#39nFuuͣ4e 8Eb(hmIq>s4vĀ3'jƋ5W) G p }BG&r`2`P} a$* @b]rSgZ!Gk4cA"f;so'e֊A4{E3*%\381EsJ wNKC 2ޓht(r4 &)` hcTd7CvwGToWZԐƧ<8akƆ=2AIcE G qWwr4|3pG lh}>tRP\`\1f2(kPTJ ^8밄]!Ðw;kbj2҃Fr%bE jz`ȋ4t38ٙZ9 t  'p $IF`&,wC$Kw=nu(530 . ~YPbP^`QR)8Q [( eik[gw<3l('4Emxn6j^[ ֝(s[`08(Xb$CQ~4 `B*[;gT7]?+vPP((~8:icFOydVӠJjFme8_J|*ɹ7x` 59}V<$4h3a46sHc)9 `.pZD`wpbu Q w؆ChZ=V5 B/48SW8S`z=Ӱĭb,2; c oP+`` o@i48ؑ7P~U T0Zcqʕ0NO2Ð^E5\x fRkWsB,%t08[eRtaEް)I`=Jqs~ɡ{qsF G(@!FDue ?TsZE\X3H94vju}Rj\AC\YvC9 IFJx $ou`AA8҅NwI`}H\'Ps};k*E 3'\x\*G6`T>a[I C939J9$CEIE]P[s &b?bb5:kzwA84J| R(Ԫl"9htQ;q0E? N@ g:3dF 6=T(˰vB#]C/8m>}2DulA7`rPR *id`D~ 1YP ЃE5H&US  FTf!3wϱ$dx&wR3e(=z3M Oe\J1_NDV )Zxw}5džwKseS(z(.k%> VaPqG=: 00H20&2wÐ1 g f˵|(rxW k׻AXW4C9wȕWjyO. umrVrì2|p G݅gz#N:N7iUoZ;+5Uٮ Y SB 4xыP{|ȑ]QhjIc[OeCf`(C\d\O$L*4s8G)p qxdžEo=V˿84{4Ɛ=:QH^ 6Z񋃘 =B}o8Ɗ(#C+Lu=vGŋaʋn u*12wȆj `EpGe[&WTR YcKdeiڒ6Bg*Bkiy= dh ɐȖ$44C4C߉6N>GxG)GPF 䊼幅Ug "x` XoFY~c6QQ =E}ÿ=1B;uactG.4m[4lwd}8m՝ edtiGÚX!R?NFz4t7T( w}w_1k%S]&a !UK8t8kr8ʻ㕮XQJ3Z]v&f䓏.(V|3h8]7/4SFS%QY7cJ9Wje#09KccIc\Y.Tq{L `%?:vpJ d`; P -Ԏ%T쫶cAzQ*å7=dV10nmH\bCI[&K>*HJ*'hE- [8Bdڲ^\^|K&O#_ T.&YP,ѫ: Ŷ s0檐@Sl- \QP.TѪh[69*40[\ 5֔Blۭ!\`;`@nnO4#u9)[0=i:y>bg{oj'p bI ]bp+k ZkAdlRqjqeIߚkedB+6S1TӢC'믟.tdpGoeyf +'{k}r&{I'mk 6Ę79Y'VL 2Ӌ:`ESFRsX"Hd"r#xlYl@QU"Ԗ¬J,y`CH1*a R.7Y 9p"}Kj! `| ~P9XAz@ x/(#e :Ёx ^r "ȗ*1Z'>a~3 STŒe4KUp"2I- BGHՊfЅf5+O̸oȄ%p#kgKgc5Q RtJQ '] dx-s%@$p3 hl57҂QQ-1V5◺e~ѩα,%CLr%/Ug8q6$gŊ%&NO%Qo^کpla%kgNL !do2(@}5'|hdA=zq 1< 1.wѕLszي:KieR**R*]]6S/Y—mHI9!i#0$PP^"ta;=k܋Ve#}\ 'ϋsH / 둉C8 DQꕯ͓ hr'2G>4ʇʣ%AG Lּ3%a cLŔ+q⹍L7<&Ž֣cMޤ`e8JhR9D3I쐈]jWKE" ,|͂3T02dv"6(Xw9%Q`p5 DXA ސQ-CNKp:Ԩ"4砝@%I7C;O Aa7'I!u C@Y.&a\P00XJ~xq![bb2=k3]}*Ip3c2S&' 6}aX4x61ԋjA8lB oAoHA,[􁌡%`|s;Zh.u}/|Q5CI'`y2;Yr (JbˈW΃dA WdʹL58qcxBv#D4*T&$(x7-@aAf$qA7~ MD <#wK#ɓDA[zߜ{i@ _u4Hjā<Ő\  ʱ5jpi 0YI ۙЊH N#BF;L 0BhS'ljx $H78%P0ę-. )c8#"sa39HgN|&ӀӧB ! c"CGɉDEj+5%)t%\$;(Ti5r`l˴I9Mb,8 @»:>CshHK#I.fs:b`>B"-o +9;9&rj#c@gp_,5A3sQ D ÓC &L)qF!䐱j P%H:l$^HPĕ(8QӠ 2FEr![ q:CbQHp (FPP%#:\qyI`: >)tʿgposC6b˦@]\;`+H=<><}+ ,0 b`WD eLI)ѡ (-Ht=(8ěa\.8E8bȲ,BP:,ŤBCV`(QCX/\ƔB%т F3408!sTuy2pÝ $ͺ+5⣘PXH Ȱ $цɑt:ÆʋDIk,Д 8ɑ̜=33, PL+äB B7ЁAkQS3FKJgS8mN2THҮ"bj\c.<X4lOy'Cr@KlObUA %+ ^0 D ˉTOЎ< ͔ Sb[lHBB>! ȋj6!lB߼ T|a^ծ<k[N'[Fe֌B 3H;_>/.ÛPISr850?r'x>u-y@-Z PLT\ ΛHV̎TXJbI`9O*;Eċ 猅fe e,W#@TXɑj@H& R-@UA-C) b%gO0x@0_;.|8>!BS9Pm7`1Y J!1NS:{ŕ*QH ̈́=S(#L==X-XU`.dU٬SPBWMe\FMDDA:qU[#9-dՠ:PVhy](`^?98 C4WZ1zuVם'ɉJj%LDAH%C)S)%BŘEzH mߏN L- ʀś=U%2eX`yE_`ĉIh ͊c@P~ Q>n~)H}*ЀV\ilUrXo`gX>(ey;N`>F.ȧ=e0e0{ ^z}'C`T- oMS|%IDɝ txs$VL%R4Y,`UPy]Ӡdl=NXN ]l)؅]5$؅npZz`e9IoBYrX@+Qvi:s.]QӅyP^\ijy(OX SK/b^ZCb`{É:1L5":;N@0BItPJ9ȩKT$@P̘b JKht.deerD>-9ɝ\XdY N?8We@i@Ta@(\{x\970\t:h~+97@S\pf[y[714{,-@{L'uX}Ђd ̘!)&")3` ;uAcceDU/H`/,i-NW FUvJeiVU]l(V+& `/JىZEtDx0 @O3Bp* fyݝNPyC f%D%0ADQ@g.*Jx6``f &9t]ql0*bo$pJ Po߀ZW C~~>MlPE~]Õ.:&EU Y.`IP7AUj%]zY{(Տ&I'e&4n.b Dp\6#K'1(p6MMK8I@ j? - w tB-@ yI(S1{X[Eʖу?l," bD>oHbH%{ DQjq.i"vNsr'XxJt{iJ6zP*U=َ&ɛ]@ qj3;zw $D Ƭɖd5Oy* .d$tMswcLB#`| ^0Xp1fP0h.:{&,T7x(08S"b`@*&"ʆu{'Yikĉ8q)Ԙ&whK89,W6QSHw]'XmhDULaN&KRś/t9qrRiix6h7rHxy.?!SH jQ<{ KPy7ZM Mx!XC+T[\)\"Q`uTx?q9M%zm6JYw(J'$ "/l0d,X!*SJ.]h{%(('J %fj& [I<ƒbn-6lH[uǷV&Ǣk `^^@tѡC @\pZ,oH9jĊ3n1Ȓ,+3艱(c Fڴ!@CZn(T1\[8փ?9r.`.$ÄIӧ`;7pY 0;fzcO?0g(Ո̀R2i$: JIL1t# $ *Г@#$*P$Ƥ>2h #r; Q G̛v=MgzZj 7D79xprɨz<| p C` |ڎQU1nԣfg?qHBs`JJ@W .4% c5\AP,^2:et8s\Й oКuOS[11 F(o xZ+2\$ӣ$ƖUyc WD kL&@$' ӏ, ؉FQrdh@CL/rnaE3zW?BL\8mnOlى|6ă8-.MYH!6R,flF-M"J¨WSag%M, AK #`,`I{#2zX.'JЍ.]Zc ]A`/@L+Bl DPtAń%`5G C pHZ]ڥy_E#0Р~[Ɂ%y%2$m yFfpyIء|gŞ.gdtDEI$ƀM ąlN'6d@ -< JC}q p8VpلS|2<=T)XSqZ+ *Ą 0$@z[GObc_74U@t5ֈ)9Q 7U4"tތ%Ẁ.̃.u6lq}HiT C= A Y-=Ni [тZRS`xiAMq*`ؤ3e⦜ƌ̈[ h] X @csxY#`u|B  g$"Q;CUê j !g&AQADEܳD$' ,׳L tn2AP!y@M1S R4` 5Bi@vda H:\~BwFltQ$Xc'|7ALX,2W̉@ 9ՍMamGjB%J&\_U Vh JC`f_5^ V`[ ʁ1 <`vAP n^S|1XB3YrRhܜ3AS Y/] #V_^UX]Pj%(mVB+\x#6daPmuHRu fQ-C:dG$M8nFr .pLB9^φeV s لZ/X:|e;D `@iL|QqyTAL0 SI˸ ,uAw$9[ϼ)9K[(#;48r$#K4^`\W0ǃ`et$) Q$+CBao.@ :V(L2Dł2vH E{] ra3!ӿ $rXcI0,qLxl{bs+1< [\(L˨-q8lbAPlS]mESsN˘e\Y8kDhDv%2E *Iu 7.˿3|SgaHWlrT(bLʮcC'xBS RWaEAd]ppE_] x5ШՊMa1m*rboP@ lxXUN.]-l'Ύ O5uh'FI@`hF\XoQ)nG(NfrlxFMh(+DGi85vt" bW<w9+\^H_Bgof)F5杰0;MdV"7g>jsөW~{kI/{4D =:Fm ךۙ6(ޓ@"rC9iB-tךZh|=ُV,* ,.jV5ND\>oO0K0(7`VK(Fb4'jZ7Q=N78 : 8AUA t =q5p)=} d cZ(ƞG#HzՂ ]TgչB׺HZ"))%nNEQ H&T 몔4L;Ԅ+_W`X*6HUoHB0 O14.3Z󆟙L`$gh  02qjt)jT2$p6A2298T "u@R+d8I./fT@.&%H.4:g2#.́0hm)sIG@d\\RLR;@I&*itEŻA ә#. {2qp1B~ogin!*#M9ֲ-ψj[P TօRjFzK]0&'@7 bҪbNL1^xPP@S0+ iBYJXD/&AwNNr8J(-qYj'QŌ8ԻvB 4iDQ+ &Do0F+Ljұ# ,G\ޭCȾx 2>[A0RM[)@.@P$f +)%O+XD 6G\CuW 3 e03B!13ERt?Ę^@fFJi̹49Ql\AII96 RĒ>9mD!ϔ#ɿᯕ0 o^ay J xO~ XR2_tY8A*hyB*1[*MJJgАb_S}lkXYI:'ƮEd{q!j,$@#?AW3݇:( >`@ M@w,@16 @K]ĤTfHߨ M7(+hVF5x{*x_E&@$9LnD# By(`"pVvzjX`~(3vB8|Hzt(PB^Zf.`"ju@hZDxF/%x&v!v8* > NAL^N8b504fJ?ec6nnY@,kp GBd'egF5aHg ZcJhT`D4, 89\>@$ʠd`.b,(` ~HDza VaA::cD@D+\~xOK"L\jjvV+j`,jDjBBL+ n3#,&aRjj$ 1%`f&Gpp?YFP .mK&A @~%-A12iډ. r #.ozNlԡ99([" gMa18K,ң~w*^"+:^x$b\A$0EahĢdG%$N#2  `># ,s48_"", n\iD"$-9xBC1(C(`Q #KxA?~bāN03:hꌉnz:E$!d0q~dA` &frĶ`P( ġ&BR`s{prH&2*e1%%DBBfya!H'% s<*hڍA"&ƒGqyrb)a ..RO%LB0w7$8c)#Ρ.4JZ H,ZdWe..d ,YF$Z&K~ I!#p^VT9Ƙb0: kD8~:(<#DdH~RA>K(S(KyoD9J (hhAVM>~z3ˬCD34bf-e.ZCA4#F4]/zg#R@09!$BBBB4\5\'& D->!*"BUBP'qQVcTYbLcK)eZ@#XpipZ-ZINFf !DJx9 TdT6h A$FAA$$9tR-EHhl(E>R: ayLyD#&Qk 4cJD 1 8RdCsovOa`p.#$Z.r1x"*<9AIuD5yNU>2Cp#"\b UGC`2q%0b-OƔI6eN1D-I Yq.Ca` Z) bvbm%Ek6 D:Tk  9p9nv ng@ր !Sh9PU$POuu[9"N W]qo56r`B`p[_"lK.)HgvZig,e\^d["+ڎr#!%d)X ZR.GrEt3SD&,!Gr3&BC"0JL$?' X #h@i犁Zs4cA,,cxH0>! biVPwAe9X$0w<W${::=EK ``rF"@4L`G)N RD@Djeph}#wB03$$#kҎRsĥ[[#Af[8PB$$\ Rb^oH7cm*ބc[ yEgIXYeeڢ俴8>>2&34n`d)xQ֡t@$bAXaQEfπd Czk$U9 !~R|S @D 3 zG9Bt.2n•E]aQct:P  k>ztbBDaH8` tR/8Gz1&Lae%U$99ƒeDE'^2R]R..nlۀB\tNu!&"㨓z[#51=ItBO["،Ugb2[ZHs#"A r%hBt #"R蔍-. »"XC6o?B-#N ?\Ba xPX aPI$lxǀDbxf`:j\@dH;h+R[^Z>TDDX09,8`^cND$&CsuY_fhGX&Ptu4$[[uGFR0}1"##cҎD*$Y.p0f4 :P`Z -XRW2Gcc35ZeTțC!SIf{qw<:69j9JA:@ P(2ùG^>Y%D.f+VCrֻԪ[&@z#%%3i,Er+҃=[|k[3 U^cZ)BBD2XC\39+6$d$ Ƌz@ CYF4GN cjNzK#b\Ɖ隮IP V`=g~:Bb`9 N$`dT(<&>PazHaX9(A6+_'"gjv@ BH-Q=8!'$|ⷲk%[^..Lor}[[+B!XC$A>#In M.\x4  V O`*7)[0b6;Y`2 Hr-$H) `Tc8 {z 6رEؤ @#ȑ9Eswꭌ|7˶.Ȫ0zVooW7RDaD1K`1!21$15itE7cQc4Iotd0“oX%[ U)($hGTPP&5jdMIeEaT`TD^fS9@,CeO$жrs'F ph:4^Krm#mAƟymfKAm$LUޣ^qܭǥP- Weng 0zXNJAidy7M$İ2PK$@oug[$w;찘%7I>I@uˏix%Vi@W@1V~ 2X1!\P҅*ԥ Л`B<-dVsm+Lo4.4;DN<l"q^"åyms:G)cFgD}XSSY{}yZGJiZ_7 ;ɹ $F&!8dϼ1%=ӯg=jcNIfU OK`ST>EEe {XӤ-)h8 ?3СP| R#9`3gP 0emLhÓ42" e*#6(v jq>iZj;/qx3dE0GY0,5r#\- GD2rpA6٘8 O0n`j'LǁQp ^oX1T;P@2J6X P"(3 Y f'8"FQGeR4`4(AJ?pB,FoBQh`$&TEg : qTZ1Y;i%3)`%Z !T6;YsZJY4xd\ i[[bҪ-W 7% ဦYOC,\4҂7%nNB" $wxv cFnw `ŨCO%:8@ `1N4 #! EV18IEX[y Wb@DQ8%@!0! R+ TZ גS3@ 6qNuVӍ#b΋Zs &(Ѕd7F8OBmqfV2ls?9L~xիKP-@+ -9?0RiePG=b"9M ^\Ia7ѧl1X=H tB<1d4})4 4JC|8A.+&>*7z)QBR$;V@*bP*,L7ynĢ4sa7\f9aKP)a [NN9WNFEWNHs֎o '-yZxtАӳn 'v ׅ2w1 1/h*H֫0wD"63\"3$9Ї'$p/t!hJ(44]E\SUQx؆bc -bП. , ḡ= [,Es姵Zv[ȁ ڲS)=g= Ζ.sQL^%=PYec#SX?6O Ţ8  FjA`D ] !i"AT# B3Վ 0*U#h>:`$"BBpEҥ->p`d  (+NP!B߬$#wHQ iX[ΐydFA`<*+r}p9!S?j2ptOY P@dO zWzx^tKOHR WG9 <6 <|"I0qC F_o`. 30 A?9 *f1>*VE Vy+> ]r@?yE 8cwLN&:o4t4MaD1GP'pD)5O y2-Kb b,R$=tD[@d7 A}VDߴ1Ap+VD,߰MF` D F]z@ K&sR}.7SذWՐI ! <;)六 '@@ pT!EV8 S!@0WVx mE]$?h%W@0$pc<%p?O(`1a Ud VtJf6r`Ǒ6%B:!)@d^6DCrRr0Eb؈O|bZSr5YCg!7e ,̒4Q8 @ }` B7 ڰ . vG(j Q/ؐt~ P ny`p`47*}N%r29 ?E@VdU86px4yobG!BP p q T@PL9c Xq A-Ep*GX֓rg&qO/Y N!BSAEs 6fӑ6%W} w8MRh,r8FE*'56Ĕ@R銂G.I d0 U8H Ʉ Aqdi",TC v;IV zP R@Az aB@t0t1$EJnm8F 2p%*7 pE7c3^i'[[瞔#ZFP9́B[bPGdaa6PABX y*A7=YBP7 O69\5[#DB4(8)aj4. up S?Wv8u3 85R ZI Iqj(nJc.A@-ȃ^(`p<4P&PQ9FBIjF%D)dgPhaP1Xv3` @bL$z{&D)3)DBO2*$7eBA"S5+3)B*2Y"4P'YBO̱&$QE0KR-xv 0 H J oyG:U 5`-~q(Yx77zca^d"?"$?1TbD]AO$V`?^qE 0*(LE39:&!c6{5r1[g)>*'+ %!N,3A %D396r +1 5e#ۉh-1y ` KiZ .c"& :S  F~` u  } 3JAsP0A E?bc/¹x P7K@ tz $B&`zXw OiV'O$Dl@㞙}E]8" \X"D4-&[x*b6 2)7) !)+\䙧5kQT [U@&̏EgYtA&S14|{O*$}œrEڙ(P㴔2K"NB$Qg6*crrz#IAy37sc3rO%Q aUS@u<*ҕ!r"D77ES @< !n7, 4a LwFu " s b@3d @&?"V} tO18 ne=,bUEBw#3J&Ah2XA ] דb +Un Zueq)QelEh@uDw#7 7[EPh.wX7O5]sc-OvEy C5K b=#]'u|Gs@ m9.ΚLa0/cYs*hoP߽P 9{ 24vU %|V=v@Fu@w U h*` sځX k7a;` b7BOhXdzHE(EGCFݐB؈|(SPrB/]"rEF/ ƥ ! $*0s(@ p`i D0SpS@x^rg8db N27!5GE\{B@7u+.Oܪťq*rm#pʂe$O_{`4 m`lYFo߰4vpG8o I-f]1uKon4?i)O?qxHFO2T@!/ 8p|,D8Q6 $F>DRJ!!85@>kXGOF$Ună @J6j]b#ڱkl ȜK9 9F9@v xBs&k-ƍpe5-#U6fZvͺ-Kvqka#)l1-6y1xWd$U+ڭ\` ? DxS5~z\|KwqKW+, #Ɇ(#0xf7j$S0*d@{@ XPa 2iMc7أ%W\dZh%^AH ( ( X*Ʋ01R@M׀,K<.4[ 1if,$C6l-sò=b㒷>#RS9R5:Ǥ I#fke@c>TMxƺg\Y9@_}<&Z, Hqn!YXǘ 0ސࡎVxhi➊ ?$1d—EƨGEf ʜ4yp8E6pCJN 7ܠBL.ٯ$S9N4]i+68͊ NR^6@&4.3+d; 5ֲK2.*Kk @l#,cO,AA@x>7ZL9j~+ -ʃ~|k` YoC0>/n`"4iH %X 4Jq'8z!aS8qG@%$j!uHbB/^ِN!2;keJ[DEz: CkZkt ?v!%@, #%ٌRYZ0RhQԖҖ6XX:u0.Vo%-LUK>h}sCpԡ :q+ BI ݉0 EF5!$ xi [-Yїt+3ðs6]$eQlPCNsϑJMr3zr2EHY)F Ɩ@ȘU?71BgH <4%j5`1e=axF%rIx)(`Q$Z8#:]YYp[ZhDs>oCceukhcXh ƓX)̀pZz I}C)`y1C3Re+-ˆBTd|(džI!R6I gQF9󝄹ب$M:fmI0).K I@I̐BC_ZVg:O82 ӊX:7))oP(%0?joU6g9HBx?X Q:XN}Y=}۳=1A6VB3=z`> S88)`@HQU"2JQ@43-J963@%G㦅H#șk/` cNY,iø՘JB4cH;x0h`z'g,ո Ey +q)~h70AFk̂*9&Op7Yѕ? cpN([(1} (>ՓNn{)MЇMQB]HB: HЁP=h pl Z ?) 0JӊF@ˊvM33h"2E?9&а gd'q;,(@(Y ٲ:^ ډG$|܌(hqi6xaA\hSn%F\=3ќs>yL`b&yA'>aH[8³SȵrHM}0νHqp ȅP=H~@@4CP,@wH,,Kz[9ZE33JQQ)(?8ϲѕ5 ȠP di*AY aPDIK$E;&op!_,hy<3bpP6 L0xœ+AsTGu oIӔPT\0sC>Y%X3+'p2pDEH64N8|$Ё#Z0>{D K Q'PJ\Ӑ --2(24 !Bے_-{& 0( (:=pj1)W֩sXvL\F@r<#MIʸ`& 88S(>Pt"0[R Ӆ4Ӂ9@fрqMBHZpMX[H3@8)C 0ԄJ)ъ9Eq 8(#> J kZk8?SWO@d5 z PP2B_IG~HI@<;ʴ]H\ZPҠ0.׹@`^YנzgWkQ;>PEJ T tkC`B|$2͈IÁmXɇ|QV>NT8{Dkr^ ȇ[` RLe@.԰uR&q8 0 BUy T tjP,ZJ@ 6k" TdoWlAP@6p)lP%08b0:#:Y-:p12,J0hOrA%^V P\bDrcNia@ @=0MЗ(H)9?"8= ؄N 1%w3=t!b&ղl'p:' mB #Ҵ-Yu2HKH-4yҒ™Nc&aW5Xla^v`!J5(0HU% +Qf9/!M#&-Qb0Oe[X08ui[pax!pX$|ccA"Y넫0@5@ĒLn7cKΚ' nҙOGSF0t:8bFR:G;Qnj9Г @? CaQPYZ607;ᵅbf^`a;lȻgX@ \,(dBhCKxd d"PG{Y Wb|9_pSѰ ?GS Z"^x9u= /cg%^iՂXnn _0~6j)ʥZyHB84ԷH:xp1 X !,yp#c@pIh M8l-}h^nEĈ>YC rXp`@68d)P,`rŌh 5 ,C@8½ T*P CXU "PX2n 3~ x8AHbuhoWx)ɦ!V ]HsA`Os@qƋ蹞c,cĬmY|"mٴrB8+`@PS㦭=pm0Wy8Oߊ!SE)Gxr> ؁K@ViPZׅ3JCѭLo4Lof^``UDѩ95'kJK-Yә.a;U1"q moe U ^ІbY*w>zh\v@g-c8;za(wH7Ȃ1~Xktoy0^0eB[Xd؄Xg Q)n5(; [@7)811X * g^uV#Ph_He(:a": jJVU߬~ H >D I .!NIuaJg֊XDF^=lPh?qlF6;scɹOv`fǜKF>,u\bd#c ק >S3'XG'F&h5L,,[ <0>}2 o'c``|#FS_P&M ÄL@ 7N?д+Mw+x0†VYtP(s*_>]D[N֜#& -9sc7[vKr,DzKj@[uvfNZlHc#5WiG^|}9\c?'l`lJC-; id'P? ‹"rqC1ŀ1ǀܵrHѝM71OHO= HYt ϜK@RN`TS(atR?tYҊMK*T|] ĢgU3Y,\s^䉃d:h$/Y?f@fU|F$a W2NZ65c%Qȵr[i-Q\aWXwrs|34+0WN5Ҿ0k}nɶ`+HB)D]NZɮ@K`pWJ@vdq X|}#G;IxS'3`.L3@M?zTZ$7sw/4IEZ0\%Q%CWmpu'_cp&'b`;}8Z(Ν8uW" #.ݕ{qm9ܝ%9t {םЫtqW}ylHC cy%p~u!ÝBW.,a,!C0+.@FD;KW EbJMnP^HxMLHf9rMhN0ǭB؍W%uZQ}7h$FEuhBʂ,M+p@/?Io&D8ހQL҃pE>npr@D9WDBENHHRh$OR1\W|jJ)%B,V @"E085pKlyh7DA`!BeƵdV Oh_j,Y Øj7(LB6MZY8CB? ,g+5`H-lN [p!`aP/ͣ|THb0PA9 C*MIzنKrWvMؒA7t =_;50C lKxg%ߖ ԇinl5\+<@X`mGl dp7cڜ067#Sq9G.$yK.ٲ%%Kf`4"'cslLڑ&Y#O`dvhUg2t<{?~ߐUV`c:t}Z@,уK6P$u)d|fd|N]5J)P^vmҤ4i0l 'WOj#[<J18 .~K  J` [qcƠ@9r.[,& p{oA.h6:b> whi#jA3.`) Z%Z$?2&#iBjpBhx7Ib q Jdk.mpi倾,Zp(KOn]^tCCŰ@QX-4.H4HHA=PgD-7v [`nDZO9x6*@F]k#D|AFXS6!0 F5(8" ɤ9 (\dĩC[L!J |[oXBhÁb ҭDВnB נ3F )I+'KDmð\{bAq!LI񇘷9G,, P#,!G b\xPbvlM:T+#orSorL0cox@*N;IhVPpd<XDX<\ݐ-/.&`#=Q^y$aHYHέX$;ԞތR - m`EF.Ɉjt9+%MCvҊg[B0g8v{H"d$*ǚH3H!DI^ BH"}@7(r'\HFH"$DK@6bOubILAAX€h`@+rT"S0:KpA,\ObKWfR=l &WxP=D;>h. l< ؂6.6%Y|F 8 yt XЅj,:@ 4VBaDP.K#\$I|p̏(x:f )ŷ2o t@*I nDBQ/21P~OJ!Jb&-6RJJC%0`Ap1` iL"i|bC1q;p g6 %`- Qπ` ̭.BQ +Jư $IOY}Jzᅾh@0y p`֑R2N'aXC4Br -t7@XD^)ygTB2I='x^xaHF ጢ$"A^d LXjE@f$'H$ 9PH(pDZ=`v١bGp1u—b0D@-6 Ak7/.Ѕ!`jc.*e- ,\!EpT)q dYƪg{ы^3v ;#5AXEEʴW씑(&4W#a@9#LeAH0R| ymA/,!^J2 "BEFD}&`e:1K,$) /I$~m>PlPE tNRs . ! iAv(4(E1gJ=bD31\7ko!iU%($ܫX:9t+àE KсB .CH0PJ{8!.B&h'#X#5Pm d@?X'n=)a5#FZl GI@ ǓE|2#P+\a%7"-,ԡ?Ѥ9m8=\`1Ec2,A?p3NA VNm3`'` Zaf#9~ `@`` X7X.9\ |YY !H 6 '4&$t$`fE*ߘϩ&ۂ&ZZaT& |Hij$jNJ^b@}*@@IJTdjR x&xx qD"jh& #:Kx-nN/H Xh/xfgZpA u>Cu h#rȾ`Ph#nK(aKP7jRpca3f` >C6hJw.e0#B$B$$ ! \j!v}`&DM^BZμ-eaJd!).! w# ?e-"i /">>( B&[ bd +?)D" Kl8@bм@͎dTQAkvF.P @@Au*Rn!s*%dA:ƁhEV4.j#R)`&D)MbU86dba@"K;!,'"$UBB=v#Nd##&}**ȚfjI@ $IRBG^d!2"?&&FǬBjp]I(CD?ȴG"?kigLkdN+aZQ,ogj.l2Gu*d$!;dB@10?CJ6=3> 9db.%6aH-aa HuB%.''h.Cb%v| "A",D)XiGI 6#ȥ>Z॒^L/DtD6bf \acJ)'ΰw>b>@('"FBx!",tM .q,R!IZ!Y10Y[h#< tt%&r~H076V&6%aU=Q" L%V% HH?( a3r=c *%sr@d@'@Hg y,\A/M{^7[ϰCڀdu``j"d&{76@d"26'e Ts k**Ni/@',8)O"x| R@-j0(P@ JatHcp9%~HDN'4B/d9+iK@X"%U+NP>AA ulu@m/>cRW>Ρtk&P,%J6hR!d .dauSbD&)5q0mjW@>%6`ttVf6` vوd r@+`YCq% una.`]pd$k$Ϭ$(DT<"GDPl 8`A.]*zVa>!ݓ61D'B%+ᩚ8@HBO "&#xO@ck *pB,b tM/tτѡ6%|13嵐gyiugV4%6u?ct􌈘8H Nt?̭@%=A&ʭ8?Z4dAB`eaf"i &`7li`"LQ)ǁ%#Abt.OM [2I,*#$ohV(??렞:k@F  zms .nbb!Gj&X!;%!h#&$Na 8(a9m ># 6o<Nsñu3;Р\c@( @b`BE:##A)<"Fdڪ.F@(hd#oI>xHFlf "/'s; \J '#"" 122?' *XlN(~RպHZX!u(u@vX7B!63?cCo,=U0@ֱ84.MaVA QC` [XC %d!="*sDLJ$Qo Vbb#["ɋ>9&/I'ҹY>apaέ!TN>gP !"!͕i+-)̮ZgϾ{``a ` Zʥ uQm t@ UbtsY@VjeP"-;d>#`%T\ 4+`rc3>aaxhBCN<FN jCxToژ# @sYyrc%ē(S71Cħ *DbS"}`W*4"e *s0Jx@06/6R,*I/4<+,2!T C<|=r 6`VaR\w? `$F $v7K&`v wCUIxL  IЋ/ƌB`IxOI&XF.YAXtM$HHӂAHꧾ6a^q PbA  b> R`d`s\5klA4RoMlv%بdc:B2d(#;lI#FbzQ̢I(GKlaت̑c F`z-W3[sal ̱ġg!@=l,VY<3oh t4_qh@XՆ 钯 aʘ[ H𐡴ȓ+_`C8f#G}j+y=3,UA{X=UbP0VtJFJR!51U^eS'qI-2Ul|c 3Q3PH:aOvH%RHC=s4l@?Ee[tDWaAC$G+pp'dQV) M[M0!-h3ϜS9<$HEF1T q`3ZeugWpJ s[k2dHD%ͧ C%p{<%J+2Tk  @5t}s 0)pOB MWMlUvVEaL?}aG ҤH;` ҘKUJԊх/ wgy`l7lWe07E$Y{I }a]MJLP`S3z@;3tB1TJPܕ\"N9n)ӅnR(q–*tٸx@l(H !)x CVJJ-XpWXyfAW5TR'LU5u;$J%7 7LZ2Pz&F -?eemzcmCbY`b = `oΆZ/Phѧ+}p.̢?`2X92heD!@"l`Fv< q $ % 58.wiAAꕯX*65\o8 6Uza8ODD^HvtB btr/Zjm70d+t)>Q|(C Qo)B 0/ ANHtc| p,ͩ-0rt(MKII1ɉ*#H,A@dmyt`Tq-]yTa f00|!+!XpHW *6XbɆ.4uŗL8e"VI %v{c-rޕ0b dY1n@hp>o] 4B5.|bPY'YU#  0DR@g2 @T K0B/@rcL0-00@KJH7;y`!jrjHE"-aeZ WED2@$kKK5pAH+di'B5fo^$GB9 HlJMi4΁ﹼOIJ9Pt/`0BV }A+4M`M`J.X ÿP58X@ ȁ"&ͅ=/]mɼzrʐ^=t6JUx*eAPTٝ%JDD'l0F"_ā$3׆`9(9<>AhrqE80H:JKH‰ЧeRAWt;8]@7e9CnK\ENkrG$@9nB-bw֩ Ua $ܐ y !ftr )po$4%%\!Db;\BDHFV*}K;)h6< PcQQ/ Q_>DxsP?@F0VaƐrE!!F 0 RV ,p t8,ްk^,U_@ h`r{r 1Rk7ApсTBAvdI nR53 #TBc%]'yc Y%[ Dh- Q83\>29֣'ђP3H.4Ȗ] YE!E^SSmS%F(|nE1/r ҠN o] ~YeQNWWtP,V aja) A0֩#KEkq(@bP!d@1 o9P 5- eA1 Sb9t!T]2Da;uY 750%"V- eqYm]g 4O@;E2?Vd!3a ]/ 򚉃 a N)\ `v@]PtJ BEqU D!Ai G!A vjU-Ia3~@giB0 5AQQ9SPXi":{gs\4z /2G4G&P"BD!%w!ew#Ed %]s:G`(R2i 6AςӕXQs[& RpSx$)p r Ng`2iFy? Fit@`ptUp+W+2zCLB qEv@ fʑ~3q퀀R+<s9HUeh<78pGrr:0S2UI:*dfp3{mI@m?D؀b!rY]AQ&.fgf}{h?3efScHors?!T/#U1-71d=! 0ʰb' Y# tqL!zWAqg3=xY@a ! pզ_Bq98 ]G2#vg @sfE"Gd 16Pе}PH qyN"J2C4gFNG(UFڙ]JS8p$GoثNH"e $F!! 3%v =n[O=Kl-?#3obj*`ؐfVPN?[q* 1ciU@S͖h=9>yd RV,ՄΛéxCy8X3>goꨣZ/bÈ\Ya喑 #)|'Uz$>gFhEU!B[j*48*,$,(kƁRL6H:g >qvվr$ij&Ɛz$!!Ij 3:Kkm"l9c>ײkVf `Eks ?cp%I-b#[\s9Zy &=X&0H cAQ,8Y f^ NDQxѩ~(h#~iX6 hIA"4) 2pL$E,0}8>!k! 2A @4Ku@ ъOJwYEO93D&)EI-4y@ɏ%aA2P+:noSM}>:6XdV͚vC`M'ЫdF<VzUJ OaE/@ \*:H Z` U|ᅅ!ҨWg+p >(A1QAlLeaΜDJBpj|2`(s];3%fӔQ(HtρQ96\t3<)c` X)d /NP!HxrCۤgO񏬻N gA@CKTt2qx:3ُ: 1f'  D`Ȋ8$@5p <%"Ȱ0dك5 3p5bkb$eR0A}aaЙ4#7u1fG*  Sb$IQRBl TjO C > y:NS/ri`n>Wߘo"(Î .KCU(>Ǻbx7ڢʂ 052SրBE®Cfk$`JFi7>+X @W I\[4Črm\͎43ClVG%чyB>R]H:Ds:qM6$/@(:A V =QV%/ `790R[=eUDh;Cڠ qYLn (&fpY, i$() őI`-H|{m#6I^>7T(ܻNǼ+m ccPrut l,}Ґ4?#~h0\/yTpST8z; ďo@y Ѓb;801 m3a+V6"P31( u뫟 PEB2h}؄M( (n0mx2B3y M(-#37 >4o`aX\@0. :%c3U`V0iiFH8阍PQְ. py~ Bi82O#"# h0caU\"רH>E+m#лlٺ8(8~x>2`7x":`*U6phhoJr, M(0nHB'Z kcü8Oc40py^HlD>[ 1Zzn؆(*H`ڀg DV`!pȁ. 8##'BYh ʱ=2”p#hӰx[^P0?"Po܈xAa :`)j(`0ȝ:s@@Fg08;8(*bXb[K t$IJXh>r$ _HHdd@߀E I0 a1 * |` 6}6q@Ϣ Ϋ s"ԫSb+ F=+`|.D1!l |?`.h ?Ա.^ ` .:a $P.܈ʹՂ O;  )(h D@]tK00DHPhWPQ8Upb bz ):x@7XpA]8I.} 6xM*/d!UH%0D6`m؃ {STY@V<5UX(D@ V1l{AV U{wH҅^7$laŁmYHҸªؽ <_ΰ=ߪ@ʀ'!xG wP+`.|V]a9X1(bAR])M`[Yݻ(JC, 墙H۽\KJSh `h@dHWs S$VB'dVHH-XFhr!؋5 ~"+> ^]b]:0Dx0x`K d0)@8B1 YdвMcrM#dK8&j[( .ȁQRM&p#tpOh#X<[rqBAB:b`Nc5=8a5.$V91ɤhK|)҃ĔDD180h!m˭&\i@ awTO1 $Y?Rsb`G :pM) ۆyGDzY@s2_f x9& ^~!͇#G<&({"SAd8 e9Jʋ2/p=`>9K[޳.(;[ۼՑK(2c\nmxo]t!eI^H5@/⧠+| !3# =T§HSpB[zS9p ]jY noh@ZVx$H ]8I ȁ:p8VRۏ`c(RH;asQ#Y%XyZ4B ڰ,3,l80疳x>6Ŝ)z;z+ɭp*|OY 5(4,T@t`65Yd $ p |a60ɐ$ (D)h!yA irF#0zT'P(^.MY_NpXG guhN<OAX 9 ;Νg0=;k|^(- UA @%Y axG|ǀ^8@`WpyX8@ F2EM a)@$ec=_%,2YR+!p(<Ԝ<o?Xoz )k?/1UR R3թ[iX90a§O FLh#QYd N<+v܍`he&y&"C)]) b%%od!,I&ABRop@9dxpEVM.bD0) z% EO,Bwq,Kq'B"2M/ТG ҪWcfb`O9p ]&x@CR I8A;k (R-M.dO* SXuy06;ذZ;c @9 4P4@gG l1GaAw1%v_J}DI d7rrb(,t".}sd"t%N5ðrOՙbb EuxFrY%U@Ac\PE@}0‰09SR roIVE0Q#@ kZR{$>:Y1< Èh-IABI`@rIT3JRΑ1xC\\2@0Nt=Ie'D,] RD%@gC!B(!`|X'lХgz%XX00D!0 3: BXrh% ~Ca} M +ż9"|08+3e[]V J"2M[mYf%L!I7cXV]*rC%"B9¬f n⼁,$T5`Uw8:|$pOЃT!2M\W% qg\b%<rބMG" Ǡ"T=X"&)r% a P\.aSDop$YVH`$;E$eKqBFa& at[9@чgԡMc׈# oxCzC.G @+ 6"~J H$o8Af` EUs\U:\|-(րB ;.ρ0IYE,-)(C{u& ~ȡ` $A!KHo iB>JGbArLD׻Ի,doB|Gdhi>]!û.H9Xb~J}>& u SVV3#IH( ?HIׂ`R0W$eXhT_0 5"`RrFlu8o^ [q9p( \2)PJ>U$a H .!*"aIi%r"ì)B:%,*.UM1s`E"%yHЅ5"pVo!pGT1@)-1/$248hG pfc@~{r|v@}YƽS!Mb! D>KP-VrP}g.Bzsr8gbfv[6ub<Ա+UP;iSZ15A XiOEq&8h s%&W8( \7o:(DAZ&L$ a QM$t I 2P*;;U(H!w25)_4z7Ml{QD4!Pcy;P(; YzbG #A4hiFcB0|}C21NP9#(ưq!-T, 0 9P{%;EF5@7D@d"Pt9`n HŜ xC ,(-)7WR@EB%grA!6,D}bEg`kCR i.{Tv+}-JH˜QMDQ@h! Ac+_I3fŏӳ %SdF%~u kBQR/OH7U#U&yYb?c$%y34ME1J:HGX0rmam&7RN9f ԡPbdq|K*@M7L1r.WCeIq*>7@Exz-`D $ō6g0ΰ } "rx' @+;v M l8OH`S6e2MIcႮ`U2EU.E 9gA0׊ !'Gڐ78 "م5 K{慡l!K \Jh-UGLj=Co8Hx%$5J50 )D*NqB ?`aQ\|%@a<2m6XL%4 A9xA.({6 |P$Eȉ|tTS빐%Hl睁i0$AAL 9ShWRV肵IT<\VrXzMwGĘh0_4PS9GRDT~A-$O+֋ ,O@R/~bP{T~R\z0K7(OBhE+V8%6E\8a`@ \D)$Xd-AA%XHRt%Eli0dM Q@/QDBLtՉ¡R@肝xP0vFC(4)&$N2tATo DW`H'u(zDȂ@O|x(((} i~hOhŪM܀.H-h::@MC$tȃ,;TW8U> C C(P. + 2@IaD}G(B>,>Q`@9.BL@*@M*`F9V"P% 8@rE7)W C/L[DI'r:~thX1L‚!:C_x4I{C1$IB*G P5aC7tVC-ą . heTvw1{Ԃ^5 DW{5WA b''U2TǠu0h9GQKGvm0@*%h5ZiF:s%xT׈x#<)r6 7k QR̀V<2 a?YmQ4ր倉1-mNNh !C@'X|4j!=$W6X.< 4{ kUBň]v&3A(PC+Gu q*@ȿ}%a ) eib%V@@~X G8%P(XA@7Ph6(`ڊB$Ժ(BIؖH-~rdA:1P dA43XD$z4+(Q|)FOV%ajY>Vƍ@E5g%M\hL+'Lwj{R0R*=B/1{RL/ AD(I_FDFPn(bElIoˁ[+k+!("J)hTp,o%4|u{<ЦCH-)(FX1{ iBl <'X8uJ  Đ^L"@5&$V $I 5!q  ata5b B3?l U|c ަ,@pr (E59hw"ິZ3e5Y860$F@A2 %fXȠiC Ubx UO | !d:dU\Ep apAP6Y9*Yz ;,m5mtө{M`cz ϱF<4R Oh Y>q841! h@&6 At'2d8V1 VI@yC!8:*#D$`斩%! i4JcA@ acE0{2t`$H4@ eFFy#(*|<S i+*N`=P&j@-ᅠ^X@C.9VһV[ h0Ƶ]q 2jgNHEpe,Y /R :10'Y(>¨$HpC\nG B`H9 Bz5_S{4:E$ZI@jaX*z4*pAQ4@ ج2%h Z W’,FD h9XXcxD84!Vu 4*ƛbaFY%'Ijۼb !$VOb%ZW(\نqΈgN8jUݫ6VP$\`T*`cY7$Hh$F *%|KwH[" 8*}覽$&H3%qzG4VEb]zIAh!ZD4QYedq6:;CH4=qFC>G Șdʡ.PA#@ġ*L¨"7hL Y!Q W\ Vא(LsaP#5)H9xQp'#uuxƷt:'`aMЉW+P0XjUH8_\$%1%P=!. EbaB< H2 ~s$xeuiW, c[X-@*C?J> @BQ 0bP >D#W  nKXt춤#)c hk6RD'~Qe@3J- IoopEs!yb"0g>>񎮀"glBjRN I&bX.G01ҁzaA($@L[<>`^qB2 `Cޡj D_f60-B2"Pu~)N! NJ [݉@)r c`ᐪ)Iˑ`rEG*Ƣ׋yG#`:=(6 gT93pCBP1{ CeJZ:yA9`g|I%QI]ؤ)Lu@-jD:3fBq0߫#|&ZU1ЊT#s2ΰx\ 1 ",Rg.hų ! +2չbh/Gbg?WߊӠ'ǥ-N ԥ/ d1BL*"i -:m "RQ`bU)#o~XyR҉4 Y2BD%XqQk\=2WAm^pHXHA:b N#A4Y |B]a35 , ' >? )e, Vk;4!cq$£"tFjC[R'M숶h=$ DJ@Zf :  f= I #~Z" PBXV»bz+\b"ND69).C25 F! FF rmH" Ra`J 4d]u8Gf` ~o~H&xp( e%"&Lxi a Rg&Hr2cUH xAX+j B4vV26JƔA aP!@Т aLJ CFp"HPPb, j=f V8 t=r!ĭ R'ID%Bf4$, 7D1p!6[ aʁ V.@"X}'vja,! hAnV %+LbƀhNvlGx`;-R5>el l4:n@ NAZaUA8LTG$c b" V᠄VJ`"\!ɤ n+2 5>@j@\@D`)>t8%r:\,0>&@+H+FaUF(sF"Xapf5lp0!of'G/4(vjA؀b Pcik!BV6%f` tmta0$ ʖiH=M f:V<c+p{q4"6eYu@ Nnna#4 * ~դhTB2ڠjQbf@ 0Nn=P .!T#%0" ogZM* 5DX1XJI#zdH $&H0**f&Be`pc5+@\af7\a6to`5Z RI@/@`luTqHڶVVe=ṕ Vg \z >N pZ?l=NA &! z\D# fbA1 L:i2@LEM6 (D$0  :vC:yrb@*ƥh]A&3Bz 9$Ҁmo`f x~N#0Y2j$PF`>k&@b!# BZ)F@ *B2al1 R P7 ֠꘦ZӼą69.4fO*4,e f/ jL_A V4::0.lEӄ p( iVƕ 4i4nud?L柆 ji/B$=A@4 m`^cHPb zj7!C~HX!nlmzm+ @ngw8K!9 d:d 47ER6E$&c_+8af:A\ajA( 8Ҥ-Ft> IadQکv4e hᯃ1` h5Lb.#bF#d>@a&f@a &e* `5  (- ╆`pv#@!@V@C"^GhKir`J! dV>}`n4B XAba Jfmf6$? JYĤ \^rǵE!tB>Ї**Td1ƍspg)Rtp ʃdW'biI I  ]eSN;x`iB8f 6n!N@ !0쥉$a\W!*Uf* P/`Ĕ`VD>S"vɰ8Pkš$bXsKq8XԅR$Cr1 )Sc?-u (T8LK60y3FPTq1X Wd H<@#@,4J t Q[|pSpDp7u#]04j% xI `#'hPMHVE]A -xJ2&@c' 3 Au ;nPkG4ßT-AA@?s1hAAA (N FAkjD+@FX|pS̩C=-G\< yn,߁:Wt@3|w3ЁpQF@,ˌw/kxSAI bHхLaìrV1OC$r3?aJi $F,H, 7;X%o2$LD a $2ȣN"d0(AfJ@LCW4, @p|2Q#|CaP_?,190P8ȵbMz5ӝbK)8z;%Č'HYBZrh S"CHp*IV/*@ Hxp- 8;>bA <&"D7.n@xc~yT_HKxC A2" 7RG)C $!눣Yj"3%l\eO s85b<.4Mq՜x$L Zblh% b0 Y@T* n" 2.ƒ EH*C'4%<5?qІ!QY'`+CN3AA U(\<&IXV!^L2a + E@Uhp!*zQ"}o0 /H9a4CȠ} |Ĩqs]N0R0 \IԦCBu(1>3o8h5P"SцA?Hh z \` KdfH1 PE,FZכ{Pщi!X]=MMQLθЁdR"$H:p8<Bф [FV B@gPoJC8R`=HqK(THFN]x\(%;R|L*|V#:1 L1@^-2 ( ZEX#+$i% H:o BcE\q*T g0"6߹,4`'\yN /=oo )].ЅI$" }!oqLZ\$I Ġ&hl GEbta5DX B,a%UD,EbX?ZA%*[3i Ps E|R՚ȱЀ4HЇNEi|SE(F1Z1PAQ<|x ֳg f \S( 67 cAXW Ȑ`@ ʄU\8 , ` B *2|g^s-rm/FK ";S:t fF^D o =Qbs~EkS_(`t;c!}0U ivՓ5CO!WFkaOMaJ4  Uaŕag +̅qBr-0Byw="p9Cgr`Jk@ wr%2Ah-gB![Ǒgo` [3,{V,gHtpj`qyBkgߢ  rf}p`p<?"sm0 r41F4̕Q{!jM &A`-;P P =1v9wj1Uv $Q3p0u-0&Eq3ubR5F&FeAdWoZ(Sl0C `fΕ3HObH8WBPQw$qSp pUQ a }+Fp 8?B Q  ^0pavP)@p6 #Ј=rLZM>"1 _s)Nspgan$lP 4ݓl;]s p,p6$uƠ :1 6bAB0skCf XG0 p,.b*u hfe'uPeDؕ1]8}|bwgr k 1 G ;/s p6Gyt)ǂ0vr0)S aPCn[) Ep@V$`$Q@$1s> d Y 6 9 ^rx' zzZSQT?`zE7E\߱-E~hP@p-fS'p 10'` u 17Puams-Z@kB(;r46 2 Y ,]5W [@tEIzj7}o)ϵ ߑ{c  RP/C}בT10Vp=k@Eoq !e1p8,Ay@2+qKpHEPpJ+5rp K:E'@I Qp[0P' Z"3DT`LIϰ-9(8pup!0}0} #k@+6"3_9a u} ^\TSلQ sa]CT  sC FPs` D;V4Q";Ck T5փ8P 5 q(Nu; m&X6+~K+ QLPu-]X| p 0aRsÑram Jp_tWy } *(PIC%LmP^%Ŝ+Mml @#)\ZmQO~o.Bm(4*Us@#"FOF|;d_`qD '!|2K !Xg#f(b/9 u}8A Z8Ò>?YH c8! M)G9EtʿhX$qqg0Sb@$LƤ(K ĕ4 gZ1J`"(XlZB' 683/K&9,Е)xfhy&Ze 6.2ѥXU BBCh,d & b(2Wal3db ERGK +D4(1ʑf!yi\*zASA87\V;(bK)K=iw63I1tҼFnb2j+z鳈$(#. fNN…#.6 #胂hBfA qnX,;袕1)hŒ9DK*o ,oy6짎g&`' Шb`4<)ݼ}#>(.z)u W~S0$qR pi-rU9ޗT CW^u D(ۋ6lbx&5h-&vFcd ) dRl+@WAMz>55$ ɂU> `F0F?& ``1b 0aT:2Fu~|B ,qxB  + RBdIV4&F-Hl.%;@e$)KBA\<h )G Њ*d[85aEJB @構yQ%"d?ET~sL@"18NU@pϤ2A iA?qr̦bu +5|Km1!!  vM@${B܆ÀUcpzhLvk80ݩ: vPsO\ByE 6铁'p>$PTȁ !XGqej1 U :"M;QZpE%$D @=POWH)a)`';qÌ@t:L`./^@wc#T*U|3,<4y t x4 J[ŴQ{ѩ됒 s:P)U>q ,KPP%00K@` Evm^L,b]0G5'*q GVY@.yoS &o񽽐DLbjaCYƬʈhmH@֘6Pb1UIbPc4 =*P;/bsATA!̨ / PMI',24-d:Y̅R?"Qd1!82eK \3`=x`?![rxUIa/N0BGr‘ps'id [g pgD6\D80L)1<TnI ho R^Μ(YQ\G/quB8,nlJ &bN ON|bΛU8|z x1H_N:y zwr9HV8 юxBݩN  "]ؔ! /i3K! ^Hm8c&+|[+HsR(;M׃|@Iq!8:B`7"۸>jx"57PHx0Dۣ: ܂tm}*09Pt(;-6՘a2W6 /Vc U(p"p" Ըt"UEX3: Yyc`)> yش0OJ;_F@Ȩ`F B,Қ`HJ,Y4Ji"0 "OPe0jY6@)ՠ<j@@XRYrFQ%4]D>(Ýȡ.Kܪ ~ x*]=s!W x F~>xZ3 0i!`2WKȉmz!ɉoɅ5>CJēI gc = +T`(]@<@ Pt#`"} Pa(17*XɎd4b%Ђ@x.xa$bxQI=X&Z[I  pE<,nز(x,hĆDMr38K3216Ic(7$:ڮUعUŽp@ XW\b ࡀ7c8{L4|))̂҃09hM`M-z J#`i0 m8Dt8У(@od~џ%T*)~XV `)o#؁Zx:HE[|,VhH0bSUۃ0<Y q_pCȉ~K>h O, b=P EUDt~ H€*YBXxp0WW0&y0HLh skqm"h)xam8x@"T@D4}F a4SNSX6Z,yRʇ4,@"9%K,1x".pQ֍F.!HbU؆6/}^:z & 503 *@2ɉ)(p(l*m- Ɂȉ:a63[ZPXQό郉m }x3`0M,DKxX` xy LJK!hIP]F8:%  #cA׳с<[SN)$hUX*^:[2᧘ [pD p!OxjOiVдe*Kj 0 ЀhFҸЁ0WCJHt:M%T^ 7ha(Jc"cXЅT B0(@D4^^tD؜mH%a@"XF}5(pЂLl^0RY!Hn$9SXHL{Of$2\ȅg]REzMt恀3<* hrRA/aR:^$( qXHX^EBuZ9s?[# ]dIJc8H#>>]Y`hxnɂVhKj,]$2@7/n`#Y .{A:5 s;︁Q[g:X"#|G7)@"`%`%ؖ \9DO[|VBX` 1¢In]&=SS]8#Ȧ>X-oY8v 0 !JƫEꢑV@1'!S^)] JKk9H*6X))9࠿h 0` !>8w =# mҋ9/b1|=zci9#N(@03^dqLp `r\*ljXj?G1.Pa]|dzV6KMِX 0@[,`!ÅYxN*_1Yh!(}PG6(YLV @ ńOZ8D$ذ/2e!B0 jcs@ia:P|0OB\b獱b<Cȕ"cC$ ܌Lp~0+no ]c \C k6CXH , I y<!fxahЦU 1ۖN"JBI&_2$Z,Sit~ x`9w_Ͼï^ eVvt!1E~Ȕq uv(VͲ@`e>P 44h@-̒!Жm][$ٍͱQK(SP 1)TVi%t跡~nud tYSe}xebsIY ̚|'ffYAMQ>>!P#5%q 4H"g駠Zd?BY]Vf&  ʖj@P$ `@Wk,Hf`߆h' .&A: XzlU10Jۆ+"'M?K e@YQA}b8 @7en+@e1AjW [uv/! Y /b+i{<i:[qJh(a#L`_[A5D t~B:?eipㄉ2Aԕ8o!0sAzC*P>4AN2 NU,ih @k0(# t}K#'˾NqWo=N4CBH 3/+CD}A8EB'tO09AݸyA [#H: 7$rp $CU@NXB:=06 %1 g漄V!ZBS_50H< O0 ijTH (H-.ƖIAj,*3qiͨD-WP!SYώ~V4ܬ w*B t` |~!AX8PG WH2JCH\9;d@/SD)8 2 2`uтz*U`"Ęm"87[QW+b"1K"hK_*+)QZ@XIY`< c+N I2  N!պVTYjb/d ݪC=\QQȅ Aȕ߳)!cҋz6ƏSTQA hj@ \Gbv Aqx3a01wT$qɆA偘 SAҝp I 1R V͎4B_d}i(؂@/4A񲻉)D;*,BҌ AUdQUt<8 /~\>'Q{UIZD ADpDP 6>ȥey˦@"Lq/6HۋU<W(NFZq; &g}"CAܠZ! HG㕁YXy_Sd/X06 Z %<!b1?!`cwo")8:SA2L}=i!cKN:'tznz. Hh d9`0?P *4ʻ_5u!e(0TaGtDOy#x<ρ\-d @zPóUAxܝ T(Zō'#ASBbg#Fkg*"v1[3X2FD4_sj-Ԅ `yK3eːHb`kqGt\nGn F\6ΕUwHrQqƑxe<4PM 'Qv@rTH,1FW}d/ gffg,& /&6iihBb.-&Wg(X%b.S%xJ(@V CL`u. x ِRuX!Sf4+H FG\6y~!*SLY5RC})'p1"G4h" S2f(`(SiC?J Hap1SB)VOFw)dGE<*LN2{1U%|*9@!у1CFaYap\&iͰ00HyrExBrCu5M)GB'aDDk&(9g#ib-Sbs.(qU6p-<ؕWf|!%Ybot` 3%XBQ,yA,֦]$54$b\ƕ4 3#!00q^bu(qtQiP1@ X0iXsE2R)7DmRr{v|BD)! )0#1.}!>0=RbsE(peB:bB"aЋcIqv!{V"Ga± 4T* )_v:7ȪvQ* :ipa2Ybѭ'#s{ 7q*qJb )iyH{B [Ǘ1-{bHrey1$j,: ` Q10#pAh#CZ1-lq Z>kjS:!T J[b L[k#sɸX9!KdkCZ6p{Y6iۮ9{ 1Z'HR//$JjL A[ d|R?(aq$о^ ;XAOaA  OG% r F˗G{#m!aှ0 1$ *H i95bH(S1z0pxRF;fʻL])BJF#Z&a{#<#̻(l/|w$H@8L֪W& Z&(Akka);:yO󋇿ך|.#:!k[*QG,Ѻ<AmiБ yk+Z,-$ύQmpVކkWT6W ]0QS ȞQ۪jPwA9[%ѹ˹.A$Q<*1 Ie ;뉘li]Q=֬倞]~%m[Om'ߖ8A!q!zNŽ A qm~Zq⃞+˳}QࡪN,p%AfFx. Q!>T-G Q^Z !'mu}d0qNxaڶQ$e8H;čW[&-Эmm1ڀ$"9$<_X*{8N1"1k|s-"ڛy8zqe*qݮY&aB{(O!1OZӬ"R;-ay/Lׄ{`_o+ 3|[b"M?7^_+n0t )Y !i}ݪͅR^m_Q|m\B0a[[v " Nxs_ qɟa\1_Vm=m\ҮirH=iA_!\A6Nb/((ѣA >9II)UdK1eΤYM9ugBrIaPBRM5}*ϕ-lvuÐ*ö$q,Viծe[qhbHݺTנ~#ރS $|pjN4%X։'"lAP-ٹ$IUfkرa]&V5Xo"@%%I #a^36wŏomG7T-Χr_rE(xA [$7A"pB +p5p{84DC %1ަBb>Q"%RjF^x.̐"M4H!gҏ"/TrI&tɃI6lƶ2H,8N?#0RKe,hF+3^: "c)I(O@.5.JJDLH#H!}1n:e$97;W UPV[uUXY: Lp F*MϠ},Z%\?JH))S>J͙ 8h,Xv[n-lJ˔kׄ5ȸ`#!ܛb YHyĔ4cո"rI"5:r#k?BnV&6jq f61a,e-0 Kӕ*!w'2V^\%nل %_ L骂gsbàb'jx㠃>凌Wh1}LR#W,E>N̆^hɢ3#95B@fS:2Kx>h=ܕܔ#-r@&B&i5Y$*SHs4~#"鍑u6d%[֥@p5싫ly˺tY8fW(8fPP2-R)Fh/J B%H#`6H&0b r't R2, t0o:HcFh-2\5!]ćD0HGTJÆ:Lf1qǕu) ,hP *%&  2+&!<< W#Kt%ԉN&cIZ¼4= !Iy+[G F1YO]3i%^'ZRwk+1mMP/Z$>)&$PDb?߶n?Bp~o̞?B{f,_H X/8c- =.ҙ: m)r: ?Ha1ʄLiPR8㾬j"7XPHd bA(47f(L1"  b |7sSQh9Y,ɛ33S!@06 <84$2BʆusJ[U 1r|XVF ăPLOHV 9HF 4(KM870YeE39 @ę@p2O1B MBWz%Cv٘J~<|8Vo/@M`;ɕ@Ǽ*-˛BM$8ك9PkF5~ۃ1zD:mG<dGmܸ&Ey9AЫLt ZBZ1= SPVH߳GO5AϷNQ7|ܴ3O"#k\h3-|^k 'PӽP +W݃`u)XX)3㾈sk(ݠ+qb=eE f@@ĊՃÄKC8!lP3ma(8 8;>LL5@̕} obtDU f`<{؅)C6˳YO"R̀yd3K ~350b*YVAك"K϶hc0-cvOeٕȳ$pkHJdbȇlLc>70HcʫB6x٤:@}-n#]SǮЈT<.Vy) D lF(OA—H@0 3hM q`0R<˙(?v#O$-z܈kOKĽШ0Cc~hV =Pn!~C;cQxވCPV|@J04|0Y_X˛{M)D۠[Z`Af w C0Nq C jV[\=RR=~ ۤL@8mFeDDZ&.ly+Q 6Rric0vBK`HI(_+D[@<\Xl4SvǗ^x^z[+\Ov5hNfm6DZ MkUkτ*=0d#pKX,;;:#2@D`J޺۞|0ؖ`qg a ^""o"w3\k_PC>N#6wX.r=c3|H3͏Pԯf6bIeEr U]7fr^YGTa`,bVDXtbŠfuX"XK 9& pFy>ٽ"lU?[wN,$F,c͞ Z+˜[ "@ @ H+aBhtm] g E qэds"cM1:1d<˽p"Rs"̳rڗm %3Y2M)$p} uA؂"WhP^G\vU ቭݪ\! =:/hhF,;ZˍUļHVG x2?`<ëNx Đyo,ҙpr]H.l=TEguȳiЃL2SYxS'W4?ǟnz̟ऴ?}Rܦ L+ޗ0qmpY0qQsz&s&EUH a@YOX"l{ڥ/!oԿO/G<衧 [s#>㟈,Vۓ f|&{4-H @$C@q l @MRl᫇S*f!C Q|,i$ʔ*Wl%̘2gҬi&Μ:w\IOA{rcϭx63](БfBQY"dx!;_41! f\i(-T 䔎7$YT̚7s3ТG I[X4bV][>{0 `Mr5d>݆d Iý&}=>Qh;eŧI{Hx * :ZI|@L@Za5Pp%Cn ‡yԍI(0uؖTQQd!GǏdeTeX[('@LPyT` 1Q@9R@`-3"5PDo uy'y9<vŢ6$!C^ؐ6U2)X 2˕"dV;rGTV@QDe f<$ @Q4XC̔ʸ+@iJO^L䊒BaUT+\I9.{.Uȓ6NC.Ѻ P8((v#l4c`r>8,5)0j=Pi*\&0̈́LFdXtI+{5'AY3xQ|TK-latf`k&  MVEj*[OG olH-./L!X3~d$*5:IY'XKg$ g/a ;Mf0@d/ E ,J* sgԻ󚗙px &2_Jbڟ :^˙dZp-,@ `<R2@A 3H\<|#U;x  r, A.6Hɉ@HHĆiD(y$OF`2"ݲdH;x:SPWi)i qr@ͬ&aZ! ,2 b. $#1*ܠ"x*n%]%:ӹ:ӎex ?֐͂)BƒXi2̀')ALC@6Hکэi;@*aDz(&i|twt$={6$VN N@Sh7*ű $d>0GPON݄ T3 D}݅0A+D ȷgܖ%@@&D ";3hRL@|$ T@POPD|lDeDNYR 5N(FɒbT-Ơ^nQYCP@Nx%Wo/mTGQM \EE@ތ8K6Ƽ HN@\|m4$bмG3^KZ.4D @C,Ѥ, ʹ*LI`yDD f6HM !\V ĶqtVYf X'gU(țlRC,R5O4V*SfdwryEfeH #EC8ҢAzA(<ʌF8ttM(iU( N)"Έ iCLGDHt^i2T]R cPOD(iE偠@Zƪ MW \TIpgE]I&+WC k)V#4DVħUDszhNzl\hfhQ:[h݉XIp*InbT-6DlcSy%E@^#LJ\~U@dEdM$0D9}FCP3İ*ff,;1CVd~E_PD.dLJ `FohABߙH>Qu֎ŖўKB\Q(+KG$,6@MKfZ6vDVG3KAk羖0ŘfKH$ktrM`sLtۄ IuyJxWx_@X@RbkV7TxrKO ]9lKA,rZ;SVDbV0E,Ry;o&hI¥]Jlu@gCxEs@8&\ p@zVl(2Cu`E RY-KQ94$GACD @y,a/f)&p@<`roq^e/"A'Oy W,8-pv)A(S -!l`t@' ,qX >GLi(^a;;V RfUbEAL9؞˶zW!ăV>WpNo.(B. >fSY/>kY}C\.3vIy/cmCJT5,dCj(ĬYfpA$6KÄ)VXW^B8"/4yZv`%J3iִygN;rChBk4iR6khJ1&zz: ̸A/JY* `,J t@ hԆ;Ű̴Rl#50)_ffPx":}0 hΫitY mݻy^'n-y^}{9jƸ^fĻ䎒s 41LE"2Ch P@"$*F4LC! @nzْ4rdU\QrѦ= wDt$ (bP/-2K./*kLON KNR$4P$qDv}NUI~$4` _iQ3hru HԖҌ}BI3'^Eb@&#"brEv1  }#r4ay= @;;ܳ,:ISTW$1!C"Hy`BHQd SĠ‰ 2lj,AJN K8>7!1!d= MD! CqQ=HH;{3 M։_M t"m!~@GMHډr9*OBD0xʚ"ȓ(jLE` #dă";QR$EyؠkmYՔG)Sqo;N)b@]JCYQ!j(d,We0+P~WP89-̨SP,3)@TS&A6)nDjG7¡s L7`u)Ɇ!%| !]iJ'h2InTJHvnس0Oo;{W Uf4e!&xL;܁`ոt"[<AHHFA B #ygJ!&iZ 'd[݉#!@/,%#p8Jͺ8yIƄ -QϮ*fHI(/.i>KH<,lB)d jd&|` *i2 ,"< [#-AH')B!~pY#Ɇ.$ y»\=!d;PP#mA[L*v£Y 2 Ǫ@gZ!10}kULB( ~PtI C7@&V.EmZ5Ѫ^Kd3~o"C̱{ﮠ hm8"٘Z#b6nf"%#Тl,2!8+bpS4A2*E&p5pL,gxF=" *r @/&s$^B @lu;ڇld&"2 !$ JnBJj3A>$& n"6'! Pcf~&BsTH|1'j#vNd "ܨN\ а"dq)%t"C'"t"a$dN(P /-⃲\l% N8A0/+ 6op z"9q zL Axd AX~Q0Jb@ m`&E Q)أ hBh !mLRj.!H DA2t !b pl "`"fC4 r`je4xv"o$r5+&B#aH  aV !/nR`(Bc(YKؤ<e;b\jfed$ 랅B.uB@a lF(en(X"lAT!FaB wZ!>-lBB.mb.P.B!#*0okNx$$#p^ O2pJc!Ud3gb&b<2! @b8lA|Ø@f5b7JQ+D}Hۀ>}(,g /r*+(bVN&/!-  .aEb+Baj6Ag8$ޠ "s?bɏ"":`4!0Բi&6Mc%C&CdCe"DGt"Dbn⒔(7岋!' Hq4;*j&9jrJb:-+r$ނH]J=V+B*Ob^~4-(,)~9W !!( Nj6 "ap &!!"$$|P@Lb/Hq^`wObZ`ul T 'B|MaDp ^FA\ +Bb'-Y$0!:0hS.pb ̉/'bBCP#f L#2)"B4L6'Ve)s~& v| 3bWQf6/!ptzX@< mycU"HvJSZmBM%`--\c %lۃ;<h&ʖ蒗?µ@4!N,(V3(l4 8 AV1q"q+ -M& !%&L1!L=vfsf)N.  VOu dd%dڀ;ys"lt"Fx-rWwv*``4\DXwmF`9;f|p)<&$ Y,gbIM~D'(´ؿra*`#z@>zIb^kPj)B^O$_O%v zT&a W'B ?"r,hP"(" <b !R"RXb1;4!HI$tmbXG'npX&u@Xq䦴::bw@t$p!pd^}#dVKGͮ,^Ɩw&C Hua4иMd')c"F/1"`\ "zB ]`"VVAb" "Q«y;$!A )ЪP^LB m _Rhb"T4!~ԥ"\!"d~ "} 8K}b$a{&6$֚x""N fpJӞY$iX~ !bpĈ.s&v&< Ɠ$Re~, 0!^Ɠ'Ys"1&!STk]N/g-j H>-PYQ PuLrJ"|19}d*' aW'd|habA`ёW"!_YP ^O7B0M1A@u&bQ+"_Lc `q dx>t$8 HC{BVoy}";Q"о{  :|1D$6, bƉ!y2?\d8ؒ$ĘtZHCB‰eb*Bպr&`Ȝ'+:tW.,aՅIZj "WYeʏC?B0q5,+O}H"윭A3S4DM" ϩ alԸXóݼ{G<,G PDPDp ɓEp9pCQc'p-x>0DIA8toWՐIIFUQ<65u JQ^A€#Fi{(RD\ F}Db} J`A>TQ(R0;p%8čCQD1@=B UVYX50Zw@[ Z0723 @_S@FA@)DrfdQ0ˤf ]f2!!bH66 @>C z 8Tt!FB҆Aܮ?H>T&ޕGyȤ|)A8~MP%̺put[kD  @?A@Day~/+bWAm=S L1&җU )I"M5s0A.GtE4O +@OCRimAQRU:TC"yW`A |c^udͰWwT$BorաdWaAF(AXJP8xAdY$Q*Q eJҬ κg8@@?ЯnѼC`5cG<41u<1q0l|&JAEF4LH y h/"N^lQr\d&XO,WAV]V ;8ڑ bEd*T41}LmjC( ,E"u NN?=q#%AXh %@ts1dht{5?x!9;,7@eJGsR҂wEb GrK)p4i#70 }tZQ :v) SA^[/""%6F~ W9ߦ>\XF`腯)>@S nB B`'p5,u{}(51uH7<pCg5rǓ}|ua=Pr r@AY X Ac@g Bs4fD9A-r 2"*R -QtUp PGPP+wbt3@Xc! #` .$ljq4)jOXHwup/GR qǐ5N1 f T8zC8 |90G`n^`bfВ/Rb6*K5?Gtpcx{c|%P|Ljg4D}rMw^CWA}zDJuPt.!>;b=>p+Xh>i-3a[SN;(B U0g-t@# ## fAhn[t`5vt#Q/;g?0 +K! ]Ra%Oу $R~ )1` #S2)@8+ S92fyWa** '  V"a] fuVI [IVQj'pU4ӕ]b '`hI&. AJ}u[=p ͙UN~/ \6@(?u*,^M"9&21EW?A 'uAQ0A3d!qHWq 6kPqOZ9Q!q-ZU`:8ЃӏK E| V)21 :c`+*8/3+ydE`~2a I=SS|?d5Q`Hdv-`%ZdJ.`+:e@ gp|)PH~a8g!#41ؚ"O٥t)3QufMxY~9 Ũ2ĴtwPт!}җP{{p>a q bXU>*Qx027 i(7Uzv`*8$Im$zy (檮Z@Pbu;@k5^QpP=6=ށoUp Cup!qPƆay<< q9*D5>5+Z\1tfA u'Uq--A?PHt)habv /h BJ1rK1IsOGIi 1<3Û;FIi!a, q`BWH> )iВ A 1zSab1a6p9iW:@>Ł{ Gci@xb/.FF4u ó wPAl4@c8Fja@' |E`auךpZ1p Q#;Xf8&20&r;rO(#\U` \p;bGnuC?5Ad?s  Dp$8F-4T2k l# !2'0 Qqa19ᓎ0f 8e'S)/8o*1+*Fc,KpH<;5pڵC5@b@8 2`'G0+ 'WƖ '@J a ?R`!P0jQhfdHQ`[^`医B'%d0p,36}LLu=m!GiOú%G1۠K\wG']?Q߹UQy$  Ha˰ܪ Pp8@Va,g0H!p"ȡH˨4MI]V4CWcU= uP]/dM>ec"8G!b $WAJ_{b{m  |M?1@p PU`YgE#xM3 #fdӾ"kU<_,cP(1-"dQ˄ƧLDmp4ְc5w*k;WP4ۑ*2t@0gAE&D ^l N% b( I̒ OG8Dp_.!^VpS-a>^m #qq`L@~ W)a1(OD:ΠZD*ƛi3@&6ыb Uf@P/5P 3#1r00qq#ZWL aQ0DƂIZ dڿjqO~ p-OXwO?$`I4{G,p#K/SgB+j F # ݠn90 3 A;: Lw#^7ʋt/f,v5`@V//7Pp6G w0u$3Duvq c6&DIѣh<:y1GL' $άrq^Pg ZbRzI8&k$Z3s$ cTpy%&TD&f$*jRB?&$7&ڈ4AxqO='h&5hƸxǃ ;3<@F&3NA -K#$|5;d$t/Κ5%`Gg W%\͝.1 1O_|Jl~w H1Yn 6`a} 4фn`h n;BДb:7,hycF'Zj\r 7b*&gșpA| 5|ВR"hBɄG:ȘrIr* .RKO*. ,6Vh*a*H$)q`Z. Tl0L M0x`a2IP]!dxbeB\O0 3|T )d;4HGd+ۄ%",(3ykS&W, @6Сm|00YTiɬj/+,bÄF+;@+U>͇rx<-ai&5IlEPR23I _C"6]EmiI(ь!H7i i`2Qh$ ]X#gl*G4 M@PLZӕy &/Sn Ld `9+zh V#&1Ǣa<3Mq2epę);spjpNq|AAlַ=] 8tq-W6ƸX&C^HHD@l 1 %QuP81tmHUH $jq"5!("#"TPr#bTXPax cȀc5#*^<h /Q[ `(ORZ -!] !lHD@;&-Huh"% h3d'ymkJo# zk߶^ +$$7Ɯa/ Ly#G@s FIj;F^Z!Q"؝Z(2i(b$/@ 6p- .MyY)hp#f`o  c&1VK. >I5AcnDGiBހXx}n.<:)W ˨dF:ur1!'k -e.k'91E)ebBaX6x>17&=X"~q`zVJULv2`͘`\1_ۋb5]= O]&A8$0!cI*cK!GjPNjbELeپ |0 ^1$b"N`i9X >iHdRbAE!$+[Qe Z*AIۓ !'@&] *7/h߻IHnH@CNsu1PK[WSY5kckH:8hKM ر vȢ`5X. ̕ ,Y={,=ѓZ$y 95Z - /A"͋ bTC JM#$㸍85H87ˍLDY18ڑ%- !46(GI܈^4V3جLɓ`--e)9B8 P`И CtHx3؇)p} ÿCm50ȍh40z⚎c DʫT܈y%2Sc[SMA Am[+YlK P'[pS,‹sq)1ƚ(K5{k9:/H[ " *S䀘_ I((0;  GP CG`7#Q2*MAǸaMf292҉Qȋ ċphA%Ȼk&@4FҪXg{ЋPh4`&mPb<ɓ48I2@pc { aDVl%Ů1 (RLلHUMځ[=`gʋؘĢ 7P ?}+Ք]X8 ZyXÒ+&0YW1[sxaS5p۽ H Q(ԂP ħ\jۑOcs(PMfNaP؈8-I/N`)8ɋC݄B‹4 ?t5lZ@88B8BXGXҋЇ:=MU" eQLPQ<%LZdmr @Ck*E9?)@ Nq݋N5r o8 ݇"P x%d/S+=QD9 |P&7[00A]X-/L ( `b3cmA!շmH@ѪT@Hd Mn(-Gc]yAXP5; X8"(Ї ? Q=[Qp* K r%.^h / 4#K(0(`BMbsV 턏B%Mc F ӒB 1.J0Nsˋh MD  @"L:6QQ Rݫx} x h %EBQ`6:f)ixл)@ j`jI .|M2Q6?HmD>l-阮0DAވ3` 6Noe}inq~ LQ梉]FJ48_]UV n`pkCSX%߈d3,Y1%|z8 X 賨 >F^` bڜr`l]x Ȥbd1-MXh:A&6"_!r/6Qko& 퍓` ~(RD羆ΘX]Rz<=Pc.^]e0 qB= өL^iWp-!<杏vSnq 8Iāq$ jKRD}`nژT'cQX ^E Zc \#؀Vb04ҽ,Iad,yá87Ѕj͘w``Z14rjam[/(ZaT8ON9`Y1?𙪁"(8@ȅzemTV&;Mx`ߚ T,/ܘ(x) Dp[n~hɽ9k` 90<[k3{:䄀Eވٯ+ @ H1Q&{J9sQzv^@ӱcBq3z&5FOi/BJ8 ugwx갎@ gqȎg:-_D4; (mQ8Bpp[gEe$ cr5]8"J&"d&G {_mQDq&ԣ\r+d_8iTQI!F^zaTTYN![ H[[>T3#"!aP"U EәXCP>acD#4֘E"da,^5VyR>W+0cZBBF@A5אdUk $"ivVP @@"ICbFF:^B!F;k 0`b>\Zs E`0hb):f`"a$t%pj!a ⯹~ERt8$NA–1Tb$F/ݤȅX \xH*au!llEeD<j0E"̇l! yH!ä96˺3X1"J ཌ!8؂"!5Qmum(&r5jE`˃ڙCsILa[Fyx> BNfdQa^P" i rD"$  ::vKQR\!{&&>$V]D z8 KYⱡ3"hT:Yc&>wGL#z#]fsǖŗ9bFv xYH+Jfg,Љf篟3AzP9W~򂣀p !W㮨]$p4DH@\XO7`t Ї\Ъ֮j7 !|ѣ^ ThPZL<"JmD$4a ELc="[{t \;5$֒1P/|8Cx1XKqEABC 4Ft $$`EwA]\&׮8HI`coE"z^C WYDyEg @AAB-A0 DAmQB(NMfF쏳@y<Ƅh`FO PcTCEyI> UB/(c)WhNU @B7TADADZ 3xC -;2WLTVH%J&Y0ӵnO0.@fin܈8Dd$BHi *$ActuDtDs-. a}:`+FT}z+[Xv:zޱMMFHXDu8&Mc *kYX`Nv" E Je$@̘ Zމ؉;Fx.$0ʱBQn|9U„V[ D΍~7 $Xl8E#[T@\+ŏ+|C:TF +KD*TN-؂b[L$(k 6kTFT$@5 `aCá^&,"XldkŸ]KlE܍B@Q*HiLA2@8,D`Ds!Dy\v.k5 GF̷+YOCIipD@(bhF`5bMG e8M8#JHܑ.H QtXTh/rDZ"X["cDpA:9 l@'8Et"!lB.e*^ L\̀A $X̀C?u E 8J-p-|HS>E,*k@NdQH 3;AOdE:JHIzod&Ԉ-VTVN" s/l˴]78WtH̴]˲IJޮZסeJaDc,х<y+G{lYTpg!bNQ|]&Z @,dyn*IFx \M'@Xϑ*Z< E&*_.QdAx@ZU$BhMVT!cϹf"|E%DwH'_ČDA@>, Hw\ePC̆  ߬E (/2B^D=D8WuSGBu  bhCdE%lH ԯ%&ҤbDnD"ɉ>alFLH8aDQZ΃ GęDXfHcoBTAYiL–ޖZD\-E6xvIT|U5q)">K@Tg4 E+CB<]tPkJ1ID>ށxPr/ ܖL肿(LP>=N#AЩOҳGeDr8@~'KE0N qB\\De26 bb$+MYV?K 2m xLChc@X>k؊L(F4;C 4FH@.dc0H39P#8@ҡ\$ Yć& fVb5Q@pĝjA|\,Wu֣$2F́?ubXC1NR27L7'DygW=DDC5C7k7< ,@y \2|F\r~K Ӑ#}\?ć$b$JY%BC9KG(bhB/iVE,)KeqL8Ĩ^*%k(Y9CxClt=;ǂ\9uAw0pW N`&͖?yPAA|iSO ZR@0~\`K,rsZƘ=Kp(p|7MngsC"`X -@(YA!#( ^z<Zx+X-RuҙE끫l-!cرJ5,fв<hְ`=6:^H (sh FÛOB056 " ƚ"pjJMf@ơ8S.kI[kjkil:hB 0 #:ꃸ>ؠj'8e5 )  1 3@S9Lʪ ? Br嫈Vr*B0,(BZ "5 *( MΊb0cG$4 nh=r;3(XD N'glqFAfЌ;Y,:nmN>hY;Zւ#WÎ) N5\Hty%ֶ^h%~ Ֆo k.z%M&- a4/-2a 5r` "d Vp @ҧ;ajx&#LrdhlQc쁲[o< 6x0 $HVU0Z2id 85$ m#EF*~-6\MkLJ7rn,؛f%ú54Z#B$#]| )tl[eErBendR@\ 2">WArvf J,ATX!B,*Fa$@+¥c `QPє'G惷k+>@ (\| Ɩ qq w" x d.C RoA >(^4 lRHm„q!:Ь &a'Ƿ, ^Ű|Cf9ie(@l0{fx'lqFȑPBDR1ηъw VHdIwd`A퀨 ,H-:d ,H dzRG"EC,1vJtNd]P! Pr~`>\ɭ_9342IN&/ 40"&S|0IMyAA/(`I3~85BDb+$K0V96آDz(RPH`,T&L!CDדel94T224-^u&z.L9 Ǔai4YrYTjVTR h5 EV%Z4zpD "~À"vD# rE`]!1N #pLn JFa VVAÈ/bjb*T)F (LD*a0.$SR61@.Rf Jpto Ϣe?H 2)rF+dAZ FKFei  &B))%6Դ`a,  F$hdF& )F,欌 )L B g )bȐ (&Eza3 Ρ%lI4':N3z{H" :+<#1dA6ޅ 䐒^q7'R"Ub.`G7T) #4# d#S!&Kv0k Hb<j@6RLbm3>A+v+p \gC}x`=*_ Z( :r5j] :ZgYAR67!Fb6&o6=CV H$`;D_fv$0Bf v e[[>YpD}DI@#(b~66(T |@\j k!pj )l NHV~PbRJ%.R ZPB-G6.*'`0RY"ta0ˎ( :tAГ%ezRല'|J+:: ]d%%+02*4^-E0" \f>1>)S0t{,(`%GY)r5P$@'=2h N!16a"g 2CFs 0ڬW* ~"N^ ^ڦL &Ps l3BL")ZBZ7ASF%)mrArc7g0UUV`,m@6*up C* )E3 A*5ze "d imVgE\ #Oߔ( 89?)!@ 2 dKHXbh.aɽ*t)ֲ[*O蠨*J|{Jrqz2 Yd 6:)` b4@| (Ӡ„ bf$AL HNbyN&<)a+Z0~%)5eUBbPCBF( J!b+ @">"hhgH{YmcXF3@"RX6~6pРHdX > PaxI5vd#d̟p`g [k,VѬQ@.AbCbÅH=x% @c $ Y<,%XNhqK~(;p $@p d kzʊB *b 64Uy)J X,jҪ8%k )+0``T,R- BxE%ˑx\#J mѬ . "yzX"g` ndhf‚y+%#+ ™HJȽ)F)$j  /^I2$?.! *g`A2v } < ^ "v!"c {*.I gp%䒾7i2|Rud ~ @ ϦnLB&nD}[-=gweo܀ n!SF\od塈%j> 83Ç {pȑ't5`eC6 ɄaƄ@!$F E 9 FG`8 Y[tIs' :0!- hBCFȐAw/ẇ r@ᆁfOjF>I/RHFbfrQӨQ԰_?YV5֐9qv#aEP: JjaAqHOņ#nL^*S"UzE<&#ы"~8ڐ z=LB  ~ЗPA@x-U`UQC$4dK,NIq9ׇgxi#e$V5=F#8s44LRKĆL3CVB iVBcD+Am٥3T~PE,)OB5A'E!PttC4$ T@Ԑ$/P B™B*D9C&Of,sH^XzVB*lh%P=C$HuDpRqÎt-t0 5 %DBw]oCZ0OCF^&4Ͻ#E%&DHC̠^B0rt/ ![}Pr@)>$^C@)^@Vx#qb,qA !D,,%]B%c8]CNRLJs5SJ;`)C;-{l+ t#L qG2 h5 e#DVA9&-ћ|vJCd$HB(_ @b ˪ 1ju&`lZȒ!Y6&@r4CWC~A/4g$wVU"ɉ<$U.1/q Y"&A?DJzQ"A;‡!@2ع0"EHb^D^ · $V΂!ճꐐ+`-9$󺊊5 7s⧜)(nh+~ B Ds8exC喈;{=8p0/_%*}}|q'tc =$n O@IB!A9.r֙Ԝ5mJ!RJ&lZJ.y&E)yC搲ّjUc-66"$o1 Em$3_ELk@RB$X E(SDHP >,Y\ u"erlx !$tK1YepLc0ئPKWM "\(}; -h8!?(Y4J^uf㳎?+~Q-F&7/ $⋈>Zy{[nB|[2s:d6agCQ ^m"F,sX m\ сi }xbX.!1RQFׄ" IJ>RZ%Ib؀+HPIJH֪? Xbx41#xh򸌒pzqrbW3 2 hC &!fR?.MH$r:U@6퉆\pivu" uJ**Y($`DmHn rS(xI&'.1]QRsQ~+"{oOڙ6!PQ9J*qʕGʽfㄴ"ψ3bh/ppw-ܐ+uH $"-"(1jra|!WlY3t qbj;m;!YU(*]f&)-nچr]oH{۰AWWSЙN,,P:IY (i9Yz Y `tqcՉBf4!r.؆CʭgC ՖN!+\Q/@(!/ǗJ]8JPg9nF3$\a霤((IWF@+@и pTɹG ;{6!C n) qa Gq= .3rp2RGZ?{AKd cw,RU&%'(D A=/YyL/w&?FQ ֐%HkV%$;-ph6YgnuR"{'D{ h'Tޕ1EdrTIYy @P]Gd| :XLfV0w֔Fz;[ǃ&s'?vtpI+S =mtv!Bb-L3Q|- EEԑ}t$?Pn֠#a7n Rf #8 &)UEx3  B&u` BQ ) r/'@p3Aa !f scG:ZD!<V0)`#B0 Jqq-LS6H2gXn$h8`AG&H1Q}6]90d ! T[XorAX 114m! kLMt;aqF`mU2#F+h*2wPW !oE?9@aord.sG{p! T_k2'Pq (G ޡ@ !9x/'pu As&V,WqJ` FI?> "X"Vgn,DDZgNWaep@30Ax"::UIBuI;#;T , ~+z)Ns 7+@A~CRva8% @q Bq0|4 1w  uױAFidS}  nd_} a,ChY8sB1C K7E i0TUS(sA*-iSU"88cA.r" ]Rz84%G 0(-7Eo%`1Y<:QDuCRAKWFuW*B7c#I `9CHJhr#Lшw&rea5j,m1…a#Q/q"^m7$Qg#,u>1(NR $%T T9&H 0 d 1ҏ ,Āc2 gY 6.eSc IqtK, sMh:a3M1͐ 2ɖlxPq/t 85Vӭ ѷ1"P0 )~姚Q#jXˡJӑ>*a$!@kBDO}pqhP30b q!G1qIQj-uڱ3P,B2AQV!YykC:ݑ/&ܑ=mr'`ˢL{BQP+Wuq P !^TQ4<^+p Y#h! >}#vNɤȷB~pLшq# 231<  |B '82nD.[w*9 ,AizCQ-$EV단Qqoj.۰@8R!?Q& lA$$hUpB! QPrB)!w+iE Aa6 iVf *b ; ^I  +R'ae6L1a@H7#ˋ[`9)$Ҿ\TLſHp+k |y&Ѹ mSrzB2u!, r@x,W-QA_-Fpyg7L>b,a.h8σz3  EAO7hG`'! D A1 rrxbX k ac#VaaH86XՑXVh} 6R ih>&,UoRG@A% 2f 4 g ؋O#t(ȎzhPuqcD}e8L͵jyk -[N AN\ə# KAk@2PAZn(l]"ػ:2gqGy$>'G0]_M{0( ayƚNzͭȰS#Ꮍp!Be =:,/6" BmSxFhB\rb*9e$>U'!>*U!墋GhG5ow1p7"=C !: ؛(OhY0#}?G95uG@ I-o[2Sq^]`jr.0L`:]W MN 1 U^?+b@ ''$P/ VQ '3$܀Aܩ_P|#|Ҍu+sнF`z2L*I%0ڳ1B"'s`Y0(6C,qv mI 7E(^u+5I cRQp-#'!Ff&m*Gv  %@[r frwqVơ"`h {5KLH H Ae㠨nB !GS@$9,DFI1e0 z@U!XFmRaAڞ3Gn8 QFXMbE!7qD[+!1"lCS+M%# #Xra"WNI!Ֆ!r)sm,˂ B`;&s@wAe=R=BO!Q (8; )|!H   Y&8 p AȀ!۠BF J&,l,Z aIDh )G0CK $Z˂+4f "r!>≖;G (k.ҋC J!0Mk$ 6@K R:h[NdNHpjb)4P̚5LdBmDAfW`*K¶$[6j!K|# ]X9i/K;;ëڃ/41 :(eяdsH2 UpaHVϋ8 c9 MB(<&dYGC MZ&w `D9#<"hY;+K$RjN% Y`!d0*6)&a58x I* |Z!9;@H. =TJlU/}40ɪ".)!w`Vx*,&ZIpcz1TRaJ tE|5?joqh ( Y0rӧ0+P Nf/,8@AM4p9 2@N$ pG E2# BFD PrH$39 APb2G^B-#BH7$mieYdm rhA?[ ͪfGY2&|+H371U"acerb*LjU6jnq'/H_0+M^ $πǻ h>Ug̠1}H^?)VS,q b" N@Bb6pչ%q;@J>Dh" Q]j@lcxWLՕ aAVOG]lD\zL 1-l!A>1@D3!BRdvq27a|DڂAƊ;(r\v4$Gבj\,kZB&Pr#>*cE8!2>4򫻃þ; H;, 5C,?"H謘HB"B"@#$_PҤ@ 0 0 ȏ^ ]kю!&[  b,58ۻE I% 4 Hki*J"r't>Zs({;3/,0Oؾ`~069X*6pB&<ZzadЋblbA+{iF[Y(+BؘJ.X5P <5: 'r"@0ɭH9;$@c!t 2Y9R:E3xC*p*A?"K<@B4.zЉ01E:yn 'DD5~h6, I*6xM*)ѽS &az)j`T0AZM;lkj> q0>0Ń̠TϠP ;`_A B@M9 Oj$8 E$è]);'fȇ;فp1ɻPAd"x`'= I*5ƒк=~2 #[d "$3,uX+AY< SP?D35)X) ClD:Ӓ &MBJ M)eR- SXww<- K@ i’@!.92"RS$<)%Ϗ1+2(Ï2]ۇ9=B]ۏXf[:M(E,3@(fDq]rKT7cq3A MH  x\1ܑ$IHic [!đ gؓg/  0nwpÉZ7W D^pcO 3ޒH(W<*V G@}_e9%y9(+B:ȂO9x>3 (0iYPd k E8;, {KXKC4+3-Ih#0L0G?eL/ꓷCJJ ᲃhCȂ,걐sCHKTccV f_<  n0V[0N_Iygȿ_Gd0EFEf w< ɛ (>دr8޾]<l+ϘJ(X  Ff9!69^$ .jϕM~_cPy+@A(xx4Z:EyvBɑL0ᒸ@=nw0{`8h8hC*),.4z,A"KH$e[`2ᶾ5EZWz" iѵ $hG A cE1h0!aQ>y8bN]48]H.iꌶga_σ7Xhk셌yc<Lh]СiV:؃g/o^p4F&1yU R$a bvރ ,鏨*f|^yH_kگ>D8Bn @SfgPϻ,@>7X~N% ([GY0t #肣9qߘ-j1 X^] /`50I: eE =_Cd %S"Ga,ґ]nKޒ nNv)60hyPE20Gq# աbiI ]" ofD!j銀%MܴbFvA"b iŀ](5->i rk ȂbnZg/>n\LA&  3E .t [C6 jhqm7B=`h4QRTX i8ǘq8dTo} 3BiXA`js#Tk> GDd $+G8Xײ(+#  @R\Є]t[a),ۗ†3 !2̚XsԢpԴ@B L{@ jT Y"pSRㆆ2 ͑5mس'z3?GX"?qC̊GϪaPa}4gP6gw!TK!4@E9q( 6D!}Po a/DK`L/%'yӋGAG Zl|Sar6ی39x5Y DARwk"LBCz'5Gw "Έ 5V@N@`G5$!B@E|4@@>$f4KkeekR TG3P;l}Q #eap)"&E7} g@)%~JyeZ'횷Ǜ wd- TUE [2-Y'+1=uKpDѐn2PqPG:  HVbGfDMBd-eiQd-̑iLP;1\YUTre LucE^=} " $"@ DM7 De`fiVV7)k-22ɳ~Tj]uZj|F(xŤOqLG /)Rx6P H0C&:ŤS Z@C(dPވQrO hbib6Cc#r3!fƆ4rA@BP\!l 8u$XgDr-#h8X I$IGDgH0FoJPD[,MP <>bjm5SB0,mB >G"$B #d@0SKL! Yg1%dh.p^[B |&rqQ^Hb8&?1o{H_IԜBn>i[NL'-!dMw0r$&( d&Q(Oy^2F>-D}BȸH8C@q eDpyĴ !u8^v"xA3"V` fF"-Ht|Я!ycC0Fԋ^GN (L':c%WPDNap@Drp ") ~, CB@ `o<DӟC_$"id!0U%\z/|  :{5䫎k kVA53r~ ZT' DCp5(sxtT9.f _袅Fp'xRE?҂r.\H*nI %bZD)jյ}WER'&0`C3^dv 0 A#(cS)|qr T XD HCҦ1c02Bdخ0`d0 PB@835nbEocmkCJ`dfM KL_Ox͵nGPHX`iɆ4Ủ$`BlW3ympREIL:UdA-ܓrP!f|RIM>fMRTɬ'tUHBHd ]G#'D4@DMD 2tv 0fL$CT@0B B-  DClz,Tyx4l J\zD DrYW@fI]1,@f%B(d'B64 @RR+􃦺0D۵D(.bkMĩYn=mmtrQlЬG<dB% yTUԔN9Hq9+8DG>hBK&̇<1LyZpsKJIO"D%DG pt ,kX3q@Py~D{veWތ|PlTCPC<fbA:Qʤ`N!La@`&fִJ`E` (EjO ؂O;%hQx5n8 DU87PmCbbMo[DS+ - DTL%DVLlHԾ@AfG©| %¬Ƶx"02$1M? ,La]( <%B`EӚ|xm De[/uT:_ΔEB,ŋcpGjf_=CL MKCU MbnOO-+J曉 l.HXG|L[fyD  ]JZ>f8AL蠅"ٺqfC @Rʤ R @ "[BeE.y,HZMt)a-jjHOqy x jdDSC A"@G&K BЋ@f(U%bt_!uM^sǜb/$nGEM|3\QG D7#Dޒ#hOEAb_Cʵ^H*P QU0LIRKNwȤs,^1!E[v2dLBDɼbEM ڂW ݊ufP+#"@W[G<@ G/50# D'<`dGsfH !Bl F>TZAHňpDTlM& x/&Ǖ@[[&sԴa(J|y` x9ٽbCa P .ߤEr [Ȕ|P5BMO_8 2 BF< .B'G$ZI4DH̏EYWD%$hl5o5fPmslp?KjFXT@f,GKU=3]ct ez~fBhHКn,Cv,xH]k>><ؖ9;DW ճtp5GR=DŰyDQĶ@(El^A`Sd/pH7VQ'<3X*D~h)BqCDy*B$h uD- Dń[1JÓyDEoh%U\ao{SGq`$Bq@\, #(@8V^ (T6X0D\ưl4mٓkƳ "EA|%L|C%fn4KSRZyQlUKȇ{@2ݥ*h[k Ftٷ[z*LiX/DFoZg,fǠOU"׌?:ȲvAPQ G3wo@DL@ƌPPts]ь.x9c A_TUIC8Ci'jvDڢM$7l%d;{EM;.(2D,dKoRry"+@%Sz Z^bEL_@4F, PG7#D3$Eu"@=LEļr8 h`A a`A(A {2 `G4G0R89s>##9%܀gIKKjɰ&ȡY0Vw2k*zZ%,*1xX2(` %ҁ{!, @ ΀ @W&pӉ7xKT >, [ZBDN`8jm58ȑ{@&1 5LzPRhMaՈ5[y"})% o<L,IbĒtϠ07B!8V(}ڨk:@B r hGP?!5|@C0 a$kFb &9a*0( xK"!#6Zj`**l$nkb*`R (8]T'/S%'kd2h dbdr"z2 , $`0 1'zf^[dH1 b!dz2" t!(Dz̠T I,q$Y .a- 4*meyK 4]1#1R—N/~ W3Eۊ @PćYd8#$B`FE`*)5x5&wN QY9=>=sN40(2g:R IPTQr c,ȭ1(l>NKrՠ:D1{$5. N@5F%֮taVsf5` \ag֒0O209#.%c`Wb"'!q__op!)b`Ah_ɢ4) J-~ІlB&"O]`H, R A*2 Rvl4@3XCTJ_ c+"UHUB@ 18 %-m g>EAbv9s٘p] J+*xfI *Al42J5̪ @WN9V\f,B*%juwEC喲 0(qI *`|1'W نqfJ/< !AҧJ!`BHJlA=)3vȻ l+yH J W"> dDH7H!eWCP2(' bR0>#x3"e`7Dԡ px !&j9@^NdCք esFgzܓUœ]/nn ac/DǯK@Cf4Ȕ̠T9;N 6 @LAQz"EHZF+G'>Y\wTK>d#)xc SC ;qM)Ismhb}4!FLgJ"=EU0jS\CC%sN$"dH"㋜qL-x-J/gB;DgVz  !x:@\Y"9Qq1w8Q+!vPqB&)I~ "_pE\P+!iɳz*;Hb‚`!%Iq?JB)'zW ds"ķ aCP<f}).S&](",U`@A*" ZP AMR.h甔5L^i@*\!ɀmKyΙmj!t! 3nZTa)M6 ¬V $'̐yѲ4CҒ᥶8#1ۿ1CL%Clk C6A ssWG#$A~ H?w!@HG)he(ł!t! TfLMڎl!Tб"[u gy%zܖeIB=r{?cνp:)@ҵ|H0oXgjLIL]/ra ԑ3NJZ@?|F2ԡT =H@3kZ @輂X\> Z7rN)(J,עJ߆#ͮ !(a`D"9C'ZOmG `c}³bRL~ B /zC$#ijT D ! b"bBH ҡ$vdhJaP JBe bbi@ t-d/i/|ZB?b`hfmt!% 4İ%midX*cHP\!JIG0zLgu8.F !4o2m,.) cU$01deC r$ɘJ),4ҪiVfࠗ6b]Z–vC=N:Cjo8C%$ȃO. HHy ~ a.rc( uN* BP20$ " pC B>8!@f\'0 HWzrkFE2r -D 1Ƨ:QbM{nʒKʌ$fM܄:MO2n!4&c­J Xԫ&ޠ 樬btAS#"+$1<A /WVF!bLwe)AZ5 @>h!h!r{{/̇9$e <)>%2:CUGE%"jZr~jf*`G*R*iҘb!a!b>"a |)ՔBBBcT2,Bӂt8h j|AuQ *@|k,>Dh"nH_b"~̤GNNJΘF; JFR!)hbBzƯ 15!1 #j^ R !,Mbb9N= اJHST}"B!/іa2Wi !k#`9;uJLm?%OD$Cgk&VH&VBqX&ZcXcG:u#Blj%Ј " RL@EFd"'!֖j rKJfJE.@>rFclWDw\T|( ab]Rn,!(F96\M-OP,w"(F*F0rvH)>N7!E1hhb8ߴ(Jb2.2 uV* 5&@4ަB! $~ZJ%3QVR@v{!~Ĩ%kb9} lAzr+r#$&?>$rjJBIHviж$t) !ՌQd 6o Tz g(g2AQ ",֠-f ( DH!T>#Wbm:m⤠![%zUjM2 (T!^CB*~"=p $\~ΠRZ! xLۏJX. WRoc!jJN?ڔ! $(l`J|g"k3)bt8B[+BY2z+pXlt.|U|ڧ&!vJ)NaF)4j(2HJC'* 5`#r) #OD "C 4D` vڍ*K"Ss!R8R[d]1Xj7hC8v3f(!~ W! "<92zXR!Mti $DSi(*O TȊ)XE%%Ff s=o] LߒoJ<7eo"pl҃N|NqAjl! b8&a?@oEB|#n!:Vd8*O2Nd<-" Cb! d!Ή2f z?~zTHz)!+@TB LT3 bgf SEMf(ȗ!ƥM̈_R:|NZ2)=6!+9?&5 D" aD~88yI'Di"S_@ ${NNälx @nzypovdr>`( ea#&;R[1DDA6h0 jHeɹf`W( lovQK?/RaJrnv"$f;RmYQg$GUDw+õ_|%â0,^|tW/Re Ԃ1>?fvf,dt !%Q~ŸO/E,nI?<@JcNb0 C'BuGAf" D0@ 52$)Jt5#5E##p"f +ySBl@Ƃ" H`?GV!Έ"CPnÅK @Yf  a w`3 7޽.cTIHKyk\M &((Vӈld@OzemcG`ր$h$4KL5pn{K!MZkkwx֏pbbcj :NU}ܭx`ye Xa@HAeB7!BxcI\67Y@$ME-FP:Њ%rB QoO0D@m@DG D"C -D7sSo{806pO2&gl\p@#lK;Tfpd@ I0U2y^uC2: :-(>p[!O  AxMi{3%L<\QT AUK@@EY,plکS: Ti)+en|qR-_N܁'$ x7睗KUG yS<ˁAKYU%%8PSvˢٖ23B qƣ%%^FdP1oBnm ?dG]vIx@>;DДWKd(GC&%,MeSB! Y@F uIB|Lq)ː FԎKk5m~)N:z\d2,EЁ..LDбqG|ԛGhhUno{;4|Sa"9D'.{Ϥ^O܇x ɫІ~,CN [rBTɦa n%D%d$DdK`Dvhk QB`,g Cb &l*nj蓋(7:ETV6E^4: uB<EVHcp T %1A19AtD$!v م"LYjx9]B  r*i~( u(/CRQ/\l*r:U<z:F+2Y4 )!ʿn%D#HأH$ɲdV{UM Ad̼h`ހ(i "+6"@$drZ\5S9x@ƄD(B$A \d(N @*)(%jK!q-3֨OLԈ Ao~W(>( 8 pH@Є0!N h 4p8%QB d)#=9q \q5D6QdSAܺȁ`PV*jfSTIH/6^bI/ȁ(E))J#ZA-% Uh6BYA20=#&CI%PK_B(Á-%;}B&#%! ~irhKXKK&CQh-qMA{&'hh,t„bM%.3[_W% !+){h:/RA45!1S@ \1eX@o CT&H W#GL -~F ) έmRM@/4aΏe6+dKC\Fdq:Lw 䊌GG}, +OozC;7۞q6 nh2X:ެ Ŕ AH v5 R>H Fo)3cH R9Pt~xBa lO%`KISt9Df).d]"lD*],!>0=i'hjZzd7@*!^$L K.I<@h'r#$Nlr173sc(97t:3W @ +0"@ q3 0 $(۰${& UoVJ-A5" -x#|A>qvj Ab1p6^[v3N-+Q1' :s#P67ϖ&& '0÷{o&ā;<3ǂ{,;|T?Cf#haLJ5b #}#}71 *S dt6}.1DA.!dt@; W׃ .k 2eVh4 n`rjaCZU ekWʂHsruzw&%3?k  2"SI`E!">72$zCht  XH GXӊ8H?Uf1U @ >u22^Hх50!QF7b 3|] &x2mIE 3@EIg#?ұ78D 'a l&c{ Qn3aOG Hc4aqr50DE ") k@$ Kca 8p  qӘUaظhqr(w Qf0V06s  m"3{G G Hk!PM071ԁgoa4Dlt1JREV bam%v? ?0N&@ gS I1OP  /A!y| "1B#x\Oph4r817d+p`dn##c00Ew#  8u 61 ]T{eB #adpTyU9P:Fy2ZpA(\vrTq(iu) AP+@D2%Z$UO422 џgE<:"uqB56)X u7A LwIE?/ lJ9OPxHǣ)Ug6Q6+N5%=C{A6rJ8Qarb.?mb;ER !ci3h@@rzK0{iQ@E\qwQTUcS1c bPbeg0rqq ыÖB @d8q8`G 7 Z 0eS)9q!3t3  G1X  @3;2bEB A@ ޚVI#{QZ&7Iv!/VU3I '.0P$xR䯗 2:08Qz Sѽ>^9bk@"0;tRy)<)7-rR 4m DE1T,ch@spm@;##lR12rSdxF !J #77.q7p1l9j\6,x3i+Ұ 7+pPM=0VR#+r&-֛XFrp2&MbqX6 0Ʃ J K.ir >6 xEy 7@y/z4 4ô?8a ;].H 3<?1a  w*`jPk{bQ E !|RaIA6*[4hZ4Jmh+h$<c0ö]`P{ ?S )?;z*MМe 2ip$To @.]}K .?yڑS Y !.0 H=Z,]'z!n6"-{0<I|@@ !VJC+␘Qb"@ JF#-(B@ IJL8MD`_ЁAը(i5a64t@dWrt50c76^Ry-&(2L0J⁚x `ʕ5ZcxNRpCD[Q`D4bliCH}XJkNH d.U uxe'0zn@D'"APF~9[=&>aed 2 kjacBC懁>(z02* :z("+B&@ $%RQG Zӈ`'~**3"J RJȐ5Bt f%< "O/h+K @;@DY8KAI(,d jeVްrbRitO0;=9xXpFF|QN K.A xdck 4%H!Xe 4bCUvDc4ָըAG(M }L))=@fTv- #v*RXȸ%ȒH Lh'- " ."#$rP@":T +6d-L!с`->kp,Qm8tsb_9'؁Ht`L 9?[f3}hMV R%P*Hx\E03XA\hVrp P A,iDUˢF#E)R2 21+6ȒlcKPhdI9TBSY >$#!c#HFlXlDf:2nʛv%%,A4yz0 /^PDv)T(0-li6#RhXQR06R&uPBZukX3#m2Ԉš D0rdA H@B@@%*F F0\CjLh+L*d H G-@ D< <.qp 9(qP[@[>4(S%Dz 6 0A@DDJqHE-FtȎcR$G 9fFdC0<*p ]K*0Q$Q @vY=Y/"!RFi $[ݤqWE" [TD0=@@D0Jq K$he D\Q02RU a]lI{|3*,B[!*23PGFzx)9Ḁ8-IB Xaؖi8s (@1$ED ";yQiԝD0(QTt]B2*ig قU"3hB6)"r:)P0e4*~gDꙟH F4YF#`)}@WMoi2A$4 ː D7,х.A:.#~dY %FD1)z gV (VS=ЧJ(zX#ư('ga RP <JB%f$,zhEii*@3jć.{R<F2R iX#ULG$3كi#MmfGMא&ۨz4`LDqX A#HNSX"F82,8 H3 7>ш !x`s% AȌ2 -S]㬩Ӏ#L[8>rJaX ]iPٍn]#Y3m:3i636xRs'ZD80sGjPxU-@[Iu;'4, ?f9Hʇ$.|-,Kٞ4ځtpӭ,,Ԋ 6 sKGQBo3h:$f8G@+_je_!L'D ʀ[ $m XȏAG ,nm+8?˸Bf A@(HIgh CCIбOк% `x#Hа(י Ԁ-0-#ش#`ײۀ Ӻ@듈6T-hF e8c@V xHÁO /p%#xa< o$H#`[ D %܀=\H Y(iÄyw>PEB@q@٤!b?[`$zA4LQ DX+(v*/⃱"(2%ˈ7b2x@o++( Z@THtx,aaHG󙁵:J0A pϸHzĆ 6X"ӈ M=#YY 6&<7Ԟ`!7`!83Lx*Vh r█8(' Ǥ[PG K4RȈ Z[b Ap?t>tzŁ[ Á$qM"kǀBD @ "(Ƶ(@LXE@z +KЀn(dnj$pGȆu\G=t;INd ?#`,^ 3OM =@AA+ARDR9qhKt6 VJ}sH i:=1٘{sIBӱj벌`/ i haDv`cJac   VbQ^(3pDX=&Ԉɫ8 m;`%g 1bK{áM=#Jm!#n8iY1;`a =ʄzg\:D L;^:Ł*֔nt́8G΄HLjxJ8PΌ裨x*Iv)腸/S[04Z}( HA\؁hx-:X%6˄HHdBd͈" cLGBĴC9DJIF&P(C~` o3[j(? 9  Jh``ThGv~*b@2#ՁTЅ^N $%H,)*Y\QOՁPA[=dCCz!MKggvLM(S@eJ9Ao0:85::8iY5dyb#w$s=a wѫ׌S^XRH em:]B_%:8 ˔@Y8ׄRV$X?W0PM*ȈܐgXbx 2i4I302Ts C+梅74 d$@0`YzdYQ"U=eēMx=`4JsFS#f[-۸9eI8BáÌx`K X&F\ص{~ .Kox ew] rȁF J/;CF Kr lo`{ʟqJ.KF |rA fS=k0 BK=;3nDpz'@(K!랑(8oBN[pTH[[H3GیxjUT` pZ ũ%  , ΢`xN\F%D׉(јtR%܁a II#klqMP0 jMRS(m`ɋf#2z rUQˇh_a/f:€dhQl@_,D i`Ϭ3-G]VB嵔(ڳ+3/K qXX؃7O*xPH؄Tf(8큸"232A +4@wrHp@n qM+XތX=r̈sYX\jp]ԓ g]g hEV1bh-А%VL#4 b!B@~H}4#NJ8Ϧ+,i!0`(@8F$)Nx }J^o KʰԹWbBy ZFBmA\e@Q Y+x (Q"xaa0Kч/u] zȇU(dPg%8+ N wW92~*²ac.H0MNaHV/e$85RN[yPҨ_%{^0xz@݉HJ<&KًתOo,uNeVf p 1`a%0 8kppJ  !A$Gq 1xŞ>xR`FX;rt@`֞R :=M-6!* *!hفU0 Bn' J蜭@Bi RЃ-Y 4pƉ^nBL:]p-54@d@ުP`pFi2Py!la/WX$3@ 4E7}y|{)D0m'OlXOU<#%shaH,hb~7@E <qW|@@2!gpO4dI\tqE$R`VMMB+L1%$`I 6ĴjܺiKqAHU- PK tqxbY:x9ȡB?ȲM ,-h%> AW aIp2]s8aM6Y0bJ'@P2zZkVNAE!V }lt9#]B A"c.@F C ˶8`0O QS]n" ‹@ů(rb iPhf PZD`(s r4(B{F v,@$%@N&W3pUd|c% dzb~PM$,@@]mQUaR8&H tH@\bm=I~3!.,>Q!0K 4$*"z-@d1 $HF 8-ew%` j@x xA@!̣ 1ȳ%Y 2Z amP@䦥H+ XvH(*QV)!@bV,ro%Bǟ4F/AQNZR  LRq$(S:(Qn @F\D)րx@u )A6As!xDW5G X'Z8́PA A"02(ĖU-tLҗFICjz/b:1] e QO -dH{ 80b!,Aw}$) 7~%/A,J%7A;RA Rg5&AdGMqU !]eS7aQ(09|3 Er( H:2 OfXtRJC$ rPJG=lݣW 7^lrAj06H>:rWR> /R!`~c WX" @@Efj;RJR!*:|;ӈv)D8* d N[LyA֭+Zx{+V ݮ\Ht: |0(DmЫH#g 9S}I'k ,qm JXκ$*(db=(@=pA~z^@?#O.!`Xb=xl2&p@\B $?Yqt| X,a`C 8a@`(l@XH1$lWƲBQ/qi+e@#ŐWcKr^؞B@39V pO h ҥe 0LxZ jB= m{bC1⭂ "x<*D{עEP/t?oYz  eU`g0 ~D>AUx|#HF\RG hf 6tBh8| Yqaq FT(a kb1$3葪 XCјM KYH- { )~@ԃ@A(7P7<ȀHBz^Mԙ D?\E1@A)hDDo 1yOH4Ө2 jdCȖBDO68ښI OP̓e2 -H (A?lBUE{0HR  ~TTI 9`G ٝ%v^ !U$RP T!D) BSА%|  DeRIEH C@X=B0cѸ~*3VA%A`72Ũ ^K CxDDa`$Ax!XC<x C6D @ @ȃ@ DRF,k`@!)D@@aG Hz@Q^PpD.LҜCM@%9ExT~|aO,b @R4b%B؂pU "Ű(bAC",APOd|Č+A ̚AA0M_'%xKXAtgBp,DY@`ڥ jAJKҦD6~H K8#>@ D@,gE"GqE D(@B<DF% 0AOD B<2)D¨^$!@P%tZZDbH1%VHWZTG @xl@ܨW $`-$DaA""AdȂ,M4HT|QȂd_?#Bt}IxC+ȍfAxC1 H#ABLAtfgDT _Xܭ`M)0HmjЉ,{ +]d_ A   Dh(jA"Ђh wr,y.'A$BL.$A@^A T%4Z R BxjWX| (0EtlP LQ?@AO 10@0 ] A+(R@\@;T5/"0AWt*iTS@U,W\]HE=B" ģ.%쇧ב^IOLBAwiLnKJo@PsAІFD(]8̉$Ba\feRpeЍԚp R#"mLHW4*כXE\^0!EfUe0+ D]*hQxsK5DHAg4Tc3 uA2gB2 @)`@Wjpя!z˄";Ku[E@^=yE[tW<40jxՙlAȌ&BƎօYpBؗ Q1akFoqK]$]*B`Jˬ..hqLG.1D 1$2-4GV=RC]ڨ QNLB0z 뵰RDߠ |5!qR?r!BV%;Ç.#܀N&p<&x ~B4kV9?V@]D K0DhM cCg@ ]xP"/UL%[46E5 t4 ,;B"xڽBiϜ(2La !!B$$\д EetȐ2.%""YC!"H vb:;[ҝ'I!E^|R&Hʂ !`@;@.QJB9 X@ [L! Y 0d f,ΜI@j3b}؄!,ш<$D0a0ڄ$w:H40P #hNd9XXDp[BH53ql ! hA 7 D}g-DD)iZ\N4@HdG(F†F M =ՅQGC@6n{BdT0&M#ctG2*a-( '[xkrGAYR"K"DHGfTƱi!P`5~`*t VB!o'Lj1ٓ&Ɨl02e*Ǿ kMlPsDmN@h(K%qs2?cJNXXAKD!fODFQ!H.a!!$ (1 l5' 4!XҢ.` "Ȍֳ H5JBܺaA\V8F@B Ud qajY 7HLƻN -cu`QdGCFnB[4(rHxW)8"ga)M{p6 KE Pp>JlrLwT!mw$2XOxjupRD I2tzjFD xqysBaȡsR da P2F˶^:ѰC3(- F8 E))c^dCPic R.fmQHc5O-$-Tl`+ΦB|AGR6=d$.ʲB M$F,2 c:  ,P' t+΄d/e@=sIY^ q9M@吰C yV4(q]Օ<j.W L)G@*D7&|y_"Y)QQݗb6EP5Cԣ0')}_'`P O3q+-Kp$@-%" 0u^a?Ie 9B 18'c ha!ᮔ%!@  zLʯ!jl*b\ĎB!ah"!N4dP\%'HD%,O .$ZI "ؤE(:aP A}Z0EO֠&\.N FpAHcEK\&7"ƲK-"FʆNbAUƍ\`sQn@ `aZxAHT-BoG"R!"Q +qV=DIk()h'%isRb6!N+N0 B=A ]F0$Uׁ8_"9a!3!|!i D(6%#a{bJr(&|Y fBh@ 8A!H@Zi?;)$!6@x{uPr؋UjDRM#%.Pzr-a,!5sBDxuU!!Kj!Ae{J8,'.l!! Ad ֡aH a"4<QyDtOAu!P Xu}rwwBrHe !)pS 8!86m:*Xp&;!q. " 20Ď3G ,!DxOag&""6&D pFnL$a l9@89y [p2ΡOkymYuQUtHHKJi"&*g2e*f-˜Vf(Q_͘k|j;#/"~'XK/"A -5b&?VJ'NMxmb(y@*SBcb"#:;O;/Q T&BZ!Xxs'CR-B:$VB%cB/҂bBŠv.%-p,&nGF[.u54$tb툡䈆fDJn^l r %"i$`-1Bɔ J =7ٯd!BY$ QDy9s@TuH3; {VA !4,nDG!,%$',C!@\[ѢlB*!kK),ab]ИKv1!hn\B*P=V4!0w GU,aB{^9B[ ~2~"ꀦcd!|f"+a>C%x$E <&8>)]Ѣ1BQ @>(@.N@ ޶>(Aq5.S rHo",xX¥a"7IJBbm("c lEXn\tbH^tC!P缔B@ @·T0!d=ŨQ%$D.B6!,=b.>~ (SQ%% 9Bg z^^8gbs?`?5طj,l/e." U> s!\\CB"DҀG`,BBW8 p'ٻ1X%]!zHLCHݾwHMr.4&Bߟd_Bc @ l: Ao"FE@ $h 3*dD8)y ! vaQK>Ә 11 jUVNb3 )2VæM<" .esK0t;"%@?P"æFW):U.-iSZRXPA(3 W Fqٶ-vBkiܶX]80сӜ" * @{  Tp(AMGPISAS`D|8Q2C vha7Ħ!iBA+jAfA(@$e!ARcDt -$bKD"3$SC/yCPu&MqA9MPkCAozx0ņA @uP R<( A  UPV!Nε?-H)A8Bʏ`CP,D3R- ?i6 dYd"EFY\V\EPc (EA cvײQ?(* 2DObK?mPFK C~exi67wx [Hc +0l,p]R@͑3tM΄;&P"TԠR>3F45ָ!LKFI 2> -3$ TKTTA*?LPyIM\0L QN9n80՚c ZiK?*ԏ-K,4咨,*AVFF/8E,j<`xlzThEV, `o'! C02 60XDqC"+e@,hK1α.KU @s,c\т8]҂5/H!( _jDEB$Q gd0(l<RP =?7R$c3M 1 83~=4c1[Pvhg@,q6P|Ay\HnW8-"j8Vnc(Ȥ, :B v !!z`> hJ Eh 6Ęq 8@fl9'y6 n氛Ι zIM"HGQ# Ȧ9` SIA!69Q B QJSRX{jJ2S+e zK c.Ke5@*XRVf,-t+vzR j]P;HtdL j¡d,]( ( 5-܄؃-ڳ%7N֤3B FxA, Ht#BML.LIv j*gU|XM{FEME-,,!4P + i}wACRe\Ojġ.AĠ+Adi"8B = 2dhavp  *K]f#9.s\-0X<_`.`,;'B-]@qA,f1Z Orx8 RP )$X $ȌNAH4Vi&#G`gum7l##(q,l 1^=ag*4d #Rlri @1ALkDB ^$hT&kSR0nHL?(" B٠$$$dl=; UCSR` HfVTP Rcqm)--r@?dRS$=

TEQ߉Ԁ'i0:&r! pig?r?pEc4 tUpg` l` /mD32EW0c@a80GQDurKajQjz`fEP  [$ A : .D 3)c)YDc xlxEj2eQF1kbQPmPP0ssNB:(Nq~ET^@p8&i?&AܐEEi4AWP4̧ujop7H? =S,IHZj`jMO f(A6HWMkAR|Q=R"% ? kִjnصi{v杢 `p\4xхAkp\8 \Qfcꊡɶy *RS!fP/p*B 7,s?dLq1bv C5IJ&R.DIK`Őu$T F0n q ֐^%?7`Y.AG;UMA irY q}Ur^ 3!m1$ >uMPb^9 *ж|V7~`TsZu;[T#'#p[O`k0?b8kl!e8PQ\e<P@ !gnn>g΁]ek"9O@ m` 7/) XR N@I'r bÀ(I HyVjfP@~? TcÒnj,s%r$C,d,¿Jb-I<<K`@ l)`4(B  2B`T1+iBI@\ױESi,\9Anm5EҶ0Qh1 8 67p%mxF%?6U AR1P\@1eLM9,Ol \H@')LDZKV茙ɂ f2̉^&+xHd>f`o5Ɂm0LX@nHX&7psNnQdjj& 1%7%"h 8aLfw`5pRI r I LByO.R\Xعs҃@h@;(GC; <o =m y@%JD bIPEV0boHakFZؘ9&磏PL<VbjęDG Q$8jF9A)WZ36``aRkpI9RbC+ 2riK,BxlÕ4 )DJ 0$?"થi(WcϜBJցjZהoaPxsC:9g4Bܨ!O|b ^"=C[LJ4jDsЄG b<l @6@v\a = $ 0 a=TNP 4DG`Cl:$Hy1uJU:CP &8J8:5t$ԸUJPP$@&KZřIZI],# e ~(mp&Lwm&&i +su0%4Jc!&`@=dxK br4 2& H(p|%c 0(vsW6 T$@2jf\@6DDE*մ=ii{F!2g~ zǢ X$1aDݐ8Y϶DEdt$?ʾ}bh0pH)THc0DpT V·\&`GXaLBL$ z"sVֈj<B hi(†)!,&?-TƯMxXC>CQrb+W@D 'ȫN *q R 60IRL˔aXp JQbˈSQ=!~r2~@a Qos0dmbtmW\*,D w0B0Hb1gaoۢ%E˃==r$*xR; QpCM P<P0`4IP؄Z (v0$}& \L0 /JA%cyp /Oq%]#J@Rs\B#3Aqw M`W=!<$YtI\${ؓL0Lұn$A|PvuAF.e*.A9@,ƕyIKX&1)qYZ”GT|)Xy)\A Y3N4!ƌ1{X׺n X> WtwU]J MN ^e!NAcOY@&ыe Ñ% D@ozbU.фF6j1g{6A %#! b%8\tgȂK$ s@9QAX$PpV8y پSp!  QxS%Hx!ޠ :p8`pb![04lZ8,3+`++ Wq(:1P88𱩛[ "Kʀ2x3ש )@2Px0 ])  U$ - ;60ZP rz‰=`  >K 09[hYl߃O > &G0: +bpXpXe`)4 腿3cy.H3iPehuI56-7Z-<1:6=@$ qA ;Ѓ qziOԙI6-pA03J0OP2#,S`{2wS԰+) p =YFЈ9_1>o ~j𜉛8(kuÜດP$@MWDD$R50Ĺ@GĉH4 KL<\@z,"6 (5IhW,yAP P2 JJc=`0;Ì HhϜ؀؀@ MH֣ m+ILsW h+xK ZX %э+ 8&%Lb#BV8,1{H5ɐ1yIhQ-=0+R06B?!-ms$+->HogxJ7x0RAҲ=Box\|ƣi.;+[)a0+LYK: 5Pe2"9C Xԛ!@Y IJ&p8^X:脌Y$ >8D,BM+(děxĐBH;#˻X) h4`XN/+p)oŁ\z]źh2>3 H*n U9/ل4ȧJ/x&+Gd aXG\=ZH0{5,=235%SꃝqQ1q 6*uy2l"1D(\o@S7z{yC"ϚyA@q<$T\ @#%z0KH/pi,8Q" v2 WB(1-OT͈6j!q0[ >̉+ց A l@@@(Kn`DMX!3HY__WQdNWGh<(zpSiZ6} n͌Ƞ؀(X=:Ca=pr~F>L( ȸu KEY݁蓉$X,ZGc |@ȗ SM  7S1J>.t0tRIQR0BI.` [<-IH%<0Hܭ0sHaJɚs8Dd`"IpTPK`n؆f^oUب]᱄ݨ4Ѐ$@E `H8L;g:5 Bh 8tVlֿ2͔^P9Q@H@W;Hהx0T3 e /s}">"g@QHZErE=c=' ψUψ XOp؈*nƉ 05X.1 YI0G" zHXa腭8 Ѕ*DE;Jc 1`xI)`l---u y%$%H0 b#Ab" *e@]V(/ Ԯ$\h"́(T,RaHnPᔨД ؼT='K@ @hQx; &AQ)*m:̬v ue {Vj: _r6 5V5 ЛZDĺ0hx |P@6 N@qdW"p!P16LR(*^^ ia}iPrda(hF&JqȇJ#d *&6-8NM "ꘐQq3?,57kۏk0\#$Y[תۨ,gcp& yߢ---F)<}AO_% Gh{\@QQƓ*%1ܾm0#,%ݸ|@h c@an3ffCLU5xN,Q +CH Yp:h +_Hg.4gS_- 0^, 8;F|λ'xW2 ljb&XH 17 SݪQ~_y }r<>r% [`0=рrPf0NZr8o 4Z(keH5VplXE+'HN@hʉ騃#JEղ9dEGwJ!E&l^ٿƏ6" 0X@Qi+duLM6JIbHvȇ|_UpX>~ɲB@w==8jډ`0t B%7``wCV-w5h`ޚH,o_0 ,<萡*ЇC@,r# H8Nfq_ fx`V8̵3uƵ9:^,"Grb?t._؊ݸѪ.zH"kuwrޥVǁw]+"a 2H1I ѣ sP]DO\qpQ&p9T-i@:s Mt@O|`e;qdyP27%CCqt9%%W-TE\ @7ɑoZ#DzrdGpJ~ 3quOȬTră7t7=ATa}b.rG,A޴ kDck b&88+?)U/ P )^6(NdFI0C薱 X,ìsO,1ŀQ ok}0 <9WnMqZҁgqz v%w[rEݩGD̠ȧNԇ67O+rc  Q3x=3v . F+`L5oT{a$Ê2m搓BAaeA93!p#OtCUe]SVP~M:`Z9MebA#d)wMDfyy7cW!!Dʏ/>H]pi$Cba,R 8XҾp} j 0D = a )$'g? Ipגɨ0=tvyP@Ls 8Z150;Nk9 &B7>6=G8ݑ!(xf+GdPԂ`f}nF.q9|#kcؾy `R'a!X(#{LAb\,"2D(@M UH? qEpEr(@'-.DrC$'.`ҥE&_r'@8 `9Dd"$aHHPa&y QEF  鐩_ӂND00,::Jwo^dD` 8$VrJ$?G P8H VL D:=2DŁ W}l`E MFFS]tp.Vby\s[F; +b&5MNrq0u4%jgy: A 9 "E.jd'qy`̡s8jw0עFٗ1v:P腞+3ıX ` Aֱ(.s=؉v02Z⪒$1 P]" *PwACf ʘե-K<M$A DAMP]V, Oh9P4GdD,pD,8"HT1Clݽ`cJ1EAl@ JI a鄌rEPeQdR]ZIbC;.UC~2j G1̑Tr`G@" -Gn ,n xLqX?$aEGkPVg]]+%ȁZbϼA769`EC_7gy $:CMD_HȀ Lr8G܊C$rDl-A bJ J< EpB/U @Q )CB i-AB,$ ˼92܀9p_MHoL#qVy`Pi0Vњ~[:z<X:vhaPr<U Yqbu XdtHC LA1dA+7Gn=7`CB^,$XuB UNQnē& JD <)-G Iāt }Ea0RX^%隮%G*%>y9EUAh_&RM20gСO$͢EK,\AXTUiN[Zf$lYYoB݋,KDL'RD]U Mt7$(H@\u)$ zZ1'V3K^3UrZ CQ:C?HE46A}zw$y 8Qik!C쌾\&`FCQi1A7+B; 8HMtYh}LO@.C"`mمC,Ad{eWDX ~mG]xe0I6!ؕf! 1Dejr)gACFYh:FĔC႔N-TIA+ iLqD5:LNLX>0ݍ8D5a؋ Š\sGiZ }ѽ>&b~ XCa0pRmjtN; !Q9Tb-7R.= GH N$mfN2P2NݪDtCCLD-`AT؄1q2Hnl/G!\8D!jw)(uRݙ*Gh”&D}@K@P EO\lDL!l݄@ι8D8CH* 8 |TC_1G6 ͑r_ݫXl܆9n+]0tL$qc3̜Pa\l0 psP9' ÎrN@Wj`%7-@-GA*LD P 2E5 U'pODuLe-mD9TB9@qA,ĉCqRޅH:bێ Xb\ǥ2G$F`0[\HrU!83l'CC8r|k T`C&㡁"Nj(A8AGؙ&A2C(A u+` hYՁ8Bu8+@/l h<D t,t724KbB ,N(^ZV`krc8Q8&HL&BLV -H_4IĵZRC\B`E ] )`߄EE\( Ga~ZO|D6X"rC%Y̶i*Ok%8,8pN2AQPDhq5A͠ SMgO _v{~DX7$"vP P<-s@1s#$qRC;0,F.ČL(I9Q[R=K3+ $(--,Sh֫!CCzӪ.oxVGZ#s5#sY߾9``֤YP[F{.0bP.RXQZϞ-t o :dKhodʛ*"]@Kdϫ\R&fӐ@d0g@{̏S?dn~ns?RS#>P1*q/CɐJH6edsa6Ht(l\rXBBd@xٶ JA6M.Ǩ=C, 1ma1m&H (+GdMOjޑ -$)fk= l7 [EYae AD B byF#*憊d- mD)[/gC`c69.F .($8T6ITCЅdc$l f0mNwNCE[+UeF9l8y2GF'v4K'Nihzm)s&0飡̙s j(F ְpt7Im >YClC)Xw $s\ )@RpJXFQ+EPEE5HaXm] K\0HjPĵ'aZ ȃ1$Z2OBXd)JRՑd%7YFA]J`xC!堣:xA:$0nkǬa#houX2TH@Iw< PA͍j>MtJ0Puه`+ŞeKr60`!e:|is[ ),1 qL:g` SPPb,N\*(]̇=YgsHΨ82sPUz7 /YE0&zŐjab 雎'=hQD/mPy@;2+yH I*.ľ(TaGf8bo6=2 D.n Ww]-nDj} WU(b,J(W,xl)_GvԥEO6"M&F+ZHn@!ҭz@n` zbtA&a#`><`%bߪv2j"`|az(4+rQP@rfz 2fh,E(Z,dF((Ube 7MXI6pn=l>@6|(`.1nnB CЈ Ԏ8 B쌢B a(g>?%b$*IO 惂@ARr@Nڠud4lcKp(LDM`>$v6jdG.0a{bj7 Ta&Ap|=qQeGG{a cdR94Z5H6!8V~v-(ĢV$F 4ӊ BR$Cҏ%#(d\r,H#p"6m[*OLBZ()X'W6V$bԖ&`FaGZ#3 Gt L&pa)b)Af$,#0&@L6#bAbaKVR4`e6|8P6F(@i iN.[&ƿ0L c4AԎ9>im#.Ԇ`v2$BdTs6@6N6. 3|S6̩nlos# d,mC @EH 9C(<(laD> @J6``$CB^G6Ra6Nb*8ANg@e6kG,QQ8de 0y(⃏Ų,Rh"0;%EUDUXE!"(P)R$B!Z !H"CV)Υ@X^0+:Ig=VFFK 4@ aTX7&,&!%AY8p aMh勰! Z/c&2 bpefj6Dp! C}b1GNd7Xflf`h8Mkf60l6> p9696L`&l#'q nv՛dl7NY+PCoL6l6@a$C_ID6~D~ IPo6=¢dLl=L6*>糠4Go@s6$6 Ozjc68n0,%S.6fc ƼJ6́93]  ).ZJ 6hŬLO(WEUv6z[pe]%د$j*2\-( WXWj'-$Zt6" f28PFR ZA4y *Je,,z0h G!B@@Fp90`e,PR ̽C>|I;؉98`b|&X lctn3NYφ9^s62l6c+wnZ`|`n(WP s668U6PCn>3!@E! 0L+ i6gSTiG,@66 ^wOM^igg^v$x1MLjGG^(lB@*g5C~!f#b L}DT#raPBj>f4ArCG![cA"")Ь%#-B|%`WfPJi[B*b'b4 F1h%y*kCPUMZD(A܅!fCb_%t7teM7"G! |! z1h7 NtesADCbp|>=dM2Չ~f.ʠd<$3I4lChk y@# drR6wn6nB8e#Cw@%CTB[t:[f ֕<=7_vK`H:X6dJfge#lʱ;伒7807O|f>@zx60$ APKa+[dF\P:WH"[vbR$*) b&:'@G(H-%F<ې('"υ(oXI ?t!@Ʋ+ $lKsOiX4 \W0؀ 8.ZsIeC!]FCYIo&Q6?.܃u/619*a>~s4xƈ†fX=D*nS rS6Re获8w>@{nv$g (9ր4a#NJ6aܣK6,w0v0O6(w^(=%`d$`Sл~fsl;AeCJS~G! Ace!3.E܌a4 P:mFHb'!!Υ4b%]}]qb xB$d#* ~E*/+"=W"Z$O b!I4\D! EdFf"'r)hY".G=E T9& qH0lu€O`z6bAPcd.CS؃{(9(pz;t F6`4"`(ߏ>|Œ CX#(>=Y`—gcogGSg,,i ~ {~ؼgcR^{\LdKMo>TLlq>9wa$/ip?j((pTvNA gP7]?q\`ek6O ;/" lD4$f<$(4BXya zq"+(­z&(`!!J۔N(F鶝4*\@V&P;r_!c4eToGgt!p@YH-@kAqaV@fH6<18V z! ' пX=nF\7͠… :|ĉەc@*0&>P 6 nᮎ4!fΆ 18k7] )İp mGچ6д7_)jr@Q3 m Wa)\WW22p aWd,!ŢBFB"@)d͐$pP-b޸Q`J*p`M}cPr|'ϔ#"3Ȁsv(je 4d} 4A 7|79PAo9PձtPI%5E@H): ӎBiN2}SPJA`Q3D ʬ/21XP4Q ((HkVK+@RpWh2Pn^[ 03 ْ>0p_ m=`5ba&C9@:lUSmJ0ŠR0qǁp-9 aMǜyɡܠz=k=fAVKW1^N,NdHc52lOmvL¸?L\T! QhzEexMB۴F5Q1Uݦ= (phPF|'87Ϧ"XBeycva ϋچQmC,ɋUXAalH(D!QYtv#h! cF8ΪA qL+n`b$hI>$T!):#Mmj3V _@XQ $aAb"|S'Xm da (@ɐ_U[$.d !CG_C ?h #eAT!@: @RB:@8m \ N'ɠLSg`Ahs;8_2La B s 1 2v'yp\ 15Zb @0p%B)eЅZ"Fn\N*kQ R@!eI$gQNE{Z8G[6m>bLBFnncՆ5g.P(VaUؠQ,N n8yҍbH6n- ;D1[~< H!ч0J7V`FE+> ֹNNRҹN)||CT5 4r%p &^/arG< 2R`tVXw>$~yLtfX@ (@pRx#  Apk!h%W8u z57ȥ.5Kjrp A l_҇\P5Aʱ "3Cic42`B 1cݗF@ 2 rΐxР%hCM;esK%Tц4v > #+K6gPմ@ǹ2JB,p \eEYBO 1nAI~ű$B@z}rX Z +qci#0Jb(U83FчK.1~^]xS, $K,b- 6@ƦJ@?<ϟxj+8bod$ !N Q\| )D1u)0!e()D\fTT2/v`p8EYP. P22@ͦ'"bCtX4a {*[_(xz!o!Å 1#|$9PTBPRj(E~R9 X k>m,PT8~'?6AǢ2<ޠ,r ;gpfCQ B/@ $hi{.BCi{.@.^9pbRpDcRal 1fuE]!'a<8 L TGnhp75aqJa@mn3gsJG.9i#^b9Y+ !˦+1q Ե 8 @Fu! Hq 8; Tpr؀# 0I oPuP 1  Π%HW:ghNh0 2 %~bU`b7 S_}D=aAraxY 1v @M0w$LfkVR)_v?@ #q0+ imS2 1Nqy v$3 31a`_'8UVЍBP?r/zaC)@.ܰ c0o-zWk;UX?`0Y sC-` 0 "K-%W R+ mGs*h 'R7   Z3tS.,~À |8 nڦsCq :c)BU;+`Y* 9 hj !!T'B`@ تb%j f-$iA7+7vCy ^ @W/+BoQ/>-jM7]kP+juZqx>EO~  ң"L6I T Kzr5f5bIhr B 6)q` 9I7vC5Nl!k S3P@t+^F! S# 6 oj0X; <Ñ6řj]PYˡP aAgF` r0 a@gm :%I6k$P ǫ2 G Ѓx[_$0ZkB(k0av aF&ӗ;!<BA i~`xPR&R @?/2O PN"0h+u A;1I< c+Nf&h p1hbB:1* /om- ѡ0o1@iEj :H' g< P^0CX&X%( X !l^G@ wd ]_u6YFc'IzʁUJiz#'m!3G'r\:~ !p Yj7{14L);,*E01D!`a00 !!j L5  r:6  1 #B'p,'e$@ `{1p۠ j{8@iQ/{IG` hCB8QP; bt^et^ ]0  2ZZ΁a<8 Km¨Krz ŀp@m45`О9lJ= >Qg 90,Z5ىlYp˸{srs"L$EmYu`s@ۼR p PPް"𘑓%IN1 0 ѣ@A$`TP [:4b'<p*2'5{;I@ "! _@* 2 +/a J?t]L" . 1<+/\hWqat-WQ0IJi iB:tH.@/p|_Br~SsA AE5*2fL;miqh `S3:`#T*Y ¥:dm"[8:ݟU7^81^g R`ݸ=7K>j T*L4 ۸T" ͗ +\plp Y  {]!@""quRu8v␚o, ` rW ȯ a]>C~O=q)CA q`PO@ 1 8A "p6 RAU:g'_Wy9Ac0U< h{AiCi䲳Bmbh%# f >Z_]7scl:!`yC aMڐ6< )Y[+u ckòcЬz$jK__`oIm 'm`:7tԱGp]lB yo0pS 0J .%(0تaØdKsViɈ9.bsIΧ:ސ'5EX&]$@H8Sȱ4jƒuh%+ٯ~j [u p4f.jY-Yr]?~ 6Y̝=w& h/8һmah!MF coXeD!;B½ js`.tMl`7EOXeMGq5%n vsBX9cX~V"7Rv0mNĆ?DN|S6ٺӠ8B(t]v"Q`4.Cu:1CS+$! b1 4bUB `a)Y/z $pe9ˆQ 2f^Tkk`E5\XH1 1cJ\6 KxXy? 0[f*D9hhP$ :@ uY:S2F@ yl1&X8Ev,Ą50$pgx4YD%sˬIjlY2` 0Z`l]6O pNߢIdybdY\t!`2|`1$ QL&e!?r+mC5Azm,Kx1&+`2: SY `F,V!xʦn\&6Ns^ ( "JP (YbT2p#+$V!èK" V 9'&l  q7k⦶#A8@˄ D3HhJ 0 `% \|bZBQs4JZ'\q:?17HPMN&6=EANx')tD)%J&ЂB%: :8#E "caxoևX`/ Zg1'\I.[ހ~(@C!Kpy.{b K d@QE[HӅZ"uAy`eq} ٙq7d~te+9QOkd7ެC18ioFmL Cha]@ VN70]cL2K%r@n1)hcq 7KXҕX19-\uIUIZ cP9&g?!bG޸t(=TPp ŚX?RPqR*L)DP1txRhA(P NSV}@ac#؅B?R9! 8O#1C Op Ŀ@.AHdzC=H[2 B# \#7@&k@#HK'pzX9$S0V(U K@ < t.#4a 98pNJX/9؆/:8fB`=/80m҄2$1qNPUPFO/ #;;`09o H Z K0Vk/@1P 3O(#20xb`ja?s@11 lX46ɓ6YlC9{nJ٧=9Yh~ H&4q=Y8# %(b^ 0I9;@VblhPoHjȄq0js7@5 @7  K7|#3ɨ 83DrA ,Y%I$88# >p% QB}@D˃P \K.O2`! ,a%q8iJ9ȀBc :@K0&C74ZPC؁K-}p@CyLMp$ZH9<$@HAخ1.KH8†\Ac PDO2#9pί&9kKtNl Q >H:< o%N} K$8L% $ %T cЬb hrr0:c@ ZS؀  m̺#oW,VqȂjxP{|a=a'X ˙0oD83NIA3'<K@#d"փhNHM ՘׹ohOb8LJI`XNKQH^0Qqe0YgDY?՛?@;A\P&]PQZc8A4=jІ-)*l\HT11oqo8iKx@D~ {R4r@,I qCD@  8aU؅N-cp-EE`Hc8PAB-(]HT׺]0` 50˺Ȁ#!lUEl MWV0˃0O+NkIhU_(_L:CX)J0/ |fuLi$`xô!C갺@ q jH u̓tPDQ>yؿȣ 2X{K<&-{kXK`09`{c (n΄]N## K#`V0IU@!hP~hO Ձ6iI Ze6XPzgOGIQy =q^XsІz|$ 4+V@-LWM0K9K&m6XK8A(i&5Æub,0@{Uxe5Xa̻@h?{vF@8dAl=e5>ۣcDCc`Qjd?CtuꑉPPQYVqђlZ\Qc)V)-a&bpɃqC< XAB>M _eFoo@H% 4@ph qH`/D))(@SHHP@{Ng(HAB՟BUB[b /\1l%&gp؄ +q؆p(ۆiڛfnf)X=uG"aٽ˖D%zm x3WKTK(/&F(Fiع$b 6g^To ȂDGQzjtYSL1CS;dtZ>vGYX#GD5'={70C?\.mc(m~@Ua36OH_ H* ޿Wp:0S$7 ?l`xCsƟ7CC_Tl@H6^H 5ё7|:kEh3i(:0gxV$՜a'GNJkkM@&l1 ( v`!Ælb{q~( #,FO x(sc.z0_CdLƇ̆Ni>jBz@ӨO8abx\7bi!:ׂ ܳL=0LpKGj8n|Ai6YFMJXjVJ MPduAQya,-UVZYz <_놶%iӣGt#s̉~6_bsD#w00ϙs#NPG'38 jI J  6IvS` 9C*bs" $bLMt# 0;F  9Dr.M24)7rA5`!87SψՊrc 7d1A~UZC,D ;1(  fmDBTP U챇-Vi aL1-D-[Ȅ,1t.FB,4tEKr"VuKxSo"g+Halk",꿱BI<FZ)W ϩ D&JU$a:O&@!B|^h *9YX`H,$*h:'LҕۺCN@ `!DYhc!M\-0„U0 1 Y"ښa ֐m!`Ņo&8#M+f2P$4 8rq ,:řF(8),`,!HIsZφ% |$\P󎕾<^{60^ G0ᓵ0&ݬc-j!6Ubo() tA5LdX3E.pюhg|(EبF5D頏 8TpT\bl8->Y0䑃5 0|"w[w9aءKъoaD 6lh!@Fq',dcsMBAo!zB򩊜ы^ XVR 6V Q" @.u䭒 QᵺÅұrX Ho]!]Е#2Q)a/!ca0!R/ if$n8bҏ;Az.`H#?^o}!A/mkQS cC@n q4g ^g@Fh 8+C\ Ua#BА,B B1AHa! ,Z(Xbؐ^9Yx^R1nK,78Wr=ū!`X\ n9"0W׸ Ҹ6"E"1!QWqe `|wĦ0ρX Xw#J^s pn!2֤yxcmx#Ed^e)d`&i9*=dC-nZ``f4._O~99d.SM]Aj1v/) pc)M! o~nNЂ?@:"qa iFLL8js9p4KS0I-Q|BP04F(`}p꤄*(b|2BF}TSO 5XF,d}KH"\5K߱5D4@ CB\7T3 & w T@ERQ\GXC@]8D :cqKqV 4E zCKC$XgO{|C \*xY+d9$B/A?|BKCfҞhDHh0!B@DtJJCV}L_1NBxAO UN^(!gZC^e*$!ʠ@_u CD<4D2(TL[VfFE!^WJQ1Ec[9Y(`1V%j`@i_|*CpB\Xb jAIn7aBL1*,:QGW̄ F0ԚWxy 5\tF 05 Lz]}Æ]&z F_Zz\MWu%>wD Ö|ĔAset ՞]1j.D -,jl^~+u*j`Cs .@.D+ @jʦTݘ|$$ <<؎ ih h0ƈT(a߱ÀJ`\lJ _lB0 CfUNHԀ^paA*$VyS.(C@CnQLA2VR*TCDQ rKL( rEe-/z.F`*@"T=kQxZCC ̾iQyCT\F*iĉHBtŤF@0kT0Py0S$[u./hlZ-i=.w+lٙzD"@%|- t6I($vyٌ4÷㘐 ɃIޅ&0ހ-M(g "2(lR6 0䎋33.t= < "?nJ;H7Z0hXC,U,Dѧ$`FLDV݇EmEQ)!It.i$xyœ6,"ڶ@CB!CDDF`>XFT3SDL ULAZ.߰tL Z:@vEl.Fp fC 2DMC/#$دC0(MFC)-tAClH% \pABhyɉM}al =sZnVݕ qnL-|G+L1DV ,ףdANktR'Ɠdpq( , .{H9i@ _l L@yA@b<IY{9B $$2L-`@?h ~! t hF2_L+dLhT4FmI3 nC2F.  Tp074-PC6-DwuLTXeMA$DB7LC$Ts;nj5?,DC4 BԳ[D*̀ Al $]@E-W{BB;qhAC8FTC|CTB44}7Tj\{5ڈÁC[ t܀H9(M]b{FxxiM*i50U{0M}XM'kM]+4gy܇~G5^ر90+A)6 ,4tF4,aD2('&9*L/h6A"8rI# A@rܴ<MM yC.2CX¾ Ss@  BCV#5A>A`ZU(*C&Cdl0?D[Bpi-Y].bJ. B3ȕ/xO6 -QlDRP}7|אCV@5WER/T8k .ҭ 8.LB# FwdLpQ{ nHa@=l8CxXALĘL|3ċ7L$[#ltC|@$-ZRh-N 9d[<\i6(b\Ȏ$"| 0 $'s^ 0N[pm$FGy"2ay.p(J/×G.$*5@#Mrj$7mɦ{޾Jb I:XmB;Kn#ݼP )Dڷo 3us.yDKc<R=l فzLO\ᶪ8-s )!Ti&w59pB@5U=k.RO/ˠZ Fn !| fIČ%R .% P-FF5B{h9.P{͒;`$%Q%Ѓo8 (l i ,̼Dpsokؐ/DS4HOG7h3ÎD@G+; 0Km8n8:)f:p,0bgHaN:Ð@lD&q6ψџ $QLaASTBR *  8W "a2A RF2̀ A"*Z -,@f H !Au']mi#p: B% aM XbQ b eDH=/ra D B4W @L#u ^X1x'X"0Hi biP@(z@MSOvc9ȡlōp!o h =GHyS20G} s;޳ Ьf5 a'P4i2/), LG\1Pcox1 j-uH@Q;@j_ &/݀MOTb,)Pp ԁv0xG3@,|ǔ_ #t!RBqa!N͂A*U1fч>``.C=pcU.  mEAx#)Q #UiU%K3(ie\ `$/lqiŋbF~%8Htrms䑆5hs ۃU9&,nq 06\G%\Q E֤"(-[w ŏ^c`|FZqh!FpmC&}.e~ 2< ̠0bKTaA ;!6YdOpSE82я WNx3 j#!8|,{K\^ȳSbNI OŚ I"BE@DѲ0:bd2:` ^{#0@xU",2L G"2E )]*aBdrjD,Fu' .$;b@$fk/CN0x_ĵ&&[vf>m<c Ne jp[T ,ADsHDf81FC,HB‹VZ#Ani٦\y  oBs\@lO95;P܁JύzЀNj% Nr&>1wʓ9bra_ CUd["c@h9E Q"g#׬P 7GtTWwpvSBg~$*ᙟFUR,a 7gLuxX-@;PsH!cA\  뭘- R8%BBV'x xM+|}0 , h ' bܾ`-+f b Nbf拾 ZTApV?J dA9nD0!2<=.dGnJd&1g/0 0QrrConVhc?,?gp)$7rc7D\+r| n`/ dP`x AEHyp,Mn }qNDD6,n20>m $M#R "h! F"0D@R Ue "! PB@bb Xׄ 8` ȀZf Gb #eZb` !.+-Ԡ0"" ݸR#f(x%c,d,bg"> d ""@F0< +#!07"1b3egB 'DҋЋ&+#D!0`h)knVa(/@a4d/@rDq>zp.&JD7|1 r v |v$ ? 8k8#!4OH\$7EHBNmj(?.Q&-A%M#~.3DfC" z6B.daa ""$` \@ UHj@ZJ bbb 8r #%jh !%[4B *ԉ)h)+K**J+? a͍bl {6-/ B lshSyn< v".ڠ g2B`!OH #`W:@E@h"6Z#5"" A <Z! 8Э XnsU\b Va rj2n>o@+s.C@\&>cnv@IC`u;fPﮩ=!v3~蓡EޠMnJa¥qVjfa 9ġK J*x`EP ΁Adj}a$@6A 4Q0BU``J "S AFTD% j "*$x"j"W0RR"#Yb8 2Z}A%^$BL !KY",0a @#L.`FibSݴbmBy[Kar -/J # 1nfܪ r843Jf4p  10HBb ! ,i+A?jCc|h 8xhHosad.C?=dCcD`X9C.AE莨j `i!8X k@>[ɠ@XaMTJ\  ``CV? @+@A6oY`K`6VxF1NGqIH$ @.xY#  a"3 tzj"n#A !$y4q2#@ڹw Bj##jw H f<+`F-Ra`\_ΒB΁,%9\+£ip Lg4"c ԣhf#i@!Ҥ{k~Hm|m `#8ɒ! jYPA5h &@&X[kAEzaJiGGa|~ C@ #Ƶ'~fEACPzx *㴏@#<#5?Cg㚶u7(a` ؅]IǛ$6>!z@ [5Al J9:H6L 9B[a8{&z9v vFv[AGx*|/OAYAmK|4}q` /n .7#lt g:-%'" PYrO2 j9R870Bp#7Y~@ 逨@ R M/n< A#5q1`| w B&a-N,,_0,b` ޢ."dT|s#/Df4VJŎ64Xmg CC\h6" $ɒap Cɪ9 iFd) Z>%T3ԻcPAq o`ڃg@7& \2AgHJ&e@s]sV,/ l}JZ(P>#Fht#)غ$Ј9r^?'N,ySAyCܛb5@O h%K mVs@yسg7>QCi sDXx .]bU.`!4XƑql F9M&Fd2&@oD7#mZ+_GkXˡ[q!WmHi͌O)"#>B_7L .awkB݀@p:訞H[f rh8r>mY8zBڋSOkӚi84FB 7Jڌ "&#ˉujDk̡sO1:l qժ,E# ڒmJQrD^$؊0xH#\B,*j T ճ)SX@ů>i iAH i~FBR@5j.D%c>F͗ʜ]I4,~0 Z(1uFhZX@NX&r vU+Jd,m@ࡐ쥌YC/XrYFqO Yb2Jp˯#X׬,#)!XbӒֵfYwȲlb \s ɦ B#%!G8r,w@+ @OE_cD~cMBBfL*80 j0F\ %]GafQ2tHA 80Pc.MJ3Z2Cc&r5`BGH "<x F OK |Ialy ږN5tuMʁ(sß!EF2C1܉;ZR>L$^?r$m(Dy m@T̕D(ds&tt#\!CȏIk|E*ZD>puz)u3O t ?xe$`^Pә0@#D`Ӛn z!@uC~%`;rc.a=ZB(v J߀o+/r3 d c %.B׊%6®U-d :ʷ"mF #ײk=HxYۤ0?0x 8pS<,/uoFTȶp_czP <` T @*ʠbO\*7! 6|bC@| C0 30sF3IC2j;G㇅z4o<̣l\-@ 3R. &@iİd@Aƴ1P ИhBp#ׁ4P N5[(&[s^(k!aGz}@"1i Q"0(v!K;A!A ܐQc!={@kdO˱>ӄ[`hbWKxWz;r)0*(L@C,t l(ư_up& % [-Otݢ!+)C5Fp‚D \8gs!4%TT-4$!t!1+]2u M1+2Es)0x@I\b/w0mذjwG PAI@`T)q eׄBxސ 'dfgnhRp@Oc$Hc@#V!d!DQ$Gc)Eg pzˡ:Pd@* 7s nkI beX!hqQf#A AS"QqHId@X}DҠs7Jl!M] Nq9Wp!PjCHhlZP  B/d,aYUAa( )0G]i-D|T-̅ [ru{C)2qsdDl%ܴ ]3W^]+X)74+qyQ,{)%S'{DD2g 벅op0@Q1HQGK  . _YQG;w[ Z(eDP* ay!9@B@zƤ=SAUOUSL^G \c&):@F(g6O7 ҡD1qʡq呤q9S0QQQhq .QDeziupdAFqPBjdP@= eMq5):$LZd&cQ%L@#)b!}E na<A " WQlbXP g,wdea !G` H <4B-I-.E<.CRF$aJGKV$&DE^ ,8aO/:POr# 7` 6dWNaCf -~ %\ j9 E˰ Id QDp ai]_8sRwre*U))\0 S.dJ*\/{],D%uyqa C2׮ G!*Қ(VDvǗ,!A.i,*BT Ym @nV } +y@J1vDIzYMdŐ'P[)2 WHB ]0 s2&z?SI{` )dcPL$G]{C[368 ? zMgOlC d `ȷlb[W w b bJ!2柙`I pjijd BRA Ȍ8b%$aWUikL{:4Z j[Jٜ/gDȍ@N  "B΂҄sl܊aC(2$BmJVG۔^/]Yq,KX;[ۤ={!Y2z*jDEp$LD"ԇe*!)/dE W `BCy Z !QIHZo(W9y'RC"h!x֌qQhg z8rT;uLT%1fmayc7+6rMTkV;hE6Q| oRZ}Q")E iĈi(Rp MĮ"mC-Դ#vs?PC{U֧S2ajR ߌpɌ\'&@X\FLd k(0;*#*)\llP*"rp+l`2Q,6 . ҀDIN%l pҠљB. זH{V$^sF\ E2F)BGo Ā  '~r @114qI3( zAs cG8X0 < {&#ż _bLUX3ۄ5z=,RWrqN&$gA0J enf,1E eSB2hS|37@!&&hazQcA"fr0Q1 tᙔ+Чԉ=A%@4? 3zllR#!cy(!u>![I.͹tU+#4%9Fcsd#:Ιc͜or 6;ph hZj8Ҕi˘1UH ߲ƑcҀڴ&0i`5ǖ>I֥>ٷ-x/#w%V;mLէK4}m@ [Z[S[t%˛8 [ -ZlL ƧVZ!~Sٳ:Y,ZT{I-#[UcXe4G1p0?RР=R0p/ dh8D*8/ry*0",}&r zdà(0ȁ hx|`*Ue@5 Zf$&pP@$6x(o&" b|ȶ4L%]L q"`|ZMBŖAkQJD a&.JH P *@:$`ѠF r"ֹgeP K $3h:>Ē`b㒛 z`CHKjqiب#PJ9F"liH'F-K0@Z6A+]hk'#mw$9j>P(jpOn@ $n l\0(F9 Yj]Ƙx4xV@) L0lYM(JÇqơ{@kpEc&q1 /" CV4T$Ɖ̙HM$8 ʁ‰yHx㻹҇L ~& BE{켓8 :+b0 Nۺ4OPI1D"^~AKk*^i39 !`P :aX:*VC[ =HVL`:D i`#(+@WP~‘)׵qV[.a-@&lHj2DlMƽ1Ą!ҀF-KI5L kIRvi&[VGUr2r4 ,%~" E"€%,! IB) bͿ=~41 襀Ab4@8H6`mH]$A05n"Ū!ECtQLgxC0]$M) C14>l IS4Ϛ2Tx7?Q1H  }E  !uA9h©3ƃ R\y1E‰C`ښi.|c1qʳؽd W,a-\ .]k| ϥ ) 8t@Pߗl:#b>$n DT?~Qܘ#*\@/ NӢAV]*6ne+IrFwYl# E.p \\(3Go /`6Af|LPGp [TM-t3$(ljۍ1F:Ҭ06dJT2jke``GB@eЃ6bV]-cݤɁ%u]PU\8jKD||mJZ^q4C+_ y8 SX!`B"`qGxFgUt I4Y6p>`2! T$V& ;$* Q]HEk'~20d Zg&321;y@zO$So@}C0FaL4Yyw"Gs!6B,+RFy dLAV}AL2 !ru,b>D P,0vqjɒ nRHJֈ"ma堋H%Ћ"⋦8/ w1c6p:>K#9[C/"Y8 $(/Pp;%Й08Q%ۓ=g80 # 9: ȹ7 .;AG0zCr&Hsar*! 80+H0(<ÛHx*X58& [p!3( I bU4p(਎P}-P3GYj={#=sb2si|c:908@1$ G:1 M0D 5L>N))O>hRpM wDxPZI1\h)" ` "9 ?'R i`s)O 3!t"}?@AdJi#, xW0 J 7JЙ9^HT™$x7Hm@I;.l8%HPZXzc8!* Jc H^00,6K[!x{j8= *o,ـEY*AT遉\ K*Ď`31B~ Bѩ?(>xH(3}]ͻF/fde$WL;,, ytORGrtCxy: DFPt5h01X$:"?oA.(7#k!T 9Ȃ0:0@"1!S L%U tR"("P< 7xBR|p3l\ %ЃLJ 6;yl$#S2і@"H xL#x>xcYe*cYWIXHuoZ1hR@*XXPJ4XtU*{WXNp։"Np0+e0-Cxj#&Y6W ==!&;Od,4O0  (OtΔ/$3;38y\;{0HpXPH?U(1X [tQ ": (6H1 }y"dۭ#h,8HX$@ ΰȘ!.I`R}҇0s }@٭1Xʑz B\ @ P83QZ`R*ܜQJ:HjB%6AS:QLb@M0WlA08PX395TEI܆=R}Єi 1t=X P'I1OAJ'n8`F4/ l1$!!_G(Da߇ƫHX0&1\x%|8:6+O05UST/19,0.MjP<r1(ۆ)űM؆~C:r*MG5S7H:=HpP[Y0I) `E Q&{ rXe na ^1="0'nk-t el-s+}*} 9ڢ@7tZ~ pml6xR\  bj '\R@BV9qS\AiF,:Mb+ X?yD.X`AUHԁٿā:SGeB͇4 D9Y`G|ˌ(vPQ5c`X @D`sd IA3308E2s6quȋ؉ؼy=mxi}m7Pe(X$0/htPnPGYu@*1w؉Ї5ꅴ©:< XrɁ Y@0,05# ڠ{r' UtsUk7 ؈q Q6Z#A-v4vId [ t1#zs"TWhJc@tP8nb febO@/\HjjS@厫!^.ny>]caCK0hCIpofX 8zN0,fV4kbռ19*\.11JNH4P'C @/hD2a';'C(} *d!H+PCJK#X'giWB U`,bĘ0 `7s*NƟ+UGAP ޹gX;IE^@oF&1\kУ-?$ZqAdqA6-Recc#h9 do-7{ӷ0tɨh v(Vk? ,.EGʢ݋@ Af "`BS TG8nF%Xz&Lިo@\P`I#$,/mVxJHoK}L4d@5@X4XXp` O|(& H1JDМ!h Ʌ\hqT:)*:x N: E؀ffi/rIֆ~f},6f>]47s/eDˢ&|W3 I&qb<'wNCYGD޻s/s{aV~>(MbViUeݝ>ދ u ~VdXѡR.ȡ@A py"^ص7 c|*A[?xvtȆ^T 48fSR Q%] `SA @-0,Xچ(6du>f^+]`)(whR ຓrr|YXyt1UC3 *uwi /WB`$79q= 7Ys* ?e5 R0.q n03t5]qSdVL"ȸ<0Қq=$ ct@#O:OE, 0$tD-S;xN\yy}]BE$0EJ FX;HG )! C1时|9N_>l(dJ& Oa T l' ɦ_t2$}*sy)qL|c0'oQLI$Kr78 #'!X@ Ո5,ZL$Ă 40LL0 0\%r9 1Ș .Աe042R4 9% `,Y@ ִ_1{uclf^PhSe" DV=C!SB ,=f yYA ]͛@q 0}QA]d `< <5u]1]]ee^=u l60Wz[{R C(&0(0 Mv] >.< yA0c\YRM2C? )'0Rhn A$ 8A  "i se !)r@- '߽5JN=EytZ%=5ʳJiAO:H%OQ3ʟ<jFx2hǦPo ߌ1 ͊t=iN_$X 8.po3CAp!ju^LBe!g|Zc @tx=b ", KVɪ` S8=, c`%+!c`㌍ d @.xsGP1 fP`O@耆6qKph c TAn`H0>rݐ!2'Y!`` f% ^=@ÙqOșBȭ.uP7΁d &iDh4:AO5"DP!Sl0D44$ ii7&6HQl`>)3YԢ.X^RZa"{S"5iRJB#-~qӑf'@LtB^ʭi){c5|Co!Tϐ@7D<&1qXHBF!YU/@BׅIo݊ ƀ70[>%$#dKa=^et_uhB݄&]6)؋C8_ ` ɊA`Fu``A4A$`Gă/"0S]ɠ 8ho2 r`' 4Z0Oo]񳬀,#9d!ƝI&O-QmT=l(5NiSv;$CojSc,!19~л行;wRz߰%:ư>:C:j` 1j p4ZӜ84pjYcX}i59F1 ACD[V<,<*PiEX- _l,M}q@>jQdEWE ES028St4@n=!`!,l\oC9hht/8g C`]lZEZR=ű1H8^>8<0D>\bv-(HCtm  GIHIFEGG}O㡜tx#P>ʘhN%$ x%̄L\$ <XLDs.CEDdJjJZ@<5P(WV0E>WF[ZSD(R< F(TX1'BM ((L1A]2F9T^8flQoK>yjJ^r`@yMn+\oׯ1p>$$7@x|o NE{>Fm^p)fF)Fr'2 0B7eF5E.(jev6#=dEz=\ф`@_AfLD ƄXShi̖gfpbVdq>4f&ڇ7eqiC+CpΡ3?3@*B!̃<"C4$ <1 20ʀ2 2YI xrJ ,<UpAI j(ϗ_t HcIbFyS,Ɠ\Y-"CDԁ-rHq ɦdJfĕD JB%$?ACJ~BhI6\*A+,MA%KCACK*,iSB T 18 %p.-x%XatC t^Px1Hҗʨ dTW<<@@m o0J=z2e2@jPWR"_ЃSi`>E7a7&1.tV0K C/M}4>G|SC-gYH@x\o]D}NlQ-|lU}Ew Ň|ƣ>E p漍`+& -!8:-`S=0pl[,*H@4Pl|RB(5 OD ((z~m mfE}IFiT$jCd l?I$dX| BdATqIV_ 7P+ɢ-@6,խ1JuFPUjd+G 1+jJ@@7A >L-<,a[/p]c_@n\Y]VCnA?p]XS4)U>#SX,*dvLB-8!;3E9 C,u]?:otSG]P`tLKͅ0f}MM@͗fi+$Ђ1؄oPbXNp2+x5]7s0pzkPLVp:`' #!*=žwF/1BV(3 F(,A@Sx ,^8Soc_uf(d񆖿4pt]}+M񢉍}=M`R1Dw\tCl0ƸM@2io6X>PLHͻօ0`|~]+o‚v^y3DB50+`r%ފȌH,7o|IqXI\ דDY_7* EyԌ0-I1I|llv{9 ťpl& :KSoriwHFq[.f KzS[DĴ.~Fg7 jrl42i%[ysC*Yr_bŒ];F-49QR͚&t)>.idJ*@./tQUIЁ@3u4#QJڒ 39Lb^I!MWY 3J`"/$`܇_3} 5:o8 A 8`>8()",Ɉٰ$W2`B$`Z ~8/n2`tf>C (`6*K$,JD t/8fT, @ /uQB ba)#,%b*6"EȢZ#9Z$BQЈA|(DRH!HՈ&@>! zK.A09lEI4R`.:"&hQLAZX#5lY舜ؐQǛI饗g+C<ץF SEpZge |*)0xC@z!F,UKZ>6(#FBꂿS3EC)*@Ї3,p"qDM2Jrz 8C:Mep@DK/ANDT.c'(i( Yp1pYD (I $U \#hѭ4X 40(xƕ Ind@,,MMIM6&;@(1iȵ7M7KАm̒^/ig He:/P줸KIĬhկa!P4XS v0! &R%8G %-9J,b C4+WZ&PDAPS:"V@xAYk˲HI!]D"@"/Ņ[9LF2 a xFnq oH$ $wJ6Hx|b_Id< %$z sd~˟ C{C0c92`ZI6!0TFp2Fxh\D@\C1F5Dh&@頠7R+mBz_V:5zn[1a 6U@NBBَpޯ%Gv& '+Q K%,lSI1ur- A U-Y!! %JBA[j(@DZŰ,IMJY,ƃX$W e>D20V)b -><t"@,N`5HиF.$Q2p{R`FRKw \0Kb ^@ ~dy+IJM̦`1/24,p5DV\I ߂\r041M.LLhOZV>(G c l{@ŪW&(>ZxvRhLj & >RprQB+ͤpB;|sSJBiM3 ! @H$Pt8*I^2H#l˵8TY%MA',ݸFW98ǯ %1hgKp/iQI(,O!𵥂X]DUmNp"rJ2 (FH @_j]-4wz 'C{ц6<$P3hj"^ ͟ˬtxI I*IKuiiI^I'`τƣ0-N"xV"s$. 5bj5F"U%hőjv`JRD嵦%EApAVHUH.2p@~LJxE(%$cR^"'Z`DS:v%%fHZLG R X,b%^W@ ġHEl \dVL" n`.A +d~dAh *B/5/$/f$p19jJ"Xb@$ /n|#F4:d q$@mN @/$ $>@F!`BcCà o-"u(E<~ Nd/DI.H<A{f 43tIB34 Gʡ|@{6::08 BdA8F! 4У$H$$d@ X` 8 b"UdkBWdE d"*V_"&宲%AEBK 4PA \jF!bE\<P&J .("@@0*x ^ZfX,((s ̌ .8 'N$<,ސ*!' dpW:\8\]L4 P!`!0$:!lh4rwd ./GI5 R/|Dh!&44$`qJ8B4Q4.hzy@ f,<1Lܤ )Kc} pJb= &&# 42l{LRGuOC ftDCãIJ=@|X>(!"'4$<1Cz oz:/rA=݃ ġLdp$N 0 \nD~ JB r73P$%b*YHUj%UN>iEń-(A%%|G[$^96tBPM^\!FҪSSN5|R2+%V:S",` &x q nH czs.< ~v$P&J4.z PeZ@*nJBX%T"j :S'A  ` 0֡El<4􋔄3lSpdj]IhKb$ 3 Ta4dp.h |>n%e*"4CJBDdkG8zT4vOB8DcCH|" EoFZݣ!Cp$,244!Y {*rKJqHE9I9`(4\GT\$=!L)w!"5)0ށ _B|,mB >'xk%D+fje-tJڼQw*²6u 5QBHXTgmYPcY:*P Zd $KXa X?Gb&pAnT[/uȄE%-d P RkeTZ.hnVub4 0 ڋA=R#HzNQnX9@CFPJJb'e j2D Pf.GwE3 ,4`huLDB C$pI2H"j$ @5n$q@cI4C5v£VTEkuԢj1CFiNJ"dR"iM#&zgܣ٣Ee oBpMcXG*x/VqSj14bH=p 3{ 8 F8c@FfdcC .`@^⵲Ų!0f%NL"-ΕKGA$UDHl6DF"ІLOA ,QT;鉡[z&ID$4Q*H/nY4MEg`&*C&$!f@bZRlbSYbKe"z|^4z-9F,  SLedB!v`!ZQ0h"vj87n x*@ވx` XNYrEaz]A&[!' B"&>2#8 ,tctS$`&NAB(3n9`&#CC&4<4DqK19l֠@C2©"ggKJCdACn򖝾#o,BB$Z8/99G*'64lkgcDh/&Dg4CCFhr|=#p=9FB2*FOLgI/qH^JzFr fL/,CCd>RsA:*ѣ g"l7$@&"&dh$0*]-͑~'VkPS'kRDžOUP'&s,yZ*: REP/ZԼGzRU"N@@A 2`/\-pa$nBB,5-DRl/J;r XB0$<ڝ s7.u^O* ~ l.D$4pF3Z2ΰKP CV46j<”6?Ad`op" B}$ (gh5D / $3f (BR",cS`;N]jԁ -8yf 9@Dx y[@(G46p,# n<)B7 @8>: )mC1D+@MXSƤch$>H#R!qB) Y61| @1p|i2]b#ҁȎs@Vr 8#rdd tǷf䒜9^Cs̑ށYr@aK~-fXbhН-G^^lWˋ9ހ( h!h$,vDPX'L9`L <`.CK"aDvh `"'Izf1r 8o` Ɯ)(2Ȑ@8@8VBDGC^AxEh)|L9!@m4$KC QB @adRCXb&@J+"lb p G)CV/+!D'Cg 'P B5!I'juN8>4$S04×[Sņy7tC6<^MtgP֐4*@*N`@@6٩ Q@!sJhYQ0{Dqkh1TһZt!T Oppq*2q- mF;sPwwlZ7]"!x' =HWxѠp>h~Y'xo@L`6@@E. #Gt17]G̐:"+}dgM4*a=e%t7ꠣWfA0E!)p9L["|!8 g8S8JC.+BHR"P" JWa 0@Z@8n( > Ő4oH/n1 Cu/ YSe N .ضɓM@ 1k@+5u,$yFL4} $y4$(@5]3c A Mkcp $V!&`bBa3@pNQ!vIu Wi (YK?!I@{U@@59IE;`\">7ԠKgtv)5-= IZԢѨ(wwQAtFHDtAhQn;:vX n@>^ @Z\ PK 7|:x@!\a MR:c3<#]}0/2I>cƨҔ(@Q^hCXچ`!8ZUH3\WlRc%5(fXDp_k5N/,8@@6DcFysjwZT E;t dk!AV !Ȣ,:Z A/ߝ\@ P 0ZH hym! @d)SN9dr-2x4-Ex: } ج4Қr80A  jZp$GQ1Ц*V {AQ6#aMP.BH !_[P`ÖfCY5$B?(`r,#hhlaLJmV0Uoڋ^b l !NP[  ,=#3 [dUb e*Y^ke |cdfp-UGA8 8 - l%N;$D@B` @|e A 8|#!ңӞ R锌P=ij4=4ͦc͢( tvV:AMOEҐF-ja uR1 #؀#># @ I2 s%v99i@Q:S?mu u0APnp%B%:X,Q 1QB(p)/TAp @E )!$ V{)p+a I `sE-8W.@ PT\uJ^/+Y` 1:(_Rbr3"`/=1yA @0` P;/kE]*^/i Wr %$ 0 1 ]gLd.TH8À}D iWi szQfbq` Aiqia6vd?L5 bdܘMGu$.[$  ZE1 O ^ P ,0`tP րg V^Q:9*F@4P` 1AR#yKi 9U=1#k h=<;gl`sw9'9!%sr`Jz0s ge(@ȕF"P /j:AXa P`%Vb@UP zp'Uoo0AX De, PP :0  SlprX0J$c~H-TMg9- i` y`pg,'M*l ^B9G1Q_Dp GHKfh KXb 0['   Iqn~p#1uQ6v/pj\DL\"`& 7ˈ9QH (Y `ybH5Psp^+;)Q1 O! 'Wa0 Y R&P§5$k&CA)A(S57h2#6:!|;"!HiՓ;c*EiOIǖQwɔLٴ*M{s6a`dT1E- a*v;tP_svHK@-(á65 8!`j!1zl1j 8.N˘2  +c $xbe)Q4U !5/+\3nkc G3Ac(qP@sUPgQg } K@bP8` ߡW0(qj35<&LRVu 3SNWէo",TG}ʷT{Q,ϛkMiQړkPUzSHl7$\UH Pgi Q;0iLS91iRm``'n't' ` `a ViO2Cr0 AA# spJKɨRLs~!y*;ʚ)5?ƈX`q!H Q*^4G` l|3 P}m60ɰB {Lp1Kp sl` `Y)#o@ *Eؾb'FL4JŦHԍ)րi1`}0=d]/}@OhaFpOTlt.0 0 0 &P019qbF !lh"X}fS0ѧ;Q!9`92:9wFYmFH ``(Ҙ i3,1!qYV3WF0a%` ڐ``mv4Wb%Űn:/9ݡQ?P2MB iF3!:e @?` k;g6)*IP< Ű 68ЅaL${a M@P|Յ3#<UuW=dcy9?$9Av7klS(-fK;ImUam%$!3(0F3ہu@&tlnq~ yo9")+@ N$`X`Hc tq-D,>Kkx0@lPl, ۰x6z*. _A_fp8$ 0*{!?Dٳ5j @DH >8c +Hi 1 &%M@J6|95RTPuE8!VL+% R? pR5lꗵ<#ߌs:\͝3>$1 Hl7$ev9[sRHc#nZ-`-Y,>$3< \ZQ0Vr{s΋ ~ʭLhINm솟AH 7N%Z00F00&y"CZNk9:) b4IC (,>R W9BH#c H(rfZvؤ|b 4rzH ` 4~@4Y&8$Hgfh$j wn2nW(H"huF,` H.``J"p!O\F7C /`2#( $+70ʚ)(2凔NfEЅ ~ :,pSEf0bb V]dŤF   a?9,L͘:\c,;l%h#C./,m̠0 i.L/R,8Z{-ej͈#RXO090¾V2Șю`y,Ho~X\Ƿ^/Es*V0f[&̈&0FնULVxD> sn ]bgHk&EZd SDqGjAe }lq=1R#(I*(W=|Ț/ 7IjAU s A$'!gȼL=?C('P G$da+!) .\A]Q>G{^Xʆk@ f0!$ I('IEh1,k}1 J{@&"$ Vr(/NŚB8BNЏ d@dD@,8Xb$ t5 4!WA9!K<$D0WXaᘐVzMMyk@cRHP-6q1قn9HB BN Wk&KA\M'1E땮`Cb  H/lDz఍AZ(L* w ۚ$ؕ$2 cA96k BPU؊ *ZQ]7܃^K ( ɂZ8 Ib !YDWVH@m[n7cP kl,|H#]Xl r0vL#?+m>B' n˴ʴ1 8a Ӆ fU1?<08bыY !D3 4&MiкP{Fׇg6Dz` Z#\\6DZ1@Ҡj 5\u$F ja QU 4Q`~H ^>n!/+zi:K`y?,f M>`0!26R$ )P"X^hzӭdP|UPUNg*"?#`#-4Z " ,8#> Zr9(?J ?Q Ga^0R Vx)Ι 3UZ Y  1V)oZ٥]+c@H3'@qa:' \0  ZY3a('0 +ٹ $(ɽx̲%xb@gh:ː͹:x8cQ$ s@(H Kp7hBB$5 ((=ŰiqM(1}؃ X ɁHٰS,=.@/$$h 81:tAÚ2p Cୄ!yc6!3(~S82! ¬yC4`!H8̂`&x`qH \pA*0zSIФ,< b0A* )^8C/Jp;8$`r(&)[SHcpP p琝 X2 KxO`i PPĸhO9,"(YʰaL9Ha|0(2hؐ& 1 s\6 ⱨяENi VOxgO$oxy:HEP7@:("!,D8˂P, N).)ȠLk0J<1S1L*.8SЗPJ B*'@g h(ar ?qˊȁXIO@[h ~p4Qv,T,QBd;̄x̒ŋBx!Yoل΄ւXF.J A`ˇ093^Ic8 hB W#b¤Д |8ZЇ!#M뤋 Uʏ9 I "ɩH( +1(P?/n';Ѐ a&p(%V ` 5 C8(ʏٻZ9 YQlb8"ỳ0PX8% MU4!Ej`* #!=Q(6x 6݄0I.@/Zp!M`K*&85IM(O4J4p.M`!0Je$ G9: _f*9zg3Y:@^TP@@aDj}"Z'`hX_Ph_xh'8b%ZkJm(m(Ȳ5?Y9g9Ac)8?I@5Qf|!/ʂp>0 [3WPÀ.SH~|P Z Fȕ>m'>#+[ [p Π2^o"qO6hkH/T"B0%kχ H7e KЋ9Ơ}>jZǑjF0(y"ZٸmT=3;Z 7(\Ƭ5k%X&V@97H.HhKK4 R`X i0TBs -RJc#.1 ГY/ 0,~vX |g%0j$=j$: _ഄ D>H_PzA_xQ`K)ab-(L&(l__ . LHG1+0UM`ELI&JY\@rN.m%:_h*藄Hb 0, 焀W09QrrQ;2,~;G` AV GQP%[93wÕ jѵ#5k M@Lln;Y&Q:HK_;M9L3Jo xV@ PL% LC M ߂!H: {+h@uֳ%+٬IhiyU艫h8||̚^ ˮ! @60 N%Σ̂~96>hI҅FibN'XG9w0}tLN|ȇ0Џ016)f.;D;춦sc |Y "쐠K#vBȢ:0kO0`P!j͈ ZSVrh#o.9sA6qJǹ[VMP@* d"@:m(m`|c94t@+@ 00I&?{N.ဤtρ HM] H. HCwD0ȟ+oVm U)膣y ΁ānhrpt͠hB͐nrB/T<@ H'BRXEE>,);|%D!eife;80hsUa&?P% .ds3D۴wۀt57^hJ - az<ne.,nS6昗xa'5r~!H&?oaFb.݊VO?d56F߬t-Mu ~B[ ˤ€D=`010`@􃫘cMJػH)_T@}ˁ l<5V AM$#FD6$ T|u9\BU@ K!#\%*)ȱJx-&~LK" !1VF2Aq`ԲBay0h#Thx,T0C (xp$K&Ҋx/"@!/0v8raA@([ dgG&*p$c&R jdyA EAh6p$t Y?H*\ ؆rT9"Poxds C?d00C!HX;0 4]Tn4H49e O;.hP7I$G(@H Q)H5D!3fvS@PG*@`/Z}U5IFC= CM..$a-X&dC71ѐm H!(XbpXAbȇ nat\LhE\amik b` _eYGPŭ@X"AI cRNwЪZ0 j ų@k,Q! *:.oȤ+#㷆5OL$20.\1'paF%ti$1sŀAG;a` drVL`3!B&"Zب %,.2B $,dІBpea\v '`c Ԃ4h;iEq+aX@oֆߡ@߀3\S9ᬍwCXmQ<4Lo>00aAwts r.ʪn0!։ф>T"SD~@gҕa C-v@۟~G͓7jp `Lӻɂ"`3,%̀Ga,*M$R8 1R5A\eD\)'$9X(@ [LRX>#l[S4-1؁Jd9 ,Y@lk &ZߎdpNH|+JE:K xO<\ Isc˃BN-< ?Q7b9D,`"!Kz0 Jt"X &Z5zV }lfJ1ijS*Ұc!E}p5E|9I@3Ȣ ,Ϧ%.8A ƣ_8k[ʊ,k!=@ȑr I82,edK A $$I&3  i,=$Xa21BmPh6&?eD&crT M&iL  U&E":=e2p5``mP@HƷAOB>\`䀕l<cХc\<LAltJ4cP ףLЩ`J4Il>i !-A P-/5-µAdp ] f ]PtbY1AO$P %]6j:(P%\DAL1<h1,`(xVF]LH,π+u4lgFeXǍlJ IޭysAHGMuS~č5bHS> H`^9Z`HH`\%B` K V AbsC DMc&JJH蔭˳J[  Sb0@aيAU]0|CNR4JH\cqIn_A@L 98DP h9[,HxeBr~1#Xp1ꤌ* 4F-p>RAeRYR>F `YԔJ0=FDS-4^8&玥sXUc6!xHG͌ C#`h>hC#`Ø``H#DB)CFGB"8d& $HLnX$FF``FI2wh~(Lqtx$$H{Phz~ƀ: H+$SiƟ`ᷙ,JMK g]J\›%A% QۥCi,K@(UQ1#B!BHyX%>ll-bmgm L= ilgx|%|Xz08&|炰UGx XBF9aHG9A%n(p`D YA)h]eU/P*1B `kFfM~g(큄T~@|n<-<@&,`$P,BH@ t^9 8 0@FD@gHJtjq۶KV 0XBeo.A ̹aK}BқV'\VVCAj `(\C GG|AVFZĐ\ % &k"H"(@+5fXhj!ɉ Lb~+.DZCE!qjZrLP&Y>4HBA@eRj-|F HCf `G- P*X\jXxAgFU4T͎6Xnw}F\(H샂 CӲ1A!ޠ68~xAF5TC]xC+lJFn 0%S kDDͬn肕p'vh@$H)8|Λh.A!2d aqY#cx̛Mkj.3P1gKGD UbjJBD-le$]\,mCE $K I.q3A+`T9xC" ?sGED?61`t{CdE<.:L),?4#@4$4dq,A?l,- p=+@zH-MXbT'M BDDLx̊YL#HtMb " B#1~Dz,nDl%MH `~́=G;Cx`íf/5D).($$+m?XnidO&D͝6.Br$AV;-ըߔ4镃*Af˩4Q`jLhJVlAh RaL0FCQCG|IťiMep(Kzr8#K`cQExluhB@,bx`QDl'D<ADx:5CWCK4:@k@HDQ;kxȮHz:)Wn@dF=ĬIT8d>;@t_-or̙Æ6s fZ%?ZתȐ /9RdIcɢWoX&јVF>nqNDGHKj$V9N(j9,[AsΥooEi '(B18a4IJc 32#,fP6;<@%J$? `+POV>b #F P{kR@X; p>MP-P{Ė>}ʅ4ijOG a|O RE ~ KBo@K18 p=Bo o$x5  tz亇vyd/@SF zdωA.%wTFTQ[.`$[%@F 2p3+њ3sѠ|z_"=gmKKHrG[ *G BN,)"O-E:)K #pfb `F:$&yV0 P#.`"J Z1i;v >pYV79l(c#&0N 92B%h6$9ZĘ,GoKp 0A0,t B_c s19EΐA6۴@xŎAF.d 7ӣ~гf[WʩWR!`8TL ƀA=/?6n\moM.IA@?6Y,%lM C֣ vJ 6KT ѠX։ux܇ue<"*HS&#bL`'KpE+   q *w1 A_L!6-Ǵ@X oPD"C+r$1 @X`RbP4c&h!D?}CłFr } LIp Cpd0INuE6(+&k$*&5.ԥe|F& adq7d$&C "dd1faY䲘9xFh"XepE`4= ۧ$6 {D iG0x` `;\3`0sH_20ԁZEfP 5]+ Ҽ sJTE; 5F$n)6sZp؀8&Ё.H@0bnٖ(dφ*1 fQQS6I+PG=x82`Q` H ř7'L^,X@xu ` \`cT>GU z7`pepA#%=nULd|*{!m? q"Lo@CtCO v*أ"B Bؤ ~d`B M@O.Jjyb!b@N9A@FA.pr   |!MMC..=*!$ow`H~4Q'̑=aDC$FBNN8 Џހ,9 u"&0[,b ³v c$Fܠ@%e).$E&/X +v2We#Ų-Lv^ apb" `RE)$ +O,0aHA(1`" >! ` @An  "8@ 4# #\ZEm҃#n` x`D id@9$ "ڇE[gm^55gp3s4Brs<RP)R "Cp=r=$@Nq@<& WR@Ob1 : M`G"yx@Hg3A`yJO@cĀ?ӣbzX@@əp` V #C6TzdSc^>`Ȫt|E.ʈV< Q9  R-Hf!{ "=jj0 Z\b(%#$ , b@ڧ^r;K_Z i+ZZnB#%DX$&(Pav.Mj1@%'=~ ".;S @ A3n@a R. ^R"ܣUH#.V"Uϡʡ$d ZWEg<^nBAr(AllL ppD?biUR =ܪ O@B%`]mGv!q@d@v=oM@єAG,bc AQ.0ljF H/gi M.ĮM Bn ucr .M.nCd` DKZ=O@hh ­D1=VH  q. Fny1I)@ ,T(Na k(&V< re$ bR]sGV@BDV@` Ia|@`G bA6j9@TH >"z b@_DF6B R. c8i16lB>rn6&кg>:G.f`&Dkwd2Z |VAv?ih l/ B9$`Jq b `a`FL>xair@V8W恁4`A/Lcl=aDQQXA|;B9' InEk#t($blea)`YvM;.A ^s0X`<y)[,r*#]pWՐ~`%1"rb \a1.г Y%ജ/MFncYae \'vTcwT83If x?bH,<``J푟:n jU-*PN =Rԩ;ODdӣ (IQ2Gi$tG z8=R/=DDm*h~ϙj2 xAx`d=ꮅ04r=K'1HZ XĆKs.a@-i 0UgFذG6Xpd /–9)rf'0Ԋ`Q>%m%9Zii@+K߾dCH `8~3 QŊ=q.XչTYHF,Ah5`Ե/`M|R @+u(CFG책6jԮP8Pk n<lOlܣo ېnk"28XI{TςE@Aۃ1H  _8w A(zb~_ M\ʨ6MqCp)bcC/ C,bC'B" o 7}m6 blBN$p}4tN~9ԑȚ TfmpRQ;;$ÈL,( n^bB SeqЫae OzTnr^ghxGg\&oG : P,>%~Ls*?/HL;j7D4j, ѢǥGxgKh[AtQl1sPp (|1LC=Krt1XD8j>BCң4d ,X745*bB @ (i0| ; "00RZr%s #@a*C.! iϸZFŬw`n Q !-R'Hr&;O>x yb b@T 6( QH,c! pF_`8Q%*ILSؔ#RjLQO{ڃcn#)yaA TLn4Egbu niM r^C`A84&_\'<Y$<MX(\-`T =`uN b8#j`s5lqZpAC@qefH @Mb1e A2jV!M"w)7ӆxt\Cpc=jB >mIoP6jN ~ЁJAq}QD?t86$ o8 NI4I=bQ cgr dVr7"ŇjZ6 ! *k!lDN` #Ԛֲ.2D3M 1W*U&5LX>a \%W:%a7 s'b,1~!  *THV0+5 a'9l8zK0W5؜3]xy!-Y{Dnp!`6>Q3LGM{Fumlc7.NS gcNCksOԆ68@*<.І=l [elf rCymh )bYw}C sJհ8#N:@> P@~I jFEjMWT@ 6e 46" gId<|It]d-Ҕ`I7]Σ$Az+V0h UO {dU?sQq" Y>DbliER4)1]6e_F!LBa;8 h;Qka/JC(BBF"a]~bd1]bֲ~r.'+saC1cdؿ}̺P̮+8PP}S=/K0@`Z  h7e#\bT !G!8:TIhR[8-pb<.!5dĨǩ52 v gLqҤ }h!p~(`*gF>jSSjtr#ps % )D:_v~p%a'A<) .VCH2X&*`]7f{ߏ~xQOD7*4/`G@5  hdO5R)*6X @S ])!l#_MIZ0+!1WAI[%7-Bp\p?.ZF`rq,9ܢ[1FO!]tbrO11Equ 1nBs ϐs;`]o4_YJ}Gb]Ӧ1+Ai 4ՐXIXg3pWg9L8v wz 7W%~G&G˱m"3P2w)zbOQ07s{@o&f2-NwQHAt{;j`<$|f;f"~WnR1-d|aL=3XIbP S$$ 9?T AbAc'"p>m #a !a 1MQ v93PfC+@ yb @q: ?#CFh_9Х9G 0/V*s^Br,,p' G]!QE$(a?!tDY` LI qOU\o+ats"_ -D]oP U9S a YixI@s4#.o!goAd|S s=.MPI/"P$,2 .@ =cbu1B{HSc8~XXj&Q80wpW8苶#y"rj UN A*e`oVu2l` m\Ub : Q: {gz&;|F{ :+`k"; *U1" UH!$ _$Wqq6ܠ~:v7~T{jݷ$.`= iK}3A  v8? b@5^Ӈ^F[Y`тeote1QEEaQ4Ztqs%lP0=ꦚ_-4AIU/OE^i 0 PP|٢Q,qqNg1|`qJ.kᭁH/Rl"B)k9^Pd@:kaa %qc{% W~FwA~z0 )~LcN 0IYEr~: sR"DJ! +b(`" J$P^ ."Z!CNb:vj3c"1Wj"# Q.lr0"@lb ~P Dv  +b!ChAo2(k 3BJɨa $3J0 !@  PkQDMA94n+p2 rsʲ,]Td[q ̢6 iq 5F#q U:]`b *hr /, 0` *h j5S qDGq[Uo)a,p[{G.J<R /2ж Q^^p .pj#< S~}a 19qs6Qe(%B A @yjF5E`(APbT[K@TV !BK(8(^۹"ŋKb!'hG,3 C A52Efh9r5M`Lc샸VGh={ɀbA *IJ| 1r u5`(5bW07` f5mR*`+W mteD+E$&1EoRtr_+.GA.Qﲙ,tcЗ@` #Y;/FG`PP0h2+b UO%!Gٲ~H Uem?Pڞ,q : a<$| $SA'X)MT.Т  '`E )VNzgc2zysNW>m;zUē1AGTHķ1WW@nlW p80F\5a=$4+YB> 1 R0 P.; a(SKPI,YY 1anL E 5ra/Rr  P`@sF6uoETI]*Juso JPq.I2UN+៑uqdAU !SpX=/54,V,30j `P:!QGxr87z67fl ف :zspZ7*f&+vlm"a\O"۹ P:";3N bZMBy*qsBqa+1) f %.891L浐0݌F4;` Ҏ ?wv OA"fd!͔KiaL42 $P* :@ R-A崑D*I j,v/F&W1 ,[\AEuztKJf)1Y3gs}p L1^LqEwo/z zs`MX u @[-,l?o 9 1 4SLp:޸9ؐf;f9{9b=αŚZtc>RyCK~EK + ĐXL$ Fd 8yĈArc$a3?B d`=GZ 4Amq-hR ௉чi!(1 [*ͯ&$K#"z.HP6`2c*!YO«=nDK2 P,ቡ"( $,7[XD&b\!BT`dԖNtX#Y"`f8IK>]ggTQ/D># 񒺁K99(ż,9# yb !˪QV*X@ӛ5rrBxXbV)W¬C!!ZT l*!Ue"&Y@ U] ":,2S=d QDdXN`I\f@2ؒuPdJ$}Ȑ-,,\ pЖ2D3ĺA؝Z [%6᲌|F%%C/L$`D)ōB 95"fdLgTx3 cd, E,VYNNa2oP3.@j"MxH4 Ұ2AL)1m#+l;pd##4>Z| &rq2A8(9qPa@P`ªu1R?p򝏜6!P@4e 8KD{\IjdaBe Wܸ &I a\:X7lX3DCp*C|f̬m^C1h?lMT l ;o0ADE=wd 6nC8` !\AT 5<Ѭ@&@`<L0v p@JϽʡ('Nc!;n):x9$lx0oɆ#59+e8 (G/$Ipg5z cqU2>#ժ 2|#͹fH 0j,s2j,e %X@˧ {_P݊ uYpЭY(J!ێv-e i;JCps 2ֈ-M8ev$AE,hZD lq 50Z`%T )pn0T /Ro3278 AV kK[c1e pBҐ{pYj8aX0p/X5H2!X( "`(2y c185@xh$:o ;ؘؠӐò BАڡ 88c3c3;) `ӱ7V{c%X^K>cG3h,8 ؆ߋ)IK480D: o>5zJ(F`^?bX(@+d8\E͈bB@I8~Ȗ~`x76B=pP P1ؔOiˉ2 (º nH  < ˏЗٍ 1T`>+b `()+8> .K0Q KÓs {ݠC0 0(p6@q@(p hK*0D|qYycT`[K 8ȋOD 0|EFr?Z ⪃,8ha.x&Z@7.8)KAȱ ܈I`q ϋ)1_!ػz?`؁o6;1`(:[Hx7d`d*ЅT87H(0opӾ:tDHbH9PV '?0xp 1#5?Xj 4[HF o>r0& "}0 ӲKHˆSA=Fq\E)md*,p*, [!LACK0Շpzb&-|5"5Lx㆐_Q ؄ xq }?銣@b *A7:q3LUPr4 f жq "LGYkݸ+DC<4X{EkH ‡mp .U⼈PL ZeTMؔ6K8V92zp&ijx3@-$`lТmؓ # m3xҕsˌ[8N2@{5N2h^׶ .ˌ("ƈD:A<=Ӣ~ @HC%X5Z@r]*5CO|a"V5,C`8iH[̃ 9zQHm pKؘa=ۑ3<#-)K=33~dp42\:_(:ee:0ӏ,?ېV'<P/(a肣 +a;$U\ @́ʁ+E Y2 {J{㊮CAԪZMmŚbP jhUR]_k M W 6'&up‰L"L$؇Fb<x_(x @]9 }aVk9mbqh!̊<|xsڡ%^!(b 7ƒ·]@J:+./8l_cNcHHQxx \ eG&G ; |r cD)Ӂo ]ѐ>ϩm^)d%̱y:s͏ef\FzLJ˨P*qm6G9Pc:Hañ ^@^x:;J>QK9&\MZVGeoJ;Z+ `50܉\xVjΞhs,JzEQM^T1!< ה!̈m+BpNMgߋp}؇)8`-}V>\bY8٠T *gB h Bj㔉ø| 3bSydnN9ͬqKPiO@ ?) ߈⇘ZKڙO4AX⢀5# D`PNȂQ7@g[-ߤ C/=\H|B)5tX>V4la%dK &dކ%m @-6EGbBXam$T|Eǚ$O:BJwPEB3PtT$ "|-h$  >]2Fq'q7$*b$BBüD5 S +H\"sq 0F\bG|dIK!$3Y)! H_3DY!2xFΚ,F7!G " &vPq|PrC96q%9<}h:#aOW1×t`>j UMķ^ < d8f 8< --BedAc#.!OLSUL^U& p9:Y>6@#$rHBdi d%;Cy@"T8yօUB= ICLq^FTPUPG?nuo@ &c }C6|JB.QF$! ѹ^!ʫO LJf5>A&qU&!< , k)db$ yQaVYF#Cb [2 daFbvhJP".X!!%!а9xVIzb1G+&2 V1+<1&]0%r"K/MOāAC0$!,akF@ AG*& 6;`('=(i?M)z#7-A Y48qh^8Tyx k+FX¨Dq ?@@a(@(tH C0; u64̀rEQ܎!*AVR tp'[31O~6s;2Xc/cxä aO}dd9txFxt (2^kƧա n26WD8| t,`:!Q'?I7Eg O K^6x BBdAsO+Om Ѭc ]FQ)΢EJZzMnB,d6ЬJ;ShHZ@ES[C+OPT^Zqqie80C3t d](D@@bH.Uo0;NQ00 *QLU 1WOq B :?39M7J _Q5O$$F66؁MIv=( Xp;~|zhT:>h*P HM%qeORw ocu dPadS 1&ԝo8{f%'[0@մl x%ptll+p>%5|_@mCxI4\um4S% txp UB p[jHX)p$DWB 7Hɀ4[l]#L 5tbYVĄvETE O8Q aKL5IXAGK[L7tDʭQ\]q-pB.1 %X uDq 12&U(@,0$t CB  2c\O34#@"- I",0@C-4iP^w@pF-XyXxXG6E{6#,< 1 z%_BtPNB%I$hN戎-Yt@UPDO(lȟPHX>{ sͥetdkIDD@6A5pX&8QmM5Uq8djڬM ΃%X%3"AB@j$WA|`Јk*tA,+ A/ \$8L4F9 C"ʝC*75Э TAx"[BIXg2_C0SCތ5`dqD4eH[&]F Gz D|5|@s|GpHD04H(At0L !EGCqqCPڞHa\@p֜-aëFFp-AmBVF%L$x&@m +%7@IS ɧ%[6IB%4kwLjÙ^TYTI=(MBdB` @k ['' 'u)C%PC\E,t2Ȱf,B(XHĊJ BޝOԋHt!F MѸzhg9֭O0yŭʡMѻ@ADhvC YBB*pvqRXx4(9*K\EcF!|i^Hzŗ #!C9 @6b3*]c9x 88 8'p@p@eBêBYBLqlllDA봍E FXąfvltB5>oN>qy. Y&IDiB\t`@_@-(T$TaC5*tCv\ipNGG vfƧĖO^@%8%L}C}ɫU9 %1jax#ϠLdqO \*,`(b/&DLBHAAH >]y,Hgfm\DAFDi XKA|I­RĖ1N@'.K@Dt|z@*,̼P,A(Lx$0($-(*0I DE 8C"L<@e1!z@B>-A48 Trui\Kz/wȔS϶Glh.!Gqu%!tCt$}`~P/T@)% GAGHwJlgB0HpsDt7=S k$M xs@SaRXEG€%0 'aD!p"D ,X@L& !\P@>Dx/!5(P9C7$@ىA9[R^/4CeW h-b-K ҋGlcDGX]$Ql TJyȑhH$wǝpQKy2rKcMLD(*iX\e@1<3hC؁xC6A901*p$B1 5|%U.pd)-sCc{cC^ 3&xI0YnhiM% haAG䒮DB+ꇔIKe=jsHI@Ɉ90C2_t$OB`@!D L-_A t?ՒOXHp&RrGEwx9M3sx,KuJ4I{'Qsxon?$B fuЁkDXėo ݥT 5cH #f*0ӌշܮ 7,ݡš^ ^!A~ "Rl cM|X0Q8!`VEc DK0 ql9$Jct]ĴˮQœ5($ 6P**%D!($1z( x^D>$x.LcB ]$9Hc*%D|A Uc膓@SḮ;Gk.]i|X8Hi49}vYw5v%MC>-Di;p@Mc9h9蠓EjyHeDѰo_&tjB|߬_tM lB&J!D~%wD.tT̓3B6]؋HkD[|I8xOdhBL`&\b\`F/Cct+=57D90 I7I 0,`6Ua p䈵G\pɖ-#s0rI#6iy#5VҤGjqtО,LS96|[9` @P4 mOu[|'KZ9.dtk s 4Phkܣ@}8~6Xi0lyAp\F`> '{da|IИG*t#Lsɴz(:BE,\#b Wg1I?餼`F,T4 1P6 =R$ hB, HX4|[G0F`#!b_* >y7 $&VX)(0)0˜h&aEi6pMGd5i %iʖ9})9|z_i- ~)y [I9iԤ]KL]˯V>jj,&ʫxHDD8Gbl3;A:aXE e $'$ `XXXc : 2ŗy,a g@F_N$c*3L׉Ci a!:0CK$O4)@M; s$xځs$`2e16N@Z4-/ox*GLǤu 4!7d$7{,RN2*4J Ḿ`؄4 UJ$M )]Z/DwiĤ9$9+ $gڠ>hS@@L5&A&ԢZd#o@@842,#@1$@tAXC q, F>0g"! dP %SS.]%hr7”Z@LMqOSa}3 5,_{'/Fcs2OE/r`]&0xN'@3t82A1V mahv-v!;Hn )ҕ ]ZA@dDH Lc H1c:3 dP0^c|  @Oy~?*c+PLRk8&RL MɡF@&: )R()j企c Gx !H >i#-A@" HdJA+ HnbhI L̤@,PL3;D-x"觾%4\LrIr@pB@2@mPSꆴ(,H%|k k ^$1$ЅwDd <| a a . !b&,S-䙮V]%DmD Ps@:aÎ׀FXoK. +e]'OF<:yQW<`djILF`#p) 1*b BQsP##BR6R:C#R9( S\Od;964/J%:87A~iY{O%h0r1"TJDԆP0Ѧ~%ǥw^I( #t#@׍B@SMĚf0P!&tS @Qh)K*Tzpmj-/I$h GN0_h%>A+_Bu`$r!QPnRS8 d-B4(&)* 4,p1 XYDqrlD5Aጂ0(E羡me1k^&KK0(e!sÓr5@V!@ b^WtAP70o H+'2Z y݁PAi$h}XB8xX+wQXhJz ``%,)9(a Zo QLTH !4|j"JL ^$ dm) ZMn~M8JA&qKdz'Lq/>Q Ht2VE6L"`Mc{ k .@N( v`0! d`"x!V䈁P&A2 # Z~%X>$`e &$l v pB@ a.NBRbE`d% j- D?eL.4`pk%cPbPKNB 0p'dHC+q\RLr \rALL 2 Lz!І.@@ dA!&CmDr Ai!oVAd^B@b $\&,&>*BЂlL'rzgA@JR"O0)-w^LBLj bu*DAn$¨L ("Jܤ<8dl!*"F>-L%xPƁ'D(<$%T)Pqto Ѐ&H Me$ ! kha< < `ꁴ(>q/6X!&a$ Ja@>F Va 8YVH a[zc H`#N!tTa>QJF&0@p`B@ɬA8t H bjL4@ R *@m0 4A!t!1.#oUki.d@WT a0t-z,>!@Rm4+,G"dDI/A?Ђ(b(~' FR@^GF< -M"UT$lU/J}M/}I%fb0@cQe '!PdtH`UI1`DAڠ< Sar f4'%nhaVDT`A^EhRM! `E^h 75YLN!AVZS$gDnnpX! .$@ 2"t+ ]e gġ$s.a0'?`&&%3`D( H֢.-1Qd& C TH+&!b' (KON K0 \ GTS$F @ȵa0>aD9HෲoRC/n@nK@!DC F Zaa >MWj+$7$ uFdȏNu*@&Np"EAQhpw vLDdE,"SAk BL URn +μGci ^nqJQ}2>&u q -#Zj%ά? )s$d|qL$'h>$zO*5MB@ N\FABe! Z)hj|o $A!#$ ~H\L)#"o nbyR}@Gè yX qARh-_f- $.ZmȼV’nA&\BMԤirAWO! A&j%  >a\f#z@4 X5$W\1& Р8b | @) v"^XA5D8@q,!9AȜGpNN``pd\XAT4a CPA$_1EB2NON6Aq.N^V$ *C@jc̷@@WA Udץ . nSJyMf .wXc4XMB N܆$ ҃K"MN`b"yW BpgBp$ؚ_sDH$$ xa!ȚwQx(44 3 D:8AGMp$EX₩/L)'Ĥ'Ni"(ˡV]b*c-I'y4.m"j/ 1 +2 Vyb^HY>! LLw lNAX10Ԧ V! $>adhCm¸ xj ɿFNDcXbڀz.#^D&$V`a5B& 2$>p`B*6d%VdB߆d^`O,t0{HᥑdfH ad (MU 6~ !i"$> 6CHEF) (8(%#)Ĥ+tݬW8@<-? 5: غ!86V `W@/rm d) B\@| p [~Ƅ b[A ໣t>T .1 j@ \&`&/Խ&Ҹw."+^Ehڅ} 5+t LaJ5$^ xaWY80p(xc 렓O 30)pZ  B^tA/6._H eKrQD2!Nb$n~7$p w'By 2R &1[D 4` " W˓dZˋi+B,0aM8ȹ~K=  E\\y加-&=J(<'$e¶zɷݶ^~US +4 Qgက\ɕ8cVz:clL91&?T7L}0lY\p!iE.ixYjMabP eڭ3#GvĖ-H-6ؘc F&XC񈴊dM"D#s6GΥs4ͥK.`Ĕ)x*k+FZZM0x o@@` @bI ֽ) XNdvZ$XTc*,8 +4U*N/41|`KA/$X ? kN E>!%iƉV 6gl*?&Ƈ`AtW,d1 x`ʓL~""AdbAـ_~rp!md&4GRmCЁ={YC$x"YߔC ry7GIԟf<&f@A ;!3_FЌ[^BL0I9K/,)@@9gr6 ]O>)B2 2J41[AKPSl0PLJ9YcElȑRKRGFtDGSX\Re~cNYRJZbzb}9ϼZ`qBW@>h:ubaaN`C+6υ*A Y*} <}s]x}4i"EPP%I~ ,Fs&ojf&tK{4x5ፌ  Rf `C ωE  ( xv(٘92X+0@0K$7`l֨RT-n@!%ibR &r ;P4˴U&aPΡcF' j ð Bȇ!`h5Ľ xèX1!rP?J ,iCP" oVı@b qH! o%S30I?Gޙr.k< <`iϩ2atA8dQ aEc+CAP0xiW8wR'GY#=DE-HE<iW.P jAvQPp%!hنmqќ1JA4TYkj2j0(4d$ oXbAP A"&6ЋC:C /̅%cBA!TAc't4{ )HA@">@8B B&h"X2-P9A%E|E, WEvZB#ỉrrR&6,RRVlxF8K| bQ`(D'"C/bVB YT&0xԁPP kD HJPoX0"T*;jJbb^2ɡ FD aF PO;ӳhB>'A(wParxn9`P&Ik= CQ\%H3 gץns!p/%3cl<>ilg]nNn"zG2JZ-Fdmh @-R dXAYC~6s1$ +!5ԉY2(*U( Y7 Y!e,Xe%E*>8E%QJX #OPB-6puT“\]tKXq+`@`:(BGa[yG ͊aBT1e D/,C( `@fC-4к蛴#@z@=.ARb1 oK,&!(ʠĠ z ,Ёд@kS>xBCZh(}C 8?Ysrd? |q=G1w7DߟR_tg#R/+#C E{0"-ICRTG'~/\ْ| H$e'݌A`Fа J2"U3t2S(gPo P3 B) P3$l!)dVB3 9pDH1LN 0n jCDE)Q-1 O7YAG;R.Iu )q(q0eLW/ -P3QzEGF p_1 dn! -wC.a"24`FpU [UR. Sh([  !a  o B0N]md ՆaF'd  $G7q8#? T+P YGs| P&t97TE{';(;CDU!O?AK U'` eWT80} 0??ri!%s~DPE u$>1|  ,e wSvA s@A2*π  0P'G @FЉ@ )tPg C`54I/$0 +YR3HȰ uT] ` @7&sK08s=;#s`;SwFu 0@b1C_ . L0 )C]Րvؐ(0N$t5`@ Peag _1R'P@P` nQP[ Y0 DZ P I@$P T+t *{T8" 4'+UjK .Bj,5> ."b =Eenp(+r{#R"&I&p0#@Eg9`P#!/D+ut?%EAa;" >0` Z8"kTNU/F0=#cF1N1pQYړ֣O/%xBHu !sJ!ÑA)o0' D Ȅoxw Q0 WAؙtr1(+ρ5P :80` k pE@a%,(Q]sF ptSu ՅWxGubGNTy],H ` d VGTm6L p0Lf>oa0)` * }pF8A;3'4qpՐ8 r4bR$#[7,"m; L70NڨABqS?m!Ў  ;$i!XӏqQ+)pFg'{BpSgiwcb=4Jt 7"J!I-Uq!,!~ecgU5ڢR\2Yi*]FaA *  SPd K,T*z#k 8Tb YGrU kq)*W1 vIL#4y 0 bMG`dA`z-"Nh QXAvd)zyAP+;Ӗp_{rȸS(:3uRF9/9a1bHRB6eDFh 90$c#A.W!kRD/S"P~U7AuP7<ffJ 3]2cx@0PmthAT@u"4Wrp}pP;}~b4 -4j*2  .Y<+C4>ϱv1i&0V\r\RR5?-1|f` G\F EQ$>iGa) J6qpISS(YʖD0 (C )+`w-ٲ`Q*j3*q P3uPP? F;}Fs Z }K90"Y0 @B%{p;t g0^@KDB ӧ7P.BB<< }qBf ݀5 1ffQg` T1JUwaʑ||2'L6]ϢN0-I^"hTqNmRD"FU` *h9C, k3rR)R " 3c44P zhB&4v !Rn  4<&4I  pB 3^@a;a=.ܮr!e2c1r  '*;0 :0 x 2 ʀ -4L!  &100+D ꔛ-aQ8o R_U aSĪ@ 8)H@:O`! 1bX`"XM+д)hi,0~ naJ] 70 nG\qa,xi -l٠p2d3 tc'C3n©Y[6}f362J_nj-Q9)I಑9q9Ym]g HA4i wxl`{|>##vϠ * 68Bؼ:39[$ؐp*d6 A$bq a  5k, kqHr@p)([ rb1EKjXAhQ좠.1@( / ZA%69氤9@:[nC`E嘣B9lP CK( +F))2eXjF@Q $M$@x ) > @[FyOP`9lcQ$ &rb:&iq0VY+xvl(hdʖ8kCತ.[,P-}ob,H=d(@dS3p d꾸NL4?04 5C6j 2 K#0,vl: ; x;~X.. V`lֻ.-oBײFj(E g/A |tdmP.oH~9> GAh P*y]FN 㠎~q%*P@  Q ՟|UbEVM \UP5( z睂I "| )Ȏ5Pʂ4)\"9fdp̔ |Uj  ֬VL1a oC \Bp/hk+da;Tdp@= LHjO%edJV#PrlEGULmԚjBQ)H m,#IØ 1h=xC/7a~$K@  ×N3H2g*fP= ހ.$q ( @taRqQ1KB, $a߫ ⫈-;H|h`tG>H,p`%O0KY U\* \@ 88ȫ "&[KSnB fx jX8lؒiJX^ Fl it?`efhl,c&{ĘcIfAPyd&̌3W\M!.㲇 `o,a:3{3.E=g(B{(zD<^Ry /#isIXR00pzTl+6ObSfD*h<d~ \HE@XüGA* ~ Z $.piLKx5TwLc꧅;/>$' #̓= *!s \"8gq"viQKCQn2..,Pjr\ZD13K7j_4H֪M  -ĭmR(z,b(p\fe\ HdЦ@[co F!Q+>:Bec ZnƘvVh$ 8TA*C056 |Sj#)FAtEb>8Z yZ踮jѐXPj0V蟇h*jk@h1zPw|a|#X!H bS4h,!7he jH(Iay Hj3{)/PxG+*(\( 5zbrH$A`jb a0ihB^DC$;H;r W0cor@0pp^2 *Nk f Njk$hYmE y;1c>XB*BX4;?:ЋĀЇ#p#0c Qk;щ1Z Hꨳ0Fh˅XH\o94<^6Rx4}D ph 9 gHBhI y L ȇ Q#0+ 8ĶVaЁjBac !A!Uْ3 !AV-ʓ{.d[ylC$j;6-U Y 3 589~Ȃ%P#H(3i)FбP؈ ۦ02(MÁ 3 1 OڂHPeь-E!A Mqx䈰miɐl ұ0?( u:KWBQհxȂ~P!\P"1;H ؈C(4Bc U o w:hi%V7c+2 !`e-V-)h$ȫ 삹dF& Tq qEPjS(XeF4a M"VÀ(BuG`4@ɓ.8ς 5Ԃz:pXXĵR(DFX X `6Y!iDă a``ط 6%}9>Sʋ6= 1Uۄq8`B989 s`ԀP5g445~" pP(v*PT̎⌁\L%]nv ΏG H9!6!FNaY @߁U77!q'eH0F4hSj H5p```@~ '|3asF S|r"@K!(!6٪U4#@/-&dq aq9(f@\@ \lNb\0 r$u @{H @hk ը,>gf 4|C@}@&r !0qp&DgNDdqQ΄N/k A$̤~Ĵ݄? tL9͈Lfz9WbY^ j\ C_p%p-,0%%FXJYbڄLX@ )PYrxv$xyA| uPAvICc2݌33T1-333'@FJ@<`ђ@U $` d TEi,c( ]t'kE>C@À3VD4 0L*h*#TYT:@YqI(JdaK .06"Uu @,\%Þ"<@ȉUM/I@+n)$5!#InD-r07pDvC!A/0uл@q-'do?AAA< d@8c)8rflqGȑ;EvAe $m`B8Ɍq@@Ё},Xzq@JvՙF- WEz_@H^FAؾ:wX&wP g,hP%yr\}mL7j* Q@.}Y' FH>@c1̓́x '8V(#4xVt\6̄O*\2 )Ka΋4T4); H,$ Qր#` 28Cp :ÅRAaZVX˃B %,j0NM@bB-#RbB B$]ł);FA d H/a5x1YKd.o8A\^aȡrJ"PRđ]0$122D/'&rW(r$ @@K b.q@8$j_|$?!6 X =;҄C`9:|̖q324MoP8f>fռyn&yas.dP>!i*ںAȧim#:r J@A=7{@_l1j;9%Ot" /Cij|wmyK @@cAAD=(x$Ttd̟LTY |ȡ9σ́g|iLDUQ@,%`dd!ߧ)L-|%A?@1L UAddCuN\EaT A(BdyOfF uI | Vx 8B 6I0$hR DVҨ@ .T1x'ܻ&h" wU ;/P$qyu D70 DxCg ‹BE0B1UA t?i`  (^ Ȁ E0LE-JdXBoA1PX ꌉ0Բʁ5|4@ƜuY_d㄃p@@@54G$Ԥp:M@d@dD DcG DvXICHcp7@؎hViedUߛuiUf[FAufFvǩ%,>DnB1" D ֩jM++7>X|GHg`Y]dk !\B D&X<D_%z-P"BEfFX$j E8.TA0+T֡J.$ipb$B9ȏ$+ ADYFPCS"3@-H--D-.9Q*\/&w]. J* d@$(@"`Pd챃tUmdDP,dS,t)\* (*2+$D CMd|5.TY2i(".AIdؘ@LĘ)@F:$EhsjALvR*8Η|-Zj\3x(/I }0vpC]FAZyz`=sȃj@Zod`7<.%X=* D({0FC`D@A? ċTK[~pǢ ̀aE|O&!D(IA8Y> 188C (H@>xC8?x, D1 @ tJD>|@d)~q-4DC(4L*h6wXPTp,:I `D%L.], ]\($ρA/B/A9BL}݋ejA=]˼(Ed XLd+eL. V,GGv6 Sl 3|q 6K5׆ KsG$YTߝֳj/SM+@^؎x`Y46&`قZw4X5GxԆ%ȡOEN"%p@LTY,wПdCYXBV4AwI.:ӋBܫTB @+d(H-xt(Y0iu4FvL}: 0pZH‹[\FGԩ3Mj@ATTOAi|,Ȃ4X&4ȔtLI`HCؑ[̫eh-tTA9Yy1@@wİE80 DLK < C5`"N$Awv  xʊ^,#(nѩ|)'@nzWY.fa 0Y X@6G|UNLPQɨb,UPb~m蓪Oɐ"(F%pHFxQgM&xJ4u pcRS.גIV3)L:0<W1S\8QK\3#ed[ i(msUQm: Ϩ *X(ܠ#@"kL!B.ax?`ذ"xdɕn'[KnpxOx`CFRh,ƊpfĊ1Qt"W0c *Hd L36IiTrz 1F\!a*ӗ8^zgP bIXjrXbĎXR89!V (7zS*c[TXF6X$XELQE * /x /B9փp@ VXB ) 5@+NSCO0ԱOZigzA'+zON@&S3*BP"lTqVc)e苊W::s *%UZ eZSڊq,$ar‰d7`d₣Z9ƎD`oM*<;"*}`9 pÛBh Vnc<0=" t`G2JYCnjmK \C4RL>`ڠH a/K8 L oYB `)}ਈ07 g#`sc=̆ !Ed! .oK.x)&`I<Ƙ9gIfp°@C -6F=E!9l{vS\ XTF(TQ@F]+xd0m2DU\a( p*5G". zRL[I18Y2%dQ8p^ zP-ԕhaA?\9k J^0TH:$b$-|'& 7}p.֖ u$׊B+*F.Cڊ8K90Khcckˡgg80/M1\H}P?IdYl e>#۴!~(`!*R>K>#I9G獬#<& ;ґ*6l"P r7E(%MODd 0(c0b96{9QSQ/[җů|gg4j%'.i xKR< @; .GAtY S R$P$+4`Aֳ#pg"աc0Tܰj ^Lz(*i꿲dFČ7 . ±"W@F &!h.nCިCIQ 3tr[@VYc Cv p{(CUx,D4xW")%6AA0tb HxjcƵҼ.@} A 'N[$F| 9uqznF",\+p brH &$~mFM¢LB2@6̜tNX 2-N`  \0@d0* &&-+BE 0"I0ĀYR2/ Xv"H rP<+&F2%-5 ( PHm$`~gH t3NdvGR\!%8&P刲ՒT`6X:bg$cdT&". "cfuHA2B6@RO@j=%*gX%ڀFشfR9(Dx&RCtD<6fvGlxK=#ރ~pNET1@x|6C+⤐3K$%"!/L6!LCg6<Pv`DyXs`4I+"fZ# p1: v|  W #"g7s&<";Fl:ìv% "$ $@`4Ao1`kM]J9`'^JBhpvmq,tqdgOv66<F$R@ؠgxn*p"$( ]H\S jl,Aۀt b |J9IoC c>h1gڬ"[(B[>%@X 3IB>SX L.` % ,-*X$/3΀ SԎ0$' %:谠!Nq^AwyE,̇&Vjgh$!mрzpCX%(,! 85 /ԘR< EJx :',1Fc66F=CC"AcY"zq7Ў%ҠuƸ"H!9u kQ9IFwl~HAtl. ,aR@,\!neIRm*LF7!S1||Z1m.+bta AS!1f Q1[H\ b%_X*ķ"zKX$ *UZcDm%ھBc\vp,٥Xgx/D7/H 0 /%̨ ha?8` $`DxM '+Il>daB. CIg' hj6c$ U!.+bS9Z94`mbcX!cl6m11Zb/V7Z2Fl;6BֵC6hMB*f` w#C#mczf6p!1@Y<gkggi؇L@=4-@`5$#4s*'npY#Dm#rOouTvqIb"'39Lz>j>@G.isFdC`lF_RmOE& C MR@~! D„}j%P#F,FB/q@F\yxf- !@ L @OW0'N a )7)a\[7oa$PX @M;!.-lV U@K)Hcq&gMcjPO}: o\Aa!lt X I-o(@>v[ O dD"5biONo}N2 `$>M{$^@T!@׆q0"CA"p\BձD߇9T_ !0` #H֘1Pd@PRH 9F)Q eu9 54\t d%x9%$䣉L E47وy(xid)ˇ3D q,QG?i#D dSAbZ$P.BqM'u x3 ˭aAY^d#d @=S/mZ٩[$s8$h $]ȯMMQ(m_te?2>},BXd@ ALJla g ldC̀VƘOPRs8#'H |!_"!JNNpThFAGЏ:d*!8S(bzuDz:PDXޠ`f@1v# A xb#`xF1$ P076`;HF3Ԣ0`)(f10 xcpE+3i`@G.pM@U)7& ap4@ƃyj iV\YYp,$ߐ0 LR̾R,fs[ $D Pb5xMA@@=Q@@Mq 1P` gn bz| E$ t@.:A%!E%сV؛`ax"M  J)W(X@l d7-Ҥ}G:C` `N>3 K0Wp9_>pA9dq4m JKaj ,Md8DŽ%5@LYD]IDd"i|ޠ:|exFP|26TKf9zve [@. $:H=Z!J %G !H&!sb/fRT ۘ1!##|@(Es(taD)bhacfQQ6@XP1m1bCjN 7X E{ uk +ށ1C E4@ER "jPÃy!y0A E{ z!'x@fA!'‰"H4##U%yM%}t6;cda r_b6~ ZB QJ88Dx@љd8̐=*&~xETsSTA mB\ l6 KB*SuPaZa,H\T0V!^,(貫"z Z#R 7` 줮H-P1Σ$+ DxYlE@hӆY5!bZP8k@ Gt!%ƶA:JV01MH2I ^76<@Xop h7:8DO hw&0p !@؞^P"`0*ЋРBgc&'x$K1IY qOiQN-ulBFAx@,#@@ mvWU:\"7Xb TAPO=pNBm<4T*̃a 8(~! $2H,N'ӄ$G"+!Yn F}@"b ?d: G 2TW ,O!2 `"NX `$ /z%p 0J!C tT#C,^B%Hop T@= `!GP] j?pg 3%!eD9uR5F` !Ba6 .y'k2 F3*"o  t.} "@v PK$T Q%졃b `"2H0O 4 GwWwSO4xPLvqs4YtK&@ZGMrja)V:o>V*5G# 5*@:,8j@ *PT w>R#y&#FtQ?B:%PBQA`+4WjwR"Q cNAmm`F T`oll &cGp} PuD`z9 CpYCaQb&OLSUۦ5 2 F}@U7P 0 p8TVfo@p3 r*F u CW0ms`6YM,sN|Q 3p732a].pA pdwx)ޢ5ZP 0CN F6}Dbv}x 87OB |;8`b Pmgwy7#;ur8a8lsDDU3g1p# + "`=9gq!/A a  ׳fTt=?'/QCH*P# 54YOyp!U;G\>#2Oaq +b"BϠ`ovJ l:u`rg^P } W0kl/8A+H4&)+A@ P  ŐZ`A}@28$4Y P}A*q(b (,l9a2& g aМp7bc.  AEI0 p_oG k&mހπ `yMvs4Ћ5`/2 v(c088ct!r  wcP"&RF#sQ\GBd6 7pK_9ewTA4BzN{bBAMi"h)c#q/"8EpYY{1+p 0@+0$)1c)@g@Qa#V Y,X ws~1xG I+sDW pp}a؜lm&Uo1p@E[1pΰFF< Y\BHQu~a a h@@}!sQ'N,ro P98I " AepF[y)$D`6]$@0 @ L İ ]JZD @at!oa >(0 d*t&LoМ` \ 9" Cq [Z ݐ9 Prcd7 fpcdh8o!`4 PĂrS#Ǥ|"|(gB;"m 0]F Nv 2{a=&y>fC=PQPqh^B EI8Mw%LJ ܰSP Fp0a2yI8} }U< xGғQG,oP`)Pf⤩ T p}/d * . &!A A /;ņЖp 2CasP/# B̂R0J!,H ņ<E`4r44 qᄻ E AL Ast!p#hPb\qG>s0`y75'0 +Q!rj)P$ W hs*IPpLnbma?1a"2 dfTyMp* ~~ԋ1- e phZgm `w*)7ik"2W7 %?  D* F }A *ij, FD]aљ@IXe5a <DX"3' zĆ^M8  U@$A"UnQKU' &QL+晚A kLՐ`vYoސ UN>fBtأ`z! RE0D'2O zֈcqc \k;v!j0!ɜb9!}-plp_H.!za@e@!A GPm f e#FA4 SR@^L!2> ~ א a#0>gvH$uuR"#e<3#9{R>"'SF)W@r- G9VFt!X" 0"~U >i jOAzz7@/i`#b`L" a@+ @eB߹:Ck.)+Ym6ADLD2ȑ0"֔C ^ XrbBH ENC1,Zl0YӦ=yMLfsΝ#U G1\QBkAP}N3m]$g()Jc2VY3&,keI:+a w+}GAn1K t2 8"h \$ )SRJ00")jȌ֨ !*8c3 Z4bָ{ cZ*c"hG>,ҙ( LIYI %@$^dOf ĉ2 >2RĒ"(@'$J9RD0SyƧ*KT mH im) [h20 ` k+a0z,٬?,ik D@NJ`` 3ԧm(+ L32,"ԕo꘻R@-p:h$TnbL >6 Χ|(\cH  F`@F3 {%KRǕ(+`ZE"0,@W(g"aF@oZʂCO8x^$gUp%Hr'@@Gט֨CBx80 ( &V2dC v3(F3Ȟy+_D7|0_ P!J*P0y h :` bX+,UbTDI|yH  o J⏊$"!E`NR4qhhe1KP* ݐ`}T$4ANX[W(RZNW(ȁh"p gž̦6YJHHxCڬ"* p v *P <*Zh&ʩ *vU"E%-1YP3ܶsV4f51SK;aT3Ydڠ8Y R#Kx Lߐ,q/̠KSV@`D*2 ХVHrёȻ#m[$Nq{4R!)ҋ>X<;h+d n>5!] zT>#M(R<cX`8,z$ 85 L^VH J«Y! D"Xx ),~hFĪFRl&("&ĉUvRڄTTvߖK [\I2Вl:mC1=C *"E W"A YiLRP @mh hAG+p+eb,T绚\) EF"  b%~lHf5bތwmW0?&ђE9Hr:$TQ&h@dž\baLE֚I$xiIBPE,t`tU(Bx4B>=K%Rk@\,{4Y P`$-&QDW 2]N,Z-U'L[5v[ȉ[L /p@C^>!iXc.+c11>ȥIx7`9}ha(dESP@Br ؀a H _ %* dtrʉK_ڒ`2(*EJ EEPd7̆m 0, Y('rp sۧ.PD*$ CSa;Vp~]\$e0&y]ar+M'zE:PC`?E+y3bp _B /Pa6 1>P Tg胯]Op0-ji83"x89hs[ 29sxX  Up QXr %j%u) P5Qw"v}9`*#$ $9Oi %Y9`0 i 6 :+":"*W@N9&R DDh؏ nx0:6𹨁K:Yء0 ؆ #+('ݘ60ǩVrE(qQꐃؐ0Ph =' ) |@y c8 ܐ%)գ ɎW@)]ahM0( ;+1r"p:h(ȂgXNp0DyT_h2K~ jPQ _x,^``^VK!],0O9xs0ؘ  *N9C0&83\- Q6 nLϬE@RB6Fc>6x  QOB)XEFT&ð̰wlKa["  xh8b 87`-9~ Ȏ% 41R`Nigp"n:B# 8 02 M( 3@Y, يQ)@`tVO0P>:Rhx8 ) x?`踄hwI8zyq ,xHjʹZ8Yxڈ ,>բtؐgбgHЪxrX@ (8CA  e:LO92K@,>*ThBQҊ2*~ AW@zЙ69.H(%xgb$IL|eV(] DX7w! ΂V@q-\uHȢ}؇3TQ@a88)uJN )"88 x2ICS[HXHORhDƣ`#y8Y exV ]9IAFeDyiqV?U?VdXΦ%W V502ȁD  `/],̀鸒V779N#`%>smj΀Ba([.zG,VU p@0yj~hI: KבQF)âg G:dxs1^ t pCH:xޕkxt;P(:H:q\bx :*d!Eܠ4~|.X_Z`d@F HVhgPVVpoeX`8Y:݋a(zjd؉tj$~nДЗ@ruHEBt2؋2.X&: ,0c5y0ل]H) O0چm>HNG.+$ 88((ǯsiqG4npOR`J߈2܄UZjBұ0Ol3jcs=jUo'H p8f!]>Th909y xpȨb_g5c!fkӝIb׺(V#YR2TE]ʂ8=-sh%xqX^Hsq@֞)?D<8>(;p( P$ꊒ&5+IrPIrQwl願 K05 q@^p궧hq9aV 5L}M 6 d5mHX9ЌЂlVؚS B0 ԰/0"اN 28C!$WB8X7 p/9~XG7ƍc(f0b$7Y^ 0@6mmM\qHx+ ,=Z `U_.R,,TŐ%`ІB2;Ve]h6'@GN omy(B3}}uv&tޘ# qc-[)TO iSȹd)[`Z ОGr$1 ib%t MY .T@A;baOT!+ $L*CHu 8aH&.wr,$Ct@I@t8!Y)P8ᘰ jB^^9qDiL }3@sX@\s)qmUϞn@+ o2QJ6Q*cAHnL VuG $aӝ ]MY}gH=1|ǐ JӮ YP0FBD-4-()dlgR1PiNx3ph m"TOI6db2@q<$Wy9na~VQS$8Ԑ&!jh]X!!W@l[@@S.0 vp3v)rXTII0 jI@ ) M*ɔJAEf!w@j!M 6J! tR d6B'mB!> bYR (PNh;D5xJ"4AYIVP5%6qj$;I')V2Fqm .D{J&p_`8 DN. <|Ih'ɋZъ(IZ*LHb8J1Px)߰IR!JEFbr{C++:XQI@lBI%}CX)܂B`͇@_B"01kdhf, LX1* 00Cԝ,Bl-Dhʯq/|M'C]$3Ae@edS*dF eRЊ^7*QL<H- H ܬB4C$0(C U"TdCFA7FnG.Ē-2h*C%7 3kъ,I v2B6eX.DLAhhM@> hDޯJ*OM30Dfhex/Z C [*s%1$Bī=DBlC^Y@Ȃ%T@Q>J`@BAB\F|݁ 7-9Cqfx" =)XN\>C1@Pz@8Ur|G/Aada C6*\TqBw ܂BA݂_TC K7*HO\ƌҕޅ6,ÞdBs[$Cd,@tBt0d.2YJ8o Ԟ`n33w8 U@@xBXGA# !PB%zLJEZQ*X@S}85M*.6CB=PSmۘBxA}]0]50K0*prz\/CѨF _`d'Ԓ-+tBX 5Q臊%@8C@.y ‰4` #ݯ31 @sBxvex6 Hq`$" =6c ]0A)Ģ{(0 ؂! Tc8Vp d 6 D ).zc(!P @I]bzsEbK:4 D,?1UQLH蔁Yݷ@$ꃡ]uv@`8r䭱>oj[ilaD(R\ pTΜ6Gu{q?u80ͤ%Z*+/>pCp456mp.0tJ@@zMm(l3&Vy΁9}VP.Z!ϳu!$ P~`:N8~&@ v@I@ab@2*6',80#& = WnPɌ@~(xFxKjHcKjPl@L>RomC$[ E9gMR $B6Y6gz*T)Wl%7@Nhe08L8!ΉoH d[ppa~ #HX%"b$@bYh*f N 8yqZh4ʀx) zݪ&+|𡬱ބj뒸m$/_%hhNa.JWH9&,M R-5Cop0D`*. t  $έJj3CaS *52`g$B!EnM#J~zq2lq 4tFp!ȵGb:ze]Rda @j҇`Uᭁ a 9X^n ~;EqPCQt*x6(BΐDFVYI#9 pЎ! $Հ%3p dG ! ,J  TDaHdBm"-h`97/Y@ | 5 R z U `|,TLVWШ؂t$((JG\LP=S fuBY>)+pbKx$"KZZ(b*CEks)qغٝ\zpJ QidI=l@yrc M7m M@7n`8Ф D}S؂gls$};bM}T !B-l0sD&j%1tHDE1@DmbA]P gPE IHP/xQCutB+\ X8-p\ p2$SmF1eTADjNeQ2 'EI!4D^To`JM=6DNp=HJ5Io%M+O:zٮ1@M.6,uE4:Dx6K4W QPX$GAXTbEwy0(# |KCtMȆ-XVށQ9:EEH4yp3+Xz"XP^y7(m0,4l8\s!Fi #0:(M*S1 *s b֭Gd@hL@#[bCx|w'nV ųoZtq f[ZFu++iݒ.H_ll'xb f, Wo 5mkD,J{,F9: eb @$f @wLiJNRf_gΤ p>aZy^CʋxL>)0@FR?yF/;V;L昆2^*DcwX 'δsjeDq+=@`Vq+BT0>db(ܠN1n0MqDW/ZD fJߋ֜kUϐ3ӺLqZPIS"ё+:t dܤ8D&m׺ ֙58-@B\DC2r'-.70&h@^vEEÚmK V&mj>-YЬ\,3+ZQ@I^vDZ6%la{H c^)(4v&3vAwYL_W5t!}H$Y'CjƵTr5)WaMD8Uz9eW*vˬI-%ivPBŰ-5Td l<&Ylqn 6!wKXE]2UgHDn2E$Wl}|:HD7خ)>e*(+\q/ϸy ^!%ّ-nDʾsė@FGXP渊ϴtc[DjËEuXØ^ZF`;I\q kz&8uF 0'e`YxLmSۖKԐS}h_IΪ=[:E_97ei= o9'ևWvaxj,}nA0~į|Lb+?]i~I~epb zfE@M~=/sɜ=y# Z7EU[d|n@PO5uצBi; XZ4uQU{5USISA[@|s;@Pdx2D}QCUfG4+qd r4M|`HG pOD }1mrCgaY%r$Gvb` {0"w=]m SQXӐqLZ^]UWDҤ;B+|CaYPR7wD%D*T@8pIЂEdvϰ 'Fp\u 'V'zRUB*"V<*~P1.1-3^!5tP+BpCn_TdsHnHDV.Apc'VfkzPX*"5T炼Ձ ~xpuPNYx 2 (03 vR¡'v" 0<~#QQ(!- ,y2kT2k|G[jMw%5>8Mgd&6 ?K*X68x }C+0kP0uƕ7PaX~Y^q^''J#vb'( !S29&jl?HMewI$nTteywwg|EMXr0 2؁DY9v5F`y *`ɛ L_D@Z7 pϐ 3,&@ :IVtҞJ J]9.!oR (0pަixjPssQ|HYF9Q(P962s S U#+u0U&>L% }52`  P5\ bacvr *jJ2g`$V&Vz8J ` V B1 _LEl65כ*@}޷|۶|6{ŭC@z5eƕ D,8dgLNt5t? P:;HPo@**+} jP׉B` ys0 ` rZu7J R E[Xx13,F *jڂiC$|VrWwLstĴMo6׍P@ fgk?s*! jj&LH'DڠP:#37in65 B%V[Yy:,1uFz{|K8ju8_a#Lՠb˧eN]p6g[:G@l Uفj;f?X` 7P^֛@\u YQpۙ'R+3ep @=QH,aPvxJS7`psKUcstI5`IG+oVtEZ6L]vMsW?!OԖu%V_vnz*wZ÷ixDeIʰ ha,`WPY-3"1-ax#%VTXEn"x!5eW Z+D Û?.nFK)K^:Go HBLNsۛe&IǕo  FTqp  ,0 բQa\3e  Lw]cTXɛMe52Jy[[VTy6ĠK 6gYI L[zf+k E*5Vcж`Y"akq zxŸ"9@d1.QS3 pF4ƹAOܭL 5g!,J@2XpIkt#8}pDGrU䦞y^ GZ3+Kj`51X+I|1x?GDXA :L:-r Vv(v0 —b0P01 7P Lwtxgp8as+Sw61 t Qen7PO' ? 1M3E 6uo?F*F005D ҍ< PbFt3 ] }-32$"2+:P 1 ƨr"eeM Xu"U` 3U(cȑ%O\e̐!B"gС)i]2eSE$I<];c P,bn(XsbI45(Pq#У q2 `]i(1bZЫ `ɹF!V79Ir2 ` `OB.NG]X/bX)l5XŅXbQF jF181G F!e:nqQgjb BL (L&,i/8#0nӈ; OV;%\j#XK sH%;(ʈzKHV BZO@޴#gqd8yfЅ^igI&l5XYAYhdZ^\M5@CYY½%0:}H70 8"3˩7mR( ݬȩ5(&4aN` ((s>A4P*n)=9`K=\[B-Ә)] iThT cv㡏>0FQ:YqEba B{LAXlzd!610Ek"\\]1ˎgmD"x#*DN;r|c)Љ<9[2t9aӥVhe7R 4c n}zgD@&paaZt d\r.Il,d@?[+ÇuGh΅Om-< UJ ICPAuM,=e4O 2:A ?u6HA9#1 C(u H<%r,' = Lw22VGP7^f4 `sE.!A Sr$0Zq>@û'V `CmFi-㴑8lӸŴt$(C?&%T1oaHrw<]$JrԊF<(ϝ̀Ź` 1)i/XKHJpVxDA02N@>BxMi & jjv$ VU/(ҲbQz8UPf"\TR_1S*PE 1^2-Q RŲ&LGޡ%IW5Awjw5EռA!1bgf5HBL >us>ۄsK" R/UB:8܀$oQTL Pg DYSf;rL}b^aҐЕs%R09\ /tϜ(I^kcuRT]$'&C280$gw59 +P$|+f< "%X!pJ}ABURZ)gOYx/ȰO*|zhI,J5%qi'?alZȡc 0QCOC au .t{8 ('9aBUF] 2q 1&#PB$Vi zp$txPߪ%}vw<7pGro PģzSZ>xf{gVȁ)P\Ӝ.<%D C+>7-V *Ma - aCzƱ=d)[;.0 28@10'8(TD2#[?s3l$T.j^?XYS; @@} (c;AH7 `9P|Ql;|+).}Wf`p3”J, b0re4vlf3u_\º6Smm`m\_"IaʈD b7oElAFD"ԂPBP e0 N! D[T-cP cH` <@ț-KPڋK-R8㫪|ap :4#(1QBp47rh/㍙7>k9D @1V@{7 ;@rH KK\8k֛ |H̸0@ ٺ'XFIc("F r 🽩g<ëpG!L ,A D8(7=C'l0C7I@kbLJh?z%h P0;sU  F@ B 2;Cb`Qd a9y}L]P%HRQIPb8CPQN3ItS%!- >t%%깚x !]Y^hY36(rm ppqdu%UHVdXBCþ1uU тaGv檆aiXgM =_mIXX*X1nabC!$BHSU^&v"Nbbc bpb=jXq9+㮄=4ZZͬlZ^7p e{31bH} gmXå>Ydv1@pnXjLpn-XA b@Wݱ!TxtD^6۳h1ԦWehkr1nf <* ,cg>g_ku7 ~݌(nd&&H2vkfV՝qEgFlT w!7|!BA\K!TЅ\]׳5ml) hVX0y[$8UQ1Mq^Hst^灓%`ep 2mIff3&&^H,2lq&xNsFk_dl6x!TA𡅸l_e Bpz`*gp"bqyp.˘Ԭ[-: ~7A)rQjIPdP[E$X$ap2Ho'rQHQXv *jj eP9؜hldr@S1A)?#&t&=_H@te 8[`*㻮b9 5!#5am\J@t>QSQv%yuu Hr_/whN I ln-OP{Ȝ@@Xv @'FS^H;|w]Hx R)SOPI)wdH pk@S4 f!iq|ou9Uh眐1V ]89疸rf]ney,r5gUX;O'qnvr$zJ~\Ѐ4ЀQ!r?lL~٘-I{x "j1t|,0 &̡bPE"ƌ7r#Ȑ"/@!VPd1%̗.(*L٪Ub  =LpJRݸE,-zNE%Z-*DDq餌)Ch1DD.\ 5IHSB .7B\SU 1^2XV7Yq7,Qa2ʨUU]w_wiD\ʀ  WMEcZ<*B5`SM5.l%TS=KÈ(mQAmx*vS,`3c1iW\sΡ3}EIP m <L'xC.^C ChpV_jk(QE1FDQdfN悃!?PTR?0$b "dU)МX `G4z@N$$TP a8 !7C+AK.v B p6JyuDt.r/$2@ ENX *YoL&w0<2Ģ$eb$ oG5l"+Ia69읣1#9O`H0gO@G*( aiNM c9$}/)P0h VE~WH2EbE/XmxEqPJo'>q o(0phV2 &@9zx#uB^rxsIOe/w  wɝ2ST4E2w$&L3 $A-{k6=?QIo߀7.)S]}7Rqỹ`H,8Kt Kf`˩$RZ+4? %Y8Zoz9c 4T9\-]@W՟qjN "iT̕DXtAzIgwR1 qM8 E^C^%H8HYGCېDH}@*qIs{yԈZr B,$J#*z74PȪ\ޘX &%2XBwL (3C.Iz !!MlrN> \ 'n̚җu/Li ЀP֢N_Jz$ `șFYBG"`s/BVibG&͔b# _L @P'y=&̷ Ȃ"KJČҔn70w KY+7<o٤ nM$&.ႛ|HF:۹D(Y,:{L[#}3рڤc7M@ 0ӘXNf)'RV˷xҬ5|foQ"P3{f5T )Oz"Uo5DkuȂ>` Da;; zwI ~|zy3[\(nFь"?\DTuܤ$B,[+]fub5j,'P6ЀQcqB5ƶv|m;E졬p($NE(2K\խ|:U0b8 S/HiQOo<c%pYFѯ)@aBݔ j=CLM ( LL CB$#,7*0#dEK! gl\g@b7»هVM2]UÏQ# $\t^HXEVH`1X$<%+<7дPK]BQ.@O~Z^ Z1v /!BOEBX5p^.!A^ \(WqEM,΁B"́9fPh(VA"h"a<\#1x2=> LLvkSaI.6h d@7PXwX*(BL* TlIhL 6<\dtIb8HyjX7@(؆4K(d.hCCWe\5 z BhM!(OIUxj!Vf]`E "EF;Шg=M7L̩ZZC")50=6% *0 L?P84K0ſhQ"6,IVp":1CAi `OY5 68F7$ګ Mb Eܔ( ޼[YbԠGB<#ʒG^["U/$ƑRSj( PM8<#gb(<.f0H5`BkA>f' )#,YQ8E ˛"ş떢JP pkm'yNOrLرC+6= UbORX2iS,:W'2&lOeMՠ%4.3gOuAƟ@ 7P@!6%H$f.(dɛ]! !6Rėd dNd.L.[,D`\$lp0E^@p8rAd%0 j찿<`^euOClRAUvbD,Haʫ%E:*P7  '4Ew||C(|fRhq,M1AdeSx.S ͕&dl$ݼ_!@<# B h][p"&I)Mw.hF_<& f]ԅ2`Ch؆4\JҼ489̽w+T4kv%X~&]\{ClT#C{xM'%Z#(-EpV}§3S@Z!UTتoCx3fK66'kv%DXdi 3@#^*l#H:ځ < .c6x,kfġXTzq08ca ;fQfIb- 4Q9j,,aI@L⬳1,@2ɫ%ʼ4gʢ?pO%K`>j0V Ef XC*5  zeB+6JclbYEeۮQV]u 9 V^5:T@BSDoLF$ᥚ6`TI@KV1bFB@fX蒌˜~`-Z:#Z9.1( j|x&qnx7zzGȞcKQDi ҈VJ PvYx /ALPx%,鈢?᠏NET]!D/[TFSCڐ>04SN9-g eK+% \U.j8VVa DS8`oI‰/Qi+2p[/bn "I @c[[0G$2& (V,(cb[Rl'Gw&BX! l^yY(Pܩ%A~oxxfbQ%x a|"cZ@ TmQ@8 O@#[͈QCWx@=q8a$e h~~7mEXJ!#4@F` ׵R/\h0ŠjM][H&_I@p1<_&wzK40%P%%V0!.Q(A -Gr_-HcD%)qcHѧ^ !T x(Yj ]' YyM6H&6aBӇW8Nfp2D+Z΁hX &pƀ:P:[h\#Cx@)+ ڱAE>22`Vm}#H䀷V`.(w H'ēވK~RLM'@7VL>P“ iHb$"H5d ' Wp-NE@>(G7Àd`E (k{Cd߀ =%b@q$r%DrȥB#PԽ .C! 1p T#mAHV$AS;D|puH$C)0,bӃX1sHˀ3uaרM53:&):𠰉V 1yTmU3N XA qsa (8cpqe|o9@^ 1π" I[(3Bz e1.HDx0+B3EKDrn0( KpsלC,H1j1/6=azGq *ìO 5-AjJo3+] ` 詬r#<Pe7pn69$hdY"8ߎúހucP68QMh0|t4~λCxpyM'ЋUr}V|З$e@8. {tiS@LiD3J LB:|{t jۑȞ$ B~pa8 da[k~ڃ̂ٻb@1Z#KXjA `Fm n.MЄF..-,Bl$tN ۬28QnXV8quz oQfQ `XC7Cw 2m9L fE>h $ؠ,DжM\\ /]o2DoP^<9Ґ=!l2_NbHFZVb&q |Q} , ~CG슁n& |QNA1xJ<@v'C0@SZ f 8#n8j-TT@֠ jZ@"uQJ. 3!B"#F⍾H B. A4l8L$t%+$0B[j3An%TZ[exgNp$i>i.ʤ.JI@f>Q&&X$?.>392#s8@/iQ֠a s$$n"V.;k "T%N{ PE#_<2p".#$6|1؃"v"M$4:0GN!0Dܫ/իztF@^MaJ!0#Q(+&8R * U @rxh5 X&Na X( OJE%D #(!Em+\I\gJWDDJ BѶ)+T$"!&2/2PFd JtK"& 7 f(u'%nA`c. 'AɢMg*1LKn"¤R$լQ)pF Q$827.+ysp@c7@{ &"h! .D}k #dDڃ_kE,BRpIs#U`rz[A8P JDCD%tgg81Z1EA˜BSxt/lm ӪTqԦF+H HpqRYc#rЃSC.y-Ɓ~`; 8`xDhFG8J"^Ŷ#I)HZ^g{499$h 4$$% #Dr7x$+Hy[J"&ow6ǖ\x*Xb־xGᖠ0zgMk ~ΨFഌ[ǹx.eYRx @Tp~CY8@U`g5;:b h :hE[h8Fp&= N^$%c5I"@د]#P BEe0SRq(8f%JZF'n[x\ v&^%A!$ L`8o 2ɴl.N[Vv~>q^*u:N+Q6|k4b c? T"Z\*#<8@v. cH'$9^>`FpvNL1Ё;xDXwS Q3` ʠh8nxq׽c`Ьxvˠ{c!'GX{&vOnD26!>j]P s \T~Ok?}[s4+^df0$z0 CKPD2Ԑ9XBd r73L;ٹ2P1*Rm>  ŲRԥ,711a7q\fA8<~<%- t*H$^ce,Ief|9PJb`tpAlP "@)>$%:CP2.9HCduYlq56 ҐFMeBQ(?F9 D50i|BYC"%\Ƙs?aREQ8\܈p &Kч>AaKp1v^O@%jxԼB/sYiT+V 02/ˌM5>Y/)@гu") rDRƁȌkxxӈd55* adHL[Fh>LiDm@\wH-j/B6Gh'CRjI 9l=\N­?SD}m$FPo|?& F cxF3#q(xwbࢠ4QS``wcop 1]$-ٲttӤhBQ?}DM%%j|.iufPUBZ-DgW=%!nۙ8Hc"nMYȄ\&bCXHAIabbZ_U lFR5v 6YP  H >3 c=T!Ĕ c!bXnx L"Q)yVbO+_ t GB  ;oQr YqIq\P #]fpƐR)-Qr1a  p 楧1&a)AS@2RBCAG~Uv)'X2,lv5f7=F{!Y9Z=6qǘImQъ-R+*wy"t&DQӢpo g ; gI %N\.Z ݬ  ȳP' @l6ߠp1nt+ )N/aT KCB3p4tH3ps7WUiJd)a"`I bn rk'X1WSZcc8` rCQ,"'vv1#*8IM8x:8D85ꭤeKtNt z|)d Ew F:QBS[N,1 Lk،p`h ,j-,3"#6 :xr: ,Mՠ+l˫J*8B*j.:\QHo{80fx>y76P7!o% qz$H70P\卣,ȴŒ*K 0ƾxHbheK>O \,h", ~H@|`doLDEt _A`!z*H :λ$ČKx܋m/$4g,c#t6I8Q^c k"53,6#=H9Sk00f4\5j$xCjރO\E\V F7ilcW9 \wEg1fcW9Z - "~=)8Ö,p8|a (ucg !>Ie`H~,Ȝ1U@Pf@ 0ie,F{>Q uY*Z1 Kacj<=)3 ]R[ER`е(*&D%0wֵ/zAdCMDVҁ M'e%! 09XrUy"XO\Bp<`83PbT]p0 `12WY"X4,a1T:) :6(.a2SaV<1eBYaf]KXbF5Iy%i+L~F',fAp:TT]B`BA&E ;in<0Sj>I1!?`Ѓ mhfG 1GXd J~P1 1Z ă<%G, `EZH)] Ě%Rf3 qhڼKwm2 Zm=Y2EQ큋f*cFX=*J`S"/A79p<\'=X#5ڊQzMon_nw,-K{ol7hE 鼡ɹ!$BՆ̃D`C CR+"00"pHՊ8HXEZ S.ZHUϘ r2[z5H`] A( 6vLAZ3L;/~L®wņ &nYˠuKze%+ZYQ&JYQxj0Y>!*xفSK V@6Gt,'_z%! 7hDM}GNzjE,fb@ၛo ܨ,KP0R\T; K8e(CCn1c[CE4w ͂y8Cn1@!ոSAz4  C5" Yj1曘V  K܊٦1o p5pU{ KxV f\X ac[ܯUW BA <˭YDu=^C6uV& "ы0DG:E< C `ū,+Sc\q0֯% a uqz8x ^B6E!lB_Aal !v) ? t#DBUo1mI 7IèKy tL|FGe6\sBC'P']̘XS-Ń@DЂl)0euc ^@º%ȩUdoH$pK;;2X;W {bz*҃5PgIi?{h]2):4ۈ#‚6i0!h70e&Hoo2,"#2)/ 1܊KP%ix ա?& @ ,h9 h <=<h@:PIr=j7X8^;Lg%% Ip/x94Q/xȏ*º ҃(< ({`66H(X"6PxGdHs6Ё4GHaI})ҷYq Ȓ3k h5l6V2I;8S 2D0z5 Gd  p?Z@;1A~cob8 8=<digXl(9X)ޒ ,~ȂUa`I4QiS0-B`( >(8 ‚ƳHY3>( dt/Yq,ii0(S=2 /S!N(Sϫ1XG  oM ̊|0e|{KYyO=1  l,C HZ P9`,"6e0C @b)E0Lΰ> Qu"M,xSk ąbx05"E;[,iO4Du9 `I0g6PPwA(j`* 6Q夀,w=6 80~ 0 +^^зIɛ[0АMe>W>/IS29wE/벳;ӱЋ2 ~R,ήxK3qUbiE"S-V("? H +IyVWa KOK1Q3?48OBom֧cS ~c%BKWj l%3Wp64hM0W h,+1*X[Ȫǩ5 DR>S@S)V= R9( q X;~}? Tu-@8X!4(a߹RMU0hT[L"&J 7T̏pV/0/OB/(z^(&7Ak^ݠ/#b/pA .7VS6P*4(qM]+*X] FKPֹ` p`aX8XW{ j4{ #yB|)oR! TTX63˭P!ARPfV0K4pqo-흣[*=Z>é T 2q3\+2uPCM_=q[8X*r/`Q#.hʃ3(B$ !G0+(M 8# [#Vr"5kqò'68">Q9''} C]m~ aۜG6-8C"ZBXf 4ZV.'M`Wpʍ:7Lu QK@d\Pm IJ 0"I +X6"0 )GW1 P`j\(xHH؂0ǵH5Xrت$@  f633M< f?Xm~1 k|5NH31P,R#}-:0v-%l`[SUW -k>cy68p-<"0FD0"߃2"iڔľxdػzjgK傈0"` 01 `1^\f1V˂0H\e3V5%6 xU.3}y5Q޳` =%[-3m8 G >#S0r#޸Eh:eЂׂX(mXm6h0xHO8l=zTp?o>h:JXV(b8I?(`)<^nyZяVY:0ϣ>>5\Up,]rA)0x`oc~b/ 왁.W6S+`0&`` pP3¾񛲻OP z~g[n~ʊGĎ'uA @s<ٿZnr-XmdJ$POXɉbHyЅ^mW& [lm d.i6٬9sأ;_Aj*$ )S<)`D+KXY$W8a]h(*x \9ddxbep` c?J >-KG3˒b?Iui4Mm .{hv;eo`5- mm$٩x|I/w8º<.*X9;8:L#艮(0- GxCаB +[YHPt)MЇMWh h]L f .`V(|xxW{(PN%1Oz:ӥ v5i 9Fi8GRP4MNO\s)$[GlP!l Ҏ}2'b-Y F*STРah%G-KP\Ag̘ ޜЅlR>ud񣑶S3<V~ V`x}sX:kc޸ʌC%hQ.0\RGU I*:t8\H4.|8Ə#GTA&D*8S|>3udq0ɒ*PF%ׁcCD`6u*BGu/}%n%}7 ~)D%T 0FK )B"dC +NmE5P a-:WLA'xSdIp6C?F%(L$^%-[i+Co< WF y5^RMQ`~MX+Ɯ<Z@&q IW]vv^jP 2p2 pԲ%@u⚫q̨Dg\@ $^̠qE|R12k:~\}6 \R3={ՐJ,XS=rX22G0%%@Mr;7y}Ӹ$MƱz@70)n !b Y2Pc5nHe+@.7,a(.6??O4K.xՄ ZׂV+P'6 t::V AY(ċ$f 7o V m5{Kb5##8(&T2*"9SȄ50,l"  b5D$qx_0k_%Gю0O%pNo\$!KFz: t^M&pcQ-8v#0sq/(#10?IE1 ozvgC ّ hY+J-aи6k*5PH W (8V!UTeț^ӺN%kP qj"`YɊV kb,HOhPK[ĨF,\A;T@)҈L K)پ*זth@RW,"Xc V "0ñ.Åj^4ژ1$f. l$`$GNh* &i }b֖d6ZvOa'xfߜu v^(f " ; 8@! Q7 q756A V "HGEIqk-t!ԁ*K$WDRHL@z:`XB^W8PPsݿllx4(9"`a] [W-É03& ~rcWĬ޹9d$kM pY1Y)Idf2wl~7hI9lO\B5`P!B0T5mY!ؗ-2ْE!L[luؾ9Pg[p,@n0a5šT"x Pn$%@Eu0?NA9Saj H\t$Ae2PBTBKH|)[xH}]|Q9A޽EȀIRLQ 1[ .۲%`1.FP[6 u50X9]MPNC`7@H^^`M YH`1!Ba1HE8VA9*4Ѓ(˚i@\%@K&%mkxH& Dz *L4L/p@4K|0XÈ0H(茲ސ9K|IҰ]HSHcAO&PO(1i<J}ВDGD`!šE[- <-C1ICH5D%Ca=\,AP $P5`JBa0NWPGbBYBA&̀Y,epE-T-@ H).D ]O@ޭɲ$}A?PɼA$]x$7?@@ 턄ȗ@ą|ìۣd< @˅%Gu[tTn ǝCd 2eCVh!KǠ(Z'@/f"I1`T` z E("$ShSLTq.]YLHKBBX'1 H0H*-J *Jp¡ApKPVD)\~b$n*jhx\#=-G $kGM L yĔF7Df!71hf(R|\0UF%%TX܄\ZGƑlE=EDJ@THS]bz_`d^]XLf+I+HF"Dwެ0l-HX޺~`8qM%D[1 ʪM7_`qӤd7XFDh(PNxd V,iİQ|ȾJD>@?dF زN FˑSd'EHG]_h!ݗB'`T(",]yEPIC`xcT0'LQ$;IA kbQNYL1KVU1tUJ̃0F9-Ѓ GC9Ї(xFRNnʥK Ic2FuQ]m dVn!)}tCTS8VM՚*%(l_ I @hUMA3xCH ě1vI 5jHV %t,LHS˪C"p%PtNtk>)A @L @*ضvZF#)Hn`oFk8maQAa@"8DEPL.I4ݣp^LEP93z/V;oҮK9@4I@Bp)Mes@t*Kt5ʢ5@$AةDzj;FҸ!,\$T;w,AzSHlDnPIED >T7 9K0(D%J T2d ؎vڂelm+1*{I!ݡH^~0}l~;.O |BR̰0m3{ANN9 T8<;;.'8s ?<7'z.4+@nJc&~;P mb4рB$Z喷`уj  #P4PLOWܹ\| H87(˺w3R9UJDT7-ܷE/}MDCX&MKAh`1GgſKJ$ĎC4 `dAcd)^51 `J}iW܌ @fT΁i%%nH.~ |8\P@.a]nSfS2-%Kgk>KGR `(КOF:jU?P@^ֈ:*u8rZf`XaH$z5`Po.fH+&Æ#e>`ePں%6̩b9RwNsWeq$78Û0V&FJy h\04 0jbQxW VŤIA%c5F6,OA dIv'[RPg9N8˜ʘ\zYdq.F{h 0`5HMA8MNs-1!#,DOkykU3[[Ds V`XT,<>. 7X԰;ϒm%2Z6XR5T'43>5w(F°^cB\nxD /p?1Ƙ7wQQ P\}Ah ^*b&"Ip0c2B(dJ * XX `* Kʱ%1B$ F,2GրB,5y37a 4[C9rP'IE=j"p ށfc1}@u2I+d@;t H$EZMV R-93nVGtf0`(8XG(fx q:ԫNX01 0apd+=xnP@\@`N6,"""HB@I< y!@mo vD+"3@&)4UȐd8a%xaMYYxm.5"d :Lئ(ErHLSc.# LxFH qc'U s@l0cj1ft9 g"7r o&LhŘ bvޑLR央ٍWgh x6^d%Uٻ9%HD¨R 3αP 4fEL 6@ @/ ڟ"ilE@/i%8eЉLQOR8 PhBh; ZAw 0CBǟC2lnuGIv`\b?uw&֩ !6ǝq#[:JM7hpez~oeg8^V)Jffp_/`+ ~ 0^iG;⛥:(/p1PAl1-L4bp\J6L VmQKN Q9[9פ('T\} !V 6`aS6 .^hA@v @YO:pUol(|G2 T ;&57K/N+ؚثNPSٰ0a}Crf8$kcxurP^" iJT"m,xӭ{_ӇD$(٧"kȺ+&pB".E]8KmPf$ɤg$ `E( <(><9PO=wFhE>xA+X-|q+4YEդp5OuPD 'Rdۂ)E-p>&8` 6ZzP7zrlH@M1lW%k (8⚃%qx>Qx" >2AFxgCJjchvEgK"B *`"u!wRr@=>pM(q-Z?`>g[p+d&Ra `*D 0>\\:0z&`v':p4'R#māTO?B?p:ĖbI|RAATDT \$a ``#B 0 )$gjϟd2' x.X*`F`  `4a~ ! ,& P&!M!#` o>0)4qD^c' a!0O%nfLCO`KM'(C>2He\u.afg;P1jI|8*3Ji-1 @AB Ac0=fM)u&aDDx&%$# R&` ãX!ad`aD! :h `( ~`Z@@.I&(ж`@` *O nҼ  rf@q9&L#_vP*SuLV6Ms|fI æ(5::C4=ComuVs|Xd8d;U*=lDztA BZ  !f[AvWWހQ}@DA |i"? )=B&n ZV!kIr ! o">֏:d+~.(\-gfbaV)(a ``A0 a azm& &d&!$IQ:CvcdB>v@5rŦN^8(-s (# jR3::6\pG[`v#;^lf f*Hh^0L_fȾSZD^Үң-B]?0z!''UėL?@;/5#!& ޠ]ldbdbЦ&Xbbf>B&\g/ZQP< r!df6`V4Nʁ\ O&B N ѿ.Q1Z+ v13B2zi4;\6.x`vF%<,#ujrb,8R.aXl?tc,Z?ڳ1c1]&c:q ; `S9U?$] f(|d|Ntaz>>IDImAԭSM`T&bB VrFRhO:jB]kK c/ꁸoQ'r /kaj"U`^kdu 4Mo#n &`X>G:6Iz8|N9C[,aـ5mSjMf{>e!-!lNqrt6 S=ZR4 >!zԌͤ-#(AbK&ܤ,HwBo!'f `M Sb@ADd"` 1 &5*&7 7j:c2Z7πNQ_r3*JYQe[l(l(:R5i*c379&֤ihtgzPImUb[Xup+C]fZ[` GfFo@C[\|ZȲ^&ݔ;UʥwЋuz4c\ȖS< h6+]u0ú {xX i:,HZcpҭ[e3Ks\u&[s1JZ6s\w%6FZVuTɔ)k100F&aϠwMz4g,fl R V 5i5[VYegD\Anrr,neiηF,meͳu΁y9[1WpL2ӱզkB+\7hSQ 1 +RC\t42Y5)XKl0I+R ^<+"@RIJ+@GOmDod,{@,'nC%~,B㌉p{M<>BC1P<R0l PE1D@ ^"Ίrsӏ-%m"}QSl†7j֨Z). }#F-Z\&*(g>*  ߠM9ЍyȦMyBKP: {$~#_ @܁qb*"2 @!/P E@8w8FcbXO'4PYx170Q<ր% ICZ. _j#,iC Xpae)%{LY,:%l3bF4q*`!l, ُ~|o]C[ wJq>qQlm%I߀aǮ ~< 瘜B'G%"R8b # X %0`P d`GmiܣLe!by3 $80l&ڈ?12F  .TPC !PbY6'@K0l`>8"bV/nY` ʹ-.pc ``1h K LP8(@?Mĩ!Ԇhc0cM-|T =8u~jy܄+m$<rT 1(aDh2BC ,C* `A^ywcS`#(oNcy{PB&W0H,0$V>ְM$ Ij K09N)c `X%+9 'Q" vp HZi9Sⲗ>aq=azQ@{1yZhjamwnYYBzn@ERe? 2c xzAaD 4( $a!(iŠor l,6`?(hFwJtZ&"6,i"RG@$`j/JACXЅ5,{7kET8i`.r*A6 2/,A" Hi`"tp0ap20Il0a/eI T!+a )t3Jr'=ږb@rV)pCm% BVwLP gDoX5P,Qz15CqCoP U&oh1rC1Z'} ϐP e`\32p!99 @-k`Hi dDR.f `t,) E4G1 H۰ ;Te P 0 S\9PapIDVA `Ѣ4[!1uwnA3bV0)bVsQgW8*w)P6"g)xw]2+%W 4- m ' y$I5 ]P#^k{w d@R 2/3ump_^9<0u hX'=h "P`T ]p az.AVQB郔1;HրNX(2+FqW9*oU3+ձ*J:X6͔r?ANRCx5N4q[ r砒0pX6*srUȑg3qp  W`E(Q 3Qz $e. *S-6S13@FFI@ jTngU:`U@ s.i3jJmy'jr Y O$+GJ8 (WJvXio0x j% 4ƀP@a(XP1c\qe 0[2)>@o3-uy{8T54Ly13i~w7` P X 'uH0pPw)Q1i!fk44R3Q?K1CPcD mPJ EJt=(@/%"p 4[{QX2-f|Z?r8 F}`.vLBW( $|@oZ,UC+wr4V t]VrUe\sZ#Xs()%Q@@cE*vMڙ [͂q2<+`  1 R  WȰH@$ ZRe+ PF#R"`ە^/. ' pW@]HXu=VE"$ZtgrCr0*&+b(9q.-yz)0`Ji@9V6h3ḛM֔ůGN)Y0*?!R-MaK5Bscc@co22`f% (1+I  VIi(Hp@W+&2c:' *R<ǃ`;,G6B7;.R?0 󠩾pRqTpt}A` àlSr 8Bs @ETY GD;zav'Y'`̊!r$PH)DҺ{ހ@@ BzA%TBsar`` ].|rsv@śLwA@oq`R 3ouA{U2~ieB1*'@}@-V}O^FdtMWz.Y2`pm ӺPr,D&6f@ >@#k0z4 1!چ.W '`%b )Rj=P0=5kj3@ *$Hļu1ARb9LptDI2¦0@#g #QU,G VAvR vQWIp YԩŴ{Q}MQ@6)1*` 1P@3 u@?Ҡ'1(|4Q5 yr>Y) eR }0U `""lo {bjfOa "0'`ptk ̓ЕH պ @zd @ b!3H՗!Q^( B: &-.=(1: Of YNWΤqKsm  {*2[|%4ۍNQ0&kA+iu+~rƠMM v'` _ se-K.bВ#G|32ȧxG&y,7DY| 2.$H0S|P&g0ƣ4i)8QNZըPb +aA"RXpTImy>2% er\Û$b E uFW?#3",un F9P`S֮e:M7,G`qG+#/xI`K|rl.6wXpɺ9l%S?X[ڥ#l 9͵NZٮhŢV(l _" (2"r) ސ#d j DgΊ `#GxEM o0R,,:Op\#8½0 #qŖ6Ui#dĖl=SK4 AhS=Kˎ@\ 0(Fkn3!y!h j PfQ`aJNDNIH]@f]VRD E"h.c9m#nvfK DH*G d0&B&cQ*B 0oZ }ocH`If6(LTwXU3vm,m%9RXCz3f%}5^h9ZPZ;yrɫh=.p$l!x:^n \9Er<dYIO8#0SI^^65cX[3$"2+8;–wH7=!4DAc $;A~8<\*Zjpl&=Kou 5@?r|zN%11! {sуǐq@ T%`k4-K=l6tE<E~Q 8X:T!^1= a5A:PFoInwD5b|b@5/4iCk~=ƁM|E"<x@aC!މhuX!ꈚWUdh /@/XSH`x,hU C. !̨3@@U|gYc}HD0@%e`l@p,SS:$#t8ЪJX0dh%X0¿ {(\@\Dy *ᑙ8"鲆, (x1KviMyyO,lvu8 $IX)2`dtc,ިFf;@QgC7Tȩus_:y@bBM.QQ( <"rԨ}E"f P~EN!\%9#P, |Ym jVJlbZb MYZG0\CR&a3_M`P  Ay )p̢kLU걄E,Qnk0W,*sj֊gJ?ҐB[#.^aQk!OQdn8. XZ0VS&x43p!gHzPo;a\FU\IH=V_ĨƂ zL{CTr^Ѕ\ ^83p &ȿ()-H樌 LS?R4]<,w _hZ€I [ iG.@ڌpzM20 } h6Ul!fȯKH;x R"S(g(R0 +$ *B0:(s #pR1!XJQ(Vx5` tȚHoZI>T /pEx ./}`(k]> HHZq( 8@4X8h%7 QlyȁI\h>.:T@XU`%TC578`k70( n5ˣ2$8ި(#5bb<ʨ`T(XBD*Bc0"ü1l jc8yCĚUΈ9HBRbꉅ{غ{8598>2=rDL0%Y4^X-_D(@ 0 VZ* J 3XBv!:  X'PZb*(yx* Lj$ ` w[(X Jh:`s jL) ʫ1ļ_52 hY `#j(/# 3!*41;C= O(sx>h1́o g rS(% aTPQ-+7DxDBTTs>ȿjD<, 鳥}kh Q3j80y35@*Z 4 1IhR8j|`U`.Xbl8 3 bHQ {59<"`1Ni @)$ǡ Д; b8B0(000jbsg ZO<T-:8AJI`  @HPT@jЀ,h>1a ֩@]\ʪX 8MYcLFrq)` 0F0Xq :8v@@D/84:ѡ5x79a0 b-'Jmd HPȎXh#$!\ay>j$$RٖKڰP|<0x7h>xD@t87(տ1OX>  P1YHJ*lU!@pblP.Z`d/m4$j,_ ]x:@a bתX|X(6Y؄]+q-sטYXŵ[L%3/  I\ XI[]MXjPo!fƕ(Bza\I8^#A~$\]jxݔ_۵;K*K)WpOF7 b(xU?y B"kXNa Up"PB|xC9%@x`Nl7IF8W%8K|ST0.y\X phH8xܫ kK$ `ݣ!@^e!Ё.`)X%g <90$1T;L=#P`I5Si#UY 2npԆ$W D Z%X4 X-@ (78.c^b_sH>>^!*Jh0F&I=/BX%;cJ :H E`EPF]w`jTbm! JkS@pF]Uא"͹I; ĐD56`% V V.C]ЅTx\(A{UPf |[eٹA 0 VUSf@l7FHUFU€FRwa]p8Z&xrB p}񟄦k؃"(J"8/}pݪ*hM z1`wP%^H Uz./ca`J.]LƩoH8Uc0"#K UɌY" K5˂:y1ɲ['b֮(8y}I3̠ 93#!  нQi\o |m|mS&(@|1mD_kpª٨1ՄLHxlXjG<\иj{ P>U=(ObptLrZI`o0eipal]':0 xْc8sIY8:H1:;3* }9`w\|ث dx: |EK0Qh>K{G4 7;J=i8[>\;٨2Jbɖ2 %?U/ !F Um(=0kas@qZ x<r@(lB?Bj bV65xoȁ-:>Q+]h v+ -wwk.r)a˂#FV P!v|_MSPB[ybhbe5Jk\Y#vsWzHvؼR|lu` ?9mz) @`#5`/æOu -CxA2b)UTIbaJ br` Fs.Usz + @r@'!Kͬ%YՋdclim-ܸrZ$Z+HVjz A~>)sU>&MV 41t)W@4'i%UR%E h^͜ܭ&1K9.Gl.8Ew'vD"v`ů ٺ4H-M0c%Kd' h5 ƀ113#!#P+\4} @0.BKI2h4bԈQXMxf'p p#M'RT*`?YMW1Ѵgd|H`e)CIyf^}qM֔%%o4VY!Z>]t4 5`$ d%A>,Qe)SHI6H.77)]2-%`KElsWIlzip57'G}ɡ*{^I3ezJ4hӇ# hA!"?3Mt +\* N$L\V@D %<_P@L@E}Pp@$UI`ZЄZ |~Ei}w*}>Yu. 1pJjc~ITqՑ,|a#`H:&fg#bdafr&Ҳ Q!7L(_Pa?ಬ! Nİo+;+JJr ݃&|=BS4ee Ū;CUK:ΰemGsv#YFKH-} >ٍ7 <Պ7OB9 IBRIM>h V j0A0*q M: "@D@e[NAՁ|hQhrC F.>6|hF) roA,#jR_`6l@ t( [D3(b4,(* q5%iQbNt%M Qⱈre 0%uѱIs`5+a!C %PS9|rG/A[FEnѮfF0T5OdAxuP.K^Ȥ/IF"xJ/b1a% -hAiX$xEIQQQRdd92iH t8u{J?`.2.*(0Qj% '^8pU+8dYހ(-a NP$L5ʊ@xQ +@S%#Z/y((^0.QZHCE}EԵ*7}RGX7ߨ<\A £$; u,y{#zUN WC0#)d (jPtW+IE/&Q hpp`Y/iO4C+<H+,rYjbBI!-iõX/6~g3%LANkSߎR09*ꕬȄ&CP S*h2|aY!V.PPF ӟ֨/00T0ǿ%"-߸juIlx{U6tY1ZYP t c41tSp|!1 :(,EŜ$aިV(2 £d@Z 7 vJ"! {%lY͞bJ$wrQ҄Oh&7,[$7`PE`$d&Z` U8弑 *$1P"M:e3@hF*}4Z8NpEnlMm[E]X{mPtԲIQ)A-P4@pjd$;Bd$ (HCl5̌%ЂHXpx-lnL@c  L4M@*[|O!ߔM-BxqPc EY9a+-0{.h0C}]B3Bd§< SV=")$ 2Oq)7@9P0xC*C*'@ 3|=e[AIt, ш,g"^֟X`8έS3lBNW . `E?XEɝ-.'/U\R64FA4BJ̕i$ ݂^fƞI AV-!7@A`@P90B DcIH}HQ,`3?%,DK$Q#(@JBM}x"rn`.eq|H,aCE?xlYHGŋ7"i;\jŴt03mMg8$<c#R[gh!E3 a7Y!2 a{$0j'$(`=R!|z (c>I[9j(U.$, 4wR( g/Qbraz Vxc0< 3D" TH=B" )`^؁,bd8!9!PA+Na -X$ !xKbAP& ?r 9jPE%h#ja92FQ9eT( D f=F%蓞!4{V>8>NgrC&U$^q#( 8"jF|H zW-![H":~#A/pس*$N[( qYT O| H``Ґ`Il%])ɂ !H=lRO8R\8jU-lbFq^.nKHQa-_,ف2[mT\!!l"Ѐ3l & #:0f`ٳO@0fAI \ɢ0x/ 63Npr2! #5F/HFY8|lbET!@YO &FH>`BÄ d i8H5t V#B`yG']KBN` HR,$xAWPAquA i0~a aVA\ Qި?4r 6Ꮨm 6<Ťrhh Ӑ0Tt9?"DX0& bRO2Hm`5Gf|#P@3hVJ@t xFq QRMB00 1|x X #7y& ,hD+7$,i^#s6 3gCX!%#KA,h>(=)\ ܤ 8%40C(aCYRbcBZ !: 0b I NFbT#AN +.M|yc~Dph+!hP:(\%)pdDRaEZ(t@ gmKcY%jL e€U4JA22Vԃ"6ER0Y{B`2F84\-`P(U/I'BҲIĂfR S?F(eED;^p ([M*@'BxǛ@#nYH)S$S-G2 8Ȭ2 aSXbӶӐ0UDXYrE*6mj27 uTkбmH[oÂ%e$ ^IѧY r1 l!H%"υݣ {DGv!E',D/{3[LEg*Ȕ"j,H+$3pXԅea$kC C"Q7\#$J.9&W(qc9kC9jbq~Jr^FB"Mil. /s>(WYm>Dą'F9:!ŢZW D ` Q`%o xuva! EEr.눘blDq&"C! ;SChH(.[{6AVqec6_B& Fa5 b3bK PD9tD% /c9xo !" C.bl,AL딆1RE | 'c>'}wl aݘ+6ኺE&61JpyqXt 0 !Ѳ˔`b^gd9 =9{"Au14"u!]8/`@' uG KJ An"V!*AƂ .X!7X~%)*V[ʆ 2 XD JPVC8[lA;@`h*ha!L~ω8-!0\ޡ/h toh$\Nj12IK1Z v4DF woX[fhBc[foNf$ .;B\ BI-6/!j椪b !$QQBdAX-ʢ ,  .& !R6_iaN0 :DT2#jJQ&&! PъbR|!!.%\@PeXNrB g|`!`hvt#(@.aЀ2!n'1" * GL r쬀 $ ]bz'$*EhNF/%!&g!>!`B˔" `' @b/B BHV!@ &B'ߠ$@(=BNĠB|Љ\IS2wN@@! l w,a* !$!~m3#A z'5ƙ$ +,I:R1RaD@C$ a6&`avl@¬T#]sXl#KwbHx3h)X?an >&!&Rȉ :H|"F/>H  jOF0cdzL"  6l.k @t3nH6HRA~' &M,a79hH`$0dpP wep pGh F 1@@ c F a"\ ޠxС N"tH[Ä'7NnlRj@pxJ!L) A fHF! (p/#A .5ۀ4!Гv&V\!Lt( 2 Okt[Lr pb)$e$u ¤,r * "l]ol"{ - m$,*!mR$+ A,@"a!/@|NK!ʎ  lAT (2@ 0~n%(F h9YpZHLLʀh-_، a: JL? 27ciaz6m{/gpWfSn꾧)$7@crr"zpc40D ʂ Eʅa"  6o؂Sc $F,!1AjAv@]-aX! +!bb! Z`f ΎRLn6X\ @C17@{quh> ! fq! 3`'-;.rd`F\3\B(TLr @(ڀd׎ `M$IfdG"(FqpB"&E@b$ ֠|d`^bm* 'aDh-`[LHzI Q%ZI`7`BnA`V@ q! 2 P@ʎaˎ 1z!!,o@9o03,!bz.@qaAAcbtX4g" !Լ `BJ5!!NK;fS!DvhaJ*EE2^)BHV!b,'a AO(P~*`(=YB&(kg!@@iA z̒88!<#yy~myaz!-vYp3"\Wa! n +zm)&@e:/$zX8OVAUUd1J3)aht.;ڷcg %&m60|(;J W,X nf?F!ڪzil$2f 6b 2 F`Q  mZ初L1o\8 zDCDNpb ZA@bA 4ql n&¨ \1b r+ªL~ ~c *9;xpРt%AN!{!: XWaX! e!C&VvY!ƗR A8 Eaڶ8sqAbaj mt&-LHw͕z7b|1 L,O+[IC*!Xe/ymTɅJJ] |\3NRETt#*!X1|U~V@$)}f67; |a͸ l׀rEEq$9 bFk bP g X]Z-H@w(I /d2v 8v*`?, D|\|X!>Hzdz!NHL(Z`0f`˼0*ހȉkE( ba LCZĂ{UE , @Z%X WZg`{3$ H &,F !`-` d@`S a@To#t/B!2#*S `k筡 MH * )Ā3q{z" C׍g ,諜r,UUNQAxoroNB7]<X)+Xnc ZP<4iR"nM+E) FdժA`XGKlm6ڵlۦ`pUvY2JF^V< Du񔿂9 QaHXS 6;v1l8SUeY zV&K%>D<0Ф~ o)-#^ 9 JX#LMG0 j T!8m%sVsMQIXň$Bb.JA1_[ΔSup_A^".$Ak Z9' DA#)V$Aqq%ET#<$@[-Y` 2*NP?Pʛ\bY79t{IS v Nu'HnKAhW}Gb GCrA2̋IX $E]FL0 TQA!m-p An]3'C&I`Nuv s\i#XiPk#L"a0e)T0 lV˷m2&pCAMǛA]@8IdA녁AJ]1r/<)"IQ\(9qDq-@ uRR`H:grY,yxABpp"0+~d]R$1̀A& m<SF9>@كRʁ 0 a(/V:Ĥf"6T` HcI0 Ԅ loR3K cjz 1$ Cތ`@Y$yF\1@ 8~`1H,bLtWqD#BAVJل,AKlmA :eҘЈ*]ݏ1˵h4 )2X`0xå.՛ eK)$AZ WM1P@Uk`*Pc! 4ZHP#"L Lh{DӋ5:ި 0"(m ҇fe P up+~pNf99XCTL1#JWʕUcӎ>F KGH~ʹEa] XA#u/-={IUZb;`'P: HJVP,ÌS0`Ud8EÆZ(xAzZH hIX4N"M0R@p "C] l7 ]?xc ANP#T@FAN=A{(n5^ 4ցR`9%M,Hl;猻 B36@ྈ3JTa0h5 7붽)Gr! `JI`=N `W>P, B4wAꨛېD1B Eְ۱&^ #A #4Z;Hb$EARvt8v>x9E/!thi ~&XBRq+B^)5ayBkᚕDh_H BxA;}ATZ*&@/jU'n7ڶ7Xgd CeH(6hiI/buP u >Slrd)pm1E>$,0 N"+3fRd/&Ebr06O+u } `Rq0p5E|UhA @&"6 b71#R7`XG91SQ.` 0P"bqʇx" ΰg:脭cS-'R ״(2a]CC-|VA ֡ 'c"}`R aa p ]v`b w6u@ 02pK+k00)|Yp-x"U ` b6  1R#@uupGP`pG@6p fS)r0NWQl !  r or`WuUrA荽x h !Oсч9 Y 16rh6g wpc^5SSTI:@PE`.#.S$:p" m}0g4 A}P#`  wYy3 +0+ )aO3Q{14ل87R{PU]#P*7 yeP ` <)6r?dyQ;@pbJXDlp!?nspS 8!m" bF<ȇ60D\nXS@Q Aq-Xd Yk@B6(j2z :XPÄ1M Ymf uiJ7 E{#3`6}gFUu@ h6>8@3y#A 306Ɛ,guK41W  pLq`5A#U7ՈQVuU 2ڠq`Zl@ 1WB0,iJy#;6TB!06u@ R{9h("uWPw8e9ى|0MX: K:RuBtz np#U@P# jC3&,{#7rCׂ 8$Q  ԅbEI }`|$x: ]`񀲁``WkW2V dp!69046P1`T16 jCׁsA~ѱkXyA I nc4{ Ŗ1UR&A9kEmZoZT^qVa PoQPo 밭'}0u0@ưvSpp 3`wgPyS>\a.1{907M²UE4 "l'P9pm06Vx:2Hg  Z $$$6R-54)/P#M>vR32ipWۀ!w@{1p#(Bm|ZB:ggpCC\Q/^< ~Ʊ y^ cp-r 0W@U'R" wVd qF;g9%)0oP#f  ư[x' '@ie Aߑd ak |"7,n5YKPlH A(?G-K"+D@eQq)yD[/TQCm`sv&Aa FUPqaq-o@ u/c#PjYWSЬQ0(ga U@a u `" p`X F ~K IHd뗒!V@^SZU70_6F-XI{@HK1h."3"r6P0MZHǬ6^v6 (ǜQ)ub #pQqoub0 c9xEl "Rp@WQ :щ[0"9Y  qr.R4| ;(I?A||A) ,4,̽ 0`/P6rJ- 8GQfbٮ` }X4E `r }K3B1t1 p5A=y\T!"C0"19rY UTHXو YcT,nBB 1  @Hz$ cR$",3W`IC^NXGaGo؋R]E0` [gYI Qa'c36JPuLK.'EYZo@ + ºXqh`p',SK/P  q^ z^/pY.rDK3Y1 AU63 &3hG!4=bNy Y nw% H%:%P@Ih gh !zzQ@e4{CvF0avQp w.u7Ѝ#> %7$uL!ErmxsI Ⅾ";r W0sdk$6ƠC^m 7 RaE wK@@}a@}p1)i!JV CPpw8EUPp-Q\ P)@{YSQ-V&C7*}.K/aC.S9z3^CtP&]q֑$a0Lȼb+~)< Qi  u h4R3p b_&y a @q@# ~!QF=~Ro2ጠ!9cz# .='FW~0 $ V&Xle!~Y413Ffկ% J~3+ym~܏H ' rrTc`N$$hUBr@'3fs<ʩ+Qy{C@D\b ,o 4$! e⊛(z@rlm`qSMH0)]݇ Vb8+1O,s$Ye,a#=(R49 7b W(@̘6fL&RlZb!!Ѐ4HSƁFLQmrސKX#,0@*#4lh*kèk㌁le;l"ևz4^%+ z%ABPaX9Yx>o cmi+x m(9$$EBqŒK^ÒKX5`01[m6. !9x! 32౤"(A]񦜂P{b(o00ڠXCM5ɇ(7ႋ%S4N Kޑ!KIT 0 8rdDV)6A&)tuj{C % &23 Ic%;uPwD aA+#H 60>c Ő2*@Wؽ ΀58k_IU?dq.ވY-hH<Ò6( ^@A$XX9AT*\ct\x94j V $|"MdP Z.9 ZR2b5߳DzA0 IH8Ѿ h W+m0v![,>뇪,$`2ue X"8@D dLr^@&Lkq晾s} >*Dw2'hCaD P@JE! ”xOHȴb\Q>aP0!8+H>DraD@Ƹ_2.k~9X>H0?IKU@i] j P`йQ$m-c5XA` J1dяQf^:$ISdapRP+\qN*?l8~pax c!"59Q H^BE d.PkBA%Z0(j #wsЍq]TW4r48h h!c4h-<6FRêg.1oo)~BPxMWtEA*Uʌ$#`p.qX  QףO,@W.7fЇ<)O[ @ ^DP J킅%,@u.$D,shvsWZ`,Jڐ#tnE-6,&8Qa Rg<؎A:H.X!(aeHlP%j`b8,*ЊӇ0WpB<`T.Ќ`KpVJj`$Nh,#B@(OhP5D NB #YR)0઻цO`!9x(( wi,0X[dPbXҁyQ^;"0=9VSȇ9`؎11xDҟ)zПpl 2 n%i(}#؆.c@Փx#֌`,tC0pz$gDy0`> ]p 0Њ dx !c80b ]ѾX0*`( ' y_9-(S6& *`-x*1@b V` xs$[G0XH)M-7Q@M: 𝄠PWHDժ͈V@J Ouэ X\a\몶o`7THC4$"FHY]; dI`G@"X}Z?X%X @Iȼ[@X`30 #E`P@ 8 *D^r79fN& KY 죫a+Hb 3Pje쁌n q@10X =`U7pkF.b @hث1 @!s$@1&hI%rlúp0lԒ!Q_.i6PBFdb!N>@PL S|IĬ<qF @Xra 7]Jp+L#*|ODlA ! )pYBB@ 1P+^. Q*`@C @Ed HpRh|KjFi'Q3,?, =3,mQ91Q*k`A5N>B$pR%E C{J! ,JH*\ȰC NzpV, p/!T {"FL1b% %#.}k%էO`ysDZɤ5q K(h8`uZV ʂ2(]˶۷pʝK.7IhD_ֲLx`ah'(؊vcx Gqޠ|욒!Rv@{2ZTt)w dgǢ.pxԶhg"n"@Gg xD՝Gy TW2q 0$.n>0@zl_rpilã>$=mӌ,H hp]xjWnYJ #R$9EލoK=<-}z (ιK5|h酏6מ1)RXʗa h63(s"} 0 /)]x( 4bX?َC`WЅ(yVG rCF,48N0ŋޔ҂RDu{h>X\-; BƫakP FS8ЂXⅨǑsL&2q0S\6g?x+yԇ9%sٍhW;q#>i+d<B9GE)G TԢ(G$":yGY:p38:щ<A2#]g@̛w3M2(_C :A,;KcD :fo+ ZAv=;ANԫbmRmuKHM:MS}, 0r \a0NE|W:fh G dxG<..$e7jkuZިE0jq[3/I060`ΊG n0QEZpE4hW#%AѩcvL؅}P/x{l]e:K=ooX$ݨѲeg; ͩ??\CI(8:Ň4zT" ($3Bmut-{kwq6B۲.j+<&OE[ewIO)70Z)h.65nVt!C0zc)-+VGcGX-Oi&F|m8 2S3v0,d5XXFP iz>W=ψR{iF5~& PYU`cE]ue՟̼k2GWXkw\w4s#ԢX@ea_B{ uapMYBfϖ9Ql:|]T7! 6n]U*~K Ek-@q!}kgko+Ggޝk319|LG)j&oo6b'hZ덕d)vdkNp{s9ܾKvRnZ‚v` aƠs !|1tEP%]mR vMit/udžcq%~q,Rnb$B/u1$yS"ZN6"PEq0;0{;0pvR4rV^Š0p p"xobq B[EFaY1Fc#΂#b+BL(2OQq2d3%NJ7epp`D P lpr)&tpC&!,K"g.%8 VaN iUpHU#N4AI"N7Պ($0:s/6-5"N"C ߀ LQ\'d3X9S}j1Ku871%B cC=/b/@k4?>FCKQ$b϶2e d<2o,I z :xlMђ>I\WJe}uT1,SxT JHy2/BB+K H(woPu@}e6(OQG&u$& )g `:0E!z$vZՠe+V~K$O:%[1yD6,(nXp4&_Oxbz oaxtRFs<(eif:q * (UرA ID}uCY:d}hs6EOv"ug8P823c\lLSDjK"P}7V#u3QHa `` P` 2q202U!x4RرցgƚTPUI WxU6U,_:lxu\g<[S&j8lZD$ s` cCar^R7G>50`0Fq(f P:p!R|U,& edI5`KЅG1eErVq6=kOOv(kl'xLc#K qhZ\ђf0`\CR0 $)J|oy6,X96TYL`6m\ų5BFDzSOw6C"R*"K XVq [kuc1"RzY0XFQ,{8hʗ@fo R+( IPmKQ n3s+X+>q35:פ+Vj')6}@;$u +% "% a,&+4>ew0 YP,ͳāAk|{KJqQxeMGJ5#ᆝ4>3B1Xy)(3'sh37`ƪ'R66r/0GRR24r m2jDq4FlI\sq 0)@ʧ) .!k+J2`! U1ltF%UBlE2iS|f8&?twSF>3MR~Ch>ڠ@r'v(,j6IW;kKhU$حçsX)` @ph,Jjpba]/J'wjv\s27:l>n{~xk<ZǴ p\"}$Asu]m v Zɀ1P P` ι|E.\C: }*Zk Wh|{ _PD/9F)[([;e#-3@Sv*J鎦7=/ 7()7w{#Gݽgj{h{e P` ) Mn7)夡ɀ$(q A}JXWidw;QCӵ4kcPmER}nX:eCG76>/%-)2`R`a@}pư1ik 0Pm P0 "  @p),=mAA5ԫ!ff&2 hܹRX42sg4CK۫f./A$d#J0 UIxjB\B<|Wsք~ q > mq 0 )~E_0  o%]G}6ujtO&JGA#f0.A_Bq0>z7;JP ;Yy8/9($Q7 Kx  /F)۰ <"Aq @  anΈxOaHG|/aGeY&/ {}w'+_:jJ60sM4yc< n5."#\: sS1cȑ3`x(g#ƒd 9G.Aȷ& հOA%ZQ?%eiReb "(KcY܍siV[okÏpD 11Z 9 L?2GQN79|A,cH@^B$}]0(P ey@ڊJ*憰" +Bl/M0hVpI 1*+k 3LL5ԴX ;xyk2dK8EZ 9,! 0q2zh:k.K1bcK$LBȈMhC(%@e.I@ Zg+tRNz'y't%X ͢ kֵ0.G1.GP,r W"+X* t4  g ZIV80裗PlEb:M7ws"ΡCM\qm 6&RutdàKV@ʠa"Tp0(fy +W-FֲP&X&uXōJj^ txMXJtU¼2CX@Wt㍷bDc D[#Ha7Id-26Fk*,@$ &n"=@&@b fJW}MwWLRF2W = ֘3[L/ڴG{*k4Z>E ]l%BWn;;CmZOG8' b< ĐP1 KXgrz]Sb!`X#Ot%e ]DdK%,$.Kxp !2!&@eP0L F@,J;ۅj14dem2\KAB-RY<h.8JKXblC_(7=~c` gE-G@A Pa Cv0LPRż#< 9Bxb]2BwP 2&s|xu K@RБVuTZ! GКIM Yʢ Y55'ϲ2\+A-O pApĢ`E zы@xhRe%Щ1Lcq142u.Z?Y!-S@PCWFGk*01$q1Ne` WT =lmDhnMi74o ,`#> -zA!‹T 9K;& +\U\(lEg5 b@p,b{]G4 V @^[WCky<87#Pv)$mZ,n *Q9.6D! #(@ o@<ûk~K. +>C{yΛ@-`(p85(.H=w5ؑp +4#ي5 C hV>:쳃'7H<l kI;h1I$;H6_q;H?#7?;?(jHQPAs<-ܞI @;1=#YB Z  +{Ea : A!t0 S% 0i"`%ÉH*3c;=(b C+X0'8ADBsB@ P;GC@D@~4-PF'(A{D3@8T=[3BH8:&kAHR\zH`{, iFܣ0|û+X**W\oFbc*eXCЂB7;ȷ>p) ʷ;b ˈ"Wq=;TGY'HPC'pXHca |$L XK֨ gxO*1` "L[p"DN6p7bGȨ2.hh"^0 cJ|.K zx Fۼ(Gi ''h JJ jyّ xu\'NB8QC$G¤o;@40 (tOz (1 0Z[hc(og27 L U?!$') ^ܳICc HA-śќI-Mk J Q\l[UXӄI &e KI@0aSLøRR?jjп:<c{6ٚI]% p`?- D1 mTKiAiXzR/`+28Ư7 = E,7UFl ~(|I3UPBl!tB) 塤⼿r>R~L>QP1mUVq,ʢ,vbStK *5 L > Q 0jpT1..٠$ sk֠KD#0!Ȣ1"97 J0ZB!U7m M²c^]P>L)VMuBQVk0Z,\Uʂ<$ųg ^x. 8>mi#`%Uv\ݘ.)P/K Š% ~`uGql ˽.kz.Q39Mœ{Ľ{NB :TI^7c ڡC$??,a{ 4lHmUHn Ѐ3 %I8\U$hX꙽OWzu!!)?}9!k#\Ə}&ee Km? J) M=`~8S%Vj`\-3սhIY)~kïNRU&b(UYSy+ lCJ_CO0RŢ\8Sl_M`:PZ y:KxDqT5ȡ Qە1c@ۘ|dX h,eFfȢ0h.̊;ὐd V@D}qNaeZ?C*tU^=\JPqZs{pbtStZ|IV&jj`_8M(BŅϓpD}%i_ы^bOT)c?gHeml(h&3Jb,/\'ՙ6=…{.8Ca{>$X3Fe${36N~q`jh =\3n  J+KҒ jCՓ8Z_*L*iKhfepa`yHAr( c1>>0c0\ b V0x%:vI$!h< 0VR=MVeΒ]m}=Û;\.xL" K؅^ff>% hq:JCci~|S;8k9gvTwx!3q41ƕ ӊ8lq 0x\i ,4 $&N d~+Ʈ,GMW-K ilne0b-^_å9^CQHAMR\`)-$M r狟%ْo]*gbЀdkP XTF{XJd&IP#d  cjxj9) jVwiD(q@ Y,='T6.nqtuK~K|Mb|'gY8aSC;t@LL$I0xEP4- ˥!P5Ps&̉EkL8LN0n Su3y3 4z;+ ?{Ox8XFvP  DfuNվ=_q屜7ljņV@(Z?'"bZxVh7)øCܾ9cv?d>äI3g 3h\2o/둸%Zz_)9bGY 8~F0wF7xFi4#h2Fэn'L| n X(HQ-PDǡ c׫^`7(@VXm0`& !l<%`TVDWHb+ata9!HH ,|恘c8 i:v#RWڜw%E+5E3Guc.;Q&U06G}In^dKI$K _J$4p//+^,74]Bz^C͸@ HA- ) 0B+( rs|a*吅b{Gtw!3)׹ H atK] ˹1VpJV.kPUr<ӹV\Gt`oLC0.邖@  @DQK{MxQ+!Kْ9(xA1-!d@P2~z 'w(myPuTVta5Kk Va6i*z"rdYtR0fN(2!^pCBoź&N:\ZnO06<+Wo dZP D_zS`dVdjo`   _+(!:+Y SwABEF[ .0 \#t2 8bZժ#2nj]0+(8rhaD ur#ވ+to8aM/+_x:`1aԩ4 -)dv q+iO\L@ҽr>+:|D >q~ᇖA@Ú:CWopTa 5tPLFM' G-@@Mэ/IQ7@xù^G(M !n܀0GunG)ALIjt`D`^8Tuq0`?O155u! fY vlRXC?@xQlRBA bE (CtA;itW%\6 Z"DEzH۳I 0ݩJX1V~:U-hLdAԡ\!.,*P +c,/8ntݠx2@]\LAA4% h6v F͛`!R.C@3Q5R؂ZC ؂,P , dAXh "Gb#Da;Ԑ*;K+PCz5:R8\O&iNnEJDUA<U0B~%HMwtNYA ?}5VbA/ )$KTY@!b\(2,jLD!ޗMOcI§`!K@@!$3A<֒ $+bA<A/7x fEMRh_N1AGG\]Ă`A]|'Ԏ;AhC $B[` ITL;eXIR΍l %=$dX}B@i1TfdY aٗD  F " 1u`>mX;,U"L:-mDh*m+%,@Bf=lHX\&m$o&P#(BQȰS|.%,AC7i7]v|Em]B|\1$XHz|.iIGJ%y^@T% PzdfX0*pF5aoY$eYtmkTp(`vE"*2C"2C1VAP5,&DQ湭NB/,  -BG DCV@xō<0 (xCDůrY\Rp{Mȍ5XGĎ`U܉͎pEx~G~]D `fH(ə0Yj!K^ᄲL J oap/E"#y-т-@ 8뫳ؐ62 ,`9*J&뚣(-iSKk43DJAJ~kl!9n0b c~BOx# j4B)x')DzeItIzoϗy[cDJ9l0R2i( *UX8?.*FOT+\& !LzjF ݖB Џ(V KJ\Z;$@G3bcvpH*"+ ]`AdY(ɵ@ $!!>D΁2Q:Z..%HQT> J$Lb!E;t%EwKf b7b+[=Ǡ2raSX80k`O ~OEH)JRPIQ>g<qI#fD5_lgaE/R* &!I"\sp$ *tUsVKpa@ {G !P+ ﰖ2A Q@)409DDDDB p8 bli\H1fh!ư49LQن6uEV[r+E+miJXPȵ{^ ~Ұb:-Ѐ:3Ee+M`U.P&X9-G|7cr=F99 -.@QuFQk vOQSJ(#ǯ.q!ET؉2!Z VƄXE]*c(Hj؎> 01 ,x\ m,|Q QP.F TČpu5v+GR2ȏjeȴ l F 1mb;E]5DXBP%{ k 01ۺ k?\sWL2TGgqwT;zcvA *Q9 2g^dL2i,AӐ6h[L }Q"QFo z-;$x(u`Xf0`ӟB6@P+3^ `oHr C)L"ڐ =(8A9h̝*;v?*tUX 0;/ e<@Kd$0It! "(}I,8Jrn|*Z$p([_g QYKMKe*`Z+Y%cmŐ"!{ 'V0@0K $".%)\ƃbB,Ai Df\#~%;-l?֠0  \,;UƳm0op0D[t XH$ @\ωր D"\ @% be4\ TN<k0HƉ!"@$%ځ|A@$R/%s6Az S  mDbL p }#P)bI @aǞ! 0Ί|ȇ oD{Lc.)Ʈ|J ET#D ǧ<WI)N Nb!dRd@9XhTN0oRT 0?r(T*"aGEbڡ ,1%n?/T`q@렢2!\\"*Vl8J?b)&gjbŽV>a ,j Q(Zu.KLF#a'1ħd )%&?Cv%%>bUsh,!Rmh肐6Z &5Z6zl9no!oD !R)TU2A.=$Do: M  sԄ[S1@ *$ӊH$0%\3|)gJƃև!c z4i6JfB52rhK3)S+Jr,6Hڐ3X2&ۏ6N 0;h ;y =0<3"v> 9 zjfT8ǩ;`1? Br r>*貒T &T(3X[ցVPA0 Et[@$A$@dTFSE',rJ3[h#>AxP)$Bg@X<6%Pƕ'u$d0h|BfGj%N#~aɃ05%#6)BI;Kd(DB,!PfbuaKoiL xz;~l!65W >Uv>ffiBQ@ʖ >rb/뱀5X& .@$B~%r\(')b6\ Ȫ:x#g0 l|,a#KqK.;?#,ĔuNwiRN`  f'A (bRmSCzzW TPMݐR{/؍QȪ(ց`" V@$W~aV 5&F_br`&63(3.ՀĊX]ȃNs9rC}H)Lď${b|%] ltxH8N JlN0j`U0*"Px h ! fFA@DŽ7?NAÒJUWUSP$n8G9 9M$֑`tTkc'0~/Vbo`c$ aդ5nhBH$$Hu~4P+`c JfMOSLx5:|΋K,8#͖ O[` XN`!c?6Xnr7;EhJs׺Pz!%b RB `b.EA$iMB;ڴ]DU"VTRꠉn,'NN0D2b2l`4wlK̚FëcΏ38UJ.Hߴ׎KܦĞ4;B4n B84^!/:0h'^(H A9hsA;b(lL5i*X#A 9N$nk1%L Y@N1S"2EBA$\'+~m ƂLb,)ew@2ZהwЂzd$ |n;dN$`.A362:aN(X;`)JJi|^ؖ턬PIȇgV­QvY.J$,+pϋU% U&\ >oݴkXna{;D@ tq:zB gA$PY:LX,%AwT"2+qSB b)J/v();UBzHHd;ONSm0Ǝb`5cL|I #qyx0L2Ď/̳|80o&5.DΤELLʒ@€C i $|6TX!?1i @@;2Sˬ7Db(A `9JΡ~,j\%@%\`ӺRmhCC ϢU6F0`5 8 D"3M'>E P!%` > A$s`1V%"~ b)F,z1b+#F\b#Fvh̖rJV&|yZwd<20KsFYhd"o ͙H6;j9}l.<`rnp`ljd,K)^d#*0 hEF~6盭,}B#g`pY?9n$V=Ǩ/a[ SLAaʱ7Oך*Ȑ]ܽ{yij%7āSN +D`@Dp$0ۻ?9qJ/@r {~@,C Z$ PBGTC%]Ja RT44e$YGXa'5Se}X`< 5z}c4@S@EMĆN$ĺ*bd5GXYkaK^jH@=DsiB\raIDA ✐$IJ.Xf@ x3e1*"ZΔ[9bnRu$TxDn^QyRU\l"VV F0eIMId1?,:v 7ܰĠ&2K J(? .` uXk09Lױm-/ƧUFjpXSũ}p«ϼ .YRw  l/.8@"<`)\ԦGL!bdhN [raU[q3F8')'Bv%H@fYF{?=`eEYYU&u{Na#<3E2+L`dVLϖ%,! 2 J(2 l$! a%v Y̠$k.% g&9 {C7BmpÂq+ ?2s X+`* 1X:cBgr`H/r+'tКV{& un0 V4>aSWd'.$Ї:He%,q7e.qw`{!dGu$YXVI>-&` W@ %(gC1pP:`xK^եg+!G =R` WhQv1X3 Z<qIT6PD}O/FNm!.拓7Xz!7' |8"u˧1 Up @f4AZ[BW#%*T1;nŧ 4mI k?j~GKo!%3%oubgb (`.jqxd $l'"u H&&r>bk bW1V!A @cc9y놃 ؀XT p(Dd We[spZA)^ m 0L)qb[up} 4@ \NIԆqDgsR3}ptP - `Go$a#;MR#$͖/bkaAPbabDa\G2$lG%l7uVvA5&#:K\qw%vg<%[%c&C>tM=_sa?-3;s(Y M'LN>M?T( @d`|N HZ]63Z(q7*X ognp:-g^_p #P ސ:sbS9 Sp 2! FEJۃ#Xr0lYHx%N# J*v4HLA" 8!mi!Gr> #aSk)@N$# '>' aDzm# ATYP7%ZRZ)50*C{3{(I}D 뗚@g 0\b Y7ES e, U9ɵgG8:Tl3Ĩ>{g!_2!Hl|B avmr#@%@\euc&oC$PϸЫDP"Wَ$4`ebVp*"`0A r+I:~7\ aS*BzB0  orFTlZaWY#Ulffm> 1hW1ÂܕUQdbkmX/!(϶;$e7ib9 Bu"ސt.s=-acX7pC #%3Ǣ/:O*'* ]$fUm3}[#ȓS p5}g,Ň pRA~4E^ B!+ 3"1dGHãgqj!.?Ah*3bve?;#s f$hI j=|jі@x12[k]$\&>+Qq "8;]q#v5,n PPuP#$6!*$6R┽a)[6*I  bU vv}?.| z֚DnC9~}B}Q aQjJejC< U水s|W0mf1 CAWe { _)3Vv>}1 0C!$.omT=P <0 5+07jg#ж# a }+EDBD fb!^0T21$CLO @FY p >EnElc^*--DRpqNiV&%ғstr"ߦ Y` ?)_`!)#pNx^ kVkKam0Ā|!-.hk 0@q8/P$Y fsL{^ sLB`6 M{0> upQ`p`pl D` ~PLꆅ5 @@ DPB >!(XqRXyV$'hJ9߾$V-\`3kpD`lvVT(0`ߌ4`e 9+̙R9椐*w bZňK9U,VKL6lzjNI9‰:'8phN*ZD+ř/}<*3fKWȐi}Z'>JZ& BFh4 "@!B d`Q&|GaH**$"(iذ T܉'.% K Z)H[dK``rVk/ 8bKizl1JZ2∸«ͯ+0gڒ>yψ$7ZƒoڒF-pm92T.onCgx#$;]a!|+U/Yc]eU[:>)'aCK޸2p2/@)DCh[oBI@Ye0P| w:.ik'xKZkEdXIrFӪ͈TKผ `#4J.ͷ ޡ˅I i)4+J#Ref+ %fψ\8k7 KpoGJ]I2M $yZ=cU_Y{;t񵱖{a`lZ>螂)s@>g,U8#yP[\4NI뢑V Gc3E1DScV>㦌 ߕ'K+'prǷ#:.iaivʹ(Svy'|ş؀zM=GK@vCkNW #ڙh!0CIU }qB/ V3PB))XC&7 3 Qe@H V~ Y(1 Rs 1tGY%%)+YPVԚ((RSPD1^Urt%\ϓ= H4ۉ]b%+DHT $W8~ ($0ƉVya4RdixyMN_@+>a 0|=zcLڕJwnT#NImQf) L]*0.))UJB1J8(Xm<K8G$Mq.WhBS;3qPa8C,fq95;I o,b]k> " "dK Ȼ([ U2鰌6W=2L B!Μf)pb'ciChX {(JMGMb Fc9Hѵ4F] ~F4Nx~II;yI}SZ\hX3vp]=eVg'H˱q*nf9r+"b68/Cpyadq Tc7p &H h.wiPBhs +xgpc1 $A,a #f=Dӡʛ&X&M%8VKd̅Ƽ6)*qAZjRԳl\Wq^ PPpl_Ny*C,ӳO,%uJhC3\a@j&aPR 1. 0Ȃ+|3[ =-4([ hޒUبU:H*.K@ I=$7C)?!HkqQ>Ic yOhZ_5P:eH@''pW 7賲p8_ pRdT_pA•ob5M\,Qx B0{BS{=`nY)r)c貅G @( 7(bXH =BE#([A(@VC+Fh)Dڰ3<UB;j jØ,::U:P@E%_ OgP7Bht*;hPASjs ,áY P1u,.|K/Bu8GS|p`y"/BTKG8M‚x1b9b kؤa9  ߡ $Ds"49@ŀV.D#CX` 8ə P7ĵ$@E-qPe ]7:7:p( @KAg+1)PA F<'Op KX 1bG,"X&Ѐu"9|qLB4pqM@`(/Xo "J0- ! Ә QUJ@јa⊘Hq1!N r)8q$F)OvÆІ%p@\-E^xE;І0,@Uq,0V5g us"_5<^=3M@ ·.(+ Q@THQ(C (8 8‹%G&9BpI`| 8j < EԸ!Ӓ(kCqI ѰFlS%X;#⣨,i1)T䂼bQOFE 0?IEÅOFjFn:rgKZf31PTAZ7z[;VtBV3ļu83 22@9@؁eo"z6s!#qv0MؠD!,Abb@4۳N`0;&Z<݉ ~ $C>93W^_XPk*ӕX›‚8j̕5cZKf39[1{ w834VM؄.WMMd6a,(!( ыRa5``P/`8-px胞Pݕ±1Vb .<%h1QԸ.9pٵ 8 [`3CqX+&@TNu F BZBa%yJ>#OZt@͎*fcPZXQ&e ]#Qd=@ȇ\-hck("f>sčj&01rA.Q 9i+Bc?JI؊D@%)ܹ:v[ !48.Q* tң =c0 Ƞ5UXOSu1@b3xm(iD>yZA'ZAsM>9=BP8؂ XzB.D2WH6p_Dp' . 1!XP*No$(Mx(>hBxL%ё C) A0Y6Z꒥h Wp {;ƅLY뽵[@Ɔb0E!w C1 hti&MY> L?FZW[MO5uA,MH(W6pg"z-Dc~pr( x1:3mczU;cOc8>xG։e ervބ.9a)>/ّpIqv6 (bB{.XX9 >3(u@P(U-0nT00d`3.7Pk*!I cZ h[ED^x;9pp#"k,,FG}H(l"u0"L-RBhBQx*zpp'mP9N9G'fa~gO`I3m#Б)2,bIS* PYP y  ֠xAns(BnUj {( Q~$s;tط<cT(#M\)oYCOup$HYKexy p'M#~h4 8!ȇ.(,ò 3_|*Pi v9s Lҥ#`f7#F&huO(JdCNjXqH`FX\v$Ĉ0I$ (P&d##0'd4Wgϖc1b՜N!|cOtfLKWI&B@Υop83̨k҃cs@NYKH7`[h@0jFH֢ز&-.!(}:֯cϮQ}<C|KGPx!*+e9 Œ@Nd ZB-!4H% ߄ĒEd$Rs 07@ YHʡ00!M<ĆN@ <$$cOPsZoՖSXfQvi'c"G|L~F KaMXހqDFHy&_kiad$HԎMDŽ l{X@v%+{V*| HYA uaXAǁ+E/tA/A)XҾEDзfPDɁr]RRI'Vm(lHGi GAQ%}ڄ@:dK?uPG|c]%7Sq'P'I1J5]!mYh`3 avvg$,J θAyJ $xCKtq- Z`Q"&XBիdQN@n^<%y;a 4a-nbA7'-,< cT0n7fsb+Oq'!d.r,Eha`"+^Z NIE"љz#eCa65 j0hhKx Aq$a;A`؊oz{FNr8*'d̷RuYq&oYPX90 RD- L4#먈JD$` ܍р&+R"imT- hqDDtGp 'x RvH#89'-6K%Ӣ>zrvB^Ґ_," +‘2+3x[3t K$(%qMF`j`xn_ɞ Ve(1\e,9 rH1 teQ;L aB>ӡ|Cߤ! U߀TIdұDJ6NjusYC|[a6o됡MO!E".Uf| ﺁ"|JAЂ"TԡHE>q%7D[П-n]Rb(o.xl¯7j┚xu3Jt *C}N& M3L=fSEA[LmI7dAKևt(XôP޼y_b<Bèd BtoCHC}_U%!%4+KGAٰ!!0T!%Y *|f+朌 KHl2V"CFumH&Y'npuu,XbEqRY״1tظBe@ =}(|[*@D;AptJ@ Gj C)ȀxC(7@@Hő χ|CmAAQeʃ@ KYQMHD[5X BTAs\BT)YBYzMS~H( IBIЅա hX<-!tq`X0A4R%@]Cɇ#>;)t%vK!78S"L0C,5! Сܜ<ԚCqľXEEF[!B7|]8 o]Y hHP$bBD#eBaL+ 5 SX8dQupRDq> Z&-CH Z[SNɆdu 8hA ؔ\žI@-Plǡq@FJK sIW$hD0~YB NEDu@A(1Z ZxlIGj0 hyUFO-WYj0œDA5Ǡa4SQDC-\JXDp„=aBBX߆h̝LH0lfNVYa(dfTD(܀9 B<"J-ОR`g+ &obէ}b/"Xt@e&D[I 0bX+$@q_D v|J>t0$Dq iڷȅ(hx ľЏւD(*SHa@p1(ȅ(YYK>ƚp1XEA"$B18.XEq0Q:H- %L\*C%?'/XQd)L*A` , C#2Y M!opC `Q`VrF500jAASASg(ިr euуH3DǖSA EFND1^Qr3lgI":S+Q*DBcR+6v+AB,Ԭ.,Aj/Ӛ8R(m2!HGX"(Q>\lJ*؆AS윈vAR}Nxz ZQC(dlZI"7N|sQ 4A5@]D 2f:rAxCYؤ:C+l뭼2%@BG6-,z0`(M%` >th w8Aԃj@2n7`X p!(@ ȁ,< ѰfS \mP7Blwz:p w1@ m~r:;(1#xީG hٌ#_ə䟪nB(A>6R<}/x A>j5`t8$Ko Jjw4S-h@E-7Gc'#2 htL&xCdaR^64DVAĝ~'dB&S5~HAtL0ҳ7bc(Q-g1S1~! AX>˳daR(q!5.D83P@mO:3?C$L̈D!<*=z@}`A`褲B ` > @He 0-K)6g-C1fԸcGtZ$O9 ,B(&0ƶ* x1/\pH)Do~:Ro-O>8ң^>Z湑!)1Gq=H"= &W67{hmwCnpckCx" @,ڱXr0,!l+96K!0zL+i&3KVTS*9OpN`O'2k$to>G`  H”BMrS7=wMV>(Ҿ9* ܁*j [ [m+Br c'іhDj~$)NȌ1kaM mFV6445rՊe vƶ9ȍ3xrY }H,f9 >듊MtH "!in#qY$ l=`%z8 ф&6^Bd$y" LXB)(Krҟ'#ԁu%3U*L{5.l b#h9*ӧ`P d e] vCL@6! 1eB !%59]rO;aLBĭ0lLcb$$#GaEqs%DvhB*UG8ڰ Qw b/ O 1<"z2 Y 0WW#<(˛M#opRLfCd.nH^/81檤阂P #"6:ʣ ⍠MF(Nbc ʡ`#rDcd#LbieJEZ *Ex!j&E|:H! ecր7lW ,gbSL L,#*B\aO,H+qЂ|!l+$jP1B|I]B /!Sf4`ĮO$Т+nP:*/mNmFO*8Ȫe+Gh q\YpHCK"\ "!aACU. I`B , X!XA0P&8™d&N$!b` H.H~TB;)aSNkD1RBO|*IJ;pC.R9n+ iRin%G3BI 8 $fc #>[ !`Blahg!~`^~!r@Ep񎾫1!ra&$DN ˱#>!"NdBitCWH C34Kr,*vG$#F#@@Nl.d"K,ԨRCO&oFfkU)"&L򂨤2ToP/&a9"K&N†:rgRhAN|>FEdhKpfv&5ԓ6BP'*Lf3pn>A &A:B k'!Ed" 2e0wO4B'dr39 4bC"atRa|#+'Ob"+/,Bv . b+ tg-1u/$|dk#8vIG*)..+6R,o3S0H!0T* (>' RG՘$P>S.ra?BL# Ra$a"dA $`p@ 'G$VSwrV9Bb! Hg+!X@vN4֎.;hcIm\.*iLq7G@Yk;8cdIOd 5dcW\-DjndccÆ^#bn4!5nT:ҪM2"4l% jg#'& ,@c4!A.F*!H@Pj~F, zE< #` 0JH˜* # &W>Im4€* `նꯘr T7*cLC+t.dܷoHfW],H+9֍>OLf:^JΤx Bu8_`PNZ #2!ann! d*Shpॖxg`"`ar"C"!Gd EnmH: scT |!⶘dJ՚ #N"< =Qlkq.Δ邆~wIM7*%,ahMy;6\+_J( G0B-Oaز n b$,% w +!0ue/C-@`B f` D5d|u G V"((P;|Z)uh,* j<ꀑ/@j!6_e%GQ8AHC3YKD*".T8Y)M,)7:gf^vx\AN*]R),M>d XdQiR0  (Av6@\@w!4f>a[$*! G99*m ,\e,4r0 ZM@,OmokR-:ۏP%bq5'6SInh4Zck$Z@t%jqs N N袓JS2d "*VA%a(dl:@E6A 6. Ǚ G%~zg: l2dڲNAޡk`KpGJ16I ?,& \!ۙ);qc_]e:7ol9NR5\wrCf ..X50%*UTN~F!ba&#5)Ňm2[94.?[b4;乭򀒽͡IM)Dp^SgպSN vXRԭ+ F=^ @ d`?z&`0&}f "* ~:U4H_0`~.΀-3{?#o Fhɬyu5s+DN-D8S `poJlW|c6dd˓RUH)>F |32o}3X>}R=se" (lb%iGBZL%թá_?(6@580V$z #a'>8@67k:3/'vʁc68s1F]˶۷pq*K.X XY;0‰@9/9ZR9 ̈i9\4,9Õ%j޽M#k9R:vg'<[V? ґK'[YueV^ϞV[`yYCB~FXAlNҰXHlq'kJ9a8ac7t0Q%BLc:ͳ)1x g؂S?FpX eHō\I"ߜd()UΊa87H[@ :8R0BTPYBF r~#ZAFRBrBKo$F1` pEp4Ҧ+=Ԇ1ߤg;tp[k@EzdTzv~Ft| Y3@BAKƳ[h bu Gö:iPPQ@i#9 _8M.;]P2ϸQ:A+֠dN?hU 77bYZȓQ:f7U,a10,CKQ-!8P7uQGpPB@f4zA !DAHp7aĤJq a 0@Qƹ wuyf-rb%r\b˨}Ae7{+|ͧ4lHS)01ܴl {P06 C/NĬQN$3,UN9,K g¶l8WonсSYpPQKY=3O%4&N C #8QЂY8,O!N@ H p+oikNc`$i` cZda[ZHf̡#F[g@pkE(,  A.'FsֈԐtM-l(*zDP w[Q"ЋT4%ÉخߕCb <#A,Q(؋䑶!I` (FK  L927 c[I '9E,EK1:QF6ґ !A׼(2j@ b bs~xZ pL aΆw{dRi'2~_ h#zIR3o l?K57z'k`E daUd9|c@Gp" D!̩]t \rB$J9 9&mD'm2Q..  5W15j(WƂLINii<ѤB4ovu" FFZ gA5: -V8|QHfI&7?sby  %+7> 9c>*T*G*. R , p%qR [lbIOǻJz;PV*'4VD TKn߰V([ ;:rzDکpkvvNc B@ChTÓ7M,(k NlK GDoƘM#4gw6CM䚴АYN@=~0< vTG F.Pr$h(Myq^z#N`D t@/d1p֑yҌjpwXFSGt)(9 7krY<L0@7Xh8atZ[K-t% 7=%45&x9zoZ\ $8$ہY:ZC> [0(n+{Q7hFN-,42 z:. 2[ J8 L!NHZ2Yd,0d 4IkRnO)no#K#Ceio"e; trR@ HB$4E%0a a,`P ' p9 6q)Vb 0p &8 _HGKFGe< fn<! 7$scgCEd}W; #' ;U9P)^>u\>B0 6 ?Itk!|,CuYu926BnopBrPq zb6cSlF  %$ *hN;c8)E$0) H=` ZQ `pBAvGyG !SBOd  ޵ Rctf0 Ş?yiusqFU_U: Eu q8A ` @CM=u}h y}t' 8=9`;n\88 aP;? "p  @t2p kK`D sY-P ¢ C=`@Z`%QB@1CAW+*CpW00:+@])(n"0 FVA:9D p%Z dRF R.tAH;{TcXT[O#סAHoZ pZkQv˧A}yJ}8T{@ 2U";_ذT0 ?9&>TP=DVQ+T'$CKuc'߂xBlTZײ%LSlա2Ob 'akmv P q,8!*k'|B27P 3P> 9  k:$ Y {2ܙbr@a+fU @y heSj yCs1@t@/0 `R;ez9`)/"5)!%qYچxpBM [xƀv[hwv=VMQAsEJ:ڔCx*3D:, '>3*C0@,)2z֐<p9A[dFЛF YRmmB6FG!8R5Qz9$$ { ۺIgUpp$1@@$1zZQdTmPA,PkLS P K_Mu.P 0 :0Kr> PU4* u , %m۶W[$8p Zq'bEv׮ o}MfNkZX'Fɧc8Wn+mH` 2@R,0 ,Q*JMB4 ?sB''C P +2)H$6NXdiNo %Bokr! 2q F=Z=Ϡqk!q,ҫPJ0KC2z7|;2 $2 R03+B'157V,J89N6dKÕ.<VKFڊy+y*}ߠ2}03 p[pH)a,$IXJZ@,Z(M n+uO>- ,XqTbI@dnUN7,lȊ@_'0 BVY ǭX9LS`Rn as#m93e#sT͎jvַo礰\Eۚhkf; #lfȎKlKqٖ,/#Hos yFYjU'U]ӦLZ㑈t9\@e,RQ*Vc ʈ0Q40(9'ĩc+BSlчMA&sq'8r!H*bzgj)Z!DHd"dʁ(^@4Fb(B zaka>&&`whiZijmlEhm ĻD{m9#METPemQG1icL8`-7Z{9:Zn^yCVP>PBmpVΩKv(Eɇ"ee*`Q\H@XqK8q `',4%)GvآVH@,Fp/&1ࡘbnXbD8GH MVe=Oa%78p!AY(S*ńMCee5#O"7b"`hUEf| >miD*L9ޒ290G@<9XZ٪BaŸ'8؈$qA -\ `nHXh@0XI1W~`Gr FM,Izx{GX.J!–6Zud$i8g gYd.H̢@ ⑶ O#ɻ4zH!J#v1 g`S#LFnJ1)id3U9Ψ` ц6zsU-B`F<%o 䃫`.#bA`HV1f Іx t ;?CK!Ua$XEAI!"^ȁ"&c=#Ip'@` ",Q#(TR:ַ> ,6]-V1 tA.=Yh\a,\F{)  C H=-A Mz8 no:!,8[7[yj60Z&4&8; @ᕣZ+Gaux da#FPcz1A؁/fQ aS ¸#Y 1 VE1 b#<\K>Aɪ2|<*8В.T>1&#"pigs$Z- yBOd]** H 7Pp!pV"{HR?<>k(78BU.,|QJ\\NdYU$j$@ϲ% ;Q ES0"UK@y7g[FCIo%mBڴ7r&G tQ̘+>xd`P#p1O`?NQ^H K E(!n[\Nj' B.!C$X6AKWU_ka!>ۃEkHb6xFIjX_ϋ“|;8U7| {R v7ȡ 0 \ rPӟb4Z11kc,r,ljkCWi<8mxP2BNc+@ҩ^Ƥo@%sԡͺA51a+* M L&X[a` tB8H C:$ lp=18$pi[W8JUX%ډ(gx}ӀH`b^@Xx!iq SN8 hoha P1[` `DIx݈/!z"S! !jY ̀"DC,"<[ {:hjp2܊d`EyoK 9AHeeۑ1Xm@A Xܐ78$V \B ؐ ҝi-lKm ajTkkx(Jp6GЉK `5`腧Y: Ha.+0@a@ .:'*h9Y/(iNO@4DsDc c`h Oĭ޻HC k0OK0+qp'&⢘t>/y0`G4 ?HL]*eh0u_Uå : PȞl@(! yp ld ȉu!Zoe\ xZ (Y+ K (@diRaX (Ox!:6 *MZ"H8!e آԘC(Ϡ#,(xC Ȉ'NT>Lۨ,O[ɱIK-GѢF Pg80Ohr|ӫ7SQ0 R2QH)z(SPEbj8R vQ T0qxx#y+ +/ l/Xqv-rx؄,8R.0虋Z,V\@OQ.54R*?$J * SDЅX\y P-݂Yîј I` ''8>xW0b9r!(W?#'hjx V~)^8{ 6vɁCzcm3{hB1(Yj +#iWhp""aFx|, 77*H>1^):4y]Ŝ>E\5<=VMH'XBU Bx(︢83/JGݔ#X[2Ӹ`9ɕVb9hd9exjX.B(Y ~4Q2؈ b/YU JyU*D8I:6~\‹bUl=[=60EQ\ MZ9hR77t*y% 4 :h $# م8톩 үvXqʋr@+qKx(c#p_덒Dq_M']"射O Q$bҼɏ HmH]?@Λ!8 *D`Ȃ7Dov)&c۔y NI(옑.! P* ܑ 5AphDOӅR@[ hRذ< !e@28J SNXP0d8/HC3AnF1`i 2OK6EN!3Nh9jҖx`'-/wrD@Sb*rFЪrQ'T\ r@&5lo JAb4YH!"V0#O06dZOr0XEa}A*`aO8i< ToXDҦ o@ {?ftR葸 m%˫8az!00 ahda٢ dAG[U`izn D{2ـ9`L|8l [)HS*1Vșa{v=yohR xo ߅0-.!`pb+[lkbل~JpFR Xr8G@E}hO/`x2W5gȞ  MH&\&:^}^@n;~=Iw0 Kڈ+V>%.Z⎳ -OM1GzԂx-C9 ={@ P2%pGP{H?yz3|`)Ӂ$8X,># &1PUfpl[mYRlfvyPLmlchѳx PE9E8$v' K}ȅIxjXVX ~&HVK(Е7HIj!!hua(>EsFd MUQjF8@뀍狕KqȮjK_vѵZ5IPI Z H&|腺3 ( %~Y& $imX o#DcXNўYS[,y hg@Tmy16@4 H*;@~Xs˿``drLNI[GqZ:Hsz(U @ KQ`uu# aLZjI$$QJZx \Cp`G/gҬi82b5΁\r^V?e` ͬZL([gn4Е+z@*}9÷τٴ[m"< u`,a0`D4@|LI@P$`$8 h@tY3-^A+LV1"#s|kMcذtd]ΜKW>4PKC+wO:B(т   Q/"'a alxT]-Δo4L5 A|@)Ɠo`P95%irMf֤@U"PWp hO?k 46MJ^nMp<@ a}3or p[(+ I 13 D $ [C@#SYb-йdt19z̪%L%uG$޼~u;SYpO@S/yAcGS9ƁEm:QN#FM@ dox@@$T$G"LJs% 1NA!Jz37MB@cR}<3 33os6'(=w*li!C]Û@c $Ç2o spT`;?LȒE\ 0 @3Pk'<< n F(__5; M X2~11l`N)pѤ#;<K@ 8(!<.Z7@@6" XQ0$FpA!6Qh#a@ %o[].B!]:a@ Ѝ|bpmҪU#R=dp t5Ba I G QXyCJ3؊bE="V80 Ā#L]:0p` t -La(Ki $;."[ h_P*MOp LtL-RA gVCI4h?$Ar.c1n~($M4]7r|8(h$B:0GY@X sF >,<m? EtR*|j"4w0%S$  kT!ك>'_H(4Y1p0* 2!BI5eY&)3$mȢg +,..~,&RT|jl-|\PGRYpCoȢQ$kp8Z D #N HAXi@DMn!䣻ADPz(( -Pf ;b$ $H% Vad BS!LDD9L&nف\2`ŀI !x? Hd!".rQ?6,b$"[4Wfˆ"Å]S_2 @h5|"abN CV/y_$q]0뺀{:\)λ{4 9$@EG9~ mW0)|TN:}D) 0q ٚ$n ,HN-(ajg4nR8j2@P |ɢPDČ.̃Sj <\P3= 4q ޠvD׍Hȅ?|K5 D.+K\ Ɛ7lQ8(C/'@Pb\pl Q_@L$Vܢ5EH!  P(#/1d4@C9ٽD&KL `@ ZBa:m44I*T$Ǵ T@A7|̍Lov%E 4%Ř ق%0PBLJU>&8LNB]jCmtNiMQ%$I܆G͸6#e\Ģ +2B\3 0@PeI@c3B+%VȄ0#(b)L@#K+Li+?Dj^\,nEXLLId l2% 00+LL$KDdP'(@<ߡ!8_q\`0݂K-,IF h 0h(UVC MRB1D^jB86d`Np\ l'(;CT7-S[/`8@ %D( jyjDTB!A$A)*@S0P?pp1 c:I0@I+FWDM+L \Ymy1?j֊T.q/!B8Mb@LJ90L,(`[2#dyELw|3\dQHXemhL. (>c"3aa`!JcIo -{82+B+GvAS$(LGDBmuA C5;A-Ԃ-d)I7TC}0 j4HMD-`*@ȁd3#B*̮ht!E90i8]A4?0`2 5pNgqݪ@ 3[B^d`=cL@€%d5xX_0Ng  (7DTHS(ѕ6$A1|@ H$IO9F܊i%Д>@-PbT,6o!M@9*@D`DF`0phC1IVR\Lh]@@0 4p.Gq^AI>VXK Ssedxy)BtBH@D)@%;HD,hQp: 0ʕIL1h D-hoBȁ @(4(0..0B90R\A9+lF0@j̽@7̎\TZšu 0F")e%b1P@IN,`ww77$DGXwx}̹q`@9B [ mD9H#2XZB9Q9p”X*9Jс Bvu<$>@a_L``(y;J9?HS 1,@A)ф7C9C@u@˳FN d0Ac*dP9@<22̥)QH֫LxV@! @q #)VxcF9vq0W2bx ռyp0a@`EPjXNT#XAa1© \HSQ\7(`8x$بUM9q2 ?DOXa D\=C0Tr0C/$$&0% U?Qݧ<U,ǩjw_uJlEi;;Z \]6b~?,r>{|ktF0J)kBhc8IR:F`z^Xg881 (4)* -V+8 H .RF (-}h/" ! . fp&*. ]A.ʴ0)P[rhLŗ+ b9L/o( OrK [zCFP lRd<" WØd4`3 ^}h(O8B\%(0PXÆ hE+!FA y 8QZ@h·(AZ̨ h<(! B?c`ıM *5"0c`vXb,e2>ay p)vX卙b&Fgm++XLb7aD_3#!HYh p >;V(_ 8aR0:5g.0jT@d P@\dYs$laZBj[(gB\v]zz$vW*D0PC愞?Y)S Nx WdUDNb0׻I>$bgihPKBvD 7$&XAQ 4 fM#<~ LΨ ` R8iU( Nmckď" c`f  *tE̎"jC#b. , RhELV ?q#D>6j"Zk5E0 8`f h&`Q>zFɟh3ܮ€C"8_ 0<0#"L,-\`0a'f.t(l2h c\@(,(v|$|( @~A2|"h;,@?fd6.em6 4lAf`~`<: 5!]8h!  NRN0c%#/ &`bi͔0j#g( 1f@5f#Tc`ܢ-j䮐 &<~.4ؤ$n' / P?! @Ad8$%7!f! "f$lC\nXve"c"d)6"# bH#@\.a R`<(ߠaLjC as.ZF LJAѾ h *!RF  J"AzV`Hoڦ ۠mPoӎYņńLB" xa bv-b|a%Azڠ,ԛf` tA5ʦ t%X0 ]@+GlFW`- B1hl`T%X"vTT$JdTVaN5`[ i e(*g)@l3p 3@"@)퀛K?kl]l&qk(dZ,/pIyj& mjH`lJy0m; FDN2 l.a !vWBV5DBnWj @C|2ŠIS"@ #$`.J@搡`B`b|" e3tn#&( P6 àNB$@ @mࡅȂ"4 s VA~kF2?+T8"`z5D l"A eZ\K H 0C(pT nb^f #HyV"IԖ[5Y rS fQ"3[EaZ 8` #'7 `&nnJU΀@ )$BH>7y\muj Ayb&fj2X^ -X\@,a@e@7=a{ H1` :9A$VO"8A#Š أ[0 ) ’])} j&2Z{;9@Ke%g L, Q1*e`zAɒm2`aye]*DQ cX#C1N"X0N I1AVJ> 6=a[ cތƏ@6a'2# }o;zQC6m`sқ VbNz!V20hx6{s bExzl]1 t* fEb @H`*pkY>4#rMX.C5DʹJYF³0@h/dEmZb{*&/B !"AyHg=ja5= (Vm^6j-ۃ!\ )lm`~\m0 f(&X $dpr NBeHsܣ|!T)B?.jԦ|Bߘ "$008p.901\u:Fqɕ%mE,BDp9"m)h-[@#[K2Z5֭L`0#s >ފ% @9-.ЊD'3*^ulY `d>٤@ W_ـw"7$d}'B ͛olj{ 7ap`MňY̑ӏ"zASڴ3#\c"*\'b*|c,Z"j,@ J$3`PEF>r}i%F`T `5a ȡtVHe%bR^3' ٕq)FbCTݫ- Vb 7I)y'+ڰd[`/3$L7)P\bKb׌#K6_`lBb 4V^m|.!N"|r&` *0DbzaFwUbz(|8U؄6 <<<?Rd)7.5+a56QH")+^P`0d 'X'E d0+ykXbG4" %l1CP<8uN|cH#HY|d14XS@ЍU) !q 0P`7dNtGdRiQa|Ĉ Mh"F":q&/tnb=M p$6 A( JF΁‡xoa%g@WQґ^)e)JYVÊ`]6 LX2;b4#X38 |XӦQԅIӂz\!"3(nDKસ7iSև {+;rE4q N.rѽE"8Ff Hy'oa)QH0(LMy3C29$^e#i4Ϙ?83FUtSP|lچMQkJ:x#SBD^^a >tU b&ࡘ.*r" C@L$dQs@IPb0 J da@m D y`"6A j@Za 6a P`V.|styR !A@ze^ ` mP@@*p G` `M9RqI `JX FzD6 P ag^0L#a`:!? B2Y {  $D@mU! '2|d8A2!xQ1YV Q 0"QPO| YьUqg; ϠF=Q\H0`sh p^0|1 Q8>B_< <`qŐ|w`S׷e ?!b)gp PqgwL$^ ]]"rPsI`Y`~1aq Cp awĖ)>t&%hgG[D0 3 pp#"mYIZRs/&zJ, :a pf]q) E Gڐ'|m `G @Ka 0 0r %Pop PeVfTvldg 'R%3Mu9%C v12p :ap b0d'Lɤ7)E\kVC9'm)UAXq%!Ȃ N@ /ppdmPg!$9uqxZ@ 3~u` @f`1>1l@QyY  G jP61* k#]?DZPJK`^a@b9,R"e*R . KQFƦePNPwjY" ]d ̤76c?L$iEŁ.C^U (f W1% F)A_A&;'``"P ]p p&2Sk  CZ4`87}C% zЮms+q  v &bĀ =np?%~0 i2 p0l Ħ` e% a+t:LDư _Q;p+sEg/"@_P<R/+TlBuPR&,)(q I=@ #@ћM\q bSDN@ !Eq0W1@d1 @bp A/9 0c K2>`wR^\ }p k À\a^gɰmD` ʠ0  bG6>&wm1ከ @C~{AT!\)W!&qIN ` bOpD3֣3h y 5ty)zyv3PD"&Ps` )B\r`)@;r cxP072C %aZzRHW ,j^xtR7<9p 1#b>X: ^ qiɰ 6  +'Lhu{m0OC"73sP;ybc<ƔT<eR#TEW&`91 +~hbq+mrAr,1 Q~C 'p<4p2&,qP 2,I$- 'tL.q(1)!0 h9 [,E ڧ݌,DL+T5 ugD!D3d~:/_,2=I!,PHd5L o@ )r ` PsP[1kăQiT kRֵ! G&>m {f` )pl9#Gl ԖeYm'}7U`0 ] @ Y R:'($|`wy'qm>G0܀[C FըCqP_1#N Huv&aʮpmP5R `r {Pٯ Z2t1W 9έ 51u PXQ !DFL/ tPm@wQup)J`0iEs$pr! kZ&$^8^ ዓ!L UA1cfoZ 'lZr DX0 -`3j! 21kv;.T jzoKw]i0[d~0",CG`o`yQ A$`󑡴dG %b @fͲ'TH+!>!1p133;>L۹ " opg7`P}tVA~)ȱZ$01K,tL(3{WpeA od$'+(-xOuBtP`Uu IAz]$kJ(PHVpѣM ^$z@e\)XNT*0Par' G 4lqO=a EGl!0gNP~J mPnym$V ޗ ] ,`V] }E˺ GCɾ~Bzc0O%$7k`M?=#%r\ -/2 R‘2$-,DdIO 48d@O2dc TM &XMVUU] Q6K$!.9`7pu^{Ɲ KP(RB,hbuhR trUAbdgZqdugE)| SG$@7:l[@@4 S+k#P,_VY.%UoD_zF1vC[v&zI+ǝ`P(.hQU$hܣRCZdY*pBvmuڋzx.lFH6iD,@ V(åπ ̖fBkZ&9kNwp+^V-N3dlV]Kv!ENb)nW;QA/x^0W5xm7[ P܎apq5)}3pu.7@PEۚngs] 'u2b'ON*,(./l(#I Cka39qLvZ^pښMNZ|"Ro.XdXmy=ۼ ߺ\k% -)H[ B1ӃDqhc 6̒b 6%w@fPK4l5!o 13 r^2a}D'CO7È !7{3Dh {p (6%C='=V'`͔V n16wkÁ['Va1Ű~>4;ڗ`7@~ THQ&Q%usVz8lUϐeQXAT3}m@ /"^r&"Fs2[keF@6G;:a=Isex6W@P,C=Q%1# 5XvpDu1=5q~K*9-HD~%Ft0U`JyͷXeZV@nuuNX0åuB}g[5qzX H7 d7 Mp2[dUdL1x H/ P@  )gz(y&yauYAYZaa<6t|\HTUVd~Ք"Hw7r<(=EϐzGEz2z<7acK~ 3J^1ف&C~AvPo6dWsByZfUQB_GB=z'q78'lt<$oCGlp r`&W[Fw1ToɔLtL$op'0w;YS 3^HDxyZfŔ&N36]MqFjyUG&or` PLEق7[jXQz RLdP` {OJ@^ 5{GMduX2o|U*5%Di3D}Ud^olp1,;.lv f0Ufh`ԓ&cLi PHCh/3 *P3Ar~s kn&ijoVG$N䔐e(ZUo0=]grp  sȲ;MpDUmDsb$q}/ H^ 5 02:2i5ZPR&QAH'ώ AH N6Vwŋ(.Ġ6h s{eDmH)wi 3Nʺ}` P,ðGAEN/ 9r"䊢 ] 8]!yW|}9Ƃ uKD&SM ,E0ݤ%{p:෠oEarYP@ d&!9s_X}l`MA9Rw PB|:{l.!9P]YWȱD&oXMub I7u kmV{!@7Q}56`M~LGS1H6Qzp.< pl W>13MeT{9 ~~;LO]Hce8zG'k`7 zsd@hb])y@OD+%",CK/,JCj0x.5G)Vh)/h,lфM#>!3$Z b2BN0=c{I_)Z`TfF!h.J1C7ckLL2S%!uGmDnq 3"FJ; ; P5V3={Y x587(#K>ι\9*hmҤ͗M#H (2a&*P+"oojFkK߫ .]k3h14 .trK])l;I VWF*ӂ"I )ƺrKJVVx e z#Y[kK"(sIn @Mp"|zC@ce%"aȆ8e.\QH´:El[Kٸfd Ux@~$AgVXVDP/(B|ygʖF\Qooh70<{&:tdIa01a$kLT " cUzc=H,kE uD,"ߢr@c< ҷ4Xd..2"ze$;@ 7 π jiK0 .JTMl2|{sĐDIqvԠE3d -rQ]KK 8UGpC;W-" c,AIaQX1*t4Q-SSr\p(r)$ۄ\D0H2|i@Fj3L }F0GH WJ.tKU4#OF/o `:#˘&E_rolCS-®{sm! a ! ]gY Op_+º ‚1 ] \i 'S'j%t+]MºAR (IhC.tC"2K ߐV{F0TB]/岐Df2P@45KƸ;C a+t [.ҲIni*jዄΕA l˒QU"ss1k6RT , 0iذL(`D$$ils)R2#Ѕf^س"{6@osи: So.pG*{L}2I'4#E~lijbW-ŰP:Z;A ~8-s0xx:HZHB>Kr@{[QPKQpRqbA;Y[ @18ՙP TZ1Hy9!2G]X$:PEÅ1b{g#-D $Lôb0>&>'1( N h .܁#:r;5CKp򃊐 oxCpRVp}HĔ94#@*E T28 l,!0HL)q09†j>[x{>Eb%UC0[' (6p)fZ؁eِr8X5S55P;px' 0dcJ ѠG,3=]%X I"zBQj!I $mZߙR$$XOX@Xn27P0x^ )%Q.9XfbᢨMW؆m(Ȳ%6i: 25*CH " bHPaq ! %A 8P?԰k -LZD`}@;K,YF"U}U2sjUUepWeb$a m aAٜw+ &Zg aSKVn @%ax h X s=/{I"7]sH+,O2YٌF< ^UbY?8 ^ЃX^Q/H)1H)ԙzď1Mi{@`˚7Pj /b Ub0 ,9 g ^cS~M,,,g8:H78dzSEdXpz]!pm< r@հɘM@^Y0G) I͋Ղxㅠ{i Ђb$bQFXȀ UeX&pYKMT3@(Zr R bo8gK,@ x .۲-cT"9"O B(t2+I! ?A%5ѨXQu#NV98C!Pa'XHWq\<䞄a$U]Ѕ^ЅDhj2• gf)0ڃ=n[*9s?Xo9TFG2WEp4J>@d57]#NHJӣAUoa 6{$(9:9Yhb FP`ۅ!mᖅON@qqsqVp4`tЅHܳ@Y_ -܁[5k6_3 jpe!g?ajxps6e0y2cS0]Ռt \@X$V/"I3}\uȅ !K{Few :ϚOy8W`$8r@P^xN@!ny\n}OVdG$QRz\K>hnkmⲆh^M7&!w?S!f#^Z/QDZ?1ĆYa'B7x;=s!=T>o؜e|'OwJcwݶd IUoMyЁXha]]0zQi_֣ HW@X3:||QqgxȂ~xҜ"gZHRkiHp.w{>D jsb „ 2lPˤI1@ l A^"ya„?7.qb륐1Px3Pٱs%XS ƪI,'N\T:W j+V+B h$-9}V-6 u Ý 0,(QINb9 L\-4ƪKe $- b7-)犝sY:`e1f#lu Klj\r˒(8;76,lDBXP?pPt x.t 7S ?pCM8E^O<$"1u6zJf1bS؈y V Vh5|f@z,aʬ"N\uU`+ t:T5 b0ռcقP(|@]iI,Himp Bz (I0*$%)CZ~h~;[nʋԤ.7$L@0L8da,NA:IU p%@r./@@Wʈ #,^!]`dhr2 VVK⋕h.y`TZ>Bv!a6qbP99/Q 0IB1%a%E#Dd5]/$ 7ڪ JL2+e跀SQ,Q VP7'J 5lJ/lṰ|7Bp.֋M0;`¿˳IX!L,Z+31=vWuiWVԜO2O(jsR7 o@a54tB #diD!1ARA}0XŠlHқV nZLHA ơu!=eC"o1PMBtߐC+ .0YV`Xv qYB/ k[Y$%u01߫ y.aRZ1@j  oN6I 6vA8h 13Kkj?U>0B+,ao\sˆ@kJ0B~"Hl, ~[ 0C\$H ,\Xr0?`C>a 0"9Ka,\ݔ0։.w6sEz[Y-FB<>rI;  2Zhj$YȔAT2$(F$-_!#pڸ!vcA-#<ڜp o$$ W@YbU@ >&#\p,O=O[(DE 0dD9?7"ˆtr:o X,^""\8.D`#%T,3H-1샀pQ4B`D> :Ё@,#ҁdZ+.Xe,KC<HbSh(.(TW 5I%E8B q UoF T@!S`}ppY @HɈ=+}<@-)hOjcO\s7pDsbo@^ E,3fR͠2憐0b1c !^%x)6J@؅(7x\BL4#@ .{ի N@aBB#*" 7)0j c֧EiְRkarp?K=0S@Ys k-*U:LKJPͣ;K |Mup)0% Ef '͈z%VQPi;HЂ⮋D0hdE+WUx)$A+IB/QhУܳ?L7F=lW\P0\FIk‹D"2 F峟1`\)F"Ɠn mw B>X *J–V428{5F|Daj"H x `*?:3ܟvO7nM\7Xb"B[J/WK@@؍˫ZkF=Љ9vPs]_"cF$*K[\H@ G=j ʨ^zĢ O$0>$E ,P֔pRa}$]! U! ĈLM Dq`=yZ~8]ÌD݀?͈XtT`LHUЋȽTnJDK`LQ8A 8@B Q \Zz#G!۸ F6I+L@@ ؂-*IAdRY5-&1AlP=BX *(]u >I D2M~( h]V,A'A-hG ^R',6WZ$ XV؈hBTVdZ^4*?!)̎l+( dV\D ?GP?DŌ`M U0$*ޘ)-|oSi-$@`T$%&ī(Ԛ C0) 9~*ߩKdi%*:C+(XrUARyZ1Q}f$B^?f#@ dEZAQN7LQVy.× b.0B ׊`X^eq?6P BD !0[@JQ)u-^ҠKh*a$JW }|ì xɖQB*X]V*rdVqf\$.DQ+"fA=NdA/PDhWc"6TCnN ruZD# a%\qђ(d:U,& JHIWE5PNDjdK 1$+HDĘjʡ%)160)i%|bGŚ U?8JfXBՌh^nME%|CA,E!7R*JϙՍ٧]`.RQ%0Rt\eda #C9ʐ4ȗ HdZ(f  H Dru@;b&AIKo½ХP7˶GH1iL!աf) %PG V]dRLI)҂0=H@>Z@H *{ P>,a`g%SҡQޜYharx-Pe]G~6-LtWC TH/J%8(B][c? dbep\We, t^7ME5(-k 1ĄA}t CLUe]dNb%!0hr4BQO&GY^B$2Ԋ?OQ:l|h5 6쥖nB\Ulj&@쬇֙GY, BÙ@ɞ聋;IZ<_!&DAU0*eQGu 1{X##ؒxiBB4SBO٧iFrdD+#XB>s]VX])= |+ĚW59/$D>TP%Ćc,Kdk,AW* iqP8nir xA30 ~tk1'Ci@]݀7  +1|UU DoQoa(耂̚eA ƕЋe 3%PU@ӷi!a,]RprZI_J!pP @ԴMP\;'xK֬9F#gv 5$pԈah՝)rZ+4k;31)u%P! 5D#$DWD4`fƽ, MA>\ +0, AqqcGA i$ %g%P@]Pt;0`eAD =YBP;%D7BxW.3ݫq'@%Al)hGK#Ēr DzCQ93XQ]ѠXrP됎CeparK+4_jd< #HP <\>fh@$_tIH\q>HthHT8pn`C1;< >|괮R'-P듈8_`@`-<1]( @B 6tbD):K- $R1Fx>QH79.1bdO.a%v@q9rZӄO8Xssz9"jbSZ;),Zѝ`;.jlp_ [RD 7@V-Lw]JH$7%?jpѦ&.8qI|No.Frm ,yϼ9qYga)V mq@#R@ZY¶RU\7cE^z@b֠%7U@z%)P2!<Qy'5bZ0yK;\(j0G&9& ZqH㛬+~Jk c@(, oؘcRKZ:CZi) G77QxKn$ pG6\ڭFlnt3Vqn(-(0x@gyte> cr'K`D`mكX/>lë> IGYś:>EQXqp!B\G! ڹ'zL!.F'OV.pY;lxXʪ2ʖ&\')2VcKcHȈVʄJLR ,'0l䦞(\9r i۲`M#9RF0x160M)3f@@.o@ t bPtD('y/-9W`a>d2=d7ohEZKbT$@}v2' z1i{80pax8o ~X#LolٶjkKJ=[H!Ȼf&(i~:"a` |&:p`*7YQL|ЀLUa ~J xD,dyfxx ]pHs`^ CdZX,. 8`<(41BT;g5L!8ꤣ49]5.vy|28!3EJr|x`8м0HfyׄPcyK%:v 5l#l̀MR`eXaSjf1Ղ6 &˲0` "I+\Q&DKG7OPĀ`0x! 01&хIjEu$,{H- )m@.rPyk@FF{No* I)V" YG 58 İ<"PEC052 xC-SQF0 $YM:BEN%1̡:%bY(;OBe?ʕ˜>W'm[,Gpp22&A 0.wŔ(E`X2PFcKRS̃` }z@I d0Ult X : T"$-. PAR ȥtCG <YtJn cKj20Mk:J2$G .B'`{)Xh+,!%vvo LD%5Y$.PITGQܹf/'.sUe#RQ&&}R,,i<|D,`oY`^!P:̂nE@+5CCp<`-bCNOyJ>*-` lGðȢ'eI bu<G&2Ex`V+[4l,),`ʑyE"$$-gq?*`HH" |Pu3P'WhIy avʌ@:a #'Q"^C,Fg /٢ 0|bߖRt'aI^  8;j{ 2!;MH 01 (? N@Uha &"IuBS le#&'+m,,e)BzkOvMdVU\`2y"I5eOn 713>됅~ی|2y@b ؜x@JʮMPF+h-X¤av+ #ejBItI1&?r&c; 46)s`@ A؁ NĀ0*!bI: @V f@Har ` 4X>9k P" "4攥la"r T#HBDb!>@!`]x h3᷐a>3#UϟA@S -TsTχY,fP'.*$,-/"Jb5V6c{~BHi]AlŖL8=pf4g1i*p N.H1'Zr|Al"Y=,/b*6 b`rtKXAX!$ck@>cbxBG!LbYJB !! Cj2<1$!Id AhN f,QYoPkhP+ >cYgWh'~Z&K\ ."V4BؘH>2.*b al]AX&0⪕nm*(DV.&flDZ!DM͡,U66}ArAP_(zF^f +OAu "!`7v !&&w" !(1dOBkeD` 2€ȉn%XI&<=JF,J`D"L >J,#Yn&Dc3G"*) fVFg{{".7K8dj"ŒN*sHEye .zA\Ap[֟hla05* f`*9sbs#*K1dQF\E!tv悻LT$ȡ洸!,%1(ut! 2*B0ɖ*@i1|{mMYQYbt"q+2!7`5W'5cRMGh6`@KMr'fkFi)8cl;N. >Q/-ʟJآ% JMhA hah&AltB' , )g'ap Bxv9֠Р m!!V!3~ \% N#?09e#zbIbÌ).'!jFlKp piJ" ~`id$ 'H伂 h+d'oD{vV&T+yzh :3 7giaNg\ z:ʨ av8!:m"t@uUww6AaIa!@A76! LBT&B5w"Ao *nĴ˻_ @UИb &(9KV昐dg+AƢ)ȄOlWd|.%h cPI&*'nf`-HI/Bk?&PoH-jp sSO}!! fe*h"0K!Ј @8ĺ/U & fF< 3ꀴZ6}К |t ksX$s ؍^!Ɠ[Jbbb!1"D1)d4 Hp`8*?0`:! M 8yfh + ,> T!&$e__"ʖgXML֤e$[9!b2fB^HZc)<:ޜ..9?ۿ@@PNB Ԉ~3_ 0%1ƀIr XJrON"V?raԌ4Fs&YO?QAFM]YUFPr0֒U!Xbs%\b^|20lSE=VDJUV͹V]bTluY9KԱD,|Jopۤrxs!3 Z7C@ ` .+lK hqH 9;pbP92:i( nr i|E0WFHaFc1]3%"eAaL?0(/`Gc%fDB2i0q}d+c)s#3XdrlbVU2Ŝ[Ϟ{sΞK"  I 01`L*5V(0a-FpgYJSX]7| I&XҤDo }$TBi~fz*)/3bD%QRTr-@X9)UX}C( b $! Ĩ*2fUjԬo)DNS9xBgJVa6H& N@Wq vACFb#0d ?$A.j$MYȆ|E1-#%/idE~8 2/X$ dv%+pXRdD,jI%N·e9h@J<9FBErWZJTcDa_J%6LVYL[ OZA# FdSI>CyY&z ߐP'ըF 1U&<7PKT8Zy+dqL՜lu \CE 'fXAT+RdKh8@- . h$ϨNP-`ҽ dLdV$I;@Vڢ r.~ע84wgQ%Ӳa{P9œWS1V1g[Լlmf2ed:{ <^g%\rH[QZ DЀ8Db ҝ^b qm][_d+Pj[ lS:#sH3 0o@Z:uAw!IHB<Ϩ)Qƻ"W|xiY:T1Nip\P#+ӬEa Dz3E#gq=1^ "%K#ŋ%RBL&S Ugܥ*?l"&]45D@bxaX¢Q^Ff~a$6^3B&l*!76(a!p:wH,@B E@ TW n5d2 5C/Z2&ӧ0vEFrV Ro_vJ"|]ҳlRE1!oe\qq#0R1U2CRH3:iwKUIW""Vr`t`Z ~`~r6!PT a6xarL67t)pCơ2 T 7mY" CQti7 Jfu1N-H0_d._q}+0=b!73GhY$BxqH\'Eo{Jr& gϕ]q]P+GWy;sP#w1r@77VCI b~4S ްr @b' hLfA(ΰ*Aa:+(!.G kxڢJ@2d0` `tl;gܗ1g@1j!rxq?Q$Z'PCl`1Pq|P?9=E^aSqPsz%u [:<rFUP Kz؀80 (¤acCvb UƱUI#H  ` u$3BtL `y`yTB!]aEQ = g>3" tU&&`4c|USCRȇ1-ehdF][&ƐdF` @ ' 3ly_IpK_p/KRp\`v^(dV^ g( "`6$fgv@ }@<JQ-$ vPPGm}@$v bx p %fIbexHW `Hg{sxY7EgrKbF`d^Z2nJ2log7#J;%\bhiuL1- ב pB @ڀ `ŠK؀ 7 ~JTa ( p`vf5j* ΀aR)Q"q5g` "z@^GJ9n*F1O_YԀbY"^Y%hp FP ['\a!<bd)Fa<1 {zZ9Yc&-s|]R10E=R! }Э`@

zdXR5JfXI4Z)0PtR'@D}T)U@xW `Hz'VGpu$XVg)QsbmGlL L _qU5 $FN+ 4$:  Nska`z V>}tc1?Y,~w& 3kAS1jPrR?($ztyP+*=EDqP^3!F0[V!0P_j\U. -It tPjwoFWcVLeEvȰ]3W ZŰpK0bR'ābWDU@b pvX0٢*pD VndgHPhLb?}Q1p՘Bac8)ʾcc$eCf&z ؆DS@T`~Hj&T`~D@P@fJh U$u}t>XW#]=7 <   POG6DBO3fRp@b!TVk9CP8H%Xl_M]Y>~`QGe[2x6L5IL/$|#rEbg_|{o[M?F?r+%TYp4bvTM<9.x W U6^*hjx; =ٓ4uY 4A; 2b359Pdy 5 cpi [HEזD!{H?g\Wpeo H|q~/J$w|uFB͑9l#!D `sLxY10>)9v`FΛ00F%j5c r9"r|9 3tyaBX̫zuͶob599kȶ{6{=XcZ-9;ZmS/KlQKZ}˿î uZ1Ox,&dVsגV{j)ћ0$ OlEO x*1Gd&r*X@1& oɢL exTf6g~ne(6*Bu:-%e%: X-M:aKTcoi9CKW#N":5i=ChU(n9&cn>2"oOSh(OuMNK; K !7v#v0ƣWxC?>q[9޼arSǤytZJ9Bf6x,9٤`y|  ,:шUf.*=bQ Q$O$'5T{-($A֑HBB#L s"N0nU*W,݆6 Ԧch8#lR $!Na2崭9OZ((g6VgBƀǿ հDȻxY(8y(I^.糇yk@$'PH-D` `).SHAB:KqWѴT-jsllH;",f.B^X0XؕNugXK\"ES&s-k.!9\‚`Zi⹆ ')DyBK\uY&DΖ#OHJBy#r0ޘz(VtQKd$Ii H_a☫)ʲ{-E)`BNr(tBZ@`:(B=![@0х@SIIhNIIR ,9ɹ'in#kr,Q1d7tC.LNA":ڄg:bST+ = qC.z"XE,*.7vj $Bk@8ޕ!n{{0W#%1oC Zq^C 0b:^E'Cz ]Ta7M ФWM@shͫ 2|n~CE!思 o$% # iQG(iFdi[Zuj08f ܭ˅Yn8G pA'yWZЮYs.Ums3IXC/28nʕѸ9;(>=#yxPGPd!TtշBH6I? < 67!ӀY.J^ tܥ @w(` J5] tA@sb_}gQPC3zúypd 0F?pϮɧ%)YAAlagYI|f9v-I3O{ .7$U !\CXK"Ēo!tFLt%=Aj5HW+xy@j,w*13{ ˻ *xq`r8\5_ B@~ OSaPS07 `L>=K'x(XW!8cۘI#LB-y#P i`444ՐPa'p8[v @KbP(ߘu&hoDh/#>D0Wp1( E k h/YZBpH бjB;aȇe@drZ ( T8Wps~x CĀ|p0V8Gx@Q-4]H: op9!0Ѕ:EY92ы0NpGPf;8B  @BP 63Wq p  Hʜ|8bi&kոH'\9X3#"."†d."/z" nP!q9 "%Ib DHXyZ2ӛv{5bxyOƘ"ATk3OH5HອHT؄h[P6`KiǜW{ Ì3p:X%MpS pb:rP#HCK,3d!d3١,֤MqBx#hfIx”09!y CeZx4"KR&}(N@!## I?uZ OCAF`bCrܞ҅K"@J"@ o_q ւ7X;脩/ ː ( #gp%4  G0M  x̗Q,yMӌp5.5p"aҙBⰡrI֔'-cKΙ .e M((uG `2ȷG:DP&PP0X: yp4;B1c8P%FpT VܑiLDE)m/ Kh&4cQU$aPjUnլ @:Q=1H0f/KLZ5rA#h8S+"R[[ϒH ri2L(+yH'UM칷 鏉p8S7c3,h 6SUa x!O` 9D%(%X$  ;00 a x) Nx)ZRPUO 9xHYؒ;HNZUpU ixN{q:y~Y /p.UxGV2칳 83I# i%s?Բq8'D՜+h9`@ؐCkO"H! G@00coO$;b-^;E,39H"c0M/"MEYE/ȑA0ŝjYP_9`QЩ]R*%ps ;X[xNm#Xy(~8 0̫[87 s)* (&짇P(I5܃,C9)ɜ$809|/išrS'rV ᳭BɅíoK3lЂNKK&^X2%M yْ:ccxLU:9IDA!5sEaP9K[H҅h8 1;sQp P8BawKeV 7O+ȅbQxjuQ/[EapyĊ&ҍV$¦7*r )/ ݼ UYy!1ِwA,)Y<Բ9;6CLBoxJchheI^%;h%4><ީ#0; U@ˏ6$p\H`:/enKmYc)1@)ԅL vW:p0S0J8DQ{{p qHjVrnZ%y @8  Ȯj%yL\QKB.'*8)j!KpqYkk~¶Y2_#)ki" @K8Mjm^pFm0hPXNrv8FʞC5ʱ /R; Qrx%Vce @(Od7EJai[VH,ZK %Q} #V`Qo(xKLˇ|0)`w =lɖ9(hwYި^)Y"ϥxȍʨX9uV.Ո>aYr!3,Kת& =[b2vml eXmҾdDw 08vaN{d`O*S Ar%Y㆒\U :;GrX P3QH?p K@K_PoKRVT:t D Rw&qGiX+U:"(df,IJ+e(lZvC``=AX(@ LK8gH^@P0%P( eXeT1d~|WB#6*0`xCO-H*Biqś;:Ь#(=8ꇓGJ10R2 JlrKMKupA_2fm:%Y Twj$ `B5ǖ-|3ր1"7Y D/ђ F,86 \xDL+m^)"J %[HV-lv\e .7x8'̒7hB [ bp?1x<+lﹽ{)PoB yYDȜ)k73Al0*bʽ0~\C b/, ,xh-fĪ# ,!1 ڰA(p A>0@I]@7` @3d 0* 0(D4EH`@!JZrAM m&@66?`ILβ9#4\Ic lL XB\PDq>DBA@uCܖ*V3X0a(y6ǡuXM7N.CX5 bPиB"Zx7h=Fl6S.zb9]X #rLYPQ [{"+јD < ;I 0Llc5S6ƣIY6Z@h92j?2Ek,f c 'aA@b Ř\&b1qB\d(6I0(Rȁ$YT5Ѵ!6zh:ɨEp2|seHlf9T2"E+@]0#l*4|BiF@DQ , ]?Aъ~qa0tb8A,xU`P3XSe{B 4#%\%GӢy-[8V*Ɣ{=SFȲ%59'PHA\k !6@ 60)}0rxc~a܅URU"Z72DP^&6 f6:@Q$<2b EHa9Dm USU$Fl1T-# 8 k :1d.|Z@ZB0PoHw@-q. k!#:٩=bb#\0! k*ГW)00W!6%-\PS(lIM`b / 7hνlȬn X D:2@%/ i[[D5 EFE5 Kr0I0jʏd{z2b(HC>ÜNrd Har( q%$IAk\a ҭ %}*3%)J} >nC @!l~OaCzbd =r4N0# zlL"(?;5܊/1VFkO.0e*ݠẠ(SffMl$@_4$j5PGF͒>\>8ݑ>XTP@<`-V%; ^y@?ԜqȂ,@lY\UHDE14OFOaJJ8 ď*@xaP\H--=BWIeݒƽ$a$ rK1H̜NL~=ԁcK $TfPm$W'LӅBQ wI HAL C,HjZA @$mB5 # ` XB^1TK^ gC>7 A,=#GH.q:r@^iE¡-Ԝ@hI !PP+cPA\Hp-$f IDp7 Hpa Ձ7$h  <` KxШ]݋@"(TنqZTsi2p,pA/L%2eLyFQ]]C>q(AA@ud0Y4́U2 $X ޶, 8%! d -LDXWFV S +1lBdC$\'RAFFHJ[g~ 8 am֛,K&njO|ȇԁ1B 1h4UEPDÀH+A1b.T'y'PA*|$$WPZf\(2fpNp'd姣FPU%ÈByT5PIc ӓDiB]?2NPA.|`#M=Ă t᨞+J[=lHMWi2.yD>S'Ċh% >i%X}dImpX1ԁ"W-ć.$ mvguo(aP|"@ªR&R"-p@4-SM<ʣB o܂ $X@(̔A]YLNX!+ݍvCy J#pA`նWy= ,G9xÙrR>0)LX]RpW@r)l!$@Di8 eA? F6yt4@`THe̵z%po<dAJl_æUJwJ>--|X@*-&g|Te4W*GnI f5TA|%@(4ȁ4 ̒/ڸC`ƱBUt@(f{ J0ď,.aD)BčrF\dl.P j1,.),M-F\i e IydJ>xE$"*X4p"(2mD5Wxo6 4o:]ֆrQTAB<ĉq4`@A"4,*]|Ht89n-(HFxY1Dl8JDER˕diDA}Um-D!O\JfH [-jB7jd*DA䒹O?n C Ї g"Ix1AR:"|bre]GցQbry OD t)ry$f{I(hXBM]m4=5gr - gU .% C HA,28 `V\dżFFiDVBDu4YX <+-Q \%@HSs]]`9むz`͵҆B6UHH Р B1JiN8H\A>}84+m&윦2ZiZl 2T8&e2P w BT|GqȇnI8nCY}r܀89*BՈE]Y@Bgl Rr7dWH>ppK \rx 8h 8>[uT% AX& A  Ѓ*ǻ?r:^wOnXy>dAB*JpF-%fن:ha?C󿌒JFCn ?uKX}C b(/ Ⴔ^,CE,S0 7<-Amghƾ9R2.#9"b T#{R@iSOF*m%@[NbR(Y,8RBpmo V0&3#16;Ys#G.\)x`txd19)d+ClP`m5×;aB)*[dJ`>_Y%`l7 7#r,q79CU\ kq<u3` FϊiK3lf-,ZV@#:҅#@+KP3HIdĸl `cE 6[f(,H,) $# h`H p SPF/9Ĉh=8,0#l1{3#KtK RO!vD;0ja [0MA0`p3hN#k?KHWZy9Zs;A < ڀP%(ȇzKo; m)& o( M0 l$cW@PC@g>Q V^:h @~B 85 k% R≗Š~Bo |"XY9eb7D-̒MG0>1̠1JGc(+56Zjq*tKS7M|;`wٹ /b`j{5]C~m{䂴Y" fYP@!D@0pqOUu >c@c#v/\CݏѥO  OG* 8`M=\M)-. g+ B|HxaIVݒߤ_QKL!6߸9Ur"jzBb;!O~:ps Gf%Scr \F9qz3~6h`_9qR>+[Q'n r?d LAP1 lG,I`` HD| -8/x#]X zH6 lJiQJJ㐿%94HmiS[C5fjD8` ֢hG`wKfH%5n3R*1Ld@Fx fo3ϱo7DPp>ňqGj7f&SW腹u#AcI !^r~0@X I}"c&mNq"I+$t`b_3,iV*AnL#`!0СVFDù,mj01a &f̸-f4@6;f0Qu8XCMd `?b$M+\ Z ")'K +}rućp Ia2(AdݼX>F{1( @ T 1/aЀ~L/ kX G~cM\AN c%˘Mw) aU>+6g ֈ ǦZ1s9vbN o!7ƀ^`k!X' 5( Z5S+`A~<(`.8\%Ru X\kjpV #0 <?kp5{ _x͙v`Ax+¨!#$98ENvDk;/i^"t-RuT&_ei'/.KJ\ RͱynxˡaweB6 a(kaNȆfZoC*RZхwN ,(g vЯsj*`w]$e,1eKJuGXa Bu6A.@N) 耩 .$- )VJgdT*hڎhMsa(kN%b"A7R#F¯zR"7&ƴfUz1~j&%xF R,! \pleM/fd/kl+jM@cڣ P% ! opze#c6Ab-N n ~ (\( NG쏧GH,FRaF@  *@HB \`P0RLTfO N25iRZ28@@'@:N1 (!r HbX*0baN/2oP4%!N Q6E3/xɛN`P` \lg>gmllUGh\\X# !c&LԂ^\d-'"LL%MH vjx.m{jB(GՌ:I, V`H^ a)Xa$ 8/U*hPê昐5BpZH$ DP- ĥ"c% \cA9 @blh A#>V"R2,#4BI!!9*c7,!.NMv` eJ#JJ|4"Kfa xXME x00; D` (%I&.hH~n{2B0v_ւbA X BQ40*5Ro4c.,t*,AA"& Ve0T T8h8RB&.d/[`[.aP&3i#/F)z0 B5B@s 7>"( .! +Ra#SzḀt N,dd`9 6A5:TVA) !KZOO<+ȠH,h R }ޡ`,A! E d`XAV< k^5(N@g9c@tO\V[@/-RcvG |05=fXP0(D%S";\I E>>H l.e P63āHwOgJGȀIb.b#O\ش\0'J*eReXX@_ c.AH2#kgH($c\A``!RdV x`2j@D!e%ba-X QjR jM1Ćt0wV kYֱ2.kc3;ÕڠL5rR!V@;db }N(RR pXa Dfژb@p)Ç`#b}ĤV V l3T*5c/k3nQ:Q(`iN,CU&R2N&^ ,\UMF1u0* ;53" o8@bJ/%ąw@ opKEL)b-tw$@`6``R{V*F%H  L0Ln1kuz̆tt7ZRN8V!h Wy)-!8 55%ʜhU#W`qNc!B9j^ɵz:hPll;6 wxuzuK.^$:*X!I;` Wy"KR1{ )[\B8 !G'd"9(@ɜD4FM9`oܦNh3vPjcSkd#DC=89cHHkCKE2tKfF ;o Qj9N&< 6SXحq/c|T)$V$' hg : TOlŅ3l`2`<5%]c&8)RR,9 .ѕN1Th!\~ش M`B\39_X)hRNL` e3Ŝ:,V``O@@@ \$"Ag{7*Qǡ_ o{6$@hZj a,LXFd(8Lc@ĺR Oo..@ YEm:p[TOhl 9~QӂwM(ySmc1RT_/P>$s 4VrZ2lZ;j 0[Z3ijgP8q7 4XI-h9LMpJѣH*-:HMH U4)4tg :t$3hKF0;ҷ)1"gB9sܕP#L#wPM6 e5r/aO9;-p9dq媍 g/p#'(/_¶&r%k}XΧ71{9) oҬyvO[S@0]5Vc^ LTef.3QaMH BN5H$4b rt6pc+|-s>a1FfE;G@d4ldVVv0P@g[Yvg)}uC!8&%ss _䣟n)Ԟgad]2Au9izv-0Ew%^MK\@ PbҋxC( j `SAK4[T`| ;HL Ȑ%tP+vwr$ZmC1d eI4XVF5IS@ -h6*Ʊbܱ!GgP$jЕ9n )ѳr Phv6P )tv})gFs D6,ba&q}uC-3DB:9E4+1O(J#%Z9O Vi` 2CB$5FQE[-ǃ@MD$A YDt( %hɁq h҅a(`r],Yy"nT䤠UKi|ءYb-./I"ϗ7؜[lDuM"ɥ`xoTcpH0DLd$1R,o,y7<} !RIv Rn xUBI r$^EKNA:X ABD̲*Z3Pz0R  B\[䰇(0U(!+.иa"rD&'EvC1̖&3pF8ҏ%dlVK o{(>QIz q@UBHSQ0*1W4 3Z [f"b]xXpN! p,C@T' xZ,bP15Ѭ>f-9\>,+]aH Q  #f"M!]ϡB$0'9hVvu4/B{ui+~D+&*s{KHBՒ_frm/--`)$ 4mM Ql=5Ą[4[Db2HJb11B adEa-X L~R-qkZ+aJ g,AEY @C-Ă>ylMPO MڙY"ְMAJ"U-@sfSQƂedL}`[A*xyGR!bcbAI,M1 Ђ&kU ycM 0tXZ=H $ (8׸a9@X{M-L;6xhɖ\`j$|b6$zwy0lv[5 $ GO\ \{3 =N"Ϟ?(E1>.e8g[euGPa/\T 1HV!5IK 7mz$C3(GSR>G#w3pK"@}0@-W0+a  f3_@19fW`3A F~!4s0+'-7C+$6`k7u$w&hx e P+pp Gt1f&X&Gd)hG9#38=1!<űo0=$zd [z F(rq` 4Cc wTHsm#Jq/āNYp Pi@ 0@i3A a  bVlB71´)B8 +07A3"37.d93L03} 9?ES cQP fźeR2-#TbkYXȳo\8)&\%uQ2FpFC"OhtvoI(f8ӌ= ImH1nel>H iS $0 КI89ò3P@@L :,Q!f { J?Ap U -@aop ^u D R w2t\1wb{`G 1 )SF0Ht\T3,Ȃɒ,%^BQ&;eЁlQ{Iz3UH1zH Z2&g1ph2] R 4b:@IP,`,0"CF s(}" lC 1{A-~` )tPKB9PΜ I|u- 2W)~93op /#vmt \opd^>ڂt9$PK qAFy! F;F/ HetUZ >ϽмQmOb;P)l!2 6@Cz #6 ,~ k6ls X3aU<̺}9W^p(\q fTG4R7k7Up.pSs}C 0 2MR` - 9".%@D7c=RQ WO1d4]Oxz/3HJ%,l$8*Q5 `6UǣC:ޝ~21Z#Z҃;mȫ9  k^([ i-_R5 4цb 耉 ΐ 0{9'371Nb$FN-e,V= @4l .n v+a+s2J&69lbӄOF&g #;I̼iZl8ҷo*Ej[O&SSS%|gIΥ9<&ոR D>!ԧN؏`WO#`(C06wM1%6sE?Z@$X: #7|:'B'P(WD @jUwŏLyT |ӧX`qJؚD'A[>c%d@VSi XY哯c* `:2#`9 OÒ #`e#;9Rѧ$2)`409lD>(xiCd[Ai%Kx:@`6D 9ɢPgb8%aZE lxG Bh.a!0nK/T~cz7nÀ*XDܤ =`Z8*`oXAZX(5bC8`HnYIR S bX*h`(& (hlɘ,\DkGK([R RH$k8E?ɂ#*-1H5%c)B 8$k蒧k Ao b\e s@ 0&p* #?Rw݊ ~0$6,6~ uhiV[j; 30p @>j*|Ș Y_nq_ɴ87#x D"d@GRKdS祎08"6q5X)-Z|Aک*L0 _"0UQF!@P1qAV]@"mk2SbP@>^"!ۂ*"lBQ\U`Kh),LwX [9@`AhM5JAUHi{qQ@/H+Y )p3D`9x`ZR&p0CPbm5OPpЁ@  c kw8 9C,|y X6NA D:̓xnG g-xֆ,ajYM1BnPЃJ'!*2CO:R;B7C$2HO(ȐH,v`$\\Q"߰ŝXC]i&R o83Dx% P><3KW/r@V큨@b1^L" !HpţWx b}cUӋ02]]`X@`(N=li!7pWNoPAm[ٖ醠 ,@ ~28/ Ǥ'-E0歃U2"}宾`x P8Fad1cS/E%)/:t1RUT}`\D}CP+P-bc #5k '՚| 9Q7jm#S b8Q"(@T>-ܙb9 b+9B! 1)S r+4NeCs8B ph`p 7p #,QD)/W11EScɀ $"0JGB(qnuX*:]IJp;nчӇy%P`j5`Z*$ tqx8QT!8p_[Vh0-Rp YόuuO+|A j ޘą}.s \,* sEc u2~ #11|#9 |K)bO+&[ oWRHa&E" V  ':ЇHsӚ+-Dɇ@+BA*gJN՚HS`(,Y<˫#~ ,ok-o 3w ҩ ! zpc92ꉴ>b/@ [(K>)$ ) I@8A;(sm=ӆ?t\@p8vN(G2q18X:J!_S!Nظ0 .* ^9K.@2dƪHX4("R%xb,zr [  肅S肂&rx0 8 ¸>.#Jx>z|#; KȹZ'ы8J?ԃ@B+p4vPS%FYPjp1H Kp˕B:tpg H(FX?t̶H(H dF~adkPbXiE`Yh8l48o18/ !鈎!P'A63ۨ+ @ 9K))L )P#0@{ Z V`bêȪJ5p*kH-/1( j3"taj^Ѕx Ad5PCrXDт^$ xlڄ8MXg"K7}0F,Ъ%gbXr1`bVXVKp BX0o1 Tz 2ኖ+$ю@  `z}8͑@0 "9خ!';(VC?;08ax :u1U0v1B  zNjwȂ0|:[K,@0^x+N(ߠ:Z oXYFb F0a{Mx ʪ aDP|`76rj@wHwHw&` XtKu)3|(Ջ먘C C#-狉#x#={40 $M۞JU)ѹ,Z>ҝQ1;(ʂHN;EP; Ӑ:pg1TXXݘ:Hb胤[Ւ"01m !_5KHUȃi}^b>> Kr!Qi({%I,d؜؁#`:ѐ:3븎9툈ꉈ8$ %Z"y4B.J:c8:;S0PHX58qaL(QS5lc˂,=ѩXp<<Ŋ )JT5q0{- 0`-9պyQWcY(Ź'ҒNb0{OuIwQ^ QD('II98ib>[Lƥ`Gv=9hǎA: `!I'2#!(.:ݍ$:Vˣ2gI\n?p-xW`,E 3пi+9_mZ0DE"ÍD⁨&~ -vK{[12!bSQ&.{ί!)pD `sA-iE y AP\v_W> e.0Q"`3;0?$F9HA x/'hK?.-hhdqبm>x`(~\Fˁ@*j)Je{TUx!&1d`\)jUQjUపU5 Vd}0=0t d F)`K l0`ȸ )  #͑ KC@a'~9Ḿ~0gpWh*(D\@S(+uanQW ;ݭ]XHqĆɁ"  .z> /:b(l$~ (^p @ AȁwP˪=(@$Fpȅ;*Hlˁ IE lU(;VXDYQ,X508:C_Ɯ F"|p5DKxA[_C,MK8cp:`9h (> ,*=PR "b@i|PQHH&X0NrjF h\I:p 6î]i\]B6 I!/8c✪@ 2MJ@cPs^ol*RNJ9XU[0E2p_j[Sxj")'pAL=q#H"C&%7W1a qǛpF 9WxFE>6ehA0$|@aX[0mUcQxcU/jTatr3{7q ]-(+hEdžc==^PG %2h,6l K#vx쩙: X7Hy;uZ;u \,U;Kds!@'|>xA+ `ܦOНq<= +~@&=)# ?z3gVxI5J%"[\ݯ2+ {IagQ 2ခalJKɁSn3Y寧V6'XР wQyUͬTy(Nf^@jYF8r/V-z4p ,T1d@)n#CFT@`c9&r`Ȝc';2U+9r\9g+[0XiVZ<%`RoP#a/6@9ĉ:m])a +Vp@iD1i1@(e`XI2@ H#钥3تR#lB:YpFsmo'n OiiI3T$dx03 ]n<w:9la n`n/T@]p%Yp,=A@_ )@6D D0Xv8A (0C+$ 0du4S+`A5GQG\r7>~%:ZSLTun4%0ae7PU&a4Fsvs"A#4 "] `K+[RL,]ѾTѻЀX8j ]ŧ@g 9r;P dA@Jv*<#' e Bp71St;/PFل>xtt)6 [< +Gur2HofaT$6p:xgѨw$ty' DIf9($zq\er!Z4TX#Ro%B`OA!a@FĥKhE\Gw9aPK>%A@@ 0x䜘T8d$,)\^]TӴ ª #N$hD>tl]t7TJ|-<|> LJ$54.@[dDM!]X(B)mZMĉuC54F5;aQ\I$t@XLe|6t+Dt-B*H\(䜁0PA-u"P,xQ\4pIDh20I RF2x 5y DN$yX 17\A.<.e(< $@P+`Q:N0JUJ, ڢXvi6 QWdq U%q T 2xx ^VCFÃ@X;X)TV pV b;AW=M$@,Ăt\G>`(ځG0J5Xx]A?@*JBU] $(G1BXװ`- @ĢCc `QC 4AXg !?~Jԃ1IL\A<D?8|LѻɂpB\(|,JVd1"xXRҏ),D! `\Tql Jw+,FF0A(V)0XE4. +t%hZn´L_y`%H"%hٝ(؂';7 ŸܣYB1¯@Y!C]c9u* 9MTkC9\~)@[w &CBC?d\R-@BB{Pif$K \ U>D @!E@Z5IA>A@FT%ZT-JA 0]P/1A)ZTJŽC8$D@(`(xC9E3PjƯxË4F !`w0`FI9BPA]L*DT(D k~>RXfl%\4&kx&B*G+LC@ۼ,´a-P@Ё `K+H;H].H>uΦ(DD] ܃|0<gI $0a +xj*BFAlJ@NYRc 2( "n* Ø@.809J*1d2*, H5&۴,<`K 6d['&&_f@b=g35b M>XF<U@4C,) im(@?J/0†Dd/ 8p3$a DNv4OPA9@ DP+m, G25BfVp6fpι3AyLa>U+<@zgI۵ :.6YU ŢXT@che؏f /k@ԤjE4ƴC V-$0Bq|_A.C-D8pℓâkWH$A J*dʣr@[#l2c˂>P@r%1BM.)C$@#&;,g^+-Bghө2ʩvF@APb7Pwe{*6!Vr\J0pID ւ4W0*C D5h$M{G|@/U-A-QY]H)H.P7dA/\dz S7@]&LʕZR;A7CESo7p\>e"X'U)tH+ ju c)tA/^ Lc1|$lXKl!D L1 PPmU$IV a8&gN;8׍,C'l$#IN77d @ lV!)54ukAX8g^:] $AB_6|8/<[ D .U@O3\A'xyPʚ^."8R\ԾFx>,.d,.N*8lK|:& B.mG%o@rSxte lF0zg*2P4hT (f8熥$d֘bm ʹ`UyGQ%@)&s V 댁(IfXc5 $ȏ~CIX.?N1i " `X"@-VPnb6 H`atHT7,ZC?P''F@˱;L:d> P(@XSp߀'>ZAopF- \hEYFEUBh`un=A~w/YP ]TV\0g6 `^ oNIY9HJ7$ +࿁D O!+S6hX\`$ AtFBTv06,i~ɷ ) 䑁Y튶*;&gOպ`o7C qi+N \ C֘#7 0얫y@mb)  @]GThB6`(t1*Dg) B\J|^*'b@q,a.afભwV@骔rnHDvz H@8(LȇfPzwk)62`?Tp]J &ҍ" tZS<@$07g$+|;؁O!`8@!_N84^K!d0FcX1*=o pa`PIUxMV#S! 2+>" ?8|N(K",&'ptX0@T#Pid |-''r^&Z+q A,doH+>$"A. D :ˁp o W*X1y4TL GQ x }yi(p Л|1g'Ax`A9㕯XEv3x$x5@!x1I"2ܤv3:P:0f6$b"bHѓ!$,"E0$/K`b$!0Ca o]+pGP 1p;& c@@ ]\$H,@ě('* 03!ł"s C#>qϏeL1$ή"-raart: ^T10-3 0LY$v˽`H"뺀h@+ \e`:D?>>! RvK64(v6%I.&b*Vd$nbVI!``u~@XX€ t1nb pxp g-Jf p   `z!AD" 0J (`fO.TALWbA@ȊVrB\JD*GŠhx ڠ,!LC `D  ^6A8`h#Y   ڂŌ:&2l X! 6d`($ [;Bhn{!B8P0Lj =094D c#^a%; r`.<!0 3`dA#w!0\b& 8#th"f(s z_/$@5/*]D ^!@VCX (B }j-lr?q8).zj$1++a>zN Ia*!YK` C+oa>Ra$@j 5n```d0P)) @IC0h6Vb(kmPkDD(fBsH)ʈf#ɖNC} cG F>]IW\Xc \H34#H+w<$au@,'xʤF0 r b@= v#/ cDLq~^nja`H, @N aaIAXό H|5*JtѢxM@c̨n 1( KQH VATX2(Gza!K@B`A .&N$&6$ Zc N.ܯIa]7r!b"${lHh *8` JKvJ&2xA`$@Mqf21oVFi 4?CWV'z'Y_]6lW!d!r (:3b5D`$y]Ā0`=" @vc|o'fC-`X zAJ+'nIlaq9&~uJ0HZz&AYx`!D`a@~vp/Xwt!(&ZI"Zbvm DSla3lR'F[b$A1 8d NVjvB@yVɌn6"*$$q WT*0gm!ؠTl᠚: au|K ЃH z(@d[BS- Yu($`A`* 0mF~$* sBQb~I8P%BZ8!& ̈Rac1,&L͆'2 4@CyhI^4\|'$muf @ ,\\JVNNJgPLh!oR !l$&kZACd*aV a ؍zt (7C2<~J5zhjA>x8Zbe}z $SI]30Z5 d4Ftт0Ȯ(XV bg!`o=hZU4}=D:Gr9c$ E nbc^n6upOLfjx C)6=vڂP]bDah4^O# .}0dA1 p`J)Z,@9 tb,li#LXAB+qBGY!A$!mk1 A[H5DC:wA)ePEE'!w_%ppatW+D ޜpaIG2A3 >KBgASG 0V !t4 T.`A`@]UAEZ67NK/b'-P@zPDT aO}/+4EXVN`7!K`qEQ01u"R` q8ސÜ0(@5z8a .nS@1MچR?DMXB3PG`0mh)`1d [%Ag1`Tp A6/lUC WLQrIE09  Hvi<Υp 0 t-,!A])68cqH\(yFԒz;WXE$D\Eh wTcIA "{mhh}n 1DT"6[VȠD&G$~()J RP4t0H\N/~ɗA0)I@A"Ul.(@7C)<ʩL qF>1:$(pZ :D.*M`GtD[8An Ry185'A~ ^EsQTt o*]$ &Zeb򃄡 H`2zqUt]pKIsZ I(19CQ(ڲDG͝ k(0!L+(pIK+'qLFlUBa^nO܊FaDV`io1 4 XO%>R," 7A-hE9Ur-A#%3P6gdKTtCNPrDx(7ې .-!0E>A {F eyj,O)fv(T2*"@B+!~p"He&ACP&}@`} KG ̷YP֬ `vE 3U uP{#"-BG6ޠq 7UoQyQrlD5KP eAcBb=Ab Yd07H30` $`kAI mG6 qR9D' 16FKʝv&CD` a0` 3F%2C7QTRI q! o00C.3 zh$.s}$rpi 'p 4~ @'0n &U"r`v@$ x "  Ys B @ Pd F3%P5g" |4)Q;a7 " xhBHn!mYÞ $V4b/WHC'0l ^@ uuUZ@ ´D@> QPBhYPPdA`Gi^?T  GI,wVq}Aa={!`Wץ6)}BPFa u0 @pS+R#@/<0V 5 %& s4ղH)mm0 0 @3F&bCJg Y20 5 ڴL%=H 0j*F2-\.1Pq @0+(Y 1^ZTupշA. KO0Çgu+I@ ._ #si! `Q X4yI1E ;rePd mqR@>3 @Be% %os ՠ#D $PQ+p@31#R\$mPFMQW`67rw[nv {y׺%|א.P B"nq><z @P+OJ2L Z+<4VL$ _E+ S!Hӹ[&:YQ@c.R: 2C. 8@`}{Qj&.ѱPCP< H'`q*@m H(Q0b$5sNS(oY;r<=KkVV  rēLb#0 r BQ?s5rsZ` @@ #UP' gPp/U$U*7 4ٻp9S  a PK! F3 &q8 5tUz N@P%2YBJu 4u$Qq*ekKϰ+4`f(sa*Sb u X\ZК -CCeP 7"pAm%f!>CPp m ~PN @! 3IMW -OGYg{'KJ 24fx>CC?eE1C3' FgFI'H"`A %pD㐓a#C @1 P|Zy  !@5A vА`7\$K`#݂ (@Bwp nqA0ҚqSu BNW [ "MqւXn\cVKYӜo7Y0mKgcF8[!ub(R:"wᣟ 9a ([k*^ ww'h }p'lF V6E^ IlcQ9i q:X(2W;`M txq0 0NL N0C0 pP&RI BiDaN qTk1b0pm -)ڛ$a$F\]֙`$PgGpNg0f*L9q 6uh>UQ]8*#&<6 NJ!F1bN &ʹ(TL qAن8].2b63C4V:TeUNg|a P,H܍8 -yTPH^hi6$(@&Cd 1I$X)ʪ|.%0G/<=pJT9 zC`~.:\ @vaU@ekcnʜj0<_r cL=zlԞHظqbpҕ•` ?["ʍ;^$8`0][  ࡀ"8!UvfEd%H c(8Cָ |-ǚ>ZoKͣc,XU>-"(sӣ]@ . \QZr0+ p&WP;E '΁]@IE5EDrCǝlpZ7vQ K ?̓C ǶD][z  8O $@TXj6 4R7 pv0PY8?a;~,Ec` KRFC+C=jW4tEr>DV 4B*rq C*!!$Zqjՙ& 0Aa- Z|Ӆ%I*-cљ0V2v2?`ڰ k$MZ(62mvD0Q7;X [dpTCьL|1J0%"X*l׋5x&ưE9#ıaQ%\Y'-)C$ /<ĺ+؇ NB7:K8#f#p!0 .1Sbq!(a#xݞQ0dFO(4&F,iJZ,K\E `u880Bt#! ,JH*\ȰÇ*S'"d,2S `UN'̳go2"Oo(v@@4^֬):E0 @,EtK`W`ÊKٳhӪ]kkƧ촮'`[ͧ5=qe\p.U!h+Alc˞M۸~MK$A-<ܠܪ8\=9·ose`~?zu0к2^ϾmUje<Pv`GO 9(֊vUGv9uDžXv7*]6L\M$nM'4hZT[FʀB?d@؈<9z]tEi\ x@$v @:4ߍl"oJ&C xNM \b!:QJǨeevfgK`(teHU稤jZӌ\`iGPj^+FaD>@|A`B/.hBW(2ʰ­+ܰ%TkG`3,ktwG͖z,0 I,}㆞@C !fdy%슨8مUcL8?`e#ylA`Kl kvlXu 1؈Ku:bEDx9br]%y@z@i!g-@|0P,F%C17ƺ( wsݧ%b4o']x,&!1͋h0//@%^5m&$`+$ԏ^V pyxzE1`S y̢#88g{*IAH"C$%*߀ēYz8G0 >JF)y+c$2w\~;@zf $nD0e0Ov"d 1(12Bi  ?"O2ٱ^wj)GtQ Ȳ|DgfgDQxcT +I@&UKS!e.BtKZڒ64\(0ڇznIz#(|*?ၢuC5;rscaDWP"!kV)E\A Jx]B,Z*ǃݲÝ%eNvR0HyLUpk[ ;"ӧ>MV|ucZm9DCPm'ӛU].!a&΅L`CtXp!/: )1K ቄCےkC))g[h$ Ԁ5FQBxGAdحg# { ꟟M|h"vO(=1;Xx*xMVArkk1sD Ƞ w1G<\IGA h@ 3$ xܠҖ.iOE.1z AҐ, Y@Ff1-a% Ff|ӂΧ}D-M?% W[m!:174bd/Hq>q\,'@/36l)NX: [ VA!&m{!]g,(}0ƟhbDEakY;L;^?ԊOD v/q[tHO`1ps ^{/!m>s)$+d )\Zh.:e&! Jtn$L1xy,q|`01mLL@&0F`\a)D{e@1 RupTg{aOq[GB{WHa֧$As4&FZJr/FER}/`:(m:539 00 b, ЃFvAQ%2. ttiV0 W_e50A Br=>;!P3l45C) F~4%:%Ea`b}Tqrln29xsp r iSr"U`e9&b9$Baw\ozi<7XjRe8"x %߃'5K$24( u)2.VC4Cp^KP ^C,/'0 lP 80XWC%4 RF ` E9:2ZOG{6@@{Xؙ USd!q>BdV6A9"?WLa+9.2 %ZP8K Ɛ7 `p; 5ae?r]cY3q(Ҏ%ǓY`'wVTza0 B@ Q5x.y\e>~*]`yB97Ya+6C$؞9K 9Wr+  32G$%ͲYEC8I$c:G)!B=7YpwCzWQv ]`9`q)Z n#LpL6&meAP9b$uC6ف'P9uY`Y+<]LCy `.èY*UnoK}cw7PCa, 3vBhO$T/~daP:,/Wt'eMEc4p01G(2am:3~` _] RP3:fZhb#/1!<2"/7r#bp1C2:EFhePXˊyFB%pR+D(c0lp 2ѦeREjapo"@P< i)>W/$D$(XGBh}g!24G!2Bhml%) 6wFm/*ݻC8.bj wp4@7NZd1WM$J(; O " LlxQI-yqpW 20 5]LA" 4t&}*)oӰC*OW9+Yc"56:TPpi2p@46*l%ɕ)F}E a!Th\XØ]Ώxڑ0J 0@,Q#-ʪ"Yv'r Q (:에Q?O0m\IM2 DMvsb*Qa k7Z'q|BǸ@.7F@ ``}P  d"EP ^81 Ip0]O{md; E$2y0r~cAߓ:*+sZBg5v^A )ؐK5_3%[FCY>'5~YyGW<@0GDʽEV]05ɐ&5tV>)t:W޵$-tg)c, _6ѸXuްy D PSm<~R&U6DŽd@$]6 = 4y~cv ' ^4YMqpXvcBGp0&/% {Ŕ:ɸѹdCu$]p CnjS8j0WuSF1\8x9,~` >!{MHb*!pOh ̓= oyH+R gØ PkiAg;BbAѰ>\I7qO5 {!CjQ=nK&"M 巬X@VKm뉅axDM;y}QS BP& U 0*s P| ;]Šv+ +җ^)zBO,A!xLvJS:(8/̵M8;`j MG8q'M>}K9s`qhZt{sݦ 5,R '}fuQNZr3Y sd (>b4Y-F)샼?w$Sv  k lBinO610fd9;qx1P0["axF` s펯ci.>@,pj)Hsu=`Ǡ0z8 EPU(کҢ -ZőKģV6g'V`L8# g<MM 0FjV@gY@aW#lru nX&\aĉ/f17uMma10ŊY|alч4` yC:F@ `Hn)َ6M("ɌXPEaiJ$D$I`z4ɯ\i1}L (9HG:(\): 1f$J p@zlC;$QLJC7@34۬;L'+y43xo%thc2ʳD@I%;pҎ%#I*c@ b\FnRͅ:Ӡ ҏ+92R֨Ø2'9498?#z&@:И,`,x $j&X(qUV[)WI/S²[Ibquy S{d&& ꢡXX°0j^8,3仧>W2M9Z Wͷ},C($jy-Y#otm(kjX,p!DXDKZTC6@7{&~ @OoQ *Oqs0NOgVTưV3Kt0H>5&Y0`bl*VDEk1/^8D__zWPoQcڈ4/KŞ1#5Q sބ< $Hӊck@{0"KxÄ @M||rIPsFE=la;KAA[FF/ak0$QG̞|ldFĕg-sycol3iךČ΢FVfBG n}o?!n1\@(G{oKp bx`I&QE`G)Țp"!V y7U1b6Tb[6h2IRd35AlY;36%k3h2kO%AZW58"7ez}FGEBv5%"|LG8#W$oghB'GY$ʥ0N,AV Z录`b]]; e4wO}#sTԧs#[SH 5$`鼍$@Pb7sFoȝ^$H|gTcN aV$SUb80$)WsD 0cxh z  píc02lJxA j7 8 Qn*#q(:$ b k!7`f06*J x8鉞X-Ȧ ,6sbUځ K ,!ch>p P=޺2-V ae1 #A#"d PX1A'ᕮYC)ZayX YYX;@5q 38 ;RF+ l"K PI XkXXwۢGKPk"(&4 s#OX(Wmp(؊)2 D*% )*P3P{)!6'H>7۠+ŌY…T"aŠFX 323@"fj8aplpĺ@^ࢬ8^3-WX @r^ b`#cH*@(S1cC'qPȐ% &˸P&;@ ?I'㫈IFxBeA9D+j6IHar'N@^X?G$ γ$ t20X;)6((}-+ O!`apg"L ˆ20@،a)`ĦD>lQ$ٯ^Y)$leЂ"HJjԐ -aR rFA2HR q\Nj0lbF<ælgVܺ (=؃r=QOD€Zq, -"ޙ2VUl * J* a_2O}Ml@ e1UeX&JCQ` =B5e;QQM(c8cCPռHN3XH.lpDh;x񫲬T L[d(.+l3퀖UE"qXLլ2H_Mj &l$(Lwp(c0V{YMX*Ǥ%9 oU #q݃ h#`#8Wc?U9jpW'pYz"fX9;ˍlQH2ؤ"kYݠC ?8Q1тX 1ɈMmm\b% ;Ѥ芮\` On l@?<qHzDh:F":0k[H9VO[ЇHʰ;U[eji.Н.D3yL\(QM%% (к ̝*Mܔdҭ?bUXT͌@zM%@?ML-R RЁ.x?h? q06e U FZ$¨1(VJ-C129^  $PY6 .fZy"չ[^߇@&O20CHJ mG ?dP]ԂU!d'< 2 H?>Qhe>){.0:Q]VNeK@?H?HO9橋@ <2Xke^b8 +)VZ^5]!׻ŏQ,x{]1a 㩋M!肱\$؎X@%$GPF*E?5k,BM)Zv ]jj"QMf K.M2(NbR@nn2~Eja )e8^ɴc7̨ĂI8\$Kp\-`*ZȘKA H0nX9(Q\ʝU -@Y%h&fqĮ XUm-'|ⲉ^MCÌ6 Ik M=M!E?^X iH[e cQ?`jD0iݞ"USMu$Ml~ t.>x=xTR&\R٩bkW2j=9)٠sD)}*)`gP x,h  PP|TE-Aau%-C @~ݸ!͛:p0@X`wr>jR(\8I%'Pp@'j,x@1ocK2]Rj{]+ PQ 1- JB? I"+Š0f'sxAG tZ5>}#Lj{YV-ɓ`ss.qw';A`+wm%o"E-< (b5@ QE"GSM .YI6+m.LpC1܀K.HXYcIX@NB %U~mPM5جEU\(Œ})cW, 0#.(@vdm6.Dg 6K,aGvCݠP:P z MnJp)XCrǜ4G!00Cz*Z"P_@z6sN$#dq"Ÿ)7|sr KYňԁ(a1,qCxW3v"c[D&X4U]QJ5FC 0$+t% XS,ƕd,NJ5KDsisgM[~RF?1As8J5"7@N)C]>$T)Aƺ5]Sp^ש*#@ }Ӝ<@_"7 IʴL,5X u,QLQCRDS.6vup(Ћ_tVV`%]80XPy.h85rd^IcID0 l (@ndÈ2.Cl7PXRrQp3) U6 3DxDaFaPpvX3Q |b Z@ 7PO0B+U.067xS1j sW#ynLS ً`C- ؅0qM?hIš%Gv^I0 -mrΦ"-]Q(āoP `EBߤ"K\bQ10(I $C)JQ(.ł+:).r jC*' V,A("TS5R2M&` r{ Q45K lQRg&#$~c]URhDd:aE Oz|a`B GP +:"JEA\ 7)2~ę?'e#{xc (Hl.aPЊJF ʡotHӅ^r:HT"^ IP5İQʵpAuѤ-R|m,7t oJ0p^b#+uB;:X-Q\ 7&j\Q),+?` cQu.},dBso.d"2K0&7@xC D'{F 4>Q&0?(d7P 1<~PN]{pS[Ef֊KPpj-*8ZFm;VL ]]$-JLэIMR k.K"K ]xi+g_.Q5PSHDDzTԂ[A7A<ܕvCQ ~P#(i"8ʩa#8:sL',GA1*UR1 h-N|9sQ{[VL[P4KX)%`VTonup$b7ZQ>$Ou p20<[4K\b&K.m+6@$lǫg7_?ƒu' X1 n3{X3 xlB98as7CP,u aP֦F`\b>֜•ho8y (kouH.Ub60aeKݘв#lt#->â&~*ㄋCPcʥa!9Ȇ,T`Ʈ:F5oi+XW2. c0'HV{9 [n8"K;Z`\VQr5$sXrϡ$$alZ K|:Vu?'H<ˈUE5 fj>݊%V18[N[L V,d8 @tTTE,Du٥&wu"ADL1<Q%4ˡ DZ%A )<=@0łՂh҃oE(KA唦 Dq5u %pp 7$C9u50MhC5]Cmq5@LAnŵ]X`TFٿxT C5dQ  ed`$) 6t -LOϕhoY+lBI DAZIq|GA3|R| D:vcAJ\R 50!́Z\-\HtT.=ba12A/  2HK$PF|j1[L$6Q:TXQYHVi %(X$@')J.ej՜Z(_5 M,^'%( + pDP mVXis E]DA䉈HS|!I7 93.T`6|B4 0€&1.N϶A!Yl`R(|P &!3C20D5w'o 1OֺJ}}Gݝ2@K\ ]N~=TT-Ch?1xNCaCA1 \Q[aT@ D ݝ(:˘GD`C A1@PG0<xC,@K|' @g * ]KLxS։܀pG u}Mp@XP=CW})uEɭO~a{%p /^fYsX%\R^i5B,w ]OGZI€ L3vaC񐛕O טՄ*HK"4 L2OkDTdo # 2)^v$ZtvKwlzq#.kkh50#ZpI7U@\rQW%UXP\umBȥ@ڣYKZ5ߦlpYZA 'jV1pok \\%@TZ)L+͎^J" /}qZE8HèVTXD0ϓhD0.6O\3$ 1`= O,8|$mS9kJ69q"7Ze $ո@Xщ -p% B K>yC,-7 7@@GP L#,k RpƠ9XҤ2B9,H*#1j ,dB૲6;-j@)%cqch -chmХ# @ cb81VI{fg*mT05;a`rKOʋ4uֶ3\=VX$Aj8ZTbk[2UT(+>94rAYFF~,k ow2,, M#.RJ'Zhؘ"aZ뮲z#VK,iEsc=B c4s]hoD&%|Õbϩi裏gN(da[yFօ,Z9.y _1`6yRUz ĹbCd ]h`cꄈpUq4XyU5 …ZH[k˾/貶J-ؽ*ZYI#:KؐF"̃ VkHƗGw29 =}= s8sz]WcT8 dBH.|!rHE X+pAs#i F5@( H%8;T"| 5 ؂ITkHI'h e" ;b|Fw\./R Y礹!\% {KZ S[ aq3 BrKK!bih4B\x5T>xȌ+VOzr8x7`O]+g #pD [rW<X_cE*Z-LK 8yWb2Q C4J#T4Rt@$1E:IME bxynZ niY"|mf."$[L&"VE*0zB)ItBHڡ Ow̓& /TlN)MA~8jyxKX@Hx bNqnU 2!e⌓`V x}`/sPa@ tq: CIPu>D><8Ǝ@CoL87&I:#id AB6!w) 6 Z;h$yY4Pqh%4*/iPi/Q)PH.ЎTKE"ܠGPvT07 38AdC (2H0IJp+  @ XEU9&]PYAWE8YH=3t+A,F[DN@U0QzvД1vhjݜ eAkcsI#c9ERKN#*Q 6ģWf_`DpH,(A8Aе.x@a . ¸=I Rp҅z.q`Y6/ܚ 1BA==i;V2V(L' x8~ <2NvY\$?O:c4̯[\6 1_u^cbQY z[6D*4[ 5pa]A">#1$x/2K%g OD}ʢ0/f+d`ЂgV& 7 `#(g)cKE$įA@I cy,@_D .,r!r!xm׀i "&:` f ` K1%M#A ,%D 8pMl!UR!,ڌ0 `2jKtPNOdl`,2H!JW 'Ig ;`,AO@Hv NM+ŽZF DE9 i4 : #h&aXH?<6pdA  A!nX<.b h#€*ↄM4]TTBFk6 ʩ¤4b`&' A2wdXR,D ]Aυi85G72PptaJM<0Q#D\I C> c V`*@[&QŁ<z49,&l4*4`>2% )`=WR=SMU/k@8\\e^&Y.)7\D>{B,8ئfO9?1>Ho4(Sw.&-@,x8@ Ф $aL G/d4"H\AυK5zхg"L*Af5"h@[hH+(@dx@Q@#Г=,6A# $s%A @(/K!TS# P@@?XIK,bU( f!Uf1l$Ď=\U2M6^/#fc<A,(.ТU#Kv2!>GOcef0S'b2iZ /7b#Y0Ԟ3U<*B#|)U|l @[ g`VOg;M"F֠CZڋ#R(M 3R 4#'*$>TAU-veA1 \ NBUf4pʁ8`>,g\4,c85.OeS4ft/UK^G b(6+W9bowU49Ž{6"=iCo7Am>  (a}A, | *`ditdu'Ŵ%! :B'>A$$ `YO{kܖx^3U!(M(isjs !m؊L@b!J+/JeJFÎp5qwL:Pc8: ȁ#k WXW@P# c!LBcנ Ac۔!62"@ -OL@W#y]R'S>MBRT%\RBH`ol/DD. +>F(!fuT(dI{JDF-vGI $򻶤+vTp7rw4\uht mrer,X)GsN#o)H#;]$yD@wج0?DəiC$!%R# SS`aeI$RbXTc0V,dDxF 0-\{,-"mX'S6ɉ΢H7uv !OKf+fl`vF Y\WI.Y2 ׎j}qfPPQx#QT`Hi'N?JW!x/JYr!c헂yLM~x z̕^zw \b>'V`  %  9=TTXAB UVQ00ȱdd06֤;2璭6~@scǥorDhu)44C iI3跞F.Y2#ljKGhr%x?|;*瑪BhE׈,^!kaU4A)Qۻ?|hqF'9XB#p {(*4"VrD]iT1v*FtN+'B#aXl,vJ++4M{eIu ;HS5XsX\it\S]MxTs8QtU׊D^U^>)ɤ_*Baн{Z2 |8o,qeެg}<x$ #l Mm^É0O9 *̃ }dYYge V4z7_> mPtTi 4ā-M$BZ 1M '# E8KhU"HHRK,]yLr($GD7NGHSUcNFL2N9A68VIpUZ4#M6ؤ^}Pu%RHk%GR4MU| )s@ts4?E7|" L7SGyYԦM1*3RNNyM@}G/6k#9߆K2]@*(CSZKSF&3TZc I7TS,/;ъ`jdTK*cJҜSsX QO.Lԕ;1Uu)Nc p!\&! X P$! N*78Ep#Ppt Z nrZ9A>ѧVȀ82GM rT{ AID\ q@PG ()n!.#IǒFkJ&"9t>a c,#ELљVa&Y{@&"u_AI%W"`*pfE Z$4x`Z (np\PL8sp1A R<N̡|+hCS74M qMU6[ `@?v)Ft V`ňZġ. 8Db&%I iSΎ&_*\ePJ@w5DDUE_,ю$13̗À,†` 6g 9N .ņ!XBOB hBEmhP]VMo&dox P Є ОRx"M $R\(^ nbt0D#1 t";lnOHTKY !pghy Boy] Itt ̂U"EĽbI/MZt Tb @bo=! l"I:lyQ!rUVIAkAc 10|q p} A uo<Lp7@7Aay4A .@ K p*Q-r7* 0{P0|3g77 oCev)u A"w8P, GA 7p@e Eb` 6I>tQGaQ' `N;MB#2A3a^LAq>4&^a$TP!;! La%f#ΆFЀ%1=(Q$u5a ΄5t. o@@Hc;V(P IPAfF aXl p7YBgNgm 7aTt$f}} @h"Ò.R,U,$` X)\}F 3@ hFn ~|AA `S'06T=r>_w"-bJ߳>Xut1U&T1$)UHbla&%)f%%n1$~G` `_ (xr)Ġ  . M^w X SYBY -䅳p]P*R @ Й4A Bq _0 'W~> Ot*YE,ZF A gs4F6I +'4! fIlPr#JY"8^1J׊&F43pfaK)T(2Fak;p$IC2J"Ba3WH$"A: /K27X4D9Pڒ1p *  e, j(RxX B좇;]k%4IP *.ġ#:e =&>ee>JR|lWQUA\32x#=b&1S$a$C>bu!2IRV>rO#1zI-SM` HT9,u X $P54yB@Gb W r a 7aN4 b3u{p({/ oDfA Pt\ C\kEP@ P4!`vH2:CP '#!1׌䳋v%3AS/ C2'8W)kZ2Dګv%"*ѩb>ٓ(uA|eErj pK' 57@ $:f( M@r 9ur  ކe3PApq7}㹴Y[ X*UÉ N߀  28_0,Crp0,QG  t2롲1DKԜAqo0JiOQvHF+zG`s2'W98mB¤m/H>eV("Q<ŒJ qnjH;K$*=#k+("S%r %uc%{a#p0R vfi&pKI "pm,B/6qC @ )CU0Z)8yհ_R@AmFO8Z,9(ŕS4 4!4s%U $G4!'paa`&51;"8 Xuq15<Җug3L>)p&B KX1Kp9u/5uQS2tTQURL40@ncyKAP hMoO o' ; @ )0D >3@ }GAR0 is 80MEC&KbD#st@=.CBp]L]v8KjfI2z"#a v4?&5#?"6aYJi &*j#'ë'wH+^> HR-f2:aq@P %p̟yqN >*(Abs x`po+te@<Λ`i'Kd4a| ET$ c ee02Rk~, IOa6N'K;M%c4F0b}Vk^!v)>c2JWݟdb%=a?qJ"K3B$h%N~%?K>&˄-Abc p"Gx0 I0 A!A 0(b\wq/En-dq3`h;ƛBܦAуas F0,QL1 !TDV8R .L ,U CQ &}!%u00t>IGk1ɚ0/e>Z%N"Mh]^YV%c~VS^a/%bv@> 3G|$e GCu[y୚.L'E€$ 3*1Xf04 ˎ p=0Ү1P846n*Á-A`4q xy0D;hQk; % RI^# )? !"?m4ָw'%2`9$o1Qq%!3{%N5NjΨ+L$APA0O((6 Tf -aMA߮~/P6{U@ëq쵇e^zx`=8 g4~@Ppj"PB >QR-\#By}8AuUPr[.$$CZZl #J;r` 390b$9߾i*ȑ3 #7t2eZ%K3,YU\Jx%ls֬U#][ܹ ZK;v4:ޞ`)rԡ[}'.V,}OǕ_+"Å@*F)k0aby-]kAFBdc у B 02B "a`4C" /0CKzQO @ %0)Ze$(F~bcjjGň:(f 69j & ͒"ͪҖ.c#KJ#L4#HlAO[lȚK+*9fT`{.ĦbCڌȢ> #o䈕r|grQD^oՙy=yMcs P.Hh (vPVB|re`vw :dh YBF7} #jPFpX刳u$h`jQmʜ)tDՒ nMW}3`嗍CEIG`INlb#(!3XQ< J O䓇]B - %MP4fKȁOFBy(1z1 Ȃ ("׹1EaB.ʓDUc0c# Ab BԒ{P)х ] w' ABpBH7ɀ 2`$)7Z_S)qI)2/_! ([~Z li h `00YBM5hJv>bd%0YVK\vK { @^%Dkc5| [@ t H9({E2W 0E-2$=kXޠE,ܸt RGHÇ uzX u*B m(+ B|Ȅ$X-8@~ I(*(T!SyʤXqY :8d0y**LJ<)䐁 'RjRK@ )(CF ,!^W+qĕP`:dL"^8_pGP+Vak=ȘAb.Q\HC(tԽBbE]xrEf@ xtG= a@tt.T|Dau*F!ckZU 5ߠ -Xh%`ҶUG[c3[*p #*XcA鑓P$bЂ7pZxTY*Y8U,43Ջ:ŸXL3G9cB9D@E=qZ.Ak]F'bN"B"0D!zd@{U W ЅH LY pho{EV(f4b~v*ID6ͯJ5`zad.`RG>X#P h@ #PV#i`pzhNTn cy[9X߃Πm,<xBXSy؂.腛H 9; +kJo8 J? l603i+ WyKo(E1!QRlC≠3E)s X c#α Kñ Zz:XrIHT!xZg0D>[хaGԢHeYR@k:U$ȁ+(0+@ܩ.ۑxY=>*X( 6b ȶ *x* $ oR*oh=H7+A1y[ N ˌKI; 1Xq>\x0OQY9dV&WCBp?(4]`( rh]2EDd>d~'6L3عp /X |YT"(SiPʁHWo 8Y ^K;S`KjUg&0[q0* +J@7m Kc7}; 6c"öp2`.0X0P)bM^TI:X08pی5OqZ` ˩ItZ9 )="K$Bt 0 0 z Xʵ\K:|E)2&R(c8 D**|`1V⊨/) p +Ȼ+7ɊB%! P1o i ̛YB#3Q:Y mϺ.$m2-R-l0SlX$%h2ʟOASZ>â?uDCUx9\뀨^=./GbYoȂR#臏0YC)5 0/H НR@DHC]"_1+IYfT(92) pioH{Q,H[6(ۡW}A I^݄ Q <UV0Bi{= k'IK&9p;A!GAգppDҊ#k H4k=@ 3iӘxq-/@ji`Z0Z?{5IZY"(aI(,,rM<[ș ~mhʑ0B)*T} 02xPȇ^p@$H'7C8b-ؽ,URhX-XFFh9샊m35T/Z@xdP&zbIyΖI3/G4Tr^][ڣxdT5U@Txࠠ&Ї]-`(H`T I> X&| LJ \!nm=0 WN⼢;֪h⛓ (C\2i{$i 7x "PHlІ)RQwfwF%NXo8b(;m 8h x7XX>xЅZ^Bȅg%-?ʡZH-c Wp 4X@xA9\ W9`Hx!SЅ…PUwh.2yH,t6pa54K$ 3b /ыfu$( IsIJlZ%|0#h }B;͛b=@)]UXldHs>hi`=ιNlDx.Brh"8.aD?~DD˗I[6ԁ}d،~~WiX֩ T胭SY$$x x0!GtL̫ P77;RN K,"6:"I&мj( `B0,x~=zfg?@bF#c~`icHxi73iJu?(8\=7x.j`DCb7)>4HPKY:pУ"YĈ%o 軈*Ht Y 87 3`V2(x]8%j*1b,x ݰEl%Ұ{@l\YaL@XX@9/Qs0 ^cOS*q+/"*dڮd`T"Dy@@nI:臗0>A,9 SZ] ztvQ[\DkK 8VO.``tr.UHC8̰ѱh1PCfNSxqaKoa[zc_ldgNa&@H i#` `xqb^Ѓ?liqlcv3O8ӈzAjd`Imdy?KV\"AnBĀ%xya@ HH,,Ka@&B kP@AtU ;#>*4KzrY!\^x6! 'l '79Hx%#q"{ $grǨ%±1 {h%7%N\$\B, . Bӛ7Y>}@䑒G.vdN K)RbCo y|9UWN l"_"!#:o 5(Itax 7y = q-iW%[Q*n6C,y2ʐ|@*ˌϜKY  V0$ҷB) P2nbp%L%uhwc$u L*]by1Qu$(-{`N1Bnt7tcJ6\g:ru*:1E!TB怛L?# W0ycYG0CvY(gD\"?8SYD9="ǽx 3 @>QDM"LXOfe,3״VR $F$A#%! TG 9 0{ CeD* DF <) XDY-:ԑyI\h\![-ǵHRb(QwFWr(szqַsD+@:0h k;< N+x:7T@BfZ4*&2<bd9 XtA>P,}U0}]*u O )dMq^B1P6!,-ÆZ̖'} 0Vp1-zOB,/U?PcH RGq.pƀBvKw1F?2C,:HVwX L5Gȍu+\ u)f 9|Ġ`(ZD'rf(3|?1n񝙤1 I\J91rV_n12f PC/CA [gZ 8ۏT `ix)!!D>Ῐ r2ON8"TQ7ص $"2끜̍+l[JTE1DcH@/dVVB$E ,FLH A/L JfE*sDO]85%U-nG?Ǘ90b%Op < OH X>Đjt\jGdۤCAAD3%T%=H 4IaąX@P@?HUr_tXCT\h Gz[x\B7N@BDpG|IZxE$"YAQ}8 ܤIax ._Z+GLU3%D*-H]1/f%VJvva8Ŧx$HHňbFp=m&olfQIQ0\ l߬Ķ$lL-ԁ$-@젩KMi9nirL+npaw QCȂ+\, h[ &`,PS-AXgq@`YZOmE/q0Ѕb\\d5胟@ }8pW%aIOx*`X+N`\[AIOE}p %4DDD̊5H<@A¬XG㰣:^oͬ0pU>.fMTҡC@Clց%B|EOBC %X)?(8ČI@aVqY7p]R\OtE\4BX  `V.dX@>8 beع +\b9(R-"H[МY EZ9j>~4yQ?$$1F j1,JLjiY)D)ӀJ+ijԄȁ_+N1-B($9|Gts(%tD^-Ldb}O"GBQ)= c\A<@ , M4NҀlkأC9 'c/Dqqt G+c>*`ڮ[(xch{oe,iD@ JԇO]VHH_ 6-v6t_yDe3NqtcA880mxDL`(79 M@m p@tj - ,SӏX-7\0hW@p6 KI@ lk]TzO] yllIǿhNQnQ)mW%QI]a0Pzԛhpv=m!n lD wΊ- 6AMh%}#&dw6uӶ&-T D7Z}@X<AF "ZYT(  IBZ^Z%j|6 Pzہ< n*; &BȭdAf 9R7ހK> Ũd `#*19# 2–R .i3ؐf,2Fk #cV0:)z FsʾaZƛʴVx=b¥(ƎD9њ.9(o  R(cI`Zt@%z5fĩC)Xali(2"!Wr;Rd!X&N@[T.F1M ^#]J5k(Έe96Y4iA!xޙ!c٭ʼ4cO4Lـ 9XΘ暃( ^jo0W"n~b郇bqCFh!47N.= [Zz =ZFJ nu5)M N]\+vFDrz"?d³zoŒVm5 `ț{+6 4BiK)2fۍx>BgUbӖ7q6ޘx{L HtV Ӵ;p nP ^x ؇n8; P `|u$ajT`qE(c0^ + 䢦Ŵ{76I!xΖWrf(V(n&#3y(lN *|L`δz"9Q@{9F73j>c ԡⰕELs ?4Jwa1O`d `T0$ VH&q-9N b1.%I* 1YIA _E=BVC]s4liڴ7P8oLcDr2]EdqW4F@)cBy<$(ke12RWLo(p 2>IMq t IekE}IBKXB31\׏Z nMb8ˈj0`hDePWtvYnxe@D7e ` W;'2 $yB-6-k)O7՘KE6,&oz7 p:HZ<!jO` ]k(QY|hhB\35x.j1:ajo3NpP/u& P(4„5/; eԮ9>z7LHwF/RyЩ@ ZA *&@BqVE!HFcfXEBΐƙbŠU"0Pe5RlgP`К_3ݷf5CN'iL bDqR+*VByr& ` " s nUW)aD/G<,pjtb82iTIաt 3qˇV`E>`뛰B 8)bH˞U7b0UXSu\"׉t_#m8i4:@YV:S`1qW mF֊`^c#6lҹT!e!:POBSq@)W)0a~F8_p HL0<69h8L[0 -C 2 ła %xcAB@w=`CBzD倕_R""Z0F kja>&y:#2Ѵ-d%f6EMԄ."G+YJL;aHeBMS:Mi @-!`<3S,1e>8COpL2^h3UaNZO$f X`&.I&!.rHn!b EN*8a*"Nlj Έ"t *c"Ih 8(Zae7C|-."l!hB1**"bzCJ(h@#6A-F7kJ.F5E2CS )̬%ϥ,0 M Na\@ڨMj-%x` bf`/o*:fJA P0#Mx+"$QR bJCMOF6V~NR5 + [aB^b&FL V2>FC`\ b\H0@*@"/i⧌Ꮠeh.fnyLf1x4>cGb^I!D`},-*$IP efK6 "N aM)S9R\0g0d.JMȌw A>A.PIIC,4`UO;)A;仰C(D?% E$a HO>3(!*M6Qwk/dR(D .LFt]Td!nVE!.E1$$5XKP@9N@f ;0堦5#XAFJ\djb` R 1@k*;3iDDdհhfbidOpa>il\&b `*XMd/4/2d"8`! Jw %TOO 2)hd7l!gی"4o# B掕RFRa4k0c"*Fq&` |7DxR4`80PGN`ܴm)` 'OICJ@> @@Ē `7 %`8Dd@ >rJD>d)5 .KM87fCZ [C*x fTX *$S9Fh22! JSjz=3^0D:,ĚjȺU8m#>6!Vv1 |tk2cFCk ʡ,H"!X&.g.&!Sdp q0!tʮC! aq;D`&|3E#'yo2Tl]+ ^w*(c$sKȶ,2&@M@2#=N 8Vg38/6u>H.yb]iG~@I(euv4vB,'qH\ pE, t_I;щ.iL,FA_1``]B !H;S8b~XeY(S>p7eް25egPV7R"h$11Xc|(@; 6!5e';lE*d"z!flA\wbVF.9؊yV?h{\(Nh~N*`r*XH$ib 0@i6qCd05v xJkX2hJ^uۂfv 4e"("(12 (El6#G"reH {)!H#pZSZEp`8VAW7TÛ/u!SQ23 '7!a,HLaHUĠ ֠pG:{zuVqN 0pFA4 gk1#ph\.gB6lq}|%XAFSM: !/Z"XU{;nd!f8c¯zcj.\a?m"+V $'C.!C"l훌&  Ej3Khl"'<^1xP&Ndvt *"d\hToM(f2sHlw*߀{)bǃ+{tZ䬣9TiVtP8P"2mS EVVƌrÛy0 ͬd<IDH 7? *@r+t'6u,*a9 tCH@0 yX28N'r"0T'ǝ m2_cdăL73({q7.T'ha dҔŧd6eeY ,=`f z #(0~ 1H@LAƓ H` v(! !'rW"6b+=`N>@G! 0 (;DЗ Vce*21x˫2c.Z5=z;=r(t0hh&|urF & &j'JN&ms3koC3$HDbA $}`Ȣ L$|shaL) ND$`t@ALaNr럲1x]/Uy\deZ>ۀE|:)E!j'ݧД~weJR8WC ="Q^O^F~#k 7a#ZZl f0`s|#| 9rP%Gγ>˷'&5bi8 rNcϕOPȥ9G9͑9ΕC8 EA9rɼ491AP@,p3H2@ P/`8ȄLL C -,H[b8ȄJsCCXCՍ8H<:>34TEm5C8 L,GL}3^dM V7!'`يy% 6}O۴AImAB1@ rr^x}u@1W{2ʖmI1Ƹ('7!jsp1Mo%D/$ L .Qq@q!9L0Ʊי_8cC  \d}cIVds;y4 :jY Fo1Ʈ\Qa}ffa6߾a.Y/[3tExXb; զ+^29qBPX5$"@q`~/tYa s cxP#6uA4ChM.tbD$ʸxA}`LX 8"{PDH4m4}f'JRǣ@(76fT٢}HWHf:r mYRKE "n4K[ iD cK9>*Ej#DHXl(9A|7T^%V0l%i<:M f E08N@J`ENOd"CC1bLPԐI!2A 2Jۥ8 % V$ēId('Rs; @C?@P&=1Ĝd0RP:ĩUu=|P*y}5q5$,^P7.2)`aSԧtڐyC F@7BdQf\]R|D <5ЂZ<ƑB \jPHհP4`]cYXF:jd|ooڇ>dzaw`z'zfLLe_1Bxj&@(+ X,xhQ<`v "d= !"4` ` 0X" $2-ՠG-$g !$\ $8X/z!#@N r2Q{0PF3 @0:#,g@-.n2!. $-$0 ߡ&AjE,vP aNhCuw){S٧(KT]` zw1VR,45f"dp}A8 p͡1H1CSD7q 20$Aq!#>}PP"[  @@J K۰ es/gTfwU0 nU8zZ$@@7wRp% U}[Sޡ'qKW{r v#UQU )&Hqm"64 ?Sus@R55afd* au h

2%E" ,@9C$T5{:a4CSb7y:Vm.<  f%R#0 TveV+b HsTƔ  0=i]^;tMYGCN0jrxgS@P m0Td]D&PPJSK^7{r1u0g 'w1 N&p20 e}9792Q "AGq oGF:!QEv3@01pe" X$zFnmq 2!C |ٗA0!#hs #=F^jT{bCCe~iWl2h]D!j)`Cbu}C&Ys9p( At24ra r0q 1 ,ET =1 B 2QfP"zSR$zp9W9^ qeU_C/pYfz" t0 0 R y5I<]B`i Cqs: Жá*r2c*ꖠa(cNgc7USA!&W>I+W4U%J:=7A8u bG)(ec@@Q'3t,Nbpe $!֛ @P1rOo ? upE30:k PE0@to 1TxkeW#h .o0 ɑ9 A` RDH4+H1 =F̢Wa A7EUϓ+4U$3SHAG) -Vdua=x%Xػ{uS^_2ag1'p5t 2GE6 $` .n  }P$Ȑ0ӀbH]wPq[!2"<QJpbC0t`<G FUHy^!HQF N%Ս$!2 c]pB UT}sQ5Oe_(r֛7̒a]za%[ 1Sa)S܇(p!,x!3r kP]p c)2S|88 8@SE"ް7 0 V2 A) pUDp׵$IGa0OxZ<eqBnѼ}9.'p ptQ +'lfWwyBcdI#2AS+ʻŲ!r{3@ l)V$>sg[l ;6 >fk@ Z[>UA͢)q3},tG!2 H& .g3㰒1sBl\y4 ;f, G| /` 烻E [52 XP /k T+ 0[0{?0{mg[@9: qn;I ސBG%2Gѫqkp"vaNCQJp+Y͉"D& ģ֜8(>qI)2@3v0s< \ `xgpq< YH( `$V( DA.łXE$^Z}3%.*H Nu] G6E8eFQNZ+üy`Hļ~ lMXbޢⰴ0ސ(H 8h0@-<oŶ̑s3 PM4OND Kd>9K,1"o&v HiK[-\## ``GKAسD,foF(Q>ѡs_ (xOUAQ  prc~cM6H z"dd* <ɢ,M[tE9"b8+ ( a"v f ➾9 ?*MQZ0"^p@| B?rr )h ZygB" ]+>_r!Uj,HV!h,bw^z10%+,YY5XX# "G@ ”[+*l.q̈Uш;錮T+Z :ы<z3$tm2QyМN؈7! =8 SQ0Ġ,^U`Y!*\P"ā(wFu!jG ,st`F`BǠ$b:P#~,'x z^KjbyU&~ZE"I$ \Gs G[4|͍2`*풦f6%#;H(~tؐ?( %GմБcT;(آcAr  !^W^JPzS^i*VW8Ro#\3 "?9)7P,iR,vJ< :)-H)ɓ7NYڊӌJ='W 8A uȶžPW<…!SA1BBUBhAATt pٶ36ܳT7GZkosp(80>TFA( ROѤK]_uDP wE!_RQ*K+JPTl5]ZXNc~ G6YI.Mpi7$Y< 21[Q<\b`vuec|A t³ ʰQO{Y|:ss,H9ׂ5I"@X)Dq\Y!Bot30>$%X-&5xN "| #Fx%X64j '`{(@PS(Aٶi8;;+Ȏ*60;%x "%߰ 0)KKhKp ̀"h&4083oo#66ض.\@*,h+㈤SB?`y8(B(> xQ" `+ 0-lU'h!eÂ-t^,T'_xBU(=^<O|ʩ(Ѥ[,/xr  o؄~0P: S!`4(NX[X*`[XQx`F ͬI@b Θǘ z<+;+7A1+9<ԸMBI.؉M[SiD,a؋MauP#Y  $(M@F):9ʋ8ox,CCU=p7AP axG #` 6֣Sqx| X(ZI,{)\5PA:?ZLF@WG p0ğo@$B9OCDH.tX: X8ĈMp4?:3,Q[ŊъpeRQX;*: cZꈻ[Ga_ 6Jm[% 9%D]vDh:TD^Ft'H @({5)48=E'96HbC./Kܒ{x**u!ڪJy;8B9d$a'88 הr+\jK:U5HUk4@8)V :@p(Qو ]$Ijm<#qDB՟ȍƈ"]*1BOm#BKZ'V-‹h:`Ӥ`y 8+5S* *h_nH8(HM |+TН@p[9e!0j9 ~@P 8hDNP 3qЏde@`?i.@texYyoPڂё_uiփ8:.lbq㼋SX)[lzH0$ 9Vr@bE:: 9x:ߨ$>y(Ң,y ɫfk]i`hm` b6Xm]:I|P19킾2炘]hcl"}i@$Op9xوe'Vprs&(J MQH.0؋|,#;TOdoGchd(DBڊe&Xʁ"ٸqy 1U8IчIp33ԕ_K졀8$疮gA*a fV%$(&?8P."Y* h}\? pPP0/0K)9ZI ^xhO/!9.V@H8ɇ؉w X1Є5} 7q!Āl? Kf*:®#<®*qV.H~h@09FwtHqe7i:-`Ε[6%)-L@@bYd2OЀinx~QwPMk QQ8:E!PrWklq.VoH*m8f)dВD!DPDQ  Ŭ 1Ĝ ŔRl%̘2g[v եXΣ!t PXWR(ĈC] 2CVÆ@Ҭ({R .   _9kfVGVrf9rZ}ɡj.8!X/FxW$lM4XU-!3DG^N` a а*9RҢɅ" V)zA?HȈ$P$4 fWJBB vH)ziPt!A@dx r\u&`̖RѶf[vCC0: lXH KP A_t`5RE%&V@P$K&? 1M&WoXr lpI"?؄QFDb 6\ad acE  !BTȁE8IsRr+L` @.\ !o@ EodtyL0CXuar, ac sr̊o[|A 37m$8WXJ](B R`LI k2aD\V0`w *[ݡrPp/u(2RX-)VELPdB\SKrO( #0- @(˩M-v[JY?Z  sƌA-DR/D_;Q oԡ7tט a s Xm:0 0N͊2 %ETAY #F>8 jRq)zPD)!@ha:-%!]Lc ;FFU`yJcߕi d(xq-D KFx+WDB9-DPd1\ K*.Cwn|#Ȓ9hn|WI |=AN7I, n@@IE(D#'K| oǚE fa3Qэ8PH8VB@Y'5 K7(PHpP]X``dB4uIB^X1B{ rdp P^ҁJ-(pB'&` M $6X#iXR ';(i ir+`XiDv*-i8g! (̒HI;@70#N^bXŷ$L/;rFgB (DntgBQ-2#Pd,wq3虓7И! Rl*@6yٜXj%JI%]DLì0W#JҁTCIZZQ_L2^LbLK3 ȏkK+DOaxHTNך$Z\#@y,a#PW`Yh1 LBXP݀1Jv $±$a/nLF T @.A3q-V*2z)zR .1 4xD@5$4[[S `!! +dG )U[fBBԄ?$xziX(!Y2, Ӑ:3%0+ 9vၒ^ xWN I0yz bhS*=@!h_J+X`j=^m=y&6Q:&Y4Jۡ;Π(@t 4R ϴ5m R)KѴ)\Ddp lڬ]n@1K,MӒP"beT Xdm1@`#a` `:xVW0@o.D#1!| H1P4dl

@\0V*Ji(4XJAPGţ8PC5&Wll>A]#_I>CPA"'kTjJEB<*0pA38öUVxiAh4鎎3$1`WCPU_xGh4gdCl*K#VKȀteGeRhftCô\bu5xZC|ÿЛL9yΟ! W81t点+-`^ +,WXmzi0lK$Ҳ'3 ~ԓR LUlUr6m-^? U<+cRT 9h6@ER yCg˯$J ^D=C1iLhșlKtn")̨ò{`F*" CEВf9h GzV /#| #' 'XD"$RĚ-Z*`TDBR2 QRڽBQDR9CJ'cm8cAt^! G# ?9A1B+p@-Y @`g#\@趲Nh@LKBhLWisU:^Gz$@x0w)M)ȟ䀏R&(UGPG؄vA̐$Q€Qms5RK?A1WbQ#u^GYɈ مBbAJ EGb@Bh2.A c aX;XǫF#,hSAUqPMs7LD(uI4Xx|5|EL4ELd X2&`3'>Ac(#$҂L d `Cg&F/e6׊}3,RxGDHNE@"m#Ug@$8ZtHi.<|?. 7;X0]5E5*(¶na\@?2#No)p?&'p#`=O q3Qe1BC\Kɷ [|h[L KWCdQ3!8C"0B D)h/:6 1»Q?${7XHtESJK0 T┛"`zZԢ E,!HT&ӛ6@ h#B+J]G- TiR BI 5P@rQ1ϑ7!飏;bjiq10io`E`ZV^ tX{8س1> QX$5-\[ڎEf &@!kX& F @4 D|>AR@!T()NqR"HqHJc x*DxIq>#P% pC,Z1S GWP70( E3H5 U?D"[U9Nl8&~udHD+n bOǚNBAMh oO-p0JoG#V:**R\@ aŶڬ" ak!B(*":Lj`ŤQ YO`-P57 T6OJ:7 mա  AH60kRJph,w% -pFx+@M  #wNҫBJ+‘ |I& 8B5 aJ"O],U(2.fAU(; E% Q D. |`Ű:X C>1o0Uu/ P;R@G2OIpBArmTPeJah H[1r/QK,S@,1g<7$jCr" E S{WuFW hGVH!"@I%lI6&N 5 u0AHȷ´9}PZLLU4:7)HC@kQ%%7:n 4p.0 KJ|NK>#h?F,) d:>լ"bdX! 4]Ñ"h]h?a AAX6[4bt ~ RgBP@ ҺBx8A ؔcjMMxfml[O W Q@9&&ao$/֠ `A * p8`ĤA! F8 @!:P v@!ZA$ʾfZ xU8P" @(n`Xaw>ΆB_%Z^n`?~, h hVP#,arR\jh NPDa b[w&bRz&d2N@cb,+@ j aH,zar V" @8m8#JMZ j/!&ńAPRa/ uoj gL$.],5xHlpdg `ԈW1+ҰA>nԢu܌w/^ ("$\& xw "@fLZă` :6R%te֠Hʒl !x:VFڠ bA,aY8`v N+za?\(&`&K T&/>lZF_:*X !"[.Akm Qʰ*t6+dA@-Lbh*A _A$#>Zd?m XE-Rx NGҥX* oo,A`"*D-l.sZ(PhAdFad,Ae gA*ĻbΏ 'lt+X *"0t:.(l8$JD@lDl),#D%&iXdc"R lpXž >cB$ BS4^gͲ& [ ʏ`hڬo^o#`4N{E eH&T*Lj'$aʡ |:TbH!愱VE*, =SZ *f ʡ_, VaaFEk \ a $@KI0&>GbIzOP,$7RsTO!V!ER%."D"0 sO\`*1ɴMb΂@̒`4T ad5xEQR)&"/b"g"tX$ #S`C@ a&fA``zv F7*i[+A^88q& bUG.ea$xV28UAEr?h! R'$j*a%.mDz>TwJ,UAB2N*D"'E0ji IZnc5 a`> ,2ˁ ʮ HOF *_njd Bj$§j Fmw!zolA6`ĂG+`aMmHib$J%ts0O[6 ,f [J &DPAp$loJեBV!Ѐ2o5Y"ԩ&h(~m X`@4@15^C0>@D@~")S* &@6R@B. \K"k; $v nca]R)c?ʢ,8 8]Ѐxv z0k_]y VfG|!O 6*6*V/ȭa ʭE!A vST5L8Ha 8zAՀKQ2uKK!~@V@<;+Ğl &2( RZ'b`:( AiDb 2KJp6eVz05 # ** ̃6 1€ġALDʬr)Zhqe>u\ť#wl~Ym% APDbR8;y]A<&Hfd$wBb RZ6aV @$Hr2\_ e a`? *u8Ra*IRIBFzNB !JՕT,pjHON7N!,!#l ܰ_V҅l +E_ºzZADb鄊HB,G$؀``.&w# vbjKL0  a$(l*@͌ Eiak<8aԢajS#Nf'|րx(y&k|je4ҳ` \a f[|~XixмW`p%r&.@B#G'#QXNeD-D;z\]r+-A28/"|2RZEX `ߘ21KCf# \?J%0˱epoɉxlj) .oZR!]`d!uKb[]b1r@{R@ElBG{# /j$0:(no Hb G1_B[ Afz\(Af Qiha-7+¸ t\+B6,u!h)6@+ 7I`TX\N '<#x\>5| 3̙4kڼm+n@Ь( 6AqjC`jg 6zfa5|Lj װMK`fi8 DZ@p3ό4Ј[B/sN,}H 5Ǖ4 @e)EҨ .Qe-b#[2 2>E߄sX LU&PC!J3 ':mR5 q00O*p@"MR K,#٤c4ECpcbp+ٕ5 mSC@Im"KClGp㊆ xs%   8TԦP L`%YU?PLX,s@cv1A`&nI-Pa hEI Q 9>G i A32!$Q gH 1al/E1,]敌! OPY%8MӲcQ6! 7%m-IܭX Zt4ШECi Jǻ L}"fCJ?p<&/ XD*,i 0HP. ط) @pE@!0)̈́0l!p3蜄1rz50AD[d2sg-<\TӅ.@ 7I[AAcQP5VeG?2- ]3N& &2B?,1 A07h0f6hg0'8 =[JCca !/T՗\`9@  $'Џ%l"09$ Ap! -tAgApF9xv0QR NCBCHӐ81\C2,0ܔ#W!AeMI&֓()f,(ec+Bm ,p8QD!0Q)T1 `F.EeDL&s7kP І9 mS0up!-VD`d|AHF; Ÿ70А- KL`)0ff:@5YV@@)Aș #lu0tOH@`xp! Tx2&Qr KxA-`,AZQDž1n8664l  r>%@iT#9@T.@D%xbћPۈЇ7HE8 vEkC]a  4B(I„'ḠPQj+X~vNIg@.`1Kv_1 S Bbf;%4E;4BMeaK&AU H8̖þ:Ml@n@;H@W2| d6,[+rt ,,q p"l*2KJ$EBx@x:dCzCHWk1S 0"F`D-RL9&<>G82kjCuxD\ k(@ PY%bC"$ !.!,iX\Lh.+ld!hQ50 fEpf xG)Ӓa [.>D>N9rTSbB5L@qG+"o8lŐ` < Ioup $1 V1 h\*@ %ڰ iq30[$r+A\ِ!D$ӤWm'ժ/TU hH'' Dk@ZR,xPP2T&4M<p|C$lMw'l>1DGv_ Q ee Q ^3%Z0AI # tw`S0_n MDD@p OB Z, p`QBr w D 32 p/MCu ?` TSC<A ^ &5Lnq &FG~ 6!C/p#_M(1 HH0 G" -81rQ =`U}a"* \# /Z@ a$11 =WЄ'Z0H%@ J4#}J`D/! @Pd6PPW10%_"A0P+VuP ԇxI ( PM2pC YbD^ PS' F/r3q !ъ 5f ?$Sp8mpO!Pu<..X وz=uؑMYe HG! C"4 2T/@`~2IrC@EDm rA:",&xF P@' B9 [3IS\2RZ JQF[uDC|0 !w# A1'$/A~U1P!$S.GOv/%d֘#8 9yiAa0  (DIII .Pя APg49B@<飬1 0'Ro߀4BFt"P9qc\ AHZg([@^BH"(r"@5J10G$lEj'` ,s`(j &`2p\ * SP rLf0!Lp ]P ' PѕrЅ 4I2? iI^"3#QW*pN %c$c 7/ᦐq0qA! A(H Vd0qZ: 1PGD.(QX4q%Hzp 8 bl9x-B"12{Y2q^D zg D/ PFjȁ~pue AbFr iZ`(XtiG pæu>F32"@Iq1ldnla $'$-UBܲl ]V. F` k N/v/6H1ETfM4g"HYYbHS5 T/BC]Э J @ LB9 Q TQ9`rX_x 1AYJDW c^@xQ#M 13s3i# P `d kН/ Ȣ[a 0o𸈻P0@r?@]@2o FnU='06 B6ʻ ]"&ЎּenY ֫&s`3A w,7Ŷ[[006ZE2 P!A%Pq>3; r_<˂@"+%F!H%X9$,DR  @" }Vbk @=U *@@02^؅|E 0 ,Ikl ^>}S ᓝHM k0q;H! i3$0:&ϳ2fKZb u$a3 T FgI0;V O0F# pSZ~0lD7 4И9G27eP_Zn1pĐΚ?c&TX2I 4?:: )"P&p2100 a l+}@nAI:$L ƀ÷ P5 b d'J;pmP{0 W(l 1` RϑP&T itKU90mpE bNkWHc@ !$p? л/! ,J) 38eKeNcd%%+SfAmU&i`\b>}j0h[rعb2`?z 0dar *X֕e:K@Bśr,mMR(aŚ5(S2 G$ #k"mPAb!/K9hf+4lR`bd,D}Vpґ;(0 0zJXlD+s fC 6I` t*0uՙjkUn7+w.3֕2dRMt΃0!@ <؇`󅒟!3zQbPBUP %JG.KDQ@w}HARc"<0o>VAx ^bj ;Ib `iP>P{ Q(,D4H I\:;p~t찵~xK r_1 ~!xa/6x @z6[P a񌄋gt7І6  E"Lҗ:; b8_ &a#Ȱ9|}d`M`2$fE4z5 -P ʐeBT(:&vca5PėC96  iVnYCG 1t!| E eƗrjp;3a[: z;R% IMlag{@7se D}Md d$kp IHB '8y{Р3BԜsbQt.0Lؤ}摎r|`j>2}65k D_xGԁ}z 2,Z6,A %K.Ҷ=E"V,VP(Y!Xsѝ. `=EyKj-'t|?!i0J vћ/'ىCb6x` ( +X^Cl'Z"KL0+ hFS tr;K;:ؼ_n2zl"˸jw/:q&{1]} ⪠NI^=U0XӾ1 haTOY|]g HnnkGWh#` X/ke~4Tej25>L!3} e>%RAI -mA&@ lX}\0+ztk$ķ;xnCF9tOla~cJ-U0jWԢ!a,rH*bхAp*b4d39J?cy݂r0p `}Ӗ:g5HGUcXBms0>udQ#GsxUcc>tvQ{uM>VQ&Lvs?mGQ` \f iv "!"$~9zjCH4&qvfh>:%ltqK#VUu^?V&mShP;|dGBx$m @G"XLG ӥXs<}cސ%y >U[t4AK0 s7c* @,X3R rS@Cy&l}G/g0 MQ64ӁsPϖT(q'G֥z.d611Eby'4<a@ 209[x԰: %@6 S(96QVj`hUjxFYDqmd'h"8&L\S{ HA5R1X'P'dugtc@gv#1LE FR K#U8 R)2"88iLkI)4aufc9ܶ(>p ] hq5.418.:!%W%TF5ZtJV}5qd{-)EKTC&j#r 0 J`` 5I"fqgm6t(kU">;R` TZ@p(!7oSgzF{E/HsIUXGcȩ]9Q Ԝ H( )ppl Jci0Gu϶1kL;w!lN]F7 yӀ`7 @ ԠVW(]*3@\ le'CՆY@|XUT{#qKYThmsdd7IKdY|A'e10mBNPm44RMpSz/D1:p0OZCodG5qtJױO“TDuX59F; ~ac}jٛ>>svP'~Ongg 8y(юW 4PS90ov'sDVY;hM0wS{JXyOUMq{YӶzdQUVc ,q,1p3K@pO(g1?B~"X԰)RO[Op @2p)VRõ280 0 2!Յxqi>6vEBuX9jEX4TKC +w+wMP&Ll006 :K7Z`r Y'6P1D'ϓ`)@y L|`p0` PgqsjQQܦs˽Ge'mz)?wg! ae%w 61Ɉ&pˉr W0"'4<ԢrB'uYDbo'S>P S0 |` ı? uud|MuݵG+7TGopcʼO׽CQՒ ?T1&R 0&Ȑoyo@$3R i<@QM4q :`S%$|Ә}G6*P37rGlHu߻{TX;TTsllV4C)oҸmlӮmerp(S`ư``TW p 7[%|q`Z"e dpoGJqІbZcQHg)֦=G @CcE'E؀UpM-@toUx'`pՀ`;'Q"P# Xʗ!b}0lXXI!K1eΤYM-} !OA#jo(M۹sC1b0j:|*`X.#yo9bԴ/z%ۦ,c:x>JqZiE VX$VaP<4T885TeH@=ˬBǪkJ7!l"D$ݤR,G@I|0X`0$dS/$x(VZ<K^ VPȧr +z7& `h> cR+Ö#v$ {.ARws]vqv ) P]BLߩ", > )˯KcZkSAp 0`6^@ӖN lG0 cl/a#(^E>Ctf0 ~\`mŒ3 !N9Ly6Hblo$.tة,& =G `IX/\&NK8-L0æF7$ɅS?-ಮX`ؘ#ط&pv+Ry m# qY([& Q=;^ͣ>X|!f `IsQA zQ}k."*P(-Kpb xtBڄB0U@dxaPN F:|cFX ($8Z9E˄0W{Iiy7@1%,C#|Wp <O.2[\@ZiS1 ~0X| CUSP0 C_KЍ 1I}'IxJ oAG4P/@Ԏ,> Vs`N_W CԆGm@R)j>b(# &AdF }xAIRv8\ٮlvMyoaQ[%@ڑM I-yX1zA XB}z) KƏ}w%4H*QX%&aJ|jH]-@4D&c#>ܠH ef>%J.(4F h `ua*>7 %l!9X]-I{ G` bh 0 ]X42w7$jW&,ZB z`wGs.tǒ8}5Hъl Ad2&AP.]IXe%DPNb DIL#Qހ Z[\'`ř{Xg`lG2֑2DĬ.Bs24,q*h,P)b;ktWy T(v0$5B71@TdЕb>7)0C/>4op-UK&֐F-2鍣^I[# #XD5"huڏsG<Ę$z҇V5Q[i2Az޾bQyR@J^+G}̸R9 !3t0Рk!Db/$ -঳>t-F;ZUd>j 9@+TdOKrc4,$ .c>Ԥ NJ>^^"QgOy7 @]GTc l#ٔ+KЮ?Id9nSIBTShE"T]OV2I+c<K}Mqe uk#0< !V +,R9i99ۢ D48@ %' Dߩ= q'⁾ >y Yh>(i *Vڑ00=<+QV`h~HsHr NrҒ?o)R!kxk @Q!# T#&KX&@9Dq0}0Ġo; ʪL4 y+ -`Oٳ У(;y հDA`k3#K!3!hS @8~Ћ:.(L:t QbpX?[8})0!@#xQpD5G@HB)0 0Ra(yt@=cgg̠V+,-ܠ  V|00(aޛJQO`>b0fL]/Do4kl8x٨l46s<AGJ8 YxQ@*X=|#g06PȠn #t2r ”WA$XS\l03P%H.yCt @艕S\]>0a@kC8Ju$YDUk-FN`밎'*It 7س,d]K 'Rq̶Ol2(,ͬ#+05)l'JPH V8&rт*Yb0zD`Bg@'X"U;q@6?K(ʚ̈s$?βG"En9x '+I+x zF#D BRAtҠ苪# 0%H00f b.I.3lH%ӂq,)њk|l)saʈ@+ΞʇꈅpIR9/J0[M&{}뻁})=v3䓏9bBiPd„|8]*Eh5>O:P jTtP|PE 7 *0>@0?}GԀ,ڴNZb=Gu4т-sr81(/b"jɋ*6!P{+-c(7I"+sAk(Nr; D3P-UXIǏ׏~PhTq5XI8I(qqUفZ`R@K3(҂ы%04AYf@W|UeȇoyWyIӤ޼z x(> I)/4H 7~hÌÜ*`ڴ]+]Pp*Vlx&PV{^gl0p@D]}[äމ>@ ;ǿT5k C s"1obEBpY Xً\YNxW}('tY` ^HҍZ-HZ=bZրj R` . tIQHe"eN, 6o%cҥ -S!hӂ31̰@ J  osAeH)N{pD-bIEX+H2 ]R֋b8 "Xh :h>ܨ(,0dbQ88k=#.pe39x |.)[8(_ZW"4&"  j*--p& j橖i.^fS @Mb'"HuN |∀ lL1 EyCN;_x,: B8&i>8cPDqH*pM"}h ɘme쭍 (sǡ  x攘IBTH=Xlbu;r8?U6;8b''pehnXX$HJj 0A.IQS^\ 00R"wOp67(:0YЀ֎m GUPeXLB1Smm~PBpMesxE9Vp-0fTdՃ%`ewZm&ݶ x!jlX(XhVjfЁ>^LqXټ|-o N3hhb,aX)^Qv@rr\ЀYj |Z5BkFٺ7O t!*Zmz,:txVpMfO z(c!u_)sbږ}h[m(U ^ ^ejFqj^!!' >kbve{@{,OަOn)@ Hy<~ oP|D%JDL 0oZY2"GN'gI#sDʙcR-[0fi&Μ:w'P0`hF4(ҤJs @X\7a0 l`sA)QÄYb0L֚< (^P1bX)#SN\hqUX 6V1rA#F BpR,J.I ʔq7R6,AQL.*Lq6jX.c*V; ss *IoAy`WՖC0b ebЧl3A "ʘ ZlT9cL1)>V2q?h@ iS.ĢL7HG'V $H%R(@BGWLt'U|Lc 7[I<ɝ!0B[1F a'H ګ#G؁4KX"00E2J9K @졿t0OzP0U"|DG!qe;_Z S[*Y\W@a$ 9>LrA*e1r$b\"-eI8!$ RG1%9wqCI&!aC1a꒬FÆa A [4j(,ыn4PNvM`@ 8\Wa⹮ C֟_L\mF>clCn>a (FVIq&8aҘg8tϒ dR2,}w6B 1Y" qQo@4[%hn, 0Xh ϔ7dax@^79XH%.9#LƀB+VA8h1sdz>AT Ys A-z1b~_IbVgZO[Ap+J؆8eeVpg|D]lhLFZ6@(<=B7tG`D p=tgX @E`AET$1A4qMH]xCb~R}X_Ue\>`a@  x_uY,2 aC>ي<е" p͚UAZյI DGAL"8CQp"GD<2B\*6_rYTC"l[.e~V ᶁݙŌhYqL(,ĈYēqtd<SM^5 +%tRJ„-}\٬RMEZdL.Yw$Fbo `MdLF5KH6GP-Z6%I1ԁtl+K,pmfAno @0(DW$Bd4ܶ>mZMLsGJW-yMd.9WM/xMCMhpcFbD|}=BaI}8ɫ-^0Tij5ByM\%Ò@.ARC%ؘ&DN +xlSRi<, XP jnO  EE) țׇ9xbq%#SӋa^[5MB瀖K @%) lQ%9N=M9wD`{e)gE|ZFɐWDf|qED ,mj*ZMԂ[4U-o|=U䋰j+&_LO%7PI?E,*MiMBP'onBH۽$ƢQg~`aCy@p ~4 PÉ8fF@'B /l x9>Q&V&lŠ G  B Aւ=(N p2'4DZ_ԍ4:Sl$ < KjENZ[CԂW+៷#~_}C J:98SwXL E73EsmT0ޖHULnd $ҁK{{173 p}f.\rӛux<{vω78~R S)L׌^-#RV)S @PC5ziRK O9hzkP,9?J h5P0psIΜKs>-q% <<#3`9;riGv͑l6oXjE9Z} ̚e[Z=['u!jܸZ.sʅDw#h`ǹ8qڰ+;vh * qj%njpAϸ9#9>ãOz[,â,c# !jŘ>|$VY]N6H &00b| "ĕ$7)UC[*[d 8!0t`Cq=^!82FƂrȮ$ Z K< 8 xnOo৮V.3^5A'0 DŹb $l-@`pj.;_Kb$YB&7$pb(sx8hŒԯy-:Dc,gDB1D ]&ѥ a߂aa(&=c6(`dz/G2(rz)?-V䢰KDl @PKjpc#@kf@(qexlLLS0zs#M5  Vyc,q&7Uh50m+Nn{։FbʽAsxB\$>7Nx&g9ߍ)a yt:F,6 c:I (-AY娙ـdGzld3{I waC4^؁iYrHTɔeBDuMl%'a1m{.ca#8B6 !1\q3bg: Sɡ#o$a*1aPɒD-(8 Uϖie<eJt2v,K+?x _J ސQ[t6x4T723aoHu- %aC~hr',d-kF7P7 &noHG .hq dy JWuPs\j` !YA"ա8# @Ch((@>X!?ZCQ6me}N :$hXˡ(JhDDjRs?t0٨˼IgͩD&z'?TB 0:tڢde<) kP4tnNY&^˭"mg!h-\ЋnQt: Gp8g  * ` tE :}COMR!IJ@0ZaGHK5:҆~ BPBJ(abA٫APL!/)cOIc-@E:lbo9SD2!<;/[q^ffPUB]4˒8hd5l_+L*CQXk=BX/Zk{Zy +ip(b 0 H!zԤ&KMA4<'z%! D53E*@6l0XN yJ4"nyI܅g0t SP@V Dx45(M\AD\^>C Hef4^ 5/2~vjocl?^Hxe7dB70V `܀@G"k!yxqQh8xGXtE"zX@Rbnz*`Bh v0@RP)ta*bnbaJ(/(`(m^~-8 aa@ ^ t3讷R  >4 (jJPk,jo$ERFhL ޥjm\c c8 hgEvP 'OBpxy0U8qA bf %Pbhmza*``h &`o8ށbtXT0J(B@gB(!:A: :ApS`&7 >Ai /@.0C3 y/.kFHJCZl5*Nlv.QjknQc*2r㓔6O(18cq__E0C0p.a`P !xhu犲 0 wXqB rNz*,gaf!aaN@4& 3 <7@(p 2,zg>" @"@T n` bL*>DH!En5B7)Q:(J0lLl8-3s<7Fhf̺*AG@t$@;@bJ('0qRa:10-՞* Ϲ($^Rq.Jh|`fm t v$ր-n*~atggH/ !(d> 1b`'3($ 'Šb!RuA@4x/a526Cn>JB6*0ҝH|߆"4&@ksjfC2(!L tK>aܦ^Atd?Dg\kr.琧괡hCR!8U?As@xCwN`@2**$-k * ` F4B ra( #(T 1`n4n>B8tJ(z"~'&!b /j I6EPM42.i$9.(7B#=!TҜ9BT%O^2 w9hD CRV@eW8y)j@Q@'d2] $t|8\, B+B۲ $/bXd(oF TńFg&F; W֭tj-DJg'g@  2@gJZ8JPB8 >3@kv`P 7kU*mi ,5^o B"F`  ;+K,צ45{fvp9N@@#B%!RazhOhOAW w,iubm4Bk f (>0, bM 2meB!\dXhBxb~b{5 "pa! i 7t eqB-fhH#QHn v3LR$$Negjmqqvoems8n˦$=C@1j:n"Sv@Ԥ3 j `XEaز-VW6L(t (Wr`zcNfև2 ՗dDF(ʀGU=.hVc~fy('Bwd$0$Rk4Z/42"rӰj@lK#%b 3l^hjw^n,+n5 .wɎ818`9 Nd5#dTyj##xf 0w\JaVV}Ah۷hiPZ=3X-ٖW*6~`a 'KM/hB;;&^v/_x`%ڂ+X|JVN ׁ $d@Z2al Nd܇|ZA(}\ fv:B>`<:b' ZؠM E/7 3ٝTNr/XlR%ٞGc70lMœ"Þ5Aɳ^rpE.Z1N҈{-_d?o@TA(P<8~9r@ou,Qc.g*e,b{!5LœikA&y ŒD2Jj n[GwhcV4e6 ".PX6&v$W_tQlK6#9rOW(Tlmswj,P|ar8P 93(nǟN' Ѐ=l`T!f@ T h1D{H#]!Jۀ"}Zhpe8_$^[ObOXb4,9@r P3v'y l9xs8euADGAA$ҭoAֻVtk_һ-8qHCAop7KdLХ7@%G1KbO:8gN.t1kb2YΊ@!:AVA \>sd=a۱u[d#.` gH1(fTSBP BhaGJ 2L#h<#[@(wAKAD;@Zk%f6݄&9 uiv& Ց,a J9D(5 3MFV-J3i#>p'-V6dH7z|l(KHQVqdIHQǃ>.o(`fp4} U`;[E8 | =LaUE @4`88m(81@ R)DU5ct(D`~3(L| NvO$$lh$2K0! JlZԂy| R 􊺰 FB@* 'AЍji=' L_q\ ໘Ѭ݆zօ@Plx$ְr{10d\ZB7(e`S^ސd Y&/yT ,^&Xy1L\ +AxLqg<4g,o !QXD@$Ȩ?bgPPbsQi͈ Cȍ2C"*KANjWE3olFfF-$ N%960!kȨF F8߁5l7*G)-"tBIzeɕ*.\I7|#c@?A PIH`oLά^<  KD1:c&ExA!/yQ 0E@/ DPDB5Ps1bg;&}, ,.t9P 0 Q 5 gptQ ]>5M#]"" kjg`{n;v,=w GC @`ݑTD(y{d,I7!p!Ay; " I2 bc3T!cxVbuVd"7RE 030 h7 a{3 CcZ|a XIP |7}AR8Cd޳ka Ā\uM KM&q tgr0 R`5  (7 д=@W\DLdNq1a%2!"!zw7 c)#"d0z#zuI"a 0;0Dh HԖmFU= <<6R%xN5P"1̓S0"d#09r3oCXo7Q|I E 3WdϠ G$7;WV2WMP4enBA N8 0j6Pm '( oSۓ J׌uup F7I/; Gdq`!3GpV 0R!`IQRgG a`Yl;DVyH=&b 6G@Q>b! pI *5-X%EpP2@\|P|aT3K g>X<b }0J&k" q` 3Q " [(r @c[EQWP]5C@ -+"w ;=I  l.C8{FE%E9 F Tz`l' =Ɇ6hD!cAAG1'0!pY@W%#ԐG1WdXE&5oK> @l2ؤ~G E0e4`Qm(icz2t>t -so Ke5ja0 5`. ;^Dp`D("`y*%}/ Hx+0E%;Hb:")Cx`ɦ:;.^X;P 8BFgu0$pID|C.P2A$/)mF| `pEd|A<@ cS `pGcq YnS~ $ HrF 3 @9  E0Oˊg= @ccX ! (  @} `e~qFAm Vk R I `Fr;46"1mIX>4CqӦ7yVUg+-# Qj1-Ɉ/. Z.p#T7@FdFEFcpaP ŀ  X WCtE ,e ǠȠ X CP-*}@+x@6K@c4t 'pY 1D w AFTॅİ#N8:=E#%vTT#7"WU+kQB1 HIeTk,Vă%--m3Pu0#![R X$G dIЇEuP 7{ דIc@c?MPJK;rGYeF&K R 2˿+¸ء pE Ϣ pgtD ND]]$QbmSj#b,EXjGw1rSb!QQ8!*vFITj d(KG ӛV93[M @mq3"|.ӽǾ 0Q5{{LF<‰P )?tEK&YYYoQ*[1:̸Hz̭?6 t9i3T[f07;I00D8BI5S'Rl!}I1xwTt. .^\׈2ęqy0$vaVTp >7;Wa`6 70 IP Wk{ip {@3}J?MQK/<0ZmM0f7fReJP]@5 R2 ʠ ִ`p9cSM9`.F§ 3@(Zsu&>d8$1G z|=xJ4w.SG_2aĠ+ v{TaƸzF;}H;Hz3a#KnFâ b{P gNaP Zpsoa;7DxK0AaRY<@ f&lrUP+0q$\]ӕw6P(áQv3p ք@ p0Q*Q>; xG6Fv HZj i`2N.c8. *tZۻw9/3HG!ϟT 6XxQe'8 K .@ .3S06Q|y @ApX@ r3@p=ZAQ4  t:q( يYq믑]p͞. ܱ/I ڃM) 1.Uʹ i#qU ^ݻ)Hcƒc<s RE:4%O9 .  .6 ؑ_)v| @ \!&btk! 7q TԢ7 aXZݕ GNnSܠ Q(} !3 DT3RGhDWEAz QRpU.\&R;asD%Yp0`>˃F\s09r|c&KBudS(̞a -zZ^v-3Q=DuAi;^3.FZTb\K$%*c "IY9<܀-7br\9%f?}CͷVoz!C.\9_Μ;\"a9|V>up0V/4%#ioIǟ_?1*>R!yt((RFbaU Zi&u2#܉H) 9R Ȯ`.w\"*0jB *^jc4wI86w(k1G[+:TS~)$N%4FOW9MRo*%j隚Q` 1!VN]gQ:pQ/@&o 1,i-35 `3أ | o_ݠ6@&R9w?]tpId7RB̡gQP `DZ`n*HL"$jH`ǨJ)N"*da{zdifYʢ"`Ep ˆ"${L.4biHl(EIZTZ>E  dM'lЊO|ސT*L+Za xcUJ&o硜R3}-.;p Da L$F!9A!a|@ Y8A;>~&0.fFB$"+N(A*r AKt A,Ieo*`T00..@ 2)*4 c`$2f;E3$,*kQQ D; t`IK Z ^S ¤a)bP7|gzF$,h CXB/cBHV/$5$)!sRŭ0F+Њ-.j8V BЍQ@bG7,0µyXܨ"idurXO U؛.q(|" a ߂l_)ѹup WH&=x|t?< .c rh P/@$ .pg xA$k k J^Z %Fb|fE$sU 2LSdObd)KÀ1ȵd!~VtE/K;Hƺ%s0FOs! oag!(AÑKHVA娺I#K;50ZMRsF{S$@ HV =05(} D8 Td @T(%B6z 6Y80%kA9@@+Voh JQ%#Ā+؉3>_ (9X X z6K ɘR#,sH>78!I"2[~@X ?[B("o Hő"ۮ4p/PF[O1]腇x/T;؅v0/GΣ+AC6:gHq˻@h"XT(,؃44.XUHar@ b%+(H&3 əq Kxa=C@ x O3\ F$?+8K(3! @(.a <p  #,! (7X&h g荠q;墨rP҅yȺ@&j]AƂPTy/xD;SHYᩎPTMlD8t:F::pBЅ 3H(B*QPq 8>;Hq߻C 18O B 9K0%$y n IBm⫄CPʻ LI>(]xKX O:[ yQ- ox 81bIaX4|@L )㡎^qZid4kTa! cF 2i#g)2P;+ٔg;=HuAc H6˃4(" Z1($3ȇ5H)Y5l1&Y XIH ]ʊMȘ"O@qD뒎i{XB1 Т,(a 0:[4P KIHD(T;Jc"dH;].ݴ(mF)b/ƍ 8!셼.d*{XS(Sn+J9%TbXxN@0Tt/6@ Gj+ȓ~`,.|@|i8 BpÁ9'.Tu 7 -a{2x0 " 9k eU $&##.@2I1 RU 2DKY7hpY :8@6bVC]X X%咺\P^iX((U HAg  ҂0DY ҂8::*a@6a:gXy< 6A  X,82 62$Q: @D /XD;\w 9 [ ,qV5D9 ;?=^ b o8\0; nXTWPH'?0[NYMF(꺯ˁ EE[+0UL0IXS3){0GЩw Xn^c@8g "<,Ѡ `N XG|``咁[`Jk>: !@T :鸀7i31#.! zȟǂD69IV& 8܂i~7ˊ`>o"D\~HJ8oL#Z+\DxС;,@r;Z1Z X5@KߝyiT̪s dYRtS.^[1(Ɏ*@908pLVuEa9Z@AB0_ * p a9ʁ,8?Wz(Ҳ},";! 8z.ë]繭?tOl jr,D 绊y`9%!ӊo߳D(= ;9x!_,;j:8o@)h'źB\6VE/yț>8^Z@z؜Np/"`A hp*D;dS`aecM r/2Zt/`@I$ u1] '||ufϟbъrg1uM*(H`.kЋ{ȯƋ!@2tqϬh@ A&q*BDs\ trWEԆ+n"ctht]'@0zq` +V 8Ȋ)EQ!Z3k)tZ&A Ybp-spE0o+e)"hL=F£D-~ F(xXR8'xU1>! BzD9mj>lzqe71HA A8(|S0׃l1 ,@p. $udB^$@Bba$hh ;Q9dG/d!B*AL b*Fumc8uʝ"f"#*+P3?ETDc zC6bU9msohu1\A^x'1M`utE0dX}V'y4Cz02c%We<)A mo_{W26q( +V39s$/*kl`r7;ҷoш RXr1l;S hy`[w3%vpCbg$mI `fwwQ+">g! CmpqָFBC0O"­[ .p1a`UZg\S &yt5 p}f(k׺WhOA^ r0$L|c HR*`+P|IJ@/| H3/^"[9A@]C"@A1svWP614Ї-p`.trµxSbHA-&&3U?s1s(ѐ* )Fmh#"nCq\hspJˋ?ǘ] *b\l+HNwplAvuƑ|kZf c T`>-y7:PZ } X2 V!׀c18/"%Ғ#m:~3~A@%C$.PPPSQ=W(7y Rof=[5|YGN4H/5G*P`v4%3N/D!Hya܏U4 APPPX HAq@5Y1>@Ơ BS/9 s-RE+ _IE-@WdTwF[ pZa$,}JBc1x=o`C1oh1@'hiΘH n! W]KQR?mQ(UTX9 KNC@C ` $!DBA Â&$\A܋YɂUx3xA*X<˓@dD>H\GU m u( JFYöEZVŜ,B|M hT(e^B9cHM“ DX_)!CrnN@4TLt..-˲.p$-xۿD|LFY'@P>LM-#&H:D ADdxAB/Azp߿75r^/d i* a+0GqcBXr[`Щ-׉`GIET0A؟M:0l1@fxC($B"' :jk 9 ЄMaJ{ԶA1PLZqfwrtUDzC*Ea6Rt$B۵1AOlHIq_=40KB0BOD"ڏ+x4$&F,OD'D_h|NC-m%CTޘ?]2`| wt9EMTR+؟1P@'!E8b~PTp]4)` STq- ss<2K.+pr?0$A!.A@ tzH\)D (¼1UV_+Td@Ky.-tDKYmSr7/H"H qrs }]R@FLI&LN1v"0]([%*]TIjEIGD D``v g'![H8 `΃ Z>ќ+LK1$ Nv5N|áO)$8bQ\)Yīy0bζ_+l{Zz @r*sK.,gBP |YuN51Th_NIRv >65ąVLW EdkW"$H ݈D?O/!Z D=}8jjypT#Cׁ+PR1xgZ1@@jGw^-|wp&AGa/d$4 /C6u[F4XC  E_yA@Cx8C /仏)2P4Hd Dt(5~2Y0lxuQ3VsnsМKR%fX0RxA%p%U%bI``# cSHYaE[}U<9t$%;rc浮rurOL?7REtZA ]L&б'6oBќD5ߑ`B-E:`t=UPUip m]F gXE8Y (K m+uYzǘQ9Uܠc=Arv,{Z]S*;t-@ؒv9N*-`['>"j쨅4i6m =@9fM7qVyyzƛ.aNgN6ia6QDpN6 OZ9r`d(0>}6\#n5M9F0,Yc9$K[ɹ P<-M(wbl!ג&X؛7Yd)7h[ɩ0ƒ2K9H˹@ž5,w7߲瓸8V,A U=C Vi\Lj608:#x+;:8 W/? ڠ7\.Y CA,) pb~I% "ͷE:@FV ,( a)r|IW i* !.BcK6X3k 9+#lY gFL0tޒkPZ(BV?i^1l)W>=/O>a!9<9pbxZI7\Z|>xcq!#p \u`A>p!*@=l^6p)FV!b33 DT)d@t4DT+qd&9fA|; "ŬmsV"0Bvho 0S-ւZC\1EPLGL*|4GZxd/Tt0/8pf7Xb4w>ڏ~Ŭ~p77V)(f@r@"2T|L4M$W'qA@R$pbccX _`RH/&1)k@SQ)#,cW&;H!LfpISQ 7̩-u ayi[2#n%@CD(8aiʙtf4[pPra%#{:S7\x$^&`/oiiEV`(y(-\%>ЏEe 7H 4X$cR,EՄ%{i3JV&rhD#]8z%I zqrAd,0$JS(C 7߈E 6B8 yS;ڈ3# T*5,IZ[AN`:f󌦸:@tra|` KW*` `NIL$b12aMĽ$!`T_oa\ѶD)‰dt<XN@` T D)b%)x*v pi6s߶0mNX6i \0rIv8K-?7BUB.xܩaxp X2m5<7E(gr'@?dof!Q-N1 F3 8D(:@@4IMXB~0= ȗ 4 V( ATRÒYEX C{LD ZceKV '>?Kl~rœ@{v36^60l NGN o< < g8#*xp7&L,%5h& -F15SфWWBs_BC,!a~DNхt9'K$H0b0b >/hbFd"D ؔA`"@PA|Fjş'DAGp ؼI A&~IOdYDހt 6gŚH/vQM0C:ZL|F-\n.ED( p!E&k6 #-,!5Cl>, O>a /!A!0 o"&M"`A$拧a'nDr&rNddwP&IXR 'KX>zaԤBG罤 #PI *u&b8D@vja|C.آ !ؠF-(/(4Q!a HIV'd,ba`$z(bv6&Ej*]A*vX zFGd BHXd/2Ajv4;b'Nԇ! 7\!ތ#[(Av'0a(_@\az#@ .$``!1C(i"`t,yGH&b.XAA'$ Xi* _&MN(B 1 t-ڑKmfFVhR%JNir b`TlE`h(r"8(<& L8LcK퉋VB0G6sxRcLؠ|g klnvzǴ3:}ctZtNaР JXaA&@-IXIir$zE,@ w'!d!R'dan&AB (r& & e@i~0ON4Cq a]!;cpk ]i$S%_ep/_ckhJLT7&ζΔ}finT/~'tXb-&?6+O<{a4Q A(11 X J`H#c&na [Z1B2To"~`pbSUw(-r-& H ؁&©aaenU"0bnD#@.ghee2[^ĘVBH #@o">\E?zCT0:tC@o| T0Ƴ۾L,n0Dz'"q$ibG+2֢V9nS%X3dSs"fģRR ZWyQafG"/`s}#e Y t'_`"T6"kA d.nd"TE I' J6a"J U8I 05\p% d-L.Mް`i \ed/0e NWtV^:$fѧ"$u h}8Mz5h=WMgNK#ืaW$D Ty9HBLu^&Y-bB&tQwVqBk1@&AЀVEXjV@Br"8f"! 0+Da"Rj&0`Llj-mF?V|U h~k4\HO|j|2 mFSFv\Ρyh:>#&[qc^D;qT87H\!Dz޾|st7$~7ca7>]]Y@Ё!U7AXa+"|1e `^i$$F@A,l"^UIx#|$blY@&$ 0 Рh{v Bf Fa 1XP Kl͹Ćj-h 7}NXd 9) XE#'R0bqM;V%Z 02SV4rJ>e)Is:#Ҿ9r`tRtY 0`[?iBM?Y ^Q [M0VU:+v_b`$;(_lL0p'c0%6 zq y\p2 1C,  ɑEa+CՐC F#+0&N%s̡Fч9JC-Y&eLoX+D0A0KԕVY%V]y%g#N9Pc tղI,`B(&mYL1(E,w (o8 A@:P+Qq88 ]9!~НMl8pкqbtFN*𳄅(/rRzLK~k<Yːo8+J a99BƱ1@(4LlHI.p0*1] xk ~D10@>Xu@&Y@^T \&Mb %XK !cD c lMP`ٖrJ&Za&h#BxxH /j ]pCXl-d:Ajgпրv}Z[dvP#])WLo5DvcR !QL20K1SsVE8s(8q2sH-3l@@ CO"hP 4Fg176Q   pe !OvU p 2**,@+B 'VUp %&FS?E @S+P`7`#"@`uݒ ư-Ca#zT@0 pk 8,|R)0E>vsV1V1(9ӈg )%as3irZ&ttQ)HspWL|e@gts6vd!,VN0s(# )!R@ Q {b!<*9.xb PjuՑ,ZlaBCCo Y kyPYK.oHjhUұwpn!<$ppI0 t`/ԈppWGP;A8 l?` d! ea_$t[UO1rR@dE{Pf"BĺyseCCW}Iq$pD(Q1kF4JBSa7/;DeP00DM[& Rpr bހХ] %Bi8@,ѿBo!2d~LGA5#qc5\24_qz״u:Q>z@/DWWLM<%|3~燫9B4EpP"SOV:2 P )&^P 0]lVf 9;Ȱi"F)~bd ?pP$c: mY@j dѻI< Bٜ@V.,v@1Ȣ@V W J1u)C3S1=?oA`g=?}Eq]yVmk^QS&#r̛Jw5kBhb% EY<]j#Pj"fu* `'62\ 1 DbWBZF=`R:FgH,} ox:+ @ gPz ܺJ5 --in fIUAO.JwpA%$0UKL5]h{Z3eSk{Drmr̾`Q"]}h$s] ӹd0cQ&3  A P 0 ] gUp'DVwOJY*"ڣ9`sЮAF8@ r4@5 te@Hi:9/=pB:X@ ۵'cؕhAUeW#ޡ21I`@L[a1=& !ler|d)Lj3Y+LшP%aMb ?BO%0i.7^"#z׈ e[ *AӸo=a0 ,]@!!r!9!{VbD@HI-m S{Ec;A*tD I ) Vo @Q  r !`Yp$&\Xr1vE1_ԊagWYd(?A %%RG@O+ͩ}1ap j7*'(Mi Gvkf P=B+4}p\oxL03p R!8dHBC[Td3]lT]>8S)qEP~d2+L^ASlذ TJe,+5Z[7Ҙ.sG* \iRZsyh kgsc70C/R~fCK *А^30@vtDHVT??h80"J^' !#i\"D rO@"RxED+tHІ;h%0Of%&!\AE $)e`A2pi! $B9 @xφ1w# I7fM,]јSC峴2FpBWtV cRc6jdS2Rh6 #R~"Y6 vfLw-+㬈}# |5F 5D R5H]襹Tt?CQ&gD4:rӜ ҙν .j Cy3qg9D 0BD<ixiآ8C+` .4l}DQ(b) :~h~7ȐhPx,uP.0`oP<;r/ CB>8 HzaP 8ZķZ?Ԫin}b| < HK"(ȁ\ȁ*(i`Ӆ,/p^`d|X=! h8Ud`(90ڍNr kڍ.C ғZҺ9ҡ J30q3Y(йѹ(K4#ȓ00K 8`A6 X;*RlVlXHX0S`!xXD8;Ѓ: yB0(4< Hڃg=(IFH@ ʊL ApxybCS`yCj\x[PJV!h%`sHhԸ#ғ,|jSx 20X8=|>QXQ(@SK7YH8ixhʫd 6܄~G#*FarpX5-b1`0m( ?sp+ Pm(p̬`$+ȂE5)@U0\e`.UXs!! O.e';٠3Xຍ::٨x.=IǠ24Kؕ IHȂ<ihMR1,V)-85-0 -qV b*E(G]Z}'i:`ۉUp BKt!>1R&-k:8xW*E(G1XR̩rxSCJ0STSQX@. #8 "=派˳Y>5Tԑr?B ~J@:c99= X\@h3P ۘ) ` 砍;AOXFH,eP|Ⱥj'pXd(I s(;g8$ٯ Ubmq ,[SU-ZEQDKP8_7Ўsxs>bІ.a 08'!pa:`DP :8VV*҅o3mu)h4ғ*f zPP݆?"=B`0j xRd\3I)).dml9`!i uYcui?9WIխHs_9:;9aO@D3NQ<ËTyb80asЃc(!ȇ.['x2UPnrkm2Kx#Q3 Y4UhB"P lS^8T Qr(Xtrz󬠯 ;uʠbMbcKl1$ʔ*WlYɗm &Μb-6j%ds|+>`cΝaTD}+U ݤ5 J1B'pEY0Rd>k`pTX2@+2?P q<#t`AbAL?]@ Q  e%PEA"(47G9F><Q*E@(DPUJĠRVx44f*W-䅗c;eM-8Valz00FT6%)1e[`qFVhd$ʛv7 wr̉kPv s tCu,#JVVQ9YyBD{OMqdieFZL*<+"sBAFh V(+pA ɉ0C tP7|BCA<貊0W0|#;N$ RbՒ2W*|@,h^tu4|40(f'liMeFbKlkX7=xwyMj 6 ZȰq0ɲ)2  1T ߰@ @$'!C2\<.AAp'(0VQc<* {|>JPd??6eP(.l('RNAl,2#FR2XSH%|yRg ) &-/~ c0H b9_2`NPY[栚ԨTr(Hx 7' p K 6 N@`(FaTv2qrL" 5B! <(6xFe02քD0/'C O(\@Z=! J`"Vr gg?F//+ aWH{aENg2uP5a|$x=n6N`pV4\5M=j4R .B@I;0UO5"j8Μ±DqP^%b7xC1j84o8(A?='Q+^!Pdx(zT?@Dqg ,1=y|P ~(+8bC$#UQId1 T Ih I"bLi"PN14aXAXj`ҦAJڍT™ӝ|6N= mbVO k$PM6sՒ[9)jZ4 ϰuQxr( _MV 8 Y $`×Va c#n@!^,93E: Xθ ZpAU#l¬ iLaoB8A+cְՍAjĀ*f*gчt] AHa"hW,OP JB> ܂M+7ϢZYE"StEAA( 1%x؂Dob @X fItB@\dA z 0$(<<UFr\F^DցE>! j8-JJقƨWI TL8A`Cx ZUEyt+HSP@%AME4u0TC>IA؏&Y6@e6jAq>\ G>jA q/`P:|`U\CLTOei3r+ B]*d%P ?O%B/Id$o8;Lx8P, V08,yΠDX__I0가T@ sT*B#^w%V ظ$b&>J(S>I,D1ux1_I>A T˕hNKA%?2='%4@sADLB5`H0e\Ę[i$5kaptJAQcqB!PWNH 9E Bț5F" Y%0VV!yB-dH29DMaX9i|g{2jj dm@b($L$j I $~쩥rzD*րЗ jz"Ån 舘41 D^Zd/dá R``]tڪxHCZ4]zeM:$ %x0Oy̗dH(I@O2BPٍXvA!"ӊ"'u!)Ȇ#xaPؒb$-v`;5w^*G`טY rk`51 hA& O-euV(6UR! U "`ܐ pH~R8j/K (胿A8axx3BLd)[ky`BhjvdU?52-6:KRbL֓F3<fL^!S`Q&!jXH( )!xTIEgBA,!@؊ B<ѐx CT1 'xC!TMP5FR) $@ Ȕ{Lf2)K !R Ѐ M78"/`Zk@`=-A`8 b ,"S񅙬%]%2SsBAK8b AxvaX*&vA =2~d!sC) :-Ebx-dqHTȂ7*~|C{̈Ƙ@FA!fHp McHʰ#ֺEd{o:dph Ps<'!LEp['r{]"T&[88AZЫ"-,A$HC -h+'Ppdށ0Z3(b5 FB {l ;M (9%R:\bhnۏ6 "p:,҇HwL 0HnS d46ɍ |M`Lb*d *EB$=S "8&&8Âx Xp` 2s!BJgE1h /8g'HH.AO sn @C@ VtAD:<,NUTZȈ( F@[RtPЕ,a3!hL@VP*f d5 Am; iq[\m'AR't2Ms  AJR-*|ٖa 5O3}>CAxT;o'LhN Ov!1x78M" G"0 I6!.3H 2<!BAѮM= 4U ٬QEM9 `P>q 9&iRɹT@Vf^@<%r aP@;%HSc1`b_4oY8Trq\ 0Sv¯TtVx.R!:#$T lF`qݍ9pK‰"R (2D\̊@80;2| _MO緰)!k0(T~pk;;|Z#λ@ @zBvC<"ub^k 7'n!ʹ,+R". -c b ġXZ\BdlAzazn+!&fOG*JEb9ˈ #- {|̤h@?X*@ NA #TFA"2/q}d apAs v~,o &VA!rD@! rC \af__.Ba)KpH&p)d !0H!G`7Dbjrt,1]/!| d @'B*F" @hnTg!ր(3@k) E 1h GbipHn?)^b[d & jABjaT |fMX&8X!9DK!Aha+d$#9f D. D.#!!.0# Pq$#΄^#D#*(HLjC@  8 d,b' | Iꅣ!dlbarLHAFA Ʃ" O!qf#x.MBjA!v[N#pm< T %zEzܨB|af'dnG*@mb)" ż J!"ayc&rp,s@8v$G|aVXG΢ͦBRT3P%j7!cZ $eNK(KSq nh!*D"@X@l   ڠ ?&Ap"& 4-Mvd|!GhAڄgN&Bc>pN6FrO 60pAZ`I_TdAML @*j 4b!LϤB"!*F!t#bB@jH(!6R^ Td*! NA,P##K!%'k+cgGT30@z!T Bp{nD"$:e74a[ j:ASpM8X!  X\ VA?@@ N`U A=+hf=b`>V(0 f -B ^[X?^">O`jVHµp#| G%r"qƦ0#ȌB "^tc `X/a7 cj0 $Xig0sWD! N"**Kf3h@A!NOH}lfoDZV0hJtAj 2- |!Ad fm!d"(̱NE*)od{А9C x!кBJ\a+fD%6`F!Ԍ/]"<N R tXƐA| s!.$HňG*Ł~d 3KAE  2 @!{g([Mf $Y=y  >E`gnbc -!AT"@,x'+ & X1 JqAT6MlefpFq# `z'EbhA4p(f G$0- @/X㫥`Nqh/c%FX= dW#) d.lXAï// XvbK^;Za&ӴWcq 0"ˈ&`Jǖ,  L=X/.bqWta+ @_]ax ,fRi VZ2H&-cyvn%̹q`$K^Oѩ>AjfMi"7&n+ 8.#Tq7'^⃇TE \,$".quD%Lt -`'gnd!=f%X6KNjaިNel>S8*j o8NaVCۂa w o B "WT5"smAҲSBLaZebrQIv>SϡR&an煡aN, AL_9tmPxA"7&jCfѥXAB ?E=dA>Tth+=\.M ̟,;ݺ>a#SOP b/{9!ֵ.ɨ@dVH7ԛw/`VQ \*^X rd@$| ?D rUڲ7YAJ~q;_'@&uX-2b#(+ހ{!nzPa8 X`9/o&p%ƕ\ VnH , @ Irb!4''a $7dwB!*$$ -$gYSiI v6;v|`IeCn nX\@Pd &@DޔLr J ;_+aʇ\$6!MW(@@,7I~Z/\t =ܻ{^Ùm%xPO uh0B$]"xvjBC}2DLk@`g ~B NvԤFX~e{ؒ&m*K?5ƥ1pv 3DZT *&P",S@T8UвLoPf<@"XT|HMr1 o_\؈DbհBs!Mjd}3E-+col[YR Z{e ")3s M2s`Cg,@Lj\"A76Jj /J#O2-sB-}3H UO\"/B`>oi<&Њg0 Ѕ.`թ<"iE+pQ c{@pH`V B bf"D!2^J @)H rM 5#A 5_A|ÿ9 )+~`FI" CVPQs>tT9`#`![] Ix 3"GR{8aNF 1yjps `3 (\$#&8GphAT4%d8 Zh;E-<".AQ j%( -x<3R` %9@I[c@!Daǁ..Hs$R#`` = $E,ӐY"g@8+x(YHAp܊ ӊotZ X$(79Q7x+I Bi5xc!8)V kp;( gBW~Y8/(4( YA4"ݤ}xQ{ P34 C9ҢtZCrY8FE~$Z*RFpLBtQ '";R> 0 Ce*LQ|]0o 1h`1p&Pށ] ` Udpb0 YRxma%D#0lX.*PFB0)o` K1A`Y!b) W薷TdA|OB"4„\ w?&AD'l+j*E@ԏ6l3 X&ȟDQsq|A;PIw<0 " `ak0A9kG^aʳŁHK" PK\pp Z C됈r<('&3E3a8fUn7t㤅f*Q@g1FPEUN[J-@3P1 ăAZҰ ̧ 4)Oe@ECRFI9mPL()h껝7f!0)hI*}<4A.|+ȔJ#FxNLo$!ˎ1.|oȮܿC$SlELZdl s LH AN 3 d|T*c(pSx(1@cMJPިQ#TK⸉ KYn-LEJ_Ӽ$ <9o6' f=b>p2;&<5U 5 1,P a gf01*WE!@^=5@Try짃b@8@1 p7 `" b"mL@ P7Q R\~;h?5ys6(Dgp*g w4fqe$'D AXDr^`Peԁ QP@ @gp5ZrȐ+H-[ 1@81Ӈf(W&qa`M`!.0 T8#19!1ZJsSEzb aOfTu% ps0Q?Mt+s24V_RW2n6B*tl0X@"z(>5b$vR G10 KAO&b23~Ɔ|Q4 G()U[i} ,_ []nHEE+@ 3I !qcl`8-]' '`J4i:WvWM-]`M $o03٤ ,0 ? O6 R3Ph0q*Q@QQHp%[@*ޑS.)2Bd oC&1/%zRieP qx@ iR+!VK1"@'x:0 P&@ UQrJlTbI 1qx#dz*w{avUE1QmTYYπ1Q&`P t` c&jEEБ(5 EE,83pr櫼D%L š^6S , @6k ,=oaP!+U >V&ΤLodQw6QЁ5Fp>@=El`> A 0P@R(uUut>O'_uY.q@ ksp ڛHqFpjȡ=ز4 pVs%. 7L{D ?8)&%pK"r.Wz@tR5å 8H6ҥr'p*tP@ hu W 31QY0t.RJ"Fp'Tij&=E~7R zk o[USd>,t tj#%p2V4H Sڠ+ 03cD[DWmPu7\Q?0Ebh@3aA$?pxD*ڠE 'EyE# rl f p2r s -C!S @ p2 K-Ri5&ߡ'_\R J'R3&>i0l & )׳ jj OugFE 9 u7PaBC't0ٴ A[c@ח 4f (qQ ŌL?b A vb X@lA4!#p.,Aa@~PiK 1ɋ1<F[G0Y{VW 3 PgP1\N` 5B ڱC`p ޳Q Y( !ζF ci   UĦK bОk `(pQ˘ {=A 0ܰ 0Q]ƋE.j a Gò0@lۀq~u2h/DA7?qLm7qZYPF@(WRFs.5'יbS&P& m` !fGHMG &!A Ak pū !rWP{7Fh {*a(aZp1`/xDC9+x[[ rx`f}%uТ-TpAC&GS5-`=?ap 8Ҕ%,K ;ۨQ(}}F(b{e@@@`*8yJ3)0tJ\&+GY  Aq `\Rf  d r1 b uapE;M]Q˩QE7;''ũـua \W3`.A!\0YPw\q ;vaBD 0CX4yI.ܑNC<2it>pZyL.$K z ]Ol}b{ 00JsR@>R@ X;3E@aL QC~W 6C+;]$(s^pƮ <]09"5].&":Y0@=P`"p/M"@*2;Ԡ@@0d,V\ث[` yəΰ{)ƐkR4(t.Cr^NzA 1!@@ DPB ^ӧ,X+Plf9lqHx āRLgꔘXE Kx6\9DTR ٺtJ ,87B 84 HI :RRNMT0ý0ț'Ra-_V8[7<+;$3 Oel1 T)=?AtS6ZNP~'0t.EIYm 4vt ؄3/J zRCHn>hVH< &@ '\( d F*h^{d ̉Je J&VXc[B#(481 (8;3 i _f8l\68GJ ހ'/jZe;!隢g$OG-[8lxC bXd .xDChCJ F ABLQb BL e~F0P2GEvI>WȂz>oLnH!H g ew0>BS*&S fE R@vl}gD n>jIV@i<-¼(3 Zʫ@"¦%|2.d+uEԳ9@ʙ)03(`Sna8HXu{bf>/FyrX62ANeAPղx8L3BxF\ PBGP8q@iz%!^eA bc BJN6CځQoByzVO˵VKbQ oB[vpÂd&aj upnm|aܣ.}Lތ 3^zQOT$F4N Tӏ30eNo@ ~.…8  Aa"r,+@T@G, &2=u0vI<@ cXc ]K(Ѯ ZGr`2"% Ӆ^hÀ``eiHpJ̈6, %AK" y̧`-=8J .bl$>!! hXJp"0xĘ?ֈ2ehL 1`l Ę"jQX@f]3e}Xq1o;N 1XMvU {RE(bC5Q#2b7,@@! , TH*\ȰÇ#JHŋ3jȱ$CIɓ(S\ɲ˗0cʜI͛8sɳϟ@+ dh.]&E"PJJիX.wpX_AxZ0PUZӪ]˶۷pU%;.BmJ0u"c`X.asZ1ĝL˘3kT o%\W^ނX=8i`kt+ؔ邪4ͻPMJR]NX@kȫ E+Ь#/ËO~҄b`J=' 8T pOE 5Wށ&jprLi2뙢 +D2t"E,$W,BW5c0f2Wy<zPX2 c-uO(k8¦ OiǞd%d, i@WI T,@AYH`-eA7zj@0q@^1'X%GAĘ20T>B/ I@xNAo5ʬkHk 4S}H(l00XʸW58օ?ZJu+.| ` I#RƊʤ7#+ңYB Xyiyރ&wbq {lA{>?p'00>P@˶ 2ܬ,5,B2 %a5;44mM 0I)PK-d8@>T 6 188 @D ی7Yb˝U"Pl6c2#%YphPPPA*|x#@kr|4%` B.2B -Ui9]dZ/P`lQ` 2q7V5It!tqf7| 1I5(F.\|hE+`nJA zqڑV j@4Xk: i4^ht *d` uh,3lY]\2)5–3yFmbQ@& EҨ֌6hpҤZj{$ ` &0|m 8 gJ8 YІldH Ks(#K|CuӢ0~Hd y@c3yS2 # αh0~z@Im .` .# Qp XS*BIb X.3#Àğu4'_F/0v`6yd;#D@6imހ$5ita /qQb)ЙXA,R}@ 7R104p0Vc0KXy V"`6Q`T(&dUfdM$1є}P:}R (e7dA Xq ?2RјbubE"b+*eT H@xV &5i+ VhV)L%KX6]dHxYOmagmI?]` 7}A?!x cP&h5Na4vJޞv8F{[=|)->)u MBF B1q0)dylzQbl31[PW rD|@/(q, EJ%`^0~ Es, Alb vHDuʋ/)h0iMI-NN4VԡEPNpP1jmRMG|ہ`ȁM 8 @j= 8U@;F|nf&PC B`LmBqTh! $v T @:XP&+ہ @`@488a1nMQ^ն'A`XYDT)SZ0C(L':@4|`Q5|6TGnx\ @jSd˚޲0  { dr\; ix G{DO0@M0! 4oZ`flGuwVW}ću( o&+bł"vZtbejW <@ Wsz5tzO=sbd 5_.!iD6 v\UB% Oc1}wj.)e0}v;y( ujE pv G%b[vЇW'`'(DHMpZ q$>x xsIAdK50 %aYs2&%%@  (&ue5%F%UqoR6pf,u#|  of!z*D$ `#&pv U޹6j)pi.Lvq2(İ5m\`f(9AAzĝexQڐ@)k ALA# XH2%: b ym2K@ <BP_|Av{@炾Z|~}ĶG[Fuu4Xh M @QġY^Öާ$lR_a..*b^q̈́pm@Prni r?8 ydd`K_&um l1njZ)#V`糑ܹeS7ʿvq3 |F MuD o]{&ڛ7b|5$;@g.FAs"f~$.Ti l  ;$>C^aW{Z&yiZ"2 p%tztRJ+RL7†QQbbśL  'i:` )X m zfu|MDJ,kٹ +ʋbb@꫘*0^SXcrHa;I$b>iZ:;gOqZ%]2уV̚K&0&OI p dc*A (d$egP㣣Vzii:?0 [^YU\5ea!&̮jEGP,oa;/]+,Ckr,HLr*Kܴpa = &> ~x.;bK\;&+`e8|tm TNxt#h|D@B((s.#B=ͧ#v(?|L(*~((BURM ehJ;u-mkP\`#&X+kTG*K+}K,a\1e,<3K e= h%Ї0O 7` 9o48p( &p_7$:HG .Q҇\+l +"N:סwpC"]HdmWy8ŅPDCЋ%AFT%.9ؐ^)CAb j1t"ƥvQ%Q>XT1&ޝ'QFH.$:]J,TU 9a؎BDO q$mo}1aTr Tdv'LdMVBNL2JI pT`t-c\W=TԸ3,[;̮<:F:hU!ac:'`@`%&DV#ke8}X;1`D+ S-.hب쁖# " BEAhVD ?SLG(1.%SR-NFBl/6$-YDP" 89DJ1&Luv*3m$H4ZҘ ~L",^YAƄ}HV-%Nb+TVkթ d `cD>Y~6H:xJ,l8CxFv. 2oQmĐU&wAb@ ڄbIpF1:PtД$!n3lT@)P W,\Z+hn A(Cr#fyY4 d҂k_ ܞ` ߭L(( ҍv|R9 7Cq kRkZV^*ghaȍ"ZNڹ& \h`r7v&[x`F|R]'/\B@jOHvGOTk|x,TƖ BI  .Ksu!Q# rQop;9RSPU(2HqHU' @ye29mÑy4%KKb<\`(jnsWp{K W8gBVS~`P.V{2)-+ x#w(=D2?/?lD>H܃ 0Xh @`1IVy@@ ᐚc*YيjI Ñ^U YwqxĈi (z =8@` 9~ <3/ 4xW*0ccXa ;:!;`MaCVqCزj;ĈV@ 5( ҁ]`ĆtDtDD.?@3K( SL  Eiq "rX*{ż* Y8oA+LsƳSF-Fbd(aK666`X]ٷ !/$ )|ar\:X5;!0K6K8z.eXVl6hɈj`@dXIOH^ɵ ͉II޴= ؀(p (6hZ(MJiti0! 44ʀ*ol, h BRb<"SZSmh966i5yuB"_a015# ##\H Q99s>h8@I0 <$J$F|2膣GM-}n}N=8[hN:hҔi@Jj!>UEcA:bVDb">x"ʼ@ָٸF*:=Pi;Ato`9K|+287h 9,t:8m 9@"K0!uim1RFTR! oER#I-}GDDXIDqЈ7'<S6Cٽ ;KJ 0\xMPBHWWyJp|MJXGɂ!L۬03Yp"t<c\A%̃bb3s'3Բhرa)ׁ ;/R9TY\ x*20z5D*P8 o0vݜ|A} #MO@XQ(\(ņ$ST)8Eţa*ZP\(\Є(yTM(7Sb:h@|ehۅz ,!ϴQ*Y|x d]Oky 9hɮ8tI ^cE Σay%w5TO9;-KV#XB#p>HBh>cʬv@{8I.3QxU$$-ԉ擂8dѿ)`} HhvDyS@a%JEHp$ 䒈(3K^O3Ui *_W\mTmHK8x *E/=@-V닄(1{!:/r3F^B>i pHJ&QC06!d[8Hz02?CRY6X@@@R(:VȻPit#3`K@؇d>gN#(1ȕC̈IW N``E((w *` *ꭜJ}/q"cI ;d@0Jو9O-(ZFP v9`+^h9SQi2V`l d#V6`![uK@% 5ȇ|8!u f!nsV.2`(8XvP2 ?jHP $hkkak$ PxaRJjA qqԊ"O$Ohhl^bf U79E H"0^hD%d\cJ"<"ƑIu>%ڱ#@aV 5,Y u<,KdIѣ= 0򠩈HHTn+QqX`i^ƈnScVpV&~%4r|V {akq0;y^ ao*8&hyp:%qjV\t"mjW޵YA @ 䍀' d UR+A΄JDq$PDA![|1mP5 4NIQ@gP/7 UiB_5`+E%VSR\1,FYZR5IqiZ6\``瘍ؚu^V@ bbbG]jlNEW8I,!T:R<˧ AbgȖ\SIo!ͬ;LRN9L3u O+$wa%B/I`;odn }!#*,:4XKF@1P,  ,A@8( n thCDV@k oY'|R HHx,hY2r0 zGY` YХ̈́iLd!6Ue/rDP.q9MovPAd SM7|p OI]" _)(9 蜢іb7pa^#' saGrT[/O[ ׎RGY A"FL ?6 %0)E6 mL$\CN@ Vx ` '`8JE5.q($dQ>a 'eK`Z+`CSYZN@%mL2KX 1nv!"=MNkF 90),E6Mb"Z1>/N0 -I^1n")0}搝VN (CuxYY*I('™$O9Zq"d]KI/ })0+ hH~AK"[_`#+"$$Z{P1a ` g$bW"pqIs \m.%MmIY*j6=ft!QD/usUjĜ/( o՘ +zAXD /zb07p7Tnρ0`RR0 0U@BٹwlC$ @'^A>o&:xҔAZq ]BZAd Y" h2e$^B]pYa2ARMhd.Z4h }p#d 3  i $AP. o,̥`Fqkkw7z;P-N kh+4kKȦtt(6~jhv4`R F"6(~oxNpFxyF1#pʩuG3w #B,dN6sr$";;1$L8 $:MNw_J |Urì;IJf45͢{HBiz$F(H <lX ZHɖI+.T`(i(;I ֯Ni%qGYE[)o)D;_`ZpA,.d,!FE/K6Nb:@ \~ 税qY;q@KL+F\'sNm| `'Sw8D?9: B+ ]\\BV@B,0?ׄ ΝȈm!DGX36@A\@Bx!2L0܃(tGW? mNq-(\o` - 8~Iۘ:0'p@(Gm1O`28($ pB,t /h^/L|l\,Qx`X\BbWqpW|vl%|Ʉ@سT\{F5HdL_+LgAxO \ ˰D-DaD59 S2(ٟ0RV@PHH E"G@T"L)LP8!]At$tZ}c2(C>xZpq^; oA@<`-HC>G H -І;Z; a .Κ\d^,D"'A90E]At\K$`a'8A't}dV^`{mI(X[!QA[ﰁ-<\_H@"w|B^a m[A XwDi__ yT_)։a2H#.Ռ|/0N0bVN܈ h|D#A@&@ҍa OU& <mtl ow#/Jx,+A C("@%dB%0, FBa"4D8EA2$C A8&emAt&B 7xDx@&A"BFO%twdJXC-r~r~r#@@C-qZgoZjS9U*ڀK9D}Κ'^Z a\?hAJd8@ }%@泑ӳIdN䃺~#h#Cre $> ,R-7gPe^(BtEY dA 'y_a@/V8-NiȮ_e-ޢCВAt—iEā ɹ) 8@l5tf@A@L`8ZYK)()t%쀪voيr0%*2LVܝ$+Pg{BIG3=f$8x69&v`^!\ťDN8,Wl@38-, Ŷd$B}`6fMKA\%Dzy'l@Ћ%+%DyDh@d BL.OavAC|jC"Ap3ll3>9ԗȟDgDi:Kf%M 01NXkYL ;@4:ϊqW `yJN~ ~t:ʮPG@hAT$Q&M*p!Lu8b:KNWcyǺ˲B [X@_AR0_=FĒP!T3C %L8 @ V9r F?th JeLZLf&~ܗ͖;yhPC5II ҂`0hM&NN1Ɯ@(, L5$ S[Ai::4 âbLI9Hc`Gl#3Wf1g8_bSKڑZYAح[|I0#Fi 6^Z(DXZ\ 1bZZ%eC=a؆ש Xe˅ lJ"|@p෶VVa efbc=Fsx%xlVDK\igrE" !1cFK|@>Q| w8Xˠ7xÒ" 0( ǧJ,$A)-B*KM1I&p3L3H @B 5\F}zaH*MM`pP J5p$&E!3HR`- 3i$tHRSI'IN#4`j3>M4ض85ijƚvvxtk6uw,Zތp8 bb.TROXՐ\ Zf V c f qC|.h0~oC'#p2r! (fSbSd7[B 䝂HO7F,u5'j%@ |h*(u3 0:8cQ00-ͤ`~yLw?\ 9jcZu9aii.0 /q8$T)6zB $A >G䰖xX ;ءFYsD#M{D>4KpPċ\+P(G*`ȁA,D *!y@b%xI€&$ +IDT+@Õ |`X,"mN *! ة L PY} >XFpG;ƞ-6nmR&2Ul# a* A@A.;i22 4DȬ2La Q4yؐ.]aCjv`6mgqK .nD0d(D q)HA=-n ?B 7,#4 r0>ay!@=E?̗ r8^p!( xW@SAq$᱕7pY+q @:WTpKA\0&Q F0hn'FbCBt(Xē PPkYG*ع#.UKFqSU~XD dli. 'E՛b\pdlMe xw6_zOx;6ٲ/!AICƂYv!Qb>YApl$O)#  Pe>' )67@<xbg7C"Jo䀴u-p+ mr6.pA@#z9!F""y G8>-x$O|H0M^@¦XCG-6h'`GDg+5 x5-p A`nK^t#~J'BEkY&4{߯vmhCUp DA Q8~by3-ILB BDDAI.`c 0@3>B9˭̼_2LmOf]!]4  `rH  `,-:a :!@@] DvAHV|҃BVc fDbB @a pia RAp8, hN, άKD"L'  | r `/! ̦ `2x@ 8O($Q 4MXaMH": ":vd` L j³Tv~s'| x6`,6 B@aUL(!$/mI F#bNd#X b$#2[}8ûҭBc[̭^\^\ȟ>ܘFaF*P x! :Nf-@ : v"DӔ!f>$SN&x&c9@pi4z {! f.&l@,dN VBIFڌbK " M-:<!!$  K 0b툡L/T! Eu8L PV1!pQ "Xt7s`+O+Q .،`HRH"qhk`7}by4/ ba$@%UJ\`#*+4≻%kOegօ]e?k] Şi h nL+ $"7h'Fb`VHf0l b=\(Y&H>D`!BCP" a~T  Z baa/0`  Rր ` &M<@--sڦZ,bNbK. "* qA S2 b 0*u'2K"ZK 8L"P|@ X57_V8 b:B9bV{& Q*z( $.M@vb*R0$9P [Zȉ4Ec>Nj3 C4`]1ZR2ҍ7 > 6!ya-Rt0 Xa $@A: XTEb0?U Xzb5=քLܢ2Ѕ\EHO<>E} P2Xi^#6cAi| ` BRP! Hn>0cN+`b}>Hr*#x=&D:6 :8GA. rH$'A:n, a મ@Pf`hڀjDcBڦ箪``Ϣ3bL tw @!2..&u <8.8m @UT%Op#&%:sAO":B @e.V[bW;uSfw*jW' ހz!m-梚25I4cca4EZ ҧ=ŗ-65[̅4E62]\kץuD wLj#"fMbT D,Z`$# `.v14nRJCtP^XWVKWPH @&A !:ʢA lbtia.On /aڴH<F:M%2 "Sma (8r0 V@o9Y͎U "l*` bNdĕ: 5 ' ʧ, ΁#A>).6ao 8)RkV'k+-Z'69UZ+5dcN|(!c!#>46NYLZ?.,LaY4O0A ,& p6Ҁ ?+:: ^|AatzAa$`1l 0Mca!H4;- M8!q6!z9!63 b |B #d! 산-DF t!8*V9ru6#2/O$b9bLA&cW0F] pg==26h|E5%\m4M81^ЭLLbm>62Q V 6 Nj5 upк>jA*`A CAY -ag 9|! .V rWg "Hvު 34pdm@ٞ “q`y| BKh n- 0S B~k\*\ 蜑yΛB7 ϝX[` `MB"4Pe,Z'A H[XX>0\`,24?s@}PZ(C (_V^µ\ )645ZpcZ9ػai:t>HŹ!v(Y8R*cP%-L1L tp= bZY.HPv \op& Вp ߃V!|!~@V 6"ְX:` 7hZ&HE:Y E 7C%ɕ,WzAqƕ`tq@hRT:PTǢTP! *HH>}8eJױd˚=I><: ֍ R.ڽ|øm?~l")ecrccƍ)jBYiPk#HV^S](vl#kĦ6;r卑0`llU+wny]nԫ]{l֎y亷ϑqD% lŋ)  :RCD I 79#U!>H-擣yB!-yr) S>}Ca/EH@<M8|H_aOI [1#  Ch9z=[j),I_H J=AvdĨ5ٻd(e 7ԱYa FY7PR-! EI %e7[uɱrtu# m6DŽ?ħka##ņTH86Mm z^UC|HB!T \Cs RRW=wf%BIuHE" 6Bfa[rh0촙=NH>!+8* y$%K'ZO" N=d)>QY (" %Q$Jrw '`2.KB3!k6_TPU‟: 1>Q3bИy}iPġ `HeUZ( "34Xt*.&篇͘WheaCNX%GvR PM;A5LE{DgUT'Ԡ5?B rBt\> &cR3dk u?q=@E ,@7Z0H .so.đs @+XE" 9KpWb 9^EwO+p5D"dRI >K<r)(Ѩ>͢l"x`I*Г3Ȃ" A)x,|G2H")e+閵>dϡ=ΒNEf!I,u׋ ' ]y;E4\^Qk adx;j,7vJ ̂Zx=lFhΙr@v3Р1/gX'0xIX?[r$Z+e/x(I9^$ӷܳEXI)ԂZ?~ p&-r]c1!'66}k`~/+=*rlGvB$Gt@?!f)a*)9Ob]a@(FpA0?+RV1e>xjS(!Ub2Sr$auu`,F6Q>vA ! (^F* 0U-Aw]*{qTq$x>xR0TX'0/&@Ptp`K$COG! z^xfdHQK28Ѻ F]t;_LJ"0Rh (D+a`Y<1,QPb`Q-`Hm3cpD:&i$YٱDWt54Łl`3(ej4hhXaX)S1.Ytai9j9 2ɟH*6yG $]X H.^@(0d(ZO3B@:\b 3K;ua@uಢs% P3p% s 1+pÀ7<("mvo׈)a$qY HO\a v`X-QI>P@J" $q|hQ B? ]'zBzѱ-atu+e`s0T e  ZgF]@gAu Q|721Ac>D1 D1e[D 'wʚ;i}E+ÿ3GHs 4H21-4bp,# #  #I8ԠUE8Y6! /Z $2"#| dϐ@ hY8Br74:; '@22Ir U:Pp5}&0Uh U "Dlqa INjqOF@ Z m0-s,A!m{kh$FQ"4ڗcх,Ʉ2LH{8}t+-0PRp  _DdYK 0# M2 l56N ey aCX1yPrE3&ЮsE~8XP$2ƹZ3Ł.f3F~ɱ&2A%#!Xa ݑC!3,#uѲ9 U|Ԡͼ kZ Z@ #1 K< 2ğR9[ D*Pa  @ k6\mLs^}`;(3k@&9qà˛->a #/0p,08`f\z`Q>a",@Y aMv",qw9{J]UI6-62FdϭRւ).@E$t=E @.J0 $#f 6V p>@` *nIO~vJG j!jL"$EUJ4݊^p iJ-ǢG DgŐsv8 İ!<@ Z@ 3"#P`` 4Taju{ưÉD=:w>r3pr PUPz <0":'ըW7"ۚ/nFSKN@In .Ы@B(-R0*LqѴQfkΥ9|;l0kG"QGu⥎ز8'"`8Jl 38b-kl|֪#=:XkP6R/h%rXD͒RYqس%h?.uZF Pa`a'p"b<]R\0K Yo[] rZ}2oF+ o%Q#b J8n9o1Eā,aNnF)n;,1 FmuF,[Z!.EKhbh"u#J#RÒ#,ɦ|bHAV (j (z0jvȧ %d KliO>g0Ĺ! (ƘTq%@!Pz;Z,)1me0$cW4Ntp7o,~&^ gfDd_r#97hIe+PJX$T@{gaȂN BLC9͋b O~:=1; 8fSB „*d%Nm+c A1R@ p.igkԆ%S:f)mR @H7JTTN)%ڎȂC)P7]zHE*JWTrJa F8,i򌵐J9 t> 4TkЇxfR~<]r;L6J5%z&) R POЂ21 (P(D@).UT1E$Ah(U(AVF?YM#)PJR [P> @L*&FM,pM-B)IAHRBPؠVT& L: ыPJ8g 0PR9 YgjŒq1Ilz]̃^P/`ؚdvrtIAwVjr:atŠE.=D41]K4w"@ֹB pd-kJYуlN(ZR)Px n3)"g@J)tØ. +F }ZH|9$@)b;J˰:|^)%U` # d M9R`@0=^i( C=D wu$ AF<5(DAb#F狌J%)OIVyA5vT5JC.qM[ C% 8djba0 ?&1z5Qj# b !b<ֺl!=fl}:C1m_et!y@)r QX:xwwnJ9^C#Q"jQR` 4)׮_,߭-k{wЃ X*R\aAD3 K,S:#Z=D9 ,]d`D;*i>0gѱj+-a5^G%͎,RbZJ>֨QȂ -\J?wP<4zل:EH$JňD l$Π?O1,[oԘC?g"nEb(kYsD Gf[cYKgRe9 N[5IC^$RQ4V`\!<{o6%$懙..c \ 8+8Gz;v A: ̲:4o,JT7d@r-g`@_mSa6 [qZ7R ac*##: Ȃ`+F k RQFce4 {>988p _ȩ >dO00? u1= :%;xV#xy 5 -۹ohƱGjQrYr13Z bȀtW+싍ɦ>(8R@_kCR'HRpBЛMaXˤ4}cU}ӄJZ `#фUoP T@9G-{ێ" 0ȥ @9٥%ZE28S&c^ )P `U9`ܩk`Ԙ[u4!ߍ iD!+)=U Rn@Mzlݎ%ӁچB% v!3+wW|)3E"0cd Mn#F7DZ"QqyO` (XrĈݻAc @(oK:`M,#0[mZDa } O>(Ε52:b8 #"mQo ?Pt(i7%H[P7rr# rEp`o&oP9\ЁčWx# 4 849 ʭDܪAP 5X쁼4,&D%0 oJ ᛭\ ` Y>Xޜ+qqplP9D'!!ݿRLt%?g?>|_9D26l1JڎaV-ӂAIN(0!2-^PA)SPE VQZE >kP M;^܈CTZ c +}2*c aY i ϏHx0!ZVaF3۪K@Щ烇+ݳG˒=SѬ dsPbbH *ZaC^@:I%#1[i-ɀ57h>hycq3ΝSfeM\0SSxdU`SX@ ] 1@R9z/_Fjm{.Ĺ+^PNIvV=t + !_\&NV2! U9MុpKM$u5W!`^-`WW¡:L  ` 'o=xN5臷ZaP ƞ 0 ΐM!cT %cca _ꅀb``sda5W{kVs}*O{7z"I11tVS1:lQmp:؊I#pR V 0m`uhox7ȁ 88RJP(xDC:%K[W % " 򎿁[C7*$ 2pZe61;opގnWWTŒ8$YaC' yg~[=82Xp9pϓrbU RmPRw_UNPF8N(xHH'p)f+, =s'iTXyh-p#[j/pgIp5Xh]|0xI98|'hw$]AGڎUv{HHUF/HK 9H$1,\/ hBE1"&""ZHH!p(t ]J@{ n w M C&Rm97^M#3p%4A,Ŋ)M+tڶn߾f-!0 p1۸ՔpCRQ^(WDLm!ڴ,, ! H΅N' ;) #Rb# ྃg#h.\9p`ͱm+9 ,ݷBP=sl}#HVR|#5sȡ7u F$M+P P7`+ƀ'~r2 żqV/fN g3S ='$_+P m*(H Bt ] H>A%KK|0 d Gj8 AS@IP`5+Ta ,(S>"'(CZX>`- B6l* LDXqy#*Dz:Ds:Z"C Tl@R aG)D0H%M QBz1IT.BIL#!b 搵f7G0B˜߼l:0cs,-`j9)Htc89 k㡨!ms%!W mQ+H!یO|s}O6& !<8t1S<83|&gK@RA(!f+d >* r0͇<#̦y|&Y2,r :aZbj9 :k T!&HŨSy@TR@7'0k8B$[#H,\fFNLȥp@[+`HR CԥaJ. t-U/A7MjHX|q}x3 &I4L | @ Lȧb`Y(PB@Aq5-KH t 2B>oH]@&Dzna,H -*f@}BLݡgqF\RkEHıA4 QnQUG p@p ە]@nVőGBn\`%+M*WGl{uuGnX00HR| 9y0l0T -戡A3Mɘp/\AE<;=m -3(C@!$DFlF_PĄ7P-Y $Q^ZHBSJ$PdJ H[DB%Ĥ)Q_i#m Aˤn%Z SDZPb_>D[D@qH Fb `lœD;M#C]e@Dh+4bd-k@T້،0 M"%yna "oAF] 9Go MuRu͖W+ X}}XtRHFA8lWp\AW4H@$HI:X9 * x-7xAIdIez; a@I -|7<3BD$BXbi0p"4HCѯ[DoRј-PԅzV[ JTXB.:(#1hBPVG.hHEiDI3&.[ʘan$L$%˨ xDΠ̠GR(z$M]sv`Wu ,Sj+0tHvQ sn up}%CܼM^@^ad= ҝ< ̦>'aK(EQ7}\sg$aFB'LB]#1:w `:jĝ@d7V-oi~ #mstGY%rLozoB@. ߪ^"E,r::SA?@A*M{El v]nD %Ad!%|ƛ"d2.233~bx P^"{k<--&$!mA dJ=ם`ADmbsR9NGdAn@q晅׬G BXč/D`gT1"Q1J8GLD,uPxBP (9 pՓ3/D; .of1fk;Vp9 LWh\^S]+#&IF8Q+qEID`:*RB?BXhKl9Ky#iaj64 r1Jd0q1 *rM㻣 P!O$ FU *UVa5r(* i8ꨜUb|/XEy(^ɢK&'KNJZhIkpu DK뇣9-J!k|x K1:CX<$/Z ; s.r@ :3(#y(1RXI"XL"9H K8(F :*/J%ry/(ྮ޻+!$~p]%+JAVrf ?˜ԉen(N)S1<#w`Nܵ؏J۳L>23Qs>3DK&]6{vkĝ9H()S0tT#jKnRG` ,aN; İ*1!k*R\MdRzY$90zu,dT"R><+>ѩ "\ p{peP nHȘbԓ6,cZ [bfg HKRZ1s"swgR t Hs2".=;θRH"k日^6J9\\J ɚ]s6r׊[m-KKeJȼ3nq1ц T(PdXBӄ yx9q6GCNCQb;MA$i zG)4$JHQ47:oZj฼r9Qr`M.3Sڣ6706. F}47k#>P$bSq#Q 3 8,@84%b kiD @1e Ô,_(NgaTK^I%ZVeG;EӉJJQ(QZ6qԛyOCEr7p b$+Y3y,"P0ޟE|ؽ*WEWH̃y e!@Z a (` .bB.r6+J+n!ND$\̅.Ldt* ^MV6_" o.E\*-V a8#B1"+(<܆*ӂd"D본bD faH"0 k2+(d3/!Ȅ+.b#6+P [nx/*37gpn)2p8(bBk .V.6a5-@ή (їPCx(r@ xK4 Nډ+e@s A^ \ :!Zl1l1LyK_LyJˠ.aʧwaIb.wy'Ѿ|d*RL(H`(y& dāš($zahp""4"%:b$DX$"&y 4x@9>,Y*hsTɎ oBA6f+ am͘hB, (-^J&厂+ rK4«(R(2T]^`d`nf4Gc6 @1.("iV 7bnི4 L3'.+,!a l+ 5. joN>*(IЦo .ܣCµ@>Ƶȵ7ŎUcfh"g.fD@f/A^&@aF N@HjFlh>qդHv,j|I"ddv͂*z&G( &@LY@R1 Rb)^TKàPvT0 2̪"j%|>HL-!0KV9`Ԑ&`rr`EtNl&@ "_5,Cތ)ޖ2IJR@=b/2 q# ֎( &.hPe f7-cB((Qc"0⼎bfCV1:i 2!cBl b;.pAZBl(~4c>"b`yCt؉Rrz!5($W@!4Ht $ tBRP"be(HOKKg4M'Kz*k |t6gDIp@@@$D *~"EȌG6d%JvĤGQ.>ڠ d44@A^H rbx1 DR&ZMnteMv!hebHAW9 `B'- ~_b&d@'W:a@0bpOFVЕŢuǨuR +w n w dw B 4BN+@tM@1N2R46/ Am2 |(ҷ! Y{.+|:~ǩ,S.-jA)pCŨmdcJ1_N~4 ŗH1A5^Z\ @A 4@2 G"X(Gb">$:"#0 LԝC8D2K;pA-(A JarO)6Ow\K[K-8-c/N+4@dV 2-cK2.0U*NhUH. N.jHa6Pҷ4(pPa0[<S҂Jvl9&%B7;ZonM,5Om<0Ev(С8..89fJ..M+\5Pb2HGjqNgGnH=s Th=䮻EjlL: DxjiMm"qJ 0«BN *ͧY.和05jÓ^nº}~}dt٧nL~O輢@&.،!g@-mTXhM"O\CcE(~@,+XǛt7Brّ *ݹH 2ܽޤI|xQ]J(c3ov`v w,=ڮøf/ΌsG0lc,;ʂ$MJFLjZy2L>A:OKF@`xt"t!ymX yqjn@e ݩKa"(DnEX +d(MMB4cY-, )g8hp`)<88d5II @r@Tk$Vְ'WZ `ya\QHS YLh "khF pܳj?0n[4✁r~cc1˘@)nФiia0 @z L U=,z^wΛA( Sb*2`8/t(#G |zφ͑?¦k\%h`;E2X` FX b5%M+ъ#hzysp8njFs _GX1 DK$! "up$u<7$BL/̠ Z"lKș9C9SΛ,T1$9uƞƀd@Y97q@+x$[j =4M!R>DJ,Ԅ@8DCclhrPh2t{XsLptxP0<YQ DCX08,4}06xQ-ޘKD Wb 4VIiY3bt&_|AqpDd[QiOdZY5e:BSZC|CM==nȦ.0fs+.n‰y>sE*8 t !M-lPqeciHY6۔' zaMU(8v8Ci^hߜ(b^yaɌnCX tlx 0)z`㎭QK``P̞)3aQ7`9ZjI h/YkBL"wQ | 䃑{`u$OKh7tMCɔ)L!z {PG1!Cj ڌINDU]U "2 &Q,V@Y;lS|K DX D"2b(ɖ.hk ^Ht&0o^Vo%q v|%xdh1o`p!X!H$ICj"$D*L!#HDqZ\ٴ$6Èϐq.ZU`DD@`*`T @׹ָCُܖ mu{[ßȹG?(spPs6m 8e/{c 5Kf1&"e$#^  .Z1FX5B$7D(Aq!DI 3CP1HD.\ZMr$Q}E B<0!qTX%HpQ B( s#~0@5-ha,1#6'>LgtϋhZB  8 Aqɟyy.9!D#1`0x 0h+fMMόCMؑ` @80R0aJ'(\ %dHo*QEXI1}Dm.> -\+ⷨ09٪Ձ "SHhq@([ZTF!B @QȐl)JiD%p n^|M APE.aoFE-L8sEGpnّ>Gtsgac]ѬXGgq塄 P0 j"0`ȍ_\ " $A 0g@+$](DPh-9>k ~N68a?9΋pS7d!pzf!M` }Dd ]3Z>cH=@d \d۝Tv[Rp& ׇ/O(eb $2!cޫp7uQ˗$E(@ 5[xDx3<4WA_PD,q ,*vWkPB 3bU,` p @U$J19bn'5A5] /ey \m15qA4Ɛ~rpqHF crP* 2."pJ BB_2WoQiG3~ 13E΀0kp 2pe'5A    C k ;7+Be787, ܤsp:w+ LN8qy!c"QfsM10ery1zTerpz3rL1:b {4{s(g R'|ހ@1Y V څSI&1=PW~9oj[B PZa r)V)7e s MD`4WV@Yq T]@~,q+T~AY s &-q.߆Lhw5o ge\?e0=uCPwPzqx r'0uIUup!pr^1sFJՇtfч aFsJ{@ dha2 .@lSM3v7ΔwbDMzx!QGzq! 6bY7t!nsx$!ggg\xd 9bQ{48? v' p {sGpe#'s$@ PePSDY PЙh0#XȐ>wP sHb>0}(0?>%G u Աnmc0W0 r:qH_k:,6b Н2@C0'\`1jH.MFdD`'1<Ǘ!t 5'RQHlupFс`|19'-ih@n26䚡Q1KT5K1yVA}t! ge^s 0] Ð{ b7 xwAeEeF QMM63!kNx fG02gЍ9\Eeh(g(P waz P^Ftc #(g<˳==}{<ФTзjƐ ׇ^: A DoR0 Ð*B I0^Ag@C1*D!Zkws TW ;, B3.Y[w!p ݐ_>Q  FCH{0x $PЁT1+X'ѹd A FD'qWk!Ș"+@@"P~F!50"'DbН], ,6ya 8,w! ưur,H@2AXu  >RqP+п2@9+T  q4>#u9<`%~VI40p~P`ϒPI kP z#t9c eT(ę)08J!ٓ>x "h~0AXs t4.=f j N4Wa(Z ѫ . 4Aѫ4< #n- g u Ty/YEk܋p<>s9 ^`P0Ј,4,!aQ~8sɭAAso4 F3 uP 1P&$r p@3 G9, = m`@ <$,pQ 0 @ /Mh36Memy$ddC(GM8;d3K:b3{ vW6B& OW`Ơ"#eT9l߀7FR &| TOR~P5 0 R=T='ﷳMIjƐ~)R3 0A0I)*&Dp- Q a+CtJp p,P@ )kWg_ZIUph j\@uH&qy'[E 37_Ͻ&:(^I%%~!xpW\%68h (0uZz1ib]onC\%0pt^t1vZtW 1Bu餌[!`b#Κk6H)ҲfFƚ)dXJƪԲ8Y*26k$.6I˘6:ֺn,Gʏ°d+|@ R Y@ZY 㙥R!>u 饶jt8`=[<#˾ O' Xv s D09NV<_jq2w3u pV*MD"?$xt][1Gq2b#M9 F9# rq$:k)RI6rTMْ}/2}#2T='0tDoPsh 0H@iHCN @+ЇD' 3P$"7P*pp~*9mC\)d2V +b (FOd:S+>qD[׸eI+iKY4",ņzd/ȥac95 F-%KT)Z8@H:`P*O64jY 9؄PxbrR@s `*{`q7@7-Et\Cs҇fˌ`pmrePǥpZzIhByZcƐ `<&RhLB^ely( -+ A\3F6 H2x(pԼ9`4׽~;0ґx$)yPfRHN[4oj&3ʼnK^oIO0foXIFnZJRE1b# !Pr*! :A.+x@!)tŪd U!:! betE"@A # ,+kQN. c<HŸ1qE$] ~Тź0Tg z0 ќjK nq7)s,@9ӏ\J.m.1$Plt5ăe \pZl _͞ء#@K8JxkH3w- ]F >pځk iٖx3"]ApNP7Ϲ 6۴cAr>A[&Au7)Z3p0=gOsEh)+,|Be"G 5Kaa_1NA4CId_KY JPL-:*dԥ"c#6 Q7c6)iG; D1)9=Q!%% @8GR\qc+KxW65B>5 XHctoXjH{^+Bm胂(9pS-t*y)1 J:~Y(AR. T2@nZKx)$Y\,oHʼns 2${GEt[ĥx Ȁ]A%\c[;/Wtr#Y0܍_`qp   nx'F\K<I+o\͵ =Pm G3_">a;WB iȐa) ZQ?ѹ*ʕ+(x?[Ȅ0r ZHQx d)#4,*ʓm Nږ-q( ^(V(h Ce`ee2)O臃OB㗴=#HfIZ ̘T f @*$ ,Ԧ[x-4;nH= oR28HFWt=RH]] K1L0^%u2T3B  cDU8M Ӵ( 4Jۍgұ )1fB-8{ūXѕarr =e"[ ץh"joXfOayFFidK/aD922bn+ LkG=98n0"D]Ѥ}QB`]!ڜB>*9|t70VCK'RcI"VxT q 1̨!AXiX `q$ 8KI"@2 ۔1 3")\V8 9臈r8 xLV(Z\$N@Z!XG^Zߨq0ObRfqcRV y`4# # _\!'p>O8c Iy%# 1| `%V,7S"a20bfYݛ0-I13 n4=?˶8Y։07N锃x7cQ5ʕľYh"g6L,㛒`bȔ7"6bPs "=b=?":0-0" 8 z(Š %V肢\83؄Ҹ -|\9귳s 1' i&qQWPݱ @ `ؙ%p[A}-sI0>К(kSTK3Ì3(%CIDx PƎs ,µ(D`SN% ?nM== CH(&HpUxҙ,Hr鴫JH WIЅ6 ҥOu ʇ|1ȇ^VXb`4bb[8kT?ÑsF+먢Y 4`@)*X 6Y6.Σ">/i*(**VAx?O!H7v6l ! 6ŸA;5o0 :t':ZԴ ЉJ# q15I[pܣjHX Ub$HB9@IJ8F>]`\:8 U^ e>:H2*HtSlr] YP81H8ޱȥKT$ `9a];XjqH \ WYg1`aD0#)ir 9*pʂ9M3Fmy(9]h/;+>؜~Js%NA.jwIM**SʹzԒ0-љ<=XѴ9Ñ:㪯J#& Hk*9ʩ1cV+"ZuOH2mNZTH[Km"8(R4A6mc +08-3%.tzZHTUHa(jF"ʒE%l da2SX (r ` Y5e*g@% SA@F(sUk?dا3o5ԔVR;CGحc'ϐ T'?}Sd i'@*}NP%דELf4 @oZ/>R *10h {O>JPܰG&bm y@+K TGH@HPt_^mn\NJCQA5;lq (YbsF-ԲG#41G0-Cڲ$IEG0c4@̈e-F@-]c+Lr<:!MPVIQI9/N` ۸"Kuц}G'P+FY%PJ+ @s39*Q ŀъ`| .K1TPAK/*ID:SMd 'l<C+A6ES]c)hHQQ¬ eIbY Y5eEHLH?L@YlR<^ 4F  iմVY'). DZiQu@MB E# dtV-rֶSEu07570VrV T0xBC ҂6R`C~bP%&]eW$PE3( f(3h4:I?"x$>7>5ְ Gth%8G&c-p&}sцmJ'N.*SB(AG9m 0-,! Lb; PrHm(B!Op@ 8T8c߸`%cIA"`eO0KpSi6588T 4 -I/ch5P`cdWxQ~EP@029N`d~j j  Tt!l&n\ylvnP:xd8"H69 ybc:b <І5 ]*h!@B>B @܀d(xMF,|+=iqz䣝 ~>"ɦq$aG'|߸D K_$O0Q@DKa ՋI5Q"!j3L>R0Sӄ8sQ\QDmi  at(c ox1B\,L:XdR-n#[|  `%F,-FJh}mYdMю)x'{#xT&y~X-HSZc*8J=&g(cN AZ!1-N><Т%Ik B,N'ѕPfkh),6IĎWqf7,d_X DUHmdßq A01mІĜf}0&dA6 Co!#$@>.c, <Ic(N*R*~Gp$D5ҥ#A4 5h%e5 &u)E9/kY [OTt@𫱍mW `KE O_@+6M j\a$T $n݀Z0L>)P6dI9H%)da'vNQ|RLxuQL|T+(3DH1?Ѐ%E@G^PlA4%JjE;,@XnBeTL1ORȥEQZ%ɏ@ a%ДB dϬՖ@x Q\] _U۱KF47@7ֺ7JJPe P rAi* 0#8N 6$TH(<E$ e % 84l8Hva\^SHVŏDYSJyDD6H ؈L!EEtC^IYTT&gXj:ĆD7H@lFqt 3c-jDlEֹ or NO&x|M&8@ː&kPH@? ,EL=RBrR+Nm>vč,L60 j*>LP墍BSMGT'7rRTLƌ|, `b.hYX E!/PEЀH@dQ,HrzH˛(UNɕh Ό씕<IH_WylH< al(`IlI$6i-ڦ@JFiMϐaHDsYKx`h8k7@O'dAjlBlm΃A@/@.X$c%%lBP)Rk^S9.fMTL@?l"m@Ĉ!PY@-!"]M B*֍sA\\^HS& *SYp,THMфT\AMtEd("P jzYv#q*ԙJXDpx#ذ1v/E@p4+HtK AM)2HQE:ɄwM|4ElyJDKRGCJ@hYHX7X:SD*lsNňmM?|,p>YAxAEiG9/+DnD)tkPȯv(Xt XhLp82Mml-L&bM-6$D=8kLG8SDpV!kVg !'ȁd{xC/,PmE|E2rl ^%AǺ~E¨R NI+@l>-pNE&ZFzwRP$~@_;_ϬOLPzc 2Q[~>gO\r+d+msZdͪ 61'@?p-:J9l!Dp h;@t(,\HŐ]I%*k|GMLLtMԗ]:z(+J kR!#ioMDXU10NDWT84okxF^S=P,TMJTE (ʄpNGO\qtW\ׄ>"Yu հRHMps݌-HE0u_H2RܝZUlF*xt~/ȖD#VzQD_ؼ FoY8ZOQH yAi\Qc-5V'qbFSO1 6 zU_=5HKXx2yg_@A1,A ,l@('e- :6M.B൫<|I݂Ȁ AG%lZXI&\{!>lAp&[{6$c:,1Gr]tȊ\uX&nAR+Ո5GHKQ ]a0n=zu`85ff5lXz85X]!C+Vj9Zk*Mx1@-i` k-͆pCH5#oꓪ-f-ۇ36aB120+R3;i> teG.͹w6Gf(Xuv6D[_#@ظZ$oZBK9Z1 =K& cqࠎ6\죎>N7ހVoXrɾZDVC Cl: ,|Cs!D@4Xb7I"os9g^M^fЅжtik5fXt$Ҙ[q +bC< @iJl Rc 6`TϚ(:l B2^ׁ96\ L 2@ș*RhYJ `*zϢ%hO! *.pLb(_vX`n ,a&zZe|Rű.cF!1MtM["`@z"ro28 D@ED3(3r 0(x4Ҵ4 5L+ (ktη x:!-q.0]mnﴫe# ."\??ccϽ#2> Ј9PJ%CfCJ EW8pE8Ow Tr챏0"O8y grD-DJ)L2o&g803\l/o%Pt%th3Z#]sPR,a 9X;*C &?Ebbp*V$dD$2J p&J(A $#5 ҆MdP@aaU &9-2r Ŵp ,#E]P="Q@1?dla Lb0b& h!  o!8`AZf 6`g(bB,?ZE& WxcFD)@ 3xP# | 0@^/6@*By$* zGky6ER0XC调][-!6@x"w9B#vqƃ}AvG;%.!1C:^'%vTgp3C"B('>VPV-!X@lJ;u^;#1 lhӍC8,❟(P H@,BBA ]!G*[\v @×yPzySeٹ ) @ĂAEir EPQkw3ZA!hH>ܱuʒH0!VEIGEl \ `m! \5! MD1"q cYBQ7p; 8 j@G7ytm9Qd RsP("@/@0ax B%taI"7 h@1PM.?+G31_<d's ̖! %^?c +jQGq]< UuriF4 xD֔VPUMKx+6PjND/6I8 4Zv%TK)@w Y PYATD#&D[^UQ@3p`8˽q e֨IVe!Y H51 *$v85!{HDd^q{/r!>pe0" `=$fe Be R+I]O @STn- @'g3㗵A8oHb=7 $X=8g`C$c%\{.7̝2ЃF:=2ȃ(CCy= BZ1?[bPHQZt<#xX}dAmJ?O:6VD#;&}l>WǕGn7 E( X0$Xc !x[P0jXaBb`E`< @W`b`ZE-$`C! f d" !΀&X"$! n `x"!pi 0$4`+6nf pL. Tbb`" !$R Da@WLU* 9*te "͌p8,BF* V@ʡa(F^4J`V"9 k~l & 0H`F րoFJLD>oZqG>><8FBJA$=~q>OHC:$LJΞyde`,Jcx~ \hLZC"'\CC$p AnԴAn}A^@HFA> n@ERak>rX@4i @)l!@C66ABLpe B p@ TLh#1(&3'R` ԭ!Zd+d!%UtHXpb R"."Ep1V"bँA WB Ž4B I S "Lbb!!L!_,i`F8>+e RE^fXRT"R!.dA2./ ]> HNF<@?@8ocr8m1< rLoL;L:d̥&TD,:fVvހ8ET<xTLBH uZQ\nժ!5IE~LWT*`(r^sr#a!.K B@aZ~=ℐb2N,arKt (S #MF"`p ("T ‰t< bȜ1b$I`$$! @k 0!0i, Tb/o'uec]Bڥ!r$.)C@CFjTIB14:R u2,` DnkMEhPD#)qu /X.!$`Z)s Z4.Ta(i 2BPBB1xwMm bQ%F$V!5 A{ZJ7 aG `,a |3x-! \`ff HX)! (BɦVI_;eAܬ$*\.resvtA 4c;qC748eH& 0E7/,Z#10 iЂё€8V!tr TQCkA8TxU+C A@ orAiXrĥlaܸo\q^@pHV\' Zj!jNp\eE T!E e\(,Xzk£VIǾ:%`Mh " X ʂ48`,"/ [|}M)d !!Z˱B˿` ˆ=. 1R\-l as6ew)p &$!1 .PhOa ThaxkrN@8AaErf` *@dy51[o@.>LAd(#;#>(;\t,aCC=C#,dI}z쪩Ă\I&D\Db;! Ѡ6;G(Kh};[A ~ qqFA@! !#&t zabzN̗\bi'n! n2 %V22"(&BRz T$8oBN!UbRgD$"4 % 0Ӂ/TL⺆u0!$ [10*XX,4x-4A<0f%2%Y茀,ASbL3 PzA N0 i!R tYcF* 0UaOSdf>D'#zv@'j("Kpi9 042ᛑsH42#0[ڒc%Mr#&MV+Ν<{ֺM7u֩`%nק7ae%xa啗 ao(6P͉>RѺKk-]3ҵ.Z *RL;u #BF@ ̰*YMX̑#ko%͛Zoys9ċ׼"8?6(pB[ߠqGs|fZ-% nY4Ob$ =X~ "  7ftʂĉ܄hA\,bhB/hppmvfhxkq27$TӞ7B\'Fq 4,)(JlhF3 %-^T@g$1L +P'c5Gh-9ʆic衕Q香^bMGD题 Bj FXb1q*H7*ߴr'oN,HfT%lLS=M'u Q ULŜ{CRe[vDW، B,ZHZo N@]u ^zB_3EK'XCvh•Ʀ-rgt! 9WK&?$"xp f?Or;k6>3S  ufq \5UCrϽđHdqD̋pygʗ8aN5fa`pHvW{f 6pyہR0**QoWN9L)kVfh™@ Ku`@?Vd>ՌΘ]`(6tөZւ)bz6U*jlCfZ I%FpF4*Y I+@7l9jsG͡CyF8p)nO l![ ܋_KX\PIPJR7<HD*0/3PRh=@|N ڰYpʄ6yhf_8n2K8|-8qp*IHCF9Rd$ÑEx$ qށp5BaX8|8/-8ތsM30߂#eh&X፳ u(GphpNfPmc =DF6cx̣?ʐpaCI| P/! C ba%2 E!Z$ :2'""8,`ARf@|PTVŏS) z"?Nd [CcCFYل!j_M$( v X Ip"U%܁[{St(0|s`^`M5s $>SuaԜթM)FXBSCIc*6TɮBQl |"l4Vٚ7ra8 + &[1"CPk P<\.{Y\/$t5b~q P#062&!-5ۼ8Hf,, ILp}C;7Oͬۈ ,iiqr±c n DbNhaT<A3p8+h`m+Yc>Q2h4aЌa(k$Qb.̹SjH.ѫod!Q%Z•QR6d@eaЁUJo\ .[߈ZԤF!`\G *ga aܠcA 0Jz6-! 1gv1 LHb # /S&aquܠ p'SoɅ3V>!#'b7 Q75*]Ñ<34*4N4I`d]m35w5ِ ;!s!1!8Wa$88W Are1M V N75F0^Y!cFp! # " .v0d%714wOqbR8TGwb@'^d9 _0M 2>ybhT5R2`|?h|fUn)TA1+0qƋSh7%m)l\˷|͗-;`j/$ve}WQ7paVpqv`U [ ll.Z`<EPS &0p`YcY|J|2ՠM2 &(p555Pp&ꈠ)u mYyopE KkYvrX <+ KCRTE+*yyp7]m187n/Yꁚ!-25EIm3o"}KS qbp&4$4?`Y>"VGi,QVԂVuG,ztɌ! >=gpu-?S z- Vf b , 6`.zp ~YbJD`**vpRĢ3 YY4Ybt45[sOn߶ ' 2b<[S%+]Axt&गri +]EOhr+uQ,^Uh796U!g83P 3_XL,1 C&#cppı9ZOD>&b'ᖦQ I$ 0 ʠ @` =Pk )4N(5$6d YKX2*"o(oBC,#BrU $GzbE?+3|i@y +9)\)VwZlb(vAR!; "Yv0SLW̴LkN vP ]}30vG f3Zih8$;nf˒XP{oÁqمAǑ*ȕ)3!rIb3SxO_āQ_H@Rā\QJp&ѺKbؗL9p;A !WQS6\NI*IcU :cFq;rQ `n w˟ot@y4E'38 A?ˁ1ҁz]jy P) 1i>Ȳq=)hBPEh*3R+/Q@Q)a%g!ڝb7@vPD"]|D } bIiEvA Yc] Tb@SàMA%{P"JSgb?p3,f >H^ g˱w %O4YJN-bɜhgy6xY6o8Jr'0z90!K8SaAB'bdyX͈ 2Rۍmu{pe\ahɇ \cEd)zA0k*([J,Jk ðvء˪eSHA/ܣV9Z`J0 _%klqeV@Ц4VK & Ø>t-7|k΁t8o!)jaŦ{GX-i@i[R ,ip` &!CP4P& CMpШѐ"4bkqI+D$6G&IvQ o+&wC @1RDP1Eqds(N7Iis3 tтX!N8癇na HEgtC fpI<G8YK, k<0}QfVzH! A0AwҮ* [rykZlDwҭ,RPVXFEl1ЋZlƼq%Zˇ? ⛅}(lJCD`ot`(3G> ` "\q:2`E^jĂWq|*0[ ;-R]"ޱC#g?Z!HGPf/ mP ̕pEZGQ #O@BO/z{QHQDY Ǥ!Pͤ2d SPmVN$;4gzTGRHa &8i"=BRUHF!`0l # t¢-fчLSJDXT8C=P pQ|NJx!ռTU $җ*]1LЅ՚׼.jI%LU ȱgb;ՂY ;!/6@pDL,a9(}xMjl3o />:<}xF1cbt$̎7#%lяD"mhC"m! 5ppqф%Y{"=SI|"A ̇"@*T4G#i}(Xp3@8I/Pn,8 /ë(MTЄ5i@[(54na(`a!~:HF >|h u+p>OQ PħU P(Z` 8`nu%(d  e`V!U.Q뼄Tm17^ Z W(+^zWF3 BVCo8A0Xm43Mc[ж];_ 9 ơ-FNH1], @Q8^p@"1IW=$ `68:83ii&r@K"rS#اڀ}.qYYT{@B|dը G$ֽ&U/X lNErp&rl!)q- uMǥH" 5ɮ"j.*;k#SF }dt1tXԍ)T"<n3hCHZKD|# Ȑ+\#:Wr0h2ސ 4g 4ҖR%( _\UcX. t`q&`(#P@ѿ1i.؀ i8Y7x **Jacixgx>pc]dXG::{ZMBoxQ@X50wXa8ʺ!jP zzIib3xq3ʊ̳K3 k@ˊ 0 CRث@ ~,6Һ 5"PHlsK/ ۫O5@ `\cLJ2|)Y}h=6 /:m"@@{?kR9&)CdҦm(P,jQJK WHќPAhA5p,,!eRi(U`[,x !ԏ!h3!D8A95NB*~J0yP@Ӂ0-衈)gZ8Ja Ɏ2/ kx~x |8*aM\|H@0Q x n1 n oE@ ʊp5[`lobsHK,0, (78%xӠx[㏩\@x=IGÒYɇSpX`9}Ÿ'i}؃m8z22ȓbʥQa2P*LȅT`uR$:.+⚛ BH/0(@20TsX̅^1Zd2 zs+3T+=O@MO| :.0oh>6xq|W\ |<933p f4[4!= dno᪮VcgOkD(>|coT0"=آt1lً !.J1` pʇ|#JڃM}@饊X0DTъ8ȓQ!u ֩6!PUyT;M܋𰹊7jʠ9J0n13YӒ5CyKsy09%YQD7n4LBn{H)-:0-pН?K30UĬH!ͪL?q!=v ʭȐfQ9+/,Mr"QZ$`k=Bs)T(8Xp֏{脇\ARxn7_z/=uۄ' "r :;96ك- h JֿJo=]|%*4ӇnFjU]] BCX`Vu'hVf~ ֜ AXC8;9`ߗn pEVP3+ j# ƫS=Eygg 2,W8mb`>c"0߰ 3=k hȁA)" .9u5y @?(q% YlaڞM8ࣄ@<@@)shҦNX)c8!mYaӤmK)B#B6G&DPp Bh=:%&~S3͑8 -[ΙjgYw6rlKm'u\Gn5`֪e @ْn2" UA @gdy$ىDUvCAP`[0 AGl BH/!A;u0rOAL;3X4u_X㗎7_YrGuD vdjF̑FJ+F|CWfeGcYf;h7߀J ߰C;$ϜMj֊1`# 8 CAR@ 2NB~BP>UrJ<?t#5dt{ກ5!5Zm+BEUZUN&u'XD1T>9Y])T l$AdNA@ٳ]0pd2d}&FGX~%IiD TVi%WnAs`&X{p31b' <ÊV!,%S Tbs!w ,$WQMiĦ/Dn$n1`v"0,%Nupbv"=ăMSh^ if'%Rp e9>έ0aJe!}ҳJV  pTD"T ,\Dy>A jXB8 @G R#2&Qo&sFY'M Ԋ.Ucf0Ua26jsԡH'>k }@G*P0`I%Z>tAzB` ob!y`ޘhPW ^ .W%qnHde 7W0 !r$Np?| ,\ ine(=q +rЧʊ>:5|:} Ț:%"[}t`R k Vj 0тM0dNI\D:!,( O)N(Dr*R)G|QP# Syb+ ')z +Q (7|YŇdr#HcEEM$Ui2/w,QK˦@Lpx/^!OE+ei! :U[&1 TC !H!Od!,󠇁u ,0Hp*0:,8;I#RY)8Mq J0Iҳt'g i@,4FQܾ\ "3}(DaD1e%P8E >s[|69O`%"KZD:)?^x0s-. ehi d`=6>O ϊE_h@P{AhԡP`lAC,PD b $p d~U$N!x} N9^ п2Ud#񎗊GL\W]hu|U[0sSZjR&*QӚY*;/.0/e`…k"s7a Wl/o%@Q ܀!T^UD"P5AEt8p*[Ml=e|9>ҒWJJ=bZ)O]MȌ $r6nt8?N[09]G>=BI ZYCy͒+)B։XWlb6y>=aJ7j!Ъ q"81$Їm3UR1C- 'H *zp}x%At&r8 : q-]%8|훎@4 L?A N4|C~NGLpɑ-h|_xW` Np@9LB"$B/DmUJLd(!2M/_`@FFEAE@H@+PpQɂq(B@f΀%M.wEIC ,@ШE 4 ABNܙ\PgL8 A@IPVlk]B&KX-DM5 @U A`h,&lG}FrC9\ăGwqw@1l3 C"L-tEETElKJR@OītOx&!@;BB1DEAґ_1Ơ00€\3a_,x}ΕXWH 0x?Ud+ C]7 .0LB$l#ETC!974<"BP@?m6,4l7@N\ !VL%YzMA X-[  L[tBF("C[Y$nfL*ELh^\p "RPQd%EB7lOlZI0Y!0)JŅHS_4ÆkULTN-7\_k) `A0]~A~8!!ărAC YE A#BHrA`&#42ffjxȁPd%D\hΈa\uLXCA9C+NB,݆2¢̃.ݢ<9jȂ]Ą-bmR e[&:qWMD\5E%dD D$vDL&~*A B|n>HQA pxP Œ 5Uad !Dt EtRXq2"e[7P+L$T%D!A/8/` AZ*uҶ\_~BhtDRxC'udAg&vLÕ>D5L "iFl`ՈH~ܿy 2a3튎(\DB A+p؂Gl?,( H X dRSP#B~@ d8!M*tq- a1D܄48񺭫>ᲔhpְDVi!ɀ(yڭ ^LiQX`Viĝqj%Ad>LZ p@p F% *pSXN LSZ\\50DDE=PoSPT\86p$[ zR/GiBp *\\T`%@jC]"* JɀHZK`΅ZB/Ux䤅,hN^ApO!_$4Jf(@ 8H+C8pL ,(ElR@8R"07KJJ*[KOLN8vZP`hrnr(2ʅaV˞Y825Af地"b,9xP™h~(L?[ qٙ|( E͈0"10(  {bJ pHUA+Bb]s͟|FM/8RPxH`, YS]^qa"-on[ ^zl_ͅX%E12Xt%S AF#&V'Wn[jRO ,cB_"]Q vN |RJբ\%M0. ٰLB6'A]Ơվ^9$A. T$HY@'}{R-AOucX˚5`~͸iFc;0͈KsRxC,U H `%I"$0PI" KT; d|#i IYR/e-} Y Iok8@ ׬lO߻!{ׯ5mQ`1Ec3|4k.Hۣ⥏\I~#Q7_>"` n™֦}s͌l"BbüMXo>\xҤ3o>:$}jQ$D.<5"$ۘO8hzt$ bBHʥOHgZ5FTHK4*8/*4(|,a%1] ȇ,Ha@@@ VjT PWٰ8b#UZ__licUK^uVhm6#ZY\ [\qň8"KFP xpN9@Jyw(լPcDbzƭrxDС ]!.l36n쎃q9ηER‹\8:nFFZ~C*I6!WϪ͔KKkH.OJQ) p l BF8Cƿ-*JϽs tۄnR %Zg=HJ!qG26$$IZf=#"P!i29nc #Z|4s ʀL:蘡$ 5 <@6I3xX@Ʈ>°4B"I1nAtU @b'KHҐ]Ѫ~0Yԁ7o˃ZD^*ڂFUʁ(WWb\L0~q )" d;$K`$!N1Pax$zAC0E"Hr $0%`#KR%(Hz4 GHr>2SpH8KA3<IxմZccήִl` ("H$(+9GyOkq@AhBo1!Hhsh.D9qI%(IhpPz̧(txeÑX'4 M_|76B;xEaH p:EtL%X:avj*U;|N0,y53pD4I{$RVS~er` jXy01|H+ T 0 .CdЩG` Ė e@DC9CYÒHGX6a#| _x`!]sI֚؇D$:tU2drh0[x`E@5U_H+*Hg]Z$I dC1 H_H@JYN $/8];Gч&m2w( ߹2YP*z9SYPzenHP P6H7o$N}[3>qo`:" L86B֐Nwp7~P=nHdH GM*ʈ;cLlF  . T2{A`pX%u;A:7PA c]F`nq\`}IB.(k mePkKHx5X(K !SU2," TlbQꃔ*'Udʂx (Vx@Z ^5n!A."# C }HD"tq<*0!qh:141T$Shkl` kt gq xcE-xHŨI뉜\;*ÓD%l - #NȤ hd@O>80i8ຢb7@/ :xg\" %VM`i9GExe$P88#CG(`8P"+j4d~5$Am:H"@oD .PFjZRB$;B<qG~Z# d8DG+C~`XntLw$tC,Ĕz$I$IJ K:A>Kcgb|\GH Nb ;,C4Va  X@ ª@!%yJ"Ъ@6ML,. $.!v"&(BZ" !z !REZHeZd1+\rNNNV~AV> Ln \x RR!0! $Nhx\8e|G*8bz,rzu45bDBt#vEd' \)rwWF=@d <:C:b04o\A(( ]clcj3~S\nG'lift+F"Kt zZ{4oZ^ 5܂hķANA @_a> `dzB5` Z\H""6b$rbWtDEbh#2W^!/#\ZT4d)[V *6HΠ@a @_ HZkX`H%r@P( tA ~>R4pzz!$aFc Ị{BR` &5c5iJXQ+"C8J8z>lj~XYT#"s>\Z2>Vc,CU",n'qVu)*] (`˅fb)tK7H1JSȒf Hr+wD7 )9퉦5x|^BŀHF֠ րN '@C T&` HS.ݠdH"E%XAmaB(.B/(([8 UKvU"$bX.R(:b 7b#󑁢` BHZ/>If˪j8!L98$ 1/ @AB2Nu\G( pG,p>c9,BąWb"5)<61""s4,tC>8dZl.9H`k[@ЛAV}5\6A4G$/ xI<J7IbHLZj8dq๸[kg"I,!qCFŕ$('L$ .0~ b?! ޠ~B0rK0 %1ށȒ$Ԫb~.BOCf/$G ""> ,%\Cez"k(B!eRCeC]% V(J8``B fC%|pZeI" $Nhfj TBE%FAƦX/s kFBqUO(\LyM"$OgX,Fd Ġ .!N^@vRM'1 S #Th7 Je@F5nRSրP!TV)PIDTEeS "db/ '%8פ\U%vtRJsa$jȳ5T Ha@P($(X$`.Ȁ"{|jsݖaE:Z6:fr a)N.!H\#(.#$ -?/:8U<{F<71 d6m3N@X`2# #dÆyzGL:j1>C:l <:bXpj*4vd[# 8QdwTE*'\$@1B9\e7jI-@~g(\{1f*#ժm.!M? (2 1AXb'2& j/X!"~*nukPPVVFUJV v˱|w%>GW8N,T"]2iŊ6.@\@jj\`Va ր@|d ,ր0 c-@ z V&2$ a>bz\.4罞>ߎl$G#+K>Qu#=4!#dfy5h-w%p'9|S 5rwD5k@ g75636]CP"q0;gC{QEzw#+XR@HR’FbH&@7hl`q]1*~'8@+!D< $8$=E! (1޸&AV  Dp=suo?* S! ׹/9\|]4'"*r h2wVl&X^# !?EbA@S B.NY0`zʁؤ$ ~+A$vCga%|Tk[!# U~ kS+d #]ÔH`5,8մ5 I:C\]{߹H~ ih JqP 0Ń0.¹xPSM6D9#8^"X`s<"#) 9/Mz(G97:B?,+U@ɸ⨅tu+  @r$4P @ z[O8$D/&1:xX IXDiQ@$X@ ˤ@z­,HŻ7 9rD"{+Z'Z5 [N<)9Fl ~lAtE|)@!ĂEIA$@3r93.XTEXDlp Y dAmU 9YTTY"A!YY5`EHPV"юP`єaA{(i`AA`RTcƁE)X"099Rai:e:sP8 qF*EhĤfEM`CFR;0dR#Kv:Q)aIQ60RNY$`RtsLEsi,L}:QE H\Օ.TqZ)eWAh`m@>H) @s5M@aLRcs!*XT(A Aqdž}I v 4CҴ%tof W-+4G 1 3PqI "]cAʰJ  Ȋ&1 W kO't70p"1E]",0;I` 'w&'a )Y~ {QAPp{ tƄݩz_dIexеSPŰژ$GA _c>̺tЯQetG1G,7Hq}"ˆw"Ry]EȒn@9& b]Ȝ00[8ùB`PPӅ9Amp3Edp@^ ̾d8/MzR <5HOXv=~CB(R䇌'B'2:fGg}xc%RV(l,B5l=s7x [ά*hk Kl;.$ H/nFs Y0qcyA gdE$A 8 bU '<> djEa^DuQ6p0"FN<;uټɑk"Cumū~1 ĝ4(./蚚X&ŇxP:ǭәUR|`Ht@De%a "ɞȓlX+!Rb)E`p[t>18 5 *ӃlDREҒ9Pg= G 0aYP%)K H…᳒@S5n1 =N|`$#z%Elyӳ8fw ֘v쌎ҟ%@G8?s/#&N" HCȺm  hIu &{Fn@JpBo2"#] DY}o +rrwv#CJ^܂oPO-?++'cWc(w 3<10Lu`q"yG8 %]f^%')I9B>) ufu4>p:8V,́&-#;͓q23NN=*β sPH2l"#`v/K.r29.x!yG.YPg bpB!'BP !uu }p<@ }11pCaa2IJxq] M vW bpr@;EXq3aF~R3e4l1jg9Ej˦3 mF ƐgR/A maI  #qnu0AJ s1*Rp![0/ PC_rPOY c ?);>6+'۠pr'wSS2@Pl3'm*s^x&PNGqa@Dt|tuf*>J"@Ga%ܢ00sh scx'qtǖL{ q q)>Y >& `' m;M9$w(wqbd"91}7[q + 6_)3095eUfEp@AzQa2P`xKހ0" !o P` Et%p 7mw%%3bQ21 p4*d@c5j~136E~q'4̱lsp'{ H5pC 7Ep|!7 I`j)CU]t2LuPom@9oǚ P /K2p b0 Pe88XOr 0`xrRR9)Ae: O`BMqprxAbبqr) )b &-#st; MI#d)Q)Zb9)r=}gAkAj1 thAxR;w9^?rhv1 Zg0 zy z "P nC@ rsP[t!Fqk1Q=jd,-<}RRLll%YҐ܁3ѓF!00 2I#l3N tE}Yp@Cg+m` :@ Qo` k ؀ ra` PE#rP )GQpɌ)G o|;&]Fy ':B?:Y! ;)'A˧k$q|A JpcAwb:v+@1!-D&y,%@!'zoSP JJM_hF o 590 ٕ sDo5 W` m 9!C$u@N ! D Ҿ7&@ˣ r qZz+FرqY^SG{F͗(Fj  0I] ]u |` R| P * =@ APsBYSt@*OF R Y` @S6R  C !2p0W:NV!k r:)'F Rc?gy'56&s`'%o{}(](t)ͽ)~Bcŝ)` "+$bҩ N2N`aj"8j90xZbu:&m@ baAmh.j1c# vv#7 9=pzT#S^s.8 "Z i[xpS@0NIۆCpp` \Z6}YƒX%\sѥmps2 J5 Hŀb 00I@#@ ^`_}u0t &;` F0~b RYζP7~.7{ b6a P_$J8d'@E^2i y2$8 \:)8wG ޘ1iO\.(Rwy}G>a `gIܑBMp-`0̑ls`Fc$m?c ż087E"C0Et^e$FOa30q 0XC n.@ 14@ pR,Q[Pi&A$!X?N}ءlī5FGHQG6qQ?EfHq2 v DNLP!] B Os Ab`0 8V^"a`E69@kI'L` X `o 6c !E mzWbSbksB"iۻ>)TE0ҩGqkmGt0o~(Q(tM>׾q \'}?[¢&ݔ%vDQxD Pp/%LH/ K@iт i)ل&W b@r d CD/@ f"B᧢}Z(LU!"U%,e:KZx [SeWCQjȑK6ˡֲve6 Bf:rZ!XFc6{K*\)H"epRmA&-K:.uѥK0Vxs,PElFVZ:'8ke~o8B0Ѣ Po nQI&Ye! Û80K>p"p 2q:ĕ$(YtT Y舥=aF\*\"++C20B YaK8S"$N0–flC8( B`(PlT"`@H#2d![ Fd(Oc$7-KO#2E! Z!K(gH+"K :hWHfhc+0ʇ!丯-z(_@ V*F>(Yh¢6('*fBb!q`E#%2E,ȔLk$"8d$ >{l3`n#vKM2`@ӎ n5Vs̚P v z瘃,$`&b \kat.V& a@n00 0@r€TK*t1= `76jü!5&. - ~6̳DT~} 3xф Q(Ӛ\qIMR U9l # ʵ0QΙyP[19b@!DP|Q@fB)b Ysќđ- :3}1X Y^D\c$Q$eBsi,c. I N:LhNZ sC9@2$K!ʰ tbk1E!b %Dd<XeB% ya-r #XVEYJ%# N`G>ijrXxNdohuC 4@'R%PhC~ !$PWPyy,z~AG&HMq` (hߝ'6oJL“*Wz2 iBT!٧.P)Ъ^  UW ݸaBIsJ$u+\(a%"PB8u!Lj P'{ц7dp/؆UaEAnqH@:D9gI*R w5a!" )wT (ZnBV# D4sj P"8@ap>@ oJX!]g4 5=UK@ ׁ~1Da@P\d UVh 'B".PoC40x ,@ftabsB\Ig0f `Xc d ],nPrIG~` )eA\@{^f|_6lo'瞩a hTG+(d1fΉGpS̐KF XB*n`˼QFX|Aj*́ FpŴȡQ MdQ ^b3HgHx@y@grrrg0͢@p5~XH. jЀQВ%9ꂿU^j$H@أطb /@ o0XHVIBP/kLI$܌$L NJ ̸y^ 4!Ё/)u-#8w:|!ø )KK^`111(^@Ȃ,,yKU `Q@ȁ`x5`ȂQ8Lф %PsRAPs Y0>(* `8m-@ YGcmy9)=鳄ۃG{̪ g)+F!rMp*F(r#{px+9y9#):@+a >@|r@ _*TH^ gpE*oS8@4(hBpSLw.@b2@X aP@[0!h1o *d 0y  jXMh8[ b%hR!Ȏ]( Mؚ0aHCY*GxD (E"M 5r[yA%k&:@Sx,{HȔH4M؆Onܒ=H6BDHQҕM0y-q8{$3܃Wh2 P~ (*% =КbVK RD\a`@(ʈ'4@"W"B Gkh,pPy o >5?986y9PXcj Hq BѷRLXێw8'a/X0qX80 P?*ٍ ۨȂ3,PHwh.؎H&H xA  w"@ ‘(4Pr,@oxAj&v:Eafq bj!Yk .( H \Hٲ0Yi$<r 60#݄ @4DŽ>o=iJ Z1P367)}@>kylZ>8ڂ}S[V;5 8;B6R2-8͠ @$ɠH)8r[8 9cPɂ Y+@DxTar6 708T8?yZI|Mv#t+V88т|jH!x$x$xKxt+E€+ 'SaoUƈ FUń@YӇ$A/h0ӑk 4*+7Qe;|@0 ؄m 0K4pɄ3)ڄA~(͡NS(^:hW0O%n.MS/pSL[X M# F)8 (̈]RbPvvx)͓ڄܻ#s8 !ЇL*Kó#LB /P$dD̤%KH>#ccɍ~Y0 ]X,ݚ j؎Q#SX'11a' @VI  x+*LdO~G]P08@fTKjë́O@R@ `78aPXKx"$RyW} ){װ.e6@c؁K͈H[Ћ( Y*12=6;֓n`Z3?cZ "h<zR+@)%%QzLb#̈MZ.DaKc)((MT(92#0{I g<ۖ`Q' űuIoHxZ8SB6(7 8gDj dZį7X8 Il8@pwV+T+`j3lT|ফ DhɁ[ȁ@ 4RljgQ@p |(0|8`j1] :Hx؄5hGxM*OoO!:8i rt^N1a^P0f<HD$[DK [@`B}X5Q2* 6Qcll;6ٳ=S>ڄƂxRx!C4*L3L%O*9<80fh Pp>Oe(5\M<-HpgZWP,Dxq\p53z>@+h%ߥQŹ@pK%]Àp8 $!8tfzPO&[88/젎a0M Q(> xy1/37h}oKD4_ψ+* 1 G&HL5Z!$Pё! FCV0}JBdGdYXI&DZc}108a F 4 }HIGRAÈ!rOI/0P/a8@Y($Gt&uPNJ0ȑ@ߌ-: Ђ@ D%LQqd'Q>@@;0` Z [ SM #b–xVA4W/u5:3)|qE]RZ,ݳ QsBX`Af%F5a*B b,YrFLuC9@@TQ aDN3# b7P>c+o6-WMJ0 A4twAC 2hAvBp2)D @.X-$ͣpp@n`sl24jq;A{HY @_-B=)gf8o=@(dbYb>$۴1@T'Eo'P ?7"N dHPeɁrH], H(E*m+0 Dp6С L\! 5)H@v&Wg dȒ-FԏO@! ʢ?i U E( PP [+&(4T<b9 pְDaq@~bp||"YhU[1A 8) pl `'Z'!0{  GaˁC $VKTA }X(PǣL?LԤaۀ.%ȶ h\%YZLNUQ- [Y=te4I@TOTA%  \_O8@Џ-I  >VBLQZA\%|a L@PZm؂ _BL|BЍL AAxCD^-!\eE"A)7P7p2Q̀p7An yĜ Y۔^0R EEݞ0՝|A B~B4_A ؝P.C@.9DW\ [hx@l|B/@9c+S2Dr',|<|B+@14M $" ^7Hė A΍08 G;S?mNE@ d0 (A(d,@A]B?olACUdQC tB _UuO7@7tϮelI IbAXZ ԃ@,OO$!e7d>M=H Pș eCXd5%%C@GlUtCSUJjQA( @@iuar,L B\]&)OHJB9!P@< ÌqCЍr<#Qy8" $y \A8lZuzE]mk^4XO0A? ĞI0@LɘPC YA[NEqW^") p 2@f<\$(BASlt"yMͅa9*==%01$-LF =ePi@lBpU$ j:ULI@$Tx- >ʶ! IP\B2D QJ"t؂,Qd%`c]wN(ˈ@`Wq Aj}@Xk`LeP Q ? m h@V @xAH8"eALLAƃ)HX0 UF}-,x}W° Ҽ0N&nQݡ*@,: DLB,Ҧ@AA+ |1<: \$-C9PTA p7 7Dc11B7x?.Pb1 @(: $+S`C@e&@DXBO9@ádb4D2DTI& Vi ,M~UƎJɻ 0HADjA.Z5!A Y > 6mC~ɓlTXE 6VA=̈́Dȩ,&Lp\&4 dAD\ԥ1d-DEs/x0mL`@y\AMTDWqe\ "bABc\(2 PF5h'W"I ~LB?UM%>0\U(%x[A1gG7A<@\B HGe)@(dS0(8!@+䍺q@5Ԋ1p@5x}GAhn N͢=r.tAc * 4RHcȁA@g, zt2'X$?@p+3`$x1RkׁN@A/$' daP#C)Xq+H/H N1!"2. D̀tEx %̀T#BT .cH@#$WqA< ΋U"~D= vBˆ]rbI-Ԃ'<Ի+ `pT%@3 @$3d~/rC9\Z-A1D1@58 }ZdCa.~,Ĭ).\t  ر $rHioI8ds#KMk\sun }޽z} 2)S6f G%ôp+mZs]ݜm3@챴k[qp tkʮHHoF`180ϑEZV6#m  8r8 *m켍 &H:p*@:sM}EM_mI0(8A (p0 rVi,4x#jXa)REb¸bzV dxv 6((& 4&~+*bN!^@^piRNڀ#x^&I7$C!EKZYHáABp7F$tXp -23A $ 8 FV j&h*r(>Lq(h y- ^KnL+ʇphاbp/>9>˰1 Q d 3*;h6~XO,*RHa㬊R7H9IߌIb+. 7#\ ¾J9@NجvI)`s(UXl##9.nRԣ :ʥ3T|\I!_yoh)(FG$H"\bvRlQ$ZHFx~xx `H D#!HEoZ!"hA+ 1U(K*.CZ FpB'ip  FJ s`y1ԁH00 H J@' * V@ "5z9DgA2Sb- S&™CdAǻX0!ن,J@5aOmvdְHvI6{`>d2偉%d:zNAj ܸ~3Dft2 8$l!^PbPKBeHIAg !Ƙ19asdAMok@ p!zV|Q*ĀsuEBzMFӋ>Re$ANG%UB AC&@Epx)xn'5N; iH+ C*'b_ZXT, ܋q3tчT£j%qH´ȴִBESq9Le!4E 8C@Q*N!'(RXV @`]6)pWxe鷒42H ; ȵżtH`P%OCf l) *qBfꂆ2P[="H9l#lt\A:FƜf0CP4CsV4"iCp~L7k65">% #!`҇UhNPHC;Vq I'ud: RēS2xAzQBp}~u7p[ .$EG'[@*xQ=g:! 'AѨ ,KIp!wu G@)RaE/Q]`Tl?#C `R!N]H8L ä o XmtG e^]1 b`* oHzlJD,@BNԕ-E|}i$ _; r PG,Va #| ʁX` `{* J & B (! $( A@xὸ $ `(`0fb2 1)0a1^ *fI#f!+B=l-*AcCl`z(3 6v,hiH4$|@\>,<` f:&6,~b64&b (P<-1dh?>RDl9B:ow( pN@)BLj.A!]`$]  .@#B.%:"!d@ ~`MbX"X%@` r a)+ԃ$DR!%Tr@8'bJ@bJhgA*E=dN0SBB 0@F,$rr xX+-m&vR'1A  & 9 B@,Kh'B/$ H.L ~$.D)֋32.3jkBA ar&.?Z $P 1@!" -8.^ Y&.!#\1l(uQ瀁 FJ:Jfd-ikl.Vv36C; !s2XC?mX/ q>4@rg#AhNӬeu&aaS80B&D‡’N!t% M$bM;.a+쪮( $nk]SQ 0(!|H E3r,YJ|Gzt@Af=m!)0NBBvШGB R zaH 4AB10l3qf2aB"$a4 HH.5 آ֢`07*F(a-Pi9 @#9Vh>lh!)i<\A3Iiax);?Qf3\ &A85gr-s- DApcL dap?"rL FcOF=!r $H:fGZ!n GܞJA#vH QQ $hxbn=t_L%R)H!PAqBr!hw -$`jEf@XX(x4VYnz`j*> ,v֠ `"$aU2JavH-]&t"&BH"b(J.(`.K "/(<|3>ciaVL;p&p1b愠,]T3n"h— )6aBqÚ )>C85(eq3$`.`:a3@<\#@d!ha6"lk.>$TAx >!^f! k4R:)$ xWT`KD|HH5ZDx.C)Rs>V> tca&kdI@Ǯ DC;#sep^$( Y LRL TtX AH\a"8gmf@FCᴲ4h!sІ$xjg. Aa<vYO /i!F&,ْ\9H dd@k6#a ,=0#N*a!OXovBJbT>!@au^`r()ZF  \A(cx `suxK%Ѩ"R+>JEe_ba "Y0 `ɝ0/f@q-^-$xsi[̑Z[f O2C>`AADD@"jjA aR!(E/(Zr-fr 8wꀚ$| V!Ak`^6% āǂhVg  ` f*6>dN^\%k)T!VA d`7+|$Zayj:bNTdfj2#, AE!x x@ V,A;>rꀡl&…ϠCAā!1H=U"%7A]Bh"2D`bei󻐕-@.`b `М+c}f;aCC"<`(U #f\Qc%JlC2zkn6wIPq`P$՝njD̆ !28a8:a6(f BF=`ں.JCQ+$@DW GF_>7 !xVC<3BPp \3.`B*zQ 8P[NĈyeO[xjҧ $D( b[jfI!?Zd(0 Vd@W7p4gaM-՛Js]r\OsN(̢Е7qB( B)Ns*rP;7χ9+)";I,>|H8u=qfاp3T-|__Y2&@0> -aLs u]B8Ǡ% hDԡPP0W)B=ZPC;.č  6 SA7Mb PGF)%FP?+` 0F B"BcAOPB5\nI,pP[nB,tB3,RGBFLFLrB$BbtFt 4JBW@E9X5 #TPJBˆdBC,Մ(*3()W_IV`1#7H$2W jɁPUuu8o!-+7]Dv-`*Sr|?>*-3x-gB mf s+;2؏Tz@@1%X}@5BV .k$N ,DD G)Ğ jt#-d6N③6L3(yjB)@c MC;7@ыܸ"v#  3Ѕ86NNp"B PQo6Z' T j иBcm^i!L xEʉB~!\lSH x|(an Fe 0Z.4XQ6 }+lc}^( `/E$G" 1[7(Y(mh*$BUh;M f:4KHlHHh`m-c rP ʝ0'#B`J_(9I; jhBҠu>vb-78Đ\w!N!գDj!OQj#[._<)dF%m60uEJ@Aym Kʼn%v `@A_Nt8IT9u8&',ʚ 4L '#6Pimp AvBr!aX/ _h K* #Hy%OT 9I^x0:h.Npč'BH!`X2)$Ѐ%.wLW-$ 35@g&gXAȀ"4" ]@A!1R9R9!p "ЅgKL CSjDTKցoTIdAg5,*HP37B!h t9}i΋%P$\gxp)La'bZ9$ۍ(Dr#hadT!3*N)dUx *}YF{qA %x U4@ZY]-2+l ;%~ 6R<AY%ͩ>$C(-Pl eDU,dZJ M`8̕R aK <I` l8YNp8Y7>^6 \ `|  ,uĜ:@H0 KP !<ml͠E?>A1S*k>慼!UFU!Fha j*W#ZȲDkzRr<|Vě Q#h{d 8!޲ǔvCxpWH[$s?J^.B Ѣ4|ڤb@wǩg+$kJI,y6F dnA-j(ل +`nLB0)= Q#hf'cR#Q@z<1@0>%9P%w%(:K`?x Gp? ?V@ړr;^sPU i;2D'S5`"!m@?f"G!$3?q1m $t`gp#"` 5)1pc,} 3`qm'`PDbPc   \I@$h "]8 (gp HG;// u!fs` 'q mub} 0 k]1bCm;ހx;u `AA1ˑ;.#ހFD5a qI .h0 oP706dմ 㝁s<։N)*-랭hĊA'SWQmp(H8a gCl Ѧ 0 {^P3Hz1Qm0S Y30e!YVrB5@MxIS |b @8D-""DgfU"#lCs(+04жdWD' `qV}0oBU!@ST@_36B9x 0H0R&!*b )( ɭ+!   ,Ӣ_PM' U0 'BSrGU!sp1@  B)#^texpQYAV  1%6X0 $}d 0 : ?Dϐ+Y -@ W l>b0 U @7 S@ 1+ݦn5<9c&@ 10d 18 !aqdgZ8Q &T;X|KɚB(eأRm`ʨ<7mt@Q@ôp˾e->3"@Sس "Q2e͑rV`:#3C(Q !DaR#AĻqt'Ab JB Q P88Q c%ԿjHk~'` k 4@u "+)s(QX ! Q !( a Dqeun(q<{ ACwp@Q8a_Jȭ)]Ѥu0""ض w5 R ސ0+ 2. , b [8!2I8< |$ `7y=-9`>K̲S )۞x ΑQP 1+gu=u,i{h`"lR(HC;e g0W q@xMzM #+"ݶσ aKWP8#kh#& -Zt,eu@(p86 -m.JHȕxM:0oux@VZ#fz9괂7 g^&@*u<0OO&4ֆo(VX8r80Iit9HUX8i87yZ#Zc0Z蓧/Bfpꨟl>ılR#r@}"AnqH|`Ңp 'r)ȠI3qtM:3O$ax=Zl(2 >)@:"& ,ЬB?hqmɑ81W&P EA~`hh( b><:IYPCo x8znPW dQ|"8B:7c0:DZc6@N)%6> / ,bZi:&HF8,NE ` ß OZFzhXwH7Э"9v#K8h`U,d 9 x9EPi_DAx$ 0$VbgNe H@.@ HP"`Ҁ& A`j48\$8afx;0*Db[9O,%A7Z|*øJO/)+q 'd2pr2q/L-Vppј |V]L+{SJz)g' *" iHUKX52BJapc8OY 7&p(nPizu6pd6#, ENd.Pp$uD 1BN6""\$6pGA.rf"p9'd0A &ЙN7_ ȁ#}X̰h l!-@+U`3xpf>AO'$qYvd$<ԻYV.dlJx($ HyC@ f )*8yUHA,qfn0U'EؐRuXz-wyOOxg A0 pt$J YѓXJg3dLj7RiET! ʑN<xذc|))o"wNH {\A#U+#Y##DMp"?XWb("6 +9HCxC[3AH#Y<=3Opx }^75aUG%"A@>-)'@^Dfts|!LZ l# bK.@ * j" T u<:}zZyG c``Y>@:xA ~@B8]9"(h~@3,yHث b(\`qP@!00w8o$H\&  UX!N(ٹ 0U(dHi904`m$W%=ȋ &k8:T@ 7⡺A3qǺ(JΊ Ȑ@hW 9(:Yj; X y*]1n0@2[M!`_9؄޹l%Y95T@F1Q(8}قF34 zy(|;[8$e#$!x6X@] *00`]:Ȃ ^9H 7(7oh8 Wh8o'a + D.T7X::;~~1zwxM_P# XJ2 ui.' 8 r !1X"D ,0b5ѻ>́񇋸<ЅDHTȰ,XIh3R!QG(Sl B@Plh! CЀ H@ Xbx\ ybaHR<P͑TaU,8Q)3Q&!$=u+,xN@cɯ2 ؃`Hpbh!8Kn0J :H$y/$ѫTi4 +D]YЇF4KFy~M r"D}bQ׸ď)&qH$ hӉ#P/ h< PP:cgpvKHB Xoǫo:eN+W*ᓀD_@^xI )UDhُ'uܤ0c,t2!mq,kH(,Yg힋Hsm~*3@ Sf) 2:'ǑBB \јVz [E ,DG!lx+ߕ/}0H 3Jprx LYTEP0,#pkt/k(@hv`5  pE۽A>$`,a]Geqyp|yPj T@ > ^fW8tAÍ悋`7:H Y4@mq쨂M9PIxXzNd+ `8)`mDg͂9:Ea' ɨ\ op8 % TBkf8zT`[U75һb_l==ҳ1ڎ5>PھY"*әKV p (0#G ("@#P@m AHXg<@ PZr'ϐRf KK]=t%+@#PJQ`\ B1tCmM04@[I'+Y(V3M@}mӌFRؚcks K nFfxr,ω:sȱQ|Hd !A΍7 8]'\|b`9 I#K}1`&9<}!K#DP@*QF X3”P!"q-%u@H*C 0rF<4I RR<<3Q%rBM]WlvLLܴC=H("JL/aph,@ss%rCK CP310P5" } " !=@ I$0Ea .tF7t# `O  )(PkJmȖ@T3]? F\Jl4<1eU6Nsa@gL`Fun: DAXJ1 d ē+psQ4k=U@E 4?El6 ɆTWhʹKaLy e10 F0q%TH$LHMu؂03Ip .`OܰM .@ K<%V1ǔ1HaI}qY/u VH@8 NĉH,lR,_T!+!@$%dHR(5Lz ˈMX 'w oV y V'"IF\v () 1+D^XI!ml$$pL lAKM@В+3#l`QC~5Y6-vԏ3lIkKc:&aH U3X27@x!K CҐ)39G].CQ(Fx@(fu Tr+sb'@F"x x`<81jϑN 9= `8h\[ c LhtN81/ \@@vfL$j@ ]2k##kC+X Nw ;wq( g'XD&Q(ذ($ ˠ\S@@ &Hv)t kirz+Y01I1pB~LӾ &=!B^D e H\^5I8Q-iy8c8&$2A 9kZ6rVj+m ÿM)sC Py;E*~$+ۄ,:9/e c:FAUH4f=np+14T TP2Jtbh齑 i!(CL6a8 1[D-tg0 `X#ZE9(AĀ ABYR`3fi 7>g X<=I PHT'!"IHZ0jxlG]^b~ RSxҥ&ȱ"Xj -VŌM L@C9ħ DavL7@1، TKhfyAPE $Ѥ`ŃPZcɑ@KAE{RJEt!yȑ->p]t|  DFA\Ȝ\@<[@td %hdg @[@AhpsU־@!ι-V-@̐QFFHE @3PA.3@@+JdDn@؁Xi.rVCX-C dS|%X'}F@|h@)҆TAYeA czTxƎ *|7( Œu*)tA,I5@ rB#D$ApUJA.DD@0>Ш ,0+N0c͐NBO@,KA?T@Bnʽ 1<< xLD6IqB+L@ew_o ĭcHeA?S\ex"`SX A6O@֖@1źl ډm` m ڌIL<Ȑ3 v.ԉ|RGɉ(B+RAA9 A0p82̉\ʝ,6HޤBT]d)Dm>dl3Wd*\gC gB,:(C>m><Ğ`IhY[/n#DAPJdHl.aи)NBD+FJDKӺ`0Jpˈ%A|3 -9C]KBĬfMG̀էHĊ$DIY,FKՍCpNR@.jL@jF(@lpW Ӯ"Ad aTν&^K?G<5Yo@ఢ 0\A*4%#]HSگdAH@]q[O "\$|±vCH@HЛ1LUA.з0Y̦^z3|Lul1$B6{p10xS$ s蘗le1؁P_A$A/na i:mL ;;aW| Hf5,oB2@v)p@0)@VkM@m ,A2@)<3B(E37l dJ axHaD|ЧD;Inzfzפp2I12Yf12=DX$DEcK\f5:DQd% !pCQIDJX>8yWJYqĔ oF@;C"@Y @H'T5(Hxsd< lOT CʃF'U'FaЯ9qROUM.0r@ iTS-N I3l":'"H jy@@EaF@WEHc*7dA"hS @+N,}ZnCĊěBÔ4,/GN@sI4+rjP@ܴHX}ro1Q$ pCL W@om&@HoQgH/@P 빅B: HfgHzEcn>H+PZ+. @tr& *-L @1^GKCM8τH8AS?J1,-#| TTI@cCZ'm>ŮXH\®?5?N…R CL@ 1lhA@ B-z#A YhĪ[VAaCĹr/|(2"jՆ& Rz@ o"qO\`2kATe%IV lƍ i *(L`ʔ}U7lC"0 X Sed c"DZoG':X0ț8xN/, I8Ȩ*r(#*%hHEETDƷD,•"N%X›OP NkC a"B#P0` lȈ:6c›UĸSHs*\x DV*t~  2UtWq"R{`%e)e@0"! )@EHZ驈Zu*b bD'+%i Ȅ8i]81fd#*bK;X*d65"d,* d`̠k~Kg-˾1&>d "x6c. bB1]۪Zs8N΀A}l#X7D !ΉȥD$ 165#0;BN8Y$ ě8-c>( ,hfP< ĒKc76  έHmB2ƈ~dI 5xȮk(+z bO)f7"g'R1]PfJ8`D0IsDnvFxND:3 cy/VхpI2-VdNbDUIƂ'b|6ťDy^&kiC=kk@>`7;L"0-AKC! AnDSQ(P(D*X‚%D8:J3K D0"HZ005q"Y 00|F/9Pڢ` C* cNP-6uhbCgRv 1!5 n@d(Ѐt!9h!2` >Kqf P'V"B" "ޡ8^4ޠbn 8'Ō-ɀV BV4a!%FaTkku tJt (- ڊ$QRBH[de*Z""L!Z Ba1|."dbd"J-"tLzJ1"XB@&o^)lS`|MxJ?12J.."  -NuZ"*JDڠ#9$Ǹ b$*" :?RC֪ T1"Q6Z4ᕰ9XB6LdF1Ќ'L@b 0f`E~6`x(BJ# ~V pP!`q@B5Zf 8c Z!x:jڦ? &P7V@2x$%""c@@$`DG6J6D! n&O|MRR(:LARF@ b,*b *bvBa*!2AK"p + FВ!H "" Fa[e+G>Llxbn.r'd( iI"/"¼v'^"2~*hQ.B@f 1 ! ,J) 8pÇPN<|^$f0 8\\ڱc⒉y ӡr9&5$v7Ckx@ ey'QN䰚Q g#X@'eb)sةU޸B/Qs3f.0zn@b h>ǃx+V` زhuN)Q5ps{64X`'cw);(ܸp`"0JA}6pH uQ5Ա &h1 84CEPb"mtS8P} @͑w(wӏ7!q@Gy$UYGoC3`@(\ uLX2C 8Z8$h` =BEUTPFBP:i s$(V0 FiN cC()F JnBȶ=5UC \IH*C<@F׏-saK5-dmh5]B䶎lu(sJkk+9KpP+bPDD o0]]l.bSPC2b][=nZ=]DĸDg-QF!;lIΏ)C/[M; ٌА2rHnV BX @ vp(RmDv Vxo> >A\F\0A!sHŴ#'( |U`T[!7tpA,P$va, ĝ)1C˜o@9)&B%`V 7HSy^N  6;Le_ :a(=SEp!/EK)0.9pW G9vKh/yGޠVqF54XAQLFgV!:@@\ W(̚ &a{9p7R9|r0 LhBlb6HRK">Җ!֡P&+2U wHː&)gTfW`UB#a;l2( B^|.l Fȋj(+ũ\2@8C6׾NN1iѡV="C>L/ |'ԡ~ua(#"P(1 e<ѯ" $vn g6\d,jC35)!X0.5@[Y:t<X3UC~)]:m. U x*nۭ~]w X][.EBJƄ(WOju.tr_Fw{]z Dc,ΈTu=h+QBP kɖ*,)R)c2 FJ awI;oPم&~76obsd8V0=VEOO錄Dł 7B@8A>< ZÔQS`Ŗu=+yI!lJr wy~T'p6'fo\FB ka$T8D898zL`87gcNeT>,qsbT i90i{#U4t0Ơj#Tah$m%k7MUӘ<|U7|eyFG7p>!0C]3 !)3k#jk+SGxM(] qERtmuq AP D/QQŰ|x"xe\XXGT5MM}C \L ` 7s3 f'30]y91= 0-j5$&Z;R405A*WA  o:Q @u\a (V\a)0QUBe8'B='Xr)! x j!S:8b yCZ>7Wa Z Bmr):;#Ec18«BP@+}JduO8KtFB&TY?觤EdR G@$FPd!l;ojduox4CPG9+Ė7yrĉ=&r@d6հh 0 zw1{o`7EHZuxGBspxutkXiQvei'Yw}\` 3 ;P -bo6m%N;Cyd J&+6PZ,cz bR˝rd<0mW'uP=a C\È?4ds k6uQTpd<OAt؃=PT"ŷq~UUL*Y/JTFaaQ#E82 EW]U^7mf鴄Pʹc8%X`BRd[ ,|G ]`-H{&bwǒ%YoZ<.JA )w afտ"fg'RgҨy,gi A+70 ỒFA@j 'w F$z?)񦉌]fpuʷc+D5MCƤ{\vz<껾-{ؠ`' ţR Irpko$Y[] s>:4X@6DvL6,YqlvUJ27 % ipr gɖ\~ La$Q}`Gz\×C\* 8 :sU`H Q]u0UuFpҢ% PɌQ E }oPFa2 B`aYP`0cu8JD 8sI}0hoWv 8o2)U[GufVhuģY0т P,@ 'Rjlà |`N( <|#3C]y8ϰa .y*8\_-a2Ԛt}eMF9ŠkPzVf#lUrC\Hz8@ݖ+RD1 pIdq <"2 ҳ PȎxA4 `c )CX9{|\k۝TȷS KexbEx=6kOoppY'TԜ89`L7tC3h" }!&qJx-ZsImX]q:rpU>04` ͊`IV)k ^+}8KwAb7Lo`Y2Q'@۸}`ՔsEFLQ |@EH "o`Pl "Ds1"<|ͫzc霝!7` o@H , 3@G2` عA{r@Eq \ x*}*P 5  S8J>TupOY=TKˀЕfpWLcvE'geZaPcT9Ia~g5/& ђ{[uA @ 5 ;ݠq*$ ;` @{!lL,C-CI8 Y8 ^I:aǞ=0}c#bJ A2X!("ιKnV1XXs<$B'_ <buՀ>8W @B5VˠX bY] Ŏ%[Yiծe @2SW]y@'V.cGHfc`/}r+0\IϞ,6ԣ*, @cz4@; >7=/L5 USeiIgsɺog b&ڡ0BM$`=')λi]"l"H,1\bi'6vP{T0h=P[`03$l 4 `ě> K#$Ѫ9|# AWupn.Lة('daYe!+1]Zu[n>%x/$Bb5ɎB zYR`b&6~$pQX zC5d m7&SfR~4P(E Hw ψn"/A;]+!B@BPTIإKqSBE e+S!&V;an.V*L&ت2h<%u_E" g$#PSk 8:pKzn"b $h vBNeJ~dFIpHP A2`A> "uȠ#EKƂ 倪ZHCe-@$CTVRRK]:䀳O,G*vB#F4{fzD#f!v]͒d;R:ԓш5aaf*h_5g%9 7@ oPױ#>1`7' 9DŅUJ[j!COߊT J-AփI%VqEf,;h' zfIǏVHFijA;A} bTm{'^VΑ%z1.8nPY# TA}ۮZ1[*TTpkS*:ZEd'doRMNvr#%5ʯC̐m5RMd\/#ZP*Z-~lS7Ihu=2? 2 iw Џ/68eUٔ o4Vwܽ12afhf|>"A,@A@ũk%HvA,TB6#oioAhրnA* ĦD uJm!dxƀ1uCP$ѸG+T$z:Զ/;eo~r. i&  g  , xA 08>@I@ 36(va'#ȂVkk` xh)h43@48Ak(1!C1Q iS5+4i8 K`@rj/y* Ъ<27lSxTd@y4@<6 c8!)U1^ C#N,9@%$ \E%"@MHŽzBSUB`Lj/Z 7"*<>I`jyC(Rs 0ABF> zs'%x{sA \:X [>Yd Kȱ0pQb4O)h_T`l;mXPinY .?#)'0#;`2X KqJ |t@X/\K xĔȵd3t3ܙ)G;:cq[AxD: HaH ӂ˃7aXۢ)`Ŕ\IUQ.@ ? ٳ P"nbͬxA8\gHK 'd$+J ڎ8>p .L5.\5ڱDTp@4MH}ؔ8dE@Q٪Vʬ!W <ءW3 ; )M77AM5A8sibdqډ?pQPi"kZ$ȱ4S8:xB,W9jx sNV$((+`q8'%j`:ITk53z#3# Mh*,i.1ӳ 5P*R*l7@Ђ0KB#-$\%=;XPptA*W3K:q-rXȜ*OpZ@VJ@x:-ݪE3R3UV2,t49][n}~LYZrmSQKSj!friX. `bH`pqj* B%bQr)5fp[hìXE'Ёpj_lJ_+bKJ'ih kx ,j xp;ɓ<[[8(KȂ !`{ЀHwxq,6 Ø؀=uFim됉^[ֶ&}$FeM%O@ QpqH@RʫX,PXefff%0G&u'HXpHQMq؈` ׁ堍NcS @WT̜Upivİ:qr`a}qK}#=`#(Yv;-Y[h:6F0,9@̤LZ$P@؅ |܈hqhv 3ȱS#cg0xtJǂQ"1ۃ3['pt G Mn8ҰԭV;UK+ 7*iPk鷩uaidbhw#'$mWmJ.ՍUeN%@Xl@!u,2VtP.DH P4PU vV9L+~4[VFĻ,|~ S:3֑#fKvBBH,^$/ȴjײm-ܸr&0wnȋC]d i;ja\1dij-\k̍ 3#l 0GdNIkfX8J(0ؐYu#9Ȋ"E@^y8$"a7 rOaG\4U=vhQfi"0&YSdGiMh ?< 6 |:z$qhgvCLJq¹] T:L,) )șR& Ш:$^5hH `Beicz$ 2SsNS+G)k K!l\B!gX0u\U˿Ȃ%51\{%L=#MdȔAw4Lu#F qD֔ cB4`ȩx;<-xS$di1áL$]0* GgI.! Ggd< bܪq:$eZ.27dV@*2Ƀ:a3D&c`~adYƂ"HչAghBH[=FU89rDSLņ%&`%k,* ~09 s1M*y;iEOiѧqpd_I(**\ W @h!SRZDPMm5SCYo0g@Z(Ro,A6S_'{1aXP@6gP_^$caܳw-袀W$DJqMB` QDd Y̙TS'=i*t/l&yZY=)8٢PY) /ښn@0&DpHY Bk5˻a, O%uZrdb`CԠI+갆ỵ-Jƀ W8 \!K\)sp3Ї ,~8ɪ# "i{y&ȉ[ kaup)9)Dnz Z\L@,ʠ=q"I˲qT/L6 Qh@#Blh4{5'$KNl\`jvH:=RyX$ -X8X+p 1 :;'E $!( :t׳hB>MŘ&_K#T='g</@W.Ν,$AC=X, ="y|waX?@!]"C"/x!9 0΅+ V="P ؆+Mx5ʨ -u! 0(FrJ@kerrW:Qa;~?vQT2EBzʂ`_Z#a_M!]'Z fEvhbxt ?+C6=܃? ,A1 N,qH( i$*X@`-@/p0QA 8C&B7USAƵA+-PZ0D؇W|]_}PEl@[)vX[́Q!lH^4 f8b@IEhNLx7(]5@]aTGuw( rpE=ܒW xCHl1k I)=GLR~ĐR%|aefEĤ"ܤe֎M~@NĴ6$jv*2[%8AxTVA,Z@j_v LATSPĶu :Ne\ |".!xU]D_/@0#BT -t'XB+hET+1D>%|Ш-aHyU&T@ l6 )E]HA%| ^%S|Ιb`Uȟa!-Гti\IDfDhEX\LVl BݾA$'g.HȨ@ j٬<,LnXf@EاQTW>.B-(|V\ 阎7$\x"̃LxEV) 0[(=(Ɔn5TX5tFņhxV,1V؂o%\GTgG!YhbY*VVlἧ+RSҒ( S(@ a#X T5 6[-$0/84ۺmA^p?BL qE5  '9F[4E5j. ZX$ bDU,q[.kŃadӁRꊓ ,PB(e5XGVp1+?9|QpWG0p.LqLڥ'0<Įv~4pE XTN|3))$J]xH0E(X!(|7[S g:(]=E(1ܮ\=ds)U_]fxTh6\cnaȁ% 1[(Z֓m@m/Ҵ D*-EiDL`UtԮD$B1n3@{z-Y9;" .BhI-1 qd Evty~3 xZDVݰ:fZf0p, GHRan^6cVĐ}-T\v4ZSqJT|_"VXBgUXP-(;! ! "5 hoKEvh 61A)̓%}9Ct(!%'p@#l 2.pr/waXQ#^cPJEnߤIYUH|s t t$FzIƐa]D2Tpd:)Lv$^lj\ ِtI3 !"fTurS֌tM1gbEL?nv[(U QpL'R˨9k"x gaNS$vCw}w01)D* ^N!̒9eK\`MΠxF9z jB/<>223$`i[ 0>jpLu<#TXǤ{B瞞&Nu #69}RU7#bce{U;쒭5LXcפ뤹K䘠7Do j1 A$\$ɤUm t%b\ PB^ &y8nob,Z8dtᘅDFrʯI:.M0"/(pBh@(P  @)8NvI@DCžΆk!) B+SGsV Hrr00,0UZl8+J:3b-7ayidF18 /}K_ 覕@J]!gJWH?١EKX9쐈I\"q }F*tч:dK8\A V0H̀h A>BaDK5$` ^h )$ĦH\ u2T0`* Bk'p7#8g[X7e9).wE.BQlV rXD/'9~ Xr`QJ_L&v:rE7CHR=}B /lA$ 6 / Т@ꄐ4̢TzI|,}'>͠'B+v *h 1ȇX LL$PIbĎtA†(X:lA@Nr#$ZjiPE bIk2(I,nl#$wʬ0 Q@w [gJۈњ)Ta|WJNm^S7L&ʆɜwL)NةzlKh#E;Z. LoN$\ziN wR#+a 0| `!ؽA3Q;=& 7? : *`%Llm/ll,`D/>2W ^PVT0$ 0 )@?V#0ܐ]`G$CGT(ό3LBYjccQa%7E"ؾDׯvpPc{|Db}:uv*K|9Eo$X. \8 ΰ<"b&( Mxi 56 , K DkrH))0hG56U7V5No [N:U3%ЌN{{N+ W}e  A.`$RB(&t Z (PANGBEBEn+@xG+:l)/l`$xb"za|}A |ۀp۾}0@  HtA $P4.V/* a $~`2Ѕ0fB"`e@F ~ˈWVN &=`8͇nn0ZWO \aaƨ5plL"ЫHz`MnzġA&xya ΁VOС!/aL$`+Elc-* Hd`t}D ~ r r?BbQ\BXDC@ i@N@j!l0$30$::@ԃ Mf &$ȪY-.r@"1#*|ta ArA4*q04a5y@0X@!e6lL†ԁ#cJR%Co%I:Zc0T.&Hq&-ZN7(ocWl & ,,,6hXE.Bh#B"+B Uf tjb/ y- 0yf jbB0'$, sF!@Fs4ۤ * rA4OH$$P QXAJ1 @6s$8@|3d@?MÞTP(FGʂ,/ T` CَC3 C&&XjvfyN/&(G8AOp4U[M}g@o$,^cdbAL" 6 aƀK'(@Bc d 32n#M8@b0Pu嚃abp/;GY9&'K=Xr7d(sr I"k.7,r$UCXjJlvxQ`4鿖t(NA+)0*zFZ rNA6osn\ tg-^i!$CJca\hRb3$rpvaUj@g@j~0ډa Es8@B$fƒX&3ևBT&'<&UtRgI.Umܣ̫eD6R@Xt$Z/&NcZf6p7(+Ix"A8lubԔZEH-'jAn!`Xc344oUB"*RR!qĊD zat $tg(0„!=i *$6!$~aQPP>0XWC7^V7̃=TSn.g7eƘ+U  fʘ=(Nfj' N@! &8N5yē+fD( $&,LD6[Ak9oqmz(IA,SBNⲪO@G342CB**ĺ1@oL@6} MA蕙A6f \aKmc6a O E JLB <ˆۉP3$ B<^WL f(6ٓ&C ><h! WR;Ϛ6b#yMt•N+Zu[wn`I=sp+ Z*p `/Bl̶LBC؏CjF`Ƨf؂"D`@QuXݽe|O{eF)rsأ^p Ǣk5 >9kW.MUFh; ,r$\cܺz\~ZM>\$A1`B-*|sԯZ rsFA?H•=O*4L&APMB e0z &>Rھ@)@ы%" $@ta P#a# iF7sȁH.α-".:_=U-\]rJ1ESMp58p!@-Be ̐$"H f'}՗[tU7g44]r4$z$YI<ƴd%pbApOg``Zcolo>pݜ 1pbK0&\HTV/=ĘA}3hg"H@"h*l||.tl)"k%ZЂ[ 3& tح!Z(@27ULX F)Q 6!K2EJa_dIԒ+GSvKk +;Wh1uBSì4ș ND.En1()l%\Lh  CQ XC=p+k]X$! BP_0QKCeȘpTdp'Xv%G#5d M߻-J A,0.`[= 06,`z9R9 B=b B.9kŌf 7} Spy%~0&GI+18JYRȂ$3 PNpq&LNZ&kbɡMh6-ى.µkMb8b5Lb7)v <trp"Es8{FTF|:w|avKS(H$9wA}烏" ko!ŰmU` jHXU!Uޜ}(bp,J]J]HI4UǕcDڒ4z)I'i>:p`}%b,z-5e--q ! j3aX); Ck`+T$as"h r¹1f3xzdau(uw yTѻ%>c>JrKk%.44rV.C"=F" j%gY0A̓bW7R%3>!!@h @4Kc 3ae mPP7} 艎+Nԃ`]C5CU/XB|3QP"+u]aEEUR0 10V/M@tHhp_hUQm}Gkw2 `Q*ra@<Ԑ)KTrT$$*6%$!VF"afZan Y>SJ|VTwZ9!u1 )JF$飜'`e'@dUQBpU@Ȁ~( KױQC9ٞD1CDQްs Ş"DRFR# q*&H_p@uG1r p `u} D `!^ F.uhMSz#I! 1Ɯ,!53dq}"YѦpo:pg0h0lPBb up1.F -*q]a#ZJu՚'窸2BvJX=D6>E5,""~=i) le|i[cdSmhzu倳`CUecRuB7RYNXV@z аQِ#,R UA@wy6ePwӿ rurX) Ю~UeyWb_1$o˟Z̩'CWX+ïd>K2#dDs )qt! F{# Kz1v/L$`y2'uQM>^r9+W2]U=D|1FSK$yx !2xh@L'xatB6q*D֥PiXjJvR]~VXc+P݆,#F0*ՙ"|.w1kSR]XL)B,lVG< Μ CN ٠wpͦnkf-M4l{ݹ3m`sfdslE؄V0]Ke,lnuJү&|x\@gad0"d$bPdAaN%a:Ɨ0PIH(>OOCy"VYc.֘HiAɯn"%zb2.-KҫKE@LIb1L vZLY- N7ij>;Ш-j5=D[8M}vP5IgcD;#ifόdnVboRk52BAUXj KR ?VR # kZhy *"* (\]P axEʩ^xxnO>j4ƕ>fljba :',ʀ1,)LI0G&YK|n@gRr`~TB#c !dK>KTMSΐ;Pj|SNDGO;.9Kl&m;#cCQkm7S.*M \j8&>rY\/! sCwAA_`vFw8ex8'p*,p YCudf(.QXA)Jɪ"%pHd A /y9$i@\&L } DA = &$qJmpS6i@.6 Ҩf3T#SIp756԰*QeTwH'p8s,!2bB[J:zsLSL2͉ju0"  xAGQImr"^z4# Z!EF3i-]k1LjRz>Ux0E! *V@ kDF&Ғb"_z_,KXIʘD5Rt7 feEF4"R9A8{66631T<Cyf H9Uzj5*:7*z!BV-0**a27+]+%Om>֍$aEd>" B(7D$B0 wbPгz!j@QyVdAEXK0`ĐB B@T1FJBA@@ KQ5 tS@Ң܅@ a~A&NkZIѬf9MV*+RArR6Ln. [uVΩt8YUg:H`FgRrD7řV LWrA͓OJI!@ | /$dfů02Ӌt7Q`P,a urŃ$= P]Sb4G+ pH4abvwE+.l<pH B<<Pĭo}pL@Bn*Kz>| + k]3ǽ Ɂ*i_ö4& %CWxMt2p)]E{0XP;X~yq0$I <>P@[ 1[a 8@7k![0:虶ұ *@2 (Q4H$x!Cl+jHX>PQI by 9kـ:RԢ'}3J3VxE[YjKEj IoxD L I.#r:###Ԥ!r 1Яn_ XI߰ Pi!pPÑ[[⡰R@Y㈍WYWZ4Tc4?[B[( Dj"h`j,8)dp;FuiٝF/d(65Zbpu\fÅ6: $zh7EpAupBSp S{6@.tH ` xWxeW(I;W*@IC7f[3@H a%p7YJM ,!X!a)ܰ"IH.+>ەۮ{ K#ęK˸o_5kzHFrхo5|ybP$GJ qѼsh<7Ԕ5]xOh>l#({Ё|h+)cQ0@B w t_ұ,Z;T2(p@i|8IBQDTOdA?1""x-/:Q$JR!zIYJӭP?X3 ]" 0_K꺄{o%H"%:rPgLɴP9t5p\>(@LZH||*&M =HRjt`y+ 1p K epRJ )48@8+nJ`J g cc ab!BZ0W"ԀDĖFTTPա z:89S#X83.2Idx#?^M ޢ[c%fK8#T$pkՕ-#:ogx: / Ԙ~8 ©rCu&aXH0k)s@ț8\U] 똅 4}:ȁr4=46(3H0 IZy#ً+WpT$1:] H:W1Dfww0(UiϤaڦU!xRpJE.JQ?'UDR9`PM5\KȏʹjQLPbiԐ)5#Z>ȝS:mZ09(o8TD=qM]\gp<0c Ν$슎+hC7\7np p^.AL  Ѕ&R7HW80Rr#h1( J Qx¦X+KU ,y2p8 *ЭT #ac/o>&)*H*I7y)R,xX 0  Gȁ,.•I=X-E@- gPYMfXO6 KO`4Mh 7)  93ˢ-43H9T9*9hp( U_5(f,*"D3քB?6 6obbg9Ю!o$1x8VxyxHCpQ} \ZѮ;]ՉqQo ޮ% " )xx%D [`I`8 B=_90jfo uCU 5 Wh&( .XDdpchX+hVͨk 2k;+flD pq{Y2 9 (¢![h%n)>mz%m\Y&78xD^H ]ٕٮ, 0c^; `4x  #-{d탭 @ȉpZ葔p < L]x&  9, 1[,-2vP-tp2eUVXˤk#U VzJ,dIPR\\v,0mPp ;050sǥ>(^w%9jy)/ Jxkq:io(oA+<Ƙ&X]a肳BX02 "NЄ؃H^H&oGp38~Ztd(C0TMMJH= Qăk IF)?;-BhV *RJx9"Z8a[q稭p`ֺ̜qXj%O,7%8F*sp׆bV؉7W98, B*0& ]z{ Hpa p@o&p#ǎ? Ǐ(d1@_,)j Zf(BaN @pQ65J$$\0r.Qk,Z;vC56X `F9B͑#lܹs#,Zج-+ʐZ;r ̱̈́uɒ-K7#@Ϲ GkMZe_&aҢ1.@9 %֭YϳDD<@ =F''c|b6IH&.<op d1 BLcD? .ѢO5=Pa$a#:@AKBڰ/C=QJp4,)Cȍ@a%}`hJȴ'a BM)Nal g8 (ʏ't߀6AR_SȸErV 79l}c"ە,n9KZ%Xlt7O[|F!9e6#KŚE \%9|?AhL4)ZY;!%@v[<OOOІC\H?"ԝBz 0!-4 !4JdYnP3c/l0Qfc6̠+QMIyTMf@%rMHR\#@1 p /_1ΊytLaFByVCd'eI fR#u*Xu5ufWoHshg WR[K,g/8q:Xn ~8F-(>C/pkWڴ1x 1%r?GP *ϸ;AxN ຀.5 !dk.zA $E7BjPY-+cj ` H 6A`euP4c"Acmڨ4'x"@L+~"3ob K`]*P0s i:DoճV>+%sY#KE҃=\`TaYf7p~'F1 _U_F\) .]щ 6C~G1Uyx|ŜҴdj$L, ,A4eL1Y ^y!- $B\A(B@XXSdAP ^%д^AB^*X*I*B-Q̀R\@9x8@V-fHE}1R#]cO_YɅ_ cvNXb\x 4,%솳dY#op5GA҅KH@j%BՍ4mRk9q}xڕ;DAPց ׁ3TAI[/AȈ̜!XB`A A܊%lf I!ĂbCIX*|Bۜd @!J ~͉Q"q\E|=A -T@l/n X%٨\c^Of .ch\0bbZo@Ƭ`]'G5V_mc9Ef]Sd8̅AIG?="Г࠾L4+Z}$A$퇄H;`L <}Zǰ@L->iQCLB#(%D* _[ GaDIQ6a(E9 DܜH"d5M lqU<-ܔ]6DCy|C ^ h2@p- i8_\e0 O-&A~ Aեd+lg7]0YjV .!fhlxp;ݤ{˛ё΅uqi{B dOܖ I$'B40SҗtDm-<@HqX* DQ%A` G ޤHo4KhJR%9%(a$3f|b!= k.A 0h."QodijSf=?z3GZ,y3/m 6*E Z]6I8$4qy-U@(BLanimj- Ԃ-# P@4O!Pj ADA=))Bťb&1>Ra<_R[ZE^DVn,0))wF|X^5νxZoMKiJD#g|&|dV{dv{ Y%˥ k<{4239S/$&x:xPt\:||ggEk8|B1 XPDuT69<(KM :9HåN:8\RCsq-X1BcT-Ȃ-%P6Ae?Ђ32K Dy-A 5z>aJUIڄ7\Fh5BP>X9[HC:%O4MD9ă", `1X"S5X9OPI>AC>܃ tAu膥3֑9%m4z 6is&bZhJ^zʺ˾x6u\s| |1!D5O"C9q/<[bSzqO)DxXC ҷ^RЍ~dp90@pg0b F8"E'Pg$b$DC1dȱf <֎a#K\:M#vֲVg-` Z:s`.E9ҝ8ihz$9GtΜo)9"KrЪUZ#L TID(7˗1c["˕#SÛ7@1Մ"0a%Y (`j ,u=KK.d f2UU>OSJJ|ԤbA9V~B=Ķ׿9$ 0 ȡjg  ӏ8a .dfF#vd`ZFaH:š"wJ'" G'kb&`q  k,14-+.*8D3 k c;>RIET)3*K2̛xdP,* `,޸$n @$"l¨YO>z:tg ϻ5fUR(=t4 kPqo"Z%0rp gtAyHe>ʥH#Q* 4 t9  E&`r4eR XG&˂jRʡfbJzi(k)/+O;ւM-,KΘ*KZ9.(qe4 %B{ ۞Õ #(jKrGU^\7UoM0Hx'Qxhtd x6>"%oGI}lчӝ6 C 0Wx`^ZX# -"a \p/Ȓ*XM'.  ܁J#yǟd(zJ4HC@*4xX\w$ZD#[ǒ b uc. o8 CG/! d`›gTh #@.Zs852|zYC}HQ9fU/+|ej1lkp;+ռē̒gaSFN06pkXBQ}8!~ѡk>aSx%&zЍ"l wcbHDLbfL.B4i4Lƃ KR S%@<m^T01x] M%EC !!2H >E@GOPv˂*S|lfUp`$dxE+z%E.6(uXPYn45pPN )2&B=!yLN L'%laK@b37UCw p od.nQ`Q$(ZT;ڙw` Ak=]-dc\yHRC9|QbX;T AwWrHdE8 _e̲ d)(RTrbG3QSGSRRS T7 \R=OVk3Lf9˙L .Ȅ!2V3Q1%1znDa76xň3o@b!9tsgd@H4 j:$ %A$@=&V6NIˮxBz^FA,fz9{HW*Hc2./ērÒ}?)5rf ei\Ǫ%*k`{mЬf)02h'^0:p,a!'eѡ%ss$AXB܀6T ,a0as,7r` 5v$ds:k A `.%NaΣd b `,d>d /HPD`{L*dTb@!!C `AH x' TaB@Ir)Il))l)z$Zhi)".&&(k4^O  T̢,$j\A4$:˄̳6̩h#m!d&-tR&4t#p`"#BxVlEΉ@ U/!l8:e XX *" b4B#  Vc "\auR&H6[>"b&A¯ؠ4ϟ$D{`@u! Đ Xd&(" P>Q tct,dNˆ N2+Є 14`4Xp,ò) A!$@@>Ar>A3o7bn%"@ WH -XfYt%E!bd$8 >+,vA:#BA%Z*`#aX@ [fQ"v'`sJB`ӗeK)ڇKv0Z\aR- g̲d|4K#2; >8#O`lA'D+l& &@U K"r#2@p\!xxUp吭hA8:rsZhw PceaҒF@,N\~ /k6"S` Na€!za N"dCYGD nahza. iG*fG(1Jq&F6O +rbߌ P9_CMDl:&-3`ɝRD҆4@'z5a,&.#X4Ar 9xV@LA`mBqB/8*;CYMW-@#NtEi,c(6a(RvB-y B뤪 GV4`XJ V"Hp¼|$" a"JL&2r}Z)~3fp6[b"ԭ7wJP.`BHeM>1Ta1+& FCR-RIOi8`䀗cJb5."l~fc9HA n*ѹnrnA# %}j֠Y%Ҽ NWabA^%" C+cPg&~#80UֵU0 {&.`ʇn፤T"DWCz8$p# *)r@ a#drb&0*v+bT }FBGGB5g z'PbA.ozN0Ih\䰞, |:$R :- WפL?O I4`Ud0@# n v V 6V8x"ͧ@* @m /=Wl._բ0sj rq'^6ڃ  . "f y!֠ءaA^K6 '0+B}>G@crn"~GddaifB/H r pa1 `F;vO}}o4k4t (Eh1l48@ZxW6;AUy!Z<8Ҫ#6"R Ajp+踆z g`8dP0PTR@铤w ͚^l DWpq ` 'QJ ft`;k2$ܢ b,W )Le6Pi8JʣY4oWG\ՊHYgXdYg1raY\127l,)mCl\-XLҩDKj 9 ,0dL-<' 75{0 l˄{;NcV[$7PL -̠K̠RSMu$22.tDLGI7dM@$M#ɘ5CxUEbXofOboe!=` (9N;& d19lqCC0@fIB(Rp9@HE"z!@^d+0Myla-:J BW<& 9GWiPq @B "+j!Dd H,p@t*s ^GK8'u2E>a"E%҈P'\b,/%q@!6)S1s0 Y` NvFS^'@0$< ؘa\"| !7xX qA~VZZR=D<!宛@N)LcpD6QJ%? m 6hg8m /@U$y0Ш:5,",lN%r&VꙠA `Q>(.""0Ō4 -n* Ơ( U:&MB)vא2'XvjO|ֶnL!AbXF)SCP-|Ia;u #G:( TzD "w i=!&Qx&shc)֥( B k p\@66 8皴EG؝TE;(.cnKb4'cIbyrR{p9i3Ęƨ zhn_L8h{(=U:]/ @t(x|)yސj!pGB5 2$@<',4vGxFycVCvw!ŁQ.4G^8< ͊c9@5X.Cs`NŌ$A]dw+u#52)86C}O3NV9K rp,z}A9krPmx, @I0fm,"l"@<H10.&i;pEG@2>}S}և}ie$ ! b2HG~(7GrJv vo%/;P(`pws$1W p(!m 6 AR ark0727U@aN8ByN 9  ZM3R=6,KD~COQ*Q mհ[ m3k[&^83$hRaUA^$&s3q1Ai z'U/~sR !-``l sb 4P?0!x !/ A$@\St[[,^h*Yv4CD+{0C"+ 9 ϡ* PUu` YeY'lpl,[[+j<@@NsP S $P/p r0S@S&; H 50XR5t1w$f!=mv<}A^dAB$aTgԕQ>cKPP'h&y 1y aPlVb#A ]  4XD"I < ?= . =RaPY Uwb 177fIEv0 U@e k<$E}`*Y 'p :7@)Mp[0&/W$4|]0AT"њ&Y5LE<)E!:FTjOVQ0}A9G/0"@ @P@pq k. Pk@ *90 Q^6ЄQc !/^n^@ P|g"0w4GW/1@^#l`1>SC;kyӮO#\Idž:7oP op jF/Rc|Em3o͹dN,?!W )9'; zDFn kҖr[vD%a[NV9 Q@ġ ,@a0gyTG~~wUPH )A:5J$1:ijGsܕd$pư8l\ec+9\(@/ 9(R̗$3&Mkz1Fsy0Ck6UK_?XQI.E7\1AR*hr!W+@4hYC$GYD"h@xDq[Fq *6l9YСDGieUor62HKFcĠm۶.aSke[񣽭Ox0.-uQ98X3)) (GT,¡|Hyc!Iƕx$胦[qMlr 4pzV8 M4qv9?tx!X*7,8Xatlݬ*W h ~>=4%@ w7$x! ,,[j#hѬk5\&5O7Xtgy9h.@f9ʰFƈZo$Psq5VABQ1 L(>ъO.UoϨ2td:ʁcm$D 1) pCZHE:@Em(2t$ `dQ)*ЁkXC>: [4B;XpC E ! h ;d ^CKɒMf*('7㱎odר B8S܈K1f[Vd#"p g7C!" RQ̶ W` [S9( *p1u+ l=" 3'A 9XC& 0X /qESAPjsHqRt%8HeLkf'FAFdvЛOO8ņPFo$c~cia cd$)naP$bBU"Xz xCU_BLUL*[lBOG(Q؃>"::JJ!pEQ+3jWq\O;Dr9XuCXL֡k ;0pST"IMIE/mgfaLc= [PJ?/)(P"sLN5I6 ac%*a/H/ HWF Xх9d_`A>0KHAv*XF")IY=NN;iMA>YBe,̩84p6fŧO`>{NK- +2{Py ^ְ!DRRض0F1F<)G9ᅝaiYid>,FY@5DPڰEG@@:B`1(L,ыDv- -HPVw#PnQtXߎr|fi,Zx}&ik,1>Z`8 tҖ<шC&| Z.܀#,`_1~6U_CMWxBـ؃؃xÀ|x#)#_{Qrd@`AV Xj` IHQHXez0ÙCip:Xܸ29䳤 yzr9X.џ/a6yi黄`p?q -Bꂱ#9 @2<d &)o x7( M(ئX` A); 9op@!9r8o5 hTPHDp pp5I0rx肕^U88Q z *0B$ iH㍞r(4KX {o9/ Ț1ɟ D61Θxx˂htܲXpR^a!P8 ȇfZAN0 sx g00jPċj1IFHy66 ܃m Y `9x9)Esw酑†xK[Wl w%찍 3KxO%Cy$q`(^2Ib(; t\0@:t](0&0`N]˳<2m؆i(,PM= mf jHH7ȒP NFx^b S?b Qj|Hɰ; 8$ d!* m {))|H I p5L9q 9YWzd/ݐ#p#{(82D)Bg'"p@l\If 8:Pۃ@P o@T_(T`Ns00˺A( mttÂ( f ==؄3zP';D7PTFŰD 7]XIw@Ѐ7G`$ [X0 g.D ֊ #  29(\#~\W|$03pE7 P4J[‚P6Ey7  @َ:L$.NhXP!H(ˁ#p:X:5\R f3R t:+"cv~[_'.PgX\8s X#Vޢ o]p`7`!S)1TАilظ ;K;pVcՒ=g}B֒  3RSBC+PoZ5 $ٿxͅ޽ԅ 01U@.id86HX\Mq>6(B# 1 8i:U+&Ȧd0@O `6Bŕȇjx 30EBQpZS{)"<1!Uvð;WbjCCÒVK(/ҥb2^ w(ʤ7ȂTbgxDHA\SC]$R|s8h [x PE|H^6X0`>#&1 % -X# d蔮a)s/(PV|K ` 츒u v JAoyB.WC2 1A%T Vxx ^?2R7B("0'HLqxxE0 W(b`rFrqiBVFgb$'xM{~1_Xj0Oj0uو5s!wN8bS?7HX│, H>z%R뒩. vosBKo.WxD񍋬y$a% 9ѝ7+ Rgo.N脃?Phubx;2Х@c xXO+2f5P 4xlm҇N >IUNkw+ 0V)II^GxiX's3u'P(`@*` B[bWexp!5[\DxM͝X0dA* N?x1`$ ,XBN=@u(hU ̆`ȿTVrO7*-Ђqve0e\osd`T92l!Ĉ'`~XG"G6!r&"bz- j&ְn?K j_:PfaN`8u*G.q).c-Y`sesdιDw#lM 'YX1${k9"ЎSf#ɽ+BdXkR I4i&{:-$E ذUT̩r8L } o0ucX6^.(0M,}rXBYs I *H04TA Z%$TBҒ \DuL9<І`@N yK/3 P qYX8E!SM@/\G0Gg~]yy&`}a\6h"]J+ra7\'lY iii[p MrX=  T5p/, PU`@v1BqlA&q}0` Ԙ2 i*r \pC 0* L>u& 1K1d[lPt@"$B@@M+.BkxEW MՅ*!$P:TD_ y jej^v%fIiijvv00sd}t%Mr\V%c3ߴ ˷dCIBM:LL'U%P0V+ULd C}H@nY@l$Hw6A1,쏬5CB8a J%}-Q,(a8)1@,P+SQE\F887a92h!h">ҋwp.-c=(4=@. qh K:BP곊me)]H U6 ⤵HPQe%- Vgφ&-o1(3iF$g ѥj81-wY` Ei d Ƒ`U$GTV!`2d -I@\(   N@a%yD Ap!e!x8`婅z Hk!O"@r_$OY ht̃\F91rXWh@@AE  0#Z0E!TFcL+VD^!WGY J'<1MMUFNbe!m]ę3e85+4``{G5X!\d i'5*2p0|![h`84xc0H| 8p!%LbNG50YNZ<Ė0 e(`DP#Pҕ$>v@s5 yS 7AD d,X Ȃ1p"p@kP]/S w!2RWcU.c DPT A% -W藛|f /L &Jkh:$gaMgPs4|!8 + 1 u!^tBU a ' +01 9D!AT  ``W@*ы~ ֣1zpծH0E:C ʹz D# $?7Ah}.c aO9Z2 !rb[$dD1WVȫ "2r !OL&䨡-D`Ce$-5#lO Qlg8fՒ4ؐfHQ<ġeXYP:+DE' C>\_ZX#keP . \i `,Y-| yuXZ -L ʀL20VA!LB8n9D1Q RP*.$P7@=D 2|T/@ -p8&(R7P%%1LT ̣D#pmN!vP(Bp@d .'@1 LH| C;a) J)ɀ)V]JT(BWK!CP@r(iSJkMYb h@F݌^yӑY Xl k [:,4|AW@@7J9D0Bt$Dυ(T#@]#A$5@M!Z=C'puBėC8<1ۆ`@ h&@RDP @THm QG1/\x qc xAtk0  (C h0Aw8b|WʑtT-Ւ-`h^M9lR%a5dc|Fu0(YV5ܑ^PBĠߑCpt:A7B$-*HAt; oa/xή@RP˟ l4P\A9J/  t01|I $&@ъ@@qV_~b@g>'i>p&B8BXeoҋ#Bd/X3<s)B/CG9D"V<.*.Ȑ$~BC(gSC;JT B*YIQaHj\BXÙ4)ߢ,aM̅7Xd` PTC =C{ B A BIA=M߼C5Ce#4N ”׳\T=A3Av$Xl 4K$A>0bCWCBS+lCxA*̀A%@vPLH䦘GNh,-4uAA}G|M-JB܀ tAsA= ,CW\vA}ĔC{7H'H@[a pP%`%Z%T6E(b^ l H\NC=evJbJXCY.<@Y]rŒ@E'yA/Bm#N-%LԗR1rП YI0`TY@ǀlB)Ԧf,7ž"'x@T)P%P1@ak³A0" ((`C $; ) 0ӌ$IW*e=uEHC h>t@)pR4XdMjpx(H%Q`^nT-XLF;:Ct $,ud&@XMTPnA !V 2KT|:I}8ؐ?L0  Ц-YYC./C³)AC!lǯ@ +Tz% KH$$A}b܌/;t3]Rے((ޭY=J0pL ss>D>A˂X8Fr}^1 2piVW.8RxP܊ @>ǜ܃2DrL{lLRIb\R|A<@B;p;A]@?dz/l@M7hL+m$@ RN@P5l' =Cx`FBG$u7|.L2<A81r$(HJK _^M![7jM,JIP55+|E_4Zh ^0A繞k5M5obT,PǜA5  c!X!f!pJJ Ϯ@ah@^&d!`<&f)|̸fOP ˅,Y$hY,%FiZevM‹8К}y.BehLe 0PB" 6(/FO?((!S/'XH6pXt٘+n"UL邕VwzVL njR@zki'jFs)kp2n"8SVXPt(I0H 8N*+A :C֨xblZz`0Zhƒ&lL]`&'#\)|c; ~ep.1L `z'{D&: /,1W1@l "0*dE(B((a0 )*G>e0m&IT `CR7pj'Ȫ|*CsqVڙ5tp-Vy0)@/,X1)0X/P#(/:T`":]1%p,^C,KN07#LB! }&be ;a!qTa[ )+V{xCr.@,e"HMo%k}!nBt-@X apE77Z!k@ Q{v%, et!k]YMV#j)0ŤUBy4p!n +7p"+NII6Oc P!85EQXz:a"0#@/v}] ACɁ G1DJR2%11$bW2v"BRD* h=>6 ~+W5&b; fyDLڠAt-40EC : 3@D*dl'hBcU m75Ew~F T׺ES$\UH+2@pj"9W+`69pL 4Nb&)Ĩ V@ؑ3ZBf h]`$޽P @B>HXNx%b>d' F,v3 zq!v"bX}򁡵Mb 60UT0M%%iNhټ `&96Q5,}cr8l&iOX@ Q63g@p @D\hN, k>dn ==Iۖ`9 pb۔cnF k\| ":U'P[ ?DE6G%G2l.%axCW c"|Vd^@. H$0֡eofP2]FPST.ܑRXbZg;1켖9cglwB낶jwR&vaE)m@ o oVO&Aʡd>C3&",hn(&0, 'po` Kz$z1\` zI2@Gd :n *F+H8 gt^n"4@B@! ޠX " QNra?@I0 B ./tj+V ZZ" ! XarpAi@!abJò@F @X@6`ڀC$ ':DB9oFLZ&$ Ofv :, faFlH $Cc7B uvE-2Kڪ kN*fg? .hP~k'`! V3V!Iך^UD\RJaހED 1<,2!Q!'!\+JQ#& 8İ$*cMJMXKz-y"c!A ~V() @t"c^:v tl'*:b2PJe @6 h! LbtnbJb9 DJ a/AΡ}zƧ@ Ƭ0)v2C+G @DvTec(C&},Jf?M2(zaH4td? ~.Q*0Wj\d0Lݢfb-f HD!(P&ƥ0̗&+Ij `?znvvbJR k"mN"2w v4 )z6|#W~8!vc z & F F.~F! 'f؈+Ll , an'BU-/&B/E PQOAJ`'aurI!"l$A .@pl}t0g(Fj$ld"K&`(to5,ikUF!!vT7&fEziu3F$TO {'2f6( zaL v?:Vm'b!DCnMA:Q:f *cVG zF8JLXc'ȵGvBJ/?&X|f%T׎,3 8 Nt}b G!JG sBNMn!N& .?ET+J!/5&-"S"8Ġn6q9nv'`p-ch|R>Jzz |KYWo"-Af``+8`MP ?lA ,SjFc:cy'B/ ag \S$1:l&I `_ޠMNA'a?Ze~b  8`ߒj/KA {"v1Mo"x-v.Ab;G)BaŠj7U-[*aA>z0(\0".kÄ$I`f %ġ]Ś?P,H*g \iJL,h) " !@ (a0 :Fv/mZm!(Ak"|+Aa,Uq'@X!RUna^E{dV!v.wu0a"VgAaf F\ \!2N>:,(W`Z%b꜆ϮT  p' f' d'$ KG>A&c< *8fX`_,p kA` DhAVp !I#5q;) !2ÂXa4:d`bP5(5Kj5@+A!NjZ!CޢLfkW.a\ʃ> ?%&HR+<5D26A`6 :M A:taA'b09hL4>C@"*F2؁PZdlzVF2%m",ɿ“F!>tnVdlwaN@AJ H~XAx%0\/`,]a8`a-JqANbÀg4':e] LD7!M7a  lۇ 0 F~'|A j0@FCbP&EFGn[LQo`בJ3X%N+9)2f/$*G8'Wr&"``O$r|0l$' Cg&bya}'`]!.(jL\H|g'  ቯp1~%w&8`i"⫯ -&4}w%!H,gJ.S0$$"y, f78J)F#ƽ'VɩN*3!Ek 8'- ksK<wH0|*1$3Z()J 9s@@bZ0QA`5b {DLhmə<{ 4СDrh#<dU(S($0I"E3fB' @L_!)B.b[.HAK/Vp A!O0aN5/#5qQF`jfk KE֐fыU',p`wjgcF4 ÆB[sMN+cr#V<2OFd*9rk/K+ \0W}h @r8NMd(~j<&@Lܠ@HanxR]bQlb  ](VJ aQ ܹe!q e2"wFP #w P,(AI,T oƏyK9l@apc/}A K)a&2GntMwc| ?SGY}\@ޜtDgC> e $̔tU$F@@"Hמj!VU"?*+b P1pCgN;SVT@XTtƔ2Qg\6Pe1""/h9YYa`Y%{f4.< u"PfKei4TPJ/ - jQ;QK;B߄%3cu|@5KgDabD+e116 U#ӨΉTJR mяѪ@ ei9t 7) *ˆ+D q<"- Ud35bCAeѸ:Y oih`IxfU/Fj+SP\6Z^/kr$3@̵HSˤʝ<Sݬ"Gi^FpS 8ƸI!ɨ,m֞ZAG` )Dt`G4H (`OPB @*D,bARb KlpE?&GJD$ThŐNE&ƘF wAG*c Ua6$8U|z+Fc ʘrP "DahA#=6HC}A7)6!BgƐr\ pV8UH<1sx6H %ye\HY, ƈ X9Xf###5D@(( AƄW h2if]0(܅ S !V|b U x_jVnQ$ T) cPe5 VÃyA&`ĈUt@7uhP l!f}EPA p<pj 0sfKwoeA  ̜ m$PrP MJ4cZ#.[. Id$6\Zlm>ɪ0ʱ5h@ 蔀%47EL*hBP'6<˶􁆂w5JѸ*.nBc{α?~ tpW<^mo21e#d2nJZv3e <`A+Psn3zrpG0 (D~+p8< k `(1|q!5&v #9 '`Pj!K Uvb/h-ƠTmpH/,p R@b>>  QoP:v`:WĀpP" a`\t @ @s` TED3$g9 1T:s *R |Z'@]o|}^2F<8j$!|ŀ3ps%=ZW /ACӋkXKqJ a p[p aBf3w` 0nl0OTJzj xG+PP4EKaK!)@}@F@I2*r+Ed4$/rbPmOM`[l^?X@=LW 0 A1 #'=fnkAGMt&8EP30,a?ppTAt" Ya rΠ"D1(n ` &\U mX%$s PP+6/ q'J@pɤ*A#aOrC6Y[B|oP>q 'H1$j4$V '~"#FrЩUoM CrJЩp@A6: aO vAUQ}p}zlwԄ3$} 7 pZ-R)`U!`,p8 AmG\ 1h%')!' B"Ր5!, a 5qݧEGްu/=qtqt E8D-b79q0HO"ZA+:q-t# &4RE }@kEo9\cR ab`Y\y,Es@LPą}`"e3r,|2l^p"_LA3u72B21w"G'apQ(zUjF= 1tҺ!`JPPQe (-vN aq; pGYbFWrfR 10'z`C7`C o@ $LLvy)1$ =*"ɄeP h2!:K-UP h Y2Њ6!੕"@ 5P`ȀɡP v'M'ŐP YR!Z!"*12M Tֲ:_ce E`yc`` ϡ>G8 U ` _ c zPj%Gt`:GY米?) k g @nglIGbE(Sszb`2PZ0 K}E}6 \ %$'`P=Q 80p@ܰ{@  AEv# gdC,)\gvX ź2 q qEuYTLRpW7Pjodɼ2D<zF?^+ qsD#crp0aldҨ'*YY5p&0jg OsH&/w%'$ w! 4YPi G3(m?2p !T 2p @μ лp6mt A_EoT!c*MGACz#9֍!uU2 ;6Hd @s) 08࠶AhB $.IPK0 i!)APPK"0Y P ":q.7@E#`$˚$r:AGEPEPP< } YLsTh "Q B,D${D@6I 0 ckSQVP-PIV@ƈ:V @^bHtmjGM>UTO]qmM`lÕ,(`ĘA(m`>t@ B9p#PTu* <~ K  / ^qZfD>0"R"D>c&|$ԇB B2/b͝#G#k[FTy q FJg(Q*I(ƔZ -IW^aCrA@ &V^zI&bqpt'Oc,-c cE l m#n()re.2ckC̈:\1, Y13x1 Q4ĠB )m y#Cۨ8/a8z 8 j N8L+^KD0adH x,J" FJaH0HQ$@i/.##l H*XgbVX1BCFa9L祗)ڄ B+`0f>x"1T`x晵m  ɀ9 x0ȴP'εcO/E.!2V 䰼Vȕ>$(#c7k>Aq1 0ΙI@CxsCo0 -`2HSN)';BfVcdlK.˖KFYZkO uʔЂeDܠxZ%Xb9C6(Wkٟ3+e ztQK#( tѫyT0xEg. zH@?t\P%ͦ 2 aJM:֕7Bx#aQTR(x.G`#%+36; N;QPX- U1Z.h+eĐVLh~ënb0ACp``K+i} ` ?EO\@%lV+`p Xb]!2¬6pXrax"0lI F+N00B .ɒ!S|d&#FS: $)uh?҆q8a>#F1(z& ¥rA1Z xp0bD2 v@^ԍ%V7A0".ArŦu܃0 \+Fӡp Lo %JBl-P0f٣#G1=S* 0G2lfpJY IF,M0z,UՏ@6qt0z(CMl'16.X2Nqd$v,`K'8%8A4h ڡAb6`m˦mf)y8`յ5] \$ @ZmpQ 'hAX6Jέ.hrU"f傐-r<[#">` cT3PW¶Eh9.K!!\`VŀAehSZ"s$PkJV=$P@S4&S)Q. e4 D_(xvXj1eVy<A4n0I@ɹUB@S>%idJ y ! -<@{XcX!]F% r 9QW"=AJ4Hua a9ɊNL8хj$a6Ȇr -@3fZ36@e S#X q'D]\z*9#S&^@`@`p\@.t[kPzC5! f00 WMI^&́Z*"@NDT^B { )7m-.@r8p6в2ic(0̳2Ҋoy1(Q Z`a0P1579cHTT`ʪdiJ"=-S =) zt(YWPA,]1,1 <Ђ@!$k]1tƚ>sa#8PUn:NVG KM\q aP WP24=8- QVXa,JM1ެե5_crݫύG@$s P r3t2r*wO껧(_)[ (Ix>p9, #39 ȱ/ȕ|\ SAhMo{B%6 7P0/#^P@B28rcыِ ]H0 0h@eP)8 b+h)7+0H9țQQ.@ V mpCT#Opx>H  &c =d4EW>X %G yB9NQŦ@T([yR&[hxN)]xyO'*ZMf!ȇap ZTIЕ^-"@xV4yҹ@VLqD9FXTȶLD-"0 q+#Xqc(]zdH8(!91H0OI Ï@+Oy`H B'k eK+5@4H2$pȇwG@_(y i 8^IF! ,J$08\(à ,`F .Y Pc!$bx(a<8C%![ϧv@?rr@SV #Z.z X17;0QIE @YN5X|: @ur.IIO׶,V酶6mpcAoⲓeB֤\%[tq1 Ǡmp8pbH OJJKmOqMHh%@ C@@.b:52[#vC"<ԊsB yW iЂie`g Ў;' 7G|,es 0 EX@IZҶڤX&`Xi ?1/;R𪙲6LDjbY!)-ciTWmXg5Cԙ"ۦmĔmlWp7Vw+ &_ե6k -a(M bQMvi"֘giuO-E Ęl T䊋61=i7sȡ?x{C`Q<$@km#eL3F=]8e0w,Dއ}@h /ÃDxh;{ke+sݺts.ps<m6Hob2'z vN FB^Ddm @Lo؛Gnm1 @譍Py6PH/G.zsVB΅KHEm0 )F4p73^g8mg+EhZ =1q759d4LeEC!1Đ8mhU$>\7l!`Dn~#!0ZEf¨Mlji2V $! wt< W%:G=p~N`$%pH((&yOpc/LFC3$ Bdp9@u( 7S>pJ'T 0%7>Ӊj!퀒NA? 5lH?*Pt(~L$%iu[gҴFyK)y4%p FG^G; Rq*0I)`'O t#iÈ/WjÅ45$I>-(D׉+f}[Qq7(Ƹ 1kHpJf4KH\grĐH|Z-咦kL}\PH,Xe.,#@LDl*6 ^møNpI9X`uЀS /eKx11]L}^8~>O }:y-Ŗk٠VA SD#Md')I-ڨҜ#DŮ~Zhgp ײdz C Üz'Ԋ!`RJ;^]x5k̭ I`Ilq;',pEU^SM# Pe&uUs)S+.c -#adu9w 6pOwT eCĤ<o-2>i A?Vr pkT X:BJh[jd`vSsDzs|x0m8.U5ZDK@b%wgjHwbqK&jjHF<#p ;p Ɛ[u?HtP'j` Z%uoCsK%Xo%14U4nCKLjJ:SuOxKwQ4u8wN| @G ;uL {K|r` F7%&qX50 yPVwD12ISJU-?)Q~ 1h B '0p asj!DuH?Fli!-C0Biz2P_Z0 @ a&&sC3p ҰwY-KC.X?|c34U!0 R 12!X67p64TTѴAQ qwTmCEwk!y-k.dSyA&ey"T!:Cr@ s!%OtV}?Pf3z^dqoo` i ч}wBW)r c#R 3Q ytTg0f)8]ewa2~3@ÉH@i7{^v kpxwq _XsuyTErFd?ƳWS%}ư_"5wk`mD(iO@4wDHH7FHnIT%ʧ~V4ff8TDh-?MkPZ ʟos[p0!eTkӔ+YRj`)cB` P'zk,1|xU R$: sepUut0twpFJU-&C`Y\!oYlȆ<\Z0e"3Jz.h%huHHOF@}wĽtw [LS BhR4I@H>g?Wx-v&6lvYq&vI`xPd5U:!.SMFP8 -D N0JàQ$qdd`vKQxGy186|U]ħTqXʈE`$bG^(EDEZ(0zZH4;c p·%J&„០8vzz"n.(+ <|!`@GN> -dV0 (Nל9yBDԡ(eZ=z#Rj'UyPiK?`8sҲ>ӣ+D^dL=%x`!q-.7"Wsm 1 Ag ~ƒo$$È~!$D4|ØO n4#@>r d VгNsOɔ8f $/4Q +L+b˩5ۯ*PcүC:Ck>B%hㆵ~$ʶ*G=R 7#ֶE5|&J澑c[.1# B<C9kN)#?۬:uO~ _c ? V8cE;u@Rю C(m=b:FUBَe-Y[#-|lK/\MهMkOgBVk`lic B0,^h]\H6.zmE9 :]pR WՁt Sv$iȚ0VvF'[N,Y$: \WLH"V@V~Qo. 8f0J_c\(H5npP%$:a" Qyź֋x<.mn7uxv eT*l2qf)GDN$+V4h_y/X8N"V9JWx+pq"*]aLjueeoir7YZ!uj)c];|+]iR3:g*V4Q bGQ sPJ6" @ XHٖ-Ed2݋~d"+! Xq<˻l(˂h"Dip6i0Ȣ-\o6 K|)P|8IEL\),Eъ(ӹkh a!DygBYA Y?D,Xzs )rp \,Y|@XQG'l/8dKXӂXXЂIg4(i_gD`,BL7x:K ( ӉDb(= lHɨ,HŊ%_<&ˏBڄC-C$@=t@bbϳ0ɥ3M󜄻Ҏ븇H&ݎ`PKN8,9p1-3Sz8Wz]O @["4rrI>Y39َtGuC@`EEE-w dB K Y a(\! ݷX"5z4K8|K@lUy t΂Y 1 L@&MvH?!3)$H35Z=@Hȃ^Y{U1}y>` X xs%,x:[ YX']$`>`Eī4eXs~Դ1ΐ%N˭aU+C=fK+ܶ]wduˑ&ZF" ?Z@XbM'^+5{ybqm&Cы5D>ӷXsA.uSY69v78  (؄wx d3GE-AUhKM^^1pѭR\ӡVfFueKTҽLgl@Þn4K'Ђ{TMom0H7@hN':q$؅f:ZQHjTj<(wd= |֙u"lO,o78n(KX;hhs{CDUZSb PT%%P3E$&bt%FƬ]{f;LzUZ*M˞Y?'841U"ÑuZlHM|)'p^Qx@jH3jz@(8b%PO>2 h }Vx׽h6# H}\@@O@XbTTcփ?7DPܶp.V?jnZfՂսGfN:}Fen+q8|Gf@&펶0+(@0k+Ѽ 07hB:Ȃ8"u192=ѮF:[c`$H}sDQs[>Ζ.мVe\㙖 l&@k\o&`W$@C#; Xzfb7de'f)?;<]!Q\d{0{!0bmV[CLvjlӫB%.IAbH$Ȃt;b Ȃ5Z-:e#p67h h6WPj˹D>`h3 VCq] RSTqpo\?`~$lK"ƒ:R%,ъO|BYN%DY \AZ1/ov0u$# 88DZ "N(vт%*_I}]C}2 DR$ڋ'$<ޠ$ E bxcZD* =u`@4YLfH-U&X" -I!CHBI} ù(B):Hhoc:/a~c'&xX-栬1]Vn  B@UD89"CґcI}Zꞛ8/VDr|MF3i蒸 Wm3?-@ti~z15W7'09C8(l<C&{ы]ai6s2#h#Kch0(^s_#eO蓉0@' 5PBAvMh 1eh0Lg_]=^ ܒ:{I.r=t E_rWډ ўZP?c hʻh#4J |5w+ ʌ[lPgVlku%2r @!}i6˔V C"UpSSlc7GԛװFsFgEYnuFm XM@+(`0RP$-<-v<C;u JQB!<9%EI$$ADxt t/`IYE6!j\" œNqRc+ #ê07Z^2 w Rt/F!͉qd7ꠛ|HC&3]ᶭLvH&;פP 5HB,|y &s ,?9Dq6R,)N(,B/rȌuf: JȸA+d<)D 2|݁'AUAM]-T(WGƋF`op `(*2HԂ5,-X|e72e[m;%Y%dEV ^J`\(Z aCtDMt 5Du4DU8Ԅm$Eh՛7tUP+<@@81x4\)*-<1,рd3SLF9A%PXI%dh;x(0 ubژ >8#n|0lW'|xX) e9_ḿiIÔBYC2PmIbf%A-% SM_ h` %aJISh/_sKH$$L0e^ԖM,(JPLbA*#~Ԫ94 Ѓ:̈́ NaؠHEy^θiƏmIdZÎ.l^o:$¾f܀$a4½Ῐv l¤Sˡ1Iq%iI`#|žNQ]*oۀx,Adʋb y<  .`e(DFLlXC HS, C,<۪(jl@jpȥ FSqBA.[6h×(H+E f&$mg}xDOXigCj6-pH@64:an`b۱8_$Wl bM&foҩ+F|UCPCL8OM/ 1ȿ $'ϤSHBMB-BĿ77ʋ)݈;0㋱PCm4]gp(L _ ڠb8 [höxU(Ǭ[RaQ<H.. ~k[pOG -q}8 ꠎ}5(.73+xE$ĐSVB+\T"|?7oZBn[ A*Q5\´4f4Lrٿaٮ_TlՖ%Q3Q( x#},#: 4DBrLW+i,E+ -DCCImL}9 Z\I Μ.4#Xxk?+F yBF< ZQL7B+!z62lH6hMrB*/0#7_G[PNB(&Y` mŸm,(0.lu9aMQҦ`)tpRcCy lT+1?08$5i\\-k dSKxVG=M( Os"C'Zƻ, 6/<.mc6P XR9̮%@oe.\ABʽVp'bdA-.$x$A6ݼKg\wjNQI!֎Kl:b[+=7@a\Zuh#f雑t#2fd9%XS5i%ǖsjfhR9r,Y_,Dt?9>ťA,Ҿ)f3%5j%NBPU mp,Z\Pl_&+gνcl#DP"F:Αb> \xb@ @0yYb6 o(%ybcZEoc%b 5, m`\q`s/)%F `૯D&ĒiiV^90q/雄MkOt:AӲB,5 LLx';dMO$( . BxB#dq+ X|5bxc;0;lB20CS E Ⱥ PKJt!bLL,d9ԁk&NpB1H%ˏ47~DbmQC lR"$"F҄30J+:zeIR320a 疴Ơ&KZbtyMe!IzQqq <0 ՏkD<y-6XV$Z C:U C@:#/Uth @XMq 1pt1IQDD fdxI|$"q!3!gYzku1{,/'k "⸐X#WocT"5A5Q[9Z摰F\()ްϑ"y7Յzz^t8z1Y|Tg!%"q0^|/ Fxjzti">43D@ 2Bw7E Nȵk3a,2tAZSρкxI\% vݦv%!`oƌPX/. C [;-8\2a\~`gE_y!:dǺVDVz%b7Wif> ޥkHDz#C2 3VO[7<ZX:,uE}S`O?*P )ZɊ &BX 0@ ~@p@ @da^N CB\(rƋ@ @AW O\bb!,CRh76%dp'E%fo"%XCCtX؅bXoBx(|IKDbf<iRA.¹de䑲 d^32K%2z)X`ThmVSS9cciD%N T%~ %~d-#PK%v@7Fɨe\Zg&huj?^"8+pR M x0?fކT,'D8$ il4* f8$Χ+b:B|HNhIAn$%#ު :sV@ (#!V8SrGɢ$$'\'(#DH5n` *D`"o&JBp*3'Q6]|dN(2ahP.8CNx@Hb49csjTF`t:c m !tt@wp=A X%@R_g))w?.@iA"%䠕,pe\<4GxYzL 8Hou dfxXE<̲gS$Ewq.S[*D'G%"~%$$$|b*r)_:ר`Bv''ϲwDf vo`f4@$b7jbBcX $}WZ2:hMx!̫L njhz!Θց.A %@ (a ̗|||A%LT Ru^Mx&@<aer,V8*'0'h*ԕ[Ho)c`LBv"d_oc$P(s'"OlJ(謔(DlFC 2 2%I`b.ҘDt!%/9sAcX r | eֈ7:8  zK u :!)Ar |_¢?#p NA;&pTUu:fd#Y$JzԋA&#F(HB\vvQ&fK!f"o5pDZbBy9$q'f^g((HbpZ@NC߈ƴ,B" J d 58a$8w]bcJ[%mN W ;TH`(%(z]#Sr}ס yP!%`&,gG1( 0B %< k$(n7wqz]BKkG$D{rnM⸥t$͟p8H-+m xZvbx+. \{-Di$K wD EP$<9;naPD[Sq0`@NT: j[C\$pw%Q` J죌"HIBqB_wZoà|\f[~e!dB /*׺u`2Dz%t^s\'ZA9ǾRS|z T!iz,gy IG4ހ8Q \r 9qD%/ ̪Pf ^6n\B1 OC\"?A`@b>bAg˟*`}3/7db*4'~;W'Z+HuB>giF'Hp1O)lM!ձAX͝BKt#.1 3O % }n_ b-Bf> D9B p$r9 L6k&{4 N/Lh%aW rִM7lةN~ B! nqpW$E]F' a&7"> sG>'dr"Y/s'DtMkKU[Z-@#S\تs ^0Mf aœPƍ}zaHk2]z%ě>c͛ZJ$/aO!F@_( r[+y,n`9d}p/V~h*Q9 ԧo=%8pB . 2 >!*4PA2ppFW"lj#YA$(Z0dR[j!Zl|JSU%F3|# ZH2y--Ȕl0^UbIIL`EXbm6XU-UI5Q|8xM5aH6ax$ jZu v ڇ.W) r8Ksx uB+uWmg]k t1P)A@@X`Ed0 A1@m*˸Fކ)^8b5d ɗJr\"]/0ȤV[5fI UP!RUfؽ|IQ2 YJTX6\WIm&YT"E5%-f J.RMq g$<41x3u,qnoQԸ8H %T 8t{d{n袏P!IJ/$kZy)7phu%rƔ%OPrN5PQPUSh^r|d ؑ[~aJd$b.'fI" M&#Z@'YNżB1Qz(<X u@얫TY cx _\Vאq9) d-P`@@$A'Jp*x @ 0I^_R/`H)& bxII[@/)|46pdɓ@;$UJ5ǒ]Q2,-UdGDO&F¾q9G+ K3 0pZ"s,a8-,Np#ldL覫b;A* @$ hXA 1srW G AE, ]V${[4;\b{_Q#0LM9@'Nx()`dNnB$# +J $ݹ=)V'2|$;<f`LL&$-RS7~OPc-Ƣ t t .ϱLB(3C U]UT|FpYJk' `p y@  O9@Z@X "mϥĢCrA!Ӗy!9ZbJGH^K% FJ/1˒Y$rk 6UnNHIvd#r-]xb/$d8`d&;Ũ&FI0 @p%.p%s@( 5} 3 wae?B(t4!5uoa@ ^6X7n A3@ p1B ; A50|,"R98P--۰`r-fr TE{Ed|WRh_#2b|M@+3uP)WIrЕ  OC(D 3ovCMA9֡Mgu Y}0vy"P?ИA4P!p 8gZPDg1ɤ!Bf1g&r;uiXgC10ڕۗ15=E;`HD_Q"%^~;0^GFf$GI[h1%'DyY@@Pya@(0G YwoWA973X`)x!EXq Z0.g ' +Ik`!bACqCюPQze\4ؤߊ 82 j""^$ci8v$ID>qUѦ#^M%Mb_\^@YnQkRSEFcF3{҉&ro0AO a @@(V?p,p p ТR35qE q* J 2l wy"dqASO_@QBc8{ ^x Z ՅRtt =tX s_:F:eҰ^C>23=C!gSz]d_A^= &iq#=%l%W]pTd0@A}g wP 7?oP pW,kPb?u@ 0*zae7Pb (󆘏+ m ,oW :PP 00Wvkk N!Q]uS3FA~zGK|R\H\: hvHOtn;Ci8ETL.;5Rls$^&=L/' ȦHrvjTV p x򉖄2U+i3nA J[F `0Vr kp+1 ~ ,  ʠ !VȄB[A[W0S|G"&SYѺ|ћ^GcB$3023~OtpEܯZ{|c27|XZt&T9!c\hk vhU? wpdAJ3 U , 1YvbC1 7PV֩a [N@ ( aNo  zr g8gqâ !IP iCq`b%:a%!HIW"Tt*<+qMG!q#I%W"cT@Fu3]|9|T"S"|s%P&,1d $ӕG{ nKd} -0+#dRxiMM "r(auhdOAYgK,KOf ZӰ\*2PEU4k` T1SJh*EodF'P1]-UaI*z:^ce UHpKq /'\;Grj򇉁J{9+&P۴(} 5зxK9 oȸV` )i[k qr%P _gY`]p ." cOhF!m Q pbp6TiH!*y;6gJ)"3=Sm=8'sr ,9&GQ%T\Fs-GMSzT{G5Y,"g^>@@'@.=+ To;v3vA" (㸰Xny} e I00 d 9Y,mH@D  e` LCp |Zqh*GD\J60(#[=)51!i<&`3S$ڈ^"=Hb qGsET8,)W( w"y47A^ޠLpukY[XuD6nZek$r)lqKF&ԩ%#pdm+ףGN^xqvJX9f 2]Ut=7O1bZ@pO^0aR%!Fa$yxHZp -nBSd Nb! (n 1P =1GwldF ra*$+k@jzǴ 8舯ް0TL3-h "C* 64l3`:,oM0#S K, SҬݬRi8#cԲ ;b9؎k7@&* g 9!_ŗr)goynꐱׇ] ,4)"i)nYH YW3Z nn`@}ڱ`@^xa)eLY@*Р+έI'5,- ST MC,YOmcղA]+?ǀcV(2@9RRTBEMiE.فo.m19˫.)o7ĘZFVgFV/1ux^› #ʁ1ǥ,)Y0f͈ecLb Ӱ$K 2aMR`G=7aĆ@8Ap?=Yb!z tc'!pA:t$ruXB1.wEo!'tVT!Stb!DJB2 4-rJpe4ocH%,]A#.D4uqIUTTJ،O/s+斦GL5XD1 c6f 9}ddhPC6u1i@%qupLb.818PHGjLRҐMib؎ψ[b!`s=$"D^$AՒ'pbPE֐%]єle@8:!/|ay4A O2/h" N&R9В[H!bxJX:rNj$8JM+怦Y^S&CM g r4S?tO+ָJ01/)(yyԔiZ@߰DЇd֡ڧ0v35 Zg@悐A4܋{N^Q \ x0 |Bd"/\x@7Xĸk`$آLFt!IZč:n@_{q7qB-j`% A51t ݽV:5rLq䛚7.yQMF/Jk&K RRDD_/\-LRblVZـY <2,yKe@ba{ C"=ޚa@^`,cqcp8#H@@Vt-C)  */8T \A ~'`Ł#} ݈hu@.5͢u勆v(,Ybnq&Sy ZڑTӞ[7oZSUvP r2;\6x.\ g}u"b/Xt3϶ Wr(B K{F/67.ކzaM} B:t۟8R Y;c!6(ds>5@X70+=xNhb x}fd mWkZc4Ta9}7i߰R@ZX'tw/"st>If?Kg>qƛ Z X8pX]8 1"X2x1z,g(B!#~x0<DYcA){hK ߪ؁چ ޡBx.ؽH1# Upi5 5**YR 9=A Y32a(ٿxC 9`@DIßKː {˺%:p˘)@:r1""RWѡr#YAo€ 89(DD(SxB(뀠(#x"P n=[8xHᣈ.0uPq> kr$KdhJEA֨! 9/<፴`S XE ܸi9`<0ˑl8V$0E=P~@qȺV ]0, \ |ȏ`XXI ԟg񘱊]H-ڢtS/"#)XBX.)…ړ˂Qx%zYgY=h\CHb 졓Ш$0#0J";$D7 @Y%QqD 1Id[ J=8g!0PlX@%=y0O!` J0#xȂ>腨oBrZ9d0ȂKجzKI$p jj 08B`B8&#jGp9{.̅8}r(oi^9 QK //@@k ˪슳Ѝi-<]=8&Ѓ%$s8cXP/+hWJ&rʩDlTOMU 8V{BȖϑЅI%QH "?#1suY{ nPх=Ǵ%хx$bXz6X9a%D5\QRZ֤ER{; EQ Kh4# @?\mb :%X p^@]e bxi`8!c8B"B>H@L}!\F8To8-$UpJM U zQ3P)p̌JeUVMpф5hQ^V)UəHes H6ր}5'%%ب+H=Mx$9wUO!8KXı+ %XӋX-X^lbX$ MY>@tHoI=`Vوy~I`nZ5NY777pՊ |H1BH(9Xqu {xV zIvajq]MLQ;`9r&,\*!P%4=U9KXɕ,1BD !\`SGہ9`9!@PoX;X]=$8U a~8o@I@^p^axgH&z!a Ob*/@n+,,q<Vmٖ}g 1x Y@ [p hqqPVqȨ(9KO,س\xw5ɬ`S ( ` ,5f>J:/+πhM= Z;8N \sg&&h %bXۥ:Ӆ0bk[xcphcx 0Ht^tcTBH8@> 6P:<c>B"H 0 x`S8B`ۺ!`xzBG]J'|iGYgLQ@X 0.x W pb``:e @ p/eFI ӭhʚSHI/t]k¦\KH+ץ qR$pb]%bPz CqhUM؄Ub(7ϻ~hWP~6 x0U+ЅC*>@kKip]^8 `)-dU{.HzP0g}q@Uj}69׉}@X0`57?XCS =) 9D>Θa:Dx z/ ?YgѼlJ9(i)E^XPXxjn@Mj[؄V,0_AdD6zCɂM_ȅy847$c:+{Ӽ%@-m  >78)(ujQpaxz,@9@kx`= 9⁍L`Xxj}- dE{>>ɳ &) +QtVjH>i9ִ)f;+VaYOp7#_<^7vcj%8-#XkѼK+n\ cȂᶈb!V>^ AZM]Oe7(Al=SqPCr<WЇJUQxYC;D^.tK {Ǩ1b ER8SB(Avp*1FYaH& `?ݘ/?aCɞQ۸ZغTcwn dDX*Ur^0R#FZ8s+,D~B)€ذ0 xx>DH["08eٖkYJEnH0KQ8$j- @ch 臈f`ikхЄ}ZM #~V[XI Ԭj7958"6lv9G6T8#sl]Uȕ UD6 abœ=K4æ9)s)$֒VF|U+\m %.@%ѳ(bKn @cߒpTLiҬmm5a\>ei W[웑pm:蚷f^u ^Z3otKWs|![ ( f 7A 9Q 7=5~ODAW';pFCn @FU5Q%IDLI\"GVG\QG YQE%t H7*tSN\ĐA:لC PI:T)SM%ՔSRQYfm.zp6I$@K 1gU7^I4F]aE1dfH&f'`!ki "2(xi27BNC|ATi'GCFX@O}PRyא^zA!Tms^xנ44 , 1]xSO!uw4MRtRE)PJF#0XE83I1c2$B(S?"UP~%iRjjd]5tCڌ Kh#ބyeUG"oNl HUbAa c1`,F(ejz"6*Q q%L⚧0\C3 } lr ^ aaE: WYd-P,0PR67Fw(),Ӆ xN 3;ưa5]x4"V$B1Z}3C'mK'}B߈U E_<*M'QNFCwtw4%  `c b`if@"0J"XC'ԛé! VS&5xL@o ' BVUu@gLm[Cs`3BAȀ(Dv8g-T!~!!s :hsp ZCO*N0;G9 0* ] kH!}Q%8(/Rx$*Jg=FPKb(IC цr4+]HofR{ (v&xX aӟN5M Oȡ*#S< CK o"x]8 Ulv(M!'XTՅL p}x!0 w%!%BF6?@)6vģE臟pu0\ DCp B "BA a!ũҢ]QLDDAEX0H{*%JoZ B23A6 @ӌWvXȁ4oE(HJ薟2W@c?+iPp>-xg8p$!@gIj|#N`EtDʺ+<|Ruf8aƁ>e+n0x1oC W6nqo !$4! Btb>ё&%C6ă[9ր 0 W YSmv1P\*P}fX݉ \EԔbSXHΉ_!F%B?9Jh cCt=ܧ2jZ F_D,)ogRBPXcvL)h ⇲Gb Ou-%⢇FIz Ѓ @ 8ȊETfAߡPt61Ă ,.tC74oMSyCLnjNF A = @8 FPp@~yX XXBh,-d+#H2_ IŔ<OPabfNDc47 Rafm/cD1A8F+iX%uJTx,,wD%]mdP/1\`As! ̩cӸ+h&KMb \m I5hg5$o10.@llh8G'v-8,JA^5>>l-0(a- g xA~d؇HsC'C _;'$_ EDA`#MD J$D2R*d%<@FdO`n-U\tȆU m4MJ!V=PQXHkA?lr;%YӸS1+xEXIJ'\*0-tj{qmM*n t%1Y@/胊zA&l&b}D+^`B~xAQB C],cCA Zm}5iA5@>C ߰3+D Ma9LqDІXI+dcz 6@ dE0UdJY&ʗ7%蘾`Ć>S?ZGWFcX \Μ B 0uQ@6(`/čM.J LA #8(lv4"dy{DfZzE|0m21jb,gYOrdKJ8(( X B ۖ7CL@ ]N@/X) z'<=XL AfLЈk*}t `@$HR9@908nC q`N 270H9B>C@^nKQ%Є|CL]:AȎ)HV]|$)Y7ˎKShͣ +MR6iHEILSPj""x;ӞAY Cb$e*Ђ#k8@%-v16i,7DzgYfۏ"بekDΚk$o*0h#7qcb&(PbFc8 &Xr0)\p#hAtY᫬vBMV`Gv :)kn69g. [@\Zp`$$ MI3MUè_caęytIQ *,ScmË(fX(:@'"1p p> ܋H[^`# ݁K0r0D;l1B#,b;b1@|q_^l/30 $Kzc~I ,>blXBi@z2 ;\Ij*恳a`'g vqQڈ%`0/0_;è@#$4M6'&+(G9&1 _pWvBEPfȔ>vz-萃c m:t-tu/|Jػ(^Ͻ<6("lv&. /.@욃la*`xS!Vf7YF a+ъ%AQnдBԊ=t1 H4$G Ӹ <p ?dqMj 2} Q`tL6⤇rG|&O%s(VPY@ vPKw U4̆8". .mj ,\b`U]I1*HR+CD">6! e FLmaWeA<ØB#`<<]+{f+QNsHIK>AyffP@+,O`@J&(5  Et2%V>,`d8da&WTd Hʂ8tK|G;0PSL.I Qxn'0VXu'%Hۅ% f@ 4J-$0h4y"kK,[QcHl lck%˶23R0͎ HF0xky<w"X(lx&LiNtƌ Rh&% ؘRsTDktLB"VkfEF[Ж %27ǬȊ*cZ`r+GIE{ 3| CO\$#/̃j"P ?A.b7P1/;(,;I1(R!ƛpHbSY)P X': >O9t _B[ FP px<|qBw -)zb`x iZA"8!R*UAu#T*yC7!ȌG,a*)}XBH,`@}>_OwIbTMx48Vf cml$aCe # -k'뎝-7#5|R^u L}d˲dMo<{F 3\`E} ]  OL18ڠfBL"+HB a'jx202P`FmԾ*`Lk"jWF,&a'E Zmn`̃?RDR>e"Sfvd4<Bpp.4a K- i'NBOsD@  ؍2ĸaMoW֐@9z2b- P~? "a2Bb ^c"b<·ZnG1R`d( ~ Fb&]l_#.bZ3@, `K"\BbIAT" `,p'^<<A@F q'haWN$j'A|l' Ⱦˬa~q'\a%ऊ@hjUR1( ۈ2pT*e'2/B`2.X Xb'a,uv aސHr*@ v b.`Bb a kH"EE'#}i;FNcTa$,C"e?*& hr|q؉։k>%i A@+p,NhӨxbuRVLzAkLhWsNd.>9N9*DceCD,ao6fS6v4a ` Ч(!Mc ThöDLe'AM|g'f'V@PJ Y S8 F4`'ab:Sԃ 5ZNꠜ@"/fpq/? |X @;420DV &6A&At'zRAkblBNqsޢ:p{.%2V<]!, w83 60A:``N%3$F)у!BLd%6B. m'pCkrH Hs EftX=<3%A.ΡN@f-/A%U>AP.j`b. sZF Skb3*M@ W:ĀM%Mb OD,1Lr-Qv~v;7g8 `TI5PpiHrg%v! ncS2tG/fW`'ʁFa'! v> pU X4,B^ Edz"@Tb_o@ ]<$&3b& h1A3u|Qѝ܉k_h^`iA}s 궷*hcʴZw2@ ! @\yI0 CU.(a ڨ I3 N.VzA9h*k9(cޣaVlaz,B&@"OD&h 0 P$l&C$L¸6hXbA V.sG`XK\^C1&t%J eM{/m U$2>!1$tCU8K.pv"Pg'&LU( I0 SB/pYw'` . 4 ez,X@ E:wr1X4nN"*@M}5El)3ڣJq>',|'!ZzZDnCpHr p ]21F q7t0`K[ !;aB€RVz@2& 'i5w.bB$74lrXTH#D,2-M8O&mf\˧PܰgIZ.>x.3uDҥ @[HN1+ aN `lAP@@BK8 Z ʉ6u&HMD-A 5ijIpO.)dY B߾kal(_nMl;>|`mKa9Ga#s.]ZΏfR+WӦ: O1EE7l1u   9$A0DIhnFؒ)$f,I!IOua!c>PN"8l%T8 dO< bK 2U%,THw@,Y|HtHPD5"ɠ Yaim$%初5bBFL7kp lu%0$;{cD}iG45{5crך|u<h [+\†Aʖa̲6q t|Fo @CJtB}R9@ R>$D>,h "%Ȳ P, e,tp"ud KK+aRɒ\^"K\!"%IY$";#R PpekТK1biڪع6[B*[d%\rʖps@7˦-uǪQ7GƜg6ƁBQo&$pqpx6 '7mщ |"MRSݖAuK< HӉH(Ot Q741P%"9WX}}XK!d K[AĠ m\Z̠ X݄@QXH]X nqb +cOԪ;Z 32d8ct MK~S:G:9u'6Zv[ؑ=Ή|"w@dFO \я3<KA   KsedVF҇K|ҋDي`>l$(E**NQnxH^O,&,p`P&5=؂g <:2q"Q!f*[]`h d@?40NPC Mny1 ʰD@ |4aF6bFأkXvr4¨+2G9uRD:!ƸuŞ^G>|pu!sPOc@# G+A27 nL *Z"U!C+,ATp`!\@ /!FAEE g N~"C?, sPU ` p -@[C($du{G5 `nIK? 9@NO$jSig>xIf2:ll6b [yu2{;HGGȉ`59@CzEJP87® 0ۘgC<p~pX\հF^ @ ](dP,TNa$xH` PDHXp !wQЇH,@}` ~O =` 8B R:IօOȌsXZ9SH[ B@\R$4]$t7Ԡ-DIsHVNn;S3"+N7&P:j!5Q+XUDēC(7/k>Js Lzc"1P :,{' c P3e,ppCZMq8"_"AY߹r"},AG $Ppga7R$\: ])A2k!- '@ k,n T߱mEVq?%:±"rew5lVt^(E/u0/h .ҢF Y0 {aQL!ob0z@P1)!p 7,!0 p)\@B,!?U,N[& :%gqEkM+4JR_8(hrQ'p `(|MBk\= } c a^@pð %]p ޠo^+ҠwqTBS WDu k "rˌw h"ÊAwCU8sFwf o  : ɭZ f i{ QoE> 30'   (P5p 1?* uNa ہ4(Md ,}82,q&R IA( 8 +LDC8appo\bpgaZWp N " w%`E(R6WA_?E;-SR!-vTWW8&l)z/T'4<D4h yFʡE#B' bcRVⶮs2 07@"d$$pi1|P@QۉAfq1E4RA6xZ-Wgp 5 `$@\ '.!t,0 ,*<@up#Wg{Lt a #TAGkGiձڱfk2-a*4T(ܸZUܐl*\ o{T2l Y Z00 KQ\]>) [G":miY7R|]Qq t rdP+ p@Cq D7V, 3 A aP92A"7P6t`Q/܀@  L&QqT$Az,)|LejF}l쨢dNHY`5=yZRik.&a!GĭNPK T ! b$9{9Pa` ECE $74rdVhC4b3gt p G4"trWrr<,PWS@fyC `nK'p2 0 W+! h p'pW(!TX4ߡ*RvA^[+ԺT Œ+̥.=F'CK66]p)q}| v*Q8aKTo+RjˡʄiiJzm( J7V^D7h Blk+1'!P"W =DP, 07&Ey k$09l `X%0`Q6 O9ީ-*d,aC -7 dPgq&u,aހ"^4㠇l&Rt1E;S:oSfHBd뷇~RHBÃpH` E.ø_l`J͌;$#дlSA ?+?,2  4qM+31R",:QA0`-$^p["QgZm%hPt 6CZ0t2O-s-q 6 IQrDѠׁRrU B2u#b4EsKk=Ec  " @U2~uD"rE?aU!. m IkQ, 1iO C@bp 9k4@ E*]x֋`yp 6]*BG!?aMP@=$]`"MhT5A +kTk7Z9%F\ @>]>H-I7JW(G]Æ`."lĒ#ϑ3Xͥ#G:H-`(_5ϵT8rfO92os3Ϙdyƕ+\qӼя/7O_ٵY%ƈF/:D\ե!Vc6-^X oJ$ o`5 愄YCr|`yb6Y&#X#J(!|(#MR`$ <*#XPd(2I` (4f"ZA&Bo BNc| 0bPha j$t;ߒ 9D:f80Q[3µKr 03R3XӫNCՖ3S^}X;![]^ʼa*j 'VHx+:*BfN(23l! H2G|Ƒe(^b) Xjd <6AZybx H$D!H dp]r CM/1WC,7`>8036P^cZ%DPC30k~ΘO(]8'B=>]@& v)S.t ZYX7>yr)"8F&("@+JGYܣ1X~dMEdR RȕH”) G-ЏyYbaUQh aH DS$<–qY e+E9(D<߰ӊoBmh_hs(lX7&hpi#|Pq Qd;,be9,g9Ggs>!MtiVN b #()!!G1L֝`@:Bn"" p"xH/6aoG$ kdd iEGA ̚"$8`3wbKH/ZdX$0 / R2X!;vAASkCcu fV0 M&`65$$6X. $(W>dVΞOi H1z/6H~HI9s^ؒr8Wd"D2 D Ř<|ZT $ (0" W ȁapUVV4 8l ܧg,X!b2XE9 gxס8TJaCӆ=NHeHÙhSU n3TC^[Vrok,9¡N]׫µ\ Ȅ7x)N v.P[b\]H40' C!xD0XS̍n垸u`Hf_7"y^ *A`6^ "3b;?: )aPHQ p gs x+X32ᆎPfn]Cm)*YD8 CQx0|: " Њ^h qb"8[(0j9“a0 !|z0XOxo  Pz_) && U"@T)[4n,p ;[x5AZ@9`a!;Qт% |:B`)j~ Vp;78s)xXڱ0m؃  1GC0@q$!9? $x( 8?+(|ȇ55QЀ8#!I$!`jv\zplisxĘK.܈.p)#\po(I!#Pa+ 8"hGW".K ċ[G~ΩLS<1X3SU H0`3ğ8T55 17(y ^` b /yA(*찀CT B -p8 r]V{j<)!6ܪ ) l8p)9HG H#;ˀ 6"B(K.*MX[_l֜RID!6&h|(ep>- -b*P/ `0rI hK$BtP(?=nhˈM=m8mȫh+ڌ~ɏh1tD D dbK&a*$cȗIq00(!VJbjXA˲4^uU!a)腁JRdE݀Q.0!4"̐ P HOW#}&Wn@W6؆ })TUy ,0aX2_l0 ! X͇wDgX:b뙭 (b31Pj KюbA < 8q,/@qȏc媕X1`t"t0X:|57FUV [x4a&V55>8nM#xa#6UkQʡ"ASA7j}U/#eWƩ#[\#MkoU`s0X-!U Ѐ;sa-Z}Mؽ~(@A2@; xOQJXCB"L'D9yw5 xqzid-{0p c$G.`&wx$7I="ij96å#:hB`:88\Tax3ݺj)5,xjyx*ؕ]فAбёĘ RP|0'(U mȦ4& `0 =37һ^}RG` 9  @Kpѵʎ$9J},.`R-1[RDX%@uU\\Vw`0{<.xe( 0([6VĐn %B8sc'98 %fWW{%O]*,,,b,6#k\ /^zgE PN(8vbFP9?K@ / 9uX%# C3-)y Q*@,0eXB-3T^6=-O(koȇACHVh@i SU Ѐa^`ѺR\h֚83[`Ops>ti̽h\Uz^/{~#].bUgz@}f ɰ8 oɂ,r `BU '@嵣 ቻ&lɶX0ПK%"{{ = $1 8"YS٪!;S9a%8霄+(-Eq~/8sTx@9^^X9a[aeM b0S{aK 0xaxJ;mfG@("/U;mU3EWЕ). ܁&ɰ9Ȩ=۰a?E 0&̂>& @MTű(t{`x? \xHcKaMx]*1 8ZH&Pe&6xkJ%MbPFZ멃0xF9,62 x*qQܺXepV"4!n䲄'*G5T3#ܖt\UsX-|d-m/`(=8 zl CEc3=kPލ N'KZ48rtXN?ybc99(()z"= @pض x: xԋ4Rb OH0 `PwVE8$SlXXp1`8~R\!!2 rZYs( 1m~j(->E]c *10HÈQ!q7P NcHlI`]΁. ix 0 ˰#.ԳB?dY? X<}Oo&!UhI%8F<+0!(okd@j Б`7l8 $AhApܣW$[BoF|$U+0ņMpȜr `R#Ǝ4xa C?c3fGɍS&40A6Gl ءC[M6blB:[F.K%S)ULAF; pN0Po +nFl8"{,`iWT9QDZD&(; iPp6Ep>,86@A9lT$ȉ1 1<'"%R 7BIoXFBP"yH` et|1}\'@ eM%;<4p aKUXFEccVYn#Zb'F@q_S6aƱdC0%DJ2Õ+kxSvAM2mFL H8 @7}gz27 EChu@/@z%"BmI J$AA @=m=A+'}`hAC 1@9 'xK9HDIt 18lz %t؋3SI ;IPC'<`%O`Q97Gu Zf%e7@1`QC ؜Cr+"31pEru"L944qqFosq9}iI?ˢ7Yj {'rdAy-hQcl` Ցk T0(؀E+*ޠ@. R/ 3FÊv%Aݼ`J!D+~*ԋ,qXPa\5.q %uE+B YE.CJZcpP4pqp*!Ӝsb tpb8* C 0d62CaQ,\.lܠCq|<$đ 0q.@Z@ n1 e.P\vC76 3!1G@aУ%6.clB nwZ,xQH^mD1D @r5cWސ-X\qUqሁ N׾*X*7}M,*426+芔5K.bDhy <,h#)$OZZJ3 r?9P@j62]PƦF1N0dp Bبz}3 m8`MX I qf' %9@aM.S~y5ZK@و!c# pc ~䬠 tE" HN@* .(l' #A8r h+#p0}\&E(b }tr B." f3nB~(' s<06If,А+/IfAJd`'L-ѕ%J-[-(p$ .!c1O\ICIXAx8`PX#(_ɢ< Ȑ r1MV` *%V+ BW41= [TubW9w&+Ag B]7A$6Le>B- @@(A\4$!%H#c&ؕFӶ 3Z0!R+g z* Cc O(lav@[B8g@2,tr^=cCٲV#+|DIH5T`<cC @X_Q ` !A  #nV-^i* # H`P/g   J++z8r0Vt6NF \L d _hH6b$s@she&caG S4x3)t5>%W@{:DKB)c/ݍEx:% G S3*bdTXP iUIK~[7bimxH(p'ق \8G} 策/||Cf VvbD鱑 [|c` H`t@) JDhD0ih( FqB3Y֕D`]PB'ڬ5pELHEۅe!S@+AFӀSSL]a>EF\Ap$=uX/sIP-H`AG|aT K, Qԝ]-a VAVұN8*V CfhLj4́%-F"* lC\Q1,ALsG>KHmu1F|5|&$ 4_܌blqppB?!1V`B\< " !J@℁l";l'*AvpA1} 0Q΃.|+TITGMItk9RLh!0a5(Ă{)@I \ 1H2Tfv1BùB}'Qt'Rl f`F_fPd deACd}J5g x<:=  PMl ULR B#Y pAXH+aB*D9xI *. *gNP< @T^>h8@$NÁW4q@bƒ!]$%ehA."t^N8!$5`æhR.* 2 F()|A!(#.@M9+A úK۔f+A@% EZ \TVAUlSI+$.y]<"!Bl :k|ƗXkkmP-(P8n%qpθJOEC2 .G=:*CULMsHx&$b k/;R9xI&P8GnIXB͢+@%|- lBPH p:k]t+<&&X -ԭ%X6`4NTx)Nr,nĜMAe j۸JN08EĂLl L;(\n5t&tA']@>`<9mM 4I@,PDE`>ܾp>< 5>+d×-(w`pHA>H@p%@<(VD+3Vp1Fʦ7\T.A$vH)P$@(T.p8s LTwhA*@QmoBlp)*@%]0T@<,hf,I"AbnJuoZ oRiaHamLVC>!d8;D(IYU4~6J[ 8$ؒmI$A B(  8J2 ^/@.т/e*g$BĐH7A u7icBo5̣SL \. HA$UU?Չɕ""x"8Ǵ7E0 ;TU$\䵀I DCl Mbod%$A<D/V_l)< y\ 'u|Ol 2B/M\w/Ap X-H @Ly\Y4P5qT<k/h$PYop@b<d840Nv;i4,wP*s, Ì0A p`4g, ȏ =@ C;vJ1gT&LRC?ZB*\\ 5$7,?|CH 5#DI![?nI tFxE!.BX y%J)Y%~qIPeЌ@d9cF|DJBrIO8?e3!!#fHkqIHX4y- q!![\p.OcA @Gj:O(@Dh A~LB\q8jDC>5f#* !Z"A$>( `$` X!VV !1x睸Y/RPeLQbСRF )G.$@Ah05m6BB<h&!f3$:  NF(,PZM-~@+"#bdH5U!PeC!ބg3A 6` 6ޕb , (`}r Yڠ `Bjc~H kj[e2S3 @2b9 [t;9 ;)~wqBԇ$Bez#,N֑uXEeP;fUhX ?4`SLDIAPu2ĝ!6QĢ `a c@F.p8 #X@ )r@Nf5l΃(+~QޠdAU!<ʲ:l!RC2Ro!Db )u(p|" $`f@Kd@B0@@/NA{G#8G#@TÆ=z AH1xaE=DbaN$FF>RH-.qPCpTŭitc'$ By0ʓ,s1NQ tth;2 d.ԱUk]-̙XqKMZyJ,ϓ끨FVҏ:%+oyA>+ `0* +QCˬBGDAguHؒ(@%R ]Q1PM`eF ķC,qʸE妁ѼC:2 9,bJסug2Z.UL#fW0:0!.sg1* R` Z+"2L&a{&@ZL uP.K!LB`.$v'p":%r!N a `.b h`ht 2 NA1NUR| #B0#ށ-n@Pe >*~%v6  :-t4L DC(EZ!퉚[ , ġ pA`nLBbBGL~Eֺ$%3o&n$`L Za8D –d" \" !-%C|B2Aza-C€/!6zuxT4l"P LN` a g Z"..`8&!l-R)&/# ;ʇJ ލ%0fh;|$`[e,"Vb )d أgh1KVbWn 4KtnT$r3#"G EU @;#4FVHv%59$ raWDn3`4":*- zN4u?UĠH֨5LaCBK-Jxyfw{Q]=ʅ6$-2ABUww$ FAGf-X娈J0F$p.z!{BNOa{8Bwvy [ƨp$KvnLjLhtXY- o6A`Q6(Djf+8NX=2jVB qD6SNd"joN,TU# 0 0`4`PzvNÉ|:,tb*ٿ ]uKE=M*IWxy7!f]; آhj@P-)=i|BFD`Ib뎑ZmlsN+(s.eg(h:o)F*r njj׺} 7ܹo`,+4f5JoABn>w*֘+2W¼aqjF C JJ1id%V? 'z*\Abxsw 0rp&4 Q#^/@kK{ STRX"[sNAod!<HPQ1'pIA%?%LԑQ. `b+ByWPXF@U9P\sFyP0  [ A>kFȤ|d A`|r.j7 1 q` 89'%wm4Sk#L>r|s<_iR!^qQͻW D!zX>TA"P^ 6O C?E-eCmp0"TGA@O0F+CņC=լ[2[B 6ށB8!qq.Ġ iWd$p6}BA"<`X[Zߤ⊛+ Pu+'xJFgƙ#K0Ă< $3n C .ByF- .4z\ PXF\ #^*-ɘm!_=$D>c_ԳlPq`0#Ӡ ` |x'Hx$p:4Z& _dA9Đ2b݊`o HCWxoD0tˆ VWouEջ^7B"EubcGL# `@[I`60urB D[鍪oE _ap$h+ @eѽ)D(K][}ࡧxC"(0 p#qŚ \_ b`frވ@B*,,8 BUqxIWO#y~K(:V{cS%,bk+WFFtܼA3EdݟŁd[O" 9/'@KRxT T)0`c_e9[F@_"C Qx@O C R90'T$:#4#P I0 `;j!'SŇ qw)db6X{Xh0m/ogS&7*QR zk4QI'Dd DB#)'BRG@3"bP"'$9wA 9WU8 dKVUp8l(S'   p=BoP'wT2 ] F3 rapӈb(d@ e`'0:bocb8Tqs g(h^ԗlp M!X[ lxTCd+VAV=,r!5l@ "U%E$2hS1p&2Ȁ`1hQ %@ _U:SÇqFo <P0 C;pU7 Y(a8$}% p,y` \,TE"/ 7nFFb%seF0.3 ?k%UB ##@4) S,@1G B79PaCR^ٕC * %'pIipXS] ʰ@OCP0 XSD3 kvqNV#<9/o4 f< t7?p,'T^_FI8ӧ*}$b]!G^3w5?ut1Ё$!;!). _$S(3Z 21T/zpl 6b; C0{<+֑ @`WuUqHb\AǢ,FrL sd{,Q9"$|."]Y b0 _P0pF7} sp2^Q1!YP,'  8x'` LY}w) ?,c)P(c#&d=BOS5QR ă [@rЙQ3ЉpGʊR^oZ,ZB8@ SVA-9g'TdB.p U@pqTցH!_ L1 B?c9!F ߘ@ӏo\RX(H}aI_bGH]RY9Ɣf0VLlC@'t:`Y5013@Ĺȹ: xOb# "!)%{P-Kkk`D9z1, rX|_D* HhBb 'AQM#&J،Ҋo|uP@N KKPdk8JA`q"D IЉ&`)Qod|dHGx,@vrG@P8lR1eRr JI Qb\ )9b ST  %>Q*@ @ P1:weC" dnU  'Ix aiZZLK@<&`` !zf,@87&#6"J$I1wjaI iBB?ѵOMJ?Pb MA>˶cVDBP46,B*xXk  .^Lx" 2od}<|?3\c @]pJVTN/>Y 8Ғ[*2[(AA -khK @90706@#NP$0(F`B*  1 0 ؀p BŁXs:LǸ"[:+ çUHG܀[B VNc0T> (R@ ! @4661;G`m@Ȁ=ӑ$993xd>+zGiJ! >;los'/ %$Q5XVB L qZӲAM{򌙉S< ]b؜Oԙ$rhck BC|vRA`KmJV$#K" sa,H:0@+ )Z[ʻt,qî/f@z6  ￧}@;q%`[+>!IXa-Z[0 )!M(KAnx(KBL0.8adgp:/-mXDJts+x9*  Ӵ9 }Gx69o~:XB #h 3ɂXP 19Z(8KX+` H>0(R2&xF i`#ؙK:шH": imq4ɬ(Tk )w ԋ,E=82岑`*M;XDJ-?J }:!*n11<8iHU̴VS a6&38Y T>( $l` 4{9&&Bm. ؀,"X*<)azjxHPBgg,3 F0sZq0׃6 (DнX~U@摍! ,J`~g xVQI`3@ qePKP@*cPAe Ca>oYTC?yc) w$~{杆QGL*X  (U @0b:$eb@MZ2哥  h.0(P\Jo͚I2TI^ bj @c:+Š*z%K{6 | Q*+MP(n*c:M+-[4?@6&=ilY+ # R|Yc PR4h RaEPP6MŐAQC$ 7-K.$BWA$]9< Y/ RЋt(4JL]SUKU<4(Ě)s)4e8QPCP 6؀Ȟ}`7,~s@+"Gq7ܠz :LBiij0YgMC[ȩPXpCQSw^E֥wС%,7au PlSrA Gatͥgpn$|޸I.P8D-F¨ 7GVfAe(&aU\.#'/@h+|A˄͠7Se{^(.iA̝TtVuUA,-PG-TWmXg] ADn2\k3 (2(dȉ13ԭ ,T@v伳{svر/5L뤭wyA'|.Z1g[u2]8kS@5pN1+ x^ОJWK+#DBUӤ/o0*Cn*2b {^܀='uӆ|wv_P<=(Od`QπsUL/< =Lł.K 6h04BB(d a( '3- <\ 2 Kܖ-lP  !L}SZ@д񍢡:f.aؤ b`#078,VP!w! `ld@^BǞ +MnvHIEȈR2" 0?*/vYQ=TBTfˢw&n~x@E.H%#uRZ&!N BɈ!04exP.)>[> 7(F1HP&ɑi%87M2 枚/z%zJD=Ug)RF2}TkMqO*q8?-T)o(9tG bZMc&83Dt0@)aLC YMϤZ 67hJՔQ-"@t v,QQU6f ?`%bDeb1D!x3UzZiW M㶨M3C]I1b̋6^ A7qv T`1A䴖Rq9}r1e,Sȕ,Mg񨺙O@1QUGd˼SW!&u67u2LH$g]ml\pSLHeJI`'H&` ^2Wm@&&ڬEu33b ` o|tY٘2d0 WюNڙ .Ho] d DEYl-2P,@@(B`.&Ůä^CTTaQ EWz.xnnF/z'|Kо$uj%6r׎ev( ゆ֊xu30A1ڪ QyLL\lCprweZdDgbOE΋0tǽч-wE+ \^2>}DTcvn2.Y$%Ls*4PQ+ I`P2ǂ0>ad]bj `/ n_nҊ'kHkAgk)Lt  ,bevȻH(080u@gaG{|UHv h PKPa ?l&p p Pַ}S !455eE]sul7I$ALU2IW;lDu<(qy Cec|#z*"^8z8`PDu0D$CW8J^7PHv< <x  ]0 rQc }(5?f &7w##JlشgTrLt[l)g6LDvv;"'r . #"L!A_hm]g](d3z?$5+6i 0!4熾LfyiH7trLpgt);tHݶ8tgL'P|em` z` psp Y DL˔P 2K "h oP]Ҩ]a\.B$!q7 5ysqD;@ 6=S;z;CaAd|5)z(tX7lĐsؤiE(!s /(eG2T7,(qU(@]}1 4 $W;I!b V R }PXFQd.FET<08mD;=Tu|&HvM`[Qذ(+23 }3!.3yqt IFp2c(Б1a(<A I]$P+ .O# #"0)9TEDxU3;sku?pFugRU^[)Rw<F0$1.x \HH=Mt[7R8s"WEi0Xa|]* 1 &$Y,2Rs[1a0aT%2DIYDZ{W@T qeRgb EUvPYP(s ;2؜h4֏A4+< 7` !L(BiYqXJ!ib VWz9̷^7 cB@YrY%HD@DH< 76g|e]@ P Y@Zd̄)j Tt?WqTy?e%Yjש`@DZE=ffI|gT~6&D8I<6+E'htiq(0"0耑7* P%e%9+R#ʰ[ [H`EE^?OY8-tyT7KkQi;mE2]t'9Q)Z"L5WDqz0uq2>*QS"aB;- jPXFB? 1qƀIG;*aRWDkJq  DސUZDIɚg\qXۜ,pU}˭@?F`FXi 71PLVxkiȌAhkL\K|W[W|? ؗ9+apT ˛(3{]ƾ8XD#@${OKnP A X'pXi]]s ٵe}qawp IDD"TUѬhuNEn#a`@tXC䖈V7f\,ф4fI.[l62I)'_(dLov@7Qr7~qupipzep&i=`]%iO{&ZZJ'7n3y7I4g6R@#42+Vg7`z2*N6Kk?il r2h[qi` :q ]0*a 36T$INDfaWˁܿ;dUts4g2^TZK@sѡ !m "1Ɛ-r}琦*B0 djjqfn +$0  c G=e3"GpcDTL/fEn[TvyW[el1ݭ -|f{(hIv#jҮ`L^؅͢®:4 KJc퉻%~ili:tDU٩Na5\EZ@p9sE~ uM EO 0Ga`G9xv&JO+0  DD`dB+&|jI0\:l`p cdK&XK$1ZUYn媕]Ŏ%[ ⴻǪb]bwa/{ϝ\u 6Ŵ =`h+PW? vjŶ ^@HD ꐬ/]cP}Vџ[.7QϊKi X#qdkFvqi] b0l갷p@J@̊zcdFZK$஛.Bb+7.ƎcίHMJÆM bl E ˾+c֓`HQDl%@i$07gPoc8XVСbq eFAH#GRLAb֐ &l(ҘxCGt[QBl 1.+BδѣH*\(@Y=(ι gy˔S8 tF2bޞ5^W!o{>%>ݻDFODb3֘@` SD2¼Zs<0ƬbL0xrV)BGeX9bvbDr(?1g!GVgY20"+Sz3Z7:\!W̖`'l9n`:>/0dϹ 3Ŵw9K! ic<# $wd $NHStXs`Ţ  AƣQ H';BPv idHfѓ?l##C 1&z@@G+,`z X#1Ԙ3'E$q>~7%%alg Tٌ>YBnKt"BTQ XPWy$&1SL h0:5Kv ÿd70#baА:.u( `-EҬw e/[pk/Z0vLU$xaTYª1m0 NnP p,I睦 xr 9.Qߜ.{ܓ WovlKHctM urS A3o iCd 6t ^|lhWjJx CK)5r]"Vz )l j$I X $l =K9b4(O@P5,r/wծX7MD*ˬ*mLQfds8ґW@E*M%JȍƄ?V֏D.]z,Wzu EIz7m>$$H|PBPVd12E8@`/0 } U-RYpM y!GrH-@]PVm| ٹЖ% )*U$XeYYAmL;\> z*ܒM$['PXZ$@0Dj0$T$UFd=]x4 xOէ W X` "6W([DZɌj3\^@UXB<\(ō1h ԨhmȕED|[҈V)@X>e!]Ӄ$XUXRk0m8rNX_KyUEiCU$%$jņZ}Ax -7-@:Zc`(deąX`6 vc@SPm.Q<$iP%4gZڢp"5v{ӆ=Z}e%I(me)-xb@ _P K%al *wiv@HQ0,-$@ hO2 h6k MZ@^@IHn GKxT61 j6X ʅha!MN *P V:!›Sa mI۵*Ru '>Gi$!P5R_7쬹R@n>NFq p7^swh_p \ļ}.@K@L`ɻgȐ x-o[MJº p6 &UWЛM~XM u{  QE i;D1" q=qH]PmK_=1𨟉4|DYHean-XΆtPnw~zf*2'zb$B@t_v [8Ӱ^$)~} M\x|x3،fK^8, 9(vlȆd[Ud  0xsU.Tps @lաk A@@Pl*vН NW!x,rot`hix8^W( p6[@p?`\Df NZ J,ȨB_D\`>PTiuPHh ÉDp^pm\0nH@$,GWFI\(Uz'Vuc7T:W0,89Q`U0to@л^`Z1W ?1#90P=Q #ж3 P@ Q88#$ zd⪀4!)vl8cw?Ѓbf_!&EW/yV3 V_trn@BjgIwXj(xme0S |9[~=!/Q7 |( `UodS[*ù70JOPnR5c*M Qm[7(Se`֕nЅ"=`&H~`)>f#Ľ9;A,/ێp7ׂ/eXN`6Pb4I٪Ui P.1*3ѣ*S)c+ 'Ldo`T.&u٥ ,zypbɹ%gS*KGvէaIFPA+n0`L0bv0L=M jBXMȒ'Sl20Q3И@(00DŽɍ$7bI5\I)X0 %a@)$F̅DPh ¥@8q7*IA 'T@K0FFvaJ) SM5+P5h$>E>,IPRvqa VH7lF"C!ц,lc\FXr0eBz$cI &$afS@&qi&2'yh0k$l.`!Pc&6oA"TQar<,QEUU|Xz#Bj 'Ђ p D6 kKʜtQOt1G>42 -4l RJK*X!+䓢o{,"L"zz*7A Qo1 AA"\04|u@,$aƎY|@Mz<35O֓.D ?<qLx @p؄ 5#5rr2*K&56iqҮ {6 |N@&@5$0\. =t s0؈8S0.0VHI iaz VAp9C$5eI+! J*ъ+PBHO >F[r_GXIlʣRV./eټd8?Ӕ-B!1 ;\a '.Z dPK^5=pŨCNM bVZFhM>ZO{ED6 1%X_bA]0bsNPpK;4I4 5>:pu8!aԠfFr1H-,pOŸr3&M X~%d,#XLn A))#7 uN!nt7p+YpȹQnxq!l$[.m"xg>鑏· ;J(jK,QNBg Hr9֥џcU-Ox ` 0<.A4#0,ڡ-ŖjpGuİJ,B H`Mqpd?L.Բ(>]= V.Qlf.%1czFƍ`Xkj7,Ƙ*Y7W(+Py lRZ`dj~-(+1A9^*_D'neeL,w 8>&R@(?V0b#qI 8P>bK%Ć`%Fɔ2 $t[~E0~ I [4 !u$U.?+mN,hŌ'` {Fc"2W(  tp5JCj0UzE%3NK$=fk*+ll$TJ+eE H|C;PZF{0J\BX d cHDR49 1,<ɬ؞i$,je I a~'PHJŻ7omb K|/[.!>~>&$[7' FXDϯη`o qH%e aA"2P(8ńo F~\sL(nXoz1y@Thr< yA},lmeaM@AR)pMfVr ixM V\ux-ht%CMXBbقL8b'<7k{@BX^޿jA@/,fl|$@7mtp$t($pō5܀TG'L7@ C9 2D/@' HAA]ז%XxJ qY T)VC47)qV5E ` 7lԢdM۲Xb8[ۍ Jߩ uM`qD-,%,7nȜE3h$$qFlL.Ԇ I^/^7KG>>P{zL+0 !}p5u@,ShCR39@:Q$3 2"x]4*0$$BύmeVl"A @?|BxJb (C4WLSd袜W64tՃ)BO,} Ҡ[Nנ]PMڪ_V0 0l7\BMb޷C!"qQjԸEH/>v(c7D z KM7Ɲb\Ffؙ,Y}`shנЊd*MB(y2p0z#1䘸YJ<,<|pML%'@ZyW6@.~e#0ZE<\u;}JbA% U( `v_2Ɂ! c"J&NBCv&>VaSLA7~ ǵU}y@eqg&;͘jȆPx U(d(JxA?ø`9\ <'4Lu)%j-&-X,1;|0C6@X Lb ,l}Z+܃F4{DHc @m^[M=62M`7 `΁R Q |T S`+bg)&6(yFdcd@#zο .B@(P |pp͎5 .l qa1$\/M'jm`L7ZQ*-AT-Bl) `k>Ą礖-fAY B)ƀA@%!jCuD1V &^`zE(W``5q@ QCp`8xǧHrBKÙ>>!hSbJ6D!aJi|$AVֆmH1O]_дn0B)PZʪIaȘY,A /̃[4aDdaB>X;@Zeh x@6\9ȍ¤Qh<x 6aRVŊ>㱁Y`Ib LVO'QQR~ b +8U8cA!AoyD&NɍECBJY| @ TMY( $cA"pPl(//8C*@b_Bx<-uԞs$ f]j(Mr`%$$3& aF%¶a(7xC SS gf  B PͰT0tDi)mU ?th -AP|H ֝.z<{/("xAW$~B.d;C T/=B"'e(`elBKF?G(a -HP516<+'@A LMx'VE)M $Lϴ$ B޶}ЄbDbi rwA|JAѬJ{2B,DfCk˄hKqA(ոw'\7xC+}C0x8BXݤ@^\-@B@@8$\68uB*}ÂV/*r+vd-6BX6EcGX$~[j C$N 5Vy ft ^pYp:㫶3[b .XBtS3qS,(dx$A0l D.K8xpMK7oţx̭0_>7Bdm#.BMz3:`0I 7 v07.-ZSa9e` T]LrB1$B<l9 @vхر/ڦ(^L>u-Vx -8cDѐU|ґ'F54kQ}an0Ԙǥ`rq UmU9$E+@X%b8p30t7"7<(B;C.\c@́0(~`j1( Pj6-` \Tksx fRI█0>A,XrNSNr)rAfd80Er!Z2b&BbbAFݐv%zxPG(a`bm9[ٍOkD-ނ-ɖ#j*jlAH!F٫N%"9lL)m 8弩Z1:qSb᠎sN87 olŎ%^%" 9q͟ y8BhuZ)JNx#gavgW<<1(qǛ>fXCH e?Er0\iϗnQdwXX)u 7L"&wvUWg_!d =Gh xA~ fޖ9Rbiت:˦/-Y+J6ԫJo&1la 9\K m4AsV -b؆XP.J-8Y(>M9{jN9uHE.+aP;/+"[*3"GyY<g"ֱuyGzWFΌ@ X2ޠ' P`s m ^cl K}N]Ie }X$1]%bHM삕`[Rix,5Cͺ$5s'3:qii0Fr.8 jNsn0*-# $6m@YO%Dfyю~SNb JAD"*B"DdDx W0^  .viT(p }"#1@9oZՒss@la$S+mvXrLL]<f,b3B xZ9V 2TRǂ>L_ QТfSa60)FbToKЃ6 XkRfy7(xh%X_tg~U3%0:dLE"QBxчIy.pB) ' n߸?C~bDb< ҅&? Aia DeyNpmL P\/$YNғEǪBʻYUPcy>ӈĒ `! ǖ;Irc7/}I.7Z0}+AEͣmv "׹?t a I8U9=C!wpS)\tܴh1prt!](Dޡ0w5[d.*| %N bG.m{sQZlH;_'qeUƽKԻEpI5U,?5zY7x *T#؉ @m^$8GLJ ! -& @k &>N!-XXf@A9 .ʤ@-P%,#bfK" aDdëm0,4A* Ob K  KJdi+D=k Bfb&Gd@)$!&*b R``(y 8Ha'cP` !7UjNc>UnN)۾?C q Xzzz1\(X!l7@d"@! Abair &!Ða2Lô ޠb) Hf>pޫ- D-fƹd=,,Bk&Be֢pb@n .)(d\V N89Ax'(^91 pn@| 2"N!)pr`L`[ht0kxѠeAR0" Q,5dߔ"" $Ta րAVa@!{P!6,<g-ZAfE2lffb zX$0c30s*!n(-E4N삚d%V&4$) zPe O` r('(;ol;[x ![4KXt`""X$ ` @d!` @^жAh;" bDLaeVt&<`X4PTѮ}&f39 eNpbMadѺ"$If01b/"2#r(>aPڀ\ .P}:Sc) %BM$D`fҴ9̯j Hb`BɷyPOvRW&>R>M)rD,DO#@ʈA `3??t??g0ʲ,!"La"$:AHha!/+d:&"j"/|Ϩ,b9vB6n 1"In€ #bJ#W &2,}gN)&mj-d.bI7"""LpFr CObUpU;MǼQC?aӳ+Rb!aFr P 4"s"V5@-C\VWB@B}! zA~ YSpLS|ԺtNJ)0[*!bE\ϴ>)v L,N F/5N@)""o7/H4Fcg-pb( U.>!&{0V_iͣ8 Bi Nj~c 2W^Q;%Rn&SIl_\@ $X`"\u?V]! !R"2ojRa<Љf8@"@ nO=X N]-b cN M<+qoOINi€ cp(,eb5R"P{f–Ыj0hRɛN &`yySG-rN2nդ:/bxAgrŊ˝r?zTB$%wS`rSA?{!ap et"`1"ʠ\ N R!6,N4Ē$/f 㘔-d}0Fx lR6 %@so좕b)"!g5maoVIcL)bN*@J! ᆞԀ9R"9>U!N' c$r1 9nun|r"W B`< =1"ytZ$B F{aUshsR&A煶"*W -a`08K4"46C2 R0VFG/#shBboaIjƙ%`#Rg")X8."pYhr1feQ8ob`%nE"MOF|zi NU`ƬW~% ǜÊ@ J fp:]!LdP "`U)JzLHaV "dZ8((fk \b)&%D@&\bc$VJR2g&Ȓ QґސEL.6.IlBo z# $,"pE!DbUdKV7 1/0([ZqWsɱr hc!&Z!H s0 £F*(}^Ѷ jڰw:Bk4j[ibN)( @/a\ h""gD[ƒ{r9 9d!%f!?!#S)"d(*4eZ/ gfbDWthc9 C-X9Rh59E9cwRg|gw.d}art %Pb:aL F$ 9 t{/OҨ e["Wm`!k9JJ$JwolVnn"-邆M"ܕYJ/JF,8 z.)KˀPF'ՍI'ې1efBN.B.^3"xۮ90dyVm ,9 D-L2&9C)ep@g@?v$s?8K>sXxr` Ɓk bt$HAmߓV@@FeA}Utp8d*I0^ebZ$onH!uc§0;E_/Ih$bbo$a6n4& .$y-rNa,pO s*',S:#F.H*}pA%_ˉpfЋyӊE/,Zi@p13'Jpӷ'K} 5ԠXc45VV,~hQ#u`ՅEU,S<>jMV&ju-wBrʒKs2(FR1s풑9)#p%ʗ,5# %[)7ҡK͏C9ǃ~ӄ,opSؒx` ϼy 2qB17!`  .`A"'#EAC""F+upa99(A2޸XN TM؄MX 0{XsSZ= $eA)@99` 041uiM\vߴr]yA'^xq7L @W~/#tb-0LNs7Z^}FksH]7)tM`镧v\r_sJ\`J]Yc87gQI 5 2|7Q.<{_+Y$ s2")Wp)rҋ]'"J^\(̆*y Y4&k@ܓ-$O0FN{$io{DX2TİBL -C Y`AuO,Xi7qh^ecAqy]u l7A?P Ef_ gállf5IzjyAgܿ&ELY٭ ѫ{m^ɁK`4xބ1`a 1l 2 $}"N|XJ/ #FBnP!2^#3ձ9"R9*P9vS,CE+&lKFaMS)cP2sc(k%{6QmS,hͱF#SO<b‹EW(9@:r@6c@7OpJAXDO Np,*H7Gr)G/ h^8̭rF$Qd>%/ߐͤ1-~EPaa}{`\_L 11ZNS=:!,:5~lgT-|'@#v}1!"[Th$) /ph͞Aɰ0Vb",q6ƇOc/}DR\ ;@ωx-WF.o6P<3yk$+z[Q+6`8Jllr9+Zh;`Cˁшm= .h0g-t#|y+1}l:GVmT ruU'K:_ސajGo"vqlk$3lw#I`U^l35mx_z9wc|cd+yy@ fAo_`N f9ҁ)^t G`q% fP@^d Pr`[hFSBq+q wݧ}A}y}y}}ZSfP8W qvfhY$F3)]D'-uo7So 0 @ 3u7P :^Ϡ p9kT/x 9Hސ= V(!32z YFC5C@R8 Vkp 2yacby6n=n0d$zRB%;; 8a.`$|EЈҀ; gtG{9%QeU!QQSB%$-Wfph}({}Wo#7)iM-[#Pх̇6!tEP}P ' }uG#S}uS3 H0:U!0  Q/8<"b$O@pTza*AV#ey|`Jhc$M1KAx6q_p`3*%pc_ )7&g5pse}1'aNpohDBu#pַg2XZ%b|p0qP} М9+ auPX{4 GtGjY</φ U@ 9u5-#Tk1@v6Ik@P p3PT;e 6CT0RJ+`6 K8 c )?o[uxX:c 6` `V+Jws6C=o596} P+n8*Â$)J9Dؑ]   g/'MR%X)Bs{<*D&1'Q8p U00d`%v{v'Y9 uPr ," 1UE $@}p!vH 1`PEOHœHu` aG<0bΆat&f4 - 0 !C4y 8NK3&pC}5dm4JgfԐP}Y7gf1e19nr Yu )`NA[FԲ!7ZUf-)i~C 95*!щbup UŪp+k T@I0Pp93<̈a dp},@  GE#c'B Ya $t0yP$@h}zv_ W'0+2j*LfRx&If&=CCx~+'0f9ZEòˑҶa48*E6PIffq>ۦ@ s%6)˽tqfS8 ^30o(m@^}7EjaPɘ0Ӷ"ж, k 9;3BIGH`尪Y!؟Fz^PD1]<8K yc`ORG "X V'@yxgYfo|}EyrfDžׇeF#S`V2g89񇓊2rabZtbS9 J8`j b Ra Pw @WB0Xm۶×و"MHlz ހ -0zg , @ jbw <:P&A !JQ\x>VPXx`!>Z` ` /pop֗$8Uf6D~P 1?7汔[Eƴ)3DC+sC*&х($$%5/]t`pPBu}΢j@ !c& |ٸ!/0 aF 6%" 0@ fQod% P&0P:4}o:Gҝbɯ"q p:i+s9-1175 LA1ҎOMQP)񬇎H},lj'RV/q,` 0 K0_{pģ3:/ "x H /\Y@p} 0TRm ` *5 a7dZOy*h373S@BL%k.o0 |k}Y*%Co*]vfZ'}r/mP jYQhgghE)pZ Dmn}rڼ7sRbN6dBv09``w l <Ƹ //P"q!/=\˥ r~ܔe1pM6iRf_/3PJU=@02zՌK/v 0 `OY`Up,d( $n2 b QzKAV T2 1d3 !@ް*;Q@bs #;.q9bdKr<~[s%VFx` Ҏ##p!GI07sAnQl_|UJEe|T"2ǜiȢ.6 0C0D ke9ĒON@f4_.TW1EG4rYXk z@[8 W+ H` NF # ¹A0 =z:( s`p}yK7wr!vOrrQ$iD*$ TdZf6}J1+[>l,%`mVn_ 9KRL98s)DnpF+x* kP0qHfwŊq@d` <*Vs)Laϙb>p=>( Ap4 ΐ8r 0 bD"x Â}@ BPTqBB$@-߫X0%y$}Zr#`fK*tIf JL‘&dK$0‘aJ*-A!aF ]9TMuxC m9+r`؊)dRҡo$Sy5IͧDh.`yˊb4a&0Ug B18`/a8p|+vي¶sc$b<3 NG ) ha{`f"6H{k6#F]sdF0F$>ЛAIX r%YśA,HRlɋI ')V_BA'+XlrH^x ?q+LQ~#M7adL/N,4*2% T-N# ]@Fb_#8x 4 v{R}g t? M-T'YJ#1֦YJ[wP+ X* mf z2¶PoPG-əa V,Vԕ/QP,t2X'h+Zر*$R nJ28(h 4( FYsWTY$NBxCH fZL-nqFb́|`'ʖ&޳N! QTA3Ax pl^|p'AЎX' L`$8Y 6> 9`"*<  &Bz#ʘ3AefT 0/6M`8D҂N8]@[ ں{sNL7:p'XPXE A\q. .J%J^xRbp2 $ BpIA;~=:6sc( =8"2 ,hABi/S ס@b FER 76:QQ´HLńUzy8n4D0%TZ-,b&\zE7U$9 +! m \!`Q;P;*: M3&-6WMp4D\40ar Dx~efqy1+Ca eY!uX@m@ *H*nt ԏT/P_ 3$5|Q%#8.(): Y ƚ1 c23$<[7( "3 !h\%# ⷛa9HHF#8 )Ii0Mqި*>ɰ p s &z1Jd XJ,ӌ̠:=Gk,xPx:"XS [. |$ l@2Brnp/ rZX@X86![hho(KB ar*0!\ؑ8F%-Vbx ëhI8$ñK0c8>8:pC QHF 1R &QCa0@Fx{x$ I {dA[x0j i!Q@pBra dHr; H5D Q  $(@ a0ga ٺ@'+x,,2,<ԑZ͗&8pҊ+Pby#>712  A `UD$Q㒌T0Vh.w9>vT@20əA40yPEbPEL M`K8cX>:iiPc{jlP)Z_ҥ40س!y9Dht%aRXT+y\1!;m3t{ +yHfG 60W >|7\1z șzҧVPt@FrɺRq3vrR ,1_P/GIZFĸK~D!c X@"vp#{ @چ(hQ"(4@6BY ,؃,8fb.ȇ>qRh  7x 8`2%3ִ 8 Ј|^+a1gPΫ9QqhIHJ0 @9z]!̰"5Z^ЅyՕ# P>08UڹwAo0i$ȝ%Pa(#XPȖ VsU; 8˳[6@Z,X) `^À^ȏ ^+C,t 9B3[M%< #&DY!4 I2p+)ƲǒJ0Y+; Th78%М0Y%~_~8%&k@\(beDIh"ӢҌٰ 6DBsIJ IɌH(HB,P 2 a@qV 0閾%QT; 8[t6Xh8 , 3088F1@% ꕕH&y҃D zBIÔ8Gb$$3x k\<!+:>^QU :P^p^~\qO{o](s@e}Uy9_]y~IRxx:`rIO&^1 \z J{Ja[0j^lRR˖4$ZX  ZMo^]O g )p+7=3&ɊAcz0żMݾ*=18{ F%3Z&a%#A]D _eNPR\]$%<{˜NV( ~}7: ])&T`;^ 5@EhI50柋\yXBZ7hu @U[@@4p~K_KMK8 [|$gET!+(xЇ~ jGxSx(+ `=:lSPS'26(%i& ଽ=xȍPPb-˕0wuiPJN$X|,{DH>g8O0~h!D0H7@QI2nS:9DWD{P!`:pWSHTU8x%iIlrKЄЄ` 7$d"9`( 8Pu%.$A h&z Z,ٻ+ɬLJen|+iH0akf%艄  qpbttOwQNjmHM@d1 =93BZ^0p< TFVYD쪂VfTW]Lr#kcId Ȃc5"XNHH+\X=r` QvY*B6 S(+" 5Px`@PLyˢG7^gKF椘j5?ȥ#|3b$0@KŵhGpIo×>m}g r-wt0ñl\CoGTxa rp$ I`Ah?(30Lr\qG1}F1a$7$NE`2MCC+ONuAQ7(ͳJ9P}UdeUVȈW5.LHp H@S  3L\:TZ\$2ah|{lGe3>/eDK =P&m'a`WHD~'@oQ7̡q̅igzewm{Hwj-{Jr7- G!x5}G"11oto@A9 6$ F+4 >#,3qS΄1FXsu =[iLȔ hL"`ՕV)vVJ}vb\w#p哄h 8+0m7$FC*.pR0vUчjj}F|H ŵUY`k_؝r`}#^䚫^|sƗdמvr'p[ta~<]|[uq(4A's@\WE굒 1> p~@TK94({3o,aAaM`GD0#J4iVn de }&d* VVuh@/$0CO nl!P-(Ȳ.`8(B=" :O6woÎzN@@> b6y@=pҕl ga0=kO;LWl$!3bkV i^A30[Xb!Tu(`o:pM\Pa$DbPma(67Pʗ2 3x5!͟vۂ0 DtKt5[י|;YolxzJK` OC=!sde g9o'{)6ÁWcRL>١lxtHF?PCE(D&"kO{ڱjT<H3 &OW0OГN@*SpE@X 0υ]&vVQzjŨB*H܋ ,hWgXFZ-%@ CF1Ur#aODA@\\2P.@0B `A/H+IQS-o.$ɣRWU ΅S|rIpeFt@ρH71 $\0!3vAB2{p! k& 1d'|KBIb $%:]ml c491p% y hvRP1Ї3@Mk-,fTD{(!vda |e6 ȁoWF^j0.gqϼsd&d^|s6o;"A%5;eK`HcxxaO a`P<&%Y SIc=_QeOl4Y<'TG|"oq&DV`*G (C,hPCx`A!Px-@AD7lCOQѮl&܇5e$cXBDU\4#@ C XQ rArU qO4\zpe\YOwKԉzqz\,||OY2%HpXǑ\qi̕T5|B#"7/Ax\%-|'w;x | \{yZ!)1!0<)G>H|EG3lG|l޻zxx{{sԒ\ UOS-P\POI7EPC+$5&% =ax< I**Qpǀ""4:}B20BeWfW9<I"%MEJYA`ܥP%ș-TqAA'cxWAĝL] uN(gT%% At$ xR px 3 C?AN"yGQ}vuw0x,ȈUՒu,P{-Ɂ< AZ$:yR'8b˥AHUYI-AKTD#0-M%rF9$'q 8H^=&%``3ƒ&j dD| ~TqçlJAtJcHP=XPjTlm) \A[ @A0HnjKs8 WMcqR\w`TxZO^ӍAH)H*X:E g"N*A|]'3S:SmDx@DR%gԀJA?!A/ C]WD*x/bpG)#܍)l,Ke?hV'›-T >W)@f)dL@C< xqP @B!堄u\<;FTTi ERP HդN0[umwt뉁l1f[\Bh%PCeQ֒%%rd㾝JZJ]pF B@!IU5 =1tjeYr"Hx0z[*ee e1q뱨xezL@{lrG+b1|lG+`1R$Im߻Ѱ<%ɓəqC3Pp3xh@7= t3Xbg#Dru-p@,w Hq\AtW(>s2` ]O^pd:BPJSzl|$/uYi '! vP`VA4ɩ,qVBxLM IV<-d 288p\5Nh !T/X@ | BGԁ<}of-HEhV\BQ4Xs4dc큩yAAyF0+y"pCmЃ:/,ӿ|G a̋5C+R$Ñ B^/YHHeB@[G\t.&YZ9յ, ]HjiV~ ٯ|g"TS,TS ,(<.@8@Iԣ< A# j@*)@(T ̇8@xK BغǚC/66)-E/k0 x80γ6Ĕ oaW8{.C 800BxvU qYevm9Fv֜9u{ɮڈzZF.Z}&ȱ`sY4lҒ ҥ#?}c\թf 3||#w^d U? ?uNPhY`$Zz)hq^ N+@˅pJ","-'Nΐ м:Zب7߬O`Yk9.9,3뮺l̖76vLI6( $ 9 8"Zm!"%V7\9 `R`k-i.%.Dž,y [~xA_)Oh0Xxqw z?b`, >2AN:p7}rgH?JdeN٢5h PHa:@]Vҡ:8I9*$9(5+Vk+BkO>.Sa8..+m n=- ؐ撹Ȃg(*3KZ6VFX[->{Xi%x^F#oٳjmհ2۲x`_3ƥah®|2 qa]wՂ=p'@\ -DdoY(@dsc8 Bp:’#B#9@{ؑC@d Eja {p/21d*GU".)TBX@!6IHfP \gF.zLbc 3UNxJζ!vKexl2x,(U8+LXU,$jcRt[o&5ho&V.AL`q7PT!F C- %D&,P)M -h/vK/3yTa@^$H$1\iBT,pX,HcE &Mq}j(HNiIFj!a%S2P5 `+Ā2hDL1t 狜,$%!?萩u)b-0WIVGҥQݤX9` \RQF2oEwGJ:V9.h`fTLZJLbq;~s&4 mQuR6h@1IhC]"@ (^A Z< i~ "0rlҰW5+t.D!ݬH ΐQ.c8|CXU ' x#@kS4zpXdY rN!JqrQe3Oy:`vʆFF R`, qZ0e*.XǮ3Y`r%8fKnï%aN @ `V,Ǔ:A0Ho8BBEr@MDf< hB0Ңxr 0RAfe(QI 7@Ǥ<1P3$4'm6eB@H2[JFXÅ 7L7,'qCvKTD&eÔfw[{K*6`ƫYU!oyoϊh@#@Fn< +dpmK~U;Pt |\@$"ʡ>(c D?ʁBb!2TP,Ha8д(S~=V-%3PIПH'P xA0%@6\a T=I9@-0ECB!Ľ@ A`̩'\F˫6bgiǾ e4;WB:DV<@CۆV uҼTI˴͙9`ILfs %^ )b  P^"qZއ˥/4(@}I`h{(ZB jo@EKG`Ɉ>&ge!$6d)+f $J `rhp``2n!(~| N0H(Մ cNC,@@XA-RlDeON2RPtQNcR+Ho 1,o30'SD+ϊ+*",3@rPE1*6H$ T33B,~\[A@!n^t:) !ۃ֥<`@!^JСVHa!c` lVa|,RKh*T̅!d!jA~a!4aFbR`pB,n(PH"6r!aG(x 6 RPf`lPC|p<*jbV` *gޢ5((`#.B/>o6& ,0ؼŽVnzeP7 .E"|off(Tg8vl'X19[5+! k J `a @J@R?Idrq~Vd ," /H"b7ld΀9^BbG⨿ ֒gKPE%&JD N*.f eAd f I8k !X(`bj,RDJO(&M$M2Z583of0!+0*bvQm!pb~b"& \ ,RG6""#s茍遊$ P3Ox.- haǍ <`G*(6(@6HX@ T!!LBXJ/Zc>#N-$s4;.A"14F\.,PRT0>hBqJ5B<*Zǥr0&pZF3+0o@&p9#w%& &@ Gn`DAx@!RR n`\ R_d6× B~Q$@JAf2*`NgB.! p+"Ov`"jb#p!ґ$P^jfTt7#/Z%^-pn,!6!R&3jJ>oda N 0,8%%m⋀a+"f0&[$Au4Wn@,U]@y]x;gcj"D 2a!,".98 D* e+d)J:K!J~~.HIb"nIa@4!dL #FA G3F*rkQ:G%u0r36V Rj.,a^#Vň VosU: gX CC H1N0%-+c^L~"'6`C]u5?[΁v]AXw'AF^yx_lW,O gX )pd!J,(!& 2 d``d(A$AeB `l6g-gTW`"` (TYwGf%(% Xxb!bB v ZEow<EU΂VbOYR uJ:SVu+Ӿ %vM14b+Ol~e3x '429X*[ %sxw-,e]FuAh @xpox "~L0/SBAY^O4!~`'*Ơ`!z/a1H ,„B~f ·r!|"bf2, Ȁ*@A@h! R.PmgnOY7mi/,vd,0 B1~J.op"-o-SP#"2.C"u!\\Glޢh3B1t!>T7M$0`vYzRFOwAwCG&V"b !قY$3? T%"b,T⃦&Ba5NPAO-B``@ hf8!, xb1. ~-0ԉuP4v҉Q7#0N :7%&-MKs#6 xG9DwwJ#@! "xDϡ;;n[@2Jvfaջpd(dBNd.8-Zdz2mI9!BIz!JfG A>  Lab >( U"  fry-C~|*({!Ta!a ZUe/R|Uhf/yo 1Sl&ȣZbWjؼȢ3O‚SY,Ѣ|r|UNlc\&<49]& \ 2%SAy»yQ ΡFk4 `?5\AyՉ!Xa뎇z,VD7!EB,a#a\>"L}!0\,Jb $IF)bA,p(5!15R`(b!6J4\!sXdRX8V/Q+$fp4*rA(4,aPEZZL!r"oY.+ ^o cġv>'hv:Z 9rA{Ȋ/={5N! xN10ذ x<G@>N1#ߌ4VT9Z8p]q @Rǚ5`fDhˠ@JhM~JՖ8r4i)V-`N}T V)s1azPQ@"EOí-!!"%Gָ@aEU˔2je)%`}kK>2%![9vv06Gv>Rirvy+xYaX flYk-3)-tҐWvq};S QGS1raKo^?s4MKpNK<dȧnFSvs+qNƼeҋ? -&T$V֤BOA5GRbMQ +ۨW\W@KcШQ`IۜQCUT!l;Ԓ))`Mlu"—Lr(XTn2O?]W.rwᄍUxDBgƈT^Km!o@HT!P`CuI89 iJ J)RBhjIQ 0tt< sOxRL%hD% j D6.M>pI*$7p"5 &.h :1t!Hɳd3!нVhGx^QP'OyӼ5]JbF;wZLIm/P9:IN WM@†oT%2C.1`MC=bhH:0ȁ f2 蘯cĄ+$1-1%+`JQ@&X噺0~,U, AD0q%h 7X):v c/tHp!Dtph.fp^  Wg Dy>`@KFTTƴ !CC*Б8,aʬ: >F9U[ Azat+/׊$(UX@'DۏିbCZ!H }[ *~r!i?4 oL)<1JniI(@ܩASRHvn Q04h9TKp=:+lhT(D6N% ra le>ypȅ.'oDr]& Xw 7QH@9'R5'[@ӕO } #PyQZ2P4 9!G nL:%~$ՁIMC Vo'/0 ܺv(b(\XәZ[ cdX%[(Mlb?}YPKL[,rA8  n7#7r @Kra@5(V[HOH lnڒ, !8Z|M _r%|'&|թl]ҹm1;ccš Q^k{?0!Z2\'72+U5~jvUFP` AA&h1$rpw xBtlriS%FbsgJw1gh /R-b"AE=呀2iMqSu\g!_!V ^ tl33us Y ph r@hrS" b C0 }S16Հ6B&0X?IzB NTT*SW(09W 5oP -c- pU*`WO8  A AQX&k3mK2 r!BQr "Q RvfAxӡsO9Q.F` E^6n[AlıK`=ɳMu8j+#^ ^#! :[V)kERݴ"@r<U=)  U 0 à,հJe U]IqJum'ۀl+ )[(RQ`c2P$3{> Rbbg K"r}n2J<kPt,,eHPPp~*)E=F`^T ְMxn OZc>"g>q/"cKkE.uV!Yg!P2!0h01bQc?@5u r7`Pk]&%I,mQy&9@o~a8f ?E` 9Pub"sp2@0 } tujWp@ pѠm.z ȘH{2I@(RP R,H1-8h0^v3K Aux-Sr1lfA 1Z=tݓG0nW!uvBP%`7hx11Bh x o4{0Vc~q2"- )ċ pyWgWW |6ۚ0Eg7: g0 8Z0-ҡ"1̲AE&'r.Ե=8}ԮŠ!5f/(e"ݺ]q)uFP(;m 1 |{mddzX7TB0 ؛Dh- '1@Z~x$[tm/f"""hZDp?!ͳ!b^G"Ҫ3`]$j8P$¢=r,ZU.ݠ)Wd 6X`@S|.E0SP {{cQ!?q[%/:9'>USQ{b%v{wJ%e2ՠC(PAF7fT?x!kWʼn1'hߩ~%1ʵ#k߲-ovӴ۟`%ߪ",P2LaQ ,2b=Q`gO P9YPw"=C1@= bä  F>"@WbU:,e bpd[RyaX'ΎfhjT @>Idjg89a`$ L5 5AP RGv`pPБ-tK-_AhS) Z.¥R_'"LQ`e0'0P <Tr"'j3 ^2$ Ā 7pccc$0]1H_t8+M.d0Df#R`bC :Y"3T Y0IHZ0[' D'kʩNb֕>1m1Fv #l=rȜs#ԺT+.]ЛˆzXw-&ݺ8璜#ڕ~ƌdk֮ Aٮڸ&I&)tkKNga|tirt7o@*@ Q$&p!$NQ>a,d5fP##6 !6: h Hc*RҥXDn,!@^ OqҠSI"4y+VZi,pRĺ9R/<i<4.#2301 Z,ciײB6p5SSV[58VLn1S9Ø մ#ZAD1ț^`(ZzYE@Xe|r`! G8(aJQYMrԢ=6kRhCQ4im)^P*G 6x$`!  | Gt`V^}F/6 .,&.3hFN-D+(iˮ[l#9 V]:ࠎ@mbsEW a{ÎcjPKrq0R`g1?DPz]E [5HѠ3JY=$W"& (` 8e⦕*XC8nF n%ېBNT08E['Xem┖C880<(˯(e(J.sDF&`!Va B'0!K_bH 3tR^cKPj^jIUm#xÁV-`x KAjbG[ұn[DW-H&5"Ɂ -/( gE?~DKI]<X&Bo { `aN6wPi` ȘG1@"+PKb+ D,N!ohgb֒RcҲ2QKf8qعذ)0봄ҼLq`۩tV͍5s#y7V`8[HHH# @1PmFjqQi(4L$ )qU꜑Vq RA*p8D dGG` yHS6%ÍQ#8hzH1:1pS A 4|gYDf |rP a "ֱ+BDU[ 6)s 2C% 3D]fćo~7S- P&&P/\nh)[[ʆ R,ǁ\  օar3-VA bH@F4\i Pv)DHv,~59wV# +@ jr.&M"*@a(MN7 j4:)uxJ.xVkjnE( !ehl`(QELo7إ/u<56OݨVpT (-Ic'ޠ8 x6rhEm RBszkV$ 7*^ mANǂ<:#*)7## rID$%!e<&Y5>YP|(BPۙ$ mUHw x&Vњ i z@b8nHx44l14,$qOaj1(SQюn bıgpxi!18@?, 2+dn\   o8N:`uȅV.CPHng771 Op@|Ky ]$Ȉ璤`  @2UT^_%HJpPV< &Vk%N  vXbU:B H[3QȁX{Q a}h׾$(Fowybu%Riv2?L81s'' ޗ! Gb~a07(BA8 &Ze5P@* VP]$)<q+ ~8BP0B:q10ҐCE X8Ac*2,8g@* pHaxw V7+ 0o3j2x2 J1i*dh(Bk`>؁KHӛ rO(zc1" xRX=87aY;B h60($9V`r9w@Dؖ@(*[Zi1(ohD@* X,@q~#ၤq灤qM ){Zc5 x $9E(2;%`!0 {oa:( 8({ 'HɨAlj=ƀ$78i q"\- 3V@C@dZ  ]H8'SX [8hǟjx$AbH$ؖdHC^pp/Hz)JH ؗxF}@=U+ 9 OOڵ5|*٭yeAgQ 2?J`,#3VV3d>8ch0$ 3+ ߓ&=2Ƹգȋꓸzzj xxij3۲1ChI ȱ6x %dpi(Kp)_$^j0 [`HT,ل6Edā1䁈-(;+СyZ|9̻r_hR@?PeD(M*i˙0hm J5M J?=51WT8۱[Hj#N-o(x@VS0Mk 5HZ!7( D}79X[A@ps<@OUbX_eA2UH6Ra*P08;W5tBqHF1;ᗮC#Xz/ AÌ:V휎\<1X0Sh bD06H>s6"T d*"M9Ũ)3߻ N?"SaxГXԆ7Bh" ӘcAQyXp ;ʂiS^i00HDHI@/ =a܄~mmhAz,AH\pNdcnYB?gKIC[2)XPW]yMITx?=SZ렓S K!= 2gPփEY77:C4,pNVⲧ=uɅ >"'/t9%a.h+aX ){Pl|(MHgdS>xq- 5o<YhK@^)DPMH= +A DPz3X*ߙ)SP57XASݹE5(:pt@5bv ;=Po@U$cI9fbuC:0SnXދT$7XV8R]=r02{[.` {P ɳj gֵ? @9}Z%T;Bڄ}(FYчQ xK (ڢF NUOJLeM0)4 0URM ^va.Xs^z5sХepОhET8(q <.'r1#WW``! Y`c`Ff6h( _iXX(aX 0G%j xɁSDHA3ȅeO+].iٖ7(ZY(̰@02 k=0}Q: UdEq0 #VQISw{ QD@:dR2ԍ1زؼov H1qly[zuǑ3Sɂ7zބC @UXWip( XFpPpPmOԑKd8YT`\0P0p ㆥjN $nv[ g&b h08.j#D1ii(sd|Xxm1(>C>1Ќ툱?8&ͳ)K1Sm'j6"N CGY~n@2㛊nV:AfSSp!(U0ꦌX:`:0 l)R`[e9]h+PRT=%VbElH6$ԡJaW, H8F CB^`]^4.P@ !+h%]H7C" ;;@ %8\Nh IBP^ _X52:6uƙ%'+1P- bPb|Q01pD@ _`FXMc[^0HQhKTM@aJh*(&(؝І،F>tPpa5/#QPU8gAiY+nJO%@A3U\tTrjiN< M@s(0$;,p =)0SRnᐅ32Eed"$b"pW!p!'<hk%ɇaXwQ0x:2uNxzDrBp^* m?ч.rȆ 6@v,i I\B-tY5J@kHHs$2o'$" < tQ1dIT.Bd<:6'ŷu?~k+ƣ39l3Y>'p͎Z5[u9yS91PRNmm `ǎ‡_c$c`t[HVTSc q !I.`u ]İW`@!^ѱ|GV\ABb\{ <9Clm Hr q>!$TL+x +!9N5rQI@B>r+GI\M BO U>Lc# SMT0Np%rrA]ƸRGi3#5h@dusd4X# @Ol'' <ɹMؒ!r\"t9\t1g/OSRtL,\/$+AEAvR B3L .I( B;]ԏ-)aN@1awL0,+Q@RBapA Ea1.&QEIGA9@>gЁ=]r 9#K1Xv09E7M?gyB'sSdFF-J4btmFfkYe P)&gШ ct-)[r+N/ 2X )p(kquy [u1^K" <E)ޑ0XlI9cI[x%x"Gh0 U*,5IǤc--K"FP m$ Š!d+[E&qtn! dWB9q:LeZaVaia&: fs5`ȠH_0́U~@&e,&5'25Y1Fc\8f~C=#9׌` 9XbלOhr2Ey0ttV^  BѸbG̨Ma8B #q#[V#LsO69$F82# B`4b@Xp d$@D-b07kxʱ5X,HOT5\' K@,da+ ScǕ> 5%:FZ `!Zp+x\/ahR)m6P8⧒ `ĉZ]N`B11K`.yYt`oЫiх0MP P*dd EoO+%s ::&RH6 }b:h1ժlb';4= !tWT@&@BhB08&d:!Dv`xN0@nc'RG@` A(8T;^ȕ,Uav` }w0>q , ߘ@hEDc4V-R (6Ji3uB >b}𠋤\1i @`z@5*Tqhs;bFV`P Cg@`E"!9RMy<(@H& fP]`ȌIGP4@?&pD٩E.'rv1LVPdK@Q5 gLJ1!h tb m9" @ :rP>K<)w(Ǹ 09xI#WP}֊ #ƀ7`c kխjpA󭞈a3!æQ b?J1,xi0B%StBsQ ( 1  Nj{YVXpv'b,g&{d@OG~ 7"8 ̀:UEdB{@ڀYe_%?al`1sQXPacöIcs*I! xXp8RR\]-gD?>A+}1o>ЯpY4. a62T*,=o0 UY"+ dCp{@QmX"XH/0GRx &Ii9d -&'!+*M 2"&6qH|_}S`0r!V *8/cu"Y)2xT\hZ8GtOT(O8М./0 ( iGtuD! ?TBC s\Be ]J 4 @!EF\* lڧۄשHTI 60X>5X-jBWp/<Lxx5BĂ@ a/@ `@"xC|*/8CVAC}CDXEP\$<B DU!,}>pC%Ĉ@d!XX]8?@98Sdŏ%-\1 hA)DE8 EhE\. BhAc\%8G 5s B* ZdD< ȏ\HJ YP%LFXEA\| ِD*-JLdž 4G<"/CzhIMtELRWT ԁ0NFeƕ 0"ȄEԘ%@4TUG* %P8 Dl8@ ѢA H55]=ELjG_~ R!p@@(D T (B!\I樓)^Gp#BՖ .D t܊)B=j#<΀-%؆1 ͆~I\B b ]Xs#@@7pK{ @: D'd'$28 @ZC5p@>Tt!4D?R`BLFvDB88eAC,AZq pJ>ɐNIJCPp7OAl>"p bY|͈14Bx\<:@ pD74%)N$8Qm V5p 5)BvB5hp-h|` `<lfdB"$B*O"HJ9f=]YL\PJiF}F],GtK4g >C (l'P8LB vBDT~p@0-JleB|%ԁ+Q)@C,X PB520HqxA5LB @  P(ņ B̀@Gr&@a@?,ICÕs 䂂ln_}, 0EgGe&Ga'v4E 쩞\LB/BԀ35=.<@GUE% MsHԂI=dP%0G.AtA C !D@}$?T7 Q%\Ё }AxUp΂R1It+B2n N܄GMp%dGpBdC JG**GA33I?4P|IT/TtN$p83@ h {+pU ~mB525B4ğ08_ajN,m_D'8fu[,c0(+R][,d8MRH=)彁b Ԥ=BD)F}-$QiA-^soFx K%":SX@w\#_=a*C,VheJG(7{A @qĕQ `c4#1L>./xfIR_T*ڂ5X:AN($BP%G`z\٫垆8hyV|Tdo By kE8xA4B*D~' $Q( = PK)" URQn)*è0QT" 9ȋ*h"g3tъMӪ&ItZḻdɘ1W̙ضm],c&- v#[J(&f.Qdk B

q\Z(M46  N`8b( 1" Y(fGW7QHdaf(0,>+ +& ҅&E] TSkh1> = Ð7 r` JtM9a^ߠw& IM)G *#iI !Q I*B p`؞%nܰMPQ"-6" {ǂ$iHá2`+-. w\>0$-pI r ܡg A*f @†`BѢ%l HrZ+Pѵ gx SYZ<֕~Ђ!lBP*1n) ` AVe. "k RCL00H!sJ@ɟ]B ]`E"~[X,kAC05aEK*(f 4uTH p i`%v()Q DRH C|V!Vt2 mud!-s` (rjs ?7.tR2.|bK?&0$@,&]ȩB$ЅS n4י"r XIV@D^tDy0B?QF1$;Nd%3* |@m W'^\0y LGW!U|sPPew`IzG5_Jk!|WH"B30 E X !"23 >Āu@  0*14l. Õ=Y*c 'S/p0UYXsVlP"I8]@b @\/ F<Л>֙+K?o|N`nΠf & @( b8n$ }8. ja`0 bi/d@ XA`Fd p) 4C/2 R"".bŠA Z@ S @"/烠cT/4pNJ[a c@rbX @ |ʁ j$>rky(,N!! C@zu"(.qTF!xaRQ!N'jBWxNAn. BfZ"4ڠcΠ?HX͊`b) !© )tNz! D!aJa2,$ c2Z">Vd $ baDbAL!Rbazff""dx2!Vԋ$D+ ,CA ր t"x ^,BA'I<&4* p!C5.@:$@.`(t$ Hbq@`Z$!⯁Wna Q!Ar!{$A* ((\!>=|N!6!éd`c"%aXBÛEʁ' AzzX(ވ%B'ݏKU,%&jbv T" A!,R!Ao.%C'R ^ f0jrV"`BW.vbcV!>-a, 5!CL!( < @lrgf@,y Ng`JdR!NAWa.XyNgɖC!a1uH YR.+Ib !({g\( Π `T2C~Dy% B@DN t p=4H$rbr7Y檾%Bk Y"`1.bC& 9uQ%$@( ͐ HB9d4CI u`-Cjl<2"rKk%@h^CW8Ah, XLE '!X`c mNa`a D`6b(@b!ĖcBVv 7 U2{.{h?\aާb`3 dA8 JC"h?#`#! AH`V_D׀V(\Ҍ[05.s v9ED[Tn a T%Re 'I )CaDr<< @!>O :W.f&Ahl R!N$)z5|(@ABw2X3&6&\0.6Xb!( bC xEȿVWcT\@T(b|E 6? ͌*aQR?DԪ46;H& 2X8; 2n6C(O%4@ exO`fǺ B _RXR0DoiH@ PC񂋼V!Ba!QW&.@@.(0bI>!1(bC,GI , )5XaJ!v(Ö@!( -!+VKn\1>HW(4^m2p2-8!aa`|ޣK͌!1Gsd/Op'!.7hܐ ր~7*oW`)o3`BD&YPU&& *@:Nd $3-a'TC3(UXA0NvTO !.! U!^GJS{c}TGܵrI hBD&@Y# Jf , [Z|,B2), "NG&*Wr&4~fYfz!8@<T  >.^[h!~agT?!)` a6st` hZH(h5l6*5J""z]r:&Rr(h*V7Rv/ dN FX"7jQ!$]P( VEM(DŽ{iu4J*s0r7C,E?!w BX67"$dX-2:0R= {cd >^y@d5#@gj( hfe56(I޾[N5fS5n0(B<$ hWL"c+}lib/tk ,caQn`k e>f@UJ J\CD\7DA&: G)f&I!n!c-awMb Rn5t!^& :H |>2^ex{mfV 6}3} ~7b4X@2^ Y 8d,&e~]r0[&a2]`CC' BPn_,EI8~mRqn'N!\y`( aBiH'* 8C%C5 >2n3CĹx#ޠ~TL!!v39mbYS!Z@ /cs)4 N)@LQSw^ӫ`i t.bG!` zF`b d` .f$xe/fV5 ؑƒu+R/6kd(H\$JIu|f+&,WpG$X h5&A BlX nP ڼJ!Ke,qA &a@F:cF)y:nXA97T^?Z/9a86a 0`)0yIBuJDD^nceca[l TZn&5W" %98V&E!r@ 2@lH;yi³:FAqh$ؔGhbq3(bE H7%_:ql/]&x8~0pjͳb\qZ+O#~"("[ ׈]LP> ɒE qB;ݼuW! $'Bܲ\EtTaXJ (:hE prS W2rHjՈQjÄKYܗHo <$$p;`I`dWh.DT><2 AuE/`^DM&1ɍ'E+CK .ppWTUGK'kDTaD%P%F!PWİ (EoA!j1 @@ &0y]iEцkTQl dC$"A -`7g*@t 7LBFL3sADqCo`i@KA*$9uԑuL9 Y%@-` Sa Z*()$lIDAt \0[%H/?zӋG=̡7T&.SDA3d Mn9b4 )|'f"P!s0`k wܗƣ Fr/ԏP%T.Δ3Ok.3laY2qY>`F?O 0::U'a ^BJpF/HSR ; 0TbzLnAs 3蒊Á䇌?}: ,N}\D c}AP EDDw ߀\(^"DqNpl(ɡ(aQl qZB9Pg@#:*I`y(BSDBaWFR4=RFz80w#G?e\? ' vI$DH t@0t=\ ";a-.Y ͠aF@EeKFj<΢ dLK o3ē-N0 8d| 1Ȧ,AAq<""؝0aW ΔlI&Q,qAl͆($?ЇjCĀ xT} 00f)O!Hf ,x"ņp- 21@]FชȄBRE(!jD1yC3 !bE Xx;$3&p:"đ͏f)!RZ P-b` $HPm< r` ) }Ïy v!ӞwcA:(5x(.l&hAĽ$d YȆ& V]*@x;~T g*x*+ wH](ǧ(STOT5LuR*"%RR'{NXrxa }xlDVQ^<F Q>cq D!S 54i.1 mPنll ~2P@V4\~ F 3θ/|Q>DU&n>D(h}ja`PL,EDpBFehDN@NP7l4(.!3x/PMk2|,ˈZʉ ,^8ycB@>07,\pڴy `U6~xEOe^!b”Oc|ӌ4/|`D`T҆"g6>U+X"5*#Ϣu |2]΋@aIb+<ӗ"%O# Nސe݀\Uq$[] E8x"f$ޛq7|*N,OjQn D91 DHB1HȁHuoҴbo m'6{s1qfphC!{8y><>AjGr"#OHTJp@-%V0eJ,+&%, ȏN `ٰKX 0d ` Xc 0 . 6 z[1^1b 00g 5J"0hDU@jEr,qwQ 0O!_PB!2)BY`Ta et Ba )OE{} +&t@!. ?2Msxf#o"#b$2PqbYCSp:`P &tpŲ , JbgR4/;j)1  X%B 20 2 l2Va,ނi/lWLr  ,@F0IQP߀ rA'&rPI F0(]z`08F&b 4ĉJVfAEEm|CDm6tQ3(@rNPK$  ?\YP\ 1><&t#  2A K@ C0 sae%@d# UUC7-Pу@xa"6qI0B% 0HDߐ!p !s` 3 BjF!0;a Hz!w Ұu!fgFGAhDwc (E@QJ,A0 $ SBoDo CF<8I˱!bU"ud0 2y@ FBAp:-p8Rb0Q ld~J Pf0THr&r 1)1IAlw]puCpA g` R` a {7 q_VSԢw5X4:7#{q BF$`BsR\0]3iGun,':wG w^UYDS[gj0Pjt)@ u " u0 } `eE1D [?F ƐXqbp nc @Qxm@D) g@fSDPAp_f! MAQ+A5 >jB1HaT}P3A=tbBC>>@oKr> ' VGDu ?+0UT#wX/K#e7b@ ba(#%P]DCP(g2 opc!@3:Y w+& C JjrUUUq΁r@lp q?Bw!%0Y,j7'0D`B#z#fyPzl揉(D JE4J]'(& C1FT + #\A 6G`e8:>zJC<q!0urs PCEq1h4  t`BiEӖ1` (Ĥqf Q8px*e΁Ge-ur-\ r1B渠3( =^ fsG r+H' 溣YPK ZJp&\0(?B{B\h)r3F7^[\q1qGA0P{Pp&I;` HG@1͍ɘ! (p-zqVpYnw0$ː3#Ơ K 8f@p1< |)Aő 275LBqÝ3pnFeYY+Y`o廡ŝE5@t ٽrsf$PEu!A)`RjWm,(h6PPpPP@ii@k= P{H'33M MaAbIDqx3 qF 0!s,)1ހ {K2^ a Y8'7PƠ8];@pƀ7 zj֌ٺQ _I *@08 Oawu` A>TC@lqbD\{LIp1*!(V*Vi7{59, N ܧҐ%sCCp raBMo07935a wA .%V`/P6BoőIZ5-j]pG9BEdAE81MZ?K Lt (2)% Q.cwF`]7"p h U@ ^0]jRXȚ-Pf_T7-Sҳ 1%o@$ 7 "s@s@It "{α)(dP` GQ[(\݅@*)Cjt&sbAB@GD>x0ތΜYR KbLUDVdঃR @dFTР.$Gd9oox\DN*!Zx[|0Q*F!%7:uP:*'fͤJu0E> 0nf >#X~q ^Mm9̘C18dӪOFy9Q}!è#'gz3;"2!c `68#̉59zR.@9o0`8Gbb$C$ `bQH !pbadT@VqmJ3((36($ `O484[>ǥ $5`W~ YKycx ꠅc>a t꣎%g66 x(腃9 2!UZ0x KYO&9$S ,hzCVJ֯x#@Xű. VXAX~|j|nBFf딴TfHYjL&1H# 9ŷM,lVD(ij̰0z9>Dű+`%cStyC$K9Z}cɲ /bG6`ᇣ* `ʂo(*@t5Ox˾0$ k`ّ )q 7jX6 ]"қj牐^ r̐4"03(첩 Ŗ's#=ȡDfT"thSW&(ԅPqp9d;>h8F(& b@@qEo$3z^]Vg`Bf:9eTTq$ Xr @]P0$ d"d4{10kipV`9HX^-` K_&rX`RcS+s*Aat#EpF^D0'**y'$% lÒj5!D9|K(5/ \Yc[^BKQ ܓTaTA ijݰx%$@ ]b Zt>tp!_W'3IMRvK;Qꖦ hCT걍mE l+O~R`Up*0c+^u q7Ɍ #b"Oa,7Ϗw*nм@,S%M$ H1C lBAQPXP, oH$b\:Hᇇ@/#Jfql?Q  / w>d$W=m%AB6hC6Y vYHz&SK@8b$ SHW1hbO51t 5HK.&0/&^-\c~RH,hQ  3c$?# HD8 t bc>8Ax4JSr6 @YЇ#؏򫃸P z9 * T9/)9E1,<b;8H)1WM@2 Qx$1&Ph281( xcy @=Ö2Z*7>p92W/I [-dpy"@Byءدr`h(ؔgeY889B 3XM>XZŠ"DM J.*"2H3x|j1@02=pU<&D ,BRP)E< BȚ,40X3}b3}IL1a!2#<HN(F8Po cbx#uD3؆q4(z%"2  ă!4P5YhS@3 jhIQت?T"p(p&<R`"1P @QEؚ:#x @=@*_~QQ:TB+[XO E42@N1s VQ $x ®b5:OR)T(X+?U h@ "5= T'$1+:qĈX/H&%%$ X!l D)9Tp (4PKP)|Q5 V7#ƃH01p$Ҙj9b-Ѐ4j&ȃZ4 P8n1 C0 "6܄0M. ؆91$ʘUZ- 8p6 2(9 [6L T le(X "B@Rhňn2܆6`p=Ԛ^ y^yAXjx@GP88o7ʍ#!ӐPӤ9[x]c |za)9]\ (@;sً*^0@bo㐺7O0; 1K+W%`5Esb@EkLR Pf0IRb- P;y -ג̡4/~H5* JN:5נ,>F0 U&yg TV , c0WbF60bR0H@"=IR l sxDXc"|W~( S bcZJBgO(kJHvhh6 t0 \ 81 l%g<aBvv8,P jq93h؄'W>3 ر/) }( h:K YҀ_o5Gвae0b^x-P^82`U`sf3>ATLJUxe3;TI̱` K8X∲KFP$>bK*Ѕ% a^r e>6cc"IYp13)UstsctMcb ,  1S0J:nP P%7&uf\il$gX§5f(]0<7 I) 'Ae즟/=\<"*e1V %8_5d6p`2EنFF`"0b.x0 進HT)0z|S +g C040^}7H]nr_pN-8gv(*B24iz%׉Ef.4!#;ԭ ]XB->+#׃`?ϲ[K:OU@Gi$ PU!ɠ"Hcyoy޺iW켃 OFBe `w@Ytq b~D>(/ 0"XiUSjK*ѐ!D6 HgЅ <7㫇'a.AeH0&GR#\( \?$HZ 2j>*R(h70Tz(q"Ŋ/bӷolhAl.kCȕZ c])KW"ua =\DFcY91>%"DA!p"\`dBI\A}8 m GXbkۄ'a3v2JHs.m@9,VY 0z N?#ϊ Lxl$H"F,CC )<93G(+PA[$ E[~{ ;j0^OUFB`PD}Y+Yp<d(C8 v<- & |5Ij`yIWpl`ճD}@ dBҘ{ׇKA?Ce,rB dC2CzJC`oh`I+DaU }KqPQ^lI $R)XjDhK}곉+͚ $]H u!}z%p@  #2xF/U@,0LCdܓ蟒 $ʵ/}pcQp(Y6I[Q04jA?[_XB0iHCep@F`: %4q4C}j&% 2>`@EhZECA> AbXJ hGc-h*1g(F+W T`4@`9 @Il H(Cg Q~ᚵT%+ri#kehR38I=`7 DAi 5^KH0<=Az0=XS B$A;x'@%>K@6)8BtHi2&x,w~:RA@O щŦC P@L.S <d$ mc ڸ5jTA&(%|i X8]F0Tu)L2,(JZ 6P`Rr,! $Th};aE) ($2 q`g( pb8&JRm,e@@aPy; \Qy {4ZQHiwrWVzk(NmxYiK dQ(5^RGQS& y߳2@|qGIwg$&r^*]A}(xԳ^AT* P)!0 enzvIhNyDi~Gz[`d+eI=K[ZuyI7X7Q65]%̕tRYTwuI0|$itHv}/ *R -+VOiQzdk5ň5[$zvyHOQk`0+evP&XuiӅw<`$k]f 8vH↞ux##MRm(Ya @ E6jeɥ\~8NwΤV puitIslRQzP7 i_[(Uc_dQ]{O hr 1 `O7g Ar14 X%>H|\fNhnŀ`ypwZ䉖_&IV i7kp7I %VN_'X7wi~qyhȴiK=7 T0"^߰H` HPQ0 Y. "@~0gۙL}EIY  Ti:)t'yVz@WnR6tv{UeIx M3p lЦ|u ]jwIII`P ! v u-r'1 i`")$@:*:q.i^rP%ّ2P3yu/MChnHzL({;yN`_Q؉!UiGp;P  %4y`ƀyHtVhӤ=ǁbwYUpl"7f  J,ɩju mURwUf'N-9~dȀLTvI~`vFG|İb'R7HLc`@ce%g6YQiI$ e*JRՓ~bPz# T!x?3ED*bJPX+H44Ձ&:5Mv[LG(GRq#wæ%a w(P JTU|x".@,P̩x/p%v.%] _Vvee}VOI;ڻ`TvpĖ|DQڀ \ <+vs*AwvzU2' Wi:ˣ(F/q*Z!BEl.%"ClW8j|М /r > ' n)n[֥Mpv ̡soJavK << o0c\y~Pv_WN7umU*_1(SusYisH YG !C` -~82Lp.&l&1/585 *p.0 QGm9ʣLxDw pM7?WVٛyQz$>MJllIDnE^VV`7@d PonOF[6,zG {IsYZ`R֕C4hPQhQ9[Ql~'(hHg6' 4Sc͗H+D| -92#1'1:C"r FQ7{e$_[XV(`ǧ}J~䗷㖎8k\ PNBM7T a"B&QXV:M,k J dӹbE"1gMB)`&xp3*|6TT)p}P1 HAe{og*Y@PA .dC 0 @$2Ȉ:v Ԧ9%hcHAh `,H90`HP pfB<ʋ(Px#,1c6)nJ5$ׂ("-hFQ0a>J&: a9H(Š b&8 @$O8 0+W' <1b)t,tsmKsѥO^uٵo5 Gq'S:g.]%¶(ƨA+I O:  VZ7#tdL"F"G d  :/(q8`5#f@:nx CDuQH#tRJ!:@ RNB̃(lZ!& i$m3魐\:bp* ?z iтI  c0~#,((!;$ЧsT g60V肅 d.1;,SF3D&!: K &7 Mc O 5hw 8Q>i';yfkfN1  "r $X)%R: P b&;~x*sq֟2HBH F" Jmp2FpJݎ*;-H^0&V>9ט: K3 㲼.Zh a1 ŠG6%O dm 8>hgwyS&AwƋ޼ Xɔ,hGFW.ױ{ji^I 1\~s*747D+Z.ݴDZ;)IiߐC[vET# 䓓:`(V\"翂<}(H29\ B{(tEL%A B Kd!vW,ȢxR&&U tpvdyccNq!#üjIE+XQ$KJ6}'}Lˮ߽kyJBYZ✲jZptK$*arR]7( В$u'zIܥ+ PaC1 :jRҹ .m+ gq[MC),wDc\GZ%`(f#.xo rq1NDM$ʰ$=ĞD30*܃$iR$, ﵝ'D+YXĝb i)CMjYV¸YلqɩT\rW2P%ga C{279Y$H "M!?q9|c:d|V%֐\:P1J nd؇0k 4BAcʐ`$K@,|@ R51:0Q!;CDŽ F^c8|x&v#a 1H "+b 膀=7@[._mvHH0ٶ;LyPXH-7y I`g7 ˹A "U)dnZv]´"260_ Xtq#\Rdvc NHtcj"e:+Y1$J70h$pAT}pC$ ~nl]tƒtk!|{ SȞX}4A0i!I\+4I(7^cDTSlmE%N,b ڸY[?D^L|AybTr?_"c7Z+SI4|/ J Xu`0SDlUc8X;l/@`P$y@/zZ; @b;' ,9""*ͪȋ#8 < -@$z"L=0̑Z5CD貇2qD6=j0-,=~88D* iيs0#9 9 BHB! ǐ9##|!H *5cu3xڔ?I`5)Ăp0@6LZy@T@8.J:`@^¢ `"YC 18X$="Z!Z- ԉ93يX3t^:@xEOD<1+0lb: RYȇyĄ@Z0 <@Ƀ#]3\8@EJ81/BR23ʧٜBB8 B(9Xk\ ᕬӚ<5.T pp 0^6Z"ِ*9H j.`k9`:(|OPKD`ҌuPHXiX.`^PLP5ЅWC:BX دJO4[ȁY{QЁLJ#эI9#:b >,P>K0>XLq05XtNdN`+ӄX.I* #_0czdH|THD8#;{OQ-m[9B($q; A-.)sHҐ%ԕKuGI -1=.|< #i 3"sDKQ91)i-#ؠ98#&eX#qVKHVȜg8K4ϐVWi\K !x5DLʏD lQCp0نH]YJp|(28 g 1VPOrNjڱ:<JP1* *5ڬbЋ }+.t %: 9;hX:+ؔ (Q D:R9hO9 9x|9 V@HS*H΅陞@$8؃0]%I 4:Db@z\#d L#mYM؄"30 D{0 *dAP ^3T7!U-`K\h`cT؎қ=U(Ii8q(m0E CDJI =#VH'-ki؁ef&ke![a 6Y|O bpɶ0 lzo݅H؂?TUD@وXu0cShNhA@(gף`t!TY\Ez S bT@=Ꮥ! \hqXт^(^̺%`e'%+;y`dXiy⥿3'm% ai#j:M[h aYhp~x X":?{)L)r qH`7[ 7 Ț(~@짌u`'28;qcs54uo)=DZ->xK %dٕ =$HY# jyƨS!  j % Q^I85d`|!bp:##:9;:(8 6w(l$GD  &nCɍ5>KYq,!2ٵ|qqv]vLa@ $Xe]!ī~APBȳ9!ФA7=#)꭪wKTBڳlRӴ%!' %Ho@r`<l *|ᥕ[ `СiM9<@`9ە~([:W  Q0 h;\p0G15`gяLD]g8@`~qp/ho Y L|*0qO59hzΉ l%gΥذiUaxsՀV9QG:%9\ L( 8JແaV+81zF"Yˆ.~}鰐$H pC J8!ZxG0І}"3e,`hs@R@\K< _EmhS@S=Zhiq.PV8RcUrqR@ph%׍K/YƊ2 T6 DeÝ@scd2If\a5!%XOopJU`0\P!/F sI @?a!8ە(K"PRH).@6, ǁJ=sBEeGJ8"{.{QB]+Rmb'6KfU4@UuF^>Y mztZ(Yv<&1\B|7%0(9eU"0RN97&uM23ei@, `@.Ҟ "((m`".@7IoN蠃#  1 '1u5luwFvl, 8;08;$$-E7"Y[Q%.{:ꩫ:GBAE iAA.VOR&P,$Q5P`\_V'Z,A Zhecw/\È@ d_06Kp|Yevsi1}1NH- 8v.!K"k&5"`.q0)\\933x|@d1)Wi@Н$XH*`=ɖ1#+k!#HV$⮍n|#X}G&&DžDAa(L|Bv=/MitrT`R`2/&J0X%.8ZBp$0a+b h")gtb  , h8A(Sh3[^Bȅ5t,<5OQy0 `~B0zh ܰ;@3eta2t}.rQro7dkr,a,qIEJdt+1C*ґ$Ep%Hy% )61d\@vLD)cV9=-{Y Yn`HRj1YBRvR fb?'$hW@e`h0c<-fH0]P8fbHuD)J #'r`Mas)0N!Z1X81|{ ,9DE r{~z0@IG夵f Y}rAܚnA(ģH_*W@a@ A>kd\,%HBS}G☫,+de9hZ дuDĠ*[ K45S9)/δ5IP`' $0ʐv,F{ј$pJ@ 9\"$B91NPebgOq 0 `93Tg?b#pʶo@(Q Fd ,CyFrrz $Ѓ0@x+Q:uA n`xϰM,DLiV d "Avr,OU0 P'2cn?@C?f"@K"B,1U Xqn+c!F <0HhN-DLepnʴp>fh PGjmq r7F>H%0}#0Lz"A-F t:4jp} (5.v c?8iAr7l5rd*xYciĥK\j"H2}`ƃfJĎ1H&H{ -x۸bvȖ`pq`ihF맠q Hcpqor4XcE ND<~"zbIm rT F0`o0<|86\YC>3kȀyT}PC@PQN_JHT~x@AQ rID!\D|p  fJ-#BA L`(Ugc[% tV-_DE1^(R.ETh 0tDXr̃ #$*0U%L8L\eh@Mǡj@8<`$ .x` XabH\xyR/C ӕqB)$7X_"\uA!< B!IUC <N%s D4@$@ zЂDTA|A n@`iHCD;#<5D&T ƑIɻ pƻ1tL!9Gh(^1]  Dahƽi$ ! *^VƽumG5_U"R}|dA+@.܀7%t@\c83b$(b hߕ)0@S,Z9o(5# w\F8AE  YTN}8JuA\}t@ܣE@+ C!< H;.Q<&j5 JQ/)t,Jc`C"1R3HT0LS|t. @8*͉LLbd_\B')2P]L5<- .$A xCC7x7dbcHVuLm $1\Apߗ%8'_b1@ \A.3A $D~f@hbvD4ʢQ8@s  ĿmGAL DTB LFDAFjn)D lA ؑ\NBi1BM  i5$A50d""bW(ReY(ִATMJuΉu@d gtIIjAbx3 2j݃YFd䖣b)"#$&27^d1A]l9<}%q\iY/dA 9̃]Z3)LEFA~B|-~I t@9DpDP!v.9@|) ! Tp)"L|`?05680C2F,H^tb.bhǔ6&GL0iv*mĀaB[@͌I,Mx*)(C{v a1((YhUph-t4@h i.CH7@r| A TS.nh;2&j, |BEIfj ~@~<bC٬rV1" τO[`g^@7^5DXLӚDxE^tY!@ȁΎ4peNRTEQ[@"i_+.2q8'et*e*^A2 w(0ea7d@D~ i,fE (FfA&z,1y/@8,AhB0ŕ"(P)b?6.h(*Fgb(M4IV$*.   bX@/\O2,MprD/v)5A.z')`Tûe/H. ʲuf*oj/.l,3Xd!VBYpP?'pY\L<|$V*h;_\ 0" Lx @+h4tAPqeK{Q-eo3JA䃯T4nW~i@ vA ﺘC#`TYbFLwdVpCIDIjhG~B(ʢhm(K:nM(M((w.$@74cLdgv[v(`QhHa0IA vW_ bS^5a<`0Չ; OUQD`M`k5N-,:Ab\ 0 KN$Y* 'xtw:@祊N)(dj%,hӦ=s8A 0u[*~R?hRV`C<+d(CV)8f ۬([SG 0fnmsE(|ptJI@ N #<9E,zc?l]@K= ]mݺ YA @A&DlID4J 1(. O [YzLX8XNtbQ`-HRh*V,;A4S6QiF8 P8l$.Jj @$ÕZ0†Ibg PĴhߪIbElN sJL) ;ԩb$ȅ9sˋ3ʅŰxHQ+(PZ~[ 6l a .wp!"%}@V?[҆W~{v۹w|xsH|ܶ Ԥi5Mo]؜Rrp`V GVZ4p g(l9,C9dK@p6PȘ 78H%\bUbѨ-\ &TJT$bIh!I2Ze@DaB( 4*XB){e@ᧅByY0AID/bV1KSa01a\r&̈́_u |0HWxT~nEJj*` / V;`lm# lK:v}x坷> M`1{S$bDF UTQIc#`;V2d' `9ZIC9@m$!bqAQ%+,")+i.yK_2}\6l:"VW*F\HeAHKoD: U0%yE%NH 6*tĄ?p5 SB$1LN"Ҡu$'.b14э؍kBb g, ?7bqhV0L`H&P U ܔ0@ti&0wPk'r;w)K2at'RIi C `GI+L>}SG}{WM OI&݃ay Q) QI Kad7Rps9G`v`2AD z~**F"zdC P? fEdq'!-Lx Y# ;zH&mIEE27'HB7|  UQc 1$L [o`.ꠅUS# P]a,S(pXG@!i. YvGrsca(v<\t2,k ;˒ULVec̖ /: ɉ)^Rjky^$&#D[e'K27q+V,!.Ie"l[VA WCJ BlGD-INbɰ-A1I#NRE4:,m X,(Ƃ:!( "F5q ܄ ap#p$${BK #.wR,'p*A"r]@. :>t&XxUUMZ5 ق}VN@X^ k6c A 4_v_*P}am*AV DLFbAĹeNPeɶη eLQ]`il!R0Hb`( ЍOnm,T#Ž gb"di iD٨$if6o!k ^*'!NOB zo0K+Zp+ a c./TTlA aB5n$v"JJB@g5Pn^ D0K"}C f$$MJHeMAޢAmC1 &G(1T\EN2 N *bo5&ZC.,`GZE $G81= GV`b 2 pjaz@BΔ7:ެ$lk;6@ήG}20v##TA La.QDQ|S^dA" z@ǶEREJ$&0 >! ZX -T.,(b=k&$.Jj0% fa^~a~Ƈ FJxa@l`4;DE!e!d)I m o 0, -. -trHC`1X'5@lWVFJ4O N$@,7S Ex.:LK:!3<~} ς 6a}@f6eIbأp 0<>4C`LEN Av$#!F `="`!A!c$P$HRGF sJ֩! @DdFF5ETFԦr*ZZ lmHv "v Hr$X,pGgXBJg(I*L`meA\Bb r!]^)rHeFQ'6WW0@5L FabwLCv~xJK V7&sUU* 67zN1,OCwr#ė|Tf~՗O~ KBόizA47(J]>f"`#UN#1JBdA77Z+nT2@aA%Bk\Np9b 3A$DB:De2FRIU-a$ $œ%%y4`8g&JXbFhva$* i6bPw.ZgsqvNUi ! >PbR~m>2OEڒUE|x7vH8"G"+ +#HS tI:7*XACJ!XA vSJ D Bs`PYӎ[pK].fTJhDlael[|REz/ ġU{ϊPr%Jk&ԉh=K!"F#6oH@L  `#5x E!su}@>y3vՐ_ `cj9B5ĥ`|JZ~Z ac98Ly<PT*Ͳ–k$|mY`jA`@1[VRKBc*sL]E']`ڡyl%NEL$E6<CBK aPDpkd{2uDDblŠC ]e&n`HI5APjmi{nTx xo ʳBԼ[D@UTdCe3@V\%0 vXA/^C=J$7*PN1z 3J[ !ʽC@2a#ad*S6` 9S,TziWCf+v^t 45u " JbH΍i x p6=a*-zVcKSA:skdb99)7.6BvClls>2 ߀YCĊx(s-7vmeᖞ`<`f1أNAT)0PL v}aD2-;kxh9^+L-Ha >eAѴU|sY(w8iaxWcN$""$>b ^*W ;Vckn H59~އ1>V:#e. u ӑdTÄTq9wlң;`Æ ,RVg~c@ `y#DLReR94 ds@Krd~;2璜KlY$ЖKVV`ΩJ6%>M7%,IBUO 4wP\ dj޸Fz@3uPW`@Tuo|N0ar:{W;0F&|9@.Va5  @>5Ǽ={6/چ {Ư CAhb1Dc!RP LIM .an!F`"H"TLn%c28"Jemy)~4|pIiAc"~ha^ ](<?@.)MaRsXRA2 j߬@9 T\ēQ{6ՊwHVUqSPBa-a \%Sj)(o3+]a1 6%(.c\f$7uƠL]T]&Xmr qwȝ/M9t҉J@%@ "+ŠCؑ'C ݑ @\lAd/@!:Ȭr$ 9k dIksB-X>55gM)X\Yr . E>ehJ(=2*(̉zت/7%|M sduK9)0r`![\Տ2Q8^75=V\OaV8UY-N*[%Ui \w 37vF@Ā3Kh `XEHFF`L@L9ՕR+|F1oho3)Н{]p/{)P&a&P# y lGA*}$8{H&c@Ђ*Pm:H$>E5Y‚D %B S$TAby$bc&  P&(Q6`ZM6A#i(@@V/L"{C5iyDB2HAF 7_1@2a Y. MdqK"*NEe<}W)h ,A'QOFu +fReQFVDȁ0u^ lO}0ƙbb p~ d@>qe&Irc/Ԥiw(׼5/g]Ʌy':չTI(\S';Wd<@(P ˳[B @ k$'P g$ RfVT3H1 ] bMR)"SLD⢁!45Fi5u8ĭMAM Q 2G# FL 鹠)0o_J bDז(Z%l[ZV3(?2T^ו֌eWVgK:-;pTIu0ݥ2քS Mb+9W8:gg_+-XFGx:9\KzuC1|b "pFDz9^N ֥da0p01a1# 2Dqy @R D؇@7GS*Ī5G @*`䡚f_S m~ ` P` *F'`p qQq@ZyT< SDݳu"C4@.'bP 9Q2/'5k/CtB06 ,0u5QqdAK& VtVd_WPǠvPdDhOFTnX,Uo)!e w_ #}4DWY#Re4NhPNV4z!<"f$ۀiM",_S IyB@iC5jpz6ra  =Ns[6MD1*:eu(R8.\A98 VhX=(6nE)(4'@)S0p2JP0pou}/p$i``_$&pY_3\ h<v Bb.WP( ^ sdQ) I9 0 u`pECW0Fca"5dA5dRd{Q `;R[N4, peN*q   #FST( ЏE"5cZfK"aPZ*@9B Gg !2 p\<ݵ;97(< SL 0 }؋]l:;8ˉ'x0"él8qR=-q z,݊>lN9?<0 Ȱ |k* Q\8/ uPu0 "`&c2&4 2 ΝG؁54U E@݇BSC))+-"kPm`=id QEURp eBVfk%"nvc"FUug.j4h=(RQSuK$d7WS@uTÃ4Lm!3*%B " b= 2U@ 0[<0s4y)ʹ:#t?x=a ^ {殐G|mT:F]t>PQs9A'n+9Ia |<8)ncM\}Fp7-`"ۃ 1-ހ 1`,o`FE !钠ơb ' @JqހFGg3 7䍰@+5wy#cl!{QGA5Q1!d!MmT4 !`%Z!f2,w|7nwQl/T{uR򡛖]?b4T=Q5{p$E5:%" ,0I4H "եwjE3DФY @ j @ p@gP,s([ZJAa4Pe ]X 0}Unj#9** wo};;){´<`Y`g HFWw<{#NS K '0 bp GP r$rǺ y,t!Q%B[lV2d1j`1I)3 9!Ei > Ch?!^YdpWUV!j5q#T @}DPB !-A`MS) lp 7M6lx{`h*IA/<] 10ֽ{TP1М:|pBS'N\•γD҅Y:&|F܍7Z9 Bɹw#Z}sȷK{9<#0 cWZ;Re-6Gܙ%|,Fhٲ?^<{7χmkc /2ȭ |J$bx<;GN1J fNxv⍷r1*Wn#dh!O31N!PS_VN@&@a Pqϛg$@eXbŁ`3 1pp` n(% IoAcʆР@*PHC@  U08h0A8 JI8'Dcb"N@U{w}G#@0cB *Gu(tIQj@@ cL@a0e HzyDWE+%\+ZƪcD K^ x.o.4V "#d+cSRx_ .-F0\2|d!s 6s8^l9 54\r#o #z5@A|k'pr<1 cE [㋁`ȒAPh51BYPG@:HutBDQJ̈ 7`83 ۄ>gTMd (A4 DA$O)` AY|I@8{l%OzDxK6 xKybbz6%p&`1|"qAp*]%J&`Б#? `RPe b? -J:|]rp [z!9\x@ű-y3ILgGā Q1 yi34j[8}&b"_s'*5]0BiҊ7 vꈝ% nBT)2h[&#IIV928`>8?YrP؞JW! =v98F,P#}h% "B2iDRFсLfTpS&[dםGW8ȗ* J'1D>'5XH4A6umU5bo5$ !H\1N$*(jr}a>&* VJ N!!+1r0f/rNoayK0Bb7P2f#\ykZ/`K_XooT8Ʒp)~q2|nP,pPaFP-nVߠb\xhΈ$F bWlP&9dta[0`[J8A U=\pi!@71\Fcppb"0a"F"F"H4E xN7Z,){\]PQX@Ċ2ջ%x=va* "H!dd| ´R?Xʃ@B'@BFi @ E+,kxG?NlKU^/Ld1[\/aF+Y R5[SpxټƉe.A|[`TfydPбfP^a.xI #!r@ 1&!G-C3y!xՅB{cŇtD8F#D <I;:{0␠#Zbx0%(b+ؤ3-_k8+mJ-rH{b 6ES6 jVCZzh .QyLg 7w}9 p3(G*H1$08k LG8AH1hy:Dd?7Hy&!v6@LMvBjr(IX5!P1'˺QSS+88 +cKx 03 4o8 ˻:#[8 `LKӸ>ŀ&DO4HOԣYhmY;dIPFPdMbC2>SZ|02 x^ܜY>S5-42d`9(;!|8i}yS) 9fB|#PIb~"*i}\W"lȽZ*s:$N|q96"lpEm=8TR1 dx6тHHFrBPu6(SP.po4; K31*%,n1+<#͈<`RH:#0`Á%Bʘp #tA ԡ.{ ư4Ԉ44bļ2:pxP ˆIaG*dF F5SjSpZզUxxd//P/PQ1Z3|:?@ *I kMXɞL ЄȌ{C30Ι([ QxȊ|8W8d(׃(Xx~m\&}@r$#DOp g{8u^`䱁́.) @3́ Eư?¼B0qRO(`0:!D!S TIS#P@*2-Y}+Ę02L?:2WhXI<OxyΩ˚yU_5h3YEZ F[=d[qc]tFg0mRyT v킫# "s; Uݑ `JȔ5a L ."h pXFHZ@UDP)\} X8X>_FL"Ed&kT}؄ _6။\ )c"YUNoR*@M|+,3˳;-èo =UZV>0+J4IA@C>SI#I{0[ :\=9:hK6EĽH$o8F*؝EDU)9V=, ZBP 8gI8 I^jyE̻!PӁ=LvrX8LNԸ}_H+ߜXsh 8s@_{e5lU*Xƈ*@EQф^a00ih:=Is%VBSU07qoZ3K`0K^T kS`:Ĭ˳#hdb=S >38,9D@Tã b={ j~R@8 @ΰ ɐ9]\ ``~&$[R+NKFVjpD9C6AK%Á*38ei؁F"B,)%]R"xd۷IKyYװ  4J9x#0[2:7XY$OS&\TҪ:f(?)cxIra>Ȃ^E%B֚B޽]"7H,N|y+&zdMJf,`36؆m HlDX Oa':@X : 845J`YWb[X%B23CqAAu9` slܗ0Y.ٷ"(V\ZdX 4 D .΃b`L#G\*@6l 8g%[G.1x H 4'KM1 oFl^:RCljT @҆M:)sLy5ȏR̯F:onPV s Oo %dnK)aĔ+'FXE.Gٙ\bĸ"zhNr Oo} 3/!('b4/.LPhj(i!TS414Sx6)~=ӏ Y&>t7L 2!8m\GHP^Tpbfh}_177żaS%a/K*7RH* Ϙ G"WJi'T`vmB'iS\4Ix3?pI P` @*ZLC(-0AUlXÔC*qu-"e'Y@ <1MJ\M`dSL6ĆTEpTF$;0;,O#=9AJR1Ls|0r\%G+pYȕ%l FKK$Ȉ0C7 qQZfILgFL)$b/@B7r p2гr2u1 IPBI7&qv{X{GLMrhM%+59A?@b`2c+|}s !Ne|D>!9udxLaxu4KH7|{IIW |NLh 0ֈ&0lN92N"&Sb :9|@BHVg( p BG`H64,O?E)VA!Xׄ@:]bDjAWɮ20%CFB>i U.XD0UL'8N7p[ @Wְo! 2QԆd4r1Xh\!W0cч>.a"[R`#D]@ f/k,Sii!w($)=K;xVX@@X,Ep g f*TH$JJr@(euw2›x`$.=4IgȤ(snICYVgG -*!rs2%x:о3AB+qMewo81$d$"]u: $HQ @^!NVD'ˉHa:L)ʰuHA8Ї:$b5@V˥a (NIJC $ѕ R>]!6Z`o$81q&ЊumϨ~B\r.n >H _;H0Ba! YfHD!"!i`$Bldt,HM3É7.q@ ]H i$X`IDgU8y9$V@̳[h2 Lzx$}TB W&0I۠JXF72.1dx39D"JO0A&}vɳH:czAoK2D88,$5 ! R5=Mx^b#pTs@P8O& I0ɠ~fZX#1$" K?NZ+&`3 DKH!ʕCzeP$) JtVRI%?#XU؊~DFAY|߰%'x(8 @X+b+D16cLs4bBz1 2LR*T'0TƠGr랁!2A Lͩl߶P G"@!DBY!YpU@)PoL ,fN1w*#0 JjL~ wV]0||V;F8ƍrKBNn%9x1u(F&iI9ɉ`a0b$ *LqPS@g{l&X)Cumz ) TbHIHP͟g=U2qx@`%PO94%zȒ *D$ZnWH@)É1)NZr@L#lHĂ%1I c%4W0$c5 Xday1Z{bf/c1HA&>H3_\<<჆6M"\*贁ˠҟp%L"\BSHL$܅WyMiS{įy=+VUGX@η]œɄ\y۸]SȄ.:\yt ƐN+W\-0xDɄ*(H,-O1DdAUDTQ1SUEDXXPE-LE UbH iٲH$S8ŗU4NҴTXXTKĝL]UlPĝh^A<[]7 1| xT8@ c<"`3^ZnqFCjFd%L}Lr xW, \B-.I@"0 CWP6ĘUl> q!","]IȂ,ǥ%׌THhVzDK 9hTd @MޤՁz0 `uWLdׅ ť. -I) I|UGcu`9WV u+ ΟD"pF/$[%B79ׅu 8::L;qpO,F CIJIVTYAȁJH@H 0X\ř14\$ϗ!ON"VP K0܄̄TMIL H.(Xi33BLXeNn2 =3da66|UdLXl,I9PP+3 Cr4+܂ +$TIB%VzKEiX@)1 8A ⌲[zp|p Jٌ$ːFބhNLH|ͅIRjI Ƶ3 Aӂ%$ȉEoYXi + eVj @_H* @pR (A#`9H#0;\] UOx Iȡ ʈUT ٧J"y `U fJBHAHuI]6m[Elf(D zOH%XMy3e\ԁ7C/`y(+1((Ϡ ޽yrB)pH .< l^6dxc9kf@nd$tr h-.auĂ=D,P(fC%\GL6@qL33|CslLo &9DL’A. "$<,gf*PMM+'NE9OGT eȯaq鞦14T4lмThˍXXRLIIv /uT'5?tD'8aD P-ETrkZDkLYIDTٴVa0OQ 7q:F Y*wh+F\:/8/D r*OtË1!7UMY67.z]&…1*H2^|E/9/?KF~/!}ІfeA 5s#TL4La=)܃;R T, G GoeIhNa&j B L`^J[Hԣ,x|Y)X#FժI\UTD|z T`\ZTN}%͕W`u8t5)i[GBx$9o*2y$ 2T t#Nǂ2*L`?5rPm[(F GVհjЪkp&*f&A=Sԇ0ʞf J=9^X؂@(`5@H,H a2ŹiSOFTȒ^WcV?@؍r @ hكd9`[Њ)t-` $| ,"EɰDM5Y`MP 2u \rͨ]E3(@,e9(Iplrsl #̱|rZdrijZq#;K.Bf@.#RCn[l= U̐j9iv&9ƖVZ(x,>'"V# oyF:nxrJ\gxc 7p!s5e1|raa0a|+rfo/Z狃 AhSS2Kh젏&́h\mBः\ڄ6,X~8'8 V4 !PHrM؃nQ DBSNQ!ab؅*Hݥf{! (&`+_bk6"X0ؒ+:Khc 8H9 Pшв;6 `h<r顋A1f^4"D"nj;шTYjDRI6BD `h G9sA u1N R: \ؘc;Gۋ;HAKOocKknj#z6#j!`;#oˮW.I<@9.^=DF9D1 w˭9E0$$r,Ϗ"?yC0x@ Z ȼ|6q4376zArpQG}TE|2E <(`HHB0/L## -YppVuf'#yugQiB _BbBh0#pAtFqU9n+aa֐WͰȔpdq*FvkPaÕDl)]@`8ދCrcyLBA G^U2Wq{D30rp &!'7RF`E6ybM6 #)nq1dq22 SA1[.#cMNCw@Hc h)Q!m=8B]4Χq0CoG8!@؄%4I,~3 BΑH _􌑤$ ŸA8,dx1ꐊỵO/c2E /yW,bS0 A*NT2ژ AXx!d1H2r;cFT\ "¦@#@4Ȅb 7JFX`&!uif|(PeX>V"O4#[05o`/PF|v#E`5 %vbl16KLJV, 0hCmظ]$m)1@%XD$0Lel1 W@C-$; ZP)%$8#b@JP1ŧ(q`\ *vaq&B ԝ͍DnkR3ċʃ}; 0z,pb v;%1 KOh+  zAqbLX'67Ձ3i&}a? ȁ"Sg }3!& LYXZA$ F [h!^ [lUa%T4A* HSdu %12E:K#pW5#EBt[)Le}lmcZb Geqin\@HMQu"ut-4"&B( U o):(ڰH^2}!#Ԁ#0%.L'!2D ۚ6p" ! ! cap`fAU@tgH)^(Q@!]x@AiiH6\A !\N#  AEZ=܉e d<^,rPg?nk` !?$rDgJcԪ/v%>=ފ<..,20m`%-x 'Pk#, #@-@5b-j-2PR CX #"4زF,O2*@)!FiXe%dN 8O)# A 0bX!X r؃:B*D Cf d:鶌`&0m!ЮlcpjdBNtNrHCE\q.AbBN5N=.r.Rb$@wQ(e祒ANB1M@JA ehF0,A`m !TAj4Tf2BO1hƬBvVGZUr#b@%!)4!NtH`"TC.ma  !aXr') B r(b:Q:ŒM_`CRɘ>apo$#fȠXTin0#CB's"Ӆ.5aV@0#3aP B& 32jBf,if@k(m cY xHiN)AG9w5׮/S=ƪDh?dvM DA NrĝFBc!UAU#nuZHW"y R@p ! b T,Y#,*\r#Or fBP -+@QdݢQ#_A+?``eo p- mg(! )Y# ! !4jh\gb8 *SԱt[=;CttRaȠ}ޠA~!{MHaXpO`Q`8@b,@"-N!rږUR#*TI5#`! |¯ @ A :!(W!w#J t 8".s`XsۅBV$=O '!&Rs6)%BaaSTf2!ghElh%JU7$W2EB{a/<)Nh!|G!ԘE K $\2A H-EP$\=o4OpLDroC/JlP%`0 q)dImu鸏tCBs;@]tqRPI}pAfAQN`jRAQĠ.[D`AˆD,P abѐ%!RX>C&xHvEf(# )BKa5PM#p~@4\&d@~JBa{# 򔶝BbroC#d#v .٨С bZ b -.d7lT.q.=WfbHԸɑ7bb4@b)|Qh!+6zVαDSkk@kFqմ # !\r@ t A-H=Iwd'=!6vF8u^>ܣ (u@؝H{+Ĥ'dnhELNE0tf=:s$ Au6˄));2'飜?',`1 xX X/{`a R?7QPC fPڔFm`n`8!k;n ByTEF" 6}#' Ұ nA ꇘ4ңe+A)T=Q/r5s! 2"v)|8!N9B 3ڗ*a \vfd $K2f W p )n3c=ėɓ(S8oF^\7Rpu82⌣ )PE-[d Mj K+a0([Glͱu0lt[92G9fX&#1"PN_ALوVP%)=cN#qE_ BKt_1;@yj lkuޛu4O{x5, gNt`  .s$3O9#P@8!3`%@]4"R~T)u)!G]4챇5֬$ed DTpIC\"ZQ@ %Qa$d@cɐ8-EFB3xY-AQ^P 䠄j$tJIP$DM$m<Q ! uP@lCPFmts>P+kIcd=&` n) Τ ]wJHIm3\ßAKH$ PpUK $TB0 bXRZOM60j`FMY GGZ֖@lWy]SŵZ f`;!k}7<7Q"5,@o]Lf'^Y}Ŵ}ЗL'%! C%|! V(bxR.'f }1S"2C@A@6 lIAM&Xc D&0CI4 oP@`0\/:@A@ȍj!@0D9IBB(JUBi*%xN G'nVb*j)HjU[3R>4@RT"x2@. y (]!p,pQ" j ƞE-Ac bY` h1d9dIeҗ:Ld%mK]0@ dn3DG 7>! aEtx0r \Z00A31[xro$JO~ 6' r` 9'l3& E \"!d<JD|=b1>B5X"+R*I1^Lq@'/r AHp3d+iATV}]A$T M8!ёaBPڋa3GCfrS*%tB'0%H6( #z @"dc@ &7~( UXP"U;9 N :‰301E80 ]|[-(9@  HBy c f Z˜!ots%/Ym26:q51(tKtE5a֨Jl}K_6Ɨ[訒,_X@E1q7%ƾ##=]0=Y7fAOi9\ hPW Uœ#*xL0s{ITE|A|c#n Ƞ : @M`E* L$@2NkyX ,ċI< @0JJ 1L`(= q_ @t $AI)wE! Bqd D0hmJB%D*0Q/`J" NiLq!X]#QnP-\?$S~z=@"S &B'3 ][-<@Sp|@C%xgk#j>#XBgȽ%֊^ rQVVG{ 2KKxsA uM]p[[-޵H|3M0rC1'7/ ^ } H, (#3 0$jY# ؇8$R[|uH h'9#UmAIO1?i0Lw!81G{5ȕRCC2 0` 7=b?R 0#63)p Ard1%[HTF3QQ'Q G|ti^A]h@1]604T5 Z >G EQJt0x` Fp`g `cu 0 Zoup ^0laLwTPv1p3wBNwwwp5=eO@T090p ; k$Vy+bE+Pg}z+A A HX>l TgpTV%h4>8T 6()5)7!@@5Yw|wxHEmD&KlyvC hvg@% 0QW0D3 T0YRCd.2"Q@'#xp "2 X3h%j8:33n$ 1GisA}KxI!uHa$k[as`E!&ZnȅtQ"Fb bz`P}Pt@Z t~Kp]g P7&C 0 qw Z `03GOGߠ)K) ?9E! 6"π*:c >EF #ep Sd׌Ufe$CI&A"h {"+&>"С o*׍+9@3A'O A/}'A/fS(RRG q\3xAw3T}yF+aA>(z<8erkUVVf BH(0kfN@~-Uƀ@m0^'@ RF QlT"vn],4ܕIUqq}m!߰]zK1@A]s^z!]%Ko,ח'0dFAp1ϐ .svZC'IP Kpac jaY ޠ U8!9 `4aU)8 RB!!S`C5Dm VPpO3>2 iIWk–{G[V>'j0O# 6fg!pQM hpq `|ǠP` Ypv p(~D@b Xؑ(a18YPPj+1Y| ,vX61*43 ѧ :} +$(Tj2D @EFQ^,p=9@>p e}tQ4;Joz\^DG"Cq}Gupv-IkQR[v _#VbR#t;yuB[fWM򖾣ed J&)(C t$l'7'k\@P))Ʋ 'P ד w@W@PKW)4D-2P"+VQ)E#K7Aol.,|l@ сvX,'A jBkְ%-{4\s4q0Mu^a  y. t a ΍ifZC'P [ %"QCY0`7@K)< < a+\,!"0 2X#*2` ɟ_ FM@%u=9pfN xl{#<'v3 $f ZjUj*&+${dkC p%!{PPE2('`L~KUU VWE U@@׺ QY_Ia0&;dRw 1$K1GQ6n U0GP tkoaؿ3F@GGW^44#4qAۻ0 d4ұ`7\pҀlv`1%3YY!ӡsuL=a vSC`uw02 !2!*HmZ0&A#FOp%'r#p+h5z ;V>2XzPP1s])8Odz+"BtP`1@jbGIAS,RK2Q q#1D9AI+Jk0Q)>fGYRRhr ߲̉ !(0qF0A$-^R((Tl 'ã,="R) '@x ^%̴@}R}718 Ԡ0/UސׂM3Т{o4BhP'HyIalP "<`q|q4rhDmmv}Ic2AVnкI@ z PY`"մ6AU>7Lm!-o` $5VXa'.\w20hc:0 ] 8Z( @"Vc`lf)ZD+]Ȑ8zTo&"n;MY|r$/sE&0n@6xȑrm  l :%T8SN&Uх+=rѩ!& x[ Lc}cD*8+wV܇ u5mík긦jHHM<Ԥ Fʗj z'3V OiBV I p93L "tj,Y~5r$MZ+`'m}3b$y9`}?_h?#z:K فB`@I Bг H/owqF pO#t\C% j\L" >b`1[>˱ >) 78#>Op0(%>Vx(UAdVar e/8tC% pLea@YjEK(1u`بѰ"Є)q#[pt Tj臃"9rH66vdBn(6$t ޘjj{Ll pزp8԰[婞Hí6(xH$i+6RxlzlhJ6ؽ ~=kg'LE֨#:焇hl8xFy| feQ6rMX yh|X OBi9N&$\;z@S!l=׌1oP&FP~D`:D/q٘q! [SqXIlOB@!X l .rB6v_/DDD&N&`OKXβ\g'Vd0BԿ H*/ )Mu'Azb Sl<K)&8` bư(ndy,pKCD6!i΀E[[d)zyHG *Ιq#!JjV+m$ )TMeMX&c17ҡ #¨mpH1@!!aKl$Pb5@2Ҍ`DA@PF!H3&m` 3ińޠ@DҢ* S@EK K<x FYdLa# H q;1 C>'Zq¸5}Z 93H,h>@Fpѐt/44Qy:QPS$5jQOF5&i> 8n0>a bCOđb|b5vpTbҲNijj $a `'&eMuGGo2f F8JQ桩XJ#d0UOxw?O(( -@t +DK>dbu4bxyXFh!\1,y 4 0\a *`r!:>9R GkV)37 fBOF5<śdn1* PRчR``Bƺ9HdGJ $vNe9 9|G+&У]O|B 6?'{ȣ"!2')@|=%Cd$kx^P!0f^>@7Fx#I@. uȐj:U@,Ocl77Qc oC1nǾ F(F"A tȳ,e„X 0PxAPE!2#q-G"@A<(W#IE4ݔF5}Pftܥ-Q{*lP休ypA\d^#=!ЙoUP2(M 8)h̡-Mv4jnCǚ"ZqS^$! 16b fM ,E~@q#ɢy+Òke`d'ȱV/DH(S! HW!S7b)➺6!++9!!*5XFi|âN\"{¥L@Ρ0'B{3 ws*[X?Z+y[ y cbb; #* \j80B@s5#(rrxp݂70P *6yITHo*@5Ѕ5ج/KC^/v @,~8jQHVA(pJ& 2V[2"m:'` x[8{Ӈm( ^y'HZ H\hH/1(9:8h {F91˘ #%Ph ๑Ʀ> (b E ,3 cٲ @{,k *(E{X?9^4 y#9Y`2Ax.(X邇X@84(G{ D) *E{1KJPc5*D @IPᒋ0=)=*PPP7\hA'6I4h4c*K »ɍ 7(P zsxDlXķDz.zcgo1C7SGi8_dSB0NgCC )V;ћ&b&kVE)* ,hũxM6PE` k s6$JX`Hrޠ Zȇ;SP ` 0hP z Fcr01% /=B/ X% mK/G)#dDPΑ9*Қp#ETEHcu;CV: px Se1Ԟ @O KK[K5(+BCsJy)yJKIS q UJA;7KV8~XixAw[ts%1 51c !+98;ZDX^y{~HW5Iv:x>DC]5CH(b!Ip Kb8CBDN3%bJ2 R$}1/s `'-#,y}61qQ<ղh0*]0hDPj DX0C5g-+Gͬr`ڼXitMu #KxZ4`.`ՌaGЇkY!eY2@݈1D+9U.'1nqڗ(t ХpYP X H(I0?Q1;㇠sб~(@* Sh8G@(?rj[XT*d?p xI4KT;JǠ^)KP#@7x4A21 gchA2Q^@gx:iMs5m(?c!!$C;P1<|77.Rx#j mK9!6ih  Hj`X8kc[H9"'#˼kM+..O;Kc!ZW$ 9 hObB{3-%Mٍ ;Ŧ@~کԍyXd ] ^؊ bA`hYTHx[wt obƩlcMY2pm ,#hD 5 U/`30PPHHM)>+E3^nƬ3 ч)TrIXB%?>9(TLh-UKhS65pj21 ޏDChuxxàg"U9Љ:y2 cC_3BrëDr^ItjHkx@_t7LחThU`Fhudra 1gs j@b@ }؄qn@lYzyG+ztsǓ*ˆ~:\Hn߈[Dž@ZXވ ni o䧨x ` ۍ8gZ_Jꗦ~gDl)gJ m02R9[: E@^/XtzŠQ'pXK RZt,  JrSw `VB4"JM8#9b-M;Aڨ]rӈ"ԏI K:Hα2?CY)("r2/! iNB k^#II+_ Vqh(30腁#y, $!ЀkdbeaA d♊1P槠]s4/@dQB8@ 5ѱH Ѱ9@Ȃ L@:M'РA( & ] #,$ @njI쵦kЪ\~"c,)"0x  /7XbŁXXlѳN(xW>}* @ @+} @oEcP ȐH"pa->AHV߾-9_Jb"Zs%F1ė% 17FT` g1o# 4@p"hrFX"%h-a |b%Fpz&ʑn5⊹ Qh {-f!1]} #`"K?Z@`B5ո0'1C p2$.D1u|b 27qB LXDuJ45 d 5Q#G(Ҁ$%GY-06TF&>U{fkD:حAtEXɬpER θ tBad>\=Xd"`KOhEI!8^Y$CI]YA%OB)0`Q"3_1SĈELF!60+N@ m UNB !AAf1\PAEpForHP7Pu[Q7+PI$%@q@G@ aK"Dž QdTHq ̃1uAh2z{evF8ߣC^@dPqDvgѥ+]rc⍭1..$.I2ZBLH 3. 6Ih0cSLuЊr'np: Ldp C R@>@ j5sYQB^+k ܀A*873I`e dQ$yKB¸"lpsü  /`z,#" z8@ @9@D $-=#,8mЂIT"25 &Y1{@  | $/l7 noZrxu,9\`j"N#\'V_``9E!N54D4 Ur| [lg ROsag2'RQTĿ"-hv{[6X%?sOPIӞ]bMN`XG`\+&yE>@ 4+6lpLK9=["LvVN̮8x*\ 1zV40YVP+:x(]h̳E;x<XJ'%(9g| T՚X/<($TI\.@’Y񂭵@܀8p 5C1IP%U%@LJaIVMA 5@beMA&QVbP‚%t]l3LKpe- V­HO f\pEXJ^>J DG D9xWxGZ¨2ќ#Z6q@+EP H8ID%ZҁTBLca` K(E@QDhel!$0mƝ)E 8Q+-\L \Np&쀝IX A D+8t^S\#\(C|% [ -pGNjdED[~LȎj!dHͩq@HnjHNH?NI|=Z4Ujy@ .dApZ6jD,Ă(A:4A~Uq.b 6Bp ?8$7.ID#LCd,B%¸Yk%lD8+D@^H8! J+i&hpi>@LlOI(-0%IE+ ]aOX:# *h@5H`ZtEhr^tmu qW@xTWP*' "lӉqOA |P@,HB0 0 D 0@+Au@XX̏`"-iM'@.Wt$.H EŌA\b2fJ G (!; LSh)\GȠ)4,*j_Dĩ{{T~@H՜MV-/iߎ ΀|XDFq욈 :A_ƨ)?ٮ+pDO͘a*I$Sډ^ `CLY50 6x( 1`tjt.^ځހȀ>5J(>B kZ KFH\DԖN"H@̿tn0[Pj+@\HO`@`1ୄ;"*KIPh@8Ww "ŧoӡODFO,E mfַ$`hIFD8B7&˨QIF/p/L Э0saZ#G \[(Y2) üuNAIA쐒6%:3EH|Y}D%ϘlX‚~8D% 찮ADNz`ƓYH7VH֨>oIdA?Mz4/. tX@4U\E\zjI/ Fw*8'zJvX"iL)B2zean4HS|95_c8(T?lC`ٰm,rsT%yQRo/ 9/Z6 F=Bj\./xpK{y BI\"[|BL<02\h DM)ƏSH"` [tDhܡ{O8HauAֹd@(ܬ'\THq[XDLXRB#E[L"պ{{P`CwmRf7L4cVVi@Kٰٱ!)UBx9haS  CF 1&Qt'07@C(l%bтln8@nEl#&?Px0% 1 A dHJ )࢈œ` @M~REj+ڃEq؀I6li|"J)⢆Y6i6$E@1~@Kp.ǡd6! @hܒbj"VAn8%-P$T)DED>EXD`16jBV*dGV-:XPBR-x\8s`K@+ϨPI_pدny!^7=c`,BD*P`RfX(Cu4!ܤ^^6rrvG\1/bbQ˱C@MDMyX}9q(BG݄y @Ұ-6 8?~'-!.t"M@(Dp+XfGCpx PTAz*OLZ+2Z$Dw(bp}X#R `.Nx8% EV\@d!H݆!nT"jqvK`VXkJ€ B"- !؋"RpK{r 2r+B|[+LhD0ET`% X  %P2]ʡtAr`b&r^>m{ gWTf R* aJHf"n:"lGǀ Xm!@(#5&C1"ɐx !J2h D#4|CZ>A@m1|Z"4Lp̆ϥZ 6DC8 lJJ M@w,mNd3~+jh`+@9A@ !6kP0[E.D"KJ& Mm&܈E֐E貅  S{d6GE YDTKdfN.JDX@r!]DԸ ˁ. cLB uJnD&#,4uNpA #Xzª%.! i klC"Tϝ&; o%HcZ!4Gl16 ɌA5|`7JmF XkqE6?'@{Q$; BYq9gn [3[` ǖl)2< +k+c.3[0Ey@aJbK!7\o]j@a>C!-(b%2j/ak@{b>-6 K pT)!XvzbX`*W^П˾ O.NcBN xܲ{%aF(BŧdcD\7XQM2R >Td~p"PnT,-@ z![d_(uE쪡57dVn\% `N3g*N E * $DžMu.N&cӏ ~iRC1ӋI,۱yϕ G|J(╼整˦AB/@0PFy!sיIn!&#&@'a<; g!<0",փM@a"RYp@#4p`ϊNLqxBN"BeVd%ɠV4jl|.0Ep{(᫪m5r曹&0xy=bxJF4"hǫٰD[.*cܦ$R`WXbJ :ONQO+`baz@b.`>Xd.`:)0sHpJT~\@ hY܅A4(B !e>2P+` aW` Vs ~}xp,hY䯑x2S2c{@{[֦ {QԋgG6 "e)0"lCHb@#g>0pBe"e{r/jf"LAl%;Y~ B1ބO&3o(JI%itϳsŊy=3WIVr.  6leZIaŖԷ iapIع(m@^J%)&M{Vt;;^)u\%d2Ǥ- p@ Ex|dtȷX9ak̉1\!CHd@ml9M{J u6y'6'0XPOIg`P4LEI4J8W%U' yS)]ށ2DI`SRD $js!Rh86hP+#` WXՔ$BA+2b!q4%Q]r 0rqߐF ^G|0l %wb FsfWAYrQGy~f- fTC-; M|z A&Frib a?p,7]̥ RҝX ]imPpH@fsYc \%E!i)?ZIò# X# B0W cQ[PRG|tsXLvcrD0G\v,9JxuJR=OZĀlÍlckX\uБW9.XK(SJ)SXnR\(h]xZ/k t=h>%U`I`+Ԅ][27`gGLsa7N_n5dJC'G|'qbt %}i)0C~e#|C~%\ ;Ԃ ;AJi` YV\#`ł@(%9 `؁K̖HR oPF+>ܪúŮuC(`(%VPe,20Q!0: ۃ(2W?0؆Z`0/.c @Hm.882œ* ]2j#81+eD65$J+(-  XEs 4Sؤ5 N *M\:%A |!lbN ˌ%@P^IQWf=QXI`0˒l`?\11g<,:PEIQ NsC1RPڳp]n$!DTȍ`h, @gKX#BlEIĆZ|klFJe';%`[_e 4}#"u*#AӛJbZl Mo3\RxNYӣ&e*,C0W0FB0,f,rŰTʡHI~R$$`Ց @.q'Ou%cAB,F -Jʝ `N+5 &`Ԍ?hw(o _e cFa#+6)! 1XX0s1l$QH#JEH S{7,Ag $.✆6F(m dcq]OlQgF j9,c%LZ݂gaRFXI1ɃQ_z]"83R#grKVRD[PD Ĭ335b{ ,+Xh>EcY֙*#vS@ُKBR#|PzKÚ+hy6uvuP'uZr r G[s1*.iR i%*p,eT rhy .0 %$]px%!%eAA 9@'Oc-'`zA^3P*I8d1eMcQU5s#u308Q`HHF$7n7kAS8AuxM +6cpA=0  r3w#t`4"t aHASg̱ AC $`?0?#)IQw@֢ȠcJT0It 0G %&TXg DWVTiXr)#uS0xBYt2ye)f'+0 p'R&V]b~iBM@2+Ba PPjQ%R,P>gE&c oe-^yTyUr -F ) `+oi `@]͵ j*,11ɘ1 Ƙc8! qsXbr`x6KcAk< O tp0w4u7Gt16s Ij30`@"s6k3k0Bb @ 'sP31^7 8jpdaIcPOJv!֟!f@)1C0CQ}o%ht`xQ@ 4E/5L $LT bE 0m07& Ta~G/*C'|cA @C 2[R`UN&p3&d@GU?V^%~=,W;YCCC !Y-Y@)pl` >t5,P-[po [  `0p`01,TĠ mK'Bc%At+1`a]W]0) gг%aH^`OU%g!3%rd60w_:x8c5#gcQP19tAQM ݐP%q UFb$5,$B:%dE Qq5IdaAV2Q576 $K:` _ 0:tqrR0e40sN@x @Y p TX&D(>"W%[%xȞ'}2Ӻx5N'b1cAt*sVNzVs P+s*4m3tQCS(a˙t˙$?GtZ Q2 pu0,V-Co m4p6pF /sQ9G rd%r3 :S217S%0LЯ#,R^%s8PYh!=|*7pH/R&%1 c7vs9SM 0!gs0%+]X,bM"Jg9$L0d%9J4_ka1QwA3aRB[o%f1o5 %ؠH03f:3D$LU<6uLsZYuv*P@Y0W?hTjԧk/a`s%2[a%j~"G:?';Wdu%'&ii _k*dЇ& /Y>R h<VPV` ŠDe vyEL& p66%MA%cQ9#iQ7g`gP~H8 { y4Or'˚6;f;A2}7LRU@^!s'Xpr a @z(Mx): h U[c4J6kH}r0Oi3C k0wCUo@NEWWf!P>JmXtPk U:yfIJϸرpJbEG@@.qqhVbRTwA1(FalɆre 0B%+v0R)\2Q 0 vM7KaFFZ[G߾3$ 1 Lbx*^K9m:>kcmx2SH[j@(6D}4AeXV 0RV#/+ ImPEOJ` 2C:3ȹāH)/:L W }-OjڵmnIM.zbX59 g>@ԟΣX_-q|}]tzqThqsEO-x{v逑Xʢ7d^B`@ X6Xv/p%~O ! Lk `!|pZG)#,98R,9lY2VʍbAWFOj$088 "b X@/Ŀb=,@` F~0axU3/K qP;  2a1 [! _L0Q H# T%/q]BkEH>#L,of ycp)C4–] P<<GHAol,jK! %:X*" G?Z 2Tӳ S1 AE*K~cȁ>AC,pM ]`E\$0wZd<Ƞ 4Kړbœ=J3hCpu1X0 ƈޡ =Bq-Qa\== %cS4₦J:@)Ér !fOه" o~C X@s䑞cȊŒdhXK . U&z^qTȓ&5y_YR}Xgb\3-,Ⱦt|e+'@btz,lr=Iw=llP0#T` ސf001D-01p`b$'T#0tJȔwX362!OkI,DbC ]Iy$c Hj8+uO z+&)WAdZo*Bt~muh.-IY.Zq DY#gHB.fa`AX q!%Z-0>["-.0΃sk,2\(>߈.U6!%C J`v@1@EXe!daDxY'!o{$!Eֳ\!%@HT1_Zb> m1MBl43#D nn 'G?S 0_fgX \?1qhWX 8(H$ /OHgP\W t nf:<ƐV2(R=DNҒ-y~OӮ0"9lN.ajO_gǤWׁ 1% ϡx_׷00/)= ɂa1>cCVȠOxrxжb6a!=x 򂇥:Es6: "5=4iX{1(0c8 9 ٗX ۆ1Q 듧臜=[!a,AH/C?`ЪIڭ9#p3H=S9A#>ۥyXB. (1(5IPda.čH* (4/Q: )*(&SD@ BX6)لBA琎5ȇ@,0{Pw=p>hKAcCP>[ >:>.ѳy R20Ɉ[#*n+ r*)_۔J?Sٙ& CA*QO2 "xQ*)eXT"`|Ģ/mԑr! 8"H3 4A"8VԄh!"*H4)D!䆶 ɸ}b  tBiK .Ġ+[Y7Jp1D8A. HLpD E 'a" WD$ `~8-,@(*'+K I#"1(+QQ+ʩh0W+bbik8 @YkS*J)`ȚȂJtX ax;6dЇ#8҇iz {S0"8z*DԖX !3 "|a614TՖ'("H0x[ 9?0 yx RM:P:@\ =РOǃ6S@ |!1@`@((3{*j)/8xNR3؆텋㉻^f #`7`&k´%@`.)؄$,cM0g!/hM-M0b5cyhpPVCC_M 4C8 2 0y"@o6)R}>t"8.Ke"¼ XJI}eX<g(h@ J)! ^`HA6T3lΖ!ў}4BCB6Rad(%q2)x*W6[؆b ,9d8rpeb!g5Xm^֑? 7Xϖ :&*0B h68Bm֬39|eW&{AJ^80.*ÁmF 09;* ^zt9| DY)X2=l_Ā:A_f> ^}XB割 @r.9Z K0̔9U2 (γ(9`(9;h" o <~pD:X@ :XA2#C 'AodX70` Xя0 s@ `ܠ1B&mBϘ5 5 DROb^A>Q4.>Q7yxH" aoRch@ \cL`шIg<sł`0 #A |o)\@sl 20 $1 rJ/o#N(sbգ@}V(MظHN cDz79:͑Bi ;[jʘ6bF*N4%M XHr%8a 21]JtH Au*ʜAPJp8A%&>>& `iLҒX#/ڃM:Pۘ/Ϫ|@KVIu/}5LĂ"( IWl500!(/aP-M@K`@if'IlO*M=xd2. SP B ֋T@ 3@ @b:F EZxC|CT0Qe> B !HA 07jqE*QKXE5JĆK,0y/ Rh,{@<" bH*9AF'>eivƠ畸a m+&P ,F,I<6hE+o#47BKc#Narb,%+ׅk0AF}:%>!@F a\ h Y$Md@ % @t`uxU] |lX 5bS(1>’50ɫj2VAxwR$f8>} KPHȚ5/k),Ee`FEâ_p]OBp*Jiz c@qYy!T8#A#D?lT ]@ dF"`k-*0 \HA,C6CF>H 0(FjoIIJ lkE},_=a1S]c> Z )*k!8 Ws7HⲲ&%%@ `,N&y5Ǔ0݉NK$0l1z哬#)>8l$٠  2l:m4[ w$jXxk.^F%0g MmJ]C#K\&(zdxA6f1c `1m P 40:!`;x@+pg!XjuWa `oZ`'-^G {E%$L /1 A lލutQ'mn(֎8omSb1(K`b()NuۮhaLhh>pXLAcI˽>dETUFOᔓdPDA^qREV s[l7qFJ R0WqiJ pG3IQtlL tRQ@zw7\II|@a@ C5( P@HT<!D N%"jYLYӌH݉PCaH0 \M/x D5ۈ;0LfD5TXtXB++EEd4|Bhl85@ ]9Q ɷ"_ؤ@ȉ$'ޝ+s,uAvB^FS{]G@Aȁ|C@*L@5Tc +dJp@`eׄ3ؐJ/. .cΪcgfQR@( dp@ʮ_RJU p)8` <_^6 dNh`ŻF E3 0`OX|Ĵyun LAի- }DF j-I jGR( LP('sOh#<Z2)v.8IlI@!Tv(!sB,*NBSBfv#0B5@fDd6B10L^+|&GkC58 <":D]6mΈ̫ X yT'C('eS.=Yxq7A=.>F->u+AAƺH#HC.Bf&~@虠XDH%3^L j)aŋ؄ qEr R:&DjG8-jE[%EMDpID&\m eA~LP۩ELTtmPmEd:)PII``>pMn[ /T~hV ]+YPD & uPpØl1ĨD7 JdU|pR]V $ZaL?0Ie15q&A,(îB@ ZX@5@1$sBC ,MH}h3Y+ _Ii"ct"N7ӘܙaedvfVv"T VZXkʈ.@ ͂)JЃ@58m5GzDbuMB"37"L2peaʬ@U<)PBmtE|V t+O]@9sA -LċkF&Ä!!bj ooJpe\w7onh|vo@.6i%s[pPRD^Ȃ7 tcyTyA{ո"oNBZ>`% $ I5=D܂ (~ho\XGA*%p \N-@ڷ.?䜆xXHn;ɢ=)bs>TukY蚓!YV2 :: C,5424'IjYG=`)H-& D#p@ BMP*H]A`m"qpP ۰($$1(6 '8C  r!$B  g6X"+)G q~7Yr5 9 BG`ZLC5k[% TEpʔM0+d,Y0R+LnIs,gy#|۽շoٱU7'ࠅx.[f9 6v`&t'iW x. Dx0gZhD8JpeA6.9"# $\bF 1XXb p !.˙ě>(gzao^:x# / h M\eKvRʥt =LZ c[*@Zfhx.XUx8,@Qz![. P(3[`8#k6f :kC.1/?}YЧ6Lgx> .}ᵊcwQy/(R94g9`r[ )I[Ҁ S1ɛT#01 dB <N@(@ /9CȢM@J q9MB8-LTZ4-<` ki Fjq,`Xj"!,8ñ"BBN" RWi" #U"b!@tc!> D#yW6F=$ I @E*B*ȭi``6ppMRf aT W`%j!b(*Ù@ Wp! "j)B\V `@ ] Y@ })4 K@ `3ssSa X!u7RA\Q$8d@ "rrƒ9g{)"gCFLBPOBCІQ  Cs@+!٥*PJpmh"V~ 5s) @@n $ bZ"N1 9Xx B׋S}. |BNPE8jY,r )Ik_!C ǖ?5 IF9 U ' a*@$aq)C 5QI 9VgCI3ɕg7\K`橔F''a7d]L*x0`ҘYu3\M 1rg5A 2- !$! `q- WBASĬEAdЏ8G l\ ̘)`X\6@9h&aN`FRP3 Qm+bJEPDa?Fo˵.$D(G/kzbr@ܸ]RIu?B2jU浕@ԫWrdEAY  4Tʑ7T r5{A.QSF94.tH7oBKh@0X rg#%љ-=@ ~ i} `!$BD 5 g)3R H68sd OA=a2)$P*PQ d yu/*bGH1q115[ œJGI q ԍXO`%ˈ@4*b"$A(db@d>P*pSbcbʌaD"H M  [&ˤ<(=6q2$!n G x G"Xkbd.G"@.!hhbl 1C#2Hf @ X! !a!oO i 8.VL噤DaB r ncC>tf$DLDsAgvA%aڬrvC b>D@+'!yd8jgp c \@Ԩ hc/ $@"P,FaRa ROrcV2.fl*V\p  (EBCH"+X $-dV&@hd@b>H(|X$;h7ҍ!VI^!$JP |~P k*W0!N>bfPYM dLAc%V)Nc ƀ(p" E_G ?g^(t (h #zj$V%PnC4I@(a. 2!*3`LLa@6|! h읆a 9d9׺D Έ8cr"F\k ?j8cE'$XaD?`%;/@EJ$τRj7\r~XAp g 2 ` ,A!Z|av | x@ JD +6Fs@`%$H> CBe@d(h !h ͓a%"c"r+gpZ?\g>5 6." ppڮM¹hΆDCShAFI&r"N" ΂f ` _"3-`2:Sf,AIr X頩K@r`!! ر &$ j$ o7/79L ni ,!hl >ijjf"HhV,AAh$.bTdr`rb;/DK6!q zBFn&zǐBJ$Dv1P.Db/&J(eAgEJgh "af*D-Dpj b$8zk) q 충i0 !ЁRn!J [{" 4mf.$%Z8d_ -_X/!H(y6" B@!4Mw% b70 mD"U^W" *5"9yˤEpT)2 EGCHl20Z+"4!t%o(D({ɤF̚?-!eZU*2Xin$"2鿎n)96ڊ7dlL BzA\a`9d8HJ!Lp B @ rDxLĺOl0D>s'V7DD*Bp\E /lvxMqdAw$bjqC"C5Q \@ a)F޴ N88nCD1 x #d~ BrY\BpOe`z4$NHX%b@>7Tcbv@,+ A>Nc%ۘ;B= d )R>␯r%-#ٍ͓ RoEX BxZy*"b-fv#^Ar(gj;-(!Z/`1f h [@42몎~68z!>!Oof VI lӑGI˜ 4`!pdoeĠ '8EGBPn84vg?îCz;dRa(`zz8jC$P]A`>#|C[,Ḱ Apĩ!K5 KvFHym_! Ho<_ >\ h~l!`dxT~8ר$6,+tNԜ#5RŜ}ٰ(MQzf+VFV& R%"vX@nXb9So$/RiZMeb<"оr kl e ;[& NoX` b"xF[bFw 7XϮ_'`1vnZz:|J@nd@۽ß@gJ>  vqTܿቷq@yԅCP$'N,a, \&xC wX>‘<> I Ժ@KLBT ֏/8 o`ʖ&! D[au^zIbINt zi)K?[HBR YzB {#B}DI#m qh%((AeK4~hiSPcӄ {Xӯ_)7EdYH]+,Wڰ[R%FD ̒+ NZFZ8/I>ܤOր!}d;ƆM-Um"|hC(.B 1L]3hXQ)qxX13Bɢ+z aPG \-$X`4ݫ% TC( B(Ă 4%(EBH)Ģ  F07ruaqCbglM+`|3|s 0#NL. r|Ҋ+}Re-t)pÍP%F@)%`Q1dF"P}:T3=)B!b *8 qBoP;BƼoo!v a*p 'ϼ1y C(3CV}Et\ϱщ Q,p&09@S!TR/RIS)j"9It8dKe"rIhO&/T[ҧ(&>fZ\l @?ol0/XV$Q ?avhS]r\R5Q;%Y=qLN{ӲH8e m o=BTo] ȕCdqixbd*b 0b8S7< # B0 @5aB<4B$@m8 K'  Q Љ*2E+hx"^!1'8^/aKFo|'Ÿb$"&&J%L pT;| &ddSW)ʈ. S0Wыا0tѫ* R.斃.{$ BHG7`EP$! R {:c~hX)OPԡZiPD!)eb=0ʼnr9D%B<6hQ>eK&BU:fXM{UT)GY$@B$;8~@x+K1bYe=8E1RH9Ġ5pq#YHDɭ!#A,Lq Ew$@ V"{2 (((1X9r! )Ą%@+&)d3-Ģo|`g! p)DP`$'h >3̌pz5/Ty83paP>D6@[ `;s@BC O$7x 6h@,PQ|BFq!xf `1!THaIJ>-o"{DL9,⭎5YE+w(s"#Wax^‘NQ$ 6d#PsM=hBFaJUK!9 Nь3-F L@dFKb }ȎH.X/xZմV>e9c (T'&v$k@NOJ' y|G6сهb*X!@ B '@Є R@ ]7Vl(Ti 23s3' ހHc|PD=#r0RP|#4#Y#vͻh g8#hU@@2V\%.Ѓ rIbAI Z'!^5H?Nk%,! /c q uz6P=dI(F!1X "bř@clBNےU uCfAKr;#j\k7eI|Kd`^9jғ4>s`!!G>2&>d 7e^6@"H@(ڋPv8# V97o7(F/tg|Ĉays=h6!F ^@|@,}QCPœU#էtӌ 9|§ DxD}HD"1]̀ȗdod8Xaάե6 ]P &!])$t@:쇀"E?v? DkTAɒ7hVTȐV mlQe 0@2p  PG[w ՀN;a %pD2!͵H!%N"q pA?GIgpq^6  !v'wr.glI%CI^h 0vM1_AIY'8x&[a {TJ3`F 3 aEO$x!Fpc`rL qXb5 !"QA PC"A q,$0P9O.Nop}(4U !@22 a ( 9@Pz`q X#VRtUz24r#|h}C 9$ #O"#GpD Eu >0Kwa`$Dr,P& tbc X#N Z W3 a Z } YpvK(!bwP,Y,dR p + q@7XAb N18`&H,aD@?0E Â# D"UѢ$DXY% IBr@uh7&D6L&Qpa2F` L L1E"4+_q""""uF9pb)Vh{B҂B hqPppIp@ )MF 30 ^hh@%l@ arp@ZT@ ) 0 fX ݨ_`0Q R RU"` =63#RTRTŀ0} G PUEfg$&%qHXuR ]%s3 Vo`t@ !u(.0+(1 p|@N(Ө BRm055Ei 6- )&+*F(p. ] ZuWdWqDp( v""p@©%ѐ)6"1$6M!^)"!I (P^0mI^تaD1_T6rx.&523vjtrX/ 43u+33AABAEvHTDCvhP AXXP{ r8YCapY#Wi`#Ajq  .0@ z(`0j`% b98RP9HX V"p <Šq'||{2'F"")0%wtU%2m@"f#   znuz"a@XrЌ]_P?a RC,١G+0[ rA{bb  SIJg s Hm޲ XG,qL〄S2` R))ԬUH s^80EqL[âܛI ?NpyȯwG 7,B$Mqa0P"[\E @bu@Aqpgpbՙd@ P$rED 1)7wk@ U[PZsB^'-8 + :p!&&_@8:H'lbSFP }`pv|\7Z3B oRHCJe$oPF }PRWBOtt*Y mp .@0 [?2 7k0 Q29@ 6P%pGp EK ` K D+@A u!C Cg@ @sW$YV3-96W 8@P=G U2'9Ⅼ ^r{ftGЙfi'[>Mq:0܀5xHCR3FWu/92cz0;{! D 'Ih lP.h01YsV1pkp\p_<!u= -+T vPp3L} ; ~"@ ¬ Pbrz,s"#SgAz, 0|2VS pԶA{,23LJkvQ{V:7 Bp! f CL)#!: f+Z '0)&OwVa pPpi(.r0o pB 9L n] RQ"HOxqDcAcE8P:`Q E k ef[(ʾ&bـ j=5۝rpq_) aC= Hs jжhZ'`a/mPCj+S"%pIHBu 1؅h`C%n Ws6~- \3r#T  ! *6  P^c rq q]3RלC˰ `̠ʐh Ap 99kBjcgpdZXǠ }ڠ :cg 7 bGw".>ط<2bUQ cfJ^, P !y! 6d k `1 ~ 󠱬-Boμ rP (ZY@u)͢Pp?pihvY%3B +0p2&Qq% IdT} /k _`նj" LYD%,&!lwngpF77R/_/R`'4wQ.F812` =AF%v3=J \PqMv5@qׄ{ kQϐdf DI UP(Yv +B?? ӪNt&Ja"z6 aMۣਡ{/<;ɢhp(Jjl FK.#* X*)D:Rq֋2f}FKh11%37$q++JWWG@CK.q07I/Nx#[*J#̷ҒMhLI`LB|Βc潟>0ir mUaB\( pT"<18@'E(=##kX"ACUr @`@ q@(`( " A(R4epB}Xw$0"1,31T<[J`x1RiJ"7.d\цmy%R-:@[hA:!-J@BW, Q  p,,'s]@oL9|d$ €Pp7E*# 7܃ q(! sjR(Ȳ` lby4=Hc2 g kyb W  ڠHB۠vMGDaZA) %D!#<ʢ4%V'%j@- 2ҩSH }#> (P# z` R[$ K䆤]IA0P(PR*>3NbK`j2&ҏMQ03L,3R#g* hᅬAE"-r "Pb#NUSp)˽P EIM^5bXG9 ! ~ 3i ayZaL s`!~ S9dn;د򊊦_0 V7! T\XX2fvG10ah@% k#B_җL 19 9`B!*.k @>$&8*9P| "8~B%D1(D?H*yB(zEC#Y8s(p f+{p)t@5FGHxHt 6Bp%ywd%GW0?H 2:k[Q:οzuXc~0VdDJplt2(`]Q(Fux 0LXiauLy,FG@(\LN P\(ihB|Xgn)*IF&jXf@5pI '= z(3o_ۚE.2$~s%l19 HtuCQb  D (h@PR .G t`%!&ྒྷ-׆5 kҚHV'4XPKZFY6~ =0-‹.$>A-xK(D5Ǎ }!a/ @CU~pKcC}:- @A8#+ \ ap)ڹa-?cf7( ( H*'`++#6 L`:A!~$DI لB(x)  ܰKpP‐g+4s:r* ]xq- 8\^ 1^QCl"40"jp(&/^(xsP"H i$6`@"+G6#h@   ,.X" @faXЁa 3=xSMX3XKȂ|(5,, ^Vbx%O0]870S! FbO18Z XZ`" [  B'1d艄TF1II_* (x@`Xz4Ή#n4 #l8I9:miR35@@bJ$*?YZx"I$`Ȼb.ᒹˡx?x ¸ pG#0 `o@xxŨ8,8r p+#4HqQga)0^&H@! i8` Ր.x@`9:XHR@I:h$ X|$y5DxO*8`$躡:#Q°`_E 0 *!G( 9(*[: q1B H9p !VU xqd^Ɠ o0S5iJ\鯬 jD(=`ڃ=pIpn }0EJ`)3)}84n(nh8BYHj3 ;@  .A4&Y=D9! Hi"y cP]؝K xxh oX*hl@FsOȚ' @Q#0&xBHZ81Tg {7(%0_U, 1j 09.@ 0 ېcMEҗ:hT y+*+ ,HOؗ*3cɰX09&|; \ .зQc!G`DYVhPTK`x5[7, A&b Ӌ@ Y KHKj@ 98-1:!܈HG ؍ $AZ8Rᾙ"\SɆS!iIʫ~8،؝:##{^Hv_jƒxӀ/i H91-ۑ hI$`!_!Z\[ vG (,Oe$cF  [i`c#8 'k`@hnHzIMb)4y{]XAC](?ڒ:A<=SÞD~*K+. %!iȘ0$hܓ#HfN:V%ٯ܈QZ4 HRy( pFAHdO gpc BWHocqzEkMp &b E.|;Qҁ %p["ɇX؏BQ~ƀ@  &0l&+  zPECëmzlCQ_,Ѐ KQ(X@ZH38_x,bØ0ڠY 2$X[80"7FF$P-S8޺!^P(;, AHKih4؃bF^*y])>&a?6Qc79T}>qjӡ1h* #ހEK\F!Պ sv nfhWH d<*(3" h8x#x6 GaoT,9)H3X#. i *OU#&ܾ ^^jH %x_X(iPXhȇ ZV Y^"] zŘ5l&+2m Xl!RMظ3ˤ^b.4yp-U6jʚ~ؐI`$QWU%_rP! ZK žjgrp7_}`kޛtMp;)U , Kاɒg3}ȍq6ɤapJϑ%T)1) #hB Z p W(Y "ɪ-}.فtg{%˻1kS*):$i5Vt>蠅3 i~ <^-J,` 9Ȃtt+ZB \hc 0i9y8+rGQ0w{ء[a19c XXHXB脳"e0ke?mPh<_qQ0i@Z G $H` KrbDFE9'#x #+G9 38`pK @PF41dPP.&%Za H ޚ(TSӪ&6DPC{P#/`l HFc(#Gy `#sxXdB#5n½&ёG)`/NAY6i.h`(@g 1<3]VGۚkL~#ÞCpX @ زAPL@+B]^MA@ tF !FG,؂zz"GAg]|-Dӏ.<Tp@K*nj' Ą H Y Ӥ `J>t !QuvAR UCEAB䣔9LC 3L5I$B=SPCL,XRS ]p $aE`%ipMKrT$ @@xSG?T"1Ġ/,HWP &4R + )S#q#b#T6.|JP<š^PU%Hc^CzYҏ4 ]A l@2\"B\b?_`C?B^De <m7h&ktCآ0&UBuP y N\= cFW{1P zW7i3A [ zưW=E`zr y%CP%y UxmP( rmSqwBrW>0n^"(BP4`:RȹB$t̰hXbK!}4,t  "p J @HC @51٩N@McWApHQEAX.bSajRÇ?|2 j!W@b\`*> 81(L{HxP ( yF*&(XIUŠB` Bڂ<!@G7#qVЉ R` Q50/{DR`$"aoI, / DK`)VNFq#d 3f+H8~A)5h+p0)1I#}p0Wuv4BzFdpmDgq>]AD!00%Rp\` Յ1hoe2lKђ~#B8whϠ] zTR2ÖMPbKԡW`ʅa"$8P,phAO|#IF@H y!A(-XbTc5 +XèL` C@4j"XBQH1 ! DdDFTìr)bp| Y8KXBx%qǔa k!{QV|b"H/ ()bLF BpaT'` SI AJO!M\!84? h\a (c$3/pR  d k&&`3f> cB@ 0ha@ pfP m0(j\9pc/aY(i@laHHvF2;|Η@D_Sg&o0H4A(%AOE*FL[4Z J2_8CB ч'JD%x=}OubBqwW ", tGH|C#tW%:K ѯ.8P` Fe$N6YO 5*#A%&Hd tB9LG^ R+ᎅ G>B"w*VAxBF!Ƞ/R8AE y ("ƈ<"(BLᑮdT7BNgŅ#6~m@! <@hC<96{[qH`%`b3/`in#Mqph f0 U@7Fp ѱU 7 ag`,zhC?/ C 8AAABT %E@2 4 $CPeVX H(1BBACM$A PC C/ @Aq̱C@#z BCp@B+Cɨ PRW䑎(I{0B|Ȁ-ם x$H5L=[^(\AtChH]4AE<\Gh0D.4M}HĊFlltC^8%Cā>c^ ld^,,d@8 $FQy6 ߆6ly|`LPHdc^,B$OߤߛNwpA:D͞-4XMchăA@?1kǙc0YAC*1OJ\0 @w#`d`HzKHA"(+bSK̀7OPL|p`AUQ@ P`ک兴EA pF Y^`SbCPFF=-$C`<]Yhp+TEQ+XܙQWAL@J(?A[ HESRFSA00eb@"$H%.qdeKL]$yA(C1AQdP) ,(R3Ei.Apo*+'8ЕzL1ESu4%^Pŵe RK X)Gib(qbSL6.vKS⃽̑.> S1)|e-3A2GxX\ּ &D5Fr&E-E, S+(S<P,dv}x(d=ч>x:H)JbA z * }T9|RVI` XcYkQ1" F6\d:kHE%=!31u^/^D:g9]A|]+t<%Ss_`20#,'`ܐ%XfPU@2jV,ù%5f =6ܘySN (a/s63m.1h~ :!1Ťq3 '9(,_B~/qK,Q*Z >C?6aWoLf6\zIAzgL>u%{? ѣRol$X_+L0.B)wRHP#8,<c4璝(w,jkq}I- &"c"). <@\ D9\ eb^&eB;< TVn \n *|8+$*n q@f ‰`FGdb > ɟ6dBr@haL!oh!ŢzY z! PpaYX &aV p,@ |jS@e*4 ,*̭o!\`OaXA PTQ $Q&2 "S.r0A$ z*"%x^ev]zN`h f`e@HVcZ%La-d`(%h h, _B`P e_- '-2!&Fn ^ ߰b1:rX>*\!`R;f]b6`8;"\Še\H/F= 2L:-i`8A<1feTfF(`t\< ީ^+|aTiɠ#@ V.$mCs)m m*ud\!pA* @7@b@b R|, vHSJeI:I$jKIgJ--a *RzUBbH"^$b;FHy AD!O%x^vaDI౒%r8|STB *rX JF"d` NAvh^B^Eᎂ N)xP)(Tk1B⼂_ @3p_0-/b4%L%(./")L5abIo\ F1Ke(4(tm.srgP)HdZ:g閞Ȯ9xC`&2Tt``32#iR@A=4&So a8@6|Rf *@SM&ulA ӺĀ N@!&a7E$w7^T]b$DOԩVH"|%TZaTM" "x2J%ġ '96%!p@7f!p$`N+&z2*%S0LW ZnEEԒb L^, 󉲡 @ a:^43K v6a/F :a;;;)(]n2rHT6f&8mL^i6bf\c젢=N%׫±"#&5ga e.6>J<<2)&`5&4]'8Bڀ֕ ~ f  &f ga()̔QdvO a8%&' @!VN *|Za >ϼ*UeQZ$YVASA Z Bb=$DF`#@@ *(0dbzp*{rPEf %$(` @&vR8KB j&|Uf $ n%T%E@a`Q@|[.`t{`p)_B d r b% ع8S0 8_0%^\BCZY%aºʔΕt]7*(g-eB:_/[C`R5l )a4)<)4Tib3 r ;tDc a7@_c5+FuBXb f8i$ 3.d3d70n8,œ2(Ra,FN?__oͣO!N!$``S97( (LJˠ"qEF>sA&a B{UҶoPI$ `QFztg1N`'4*a @{"fs%Ȭ,a;̤#LHc=LHΠ4J,\BādcR B@ L0B ꛍ(P̈BP\Z% %).>%%¡` a4d6ꯛb2;*% :c:v55.g!I`8dž8AXt@?tf;]+ILdBڣ1A8b (& Qi` %|Cy( t~"$L0C79Y„P<k&! 0 aASK9DHhT|zdV\ F'B&L9F VN*bH6;:[ "&P> I ݛ|DF세7k cEzDf |JK}0TG)ˌ61W]!_xUe%ᇰ w{~"wnbSaLDšO6*0'd@(p~'O_dP7`e 6`^C7|m7W1P8tbk0" 0ra0b`郐{p Q 7@Ck@7V% +p$%ӆ,Va`Xa&? BG$B84#"0 "yc`}& hTAlbCP!<1Ai A!GEMU,ژ,3}˦qPO3x'u'D"x'a$җhF1$B3H0LY^Z8PUX;P ,D PMC}iux3Qc,d2Prl$Ar@xP@P(T^(B1FLE 0DOPBъЁaldt BV`SzӨ7 B(WbyC 48ї&ח LVhxekNi(J琐Q~sӘfC' ӌ!b 5G.;_Dmj<֗ "7C)FD 7B E< @i?䞶C$kUe7%nbK@ZB"!'膐y,`[Hӏ*!".`8A+XFȗy$K! (Є `U2T@+PH`+Z! DIyI:"l:_0P6,j|`4|J48($HEhJ̡:bZ $g8-rER0 ic2d ebB:4'E?HgMp@|,ّ[ 1i 9C|"`Az^tA0@) eF;!4IMzb4zkbK#8!QDH!(%1 =!"HH6Z&яb!5)C&K^4`P QQ?\O !@P-DG  @g/o1&0p:`.& #y+r9RMkdkxJz1 F0±`BPBxxò C֣ !gQc- ȇrD-" hA rX$c2v&| |$^[@{ L]!jaQ,ȇq$nZ(!.pH'"4B`{T#>ppsr!0#4;@(CVj{}]GK ݗ.&5^$!Qػ\5K H;#@ FQ0HO 5"̷]+I'tiG[&j )#cc[E8%F)qV-/pq.|]/ !Ș-hL@b @ Y0  2%Dla]uM2- ` zO+k{AvTF70q "rG30P0s A"q1! u0E@ L%Eb/ƀ@' 'asP Z+"D Gds_~CcNL( H`8@MauyMRwSuN09H ـ9 xH۔uDe  =@ b X'RA|.0w& q&;EPkw+NB J$|5E?$;t0 [&w'd$rOGpcBvnR!z(yA+}g@b7 9r'g P"hc_TXIu@ oT@cB f2p &4@ڒ BgQ.pK p@ w0/| l !) 7Yw@r(2(0ciFpzh !&h{'"o 1WB-Ƞ.WSc 0YP/-E{c oY &ߠ$@+xkE5wl!Ip/ ;ݴ9G"( 3HPXW!(9bw U9ƉÓE SW )>s"!x'T8A%Q&?5 6?@!TH3H%h<@AS&Ũm%y&ggP@`JY$P?"Bq baz|SPP'?gV/(p@m` GP S@g+K|}(B `B jEJ:3 DBl.aBbJ7BB ,0 o* !I5Yd @;7p1b6j قP2)PAPzkF%%Ho;F; 8 PD`&^!s`7,F{Q E2Z @VsaUYpQ AC,P Ku@lrla&P-~I9'w52sS8p78Ӕ!& xx!P MuyP!$ 9Bd!Bdp S(h!:0UrUsBP! %FQIQ=!!7s`szp'{ib>mT&x71^|@gp^$hg$R5yuP ϐ] BK @Q@o A)}0֎ ?c k ґ ` 0#pQO-D[akB 3b'[Cm! umGbBb@ImpX\r d@.6!ag&x1 J-{Y.j b-YP }x I`-!l6{qv2P9ć b1AP MH`9| M`9` ODI0u%Cxc" u"Q< '2&f2jw\$P a%Tf @32TD=VB b:"M) n 1 H'&)tuA"m@b.7q'W'sЁ0 S,oe<_&sfu;+W5ּi}ABΝ b< ȠqO+t{1UJhOh.C~MH@@gz .  9&~Fs/( E?Brg Y:&)΀G | $$Wnk[ 2 R  X-a-l92 İ45*l !k`yjE vL.pFr)`:Mu֚|tKt9f|ᇂHt/B+r U>cT"8 Q+c!Pf%%Uº'P@${1?"֣P$6Xj5P7>CW*S!DDBG c):BN8A3RohgZfEbV:)DF^ָV4rC 9GL9X "0Thz*hI(\V c?dfUwҀ@&ae!!hrNAѪV%B:**R**@&U:y# :*2"Jikú!  1]w߽j8WǷd9RJ6Y6,HK  i+7n&$%8J+4 $^')MW~ $##2H|@@Ъ#Ș% 6 魎Sᓮ#' BO&bV-gR!h `BZC$o1 W\l\o\o~'`ͥT(dV4rVHણ냂OZrS"7\g9AaUz#RcDUh%oY* qYEd &$q%¨f@HUȖUT֫p ⶖS(Z!.M"0nqɠ \ꒁ}%.a3]J"/ r=HR6vclcb@XNC! +uf3Hd+AVÊ(hs26c7ıE 61#: ɼ2#z Mg+E%K8: cD`?PDPYl P0j!0ߨ gNp#xf7pOX9~CE x 7Wi(6c k4( NԶ uBgxq-# *&MIbہtD6dR"#~#H@(Wժ=Ȅ 2D @#qU89 ȨPd$X#3bXQH_t*}U!AaPF\ G*(U"($1 ԏռ( `T1'0ܠ ƭ4IF'ԳW n<)#(}Q0^BX zA0U3^Y Dj" `Kj!K@B ƂA%ȸ`0VR<8S`*Z()uYfuXVJ- U-ڥZK GUq.(a^@.e0Kd0ɬ,01 &`K&s2G @i!`qi|%.L061P*#Y2 ho#HD:\MμVH^{AB sZg\/ +ljY4zШ%!E6Ko@AJLA:iKNVrHE \9$ne \ts*5F)~P ނ''Ծ(0`'K ` dX !@X!AoI@W))5B|!ZRg@3! eC<:ĭ(-m 2NK``x"t^.OfX ,#V*PW^V Jkv\eeK!Z$I ~LLgZ[< [Av2)0p88J9G;:A-i HQx--83j3X-p#P5Z.&;dA*^/Pp:V0+8,Q0O093+I#,QЉW00 Ɓ,XTDX 6P\ PD@Ԙo@9Ğ:+aڻ1 8X ȱJ@Y jQ('sZVW\|¹Y \@&0éa1YZ3x9* " RpR4*h(H? >nc"``9mSS7( ЌڗJǝ0,ﳾz(E^kBx8@)#HRY @.x8 ØMzI"%R`0B8( xj69ATx נ34xDX)P( eHR_O0j/>yH o8 /@y+B^CEiZҀɥ,yoA5Lhĵ RBԜR`ЂU!0Q9@ZX% г(a0V¡ U`1ى$Xh ZX qN l@`95G[L[ rLtLPR##AI ($&m`1|H`ȥH4^#_Z zz8 JR? "i "B.ƺP!#}2WM #[8~H":|꣓9P9#5(x>1$}9 #0j2D! 6 PR܆X}h+,p ~1Ye#:W68SP H$XU0 s1h㉛iT>X9)y4XD111aA D, \V#:(61Ր&i`UH@" c#J!ps#/ٺK McqͱIl\ȁO&^k\&`ї gKB#y4xB ȁyhKLę _WZ:=cV;yF胤] gͥ㑜@6 +8"8$9:[_ q059gxQ{c\B0l\$1a؈.m8@6ddF@I`^oPB.q^"{Noxb ץ!˟T@e80FFkY0M@PQn%H@@'f mPc; |~S "/ZBÁ ١mR6ZϚ$+9/ Y8' H@Р c eWH=pQpLX 옃Ҩ *: ȁrUP$ Ry 9jx)&x,*y9 S=ѓ 10gg %׋Ѕa$1иHH "L qU$~9ܬU0jVp>@qX .PH[@ 09ho%aZ@dY<:g\ a( "9O9f(#{e 6 rm! ]]-KcH r34ьy :ZXӲ .S{H?ohCIH测,Ŋp1x bX5+@P9ĹY5nX(,# \08h8 m2#x @B&Ђ/_^ f8", h-`#~hZ,!(i FUMZLnѢC7;&6/x_so`~p8O&!+؂G1'y K@QRdbX{X(O0P(䳣 %XD^f +-d $ 仌B{QbbȀ1FPL8Jȫ od?g;PN&H*_+M2 &HT"LCy"n H3hc~1 ihr,_.܄j C`֬r q/4LVY鍀,x09pEpc/``X$cI (&\<*ѬIJ)5M#p1\ 1%Zhgy4g Qgx.BAI C@N]؈ $d#P2!]FFXO:|!7XNGq9/ȅ˦6j9Jhs,Z  P7'ګۻ Bg\ -Fm I ֍pT4^ 0ltb(61OQ?, Xg(͘e-â Nv­c ;5bY悡 fHIS#9i>bc7" \+E6(}` %m#0\)Hi(8B6PL0fxXh 6` }3MC M?r2iUh!g`Z[h .T R@T4@?( ^ zHf\:p5 N|2S!J !xdΈ0`56#rND6Tj³:1ȾYyC+dQKYe@rY/21Ы~}a-:0I}%r r q$ AІ$@ S4E88,fdA4Ӣ7 q%) Ԇ{PYL7X2Q3@9EPNbdF[h&6 U$[uYABt+0ؒE`t|(El0Xb-`2{E#;M >ETS=rFAa X^ 4PU RU„BFmJSnXVPn'@TH <uO.$@" g_~UtCA`3Ц73!Ȗ0+F|$\j$>䓫1E7 B0"#AOB36НMK0H& -[F[*A% Z)_iu&xE3n `Ϩ+ԐkɪMb 0A`*> ,ئb7St!qE tzI I]5yNX? bj8#ǹp b}c @QA44x@h7xAOի*HsI3"I!ޑL*18(H_dc@yAKD! \$PB p nm $s <dsX0q aMlo!(c! YX0-5Q)L~z(Wb[z= O"B+yӺ03Tv1LŘ6P![I$h @Mr'0Bޭ#r*@ RA?dAq@ Hp!@p@?lq@/`tD9]L=\]IX$@5B,@#-@@hWUfEV$@|AAd`>,H2tCiA!D X$ "r .( D~ O@ @ZHTc^xDIBnuD̏QŒ C0D @@dDSEL5 QND @ #$@@&]At :STu5FQ&pUGL'A+ 'zXBw$X^At4Ĕ3eA+@IG+ԁ^E [$QI˜3- ,9A"VT* #@̜#xF*LIB0,B2@@0XFZ<0z7M7$$q@!CH @WIld h.żtM=)B`8)U\M(@cnr`CiA,0Aؚ2!dA$@W]AN>SAL)@@"*bAB)ȆAxg6dw7L< o%AA00ܬj7 0F/@#i @!lĂ no! JFFO8cƓɝ-Sr@MD cL@%|JY^Gc%`,Kцʡ-.xALaЎ#"UNBN<GᎆdAqB4iCg]r^`E'M( S7 yC`Q/|IvL7%(8I03S2G6i"$LBnǤŽ:Ĭbs 3lAdL -D~pDcEɈ-Lm\ADz17D!*B9,?B1ML-jA9T?C}A $@3M=4H\) A @\5g A$@*D9AG@AV^:$?) @.=ׁ,H!Ԑl~4_C#x %@m 1uӶ .h20‘]Z_Y0|$zhyɕ ZWHnŒ@K>}zG1vpjƄ`RpP/b%zW0 9aji@=y b7sDBZEy8Ȃ5(0`rf!VAB`n ҁd&U Ǡ ?ozD/Q>G| '`hh($J8HH&$`0K3f*z0&sK!# h(m9l"*K! HJtϛ)!FC$BHI 5:@N~BҰH9h L #8KBWda F WH|u2)iiĪg0(` P&, =pqJ,,t9A>k/($@y:CgL? >[pb"s1 8 a*HLς9]V0x&b"Wne6ءS8n;-RAטC,U3ꂌt!-TQEQ.L@J@d&C1!H#tȅK,$8?lpy1z9qpIz!x'$@,4%q%􂚄z# PJxB(dGH:;(:#LҔ'n|p3#qŜ(087O 00FB%-(ўSXMe^nÆ2 ܃DQ;mexC}DV 7(F"!d Ⴠ8hy`3EZ0!?#\Q ? ``>fĢCZuX !/$B NaPL`pl5Mj86PMLT>D tBUV>D;vQ bRllH%BfsEa͢  < pE/J PA9_yG2H%AX\%PG0Ah!Bs\Q8j)F,A+:!ę $n`d/P G 9|"SmF3~b@-0@5xC+R\!{r Bn@E!DxLhErr$V UBd=YA$&%2Qpе' +6*nDAZri) /F A(@ D=b}Y<%Fz k9xFB rId"twt p<aX&whX VT 2 !FV IuHUJ0X%|Aٮ >x&Q}4z}pi~󓇚|/*[@:UiA5 ! ,J @A C`p6gL,yptPL9<\a]`M/210E _q պ(C!i޽T eg='c9ɛ7d,VԫϹsڊŏs&.=X#\dZR aui3]u4fZi4ܳǖ= kNr|o M#9(G 4cAӆ=)p8rl}k1c|z`lǐ}I-Q= CE1(Cm@!C1 "8T0T:8t ' C3 -jp\"R@aBL,2Dd$N TGpH!4_S8.VPWrVt!+1$^17@Cpv6p$QP9GrƢ02rCh1j FCgC+C Cg%2G`_0p3AL` 0W)q C1a 818nOr~9X!CD>;<!1vfw ^UXÀX`9 (C9zhz_ 9v$i(AvH XL] x,dmh{Lб Tp-2Vf&Vft=0 1 HC]9@10m(IkcχӋ14b3$] +Z[fJ~9P(0CUnEjV.w1 IyRsC4~N1w ? (`Z >_N:(w}*b ՘)^!@,aCF2HMXUR堶O1cX@!1~ZHb!# a]X"58ơᶎ2vJ@:P|Z8ةǝtc!cC2Bq1 ǐ~I8-QCDR XfAHJ.oaNniU6G*$-*~vT:?p|"SI3Dq#F D5 P̓&Ȁ16ep2*ՕN}(Ƀ1Y2Htc@=a!9c?)muP.9$t$"S<0IrztsOXFCwouZCϗ>X]n .8c|4!iCi|a0gi/oƽՄ|KH6RsepA,?Lf9B׺EG"YXSb1i{{)i빞]f39"1P A2*;Zdl(t~@ZT#Tvb!N[sW)ű׭vKM2t1vkmlgCg7x]k3V!$>@pݒ0D`B-6' Sb84w`=a:q;o.;Kx?V8`x͂lS9/H8ibaE2Emro A$c.k8${c=Lܪ:jKlf5B`700\40'"ǽg8u1x49WgΊA5p@ Ӂ2? j<`ϧW{~H 7i)qtXxO^ǣO70g^O|ښ!;+ڡSXEGtI2:# 1 `Egvy*6"A5];5b?as`d7z$Z}Sp0`p $]Hd m.{.r0 aC:sX"٧=Bb7:cyw=7tוl-3{  @s lp r0P8=AUjJsQl`1{@3C 42mb fqhP`;*Q!Ddj5o4A3eBOw7S jw_n3<4"s(q R M 9_3:j)F` S4XI fE~vh K`{J3OF~vc_8Y,3;c(:j1C iG/c(V'(pp`w33oCj aX*%ЊHNd*d/i&]7gc}:L)]9kS5ge=gyq 8$OL9:7  rp2P!G9s>fv7pM #tU ִ_Տ JXb]P sS!d}JbevkVqȂ8ev_>lA#E>U:)Fa;)kOOC|t94`)pEd 4;{GJ”^ 0㊫@9@f^tiY9FxSfcQ(l;gxdgT_>K  Q `PHj x3 `F?4` `"1 wl?P!S\{q9f:J:(Đ^ )L '8#s `P"a $4T ls@ FI ;Ӝ=zMJZ xb$PA 9P#>jg?xpQx3!f=e=G!]3TpZI)7P8u@>oPQqsC-8sSMW r'u BkJWxzNxbfi^}PS ؀>@zu0+T !y9tODI7v<q P a7362L*Si4$%x8u874m:_lQca4Lyy]Vw"i_R dkF՗lk@Fyou d&@I |p;f@UM]ࣳM886h8c(=sTsOWI qP%t͵P<tr(p(\ ހ`p^Se hxnG҃ K#9dI'ؠ=H8*:zh>(xQs$C+(W*|q@>i)pSSۘö 4}P hg Tq| ƴ0 F P29SW)#:;KׅSWjxqjGsjYHm?$8. (0MS(7`u gxApOc99V @``TH1uF DQ*Idz7Q FerizJ 7ce:l9VgaG~}k xUSAJ|$?{#ۄŐsvcŠj\gvcLxjvA@U=C7W9g*FŐK-z9<(L8?mB1>pz_k` ԭ|p@Apuj֘'*h#| mֶ{úh4ŐY:3b4ul ~3YL#Qu>KA$nNȏ؈N 'I3cvlpA}Y^Dyi𯘁&od {ӿk[gq+*x&Twxf߸F]tG{-f}O]!hYNm>NMs bq;2)̾MN "4BL]`fSQ0 U  hB`~cB#4 )>EZ:lLTǑW^ƀ1:XEJ%Os:db!LЯ!!*dz(lp!Fp=,p27tQq80Ux+t)N]$`eSqaV I v"b"$BtvXGAu`Ц|6#5AJX^RsBЋ„3>i}< 1kh  Q&1 Pűe>vؓ+hVfW-)pv;8?l'xpۑ@c9#NC'ke@)`0E,}p84^ ӗ7 m+M&ˣ  {h8>jDŽWKz8WPbxP ̀V v  (<`0P!K9fS FD t(L0G"c&VYJ3unշK {NHnT&\aĉ/Fp2Ƒ%1xQ)HЩH,>E #GsSDyJQ"bh ;Xc"5\U@̗ \͞Y [YIN.E2pC%KCȀK$T@E+&f*@4Ԣ"z$I;͋hơf.8 #>9K@pS0>q$V2qUV[E̱֘5\5Q 0l 8.:(xԱ(6))rC*Nb `;yN 1ewƜn:4])Ƚ$sqk`1b?#j j@T!g\ W6EP>Lj Z$ V:Չ2rVs.L@*X@ q-ҡ 8iNj#.6G|'=lsI&[vt*7ԈEߐLCҲ#1,SD(f_rV :ØB&׼dK.F9,yn`=Bs(:y7ykgH$0S"x v12J>2TI: l` A!gۂ #DV#H>%vq{M#G mzKj(ajKˈ֥.P6a@>A$=qAtbL>8-9mrxbO >=-|VbJA98 uI0 MOӋϢ=aGXqR‹IE:"rZS6k)'!v%@PH Fr,eHlc,;(5{ßOf9ؗ3 "rHPltb谈rT`BGO* cuuaQԳ iyiFEhNTŢ ( Qo}kp''`aK ZK$u 7RКNrZzՠB#HRPHhFPG@(>XĐ+SF%yO$o3F0Ep N'wR&q28I!v\R'=;uMҊ̡ 9Ė %ni(=0|, ]0<(*Hz]gL 0EenyuH̡w8 ]z:ʤ#Ab JG{ @9 LsP򣜬Hk coxYξm!/(dIu\Lch\S9< Ұ QYgCDp %" R2saTCv ˃ў$i#4ξutdV" -j (HΤU\Vo]"1^ɚ*G$3 bX &+z1 P5Kg" hI>nPh8R ehEp1@ 6H [vq >wHҪ1g;<[T5+UӊQ`H#{A29@P;d DL<ienlx {<5<fIOR#71 c k41xPxĘ1 q\Î[I1| r(VvRTQC%I080HhoBB,$$7vkAU)|2'݂MNcm!: TI8㝊:֩&lBwrg,q KH N7R`i_| 'A*lFg$NAoF%Aʇ%aX33`- <# e0 4V61bHq(p01bpu!bXX49[ %#CYeK:1Tpap_`>+[4>Z q۞>- +$xu; uىk/ٿpJ- @FxI@s6dOVЂUPIpjȺ ,e%;@C--(;7\o o\C>AVKVp\rB$Q B  j ) x/P@=Q#!!H[$(?ZTAJ@~?X 9@DFF<5iCqYLĐRv x y.<H P<@b@<oxBi" r9بqOxpr>gbr^>X$xFqXt*:4Az70I6l+ '\LF\'LXR%Cܒ# CL̚p pp){ ļDR!N[<$AzVx= R(".ڍ&DЅr kBGtD rFud*e`zG̳ ^ٞU p3ӆ% IdAeЂ;@й=IP2!= G6TR 'UсauuPXpM lMb;b9!NY5d%PC)c K$Oc%͝"g 8B@o8*f | n.\{Po o*( rrKbUHlP' ELM<hAڼ?l% U\lHjQY@l{j\IOVI!M֗`P4OaZ OV 9hK[`ZNi[۰e*ɇOD4P?eU[=,A9?pڤMm4]Rj=^eNSbvQK |QH RHQ.@hOl_2,C\$][^-PO d'D9(:jfLujȊГڏO`hUf= 5@orSAUPA?<B7D0? x sQ٤_M-IVUXFX-0)C@)FIhM0 @$ԃjaZ/vkSeg\tPb% KZ2-*]R0c))G6/yͻ{<=^UxPIADЍXoQXt@ 4\L訐ը'ЂIf!KYdO^!QDxnp"DZ[\`\hM+bKƆ08UШgA-}f.ƣ1P#Z66NʭoppKp֙Bgr/}ULH2c|sg KCnk9JJK{0.(o @&8OޙvhUAQ=\(kq~Ik kK Lxt~yR7` aOnlMQJhYmɨ QX 17!ru lA>sl(IR RbG H,!o~rn`X7Qc\wx7$7/f6m삢Mu]?G~xbl'po0$=HUi_.3WouPN ?c5@D *R` A[Ua?HFR,E{jqp(;pേK0X1%c,놔l9`{6x-qP.SGP9?,xj< eg|8\e|!p^H NWTUFiKUxuEV u1 A{QOM|XQjhjxb_NOTL2lAr7ۓ3,mh΂Okknf6i0lXЁ~]_ G0kS;@#vpA@j ?\i丑c7I,#%bVZef$.\ @Ě8Q A;]8ѢEhS#b 2SL)bKhT' D.&GFqZ$7,$;Kn, e<cdGV':KF(\̖Vkܸ/YdDN ڗ. =|(H Rn:ڷsa1`POTfU(Z\Hlrnk:#./"5T$F1żDaf2XUo"b:"[!BQ+4sHK8 &0(XB4 1F0 1 ,cY$BM'+u("eT#'\'tf&0,r90@p0q7%!.QT-(+QTv"`tAt# Ja12RabIjLi#(Eq⽪ ^yDp$!W&])Ak HaxK6GV,!Jx07U1+cU$H8%!Jkv QJuJ`1ZƔu@]WWE-3~3%(l0*c4%)| S / =AP9aNK잒.}3W,iG#]'B o)ILmF(  qb5- @4䪊ϫ 9ú)1Pb x`oÙyYqr1ꀪ`TF!AV_Uf)JF/a&:(F]'v!/ T OQ.y9?)_+FB}ڄ($I*JAeL(@uvBpED0Q&` E tl˄hI|r4U'o +\ ~-r/yB`}amsXvU:4:}W+Tz+,R" ()"p"l l1Ծpa6 Xq ZÉC[mb[aKqQe@Qii2li.(2S.V9)OWP2m5):oE7\Nlo4AAf-  KzO0aA8ƼF YCuєPO9DpwFj<.(klC@`}(OڰFI` Y䈃ؙl|0ZqPL*dZ{ / t* 1޿]0d Ff1 @ eHF5~S;w; 9<Ĩ. MZpǺ:>?Ԋ+NP `58mE.V%P qh5 #p5񍺷$tD}`߉C̆02N$DGTfyNԖQgSM@7ԛM.¾CGEviaJqLl$  ciDh;IK0KE4 p dA { א͡uBLLJ#ؤT +0QL(ڬ= pHo%Ll"ZpQ6ƈyT`jŞM_^߉Ex܀86 uE0.gѿ=E50,I,EbFȈO6(8,A@(ƚLDLCb1NP̱hu'@1EiDMQP >E_|[Ŕ2ѡV dth=P0aj(h. `̙ ԄcuIjDeT^?*Kd҉c?|=0 h.7D@!EHGWX L|dC@4(ŏQpf]vL¤׍mdRasB\A"x?F~pg ĂAH#aBNU`T|gu$[D ;!NaF45jp9V`(LDF :5t#o!CHLD)|e;PH8׌jr!u<VG =$QuLU] |`7pگ<Zie)u+jȕ9_oXk`xCM*OO">( Pň NR&|P( t Qi'xM*j&\yƲ^ʠAKHF Xc L,(KHDt& ufN#A?1܃=T T"&Ԋ6 yH" _MJm"d'kZ) { єج%Hk@OU X@N?ISX{BKUY ؋PGX6(GxC .V*'d ߉S̅b]c ΁ڔ\=D])`4 JU[(=m͕Wт"r (D܅^*Ł̚Q<@ĞHDn!QbMz"LrH5XJK Tӯd"mցpiʇ~IGV)Ol(Ko`|..ȽN4L%1Հ8h3([/AhcLL m8iH](.HQ (XQ:-JVlA\RPHFYą؁I+0(oq|&vKz%$0Hq]UH)Ex0OQD)AV C 7W9<EQXUg@K,b@FTQ9Nd8aT9cĬ Pq<9FbcKh'x_]ĩTU`V1<|_u'!8<ӌڰ<$J [u@" &$6Ϩ'5Ԃ57G˲/@D<]֐c|܍ƒiQ.Gb~8_( pb\ H%@].5X1D|Ok0DF) q)fX+Hx,`QTC 'BGTD@4QCV-M da}.,Jg8Vy1IGCb5׉k4֪LRm2ќE  !5D| Hoh3e}R-O] m< n凗DD|(x8*ITT1d61l2!3_ׁmJDb?fqRlq< HGϑ_folDt1:F|t(Xp}<9utGޙ/8),RٕRP$j &ApwlX97LdݖI"NL42B )8.b@$d\eBDfcXXO6Pk1Hu ؄cG9 N\1Pa"?J1bڄ=-y$X NEU<(u2(q4K~CF,/ N<(;yA2E6-Q$'FPpnGZ'jDTsX]OdJW)e℈8ǪLFh5PT /<"ǚLeG/J@.3bZ 'PlQFɫᲰȝ߄AĜ[;;L|~:졍No&.L\ <_' LYĪ={,K K֭r$o2rߜ'-Jfݔ'-FݰpソPHrKHemuvnI|$WPS$PLGOw7ӳ3,KH"L.\q]-epܤyA J+|<Ԭ&u(BAd(=tŀA1̌=Vtc aYG0ؚLϤwAbUp27(l͙sAosL%^l'\d1f,uNI`p'ZYdIKݸQڴ-y1L3##Zz LT0`>lյ.c(Qg-O}פT'Mjȗ|3-l Ie2 V2I<thѣI6Mzfwj !F0aM3UMbuN.=/ʎ8~YCxC" cC fH")H^:R #GMo6"; `ԏ?>xy:%$AY©0H\s`nx0<ɤ:9Ik,8oJ{郯,iňI4boޑ)@{3:ON OHR% H%N:\\lÅ9kDETKAH U 2Ki#u4h90TYC[3L B7*c.3$0g*n#MĎ:fJ&s01.:XB*搛stJ-71lo.c $:Y:I 0@ ᠊hjM e3 2 n )ƜDY`)Ͼh1HURKVH1EZvk6.!,E%o@lQBkH4.Y⍩dK5'L HXv)?,$lWA&"$~2'bF{9*(pIEŸ`?N} [w+ȇ 2"ap3)#$@R |P(ξmm9 =mx \xpm@?IC@` u}wupE^bC,zK*&]cE0 zP0xF&'3=}0<,^;SNңh0"hC  v5~-& ƒ p$T~_W[" #խ04 E q,`(0`W"V@`L""C ba(s<*T܅{Y>2+a2|#fʷH 9Yp\B&`2H@9s E ;A"@EwAe)HYG[7|EdBL"Z14ɐ(Yl-cI C:].]j%E vPz/ptl D]xLfd1vce2f$z` 4"$G&fC>  zVt!X`D@ dnA:m zd;*1îBN\̯A !O&ʬ$´qc >I+JʱHf_s["lЎ$b!xQȤ, P0I)r/@>o>vawl /p,8HĨ\R8D+m,B.F}+EX3\4*# L)0@΀ jx O2a6"r?cZ& hAt!|A0Ewx p0*oB G#&=$">N"IBŶIY`=-MqB+,[A}헾o^IP'$Bx6 LPsf2jGz\p̌$ RvH/2+D ҅/,A}Hf\NHRr$$x04ʇ$>$(d"#;4n0$ ")h;`RdD׼#H=Lٶ"Cѯ06B@ hHvm+b=i"A#w+dT,0:'RG.%FGdHb,!( )KF)t' zay`F`$Kab u(^D'3^H24~48 {<@4@!PA&f b$\%zwe9`JdC C80"VlLR!0يDTldOP &6g2+Γcb<<+b/q@ #Np,@G$DG,J.%,LIN  SI4J-Db"FbH9`O`4X!&F&ơr4`t!@*5&R"Zs6`I$+L V?!%m[/U-RfzyGHaE [dyW)Tʊ2P2b,0+"=Bl.\hȜn&/ >LMdžC^\e $@> `:1jU$nucuxEqJl(m AdB6c2N`3$LS46(H"2$x$Gࡣ|FLf#"4 Ra`=,LCaAB'>bpT(smAd4\: *A&PHfLbH9 "h)M-e&Ž$D/o(bF9Dvjdtxu .AV1J#"c~x4Z} ẼAAHK~Tԁo-c:z/ 2$۬D.#9sdB}g&wv4*i3ŀqONX"hb=<4dWB*DP,4$,Wlx"̉,a֦cu BFcJdt6G%gۦfh`vf8"QrBR[,j">K@])\ /hB~$ W|bZ!a4~"x"?n6-#RH,$+,,q'JXB]K-:QCT<3qHxVʬƬ,xdܔLZ!&2ӏ~A"Tz-&p:6B>tqlYXq+IWf<؛Az'š<W#00LjCvnj($F`UuAۄvhqƌ8B>`6Ìh TzC$$d`2Nd!6 @J3@ 2I0gCI}O&dӦZ!M ,|>IHw.8>T<צzWO&;:2MK,V>4$ =,2PlؚbI׎v[80 b aa ZgK~bTӱV%H6d485-2*Z&h[ۣ`kp` >'$8A gB9:!FF-&cdĉB*IMenFXB"/Ce@Qzl׮Z4"&(xtcbtap&藼CR@m""8-%%ldU#\8nxx^dhFqBc0ohrp". S!cЩ{ m#P6RQ,|V 7lalɍ4N<$ 60 6!rR{-H!z c$gqjVBK>0FczGYlR &.P)K VRg|$`~\5aVO) V[9@0)gpAX+9`4ptFB FA:DRADpO"L5%Z0GUeE0U=%R5p)%g]F\^3N'*U[;P9YTSp0)c $U㔂UOHUYh9Yg `=Sr Zi f'YF7h\FL"-q3'J,Qk*u=WI1~p@koHXϵrU+@HJ%A{5`ATBZhMEz?BA4A$A,aX"0AaQr4;¯4a+2.;I#5TxTCT_ZUUQM~/I/}c.&s[r)Z5ӻe}adŗa|F[f PЭp53( .ZSFzoKD1-!A\pptj xa%qa3QLEg1FL'QJDBiA{1Lf oQs$',q*XN?u^Z7.r?kMǵLpQ]n9pRE\5Ͻe(x L>)XC:]EF . q@IF FeMkcp񆿅R([1nQ}D*N*:PP$2w³Ђ?&$R͠a MɪCf |U1ϲ u3l*&vv;N.H ~b,` op0Ǥ Pd A #s$B0S| ]+)sW]ɦ⫗;A8)[e(=  w2_T YKR}T \Z^Gw"F#h`lY5bqYj@ ZBm;^Z7$!86j$i* 8q y+Yc!qzx' p%oop%< J0E![u X,Pfn"Vqa?8QD!!U ;]`XԸZ&բ&Ӯw` iD%g,HSzlhs1wJ5דɕ_m5^*lXʽ$" V$3`2 pT \  p1=($l `r~CN-qu5jY\<՞~{USl!*  Ѝ  *t\@@NF $:wB ?@H$?&kGNQZ$ e7AgV}xɽ'%ڌ*K/{An}% <22L_NC+1v11905"l"&U`)8J0"QB"l 4\zw$uB#Ag%wo!3pbc WN`s0Fx`UqJadR *[<R 0 p|S`)=Ԡl d({(iAAIdcYC  D @@C}R.\X`IuM7g:wqtvg _r C8%v`z z1K@&a5=n"xx=AnSj7xk5ÌŨ5Q3ж3Lܣ)2K!Ut=a 4R= ɑ` |6|6OMty+MzPq}Kr!:yC -) @sqo@@:Ey_ k;\ /VqmvVrxAGUh@`|` v%@,m2ra )T`6x EI@~2ZT [If(54))ZROp}Tq Dpݷr 9 Z@ < lu@ vDYӅyz@} Ȑ }@x 0HQҗ >H?-3."U0/ru%G%AM&~U-r3+r%k"ra">}9"Nb`DHT`j5<%yӢwq?APiB z{%q(5' a FfE v(ᡇdzYo`vpKi<2p)Q`eKђ P@9!\GC:21Y}9?QV"AK1~ fNR$@weh%@lHAq9>)Ry wjb@ȡ;FDҤTZ%.Oxv+0<T ܚAOoYDZCpŰy R,'{c=WfiF9`S@k@B#!f, ;5^;%@XK?(5?krP8a$03zUQCr1J8yWG#6&`Akrږni(l#l23LĄRNM; QZ C /HV/1NAIހ$ [udJөgZA'*aR#Q@vjNP5Lp- 3U :69C%w `~vT4"Ѡv2AWѢM{G"`?;0uv[;E(UB%3y{1#50;c`Vl˗#Ҡ` v˭l` 6n#8!%D<(ZvnfYOHpyfN"YM+P B#{ a2 [O yQ^0F 'uS(w }$F#54zB 3@`O`qq X`p<&+b"4:bxktᩣ$ I/Neb/j5QW\FdYY'i5 jfP@B#dy&zP~7} {˔%Nc5D.th 1P0[ D ;h͒Jd }"T˴ֳ\"HIs8/$ENhՃ0}J+rR*3 [MJ$`&/D1&'QOq011PPWP~1ѭ,OD`` s5DMCL8M@ O^@8F})Q@;u 9\P ك3xU)PE'SIw/Pal%i$KW!%(өv7^Aw*{j\"RTq 7 y@6W iBH\5}҇B*=6"DxA$( 6>\ u}F# P E@3պ MAJP q!S 8!3Ww17s0כE3!#N+@  -J)d_fWn9cp쩋㒱?yW$mA'P+9d bNOJ`4{"f7 CrA^7K=5R I1Tr^i?p y 3" G:p, fm  ӟh+[u&daoFH>"{&ڗ&81xUClEd T[ed^+׃N{(AOh cbLUdܐ |ȑ*IV(ukfva*1_]2-  @ Y Bq+32nVu>J/lHeA08q0I3V1ϊmvJ&C}%C0i ~@5%'(lsDfAou48=* delbҭ{N%K-yF1'qТB-^ĘQF=~qE m~DQ*HG QBO S " KGRHqbS T,ι4Rs#rZrLh K)&X'g[}5ٚjkW[l10V/!u.orX$o)c Xs\:Tl 郮W%& RgA\X9Y]ٱquNx+UY|,+>oX{c I<{V͍jV(&8nx/""?,2 [BC?h$.<.Rg#zP%"&$";9#2%%6n9ƒ#xƒLjM& Zɲlꨈ 9"+0"Z.Kh1.C J#.aM5 Dq74Er9ؤ iBn憜裏Tۮ,>˜C~b=Ĉ9A\pgpO%Tl/޸NP )d1]uFRDtqEEu?L@baV2#-jy*ē83b,,d(P&2-Z'lB+]sĒ+l)谬NcBB ,P&7"/ :v(32cTo`UY"Z2,76FOgG/ K%U0 -[6 j]W( Z(Ra恝"uF.X%"JJ(;8iZ*9[f#K:y*La2l^jgB)8WɈr h1TPQl@ ha(2\*ѩEV.NI NA֩ !zWgpzVD"tIMy@1x o}P!cc5#\,f @bȠzF4BA< GدXX"JDX2-C 4},d%⧴q#G٧dI0ND*_DNSD!g[1RD cĠ\O0-Rk-,#^ZXЇyVZjp@(! ,qYE4b>%,fZ1ȌID `+ Eq 1VCP "+ D _^D)&\)nqY(#k<*+tO ؂yoH,K &^0Scn60IA$:)CY0ducBpJE(~@hO a.,|<9V4"҉fFz0,:܏"G>c ؎$4!# 46$@Bq[ZO);`c3TfsZR4.m+lͺ'ވ\oJ3Pf؁4.Yd%+ZdktB9^xn94F.a,{`ȞdAEc]8A jLZM|#+O:4JaEd@xFU9vЄi`i n?yUX!F, @$0 $"GL0] _KPj&37!QS"& X&UIvy etƤi~[Q $&ʤ@3TL}7#$8VzT 7BdC@"'4.0 H(hq:T@㈈"Pp~H`@E mԱf pn1l/QZdMY9TFSzlb`1+[)&e'oM} VVl睊3# ߠ/\.TB1CqGD 2/E(BDڰ, (3`  ; B 2XEK_A~|b,C%%uhY_# JW$)/N 5AH ó멊0X ;r `62{Q  >*6p?Qp9pr?boIty*$`K@H@5a/4/K 8Q P0pc3)9 ~C_ X Kڶhq^ jd"-;lAYg8W0 $X0f,[G0!cj,7[li*S"EpH0X7Y Ļ3siA >C9{3  (IB6и3 h,肇r[&LHjQ40;銯P,i5aA/J .٤5hUL* Ql =XHdk8$(ً8&-`VFhl^KsxJDSgH^@tH:0f (|cЬ:p}! 49X1ײydtR! ) w.4> 4zM3`Ɉ`rН[`: 爤:x10 tg  0`\ָ/6I 6. TEѰZiH b--Ђu L3:hMh 9Ћ :xttHDP$ͼt()ib \x!yx,cx! @N-/` -8.H@988wZh蚁A* BNEZ8#r.8xiؐȲĊct?ĀM*81ſEڌBp,IÃPXDdKQiHKk/;j$-09c')Acˈ(CgOOAp>Ѕt>ź3τ`!i&Aq`y["1LȂB2蒸=3ѱHH(=3 ]b0C9-?SD5ΈXItS:~Uʊ%rEBDi98 >I  ;rр͐1]U5NKpK p' (1xZVJiQ-PPk\ 1t@3Y0y2{tj˙Œk7pf=\'ƒYh{nʂ.,NҭY%Ci3chZۙY۱[̈^J|ZԮ @H0+C%SKG!/*hRXITX 8b*T)D+Pgx'!S&dQlHl{͛i'Mg.H=aڕqq䎂d _ih=Ѓ.}7pYPV-q2eRhԒ$ ׮J0՛q́\xX$\H'Wєgt{ c؄77XGCRg0=Y]xlY]8sԬ鳄Q`ӓ]6Y UX|pYOJ `L$|/)*;$A@0qDde3rO99 im}9h h/Ӌ010|%]*7 vApH92V(5 ~$.1θɇW-en*v38 _f4O_gp8cu YIVjxYZu ְ0Vm .9@3,h:នpY#b{bSHH1ʳsD˜A08#ĩLAl8ldQ7n UQdK tl=z4fk^nh Hp!k9Gv-GC$ՊXNOw>At0jYE0/օy 6^`q. Ϯj w8Ho8BĎ^rY.L$@rfsV6c47\-鷜G Z e`oK֑KlvbXV`F,Mbq?~v*+iRI_6r l 38L( RD+@" FC@"\d@Y NsbNk1G $Xa@IWE%GNFUWPFUV[]u\aUK`VOIe7i^`4@O8opD7 .K+`jN9Px]QX@I`odomUGT\A\'PG15S5e\ᅇQj= H!-}@Xž~21pr˭,Z0 C@ {YpQsL ^h!}ёAB%Ogd@!t:DLn-IAG}]U]jy[% is Ǭ7Np\q/-qX]"W\} FohLitdOz@HH 7tFfCx@pgT.rD Cxֲ'&P18`Eh@S> 0P! /!B#CtPx 5gpCP&,]釩Qa@!r0ܩMr%,F9 ` #VӎA&~|A+%XR>rL١ԣ@'_V2q& e8W4U.2ae)KP9:鴄>pl Q^B7x$PnxCjAq 1<AF~kղpg$bAnzIXScA(oI0/dDAޕ Hx!APC"H>b[9JJ3ҍb$Kvr=QpQXbTU|'@+$OW]̤U9 U0ɤL@i ȏ%%TAŧHE`n|go %$<àC@5K(`6HaPCh3A؁6hh,@0 GMC@~l셶 NBY<C9DBr]dA[8QYpW¾]Bx,"iqZ"AxE':!OŐ Nw_*ZT z y,XQOAiݟ娅 'p@p@L)ɐ)c%`5 C5@J8,I@jC`h˱@C}!!P"f!LA< @e$\r H|@h_RpDMx_,\$[XZ0xJ\a'E1! R Jyw eLȅhӠHթUR\M&M( F| ApT#<:}B1g` 6,PC.AkIcBUCF+p X@@ĂxP&Q`FCFhB́+\ HD-4E &L L%N- (q؄%wt&6^0TLS8 ?)O ( Lb)[,X(M}Y @?/B5(fHSBl2!/k>`X.?*DCP a^-Ts܋aP A@RZB/\ITq[ #\̧-ۆ(m0 daNbPQbC-DPZP&Z֗}-b[$ H@`*eXNr<p(݂ -6D.h8` / l DJa`1 8'$808\@=#4H(~D L¨no@"ю~@đ8vA>t `Pm$P]BSMhoXOl#Re0ZNBoY y$@$ž&j0~oRVl-T rv Zh[PP ߽ JSoPa Am=I_ ( n0+=f8b 3 @A)B$EJ\ؠaB,>ko&hRw-:vA,KX @`lZh's.O,bӡN VPŖj BB 8'ӟbЈLsORyPX1p\LԡDoJ? 3 C( <ԝ-m{"l܈~EJ9{f`"?DNE`#N'w.Ҿbr[:cV0;Mv^Ov(EQҥk%S m8Sd3̭d+fc`h(4!zY.h HT$xLA7BC-AT@4E] E^5%.+ Cv$f9NA]<Fl ˨Z[`ɀ߀RO͒Gت#*a0EV]({ZpZdn̈́ZjrZd<b9A*L9U2!.jA.C"0;J!f0!6c.Y/kaP)\8\ @,4`oz@T!;CrF8a4](b"mQВZX̤WGr׹ ˭zPi$]}]AɎ} Գ-wXT7FX4E{?M&FF?s&\Il#-i,I(V=bsRxO(bR@BIU; ^O\9hC|l7 /H^,- ,@a(d~ 舙XA  L@T<YBNQ>Lʭ@B!߅n *HS^؈A PB1́"م3@ٱiv#20ͥ9a3؜oFZ`kEl6&V-;,pei[3;bƝlvd >}(@I񱕥O}7olBV`N}S;vx-1P1 ,9W.\^P㇋ 0mS9"BADѐ&,A({B=vm۷qC& = aT+!<%߽(ڎZ,[4%#r >tX/Vz968r,Ө s%f%گD2$JO$RXI#sNȘ6b%`jƧ#aȻl `o,D>@q%t0Ec!@P!F 1A . 9qYb $)  *@X 3Y~a`Ї&O"<>A|XHdžygacᓐZI##9Գ(6:z Ú>054ϫV>)q/`> ";i4qʖo<(buU"Dݗ.GW&x1Y jZѽa0"ܧ jTy)ún(`K6!dK3򒭸Ѓ8[`nX"pX2ɦyd@ zz4kIA`$;յٖ7JiÙm|h*VE?$@#2ol!Ԙ rCjRi!K^ؒ5 x,&?2 i Fz ]l$*QZr~\i^cC`v`CӊkHy\\&0&7J -[+ mi3%-.E"!6B  xrtAR(HN1M Umkdnp>lmlv!8upx /ijX@&,%,vE,# a/HfpD=l垎"ϸI$߀WCeF3B;H|.4#Ӑd' iN=6a sžebiI1Xd\r8"cd%hEՊ XY1K4 S<($ b2`3 pIۤƳ [EQR Wcۀᙪ p7D֐E4V 2KJܵd #HM #ȿsZbFt=FJ" K$'(]6>VǑ~'0d'.h&b/unc`ԯa y+O'>,߀2!a̚ W?mbg2PZAA+Hf8 HJchH}Ԑ.giEF8$y h71@фiP3ׯmdD)- ISJ9H=C.N _ BrAz!l!e. z"> 4t㲪a^Ď^" v"G"'GhDJJ(+r,ani*+*ʎ>J@ l* z! jBl@!."09e? H1HS*)'ͱ# BF2VqJćB6"0nʃ^e$"<\rb|!Y!#"ź+ fsY 1"j$lA$.|$ o҈,caNgj$KPn`pIGnA` b&!:O C * NDReBԆ5Lz D#S,i,`2" aL1bV\e\eNg(.AZ襾 qv`'xY8"6"\dZ.mZHb>gX D`> rf"O<ίH>^SΫ97HnB,-hd-K~"''NM#>*dhLo > r8&yJB1@L3, Qr8*/1Ȁ f# 4 \ʁ+6AMe%#$*j=8!bz"xNCr;^jq8N"bΔ%>@D>< ӈXzѣ^v"%F#2<h&HR3O( N+"L8/c\)4'y d !b2fL>_e#4Z!6Ak(@(Aoh" NS7* :( pA6 b!1WRa̪X+N&uȅg@ w l“lv:?& \$$!& +Dhb@l1R@';(JG>^& + @!PV9V: zuo >3b!$afv*C>d@#6~gYpTc ZcAr+YaU Q8| sdSң jn@m@He>"P€4@`  11>a\`k>g[&u>s20BS,$, v$d b<|6|2! C0OU ! 0U.E "$C =j$^Cv*!"$J8? rDdK'"&h=(Ók.򫡢 f4y/Bv8" WvgZ~tF%) iakCh LFR8#H- N K3  "R}&A zCVSeYHWB(FcI.Ԥn\u]e^M;&bB'!g!ʧc4=x$f ,!f"s*: (Bvjw7`*\!ntU>a*slYs'>A) X$p@j#k7cXVnƱm9H V #aЃ[DbĨ!*b$#Y>1pw*.'*#USWAgy,= XxJe=r3Hlb =eZa,4,Za,B&Ur΃Z 5€'hbC[1N(.ny~eGWrϤꌌIDrO %`.9,Xg$)WluHD”C X*"*ZʷBb A Hg d.!Qyk5!+,)QXe23`CbO셥 47Bim yD&hC r @ dA\b g 0%v_ޱp9`m/"[@z`Vs9CJ5@`x Ja@qV"(C6ڐFyLӊ$"x(-v@ai_Cc!`eYKRE}a'nglmєڮɎLcpK^Oz( *=ҢɤG_E97f:jM r Sq+a0B!}=ʱ],J~-6sIl9ʍ>]mȴ3/0{}pyH&I&"f?ʕjE?ٙgF؉KL 82D|HB@q43 dLB!kְ^4&v+&O ; UT @|A@̺"]BłS,2Hq  9q(:,t,G ~G6MJyhg(R/2emn$5W]|G+&y탲}0z2)] %>?t,<ǯ$7DcX?&A < h!a%Ztj]WYz$"<E]<P~# 0VcӐAM20 $` )} X3>Ved=AxH'B@ 6uP a ! q0]0 Ѐ @am%Pj@DW$sZ0GEJY3$ae߆xExXjn#be5X2$o F,zz8}!2; _/z'G=c T+7:  &P]Pugu37'pn{'i܀} B_h`tB7Vu b,-,vU[' fGT q-M3} Diltls'f^)% TGp} p o  NiTpk tQ1u 3PU}W@ QcDV,3@ Ng|rG#_5 a@avVаr`W$ h#?>:X;el<&oKH0/f#)b23& j<uq>gD[lFj&Z"*&@PIg@}X'c q ^'b kj 0q _ 9LY/~` E pP@ @F 3DTH8 fJ!kipb{(A'smBxl:\/%d#) )2E\R;&0dyi=h@R?3eVBl`:E+S"@ȹ84@R81 0 y,Wh4YܺK 7QL)U YL$ ձ7 5 5*ѵNcH DSx #&iu$O 4N$zv[,kyd+vOdib>F()` gp+t2z k2o9,@ 22C/q9^t !}u6c8 !BTJ_t@ [VtHPН!R I0 0 8C9 P:3>pOM]ƩV02M+c>2H$=LA/mIaKRB=Kyeb"n1IOQQ"m@@.8m!0"+g&h$ ԤT   0 cP9Bb fOp |E*2VIKu ,PB ^3ptİu k P `Bav$δ(I Id Ч5Zэd"$QkPC3@`1Jk%8#u=XlY|a2L)gy3pg=&0egJm%bz 1ub`,̗kMM9{, 9| bPjѲjt`W H%#iLNfls0 0F!ߥ7a _6U0,b|zR-c2 Vt3D_33ISBΈ "H\Kbu$#y$Mq2Nܲ0Y_=ϐPde1؜W[g2.̵>v$7ڵ%` >w" F~ͱ0{{+ h Wa ?PVAzLA6PހJ(Wao-u ʰ ` f _ U "$"2y3)j$ pKo1 &>/޲CfpO33píé}7:h"2xDY wTP`5 (?Za#HU<<<` 53~@ EV^p dio:#q<{`QᷰPΚ7\U@9q9tr(.P5P5Pd  b.WvOtG&.`A⦮d6ϹE˘O}4\B}?pw> 52Xp/@!2Zk). A+)vx/QFa @ Sij^x[K>(X7{=K"2hmpD@SOQNZ՞R&,Xt@ ʄhT) 4^$'HdPE@bҌ0 st $a|dذX,&ԅ. 7`FX #ذպVZ/hel6Gbƥ#sؠ^lsѥ^ٖ#os5aԗ_dǑ#Us̱ȁVZje$@ QIHyn] $! h::6D6(CJ~q*jI&IkI-Ȅ   /`5VjE  ob.[7[dBjTlU\`0O9K Nju:`;bW΃ϖؘ#ZO8o F. !pzZ(|T70yP$9I:DE{ Do.i|b=MAB'[vٸfZr,w2.QɬM 1pAe*#L1% V0[.Ny/ݞ%zbA~a/;O9=-kecg!$VW`KWaŚǕSWa+om~ cKaD\d[oMY.P {/3B<(+0B X`#6?y .m:xgx#QNH"'^jaW@1=⅄$y$wr|dzIH*Q: X k`K`gNz.qt\rN2>BAp>q=CViMPS ܊5G:傅9&8Ff&Њp8#e sX[X,1M.̄rBp1 D  4$ C <h}CDFp#_BLB|u zz$-FRzb@gp-?d2)6rG: $HP  3 H@DKz/-0Q* AeT c A 0nS ii9`2Lq85!zEԼg5lH`;ƪu#nS {̈<@=8BV6 ٛiL A LO@"DBŐП^a:PԢbxjr*7'Ѷ@O &\J$Hl`S?ldlUYIdH5^$Qd|Gl>DQ 2$O?G=9 B!TNѶ@àGBn8]ppuXp 0&%OYh7 :iĆHrR`/Ϧ.y8BRN<)J{@B=VT ABH#XrY>fdVB`H|^b A+6a [ ]цK&`$}W"ٞ|x=1'2>ъ7 C@"HjbX$ @OP8'T>^, KKvBTo&P |6ȡ7'%VS*8G-AJs@?RQO膣+Ԑ댭yG1?@ ^ \(-V5*#^=keLLH/ZK!8 R6xr@*B=z` #1Y >T)W g0 /0b C]POY&}[ BX,p;S! -DО|@!P")(Pc@kG`% Wp軜 Ao[m8@ Uyi |B]'0$im wo@P  5w0I: oD>9s9F^ P\%+c2n gXB>ߑ%0X9l\2.,̇ˀ8۳(hȐ8{{ -z@#8=1hX(x p+5_<"h퀏o66XOÜL`E_98(JbDtT:SV@$?10Ij 2 >p N{ ]rؘ`S@XXrȇ (ЇD!Czꂳ!b8C@0x+@HX+-b9\8 4Prz"7Dx) 0&cwb`0RxI, rЙ@HxБ,09p2d8zȐ=`x%b+Ř0 ;Êjpa$B(B0v(L$zJ28p` Z SٱW p0 ё„_K86S\, ozz I%DxQ$LP xxj` ;L p؋r(s8h0Uz0bXsy냂QHd*: iCPèC X9-oO j('xB'DI'vABz0uJIт AȠ,"0X(e!eA dQȜ:l$ \Yix x5&TB PQPXP%$'pHl> p| 0B Vgz qx%F G> !H,(IG4!YYY0Q l \Թ0^ Qp q(H sX(X脄Hi  P 9occHhku˴ Qbְ2J̻5QY ` ӁY@e¼ hcVDQS&xIiK%&J *+@]" o8shVx+sI~t9zGJ K()#YH 6 qG+(ք8ZV«S΋8N(]  ۿ~쮻}e; ]e4QxV sסecX)е(p}8ƞ?Z6jqr3)zZ01_2?6h,wI/^2 XgH@ KEBé 2BQ Gep!Y3Ҩ ՟MŲ`I{zVĪzaS^, UXpY֥(/"A xJ9,(`@ތGk)0:fILj k، (a#)[LA.Nr3>@UH HQWM@`,`@|LxIz)xw+ qs: :8tDބ{IY jۿiCpGpYVP^d&59&5 j@Ĩ7 pC>@ * x/@%Reai_jgc%Zl*/=;:({n)2_90ObΈ)WӇfO0ix؛.SH,IRzፄht5ސئNŰYpa@pSq084 /' 3} hx ©+x*8 8 (7a#DkUM>{XV Ni"BW0NgjЎ9lf~cx08 (>B> @40((#1JɾV.#ݔTX0NzQЁ惶8F)~ Z`m_x" V;SꭠGx$l6˜@ЁJSPַ T E~oMS*n}# ġB^H6`à6 2Yp(xQ] Èr q8 0&ؑQ k NgwMmH>xҔ%Zؖ4 `P[HKg~a@eP/ HQ(P!s2ѣ:#5P!>(n@>8@ ;>Q<ڕ@{E+N,x_op R ȟmv&?IZ/Qh,Hٔ gd50 ro/@Z,  ĂCepWv a !˿:*P`(p MYK:\lh/i(d,a6x `' BX,HPDY.zXX`Ŧv=xȏ6!GB7 6!_)xHeP k hMj.J !hM%}7r#Hm4$#kʡ 79NdxUQԧU,0F ND6_TCS`isFꛜopjfL+~; 56ذ؈ xb#`@ `)T&KGd#1B'W aT$ZɟmhaJDGICxlP\"#gJevp pF.*+iD YU-;Xm$o('y! 6sF9 @MR'CQCx"`KR,TT uuVPǻ%3r" +#2K +YP 10CC$WX %pSbCl("z1< d@G!> 3ȅ"Trt,=PQ\4D^ bА:@ F&mBa: ܀#BU\b+Ht )xp3ukHOryzF&T`8#Րf;aGW A-r KЦO-KȡBWw&<%-Q]La (hFQhxR DG/T- 4+li}x< 8LS#Fx 6dK1ЕD"X94RAg8&YϪ~`F2 f-< =A ?)9 ^`utkHY58(:Uh Ă̮3H"q>}Ib3F5]䐻 prO9el( a 7$DuX(V`\`w#!#+j#Ԃ ؝~wp $ŸZ'$G@}x5lCFXf&u*ހ0`CfFӐ5dTv~А(l61=cpt3H%K-Hb{,80K@X0j4.j FK4PëmHȠ,P])*C +*z .3І͜ʝug@ {@ 5sh3Pe%B:!Fq4x2Q@< (b!q~` f~BAnX0pYo1N x.PH!+ !:`0&"VPjXB|[B4PpKk}-GП 'IB93 ۭo hZC9zV`>] X$4Df]F@e>؂~Q04HY HDD̓,dAPAl%(Y :e7L'lPp@1B9@D>Y@ÆH;L߻F\R CA`thvM3`[\Lj&PCŝCE1 RN#wF`($}:=*d @_[0; C>D C@<`K?A@FD7@$@Cl)<@CnT[a7#(vCx!(RZ퀃lvdK<zD ,Ν)6" CW/&lB$K=CSy alD(;m'9"Қr R؄h/EGvBsCTD2(A,:[ (Dv$A$Q?PpprTd,X7JtAf}7l8X+h#<47~'d#܀,\- 6܋0AlFN$WF|BGMf(Pl7Q/لFk+̥xDHXM԰DUCЎ#0`@a>T;Hv1xɼQ(5;@Ҽ'BC2G5(4D0A @ tI#Rt=tw)U$PApfQ(`^CP@ xPr. Hmˆ1b4@|u//~,?42#(4?4F8cFECbMSld`)\hcEEƀfG&׉6Î, h ϼh;6D.t B>q@́AN®W)1DHr 0p0 46HA|X80i>L#Ir#*BELRiCB 0$_5BpHABȃ@nU sB5@x tImV<~ dBH@nxPfZ406,?xC/1< '[>pFZlkGjčMFdDnD?TȍLbnDp%%b u7$Az\º> Y NC=2FԪ!UCSEt N@ - _,= ھHZTbCAC,0P͍HD3@D P6R@B֟]5̩NL?R_lD1 #p4. Л[h/),?LQ-*N<(Df5FCp1lQ4Ď`K !)$ bDnс$(- <b"TxL}: aatEnvۚ { B<<G@-:72#xA?4d+ý,t_kCÄǘ)\B<`4((DfBG+xo̵(gCLSJ,\"l$tA>̒6b}د&Y/s.@XA#6E $]qDDAERCT}zC ^P{6I8'[GV"ƖAo?=L1~mT|N=*! @UUfvkn`ɘ(`ٶ}A^/3Yk&[n v[e]Z$ QEX.a_RZo b(w @+r@X$0z!4P! `.uʱCΥKlYg 7= 1\{.r#@LJ1&'0a+֩Fl ,P O2 qZyHDz Z!,@(CH>Qk )BaS LCh1kG0YfB/Bs(o*b(%;CxډHHD jn:pj9cXZ¦ Xa$0 NON :PSZ pdĪ7`a%hq rtR9b\q:̮ULB cPrI220 Do@;V9 P@mJQ%nRK}%J"*F X-`N觍,:*pHj#KɄ=nIlWD/@.ׯLSr&͒&$& |J5J #Id(Ol2reIv*F:vj:ld! HDib#6ؘ 78rGQ8cfBTxx<)o!RI %T"CmLB@Fq|Ccc%~H!oJ5a: jyQcJ"ڐx֠!2(@(4٤`* ~x-W(8V嫃'(0V 1*G][6B9nBOq,AC: r)'aP7!_6rA 0 -\j Ct@ L3b sH9@5\UܲB8ai H1tXJdlic"+3 >rRA3|g'`h2=  !x6Ї^|Q1 iF D29%C&e% kD '` AiN1Y!iǍA$^[l /9~D S]!0I X n$H+TNJw0'uX1 J1ƒ = 5Pi+tyQPc2:=0 !` ѳ8]r) uXC7dBP@Ψ9D5ıD, : 1-n&l@5 ^Cqt*-CƌSj!T搱{dOy u//ӫb0> jCtiDV@v*Dk\Ivo8Azl-À ⢩>aS,TE5"К0 H5xAOF!0  ʂr- 9dA(-A+x FEVQi@#Ћ0DЏAK(T3h X <"`B,U q ,XB j,Rb?sn ?tn ]r+Yy`2+i[‰.EHd) %Ba>oC80$0apZd $`@"B{X'Ds ,c~+tR !C_ D">*܄*h @0 @>f!Ph>""*VlM %hKIc(4 ZAZ'p!80lm$e xfz>zB&>`&T(CB+1sg8iB f| Ra'aOa`!+. l!\TĀQC-hF>aSGJ%t#Ikd&k#h0 Rh8hp8g)(:n#v vkր4qb €[& R\/`w&d%V؀ 'Jg)) QA/8H9\!H@a~  6 ! t"<ɲzAoYO (vh%@@,!@\O `#p &= aK+3 Fdhׇb҃#gy q|$FJ  E85~3@J. `DGgRfxؠlP,{z!bʁ4䀒l`]>' z%jS9(`!) ({!8V`  "mJW8aR :Uo %ͣgz *QhG.@ #DpYA'v4a2l7eSV@!.ffADk1:/' AO`" g@N'a"!2_g>چ|\VK Im4}"um~ۛMS9Et*Ёo}b~ `!e((b'&ZBp;!&o|nApE %Z5,kjAZ9E.Sf}u&Z r!spp)g`"x=F DFǁݸ;L#a[x@ʳ `]H5gOJBHΩy+v}"fBt2Bx͸{,vo<*-fhY#.>u qn`@82g 'äD47l8>u:eH|a#zz( !r8dnrG6zhb82jz0@pVa@` N Awpd6[2~& V,^ĶiaK a! ""qxoE lLٓqAٽ&$ ~YD {p||ab `z"FA Ԕf` x->$gct(-:*u[!b! *&@_N@ D$L@{b{Ba' v-d<0… :|1B*œ 쓨6 رg8b< jJʙ`P-LB cuN,p HypV g"dTNxr*[P3ȯ*? P^6CS|&1%P+Nt>47 "P0TgA] z(> G LgRy#n݉Iu`@(Wf8hZLB{tb\!E/DD8 %3[ Y h $!Yd><xIБa; Š1i9DjI%O|$(G9V6Z<Ӻd+ZQ0BXl,#('V 48`(!G210b <ƃIh!QexG 7{g"1 idf "OlC\S%Cy#<^x6hc< P>"HH Z1N85a7zA } K0&0p*6`G+F PeAV$wՕ84j`ˋ$p@D5m KxC]cz;$Fh ab7!1?BLJ!Jy[,a H?\{cѭB L0o73#d ,(A@18>8O@[.W,QTHT?oe!"xhT ѹJvD8@qթ%>5ZI@1k% ^b_HxY%-3!1H&iAĩ$%nY1v m>^lRkfI& #!oT(u9 r 0Tpk/)]- @zЃ""+Ђ8 ,J8B4p h,'@ &0ux-]&}!(%q1 |.$G'ڇKq?}QH &L_0@әHTc?p%A'<\: pa x\B?XҴAf_ț\ð ʱW!3$4T D ˍl$ ]c "j9L4_\4}hER>H28ZѴ.8PH$WmP n1 by`7g07vÎu B& %@*(+mm&8 ١pOv38gw}k o0a!RS5Ɛ@p 95 A *1p2yad M#'!D k.M_G "ͤ.+B/4qqP0l30qb0[`Aav;JAAe?:!$PrJ.v$0P. b:` ;p }H$dg A1[rvnYMc: GPl^C)ޠ?V>݆ 3.4Au)23 3) @|ds0 -  x=Z4LK!NK8 8$/v`X7CE&1&PP@)Xo.k{ 6 s9Q3 (r8!0 7L50`Xbqrro   arS0@@IUopuYW70 Ia&]V͔ A0 ` b/Zq:2  77PbQ J!`Lp@ d1Qv æ$]5 \hrr as ?@A">t s * .0r]eI!Ȁ L8*,@ T@ U@|J( & 0 @a06>zt7p<, 0  I0!'@q2$A#N$9"ZWpxbHCA/7m [wP!/aniWkr :s` b=1{l*!vPiFq^*Q^3d@$ +:*9@@) xEFp]p7`7J vaNJ Pvh:P @ tP `D 'RPp@` r7 U+,E0=US9GšO(![ )6sXr0 Y`nc75j `{@'i>#{v;ewH P i{( ͦ+Q tpo@ Հ$ײ,POV48>4kZt9Vu%)L1yp} AE+@ E p'p:4L GmZJ/ :঩J _"lE1E@a 9NkukH@XT2@b&`'u _@ oq T(PW P|*wI#)6 JsBZJR ZtpZ <ӕzS8 @ mP  @@PuG $qiP)veo@ =edcJ<rd^d= (K} } F;P r@uBbEB ,`N@ ŝ vpRW!I$CY īwםʂՠ @]i:͖sq^~FՁBb@P9J3; ʠP LaM>0FY"p $"] `N! q w: iްAӗ=-],zЕ1ɖp[ ( £d 8"w?DZ'< VKLxwj0@L-'PAjbA  $BwE2 FOx90 #~!p 2p 0S PZPQP#isoYvkf,psF:@ N (=Mu>Fu}PSmA@#A'мo3s0T

J1 c3E.[~ ;\Gt2$i^ >NbJ=6` Z '``a'a` P@dhrw'D;["mL8' vV`D{6@EPLAl Y)JK  {ۉ H?nB @PseҰ =` A1   4$p0r-atN! ]9ѓ#1f")w[['Y@`X0֩5<ӅMqG>d`KtP1qW a ?@9F0%4@2|1|Aq.¶z hA:=]:0 , pH) O$~ dU 'K_8x1`P"=F "H4(7FK  #iM0P` b yWM "a, v`A PWjϟ` o`FI7 `P 'F 1#2 1 :,q LYP qr U#|^$ OVP'@.T)|ĪS8 #:70@@AKײZB@Hx#ZbM2;@l}:*#1T@i e$\׼m0d~ZhҥMF])j i'qQn *,uJ3xWl9alNT􁣰Oh6Qb`nsN=BܸJNhp#|,6D*•#~←68 qH Li aH.]x7eb,`L( FĨMN# 8 U.HFl\<1XH/4E&e>|I-O=Xh Qe&ۀ:8sO °e=` $F3B!xW:T:AФac 1WHh<fh}PY|:RdaM1,񙄊`P~,tK=̵\b/2 )@ d-XahY$⌄|De@O3gw晘dBNh:,q)Zaci}#? ek=xl +!HjHD@(9ͽXe9 H n1p?W8ZY\9JIV EzEL/%cR9gL4:0AtΙt,&4i*ȁ5GT]$=NěDp 0dL @ëwXQn0-Sy~EC+b@}bJBIN:5 t`bHҬdͲcZaph.iY }ckFI b)Jg Ѕ3Dc 4 JE(gBp qBJIdў)D7PLA \ gP,` }@3LxG00C>s$<` RqXdbjTc! ,JG TBo裐D>]*&@A,Ȓ2P +#G5ZXS0 93|@|ofT'KpT  (xe:u"ҩ eȊD5V "ӢXv,y\OUǹCYAZ  E][.VN0:,e@qT nسg 7D-[[#7{Cq[M`񷥂HcvlY`7=lV-iG/8!7EH9@/$ AP9 }AQ( S0$]C9,dD-}r]AAo0dMKY}:t:[0`JY=ʰPI(#&z-qÙG` 39a3wy7Y}jV$QPU4,moF<s K_vPlcWn)g˨-A-0l@ :WKxP.>-EPBmXOCv+䖻IXUW] 6gs/sz` `P9\avӗʓ.ÐVUAB@$=VZ0,4l8\j(\P]y^A 큵?W/1I3$`J j.G70p/U vOі)Fa$Fa |<&ƃ8Qo9bm ] OxW+^ƃ0, aD aUT%J>&ʔ$ ІNH@' Ȁ_' ;v%Lm`\pF@ .;ap1wa vF:__"1 1 "+l C!| WCXE"v7/I:g 0$Ev@P m1΁oXbxC;0U#7p0:D6`(rQFN$%* pI͜.D(D! l0\3aZ0pM+N oaŠ67-.19́ Ca K ~1%!0| TFV͎Q @#qU 3]IVWrR=9(6<0 ҂6smȘj ӃŻ9^7g"0-a,K9S{` ,K',U}u8Ahl||-9,VW\ "zH G6MQ1@ScULB9֝nwmW\^4{a2VI7z@,r AT`d^z [Lu DxAg$l-RC@qp״,p1a6n;/FV<Z[7da0 0 P ]FpEfP_l r,6kW{vec8s' pPUw(٣~/g`UYJH.,}S)2~22 7Pz gl5 p p Tp Ȁ ^pfJcNg g@U<8`TK @ 7@;)8Wp` rV/8Ev8Z PUrp,%J1Wl1 (Q9m"mB~wr ET :WA''r^Ƈ| eng El6KVZ{pt/`(Gl)` pY`Af@aSQ8X<) 0,pysa¨3Q~%-B`%Y2"a6 "hUS^:eQbDi06%lYN<<&X<_0# ;P`T' TW>NvKc%u4'C!)+3g "ur wTZrB8Ua/vD&mz0 jt_ET_:;3 }H; YP<P  [|UE%1pSFvo 6m"#JZ:5.! m/}P))竣e22R]s&Bp !&Zg@zN S0 F;&Ffuc0f6 Pb0 Y @q)G ` ` KcS<y:B'Nu2}ƔKq,& Q5Vr9 ƕ4' E 6;Zs w*  sP А ] sAI$2 ˫iEAD;0jYUȂvk Hd/F h`K5 L @q 4->r8ȱ(:``WsCK_C0B7+A  ]m ]  tv@^vpFKT7P&P;)Ch d0&} *ʎp 1*Aj[X7/dF]şGILL!E(G! \ 10#TX%#4fCs" S "Р z0F[7`ʫw@ FC0d )s`Kư ccV0ūFb0A;16 L&rޢ2|2)2 ?FKY5G+H7:Oi CO[bWYg#c^n*#-Rin,PrFM K!YtPLk0i"57u_1 '/jr/@Ղ(6G&nY@1p$W1 냳@^^c|;F#&6{B ;|5o Tp 0@G^0Hd uNvOƢo-1_(punnoEuJ0 *ve i1 S!VY! sE"ЯN؀_C0@KP TFg" p p ezԓ|ie YIMd0joi!+nGK+W7R]ģU pݽO_;_0hGjS!PC6k9Bp @S8G V,-b.j9(Uĥ=hWx+ai;Q;EWy Zvi#>aV7.f;Yk`*)udib0aJ`ۺߌ/:ΛZ֤fVR_!o@̢ǏuDbjr/ޚ ~K ,4KD %X cSS2l369O^N4nxz9(@Z.q XǤо9;0`Z6lBTbh#x4,ɢ,pQF"a|HhtE1{An*@E~; Cl+,/ B02 B-; (%hA x-#Ch$[SsaCz.`0Y759H zq q:CatQ7)MH['PQCvp v.a,YVLm\/Tm@X ޸(N dnm0_fϳ_@po6FK`;b087.i3ýBuK%,xP l7\c&p!ccT$觅qU%,@'w0b<$H*6xb iH0H .@"va@إZkΚOQ>GH{t$܄"qΔGԊ"F4y}9 7RA1p#Yp^,< Oh:n(7< /BC `4:,g8#2bh!k USg G)eߨu `љxF%ǹWc|vc7G؏ 1.N!0lg@:ݠ] E!I^ lr Dh foPYӜPNcK)%*ke!FX8-oxb,T`(9xDoi$PK0LJjqezLgr." g1թC%O(a@gB1(i:047` 9' \ M[J2d!9J%`1ZBU$I:^sDa.H`c9DKqcCJ*x(! #Il|ӥoy'lDb +(@17aM\T$(m& 0RP>))FRV(0.2>.PƯ\L^RX #e^g9…6fMv0h1YHB`xta?L:3o#u $p A%^B963GY!-{ΆUi.`('as$6(`@ PXӚcagIB9?]"^YH[ZH|c9 +6$ 77 + ;);Oגyw5@0*  "F P&Ђf0Ih>0 Q у9҃ b83dF1y 8Ѱ!c9SZ:j97Hfy÷ذ~{8CT`BDL.1eИY!VY{w AL5N܏1x#*c&S "A?7Awp z62ÑOFЂ "aN4mmН ^܌*8b ghT@f #Ⱦ(p/8o00$2#8cዷnQ̀,8ٸBr24[pz.׺HM ŧVbD@5XTDEwh#F " -0*v R 4S cS*.=`S)v:;'\HG^mz 8xo+0o#v܁~GЅTвjH<p$38=hm05DKSbO < LtDBaEI(aP<ɣ (ͬ1e[AU! mIbQ S@0-`lܬʧ0 %zxbja>Qxh0C9 0 0_Fxs#a 0;'Ɉqrs(oXd= ) }pɴLR:M8QH=u8@DUͥ qP LŢt%Xih8@ ,R KhF:haDԅb;0%ЂԌll=1ٺ,|[O yv#0s8 0|% *aIP+Q҇PLTC $jHҀu P ^ȂT >dIh8mdNȧ$!7R.ohF[|*F8`:I8\ /Bg`xs@ ?Wxxp *cx8K6} TK5)J(̴!a MqQީp1=T8* `weЃF؂a҂<b(8R`R>D0-FЌ%}Іe &0rC{@!Q0Dܞ0Zp1@7cKsas%ҨV(1(HX6P]ՍCD5)k}X{PQݣx$Ņ["ך$x/pUUp-Ta(&hr Pcb0$[ Taȉi1(Fd(0NRO+ s# ;INeS " :`Obc14Х9(<00 ej70'sB Bp (# aʴR(QR8`%H Pdb=E +n8,^Eue.m(T\h%6~)ق[V0X%HB3PX1.$Tg8iE㫎%8Pа a{р"Ae?B7xy]00?̨bԸ #XHMNgN8Q 9P< `M jelLhbUl^2k[*\th!Q.h(m%}EvHT 0]M8=1NH6F@}>BRy*QWt(4dӈ`íiZplN2F 3$靕xe#3(ЇL99! K]V@p~2XKUfbLŚlk޻Ew|yE!\Zᇹg\mI.8bc!xEe9&( l`R0H0a"Cå8#.k9q S |((a[nRԠ|K#갮wX`4_sE^Spm,R($[L=k!ЂRh_уg`8>iB6PSY#%PB۹nつ !;pBe1A'r;C($pqZތ$}X (vM89TfRR1 "9Hͣ`{Hr r^avV]l<>c_5v tP``#KR@%%OXhd(Se!qsb-F)IcHi{mO(%@r^ȧ2rČ*Yã ЇMmmmMaG!#O=hk@,W= Q^ፅ5o6:is]<^(&c^p3_DV7"5a;80Fm(wOSFҐB\?D5B| d@Ji  nm k,t  !7. N#5xm߆w(OCig?*e,5)`YU@ - 4'wY{[{;1 w']־<]qh$[F1ljAp@+= Sm`a`Ƿ7DY |mL6GHN7qٱCx0bS„CշVRq$!9>I5",KgÆ=c~l-fKq#sqD ê+ 0n1Ȓ'S,J7s\+]X ikz5ֲcӾp@.-[!.F1ĀRob!h+| -#ȠbcF"V2Z,% Cz F1ԑW88LecvbaXx%9"Li+Av)k))7@G ?\'\r@ ' l\)`1G+1bSN+|) Ž{ Ā C # Zء`@2TPh)%H1PD`}(N+q5S9]XqQƼuLBb9|` V:1XEP3͔‘w5S\y5!O:i#8H@I&a&-1ɞ)Z`lt)k1?K,ʈ&*> IpL31Dp|U-({s0⏬@?bIM) 0RJ)L- (7ۊhXSvTrhup`|'"3`kTXMRqW_}XXb s\2\EyӅ[}dc4%^-GB06Ĝ0+g97sC 4D  ~; T T7jOSC)S64,а)8}"?*C bFR :ku@/avE( VH'^_ g+v9aw8uyfIcgXXd $HLxNL= 'R1Bݩy]=:cΣ޸fɂ.HN!/B1@! %x9AxpBCtn e %)aY7(|“2FOb]FC9|Bb<|9A1̹/ 8q0B,# \@V%``BΌĠ*d$lGJSPZ09dR^rMjQ'*0)JepS1СK1pPTCcP2?$.ͤ-.Aͼ쫃_ j&:`8DӉ0F_ׅ.1ZE9?j=4k,Ǭ,@ ꀌr  FS`=9c#"clhΡ vGq ]8 1Ҋ>i'k1pAE9J8 Hy/9c@-dh.5 ^b2"  I6xhC*1*X %002@ = np.aft4B8T.\=m(LV4h´1F? #-}n(v0S r nB-<&`!"H2tYer|nobked.jvnFƖू1?شdTu0b[*b 1cXVby?\ iB ^3_`Mhhc΄ a)sȥp7*3%`l`#qdӖQ_}}s MMFm`8 N(Z]$bpp ,SհfBLY^qxfأ?XZMwPFp!8ea+tv < ޞ0J=օ /2 Jض|r|05v7(#\bFsR=E t c7 o{? `{~}&wGvjFis0QXeXX0=L8e#ءc m.'gI4no#~hZ 1~F\@plmm{ /B)|?K,?P0$# f  M@M[%\U-vxĀ08Cx ˡ5܅55܄\`\ڃ\@_g68&p>1F,Ă)@atڝL_@2Ӎ,@ƣI+8 0.|Þ1B qm0z60/GI9Lڙr" ;s8ȄxD AI]BٛBK|3.,pL\%]A5 V4A (ag>@?#`4+hm*u_b9@!ls0@ , @AY|C&m<-V]B 2hҚȌ 9G4@\*ߴ*x?$B+0C1 BQQLqB' hMpP:B i g*5 %C'pP呂> ,}N#_5`2t}QqcV,>o o CddBB R1? 6\"B??Tq) B|A.DF0$B990G҅FI+7L+p1Iȵ@AiS!K&!'SlC%]>+̜Az6~ bM}ݩv#A6y!/@AiTϧC>" "' ߢ5i,7V@ЈF ɲs7V#2!\3wZ@}چ) \= +oGT&1\gP{JR1,dz~l,iA f1 P;B!!m"$N-&hLYSh@qQK~EKc-L\x>4* (_NOZh_6cCzX >*ᓡ @!9HGX @@ h@06ABtnpBF ʘ<% pA3$J4;<8*X*P/ǡLlmg[MXsYZCiSN9q<vX^hT-@Aɟk*G"ר@*sC@.0bhQk@X*h6@|?\'8*]0#,p''L(e)H%Б?8K7J!hSA40C'47/bQ* Do@'ͮ(0qYw0??擃|O`loDC 9l=Jl'hȗ*-̃"L΢-@BD1c3SC 4 ۶by3n-4#dl4(@͎?>?“= At 4hG mѓ[8uB$6@,*ԮGBrw⅃pcpZOP*򸧒ZIGPKGHC^p3::C@tC,jO uȸ?䃶dp(hX$8G1hJC/k2pC(/ ,Uf5ځw)p‹qB B@)pA7?(B]055eQB #B HM(%HKl)@/,e.T"RjD>+irT51 D \(Q0 i+x0ewF!--0&(0+Š-E-m`#n{S:Blbo#*:aʙ9^Q*Xҥƚ2*cSUfPT@!ue S@{'!+eu E_{QXc+ $h.m v pd0 iU aF2oddE0pd.nQJ`60c&@ץ'iꓦwb!db[dBxv&hآy$v۝&i@:1E:hc*\en.cjcDHङS clә 4r* 'C+ KvxF" ܀hG=>c%p->#b{-8jx"Š@܀ jD#ª#, #.F23bQ-(C^iB02s@@qmBUpFC$8 ~ 8HE繃Z4vpb /׶rbРQ7fC\qbhc <1Cn%oq1Gg)syxä 0(k HA t%Lt&&pʥ) `&WE#ZT|C a {8RWA:4X/p;@<#%7Q Mp.P>9HbjdJ () }01ĕL |7591C9$FkHU )#X#6]4m aB8g  $s [E_A/A <(47` 1(#5U"&eC3 A)WH@l) y fT@D"N=@ic1Gӌ*q9Q+j WŰ˴&[X0#Xyb:He*`ETg LȊz5Z3ePyk4\/>6'Zc.bNe3[ܜ8YɅIGF3BH z3br= %X@[,cKTp*hDR^B0+l bhAZX1#wO0` }l ƀ`#!2 hj:S-<.#\bXCjƥѢNScq#_;بy *n XJ sTt`?B\ VW@8ŽC "c7ZXD"hhm3qxbI xdG. '33b'3A}-#L`oB?7ԯ"T}BU=S$K#@+0 l}.X/4J hAU~@@\+µ=nveAnԖ?Z $B*%0qm`)!e>efS{VD'qLa!`F{'pKėW8‡Yk"50ZuLfX_܏%e .[/B V%iJ`$I(C`?ZuA.la%4JTGZR>l&j(%NduiRv?fB&h"$@́,/,etk &O ZW$B vm"o0ItcY*6`I4*@!3!g: xAKP FNE"äL06 6j n 5Pl jl Z1\?Rག)a*5+?dH?t ؉Ӧ HU:a@G\&FD ]x!1oJTV"̍(j:3#|<  >m .D8FNNX$,素^pp,GR"@0PNNrfጠT2/uN)mA>*EF+@" qA6e.m a:\`pmr\L/q4kJ@:fŒ(6J@.NT~B#(%C 7PnW <&GiN:h9r"P(O>+%:/fus-@ijv?T@=R.M U, :: ֲbA`. 1 2?T`@S V5LDNA1KF@R !ā.PY@Gpk :@+0TF'(0Nm ă r<*aaNAA `\T( >a&@R`r),*T/v&R"T+#ka&(Ea/-2-!> ԰ \NAQxJ@ .56V+CDqC#4)0qUsI h΍]\oO$pU JnM TD<5[BLW -L@!TAaN}&$vopaKs` ^9ZT(C/֋  ^P LDb-U/@VrM|)ƱWU&uLWP88|#0ј!TeZp^nZ\A1Y lA'E gD NN  \gFq` `@+?!I\ˤj*X@:@I "`O`n-]@n qW{AX$y0AAq:|Ϗ3Q3(״ _`n8dG[ XU]2~efB~ )9uHnA Pk;MoW\ 8sx`IaN>9%l)d.wcA!{Xa" ;,D?w:xij\{#w{1Ə]@w Ό"!:6:hڧpa VUG`8znzpCN 랇m)zBaGr‘\Tj(K\ L~ӱIRB{CHXâB,Ţʀ  TA-B\\җ! p7Y|n|[|qw h—#'u0[G1aZ¬৒.\2U!}  @&ڒ.Xr &@\@ AeP O#rݝ(%Mrr g&s AlᶩSԥtbOyo{^XpOR,-z.`i T~U7yy|ž~|`z@b +!\8K 1N c@oHpUoZH4JxZ0K4vCn`Tj-Z@ vx1GaT<0U6j(k6_ bV%&K$}%G?~>iud1v1 &L0 X6b+suґ#8"4ew=&_>)ܻg*7ݼ{ <!Fhs >[pPBZV $5N(D!@n "ef`!\ &g Z%#oތbbF:q%JfU"F"H4F/SD'9zKp/'ъ% Aa8i-H/ `v<]#rj2 搭'` W@F0,2[\2HA6)*~DiBPEfaM h zD^=`+uZv5Sdn!kp0ӫZW1uGba{ulG>֐$h b4qbPA9Z1K,2"x #/:wՇr<7$=nT ]o`b n nmlg~x#SaX9s0ʗ&0|e0x, Q0``sH#͢`e8Bjq  u.{hm7Nh%3q#,GՓt'%a C {s bJO VS,/EsxlC^h<&^$\o c C"(` \zr8=vo%Q~SJH9q*>1}-SMp:pL2Sd{}H6M&AԢja ~eY" [&U Y w{jq"hV))sK:xYm a(Oի#b4bY~xC3i8k8H9ĥaF[L"G@ g(1 lH|,|Lgj |72c BcRڃӐv#:M~E5A$RG =/ |M(J)!oT}*NUى~,\sMnS ˰W1d q8q&>6Գŝʺq^ƽ44i*I2 7Pty{?@xx_1ρzaASx*R#Ι$HB*ƉO)$-ù9H-6{#44yH(%~sȯ7 ؈wCBL^WJ=`1j+<;]:W?%ܕ+L$Pe&}T"F$OgDwH@]#70bOB Lx'ya`1'$&b%r`_ \D Հ2Gl!$"ORa 'S`q>;33L ߠ^f^Q^C 4RǧTeT5 q ח@ at} UgMִ~+~7qave#[p3Ma3CS bCa atos4%{AfCYy1"g EW)V]wA]WB0buuP+`l@cCbgH~4%r H7P]h1X(0{%c"4ćD,v p ax2@JlX6ސx0 aӡcr8PW1B'4Bkdڀ+B+7MOv [151%׀9tqtv-s3&6e[)=%wEl0 wPol0G@#O`Pg rq׀^=F|f @c[^,׎^H? _!e IA1) jAp*ѡ t!VMr+VuQs#Q+,4e~ELQX<$*i +-R1d8gW) O/p0u̹l[vVauARx_QXi TR: '07` PS?6T 4AMC?^^IE:i_5p 7 f gJ͑}q``2 @ph%kIk&8Ĉ{,aRB$D+ruv[hlv;leU3`/YY;i=.4ɶ:*"{af y<a0!f1P Ԁo RHNY#z Q`!'?RG$RT__R0'|yr(w|(a)@`t@}KA Z &ie1'urEB"$pM3,f+7A($aS,Q,;Fo`x^ "C"q' K/BYy^ye8/R"[73y͂ mz @Q GS`q`wq&}bS@"?r'?E%:4LIU|i (1jEg@)at+*:BC}[/,u$Mv6 WA,3e+<JD*˪Rp#a$Fyq PR&9Q|1o-=bx"0"pSxs r 9"b&65%G0Iz2h =Rr # si4` I^Ce GCi.geuֱp)LuLDŽ,zeה[= +uOg1BW~BCFQBA q Wy|ѭ0qER6O8A+0#fXjZp#QZ~%<#J{% g|L%!JQ%r_vačV| ̱*1 tæ6`PQb}aƄkHެ038DjS!{6{߉%}-Rq<YHR6aS  =Q+%0  ct68PeF`_\?9~iQ:`ϡŽ'@b @P吡tИMB 2`}b \+,+&YhMr17a\f׹X53qcը*n"8Z+S"$ o^y\*yS y\BP3  3j QPSV_34;@_`A750KrP+ :,x ݾ!!`* ZZLmmLmqP u]kY;56G1GvI+ X-u[무… }9<8H?Y2d}M.Z@D&BH@R0IvxsFm;w%>m󰣭@ܼ.pmvXq p7S3PjA[ M\H fV(HiE,De P\E -\ PE#xa)DxY%Bl@G= hذ蒤M DJ=-`ʒk#j򒷰,vH+/1d.LilA0b,N91aĘ3TX,5DSzn`@e0e\V+%߆n9㡻MROҗ;L-nHBWo$KVKKHoK.aP  -#n-#]ikYO 7 ,#SHa=2*b -ƚk3Z%04$B0L.=g~`gc1>S2p)L1N’P<;gpͻ6ݮ9ݺN=͎VN9sWq1~\[(> 9PY#.E $; =L7\(Cb X:%q A%Tpp$MaHa"=֧ +ȪX6ʴ(c[.9EƈH2Ӿaf0g„%XGhhhVMW~I;yFp*pm:'ZwL5Tn JmKO{ xOX(~Cp$OJD7q!58l 톰ʡ! 0W|F -b0`$(IÌ8“6`ߥ(j1%-lH>d1 AӻYwKXb` P5t!T7X28%#Sid0Q|*L5t0UHC(6& f<-7[S*6Tu*uݘ6[U3=.@j k 2Bb#J`7~K(j"Ya0dDQ"6."Ih1^4U h6ikX9 %aOc f-B^!,d@DL1=&e0F 4)'.u2adAJ" ^Tca0U|$i6b`j*z(BRl_CoNLY&'q ~JO> =QEN#VB(|pjJ6\b_!@h(,du (  Ik\z`Yʒm؆>l@.J;$rt:AuSdScLȂ%|OÅu ĘZVkm7ŒNp*8GUq aeW Dzd Cpq->v|VMNx}qJJ}Leԧլf;*o mq` 3apaIWavg(SRm6db#CpJ,QSaK.LA3cOyV5W#ϲiK"Ъ2J4$`8wkȖ,oR1_ϣsm`qJ7Bɠmx* ZU " FB,h @nWPZg=UfǶN qbo4.^;0t;ry4X>k%,pY,f"p,-t%3uc>~?a W (| bLʞbl<< Z@:gTd|@ CU:X7 ma s,|pE7l8/I97-qMnSBsu2 e#7 )`JlYp#75q,`s 9] (zLh,g 5" =4Fac3 ?2$ 0X 8 x;d3\(%6+"<18pؑaJѪ Q+?rʼ,N[).2K)bDH#RlVp6:ʾ- 1d,7A- aF*[I-ʼ9A(cL{. 'tA{1PӉ!3x208MQ}('7BQ(6:,[h+QAm8K /4偹/4Dq {BMBҔ"% *bVxUة|DZ!7NgE]8MtUJK9}JJLn# d@0`TZ-0X@AIo`0"{kay&{2l=(vSZ9bЃ  [ #謐(6} c0

Niea=`A3F@7M][c΂ zLa#[MMMnc9d8gN@0$#(Rz(UڪX*T 0 et=XC<:?P.. 7`5XC!0DVUHqkaZVɥ7  \%60@pTQf b<+(^UgSmkShn(&lP(ub0S(-(%#-Yd|)70ӄ(BK2ԊQd+4A.g@Ft4 ,6-Q40gL&= 8`UM8IBQ`SK)$CPZW&RνNa &e 4-E_ner@oJ.X~;`phNcjD@ܨ6d>k>X9ϖjB7}1XZ82a##.QVqKA-^тD@C>3 ~Y*"4xx38~P JcFYzLΫ3h+Q(Xa.@`QIcI+\܈6h "m*,@VU8µERp;xENl D# g -cR+pNw1Z6] Ɏ;thn#!&lwAzʪϼo`7~ vv4!c5LK. օ&q_jT++ 谞q 9+ƘY#s >}KL9,~O`^Bުju,% V@@Z1Q9StT<&l8dN簻 =]&-P=mo83tâO Tth},rذA[{4"Ş;-.~r`#ZI;Rȕl MjUKlY)4"(;B *uj R*׮4,cif p f!Cb 8:r0ږر/h+MۍbKI.P`ɍVqqs)kl<ٱ6;]'Nyr%c늈]6m\Ę o}Gsڎ֦t Ool1)?=nm3s`ZieĒ( "dUFB 1xrXc$@-%YsKs5'QNRMiPhi@S+>47z#WgXdMԄP?P\$` o(aL24H޼`(=L7hmsp-%ߴGYaupX1S\|9m9Ui:iqB7)s*rҍFa94trf0y&}#@" @1WgW d&0 Fq-045 @2-<M_-ks"$̂7F4qv(ߘ~q84Yex*6i֜FRvvɪghRUTm|7PAoyxPnM=L&౉M'T12R7ٌ..`GMh"]" #bыPk`h%Tc{4I+i .J;0:.>4}yԴeAM%X1_6)+0s[ss@ grs&5&3* Э;h `!o[vCoRCZP1,"M, %6>a  A/ # IN8PX riC ;E8G$BR5"0#jF{djt$b 8΄ɛ]I` 젩ӥ S&Y6°4cin`6m-px ˱:P1Œ15P)6&fZU:R9ϩk#]Jc ]Hapqr}2i"8!E-!4i4p `1JT[n%v%J2\#A!#M⽚&8q%Α$9_ @ AmIL꼽4Z{!2qN*MW pd)CViZՙ 6M VSl"V7`X 66 P+=P!@Ν@Nr bjF=y+T3IfAxɰH%4aqkRQ/@U\Ÿ9hnMb@ i~t %h1 ܀#z$hAYgM]KɬfZ|vR P <#9aӴf8SZfsOP7{6!]b xGNEE }JP)W+CF(%1f)T2XN,[hERWMF Ћ:e`2:\ Ɇa | ,1!Lh^)0{shFyQeN_mAsl Ko&6&o(Ff͙%fҘ lsDP*za<܁aS?S,(!q=ahkDYՃbԡ4oh, 2Mp h QR2z. $<;MFZФw9PoȡM(_+Єck" LV \1v3`БTLB#7q\ &Fa"3rƕ +Yj7>cap%X^f6'cJ7=&6>݇* 4Bэbk@҇0C8F{!=C(D%ń d% 4ۍp"<ĨM̎K8HAP 164UGԭS^핉X-A*m}+,T @K\Q׈mHwlϕ_dF avzD gDaX ll !@TNl|<Nc hGԱGeXb˜A ŽX4`>b[A`0=ܝsD>(@(dcbPq2ag9˼cFbWmd0+uaZu!F`͚. anSE_¡a! M%A pFB< Ha8vhՁ+ܚBPC<iw5AYL09en-D H4VI 8Jc8AlϘQW5;L6`by`(7f#dIypFIթcH!/d+ba !Xkqa\ أ hP˜q,LI -`T4΍@C&l,hB\8UĔ!8<)`;EؒV1[vc]&dYcV;V)fWV˕Q1XdarbG9!ϱǹ}zti3ݕ~g\'XGVNm&"LN4tӡIbX- ܝ*@t՝t4@HP^MlxF&& pp2 {vt{B +g'/+%A(ViRYh%AI{ a~N%f\md́`Μa؂ @ljffh}2E,g^y*?$ _:&"F+(FPpI1h'|xX$p% ..'%+0hC)W`^ z8ep%HИ"9IMp\ nWRٜ9r0c˖UZhhE}ghj?4)hތ"fX ƒ.B Yeέ]UѵVDkM U"ނN C9I"»ſNE9(2x KW Kݘ j#(%Vf-֙j#1J"YYڙLdDZBjf'dx l`ʒZ:L Ɋ՘6A6fWpFL<X@1L+lFxFԡdеBHmU =ouA#M( E\FK-SM)2Ʉpl H=̄ ],#?20\֙[Üp *0 002YbC6@6.\=jNW\ZaUc ?p#~p?'@ghvM#y%_JK:eA@lôp1U"*h{il MȀ) R(ME?9VQ1PT̀H{ 0̄|0M(CiAx2 @3kA)ǰ[n3߰306cs /30#s93#290 3#gs7k ?1//h@'IhAh?)83}F*e(]dNxU csx5s718602(3#ik19O60hs3 sÉtLEL%ɐ2T@X5&T( W"PxAA=(()P'a,hzaGg`bl)Mm\GSaRX' _PgDJnerEtG|1 01' 9Uo8XG< pp냈uyHSC.FELtGVx=8S B?pQYD@8M`'J_pA<'/\% @94̞iC``8F%|<.Z(UM|R*i*٬,m`9_2 /.8` Ȳt{AS[94+PE= #@4VcA 8g i.g "Ye >P*A䇵ZaƔYL7q1J`+j?iك W!:(!|aC4c.Xf*"3*).:Q YṟʨlJ'.KL ^/tc°"L+{b,ʮvsL#S"RHmCaO:q==,g:di%P #&pKG3F;F#"aMcZGZ8R M\` X 5L!عDpx20Ѝ 1āj%ܴ`7xk lF֫+^s<H}0S:\ ܒw 0!kgRJ9Ed*dF mQўyÈo`c+oAF ,B^f !Gi( Hkak!@6qPn1$W88{!k H~*,(*2jA4 A.@~qDlYu$"~vJ@2V xF7-htb<_Xٜ.Kwq"қtj.;01#8111x%| Zypc`h70K\ dDUv(Eo4C 1ábH `j!i55}X\ătDC:B >,AaqX и#%QY*L(@s[1Ϲ[(POz=җ,atiTH pS)tcaˑ%^aea 0|r-j$GHiM T,jP\$*<5i@B#Xc|oI~(*HPV:6G` Ѐ7 QH7 - .B YUKr !₏aK,y=؁h?ƃnq.⤈rnsgc%) + {LkQ㹩c@2&0-G AA-ac1Q:u`ɶ 37rĈIbfE'V@6\`#Cr*`T"dE  >r!i>X_V xr ؆!JW|H>@ T $`lZ0TA<*r ^CJ.O sA!Ѐ D#~ \@ JLp I\sn`jI3$`vd,+ erv*<(!˔` KÖN[ԩt(" AYHb$ݪ"cFWl&2CLV>ll^ H@"!Vad b0 j2 bƣRLs\i-on61NH \h.JA ZɺG  ϣdHOhie 'hƣd:R6!$]JL rK(1 thaa)DBAVd(r p  ΦAm)oBР *B: >At &F< `Dg-r:ß$.+BhNF P1\?b.h Bc -ZDE+*\bJ@и Qs4&C*x\3 6M<ʃ6tF>)fnlZaiB.E*B VAC`>^ QT% : d#>h#~~5'`NQ֠;e   ̶CDd@.GxA ތ$z$hພ6r.^c6o. A6\`\"-@ ^洠N*/a [\I'6U8ޯA|L.aʊ.RBÖd&Ein"!v ɠ."L r ~ `PoBVą`$ _a`Z$ Aa ` lcbLTNXЉġvOґ6\ѯ<"tDcA=gbt5KROK8S h^Βԉ(n&Aߴ=!`Φ ~@dN#PKLV&b(@: dcf`R*|vĀVA m`0XNikiIOI17HFN q8KN,+,sV;C\@CW˶(N08#[pd\rzrv8,apAW"$Oa & G| l(:L" d!vAQN| P6@V~J זrpO`yaB(dV> ~ pCXAab4 twAwi[6>kn#6r~P5sFG `F V0N42 ] fg706hl_Pf<@,8e|gד<@6O)) Ng-p@Eo&dV8?Te2vyy@a ( b9d,TupG 0)ja@QɘR$&tcACp52M0NB~*0fXx qŏ>r`0$v! 7D{Gg_> >pw|\a= :rg kÀtk&=r  A d `` HcEPß ޏlhA:X H g H` B)i[_~#miXO.%z"3~XR,<<tid~L̈ ̈3e+v_vAShq G{2Z!eP 8`} r?8@mim* !| bP+|8 AL| ~UU:I'&*lDH€a+B 9ݤbB DAࢵI+dnYz2r6~,ƒ2XKju@ȅ5/~Aߌ2Sl․ls237uo! -I ,2%"1?JˇFQ;&cLb x AD`DD|e Q,m`BX%P`&HJH_ `T`(X@ ^xribpL |h 4: #@jM2/HcnJhJxZu W?~h:'|* ڂVxH6/r>彚`{K x fx ݈l&z'&!>X@֠%<t)O/&pp< HBI"x!By]P!#D*Bn vA@&/@}JLE3c<Sttģ1DNM:~Œć4ѥN5B_XWkжċx^[h~gǟҫx`.)w DP'穨my9d)?YA@םP| UD*"x1n^HIA$&WȲq0G"]V '4|E|s!\,S- CZxCzIx)xHH $r ."8{hiH#Zg(#DyKJD1Ezg:Nn2 -R W p$0r# b0, Q牮F=PT4: ,3 x|X{C  ?@4tPAn1fPE0 v$BIb33b l0E~QEbɷC-P NHS';mVCNXW8EUO p3 p ݳuڃ=p# 28XT >GtHA^ę]cn $BGyGMmAKd2d-%9% t8'4ܱ'2xˆ! CD?$ #od3DE+mT`杒=Y Cw%c .+k\v>YnAlavh`:$bȘ8u B-0p!$%ɑy ȼA" !r} 0*6a)Q5`,MP0-[F Z0B B +=lR`;`Ȁ RUqx"&qK$B4 gA6aWWW #Zzz0 zb v'0F A no;ezc8o  ؀ ؐ~ᆶ<4#G5f *ЅbKP >V#cXKSo=d}0'wg %]T RB XN] fMG p5m 00r+ E `)h{P@7|38 U@+d+TЗ08Ɨ)Pk]qFP5Nu  Q RY! XA'T$ipϰH|%#؎ڦa0x3!r b1Jr ' "P&M!""d@ ;"$by覝s6!-LE dV&.7 `{ #v_=pWW I,i ɓ Q}P5 RLFOy  psPvtCFР2t U +ad 18@08h@ 3@]uU 6it)tCa : ] 0`py[ PF8!!u XvH%-VWJ1oyEp߉ Wysecx!LW;Y;oHo= ل.%=QD< 5*:- re0M VV`B 1thq` IĢ~80QDPh`{8J(dgPg`td(K@e0 0F 53:P"3a va@ry`[JABڣyA]q>s !%e  YToxbz#7 y$[ \ngJJn{)!J3, lت / p@ b] 2U(I`SQ^! NutF3PS`Z*@a 8? QhPt0 tP:g k QXQk1)ݱ p :Qst\⳩+ׂrawy\_Ѳ/{"'A\0e#2>Av+ywK+!F؎ׅ"9!WxyR#[Ƶe7@ * IВf!/WFN&]pAsdޠNFapAsYjaS2 /7a?'QRQ @@6`=D;@k/5^0--ܥ B R-:0 t$Ӏ o` ƐȤ zuk,Ǝ0xyIs``) _,^>b WxR'](:QI@ yYgzKMbeR .J{0SPc 0̀ذb[#" "ݴ ]0: _2 KpaQmc R PU"+I l .j rS^]Q7x+[|pZ,9`C (0 ]Ƿ` Qt$!u 'Œ4T rю Wx7ײxO‰JQBX[,|Vz HՍNz"нʩ   ݀ <  . 1Ѝm+P CP ĐХBI:0:!IS!} FEaeް^ 9^Y6p QIҰ }&47U0 >+c0h*A >zs!`8g+Qñ\3e5[7:A   Yq` ||`0 Fu28(>xF\ A x#7`%Wy7 #!ɩ&> p s  @ {e 26N -תlcr^K^B0 pk(Q"0 uzpa ( Q[@50`B*3 K+ AZU@ @p@ސr07 @`gps ԀoA,p.LS9A:NT'X}\NZ*;L$ⓃRIcC=שy*yK<\ʊ㚧yl Ia / k8P. N:p <1B  ,ǧѬ0RGQuB @6Y z6,2WI a}5^s   ? O?Z ߥ?WK8Ձh ijOBE$ 3[s,kQN20 a`90=]You \ .X'+{i"F0S²\՛*>:Ւ"pbplʩ`>Il' ±;@~$ J70e ό ؀Np !"楠Yv#5gc )' 9PN KA_Ȑs:MxGme-m J+K1_YeH[Bʂ@X6D*3AㅢK. !ԪI,TAVTXT5b)r,X =`p Zi%V'7xM0@b6-V'0`nԩL,A,son|j VZ8pؑ K @5\7\;6^غc&j.bRˉNbXeՅU\@1 ^ʉw%K誠ZJb q @m)hdej1Ek\q:ZbA$ !\Πr>t5DF!!|r+((@@ii&) ҋ > ~`o>J3f?c 0DCV # 3xx cx(2xBbj C)f`8.acacKc\F@I$IjD&nD\xo=rbVYLLqBTQx)&wj%' P dAHt7 j@. ~@E_B rTٙS%X`)GfD : 0 CZh,D%1:~P p^*g.&qs|^u"zM4C; c42M3NSKK0a:(mB !f 0YDXP 6T~Aqnln&S^>b!f 8xpO[$)`ioz!8#0AxhIco' Vt `rM%(Pke6X2lf(" qpM0|x(U"\Dc XXPc]8!!i?t-2 )-ސEzK\rcAN8#djLfFLms0ܡ85Dq3K`39cd)F"4gHvH$q^N5Łp}ԡ.AC d~ [2b8`X0-`HXP$7pqM/a: 0F 9mD_FAW ( ĠLjWL@D]%> $+D\@%=Hs0 tIGAQ%MPW ,i \PP '<%<D*a65V9`?PS鉡jcd;Q/xM~""@G ]diFԒS@Z[0K~w%l I(87`%9tZ/|Âpașְ^t|:|PŊf(3Pr ,4Єbv2XpcH Y"x%I%M)(4jo7h p9%<0츙bHK vU^7SOKXf@9ӁFt0v kaC\bWŠ% 6>v % "3p ma; d`An3S0 rv Hʅ51]ԌYjHpBXýPĠB-!_$q@]0r8EDB>ѕ2#`A>ܒG^"BP%D8Qi,ODfS8Vp#h(cAUϘ1vE/LqZA70! wXP1Q2AP)xGyb8 (?L ]B q)]5sʁ #B"=6k+`c0(- jPJdWwnLP֒fI &@25 qĵXN$VȀ+ ¯Dp@"aGB.HҮ>Lfonj.ij&O )>øzpd U}C"AFuWV'A0J0_}ŅF>?(6f[d^-Bx_*Pp8|_+;(XYd@hSc` `Q8"(z?5$": 7(" p\/jpG6r z3V;bQ 1J0#IHxH0W`l*>CZ1:2Ccx0H^0D;qHQ[d`riX0*@Hx14+PB?x)w+Gdr3oD7a!xCpX |-C ][b蘰~AH{i Mp3xXZ&j Ń@:%ɂ|!<p8b$x2΋?z:(U$pBDi 0t JAC4 ֨<5J#FI<H/468}oF7="갃!^X 0%aPM o+?$Q?xWp[ HGev1"`EcD:b(P0sI=(%8mxq>0O`:&q2?H ^oЀ4S4S((脘:y x6[8ZpB>:sjѳ9u)$mx 8(z ,-P!`̘dHs-oػᯖbV HB+9)}BoÛ67IlDR79`J XI,XF2$JE ؍b2Ȏ1* O*Ql(Oe>uM}"TS 1*`E˚WS&c`J7=$ !1X!h Sy'A5͠"P8~.O5ԖlD@br4@"%q$0x72XXp{2QS1/V҇ ڃ7ң7k+tB60Ԙ qb`б"b]>P[+[~pC I PoPL4Q xAY($.ۻ^5 %݈:87Y#Lgb jXQKj _Yu#48 tAYhKU6zY as ]qx5`5A2EQԘu{ýix[ {nN#X^kj[c8Cb!2;HPmfD1ب1dD7x tjS̚!`0W=IWo@ /`7Xs,xP*CUXX@-U;rTmm(.BE̦ٟApr@o`b-"zB/hVt n(@ dI0[ IM= K#8B`pWCC"f;XFQ^UtI 8UV~)΂}hw @j!d>(t XVTp,S&%*KC ЍAcP64qm,ȂՃ-테*ZxךxC.(%%ۅ"2(7QHƺ%|({$3ƈa P v9˷pU[ >fKHЅ>xE81ePVdr1P=$ 0!΂0,q"*@hܯ9|!,)or-Z:8 U0%eYoݭŝO?0P%H. z*(58 oPn 8mvx BGح3h426p3KU9m U\ \`ES_!x$X"U70[ Ȱx[Gȹ!7r;`1B1H5D<б% ЂI%#_O8nWxbxv%'{.ȇ~||xTZ8o4 P/PiR\,+Rhp-N "ZgZ(h2P9 xi .H4gȅrH ,\QUO. |v[Nd!r! 7OҐ7u=Zpx*`X[1Kr(GpqFFP !$ x3U] 0oXV[wIF۔dx!0] JK(Pi`HHN^B)bȥ$.+9Y(Fz2pby 3C)B0O^ Srݥ0B[&Cfu"X "``j-22\Q@ nE1fah@Y\va `!A W#~<)\ @ 87TP:r_ 2_ڦ.N9D h~ѽG0$A )tL_58DI pp$(AG\DAB5h\0N\)1dW,(64 , M5t|#F yLyë8pl#G@ @[ȡ7JdA` H.C8( $\5PWB3Q ɀ d݃5I4 hjB9x8 K&-\u084^Adl-T^(Ì( @G0pt\-KU@QU߹A|ޅ@p@gF 3AFQH,MG L!C/GhidM|`LFt\tݛ @Lf9 0$E.BopACOa^A@(B,@$)E),b~ȋk5cɞ7<44|`GQ]΀A"@(*L2Mh900G0EcC-12 RJ r-X&NX84-|ԁL @kQf@Dd)mEF9̀zdpU"= ,M $2BiD,,ApЃM>#$W%݈'_J? #1` x\dHp^hA"x 1|\&x7@"Ţ$zC @-իH0t  |k0w諴CJ.@\PP>NK$E<&`@9$􁻄HK %S1oTq +"DDH|l@܃S+@ \j]#؂F 2p)L4\@-G 59V)5ȁ%H0@M\A ,KQDCKU;V4 &MaD9A{2B- v^P@u0kګH@߲vxk0O`@-y{*T>(ۘDÝ0ņF ޤ޲ }RV $HA%%rL5xå(fPfC~ 9ۨ, Ҵ;E\$ *<($R"l L1܀(ÍuD}&D#2KG*̃._)Ai@A?F*`@@QeAs ,_ |1-\1AIN=8 =FrLm J`(XdAG105Aùiz d` 6Jt@^{ \QFFpAHfL 2Js-?Yq2tU=0TcA`{ !ltdćwAJR |Ɓe6܅ C'fX*+x%\B(1a,>M1DtLDo`A}<(E7@ȱ2)1> ԁNVXKw '%`p=jI؂V_DW36!`Ђ@jGG 0czD'%gMH7YtL0TRD,0 0=ɇL?cAB-@(7 }Lʦ?@@8a  \@ XtAFmG"m I9]A$ B"lFXdcCnJ.ܟ TD-[Q3h*tl0}h 7B=pk?Lc ,.Ath^@3u3(JJˤ'N_gmt@FsT'nn% _@ L{.=A<+O%%D|ຈM).<!go\Ϛ-ou<OƆo<RfX$i%@oHbѦ8lbM 0LzATv Tn 1E*qE¶?!{-l-(d5uʕm@!"ZB*]4r1Gj Q#_.۸!ZTfr 2M0ˎZl|x|$[PhWst N%B2b+z憠)SYd)(~Z!!~h(NjZ4,I `*m$~g&t!X쌆hC/4 6R 0JI% lYX%!VA SUVQP *,ʂMoцlBA: \g#\&QFAbdH 9EIX/^aSey&jr(,ȫΫ% h&Aba!rUIZ TEf7(*0{rIK䠷+6ǖ#.Ɇ+*TKfK:J~BDȨ ,=Ny儔 c.0hE9e[%O*e#s⡡r6j$c 8` /aY!+y^pA!6Q  eaa7F'EY ġ4 ]$7h7$$%eYTD@e ȷ҃P9̔Wjm눆$LJwXo9 ]|J82*M `kjCr@ȋl%npOvM, GCF.rPaARV/39Ґ61J["\` T|a`CTѐj=ۮ|' '8.ʡ7Ԅ =@+;Td C]ID1>ъ7(qo<}߀z1"F*04¦ v#+h7+Gis&٢ϓhA; K+LEHfLYYz fZj5tX4dWh!o2x7TY3QD IPuVb-D9e) FaBiRH{æ^L̓.AEVb,jw0QSb402^KJ> T8?2 !HJ:Is_~9l# R0yɛPmg h^ #xJ!0V]HOMd1T# 6׵.pq8,d9(% C^35 y#!=rUI8#T]!d(6 8 /@;o8pq: !|,(Jץ6874Ǵ0YsOt%U$Aߘ-gZ cRż2C! \@x$Q[/ hp#$(cK؄%De2` د!1FT ѩ!8Lv2`eS ,)t*LX؃EFSc]!)I*"Tҡ1L[Hė[D/ ,AIwWr%( ?EX#&*-07ޥ :!MtW@ Uu!uE.tRz^IĢ!Iڜ zuQxBһ-aG}Ā]m#IvyKqz?b#8 f7 hHH{c)2?Ꮹ$]3FԾw]*89ҍr 7ZB$9kl:CNxY1!7 KpC!f=j@ $f0+Ye.U @a6 b@~ $F&b VA .B#. X@ @.#=e>` >@l'43NĎSmݸc/`6a@L!=L!Al YX8#E2X"vNgĠ: @&ހZlbWV! >R"e8^P*l.`+Y&I̫k@-11\1b/0gR3R{1,fj0&5j"O^" %#A}8 ):G5pp%) 4B:>XR$C E b`$C+ P)XKpҨD`Fad =HXfC҃aWf FACh^TNr1f JNYJA^؁Y o%'j!]j" ~w\a Bd`+Ҩ!+'@/`h , (a%<'KV헌)9`FQ{!@eȉ(&fG!Q^|!X')dz"!`8|Vn DA?J? 0 >B:;aRCHD` $"zĢĴ!`VՂT!lv@aD X`N5Jl+-8@n.@^&:A &2BeI"sxLTQ%®I!@- ~r$, :Uw` `dabfWv/^w6-d{^1w 8i̊Ajz`v-@Gd$pd"Xљ%qQ5ԧ j#$%Pk]&@5Tp!fQ 8ggK|fiv=>A,^&&a 䅂'&  `JJ#GZa /Bk`fT4~@H5, eHbCedA.R,Aؽ87OGMB˔6|b# !K #-fq# 7B7Br Y@ꅋGՎ_JDMʁ`)`zzb >q\F$jڍ )br ʍ!RXQN@}u#8Zp@ ~bx@OwjT lb4. 6as/c/@d8 ! d(H䂍+J)wvd(j/,}A!8> ZaD.fN#ax}yD^'O"@+rkހ(F sk=,7 ">ݼ ɩ; 9I`x#Bbr8#b\aZ!έx#~+b"ހN`xl~UB0lR@ ڀZ/ ĄG+Fm{,~S9 / d9:1v#0Bơ恫T!r*ef"+Th!h1c""5RLDB&Y@s#pܡ!`ddyЛ'<`'#a |+Jd <`%)RV>:-.)b>F5r R;T(u#cRQ{ \A m->8@,l{D](@IxeA+ĉX6E/%!D`4\*ʆɯ&v$f @s*^&k't@e<H f[‰P;7m`7N8"Sf 0r,aˤ$U> [u:M;ƏQ)ӶGwN< v @+^\5@`7\.d8קaTZSu&bDܰ E5jX`m<BE4Y rQ jnp8*N||5kS%Ӣ`Y * ҋ)SpK\ڠHAܽ4$ 0@s1 5‚" uw\R`Q1`~ ؟S-[|FGT$3L/d6!}KdP7vc+7}D 0î҅H-`f.6  B>A ‰+Z\H3\Pȑ  JH0Wpf\0F\-9s+ׅ:@ X.Y%-j@&!65J7} )03g~l~d| @?W ~mr<, )p&]@x" -8r@>th;9[%QF'u&J v?Br?c"~/VB/ dΚ'dl̑BSP'SKAB( %QUtZQx@ބhIu\"6P PCBF0\SFBadQJ*O?r@!Q$DHWD GHRL pPB  <:ub E @KiHlv?$Tl\agF)2PEe5 ޼ljSr $[&ZUlU^bf'E'22B$]CB7nE@Av&eœFb ՁnF,1Ay&?1B%4 Y HA.} 3 cA蠓P*<̭ Q"Rn[XŮ?WD Y2GMq@ Rq(u/hD@ 5b(m ɍ*LKƄX*cV 'p-$daB\*2^%M{sبmC1)LдbOImKs&JfgP#KQB,q`+od-?1dE$qًm?ӛ qN"49}lWE ':E"@ *6~ ,C>,*٣⒐lwRHr I_cސ@В Z  "5F1 !Fn+~x؆1:6$8k}h?\ %ce2 B!E? f&К,Z> Bc$l }`Y+p n Xg봨?~rЀG ". XDcfRH>j!P,Q,Hg)d 'Ly@T#!xBǍY 7q>Fw%(TH&PmjsE8tx/ THQToQYnCpzP7q!p D?iωЂBG$0-`11P€S>uO,8-<'qoȉ8$F/$ a(,@Ku%D ]P־<+hf(cYK~&3T$ѯ DQ񠐂} w~hc4^(~SB)z| -"0F+6OPs_` Fa 9'1&~Q3]C?("r\~/WnRR_LaLD[j` &HSz3.TТh/Ɍ";lBQ %WBC; PK& ҶM8P h>#7 7: d2 $ Մ a (psq8'0@Z9H!p c)KCo`]&$@B`|әtJzu!a҂9Kz9`\ LHHQd!M )f%mEZJ(_ 1٢)Opү#jK a(D'!2 [ m3 B!6 z@Q@hdj#NI1$$VU 5HE[NϮ)) `H8TbUB#آh  evJ{,9Qu3tLJupBbqh Ж%PqKf4@/I\`?Y\()"KtxmEm%4!YRQ5K e #\{!U.ɽƧ%DbxB|L0@ra^ X 3`Ղ Ͷp 9 ya', hIWP m!e) e тqXvv*u $o)-$O @cFؽXlS_-v] F 3Ż" A(.20Up23@ ^`}$΁' aP=o*a<.+}}LpՂ ( ]M1b$S9 SR0I" Z!d\ 9`!Z0 ްv@7€ R,1-L`acUq<60m6MaER X?}j9Rn' 0[$^ !g|:΁ r' +  r]oMzcA ѩ0 0̊`@q\˚SI3 { M1$PnBSe|tlG  Jpe)eY,5ҺV_T@ ^ 3>IkP`QlVG ^|An:B 6rY(^ EOH($r Q   A2*J !- 02e"T "3Pzzg Ji ;V-!r-C8 ,R.W@} ԛx%UM#a K@JB\CH3Zˠ #>K1cV2N<3F~ # Vx   i tTUP@1;@DI< T83 ¨? 9& ئHf}HK. l*1TαR B`.$ o X(>:@u4\j5FY&` @p Ui 51icIA lS͌HP!LVB S qVg@g1fX@g&aؠ < xK#P nq9؀R`㔢(㌲j И Khňo>`ک 1N1rWꐠ&O"iEX\x1h-\0VjwBdt(PaF  : }in YDS.g@Xd9!9fëo8,.Y8< ~W8V&GiAsƣ@6R/d.MQ(2 \`g7݂5Ԧ6hWKѮNo $YXbfK MX i%8,IvG-69?TT& ۡE*0 ( #@$żm:~ 2!T  ҅|N.P8@ da%'|T1(ɁAlaD&$ Nh. vV`-ndu0$`NFҳBAm0'p)m$:gx#y8!: 8'CXc:b b!DT SAh,=GRF`B$@iԃY a Hw,Kebl U`K÷x 6igtdNA!!=!g,:_b Y3T0jm@2K".pYuG >ɏ~-6T҃,~P L:IzG>] "00H=" ,HBDpШUEV HZސ]@WyP%`O\\5UG3 ! ,JH ^28D f a \DÏ !! ; e(N S0@'J ޺{TokV^@xnIqWLgRhI0SXb)@Y@2jcزE0dXEূBd !Á&Mѷ:-xd7QKl(9laF 08( cmQ6$zy-oHp/!W.86@, -G3@@ % 4@6NN}(S # AOF$q K3ܠ KɎju.7Q ua PC(P5̀X^ǖ@j<l-XZA0 0qCQ m% uQA<@;,] @Pij0Na@l )꫰*=5'&ЕJ)s%+PYo?7xK"8|J+L 5~34.9&DZCc  J>s!A+,j,cA Ĕ Wb0AŐJJ zˍH"\t7$8(Pό33@+ ͭq3ZTADmb mlPz@++[M.$|0h @@s,ZK'@rF-7QLjJMp`kԜw9%~pznz{**$ a}N1] .@zq9v1?Kox6d 4p'g]1σXҰpg@AG==N\y4@I0 {C47dy@Њ X-hc-j. ljb~7 @s)E1ġoІx7Ţ AQT=)(L XE&MK]ʂp1-x8n qKBpodёp 7@ 3uj9YQV)DLcF[A۰ dh ͳ"Z4d jM&RL  ` ;`,ÓZGE+Fm٧@Eki~ȭX%9#'0P ^BA &9a[%! k`L p.MlD 9* 1@ ` mxzPi5scڀ*0#Y+P,#@PCFVš&8y#( ȁ>~@zwV֨H(CJL !-\AD;x6EH+6U\Iekd1Vq rfX %.0v,'b$CҤ9.aKcq"j`c <`0N!t=[{1\AD%(?B:68-xd`V]r0߾q* iLּVPn`(؞y0,aN[C :4HJs&=Tqt:ء\.gDpl3Fp-"% zLa'\gQŴDVlZG m3~ XK_|5 & qYpaxqz3 \\ʨ9PgFpS=}@}[\aP>8R}iv Ȫx>0DF.C(V @K6F, 1h#c3]$-@2nnwV`ӼF% V)!7Q [l11xL':4l̘@dp<Ӂ2<N*㶠?O'S]? 0BXټ}~SL]ߊOء‘}KA|s׺ f֖Di}p{10Hݹ0֡]z&zL Z `GU <6P pVv3o(7CE1Yfͣ`-nR= U'`WQgo"xdV4G1(7JAf W ݱ  &eSMS`g vtp1 Zo71$]14u-3a0xOSf`YbBjJzZ17hupӱއQs'w p4J!62 m-\TWmho"02>fH~0NC&(+i8 ^"!s1Vbqs-tg0FCdp6`a"8H;S6 Nxv8 qL4(Q0 grsxkLQؐ;Px{&8B:28DcASĕXCC`#j/r1\@ [ZTW %7u<; E`x#6uslrplKd+K K RXQt zw3;f }m:V@:` bPX ID4e})*WbOT1&7°[ PuZ Z!8mj6<b[@ -x  $ Q & "VR$6}-BWVl8G)`ϐ wYyW'rpsP:B4-hL T < [ @d@#jOr#^g[r#V$aZdb\5Сs3ru hb 1m߀ "F3k%f' ОC9q(HLJe E`P  1@7h1p \c:PS ?8F2AO`A٣ ʡ` T$qٶxaTx&d= %_1 ^s sO>J@ xnXkdJehE766

]` aȷFcp SVmZuS֊1t

&MK1eΤYM9o)NA S]L&Oے`8qLZ>pQF!a 1k!m~G!RK!nαn-`r08np 1I0#/PHZJ>0y|ğ8i9t ,#K6톩 q3FYP L`2%#;bkHoF'eR@N;&H&GOSOX:u aG !DQmR蜔Ziˤ7Zq#0Aء09FJ`DkMJ K k;9"zm C!K~k9b 6 gL6k.@DLĈ0F*0 @D0+Д%#F&tpPRug &z'@v J(V- Kx"@*SLm8+Rk#cX[1A"y^VMvو׈9Zt9$LBDƚܖhdC8,CRDfl;9lQu!}Ɋ6B/jLRyWSrRaڪ@ pYB<|k-"K*#p۶o+Oq vՊM$ߨ  W c4@n0%&4b@$ &8߸mDF (e }a0x( tESq  )F &Њ8hc?%-IabC|bZKmarLk٦.2b(nĩ%c'񫂥l"߀ 'cܚ,';62 n3LVp*nvTĹx>7w& {\fy&ˏU'm Lێ 80 r@ 4@N@@De c J(Wak\1C1oqvWcJEЏrĀx/؉*ԲF"2KK/v:y# x ]0ۄKfqkY?> u/: P<fNXJ!``"!,θ:_wo⢃+@ˆS9Ȯ[܀pih9!˜DLL@8.q_6 c%CT fT \f@H\! 68P1az܂T_3.4A$D`;!(숿 BN\a눚5oMX"5+!ŊkSO_ z`8ǂ }a^ H(Pa a`#X&`R6!"%ݓJ8Vkb۪d zB0R F~pv`(d!9jqBZ$ Ahu)$FAFЃo^ P6YpK r@1@hARVP ЫV29 Ɛ(v㈔ !'#ɝ(؀JѶ | @Y*낖/&h(H _i Pj@`;ӳVh +>т7(D3\3bh'I ? @j9mX8%9;dغSX-`D5> ^0gH GʋXH/9ɐ8Q31()B1$5#Bs=ً&q3DBHnB4F(q V(*HC>*4;(Cj  б*6 AHp:xM9ӸЄ^;)P9`K ``CYX]&Xo՘h/U"4 2 ƴ%-0F9 }7H`r`aX1#d-`.SЃ)hm =S8zC%9,۹ 0H BK< ]ܚCdixy KU4 :`=%^یߛY(Fcm/U0R]3 0wO)%6mB3bXsIGS 1 8Ah8g_qdy(ۂ/PH!Qˉ3aW^7Hx Nµ:wXX тeK(s39Im;ZA{9a+oW=уs+-438ax? ӻK}<ܛ Ho(aXD]@tpj  +q#`!M@ӵŔU՗p0 M$R"sU?R00쐀+sg (b8 )> Ђs(]48ʿrurSЅ`%\x^_^0L@docxfހHWAIW$ ͝ \!1%)􌾥2-`vXO-scOE ّOˆ&7b5JOx]H>[{\X s%i }BVZЅ:x-9ZL `X؈nE"R܃0Y Z@{`"YV\jئ@ک3^" VcFr pB^h TZ$&V 5҂2MC\%hI7Y +:H]@ ~2s)!ig9C82orDF;ٍɋLR-K6pMM8a2e2 ;TVC â霞e Y^:!V3Xj!jTbif Xẁ%.#0[w8B`o `D84d iɈC!Fx<7}h]gD)܀ZA( @0ݓJ=[$ Z0WXmNv!&@0 r U *#ʘ| lpާNS(^=p3*sVsȕGx,{qh>gtD#~D-o S()\/WHd "ڈۉT٨ 4{qz0h  IڗP^%xJ%_cu `ӂ=)PPYxbFm^N۞a48jsAЫ@g@sgo2axRZ58/4K@+1x>-g[ڀ`.[@ɐ6p<# ȇluzYE0Nw(`jB[nIO8t҂̺@1O>-0v$ea qzY؎G5 c9ADDPh(X{8#jTE#`d((UTw]Q$L??W4مyN)^͙(šxn1ƾPS mFB}2Zbd(!~e4 Rf-6w19={A:XD 7@?G0/ɝ !0 m_%]9`: V}`-[D{liԸ`>sKجQKKGp@7w'РB-ta4)TU nBE 5a A)FжlA Bo#Vĉ$.iaN14N@iK7Z kҩS!cĨ1@J.=jlLH1'A޸nu]j_30C<{#XΦ~@F[RҚ#[`d#ljN2HT *  ܄4xUY ;gueЄu;Za߰1@)[=\c?f]*Cpl;," 25!N"b)7u%IH3u0J J11}M|FC`ԑlX6?Ha5WzqTKpr7-̑MS`x+" {U[!&{S`x H YYb#[ RkB |#A`|64vtŖ bP4b`S)#vQsv@|7s|#Hs egp,] oÐke07$ߔ[C|2x&0@t}) H[sC;_$T#C$1,]%C9x}M|XTVg3&Vu5? !ff6R?eIqʉ_@C.#˜.g15Р#)"Ã7bB2d7FgP$cL+O X1 Mof7n-'M- {'|قCp[' L4& S95H @c,c!k+C2 6Fj?ztFMȃb;J:EC. 8 w$iA6pP't&uE"q"Q*(\"U@lw! @C0 oHKeOC`d͠g P?GJ">=ߓo~s*% D"$3Ep2\ /eJFv>\A3dRb!"Shc DbMt@ %;NsAG1\ 89N R=idHrgciD !011 DrЏ~v = I^kԢ>l`I 8!Mɕ>x(6Ү(+haL M&F7(\tAp$"PI6{=-`rz+t IxY 01LzD=9|"0Xts cJXMgϓ LB+*hzѕiihSH3mPXRppkX`2N(XYh=?68h0$N$1<ƏR0r/"Jh젇 pᛌ]= ;0l3ޥ`|hQǒ9'pc9E.$E lc(X$ÁdZ$:DQON8 '8ƽG!xXJx ~lXyC \aYJ!P\P_r^`z$Ǡ@3q͍37]jͻ1­ 0Y YIl!X(nC!uF/cs +8$'NVAϪ0A*hD8=!J^CHʚnjP" Nಖ X[oK Bιd@+x-LcD"`A~Ȕq7'xq@1Xi,. ` KOk4 /fF^Dcp! GgS%mtuldm$x"1pw'2~.DY@qwcȄ.` Zk  pp2- ܀'җ6t dCZ(',k ذ a"#JcF̚,u`h2n04v2V؝'$;h㓏F@|LM~GُE8&t"]4KqTȘ@D]0B¨B빀{.@- B9́4'l0?)Œ$\ 4?XN p8L;@ l0i RxX]}|ԵJvZ+X &@ |}\ӜD|GGhDFV L!-LuDJO$@ ^E^4AYj\* m zUƪ ;OmdlHW ]?PA}i\0 -8K)D10!7"KȰAԆAe<84>l .TF| ߎ):}VOHI7B>  & MMDT`/|CxOy'yH`x[XX0,(l;,AHPA1H=I'?%Vm11IDк@|% pB 3HXLidhFz A-:D:,l&B,%n K(Ⲩ.TC@P@(T ҂ClHH,@t]I"0adI1+PA)F<Ǫq80'Lw0(ěAD]B~V D釳EM9=a N0T[fZ(i !"D$q)R@,Rd'SȦ nUm>F-1oX/ؒcC44 `YƱ\)N A lhqB f;ėN2M(2,Cl6`"=(-R5_  $]B|]R9ꜗ|1X)h^" 6YбtHXpAYހ.xi:X-C?C*'@A`^;NmDl7H:DciMH8D}\jRYd#+ !  ݬ8%#jR$k:''MP'$f$,s% '=:[@d3N]_|, /9HK)K3 :0s/y2%Pk'/p\(,@P$|Bx[ρ`E;ѵqI p׹"q `( E iK%PBC/'L2RM'cdGsrQFhSiKTm|Be?LBE9\\|C1+P4 "*:P?8c?h4eXȒ ND-(3먉FQLoHqL48EQ{GG@)"0Yc0Oe 8:\t!l2rO8G`\*;U@i(jP *gF'9̿] @turBC9|~T4[S:6$(b&*K!jT;LHFDF,De26ln/ N䃸sLI~xh=#088nŒ&\A"F68pĈ`m3ts\cBK`zIb>ݰ>F@LMM[m+(`0CpZU. c/,iU+;`&$5>i4@ țb 8/;Nh)zӔZa!f-rRW*\n(b)gx.>xqd?]Y#2k 󵢡p ggy 0@&@|h&ʃ 2H-v'/.(Ƒvlc:PH$NyM>rP\`?Z!A"{1pA0¹kr0 wf֛Nd8 r7,t v*C′r6PjG Rf^?F?n6C)L$|\.*DL04@&Z8#aJ2Z[MĈzmX?>9B7`.1<,h!1|dr{P:tZDīF{8A Q-\  !W$!C7-,Y\SLV2!E @ hbB'Ј< ;,ʑ-00@2v "!O)1MT*Йɤ$& d8:u%6Ane0:+9%[_xYְ5 I#QXp20rf Tp% K!P)x-iF]vQ;y@$#g1ҩbc\NAc? CIJPRD ,1N`:%#E ]p@F}EV|"c`21C%.aKa ```+la0\ZeGй=hb +BY;"c⳷OK*nH#eZ>ЊaZpA,☦3EJ9 AҷZzXO>*g B\oÝLhKN)@^ns2qa.N`IK\11 @HT_Ȳdei(ᄞatauWlɁ60G5n6 |Vm(R eh 2@ օZen"&,@RI|7NXpMHPӼm[p4G 1 o,#/WWEpS0b EZ5—PgopŎb$0B+&9I7e-YӚ>8+0|#tq( ^lԌ̾pR[],\@ "ЂJH#"i2a[F4ZY Eje#*B ~"}'`7*Gy4xф H) 䐇/}mNH@1&\0'"`t!Laux. DMMPAΫ~uQsI *ҡ)V pfj+:!*:T@+,!k.@ (> CxT\$<( Z/-D |"$K&j؎+~:0P)I"#"ʠ+bA(` &np[IAA 'li"@ހ ZJ"AGKj9lHk,y"n?yAF Jao*k`&TaE]Z7A `>bB6$ n|Y"H 3V.  >d06r "&792"b!ʭZJSvR+ʩAw *'A; c*- !<'` /i !9`ʀ)qB) Ta;e@xKݺżC @5*U- F3V!BG@j< . ;XIojNgK>7@ FLj.3Gq+Jv\gH`4 `XlB*AA (/'H4U_lR0۸ *$h W)?E 2BAG|p:-Pg W=3M..TaGo N‹a8/!2h2Y(PF 5j[5@`J*uaE0̐^%s .#w7N|(7-`@L Sʉ*"%[͜\9y:c})|@OA*az 'ah/A` hkJ*SqR[:x@Ȯv>.[n;IZVC0*V&(@GJWe#Nx[࠲<`P6dt*@`@H8500 2Vb[N* @-, la a88 8@0(vs#N/H\d\a k%vDw-weS^ kw. {*BD"`;@RE 4'f{ @h 7)U&bnG*B@ApR@@U,!) G/f";J )BE@TGa Lu H8A"5C.O R;LI@0/R`+V! B$/(.Ԁyޠ\؟ ` &0֌u.&b,.&,.w8+yK!U@n | /*ЀapH"H1w)t &4˃y99 xl#` TVp6X6`NJ IIm.sz fa@` @@ө§kɤ9y A!7+"F ޠ/8`R@ΉtwZj⴫S y֡a:a EA r"*TZ/d&v T1md]a >K0A{pGUul^@O#.@XBpn#B@4FlH`ʚlNCnKLZA`m_'&Y"PJ3[ T)yYn nAO!0? Pa_O_o'> Zva@aWMaN^&@5'ڕ).lԣ|+V gb 1+0+a4/nj {+PaY}+6|[+ZaXW!tEE+"?!".r OD,>! X_YwQ͠a*MEܢ$eqDLvSO|`"|bJШ|orOE!¬ηr'F= piվ}˩`˲z1X(i d*`8GmJ1ZŅ ^. A1b`vt#90X`I8 YFe'[0V?|cK7A1A-[)L}"0G*HZb3ٞ=ъvVd6$y7 > 0`R/b+#nB]^?z* ,C .`h+\;%)XDl@\=y*Eܶ,fz C.!(#s ( .9Ds?b#5Đ 1DbF.߰QI|(LsK9$4J)fQ `&M^E4'SlCaUU)PEVs5fe-;be_Xc%lx ]a:c`Ygr Fb͜zhD g2.7nEm`-[==(ad@-q7 wm5 PXSٲ5bu$W]3YXbZ4Ik 'ls6[ 7و`x -,lEtΦfDl(Q[Grj֫աJ' ;Zhsc? L:O;g0&0˜eSpE 5kƲ .D,@ 4;D5i4l|#%0[?Y'DBfO>i\$U"l|ZdCW_1济]A6JPEO3 1NOk@ՈOhbϰii†8zcA  6b)FE8*q$6mhtB6t*VbM2BPLbA) lI/x Ygb P Bkaϱ%p6wF`Ql)͢^C%KVvK"w=NzB9<#@0B!g!a{R1Hz]5rl$;BoJ R`D![&us,TdcJ 9LbW8AXY04u:\x4#)\V72,G@&$E-?@RR)f@(6` ~[l#lQ[@У'ʋ MD=zbg(ML_r8Zآ Fil4BJsiE6)Jqr! `0̡} #2Iz(\(.dhABg!`#laVss9%KPc \`G|#$& [;Ꮴ8\QWcZ ق0#hsYUIlr-hKU^BJ-c%ַʸ']Lr4: jiD#n00V]T_˨㲸MDF0vP^Tj7:4 F@h(#(V. ^9 [7$("14"IE5V v@77P (Pʚ67Q0*=ѐj%I&,}! O>Ccd_GP`ˋg A=0& J+[ѓED(fJXd:QmJTn5UQfm^Tsp!(Hk!_6_F T`a'% C&Bݞ`6KH# . 'Ԁ|q!5>`|zr[?AY57`*sOiK{Iғ)LT+84ɲE=)D 1 Yq_dzSB+f'IbH[n`gkQ`@MfΛAle0%nqÏV rZ(ta-k -(y azi_|¥lKC3禰 t1tEJ--`0IMu@ s }uf GS1S1Fr[1cQw#x (=m2<0 #XPV d@=&#yt^,8V*W=4*F8"r4l,QYz`Yb)d6[oEiN(d{].aC E*P `L15|fԳ%s{V#=sRzp5{rB~6Fȁ^u@*4F!Iq T0 g_F u0v h T$H>{/wI=$Lr%mAaeUeg&,z_0Mppv 0Hl(W_$e^u=QYeY)"zYzᏋc|*jdZ}DP#@A$ 8=_5 o  S]GFR5y#<0_V` v

g=APr$+|F?_P#7@Sz[(B~/tzqzbh4op r`2$ YX' `h1p<+W# x1rlI,s552Mbdw\}ɠ&l1ٗ*`K( E(a]yh{)cLLiÅ$fv]S60t 9,}x|&0s,SAZQ͉1YlM-4zppY^ ޠG@ P  ' bs1DR\+C\|G$ <¨r#S_jw %MR 2c tF oF+DAiRiXYAMaeKj6bsuA̡EZXP0?Ha'B,V ,A5@ Y1*K=G!Mcsb$K @ @"Kq 1H`KayT^$Գ$HP^bR%2+]!%spJ@ :@p>C`4 AvL g{g)Q] A'dUK)=BWEƑE~GBLh0g ŧ1ƀ\;`p /Y^%tisT*0!%FM M p q3GG0TFIsQBlhP"gIT=92ewd[a >l1wI * ZnplA_%Z}]q*-MUizwŠ q* 6JUA Kp 0#7T:=ao YpuD(RX: Kz0*~‚} MI0`D \)FSgTg^w}&1UhzwwVlx=P%Hl$W@@7hy= }Z pNbYijRDV<5 KIsQ.IP*cC6_D10+\E$Wg:M yR(i^V:3 # ,/ $G/$&a#\ʕ ITBl!IMaf! c @ NUvPY"tAYA`x*b5P7Z[#R^҄ 6ǣ80rs6­gZA*i8a]dY6iq#%F ZSFASG?v] Q ֠crYA`)0Y1ZQl~2ĆUe2g!Wлt1rSH0>s$G) gWۚ Ѐ< v!{{`&("owFr_UHtzgH=! гCE{zmëŗL]mH5嫒<$:Rm^{rπ}IQPʄ_]S/;3wl#Ǔ|0B>~>V'dB86!H8{ EH$s=hQ l}vH)`s %գ[?Ip+m-cUhx` 4B5Sڏuj̤1qvZcp<'5Li},8DBS G.,LA0N7Piddi\`dXr`50T13%e p%l\Yr1(\[i!#v%] pԆ yԵˠ@Ebp R w~U^,e\c(-ZNΪW(bBA i>>\slg5BPvr, %4bTpLiMPtjvO gԐR,$H36 U5e2' llѨ@*3]! Ln_~NMHXdV~bSdȻ5[F-Yd5қ#@*Ggc@o&_P{S oMFp)t ;0 #`H-K`_q aawdUj#vU/4y%bP_KduqU Cӵea\$Ba֏]AZ*zͼLL,MsGt}_$qiNos3‚pc hX׋)]̸DHn61КMR 7n0زgÞ(CS`ҀժuZlRŚQ;tjqjذG\W EȾW\uPAk}*Q!@R*bS#s T9+XrǐϝG41b2bX˝;I"ą88fi#a଑oMߊ0K\?/`r Fҧ?c ؁$`c 6AK,BM4)#)kJ**bq#C ? +GwG-P-\HQGMAu%FUO%0nc@hC6Ox bcpn؆}Ri1kKv*6*ovU. !l-׮ԩ{H aX邕!D% .`dYdqse2?d1#GJ&- Q@t # Pޱ"+ed4tnFb-9`է2"{ZV5ݓ4bVN ä䫀SwcK Cʝ: y>r LxQ" K1lDsl!]rGMZ# q5hȜ(.s U3M KVSjmaFQSd1y:۰tQ+IFH҅.FzW~@`5=?!ALb1""\"U;GZzD;a~I|cjl7iȈ}v ZjIwvKRRgլ$Qe%`B`!kyK.$'N ЏjsS" N#X#ZߴFR@gY BU)V~s@*VŲ\T o diE!Xa]5d>rѕ.42[;SK:A{Л=iEv Fn K/sUoOFTW|"g`C|-|,#:;dBJQ&*nU$F*6L`dA'> S0 JBB RY ig K3ZyubBa)?v^Y8$'@,p~bi;ș] PO'W"x6R~]D2-;y7:iz:_zwZs=d {($qƏ\5=koW|:,+j ]g]@3T / i|\xLpG6c.Z"T. EsSIYY0P32#`ZPք4ZB p7@"P.F4ǒ&QiNrtcu?5essjo =+f!oN0;^"gO Nq*=Ah !R;G@YkEѐj hh+@`9x:0xzn'ȫ#@,H,Y~pмȱ<,Kȁ1=-c=ڂ3}">9ȁ^)3>x0Jk#ڈ9)7٘@S9ӈц5?Ñ -ys(WkVc: Hh 69~+90P+Hj aSQTPW0(;h6p `"k` AB(_Mȼ y[t`7} i7(\2ӊ>gTZ6Ȉ4ح638c#Шrp`H< 4D/s>8" ã!$ Q;(0Esk;()RU 3E9[ EAh/P)`?xO #`s=Ї 6ڡsXH D7B~pY0(H0vi[0" P ~Ey #۫yHLZ*$x H Qֱ|ȯ?6H;D 0L?5Ę9Jpk+z9%SjrI$(8iJKAx2E`;eS瘃 pll[h(6!tjӱHM .}$39Xw"YG"E@\8cȈ `dʇ..(rx(pܜT?Y9F 1)ZA듕ZC#$ӆ>j* YOdN (ȰGY0PЪ`QÚKI/GPQ 0쇾4ʱ'pPҢK04 ,~e"",@ȢN0"طx ԡ͌ WHYA۬0HH01ԨqGwq8:NHM4T9ڮD@̘>Mΰ.cN0Cܩ$A,%XW>\* ͱПI9PD9`8Ђ@eHq菧6rW (A\Fk؀Є؀4caBf,` qPLH+4zm=3_ ,]@%=)yM8.U8xȊ`"/?$SHDܲ)(ᤌ>$9z7у+Q4.\/P0Ǡ!@-O>G9(P5=cIA;5xj=-`IH܆1 5 xM؀(_;9!#Hܴ݄ht1PpH(0=֌0 բҊ~x:%.0lŵt͈ `|c)ZYˆ\XH#4 >BDDtؑyJ8BCGR.$8и>qh`< Uҳï*?9F`eFXWbxgx#ءnRJMFnp c0 WOUJ$@o!A@=@B2BpL" F@'R|0*t3 m68x08]U:]IA)>)tpɍʨ 92婊9 9JD)09OD2U4ۍΕ8N`A pYc.jj`cPhAdd!lbd`lgWxP]8>(y3 '[/͈P=VDЋA|y_ȅ  8WUBXok܌(@3=4afѺ>v)P@ΖԊ*A m/ک.Ag f94ADF7j:ݙD)&~IЩЀP``F茀fӆSeSBQjK0c< v[ZW+0VO90Ⱥ]ЅI(0ti V[5 ^=^5)T_o/.:߫MIP3+Ӊ<ɏ>ŭ1 ۥ fD]@B@挑WAgK9>]s- ;x?y0}KɢZ2! y!(84`< wtI>d`rV@9'[8aЀ [ p{y/ |}>̊؄0 cV+)B-I+'%_1S(w.8d'SC3-1l0܇nly'o &,xj[X _C, wd0^CzXp7,>:Ҩg>0qHЪ= hӣ X8`>!J&@8FSۣs=H!q&}Pp'N *dNJْboieґ#֤iG{HLQ%`/†#Nx1c$fF"#1? y %1X0lٲq's}sC9mv(8x`Дr$Ǎ3\Eǻw}b:-A06WAeTR+@M  B@I 1s(D~`&-;dD{H081'UȈĄ3='"U G8x N\QHwI(հ8dQgYYLdDyTDvH$Dp@Dʰ$wCm"-T9Ѥ  6K@pFAj^xM4EMdzlx.3Wq J6:Bz@V+8D DB8N */t%x"O?EB# PcFd5IQG%jI#Qe9Zq`M w!$Iʟ&&-ye3┰AD0Săw`8[&G=AD5<9$P0@ H+p#Z  @ b585b8-t$U+ԳnAŇ;pffJY*۸"N: s2HF snLw:<u0ƻ,1[-g"K_#^p HDp?[ &Oݠ"5ܢ Yi! $-jj۲MmwIasc@)ӪGW d#x[H֟ "&a% 'pU Rp=pD_Q)vb+bx" b„ʜN#*$C>F<+-#dqQOX 78Fe5e\u@ Gڷ8WHRQh/BA 94'hmqF_14$r 0|5ZA H/(zA mRc!lp+Kn^IlXB',(>56,;Oj+;NB’n%u1#xz lҹG++ A^1bH|J9`j & ZXo tBUé CϡSSY{5t5yVְђo0X qyTx:\V ҡú}QP@POZXX@BpQSHBA4Yꭂ]=ĂKKԞ`-('LDFFIĠ#HЅ M(#tlF8UGGPy} aei v΋ƱS~EK PRE> a}-ߧ$݃ O깂CҠ=(#M:%6/\2&f]W!nȣBdUqSyGu i9[DD_|M$, 5Dd]D}|tГ@(ϤhalJg FDxO/ e\BTTMij$)< @P1i6º#[U_\M yUqTBEJ|ΡHc~߮ձ1אʇFeb)h+,_ s`c< `eQ½n)FXAOAJM,H vdGлt% ŝ^xD\ɢ z%IZAh8C \*•le^lӀ# ÜJqP75·x1GL EvmY(MĄbDF E7F mҫP FapH?iipjKA" l@PEA"QJmpQ$Y D|Dق8-"oY%'J5\n*>& -xCXf\*!Le<> C[b\ CM1h^F^ب8co`vˁlTb3M+=:Qd;Bir <9!K|:֒@LLޥQ2o+03NO(.[-+{ H@NJ.JU@:X@:O%ݩ=?ą=E-Hu!DZ\H C,D RCkiCHl42Bc%4ĶDhE%#pBFDKY4F/* hDtsCFJ/vI{l/t/!yD7fbu8ˁxH"X7A13P003H0{CBĜ|pd(x }XxZAKg`aK/aƔ9%4ƍ)؊fO? bC!P&EFV.,Z6XU.\ X @ =z k1 )꒘ڤjc 6_,9g9<3cGcWi;U;>%Va VĴC@R"Ѕ_D<go>j%gΥKlρΆ#0뗎ز{?Wu= *(@=Gbժ]< @ [\a蒖`I61iAPÙ IZȡa\.d!ʊRK=Z  ~$ZJLʹb KTۋ!@!+1ǨJ*^x1,2l3ͰE t)Eg bGʹl3䔓900=`ǘ,ި=N s|@Va ^Z?8E 5#$ @[Ч=6 ,٣oKqiX *ʯ/Ej C%1aG)άR.B,,ʲ2G":+#+=ӎ kM, 4 NDЙGabMY[2ޘ`Q#l(bk(N-fXe<΃u=zfS n-hQ GقvOaf84Z 'rEh͂y@ ȧ 5-o+\dkD2]I/k&y0k4ƾ*- J2=xΙmO-eѲlle\32(L6atCގNJ3[0##L@6`Y0@<O| XU@jgJCJх\b]`!$[g iX#l` b pmR8]X1Bn5T@n֝ny]Kq۱+_#&afKz$ A1'</tؒ4GDjLexe2K(좗4&g0yϫ&j56 ?ڈ71<f;N+4%[8P liK\.`*U8Zz\2P 2.?ԂAZ !4h0 ~І %,y$ >Ι\A\bZiW!!+ܳ1<s,!&Cw% -[/Y43+deR\fyX)LqVfY%2~s?-#1̞Hq6>hUcl+0[. DY+҃LDQoS]L+V`H-R`AaKlBA0 . lCpYT"A@  Db.ZQ0vIL6̥A0t$dܶlZ-1غeeݖ }i0`Sˠ*ck\B3>iXE:τ c ZpVh.Kt)pFWu@q`x#32+k)q Xq0i18@'%QƐ.x.!7Q Ð@@-cOGb ) F\T/*\Ta( D0_Xc$8{]<%&M}I cܴ6mc D-7D(xT&cc`DgD:Җ] ̝9J%r)8+J\~8b@`ۀBId !3  `hhH a&c$nd`Ȍkqnv?yl۠oajҼDcUx>HJsKιaXD1h#?]R @2ud`9XTh dĩg8=R !o#PjW(H ;;-gUr.[8.ힰEl% -:E[20ֶ70cI RbB6ZXpT[ <~c-oŘGG[?*qIpRFReOvp zK0 n]h*I @QD9 R0bY1!sU-:% \mEV`Fѱ'N`YPNƆ$4!zarExE"$~Π%&N`BB]f`r |-CpG.4J@C`nV6ح Nk'B`QĀЁ 6-6N 'NѬ"4r/6H$=2w+R2ft`pOFf"J6/6E x<Ȇ<'! £&RR`j/(jVz g4b- BDXAuFWX Fe †*Z b XP]b " vL\>KC ^bPc,܂.'1č!=87dL<4I3#=bcXE `o2qb m,fF+@m5ca62ef8̆A3`oQ| pa.Q!/&\h{2D (bd3%&2uZ bjArh$`,[",̲q "P1&^)%#~˭"b܄l~2la÷02VС C/4,`CP0B$зн`J,oSoDc:&(S/0c\ =xAMZBh7Lnq3B`2zj&Ё&ON !:M4B$&>/aH0`֔!ᮒ)oMFZ Pbp80&r[|h-5Ms`\Aڀ! Rbb"DL:a`Va\nƘ| #J=w:JQA0 `C82> #Qn|`F`J"=eg~AvHQl=> 2v|'N14<AeaϘأ5#NVPք<7@tF3ON$SFIhdHdpa N Aadܖ `s?oã=< *Q((m:cRM^VHAgB!JK- VRB,K%~! n%@Dة L=%z$dT' ! 6.?bЁ\H[3cЃ-#g&#E,]E|p5F>u0`1LBmqSQ vQO$mSoX/MF9+# +PmX ) YSc!p >v ɂi2xGp'!NuT]fBk x! 'S-r%& %8%UGXbAx 0ݵ ɹcM RZOm @Tbg@paNZSGxQƃ$ZKFMTy mF2kaU/Hcj7*p_#9>!!a4<ҴM<>o3v 7% )B.u%(ԓ%@6a .kzǀ>dZBܠPPB,! c&$ b Bu2J l @=t2aa?(O1J.O!H& +1D_)se>c5x 1C#E.أ7Mp׌|ye6xC>ڴ>U'\zڠp!>ANB#a`s^b!)v!!%$4B>UY!ꡳ='ja18ۢ!0 [a^;&T'D&!H`Bj(kKFa\4LF^` Rxw 又?- ia!D!CvzĀ>aHUj!~) )X µi !@+t'Clv:g(lǏ CI2$ ]\"QNA(|P. q8$Ն QͣX@pUTB @-(-,HV (<k ʵ#TYj+G돑;z|kE-(S 0,0 FA@ %@ 䆶;8.\z ·a%c\Z}2^`.(v0Cn`]t,!ktCUQNA9& Qp>\00lbGCK(bHƬC@4NA,бFPt,;āQzQ@CXe52d`rI9|glZU%\فlhs`hseX"qҚFWWE%}CZ+FvdiZ" #fɹ h ,0 hrI+*:Glws zXg$e] }+"w#8>AP KCBӈ-(*pCH>$ 4<.RPJM-((( U V.8\nbfa&|ۧv}HZ\:ħaWNZ$bx)@|ya` e2߁A5ƈ8CUw^m o"[WY)WSu<'k)*dF1F.3xR)@/k 3I {N_PUt[0 pFAp`vC+,!Aq0P|"$rX"ZA$@,AYp>]rO ]H5;:TוomJf_"Н]@L0AslI#JmD3? 00ɂO?!$jq8jqVܠ=*pC bM\T_Ac?,L! R ``!pta9D .0-bt?'P8p d b'S^(L(K!8,Tc`KHYN,Q8dDn'q Ȟ i , @(᭨8*KCS -oSahdW$I(FkbK&=KjFuZA BC־!K,9` 2ޖt)Lx2ج#KT]և>-9Q@p8'ԇHD.X> a f`9ọ,` SKB'݉^PɦGA ^9ȁ/|ZPׇv=d`XЃ0 UcZ-2^ȥȥdKz7$,Z$3ىLBCUtڄ9 2fx %(FG4 W%a* B3 b\}*C=X;5>KG0R4FR&G Qc/a9<Ƞ0q#s6.F]EgDZ#-r3XFgxr ԡ`V:$*BddP 87'Va_tM/,ڄ`%Yf i\G?0/qMf)79K5<?pp0e".N(/}5o+g,X kd.6gy|Np5;͵ÍQ0h`E/<\so4]ANA;Nh%S(4dְ-6!>nh "Q|(+kX4 B ]['> PE#ւt* x4+X쾂HEdhq@b!`He-Xu,lg"E*< Q !'8o*F /s3zx%,w쩽-t71Ё ܻyG_ 7$1jNQPp:C4k&l߹"F~_(U։Q`bxv>B @]xCʁtA xC'܊Ǎ&hQ?VЎ +!5٨<[U`YfAБPy.|2:c^2:tzkD3aH?N悅jM̧4op 4 goy(E qsD74-(>,2CXC96bT  0aP0 kdq % "P2.,Gm%U& `G<88THh/#w; j@o0[x@$dH" @$ FyDi+QM^ gfMLAe* pWS Dj}Qԇ}t9#8 9J;,v6U:D"h0p Π^k!)p!& R(",D  0ALƐYq}&b5Uk 0FYrND%-P }OD}΁TQ;Y7` YPu wY%pAU  K܅  iS{R Q4%h9t yīԬ9;h.m96=9ps9S] / 1]`8r-C (pBJA2 UM v P2@ Qf mj "O\o-` `=TZO2+(⤭ֻQŁH} }@ 9v@Q 7hQڥ\X9\`L Q}pq*P-(12Ӣ]8hn尘> rsbG;g0s=<PQ0K?i MSi $iYU'ٔF@]!-] RJ2 &VGXt{j9f}4<m=q}< -8'PP~~D eM@='U}-Qڸ@ ~hVR  WP}އ Zp P ]0 W^:gpSO׋apo`V&;׋HVQ0pP"{ {` 4~/3Pvd'` [b 0vF!PUFt*qA  o=|'쮰1ڮoh q=[3[5ڣ=Z*1T |Q4TQ 5{"A =y+%A Wĺ47 |p?" 4@c`p5 Rƌ 3#X|0U+# #ؐ% L+FI췰~cT*o8P PQzX.=DVT[^v3KlL^`0nذ H\'rX#Ņ- t) 0&L]L0>'ઃxDT@@4d`\enAtA#\l@A d` HhC ^.@**,bŧjӐ S B( xqF0>1f @ # piŮ2\49Jвg +xZIj+#˭OZe%)Ѧ̜ACskDY5SHtetƔ+$aK$5ހ _B{']8cX8uxȱ dH\X!},P J_Vag [8 ^`%|5e }P$H4S kAbLKݾrD\2ZaiMr Ee0_Т rEԳ)ę$t>vxPD&2&(9Q*@a !9L#s 1)ZhaxYz~g9@ 5:rP pb(2YF7gx`ԯ Z 4Y K17H2w`'4 Cj ʁ` ʽ vcMÝ qY$tA,Po'Ƴ>(YPV|CRXDK'a)c:B*upq=HD"x`;,Dnpbe0;g&=leְ@l\XN +J@xK @Nqdԓ~ :Na,q7QaF•FJP0p0r; ̐Ȕ (F]3F(p еKPɷ01Ix?@Eʔx8[$`Qpi4(15(9 ʅPA+S 8 KMH@h&}Hk ml9[(ȉaBQc,gO81[0 (.wCB,B8}|8_SȚK/Y&Np7pr6 @ 1 #:,bI9m*QxoH-@xh(7T@#(R…?xWKdJUU$H (j* p>8 N8љhgRˤ&d#A F츀.UPh@a8S ىC@G8 i 8O((a,tHU6Z{ yKEAb7lH(LCPK6`D\lتW7qP[`jep+ 8 )OhfjV8]`d@ C8/I ۙtG(͘2 9gmij hdrX!t]I ɂ0-$Swxjxh0 {i[ h8U0XSǛ<.5VPVW8-I(P!{T%x [8)4-0LURеpFЂ%ͩ0_6`)pA= 肵Y&%O 25)(d  `I`[`D ?poL&[*-j`0 hMם jwxA!q[P[(EHj㋴))(5Px(WP$Lq bHr`]0;0;(`#6*Œ ۜVN$kAH)(P .b38=рWt@L 3_.h9% ]= Rqm) Pxd7X[̿rAaGNr DzR2{!z"Dop<8.z0"F-=]9-IIc*io8Cc za`rx]Ylm\8nвUQYjܝ8HŎAoH/@ xtML\X6c@)cxghk#0R:@@>@uI3a\Fuuxg >=0 `9v2V 5jxjI Hoņ ^y(#xTZ sO @&Ђ`U 7p?-}&n`ZKh^KA  ȅ+]Xg*?< " H adN S { P)XU5B . *#JɢQg# )0jv>HT0 J<)mQ_PIMJ8lL%x7w\.8Qq+5XQH&HF"eX)"fD 1FK6 (Ţ,`inyU:crx {8y`ro=kB k HG,o9X #S.Y:`}P$l }2h CNbPPB Ued(dI{L1%CF6J΄Vj`9F0OMwgϨ&L9E^ ] ?0sC;@r¬EV$ا7 @%r$^N4$!DV % 1b- X* 6.Tf`0p1]@vcZK.bZ A@ÄΠrӗ_!!uחO 0 S7ׅBpT?ӏF " 3x(p@ `  (iQ!D`T*_g(HRI`6O[ 0OFd+l9pN %WWaM+ɽQGus`h&\C"@"sj# s371KL.J}b C,%Cd PHɰ Xb,%Y $UC[VЧ`$TZ,E +(*b ;\PYd4C7.۔CV1vH<^TaIa<F2O/3H$@"٩"Q(at$ O=fE! 6ʐ9@/JcU#)1n OOS}[4%GQ'`8y`9v3]bE ƚȽuS Wi5(DHeydJ0]}7K$1b1fvR %s$JF)p ޥt C؀*MSRedDB{|?p|yw"0t<O_m />%T@U䐃/ 3ш yÁU@E>@(b$YN`J8 1SHP+pјV(p3KL u8rJ8xЇg& ŰC"xPoA1x0; l2tbp;dSr_ H)`He0 :<"# C4 `v0D@)a,4Y1D+P@~XiTܸ'@Ђ0tؘ$ՅXF @Pr>ʣ VR 0@DHt:klZb7{-FdQ6IAʡ G: *F JrB4 2r{"#cdxbAJz>ؓ* z30 S֦-K qՆ5MQ"=3pch<5 @. @S3>0U50 $2 bB`oŞ KP`@vt*T+@aFЍQb-#CH>q UOz0ה#,6W U!;8Z&`1ܡ$,)DUxx.(ߑO5A?k V3}pUQ#invp@7geY (q.˲U$e=_D1F12p!7@k45@ALH ` +͘ep, : LRMxN*JbWPn` P>8%Ip ͫ Y>dHT?UXe a@z3>N &2 i88BFj3g2(( !cKrZE{8 E EC\0HBE]}"0dOL%7؂+,&H*e9`IlЌ38 3lCސ@MsP0_$ [,*`p5hM|\71^VC+DFz@FFXq\ir<21?10a"a? TEd8a2FFFk.i; %#%8͐)t%ӠYL CY C$h@h O3A|Ul }B1*qӹn4nE*GX*P, CpaCp0EKGMpu8}(u D t88A>ׅ1HdAX? /܀[zM/BMWHHOQxCt)@g$A,@ޤAS];$"@>R|nh í@*&6]"Cؐyb-EIHSF@>4 Ja鏕M10vFX|A 2e"Ϛ,Xh9&CL+F0dS C\A<\B7H0ha@| Hb X$e! C5%CʁV2)Dy9I8y:C)#2LZE9-0(VId!PD(6$oDJ <(TBAvH*0݉\@\k$Oly8 R )=?@4d%8NGm؂5FcfI@ < \n,ǺžCAFzcr!BP^38FBT"K04'[FbI`@>`0G  HlDG^bC*CLBBKHC0?jQjMeSDoߴ6*Xe\ PFvă0`@p;Lbl+[^C@MFC)CNI*)\#1LtA|4E +ݣdr ʇ-|f}_*A;}i1+kdv82"8jt L $ eJI%(GVRT C T @kP&Ȁ/)C D>S ODQ1DKĄ Ѓ)ߕDTV-| %pvppdDtA CCuG Ck*|8hbC4d6 *ЅHx0myl–@f:Vg0d2Dt&T -+=CD13PNB LA5 CB540dD-0L>lGx؏Sn%|Cw,LI.P$0lTt C)B] U2DOU^.MMp>#jqF@2lǞD -pHY?HQ$@Y:EB@0 @ݬAh@I튵 T 2CSOKt2D JL;(` F+C_FI܃Qf06Sh0ՆX S>GHF(C23Gs-X@PaUwb؍7fxD8:1)t9 jíYă75ضˈk *(8 ,lՇ%@;3LF#Pm`U`N+RXVdDtn„dD<Էl_>X0'VqAKRpI  ^S-ni(OA,`,A!JD i-^bIB P@ވ0q@m8aVOFpA< 7SCT(h*aVlܥ޹Hq940G#ؔK*^q=v;/+MIh tD|h>OvDpx !Dw,oxA0gv g&THlR]A?Bm|d+d#ڲ]kF }DgD'U f8* ;xI8B51LH?2TCtJ g_ g PA9/t }%BH!D|2S*7&TA pI"tG֫ @@¿3ȑ|; $,‘Qg&aJUF=x Cy)TLb)g.H&8]X@ S&3 |X/ R-QF \0@ xٺLZӥ  H0#)V1DVn樈 -CU̱ؐ Ȅ  ]XȰ [0i׶mm#FݮCGM(wtm2OHfІ! cP1iyW@N U|K׼*[x&z G*6 A|" #e(fBhQB Y l,* aJN5^c(@XIJg,6e= h9h:Iar('Ɗil^bDmSA,х=,I&aDUzFQb!|gK[K.9b[\9"!Z1TR h2eazNXCKPh Š0P`Am| ; &w0($&@" -f9nQbnІ%&45!&t@qy7|RLt \bZ} PCe cHT (b*NI&aZ !zQZEƪ:/E76t[k%lcC[@`R9ڄs&!9, BT:B/);O8U1zƲТ;2CQ/ 8* a IND`$@AM)0-Ĺn! [Q[2C ! +qeYM/IXq;&P@D7pꀖy$ДBP1+j/8\9Kig0s1 P ^z@"=CG- r>Y< ybn޶6胱*Po %ؠ@ ? r AЅ&@ fhH tLYz#(h! 6W4H3┆Z*] '~" .鄏bH"7B  q@F&Й*+W?!Fް7V%(,Lo\PdE\1K":zFYeDIIP \q֦pCCY\H/zB;؁6Ę -  0̪l0\+pNwQ7'&Fs}%B d-!L 3E0JstFcE*p*U.ʁxg /eU@qI(1V^\N"Ÿ1C 0*p3ѡ0 * S80,CbQ>"$4|hEE"kdu[13D E%lğLz$l9pf\  2aZbҊg59DZ\&oKtbn"ڰ66U}~y0HFK6(t!S? C9Nqj`ʫtQ/EQE1L)j$"a@#\*V^ FP vR %\@ A&^6 aQ d - 0b1  o,"3Ƥ" ȅhB N' l/N!6.b`.` $L:h%܌W2 LR\![696f@: ;cr*DMB %z3 4+CB}3Ze`+* "b`"HV6" V,V <IC+ -\< 6*±F& xr2dz-QN 50!F1FP8Ja Vb%UȠ{h~"WbSrAL fZfOH )^")J6b bDKFX 3@+:* '"10 l(!@,=^GH#Ān lkvj `3QЍta " ֠MB.F1(`LL1,"1 L z5k@㉤cm&!a!vF@7+66Rhdej"!R'VȨ)abRր"^. , )8N+.  c&r` BDJ9$!`2"(`6b!* ha.;(:"nD>C +q RqD6'. PTTr ? \@l79p\ol & 7meĴ6lWJ "6Nͪ@t 8)ʭ3+z|~/XGŠG{-b@OC 0P !Nډ"aX'2J&7\6 ?8AJ(,@ ^!m)rEf#>A\`d@#ʡ55nȆ*Mkc6`2 ``o͂6t:H *@n`@AHԡl N 6";A$\a=b `fN d&! X{&\X>aE(*"Gi! \U-cB^1 "@ NJH``"t!B\9i~CU+JBۄ2F5k,AhXX6!rEto+R vL6:``"nsn,b_S@8 Dnj0ci76:/WhkLr6y,gc3 :5.@<5N66],C0bw! Cцa0"#vH.H@ͩh#tx:!"0 Q /H6N hw)T P*HHC!W):AW)m^L3$vo܌v@Txwuoд"Llն ;x 8 \cicr|aio[(")p7nBD $JBv[b :c5جؠ* @ez!APaࡱ!)@ 0!WZ/a"B7ȶޠ a`e,aڀ~ot dT)GA G:X &`9 lܷl82G6LgO.6Ul#!N+A!Hy084zBrǻ҄@2 zaqA&aH Bxz!֕ӄrc"0"͓ra NlȻPXz!! iO tR+["6H`;lԅb7K,paRgvmj3ef&,*R W686HNo"6 rjaS5r /=Xa 0@exfMhhZ83FU,"[cQiH`uh ,h }bc4$ z~ " 22%J6.v$J.80 (99 V(Z`" XwOzXE`aei0րxAm&oRRB-"1 aBj. lV(JdSX|A!& tBNY66:C T[ltPN(2,qI3( t9Gf=B;!Gv47%tY~Z֕4%@cI%YeYxMhA3o43`e<QM X RGsgBAAabSb'F+6Q@du8UTS)HBEP.5K=uqش-` +?sw\m` VD nX~8TUP,("!O-da #$O>IN\w!u t4k*Up㏭TVF (H32I >iPæDKb ]$| aؠFJ daMĤLAH4np#;C8lhaC t}'e9XPJY `o| /~HbbKB\ `qBZm tUB* Q(BALS!AzW>m!U&!Cμ{>`DGy`2Ajr e@!d9`G9\ ,H k8"z-!FXVq KbH*xlx tlp8'v8P\9mX՞]Q*70pUKn:aK@Ӆs\E.vEƠUF]bY}2yy9}R9!+$LgB(*Ir,@:*]6i .; PV 9j &Hf"XCj21TgF mx`0q[isA| /&jIŁM(|F5fvD[)!vXpNqSC3Q}ҟ\8e ߱bgc@;9>sѠo8'rZbn7 TX)QHn;-ğpn #T!DS;\Ve# Uʑ ^V N LM 2t1 tl Òߝ- , 1FS+EY!.r3\+q a9R -繢R[>`g@Fv >!ϸl7vxٝ:ri8F2a} b o7|U6ar Qt)!mPip ^ "UpQs ! ++b/@$0+:TD$u@ w 5tCG`[ "|mF-"72 {WKk×<qK Z2P OB ҁ60}e PQ,pI3Esm!!`gfQw DCD cB0417|9bZq @ .w$yH p83P!P & ]?0&1~ SNWq"$ V24,Dtxr 4ېnT6VL7)j]1QDQs) ܐ 109 a $0Yl ph&9]7p26G' 3^1[Q`Y C$ qQ}Ap@? C 4|tɶ@1 N 2@-s >NN V8rLPrQ ئ] `ba =? 5Pk 02R002?f ABd ܠa( AQPY)4FYAm@ PI(|B'G3`2L[qk 1\rPAW0RaArEP p9@' 3BTMQ@PЖjH "p.}C4m@3!= LQ7L?w' $KԀ ) |#nNFt r* )4Yq2FA Wu)VؑOPMXz0D>}'9JQ Z  pJaP cBqK3"ArE@fq_":  p![ c$ԑk:1onA4'j&c?L ƠGx@- 991ʌ  NYB& k0O}J-a) }0 :  a n{b%@,A-jT70<`ps ăR&A"qIusT:/ @quBhT$QiaKhFkAPg @h]ʩsP 2+E("A'#q9+R 'x uo@y(/%T+|vr1F^Nt)0XxRm?p2ˑRk*` iK\r!M7FQ p0a!J /Q3WVlZqEA/+ QLB*YEsU!+/ Rf0o` 1q1R+5?ķp:C &!U l ;KHZC OP ܑX)s s 6P Fr?Q `Z*fe1CG*@(a@%vր[1YߠPZb _÷s6aY qP%Bl@0 +@E0YAClPn*Lhpt + >| V! OSi8L9 Aȼd_ QpIʣYQ 0>EPm2U}a!R4s6{]t@|F<1u:cEPfhVe{IY0@s\kpP L, <|M1Ag`$FT>-ޕϘ3j/(^B &=O|#A.1БyjB A 0 g '0rEA<_" .k4I&|6YqCف!rpD600 &fCJ7 Ak=ᦚl !b 8qK6pd <" |Z t!:d Q@$FBY,S2ڑ ZUc53Upcq $k| |",TBsԄ t8a wBAXʺ!7ZYX8YW5-n0.A Jy[h[ @p8醡8`q~q91 X1DCV~eKΥJ9:Ȏ@C;6] *E9K,gw`O}l#( G2`:>y'@yUd^,lQiB̹M#3xhU8jDٶh F5ZL%,F?&Zx+l $N9QyE !@UpN \*X˧)觍@T# Qp 3`lHF oI ,8ld Ita2+@l - YXQ )s,@1tلp}O#҈Gxx {1.H#,rcj\q9Ѕ1K\fe 8 \>?p^'8qbV,1GpF;'yR}`*%9(G2x0I CM#=\\ц00)O+I@*>YQ rf7ghq#C'v)r V+2 D`C+! A}!20@ pd (XbÓElqH% ;`pAp`GfEA<#t!20}"*0e: YRqCAYQb=# ʈfbRP ^P+c' } 97R20fѩ1i_?d0BvU?A-xẒ')u-0{*a1|rP,H䠓: G4V)9NGbXpEᶴ {X t̺T2#m܆6+!"eL#u@J+!c$Ƀ<YUBu;FA)/6^ivhEP9nN7b-kywԎ,1b(+C5ψ0VzdjkK}Ɖ6'h4*' x 1PayAdA5dϢof1J"28 Ya,{IfEKsTŚ 5I#q)񜗶PmN:pCf/Av̅XN|F(UA @7HFJ:4C$K<>s`M#NY[k7"^f/n*f(rK3H ɣ@NA 5"1bjmȰpC) l3^ JDqqqF/).`Lj9GBO֌նgh ̣CH1y2I& #_\V|BIP #w<$bI(r1Ff I@ 㒦ЅT\:%#t>A9#6 dؑ :` 4ZPS!;z9I+bS ًX `ЃPa؅d82"'0S(e8@PQ 2@ZJ @cp#q;Y ("P:1p.Ģ7 㰬3zw5 ,`~Ȃ%@8Z%Jg 0 0Sq; 0v*?!;g`s QhkoD8 #/ ҈#H2oTg<X*9F0|=$\ȣ^ԋKEQ, 7=І~`eH2Q(8USCz8[h2Ȏ$h (P::K#Hl {I(8K>y=4V8]x:hGkYӐ@O1 .o虶F8xt `%):0gp#h 7nă`[ (mP9O[KiFO BPH *(*G!YepC!8&)p@8z0I81B1S 1: `u1!W(9PC'ThD~J, F`b/d:hOU"UpFβF؉op撋 XFH2Nh)lc*"nKH0[H :<=ȭ7b@@ȇ`J"Fp^)тR= x0H?a'Ǭ Y!0p&Up(BȪ@>^`..l$l 7`PyqQ ,a*۳Љhy8PlH ؘ x@"b(0# (s<`؁<8%K4" h =kV G8}, τ"\XӃ.7TdF:bwÅKӉga:*U`d8 ͈] )Y |T 18VXFxȫZIАjxC@TWWZՙP R<#;Za Ȃ0Т࠙Ń > .Tq5̊V@s x$ 6 Ibix#=PP2W[W8P>0PN"! VΓB0 aY4ЈrV`E%5DI|P9iIHF (X۪ ` `7+Zi4!0ؒ2[}G~HZ01,44ŇyQIФ P]=3c:ƺ`2)ilMô4 @_<̀`P,6X"5cҚ|T;LeCh֣!*QAzFśFK&OMah`AX2T:  w-/2䳊W4GфFp )Y2M08$T2xT @ZchU\N:P .HQӊY 97ԑ7BF5HeSyfx6kAi#&\M{D]p GCPG0064iRH')nՔ>l'_K.d4O4QbrkЄqcϽAs`-l' 7QĂ:i\ +PMoQ1tъsJah +K ԌF h cPG-TWm5mjpN`-vզr=N;E< 1ZL5' o|"AzhsN"@ (Kx@`,3 |92(B*iq=.,t-7W5϶:( J"=qCudQ7C+Z `@P7 9vN7P(A N1؀B$o:HQ % L.M1oH I`9a="kpA(9c @A 0#  (am  9#tCҤA k$. pW $/)]8E$ o8np, %;GD x  &CP0,!o/C밄7PhrVj0σ\WrlS\2e| >Q%=H70"a d@6D ;4R4fJ b ;V-a hRdh>Y"~4j ( QU@@ rnm(C'0f\ЁgtsYNP8 uGj8X9jc5Qƃ:U)Hp\ mhSڰBt츀`;Y1aD,F Fo>ь01'Ds7 FG`HEM# `,9-M'vqT=³NA 4 .l0ЀAQmE$戋q:L:VƓ$fFSh` & D<e%o.$ I{< syP_] Nfזc2Ƣ_"Є2Sp(Q9E31(A Ps-`vod0d+ afO-a <Њ1Ȅ#X](x.+G=zٌ\@'Xw6O XE)F Te\2$( YVuO|,?@;M֊h ޙ-ksygL_K3:<.(),yw d6-@y߁@ͬ C  2ake+pA'p`3DsGpN

M>Uˋsq6d{N(`L '5;9 j0Ņlb: b̕1)yXt7s8BxpP_)Ѯs V|" KRt W =tӄvY@.33xb0(x@ `ɯO>go1Ps =ܰ<&9|_Tj:)B7&- a^Ee*y/a)-r8 "٪c~!bE1R.?)А049=,aHG9 75H+t`32͋p T)pF rpoU -O 8GDLPop&@lN$PR|eU ]q O'Z)' 0x3tDڠ Qo73"6#U(F=)!I/Ӏn7Zpt ЀT- pjh3mHTeuuP@?%r^&#GYPqgV hSXpxBI؃bp d`g42g6,8ȄLdD4:xz'K$^g 5u R%D7N_'0!1dho$` U*S|S#\: @ 6 #X'7M9 eWT 9qL0vJ:  ex T^"uAN+|83/84QpNh xoQw%RqOAO]?aQnyp p< Z@VoEWFM9~C3"'v2` 7DsJHD `7 i3^,1^4S!'ƐCuUG DoB!yָI=<*`*NJW{!9 p=$ \ v 2(M47G Ur9,s" ȀH!SoGrA33oP"S$7A3`х9NSJShuXoG 0PAhT1)VanAp \[@'[`63#p TP ` Bgⓐm:Ew034P `b'4$9T3.\GMdX\MzS\FP{#-:57NJud-yT` x' p@ Z qɺO073 ?b4NV1!MI>+( 6s,  \ 0!rB <M#'] ߰'R&pcQ; `au`NX>U0NL 6^;-! ;0{pk0 +}^4 `¸  m1qLv34V&6 T@ Pg<K[Ra{rSF4V9 ,@ p p#xgS; r =5uDL*!<% 1 j:UC= \F` r +;f(h(q3-gG}3 `PFy <0a@ ꋝFw Uisp{bxgWwTSF# {o `Ę?}0m k c@c Y ]%,6Y!4aHب!* `;(Р i }2<$d?8s> iDqo x,p v " *idAdR'TBu E#`@M TJ{D,   r 3lX040 \Zp 60Vp!$aIm0Yq}\ "`a ѧ [;ۡ$t4BFD#s``210Qid 0"id 9SkCtDq l )P0Ӿ@b`7 up;ƆuACǙ=S q '6xփR,ꛂF2 Zp |mPVVR-V@2%gzdiC!( r }N$GC(B$Dt' p 0ӱ[ 3-Ӏr=OuIP]H-5lԚg mmqg zNK~<@=DG5\p[PXԢJJ24(70BUDL' P}pt p(T r UF Mڂ[ ]0nAe)D 0 L]B۵5`  MBsG~!>QH86ܸ Kx[\Se .=VS~H í8t @Ae ppoj Us P 0Ӝo!q~xoO~un5PPc+>>#'Q;#/N2W 8p%84s~ >Hd]Vvɖ^;g 1h"! sK . ":#M  pg OJ{P'GC)AJ0ۜ !21F  NsR@BwLj1uCڃ4b>tmߨ| ۳e(; dW 99UP ^YPb0ٲc 'p=qT` z\ ;P 8,0O00p AAR`EAi`Jæ b@ >:fspڠ`%MEN{Q  2#\pz 79p˹SS*yUN>l{4h[F  CF ;!2Fu  ؾ `C܉/gP@K Q ?P ppA4ɠ|Jj J_&\uq>cȑ%')!:ŚTmzEؑizn5z=q9Lap;qs7Ğa '(V߾Yt'ST1)2Nds44li7cZT2"F|kj#RWd1ˬ9p3 Ĕ詫 V0E lFkdUG vډ{ASN9pD#2Z%@EѦ+Fp! VZG;<~ '"b!ONV># :o!Rb%xDs (գ8tx8P8CkF;k246\n•~ boYqL 5\Cvr0]xd.@ `m桎# $!m@`;G$#тo@(L1 FLRʋȶ .9ȈT4$KY`:zوӈJВoP&X6R'%w:N ͅ\!j-(r##9D=Y&q12޳FLbI:Qw(6B1HĈg'2&#aЈZ)F-†#o&61#cF,}\+6Xlnsٌ.h/hP0\&NT`@)x8 ZǃUA:Fa 7$ %1 iERQu#ØްD+֘;Lv |(( C h Ӗ6@"K`7F*6 , T!"`q ؃>la E  '`^FtxLtA."2SqKAD=,a 9xźi$$Mu00]b" #O@#0?`ӽ3 $6=HS}~竏6~ 0jqK4X'$l 6Uɸ45zN#bpKHmfDN2!3:#|$Bށ@\ՙ<Nsd -SD#I!8G yQh2MǴ~~M&57I(8ed#`G@%a~"RA'8HG^2A̩i1)5+i-3K[[F20DUz$#J]dKq|s-|-юHVGr42tGql; 7(}>Z1U͡>,i_jq:0дoUxrBAxN_%Q)H.`ޖk (cHciyykp2av$CxF]Lq& k @_;ha '-yѵb7=29s O5 E_6ъ>p :A7&~D=-q_vT@d}O8 uD a8Cl߀դ0Q)HPK#U-o\[;o)d&^wEV\4/ A9 :\hM`?1֠KG d#!lV45bIs(G9G z"Z S D=Q &0! )VgF4z0ϗUXHEpT8 Ȣ"چ+Dn38 `iIU[-aT('7ai'(""v@E~< 0# -9~ψh"Xo+_ ?0T 404Qgp*g890x> `9N@0%#:Ѕ>S#Tb6X[(6zOX02S&*D }7h7A~`L3$cͪI k=ڃMbdbL]6[.JX!&jKtJЮ@ e[ankJ˱X2d'-(= ӠV TN(P(+9HvHb)PNhb2~ŠKPKEt1(%oO^(꘨(ZD<0 #K``6T2"Wڀ%@(9<,Y1 1^ҋ.0ńˈ@& %q%=̌л%8h|hHKHԗ2bѸ݊5cr…7 0ʈ p8 V-+.a]D 0 YT% ڃ {TΧ>#x6K *Sj@R(aX{Yw e17hw@?:e /P/-(*T2b|%Sʊ9H|l> Yu3:.ΉJSK&h !!1-T}Ռ(a`}z`. (FO--؂(o`. ѫH~Y…IZ'6DЭD@ѤÉ]%y8rxg(0:6&m ŢJ2[&\}ZRi@90Ћ@7>qh84@3W&@)<<ȃ-5Ђ0#"Ha- ;Dؕ!9D LdhD Ohb ID;XP `?v1'hяiI`:2 U!,-iJ6V&ž%p]R)%k b :9(DgQ@Ѐ7 *%q@i`bva; 5+uWc&;q&k3m(c* X;'JIئ\H.-Ý$4^YspgFE13A98yXcdx^x IO78 VkZ\:Dތ& !|)=2 *xxojHbJY؄J@HB j +o}*}e}q c{Va(<)C=ZH JĭD% ЅrIh搘~y~|cm.dȅ s M8Xbck͈Қr`DV:,xIZ}H9B2@I^;$A![ 3-uapOFXkL$lHj nYm;~;GT5TЂЃvFN*>^e7bH( 3&O{edH0v=ɡVyIxS &>N*ӆmha [> NnvJMwmyC\>nߵd^xk-&!('~T&i`?hoBNՆF݈8{"gHTp`$1ysH>Ųb | 6xWImcHN@ɖ^@HkhQp%3AN>kB$[ N a#,-E! KlNq1|86)lr`e̊U><4%Kp7 .DB㑭s^,m `pp^ XWHPr-`T `Ni@&jAKd$Ÿmm0qa$ޠ~@Gy' '*0"z$.< P)eJ姻 :)Q$A[(n;/ PnYav&074$+,4>?ˮZ{HhX:6.ho>FŅ.Av8@gBZωM'YcH໦ !BsIJ"=gpXv;^#28rL" r0idhD@JXģyIuiT\ QfK`2 Ж (ʭMB4 (JY,=ᎤL?`!Z|BZPA!у P@$+ a7am|%8p\(L `H@7`7a|:ZPKHD9ghCFh+J_e8U,lg+U&80͈v!EX;mac 7(w'z$( xrޗ w!{\H%c&<X /p)M`EN0* v4XnJ= #aر qTUZ gW b[ raI údkKA b# Ѧ'lMM4Qg:{atp! ٹCcZT " ed-H%AbE-Bțh-De<􃂽 $ N. PBd@N:qƢƚK]?ԥ 8%B"%, 3؊ހpPٶv`&I`ٺ*ܩ;B|uܥ MC$=?hJT,0LL ?`6'ȥW11$nPu<# 䪔FՉbhqZL''1 @L0[ݨjFTlNzA>T0@^M ̈́:i^,D G-t~e+"b".@m9B (;(׽ PAo!8PKH@3b)C0CB)\\?h(,AаCR\rB"40 KXGMlM7p@BXB<HY> BTؓZ$h $B\O )I@%vB`@a7Tk`ob\րB ҷ C(*B#F*M@1IA# 2Ț C1hީ\!]vP&e /,AܕMYh lBD΁%PӆZ a(<EZM1F=Ŏ`֯ixCspr] 1aPNҳ)|&F"J%2v?\B+!C"*xa @p@(%jxJ0,E,V~ɘkn.<1(X /dABα'fK|LcZVM[?hB2C~-=UA^]%@,ALj@C dnP@( <.{D #@$BLτqO"d3j]i ;%(pnHi #?0B1/ȰML<3o(< 1<:A;3 LWkz5YG?$`J5bA{sCLkbPit;`AD RJԚɒ|10xP.fs1 ʘrrAv0g #l$hCɚC,lӰ΁}“ף1@ ԁn1@$2q(l⪒ Xɟ`3`D"qD`YP`B|p4o| ;|{׽FTE%* ʜht98 4TuOoCrŢ~i<:3i(\qD4DDUYCQRN/BP)ci b4<u.θ*,MfXu^eʟhFgKoa ;Ӑ8?9N6'F}>ǘ %'ȆnhEHгA H͑κ8OH:Q`|;3]???LYs }t=M(`X4AU1# 49 `F$ĩ  4.-瀞<0b dLhqbW k. @̘hFNj3U6FMd9dȥGFfV[z*֬ٲ,Zۀ=ƬF01όݻ6|qbņ{8!GV,|9qbrv;dnZ)&i.-g7iq6\X[1a<|==a;*8ǎof'S6;A]T c.lawQ1lt *䰊c.K")9ZfK *6+@{ kj9 9-`ʒ`i=X 4 a <$:`(FQB+I >HVj[.ZMDs5Jax8gɈF N`'NNIJa  `n4n h@< -N8ŽNQbm טAs&*[x+A[>1b Ė9laKX&6EQL l$K-@k-[ΠHŒ0FyGH*x` VI D+4FCd037Ub19Pt3F+*E(S;KRCF@C%a'?VS!V,1%갤%ȶ ciO$%bOeiK;EiF@Ê*a<,m7-[Rxz< x X1,$\EO#/*ʄGX"&!t TxL9Nsw jܳюPZ iK$&0)&pBxg:&c PDM/\8"-f{.NiK n3Qڌ9@;%Vf x@ 0EE#*R XR`#`{(Zr4=@8AbI & K6:.E"(Jjb|b:X=b/ cQM]`CXRL;bІ젅Wfy(h C)чؤ5`SE.x-D ͧ51!^HrCL.'F`C-0c3eA޺ʉs\P؅=8;J&Rvd6xS2 !TGJ6ÅhJ(PaiuAj% xr.eGSp46vgI`})vb*o243&ؙ֠у$FPK;%,xY%Z7;eKU2HpSIQj$rC]bet.Ո]pU& Qc\c 8+h&tOf,diB<k3mDc?~sjzq w)T)$ h =^aX b @ ١MFJ.NIoC <(pqoRIOtK+s 8PxbK\L*!"v]U.9~A*EHx_P` \ K|B܃bDl@۩w.E`t88O1)7`?f-;04v 9VLN!ewf n!h 1 dJ uf"o<k,;{ żHlaT^#F^}\qL@: S _7 p ^:d"X6̧S9%SUC|SnB&Љd;w07U\ *bbSZ!9g@)q[#ܘXYثiB. @QHD"7x @bFQL@F% *:-+Ɉ,4: 7= `*{m 6E `)` $0* uL1{B0r]h &C#b^MAH J0-w?Ulmh㍺ёSZ+@4i5Naɓf4Q}l9IjĤ 'g hm͂<` j%-\{ag*E#@ ~5.rnQp5P.j|ĆL "Nlьf)ǂ[@G61$+LoP4YVE)~'fD48 ̏U];`*p?D|hdBbJ @AC d6AC Z?Zg&"ZZAEJ&(m \*jAFp,D$]b: g%+% ,FrA&4Au0 !&n'&~Mo#\4H&*aנI.. E Rc>M;b+NJA@&69*Npph!VFC.n:L%&&:rUT CA5a@4" D8Ea.Zfx'Fmf^P11C0m[~pG$msjO+^:C Ej@+&ԶQ& oA&y(xa #nb90PRpA ``fԄ4 ߍACO6/&Q 8ed !&:I0rxH. v`x)(B&\)-ムqB",p )op"F3X` _@qt8,e 0&8kv#+=#x^r+#z.@/yq䴠jKؐcHjjJC >Wx!σUAɳ,Hb%㮌$P @!`€Xv)$OAVi))EjpAo\bNȿ ` 8,%sb' z-V  ޲ȡ0T?e@ LQ/sCFc`?0 ` idĀ 7ǒB~Md.M6# ' @1!5+PA rF%C ILnġ  ~bh"oJ0 $-ȂN@qKF )^,a*v(ƭSIz+cbN"Lbg4 ŨN@C;J \`&] i,B@&.\@S_|-ֲ@o =XdPD4TgTV&LE;tT&JbmM d&XdAZa(%Z"ttJ1n)*>ſ-q%PH.*."MiA+IHC04P  < O6+:0@@0tBCrC&` 6E& fR6>l3da6A O98Ae~i@bbX b`zF~A6%+ʲhLnZd)oDZ.HǕ\AjZFJr@@fJ`4.N@@} }Sj/c"J-#.n" Xk%*r JA'_'Sk*T[)J,!>6`uN &*GoS84TYWV!kTdѧd7&@Ջy{wvʇ!Dg!TJAAw#@LPcxӍ#@`Z[,kZG or VS'!6&@pBo]Z,S^RRn^ ~nAróOA~`-7+y2y=Ӵ 2O&rhaeھ P)v7# 3yBmeBv r1+ Tav7dE;43mPa?тb#fr4ix@— Y Z&NJ#M\Sau\pp! DIFV*H8pzK2)+&"^GB_Y.tba$7dI0@4azܯRI 92t=;&!&vɧޙaNz&,s  ے>"3b 9 z@v&SQ~es<+n@ }/+r-OV&hW&&GNTn})"%@pA Zp&`@a2jƌ#iލ!pASmZDd\g"˨]Bn ͠W,~i9ʨB:{2'5r@ kN&0`^&(aq~=C*pA.M3dYw+TpĀ m/:Ξ"lSڤ1Æ捳eb b / ТT  6#};p7ȹ1P6j =j@`4K1p箉ThК0`!]`ذ6ڵhwͥ9)ȹ+ Pa,h[K,\jc# 1pݰXb ̔2!2 qf%J^/;ݼ{ K;:XpHj;„yw $p0aЁ}.B\E^T L+L0`S 1M+r|rr.!.RP1@#4@L2 7;r4v4rZoņu]5Y0`Oa"X-%]w!RB=왧 2v6j3@܌9\v%KqPUL jr@, @anCbGx< /kKGC3A ߱, #]o$'7Y2 C+&`XL(0pA,q 02b1pR2b@c$1`dL-%<\bHCZ-GVqְcIsdU=frmE?@1ס~͜- vھ}Ў(A0顇8Augv]Ьwz_ -Dxl}C$ Q?7p%G54PI`<3|#@!1P$2ਅ7sZ,@|ĻT?.?0" Yiu'3r% &yWlX-gZӘ4;Ќ@5h!@R  R R؃&2J|SpXHF9I!$-1B(|%J+ >ŝÝ8G>Olqvfm0Wi ⫙m ҂SV+.0@`h""Ϯε.n3@#Eq)ć=p`ý 6AԖIfTr9kdLm*e(#  Db2XC2gZ3YiL.\Sa`A>^ܜ r@bPp-њJƐUa!1WqLhB6+FgE 'Qv.Cw$,A+u*qd fVCHNNh!s%ZstP?Jtء{Cq ? q7BnO/j%8t,LlY5Ϊd9 {Lo|pƪ_$f,E,;>l$s3 LS4蔡p]1[[ۃ>41lc `n#j5*m`C@8o؍:Vn\y78G"}g eF"id)7se4@ZϹER< c Z9Th+@;@+gh gUp@)g(Jcc? v`JȞa`\EK*4aVڏh™+GVûi{s8,XK!ۧ24bl_nF6 j1Qwrꁛ Dat-h6aC^:2@BAZKL\Z3!.<]3n ՊNtK}&\(h^*%@:Ρ.p3V: T  2Q o .~#qGr8TOrD`pO )"qd p nG%s0/ @6!U|` @N&3ahxlGvkRN z815EPWb(7d{A ? 0VX6G*@ pB!NN`0. YBr}PZy3%8tC7eKrOİ p `T5!Ip r-D!P:y1r0FցĐ/eSI5u;tS\8" Saaa Iyh2FFp"w FPxNBh$&3k%WЦ?cs@`x _0 KbW^Cn8oDPb@djC|qi:ǔw*Z-C ԤŲZY7pD@Y1~A! 1,a7r7reui \0bZ EXFIu F224!Z `Cv#qG8rW,qb0jay 'P"{al4kqΥTJUHKvіPTk_AQ 6D4` z'ZlhӖAA cZӪ dЇ^A`ϐ9 r (YKp*_@7 ҕ^ZLf WO8f4*q{dS^Z0H5u QPK )FYtECQIke?ĠtH.u0" BK; EC$bV ].1rb65Cڐ$B p29@FȋV&o &Q P u+ h%X3lp& O}3Jj0 TLt0(ZA<66\#NMةQ| A<dr*T6ߧ7Rp~E^}5A(GteHOց z%&$rKt. }Ayk|cu=R7@ p9ذdV $ҋ`Qx 2k |w0&{M;3Jdo5T4 @!9VbA1fAl5W @4\q|&m8'$^` (rx81w$KAw~8Gp365Ǵb#ؤq%چ̼ݢ::b&ѸKE>GRpv0Gr+_J p w0K$kr"4!2˸2bA`P6C=) 6b)Qx8SS 0$=?r1+ A42 2K  Q|b;B0 "@ KdUp'NCEN0с3K픉:!_Xfr^ /51"f).}E:!7a a 7јtM:7ѢY" ݲh)#G71!enf P!k%"S>n7N_1OM)ႷA7'q PAJ[3=zm`CK p9 "$Jd' ^:p^#̉'R6ÒIZ;XI  0ݻMzaȸ@7 ޘDntCY襉)#grinoVKUM;` k9X_00&*=h%_*9`ʷyKa.Ð%z0J-%>pX B_sW?@1 dAHaʰ HPh+p.!ڱS @\\b1aY\bC y\pl̴ *!lKp~q"hH[Cp%K " .\A(ӄ5KPm!=#?bN3 r.12gN+0`ï kIr+sy:̛:'2a FlHq-`G9rVlزk8b 6.]VK7ni AUU0[AP=TؙЁ=FpO=0_|[H}]]8f4Q!!uG; '\H!m)x( $)&(0J1QQ$b 0I$h¦Hz`QR>AJZ HZ1Z )qJn@Hlk&mzeSo @)#D?l&,8 c`ьRFm-v6Z [TV :8 ((`R ?m o p/gDBty @mEbc GΡ0ar$U"F%"H72y'&,ꓐJ(ʥP˒@j(èa2I e!Ք$b8V!!j M [rOp8']EW a҅yhI%K B "@yЦ>%α#&xP ~a "%X|L%y!1 9PCX.t)/r0Жҳ&0L>& /&%Ą36@$ C)n!.̀8-~(FQlYׄؔm3'+05X+-9P5*kw,ΪTrvx\ >J=УX`w"P"!QB a P7HErq@*hA ,Rn #5 `^x?Ak璘HD# D !$GX"0؝DKH:v,7 )*r8 ќ l3r r$ 5hd"p` ( -n!jhS~ خ˔ 28kT7afRu1B fJ- R\q~㢩¸[haiaHAs,Ea(]n!J TFD @a'3jj!F fOC >O0KmR×PoxeR i(|SĀF3lP 6!еE)=3%Xf?Y6 ^)jw5scK5*t5kM w 0U4بFthT,= qȩv8!|D\ ٝ":b8O9 (/Bab1&tMNJ&0R} v>!N@eW )NQR 6op(i Z&+^R%KڊAGPU" ^=u)πp 6@g$=SМ%9Ÿ.Ofc"@ QiZoKc@6%t24x N515!0  h7!R8fx;G*>$&r `VŇm *׈0cɒv$|F ROqO!Z޲g7LCu8|cfI2oL ,81 % ' 0{or Ӹ@hFl&qik3ħ|Pl(~(cVFaըZHM  DyJ dAZameSS_`CR* OxXИLwv"͖&IEN0(&m9 q xn* p%U 5i9I`(L\#7g)L8/$8|7#(AQ(!鸵)".) 2ňUs#8/ ; 5萎cPdK >}(l#$Yq郊#*<<80hM D9ƽ!Lk8;m.m ݉BX+##pMHMpAnלCy@W&8 H68zED _+P5b 1>3 8 ]ZՇ$ۑ䬕9|ѥ&(НT >Ÿ  KAɌz9;?!@ PvX& .K D(K]W]!%RƸ 2. ( Pك*RP9Lklޠ,Ԛ3ŕLDvS*}1@Ԍ6RөM0IH`>JT* XN:h !`z)_@x쉚z%7URf4Q3?<۲0-'ʀ ielVӪ&(!K9>A.s,Q B(MD@tЅT@R }p2\+ P"*͒R,e^ :1J[ЀShȡL?>>^)iSPGja:z0ԄGi[*hӘ*m!Y0^@p<}M]ੂhf)ٟeQHYH `[À|8 j(xp5a4+{UwՅ᷍& 8yى<Ĭb 41 +9h*8s!x [QPJܴ jUO\j (ģsUH,H&[pO(x.x,0?&/ii k.=^iY^EE/H65s7ŝ(̀vP#Mn(jA ma$Yc`v 7FJγJhHHP1,ÃI'9K8ʭC!ìK+ۡৄl%8.^8IjESV" Ȉ CjDyQaV(92 K@~`hhS2+6Z`KNi :$u F02H҆]GVU)*Ԃ*?> )؍0mp@ڃ(enw&IUԹ13FJݥ*7/`B4hi4~:X@p`GV;\9= uq'%Hp]&0g%[ y'3pg0>&vrV 0 @i <-j"N\l& ġ!84S0K؁؁ہVi1/ 贏j"i5K|lX/6H`馮/aI%5sL 6 .!`GiebmGe#JV` (># pc" )o@c.@f+qc>i6 pj X/udTnJn黄l빋;kf)lM@S=dMx֡3l8`qgyg(*Hc9g~(#*jЀ#rȎS(U1/.Ul Yb"֮UUEs66.bI* pM\_vj䎒H_2JdT p,@Py~* AOtF°bN *F/Ţ_`ɍT!cgJd XyVB 0 Bpk:Pxt**I*r X`㱞GDx>9Kf s 9߾YJQNAsA;vU #J 10lvH#X3 F~42ȥ9)pŋA G`άUj+ T)R1@FAS,djkA"喙ŔrСu qs@Ӟ +y2ʖ+"*XDĔ`2]""7MBcWm{*C _ pЏO h&l) ,]#HG굕 `&/]9 K;[޽umm*ƾC ; ;I؋F=~@(b7po @&:ĤaBC4xoFH*@ h!< _x!iF 9) Up6P>ZL&6 \Z fh d!2h a`Ɍ`qEyTqRYelXB8HFdX &ȂbQM ,F%ð (_qÃB&C JO}u)kϹF!zF@!Pvʈ] R9h$`R.p PB1 MLW C#rh a("dp8@6 V"qH*X di9[cE-$9lbxf;` 0WEzp6=d p}gIOU>ws=N [O1r"PENيIND"~ ? ih §X!VQ3 =%Դ- >. V{HЗb4 IXc4 ( 0AN0:88WqF̠@-h*BB|l@+C/ +HroN>H&N-tC.AB\! _U ̀a. tX:XDǰPFG&%%* v`ғ xTǃ_=xآYYeƩWj\1mֈ1r$$"[K)$c(ȟ`%YbBá16ӽ~ 2dv 1@LEj o9H#4-aE-у*e,$,숧> uV7TѬi齔xRF YB?Wt@ 1oV>-P54qVDA9EfgALZ۬b*e4RT?Ʒۧ§P, FhB"HBM}u$H^p]w\bzx%A| ʥ3,FhU9Y\%[Km4%^\ꨎ^R|(?*$Lla(l\b? T8cAU\D Px68 ]`nנŬg[ȅPxR @KCe&aL 8 mNFY y Aۻ!U?HT؊>1LДJJRW[2QF.:,Y.əYa}GČ>Y)YU"O~\E\1 lt8D60tIoWDoCLD A5PKDфaDJu^AHT&@%bhQxAaB4 !(Gn@N*O=C}f[DC/7  W)2BlȆ,$UxA쇄Ql%zY \[0Ud6 ڕ0}+ǠU60uS7YFycE?t?I*o$Pٕ]Kx,Zs &U@؆H} (h@V?4dAXC ضhLTkL8{cd:Awѷ(j/< B xCN hZ ,$J}xOϨt\KA3x%:KYy,aWz7s .'6+v]3j.ӌEE=P+Ґ|11UBKwY͛$4A?B! B*w{7,E!! Wk,@hM`A&Txpק !pF FB]XK Tx>+XA9n&?~Գ#s.=x 5I`sU [[p*vxaW; _J F*mv@=gWn[>k1XAPQRUk 1ƠL{w }FlG RX4:)k1fސ U#ҤqڎR֑6/P4c˒-9/aa@A (6`-ԤB8Рؐ BڨȢ z >@ ag88Ô(ȗ H !@ pয়h%dp GqJ+\JƴK*l BJ^ 쯳kM)l30s5L0a4hJ!pIJc.*Bm(t3#8 RՒ~8sʺ*,Z`9 g#) Kϒ9[ |Va xw8 wWl9 p= N>zIi@cB&boM~$Ȅ  L!Bp-PEĂj|*T,,46ع1f% JʺxϾ@kXP,[Jт*J)*C,R "ҡ (ThӪ \+vu `#`ȭc=r蠋:cs+90/u6&Z`4W9 $9<[mr∋"= `z $:?pe(*>bu :1  hY$ 2*cd P|Ab蓚B$@ .pAxgPY0I(KKX RajNR4E)HDRfh@kQAxp'/?< Z 𵫌 0jÌF\Pgцl!p``Vaq:*'=Tn1sI:xA e˺v0h; r ¡5,VzhZlA֐# + mPB{BO \NTaY-z1R P2п5tO IH2n%$!A3^r+igX)=h+\=0lQa¥f3a"^0WL2{c&ѨpL8Eh0 1KMTp }AU-)qG\Xc!@H#́c.a `d-nф *.pk@p'8zQy3UU%QKJT>]`opè B 2mүmbh6)Rd-@ /Wi f4am%(5SۋR15,!X.Bp8-/۝bXPs e&:YeiX?@*cj2,M+ nG`qg \JWm1V|ܡFo\:%C..@2]@. T1!#V)SxPb/˯ QeAH Vp  $ dK2> ˘]F 3CP8aM<%;ѕbiXB4` 'QAj*T^6؅)FH´P41Қ/F4ڬDQJaӐ6^vRi˒3bh/S[ƾ0؃LWM@) : Vξ<`w8QBR`ʂ|2@6V^4DrV0c/0P.3de@H9P7T@ <;&N7X(6ɖBij|IT#4U(;$t)&fA˵pFI0g#aDfn *(` @)`[9X7 <#&p  q5B+Oeǖ> )i;rXj59 3 $/)+@ؗ p@dh.\ ᷒O8J'1f Z`G9zobh9WnDQA0I =!l" v^>W6ϰ, S Rs$4A.&qJ)H r(.a@F"2 32L#s.LB22sK@.T OF@O>D5䞴D*ڢXc: S@`q !~8 T"+H'+.娨BeVʡ vͬ F& ,,#zGD#%'@5aAA$`ZI`4B 2OaN6@ % vɯRbbL4b0Э fTbRrΩ-)B cj ,V5q13m(/b5"33]ӆԆOFKt.M!s"gggh״( 4~c1lPo7&@pzgzFUA(R\3qjT jv[dyAĀXhR ,[[ A``Ra<@cjaj 8@)u|vE] cqx cLf+f 8D@0`0 XdBAJUX(K"8-6.`눪1Bh*`RR0-wTΦX0Ϛ(6!CP*PBJan*2@i@/ 8gt((<z0G9TӨ Jb(Tg!S.4JaayrĠ&t"pP.} W_AńĦJ0VA p8 bA!%1j3Z) ה,0nPPFh+w`#3DP |gg\2ScL'"UFR0",  V3gUpLpRᆬk\J`6Сn',gAJr@'%@H0@Π gr{A  `qC`@Ѕ@ ΀d @҅! E9+ѡ6 XG&>L 0 !JFF*yXbC&Ц++nlylj DNBǡZ+Q| 0o LÖ0 a:qVnmDT`Ӥ↺:YP,rireW%`F! d daQpyX_b_*< =Ѕ @ Ml&.0 ' HNa>D/T[`Ae@:L!F,HI :Ld@Ⱥiih9R1{쮭R5E1Xh"Ejn-.|N0";s,1m7\b/9,!JƁA!We!&!`K& "pPU I[܏fJ 7"Gz V`DyGB! 0'\$@ 2L֠&ޓ`Tl0 Xv>LO 13L 0-Tn7֧Ft8|KV BGR53"6pn]Ӥ%ǽũChh4A(MWpA7#ߌ|z(DF]\5k.H0B[O֘r`.yC  8SD ZQ`(  8  BCDV H~zj^6$РF a.@"`b .@"&I.b<  \ptf-D9^y`?R @@%ą_C\mb APG IPdshS1Z0`%78j ׍ ohFСh\#:瞾y +{6쉢&Wo-1$17ۈ}6'sr ୖú"}f 06P( ` }(ATZ5Фɖ>-Q4wE@8D8qaǎ`9d@5ƣ9\5GlrbOD\z9v39+5e9$$G v.LhT@1% zx4Q EB4IhdE,v(3V! Oƒ`hP7ؔA  Ys e`-a˗bY0 ϸ/pAkH"aGy<] +0) jJaYg;%LAV+Q7A0ƩQB&@1 x$C)p#J30O3RwDV"І%TsA'!ѧ*C1 + 1JvhK pr,1SN 3C cJHu4QA(F,Ilzqя#ө`%c;}JQI3)9Tv 10pEWb90D%in 5۔yd%FC ѮA;X>ZJ5v;hmb VjpV~&4[UkyACh Ŝp½ qPAU m@B@DYP( AX,x|?)ăREisNt }BЅiH1%GD`pF!tQGH:hޥ D%rR#HT7J!`SW/YZr1ŅkHId1|'0+V 2h dp8/u)n>,A=k*(.2IgɘuCuG<8Th$v NPF-`p`f@ C& A֥ {Bt -a.)Fq0A`=; d-oq^M (G2韙1 (%CуBŽ4c> j~)) (KT0}PLQ\񌠭B+H@+T ,hXB+` 1pns$pd."@d #h+QCIǎʁvA|P5XJ9 6L["Wz&1 aа/( JW BqX q;X S  #aƄ?L"hpq2e)c?B` HS>S Q T +01@iJC aq/v% !mN I r?Z&k+0iF]: G)T \C'Q=rt o\s'K  a/@r 1%/e4=c t$>!%T48sK {^D)!DvgwvQ PmO?1``]CwaCA 2 g1;(Q-:)*F_Q1p+ J\90xB03p63p:,SoaDg& s$/tj(tmed!xKtI&P ,3f2{7R]6K~^ YZ0$B/)g($J`3R!>Køs \'^ VO 9~'jM2sXlC^]@ )2p^ViYS7]ˆH? 'mbW*Emc@ :1arFyB}rw͢ =)7$;PwTI o NN@3(] f#bkMsA a/\IrIPZ!4dAs 2Ș Xn)yRh_ׂ DO6&}5pZ"Q,CJ6B6f"|r+c*i˖BpcWeP0LYТ 3- I?t-N脁@ .઼B9ʕ$s .>Pa;g~A[Q'M"AuS=0w'/qq'CK?tAŕЋ0KY؉Ԉ  8t3)S3>rAKtX,pt4$5]\Q m>Ġ9qI1gE*p #?(j !&zqEFqH=:*֩@=0s '@R@ς C9q0M k   A|0 9a031  }Ij"*3w)31"'g=!Q'/p 3HQ Hr@K\9a4È ڰJ+gE<cma1C Nu` F Q#PSOpvG Pn>rE1i6A6i5R6w R0Dkh@JT*" o^Gɖ8 4U^p@ e< Cx0 Z&qAȬ &K>z$81$= @è8 ĕi%C AX;7O$ r௶ ^_b pКq[#C. q }7 KXqPp =8~tl@Py,aP˲&Fߐ ϰY 1:zTO۩I l.]G`V@c 7I Ѐ :f.1~DwF5`J05"zpI M  j=h<3Q 5 Ѓ'KO* 6CEFybhW))` H t9 `P 74g#谂p@4{ta1H ύ% Td gBSd ܠ.4f ##qrIŀ #,  -PT*a5ڋ@ =xJ/~Cj~ES\FuTc Qc` }4'A]'@^F a, R+.;$P.= a֬Q^ ZriH*P,e #e9Q5mmX@ +`aav4o xgxQ, *TPKپ{P "ݣ0 &Pw8 @ZQ%GJk{cZdj`l ߠM=1ح  ϭ0 {/ , AP)N]^gX34@(ly DA߄$ Vb`j H"<δOZ-!w )U#Dkj 5zCծ Ɂh5QÄ I@ !,( `I l2d<hyX I(Pv@/4˘KSּ# @0\\/-v|@KFlٚ?یs 0gD0ĉb`i;g4jԉ!s0`(RdE=a~8x>xYO ^V"eꢗ"hIYe  OɧĢh=(aK%MF$jZҚmdA'z($ b,D& Z9 [hFƪ"0 M R r`坻 &@.vQ@Y3ôp^XB%J >25,s䣏4H4-8,W;@8;OAJ`4mn(\  i=X@ ތ9ZZi/nN!r9GCD…cS6 ,IA7@p#R%5ypWNMͲ}]!B)B aU| !A5,A%0 i=G !K[vHVhZtzVo0'M5g͞6TK,&QFk:rX`uL(qR >-`UMc?, [cv+M![6p  =8=(^) D0Zci9v`@G+bFraDfߑB;?َY8X&{N  @B*c+ڸ> @ bX\$ uH!*Z@ B9PX T$Lmif] 0.q5GHBAPGhA̠XsP|lD-W S7p HHC B"х; Nx+͠xՇx?XDɏ@+f1 e`~}PDJGѼ70_Z\TOG. dȯ:f DQ7ل>m@2F>\d 1`AΐPF,X ebD! daX'a ,@ ! %PsEH AV~C3$1Z$Rqt , $|nK %J@8wfBt2*K"yF<7qY`x zZNepx{!qNMkl@# @BR+4z%*-sr 0X`Hdw!EO g2BY!2KXj#WϰjjiN $/ZLB&E%? IW¶a c k" VR7oEB.\9/VLs4 FW=aI%s"`h,6Ҍ"kL>@jnd󻠱0 <lAF> ~ǽ G[Trc\0'@8 s:Bx:zZȊ~0X ]#ZhB0`BJ .x @ 9hH UH!1@dhЫhp@+6oA9 Abh ;-X9{$ F`f l-h 06#b@ ɲ K*xKrn؄m䆷܄!\9띩1(#! U5 Hɇ;Y+U@  ( (  B @w+ ȳy@HT1)ZɐA` A"ȇS྿: pF?Y J9ۭ Z p @n Fh 8tH\:\H\9px92DPAzgHOD}( $H(g8Agௐ(?TI 5>Xa .(<1h0*Ri CtAp'cg >PD6ИZh# @1a:U86vx.plaq^@J 7ǢG qP~aVb$nd҆ANzq XP@dAn@TiԠMbG[~ B 4WhL1G<8Y+`p`+|C4H?]@@*ϔh 'b#(8"&U O7"q1Hq(H1W(0*ɼC@OH K 0>x t}=4&K96Lj`q}Ņ46ӌhY5dJp% r1!zcx30H9{IF10D(OOԹs)edL(NHb TSbh ׸ };}T$TH qgxkػ?8Sx.(?8Q{oxTlEȂ;k)K81"|87L" YVm@)pC+0#P 8xPm԰ 0' xOc K@ IQׇ) ԑ% dWZm@-qq_2(PpU1 !nD?<|Tfn]VDӛcn/텙WӢ7' ӣ~B=A 8胇:ӆD`O#D)D!X肕=qz^DHdЅ>yt @9hP pqCbZ@=t;V" h H=]Fh~Ш+.T] SA&橊`{D&G>3n4V8#3h^ ҂!4?78MrąbAy1ɤ囓^(PSpR:(x9MFT2@oXYKGQŖ邾 UH< HIЅ^[wr牊6I`('iB)b-Y t1p7I(V9Yh0>P@ҝ* Mt:x]x  Q8QxzQxJW=MP$_~X҇^MvXdy%_ҊrLhVIH0xAEb0 |)dZjbFגY}]U; գHKAl; W`:8A]%dVp/HK 7p]JD^xSS*p Ӊcmqp*'CJ+r1yM8 \xX~I, IJ1Z,@7 lH4`-kٝ]6 MVޠ0م^r415aΛ: O`p\an}Y|d;:q7B`:x$a22D Wφ ,l˂yNм`+U@xyQH \`R \y:/nbq7*uO4Ū/Yqws1<-Udĩ{F5r =ϐ蜺 Oa.^hX s=mi k]OeD-2\h3qiaOxYcKһoBxu?OH}Rg>FK0sx 6CNK6A9vj'ݻ$%y@KiaJw6PcO t`9:5G_'ڄ#ءB C1=#`;I0! u6(պ /x}c( +u 8EY8 ^?/Ԑxqp0& >.i/-}y-D}Iӯ&}0dFO%x06lڴ+@ P cN>4MYR .St$ /-@!DP Q m68؈?6&+# Y 7d m+} ̂@2PPh9T]@L9M $L@>f *g)2tQ7Mf~5a` 5h@NYe1Z+F3h֥\}]z pXgYӇ?h+1zQ.60?r|R< u LdCyYOPlC?'@?0@ _5$1V,BSp>pW'ԓH[s!ԕ3S"e8p,hQayK쒗I@-6$3 3@2"X4$TeDSq1ȄnHC,4Q/ 8y :jW:#`QxN1NxDʡ V d072=rr u0ByKlCe"OmUZ̤ъ T;CJRpBf K %d\3{HjKBXIc+߽ VW̽QDzpv8@N"(ipp $ 3l&91mH[H" ƛ05&~#DAQ+ {Z0N~$a AES&Qmmw A6IH;  NepX!|U2QQ!.q243#7GqJ4(o PVd K8EI7l#ȁg*ϰa//Oˇ2pt~B]q`q`kvV"HpmW`A 1PR>)(9qH Ĭ 67L?v и p"5QHA1DkETK606O4t0$!f kN=t;CsQxqmLFH0o9ފQ]bq sckL,T aBSx/0B"2l!x51\۰41Ĝ䃝0AX]E%λ <0 d|U a<ȥ0qh1P}Ñ}8C1BhT0\1.t'C܀i %@@YV\L\% 0]@* <#(p)lSj^>L D d|ՕÆ\@ B9aC(~•l{J,T= 6Ē@ 6D6^AJTm ATg\p;$+78`b ],@6!ASUJ!]>We]ՋTaʼ0ʖU71 D&6hVv8"5<X+1hA,`C D⸂(|+xƱ)IYX$ 4R$Mq9q 5XB)Q\@P%: M#˽$b݇0\?0B@& +XZBɜl[mv=d DLD{ gֈ2$@“0C5`X7)DqAI 76@|o]MfBŀDpQ9Eڱ3Mrڔ@-|4(H!Ş @. N:kU} PX<)+DUxn`0?A D)( F"e"@'FRĮȇdTCxޝ(C3=tB'@J;,`CZpHR PjUQ+A"хU` CL@ԨCEaC%\Z>@XtCX-IG9{72:um1gkqHP djgN0XYE!|]DK_S90% :' 1f<Q@\eѫC4V@k@qj8s\b<pa.`mY7\1(4 Ct_41@T3T Uva) QsȞ3Xb)k-4 C*64XA@*ĘF68VxMj BI40i5'J%dz BکCI@PCA0Ȃ5&*Ŋ% CN,T/*P /Ӷ- > oFZ 00`dBVy[yc  %d ł1*S^~Mύ<B $Zpn',)vCܛ,Ņyi'KگtSY|] Sˈ]:LuIЩn` (9Yd \> BN( 9Z PEF (HrP)0SĸWFw 54 j= JN:2!6&KJLZɧ0 oj^ N"z̡ 9 !Ĉ bb,BSX # a.Z CĔ+ſ"hRMERy Tٕ|)R8BWϹ!VLŚQ@2DQ :*X#jFaС Sd Cb J &. $ p/@JJ\ RrNPQp V"-OErA"  (6jI #В&pYàf37X>A|[E:Xe:(mϗ @⊮=(+ @& jn12 ILO VK+ԿJVcxlp ;xpUԵWP׉i[amwpH`@ "Xfi]$)G)b` i%)4fehrWJ؀Ⰲ6ݳȢi Z7X< Bq#{ 7 (5\P0"LsIW~bl` .a"A Yh/X–FQ4`'U f NXF(E2E1` Ce*/i\8fkNsJ%|ux:,7T>.yGdO# s=<!p!YahBRA6a,fv d!Ap@U'5 Bc|)&PY ] % ^KPV`c  x!dZ !ԋ՘4$91cq^ ƍ`<ޗv )C' b,u+Fo@X0U:HK,a`n2`Et)HOGBnUa3҂'ޕvؕaTx2m\ ( „"]Kn|f -("HҨ5 ^Kp+@"P07T l_>ԕZB#ٮA? vdC2}Y%@BHgcop1BE,Ӄ`1E ^qϤT@A%>8ˡ|Vqf1Aa.P !W@a LX` NA `bx !xX!FH؈& pXb XbX ;0@@ "-0E|aaނ" AjFt! Pa@: 4c*cʡ%n 샠6 ` ZjRؠ2@JPh g` J W@f !}daA"XjX b!Vxg4xKP-4X FPc8$ F;!+HP೾FVJ M`e5bU 2$Z+@ z& Af  0:FdzK! @2T;nlò#xhL.X Vj6la\g$iCi 4rDH  blclC`n a ´ `PDbB3\E%'ST"0`X"!AFg ƒ aZ hu,)!&aW5$€&za.#=B].Aޡ @θ X$S㌥!%r4 e 8`, ">a &xr⮋H>m96TV`Ā%ޠ&-&``; 8`H3!~ @+vMb)VYش"PhJ0*p$s\.pOiKc] EmCV`:EA}2Rᳲ[HR4A\")5 8zahC{[bZo=k ]P !XSVT-Et%kIh`fK#h ""6$tXU L@X<NA 6bC#!Ja{+kv' h[Bw1o bFx Ġ@ ZiY%R`E1ݡ~ 8g qfࡰ  o~  ~V 74{8@q?*4lXAh |QmD A aBbLAj9G1 P7 2XA&P@'4 @KH@_>a bOA你r?dPzO@w6N€^bȁ tK "'F$:pqsC VFB: v?au#b""^nf -zb ,c  mjS 8@Xn7oYȹ8M ÐA!a@J*0;uPkXXM].H2%jaD ё@GyqA;zbfly7 @PRqt]\˗"/3Hİ('uMZL!+ 4)Fd|l7F{/־Bo.ޢ= o-˛?t1ϙ> P8 p1rg=jmEQ,d bK't$%a7%1R4rNBN;]v=BT63QDQtr(`;]5\;tqRE_(C.ԋ7ITa$aY p}$fuE ΰ uBPgAp 1 e\aF /4D*ZԦ.Ub\Hl. -{^Fp 00msm}^BHnP1'+SE3IM2^D%DxE҅F$D,58䓏$V 2Ȑ8UN$iw=ӃtхG,;Uy^Έ@[G} kLEӤy0 îLaS ,Y*}`Eр %H @pI+d7a2HP`1v#vd) E y]"u<I lN-^\[zhG G3TV`P 2ME h -U GaEKE,xB(ѱT]uǴ0s3~>  SM>S]#1L?F$"m *BaQ"np /ȁ@/VH @ 0"F.҃ kHڳoL_ĥ&!$N"kXr%IDlN tT;/L( (K 1F/"CPR^,y"|&0qت-`e ^C>!S A dfCdD#A!%ǫq BHILK4n"d<6Q$;#"Mjm%4!m1`m-v͋p:ŸE\8jIbLbK"{`>(B9@XՋ`#ђ,Ϝ@\7BF/ы!(\ ÿ@х!O#}꡵uO+ 1 `#\@ 4SB"4Gg%@ 4-W- p@zC+B:; )(Amt eD T b@bx]j$"}XnaXK\(Ʉ a`:KX-f`4쁡<@ђ:ԡ0 ɍ%&C+,8R'99U@&18  DU(ptg=DQg x F3C  E )@@AR2 xq O:La8 PF$! RXхGqAѨpG@9/-IXUB k#tFV!A h.K@B"`/S2 qܠbm$(T387"xC z)y0Yg;hTFv`$ui_E g$ (QA^煘y)qeJ$rkaQB p.35D.$ @!=_nӟJ ᫮G/YP`  ,. )bBu!br@(+1/D:㼏'hIdXx1łw;@* hA: @2hGsJ!^;E b3\2akA}Ep`8GzQ# z7we]j}8P RQ$a||QEc P7(TrEUBG`p)x]'6B~"VJ(:3N@Lq522\Y9wcTA N z z pAgPM@ b?5:79D9[4mW!o$orst@!QFk "<x uP%^6> q q)%aU'1vXSk 0~-P &0,p%YPpF% x:U )1Pk;ad@ $w7@'"Ds#M0 un 0̱ B8v naP sr62o@ ȘMl@oJ \(~_`jeY@ ϑ -peV,Vu[PD'*MXp)Yp 1Dv$wJL-k8atLNA@|PdH? a& U6-1 N:B ag<UJH 2I@ %mP D % pe q^u mp?|^G@oP$3M47Y&6@ E P"pE)a'oj'둃r~r\7ZNk042sbt T`Y-r.*Q@'*&6E9  [Jΐ F P\G-4pf3 #G/TE q0  9p$M\Qv0b/[pL &e9$b[s(l)lypzlyR0 Vr+P"o-qoZ.09,_a  Ȁ<]EC Z ?ʦW|`s 2S+ msPt3~U ~\C6I p_sZ Z:w`I PkcTpL \u25DA0PfP Q1{ ُJ$>w ,e$ Ұ\b !ʠALD 0D u pXS*{`%V'D(OTfP %p%T eFqaF0})1Ƞ4q8D *l!R f;!B-ױF_(Wꯛ"H-? G w p  \#k 4M"  `T AP a!S\qؐ ّcGQrҐFiڰXQC C;jmL1 g&3t G J0W%` p-5< AFG&QD1p ` ` aۀJu /ZJpD Tu `sfl`}@ YࡻoPZ tPfbEZG5*E Y;.6@ U A!Kf0A'mqрQ%} p ёj+EQpY$E y U0upf$kG$ k9̥ o 3P4yk{}PCuᰇ ZoBk`#KD s;[dY ǚrARDad C{K%l oP9P 790R\lp7tBf.sL&JA_R9P'.kuP}pPޠY7'xfx{$g ͺ.tr \5Q.Qa](" ŰFh4kP `J:˿L/ŀs{Q, {'U?PG=+B~I%4C`  *l>C1" }  ˥R$<' 6U6/90` s` ` P#VQp&a Miۥ# A!m~=պ+y[!xk:tPu VOP 6T M6k #j ጬ4 Vc5Uw~3HMmv##\pō't4PYA(P kq3pE9rep"4Ldsk~ K!Vib(42%0I0R9 8x6EK,/rHh.X`1Op"9bza50öj K 46Ȉ -G ګ,+o9.'L{#\iOJ('Y d[Sj q bm 2f/4:: (8#9 `  F >MD@(!/f>K#:Uf * ,1zBozfdUV.,`>N0@ i`6.L6>²D D!4b"d 9 ܾV48a0G ( *us%g0f'\(K퇃 MV$(ImzzMMh9(N/GKŠ~v-ΈB+ 3gS;Dl( = |78 *N[FP=A"2zzI|ِ oR<lyn8r0[aLHͶ0hCO:>$h>H:2 obO},Dw=#0BVBPg e⑄`KaG P A`\Bud׸;v69r$#@Ӈ:# E4@r\3$^#<2Nq ]x#?Z@ ;`ԪVwA z:^zޔ'9/_ bO!_;}_Xod!|;HcZ!-yo2r"2( KC6,ENm P A0[ "*2H]1VӚFy!F3P3@!+x j N>B>U8#nQȞՇd!QO}3(Q+`h(r %M@+ Z`Έp`Q$Sҗ S6d%7Kr. !&-rA\xD d"!ѓ8Jx$g)uA8jy .hME]FAk6l{'Á̘N-3+oy"xA|ea!\:&qTd֥%$m}>2T ?3X7a4p Ɏ-kRːRv<7R@ m(1` x &OZb13B@Q aC@V>!s23"KxF=T^od$I~XsmAv̺r@(+ΰ<0ORD\'>\!@| 07x`@A(@ FnٜD|hoP7i_N P aD"r% { [6gU 7p"P L}.!0QD̃j#``X pս 7Eاs"+b/bW(rQCˉHߐjcH&"4P#ϵk YD 4 (TgRqa I"X p Q"}Рź  8'[!]Ch80%: PAoo# , /@J@я ʴph8s) C,D2 Z^(V2@)4"8  dȅ8@yx#J'҅yH}Q0x]O w1!e:: O $:V]d`= l8#`mV̨[X!ǀ# ¼ Ux` pҤK>JCc\t=0X 0MҤ xj Vmݒ1Z 5k  @ K,ZE 0,Y25c4:`](x#oHA@0 ݟ  00_m{"0h%803ȴQl[k 51ㅂѠ&]ن 3K*LX 9P /@WZ8 2 h-c>ĜhW0]\XH41X^qk8ʭ:b8j@K  1|]ir#b(Cbonp`V I,L̈XO/m}}uHZe}ޖXNp ?J\Ӏ햊p% Zrlj796ڠ*h!I Hx 5Ȃ~x<.[dE#L`jSUܨ| !+ V(Iߧ0GΦ jaB0xkh"0J`Bjѻ#Ppln  ff P$W6 ‘7x,<Ȑzjc]ЅRm ^HP)ZX >\s ,ȸyK*M r[pXʑ㝇9c8>! ̃oCLg@üPȈoJ "I|Ť 0k*M8(zenMj&Kq Ф  @nlCqMxLq8 XuvZMbo(|~Ю 0 . †ih.b̨ޛuXw tJJiIN`ؚ# 9u@gF@HH:qZ @MK>)(Qo[߾̢Ux I  k|`Qʖ/cά!C mm;`Z(mr$!k 9(42pl:e 5&POl2"H q`rTRa:ȑPrP4!< Ba0YF^Ad,7դAÕed f<1RUCoT4!":%zu4$+L U VBdMBF=8+L W*HPu! BaxW*,ȊfHq a+XULKyd)%%7|Cwf7V׆MtjC\яM@''_Dxyp$#g3> u6\.L!gEtK\y"kPf oc~SJT 9h6c@1&VfKFU@amh Ј `hb,a #k07|!xbbD`NR hE H$iى87رRN% 3` PwJ**L" hH a 'U!`l^)AU MOb'-mxLoF.Yƺb!>Aف<jj%@s}aq.\1=H`*[QG=]J} B F0Ff.+?{r 2pAEAXI!<`90{`~!h=%-uV0/!Li Bh g@HH(0'qF/t›6dqA:m 9YMol,$BBVᅈaRkTX9BJ! DU/\A)`O1"PImiA IXBS>؜ޠU,(-Co-bfj PH&./c.xfSYGا;$ؠ PC\F[XC"A@AJБeAK;!hBeh<1H"u@0B)H <\0Ñ({_@AK|*P]Ƕ, 6)\$l 8L P=I?p:(F) :0B)tH"!h tA B]r"!]L\ϝR+@@+C6]7B?E.A74 +BL hu`LW/UBA 5 ݚ3v!@BL<{e!= B0[&B(MFC%(XX`Y/Eq 6LCc6zH+ccڤPZ?x hmiC_@. CtA5$(@;`)܃$@5P,\0BB%Ym0OE+|(C X*&T C^ ?Pf:(:P*\PTg`kB,G+^C@HV qim͋B[0f A9D# MpbF5|t x(7a+$Z`1DĉlD{~\V P T Tee|c*yB|C-'"==S,􂗸RC|.L"G(dBL'"\#LÖr8q)=8Q>@5tL: HB c@x;m`%|t`2\K HGp >A1 ,+A~(BZNP ekYUl t*BDp ! 9DFoT[|MP*347^mY(C$x'4U읷0B< WD \c(Ci"B !PRѪ@9C/@9 PXfT0,0,1 xǨ@>ʈRA=y w4, OC0? -<$ CqصLFj:D8D\-P \B=eDLJ>ML-exLJ˦CHv= f=<<5lkC/?LPCpC DS/A9CA6uA/d+`'zeQbP|{Caf01і@NTT1IC݄t#wP~LK ED M(D*'Nq(-nYBT0BR@>PCh^x)i6B\lCL3u1]u\ksfxà :sϝ[YBT$@|B\UXRF^!7 VF=ɍYlC]V ELEFFd @) 6ijPԓfD[pyKDP$7]=vr-RE1Ny zLU S<")D@R,yH>۰KF0P5tcge+(L#! ,. H*\ȰÇ#JHŋ3jȱǏ CIR(S\ɲ˗0cʜI͛Drp Ο@ JѣH*-8+#2ϋY/$p_ YJٳhӪ]6hOdO˷߿ӌ ׺ ^̸ǐ#+}Rƕ̹ϠCwf„`ifvlVqfZ۸s׼q:@PЮͻУ~ӱݺ'<)KOJw3n>,}3'X( I C}sYr'bVhvM_jy5zzh,hM^^V}TyAiBhH&iRO B XfP@7˘@ lpƉf1T@]#砄*}EuPP5j饘M7T:oŞ@|@*50f*kyؔ8'ua@f yrPa wD|T),zB( ա'I 9:_ \X@*` x  Q:/Դ8%0J`#-@Aёd :4͓,$3nӪ䜞` o1N$tk_aDm'P|9WX"jվ΄z54ޑVp)iBBҀXS·H Uzdz+6Ұظ *ǎo1!"PuFͤ,Ќ]B+B0~9$HWNZSQ"TR9*:Rg kĩL$vPZ@; LdGCaaS0DJ6ȋј {lA%^}CY0ZN0lA^tb[C bw NEd-Z$5;tbM 2&Q"& Xi[ FaV,h Sf*ԻN!6flؘH% "D Ubcu3E ]B@2( yzJ35yJqrE; ++Tޚyjj@+t~} `uM!nΘb&3h)qqڝNG 3'36$P*hJgKg$~gT{3W ]|w=d!~(B` Q OZOD !@"&Y fH{B1_aeh!f\w+morVhH+W$ AwQV>(AuB=$ .\Rqr5H ʼn5 1[j,t/TsBTm=9~ vĚ^ P(FqTWB 1$/Hq=I3WݦsTk! i~Qf^@wlț~ HN7#->\pAvP yA^iuRv@M,#aE͵+"53"y1uAK٠[ u_}E)L g$~4G]r h 5vyqM׀a$ .!h$G1 Q"$(` \QHr"$Eϳ77b}"e(7G@kC_Ăi}q;2"p> ^Q\х 3b%'e K`d %U15Y;‡faHj\rV(S 7<ʡT u!HOG!yXxE=&^|vFx(z' 7h)X|ǑWH~`fqx<{'f27sUu&g(6rS 1p i 86[,WQzp" ;(W;  ,i&u Ee|Q%ai8Grʇ6/vWEm$uPUuاq_N A}(V(vKth&ebU[OEDUaW& ޗ:k)ćn7]qEˠYԧ(aHu8q hٚYX\[YtF(YH_ GtfԄE3EXu-ԩ| Ѹ@YAAW0"s陨tZŔN!yYI-A-w^E)yqY ՍR8y|qHWj QK>𓤠 Z"%š[Ji ynuTodf!ƥe !1"^{ n8}^jW40'V0@ <+QwkYWK@>w%9h};+&&!ѴkIqyR |!d ћB1G(b:4Al ;WԶuYQ#7sHBKtteIu qj37PDbKq vj[%<[((v{=K'9hx`|lA aQWyA#Bg _4_|![‰SPi \ LKatu ?Sp Ogo%+<> 03L1aٻ|Imʽ2G==l# 8!)b S &1l /1 ƋqE}iPfW3r'GswA@9U e4p63ɠ ʉ .щaqmцE.87{^IXuqi?~7g+A1@p``n y(ʱ.Ꮹ f/Arb'3!! q YNKj@`{ ` &6qpTlO&6,H 8"n$s XQI*Q}>6Q}! <ܻ/Wc; pt,𶫛b![ZQEkwp}Dr"ey0;"a0u,A$K5aцƗ(+5 ;[2 jCXp aZ%Y"kcM|I||_ ;AyT> -*NOr*nR+88:D6i]D`Ѯt[RE~O O6)nA*Nep U fq /s%E'ڒ6S KJu 7 c pɕXQ h$ڭ@}ݟg)9.blсt6񻛎]iRҵ&N( 14KB,~ē[Q(>#0[aLC17#[$8cH_fVCe!h89N>!5IҰ!YJ\K.bPtH$-"v H2h$ nn&QFqrW.Zآ㛉ĐRu?+0y 8SRp7KC5\̀;$,ibK ~А6VCH̭EMTʉ$pH] OD!K*ƅ4(&r2R''2:Ku0* P$! !<&6&Z2#3[tviPr!pؐVd&@Tz ;(I(;:Hh “"5!UL" ,N(7b#u j CCϰH2sCQBCh Y,oert#҂`5riM4RI4 bP!QH0 )nn-"jk]ڰMBB.e,U0A('d54<70Lݱ<1-)ҁ8V (cB  #9Gwք\ =BNve`!6"b,'?)2!r /P lDBʈBKHɧa-l=a_dETgǑz3JȻ|*H|ю8&͆2(M4ڂ #\ʨBP\-!8Ħ"U%u 9,B$Ѕ%j.*]B=v ;E w>X"t ]oK- @2 wd %M[r |N 1j8=@ Q d#q AMޚ+!QReX"5mB^V: hӘ z&7lW$B :EŠ޸"oiTaOA֍BNAE]L P1| cnE!ŒqC'"85OX uj?Vajq!a [ޮB܌m[KUoL3h F?1,"J=;TO 3A4dC% 1\R$U\7i Ae>KTq jb\Si|UZYWS*Vy6\=3iL})kvkGwr5-;Ac Ҹ)?sr22!мh!‹H5pPh5 , ^r A'B+q1n# :ۛ@ \؟G$I ˒Tj:R7#xC#0lXAÔc?1ɵJȁC) \HP h#n0Ap[R؋ LC5 48)*j7Q A6_0 3H9&N%`C)㬶"bK;&;Lh@,> B5ۨ)Lʻ@ \CXs)[vУQC"aČP,)c?$(#p@‘ _+8eThF+ B3 41PQ xЃ53ljFp?E *Zɰ5EC)((F`гpD` @.ZH}$w(Be,BF{={Òtt#qTB 7 قS 0DH\Eqˆ@4@`TВ9R12);JXA)nLx$L"WdJ,L~ڷ.iB+x5A|+IUȈHC&-` 0Y &p!B+#"`71Lۼ͠!؂8;(; $b LBÊpP'x<͍`N000,O<"@J0lS|(ËɌ7T`ЊHQ`Fȟ 9pF/Д` 1I8/ }#z/};҈ayp Nl( ؉[.cOP$Q\JG82q`ѣ?(J?xdpN-S3%IF4F6Z#"]HbTZSو{H]H`S$ΗL) &H0E )ISQ<`23J\3U[1 X QHԀ\I 0@ӀPuRˀР= YV^.{JM?We)gʳHJ[ Xm ½:}J_݌܅luC5}Å0˄h}A0qb?;3!jsHX%P+@-R+=#O4ف.ᒥu k*vځ؁M^8ňp X!S@ :: $ ) 8şů%myY}ڶpZč cZ:Mʙ F ۊЊ<ÄH0҅'RӳtjRkHAj@|]QD=xZ@1者>υd Y@m8eH(ݧن.W]~f- C]Lލߨh JxhVh^Εްm^XU;:-)XP3~} `aFP…e %DH93xR`R$$:5W rhJ-~!>$ŇPa:ƍ`5a!znlF:HXlx`| hLXb>&$,m$TE ?٪-_QR1, WP ; 95׆l=]BE/ucUI)坿=9ԭGNvY0}MEօ%6lsYkU"^X&&fm nyY9_%b3 ATޝrɴf|Φ $ɅAEp(-mAJFW@S耜n S$XIH|Ghk>ۧ1 q@L`,$` ZX qH? bC=iXieu ~ Pmʓxe2aACUN8 J ?捰Uj]8kp4 F`)5U&ք&j?lC!p'ܐ m `ffvd>TC hVgۍcm{uq`\AX,lξ*taV^(pdﮓ8fW 3ohv{eܝ԰YRpْnGoXlQ=f[Pmy횈`j8nx﹘N-y PqI@PΌlad p2axxneЖj?Go @< Gq3/wY,X3xas} n㖾ԅo-4G h)) R֝⫖k#Ԑ;sNZ ]dXdpi־/cf׈^nuԪ.tv$ЁUp1ů#0H)N_vtݤ% ˱/YofQM &Hgǝ(k#J5v!'f >s!KUވGC-PU~~skvx0ۚnUg@&=gN{&xhr"PS8 &:/Nچ_ƈ?'8 4nULr%5!)ZAki'z+3iP{yRam(_fP2 .dn/ iAt3!PBʐ! ܩ 9dȼ$+PrQDkB3*p0 ;,RF Od#t_A@$[4M;Y$5MD=bO0[bjEsNl 6)͐ѨېУ6dPF4K{2xCY0mР!B P"o\5yTшe4˹.PudB@S^"ǿ ލ0!u kA/w@x!#: E4l2ˬ6!   '߄fefmx03V[H.fāT,c%_lYK$h"Y\ FEꖢsُ:H\xM H@AB!yD\}"dpd 5#EHЭ&8) pCN!c2BdY Vљ<~ "D!A#ǁR xݻӻDs&ZX1 #g(Xh,S |En2&8)!IΈJN!,R#|ɉO]k"慀5 3'= N{{B :YlB3&^#dړHBl_0:-SϻїFr!"Y&b4Cʨ=,=㓂lq%٪6z]YیZEAao "nR hNddz:Flm6DPMµ9F4 {% Y8`K Z.G5$#lɦ)IC"/~[$=bF L 8fAċIgݶ4DpkW)2,]S%)L]RT0)/c̝pW5>i=pd;09@*$#l4hI7F9QM"NkWr1ʸnK}z 8ɱ޳8=̈Y=IDaHE&+Pzd"4B~h K/@^m|3S-8sQ=% g4!\#H mBaA"v&$7JUj.V)*CA hg2` uCF}*̋gpNRfp{Hw3q$AעE cɃrF;L%U~~/Hp^|~ôۆwA-2$2/H<,{=+U(U10CyVY@pH8x>x݌QbD qý @Hï eD :X1E{ NF!^IhA=G D$ԖBAP!M|HēpɬQ68G 0X$01@ 2ƀxQQ), E @$'-$ =SB{xN$pR$CDEDġAFr^dEk / D$Db@, AaIMHHdbh&J DII`@`MčE1A`('Iހ] " ԡC$2U fTHlEmaX@`[=Dnn7eL3XA@dA)DˆK_*% `1A I&TCu"HUEd8@CԂvDUv*6 @بH$*By4*exR5ma`^)aSHLL(mFF l""CQPB`uHMkDvhcPŒ$KcJO؈e*D,BH!E<,EfHN1"3}!BJcl|@hU.D1^c8Y)LD„] )M%|> G/CqvjcAKl@aW 0Pa;I. ReBjR䩫E31Ah fTJ@@@[xjMXFL2Ĺ|&x,z,S0J *2ơB lK4o Ǥ3FbZ@E:^0@cKpIoPX|@dƈ,Q)KF=c $&*6jy2ō6SH׼A"l ɐD8mh4)>DjLE$@h 0A@Ѕ3F H䤭ӈ@B(D`ڬ@x>.g aCI"R #"js]F ms H2MWABY ! HQw<DDFx^Eqnc0$BggbB1M0?I2h`€&΢raeUn׸/E؀@\.dD" D' H+*WG81LE7WKYm  ܦKEڽM/ ќB,ZĚ^Ern׶D2F/'0$~7kQ j36BC&F \OHIrL_{o<+CI@?4+˄ -]Cw>t8i"Ak)HtB/Y)@LK( @=6DA55poxIeEOXzj~f2ٯL-;Q`hA]̬Z7AP1 D*qϡ@p7CY4m@",67dJ(zj\B~CDC4Y '\' D "ܤ0Soq)(B_]A@h8JD /܂Ԅ=(= DzI$@D */E2!wLE/8w)C`y0Bl+aj9AqnJxa_dB`P>zD913 fh6AXM Pl D1ĢBĒ@)@<:A,ɼĒ@wBom~zra‹Dahr6)D"@XpQ<B@T1I0(@iMJw)AD7X'a@,Dh,NRl’ M53YOHW9MlȮ!7Lt֋ @'?s_p30yD'Į4q}K@h2aFA p.Ac ̰ўT b'! ,YND&¼?z C/[_ tEi~..]SBJDŽ\:+KJ*!/ĩW~AL@G~{'5c(xoAc`6p'!@4X@JT`9"0WU\H@HȄ0-a L13xHdR<l[6JZxj# c(iF)Xf=SX@z[Y ]RyIé "ExJfB>9D 6!lAslٳi׶}wnݜ0`lix kmaڜY~s(!`ިFEoh(Dx!/Ș;*%lD"* NEubSXmB+:~x9}6$=,JB$[ˀD63(6 "׭LY0<-`6-ɐl6OZ6~6QEvtA(PM 8x_(`.K*%yRqE&řV EEd&:b3:``ts Kښիxg#+jYNBv }ǑQ!h(p a#PR?t/eV`$b=^R,dHO݆5)]f՚.ti]툘L dvTk x@60k aCtǠAYGzJ!d&IIdI,8(J%D n&'LC)tPQlOBٮip&Xw78DXl.".} np#H3Xy@f$3 ble>fM&GƑ6`D\>hB4cSA`6G61PT;BshJXGO"SMj#H(䀢 E [K"{$#`- +1Va!@VS.Cau 6jHF2LrdJ* {8vf`Rm1;Y(G҆%>m1 4- qoW*QB6fbA t0$x!?AFEy#mDhRj҆<0O jbB BwD~U@k lX/1<!ʌ%&}VV@z 3݈L2ܒY)b@N7(H%яr9d`s K#(<`k*I 1UuXF3#Tz0{֒Pofΐ Ɔ""$}7Ja QX$xd+pA!BTY2{kRp&m#@Z*OؓXNU_rNy!sX+MXL6D9ٷf ^YBu! qYO]"H^p,D "[G2פ.6;GRU:a5B߯vfIY{7uv6mT̿o<$mҨЁhӸY|J O5YJ}wJ~%zPcd҅,<8R`^,x0GNpMqcۖJ猃[5H'x!qxv%o! \J24o@s` u^*)&ykBzMmݽ*?ppΰ}@29"i0B74)bp($K"n$p !;T8b|g 6/|ڎ# flM#`-J"&\ J) Nb=4@ f@c\g!a 6vm&0a ` !k.!!l*p!d$bJB ]Jb$EJd J:4qP/4dv#֏A.` Έo OSb! bb|@h.8bsa!p!n>afch!upOc@"6 n#ᒂ)GbbP$҈Xc gj VbB~!R$0#"(BlN4A.& qb 0H`!bdjV L r \!ddJp0J! ҅01 )B4e#2`N'uvhvQ7f DE6D!^,ce`8}688a tn(,ffQ 691TFK7 *`H,J"*eJd!V8ޖ&z19m!#k* N( jaԾi\qp06-W0+x`J  #=d#;AGKfH02^԰&Gh#^gd삒APM6 #@b` R>'k&zb6B@gapF,/"R)8#l,;LcJp <?RN,DebfBn! !266!H 4dG{ 08v lR6^p&K{a VA !"@7e t +A@DpT/ )!^$:\G$&4 aH^@ i`p6 (5)n *d:Ɓ(Sơd3n>!AdG)s!l#4}-chaZ!A 8"YsZa `7" UA`Ebޠh!6 HvT dԝ"R@ @@HlB-@$aRl#B4O,9Q%O$ڀwgـ 褜 t ZzBc # z$ v#ʡX0 +p^ 2#J\ahh.PO^H5h,K8=MlL.m(vT$;7bg"}mc87Y`w A?$~2O* 6rAt9"?"Ɗd Ăv4A%- 7c-QqDLBsC!Ku%vzc9$=zb'xA]I'PzKB|E  @@"MHTtT yE A9(GA*GxPK $'DC@.IcpPP-AsdT&B{h+Eh@J MT@DjKQ{RGqП1J>~-֙Hʦ }xL +A6y֖_+<Eyr5Ac 4A"5A۠XUI6L@Bo? CQt6 Hhi'أ y_9Pxd}P2uGPUVAˉmFX,"3 Br /l(0ЯR: }  E ]E6n9Q4Z 󈖺0@e] Mo(L ?1"2Lr;`* !~T5+LWY&a04 4 j_2GBBc#C.uIA FxkIL芲O(?"cs< k=%"T t`l0"B@-b/"]& fP"XBI0fkx&Qb 3} A" '&YIɖDkQU#!A{Bya"J"=LZ,0y`(rĈ |NEVQ(Qbd+؀2(>OzR `5=JdSWB!"TID@H+"&g|i!vQەt Ⱡ1) >E+uQhhP%Q@rSPA4"BKf1WEy" W6lVڎ4I+ I^'mH- n(qlJAư BYbqO_WD&tA5E$`l.oD!PbE9Qth̲^@ &1'(ap ́* Œ\>4" ؆>&#ɞt0|89+bVvE9ʼne" % C?cT1.F/#򇾼/(@4Q k= L#B)WٳQ.Pږ"Aq"ڍr&yF`\9X tQI|$:g<8ɃS$|}v%Ep65,;;+\ABЍ;d5*BU/"\D,N ,Aրo``lR<+RxD9Gxgn!h,68ǚ(Pz=BQ>'"Yu7$"d. ^!&]"A S! gC4h6k`J p!^H57"$qbTx+YJ.e:l `H]4!O4D4 U`ɀX\KV E`F irA'Ǧ0 XXk4"D,B,"͒]!]8D̑[G$ڔR@N3Y֐ dtʂKG9yw'9DAh]@ qa7avv\v1a\za7A d$0^1V RKh9?Gݤ9fE,Q_0Nnt D `,=u:B<Gr$-0g+ u7C{r|I\Occ:ÇΠ*3> ` #qD(= AS ᗀW bK].g1$c6Y$1!qqBQ29 @g1bSqBH E; )O'PPVfX(EA[9d&s 2 QEXA!8]͵EEEbLDRb+LȐ"H@_xI0p3aݴlvl6zBX fg Af%z‡`@uXn#'tb'5c ;1KÇ0&8!21@!5Pf%BUqR1 2D 'k 0@'Vcq!.W"z# DєLyӔQ}C|f1Zr'IP h vrDi28-n}אʼn@`ND<`Dk6pH GIBQ]:y )P&BM\l. &X2xr )G K\U&Gttt6C]@ g@3@#@s%1!Hi2_<0AIJdE%\ @ J'SMeS4ܹXg+1B B78Eij1j(Pj*HS*huJhuFey0^S, au1SG )H-Ф2sB|.Ơ6ut3T(A'&:Ne d12"2K K^|B! P6p3s)J3@T$Ƕ1 6 CT @oI?AbG;sz]`{ %CTZِSh"Wze C&@F S \x 8UTjvʱB^Cvx#M"]񝛷, ȁ?OcZP"nn.uP p1SIC>Q:1WpAc#10@AD@} q (J7 }!('-M9=VCL <2x Wq_v wPf0')pFzG:25 BL"Zfeu% g 7 K-8h(ˀ*EB};1;uEP'B/U,Bq" jmSX`J5zX`9zgPta l0gzzϰA[a#$Y|MTp \1:z=7r Ŋ⢧`4)K:~,|0C#τ  A*j|##0R@sqDCW݇W|ai PB /`fgh$`dp5ug"0]>ki/D'!!{{R@ӛ1w(Y)鰛ĩLEy +AP&EKU@d 2X+1! ;F;`ʱ⠜\eAx41@m'@:I!$ Qj2q"Pwq#L5 5\ܳ!u){ܒ&w+N݀AحO}4qB! Fn C[zPCȠ5=Q*]dʞD#ĢVCH"9::H'(Ͷ,b NZuZv3;.m,??/1 :,"a {.A,@"lw\"aG@ D>9k "L$\H#f>2 K\A%}A2.nO5j.ƏY`;ZWX^BABp2L]ެyD  l Qဃi^5wF C= v=qXW@9CJul2$BV-opF ;39 ,}4$3, O( b.РOc1RX=ytpLL0q  B%-@X#<@+=` D"x`fHU/U\AƉeEPA[+()RdJP>DTޛm~Bv. i :ݮJ4*c` F$p(A*f 0@{H.FPrA(K"T"̣EJ!٘VKEAP8"jdF~[DJ&a8"' &ƒ \5b`Ar7L+"A9XA|C}a}TJT yz6xu|zRA9ĢEL^ؖA*4z"INL\*H5:rihHS]neX#P!"xcB {M?|) ACAj- >Qp=*!FψC8#2!,n/H$oJ$ ` 8B$pO<$Ȧ bA3]lJ+]8p` ӂI%d 5@H֤z#9t![ GT~U((n/"e8T9 s 屉[,Qшi=+NEdbHf& >;y2UMg5* q iBmdrܓ t4w߇JQHKqIA|R@: mhAdT+9q#5nGՇ[)LAFg" R;x"\ۼr3zҢkW|Fy;JAxDID" M t@ <(Hd^$v]Qy3(HR_5wƲ\Zk( `@X  4i[>;=5gy#SNNpWS@ 2A=~B "`G7ާ `Cx:!o"0MyDE!kJR%Q )ZmM,?A+Ax M-ZdV_RL':jTD$=z$?/q/DE@g+pʣ V0J[J|L*d.mg < ixtF3 rUf,&dMV\;d#dɁWrv!8XX WWW_ d{,Ϩ,< mV` cX!%dEc[y#s6r -K]C T\Kxt`(_H0gr8!!>@H౐ ELB\.- (@f̺Hk>BH#x`@ KX`(7+ȉkԻZ; Ǧ0`"@ pz<$B#€* 9jIE0} Z8>@&>h-Q6! (Px)*\{B A#Z=`،KݡRjQ9;c tՍh?NAo33#yU`<֕ a@#첤y# 6- 4LAjZxܜ J@Pj#89 9'H :? #DC4p Y`<>`50p(YK5E)ZIu}٘9.[+=1*U<`/`( `IejFbZQe ^h む%0 d19)O?m(x݊(-"LaήA\2~=[WEلHjQAF H`ϰP1X_.E8@9_% /߸B~n;ъ".' H#!݅VIڅ-ab[fg(J N ebH֓pI ؑHb 84AEȓ~[rc P*c #01|Zܕ*V0҅0"?JbMΈ01GɁ1+^2/}#ҿ0 hiiQ S bxZ S^§P-3Fʊ2+D+P0ɉ2p)1U(6(ɊB?Ʌ )r @+@^(Q8h R W?y&Zk2. n@ 8p3.<%)[iؑWF'ÚrKTAa:2Tr;F5 ֘AYxlUYݲcZ^0yhjי&)XU{]0 Ȯl! 2 E`. v ]8\+? X'O4*[3:w 0Wj J5pȦ8ք6aO;Z:iZxA7pJ::BX4u44Cw65 28ʉ i4hfB zG`UhX;6k#R܄M ا11xg _zȎm>:3p ws"jXKNP{?LP+%઼Q`jmRg)JbX6W:x=B۞@dm}X`0A]t^XWy4M5mEKM '!4$֙IY𢖡yP);# ]hƟ@ Ț7p$  1jE#C#35hkal rY@t'[zJ2 a fZ)ZDHizYMO~0 =QX[(M 0XP,"B YGnd[}qMBY@{|-W![݀:r۶~:ic`Ѧڜa˫bGFe!ܴI 8Pq ,?681m{6n90Х@Gi61/:b U*}BH,f`H/2PrZ ?GЋQ@B"^D<)f8@ H|A=b7&/)R~4Zn ('QRIF]uc() -d q0V\RI8g@  Cw<*PͲ( ,G\(P;r K\j bM`֪Rmp+ezOɲ C@kFɆ\tZ K$BЗ@iBol7E!BB.$_W4D^'5@{@ 2UT1.7JYM`z"˃312 Xߍ- ޜ@TA$1pJ}[\4"->fV$ T@"k1Bk(a<GZcKF =-;eQD5D50VRJ;e @Z%D@H@|P{t@"UEU$p?9KxZ/BhPBs}4B@ U*Pip@w)*e3%)2L3u6S@BXY&ZA-O~@8`ul@l6br=IƮ~!\@UAY()s)@@ Ca #@}HB>@M@ A @PT` ɍ8 1/$p.E|'?A!1 l 9BY`  I ,‹!B%) AqO GPÜ=k!P a =."H'\!O%>ĥLq |dQSpiZ CɅ0DTИGֱĩ y B  JV<׉na1J aMOlBDЇҀ%(h=d4lDe(q(Lf/!%Dzw !P£<Bh1g8HCTАET.: ި F, @DEa]I8&AaUB !"p,U"hP@DJG`3ؿI## RKք)) H iPP(= \Ori%lYJ0S~U 1<' sJIN01'Jl`C4#Ve_8Y)]D" *?`N2#o@Ai~4rc1dPm90VI R BQ{<,5"@ ! Gt-'Y㋴#3`IEE :a#RErMx )G>42DûU5؜ iۖ0Vo= C` rlՊong)چ=F38nC4.DFځ@a"2DB _ٖNygxnW /ȵ'Q!Dt[G!݄&XDAκ HpIHDNzqAipe cF \"@{d'<1Q{(B{dQu/  C1 |J[1=`JtOtMJBJ<_hPMt"|B_ŀXTS v(mW+WܞBmB IGh&m@N\ h yxGtG(Qzt _G}@ 4Szta[lBOAyO҆QwGUE@&H@Dx-BЁ8DS\Di55$Is4 8AEIMc E傉}.GCF1$E`FIJIh-(JcDb>Ƭ˙UILFh'XQ M|:X}-DRؕ([($0X8DEDz-(Yՠ@1C?@ԁB0Bt@|a6AO7Ls͂BWD_B@s-5LIT )J bB(b]B XDd`x+DlVFC@%J&o GĻV-FRt)BHfIG3yhL $.!&P}hI-_( ¤{ȃT@uZBAiDH|L X@MXYCJC@`aŧ\V8&B2\ eiIެ0KX,$@{ɇŗWT< BpM@B3hl,"BL<&D7XtV?d+ ]OpEz$Rbsm[T.ďv~DU~DTBšt@ʮf|!QJ0GD?ܞեobjB ^]зJ&ŜGIcܙ_<@ py/3B2~y -Cj է4L/(Q@UAQ gE`~.EǠ_ăTTϤ@"G'JB"4sTМ9$dIs@ËP}vIX zdl ҳ.Ğ +7x=@u4!E"R><ܨRBD7\%RfC= 0CĀvxXI*D\,DB0i-L WXEJGxKKT_.mɋjppIXaI=B`(тB -IH1GdDV|cFfӾĕ_d bxW5B| Ġ-%D|b[a6ZCz(˖GBdAXQ@*ȏh y@TTʣB_B,VBԨXa,BLnW.ĤX@<VTChQ вSlC+_-SG 73€BK,IW&H&+TTA. @AI4!RB@pR|Lc0ƍI ԇ=5n_ fǃxALQ &"b ]<0/p =g[|M] \-%T,,&pX>DP0d C,tȝ섞obLHTPX ҕ8A>sºB.N+'A.q΅/$dpA4xCu1c^Qx$r>7ȁj'86i,m-b1/@TBLykGY_Hwpv*J0DDEs>yf7sB18( Mϊ}yt}9"D0T#8ׂ4uXDnDCAkt4BLXYEls#F=PNc,ABD'li@B_?8pB蠬6)pg$ _1A0 `嬓/׭[80E'H`蹐$0 D!KFeHADah` ̆ E 'RP[x-!Eή2R: '€7[僖9Gsʚ7H[!>P"kzy ab @BZ8o3tAgnϘjfHÛ9x9@ Uh]EAo$N | 1xp^<` }-C:h S^þY"M {ii2 p!j Qp"""ڴ;,8hd"G8*e""4 ae&^ZI** '3'@(B**jjA+ D$`(k*[RZYU*S'0\HՃh&L`Z5 4C(SOj#F*aoJ˭~XBda(b8(SbE E0Z!?Ne$3x%nԸi5򡛃B 3xNaȆ_fŭ@B<8kVH O>1[6Iሾ~Cnu Vjxmց;;ɁٹY`$&[WNg jߓB`YzIg0t2g^c_9:_]dYؠr ZaQos"$t8A: 'T*c\TpFɰe{g"!D;Ņ\FhNƐ iή*!AV$ɏ⸅™dE@lB: D,`qAvum qZ,Heu@ 70*I ! 8XnX'I <øIK2y G^;`D[nիyf[\*9 !+Oni,{8Ht>Z ٥oDF̏ 9PY QPŜԕA/`E]myhR"iv^p-҇\r`oHk4p9/-NWd#bGql a#B^rГlg <|@g]7AI=٘奿Cҹ cuHmQiI%(f*ʧd]Hܧ|bF?9ڊNEa i~׆=g%g BT A@w9JCBq׼/I6'8VDm KuK4M!hKW'BR-8S. PҰ;Dj{B)>B䔍C%E!5h\\sU؇䮚-*keVkqC(xv A` -~z"=GC$(-'Gnp A!t!~NJXZgz]v;~hN`$, 6(hANX FjbD'*Cp\f! V"*OR J.avnN9Ngi``A ab`( Xl! F$ oPz>"QDBfrL$* Ǯ`K~FCpB 'UC20H',b&DC Z B(h<$IЎ%efE9c7lH}Lm~ 9j 7X}@,f "!~,k! 6;v@82z>j $ D0"<,^"2䢎@$O$ /p FKk;En!S  q!/pBB͙H$؋0BFt&  D"Db$Oq@UzqBrbsFp!|Q 0(%(c,Kc'!'R1(C$ A,^ (C gZi|Bg ] zhA| r[D`Bfi@j :R89;:!"@#H$ D$tg &Z" 0 A&s' HYk 7B8*!`Tgvr!@a!(Q$>1,j`"X"r!\' N$l!D4rZB?!Bt. :0NVЫqyB0: 2UV &JG W` 6aeq!ր"Z#@)=ii b9P0D_h6a^2)H H}aj `I/ k'1Ha s2:63BVxta4iܧBS*OZS6ZC$Po"ZlQ[ Hg>.Z8@ޥ4S(ז Ha/5#¶f2@A;{٘V>Iv / xT$@`b~-vA;F*ެ(`ah6j]%7$-A$mtUt!ZtZ!RpO"b^Q,@Qɾ$h)ax8">L,bc:iL31*ĔDx(' E"3Z)O1T0z`OmJM$XK!Z{ .wA?zTDDcRgBnb002`ౢ@0>V~`La/!d H*,lZl8K NQcoi|ʐ"8RS"6"9㶊ӄR$ -`hi "&gl`0,bbh{blzp΅/3bVZ%(a/a,"/^iX]jnP=pМ0g7R|!cZz!6:9R<OJHn! @1%{~6&hTabh$@8>$p㢭Bt!:҆eXR%Fe=D3w"F,}!nb` 2"_bbx%vk"" \+~cr@+@$H' D]"D_@'ZMZ$F P`)J5 */Of@Of9.Ϡ 3VEc2D^O,U6 K0zkF _ĺf%'s^bzPqL;a⣊:" Vtg*Zw (_H[*Ԩ!hC6k"%$HWp` b[$q!qa_Bt(Fs;#d[Y!gAL"bv ظ]_٩ #<"Ă`5οea`_,`=LۢDQG*~L'L1ObK}A":S e!PpB0/Rn劚Rda/֠7,Y*;:YX# Id{lA8S $ 8@Au(`? $@,HEB|sXŋ3j;#Ǣ{D0 bIDBe&mbЏы(%ы#sd5X:FpWA|HJc70p%AE#X"C Ѹybg?hB) l͸)5쌰70`ԗoOuq w~.ZM0g Ψ`<x@*ئT@-1E~ b_qqP_LY2QSraAQSmJg"zjMm"Q4Q=G!!K9zA؀-OuF 5q 8jqTF-VMTw`䒃yEyNNALAEluVFj`4MQ @jϢD' `2XF(`g2(̆9ķN#/)ja2LA\a_MuẼͭ-4ڑGrm)^ARtMJyL $` ,X0]D@4bH\̨Z" S~p@ 9B5ak.1Kt^$?JV2<6֩MW)2rӻ8QIH;tl3JHS=va>0& V rGB2ItLA\1E!cb #?|N39hYC4a @$6'9<'OR6ֈdOXEv)'AxA"E6\T$ E'%q!E2ԾdR?---ȡŎ<"(Fq}1&f`MLREk!3 Ӣ =EBDB0,/@B:M|wg @o]9j5oZJZ[c0F^B2՞V "n Tf0"'h(Vق h"5RFA e.x*7^!!Xz͡#3E ;0LRo2bAp\d =)(@ Ӛdj0ݧMHNp0PE`[e5_UYF,iAYIFPJi(rkl$oRx qR@^tG YWl([fz1AZ2dZG#7iZu}xͺ|WĕG ۉP^R2Mj\3(@B "Ct0Z3uA su>[A!2q+:mRxsRG\i>1qwDDa  px2C\i(>0p GЄV})~FTRP898mvPTa7X \rQSjPS `Isnn8R9vwhYe3@ qg\V5&ad`Ec`)AeI6ΘBC&ۀ.!!@:a,}=3pXvI?pZ)8aMoƎ4?-quxax+Q^Ag`0u Wmɑ @] C IuKAm,P!' őK%:H .d+XDǧ!\a0h(r| (x(z/0g4)PBd`%.#CUg >} %H\h qWDD#q&Ad4qOMVA=QVqt@@0'p!nvb KU AG3ƒQv1 vxy 4r9Ic: !4L@/k\#21Ԁ=ma;1axAC0cAjLP`#FQ`)ʉf|غ+J!@ faVr++uH}DQJY@h 961Uc[s1&:QIVq(LcNGsJy4/0g JDJWY}!!!@  %RRhu;, r1q7Zmu񴒇8G@jzB^!21 Z$: BGN1 P*IWu sQ>P43ţJmpuD#'9je@{vQSF`W)D 5X0u#Ӈ:`2/KET) U 0 "?bEP GPB܀NJaIVRDIB\ cHԃ+ݒ)x u0Q@  ^t17R2KǕ @@#Ct'0[s!8ysiMq!|I@ QB#g06~-I!w,&+Iyc#% C8 uqҤG7 6f 2SdabjS0>)0(!gmL0:\ pD: s=vi,"}Pl%QL%];SXd.b)Q~Tf&ˈې-BeKTz@]{VsN0AG1`NWV=x>U`2} t08 F0ހv競?Ӧ!si ,uD1htBr` gR0O 0aIH ^0z<āC Qd@Z2nL08P(}(jKzpG)f8 ֭WO9>}Tkl#N@K3PELH]3qG` GPw!˃- $2.Qrٲc%'JF\@`L9 i01 fUV, }0$@UR?a!Lb>  hPT!)>z}@r Q]6`T|Ҫ~=p)` $ ّ}wC1aڕ S[c}`| (Q{L{|Q8z  J. /m|grfs,vgkpa1Gqu@p\"Aή@F!;!ql` !Xɑ.'$-<Wteϳ-(.->Ep!,  OdYVs%Ma@ u0 [1pt`5M! Y V+u ހz0c&q#)U ]3'7To2o" '_K` tDq; 4<!=B.ռr $q1;6A@x!C$XEĥT3.֩Hz RY< ` $KHR&B l;1L!%###P+]yK^{ AqQv +q"x%!+ յbP$ o&@$GPAPe ׭+@; (@M [dD:>NHf@6C=ƄaPA_@h)" c X@0O [C,  (#\CH."` Fkj 6ȾbH0dHжaż`qG(ډfjD0")DREZڏ @^c#D6NEd(^# cp > j6萢B#QW(J덊@hb R4 }NE(MpX@(.ȋzAnQ^+Q"Dc>|2,֖6A !7 ._ !# IH^g!(PXoHp7!$C3/!R=U-go3(FH*L+0|ȏ08HdSL!(Ej|#klj҄nF RGP ڑ 3~m0K&dž+:/67JTg؜G%̞&"*zٚ:RBͦA6+1`P".ϖeiMȨYԬGEqD(@aDFH HЫ)`W؊"X ώ.ƫA !;jp&0{Uu؟]Ǣ $=Φ`̧>  >CIE T Uf Jc F&`*PGotR|Vg7bAjG4 A`mh%Q N$\U3a E:Hz"l.yxuBD %h&148S/$9O %'l"Oqz*ihU6T ɇa;#/҅'!Bȋ7;4 ZA-lqJ#p]rwr`@@/FK}N'12H K l`!_AP`!=<9  B +eAP,H Dm |A G$)0B 0 )C "m0ҐF-/YVUrH{{gh:T?5D %ч1/gF!"9C?y !`z@cx\KwpQ\d1R؜"Ȣ#LgO\0d܀"' 0rt JHE|u>DY$-;]Oފbb)`t3d{0)8xJ0xK)lPхR]d")r凤U$6Y[qt(d!`/k;=R/bHD@D\ ҈ c개Li@䰈mZ-3x4py&p--f E & .-B 4j@d ̂, [3I =[.Yʌ BBHC캈Q;CqH*"p h xೈ@7B ZB @Qc1@J BBP"Mp6H98!+)`?P"83B`T\9 `3#2Gh m,r(,W:z;CHpH-DÈ]yNZHBa57 IOY9^;o1)*Rû5‹yCJ<ƨIũ" ؉yN@KH kg N>7j:xc\ ( cK@]h+(6:8<Ec3CFF!Q%(ֹ Y uċ9Ш8UH,P ]4Ap-rAAĦSD6A⃀0o K BЕ)0/^oE<>YXIC$&ڃZ8M SYbSiS̨m(%J2@%?q#&D NN H<)3]`JTm۪NLA&!" )"dAܹQSi`YcLpg \{f%C3ʽ }+-N/X ԋ0J C%E=3(h 7qS+,=~#3Q(TXㄠϩ 5b,`6̋hӋ#+Eia( a2x3("@ ᩮ0QU $x3MzHu!pn?mRQ@PTE'[紈pM'dA) JH h,;hd`W[0Zo¾3ŁiuZATxڄ`xApɟGH(|n'E(^gDM1P:Wh@: 3?8bk5ab')8h{!` ` mфTC. L! >m gueG~TЊIO`JD倈q{cd "pu ͂3 qЅ)dk~;ҋh;&5ёW MkŞYF Df2+%HM.O<'ڊ:9GSOn~8Ȋ# ;A焰B8'{*U{OƣD!Uh 6,4Vkѥ# ؈*b0"PYYB'e5|ȃCae(ryjnxZ|B*c/7g2'!ޢPe=Z%Nq8Zx !{9|уNj6x>#KZ(DMi1eu< Fա4Oy2]$EdO40= I?yA(s$ PKZ﬈Ym=$ȀKJgዸOeN2ZRW4`5Q tdR$D:2D7`(PSn/p5CCP9Ikٕ(ዠ(<#v5PЅ6 ^rxT0R7cx =n"N}[Ă*:gX {D15 KwCV] il#@ 2lp " DT %*#F(8(Ô pp6*g KlhT#0 g- C5Dt)RO^tHU 1J*k Oo>j94d$~$g@ @,&Qh c @ =&4AV܃ږ-Mv94BU& 7hZ n.7P^a s=8W"o O]` {TSC!>x ]C~p00L7@ЊBa@ t@ISH-dArV[ I7Ai)4Bp( >%8&+Pcв&!m4hidvdP $)|*ЂhJ@V/2uC*  s1QC }*ZYP/30P3',Ƙ|'%pa !%:ps<cI[sDAYQG&G$idB*4&ɑU+th 5c 8'P{:Q OS AAO̢BAxrI9čanO AL\7CyPX+mT$- L^V2JFyrP_Bȥpf en C0\r,8\JE1H REprYd,pd!T7*cIN/ lf#N^F{A|t=pG5;ܬZ?Aư !@h\2 V,zT+MhÒzUbi:T^ceA( '@V4;$vH|$!ՙm 1'!a+ZIHDB} hz h%q$M61]LtxoU8쐝1KPțw8Te2/ 0W(A BL@˜U "4Pj[̝xChDD{8Y`PL *H@ C@ 0ѰДLTF)GLP9ylĎ@ęF4% =D-Ĕl®גBC8B}Bt< P^)REqB2flB@`57(OAn`oPqϰxK% ֕ uA + Ђ[1̓IJw3hEJdg5sCx؏XI-=D '˘-@‹=<1z<t` >FԈ 8PA$L@G/C 1 "(0BJ<Fh[R(#)Ă5( yUd GPJdz,P! mBυ 2$3FPFuL nFIK)#-%) kDB$& `B5$Jx  RB0PV*L & wTAy87P% AP\@Bԁ\ND\5bOlXô kRBnƱYt2k&y}F;Y\CXC1))J2O(rsiW\h2N"><8"m42} 6-'ZdAĈ7̢@C:<3XOVmI~輅%@Bx0^ xJ:(Cl:UB/hh:D} u i.@>@.`L@CL] .DHcb/kn)x>,?.àBd9Xa #'Ar ,Mh`u6*HYB(k2c.xp|{-O\E@! )$C(X\MM"P'2!E6BΧRy:{\!rH ;7\ys"T|`U>cG;yy0'(A?F K6p@[LyJUg 6]7TΌ*p6@rx@#TZ~.̘s7  8o 1q\o2>=f6o``8@mvp K`RcPwP_j!vg +OZqPCn2a]vb'@IxBB'5^* oZ *'5z 4K'/J/ho R"b*Ir=`|<idh#Bft9A#ɼQO@lF&">c;!D̒,`O@#p@/PJ`2*L<`iMdN8X&*r®<VSj+^ OLBMT/`Ͻ }`}>;Ȓ" 0"hd)2PYR` 0 #l>pYfXes#>eNBEtY#$r x6%d~u2Jڃ(עB5ԏ}*kVXRxWZrvoӸBH3m/zFŝ Q )bF=~rrFaH#eYөLcRt RFr͵q:/}%:Ubk@< }': (j,e*9ДX#xi PQ>A` mש4 ɰd G|ŗ!1l#*Y(U>H|#>KZ]0+KqT@/k[@p1w)dJ> 8# c| D@NBr &bo0`OL`y^8TY>QH3"9>Pi A+<&ѥǂ Jq~nJI5^g הE+v&$4fCxƂ+, Dft l 4 p QHnTڸq-E Jzk>A@0'_>/Rt" rx'3B@* qT;@G'gtVe f 3!"_#y&n4n)uH[ w"et }Џ Q;T&E|O" #p b,`fa Ü4Zp a&:c(ڰ+{XٕqMx>2U Mb zɃ\'Yq/M }zr7mi) >a{$,  LCQ&1؞ |gs -҇>DPm'%(ifܪ/5m>U=7x!afP5$m^ 'נ#$>3>[#'0Џ XC1g)2X!OP3lhEWP0ch6ďB~ (EVׁAɶBr[N'HA1 $ :@ࠕ3 TEV,bJae\e_ $C J} 5eD~Y! @fXy'[fx#Z\#Ϝ!A  j(۶ȆmR SRl!V$cH+`,Zq!w5UQ,|'P A z;VwmAН0ۄub4qdՁšV},HmO#][ܠ6؛I'l6G=O[5 pkX)I<0+H|d*+AZhreiB]!3O"X v )KR|dٓ<?9O&% ,א!&Lxknbyjcf=2e`Xya #wH/z4}ًd6Z! vd|n۽ ܃( k> #@/8`uƌ4_C̀g= ЊkcVX`U+P =vmĖO>]Y0܁$8.2O`'6rl:u^ځ5&ߟBhk N#\a `fn' `^v{>"Bk~)a &Al«`Xr  $A2b̪>,$"j!s4'| N)֮ I~K %D8 f@hNH z&n0J <1>#_(.B,a0vGL4*2m6RH ~Â'M& ,(#.Ji r>('ZŜ)6AB)u aZqbb,@m2<?o p. #>@P,\Z68R#J*6X ,Ŧn L ka5`g&6Jœdxa^'* nr !}BC=B' *qSD6~ A˴,¯ds)A @A^fS]著2` P`Bq), xcP֧%1 &QJ…Hb! BeS([Nzb,"14h%?r2C>Uls#`z`kPCE bn {‹`/ 1@fH%+b,$(@5<{<[B S\Dyb$zqV .!LtK=g06ns!i,$) ^ '`r @"0=yB4f 4R E \e'! '^@CaB'&D_'QHA2.=>cap4c2DC4\a&'qN,avI+.?<*@laQLcT)HufSB( Y%Ibi`GQR !:V'f#"br@> T)!0 v) '#"$qޑ'" yb0 F A_  j}"9]ԃhGH*Ҥ!f `F z!'D &Aat C`I0^Vd`v*WA0RcC>¡^Ql\AذbL^[nD@X*'j UgcF#dAsIO'4%B#j!. cddQOUl# R`* #5J YSu#gSFX '="B,Pub{0dBV s)^Cx'~0T%H~ `zr!OqQD~*-wp w}zr,#p"6 D5P XA3q2R~'Fl c?Le$>t4+HC޵ 8ؓ/w#'.ʯ"tx} vl"+3>d #X%vcf'#Pf,UЕ`wq! " &>NTh)(p {`t Q:8tzIÙ !zk!Rn8 &s;iDC ;#:jpYz؇ba`ᥦƺsA>KwFH1W?3D~$mb,A tL0ݓDŽw2.sP'72x{ez*>b*v)vbz;`I >6$LȠ`!^J}b^ Z&HY | #@h|O#Yib ̂k_ Fi&leyz}$ M#Ȩ "D#0 )flvIb UU03@#>¦V9=-FR.B‡QC>kdQ8l!wb&nPQ8 N@6Q(CG!$3pmm |Fda~K/4.:_ .ˏUOKv vK`x\v@s%v@NLL `3c#$`wrk0.,soT=1ԱO?"{v >b$6{CQϲ?Gl0NGB;20B|A/D fdg6.>"ǫ ytd$ڧt)րb/'T*=#C2>>GҮ4*ښPLX5Q*` `mN4Hh@ n #ʏ1rh jx  ?4>gf~@+V-jxZ6.bڧ{Csо?eEѨ4e'З'$m-.S H@4w4ny 'd ~v'i7^{` # 0*/0l`|< ccrJiaoEFnD3u'gXvvo '0&>}"jʢJDu `}^yJ az7&`'_ SA *f4֦ b?Bh&@G!& ~B .%h.%k?0'^Z' }cBs6F;9BYtYF?)X`%Sg=&-$ {b @'v˙n`u*`XP%؆B2¹ #@? eDB20șFHl <0!t +Zf1#4*xģȑx9Gȕây! `Fg8|O83)j%rV@tP%H <F 81Q~8SvB%i=X 1*lCGDgS "4@`a$g~#9>wp> n 8$l+_)J#$/B!# >S7 i L a8PM,ґGRX4EQP4$P6"@9T`PB <lVf̣\mm"BF0@S D{L՛DQG Ҁ:ALՎAED!4cB4uPOЂ`9E TG8E;/4BbX3B T^@2AmYh!(bV"pP"+aBb]L΢`3ۨ5aI9!(p kIv7A`5B4bQ8E5YMNB؄ ȇrIkA^B́OWA5Q0. @ QdTBd($Hq@fg !aBv;gBPƬ`yh @"uHgN%$+i@7H_ L2@D2}^홂}m@ > 3Rg`X $h@V*HG9@DdQ"u`ЛME$| w\f.,aQʊ9a&ByErU!F07(a+ND&وo,hpѣB6X8p83{9G@Ҁ$@HF$tl$`|HABT[ZK:QX 4Ø*,BRH @Xp㫜 HCB! "=#"C FhTH42{k_<s!P87?v@˂R1d̃#E2%8^A4*S qVD> @r1B$ 0@YB6#DrȡE`Te$ Cp飃gB6Le0tG` XjD0jaAFcO (&)9|xLE ieΰ w? м$ 1Xb laF! )눁xG ºV4_JR|t0E6)P6ůEc2 .>-GG)]-V$SsK ($ Cc0` ̄TrHz{(^s}eAD!+f4رӟNr4G[Ce8І7÷뼾@!C QFґ]QQ= _s \F(|]YΒvFŝ M"IXЖ3lE[a%"F ~Z ZxAIap ]@ a;DB\- ׿tnN""y A^AG"qa<86'!q-/〴5.q.Uu2u/#$ʣr*B!Yq܊h0Aa5?.y(K܍El!EPʴxI|SSJXO$>3PI@G&Bzd\`Bd(-dHW !ED(@ V 'VJ$A#F+m@S$pP0 B !3 & +tnGq~"JW'bkHlGu$IE`1~ A$1}xB xQ?PVA ~ZԒ;uiW^(v2 9tZYMj KghE3kc/ Ͷ͆ "4'Ȱ sV 1^0"p}0@ 1=85Hp1c(Sx !$7G:=H!EAwX;]_*UH&VBQ# ' -7 mw` R.1&r'WhF m(. LPsX+q ], \po`G'1.af Q 9u#Q A6+,oW܀Ql%@iw?;W8x}` +X3BxjF|4V$ /uAb;Rp>&S N\ ut(? W!wy"4w@ @V`&˸61Ba~1$w`V !aa"H$q2$o a..3.)P` |΃%rik@tj 8Bpq&RSd vG`;q&Uuvoig"'9 F9);E-Q@ QHQy0bp b 0=yr q,pge~QoyI6x6@  rtˀ2OGGe?"0 Sf !2 a 'R-}s`R SWH`6`"alj[ g0o0x)T5*4>|b .Escq9< +RGsmhUZ jX">1 3S!1fa* " a {pCk $ )@ zVp ?);t0K{vёYTWz? AgP ю9o!+)6*3ZS!:  q?*+tN{ e%8| mC|C + qsZNVtG1k@NFQVKr(H$v%$̺{2ViӒzz-Nam?1Fq=$2g'u EطA LœS )BEQw0G$8C#5"Lwhg@gP'VWg Pd( (achq| 60KԗISSjՠ tи} ?aG!T @ I99r"i&E%P!8zWA W0 !<+# ;)+b07' Valϛ01>[H`|Mp=g DɻRwCL 2!@ L1Sp E""C8}x%9!AaCg100 m`4 s0 cވ*Q[W  ^wk tqfZq`dq0)a1sku- 0a*2Q,!jp~  _-dW(Bɧ`aB=.@0Vb;-"Cg0@ wx}ګ`}HXKaDHN D% ؁R t]M@1 PZ@oWƴ-s"!aga7~#+` 3?-:G.##}tp# д #eek(n&V,iL2 I 28\HMa`8lM\ :dP $@[G* ܡ~j֪`a,RuZX~~T(YQPZ 8Phb 2ĖOV V"b ^xmQ:m9f#{d Bx!!_ 0s6{cGdTaH(v՚R/{0#} {P 1$a9B.$#chgUQp6AQw/`r#D FN,g(Ɔt]!(l8 @V %CtA,Iq19:;0Q!'T^ m:?`h{ 0VmUW)o@,g=aLBN#F +aPf.@LL@ uPBS>TB!Hh校l;vYAZb(X,3,wKkFN/uBC߆n'pOSMr0G (+0ؘ iGxU{5֪u9lQ5ť^hp!E  >',8@  嶺71p^Z`2fD1ܔ I@Bka2@ [P` ѻp$bFX>CkԂHC0A:)\ '/lj2(`" e« Bj,@ 4 ଂh$ Ǡv 2.TH 0P Q2#͂$@#A$(N1<A(1H5DtG RS H @]NH6H!7J*b!k*ʿ! p!4dHIj١iBa?("ƠW꧍#1ŠTNQ D9 6_yF6WL;HU  *2HH C X("^{y'^^$Ϡwڴ>cZl4W}y!v0 ,Ȗ<H8 9  V(J 8FoD1j]h*J 캢͇8(D ~ Ka 22JgC&B$ }dL732hOUZHQ z!|X0}; &@ovԄՇXjb Vٰځ `&2 , :Clq xε]il((+>1Vk^B l 2<lT?@H.`YCHpBS9H` c) 3bJ!$d$ʑexU({ZѤbkآBc\D,(dɢ@au ^mG nPZ̐A q@ZTd'o{4dxtC0Э PD2;9#nHbnt+ (]P,VTFFnELQQB60`+ك&j}zQdž6l1pVb"sĪ gxHkp tPA@|# FB &+hg)N@x %a6kС@.h@>Г< %"J @l$!~dV!?B_Ap>ƭ8U+(WÝQB"C.`  h8,5h^pExV 6"k,HT(I|LVM4@y%qTMP RF4#٘A49ĩ*KuPqR`d$Ȩd 0@0lբYcIxQd*)Bו#x%uƫKeW|V B)hBdDg* 6K , r( OcrPœrbF@v~ "FN҇u9ivV$#t<MtBɂd!BPCaE/ G 1$*q PW@Wf,.ݫ"V6+Ay4 3ZJ:D&h Zvq&x2cMLfբA!%@ B ! yD`ue<:"-?fJ aH*PoBI0BH TCf)8'#Ke!MU:TlQ(`7LT@9%~.仐 y"C{!zX˕. ׾C<9'őc%[`9j_ BZC6%43W.-ڍ"Ƨ@V)(8P5pR2w,Y,8taپx`F ov=G+R&Yl h@^Ub2:4DHOxp:P@0 d >H8.Y1<D0"f_Ќz--zB%C/fP>PAh1LrHD۶O`qruD̃0Ly=5aLp;1͜n+Ӛ*H^0vpsX!i{/d,{3K€.8G|Ѡ2 [[ {xY VRɂ:ȉQo/x4ȇkqj!(0)+K(?uK?89 |/3 <# )H( }6P .b<8"#4VZчƈ>'=B4KЂ1KaSr8-IBPc2M$q=P Zy(P ]` BH? H+3* 84.ྤ) `p}7Atk 0B[؁#"?w/lFXyBM(.Y c2 KhSxŃp\!.91V"KJ3x@ IX10Ht `,M%AWh3hvpW[0ۃ3Ї #0hЇc a1H"A8KDؼ$S3T=0E(-P5a=E :JQ-KWȂD(+];0؝gaȅ36x`6y Mk&.3OM\ً&]h#D"=rC:(쐀Y 6X )Sd@x&3؍@cI,7^81؝\ PwL|W"KQl2%Y0͕ "[NBC#(8C aAR x El[k1 P)+ S`8lS9eN>eni[=bST0,@18 1ig0C8 -00@MMMgl. iam*i\# '!*IY=&[- g!˃ =`[-v X85Xm5>H~Gy$[@0zٝ0 >Ȃ~0yLGk-'4+8@Z9*!S:mЇW9)2ˆ4J?љ] 4Ҫ/U)m(/@ͽҸ<9KzYc/_ILH/쬂Y["MCy MMvA ȅ\.\ `<4W!bʇ>]Ї= }`i ! ay#,/@7e[vJUl[~Wix"~ŅPg K/oxV0Yh ؝ :A 0h2Pn: a4jxɅ! %8B/@}!_`,+!-عCYC",ʣ໎bB^i=,APYa>5wD< ,NLBDՉ,2A S(`A$^~¸ " tBVؽV݃\~Of ׇ 2Nk)+amↅUmQ |H (Yx q")v*D@\gK q| CQ`RCU\PqrJQo:@`d8y [{BJ?K 8tNjLQ"[rTr6 x*)1P/pPڄ$M x@)ו)@2 4*+o@$'e8U.[&2-\|Pj`^05r[7PA*9V`Y`TjV h5R"/vD\M7C=THTPgr0xڹD?g% ,WQ g/Xg6u .'>LJ3uhEq7&apxOB4 K;#ѱ)\p"pQz\, VpqW0Yʷ 欎Orbrk1J$X KhC{ :Ǐ dʼngCP=31?jnI6נ$Ey` s %')'DCn[$Kv59hp!#GLpD{nHoaE[ZcVAF%6 S>(s&͚mɩaK)kIS Kt!#lB5+'hVo&: -)k!< daK>nE].3uڰX`ePa%7x"\LiAQ ^R0SZC킶Y keih\`=9`J6 JamcBd`F``B@ eap\bXu+LD Mz7L$?4@NveC XS*2<0.KM0 <$ =7 h&X-5 DB>LL YL$A3~tD%dI٢k;ĔD 5Gr7P;eM{T$ӊFMEdVAby!,4+jX6ɰ12a2EgbLD]H5I$@`5-tXCi1jf%sTA*0 7XS-$th',a R(Mpt0.$ApC ɱ4bP's C0~; 6 :C"T%NxP08 a%7*ACU]DP."%D|H.iP-0'(JLGCG ^)4Vzc@DeIhXC1yP5*CX+0Q^2Ea5IqAu6=fPD. 9(P;6C0+q\g2I-!?,&DU9uP xʔUnzBatL+C:Us7=C"X8>M"$ UBB\3`/NRUTѮ"I2$GR&4|fL095t[E䜪0LvQ? 2!*a(Fև:i&1x}83|+D ! xa ԭ&u 3 t ~qA`ē~Bހ8T*yѝ`p&31jRIz ,1]A@ FO,p6lW\{x.wcB,pфvTYA:8<2 3@Nf.8^ٳ˾-3PΤ|G U 3fythY -$!E1 c$Q$$F:WJcL+Ak]%, !Cbc CHi+Th 'X@w4apO MwX.Q bm"_Fa շ-$2J[X?A>K!HqDJj xgP42H Pj؍4cT9 2`GS̉&)1B& 3H褋 WI< ʡ7 %r8aΉd Uxt\ك6%2a`MR51B=$0t=&v[*k7Z &!8VpAӏZk'!L!BE5AA( ìSX @, $ + EG. a޼v!8VYpXgꁞ=r"AISP mxEʅBw6H!j2LV&k2hrR T 9|1]Z ӝȂ>pmʅ6΄`Xnq͒ \!E$@9'tP9E`pBFE+}$u+6"8  +pN䉝-B:L)1{/-<,} Y 5x:iInADA &ݫ,vB,8&X\Tԃil&C@!M%<>AP|0 &[!H 12S$:ԏLAD `A`4!P7Db"ym@FFԕ@Y;JPA #M<ՠ 2\TȄFMDR\DX  a ʄ,n)L܃`X*2dPM[ UB-2t\B%ˊL[휉DP5h$HIx8`='-B߲LhUP#_I Mlo \Ah`@ޜ!C\O,0*c !#_F_G.C@WrmpL*`qQ#:``34Bd׀E!CUQJ\1T9D <^.9F-A.!$tT5*U]a$AH]F>EDD$=xEdXS F$=p$C ]pNM M@E|h<ppLpAXEΠAG-4Llhv<0\B)Mp@B£[@Dԥ]*,# L_)5MW*\#Մ.\ŧ`XCAϠؒkfG@D&Db_82l7\Gqv_lՠLAAP$7dAn҄KB @pƅ h/,`@ABVAռiAU\,T*CAFMbDXTCuA~ Pd*}WhHܩȟ`:i pCq%"HP,A<"ChǺLAH-\|ci +<P-P&􃝤AB߀|B}B%@6M5D"C0L4B/* @@f2Y9*C8Μ0DۣpT퍑$+$_9E ƣD`S1a 2wJA5PMלCl,QUW0C 0D$b'R,>pFԔ Kc|^#S/pLe~Lt)0DC$„bA0_HD̮DkdQ͓$$*CA)nn\d-dk77x!1ό.( ZLN Uެѣbd|?E% T$tEX[Mq 2mvx'-D5TC[tA/ (?8'bA,7t<q-NHg:4D/ ^dAǗDլEAzQFgl+ЎG7lBF 1 hBl{1P;LDyV$T-J-H$8P&N\N "?UB_]ȬP@?i3D'~jr\Bd@1(M%b../D6DBDC$\#:oӄG0sǯXFt٘& Dt.CRPB&@ɬ0DA yUA>PQA/D(|M UtH/h-\@ĂTLasEݔZH$ B9P@XUD(AhHB8,_Xł4A4:tjwB~‹wj2D!NE|?$T6 4.CxâPyC5| C -t*EH1-S7B8 VD(A#yH<V@BIq#8bi dDH{Daׂ E_ICV0<+0vp6i˹TAh&.4DH!M ϢA(4*lu*A0o"A2؇LĶAÿZI~[ B0q4H5Fָ0Cd%HO(҆U%Rm X#vYH+Md.DfBpIA [lE?8Mx2H֍0W' Cv-T2?3F:H:E=aiߍ)`,h 4.CC"` p.,=<'9՞;E_6C=h2CM.ĊJ&@I(UцH+hhԊ-(mBP.!BB(-mxAvwܾAâ*BT}ʇCc{v{t7` 5raă$i2oK$;?>e[D%X>[ &#r@n&T6[6f G34 -'a CA5`$^CZ1PP!dȠ%BeLj>Bd 6Kn Wb'%B Jux,YeFH"V "6a,_9p*C}(2!l!Lp R=i!XZH IS( @4*a ,pӞj3lC-]sd ,Bi8`M P&!C)Tg$DFT@!g1hn"踅`<`qGQ` k$:bDfb#8H"m`H$H!> ɧ|R^VR(Qz.dE*$!)"/P%,tf b!%!h9mαC0 T*W Cːr{J,), %@8,G4C1e v=`u5Պ[R9\CHn"qg<Nx<"2`*?ZXcaɆ{KTc>N Ex@:!* ]aKZ! 4rh Dn؄Wђn0㢦$#`.!H'5$ZNH8!  ȭ8]h8} CB,  1*ʦ^oPp 8ioJVU,t:Y3Q{>i`sSd $T  HA*#/AĠ5~Kq ~9r yGBJP]HOCȘ)X0p .Bx.Z.@WbAKh1>c кB$(`Ce?$6aCd:IEp8m؄y. }@!+P"?" r!$:HL@Dh;H3|ZI\!8A1^$)^".p:j"$*QQq=KpYu;!KrIs+ b$`ꈑ"9r~fDi,N9hAI?ka )&R!$P`H8b p<-ߑ:3#0XҶ PȡЄBٹH;^U߭6`ƤwԂ?Αm#/2S+>*Hc0^ anA1o(I,1 G'VM5P $ [G,ZdRWi@b68PJ#DN[j6AkO6C΃ BN AbAr4bBr@t5p~hB |.!vzgv!(ED2Be($#(.!!aHP2Œ4FNGvD  Bk"J% .!Ja^EDO $ M#ځ`o!t ,!J!`)!!"q5,TAQ :!!DAL񕆠 zFزKݾonSB`(BnZ!`Z/%!gT>fP (Eh"50$lALʤ~`6 adIl8PBиaj#ma]߬NH!Ŭ0J/=d.(o \X B!&M!%}h&&;4ca D@4K!2 Iq$J)UCdmtKtAaZd` b K ֪N̠  $ B*P4:h R0*5/!a1t/!. B>P'3"B|phKJg \-/@pbUv0N .8*qش (囬sIS9c'@)#8PA-#NA!=3e8juRix`<~.bۮ4-a4"b  P 3!XEB.t&?$V!@D d!`PzM EVBOC ĉ VtaԹTec5iB_`ryg`J8J+4#. Nvj#v# P0('d @^13g. 0Ԗ*Z !P2NG!T!V=%:`J= ] ~gz7JJ! >u<`I4J!P j 6+t!$4h2C54 c A}zA4!$(dJ!pzᠯ' PBB !cBVX!`hv u_([!0*cJAb$4pL? f'!&!BD 2OlQm*7!lHO%O@g.dQ"&Q!s#·S1fByhJt T, LؠL>l >\ NYA4ubHOF :=D΢6ucF"!l@;j 0>X$!b!<F83n M M!r yb"(D lH!XDn M!.DD* BG!֌!ƒ-S[ FLPZ4}j^LrPAG $X@4x !f!8DBR`v!AkYALP;\Q0r'TVsNA"& q:RWצJTeeUS`V݂!DnkmUK$ #) . lYJdvY#5f)X _&<#!&(Σ n$ǹin^yÅЮdr5ܠ =0A"w,CA|'iQ`db"BtL"@dmU;#(A IIB#Œ :: !F͸C"4.FA2ܭN!PN X`N*FbB!tOO!괳$n*1uX"S)Lr8cvx`Cxxm8A/鍏vﴏQDeNTfTRe%Ш:)~a !V$.ԭSs۔DcC;Fo4RBk8]$ Zr{78t [W8:ȤDccGqƃbZb~p;dLO!YԧY#Md.~5`p t'tAb!ؖ5zAeA'L6BFGM,FĽnٝbGPD )=[2ڀD!!6V꼁Hh! 0Y"z1_Bw 807U Ȱa5"l.(=dNH=(q͛YR\zv۷6 dYӁZh# zRZt 3,V#rp9zV,`p}rïlc˖Ɨ8tKI |֭2CD^͚>=8hH7(Fa3Fϑ#ܒmR-W@~0gQt;|C0ko_(f]3}EK9pJ/ <h U70&81j2"A92&c$)4ljrFAjYrDP`K `F h$8(PrѢ˂I4AJHD=RL&40 y$O4TA?@p 0 `nE)B)@1 tT\"'+ C@-ղCb`C1Gp`7ubt]!PD2$#(>ƚx> CōC A?opɒ%X's&P k gpwcni tIdzN{אL@ɘ`}ې<3ZjL@HT4tf(H2>&AÐH-:X7 h'` 6$4cQ04${bԪ9yK0,Bމ< &XAD% @YH2au (% Ԃt"0yʹ0LDz@ ༬@@=t3O9JB]rfS}#@T`m@~ec Gk 00\cXƘCU iJ Z怫5tA !@4R T3g8Ip9!6&[ Mv&- cX,yjfѧu 56DهQ@8 7dvbH9D#  "D:qI\z4H}2!&կ!cCC8zs `Xda*Cў1x221Y&q0@ $M Ui Xi7(Ưt R+1* *Pb `ar*j&cS 2K4ǒJZ+]+]"L| ).@IїG#F+`0V}y A4e!0jӏQ&Fe,}\vBS R,ʹl`!%"yFD s@^P``޸+@+Z_j :ݰ h h}m*JAm-u۞@^R EB_R` bEc!Phѐ@c+  8yQR̸Sx)JC`-*S!94;KL0%"xpmR XiJA@Єq`!C5eCR`Qqoe, C3, DO ?t'(ui}6Άw:@%v}k$H(@Fu7do`У蓪vCJI6,QHt_ vm Ek΢>0~Q4ArPd4rBV+&2BTz]M#Bp#հ&dU!Cq%3@ ?0`  Orx? 0b0,AF`S S`02` oPAZ-qul  s c!-R u@uT}ET^vce /hS 3PUUkC wCAL 9k4{v#07"p|` (0pqE PU23 9yj F0>H PjŠQ Y a6wb.pkC:6"ް(M\g#{Q`!''ρha]uSJQ#8 !#9"%}c X8l}S0 Qb%l RG"w0`Dδ'V0 qNi]pXJ<0rڰvpCp$JAa)6<`S17Z+EQb u ,qtrp rq rUR e Q'V).` >0h 00WW7(b w' G7 ~0ܐ7Yb$3mF'F0h%C4,3yQo038QG(y ƌ1 kє6 vClI{#QJc0/"]\'ymJ:Q DۇC%ǎ¡Be 3 cp{WP 7ch4)o7B 1iw0 ePi*XA 7b<1pŴ, \Oΐ M;!'t,) |7sd2 o lPB^9r!hNFqKrj1` ye0u 0W` rUq_@4 )` љh@J?@/ q^Q"GB#' (Co3Qy@Q_-Q4 0K9, G H| Hgzcĝ e~ K ,0i7hp{ V<#]j1f tW9UJO ! 2o֚*E@ r1&.;" ;A pi!ʲP KrA14*+rrcb cP P\p AݳsJ9?SE bG*:7G@Ѹ%X'[wBV8m3dl`F •q  𧉠 K`e7` Tq i0 d{@m"H D.Bu ˹ R(2񛶙Y !YZ/8o2  jZSY5' x:6zG?(7"}Ӧ## ] y| A rpޑ&X,לp^ 9Zf3 (!p-+à3N_@h&Hq01)сTH `OP UP 0?-9z*8 qSp ra F0A41pGRA-weq ְwt%BqO6s81QAQ %b Ȁ `.p:0Fi<ga:vh" O(mH qq7Fe鐲>T  Y &FKzQ-pi[a^+(' !Z. Ϊ1 `s@, ۀ8 K7pЫ]ʥ#"ܰ VP9,#Dd W6tH-۲aaU`¸0q-g(0ŃF< IJ7<*r6p@,= T+ < <@eTaU U1JAZ Dv@ 7pF>Tnv1p%!;q?-E@M)A\RE8G,B,Ab`YM68:RT xtAS E" = nm0z   A~q ج#ٵԌ'[<|Cs1\و%[ XD,3a76j70D81B|37p}SXoRBSsE0`9[c9D| d 2Fޒj6i)+ A~J5,v؃Qȏ >hi2L18LP(2l F iT|HEG3i ^yaTNJ (s 0z)JH!TZU%TH9z-Ę)QIajxbJ)ɦpњ# c9 A! 1M t b\hlT QvZE '!e2J2*pք2 #3=2@Ntm4+F؂ cpOm;3`C 3$#i4@k??Kg Kc>獉x#p9: Np+0 { /9š8xH8 !PkQ*s!r%)QH u'J S`. vQ~/XN7NГS>] ;B-ԓYfH49{?(ԩ_H5Ո! d Eh& !N/ `-DZ9r2(+00ur9Ap_`,ݨ BrMɪ!Kca? `9 ;ualEG>9YѴи 8I4#2O@(ArVN$69k43Y}i9oAZ1Z ;Z;8‰gO&KX" 9`0e @%(E)xɃPü5@ Y dpg2zta0  wR = tF?hVBё\"=$*&6Lf2gR=(S ߍ ) :Ȥ>+.,UB3!jȑBE)#Al31^\ :%'> VHS H!pK` Uh -]""^h AHcb;6 qB'qSi \Ch+hhƎу!FcLV9q pąT]~:dZ\2hI&s[i8 č$:$QF`4g;F vh,ֲ)16AuF>@h -`Eav BQ7?Bs @lx'ABq`Jn$ 0QZ4)16ш%I dP! DeH@D0WRؐ.E"a4) aK9`.+GhR Dh R# tLOF\>0VLC 2\1eiLVDiQe[Ah/Ո^`6 ;: @5P9( ‘C[qzo6vK`8$LrsL+>x1-k[ }'zY F@MqPKz+~|5I` H xX-afR*qhH)dd'\ 4! Z&4]xLqP?wA 9>&'<@~Wh2ES% FZ% <C_@M1DF,@ɰNhd&P D9(@j  XN0+ > @p`j@u C\ AbC2KȐv fMR1ؼ%~Tڸk!.PXP(&/aKG!x{^)iS[;l0Ry;wuA&J!FRRb8l; I6Y~(˯.k.PQ8ya:h6(&9k ,ٝ{2ڰ3'!50ٰS~@k{1;ɀ? F!-xH)jh P┓j$XX9 ti ` CZ0!J391⠘p ` !h Rx  l|!EŃP V0 bx^`Eo<8i2+*JxXHXa*$8db~,ŒZ69>!ֻ=І}d7 : 6f>Xʭw{7ys 3]x9`# c9"ioІ耥s`y÷gh@Q8K t9sP&W( xɇgn4h4hJ?Pi@0>A9z1l905@n (,BBK9J:}(CxKh^ :32D &:%;g05XP ؤwӤLb@؄T0y 4B qc赗Y^btO` &690I!(rKxM(y{ئL#-/9 EQTB p҆Ȅ*)(126J6 (h1'J00q4Ӄh6+h¤)8*dSϫ"i:Xb`O] ol pCHMmЇA$CtM(V2`Hf n)@*XB#EXf2NrɆ0882)'H]+0Pף9 _ =>pb \G̰r H{\,uJM|ZȭK0cwDpg`>7iD-60b>_>*F(Tbb-MIRK :sNuXɈRUN.`^M(0ȡI8Iz 9J}b37+qK`l,TP.AU\C`\aUP!&"<AXbXDI ;WV`E6 rЩډ *na Cz!c !8*@h ,JP| _@o۬VM>×<ˆNp2paOUI =h~ha>j`Fb,~(b( G d܌i0HZO؊Gڊ`#(9 qn90Ә X 79K 4a#b#a2|MSXԫq҃+81U4# ?3AhF;Ơ9}> \_PH&: (d9@f`.Kȅ\0J -S70UUxb; # :[V[.+YK;h 1+LGT'䡃a@7P4VS VQ Z ÃxΤY>>l_hX=l1 8O Xf35Y @Hƺ,a-DPuA&w=Ykk cD`IOxPV`Y#h#P(*ؚKK /0=H6̉(:S’ acVc -a%;;ٍ05S?.0IEfdn -"  zf8s "f= B*9 PqƗAIx.D4!Z18 kX!@J2S'4DP@aVw=<×&b(#tRiC(Z5 "@̓4UxĘ ( ^`)l7>:>bm޳"g`Yźח = `>`d GQk Q#:Wh7(.ob`S@]b?0w, !l49n88NC,,( Wj)M!Td]`*!l7W969>BuJQViB\8[^O R܆0v 81,Jg%P)ݯur;^kM0!Iާ"43hh3 ymlx _>j` F2'R",2bP%@LP…S'.Vp@.9>8wVŖh5շ|k5`@+9rӊb q4h$WJhpWljf3Eil&@/Kt̛4#Ljtƨإ; KPKj,E [0l۳'J{jۈ|*DٽH>k)8i 3V+T(Rxb4@2pfI_}G;`} @ DH 2Qe0> 2xb}ZD $u28HDvQAј!sLH+@E8T p@0 іE1 Y T>30uh YP FUa aH! Ȉc,@ w\ 3U:]t $з8R,.}3 0 "7*4ܵ O;SP 8< bF5P+LM\sUNrUA D73@"4z7ᢇIԲ@q֋A OP 3qB0G-EE>)H@o`D U +}I T 0Iح1B!D7E 3C/ / q0 ѱ\$D(c%G~*صD&LGr'SpwaלRT EZL8v3`[D:3u˃pB\RE)8T T0 DXjYC?0{ &Tfd9"@9v'=J 0[_ tq@\O =LJFIhФ@ua Ÿ @*ArPLHvu~C-]A@hSp- s1.`r(Fsi $J} APH(Fq@($oB`)]q]u4ċAN"BbB>( C KsǰD;) PE, DK}jW#7iD0DA"tО.d> DQ@=y$5qj@s(D :r4&;=@$V;1͠L'dD>o0aK B2cŪYL`R@v E"f4cEZ*LU* !+%,q6'0vihbzXnjfe2'ۄ͆*C=7(I!ҪR">]pKH"\PJa*+fYa!@P"Yu!pB1Ck.Q byPK!E3[ЋUO"&I0b\ N!R’`лZ& I(򼭔iֈ&Blp>$R A^` rmyG/D(Q y+> cI@t) )! E@s3<@\-@ ! M(m)Dd$, ЍB`eXTGB xCo"%$Dݠ Me#\ *b2|A%D"4I6܀@ż}<'LPcl EETh6|zEODO<˸LvM@Ț%%d`W8@$J0ag_ EU hk#!oI\FChn`p@emfILD @$AB&B]ǠQqA *~LDA~[*҉,Rȍxp1BY>ŽM0H0_ͩ%^E@4*D"1|BCE{c D@(&X<&odbGfVĦf*DlT&8YI DH C1lh`a졙 6ʜ5ؘ @nѴh0TN$DLRlr p[GBKVC\Ô KVGb,0MNOD\1PD@lLeM ȉ$`LH{HEdC3( -͵Dܛ R/%bAv ODB' <sX?*@]䒘e"Bd5<7@lXB !I<I2_G1rrL%/q,( ^44?8@/},N%Py΅6,%lÅ܀'xyʅLȞyo" AnA'Q>6 c,:@!B,FC"<6EdAInT`kA@B֏@S'u9B9E쇜_GHڈD\-(@UW)$:V\D Nv\>0߭~-AD3E@@(AؔDgXPB}li-j;i&*%d29EH1 CxHFaND^GޏJ5&0K0B$x*Q P\B/@92(\9-ZP4̳y5D1(9 BH19U72wxbH^XBH38wA|l ט4ن pmؘQ 3(h1'HI*ʋHx\WK{jb1@P֤3~WP:\km<+O (@'чVD+:yIzձDd6Cw\K hPgxE]WU;j61+LD.jʸ*6&@dnتnɰ[&P8(T&@%AJ2 J$CFhp'મJDnɁ-y5 ͤx>l{F'wddN . *x)VP=}0_hgH7fA*ىw hvH0JLڑZlj@SLw`9osVNDAx"~j5c`덑1؞({oc@ #)QhS;r#6\(`XѠ x@Y1`Ou00O9-'$.ȃîlV{~l vL㣿z]'їS?8;nLPC,5 -?3@CjFC +Xf'@؏D)d..&Z"B0 m,X pP}(`pǮdK,S((̂6ل)IJƚ⦍6, oUf aj $,+ț$@)ߐl@!aSQ`#UYՠ! wXP bh@  av*eVJi[@Rg)%x&*_0b46j+⯬O|@dɨV/ lkH1:,3#%3H`@ ;1&@Mb0M # PM;`KQ7xQjL$z xO R㯾s;1lLF@ ,HBE q' B*(+H 1ĺ0 .Q9fZ9 t` ˧,1(Dp߯^,R0X# >q cIfCr`Z/z,w R~] N,L50EVLa;+`\H rt$􀰤l*?*L6 E 9 xЋIdQĦ<;Lh-r 9(l 0G H9. $ gr8^"-pSiFG7TPFhHGl_A#` š47Dڑ+IGZ$ut@,`*D6MDo=BKȲ?|X ˼L$OS&ca̱(ΣSސē'g$P*hj?hYzp6(P)yc@ǔ` cIL6Vz?D?x4> dbވe)h;,H#TLSMq?Qa "+B<9 1@0Bʰ !T\ а.x9t0-p\ڰ0aJHrd$cKA~m J,!o1eLVlag0d2"d%[p'.b2̘c5J̤3gYi@f H0W p yڍ'T71i"#cE , 8b$SLQD W/`0vxThAE8ؚO5IiNS աY0p?kc0n,LD= C_@̂?#3FG |A B􏑔cnN9cD3:J4*rdDn+-$pTd h6E@D7.͒. v `.d%/p= )p,(:4nʀ*@n ~ pp7pa,,&HI,~#A$+yip ,AOA8 C ܨfNW9lh5p-F BV`" Q,JȎ?|w60ł1 ~` dLc ,`I PxU|5cǣ iA~p%KDn-ꂠVd"O&x.!@OaM2 xp*}Oh,\=솶eGh,BZ:C<B .+/C[@ D?e e^챉6 3Rv2@H`p'A@Zg " C0-#jJ j] ^ s1Db!K`()IC!BDa& waL\N@opiq w,e?!0 s.tF9+'BPE0gS )S4x*Y JɲG3(H) )bxǂ 8σDlyTN ڋ{9$ucZA""@JbAkdZ!?xdOlE$\JAd& V .2Lav?ЏF,8YFp i 䒟S&e*#34odH1lAf97! 9hk,lzjO (48@--dzx,jq,toS`Tdz).<| AALAhΎEO5_π <`,2jD72B $ul8Xb Iy,A<` ؁x`@\0؊$ ˟A"vLg AA (ef/&CeKTHe`eaF %2LbfrfI8T' ~lBPi9`,tpC0$Uٽ *c&t4`)Da&Ig 5K) p@NB bZD" 8qJ,HNH`\ ,L8hfaNCzB.'EVu1AJZBJyD?KڎTb$1aIp `r&A9WQQVWDwR|Y!Ap!"w2V ؊~[" $ OoPe^0ǢecbZrJAb. A`J؄3ze,\2.A"Ɖ B.cfw8~`!R €x7 XΡN:FϠ ԇ1$9=Jz4`f( `SȏP,AҸB\N dN E$\ B,""{$k}F;#4ȃ7a024CTI&sJu 4$B#ɠ5! ՄL )TapQ,|Ix=LA'.`xTp(VD?sӺ `N)e""QJWe@a* J d)  /]JqkvH#X+b-w4\$80V0f 6DlDtI--rD {GUrOIvd d`'H ^dAPm"lcPvl Fl,8.aՈf^ @m@4@@Dn&f q/l_ɺE2 (ܛ3Â2 T9uϝC Pr׭A @@ݵhyK"E@EcFAch0WR6 =@cphM@R Ha:/A*Êg2P4nO% ;(#D,/< ? &<[^;pq@سIp 04ʆF RIځ17`"_aʵ,crHSr"!(௎ )`HA[k)U, @"E^yAH7hY-xg%r\aO ؖ]8h@_"!Y ك5B14p@8D5:a\8,?9 ML2$d@ < "X9Ȓ:4#/)HD|gL @Nsr6 Mk @ІpAc-Yx>m aP"̒Ah^Pt!`!$$ [(8iq6P"j:G8l4 `!$FSE;c @NQ ;@H7!(iCOT@r094J_ ڒaxLBDĥa_p8}#Ax t@FaZ!WIAP*Gը )34~]m)ҊrSupa 5f$ 01 k$"$Ws @Dbv/vbx 1x4LBy@8 y٣a`fYd%YxᒺNq a,hlij@W#[RP8nChbAH{ ˬ $@Yo hA@|P5GX*W#fs,jm &&MvB0N`nA]`0CG&b+FTy*PĘA,Gy 17 ICІ65<dh#2.0=v8|+}7Dv 9 B ЊVR5)3orS^Qe(5lqZb .spMVSRdA@D-H %|!<, `&h4H YE4)zpqeXl U-mgc>``H jdP6o{jXý+,ge 6 Ӝ\Ǻ8A%_d1$mJyz {3gd7nP' +M+8M' CReL':CLQPb1:%yrh [X?vpAz2J$=~^7t Y@dKPjf#tRN̥F7 R%V1h]I"_+h3U4!5DF &Cc0' e 2N>DLyA5a, HЂ @6*āxy"YpÆh-m-|SзYoEuZ#II Qp3pcB! p, 56X2KXb_7j3G 4rxGnD- 5 sBp{v .Dp9t#: )M$S% ibP?vu-tzR tڠMJ QhyNqAS+UxR5A;rU>! OEB\c0 .PVaWQ/9{Q|a F|`Vtgp6XP,@SBq,hh E@l7APcCӑ$xd xD# n&  S@2Fo5z'2 2k0]ALQ ;hVK@ u,s_Qr_eal\!FFl8Y/ NCN!O ts1 : [`P$E!`;7]V<>KpLFpI<04& U  łPDЗtfܲf 01*.!h"UiYzT"lU !B7T)Y@ i%*lu|A@pQΤT}PA)PkG352 4KP e`4bF!bő⦟P[P:H[jIW2'@I!0àq\KAٜ5KKQ^'!_uj !lalX) , `ᒖÀ 6y >6HJ'b@s(&OF$BY3z%& :L [VCuv%=FeT P S$ < ! # OJ u 7y; HFx\9PW;uf+7Shx!?*{`* {B! s0xAy*x2%UAA,k{Su6( p02 /aX9T9/ETӌg,YHE$ AK{PD@q!@{äPAǥ J .y/1X<7Y# 2p +x"2[ZЁ'2HUMѡIWzHh~la]Edk \< y5q t2C@ %Kuq41,B9:D8͂FX  EOF;HypuOv R=%M֢CQ xw]:t24!v`<D( PSU 0Ɂ* ~*7UTCx>*'4VAF Bg#d E0JvJf.m%aaR¨灚r6iq lq qtqٷe<P `ކAF/3 ` 넭ZAJj@2 >pl25Mrk G1@ӷ1K <+ \"g"jC4AF "aۓFb:GD:C&%@ `քM@ Y6Cp<SPzi2T| K'Z04M P&M&OPxƐTʗk7ɭ`,]0g ,P)0Dr|+AZݠy` Vd ګ? DM P/BlΚ\~F UiX>zLޒ։H ^vm o||D8y퍵얟)2I[E&HQ`ILh˜3\K*=5 rv u&H$ e=% @ ,8# |A`䨑bpJ~bf`V;Xzb<"< Oq#b9<=T7 >~Mup08+AwZ@u< ^éBz r 31v>*>hTRKAFw 2:Vje6ܼ lGU!eE oǢۼ0\9ͮPH§- lAL P2ߏ] @ 'ѰQ)`'V2sQ>J `)Rxxd7rcq ,qI@%ɖ߀ cp+o:$glT=ʆ(RAw ,nuAX^-PIFbL) 3[ 4n@7Q]f 9agA= #ɱ& <PqOd)`s ]KRl pa)2!΄ @F:(?8@ Hf D c(XƠ;8f“$Br9 8 Cƒ<1P`qrǠwȉA)>i)_N '|h 2K-=<7|ڲO <b@h3Z4a rh#<6 ƥh2h( 4:UjQd:h J Xj Ns: o :JT=a1 e *@HT2ˠ:ɝ nLeU&#;A0xO%Z+ѐ5%@/"m09olNxo 0DW `#e`.#jf/<`6;Biy=%`}(!h !̴'z:>i@K0(Ͱ޲Ƀ @4Ad&E!< X`% H:huҢH0G'tORmn@H(C@R '@+@Ӡ"j(pU \kbL Oܕ(0 +UU )-J+͠^bx@Rrj2vcJA0 I@]u X,dZi2H1 `qd `Y3 Fy1)`X4H-22e~ l9]bON-̣Ø,7y3MD!IA`;@R6#"?Ä\kHWP瑬`ɣfp@Q= \5y\Q*: BpYDU"|I2"HIJ@7:ѡΗf0R=` 3 X!AAT 88BFim IQ N⠆A&~]9Zq&JAfu>X&Ig,4 w&y8 1`f<bvG_ } aX1zAI/p*AuDF9p:4"Bv0xb5 Z@NH4tp [ix3,ač4kum # ` jO!X7J?ORH`:*Ty U("QƼ浤CA('v/^ *O jB '9.ȖJ@E' )hUNX --"] ӹmqr !R1nݓ"$͓B4vHl#$&ȩ@Aߏ\C4&! 8)iYI"]XAȲ8TS .xqX#-AAf.s_7&*z=I `҃X)  |4~iQ*c܌ v adC˜> l͒xpƆZf"8{ B=Hgd&#jsx1AQ/DBˉ.gDB,l0E

0[¾kl 0@ c8:rc,a,1m҈C" #tFك:PXts*@:?@ (47`'884X9npa :?3h@:ȸm(9,hPB!:P16 ^%J);(d \8.aV'6`K ЦKQX/pҒ):>&XP0DEHwx[XpDH R40}|LO~臃V;+\O@QFjm|dx8 j /, PlNpmr4?.k0 &~;&I&=hkH?|L,jϼ t6@+Qȃ(`HQUX$lؔ! !İ`ГЃȨ &oxH(9>\hx})) 3 l u9 jט 0@˃R>@C: /iL/mC#ȳ|OaX`LDNX!7H Hw8P,LX=RlG1=MMp ) Ua+%v0Qf,: $ HME4g@_q%(.xꫥU, G{b:8rUљ i y;|Mȳs=5Q M`W70,![@!qM9 @aH80FH4M<P] e \X(.Sx*0 #( (gE!1v-~`v@ҨBD922C) '˂҅KH̙88(Z/mj-:*Wm*F xJ4k p(ئk&VT扂*05= r82(6p--H*+sF]UE5%,I5))}U_BGaBc*U 0+:H5wt 9iCOݩVْi P;P ׃`@Ȕ)S`0Xeؖ4^(]:+)H-5)p-ɵH: PP C @ib89"03;)2X":ñ˒=Qٓ$S9 X7ⲂS@T|0VxL?DA@upERtl:xW"8 ] P gd<0DSdD!CU )iݚ5σdYugEl-*Do`W8<#CiXH!HX!4Ս һ "=Ńp>(PB褓Ù @N>+u8.`N*UM7@eAY5_ཾEyaF=nDeS#fj- ,AB^bԵ0P: W@/Y݈Dx]m@:7,`SpI0&mȌ] P&@ Ђ~qc85HO!#JcBpMy+C "2=)==`xXVi D,F!@f0:!ϖ01 I!K`;R)-k,0H H%.c45p`S*> *ϡL0Pej <%(r)Rx iTP6ľy? X./HН5V=GisD͊O(f`WDI ,zA$F` Y>`DZ S[$uIgJv>A@P:U bv =xf\{$a'#qa}ҡ#Y0r@'' ەHq[=wwGSW+j9b~ Xj8anG=f[(0 k@B^<:[099Ȉ7 (keq pk 9x8t=\b 3̛ Teځme._Œ)ӥ7(&7u@A,TPiGLn04 .=9Ldp# TL]`$/-A(X:SPg$+zb@ Cxh"|v]qpc?7@(HЅOJ Ltm,.BMYn9 A[&9r>}`K,12x)l34Ai` yG1]Llu0-`)`V )a )3 HFAL)fa-EA{hcV) o d5A0FlB'x2qJ QqĂ/)@x "- `H.1P8tX9G <ДLQ O#3)-5:%qH 9PA@4~:E8M\ _`b&ma(2I`2-b!PtgqAtu&j@PC1q@4R-q@0d0PB iOrP@vh?Q&Hi#`3@Q\%^}Ҋ|)X~Wւ  ɫFh%Glh͇!E"4 !P,H?aEZi@5C7idh@@( U P Ux3C<`I ՟ Ap  4#QEœ@SNE}D=ByͫpGL "UKo) 8>j7>m=AaBn*ve=L  I+1W5d=P#D%+_<"% @cl+#fV}MK wbe&c:CzPmM %ZSLg7 (0a&YXJ>#] F[Al`O $tK,sb2QHAЃT !c݇*V $`6Hwsb l,\B5`:H % %`4 1NCQ1 e|JzL zjpMP H vBsH9wПf`M T<HA?%KXh2-`#@75r ] Fϔl@U$!|-fQ+ 'mZ8cAf)#}) 1.EOB(V!Bց:>i]x3S|S͢hd&3%Cx@w݁0N@pO Tظg|1Q0#E)v]Pj# PԤ&f3N u(FyR*e)MɤƒgxǛ& H@$@D@L`u!  DBl@X['lc,0K`BE La(8҅ (Ѕ ]`/h Cg`AmPwpo@@sH@wh v%;6GHBR}_$C U+M@+@A|ψL24D0MDM5 bTT>A>@jJ[ګpA!q@Ąj02DK^8DԚqĝ܂DI <D`rrgB,AKZ@*T(TxO*a iBr#?Tm`ABjZ . <]|ĕK&\K ^i0 ]eH""?Ȇl0 0DA4A mXd_s'H| Andk!iŭdA?x mK4.1A8Kp%jBH@ L@{jyN% 3_A\)gJ* SClD=@\ DJ%@XBE@5:FCX[@dh>G`TnFG]$ρBR $=Giն萗#PAl 7FC"% `?T48@l(De %љ%51.BG GiLUզ)HG$(Xi&`) t}|0C Hd>X>tdu"V( S~Ih@ W!t<\Ė8!shd 0ĂDEv n2yC5\w>Cy\NTS/ (D29qgH*D8bdfLO@S/PPbPN]b IĄ]Ex ɠ@L^ GNhKm`LK+eY -0C681V@HR*^*ø%-Y_}i~ABHԝ]Z)f AV&_.I.jC d0 2H@H@,j~@PB&H9$m([hBBȂ < D*s atD|@f)D82.A#wW'DŽ3M3)(DZl@WM,܍ Ru%A?(B0?@=j):Am8^h `O>/.k,A;441 A4iw, *Lh i00V܋Gʱ4. AHLJ1 |Y@GGZbtBg8q DHN@Z0A0$+BnSS{"`A2jMT-0lP-.#3+_-`'TcL2|@AQ\Dp@B A*H@j_1U~vJۈ,^' CR6 C,\؅M^nlP 8bp_hRKBr]zL(fA-AidʠPI@6LN U@oxA A1ѴLL؁N$LqзfKeh@+%_aYCaU 4cLȌؕ~Hb~P^>>Kh$&-J@=nS׉1+J*\J@\Yf7H- H@2Ad LACA+`@EÀ0\:2xA@$=$I.f'p, DaBxvIDʟ~ # ԣ_AKy 9\7xcZ1V,1’98v& R` `B: ɰ [HEYLa=lYc($[' Rp`! #)gM2I=h$!6)H#d ! jA[6$,$|F)2 ΚJO p *$!Ġ)0H SҪ 운0jJOk7hMQM5"X-( "Yee dX#NjUfM3HXLI%, X;pH7 3LŎҦ2\Э5p{n߆PŰ؂!c8(#CZ<=,2(h"!@t7'3϶(`0ROݠD./y x !Fit_&Ǝ-y(?h&18`' .3A—zY2/bnp%pK 4M g)`І6 <iAVU=!Q~aYc|[vm*S+HHT P* HAQ _2PR$}KH59G5iB@pRCN" \ 뚉?c-D'C0gD@dS7(3)$"62kEv1+HaNw~ (.4Fs+pU%…y!F@vFaI^  ScWlPAřDgrЬr8uhN#z iQjPF jd1~ n!wT}2[`R ? j;r 0W}2)B-\kƒLA"4\b @$ A "x4yz*Jw[Y`P(jSы^5ԂH RRAf[rtBl4 \0R :>5i6(ʲխׄ3-F-憁((L `HkZ/D`FYBć,$rB`6:*pZ#2&4I^2A@XiE9Xe`DkDǂhqw#U-h HXi8 d#(L2gˢ\Ji0Kxь.GRMKT-Bi[tUA v&HH2Z (lsq$Ľ YmWJGP oDS#P@9,aD @ \7%VA bHtķ)9 Nуm P)l[$ CbXSoF1b uўk/XA4{. `$B/=+>K̋4C:tV[ hCћuUjZlЎYAUũ{d0 ,Y(@A~iy& ~Ʉpv)gK<Ȅ\~H؄!uPyANA!ሔp$$2HlT{+}[g +V}U8{3.3A,:#5019%L)<6\4` 8pp뇛fk4S̞ )/v R*!c NƇD^#AP.r&_.T`|AvD8R!x-!l H@ N aJf&BNiƬ  tiCnj fhhDϮ&E ( BLP " 6Ja  -sI$!`8` :)!eR!䤜Fclqw /T T"!:ae &Q(+fV` 'p^>2 B+t aY 8T8ZĨl+6^):j Bp0!RV@4lT b8> >T`z`,!pD1@. `g.a`Ct_ [A,(Ѩ P (gϼ0a Ʀ B `yf-$* AH I0 aFDzTDd$p,"`#dxΠ <''&,84L щ"rL\)$`q8"ajbQ*b!"Q$R!x+ěo TK "uiW42|BtS|idd.hE7M Z 4abBãe?5Z7,C;#Ç``V! fDphFDIpD ki* ˮAa.gPЊKL!H4DPA"Q Q!*-P$єBl ,*"@S(@3=L y!m=43 T&@fhut Pؔ$ ^ @X?p19s':tAaS`` bVu9u`athB,t >2Lƌ] _ AmA/J+pbGtô"!K:#B/wnO|tS+DA.A%,$@M}aaD,64:h liDd@XKZ,Aؠ ڐN}!r@|8!$/&1|+(o-: љ!e3(+,p~4sL4U)h!qr"Y!MX@p&%rD a[FMu u;5vV!@t KPri!-:!$*E1C |+FTr"!@Ab wd  RL1bhxfQcF# bLB`Š5">%S {E-B"09͑q$& D){CP() $2x^"ae v\ѱ"bx@ MڮC @j!ARqRC`NNd?2!7\`d%$R)qft!f:t>@:nDb+ d. oJ H'e a@)0tJ!! @e C)(@D T)*!"P,<]ʉk.K\-(~Vb(k TvUVq qDF0K@a]9IZ`bъo+j8l/l$3L/kT[P5S82 Nh2 SA86Xѱk|A3C HU2Edk# EuD6: l$H ); ĖtP!PQ$Z:s1:L!]'0M: L IKͯlhSqmBQiI.zgդ0x':]0A&0e|'R5s,LV 5Pu+ْBQ)*"!1@dHZ慫ŤCIxä)Աvp{Jiʏ]69  /1{pP @$, JZ@2 ,S 5`(l^/H@'dб.2%2%6a66;a5FZ:]AY$ĊWCk#LnBbp s5kyAۡL; wP`^ΤLux9.@08ܚc~A± BR }X%;b[J$`XK 7kxS!&?'BսJ**H*Po|H|Qĝ2H0PzhOWQ)|#%QPJKG+hOqtS\P*jxP>͡-C[wo|%H,?aL` W .FlphiPI-.q 3F _`n C?%<[J5;u?:$+X6n (b+@ ).w ^g-vm 3Af o$_^gH:S^ .8c ^(MqSM!ab2;e3]R0p}@],N&Oxra ;f*N323)D+6Q`b =2>pQ&,PbQKao HA?t&0 vC_8-SXFA,@LEBe(X ? s'2rxqf'D`P`82xFxyDKDM0F&X8yi zB!f _z0H'] Ε\L @@}G Q2:|G7F: 1|cHwJ[gpgt$wd`d"ј 8{} 13`p~8%B^P0^ѱ $H10o!o5Bwc!ҏG:<0Nґ 7%9J``֤<]a @PP !b=-c!bCY='Z +LQ)e1s3 U9R)U`hwHdr r` +rP+`2e[)Y Ңq+A7p R%IPfw&]9L91w1gD6XhjyWX9@1p7 /3!GG@@ɋkցZ(x"i6@P@4['R! QHQ" 6;U|y4C ȟ)ny'be_C22 aS5Nȑ;7& PA]'@avS!#) aR*&>P)9X? Z !+IڳIVv@u  `y 7CrP S e-zc ev*,p"sFq H$Sor7x~6%y) @ ia{Rp|7%{Ћ {Gpl(MI0LAZQHGE 3!L:·PpvRBad0IaH& nf`t a^D}n$SpLAL뢀Z#huQ_Qj*%z|_GfR QwCn} a5cB,*x0OQa !&! IP KQTׁKA3QqT=AJ)$na(@@6y,jb CSWqq0` yE12!z{h׉+zFeJ@ƳERÅF%&%KFZeC$ 4D) ڶ [@A@P V0h@W3n ݐj@^j!+ €Pa 8&oKcֱl۰ c cAo$a$rL ;^@]1 " b0s/ 4'<&9[!>YQL1P[lפ 1lsR:_^jgf) uT0e?1%{ q̢oVq؀QH͗`a!NpY iAwx߀f>T;@uFRD9;`0n3XxETWl0VD8_` 0^C({@1{0GvFm Z"߬Ƿ U@06qۛ,Pi 2p u SXZa5s K%۫^`5VV3!W+'r7\0B^OF1e?Ee7Ө#yp GJ:o;";$@}L[eE; ϐ` 1N,2$UW#&; /KrLa^ Cp~fd&RB N GĒ@ZS:BA1u !g`.ɬ"*ٟ "10S0aAC p 3SwCS aI?v3A@6AbL\V kGbZ@Eht)E k 24hBª p23{ze⦉).ϖ&4 c"^f,YXR4&*Pe"1VLW15IIDkpI/,qr=Oah1ɲ'MQ4\8ӐUfjk&,9km'j'TѥOΚt&Sl"17}K&[zTb" bx(F ,sxXŽ 7e" '*`"XBPD$q (@;XB=&qؑZ 9.1h#渄I#tko\MR1MJQ%5d%@IB v.')ݤܶN\h@@9S j& 9 Y7#-'00& +Q3  V ؀ZGBP**xFdXDea L0L0X [)0taT!tr_C DY1I5 )R@,hD &!m8@>rB) =UPVg(=LR 4[ amf 6q]L6Iդc@fjXxA8\dPKfTA&J:sF @Dqt*69QD!13 H=3ET"cjcF4Bn`v$bNvK6$-i#sВn0e<-Xp@]B +!h\@5@&a8!AF`sЄxDH1QDMg07```GE"X V U `^րSBQN"TN,X@(Spél *:j+8@?IU'7AzIؤ'U`a0t.B)*Ʈơ` x"} G7UI@l)c"L&mV#&bPv6Nb 64i"èS5V6v|9ZDlhA@kZ CQ CT+a=bts&( (y(|P);"I3"ͨ7(7ud#=AKE?\ܓV`$ )D*'!i.:jN$F1aoL`m hb."&9?pMvx4C1 d1\ nlcAaTl$!B *xFE-x ZH 5JX򒥘"F4Ckag&5TчfS1p0'\T1UT KO\ 1BBvC:L$ "P|$L:LyTDԶ'l+z!C(7̦Fs&B 0kL[W(%X-^5G2e=R*8m 6ZPr4 9*-&SLl7@584 zz(DP"as"Ef&]p9[N&0L<@)r( F̙[7\$J)-~Czm^`Cz> 8]`;1!`CV'p!o!Eg絀 d`tgXL1cRrxꂻ`JWRx U]bx LA,p-p3L[;{,xDhSOcp?0 L $ȚA'{蚆1ʘg /P/ H]5/!`ÉP68")`*!59&!Q1\y%8%Py+e)&n1;=; QoP 0;9.%$9&DpIӘ%q\V({<Hj o"D^ItưIDD>HBTHG s9 4n3((`=E+=+ >؁kN(H?/*`?tJ ֐M@KɞH) @P:R'Z uX2  (Ap D%7_ɶ@oB &X JlAȐ58 >>yxBxiZgP1:Й:8:%p.hm0 %4 gKʔU h S҅>A0PBy _h1|> ȁ 4ЙQwH$M!͚(b(o1m" )}ʰ0&a0jLo"1Ȃo"&ms3TLao8߹ &Y"ibąV''r"qA)FU`hiX)O۰ Kȍ 1x90x;=M(@H = [!~LH ՕG\>P P ]난X|X1Є ސL}pva8UՀ88 :`RyК 52T# J)7A7؅r-K‡Ct d`z0>8n}knL/ _x0FWx .ѷ02x%ocQ("wj8I;!'011qGԺ m0ٜQN2Iġ ;S"魥@L)V50VpW09`1 q9;FT>iiIT.66݁蚈b ]Z6h4(P\G(0Y!ݳ84 [T XAH02(HN azr+"I!߫S@f@.0h<2cP8R2K ~ &$FY!:`Sh` (&(ˡH?N]n`x P$ Xëa} kU}4 >pUa-h5O::l{i=$(4|"(е1Są1 G TzN!'==Hi1".E =эMa$K։ a XKxKPYv`Y1~HZٞY6oT2N90ڣE )0~{4lG]ZZ#>[*8i8H7kk S !R@ pRp .[@ܞxS@== 7DV]8Aup[g3IKX͞ Ԟv[g~^h8 ($1 VJh̊Rfԩ(x@0p7x_>FBH 4qV jY@` 0蟥g"MW S}!;^cN= $$ 0貉8 nT;qpbT PT,HF)(nO6.a`0IAvXab,`푑CB‰P\ K( хl<JR x # oh-AxV4q6giNUԞ:0V0e`tI 4hi(WT K5ڶ^dPԃA 3Ss`: גDӦ\Isi %01ucPd8ˍ)эZd4#Ko'C;@%`!H)GHK)N$,acxZJ@Q3 }(؃[PK74 %QcGS9]+c[@f@kŇr-T PS H w]Yh^ dpGo/af ]kjބC"dy;_ա@K$@: 1 hx nNtL gx>0 X螀ukᖊ騫`G8: g0T#-/p% UuipҌhtyY>C|r`rXJ; 뱎v 9D鄐GDa Wqzo/q#/ f\\Vh' T<I{#9Fp#i'ш\L*/+8S2ToY=8>HPH-+)|G9y+{>t*} Fl4r)DRJ} ːpN8!zҜC\XwuLp 8H-Fpƕ@ ̮DH~uy<pCh(hѡ8|I@G 1:)W '#aLFa͉>(PșىBrHbj5I]t54,گ{F9;/D̘P]z~` \㰨viF@,]0XR nXWD=`"Pqp.v@Qs hx7N8l0X 8nv=խ?Ro @+6̹*r"~10srs!Cߤ l| @3ߡ"%r|1w`U<$ƒ71|F  L`L'1@ IFCQb5֤`-hy\rI-)MAP'PD EXDhD DDaiDY" RADE Z(Ie0R9d i(\#CCmbQzQ5,fE^:8Y825TD_EOCY+B˶ZnDRE8XhD/{,W#%F̯@"%ZJQ@:K Y5Yѧs ElkET[C8ksCbo@Cpql&RuMq @q\֟|$yMߍys|8a}lCF\%4H }s!!r ;\j"juˍ(1@`9|=q#8`I >IFi)LKH3[r`ACDtFDga1i2Ca=Zi Q(RSaQbX,T`P`@DD)D)EU K#8ɱNaxX]ȧC@!~Cю}!"-tNrT!^a)]/4CJCcVIE_LY6l^U 3Lcůpu]ZyR/#E FDH91nbp6<1.%hk@s4L::sHԪʯ%miI$ H!ψCga.@`o{+?Ap߰pF`C!XPn)FѴ~C>`פb<p:OHnSNG@6MnI"2qKl8~G0@#0=:9$ q =.5+|@er^"H,2@ mCW,k&YpE,2o\dLL'DR #@HNGpF?j =F8¡@3Y萁̇#8{CNU^V: e_IMX9QC(B(2F( B" L$:p.h®Qa25TVL('"@@"xsIt6!t gp-6OD !Z>CH ³<2[9`;1lI+#JA!{c @Ol;O 9&iIL]C;QR*g1t( 7`Mٞ' @ tdg)|D, zXboaL~0҈! uȥARLQ.Q*Ts|FcFKl`RWd$ƫ( YRģ J es($ vuZVU :d1`E6'PR+oԁs]CL HbLtXEH3>'81\8Km b`kBQe[Y٬X!.r yH\|!INr&"|/Fʬ]'5z͵,vyU` ? q&b\|5_Z-1ي#ɰ-[QՑ'F0 _6p1?p6?ISjcC21@MlÄO+'yF<BE:%q,,BT&Ml 0 '8ӈ+.H. i,])BE4EC)rzf e,+i),M7ӌ8 j0F$~9b9 EEQ L8^ED$TV YEb W }CXLdxSj jYEB ~Ž5,| e9CE[*BϯEDE8PeEHU?Ċ@LvB\{Ն\w<)EєFm\hEGT 6nDD|Fӕa1C1hwDmCp8k{1yiCrLI_cd)9_DOYDA8iDT@e$rE5AP.hL "EO`RYDuʮT bD F\DL ZhbERQ0%g}UN||ʸ< -\ܠQtI ?ZX^YTDԂCL8L0Ub\$FQWdsY`]lRTB;F+C%*R$ZtFT9XCėC#9( .UGtT3MpM"QR1vEbmr9@r|E|iD ?8#&&2D*. %ɨښ7@Fhi6C9DZUO@ao1Jxx4Gеͭ wpR' -ʈ8Qgk^^%-#*" Gʮk?@WGz%iA)Mq1Cn:'.hC)0$܀5Rl\܈W{M|S~qmڂCOO4-@OF؂%P-tAhZ0Uy5@1 cn5D :jd"9:ĢIArý'[ʔC2xciFA= C]rExWT-v.EDDMJPfW$eItQ2$ByU~:6D Jj >΄#_rťŠ)e.SyCAQDtCVz\B4`AT-p]@$A5g聒tzkhU#bqpkVu*8y'uXǹq#ιE,nA*bUO&TgM^|+ԭ}NJ;@4\1C^-e]|Xӂ&ϾΔ dm-T^@qAY7AYU X« -B,ʌ(R5Rhŵ̷CmTmLɓJEjXDh!@8BUC@SAF@ iA攤 ! FD\X Pg7Fxa,,F%ЋQh'10EtRoIxUEp~$`V*˹A($T.PbJVBS),@(-AE$EFHTfbi<b Ftf~. PMG)r0)\Gqh,l"M֘Ӑ/{%8h,f$jz{4BC),R#*M/M6GiA} @́%8%@% ^c3ڄ@[<(Bh#Ls @|%pK@Zƌc(pDM6L谢8@G#ItMq̠I8|X! -8DI c8R Z i09^O3J gz?X7rUk:peۇĴ $m@y T- `Fƞ0C;v0!ŒrG8C \J%:'Á:@2O Od11,u$d\`ݣa"% =Vy bЎ8` O!@m( ;С%"Lxp(DiDmTgYooCB#@?V 7a/?DP@0C=L@bs9&K1"94bHP?mƖ#ƒAe[Q[􁡟SX[DP@lD D(6(ɁlI==6(؏R賵PD"iz4*%$4> A f !1[X#J顱F!$WJ!{Ze`af\|YB-]O8(Hl=v\}"(ZRe*mT\iØ~RL9J8#R #6# # WIY pΡ.XG FDI% @ )|r B wF1yPt(gkT >$O:?8މ"uC\BQv$ҨhןVp4.@C@!$LbrS=Z8Њ:T0D٩xFa&5ٲ8 $ဣHx*T@HiK!K(Qņp#CHVBDa#xL-qkņ?B`lTJ0E`0+' % n$.̤CD.\A^r֎#F/r m$ʘ T kKc;0lp#`DD2"¯Hbt$;ֲ4CÎd@au 9)9%1F87202%C_@}h+D acpCX!<-&$jxiHbp:ߖ =JS8ӝ cȠ+IBtѨbKrGQ=az`qeHVCl I:<ٴKozЊVOrF a )PRTB~  l`:EH{ωcLj %,JdD x&$>0KZ:&\x _X?1r8)4;`$0`@: `9l8€+@,&ymlEx!o$؅7>$a$\p!a OlG$SB=i)DML™2ahRp,k) !XFaAuvЂyF_&wbyDkk3V`p5Sdx$O+p@BvxCp7 B=Npn4CӐL5Թh$h x.E+]Є*R|g RjHnLf!O{*|ZAˠIjqczEuHժ9\҇>pM Hd$󦀻 - Rb$P  6'ir4XqEKÉblHBLd\!$޼hfd* .$b$A5L$vb O$@bV i$~`Kb#b(g$%'B@bcxhA8 )]1b> Kri˕ڀ5`bX H6m>jn @ aDpHFT2'nn̶d "@\ qvlExILD,JDcEJ1E@vRtn$+K@ၖ@HDLqf& {j0e`jPR Rj!RQ KVB !nq*,èaUƩVB!Q`%Ϋ 6!bF GbT(%.da*pP(20TI>'ARt?,xyF@ MVM2j `'#{DvJuj'Ml;A x ĊDvd=G$KF\hg`{` *O$loQ.!O(%B! !$V.,R$e<$!Yrm# Y Wrha^(DB'$b("$4a/"B4FFB $Vc~ `$L`&%ZN:F !VLI  a4#MI-MXp$6RG"Z$rhB.Dt96h`0  ` !&xnA)"|K` "@¶4#θ>``j nHq.H!3Z#'[I5|ADH~G;np"H >%=a>PG~SP(?O&QH6A$`TQv@zuX6!aj&#@'v~F 5OR!vocB )! XZ* 0$6 ir@*!,!z(] b>L(P-zqT- .)r-(MaaMG(ݒf1Wp Nf"!#b OU--~$rb(6l  @Ґ 1 6!)ABW۠ oe ݥj@!BLH(oN!BD vcoPsFKF$?DXr^$F?\ijDDB4(/V j , r$"2AB«<*b. f"(M `$zqMm h!sڴ{eM%WpVY1B,!Zv%R~RP!\QG 8\ c0R"Wa*@&|!C*nkZ!jE`N-T`6s 4npF4?@Iq!nK}מ`Fr C2F"҉Bb+HG2O!C'DG!Kl[3,!PP|xXrSe ^F` B]a%.kag+RD HfTB^(uH n)`$^habk 2$fv`,+FA$3'npX-! N)Z.Aa!zA4J-T_t$¢:n k:bvB"J#"CŽR) \a$`cRtVؙ6.#zaAQ"ޢV{ G@<0`nETo/*dp?ZcZlL$GNۣZ@pGփ^3̌\D:g]?/{pӁ9GkDBS<Ǭaz6m \Za$V=Ac5bcgOtZ~xr«Af'VJQ`vlh,#D*e} j$*!rC!b#G"ve +,EA_LBlkTHI C@ ,!ȽH$`Xa**]$^ArAb})~$Va a) `k8c  uCzZw5aW#jfAMzjx]bR&> h#/@*# >U1zR! Cf $p`tBy` ֣;C >[5@Z,p!$də\E o T1.x?Ir~#!Ό>s{n\c6>ߓOs&E VmJ^D](aԄ噎 F{ k#;'iR(0l ׂ6Z!`aڠ(@` m^М@ ` 'BBiCYxkG/d*q`|v3Nf . TpSbX2!0".`~9IΝ $c 7p# ܓ݁|9La t>|7Htpœ3z`)/uPF|7uHaXQ5@a$V x ox/;Kx+M`|U{`G  oF'(qBX!cM*8`#@h؜ZT<n c6|4ep h /($^hl ,7q p`5) %)D,+ 1|#;#ZnY ¹a,# d x.%hQ@ġ|gA܌t;EtxmÅ3͚z@:hȚ R\3May?&9lSz?L4 1T \ GHGa ̎$M0`G`%ycAMǏxD BN`}GO X*1I ´Z FY19IRbuGP@{hF.Rp8ˉR  2Ix@ S IVq4h SFf"j%q9iJ.rȠEx!0.D)9y`F+ \kA@4_ ,O.+L`vu0_. ;0@GI:D[L ?@9"VpDpT,E8V. gE{@TiC& @X'#eFfSrC6,HW㹐gmjgx=!Ѐ2܂΍p2) )wг7MmS ?i\- 5 ~;=  (>eFK =ix3S<髐ރ-f0 ZM*gi d[A +[pw_-Bj:щ~j${5 Fe(Į!(ȘU 6X̃6g"6f#MB7ށ+x@浓H$E$-<.b(@ݢڈeV cLa@chhr\V V*ŸhaI ol0@,`41c²AbR2! +!FYOFT\1 I•(?@A Qx'F""pu c,!:P*))8\Th)IHP*@@U@AD ?q9QX`RmR #>Rt!‘+8C5j8Q4a ?;Ae%NjpQ//k1}|bTR?ԗr8! )s ?51?W$@1CaYP^)FCIKD` 1=`tU@  A.t,0TbvJ GyW/(zw1E8Jz `@^`$ԨZ /ZZ cwP'N  "q$a6"vd7@;9> sb Ɨ%wh]r~ }<ņY?9Ȓ&=:i0T+mWgmFHb"')B+th֥+&|]օD?ٶ8UB` :mh + \%lqb?AP׹B YCqkbPA5(0 *5` (9Qb0EWQ Hqfp FMF їZ0jE-fP89(M"Qq*x$?[yb-] 1$ s@-`b aE_aqPp\i FPa4!A!&M#Co eyޡ N$ bّ@ tMWsx8C qw !: p _+R/p B8֡!7x qgV  3$P 1`q~v3'h s0y'GV9T(5S3H!jW_i4)(0p*~a wq+rp)S&C&&)n%w %kʦ^m|_He1iDORʩq E.n!T8 p p !ĺ[۰ bP5Jp)Y : +bNm/iR)8P\ւ0"Pni:IQĐ F AP` aPew23҇9a X0kШI+ IuD U2A@ +@;p\Хqn5! k:f & )@k#.7~"r3^b )BJVmp=p\ԆL1%G0n7D񿳘Ԁ7 n﫾 PF5+vZqCCaoo^p.3)P+0Pr;qv@iatz8a 2C,p@ b -b(`s@3@2,u޷lc/1Q tCdǼ qOM3P<5R@VmXDn;jI!ZpVM5rY2M B`R#S74RY48Y}\mm/Hׂl`c1c idb\`#"f4M<CP#diZ󃸤M#FHa5. " @5Ce&>@D9ABdI T "܉ z3! >.tȸcP䋈xNd41! 'J ((F4)H & +d‡ [{D 3JF9[Q ! ,#=B@~!K^pMNCt-mD HO#o?p1BDvf'%TSPw'9G^\K@+Q%Hd,A$#sC P6P 2m"gp`Z.kH]#]GHDklfc(`ymbFU@)6A ,h"R-kаf?z)"5 2 '0e<¡@$A65K(i|o`Zot(4H`y$" "P6Ć@ sǥˍL5-g a#Xwl7F5ր8fӀ bhs'LD^g@G@ %pzhS;Bī1fO a#bs#YАݝ`7==J6籉MPoEG"[G$a{!+0/M,%\*r1 Ɛ7@(# Y\>X"eH>U3%"\" Yx l @"0(6H#c+lEr!ai 0>nBa&*Р`)cXXźSm iFv&w Yȏ w*z_Ǩ"# +HsdbgE 89P ˜TdFEn{-Li#vw9XE9Nq Y$*HdbQ~@#V`.U'6L? G<:BA }+pH\9Zi8j"(_uc -k"irшgʨ:hZ < 8``pi28ӈa0H p$D00ǀvpuЈrn9Ɉ99U8/`jC:Ր&x"\H"C0s3 .H-qH0V h8ш11$WY`"}(j$!ecOV`x6ީ^HЃ=h4/"-Ђ*гM3(yQ<3 L*j1a,HxO3`zx7, `RX"&#KO(ggg8x,`kȁI`a| "xИ[P"%I 7n v;؃8-M`~0iBiJhA3&zؒ CЈQt " [ @oK،xw (J >P åYl/pr9|@r+ 8 X{|0C|JDAp8XkHR(¿,oG $-LJ. nA}x+G Kj981XQ҈.=Å.D*m.qbxlD*( W<t\3H(:1A33FxA=syV8Ƞ:G8>a7c?}P\? lOȂ7x%I09?9p'PH(1)XGIKYҁ%n9ڬ 8qJY<7}k PA|  ИÁ3h 2BLj܄,zЇE+': >J3րu'J$.ԈNN* /9Y81`L{ЎXt 0ȁY@SƀsJkr {8P;>:) D )B3";|wHmfsp=sq-@bh(ϓQP3YЂjIQF{I)yJ>ۓj~F\6 0 P13O0*0xOp_a2?xȂ: RTj%'ɛӈ[DtKࢧ -|M&huAL6 "خQ.X@'ic5 X=^]1 *WImM-^ - 3(v ,RP=DڷFGyP@8JuW"ŪxrhT)c,PP;4ON|0d`PIk䔍>sr(dR P+S7+`9xK(Vɮhe(@Pe\P"6`X: 86Su|q 8ZZۄ #ǰz(3 %pր?Lm ͸ ȍO0 x.}@Q融 ^(3Tx9CЏOt. Ҁes}wgt;"ok ءQODGbS11[Pd N]FbȑdKXm-b𙽷*,5ZDI1bNpGZq1S>n߻>)-b PFMtl.o 90ƾ.F)3A RHLn9p#9X Qȟ&POqPȊ0l8co_-X\%|.nxJֈ{"qD(Stob{@`+M7ws`Ɉ cqHZ;S3:؁PMvJ '"^<_ yp5P_ V)DkeBx/PH@W<9K {P o qβwEМaNDH>bgЅc]4l?F&G6_Oaz$ EBUѯo Ê:UIcG3O3AA C!1k8 &'U(VNE9&2Hb*شQ ;Æ ܈LLj$?M169C؉1L@+L%b!n!C6t,pL‡$tHlF>HBD6ClXeE%X>C,@NAS!UY9&HP (A#o L yŶ-$VbP|'V&TpfсA(UtYX ,}]#_At@=<&@>Fm-T"|lhRUdCQ(Pj)9A@/A Б $Y<[<-P\ry-\ Y8Sl8@<\AR jhW~TA$A_>B4@-`]/̍X\„8}[;):paAPY[lVC0 oCoY \RlLiU9V ĀR-iWAP=3D- U@t9=PaEq+^M%|=_L8ĭW`DUěI:W0~olp#U@.Ā,1Md2 TA$}a"WY pP@ 1eB$ EA0gC88cLxX5SLP3qm8f`N-eDX4 "Pa4Yf+t_QVvkx'Ǜ-2QB-d&,8 cAXCHX1.dITT)5N1CLUhqCFl¶\!GKvLTk^UPAGtDhTL$1d9Voo4WbXW)rp:-Tġ0-L4<4@)x\ \BX<`1Ļ < ;~7Yѐ@TNC2`ee8C`nm8-|.@h:2m81%?U +S|e0?Яp\A܀ ?=8y= '&<| 7@P`  :{C8bE1DcEa^T9Xe>}ڼqE i8  9/DY œ'$$dhɒR $ `j`N@82Bm hAAcPAq۞;֠;h :o]{0QL+ %JηV9Pfĩ'_fc$܃  Xp_vS`ɒ`&L0M?6]ߴ;7}Q6HaRV`HǠq'DV&{cR '9(0XS9&Md9hb"&H"R#.K#jaD)"|01#Mؐ؃cG(p` B(D 3 !6.`#RĈ?0u, H2N`N1ȐD3Š,gDi B4#6Ah:hF' "RE:[D2(0"#S֌Dz%*>(4f0YAx\ j bawXa3n @J p ^z#/Ma R젹@MX`,-)nﭺ(y0CiuK008'p(Eg|r3J%)F7(~c憛mbR[,1>A-j ꢾX@ !d`a H>`>d0n"m`f*+Ja#L|LC6ʜHuO?Fa=wXHV7 ц(zm"Eu&(sFKBg# t{ CrEUa k@Av!h@/"@-*xNH@(HDPOBk v(25$PQ(G3 b#|#(<l 4H0>icW`%9]swB bB&9 {X5` ҋ@lk0ߘ D> *SGRsף"H=0)'p0W؂ y@c% aZ65d}|_84ԯ'H(+B"0lQQ,jQ׊ yiVwF;"3HYh(lT}|E 6(Їhanu+05d4 V D4<0!!9V 2 K`Ȫ3B"yI@#kΗ5Ȕ@ }%7+šud0AA”<#|:Ajݘ3bo!puE aL) zEA g4#f1`膌80@I9Qn@ĐƳ[!Cl>&fݐ.Lszp 1@ !҉z r̨oHA&`‘CV襺 `I (ahC: #d,BXa @ [-e$dm,ay@TErK MB~H J$J] D(BB({ĄSs-/C) `rlBE& K3B N!3l&adɊ@ xgGr aED^ǩQ8I`!Ne(+"L$" B$g BtCp!btFpjddlS Ɩ,oDL쌮V2 4`"b" |"!2 GJeNPJM AcUR:bL:";e%C D $o"Ht"8 "R!!&xų \ b AhZh!-=6z! hq('Z`r)h#$ T  |0 &\P 9c,A 1e Qe ,c T]k3a1f@a<:.`zU`qgLSgwS:ya.b=N0BQ z |&sr66@h)8rء1۷}?aiʁNw > b jB`R$A6HhwvL!vR$ fp`CnWwFv Lgm+"BY L"!ZEv} BqN`HR@Jrwe%RO9 n#CADJWDJsdGNL8ܜtmH"nnO8dRx b:XFI:¡p%Ѐ%>"@A4@q E)OH0@FA4V &@ o?b2d bּ4@`!4CV36Ii d5 Š@+8aa?  _AA v0A02!9Px '!- :$;rEux- 6 0 a 3:?\f >(tN%A6!.Al!&Aw)(#$TuNǓvCOۀAt/L&T"RE'pyyNJeExD:)ŭ&BRw.TTjAQD6 ^(' 8 |":$4N)P{gbj " '$HI/NGЀʉ`0  \4 H]۷ X^@ p!fZ`$N/BeVzdufS36 [[2Xeth B ff_e}Ԃ6`N]Rn5>C $v=ԗ#;`&7;Y<`M<{ӗbր>A UXr @8N`/٥8qΫrĀ'b!تXTG GD LĄ>TNO" &mBI;I]l}m/(G -Ad,Q_.Bp gg(9T%{;ѻ)OVj{b:ʳMFy)Cy$ ׻y" [7WADI` `jWf WH&&Ar X1}}d` ! >^@e bIofZ 2.5c gd2x fH LN@.FϮ.k考21ta7/;p,Ϋr%bزjA4@be +@ шXgb?]X@}Af` R_ i@`Q *\Xk8Xp8Jc6Д"BklmƂ0LXdJ0D1} @Ol z #zH܂DeH?b]C!$YM 6(gI /j@+\h iŜ? i  ?` }s 0 L Ff}3qNnxC1v.`ܠ.S #1RJ @K< (E/ZLh1LYo+͛on"'{>{7aAjcK# O9 RP T@J I! 7YMvG9$.* 9psāABLC cMtE\FDmNhBgAQY1E mPY N1P ÒZ0Xd?QP^* PY$U@7LU[VDYXf9F U0GQdGBV†'=BeA fQBLM 5KVңD*& kP \o"+B+ל`Pd }),#<3edA(D$)⼓ OAT_+RL~B`+A:sZP]a 7F߁s:.@s o ic .#p"3b>2Șϔ7,a(e/LBLKSqCo~@@7$%w*la<عp@ p9 ! 䩆2e$|a Mi'b3Ns%" |,>PH\&PP<, A) L~$'؄R` S.$,W-I4[a WD БĘIidpCdI1B>v] 9AAa7* 8BzrlK?,!~" ؎/>1ޘΩ @N!B(Ђb*X1)ox  Q'!NQ y&$0J"9ȡD+p#e M݁! 3pv6`r c@:t!r+FCbKHXpb o0]! WlxSR*h l %!`#S,4HQG!bE/zL5!DLb;ju/!Wq xX8؄ 44iƑ+`%׶Kg1ce̘IV-;K%?&l!@&LB It# 0VRMcD֏yd!| ANJ{hC=#1.j 'Q.UŔ&%4I]^b %)%LޔQ jm b. mCV0 \4u!SVaXBа4 Xc|ζ (d +XHE,1zFQe0 N !3O833 O!ݩBZ"> P6!NCa ~"T:!F`+Y˪gψv9r@Mx6DG'¸%LEn B,+a9LP!rv*2"JΈ. q+`*@ M*>& )8F֚Xfpu{#6+WmZ@?}#%6~ഊAPDd^ɠR G' BB.&A2’&]e!Tv0Ȃ4VBC$9B0XX ЉR®A3]٢(%mFQ$B|6BEik opPDTa7:"p h\ ua#p,Q tŠCB GLA8Piny@5t:Q( B< #@5C:i 怖`spF +|'7+?Y=@<  $pzsG0D;h& Q_&Av`JHС5"ؒ&!BJx f`` #`jA,)NZDd Ǡ 5 QWy Q-e:S:qPInxd TaLeġNi *1M霃9k5^p1bppg5^(u0! 0)kj8 Xii+%"F:0q nT` kF;C![; ;waʓ ;G%a?oP Q=;x"S~b`@闟߀ K ؀TP &LW<( :.a (qq'pqq *AFvk1IHYq+/@q(d&asҴLB$^x+& )"s$PqK!Gq yjWDN@@C$ІSXkV%o Jg*n0~pQ%W h` 阮RgbjR`w9 V<,$Tk ;рijx!<$0p TlbenK#} lWe>  =B„ ? r0l230 o rPspp ]@~0ʰCh Ej#^* k"P 5,%h,"s &ftm !&tXxwhv1.$/MQ}|{W|F˹|GP@W8vy1?qϝIt 1tI1_5vGcH˒js)yqn{2⹞aDMG6y ,31` 3'9Sj *yuQpЏQmt(o )o@g,OtUܘOk@IOׁ$9& }7³R!TSH%2;pi15&fXc X;#*BM&萃 lE=z 1o3 ]x:fC(@}p}Fs*.y".R3p @920O_?= N<@ ( Qk29A~br0&?JTp@0oj*tygw AK}A*цisP^} y)"aA AB:T<m@;T`-Ipf'$D{Q'Ut|U] ~sʠM> /af@20BA0a 0AP"  84":?7)&0kGJ# 5klHJLCV 0qYVN;i90.e S֘QZцLK)a3GL`pMjT>53pC]I۷),r`, 0KizbBx46;~奛DVˣ/0ǕNGfiF 0(ބ5CMVYH#Rk"Ar|AUd^xH0y#!@jh o$` .q ɇ f.|h1 nCʈV*r)0 ,# xh#4"C+jJp):0>@q qtr l"q%~ZB?)9g0K hn6T9B\pXX5(FBwx0ph晀8A_#t>8` *Զ), "Y.S6&dU x ٛ𵷤jnZDسrm Mv˚K(]vL@Yj-X@yLP*k)gȘ rSn;b( 0no 2h[ٸvLmǖ: 4E&! mpImh W&ZhcővH, XuQp7p @UN`@VvDrY&)& |BuI0fo-)S @VH#$ c%"jLǴ9Z9!7STiIHs8&Q-QpA:O` u l=cS&T%Bʀ% p k@! d!3Hd#Q>@dNPX84 g P Ydta;f,I#0120&?!Cc\09C_&"D&{&~~xkb` dQ,Ɩ2 KC1gP ҳ!vc (!oY( SȤ@5L@C h&#_c7HF$% Lq4w2ec%R8rSR@FI&V^`Jz Dgh ޸鼁}Y ]d1"t!(Pu]`A>A h /A Sb `@rpȀE0 |sLR'=)xRw\o+OLDV097#R%%$bC1} ˟v$p K&0ox *%(rS`=P]\( etXC\ ctk`@ưaa@X !€HQ eа s)i)@q:[`V 7,y+J -y pV0b0-%(a \h7+YP8B0IhI1OkfkK0@Ȃ+Up)S2'ehlꅋ:Xrpp""9>8)"?]D4CtЅ Rqr.\~ǡ:0#La`EtAh n3`&R=P}bX]=h7\jLm08 -Eɂ78qОc cpc&JA&۸ YYI@s6<joHrX|?# LiHDFX$ Hb5 *Dx`/M6H؄^ xP ؃ M8W$֘6 vr1Є؃( [0PdS ^̱؄OSp>;o h q8tԥirsMс8 OS";ސ'MpR= й8M590NL@\T -Hr.@Hih\JeoCi60p#Kͪ +9#xhɐy& ,8V_0ssm,+-PU1Pꂍ'0O(Ȥ9˜s}(2 U }EG xځIRk 4R$Ҋ8˭FQo<) $8GQ1Y($%(pܥ(̤iB,.p҉b W\Dݘ2m5u nNd #:32pn%bQ(HhƂj>X<:TT턉 (yGɷO4U 0$H Y] U@B[{`3v(N02\+lC#1(9 ` #X+Іګ^8l):s!M9 *K| xiK 3M ؐXUPJC`I89HTh$ c:N @آ8\Px$Е DQ h@K!YHD1@Y^4ax0 `.9R J'VН@xh$h)T2Ui+/@(/0@8@(bi*Hܣc·J9s% D`aP(Lp9ц1sepi|#Y=`6Kx4Q`?N؊!JoKdR0x DAFĆݦ xXIL?lbX[8hE*Q# މ@CǑ)S0[@PYpˍ6'DP(W(8\(qmd5XD:}8Q*1x`n@0aDXd?j < J@pLQ[̱E,Tr2N!plA@iƝ8Nd8d 8@'yj(-p@tכ" `4KE`O+;h(2Sfm 7> -@xY@lp < {M@\ `%Q8kH7/^06@BH*#P,A!Q_Q@ƔTN9"5 tJ97'UNTAM"C TnM2I}B)0CCFAFL`B}Lʤm*3u iV( <Ԥ3@07,cLZ 'blĄ7vȁK"2DR@3X@8A8@J峗@xEIЏw(%A"ԤMa (ʑ zR7^0@츑OM3c% FPHCf]^v?Mg+pc4@Ș%2($c\|Y`"Aid d cWFp#Gq\s𡠵@!7ޞǙ *]8V@u0!6lG ,[әs VKM&a\]ZboaAG9x㠥@P"ddq@k,b*4T%@ne78-@0$AK9 JN$)@Vb4.BJoB&0c"RCuy>o*Fl1Kt*h [݀*j@n +N+S8,%2JT8e  )d,ҡ| (+ V! ԡ)K'ccGa9(811a(_4( ?q*E? DT@P 6 iNB TfiTX%v!lbgل29N;NP=k63G7c @"HLA-.W4g8ei;GIRøȔƚIҚ45A;iHhYV ` aPx!emI!bC =M @>S8C6hHI6>0 4>*ϠOb_ BYƮh1A8cq 0X:gøe0x@ HH'5 M@c2gmX؈@v IV"4Ru3r4>LcL*$;d@dz'0t@aİZa}YD D$&-KHL֤,f\%+AbA׼D' 'MTumBV`\&А``*(ZUV&b*9n;<$IB-("' O,DDoj#؁{JQB|x}03/p NGq1pӶ" 1 C&pTd IEv̄(9:'4N~ǃPԗB> mB_SXP-\s ȰC8L QQ02A rƸXq3 9w+k5c@>Ǐ zװrrQdH]e.S֨@̘  )c%JOG;{DC;* @w $|۔ lѢ&xC+ސyaxQy@G T` x}$l ? o (IM\B|AlZ(<|B+`J+p D1 AA",961,!f 9A1Ha :`1p8` cC 4 60580G +y p hH@QXB&`lB_y@x!h\,CPc$A5($t*&1F R!P C\\E LvC8pTMִcTN3)dȂNPW@A@ s79ud<>HvkP+M%!+@vԇL3 1Hd-0R@ct |쌈ahXÝ9Tt픎GٙPE.sdA䂌 A$OK悡@ tQd|A4-PA08Qт._+`%—Ž$II*UB>@1B!,C'X!+ =A@ @< 8+dC!0NjtsX‰H?؅4$ ĚcEFt혙s|vcH]CFP"hpe))A  $(E?txA'x l@0x1`1$3A8 @wY3pgPG\LF諤ZCȁ%'&~\D@k,}iDPFe,i\l]~Z?C@^BS8G*#cmؘq1q֠@G6mn /% lC)A1)5NߐJhd(l0N}$ 41dL> D]TYb^FiZ(6@(!}h)$8hS;nEB!(Zlɂ %Xn !l$@U,B=AP@QXf8A,k iC]fG~ch;d~_ɒEҫSGkAA?(z eq<J 'BC ĂJ+pk}.&U_f:KB7n|DD0 hzxII/dAA`hK`IQA``hE܀̺~@hC ,D ̥` ͜ 0BnL-=.tLI*@ 5X@}L@`@A|1k p@7P@*k A1w @2\oD|$HLs&(N@CMMGkXBj |,@+d̒>hHdZ`@^!tm\@c/sZa(]@"?Kq@"@C l(p(h,)gsCrGx3&@F@xx6F2c ޙFLc-TC32%U?&TlB?/dI o@*pZ9xKbgAýD.\$A?*R5tX?`-IP*A,`-܂) X( |Q50B>8%`懰auJ?¶V/i:*CtDφGT A;a7Rn An.l{Ħwk50h%FW[0mBb!E/8"óDkB -ƂV̈́@-hѹq  0@H@xhiEQ`Jf F>,gPs.tHӂF@@,HA[ߊHƉiBxβgt09 D/=wǓCbxD. TkdhtN{h}框ن) c,ȓYt H8ƚA ;Ǚ%F́,_UG14%@A!p+7)6aN7@MH @0J@|Z@ DHE6F ė2( :hh(@ lhD'E[ 4&(̃]I* @,, T1`;˹ t=`@ Ҽ[`.L@T$Hta1 wI$ex@[dַrHRP'b T1 `/E}և(a."pAc&#o*wJ+ a0 H~җ.6dlHFYDI0 DcnPՋzq)P/2ȕtw%1Lk>^wNM(D",qH:(0Fg#Dp0d [l 7 |+2^ `\F8άI%#`lK"LŒ`.񈲬ZFz T{  ~@: $ :>%|@Z t W"#2%d b>\4ip!#VVQ@IOqaBAw࣌ͨ HRްdŌx,x>iO*gENF2@ -2q$0b.HBjP+2!bfQ@ tX@We&96Qa%O5dx8 p0 K9Z$$KCHHOODlMhؑ Q$ '](hĸNUX@ SfРI2 X a46ƚ#@ 6*c-#@;vx-=`(5ZM ΐ1@99 !(qr?x ^ 7K5$9-O`[@7i,#Aj0@ h2;T/cAδvE R,2]$9BΈi<#8ix0Rg5 6Q ^ H$@ H@!E$0Pq7! x $ qx J$Ġ29KG 22A+ xG0"$ B!7Ae#^A Krh7@Ōhp0 F @P LCGApT8K:BD! eCVFf?t qTH,0,#aQ p&b  0$XDTC;A%H!.B P *MB `V(Cr#h8J!CF؃aVZ 7pTf!6|hIBKbgITF[DpsZnr &Vz &̈@؆,a\!:nv IBDp0G:OFڃѷ`TQZT$PH lx6"BHAUN@H0cL mh6R`|#d`C,+(b'>(XFЅOڥ'@3 aFQlA(RF(PW 2"6*6DE Gt YPP@b"~g QrM D )QC;! 2X6 Ȁ@H$* L BHrɁj/y5JF.x/dFUt]`= O  ha"ٚ0@ab` Y܀fQ-EX"/rlMhK^ SO1w!*HcM4hK2Ʋ$ՠceS8=4s9LF :1O(7r&>)P)`"X}֌kև- f& jP,ojG`iZ"彦 .aQZ0KцT )v$"F02!3 )ld1Dhc=@hF0(mz 0%lRۚ.c#Eb a<`fhAh`У|*,bV@bBdbÚHGܮF*dꇟ@,֥>BH>" .@.2B0℠ A]` IXĥDQZ  ‘P$^.*dNōb!2 b!2`F0`Fގ(䮓8]BD`GA)$n"'2XqT % @! S֠&|(.`LWnA.Ab\,C,.E{-KDn0d.2;:Dh^$ /Ct9~$/'$ $c /(۠@\au&7XJ/@M8p'#`NmFv2&A)z@Ʀ0,'g0Aj&0BD"j2M8,a<` dlRJ\k a3&\-#RbmF:Bt>$X*hLa0A0* NN`R V@b  $@,H` x8'Idh 1I 6oPE,At.]6O҆.Ce*.eA`$r f POą !` R'(H29?b ! 8n-#B)#>LE V,2dHFa\H \~ޓ*FL `@ bn @$0&3#N!d ~.ZⳈI,#G=R~ T!3X%m%w>grp28$%#z2ʠsp xá("a 49(5*%l/" iC&*),$0-уl.#hޔ%2Oq#0f( g=6FFQDD<K\>\s0P a3 K2]>d%.IPe%L"4sQd>b2/ aNL: U$&Ig|A!AJqNJbofIWIo+#TAr`;'d@K/ 6llOj2L3c27=5G5>F5 Ab-1F#__AP2Abp:^(# گ057@9.S_z#{A5*4g%"FlA1&:nΠ)FU8nb6cz WmC1$hHRkYu;L4&h3V}j3, @Bް&0c Lf_kb%rrdvj Rzph66K.-D;nAb.( g$( ` |"PHlhl-;ЀHEl0RRn&,eg%\%?_*E!E N\ T[X2BaEIAX@.@ 㒄% c ! >IЂ @2BbA$ WK*6L*k$$3#@aaX!JlJriN X`eaVAH3ba9Xb6L5x .d"viO.Cn̈́FDĊ4 T+t@;(y g7 @⡶wqqc {ncV$U.b 6:$4BC@Ba7 R`7m@1wl:^/yFDb5ƃ&>"{L7;z.É'w+@F5.͘/H[(CN`7* b$DG58 if`/ D]c"81I$HKYp1?q N&e%*d@b4`JvU[s"@`U$;B4#;;(R%jN'Nr ʁD" fnSZ Lz! Ol֖/n)#`m[(*K/oMaÎdoeB $2p#kW a$%HD !(klf5( XW: x4:#§vha>Bҩҝ/<־7hdu4oDi㱀G?D}@ZETC9`cunoK(@JI+m$?tf$ ,\ANb(`F8NCFdAƢo>|ޫr ąL(3k/N.Dt݂e/D\jw.bcjV3`>:0+ei(@D(f$(A8BZNAq.ász;$  TS(~2_,/̀2*}"/|kZ 7& D pECz@ʍ3ad] |)]3={P5T>`0#DxhxD R !! C H#5"Ct0dĆLP$@2q @J@IXd(@ âAb rz2ˤ. p ?b (P^@ ~*!:Z=k(WG } >|#1x "I ~S0 KE]o0<%fCq7@iY5QIʝڣr 2Dم^W)6ΧD91`ۦ={8c˽O'Xo&"4,ǐf+Yb^CX~P'R(||q!0 Ї&vc/aCM7A C/>3>8_= .dO ="|VJ &&Yi6I$a24PO0dDCIiD|CCr!T08P 1А+Q@ 4%p -rB3j i h*Ulv$ HAP ЂBk ѢR_$0DuP8kGB>TOOQE#CH;՘52(SWt+(sC Sif%s\"Y(o\4AW9o$.TU@/'`[o2Uu\N 5 2P+C'Ş 0b[}\dpp?\k$In\DDC 7UBa Cy2䞙t@6CE4zNxttGd% :Η̇Сq>_7$` $΅4Tҟ,1'~C(W)4&x9!MŚ+>~ 24E h!4T`$Rc1$z>a QJ[ o&[$-(B41  `L`Fa*:hH `hY ,0 NdAC-PI!Y%,A aHB bޡ(@Y0C K0< Na6L@M17(1bx8nA͓p@>K!&s(4 L [5$lTc@ J@ $*PF,T/|p>9B)/ū!g8JlcH| ,2nZd;`#R޵!$38o><~ͨKC. RHm! iRCB']PWϚQCqQ PyJ\ϲs>+xIܜf d!"Yp7؀AP}2C#%_4d 5T#P( %b FoP( D>8qu$.! ॎB5t@:D#bGBr5Sܴ28y “.UX50B8#0&a-dú ` C^3L3A%,8c$XJ@ߘÓ&D"aX7 Dl8fրbP_ MRC  F/&qi=P ag  Y4+# i'd:؇G 3{g`!!\AQ M[\ . }>{ !| 3q6-%)O`9J)z!K@I)p1Bws;@mT( m8DxՏ'hbAZxn0B &B,RXLBa% \aBGuxc Xo` ,K!3r>%aH8iq%hCށ P*mY)N提يP 5,j,l}9@ N1] = rp4 o.nPD16d17.Na([PK( d-|!!Pbfd7Ie *')Lqe C0 IKB=i~I  Qϛ4~>nH F3m6Wdt ]8X>=-T'5U {=?Q>9r9 BA>`$q$JEm)@%,ZCAToV,'b9^B)2( #0@'p== !z%'V0'be(mr +l}050 >Ql(4 g+Am272Q'@psB Ps$ T1F,p.=1.R(1 1ԠwcbP{e4 w6pJI@ 7sT T1 pg v[aT(B [ ZOGw77c6PxT W arFa0 ` ) PPp8u `KYpgA 6up n/ I I$a@adC08]d0P80a1aB(y u G` 5\3r44 Q~R< c"6$$B0$Rk=(>B?be l>}Rl& v_lS& ?c&g%!p8-"T&pl)֗ >YE! Qf RU\ Q$+p Y@+77Q$ %*A!)1 q)@ +qZKC 05W2@E0-  q sQeaKp35]m 6g.2.!! Q  M$ Jbz>Q}0 " f  ϐQH(  Cxo` y0rk 7 a5oFkpt_PB+k`N0 @^2I>a"G)mr` jD [>| ~bJ$!"< "/Rmz.RRbj8=#=`Tz?6EUs$"6:F)UE$^ H${ jP1@꩖` ku8we &FF r0oIpY7P >%0'3aQ$ T B,l$wZTWUqVBP&e A}' 5$-  V 9%Zd ۘ ^ @ ςAr{ Ew7Uհ~0HCc @pv@ q ETAÞz`:APs,6L Z  )L|AKp|!6" 24t n7rQ'x)Ä @P 15_ µ qs!A Q   I~Rp ,Zސ!h@iۥQ6k| B,rG >W<7C=jD§ vgS5U >Ѩ" һobAsR&$!_%%AІ*F@"8c O2u @z! K q'4A` pSC o% (W"FBp`h%W-hP.10pJ @PZ] Ps`y ps"1U }a |9?YA1' oF ךOB(C%އi(Ơ( \A2A T 5VAfs"̃P` P 5as^ ЂN O!3w7ƕdZTu y7p`0`o[-qx̞P Ґ =P@ P@JNP 1c9C{)ͼ7P©0 UP  3 P!{ard}5Y7 qsL  (A!`28  a RΦ{RlbE%/0U$̦(OkT&D- e b8) UT 'ʽ0>V *0Ȋ(ObN (@l5V½C= "%+2Mx5D `+A'a}L}+Pu vI.ۺr.JJ7Xt-@w P) M|opKкIkpgE'Mʠ  wCPTNQ@!9,+qng830 6M2vb{ yH0PH [*oPo 7Ǭ S1@$W]MDz$I |e`{J0M:f44 > h)&G90D(Smj0 ? Y"WЀUe$FaUu{D 1o *@pzUg 'amՎV0'@ g ?u9?Tbt~ B ѨFM$3Ek q (PP@(7$@hUD E ) g)鲁. aoP @I ա, M R˽ A76Q /LAU)\/ : * @p1A @.\+ +$Y{sD%\)BHI+*x0*0(^ZzCk@&w0h@͚`IkVJP‰^kr.dP\(!q* YHA`S;\XP/iN a>N:}gB5t=3uKb@q~$.7WP#g_~|#Fޘ]>AY "K0$&'B&TzIR(Ha`爃 @9&c ڀ#!/cAfGV D ׫BxɄ΀ |H3 'ÈK"!a|66>yf% Vi .Hb+!.8a.'8!8 p i@C 6VXXR\(-"L) @t O@̣2a܄A(HBHŗ&v"!h B&OnIVy5$nxI@Jz Mhe@ҾP% 3 nIS04@pUƚ-!I9>t͵֒#h0! 5O6j;lTY0P64"=LȂ DF";W\!0!?R0FF(`3 Dh&$C瘃[RbDr 渤 LmĄ\I='!d V4:Ғ*Xϕ3v留~\a[̈́r!&v{Iwg0onBFgʜA@&o@BI"q40@ bWxG>p!/jJqR U]/*u8e UQ2 eh"xdWp8 tfb *\Љ`8+ bJWmB #qL z^ .!HwB`01$/ `2aItA(1bE`4U)a \A/>2$L"B2@-×``"*l8RE`aܒ}kWA.(z<rHEۚW1:"SQBV 1- lEh@b)lTg>~9QK/P3T͗H֜dCPf|qF L2΄XB{WMn=p D6anB9*'Iw,Fr";'LKEݙ| 1|!(p DB (ƸT HjŊ0c,op)> . 9L l FpݑKK LaB1ƕ !M2Bxt/F.6I<&cę(WZt[@"C0FdxJ>2`p oTȓVUpTUA3 کZG7$</nS` ؁fٰ+Hjta-HH,@0`cf +ސUeIq"0F o7 cx 8 cy ǂ la[~c+(H+-ԩM-B!HåL owZkpbr 5PNZ5hx>|Cd|&6a KNԣ-{q ?=`8 gRH0,(PQMwyrBP[uA4#K.=?{dy0@Iȅ/0GF>`;BoC]B^'΄& @Щ+=E  ""TH(yqT>8Z+@*C9 ox$ !O h8 Ȃ0r F `̩A hdy8#j9J *. +(z Q0F V($xmI,xDxAtD v~SyY:6=b gV8Z'X:o874XP`ߚgh&J2LH(Q P 00x^B5軄@1C%ËnfLrl8Gc[a)فGIz&bWxi+kb$=H `H=9Kv Lq 41ݹ&V3J3AY4}06H<`P k (K؏6#9P#CY~˫~:xT4HxV2&pAByȓTT0D@ U~ Z/Zȹ6y/{d.Y.c5׭!|MaK>qЄ0{$;@`Pp"f QZ=j h@]8H@s$ӽګ=['%ل[0]rzQ)iQ x=zHY$Y6Y'VNY"}>#HYZaM8%cP<0׽2:" 1z>@Py496Ȟ>~*Bx ?9U{Zs| @9b@XOX]50nEyP@&búS#d7 $wR0/,G1Obh& $2M B$B:D$X.b p r.ȐyND0 ,6#@ rQZ(w죀QK@Z;,0  4 W7F`ô&cXE " F #fnXm< Hp!ٳ58M+KgGYdCxe)I4rj2Q2ͽȴ i4\kyu@m"SJ0H~$nPĝQ8&hH D 2oLGδHr.XQBd W &+!ǚ*ίjI^քK, *k4@Db&͇r54 M@d81a xxH]D[ &ؖ8 H6Ho[K(43 ZHOQQiNMJ 5<\>anhn$iLSpؚ mxf%M>>ZȨkFz("'YCKُtA بoF\ ЙRnaW9 94(dy4T/@ K?}'(A 9n[['?] :#ۄ휩.a)69z6ِ,r5 zH5g8P\ZX (_ ~MD9x,p~2Op-hX TPCL 5FPXa@'ue+- ˑN* 9`K͙k#c!hPV#hP~1 2ωhh:X KO`pژc p@&-p!B- 5`(QĊ-֭b8>薁.@.+rЊ!pE@\8b !X@B=H7_bM! `  PЦZư `ܣD6(bF-kB‹@C֏m,\׮s%(GU0 D7P30 (.%!P9@'$`B2LQ$ ">\/ Cfɵ!vQUa] E״]@ d{ UZ1TOtABCPE@`&!@-cD? =9%0epg) Q&<v ā%o t(ďmv]ں i TC h 3 ߐ+Y !CS $w͙J/Q7kR ܏A8O"#49d6AYpP@_Scb)HW9ڸCn;R%QG;W҄3H7F1A.[ۦL*GB@YyXb (u^+P|O$H1\%@?& HB }pA>q"2C,J C~q,X BQ0((a B.dK&$HQUWGGRu \yы( /30I.*@'#kom0@ Т*W eebEx4rcи `ṕ s0BYntE܈RE-q2mʦ YP9]pga%VA Au;MG o{F* 'UAPfFjJйz K)NAa@uBq  @[J )ȯ*p!/DhD lHXe,-!H(&"#NIAKX=^@Qz@ǴH`б^!* M d!]\O=M@!7b1"b0R yY1`X5eRԼ 7 BB egs <™ca:Kآ,PA\xPmx0" qI,E-H[Р-qm ibETt3 &PT<. <7x7t"'Br-(3L"]jUuh"!2QQtA˔5m!/v03HIzB/:30F,1VЅ. a#"PH=-$^AusrXphЙo\g=J}R3GGU9O@ J S^wd(Dp+Cr`v…N"Hd# hq$ $Y yKX\KWD b'Sd7;-[3F=rE,Y|!z`[xK-T, Fjpo[t- Prs}q,?0Mk@@) Yd| @/4 8(YU\Jr|brcGo"f5GnՒ*i1. Ї^oqq2OZ D,PK@s+Z QX.VOZctMBAʹ$Rq ડ ׊A{L%:AÄbBs;O t!_A~DK1 ^ZPir`ސNЋHjrx SOCpִfPT@D{8|@L9 =ˮ * @`  C4f[}B` ALaA̤QTEh< M/8;\=MCBeXѴAm1l8L@L@@*HTq&lP@Ā@EH0۰F AR@h!Z7Iqm]EYPќ A/pJT ؉C5@쓧?h%A ʳDd DcI a@ fYD bgp@|t@śm1UE41)6[yi`D0@l1 l0F TE[О Yt̽Q% ]@!ԸKBE'`טR?t ,ބ@X`R\ ͜~LMpL SǜG0D\@@HTŃA=t0(i4ȝ.@L@AȢ=-xD^VIBRMa2 Umv A@A%B<F?t2BQڄ@(| 8P\BT- tL83C@SBVքRm$h4@*+?XB֮}PB/tZ} L1ZSy*K jb> Fd"D[a_zUb>HDXg|fLΤYtf\2ZbE}̄nDepC!q}lA? A C0OFa[Dź,ԃhB%V :ʂAcXB U[@YBT)Ӵ>$$s OE(A+!<ۃ~B BTӪ5쬐^&G*\FC"5ZT+هzƠArቮ@Y$2@QPFM} sI}An \¾iP%<8q2lFS./̘Ŕ< 6(ªmHT $4ܩ  Ox ԇP10*$#5p }ZA(l) )C hxkE1 ^ᨠ$t %l ``89Ěp&(Dn3E1?R=((*HRWfc`m6%)]94b69laE蠅o0 ĂaD̙~frDJhӘ& 򐃹g!תB(q ;(('>BJ/  S :cJnc$#&8J,#)'H8c.щK= XaoްD!1 R[|=à B#+~ (  9ɠxy .g1b | @bEyCC Z~[~kx8! Dh (e>܎SRqʠX24>/@H,YO N,ȕ6h ΚIo &#ozea٠6`( J[R ((}$db jPN15*o,Q=ȕ M?=UBnH x\[6ҒKl(U؄ţ3  R4R`A3)iØ)@3Ә\1m:ØP p)#yfF}z8`~C"i R@H:41&Y"3=f`> WΩHhB$ItўX@%11tw MUt!n1E\2A,shX@ 2HGdE".mB1(E 8z 2L(0IB]S` TWҎR` #l-9@.~R¡bR8  ǽ Jmp1>* +`"07A1:%ulBUE/%d\ H7cX$ #m+]#WT#< r tWp:9ӏ6P %:O|Qa-;E)D  /YBV aX(338'ZA b\`AM{`㳫(g tdkz euC|p+(UYCP14)mD ;|w| gA A 0=p8T .9`SO'0*qCI92` udaQH?hmxh2STM L> M WbM0eOZWgF j)[.+U>g$8a x9Xbх 6AdKД`3lY$o&!AlqcbNy`!LZ@ȍK ^g@՘c\ I޺x PXq!A,#^ B1GQFޗ$c'HS^k* ?沆yakm5H&cl \AAbX+[@n}E{\-p  HAh!1HCB/eAqd$nCos$,8P_歜8 $$m$f=(H5 $L4r,g  `|,AVS%Q  /3Ea3ea!dsAB+o}jp*~/ 'ĢfztbLt\fo ¾jIlU` ԃP, p|'ФmGP.Az RJl\4K8p1BeJ b Re]DGR`KaVA`* "IPp C'Aƴchal`# I,B\ƅ&k N\&cT"R օ΂xv/b10?%2:e("(  0 Z ƺDJ\RRa]hx)o&aF)AN'.Nj. p0 hACN@F>aahee$`@! ;a%12#Ģ  qn?@֬ o  qO,!`o>`KBdl  JcDڰF,aD)DFܾޖ0:l(MdadA1̍x'|V,: DGI (("L߾M İ \>BdS "Ca.TqG‰L&M0(@N\UOe@( 8 k(F 9 v rA> Ex | = B OcA"n18dװ WB&@8:fDٞaa\ h 6aIqL`+2eI9"BW9A*| "/3&QEJ #,Za!f$S.Aۤi   > oAJ6*1*K z Noa); &0> ; Os'% f D>$2 u0ΤQ`%S)m)LC' m>8d 0m>?@I`Pt(4FB{g l>ࡨ`P=lUK0GdSO@Ud~~u8C8NDU BsC( ML`zC!D(C^e& FMkÈ.Cl@( "}\7Ta\@t,DvT.="1` P`B\a".aL|00Tk( `Ffi'2f   A,B`5( >U`!F4D7O Qe( !Z a~ `*`LBd:*eN9Z b l&x ,"9Z!KA/(,` fr 3Trc$ flOT,f!# ` "!"!r wR$@(ׂXZ >fB\'(?1>TI4>LfHҤAF΄)Exزmzdac.rh⃎!0,ł'"X=&cJBBL.d h0Tj(`OOJ,] @BgDz& NffBQphS&  &n (><"r@Ҿ a  B$ "cXIt! > @ZB1gڕTCR)w\VSSe2 #b / ll oN*āY &Au%, 3c#uqsDp fDAC$ S^]JӦ%;2:@f`'Tl;XWgJ#xcNX>:$aڬ cp ' (ΚOUs B P v fjIrαڷ~$Ť6鎵sĊwbCD E\eRg(TB'?1$M8!) B$C` &Cu Պ2AF&`!>V h @ e)p 90N 62Y$MZH)_' ?M~JNM\c1y`" ,,<'HA 8<\e &7]6Y90Hw&X|SSw%v.eZ謈1 NzD&hE,V`hJ R:[?A +ZG+fGޔI~$yj(wdвcUTl`A p0 c >fܑ&DRsk$i#z x &!d` " F" za#; ` Jz ?%κ{ MzJ>$ܲtZ EJ زd 26@+ZL*f'b(dh`n*W`XO# di wfӧMT oHKeR ' z0IRTjXUCTt8Fn,Nm,kU?z *AB3 b:oDALXqw ):%lR*Q`S3*FsgB68$+)-A1GpV.P R?P i*]&0l@ #1"XzTIzS?TWO%8ә*d%Zv x AqEL0 9/4%>~b_:_P(AdŒe1Êx2-9BE"e]HL" /.Q7x/H*  Ʊ Fx|"c Y^,A~p&@,](]>TK\B2UQE!@-EE(ހ#!t-gT(uEQ)0PXe%33H*z d8 03'Ug)zo †\gZL7@l>maLx \p! x@?PP"6fXe,$P2^Af!汚@Qv Z& K ZF7^Vz!g0* (hg, @p`( P/CȾ 5Td, ;0H). *јAn@jRSq;%bEgM_0H9pj j]jd KJxX QVP<.h16bA8 :v%׀Hs3WִKyEEqՖutٗA`89xaI pX E0S\ %F|KjNO# c)oMP(p_a\Qo:&*kC.!+lC$(BxIx`܆Mx}/@pc]Ad^&`lr0sD] ay! 8c6V T`!!al-pͶ` ma9` AQIA3yI/@7B`tq`{ҊALÃDCe+;}\K)sQ]JDf(OZXP!UeS r a @PSi Tmm  S*]P  KKiZ p4=. cckm2 Q?#`WbH=]B&1o+0 r]}Ps*N 2_gNrj1 @'Dl l! AqCh6.qa'' Bl\Qazr]-z@pI.wqJv 2gg * EG@_g@Kqe1P fo{K!?0a RF6GQoU/|QwE*B`/P@ p@9b !,"yцy1_ '[D'(IGhwm(PP'dG4p'+0r!8!vP< a@G@t)S]b'P0`ph6`}T.@5."0=-N p8h"Q>/^7b@  epmh 8B*! a".8#Qg.R Z"6pa&@p_!Kc 0B#]-?&&UD0_sTuAY Qp}:B 1 ygv* < }/ -qBwp i0f]Pq"*qp)_C$'&vrAY0w\r&fWrA0EId.}0DUNTCpgur" a@HE@`P7q @T9I߀uJs /9v2>y6ճ `coo 0.W/@*}Tؤha ءF-T'@ -IxTG.`F20P^p1 7Po%ip  Ih0^ ϣ9 R/ BH P ^TA es "hp)` pJ4 q*$q1KP-/V.=  Vc~[J繐Xa A U "FPxv]R&u "G/31_za)F 07 NC / e 22 f4vXRq` s,0 JSr p#U&e }# 3P^ e\ 1(oQqa {H W;C2rB8_ AU`[F-Dڴ1T7}S *"J oo Tf|Q A0&qs@h `i Jph*<ZykpK!T4@b$T!|W] aA_APʠ mIP$!B`{#e_ 6=22R?h=6n*W$_qh,y^nC!vo(} "qJo'(CwY(ԏ6HPw-]@PQ'Z*Ub]8@b e2$V?t 4)DbGqKg~fGa{ z"EeH'! up!) d'rI#fam 7Z4aCF>]a)hJsXe2LY K-A@Bȭ |17yZZG3tl9p tQΡ<ꗽ S !#{IAq[C()"6.0 A2%: "()r pq6},mx(Vy*  P% ?>p59]$=+FP#Wbv$/6.WvCQG,</Cr] /p&JAzhZMQjsi+k #Vm'ݼv]/#ZvAQp`HH:XuD)6-'F?B1+S(AHPl+A q 2PP .fv:d xJ?дT v}`G#Az Q*T (&ؑAQ,\ʴ og pY PGD |X4"Q,\z21u&@ @p0 ^u@@X;¤0a'L- B) |C3]?es Թ]b  @ `.hs8MQG. j-_ 67C J3XPA.;_cpK9K<ϰdK?rg^%k>C FV;XKF )  #ء-![Q*P(5aK4v׼A B ?" UrUp:QuЎY*ACu K*a Al@P1 ^0`!hK ) kVTA[ 8P p8ȼ’+Yp"Cl57KHY #7\ Mj.A~-  `'6V(ʕ 1\  @ښixcZ8̆'aA#JI(P+vVy3`?8;M0lNqKu,0@ b7T"l2 Ub;#gMI Z!&qan ҁĘ"Uփh:! "^EC Y$aѦX4dn8e2@)&Iy~ 2HPF*Ǧ 4r 6V22'YPmSb6&.9M@!JEfBo=lJ$`O*b/D&9'刐60BN,B@<ӧ`'((hY*↣M,#6+K`}c8H2Ƙ8A Ig&0`H}M.ǦV>PX.9te |9r rD]"(8瓒h\&CL pH""2bpƵ8 B c- Ryf ?9s# ivRD>H RJf刧: a9Y"rs;FQ90b6m" &)G|X9ѭ3/^#fV"@c+ 9.BțdXJ廓mpAXXTm LdYR>(<"AG20]n?lF.U*]X,ٱ "Ǥ: b@=c!4JZ<ā6'8A\Ӈh4+Qqx!\Q F+'mlCT\a2K r>ĉ.KV 9#8&ѐ&PxM  D.r x'*  pWkG>I8pH&< 7 a P6}h1(@cI~xC !p aѐЃƘ!&c$4{Nc<"ի(P8G2 \q p6(@zuG7 .DrÁ5.wq 18ZC9#YlCq,~P# $H`n!Ɗ0 tR|@:( @8a{49#3"eɡa,}1E8Bm ݈Kxڍp^hi44IMaᲒGݨ zFh)PE@O@ et9AÆo xbBeb W h:  Òadq+؀&JenWЇ-D a`XBࡰJqwҏ~ƸL0@5xCN*I#+\بOzab @F9fXW%7( +@"Q pYZN-q@.5 fj- C+ (.B1\cl G }D F}"Wv] vH `NX:FJxw$#ULrWE0("kE b&Xq00DN#<`DhWVULa*2Ģ%Zp˘"> "@X"'<y ^ب7MY'H< * ^JSʒB[i@! ,J @A C@ @L,yG!@wH" -eyD>?q.JbПB1C!trKN0)~ 35]֬ v@?~jexC̟- [V@,}@XJXw o=an[-Yҗ@MB!~P` 4q6C`֬KR{͑#Rqٰ":{bW&2D Cc4,Q2.8lÐ!CQ "8t C0TMC="r|s E -(0L I8iS/ VPt-}@ŐH(Lj \@UT50:EX=f 9C@5fz.1dQ0DF0d (,0,YR 7'0v eG7t1K+'%md8^)ɧ.;I*%I5 <|߀iؒ']j+hV%)d2i*S<T7c1s 2t3BV  U$~@+J7$(BE Z.ng1%Uh/,RY2-X@D1 (7p Cx@ t$7P7oNc^ PK}#]14@⸁A=EM0EXxt# gHCy'8&JP{xYX4eHA@6)|"0I7pQ,GЖPoآ` niEEgJI4<CU8(%=BzQ!D:rq Xq}R| px6OEuZpQVTB P0xOP*P1a#^R4\b4N#&10zЃywt~ i[+0QB- %@@ 'S1pkYD]Ċ.Oq2<;# HY9!Jbq(4pj"2P& IV)ae hA>=9B-#91ԔHU(4gJ׺EM`?=po(6*Ar 4ʆ^M(-p,,7 !V&ZbOt&GqĂ{H5T`Ȩg9,b3s(^1OeH+!>TzЇQPKSR9 S!P]aL}KaՇ!q -Ap (V ĥ .Cm#p> h&;0p|M)OvY 9P0U/l"~PYH8¥2o7~dɊ. 'M04p mtH[,1t2maҵb{wBf g!j870 _,IM򽡂 C!ג Rh@ BEZp8V 0BHH "pTX::ca;QU"K/%z #\5Uaؔ AKXbP[<\p \N#pB ߲(c)NY&NPha$Bpd@A OT?'ʔ]_w XQ52b{eLp}#)R$luxwoH3YM[!NX[nfhDˈZK)Vc\I0Yr p@C(E2<`7 ސTY2)Aer&;&@b)R5B5a ` {V[~Vf{2rpD) Ϡ$1wz`tq WFvSWI/ (nH3CF@50@ uP5V|w{0!ou ^ V;B{PoP0l_ ] 6@ 3l] ,pe&iX("PrP'nK1x9v `TXA8~.~#Ĝdp0ˆ> =RPg%.4~%Jx Uڠ 2n^OdN}16 tЎ P)0 i& eP'S8scC6VJbIK 3Etق#PY2:M5J8Ӷ910O0 `0n<헞P @b: T;1!nɅ|0? y Q@vՐ{eiSX;V'y0Vb$nD QĈbҕPY^TC`Fvj /\+hp pCƛ Ra3}"({3$FpASO7p)|)Y$ X^ :KN[GV;P&HeGƍr O$qv0P@g/` Yx ^ 6pkWR B.Ct[BH\)4;ttf\3t;(4[tF`6*vzۤbx؂t$c#q/zV V`_!j هCv[)-*F߰us) )ܜd Y^#Y>77]k(@:3tOOh]S>6O@?u!R72b-&Q4)rA͟kRO '`غQʻS4Fq+X B00)^ ;@ 01@*QA.zP$ Tr[ _ (I3X᥋#<]{{K6)Y z_Q+ 7\hZ%B1d jՒv@VY>0,Yjƕ6s>YL~`0*ʼnm`昜ڑF\:GO։aŎ%[Yiծ]Dol]{@;>J0,Vbda s S0K0| @=(VS B+\ <@ov(ИaEh$ _xȊ'[%.\6]s?ycs8qR 6PlchÕ$btA#hdidKB$/LJ J)mNmnh201 AxH;g-a ZN0LsL<>ُ#jOġ,!o` O¨D4R"5خcl:h;scI0adR; @9in}l @X U;tUX h5bUQHrJjnHFs*l2c2Lbb A`sĥvJJZ.fZo Ō/v`09DD֌Ё|ZGp.c>:A*Ϣ/9[RHaklg@~]Y#8@]&NUA.Hm4;K0=^*T\@ -n3*1xmV0bo,9YK_#ΟL훹C;|#7M&DRK֎C3^ImCR|tdc.a#9xmig+ZUnX'Dh .`Љ)2Y"~[tO<hC,aɑtK!&vNY"L10ZMgw» bn#d8'qB]|"]x7?K-3 Dv^Qh&0oxE `D'mm曄N頎O@qgmk[$ =Dfkm*@L  k|W:$XS'] vK"C\e\&D1D _%D4I'"TDֱ$/`2U.ZG5.05"@i8&1І `PL=!1k ̜RF6y8' PPy'0I (DSeeS%05QJ O=ȡ_J[P2 `\)kH3(`L*5>5 t& r8%"r|bn 5>p=` ڞr m*jY@"T؍prT%XޔBxg;'t>0F _v ׉(5BT$kwr͉ cMSWi+1,P,`l9]BICO.Պ4.({%06|~(oYMdH \Bf*bC%k=_0)PC;bg'Ұla&Zb N6"w{\h ʁ/(rGX!hh`Dl/g"o"|0 P0cȘ?<|s M 93ɏIȲ̍' IEaj0@J96ى5|m ` ,aNيGYdiG2( M["P -r\0LSi' hUϥ aicq5 ix;YC>&$i9/~:66701&x#g2NaV a/w<M,U`'{nu45m'YP4%WH˕2vi Nq0/Y &oc>ccQdN=c'J@%)C¢%0zѐNn0_-5,(`o"4bb!P~FQ VC>͊["e;2 .xMdC!cD"@Ɏt_8"x am@`aJ\Nq} Kl6e(3~ 80KVa-ˉ"=˻<'a*xȇ@:&ea؊h{I{2q4rR`t3>#="`D`sG }}y̐ 9}2K % —o}o 9879`!؃=<`p=[a30*Pf"Axw(A ɋuYЦ, i&[ ȃ*$>Ǹ-PUGP#!Pxab=# 7'BA Yщ(a:2# —My@,Ƞ/`L3ؓq,1ٝHNDďNJ.95hfٮfaXxAW|v IZ@[X䊁3sR(C;80ظ>AȨ8I o-.b>3*(ӗҍN9%C|QH`K8rH\"Dx=8yY c97)6Dйs=:,&kH4_**0ɠ@k baHE26t+3~8^=X3bDXU0b&v@1 ˱ُVI`.dFHo!ڸ b18D 5g(]@5L X؎o@oHɂo=669 d=O16k@xQ  ɭЁhVMyuxd@+oErqGBd@WJH@$t@54[X@ ;m g'P6KǘT,1"OWi Rbh>b 8𜩜4,ꢾ&ZS=5'T``-[X0/*^vW1z ziofV kEH%kq0ӂqqoBshx滁boDr`){Ѹ,F@N^@8a ltx븎̉9(OX:H9܁}K## ٭AY#n=N4 2$a_:aSЪ1_ q#YfIRm'/R6x.;$R [H,`fPp#9LA{@j9h1(RZ|c=zpĈ:bZ%J4[8B'̗3 Α3C#'q#ZB ζIaXG)0KtDc-6Gv1*UDAE,ڴjײmmA[-޼\R Inݹ(@&AzN9(A)$&z( #НpJ b d^Ȇ 4 Z|kK,xs2|fTqշor>E0'#aVoԃa)hDuSP!wHslH(  KY774) "+2~i` 1ΏEt?ȅi~r AZ&%F@EDqJD|cZD Ebq 'Hv0r #qS ࢇr,ɇs59q%Djpr|''r"Y')Xr9qTSVESRIUn`4!ʨoDM@.n/D| D#@٤4 /{ƎTgm̉* `l$,.|F-s\v9ײ3s u*L?#B9'@^UWm&F2hS!8TQI(,k G$" x p$hp GD@Y2!b+\%ܥɹ]F- c8A@ZqDTB";p " "~ءbL h/kp-cbc `p̬1}JecH <Ad@d$HM *P:tk,I`x `C d=!$8w@Irsa蠕2.IB: F&d!Dծ F!F0x5'/ (Ƞ!cl pXgU, "/ƐɈ]G #qz (FdS2 B$9"WHZdXkb (2qH#@`( \L T`  P͂|Š9E;[-5kBh"RwhՈaf &V  X(08\XhCb0LJ}K#\ e A *!8R#Ay_x]@<8 r~ht1j"'Т`]Bl)6 B':g$a YB?\a WH6$<!kQ*!ta HSWzHw9H BVۖaIJ.~!! Ʉ$F J?J&K 900t!!Fp`b2ăLc!!}/o9$rSFp=JD-qLBN @İ ǕrP) ƀfz]Ȭ*KR Ҁjt( w1;Rjj 6`l5""*#s " xG F&\P2 kp"a\l `1`H2ab#(?r 97 m!p#U&pg| ]h<\^=qbodpH㳝LhlO1%,ɑ@J66P# ]%:Ed͚n_ȀW *m+GJzv)6S6W+I@r)EžS D1G q!xFe5Y"1hCZ@Ȣ?HJW~D>RDSXO=(ct=XC)l'8g$X{Hzc>˽hX~&xLj;أ(Fp.XB}^[, BħDC/0L›|JBS׌`<VE0SL&B+ł HdseA?wxO^.CDPʵlUD IY1Z8G 0Ej4,B 0BC.'?4p eH;(?,0ƳG4 gpB0pċ?B}^|C\B\P|O@ HAt8,4ρh bEADq0B5Ƞ}xE0Q LʩQ z=MA %Zc |ʌdVD0|C4h!IP)P L<cm'xF"Oh7lՌ-\7D0ј'AA,,U&UF$ 045tR; `@ GAc.^E@`yc)܃[95E2 ܡ@›@'B1B2@ KDFDID !ð-'40 pI.H<|@ШD7802$A*<%XB0H JC,FRf "ѝQ8ܴ 6#-7V@ XbCD@Dx B `0C,\ȞE\Z1@BS) 0Љ}' *@!B1DBE ;չSL@C)P\#hAɔB71L(;@ U'ifĽJ'٢E$EiDTC;MLYV.T"'PZ@Y<2$8Z H&iI[hB@ةHDhLFmbA" 00BBpB"H$i./ʴj ;p܍` ' [ '/ ͈n ː4#DaKNK+ D #4CؾS;HHpI 0F5a ,?P:$ jD IV26=C+|MJDP9@P€%@0Gn{.&Z1PQF@pxi&%rR/Dx3@iKH)DA!3GHQF @@1^D4o$ RBl#@ictjj(ۥ@L$B2\pyeZ0X7&@?dXn h1@4P=#mcUVP"E )(:.4D <4>1AZ,GԈ*lڢ 5GF2X4(X.aXDI.<I9#D(,:DQc1cYn0X`0|P@tA4e4Asـ6&cF̓Y]$U-Se=mM9 eA(^9*Dt2*hH< lAs%Ҋ7`Υ& C~?Fk e,*0K; 9["f]@p4 D!@L\HXă%fA( @"dL8RZdO'64`p,TQ TÉ<<ܵ|C92-Z\k42n.'9GTx)'B =F &dqe[.P>G46l<,L&XDNĄCQ<ʃVFHę'4WwXR iDpU@xB@0D@;`D8_˭bc L,uDr@ lè!Ib ^ 8F)Lh `#;bD6F%:t-4F`ͧ0 ԏ RLM! wMHESx&PHz\0z+|^<+DL M#D1F;rWS#*H4|2֤q@\)O-(ɬppߖ- rbT-`дѻ`-e=m2t?ǯ:3KrISYpi;leMtAƆMC#i891c~titOQoȓMI`RkRc[@be0L4 Qڐ=,jj.PF@Q(a10iϤrg/b@\v3v :P8c@ T@a QOp+0`qP *1RRaZ)r<+HK[.@9 FZT#Ė &9ZIo@meK4$`BzRb ?Pſ )t%p9%+m&+A)Ih.0@G`pW12=tK.9P!R騳,dc,/<#1O[%hr{NV.a%%_T/0$`$KCen;5B#4а|l ɩ"*Ix!wmPc<7K4/f2p&xc,.$-ĘZ 8\V0 eA SLܪ :E%yJ&jJJ|[( c(~(OUVJ;틵k౏5A`& 8$J5|r<)|f@fܡ&𠄂p RxĒPm]}\A@_ 3e`C`c^JA+- vXKZ-#@U&$"*1)@+.=+4Ba(@Ɛ'&jTUT^rlڣ Ѕb eFyQ6i'@4< bd|buCw(Go\&z_i(:$I^A(v1fE^!VV\eJ`Ed4RS9. l,  |' 1}T%cHAG3$V$&GO I|+8^TPJR 3UV Uzģ_fܡ&0$M?ݫu #T/QlJ)ѧDۓ<'*u9AoԻ2ER{-1h؄_8 \1G"`O%"}XB v@6WE bۛvC3MU0̀ͥA ZJbrRn&.E٦SL`(_لg6!x;D66# .9Lv)BXSF"?4$ R V@s@dG5vF0n*x 2T(` /+.ތ$(-XA4~dT` 46wdF3 @*Bj-"`ݨIM!0 _ЭfmT'R |؈-$6&QURV>%.JPl謤$h=@8&Q吙b3+`[N(5M.?aՂ,ܭ2ĀZK <#A@uoA/b_3;AcZxS]57?F0<e` Tң<,ָfXhE% 怒PT%6֠ށH)n)o( v$nILd`&A.$g.7P c(\`u|E/.aOJ8Ovhri>Ipn@/%r NXG&PV$;6.kGƃ"&@ #6kGL h9B tl!Zpl(NI 8LeoʠM`h΂ О¹N 2JPɄu@"9j2AJv6 Bx&$3Ix`$#G-*䢆IJC;h~RQLaT.+=&/R`C>T9@&Q@#)`P)! BX\q*! AB bR;Bp2Ͽ1"p\!!VA ΢!I ^t K L ^$`ya_aI$t#|"6 xZ#: vf* TB,!=;D*Rj@%h~Q#8x dj6 PBXAf(Xa  0~@d ACf -+CA!:/ qڄ("5D _E 1yO! K6Dj(&b&Jn  a@ a @aI,.^/ ` !(?NllBRdpd`!Jxbc5_su.EMz؍unvJ*Iu=%Th&ltktXwgMI`BE>hR(AwzDe;)na L0NuAT"}w}B V@5LZ.WD V7Lx6J!ob.K Q(xa ` A$YǑ$TaHXe^L .A@!6D_X"dѦ tAtFah9 ,C-RFc"H "vXlF%<}W~h䶘S~u`Fo۸ v$ *8A)|8* A B@T[lM BL&OYaX.`JA 0]Y5Jx` yN  XLդe C\ @c2JHc_n K ocFj WA@AP @K:<.)8OsW*d| ixGJG9Z“ Aڡ A F[ -zWAi!U%* `N>z*n$f ❄ZZOr[Zs;[ZX:x A ̾6@N!v&j0#9@D,x]x0W!‚! ډ)v`q*nݷ$/ BBFT(8HyLȬΨZLYo$XMvGkRFcp)!oHXfw11Hj=Zݸ xqq@ VaoiGV6n l"d ֕TtYNAEiiw"![ch&:%栍 $1p8q@(lc0ƍ;jl` [{,zduKF4RR:)[ `nXb'AAx *p@;N!T@JU 1.4JL - p  JrU+9̱u'U<\"K;; `ZXZ骷ZZ \BkbKn&7Z;v(\Ʀrk9;#F&|$10ܡ:A`sOG.cA42PAX@`  &c #qP K @Yd +2 OCUK FEQJKcTIePc,6I(<UYe/FEQp[% -mb <5#@ *iaN~Xcd!x(a`Qb1ZhRNxAv/T#d%f@n  90P6d6 8B5R$/ŭ@n|Db0*$\N% 6܁ŪYbq9\zZF (H@{x5{AI~׶@mPjKd.9nJ~X ,T ĘH@ @@p)v* ;E X`n1pszW#$(2$#?D`&Sb_KSs:pu'c #Ϩ` `la-|]p=Pc؀56 Pb%J |@C!AYEaWP,1. HL Rԉ v,FcHuQd6n }'Cr]X|)fD8"FbЌ00::9251p [Ș^1{bAhLpn}HTIp]2 mVoW3[a._=G! @ !ncaߖLc%16(24ƒgMVvШqI1ET/:e٦h ,&H#⵴8.. 16!%qg0I3*L`S&1ƀ̞6HA^V~4(t71\b@8xV HDx28bLcp1PrUyZH<E <zx@, AT * ZA  C?ֈ D*g,Bb )E%hς3 MԆvZEl)b]WRu1bdŐ! y:a ĩ8!Lz ĉHѣt=hczz3q(BMj1aP*~(0պ'\I;(~Us&5aYK@8iSi$i7=.p*q n oL^b` qU'up]!lqKb.8+Q tU; x7+X nȒ,S W AQFd--.C8A')OZ^NWAG|m9WP_^#X]HPm sr APV1b*3=ᓳ5T#a ^;Q2p:a!iZiȅ#`@c{P~A_V=WRu'PU!6@4Ks@/H" Q3X bT77W ' t tT! 9 xDo t(pN.O0D<˗OMp6R#eNINGcN=&`6!Grt)p&'&` I/;]XOmȞJI/Gs")#I#SIIsz Q%r8sT ƐgiapuP$hl@+r ĸ1l44`sfm!.0t zP8XyW 0pKgPF ) *o2W|ppdžLDڀp"O"3>6=TiV[e\ey zy 2|f{CiFJ3Q:$Sv9SK Ga s l ]5Gr dEW<6i5o mgKZR+T d48]:Z_pX3 3JB8A6ߨqMP~ a :1 b0Ps>[E{HTp=2PCRY2*i>uđiLRuCwuG&FpU U7נcJ'po #a /K18+?1lWd0 *J1"tFV$d{b;0U@ƅ#2P$ƳeD"#ZԴuE$,ASXɛ_:#;&n !`mBwuL]#9$3sC'O&J/ziV Z $phc-m2Ҡ@WJR @b ֐Ktw! - ? H M |p@0]H9 })@61VQ079B  3MCݲ!DK` rEZ- G0D^)Tg9S.EŠqOPg!拆k, (G`E0"Csȓ1;;IJiF ZgZlb\OW I L.@_-(\#@HuC }UN~5D `+l މ[ ++ r,V{ P ̃2B 9Ct37"4p Ph Phސ :P98ݐKs-/؆lg''tō$|ROtPA :lG.d e+mÕ=|ce;K%4(@ P uqPVhZ}6'A `-Kk/im5׆)!E ^=7nG1)b]sߦ1P7#b 6cZ `H`/_a Y(:lTT~m@DA}% FR!a#8$>Oƥ%l"isjîxqsxxi?mnQ(:G ǚk*+bҫo :[n8i HetC9uRLn1L P @+,cK&t9r9(6Tf#|;kJKlI=nś λ i;q(B8!Jco>?i rf,R?TBbc@/8E%! y)?|Ct)=\j:F/39h0J:iޥJo)tN>7jЯM40˵lʫZ 5Ԍ݈3bĆlnLݣ:Z#V+myZkU@A 0"Sd`3/k(?nqj/\= |q&toaLd 0@\%>P]hH 2%igj_T):{A Q(({SZ$ô>ϫF7&+>M-VA,M>*0w @Ŏxo 6B섋:NZ84.0!$PYW61 e odc5qk˧Åp` (jFgzCYY0pe "ʁYw !~Ր4GYD|Pރ92^EC=# Q  D LѐX!kDD%4HFkx;B(ډab&@@9J2"1a*, 7i9\08/X#1R/gKD2(@a؈l08VoB5W g", )׮9+Qڧxõ 0hXCV%P+"!rϬHDKx(Dx2BJ; 8ez`[ѤP pTT=h*|J0v% E/Fb Gһ~H|ĒE$1fl!'_1f,DSV&8j!ofGR-mq 0T%vXC1y q cld M.?$8VKX i}-<ζxFnuW\1i T$06ftEY1:rC$ڐ;nЁ@{AD!VtI[Z܂ $*a3@3b`aBxaT!+$J*#&oH0B3jDI .D.Jja#/!Oj*kHTb"4T)[zDcZZ/NZ0"bf+*PL4TS9/``^C&?:#8A\(7}>3p⡡ QЇ%Qo.ar=N#@E̋ކr6hP, WqB!:>@ 'eQ sL&j{ǻ(0Y+:Dv(F!'SUT$X{h3O'3`k?A[\ ƲnBYc|Hve b# ZFDqXaV2!AСHA Q?";}ϧa FSҴ9{ĭ`[ 7mdž0 :hrtjJDk0">:v(U!ͫtl֏ GQ )h-Bw@W!vJNՇZLaڋ+W C{v9WP*<_Tf؜O7qmӌC8+1;ۘ Tnqh@7`?$;u*,;ȑ F @$7/3\1LZƘqa~bzE}`?脆 =B @Tُ= 1bU"T9j#%{]y`@bH Éh ËyyYF+~٪ h r62=c jrhO (VYւ"S$X5h,,(l&S`D7 K*Z#oH;B@8@[#bpӘx 8|!cX!0zI1B(#H8@>P>APƩai1Q5Uӄk !:C{[!A0?rʂ4h$[AV8wxF Š 00678 m  CZʋp :z~ /9 Pݨ%II190CIdc; 986%FA钀hK0!j('ch#0 E6p?!XZ'X:` UPFhx4p"b( a:hhImW9!C)GpPxH$G V 9!l[o 81p ,ꩋԆL1@~Iy0=~C&Ѷè0 ! [l=V買ڥǀd7 KÒCPh P1deXPhЇPP6" ōK.zz@KE<EZ$ #H! : `"X,t"4`zm@,r# qُ6l87BPǼMvÉԆ0⹭*pd#R~O\H  V`V`l/0 2 \@-1d ۸(`-1BUmtPQ 0V#WXdK}k H]Ar{(Ta`#8pTȄސ(^Lyy8Mw (Eƙ rȁr`^pS.ls %X+׸@Y~aEӳns(3 32n*e:&4Pbp՝ֺk6kn% (k*y5KXY]hyByxn(.yf%0H H18ŞܤY6zh (9 4B jp = h{qi3Qdb'wF0z,4تO4|&=pC  &(BZ"Ǝ4hbRA,1 APo.sC |keD9 |4`Kad {D ٰa^ARx@XcZ5(p>Na a(ԤPZ XC)}ey - R8,WmlEa9a((VV&L1VN/9ttp9wZAai4ZK@hЁFXF&Qv aA$P`PtXT%dؑH"O"H@Nӈ <ePZ 4MP"HSSs^F9G+i0s矁wqf{l5Ԓ )24lziLd_(Q8?@ %D88[sqkaiIc8F(qX u"%ԥrG?Pa,@%ÂxP H'xS3Jz6MăXcQZ у! Zhc ,#IX9uԱ/kei 'h? 2 Bp|NK;L3/7.HM . (eK 01V5A aa `%QgHaD @t!A;8*E87*D4A7X lo`PF+ČA/UT3Έ u-zi Bk$SA(OȻIFXD-aCv v`A"iD@ b A0&,79iMV! ?6 @ w &F,%%2ٚka'C P`6S`Bbad)@SV}@İGA Ej5! 4Yt0 ; T8bM8(n cp>#K2 &~ǰ. z`w C!mBysDh.! B\teAbYȂN 8|B 9{h:佒@ə2⁃!HW %q0ϸNv dPZ+#Mbтb0;N`9Ҋw( cְ-RМ-,Pwh@A#aMDs Xmc7?M87p0irPB*9~T$.aSLqE*. ($v5(9+ 7LŁ lm .`)W&&AZt _A\11DBvІ#9~YJV2~p}'\bEX<D"Ai(`p6ptlZEDboPd'fhiX/(" x1fb}2Bs$VTs5>w~;P)P)e@k B \D?;xlG`N` 8jrJTM00_֊rn*U b:!Ata(䐅+A^ $7!\XbS!Y^ B'Xv'?'E$$"_'s%&O$+ r%⸁8?@b [Z4LاҐvKAxXEIZޤL|n,"uP8#`œp̶8fN`tM?al8cu`]oYӠP`56a /`r0̫MJ9Qm"ù1K<Y<0'Ë,`! 7( !F!%Tk+%b!uN0P.֑)S1#id?2,*32Pt@,,r--hEf%0-@ U p`N$#3&+"'xkz^i"d2Ƥf۞!|A mApdT [Fyl TFAÕt DTᲨ+ x}7 \1WeB&6%b.bt}\82iHqcb,7A<O<BX|T'02`1ف$$Ll /e`^\wZ *wi(y -q`|aB@h䕕`*(p F BP 7AXN]>ATeN^J( d< <+ BUX7O9AGƱ5O J%?ÆܟF.,Zr-\IhV\F`[%4|2TĎV@)Ik-I@) TP ^ M```qɭ^-@,òA.DXPCdކHB$88FD-TNxqέ!JBZD( lM  AVƱf`KѠл4ā$2C1HfAR @I`DI.jeE$A ɜtXd̍Yb,4P\q ͭ@A-ּ< `Iba@$=JT< JhJ $|X aDݮ&%la 7l7l!J HD` tHԂ5dXA"NBKWA`=ā( D$n2_h5K8) BD]C01.!I`at>WȘ<[: IFH/L.`<]Ն"ف$(I%HЊt#bY1(xE  %xB>QHħAJPC(PC*xF oܩ>F)qdX-/؛,xP-C% `@ @}CX5@D<B,1K)ĂP1 hXL.MGct4dH\L Y0B?|HQpY(bI fDA.1PPƟy_H]C-Ȃf@l& $}NDW(\B(sH PdnJqN[!!qN"I픘+<Ђ7AL8TCYA& CL%~ (L$SX\h)nȭ~.ق\d P_ɟ&)2qEHbk@LpS"$HDF?4R 4ͱ~4KB10'G%(Fbhj~q ʧAAA8<,H6mr,WH,xN@·X? xCwC/`hu!C@òE}Ą71AHĜIG-uOW0Ȭnȓ(/ A-C@, Ipň*J "Y6B10Mx]^ְd/Ƭ+()獇J`[!] `^LGK'J,B!rH[NNo0' dX唛FbNxcXN&l+(2JClʀl%?P $A,$8$-lON$CCG/VȬ,HH0PH%kȄ@"\Έ(PKtLZlZc-K(cO1gcןd.HFbtҦ1.J!Ğ X`ԉ4poRiB8&Fl&r``NtK$U+(j9&#)D}(D֤96j -+AI@Vl$쟀24 :'HPNJCܢ 5AULjC AU$i 0 GM*)7+p7pCD>5 p>T\:`L{!J C_-?)5$ऱwlN!5OJGW:4u%BÚM@K{WjD|N C A \/@]L(S)+,!Y]N0`K]`-n-_iDØbś=5n7TRǰ-ɀøJt G `L)L#, `Hs0&63AEYq+5s %XB`ڮE(-(PL9%L Bh,XNmhMLG:rj&Lcw6Jp @96Uq3((|* 8jD}.@7D]yV4$ >KX7_4H勽DuuY\9+VFT?) DL[*8:K1+’Z۔MFB|ga:oJ`*)#La[B?խS>؂4@` 贊BhA>HvvX\PgD>"AA>P\41 E%uXJܕm⚵e)+b/0ܶ\^Dz? CTXjN K\C5QKaB10Iq$eWs@i`, -ءy T~ޅT& O=n'cREASo|r<6H@/Lg7A@k@aɍ% , (xh[@KX8X-j+v\b`pYLid<4 KpԸF;3)УG9FwZs(; TϦ+MԐQ:T#h] `zi#0/_%.Ƙ1(FJg):b 0GZ%[;6ЀxK=;s[#9灶,`MyR@0k;j O l}0`pӤO&7ǁBo:N=SB)$eyH!^e$Ƞ4Z L0 ..p&RJfK.x))w:Gxd1ljZLt/rPlk0XqqMѺ?,L"yk GFqr* RwH-`{]@C\$(R<塣w#"&JLʘUb z*i 70 ˾.Kre@\@ Ca 0 ` P&jUDes00p2 L)縰,VHr:3,^Iфd >b|! pYESx,X`p-R+yݳ:b0sgup8-`ã-JѨY#=jďyV?[+&IE ф- .QB7Nr"!W,:ԁ"t2SfR3K\Ba4v@!`piX@dȁ :A# P gb͢)4at3A}g,q:>0m!b[tFRD =@H*!zz&HB..U*ExA}B>iFn<I ShHHm*S1T9. Pں&5qʈSp@!uyA0tL`2j2 3N`A܀ 3 hhLa3)])r] AE nCS<30ܮ|+\adLoc  @K$m+(}= }C!jdz2E$$_uEʡdg~]&j %TG*e*T~ 6:g H)Dw'z5R&$(:)dfb"b+Ja p!%k/pG 1)naɱ2`6RC55RR~XAV mFg$.)8@^on :6!6ag8Bc:ˎ=lnhtJ"!P#肠E>b -\'Cc D'<(0B>DB"&C|4$b"&I(Ri":&*P)('ԎH*~"KMAnTL '' g Xp2\p2H# %5,`A:ZcWl5lvmX@ pUCql9n8c`rFN2 j'lA3=dMqR P d#\. ȯ&]jkTb-*"$̯cABm$j"(A'ngIN1&Dd*΁\L @𫔮"E~b q)!(=Q5҉.7R`Wmz`Vjt8`ACqv;e!= A5‚Bq"f X @E#dC#6lAV-DcAbdm `u$)p_B"(ܧ{d݋+Bd&D""#w5B&"Jf'L1svFtDk N`Il" ]P%@kRrM@:/)! #33"\02o 34@9I#*= s'z *vBb nd@6l1)8S%RcpAMgFvb"jVfBan`v }2TMJ*&6.Q8+HG)&K)"1 @/Z,>BHEzhJ(y'@& L*i% 2ĩASavB69nA,a,-56hjX@~, rF# cC# YNb`?.VLФO !"" GqFE9ӪI)ޏ"tS$[|t׺'.J҅7)bR#'7!65EVF"NqTb418 iıȓi4i9QD2> R! @XRSjsfctFvASv 4B3 e9eR5:Q#``(?ɡ,b pgs9b;\E: @T!G&.cd/F%6(0CJuXIBv!&I@Cs"2N)BB77E5ƇVC|9rϡL#iie2 = l'NQ!>J@Ay}c83(MR69\e\>` ,~Zu(.E8xB`r 6Aj/nkØ|Tn`"hIT{*%^zK/Xh K5=_BZJd'vo?dB,kw"EP{jI)LBh ޶ހ!  C*C4"?`A s,@R233B  )q9R8Cq8vU0;nϊpv \%f!sc%8LW%hF[Ip z8hx&Uv¨ iKIOFmA&pF8r'b]a`^a b(bgƂN$NL3YNp ba] V#3Q@P R aF N!@- kR ,!a|>aoaox #c{-0jC0}r@aV'2${'dO!$|@MPCc.a VCi|B܏bdtF?Bوd)⤗aIrI΅pd۠ v=z52= qb ٚr ZXaR ,SP#[V/=\Q z]VE#<#;2ax*@Ѵ }4| br.g M*JJ`EXgu>(CfxA`6B#DVJ'G`)n I d"zĂNPl젮!IႫQfa ˚;zQ1UW$ux`&-6,2/Nj74Šo,,{Ìw <iz .[oسSD`Alr@Xk]h&{ #&n§,B ؊+Q|BtsԔ)`B@օ|(\B.R񒈜G q@bfT1DN"`dpj,; ' 2&`>:b"$[:BX.+ z6:p` N<)iofTqrX 3d\#i| T%͊A !$[\`L`* νEЁX5B{nDZ8+ĤL9c} E{G/(ro@0b2s e=6` 5h L"#S,A te32cjYןRâveC(APmAV!^G# rmBu5>uZɗg`+DܾvC"UW@qNbx,y\Os%+lbFRX8(Q&LI@-3 @,e2JAV `H`Ö떫i60}?ڴ5fpO ) _(y`i1BBg0L`@ )ͷ(E:L5T2F",6=b688~3 P`^ (D 8 4EBp|@0@aoyTDcG(Fƥ"RH+ j@Y@ 2^K`Pg'FcHNk"1IgAx^}l&3$>ͥIK'taP8a yAd`9*1 C*kl| n` K: ! ht⒄"P0L! ŬHċ˪F&-;q\Lq1 VIXB|AE=s,"RcsD1 v:<[ 6 tAs)/(lF% W$ 8k b P8a(SSN-R"GhzqT# $a~p*1gK@v#gwdB@Z4.@O"`"E 1EH"1@Dv(R\q.paER. :t 9vᣍQ87.9F^`0f) - < r.8*Gq|(PSLj n@M`50 =lj6^" +Oa00H H2VaJ4Aj9@K8>,xhSI.!ل&5 گ.)!pnE|@jD|1f3l!Q(+ZhF\sF6(|'|U@r [( N9rká0c4=Lg0AfPV84A :47cS!͂N+xb˝.@X;IH}6s+WhmP97ZqRZ@䈑0NFvH>R IG3z%rJe; xL\Xq9r:*A*4l-uJvA9MPdg(>9Z Q YUZWbwA Hc ;X0nұ4ry%2GZC{.;Is(9J\:)Դ7VDh1x0R}C/8DdRu܊|x :\8zԃa }06(S(صCItOFKX 5H@h `XES9pKm pm@@ \߃botqX|AV}whA QTb24R046 YÀ `N@Nb!\Q_,$9l$8cZDF;,vp7A`PFQ- N PF{=rfsS /q o veFO$ 0 @ #GšSd9<]`p&)ɩsgAQ& P0>PcLWjI V0 1-izLqK?@رH%Z$ssK&W@ڗ#&I;xtk?z2 Q +`0 X!!ZNOu;f*%"h U*F42I6u04L-Qycp m*9@8e,gop?HQϐ*CkГ\2$cp$r7qggSGd P3} P1 YNIJYQ !݊QI;@I־jr0P a@D3 k `EICh%;{AJҶV>1CCQ `Rˍ vW9j 5Wa-w,Z%}Q2M[3DYR2 <}?TWp    * PF='J`2kt^@A ] l/EbNЏ 6Gl<" ΤY%Mk4&{l3QCXIN@PmY p* ӦfAQGa|87ժ0`fP zø⾸ 3(ؠĊ Rm~ PKR 2џ?bAx7o`[bG;zS\R%jRbxѨĈ>gKq{YܸنcmPL0`39{Th5HB 1  @&(]DF BK :CWhW ͠2~A4`Hjj%E3JHƀJ.'8 :K6'a.h1-ô0) 17 .3h#@5T)1hd :GslM-d#FI V-x@ --r x>4KBtH#KؐoZ1s%yj j_za!) s#]ҷEd/2\9dd&le |)M`J2M B 0*hY1㝃Y@!QD&DSO;N2//0b`9H (/ o`he0opAa0.0_~[V>#Nm b(XYHzvZ-hw-Y"O>#9ykLI^6{Wa0,V&4afRț>X|^cDX< ͣyNɁ`'r$ tFQ^(qmhC&HIȒB-qP*hPDr*dChwb 8$Eن`)lwZ5ācDR7`H7c$M 2q A/Gh2Au6 7a 8gdXBt2 ] "E1$Z :n;bppZ$O\#!%+]ΑH 2!V{FCkG C CPG*p2P ѸdWȢ+8$l Prf.{DH`ڄ$AYf*DQ5S@B0u.l7Ѓf~ +F10W.M^(c|qj֊z%c2'E 'dR<8~Ux/LLD9JѺb`2Ds@&1I (XG!U\ 3Y77Lb$&ӪR#x ?HAk|Jm$' "܄ e@*P$)+ɇAb合wb Bt!.!="";9Te b co%!"q0S8< S8*(t&`0A [kW߀&qP~3~t<"q0T1#bT# aҋak4F',ES"S>:0IKMv^ Κr #x< $0,aceLRQ>P)D3=#4T610 |lE/> "+Vq Ȝxz4Vq!SmKt^lLcR /.uի!Hmg \1u8 ,!aH^ŗ510s' ҭzہFӎ32?`46XE/0d1D `\TVN$EQ 3z R0;>Qa>CORmhB{0QE k()yc |721+cа҅Id bL 2X@:xP|Rv5PGe9odt*D 5Aա}7[2~$Onz& !T$]@]086xcI #Һ 0ac:)( 89Ѐ@ ]21D 0D@>zPSp~n. iE );_>@/( 1z(IZx, V@| 81`abE3j#2Rx22 D9BO2##xǯ)J-dW zg1Kåzi8nq*?DІI); H9>:`n(2KDs(>zKP肫P"; b5  KCSz2 x }" Fn~2U*X؄M8A.q%Ѥ KܠU`I! 9؈S8 IU!£?)P1J7҃)5<3pc(z(s.VۢF |"ͩg) >dXsPo Jh>>bD D}ı܀(HK91XU'0ʖEȇ.pͣrt p h-umxЇ *ME{yr XV@ $Jxr,`oa91*WP Y]48M(yT ɍ.1Ɂ K/!![ˮ[1ezK0c' I}( # қTs7#\9KKa*0 9 5*;` 9T~m)33Y>ٵS``APSIjH< Y/cQ!xţ7]B '4 S*6@Z(򊣠p8%<=؄q-@ _d#ت:c2j 罜n xiXwĐp!#xpkCOl  c)21ö1Bzᶙ8[#:϶Mm(DslAIgFh! CgH#w֧9ex/` ȇs9xx*9dBiٜGG0)n2:vϣ$5|>i}wXd{8Ib K>dQHx0Xx:hn)(>S:kL9OP)_nZ Ӧ7 N8Of&7H1c ;@J<|OO}UB m{quD0xw s&<([pK +p@[蘺&43 Tm 6h h.m@C38'CsMT k@XœOX#`be驙@ޘޞ ]Ӂ8S!*6BYPBqAY԰v60oHZ^fB2= ?K`…~ ' -dh@ʋ%anf+~қ "~ Rz0[(HHMb X&0,T8@i"NO3N3cp d; ( pݳ `]H,HX4 FH%TUhcIU()|Ҁ$( X`z/)K_"9V@7)sHr#wу<T-(*@U16eȍ# 2%  z7#/s "wX~.89h&\ ޘ )H$`S cʥ'2u Kh 2M68[@؛Yc &Flr;$# quB4BU!L 9s\p@+0? h"D'ѸVr|jeH9FX2m9 (\{\.Ǎ<=+vc $Bq!@o8ieorBqF!c x0*FZŽT3(`d0o/& ^o]TKUL)FnU1V0 `@rӦ~.nP8f'p0 (~ nzeճ\<Q넙 c\$Tw`DEa`Ћc`4 8R_RH,P)|827 E`|BF']'tCk%RFLd \$GD$((ADv$=\Q1.7RYc7l\5uJEXI+@^T@ظ@LpUg(V1FyLeT1rQiPǕr\Y]tKu< FP*E\+?@xZXc&.pQTĜSGzޜq_~8JeNuu:>aqᅧqo&-ZdV+`$HYd:^tZ|#% F 瀡MTvDK#K 7tԊea i1ZbGlTb}J(RҠa \*W\o35a0ϧ؞p١J|yѴ<. q hJN$5ECuog' 8PB͚^{Ŗ3 1<#'N8}غt{6h{*LJ5$1= u'M_r N(X$#*V&*`}>`$Ȯ4iR8qb. G"!p5lL`tE(E8 |} 1Lg8dDK y[`q`%HA'3/8_Ġ DӊX$iΦH~0\bD5.T].R)*# ޠH(qE$,ZpxC7 ."C0 iH:Kd8. t.H@,E@:`'pˋ@ k%uJIMe}]rJ蒖7Z(AW| [B9dx!X=N &Pt"p#ND C9IXb VqSbr(ik!S)^HaS/uEAD$i[HGFrN04Xa7ЊhKd)*zH?Vahd$`%$!t5!b &Z0B'8*> }x|"U4 QKxQep)8B%@b 0$0ZT7ch*bp,dцbg`U:xt .‚O0@FЈ\[)# x'A !'2-jC0ȕx0a@p`d f&Ϟ®Du# 6"d?0;JmZm/8-d`(pRE5[-I];2QZyj# x'17@[pEC@)KdqBPF0[°s8e`7p0gq  A ʸB^L͛.1# _@,cFn е5`.YJәȝ"13A +ߨBڸMeb0q9r +SЃG h}</G4cl.!KI7'|)g`]?q\v=tR%Pb@XIBWq/m Ӈ>M־Mb`ੌ0dG#(" рpnQX pKYS\k./2hb$m׮C!t/}@CIR]W@r\iĀǙETq7 é:x3FĘuP @Y¾װ$`B^ au =L8OBYHhL %HpZh YȚV9 -p]<@(%tSD@ F\ ; C,tAR `A ]))0P5tA9t d }fЂc |%L!T,ȁQhdg%I$6( 50E<B``h$h[ehNx@upqPeL-,lhLjTbdqX#\hƮ"p’H%l@1%tD|L1QKzEؑ-H` 0@@C 3JJx{%T9Q1l  ]2Jbya,T5ЪE-E K EE؊g NJTH֥1(L̀AQ8MA H>H-@ gR.Q@mG ${x-` l0Er EC#P)L pۈXb j–+\D+@TV^0 0hG TL YWWhډ d}Eݦq@en=rP@?A*T)b70Nh?!`t2"FE F8T_Bմr)'ЏEyJlB1`g@@VVP`8hE1T RERKR-F<4aH)v//''q 2TnīD>CłT c\(XDhĩ J_@"8]C/^A/J )k6\JhV#~\ANT!G5~bC\Ja 20n E" 8XԬ[; -tU @eXs_0 Ȑ ..Q5$~~GP_$" ]3p (G8(<(l h5LDXDH|0'Ge +FlBJWNxKp[0+$2H_E@+,T,48k̈́AWqK`AxحJTO% O/5#B)2LFzMч%,?`BVH^_shw l T`Hy`H`JdJo\Du *h@>@x(A/§®zK (EĂ|Ԉ0D諠VoPs[UC J (t5K"yuP/B\8JT B(:C1BaĂ(O@"5C#j5 z>`@a^>)tTnI%ŌC8'Hc` * :̋>h[C 0q(8EH1Q4iu'AG2HԈCvE0U/ uA2L?8x*/8kBmBw WU0pWȂ6EuWe](d}E A%ٚ2%$H锲n&Ca)#?E&E'6G$y$ .2D=#ŘEZ[a5(А&(@U:u_4:T UB5G (6@@.V(@*&J!Bt~B;"](ԓx F^)5TC/oe8\0q|e쁼LJG3"[^y; $'A)U (cQסּ,EFwWD8~;4aWD3NlMg u}t h5 $:ɐ-z]  @B»|]00 Yxdx'7IX-v#K?z@[8XGSk~e;HۛXRZ8.a2V$o(/,(UB(Vs% $BȂa ,f;:Ze!H8{X5Icbŏaa 3Rh4LZP@IѬGA)F;@ ( $JHhQmda~Q B'rɵ4  Xi$hFQ"Z#r(iV擸^\r)`j`̕9"6ڠ 2&t˖3\"8gzV> ~(;b # qn b,0h)(zǢyexvHiLo)0V95VT@蓡 ) DLy BѵQ'7xOVdC(kvΐ0(pEf 005RȏɡMZ65%H.ȅ)\7ZHa(bب}lK*K4#*kSF-B(ض^aa@xO5?ک.) Îc?Z.L"&UX`aF4|EaavX 1ꥎ~P)"5Tę^!GH׬eAW~+F4$䊰F|pP+d1d)%)ۚRY*زdWCY(g=7B; E@>BS r-n@|0M(8[Dѯ.H7a67|WuKւs pgkE =CMե4;E.ʴ$ZTM({,HB#A b= E8 VG))Q)Hs6؀-4@z5 VHz(R$ [A Q heh`P \z}fb,!`ldwгx!r3(x42kiP @8Tc ;. }$p>8g@d (h3leЄ>hu]zO%igЊCe3dwps :|:it81E2!t!P+|yME#U dPR !A/pR# E 48%# w!KlF8%-r7=t$FuO3\MHoKo*f BHI) }K "8Ƞ:sp0 7vDB P@RE* l`DUxvV4.M;@*(bOE)>bj$L&CL+Z̃e>A  " F3P"IAi}5NqYE,cD/R&_ߞkR$j!G8jza@GrKB!-ý-)LMƎ"B<8Gz"ec|O((s|L%r$ <9 rPj$WOWR$>⊐O1l`#H+ ,Ag綌3DLvNoXa   aneXF4*_>B) z5 ,lbˌ@n4LA@z AgҬ/|l&*ɒZfZDH Bk:a@,60̩*E'F8 #e+z>BΆ), &l `%X %nB-tf"EF"Flgkޠ!| `1.(K$@]0\Aa'lOn />ENK)\ l(>@g>"20\0| #. Mt(@$ܨC~ dq*"zCH6@ߐF2| T'ml`xED+u(,,(5`Ba.ؠz0 p'( ivA~ r.}&z, nk,lb7>*XA+R'` ZOnN>ޒ)dfml+153!4B>}4iat!@un+ irr1't FRj /2F#2@!Erj"6bv"s)3 (E .@RC#!^TcpI:Ƅ" b,h6;@<'x))\`DW4#6eNd\KbNh\OрՂ @BzaP( $@wVN@<6DC?B( Dcbza Q& GA f@  XS"!47-iaH@tFXAHVa*!8rHTDVhGx.xaeZab)-P",!8\@' V`B@EN#¢$qXF]|jN3N X 'hS >b= >K@!p؁‚d =G 8a&adFHi{j`~zZ++\`R]D-\L r}<Nʟn4 :pDHl)(bp&*,xxpRA+p& ZN Ɋ,Ɩn. Q44"RD"8tY5hbO-LJualX`VpzqpnP!ihW"&puyo'B3XN`~?(`vv`aNd(r  R-zR!1\(b#f@Nε`{a'@X~va,T )d@&(ֱʖMKAxAtʡX|>bRB`n"mR4ƘL>Zq&؂+&Jf l"cx`VA!|\!P qeOܐRbO|vdz!|!d$\rD*/>bu v|]'hAi=" nG6HHFǨsgyʁ``(br'@*djc->0`Bg N _4 A+(ּ&9''(JJJGbNt3r,"UҟCF$Eѧ 5?b;&`uګd.B$ \alVP),(FXJOa=XH23 ˌlhOa_(DqG'Xn:v:?"G ntH( @,&-ހRD r`v(>upB&ghiA j d ( aZ)(̥ɼ dD D*dnѴEsW`GXf }F! lsָء-}{"A.@8>kN-s^JC@E)'.ʺ-`a.0 dx/D@|3!Z+rr &Wl$եЄ#VHqb LA$ y{-h(@dA}'\.ԔCx%zA Z[6` _(Vp`u_sbkjW.:p|rYGn& @,A$C\ lsf(|3\cxg.Mz* D)bwQZ8@{zdhas?B "/\-Ҵ⼺~HJE Zs*(C xXm桟d>K(xʈ`5ƴހ,s%$A&#Ȝj1"zEQ",~Pw:o"ƈ#pA1c* dAF pL"9FgXp0G@ 0S ېF<Oaq@(T !D%-HB,mB"B<= "d x;mؠ%@ axa``Iw] HD"@- $k`E\$oćAF|iEXAtPZQAwDLza8GHW#[n7UDFKV0@U X-àhBtŀ&dCUuGp$0hIqɅ e4qBPTf0#{R k&HCDmm8x ꖞ>Pn-Fz?> C3VA! bPy>lhΫn!7/a л BiJd "DD~"8m  dpfBIH u) `¯ԩ7(jgy6,+ϸ$@t *pKarIHف] e!$ K RlÜa$ Ĭ*0,(^ }D5tADIR!~(7ت-`@53- 0Cv~ay{f, !$ #Y{qE?ΰ*'hw9IK;Pꉿ! axb XH` #xt@*st= =!0$ ۂ`c1Pwa*gP@ ?@*ei1mR2 =pxwp%X;xoC%@1`9S'&@F$ Y~u` /a ( =VC7Fts< 6'!J 3J TWK;O!(d8AC wr" YQB"1\1juJ -P^ lЉ.pi &bDJC-"s$G V&9 "@q@jO%:Q+:A  7>!$+gIS CF$W ܷ.Ak6r i$qJ`?N {QKâ b5KS9' q, 0"rG  EUP3 ZW0"-Qv !5Βa 0 . l1@1 ՠ$9EP S853tKk0, P^`W$!JuޱˑЁB 蠦 1rBs' 2 : P'(j } m0 4tiO(C r` WcQ%&W=1p pax,OG]$!0 I0 c!z2X`YD/" =υ`3=N[(x䗫z60xQ=CUy= qEBG}bs0e \ '1!AQTrl02 +f1"$f!tFP1 ¢!M+J;p"ӰRMp ]3 ZRsw b)*(Km@5 )?a_6g໳2`6 yiPMrB[ (Tp (r2)T bjPt  $a3, "ipPuf" "π%i(P Uޑ1)0_?fe?xLU`Bv)6*ma0) e6 {".`D ' c!0u@9zb Y0 ktĥIW0=U[3xsf$Jg$ 8  $f VYiac=A 7Uw88'xp?b֧GOp`d!AIS !nrEIA P?E r09XDH͔ YiBuF Mp@g@PduP+]|Ka˱CsS"@^0yN!Ӥ ]RԐ\?r2@i p9 ,%7qiUX1p !!W/53` {¤&ij 6V*D [jz^έ?+  Дb B ˃,BpԶ*,$|F<"9 WKb5I)`1JKm]55C ހ` z & ±#t9` |$xܼEx L~$I].4 >LQ KAs(VM86^z.@ &|YYdk]Abjb'X$T@oeG:tdϘaX;SZz xYhM5|zBsKsm<̺j##`؋| YA[p.oRy7@zC: C^"F9Zр/ Иj;#::pB(@Rp6h%نn(yr)((bx`0"#c2 <^6;p9 SJ)-4DK W8?((觎XSm9hQ?6;&]\g4N((6Qd+zQ#B#.iH:\#>Z*y頹V:~Z!& a>r<):bJ$~BW/.lMJɒ5"%kOG@/LفR- }k 2хa` qw$A? =,zIJ)T/~Ff/_!@ &= '| `6PoHG6T Dqa 0M6iAw} '2EBBD) a H,h K0R#<={\Iʼn%0  =r GaEDA8xlxxT.d&(*bQA`.^uVвbTLIV0́u}sPhC{! #7/r1J  Xu`LR!ʼn+!T"'AN:x|CFxP\ټZ*cMݴ9${yD?CpKXvJ'.aU(KФGD `r-BAKY'kA˧G0@<"$L~ zdv:"\$XEc;vk"#R=]'{Oj<"^ 6|Dp:x>a.߻F"8!@+C*fМdC+rnHs ` |egDD`6h Kp^I0P'=̔0#ĨxJ,tɖ \7~fdm :A{* kӵ~PQ.zB 8XS 0?? hDpM`p y *BH栅>P>p2jh,.{!F#806A>8#@(h>n[ %;Ф3:pG4YZQH@05518:?2{Reh4 ~P@S;3̜Hx|c I#H `U¥SdP9Wq`#ЅTPs!40p *g`;) Q ( W5}$aIx/Qh 8 :>庈Xl5*% NkE DZ I@$>2@FS(P]^ 4)hبp1hŋPp/J 郢S(7hC6$;X%@>y:!)N*P!aT9̏&*P;V9M:G yH(/jOثЇSXK7( `٤gCD(q;8#ԕҫHo`p{5=m V@h?0{Ёav)N+|ʪ-PXL ( 2P 3KႴ vy\F\Q0 ABӰх7`0"| xK`,b"E ,v#'B|1 `F3##4!S]@1(FHFpX+LPH_p@bx/`Q !XD1&eH؟۶Pda~g V8>8``! +c*:!:vi7jeE U)1Ôd/W`7xxAv{Tz!W29腒T09/8#hPa g9$ 3<"}**Rz1\ޓ>P{s${l3D8 9YVV` F1@bꂾ#^̸E\EW}9PiW @@Gp:;Ũ"E*qh< \R 苋 :l7/L (8K<`P‹hK8C-Sx0`wR *6b`+.1(H" e0.Ȏ깈7h;@/XT1zF>#M/T1N0O SX5 .XɇwZJIȇ_~Pjxv#c8 p@G9 P*V3 , A[Z3M #(\&fی~BRv;M(ٍ8I>ZU P lda 9曃PQTDM:H |)IoiE+_>:} 4lh.<{ `UhJV${ -QlgiF:& MAmrM0kl@[)`غđ `JgXJsHl6qoA>Jm^G0T$3@o$!Hc7Dr8$0* g p%T} = x`gH@vĆP9xЅvNrLpiZ| q6ɂ465<#W_3qa&E9@к 1в0 mF Цbek`JFD-(>( 3 F # RU`a"7ljav7Io` n`8kf F0U ٧3Faqfi/b(z%N6uJ2r.S6#Ay7AXLep 0&0SqTsLnU e! Y&*%fTPC6D,Pvh$ :6$2`%(V U@h@?3?0 I UI }<`J ;v?'rdJ1K1ODd_4P Tp&.nf&F 725!{;Pl0 HQ5$AxA"a^mS!  @1 cua%DK sOX4KG7nITrfa JәQIT YG d'25n8fZfgI` *"$'NUH~`C~YҔ1=eY) C%e0SIu\sE7E1Occ+Pat׹!3 aҙЙ;@lcH[kDUu)6n RJd $'`! 90Ԅ8!VyJ7p1T07KC7%0 pOZGO,$F0!o *ԁ<3 x#j;ZIP p FG2;` ?Z⥎ B"7pO&cYʐc"45'$ TXȐt(B=U Y70@ z!& -up;+XѣsmGwń73:1ʓ1$u9@Cb/ ]x* B3 Y7qO0KvGЅ $@S`0& tl l@lU7@|Ơ tLqFèF JY3Z.c g P`4 VQ2D`>LE)8s}*/P35qQcsiXײA^ p & `Edy'iSȠp"lv0s(iոLu` |zP "wEs @P 30q 0^1 A| E|/@ 0w@4O!Ou S 4&ѹ{A# <ת6 p|o7?1ZHԡ0*Ppd  iPE wT( `  X P ° \d$Cb =wr(ANľ~ڰd Ph0X笀dVE糶|pIeb G5U4 1Ffp `BT'a;32x@rKÏ, ;zI;|>L/_/qrHDe;=E0=L`X'A >t#L&aAz`@"(HaLt fǾwpz~4cJ:f^pX$u>8I> \q[ ȥu@7g><:eePн] &23=굫z$Y ลpn>msJ%E7n7, }T@za `L֑ A3 ![g # up# l  4 % <7>|`9 Ala`<i" c0.# O9F̙ۀldc30Z9'F}0Oi3@Q dEQNZUYn8YY;u2x0nk=sMD%N#=4(LT4x0bT ]ߎfL98m@@eI@TPv +5x+Q@!mˮ(.0Q#~B 7xxb S.@ d,$@CE#+JZ1# Π# I `hN LxKcbZl ߀F("[, ;S ,)uU)X\0ċF.rR-WW.c#Zd' 3cm8K$`6bqӌo0 A.B3I: " 13@w=tCFKL8-6bLኅUK5dJe .b?AIwE[x ѨrPc *%Dr+4\S(9ƢV3EDt>\McEj2Hfê@&8`##kJN;2Dgpvh<\_R"Mc'yuֱJ+HO}(f PSRu}bbضP(1>Xu(8cL5Å (oX P#8C̳R Dex)tlPY ѱR$|J'ƴ/&Df9C)؃-=pP+F!NKXb3#Nq`.0iv%%4vb S()vc9p7s%VrG;NE  @"" O@1Vd'8M+2`^Rla=DQB LeBզjyO"fҭ9)Trf@Ԙa94>ULQBbi"GZ=>E< $@iFRj*zCv dפlc8so|3O6K2H5BtU0^E hZSBw^Z75b )@QА='LD\C# YV &o)]TyN gco#Nj DAsk @Z`>#4 2j46ϏP5 à DRbvJvo:&t1AU~W1yb|"?#6:IkIl%,ݰ WCCG0Fo-R.Ջy|$q>NBZXXlx鐞?j>R1aءAc@GVX[ɩ&2-Q\^F.PBt(UpH.p2"`zx7#oہKgpwDI3P$xp'[ei#$}!!Ek9 %HY>)lWW%{n j5 l vIfZPz`V`@p\1Ys?hU!-SJ= h0V:*Rg6 9mfPaX_v~󸈊R-ɘ-mWa ["'ۜ9荸 xW;1ZP{9`#мOx.-K8h˚(16dg0,iYhzlwo 7 A\!vY˝ = D+ǞwxRqKm-$qD 5' QR;0O*6|3`Μ#֎!Ĉڱco h78#9'[$" 6a A#:%`B*!CjMfuC D%-1 ^-k,ڴjFpE\.^z@d֯Yva d HC bX2h}c3 -D6@o-H4# JE<F # 2.nR`@`etGr``BL$ah0"ndq L8hģ _SNYI X(\aD.QjV #1lx"Yʨ;kH;Dv1 K@F ďbCZd0 Bxȼ QC@jijQD lWBL 1D}QK?<ei) O?5Yd͞G= qe C8G .r+$jG4'*}?\W3L>\D$?t j"",vBR.Iʃ-PA@͜[Q m, 49+qA  fb;ID1pa-N@z $#(|(J,b;t̉ߐC+v @0ҏQ}EF`j[%90RaO|b56Y:%T2k 諲' & $ !ɤD]Z Zob< XuB.C8o=' ._9aR`qk:?݈p x70`cEX4YϾ=$"0 @f dgG>ZgFH8#(%8Ȏ )C$ a}\B, %L%T-aRS"h*2-A-2vSp@ˋV:lFo` `D0а⛇pa%ぉ=8)p9Ic_ sv06DSv/!!@A栒9!3D;IQRT y =@!ey@悵XLPfz҇2|qp´߆V")XD< 6|cof* &5=pyK\AeuϏpB.އᢆa=Z4T\<5-qA0B=2 rh֐{JHt W{B E u$ SZ (4o.Vҍ,#҄&eBP Ő/!@!;Za -@z'qI(/a$c~2!v7uLť \xkF9Pf" Ӑٲv@2Z"Z$ѫI|@r_qy85 p0!%7Z D2T00ADl|d s#-" \1fl׉C Mb<,Ƅ cO|!S.OCJ EfKy"Zx8 N#M{(;4Z+d]c@>U `"+@XPcrrRB8, !8r&joXi&Cp(@ *@329?H~Ąxe7x5a|"h-,xKp wk!gG gԡ'͢#g1&Q:tZk0BgD4H>{z6"$(=H 2W"PM *ٍ[YP܈_Y.C]CA Q K`BD (00¿\ƥ4hA)􆄉<+֐dI^YK%|Ntrf@9prD"%dϏ)Y,~\ODnCar!$2`CB= <hdBڔMP`P*d PY&G1?AARفɔBV / AX`AC9X74 Q%0LKA E1L%B1-U>l&X_ a^ց߳]ܐEP;<ڬ;B4thWa f`% 0b0 jHH?A'gnH#<\ ƂUE,bR_ŋ=+ziD|SJʱ*K"NA` !Fl;BeŸq`']K>:H^]@WZhA\APYA) rgBqYE9XOH4,@4 c1D@DKJC\0=1L-ȁLJILmՖ6Pj;mDDb!m " .d";'I$7ͅ [d,+܃)Ȁ)ŠCË4ҊY$QA+ D e=DF@hÿ0Ca^)X%h鱙Q,,hØ^ b Lat-M1尅kLgXVD|A#eQ@b8VC @]hA)`_CF3N<؜Gqd@3opch )Apca,^A|3]I:9a+XO B^4#hCM\\_T#WBVCL.txB6!(A;< j$ p *3PY-0h߀AF<ȵ4@ h!Fj#8  .ݰ.(5 ' Oȁ%xU3g :ׇ9==.>48Qn\B#<dvt [BMc tD4&쪅;Qxx  010 bl^ƪ=BA  ?iKx<s+l8WK.#Ȱg|id]-v2xO5]h54b,4bN{g3BH(B4ľ!a9Z$-C !M S}K,ׄHHM'|IذaӘ0Xj7H֮k_q`\쾰;p @İ8SdL%~.uqSz?AC]I* BSF?(RFT!vrSL@gḱGmN1vVd7%݀%BCX[ءD"5]yxd5M~"4L `{P*$ޏF+v݈hD?BaD;TI+oxUxsI 3 C?@0BdɁ>e`mvCPYL+t VxxC!S@#5ìf@4=TC@!Mh*h+)Q*.Y F|CQR 3k .=A 5$vyL1hp0b "^ `܀B2BbC8>YA݌1+c>0bbD)BհV-kaHK 3 J[*9DdqXwITb;y+&z"a]  @&<1ZT% q+hiZ -S`M'a[]yN4ef%.Z; 届TT0+#U܆Hh0z+22h@F&yܰ(U^O@Yv0.#q7Z6tGLn |pXF'5"w.r9vҟ>.(Dl c#SQ ` 'b{"n5!y[XN-MD#T"Rh"XB$PTz(D6-SAAVRDqP.P>AN@k< smvpA$+9H ,!)0q as@ .J.hKkxI ( @ 2r, ;0IJu*"D C ,}%Vm?<vЃ6&b LLahT@. Њ FgJ#@0X ?#r =#Eum|Js)[8 "kEslae %7(HI2Ҝ^$cd3HDHja!a R[ TD p?A`iP8* "bUiP)2b'pKA爊q"6Fb\46:%,F S)ܠklFCV|qV2$Rݴ9 Cӟ'aJI|;.d9BX%CRń)bUoO3" @$ OsDd`.4qE P,D iO Z)>WoCBcS Q `(4ڊ$ ][`q6b҅Hvk7d,!8}7)8]%'\Vy'҅N(@%N7+ YW1V8*"Gz p",<~P Qn:2t/)).`5A|f\" VP VA9abw?;w@\5P&M]p'@]`X 6%Wk] Јt+ x 940Jwj 0ȼ[XOCMČ]2[c{E(0a_.`Bh,p?SC(k'h9  /E#N8uXO%@V'RP8.G:!l E١Ճ_/ |Z@}3)v7 \'d&qy͏:l])Ҽ)2'Za)A&<)F @yP y ADctar@Ʒnlc ۨ8Ǒv"r4"*_DS!"ު C܁)tA%.Z䐌" K4eA."U"!.BAɠ a6 JA|iX"ZA{ ,hF"0BwqCBM&7\J"ol`j xN#.R@!JBg`R`Rm6f@cba/F" TrZ"4n.f  ʁ)CB"+"d !TA#d.@N2 l F"h`6C 8"B$Z..b,he(FDf.*b+Nmn%#Rbs Hlfw⧞_FPHO;j*1!! 2 ` *2"et@HET pơ$*"( `0ŵc!!P""RN"ĀJ20M.dgAex2 ն/^mAz"ƒK@.|n@kr!fbX&-܈",4%*`Ԓ6h crť!'! 2Nm'x lp,T).Gh c`ͣ!"12]023(J ( `4*T2z"KUaTF ,"gK͚p8Y+aA6.,ؤt! OZ**]k \4ʮ+!$" &?.r 9j#H'2Z"ar> fB#p#Ȭ$l!,>baduL a@$T b`"02)pddF{nFj'\%T G L$ "HǂJF bvDH:\xEJ BJGL V" FĨj"8@=b0Iez}3vF#2gO2"v#B}"&rZsJ"[MFӦtOe4$2p"hn(Bb:*RE!` Rd`Osi4 'R埾TNa s#!Z! JQ@fE A8x ',4(bw! bf FbCVS,"1`1+s Зkbl9&%Z m!BwOO&HwbJn"NpFneLiV`aɂDv8aBPke0i Nig~RbEJ͵!Aam F'xN F S` h)*KXK@xVj"B@Vbzp}b%Z ("rt@SLnT  nNf,&zx(H5 dժ"!┵e@.NVJ@!>\p sǡMi@hi @@xH.8ha[jAɸY! zt#!0rxrKhy7^@icJ"zY @zb  a %b.} 2n"&"  B  DMP!!t5J}n^) JjKb Xi$ ɡJa BNq,JY. ӲodOSX%@#F>!GkV""?#9–q@V#S"zF3n'"2"ahz'V >8!"϶ .7w"j""^hb E"FmU|z4EVanj v!sBk AMnrªB"zgP )3  "bUdĘ'Ɩ? v#'`JfMN^$hALy' ڠ)A4A'"D\y |(UZAzU΃P4"^$"!ǡ[A! Hw[\ d!%#+t(4,َ ( "EJůFLp-R[aD8IA8#"u$b\Tz"]L@Y@1,م 8R'V*s{"zF$j%fXS5'826 $Bā&b*Bc>"wahfso ̋Hz""[BWICY(!j;"p;ඬ]ԎHK4 A8n,Cnkp: z7 0kݢ C D &)*ղՈN,.ca="`łNhQ rtf >բ,*8l tLGf(: 0|'JtRBaX#".Z"<l C/"@t[mfԦ]\6{xm&֦Qo("`sAKBbl,U9^6<#VΓ!SbJOMX&5D"A~!U5=C'N߅}>ӢZ\ARӓʻ^ޜҿ9d/ k7 b n<(("^ "ֹ"kv"B)"U ?T!`H>%` ^ٗbKB; TRC1JR)]10F9 @7,}kΝ3N0n gGO+ FtTl +0j4"..#?*Zl1VtEhMq>02Xc)ذQ[bk/Oy y6v\إKsb*=L)0VE8"RT@=|!lM n=?hi]QN{   iÉ.}%Cu\V7LF@{N/ AS#\"`|vyds!.ŸBW1``39T79TY!V'F)pA)CRGe@ZgȆm>!\DE$jV!B<1PDEE)B `{-Q̳ 9!T1ȧ7V-ADUZLw'(#GL"I"PA 80 1eAǐ߰ĒŋCLX # i!`X8]Ғd }uBϴa%͗Þ!KAfthI- BXD6NkQ ܩh5ݪh[D$@}/\ck# .vg`8tN170K7d$B^[UzqQ;j"`9K?\pJ9sAB]FAṟ9N(bTƆ#T `FB*z#d@ƁCX8Xoжx+qA5 D*;t_YWND@SuP뀒XD=ڊE@'>YQ B # a(/ ەc7B27x&hMZ~%ľ 9`&G+$c 8ECActv1h/l&cQ ?!';]>$0Զ / ma#+hB2s]()V8 [(ց)!vO 6@H*# T-HD"8XC昢wˆBMr]҇-(Z0X X@d]8~hꂜ#수f# f9|CC`L&\jQ&}KB_P^k sIvl%?p1&\\ xfpE&@ e#Ă)Ţ|n/F-!B&0"2Bd`#PMB)Ha5j#`On=mRX E_s p DqUpYТʐ6 tP)@}&9~Bڀ6"FPԑ])}>L@1bAIj"[X2ALO=IX &R]kA*Ċ" P (H!6(P=`o  9GM$ `A֐F0yN/6m@1f("QeNsB5.m` `Bb8" L3NqSWhq=;%BEAۊSCʚIU) TA*$7rS}"9 F/=lh'U0=~J?7>X6l";o쀎0|r&Ÿ́Qݠ] MɎ3[lA@%52ȆvRq@@t-"ZEn@܆$"ycu`Ǩ@ǃp8!Rb,1Ytyp,)ԽC+SI}>$H㓩McJ*o(fD>Vp{7Q78W'iSiO:Z (AՋ0"3X.hZ`ք!$00 [@h ˴à)@F529 fj2ES,=@F?ED`\@s)Dx7@*Z  V*N; {8ZH_=i{BhuR`G*8 ` r=V"CX @q1J1,SVq:V8 CP p# wo0q{>bb~` 6baG C3NlaY&tp^r4'q2p,O!85}ȱ 0[}gv|5 pPmA\,F " P}a /P@3 #"1`Fp0u5p'{DŽ %T4UcFe|APff8Gġrox7@}pϠ "PpfVqhBB::--F1($j\RTauCa12C ԰S"FWY +n1Q}b?$Uèa>?eJVP@f dI@u%Lvvf0~7!&rwBLHBR w BCp5Yߤbp6 iDHDp3@A }UàT++!aF-fi 9SSwlaYe4 SVoV+/28 !4!6 IM. ?:ﳊgd7E&\$:&/ @4zdI&&LR9k`ya e3TIAqp[rI3M[rB| ¢ 0 9\ ]P0fp{` {zEd|H1PtieZ R:qgdR]`}v! bgEuS!wTULWŠ81@nyT8FP8cRKW f1|qBC@ĝ h=`kM&&yA@!@`<{RYՄp/){ꡗXCX` g@dZ0 _QyDԆoC7 xPC0yH 'tpgّ!Z.(0I 1YbLE($ZF>uS:nTU^IDCÄ&sƠ@<3v; xڞ koCEr^Ġ1I B&KsA3m$ M@x#)r +42vp${xR_(D q 1^q]D[CZsՆ*ErC ԑ 0]Rx EV Z#bTaįbd$11@`Xgu! PAp)S呞ZC $0#- K"--L't`nVQ9S$[ hK $r!)KKlyg&ŔzJ`u ǡ5N."t4/qAAk8g]{^(,Y* 0a7l +q@ @0 iThF!,];H1Ҟ.v >vSN1M4I !TW#0uf:ÈG61(R9  L5Lmqp$AF2Ef W{RfE,B]5556R tO! lp pO0pO^0w 3p% - eB-bRFlt# ^v`qYa/C2X8q")TQ"Snak`m" œ+mmTVCbe5eZ ճ0vqI9("tv }PC6DokeJ&aQaBV YA*? *" @@1 "Prsa @| HR(^!\EPa ,JT"hA$<7"lPy7 u qm<:4z'm5` 5a PnA'<MC qԄ I'[qh:WE0 ҈^, i09&1%E̺ ^;UX 4n)\"@Ŋ-) zj E#R l-#f$f9Z! ?~$хhqQ0V,.xJա-VVv AAf߾~*7Ş )҂h_]rn܌5#2 )R$H [\ `C=9PP!|`*6zt)$ĴI Mpp>] 7@ Z3@| UI ~ް"(bj;gʎsΡ@#9@ Z"C;0BD*Za⣘.ُ0&#ħ -0\1%@lY *r* B%\ X"p㓠"tt: B9 8RkŌAvŚMjR:dH2E{-hb ($!M0n HN(}uG.XaS`6ᠥ `Y`o=ԱM疄4(h#q@t!xA;(z:=L%L3uLEa 4 C8n h-J+h ._%:beИ x `lGynw)bnt̠ㆈjhh FLs8C"1` &1唕 d -_bAVr"Er@Cā#۫PAX@Ŏ\`Co@TW`>D,ߘ1 ( *` |nְ-%yDAQ hl 1[t5J(Qpc6W}Wy[Jǂ(TPE@"`  Y(H p@ByB\C^҇UF{^"!D(XA%!#jȒL!@)b0G`" $P. %tH' .A\4C+h^b:J ("!006A0( ~Vi&6qpكe `s{.3p 2P5C0:8dϑ^ҏ Pd+f||RA1@zUC,F6g? $4b$@5HAJ~KF( @ėY/fKKF薧L]e&=V6d27p|%(nH0+!)'v+M()VL @v[ l`X+& mAO ٸDP(g`&꧖`+0E' ou"!]2F[D!+aU(ʿқg5%22\BB 4Y~Yc֐A?8p,~#il-Ph;o6-]MA:{o8 !~ ձ?=ZCQ8X1mhfZE^*8ğ%885( GfJ ֳkFD3,D 9e"po.qn.aI̗ .rd2yQhJ-xZ7g9ʗRn GNҐO3ms[IM\d@FW*mڄ>X#*Z X-#pȠ_5:`Rv*-4jǼ+J,e VXўNA T 5 jKAJՖ90#-e첯^af @zsxB_V٘1@)qJc.|B ˴ ?tIG, 8l;qDPe4K?`!ӆ 89BVП"1xc W(* 8RF"KSpՐi8)p?Pl|8 Ḱ#҇ #ЕI₼pYsd $:(ARYȂ3[,е4 +c%C@y0A%%3Px +.ߺ9`Z`(.C4fX.`@9V`-QxhH9B^ąO !k@WA#⨑*dsn"pUqш:z)_б' /0yAj+y臂 *`VHK, rU@[ڏq%(;z! 㞗|`88@c=%А2%~ۃ0i9؁V,l8Eͺr{RؽR \c[?8(PxX kK ɠV1n#Є(pL'ҟG*SHN(?` "p M+Ly)pI/ܛ*["б8lpK l(7PZ@"X*{j, J+|I!Hya]ɡA111^҃_OmȐ%08 2 ;ᘳ32Zh:!&J RЍMଉ` --JI3( 0 # 5K8ۄ@imȰ^,?(P -po9(لћ$TABB%8%HgQ؁*p W8H~y~+`A,K5`A^ p=ȢSȎ+Cܷ%xCၽХ`JW-<􉠂AiYB{Ԣ691Lʖ V6sEJ?L?l貉`2E4pb "2#'1(B()H9X6A.z)IL1/ {J ͉#4BhFY{Bp$<\( ;@";xaU`AOԯX; AD ;`‚X}8tC!=xZ̷AЃ֐˒W znRI9c$( EV8rP8UX4.kyO2A- I(#;"X-X"˰p`0zoa [@yo̝zZ1БR휷јM<[³~]h\H*(8z$g)0jH1_pU]ߤ(+‚Z\òU>m@^zZ@ƯѪP($ ۛYJ40Y*DD[( aވlH -8Z&5/P+ [%9̺[(ۄ FnX+݄J{{{3椄’qp$`ۯ:Z0GY[Č* gPNנּMP7tt ,& p_h_wIOW5DDl+wa$I)Aa U  y4A2;t\齿尽% U,@gLPT` iО.h+WЄ%(|L(ÔA8z4a{K,,-_sqœVYÓ`"TS'|BDA6g3>*WEO*5*EUTx]&{z+CPQC Te>v]>ɵ-sِhe>WF`@Zal lWhZ=P&iIJ&cɘ8;( 5Qiص zBP|H4HpNT6@  Ȃ,0"Xǂ[Yg.}ң;P@.d)_@*WHx8=m1*>l55` !N=P]UQBC%+ȗٽ`\_Nrሺ!zj Hlt@^]`(?0mWqE`2-H +pHf" SA⎒FiفsҰr@ЁjX㭲#Cx!9үc:bQZP*|B2(7p6 =H6I.6Hꌎ 0p0Io"lYIO&{qa1\EZT '%%H 2H/I~(g@"ahl!?UcÄ>pD`0(g:(; RRL83щh.`# aH*v9W26 B#3գpp#* Y^yMp3`x@_a(5`= 0w"\U=OZMZZXs毘[Ֆ|>7г0=lq\P!Z 8[OrwvP~lҷl`2PdZ_]wR}A(G xoX&$j譒tȔ J3tJ}82soM2C(Pp*/.>PatETS`^H_$+jHѸPUQ+1JsN[P ڴ <QTE;?NJ ȣ-yb"( N07HdG‚93`ez `0`G$;hQZ?=ŠSӑWb<!W/Ni)L0XF`φ=Hǖ(R`8T*j` 59rl}Y@\X*R&4\\>ɓ?RN>Y `.r;WH /*Чb pP_- 媄CSTCL QB?  0D!hDQT@'̓3P7@ Q\ԑH'QЅ <-6CHnwQ ]@XAEP lİBIhTCݝDGl y'7F`UkeXEXBhalƙe{  bM(XXI EES1JEEC p) r-UdImwnLm@cI"] Є$u7D`E H純 rF/|FMEt5!ZkIYR/uLӯHCj0"`-PE\~|1;i  (ĵCU#iJ@.3Y YG cXnCE@7V߰d1JvBU4Éd뭋'de?mts.nlBFT-pʴPEsFEN9|Ă b˗'| ?RZΘ#RRKQGf DQ~dK8&dJ)!dGKKfE%GxR&ڨl)H"W$y$&EvЂh`Ӭ}0ž^]0a8LfW)8B (K ^` "Tx`|bj,q lb;C3T3r 6NFl8F臫G"A > "vH!9Jt7eF_2s4$aE:GIB50$J-D`Y EE&AmaX췝 NJg5I3+A$"%Q@thX)0acWLER(h@t[nG0&&A %iHce`E194(V1'"ux;0 Sm.%l_UFR(c B0:MKQX,<(/L|(m`2M "Y (#0̶U 􈋶saD#U70@t\bdC`;s @H}n'\JuP-pv|M@n]f7fMղZzDP8 ]p,`BE!B`o0XqE)'W2 A(y1ԱiAuRW}d%|ol!#1*@ʃ ȕ. ($|?%)W1/QoȂ1(L /qsC*I2Ќff9..S Nl&sh~8x2r,f7Rִ7fQ|Azhы>GxcE v]B5rOW&[pHP$iW$@׆RbBb#h3bA+#1=(Qz;T? c:d7䀕#UÊt w{YL &4a_HO7{,fފ8Hƅn89gȢu0BVsgRp"Sʂ}#N\xr /.!)ȃ[biH@aH)IJn@$NRG8 ">7n"fAԔaV+Cy@U 7D%F|^%\dwj؂FA-]~n>lC x4%ظ58pCahn`vG?-qw`y$.DGPDKXTgv/E؋@HߑI[$յwPV-Q umZI|XD,;Èa?Lgi PU]B(RJOPA1'R¢'7h78@F|VĹG`%v4ȍGx>p]"ycHqQ7jVfX}%PBm@mG*<|qt}D/B ́C;WgGFpY]C&xJ P4Df lZi24#L@HmP8E+h'[B9=Da12%e (J7v֖ bv Jba(n7fUQ wDd S7"ButAx^BƆ>= q DFh>ղVfFHN$&+$XL`v .-%OE\ tN NEWڵTDE+h"kRVB(״iTUZd[ Т~B>}DDKi(J5K>6os b8Ixh2-B> #D\E,2T,qsT6gZ ^ ~IJs9%1C^7 QzW;G8z1HdzwXoD"D1CM| @+:#@":6!r9#PLYlQ H.rfLdAm!8lwN%;lJxiBSnBqEbWcE 6TW nG(AKD$К\vuIRE i.$qĈ@PӹMuU'B|W4\#$ؓ62.M:𹢯H67 yURf%;QAxՔ8\N\G8,b>@@ǏG.g+#H0bEMĎ%^9$" MD6WIx.B*DzC\,`G[,цTۍVGQY왝sP (%JQ9B pĪU8uJڧ Lwh%vR,Pըyh;Ƈ7˸ދM&DBAJDyU0eT0a~ƕ1Ơl#ʆ= ZS|"0`)1Ob3fb8 @~lxĒ'Z{9rH1|aad"_?f:*"dH*JLxj<,*Kʱ*/R"k.+ Bs:̢&GB))* 2c䩪(fZ˳&*ӳ)% I9:\8Κ#9 =. ec|iN$p'r"[@=`a?i!$"4]S ^v) ,P/"`BPB&zJ?> 꺫"m`q)*.QʉKnr B6JD$Q$S{#)A,"ͯe|r%=|8Ԗ:'=Έ(xN>C78`,H+e +tMG jHM $ڕĕzH?R:Rع$J#iߞ !D5ahg;HZt! c*Vl )zR({*>*o/KJSEjX侠\M/SK] ~We;x6BZ Z).d.e,Hֆp3pb@ s=@$o.EQTZ3C?uXP nWQS / MqOC ._ySJ0E22b.RD@CYҤF5Z0#jtsyK*Sk<ؔeZYRW PdaHҽ=@9P {Rv qhu[ i K0 ֠'MHpU4J $[%]U@"X-p Z0L3][@1p&h"5EqĆZ(礉D(B>s1F %ib_,yt+SB eNxF%ֲg&6G\=2hX )(8Q6$ÍBH+H!- ?mmې q4 [>u#Ew$XtBT "*03!1]ĝ1h+PD.@9ArS 1J[ԝ_>}`Ga7E} *,Rnļ2(N"=@l\`7OĘqzq(>V d 2P"#(`xt\!B g)ct` VL*, RQ .YEp@ yoCQՊFUD`QD,d( $d?B hL#n4)bЉAʒxh,rfb_ PF+m, \!к@g\.Xp( 6Prfm Ҵf"("4M/Ơ" "H"F|i"*`r *R0 tD!.eZVbKeitjDwFk4j]Na"Nf"JC " @Ff5vl/*x veNC/,Z!ƠJF".% )n bO\!"U!"P m9Xe&(` '`&pb;*B<βP.UR@b%T(".Vz.JQ"`a)w%%d"ă"2I& a"Zn"ʡ,b`1axG5JCM!6EJʭM*>/'4)kEXdBr/Q +`j*B&8:*B .ל~dVC b+0O4‘((0+b(754@^P b`,p gGDD\p6.` c0F\P3 n7l:R`LKIx/`7 8$g"zb'Rn * C?,"ғ$1ͩQJDPfOp?*H `1&(q$F"Z@<,ZzHB yx3Ay0B4l5)& ~`OjWk+FJw$a͗wW" "tM<@@.)pP֠m[\\PmVkWW7MT訡McA-ŠaⱢhp%R~͖ x3 ] 1 obV#jw.F-P 4Md7])'S`>S&m4"X%o:,oJ `'B'n\@daAHOy`ta2?&,Q!aa@x@"@ 'b4NEG)abXk}-"}eu[1 j豸6Aip}*XBj͆+2T%fOeNR`SΧ"a8f5!'',"apPR@ăD%=V"ڠ (@~ |rJ4a8DM?} a_'#F8̊!5(<++%;4BT,B \ f#"R`N+QI-t]q`FB'@t@HABԪ\m`/*j5dfYSse3]wyWDIH[ע' D*, x5~+Co^:4h50[ | 88~.K{$(Pc",naܙN!z"0HrQ*Eb&@~T dn6d5h&–l ae"2h6h!%p54  I%C  TMGxܰe@H"C.` P1bYIeF-x1DI:@8-@Q@F4!P Ҝiaĉ S!Hid6b})PZkFs)R`dC`,KK,8Iʭ!Xe $8! 1?\8V-k6sE&̆J==ہqӫ H?j ˭7p; 1CA(Ă * 3SY11TEM3M;1?k]L<\m"TQ z!I0a+|#PL1Lر}$Q$ !L01FaD+%f-)@^c`@1A4~P,BEMUCm0Ă"TCY@E&]vM"M0lrw(Xv)Hs)}]<|ƊAܖn*A0Şr(s EKV!uvѡtLqG9A] \HS^ ʻKaF CR)f0x /Lֲз.}N0L1P6A+Vj9__ y1CĔE]b* kg>E:,^0q8 -!-F]1_L馷P@P](FHl w0$}Q$э(X[D,`MFO!#(zdR T"$K5p8T`0Af$5”#6J]4 MCdF|X%Ҏm& 0p2dpU` 7sFB\jr^QA0"<-]M`t0Bx&$*P*9A4`F (RC(C>Ġ0IډP]:Fصme9*F,$!p|Ch  al3u1"AWa|K(  IZb [9 ID4Kr!m@1ax U VX +@1^mЗ N/Zɐg&KPs3ri|QR` Gб`kPy3 :LO((iE.҃<"n@F9db%CG UgwA J1KF $Ů/zP6 #H: 2,V )2)DT}Gb2D$oxk`2*T5^d7 Z'19A:; 8욓`-|2X2߸%׆`g >}$RFwCbHT|`.&CtY꜠ޠk$# k@D< ;caaF0CEW"63dWHR乜@x8T 9@ @A(@)h! s6DkuJr##0 7 0PglpQ@oPUUSJdX 0+P!V),"\C=vwT|A# 2A J$Vlr("h Nq !B=d .B+1 L(e ue*Z`(J[xVn̐%XYHKϝ$[Kn"8q?"C2q:D3$5LG0Dsa3F;>9aUH'@g pF,]:p +_6l2¢~ lctvDuXfs'cYJ !ZM~!CR \pCqdA Điĥ|,meOa80hc+TܖT ptZ;BG*kݮG2 Z7hEy0Ay`a+/}jƨ~ak0I։Jb}_6t* m(f@ +& !*V#m5l@ `o70dV  C v$h[Cqxqpp4 a3 k t)s5) a m*.Ǥ ^@ A L(6Vg u@J0ܤ$pm2 otTyYd p뉨 @7k;qS9@Xhp'F q1mC^Ơ c,pWlj J4^ nJ{oP +BD/9u Q9Qچz 2ʣ@t t A­ >ªK}k`{Zm+ɭ <g/xȐ$7Ї_0 ?Zp|i_fH`&٣( rLP:,E' 2 ? ' a>vu/`vgG@ Pv ]pm0ҠeOݖV3e3ab nQd 4'Fu졛E@oA83! /U!2g!:<܆~"/@!@ 1*hG@3Rya@,9 7 4vh9İqqWK bLt)%ay5Q0u0 0RpȇJk2k Z@! vw_1Œ+xճҁ B4H uIt@3 !mSqpC,3s +, J!7 4 C$h{%V†A~Jć-!`P"‘*z"߀ g|Y "`/BֲGۘ`#A' D)BXp Kh f0 wPQ2p4A`;x91usTı1ր=se5kxmb0x D H#c_ւI,3 u m0 L6P@}+h E-'kĀ b G 2~AJk:$ :43g}oR@ j^t@ |e*"(;<M5UMM%rN "#y`r-C_rABy?Go IN/71LB NgCҙB9#3i*-S*śs 77$A 2ٚ km* Z~dBg  b=tpPo4! *`;L`'t}=Ch xζ,Q4YUAJ?n '֯r & $r1CdK0>j%1@l5aOYZ9 K}SxpX"u90P\Lb]pQBc @7FZ -+bq5IWg\2#{lb5`fm9`S. #N60 h'pѢH00h6,?~Cr 20XK⇧_"PațېA@5rX%J-Aid#.VB hN[h xRJ o,AKN\<*ʛ7@xf9K01#ß&r!!F4u* 0``O `i, Y e  C `M |d rN$ AVr(6M6@?G#@hdHE,g5˜SXVD$Vjb+s#mB2E )(ZcI^R VAaDOl?A$ȁ^@'18%qn㭙hKL놛' Fv eiZ 60A[j=.ihFyTFr0TF8mhTA6Z&+UnhIa~"ƁY.KM`(o[ґŽJWQXp.CjAB+Pb&R[CaEޢLa?&,4XE,QkZ`9Z1%\~:r0 7duȝPB&jި0J$qp_@1|SgM*FD-qda> BŐ'=Y6' m  5`d-@x𷁜#,ȁ4Q_\",(CX>@ Kآ hKJ3 $,ܸ-T0ʿC , @Wty d X CE#) P67dal5w`9O^2H&/1VODiN"'CV0C&iJBr=#$0d a(88~@pNuG 5 1$I -m @PD@1&Z |p\ E?`&\Avkޑt9F;:#> `Da$6CW 2UHDZe0U )NCLM/K!L P3dJhd /04݋+4#1PB"gE)79;JB+T lT( ~3cno\{,x F؝92II mЂXl,q UH]χ/ji. ,P0ued* P:h,7y &|(4NT(\PhPM!8`@¶9*6sbqq4(a* vL+Dծ3M,P:W5u'('he0Py@!7s1y0ᷙ89H#h+ %x%"NR8( Л3u(Ÿ9:3Gw( Op_T^2H:fpTFj :Mp&*9ZB@L W6(nlJpr@lOEg诜 T;9ܨHa @Yp@bKtH,pDֵUėwZu!psrr1^ $NY *)Cq^C:0 ~{xp\š/8Ё*a{:ۚ{dDm6:aMEAy nnx}XPỜ*!ȇ~F1F sϢÖ( Bt'W6!, ciy(xKȹ_G4h4@D  ,  ]mppeF1P0 rvYz 4Uw 0 9sYj`e9:a`KĎ!عsKq؛:,߈pcɹ:>DFս[PH&d C AkVA(aRx03`B&K۷9RI(W,FF -?r jZ@k%+  hiN\~p6mwF{lz젰}` /A6G ruꃏ@uPS-6M`[ƻ-U^IQz0=kMFa5Cd<P@}Ҋ_Gq!<ApP"K.965ꁐN'Ɖ`Fh>O>|5SMp݃P>H=^0B v% L9t` -L0+j߸B -u $cS5(x@,"+S?F}twPE?xA)׬w+p-@^4A+`3r3dD;-AV <(I(@|K5L,^ P9L T 2.C $*M1BN~ctP!"B'js62N5 Y@| ^ ^J,!$ʹF0=B+k$X po @A}<$]\0RՌE:Un,ժp &T&qtBwKbtt}Yh~hyUDc@t0HӋ0A{IA{+2\p7g'o}1qip3@ Za cxPT؂Z304p/"Fb e a:Xa ,L0 t mUqrUG8xW ( b 8V )r7AAAmAp!Is=8mB nD 81ѢwBgxl;!s p t`A"mRQD -<{)tzḊ Q@ʄ Hε1E\PA QEM߆4嗃ϹB4d`ІnP҉&2 >@s+t4 p-^ ?K\Ca%O^ @ Tlij1zP>bȀuEḀ :̨pl`8`;/֖ItxTM9ߋŠ.%ȇ,8ne!,x6D U&' @64@-:Zfk̊ 0}ŠA<o@ A}a(n*0nq@<A ]#xEO~BBBjN "DEdЂ7^UA] GBI j=uT.@.!hpĄQ7\pvd|Ҝсb A԰F>䃘2TC܍0HmʯB#ZЃ=P\"D `8-L=Hl +Ă 1o(`fpK%h"o\ BA <“'=epלy0)2`T 8 #tE$&-EE=/l˱Q HA @g0hl,qt \ Cx= iX̅p<@i ̜ B(LT,7Ą;b^(AAH# \@5Ѓ@ ȀXZ|.z$?) uAQ^҃ V@ 0e@>tA>Pzf6LfCm$]DJ4NQo,HN@  @P-rQAE6 )0¸̸Yrc>>Am AXD#EI'ď%A^}HnPB H)!0*Cb$ [,PC&Wl\ ܃X/@\@A`/Hl1( #Bv D@@Ba 2) BKD9hcx $<}HY0L4x<[8@< B0RzCn@iR^؛^aBP TC^H@eAZP>U @bELP*Q1:dQ$\ HA0wEN z$eÚYF.^trѭҠEx4. ZBO͠R@Ԙg L#N 匾N^AYЎēBI"2L?d B v< $)4mi  EFxǮ̀7p( J%r\!-$Cm nA@xXAl()-P;x@p@W W?rMB4f$q!$$an .CFB%R3 p) I$ HNc!#WH.ž İ T <pACL@2,2xUrYA(؂:5h1@$?@C֛A)3i\X#\dq{{-RF((O\w*)\R |4\(C"PPA\7'(h?T-QAr(TFDJ@\;HCw%BC+.X +P+9DrB*0(%lN>\.TADCsjɣЂj#ylC@}f9}R` Ky@<(`MT(x@V"(klL0b`QN*gG$ W'I,y,VQ_tX``Qwhu o :X"Wv9ibs21G ,v!+Od 㺂P#8 U &QIAQ<.Ry0@T|:AEC0+(GrV,;rȁ 8 a I.!nŕw DE"N%( !M($lR ]'XI!"@? RJOUS1Ä")aH&`g+ptȇb0\(:wIɐEaHg APl @ \7*He (oCtd+0s> ~@\o47R!oK(8Q-EmSt t4:ÙFxŐ^ȇ1,Cu#-]>W $$Kl"$&*$AQA O"r@ $*!-HT `D58 v#rp;%">$a J" ي@Ck(Ⓛ8P0D"8@Ah6UaPjyT)޸&b 8AYjB Ȏ],@ @(I DAU#UE ԩC8pI: Hg`/HF#+hR r fCDl ب&z#&$Br0%D !p.m!;Zx`#! ֫" j%@Œ LAs~K6rrB%b'1h[DtԄJ$B,$aM*b)d@FV! 6gs<%M"Fh6ap p 'L0P6J&. $pg fϚ?E6 & *rQfc^( N FQ,~ j%dQj#ha.fJN)C (B$ax  Z~N` ;v`06) kAN"PR$ rpFag#) !n VBb) t8# n HFGp.) `֠8T'D{- @S>b$.8(C6 .$~n^P.>p 8&YR#2s+V4Y2 PnM$.JaRYDt)J$uH2~pbV8NAHw]f/ >FcBȿad*c2p (`1Lw1c'܊p9+1w;7Pdx$%H%! 8 ^ \#!lf8|1 I9 H &+Vk@b-W'$R ,a hմ洀fŹ.H$0O&R8)HAm"Ql]a!ՎOD) RpBp!ʨbbe*B {wf=d`#`lSl…H"`h lIb `NPpCd3 !`Sp\\!ɥ D8&`||T AF o 0dnp) I*6>e7p!mÊX *y *${:, jFyM${$&lPŊaE{0@kPu (`[Aƨ` C"Hf`B P]MD& aD9zt8N$4>& 4`$I Gn;~*`,p`pQ"aԇ}pdF&PG#> Aߨ rgQ4h`(H9\0r*I!;.A*wyő$%B @!IVF&dʬ > GyDB`4 &a#> tj7R"))IN'$ ^ܳDP4ꀰ&|Dg` X ! PSQNJ"+8$FށC[2"o0#$ 0z 0zly@OlP~zPɏP`\8`6 t5M|RH8D"XL{[%L):D )!)*bc/ $ހuNט"}GG.~-P JU9 hil՟"K#$b6dr AZ!X/ʭJ"6 w] &@|4ܷa(F)$C~,w2 P8$d+mnha\~h@ Z"`_Kl`}&P:k1/JDMΖId!@-XϪGx)̸֠ pxGQB&ᎾaD$~$ *Ui4rdàHdp$6a{/Hx= 0uƈ~p\\s0d\~66_C"2әҼMcG%[8XB":p:o8 -<{ŤF pÌ 0 ;C|<8Oހx{+*-N@$OCEd3Z MY: UK0fspy#; pp:mBe `SfS':hE(  |RJF(XAC)^kUW3K,#6E`n JM| ~@1b.*<'` tgAϖ-}V]qjA P6BÁ+aLxG~9咋U$rP* gLQh`faX 2GBKU47I*\!1RX4T .AtՒU]AuI@]AsPvl@AlaA}a  9oИ07!shIPM54PN9Ā ?U0Д.|y  A$@CD:CHQjq[,x̊4gd!,S"@EpxL@p7\L"/ `!tAb3a zQq:RB79Q1X%C0<6Ȃ!5@ )bF` c2}O` 0Eg4x1eQG:3D[""+H &A,߉A %Ub9%8Ee`b%hC&1Dr#Yȁ|ND5tR1O!+e !#pLTeʌ]V.F ۠ 4P`X|5" YH XpG kҺ C 2! a_2,#LN@q^6̒9PN 9ȥ3tz8݌# ˓:,| ,Y,EpERIxL{SBe'Hg> A.I.* *KUh$% Sef‚ؙѱӜhC@ Ta1~~%l ;u <[y `"5m͠gϨ5YЅ J0pdq.&`\3 ]")ɂ0P @CU IE v%,>` XԳ.M!(~aNN7|F ͪz:+r+oMH" CnAa&p3Li@9` W42Fu2<*B&{OC wꀌZ |i ,Ll! [T'<&+#\؉U(A LU01gBS%ˉ!.tG9H> $*֠)MC7 C$bf.6M̝oA (0b D H%mՀ>)qD63x"#DK`fWbSzh!s` q/)` G0chsoqsߚ"0 [eo 8E` G 80d 1b!bA00b 9D.7 KP)< q``Y3 3 C!rȰ(! rQ2~PrFj 30rYXRV~@$1 S3!u+> H8CL/@ r2 aꠋFȠ61"qZ564C4wb J"xp p Y +AS )HzBK#ᕱEHZtH? ` +zqVOIN 30N)W0zp%A.A63[ah1IAC>+1+@rphq6a\a 1oLӀȴ4ư;U:\ 0Q6!bH;9m )*X!t  pyc |JGuB_e qe*d*2lC.R)P;W ل0=dȄPVy7uRB+@7!aACv72Ooko4 Pf*کa:2 }ZrZV~bzxq<,f}0Ev pk@@Arpeqq0Q+j| UMz ~=FWg 9` d g]D.!ё%-3U,'#=Q-qm+8F*sdW PV C6 U!^`co  ȭ_F0òo@7::r$ ^ͅ71 '@ VcvC#N` ʍ;h)V+Sȡl% Ֆu^@a   +a 9{P Sz|1!J.r1Np?Pb>{ ?P v[-Q c.q+q\'s/Rur4g@r )'o~Ly3 cdhn!9 FrpYh 9 b\ƥS=037A7RRf g0 Qpve p Zg~ y $demV!L bEjxia'#s! 9rM3b]X;@Y1}Q"&C$Ѕ(e3M+t *UE9 lQkl*W)zK 9!Ő% luH( P\F)b spsG OP Y!P,6g0A /)oB[lE~>t~9`B K @! TADjQơP>RDc}p!9Dƌ9@UVuq7D,0D[?#S!pScF|s X+\Lj'}/? ЊÛVrbCL0E (!/αT,l3VaVu @oyCѪ$0:!zHP@%#,u4kD(/ ` '?6`p ϳ" ~ȕh,!Kڠ(P*(,9"MPM䀧O^c!qpq BbȤC  B%$6-18\9:6{nr8@Q:@Fhr#.K&p cYI={ 2rR9.0 T0!9  d $ H`"|YtP JJy1^oR0F(aDJd9561Q#8(D0 z,6@(Ht?WR !x7p}, ИM室=XaK@,1(ɤ!^" 2!Jm"`J<+x\Z%89eM 1+&G P Bȵ/28B0Z@Ž8uqyƘx@&rtQl'Ov#!,pP͂H(F $a8dᤜDyoX¡x$ơOB廼kDKR& Amga&c6?5t݆%c#p Tp| %x#,Hknnl?q@q:Z.`CCTQ$AQUtP[ $ \ gKLtb1DxY&p&Ńs@r-2o Q32|*O! `&q Fp 9+ L$@Ρ@TLHD0 6a?>AC,Blp a m \HMNy{H7(&. F:A*8De7)+dF9 CxCt|Ђ@BYY iHC% RQy@RxCN0,@%2"HpI2$>D8E4)PܛlZϦ>_[Bڇ-)_rD&(DuPء`դO i LOiCw?܊,As@. BEa'F+ҟ!Zu'1 Xq7HbQ^{qM !C0)WIp(5K/%K83$! 0E:dm6Q5rG0"xPD E.r{.`?9,Pa㗠SLG/ XQxA®p,$2o8мh(!C:R)ɂ`@JOT\GRT@--*H HB)Q]sH2 ]Z %~\ Q5/Z(*˜(ݨEd"$@H48Y{$|C ܂024:dcA O4SP6Vwʂ@iCISP T ] $du7v(%Z7F+W"mW1Џ3Cp+a Z Iy *@0%y)TMbhۉδ{+& o诊9PI?P"x V.d^Cb޻`qID@@,u`ċE ˄-$1 4pc.P`b|x`8K09 s(  yq]ػ` :ʂos&(8>/Vֹ:y~ۍ02!%H6ȁ oA0@9yB11- 8:Ѝ\a |) DY8Р3hQІQ0z:'/ؒH : T+(Ot7 ^؍y`x>O 1+p[zpu:aNȹ@C n( h6c8(P`` aFph`wCHc$r5 # gȲ.ҳAB/oX+bqcTǤP@WZ!kr+_`(s;=;:P*"BX80(x PomЂ?ndI8-EK.HKzt@"bPFPX @{(V Ъz0nn  )#G(8>Wa(PxɌ,h R{H"!ZC`>qh1l(yˍ76p6l^C #dK7\t/N8s8n`z^ɉ}蠌ɭ(K:qQ왙$hKhtD9XOp*Rlx~X e$P33ÿXa>>xhDm%khC2ir\ D n(: I.3 E0BC>. +yXuAf78 rH6șSiz/IXr( pԤ9gh) Q9t ӛk qkV_!y72ۤx1q6؁3`yhhx@B$(.!XPzH[`\SP)m sZ3pJ/cXS4iкP_"O qJS!ƙ*rsM3UwB p{O yKp$鮯 VBAB%΃oEm cyx(:8[ssJh0( hW*z (hҠ0*0 C{s 08T ~ սҤ``jٔea;ZqН^ȱi ōL ?p:! 3ʑ%qȑKRېIH/Н`Z+!XVZp P06[F1:WHW` C ZZh0s&;oڳ=Ȃ`x,z2l}xㇺpRWEt`2-^ ]`i9`x`d K{q&'"0ٛpX H@{XL 3xh\ p=ՍsHω4QIĈYyHQ Nhȡ#y[ I5(xx.=5-9v38Xʴ$"( S&Yfd.Yl>c@`-c^=.~X*6h4%iU]ny%DI [+blM sO -BnkD x'Y8ͬ6AwM@)Pw7͂Q5VPDֆЩ}NFR4WL[!쇈NXc̀(HiW2 XUh D9@(S]XS3]%28!5kć򤃿 My#WE5U]T8' z1qل`#8×hJcP057]PP2 cZ-Rl8F %P͍@&ݰ;8MMO:}Sbepȇw|^ jC;<+YERF1;@j! ,J 0a(MOáŋ3j1#Ix#aQ @1 puD dKvetRIh'' 4%E`/PYX2@%b7 \żjX>t]ԋ|0,@!{ ^ wMn$p1Haˢ%07#0~m:ʞM,ʚ4xkHp . ,rnK!UFL"ndS![ T͋-ԢR[U'7YdqW,U1Ї7P5@ E[S H}qQgEa-(i& h F8ݏ@>D @`C`PF)m&$TM)K28@7?1\ 7 vؑJ+B8:$MQ=]ޔf馜q$ <驨f a@!N41HAbK,!P`t}P17@h ?7u9]=@"#+$*rjCmF P←2vC6jD"NFb]fK\⏌K% E$'C$)5Ұ2)C&q09`&0BozV(b8\v]7Ej^HIh7,b@'p1$oD!P"lpq}x ɏF49XQbMf4HI 2IwU*v`C$<$P5 c$on`ш6gzB~)a@ JG* 7rGڑPAB? 1FmЏ~XDx^5Ke(E)UQ.]%a}s[;Oc95ފhޒ$B]CGB`\DukblZB 6Vԁ@CB zؗr*H_Q#*omL U<`z@]) ,w~t7adCn=4q,PN8 c@= ^>P֛u(B CŬܑe/ Y*w5 P!:}x@6"h[V6qHp@c8ueD" Vto+4`3(&0؏4ۨ@N ^-A7Aj^F,qZTֲ9Va. !L]t -,@o@P(X "14 _U-8 䅖%LW1t }B#@sD%R6oJ(Fq?vx'88peAYeq=eYDp 4t U %?Ѧ%6s!JֵGuC%y*U9^rB)# '4&~M}do ̰x!xbw{b`YK3Dp]3UQ hb+cZ˱opҹr5CFX^G8%DKLzH-=.?-;lO/"đK 7Vji'4^5G %B>H/ES1 2ʱL9dpLX%h2Yj?Ľڻ#eFpvP6hP7 nZp/E Bu"{} A&C5@Tv!M.B 5 Y +ruRO 7(r2'`6n~\p @ P BKxE7P^QY !*QLsWA}2KBU';* chd1(6h7fj1 C=m1eP%M5M1lh pY4,/']E4ptAcV$-vpdO&,B$&up` ,$*TLG'Rta im)=j *6(ubr-a‡*`0@_Yc$H`aJp` [ +#O@r5P0'Ճ=h6x;V}@ T o `].6=G'^$&f 's Pm3(3(F8#T(I8P N6AT2YC"a5;ǣ,7p [\p R' 3 h),1S b~( #L%m"` r0GbcQ b1(a VpB3~4`oQQ1_GYHJP@q /bZ0H-(c&fJaas.#0 @O π xGws p 9ҝv2$'tBn e=@aπB Y ' c ' ss2Deqj0V(v5doQYРo=4Q pk2Si?~!Y$^2p9Z3PaCn6l$ T%< l&b҄r6bPFP'9o ^@RL uu=QNJ pAuV0nGȠГ&lڡC@HSR%!#27ia JPY; kV&q,tHP Tb Fui'$a:@d1h7agJr2ڠG[PY0 0| RҨ4zbS0_*_b P7eIjIJ;Rpϐl-p I \AO[av T0 2E4i\K "Uu}5u ER- d Dqr@bP,>y[Y@bPPJⱖp .ؠ &xGSq%R5H g-yvsV$@qQ@`-@{ m& T a\ݙBAd(;@ b 5`ZRL/4x/7KfҹE0"bnh挓yl;@^?N qR;e@a<Td&e+N-[bq SU m+zt .2 c'DBQʗ͡4"0} P` Ng`-,}cYo0-|Q!0(߰y]c ]Qv+/ETD||`_)Հ *+U]4@ [V \Qa192~#sJ BNx(r򙵔+ G F}WDAŞfB-A33O#(v Zs` L!L; `~a]*Eeh YHA6Q IW}FnfaEb1@8W<[l\`T%CpO]ts AƠ'2*crЃA^` 3p P p d 'l odqe`Kh0SǓPBʔi {L10|ǩY%03&d~by0,ZP!bp p$mJBCVxeA YPu/[ P b0N(Qܺs=,u l,asf zr=z5a|*|$2 zS61 " sj%s׶Eڀ7fhEjUCr Kbl\[d⑻j >'RbHP')ǼQ( ڢVz@b+"UVCLC,MחvgubzZ708'+!c:Jrt`€ u2;zDp[DآQ둻]B{ 0Pǎ C 3P:BpT#N LHN 6 I <[rR5;q~JC]@B(FCgI-4%RYWs&;VԦ"ORu#[+Z =-5 !V߾s"HA; o |Z6rZA %\!|%UN 2xU@V"?K  /F9lζ2V2dBƉ*-ɱAX$fkر@`u6ˠ2APFD)? 6m~ f¼&Nq&X̲J1*PsXv s(bcc9oWCg`Ck0<[Pˣ BBB `dE[؀>tGr|]AVjň%TS7$Trn#r &l@p @`8 ЦrλV  0nP% D2dON*=Ci'`)`9lEɡZ l67˚#0 jP +6F#IKyarE 9qF1F+iHV :MJl֠d[zc[lNI@)0ndBE&xP *MJἳOPH ɣb#&/cO*OHK!d>AE<==c9v҉*ƼoNf9DjeĈlkbe'Ё\v-6hl&J\hTY֟^kpα V63oHdNa\;m ^K(a0qO5hfQ#ª gNa6v8⒙՘7n(?>1 =u#h9 QSN)l&9,% "uV}n[HyS >SM*,A`BO+~M_ 3`0% ~Add0?> '\P9da;Db׋?&2KjvbD`AJN,Mi(0Q B~pLjF1PݣM츭v,$k(ErG%K hA7h·\}h P:$H2eAxMdN^p0D0as @)ĜDlWvr>df>|*Ӹ€hD [oA])=F#@uN ҹ BpkDB 8BQH0)ȑd#ʋMxKP IsƓ9I >C`XR-@%0x0A߰z˅Ad'_!s"~c1%$À 4  ui 0JPpBl0ϙ `+1 |0E݀+\;a ;K!NRz~dD1ƧD#+A$3Ļ;WAh1&\BU !f' et9\tLYd7@Y4U`+0X3iC{ Y!ICX-mjS[~Y &pqF-Ř,yxD% D| ?B&uD(9@\ ӽA!TQ xQex%l!0=^X iXZ Nxf*80|Z6|P{۰m`^{g m !BG Z9q@5D%($biJH"ÃY%K !#9mҋܔAwq"7h.q*C8t~&1ݰ.#ጧd y7tڕY2r`s8 8scF&XTCsGO!~ "]3Ґ/|8%;Qg G90Vj+0J*#2At@q`Bk+%4!*جuIFY#?P~~ d̡9$Б&]pصI}`>+l5%3xp@n7 X}8A(a> |G  \ 9x. A@ F\ %p9G$ ɋ#`6!Sr%1QʄT*]^Gx şFUʱ - /%F>qt+` #f @sl*nP?`  ;{#88Zk!@.3b/bA04Ph(OiP\C,N(0P=QT 6yPV5 ȑ3㏣Bದ腆()h:80FD ȹ7k8؄ 6š&;v@<x/`,Zb2 vP|@9q詯-q`1H:189h +b_:bWQ)` %9 AT 9o.\  K؈V86tCN@s:ܐ=؆7s}C}WZHDuHKb@ @H! @Z/\ЂP&pV(dlI4Q$L`h=P )PLWi̷HHQwS ]+1R(h =p8!j-\ɣ)]Vd8P`tDtEv@9EaZ*ʛ sD҂bCN`dxK H? o:PC9   DٶP`b`Pk0؃(}C: /L􆿢DT˓&,BʄpфX!@UӉ$Xx?0r bD% [H&eFXEU+^v9Z%&}x G^k4 6-KsDO٤舚يsضQi: 4 FM qC՞}K #P$ :r<¼M(`"VA 4b6aHAfE@%.@(o1A*@6S-U;N; fLSic2/WGG=؃4Em3'C#K=X;RP\x@!ZAH:\K,JHP? Y1ЂNmle4=GC1Uh8Q.~G5)DBI= g*p 0qуyؐ ~;*xcA CӁWFd /%P3&(gAPDVdDT`Hd``h}a` `7e8@4 4AH-S`$;NvEh`51`:Uh$#3-pQ*8h`vtDRҚ]b8ޤ*0OHHFk5B&ҬA x9%_:C{c6PL3 `MMPWۃz`PX @j uP,; :U1 NhF\ܴ 0Jaĩ7%r蟡6epj`B_ ٭ًe)]gp[pc 9Ka).(6 펡ʘQg[8Pk$`D>d XKЀVzPz}$pSDUF,h%Uf(QkmF@gN5b cH]x:P0%9Ca%YBL4()|$*ߞjP0`KXD^EW 9`ϼ (oV'M.HV`PXąnɆX(9bUb`ơ-]ꗣ&ɘ2S4?[NPpoP'P9ז(;.\j#H@hE-mX * `\KOiЬUh0iH\,x˜d.ks 蘊`?1dZ( P`ӆYopu /D5"wϾ3vc0'n90 @ sX'xwpPPiR&pUFx-w ؂lg G 0`8(0veP>FG1ͪ:}2b,D8**a +Ј}Kɠjv R`E h_v`eXP?4(I\qVWjQK\ MD (N9(FP@7h;؂\*@3A`PDs۷s)zZ=cdo V*hy #x^r*ꛜVFu  PIf` -`R!ŞU|S.޼za 0bilA LAbcy IRs<$pM@~?N;A39NNB4FQ&$m IoA!&DhIj19@jahkIasc8@" p jؖ av /8Aq`.DrAAb;p \@?nPA#0/;0b6h HD\31n!Pd1.Yb9A`O|c%T$T}⋖@2)Aijo@3pOіJfeB  S"AAf)ⶬ` 0T``AWGa0jZN@@m4pN?H4 /af, {?P0?vF`)ׅıE܄DHNM @A"~-`} ̃3CȂ+%Y9Pnyd ݑ4T*BV)ޢ.2z _8 dcP@CF){?0 D*8]@"0@Վ-!'Lr\M@?:xD",plT[ J X0mL\ ,1l\0犠v+| q_lAgH>ܐA@V+^%|$#A0m3z4!:(8]@YI"ʔ|*fat @)DX+ԎdO'3Ā/a:Hb^\<@ARwIp7n.x ?d _ӡG؂%`hs[xl+oĻE<6ƙH0 A>|/]^7^`pc3*a)})ȁZTl:+u6H@(xeNb1DC*'J%]WĦ€!ndgjR 8yJ" Ys k\ڳF?xvm%i5(+ 4xaB .< B ) L2J@L &@w ݍL@!w@e '` z}@)Aq#`$Qh185T-2 TUIM2 eh^}s)Kʱ`#2͎u}6aOPkIrrIV>i͑I|%[`>ml|@ .b%IRŊөW^[atpEJj>!Tb$R;VjaNy)=@ag(1 %;8j*f;^Ba$U(%%:op@V8HKZiÙ\0 # 91 >9o hZrV#-0׎ƖpKq7%5`Af7Hw;hc (QチGX.Cn% J%b-) $=p#\czUw>dE\яvu51(g&IDG9t@HZ`a`9':p %G0L4[l%o= kJu6\s8 E0.:F e.!tSP؂F&-ʮ-* NRP H=v jHUA衞Yc d@Җ#K7`#>K,d'0/ss3͵ܼ K`m98i @@]9sBA@V%e&\eHUBT| I.(-Z-)h(d(Aò bb(p p2Rl#Z47db*T@F>#rPWou9xFa*7|DKé ~ ;*gVT W`p/Xo:!ZC8t#ڝ b)[A:r{ &!-$|ؖ/d( S oZ6QV\@AxBjic,d!!#F!fC !U\`( n>%׸1 &A'10'9Iie+C#І5lnDfNQoΔ3XCQ ȅ bEe [$dә=N#$:g'[ Aq}HXְ c+|SPr .B!jY-J$Q(L H!DL'}0a4.99]>(scMZPc?4XD#s"9"@Ad/L#g?l'g1UҨ-UT⸏2 0# ) <В8\X,\@*OXx! X_+=xk .p+) F-l| @p1U_F (|Fv9F2: ˑ6|n)v n|ЎnկuT PH/kX ף '&Eyj)B*dJZTc(¸(@B9@>4~`"OQW"i0BĐϨu{,S';`CEW acKƔ%hcC1}ÕVy 9cQPțm.qʇ6UP"~D)-hA]cMLTq!d\K ^;`Ħb0A [`IcH65PqD")ԏ j d7< ܁O&a6C\K0%`fg;؂M-UjTPpT a@Nt;5㵒;u^Ȁh|n@ DN晨]N@F8ETBgr-` R VUЂh8O (q84jq`z[RGB 10B\2, [mŹ)0̆n,a^tN"l.N~:8I s\n5 ,QA:"5T !O UO & *MS7h)JA5nan%8 _)o%R !J@I ^/]\XQ Ndd Xrľ$ A2a4M/`#Jn"c>sBbL C D!k ht T I R>`V H\@#*C.OkBD8|f{jbW"i>X% %$nJy@J }ljHmJi@Ρ:(5&H8R7 #"bfNrЭEP ZO bL a c=D BQ f&f|VA Z o,j(fQ;Pm+h$Hc& @`\q586' 8J.%=Rݢ tҚa#v")+B!rg-h $F, \xa@A\NkZJMH,A+ijh$XZ A*kpo `<.$v`{.&ƌR`-R@13V Jq +6)7*^ۅHf0 RwȀ pNS@&.r2nDM `f!jJAX ,Ac'C @a2/@DA D !R5 jB/#>rK$K~4D6c8HSH)!bbP O3wdրtG :"a+.c@PM BhA6i/ Pp"Q1U,P+jg(xaA.%;G xa @OBT"&o4G@.  p \P2%'gDDG &Let& `a<5%nI^ȊK 8 #;RMc T^'fʀ#`*3U)Q ޏ`@ Q >.,Al~h=D ƌr\m\)V x@JI~P|mz b,U %A `@.6vGdrݼn `ܤ]u]]bcA*1Ot `AX@ 5fz 0ܑe!ʠ,ŀ"mj^1obyAF8 'P28hB6 8C,l;j"{x!J@ d3P6^ hc[Bl0Vi) X zv48.mI.m n nI1,!Vd,K <qg(7fZ bhTxQbPe"R+"Zhlӊr ,a.H+p`gCvpXj @ &jF?nHOp\a ,wۺ$J# K \EPg͇:,Hu8a`:Oar5e,a]E h52.FQ*dY,<-q78Ҽ"#!aZrq! (JJJ&i+E2Ujx$ \" vajv] 9KK\ Chc!]ݕUcu\ Dq2 H9R. w !\㖠Sv TU.O[tߑeDnG~XiLDk>@aoky'CC !;BHh@h& fkOP晒Va@ W^]LC'8ҍ64\Rn4r I L'5 n:v))t N  $LY;dH˩ʲ<3\` @{hv:M 1_ S  @PC]`*(NC & n]>!d8V"{ `a ! _GlĆ &L4FwH>nJ H;$0 cG 7!i;HhB8QցD!B*M(" T \[ɗ@Fz--_NltjjA & `i @\yX,౑\q@ā3]w 1ofRqvLUs :I9ʤ:H;H|9uBLDAr\ǭ Hu @Feà΁nعQjyKpXt*MD T.j pl&) "E+ʤO'vCM-FۑU¦o$z(1vVΩ̱?AԓiapڎLj#tndA.g *+X :bد N X#LA!\jU @FZ+Zk3 .Z>t! 穮~FfD_F}4tM N& %~- Q?9@n@I1XK~eLbտd pXpߴQ'M )>fVM!q{轃 >ɷ] t' ^ӽ*jqf _!CC5j⩈p>%[6YB׳hՊG)F`(U_HbA;x,%ذZcys# O>76H8o~…o @E(kR 6,Z`s#g{[0dҥ` %6 > 8r\ UTVi^AebRfj6=#8,x.G=긃‚*uǔYOL1?%XbLAXfeʀ uvKoHchXڴ @_3rtE@s 2iI9Ӛ%н|xX^+7QPk 1LRJ{i16vpi1QPTxYJM%aY]%?s?@;\@ɼ-:i\W;o\KfY@>NB~W{0ѥ.i`YD#*9LAt-ʈCFyƑi0Od݇grQ`yTRIJ&KX:9bp41`*‰P  a ;!{sa #$%ӓi# C<U+ %$8DhAH>gme,QW,f PS#H ndpU) i@#ژe?D5N"cG4E# 0HjSv \&UWA3Y)X@<6hIsЍ4  F%3)7>`544冟HD90 v?s#GHxGRa| (vd,hA+n,,k?}D.HpQ@nsլJK(HER@7! I(g"Z(2-^\?$ Վ`1@6ȲsPAb k(ӬGb+؁..R ۨ κ )5zġ ],oCIyPab>@aN %-?b KcT 1 D-mNtl0*PA#aA/zg㨊e> QhɯPe pݶP-6CKeİP հpePh ^ՕZbL7"QΡțA a}fM 'j9H#!RB:?!NaԞ$ز_i: 1,Y0"I6HGXJ!@L b%<PGA hL @L߬T9 3*}Β48J(2e OK 2PaAu7) %l1 Gأ2.brvLG s:e#B#Hմ*jY!b0C p X0Ikb` 0P80YKNF"r=w)'1 wEP=&5^PS' `adX=yq9?eރ7Ay^\hq}` 1RYa! +hVUp7BsC3q. O!sQ7p#u#JuK  E);r$J:hS@( 0R0#Err 00Gp:`ȋm PQ tB BR?@-6-&6eYAԢAqxB7ԀH ` `LQ`Pb.`@ ~\ƴ'JsB3PB3sr9љ7p V+*v Z-ơSN%CST jX=l'' D;lXV6s 0 f  eB0ZMtS0"n>qA{oQfwp%5I>vB /I iUy.1F#@ KQ@FJq^ 4T*797ULsA.sLi:96Y SCCQ>b ~p$RLWu7t0ym` 8B:Bro^b$p YsTpr MX_I A p0a `*?S?7~$z Z6Ġ-BIPo5sj/R_S)Z[:ֱz,O.>J7=(yRק2>$eSrf)=ӬKzvo`" JtB}R(a}&Bhg Jjsg7wZ>v. q9R饎rKb0$loѯG<;GDmu=2@3 cpXYUZ" %(;N1hጫ 0G% /囪' YaB>ڠ0Gx2,,s,<_]'tRVt.rpBqZUTS|!+߀#‰ATHp3RV_@ZFoiF"8#q &Z)5֙` zrJ25sUS$;0Ӱp; ]@A9m C~QֳP](:s>[[~ ?=CRo*AV5Dwg[!3gr5!nA#<.aop'pXViҪ鲶kk@C|;ؠC 0. :ɑ]< '` 00?lX;pM]̩빞bbQ?|P@d.lMaIzUW#8 TȻC =~s.袥*/K%%'%zSI$kFk;uQ;A̘ͥUtmb10 P3@[V|V)@V5,A$g{qA) (A|n 5)Pw8 d&2 XB; o0 (qeٸ -uM#j:TDE]P;9 'WEOFeRK K k&n=n]U<]0ʐ&ǡQI kzV(U{8A P{6-` ,D443 E F@0$8lKF#"o[u-1-Ŕ@Xo1P'`"txS&gvH-%`Ԫ%MF6]*ZlP0l zśW^}%SqPn2UwW]#<fWj.M78m, Th;vP6щ΁! %lm@M1Zv ;5~AG ~3ұKs̱5Ro&P?Oqa xi!PrA6^\p@I0 ¦OJ(6h# qNdUX%Ecqajb)@AGxA6PJy"6ƚڊ ivJ* K޲˔ Ӕ{d+M5d3/1z&t@y:.P.%iN!H \D#h4=(ܠj͎є;.7Bn`#7+`H+IÅ .\@Γ>:J9Jd.R=AdA$O>@Rq QDxyg!ZEIb%V&Y.Xт.d.%Z؛gNx#,Òhsxx T. 'i.J!TN 1 1o1Mf 47>*ЅBd@%.D;.:mF'N]O+`4ن3m8B5]u m+FqFbnp(4j.D?JGj6?vZُo뮳K% =$;\>B N`>IA&j@@|$f%zV CwF.1kCTL:޸ 'aigGR/!iI-():5c.p4v/QK*f5Pȁ"X@~@iҐ h+HfPU4+hC $1xl Qr R79P5V r?*VABw ^Ax@ϴ-~X Nvӊ$Ѓ.dc<"wcP%aMN`'w}f 8ʱ bBCVA'I6Is@pCL3A7 I-o1f1MPg8QjY<,d8O`6 CBhq0M?b#Ȋ8x1B<'41My7ӈ&V琔 "<~(  [2;%됇.􍔉Ȧ*5Bʖuh$w+O+`V+vCcKx `P\ւ v٥g;kPajL }bxe9X9t .ys%.a`0&S95{07 r-Ĺ٦i6^# @<9 Yi1``İR`*\QSҔ^^s 6b]e]a4ћ`j*P  Y:]<)]›x"iqZHb3\r W5h [=Y ~<` GVvЊb;Ex0'a "[ @0 pjGXno(2/+9LIY) &Z]+bA> %b8$))^ 8*&e* )ID^!d,H1Df:,5Z#U[97x e* V@P UPbL,&Ǔo(g8ų|1kgt&kc@H‚%d¶puċv #Xv؂x.^!B$ȌGxh8 :q>8țX&a. >ÍxӰẝi?kX谾%*V $ PIx?kai)9$7 бr' @od&J6HM)Fx90DD0EXpAXJ0xWx1WqFow; %< vL< #$+μF8BҳA*o>0`h@!}8&IX(Xy$1 p4ҕٕ>*q)LSlKe@Afʺ 9^FM8P꤮%  a rHP-98KkVp1xAcnۃ(Qǫ±9肂B1 @&Y70sZH<Ʌ*yA:,O(-ؔs*.H#:O4N(]1ꈜJ37;(P3ӈC&:ϡ*$9] B#XC"&"xC]㰾 1bAPV pйXcUc#U$؀(؃b}Tk&!871 mBKpH'0**kK80-7V2ز@X WX x`MHǡTհ<"xQ".LݳBĮI)a\D"9h["X鸁 `؛uP@T/;CbHţ98D6sn ck($J8pWhQj<+pB _ Rks֧˂О0$@M[{U302S(8S©C..K(7[` ;8TX9CsLy7L(/(;̔q<բJk9#Lr#삍YihX %8閌3 "= gЅr6A l(H}/)ϊ,3jC\=9XF9N>˔\-3` U!p?I4# cࢎO胻1Ll#Їb=x'@GIB{`{:`?-g[/tAc.X"|qM@]a63[   j@Cy]i&W8!b]/H.a @- %X["T""<-2.1-(hTUUH??^wF#[bEiKl[MM0iMHW l xC*OP!]`e0GixjHG$>4ɗ0Nbi^3 \}q a)^3S1ݜ5g% ok[ѝS^ȃ;-hw#|y~B`N2|鏼kM̶Mn >.c Ȝ5sKX-6ixA=$X͍{.t^fx9J)oH>; _c >fpyݟl 9T).ё9I3ʫ_|حge.z\!h^UP(h0<gm{{),#0#'L m8~@EpA(HC E(ʱ9Hǖ._Œ)s&Ml@!&uJ#R`YHB0cIF\B+kGHoyC·Ci%$!2&(Xa@)  =++Mr !\'7}8EHHZr'b㇓A$"vH PW8Iy4eLkPYOk̜H'|LBj3fmO2 a`GͲa-zFփjNws}K 97G>߰#@!0Є5IMB\"2Pa mD 1c:j"Je-☰H,PF4/\ 5OUBY$Zюh%f((3Q7 Hô|{qаRĐqS I<c9f\ `>鿔"fY 4=B:T`,'*0z'UyeUNo~[}Ԋo0܎V0& a$H􈅶0΁D.a Z fË8}I"GtP!BGpp);px/]*<.q WR&5)\3 I 9|',NK"efL43Кaٸ*%R|՛ ߈A[WX9X['`}lRj)r$hԘ:5Nl _{F{Z( a\!rK!0ݕ`U hv i\ .J6.}MܒI#Nv! `-eGDpҔNe@X-Lc9'IѠ8}q YZx3MF|Fg#܄3COh r4.yޒPj ;EtA#/t^{P@kElHKxx.colFoFI Ft\Z E1b,H҈OE-HSebaYm^`.@M.B\`f Z H8 <~́d%0% LDE4-$GP±ChQ544DK @&l0H2}P0@  ("w/FmPW\ūxW8ur=F!AstEt0Dy%홚WlPZ +KyE1!\)`$J}Eo  .d8CdB @LVz @?dXK=Ep@LlNG7e !ՂEUAbK`*T\ LMC`ELt_t\K`,ŲOQ \i\WG4GEQ:#LRpFsFYQRKkXFr`-.)p # I|BV&|B= MJ(zN-$E("=uDXh_=^#HA>G`*h^Ģ4a$\hmC]DZET ݏAT/I`щQd̀ e h&aQ$Rs"ʼ 6 WFJ0'MK JñWNy6L^,P,FlAD4W ́n]-hT F+<Q=# 0&J%80%|`#B^S'R4PD@jvD Q֮D5,5> Pt0\ѫ+ T9-R` `LGxG / ، ·nv火 e8 I,ePLPŢIT~ Wqa]͂2hmآ@@&O%)z([d^8Еda+N+0@ K ZeثU+9*"" @ C4ABDB)Y4HC9blք&E/'DLk:H99C* TK(0#,QsH0E,2nL.ނk$ٔ ЫLQnslJt r1tanYnYx(JqU!Zh`UVQԐ,WHa+tvoM Ţ[WL'#<CC(B lAx*&3--)8T'rmGă,]]Q`-R,d҄4,P,HTA 8NGߑjXI]hϦ@Ǻ2B)0?Ы C垠wmm?L#pmQ?02( 1E8.R .0+2,KK,ܭnk.dبʈE}fpW-*ETVa聙eb䇂 576B0\B9ShXt"EA'["c0X7Ar%pMXKDV_ ҍƞNb]Tbd)Lt8} NNG$5FYd oJn5w6pΫTB?,>:[18wDm:1s  5w6"1}u-r`w: m!pDU,!36(BE9(EѲ@)@R0ݽlBlƲLݑ H!LPhϨLC ..A(=CVnI .(Z񤚂eGjMG#Om*D39˔pc$tpqWB{Ga?ppEsm 0ѕj{#e\rKL4 EDTn4"E, E_RHٵŲC5GVǕwVE"]yLcR" ELF WkyZOiɝwE5c_‰ϤдiPt\٦W^Ƙ+s`AdMuJsDT̅ p[ϽSof-j5L8s8t2EEȂ>cu8lsĽ(kE-T&R[ޘ=뾉0LP (MDNwP^àe1S)FЌ!\xi0B246`D镉`id^1vF0d N @ I +2+ftK,د,Hl]œPAtS$*K 5Ed/Ђ.D5=LŌ| W9EY /Dhy_U\LWŘܞihU7|W\ QO;͹.*9R zhτ4Fb ܣt  * {{X+@5LA{K.mfHhR@݋>!r7EK{Kn;k)EdiC@EŢ\#^fLjG]9b =`8*:MZ 0{R:4tGgM$/Eu<ćq6) F<={d@QĴ>#C2L+d?@{TNS&-hKп"(п<9ZY[l\XvKZpuyyI.?Fٓ ?PRdTG[, @X6^ر @Äxcv"Dν1fL Qlأ2={Z=)ejc ~4%`M6LQ06kgQ;lٱ"Yo>jh@@O_7/(,F k F(( 4,-4m¥woӧ hVEZ-v1܎v^QF!bmF` ͐GCC?pxA}|Q` ֎Hg#I.pbKĚ &8(dq \q?}!a4j!/b| X) ʝC2V>iV0=7b)4L0NZ"3!=XkmN99nУdlB-lk/˰F0$K FS!Mb mH!(ڨ8JbF2Dn`5[ p&KژIX!2S"j=l&K]6,۠!tsl-Y6qpt-!fخSpVAZ! '| ""bN+4ΑH8ϴ( k#LK;-4ԃ7j, :: : Q)Nsl:'dEe(g9mU%uXʚ,1xDXV)›hH eC)_}{! aCr1MQE}Ij=!XfF&H7!Vd K(&dbN, u2aް6n9r,}k(̛/nnyP.,CsOwhK,ib_%7QjڊGQ}ӇDm7\E01}&@ a 7 !`ATnҭ5WP}s-! X:)2,4b nYq Z0{ p1RicKR 0 ! I02 gZ'P=gf`FBS" =C!3u`/8c0i;Qc_# pNPb-n}4\ sTr eD(سt v B;-P WK,WA#F2:*2sA93H-f'z6DBCʱ @(( `':pxHbi Z9;,bH9=0%ˣ\1l3 : 㾽MvKSFf/{z.5j)mn%Ky`,ljQ}NrY7d H 6~W(U2G!ɺ d!doHM6x҆3x-8 n 4Z.*[\O3!FC%2!SK+'?h]P_X&s4Y&1_IJe^bj3rD#-Ĩ m8>q,Ԣ2s^֖N9(gAƀ>a @AQ@~mLoE\4$ .lPnW!* y Y @6te-YwX`w V1v! N=`OpM.#'KA3j g좲<@p8Y/(PX>.Ĕ Q^ghL9`q8 ԼNHBDLإ \7VXp~4k6Qc .><ixJ6 \Ehbmh?ѽMo( ! Fq?;-DeyFn@JriNjBx4)}f2j*qg8P"*!"F0I$X:VḔNo$Olbn += 'C5q`1T%P SD:b$bYQ(- A>IBXW Q`l}89nat;n&ރH`BX+B[EQjhPFHkM#OEe٣1 #(?.! XLJ]ӌFJ[76CL'b `1ݿ// ݥiH0,0}X92TG/5Vh*0xI 8 w Xa~MڠZ.*%B'rtl-fNP + 8! ze&-9Bbyxa} Ph bczˣ(~d:܌bZI#**! k~z ,aef FnyaHk4y*&"Q"@,C%hq@!p|$X"@ H tXAt!*E+up!Rttۈ" FA @!RFNLd%.M0b$PET y<82 ϱ Ie$kQ!xbxKB#_nFL+ x̊6Pkd ! PF z6M0o U$b 8\D%Wd&&G,AbaҮwprrr*=ڢ8 +H+H,taMdžh|AA`/Yҍ&'@wAw.<.3HN5`b/>.b=␓D8bd.*vk6a".MjH!jo1e80HU*I2/B3Pn ><8 #1#Lmx:>&`@&dr&)rGY'nBlAT @J! @!֠ 8-wBMp&aa=XDϣTޣ.b E16Xf<\1 ,F!gG LF8pzBW,T'M"0K3”2K6(#QL$V @Z`l%@(.a hhqnp pLQaȀ~ p`*l~!H8@,TSbAn) ,0@p|Hr)׀Jt@a@j]6{PL5k0 /"18/}y!h<~J EleKP&Re#W$6C58aLԄLː"2\A>t`s`@ADh>:^Ybc. aHY!n!*]ʴӧPI T2%#\HV,$SYFbB [IirB'ZmI;v@Ғ_DI!*9mHnNmvêKpYҦI3g8@+mx_|.G9G.\zÃGDKr!M2qvx ٧-Q5FSOL&XCpwӔFX1҅ 31FtTn$%D>t9p0D=pS|)C0 $B=Zcs!ۦDE1 ̣Pkk$aD)J @mЛߴq?9 @BNR80Jt ԂFK(P521 AD .!oX"#26T4R d$2 yz+02ƍ t܀|)|&.Ml$XXVL.XtEz  HR(NJ-R "bJ'IPh *H-pB>0x IyǛFl)4$x29b$`HD1NA5Qkfh3>.NP3kE+ArI &G,Q%|UN+^Ãp rdu>@.Nc rWah@J[] ,m5 43 ߺҋQfŁ|Dk^Ɏ=o$ʶ'#qCh -;'H$|b7$#A XW>3VQPgpt +)ڍ^gѤU|}OGbXZ돎<wn ߃WHx$ucM]E tu]! EEg v0o70 oGvFPmp]`Dw@52l{G#'@it>$slG@y$cy&3 Pr5>@ '0}K$ ` n-l]p4 J$1 5@5\.Hf9O ;gQCJYˑk@C`=e#T`y&,ePbRg`b 7 t@ htbh/5wQ 聗vET$`Gp1:lS,8 uP" JPGaaB&p%$aK^K*D1&uWo4 IpHp"-W g(7Ρ*r@1}A ~hPiqR{+pYƐ<@ ]  }@  !Ā(UKPY _!P X%K P#]0#6Ek W@>Ah*ly##6VP;&b+ h@@,PU@ @P? QEu1@`{Qa"`E`Pg 'MPOJN! 0U@0R˱W# /Kj2X P(CNUtS90>P#z &9{G3 @<$ $"~a" P #!I@>t>|u*hF@h&g"d:f$p29k/~:Y t7 #raPI*E@wPE.Ő-@ >7Zu~ H>aZPɋoP ۰mmpImo{b>p ] B{`' V'W#3$q l FaFPS$ɤ31E2UTeaP` @0,2U i2~4`v"Ef",: v* }iAAg ~V~&;ШFq`K;4\m2@)r~\up7@ TuCU ށ.Z 1 (a+ hxsm"Sc & YJd G,`@$X$vʘ$a{3 JLo9@$6 k :a$'٣$AG"b 20>$ $1" 2!&&o pJV7G} 0[A|ݗfFO`ШQ_B}%+1#izK (N+rwCCi>. q Qpv y]9}+r ^#e 2 G ` Z1 KR-2W3l[pTL p#$A1s c 6F`ރUW hx =ЃQxJ= HƢBv /,/QjKЋzz ³('t#gsˈgY&%Cr/  |&r ThnkZzg  `0S9 X pJ to@CF_@@R+3ܯ@Hua@ S ")A0@<,p#M ^@[FJf P=h@@A&U$]یJ 2 0.@ Ӡ ӫ^32Z}=ʙFzǴ69\*rgkW*y  |AuA3.zH F<PiNp`P瀽؋2j0kwl Ұ˼;+ _0t"%Bpd=s@yU11r#6LQC P^[# Yf +$av;hhЄkUu 'GUPC E{% I $ pӫ *,*YgrOۨBz"wR9O+r;rfm|: K0@Wۿ79 NpY ugp֋ <(vBkd P 2 ͗pP#; 0 }Qd5 h01;pGްGȐ #Mkosĸ+\2O5yƶl]B ހ5? k*,l $ { > %= V۳H;ևCf. ؇}Y!1)X,\sg.0tX[̛ apDpaRu0 (RO.0E$G A ]{q4,à&bo=$1' ܟ뼼fr C -H1)` Ph#k$@%ހr.ql_B wrx7p2@tgOLR$1{RQԢgR<29yŐ `]\3:A|f1{ $w]R7-ī@ 30 ]Y.i_Bb":4#X@K0 RpQoKJND?<Ћ$Y00b!VUiN3$NB D$alIAp57 9 @K,@0 /VGӭ] /TsvmIPzgR0R,;vF)nWG0Rl 2b o&ʋ:Z l@os~tb?d%aVu'Q"ot+Qu\(5iCS lqUb**wpRtBjLZׯʘWL5 U1gܶAY+%\aĉK m-@P \>0`+80,gP)^9%7GethUCX S0eU7r 5`7>%d`}3bէ fl1'9ʾAcoL[cK:O\ɢ@h㙔nb:PxX \=@:`.cVሇ0$Xo0N&h) >(8a~ @`.n1H.-J.1F`4 !dN"t2(={ &AU*&ڠM,奲,lRJ+%Lk&]#p2bHҾZШ`DR0kVJw<ˁ2*b]5(pjs@ xH6@RRvx8,k-0b9Q{=#>d9,160pgxp#{c 0nO.aṾCq f \b߰ћ tH [%}\1'bq!$b.`a  F>E\qα<0Hb6)֐ dq% 6tp 'Umŭz#1|zb@V4PA /kP 7!$; 2V2 2&T)O/[d>-[R6%cVr`VXҖi hEX?j ڰFtU v}T(>,pkJW 2)T")Ė@I0iAFaXR\g-0"؜!y94N!y@XbaLlz_2@&$嘄XA!Mk4vaA@Ln4b 'q"&;v20%(>6֓xŪH'9Y ke 9?V@U ~KǃA=n8G\mp[# )Fʂf0T :0À70:4'S*6-A*]b![Kw`ʛ*<SÌxbR)Bv ^aQǡ @ +aP~ew n!T)S -]{ f,sX xLFp oy@-m(ŸX.,C / Fbd7x)%A\-ޒUc@ar'-|Ar@RPƖT>WP84 hQ()Vo ਺$`YڈA bI6VqIt9tE>QnzBP9>QJG_S|+_(pc!i`ht  /$|zoA@ݩEwP iayba ;2=pp:,;9[K:2$p Xj@8*TsK4yps6 xx Z*8/2)1|P iU !R;4A0[*5o(@HRnH> <A=y8xscOh hpQ&y_ؓ#2\Z6kt0Ω >ڬ@rm%a=\OpKI,Â00,r10 4PHwX!'`?Dh8 ;خ y0ȁ >7EIk>#rXlxl\,0tF M Đ:-Ǒ8` !q|H f:/*؝/0i%(M`^XA~Ԋ(8ؘ=2tH@N bs=q N0y鸁7,b9H79_UQ2fڒL)qnrx)T88a*3  8s*P QsG1K&u/I JXhA^ЅxALQjQ.X7q+I $GzKB`PIy%Gd+}d#xK%i`c<裯qXPpIb Q827J6pSx T()b6,u<? 7  ^HJcX sjp8dy%bӢ.go3/n3[؃zLPbb@ I[}j`6I,rqpT# SO6Ÿ{2ыxpw9Ӊ͖9ݪ9]K]p8I0-XF(F&dȓ%h^cb ooiXƣ[AwP'`n!t!pܫ/ 7 ~HP"t".LbiK^[@GxV5iV`Lك`+  5*8ܯ0+ =@P [͇r juT$; L +$`I y;첥׃jE܊=3d6[v# -bH0- !s=S#oUXF"'pnЀw|au4(SIqjHV 5aH  $4qq`?S .R WY( Zp#; ~O 臍e#8>8  84P ڠpZ)R?0.< $ H]9 2=] O@ǹ" `neg @X8P79T(N5 ;ܐa36JB!. uPB6|T Lwx(bCE+H%x,X5H(SP4Lh> 0¡3  $;`~`+dv @:!YY YXT\Jiȃ0.{j!#=ă8,s؉,\Җn _>uS31>Z?@(520l;N+4`L"QQ0B,! 9ȇЭ[:%JK\P ׅ^[w".4!4VP P`- y) gh\|(s/:@59>Xybap:0 bZB0 . 涯kCگu<{a[x++ xKɭ=BH98LZzb0H;($88t;N0x>x7Ú:Sj@PBh."؝.ep]HV%u$- 4q8 WaR[ .-]R\"7a `BRG `Q,)Љ*gmp 2K4 -pO~ۯJ3\Ppȕ-Ԁ?U`6e'v4I0viR4cM (gZ,@H #[壑,8qPLk\_3(!Hү B]0c(an(rU f냐@T\ P"Ȱ:r>PWPMC)& `VV[&hg-XK;<'6JH-.V iՊ Zp TkTh x^ؚS^PGRwutHIQrXAk-@M` PM4tQF1` 0@MGP ZlTMTiVܠMUJUpAƀ1[A' ì#D,BC($!6`DǙ: czDA" (Dy`^Z7 ~,VQ!ԣPZ(Tch,3q$|J*r7- N 7ZA2T/*!KY*qg @SW$0E)L5qÈ" )A8@9 [P?3QE_+/rs1T#?Zhe1݀&Z$ut\0BBy#! pHPRqDidA[0gxq9D*"sӓ$R'YB.T6=`A $^PfcVIJ9,( XҭsW> u7r]$B7za,ч@.`EW{KAԌ8P.(c +ՈBq1Dr0[WHEyA.hh֣3K!6‹Oꉥ Ꮒ C$FDlP)zSi@FQAo+:C0H"Qu;Q{ (; [Q@`,Wq Y(^ZZ*xAp 0J9b8PID,q.>0ǰ0C'I8(ڠ3Um ƫ. y A@)ʐ b8k8 $'G "U(q -8'*$`@ P.㬂̀D+,9LiY2> 'Q s8Z.zmM!.fd$`H`Ӂ({HS@U\ i0 !H= Љq&w4ux p!h!/`^x'ZubR*X6|NBQKzX)?%O)egm vրz'ħʑ텡sIh,TTR\aKhʯ[ѣQB2,gQ0ے8$e$z, bTQQ@X b%ZҊKr.py RFHӋR.pITc`՗>O:x-#ļ] $!IØQp 9`@8@.<"x@mng37 Txj=Gk @ 9 18=XU`NsEcqµ)`0 AHqAђ99I^f at6]@ Y@',!h)H>1LbQ@Dwi# t0 V%- @oH '@8opm{Ɗ@Y8qh?! T_1=ozEaW!8C Ko0QoH/y U*l0P^p S U9B >B!-H)@A 1QɼE Zf=|`|Ȟ,nf  @Ag30d&H-WH]Xn=pΆ1@[扙Bm NRb^6% eI4a *G9@,}j-nM͘:6\N %1]r ٤y B+p^k iqG %ÏBh qB!o@S@Iġ-h A1Ƴ̽E!-lkcV[\ 8~BQ*49\Z4ȔD0F' vDFBc{ar-"EĻW"S  EZܬb(C!DM\5xC\>|D> hxP{Ă2H0BB58A ;Ỳ7Ā/C0 BMi,QTGzA9\IL-t@",]ϔq JǛeQ2=Uc\A@n Y@0\"@* dv$m@G|@|()qY}Dm½v0HH ǰlD5@э@ɬ$tA9@tq#zF~\-PdJ,xߴ|(ī$`ThP H@xCIXb( -0F îؠv_a )pHC 2r+TZH4`_(,ۅ|Jč1*),[e;RHXI(DN?;-4P"@m,J/LNMq vX*_ 1`A@#ȚAn$.1 EJɖC @NcxC/4vFH50w"AϤGzD'+D:/|͂ToZB8L-q| +$mkI}Ȓyt BCS T@&RJtZdOFi](z(_@4 8Љ.!1kF슊(ND I( Zx@l_I`CxTh#0F Q5Cph7@L/EvT"O9B7B92A~CW_n >GdԳv uEpNf=f5% l{ H +~Gds3WK?вD(sP !$Yh;n dAgxͤ3*D\ 1#IyL;l D,AE=z[%Y@ӊCԙB aJ8 L(V O?BmB حr@?D_GK6-x%DkQ9$8x((A,Yh1Qm@ BugkJhG1bu.Fa䃝+ĤrUr'iGs d*8Y$: Hz+< - 88@BzA HԊCyBXBLhdo&*8قBq :$$P/| z|3T0ګ$ 2Nwv\$WH?n|*mU911B-5h7,,vt(?8!PYQV !P 4 ԛ^ހd @YH rWNVLZAh .X` (*b \PU͛&nm]mS@K\-"7g]@CBA Μ(\lU|9D.Y.h9:0ۆv`.Y@XU  -HD q> +8 ()) H1q+wfX *hɨj͞! :$ah!AB a  X()  (Bps6F+ [\yhA ]0bt BHiR(4 g *q(+! 0  Q Ij*Q XjH m Daq@ T Ү+z l<(1&@aG7FrZ,L c bMT3tThVHܾ8GBa@!RR¦ [!d&$a"DaK`~ 4K ]7 c#.:Ee60-`(l]U6P &g|`0( %G) yC@& eΪ%do u(,[mVeb1š[PWѵ+IeOd-,Zt}3^1Lj+!05ͪ>zd(uϛX:`JJpb(#4sE6 Yد̹ :R#: ]Qs8X3CEX<]$j_  ¡Cq`444V[F\. NdbK:*\'a$uXP øe (r7*xX x *0Tn,t2H`8A*R!3D h#S@2 $ +$Pr )Vp#o$ `|(yC9z1qF?FNp3,@6i(#MӾU@"3E Br2F8P⌂; p5 PJQbҔ"#*{( js? =I!+u z"&d+qpC /@Q # h@HLϸlg7?JA h?ё@QxzH 8~c =`*t1H$#bGE4܌*҂&-R,%!?}؂i&~ƽ%(lJ8HiH@6^}@-_2'XӇ, aEL,6X-@;0PaaCnxS @`ĖDd a px!*A> J"i. cOHSA. ts?J! KEAPrf;O V%?d0'riX)W`(-RBYGRK/4Rj<™@ÓT c}(`ĢըuNA+])-5H` ]5#dfbSD Fpbwx6U7"=ف4z†O` *0ES6tb a l*; 1cq 0u$hM BK$,aYN Cnu _t:}=P(@AiV VP$dEj 'jb0RW!%b1euh&@j*bҐS?F/[:D {( "g)T&pʐ@%<0Л(#{EL.eilj b,A+\OA7ֶ@A _AvW0r'a8a*2+R1{j&D!G5. ~$AN|L!%„f!f(`" ^"28 .V푰k d4ڔ,Rcfe6 GȈ B;!Tn:I: |%~P ny@pcġ\HBb [R`FAo`=bAr BA$R$E.@\gJ1[N 9j! 2X`&AW@>D\~|A L/ @n~,t64.HfO.k"! bt!EEIZ! @L X|X@y FN0@$@d@*?V! q -j4A |b0N6"C4@d@  </ ̂z R$  ɨ2\9gڀ&@(ivJ4B"4 qeL!DrRV@ 9`}N* `hc/bu PJPJ†"H#4e 4ގР7Fił'rA;Z0( 6I2,#P!ac``@ ^ʡ! b=hH &a j[#1(""n-JgL`O" (bĂ q)Q-&@*MQ` 9\נ",6E縇ĠD\4րԇibOPaN_D4ht64,@C-7 ;g~ފ 7ce&! %&4O*2"Ea6aN%G?42-rUz:k'PJFL HV&!ܣ:!bp'zAހXg( z , aCg,@}.4(3HQR TH`4lha*.ؠP\TIH)S9aGI $- e(. 6*E XqBLPJ !aE`Px`AXZ~ eQbS50dK%"Oj D F4$ f~;֠܂I0 %:I @!@v)؀k.`NmN@ bZgnFp٢DM&-~i3@bħ~⩶R}4tA{S oF8`,8-֔C>K8@%a3s#U8 Hia\y-c3 da b 1TEy"KbC!VTCA)tآE59,,Jc& У>:-?L ,by.gkPP HQ & SBTtAZJ,Q# "vp@5L '&[raW, } &xHSt 4^7(`G|@+(Pd< "`qJ7>jd_H^P$|x(`|Au1RaNx@,V^.` ෮="LnB,'j ! |a$`c.jL8`(FVSg B^gJd" .V& K BRandah`."F沉eK5'V-DufF[P☔f/ksd (@M(<\ 87hnخ u@bc k*lJFa_&A&! # d1NҸIXYVn2x7 xA !@ \ 2>*`.(آ}g T84PA8`a\0>nnS,jn鞄(`%  Ȣ'8vFki4 }:@6c(Ac.R6bW @)48NJJG96d<r/D~U{Da1f9R("Q:-\n@0DBB-B t4@#5' s6.9E5zk/MBDsL J}dڠx@;x;e7"h|z`7d 2 /oU X`R6 Y3N( @#!jz|,j.4 BI P e(~|GlΠgaQ| bG QNux7PfQH^ L1|!v!bn#5࠸Pt*9b!Ĵ](BJq 8 `0%`7CcA6Y\D<d&Vd-#Z=V &{8V|*X!~$/`g'1ŧ9n,"QQ1eRcLbm䯪t,<dbeS(AMA bgGjZR~ aD@Rζ'hK  KcbdUH12G^%)HlS1B0ĖEFBFI 7嘞WL0b }(MFŠ%}+$Pe 9K C(. 8r5hBCW(P5Y+TW0Չ}sqxpco<` QV޼3t ! 6 cuX?K9Mp PZMX@"҄Ԇ@W Tr^a7gLh1GrH'2bXTKG* b1 .F 1Մ#T'ñMm3rZ6RPICAZA\`Zf1VPhtFL@P:qXBArDi]fÈxΈnB DAU6Ý:'PA'9($0Z} uEHPr)'pQ졘BL& $|bXbI @@+| '`\D\*aE (”\U0М‚T#Nސ] rj0 "Z/D̐>cv3{Y[RB&`h'T@A|tmi?1П1q-H@aPjF& BK *Wr!3HE ķpZ #X[P2Ћs17<<=t(O+GȝW\jC2R@1p\z]r 0&cr|YEf nAΔ^+9/"u@*C0{ݶMh#ޅ 3I70HnpP,-5 g6 /b [lj]f$"|+ H CH"oCN`$:ׁN:=o3 .R2H8PkUbAPDK ZP \DzW+ ڂIA)O @=আ6aAV710A,aI=p @g"؆1AZPJA0 ].0  $Xj7!p Q+ :0YA.!PS[lh,M#<P`;wrEH"&Wf-P'Z̡N@ qa&.>8q+a}إ 9gFn Tp.0κO4r$n,@2$"AD:!ȁsN0И\N4.撊\}p?$%xIt 8@ S K@V SG+s>Sy0@mb H-1CA 808ke1 F͓@eЂ!ư+& 0P! QQIބz/ \F]*esbhq#k3rNAN cl%qT61NU/O$2嚶ɬaL:RjEu@2@!U'\0Hf5 @H 0? R!s*VL%Ėb2ȌC/trCF\Q(ep!#F ][lP+cPf/,Kֆ]џ `:t9 2/B$2 hgdRF@pl!D' Ā&g  V&gr@Y-|a&]'a P;pb!TCDhZ[e| 00@^AuBt <)gNi ? Bp̳\ajuLm9o@E2I!8<:J–`- gQ]' \;T)g1 "<ZÑpkH+,AsFUL1I^!6!<c`9g2G* o:+x G1@^ɇ4$UYCMsBEGC" Yw:$&_ `1)M)T l]gf]"@ *Гc*Q=i,1*B')$sY+h-C @ `C 0 ! ۀ!#UCwG08D^DP -W 1P? lڲPDBY59}pokp 37Wq5q =۔@ClN%fbE@ƢM0 SRa'vw| ]ʣDCMe+9Yf7ZV0U~`CQN&R*_a„5 % 'tIhFKslʕ%Ki~dHHK.g8iI ۠R1g3IK&L솉 kLէr)9rP Bq)Tlpj+?5<@p:>W + !HHP(! KS-!( />i(ò8AjJh+j><".")AW!aNd1e1HKZB3"9 #q(`Md)l*6%|<mmPN `$)!NE!s%gRI,]  D&x䰅@T*@p2:J-e,03& j3fpezfd2|3`&F#fۓ'rDx}6Q23bKNG EeJP=dAbQ`d@N Nc( c*tE{WBW@Dnb`C!a#TPW D S|٪b|MPq"oH8=V`ּqE5(ɢ1( 70 ,hJ,N!q^\PPH ) $bV= lV w!`@%-Fes5DӎLW~>b/+Nq>ABV1q,˲sbIʑxr %KPI&Bh<r4c[ +5XMHN!VP 43 G!(EBab2k2\*&'-a z B_ Nf#RVƈtY^B$0$-oCN ,*%1&8X=5؍+< ,.SR,9=h(`@)y^s (҇Üal b0ār"-(!nK~#HC5p"[-3ba„i 1@,F P'HP7 a_BdAY p u P+XB7 9lODe`b:A Nuʸ6g`qikW#E-g\@ju9Z?2! +z%S8TDIR gm LgA2M+m%Bt+Wf 6 !D0@H@>[}""I6TLIh#…l//8 5P.W сB虐Bph.@e2B j G`%$x - l4!&`(EQHjE.x\ )uנ7.XYN  X ZF7 bBKTr(t$,|ޛ(l*Ї7砦{JI@`N6r-pҜ F \w5sCB@'>cd1p›8 &=bHn&A`BpC¤f$%P@;[CpDτ\`'¸=Cc#E)uFqRDB _a+)m>1/`0 :B_Vt2QnhW@ x`&z67t$HkuBט~(^oe0g{Dԡ ieR<# X}ik-RVE[#C h:l^dZ/@,Wd T9C"6P{Mx4SK`q4Eb`f[iJ<ݫB5`Gph +u`FVLh†xs+&D{Ɯx@#x/L &8,>✜n `P&N0Z7С$1BŘ+Vm*6X܂LocVm&0bC`=$FK[PvY<'7ХP 1+䬈 s@)'z @g2;[03pL[[b[Ї KhcgȩtK௿ #L1P G x4Р3`*KX5\#[KH$P0qRk~#p X38>6 P haρ8 n2 A ~x.Kio``MK#+K ȅʉDdPxgax:(q q F :VPU @ Bp`/*;cHS"MQ #l t;9P #J601 !*TiHx c؄2jy<|8S xHX좍~vу-0`Kx07^0-HEـz`Ǽa¯0:(؈-c3V(XZMJ );iް)Yh"xC0b4>Ot<+!H $/B+ȁOs(p(‰i | d`5S^J"#K@xIpm8⚄P m kC1@%(2;*uDKҪ˜˹8Ȅ`{P`!.:0B[pp) 0GqQcX Kx  H‾ /0i ೄ@D c/EaHQk+1؍* P+( /--$+M/(O q*)zQQF PH  㰯g`'&d;=\@g G-&a$,$'W FKqĝ[oF! ,J$7{`@HOpA6 rn,YXɂ.@K`k,ww9ꝆQo$\إ&8HEZPsOjX@4j9 Ť^|l9zn *H7Z3X镯0ID,P `:!D%hy2<% &4ISЖk[bǖMTPH`!M0`` .RSL"Hi[9A?gxpab"]+)s'(7c E 7 ІXJ҆ qR*@!F07>q1 Aod!iϰT+& KrBÂT#aK8.:KF(GA/d[$$0xOt+6]*dK'pPh!Szч |ĉ7s6!I$5HBޝ񓠌੩XLeUU AD܀9@Dw]1s̑vт2P|j;L8@Q i#s1pN`2Hm`́7rȂƩ5v ZԢ;5jB1|C &хU>Km@ VT"Ԥ !.xT 8K  R EB.gmx>m @uaI@l'0jQ #sh 6lh8€. U)Ƥz6cG6C`* "DZ \`?Z⥲KJ@)4cb O<@?g1 ~)O8@X9k%F Zo .ı!\d ^e@ߑN Q!p V YA օq (5tS#3!#8,6>BD oXrvp~ A ^% iY% lrR+?8 `R.Qga|R%EKRG)PYF(f):8 0l."}bȉA1pMÁ_5$E=@W9ÅA_6CCn4mH''ԗ#FmnKajJ04]#4GGy5vCϺPe*c׸N)I~ N +\a2a==|m!K;p<Cnh$\Vή:<.K\tqU s8.H$IhC`nΰTK]'1FQ*C7alM`62G/AtnfB޺ѹ\ȍ.pwMa0$BЂ@QJ&@0'2Ǥ)DoJ ч>'°aN03)E‡V {Qb@F06\JtزbȊuщof0J`D Lbg-䕾ASPOQt44>oo" ސ];|Ve#β;m"$#2@lJ. jCHbU cpU rg#~70RW>FaB G WCV dtIs^4%>xXO $vj$h5.rFNOwa$0 )ZQeYt" "Um$p I%yfWo34E]Ȑ`P0.t4s@%Uo.KxXt`.vmWHNGzAW'.-6?W\pU1m\so pz( ?BA2-$b`LGpU " :v %s.a.c%$%& V8usgI#}&;Dd=we% QSC#v3Ѐj$K?&7d.RTv9qQv  *G@( `[W}Ux:G9.4VjP5 $Q8RFn6.aR=2`ICUg xWCJ% <>OJPM6` wYaqaP0 fb%L%G/ef@R"%9&$J2Fb%.r`) o0)il@n` F %/55`@vam 7`B_5HcI@f  J (J0ri2BAPe:ag^ Дp PcPr{' iY8Pa>9s1Uo}}iW$)`5Pd r%.xr=$ͅ H#JrE0J T]J)A;"R`p@.ڰ8P03GuT$55W9:LVX " p(TU^V4޹PӉ=V2/!U %s滧P)` F8g Bw4]7 @{0USB O V{B)09j 7`C {7\c`7`4iJs/G P PMtsgnf%xt$%ưvu`P7N{0BQ p$11 Q+<< l2[k 6yg9ɘ&gb>VrܧQ @r[ѺddrzW p Q iPRpVCC%yBDd[KRw3Mg (lxSS%sV\Q-q"ظrU2xK.Xg+GVhjmfC!=[PpBxԆh!wEQEi)7p C%ir)G")>gl.ABkni wp1q5\1<` @q7Iw8)ulgLivv& wjrI]Ĥ(>'p@u`  n MWWm!7 (f&FOrן 20ݳ,/ 'H}% `Yc6 ]3`>9 UaSBHB3wKŔp @%TH{ pfWZ3 pBSR*t riP@y%H&ä^R9{ ߴ&iݨis oAe J| 䧖 Hw!sd8kyg.6jC#K\R@A% Li.x)04/%YPVi€ oW,lPFUWu[?dEe!x%pLX1 0J @X2#H5l'UA@ pҘBQL_rR+׉BҔ ШPsFm^bTn5;sQ08&4)} 0 .TS&dEI ui2RIzlb @0^2^#q+̲P˽}'QzI1 %_ h$8<V |j#% %rpջ-VJQ6tpoiКꐶ 5|z.heoLSD P5Ft~j p4u@ & ;0 |,л+ `s9tT$8sÄIR_(\Ҽ.&`+{B}Eg-0 0w 0 ,@; |ЍI CC:>C%Ur'IҲbWKhаT fnTEXi$uIl.7 S i ) `d;j` qK&mVTӪ91ꍑ :JN"隤KtY7,BXQI.eSKęH5YnP&@ů7 'G0h Ox?[p.N\Nltbܶ!HB10ߒ0}"O't !.\l'3ۀ2RK[Y`dgDp{dR=3fD(P lWw,N;? LH . (J(\nЦ1ţ B:h3=8EB'sJl(b#"iH *f PjK8 g8CeJ&2 2AÈ!Ė#_b8ERJDNd !VIE tQH#LH3ob'$Fℇs 1q!M=#ˡbm(.QE=H>JNo:[u8 lMKyKKvPWi!3'BDq Zi>VN"03bED&aN)RGFȈKGXb 45dЄQv)>J2J8!n-,Ц^ ;+A|\ v/ #&  Iؘ0 \k?YҭrP6 =SZdƄc!H9W3-7R'x**#L4'Ea^]v)M|ޙ}ʠ/a L0)JHQrHMnj &;nȳRk`7!$ֲ 5/T =m!ck*Vt zpԵ"bsQ6.;@ڲ48)L CQ2*$ELt'!YV&|@:R2@SIC!H.p/%ܠgC50lk75PBY15"7V Nk1Kg~tYI dZᤄ l 7`oFzC4ԙ4t}X+!Ƹ0@{?xSC5vKH`":ODV$&s?1;ByxD!J 1CsQ'FE[6/h`VF/nS2YԒ/Ә k e |)#ӝtb!'D3#oxT|SJaؒbL@xu($V5&&Dp*w%p 6"F+.ц(Fj6@aC #MZᝐř??zSƗ π@@ zH+ ZH\R"| <"/r]0C]'P6/1xl6@Tn%fD Dp3 1CxGWqsT6QrV%EpK^v?>cv8?hf!Iy-J5JMBs $ 0XTѝLN2+`p+!9?2,T1d3QڶRsA?p TƥRrI8Ren\w@*"ص-ivb}6BwE&lV`U "zD<D8<AOd |C9P:JFFU(s84"p+FXKY:(k816B`EojXFf] h6ԗ+ڐmp@9d00 VZɸqB* )x(РPkhK( "ÀRW[K%?2pl0 6Xb"ƒ`sD`835I/C9$#FXm)A RQr #_g^XH hsz"(#7q1?0FhAPH;=`H8mm(ȂO=;ddB9&Kh1P/5@2\^pb+蛢ȋ4p`F0Yi-*8ɹlY 4 Vh4C#X;90K32 [g\o?#Ј 2 Vp4qxm`|kћw*i8Tc҇ CB^Bf4!СU0е&`F8=FcE!hyI*h`A> S"=( Fbh$mE-yh<6(+9 w7i8g3kQ V5DK~І7(X 9`=WLKЇh1jʣR>p:!P-XFA`?1Зo(1C;J3xZ?v(1YZ.IQ٤˜ț X(kHD40JJ K8ZȓX1A1 \)lXbgp`Dh[p (J(!I}H~Ʀl9V14 *b+~Z$F%8K㇊S: JL"?рX?Ä9蹟 ؈k 0x29(H#Rg33 9V27d_HాћJDb(`L  5LZPN⺇jJS xk]-p"G#s%8RUЂJG]˼.`~1O*`SX@P8(i(K.Ss9@ɢSK ETp c ) %ћ+*tڳ=;K}=LȴFܹ"֢H%"Fh@:1-A:h(0(,4Q *'yDI@DH?`@ŠÙX22s:A`az3ѰҊ`x:1POܲiE) (`K[8Va=#xJȱL$!*hʄS~b~KI^X&p+eex4)H qT9X<7]W(;H%)0+`.7SO:ꑳ@ K/x(axD $I(O@sx30(+9E`%=x !>0I$U+RWsR,ZxRN{*е46*+x)hL089+pd?4 JT.Lq?0 2y@d01\~ 0Ģٚ g\9crѝ5%(#l.!e1ᙈ(f.P^r:'Fe/@Fbbvh`qP`!oyh IX]h5OԥZPrxJ $i% 3  ޛc# w6xHM W b!Ƨ- m +x^NA;\+ Nvx**Fx8/HBkit(Q {HZ w;BG_i~y @e=֐=VKHYK6[0!eG ӂ*N{**. pRVL+ҧ]p0r+1vRP@+$([SHL0#E \xʸcz ݅dH x20yI jÖ,QFDe`}u:V#xyl#9 (uNmXbhޣ梸). O)dNcP##[HHj#SN8eP:=R^7أٟ٪sPRB$HUȒK0MD մS a 9x4oX3k8V_J0#l:1x`&5ee z( 0B.Rep(\n-NӉ(ri/s,mXADSV1CMHVщܖ,](CO"YF3x3_Cz+#784#0Q;Jy1iQ:Yp j8^+=;hvpvN86=Pm.Cd`]8b@(ӂjkڴ@MqЅ\'O`-0!tC> )Js1, q14Ÿ3Sb3\إR ;Y6TwR@ԙ-A7=KbH }Qt( _˱D邘m?)*N(-mC\s,Y:=D*,.`?hHcdSXAyتkS(bX D dzṳ0:xxytf_8Bڋ1 39*5:ĄH^%9:}Uw{XZ(bwE55t9#u+;~H t)D)*] @f;H0txRb(S PL/80HSY $ǨMzp-' u%MY8Ld1eb-c-y/4 4&)5%Uq \ +W˙vgia2*,P $?l4p2 `h) 0p6K DPC%BȌDjN##ZL"3s) ƃlLV˺oV1wO0@90I 0 XH ࠈyƬԷ8YWdKB Sj_*oIŠs*+H"v( -<#3AP < a$}Ѓg 6FX( n!(0n"_x(=q(`A4]J@Sb ??\/ق')h;j(T i*]@L@-t'!dTN ~2 B Pꀙ C cƘ ]Zy$dM&Zm HkMT0@]M,9k d7ECS9 xl`Ž+D2cp(#SLUԚa@z8ǐ*X?8՟ % k2*a  @!%4xr%29ZwaiM@nc- yUU}LzsIPd2]ap=0jֺ`! x0 -k &^9y1P 9)Dcbl,f@LLT( -h@P  Y1J*R)N90BPTaz^ ? |"[,\aIa܁e5p3]: [5]` C,AMjgakԩM @Qm \!@8l3Њpz{ 3D ^hC3:$G"GŅd(ׅjbJ%T*b=pZ!!(o2>\a 07ƅ( 0G" ë%xG ! QgA`@L+F 1H3|tnBx$X9X8! z =_V/)zbK Ωgnf=*ȸt %zCJ G%{ԃ_+gl 9@kdamDzA UZcN (g81c;ظD-jc5X{Hч+X~&D!T 3MF[n"c;qS!DB'@e ..N֐T(4.08^nAe@x'4 l?3<)% ^!R dH+%L/3xQ1|9C9AL',SG%7p,L )BDI)I=fI@* a1 6` IZ9__lMhzj|О.?MLCpJVEpD)KApʥ@PA90L N ֤ i6<@T馵DāA1XL*bqB9C"ԁ}pؗ[5?pD@A9eD = U9a7Q,;tDП@|/ăTuP4ĥz7̎<H DM^?/0&ANͼD8Մ!ö )<+Y똝нU.0جm*'32HJ'LE$3Y,BƗMH@Ds  ˅#W^Z5&B>X6FƊ!Ӛ O#*b)?I.$Ǩ0EK+A . *B ?\b` ;+`e&zn™h&o&$4؂U`%E+A=s2@@&AU,Wb U @>B,'G4Z*)2iZ U'^V_l4iI @l@M4-50gpKX Zq6襏,Nx/9š# ^tސ368 `v:6Z4c([w! D"ڂj>$?sTg?n@QT!*(tJL j&zIƙ-d&d*c6z˅n4cfbhB ʡ705CV. r@(OXl\H &k%,G+;@S&yF9ƚȤ쒃FR2"BY=ib!dBT1Ez4j_iA6ohb'r&ACh&a:40P@J +J5CN1Ȏ8.g`׎ fy&byF>#e˶F&h 6Z~Ɍ0726 Z'K6-,FRqխQG2KԺKHR6#VbW;v 򚿠 Yg9H)RFly`h82REbb} 0[p ɲ.5' F "*P@18ЙKt:` \xI>%DIBtDu#eó/ ]p{Grv)QPc-Hj+`E>S$x r#a>U ) Ad4BM( ! qtUB%H,ARѬg. Z& k*,i9@*҆\&|_ u G 0SK;!^(I$ (*1z!X ∝d%9@fK߀; #1H9p΍I7*c 6z 0@h0vp 7>Ggj|BPs0I$,JUK !a BjQa!MR/ VᗵmMDY(6v@%1 ^5*Nݚ FpC$2iR|-4!!CNt b93갣s`VhJ1ԥbꤱ5V;0PjlX /)>CPAѣj\A b@@\d\A@m+*bc,0d$ ৚"bq0v"'\ͨR2& v8 LDz#\>aZ @J$5J2@ d`NR8;{ "HM@Ac! $JXO}`ó>  : I \n,x@ B"x~W~>G@0+^ bA!@PP ؁ *:h4 E ]ARN/ 8 B(p6)"w",2&DzPx!Ns(;c.#:`{.|V"T 0ir b .!r"μ6`H l-BAb,|"Q!o~ $xY'(.J.C|B tA/pQBm0& ,I 0& .e=/QrpD/l/wD$^`N (Pâ>(gc `?\0=R}8 a" B"!#˷!OA A+%m `qO@)Dna&&13-zr_ h aG n* bJ n) N'gEb/K]zmdo 2,P &( b*x'xZn6> N x`b;cֈH8Ea" r<i* rn/OO <2!`6aSNaq2jlrΔ7oH4D3mB n# -AԾ)KĠ8A n@|8F`H-%bX E JAF$3>vi2A9;6Ⲯ` L a+Tx pH#/!uCRzba! fFY@fin4MO#A< pAA@S;p|\rJul] Ri_B8Wm tH|).KP!x` ""DsL!6 ` */*iyDt3`dFADsfz0A倯^4x(ncd4F'!6/g"hR%A$c?$iYI AB X [lEDbz3(IU7q! 4_{-)~\@ SFO:2ArDbgXh!F0p-HMiiETj>qT d &c+OLJr8LH .6Jx>4_Gyc{j#@ 6 EW6% JkI  @|tlK 4\ dp@!  B`9mU bقm9d YFp`@2OK(B"8ABA)quBNJJB>$v, JGlAQTRP"5T5[An) :9W%1SH'G?!tk4)ċx2ѢMJf ni/m m:'.&Cq -*djlHnn+d',& (Ncڄ2HCW0ȠQ."{B 2: W `C6aη'FBA@\R/E$& nkxڎ6M-uY`"!ndB/]@9'ai ]@ܮ.tѲqPDg-S xAt.dMRFTi3  dbfR|E#!j@m @k | rn 6AT&jzk\]!ǥ]vq.X{p&-mZ9z594R&vk Um{& L~9 o lHDը┻{ 4rhsbU!`J֩MdOCD$:{ * B$%` Gx*`ơ g58BZYU ]Bp@"VDf%nD\dMK1#mG7 z7hWx;*y3ư}a4ۋQXȄ!тbT#iENMYBMc9 1 v@|%S˓ u(X%ONPpm YTZ 5'`p@`HGn[HJ-܍j>Ax-`8Gq:daT0+2hj9B\e *DABQt 8C0icVBHⲸa@I>/d S"," ;,%y|7$'ahr * A1rPXB)(Ws H K$JY3P!dTl<1 MId!kk:smRg:igP ^SZkE11[h-})LmgVg5ܫvӜDUҨ|XzSpllcAqD< Rrf P-Fq ABd)I\b0+  1]1J@%Ā *;?+_FR)L -Ԙ BBЋ0P HjȈ) (T" `zT%5`jg^a$H1o+Q[AO縧NuhsN`p3:liXS, Z1 ,_g[BF0 @/ 4 @ 4B!e ʝGO%+@~Aum(zL)KA^--c$J$aXJ -!6(BF*oIeJAh]tsZV0vP]m 䀊Ɍp32NA젦%ujZ(Ђ۱#2>҅.|TksVo# hXfCd:ʐ, p VQ( 8@-)߀2.dPAe88.qP -!['05G7"K~XL!0Αf G#gMqtQ?]A)`*hr$8!UE ECK8sd$%A4FS"ܴ5b~ngkK(8blBVxbBr ҐE L:qwXY9! % 'P530lI@,hF~B'9A'00(!{$r]sgGф/R'* S*Q@41>l%i@'L<7"`PvazRPE38;R!Ut K+蔼#0 >#8 U=)KDj  AtA"wRBBmɒZZѕBPZ^E -" npdA7t y;F {2M8Fs,2,!SՙGH"dIsQA#P@D zVahA}(L2'|2D@P~zHUAT}Qb47p b=)G`aA9LIbaCl947_kJRQbUڕ+GІ b 0 |yi7PyUp %19V  Qp~TWj0"#8"#FU]!{X'!;x=FN2)hqIP~1kF%q጑r`JB{* VJ( *q@o` Ye T)=ld1'!tQEl%tIvlp !B (Đ6Epd%0}04Phm~,0Zp FwFf0 EQ7!zzgy":既=1aAhrqQ}ܓv B5` 0%1Ҝe`N3!T"Urc[:FC[l~&qbP P]ꗆN EAw`(7/"C2$ؒ*s"<8Vְ+KP5m@ NXn32t9R Z,E  wB'3A!p;@[fVr+P[91'$B_/[{C NS$9pאV5v4l|p#NZ5b_ZB &jmL}j%%QMPmՔC )Hap@F5́ pѢ3P-< Umx0xox>t: "-a"V켘p!{`i~4]it=1!8<(JlZ1%]j'$}VU1Q5K 4TRFK\2ɱ`T ,`i \MrRL"9Vw!zv*Y`N_ zV8'PBƖP` tAz\"J Gqmg"K811"e|JU i԰ؕ35kYb^UaR]UJDw$7FLe'dd4_l5&iSm%ڕ&nIjE'%{q|SM+2p1xZ(G^=U;e Xmm+P@6d"pnAO^1   EK )Rf'4,2"vy.j5"slL%=nw4_Q%Sԭ w9]<퐝ૼ2- S<}'0J!N.hF@4)2ȧ#\|(%2}Hr̈8+R ] ]U G1  EJ`oaxЕʠ eZp"iTڰ-\ %#Gppjf!tzҝV%5@je )`A$ ԰%O>/`K4P>]?TK$ yRJ*~MFǖз(N\JbF.%gA+wjX` vMT7$e~J ;|9Ex * I\JB  _Еae6#=[Q,KfAS pmK7@ D*ќ6(]$khr pzs;3 !{cqbA s1k8F~Uha[+ < aB\)v]MZ;8~-k.m1iԲ& CB_\q `[nTPEEt(WqHPZA0,0T@:U$e"-3;uhӆ@;B`IAKnP2=zp ZPq|]7#sMvk#hZ9E 1 p l.xrm y м:@I79iAĥ .0#bx(4 i#v`#dKj`#v`B 6ɩT4j*䖞Fo) Vp$ RZf ħr Br\@.I2\*`/x, .P-90 KtɎK,4~D994(~jh%J׀ؾpa- I.r)-\p'rb^buVSsX!l$;S rz59e%!Dx6>Atr]Fzy0 -dC#^楠x ˡiETti'S8`fI@ qả'Uv @Jm vL%P Z@otb'5)~,@H ipd;aH%z@ROOzbi2! mA|YKC rBOD@*K0D `PLdB>i* pVP  c%t{x@1Y(lƘa `}HD7Vƀr 2Z7A^0{B/ecNa 5fy `AdB,iHB5H@%]ȇ dE]PWU1OAIV6`AR(c[̀4@Z-dhRS,0gȦi ipQ 2V둥 (&E%npÞ9QȹHF;[AhM$פ0%&`e%Hp ~aC{pFK€Bi;@w%ݕZ)yGY- \2`1aeeh9% *(xF1_gjJs0PJ ʌEo cN"nI:`.걁R`{Q `!yup6\Z@ז|I-","i`NU RV%[p 0[^n S3 Pb` ,XTǗIڀd^A1v|[b ҟ.r k) 77xu;Yb|aXߘhaY㠷  4`p@9&co(Ag8>hr(x7ۃ8@r/0!R= X)Z(4Y؄38rj8 p)9 M½x R:K*%Rڤ9E*Z qH ziVx0 {!!Ei8@n{@ͫezтj|˺hb # `0@1d*xM[H=XE EPt)3::@"# 8+   9᳣B s 3QEˋE;p(h%+yπ_j+(&K9ie2k5~V3Թ$Li .P6Q9W _JIW %I z #@d_1ds8Fh=2|ɗi̫[0. Ȓ>t$D p"[`4h ؑh 8 /< Ф̉蹽(a%LJJ>:Tr0H͠cI:`_%6ű-I V._]K9@;8x|x;e]Z&C̉R0`N]8-n(K҂|IPN2 pK\DP=~+8 н#*[^8M1M, >L01ȹX :";Or;0!K!{=&c $5 @J4OyLN1H9 ~hM=ҩ9H1IO1@ÊTys z[ !1k=єц0%0Ԇb+򩋛ghW0N zˀ,ciZ_"m ;`Ġ\>90l{:~HQYӏ1;`\g0(٬MO=.#9&GXuP0ٜs Y8GqҸ2 Aڞ*/AqZcR* MU? ̼aR13\H)4 B+ 9цlbYθbc M҃0ߡ̽UpAaڴM8M= ]Hro0gMT()Td.rف[` h1Vȸ,`ˇ `BmsZTZs C#!x;` 7\(R0͉4ዳ> ?ѓ3Q 1QV5!5^A6* @ ş %F פz`:a?W9L\+\X-RrrH-K/ZEZ[7i;Үr)C8=g`68↉;@(+w.gLՏ$OvlŽ7eýxўaZňɾ%Ф%f*BQa HSOSRUh=50`a8aJFX0hvk `Ml`F}g0) >C[1=Ї"X1x 亳 9a)Nn00 V S?>b4("Ma`@>hkQ ;7SE*`#=:Ilj O>.d"Q9A;iY&zdS!Fˀ5}`(h]M` )؃=Ї#.?8THvx"@.*)gB:.5)ﳪ-; q*RxE߉6adȴS* u.yʙbx4Cc(i`Hɔp+nifMc?S=~w&![+Ш8b8:<\[oyHw1Pz 9s IQaso:KAh "h&Rw`5pBXZ5kuQˌ5KžUm9J.PbI̓`c=a?1QhSFЭu6Ba :51crw>lI*}eF b:'^s(m؆Ypg8aH,` {q -G wTOkؑ=  DAV'O ?\>! kI*=fȷωYM u[*a>YۛYw4s` V u+.ʟ%j#p 6Y~V@[!5H$ KlrBs.YǐQr*ժVbͪU*v3c1`QN|kBG#U\TmVp9Ŗ6x-+7$~Q:M #齚dаG辨CWmNp`6ֆ7򐼨-x#(;W-pZ.ԐUV8\>I+0G ;\r 0Da+!KHlPSUYҟ%F1L!P1U83N50AUh%9A|Tw 7ZlTg XHŝ#pĥxťe_TcǗrRTa&HHٞ%zYU !]ezցRe]q P^yvRuݥ槤;00#B7H oܐБ-hHH# ->M!T^HX2%p400Ώ;;4D$*Bҋs=,U`V"9!0zMTqҔ2Ĭ !ED;V 4~sGF7{TET 5b`Dm_0T42P4陝XtFM)Ǝ  $ Ԫ dM@Q }h07&L&:6ġX 'a:A3ET1\Nx 8!@#?u;c$7xY혆S8m xOXxj !dZiR~Ɏx:O{ڙFã*K/qP58)o0 @#VǬ@aH4@XꐅODLs,K)!Ӫ M )Br;tZ5lq(Yb:W?N$ 7 tY:zs - 1Dw5 ?7K|=KRK1Uȍn)uÃBk P%\L5ϡ :!/!i5W*z0z(A9?&4 ;Є`8#,_!u&I6t MI)$<N4ǡ ۂrAjQ ik*l\-B N4':6 pI8D 0b.  - ATZqqLT3x#+nF %w3l#A4$bҔ4@;Ub??QΚ~\[1xSl4;iEVNcD^$^ER"e !N)TpIl\Ol{ __bs.Y2N):6_1ٱЁ贋0.p/ YyըI-nӆǖPܑpp0׌E̮y8I3(*)QX!X=!cLs0h/RTU`D|hM |`ivƀ9Q$( 1Ht`G"BBf[CLB9x)(s5z-k" H EsJB/TbP KP-|VCH\  M 8z,TEYAq PJl`YgD=R<ҦdW WeƝƛ-^,n !pA߸$ &KD`V+PE+ 2:C„L; VOI [M>H@-c"lu ťq\,D-M=^1<WH`FfImPY: }zxNT@ s[ ffE pA#lUJc}a>Hȉ(^ =fUAH8S-A-0H!jߨULj5HHdZ٤tKH@> xJ؅DC$\Ewe ᬁ0 I.A0(V8$mE$][S/,A\,609‘F*aYAe!Gy .T9nY_ =NE4,Nh ͱF&FʤQf?ce^)Bո!.($v~)1xP00HH7L㜂VN-- ¼DwMH p@?tSdN^iZ}GK)P?"V=(0#*RcC?!z^NVE>,h^D,x/(-Q_Bf XTl^H; tlJ" p6 6`m#7Xu [ 0BO^02pYޅ102DúCݨ1n^hAN%:DMxHgǾmt@f*qULʤHI-#s()Ώw08|?[ָmD@"&70t17L )L,@/@H/KtSCqCT@=`np&@U^E $Q& ÙV,0撾B ' &ҁ1du` H 1REw -*k? 1X,]#,UG2cC3U 3.023s2_ 2k|-Ԙ-(L- pxd qG`՛p 6 $64eeLUcFd ŷ*1l+61 l@BHُ". " nHllK-KJH8E"kE7*E e/BRbb/ Hѽ) -Fp_ mxs ?@"U|pHh 0g0/b^xsHpB#*16/sHPsH86oDhn|y|jg/M )Ci6e в %:h$,*` KѡEBd=4L"1!lY]DFKvL["uV e2:0$303 "B.KAD܃ ( Ȟ+E#c =c0ϠReY90L6Ol`x|Tl9o %iAk?8E sC05Ե`o3\@U.j޹J:2 lQmpPI5CH0 rT >w@675XC7],%-HDZ]bxc [Vt"C)4X:CHo;/AEAu+-HXЃ20!:&XE LI\08T Vl wÕTg\`CѸULwuB"2 A|@i^2hfީs51^HQ td4HOłAů@pTlz R%!T,HcEKh.,*p$TC퐁IDƆ{ o"΅l 0x^0YUU9ej (b*UT(iTLOۗ 1iYS UIeG(QwpBzjS(- Jh(jcZ6]ߤy7 /"wHC|,,LP+Xvʩ+NP|Vq9eAB)[Vc8Y)n"xj XU'Vx&tNK\N0 :`@$naE0(8nHG;x KDzAƍ%ֵѷ6=q{J[{cD\=bP>9pzO^8shsι!%.`-@!h r!T !xf "fk! KjiX(K p$G,)R#(l&=: E1, E,) Ĉ]yJdA҄qVH̴ h Hn3:|;x+$N-'O=HÄ ꔼS HUZ$8#$>L׉Z%]{ev=x1p!C;('T¯(k.M [ ˦(@b([ S8.yZ<"Ke^[,q̒#lq/̑If0CLG F2E]+A14+ Z-&\N \Y87UX9:0 djh3Δjs=:UnBP;+5 نxc(⮕<8ߖ`9 F\00!hIpdIDjG7AM6(HF*gPz.~HSN'k*KF~hMdA6~ XL .`S7RzfcCV"zCPĊ4LH0L}+ Yh28;1-oFTrgKDs.b12,M6b+V b MA`l_,`F@4YPQF~ @h:! BVGrԊѓx+HlH -D A(Aq6VQKqPJBĪisU&DItFe^Aň-qUAp8\O6<#/%(c)Q4!h ȥ J+H.4;BQ@%bĖH,R kpPYCX0B,\J Y="t)ā@ :7MXF | zsZQ\A X;`C&.q 3)`1aȮ-"Y V d [P*.>4ŊQܨM* K H1  -Dl( Q@?\A :( $8+$X-CRrml#. bo#CB  'pxpc< ̈D&6%lpB A  ZO«Zj8ԮDNV^Vd uT|Q +z *`$0&I lj0ph I°bJXG2n @h KM Ka{a @ba'Y¢D2&!:v&R@#!( `@\"Я AdB@!A rMd(<Cmfpo2#5SLSH=\l!Rǿ*>e@AdZ$'@DAI]O`~@cK`T㐞F! `4HxpHjcala/ME`9:k /2+VYU 4P"1^, 00@0 ba'T!'({%@SR1H-qNBW=``FvFyNmhT@ WY`̒Kȯ6ܶjC2QW'jHjMRF1#<2;g Bu@alօh R';5S3E/R`Kd$K@KՁ 88@f,z Jb/60 A2ЁcmzA6 l1B M"Ԅ8ʥ\ 5Р\, (n7tN'lR@@41WP "҃@hHY Z f$¦kŶ*Y]onfh.-FZ!3/[NʫUuh,phuƉ@f&p!>p /p"+;S >a *b0$ \x>AKX)d g)1dVRx ra4:r :Sudd W̧ A `>AH+Q!`RɆsNV`>p.@ABP+RBSg/it`ψ NmuOζ>!!VmqAf!Xf羆J @r3Csq@y@I4`f) tR =/N !lbŴ_\L"_  6P @@2 N@QaNҧ Bf  6)fG! " `XAA XeHUxA@Ɓr Mti\BI"x!kl XV4X[!0a>Y=A[lx:A88Whv!kHFO CLET&%6Gt, ޡ7lfr6+ Xآ \"c1Rޠ yN%!a0eb+ g \ '6N`RI$+H \H~p/@@= Bh{"Xeq"C꣊Zdm<-[X``[->`̬@ŵ`G!N QakSG?8CP;yA !! 8\.R5i MH$j36H ȀBI$O~`6!0`a P2SI~:SMt (:b`e 31*` 5@8iᚖ !d@ A4h+;I=ks"(x ۑ6.R -!=<-{oi!:>!l$ANAztupFĶF<# &d34\!E ? !ٗF!KiY!Bh!R2A.\,Ad@Ν [_dÍ`zLKb, 4Ɓ BI ih0f)f3\>ga6F 00`lq5!`E;o䏱1[a j9mށac,mBRB#$9!8A;Fǟ7"Cpt$B@3>Āa*wrF> $d~XHDKmGA5OVcxHlslI H*\Ȱ9 ZJ%JD>*BTpElCUF€NI 04XCT e \b@PuD` ZCXA( Ѧn]0zkŷo+#rI5͜9]:5`G;e0nHdι &ŊIH0nx#h;RI`"AiY`#-İpܳ>}Ri&@6yv%`"c=1ະ% 99x)&"K?d >8@RCvQLSEpd$RIm!w@mX} O``5 Cu ;0| @R&v@YYWgn&juUaP6x~MJ` V v;$G4hdr@4.Xv眳D,9<肌<d8 r)`[@pk=@π7s|aG&Mxߕ̴BY|%.,RaTG0 Ð@p( 8aiZpR1HX(C@o&љTzˤb #|ÈP7D);`.AE@&ʀ C/R T@r@RBsdNVb(.@"dea@X R1.c,A_S- I)~eHA,G U c(a~ ],p+Q {pt@r@V FaGR,)Kdb0h#uC N`NoS8Ÿ\䶻 c@aP>RG-p hxXJCv X<< "ua`QS rZB>` aC, ʚ +-@/R`${p E2Y*P ~Ԅ@2\&"xM da3-8`PgEu XҦ  ki TKaAV t`+\ ӹ0_=ĢQߒZ+f- p7h1 ׸ܮ/k[j-OM^R\7oFxHBc[bE9XqWVHe+ U2_=zk E \툏@ s7WIA ,,13`ZC1#Y"o ]."@ [rq p ] D"à-r7ە58XC`w]UP1Ufq+w%zgQtBy %7167U_SExs` q7c< zV `7bx qq*bG#:)Ftqp\48 zF` F/Q@b<@ :C '.jO0  U ?Qb`$Q1'` U {? ? hΈA ׄ` @&"hM?J'."Y@P]p=,$ `HrEC0Jp @ 1 %K3]kcaUs&Z%&fs6b&i!'kpAp,B(B_ pDBxy(BRcRy`v@U ' o0o 0|w7pPe 6GVQ 0pTD'" e 7S(`w@ z naFъ%+Ȃapeb 2 LƘe80 uEu2"J8`/32Hp@asifP ' U3݈tdgإs}" WbWڲU>,Tqr (\ ʐ0dC!&#%t:`Cp65vX6 IzR_7lARARWb!7 G~,F_p`'&@dIb4 YaAaU{b Ň +Uܰ 00)c@ " ty~P"33A "dbtTb w L`/9Ң)0|Ff8Na"t`Y-b3+pPVȠ39Ў$3,@ ^jM1 @O` *P4A[]d'7[i"x%&6QG;ہlaBE1mŀ rc (7G,_$[} a .@rz{ AY0paD)Z }^}*@m Ӡ(Gr< 3 "'ИS<,9W2s G$0&{fc*WtP1}g1-gusJ xTd Y$P` 0 YBMP \Đ Š H5IuGTS''Bsa, 3bGRFDz7|1˷cK7ȲVzƐS@ d ,Yf pØ. c/#? @1P9p 19~,b7!0p30?0s$5!U W20# QDR +,(r7rD` 1 E R,j7qs 71-a|qZL ުT{f%E'p P'Ed p P m - 2` @}.貰] 2Jw%$o2a@ q303 %wý1 2/ ` 02gr gC,yJ@$@0kY9 0-$03D^7N<*@ B.2 E1:# 600`yQ^1*7ps3_Ld(92y3VЙH; | E`0R(5-9s{Dpd Šoq+aSv'6π m ` ?p2)P0}l gp[.FW t71Q TG5< mg҈ô 1^G"!;1s@xܚ+@0QH( /2(CSgA$"B ڲNUAƒv6Ηb8#Y|-0Pu7Q}17Fcc7~32i(iyhl( EQt(Wx70 0R+AOq~e*o.-ߔp b r0wYL1 %t3cL̐Lw} }pS7@K9g2 R>*:,~>V a TZq곪g$?n1 C  9pܦ^[. C0 ޒx7|`8QU]q0 }g[,r!iF&6{?P+0@ǛUP5 @v0 Ġ, ʅ2 VL |0Bu0KH"< θ0)Eq"du6ll@_ ×0RG+4O(>!+WpҳƊ=듈$Z bDPZfۜK\4g{`@=YZbU -ʈ. FeWbX3>h`ЭB&4<,uf%xq%Y0_7EM)Z |Չ>!",X+ f8Wd MK:--  % @ŊoG#1|Kqq@+L&L3:sY;b͎Z$yD0CP$[J:B#9 6P /xdInx!f"PxX" ae#Ťo.ac ٘IB榚0% $$(w! VˮX. CaA]ԅ1N8 g`F[\7DUBk0_: ,E54,B3U9 * b" h 9B 薋*Yc3/<{oF0Za.<\#>aO8i>k/@mi?b3I}К/W#0BKHDAgqbEA#1[R`mP$pYvij\da\wb 2pve>_e C>ha*N DtIE_rqEv (•?$A)rQ#普J5 N!Y"|BT (cU `IMUMbӉ/ pyVb)'S4&j00o3I-[s'ΘVp<ङnE E?F/YФm&Gy$g#h$&1]<#\ D#X8"g<cYN!%Cv#J&*;lwQ\X=|cX c(P4 #qJb<]A$fỹp6ap,r(QBi H ^ҘF8͠3PHpG7jU@ !5h@ !:i;.찢 ] A&4V"CzUQ=*.BaYy+]L2c= fvI7HCȓ 9 `DY,RWu83ZD I@~؋0x96E G:̀q)E \I .h СE][*`tpi(U)x7(eC]-j RsL LU`3(E D)-ȁ[CYN]Cw!U`R(AM6Vzc % d=Ѳ7rq 2F.ž j0C#ARQc $spY\f~L76L~RdCAcs,<`n ll1—Gw8AӀذ1t$!FYà5ҠQFLs g C_ qmuuUQU"W~06ЁDp_Lm(B=VO %" (印&х5;0`@a"8 pXqi(+|2+tpXB=,Ikt|#ܯ/YJ/6v0Ѻh2L` IXt5 x 7Ԋ7aP Zԡ`.XI~(+zl`ٵH@@1 R:/p ) :8P X  F<(F,,\v0%Ty _9~:>ž` ARPjaP8g@)C?(֋`'EbPB8r 0Vh˷3% h =@nR lyRI ¾qp;ιn{|<}P(ģVhJڰb$Ѐ*aj*pz^hH2@`^ȇ^E;t@0`PKl),((r%\#niqD?3vbu$ Kz%%nyWj(Z)j5cȮ-}Xm/@ģ H1.pxvꅖĎs_@Y[ lPuK؄~mXL:c=%%I@,׿xĀ !+pMb-ٕͲ%C=y;ʔ,tQoh8^;K^e68:9 }8ӏL"F(I$~kɖ74 ZXks`a0ŲBC*o`ewpM )7fEa0[1? X$+z~@֛6ʋ ԨZH8[PZZ0hg(`PQy^tو ̬&b&0jo$ɖX%qRkI 8aH,7x7`]*ɂo<]3Fpg(=8I䠍 |01Ba;Q2I7x+qqKK12)K\exK`y]K,ɇ@9P/zjP>N0U ؑoKW7pPhY hjk;1 ;ˏa:6X468-%0'K7pp3~@o]ϋĮq('P4V/Hp52჌7T +I0ȋj4]@7!8\@6bG$hbaƛ TY`*7dy+U yo`Xs0 & e$ i23!ݦ,2(/0Rp0Hs}AV yR.`&6VxnOsGRKIHsoik$},AOX]Jj`j!B NN^h~ aop1sQHmh"ػD $);`h2|[ W WqDB8è PܱH`0IgUp w\ew@hڟ6'{Q/UO=0cd,:w7S_`Z <pnss g[RPdh8\ /hiSU.9a4[xhxP@o!:0H2co) 0x+ua??`/C?hp0؀~FrO0"B!׌ce {j(q(bs;(肹"@UVU%請H]? \žC;ր~VBp28^8ux$思HANmh%o| 1hذ˰ixϡ?p8 .b490~844oycI.g0:`N r bLԉO*U^+ذbǒmh-E }VZkkXqeˆVMCHXEUr 9<%LJ"nCCQV=3B_T`~.0VT:؄ZM8ndNҥa} ߞ1c=pQǯ% +@0l .o<.r(%\MJ/W +IP ]`LCe8xYa R$`gQNF"s3P|\1FظpKЍ (9 nD5a s-Bm`+ Y ĩ&P8}^Cw5d0z#`Lhx%?7(L `C!њ*ClJ5Y| o1oFr@C½i`I+8Ė9JEFnw@ ڨ?#$33 1"DCP'Ob46!tE`:Dlܐ؊8$1ICtB-`$G+FP3 SǻŠeC hk DCߠ"* "|X84Ci>Gp/U Tnj0W+(u )&94$,YXRHZ$" 0 2`dR07h:O Irgɖ\CbqPt;d'G0o˓6  Z#4$l}qƼ*-rXRUP 0! 00@7D-5䍁5ŗbM b MGE݀1_Fs !^C@`^o6q++%@Z `2 H!(0)=9 n`dpTJ @@@ÍBMb33)P4(+!D$k`tՐ Ċ7 1«hՐϙH#;,xbhX(Н #)F1u00(\yQ0q_pB &"0bBGC$א8D `Y,a(s`K| Pl* Yhy 'oT|R`+p!`uc7|]l @IAA.H \V S)F6a`^1 !) L8,,1"k<11Ns0M5++qT]p`|x%,v(SA Ag@hx- ֎d&NƐiM/rmF,q ,9ai|C `Df,X( : Ɓ4 382FBp2T0BX ɌUq a# * 3hRг܀ZI$  &p򤧓@fE/K_ͣ!,`0^FM@T!qאnhS @Ez!F#kH EvJ &4 p#HYHڀg *npGc:Hu9α&IfpEIPA6d4, %HbA Pt s&֐r=1G8$O؁`pFX\! `c|˵Ku+N.3B8\&HdqA &Q*5$D@Ԁ ad,rARmXЀrDad9` c@)8Okq#pE"v?tbDkc ng+9':(o>*e_@#O8'1pW5x '$P_x!젂cMmCdQ>p <&3p$24j/ (X^1<И!qa~*w3붐C?FBɅ>L4Z8u@!KL& mYZx0ؒ($36b#f#):a f@00pu((i 7 #6^ cY2#sX?% W ESm؁}NgakEzA[tAB)j.DP GI`(%14@LpAdC ]C< GȂaYFlpGEf73BB/7Tp@q?,+ o1AC8L Hi` l D$8;RTBHV9"OiMpFA@ĉyr(فHnC~Ǣp JX 6aY't.L.L#DBA|ouRTdX%p7Wb74 *H@~4HCmC"DDtB~D4B8~(T &gGdCXRXy^d\-x%d(Ƥ؆fC"|7tC@eE4$ 2`#""gjRCM T8;hTFC(t=BjƂ2 F@HW$A 8ʕ WH8z%}EvL-J 046$lDZC,D3GC|(t;62D~QV>'Cp45XR@y*Xp@?% `\PMtq@ ՉXG$A|D> DF(8,khҲkiU@N ZQJ:?5|D+-l)V# C/J* `e5RCAEh@5U߱]l"Ɓ9D^!qHQNV+FCKAQЄ"Љ$k&2$A~|xy5+G5]V@h…b `84ȀFqwڂ5B:0[<Jh5DfeO>`!@^0`^;Ff7MAdFG(, A&Yx[ ̋0FD*q~wTl5`wq>XkqS3n9=CCЃWRcJA5p&b)+Wp@K@DX,P3/ӚxX!C@{'X-̃h@;D,? &718(f /,lCl !bZI+GbE 4'LĻ`1;DAt-}Z?H/g!,+bL6hD D[a ȏC׋t[ym"JB6@\^v,TqvT !7oo7DC0`o7GqTBۏ1 ct5D.8CYE8T|<¤(c(F/[P@h'*"/p̜21CGBlU^X !)(@<f'l[?}!ְ ] SC\+Ifug:ǂk|9'xUD'_'lL*l*`s{ٛZIlLiCդ!@ 5yz)Ec֤DBT*W$4I $ vW xFA0888K59cz.$.b;(a#Hv|mbd{`Eʐ''hiRF+ 9 BPa[!f1#:zG5bzY3ba|I#ʅ ,ppل cSS@\z7´5EWY۠[D - lb֔XHdKeg$9<];AvNDã3ꤥ Ȣ>c:H蘨a`y5`^iD:'ՍeqQ`.yoD5(pVpb1zGae8;+"bU67Eo37$+uT" 5NKZzP(H 3<"U`ct+&xTI+Π$(K^,ΈNou !%sQ,iV@/Ba"0 sDS"rј>d(^C9Z^\TBCd U ,A<QDW#![B8 Xw0g5d X!@&o, 04~AAFq $AHeSL%$1H9)1u3בaxtA :%b/zcO*AE? P7Z3"\a O / B ,R@gHE碎ٕ+8B1*jul3/#,(L#$(@ya pX 0Bo/Ea1!h ȇjQ *Ad]Ć6 o@/ެb$j t,`0N9H ıPCr0c\MgdBN2xaxC0 &1:|Fk^BE)D0 e )RRg(yd́+o }$pkTk"h#ӎ[8lasys)` V1/3Ip:3E-P>{X<"Ud6 (I ְlaOxluf#y/^ƢalxDG*iE@da wxn ` ?(bJ TCZSDp;bUkH`Páx 1=+@6/1m`f!E5љvTH{Z*YTT!at0-҅d 31ԇk.R:Dɥ86~9`Ųm"*7(G a*$ޑ4DP  @j}|jAZD i8ّ~s3e5怋: BX20>LO@ R)9߿kvlJ^/,! C/bաJѩh47StX _l4]8еxj1^TQ@]xcܒ2-SaU#'!ȅHi`X;,x 50fU8,LId.`/1@j>DJ0Zu( br!wƬY n 4GR`,=9xMQ)儡 PbZ{L nl1#:daB ;쐢 R tY:16B|vrȾ$#BV !&!E#B 9{X B$b7 j3T# a p8`87,hD/;,h T: a" n=^) j 0 @g `*" Ѕ rHCa6EN5aq4a\A 0MN @ʃN؀ (ɀ1H!` F@|AN3ejG>z50,*.<-NV<:l7Ǣ6B`b kRA8*AMza7pB14@@<c th.JuHSV~QvRKO f@#P#^c pA5zҏT`5sX)` E < RdaF$ D2 hAPG$AhA&lN>ftZJ.C),cFBnH81|df;(@v:iϲB.ƒ@)f-p DgDZŠIs' L~#ԔX`2n@ B4bM NoF#R1 WoS0Ѕt._c_c6 J8`-g[ ":b#̋[8r[3<`7A#(0րt\8#hxl $7z!*M2wփ1,EgB fCJNF& ^HB8/|I hc@>رY e ^#@ ?c ;a!\&禃 Vh &,2;V6=J-nf!{ b&A5MHB<$. Sp` )lA8 [/F  L"A QC$@;8tl m Y T 5L 4. Ax7O 697A#K^)@G@-&9K:#e~^A:),ev:f`N'Aߘ: c&>1n`8BvH9fYeRNZ + Ea;,avr@r'si!9]H:l 6<;nf&!D $w}"Dc %&`a J .J &#UFf#. .1 z 4dDgR;5Rp! n^ p65h'=^f!0z zNt#P5V3Lxv4-؂ 2,.Z.@\;Be6J68䋥tXF1e4~X:D`P2W2nuY! @'ȧ r82jހUa4Xf7JNF5X6fW5aozw C2:boa\Agր;Åh$oK: F>* y%`AjoE)0d!:@FSl(#d`; 97,Ypk~XID<1 hAv l@#hZ(`-)h<~l*  X!edD}S2a ҸL $.N @Z2duLa>$&# @Yf@lAH%+7TaL`o )ReԐB|3 %N~: %2N@a.c$ !.qs΍{Lp#(ezGlZ- eEeaA R!s!B2( 6m:3z#ގWr!N.MޣޠXWcc|c2NT64)` JU5`=,n@5On` /^!8-hPezC)g\`BZ,- ,^-j#z!^};Ã:&R!:}Rd5@qX`Y.NŖ%1ĉ% D`;zFbAH[șf%{N<Wu&`P ~|ZY6{Ձ† s YZ9 C:0PɁCQ$Ђx +2xb!bMDb‚1o:Y[QY d&G0@<#b$@Q}B "ј$b,GDHNpk/oL%KX{ o <(" @ YQE$G4pdK#,5'5GOM@r1RDTAPlRU5tkT1p#@DM7F/"3eAKUa`S}\+Űp;pA9###7}''`@CD4IK LMfHk0",ThrDE֨]DIߠ17AtD-SG"խJhRR@!S4Rk$E TD D*_-d ; DZR] >Q@,~zD!Ac0@!KTQ?l,H<-bB4!DQUD ?BԔ"LƸRn5Oe' 7u .7eTRaPC  a@P TiZ*=Q@ fwS]upq0 5Ù:ZhVNbd$!*p-" |J+OD"cL'<Շ|L0WgPDPUa_ YRjOID7`6Tؒ>?H8UeLE+z8SeSr( #RXQpA'5R?cUTD4 8ǟ]̠Hz*A_PC/ʑ Yh7؇Db 4.@d^izGB"D"9K\Qp f*Z1(|+UDR%[h-'x'3KIWǕ*"aDL:Ȣ\Hf𐪤*D5 wFDP"0c I𸉕Tty8I됮VDtv*hJpBO$'kD%R$7W Jpz|A!r@ 0gd Z`Tl#C\b'P׾!N"Ԑ%-ڂk7_I5R7K=XUF"&XH ufF o胴`BٯHQxe"+ˁ.ި€(EjaA-7-J8| t=(h;cAC?lQR>.XU0"KN4?XSlq K > <P5]Agq@Wbb"&e={[˕l`!dk!rn$cIS ҏPd}0pE7P(8;$O(-$T\/IEHD[;!bUMN4 $T K$@\"Ґ J\J5\q3~D8ݕ``9L0j>LZ8q4iG q đ3Qc:[T6aI:KS+"16a `}!֘R9Frp)@(tqy {iB P*kuˆaB-'@D4DG="jh^8j$S 1Vo6Fgb(Ǟ͐lrV+݊FGXtPXESTaPЀð@kF,؏`Іxn $@Cm@ʇ/1,^i 26C#o"0C >I:+m8CaE lP cYB La^ D @GtdOZl=6rp3Jy -fV teKb A<0!pFC-q@Vka؃)bu` H"0No9] 4rpF ZpqbB0 $  v &T7@BxRBEN@JK06]ak"9b5mWD A>4 ypG.a @x XGg`e81P X`h%4kQ?W <$nATX+`dk`9}q ?;S$(=~(4 P46Jb3ppXX H phs2#@! 'a b*&ro1C f28y1I`w!#mtotK6!PP>P@@5!!SC]33zPL8 3 @ ёM5b&7 C2P}YYO"Tp Qq;5 m{0p@Iu:u*bp w~u ʠ 5PBȐ W,mqv 2$@ HwqoU }/Q K!Q`Pi !eMq2}$AfK qB"HbPyD q%O$GKEP )p%@LuAWpO2o(P B<K$4u`a!df)u 61e&%hΩ-}0hp00T%)92Xb!րl3 A$;a4XF@p5 e@YA$@ut:4`6 t0#A %%$6rPVArw)ѭW VA"9%71t,@'ხewPƀi a7Fs 9DЂhQfb4 |TFop‘1L%caTR a ) F©hC`&p$2hbcKԟJXaZpN"& <$a I  *D: ]`a I/paP Tx¿G`wjkR.'a=`CaD: 4ǿV)`wg`U"t"H"P30Ła6 '0셡T c(~O ϰ rG[^:k!9Ј@ Z @ОpQsa6dDApyXrX0 1(X@'p!*o Iu. A l6c ro 14{n1kM6r9Mx!0ŗ=baaڒ-ߓQ ۼ|=G0sZUPGFX\q /goF bm!\ ZVE wW;U)p E{ '{0dZpÁ/ 1 $2 saPElp yjrNxX*UGMR`C@> )J=c=Up 2̬ ~B0.kd 7K?mx9R h#dZMa][rVU2T.p!f$P.د|-W  qlPgD0zEq hx\a| G䂅H}Sx$c1?Xap E0 @ aSYoC 3!Q E <$50/V,> !sp:pUb.aw4e^1E wo L?Ad6m9b q{ aQ(Ru, BJI_z$T PoЙ k9r Py @`U52M;6 o~QۇQWOr 32YŚ@Ze9(0XZCFqJ9$f5`V)@2`D j({*3BjMlK$. HhfVQ"KhVJ!rcX$Gk@*@V{o5gQ8PvHH>M8xycojOxW3 xsl>dre/t)a(>NHf!x" BdK΀ $b#l fBcP> ,OJӒM 6!*4GHHIJ$/ QTHVa1$3WЃ#&0"'@g"\$"W\=dmnJ( kmD=: )-0oF i.&Pn%!Fty&h/ʠtAgFڄ!9\k~ Ƅ>,r͡r֨: QNeX߸"+fko"ᨠ%~VHrpjq;#.0H?8;=B܀6Pxb E(B"(pcLp<8hoH[?^*Ck#L x6q/!z8)P aLB7&k\#3{ڄ [ب16;@C3*E!@D t1p[LȔz"MR,I\1`;'`vp/Z-z*!r b@QDdя0Hm(obKcox#j!Q2D ffQ 0mN9G18(P_ԨXc 7,=Pfb1#qHS`G1Rm|1G&UC(7,NRU"E:ՊH/3h ,Nq\4. 0Sm\eS0`N*$q be ;0 O0FWd }P0T\ձ=`v5hj$& (^BD1 ADT xCGH\@? I08GzES5E@XfhE2(%ֈՊb?@NjM'?pE@=3!*  M \!Q=D!9h 6 /b\C< &$CH -06!tẼ":ە:k0f12NYpHr| T[텠 Dhz c&\1T@ D $vØS(b2H.98CLFȌ1VP(F`9+ Y 8ІWs</<%i:ZBo2N4X$J_ /pA }) _\!g@~R!+BY 0\x/|1l@{aˉ@cS@ +d#cqxH2B$؋8nS#:&Mi:0(( , 1gxF(Fx)Py긎;?P?;~󐐕  'd#c(bHa3D0@0ɻR9)r06R*K5 p ȐU!LHqH x(t Ї. ܠ ƫƋ貗zJK B [p,(o ;@# E(Hᣪ ) ~; 4q@P ;>R"H \p :xGl6X: Fh Ȟ)AzD2:g() ` xjL2[( `M9.2cw| b3܊ 1\ 7XNÄ l@`cz0U(S{ S)ˮy pȁXDIh"0(09h0 KQ*=LK6"Yc`,, @0HFZ/pnC:b,;ixjOs CHRpl@фh7h% *\h:@8(/E< #VZH9b`D̴zР9 Fx;,0 cʃ=נ c0PH>s-3@V`bHQBA-bJ@ Ð/U 9 0?2`N(OhvK!"IXy &O1A C][ ,S&I>؆ 78 1z?R:MńPS30n{aқ;sfY5t3>8 60@#(Xīѱ$8jxM\gxpY(s.= piot`9=N#ط)H (|F폐 0(&FЂL l0[A 9Z/IK}<X0XSSPzXP#o8 ,( 62 jn c8Wa(@)3z >\8t8ބd@E?yl"[ȈBm6 AI+pJK KRH9ḧޑԇH@! n T0J#+@zoNK{AR0KI8I p?$pL@g`K)N50_BД@3ZŤ\єS o`n8 #u\7q0~A08(@ȠQ*=ɞL@|oX*(t,:H6:S98@=&؋)Bq|\pIq]NUX6@2;@2:9= *ЅTH#v[VPaUj@!2JЪH1bq؆ ^x`hAIoh)#²I*:V`&j})Lj)$]2\p{(r#h?DQn { ؓ D2'8& mn$?RZ nWuP@a wTe n{4Q)&f٘kNSF@2Fȹ¬@A0[OK5pbxi-xQ"Vg[Ȅ05y}BP8HjX`Vs?i9YF00G 9wZV"CoByՌЈf[#eiӱk0:wx -82 (e B9]1> vj~1- 9qa<00b88ڰh/4w.ȇa(I@g(#ŅEHtJ+X"R0=aH rXw3b]Q-V蕯$P8. *۪/b,off `dmm rdi0nr'OkWL+ y>><3#&uP'Θp<(&O=!H! @ p[-0@ZGR GJq㶍R,Z,ަEphs cO K VAHg9S8=36xԸ,pW+Y1@UFw$PC `]gT7) eGXRE4AL@ 0@0`1P*:mCЊc U/$7#O$N+OcIVB;DQW!E?>c A N禨Qi@)"񈐚jjЛ9k,}Xh/6ӌWlǂ$lBj"@fk.>H+Mfd*qfoz@6J@(B^Ѷ'tjrEl5XM;}[t\! l(* `C%.2DhT180R"u!MtH4@HWJr /UDѥ@~LDc0&HxEBʖ̦6/b(d2z, tr rچu,e*s q"X`ڏz BKQSh8$%bFFm2Jч-.aG<:YRN`eX#m!yǢoBT*\8+`KH.HrϪJ:/p/h/\2aX`yLQ #B" 5t _Jp Bf87 gIFˡ3)Z G8䱐nLA FX:):Op:J"dpA#1Rb3iOZ1j5){M_z UV'yKmb>cA\9QBWڐ" H)UْOf[c 8@ĸv`Q!@3ɛv[]2S PZ!_r+I6˘ccйm6+cuGb [H6[OxB я$pJm2o\;l;8l\g%34##BN(lƙ:ewHŒ`Y~!d3E/-$ uC"dGAK9b傘.0&eZkE6(pWaŎ%[Yiծ}@֨l~&W&#s0& $H !0#d fCIeÌ%cH"U- 6M rDzS'^qw'(-wEH|n w: g~qkSV0j~ >ܨbc#:TpAt9C*++R;);?'Jol i{aB I?vyj C.pO8C,rK.ɚ xc ʐ ˆ⨮ .p2O"%]|>C#iG ƽx@<* `SPCZؘ @U"v8j[٢<2+(ixetD f Bá$OkGUw]vE,Lbp5[}زrbXjr+& "d!3!e<+=q]{]SC1CiꃁÈ~L#(ǎLЎ$JR-lr6RjmH)@jeJ!+{f<*EUx|p _ 0y E"k*N1[ ̄jkBtHmvekfء4phq@gQS rkpv2 ~z*i5.:5nsh3f۳?+zBlctf5Z"EK|f_YvPO A2&7^=AQ*8B>9>{ɜӜR09D2 9%HFki_CZd,vKִ6, ƻCd@ihn Z@xF4A8sHp:[c 9J&#;%r iB4PE,dvXhdԠJWT3QUSc)Myp%B,U.iKpΦMAQDhĞ5R*3lY+;&aBpİ 2D3,C=7x%;QNxv邙p2ɆDWHLuX_MКDD:RP@&( &" $ Vű$`qD$ W+iFNhRL-gP^J&9BQ/.~T’"R2>c eqyo}7͞,[.R dS!%y UrZ@ദ6-J WAbRZ^FŞMP^ߍ!r}m|c !m B׆ t'l8l*AJ8D5Κf)1q(La25, d2DkD'g>щf8q\N !zy xVS@PdDkd:I;z^܂ D N*W[8jmr(:kt`$XmȘ8$\7:%AIJ GCE$QA,]?vO$@lh!hd8Aww6 KXqPz$<pZvp+gsC$VT~z4D.۰ݧnWtސkx;:΂;aaГP9Cp 73J/@l"89CxWmLsD038 eP A&l, .h=9B)٧kc 梈ZADp<@4 h;"8C' DX/ 3}s=, P(QAuDg.?YؙΛ6DM:FILAL]h@DK(YYYjF~QD>ć̒ ?4ܸp:Ɉx I)M/sJ0N?P<;hsF >ZaI 5xtǘ< 8 "a({diC@O+"ί80ʆ AxlPc8[ < 0A @"4ǟ] k``(MC ڬQ5!s1\3;`<,}0N>v~%]RS @҇1F!4" L͏\SR:ƃʉ]#Dφ/||DP=äAL>pT^]X?N HH.eRV MCK8VI_3A {Ar~HL8İS M=`h@kMXV Ѧ  \th%EmhPXA)5葁5OnoSX]X@ʋ߲W׊Ч7>cppKC %M4p~mܴ5YnmU}$˛ 2k Ѓ(@c IX\W1F:p )3Չȸd=[:Y@ص-]u5DZ0()!`K;D xWΐṴ}ր>ɓI-u,u4V5]Mu3s۷Etb<>>б܆!ɵИ "@"ᕗu PƠJ}</tm DسA_ҏWM[ΥȆO`͔ۃ=9EUpe_. ݈BYI޵Nw"aBЧu8fH^ 6 rA5ưYe_໴Tm=щ@H\Ӽኈ*UcN.e 29,9=))&b,֦D dMJ^~-<]dc.Xt0B׻e0N  8'sGC $pD50h:0g3*%۰1#㴐:f KڝֈxN =,F!U/Sӹ}+񀈎.Z}A(爐 L5ؑH6L1>0chH`1SN5$ 8+\#"\@Ļ+_F9U$- .(e Z^z->rNkt(6j)Bh'$ &>}Bt`I0. !iv-1`6x뒗Z­ke&1Qlͧ@Y,4.bcۭPYpkS\~*0*UHa%wKQmy5}xK\Ć´902]k:\ @cȃll&59jdy08g=4%|3ى @(,ቐmf W{[_'>x /@*!T* itl P-(G68Mtp(`d@d Rx@P9e ؃=(W5̷^UvN/NO30ڷE D&,W5 t*񄺌T8[/``*6q(e(g^OxqB5Hh<͒@C?"35lާ\X_P$'X [,LJlZ;FOr(wLO**a?aCj8x<9[7\@|h E#9݀ Vn( =V)Δ~>x/:rW|qxZq ~ !d0Dܑ}LR֎wꃇmhxMOv;XXKE^kf&Y@ζQ qEvQsmP{=й(-g=X ]88x`xMpR=H`ֿ1,#95O)Z9FOAPTB 0( -%Z94B~3B? }gu6BV=$ „ 2l!Ĉ'X0 B*艠 pРh!z$츱 ktVaa'Р GTh},ܧ+/0@7 Q4̖ Sf-۰VZl̲m-\TT Pp D0A[S`1.*H0&.-z^,IΠ QVVhె'=#$s xB>S5B >utW^)U\6#4CH߁V=R3{S5 t| ADk0(dq!B]Y/Y@"bA1Dj5'ABA>`A)<FU4R9$s>dQj\UX@X?nMy_=։Z9f'̐<+EЉ~ @ b4 }>Dl!BCi a!iG. ,UM*5TCnUAVÕᣟ jCUu>YJTx5 E5TAW&4>1%T^ =1Udgp[ZS2\8'BQA-WB v"By`D.mhzQFxQJEp@lA6ʹtK@up yv@' CBUYr ʆ? =4A(g"ɨMAABG\Tpā-&1I3loDћD1 ff=QA=+d[-zJD5u @ fᘐpOA#\(BlC<EJS8OJ&lA4+|[zJ mӟ2pPGB09B#"LCtX DlJDQ ?̦%>!8CfSD\D!+R9 e f?yAv /K4-Ѱ6|Ңǐ4m/F07 e.\maɈdtgO!\P0oR #3NlB8X`S4'mBCH&Ѓ  !|2$|8]C^QhD༇NM4a0&|FapR4 TJԙtZ+#G{bJH)DB< /tFih3MPaFG2" Y)H$9"I!|H# OhId%a!aYll(+cNylM?քU"L9Kr]"vbNH!3L3 AE (jRU0)A2F4,0@4S Xk&w`A $s YDy~nRB`Hׅd!sB`B!(^1y c5J &n '4?8 !0RXl?!"+h21bk*Ջ1$&[ ˄ t[B0"Ŕ(EdaSw֙v:Bdz*Dx.>XX4DPEAR!58Z$PJՌe44! Fm+a-"Y\<ːs X- RA3a ST$H3\n1C6j"$ZI!b*n3_P X"pb D|ث(}%d)rh'?lX%DSE%dȋlpgW V Wh㳍&iI !' Md5e7.'҈"4 -"W&%\ XMD84,U3m<_j2 9*-LkH(fy!^L$ۀ8p I@#MA zq >Yz^؂$!݀ R,AAt&` "uԩ [Mn"q RwQV_CLfM:;6!̨ȦOl sC Q,h!vAZ.@ y^A2fHAE:S![„,,30TXk|# 8i_7A<RmtK4b(z!֤AÑbF%W] i^A@D B.WH$-؎C0ih@+2W!D:ʞ?kgܛe="wW<BX($ TU/*E!XDTWA<B >"XrC([LFm1p%#444=BXU^`,,mIAAhB<_C(Bh!%D!W (lRHDak4CXB(`c ,]YTM5ʆ8D4DpMC DAl& !D D> $DLB  "L_A(<D'bL(MA \D<)]ND:8 F8Da7B B(BL B.FntF.h ͙ۘNg<.B,D.T@fFϝO4LXXDס-( AALB@HCB"C 0 =-D2āDāDUC샀YAd1+DT<A BD=EA4C#0D"1S::OYDLDc h 3!!@܄=hCXBpA *QĄ܏ X)RBB@B&h"8PTGA`1`AbAHI@ h"BDY8|(|P֘(CuSz,'t) AI8%J,Ȳ:D 0ԡ@T8&@cƒ-+<(Բ"B0Bg>CĀBB@(to# T/jM:QYR\ P2W\Vmn,Tl,ܯ,.@UCpJD934ĹV6pnR@eV)]PSDҔlCUfl.@*"g1Dc4ð0B-c)B̉>&(-j M-5Qoն$q +$PBP&5Ap#p9XCLCdvXD$ Pɕ|qA,Xao4 8~C&sU3H\.L, +9 2AFƀDJ,qB7nei|IlBd2DG{㥍x²l5@l]j8cҟ0qfOmp:ЙC43AAD+AHsAiB4P&˕،*BhBO|3/'j,_nBonJD5JA#0_#T0ĸp";Ĩf(\@BE|H9itDlDhqgDg@)w)x@1@@3Z+H'D!7cnuA -!$JHrOcF@uAH B 4V/.<ȵP/Oh$"_'DJ2繈*Alxb'5]Ԉt45SQdBW'2Āpr0Dă"u" @-lO@ _0-ǒ>lBR&A%2FbBP)BAPB@$CsB:B jVC?V/DDCkXQuC7c|Dm xDGS#Dy(*z CKWfKc|p[|?![{ ? IVeUMAC2BlDČU"igTIH B#>Dl&D4V,A2 H Z@&lÇ=noB_@O"*πt4Biwgļ/X<"{&BUG~C! e|WHĤ;8(\uGDe=DPiA@g΀IC\8P9RN У KhYpi/@gDtd D 483@8 ) Xcc kܣp M{Jliq*hkAf=x*j@]  J2UfEzU)pvg03gP@"0+l۲ݴ_ {qbŋ/4hG"*97PM?JYudH):up@(6xp*BSuSE Tù 4s`nѕhAA&Aa˟b|plp9Q1ZA.rȓ!k:: 6jiP!| РP&<9q+*rmb; p"c 5" Ě/20#}LgR aɁ  JLl0\SM 8-LN9y?651h)V  C M=%4r*|Xc 看Ƞ# J;h@S$hŃo[g 2P$ W(j5( 䒃bB <J - lÑP#q !)5 -R0?2"5|k 3؇RlzJ̘%ȯeLͯr3 ̐exf(灀pӠ*j Kʉ;YO]t ԪnC*W.q }ZycA!Q;hY8 D;+(XUh聢!j;EDL"ڦr a%} m8(2h IPT@_:]! H~"$%/X㊹-*Ŕy/K3L rlYNog8g 0"Eb CXr©*@U8,TVAU>QE@Ķ%(rq H/8D [I@hh(hr5\Pxf MaEZgD>yoRT0 D^–'$ K, R"d J8- >˖/ &8431k>EHĤL@>]^_ˑs87ĔP!T_s d"HX׸C'~h+V-1Y8!8Eȁ6U5 D2!'GE[ 8: YȐ`2 bplc}I2%=d[Cb1zDYҿ)4~pbF8IB ' yI*9r8o1@-Ԁ!MMjb1")HLTYmX xXDFJV*d@@W0A"0PEZ8XĄE`XW8c|p_r }an_1U!c)Bn}F*qK?}s@|PR\&i TE2Uo:dЎ+i샾Jd@TlPcXD6<9 81 ߥMr uXI|J9 qnqUX! JJD1 񄍄;hua /!|*ӎ4Gm9ATE A![)L`GZF-͋a:l8v (b E.\Hxܢ:-cfT98AogjM!o/zaNb@\j Bq\lU=)TURHKPa~8xY1AM.)0hVQЈ )ǦW= A4"*!Z= v xEq^d [=nC.>"!K|D "zY9]𠐯2!c ChE ft?3@g+xE $Qp)%@r1d+;@ >"-jV1Mjr0B?HFLBhs q@lԙ>ږ5 l3UvP1B@1eK q"3} ȭZfԻH-blv֧fh^ wZ1XARQDE6M1!8H9G<1.|@ $/ 9WPD |ӽA^*/djhKBQd 4Adgm$C "D>E#, R,4LPCJm18 F@5:f &f a(xPp dP8 NFNzhBW 0$)5 N n"l  Pa%bE*!*M<8|l%*Wr,X" r 5V l "@ȾhM* 234\( rp ^VslB7~h%lCbi 5| "tcܤdAR#ooVhKOcBP`j Bkf *ú)`RbkMPO51 VB .bh0v *bhi("BA r@fє&;E/  *"*&``ZM.(&, ) ޡWB*`0JB?D?M8Bj *bΒZEF :D֤.&6ڱ=nNa "2r  ;2 ȦV;b% J} Mn*V:!BڠOtԈ(PL$%PhC'ϙMkd"`(q%5B\NC?ebg&`",  -@8`,8 "w҈VB",[0@Jn$VW"#DeV*%R^n8s``CDGޫ`XKE!s <1 h'&Z5r2Gւ fir [ n 8{8gt%p%ت-&Uت*zj ZzciEgnbd ؀O+,0'M+a ܲ-G u N lEJ#U/|bR"fA052 .^acV"d^++  Ll%f1VI! \r5UCP3f8vLb BX@ ʵ ȰWb 6r b%r|.)` }Vd[ybѪ=8;!ؓKN}a@ &)l"bm LrD(ᙈM!Xi:0bYBgVʻedAe!(́xg'!%ob j RȈ,"HgJ- L6(kjCoV R ;#W#&WaE "D7NQN("e&|fS 0 & /boc9|8+66v0hӂ, pT` 20r ֠ w &g:D7N@$z>6!6LdTW/Gg(!؅Cbb@N[T"W1%o*۩CpNaw~Fl#(o d%tM6*4L+J/Tbvd/,FjV$|''Ơ&NAM1=P   즘2 lVX [ H%L >X/_ʡ 8!3Рp8.(f `"dWW`(&bd6">FmL_YEVX jb 4f# )%? A۬(;X8V)LC5QcVxf | ǴBAz4` |Z! l/>/B9A+f"*DL2Yo\: Ř9SCN >rP Vo%08; "Ȱ[/ySbe%%W'M l j%hg6V #"foV@ n* YjbV!/vekR c"'uR5Ik:Rf 4em m @[!b܂Bw/9",WBUT!l hL"Ѫ8~`.y Ho~@%RJ%\4Vz8^$.ccE/.r6v0А` :BĠ :h)! G{%)AT@0Ĝ 9."V>krC`QD,W`plL"ؘUXVb}@"Me;s +;?GVF!* rO-d~CƼO3aeur D|d vj1 |ZSj"@*bA"웾gK:QU(p@pg 4VOo "\1 D-b `$"pyb trG "竄"{U9"i tJ $ X&pتtvC`X >9 *9oh2~:" 9@؋Trb :rfȩ BLcB sj`MgNel([ ,6794ܪ "C-+- "S bު$K"R]VՅW<1x&|~(T(PbCEriC 1Pv/v ,bX&` `Dq#h`-LfUHI!$ej:bq dnV !>ʥ v/ x^D2 (^"Cb %#h6pz Nmi(gDJ%F"Hjkd!4 @/h F0ag}E A? +Z@EiHIE %A3 g| ,c&4d3Ν<{,OEr JP8XWPmMic($z6gfi+\tz)w/A_ EEgDT$8/*XC/H#8,@|8/s*^_xg* T H`Y&`hvz" :+X( ͑xݸaOExHi,0;f1E[WS^_C=yiQ$5HB JuK-TP>XNM$bI/bO%T%іPVV]0Xtt>p4YI0)@{Pm1A$LBU&z!LBa BU0tvVg_:W..K"'`Ġ gr\&UDFFH. B sdQ 5TDKfWk3UgyaK-;]OQctw跬EDcwYDmEYdBu-A^K^-+H%O9@ DP*EH3 (OFudG1킰<DP phO6dъ_wH]&!Tglb 1t Ht53`DsŖ0aSy^Y'$Zt`oZԪgy^c6&IVW_mMF $ \Q=8jI)Y1A\ҏeET$#ހ&4dzEpx,.x˗B4ewxh@G%<;1ez3 ((N$ i$yH+ MI[LSq_yq{g !Rkdؗ9deCB@Z:ZHu(XI+o-„ iD6p126eA2[d|jŸĴ6P% r 0avs&FN \Ev3h-sT[@o% 6Jr;P4qdG{J<:vجr%$o3K 4a]Cܓ%"6X"o+ P*&dE$BDeIn0l`0ELaxbU`f1Y"bP c?4Ɣ$$XvH,(` FҲ<ЁoY3뼄i 9I#`!HX)0Kp@R/H@kA7  B"6*kGܶĊi,Bk GAz EbH+Ly9"۠DI':\#@1=UqEIC ik1|"S.Io.8`7ҚE`2N y a"H:,RK>X_.K %O^H pBAsy xmd"R $,AK# n- %P+3!P@ B$-.tAn - &"$l@X ^ KNL3f L =7.!pW$R1P#L,7ՍX "& 8tq DqH˓i3xW[Yr=PteRrҪyM"E ŠE4ف{6مtR%$.Z)c9щIbȰA27PsM`aaie+; WaJG($@A"m r$%"3ͣ-ѪwS/gr]^0腬Q,Ƞb1Н\& s(Tl> q8jL^n&ۘ#'[Y-.Xֲ)5Ģ[ȬdEг$,BE8Hf-+tiLUj]|@uD b2QPpw{o] 'Wpf'|%tvmmR_0E/P A-fӍ0tI.; p897)S@Ò2id3UPcd(^ 3[CIJ*zU"kmk`/a&ābќc i( -p1 PV1`/1Gw1&K ʥvfbh9=}IQ#W<=`R8Fh' ݐX! 3 #[& A+p<%ma@& 8 0#dbq0."#ӡA@f|i!#¦((} ("`_6"% y&AlTDh")Jl#hkv)Њr 1{ % ՠda9a" X l` O1vP&o?0A.¹d0Pƅ@S?# aAP?M663 p!> Sh t0.1VW1ʇiʭ QC $He`!UD=9 ƠfOr@ħ)3@013h>>+U0(mİ "`|r/'qmh4bZ1 11jb\pGAn~?XT&j^arRZ 4*+)(}hlRVku݄<1U {LNNT%q6/)Z%@Е.4`:]89BfQ /A݀0 .i :`b =( CDz[;:$SU@K,PAA bGY1,7U4A1fQ\ {ks C**pmyTX&i q5 o 1G'@@+(< P` ư`v k 40!`$ӺE0:C "3,AmD%W@x1) 2/ЬnQ];屬&S pM;gѭ/q!CFJt(pgٸ̈́P_E ]Q]< l $@ YBT8 7uQWKliAG` xwY)*!i'j|6%ް_~@hl1VIrq{29az.wcjґkѺ-֎c,S 03ԚTb@ {` rgLA@SWz3:yJ?uYPIw }w=fFp>Z!i f Q"٘ VʕArƇ]0p520PF  a%vB@؇ P " y Qt(mr# !_H% nbaRgI~j9wE~'ڼQ1z@AD;A9phVQn%!i\l ̑#9qG!Czmd ;eI1 0rrYhp/DjsLgf\8Aˁ}UH%%Aq0ǥ )#N \ ?6c0) 1 lmb<*uѶrek0SH M@hAHg%)P&z z~p;Sh{1R&;hYa,Dz9U7,2<"!x/Öm$aOB17(6~w^ 9w1 Ed 9c"2 KL(P׳ ـQ%A^~?SuO8`@U #=K>#c0mA2Uj'2ƵߣTT{` 3@dVlwq1&o6s^YBsG '0_ۖDQPmCH h0*k 9kW m&0dT9;ׂT` =L&!2-9۰\fw\ƛb@հ ;AiJm#3PJ@@ƑU0T t2P=4G|@LCat91=j e>+z<Q !ďxi@Yq,Te#~/C‚\% J1vg 8wϠSiqlKa!ΘBt_6P1H̘gPBD9  cX`~(5O ʼnU(dI+r9B2,'@@"| sQı J 2 &]ٺ& IQ.6 b\0ǁ'pBs/] 1Ba4D |Ʋ] ~l l+|\XP9 ~[ v~,C ۳6ƠDYM!W J.b A`k*G!}~ h!z;X =3Ąhy@bH/FD/ 2rR ڑ \[1(YRhʊ b1 2ZX(4¢ ᦾ AKM">k2F cH2@Y4͠ …h4FCxqzo!}IB#qƀHE*|0 rBmj z cY&Ҡ7#/@ r߅.w!YmbUHxKU OO`ЖBT.HҖD!P=c#ZHɋR SXSZbY#8oHt6 Uܖ# /@,Na/Xr3,%`d3Z-;44 0BS,CV23KB8,@q7"33H/qC]8%(G4@H@)}P`+ BTr``Ӕ4#fnG5ɊaܢBe!n]Kل(`KX2(&* LAPtb3S-E"K c2LLG "@@u1` DYx`:p'B >a!T2ЛY/1ല&N~>3)Fq چצI:ZړպP 2l-q.ٖκ4!؋dD7;lW"4F1rԇH!]SͰ - R$DHTB/ w!o4$aKQ HEgNum!|BRlKT>Icbιik#f 1dhc1PW.{@=`_@fgP0NBABx4" hW+] ҂PSj3L=#ǂ+@@8I! hq80RBDQ|5MgN TDm@Nt24U yqNɢ? 6RDg8wBt! ^t2 ϰ_@¹Ltd5K*PՅ_&"1B t%Hpy({4 NBQA1ETP38309,( !N㏹)EV&=^_*݊eMge(XBrmdɐP"7 aC)]Uj}">W NC8 O4%_`^ӁIտa+ ]GO0)E!4`0AV\)Dtd4DRlO F^$) t@dtY@d'y>d2ANA21E`[{ 󢃉[cc !82KcSz "[ЄY3boao )3ѩ[*0aґ>љ_H  eC )D2`Q6} 8&2 | :j# B8kSU @hr1ЋM÷i8q>뢪(؊2x*HY'dZ( i)c$Ơ ˔c ȿ #N\{󔯰 IA$>P8ÌH0:$ D.Ǩ%\ >`ppЊ%A&0ɀn8nx%R`qfHA OPW8*` c>EQ8.8jB>t3B5uȋhy3_ iYg*CŢZlÀZ6ː5X :3dÅS`U)293ao F*(S=q-"x5~qY̻ (5.)98kԘO :˽skF- PARQ|\p,KAM0"[,4  \3`ZZH8-d:[A7hO ;B"􉐥A)hq8 y쏺3$CFPDac(v<! 6J@?* 8pr"#Y:h0`2(D1 #?HJ; 25s TK…ŲkZR hP Bu;l -K8"+Kp聊R\ad$!)NUQoH- lAXe@$U\>f*<0e*-yӎk7e{I85°K8MP3(4@ث:颈;t%SV 7/$6 C8|Ы`\h0o@)Ȑ< j,<*4>@KYQtl, 㟺0%o s`B"0[l8U2  xX%\ D;QTxk0f`€qʞ 9PNP`48򖅨)-0U\UϺH\D`3Ax{AI[ BПܣ(j+؆:g WȋM2X ` e]+4LU;ޅ [PJ$!>ёatdYn 0Xt :%50D_ky XHĘ,yY9 0wc kX[ULhd)˛7} pҌHR(U[YK c !p8" -f҇UMHG9)s3> _3]T ΉH)On)pUpH0mx+3\ىFMh!J"BqV"h[" W>";UCc*R*nO⥈PۄsL; +DW;Q558r_X|Bxׅ8 =H*c5U0 &e DpxQ  k;u*N2ȷK;-F|gYӀrO~fJBnkMVx=.C^[q.I5 r^XW%՟ @ UHd$XOȞ22=Ce PY0^jPʘyGN.Xre v '; HLd5P@`%œ;f/ȑg؉Ӏ,0“ ҉(fR=r_H؁#`6 ``lhmp)B.RL-҄ RFs# L? YY Y$M93D yņg99UV1iz/;xgK܅hO"1#x1k,8"[h npaݬv^U/\B݊/kڋh@9E ۩l dq Q@y!ꯕPՋ*h0%>ȇnjd _·Xfi32ч3颊 Ppma59}!背v{Ɣ RD&E'":Z ᇅ[ fVr>hf C"FS3؄{قd2!$ )9[M(^鳪 ,CI}݉e x@5:\sRʉnﮜ4c]w *oȂO`Lр [A#?lpŊ蛪N*xSi`0I1ߊ18PC:K>j" m%º)A%T`@ DѠ+)jB) Qi]HATm5O4^]8&ゐoBS_SzixG!͔i؉{AqY tZ;]6ߕ(0!pcIXd>(,(PfKTGA' W 0)BH61[ xqf<52 ;916^@"+0r&hZ8Xx(y p@%88@Bk `IV*~āJJ0}@)Sb$H|)thDC !5J4b@O Q`U=uˡAU@Mvn\0:h{j\x`+֌y.RCK72r@Po Dng}7 LvTq 3^ X["I (ќ2"3*_K*5\'qH`FfMZ-x>`[{B (@E>' Q4 D!5st 4URcVbEu I-4 FP*EDy. @/'-Vk"W G!q MP<+ull $+@dx(eQҴu1X5Ga t ;4ir@<*0GX@@$ IZaIMFQr!R3J娑dǓQ @2yB8h)TL})1<=%M<=&QJ9P6Z xҔDwcWgA1,˛<;6Qx՟BMJDw9@\ZbnUxUZ =0e5F$)&-%QMLTKЭ.Gg;KKRj *A@Wѱ ,ӑ޻68PXar0F-HT^0nZ߿+Le~<9# CK@ns;rM8 1T@(e8p!%!jQ+d" B6`k<&D%d@d T%#9+Bu=CBI,"$(LLȦR),0Y#ҷM8$V#@H  g)I:ÚTb3aDzȒ 9U" 9@ 8R F'@ \CvpATCٙ=$9k`򱮒, }DJU1?!oI-p@%RWB;hȆ'I(sQB%+Q DI IB"Ns(HB'd(@VYpD @)5"B0'eKl 3A& d6XgMar.$.Hf)#5  #;A op܄@;䐯yޞ8w 4=ta}2,F!1S[ MD\џ"PNK2"@I֙<H4ZAw -YDL tbu",g 2| D%  Cyf@O:Mjʄ( 2襍2ꈝZmMa7S#Ve,Jmb[aMhU!{y "L+@[1B*(Y鈳8A9 $t@ܙlOg(egZn[X^߂?!c,dl&Jk: e0fJ%A8.x=9z& mRlh ^%&::ID+)8hH@M JMBD{>$A"+ $5EF.@pԲC~ A[ZB &FI#rFصq"Ua Pc h5)e Xb]D*ϭRWd3jOu8d@XϠ@ѰA~әJfpQg, ^?>-9:DK,PzDږh 9‹3vU %K @'=y5>I  DHk D ,ɁvTS WfP R%-%- ./Q+_"@3C ĮZO d( @ $y4`?ĝ0lCVd=71DY]-Y Owt[hHaUd7ͼW ̭0;ƞ@$AxxäDǘ !|1 @YBP l&dqd*D,x@=@DsTh@xRB,  K|I D ͂DA@Bt>ԐWL w9@T[sM"i]I$I:Dy@A.[P4H]8EhTD(ME @A۴ <Ĉ" 4{ٝ J :ʕMa@Cr|L,Ag ӵcdq@Pq|@T|xP>EGYe c\B׵@}^N!xUrI$bDF 9~ɐ9 y7>RVEΰFI,7RIp@ E-PX%Di[9Ԙ\4~ %Ȅ+.̃BdRg ! m ,7Y lAD Hx/˞ DBJ@H^gC?JI6Cv 4PH;@A& _oD*%Y`]JV/A{C EuRţq[| i@|5=F6ybOTEDp*Kѧ'Qa;C\e~!MDA0EB̂<^I\ EY4E lC&QȊhi+fCDDAaF dQ(bS=Fc FA%ibA1i̮AT +@G<̑ Alh@TROeAˈ&YD2و(@(Jc c> R50eܫHH 0 },ā\‚%tC@@ -B)PjIFDEx14!XBNAB. =P@%AYŁDQz^uHH_G/=Cs@@`@ιApDʉʄQd2 o\š[lզlx-(tF!& ̆cGI̯[a&!<)ĎԈ-LX5D@ACJ"@d!d5(DT禰0 LC2\8!"Q혴 +xcIrm@Ĉ$A0=QI Zhn纄JW: a4O@ D-2{M 3@D$!8r\tʜX/,kFɆ!d#2`,!!ll1lB^sB0Hp5)PCsLJ=<ثXá9̡&(J"TTWPTz3QWp@.B)6J4if n<32,hl l0pRсYD m†$ Ddl,Ce邫̬ ĹCP@¶Ib<]?,3J́-dAcA;6O܅ƈZEqUu@ t͋P5405.53(B{pPHm̀+9̄SFQLLWFGMwMvwU ŹJ5CCTEo|ohfOP@|utȞVذWzŦ(t6Oq&QH h3(W|Wd`3EF.䕫3"ǀjMYdGvDv<,,GH<<óRG DD%paCW4Q`%5WT $<L q!ApL@ݺ E:@GSlH`IG$ V3ABABT@lCLqDWu D+I榶DyrҽGliҐղ GCgG̍V72م9+0>]l&@Mah7aEb'@ ;RF,l$Ć |$`J>DlA@v4ĥ rJXŎ~-oM _|w4< d-7P  ‡4 DȹC|Dp@`ѓGx*@0 A( &d0aÆ^, SUZmEy3 &B &Wg& ()2U ODH0WcDU2Bh@9 KtbK->LMxr% /np#( $@ `  Jq 7L' aYPEF%  ZktWy b+f /0e<8V( 4D(&b좊`2T@إL" 42ȁ*(NxH, *ˆ >yXo nNbF `'9H-; ("Š20OD`TD.'e!ϐ!ݘEЂP He dz(hSTv=!k88$3,^c Ȓv uUHiSOO;K M3W$4BnŚ L) _N!dZ^(2EŁqbH(" !6v`ZC-5jhJ qpoơ#邐0h(k&+J(p+eHHyQܞmQ g 5 g "/跁h5*(DRv Ɋ=)`| (@o! \D%45 }4-*i2`d qffcGɆ8p=fXƟa?;z|}? ’ d+6 k{r蓳D$! Y -!a+b f?PL$kC+HU*r@\ (fa H,!E+$W,$ĞBG0vDiRÈbT):$N; > lT.1(aӛ؄4#qC\(+m@blk9(eDtm DB VMVOфT AM(Ve!!w$-$S$!ڈة^ W'`Eq_(@|qŀOī&"$wB@-j$m#4O=F.EO6i:ϥ`t js*aAo;C,AZ@ [P`$SZ@1pPLYVGK4q'? U:,%/x2?Y@  |SF)(H*SX$ $0pu h臖cEX_&d2@NRKaec͟O25. 4Ka 39>ڨÙGMR6 蠖Cr7 ĚVJ*tH.q PAu~RIK9,<nama@s22d`Ct ˽_֐.L(wA'TcwlP1Q+5`'s 7hrʨr-HJބA&RH'4(F8J$"$Nkm<&Z*$@Cqa"UBHt~A6AނqKs)eՐFĴ b rfkwHgbwl1ރ@KL20Xx OC6 R =Zx Wᠭ9Ԭ鯍ClP9! C p%>{xT?#Jz>,:CI z=` KVHC8l=wQ kB5-.Q9! MtC` "' -kLbB aĔBIc cb!,i^%!!:|O `'a"䔢^A'L"d(|n vGW0b{ k (€jQ8.X R 2:` p /P4yNk m @%1#0^ =J E@$z(!hAtK"ܘ%!|9Zd hk}On –%!zNfQ "_@$/8-F%O 'h)B#ӘBc5v -*]R fO.`)Va¼ B(d@$!X@P Fd0H  B! T xb!U p2 HA@0;Nb*j$,ԆFlߺǐ.c$  裙I\(a@BdIg s# v( t !ª.KLb a+~Mhҋ, j"N r`"g K>O0B,ݮ2P "` R"x`*SˁE72ژ)p!  97"uBɣha?Fe]@.< b t  dI)_%0N"30wpA"@3v b@%00,`fDǠ D(NaEa p]>~ PE? `r &@ !H(aL!ӭ t A҄Aӄ(z0qt##|aƢ%|(K8؇zpL.d Kރega1– TpyR30CbSdOÜ%"z!ٞNZVPPh Z  %`H8D|~R Xk F8!>.!t 6 ]A2m, @DP " V k59(c@խT*ujbVms  ! n!JdW ;b )&&^bi r v =B@W/p9 "TD `dPo B ? "# )p|@A (L舢έ`D $ RJu,Hg KRhBH/A!{ɻj YxmlbU2āfFNAz4a:1@2T.uc+!'ނ!>. zmaX l' .#`R.F`jcmGO@p0w N ybt W7 !I"k\kX_?Į qf@!  &! bp Z`'ʌpg|@^널~f` ֒b%! ;yJq9~8R $+/;D]fhC:>&%sGRVӮ(TH,5ES3L#{IӖʨ)LC+~Y8@f+h", "Oݶ!.aqMF8h H~*xDGR8.&, Zf5V%FkO[E\@鈢66```$8$BVbx`~ ⩈{(lY)P0pj$'/d &;qFNz#0@:0bm)r ;BR k+6a "d*BTiq2!rvɏ 40*q3TzG)0//'*--0!!f' Zs ;x Zar"^/P" g(6'T>T>Atb ز <}  bj,!Fkr-bv 7 j  t!4!!&&!@'$o  ˕"AOvND#ր%&%A-7arqqexxNk8(N|S3Z5ܭE@<]V, ; b,e:0@:~R:9plMֻ /NO)!*` `) ^S' ƒ1NRTX%Bxė"`FdÉbX-e Ex$~%5(ihArnBno u )2`poA^{ Jr}l**buRʑ(%\9t g> $S`Zﺙ"zďU{ V~B1B1(nAlDk4)bi~cD [@|;@ @- 3  x ~ Xj-毪 ϋP 럈 `J+ 0ڻЉc@k۠b8kč(<}xŊƈ-` AP,">K>b Ζ*O<]/h Ao "hf!G ~\"_{p8^18; a Z))L!\q ``8ȰÆ{4=)2xcDQ46 @I!88 MHoaBK :X"zp(CoA";a>M4%T DM@yRAz."r-=;YƗC }{%Ʀ9tA d jhA| ),cݠʺ5 *Y2Ġ(}JawC"L.CӜ d z_ p~ACR0iDKb=yMPj`!V < @Z#$@ȁAt/)".. IWXā~X42 @.&׺q@/M3T2*`E>>D9"f6,6Q\`D78H]sh ">|!-!Ll"ypȉ!H<0Y*laF&#T#ٔ%6x9oXbC0 J}UJב Pn` iw,Dp!\W搳 !~G &BȐ% PAFCl9:,kF)J BL)S⺈! \QTR &2"w)(¨Vrt@SJW5)9=^ Pp ",@yB BҒjRrn`ZFjK"6y@q*@!B[V95bkP+IMvLJ>!l8p%EE.*<f ]A^LR3+PHR1>y #Yr˜5h/=$ATڊeA)${ A`8rŲHhȃ"`H`r@ 12V]3Ge.A"XV6$ yYah0de<Ӌ> pڢC!.'V3IaCб 2<Đi`a!IqC(᥉ ]͠ RE;AI !D(HA&AJ!:'dT2 HaEƐ)"! tԬ߳Y{A}hP(Bfqݬ$LVaC)e gtǦτP6=pv$ኄDHfBXK)` 6) !ȼDŭ/=%*ybNPH RHqP$ۼ3Uރ@ ,)d-"Ay$$lg:H} ϾA&(BQifɊ0bS@ֲ]#d sŃ%!pB*a aP``P)v2419DC34$MEt02911TDCO P̀e44mA,.DqdAIZL@MP)h.oPxq=g a G`$hv}w0u'1G Q`bJr8a2iyw!bIVnKAf)#{Bzeg!uPeO] Dp"3t&f\q t\!0 RAc ,p4| D5TAC7sO  KgC2a (bePQ !IFQKRt9y!d tn h0I'Âwbx8)6g-cm#j Ywy~ 1,i9p'Hab eQC g-Pl};u\:J P jDa{\aIz2mBDn!`4` zd A8'%q7sxX>B yn#4A"%Q"QIAFWЪ ܹZ0GVMHmv-Nɀ2T!U2y!sB# @ Q6Qc:$p[Ev9]qn ^Ptff|Qg`aF gpnPM)%6ZQ3ѣkD .)aihCk-OyRnAV @,{J w R^{d X r)s ' C# 4|Ʀ a ܃; lwᨍuF#˨0ad"~ &f-t+hP?y)qx D"œ8`<50OѬQŬOpOX { Be Zu` *91R A!dgh"}n1)pU(Z^_1Fyo$d8!{HQb{ G`q@FmP$Eւ,m2Qj?!'C !DzpI \+ԄXb,W(\64X!"D: /j !'@17CɨגY!.QxQq1 Hc a%ǮgPF$TEU 2@d0cCs<3a?D `!"Ac/@1 Dq'@A{}@c2'^GP ){ ;) ʄvZ,$)\v(GWi[PwQ†'F ^qgt]'0P܋ #5|:7C*„u] lAt];' '3ppM`m?5@ϰD э'iS8%T+M8` d}ww1`-ʉDExP̍@F<EqCPU+! c̺/0 /P aKB rDpXu9 r  b e+rO@h#ryL4W A ЌVHt=ו5 $aZ1hح W6rB`э r{('\AzuR m_;84h!MS:)0Ģ o(H!MIF)ܨÇb688pq,3AY!``b2,k6#ZU6-{IaH_7ai9^ᴐuJ"4{)'@44e "0v]='_='BR0 09~aq 86IieFI\r) 3A AI0 $X(rB=z4p]j|] Ɓ S#Df `M$4cDhffi!Ǔ`>9 $`Ao(gpMR}@:"DUE}eChAՠmؠwܳ@MO`րl @ { y`rGX 8kz >b/)x&>}v| 덁'2DP; a#8ao;|Bԁ N.~j6( i(!/,@a( rq 00 X ((0H.j@D <$# !*"@ Q2h w$,h  $lI&9lf ) ԃHX*E1~L Do0s <Xcpi3R௦$S}^ 0`\Ҿ(MQzl D4Xc2x5D@XEk|T3^i icv:PZ"*Hp CpO$i?L=o`qHs5ؐf E`dzKy`vcπ(BIh PCm  0M6iR3䫓 "x‰  rFH6:hԈrHxҲl<\3ȗ*n, p69,!1 Ш7 *"_ CL #(SlS54!2[.k 0W96 &52|-h **jnM#yFZCvI]wg zJ c v0I=B C^.j@aE Jx^a"PBRDO<fq D ˆAA2840 *2Hd0Mӑ֒!b P` k'$J\"Lfp)(_O'ZB jRR\tϊ# ы\i*5!(@d&F!KA=TD[d8H|z ?ǚB eS@Z6whb4J%9A+:A)Nh9X4X  pA 8 X]sւ?⦍9pg Kg 中3P;AxM3Z x5Py86@ +9 hC͈ թ+II"6kiÛxR`-(?D؈' >%@&1 R l@$+15荹X*;<>d)ox /H"T؛ ܹ֓33) 0C0KnA L? Pz L+&]PT@)#MR 9b0TЅXYs-> (_@XX93Q HA% CJÿhƁ(540!`y.  7"ʂX1"b(D+PH( $*."2I$2LZ 714Ǚ2 po8+JHgE@ D(3:Π/MX@RkHk)!6 zmP+r8x xZ qI]P!󌳚2T,شRh 󀄯i:!84zm,:`*`Ɓh yI9j0\BxLt 0ߺ:锁Dɰ8m D@W8Dh ;J$  f!#*4rJN(*E3KE1 #ܞ;IƁhS QG؋:@☝*@<r X(g丛j:tICMkyKh:('3yi2~8;V02%[΁+=p(SAÁ3k3O0CȝdpH XO7* #1 0B>, QPP  3p*0P l@f= 8 K$a6E-e +Q ZʅB3I1 C;p MYWAQRp h؃« P^0b*XUp hH/xx<<-+Ӂh;1 #ʎ7ȸ S)6U Xz()mу8(XMj9XD :А V=K!(X[d_|#Q(E5؅?PVC0i}WDWª@g PadE_8T 1е+D!P팂rI%H n(@# #ASrbu6ØFhFc:g648q HЦjR,`I02 x),<-C$F0`>%7@Z K5˻=XѬԠ);ZV YOء[ρ$ :XEX?xx`f0?{0J<* 1Ѐ`JE$Q\J=*y8"/ o~9BЎ6h LjT hE& WA41R%XDa { YX3“&89^(G*5$4TB'@O.ݙ0M5ʙxaY}N"Yyt^S :!#9BYZ/8.a"H1 PV$hPP۩i U;9d L")x;Z2X ^ ی#̈| #W,[@$yx9G;En (: ȅ76g>o񸓮hPM}.j"J[_1fI o`ރKjni-+>k:Xڥ2P:)(Ї1TNaJˮ؄M(i0ڃWIZk!)ځMn%40a\78_ЂPF##+k%0!& /xvJg@t*@5p# [X$^(iNИ]Qոh :[LURޑaÈa΀ג~>aT$ Bjʸ,A؍FM H4E0ݐBQĀE#YYQMI~ɉTbdg4V!5-X k̲Ձ8 "02H -v@*FNnɅb`-]T腽 E`㨂rr\̃('{)31o &X@Y?h 040 Ā,<%̂%X Հ ` s[H#q  _hWZ k҄:AZpݭك0 qx_(wO: 6ꁎk2x0Bp#gf 9hd)/ڶ~iBsoTw6Iu @,od؆垔IF m(@t#Ї[? 9kXdps#in8zCƒ)@LaFnuַ͞)EI¸W $M!sX2#,!(6Ԡ,Γhȏʀ8q{R;:2ͳ_ Y{4w m y1hXskgqprK(:S;#y\,$YP~>5P Ǫ9p@ J.MHxxgpS B[1O(68V`,YG Ĉ"(c0Y2DQC(`&")RH :زAi&E<"`#GG],DE1 6P Έ8A r(଀i 0Gf-={ ۻ!^I@pF@|E>(g6zM6 5E2q. $!LaiDfմFfդp:R0lhDCnx&+ dUKԂ{Xp;P 3I.+ڱóH ^xUB⥇XR^:INH7䑷pMoXApjbA $!80 Ns;  0xE]USG(!HB`waq4yKds^]S̃4E:x6:*,f90q⹃ CWqgA60(96h@Ll(A#E(T .KPA:L$AЏA7e,;[lEآ i"qbG6ghA4cA.6k<+ T@@D  ac!,:ȢHE ƌ#G7 DRA)샯9HXZpXqkDՔݤĩ/Tȵ>ZP 86jtAw4'=Ҍ&YTA%G֨Ez 㱁{0D i<[ /)4} ^R 6RhO9~GMqFι:m"oX7w&\Oۀ*GG 7(#lBԃHTO@ s,(2&"o@;f/= $Б2*s,.vڈ`hQh'MhMtdя-~CkitYСqx0aX#Iw+ ;` RO jH)# *@G"PǺ_A(p5]X. p _*Z%n)bj໮z;i4Ea'Qn/C=f BQ%Doa _nҜ 2-?K/A[|B R~Dh?8 23 ! o 7Ee4uSD^` Bɂ 7DGhA^E KLV#GeHUg$l 8% 5 =)B4ADc 4NAuD H@AZD }89Tr- c(Ryr+7 !d/Ċ\"^[tQmZ,spW0w4]$?T)/5FUH06jv)W/$%Y\|fo}?J7Gd%VA̦(AA10la E9cA{]"}XBW3r1E'`A|RDg@8AB\M=EuD>䀿 JuP> IF@8DB7M8M`Ah_%AV BD$"-R )4J(VD%\"3O65!P[`@+ ,(M܄P ABHPm( =1D CIԄ<`CYDD^ N N0VDDK!MPG\KJ.څS*TL-(u6- `UK26p+Mƈ]!ceQ9M=qP(T: ]3^[,tKdD@olyp0uԆ`R&ڔpI+|*2&|B \a hCTiGDiDdB=AtAĊ42,bUZ4 6O0"c FT;FN(dAHGTZ<GK Ť%  -Ȁ[ڢABFwD80d gG`$II$ ,_ ,+cJ3'L #Lփ:Cne,E,iGTcS↝8B;)2Z\0bkhhogl%a,pTr(oMH@)%D܄8)`xX`AP@]]Y8TCtA.$4DHLdMM@I@nD|~քfADP"k @ {FZ9DZ1DԈ5:AƏLbل^PWYȢA Õv)x,P+C*R3LA%\9|C)EC%M@QU\`2/f5.3}"l_D/ 0EAJ;s $bmA8dA" 4NpL "1dC*wѴ'\l < *u= LTAdI lFW0MrfAءH%ԚlKu4L= BN yKd =7|At rGAA X4ϙ$M$܆YY,@;Mw.ろd2ߎdS!E@^ yͱhvMTU'P%<AU3!\ \!ziF{n)RMz+# C6=bj֬) h5/r@7dȢ x@cvϲ@#L\(uϛ @Ro/)Q75L>ˡ+j%MڎZ_PېĭҾ#W|6iX@G' z![ #<`jt+n(6."zDu(O}RD58Hvqlq2DE\/Fbr̪tIY! RKy~ +K&`1)M(>#;`j 1 3,NW&J `` kИǰJTIEf꤆6 68hĎWހr>r"xJsh~ -);8- $EjnLoK 4 #Yb"&p7#!ܤ+t#="ܻk"r/|("!:` ! 30#jH_Qy.gN#0V' c BpH)̦}(O6{pBZ^}͡9N!KL`^0 1y0ZZ Hjи=Ƚ]w<:K;pG8aVC/z~8l">"bs+02=6& F7-G*@ HH;A%!D V(4#PB"q #ZV:# (Ŕ#&=H<P6zcL 9>YU'G ! q/5Kw !lɒ> Y?zcM̎ x!mo(ߢ'̡YJpg p7BMV(a .S*(#ڌTfFp` (@ې .P1(Ř*L') !M X%ǯh]d1CGDlPq6"`HSA :A 64+c[Ȓ9D(yl 䜼y5BxK !*S ډDICUHt*#p-6MJچ"!Vd#S1 N73j f7ܰg0 swIȴӞƘ 򤉐 SUY;S a*@(7rD#iReq =#7a_OS o81r k::M(0Џ8O xL$1QnΆ"UM 6UȂ%)xB a2B Ì m @CDD$tL&]dh -6ⵤDlF*c$ɺxb쇤hЁNȳPycW O }77+vք[T3H tĶPFa0*U%ɡ\ :D0HU:y@ Id0tw'ƈGfk%_:$ZXY?> 5D@&yo,Pt`I1ź.Y8 WIn{!>gE2EECp68"ˀO"ED!2# $Z@'Jh "fR`]Lˠ謭*nͪC`,L<̺BKb8cJ2!w*v ~/@b4RcH2b &G FAu!LZ w !, K-PЏ\l<@/"kh!|ETL"~& '@dΠ!*!#/#~/)rJP@hJ->!Jox ֏0tD x0t!hJ V%!HN>+]2*0ˎ@;*]b3‘Z":gd l,@%hijE`zTp!C GZ0@u\:B4 L@f!,V0z`m. !A,'-V@"k0$)!~ 2 no EZ4peH "QAPA0!\ #* deid, kH2lj܏C$lRl*rlBcb'!Mb L. *mM <"@7"86i"䎹ad!D0-|\9X{!z!%dzaXb=.",'5ʺ,8! 0(.*l`ʭ- 2gRb BW"y'W*!\ʏ2JDjQ"!Pi12jB t*F9DNhQ 3#eB$ -P !)l3+ "]K}ԧ!2!r<21L4p;/f",#>aJa"WX@0@c0`:g!`&Jwa"LO)B+9#*@he-  )4 )GK' FdܓCBD=Q Jh^$yD !GGPo p",`N%fHfLSKZ`; [ ټl)80Xt*îÂ;X:{u"ds"..z!dAPr4Ne>aȂ/p !L.@lNHyhQB */+ʗ1~"g& 7ք]bjb #a\zU` kBčVZ#@&h5!NLr _B*LB D41E9G'~EW *!Uh&2!E@s0"ՑqS@dj`"'SK9R i$|cΥ#9rXl=` Ǒ۳ }6A9P#F!YP&9FnʺiɈ,u$gUK ~S&N } V0 @KY3 Z)`*ɬ1AS#%W0лH*`$]4Go-(k wB̜;cF$$=bN1gGBg8(%L hpx%~=  C ld&wWZ5L! ! =DQds3:v C:DF qq 0eIЌSJQ|4|R(T_Te\$ah+M嗅't  ݴHuxvŏpt VCR_l aQ*pB ^'gj,@ 0$P P$eG J)U HH:ɢK PMڂ,g;jB:3kK1c?갤,p mC1K kA>Gjm倠8k|!۪.L1a[ Edoh740a2Q9 >E"6mp$%"T^oZ^i#G<,;* N.QlRAt9C1̄$B8Ft#o=ҜE= ӗ CNYeBT $8UZ8H)M~  @&1:!Fʆ!*g_]5rJ؎ ?gwiɩP }1Pٙ@(lHZ>$t {4ɐB,qEmAAQ8oB;"$[A#a91$Ï @ )TѤ!pA\4pY -`fHAGq1tLy3qL&/BCEA,aPiAd!;qHƲqG1T&/JG|ajhRL*a2!19K{hv ܣ OhR`KaN?C#2Xt7hpͽVQ XB.0 q߹#3a8@P̤|߈ts7ɶ(*2OCeZ$Eq$E_8M sT`pҀp{wRvI3# {1pC&1{X1{xY#BGq!<"v+f D195` DȔaw /Q /W>b??>x?aT@ 17S ņT 'S<~fPq#XW"%S_Y!rW8"s7$?7hIY243 MP VDDs’` `@P%v& K0g5vc`=0c!pC^!d[R  Q$>T PM ayơ0@HU@P$7 BT)v=qQ1w.U`>wh;>/$~&~ je;Y@'03@ ?/9-$;9bxs>#4z$.#UBA# e 4U-؈tPEu}v5` \hdÒa! W6J4 6RdBcV^UlG"ݔ֣B]ٍ㒍;0 zqz0)9pzɂYu"'m^6{ *#Cf~Sbk`xT[LY 5&@>w?Q\˦\]61, !2@ a`t ah&2B4٦JL(zu|$K$<$KDha 'PK 1 `tiO"^6/)Lp bPg¡ sd#b P 9R)88ar8>cUСS_uVv;%E*%Q#!0W(B`]$# QQ^% V9vtv`0-Hh [ >әP!sAOPiMV\d Q UA 3POf`9  PVr`}_Ats4IsKyz*ܺrG#tAtIC8wBd $&B(*%2 8!.v3pru$a-7Bl)@`G)6$ !kH#CqФ8OJI ^p BG1su$CGO#a r*.ԭʙ(0,+K[A!/i^8Q 9MawhaZ3  ؉H`?a\fR$q  b$Aj&ʁ`U{m4CAc#)7#mq#4Ԯj4BJgGS${$a:*"G0$Sk0UW }0 v'07vo6(R#|q) 1g+pKRsDxō#eP_cQXEw Q>#%C'P2*9Kk%Pg[xбe  y|K)|ŞSXaj4bL0y( \Y! iLN,Q⚭ HW eJnW`GeCP22@C4񓄡UX# 5 O2 ;i-R'bSd-08RmQcY+){8@ Z0 ]^rpYIKC—YCBBv YI*UhQ#qŝ>1181N+9Π 1Ը j eIy)qB u|F䦈+8f* 1`q}7C"7*(ηPQaBɓdrEaX}' K"}eU(B]pURx]8"8 1Kq4]0 ̈n U$7O,7Kh0b:w`4~f %uRv&) 0`62ǍH$ +Q'聀U^?rz1ZCd=}s=  템a_i#15 @813`04Nc""` @ k ?k~PAwmQҪ%!]}0 B` !s mpaRNLlD` >N)atr F  F< U q9D0PBV "d%a5vixpA)]ZXh!ʃ%W ZY `%)rϟ>a * ᄃXPn?pZBJjb;mEO}A5!+ MBWp@?ݼRR8 38sFZ]@$44`6  }0/ t)B(@7"r"  Jq44܃{6$OzDSp5O~ 9 A5򇘍~ 9rb#' 1XCxH £r (:V'!)jńࠑ5!VTZ5\B DLȊK[˄6Dh?)o69j6!ڄ-kƁ-6A):c;O;+qɐld:T-RmxXjƛgCtyVXu4R6giM6'`#/N2->Co BU@M LHXmF;bNz4B?@|@O e "[ 纇^ǃ9EzH L=a! %Eȕy#HʈHb~Ѡa}t<\ʩF-$E249h VE"h:H8DhqO6 6```e6٤Wl K( /2 SDjK4&MH MUXSSaI7[8WYVKHd;7ʈMvZ+CmJwlk (&:j7F mFyJzA!M;-!Cj` {@ rB uv")F+A0!NBH9$raE BF. !E|B(l`-Q,% ]F-NMOZ'+Zژuu% AbZ\N˞"l+ Bl~X|l@|p/T`D$ yd3Xe8 E!Rls+b, 4 aTHyFC!jݑ2>ye i'Z{;SsY|IR>k;@7PQ`4rҿX`BX0|8\`J8Xd]6ʃ JfyIs@XRrg M&(؂rq0X&(7'%W|%~BȠW2"*!`4J@A l|" .:%ZA7x9 +N!7DHiNrÒD pAyEX0;CtHȇH"a,|No8w(%0)R  ԭNs:RS].R\59C;->.KgBR&$ J/L6-8$ZWɂEP* :AJ 'hE<2:m'IA"PiF]^$ g=B t%A Ԝ#4j 30T D>Тb+_Bj(9+9qSf *APl}.)'(E)W܂i %C!Ogs4%dAUc.4I/c]qR9)KhIdB4qM!Kt}K´axar(@/1 8F$PM!Lܭ‹C`JF!2 M*H'd.+zXS5$`t Ki5'A!rEա +a1iY(p.NGj׳6B<9Z8-J@-p ؃MM6hD,x{y@Q:@[  W: c@ F0z!,%y=ꚭ.9Q؃)Y8H3YPȐ냄| ؽ2Z K?( J8^@.X(a_ [)ZO?|$8 (و$ b)Ś( eБ{PN(i! %X0(q~j< %0^5 `5X(*u40\T}[BX/E?*N{"xh (-?}M@ 7܃pq 7Z@} h#X+ipMp6 H+ $:k1Y$X/П=Ä p茥.5D l`T cJc瘎%lHWȉD3'# k>1pɿ@(̟NSmB#D JzY$@5KcBW efj&b580xo0?% -XUZ' !T<و `^@[P _#Q(Æ^ )pCjH.xXQ{XHA{(">a|2 %Ih X7h=YO()=8ID XK.* 0` jփ XGYJ:!e VE!yjn\χ;gx;Xqq\O 9눥a}+ ||Px -zM(Ȩra DKjچHHCd+X#+:qp+ڻܢL E9z,:<-ʉp3nʃPzfPȬZ\ϪeB۱bTXd%} ȃZE+r *}14L+s Ȼ8UbTeBl|Ԁ> Jx/-s !KjJR 7zX肛up)8Q OVpăH;mjЃ>x}sVh ~8&5P}WN,U3D[ k^9B"M9 %akxˉMBKȠ] ;š5:?}xY8 8)c3@x YF}@-_BtHdхy0B'Iai[]L]P.F;~R;E¨:?) Kq]w_  !@_P!كN%.0Ce:l bBtXӜ 5=O;5  XbXIxPb{{X攠0~UX g).hҕ1E/b2񐆼#6I|p|(ȣ1 =Aˋ6+~53v A?xB=QJܫ:F D C)ðrnm(Hm( m؉oD1 SXjhE +YjلHMH8[]Nr(xKJm`M*ƲHx(9r<+r,r?0Cԕ꯷‰D̠ @]uIu f(2_c<@Jj'JGM4*1Mi?PU]x᥊rIIRYKˢDHw !(3PΛ׭`@ 3d1i +B \Љ)N8ADACh(ZG+S6l7P1 pv!7 ڈ 2Kr7<?1 71 l ;%; '`$y) =A&ewsC=Tm&UqD +aKGRIC,L-2>܄F9r@(T$RqPXa 4C t,> n\ !0P6X%e <5K H"xJ/ ]|RuP!1GPІ +xE Fm [&/L o.6@!\HsU B>ԋd8`VŴM|WQeHPREe)a̓@,p@2?`xZQ#\("Q @7?iq7% 1@ p ;HsAqp A+qN .^)C03A4JiA` B el8 5PPnUE#APP4 KitP% DpG]<KDu4P U%s&V|0P;5UUJ*Aj4Z?(kZHD2PZE?A JQ U􂭾m 2 *I$ 9x@A}Hy0 P` /q@ds״ 0Hjtnƅx6R \7 w UHFAmIkJ)֠IF'r!<#H%bI\fP+1 OoMcӜ, Ũ9q ؎i649h2}*"RQ j #=A2I 0$ ԠFV,[tEmP=BT 0Q<C8ءH)8m  }& E^u- "@Yj[J'4*D@$&:z)pxsi_qŒ BĄ/!CևkPPy 1n gT*Ua' '@s1Ql'CAd' '-r!mB~L3z+y8fD."ʸ4&qNx0!I!¸=ĨbkoAF`@R ۃHI#q ]{ыD0qԏHH)I@,<Ě!IXO8;ާJCl"!ITG>¡4" \W F$̐2YGP v)XQM@͂tk Tc }|L"gR]J L 5CB^LZFV +.9kÐ1w+!Q(%cBZ Pj kYҊe)Ȩᇴ%Hf ҅.gE)K;gT@@A-pl^HD8֡~=`@Ga% ( ?tb"93HH1\@u%̓<@4 _D 7\o? @\0\‘\7́lsYB+à #x[0B)[==P4  5ÌP0Rj`$7<$ D%|YVS| uLπDʉEMTā&V7O 0D6UJ6 !8SZP&|\4.yEpRA7(˒"Ý( F΅<C̡=1>8ʣ-<C+d@H| b-ŷw06޶7HO]CK~ПC,~d^,6  @ 3A#o9mB Z DLʖ'ov%Pʖ9U!RD\@)!f^q@aNPG4fἥW iE|#> ,i q](@VDSĉC$P(R!(VB[E/`idd AAִ  x@J^FY% ]`HHU@&؂-d@@~U2D<@UG1 =0\Ŷ`&AXѶ [@ Ϙy?p3҄,A0?Xi*mAR"?HtjC1,b"+6Cd$EJmۼK$tݝf TTLExԁt )<*@Dfdvd C\˧@(nB\BhV PHC-dhAlMbMVd2\P%K̅R7 )^X o@Xi"c̔D`l^L9LbUTHt-l{΅A%0@CÎbHTlmdNHC P@iT<4=C:SN+EʍO؊$OpAQ? @7(PNA8(@)VJĮ0hdHi_sXCLP1 <)e8[HTeA\^)hPB)5@l^cEUŐ& mƸjC NȁE(@TifxCH,HUeH7]bBc(GHbg zgA?oSQ...x w16"#]DM|B+|M1' vr@P52G:?{ߝZQRF%E&5}!s@,0g=$8L#4@#3QA,QØ邻>LELGf WĂPPzP 14C\xAsM YUo 'Vؤ`(u7C7|AD> @|V )O!-C$3@I. c`ױJ*@"zW B&uV|FKhiJkE [m$ CĀDz` TA`+{@ ;[9SG?Ah0)]ZtQ`[g!OV&Od$V& j% `Wzm` h@0Z^R8 %$ pbc#,( ڕ%(_A2x ' HDoA8| #BM$x,>e!- Tl?ID/PD k*249A.7 *KR,2 c'hK.P'j8EG+ ]*\9`{A@5 $Np 9'GʁcstCDq/\Y 8N 9zl * MIH%؁TF5p[x D 7t 1DsRD܉$#@Z}0m-jXN&< >bVCFrGVoTrZn$Hp$@#1 .%@4tdiWwq d WPNVP` bT[r6Cm~I(r( PL;&LU v2EH 2jhS"EaOB~,$ 1ĈIhiFN!dx'F ֨A a$B=dP( pdQ}ɜ=Ãs b&"%pOr x^PoiMD"J{v@/!`-&`7:xp|)j2 9]2= )h&NWW+~['Z@`Ml?G--d}JqP ,xJ R yLCW)j$qbIXby TǞm)dM(ˆ9Zd ZK"Z䞢vÏ`;pbC `'4EވB`fߢ㬆 4*߲J("Iv b)B Ԇ (]z@ i$ctcz-€C@AGd&A'Bd%"HT :$N4  @ `tnJС8)KV>.bJDM*ؠlJtj! xCR1b# PTX "nID<.,xN G\pW441ǀx @p)vk)`=`K&H\A `0v)N RDHDU(r?CJkGt  D`WE#a6'vp` !KЁ ttAZyD6dKaD>B.!"6JLMsjAEurp=O 1n CSWAIqnA!JYč (QV">m)4lvbtRNUސ  Ah @ACbEctaj #GGq" abV1"^u!^NI_"Bv#f,"ݾA z&(4?6>5i> e=*wY OϦ" XaIA(#-vqpdZ vBe\2us?gqn誄Je)PQDNy88AYJaD$ʜŀ^DZA TD[ɋQ!Z>Q",lxKNTw[j*;t l6$pxNΤ.xo#A@> W(U#Awa* zVnXuπ *%i6Dc 8= / `A`V(<6C"#U-? ExZ(x)z{q5&mAY.;!oA4$Hp":*$Ǘəa' vޢ. g)XN4/BU\RwAZA%"B,*OxN5J.JVe#JSp 6(@oFz 9"8`͛Q=[RZ-^#,.0H۱o ?),V͍/*,`1|j%+o1f[Lx6Ѫ5л=uYJY tX  {O)RD++eaX^ %[6-pBS-dl6v6{!oq6'~^ Gw`Km}e!A },7zSnIzLdydȬu%aD 2 68f8 L)lLj$! (Z f KԸGQh%y͗}XF R,=)ˏa9$Z2 pfXi,e,م]%O+|cD@D7Xh ~RRF(t. E1<#~!#F؉iSBqbMpع 400@S;lTF1o `$s'P YLs@u|2UL" #v1) aȚ c^ ݢ,kA]B(Bfp`YcA,k@HLB-lG2ā[]!2r-s{,R7ɘ\2iP@@7{R+k4',+՛q` K!,B Ѩ.&)Fk3I0}eW`dB@n3`B|A$pRHS->h$X$@Xbȝ ~CaS$re -qˆ6Q]\FDKP၊ZWl0F*0>Lxɯذ%*d ɏhM"9 NԊmCF)|Q0aW )У ]{H'&$aI ,!UG @TUX%X|K`e\#YY8,9Nƛqg,F 8D{M2vf%2BEBi!; A!FꍄXoJ2>J70^p%@"060%d X̅0&nhry,!5? /Zu1$mn~A* +fք!1UcYzFDPQiéYͩ!: ; D#?S;cjE!S`o  h#j' N@FGA9ԸbRa`,}!ӘH B‡%Z 78*\`9QD 98TZUgHf.؋뤋Y:i7ckUHYE^{x@@SlZFvj\Sֶ A#mZVZߜvk̾ HMhm~ÇnA|čvDtA'OĒD )?&r\HBsZҾ4 D0BЙU pXHp C0ѥ')֘ឈ" -rV" );؛%^N hMd.V;.c7$|r8A!Bwd%Hr *ZA2DO~p"24-0@)7P!R1<>q Jaʹ2B56ua~>qYbX̡+p_OȒr''xB0NOx ᑏ@=ƉzхL8!dU @N%@ݶ > aubfYGy&#&Ϧq4v ZF2AGzn ayIgĠɕ0;0 0\u7f(uA}N q!,A^q:8XuK(L#D #ۀ!0@ \JB S2 DRX7U0si#,!k@2pV#b:1y3Z7l>0tA P|P K0Q >;TvP-'d}*WO0 T|( VvA@Lb$ JA-(%fs*hv)y?,,k+|hwv0'@Ta="$-`,#|W |T`x \ hN 1,qiu1 ]C/ To@ `=`@9l\YW":4#myAZ%K;D28Q0uq0AoVj\6NtvQIZ6 > r]rwyI a A7 e9U"' QCr 1}r)KOL q^@053kIJB16kcCtiU/d:VW&[dG Z|&<'r wPO_GfCv Z0b, <+JxkT2'z)_wl+zRS@P`"" 3rWr`QPG'2|f@ox_~W !|ϐ|gxuC/ 0(o;V)Dt$ oUg@~ M7V,XYEq&#m%) ؒmK,3B ;3j1FP2Ud `?O( 1⠔20Vm% X- ^)2"3"jYI')"}BRyA FB$s0$?77$99 >񤇛B J0ssyaVBwP'He$+(',vӌs lkF=`S,q@Buzfz Sv)Y,ѣ a[$[H0a acs0W ƛoA@ 1ܧ &  )i] kcrJr s c50z0!y_&2srqKz8![İ J0$AgYsp ;s3VzhVjE|@_Pp>:Zz(D߫ `Ou'Q1JRhFO{y Ax1dz'Uf``@zce@;` h  &?*kf {ds ),b 8i(Œ Qg_9~1 7 ;R'J ]5Bۏ,A!TA! ! B lKl_bx ` FÓ3fs[$4kr }F$UĴO1;#PcDJ!䥃!0ЖQ#|#"p GyD ^Pp0y\m.x;F]'[/DdUiuy'Kcv(eBRHRKp'-Բшwq Pް5>OOs my/W1 uzDRP,k PwbUQ ,P -C Cf0sd WGBN L{Xs6? 53<[@kl2dSaNǪ!iV ; O6>PP;}N$UĬ+ARWYAyV Th`+ّquɝ8$8<$Qp" d Q"^ qk;Y FB o}5~6V2ik a l]7Ӻ0 ,`'# M[ !yR iI$!>< px%@nף>}p[R˺̽  y Q ]^@*xEtCs4US'{ 1Կr U Gzj 8 /x(N4 {b15= A ^Pĩ@ Ly@ěAYyA_mIZg]Zj=A ! (@(HZu10DZNpu~pv"ˀn,Xtt0q>x2pcz7!#0" (@ڒ; /  @SoI]a 8a\`V=3X0yR'2 QJrz)wZ@ =  >1Rd" {0z@VZҤE %:9>фQo&e ?%UͥKux5@,1۷K/Ȟm{v IDV}EU/ p&y\3x'0uK%X`}ELf&d,ڴdq^Ϧ]{piSjy)iQQP}# @rZ^+S/M'YND-v3JXKx౤ƈ_B:N͡/mjri(Ф& `=؄nh kc , #Na& $IH/hbz@I$nN )I)ADC *ؒ=H ǩ0`COޔΈJ$H D&q9hړO9ibi0%"0tOo,q E!,&+Qڒ8S<xp6:' Jd@FFs hd0"^R"@> dp@6d8*^i8qI^Kf@e1 !e8˘[^bt˅`@ %"N:긡+/"~1  *"cxRt0(BIODEv/A&Y#j,Wwz&5捿`I dH$iR2t1k^zwh20ɤ R^`p7()Jo&yoސNjE@ޣA&i:\g'~\ IPo@-OcQjl*U1p;9^bb5 JP_  6r3e_'MQn2W|hr$蠉f |f0{j`8FdXi v%Iq"p%mXV`pslV \_F K(8ȝ$*"I Dj%D" 2"B9Q=BЈ$D mf+1J/H/xs  x^E !y20="F!#C0J2RMpSC_(;@ocx qH+2%`W,JC .{phA0Q3,1[,CCT!.YYD(6؂EbV,MGZaRE%BuY$=NBaD%OBx0\ Hh vц&h07PDoZ$q CАBIkzU&Cwʪ~ýT`xUi- _B'8%jפ sHAXq j8V*0a-=NpB `X qc + cBƒV%va8+zHmDs5*bmnѦj"$_[`1"M;y1̷YM#/1Cc1 Fa c[Y6ML fK[xx7@Ёa HQؑP q*s ϊ"|h-h0BYИՐ8),〮)x90:1 e(í|( _&-$'Hˆ(|%RI } !;V*كVч萈@6an ($ (Xh*@(K` x9;ˢ &`v- (a=p;X.R;`1X<* 8?97A\ h;vR`M2)R4 `blGH+#iЇ3XgR  g؞(OO8"<(4`HLhӦ'[`rFD7O ֑;}}0`A  x ~a=,̈AݒvbASR.$ @t BP ].Xeج%$\ `!@@SR%\:LDXrcžA(n `\רϾ k&ƚ0s<Q0'pQx6ωXP %Q09P !Up#E R CoH.O `݉19b8PЈ0Ao0X(e9ʪQ PiV [iGM3٨ `ZZȅ?#b 80078bx7HggHI0CZ*[ȴL0Kx8y!uq=媌\TE7>^@UHKnpGC@AT9|KXXUKU y˾ЭV]pՅ.x}_} Mޚ0))@qhK aF L yuM8W%ٛξ8WGTWW2X`Z`P;Ca@|18N(F; Ab8XІi6am!=* Rn ۅ^P1ЅgxPv4~dM 5ƞ?#cx1od=\ð#u%TaPB7Ve\d 9Fͥ i},K @@thßaXš ވ.^o6p t gvˌg"@ȈU0Hlo,HI]i Y;ԚaAeA $DQytP\ Έ(_*6 r=K+?$]{Bű Q ;-{ $@X%//a+T8 C m ><pS,xdgHbdH(0ȳ(Ewp ʫ#h>K˴=xMɉu r#جЌ@ $d7KDx 7{8X%@^ې 6!DpgRp19у%8~1(qZgX..$4128IBD M8@;Є 4BԺ DĽAĨ&ϴJ8wp'Y&rj8T Ǘ|qڈ,tl($lja/(<2-b9*0~ kFJ ]!(r(N(D҃bЖVp=H1!.S@t܇gC 7Gc*[q*CVH$gF49x,˿\֗p2۲%mLCⷅZJ:؋uhXx"$#=F,<9P(lHDuNiɡ%9$ǧ ƂJBb@$WlIDA5 r͐ "AqgΕ0bk{Rx>|#.\ c )n` M5E nF)=}ݓ)607A,ঽ5X`^ļ QM \h(wI\,+ɓoJf?-5@[b-\cE (^7` pB].|90R0"7("0֬%)&X?!+ceXEIT$Z/&A:Yb< Cu6 PADCAe=.d)pO'AJzZ1d4*@jjC 8D,SyDXaCF4L*!GiH A4k1FgK65n&L)x-Ec{"0\VnAE 3PAiFkP,`Ms @D*2\l J<A61q hG)uWR1M+핲Z p}CE)s@p @ڀ]P73ԑ?vG7sLc-LfM-͔R #bI`ph\E`T H)L؛"F= {ugh}JPTȇ$hCGlK(Fش)A(=oPuR;P (P듼2ĀL7 VAc0 4cd ;#h&R%H g\ BÄD]I VLK80"dn" $BŠ#( !A&Z!^Y et2@cg4 D@pp({xN)1%aA@ FlCwpc:7 ps!C"Bś] lE7&0!}qQCdILub8 E ! Z+CDԐڈEb! D"al*Ih묶 u؁2čI 717.` 8Q"AhC Ł0 @@Bd0,h`@?p _+'qgʲ%W`>9 H9R59HrcA|`©xų  .**E2HXxMk*z\0@\G12ОHO-1 wУA Hܓ%a.HF v2&SIRR,!x(plTb £ |  t k!{ɋ5jz1$I A]д_\2U`*JJB )Ⱥ!@/_5Xh$u Rt;,yNAto X$ lQA$*R+hhALŌр}#$b R0H", mi%H9%J<`-L IN'0CA57ᘕ4'. HÆPt `x N x+$ `ӑ'x?AT/TCA۱EYK]A8AhQG9%G%y$ ATb?9!QGC A( AIC|(A@8?Gg;A>ALA8cxJ^ I#F&n páļ]P5D AF5HQ @fyD2M k @@RQ$rx \Ɖ)s*[( ))z9Hx1H@) QW"É94%P`J3A+A \܀VW9L*K LC0@L7LHceS,JK;%8CcATK\DA0P_Hk!dB!$ITJK:K]J4#R"FD*&D2J&Ap٧@ApliУ;DX4SDPʉbJ7$+k ڛ( _ c ţYEa Ig{"EZXTVH,HAf䑬g p܃tDr,~G+*;׉<5A 0V'h?6)ݑq')l&DQ`䄵.WD,$p! @@WC((V0%AC9!L+APؒ%A觵J4ĝEdz%L +Idy) T: K|NY @1A"F @%4A4"BC*hV&l`j*I@n*Lx ^PDB67Do Il,AƂ)F583@;:ĮVuUAl/'J!@+sD9A8ЂD<3đz;\UAP gAxZKK8c ]E|KDDĴ*1AYQICߥOlPZh(K0`APM6/t;{?l1;hAvAhyBi A?hC"@h3EP%DHXCUMqf{.8!u'/M "(O*61|xp?8Xqρqr(Uh,_B +(u(xwAIDB0x**NK A*D6Z*#0+P$.@j@:EA5+&A상!dC$`ىT*K(B6JCTA8@cDI1`Q S\AĹ8DЦم]9] 4Х=´~MBd,\ ;Dfs}nJԘ;LHuu?@@ ,/W@'  LٸP~(,"i0)w M01e_:$A倁6d)%ث7AhhmX1.{b.ZB8H%XB,/ @UA8`JL17l|HD02(nԠn6``B ?,t8&c@0:EdHD\ ʭ ZC%P袕*: XR(NB -PsiHi (QǶbX `)غ% a]蕛ؽC&0Fq88BdJ(IB. x30@[Hz`$*aPdHw$ȉ7o_5i2?PZ)pb7p ]??  _R 6mУRNI)pn @6i6 `j #Zx&haA2Jo,H>1D0Ng$K.c[˖l#Ě$)H@Q@lDjH$:M!i#PsQL%2@K(! Ih!bIH P<=}&JfH}>RYu!`5Rj X@N'RR"k B@ ` 6jV(7 I-PH o Ң2@ PUh6|ɜFQB°^@ȉKQr-J>bx.!G j xo`Ax p.H .B=:VN 憓q@mNN>gdނ b@#facwx B[D\qVf1ŕu4" 6ؐCGx0|: //ň#Җ+H2K[$aF$>75;ݬGx$ S~X(ҁ70ƛG$ˌ XHuI"8ܯT`@b Ip C dUMLR ٻLFg dكV1hB1_ u!: p+,m@ <J(ڤ C JxFl k*2|8 xX!y wF 0M)Ў @@9r4a!cΈ 0pVP}+.a!(]"5Tn ab bTp 7ڪ 0~P@.Y1?|o!G8ևA  iDPOtS0^Rbi ZB \@H詧xP"90IW(8S)!86P$ArH!CpCBS OKu!*мX$чp=#H(X U '; FArrr 0>.0= @c@;d+p۔^Ѐ &:$7UFP Tm 5)oQ-+7LC3(Vac.q %v/!]:-L:1ޅ* 廇Ȃ4)Dke UPHA9>W&!pB`}J}CLy"d|̣%<A<(B 8ĕՇabpu /̖>TyQTD!ƥ4޸ qD-Ae~q@+~(+6!)ps:Y(x c`咑(Fd!6i@hB˜uS Eh.gRC3LSHh%)xcX8w|'>kh "5K5qM B*89+8'Y #!R噐HbCad! ) |MF<")T"z?E"DCՉPL$yZHCrtc*H d c*V̠ HpЁF!h8$W, JHq؅q HpØ&*!z@62' 1@G$m, \`?MYYKn7}+^& T%,$=Ӗ`>$D@(|& > A;NA(s8.l,aKKud`GXFa6! j0a$x'!>XYn v ( BFAJzd !Zz(@Sjc|(,@b4 ",""b "P%!J %h!",\N$m K" ]`B6$!EB,bJ"1eya_B2V! :y^LB(- Jo`!d/ @ad@>J`#P CXf :+A(!`gN 8O!i| b R JFLn .8 rFD>ƌa8@ ,9@,a@t!,IPb'/l'F."0!l$!(@|Na!\$]8-." !")!x{zAzdE%8%",#b2(!LV`@ a P@`~l '!lKG` W,!t!!ND(,#Q/V2Xj"V*mj7Gg jA".$L$V(-…2xe1DB ؉ee (Bba3ba8@bDB`b`r㌊Ccdjg r ^$3~"AIu22b@WMCcGdu !aN!l "7 :QiuƋ, -"-v8΢,!\,!dXH$n2ZD4`gMZq *""-!0 4B 8{">u"?`8jO`#A"kJ=ج1c.@\At !7mcWQNNN Q@FuBR M+b`FP @8 >Z R̂bR7pZatJBKsKH)Gu7IvL(!%"R.!_pp'wl0"",Iq A;a 4(is1!L7!􊯺 6P[b |"2!~U:1.TT3!UEG (b {%hBWK4]'WG$CoX{`7Bu!v!bZB-:ϴ0̊~ae\I.4b dA{PNCJb!@ |(aEB<3:HM/S؏iU@i dha C&xnC! pa~i M fGm(Gq\fd%̫(AaJHApRz>x& 3d 0' Y!C@_aք5!Mք*H-"@pנ% SE! S ΀` "Qe|0A"s!t`T2"jc !"N!` Fn$$rT!P7w h~B|e4w$x!064j |]X+!RB 7B9O[8 x&!䥈)pѰL Ɠ":EfRD_F!Xn>փϨ`b1 KebdK!`Fʶ;(lGkt8V8մa 7hU8 X;0"n @2ۼ "AheG*'*i=P>4aJr 2M-L.d5A.!IFn!2Ab"5Ow!v"w \ٝI:XSb~ H& kҔT "6! a[!V5$jP!aWq!ABWU&j"3uxj5!A&7!bYl:3m/~`y[}ѥ]6 *! *!{Aډ8"0v㮛{IcP $..`hbylFJ; Di {X8I fѡg&glW| ( r6 (PAj g xB:fnؘTbNd߀/J&'MAD~P `@ HS | vQ7!\ sLWA=Ka7a1"p.6h @U tQ!|[}Ab 3H¼C½'c8Z!:RЁއ"!( @!fJf 4$,~TF8n#7 |c,a88$ NA d\7}$@q)K[qހ:s &A ٽ z`Xd8Kin7A`atJ"8 *` Ѐ ,3DWqS!jk`# b }]!z@!85ƞ]z%!vxaNCbAwbۿY!~׻l0}US\pg gU 3GB+YA={RDya Qma )T(`ʓ qp2J0@ඛ$Y 5 /\( uB6AV), ,tlZhO BAtB\ܭibT&w/h[2dfT&? jѣ$l1Dik2|54l@7'~84|GOL j7\}yL O+y%G&#sƟ~ְq;Tc-K>c%!T3 A:(qFAAx A(t"Ь~]-X3FɴK\#IAlqR '( ($BJ It`UB2)IPXsR7 D2HgvYBu!A}sB} )KN WKyPp X =Hr3@(3 P M3lJ r T Q YY8KKF27:tQoen aU#7րXhqT$,!#1@iSzgR$ Aw AB2) ce;@2&Gj<'W=f7FoppRŀFyy1yG{ g#=u s%  7b,͈ Z,e_|S7گݓH FuF @)%`Y$o4Y>"2m/. <5w @? F@]*0hلq2pʲZ)3 +P€ +e(P9k AJ 6Z 2Za29!m i'@SuG'&)(gw"p ٻ$jDb Nq H+ k N wxtuV`xIeS0&(&#x1uRɂF`=H3H6V Z湌?A p o'2QXqu>vB\7?0 և=b*&A'y01 a@``t<0 \T'@k &]0 @mѣ1tWu6y f! F\t' $'9ޚ p F­& w8=R'^q*L gwc8&P:TV<;UQ}#<2QK'FFU$' b3033p'q8\X`Sb,s'Q?`U_w;L|Q=8J'|*dPOr;ku0fk::Ce,hd +ml6zM  Q0I` 0 rH RW C` [ L2XD4ڞ4 T0z`@MD FW .\ `[~ `p7raP(tG`3go g֕,4mbF! +3` 2.$G $S|J<b $7T#tRhP8p 84$ V2 A$$ip -J'Cf }` @L[-f,N˰ 'qǓ wb'=:]:XAJ~w93PS7rY.W9L%AW7aԬb^7 CX11c- RpNm-W XE MAfUoPo0Y rp0l/ FF@$E/B"b@bQ7 yǨ Jz+31h '` m PU]q5A3u)qY[ !}Gdq@kղDB`XćYUWqQ4>4`޹SG>tlL$p,%AO>P ]0AP@BTBCA)Rv2 1[؏^2e 4& 1~L [vC8.%>rXfW_k `(P#p0!h{XФGfCbbB !.va+P A :>_%^ZDvJ+ݝ&в3 (bRp (`bE접.!𲛦-(eF.xC0’o@:kVv`hŒ 8'pĒO`9Hh6$oIL/֤E##js؀;Z8( >=Bb5jL ` iىpLM(fȓj B1n %4[Uh*huXej  nb۶h 54b+W;Ѩr_ tK^g / +^.߂YT )ׁR̳89>z`iRIxЁDJAU#NK4gQ%Xf ZE#>" )~3Ve `<?{i.:J)E ƃ;wOU㔁ad VqoA< *`g0a>RdH !1kKa$-j\KZfAwCˁL##lK>rKx(CKĔ9Z!cX1 KfK 6 k䳢A19rc(wJB"4t M6 SΨȃ2T\U[TDVI ⒶT z,` )Օ>@!u?p  C4Bf.7|@:0 z˻x+]"f4 %Q"Æآ` I# >pPͤ #E\$+`)h/>Ra z6 ! cQ3 *AX!L'@mjO nJ'i:4?FH; NlW@0~bYQqp @a@EFQwS"AN<qxǠۂ4KI@5iHa%o 'J}r8#K. gS46'< OAD|$ kGז(o -%k d$$.3Zd@A<\ /4 r@CG@.  K hѰ-@ KD@>H< N0% h@xD pILe${L @DH)B(A p!&D(h sMGB"Z TS(@"VxNr[%RGaLRfAPl3e`R`S5nz2EفecJ)7'j\xm GAڶ0@Z&#P2-PÆ4C@ ]i%AG%%xv9…,k'/)66`8B#2$!^;xJ)=Ԉ"SO2PD ƁH 1ӌ,D(SZ<@$:2Y M*s ;c!5d > >{4l=xxیw 5:YKtq"jbrh rYh*9xcK::c;\@9+x96q`T1S*`C6 86騈j b4qP 1֘ڈ̋>{QyP*PS1B4;r g5h[T4Hp0Ey0!,TϏ ɘ5=D @^He؍bpFs)yxO+cɪ 3ɫ)T`茗ݵ5uDY e5wИw  #@bXFP, 5QST.Ȑ[ꐏX6Q a[Q5xȁ-(;P&pɁT@S6m6U`k Y&Z9NbRxl!^hY``=Zj$ [T(B;jaj$KГJ=Y(*a0)޴Cͨi]Zxp|@ `UUe#ՠĂWpւ`"5%%xu%kT#1N<) F>`J*\WǂH,#:ؗ ͨ&ZðJIN܃ Y*M|Qe5PЏpa)CDYLC*0@"?-XFZ4"8c  XBRڡч#}DHz4 tbGCRIP`W&X=0e(Nh@=(ܸ&`$Zt@PIQ]Y]X;#  [+ԒJ5\'20jc8TSx#K_֞32::x*p{`琎>L)4Ԑ ^,( kp 8BY쇁f@MW93qŗ;d! _yX3!(ly1 #2" wXXav1=d !!z؂`~z2JƔ\ϡnqŲgkR-`݆ٕ]O1_i{)Z-f}Ti3Q2NPc>G,$-з(tۛlcqRPH&Xd7A( kTb( )oo!,$9b\*@Qs%;[ J0YD@rЅgp=ف< gC b`{BKy: #jT::gh/eC:܌C> Ԛ2^u]Łm؆cbY -p+`" X;V3RW4%3ӌ`#NSoq>*!x N}=x0lDD4KGЅI=؇Ћ0P'4Wi8˲jAn?(ZΘBVŒy -ZUQ?Ѓ(Z= HPpG  -`5 HgՃ*҂HۘQU2 )#m; %(brs/dQFئ -P}/L%02gf9A1}Ⓦ;d<\9-Aoy1yC&4E uu`g)]5PՄ$ƍ؀BMp< 6bYt"zUrBxWi*'' Η~2Y N)Ń?>5#jbpX!T؂>/9@W0?V+C)kp i#؆*G8)U!B8n 2!`*-^"G!h$"RctЃ0LG` 7ů$vR1ab(} Pb@tX+mr\jRlWN%! +~ (*-))oF=],,0,/o8Q]^JU%Gߣ:YX ` tƒ +)b=*^ܣ!B 4VpF )x` ;`p+X+>}r( xd cf`3~EH$D`SB Zo ޥ}JC hDq`Ǐm P -o9Ė*K<*3{U " )kZ]]OpQtɵtPy/TAhM Eh7[9s'?#]zGYp "{T@}XZ#T' g7TK-l%2G` |Æ2~bP+XR ~S.7Ԋd"c@f-}T 0g;AHA!B1(8&Bc0xuP?)';y[pJ9DafCKsK/D[AM.V}5G]Յ$ELXz!B1S-8hХhPZ(AK1hc 0H&CPpTtB 60j 1`A OA2$1MP'P<EP͉Q y(cI`gh)#j 'rڀ/p<Vy002|r)\0R5s  hKA$oAtĆД1Y r$H/lm_ \ieA:޷d+FRNI+Y'b)0cҞH,nf⚝ Q )D!O EO >yQ$=]a7PO$l=-$mmAd8S ( 8Ŧ5*xQ҂LH :%S.Rg@Y%†e'Rzƶ.TpdHr 'YlC9ѡOC܀G$ `ilxZAV&V5?Cd㄂l6. ,3 AVcb ;?9hY /ʒ)9I+p!@Oкo`'P1걨x 'iE@la :S,?"tH`@4S@#D(̤?0WBq&dI%̓9R@L`#ݶ7 cDHR< 'd]OnpqQaeй\|"U5aq! t!RJI֚{-0p] D*GZC'$t!4"(dA, dQ@5E lX g03l Ok 1'? D)1 pB*[Z < Q$]YZ*p bKA.TD$n &p[{K-ڠ'lH5AwQ_D" k WBe4WԢx@[4 b#=HfOhAL8XPq "4Dfށwۙ5dg4(c\?RYD+5@arx0F< v! ٍJPLD #y' NA)("`D*(sx)! @8[(KF:k2I/.RP!HA,:t`%n`I5d j,0Z  ( '8<2/!!iCu[GRqB1 ; PIA"q"dZ) Oguj6 x.36-d]! "u)X4~pF1tD e(ɚ rAfL" yOt'2+$"TۋD)܃2@p[x9pA<-KrFZh y|, @?X&i%:\_ .`?X66@As802GdA@Oe5ɖA !~ S0X1TmIC>(D@A]<GPīT@G RԸHe@ƴO^@mAB(hhDBDB%,CC(__ԁŦOĶ K0V<]M>4Ƥ,]ADY(("CDA%CbC4ABXBB#=D-P AB(< ,A !^U!abɤKR Ϭq9R)@vp)0)7TUB2Ǒ@@g:PhAxhjx,\j[&x(B,!@|`NAMO ]AW+A' @XB!!V%eRI55+T=Sk4Df(UؚdA XChFADA0AЁA#^OAAٴH @$# aB@N-E(PAAdT ўeCAdC?NA8NO;.E9.0,T B ( pCn4F5&$ݝC]Di%O@Yd\*Q ܃k\A @ $LKπMdp v,JNh̛|Ah#\@s2o5 A V È4Z0'h#,z ( [ABjT 6Ƌ0I8D(|9-t%'MN9 'Í"OdW:-A=:tD@ Ԇ]m@ Ԑ%HwVIEDx>ś^!T BG+BAs CXJrTAtBUEtA?2cVqޅE9bAllZfki(5 lACJ4O$p8CZ1Mǂ۬`K:Ԕ){7A)!9NrՌɔ)G^uh4?C9l)%<.c*U.1|UN`MwH  D eTG椎:&T6AXI~ 08XR4⍐% :m0A:H#h`($DA-d! AP(ğDAPPJBCAw@GMEFٯAP"]_+!DJ[57D߅@%T$GY,Gu") sm(GH׌,Ni1@!uΜcG-dd; 4 B.i^jS)6%P77X4B!,60d t0@JHjK@Gt 聃X2<΁ Դ+_ΐthfkC 4WJSjD!YA[$n_7k"D0TQ5epĪpU@J]G|_H.d/V  T!XA$C(+jT\YxO|^`@0`AeTpa,AP2ia  l$o K5!cps)G< t`b 1֫T &z *3 Z9Ń?kma:ɠMIoAhB 'DG AF23  `3.G ʃaXǹE=J9;K Gv \ (~ZhR,ɑ9l72Lj1_N!@~Ġ$Ib%n V>ioځ Z 9aK[k"/9аፁV`ijIRZ`60frI%Ж.X b@% (!(`6XH,ڐq6(;Wd` %-H~pe G":@ :㄁Yc*80hi,$ 2@!8 ןy&:!v)0 9uilڃ) ;M"Mנ  Nƈ(  n A@0tR hDs"Uĸ NI=)@ӎZXqmr2y~;nMq9NH@@~@FZc.G(oP,M ,,%ޮNed)~ rxK,5Ѽ#_~/p8 cGi,}ӓ(\w br$wPzn9 4R =7ܽ: Z E Q/0jwSZaK SL>(c,@K d$՝^EPVB3TfAeYAX!Ȳ~±p9BEq!zt_HEaN Ai@0dhLS 1DA$V,` i”0l&` r39MnuQa!g XI\a  CD3}={\Y0"%@@F-AAz&=A%9poѸd=3&p8L3'V\F%ԥF(@ nw'1o<"< @8e3 k@ƵvazAz ӵUQ+rQHLWnHN!RBC4 x}I`T BV!S# 1 X^9Ȃ<#1&0O!n$n $ bA> bYvCjH?Xz1P`A\p a3FH\hE"c YA*,;6fJmĦYAcqhn 5*4V -@A-,)%("]p]2t`MZFHr:M!,r=l@%HDR ~7T DWXxi !u PKB=+u(S[JU 2 FCхF^_k"-X &/ GQI2*(}fR9kHscA.2]C])En ^ZHfzMUr_ @KHE/a 4rbX8* Y<A}(gLb稭ad 7qLV(-!_;ș.A\Pf5̧>]$\֛1Ѓpd'tÆ ު pU b0Ǝ ;0B 7lA#Y/f ZAqIBI!Ł #fӐ۱ (B#l6H'Id L(X:n@,pfk AD̃>d>K`cJ8DB@jKd:cp&Bc&n̩ `= CDim >Z CN ng <R!xNKJǜHD,+d@L!yHwXxXj4I zBr ] S THP<Ƃ}V .V`  *r"~@Ƃ#` Nh`X(Jf z"m b`Gj(G]~h py<1R-_j b ]؅` P.v_O k;< .Ff D6b(bc e  Bf hf:Mz !Pr&p!DG>8ރ&K0BMppLBX:7BFnh@H% Û^crC,MdoB@aLh w *N' XАl!wb美 ߌHk~ Lb!yXA`  BvbB,i {n!6`n!X1M څ  R @eЀ` bT J 7J$6DfQqT Ja ,?cG1<;s Z= .b^ʥ"4DM`@4&_ *A|b `2@ |mbxMAL "!v5XHXN?-b&lfhT&J?t q=.aFB㒦*4n8Pk 87fnfޮCJC,vKpN!>&1#"Dz:dFĭ7M!2B&Nf&( Rn\p($C>ZFʘ7P`d!ofl Ih N&ْ n@A (a!CJ2Ó -Jtt°, @e@Rv v.SEk t1"Us~e V-$^"aGw߇  @&b d \F~Z4 h!B aD@BG%@BV>b %jnf5R}FDI>as*CZ   vQaSj7XE/ RAA")$c(&NT."8N+w(38DgUX d 9p В-:dGi&"1o,p>c?fG Ak7Pjztfd( >AH؂-,mL.#?Z~=I,!@ .<l/rTRp hB b 0yJU d,4A}bQBцS!ւ\x7 c bT Q8X{Sއ l T8-S!uǂ0 lBVnEWw`+(B|r f],*#p bXGs,^"Nf Na (԰T`XQSE`0@TB @ n!$L1"4Ok";ch58i )%iP^+BE|RC <4[2fBnfBVr)BxrނF.Gw S007PWlBrS q  SBɂQ5 ̵VbW}_}a~, ?RUv /(\a'g bB/&eR8 "/(#t"Ydt! BjQNfGQ x`Tؖ> \ hk#njBzd82Y;:(΍fd#gA:\@ d oGd=G8DΧ4i'i s|UPޒf&–)F8l Dg3#] \AO,Al8ގNأ:..D}e6*0&֩P WD-F0TMD `nV ħY "{lN]y\D?BSȧ6,`*`!PJ " SSS|ćݙ,:|@ !%|`$,@h61 XRL%i aڴ`1)8A_V $`*(9x2`! ` Am9Wsof4΁w#v%UoB gذG\qNMOZeOK #s#hq! ᛵ!G@,q6{0%d\|^OshH7Iu؊h3bJ,'%lHS bk<,v2ȷLaPL})6x3bAw U "~<QxD0:DpV:?Avjk-!SdZ'xA H̖ ;g΀mbR`YCYqEx"Rjm)m m-HC(qqF n{H5@Bkap~xpQZ0?]!r a]a;Rqyc]r(DM !7 _ao#:#1t%CPoSNP!` aN8Є SOgu1LU K$fd r0>s"s 5P P! OSpqS u0hP ;PVK;A% OV%%**<[%$ ?%&mݳRr=S!!0{7M|e-@ HWyfJERFP[F҃_qB6!ݤ!P~ka[|&;n1/uE.֑rBRr&'f `h3(#4 H|Ui17B[`q3&t] sw<Q!qqf !0_ZNzzu-vd`r $@* &pPUP)@h5if H/g'{`g-Rh]P)b}_&15/Np&)P{] vʐ!Ys7 >C5 'b sCa rUDO'kX y tm>H .aV|v LUA\)Ap @` '5F:!QAA[ rQr+^bVL30.q66;8(bu(`w9 c/cӺ`Y-0O Pn\AQҽ1\o86iq*1;=0ba {p/ #| cl2e.y*@@`0&_(/R!!vf cqcRg`{ A22@,&Dž-1_>7oa%T$`-:)pJp O,>pB4MT;)$ MQbWG4=I` bE1|[1U AmWyKml `0ȍŽED@@ }0|FpB OL 7pti5Bow;Q\#8ŗZ4Wq.H^[ 3`n!6-56,3 ` lLJD7 # $0 '+@] }pr!`C$oWq ` 0)G0›%)eUu%%` p{pYAfeRߖdS'> TQ W&IX2F @PӇSA@f"z |A~ 1$W-Vpve zmPE $ukEQUW#|/m].EmT0{1kA9TYI Z]19 IP .3`TQt=Arcy74,] B!1wy4L P!~!QsZ!!q:'76 ^~M7A-!K[Γm S;ZBq9pk_[;.  79q` P0oe!J *śp 2*3 %a !&,׌&@& cRЛ_g/ߦ&ev `_&Uh`&.cÀ_=BY&uIiBjMU `p*_Nk Bt w{,q?|vf Q XA :M=`D)6LqEU؛o46`*Bg̨`Y,0* P8)! jLDKsnԣ Vpi;WЎs_ _j @[Ղ5W{jU\PE΍7a,?>iU!8[LrV  ?rpQbX3X} %߾٠ i\s aM .:ujPO}yΛƌ?}[ǁv#0N$`BL" z0{L1+Z Y~ p hOLH("} 8 Fxgj $(^ 2"4r?E." Cǥxq%4]Z )p !9 ӴgХ (zcL%VbDӘH z 4ĠzIDCS5H 6p袂Hl5!_R W%X4W%R hC$1 ,Π (@Y[`ajpㆩ/pуݶ"+";Z%`-zw7;oku X"VhE O:^ OJFӾE9cA6p2jb .q7t#eiviZYծF9e .(Ǜo`iij 9C/Ǝ(]cn`0b8Bp`# ߏ\x,BM1% '8Ap\lu]tіOXs8H$`BѼ 8M2"0M1U=tAt34w1?Sτ@.處J$}?OLHbB E l*!Rp)|:Q`%1p ݔ\4%Bi `,U<4*p~C,8 4xA-W5\ RxmF`g0p*c)@TBhŰ(@b-p l/n bKAxn`CX4)ZA0 5)> 9>2Qьf( X҆i3 V$FVчOA;`%\6ݧmqαs]I0ݧpAq~" B *2 @j#H%EM'DE)PS倵d d5Zͧ:!.ˆTj%7Z-܇KσAC?DE %<5ep TTyګY22+nыFXeby-* < "8+& iF\\w,QY4阺BKA4),[a ZlP\&~[d 14Z FpA`?@ 0@%`@8X1!c΂& pNfQ~9uE rAL1Ge T?I*d#:|W!b@N*Z@\[,!A+Dv>8D=`|)x~xlX-z ÞDR4M7 ёSH԰hL~+]5&'8JT@BuV,<> ySvAڰ:_U'A(36_Sq_K5JZdyp@l8xé>cSx i(&Ѭ,x+ )ڌt3Ppkҭحu0*;h: 0$ȭ¯ 98UZ2b/- G0 9 V0ÁK1ũ/*0="8ph1Ђb~pI Ѡ$KbV(c88Bc(E# Wr0!@c'&Ais[@)x^LT؈*F+*(;Q)` QΑ28Aٞ548! xMhLW3J5BXhJ)/ٴQ=(2:p5M{꾂0T#H@Ja) QŠ?JcHK(?x?KAO@``I`4B WlxP,Ɨʇ&[pox@ÍΪ IA2DѲH0{# }7x AvsHB6 ~Iˎ܈:Kȥoo@ Kh8 rCyo8X;X I;ЂRk1lXD 18K|bЛ_!!(#8%3<+?;T邊Z32(~ +]O:)F h)@ }QY/)댥H @:R ayш?xrE>PYH;1:QЅ6 cc*Wȓ7kIH!Tȕ/ᥧ2tbȾJ" \Һ18 =P<25T]PRR yp(Gjaʁ0p45c& =mh70#8F ¿8Z0#ZV @L,\X̏!$g/-b09 ॑YSNX%RC^5U|S#&h$($)&[ʰ:V,Hn![p9x?;d`'(V1hO($[WC< h"ۼ <Ƴ~ƃ`^ Ib!I]xW#CI;Rl)Z,+u@H膆Qp)*6,R#=5x)ёY$;i*,T/5ĈbC"k`W2x56IUaH 8 ,( ?[|$ Xb0=-7T tH蓾,L|~!R}\8U >w`DƌV0# `߀h_|` 9P$^ Y0XLI(^=8Pp9>F{(LH[c 0>h{ ]>HyH@ SiĽ++܈"#H6x5_\ ۗ(t@=B xc,@hbxL aXa "Hƃ@`訖*C|܄IلmX:T]IY8xQf8"b#3 :X+u5 *#uȬ5Hx<:9j> >D:ړ^ Izl[ ] còe 2¥bbs+)ae!:5ͪ En?1"YMja5 (`Xx Fş3`}S^r&|vH ZUK dg)bsHA % ix^!\-ޮxl\,6D!04ʗ2*Lv &hhHْ_~/H pƅEMX a1Ms}}8j&q/hi4@NEZXkO]۵Mi1x&K` A8hZsUU$ 8$Ȳ"ՐI_59>^Uy> rcUBD #Zd4 ( k;y9SCª$i Ϊjxx%c3KWackL=+49)Lߐ8l4QZ@MO`#9*̱0)Q=Hv@ĦusJ)x:xb 3zgw3"|eNzG 3fup_%&Xl&'Z?`Aªv#_=MPK(hǟ"O>'4zo [J"EX1WrTfb2/7ُ9//Y,ȉ pTXnTH'5?̀=Ya/5$K4dX CAq`)td(>aBC 1+RBS[%"H0 'a4kd e7'c f0ALSM24Я `4P.SOH.%msY:fC"5*IIaK惪+op0d֬ Q}@ˮL U1~C VHխVZ`cKdMQ|rf2{*bhP"R"-@dwcb1p@*蓯(VQwnc,ZD65cĚX: W. 1J\tL&f~Б!h + Y70N5 ap3I9< ;'íijVJG:K`0p^Í6`#L!6.SVQzmEp"PJ$aZV! ?-ѤPr(š 9 C `DEμNvؑ^$H(I_0 2 Pz 8Ȱ( !{=GU#&9/}{HR"1d8 p`@O;Pb{~H1'jE ^W}!`ab`BdrfFD1CBe>=E@Xȸ/F%eXΤ; ! 1\$HruX>T A/Opقǰv 1s0>0pqVL1ߎ (JdSdۉ*Df;'k1i`(6~#,)U'8Y߶b ` c1Z"z1'33X) `E84B Ъ+DP'ur</ـ&`(5I]cUL$@OA?Wa@WxŜIT\@@HLRP@P\)iVK N  D94`@XFd0!M 8KMIB AY$W Il6 UDwQQ=ɩaTaPWPO4DZЂ p@IDD1IA{ <l<xC \q Dmu1xÆiƈ](h@--C(@0L.fNΤь, OFC*1tvȘe, ^-ADd1 R66؁4Pl,e5A|%>~ȁ8<|ق%Lɦ\HR#Y%\@!8Q 1DU @ L IHC p@PK\"P4]к,D_T RT-ԬHȄ 6D( x@@£hq 'ME4* H`C8N !EX@@ YYUP!ŚU-U\UѬqR%Q YV`Ԧ]^:Qו 4Dt@@k9%D,AX w2" 1(!co0 G-ϴ3 rt ctH'ub MjM#iG/:H+ 7H葕|ӂH3/S)0({\儧7zc^dd+BCBCFCD$0}@Kt 5P'P+PdCud5sQQUIXëQC%0C$Rz)Du,>` 8"KHg5DF<'M 4T@@Թ@ĥhL0JC$'C`@*` Ԍ7H'ACDaġȌ. qF.䐀5gX&`b $#@сLCUiP&C@T|h"E0X4Ǹ^bx_AYVC1L<&xDIdX DHH@>8*CC1z#@.BZB- p0"xsr, DzɥɄ)z;g xA9Qd𴋋{kxCEE%{Y&dPu>xC>0g _9ٝw E(Xkۉm8vfgQnw'1 h|Mn`WG;>#1zuzhi^.gf Ah7?zΰ}(jjGM1L1:ŽHE) '40D5ACJÄH)<Qy0DI 4=sMLW ĄAhapH 6t!41"D18$ llhAK (DI̴)3 PTa/]V,tp! ){vpUHdppCn=~HᏃnn0A7ETn >xh @:,$T\X4#Sȑ WVX1-zKtPO o`h;6`b'AmKD?x ? l7Nv⣇~0釯S7@p9  @m 8m+EԣScx&9&9t`C`0"tzdB , K6v`ijELkRn .~kk &ƨ# B(t:k#Eh(u .*zjʩMa6VXCRr=\yhRb0m( ::ڃ|eHYȚj=h!@Ac^Ĥgg pVrha +8壟`|XQ!pj4~k(!Ed;!Z=Yb:ׂc>DC>g<ۯkZ@SԮ=  7v&d*q4A, >ME80hFjq6Y!GyW&I* Ҁ)K/siĬ%6d[M"r:=Map!D@Z\uo½#lHbXb[Tu]7AgBfQu)T ?H45*b$l!E L -)_21ul" Rc H"B>hhC8 (  Hd-@``ܓ `  = v}Dq! AҹuzP@١z@M $CC';IHhu@!] =CY) B p9@l7(E(?NHsGL! ܀&=jtH:jAsԀi.l~=NuBtmO{]k@wT]ܤAiE.q,B+ ʭu!RМFXJ$Hƒ )7:"*! CDYqI"Ɛ5 BP5c0p6 "Nk|' I,J f. 2 LF2y/An}TYA=$g~"!(@cU;ʞG8rl:`hRV:e3Ӟ%7Dc$ Pmr;id"0H9\ (Y .S.` `gC&ۨO8opc;iq%{L[4D59[P# 0櫓sua(iIHqL!ȶՆ= %+0!$ Ю:H8k5@H,TEII`IӃx!9@ 9E98TњI,%@UCv"0~(2xY",phC=nwu >=x#HrK0e>5Еr@x:veWa9VC&+P?8cx $5- @ MCq4-@hy.de.V,m 1-Xv @099(șHRk:1H2DaKPdle1J @b)-w|6p7&sOwC 4#KOn 0 p(.X" ΒJH.N%.º(!ҷLU!DPp!Aq!T( r^ڜjHPBKA1*X$ Pp<;)]mrP|U!r*teXiC@zhd*X!y` +C!n]ՃH\.R}lK;, DյnAz0e>H@`"'~ Fz Ȍ ڠ/th1bA!XF" `'!|E:)9|cBAc|CE;8FAkcc;kdx '7x 0 #E .!dl <pZco Ud $!xNKN\fdHRÎ~ Va @ F! JPP e< %d6`XO`* $NBVl ( ~VzU &J,bzlVR@ EKb(*XOT db|a"| ʴj"l*.$. \A`Z L a#-:lp8PFCp@c|0-(<#ljDCb! =m7r :!B!f J @9.427da, p,S Qd lD0d@ {8`@ N@Kdzb6a,T$Ў!\BQ 4!  6!6 `dBv "$(U$`}B"V"Crħ!X3Lތ!B/! !a`ld! q#< &G%>+r# M?<ѥj  Bh!,!֠r+xr@z,)@4Bb }f ,vL"Rٜa z/%+;de(Wā@x\p#\0-݊2"öfagzCQ+ `gf=P<@hof )8iĦp0fCZ Zp>P: .5Sn`5:kT.s6UU5 `7f>a'GSLR7"'0A8 #,.ba aZw~`.`8Md8&(P hC7 ((eMqL !"P!& `:!dC :$rBL:EI+!$d@kO B|!VAH{oW#BH?(o#JTTH4a/ܤ"eq$"*hQF}!!>" aB((lA (A3 .da ؠ`tE'#" ,&QI{bbҴ *7cPި&- e;x`'àe>9\ Ad ΡCV7n.;G@ sE35.25:p9  젺>B!!\/AS NM5Pd :ZA7Ox#Մ~dK${p/c4!*dA.SJ<-z6aK/$At|>}G]laO"6q"U~ 8„`jB#He!^ C2XA r@q4Ia'6kgYW "5 gb)BHml rO_\`V, *bĈ}Gu " ,R  !zkhe"xea ~ota 0z &uaVj 0 (F0l]ߊea!5p&X d<ƃhhd#~b#?ƣnh m;f >ݐ#xo>9~fW(I9DxKl "V&(`@ &Dڰ \mfjF5\`QR$D:fsf:>KL>SKR lW:W* AwEL$qlA]{mbtu%` W6g5~89\l҇ *Wh1weE>SyeEWt)) Bz L# h SxkȤ'mK." @o"'`4btDq!za! n+]ʡHؒ'da\s tA3rbp%vAC {oeYOXXb|a@EU_SPh8;#89 oslh>CY5\3][z !㚀[©K$e]n!bvWĆ 婁RP,`w ~Em߻!B+ޛA("u&&"n ł>P!= hThjV>/'2!R"%:"/d `U%'  Lta N\!DcX X@d7|7@ X`chw4 \ |FBX"B \X!G rCY!$HDh?r&6$@ƿȍ>mP(d ǨlJE(Y8n382eq~8]>RDIb IrSrG h~`pRPR.pO!`#09S ̈!f[] M~G+bL Π%!!n? ",&iR8X"{&e `K*|!@#B~z/ro@`V#.cO9J# \eo"%0fE :\8C֜0B8 aaDfHKU k,PJ@ú("2U ر@ے?XdճЎ \tkZX@-B (| НkXq%F ,x )^8Z" &;Ypj7^Khڅ xa[*P3gf+:/;Vy  _ H1(Q&HgC`X km[ Y2LӀXX, @pȒ %#!C3! cM-6a (MC2TK0Ԇ>Hcː94j Q QR)ANHHP< YrCC2E@&|B"´*$ RQu")8"ƱP0L@t1+PC}E +BUhs6`VvvoC@0K<\u0nVUX 0dV۱B<|rQ6bռ#1:Oбs<am 0? qE֚c\[ώC@a^jg$ZCb O j%Ĩ2Q2`C4$!CQA8phG-pG>ۜl-?`G.dz-9"#2Zj-k&j8,- C=4 =pԃzzi< O %A¸J%2P PAAk3E!"D8a5 $M@ƥ UB4qc!V@ n~KD> `EP!'UG&1+h)f5X-06 ~Ji dS)DZ1`C0q,Xp%6K nP8febZXψ{^ 1Vx-!Ӄ! 9DbUǮDlkTBPIFa$C'#Iȉa CBxq՘X9hraI" n@(& 6gq3BzFMp ]@) h!  h(88χ,A9vZb87!A,dd$ 5G:bȆ*:6!)ț Q2 9mF*1980NBz]!pM@S$2 ;5$ a*H$Q儅LHTb>4J5pƛ)<aH0[E R9HPYEӆHYB@?CBN'd 0P D$DîA` ]s"_C3/q!# &H-ݘV.`#^XXr8h 16ژqi~̑c1q]Ջ^C1r<T3M9-s!y9*ɖg +bjyc|>!  6a !,0ߥ@rp"0dC# In1CK큠 5ݍg#vx 7NH@[ދd- ʨ`nUjҐ>! bXm!AW [|g\ULl!Ji Ԑ8Z`C& ]CNՠ,}!a`NWsvJjbSY.|.aC  KN d2d085  XyFp @.)(C~SX|lp-zhm%i1`^cE0&gb Wr5v`C" DN{\`ecv  XpaCKrELeg9 lcD5d-T0 ^dP >b9ɐBfM`NhCp ɋ` G BB"_-9s ( jYppIwKbqs2gTGzJ / z|rUz2({@p!Ӏ?s,p 3DVȐSAeneFYv !~hZ t a+ ~" k"0"pl9dVm7b)0@ VɆ i!$) GG Eo[p_ Ih.0GcĀctF/EW0u`7ǂ=2l0DW\1 3HIy 0 ahYȅ0q\K ssu` SLq ;bjs?W6 )> !p $k; 72!PRER:i@dK~} aPcB#'PPSjWy8$Y"hEf=-Py%oH $@)HAJ*'U2 `n  p)(> YxZ)v jHM|f )U`B=@*8C )2@,@,0^WBЀM !@F|hdhD230U<[J<1J4`с 0l7ئm ]XAI*0 [B]ŕ[   18)[Itp9IPoyi`ss<"/!iܐ3NbOpP{ ev-7Q8 R BxQoh]PUy yVJE aPp2iY lo&.k :,b;U P <; *mZ%U)o!dCo0 B+ dXh*9E~dpmb@< a++RW`` Z񅛢aKmGJ_<@ İ0<:`qj^`P^ Hk ˄27Z hI1j)/`^ v  |513/ȅ5\0kătylk \}I"G`vN,km u cGsc  #-`LĔsSj(v"+ :ls,CLZR+9&"*;j+B )e3&o~0 g0  ۦ%zs&ðKNp| QZ  U$ ѯp!n{T d| !iZk޶`+e- 6ls+0χ;vE ` Y@ ?2 $ YO1U|L6qfZI`Iye/oIȗ4m6\qo4/ r 40i 1^Z[pet{0l`C0݇$G%o`_51 k6`;tfto<` b0 ŒsMc 'i%89Qlq %ѓ 9m!A "!(k,p@C- !Ĭr qlnc Rhe 1> aO#@ 8} jB='5VN*L= '  m '|[%`cĩzϝ(弊zE&\"o0bg)Q - c${Y2&=B1J& mbC·,dg|gmkS F\Lj1<,1 1ah4rVP ZÀcHJ2l@ KoHz@Ght2\(t K ʆݩL/Z((`[0Xf ȔL&Ί7<b 2ij!>VdGYa;bUi-`"rʼnpP/UPX ˳} E qE$|Vu&ѷ QkN.@b&C4,P!h g@R?{z*T^\xrE6ZƤC.@fc8`x' .۴ ~2 ~"FwօyƧ ߀ Ŵ<-ӑ  b;>id@T0sʰ ~/|7,Z` w|57_p3zKc3 ;\ "!|r4 [`z 1?STqn:+d:.j&[ ''y+a9fL02'5[5MseqZ^]n _[6K{Z]XعѽpvDA+ߒHNqZ'a1LSxȎs%/ym \Xg] = a0ŜnI'/Dhr kԣ<\[!T9 G#V5(I6@a!bIR +x#~ɨX)!b 7(aXmakHAa#&&1r0@+ЖX."%%?`Mp0 9 m=(]BHMCW싁9WBd+X# 5= !* `,@l^2 `NfYNV#M'i@7bK^^VlX9DN4j$lQWD6dp·bz2I2 U7Wџ% kIt d,I"E*f3d8B8"(P+8~㖴V0B2b xG 7 ڄ!iCX@v"xTPѧS' L(E)$J |ھ iiKv7`loPsI QX "N)M+AM D$B W0!3FR"C79sDparb$0| #A=; 宑 v l +8`F4^5G`MW f̋he+ % ','// \Q;5jye:Zo kN^Tu9ہ #-D*q5S;`CRă: (b%:D ]sp+s1җu'>oT+iSV!h@"$5IjNї(&F(r2 @ XRkN Ѫ`B?F)&!^ъ\"h-]O%Dvޭpa =PySďC1^P(Nы BQEzMI1 =8XO`XJiS(#ֈFP-1rt%/ Ā\!r"$*҇+dQ^ dyLЖDsmIY3o^}B'oiȥ{E8Nԩ\%9B?n5 '@qNͼ@ŁAooXю.@ tSi3CfRȓKW- as,P(@^t$3zjVc Y0F+};x)C2# ^oЂx@x磞#AGBG$H`^==X$O9u+.qZ"+V#x:Ht3/p␔(K`a1*$cA?9j!)L:uTo @u, :0Q6[}Hf1"j#0$j1"Pjآ -7 K%з>B/68YP%vi 0/MBhc9Urغ(x`%8 4%_"8 ,kd San lh)y ,SCIo^& y;0(2`%] X `ۄ@*93H30<ЀQ"pHlaDhV;1q'3B‰J!:DrZ!k(bݫ)z96p#oFi:1!B˲*XJ(FsX#,`5PHPp$I`=gX>@k7@-n 0$}(Xf)(X ZUؑY@V`Y[0$i#Y89r= A#=n&ĉ(9ۮ#{91/Qڗm$(sr Y(D p0B%R8+8J-0Ax`o٦(‰Ҹa7C6rymAPo(,x8F@xDDD%I(`qX$ HX2 ؼ5,HQx8-!Xh 1j;+\򴳲ZK9Uk5q ,8ah60IC3D520DXg(2*k@Wҽp1$@r 'b"8K2@ C @l#Ϩqd Ny6r1Zȏ=h/K (|%(  *Dk.岋3kd ؄SB80." y$IXgŽ,'Pӌ vpb:Njb$U瀇>@YB!AGĎ's aag>g@yᄍ$KDTԼ AK ,jɻˍ$Q|r5aͧR2H`F;9bq @C+Tk1jX?i H--2Ӌb[+(!3%a=4iZe:HW0n( #eepx$-")pmABBJ}3t#e kʐchCe " G;>ҀN.tHҀ6؃pK9x[AEÉ Yּ+ˍHZ:b58|C‘0MUր1]DX}_ ۼ;0%gpT]éR BM4h|"ma`-ˇ5(LP)43%Fxp=6&5GX9 ݓv\>PLGPZ:GG(CH^P+ԣ)t@F`PhJISF3CDXmsD;HcL"`g$= H /@߈7Y"ґo(Їo88(888b n`BЄ8ӌB| ΐ5]R"[}$Sz6 J_Jݎgՙ9xЇ /fa̋u%`,%I.0K1^ ئw`Ƽ-h`Apï&\H ټ輨( SiLwEd`ɂ.Lx˙yD!ü AgH#[ɇ0[ O8뭴@$ :Ж9:]Ee`ePJ^0F35NB_ jdlDP(h=e "Ti`C4:ockX+a 2A=&1,h6Pm@JF4'Qelr;dyb(:?iGVIhRI"#b"mU @-%M译1/t,/[J ݛKJĉK6>`Z: pKr]Ks~~֥(}Xۃ/6H9.w :V-"(&`-h_ȇ21ÐH)10ux<`.(| }`^Юmn`.Eg`NAM+jQ̥tYBkeQo3@ɇ[XU0 X'ɋʼn !db02QFJؓq=n<cBK`m[%[rמPVYM&ц `TRmc,(HCKC۩*gʞ3] `o$Ju[ua88o `邯 ) p0w66B"Űz a u$؀A剫 Fʼn5UЛJ%޵$D/Yr 0 w`m`h}fp( $h1|ÉMSms@s yXs, VaB.A )K,\ZA~(A!8μSQ<x0orq@ X Y V[ e0-p^;*Pu3]It-s0m<P1Jv(hs,rd9HB60 .=`ną;(Kx\VV!@cGP@,E?Vr)@Cx$y͛s8`Ff @ FK'\"V1Vu93[hp .GDXuR3mYR=rEmMgⓉCba(W޳'ζ]bwR\W ]Vp-Hq&{ǵk2 zeZsKS=en\Z~w72˛Y-KAUng.Qy.9Xqsq b "3U<3 23.@@+uxS`+2Ɂ"PO`,A7Sl,?Fa.q H 1( 0 3L ;K J 8Dv<̴'K0jQ0ăPO 03PG7lAjvPql3F3 ?@0?ǂ zpEE)?%Cv02KA(#Ր,(a08t?aE-aR*EdD%*b"@<8G0#Xf25r? re a`b]` A&b*a\!<8 H'9_[i F\_}!C9l7Hyļ"M68hp#!E75Clt aۜKD\Wݑ=f^g!Kpqs,"*#s7s@ ":4&?Cڄ \r%0Z!w3%Pa 4x |-CŇVlc,\Y@Y$D@k#Y 8||dyL O& pM'%YKP2 ^ M2=x$b  xa H%.U;ծŠ a}:x,b !\:N'P j%3xg]7@'&׾v*eS[LntL%J| T ʡ#E(H1@<)YbJ3Y e6SfG0.eqtW=L H.28]r VAeҵc/lKk| 9\V A?sAV(lE:]!%I<"7ݥ; 0buHYr5xH Ɂv 99(h5.l^;8/:HCGxB]eX 6@>PyԁEǔGg G)@G4!l_q04cK^MA8KXB~p%OIWJPOHMꁬ:Hp ?pso]A*癊 dEVB*XeI8Q 1A vR0=I(ޘlJwx@Q:L1`ke)J+#,U~ :$,cs!F^b k)N0D#9D33Dls\4Y ,`HY&IMpihߑӲPb)C@.S"|?Ol:BL)7hN:< u乛g25m;3 bu(9d>&+ȒY)g:~kK M7Cm3X%@Fˮ!Lt7T`Ȣ1q̄Xg]5Br \dRhA C>$@ d! \4ЁKb #]*ԙ $Ѳ D,  ,6LJ7b NC16hC"T1<]B$]́ UL}Gp2@ Jh@)20!,?/PL/ŝ ED<C[#E )g! x V4$Yp2  5W9xA9HE?`N0$LAx.R\5AJMRhL$}%Fц|Ӹ8iDl$%zKp0phkBXW,S8ՌLn\K~FvK]A/ǭXSmmJ`Ă:$LPL2@LX-lUԆ~t͔)H)F'  eh&,FTbpЗ}G^@0 pb8b]43Ly@%PGlX ǫ2 AȆP ( %DQ?@1V i!vVMDiʆ 0HL٥LD,AOZ+lİh.LB9\4qa_ȁFn @ n@6mxgiXxwPPYBJ%,d-LLy->lͱt 8#J nXSѝKlLwC*HF:ɍ.YɸR9|ѣ-hϸnX 1E/cd>xrIBȔrrݴ`GA ,(x:0*l$<ȌK @Z—xÈpO0C/^>C7B>B vKVĂhƼʄ2PT-SCl%E&za:`K1tQ݀1`Z2ta3ȁ(bHC( Z\AܚD1p1'?8A?$3(Ve!h.UJDBLCb|hъŲƏ1/5%$\`mEUЭ88@UXoDhQ@i%Q3q%JnX 6's-~LL!sZ5\:,⾉"kׁs GL<&d˒N04ľ 0@KZSтT5jC= PdA.6F> 5f@n:,T@"&YA o(9!}ތ̥EPp 2 +z5MP]&2d;&% C c0he9RI9HшVp]#>9c&bKKv 61\pYO:@VZ)RJdt tANtI5X"l:A %y mB(TD0& (//c^ca>c#5)oV9QO+䓁  Rj $*h4Ț=Rh6H1t3h|-nA0eA]w)zmq"{l(1I6 Kd hHPJ#Ȍ EJp 9҇. ,6iT*,Qvb~gѸq40L&:ֈ+8mHCW&Zf _|lg :tCc `QDȀ8VahNf7h@S< ab )o v@5 -\@ @%(RBm$B=  9F)6( K#Z~Ⱦ>$Y[0>ӌ8g8da&ڰ -,0OvÝ,OLR`DP0B5@X0+<ӘDNQDx^xCYfy m1K Gh4\Zfh֐F-Q2Q`^E$#Ɉ*H$QQDX \R6cŶ'aJR IBYEnc VQf Z (W"0D`$ӓWzCN2l)B`& $Z*5LKDZ` ^&bt8}D ܧ9xbs`VdqxN A$"h AÁ! ޘ h@ HCzH" -@O @Z7mS`a?%a0/@0EF8`+PdKa_db 9ȁJ>ߘ70J/;Ѕ:`(]l`wR9c ذ`c(I'Y ¡":76aMp[D§#T2ydxM"n@z!bqB$胩CFD bHJ5¨B \]G$ȳ*"^@&d"+\EA P8&nlD%6KBA n6!#ԖiEvXb`2D-,3$g;@@Mpk"1 հ=J*S̊Ts&Bphh"8σonA#U<1QɆr( ~bYȂ@@Dl8!8%U ȅNP<v(6nNhB^#62U3Y.Kt8ėaT"YMk ϊT*R+h]]1 d0bث(#ax9亄%A uxd]td2BL=}Lp+"^@ !bgh$ :A3y0}xŠnd{ %d|G8I3(Hf<Gr+a14q[$(oN_yuP BPRPaH!a1ELR$oE|INRbV1C56K# ^. %+DLA Ώ5kNdD@<1Fp"pq.F x۔)b p3ѧ 7daS5Q~ L@Q$$a")t+ Zai)mBO` (DC#t|D_ԽKzɂZRVJP!-D jy@M$OJ,.@{ ,J( n ޸!R\A>ll&H Xa o >Xk&=y|ddc F@A5i ="@n`h!(h&"YO#eٰp",2%$c!bR^& "B+"JB)-R `bVbh4"֡ "|"$fT"*LTh",Wdr X+06!(.(q"~@fQ+`[b O*Vx-0CI&4e&4,JAB&pmZ n o"m0 ko>e b`8`Wv% A t@ XA$H"Ԥ֎Ln`'''iH.AEE'P> z J*{>0A-@-'AvJcE/)A/) d_zM3( x4r=Om c  qpaWāqP+fLatc l azp !&#l"6%*!l`.4EZ%kB#I604B`,J" "8J=b `ftᚌ`S "kGzQ\"lAp:feP/^(Q]^2!A#xO a R65ˎXo"c)8/ f@1"ff}><8"#DᾌΪ! @&dpACP A w*BID·|R`xjJ,Bm,!")Œ`jxӠg&·MaEndQhn ,τx T TtB&!.A! aO!EM& ޭe byi94o b"$(#@X&Ne(Ёp h hi.l!fdaB )b$! ;Qe(lF:+~/0h^څ!6`3Nbv N*`_a@K*8B=A=5B>s =LI@dh)(1L#pbh {N{匨c@BPIe!"g^1[C'".TGifˈmbV@nvc VIaa#[%Um"'6kI!r ! ) >AzA.v "m,R*@ʴqor[|^DSDxBx~&wrHG&>`D~’2hzE怪$ G a@᪊HO AU$(ܜ gPTdn r h!Cm=!HFng~tzTw(j RNaZK<8.A6 f $"TeRl"2P܂("ꂉ"frg"0&#XL" :Qb"v^f"F"^d"_bG #3P d`aQV vx\eVZ"-l j"KP,+7⚢ 4HHe/ͅ$L-4",hέUi !J yM}&Fb So8@n28*s >d:ZaH'͚w"փ"baM>cd`= R K7 '%렗uZRR\2GvgNQ/@)&!DN/A>VQzHʊʁ|AN7TCO tMInJ?蹖g`NzAhV c"<""$@@ *% f%[U|։1e 0$%bF""b.80Zb7 "YJ]Š'4a$G c{S)/P•B& (= (Ob"*HA4\ACE3jXlØK.+_B"N`|)6!Tf%2"V(t"_O(0`q/B^7,m "` f"0aPL"8e'bhocVa/>ր0ġ(bCrqnd { j ХviCƧHiOkr'J){Hh5}0yHxDH (0645$ xy[N`Z({b3|$zĂ 4"`ld<@r8e8f 1Ѡ0exB $i -e+$JcB"V!,T0V]]ڴ5YN +jİ% 4baV#:`V)k,;'!R`aB!OƸ$-|.&ʨ?$_ƒD+vPk"L#,VIk4%,oޠnѵx ʆ7 a' f7bf ~Vƈj"`" ֻpPHPД>f LV'[n@ZGtZh`Z~":d"(ׂGkH~zaϊgdP, 4tAp!Yȟ!^U q"䠅E1NB0Ï/b`AjY =@"'feVЌ52za# H[ 8`  X]dXAh^!0^+g|BiJ,'冤$"h\*D+\Y" "L $ TA*ڡ cdQё,`v<1W""a^4gEY'4"f AW?  ])4fEܸh0JA.($o,KP Z`T @*U `" ET,B@hS3 S.X +,$X a.I$eЭAe.`PBVM2 \`e̘pkB+evl1V\ܪ7Gəcs\VHlG؞;-ֻwasd06l_Cp6; ZvTgn2B W+09W>ĈO8̉:M0"E=) jHÆq<" tr*2 V]#)WxM@/ޜcP1`ta$xACAP)lA)d t04ISap-x0{DҴi-G†BEa) 2i^&d 0~Nt 5$ *d%@y Vj"cd>1=t0$saD1A XZtDRN&t Kӫ6F.ĐMT>0d4&`D%SHABpŬTT "KOT@pT@$JpAa$$`83ы/d5$ $Wh8]T`T %A49N tъgqYiVϡ75oP[jo&jv*[qq7r|s7ֽ-Gz}M C^9VG{ y$LK/} o<(LD(0H:,`bβ" [$s&Ȋp:F/3PFu@97lH{0+8 d0.a R *m)@ Ԗ b[!,0 O;h <&!”5D= |tLj"~E^Vi>C8ET zmB"! J$Ҹ@?mB#ȂA?E}+!Qlp'$! 6`(}I B8P@"WE he~)HY+=kXa`5hk7NP+lR,(G(=(q Nq T# %X&" "Ed ,DzD 3`oy&cAk|kyuq`9ngd-Yof'x8O*3>TS#Mb>HLc43 E x*a8r O7YD\l(l(rdDB#qo@e1FH P&HD*Q>oWDAq>m Y( , 2ŴE5q Wn( ` H`jdM"{|A^ ͛Ha$z%B9@IN#!PT #ғX+lMĭj bZ\"DC(` (nuf7&}PpE Z)SݘB/DQn['NR0u wj&HPi+D,bȉMNjUZXJ\#M~=/dM&oT #l"wrEىX[BQEl+ 1o b_|ɣ@0ؓH CFUBel/A ICds0pԸY0f5pGGK3 jrXëC\mY`h7\(ٲ0SG=oxF"b13VD'ԁO hc+67%B%&{pnn]R%p\10x"U@ /EׄDQ@s;oR44ib dA gx'U!I@Q#S ` u=3 $wt!03Y.Qp߀ qdMf#b@G0P:w'zw`y8aw2c(8YYy K`x 02Q+3rg sx7`   h< AÀX@ 1#5#u =Q2" 0 ^0VIkBE`b Ws at'Pb!h"l!{5)EДR+?E,p +Wib'H]73eP"aJ0SR)eDGy"a O!sGXPҙ3("~N !p2WcHm.d ap.j@(B93P0A ^0y^>/ A=aE)c ԠS]0M FJXȄxJ;32`s1!k10 Srg ;1J  ?2MY*s3TOLX3alCN6(@u#A:qt(;*S5)0V3ct835 !@ Y5Kŀ ' a R pB-P$ xg Z u,v80Ak0T" (puix!`#0$@ iU>;0NB֑(²dr'hxvnZ1*8,P h!X>xm2tZN$L\%!APi| 9*8a"vB+aop}LYR"$sЕ+r,`G3h:%&9U"6RW+ !,ET7&ODr 15w H GT7AAu* hA`C1`Q g#'r p=l F pڌU 1 p;p q% aBg·>EGqnPWvnZB$QY/\&aA 35҉Fąq ߍ=;0 #kPK,#8<3@w$BSLv tʊI5uIL}SQ^հMm l Ul5%+`k QP o` d8ʿmUd"Jp-ɮQ6(!EQMpڽfp$$I|'J M]pwK~ 6{zߐP<5S4W+`9GY;. `G.ͱ5R#N1b[+9`$D \> NܛgoZ&rP#@KF(Ϙ+xN<0ȱ$):Y2]X0TÆCpW a%!P>FQ$`5\;։TאSP0uz5  F2tq [b!sP7aHǏMQlpOqmp9`gOQmԝw Z2ޔxm۝wZޖSBO #pB %tip!:l>KR䶆8=*tQ?}{̋.ف#hGvK^TrmIf/]* 4.*~1dhH rJb#f>@hS,M H3.H D=p@0X zDqUOZf@ jeO jE!9o bci<(!wF8b`H*Ɉ#ZzYSϹ>ፙ+%)f0x(N VRp%#Z%^bdK  (@LbqPp-4Lhț~B yH#`<|C!fKb.5,(M(< @E&J{ &Q(=l!{+34lHM6inE l7-%d(c/>BATbI)d/,868ps`Dt e8ދ VMĭ;;Qz!`2q@ Oc߫Xڰu8hi W@K8RohZG.M)g \!7hH"b51Hsa_(ւCb4 .@' 5a4#ŰSXJ5K, a1\AyX%aR )9 T` ѐmى'b5P(07 @Px|#) L> "MpLC45P]bᄻa.6xS$'2S4 x MGȑ~pcw0(44m" x[Hяt`祆rmأ$e"Rx!Mh9m(`bb\URR Z:mb>kHxoSIذMD"=b^B̢Xb[uR!fP^E ^^.7><{+%si,h]25d Ac6oC|~@ XXVH8aDg{sBLC_isfXE&`@vh) ZᬲdV1DbT^衊7`-Ρ \`16Fw/OԔQG4D8s!/N O^B 8H( t)q 1*b\fY/ǽHœ<~x/zc E?(@|6ܰ䑢g&`Ф3 08/@0td#EEAe/QNH *zֱ2з7<* UTϑth;bܤl3 CSR2^-`'@x&74U"^|+Z;݁G&hcZ]C,7 *@xB`(ʂ6bxYÜzZEK~ÒZ䠖 kFS ̦*d  cˆ_~A^o0R0Y baPD!} o?#+$)Њb$7FQ v o(@a% k8&yx` X! L`B 0ՖB9C:AzAKX˜u( x`02D+P "Ɂ@; (x%|/9z\G@A]A5X "0ϩr†^ _5ڐ|G`~CQɘD ] ].&FhX P`!ޠ.B+? UtGQ3:n8C 􄬑{dL9>1P> ((A@?YXMѵ B8{` Ԝ#쁾nBi4` ь"? y ;Ή((("@;T11/ )UZ@dx+dh.H#b> @@+9 x2kB((2$8x { ;hK@[6iąOo$8[-x҂DX86Y~hlK[UWƆ`jЀ3]heCESBˠ6% 86=QI3&p1,cjjL+FN& s_A;~(b( `ZGԎMQ@Hjq`m3`.Z4:K,}YH\Qv؋n8S\SRBpI" i* jy< 'Qѐ?##?aҽXi)@? I; C`Ҋa4hAHYh8 0Kj7H,@^ 00+R.ȁ:;@;ZcQlXUpUt.4'DTO -LO Q/ PO!0kW‹Tih?k C~0.M`#/Ĺ;D@Wdg.W"Sy4A~,Àφ0B>X]`(OY MB/`KǓh:PEE@ {Nb_ghs lhj`UkIX IZy# ҇ZM؆6RJϓ?UWў\bSFK8EУZPlT/0P6M]Ayl޸S!@J&"(VHuC.{&9"hb`c]H:RQ[,0*00\ۨи{0<5\UKZ*0IZp P yESE'P5R2TB3.XYX@8,2 9 N6?0 87a.\P%XH%x07ؖ 8iSXWl'ĺ !Ȕ50NB^ 2 BcX&ް A%!%.xXU PhQ+YQ ؄,#?}Q}ӣ#M@$\оd'm("X`R<03݆p37U]lƋzhn4BXٵ m[~6P#$ dB ;'N Y娜Uf1Б`T˃T)McAR=K!M+T_?eɜM`@MѪ()PA ydȂVȂ B|g]rK*ZP, ǣ/҂!($XVxr]EZW>XW V0†p˔‚(8Yl a# :s+b%9PHb@PP%PC0 Xg@Pr@#e(t|E~O~i,>J!̍*A: ( @lLx0U Qd[ReVH@G68I[|Ajqh]anHܽ`Racۋ^,qxd+)Xz jfM;عo ;T#ӺRؙgxKA?[)^ )~H7 5FYX=gW ^hLk.[A:0^ OBSDW*, Ĉ6PWqCD8Y؂[u liY#] 񹂈!|m.' \@ RP $ %@x{#ǒ!A'dw`\\  O+9,:@VH) jB̤^\8%ȃY8Z`GncSwHf'&}8з'Ŧm8P[=h` ?v g|9Ȃrʾ)O98J2P?v*h;Rv5‡') dYoqWprۜ` 9x(ċIM p2w%J^W?Yof@u]H]b-e裗3] m_@m gaL3g}@K* $)Q YAA )}, 3ܘR`R MOmd " 6L HBä 0)tl@! 3Tr.хa"FT98|J+3@VKF+\IaDƜpP@y| "K D Q`F1<ө| BLANC'@*(u2A / ] Yy`q1!'J$F")ȡ.(S)L"$]V<;^q-kY ִ%&kJpKcPb~Q5?C h%A}\\=Xe:~ ^\ ) ^1g~9vFHxs~JRtZ _0A0_kz!~ j4Pz%FD>6$"m Aȋu1-!`JJ'psJ$̣(}("R< -F;ҝ^TSBB=43X 8Z&B .HA 1 (0)V!@.Fc2 0 _1+#aW4t [#`uh#C+-bQAH GxABNP$~T!]HҰBe]R}ߍpbFWp19@`-NzbV)qUq$ X jxc+!A>X0`$7`A6Rpg>]) &RP<dfCx` 2I>8@Aư ! 9lw-vkcdRKɫ@N팀+;D% W@!pfKsYCXꨍ} S*^$gϬG– N }H%GBUE`bFJ0eZ5.([wG9PDd (L@/<^՝E27$>'* ;`79 A10V`2(򧭔RN:8=a9.Dv,ŠQ$C C>hOFEl^0)Nmi|ȀD8Y} C(GBV $*zB7L"%Ua$  KkK[+(h֡A8F40`"OԼtyLc:DjE?dd-m 5BqPR _TІaM-0(C x'%Aq#b;r0BR1N|AɡQmӿ@M )y,P5DR,qPwp ٭8a!݉pg=@5߀YCRpGIg@̀ @7ޠ$ZD}h dpr" ` Q[LaUC C²$ vA5n0CD/(K#i$!%PUݽ{YA0b)ȃb8'qaVr-P5_ C:X::]biHBg!>4 c>"/G\'H 5!7.X/`z=?J`-\ Z$#HR5lFadA U`,i%蔸ǖ }X-؄+!|q5M3[sf J@B teћCо!M=!ޮ 5_l8aL_tjE- ASNZZI_PL@fM{yd4XGEU\pGE>78ADR9P@H!A@ .T1@ @ ,8A(0hȉb jC0 p$ȵ1| l9.p'#!#?b!j9KeH+tT 5XfaAȉ)tAAA! ͡*XL0OϐzAhDLIR@bĨaxY@*U I)@4u*|elRAGSDC\D 7]>HGZx_`[`X%ZƒYBIJ<IIEJYJL ZotDH!ǢxMJ@O+t ڐtH^ETAp0j0N,5RPMAEU0<G7pPAvsbb% p‚DMOA[ROJB0Hh@A` $t$?`V Bk@Ӂ(RCT`aAHlA(p@\D+]m0B$12|T$ cfEf5Ah{ JJ;8JJtlBۥA7VhU[zup,2@ |A} G>d^0_l\S:S.5_,dJt%pHC-,%P J-쀁`_``=8D?ЂV]e7\%*[ `C۸ueH.ЈAPDe +@9BtA5X"(DT+|,%jnd';LRDȽF pK'~:LcÅ2 ĒAdN"a5h@h@l(!R$ Ak / t 1&$ 10PAIJL]E-`'_xX$u P]*P# P@VA 58RDEJCTA(8$gPA"MelYԲFP*P@H,(p_܃ CnvpH:%ꤤ?E_0^!t$nE{-7N[>H-l(VB_DUf*^l_X*"p|eJt7RȀ݂iDtkl+lj׭Wp􄝶Z z_ *]AT2\-7LPeth$T4D؝0F`e4ِ@@O2P^? ^,x~XYH .Pp:EʭގGv­ʉ G@$E7dAF7hNsJH0j TFi|ԕȪ_ȼQԃ<F.PdSQ!0flvAF"h xOR DB⎥E\FV`AAPgG*Cƅ|Bϰ@d E Egł2KI,6 $A \VJ"^P0H.  ͌d,NSF CMPL,p,zhDUaLE+hEJPMiCȘbAAԒH(iBBuM 87Pjȱg̔ĩ+, ٪4Mf>0mk8X qexAťOVFI{SePH}>_x d@Շ%HGArJMbEVZzYA"Ue N*T>d\<|-8q-&p pRH<8!p%zP_=d[IȺR.50b/E(I%k ‰Dɡ; ^;A l =)`= M(ukA(Ćڦʉ+lֽb<8X KzPτ0(vm&#-RKH 8Tmq CXrϒAn }L^r+ "+dp DhF 12p pdӦ#*P!C,iHbȐ82e41sJ?1d)Pl*T%c([T[v ), ibl$"(CLBXݯ[ɰ0C` /00#s.1 2EX(0 K6pk8و, B+?6<6JCDh@QjqoS0\-4"fRe2E PBa?[ Z$>ijyg!b% #pbq0 5C: )jY. )L@n'`H~FQRF .@*8QF C$HĒQ"SN&$ay*X@>#&(PˢΆo`Xi)i pRX% c%eR I"5Qt[&e?KX'*P@!kv89j(/cWc.ZsM%"x!pC!Rp}^d/,gU #Ț@&r[6zU)j!@VBx"=0b̌Côjl0τki0! ( !)*pW,1f7#6N0d$` S!P Ndd9H@:Vϐ|OgCtΛ@',0Oј ù@!80Rw"4@Q,+ GX*@ a.RH"f [8 t@L,Bw@!"Dϸ$F8/D`g"_ %$ kf`ABV0T&i8bU Ri!b@)4oS qЋ xFL f*ǐ]`;FnBHcc@̢K]H (PD4 T@!H C\/[!J.y|%* C‘#^шղzu0g-'0+2c!X,,abkɈq`QJX꥘̨L)g)\!Ef#q)0,QZ"ʼYp` CM }@( t:4sX3PY8p~;3BNv$RQ 6U<,'|=g8> h!$, ( $0g ^H4 &:v'|Ѓ Q2a$KPR,4 U<* h4D1p~ 2]i(qT>GmI>J@2B+gR18E>z ,@.8J+$ =XC(( Z8ѐ4^Џ;?*$aAP.5Mbq`z}Dp!0G U6D V`n,C.DX)`]!Qji3֋!e0-% aCV E*lHM#cAcH}b,*K ~@ NI 0`DE29`:88Sx\"Ʋ` Cͮ+ a3p>;&C`Ps@Cws>ux%Jf f ]7:tث0 ar@4@ AI&0Ґ`A>hD M2v`CS X%*C #԰D VѨ cV04Œf^x0@5 y'po8b9yCQX4_IQ 9E9 a,Z^Y (Q0@ FITƥԋ.@ BF>DEZR@)4k^ !0׶!$Pxc!m@jېdLE%Jt/@` zZ^#0pgX6Mx@ i,rLHIȯX!IV+fHM3ں{0= @K<p`g@z@SDT`P8 `Oi >lzV9*ySTЀ]a eR5XM4t De#1D@5DbEbG.,dZȘE€>%א8l.a&ODMȩ"C>& V tV* `:HҢ!8& p#Y  86X BCbB(z0*S S% ZHCB" b,V/.K 0p!2C…JN)k+`n o1b, hpN)4Ƚ|F7*?@->>Q*3736 &eia°<G;$b Mṽ?J(HK%BB RDϘlH*sD!"$ 2$dd@րdaR8$w/C&! 臰B!U!> N #*Gstr& MN2zТ'Q&9KIob&4 x*Lހ*>!X+@a*,F$$F؀)TfQR%/6d B@%.\\^BbA]~!~0WU+K3DbE+ D*CaȄ; Z#( FK%k2 L(`70P7l b?Ɖf ,!!n$lPcf2hZT|axHp+f'rnhJ6 b n d@* oBGFX`zQ@`&"S$>!R!Gqn&@l|(~nBqF xXˢDXĠO > /*rԁ%t|=Qf)ߠ3,!m ,'GNra~i\ &/զM,$@ BNdFfD%@ *#-"G#EZ5$U++tP0UTM)/0!|@ "`"|Y[Dh2wB]_#ݸ@b/]!kbv2)4h+ bΐ!I-5*hFzhZALʊQ fRAu DA($ bR-ADF  4h" *dM)` BU%*0$0}A{Š!!"aƗ|>lW. BVBb4ܵ!pU+Lb40! ."%i XDX\((6!Įl ;&nȀ, #> = nrARM@>@N`$w? »v ʬ@@ 89%$ڶQ&K` @A x nK@>aրOa@``"(}L L\SsJN0ih@ oݭ:A7.ATha~R- !nQ> zaxj ږ!EiZbRF'Ltjbĵb%\(r-Bd&+9$>B\]7 ƅŠnz$P>v3OBCz0JX[: RhGB(-➼Ԃ Z"|e%<.C^d_a`8@uȓjCh`(bQat24* a V* Ai;pn1Of`&q,tMp!~d`t\a8f[ x 0GhZDɘ$7T;!WZ@x\X VDnT&,dY @*ut.&y-P y.-Nj W1BbP 'AEJ*) 9(^Huɋ$UMȎiP֣GSi"٫W+Kuky u^GċG o=0,Yl Ƿŝ9Qܓb}m` 0k)i=<P0)LPB9 $%+Ym $ ~Sw#8 $'k RaM'U@0iJ{BWBT!/ jF1%i3@godna '"oR n(&0t"ciRLxJW 7|# E( A90a#.&D19grQ,mCބb7'4-Kb4c}%J9T3hC`MP(NbĢ/ա ^Pi@ӚJԏH&\9K0xBI c RQ#aAxd̠@(ǰfrTKߠ8 Ÿ`x(HRB@R(4R:"e%f̐!~|*pi 1e"d?1 %hx:ƄxKxƝ !H@5&v e#<U@@wr).0@`]YE&g,Wk$rE Ýp 5w$N!Ps SFWBR 1`G>r86K5E'dl6 Y$Zd PC ᄀH;6\p  AnW[=!L %l'A5!YM|SAA;{K"!$DqE]cBbv-0` ٢ɺf} %3 gB6H !=WChy AH] ,!xWS2ȇdl!cBXe8|kF6‰C2lB"Dg|0:B"K/Lp hrN%Ad(Pi|j㟍GpZNٌ j +K 9B~!` &CVBDl8`MCB0!Bs{D _܈o7 hp tlZ! sꀴ [ qT^XER0L1*L59Uk I0Ӭu Tn]0g7$K #1v*& Ҁl7w . ^PBCq ^CL .B1,e[B-hB-B pre^3 "&/p}Fŀ P UTqNSk( |m]a :0R$q Yp#S ! 4`saIs?5_2|I1 ST!?uE@!Gl@$qCbTTSNij!lM}Suy{daJuߔL1|Mxx-RuM2U3 |#7d˳ DpPF340` S!0 cBQLH"6Ol1-m pCR T$Z7{B# @8cSU8,f0&#UBkYF ȲjebbUT `k,UA 'Q6X; 2 UNmwU'I 7@FW U4-'s&ZUq g QTP<c2PY`=?nO}u B R"&B!u` W\( B ]q.wn# 1?`A^1݅Y57 t_& 22qJI1a`HRid4m@pS3U35r39iU $űXߠ f(PBacDx50aHLMC(r`P(8dh3MPh*0KW63bߔbT  i '"%0 F0B :b%3 #19 LB5'n3 < s@$02u&}9wf\cFk1$oY upy-P V`NA ,€upB[ vC$P ٥+(S ~]71p9Yo kQIYDC ,q4T Si])o@o@p'`2d+ц0B1| p@ 0cC1^(W/p 陠A_3SКMa#` a` v4e*aZCXLñcW6_6 ;6Az G` 9{MB!ZWx5+090J9e(4" 0 P#=@BAy)Vh^#uu" q(bBmPW@ΐ L"h"B,Y`!O1 19 RG*UGd"F ,2 b=$a$Gw!P06lPk XGB$,0b y f`l8t$ u:R,@.g q&30Ri1XpF<Œ9".$`!}#Pěj0)iA^)GB+c ^zHQ7W1At`3N3 a;"QN@ s #M;ŁX s~-싑7I1񑱭!P߁!pR8$ UܰMm  HNP pGg1KP` @ m0Tx+OB@b0-aS3 p0{8t"}|Uj+aבj Z'#?qdʂ < I67/7d IpH '!* ؐT! s  r ;TxY@ 01w p #E3#OtKkt\,Σ Pq} @WiGzi f7u09@rj+"'o@>q1'T ]p)p(j 2^rߢ; @(aQIO72 `;t.둱:m80Q8D:8<j )F G wF{pb1av̸!x+UןQ p h єBHFp g.b &#gP82z@Sc!a,9Z`78 $ #P,KB ]xWpCɟ3`=l.U@i@8 g qTWbQ I9т> q2*J"DA ~r0 #HHjh]R k o E\'İG$K9 upf"C 2@0C ˣKSx*=!o@=aF5AP (] RNrq"c mee P'rBHہ|8 \)YzԨ4)` N0CLPf5BV q@bm"Hc=b#M9{M7@d=vb5ګ7B 00gfDӲHCtc}M8HKN{$TC' " r<|[lr`!<`! V}W Q π Y\Ub ]@>Lmu0 ؇ʝ Ȱ?1.@'0 X.P(0 ~DPImrF2R 3z@~!(0X2,8ԧB$"u@eD+Dr p|S @.4N'2͉T@b/hJc}\Q((PA8pl`[~9á( $hp@U c1L^z&ZB ?(3T4hN1 PFođ9BM8eA9("ȁ$wG*Q2h%aǂƛn+O .[9kN'G;qf ` na88.Ml3J%w#I6&ЈRň~Hmm ? 2J#< $pŒ" MֈD(M8Iċ*FV`}H s >|Y#0oBo*7j'Ph$9&a vH\2- Kis/%ZF 4bVa5'>ӈʂ0@:0PY+8EH% 1ˆZtAYN>駎g8H?/( ҳ7备Xa3(R7(3'0NX\~ U1`F@lL0a :?&x"o} T0$m(B*,zN4b#DZ$ ^I5+$R0L25f ?@+zd#na ?cQmT,90:Zd GȓE(#\0 M$% ptH‡-3,".zCxZS"ł*(Y43( o@ $" UEՋ<[_oaHЍF3RC@؀>i@< '14a8%,x3aXΚ^bY!_V` z%Ӈ2bs%WBqŏ^C| "x#@e,4BF3Hpq<#$c$K2C4H8\Wp(EP@, Y0xӎQp hXv@ B*@Zb>{0 AOS &롒 x7鵐P'M\b ǑᛛOD @sj!әT(02̀  )B arA1@0ta%L'C$X3J=|B3X :pr&49$P4Q@67q.q$;A IHi|٘<39dA/e8p(&[$3S%@Ҋ|b9&QChF] O >1&.%1('$ xY'T'5a4Ko-WfH2 #Lu.GaK r/]]6\1`h# r@_ 0X#+І v.\1#k$~s3OOІgLLa2xXTf8lbfv$5@JԶ,P,d N t"$9]D` @v D <2f CDYF$>$ 9br&=XeY.o#x! 0AFcDNぎAބy 2VOb%0OG CҨI֫Tb cP}vތ<NXWX'ifa=J-@lISgIJ^Ȃ>XTn)k :@x|>ZT>9^p'{S(^񠅨$\9(ؔGD hkšځ!šYsyi# *@8 ]A81(.2$ 0 s9v.~ ^  8IҀa xwwq=0 Ic$#@32kP [0P):@K .(31<瘀c=33ᒝB4Whr(0*) YZ99N+( BKkXIp bCϰ^9ǣ+(:и zZj ]؈ 0XЅD(gH_`/b g8 {J)oiȂ7x:g`0846z`Z ~ "G8)>$tn᫾j4Y̹DF`7 8 ,x XQ-  8뙃0(8C@${1b)JHq1SVW);EEXρiYe/=ʋּZ0 [pس)&ˑ.ѓ X#5"òB3=q~&j!HJ(R'[؄x6QMjx~3h:[ Yx!rP  ~]!h{4وBI]@WxT,x)mM:h90X@Qi ZT(,che P bbQ`I :,6">Y~^3kHH`}hHUo`rж688607J9HM`X́Ao49çO@9Xܺ38 …7ЭxJs"F(cj:;xN _;QԹVOIȆϙy!OX`ؑ495j:9>, Zpȁ`xC{OxX (Q( ([8C]Dד"6@PQ%Xa>12١Y(Kӕ H~(ܬ}(0Gh`);!mB W8Kpmz#B0-xyT5>薆gX1>H$>(ϐ 09/ŠZɜ:̃80#ur̹-H1@1yJ3>g^[ < -x\Ko0]ڊk)ynx:apo0 XXƉ\X{F1q0o`aXx^-@5/$P@I@N44Ɛ b;qق ;@ƝNC 8'89Ib0K(Iy3h*$IBk őǺP>WP!Y)47np=I\ZX縟b!Wp;9K(:m^)trHr+\%/%[&/q2pF%4g+S`1l:Jt$RPKHQ  Na6x]Z(z5-5/Hha%AЅ5HsypyN Lqԟ BbF;؊>P.肺 HA `8hr(j qQDbMo(ZЉρ6 X`Xm0K\;a~ *hnY?30}\&!QH*, 0 Nh .r)2;kAi (`sܿ)4 2a#>hޡ) Cqu=9z ]W#p+6/y 8-x[# ^N`C1I@% &1HLDOHH2 ɖ.#vrfK53ش93n-}gHANf|bP#--`-fPAcl@MoZ"i%I1ao[E(6mP}IB <#F xƠ,6Ҷ$  `%xqKY@p-"H6V# +^ ZPGKg~cY v5W%\JcDb,@3Pw.Q!(6A33u< P]fP}x㍂VvdAHbp@ jp "B7K`p92'EdpKV IDD[JTS9Ja.ĐKD1̳'( <Ĕ1)#-@2H*`4JDopT0@ ބ"AIT #X4/.L) Ò< tBEOsPER7@#OٔA 0ED2d%]SUxqFW!rP! E0nDJ$ Es[Ȃ qQRsm-l1tDwA\B .OtJD3p#P{/X\hP`қP%GHfsxMompsmEyK 5DX!/J H0q! F+"6UbEd.a E)΃q&e6 !;Z$ 9 nZ·XbBs| q{Ib^@HDP tRҡ gؑxF&=A\Ρv R҂ !aڇ4][`8ĨPFL]`E(yEXB4_Dlaɸ)hY&-؂D B8>PJ dE]@A tԜ}{UaX0ȁG@&JĀȁ%́V,(V<`K?ElW77\xeH]%mI#@B*@]|t Xe TA(Ӏ0e`AdԈK (NǢ"hyЁ"`(:jGj9C.\,.3$j֥MAPCPBD5lp*tJJ=J`@9$B'KCL@/0DęalGDk@Djj gҋkMĹ,SԖ4N'Mל%% DD!e]Ɉ@;BI\#d yL,0^4aɌڠF,R6B B%J%*h!̝R.RD" L;IƄVBT-LXA(ÂVhȤ0ID(FA<rPRAtE ÿ-8¨D%R0Bp,IѼ$ A! Jf 0ZTـ].L; w@@HU@Q|7Cpǀ[]bzqT{Q)Y(F^<e CfC%GdT`@]2P dDha.#p PfJ)DD'DB6VgLKK(.E@z%XKDf4L’($+][OcXXl΁tFU(M?L@8Mu'YHQY|EQU%/q@hD@9F8}l慁θΑMxd]mƴ?W`p'ФdRXnB}PX 7(6emFFBllBT-)KdA? p@ȞDP $AHkKB+\ @]7m hxV <3xPlGB*AYB*CÄ́,IcKLNKdA-L̈́ v%ьʹ\lHobjLZ)lDWV`DMɶta u$&@ A􃪴,7APV܅@* 1(Ip60A:`Ax Ey+rH+% V /KBXBH{H AZ@ vAb!Pj@A4L=bw .FL'`D/|7?pLBJOIlEDP"   8[[!hLԵ@t@M}&T` B E8pb$R(  0F*l &emB*!\"$pa6FԩXB ^2!PKBUmr.!Oi:& lB̝ !I1YA71Kpv'Զ`(dC}nul.@+Y~Bv7`?BiC jZ()4Ua`sȜKl)$)Pr{qlqPШĨoaB(B1b.hр BO !z e nCC c@gN@yhaAJZR1$]B-Odr5x8W l娥L%._t飕C.RIe_n|t.kC[LcĮV|g HdI 4E 8@M X@y ,a:Z c PeFAQ b:(Eh*&nR!'ꄰ~ )dMH Z pF݅ RЖ0ؘ#Au 'y,I(,~VЅ8 %8zJ^ $# &L˧*~rzX8qez+)cҲ$Q ` 6 mY!K)#IȈwmƘvH 8d1ƥ x&7A3 L*$ΧPUXT!eA`k6~Y@k_$@Th>&`)rIT8:T8>MU I50!tZDHgP?cҧ^0cBHRpJX(~ ,Z$di: %8KyI0άV|X*1^b E-Tz`B&x㈃:Yd ILe BALdB¡q1!;|^ a)DEfv-A^rБ eJK=,$B(Rx %3 Y PBfPyshE=ҡgE!NCT|XPQP!E?``:o%FA|H; s"$>Z!B`(qY vaUJ<1ءba(D -aԠ)K:΂aYDH3̀ $K7J)PBȯDG.XR--dp!d;1,\@ȻBB08*IHFY}BkPg!Uc Amcrilfh0HˆWT ` !C! c lJOA$MQK:L"0T(BĹMd2$ƈ`"p$|r:΢r%(%QU  f``IR B`+ #2TuNY`˄b!:!! 'X,p8 !_Ab ;8`Ia +XUL ]Xb#r:a5mNؘ:7BAꝬY )D B*D&~nE\'i8 pg}CiHKp0]' #M;!ʰBmy JKQne?(Q$'4R(@OYk(+@cfI& K$XFX <)D)Z 0n,6_nbM6`eB V+xEIќEu!r8i xrEF[s@X\r!)D!@}YS q$ g`uW BF\A*TGHSo‘LHŻH>$+Em3b@q!A8%`ƾ,%*^``i8' D!@!p @>c  ngCTh#!lsPHT~%!L @bAͧ V0 Ԯm!H!!Xz= @jZ"$2n!6N" va'^B Ha#"Z/N6v;.dDdhc8"@b0g$Ƣ\]`,Bׂpfai'H<*|`pG!bk,!0H- Ԉ&@JŽpe(``"!C!~ bJF"^ayRxegH!66#:jhb0L "bҘRR3A /PGw1`#KԄ${+V\YY"4J $cU8h~"+|$:T҂|w؄ NExFn d wpoxrLr?BIl1Ar8r e.2P'.x y6'RdZ<. FFa>d@NjeJ#$`!WL! & Y|I Q,$&aP-"4w b $e!!@v!v !B!rBjBc@:x纄B=Ox60z"^T"*N`.Va24f!ITb"H\$BߨSn>3/!*.b8 Zs^ d f"J $z'(@h@hfN@`b+1.ElA@H.*!ā.7%!HaY b-`0h_a+%tCmЄ` Ƥ&zb0&0UD!N`t--%t r,AG.-Ve++1!.KGx@.\ J! >+E&(Q,aa\!2jFWx !.`B!O" ]@Z>|،BRWVzOB̊<"a!B!嶢H[eu8;s\B$C+(`woĂW¤tNo,"!P 6I>`M )4R '/614'2$* M6K`o&\#k`*!~`/&1R@6N|6 ໸Afw6 6g!` Γsf**!X@ؤۀ;&`$\0$TU' @ ?(2@Ψ("'+5BzQ!zZbs!0e">$!΁q0WJ#R!ϔ b@Z!XŴ@W pJfA 7 Aؤ-BVhL"`S<(b~N%d"X!H0`-u T@ !a r|(!~ܔk!(b:wbC!%rKb@]#,X j% 4iz N4# &0g`FChBf`TR&e>f}W6F)(@gaL TrzN ؀7#N@/>#N#/!ʁh. NRd XK!RjR- ,!dtM!L!`!h\MYAa`HL"{ai($ZܴbIvWz!`h"d+bB X!8 !B'bQQ L@NBH%s"!Bv!Ž~t1Bof=H.MP1ife/h+W81.C2 (kGwChFfbdTJd%Nr| {C !@Bz{Jb=R'ШcBN4drmށY:$!E x :D y$cP -bτtRhu|,TK'`>ύ@Kv!| Zdc `* PP%}W, ȤzBx^vb. i gMB U `v5!Ty/|k !b .3gd*b]!*eL@+ nB`X2xAb1¸P]̸Z @ºiI],%+$k RC$ %¦$P`w' *tbʌ[+ZV^{fR#\c X"ؤ;'$,Bo :2BGʵ$-h6 5dcx X:54@|vF ඵ& V|@$ hqg`zb(LP&m<C=) C" !Sy4 IU#vil)!n/_$.2( x@ xN@'!Bf-B(&@r   SpaA ;\}kJW.FV*!zs H-N xs`dⵈo! +a9`]mo~Avh̲C"[ |o- `l FJm~m#pB 'U qpSTugP+ 6)` 40lpIEqp A0!c* 4@$d9Δ$AP 8Qq-1*( vpK'07rO's8$1P 61 b dDDtPIҨ)HG2A(X B A"B7AͯQX 5aAfP#A_ͦP++l`lR`3GibQTI0DZPު|X" 4PGE\"7IL{a׊b"01i &`ӪX gTt>3bgA"O͕S[#fp B="Y|]}26۴a%2 1Ar# &@"Yمd8' :.4NEr HP" m78e 72HRh\f@,dKXf` Br!#7G DK1(fPYTTa^ U(+~m9zbsBG0la.̀'hHg@eP-}<8j%Q>uqx\aխGKP)M$ @ ?b:ye YHo"Wq'G $ 1&iT |,&A6ˉ8!GA51)c;oPE`O@1A%c=m 7 ~B҅.`Ba ZaNZ)F IJ@P"6S%•NI4S!aT!u7jA LrߠM-Ҁp:5'@7upQA /Q6s++Fh@3 QbCQX~4s+`4$(b` @< Rp` !:]B@CZ=9Q$`pLPP"3# g!q=G"='8PVP "I(A Q Yd.A.GY5MB)HBesA[6B6'C72%t#]19&1P+1,t@ 1P A 0 BvA9!1wc j_"Sq/5s@zT;``]/0/6aApEIba0csPaN`tXB B+*x ѕ! ,JPA$8e - !q f<(os1(.,8!Q&* ab @@|<۸aL޽8jĂg2 +B C:! `etI.'4 @/WZfU,b@3m@O=-Uaŗ-C=t0ܓ0 0:K_Q'NuP_t^TKp3 ĥPǑqG#6MƣaӋ7kj[ )A&p*Ĵ_t{t A+nAޙJa }L &i❴tز%Gdƻ»{0wAle%q8n! BcWlgwlP!uP,`Zu]H [jd$$viG'z9=s<,Y!8U,5L2d0+[+hko&'-tݢ)p:++$P]Z(q$lz`xGHy+}'~B5'rs+0qC lZjGJl-ħQ0L au<6a,Q$SRzR݊e y9xdP@ oLgTULo}4y` D`ǺB G,A&1 1}3qy[  RK  XU qo{|H@|/CPF \-Ҡǘ1k$xuo^ P:R.c@`F@*0G:*B&_<0,0Fs7QHr\`}8dtŻGa$lj OR?jtX)Y@nP˴"z@AV@0J `a5aĥ>#DF QM 2(1A -7h y~ΓGZ AΙ-<=d 1:XƣM4(]?zjAO2\ @J#H;L:(Ђx a|jN 󇲫AAI@d@ZLG_ XN3lŨC9~x8HT'6`$YeX: ( .(c@UY# 9( 9'!\U 9 g {.Q `pKX"=ANbtFp y 6K_'>[У :X =w܀A d2*+c)0S5,CW@f ;a3ny%npFpB9\xH3:ieG2 `grg΀^ U4,z_qeSs[ p6!b`(iM=2Ƙܭ9B? F%h~:Ąj~GvGFA޻N8[KCP]1Aju4~&_20B9k^$aWPt|Ы0ߜSrtB ObsJ\< }PNF`%c8sp S"!# 9\YG$u < 'PPT %fŠ[fpfpCȠ ) `ʴ>D>qgrpi` `0) ps \Z e V  BR7UX Uft/uofcFp^Y C@G-c ii$dֶ9$)1Le=d u( V(E1 v  qgYNa ǂ;B"]bc]^^]z84>GS$ Z[ -!!)w0FUǀ qcBN{ANo&T` 8mYHY;0FWud '0 421N"?,g1(_w0OG2Qm*;0z n1?(EVG fr2S v$w拯ERŠ# 83c`tfct@P)`B>@ ` o 'PqU0 ͹1Qmә1&k!E ; 1IԘ \ `CLV 8PyFD<  bN!e9U.*D7 50vL7:` Gg]S':oC@AoTY` &qvp `L1%"wyoC"R@WF'dLB$9`p[ ``9H 5'H@U*w?o[7gFPI4\(l89 7u  mh qCF$eIv rt"5y0;` twdPW5 08q"#{5 7:`( 88H˃s$\@r<3I 0y DaPxTmDR=p "PP ;k{PEr0L,Tb`sz nM0HėsAvx EP]2]7 uÐ` V. :a0AJVdTx[v>ӬĔbsv@rS e Z0HcJ\Z tQtp +Fo:(p p{]N (%:?BA*)DžXBT]|€%@+Ӑ, $pp ]a]1 gp"xԁ8;_1R; 0R}@9kEHsf5s @Tb Z`pa$Lu@UCTׂ=9 0 b`w|]q CbҠS8sCSgGAct Ѩhl]0l Y*2\GvU2i0 Y0( >rn*K0 ^W WնaIҕX*HڴZ ZP @`P JrONc?3Q6mhSd }Pp`SܼSa{LLOQ|:GupYpjl`S3f P`"  ՗O@)'9za|B T{7Sy+rysvVwaH~v [p Z\@UګECHv@Qc)#>K+M<$``DMtc  x{4[g|V5)s4G?dHSFh pSsϠ ajpr` {ZyF LBHcfuʎz [P vh )R r1:s$> WS9irSp ͨ(.")7V׽4GJSNS`;?o0  Dz`XY1 4|j i( tݞBm\H|D{v x gna XQhm?) <3X; F`ﲰ;rGBHS /HnM8z\?7WpV y jv-#d& `++b Y8 +7:P jubFHG2Eaxp \ 33` *m)f[x9|zu@Ϙ 2" `q}U$ƔѻwVv yasRC wRH4\p & 8Kv t9BO- @p  D2ws~Gsvk\IaV$xb9 A)$ #GS{]G@W0Ԝj=C)>Hv03"8g?cb{8Ꟑ `0̋ z X%$CHn{c@&Cn\껥; #=r)\<99R$sjvN1Tq !  r 7犁)vM @|ͳ:>je Kl%̥0w$@dŊN2"=)9!SQNZ*n]W[CH{X T59Z}?=x_mhw)#1  PCb $W1#wn+07Hz< RPw\2LL0ذ9rVAЋ˻b7|Rxq,ɕiyM3/hIf.ÆA88,T0$XAa(d V ZcD9~l0m j*;S` !2 V9. 0ܞKgZ9bZځ ,h/nxCsyo8ODh0R\b,کXi"uT: RSU"ce4 'Cپ;~ "Ҷm1`Z.~ᜥ(@\(~+/={k.csR;@ M7ʜMK꨹OH{K"6O1`>IRdȊ@9b&LXQFSP U jU:$V{,eX;nDrnLS;M#30o/C{"9>2+/!KZ_ty6i#"o, 6<2.h#.c\8)N|gVkX<]j'eeUbe *j"l\Z9݃XB qr{m\" aR[ϑQ *0\-R>aIȟPwm\}C _\ҽ"YD(19!4?dڱA_b:]0:dKCJi! H~1cS&JQNSДO {SҧLm))r ; ]H ` a#ADҰX5u'`WiK%l&6} "An 8 mZ'`,saWX@4 Mi]\<0Ё 27GIg?!X) ;0˸;ނA qO@1`R#dDv #8\xH_碔$u %P DaJ[k2\I' 5ġ0rhM&YB.':B4,'!M89[Ȫ@'u9Y4~sTC]@|a ,E@qUs_+P/X6BOEyj'eORH4C /˿db}jľYXl`X&6 ' ()RL!.Ra$:\!.Y(InY̺҃hOSBq`"<ҎX$f]08UV Wpw)MN!mD P0bjiY&bjJ+Gڎul`wLNDY i&eAZ"T4/{e.sK2N!g8) 'f{N3Drc+>(0R^rаY"@ FFH! *}JB:ʐ!&M`MmB6YKt[9%4 trk)׉Ss iGM]` \&qw^ @IHpTzV@`8Aٔ(pN9Z  V; ȑ8!{ќ0y8rp6ɂ77(&]d )00k;/̻Hn#0*gbX;kЄ `؃=/ QNX04 TIXTpK|^8 тI96AsC;_K&)3-bsHCB*`.ʚة qc)#@? #ظ 91b70oitB/9[HZ}|Џvڏ.X FDE#UDąd0\Y k{#w3x^#gX#q1Xc(:0:[poH"99=Tx @?H&4`{(zv;ɗ99G[a@ XA~2)釸* +:;i&(r2?#G[p˾}^OH./VH#1&(҂8($v$101"2l#:#5NXL:g\/3q@&,ˤ yP64'SZƩx]1`olJI o0Cڪ9@,5QK?<1݃. @4̜XH@$K-= `^xRI33>lIjSP@vȈPbț T C@|BV(#(2 tBȂ9 >]dc-j]V1-ShY V=!OHLP ] -JJ-80@$ ]/0p((mȘV@xh ED80pwr42i𻦫x$ b+t9% `\! 68 q%xxD_@ VDX2#t0HE$ׯ Zx<i`& KtJdPX!T+xӓ #P7-`D rWA]x Hd@XN\W$op3.-ͺ] 9CFi0?`+Y gS*h]WR0b"cByRDHTHW0lQK0ֶtY ZqJQ`HPH[<1thai%6F†ȥpT8PeKD[;  ; ,Q$70˻ڽt1e#xySqExg@zB(:{9(,b=@MZbё̷Ib,<@,pb J ЃRpPM֑%_J*IFL݂-(=r @k8]EI͂Jr(B9.k dLKN>Y@7ZڨhaQxy԰ؙ/a-a(I޳<deۃ#H ~[55aPt@`Ĵ1P`DA`ۃ`Hv`# _aWzZ,F(Dx%oS8 SO`v AxI%Q"vFh-K<`iq{I8:`'CgpP9x%! #]ax #2.1ζʾ'AG+%6f}DSwi_v&PK|w;7+M vj0V:0QDO؂+`Y ard{#]hrЅ>e()sh)-7!qe9]%ʍ=%5GK@DK${OcS@`P+īf8m('R`-D66% P8t^ :^P݊Mh_)NR ak7,8=HlҕUV#>aQFJLI3Y NqȂ> hYp[YʾM^st+0M9RW] 6Z/V>=̧`XH1n~ PPq8:*Dl[*葃TXM ņmHӶi(c0jIr|;]dN 08c","SDGBI}R*pl=ۃԐGxe!EjO0?ۨ] J&-`W…IP_1G1oY>\NXG _AЖ~`A#PH5?%0LOe2maoa\&cx9V4.`:r:8683ⴅ"V鄻 v"C}Wu +vr@Le-`:bFߥs8hUh8ATk%>zDPPX\Q>$Zde٨i \]( ?iO8F 2K#>xp=7ۃ? jk2u}*@&z_;u`)~JMw1Ie&O~7 b_[hFFR`Y !APA F}#<† pG |Tg0gt}"(%`,4s|ωg9e٪uRI=oR{b1j*֬Zr*oar]ǒ-[*@ieBwV!d ?- mc ` w?ťkFBԿ&.,`TjKhrmx#BhͯUgDpcSkZD`nd+L02'H[?NPO'޸dc5d )rB)}CBØ ZBW#!^$pi厇 ,a76e; . Q[0?z0AP<6=1 A.6`$򌚭|^r>\V}'d78#F9Ȕ9{ zMDRI}cLp@GW`{XyrJڊ*!+,$H[Uz#M0bG|s? "ĺ .?PHA& 1h2P@9"豞-?q4%w4uPDMe #Ʒ|7dRmz@DsTJ.+(2!:=pD)Ф-B]A@>+c9@!@KU{+p"AdcB64M6@\[l!7c 9IP.иuv@wb0B\zp r 2ˆsI&']0K 1`d -kʓB'3NA/?Gt@d*y6~,k€gKKJp"`JycpM eb ǀ ҒA9 b  (<0gB dǺbAP=^5B*>/@"Qc;NwM+A`H>@@#.!VoU?C j4JD{!Z{xnEJHE1 . ~71%'+!FF)n RSrGxP 0( =3(Ƭ m`@ZY&p:bE,DU1BBm[oKBA/$ 1!#vKF!^xe\9r(*xUt.",,rX̴ Ap$0t_IB.Ql^LB\)!4GsB @$ӈ;0d@?%VTJխ!Ka9`Γ [#(t.?bC`H\h9Xb)pT>RCBD`a.̕ YB$wd#C?!er@}ܝ٣|HLn.N/!3%uB(.HM0A+x W-Xc4X(L \vP>$V|2*܃Uj%^ Г毨[B݀'҅`$]4uId!VUC@m'0vqlš(H(wM&mqeDYCHk~C(gz1ŒC*A*̀1@X|.v Bu|AT<ϔZABV &)CJ,<4eHZ^2B9>h, T ōcBP #4`:%V@? ]  4pU1(M]@5$GD`BLnB7|0pHB*/4[n᥍9.cU |`bpzA@3@`PA&M`!!ƈT$LU0̊=j"bxPP",'C*30iFn|٦|}ï~mn"1&.AzqXD+pXr|C}%iAeX"n"/s9m=h;u$8J<*(;4`8b,#,Zm|ΉF&F!ghh(jfKT#29\G3:?Î!tK7%e $Vb%L@OFO.2H?p{@AmB,TAm)CXDO83űߪbcG6@@Q[ Q= #6 "\hf@+<@U"h,i]Zx!ûlAp&Ap4˼%m+02JD_~M_< 23.p# A)fs+ReB\7;s@tD9ZY%U (x6C{K,Q!"pCAoqՁ$5?Ux.'i!gy!Cv#2\7*Qk,L x6'2,81 VRn単OЖk}9V$; #:̘a K,. o }l|BeI] H?P0ȋ.KI 8: p$U&@AA7 4Z;pXB8R'<|PCBɫ+yS;2RT-*]ؾa?hU]nur*-D.xF~T=~  T9?zA"h|U{Qꘇ+sL\B/ {#<gAM[3 #Ë_xUZTvKK mҦBs0@;Btsb(5GҠuP#FR|A*B0P # %ˆ[8(\#X;}HX=KR8[G0${񟜇Hd@@\M@$$Lg:2CHR}-mA0wA#ljp4KaEC)Vxcƃ{xAcH#hCb7'$) ;.p-\x@p%@PO[Js jB A5<ο ZJ]`SxqPJBMρ\uoZV m@-[G*Z:8%̷Vȁ ̹:at1Ts.ɑJQ%i22l„yEX,w&Y #VVqD<wJ*\d0Ghڢ H$Ɩ*F8a~(]TJ)hGrˆ19c0& LvK `(#Z 0">f7&HoĜc@_p6`9H#v9E"B% j`Qe ` -@a?<ʣ&!!>m=ق$.A :ΐ###4:HV0}9#Mkha~.0%)Q@k茔rZHUGƒX8V0P t$􄊃$Q)2m< 0pd{/q")m4bv,$Y 0O,N dNcⓀIrV1B>2ٚȠc"W~ `Hq@QMSı H0D̠ eIt.p@Kc4(Q=rl?=QJ^E>odE@ 3|M 9J]DPQfB&mBB !4|#0CʀEm-g.t\!8b,a9rGc2BCܔ|ƅĕ #yj\@}`盅*Ȼw$i\N;@6 XvP20@{t(_ *VsGfdnP&(hpGibF8?~*!gT8t KeWP*JI&$poAO3T9%I;Hp!#.Iɼ >c 9J%s; Z#ni2;xX2#W;2#f8*V0Q96AJpGpQh|XQ b~0ڸ\6 KD|xJKz҄ K\N1ď7Izd $enwE|CHDklV`xC 'G ř#O8HXy`D l4I q&l!NV`)p#)/T`-0UğF4}?pKفJF L.%ZfOE*Aq^]^[2 qD&+æPY2gx 'gEv䃯`ʠH=-@ .|aRO"H FU€K/0 *Kx}^pHFrgZ@P&BQ&AOaa ٲ4q7y(o@!+1+#6d^L+0)72"Eja@Ly y;6>H!)-r#>N_xi3<.%fc, umha2 AJ1K ),B:)vô:nʎ(67yu9@GVi2̡qwv|$iFf^ nI\YaDJ >I  s8 "OHb|}. @!.4)YFjĀDL B9T32Cά^C7IjvlxEbDCqĄ7cPRQP NS",":BL' a"bnjttĀVAK@ \ ,n~$AYҢ!\ Za!5fI,%@bF]D~`8@}*C\ j L9j1q 8x3 C*M1IR ^n'; a{ /!:"'4"ACz+;BdM>d@ZD"B"$ \@A `c "aΡ)@J`m".2eR(a!M*xBrE2!kAv'8@0pǫ nrޠhr2/E#4rƣ~ ' !%1$q!i2""62`.ĠRs`xzB'H洀Z&!fDf8#A`ISVTFF+$ZhPZ le$EN&n n(- e-D |3v@#q  xI@.avS!E30&a!X,0"e:4;F72FbFl&>% "IxH!yan@?lHŀ>@ ëWBB4Dq a>Ά$Z2p9'22 > GJt㈎h31b?$ .|w4t.B($cA@#" 0"6"> d \m~-BI'tɞ%_%]t Z\drJ]9 n&x@n *a^l~Bm!\@[2 K.H/dob& ! C>!s.cFCSyQb|pzh"/Qs$p"bQ4$X.qf4'"6dDl;VNRnlX^E0%4A-ZIt"4Xr7yh/]AuZΎmH1.XP[@ =` ep"oqK_HLؠNd`C8Ʈ4pFq}.7GJ" ˙_C ;4UKWI@D'.@ #"0]T"> B`ycV&t6ԢSRLBĀTJ-En҂` +"}AR@/h BjP*3O4' qq8`AAZd Ā8a"lFpþ\ dNAR#*To,s 4l6 2.44FQx`p1 Yx@gFc$0 h*A&.g,(e"z 3dDɉQS@  wx3ow(E;S4iXyWbFNA,@;##.j&]H;5Iy` u&[R:; zJ/_[^j pGLi [FqZK. u=?If~@)a@]pGh?؀ pмDuwv. qc74$D"NllDaA!24mf]`V ix"4%b%`=BA W䦔J.7R,E]&V!5!xY% dKRd-‡ 8&$\aT(}LcfZ4nHIO= D@Bl RC& vzJ#B.G m]8$JXRu$Z"ώba)R"vN! ),5=xF[# D`u)ƱkAaO#M vPLrj 85 y+SHp@0>omX.&& -`Z"m"'!D5w8' 7 BRJW#h"q2f0ax@Y["aEnJ}Pr yl?A&y@yƫ`ҵ;\G KWe@Z@ț0ٷ` ItATA]n+|FXoJ`XjkD`x|&s5q2E> 3և"f`3vZ$P&X2# ҝ'<؝As=#+b *:Z lHER\"&Gamk#yS"fN_A/][xHnvā xEH OABHҼo|-1 COVh쌁Dv7_&d&YJ5H8/{cjQ ` \fQa#]R X]!3 EAyb76 n.0I& q<%&+ŧcOmYΑ p 0@c~\dZQL)T@Ceo0c iP+-EU^I|bopd!r0 LҦ s1%\ҢQlPGmPV%QmR9AoXBދ{0PuSGXnlRC6XA \{lV/:I)_kŜG Q !/ 7[ia@9 j-td-;qf&6@S lA_)#)#gR3BI2R -D;`p*uB\@0b[:A0yVCEJɱ0KK8IQDdos8* @x6p"E9hD`DΈg=j&+p6K_z#a!" Xif2I$PEe 2#s0HcH9d22&PSYBL;I  C pzhO>78Z8\Kz09a~HӲR٪EΩ c 2yP!Ⱀ,\!3lKV$ 4ٔ (s(bo%l+6YH\p-IXX|V~-ei`B41_r#!bZiăgxkX`b#DxdD)`eCxpȬ&}bRs|q} SԬL{0<H:N ف%Ck`ϊ L``Dh Ml'2XB^X cc⸼8t,5W~ 77Q0hE=B9erFRQ<'m }jK< )rT/  +hGFL9Ca ,sn mMsz ״$1-W@efĔ>axn, )0l-|еz:wZ-c<``'l `H@97+ȊFrkmEv\ QX$ EH1ڶuR `(9)"t!GQ)a#T`!S8HvW`Y^X8  s:GR[JZr!grP L7话`c3Izll|v@`S\  cZ\r!|e!̅|H6$ho}ob3pjgï`Jr`upEc?hh-mo@"<# a3o t3CP6* AS(QgJY.l.|E`RyiƊO0GޠU2=loA2Rw1TXap&R4D!!enZb KpXzI&Xmm<҃өXbݢӊ̍nt%߰. ,4 <"1`0aL8i8. 5(nDF04K,|T@Q sCRqD! !a"] P-T!I1+1$2n+ ) P?Qs'!$&Ia'Rp_:!IClF[l-B!/>Cth` pT7>-&/3sP =!; e.-QK p Uxp <1yz ŀu% pU' ŐzYEZ$|@f)"nA@Si00`,@`R#}:/QU'c!Q97 0 n6'Ku_a\cXsH^K7U0qI 3bV9C h'5j)a`A0!8Yd6|r0MEXS8_M'(dm)TXts @;-G Oxnu P bP ! !F p1 {K@&gpHOshuh {/" 3rR:{2 }apGWph|CHBڱtT^TjSP>9 i_dWa2qaxB1 7pyOr s8x an c^s2uM v@ְOhC9 bvdP 7/82iKudDvHfYd 3"R^D# s<]h+`}=)@9Q 8 P9:QeS_SףM!߱Tki?AjqB?+Q' 0V-e) /rl"&џ@ 0>mM6K7M>zH;` "b:$+ ߱ }b`HC W6A K2fOߐE.TE'p;)SEy8z&h p#b/0 pDų~*P0`*#狨>%SIjb2_*DJQ#qY+l"`p Aq,%Z8+$/P 8 IN'X ]G7@H+Qv+y&D P ڣ^D5SZ>%t!8'hD-s"2RN/B : wFCr"F'p :$0WtYDZTOHSgtMm==R_ AtoX=Y ry8/-Xƨ>XL^<8> &W0A5 rZ0KX 07 8a1 0 +YW ɑ>=@/dEZS!0r\pop& 9Sj%`T&T Ta?V4ڦ,$ˑt, ~V$!Lp Qei?Jk?RQ dH1:F51Б)!i 0^q`@= DÍ42N_" [Y K"k0rf7Ϡ `s߉DrU&0 0tq :[=t8\=\c_eiٔSQl2U t"b$qJWճ&1hTuBn'28>0"s!|{YM d E1ަ4lzyZ4Yiap@GPY G DQIn@0 AS /I/ 1%W|BR@  3 ++< kL{S3&hxv H"5=xm [HSb^ >l@PZ2,s` ZxzXp( <j5j2>xRAG@@C E z#8 R3G-'#q rY*5#H'C&!# ٙ"CDq9fX(r_ 01 6T'fXqs#6$tsmȠܪXSճ%A#hyz-"1-9yl5U31)ɝ27ZM ч7fTs^  vɦM Z^2CTV˟VDZERɩ!\N#<0E@ /Fϼ0 08S M⫖&3MuniJrej'ZKŖR!ڱ3SXQǂ :1!todv>$(qh.𴒫 BڤFp|P4l z 0 K ,B^Л=8?,a )0v/YDsҐʵ@b1B Q 8ౚP]{).$  bW/u!ٸΙGi B*%s>"2,S_]jڳsĪaIӽC1XIؿ@Dz.[xa%YoxX^ Si:xeyQm` bզe ׂ7\Op*K@ 3:W<+i4dQaF` ocEGA:Ǘf`LbAĂ˧tR  ]n;1 0 9>λ!H)V9+ lT^>RZ⏷hcPҮ?^K\Q0îBl.BB@AV b$Jѕ((gbfHO'{0K# Cinn Y;`pvdB OY?Ly'`eVX00w*7#p4] 'xS]Ή)ŏ Al'?YʈV,;m p*Ã\0KJl^xqa ^p)7&> İ Ԁo:e `\S6 "O| o@KΡ _ alhco*J0uiG5.U(Fqp 'oA-pDHB XCw!-J= VtA+RӮle,3qBDD<!}#6<{'<2O`34 ( :o)()[x3 B~" $(YgJO-.JZBK,@`I a`=+\i |hv2E,,@Ea(0L0 -J1cNGm NuUȭ9Hx!~"j #=F#t1^ a "A6=oh5 \ @F/\ ![ "O6Ұ@a "> -n@A ?wP>;:H `H :@c>VKJ&2FQ4VsT)Nh+xҤ{MiEWcխ(򉢪G8o2Y g<Sq&xNtaj>)'b%ENн 0 )HİS[6kT"IS?~#Pp((7mC-p&wіg99Gnۃ@ ch2W?$p=\`($: ޻#@ۖ y ֘{1 ۿՃd:ie*#* 6)VC ګ # A`9/h[$>`A؁Zi0k5((cx[a>ݐ'7S8Q1B{j񨊫848mp>P?Y؄YQЀw` w 8@jab# !: @¥jm.(* *蚏@@PPYK*ZEي7`J EL…O9+FSS;{ _!A++%, -<$1pvaw\~4<,dZ"aZB.D0^2O4n( ! >B!48+0!(1AB`I8WYȇrrȇ@йɚi F h@YppJ#ɐx s/.Eу6(*%(<i#5l0n$KWhC79銮MA9[D-Y,vL6A`GZȂ`ZСN N 0(:OKHxКȊ4H P==؃ 0=8@ Y4Is<:A3h .r(@K""Z( l+X)-AAZKMS/6锳@~#h+_  yql[E~F#8?6s8M;N909 8SMOS<+"Jٔ Pɫ#k * .=Е qb0 0 Qȇ;;M I+ZE9x8n$p`Bu)m(  `$Nï0bD&PRZgT@0 9o PY/0iA)qG֖):E+ N yKKTJ707X_(X@<"R5E4Flqch m``z-eջ\^]s(b@'c#Na [TwR{:gh|,T4Jٕ3C.[Wux@XlIHlKNK(0rrsryx|r[md"6jX|)/E.)xX`T59[ VT}RN@&RXP;ڂ)`_xpk'NuӊȋT8(dN?lܪ-!kY3zЍ1.`E8IYhK Sb0(5 0`[?b)($s!w9- ZZ̈')Y}> pgEmv]FX?6HrMzիs D!FM TAVhH\HhXG]uHdzN[9a03c[0 hS/D~ .k`BbMْŊ-pCG0z6¥ 9KaBP|i&Œ (\xFP$K.9gιxʔes,u6- mMI֬'G=Zf-<!3j%>}u'BϠŘg @8rho5(mK\2Ҩ;8@k'|jj9F^6 %Q`c {#\m} @ 1 7r!6m㔃/~6`3~={8 ls, cg I ; 1 6*%..-qa7TH%iM`iؔe!T#eQ?$UOdE$EaWF-FF:jG1e0ˆ`T1LP-TRG1`ZvN%\6cvlFWeă$fD F-al1lmЅ*ʉ"rQc7YCY|}>P2%FڞimgP0_?dDr$$o @kT+額J6DFh4I7ea7Sk}NRe֗/S1䕅YaUFoyGF .i,UC1zk Y Ͷ .1@ ?zVLL&W9 :1KO`0cp9o[^ = 4L D](Ն+S 8jT}ꪉ݄ 7Bb 4@ TBO+]H7fżq84U%SUe8F[1t+K3խ\TeIWzb#Sg*oPi#%iߜlTM=EQ>.vGLp(x!DM? d0@14(Q 60ڥ3B!jL"Ri0`7 .<z]>@35  ! X C *B +["\gHD`-%& BhKBH"*sn\UKP`ֱ1}#遀z01|^d`4,#KFL.3Lscjk.kҰF-`$ Q&)M8Bd,6F`@*ܨG=0+H|\D ̍!" `A#.Ca1vBs7 .au{ /xmheƒ;"d_QI TævKJ!*M]j#sxh$ϰIIWU$~_QZ 8\SʘJE) hA\ K64>qiO%ನG` pVi R=^nq LL@KUԧ@z Q31Bܐh@u =S"j4`q°$0au'B$@B "{t+KVBwiVUz;JMLU0N Iק'jQӬ4K:ahæˆ]2`bfHsIKu4ftMoF!Sl QL Ѐth'B61c7\FYc]8 !)+BȶXho*bM% 헨+BqVmT)ϩ`[/Z B2r_ڰ:tkr :*l ^`ë+uG1 cp=D8 6Sq@& "9DK4`!kg=G࿊hHh[)ttp\lq'#NXB: +(%VxȨ\n,;Q(Jȼ E4R'6>u@-$`-P2\hӅJ$ēbbiKc7̚=S6a00vB~DL1$,Gi(U+A=6=.y!rɇ70$x Ո\ djPtESm#AW4d 9Ql H%8%5/ 4Z :480#(Z ا+{2<,Airb^7oW7lF- 0 !W0 DT 5\A D-•mx TB<\ \+ C-< YGK BK$BC!"< kJiRMȁ ]ŸKx^RhT%D`]}r (G)M(b*x\@LGm@ xTE(-C B>`Έ * #B"8Pтǘ}J,R1E,eF)^EKT0^9El_#=MiXZVtSO*T΅41CH 5`%UEHL@fN@'] 0D|EmxnDY؂I =JEBmB(ȁ4ؤH$Q, %G@<EGm0A `e܏ #L' BLUj V[ОZp0a`SHK7\BnP@'T.|<, W] Cq]d)؛Q%(h'bB&2i7JYL*)%.RK*( A+ԆD1<=0|^ $O)fdAW"}PD{J HJ`D [OnKLɝH[Ʌ8*ʎ#!OEz`,̈?Z/d^́5I-Qȁ8hô)D^'/ I@In)Ei;zRD%Łeʖ[SE,C]?t %Fb!Jԁ+p&ܪqi֘8A>lB6GAcFixXN|P>-& )&D“օ0@>0DB;A/vA.q BAKrWDY-%R^41$Mn7aP R^ ۃE!X#![ɅKeծAjnO=@dvȁ@A2e7 (p@?lVC3֔8mx/T L`Q#BĀ8#@!ZBpqDžf7/B$/CB-B|+1œf$ g%RH"M(^eKTծ%_j!bh7/Z@^̶X™H\sUZbBlg 7&Rzszs;)K@iU)rq%iJB+i+d D(` ` z 0"aR) T[B+:tt{5k$L*{=xO;#}=#} >/ӟ.b"yO:F2ip!B^4IÒ,ǖ9P<`&ųKR ha^*#Aϐ*kIA,2k K+\C&pXCK) ayV6hsΦǬ6Oӹ\f8=n(N&C ;MbXlՔ;B9}5MsmbS#uCVD'/B8-ДPx8?}0āǘM`eTl% 0 !VR K&E8@#&(,VI `&:PM93T0naj;VyQ e z@;mSTB3~IS8K5S ,ڠŦ;(>S0c=lQ02A v|$7;H @~% 0@MAo`Ma ^BK W8 @+N\axd[=4٦:6Dm xL @zLy.?Hݍ:obnpѣ6H+ȶ#\y2ahF&2` dIPHc؃>4g$K`" ^^B3A4<8vXug5Su7 ym'BUKM,NyrbYHd:~rI=bNѝ  P ~FڡmT\я,c+Ԃ~ M`Q ` xX YC"4B I> KJG\A@鉎6 a3`hxIPTA^drizɂ(+5oV% ҃Uj'tNv;A7Kh7d Ç# Ϧ u>fiZ"#?ՏPlBŜ` Q).Q Z&DY4?DP@& 4_RK0<:<# (`G X5B*b@p^R XӰA _{9`0@&nx2 pQmS"  i@-;I&)ddns;Gnvz j.9@ U>Ԟ@TyXO@rxԫWm3|4rƀ'8G-n xZ`FjoC&I< wK-tZXbc#ŋ3rai Bd3d@rO.elF B.Z @ɭEpQ'm?#:D  Gy[m3Iyŀ(Z3+F7{\3I8LvܬF H  `ƊaqSK,\f̍m(x&7#+ a$zXdȌ^xA 5-LXx؂F=a^ _K8vM֫k_o|#ɭZA(=!z']iB#/=AQ>Q1eTzvygAeAޠ?CH*cፔr< X'z; ox3Nӡu|FJd-v6n_1+ %frW%a904/KhAvxN&%0,"*b PƬ=&I~ ?R2ن@ƠM1 ʭB㟡)`@hytDҕ6J `z =F=s {3vd<hOQM$ɭ(,goL3 cUY $B&ŁgxHQHIRH",T,,I0l %,@&\ b/@d"i*\ F6t, 6pRx&:8'$,UzCVLc 8Tߊj8ng" PHKjLyX`V+кCL7 `F-2D(d!zi¥$&a@ ^F0AVĠd26 ++f0۰M&"g @6%LA^Gf<:gzC&T 4@a Oo eAJ%Z#ES"` `YXCViS k6{ gd̈Qml27ƌ *n+ XZZ7hydb7LeLĥ&&. t`@%0@K <nG d`/nA&#`BQ0v`@W  A&$@M &fm4l8NUl Ny:;'m&{L"`nBlTi$憔p CN䆃(o<\8@Vgk2zt%##  SV&nP d|CQ@fގoLRQQJl>HGdA$L& 6Ln& X`D&dvR16t)v2)%a_ Ҏ& bH%ebVr2hU ezG0it%X6=J?ǍN8EG@k5"3`nX/0eBl@XO3n`5P36jBfɖl9SAPȋyXoBL& bRFޠnp> CsaJ9 N8`N&ӚdRb'rI*M"MS0LGdB(FM1,a^`F36l"`V21XCc6VN, `%mZ=0: A ~q BЧ D n5@a@%J5!Z#;K9шARGJ\p!.!6BQ< |9,6D^"6_%' T`,@^IaLG=_.r2,)I`ZL^R%VV O.] 0H2DVG mB cX|Gy@&>-rCHaUfJPO!V2 A\C huu% S8H0 g6f = gLnѾa}d (7<Q΃0`@$܋"eNӐ \ "32L/8pia1%R*$(_!u_W1ep7 F! $vl`Xb&@L;0 4BHb btS!z?,Xw$x 2tĩ8!%RbE}ã(Yi#_/4MfV09A J `6,pbUi&k $7 >aצ47!بq*m7lPaȨRJ`2d_b%HrJW&6aa #Lx 0wlOu %g&aăSeb,X&r !T)!CVn< dDgC9·>JS4X.1饂D׭ZPD& *F$jUz1!RT!\ 6n X\h7B%E$#0"o.  v]"#qpTE wg&%_bd`3@uKŠ P-`^B$0$a)514 ^/!LsYVBH(`p>$#z(&@e0+XHiy >{a%L)sNz_>H*D8~7}+'=fX:N@)і MZڭr4ƎcA%t  >=УV8CZ!&p!d•G%h"EIkA^B;I~bJh4cֺs4 *%%$la 2ZXŤHh 6^h184vH?#vEHWA>bgCSW.SL} L=&4Q@ jbQ78C&xN ;_ +q;Z\'_ot!"GXN!Zd^MO*Z7b`D 0,pf 33- e)Xp&@ B"1?AHuX~IS~6!轿Op&2`mحL }>!r NЈe!yJRK["qB\YMj{];`n&Phas6ѩpl3&XG4LB# rO  (@ )>_0Vl\tX%Sę 1 ^ "pp,` B B;(2 A%&uPB 0: ?btluB>Aiц>XS%0Ah4ƴ~,`@pբ!<@1 w!a{P9 %{4K~</ F`TN&gv5姇!TO`j`@[Vd^2s\B7@@ZLI+z=XlRL"<7|#"^R #$Z)((IÉ03ٓB(Z2Hp3P+FAl`I0r@ *ʬ҅3 +!$BTdBAlXEpo(|F5!~*h"+0AѻB (YCagTq5 #|`d NR! iq<9R IfZPkxSZ Ă =eq:cKV"'9Ijki  82!>P`Df"R0! 1 Qĩ%0hj0'Y329W*t-K XQ؄)D ,vD9Vڝ/Fƶ6Xd< AWIA 1E  xa hX YPB!jcHwa#!c0AnJ' JF%9!'tvp`_! G@ lF@A& ZZ5s( Ș˘FE:8Q _pb!5\"">:JqSӨ0Py*w+-,n8!1w`IH7@l|YG 4yNRzd5uW_^X8#X2̀hC8Po%,q,@, Q4%Md+2pM`0!HbΚi'aR3PJPM{~-s8%kTsH Q.L|OLSƦVp >@*Aɒ8bo1X2*x+}rܲD00SL17 tHԤFb?ĢXUUH5z$|U.;A~,X<(VKm>ps !B}}0("`+=tm"+<!A@DTC~جgB[HX4 !G@U P" /P#,mwYITƓ `CFa@,z ͫ;h@ m]8º6i к 1qa~/1|WK e0Z$.qTj vE1!Ofªao$,a`p|"eAQ;or/RыyԚIH's|J 9z汆̃$,P#+_,:LƪyA$$BtgS1b4\p\iŏ('ɵ5P 8'Bh oP)ϐa/?Q E r)`#WW Z*U(1bIv# GP GP!\&5dϵu rpFwBx5Qcu'RBKP 7 A7kxb kCk vK[%txycƐt0r2qa0m0p @-p Ny z,@ И }; "]-XAn="v=qjI0@htPU`oЋq"f+t,1 q%R P;İ D$[w9uiJ$ #(Dp bW 8;vs٧q''r2\Fsu3D`o&i 7 *kjP7H#,Da_@ RM.ذ({feX9aePF@9@- 1 X%s#;"31YHpp G1吓tdYJe0v.C "!B0 Bf 1~kxԲr@L Z1 5 MeI:\L33` T7\DzJab n\ʅk=0v O\Beȱ!- k p&$ol^* ,`R1OӢZ;" grc‚0dӝR t ?Nvp<<~PK}^P5c^uĀU3Zxn"Qꊫ^Bӭ&pA>yg E&\4 zj!ci.X]޾YjDOTPqbkrxK ;N;m` P Zg(Z|q%#Ҧ͋ ̍su .biB,%ϞEcZbrѹZ5ʔjS&T`s1, @Ҁ0+PZhp^De/]%`Od4璥M Z{#c 5cǟɿAHk @=8X@H.K#*!<X 7ND"*GXM\!P VahJɘ W1Șbxb2j839*[+v%k.`4߂ ZOTJ42  V.Fb11P4 olƈ̅@> 0Ԉ=B>iL2b`5qaF5X1(Qt0Hʱ- qZ0hN=Dt$Zd1l}RSW]M4IAq}*k3~4b \"61[(r8( åo$#ZE" He"jb.X9 8Pɘ,rVi#'ï$!0/P9, M4j j1s#hfnV0B66vS#,ސ@!`!g,3IAg` &'u}OxwX1NX VX#Zh!>f0"7 !TVeH,BW6٤6JM^(X`{ D9$ (q{Pd6!"Q# IxCV!j H>d` cd`K &KJi9 /J7v&x=UZXt*i⒃Tc lΥP0 .>!MߐFZ$B p%Pvf l$i-(T. )Xl18"A|DX@ ɂGD;7Շc$B3B̠u7hb0@ }Dzl{C$Wb\"oI`@DHP UP-UYQA7G 2tMGXLn!]pbQ$E2XхIarBa,TZPVhhPKv3l=ZtjWa4[E%m\̆6=(zAK 7 Ml D71(Pj$.C@7(S\j6IJw؁$r PPYHH! = @ƴaF~ A dLfG( Kl7GoE}0-I@?^ IAؙw$!"(G9[ b R`A1Xb#`d\VHYHZO`B\QG2Fj1"M"6,\ Fv׼vYTԊ1%7R &~A1bki{FNy`;h >=G&8.+&17~!ƀL=l s\1t#l9 00"DC9X]pΔ:''LpMlv%\ɍ6 2pÕ. L~E.[|X I@5F1w +.5*o@ +5+N6 KB5!iHAtpU $"Ƙ5%73趞FߐCA YhV5\K`@񍚜u` f0'8AɠЩ83Αa6K%>xÑ酉Yы^1hC\aBA0rr\QE%! Ѕ$P%U!Z2R=^ &| h& 2 #mEppe+,`LDED | g8PP Xa`ga=|H#*w?5tmD2O teA>f-$XH0 HptGFa v HLڰbfXږ"  K5P4 x|HQcx#MZoK |Gu :5h <0]k$b x) r 99 )('=~9 н(OQo)`a \K&sXPK@ 0mMpV[p<뒵҉b(I5i\|3r2 ](ax{b@ȍmYAB` 6Wx1؏C#@0HJ$.H @ @ F0@b'qH5x;\j81:IC5Bi.h`:px00 WljS6Q0"2[CK8 qċҡb "(ClE9[i!z,[x!(N䔿1l\$]io68(nQ30elI^Ɂ*@5vFkt K0H(O00xt+8̑@WK~@!@,,ɥ"ٳ|.C3 MU_i$q,[BȇrЈ)/5xO)=K(=S08a i>Ю9ؘڊ(`B6ӈ {曽D7Tj}j W sB9~h/{E#<̄3+c1PSh.Vi.'lU ,Qx ^@WHm9t`хv@ 9(YHKA8k܏P;۳*IQ(|bw3AE(aؤA^E\IT I{UBS8hZPR+Kৈ56S!B E(>71DVȂ:HgbhȂ}֞h>j{]Kd(y4bj+bK X :y8pNS(9gU@!3DP4KxJC+c (4@ DFx!HA₊ =J*:`HPyq\OU;$[X8m00OX|ˇUX 5Hb&$VTQ!zI3Џ %3n>R=)I@!6 SH`!m[ ٭֪*yʘxuORh6q ^`.@IXlz*Xq8EK d?؏7 G .5-[P02Eo@2Ylѻ22x7dT0؎ShQ Y Z: \JQQ_A!vBч(IyX6/N(߈Sh3kS@'ixVI2b!e0(#R!ӝe4iѫ뽭 ZxueAыK6@c4 A^@'H9HR4RG_ZXl`cŢ~67K>S.'RU`bʂ,Ȃ@@ 1![d' /eM>=yI.C҃78u~;[Ђ` E0A'us!o6;WÕ8em(7\`qlLDH:0Ѽ5>x(hqxs:-@2ferz|"qp0x ox4ue4h!+MPtb(! 2~7hda@[O5h"̈(z{7 h(rn#61ۥoIq"#l6璑 Mh%J\7ncx7xZǒs&tpKB0o|SX۱ .a(PHYt"XN$̛X23~@V7>`iB`憱p6) b2>5ذSS @=8|p(hsFUXN4 0ND@r 5(1Xa(Q*SeJAD=Mc5hւ\P?rؒt`4TQ4RZ\lEv6XcF[1:V((l@rA`I1R%<Rb>CC$bUDALS#KֹUS$1 AKtEpH0ppL(?R Zn! `A2)Aફ3@`e谂 !A!%d Yxx 9pEmFH(+E580:M6!)d.n}2AoB"JȲ/PZPT.X&#`W/k(` ^+?/7F+Qs OeA ED\I.1Jr`#Æ(ӑn!J3d WAC ;F'faɠ׿QapOY4nꂓ1 0xJBD.yC#&@ d@ )KprT Бbod\ %z  |8O-q +A"C1 UCO ~TJ>̱:8k$ʂp:B: P %e 0 E  b1[Ar:nEfTʦVa W!1bƌ)mH1̩7t7hE º| VPKʮx3h+ W#YČ0+&@H需.TY, <0t|7TK^TX}`.pBD/+A+A"A?̃P" @ 0ܘ0(85@ 0A]4 C/HYOj&h@"BJJ@!d $PW`LȁAR\ A<TB`PC k ud;5LELHbl%\Pp +B7Uh8$@ @ AB*PF9XQ(Adc*Œ2lilRHTҊ \B+#@Gg)xV)̀[$ |E+0PTA8 ܤ6K$A('0(Y`qG_T$5M@M@ÐhB(TW`|Evh?h1(r:A0AhB,TC @Y($LX118F-|)wi Cˡ AV#kB-҄T&ʆN")\2xMd. AjPM. $MC rl\Q,#XBhlFȒI4ad(VJ*@dp<G25(@f `Aɚ)x6G5".A8,@ -awyZwO!.9ROY& d4nh {c* lhG ߂kLV"A$$,KT<8(x0N9.-M78ZWz UAXB$7`NX܀+h8_8v0 E=ts C>hh>z,B,6T&*B>ЁTg74Q60,9h,8t͌v #n[J<2+Qh%d,H5!›rM}(0Z-5, &C58,   e¢H=:#Su 4P NX&ŴB{`XBJ c! !DU [] x]ş x7g󭩀Ca9ys$6-,999A*(G 1~#jE0$" Y$0ʖj6( ܣ)~`6ሃ~(bHK7hKzh6*G & Njr|lF5J"5eI;B8Iyb&h|Z®|р6~萂3*MP6p%Ex6(^謬Ϊ_r#H֪.*;EMI oQoo$5>%DAzξVH {w3H u^,άDkD@@ DP.FVɁU.dA/Io`q KXOyx܄gF3hjI-P529vB&b_}ǖ=lyWQ#EÄ g( Ri5N.*pr+!VB+j!+ɋ@5Q4  ЂPv1) ʑ k"@0ʇT#j[gt t )H@ڄqMl Ā*DM b9 Q yAa#<l-TGo#?a&M9!G0tlġqy"a|+N\ jAp4 B|,N#u Lt /PSR(3 ]@ 1 DoE9`Ko!UBf7 :p V!Ḋ|/B_ң -4(1B`Ɗ1XlS&8Qk j 19f@`aOr$  kLP>1A>5!' aB@19"  IHJp-ʉ^T~\TԘl#`@ኄ0 氉3$g,P Cł@B̠$-f@(AG1ӛ. a!AP`(XC<UEv!Hq$@`l r&4l$+( T#,*F @pxI$ }&14UF :H/ Y3@l$&xuCS& }iGaZd@C($5fCaڄ%K!J(ٕK$M "Y?Tgt5lqÔc-)^ ]T$r$5)dffTkр` n+ 0' 0aֺ@ !|:o6 hyB %w%+c%j" hqxtRÊ<GĐ .%jd* qP Y. "o$F  ȃ yp߹3 (Iև 9CpL U0b0l #aH`ZTߕl4/Bɂ-B[m}R2:$h $&̖ !PuBx#$\1N ldp!"I"J.2b@wuke%iK)v N  J:\* # GLoH-tARa?fNAg;0d9dif22K"a `1^@ ¤P"~le@O̭.5/ @yM_X@# ܤA NA! xD^p< G$b]!JX ' 1  h .B9,&ELN` D$/r A)D&L59lmmK €j`:Mʁa Nhc;'f 4.y"TAP! P!5dX dB,B & 0b €\JI6"%u.0gj f `ԓE6觰"l  rp. F$ ,aeaϭ"$Ġ!Sޡ˥##  #rZC H, c4"v v@Ndz23d S_FđX"!&;3b `" = /! " ` fnr*r &h@*Ѐ&@恛Q+vDMAm̈Z` N D ܢh a"P#>X! 9EAbʁHb|B4F2B4_`` tҏ ja^$/$`:&a k xD( إqN-H$a``@Og {r*f !t6 ad da " S [rAA$\ B1:B<]" fg4h l\eĄ4K-Z5b.! A$ b %B\`e nA zu>$]0 ArYb@N ] ֬Lc:pREX"R /Za,tN *UVv'p;lJfdz!;9wZˇ{ b[z$.(ڑ gU >@nvg),' "ܨT9xZ V&Lhān31X`v! RTy@D. 7 ' DԪTG,aaxU.  D$ j|,.Ac4 <!4 vw Ҳ R"@˱,67.|7 "IRy̴*"Hh0 | z@ T,z f$$GZ'r@*#ba>ۀ[VA:;–BM>"Hy!HtT'lXŦWԊa& Q͊LEg,kE.JSqIu5)t! Ę -D@J=i #dH,:U`zq !p>=$fP_zZȵ{:@&3:` ؠL&X-` hMp+hG7zri-F:ܫH?K6AJΑGBP6΍%G`lE%G}&A+Qaxe#E,<5$Tt)8 >}-%4:){H1}\dDPX)FHb'jQ4JAjr@`KH: 6 R,`)XRdEcL0BИ ]re˗ew<(n/3t# c, ۱p0& 38`c󭨖C" w@:X`H!k8c+ygТBg&R3͟xj+&Az'Arr0  j&V9,*[l `5 H`S F~΂-p&D)毉b@ž!Ml3$ x \Vj4io.p߈ %pi[yF]T ZZN#QG;$I-1RcN@''hr:nʛ .*g?z",eXV#1`rLr8eSĘ ,jDjí3(H [1KLqpF V$K,.HP;ANΡh¢OVA 3@ Rx@xiT>#q[ :! e}4f5Rd@zaُڈFrJ՛0gicnD@ Sd#҈te"(ĕ"d"Y9W2!(EfM0m@X%w8V$tƒ>t ~瓳e,CVAa~~>GWC(xZR!@7 laCR@U@ ĸ`-i!Ђb@lf jB:}p%i D#(NP `Qq00Fi8EHc l%0#́ 8%#Ap'87 ͣS ԇ6"dcG7L' Fx&"HE\'Ă N`:%H1AaAu,CPہ^ϳ́ aQa!*U2-}6)0 "* <"PLb 6ԊPX|10j61}lEP,BÓPPr ARN8ѐ&2K<({N@~ yTVTŒ >BoM HT l$aqB^bFL*G>THt\< B=vT#ݚv@@0B?L\`46.I^I M+D ((yl'.YDb Ō̡]B3!.9G{"ꖗyEe U: |ʱI&>@){q|~mPX&U HBSAtx$VtY `kozemdDc"meMXP\v>(@!LL^<(3  }P7/],E1Ovqct-G`:P_REQ ArhM!R6V>o*܏%  rArXR,(3n-nb#JB%$ |* -O~% "Y m(Z*J@c'H2 Yu\7ڨb @xt8* gRGy0m1!uHr pP0A z]Zxx !\S$H k!iHiY6DG<. aHXō6C2-n5Fp6,aBipR3%_H^0E&0!cMcIVߘ) 3)hqWgV0#xrJX*0ڈc%2h( <Xw6e0{{a郸,ZN ?#~^8ȋ@*w( qp/`$p0m `hS|[0YЌ"h`'4U+!` "͸Z" `'xio0Ҳ DWP,`CȂZP-:W LD>P9Op?Ej07>S((/*ql(;C.?8B8E:XB)Hk Ms(ZCMt@@nX&̜\((ǖ `ZJ*Gaq%BȪx˜Z Țyh bh ݻBZ 0Ri6H(jˢ?`~O` Ȧ0B Ao$i #>ȪK#d#8j`Vj$%P6q:0 !O@  ;І0ؽcXhkǸp!3Y5 ʁ|! ,J) g 38b> 8WC RB2ӷKjO6qhHpkhϟ4iƧ2qXmཆ:tlh';P&ÔIa,#-$1bn <0 :867be{ڹF.rlذXR;EuZ0 @;Ұi=vh+-`0gÁ\57פ 0`y->_9Ν@۩ohKZ`̘`6)`zආМC$1Gn $ -ImA;@]qH$d3nd?C?(L ;@b0DO@IQ( @qT =@d = &a T@ @vzՐ]r!uK$B@F ]td XCGmR g_t%8GزDs`LεA覫 O?qE,ĄDas@Kh rP@,0[m3j%'b<2Z,0 lihĬmsZ708J=*, aasTgc9_>ѩaQIAslvl+ʌs,HrU:8a8!z(HG>0v7ͪ-%z:A`ڄx iXCPÏPO rF4hE1K=iovD :{V9vp1(&m5 `)` o pim` rzeE9PA+7D{6se?B t*`1=XB8$|Gn66q z#x 0uZyc- 5~u(!m0ӄ 5cA>Ay`Fr5'Mm 6c0F+v\L6Y8p8`(Xfi"}bC"Ή%Z8:IL,Z G^ps `@MJXsu&)of } S8f G.U;qsO a p&R}P$ERYppK&aP Mض~~9us@3aR@CHP @^v0I5#W63R-H:F@/t*\cC00`] 7P&a|ڱHHUpY` Y1/X۳$'>Z@ 0><`QbV0 YAy[I3# Yx3B=r ` ;fz40t%':/06XlppDUpSQ0dơ@Dq&0 B3 2|lPkdQf}FZYO~cOn i:w!`b cp P4Q!2` ҋ<*\~PUƑg5Qtc(0qB xY jP6^5Xs UgQLg]: w߰@H} 0 sG` LXD6hSIv"tr* `z '6E9r ~Rp k i`!B19! ) `l2 I ceTpF5 @4{k1X; tn/zeDuc 1_pq;`5 JqJl{ov:MD/AꄃdnegB $!rl`aఐ0[81BM1! H!/Zo0aĠtIDqAb5\@] Vy 4ㆊ4Y^Mj { dS}hPhA R%.`ybU;`lzw6 # rOPWz8~QSҊ@JH- a%v{z v dHڐt) 50S^90 \6%}P'p;Y^3 ɦ-Jr` RPuHdtz@ C  @2'0]\ bRTp nW 3 ]I즈DQY S"P 5_u5jg `Y6 #R7}B^#Yl@ư y h9Ati0Ӱ7a2 3J`/P0Ԗ&Zc6'j1{C ~@]C 8eH\'@Zc ?@' uSIu PYeTf +e7|Td^_K₈#iNiF` 3(1rSd BȲƲprXj&isC4>Y8?HHnH:?K 05@  @da1gRzP HRI.uQY^ P-f Y2(i^S #icvxu}4 P<W ֕hŀ&p!Ѐb0!7`Y935;tQZCYG  wquplF X4$a^suP P %` % \x4!&/Mу\ne7 o /qq#W^InRA9i1WC_* k_Ree{YoD(o;P 3"D>VI#;';Bt:k<:c|lP mޮ wRfFrnC Q3 a" 3/Pcz~D7MmN q;pB[r{e0 1.5XمvYT'kjf " #WvUwS R;/7PoF;Фs!%fS3~0![-k Oq5 #4w52lr=^V = u@y5?O\s@0`nhqP=A5 #.ЈHAm< B@6hh0-o\2M9x 6߲8[yD;ZwT7.bn| @-6>%Î 8Ylt %B"CSLP G kweqy,rr&1?I۶zZNӣ@jeA@ጇg %NyȎV @M-{ʈ : 6Pۉ%̲48A\K O' \\26 &0c(= F@V8k DB{1;.=:Do81ɡUZN@ġXsĢj8 ?ECJ C\:46@ `RGC",)DCE0P:Hèrd 9jepYpC 46VX2(@=FdD >+v1|d )ɇ3HC @v#> $@3nPeQ jmԲvR8D8P:*ZYԮ( ~B < 1鰘6}#K[9ٿ9x&^e$pLHq享/KQ `.iE]!0J,&1_68H(!P'b1M>@3XO1)Is=C<a-JeUF0k(Vv?ô&YuzUdx1)bwhp϶D P(nOƘ'd'Dm\GԔKh |8^VܠwЃ/d<MzDKltH2&с uJwB; &ZB"@H* өV+Y+~q4EMa@)jFഓA iF@hs KhDrHo%#Zq]P krX>Gш#(s0ݬ!p;A&A #!IMV ŠXHR¡'C\v'q02 \@ `xP#4IY`6>F(6@"$-{CH"ٵb K'>a iI ɧ rҸ֐! 1Ph,Ӣ$V,k ]y''Ŗ9J! ]5+M) ,#_J% XDF0c2qU!Dmv.(%3Aa9:j&U-rWDj\-KlbuBT2 >pHdIf+&ci*lE)L1p)9e|DY1TuMce\2n06[`  pBAL8BXgVrb t 94 XQYr?N( W: t\ym.QXbRJ7)!% d9E68d*Us?s^DZݬ/r[ # A؁ıle+QBF8!-r^X$@rOS=$`:,~C`p3úT$G j~2I9n  j(b9rAUK_T ħ`9dl\]h$Ȍax!2W$oO`,@i(=HJx5pXå) p2@!8@cv@/e(v`t蝠XBJ ?8y 7(+ڨbCԠ' `a_8Җª+Bs/ځ=HF +) @#@:q0"9P28``H=: сjY[jA!1^qV.`E {:h#4Dr-PyH! FmHGq"908V(F8TX*hB" 䐃O b8Vp'?Ҭkx@#<6 FJ #h (Ȃ *|#Kz /-[H[[@ (I{!H2(Z!^Y>kɕ`U!Pc:XԠj8<`?W@ dAX@:Pя89銺ʢ-0:!h I,?pR4a( "m@@=1H 註 F([0?|ɈoXrROc9=…g5i?KDĹ-; QeQ @~ՏȇcE[4c^pSa Y#j'S8J*(AhV(D`j,S0Z u;/Կj(P9H CA99a˓Q•JጹT>@F@7(/i(9 $KKHFJ% wTT 0 Y!h&^Ak>`&8?ADh9@ Ű,H EmАj ;:?(??A)(t8@6O_ V9P90.%F)]9 :xgjH) ܢ1`PЁTن!6bs;Sݍ%#Aҡ3iJ(T10FA`0dB;\Jhܧ(-uAhQ)@b ~Kx 8̿:⹕`_^Ȃ qyT!, X78 ,ب9AɕF8܃bXYխPYEЇ ƈաi>QUMU"E9B&h>i$`F/&nYq!X-R8`5v&.D.pRj2D M/Z4b0' yipvp56[X:Ȃ q31pE70,XyD(H E_4L=M抅@xQ  MX%%`]xE|*d2HZ-xN?3b 0P͸AvQ*q! Аf\S+pޤ{8jTp\i@)*, ?qXx_f^pc5M=M8`YW%xq8ِ~V[caFFhQ`VXfAE7 b$Ѕr`0@S!m&.#a-;һE4 h6j,ra] ا'9N-Jg@D8:8WxR`HId ՁKil錰aAY\]m&-Pi0І,s. ?b|fJYP\ ꐸal<1 S&as1H50$6L/d_X3g[@D{u8l8dg8H]]HK}٣=A>v YXx#bPc80-pRN…0x:OS( 9P"N "pGATx^-XFH5spK(|cȰ^prHd!sȂ4 iJhOx0@DD k05b0m|0U"mi f-0FU`}1PHbgdYF$ .u[HF@+P@THhFyT0d99 ptx(l$ |/[ @'\H]cFW[l aeGo"(,p RPdZRR2bNx"䅡-Pڨb=6S 8 ʥZlZ8O6  d_+. 5I98>]ʴ=x8:s H``5Ѵ@: H#Sx0{`p|tq=S_^k&OQ 7s-Q~<@ӂ_<ЂPj^I .iVXdN iGdIA+Nx3W j?B[a(d 97-ÀD25Ky ΕD=oH hOdФ |OB(sgx#0 e08#l!(h g`-Z  . vxPKnLlk  Ghe5kGj`m?0% ISp hEwoG?[)y 3]jcV-iGl1b 2[s$ő#@þn5زgfm@!tfm%8/:.]# > @E0 KH*^KuJO".1hVX)!(A0@MI7& fAW^e 3"QSodQSMG7FLTы/mFX]bra{\aZ?g`+bei%0{Xlr&uzvڞPt4t*bN"\73 %pK Ȏ xA wP)᎟ sC:IT!(X_zihAlZ-GdFG|'`'$[$^+3 }#]F/0lP^RbeM LFTGPaz ;Lf;`VֹV]u* @u{ B8tu|0P7%?iw.$O} R?4ƒG)"(EN P!Lxna!4-{  uä`|Y|A{T @M0 Xr%N~M)-haGf$2h:믭6W>p}ĜA2La^Ns(?2 LAД/hױ(lU$ha \pb6A|##b$6S5U96,tE6c1zQgd r ^@X:* P8HzA oA,ψ7؀jЮw` S@e0I@lxrЄD  #zG׊oR9rXm%+9Z{S 0!HhL'!Dځ5.HbXJl²u℆' 0\0MuKF^@DrC (#0hΆ60CuA`i):`nJ]»4vE,ZRX#Ԅ!|YHHBG."OEÀ0@ v(E)Z 1 4Cpumi82ec/-0 ~5c$Bx 2 q-);|zQ¹V X0) ҄&4XV !Mo6*f1nu[l 8D׼ Lp!cy.p 0V!bxʎi9V$]JQ3"(f!TxT Fg^#R6lх*) H ub *$,$A[ s|o|#d)4]# X[;. c5 ,_ndڈ,{K#@!.%[B~ zm z4b gǂl7%83b{^3l$ܶC ARc ^-PaXy wcP?1o&R[b`(0YD&\fF-k~J>2@ ;a4Ki|о\`11bS ~Q !ht2Їүgfa=qL; + wsX$vdxXCnoXp Rh[oCz V#XTʽ4K c!`50$MS(o@%d;#ȀDL͏B7~ "1;AW>A  zlm ŀ`R t 0T vlA4C}^,׊LA\@ O4T)}Dy'V+t70]@v֤ t$4A tĖ)" Y|Eԍ LC-:<@<48<BPNP YoƖ^XfdMX@> 7%5Y ,T l;ޥ[ A Ă XZ `B,X0ezEazEe%qQG@ApgR SpBaFH[ Ah'd LdM~L|AEGl)3veĐ* A]  qL0xAP*\yƣC/D.ܖ睧N@a`4Ttl'}B8~~LB x#BTœkL\A8uLa\;t wDbH*7`$|0;GzE}N)蘮?خDC{JP3 Ŏ`%HP <%@34RxͅC^3xA/$1h8BdH j ЖXTI{^ݥW*"jP _@4* Lc]YBA{\Al̞D,AGA(r}B)AɜiFGs4AKp S|ǀZ1QϔvdGX"C@e`$M~-h%BaT%|<@FLDy8G^|W@0ՐŠA0Bŭ7 hH-A|:TÃQZlQSu$_\}W@(x9uhp?LB gEToSD)Bful;@J+#¡`$.'LH<'BX^x)ڲƍTK,_P`<@9.8CJR$B"*lhl݉ L`|^ Y`@-(Ⱥ:e[C Afxd*@c40D8/LTb (4"₮0me[?ĦM?CS?Ǥ ,@tP.|%pHHW"kyI0#)Lp+S20'$A؋%[xCUZRWp; jA:D!@p̀7|~0^Sڪn~A鉈A@6(C֭tV?F@oQ.l(P@L9P(|O9tiM&4Wj\}0A/dC,[B.@ ̱D9xb2z Xn &MQڲK@ 5j;rr Gt$7v](# .(W{L(C8x9zQ"S_:/;~@m¨L+XB{'HH1-yV'L}I>L7: $=ke} {)V9:S#a][MӖBTw @C@"Ze}0;P%WL(IIؽ66{llZD)EI$^9,6 Բl\b֧o;X`V*?dtb$9监KGP<#T4 V. lXcɖ5{xPZb?)@˫PuS7B@e ^A_7ߒ۲29ޔS(3'+u#U )85ma (:/$~7yr>i %#\8S;.* e~CxgzԛÈ9No(*Z#Ģ/+$L<?jXqJѱV| /Zg KXĂrhrr{ ,6ۭYh؄iO)J]h7)~@ Fe`Ўs+waSCx:VR\8BjQ(*K`D$:clϖ㯕7(Dp M簱7x`rIƠÈoZeCգ:WhaDɈF v|TGK~eƅ EJb]H|Hc!!衧 ā`(u 7AJM1Z,ɚUnFSO n@VcO]!=@SH0&S8IΊJp9PĤ=%6Bm0 Gl0DpO+g`9WGvBL #eh1Tf 8 ò|f,*Pg$H9/\=nIzX!ChêÛ.2O C6+~iQۓ6 S(L!Cк QEKA pL Hr pP IG-6@a>RK1'>2KCئ, r%8CuPsÍj9ΠZAض(`+X)s 1Bz?\2D !_XX)AZ;0Q a ;['pa/ᢍ 9fq3 Y@hPeH-v "D!N` x{>cY- H+"t TBDIHw*\@TA!D2B b-En2/xڡp20=b!TJ9g;ws'= ȍH9{ %!&Donx`Cvq qB.-x⠌0Ān0?\dXAUXpF h P QQ02F7*(F"80fB"{RdZX߳l"52p]2k`@WpF_BFA0S}- 疞ň9#;w,d$p1ې~<: (&-4B\~SMi cBnƀ ؁@F"nP -lțIrӔ#XT 4$"^ّJ!l#p T .K`UU=!00ο>K}u0<rU0D )\/(QPq'v6žN|4=i-BޔbyK!gMˬE\ h h?mK!/~c \r 9_Вr 3dZ ]^Se{YQ,a^=V)i83#pA7Djt]ȇE=ἂA+ `LJn֦,_>6ú&eB(v ) c:n_C` xcuB@)kks`DDb;&\pE]@ AUn rmYn kC%+1I+ Kf!7QB*,P0,mA1uԈE  ĐemX hAwB^d<% .cCv oKkc !Őq 638h NaP &`*B.b $D$& 4/>"S^AbF[MNd ^r`!F "\DF! \!EJ L.`3` h `:0n @xJ`I2eaC6*3d`y@3.b\2b8eBȨ7*3Eg خH$O F! <>%&T, l~:$Z}@"%".p~)rv~r 6*2-D^i!@!T 8F IQƂh48؆@^bB4C}87%.:@P2cPD p tb|  v!CgXPUN,a!é+BDjka>:BjQ!H"+L@eb^=8`z-`4Ls"0xN%ba!gG,C O T8mLTNvx"B '&a`3t~`"2 @a ȍ| "nj A!n*BECA$@BP'&Z!f$R."!`S!<B="*rFf .bX!\`, â@!ȭ״\@gBʋOܡ xAJa"/`f2FAA  @ɨOIG?g K6c3!TG05TzB"(P"&:.Lq6$~f$lЬKrSDs3K6*:=z!Li“`<ba2J.`!NܩlFj+\?U!>`7D$tJJ` V#n.t`2` `ABJtIp9HUI'7>Bv n%|qYlĂF1 vT$V~V; ,)d)'Z4g9" H@+O UM>..f벏?>yu:7~c8Fb67 @kA FPp2]< @ $^iޑxN 5b*&#)F AB$>,Іm,GIS$mZB!ryPBBѼ*!~>*58n! 2'Fdauú) L:o NM VAE0r|TOa 5ra`Q <'md?"ge#FIK࡚`"5qbR$Ge8D*@N&Y¼$v6d^vG%JZwH%ITm6@ fdn>E!c!pe>r2kJXU!q8q@^"_vKC7N> tCh+ TP.J:Cp!J Rl7bXV/!Ro ,$$mxlZe!ZF. x{p(p("RAW @K@ !"+ :A 7؁ Awt~N,XFgA @sbVg6X.;dAxn2>) 2S"S8.QU8T> a \` 8``?ovoaGʒ#ySK(d^bBCx,B"0.!l!bI]I t!Y U BL8,pcAfAJ6g@ARwbd_cDvb.sqP8MA; L@RdECiWl3T9zVHC@^8 r* `@.;k4,4R HB&!Z;b=nt8B.R*iys'>,so.Fwc) #:rp],/@U/;Y!nOha Tat/80s9v @x_`MwP RlJK 3(n4@8A>zSa@~Bи 4D $UWD UM - INɍ΁A>g@N"(o&a+"@v* L n{Z~,F8a.(~yD@ۿj7G\2w!f몮E^ EIVN7>r!@ M hʕ;|Xna=F*N1/E|8! H?\b!ѝy J,d rëv@lF("7v"S kC~n"'<".DpxM.hv9U` p`A)b^C2A4lZ{!> 6]qĠs"8Vru˿g4ck*d3W*g4CuJAS`ԚK42ŀ>AAn@S$Aq؀Mrc~+k8gS%g˽(V(ɿ4D,XBc R`E? RZ,~ HFPU!pQP KQP,ŋK_c H;KkA (P;0)#P%HPJ$Zi+\+P\  @/Z(B!\PFЎ60Ps-iFފm9[i% ?`Z6b.O궚lviw& v$;KM>ˏGD}-}"a?J-"l@A=ʘ ͂K8DTfvD}ʔaKT@E@Q9h@51%PX)@p%sb6BhPAPQ"IY N8Np4DZta1 Apz o"䓶}c%sF]*>\h LvG\rDjl_*x+ AӋ0~'I(qb}ta)*DfAp67pIc(FLvt!J<-A*6MIv)"A @dMh0XI7GXCPM:$z8$9UZRP*2 68 @tUSDZPkߤ3lL1@As}v?q%Yy]u*ĭbMA@,e @CSNG,첦t,P@؄QL1"Y89vT[PILXaspCYK1pIBĭ: Rt36zi u? `,OmtE#Ђ\6'K֊ =D"QfK%t&oXBH}ꀎgLg9.+q(DD"?:T T͔s00K%P  @.IJ٩800>x3A R*vkIր, p$K.>Qs+$S/M ?z%HT-;aB7צ'Ua$&qA'ID"i詞C*RX8R@ҋDz :R3k'`3\J/u@$’JZڕ*L!]$?s.47Y R[\`Q 0]C1>3 ŝXO0tp`P@i@ك/. p(Bd0^'[r''IAʂ/H$KhvJZل]e+AY>hx8]w(1hRTx N97 u߂R}$0\7LxEj5$[DYZ8O<`dmHa1 .n[K?NB-Ʃ(Xi.Fm̃:X-ȣ0ab82AAg GA$^+'"  0!@G~9+<C;!2֤ Ā*@DiQze],B_]L]vPK8^} lbE Q .РPb0 xhaGa0$l(w<I-$yWZDzp(X23qf 0&Yd'4q)QG$v tyqQG 'pD?Ű2{;Kt@d+{0@X@P| @EPbO+ +qC Z%P 1 ]T-*c(,!TBDa2lxz0t<BD%x'`Q<1Q9EHvV>VAL6˳3x bpvX-  aK ` ŐKcgK` 0K$L"cA_PTF_PzЇ/  ^*x_Q^ PI @qBg|O;,\_`  &E"RQ2UDv2 I2z'!uv#Y7e0!kV-% S%ؐI:gP24eq(e'u"c> 7 spK ur E C&!CKّ%es,A0 q|Y6?EFZgoo8 T<ڒb` Шz@+HAE9YE*EPIX8I:qyP!-RH?cGF@MV5<>e`35htq8 0::z:] 7 %<`z9 j:Z$`dJpaZjk7dB{)Q'!Bea S0 p D m@p a}@ @Fo@u~A q͂74(p9EaRbDC]@ d#bRƒ)'9DC*@zsfG$Mߠ B(h 89q(T)\E[pf'Pr:$1$`2Z3S.03 F3KI-Ksb'[  2#PB 4[Tp@ @roސ"o Fa~3uC7Z_QP:&Qa& *rteaiT%R-&-()q3#9& ,CUB: Bפ^sn2sc “B0%:URSk1s5Q)̄m%Kq 2@   ۓ0PZ  h#v B"J e 2r1yK 2ʠ P.j([[)W cC6 k8dP2psp]pY5^B 1P؈ް\p Z}& @"mg~2D5\.F&<.fϝMel M bF t:GM%Q M*@ okQM$ƒ:U k pPJGcgpqki:}5MC49x P2 .CU(S8 mr*\A!{{^ @Y#B@sD0  c@'\a~- a.qO#U-zOr.R-[,"^un!I0q[m303k$!J#$fgp`P(4Iwe5;n(#juvFf!(ؠ _CFZ(89 #9L!֨5H(У+ŰƱ?%$[ =6 89%oKX-0’1dOdU6A@4=ÅLA[ jk5#&`aî:[l!A LfH6@iZ,/\%Tr< k]IX@a.J m)I #+nE HHT(bӑ(F<0C*z+ec#PmLK'Y (ؠ?xq)2@+A qᇸ9-H5XsMK`. [ɍ%aB'OÅ8KXKUU| ??3~h4Z|ϖNa[. B `ٖ !Z? j#!tJV\ *|A@%R XLZPٔQ!RC%xɠs1H9a za?ʠNAqǪV(.c3RKJBȚ-,#.ŭ[l-!Y %3z{0lhc MB$ 2)-ӕ@[@[Tȁ@!V\`r8p(E(X1caMh 5`MG)O8(CS=]L-@7F2g "D(8Tp! q@taw BazC+Xa- y=IQ|)y@" %GR &4YC6Ga%yɄNuh9oLdA=H,@!`A2iC1 h"@QNؖu~d 7$@5 ~zBs͈` #̮>ͣ"•DŽ x7" ]K$bQ$ ck$缟%zŀ:#+n2V IQnTJMŨ ׹$Phb_y)&$(ohc=4-f!8jL`I</0ls'q[ຐ\rY"M)'eVPt E\2df9kLw[dVt:@XVqCodْou̴A! с@Ԣ]@\j8=GV`T \ Ajg'<N$(jY9j2#X&;UM* rڲJ[+&%pF7^dgP9OʗXVHBrA! L1FaRGg C$H$hS o#Fz|Xb[ Ŭr0fHlIx23`6]V Hxc]`{2Ho1(pVN#? !+A8eHA v 9FDKpJDi{ 4fpLz 5=x|dp2Q__T791 1 C.}"iqEp2^`CB ^~`f 9zd`&Q0-L!>RF-&`%&h`:N\Xbd X3@P[m@/d%/]/#@)ڿu(L0T؊}X%x؞)+)<}q6LzzJAyB%(1-!xp0G K\zW*sK*,q x%*0DHU:U H:X ..`@b0XHʂbHI5(Q?S9[0j.悎K NX5"ȮGx|!MqWѬ08Ft8F:r((2 40 H`Qaȇ.XjPp\ٌ6Ƞ ّ_]fC5Q2ߓ)P'"գʋPCYP"+dJ, 1H'Yo@V4щZK b."+bPi.jx80!ʩO'6bN@gnn !]1`;K[SX Y ƾHQЅ^@)X78F:>r9XC s3pLb bYrI0V"`("CqJTJ6$U)Č(<Ƙl+lV̈́0 !=Ң~ꋳ<bC CKXhE1X0KE*O`oxM7S?[  bIE0S(2?E2@` xWxsT80Hr8R:X@k$)3 xAxwax;Y i&1V M%A LrYT \oЃ B2c '֘ d x c =~'['aɞ3+rBJJch8oxII>ہ2 Ii M0?Iñ<3j1:xeY'2vQCc!9Bx%t@ؖ_@ƄT((S8GK[3"Y8"ى8ݤYyӹvc #HTA 00ßɹ%SM5a׀( A vUtk͂+j98DXiP\JqCp&|A48 ^E-(WBM(؃y\m}\a!.@[XЀ4אҁ3 *`).d: ami@ KhP)FYJ+|xD2!d&RA>d%(>7٘0XV`Ym q`l`q QYɷX!x~ös t Dy9-u) _aTPX THo0:p3xE\IM؃!Z"K0M?`eq5Sw] .Rchy>F<*W)IP7L Ƅ0\p~NpMp1X A( Qܬ s㴞R"3IN<% b-X 49``謻y}R^$1ѼnjI_qcF[_ oHTre5 \MbwN%*0?wI,Fh2@ $[+o$W@[i=JT#c@ZK@Д>6*HX}C4XN}8QY4L6|~_)S(qxWYI$=XP&6Z-b^e[0N*kK\ہC [4^8.h0@k#gccK 9鰅#؃ l+(P9ЇM 0{.?PNhWX.)D:{U0;,P%6`Hna͚F= 6*$"~mhp1E\]`%5AQ)K9N=X!yYN^"(OAOjd9-#rs7h6=!у98Љiq.UHAsr-iUljEk05.zyrK?kgyx)1x2Z;\c4>sG,5:bۗȅ7:8~colМ|S^X[)0U0 YTg ZD@S)Q/d WцW9 PHn.1{}W) -I QICBqWi+](([?[By~ Yc ;k.Ҁz\#yfzz"2B rxЉ5i@*/~Ѕ~h°MP[d  J;4u{[ ʊN5艓EN1{q=  m7 0$NAP<Y:!. &$8· iV`%leA<F0 GIO!D`@g K $AATşTvBEEKhp.AEd-RUFTQUwC1!ƄK!A0UJ q͎WbE/E#A?4? 4/.A;D.7ԁ@o&%d bFX5QKmg l`MHg}tOgbk\*qFoA@0A @$mjtDHo$ԽϧE\]Ma^kw6($-vH &FCDYL1C/kL~;avЫQn S5CjTd ݵKѕPsE @S{21Fto2/QdU\Y"{^TXJ4 `'G <6l ` M0/Ȁ0aY)Tޑ!X%6#RcX܊(72  p~p0-q9WPRs/PR)A~ \"APj!+&1 %hG"H2#iG$~G [Y*ExI"W1 dz`< u:R˨|E:3VGY+wɣ]1"!Lnp0 X - e9ABPx0&,c{FXσNX" F96#x#j# Pˆ5C$H @hAc@_L.|A*5?`#~Qh*,($h ]B~" 0"ۢJW0# V:GCVid*+%_3j1x /~Brj9@k(ă[ޒ?*xD#ת~.r!4W P<ZdȊ(#e갗V4p1=# 0(͡ ,B?Kd lHBWR t` A'*pRU1@*⅕ p#5F+aȭ8j@5j7}fHe{O&rHn jT"L͈d*f7u_V(I  W "h "@EIV* 9x[A܀懡 Z.'QXF b^#`LQ0S6l0)G eAinQr% ,YPU `ѝ4ls6|J ERm `5¤$8.L/u;_LxЗaYǂ$IMp "1Wgs, )SmiH 1TPGux.BI1pL\R_Aa I&Q Ҵ SzHyVDZPRp-ÛBUPh 92xP qBcv53}P<ͼM`{yr  qv 4A!$%` PD 6փ޺F(Mt(SS@X[ORvm/U\D x \PR4U#ɖLDvWUI!AJC4u+V߯RuT9"GsY,*#Wv.ŷD D"wyhBP@@."у"x@P<1B29_;  AQQ)AK Lqֱ׵s<!sFqAqJx%<3hƱh-dڡ C9D ``9BD+|0XЇ] ' !LH,LUΌS #PM@m`[}k AD[!̖7!&YkȒt 8jaRƏ0 Lg*ia|46(d A(e\XK1tx'L$'}Ęs&H:4i9j6•R dFL@od^8ƚrSNyP M&8JL-(A$)jQ֝FDN`:Ѵŗ7pr(/1$xXB?v< d@ٰ#](EHLY+bӏHHHŐz^8/"Qh (ỲlVPӎSsJBV\fًRD$Bǘ䴡^ f2@C),D jlxBjt11,@4* ]j}j"AB-X("A-,A;]B D%l"mB`oAG{WQbh<$BP -lNYDH遶ώ0B. ` h8NHfUF"Ԍ6FPĎXYlVY<IN)DXf0t B: FR}CG(Lp7%0b<'6EeA'&ܭBCdܟ"Ab5PC(4L D*fhD`4 覱taʍ+hPߕ*F]jTD~B~1LŠ a ! GE\C 0ICT$XnXKGU4cjCq& ."M 40WUI4 LY$˷JCR/76l+TBI \;Y>8A Z_+(#.'%^% 7/t@pC! .9X9Q`ma M0 !7@o BHTth] :AAٝm$ĂU DU.:,evn k J*HqA5k7T@M$QtUT;nɬ,J'C{J -FSZcYTХEo#΁^JGC;Sd8 M*,+27ݴ7 Nqq}A9@ @E-<-H.Wlr.ǽN 5B~@DbH {"Y:,Bʵ勨udWաKN2pAY5$S|{cC(U fN؂a8lM#MT 8ϟ~X(~#lp䏪xXLqO 0 +X8Jr o#CH}]T\ BH(ouأD@A^7UU "||+$ -^ Bᘽd;H2,7^r}A=pM\sa 6~5&OZA&t/ؕJUZ( 2clKQsofP+dq])a.@H܋+ȩ p`C*A~6KӮlr@)y] &!)|MXAbb\frfdB2D7j( T(cNjcMzJdƞ&#tF$mT$$g$܆$ jU.쌜f;:C26m@bedaَ6a&%@+HHFe "AR #\ *xnh GbG N"")>^|M@ At e*v$IA 0 B9pm¤2b2(M,`zfDD"LJ3dOd4LQLn b܂N" > h*#qu%#n xHD nq8`P1 A2A^>6b$  s>G:  ʑh*a*ƪ Y@@IJ4Ph.% L$(ne,r1Ndcr1$/!NOH$ک2eh"2DцZ!a \/Q"22 6Ȉ@Bt%@ %% xG(h'r! tQe"2 (+Bqk?,!R`r0&n Bf_1n~dD 0 R@Lan ;OQA%?`T>.Nf &6N`@zz$Nk(R fCA awfDB@ XA i_Q fud;Ρ4\ h2Y/;4h"c05 4Ue <-C ldcNg>\y m/C;c L,q u4a)>n E +XavbD@$NX[.¤ bd`n""$l̤4\"(u a M R܁qd@bYS lT *mt} C" (1!Lv2&L`&|\;tF۶ KP;.VP .0C>G#\Hnue., H4ڐaD(``u>`& \$ V g +"F,A7"莠A![l#R"6!WCpjdTQ FA&T PA.bZg] C%)UhdV @ǭXs9@T-/΄UO$!"l1e.2x`~JcZ *HmpYW ]OcEy/. A, ]bJ 7uQD2rCUz *mf >oc@ +F b``"rcCb[e/+F\-ҧ) (% ^D0 ~!@֠i5`UAq ᓴK1Qcj֦.b4 r#d1'" 8:Ab(;f^1#oL"-Kd l2{&!3NpAWBٖC<:x2D${K Xc4F~`bp inŶ"?Ș.׻: 9`] ebbr$X! APh H ( ?c-C`aiGPG*JQ 9GMźQYrQ# T/7• Nb&|IGmG -s2V"(5+/>X8 B}p7̦X1-@;OT?@ET1XItDlNAoD#=dBp&$X5f6z =&Z[ 'Nbnf]lL3I" ` (逦^MC*,Ѡ’*%_Ia: ba@VA#nǺ10bƯUn :@A|\K >&O H/ֵXj\4#Ź4҆iRmcNk 3jM?:ij3 hgCWBx*&-MY{ n,![A@TKǂj̨F&kD m)" 92 IJQm} R xCQ5>H .<7KGʽ\qܕ$$B 1Xp&7Am- W0u.@k"p!1 xᨆAVBXEkշ"D ?&ƉK4Ӈ3AFrXP_AWm;y $TZ0LIh=EXCVq1e(ĘE. }%D{Hف—82|(ag\K 'z@Tg C?+#=Hʐ‹k `GY@]lXB%Dk+`l%Q$-d?GѐF73h)BNs0# 1b) V À.i:f?vR-lR !T ]`RD5hsfC2D ㍷OɔVE*ݲDvv;.hq]vK` ǖ%)[_O̕$V)3, FGq+* aI (  o!O,q)#i4(F)[+]Xv pl% {@(PhA0k g h"O AGRVՈzPTN .\䶩D,܉A:X4{H4l`/n-V!B .(xBG<B#9ErA 9lL?a z`ɧB #ь3g@ X@E 90rhAFUMzq5 dHАi5PBp#Ԇ"<&%t\Flܮ响{ v(e QltMqI14|ٌ`X}Hܨ*āb#+ N}ߌX#}oa)0 ܴ0, b0][-fS~&T`g 07V)48 ASZa2Pj$U^ $o r0-$r` ,0ɱa`T,DD^p5g0u:l%jڒ FJ.U IH\BaA?1={$7G{ W%23`. g:q$6L ^ L =#~LVp 7 "'VQQUA$2(A%R!23} sg0Fp{ P 1 R53!,`6D7 ,2 A]1ʅ7uc   7* 4qu86l Y3TFXB 2Wf);j wy k\3@! 0 :^a3$-73' 1vi=.RW/gdK `b0c7| r Z J*c7r$ŀJTHфJs{/! #0?Pa}2c e')pVpfH +-4g;GgOk0^p60 m@ ya QP)MO*H, ^Pp[)1 QXtgN,9I Qr5m mP)s ,[6T!%s<9=!%4/ . (1=<4v=)&$G rol1*8$6.&0Qq t?g pZGZD1ZvJ * ua "b+F;Psh 9nMa İ 9p)GW,0jt! {)E׵FuFZ'vp"uBt ltV_ӛJwuBCF p Y0R 5\ E6$a8 0 dh%X%5bcacI |i%ي~ZKP bzR XoVbM6v@2 v1nƖi <@0 q  \{# 3<>b;#WJzX.u`q1 r ghPslB(L]X 9@ 7 R iIPB^ @ug"jT`pԹ 73Q0wvmg( @R@$p8Y Հy8 dNZ%3a6D34ARa,mI@dZz0Ő` uV'0 " F࢟߰P ހJ4C?,s"F<`0 46%f0q`|] ` i P&X[q2@b [Ӎo a cy$9c%Z!8}`ʨlZ[ q +pT7Kya{mhGƁT@ F(Qd wA4<UG$,@,Mٲg +3@@t0h F.<b4Sy @ u T*NG qi g3JG !k` |Ӛ 6}꺛v(i|:A?=%b  >J%/\bpIRK *" ׶U\b#Q!A '  r״`(  pɺ07+Y`07l V'B?S}0hERʼnE}` `^hm>! pe 1 '^Ay\y4 `h' R" ѣnc|/Z3"V83=M?@&1k }P: i6۲5d} -T`\0mP7d)]7B ۠*=ʡupiX4@d++oig'oS'l3 [N 6 )Z8J`(h<رs<eG=ڊmScb!C:dZ |##@m5[+cGt+#t#*0 oId@sqdS81"obE\2VPZebm.pّǐNlse,JR#9#bD ͛2aJ$btM `Ҽ5]9pEIQ>yկg<>q&~}E !yfD`D*ł YECH_ٍ+N+aa(VDp !G!@UcHQ gYbG1mnHIb>xH'#Rƈo09VH*0jDDG(y#7ꨣT 9 0 7-` t$[HT^eUP" i,% Fs@W ԐJ*Y`a:NFP,zv\# bp( YFC1VYE:,A `"nnw|롄uW 8! HAX`1H. 9Vm*dE @9oJ^SBGC -@@!~(sYl\T !Z:`w̴L8*IDA>sZZ1oty':I \N0GDa!&DLVlIu& (gJSm0SP_ \ am EF508NU#7@ĖZ`mЯ_w>(zS1E(|`B&` '࡜`Y'G<0^2 -JeV'VXB"(=dt l#lb9a5%#AaobтdD2tZEoR-/\p҉hѕYs+`,B ׈a$@ P$Rd$8KD3*H r(q%0pS?3=@46İ\\ p,B,VA*p` $ 1:wTu+ZRC )!H0P%"oh2S<W]]]))sc-6-mGpӘ¦onR ';FeF FLzQy OE1n! ^bRbU2` *l ̩G**d+,=y j`` B 0H,t |Dd]`+ Ƙм1\8zۑ@<@,@iHp\Pק5!VqY*bh/x( yP5AhH,#rD$H`fH;<* Ia)>zX7TPr+^UP0%n୙R0)c"S"#'\#BgxYOv Oc"VPS]UN F+fLbTqɬ%;j*@3p5LT#XCqRG@+ȡ 5o Hڰ(X#B|{Í' YP xE} 6{i `@*tgEXhuԁs1un{VHe@nŃlEE@D*(~BȢ\LdcJN[5Ǝ #lw b1be?ɕF (69,@ A]0XҒlyxZ0 [l3ЁjX$`) IXrx( 8bF$^Xp+jM{IT';L/}Mpr@\]* PS/4 8KD[,B3_zB{\$ds=謹 @ [m{%" 烾ox2G,B  x3W428%@08"; sx))!D`s: -D U8j;6n{00i0T ʁ 1A~(([X[J("ȡ:68H9b_[<p#؁*YyHcCÝ%VX`RSK$bxѸEH2h6盃J DK(H ($x.ޙ+c $i+``h0d2 p$l?b,P^%84~~aV!q@PktK0 P=@_pg$0@a8 D(C0:xKG~vIkwRh똶ę0Ѕ55\ [JHȏ[8A PI)r:5 PXieXz7(JٰbpĀ)`7A2O1(@ G8Kx>2 x-[KH+I @Zbxi{K`0H҂.5XHlH3偽`Z9"z68 ( (Pb Qap] j!I:  8 Ep 43WPXoN~l0# };lBx3aY 3HxB(04bH\K YDIlz1@I))X.(@6x 1!h*¸K ;K#23y_Q77[I|ؤ hKF1 Eɣ,0I6VS; - jpa - q+K7 {Fq%eXאbQh8SN,Dɓ;D;"oG14}3(*S\DoJZ[} .5Nx9c ol(Xrh9!@i @0Qa{F$TBJ`*#"+"ؐK2q359C nQcpM9R6x xp?9؁87! b0fUqbI6aKZ0e(]Iq#ʇ)x >PaMX`!a>@iy9Y8xA5Hbsµ` ؃/"r*i X(.5Z(10=^砯6H5T#jkPEEWrxSV&X#Qi30z,dJeK2[xy8_J8i62I5_eࢧ@_$[8)H6Ii60B %X p\t"2 D@wƢrTUr!QPё.Ёa3R fMg(d,b ixxqx'YXZ34~2)|"8KCà} z(J)rxx@EIȇ. Q(xq!Xrmc գxjA^*"i#`{M Z`5s:,::u(Klb`:@fKh`68#D1YXo&1 $oHƥ!t1HPB1jpȃ:Q:pF2 .w-@G/%EQFA p>L}b#1leK=B7r(L%@a @X*2'j/}T%DEQ%KD@_fXqRqtH}| cu~y3(ʫDz Q(<%iY0jdO,*+ԫijqaxҌpu+bho`kck@*a#xHo.4jk# 6 8KWؤ2ڱW1J(7pS,77.K818ݳT2Uz~h΁.@Sa(hr GKaX`D k q YI0W`1:X&l (0p(ҤJ#; Ja!28@–,Q!.L.1O`>ސ!#VG+,ZނF%|sO)bW{ 0`b# `[O~3J).2R7sm#ϑMxӟ=}zpN@`+Fȑ%ϥ8z8!NID$!8cB(C,R6c]Bt@Ĭ}ԟmq9}pQDRLB1&)` l>+i2GNBu K`eeT T NAr4LA̵~@$4B>kFQAS&ӀȪp[q 8 '`a*75\vF([<7r7%sSPrw\wG0]r7Z'a7^s x3:A .Ց#a1<wIy`C (7, PHbZb/A U ѱƏI@'ԚAqϤ Ϡ1r1.8{;13瑇bَ [O=: 0܀6*y1h)BQ0da,c糄`{1^cJYH ZuA- 1\|!f!IsF1 _i s#zQmn&/ X9D(& RU\I|_,{ۏK6C`En[,c(RJR ȆTx;,B䌁H\RD5-n g9 @` J  e;MVP `9Rg_6 G6q 9 &0 dZo+aL" "a.V C 9 $ Oؤp5 * 6KӕBMl'aQj Ls ,Ʊ~Ȣ f6L:RA S/040`ao߀Ёi^D,|Nx) 1q9l @2V3P9:[~%c2K߱FtUZDÅyDB ,G< Lp%1%_5]8$H(B"D$+A9hXA `C4 @D^tALef%S*(<*\@L8,rGG $!"AXNP6l%A=BH,HKt g5PPp7R \ LTCC*J5܀Ah@Mq(=K|hL5|Ä_xrp Ew7ƶd|_ʣ3X#L86,߉CP 3f=14B9E5TMht9A`DHTcm`rpXQ3 d4Ă8)˜P]n'ln5PEX,dUQ +LNU|A,$.G D<@ }D.L.<HpAd@|QR?|F,`iLl\bi%S0)(=AplGFq4JX& Q^\B-ն<-l8D?@'(~ $`A䇕.Z{'u$Pբ )@8>eA4 ̀7¸N%Nj[x*A 8H);-*4T xJR&J^= APBIA M@-(KP'[A?, xOb@CslShIAhNp-٠\']rR-`$àer|`A8nK1BPo-. N,d(DJD DU<)d?}BByoA;%֡0a@>HV'Ȉ@|-=ʏAAA 3 _()h\qhrHFVX CLM`+2 Pחְ)D , {Dd1@/!k<0 `ݠ%Q<@ĻMP.= ihm0_V˳xRU]AXB[f\1ibr%BoAdPA@MއNJmHy}A=&mڱ28.ą[j]NQGYB 4FAܧ(@C_p"BsZsRĤW3!"TATBЁ38ڏ܄J!!H)F  DVk1AL'`:+$iA4vbPPM XR = "zH/z*hC~܀6CB#Vij93 `@Vg*W Zh: d8a|I$,ahhb Be7Z =rT b&en V¥Qe 9IIVHE|Y?(,*#ʪ#͊dI ~(@ĩK@ BZbnk/PJ:Bt8Iir]pl邅xzg4 A|zV)^#XXV4h8 `{.|ށp }8c[܊r!m 7:7] 6`GD!Y(8 Aa r RD R!BaȅEil%E.`\hV~JfR$n(JB6X@5*.96|azNPxbOM= “K TrX2$|`?:<Ïe- V gu hVh2뢢&Vi0xC FTQl!臁R^"C]t{M~9B p |N+@_r @T 2 +Z8 PQ /8UDH"xG@*)ДP9Qȡ-Tu0D%uCSAp0a= Dđ VB7JJ>5דX(S"J@ åayr5(B)D>bq?XCE@ҝrp 6d$Ed n?%p `W-6ALpA@WB@6ƳȮH:ڷSD%>я6 RB {bL:|BHXv%ha QaHA ;ȆU7j$H0.AUGh,@e!b(E^8"PHP`<딓'D !7L3 `$p̃ F9Bw2YzR 72֓ը' feA5lq>HpkgE xlRBO 79L8ǁ7P `6aQd Į "]`!sÁ"X ^ e4'U=;Q !'[tt(&hGgZ,BJ àHW`ip+$`? *0 0vQi &P# 8ֱ:9Jp;GBNg8(Jڰ?UXA2 f@ T("MDD 0(Ą1X$H磞emN:J2IwM(#4yM xj (D ahZRݤ"4a *JcljFZd h "Bz\! |AdfZYqS\*UTE~X--֍PS|t┕ eEerA(,s!`G5`eɫrrPb !*6^0HҢC! F<%B dJ75@8225j2j]EUnIFF4jDd5lT>B3tDIVczTo <> NШvz(o椋QB YXA B ZeĂNd !Yb0 azԅl`@Bo1A\a_a `d`# * ?F8 !D.g ($xi"rਸ਼ (t>5<%TvB@Ide X4L~Mp-p q :F `.cZR GH̃e RÐV^$@"/"X+ / q E <*@&Ԃ hHHF ep "#!`foj D7gВHH'"^M)8@a"lԧ +R$Av_@njk 6`X)dW@68), kZm-U|q $p2tINA kgrA܋~"S:jl$6B !ETb!H F=! $odbc ʇX D%:N3+Y/VTXG$Ph*z\ *BΠ :KCjDB`)z\Whx(xdDRajzanH 'h$ga2TNŝ2VjkS&QH2pH4R RXAn" x!6l Veʎ"f"" 0$Vn4{!!rt:&A[F;!X*}|P\h Q'JU!gЅH!`(ob`F&@I=ZEIbCnDA aB8 .!f.J_nBc%jfXf  @ W@-#X!m*$ xJX3 ֪ Al#*u9Kh!iZ"޲z6AjZCD?@=k |#^N)z)<"ʃrq , !o5 0!̰!2 B(jϑr\2G@o\7AL(1 k%T*2[fA  !(reB]HNTWjf-nBz4R(==T:|>Ǡ -m ?`* 1B r! 'D*$@\!LƂx B).:ޘr 2GTuW! 'BHB 2Y+Ú" @jb , C&adBrW\6W=ly}Cr;&\@Zt0,Ӯ -zN"d*.K7Р9{Z.+WQhYuB-{Lz,atnxgM-*: 3\!VX`F,A6 .oF HE %h@ . .#c5>A` s>mTuƌ> ȍoZaފtSpM|> Ǡ,v4C|O svߴCسD5::(,IG!$`րO֠ a A_Wh!4 Yh dZ4:VAcJ53T=V̫"QKz!Rzl,C@ T>a5X B"u8 .o@Q! r evѬW'>" :(S9FF_Y@Ia mhg5t7Cde @A!1ހ@ DmX˂Ʒ4 ,7Pϟ!,N6ġHHHv3c(4 à ޗΣb "/ ޠ=N[AB`O!$R/G%G@i@!"\ () z6aE@$?z4A |޴ PM?-_B#2#ȹ|J}x [EhѦ5/`#a>rz5ȑwC)MQA8`D c1Fcn/|&X30,O>0`f"a ^g  l=V2^fbau)򐗈5yzP&ap\s_(Ej>d"S:bf7h+n(5(󲃐Q[,j@a ! a ERh @O% ]UvMB+r`@^hQ )ȐQ|FDv̙4kڼ3MKpA$$5 p83JxH>d02Gh"Ȥ \}QK$@D; 0bE-FK '*$S5JXUd7 ϼqE'|7ψ1'jg@d+d+Q~uKaP"K~H<MDa kY-l{a@=U@B <]D$!!UN&X pk`A9t@D^@3D-dQN9apw\T<@)3/:xޝh sȁK\*U#[WnƁ+-CHVbPj -߮5ZTQ1*7M  &>-Y6 0C0;%)Џ[ 9l-0@%4iNra (hAL2 Luz!sۥpB"#ϝRN4bA [lCvD&b>Ʃ_7*0"břД`+d 3 `Nzpc39rp"A ] -*/di㰗6(m` 6q"0ƕƒ5e$X,4&U`F &J$r&@ !PZԊCS$CL F*G 򆒰"7/S8${`cWh87|CWް^`@_x  `s3bX@h V, {>d+fi[}+hRlqozo%D"3# ֶЏlb-3 CeR8aX덠 Eo7Xd jjRW?NaD]HLs\8FFX60 2DƬ>BdBI s4[Rы%<[ Ҋn A ˟ZԒ# D6E›IX1w# o^,;-lp P<80=etXÒdr +2 $Z+f SK(TϹ#dr}(J捸K.#ч5a(n7`04 J".ڜu&d@ VHPJR1 WޠGc?$BaK Tq"%]LR` 6}pyjB`Ofld~9$Imx -f0G⮙{hˆd aHE]vADaXPox9'ʑg$VJʏ#@bqت }.|>@ b`d*B\#`$5)H* ^LPhԇ4ecd   RADTg`iHüXE$3% EH?CK!I1\Af iH\ת2M:4nFx rI8)# v a)YE;h=A0wʈ@^y8R(}Ta 'ԁx#.U[גmp{mJ EpRLLP`c>pOT;HAs- R` "5C̘%a(-@`G3 av&` PЬr ؙW&A#ICC+CAd9C$$(Vb01Uji\?]D _U @yQWWh6(A ȍtъƵ-F dcc:.x@ l1QhRP1f G% PgQ2 i! &_!wqQw J3z@SG:p%6 fސV#H2'q;X.—:cE[(2 4Wd $Nq]tn}^0' $ݷQpc=:@" V` y73bl##dn/5 JcAB$l rP6\rU: q$E`CG%%%P'~G@ b >%5 7!l1@:6RDB:8LH7!8 `5P`uIqWX(,p\ pUdP [N Qi'k2g F0P` da ` P !c1pw` O!DWDRx6Z0 g Ā '8'qc1L` rPDQ\iM@@ 3td6$qh  ۀ۰}toB]F"mF"@!Fi&i7!'L`'4t.9/ P:sgp YSO;Qrr/<рEvM@ F'P" #z8c fT"Q1 a}0 W aq w 5}p3\y9#y03`pCsP.# 6*1` WҐґk!>X9Y@! $5Ua'@at:W% ccdp V87@!/M:A=Q.8At}!c(2_2%X`a[AQQX9aCTHU6 C"bP4!3^]² A< u P(┎ H@'&mp %ajjZi hL'@1: YՃAb f#U1m%K=BZMց_m%'pT8A?PxFU D8 h+q93ZP@*'# K* @9VY"5y"rpt IAG0mBR Qd3HS}`tm@'= N3'Lh %@ut tTA)90;p˦1gYEbA@R<&;M/Hk$;4Qe}1@"4a ^ G_M:쳙GP9UidCPxyMa gUBK bGC0- qr1mzU^Q'I!@k1$h,Ph4a@ P tBO(C 9 .4̷(ޡ1[CSi pnu [-ޠ g_]: 7<Ԩ-= v~آ°iԑvB l0  bd [5HjEin3aoQu}G f F h}2'Ptk W skd֏A$sp,8 1P8a\ 8e`[*@>CI`'V3p@ r4fP =U,LYF%QRz$@$+ea|5YP) u !/0/3!;k7qH 2aoqQǸDbhK:/gd&\] pǨLT`NoprS%Lۂ7k$ lIȺt@bUz~Z LܐBnHFB*Z}8`RJ=P `cE tAfn姕%>6r#tz,$o K,0%!jh9䐃 @35W]S!> g6o%=Nx&^EI q b;Ē7e1xjp hlWָdޝP jR_D` 9KL3xL#&%Z 9lRW$J)rMa#qbx0jf:" 20 j% rŗ^Ƙgj:p#%pѥI-h:-PS"%z1Tzі? [ &pٛ;AthIY%N@Ţ %D0$xgI$ ԓg=)$w$"d]a(%~ow.S!*٧PSh;#f^Xo:eKe:,.O|o lF"6kmʁ"rVPxoP#20FZ!%؀*KIB(\%s 7D"8|T̠'EꐅxI #rvQ XN,$3' x rx nAT d0(,/RPgț09'ӭ,2(HCFW⍦l;03졽hP?ۈ&аDDrCHJ?Pjj( aXB;`'\ͥD8 J!f&^QQ'`KMq1zh%T"d@p"0fx%@ԡo!22X8c4+.8\FȂ1qlCډ.a!6rXZW f YODB2e)qB擹Idf3{J#k`3̌mp9`[U&f2ֱD"lCa '$ ͌2B15U<& E1.!=B4<*|Ni_( j 8m @Σ 7`p3P͂(pHzcI7؏DZq `x66mAy&\qæ +Hq(9 AǨ$Xנ4;(0W [6i # pKɛ q;* p9װKS/eH<@'H:0뻄K16]hXy=]ea3D 9ڲ''BDxI*D'cX+@4q,$XI(qXSEЇm?ĕ* 3D4W닭_z <>8Dn@ ),$Y*B}M 7$5A~ PHu)IHV`U;' 7qPFYi!E4Dj<{R=Y:p /`*K lzGZqxZXyJbXcg!IH33A"j0x!8E8)a`!7nt 3 +6x-3 < #2c8#X5P(&"7H)0 ,B'ŐHāY)pԂ>xoLH"*B783( tx­YND ȁ5( [٨ ` o3V@a(@Ftd@N88vA; ** () XJ4#! ]IQ2ZKKx h {@b(ȣ0 0@ 2P P"1u'Q"LLx ĥJi"P`Lq ,"Xo Mtn @){wB܄K0بĔ'6蟸cW  xYArHJqȚl;H@ cп68C`;c K f[p'CY C$15)^ч#Mh3M#Px0& I#Ȍ0 xW B"p(GjB39Hy(yAƨ%_a m cp.  aRh[y BLN!j j W!&6  oP..XF%kbG ɑM4}3R5لՂ 9{ *1Jj3ד2nH #Hna B5_fa z Y80T0-QXȤUr$)qw9s]?(~yx ЅA-_^j Ƅ-YL 9;X! p18r)r`! _"05Iiz  6ډ!"Fj`lhC9?. (#}`E_c` be5Ec96(`:?DQY %09>^Gխ7H![X^pXh!!B UX{ %>X;Zrh:ط/5l0WxD^M 0'aI`_XZ8ZHl\s~T&lP0pfb Y u$6XxTH{M6``i<+&m g-; bwHeU!P{;eɏ^"PXy) x<Vr0ߎmhs5kmmqaX F (((5PPg[(0X"0@=*ȋ ؑX;cxCRZ_̠y uҍ7~ja9 Rf'xH>^"`:Mhȑ:BpP<Rg(*> zBL,C۴cxZ胧62$$>+o3 qJoRq-`73`7^piLOգȒ 8F3l]@=cI@iTAZ%A1`b.`v% 0)va:(5^xn@n!U>Skd`3 0v6û` 阃mPFN{n-W켗[?A)qGH )\Y@8(,1Ϗ Y&K犋I=98Z0MO !~@7(+ڰZ ^0q2_A5X 7 ÆB(q"Es1wE[p܉V@L*1 ( A"@LA--iH$Bp @C9d"N\$t"DB9@[!s*Xevض YU(RFAnFNP P UA 8F?d@}, 7 t ,0dA(d)6CxY3~ aihCo#0Dr Ue2TAg6$xSc3D3\!![)Cxs1'TIH]`\Ќ2$q3`Tv ^KU (> ! 2aP++Ch᠁UY`F8 I8["]ADV prD|6Dm#K^0(E +@Xwb, 09!< ZGq@4V!)@FFL5i" m|cxAv` k;ؠ%65K,uxFA4ACL/L_ ~l ˾%R*IΨЋh\0V(Lw'!m`5?@pr7cMGmXn!3 /otH-9 i sBБ 7jXഁ@XaS$K8"2 [0dh9tp _D ~jv8 'iSz byI:0c-tw4x 6xis\ȉQP=>ؗ K- ԉiJ:B4t*=V#*IKブЀfH\ۍq #LgM$}C-h-qZke%c'dM5ȏ9p+K 2Cx_g\()A -[0Ză%҅.BA+b"wr* Q%G!Qx#;o!y3j_ ]0m%@A!Mg´[sm1L)O$. ɕRH14## ] |<5F8R*H7L"LVA#` ưt aGS 7u r I \("h@hB RqCP ڀ(rap '. ڠsȐvz 6K Vm%E'< r Croov u?yV@##XGWg ' ư4t YZVhw 0i` !wN_((RU T#-+eIuDs5RJ2F 0Rm5 T<ɳh2@A`u 5%5I2/e03'I^k"B 1 /i^:;v D 0lJ`U7' VTJc^ ]tE?%xvN /KPZy[Y5X,QBC-e @0" Ew 2@w1!taw`n1,*x+qC=2pS$ Ƞ ZiOE 8Xt:݆(d8ELdA)IА ODRc)@-F G'vÆ ̗iiJ<s`$)VAb@-$t Jc p P lU,@ ]0` VZ=e9%q ] ,!$qZ$TOÁ5$"°0 PXUbZբzP[*FX-$dEE AN`2@ 4scsѧZGPI*%5B b 'p :|*bG%Dnߐij<< U Rk:R'i/ ]q-Ƃ=,:B3DBH(`mBZsش4)L7" J6J[E"^-z2 {O'; o bv f P€ĠZrҢdSΤ}`0{$Xa-ǻAlWsp{ mp$&x%Oz nM0 'C06&$],JJL2yrRT3Ȉb 5yxs$*ZĊE^ 'A ͤ{r$` 'rAavpA0R'ELݻT{N\e̙5oܙh/BO\4{$|_u7ZÀseוxdHmP XkIRxoZI1Kj?%#,yi" J@a)fvj!nhC&[!iŔ%XL2@L$8q>IO=`(HE,(yFVZ@n9p9+o|nRUUi1"0S0bV[lI|P UKM^wvXb9b% @(C@xHP~-tK\HR\70ZI⚔oЉ6o9-Pn௕D "8#I. iwŲ.d7V@D`6(D&07 t"O>V,}HYi"[A,a"{)bYgezF Fa@!!in K OIq9ћ?u  hOt K2"Fb9<+KHfK$X_#Ono䘣c>Dӝ,~`N.6l'W`cZN~0 Q2bF9 $ X|h %8 %Lĥ `njHP$]iU r  zB64<8Kv}(8 ^Ȏ9!R8@rF( Dj6.HUWKACժhTĬOc|I05bEF!h@ hՊq/5Q"o(9QP!84JqPENrDGY>ŀw{i*!!M(F^搂9XzЅa?"Ɋua@8=#\C#(@Kpp,  FKRFC}yUE?>l%|C"°C-@C@ǁ3l*+gMVKMqˑ$B1&Rײz<|h`+jFz2" sfUYIzU(C@Y #Ijxq ~JX$,umx 9+0]OzQXD9 (œXK\Bs"B0GZ'^e+4bsX1U<G K\QbѐvOX+,h1INV`Z(\(”[º`  Y:Eb[Z˸C9N:1y'3p/9q< xX-"*Rɻ2ٌ1@I -}/-c2ݡwmӲW[yg#-p@!8З  X鵬'VH@p0pAhMvp\\H5؀ZeF@.V)Rx ;y+s(L-hښf'z9`ӪՌAWIRFixHx KO0A[w- [|5T%\QZ@./ ̗xH`M~0U܂8D8ЃH#|U:Q Y ֊KֶंiuhM \,4G)0х% cxP%$vi)SbӋVc_Y`c MdXy@Z. <!-pEh/p2hM% .L%R.IҵQ=9`?-Sg|^;ЂAz KX*D |K)Dg! ݀ЉSȳzqxm! I]H 6r*Rt 6hZ(~cxERM^I`.8C1B^N(;xdmt(p 4 +&^=r jDZ1^fdz{/g: K04c8OA$q"lY)HG- T\ؼt&ʚre@hBLT.& 7-.3!=T,NHN8DUTxJhZ@r#(忹b D" '*:" SO/pgHk0^O)x$K0\01i0꩕rԯ[S ª# 1zB5'!Xpܸ.`p2ՃXki1aD8})A@ ;8;@WM^ڤqNEt *%`pa[=4bG"21Z g]R!*8#≤,bKr+jځ3& Bk ҪȚ̸^X`;ޮ Voh fB4z vHb {pID2b%9j㎎y,yC$+1ӉH# _(X: "0ЁoiCK5|9:46UQ0$b)oP k 1 w83+?dLoHs2ҭ>SS$w6{ I](G=&ƨe n͂ ^!!A DVx0ɡ[5!5*[C➉QuegvbWXv啶2wɘ˺/O볡ٗ$q="hZ1I4u(8p\]faM:%VOh~Z18]45 sh0 ?{gpjruFHyUTӲ q|& /> kg/+@"C+3M(m(Q102MT=*$׿-`!=a-Ͻ]K[bD*xQ$J?;ٺ$Hc8s,0Vp7-1Z`)lٚ9Yc A`&:¦Bb,#Ȑ"G,i$ʔ*WLrG\,gTr$)(@4~jm0`j +pjuISQ7Zvx4fLQ  LK|Q7ب%rV`޼9c]al0Lx&ll#1b9FВ9GurkYcc(PǓ')ʥQ@b+>$qfYO.Z.\UFFupRJFvhQMF d] d [3e7A%4L`L+2OF&!Hd8A[" %gy%` BrGdt`>g$=|7(f]HZѢWIH ;M' -?Y0D[ v_]씢 HtR"JR@<ziEX H 90@Uc`q'?0+3;~2eᙓL ?21sf gp=\qHGCYs0(I㒣kvdT 6x#;4KhSʦZUKp z B@bF,Hf?bP+;MHz,qrE`=]1Q = *ԓP0. 7 9XľOUA)mo VLB}D ZآMs .;j t*S+R$tB5d FHJٔ(a;VXdÝ@|P]]G4)ZaX6D1S {V aJHyRx#d! 9 "ӊgEk ] 8ōG90)N Ɔ:Q9GEH10k #aF/S{&c? 9ߧ T T.cUX5*EW?~ & *uX@ 4쬮@T"d.= }~dQ,EUB:;\RD)&}VN-A$B?Bb,nPHPsf' vMaN1%N"C _-D\ETp2 DN +N's)#\c;zNYF4NcDpxL C` STh)|XaHX䮐F"P`S4'"VZ\[H+Cae eI]g,Iu\1< $^c*}nE\Tl/.D-jpeu F_Qq(0$#y +O ~2}f7A@`02h%xJFO8?B ${%쮽 2_A8,CL5TKR0EƬHAL.[-tQ S8 q= ]G/i+CoL Bȗ(]$SF$3wUOf!NaRm)@lUR%L?(n*ۇ-^wXn։B78vy0rF CS :0:jix AѦсM\xHXH,kϠ CF?p H@a~]}Lͭ8H)F,o6uB9,d*,H`Fe,.oL(cA`DPFRҾ`-rXRȷ0}XFTu()bHG@%g'|D# 8dc#J0tn&, tHHhŇ1`ZIUO(6kFAH:<3#jDOyFx1dcF- % 1lSE CgtMSC@ ȋ.-Fu %uQ`I%b)*t~ϹxD"'\CFH'|Dwʈ5U*[(zIPV ]11XdݩHDE?0u?q2'WNŝL`erM@"sKk*`q&.htxdDIblB]\P@BnF0CF`O2NeH}UrEFF}BTem?0)ƾs O؁>H-N4GЇ@B"<Y"5IlScx*H.xCAhk<\d7p.,P8ɿt.%Iɢ0nFaד!dD4dD$=8|2ya5rrI*BetN/lR9d Wʇ`aOT A  4A `?=2  p.R @Ixa=`Z3G 8铥V &c۷FnaSL[rN9R֬YVz+,l\sֵ{\( :[޻W e$#G 2Y#X˘/'eWp fZdG[` .b+hgwƎM jB6swX ;lmN ֧IZAC}3R&0K0R G,췂7#1[.909.+EvKXKM<ES p!E UaEVĀ w9 1(AZY ʃ#Wn+ bDJh $"33hAJHT-I Oc+XHO I@f1B*h9 V8>G x>H9<+Bb #0-IIf` :!yDa(S *[ªLr2č Fee/(z%z.ͮOQiF0b';w]3 --4V&)ң~] " s?z83ʶhbyHv擱P@+4QBjcf]#jpYw4C6ҫ)Q!^ ɨive 6ڂ:x:#jwp{Xʬs\rD2! N+8#N'} qAyCӜ# <U؁$Z?qSP41VdApLLPcMp!K@J3jV229xhH91 ҉8 241 Ekn#tTҜ^ .G݆ <@| ؂0n $xJA6bC}9DRL{0 3I#x1f!.QiPh~Y,@YPFꐅ "Rh [U!Մ'\giW AhFB嘄?/+R`P `%),MӣE2Td{) \$2D _ *&=GVhTHLZR , 07P0-(7>u'.a Ly.a#WԣaCfA8 ,5(HD$hpgF1D'=@Ih`-:LAB( FgF0:&61dd砂?p bl4 # J0sVaȨ R!I`#t><S`M ~<,algѝbe\ JY$w(bFFQ QLX^ 0B pi"M kK1E B0 0(6sՑ* Llb#pӸcAV ٰzˈ6NpnNba(nPe-`)6X `T٩эbTns؁[^kCGp-ۏD[c cͪKAʐxqO2(ۃP#'M]PilZ sd3Z?DaW#? $HѾ!>8J—xdq 4` 207"z-ܭ4(@DZһ(5."Ule `)8g ᖰpZp?G&:4cav2U,u2svPX#좂68Fb؞0Za9||1p. J 2\ ⏈&zO Rd8BW aa l!3d=.߸,a'e \۹iYKH\PU%ȯ@hAE֨F8E Fx^dlF$bb"a`l{$ TP܂0l.&d1MF8!Š11 tb x1 ZZ‹ 39Q+xa蘶2 6U/eX;#V-ߎV'hA !DoV> Ϡ2 .DN ,!I\dPM. (>0f{J  !48@8m,͋ b.@ 2 d.HW"Vj S% >!dvR *jA?A‹,Aj˼B R''8p+e ʠ4&Ds28A "0qaz  ` b*xx8~ N#6qedUC0h,~'+ +"-$#CC'8dB"y~L:Fopb B":V1#|@$2#0 (3Bs8,}NPA p5Tf(T -M_F Bɋ:Z!ր< sj!և r(fBPA`\C殼3 ,‰':䫨Hvbq'*`  6 J}xA //fb8&Q1A̞HK,( )͋X/ *<+mz) ,̦J^0>4`&#kpAQLM7@h JVN5Jd" ad¸@X^/> tV5&! TSTud ~i`0Wt\ m"qV0> y\3# @`]@ 6LXHDLM۴ x`È r %K$*&Aon A@72 <-MOeTuf x! #znn0[ /8NGr@Q+R~?ZG'lrhx/4%c 뚲Fߌkc2U8=!XGm) , W n!2{ c#HsK%^3"HdxGO6| nJdE\h ЮNܪ NJ1o JbX yA^A7*&(b)ڵox@ NNW7x|K}brWnenb ag@(,a&΃@5J !/%o5(3#4q398q"<1tq094x{,* `?"Z #@%QTUtQ&&j 2URb3-g %El'XZcA)9e"KO `gyz8M٦S92KH6!'w0,)k2k pƏʔnjէ ůP `[ f0: JɊa@6n hAÒ^D[A+ oecfrC Rvk? (dNiEYW-Ģw4҂X@Za'Y N"0@ .HY:0/x 1^so{ cq0x:S  % $5.X2z{tfpōv[u[T ̰e**Hb <͸o@"R5fh< d6xęH3!*RfJe)d>'FQ;3;WNlŵ"cCHqZg|V!,Ƀܾy !ס,0#*QqɀC' b'Ko@Kp-; @^ 67/2 ]O=/]}N!D"xzC! T)aAa" _RcHMK JRu TSS %ID)n`ų pMf l!j3s,JfS3"Jx+NZ Ȍ{ E(~`<-5!8mnLo9/ yɼ>; (&v̏ h ?aBZbh *uiW-TY (`zҺwfH[2B .py+w,7n =H#HQbG惄)XUrƯu?GBGzFbII`J<H ,57r H&l:/r~99Ո~FbMW\6`O0"@=Z9\"q>44)Qb&=77r#NCaC?m{N8!gxxe Xπo-A7.]Hb P. p$%U'K@"W(QPtF球UA'Bhh"Wv"q0v'1_hb2C4QIru2%Uʧjg3sLV0sb/Ju(eu zLpbu-h :X``%r5ds14#^5(q7I3Ncm`P 9Jv灱( I1ptixpByĸ:g.NvuNqFh t\%QAR!1"K{qgr64DC `b_5|'gP`&U3y!XQa#q0qRBTrp^(0 _ 2PXԀdlWbv>5dp`2?` ံv`!7aCځ% {O [._5"E W Q3p*o'!N E0"v>q9WQPWA1"4 @$e@s'ai Y#;C6+cc` u` Аa2` |vyaA4$`0TطpF=1(Y'k@0YifDY9[ΓLPZx ,BWIL! /!.5ؐ'=jdUUWqBHvh1\RN4`}'`H%K`'4\;#il`=tr>!dH R- YraHz'^0&xxY6wJuY %q4Yx*A 3 ,8a [eF`xF"8ta=Q/)U{Ռp2!*RP!'']`#SWDÖφ |U'3p^L;A4iJU*Gct 20đSL)&5 1g)4CpY9C1Ys3 e={0 CѦq ?p΀ Pf5n3.BXFQ1JkQW`jFBIJQ &ˌJ'70E iP{5(A2i+R2a_s(LTSY'ЬtkX^Au r SĤtLtѴҳE* \M.yX{40%5,an  ; @H Z @9*2uvqQBaHaG/vsv;Lq$v0Q!w ڳ^`5E2a>A2T$3>Koۏi_Q֟0 JJ:tCVb KʠVp `G V'q뼽)vCd.dAwvC`00FQ4=<8_Y@ B eUA ܐxOϐD^fjEsa3u 7G5G.<F,FIF!$c#= g~g#'|R|ҫD'S(AP2#`r@ 2#<;r'œ{YU`#TS ZCrot$` dIЫu'P6C¡ġX4A7H0Я)X,AI$< [/܁M1P9 U)fk#QpKm49gWRոEG:vyCF9a{5f|*&_rVR(alS|e LgOe03 SS Y6rpLbg[C buw|U&|o P(@Uv@H4T2H{2$kdm8ǂe !4 {$RlL!< [D&4#& v ZUPrLB!rjeA>e221J4s @PQ} rc ]a56 I0 qlPuwlpm>L%S 7=)X0H X{Ht2XP]wuuA[ Zxy | <7BP ",RDzFWy]f<3"I3nF1Eq}`d4#Uzl ʳ `>~KHG[2V2 b&D]2Q)Z]+&L!|6PR$P qbZ?PE^܏h@цxFFʕrr6?Hկկ%\R2~޺l [էHn+q dZe30@e @ -\xО1 A khBhU=;pS]m0>`m7FCUQJSE 31i=Tc1I{r𶌱>zy$Jţ]01{Ļ(rpbpb 2E B'O g^D0 Gp* ws%E&S5f  eQ R!'e ^0.JwI tAG=qF $˃ R[&Cg}Vk(>;i|2ŷ)AISAI-LG p#3+e0g2|Nh(UY!VK.y -d<' o?&BƛPA j¥BYPx U.jBPoL$T䁇#cb @x0c4L9д,[ d12kl=R4 }@2x )J-RI'47e&B|hPċ*&ڃ FRbX&aQFVYBB~o";>;S?&2pb&"d #,1Gi+-p3K6Z >i cCs΅`69 c8n, `0cl1=ma=t 44b$L.*%lx)Np*r da"Y ,$`ej #FQY&ZI@0|ʠxώ8g>OB0V2e颁|"T.lv:8XOpM?ɈVFj%~3l&=Z!HŌ.&q,qv} 6` vJltT?ľY&Brxސ P0a5#xLP jj{Qk].{=s66;y@8-A> `o}˂%RuV``"$-f3Ia tr]n>PL>̺ɵH D`M9Jh..A>})"BLG=;Apa9B`@$og% cH&B#DcRp p"_+]`@at5` 19.OC1ySӴ9LkXTSCcP 'N@5Ql8ORn0##ռ'/2EL,XC>$ * @ *{#x6+s9x6bKz2dr6c4M29I%A60D_LP7^CR J<(%0g>V^BO#DH&id%a` \"a}d16 w걉taЅf 8M0@,`4ձ$ NAB4l|CQӴg+ yf8" %t,(!BCM30uN1*AHGp`G*rއ&q@11IA&y"+y_9kw$<-R!1iUVӻAr'1?hB Š 0#Ťb.Qz%Bd/}1#4nH8ScԘ H5rA 9 ڼW" x |1 B81$8DA'n Hܛ{OMS9=k"Řxp^4bp(j#Ah\rX GƟÿBy I<'xH`,%+0YJaZŌ81] e .$!,VNq%TGiX\ZHNB2«Vw @N/ cVPZ!DʬDfz`_[D4%U xpE XBɥtGp rI+GFyv#P<X(7 qM|[h<*ȣxan@ 0q$m1hč D."15QFQ<7\:->?z\'v?IQ2mu1' 藌誐0)YcU*%#V#<C; ԟQsS`1pуP08QȹHj 02BC,{ =k҇Mֻ7}@uڢBГ2P!Zh/kTA .ha@9>c )P8hItXnCS="K| /ۈȶgE$Aqp؈kQAiw Kx@YA0 aF؊CA= P:mPP⁣Yo8(B!<ЋMH}p{{Ӡ)+J/Pz>ȇ‚]8y~0~~ -/(+•@0Y. K?Ω1hDKCй܏)OkA4mPXD81qH9/)健o8#h;h|Ǝ9ȳ ^ЂE\x9kc)8%Sy pxHPP) .LZ_y(=>YhMV+!OYکb@gH1/؉l/=?3lijSM,gtg97\)MK"(1M+HFb(A4NDkцbFJtP^𮦕~5驫5Kb }؃(؀0q WY)(0 &H "օ+ÉMuu؜sg(6[mOAwh!ȇIXdpCcWXEᜠkX:ΑSIc9)yD cq9*с#OX]D8O}D9PCp3KhyqB9 6Vb .m8[GQ?p!L@9@9(݋+8RIX:8+䈾9V(L ۉgAN(Yj:iAFCӋ.9;Xe9NF51@FZ{O-0O)chqQ lHE~Qx3Nxhq7 3ɛ(_a,hmHBguX"KP+[ȂM6` !!͋P"C0<{wQ  ,I:cOl#b%O3"8k ĝp9Fc܏3K)l3FXFrƢzPŢM3edP-<Øц3.UMZ _R`E8au%  H+Xg$_1 ONu*df((;E@POP F4JthX9yEI[K%Y";mЃ?HKyn4?-QÏ` L7& јk2~D!eSP $`oʂ='H z\o'`yy( C!0p>7Ȑ9OgF:"sIXOARpC X+O%{3U7d$9fy&.`FhC-Alp'iYFmBTu]%V QYoIl$r @=W@t /PB @(FDiZl*|3ҀGl->6Uq"J4s!x5i-V%P_T{TUbVEu$Cm<4C@P-NE.&bZ |z0Xo1vUcbPԩ) l杔Ō9tNy/.sVd94TxZ#,6Kp}(e_^e]dĕƀ_~X FsN: h?PHOCEC! C  0,s5!"@9EE3p O`å 5soPtNoDaR`lGYuJ)_d|YpQlL]g~w `G) xz؄iԱ/be;Aih{`0Ѽ! o0`\ЂPcpc0!XF((p+Cb;qCnlasBTWP#=HDB+/0hKY`cq0MWT!#ocN[Kjf?Y2Y,i/2 9qڃ;\UYR(qe,!0z .3=@}|ט?opE\aF-搂 ؆+\3&7,(XB԰-sD;\'bZ 11JX!TA,:F Bo!e\eo7b!sޤ.=b(ADw$Il2 Λ| (cZ4Oa#-\ 쀆\ Ueb@C+ }pX#7 o0F?\Dn9C6m`J7M4Y"$0! ܲ54 mK*963*'er!7^$x9$\<b`oYm>1wP#}p5N( 5p!2Q0h;fAԖ KEc߁ĒG N{VR+cLF~itWR8w Ŝo\%Y}({_?>pXu c)P6j-B#G&b}c4 &8D)-9XnC WQ83$ nUҫ#@m7\$sE F w).&' s;@?lcɁM9  sf,l `u*bDҋ  `R1ƍ "1\ d2e @rIBd yrB&T7тJ 1ޠMNE|I\R~?uh08םY'F%X8}1 YpoC\ ¶8pu@<@`%BB` YCX9H ^Xgx&]:)HAH" @%Ȃ45H@6̪ .Ai@PrN AACj,C 0ňL D$6ѾcoC-#Vğ” *.j8D] BRJn edɁkLĢ"Ǫ8SX XJSHCi!.pLT[ C+(Cdkd`dAu2T,֙` ġnE_l(b*fP7O eC5 aMrGe$f2!jQ4G,6cŴiiI$/@6.=J8F"4$>r -y^}aJ&ɡ7|66pMmw:~2uIbRݢ>t xC`>D0%zA>|^%X 6qU&  ȍO ,tqcE6UX@$ nθl*  0R4Go IfӤFm_3ֈQhaNɜ6- pFwlpUI1Gn |8x9/eVkد¹Cp@3ɂ+4y\-Wg`U[@ +̥2 * f 5Ȣ%h}W&A}" C)h/ sC-{QFeo4G&Q*τ8Ex2pȜfAJk g/cCD&qIf\%p9 |[//׿f+6&@\rL2I2/pCPP%-XKKNl%@>;Ddy+6lwaX``Tg(9Vܶ"hM6Ha(NK!nʧ&䨥#K#RƒM!-( a pĮq+D 2Epjg1pùӴHb+ɀ+4^\E \P̓<" M`smsdz "OBhb^h.@ss;䔃M)& 8gcq H10"aaa&e XL dv vhCQ [ W,#yD{:1v !lQ~9S5xښL55"\hMHc;@ 5>8cyJ[DxJӴ6HTch9m>e<3+7A{+.c>(bMkf%q%1!¦zBl"7qx %(Jqh|YH^b HZ&F!՚0~  :94X;;A˴3Cn0;ɊALLkH7˹!s JqVZ=o 䘟)M7` 9fE1Ρ,F6!(@%0SV@`i$ff_9\,h.@ gț>.ADVC|%mk 6Qj79ʟX0UdJqm<,9ȷ(JZLu"bK͇s gR7@q!1@c;)>"Oan(T-G:Ɏ T83 1JKU f 7mP%Ţ A~"A6!&`8A$4Tr% 6tk)OnB6剩V Խ3GF52 B @PYJ D- Cc%X lqQ!J7A$jf If2ҦD,23dJsҊvɁ7%*Jd#b6K8ހ ꋮb c@aYWċe8\>*@0p"Ā\vZB)~pS,I5dTL,]1\_)rm4{ 嚓*"9EuVNC" @f8@-r1n QY@~F;wИ ^0>)Iz LQIY! yEʢ€E"&: 1 r̨B $B }j-uぜ#ƞU@` D& YKPQU]J4 !fWlo?ǰ"@h|.`Z1e?!~xMO 'A {˲kJFp4Y0\a-rs"fkp?8!G?/y$m Wf]?r:䱧zFżU d6C C@:)ȉ #=Fs87٪U7hbuuh97~ *P m: dI q)2rB0R@)w%t|p& bG ,@Re>k>@B"!/P:AF"yf4E L&aMٶ xA4l@ !n&AD< \@ed>d 6\! b$A@_z !Far&F dmlA&& om z$I $"Ep ,Z=c' bm.hɌc;p~1 !b2 !+#ۼ $ŀ 5 Zqܲm{T ^ b@*C P4X+" n 媂i +"pq#r` A_BaHpĀX xDZt"Q vp "$$"L1+ Ԍ_,N,Un>(&>:4bvjO.*%"F+!0j-(EOx`h J$~2Ƙ4p2n=d0  pa?~e?Z"h$ m .upW0a#. >p2תinA@A% H3l2@f촠g,ez N'bt&z%R P`%QR!xQyH ! . ND*:0("b.VȣAJ :ddAjJ AA q¯ 6FE`"W^`#`@5NB0 d P\Ol Uݴi:H,C(B:c$@&I N K4 yȚL|A35@2*Gpk@h=,ATN6g`ö (!Uq&3"00` `&!HfAD(Ee\a(GGof`x*$U! ,1Dowxh@@͏#6M]PS33EJMr(eet!x+k{b)KbTacKVneNChlСrAR2*eGD^5d݄O I%`Td jDU@E@ !VaJ& b  8,E%[¤uA82ö>! Iq瘔W oK4!\솠,n,c2h= "ƐG4HPR`s3W4Z y.V XuF`A0S\Ρ܄0RuO(@B/>x 2 A)J 4R &0`'bU 0` K] Nh6k`)ee(ږut p0΀RBbae,L"bC.xQ L On8#t>CQ( Xtr=ħaz&m VA TF( d< `SRqOy"o6g%wTj]U _>CuhNk} ! )rt<$EsYB2kemX qt@1,P*J&:!hydnR!M2P1Mj=F0!5aa1z`d(s2=PJ&! ;2C*eAіSk>#exF+o```섀6`dqpSaf@BX@B iE f@ r(  ךډ' 1u(r ށ@ &@ `PY4T&NKM3#b"U(#`s3teOȮ!k Ԓ  Bę@&KN͂,` bqێS!*uT48 %*Pb6oqI'Ap*Qo+gu l  !}?!\A`B`- kg@A`|-$BB!Hw6pG aV @ΣR6+\8!Y&M!bQjK`\2PFJxK'Da%WQbp! ΢ ,xxFt::8v6 b2am僦7Œ@1 *9p( Չʡ &u"`F^T4a`i.++R$`r l $|؀oARZ&QjqDQ9 f_I4M8,NZe7>-ctG0) @c֙P"\ I.iϤp(Wr1yRK˞˨=YR$=Yr!?Ta3€0[o`Y h  F,"\'(᜶5A`"]F! z0OpX`L 5Ų,'ڏPPA({ftYL!xhг-3 οřdD~!L~`C1>t<@ss+P}v!  ySr  %\c"*CNV@}j=[2{/ &E`b㶢kM:~B~! $W]U2s"\cA*BO!7G27+&hgYO+VbaZabc1Ϛ>bG12m(`~C ʆP'4ʁm/=kNx!n72x@UI]0``ʡ!v{hD҈ib}Vb, ~)[IÇ#JHbEXh#DZ8,@2v4i' r!(-ts)`'Pl`9ǃm"t1b,Bn@6|0hX1CCU6sK1R%4X"mhhGdQA(! 9]u>6'0[{l)WN!@o0 @%p@KED!686{ϿDJB.' DA@ē@XP  4B(# CT<%l?Zk?Ռ2pC+^5' ceQ9Ϡ#\0?@}MZX? `wQ(%"(`ܐ 5emC3VqZ\2 * BktI21@Dw^'09#@ '#A?m#Ch^~3R`}@yh-;#jeTT)1B"{X" w,<2PĜjI8IK>0CpwTH-A& s dPߖ-AFKPn\X! JL S4.2toOTU6ŀH9 }Z<Շ؉ʱ>цXzVI$dpG!F HI9XP 9A30y6P~ ztFA8՘^<+ L!@^P j2Tf 4bRr%,6kopI`ctQ]T{1ZT 5Jb 9`g1x0%Sf41dJ MKB^UxpmI* '.! FЇ%@ #DV +a X7pY3 O/ gU`) |1(K!"ێ(a!D~jȞZ SPCY%3K ހ $qx4$:LdèTpOwE,c%o#,d '1w_. k S.KQSFj&`:7!rސX9d,I:̕K~)h)Fk2^xc IJ M8)`69bPk-b &g 0  "p8JL$]#VēhH$ 8*dx%G ,@(|7"Y$?1 H  w [͒ "lXH;  DF #CTn$_rcI`#ec#XBdS%H0G_E"`A7xIU(ɋ=po&ʧ{8~xI|Q!utՅ1f';'3sQ:kxuRT8CM76^;D--*P* d)Qg$UIVO|9D|'jY3}e>K_#CmV )@fb 1b1l7OX6:`p}РTk)-a8 WȢpuXTBƙNHN$ 1o/"p/D0phU!9ed46d.[!* €.wֳD$4٦^هM#+cLt'fW$M%rp#7SK籁<Ȗ0T,x:p,U.(Mfq1 tI!M  pt[֙B/t pu6ytz TIPn] B$ Y$vs. qM}X q^@ U 0cg` 0H} B -3 -2-ہ ,0U k 2V 2  u`M(ܔQBOBXD2MF2@XaLl >DMW_>v )D|W&K!2CM$nr QYEia 3AR(Re @1BK/ 0DsNv `g3gC`#bgP` 0+q 2 ]ZXI V55ypP9kDw. 8"+d _spH -XT@ H5-f @_w^D9P9' Xo`+Q P 77⠅J7 $ 7P hHz#[D$|Eo{7?&qeY|D6?eCx)RYxc#i!fML 07KP(. ufs7sUs&e #B/ 2 QTU0Fq,01a0fE,zgCP` `S) QBFG e,@ kU3,eMMPIa 0"a{ ư6XH hX a c1Gd 4?KXc?)eXp%d T_G@dL=R 'JKXgYK7ӊN  fB<7s % 4v$Su 9 ]Q PUA0U2 8X# I Ա ΐ x f klF/yĂ@SwyG0pG E pp]` k H|~n Ű6 2( 1`dMpL41 )p FॗxsrJ${K2 h c1% )QiAڐ)u)K"jh@  y8. @sE PV52VYӕujQ -*Va4хo uj P9$ ]2^aF@ B}0`P` |bif ZY$|$rC)`)@? kqVġ{ m)lf_ L + pj鬊 ߊ0 b)0 hI'Z<ϑYjaW'JHrDH`8 c0m6SzWxye{*T(.m aQDEð;lb%冗R?,@c j&"Gc0TZBcm&0 k)K7 W_Ap r 7{! h = 0u @  I-;:y<. <,D#ʀ P9!Ip+aTݜSqg pl' ! @:: p7-+2 aQfI@8!ػ2 0" :5XnS;@X 2!Sp61Xxd {))OfmTkYV {'LK`'O*ǓKq(M)Ԁ i7Ob~Հ I ozzy. ؈FQWy"C3ж 4C >Ɛ3}a 0 b@ `%ۂ=] 90  !Q֖AC}2 B@> U{f:cnHl>Hg }P1c 4%<["WYfb5)ky贆hl ȧ󇙅:nCp0v6O5g|.P"[[ 5 AG`!0_iuP9 "`.RWb~98 Tĭ?91 R:  R .M8ID l*Vف$сUSybyēÀ@ç{i Ob :45 ;$ZbĈ#sZ}`o~k o,}A|t0m$UB9/]s[r6^Q`sP~O'7a IQoެ9@V]f& V$Mp@yB҅E|I a( $Eb^^Jf+VGL=zKhiҦQ@Ϧ]mܹs{vr8p@^ap!Q`|â?; gދ|M$2`6$0O) Zd?,I5雜Vx#Ky ;hr/#0!㓨#q%hApR(*jj$ZC+qn00EebBe@#` l ha!6>Bf8aDt>-FG/#^9]q@(mTR{;V(':,#f8Y;8`R+$8p )$ M$Jo1O[xÁpɣ9)ʦhoi2O@v(~*0jrɩ`檝)MSL%{Ղ.)Ipv%q#D -3d@τ!F$* .aVgU d* sc79!,};fX)"95sC$4`L颐 YC,p(-&@ XX*b .!C'9>s!ۈAi[xr>!O?"9 EdB b1*Ѐ@! K \z~@ .`P@B"_Ɣ`LBP':ԙ(gn:sgЁ@( #1@.hwU?$B@"vj\E0 @>ŀ`*XQXNZ #ͱ %BE[K2VX׿HFFD"F lFB q97P>asÄ.q##s, O_j .(,!o r0$<*AK(,LFA@S&ڌ;%&bԙ7$D!C"uȘDCbD貄UA|" P%(H5`$l ڨ p(l>&oJB0ewH;`E\"jE.| [-Z+P)@8dFk@2%8# 9pqcD^+RJYA8R/87qOT P$.DZEhfIxy# F5wTc/ST;Nh$3@N,$ ` 9G&萣R*4r3!I$S\AA! #JK KG;bSf2t:L%N;rJ kRu*,$q!X B0#BnOn# W+2/ JAlH|ҔT XH1bPň  "@Z 7A FB EΙBh h)aKL"@ j$ BHD|DpG1RTo8(`]@3iKl^P6oY/α[vyY7xKu*Ա(Zj9N)`3A'#j4^)PpyA9HzK&#ld! ;I P1K8$ro(ov@goAI9FNc%,vl^ICV88<.Y`GM‚W"ټ N 6libibh0H}8 ܶqdqpgvR8)$ `'j"N"3$TPZoG7PX"E5| nJ^a @Bl% G,diܿ L"'f=Vr(lB:pBaQqKJMmc,qqqV8ƙrk3~6Q.a)u@]VTFa6ek`jXEr"#>g,or>9LXAVVﴜ ?!J3qˆ-H$_z({Y%8bj/K 5P bqp,UnQex-aSLk0 i5l͛x*k cxCcA  幉q  )m;P 3 1mЃۓ=7D@?@#6UAa꓈s* q]Q;ٳ4ᡧ; VFJ7.1/KY8OH^h3K"ZaQP;`ˀJkS%(Z b8na &{nyx)|7Ax+{ h!(*~ m(m(=\=;2s;:)qI'@y^U`t,xa+Hj o `T8!bSX5j?-A4CE/sn h)Z5a@G 38AӲ]!t' (;؁̧`.c\9z:+|Ӽ (o`${Ђ$g@b²H oQpt D1.PV`a&H> Nh2nQH-L89ɧ8::b !ISk,`L~ H_O0~ 6*0ЀST:QEX9tnFm cҁ$`@Hj0JBKx:|2OIkS:P,hHNX\U8\WhSɁr1@Xb'QQp)d xxhőM`߈c*P Ȃ8aH0YׂJ.\ J >0zeY'v\Vi#y`>ZhtKU@,j UR(t*H|AHD'$ 1iS ,1 qmc$M9p1`@ 0gЅgxxH<0 }#NhR*^BJ:():90=D@-^bI   3X9%xYBx V@K!X2xx@F.h!4xH 8H[`Ux  aXx>HJ/HU[_4,`-FLq?KW0gBsT W8b8 8`)Y+ 3Flך?eY`ePtƣ pH2FT%|\ !s!7<.8ͫ, 984mؘsP M|8: ?BP>ϣwu8$2fԀ5 pTؗo؄*~r8x:Ễ~ 8 ;0 & 4Qpsa؆e57<B[:୐cWZgX)A'hT@pXuJm.^a5с ][)ݎ( ٵx\ ǀb@M0Xq=x;ݿ%)%C|2˜@)P Xx$;H@VjHc^ఄOT%Bq" Ѕf3)h63V.9 {7Ѐ\E AE)fXVjjXBkQg` x ~8Z: xɂ3ȭ9(ߪ^MXpWRPkNĤADFYr@m#6%4q]!TZӡbc#DXH8Sû9'ͰOa)H[$a놧bt78.Pbj ߪ p81"  ,&`Sр8sЇ4*eO0^BQ J*@D8E`xHD:tglpȴxmף/qk& q*E(^nQ2:p#S7&N,$;)C8ǰ :^!HnTwU:Q0]]Bf_@* x<@s >0tЁj^Xhq ru%jp >8ɐqӄm:W p^Oj\iwG饸&H(e9!1o1 wlh>BD@/@ ,RBXyBg`)#Ã]mЌsCȂD`r@vkuHSaT>E]t*bVf#-`u%t70Q + I㆏r(4vL^p_a\ jpSH(eh>Qp)Hl'7w':nf0tyf6(;(^sX:,IƘ &I|h8X{uD SAX @oFĨQ "QV$ʔ*WLE@ NYIĪ#MrbXi~t*Vnxf-#5f( o&OmJ\ ,'?@  Ph!%Bbt@NjHC5# , A"_,%kȜo&P1cp 0!i@LuZ_GqKҲ@K\F=:*T4-4hPqX5.`*"AFY|"DtuaY L+@P 2D1` q)XPH-ltZ@X>@ s`xdV{M sH^URq7l@^apB/'tTؑ3 Da|s YpЇd hQy.vFy1*Ē(ȎD`@YyPMR܂-@TPX@J1H&#L.NZ(I GüS0 )rYD2Ƞ]7VF'c'&Ցv$%l1BCB]RQ?@7Yd7-us\"/I# 0%U'Y*ȡk\q"Џ`Y! E*2w3} }< ciJT7 tyal$C#ԈsC5`SH(E$YJ#`!JPRt0H-!PR^\*$NyblVJ॔F%QEBHq=) PgaʎuN'"["B$Y%Ky%pf"+Da5Qn$A /ZC$ }`CX*|Nr Gw:|RIH),,3xP^F !Lb'o !td;(By D@E0Gky%t#Q-,d¶#x1 PeT<; 'C1 PEr@ +! #BHv%Gc|WyΓObHa8?lcAJn1b 8qAZc*Ta nqЎL Ir#0؆+ױ7l!K:. a)Y%BІ6@TK1Np0QF1{d;pa FĒj-r@%8ȅЁ:5w<B F"9dݘq3}f4Qro tےp i8Tc)pq  Ft38f0N(gFio!)zTxSVŜ*-bq B6qɁ=!V2ERuW]Rw6*&п .lJh8@PTyU)Z(,!HB̶4y|Ǚ|!#·e!c,U4{agt!uX."$ Bb"n`8CNK= R#_)\Ip, k>A % AHAZ2MTPEK@BPVI}KJ:䋟sB7Qj9Ii9"VTj$K"BkfP%8#X+*+zBɀNf I.[ x:\ih( 4$ IH\ޝ . pS)HN*ÊũI\e;s eQ=n|*g&$zPfȩ>o)+āb ,XjΏDXC9^".f1@Ê bWP'!œ$t4THRrzuj$WCSY=9U0Dt&@YL @-pݻ)eoЄyԕ*`Cݕ*QNjAIZĄJB  LYm&1yTAatB  YXG4y|Kg@C&R H n<Ħe}\A=m` #D !]B(Fo=K5`lL`*^hA N 2Ă d ʁ% `'B1<Nj5O/T&B$t/XH@èIT÷DD~! 0&K zHrF<]VIIDvKeaԆB2dQM&cN>| ǪRDMBڰJ׸߈ZF*,55\dUuĀ|lQߐW*MB"Fua |T-ǰYƉIC/ Z/B+@A_$tJ#PJ0)^mQ@uiJlX+ BȈYnABLTf9),Jt@|'X"]n*B|KCK h@ 'J J,8Z-͆Da-lLZ+hjh{kH H(R4`&Y LlR\$"\$*#0Ld1, #$% Du'B\A$@N6}iN-@nvnW,/T"]RBB"^HuYH-VBZ]QyE pE9^܇#c)CB7C!# umA ȗ\)J aIj#1٤GY/ɞ69 xOl߱ Yq@7ę 8tFP6lRX<_?D,p X!+*gTHENJ- xtd ˪'pB9@p(F!U,Aȸ t3)$k`!f`Ca7WԈ@0ԩ}\dpG1/@<}@Õn t-mP%lMxG QAA /0,h ATPU9vdH#Itq k4e 6EXo!.,HX3 o0ȩRDLj+*x#1< (m6PM'IUHAhh @Ax%1.xK# XUY,gu$| r1PWJNr#TZcJlinM@K>(l#|x ] pcs#FAB}8^^ `olZLҿ d8^؊JI$G@D 70ꊳPi.%K ia#|*QPv 0$9l8h؉1$. > Z dA b;IVA l>$i++ 8 $":d9b3L5Oi!N!D|A_!`'@$.a R ǠГ%ၘmg Z͛7Vlpa,>,pj(-w" vUL)hl[c&9nS jA%D@x0L^0¸ ล oTFM a*'.1~P (hro9Ş)o樥ȕ:1Z gN2h~ #&d #$w=x|`!rֈ B BV*& bud- q a@EvXs9\)lryU1EwSJfj."ycaI>oxh[)x菅:mb_՘e炬a(~`x opCQBљPi(:r a.@B[C0 6RY-o]3z2A%+T|78pHm ? bd'aXŽ֌cG@jHC;1 ɥ aE  b Ԩ<&BTl8 D* ]TRPEΐӆ69Ez B Ɓ7BaZ(  0C` D1003(5(#P}x+=hG>*\܀YZjJBТ2bU'phEDC H"j$ 12fP`Bg\6XñVAV]1#2a4чq>BhkzC UuЬ'`Dg$A@[kI&eb  :L`c@M֙9T*c QTe@05@Xopbce{$ )v8eTË+^CCހ8˭jFP/Z<شW Dg) h<+JK|bGZ(.$m"ڡ } 9B." WE/0]  ʺ!bHPxpx@'@ĦPf?OYq@ @fG+h V8EmqAx Fz hG\P.Z p* H+XI c MFN` (qfM(UR@ wUh @H$ -j '@aFn!>a %5 Ȳ` Cf%@\ F.~" &N`ԤM`΀~`,!8zArF"^8C"6hC9xKNz&;Ҋ8e#Cw Ri4X8Ԥ@4` ITJoC% L.(*&Hbfi8 j F@ KRC8:XEOjST&@ r !#!'\l8 :#r&d:e#> ̨! r9FL? V9a~o 6Q Ҏop CE0 Th0 hd蠮tBE1FAn!za000@M!:|j| @ʁ b@fOU8"[ā!|!#!&:wpҲFɨIڣX8bBb)$` %06`$JҪ.5JX[m">b B pQEL!STgJhBWЁe͞  . d!tNj^f+: sh[pʁ Dk.@ .Ab9 r5'PO1ޖN ez@7$>Aza-`2>J F4FGfhD8 0^a^ AEE0zh!V 0#aR xLj\eB%D j`h@ʤ Ԅ8N*>Nr5hRA!@edp#9{^"F@ePq@47r#.?V€#4di,C`16ޠ^;` )#jO,AN&Rm0S%8\! Tjj B >8mUċ8@x1  V7S b␡a Bo#6<  VmB.+؁TYIT \akT "ЋT5@fT vVA7dpRdjb$H ArJ# Rahp5CEcX@PhR'  NTʳ-5j >J@QC{ADr! > Lef{82DJ <#X.f T2jD@c>̥j@8@N4CVޱan*v.A S3P8StN%CQQ *?a޲ H!7dT2Uڪ4oN@L$taoQc"&ib!uf̄ڠP5EMh0$LVfYVɷ-sRC2>d*eiZa"`Xa1,ʡ. CNU8z+ NsXanʩ &WNP?A*@r\,' xU0@N`V"vm$Pgdv !g SW.!T7^#xj\LU bbX}aÖ@w Bh h?ݎJ<}+&3\aD]l:f z@\`1iFvzm%5 Vd.`Y $\.vN4_q\fWL $J6A?~!lu7MFHtk<#f>C+ D@V9qJ8aGeP $8(쩸 =. @hO$3x8fh4$Nmz%+`% uCT_Qz+w5 kBBxhؑ qlCC)l!@M"[8L&0Z $Sxu _..Jj #yCEތ @%ԇ9D6Y a -L>7rk~̚?U`QXk"v Bz"  ֆ[ imA BUX z nia{.881to `&F Ey  V #L8C`D`4`Ɯ~'9-)5+C-Qgu^#*Rz%rW#0; 5 xh ádh4/?BZvX&@ r1XA,΅wblp%`7#N &ePx -I @`#>ri<9ƧaSx6 ~[!5˰ "5kb0 .&`!fP~cCwRaAa8C8Tޠ ؠ9jޣ#DoMF9n` r`- A\"fg2&9w|g r~#d t {6$2_j_w9z[֠A@Ac$+Y$ȥKrX*1bA[\)l2ȑ$KS7o}Ègb @ Znǯ$ ?ՙЪ Ҥ ~r ˎHEBrjMN6pZ} ʒd eE ZZN= 80Ug](RpŌ`+H @H+h) IOP8 `I^,Y1S0p,Ud)rGKmYi~/@Z>><:S'G: <6lP刪EdyO%Պy'd%Y6C*Q@ 83 rЖDm3Q׆+lbu]JHQd#8$Zou82u&0"I|53>{ `A>^s?u!DAq5v#QӺr= '=E$dt22D`D/@5Y3QsoA0 {A +WJC.¦^Gʂ5"aư P"\ч*UUZ@Igu( ^(/gpA|Q N8\)@}0F0 d P__Tr:'UŏԤ&l̀#c܀V@ Hn z2@4`B$HTPW?ЃN@5* %XUa IӐuѮψkɂ ŰI.*J.N"p(5䠁|#Gy(0B#:^yH @PR"ZCHdVL"C j"褲#7004 (JlQ U) g A^E!5m m7h#HvpКJd@xNj$t2J( 5<á0S+D\L+" j4T/QѠ9Q$6`l[D7NQ;jb5F d `Ќ %ڂ` \$z~E7D Q̶ s`\q| i3R . 28!4f)+ybHCH "7~& 7.6,HhK?m÷dFX$)oA:ўFXo"7 @ d%Ca E*rFDZ ]bP$= ~ ^$>Ʒ PSU ;P(۠QfG Q[8ci0!YTv@*sn"a /_C87 BJ20rD}saYQN[qgQ3031/Xb P5M8e5u٤0xK`[FFDVF`%%As&>*nDq ( ʐ k>ScR)j{уܠQ2q%?jP }X#}-, - ] f04 ()n Qe#2"a](m`3: 1`s029ߠa'jW>Xv"jE@f!P sYaPà`re D7]p}{ LaH>8)1%0` 2@2 pFU!i#Q&o vKphu>q ZHx"cv|6[1r',V5% 'Q0g71- R8#X  $pGcs v2{ 0[|bh` `(ca8 upbiD @Cq# 32Cp2zi@UUB@A ߲X PC "`'@!1AI`dQv 2 RPmp&KI<%~jCU+"P` 48e\ ь0Jm1H*! W0 WbraY1<4 PJY}^ '7@'R8>Y mjV^ #IsP)sRdTӈ,$m m0Up6~m0h$HV.:!v5Mb}q 0,Rl ! $xsx~QU@ 01 < )0P)bV) aڲA9Sa@_0!5o7;>a Qzr z aL! @  .vtD/A0{+{6wD!m '@yRߢ Ԍm,[Yw&!'0 9 Ȱ9P a" @^{v> ;Ip$P, vsFpѥ%v) t[pum$a Fd(v7]u@ `!377 IP  )` ;>4TEBdP8:}`1!3pPPm*0I#lp O!%5vMTGog+%)@.! j2CIS 琰I<9sN]SldF0  &i@tH0ѻw `!܀ rTB% ۧD+=2Ɂa\ }no "lcAbP^PU@rb>vF27L1Y(4rUM%Qer6ȹ*EQ&'S;|QD)qp0 ǹ+ pJpEE-e`٩pK%A ?>l{17# T%m6 'MCfU   P ۰c:&Q66<.w# =o0#)`cJ]/@d6gQӅBJך!B Xt a<2KP Ƞ @8Q+$P 0 X" 1S80$ 5PR! ,J$7{ B :%( m6X`] ̗q͛Ps; H鰋Mp% 4*UNBP {:]L*VXy[ `Ҥ.& \L o_%BΝfR9])v&@b(]2;)s/VIzOuI4iǖ %iS? VJI޼8  }a#7KfMZrSX$֕ogxmnv` v.rR3'A@ !@8 @'9CjMK/a5M'@h-@+!MRJ݃RbTEg2DSP1ŀOA,Kh3axSbU_!S`9#\&LYW)%Qc v kMᆛ-\ zr)C\X%)wyQR@R$|R Hk&lAq CHcUGv1\̶}ĥ@hm8(.-9J[K1`J`)M' 70:,W7&%sƢ_M+qo4v]rIIz!eA.Lo%03l(P K)D% LUlXgb%Z-0L0$? ƶmkZCL/m 6s@$<87@YFaK#]TTUc. g鬷nS5*%(v%37qD9d5 :MHE x9RES)e++VP]\ҳ%w_ Ap `S> Ρ"K7IU.t08nu+@€ =< Y@NrץA^$[QH@gɠ Lǜ&KF(HG|HĬc@ b,4C!‚n$[?-Eh N,9  E$MV>!sCB.S- 1xc p90CVxR҈ ȃ 8W1:kh#G8vp"Ko8 ~7Z<'3-3!?̦L!L^mT @%k>  $i3ZRD'"$%mG˒Dwq %sh뀡}(JF4U|B0vaĸ;S'%r KW0J4q%+'r0TDP"1ib*0jq6a2R0_Y%@WK,p9'oUI >+|) .*@d Bm;溌Y-Q&#a\p>QliX k E-. 7H7>`(tM*S@@s& ?h "VZ٘"U @9XVPJp+*KRR%O I"ma](H~ 9cI8ltR@x=f|R&-V:G\l4…-Cgf4q@/Y2m!z Pl Bs Ї:#_K豑Iw{`rn=:C if'μ/vx,X'A m #гl,9&`77jl @* @J@H{(CqwCZFԚ?P:Lv7O4!QrXPBd@#qC@j|@Rlt;4.m!#|6%DVEAf,DxPRwkq҇>=f'rdyC1~\r@8ObK#\xmG`V2'n.xDɳ+8hQ!`>C^(aAjP 7 z(4@!SD217Z֙,,1pF | K~"/:  #2rp 5xç9r4 o| d"_ `WrvAZ`D3p p2%+%0"Szq=Vas`N oJ~G\I 7< :%P0`P C] 1 0WpSq΁A5ڵ 71"oeu&).+/UunDg4p D-UY2`Ut.Kld P/?c g_m  rg`vg` aV7ׄ X b'`ReScp 0 :W8 ߃@Xn(1hm 9xC@ f/`aV i%P {HR02(! 20,2 I0O!+bxcrW;-3rd4niXW 8#lSO$A9%\280QĀ D/KQ(Z9 f'LYO -qPYtQW7(saLI1JpD,@;7@R `8BT +1I-zЊ $=v0H9cLG h@/\{[pU2rŰ{zqi.oP@WNiP PP 1rmP#H1 Å@a5Ӹ)0* J𚭹2 x/zp [T P lR - PSq-ErD1H46"d.9/ƔPu KVGrdƧFlr[O3~) * uVC:?F!c92(! `?j,VDjR . `DaY݂NZ dO <D\U 6eAnK1Pp8|CKX\Ygz 9 g o$8*H#s#\?F Z10JЮJ,]/uDW:%\"Kl@G3vP l r2ɇg'OG/$`P*hrb. dL u e=r঑~<vPT1 J H3Y6!0sX0 y!?*#{CA h'zVdk'!^ѭ:&LmNjX a?ⰽ][R@ OQp. \" ZA %˥0{/}2M )v}k7caP P,\P!n˓^$粺h XeU |[)V*)0u@p R` 'cSrIͲ6K6Is@ xȲZI$W8zd <ͼh-ATG %$jJ*h%m!IFK*FVFP" i7hu!Țշ-b  Q{` sCRm:4-p1"##IYb 24 k<$j^G] .8[ E7ZBȄ K`3|HbT*֠`v<%fVI1#0`  u)'h0 )` W6q`R# `C36xOM33tw@#b__ HͲ 4 A  ,u·  .` k@10"֢ @a%Pkln H0Fb́N9;&M;|f-E`=,4aBJex_&\x`2>|f1:{+J*K(OLr@L< WL= qh[+ gҁr tqfجlX:ǁY2b$@>"|cs+Pذ`,6,94ȧa VrV"|B 3Я Cѯ*Qadp!H0"8*~H~p᧕b '9P⁋bSB+K%x dMEog j3#:Ͼjkf#2 c=4MAQʇEB*qDV[eDUZ5&ՁbuG0nȼg8LVh7/;b VKPg(FGvmZSءbZ oE$0 pctɣ[tOcP( #`>6a?`F@85=lɂYkZky0f \a炁NiHao0E4dȡВZBI`8VfC1@f =0N~HK0ycb&c[l'dF rF9hiu3r$#[PFICbk&{}v:vDhh)ݸL%$fPQ)h%*@=ᆐZ K %npQy#&(0ؾ`4m$RTo`DN$',o1EұKX#@lTYP!7ET9 Q!\*y/ta@h d"ЀRqv300RCE (L3~† E>1'XA32O#@/7`D.ʑTd ̓7#kExsX;A$R)-BHdes=:AeԐb3R. A&S0U+Llcd9vp !btCTMrQA$ dPh:#|40X! Tc9Rv8CţtXo`Orr4*H$%(ܦ,)khe`ɛA +TfC@F{v*SB dI"ƙ%t & 2AZC  y Jݜ6}A>dK }ؗ+ =r"|9np?$Łif90ʢ#0e 9|c=buʣ ;;ɤ(E"RPhaAH5)H;#Cx?%g5FE##. @¤KO$H J+AgQF:s~aӄlWfzAwɰXb-ڢj ‹)tRwG/!R c3$Z0b6 ت6irІk=^/bƃ Dhv`I1*)V!$X2A ;=` @әoL-*BGT&ց _VjsvbJ:  v >3(.``_Em]2eȱS6Ik@ 'E{(]ך1؊T/H.J'8EoP A 72I*'&PIŠ9޵P"[Ab 7Bp <xVsEgLd+@_  %4?.ႌ77P? Bg꾔WubOa P`g / g;D%pd?N^{x.˶hϦ 7R܁fޘ{.7ʁ4 kLPw#ڴMH~ $B /AD\m#(*A !im{p7ȁsH*t!@3 PƁf\q"*nvx`mw@ MY&r,ta Op028y^ލn\b.a]$.FxŒL&bdH!zЗ8Ȕ9H+yj@ bԦa`)Ahs&)h 0s# i9-KXÿ"$D(K S8yEEk>6M1l+*G<TB,$ (?R4 mA%hb0h 8b0`- p;*tP$(:?;9؁R;kJ ,+c`o:8P jy!s<IЇtLK@3E;`vXxX#/[3b(1]d:YPІ?$9|x"$ y,y ( H;$I)gxxÑ7h JQ|,I!"rK|PN3< @0R0Bu -p$!VHk*X$_O؂cX\ Ar;.l@KT]́X Kt8DoS)R1;x>#<?Cۿ*H2 B jQZHH񔝻u*%jh

>+]m[h8!rH<#rP-m05G[*O(e6mFH ؒJ>2 9!xp$@Λ>#i#E3/D^y|d:YBcHMNlPXk !:=O०h!f$F w=^8*0Pa$ىI30%  B`` ]0 R%dТ*Ucxbe 󲃨C|i//gGlO`]raX&B>H]a*: ^k1؂x*L a)̈Wh7L:\d\`1 ơ >с鵺 rj M7_xS+#j`06cEï1kX#@VpKvfO9SEWB kKо".`ocToSO40#1.P@&`0"I24ke^\ė)+$챉1KQdJ2pl [ ,򜙙n(J޺]vO Q)<0v`\X@@]-%( +tiNa`!/Ƚ֢`@ 8=Lɤ.8t(RpS ÞA&8 k<K?"Ey #q`!/ "{aW 'ZpHF84xq~%hyQHD+l^F(XMg{Y,2c*"D~2Qf J6yQ/ekj"P  1?0ș rxA`Ȑ0Ji 3Waʟjd9˩/`bSX@1D]ӇdޔoΌCn{9DRPP00',QZ,UX{蛫\Iջɕ/~H%``o[|،j }BEB4 xm3t`Mh{ ` !O\RrS@b(2lC,FXP / # 823l<ҢYK\ AF*\A(%^􌣐F?U0,`d= 3l;$> MU68A,%-Iε 4Ğ?$ A VFmBhCtQ,’kjA2Bio%@ TD-d127tf :KD|I Oa7FԀ4TYܕ, ^0b۠-PDIXKȍ%q2*Whsm 4X3VHI .6D(."A/.Ə5 os?0l0SpJʘLO@י6̃L@Zd6y =߽"JS ֘^".QŭOH)$"$!(@m)Fl `aA4cLj偳UH$8dH  DD CAAҹKCNr( @)\D*G@@ZD1X|F,zWٳ""P]Ew1b _:PEf"`fp`joF #t0)rн9iLK4)lAhl, orG|3A1d?S,ZB͘!\M #Vm[|![ag! {xhT:\~&9 @9@H@2?TlF;B7-AF6BK,?B0dclGA|t?} G /,J nRKD83O]oDJ؂HY+L@ iѰ%[Wl}ïV `I[2e`c&))"B*X 9Aҩl|޹+h;Lp5gD,9\+:*1#8܀(f Ap4P$CzcLB/4pC@>4\X난\ՀE-lZ֠wi ay+δ|$AJ98= 4)'Gk@1,mIA A}()h&E(AGk9@ J.w0{KS3dw7 'XuN) 7lI|L / [pVQŴS\ΕAͤ%H@ IH2 qd:89:4A$ih( 5cmtd¡,?1PF ؁Jl5) _ i WA ʋ܀\lY3:Bf,b/<<QŶiAJ@X]'LL\7\͕쬖BJRE؂, AR ,-b1-hp4@#`:A@F5$' ).04b 6# D \ITgbt#LZ|❤D3ELo*AoF"Dqp0a<;wnƮ_R.>~n-('筐jT2@ 쏈ALo](Ag)g VKA xkjI0$'*l)|?@@*,(:6|#(!)\,| ^0Sv.~I 0@A):4t\[$2tl`wIA*#J@Hd<`5#q7ǫ/ &GpqH1ꀒBä$eIvB88j3,˘VM 8txg:tc3TĦ&G 40N j˙x,xx A24*|BQXnYQR(RgU H=d+h5;X/"MZFH_҃eh鍟LB'{h%x  *lǡ @xp9핲.G+q?;fxªXyF,#A@HHr'r;RMc$$R؄K̩`w/(H 2@n94B#|,֐ {cd)g\l fn4ehJ؁*&q? x 1m}Dk fK築Jo|@pZ-YY#L?!p~ @텁2wF ⟥X% $5Ri$qAHF<!8*L.l9{wF*AEw2$|m|}0BAF kݚ-,A]2&CGl9 {'3^H,@r-9h]=N|6,\J*EΎH]WT g0S4 bDFqJKF $ SyވA܃aS 2{p$K~:.}D+r) F}+L90NDD\SL B(: 0x4* dPl< ϥȗBłE-y#3QSwFYռfbqчlB<A hՂ_tGܸ@ֻr=7ָ9;tD)Rk`kMpyh fݐ//-a&x w$vd7=ZJa4d~vձ4iwMI*ktf̘dh 6;a#m'O,}# Lb%LZjTSVZ_W&tS!0 `Q´0ʐ*XpYZLuM/TB yXT-ż O "  J `/&+ bGcز4uԨQ)'os.IVʈڴ0bT~`.9c? dB 5RM5Sa?qj DβP B`QK%/a7 ;@KOlh ^=`c P". cP'&<#@ws7tTe> LxS-.ƜB6$lBLD",Qs H_"BLۻfRm42ܵaZI4@ nE,)SC4(npشBI^f!d9E ;40 o^r BRr 8. KPⓌ`,\\jQ0`3`t)T=X#܃IR!<^*1pF&0Q'b@mqjH H.XP@1ThaAXJBke(xWfĈ86{IaLX'&qd`F 11^+1qK?Mq4" &p \b aU;>aO\~;KAM~r2>ف4lw,ZXekG9bC0#`[+  IO&IUFv"H#0Bas7)EA !v[U x3V.Pwi9c(i1q{C5!"l]5T ;LV%5˂bD,A;?o'n AC%Pq K|briƠ݌"Ƙf=<U٥Ǜ9E>@tڔ‚+ a3BۤU*iuGt I/R˰K/vI n]yCw P{s4YJfMrK<&x83cIĐ``Ň#14&ĨgL6Vq `ՠ# *x{qVbx;Cbr3khJqT9k)k<R! 7nY,1ɅdRv_4pi bO"JXb, vM(voR'BenCΛH.bAB/ b,.ial%!I-!++` VPE‚(~LϲO&ljJr \4i!IRLVM`z! ΡbF"cA"ZE*^>Ax%8 Pab`N&qwd `kQhb'ȭR l*'ڠSB@‚-' @Hh&!,L@W. `0;aA!/@&%MdcE7O&DClkibBP*]djNJr)R)/R^i*$B 1w!wx Nn cdOtD nj% %:0{b* aڡ ڡܬBbXR{f.!1C `]@E@*y|&+d+:6Ȁ+|-SI eYZGÿp/5P\[aZGR\paZ:ctC[a |l`N*!/eZhx:4!T5M` !vZaaZ>P:BŸ&Ctf&cR` g*;B:3`a+BK4x&&TPbWj"A2%M4.)1V&HX@T?ËϤp 1&: $" ; ρS2:c))/.71HmZ3!P% p @ v PHI>򐋠4>!r#<*Z"H&CQ0LnacBf(A$;4i"*! ) &n P=ӂ*@ʪ2-R x` d0.dAE\E)X &)ydNO0iL*c9 pZ3XJ`%!b_hP`*A&"iPj'&!!Wk2n@RIBx`wWV@!lv8sdI&L4lD Px*2!BIL)&@& xJR(Zӎ !J`^f2B*b1RC`4#ÈnAFH56r37{&$QHR`6b H[INlJz7[!>d'P 'jRc&#| |ebhl D"mV`0VBbwE>M!vants@a2 -D!Ӛyɚ0 Q.g2/DKldSA7l%VV+6!paP$d1!x!od@ 4 n8IJ 6q~Rd|®>"(#WLۨf-MR?@ xFP*;& T 6bbBtIO&@O  )&ȁ*$n&` u-7+[} 2[4x/-Fo26 `: 'cCt"ּwniRC|2@`FSk(\S댬rt@IS`5 F!P a44|$IJINcy,#Q.:HLSN9ـgX  DT !t*zA&La9>1nΡ0&ԁublDŗVcW4ОA:~swGnQym@eOBd| >>aݭNKVuBvd q,r<CszDclGA XAL4vpxdr9ąŴ'>fL;N.++Qs'vNx>!/T iŠ޺T/`@,`` CBqb K<pb[h@; !7Qq .@Bl( @*Oc뒭os` ^7p3#2/yA$՘0Q oT4\`A?~߾80F۪00f`jIڑ#([^"5Ǘ6vq]B)LٶД{ <c[?4_@JS*L)[xA S2nu0* WrD;WhKnԺ1 ٗ/t\0h$!sT_s̡r%VN,NHAH90 "mi(Y]7RMMp@(4۽-NGȨNqE؃Kp9.6Gx$@Ttrf 5 =PSғ['u)J 8p 9*i xn]0ha, v<]Hw.F+<(|H14 L%&Ym62dcrc֬ࠊ2Y!yA7o(Fy8c!my Z*x ĊI:Px{mApm^ᨋіH+z (2M@_YI'$p8U$10#вt "ŪQ,`1 aՉJj# an*@+IA Y]Xvl#X0'jfY֭'B2%&"eF%M2"&BP8f*kE< _,$ ^!"Dx QN1H+rh0;JHE! z{6g;a֣U%Dܻ$Wc O!K`Ӂ r|`zЛkܪΪkD* +`^% Fp !F/;'2o>E"4lXXv 37fK~v=|CB 7b)ep'p P?$pvp(b:@fD +qb 1XDE%&8UڰQT#+Q 0SòU1xVF`)3ߐ^?_tXeiT:I b#VD~, gR#a=Vf"4p p1m!0\ =#b~`!'2tF@43i1u8J@M0Z(ad )[ }0P"0E 3@P _PFREqT4q.ƔG 0$ S/I! hU|wQr' Mx s2VW sG2B($ CyДM9Q'@>eQ)ƕ)M0(SY8Oz u )y 1^J%p0 Bf@fz 1g70tTTgT] {_. I&a#aAb}&s([ !2;]! 08KCg0Q ` 30 ?s!Vdh2Ȧ_@e"V"$93>AmLЄX{M`SGhFRT6 NPUחwD|[ # I Tx\2xI+u~S8`h}&{)h$7-$@"$굇@?H1r9zb4%BrUd6##aa,=Y y AK1;C/{8sL` $BMYQ)LLi F`)MAB(p@@P@ N >Zx'IP qvP6VqօUH739WEŰ -E :_YԱ ;#b2CT&SG,Љ -8!0e0 YF r !S#T@v$"B=?Amqxf$zib  j)iX0P 1Q|sZz y qi^C 0[AD2 b\]~~ a8A9a *tqȒSbF:#t*Q]11בAғ#'b iPPL;4;Y@#YՅE`}C+,P3 " 3\dW߀HO?ctna1DMt'xMְ0Qh )1@B*Qp(ɳVPhB" !@ ơ[a7Q#7bp ,Qa,Q,™SB*8 1aeFGtQnoHDy҇DiT hYHt) ԰ ^ x2CzAщAE.{` A4C y  ]bδv; pgA'HV y'D P0 x[ֱeA NKԼi#4bRtaQtGQU GH9W#Bˆr}nX3iFHXGIhF sFVl#"ze Br ;.YF'H 1[D(/D1/b+FPQ0t0 T]>aR^}xPpIдJ1 bq8et͕b V`II8a?)9F+r"K`'8"BAle$ PwFnV/` S@^ 9 qF, Ġ: xaLjc ^/u < "ql~j$?4*{` :RlAΔ4nF ]ΥU ? L&StCױx*dv0a"&IHqV8_FaQr~FUF##j!D|CΌ2JC;2/T&V1`DF}FYw _2=.'eQl_'2U$b #ݩ2}ߤ4 oAqAGDQ (aD*q $5MZ 0tpeA5u}`G{B J-4A.P 0_q͵l#IJ-n&:S=jSOi&@ ##tX4 ^ 7h=vT#b)! #$m(6裌"P<#I J@/.i'j9ɦo.&qp`j|cVFGnb  @ڪh&\Iv8ePD FdyVa$OeNb-2oDNx3n`099b#lfc4kRHS[@ͷ=`8uaU1 HΠvi<_;e# h/*8Q JjG=AagqD0ą(Ц&Č"6:Gb }9s%mp`da,D@s$~pBG:2>nEG %pY)eXpQ&o7]71H^I$ X術x,#'bQHtlS15R>mUk3M(@r5 yfi  z3qǍf ": B X[~4 ejH01HX-]1IJ.$Z#;ZC)H#$A}KX(r'/د: 9 b\ 0\`d$%& LfP6XB). F8Ş“oXHZe&]H#͌ u0+` (ciR7p*):lF9KmA0 L$sP +vbO2`gZ0Fa&N" ; t. .Tt? 5A 鐄wK#G4udJ:Lt%C8H(IfʣQO"(y`X R%Y$: Jpb%Q ]И 6Hc;6!X`f߀8pM \1 TuL&)vkFgT_892s'F Ci9Y1<>b(+nu% ^LUd ;H e_F˒D$q { i! "UC(6@ x xp@_\V?K+E t(]Aj&y'BQIb.# :"%\X"~+a$})M) `Ylk$B('J*ILY B X_4 #K~ *o E*`CGE@(xy-HsjQ37>Z8;OBص?ߎp#YXf+P ?7uo Xԭ(2HWvNw$^5drREy.eAbSz' ) b52? d느wr[j$ vʎ0?w H0 q99#8]%c둣H!D>6:31p}`7y*\h Vcnz"9>(x J .|+"ڎCKl/X8 ] 'HWK([.cbX [;~yB:%$b )80m0Kʞ[zK: qm$12Z7+6@'œ BrK$;c8y+IAbzoXh` PlА qäX0idӃ༡H1 hz=:CH:@A!#(`"ꄓ)Kh"x4]pDL;e9 7j[+81Uh (@j@(VY29 () H{`Ǒ %&9K`941u3ደ1~ l/b?o`9 Ђ  ,RjV5M8A L1<}Vr$hhSpmG00E:WDx|ЅH5R3 :[xxՎw2qT!06Ńَ/wyP<-0x|y$( _k0 Hٴc?hD>O檙.LQFpR `;\ayկĉs(7`-(ڨN}#NT(SqmXMSX/j+9x5Ю=gǑ8,_Zi飘5@鋼 Abےh^, Ug;l?6Kpc7I8_RPW%Uɵ[Jwt 1H0H Q6Y(!8W9'K-0RV >$k#0#=XؕuH@iɂA~؄~op!{664"'  [~ h3r b *Jsc*ZC~1;U-gE Lr%h0H3gvyH=` IN 򡷱L (`R$Zm̓`\ H`>m~=tcP9C{(H=@I~j>/80|ȇiƉIr3 6 "(b9Jd[g-YE)-ȘIlo MRJ~1hG ?#IQ9ryNj^dt{I/stXYQW]mW^`tm59hgo"7sڰ%h/8C6*azc( |8(#:H`oGI]С9DQ+蘚 Xz+ͱ(;6c2x@"Hxo (3K_zfkv9 U~[*G3_S6nH󗐵Yr[PXv4 y9g8[א~%Ђ!@t=Z{!.׎-WrC'ق-G6[=TN'=sIc5Br+>/]+8xg-jxz=,*fl ce V5aH* (n( @1`@[10'=8#!PC9}b/ln?f8.|8qs8 :şC5@Μk*dM!0Z&hVcψ#9&1PK.^LRED< VDQ|v,!7P eU_[ QP ĔNǔ6 ?IMfeءĤcE@UlXg)1G bcFD67O)f<@gy@`Hq DDק}' "A p'F Č6;``Q+DRmA iBE<8- IxNGK*TP Y[A5,QE9XװhFԁeU/],? KFY,Ӱ</= 'GĎzU+`D s 5FL+@V QЌgkTD r{ ʖ|%D8$vn]*3#3B(oT+2@aW?}!zH z FIvPtNRN]+FzlCiSQ4%`lxOP@ZU(@|'%v}$z\^R /jpmNݣ](adN6q/<.&Q'0s LٖPDnAdiI2 i25k)e I7/i ~t@t(U<7Pb0R0>)Q}V Ob`-V6 Am`4b6U:Dzf9NX'P=#?[@bD&&""W.ŸzٚDo<0G`rq[L@2`X.mfJLiHl21Nn1 O~$NbyЇga ,$Q"L EN!\LMA\WC *TU $058m=1L,JPúD9. `*,*dAIl ]J5=.$c6e#MnA`)#(1lp i3x|sM(S(Pc%9"E-v$M+:qCMR_@U BYa!M@ mh Y#\ĭy헸UBV:06 $A, OfoMEdkYIAni.2PO.×@^k2`jq-mJnxsh* F?~YP- M`tG`6# i%4@48%EEnHf64jӞ ;oQGC^H<എ@:{mvBLq ЀAD=n0aU$UCpG1!dnE٦M BHzIyD.aJ+n3$d; B0'q`76L0B FQcdZ{ĵSqs FZ4E*gXN1)HRye9T%<HEY`F%SH1r5l/Y操@D%@ IrXpk(:$& `_!Do8[l07RJ ш"Rmm\l T4 h,T#DaREA pH +mozJZ "Db{gM82tq``kC`I <"Kp!^u;)LhsUq.Tfd':P1T%;!ÿZY*Z(MhמW6l@ߥ8Hk@Ғtʟ! WlBaR(-+C| q&D T\JY#P "(%.}"uzxdI=+:79Q tYB *f 󙄵 RYE&֑_ݍ& ~؄q74׏Hk1lE$ 6q{ƶX-!!_)RO\@l OD66l9gXÓlP  4W^HNHBB?c@pA- Yp̠p 1TC |T>@péDA ]0ڰ,AؘDX@Չ8\ ^-8FaND$C77 |zUYA%ߤENFd+7TE+,0L %AD&TDV8 D0 =0 D L,<@D > a88KAD`qNQ #pTC` 0MRAMLܩA\\XoPHT@UGpD0!u`Q\PLPXD9j5MG`? ?dŠw@@DHD1A,¸–Pe—D%TFl&DlB)(YDG (TuYuBL2 ŭPYeE,P@&π0Iɣ N]H\G^9p ̕eaX`m>:\X±!?eVDH|$gB|M+DZHr,2jEɸk|B`'bd`  4LC(E BȂJ!cX+5CFW% #xB bƁCXĻGeLDAKs VA,c9YD>@陀CuRY@ol`U? ?0#j 0#,2Y1E MzDxp #4oE< -,8:+ăA@c B8HTE$UaDl(@ψ'|kP\hül `lB1j%k`8,*Z#$ 8.#|CYXg*48iFJ5SH(UԄ}B|GH(_o$}l٣ E|8MTw?VE޽&<>(yIDZ,8wdL-rd& c&T-C>`(IJ,^7?؄v]4QWEGhJ2=,x8D9H|kNLRZ$,1^ZC8=I 4S{w.]7WHCE^RA&4`(HPо 10*VB($Kbx -@bnP FlƖ1d F@A)`I\^` r%=`!fR骫`i{ x`L'bޘ̕*,33n4!=P􁁛M6VfD& N :L 9Bk8,9,M#qp`;h][`hJ@ fX869,рam@bl$A9!9 h!Ibq) &Ć~2*4SFQj$lwg2?N<%jZ9rDz9>Dqe3 8'NW~mChf2B`hz4(~؄d%ܪehZBΚ#5X}H!排_;׺뾛 , Zxj4}CI`t{4w#jZa\I:G= _r% sA [LƗ1`oTҩLz7Fd^..) G>(0xJ1J^YY*}/%ڲ!#~&nx~A2AY?E@ ,0.L!H5\[SY#HRq8s o-v  !@ 2g " IPCb:l1ISHFf\`1A w:NjX^9 \!s`ňm!ZQLFt_aα$!@ )P*I1Dwv]Tx/8.2wx&* U^dJ @d`6#4M`ـ61Bk*plm"W[T>&Sp Urq U@!pěA̩  @Hhqp/ ށ! qt!ov%OB M׊%d$6Ң_߯*RFdI:9B&D aԤ7yШkhr0(n+9 +Ώ',m`LRD2z„Mi6@P6d#X`1`B2 `1룬ֆ!|!TH3[HX4<3XH'8@$ [Zf!&!E&a6'#0 '#Ρ.ff!d 0N{M#Kt.F*u NM)F&K' j+:/b 8 . BF&,u#SQ UD0| PVD& p#ri+lgfmdABY HEjnJ릝 Y‡p(!X5I eo6jH@nqfD$LRw/Ld5FsD8#@aw tsn?с1wG8("E_b#nzpAce>%+@m7K$b`da231S7 ܈FB d@=e`7`qN 8HefⓓcnV|+Fe5 $ 27)@F"ƃ%,O#q12mDFqu@1R0#{؀`>S XT VDH Er_˙b(AfJW0>VF6RuJ0X([d\SE":HP<~Ń^ Q"{A]`fQRTTT&, Ammv0Ec#|*%@+&0$ @(m|10BZ3hԊ8<R%KڄdPN)1k B_yy nH02GVvkEJ1R3CʐΑrLE9cJVsȨ2 x.i" d<'~s'FHE\Na\ڴn\$$vdL/afvjv1 ٖh+/ { 4A#)Qʇ\/A\py8mm0zZ8CV#d-B~NUСAp($?XS3$ |T/ 8Qh@B >|xZU0bP R jLdbnhP?/< HZK5@A-M@: 3d9OTA6 W ^X$V 1m1&t4̄#:#/R$;ILҔKiiH*?4A^G\azsRAj؅#.ЄU52Kkk|k %C@Zs F00@Pt r `!РK2dg=9!0ހ!7 *# pE|p ܗ |7%IpR ;} ۇh`R@A_'h Q=>@Xr Y  $(W1hareM' %b A` }lx R` Ko wb3tN<+@k0 z&fth aZhhB˛^9kg@@]&D]7tnC]0MN ) Sk`D<pSu*տp rBG8`ȰFju7d 7+`,Q` @:t),3qhbnٹqp}{ Ƿ rs ߃W1 **a9oh ! QX.2͡2b#6rZG:t%hwd%C2(<큕ܦ4]o@vp'%&djNҀlωjؠ&M@c}, c]erX@?$ |Tm  @!eݷϘO}ɐ81-Yrh!(2VR+Z1& @45}z^c"Wz= eB K"cES+Q 82d(ȉa;7^BTh4:bq|K-oH,!@;+ЊE@rJ?@|Rڱ! O6ﰻ= )8{lU2p߈2h}hұv_Bd A@=ޗ@l1;0MlF`o`  a^ pa3@$8}oWbaw(iݰ | hk @*Z T0+C> O[X1  =+' \'N7$Da'Vc??` &Q:0!+. ;3@!cd-PS!"94/mWPm/]@ I@ *)]0KJ~$!qhT+1&!Hi,,AiޏE}` 84) .v 1&l @ЖrGAvGnN.P  `y֢Bʠ8o3 89 R0 @ k2G gPa𜬾u1z JQ `o0p2+Ioޏ;3k<3+*$"m8k`4t[XaÕ­RX0\e4\ ?} 1[I?qID6Q)@E,-XZ.BP$7rk!TQX]t!Hu؂|hC ͏m{m I !7'yկg_k!E‚HU38.$ 06 Y $+ UVAF!V7F!|Z(iGUIL,g4zBRbXZȤⓐ1b&- ,E9je%c8iKK2T0ZYo8b+`%"*scc&9!W Kpq4fx$2l(^0-*'L"e:X(a6~둑oNOFʙ$Z|tg(Xkdo^z==;ocU6B bXcbzYDB!H#16lr0($XͼaB (G夐NfبsO:Ip$6eV\9R҈:hc͎Z:š=1"`R,b9Ǖ6SJ9?૴… @e!&Sx aH @oM UJbzւ #P4 hATśkc\0A].XV nܥ(!nK|׳f6YD`+ D(d5X$` fD,(`v2@C$BA"[*XU" *QFXe`1hbKҨţ򖺑DdOD 0IbJ᚞vEXZ,OAHDRr 0fi!Rp|} * ,@7\c  pA B'8"!?   <>\@ gph#*PbLHV ہcFw=cf3EzX ;Ki ZHA  Pbx H!97c.@ rvXfd5tnV!E"#q1IG(b<-&[7pFxZAKI${Sվ8~ <@$x`C>RonPQ<.P?EX+b"T q2IL vDt"ְ0la x7|"RS`g)2 jZ{q#]гD>#UX  к* @+CtA( iM Y7F]a7-tHޡ`͹B%(0D=M[$e.")Ԙ8Cu(HJp)'mK<~\BYS4jcttD U~L`3?L Xzz2 `!AxU\DXFwP:dDehw5&d:S` A܄ E,\8l BıyƦ! }:&=\$7 F9&.\aȇ S Qv?&M%uZ $iYQ9)uRb%>qO *.ÖT;$M}YZĥ6~7khZ MH! \pC5.{кS.$8Š KecA$ (pmi8s(ɋ=#ЯaO\=D Xbpy'P`aY^xJhNıbq'X̰ꪮ08ɂT3@,ԅ4-8aR@ #'xx~ D4A EZX(wdYpPX2!y8%gPbUrh ^ (}_QFt.HHh1LC.-0O  eK;0~% C:pC+j9ʤoH=Z"bs` 8 0 j\K8)7` OKPDR+<{01 |@xX QOL(Z:xki1%w'c[MXG(:;`zXz١qYUKI4o 0xa8HK !bMo8 p1:.;>@ԑ渉O 2l`2psR9 `/i)X =8 0`/=m(mK87xDdoKpVl jP@+։+V~4HK2c 452_yXy  t7$ +x. 1Mnk& u |;HҹUPd8(bT텈a a(yo E '脅O\{[(S(2 r!ᇹCDi"&ܚ|K;a9m5"06;H%;Dm)BYb`>jz .Bol's%*5("ŐP88 15, 8)[ x(7 h!S'!BW W8GD3چZX:ʦ؄AyK`.Y,yT3kQ70OY X1d e80N2SH[{hiipV =,Ȃd p  5/ 8P,9Py3XIz^WFȬ);Ѓ Z~L#jј7c^@j ?y_ 5ȁM%嚥 `{UM>) 9JUaC1b 1*}LZS?k̂5Xy>0 ZȅJ9V.d@FpI!,*d1'I# f: 4(q8& |6 H02 'h@ۅ((ZRScY`b1|9pIq 鸀/;HŐ(Bh{.q7x>IKxPM #2 }=ĸD1^i}>;0Ņ`%-hH7%(6qDࢉ7  3:K|c^i$hhQXLZ$$o0a X~@8e lkWh#B~p{WHdRp[ii8c }lNEФHPlgajm ::Yht*W8(B0+j95I΋ 0K10ў"؆@#S3 >@%sg͵7q>Яz=sHƾ􅈇Y M$&d-KЂa)ȑ0o@o+hTdUM"5j /. < p-O8cP8)-NKPEcd+04DKm4,J:"c(p&z#.ȇzap$_ `:Z(_sŚ:'[_G&n /q-mTEȅ7A󎅠ThY1_d"ȟP3ЀY((5$Pgչ:*"$?Q|؄x' -]=!蜓'6jZ@""``xv5/,ȂDِHq96R 2x (hX q3VHť"腰I({O jh70 IcO9&I,9Iƴ0ȅ |8!zȑYUpo%sS'_,h „4 g؆(0GHX!7IIrP #y9:#@ 3A@-) " H Љf ~Hֽad\(n^&0׀O>M0p( 0`fX7o8f\VƲpƛ!1K@7yS@W':,N &Ndm @b;L=)KH5U' ^8Ϡ%}RȢ@J+7`$rJ1U@H)M 2LC8+)ЏB9#Ap6 AiHAp( RA @ D, /d@bp @`:'6L0+h s11i+cO 3@lisC1K$kafoLҙŀ'G W#C IM@A +CL< Q Y< @`0G+l -p`6k3ʓ0 R` vr<}A,E̳TE0VATQ*Uԕ`Zj|7507ї. t@&[28p4JM $(62IX_QZ@IhJ! Y^5 T 9K_Rkhۗ@$ @_r2{(@w iH K5 D*@OAP.$iC(N^-H6[]L(;|(H0A -u D@)T@A. r<#LApD AC4N (ݢA  P, 0(@Yz C $ػàyՇT)`|R(ɂ-<$œXP Г$A60i FM<\)hJAz1ԅ]I)LL@Sd ؂5g]H<`\S&ؒ D7T%HEʸtt$G))B)?h(,hbA` :`O;(=C N鴎"PD|%h"x L` p Ms|2D" D^77M @L$|P7L?TT 8@9)B@L%A..J4,"Mi,1L+T[B?@&7̔A|f@&A\I8[N-BDh# @|, LiJOA4̙ҍ\;Yy,N̜| -xdi G KL̐}Df `@yK5H5W\zD(PpxU4x@ )bA`ABPLA@>A] ]UD0Y@V(xL̉@NB ,45@4̢/%\xS@TbB $D?xd Ђp@qxUU \ɒ`%xDhՁxC=5N@L»Kk܀A5+,OUю c \H H >"@ NdID9L0 0CނPLmNBނPGߝI;I>&Y= OPۘɜ %_<;A8Ɏ DNBa>.O17&A@BzC)1;ә:MDIi#Rhjw:8@R>2,N `@ ̜@\ ((BK5DOm,C5@}j,QP둒ؐ GÕiD%郘b)( C'4 a_l-᎝2xC"@xxL)h 4a-|@ $EWKzH-xo! 4TbTXY 50q@%xHh ԈynF3SAV8Sx;40`A0Av93 RtґvtA=,.A(̜np5pG${ D*<^DHJUn1EA-HNû LTr1|B"@Bv1AhL|SA }SrxH@ ȋ|+  @iՂ@k@ +͸,DLX9#~8 dMK9B@ [>X˼  H'zN8ο$覬> % l`@sA>a꘎"L]F@LRAgB pBe=QT3QqHrЂ(I)-bL6d"ły[/8_L಑CryCw]d )\@, %@D(Ccp,iAdiP@T0>ů`1h#^AJ+MDPH@Bny2,GHx`X[*\@PdچA)@A,y,HdC,‰Kya Xxj@8<2?4K TCeWBT~<j)<)'A i5{R@#pA94!#h a<@<6@(C,9Ae(πXJMmBe)2ʁ-lj[vO &+kZt@),K<N(UgucAiX(43bR }qr>L eYRH~ yy=Dʦ3A;@@(V85L@8}uBL~Ű@A\'`D`@%0@~OBJPǸ7<75%@ V%u! O%`!.&Ee$.tT<3f)E̘s&КQM G։}&%0'[/RH(T(6`&- :r/bXÂ7(kb!Jإuw9aj&`"^Eul)ˬXJ@5%@H1]XPȢ,e皚ETID%\Q壄8@kF37Fi/cb…]a@& IX"*@"*|A&!Un;." Xi^pr@%ϸF̯Ƌ Fd`-gK9Õ'GZWN(( \ǘh!! րHhB|B$xnaر , ñJh:@ 8@.r4,+4j,&j V>e6qaVqpP}!PB`?TPK8@S0HVWi)@$HۘRťrX4 BfC"8#!oh+N„B[*TGi%IS Id`){2 Sb2KBh@#@N #RHAv|I"+An*[ seK,c(Ebed6+p9]3!Z("8e YQ6 1-@P p"ZeRFTb\&ıfX׺5j)llVb6d;GF1^|TM{?yu\c=<,| řyD 3Ś6Kj +/D@t5"l{eG "a"Uw1M%Y# 6peP‧#hF<&: CDY_n+`B*EoTa8 D T֠; T.[,-JJ< q@kO)X0-MEBLA+xJT 0$$ZB rFBh`2·Ї>(m8єbԁ3+l l`c bh!L2ZKUx CR/!h)AS } aW̋5W , k'8 J |Rà#+h&G6XI TzadKWn54\n+M&D8<"D` s,\GwOD?qV@K F&"XG}  r\T8hС5LkPߢP(\E.g'" P<$,Zh½p"Eڐ& P(5E0ԋZagTaKJ٦W]e P> :W%4y @. LN`-T&!A"@jqCT!@U ;yZ$Pl!A E;~敗ɝYx6>weBAcA"t<D o,GB*(S95^ް!k V@ p2҂VԵ6n vPܒB1X,!hJ __m0aGY|ʄTOH+Z+Xp\"RXFa#]IBhK(nCf%ZYXw *m%[6riqE*8 >XHprhQW!@ca]ZPxsٰEt C)~>10^)@".x28aI2^ELQx((BB4e QVK\Eb죪kvA&1PӺq@ # i  ^cHJe4BzC"Z0,!@^ ۜT d mh! ))@` xq F*)|闐@߂2 8x%mO! FB9!rK1g_m p!$h E-b17 LcFnrs`=XK-.!dg@CE#z(Tlœ닂k7!()fЇ^x] 1$R̗E{HK6!)pLսMƬ 6AD ,aNf @˒@paB" F3jpkB(!`ta+g$`dXH0@tY8ZZf+E :&!CuZ5VA a6$v &@.> +,Bn* @(@.z>=^X *Z = N]BG&Bl``l6Rf '$ ln&Alr gP|DƄ@DY€36$nD\dZb<&B!М#8!{q C~200`% ,A&@ "@ FH0!/6@B^"n ~NRz" vt@Ĝ {V  *E j"d<ҝ-OleD^b"Ph.򧉠`-$, b`A!bbcp&BeAUQ.€HL4 @H,#ʡ`P1Ġ89B. &LA|RT! .g~ g*%>%fd .! B``7gb'X  !a2!J+54@'7('` ̳%`Êe%9`(2*@2z'ւ@t.E&V KUa%JA,nj!75"B6.ߴ F5@p X d:n`L!L@>Cp!X6"bzkŪm4%08=PA4F`|TQ+@hK !)$pcf4K*_ڂ b&% 'tLG \(l_E`!Qpa $Cހ&,e%!@SDZ8DC,0`R:a6Po ;b@4 B' 6 !.hmJ!J!#0" 8>1G%!TbU+PHA/9{R*\Af ` Mb.JMW0+, JQ`b%,fNQ! ,\]8-">y@Zd>"F!xBPZf fZ'A D%t,b"k8 .>8>EvIgpb)֨Њ nZ5.YX Hi6-*~@ h0`@FuFDN0s%,JDȖ @aba6!64U"$,$@*o: r^ VZ@x!&bs (.!daFAKC >I vC bMU!`&D^$1d&058eɈ & uvkB 6aG@b`H`tIi"|R +e!!|0(tx-b,X_b.HI)vId>oX.% dBj *VѴ^c㠡R^g.-)b4Vb]Y*bl˅)nu(4,d$nOE%NCZaG%O.-ba%a$*xAe(!;F07W--‚l8V߆֫BH<آ-,0"dLr 14qj %p!{s*[&A;,+ 7qTv \bF#) b][*n"6&!-b!\JA@]AZߠ4U!4"%hC# l'GX"Θ?V"m:ehH*xbad Ii~b rd'plaIFW]BѪk}wftg`+MEBQBED|94B'+B桯@G+3" D>a i?A ڒ`&^ M%+me 5(\ZAAifs]D-" i(\L HA*^~p! bRۖla̓SLd J:!V ؀DR%%8 >P %ڐf Ijb>AVA R^$"8Tzc#;B +"`Z B5 zZ 87z.RW.{a`hRE/d],~,|B$`ZZUt{ I"9TP_R|dd -dt_7?R:L(ڀ2/,hzc/!PND0pڳ*F%@`l7# n`\ ʁ' ~ݺ&bC U1]s dNObVZuz!z$|gUQC[% Za,d. Nh\B&h~ dV{h¬\AR%7~9 r^9ā hR``Th}(>Zh^eV%îD,KbD@r>Ru[E] x _zp @J+>"U58 B4.=@EH<@lP' ((IK$ J88GA(  Z8x`1#; Wdז䌛mRSe.2jI~L +['d[#ˬ!C&Ksl \xp"C`IJ3Yn5:HW>(VYOB Ĕ <7bOb4$#a4Ii |bRT4SCveQ'XIN(>Phb-Ul@ņ-A300R+ @A4.M[/vB2'&da%wfDl(3`@s '|:bPAE)N'L<- i<#*:ĆuX *e0բilFB-laI5]3L 1o:F%r uŁOIP`@I  el%88͓d!e``# {hS`fȎö́!*Ai8CrZ(P(Z=}@Npb`95:fUDp`y}@gp2R=c.kp b$)\](Br Q@S(J-y!%4֡Hc[I'#Ԑbk#$3/܀r#V Ƿ2TID.**3b. 9 @#Va0,js ZF$_!6kP% '7#mC uϴ%&6AD0sGW@G+n k8AfV"V'E92& 15IdA4$,a ](ك@bPlg eP |g! k,-!tԁN" $H8X AB h0}@Jǚ%+ܸk+m,%hM0LT K>1` pf31:ASR!9ephZrt p@ vGak AOR9Qh3S)H "185Aj}3o!P z w-iP]Y>G,P?[HP2̱gf"Uz3g  7V ;1ZE@ 0 hp2@|z{Xo!eT9{ c""0 %%%a+ ^)F*Uh@u2u a@I~E+' \zlT0 @5o o*8<[q;5[:QJns5LrQ5Z|* C EPrHL9\Ы`0LdPː'1=)iP,l@"+fJ88d򭟄Mp0A`uhpk3)r\Qo@ź1QW+?`R@ 2) ]0 Xi ,$10rpɱ#A@ `"$!uIFQBA&*gp)ɘ0G{p*@|]$ #l0K F0)A8'} \0G#&5ҹ`V1$N6E@d <L6e0<)as@DR]b-(,e,ei9NPst5ٳB @9v|ԾX,rȁ g! <ʲ.XiYn1bW5ꨃ< *!7h(@Q9  AamP1<`7I.QYpH(Z0s0ACq2Oc&%8ЈPurpA548&Ek&8g=1 tP @6`@x3:Ǡ*0F6a kx8p `HJӶ~AkuMX x\\1I',r^/xL^ч<@ADg$3#M@!vMl $YFf|ڑyd3D*2F} (l 5 e"| ]—4IRq5`+E[CUyƕ N!{TR>ϰ] H$ a30'Ng@Q2h)!D*>] " TDjPgI(Y I0 JNx={D81`#qAP&^ap( -^MQ`E#]ijt-glv  E8Li{Hٓ^bs]<#0;Evq8ʹ c2Yd\N(l=ܰW|\xN@^P.l(-$R_eqQiD P4ՐHz7fʚV#TF*a "K)2 Bb 6dy~HlW)B4"ol*נu$e6SD{+:5•ZȍȐO`x0`@ۅdXY"0@aa.r` I ؄cXXa$ BȟС~[ ; #80x,#ʍ2::\(Ԙ` ]PDʱшs8N {S$K`KȌȂ͉(M7x9H2bx» *) 2Dx $Yx0xh?+bNs=&>?aaX8c)*: KpxHM  K#xm(p )?6A5G7,B8^(Q)4IS;-6ᒝ膄{8~00A÷O ,* A}dđа0``:BQ8A!r7@dU-I0| Rg8/S: -xXz(a1Q[\7W(є$:Jtyz z9,X{6p1. qX b 6:3̢8̱)̖{{(\(0 3 XA y2$} 9K`(J~z[)Sh.PiD:Б)+]q9aEP@ ! B T{! (ee8ARzQb)NԘHB Ü6y0,q:3Vi*Bl?+ T s} % ȗ@y$|c03ώ06FWCа"?{/R) 9ELo0$L;h:hiQ p.@!H;=p |`[/XI5xQ$9 Zsm@ܝ2ڑ0{fb0? 2'}q# ""@m`*T}/ԕ=؉9`@֑h+ S1`Z؁ dCmز00Nn菊`mBWL!Zxɱ?eR|V 9xBCOkЀJR) ЀXH7ȇUGӂ)3`Pq$X aW EP6yшd /kw- [,9|dO9墬 p7L9Kېh+ב i A{}H('(YIْ3`A:@\9S^@ @8ȁ¨=u (I[کu3@z,"`)AJ^q0s0> PXaݑ10m`>0p:/}`3 w s[2ގӎ(`9 LW[6hk\ |0tT792(zV %mh:qS#WڭߕB, .QɌx5=W.ɑ&;HFW05 l`"@ ڋwX5`aد ,؉OK S|"x|e L;libvips-8.15.1/test/test-suite/images/invisible.ico000066400000000000000000000003061454007373500222770ustar00rootroot00000000000000( libvips-8.15.1/test/test-suite/images/logo.svg000066400000000000000000000111341454007373500213010ustar00rootroot00000000000000 image/svg+xml libvips-8.15.1/test/test-suite/images/logo.svg.gz000066400000000000000000000044301454007373500217210ustar00rootroot00000000000000J]logo.svgzKo[e./$ dM2A IP!Җ=>C8m̮:u?} _6a0 ?>j`~q=ڜi/ER?K_^sxO=|ƈU|^ݽ?}]گ}W&wz_nw) .ݞvǦx8qvr%m޼?£U:<}}*X_f]X)l*?"iJaKF`?l%;u}q0fr5Xv'>7yv|` (Ʌ:Rip~21FT"l Ҡ1:pg,f y'_RHRaqι00l|B lS8 0S 5f3ƻrY\1渙]I2* \jmO߯壝)->YکR2kvPzm-H1%5QqLw.]z\% .RE` )+V5D6bn4Q!+Mڵ5<\BWkl6a}xr ^AC*]E&uy{(eIU8Sye`MNV rɽ!UfVGHW1tmig)q^nM&'Eo;$Ӥ 8hPMmB т0i~Ը\ptCM܎*DjI{Qϼ1^#rHYatpE qnPn0׺[ע:Ƥ#xC8m̮:u?} _6a0 ?>j`~q=ڜi/ER?K_^sxO=|ƈU|^ݽ?}]گ}W&wz_nw) .ݞvǦx8qvr%m޼?£U:<}}*X_f]X)l*?"iJaKF`?l%;u}q0fr5Xv'>7yv|` (Ʌ:Rip~21FT"l Ҡ1:pg,f y'_RHRaqι00l|B lS8 0S 5f3ƻrY\1渙]I2* \jmO߯壝)->YکR2kvPzm-H1%5QqLw.]z\% .RE` )+V5D6bn4Q!+Mڵ5<\BWkl6a}xr ^AC*]E&uy{(eIU8Sye`MNV rɽ!UfVGHW1tmig)q^nM&'Eo;$Ӥ 8hPMmB т0i~Ը\ptCM܎*DjI{Qϼ1^#rHYatpE qnPn0׺[ע:Ƥ#xm6I$"$!ԙ ins@;IcPe ~% do 7@ػ) gB{=?} :ݟ)^@2"ec~2:c d!VvY5aLiu$P'a SE*"QH?ߧο-+Ϩocuj36s'McL<('QB@}hɳ112|첥Kx2C h,T/. #-Uf$¥}?0עrl ?UYvo̲%r}'P# ibdOIsuGQPw—6^J MOOyDv0!(;,Xl}P&o3ϑ?bhRrQH ePP3;u逛;4A/ dld߱禆Z(k HJlLQ̺Wwr]Lk0(?b|#O`MqrkmD[xD6>4[9inԋfeۂ|MQTMϘ{[ 7ץ4ªpDIѻ:9J?0xhckUB(X(Hrp\ͽ.Y9Wsdժ/Ad+$%gf39G Y6zkµk,whg4?B!]J*׃!D'l.6HCa<6|nEX]¸/?a|@Lu8EcڳY?U^J*w(RV9W^:7k5=v+s+5EF!c=K G^5d#OŲfh$RC}A'eeNCFx8B2 <_jZu0t(0{5%)/lmt)z^/v4X 7tv. Gɻ) 6RQkבW9Z?_uۢlr.ɫ#^ [9f+qm6;@E-EO*J\{qTb@ߥ[ydQKc+/65Z^Z&B{[mc,_l°%Z@Y|g@j&_yj>MCks/eGE֣AR3|NVaϷ`!=II]Tysg+libvips-8.15.1/test/test-suite/images/multi-channel-z-series.ome.tif000066400000000000000000042331031454007373500254100ustar00rootroot00000000000000MM*' EM(1US$ImageJ= hyperstack=true images=15 channels=3 slices=5 frames=1k" Gl#Hm $!#%I'(*n,%-/1J346o8&9;=K?@BpD'EGILKLNqP(QSUMWXZr\)]_aNcdfsh*ikmOoprtt+uwyP{|~u,Qv-R w.S x/T y0U z1V {2ˠW|3סX}4Y~5Z6[7 \  8]9!^#OME Bio-Formats 5.2.2  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#######################################################################################################################################################################################################################################################################################################################################################################################################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888889999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````?%%(m+ +(1+SIImageJ= hyperstack=true images=15 channels=3 slices=5 frames=1+/,.0T2 35y708: ?AzC1DFHVJ KM{O2PRTWVWY|[3\^`Xbce}g4hjlYnoq~s5tvxZz{}6[7\8]9^:_;`Ņ<ʪaц=֫b݇>c?d@eAf   BgC h"#%'D(*,i. /13E468j:!;=?F@BDkF"GOME Bio-Formats 5.2.2  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#######################################################################################################################################################################################################################################################################################################################################################################################################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333344444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555556666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777778888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888889999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````?JVJM1OO(1OSnTImageJ= hyperstack=true images=15 channels=3 slices=5 frames=1OQSaUVXZ=[]_babdf>gikcmnpr?suwdyz|~@eAfBgChDi Ej!ďFɴk"АGյl#ܑHm$In%Jo&Kp '  Lq(Mr!)"$&N()+s-*.02O457t9+:<>P@ACuE,FHJQLMOvQ-RTVRX Y[w].^`bSd egxi/jlOME Bio-Formats 5.2.2  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#######################################################################################################################################################################################################################################################################################################################################################################################################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444445555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555556666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777778888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888889999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````?ooYqtt(1tSImageJ= hyperstack=true images=15 channels=3 slices=5 frames=1tvnx%y{}Jo&Kp'Lq(Mr)Ns*Ot+ÙPȾu,ϚQԿv-ۛR w.S x/T y0U z1   V {2W| 3!#%X'(*},4-/1Y346~859;=Z?@BD6EGI[KLNP7QSU\WXZ\8]_a]cdfh9ikm^oprt:uwy_{|~;`<aOME Bio-Formats 5.2.2  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#######################################################################################################################################################################################################################################################################################################################################################################################################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444455555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555556666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777788888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888899999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````?U](1eSImageJ= hyperstack=true images=15 channels=3 slices=5 frames=1{2W|3X}4Y~5£Z6Τ[Հ7ڥ\8]9^:_;  `<a= "$b&')+>,.0c2357?8:?AC@DFHeJKMOAPRTfVWY[B\^`gbcegChjlhnoqsDtvxiz {}Ej!Fk"Gl#Hm$In%OME Bio-Formats 5.2.2  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#######################################################################################################################################################################################################################################################################################################################################################################################################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333344444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777778888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888889999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````?}!(1)SܠImageJ= hyperstack=true images=15 channels=3 slices=5 frames=1?dȉ@ͮeԊAٯfBgChDi E  j !Fk"G!#l%#&(*H+-/m1$246I89;n=%>@BJDEGoI&JLNKPQSpU'VXZL\]_qa(bdfMhikrm)nprNtuwsy*z|~Ot+Pu,Qv-R w.S x/T y0ĞU z1ПV {2OME Bio-Formats 5.2.2  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#######################################################################################################################################################################################################################################################################################################################################################################################################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888889999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=======================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````?fݥA(1SdImageJ= hyperstack=true images=15 channels=3 slices=5 frames=1q(Mr)Ns*O t + Pu,Q "v$-%')R+ ,.w0.135S7 8:xc?OME Bio-Formats 5.2.2  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#######################################################################################################################################################################################################################################################################################################################################################################################################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333344444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555556666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777778888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888889999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=======================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````?*i(1S &(ImageJ= hyperstack=true images=15 channels=3 slices=5 frames=1 ~ 5 Z6[!#7$&(\*+-/8024]679;9<>@^BCEG:HJL_NOQS;TVX`Z[]_<`bdafgik=lnpbrsuw>xz|c~?d@eAfBgChD²i ɎEγj!ՏFڴk"Gl#Hm$I n %   J  o &   K   p '   L ! " $qOME Bio-Formats 5.2.2  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#######################################################################################################################################################################################################################################################################################################################################################################################################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444445555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555556666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777778888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888889999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=======================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````? & '- ) ,e ,m(1 ,uS JImageJ= hyperstack=true images=15 channels=3 slices=5 frames=1 , .B / 1 3g 5 6 8 :C ; = ?h A B D FD G I Ki M N P RE S U Wj Y! Z \ ^F _ a ck e" f h jG k m ol q# r t vH w y {m }$ ~ I n % J  o & K  p ' L  q ( M  r ) N  s * Ș O  ͽ t + ԙ P  پ u , Q  v - R w . S x /   T  y 0   U   z 1   V ! #{ %2 & ( *W , - /| 13 2 4 6X 8 9 ;} =4 > @ BY D E G~ I5OME Bio-Formats 5.2.2  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#######################################################################################################################################################################################################################################################################################################################################################################################################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444455555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555556666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777788888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888899999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=======================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````? K K N Q) Q1(1 Q9S oImageJ= hyperstack=true images=15 channels=3 slices=5 frames=1 QO S T Vt X+ Y [ ]P _ ` bu d, e g iQ k l nv p- q s uR w x zw |. }  S x / T y 0 U z 1 V { 2 W  | 3 X  } 4 Ǣ Y  ~ 5 ӣ Z   6 ߤ [  7 \  8 ]  9   ^   :  _    ;   `  " $< % ' )a + , . 0= 1 3 5b 7 8 : <> = ? Ac C D F H? I K Md O P R T@ U W Ye [ \ ^ `A a c ef g h j lB mOME Bio-Formats 5.2.2  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#######################################################################################################################################################################################################################################################################################################################################################################################################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333344444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777778888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888889999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<=======================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````? pv p sQ u u(1 uS tImageJ= hyperstack=true images=15 channels=3 slices=5 frames=1 v w y {8 | ~ ]  9 ^  : _  ; `  < a  = b  > Ƭ c  ͈ ? ҭ d  ى @ ޮ e  A f  B g  C  h   D  i    E   j !  ! #F $ & (k *" + - /G 0 2 4l 6# 7 9 ;H < > @m B$ C E GI I J Ln N% O Q SJ U V Xo Z& [ ] _K a b dp f' g i kL m n pq r( s u wM y z |r ~)  N  s * O  OME Bio-Formats 5.2.2  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#######################################################################################################################################################################################################################################################################################################################################################################################################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888889999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````? : y   (1 S 8ImageJ= hyperstack=true images=15 channels=3 slices=5 frames=1 E j ! F k " G l # H Ŷ m $ ̒ I ѷ n % ؓ J  ݸ o & K  p ' L  q ( M   r )   N  s *   O   t +  "P $ % 'u ), * , .Q 0 1 3v 5- 6 8 :R < = ?w A. B D FS H I Kx M/ N P RT T U Wy Y0 Z \ ^U ` a cz e1 f h jV l m o{ q2 r t vW x y {| }3 ~ X  } 4 Y  ~ 5 Z   6 [  7 \  OME Bio-Formats 5.2.2  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#######################################################################################################################################################################################################################################################################################################################################################################################################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333344444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555556666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666667777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777778888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888889999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````?  =  u }(1 SImageJ= hyperstack=true images=15 channels=3 slices=5 frames=1 R w . ˜ S x / ם T y 0 U z 1 V { 2 W |3 X  }4Y~5!Z#$&(6)+-[/0247579\;<>@8ACE]GHJL9MOQ^STVX:Y[]__`bd;egi`klnp<qsuawxz|=}b>c?d@eAfBgŒCDZh΍DӲi ڎEOME Bio-Formats 5.2.2  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#######################################################################################################################################################################################################################################################################################################################################################################################################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444445555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555556666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777778888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888889999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````?9A(1ISImageJ= hyperstack=true images=15 channels=3 slices=5 frames=1_;`<a=b   >c? d"#%'@(*,e./13A468f:;=?B@BDgFGIKCLNPhRSUWDXZ\i^ _acEdfhjj!kmoFprtkv"wy{G|~l#Hm$In%Jo&Kp'Lq(Mƻr)͗NҼs*٘O޽t+Pu,Qv-R OME Bio-Formats 5.2.2  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#######################################################################################################################################################################################################################################################################################################################################################################################################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222233333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444455555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555556666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777788888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888899999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````?a (1 SImageJ= hyperstack=true images=15 channels=3 slices=5 frames=1 #  Hm$In!%"$&J()+o-&.02K457p9':<>L@ACqE(FHJMLMOrQ)RTVNXY[s]*^`bOdegti+jlnPpqsuu,vxzQ|}v-R w.S x/T y0U z1V {2W|3̡X}4آY~5Z6[7\8 ]  9^: "_$%OME Bio-Formats 5.2.2  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""#######################################################################################################################################################################################################################################################################################################################################################################################################################################################$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((())))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))**************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111122222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222222223333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333344444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777778888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888889999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<========================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________```````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````urn:uuid:bc26e771-02ad-4473-9f75-ae454861b991urn:uuid:bc26e771-02ad-4473-9f75-ae454861b991urn:uuid:bc26e771-02ad-4473-9f75-ae454861b991urn:uuid:bc26e771-02ad-4473-9f75-ae454861b991urn:uuid:bc26e771-02ad-4473-9f75-ae454861b991urn:uuid:bc26e771-02ad-4473-9f75-ae454861b991urn:uuid:bc26e771-02ad-4473-9f75-ae454861b991urn:uuid:bc26e771-02ad-4473-9f75-ae454861b991urn:uuid:bc26e771-02ad-4473-9f75-ae454861b991urn:uuid:bc26e771-02ad-4473-9f75-ae454861b991urn:uuid:bc26e771-02ad-4473-9f75-ae454861b991urn:uuid:bc26e771-02ad-4473-9f75-ae454861b991urn:uuid:bc26e771-02ad-4473-9f75-ae454861b991urn:uuid:bc26e771-02ad-4473-9f75-ae454861b991urn:uuid:bc26e771-02ad-4473-9f75-ae454861b991libvips-8.15.1/test/test-suite/images/rgba-correct.ppm000066400000000000000000000300651454007373500227140ustar00rootroot00000000000000P6 #vips2ppm - 2021-02-27T15:39:39.437028Z 64 64 255 þ~x|z}~}~{xswxrzyt}{zz~~~}wt{~~}~zx~z~z~zv}}{{x{{~~y|z}xzv~|}y{{z|}}zxtxysosxsxyu{}}}~yw}zur{~}yz~w~zwsy~}y~{z~|}}w|}{v|{v}{}w~~vovzz||~uty|~zxrv~yx~}zv|xty|v}~rlrysx}x}xsy|z~}|x~}}}mfn|v|zw{~x~}y~}~w~{uzw}~}~x~tms~}w|~ws|y|tnsqps~z|w|wqw~x}}vzw}}uz|wzx~zv||w}}x}zumstnu~xyy~y}vrx~|}xr{zv|~yvzxu{yv}{v}x~|v}}xyxsxvqv|uz}u{wpuwqwqjqmgmރ|}x|w}yu||x~xsxtpvy{wz~|nhnqinՄ|~z|}zy}tqvrpw~y|v}}vow}{umstmuxټÇ~z}}wqjs|x}}y~}x}xvsxysxxryyt{wrxyt{rnvyu~qls{s{Һ°†}~yzv~z~w|~}}wrwpkr~xxsytmt~zyvyyswyľʼ҃}x|w~y}xuyxqz~xxsyz}~xz¾ŷĿ̺˘ws|vrxzu}{v}~}}zw~tqx|sy~u|zvmrshn¾̡{vqow~|{|w~~x~tqx|w~}qoujinxu|~ywrww~|~¼ͤzxqw|~x}ytz~x~y|x}wrxlim}~ľӲÿ˨~zrjs~wy}w~zplq~x}x~onsrlq~v|ջġ«}u}~xwswx}v|{s{ysy׽Ǫy~umuoin}w}~xuqwjekĿչ­uns|t|}urjsgbj~y~ϻǭ}yvxxuyqls~w|нƯñpjp{u|ýɳlibvips-8.15.1/test/test-suite/images/rgba.png000066400000000000000000000514641454007373500212530ustar00rootroot00000000000000PNG  IHDR>a pHYs  ~ IDATxk[{qg{bUm6*~0`L<@x`5 )IJR(h bI#{Z9qØ{Q=k{֚c9}_u]σ1ƒS{ǮFk,[pXS!‡q#D?0BHRJ(-RbBJ17213!PZs@ RAb(!1B@ RJj!D Xe(edrNd9C[5Ȁ 2ZJBJ /a2"is_Kq`^fN Ϟ>pﱬ i놶{]{ncF,J+B_O6>| o'<Ox=x{>| o'<Ox=x{>|_6g> o63YJ? 朗M#/]hhcP:*Nm9%399? xf R"焔"21"ڵuC߬NBH93so3_@h${PRb':B(UJmK)E)uRJ/期C7-t&l KR& [`1%$Ķ._B$ڶoea<9<*%,Lqmb$u{)%i俹mߕRo r&'2m붲+9[X)iy~ۖT`[&$TnT_)_' 7qQ'b!).ldq:w94mXy^B` m$gbI1a%LDDi^VRƹcQ&Xh]}m/FS78_ѵ7n*7x[V:+PJMMR j]VrEʉ3JLJ m;G@ND#/k")?᯾uĆtmKUUTChm֕yI!^*^@&#D3B6b +ioRH _Bba+Gòڦ!Ķ,H[YJ)F<6RH%_8=b<PM+WE$4F#`YWi9GΠn!8 2(PF+\ ȶyBWШH)T8I9bI6s"8=1[2_RA!;ovi>Cc]`YWhR!U"94u7t R;ra!AkBFjMLF疅-8b D?}<>R1`{WjeYT"RJR x社E(V ^nUqA.S$ļ)!%RHA Ah}5wr $ˉW^bd6wh)q>CDiC][b 3W,OiiVO›^_i޲mFRkzMEΙQU,%JiVB 0a[7(+ޑJ#H!d2:OH#]OS7.lˌșd[kl*& yT]pOUYn=FIC%${뺱L31b&%!G(9o7|J̲\@еM]c47M:R_WD H9mi[*[Gs"K!A)Da L]}4ϐRqDI n𤋮jK eж-Jw`$ȶͤQU A #: rf]V!`%ZK,1u] 1дM1sau!䌔y*̂m@J@HAiCΙ4șiRGkENoAD3/oz19α. 2b.ΘhY{T`ss(T90ژDʙ03Bbdܶ r. >xa`J9uCc RJm6/ +cFWa說QJPז2xGyYmBpnt: 5Q$1_ц%M%)&RX['W(eX"НoY$ PR ƻHk3 ĜB6*?]_>s([Gk R+Dy]ޣ&X[Q 8_.<<4 'PZn3!,}7}7ǐ[uaVhQ.3JI"9-mFiꆶm/8À65|W؜c^VN {i|똗y `ss{Ke-1&y!@UYrάJ ̗%2]*g~@Uot?!mJ%]Ѵ-pcΗ 0@.~wJ9A]mn߳%%m,ӈڒ2 F+Rĺm5Z)DYJEmв 0^6̵4\KE 8.9got?F!ۺ#g)$J+yfV3)/+Zin=m;R(YeY(B)c540 ݮy*UE- m]rJ;#26G<4<)&R e=-Z)noaLżxϖecFM/!dNetK4;pDk4M9cZeYƙy]ZBp< @JRxx]bGBH8\e]9<< 4x95]ϲ,!H ۰Ja&yFrR}Kc5~{ ÿ,SRʯzZGhۖkAJܺb۳+wwMqBI:Od2r ӟ4!%y"1dnnqLJ+ڦh u"O@hi)2m `FB()E#뺑cVBSXSչ)XM}Jo 7o$|*ڮECʙ#\ldY<)dk (r=.(I e+^Um+R*j|({ʥ\ %5m=ә~ȡ%/T` ,>&@#7v}òl wOgm'[CFw qG+EuLp}nחTbxs@M̂h)g1CB+Ͷ2I!.Ҳ;R`X:\ˠ(m uݢ& u!xO]Զ٦e"HJ =Fi1,UǼmU{>Q~RJ Ķ:BH(%$N1xRp z1B.@OݮP/1ckvF[bY2Z Sy۶x{KԤ\.e}XF?rB ۶h9 gAH6!%J-+O"7ں/3ޓ/iqOBihòۑbVmRa+î6uUiR2V"ӊ~TDc,"ApԶB ps<y1R4X["XzJFfBbz:+AKENC EߠjCt_fiڊi] iNU2<b ȧ?oh2L7ݝ/Ah9MKNalYyZPTVXW~GѴ RTMK۷hm?S/ PUɂ<ڦ_Y]cmMRIRW-uSs.PyJ{;yG__O35ư˅dlIz  _׌n75_RHiwH)91r8 3:ۛ[c-*W|(`}s<>|i3"Zv!F֢M/#m۠xC׶Bzpi+B?ܓStmIZinjv}GJi_++Zq:pYoskK_͕Z^maPиeAn/,k/?D)ɶnuK1- q[9k׶8BL̺T-$U"-j^.#)̧?Ƿ gHm )܆;]9u0Ĝ8_N )wFJY<؏H/_ 9|%9?e2).W\jjҿ%#HdcFL ڠqwwO1FhL]ͮ 45jVm.gs8eF&| }bdօ>Ka0 <Ϭ᧴m% QH]]C urU1 oe.̛ؼcNJO?d񛇜^lUJ: <`mEUP化×wQ)(WG4{mJ#(\xR܆Tw>n+nc >2M*kǁQYAm==7#9A1&x>Z~//$E?CUESU]Cnnn\.x籦*ΔXipx6K2w29;hF|i <?9Dl]1N8b!ȐDZ|l0\=޼KR#; B*7n]IUYRH4uaܥTq!MO}sߥ 9ZÛSgO$8O )Z5ְ,+۲¨H `svЦ@ABk4]۰{ҕ캞~GJ#8O Jd%[on LuH)Ƒmۮras+Zx<"u)Ms.Ze3~8UuS7MiHHyg2ysHx)1kV_!j<\H)Q-]/wTU4M8쏬yׅov2hnB0#y~ǺR:u |pTw=cd CiyEII]3󹸣2c/e!PBp%F}[C nN网V7&u=7{<\Ɩ tDz_WHQZ;{=yxJд "׵  ]ٲBwX"<~n 빽yTzp-J+6n)OCӴ|uǶ9Ǜ%Qq_őuZH>@uysywT Qȟ/̛}@py<,xhmzÁEwpၗ/_bfۗ~},4opnr\>2R(U<v=Yex -!%nnn(ewXr˭LJ dJ !fYEt8Xә4-SeyZ},i.m.?[tMOHc-9v a` Ӵ=Zy1vMt:cw>Ųn Pd{JHrLsdVB@6vrʦH L n_:cI)mf^XW"'AȉuR>{wD~c stmR ߬11%EGen)bq}\m18?pF" "o؇?K6O5]Oe,kipyeYy.:P~ON ? J;gRs!, h &%Xz(a#Dt_wssOSL՛> bC"!T%ۧlŲm'51\dٖ!R_ +q%ɏfe 5Jqg* tVűoU˗ݗͷ +(C?ӂu˙v} "acPUu{ͅOU]CmѪr+b )jZ|H &lP75?q9 W1mi<ӵ \Yph\d{PHnϘ֥\uUBIƒXp& [1,x$]! [) 1&R(#ZCh-^'zGߔst s.$tuTu۶ mOLmy!00O/Hm]I$4N3Rq(5TE&*v}wtmZ)*eDeuCe x߈Qr$gH za~XוGsxrC 'eD9o ]C+K۶he}w}. k^pޑ@. IDATԦ_Nȩ$9s'gn~ ]2ME³'xU݀%QR/XI, zS<<ܳ2ok>4r*΂aDNy޸m{58ᯖ3YyLe )b̸Q#(S>xRnyx89~eRPۆ0$']jjc.(2/ e&*Y #mC ܿ|)wu}wr;]ە cZJM[ktX ZGb!y(iЕ%HӴT\,aB@MLvWuEL]+ͪV۶3ˊe$DX4}e-hYmR,x$TYN6Jr BGY$ Xkl] 骧>bLo9S9xM7~j,%<Z2pui}`VBTUkb{$'R 2q&qdRbk{u+HiqEKh?[=F*"fWBHueF;ڶp8Gruݰ !R5|gY9X :Q7 Y^65G2n} ;+_B$ j,4qӧO9lR ""\Q3Xyuw˻W,h]}ݴ/u!3\e^ 44S ұLi)>彿~vywI~MB o7EC1 GjM4e!RiwYyx<|> їǷ3O3V|!:tO;4=R un=BiEWpu`!M۰sIPLi, JkBLY lVɺ9>xXm뺱aJ)W!_3{6q1F3^N<]6cJ}C`ud]Om-Rgu0`G1ϥg=9g^ݿoOOm֊w|;E3(>Du֬L!PwG|9ϋ!6tmǼn,Z$ 1EOSW竺v}2(SlC 2*k bu w%R) (f9Q[aC.gm#!?m?/|{r/AJ餔.ל,Bs!>_ee'5Y@,cWf}`&+:[5]Ϙ.|jmœ'Opqp"8ښ_ݣmkri,╞2B,.U#2D 2MIw{0S!BtuY[ tHΉVubijbxJc̙ql,#1ƿc_hGn a]B:ܺ1\.uMۖ-fxBRD Vnϟ@yt{ֆ3˲R9<77mCm9 rfYf*lbx A $HJ%S?/U4-hpィtij2Fth9_N8hy*C5p~. 1'{.Fj\N"l 0Mwww|泟!)1-ESlNgɕԵ՞9w۶~W86= s.0oo8 XtBu^?rg g!x83}<4U[Ğ "tnҮpe57b\9AiIJtmW|>3^e&+6*2/eR* |mxIwŧى@]k*&AH*]/Liޗ9 9aME&!$B΀֖-X5%@&\2:tfdp )491VU4/2ڏ+QF\{b[gU=~rW/VRLW?~E{:sxأaF˅w>aZ&șy^e닱 ASJU{a-8q̧eA]Rm,)HewÛyh)&XlkֵhonodidTIO@]U(6!J)k'uu N۲w)Er."tR[{R%!L4#+onn]?6qT_vW7\<SQN8ΞTԙ )3-{[hq8쯖r[jrqZ+'qDR,[R(X2Z]-oni^.Gz, 'R"2WdBF+M]5TU/8~cyo[*% +]hC6H%$4 st QCypGʨˆu)Dp9s9?օfP4 {e+Yqk[nnn !0#uжMm"_hmຮXm܌P rz2N?շhL^ l`$J?g?~{R-Vsb*OU/"_ʂ\~Q\9B/|Go{P7>z}x/ﱦtɗV{uEB !b"2HP*|Oi)_븽EOߝ.bq!)Vnqӂ%p88X )겢h*IDi)vLvaYTJ\__I jMQVev<g"끡i:]l/۰nHP%&3n1EPsM0v*9AwXB.!$* [p}}MYVh4|x==Mٗbr.^.bismpYYrWC#(']h8OHh? XϿorU"zݿt>==Q5>>)k>sʪt8P-)Xwx|zmZ1<<5gehmӏزHbO?L,feqS ?bA4 10=2V]믾ZǏO E( RqZa(ǧ'N<03PWc0Z_I'֛-/CR\%Y+)i;D-r4􁢐F8|obvwlP˲,R5eU(!Rˑ$}jO68 @Yw; pWbےr3Պ_~sGn68|ssn IA;a`tHֲ3uK5/܈Ñnr|~z.6(L#%EU6x?}A,ggJ( MKQ55W<ҜwBHIJ+"H d g\a1 }nk Md{@Z])i[Y;B/*kgb`T1.|7U+ =2]5?j[޽ ?#nXmwexyyyOӴEA]5r$QݱEQuU_d{6,1͐uPVo-}o߽,ki<զ}R;Ͼʹyp\*`29B(L7W$ .ˢ*$e%Yx2*2o@It<ʼmC`ۣ%}703{65w<==R(w A[mWUo3*PH1077I' >s2IDgCKښVJvgP32#ȩ tCY&rGQb&BJʼ5F2#ĄVIQ?PW Jp6;WOr7ugST{~XfGY-D{8bznj5jMl] $l7<==ŝ3]Ƴ[W]qHQ8///'/gݶWktQ|^-J%,iҖ`:ߧ*`D \%%/[#A$H* ^3JQ5b;MڨlmuCcGqA-KL&V2aG/NUUu[3/ ӑSSbp>zxž{ ?~r=3{O(3HҾ iG˼@j< 4=sN2ql-]-h#t){=vuKŗËti "IERHj(J‡'U[&n߼*捨HTT:Q%;~cY_)(+i^m-cR3e$,T> ʹR7Q{lY (-/٧Hg#scJ c\mVx_Izv69 }'|ZDC/"EYis"焵ܝN,zpo9:NJqrNy0\NG ^ )#42#CQuaIs:_جV{8B9^GBV̐"'2XUp?︺fQZi(Em%󥎶' Qqv W !? V7£>5r}Bh^zu>9C܃$x/h%jFq fa1=6gQY)PhCa%p84.sus oz1fFJeF ;^xxsG??g$~K c/TJ9od+?1r}uEǏ(L=խu8+G|Zs!ƋBv`z%ëJˋNAEVO<2;r`v]X6zd!D1y1~#cr"dToY1O7(J7MbvBO'b&)ELk-P)Q| \PӐ͓s@$RJew78iIc iJؔ4Ñ77Nz0l;fAüLSV{yfՊjtDʦagqk^ 2PSUop};V%rvb?IbY4 DLȑ#u^5r^Zc*E ӨYf%ТIN:c n1Zp6!Rd\L_/ QLȠ]꺢zgN|`/ZR 3)HJ֚e365ԑRdFrY[X'RŃUו abjͪtydg"7(ig|dݬ/7_ _}5u9YRPץqLS8OQzx)FgsU@Vφ2{T7u Ҷ'mYBд"1 (mliIWvNIF I-1r' de(bCdT󇏄e$yxQ$*JFAUCʜ k5sN5;ƔvŁH?, i'm"yf\j7qE! 5U*}&KD}{-ĥ?`L#+(|p]:>Da@+gx˲DEcm) -+ݻ2m* brF,ΣT8ې$I+yA[(vBҦVuEM%X cYBY\xD.)BdfJHHVX ~x`{6kQdN݉n;GY$"͆ۛ{ʺZ/5ˌ 'fByt˩? |МGJ]Z3""ʤZI iI)| #E!NJ-d,lwyVU5_7v!dCs^ Ѯj\ ǧ<iK$.F[M26Z $A\}) IVs35]+17iW PFY ਜ਼ ˷~˛„ ^z3\c! 1Ӧ7l,Ty+')j.t*{ DAPQ k u D6-23eE&Hy? XI5e%'4RUSH6+g70 #ӑCao[V/ŐGζ9G%2K}pXm3ϩEDB4R[Ҡl<0u8Z'/۝@ -ulVy@(P̙@T JOgmJ e !OK)` n*E+$g]-̳J$1l\*%FEUN_|cb\&Lׁ;( Ӆ7x:iSTU),!sqs,Iョ;ǁ1E婞ʳcbM<T>"vPU%?tDC]t]OY+V͊_}5?|=_~+Ze1vY:ARB~GMvDq˃cυ gTf*AB k$N2VSRƽ>*3rAuS~ %z:tVTиꞅZ[ކ>{ <8eNWU|G9 ߺ b*q9oqpt_Z7Wt=\gLޟuSYNGdL3F7 ؇`cvzvY L@BxAvyTFͿ'M;o8ig ״fzgcy763x̛ +^S) jZ[`h΃}JX@G>: R žjE] GD -hs5TP Y`6HMyJ7k{{> G}1Y]v9 yxIZڕ;1yʧ7#Y|l܅ArixخNrVTsOFeIhBai5(AmLKT6?圆|A "`Qx^JFň@2&Rp6n+kdoo/qXf 0.8 I*ζ5;k֪ J@G p7pwd?CN>Ǻmne*7&[ a; SefxUQi#Lq FrVMd-( |&]bNc*&ˬv&PlEnH%nPNUX/8\V&c{Lmj\KH-//j j;ᰍLPyRQM7U\( pJ_Vi*4wײ+%1+=),ߦ9 NE9`O5fcx `&Ӗ/"MȡwȢ\}r#r ą8`xT[x)ѻh ~w ݊tYs(s*d-Sr͸ lXOt߂LwPTE~ KEe8M2x7ZAAa^'q0݇D}Th*3a6w]^|G|p&T ?ZagLx& m%{-[|r .5]L.Z̭~J=GU Lí)Bwܘ\MZl)3ktGaHTin`Ȇ* `/R@}xDV3L!jXA6U$V|m;z7 k4@b]W?М"Q6n<:w 5ҢUZ@@iyE9`Fh2?b&hxB5 E)?/ 4U9-_s!b=p^nS:(=_葮 T&M`x9/'bx sVvhzdԪLHbSBYJdI%p8BUBټRC]ԂP<:V[^{yp!i>:љ{Mei X>ɵh k:EwTF$^Q7D! Q5_DB UH3 ΊzN V#gZV|f(Q`DW!/@2C VWQUSʎ #\~BRLJ6U[Z ʀ~ A]0CQו^ʬ>O^{ɢ\)b[/;c*&TnP GW@y]0 tTA-U@8KdG;0|E.t]M=Pk8^\mcEPSC_+Rx^* V l F鮯rcQv8@;8!ode؟qJ-Н7d$hBܕ_d(IPdG<8i%)kʔen2JdUƖg_s9 ! ^IKrv ene&aftEoW&`,[)`LtUlWcEXіUU5>>G|x1r"yvݜXK\I5w Q( MUCDZp \nBj(؂jj>w>9!\zdg~[fJb?<{ly*̹KGricpU~e3Lܽ<{- +S'ZuV- pE 1X}:;׃.𒤹ÝvJ仾+^+'tfM4F {#~>]U,;L4^_X=RK}/"TzȇJ ,Dɝh=7EtƖףRr'W4V$x\2FQG.4'3MuPLQFx,YkArN;h@?.(LgGNւӂl*O*Uq A@p&l`18B-ar*r\6*dnj?#>y*T֒sI7 Ft۵zqMCMSj īg+ >RN7z>VvGWls1.}|hn{)U=e-;8NV85Ea(JVeeԁb9X*h1YY p |kqFPu);-h jM<=5fS{CR1+f}8U4'CHW< ބT^L$lXU34\&NEp-N{yQ2p ʂ!)YYx# -$ 쌎`e5Om[-\)˒d-XVD>Lg:@FHZOGTjN}Uy$qNثVcv ie<Z6} JJ=ӎQ*($g-#Vt0Shbzݴu;Ȃ/\'luE6 Wf;U-u!&p=ow v3Aˤmt8b7:&:qp>jk_'Dn wroIwsFd0f]EGh2W t P:3k#%a3~1N>qeD y{G%[H l qnS3yQ~, SLRAIx{2 0G30q_k?L8?Nr0'ʮj^zXvQ!7T;^ũF~J6{1*;="Z&<`}&wlcq~5Y V =[|Sۻh&._b؀?춘H7϶C,S|fd(_ /⸬HmYameaCx2崶CT ez+#xX*TtY|;'Ixɞ|$ @XJȖ 'MQLjy0JU1odxn#^n&]QO cŜh}O'<4])ĢF|lgԁSSh-ZUV6X8K.% N =gA~ev9WuIozfSĖ]gaDk6bK?qnȑX\,>S]eg5^o]dSbT/$_%{ӟMbMm_n c`̫-vdyH!b0&:eW~F"1^şB;w1 e8zNHցݠ*1zEXDHl5qΦ`soAL5糣|#1'Z*Xc˸ZXr ǻ۹wz kIu*h6)#rOI9\"[GєX;yRt( ^pdkcί*/7]r vo;i%{@B`<pUґ^%u2Ӊ2v+Ey3>H(:OUO ^R(UQE /:j*:PZZ6=FEkz*w"nIG 2B~7RԪ6[a܁i@Jݰg:`[RkIS#U$̬V-gOUVs4Sc@D@]-K1bcނkP7vV'(aFfMh̞5w=DWjҁO6ח>ˏ!J ).H8`x  U*d}.Q4(/]CkA}μ IDATwla[" {c6ޚar}~yo2Zr `6Kn-HZ`U tcx']&Jz5a1Q,/y36͹ȼqNmqz*" b2T$8/ֳ79Y>l պ :y4@X^kx+oH~f#=f _Ūl|PQL@:\ֿC.Ӆvv?hom'4 5KZN;$kM4_/R^G ]ULFX5!TGXNnvv֊R?Iߪ69yK0YwZ/_."b+;|XaC7{c0fxoy[D_u紓w甈"l}=ZDsW;}yahN` Ⴘz ɿGIl%Db\Nji3R5]$Fl&/ o \;h_GeN7mQW6~<|m50g$m?+F?/,h Ճ7}R&eI2cmp\>Dk>xU5 V6 |6-𵴾l+}־g>aUs;&oL4"qm.J EtQgY eg-S >8U3NpJ: `#=,VJf@?Kf?(OfǷgo+~?!o~[oN^I[Rs P=Tm%Q0'SXXFHۈ I9S=OkqK'?mv nu!gݍ{$ܣZa̦ex~Eq20Z~;xײUx-l;o s·6tg0qTa_yp |Ճ[_-I2 u;-)o+\r(5=T5-pmEC˄e5s֚ﳶ˱S^*4tS?d$^MK[H%gڔeTX' o'_L`&+J-V5.cQq܈x|đM1|@IU4LN]>Y#YUz#3 r)ʚ* ڽ`sk 82fr:7kşVz*{09px 'V%tWSmnվcq^N3n J<ľ/cp2QrWK}w`PONb19cnZ.By?0h۲& ~/nd|̓v:Den ˠ"(]G@n!k53ϑ?z-> %jD?2~KΩw#dTF}rCgȢ?\ ;yRk^)P]& H놷lH~Y᩠-_.m;>m$ O|Y]P' _Ϻ.*+rBe5=yBZsи"`5 Ξ:A9~>Jp]﹭jv$=mST('vDԐߌSm@uW\hl4U #Ȣ8.bxh!z=t5T7 evj_8ˠ3ky[Zř0HS:IHVTgU'ڡ*ʝj5@~ %CKe%S<֖'3bV ¿TIWDma[+AxZ}E[Nnx5P)MjJ>/:3iuPgpX)7Pmgy`{{ xi ၞcݞ5r4sap!# h$7ymhveBfZg0ݵ=C+nvrU6#j"3EҎïp6J3m/)i)]S3WXXN'K$mU7cU2I§\ ԕcxY/"K`9`.޾hxs(Q D4Y$'7vJP7S$5Ye3 8k\-qZ>A69PXb>Ug.v1 U6~kh-a2)'Ҹzfiq0EcW*j Lgtzryp5wcYB5Dq~T]ʵ5pwqވr8YIS(0g$Q=HC ?AIG ɪˆp,̣Vრ!7EhQEoz+l喡KŠۛE]d2/ʀŠ6' jګh`]fI ].z`u{G;䮞YC}wOX:t =RB5Zӊbx+5W}G,=~#gj8Vd h]vf,֪":֑*Zb7}ހPq[sQE׵>x @9QN!~:e&gaZ /oXZ\!3E&#k\R~SĨ-..)}✫{q3sٌa1ü皩"$/v+8HD$nB`Zri7)=IBpO-3Dk@q|Tv!X?Gile=`&+7ZjTͯ a,ܤȩ%kܱU pEGg6=7Da]ĕn}b]5F(t&O+6`.w'.2(bIjVb1xN899Tv@sp\xʀt-C-=IK6JN|ỵjo(7>s'x^ * x|\_dV -DW,kiTs 2 2OMB54g Դ|hěKe:,ί2Imlr-5&g O Cʇ'[-tVuZ ƀ>x>v3n!oDI"فWhw7j>!>F` $5_iZG!NϬQs=qK p5h `NċAO17dP`'RFhbxb~Z0vD絪fCZw 떿cZNPXԓ)qŽ uU3٧nw]M ~GHI"hT^X^q8uInPQy֐7V^XXV <5F\ j.s1Jrkj`ej=Ew)#,a%vQUU4~8d*FE\xxAuI@qYɚnȇNj _ CU 4N"As8R)T즥0E++nC"BƊ06&}{NWjKwkTku6"#IwwOL3i;%|t8?t0" e[Uoz_z:EF{B%լ 'N|* ^S587J<3e)qzn: ^n &;d?G[h!J%V= 6W2]>+F#{W e2zgJi?BiMʋ9GZy`qқ"9_d*bHŗLZ&X&ESi&lcE (?vZBAC7k#[f_%v&ZCkʽkF$l%ǙC(!%O=J1\Ɨk+֮ϻO CSr YګE6`sH҃jwfo[笞>8#1= EB=|nKa=pOX~ XjgU64KI#t,a9[mA]O}*"r/}DY<d]ُJwDžr8yv@#XyZ#_|= W-`UMjӞ8?mP=D?+D1\DV -ᣌUi >?\ktjlU!ué#w]YS!BRc\EQu8l) h뱘.Ǩ@(cE^m4 `|evQ탻r)-Bk(SyN퀫DOpZީ٨=]kodEӑV2 IDATM!A3b|cajuu4#!jdFa74ffCDOv|YQ,$M?FO6•V7߫_TŝTy5vi(E//JbH2d{C)Pw-&Gkyd%b Z k494ΦVث.:Cnʒ/|M sPU@Unt.;Ej'GJ ℨz j16vIԖ 5GOT'FLrא_t)Ic7Z54BpkZm]kK*Kf۝ rZO9VL*bl ).5x5 R:A[;+V#k+jUUɰHP A0 ?Qnzt/P*Σ~8mWQ&(?vCUUh4M*Nבj.y/ 3` mDxLmAU E Ul^.sd1|CPFeȞb[*KtZaÞ{J.[,oHjaJYm^q$}ᤈ5s_3>93eAd?ٹ6CsyQY |aj@M,vDjRɵF&|n46(VJ53ŻS)ޤR9_ VI(,+6ro15-⁖+}M k8N@a=oDsJQPпڅڊ*5 -e3BaF63ňJĨvƬ<p^7 \& 4OyBe/!/>FSKKfsz >!C~UOAq O2*ND;T!kh~Ԫ[}&D6A k:XD]L ᮲*"joWJ2$; {GPWSGE8͘M_g߿a1ID/k4)a 4 c5Dt2 Yn]RK;غU3TY.CqdƨCh0 SK"UTDQoUxt]mo['3:ZJLK}\E\'*Vݼa8Nʬtd )ʉ&dUs,6Ve ꀚhIZK?;:&dL>YY'γ`t ,Fq*Za!YKA?d ]dóۍ'7A@[vX}mO]&kWb|l%g`Z$~l7;⒜vAUTRڋg<->jGe#yO x&\خޡh&JtaNpB͡, BwϏ)]Ru-|! ߃٩Y*vO^.7#jh(5egP[4-y{4TP 9*Eg"oN2㸱t42hCwEΠl/\dLJٿ~ |SSr:u pmvK2 /X'OGra=( ə*4ce]!^\r:)&ғEE1@N2eYݏi'o4T7ŌzO\-D>@/a_G˻q;%{C59a%K[exC΢j4#zp ɶ>6,ޝtVX2P:$w*Y]fmF!)[Ύxm&c0L Sת\WH+⡡tډ꩖t%}҆Xje&hmx٘xtxFU p< mWm7;7v_>x C)l/i1|[CSqb{@K]t>7U:2ju ǮjlN-,Imw"gɢ۹!W"]=—Y<9Q5bO[rӿ>z9T<6n'py_o.AJKxGFߡ]ә?b˩ɒ`N;=ܵjٻ:t] YwTP[Z*)F_AYQ&:dv9|gX4Fdɩ8Ï^n\qiIf~P9ŧ312oP/UKev 禴EE]$SfOKif[ K#kQd]+-_GՍC } 6 [lF+WP:v['b/,`Y zG׮$V N\ HMk%[3Y7_XT.v _ tMM+T-QrpJ ѺxNŘ]1zUF5=ٚlqӊwVK !O-J#t>jeiO_\b W?I5RGܫ^EaNxW 5 VWEl!$j6Vk={qW(@_2 +tMKѶncoX*Jjw.;l%9Z84: B-BSXftCYNm$; w!)le4+a{akNs;۫\3C<\\bRciqc؄F٘u?V?5X`%t q.#!0' j;Z/OLʱr7ێ^ O5\X;3ՠ& ÕuTTN_`{cI=4ӵIUSE?br!Z(>Ǹcl~ͤyNFЫh\$"!HGeدhS$#3YMq "QY+d;9`􏧐ހ$B޻aT$.xwE& (VOF}Ž ݃ yb]Y4`' we \ZmCAX|^ğF܇jyH QVP \ʋ8ד&L<o:)Fo+]UҚD6*&(ywboq;q\B1?:Q\ ){k8hmYV~fuuE7).{/>ؖg8˜o<{o( jEqN!Ax, Aeyr ҩZ[Ɂdv? Fl;=I t:؞l7Kl٭T RI61γA KճٛϹ|^;&ªlk|<殡Uїoa҇Ѵ Qj&Jx3<)t`1quR-)][ 8!UB0&-3W ՜hL(*4Y.Rׅ<™߇3̛)ۼC"A:hѝ>jlN4br[aO˞WޕiW׌yz=ojQ֧"vZCBŭ)Ճ`P`z4v [>wg+%{ʖV@VLvRGsf;!vʦhj.Sbe@jS#CP OP0KQDmЖ#gOLM:r&X ['E#(lwa) +6|AKobJQz| @HM7IV'_#F/bISjԄHU唶i 1Aa࢒*Ka9UdUAho^[ʙ̢c IDATomRvc>M1Z?K: Cnk$Q2oULc.lv $yFhՕ3*/gv,A*v.j Jn@.Am {*'B]uupcXhMCqL;)? !+ӫ9kHRTgݷ_Om6O?zwObt]G|g{cJ5fAgki>Z3 Rwg킸L@kFccTnSr'kc%Kiߝo9)T)r+5#y?߬T^>+/go\#hcijɁg\ H{^2؞dWwdfrĸR+Xܙg?aTeX փd#حr4JN"O $6"~)lDTVgOpXG{u xX LS4!.G9HN3ҏYfMr6;ꌺȕBwY/ u7Ђ,Yn%e\ h=E wicz=D8ƚc=i!0= N=iVxa")2F ΢jjX/ȳ(6ɇZ]LB#<8d]Oͽ]|$Rx%$Vz9Ge迤H Pb/cG~[]!'SY:SFPOX\}|)ӓ&L}e}4OV_w#-yYFZvz(B V4yz*pg5N@~9{x]tH C1N hr[}oEy8cVF{z/r~^i-y]c'm h֐~~G4%K8# ztTZzq~p| !2i!:j(,&zڵ}p+;`E/I64XLVc2m'$i js#'D+^Xx7>넾fO?SvTf xSD.3'hK6u$,g 1 MHsګ4ԠF(I)XjRtzuy`w.RXaW|ZXboz֑i߂;>بN^jl3\ڎt07/MlB`ԫH;٭!R^7֩V3ބB%\<Ͳ,7 e!<WTK:k*$w(G$OFPU%WMwә7h%F=c'!R mE[@{*FmVegg(a0mrX)f;wBo%_~ &ӗ-Jd:IBjZy?B{.\ O8W3'yh\iwJۮCD&dΆ.c*3\|JjYHCdfBv. vʷnp ds*2*"濎=|xBNw]\/›Eɹ൥}Y;%qI4>&d VJMsb6RAo tuQV*ȅt% KHs&Dj'v6_hVxy3ϸ5F+ZFS .\s e(rF)XH,_SQQW܃R9n7ւ D;pK*/}6ޙ m\o}aRA;6F/\؍ȇORCO[K0&>0I3&/i\5~4S|^I"2 YH]E1U.Uq{%//0^,c#;yAOaNvep-ud]k":~;汔Lw:hJWc:t"6@?[ ! 9*ETjg Jlr 2|Kj~-QXDin]|P9~{'Gxh7Yv򦹓ZA"\O<qrWsf:\Dj[M%Wb`[>rΒ|l{+#E6+Uf* W 㣠܁6~zO@i9Sj+?܋L\HIU^9@|7XiN87 닖uDhT[%"ExkɞxO"D?.%,ݤi1c=?%Boaj&0'l#أ/CˊZpT[<I]D7~Yearb=ed!c:ި75~E9v, Nuul;괎ǙP7U/֒9̓a{A~Yb+F[魟(D<0Dֶ|j1Y!5q=A^qjsh:2jljL>gˊh8lMn@{km[.AKVBr! /hmp҃tڋvj]Zj˳sDDXN= ! +x2Ag9‹;x. =?YlJ JCeDya.*mNK+c w&_"cETA]R'T+mP@a* |l;ÇPeZn~I&.hLV!mx7=/b'tSyUG('j Micy"gvHMH}꧝ji9*X Ich-3QqEt}'YYV"QZ*8d!wA'\S1 '~aj;նjVj۶m6Rfh13_)Tϋ‡ (X'ڠ¼jJm0VMe]WoUyCshGx8K@':/G VV!;ʫV.݄`(ɬ*T&e.uOJ"+%pBi\2GdIZ[!>lئVUX tkKbJCw@qWGb6qU56ESK `EIu@@&MA ,m)O<;I=9`M)y+:87En$URe `wK?dg'Z, ;HuKkO *-^ᯣ݁h_v{?>RO fmp#O{]juo ^Td6ǎԮ̪lΫ~ "(׬|nXf8*n[:BQ wٔXY䵿9f@m+a_՘O= 4#wZuTqZe3e*$WNV=ւgE%15*!KG_N-GAG l(7!ܩwpCkb Hd흙e. i{q~}>S\cҩuah8M`Ղ[TX@sԜgQh#j|RǪ 8mĉ8x=Be!P&j-(X.XlArtnyQE:8lQ+SfvdwO|Q7Jڑ\WUcF(kxq5imDk5D'5Rn '{]DeDO=bBEABM璳JSIkc*Y#3,~g+̑`>z'._?q֗giwC|wRH'" ;X9d6ItvZo70 h[G|T&nKRkHj퇹ӻ[+An` (Cp6K]FO - eyE_/rZEʂpZg&‡ڳzp__yK^ƀ*#*@nNJs6-vek`C: 5Z~dˉ+c]Y%Q_Jdx,HI OcC9h (֠yz!-x&r;Fj%39Gh a[ힾN{/OqoFU\kb>G-p#ytW[5 _zipW}ݬ^d3|NXgVh~{ݿu!8JGשJe)18*J 9׋NauCLsgb:MI2 CP6rX!_+8䌵8EMKЛd!UT=V׾tZ &^8akTdIK)􏝋MCTEt s RP7``^0fe_?uqwYRm!(fUujChqA|ocn9`^7bCz+8'8j)ŝ|8cEW~fAWQ󵫁{ mBzEO73uUcCUw .6%WN4^@s&2suR[Srl&x.XDPӞ}x ]p-*Џ9" ۃ9.@ހBU^UMdSi!bUwJ9RE*3Jא7~ʁ/dWGj1*Zn0ѫvAW)z3R03O,H9va'1f!g6T6/ȫO#νx#r=&N5"M|6Ozz^M(NUa{x lGd^*~c4 'h8}kc=A- Ì27 ϲ9=JL]>_⼉|$W*=P3;jNR2F+qtIT7h }.aUC/x~paa'x60noPUEyx ݱhPDF#,NYq]a%fG$^ַ/B?}vfp^4-ޭYɨx 眫JzU m^YNM93L~9I`+6tq Ypj ':ZQ48v8]WF7UsLrZWv?Gr]PO'12췬SŹ.;bGclƪ*jFh8I {uN9@6ԁ7O<ߪ#<+vxA?0I {9"} Z933Ìtţ渚J$5`uEX^bh**3/WL^Tc#wAu<t:V־hމ>x3X1b7Z I2{poboM22IZ6P߬}9p5Ahf,SV8+kGiQn?%uvO0^n\^}T{k;j s ]2 ^AԮQc35ĕ'E/ى,*X"ĉ !?hU%4HhkqY#G|U,qvzPhשȜdZdʄbev^#&eMlF=IEihiz^}hJ Zڿ.18c眂tܩ(S]}OSӷf'(ڝ,<9@?7X]=o¯$I sxғ}U5l"=j< :!ܞNuh-mi7OЎZq~LP:Ɨ`Br1Wtt'Ūtt=ߞ?Z0*!/@Dmno3nj)WX$y%,ś" ΃6-鏃bx7P2`e(uIf B]3+Cw-Ma2Ϋ: GuH:=Fup#B̕Zwz7b0& }cXrOW#1=yD*:n˖7l$P>X`xP`Y_/﷽o}l? Wb`+KZ-@#'ePm߈h/Kgw >/䵞 w3;gخ0NpyRƩs*\>rl\{T Ct wUtmIUFVkF>6h UwuAW+\ͧnU"+\Ȕ>3(MvM߬=6U$dZ`Ukf^FNOKqvy%Y -\]s6$I{mK8p򌧝F^_4JN>@Lzhx'AZ!.M==VP &B!*<1sHr$Z^d -8?dPnunR pMu> 'j;L DKlrE2bIx, *h*"8E[UR|m.N$i`X6ryUBMPAzPN_trATR58C]&a,jp{Bz]t& Â;܆7s)*w}sLqrYmlHïolfp֊ `JRRw= q s7liKiSp䙨~9f*gh!I@@FP}I>%UٷkSBuD<N7`l΋%*6j>5xܬٝ?N$;gǪ9hWAT 8ΈvF:v=bj | PeAՖv@?o~֗ݍKhkYP+}A_%y0pTQ1n*5QMx zL_u^kbM#$ ZE -quyDZ-;Ac ւ^~FP^v>ٌFHCWڙ`6\O\)稖+f8Dp 5\f;:FP50rXkJ$ϫ@>M[h1TT-DpC/An +g畦T0Q䤍*σ*iDړ"=:?Vӷ<3pS;z`USSQNE<=E!艶A[{Q}GkԩvȋX 䒧!)D?,ʲŽI_ (hZW,IO2GRxYMVU.Kiѵi
oog8ncvrԯ#zҫ\TA{ )ẗ7s-2 r@_ ~u@#fUA5Ooe~<5C4XA{d8$h ȅ"Ԓr2︔^0\B?ZS$tWڜdzr0w&N7%ɭNk=+.b,ޢIbRL 'G'NlJIMh\t((Ѓ 6(w"3XG5Pp_ =ͯҊ(V2>+{kxHgsVI^5v2?d D$&08̖_Fa{rKo'_ zlr1:TFm#X;t<~M"#6\OGkV3w?eE>)+ &k.4_X7"kRE厣*Nʆ,iR wwse1%< ^Cm "v0ajVP ˞甇J!ep8JC =ǺkX?8;|ӣSW[-|I:zbNGh<BC0+n3b 6ڊ`cy>XEe \Qml8G'Dof¼;F5oj C~jK*7x ?OCgu m0A3R6_#_VU:*vaA4bUʛjْ* HZ%^B][O&ُQ lr<7"pmn jS43YӞW@l)v.MQJG\:,-Y(l`!'º`٦m12f$+~Cx %GcYr86PJu갽{U](n!45dGPb)+z{mC#i+fp½ȧp vq()'犳&И9`D}Sf|5LDt :R;p;AC: N~cT.ϓfUOLKG.t>ly^eFu6Vʤ@vWe4eE?{R`^ \o{{4=؅#O fvzⓞ~0Hj,zxUB-q72@S3 XԂT ́mqYP 8E& 0mqĀ(-б Bڥ/ٹ hOPxXTk`v|2 ~ _͖XMp(u&]v‘@ZĚp-{O`?pBY[I;G%p;m `t oKAe/Nl4~b3@ٵRc'=K_v5M6VV'ՕQ"'zNn#FHv.($wryEߤ1&Dj<5hi m%܉;|}5D-IRh]N[fסIEj;}*RN TAxhpz"znüA0.mcʾlQ=> .-m7%:kp;EC eCPKl#AsU E`o]bu [Z4 Z`u/c~[=vv״Iv1/6Ipқ7ExX3Fϱv`q"qpg=c|z3#EoV!{o# f= dB nz3zq'7Mi6$p,]iHyU  Tߋ'X %+v{^'^,sE[y}'vbo7\p!)2벶4,b<| gÓ G]Q>YRG"`D I vVoDbS%7ijJF^҂dB\dI0s ](sfwo3;!=wZ9R0>r54?MR#nJo`K˓+;:bCyjXShV㼪+>[v9ƴ.i-T~s*KѰ>'kݟ?J{PvۉsŚ_!Z 3ž nE)QwNW\S4<fԟڟ6< kp>M$/RF9hP*erOxSݡUw6 K횰|_ l1*܏β6/}:܍/{)>e*?3Qde_pIXc'' /ߒ[]/@&y>T Mwy XvTE U&Rqr"#/  - =4Wt0Wlq j_`dsDWQeb/}]9_.C- [xT QQ"D{[2PC-h+K+%&mXw>ɳm6|6; a*J &B=e*(8%Wz9#?Öj<(l`zGFThyqd z ʃr@n;pVü!D+ t=h_rHA=1y߹,f^M"N>X Ǭc8PҖ:Z1o9A3[l*H/|n)t6=Zf,jKKnn m&r+? "7.~"zcS6Kԥ*|7IvNjʼU/? OOz m-Pֲ,ZMZF6CJvVƼ״\ .0w[]ďxI m9"^]TS߷7U-5!\?#䐌'rlhaT\Y :oz߹F7pz8$rb=,^M,l Mr*FZ],E0/(C sŊx}-a!!q&u:.OQe=EˣhPd7>;+kLC9Ū3V0-PZޭ2(+8yR-Swd/ IQY*FJmqŹ !@b= Q2žr*r XkbVkHCaAgC?Of */Gjk8Ks^k.ʥ QpAk泧:"qAs>e2A6MI-OX.3m 9٩4Exz M) ^stC5&>FjZ6g}OxQ3B}Ls.xnkǭH6ٝ_CnWU֪Y]oUI7YM1㴃\{ G?7:=QYJ;j-5ǙSzc"oY9@ FpT 7Қ^f^OI'4ǯ8XfyxW:GFz-wh?b˩\f_m2 |,̟V9VpX؜NKk0_.wpz=yB\fILz@..}!P)]FD/xSa[2Qb'E2t1]x<jUwhPM W6}Zɽ4 *;yWװ7r-r$" *7NdE`| IDATS'$8d@LY _HG-8s1 y]:.*+g-*,' "^؛/#+M"OiMЋq;@Lߝ9^&"t ͑[J?au8F'zGpIygE)Z"5껮jzC~QZ}^>)M>I p$x-^\ϥ7#p=<ݸ $E*zz/Nn=h/,̚_j TgJC쵕hq$tEqٵOak5N|({;kH k$@XDhOjb*_ cN}"b* 3؟ğF8kiP%r-B}Ukh2St;/z)ol$A"+oSɟUfcgwn6s'E`wr؟v+-[߅BI=־;G8wzGM'rF:te^Hר)B>&o &X? KGN]#g[q(;;.g=p>(lp{W1W)#D5Aאٮ 9Pi'zYPk+-lKv  xWzeX[$&.rx.g TG`95˜z">pPSցk_0$kO$ Q 8 P,NH:*mnk *p:yh9AM.9s,p2C`,e4#) [2؇_T^ftu]X xA}o`%X$+d/t  eTK{6g<)V_pXr9((N6+| 8;W~$ H\#PGbOp9KPyV%kUx;I gkcTSPPAKq O7\_ G]%oDuD+@nN4V~m>~XXN.Fp?4-&] '0QTAY\3CMV_hODnƹCNtP }]Q>g)}R7j8dwNZ5AWE jJJ& ,^ZTS߭=m 7.!1$͕ٝ&Z(c], a"M/llC5] IjG$5ru6ybU?؏P=+c~he N I,hVVs^kJNH^ xSK&Nh=Pcsqu}VȨ>+NPg]t2TV&܀ :**SZݰ?/j:Ѳ2w2sh;Z3VaF&/MKn`vB'P=6n <(+xP/.KZ3!!>8?&h|U$jZ-|gPX82C_T {k`_A1ӻrjl x*]8ȶm۶{M1dۓmtm[7LhEVieIVDvd;<-$PdU4"繫7Qq6ON=`o]I$KA'LyITxF 1H̤Oy%߫5 !ʝ=عlhfl쏨dwU&)/hבЊ|jHxӝ)|2T ; [KR܍UW=m76Wl%5JI ? Nё|1'|=QwvWAnژ5:uEuZfoDP~Mr$Vkv":Z&7%4.B4VkMdVvq8 Da|TN܍Gk DiDi+ >t,)'6%PEka pk[GYmF[r_kDeUګd~Xd]BY|bX*;g'lh7ljzslOX7Ljx+Yަk`Ƃ ,wG/~⏕JN]UdtATZU\t\GuPAuIVZIv, h `9k1P *{P^ J!1O,jz i!sj %Z)b!3\-ɂ(Y-V cDA啿E".J!ٛ Gg"9UP;<C0^JfB$ƃ(Jϑ *mi9?.eQV_b9U\Cᑒ꽚ɒh&Eڐ2,D+w(oF[d|i9-9\kdC~4q%m~<_;&kTkEPx1{,Ul:c)VɮkqIi7$Nۆjt:_ӔrIWk͒~($S?Ǵ6֎Wfډ׫*% /ĪO x ۡʋwxצs2Cƻښi(Sh4q*x=cRƏZv2./i7^E\f|"xIeU.*#݁PEds 7i]C*%GQ5cwe1;AN=ajwwk42:YwAj, ߑt:,2jV,=e(= 5J.vo hkhӇzY OlOĊWwgT XX[G_l!j9H}#H24#wCK6RiXq]}4ca-RKC"qo73ki+lZ(fmL.qBޘfdS=>>JzZ\L3YPf8BMw眐:(U4b<62)`(wS*xK 2iCIFSGd:# p&| jj"|0 f;z7yߺFI'=V P_MՃ#0d^d#x~H9^aM~BJc !O R;NG ȍ/wPvYmѫF5Yv?γJu3Pĥ&:xs^Էn[^i#m *yPgt {#*,αNCuc ObP MV@w8vfPL>PjYgM37 Tr{h(ȀGrvuy7,\A 7r&jN٣wyXv;(*}7r!Sw {-Z?֡;K#-$PnXC>؀qaW_8|''"1hcHS^[.NF)GF(l?/ $}LJ>o5~^mf<$;Q#VgNѳj *;# wk6Po)y+ju8* _hxZkO,F2S\W4VΖQrdTЛ꽵89myĦj"Grе[=A_-"*:aN˫jnt/5r<-w| OGRS5?eX|RCpZ6q;7J Qn3W[r%AmӬ} A"voe)VZ["AvMcuQߋߙ7B-V~%L7JaqNC[b4yLVSUϰat\[-D=[ChVwWx =A'o=2*)|Nu?B~eS[xYZdAEC[4Y(suY͔ŔO'u\RKYsTgSqbJVj̾)We'2 =^~f?B=3C/^ľ!Ex;UL.PdvAUQ]:cਗ਼yH>/.^ 5>~ŻoGDw˚j;J孝P+?ڢ^\@iJWPeC[1yV'R~yT=/3GJj,Ҟ.wFK@GiZBV9ʋ܅Z27PI}dE nG,eJ%d4 2KmB5/wE4z8R78\gwfbzRVNqJ ZJ6x!諼-Y|xlSέETWPhɿL>@h6YY&*ohlDԄop3! IqyD7í CwD\ J:koN{3.EXWCvB<$*?oC) "mlZ͓Peߚf)XqWXCk' 2~أk dn"ܯ4-8D P;HTkTS{$Ig,/M, w#Skl9Cu2]I?eX`+np&Z`jfts'>zCe/EbNwsZE;X/ͺ<̂D(sC>?j,H?UFu#S13[|l}^ɞ=) CnTև"{WW0S)Ci-i\=LH 7e^\:xwGG>7? ˼#N''8-8 !<ݗ^ߪ/#'`:Zb1KpҮ*osHoVҼ5>j3x8_6`D.gFx`:?"/d:YyPPo 48^G=@ (;ȍV5۹iPM-䛨ҊmhF'O;e>~DSyW9+˓1p묔l Equ{(:.XD7 q&>OuT8}،nQp\~.&7EfGZG>0HUU$^Yjy"Ri5VSDGv,TTUDd' {q!ڃe`ez,"Gdܪ,j6@AG+#A7kߨKDD׊vg ^ǚkϛ]ؔBVyET3I}t0P\G絼BvV^08rz6ʰOM&s2TGr܅QICx2Gh`nFHMjt@aAvhj+41j7rٙ dUyH)ElFMpR(gJjE)cD\6Q"=R{)T:A҅l%:l.K8EAEL.,l a$,^DF 'g=$o88td_)NkhUmʏ3<>)mμ&Zʰ_8i יWNgLji!^ QY/SdHkK2 %) IDATB4BH֘." )fFoh&1ReM;ytU%S3ΓvKO\![Ys ' t/M_VU%:Ii[G:v o1"h2_%<_.>D#euQDaZI /'xCX"QnJ~;Zi--M[MEGn!qcVD VHT U@sy,(]/]"c2G%Zbkw~LVduWRBVhH̭PhYΊL/LJdYߚD%@7O^PRH<4$+tů\x_Z_h'h=Bi*Z!J E|aH]zI1?`Ed}o/c-C-Xg*/d=JeqczvjIoQ} oxghx`|֯Ch$b"9W&i Pm5_9i9 @@'4oВv+gNmZ2|!CBig ^Jm&4%\hЈDWrBD*6,tOUmTVJK:<%A L~htC;کcs|./<ΧԒ#"?,᱁4,c,6U[`w1_I[pp*ݩޫ _q5e(22¦LIjo?j9 砧2}mGr`8}F R% g \TFBs<NAY}-1|9-3ܑ>A 0GEQFu#=e]'N zO<+o"[NsES9(V Y&rX=9ve2(VSl#B%*8uzᨉ-?rpeZhܤ6R%,\+QY!ދ Cv$ezG_dvӜNC ^xSS>%/XGw |T7::p'dsTv %S/)2gk4rB#kC=8L/P- Ng =o-VUX-#pDg.1T<*AmT٨[QUF $f{XCN b<(V -Pfg)V&iR )G ^^)zGxf!-a `Yh=)baJV^8?nꭥE-Z2EevY(' 6qYݐp?6Е)yr@)yVoHҐ4sV=Ɨ]\5W?tGՋ ~K ekvX.xD[E)W#a Ӝni`XEA-]rF>5xR|ky֎o:e}Um9m!k~hM5o#fQ]K|=iWw]69)r5yqfx5ǞZ&aL;V|['ц#y *i=Եsv G{H1DHpy/kR?ʵϼV]24 fUvUՍ-&ծV}$G "t>(6+?/IՐcS/>C٠-Wep)ݝGݩQ팭=ژViiO*P&:\dS]=TN{J.|vkc8C/M+8\5RO NLnmGe=^:=ÍL; G0EBS{ :{V9_t>cLaܟ$>HpLL'oMHO'78eS5a%;gOmuogJP%E:JG=ZokGe5E w[W"xgqd 7$dev\߬fPEqE53%w$jJta (Z9D!:aY&5DC!>Ei+9qZOHVL\J2̀:Q뫂3jSXJ˄9F32Œ|hzB;r$i%4O+,Fk!\4ʏ0d #ڍ#6tʆaIf4f6ohS{GKݪ:wTy kpubثqc`#n$h?^dj;9]jX{!j):SN-?5MudQK*ހf{U1H3'ȏ۪J'Pzl("C;vvis`NjgʮJ@ΕW95VyBCk#UlG)O1r+>bqR{5 ;HNЎn rG&هw%&r:5BCݵĭV`)˦k]m.A:WPW$݅g^N ]1O&Nc-oB3jꯛ-cܟL߈߉'ؐHR Ĩzs+27 {5K 4G‚kq{DceqV=M%>3 #M d8ynz{}]# t^LoKo oc8y'C2y(zlbƑd#*Z\SX`6Ι!iB`KG}I9oVoj}g,WEFl.fg7*⻰>uF;lQfQfnhUcXsQNkQ`S5P5G{|>yj3ъo`9eYWfH,)C\ u:^d]aY O7aF ~[/<5+8]Ul&ZnZV=K^6E4CeHS&ʋjrOz% kZ|vhw}4L)oz_BK\KYw%H ,qeAMx0 zVP TRv:niAS43A*TyXT=zV벘amab<QsG}Pe ?Uz5ӺdVQ6XleLݝiluGlF8~2s(ݜXlXLěV2p>\#3Dgh g=vnE5K'DZ5lhGf}@m;UMŎ 'j]M f=z?BuAb2D\zg yy^4~'C}=FU$CR..oЌNk=;=LW%dz>FF8WC;^c1T@QLev.>Bú,rV5<7!g̛ՉBd=[s oF\Oos:%bBo# Iw#RO詈N( v!/z `,dmNld~Gm*KcS,$8[j CjuDox&o(EUUa۠ G:픱xF >ǓQvvw <89Cω^+:uKdT[܎xB$|$(UZm#,k{Ţ6ӬM*YJ၌7I4;%>w7Um 5b}ܗhi}{JG,nhM4m O*:.=#VEʉ2#W2Yp\Fsg5O$8tW2k|{}-<{rlx{SZo4? WxrBCg\fd̮/֚@F׀7tZlBQsY tOȧRrLwDPct>at7Yj3bT/>:"NWݍ*^b+:?$u">GB(j2IfNy"pEL3&}Ծ4cy_!H#I67Μ^ 9z8_gpAA/y3`ӧ-Atw~[̊kLpR<;Rȕ'KVaD:s:<0*?W/.J #c] S۝'!qZ>CPZZ(k<<\{j]<{\5sn/mVM̐UO%ȣ|K(~Mamqq#hN֠(|eFY[{e",%jhxk W! sj dEdgc5G֪,ó7GATeqzLBQjM=R^4VjOKI?$85MS{zp5>7_+( CPQtrB]YkGN/ʫ6&6xl\h_@Fv shYB6:Z}8&iy"zZy'2NEy-L/cUVa̪h\ =GE74 ǜ>KQBlULmj{B,OQWS}\}PUܓϗs8Lq>͇O F I“,ہb8(o9,Nx9~^E?uʼnRiX=닒a &KVI.ov$Ȏ J:r Mm*|3ӚgAĐ㢄ZdO¥lՈ7~ґ9goKSIQchOCF4|bhP:Hf)p%QYKTF\ϣK{zBo.@_R^jfI*Z;BO\!Fh8 h#ZI"co>=gd> Yʢ D!љGoҸ]-i)r,G<6,S?ƣpC:@CI|" G.qWE9ta*JerZμ.Y*7\TuA5v JŵPvò 8QfmwMǹ#^5o"_1R {Y X+%S*BjX퉤 jd.Ʋ b)4D|C,#*\h,M2Vx l9a]Yvl[`ß|*$+ڍF3ӪhVsL]9Q(n2Lb9 <'lA&q'SO7$݋RLۭvwTqeTv7t^B=qltCUZmxW5妚O3W bs$_ >4(o\?pq]4 3Jɲs F.j/Z ZWKP2G) џ=-V.猝^wc o1mM?9LCuk"Mtޕ W+)a}\=,Ir?`?jhd8?ⅼ:MN0ʠ|{ B/TZfjo 4c2EÕ-tzA,l[6Z;BfϢ:-R}#/#%Z*yN(k<N" 緹ժlGv^V8oBĮ͎<3e¾ETF[=kZ;l/nOnsQ0tՖ(E>+Z][oqF%"/( " }#mxRV7凌4TdžF[8 T,d-:b!^K4YMF]%MLOX{^zJK9̩z%t.1-_<  VNϋZcwoX^H,0T1P8QZAN62rK&t9W-BkyZf,uT@p%J\|,U±䅸,wxAr\ӤC`ӂ@Ek'3H9_;="!w8XDςwnUVaAsx\hTJy*➰u]ch EuI0d:>|F.hP =[MpHQc8cb?%5yԘBpSh- = v t3R++lw4ċ@@,XGi>޴ :t2DE(,G$ ,$kE r /W hBPN|w*h2Qqvr^lOK$!ԏ/Ŀ[/OU'.(ϱ סHVe`ˬ':kܵ|JVz*1J y5Tvܼdu&ZDu;c"J3j-WiuVK^ef1@E%,JFf"@umS)j,v(SW /nV4WŽg.Z^$3VVaEZGN9'SHn$&XM#x YUQ< k|@Cq>r'?ˢbdY} ^J՜*"g,. k+$2Qcu}Ej^.E84~=૜CΓuT)8e:N# HitCBMe/"7 ub|3Cq$z?Ӆ6zHn$'rA (򊪶Ճ?E6Կev/flg̿4*ۘ))~3R2F:yIPI1lj"\!ukʰ :l7)$ywQ5Bh!>RM AyNp)'Kxˡҭ!M!xnf#k9-B:h'\%\FcceI!U΁Ax<\Js2 $U^ieoAnZMqH?%]䮤ߤkn ZEe/+ cէatVGZA7_ q{7D9R~8Dv1dn,+51ɾe޷]Hh)5Ja؂&;2U#!rD}ipF.e{\9HR])JO M #&h8JcMcWxx~zhE}n`#??oF%ewK=)Cb~)%D[kw :nkO1䈹YՃ8h) vb !mpV<w11_~ѡ`3-,˘ُa&e"Y!; ZW_=x7=E CfWf ?tW Q5f*fqsΙ8g# %0ejホy*FԆXKqv$Ajh 7:>N<,ru'G f'K<0N18?&"Hq_X$*~MyUNbAQ*܋IQmQo( ncgBCv@hD@Hfx<8X>+c&WrƦZ%{$~C{&jqƱ?g,UC 0UrpU,`i}5TsRf *{;حZ%JddyuF/%*!R^f{losGI!,܃-:->~;X#HiEZ|;#NqŹzZ^%$BL?c8 GI:{̖L\5twg=ԚmWqC% Dg:ttI,Qht2S'QZ|JK]Nft2=*y)JI:\r(W(2D M2FyN?:zBW-2( ]X!k> ʦSldz"G#U =W?0S{ʈh\O4%7<Ƚj]pq!Qa@jDirh!63tFf9S aSx Pc.u ]MGi?fD&b=P6=hP>}[G+Z;B{h.:xMIIRreRGi7:芚G[Q{\_r:Đ\涐Ǩ߄2\Խ_th_毮PӔj3hAu˞G2NYpU+O .&]%Q<Ӆ݊UΑukh>Mɀd,[(Cvu+YS+o`]wskW+i5Q4]݁߼DF>vxz;Nu V cEM|%,- KD&q$9f$7 w2JEIk5?G@ȟ<(c?4=R (=v3e_Y+>m4CD{PZQ脺q]'4Gs>l97el86.P.*jyTU~)<>2Wd_*MjZOd5,Jk+r@wmxUWwS-+M{BYHv44Y4~l? 7D=^WƩ.G%an&́Yi[/&1D ^܇@ %Vx W{qOQޭ-V9FyyQnvWw# (á\䃧rqtc35fSh,~ɻ5b\XaaDZ)Mh~CEeeyV+^a$+ȧI4WԔ/`T4/"XOhqSʿpa+F/K}8h'z>-ްsYfIwvg[k3y7OO5N}7 Q&)vbfjZ.uVQmR;CVXumPdl5nCeˍds',s(w9LiZ6陭&\ exC'-qD~;RR=1Տv/DwB2eiYj]QjqWP~%|}>^C IDAT~nV 8dw{ *!p @-E[ԹxQ2ZI%JH!tlGi+sh CM*g@cg!Y:#gujXE ו~t Lz=Wk9ޭ<8.x}ff̃eYYX"y:#p>j5"ޡ(lyy%Bf5R5r\롙Br#NY7&,["ɍM-Fd[ٚ[Jȋβ<M '6zVg2rʦl"U͡26Em~Xf%B p$"]-j%ޡLwf?N>YB:]iꅼT}` ZF$͑a 'XdYq~(X?.Ʋ(4&ko\9,ճNYX`  Wz^7+ h%Lv*zZu3)T" Z(q((Moѵ*g=)uO;vT4RtPT=Se#(Ȃ5rh^9z uv͉A]>lqC[Ll5Yj=J PPұh0B`hf"4 6H?ʢ355YL %E-hKut+>A9;vYJ0Y'P+j:o m ~N+5C ̕#P3؞LlK~G;Ÿa `'UkkAת &8ytۭSz\htVSj%-us㺤1C]qQ>9!  >zr,JSu\CCIP:|:$<O_F(t%̌Kn+͔tvZlx!k\]uͻ >`{Ea8Miוt2ڧ3ǡk UlQ;( (_ rGX)X$'A*& "pz\(!g8Sɶ}" $|aܴsƅ'WP:FW+=Ll>J.WQ%œi>); C=?G"N>פ7I~v'.~۹>hxC<[0iʭ_Wʩկz)m؊ϰ ݎ:sP {G-=lYVb.Vr",U}Rb4CnON?3KʓocZ ke>#rshIi\PUT#l=d >Ej( g@kxGkъ/.c hz:lh7䎞/)\9yO̐MOǢ0CRH4qb";e!kx$<ˋ="vp^j6NIg3l@'O߱-V;35wz wٸR5EZpT΂;uU禈 b ,PnzPSü" c:>*ANES`Ur9 )>pJK=Aއ'dGD;x%ڨ; a) 4GJW3|Ǵ0푝D"-A #D¨Xʫ[?!mBz}ݭhu"hh/'Zv1ۼot~xDº1>lQ.BB0L唬Tq2Xf{%wQy3>L -x#y?W!o[u )Hm!=gLrrxa0II(*X".(=C ~3I|@!\EkpuxFkf_{i!LFyFޙv[&P_e%fq9C 0¿hqȳ.Prۀ9` ,+3 c u >[ / (gE}u5O%J  ]iV7.ChG;v_RVu%VTfqFŮ#?T9Ӗ,hm58w#j(F꾯 +Jܸ݀&}E+8ϡ#ʰN6Uq?D 6U܀wkpj}DkQ 2!t[0 2S-U6R,dXqkӌ{QS})|/rY3ܝo]8V6j;) ;Đ2*yavq:G?/Flw88zZ4.-#y( x pb"mEy&ဨ{] &d,["rvsqx>*W)<,: 7PJ*}{\LL"&8-01l,DB"rZ1$qEYTwv̤h0@"'֟E12JGpQ<¿"nnp&qݙڱpLfOcBQ11˪j>9DY}U@t=P>+e>Ù̽cQM<;z{Ж۵$|?>(B(V,t1Mt'~RIʱ4"BU7 Y*,OcU#x" )T׼\Z'>#TF̢1]ǒ6Y P~֥^$h"ܵ3쌯 .! ar(%:\&?&7P[ZJq?0Mgp)x"zX}e$QRU=I <;$]T2[z|;sܧK0yԯF߮-peUO\CVP2̀0XnQ#HEz+yy C#F|y(Oe{m]D@C(5Tn)64f Qϕ=4Exq-vKGRSB2H,*b kI.hI,bGV9GrT3=̼jf"cX;Ͷ F Mxo43ݻ{GmfBxdv -_]"O_VHRk\qb(J9K؋۸/M[v{7Q8l`{/īiP ws$2#QߣQZ !usU 1l~5Lk6 w֘~ %O  {f-켓^fC'h`>/n[ݩ174TCbhM߼d+i"|iȬt'ʊ86CP"J"xn'tȏ4$y978e Q*HP.~6l$ó$^Xw}v|&u]I?oZ/OR]Y=1߅jEh:mE9*$fI!V@a2YF+qJ:rC0 ,%k\ņYC3^\_ռlĞ tf4@HMKW.A ,,{yFEZVwk\DUܰ:aytF驔sjU^ _dWh^!a,#:HKnxn(Z.";."&tETQacmdXT(̐ex 7+\b>rq%~]QS#cM0: L)hqZ1&Gi-IY^q.4 ?C?_d%r_"̪qf:wC!Se-2?Q8m<x,)hb "4tfϺNaFTqymk.&0"A'5Wz|8:}Ap#Jy y.a'Nˠ";I#]DPUl}h'}[ 0#轜6<ģ.! Q3{E TP-㸆ջ,#E (rdh ti=s9íoc񬚼;Vt;18Pexo\lft -?xEyr/72^dT ]&IzWi9o8{CKlh8췽Noo0kSʠ}w)$9iG/bS9@XwkA2d)@{-Ug/Q_X/Q-|,J%jʔہR!H1|O?ȷxŨ-=psIҌv}.Mqm-[7e­m-۸76l-,nm ^sv _gfY+J:9w%~Mv37 e pH8A!0Вu]SCqOXTw e \nOoCV{Ɗu%sQjL)7Q w0 x(<ϊۭt7H?Aq+J]|VZp_`Pflj\ʲhcgufw ǣɾtXV ^EqW$ip38(r0'?Zo [ ;]WTc_:&{ȷ%G+&Z8Q݁:BOinWwH1{3F3f pJ& OZ.pF*SڮGkyh<ͽX -jYKŤz ߂[}C[Af͢,Iv j_F _v-+%PO|[gXFgfzWX?&x|+C xOHcd|#l ɰZ,S$(#Y0S!A<:8o54dɌob,P;0`=x7Z[j:>p.X`8h(߂bG+؋$CY8$5$&[S T6OJhÖQ QE@equw%xe#Y̖_2BQ&n(q  IDATb?Zs6P7S/M Oc9ꕵh#30}c?ǬB# sڰ('h ū@9q]+ ?hMW{\G-s+An;RއWaK+mx7щWafXfc]RGx!QDԙ,XnMh!LrED9' wA?F{! x#?~]{A_D6z/0Ufp_(&xó-*g. {p o ΍>M3*`:xI $j FE  p W'`U@@G CD| 7d1ܓ@j`.<ˣҨ &pb/aY)j&% òpx,77v#']&sb;h.3 q*[3ʴ{t ҙ$+x`e̪x@KN']DRIkepspX9_Mt&.3FMjT ?)9~8ž RJVcrJΤ{hs!!IXD9 Wҕo0Tg6k3X1sU5>WLGq!R)$-rY5I'}5qZ!CNV O_.*۳w1% ,.ƉbR%L<*qQWt! ߭ΰ J˰R(JLRxa|e.߁xR q\J΋#ExsGuc 6NtEq[t#V `xŊ3Ya dm c4>o6:FXr8Ƈid &N$m/| t;7we~34|`5E3xK@_Ӎ d\hފ=Rs4s̀&6U#djV$$J{"k Yhm={Zi)0d^K%\vϪhg*umOwE SCWz#Rqѿ&kv<aGIYROouR^s&Z"cdި^wOOXKI=QE9IUJvU͋ ;GNwY< ͜ wv'`MьOkz36`*- /HjM3b-}<'mޱPAB* {{kv\O>&G;zΆz_rM~ RΫKf}?9Y(SI'Y;=8ҁ.cM{YZKI=̝6% b5CCQhG~b;xx4h:g߰'Zb_{ai<ԷH@-7Y`G2рkރbmDi1BbϛeH[6(N[{> ,$ߧ uqe 3Z+ +jM%R[_ aơab1 c! o6E@]oIpqԞfvxkϣ|ǸKo!Cxi =YW.IJw +<+l!Z$bR^y98W\2[OIMq005174hVS;fô|"Q) ]h.R\%D m ngS$/9_NspIMw@גLly%, +L7*3rKԏ i-Ǻى&}V׶5xؚY%o]|PEWzl{jb3sI?H!Uڏ)VWT趈,&l=thr])EYn&GpE;XVMpYSZLq+ ]6R7o칉ؙ[U#pɬ? |o6;ǁhV@w@bHC! [Џ`*ï| OO6 Y`ၟ`7Xc}؉M`I1^0.0|ip8ʛx0!ւ2(mnتN%jAl d7?.p,j C ڇ(^DQWX?e? &ɗƤ n$~:y5gUXDIvAMip-C?!"=Q*7"AZFJUHSŝWnRqZG#< gmr tR|1$-w2ǡ")jR$i1o!>tvQuvoVLox7#'KNJÝi7x >I!_]dLE]Hy\u~m =JgUQc5mG;;ag2R<?(bŢ" :kЃ4vyla tYnWz!-"r؝&/OCrk\ gV}Ǻui|"͔j݌]1R]:wAU:R+ɣ71`䢙(!a8#ǗwrB( ^I+)onHck/uwҦ .8D땍)lI?Y,;" w -@Dix |-VlzZ>URw9lǍZ.d Ywaۋ`Q"̐UTJ<,aETUT:h-;%(Y҄1;x }-R͂vOJHޡcb9z=}06EFite3:fl3 y т L(3@kASO\ɳ*|C l@]Oj9 CQ6$cr#mhאrԓoQTVilYtB } Ƃ grIkz!EX1|`q˸QA>%(r7|zoy~[Um;޹$aeQ`iv#}Ƈ칾RƽR9r iIN Ӎ 1WZ6C07f 1֥'Pt98*<~>'|vW/$U6i5 EC=]4i (X2ձۖr0X譞ȳ@wPb5Ĩ {Pp'h[8XWs(0:kk|;k^4PTWۅS{T]"#{;g45Nf_'Pcq7Uef3'D [AG8j%nLte/OLZPk mY1vu<w[e` eSf E~%ߪn5,l"FM_ͬ9uib]>D/\fD㛭&F:;kN0s<|:$š2TWB0"ɶǥA peV4-jk.QӾHX?Tv<:Ek\@wF:EGٽ s㢧dHY %3˧>_>E@aL$+Ge^:/jzt|.CXI~gkyǺ}ϣW$-Q |U./l| _*`6Ky/g"i\DO)׹l]?47[='y">]4Vj)Ka5x~#MgہhiȾim݅"2P]D(G]!cNfN߱voQi;/@E8SV{:DFʊ ʴiۈNkpJ9epXd]Ɉh ziV^y!hȏ"Mk2w{YT:5@c@u.Uv*V*d >Y9aKXL(@GZ2J\WN4FK+/̛`Fi*ϡ=a yK _&0Ap ?}D. vHKQ6n,%s6T}B*J80 nY; 皵u 'k,-eh_ bf E CZy"qI##+C-:Xsq!WE| ( Z7@+bDy{P`D,طV`8؀ΑY؄XJ];acWrVI'ƻy{b%,wfIk[ i Q٪V}JkWHRCsXJ꒪bo~2yȰ1>f1P3=,/"'*բsBq^2k~@?do#,`(`3XS._N*М}i?I dL/⭙W+s#=u4"0XM$A-hڠ,9D=VUX ]hHkI5I= %ߕ'ՖdTjyJg9=ˉ>J̾v;sJ@B~a>>Tga0#*Xz_>'Vd++! ? 4"8_2x"ox EPLN#Y9uFoY7fSPL*I' {c `Ln%jb <̙5"pj@k-r]?{VR_$B`GNJ lPI@%Q_` >ԛFAXXWyfg+,Ɠi.r2*cjHZ}^Q $ B Sa*Ss1Z: Z#b B7 .&,ͶF}XGr I%Nz -?pؘCpQDv_9 0Y"33`_E(by -"pzCptV+:]oD(%NMv3PaX#x2*l[0n-ڣ\vujLj{t;a+OPnm6 x{:JE*XTnfR$8 6* >?򀯲@qĀ!g{-&!&|(  h3[Nٝ"k#wW[;HoOY ~:WXA׼Ɵ,֋KGy[ARXN ¯;|kb O鰣)<m+-ʊl?ʰLa^'1(J_H&MQV;˧}tTT$ib-I).ku#4M3J_Wlg('R(]=Ba+BN9+E v8tQh "-c}|ĝx_$# .軹y:/t+lk!x5_,69]z=*-M!d7 cw:rJOp5H'`ɵ*:mҀHa]<]HLj!cC!$^?߰r9Gw!3Q](OT GntgTIƯSV,GOX3Y{% 6tApͥQcE YP# ރ\V?BEK0G!8@}pj(1(MuUXm[2.\48 Z.F`4g]#Q UoXO×k>.E`2$hO}4Zj;J)0M%`<5Pd {sD~F}Ug&#S'}h%^p}稧[nX&xB̵98k\2p aWڳ->VFD} Y_1vK>"$-!~k.ÇA0}:2ʫ(i/N1lkkoZWE/LSjv7=3FZIh/ȗ6r$Iyp{VH#I,Hk*tC@K@ pQBN'TKO4$5b|$S++nEv: _ڨp*]fOfVoA aGM\Jk Y 8vDg8 |mѿ-zV[S܁znG 9N*7h\|p ,x3ꮃ3X]t{xpM2 -\ ^A2h4JJtҗQ_^1l9R⥥Cy#bi*=LPgec G8uf\ƛ/-ZY^GPU+ԙrw'5@Q|0xFv(f~Fw</@Ŝau \ӪYp (DB7.;Ūi4j ÏԳ!Os upu][+ G ʿEa#Džs R:ɯlφ9G,FV#v*j!h9#f;{X+IܾHpT POMb^NwɓSX&C> &mD3ހEOx@|doʄ!BRGRBNm>r)_ )w@UѺfv;B(?B_f k^SD5yX=Pli{VR)GΎ8VyBly.(h\v'vdSX;6e} S sH@-_NhqxCN,rȂo..o_(%ͺW[9^7R6;I9ZAh&(=ԍدF7D08ʻ9\7W]<Ȯo6s9,t Ũ_/ =Ii@N5d讠/vmgc#+תc'F'Gc y. r},/b;jߠ$dY# S[ka/7 @yH&* ð«seAY=.x'ѯp#:nNpLBzjC5|EAIyj (ÕjA (G rb;~ۍh-0Z&CGp+,@g1,p=r5x=H& k$΃SVkhc-cJ^l-퍝`,[yEq/@ͳx'veÎ`u{+$6G$/c<@lfLk-}؂~<&W} YY#~ph&`ˠ,9*@:eh=|Z)Q gx +H9Z^ `CH(mXAݔce?G h5tʋpK@5t  `Cε; (5RLab!9`vzOK$Td<&˔⃸@ٯj)vO!xY/x31~ϝ r 泿cnDJ^H2_.>|nNv\ĩ9,~B|S/(o``JC+]j-8 ~D~cv8ٲhmh]1I&JYb ܯ¥N9LvDV(0^cs\7lum%~}&㬲 SO%-􊥬Xdqy"W\%#:Ga5 幤@,mC{#KDfG^ibKM;ʃ`noF'f~}Տ9VNvnbΎkXm2-cv pr[y>Ts7omUp^[]ul{j)i5GFg)4rVL8Eyr^ ci>khB Y#U^\}vKje`zo'blm7멋`W,;7 ;""&Ȅ]GV_&`l5cµUY IDAToT)GQe)^#4/9&r ,ME`nF8?fyy:w6-|i0%H)\{::hGZ{^ez~md#ϼ8+` ?WvP8P,ZOz(]p%b]*d.ډX<@zKApRS2V5d':ڱ7&CmqZAƼEu+S?hfUo\)boBo$=4ZIdg8{^ܚ̅&{4ES|t@Y#R+j~]G֍_?.sم0mEYnl#NDUٯ"o?̮|X' uUg(kQ|5;eBv^R+ pc-Nʙ1KE,F򩨁iVJiT0Ceߠ9, %P~?`&k|"!rm 0C#<@orMPE*"҇U`!)ȱr`PGȩ2Â>T\ @gLbE8/:~JLX<<]DkQu}2)$F >K=0:HCv8nd紶(/h2[FK?s{ZuLL+㩡e%Q1laR;x:M(HYFNTon/ }8 &nU#w|q$;ĴqyFppTeÓgeE CU:n-sAC;!6dEKV$ףqih6>v \fN$fd3H9<=MoX8|\ߑTTs4/,5%-VHx8^r#;aotQ]١H;'{;d讽.h-w=c^Ѕ<]"+&_YJ5zdR(<\PV^QFPO<$o=t|͡[V+AIMOCao_=2V{ 2$bASeO90 QZJeob9u j4 ja6'e=i4NCe |GP>ܟJ 59 }ݙFL1+ZuVANo?Zp>Ctnɇ, :KM9APKnZj>?3촋u2PŕXƿ,oiޮ'|T,#廇2oKPG M 3p(4 Lل ~2'lΏy-= Y7C\xfy;F [0=0#nY&NJPS(zC8gouжt]bͬY_W?q8h=/vrāE!/j@MXv= =l K Tߩn>7+N~ڝ9^*@ >9T./r4&sA`N_/cUrŻ*yF FiI_]n8ـGjvR<г&.k~仑U)[/x1H;PÇ5 .+{"I 6[8oJQ<% p;ڼb~]F|[W/Dnsvw#V!nwVoc4φVB܍+%wҟ,>s*Q=ήc yʮVCyt$l  W*ig5-z}?~QQN+j89< YmL!1 .9H-W؏p1mC|.z :K8_Ջ Eկ@÷X梹vfP/cat[+gb('@ЧrR1Rl( g,h}A D>Bn ʏt2y]m5p(QT@%VA0 TWe.d;C tҀ\,**S+X Iɏ`x#<޶AN|!/f`nev)8OM))yëz͜aY_̦F]eGΊfMԃ`*ޮ5Tj&rmNTd rJ7ƅh#*{"M51f^?"KV3efb f6 0|kA,$W˥,?|8 c1ADզZ{@rFU*#; k奓m2;[˜ ֮VM !t((U+RG?I(2QDܤ*2DbeҦt$$NeUb6J<0 _W |2pwz̖wqNԋtkJ0w^OK&A^[GQIb;o> (lZQ-?8'N6\r-`;2*2}պYqD]pt+𪬛ZjFvxpT߫,iwA'֮>MGx0ھem:Țc`GѠ Neo\D1.20FI!j5'1q|/Y ܎+GTBg0){N'O  YG0ITׂM` çY&?C$myUxAI@9RZTu|suVE3%G{aa+yV`-Te]uݛ5փ-xCT/~2\Km8ʆ߈ jCf o8`n3d5nwHur-_)} {3_8RfI;jA1Tnfd,d-V̭_`7f  no8E>w9sψ@69j8abuE||i]Uȟ86Rt}'1ЋttfK^Ï?_,TN:(hm;|EdE4=CeH2w}|v1О% uW:&<;9AK/c7 Z 9sъ/;x\>%#$zʳ[|Le)1} Koz4 CAKX "aT ¿^*)l$tâ nR5D] TTɣ J0 6ƻA'P[Bh'-ہ[vKԧ8jfNP]`GWʢ?pct tg's4.zW` '[b%Қ/M}?e Vae[r5,/ :oYPD~U;p\Qޱi68Cυa*|멵%ܕǭ5̢YO~noOsyǩmTqѪb3("֒9K.e->V+qOwQ#A([8H EB\^I-8HӳU)ủ1#9GNRh)'Aa䵮  Oa~\ Ʋl=^Igjq6r=?ެՎii[C,ŵU}o96aW{NK U…&>p|(%ڲ >))vaYtDp4o3WA]/Uɴ,}JW|}\͔ !6nOWm7zJ=^@Kd @3:8 -}@Nk3"ǁ] K3Aa,2<;)DXv%fVEクo>1O3*l57NEP9孞[*w!GٖN8.n}CBC@@9˸kG6wfiJR +}t=uDJ wgGQ ]~_oc۠!VQ1 =P t6ʶF""W5QuA7Xiࡠ-Vw;f`%P'5{PT f^ P4^x ^^5B>A x}۸& F@%~T wPgO= '4Aʊс6KfīGYoadAx]>|@)6m7.ʩ5YkQBmXJ׀~(ޝ>C"GE&ވJ098n^ﲫyK'dtL˜xo1=?# \h*j%w ?˦o/~υ,fPTx>?ea'DW_e%կ1kfu"KGY=f?H|zjiwG =DKT]+e+ERRu6`/'3?۷ۧ`r+uRU$V$Ţ{5~x2Ge{eICh;i##Ŵ)#Y=QSvEOٚc'd^|yg!M} ByFuGp\CuFl8KQM8T O{@QXQv)UUlxKExjgcS|+S(vEuG@Cd5qf9`1XM9_#a%h_A‹pjVgOR-mHKq{1/C15Lep 4d59 tea#{5pS@?\W>_p4_(o(Jy Dn_F4e6590[Tc&T5bb2-F'*8l*h$[,XZ'Vw~VZUkHKMǪw9\Ky cno cX\**H 4 4ڿ SOeælf7D2;O}27UH)[6םb~wơ#5|QMטK!ށJe"|vmPW+];ocX&Mz:(fQ]K }Q3έ8#6xq>Bs]n!>l4<a%7r|RcHXv4/68jo1rYփ.I|)$v7z?NY'2"2x+M.9'L}Uai*~;PMc|PUdZX{]xQj5Y?K2 'eQ9VNic=MP"O0V{ ]LuSZQ%W{VhϚ)Z\+%fȐgc>MVuu92YNKb _r0L`\)O>ڐCL cZ]qG}exQ!nQ觽kX+K¶d `HWwC$wxCV[(k& }jsd}"*Q$~ae ՖD6foӮcF+#zp4֙Q 9R_/h=^ٞG86p+KhoRuv`>ZΖIz [~} &>auoɸ4k@IπqNS6s湬G]CW]kwux2<_SrlfoZT6(\EyS xy Е$Z'(鰗hEGzxL\ݱM@$'+s:O;q(]%Y7,./J^@#G@E!Pe tF@yb5Ǻ.rV'K hn:.dT-dWESޅxר]QE,N'^L|EQycFjڋ!3Ζ,NgOE3FҐ2]laoؿ$|SNeq-pnaHN:zDzY>?43,c> =E9~2=^_FU14GO\{|*n/7".´-uQ˄jEڧ]wxDx[@M;']gH3e;tSP$]f%X^}ĺrX>{d7SY4e϶ ӖlD"ʃhH#܀jIr08+))C~5\>VPe8Nqd܆g*ec `ʅp L_{&9񠔕n1}{`KPޒݮN9¯lףeBPs#U=s :{F줳̈́Ԫh??>gVGcaPl3*u9=s+`Caev>xXmN_I3lu%ytNYN>F9T$1r}?Kg}; x.z199rgKBTrTn9X^}:%͔I`4C;wfջh!1$\WԝN\mEG$ Uު1X:Er&,[;3>t+"*"0/|bR<7c7!P.9D*շ3=KRFvUqDq8F q|w Dt^eS IDATWSj4s]`,©h{QUCÝd;'5!mEg)I)|' 4BYFXg].~;n2j-|maqTAJY+cV^V[e呲4E%n Ϲ$MigY ΁[.k^x\ib)O'J:Xv1Qx66`TE/^D& ͆+ޖODCw(QT%)~tP^'d) P n#{fo:/;m؊z/R5Sx=1^݂bhƏi`Es8&jęNs^pW67 VF+b[orBQG$7[omF7cX}CT}R=ir]MgوT/b{Db_"[ܙpʷ)-z$Ͳ13|tӦ)s1ZTrگ8$[8,πhުPḩ86>||eą ~jdS;m637ӓF*wG.&g#KGk/RsGq,H^cg5az[; =w,j-]6Z+.@s 'JGs`YUh$g4ZOikԵ{\=NW}=Lqo) VOB%s4i'YU;NYYRQac0Wa+1Hz:=*eUq6N1F5Ɓk,c8OoJb.vdult]/X rZC[XӮw"'ypOY}WnW+>`\4'F_8N;ܧ=kE9pp?WeL֓#iߐ.h,:|d Hnu| 'AC %DTH{r@a}i & hZ*!*hkT f[.c;C9Q5DT>ۧM>W%d8ʣ xݗRhbx/'/w7(/{^2atqnќc 4=)x(f+GiLdO#~yK>AnW3$EId<ʫj OõlF6>D LD_AZE𴠣DCGË A'@tCy8~)3(cdze+v$%I1j&:D+26X|Tkyg0x(^D?|QENEׂA?/0ё -ЂsZ`$W>Pց稹zQG}*\ሴ8 r`,)obRoT\ud&HQr&.Sc{٤@-Ӵ(P9̪'XMHZ&6w,X9v;#\ew]F/}\awv]]w7^TR[,E#yg)e5 $h~^N= A"$t6ǮOZ&Tm'C:=w}Lo y`3.t7ՓHbu$4W8&iEɁZȹrW->revp!Ejc6Xs8MW9ȚY| G LEZu)'[43To]/J0^G(Y so4uIja5j7`H%q˴zC-ltVVT#F6?a2ʲy/7oj 4䦺^5ȒKn7fxw:jugYG>*`U{4ǺhnOw'VZox/?Gt|)cpx{(G+lxd+IeCiN࿠/=(?YO|╂d%F7 k*m2\Ge+. '78mV~VPc\&0u|@xAϼ l Sh~4wwg8gdѮ~ &E9?܆q":T_W@8P2\ґޫ:m#VtSYq5?[ \G+1RNkzk0ZJgLfV &/q A F#)l4H *`{!Z;iμ%g-XM騕vLSBjoU)_|lU'l*^zױ䍕s"ts rr4%zWl6O۱2Gm'g٣`;% {z=Wf6%a 5_#N06UPmݵ#14zDJ OL{;($EiAA뒈|X*$Sx%U'A[N.(2 vxR\Sr܅3у1,/[+py܄s/10 q;$â lL/yNR0yQȞF Y)&TzAe'>F X5|639@ABX6CLoq/@B K l)?#<#:Λv'5JqwX{{υS/K I|aaSL*Ocló9'к9׉tPr>obLVdz@/,+r2Bz!7g`0&^2K*{wOLfyV5)RQl`E^йZSu+D@1i *p579 ~`Y `p\?㽳!_Wa9cۺg3X= kϑ^vQ,r_PY">w(ODCOAN{2\$Eύ2`GxH&7@= %mWouOc3:I aOF]ōczGqvM9M?@QWڃQT?gkTd`苑7|Ii~,e7B6D`3b16Xu ƒ_ }A%QKQZMZjy$I!S9}wZ2su AHZxY*o5&Eg6L]wm증AcKPkOhi(+"C26FA_Imum?rKPWQۓI5JD8ň{`/9G3sFdIr+#||H#xx63 XC4qދTȟ4:iI]dj6#;$f4/CDVZS*LuV>L`}>@%LEhn5#J8sy.c=|\J#< <~^J );AvBd85ޟO"=Y-Jn1}K(nnⰋCv6S>kqq:G} )cu< Gc,CQJva *2CZD-qBpWf 1lODoyIO|>tcӀ7b3h$p_2պp-yvw%A[Բh1(!XȘY~p7wQn%9@A3}0l,8#> RfZ.@\B8}9+Y濠ԻvPєcUghr}z>v7ZLz#}<9d ^Q Z%׳FZ<X&3~O/2>$MƃY(Z,sRp\~q[3@w~o;\Z O7vxp_f57/+缭%擋p8,a簺ij;j_>d-P1Ԅf2jR8Lƕ]KA5ƛg19( *AHKEO@8YlHOf4͋lF2[OV*O M6FZ&k@Muw$yrdk56\(9 T LWV:V2x6Uk+뉫8# TJwM/a5g~( #H;-{!ͬL, c'xV?H+Tx ? ʒN~>NڝͲ5r /1:"&)OiZ{q;oh+璞Kyܣ]ܯXkYol0+UisWwSl;y>11ݦ>W* FsA^^j!RwV5Qshٌ˹y24PB#QсJp]N6S׺;;YڸۦLK$鯃,Vyxb5o{x{?l`s\_|C!N.:.7}.n|/ߠxgZ ECI ]FzWY{Q#d5lw3ZOB=9WG !Ew~<j:%Vq . GRul pMj p*'itp|Ȉ)#Ft𿉁 j&n3_!3[νeX#ÔYhB]#H?愎VLsI|J&,*hZcw@[Yˉc!pf0-<š ?eIp>mKi}@&:Q|H(]L^FD۩%ˆ  "Ild)0V{wi2-| w~ȇ(K8킇Egp JA^n5ç#T4E6Ih?j ~mL$(N+];􎻽ZߍkNm x$|S\sTjM,+U\=h7p}#!o?`j[+V`~Np:i" CQܹksf]`J!b3!#;$V Fnʃ,W8lSF{cq_p/NOI)mEХo*8-A]73o.Q%n?X# K~_ ZQPK\I>uueEǜ(/ϻ!}&9&zM'΅YJ,ɑ_9O,:nۀ&`=0/.;n>s6tZ{G\R[YY9ΏQ_b -xVae,S{B"Paƞ?|o\R'8 jvQ33a 6'ґ<7Ms^g` gĄۧ;}߼36pc eOpH'xGE_X<8ۇ;M3@?}.v]OHrz```ЂˬTCU;^[>d9 4NHچPg2{=Ⱦy:T<%r6 E.|ݒ$0;&* Ǔ:^ia~!O"fjSoWKݏ+FYKa }NE >Y Srg͹-` p.atSKJN;@Yga~'nsORy}tו(%T8҅4qz4ݽruk8$eG(7u a-<  Ga \}+3 ʕ菄N~LH:;YuX9٥;͜}CQhT8x]\|sJEȴ" y&) h.hLch,H}12lFp#|A h&>Im-ז"cR#PKurN '3arpvt,A7?QpBT* 4!d.9M,f9B`(*-tb}0c[, jqu/Eq{Dd_Y=IGA ~ڪUTPW

]M[`K`t>QO4|Ǒ)c#Z}ܙcc7^[VKHUG}P=/nl~YBCCFI=)v[H*u&:'NoG5E&쎹;󬜻ge###Uv%MZQ2o3q tVt5YkQWFH\'#ZiIn +&I]XgL5Χ(rk,zb=z5LN?ڂ=2WddjωO ޤeQ!hT/ ѻ*{NІץ OΙ:7r]Ub96WOd>9=7f~1*ՈmI/K7Hs3ZEkS!}#'L`K&f3A})5w{SO&a_vhMh<%S҇4]Pbˀ W1=rr\!ܭ$;]&P|i4ᖕGIeEЬ\!h]1fo^p-s3B#PfQj:N;t=YY:h.ao2&A=ҍgX:,)j="NngM Newpx"ʡJVB7ikwV6zittw;Tܶn=3_ME 5Z+}81{$w5c.u/|$9r-D ;Yq;v^b˼ ގӝB|#BEmHgZPBzs\kucݵp<^Hf;4EA2^5fvV4!^2ǣy˗NNS`4D9-Ҕԉ=,;UCU@Zoc,lM )c mD&=چfw΁s[KDQ"JFi8spWT_Zr"ȅ_<K.jH;Cs78g6`? $(H_̚NQYdy\΋fYLpOAs]f}=VeH# FMA>χ@&WA A*:EryNAe [|ytԮOk6g 𿜉: >昈p~ٻQ?*kG bA 1b֣Rv̋2ȕzE9|ĕLb C!ccC;X^gx?O?>7VL,wLz`tY{SJ w%!@+f۬ƢC9:ժkw } R(N| <&u^O>54hRY]nnF6XE#5lqv*m^&IYEdi+S>//E;fhhQ=&6M~!Pgz JUU-|'XMd[xK٩&)ZRI{΃P<=[Ux4<1ĭVTDХd l.1\L1'Ow|4N6c"dȚhZZ^_KG $fJ?L)GI^Z2IB@YXhy+{\{cgDLw أT*C2hcDU]^;E^GEWENN^ߜbD_ -e;Q.Q #b1m'Nbv^Oŗzގ>Y`K/l&;XxJ8.3d# 欏Lt }84(\>xi' ]L@w\^B2yD7wсO+RסY D;)Po*G]ydcISS^4e ջh?QuiO<~EbTM|Tq*7?{ -0hI0,mTѵb|G #a=U=Ug' "yYº>.8c W8 #V_z>zɥ]P шg n棜d6Ŀ1 'RէY;j9uqc&v8 ,-NXm֊d1}{.v|,M6}Vq3v䩒YΤ "di<a`LtswU{ I5QRXV`!”]d.x 4E dV%?]M]b* wDV"tg=-e*K|K~pTGet[IiQ0= |dnf*&[jqN51 sE wqc1fѴ+C>Ƣ.5I=E绠Ny'Y?랻DMMO$f" ^;q "[Xw *e24]bx^[ي*S.Q.dN7NV8@h`)\ɽ$U{Gn|p32̆Ej5a!$!X ܇#NM/h"O2,y(kX2nC;z*V^_e?g%vښB_ff-v!7b<{=q&8v @~^Vnj{b}#T.Ӹ. |m>/v@ 3W1Z_5f˯4_D~\AIzzxq&=< 5Q.+cVQئ3OSyu3E{zm,O3 ^@Qp֗w)p:N 6ڌNu]aAiIrh=7NY \7bJ:0PmRTxCV+E=l!W[MA3Qj\&#MR#%٬ݿ6f|'xdŏq/9&(w}kfWQB}?z#K6; B;ZNs!d s6uOq!L-d4<Ჰ, ʺ \W= AkxxX-keOE{ؕLGc5z8Ǖ.&/r;E XS yNUՉol(oE#A5N9zx Eꂼ*vr?pO|'N9XJ&Շ(ΊQl' ɚ(-͡+hTC!emT H'{H솨RO?Zʸ^Y_u.JtWhGJ80*K@&jN(j4/9mXUw9|U墦.R~Z[O7|OOt\.Ao՚hjǔ }bpA~#7,^{ z*=ϣsE4 'J2h)Ȗ-N=FM{phm; j'$L7M0N)$>׮"sN}'1&b+6frv|(+j㠄AκEhַ[JJUW5>:M5jLVM,˲?B'C{h nIkgj!YX `o/ z0d}XKY+kgtaFԋb՚9Av0wQ Y(hUn)~xK'\h^WtW7tS 䑜e'P䜑DfͰ7-`j8fIFֻg.8!GxuRsѥRz{7vy[eؘ^]H6 ՜- /EXj2ȯR ͎2<:cHFI#{PX}1}ϲT/DŽг_(n9ɿ=%]$[,cΰNzO)}H7[fT#mb= QzQ=^Hd^2a3s˾ͶCYk~0X'W2ZFJ%6@'anyڜϹb*"6*ZaoLoNפ߳˱G`3ٯ߼==5DGFPL7bݞ+bQ"V\'74э=Z+Bhv-c_Fw!ˠQ1ˣwX݆F|\Xn͸-+EiF4ZSS{\ VdHFQlWZߢ t׉8հn?X&(xwTGF0L&Y ʺKkaoGq0jnEzF)pVG?/V;E^8pMc٬>S=dfmg{Yq!J)|Vp&c`Fs8] g-rt-Ŷ 7jYc8݅"OclvQzޔa"s̮ZMuT dkL4wa.Oj?#ZSG\0hX H.(A;ǣey5)ƴZ]`-ױ9l{'?g; ~fI?gh;]ܩ%_pmXLWA'}1쎦;-ZXcaF\A`*9 b8s,]8b.0<ߨlO&W;e& $wlS~OdRCqM sXJ:ެoA/ܩ0;62?*N^s(b峻0TAIcG`OXMH*H+94ݼ.K$~L{!8-]W|p3LiM2nT6w\I |@D#3=˿ u{H)4ߠ0,ph*(hIeDN!|bjd&ÜQ(L\gIf1YSnbSwG3Zk ڢ| IX\LO Y~-+#nP,<Ӄ 9GlqFgE ;0,l|G#ަ &ZH*=-ʮQc[F?W(n. W|k VW}\fu3)4vx 6ٌz#@Ie ["9̴!c k rv&+f&)QhG_ހ~ s{XV/AwdƶXEg*Wl%w;^7<\`p8Sy^A)<)*] Lmoa^,zhcLYw:]窣? '*Vt:yE>XXB|$-rӫ(Ucʜe/nv'X\iL䭝g +wo0 ]궜IehjiVސ'M鋽n%{zjNz_C!ǁ[ۧў*Whϓ7*7l4qʙ N y4iiˣE ʻ8uy"9 Ǻg,4tQX@#ncT|Y/{:_@{a@622@Z Gh3.S YqSDae8CV1E":+Ϡ 8ΰR@xW9 Gf@{PeFڔO2~.x f^k-,\H2t6aoWx%8/u6]+Ƽ/ap:-KlƟ_o2uDV*t >YD+w(b$?&O8A\ٍGrYxrk61s3ADlpcZ%X:l3w9s6vpFͯcDw/&ЍF^oNgDV:oƆۥL0+(=\K S 񷸊^%Ք?<5 ůod&ͅ#ͮOAY_%OpUuJ8?SF(C O*;)̘Pުfʌ*GvbkctZ?̔ϝͫң2cHce(2rb})AOѐn[}.-Sf$DN+24d&xTnDrVz9VI&*>E5U^hNDn8?S=41/ ! `_O6# (ރ4?mnp WЀњDq;S Y؏I*iLhxr}.^qp#7B#Cah>ͫĪ;Pt?bx y^OWUC&Q(LQQv\ F Û"dN~)L:?Q[ͫv3~ X%m%;/ F1ZnPѸEƊp琕v? "?2Zn9} ="MCǂX`m c3Ёx2ݏ.\INH!-y, WJSt;mהnhY!<…^,uEo-VՔGݛԝݕsŷȜhFSsМEUci0@ރ46ʋ~樍~vWnI$}'r#\,aglW6:NĮKZ'e71Z=*g wA^r*}u"#nZJ0Nl+T({YeW Ieu>Z}aI{i0 E #S ?o71X9ȓA}bļbRH)Ok}VGCpyŲ77Xe݋I`H:1U>qzATVi]wKһ>L3d7EG8'Ɠ]F 6F"C!7DU|z3г&A` ՜5@-UvS>]|5Zw9u\o{S]HӵsZedQ8ᝩ{R$^ I2,2/{8t{ÚjmS6c6۶mK6^x7gޓټ!Odž~m">L-y w'3*5=Q,hJv9qX Kgg*F2kyϳ#rJBPPtm-v(ݙz||kzWkVL֙TDg̍7GTTbS]*i0lu^+ȯ}at<^ITx_H޲1;zhqat*+ܔo'"!V6*wc6tD`%$FN ¨OJG@1eD7+34o.p3CpW&RVU<`I6 T>;1mD o&J9LuoZA"*J^K qz͹k;Frh5RYS)WT@~,HħWfT"8:A /=YwJf -^lHβcVgM(Ӿɾ[_s&g:J>g5.ΞUlНv$V MaYBɁ9 ru]mI7R95\|f5N[ί ֚Hi!3f*@?gZ/bYCB r2}_ |B2^h М{hWmf+-"Z9iEdzmք=Z5"Cr,0d6g")T k)Y Ob G ;}w)m|P9EXjO<'Kx\:#EɍˋU9u/F`_ToA=&F[Y>@ab}7^^Jⶴ\,o跮U˞ni_:*"|FެW;U%xmKjʾƓ`-zW`7eti>k]}O^'rv+B_pC;fNħЯJS:g$#$Vf"xl^b):ǯeIJhT%@dvI:)Edy@2 t}hU^,vR~ɧ]Bu>EB~Ej8|p=Ji#l"[P9ERlb7rb*>" dR{[HyS)+_a_mHq^;)=eJ'ԁggt)b8(>5zAyWܝ,X_rHmRby{̘)ҳF?yGƖP/Tj|KV]̷*1IVO庖]!/DwJ( /Uvk)-NTlAפѰU-2>#bithKq0 qn#اa^Xb.:^N S`&!Mߠ,:C9ӁlYE0,% k@`->aJڅ?Q|D^ |vC)_tXz3ԉ `)aX>f 3 }p=.6Is<֖*X$ 69{E!/. bF!dk⢢>C4z,wEJu[9/rgT+܂R[3&m@5' ķqmJcmar5a.u,,m-'%HR6_7 UfP<* Wڝ;(1+65[C \龦ӛ;O;|`:>>VQxW:Q<MBPޗ IK!tBNԴG#}ux>PE~, ;}d=W\G_6{pX%-XgBU9lv0_s؉]mPPz:MjR jBRooG*b׉Rs]ە,%u[ZT-x c|z:T|RyRl 9E>_}>*\ƨ=p:rh(`Ug~s f2 7XI<.7|M g"\h\WZvAj%*֚{r,J{7˒r;_ |'䞤/zU่;= >#?c):93cWxDV$""6y \-# pzt v6oYo4 V%oc=\EfVQԀOl}x'񏍬Dz\! QדC7<싃:ZCO /]Pl2ν2ʯs1=F"gZخXɋ_ ~7"S8YʬifU#]8T9l5GMĆQ_f\^cmXK ɤ͐oE`" Z׹raphmp[԰v ;:i͐+X+&RկF:>hė'Ԟ.2  7;t~I)E;+:r˱VJf!s5X= {_d5= 6upP3T0dEApZG> 70 `9[JO Ay${uUj0懫;'Phֆd':sY뜶C.mzCC3ǘo -?0;=/ ̫3jnvqnH& ߰$߂,o!i[σ;/@)ʼQz|QF񨏳en$y~B:?Y̠;*h3*[N%mXQxӚ14HL S;RIJ>'(ZOe R+'X6G|zy5sJ9MQEPB sc5k``kג*pZMZדV3KI=ٚFZ> g1?뿬I"'HEiBj>w4Fa)EV~~ɚ?("XH+ VRf߃]#zQ'NIµ2oHa4SI,:YSvyoX5فڡ\rIWGS2TG:E9zLvD</t ^Xҹ_ۜd?q+HPX896_N[墜TUJ%#Dl'H 5fsXF-!.k ?<H \@ LNOQyHyQ ,*/X9 *E#&|nVDCx >:_x[xZ|X1Mv#_($^ 'k}r\PGG_~z *G^0ϮYaT&8e 䁯o7]1o6/=HW]jM:z7 OpB?մ[͋N'd6+:(ZMqA?9-OP( )U<^=^6]͉-HK^.%-h4 &{z(˔!_pHߘ+`=I x}U|+o!9"tX+6"HhkwS1rEL [o=QTz˗,MNGuuπi4]6MHcyt/iF[7Ay4tINJ sD BvP.i5zy&Oƹd5фNj"U99X` /%6)Xp/Zx&zr UpFN 2OrGyu&[8=ͷW[P(x3ݬ/SdZHDR\#a>B)uvP0 W&M/-v=<%pR׵]>'1Xy IDAT-R7 ۤ\ J-OM\jiS.pbe'j;ZC?TaslsZ6Ü[R_0IzB,tt!1L6NInJiؓ`(O[:r~*Q#avO*;Tye\1+~e58ÍzVA瓁rN:ХMX|wQN+GxH^wE6t$H7=6vME:I cRN*ިc?ΪbMXkS (EHy;ԅ6 <i )nNx0څ;#Bsr 2J.g/_Q*y ɯ@*Q(t@Y@a3:DgZkKX$̰vW ]J,@ ?pkytr#ja#FuD5 CL9a%lWt1Cb '9M6tNsG1Y”Vy+z2]Ҟ8G&"#5[2 h\j %)RHoP>C{`YS!vI7u]Xu Qр;WTw>4n¶߀JyA_ Y)Z'* %lCqvmd; j"\,m`5-X gwF`<쬔_.U;K*a~^Zm2h M$Q~7ͫgߴb=PWf'[ou:Qx ;b7W9Q2NFJi 'I/p:I#z}UQJBWY֑dbްkjyM#Ռu3fI3WS.eH3| dXXXeqy4ܷ%xyfN__IdR}UIN`)"Y 4-l-m45*PK-,v:]nDp9Nw ~OGqnڑ$FVȴii;6LJDmoway@ѕ8ݻ8o9P}ra*Ójr@ ˢ1ERY.tU& :sw}(b;v B?^׬i7#]_Jsygja˦xd&\'9G9Sa߁+acڴ=ۑY$=Ʈ:'uYZ ܓԝ ӇI+} &{3 c[{7|J )-a 9~W(D"w?䚕vmci4,H샗^ f] rl Ƌ3>[yaE]Y鱩 {2P 4?My+F) pTA I@I̶NlecpiS@{>*sO\C^[e\9K,+){=+?kuX3 `flNub'ףtT }EH\DP"BWD |f5̇otOM`%Ei5ah%_>F>>D"/*DvՏ9)g]ޡ9#R f%h0E7ElFxYIo8yǝ!orzQZ5s?RXZNJ8J} (oWNUO4|fACU;݊֩K ˸ekC`NUjK juNY~yVU} ZžP9ߝiC1dY}y:^|K kTVNf&.^i/BмXk@%i9#2h tpm7+9s4SܻC-\RZ5kz*g\-䚧$9ENx06S`Kp7qIָo/?H*||(z R^O\eE4q^8m왓!'lW6f. `zǫ>x+kͦkbgٝJp$7)Ԡ_-]:iW2pdgyI$ T )[t+35\" _tW.2uW ZW$һی<.=O@:^Gd3rR1wS^Ȗ8mώOjgޑJ+o n '.ŊQl_b ;2(uH օ/HS*93Eg%⣫r~Jd rz"p6n rFecD4̞\usD[4}T"E!CuM3A5EI^n3UXPxK/)nkS>W,^hTZJ!na2i^:V"_Fx3l)iJP F;OD4A4|"hI9Uc|>btW~AV Ekzvtdsz-Sv!o̊r)V.lnY5N^䝟cܪ7D`Kbp[,[DE_P\?c6 }t W蓑t%o:;>F@M+(Dh`Wav ^2cSqxξ#ځ_=."ow̥mQv4. Œ ԖK+edunPmkҷҞp~("gyFGp/r6cS2O29OyZGrзyq oME|eeA]q<.H=tҗۭY޽Q=ìHc=IOqV,BR .AOdǓx ՕH- NM2C8͆%]S>$C#.3vgNg8橙2z?NqUM'{,*mm^n`*p|voY1xARI`]!W /$/r#i*FSPEsA/{8 Æ{two+2>ڝx)r᙮.Ey q?XމgS $vl+7 l=>Jyˇ1RVsp[ץ-<. jipmZɇY1f,ɶb< 0 &m \A7b}HOr@>f}a9Yh"m|A$m:}(2Lj}ntxU*.~){eS}O])”Gjkt Y%= 6[|?1~\7+ۛCFPGZ lQ:^mԣ897^ SPK-|[\vO 5e2^qꈐ4M!1(U'2s*{ZyGK?vfqh(Vl7)K*wmm+.,0 p xoP׮1z=[@驻M_UpAk8Zq!\[VKS]J}9\ `]"c%` HI=9ܦ7hR+in`" 5,mJ,4KċEZqxW Ai(7\]#Nq^Dy54g;a K%aw08`|}b;6HLџOc:BϓJ2оſ?.i3'ΤSHm|9n~*֑ G0gAwXihgف+li I 0^MI<78#*]VoayQ(ո+à18,~՝kH7*Om$Hi/4c4>.U3M-kn>=!ʿdb3B6P`u7'` j彯 ە7Q,"=|u0qoxC9 C'RoN^"t'HǓ=MFy|d$) 񾇼!֠"6Po[8 7;K2w_6u2]l'Y)}cDLBd,gӲA :SR"ȊN21Mur <ªm zFטtT|^U2C>㊱'I9FY^}^ޗqzP+&G(Mi~1xe`8 3oeA_L&^g*np']R$.*.Z m?i _5 O,x`Γ(K5VO8bjfec]Ĝmv'-͎[ުt3LBHC4|)>T;]}`6jv&w(?=- ']f6ڹBJE'FiI#r:?OMXMt'.yhVb4\oWLE/s8ۛy:Zot?T>M>ewtP>PM6Ҭ5`2[& "'Db_Y4d@$:dYmxr{F: f,6:5Vo*&TqU#;+V,F5l+/N[#1f_rğ1h  x'hC,S)➠,g֬/>&7L4] '$rA.F'2>/_r֞E4a;yt8J >2c/g#Q9fScv:{YV&="x?n(`2 *5"*BJ/- 2\tâ%|C|uhՍ6L 3nRdaz "^s<dO>TB705/omޖO'qR$ڔT\IϏ<[FW@V( O8I/}ZQmy: JJcDY UEdOGQ.'yPIeFGFd (ltv wZ$4h}+5^[ ު}L1wM0ڹKmvR͜z..4_FJM{)` 1?I>1N?XiDZf[1fu7(Zc;^WN"KƑ"ø_ەȨw>{G MOrG;?h+&ͭHdȼ=L#PGĽ_R/]C)<"}Dq>˝O\I輻;EEN˫V jݎY'I a< #i{T#PrK\sh WOA#頝qa'H!ef]LUoaRS">d0̜t$J̈+o:U(˘`;o:WbyK@D g 5cNc0 Ted/Yͮ' ]F0!yx,}U>kR"9 ߒ,Bő碂 |`3~1Ǡuk$䚎p7,i%B匁eAl}iQ )at 2QsUyH&ȺB#@NP3'xCVCġ 0eprA 8(Չaf&g3% ?V^D+[Q!O}wr1+$e")9l$\uBw×d')Uu ҉Vrȵs!J"dgCwG o,+Rgh4ռt>ئe#M++<~*7ʼPNg/fpS\ )hZ$Åྼ)9xHlaBd.Pzjo0'vάfߖEعN/͗Z`o+Y=Һkx*k e`<% eyiKwM)nIvQ{??LNVNNL2EVEW_fi#$+ cEu(,-5Gjy;<LMъކ /DNGO!/l/perQUMì\moo $OUڈG=̄B[-Rd|2?έA&[!/b/U6T쇅|o0a]ޡgX$:'Š3nZfX}U`}F4ܚeAo+3KyhqN< vi_!1rގ.YfX_esQj ]l Ù#[$5eM5Mc[o1Yh3ہ^~F x-VbGxWox+ T@@Cu~ܖ@Z*]x/n켟[r/Kp8Nť;ok=[oSx@`cneb<(l]'9Iid cfCe`3[lsM#̼Ü.VM|Uj͑<5֘'X2)V;竴]l2RĠ7E+je xYj-^5rB)ٍ8ZS7/Q65|=M{} M ,k!+$w})!ݫ#A}a{$J y]q: ,g~cD<}oFL?InG8υ:7>: r},}e4 .N%Go<`@%os(."ʰ2'B^hAuYc#Z~PM}q\CnYjj~Wo֨y x.\$ng3vðH˟um5CYSoWp-COFbq>e+Vt&| OFB K)W-<#lGmV˖8&&PiR~fL&ZjX ?Wmhxgp(M{s&<%_p\ @tIV[y"p~L9Wa*[ݫux#J|XT 6\g-*M \*FhQ/QJR`<+},^q@6r:eQۜnoa10Yh,"rqot F|IÚu Ei5Ht!` v0cS d3˻2feK`<Okx6q G]XY= r#%tMBIr%,y9Nf+XMr5xCHDŧES=`1?+/=ً@7 DaSM4c簺[EnD+nvZެY@ }Dj6/'+.Tyg#/] =j6TjB*_)-I{%ɿ7%`9[v"wͪEҼ;sŬ[For۽q)(_}oLwrNRaGfw!mP_JX]qit\ZQtE[c-B$}<,M!fLpiogE啫yhJ5"*k8+WYE3h$b;dE-̥F)3.7O Qδ3<wJ&KNu.T'Ӵ,.~pW%xYGZ&ޟhdG}}ZWP!QF {el#zZT U+{%^#\tPoy.79??zQsMQ;lv#+?g_q~X.4PKjk޲^XM]+.FkEMw@>{zS 2*0Rտ ى.QH=o]Lm-7zSLcL7_uĨ&wcgl;Sj55]=YkF@9؊WqY9ﯳ ?zmGd]8+MM@X]`:DoA]8u]ݎC+Zf ^; 09_ÌG@{S,2T=Cg pVr-K! yMY͠iLA(nF> EL7d%ud]A-j2 < [dLa#8LS'-v-s(S.4:?}@ *je}GgPE%}ɸf=Lvp _g<3/.70QQ6C$]]X^V 26o' >O<(06s(~k&2&lYHw;o3l+psRquԎFȶ[Νe8sq/d^ iSL+p?NHN.M.0b,.-ʒ^ة6P9iCN0 B)`>Fb8Ͼ,y|@),)[Om֨9K'yr+ e_=G'Ӧ;^hͰ/U6$񔔦!ڑ`@sp =KbDBV}R_\NtQyġ,Nn~i4ɔ!phmU}"՜,'NڳorLnV6UurOH4r`^;Z( Ws#i+݈5ؗ41_en}=%3r\ _abX֮6iG<˔V,aX.^c +xZ)n` +C^5kpOr%X+&FgXQxtJa5 +&>+3&;VFB|$ 4>+{;دo\TƏp<9 [/fMq(n] S- cm vD9OSQO%RZyQ3R ^B#I|&od9?(͵dP|(lGqPe*AXԐbf^Zm_2'Ѡba(Y[iTA;krva j909[d{®o9Ūb7-P'/Uu0il4&'"fyeCeb;$AuN+e%GW_g1tB*P=QW:\r/i(F.hnr IwU\/Ύ}y4}=3*;+5dHzt0]qKeJ EMb/mDb sXɬȯWH|vCyM/Le_a smKMFFr?3DDYo#B* U| 14TG.נ0Zy+bO N r&8Z >}8SV\|ɞ[ZOTg^~`y^DcDw4t6b Cp1/K;ǡ.+^:EהJg60pg~g ќ6LD+H_oP-(}޾x }`,>^8vrI<>t&Ppn޳X/mKʳ`&? D~NuPu0fE5<2ѹfˍq WH^lωYXQWoPiJ_ Ig Osz/$ _y޾Bwdr\&]FᓃSs.y#%cvMcaweۦD/z5XOĈ\vi큳 t7z/4=T&Ԑ7@WI#NIMq БTdYgޱVt,X<%vÜ/Z9C.uqاnsvlhkl,Pn/˾VqE 0 m#eߑ2ʠ63]Wa9$h/Deb%,bauAoW2 TNk8 a]9oe 4#pqԇH}cπX6Xo˂,/1 ?Q`2'c0^/e[G]GͦͿ6.DE0[dU\տZ\;bF:*vAvVU(/Ww: gPCԋzXK '2nnVG- vқB_Ѽ}fHC rY''VY34l LzyHP~'ە?kRz$kr{DC:Tt=x0,j;E"KSJ(WBCDEmMWi@:ބٚ4N%qgP Ձ +qa'B`'xZFe. 'Dq< օpL,%j'j2zC"5GDBES5(}BVC뙨(Ih1/C ϼ{hI(m\栤 'YyN8ڕT!| =1J[!O쿇?QH35ҕUG5Cè~r3IډOp.?Ljx=L)Gn)uR|#^ ;xZ)Z(PjȽ~I8NKaDNmD%,v!总 s![# m d:*Q(y@*g@S/]x{3 焿p[]*}I)ur&df{X=+Q{C:w eoӭ޹Y$8 +r "yRjFַX(:(::a|" |' &^_2QVOY*约o 7l" a/a,>Ot Wp7[򢈐`u0@)dVv&Ԓ ?d٭T-X-shT@.x/RLX\z̓MWh,\,N5AUph3H?aYc}&V/Pl[ Q@[Ax[lZ-Q¥Վ=<<X–3߹V'+p~|?hm?Mp!~df/^ 9c{Gw%\ F1"ٓk%\G{nJN,$xIS>@]M3_0~FhTGTU-@Y)|hUW<2䄅~f-"þ]ϿkmC<\a'Q/x5˚tS~oW~DN2V ǭ s MV9y؁Yn~êg ?b3dl ,'B)U7h%@`UyCKFlG?>~λ]*;2OODvQoŖWn,2|&ٯ+ 37Kdxlt>r"w6.Z77AbM*c0ة ~t0Ҟupu&i,fƻ@4gyBxEMJ\y/CQߣmh- I;h6rzpV,`)R^&+yjF>9[*OT}%n Ij~Gۼjp~,̛8MV({9.M8MQ6)\8,ъ;?(^U \h3 }7|3o{|B%+K8-]$Qu#Mݤ2k ;fÒꛆt24, ^FS ph#Mٌ6pz6RBX-]ݝZN'3۳)b0Oie1Jƹ)K`A] 9jxMטg YB#2V=vZvQD!_7ILrD9\N~)_ʀ0-gX1/Єt IjAe#:KY_q*V] +1t XoĘ/@cp*Zw2@%pZ.4pEfTĂ%r,ػSakǨw~ƧDFbF? *#v,Ѝ)I(WL!"DFZ`D.- n /pD#eitë ȉny䬚CEKɭ0n1أ@cQQ&n{G~)@k|i1mtef N9Ky#nŢߎy氹}/Y1HwV 2|.-f5̛1UȞ([_x0 ߑ΢<"dc IPe=_% xGv 8 0 j>$9<rx#LvÊ[5T 4Ba8.";dJl`dg3IN 4OitT*i+ȏj?OI_RYbpG렔rTVcT"獬}vOq(wV)`{(P< tH:~E"/iUsYs? =)}aQABk%8%Z͒f9Tm@=&keh- /y|nv ${OU:\_\W[ڠ%2h'A0`Ep{ 솿AQfp^5Gfy0&t >פ$ni<'kBP| yTA=`PƐ:YK>Wݲæ{Ɔ—bpCfd 8Qք'D1NOdАMY#!Fp0&cI`Ԍ Ʈ:(Gwe& f7σ դi"/ЅKv(Jh២/"2XEb]_?Fq!o1*{H/A|fԦ*>H:Esى {g:eǵA 4 v?B gTS(}ÝDIv͒A.w |on|M>9~90_\ Cia_0sh\{s%ۊ(P rT(E f\Nf#ⅈc@z\M0t@eO^ (`h骪c.Do=EeJ>±S(z!}Zy@_i @J\|O. &0aC|6qt,հ))X}` :f4 Yl7J}Mx#{u7Ir7 ]>m \/h~R</l)P4|EbU8-zLq *LǓJ @*@ZI# ܵkjqͼkէЦNfN <c^@ḫTq =WCHPnxİ:F'qOx=Q@ii];jLV?dUБRky\ QԼ7Y'>%xx.>+Q/c$?lmd +a: w:5{r Ÿ75mgHoݙ#d2[*SOk? 1 H6/dIx񈺕yѿ ^~13OAM+ T\ u!Er(KUd*߭# 2⻦F 5 %L|$oA;&% ֒׃TZ$yv-bXP/4n'vc'~+TL~NJEp\)O+O5a+0>&"h`7l^]A+!O>vJm1_kWtꭍWiiVzÿ`c;P9C)8'Fu)Zkerr8F |_vus{+ɡj$ my7B|}ׇU"dmxF\ Om =l9ǀ<*!O}d ae7pr/uNATN%Hg0'6tQYSOW@_xgW[̚byX:\V潴Jphd'ႻDwXs DaddXo b"$0JA)Y-/rf!?zlY~L:*Xh̏V3S3΀EJ;( {`+Z&18b@+AFÓxLP Gr%~nrMa 8GqޕIV_tOt6 ¿QWh&ʣBJ:LC9~JĂ VA:E3_m~#x ]Z7uj={e-y5AeX 8Y]5S-%/:vx.ׂ=8R{|cDċh s9"q3!=_p~, . 80 NYxvrU1$ep^3cF+%Yq+t\ 1*qAOY2zGzV nr`\=3TK[ u!,h/Y {#i|%%nZTK􏳜NQSYTFZЁ*m#@`rW= uJDMe[c2zr(Mۡ}&k.$[}2NGGғ*v=-=Xve_K>lX8Ĝ{π+^cVX1We+iq _aqH&Zmҫ8<'[.%;!=/_/]FYЙ7\^Hrh1 5 ='{&҈~ӌX%ד㲑؁V^MCT%rgC8F`dz"3F>mZ`eV6Wt'G ^]-rP ge]牳(=ʵҖNyxP 1=Vg5@6v;^3iN3Q<:ƪV39q*me mbqce'8GBicL]C_y?2wP|3TcSBJ,?N&r8LlK$à;/A+sPMXE{=bY{-N&lF>bX zR~A IvCr!(ʉ!n5|65K@ m. EEdb\Ț1ms>Qi=EL{#qPFPDOXbf!H}.ژoyM=r?mә?wN z8<.vLrha$i?M⫉ V*qX -'YJ|4;:?qQ<DPl]$3~t>2Yz*< <]욀]?C0 D+a oB;L#!UW3Yq:GKaI EϞSC]b,MBmv3ܬ-eCr[D](SIJQg3W6S#q\3pN0X38jap!?024zE"v9IiRzCnEKC JuzFş+FM/H﨨la3]]]G[)]2yno٪p:ZN2OpMvP#b?6x +r bSeRte}_am5W)mXc3ʙՋŶߞOqE4wWWg0^I`9xN8^ìD|dbI#Õ`y $j/ـ#^)%XADk<童KwX+rBh= ١._ IDATcG<:}2,LWn&:R?#f8ϷKVRVSv7 {=-FWT6ffyC"i:U" LV Ep;qK|m@Ԗxl{9eL@Ay10`ZtB|u _b* :-n:>\E+h l =c[h(f(,/ L#Q)-zSy )|p>YEɞ1c7FmCUrg:"ˠ Iw~9\2/[Yw/ɧ{5zlhޡ87i0NV QMǒy{x1V3ک3E.䍻x 2Tɜ0|DL̸Z;z`_A":v3wަi[o/R͢Rxd $J.:]x:mYyI5Y:M%XBr99#OX]2F;t"rxGOnIY ^9\Xn0o(Ud C eJ=&}aCeQ2êk=̝Ȥ;J'nc)5g;ޒ3Xl#:4Bx6uӭ Ē }ؤ3%$sus'9mՀ,plK2MYP 2T (!0tzMW6IT[|D48gp'Jr X%UlL|_yp9=2%bSNwWX1*䫸)*ڹ+$NoX7լs@i@>"S"FFir{޾fyy:gp'a&C ~7M6@;(ba(*?28E})O꿔w@ܹg/؛f0nh҇^$^y rGcm̉_h]!H^SqFXE%o"xCN;.P*N˹J8TGVlGlRNf͂3뱬({̤~nJC&߱&)}3Ǯe`gӏ$6u+h!FDBQDOt1-I]:be@:n(-{=\l0d5d<.'8 [`O9^l8YV yI;lMGdmJމQ#[!3IyN:XMŷ9m1<ϫ?6ly ߵ2_s"cWYMy7!J:~oAY->X  2Uksp~jO8E!A6 7tY%|؋fq5#!$nq;t@uJr R fl(; $./9`2m=C^S W]?OC Mavs7&{H}-?dR(V#BnU)RYA66tMc.^(Ru-gI#v5qdr}35NAzCjL'%|9<[NIf\ĦwX]v !&-P,r).|'^DkI|NA1\B2]>^a1ķ#r$$0!{+) Bs^[i s=~n-4B#WisIҲwdq.>HqXi@uY\}@h8t?UQބwd\gG;=KΑ9>/aj, {BugQ8EQ/fd6QC7 e8Fa+/_< "'@30\hqgBaTdsf@gLWk*D/ Ƚ|6v/9ӿŞ[NV!Ru8p)GPMŏx.{ZRf;YyV.ԭLWW)DvH5qHkg'KHDƐ~ %8 w)C%7lj^r)N:FٍS 1+V60vu[eKdD)B]_%_2#\ﮧ>3! b.Ƥ 㾠>6D&ղ@Y5/f1~d&oD3nɞt$'>KSx{7,:n kTj$v] )jnx,:{f5^oSjꈰl6HÍ|fmne'(>ۻ|g-~a(xo1ĉrjׄ!ۍXܡY<uE9."VMՎ8%!bjR>$zVf]Ұ'rLw|rLg%!R *g[UXՌƳ}.P̐FuKwƦ?{/f)Rk[ocޗYӮ&W >vqەFFPD}Ddh;kdPOʡ+T=4WhDHzXav rxLRn_!XDUO{2#_A:b2"uHlC CZ*#3ʐ]n4M4JQF! rCy7޹OPcp*pi=1H3e^T@1xa')%:RsG5k^G9^Q:k7"B\"gLÌhg L=&)YjtH+1|FԲ(wxȚi6rG(eX[bY5Oi״{Ҫ )Ofkiz#Ce|OkqF6VWq?AXn2ߩ=.- ;BT%6-*yP421x+0-j'Q k-. /_6\s:yrj&k/ __e1X-Յ4~q;!6f32J;^ؓݥwzD\[I71&pYa)CLr^LsRTxcd <ߠ=tXC@uM YfQo[E(ɊP6Njf"!YMc8%7'FI:+re%7s5wk/MvX>۸f;_Dη].iI3҉*._J fe,ǒIi|\SXIe7]..xPŒܲ0n%;C> Ije7l䝼T 4L ݜs=99V 䪱B$]ekwqZu0 4Bn59ك3u1JXp(VxHEY\e 41*T! Q, d563*Of/Dd7)S1;&'sF)ia/8*k6A_ lXN {YLpK=r]6 NB<4[QP'h/)ކv "`Sr%kƸswQioCk=*uCL:xשׁ^#:imJ׭;"4Dʯcd/dl- K8RxTrM©7᪸ 2Vr\{eq߇Nr!*>b +e|A扵"/I+p eH= q?yB:+tyZ3#jC~BY-DsQKì (3Cހ%E?a5Y97"9S?d".g>#xJ*r+K Gbh3#.K׸EIw>Yh:Vf\ Q*r-v IX7̒D6'{oHEް4,$? U iFyx~BħxM[ch*U(.% 'u9v}X(ES8Qz~H|HZ:Kȩ;zbIQv婐b'PO8XP*sfqқ6{Y꘠X)"!.6NGKB3Eɿ0-7*zYoꤊyDA "JMR irWd*Ԓ?qڅؿ4 "%g?Sx*9ubxZ"^|ęFss)aMDaO[8ۼ Li7&õtmi%tI3V[e*^BNjQy]ȼr=ɖ`:9&TT^FKbysQН ?7]\XkjfO5FMX L} ALWQ?z3QyΤe$5c*//Y^Jުq3]/}RD;jTh`RҪV̳lC]n,W'M}}XB?Szswг{(~,|_`Z$l#9 jt<{LȒ8&-ʻ*ՌXH,/L,ֻ&+^e0$6QRҙ2h63wb _4o|<+X:f"̙ųb2lh*c(`_jOx@nSq|Cvȵdh'4?wz.,_ld%j2J8I;筒$$4VN3K;Lsۻ=}Aԉ]HF^*؆ַN*+ tO{(X;%M;]أtrHt6T' mcC(I9fEq ܐ'Da?p}y@Xq~[J-Y,?[LhC*hh]Qs{!RK%_< 8T'!#`!W#H)B=5\!MJr$euMc)mb̂3&)r~)$7)McA24e E.@)) FAސ hE& K _Ng{X^QdS]4 4hA7K-Իƥ7߭l#k"/rƿԢ2'͐B%JR< /Qr_nkrK3Ȧl&gNKIYguj3 2I⤓D< {$.LQ!~B5 `gd07)Z-}aufNEMՇJm[4z<,kV9-f-!2?-Vz& t~Cy;75CE[c%ZǙ_pl1f \C`,pH}8M\/aATӍг[RPW v,Vb5|( FGG@9=kLD%"{wrbp?h).Eރd7WV(܆ rޗD'#\猤S-(QߩB`r iX!7{c) /z;j3ye.1-c?N+8X i0GkOn8p(,[|! u_W艧GN^8vIcdF尚U2sj}c=\=; ?Yǒb5 ;t3XS!%]K0XVX J@18X&?8WShm_P,| dJS?e5V6餁,I<ƃ3ys7*#$k;2HoTb(/I |+v.H`=XGX W'fAdHS}+'a ܢt\2$Rꦎ2 3>{N^OY0DԀ9=USA!Co뻔j|h_bo7.O/p{ v2ߑ Ƭ`hPAE IDATzQ6@w$PLcQ|?"$eU3 OG;?fGnJM?H>Ĝko"l qڿNzffEևSC@?v4 =َp5D PfJ ]oyCYH="7b6{Wi}=⡼$.akL-K8!Ʉ鬪?PX'Ox>$Vo @%ng!p \EGXpsA~(!N;YVDʸD΃Pa?5q&.X!RL_0TV1'M2<܇{fс]yD3t dZ, sȕ6f2U9M?z:cm=U*1t3NW׊eX rVEh<쇶$soOA3V{*9B202Uv#ьF+SǍ52UvBKB|=Z^sLOJ+16ǵ+t)M>:X*t(*Ѧ>\BG%g 4M?Q/8-H5j g/u Դ¸W$fz XMx8%*D5**vcWXD*@g$(a! f/3l&#z;(#7- Oc\A] %X16R{e-ͥA{ljXlh Ky^<|XE.&T$ԃr(z]7y0Yg0X0 r+~QVXٰH5MEҵ67l*jeW=(ov^gb|O;nTY+ł1콼IN~kƤW>x#G?w&=Zo(@,SӜkNu2JqQ{VUά"ڀ%.:ɌsE>A3f ?~ ">$~\cu:1STfՍJq(~ce?$w~OjIb^2ЭtӌP)uZA;xjh~XV,G{k}J0A?*X;(>,MbpKT䣜 o^4eh!tgQՐש;kr-v2/kUnpǭc1@Sʙ+r F,ip[T V'2 ՝Lb?Qɻ45`V%;c:γɵb$>I6$-Q)\`q!X!-ߐ ᰗ -odNqSs|NZ˔T"rCGl˲BaigUxj/4rk4_9445л_VgFy?  \fFWߤD@f˛"^v>|g=ɮLQ2B،o&Ya3+od¹ld Evyо|v,LN΢{HYXB. 7W(ge7ˍw^~|r(_bZ%vKGg ?ley]N Kc埴g!".4L5[ ^ofzgH T` t. >N#َrdÞ,-%p(TQ'N7qo;|,]+&a"IN1?*,Ϝ\UjؗX6KN^rq D:>Q> bIV{Hg#a<˂(ɱ.}@wQoe@Ar `?|ģt:~y]D2xzy8ebTsKL6fad_6'ЖR|͹NB q=ZWK90 cNSYvS. p?Dȱ?D9-Xf,]ă ZHCb.D!r2VN{p)dS>Uġ!iMi_fRR'f_ 0d /걆B kn75h~emsܶ{I[k]HAi;UX6`#CwH&e)Bl9rx9`0l) d:_iD 7"Le-àڟ Px.K}mSSAJrQc/IÏ4:%fae USd`(`e8C V(F á, ( xHtYc5;pQ81do)>n]gNOv[k4?Q#ЅXrIVR[\yBJ Jh#:3?D- Aeej4Aתcǥqb?`bd6V[l6f[ZТpMN|(1-ыѭ[FJ ֜7tցb]PU/4i:P|yVUQ9k3&_#JfХ{jލ?R{`,>3z8 gc/0_ שo֚^רZ>hIʑ E(`sygg w5gGmವXrGͣ橞Zk#K9auVC#9X8/|~A`= o}rZ E`ɫӦa7J7bBEewu{zRSH]*cה>S;d>JR Uv\+y@Ckq6pQI}O[VZQDY %=1yES`%7֋&t%/M!6}IӭevWgw kr՚`T,-Tl6IM$Ez7w7!E4LhDۅ ;#~#rv,cuYC|mO/5IG|4 ܤ&" =DY[| 1:+ȥ'Gg`=HM1; ]tIOȣ0gn _L_3ΩFNa{Z)z}9<#2D t[m~.P2x?' L*?b-2Y /M*Jv̵W7@z5=},×雴lgԏ*ϱ)?#Sg~m碱L T@3($8Jn`urOiF;O}US#!oDw+]k<y6Vsh3ZG6A.*!O#:}B:pQX7h6'3yg:)iBGP PVEwt/{s.xL', GSc-j,MrFˢr(qyN"eNMMY|bKT#QkC:+_0*&r%\GrJXLI nyA>a'ڽSAg!R P ű?155'>$uU^t)82Dd,#,/tˢP#$yūP]FN,Ed8&@k46sDl%ImY%g# ;ACAノLlbxEe pfbp( iP7VeTS_"%LL0WxWpZB9r,h6e':N+$/'.8;3O@pw(V).)Nq ZGJqw- HHB.8~3#\JV5VX.}jL$ӭp^G<}c畠|Zy*d`C]MOV%lj]dtkj ;adH>b-¢prdL7Qա=K>Î4\&7S:e8+XWeNmh#|+dqberHG@ؠZDx@A%׳/lG7:dQbq e_"w>^-kAk1\K m+M8Ce-C mZ{xq(iW/ N wc?[wYQH׎j>"W|a>ϱ!f03|Џ>_}l]"j΋憭(ԻEie.lYG!D q}-a h!-2dZ<gm0}3xY, sj}ju0Vޥsz%S1 ⏢x6#Ӷ8]S|OBI`݄5Nk{XVPx$'/Ul>4n0Hؐ+yǴPֈ1ٓXvT5,0 ztvʼn?!Y6 =99s;K85s\^VWUsFkM\1W!o=a-]-yɿasFgG-gy{;s~鏭Rk0P8s?T'hnERn=}mQ>tc3=\D#?{pc]FNF{>3 UT.` +g~Geϱv%nN!zYqH?Szrˈ `LOp}"Vߓ}c\̨+ᅱYiKwXw(+y^ ;Px mB&_q1Ai/?L}US0 ;#x07"FzRl+;^l K;&X:|:SV@pS7`R>4uBWyt:Q,IC^4 ƫg~xK)JH`)̄~S?|(&*, "$ꣽ˝N99,hLW&)}4,_ݲd|DE+lG(ϋ-d2!+Is&5Ib0$:H=#\@!0ۥ9]1rUska{˞H'`&`M^&X[ Hu]VXЯD>la%\q@IM- l `=Tz˧`D̋7p*Eh g:LW513T2b= ð c/ka3Xm֖}h&]moOSFcNp~"A64B3(a5vxM8nZaHz&}aCD䐿dUK}tYSc1+h.BpETuJuegÜ{jڄwΚߓ/rX(Z< VUh%2hxƹfx8 d*rs\:XLk.'hr\΢yUҵ@..0X>F-@z8)n96;frg%1^x[yaLm*TvT!}+a]5aqKi JdԖrg}Rdc2ڞ ;v[8ڧ. `]H΄mf A!4ۍ@33{ɮrWvx(:] ݶg1p}ٴ4s]U(e0LJuqNuFhކz 'b3졸nN^ݖgIfG>vY$龶˟م̝֡1圍ZI/RYN\Tf@d==)2+#9u}`Z`kU[%n'Tn18Vw=򐷚{,2jWy2U5_.S2YDL=("-"9l\c  SG 3*hWQ3%7.v`G*QYY.[:^wi=g8(DuiŽ)qk"KX@}0nرFr󜵲ˑ#&_]1Cx.C7D %}J.#Y'pu?G`zpV R2l|iQǾLrF,s֎Pۂ7Bi]Єr|qp*7~ᗂ˴)\(VKqGQ 1DWk{+z"U\B! VPe8,;J\m=8A rTR'rbCx ܊Vm Y=(VR[Uc3U3V>cReWW*IT[ MML, @N?xU]82X5bɧ;:b8s1/xdQՅN*nh 0Ъaz^y~g2 O2*&@fUrw&@3ual5?ejj7FU D4X-PGe~[MA4n3r]ߜa.y "dK-Mȫ; {WXS\KcyT; n|/avPeZ*/ d IDAT+êlXo&[qy P/U2$` x!'^fL/pu5Ͱm嶕.5]ԓ_PÃ1/'bA0#&[QRiu8tOd$v{݈m`)ή$[i"aVA ֒]o^}HKaϩ 8lZ(mP,l@1?ރI0 N8TT6IK"½P` l >y@PMS(CL^n~P-czEYqJ[ Wqgts$C)Ň<>^uZ6ٜcO4ߠ+d| Ł+w MC+UÙ,ZBsF@i6aq'V$\֙[t, Wį\_D\qq{_'rlQ)Q'gށYٿ|vEVyؾ`͵ctyjq.mLewy%B-zgR=>.oy]!3zgsBeHf,vQ -NFY?g6+Ǚߨwltų/ˁIܶYm!;o<'?,"ؔC az1'O"cD /-p.kiVHFi7nw?,c~9&zz/^#iO2da _e9~B/]e2Ls,r`#x-O7un; "♳=Nw,trVw Se:-kmvUԧ ʋ y8ϔ 7evfIFTegV~UM+tVp"kA{ʖ݁^&c|c1k)} {VZzï47(g}|{yFZw=z:twO=`g;7iSa?3fr\Jc4+fO<[͓ӌ+N".Fi킪 O* / (M ^`cYf qaucʄH*yǪj rd{`HM1ueqdꥢTȲ+Q+i-&)L}ϊ JO]S@QbOڤIZ傉XBa#0 aXLQaTH³_TBͅ*+?K+~jۧQl9nȓ`İCV;v(ʢVܥd2R>,qނax?pa;goe52'T0gl3iX $PuQCuF;f齨?,ck*=L{ͳ1 Y $qg" ޳yXH[Xm]7mNR:S RPZ܃-o.2f2]¡eBξ>4htׁSҋ簉HzK[xG,(B'!>,T/{R4*,Tk*?UfqtzN5e% P8+Q8+KcHG6$ 6]*$M8q]Z;JWT)f>6rMLf[%O7rt)K0;9'tSaln[Gm./̟cV0Zg60ɬ|YUJ7){/$QܑR6Wc@0~Wor tF0ߩ#=Řc?ͮjjb 4.' ł>wV{#I1c!~/Y?x z9d%Xkנ z~Lg=}|xaUyÞ֩J^L˪p՛Vj]߱H^r`1H;3{SV ._-0jP홅1{ܙ_{Yl?0:}?K9\Z^cQ(oVCG FC$)I0CP[GP?+:KM-pk[\%:&n&y1\Q.BVheKC*DzA;HC)feSggNg*s17V-jD& lEBKaW8ރYRש4qt ~Xzu,T|nFOD* 8&uVyB!{UmbvTn6d1LvJlfIG6UN`17scЮtNj&~VcV[U͙^HP$\@1#TUq˶9 P6P$& y>EHF)&8*c׊85gS12=Jce_:E0Zr A^ƫtɫoY:)0(mm16?qxُQ\Ǽ BV 1KFkԦV Mօ՟FuIU5y fZÀwڏdyO'cx}%WF>o i_w\ w)'LUinqS%8V`#DP'd@2%~cW^dfPSXgiV\~L~2i 殕fS5axկ )MvWvX4 Q(n 0Ǧfe>^Ẇ?\g?L Tyo?5e8B/7(@'#E5|NWƲ.\jDv-cfĉ+"ipfΨr^ֿ5gܨiUǙRy1PU)lψ~j)0[RQ,̪0Ob<gƹLw1\lseu5syqmm\eC14 0GvGdo/8@@+H >¿h4KTIhGU;,,Sp1V* j-.V'3՞֛(BN1DE)t\ yMId#:x;jUvO|*,p °MCVTU+cR32hGQm G* C~h/~^&9w~gtv >W9O/(zX갽EMYŽ8V9 r6dߠNYY64MuX[^FT>y>A;6ouRAàz& kvvA/'gjJKwv /M ] P\*">NM1q:x n,tĺiYubv0P5̾&H.X2` WLlN>,'fT4EeYX#` FKW~M̓l8 < B}8^`v]W>Q5K 궽X-&*s?Yi;+.NoVS;|@K5\ˮɫ >< J_M {p[E&V+e89e*E?.W T 6܇xT~:Ⱦ&x\SVg7z.NCCVf! WX~A ,:f

O'3G'V/ب>mb\~ZGoH)j7x/l+ g֤)3Ay>uW#1ˬ9P7>mX5c P덌r*9j♗_n`^_ݠy8 7) `줖PP3_?F+Nq P!e;˞AwY Sp :쀬 4Pa&Y_Z2NRi*J]P` U33]JbKyT9bB 0+ws|"OPi0ކE0 /KOE%u9<+azxOi<`]%GbWeSQ5fӟxJǃƉG!ء4 lֽ`xMfje ,%{3dCT~clp WdnIۚ;_+0 (so\Cf}Ǭ-U xxg꨼Zey}<ݴP7cQ h>EPdzZ?:v7O.pL*b,r%yh , <G( 7P3hd%`pp"]ri1*|jԃAmvD tIhmZngG}ODG"R*mUW)쳴J`/dYenjn|?}6QWVm:EZGFlJ͵)~]wvnIkL6+f?jm*9ڰ IDAT㻣UOva&ͦj #07-קbo:| NTF? G4á|k)t3Lؕs9hE~d6OU$ZG\?] )>>W!ǚkUtˉv ӱ(?kq@gL.2*Hmk>U~\Q%| :YO`}Y,Nէtx!Crv` ,lN(}+ ,)0@?!?"Yw>NYADesU=ֻ-wǬPgs##8Wr36O=p$Ea:Wj\L@%Q mB*SPv Jx*RO^,bd7 t' }1tH4s6cPA& j.ͦip[Ky?Qmv} #xK~ >?0 9woGo 1+x_% iL0 tbMrXVTttpvb#/[uks,:YY{+~zQaZS-M?h QMj#Qj/܇wͮb9\,0y_8pHv >PAq)s:Qj_ia3Dfgĩ=VeZWb!Q^3MXXA Cs`SZ<<9_xnfqa4K؟Q/h9oO%'a1sܫ7V'y"tIG)pwe4)=9fh_mN_|K'5Mz;koj -?eY@fz1+]_u*?rp:8:'67H#;.ȶxvmrhՕ#E U=yJ5g18UMr*d kzkH_Vgifv낭]lŋ2hw,d+lh()[;ZClgeƉQT4t]z5CT ;#Y|`^a x&`?ڗw60,3TN`WB։g6Q a0J՛Ű9DckuT%z^⭣\44ڇC~Kէq8_v' jV|'20aE5}P%nxhm'` l~˽1z8/M,U\ر‘n`8/@_ES]g-<Ԏ#}ꪑ]&*[s;l֪C#| ;%Uuo0ƶ͉ ~l۶mgc 23}osi]Lz*a=Y`^C\VTSC]q;}d5@gW*sFFK;4,9O)D,-#oa9h E?UWtNk8c9:5GkU(:0bcV[.*Z[2I/+0I!= Kge%%NYkX=㊹,iQ]gRwr.(mRa}_Ks ǒp0ѬgxL1JsGZB% ׿$c['Z@Wq+~URFW9PebV֪:|*`\5X6$2/6~ݚZlm83g UOlh=qz$ RvY}AOcZ1>sP36;tzqgN+gL*nQr .gl\ǰS,~ ϸK n(s ߯ "UAk~v5.E5JkhJcBؠ_ !OK)_<7iTsCI? 'y %qmؚhkMk`+x1I?' LNJZ?k8O:3Ƚѷ7_İ ̾bTgPݓz4ig?Zق߃]c*}rN͑)?$H_*]@-LXn]$NFME@Xho&i\kDW/&r oR%CU_:#fx~/zF vZYtDG`3:GB?~KD_.nΓ9(\ğyHAdfX{X+B+<كp.[x(LZ94u2(_TJyp1΋&xA\a"<JtP\b Kh]ce`'Š?DC-;.җa-( Еqpѹ5QD@(A.8͕lpqx%, B5 T#p'~{?t ;c/`8S`Pف0Ex6Đ4OR\ڵ twF`;l1j-;>XT>>p a<dA5TW)!Y6x \*"p%q#|TsQ(GdW,|]r`iTReTv:RFژI5D8ßt^7[FҽD#x&t& zp^B"4Z2-*Kx tx\&cC8(neqvǩB\r4Q2X`8uFjf H71W棊=Tj#YLT7»Ǻ, $]]wע{n$J_+1WjH5 ]XxZ36}nG #읡זM͓rpѻwa(25qRq&-| 'Yr-=8HBo;nH}Zza5<}_#G{ae܅"M6V )iimµ )57H5\T<7][D oðϞf'餷~Ț=vpd(:ۨu3D.2? *͎O\N}2|g>W-71nZu3?04 9S_zBCYtS%AiXdq.b+1[QY.:\}v*+P04z.>~q0*/z[U_[E?\Brr]:w%a__{W NQaa8Y*mz@jA˦ D=Nsp5y.~p3C=نF)i>6_&@Zܴ_@7~ [GB8 pjx(I&7 I lp[Ļ|ox]ˡ#'+Tz=3X@)})\o$Ip*(gDX&QhMZhyq9 'jR!G9+n0UikCp` kq>`3z 6#XXBB@,WpHP)ų+ S<8#kC xF=Z٬t=\bZWfy򁩳&p,ٸ-Nq 'e'ITE.@b2z;M҅x%ڰ{?`;1=t ygWSWM'7&OXB\LR"ENsLөZ_V;Z,eev1ڼ/D\f U>Rgp᫣GEMx?vf3E9 ՑMmZz~Q;">6&&ڷ#Eq MvqXVX[@d2sz*x9j,Z#G- 08(m_V1W~JQEk9.wPW2[{כ_M\V]M28bO].l/UA3X"cWq2UI8QJ7`椊ܞۋج9+t P|?󪋾E?u=NS;q V:(ّI~)};DXv#nxDRd?JX'U] u96 MBj87Ss̏oDQ]K_8̮,kmwX3afOۿsg:ɩI;^P5u%YB<׼yD3a~n;^9D7Y^GWCAg>9<J|CN5Vg=?<N_E _>Ȁcd~~Y~djOW?UFB]iď 2VUAK  sa1q~r|wX*Ov|p~\,%">2BU5N:/ ߆嗰1rT팜<r覘A4)dTG>E|w(b5T7/V&*N.h*FxjOo\*c9Nt%|pbm^aUu~~ x}97PI ?9^O<k3 $7 uOʌ URƺ̻JM܅p7:ht"&c z)b:‹. q/)ݕcq8ea3N*u;f7gl.೰\f,jrPU"+RJH:e`5 aFyU@}rP 0?s6/neB|ƈ|to0|v5w^8q nx8v%3DQ|LYrpk9)LWbRղo;&C.x[F,v-XJa?p2!.!ٌ&j%l-xH+!U$Z9x3e+RUƧ,k]C+'<:Ml9Ug:P *ccƏ NSrb 7-ޘ.DIb]p~Fi 9vJY],ۼF5QuCׂ )fWE s:g'b\gmW)kr$2Amvz!4! @iq9Ǎvpw%Dݔ6:whϩ1\"J4%я(xFJ 9Nf|A_A]}TU}x J.ɿn+>BN匢 \;G*va$^e ~j7 Bs_0<[6w4) EoiHiw%+5liXY\d]2PucKN<]u͚S:= ]ҍ.WOCE_X6Rh/7kS2SDaYPC.{@C \Hqpm߀Ox^/xc`GxtZ~h4k4s qja@*01#ig'2j&gBMUUOz!69/Ff!K?7}\j'pcNrMp}0xxVfL+n_UUK|E;{;b'UQez5v7Ai ʸՂ}s+'4=T'a,Ze$ Y'#v3gl髯+yyqJqVZ^J P Z $U'9yA/Qbe', L_ xbOGo=Ѿ" A>O9 ,j>|z=q{ʰ|̾ReVggsЎ3M|`'sy7Kq7*4Eqh~>W 2"#)xzNh9[[u>.KTCs sWuu4\'|)#jP| pM7z]\ߍ0\pg&zku+ܜ!.a[2nl? ID//,l,• a}NT.ƃ8 Ýř x +'OK: +6( Z*1ɽ.a҄ĺrhMK]qY|jņ,Nu_yur 5>Gcq`1;u_#?hh ?t&C5G/MEL!gtw5cxSuykpSpbERLRR<nk(e'N\G0VX/_<)xs%39CX"XP$yi—ufEr 8 =0.)YkJW`s3Nĺ`a&VtB^]%)W&{(`8XJ2 }1} +T=pG(gbRhS4o!\˥fDx ݝ;L\Zf%0sT;.[:Wv] b Y.@HoUuR7aeD /%hC))|H?LZ 0_kXC:),5ݡ Ef;\ϵu&\8RFQ`).?&lgfNi>Y:{Ӟw<ݕr1Nb+5տ)9x8ܒoԓ|_.p;(-=ݬrhmÎx]Q\p]2RDyN) %3YO'n!,\Ltei/œqO+ Q.Li#eNq*"nS&{TvyT@X<]ǰs5fqW/Z@\h4-ǨY\'r v 1sjR߅#QbG(|lS'ʹ)QIv54-\;D> ]Cm@Yѧy3U>!fۥ) .KS5Ca1/<\rSg}R}1΋VOq.OKilDzH}[`Isr_Ni~qՀV%&oO3w_BdC1k0,]ٿ?*l.*['g QQηOi~ܼIL, y>bo_w1t^{:K;1NbWzSپL'kQ3B N4;\|j*_Uލ27Eê9mdtQ}u1{'cW~̷c8Au ?6/vPG':d̚]Ct\ar8X!>Gr!$ 2>*, ibqhB-~*?p:"}jf=Q?w U?|"A>L]\cU1&7Ѹh=C 8jpyDYݮs17 a\$>A $Cz Bs]㱎X|88ɪ%X͞Pm'\MkTn*w7LPrtEՏ@?ȥwy ߫ܺC0&PqfBN8,pupSMy-M b^q+Q70غ-I__:d.*DD^W6 5C/ OC7XoosюU[^l+9ǎuh=Նx{Oђ2Rs jNjh\vτeRۙf|4z~t'n9qBvP y qJ'7|?9%7Q*.C&y,Sey>$,^:T `[ԧC']?R&ob:rhT{͓=4Ce`$8:Evz%s0^Aw]㈫ ıa?U_/BhSUTc~bG /cўF2ilvdžS(7t:8.~q8|TЇpsBe7ʤP7m IDAT$L~_KUN_"򄧤7qCص8ls>B;8=_+i̬0/cLBQZ4\A_6'Y2-f]*w/{BZN!hP㊼GwpWt G|49NQ'. xBk'S(-UzDCueINYwҖeמdJ/!_{ˏ?_Yes:_:U H!7i ne~'L%@^((F'In9AyD=r])a8fSP=\Ty0J,f-SeUݾIpJE<Bc؅q&NY;&;g+΄vI/zDvAFZ t}Dasͫ!^H቎>A)z"ԛ.T.1X<7=:x*kRO|'p.s6& /\33թ%h9,ݸ^Cᴀ҉r8j0d]'] ^n=g7#`Й$[ܽKZ[n ǽCpMqy?'T\0ΫVs%FSWY);]EãtR)D&ɛF9kג^)[;9?u*tZ}Ds*)rmeh(42^Ǣ\r8>3U[5 >H3 kjۻ2/CAwA Z<]Z=^fnL$a='eo>N+) AKmzHYdTo'jA1"&I5`0Y]T)T7Uf6rn-Akm# ڬ~p+Lw fΙQ㑶jAΔ{ӺrXC/r)p!$3;Ȼȿ$#n~V_->I ɲ*FRHY9h U}8Bhv|!ɛpP$Jheoرr4~մ -NЃc.vDO޳2M>bޓ]Uw0 .#a9,hXV Ӌ~k6bX ÇST'!/*Rx6E`G9=D\688g`OWhs Ч2AUZO.oЅwZwkЏEQ^^%nk=HO|aajTANTbɘ!dn㮝;oE^b'0;aU S3˻v"E?GS5:ژ6 &-a0;OPOI+ՠzF-WZozEj*! aNpCs.60uTeEqF0CP3(38EmP8G=y=Id  8nj'7boly z)ʏ㎜n/.7 U]Z-JG8vR؂6U9G9d@1eC/5V-8b0M7nG4N@6\$[Gݘ{{>1]h cUuGE+&˲>(&+G{X^ݨkr_|TAdɐff46M^yVmup̤24 SU%uλy-9رѱ Sd^nRP}Eڌi].]59Q'prg?:x_!0MÍ[ď).[« Ѓ#Mr-5@<@ p[9*L5U8VP|g|UA@ʍ ^`^\G OV,hTE<%~U,Gd;e;MXSv.g 쁡N%a;H*ɱ0 P׺Dhׂ>xk>nQ?)+"a3|lȁKX JP 7ZDSqp7IX{l92|b}x-Wx,FbLDkz%u:kNP?y[QZ8BeM l&JaQ;[NVmG-W: y?Mv{*hO0qVOu/OUX `NmgRxHc 1meA;@# B?i^_+1@],h~^޲f^<.۝<=7a U<Ñ [D &S5g`O,@'vX襕'uUfc e=Wu3#*"sMsyFbhs4XvܤBxOT-s#:#|V`H}䙔n77br{]\˝DV,TԚI VDkp.e909pvru_U^ EK㲒2P}U\+uy; *`.M͎Z؄G9:C/:c,7f9.st=wY6ҜRKTEHEVJo\W΂sX 2p2`Z^-V84D-Jթ*D Voh61=M'Jת Ye_PgЛ=>k/Ž\eZO)ɾ걜#h()#! f`Xp 6GCBP*SKщaPQ\%Opb &wRfWxE$\P-"^D1Fq)0Pog\DMr@yxDwJ uD. %g4VRaq ba ))!vӲf=[ xWt{$eZ24UVks)?MZM{oܣz ㈊gܐ/S1^^1ʨ K`Uy4)?5\ QѲadzd:ASM7oz/GX@М!2(y_BsWd6s/XK|uNMpu(]RW`/SIRS돷ڙ8+[k,7E ɿa:΄ PV w^5Kք < C>gnD?_56+ƙ:[}<9Pju}}+p , wr,Ge:[;i*UQy癿9'=w\N]3sۊNzFD>N;zVm>EzvaZ 0v}:~fqXwhn?=B(~8!]h R4ڷĜ˽˭K*5__WRf%u˿_Q^W$jGh].GS'|s'}j+SR.EmE>ZTr9]~ZlLٔ*Ʌ z2 AU|53#7٪_ 4&B#ViƇKo kf6}Alo5}kF,tq'}@VTyR 8#ǹJ&=+/ZN jt}gX5[eK?] -Nv8alsz-EIef[خFcDGY5|0&JM Cͪ?]*K=!ut0 m[pMDԮV@]79W<K>aVM/\tDPɐUN?"SYBo$y |v pOc/Sǰ$ת$$NNf|ۃypXy]U:P`~q&b`n2fo^_Ns N[zy=䤓Lϸ|jxZy<_d5E>y&06T)4@^Xxk`9Ol5ƉsH+.360CZ|(/ߠ@A=A U{. Z{fb2atVqe4m}Dȡfb\ilKl~倫Y{H57+u14pΚxRȯW/ne2..ϣܗ+q%k7RV@6cV-"wcn<[8Icy^2.Ĺ odB=ᇨkXF΄|vjc,I&o{aq-F}TkQEWkiz/!8YB_wMZ  geJ[<_/xg[rԲ 2a)] ⓸ ?t^I+Y @ Z y5R=)Δ{|+ِM<%wI!܄PM-?[z-\?Ih*5!5 q!P&`3lzm#U ܩr@SZsŹ#^#s&Odawd8v/rXnVP2R;eUv =ikҐb~a^NE,2mLZ;~>)sU I)k:;K#Ü FWpͪdR(u~F=mCV\pAzm@qVIkL!p&"+ KZdk?{%w')8 ]A % 74$Hwy(lv,#9 \]uEq<~@ggҩ/}nBnj,)g3I' <0 cO`EG#^lîoB#$ NQV_Ȧj) j~i]5|GZo4[jޟ<|y6 12x]A=CŁYsCm🫛c>WK}Bͳu0\q{4*gɾ(O/?6JԿ˾8>^㴇 ⺰({ cUS'qO^oX,ZDs,q9>M`w@:,ٍU;Ӿ#T|#ù]U ṽ% IDATI"IM9.'K@uP5CajoV&IR\S= A[~aN98]jwx2teRXl62*}h?«ݡdPdLU咸,ZT9ΎM/ҐaKiu0.(c\f.*gؕ5r\mFUmX ! q ބ< *ﰋX-p<ãTUؐn;mKh5FCv썓CtM{xh t"vQ__= Ҡ Zp~(Ⱦ D:*,fP>Z KCȋ[Pp:AC⁰s1\Z7 ~Lb*:q~n0+HIPSa\J]Y:i[p?:%-?mqz##N%IDfPBE1ܝw8~ x _4A)@'>>Lc\eS⋱D >m1jؙ]G꬈\F;`.$!*ñ-/)TP#=4}zgo1 nI#w{{ÙUWs8 ƣVW_rZyZ-n<+d8"]JR_i!ql3p#]r"ƿ  f$kED_>(Fp .AlJUgq-*ťaN ~%1i2'|],vb|T9A*PT>A\?Gu / S[uCݝ~WܔE{hlTOa<f4U!_*m6~nӼjeW b*,qMM8FPyZl g7T]$ Z{p]ЎKr޼d!riG፪Xe_Bm>L>,xq.&ykSɹy! R` ZX Kr.XdΔFI8RUWQ` *Tk/77E8roUuX+'rOV@,k4V!yLqŹ,q0;pS|WLҼm CDYN;V-2dV$ŋe_^ب )y3#ekQ> T;΂DI.z`ҐC;iV:$G.} vc [xIM_8|߾$YЗ^s *L9?63rYRR9A?? w9[Z#\k26_,h`o} rjAuVBJ"E؉kxJZ 2#"4$Yon3SnL!Oݯ) i_2zF`7rzI`~m9VUY=Zl>?ךOKR*G'>#F-ۻ`m9ZN~f_}-4ҷh}E.jR-r^MV[aDGqFK?r(cvNO6cVG|iM";6X/H^Ѣ}j/:MW7jb?6U`kNPoyej&( CsUq0]k@)STZKCK:#B&ބX@+ɑ͊x=)m 絮F2lT/T'H'ޗ˨; #; }{J#μigp/[-eDSccr' h\j%07:ZYo2S.O8O 3]b678YSh BSe~X蝝'>2kE !Ebi!j#2ۉ晔U#`>/M q7k:bu㓘~ah-#,iޣ4GfٗsEZ~YĪ(NzcmSr΢; [x#&q3߭j0=Essb-ؚ ~rτR'|kbǸ }st/ R&ϐTdFȯQza(op7wW~Ls r4&#b 0L]a~qֽs( eԣG0.'D>JŚesWW6^fuh!>-#!7_~k,-<^h0 ^G_fV'Fl<^_yee|NWywR?&>^ 6G+WZABdQS Oԗ>FRMs-xC}3{lTpGMHGHHW44nH{oNgAC@#{B |9\|YO9%aO+zQ9~Fi8dV'm",K.b&'K'@"_D"ilfza}˸nFyʓvKg ,|9a'4ero|'ZNo㨚YٰD@s/\Uu`?4Xс!q.,)$ ڧ!;OTeTM4]_ҌaO8>r=5&`:`-0T=?˸x`5D>Rg n@ T9'h7>Vk>3{1#T5OVB'S#ťv[gp<|0G_8+B*pJn]ɛV(n0S=<~'.CM :qZ1EbpX 18\-Hk|j=Vn;T(/>DlPlO*3U*;@H ϡ}B5RgGp{C5JS\V}XIGOS}#\Զi̴pOw$Zx1H7mCviFavsUW;d_\%STg4R@4ڊ 0 QAOIr\j Rt|ٍj0ᘺǏy2`hOpEV3h?tN)8N솗O0nqz_J>~טJ/.\⭜) ݛGRfTFIF6QtZ0k%[a PWha!Qc<U;Opt:$,^KWnZeOyNCcZ/}CMuQ33~XR]㚸KXpu^7cBd\XE{}zVJQY8c6kNʗ op<~/MouKVg3 (ls,h]FR?k-NYZY}R%L"NȋCĉVi@ӵ-\fW ~̳ (gh*#!ZJtpucV?;8ⴾ~U) דjNfϘ6gFy6,hs `闍wN7yVdIx`64ger>{W8-ҝ ?'b-`N7pcCro ^'#X/PJs3K樌s񏼥2 ;Gu0VЃ [.eu t8k9q'22c#5y0j y>#f|G>u3q IM|&FͣD(R#QOF#+`&QpLO&^l.wiշLY aa 3`n K!Лhc"'0wClxs˽S|qޯXD%5^U1ؙ Q{Qʺ\ܴedxp8 oYi:eU_P.;N ~nGNb#QKTӫCةNhN'Z/q,qJ/t[h[(/7觵]L:4j#-Hqn/oBX".{ʯ 1]* @E(N7:σ|U{8ê6\x Й'G}}ˊƌ}'j PrINP_%bnjz'Z=3\FmҴm۶m۶m۶j۶k4N꽔Ce=LЊ^Ay, "U4`5VQ~Z_WTZ oe|*+y繿X;ӊWQ1k9(UEcab2G-wr 㮡ήסe"GW>5u$[Ey]c<ډ_[WbHhȉ[ɶ)}0sYCoW2::p ;nOjS{v5]0M4RIU+3"bc㛕jyyX]*x)ř yzRqV]׹#,[ԩnR=9DLYd6g?__Ƅ)]ӛM\XZf&V4݄cs(̑|LwSw^O6.V4D\{NՆjV[=19cYf|p:@}S$̜ۛ̎zWc-J]S1_.;2V. If>#bx3q m0G |79w0nRڔ#iv٩Bj`Mmgh4l=}ܱ}ИAMq&6-Pr^{͓"V/++ '$%_9Ax??=rx^XV JَgRfN B)yx .HEՆPmN׷?'(zbu ~G%t|40>bWl}bٕ‰^aP[¦,-=[y ^igx3R=0kSdq<RI,1_x?Bo(AU kG'yJrSYҪ>ZzQwƆ>| (TmՙT@b9)o0=lh|+އkfeW6O20 p~k,XSΑga/ĺ1M[h&DVՐ_a,~{3YҊнiE94=t}4 h}\eS)bYʡ\D't!@ 錓|nPV e2+J`rs vAl(GdlTکzbWz^bY:lC6AVХ8hڠk-z(>:c"Q;E ~c嬻kq@}NϬCB;)Лj|"Vi*j+d!k%}8"Fd IDATwz'2F44TH9j}"ۿ-g;2=taV1˰܂T-!tNH+>Ayl b0}D7bX<*HizCxj] [s2JX dlF 7Z1#LwV1AifqVNVX돓ҊSWRVM1z9EQj 'XSa, XQtA:x_!7Z ?q,u1-lѻ)|p./| p}Gb֏CO8C8IqdP0̑?Ft%XQ7wb΢5T0L:v{g0 A!+xZ ֯@.dr- .wGvǰA{@7ho@ D.J3244pOf}A?|mK雒>W09B$lt_\͜F'ܔhhAٹ1Oʐ-2f#x~{Z#i sƄvp$gOQІty_TQ.\Ip3<:*>ڞ!{Tƶz3;ms]a0u" 6Q Z OP9LGC=Yl!`vVT9Nm 6tlEnO{/9[['si [y##??U>~z'K\*aX3[B`mn8afHَ$0'5h.\PG3j/d3G)=tčzg&ŐZ4xk\>X !0o0o1W> 8 j(A?颌o)A NV-'UҗUMHՔd[5.XP<+ v;M1=pbY4QNңBU*QS-csRXѰ\;F 6?>I9VA(Apfل?M! ?B[яO+mlp}ST$rek*XOf|e( d5KG9QBXI?i[+=~y6{0̤ e{3vgiTFkauI]Jd*cKF+/| y_\ٌSE.Jy ɏ%VAmgfDhPYb66n:QW<ݖ}q)5^iGixfC]&g欶n/蕮,ɾbq &U4[w”]l#!VV1O}uZS`ǒUƭVf&='nXQW)lɃ 1xO(;΃CO̟wKӍ;>Ow1,PZ 8>RnL@aQ]YS87&{R\L1 (܄O!=g,k~iy,[wR$S'zk_mYQ}NtZ)M'B,0[^ڪkk>C9]jg?3y&XB{RxWz?0Lap\'J+9FUs#74mYi/Nr [v*E,&"ͤjSKvwz~jz:im/:A?ţiydom8HO>`5}ؗgR4#Fw=uȳ:l+WH뇙LK;=Xewb1 ;J3n~η 4H5CaxƛH tPe@'R܎n0^Q#a:* !GZjbN}Gһe[િ緧GHưYG?׌ȽV,3ߵWGxPwodrn0)zkzfZ,Ͳr Ld9K /Fҙ9_nf&웪fu\֛D/bnl:bCL?f4_6647`z -064Y>lVTMVޫa~CU)?-iŰh1W&s1G>)EVυ:Y{t8g`OR'??̿WmsU]IЍMm8Q ʨOj@8ew lq5b~sFc* y^=F@hczyE3=R܂q)9!4XScTDwp;ǕKlI d/7`n*7qn蹪;|[ty:#؊pʇ=X) 5_@̫Q]ՊS8ЈP^"xO$X nxa8vpJQ_%3[]Z@Ut:Km. #p >žN܍Yatm|q;UVJ"}cW?-ՇzQm,y_gV=U+l`w%ӁhJb 91:e9Q @;tj:I. <;nf5JSePB>lmИMJ^OTw,AYHp>kFx28 5:_"WAJOsxZ$>Ac~. 9ƚo|# 1֐ǴH}j*l1V[TװX뒩 ETK}zʃ0GT{n^b;Cg*y7KpK ӓeQ?FXehe1S% EQ[򧪫a^bk$-C1:C^V?x4m롦/gCȯ*a&T`} 5b&93N-뭽j^뮽$vq!S8϶ZTIqQ"P[A'ui/2px:}ؒPn}lkO`uUٲC^JyfuCp ?gsD"%!Idz}N٭x`GG[WW^і| blƑC" lj3ߣVz'$dn N3of;ηa+).xށBdɑ7%g~tmvoJi,gR֬J7~KV /DŇWQaaXܰM`F3f=⟡$e p +M@&j/xNhU=vJ/Ч}+{Hxɥm?'=W {+lg[r|G.~vE9c]Z189z/wһJG=?2|\XK Ӛ2wsΚ]bͶ}peqb =NqwƍO/0?WGԀUcUB]e9b{z tMsD Odmmucy1pj[/{ðCcP#EvFU,JNn* t-Nܼ_Hg8Jڍ#Y)L%f@ ˻BiǏ0l?{Z[,gDQL?ѧq^X Rv́( &+%dj (L(V007J!7^@#V VDTCKxRc)"U)hhRKWycs72 /2"K-a&Jbe+z"YT@t0ڣS; +q tfb.tGa<ݥw48]8X6g6 *fylQpִzW:) 5L\!fc;vKP%zzd, a\dYNkbgF9^߲\e-Ll=Iڨ ^g6 K =)lTz$ĩ4~xsJ 7aCV d7c*m؂gZ[, gƔ{FS8sf.Zm^~]Z[FWTyZ$v6S?Be.k kpWMu%2JΆvE]耈2+^g?tG% ˛R:}f>!XQ]>O:!x=3*Iqc?xi`AF~b[A̪NQIӜoq\0LJ]3 *VVkFׄ{7cjmbHvMx.L57|N?O._0ʟd3&'eK2ݿ^inY?V$WJi+97寧D =GGj6G:7&I}*ЀSg[L Z)nbj = g2Xo6N_D~Z- 0{OF3 OmTj@>ލYE~wq)xg˦4Kd0Keu=`e<5'8J;{7mHA cE`:;]Sʫںllq foGYEzQaImRv?@g%'ֈ<܈'r:vHpl06PLlJû * AUq$@~jb$LrP a:\.w\}b4M'xX

:se #/7EQ*L4 {ka\"PFTm fܪJkK,d7'+xڮ?XT.jʠ{B6H;{9~t%.OŊa@ SP8)ZBZj]4)yhAVH<7Jl tY?aSl!Za^k)nY5NH0 `MZPWDPgFB1m0Wн NЛlUS=ũKXJv|܍?q^3̡,<ֿEEy5(Uj1r6k .gX" ZvVRRd{ib1 'b>H_H?j]+`{CcCkJ꽺.ba?3ou#i??V>䇰+Vڦ/:@l s0t[7Jʊ`C'.Rt y-$JQԶjF0mR_ _<-N6]M`YnD?z`.S1;V'fe@a:@`|9]*E3h/flG.1x8ik1/VҜo|bIn&qΟ:ޞꚺ(/ j:աjU7r ,[~|ch:y>Nh>^Wh\[&aEO y\FxSX;U,cvǐf!Yë3sd|&c&R1xX&pݔ9 IDAT@ 9͙!2JEJ+mBۯ.l/c܌:BEޚC3oD9f[6:K=?D2Z!><-"b*h}e,e;fwbG1+4.?9Ϻ\X:p [S0g"CKX66j 0:ú T)GwǞP`s ;S`w|IWed[:"ʙA/z8_^SmfGP;ށ1dlk%|XtΪ@O\G"Cp wcX`[t H67#*=Jw]j&!>VrjM{P*4TlRH)Q X)]$۫C8QfM ~CZoi_^N3 a%&"-Iu ,+a;81 z<(HaKCg|K[{u̬(Gia:R@_Y!Y}* C &"= x )j_gpY*Y)0)vyqA55 Q:ϺA&GD9U NYA^A/`Vt)ZGs>X5!)<',nuR__bXU@+렐+Ju)H.&Sb oi^!;+K>sb5[ C^u2+߉9fVtGk?uJYX^R<&f8,]ceifԷ`a7sA&UjrjE5q9za;y- Ǒ"gg8'oa{Q/@6krfdW}=\fM.!x6_SN$$5(Qz(<C-+@IKVB>F"Ιh\(O+&wRd-Ӝ͒6zU0nj.pQ[liݑڙ=#iH.{TNˑPTgükcwi2*HgWn;1ƷUy޶8tR?r؏JR[=Uin)?e z3DvNa|fɴ*Ǭ2(FZo{|Uwϧ5|TU*偷UO~O^[do2H:U<-OYut@iUYBmldv?6$ɦ]*K^FoqrSe| ߫c)yq;>0e{~zVNIKR{P\)>OǛehf>k/d#E3c\H<<;l/ǘijz0wC5o #h獾"Hdok1kj0/- ;?hm f9sK+*H_TJ+h /,́vp=PX[qdu +Y]k / gl>X7INN[4;%tN)L+slx 0%B1N4 | 2kUma'r2/[` Ukn#jPi4iJ 邺bQW1:lkpZCV;Y*w(OykLKD1В ѱ#.Eso!u/8F{ , YMm8']FrxZv t4ˈ %jM!BsBj2Ԅ* <͐ˠ4eN=zN0cN5W;X˜(!;o2c:q:,8ǡi'Ŷ^塁Ћl_:RYĎ|",b9܂j<2|.mD;v]+Yba#eڪQ6Yw qtp.A2Pcj /?FMG!Rd0ge[i4*tg5:kL(nֳTX)7t9ҞQR d9[}s?oރ&xα$ʹSguZWRF;nF؆RtN|iTdi#sU7ۥ,˕@P706 FMqڴ^R:ZUg{xc~AX}ƶxfR:@!R }:LfAgȩ?C8݇GPz+`DntB:lʒUA:XbfW> cN]+NXpUK<#*o v B2j6jO&i8+ q>巖ouc^ñ_Ϫ;/ZSw8&ҳ.t))xR?s_p0ց̻Y`o;AކYA! /Cw<#H(jp vPt_nzˢ,nҫEO!xmnprfqNitGmѾEy+J6y%3,w:""_RhtO~Pt,%i.F&:j;ONcګ _%i;%}:Dl6/꩛@?1yTґW} VH#)"︔=[8X Z)1C1t, nCDk^1%gYE=шѩF_Hƽ✯.ȅ_|HO~KGz.Oɭ:Ɗ 4O%8deЉYjHꝺ'}hbq_⹱WR_6K(cT3h,0ԁX}zނIz81zTNh]J@c݆ (. .P>DBbrU?Uձ0d|i9 wF4@OcO[qֱpḀuPG`/H q>XOg,l l,rڏ7kBQ^_ϐw+mo!ݧYa92mgU)8$NMia`1#/eH-_,Qg5QCYa0_j O)l$V [ZAeE.v[Mu7!m6.{Za1_7~2κPBm,EwÞf1<$oߪ}( ]XG8 Yf \8 UF>Hՙ9V9DBnװx aEf]OU4w: q^ `OpzD+Vgk(I]8(]|O':?USxq|YQנ(Z z,c6/b݅'XIqE~ DGEGEڶW7(р dw M ˬp]`F|S:&BFG (UGG*zōO9R܊${lGyRuRndzu >M܈I=KnKkpO})Ukf5g#3?ՔqKZɔq:/MQ7N'y%'$ [w['žYӟ3ٝYNDښT2,)WV`<ʼnl6[9%tz}Ԟݒ<@xF]O<hv>֤v[mvmͶͶmlcj͙F}'ŵ q4PH蓲f3K?=ρKmǏq5mZeel#Dx!~ǣ)ntx~Q*;"--pz)U>I{C9'0H|H$zzzKGJd`-|*PV'pW)8I Gȧ89~m%Iv_˾kpH ku'ŠЋ5xx%j4| ` ƽQBq B%# eXG2YGs;fHOs=Va!½ *ƈepT[q#NBE,Nc0 sq8 c# ST Vd}HM8+5)ݰӍŴ N_X o6y}/e{Nج9[/r. xN, -xU⍎x=TaW^@ s`)6zt5 ;e+V52hџUGw007qj_A]&5Lt-]\kXV̔Cǚn]W<2Hsp; s;uwC8eŨ?qI!WIu !{wdTl)H-zZEfQsaWQY|s5E ,Vgj|^-TEvwZn=')1R6{{ :P}|\_@-I=%GTFK"mn<I98uA9ާl WM5K+:`^sxʸ>s5\HrV`Wk+L5R3픋) fdN@Yɩk3Fr䰢MpvWYq"92WoL'Ϥ4I)K4(e#z]q fi̛u},v`>Jn4T7MT 8%uN=_2.pI'ӝ-i wj#%QtMIs \"(y%ny\׽kY0󇌆sؓA ( ͤ xpVQpߛlI1މOܙ=WPͩs`JA)OotJ,p6Ndp [U)DeJ8& 0ԕH:3V5lFs>^OFPsL4@cyn8GsK9oh1q}cJvNA~;d{t{K oQ5 6x/k!|PCL$ 0PucT/K+,\.$dtCcoZokg?lmp)!+iYc1OKqV2R6Bw̍!z;Us9HtC(̀L}QS_(?)fި9/\2sƌR|fR^ xi˩3ՔIF>PAa ;PQni^STv%y0mqViKPa 'v]'wU߀D1Ļ,2ur=V݇B[M=x9)SBsaXKz/m!4 (iy|/Sk辘0z3ȉ9ɃCpJx;`#<-}䣱.u pHk٥KM8Oa2 /x{ř0Mm[RZ,LL|dgɲ=|CZJ7Tmhz}d0rJQsz$ԃTQ&J'[$J6?7IYqZkG =tvjqj ľnA5T. #Y@1ctQZd$Y<˫IT⊰8䲎pMzK4?0#aN"5Ma p nQ3<pz+dF:޸ ƟC+y!!LWY"ٴdDwl!`pJp گ.A X :,y8Aa5!Z^(BT3|Dϡ1N@S0jz[YA\Y֏ P`$ j-vtNybY&!úX2 QʏUzd~c#unIllU)+[>GB(rWCg{tU Hί>vuz$MŌXZ0sNcHC(9G3wb=iS}U9Uk_J%(e:NR2Q8u&ݘ Sڸ?ܧ` $I!cSᖬΪ4h,d+eV=i].γ>/8-(eJ~am'4yTvi RMvMo$)ץ-_B.YCIש ƕ*1_ya5>VxptAJ/9SpWy%n.Gq[ޫ:Aal=ѭL FkC" 5OX?]q:KVwy+5n1[t*'xwH{oF*8x& k}3:sRSvUX:+U8W$AYW(? )?R>y~%,3\a̅.*V:h÷ oP@0Δ=8;9?T6ސ aI~. ֺjalXN>ޜ"bCPIMLkcw9FKsG앛kz U<ُbߠHL($Ԗ,=KSZh(0VrBnT0Ρ%Ϩ |532GmlA,Nõ%%09c9C8Kg(!SJ 9䄮NW;{U2(UKswYٸ-֏%xxx 4N b*3ݗ^#9Z~O?O\'ZFdoąj ݃dXGeojUZ&N~Ԑ_*CF,[q^ }Qx.AY1vGN $2pɣ󛖱 a"> SɁ@tX婱ʩDk龌bp sXAyo8:Y |u5:8]uXfO>'~ cAj[t8lpZ, $$Pq¸IU2JMVW+, )N2|d̀(f$/" :Xj9;U7G䆍g\CT s#$o=_w%ۉXw4蠟sJ0J:νG0ۼE"á062 (]S\)ԈS-ŔeӇH}}ZKc5٬h($ OPssLIg$7 8 w3ޕNWwA>}]-t:W)v*L%ve|0O.!*Y\?\U Iéb'i*?Y+,GNMU etףfWc58$i};.L1vN'-]‡qAu>=*JYeӺꧺiU lEufl{&_Nz)⹛"ygSl{e-uIjX̒beŮ wdw!,&aD\iJ6 ^ERmP/q25v0<)Rj$H8#t}#\JLԃ+SkPK8Y@/b$O|{܁ )I)W%ߟ'!C󗫈}QYLi#w\ 43HS+$pH\:9/mt92#Pbo8bo7 COi奺݄/C~gKUȤԪ8BvRwj ;OeN+j2-=Pi=Cvws zJèn0뫧Iau܆pr}FUg:AꭑFS?hz0`5 z`EZ![T `ǐ\mpe¬pʘ]붺Z|+ϜwrGMZHC0FCs$ DkOs3 !la7ɯ+2K*ypZW'z 4#0Jx..{}fbpQMgcB2Jz'0@ 8$VYcy8gN-Taj#K1`ף:d{;˜SrJ2p$P=TG!~Aske`tV83Hy477:mtípLI`c<~gv ڨ!Bd[kX::xrDB.AC&mT|ztj{¾g;>홙8XeLYe[<\P㜙/84(+xW* nS9nv74 b0_Zs$:YgW՝< _ y9Qn&x#'ɁyT )/ $F Σhڮ:2{[%I!05^#0_Z3C2'SGD["y-̴O*c95E )}ql,d(yϻՊ/؃d9Quc-i}W .yd8pc"@z.?qHzH=EOg5 s䅥F%M tz78`4 O f75 ?}ޙ~\%Bc)IUೌ|rXRu@.mv3t, CZq5.x#{0u{ܦ5>I AI` * j*f|ƭ2r>_G32$c ?q&#޻L]BAykv2p?\ AC͘; J j 7<28 ,礢}PoCgLO͝?py; ֙DCikO_g%iG!^#ZkN1:BkDXjYt礯,Ԝ(, LS8ۥN} '\\pO甮 udP UTxSJ9TC48W=Y8)[+ |5?x@F9_`$~pտ]>]*B`[]nx,ϗeӗ@ <|^ROm G;=<0ES'GHFˬT_yQFeSUXݐIͭ af,P=] EX/bJ ziU8bٞĜCLٚAqafhDx~*Sˊ0cMYF!43Y=,M]ܣBq(5*Gqo oA|'^Wt]|bWBVkq3tBIJa!qV U|2J.#O6AmKGtOR9?;/7GUOE uNBWmWNfiÒB=㳥[^/W2iǯ^qQ^ m tgMi{ <p@ɩ69*)x5-y[n:):Ҿ!1?:;><*|WvXmW\6͆ZJg=;%M!/iHY8vB2:[ ޕZKp?n%85(6_*^8.mo夳< yLp xU"?$u^P1y@KHz 1dtb`r"Nt ^rd^k_)tfJ!Yg4卐ڌT J%N띢.`y.b?U\)̀لKFaIpΆAW㱜I _@=K@lت:i*qN~:e: dL ہvm:g7vB0DJr}F`~Fw]"!%*Zg8(3nh. dAPO<k, C7p#=$OLt8%.#y =pT)Ga1>VC|(`Cpl0^5mk([JJהN\~K 7Va}ϠvV ]>*t7SN P g46_t;s [,wK& G¥t/lV zf5k;vyd\TqxuYg Ϥ&/fnY@K0c%PuKb$ZwrIX;J?RBGI\*,!]9Q Rr,iDL*$a!G$#D.460vc$ſ`SyN+dY\HNx tC4|He$Bg&>m9?oZ򞷨 X\ݐ8J~s 6eı,> ?/%d5DiC{2f`fL' (ZFNJHK2RP HjNE'K/h}܊5YBalWqQ ԟ!܎zN(z&$bsvr 'nn.?E6=nX~0UiTPy.KHy?jQL-u=h qFFNaWqz>%Q[Sy*{ ;/crG 1Mv}.o(bҭ 4K??yx/'Bm CאF'}sꂙxUh.Չ*=7bA]~@3r[L+Wބ{q|xj˸%OmCdbhXǡz9 zԄy8KAe ; fk,ArZ0[Oک! Q<<Ƿep_bc|SNS]~%`nk0_uk3I8±;.u~t=?*u$pzbevN{%(p1WwiޔNd-)}Bf>n?9?Umjo0S=,AAz[>àҪNR) B'q:,%0'bf|;(*`fQ-&cKDJ4䅍!C/`(N`P}"g 綧op!=< L{:)vhP!Of gA{*c0,)uUlql p0YxfLm:2J)-OS*)p5]9)7\M1Fg.:o䚽!4K]ܗ\({o{9U}~H IDATjh625trEt"CX)c<$N9?3>G|s% |"Vpc#Vw]hnZcUD&+94xwhH%RY8#Ux L2 סsI#pJ;s 7F<߆' r[ZGA o+dwſ/IJWKݠp3} Dq^/9w81Toz['N\wf RʋvW'CpL2ʬ`jG--KY0 I2JnE%W\;tjr‰8Zr y958^c ;lOv+Rw%N 8a l18DwM)788:x P/,+dqc߹U6TJ0)%9DMIBc)| ۤ"@?he`v0 (؄)H_/-QĢXY-`;igmo`>v`3MvkT>#XJaY-Wh%`Kb?|6+E? : \̎)!m *ba#dդcz-G9;ӕ*}0̓%я)6u]JH ́j.3#Tjq(+Z^fQw QEsY;")4P@N溿RҀsLnKK EQt؍㠤P55[fO[-e!=V K5 Oa~lcIrh1pMº| 78ş6>'q&M)aS?S.f5}+KPa VӃ_ۘAX8)fN}Ĺk ܻ$VS }ܝRܥPݽO;/ QKwPנyzbdsa^K|A *:_z;06wbxJ1VX#];ZG AA >r2FЙ|X9e1;A%o|D,>T_U :C^$a7܆}]'ns I vEn}!7fY #Uqj<'S=̣Kz =!A4ATb:fL{Uԇ\Js)p $A!q;L%f7r::z,z@ J2@ndY ;Q@m}X[a"j1֣+^tabWE ]#YԄHi -H#.Gp]n,7;YOU[)m]·0vm>Ti0=lÙ9GfƸpΣIMq\6?egHЗ]1^1[]:uS1W|3VNz2hJW\6 }®iѹ,[{4uϝVsNW2=Qo znosT&~J?<q/ܺ=X;f58HL% ;^̓=z<,TURuu`Zҥ_#i\Mh[:bPpCO=9'(i`/,S26kAr"GP S!וeUvhk=/ɫ$Պʷ⒘f qu fOG=WZ~}܀@Lp *U(s| r-kUm8钬DŽ,&z&GG5>H~&8 \2W >b^<Q-Hh,#̧[PsB8AT g6\ VYPڥ6zu۪E1\]ݱ  mC̢l.lu(U41 "AdrҤH1p̢gj7R$ށrm9j`gn ;z*mhϨwީg&bAΒ0V|ԗAO1TRD*Vu+gT )dh )\&or0^z}":ȻaFd;}18+nwt+qh 9D][۽߶GjXy ob+|*tL4Gՠ4UӸ:kk9lږeH܃\]0 0܂ EM7 ;TC׶H(V]WEh;Qh`mL7;cGn$0n.)m̡0A8Ƣ4xh!nD#uIݞ=|- c"QV6a]Dɼ = c2}܌ Aɂ8Y;N%q|=t!;;b>Y X.@Iz(P{x)O[ goĝPOR`q{ 艘+4CТ,-r9PԞuǫF!g}1Ĺ>~Xa:WƟkXYT9;{iXegbpa=fV!kPRP4IhǛɎ-as  +k Ɠ%~&!lccl>>d gU'3b3EY\ W]5f3lo2ĝ>@wV H?!#c%Z_TPAP]閴S-ۧ<+6K~8=-OZ2W6k2}|=y J9/!6fL73 y683E9Hnj6E1X+FK95#9uAwLߔƤĦ'x {~h:H5dYnۭ3A/Eu r\߽;hPN;ܔojWOzUuM[ʞVas(Rh:C[ %?g& O-6*U/M{T{Z+3s|F=MFt`5 07p \xôew,rȻjB|WuoRbEC0F4\O/iHZ6\rjhuVo. 9[o l,g`!FX>*ZU6@ yTIJxr ɍxl୴ؘP#(qЂJ̋{PU{* Ƿhh4nt~i?4@U X\\1Tƾc|"UCH-yY 65x .@cyȋ/p;xSX<v@4̶qYFQtUKA G8JA[~w>ae[?Ogq:Vj0 9Dґ\ UEw9WzV7;RЃVZM:6P6:3'N؅Cf?4PuMi(ed&ͥ:FsS]Ym3Su4T{F{p¢*ECA3He"\J*+&1OIU0jsn % XodX = s o40ʐQi8TlxBdς*O`x/=Xb0^;?BsCeɰ `wptHՓ>D 5G a2gxQhz`;7مq <}.NC Tb_ P>K v=w2#n@:6.@K)Fφ^z^fG| RU"Θ(Kw :da%Y3'`WP~k0{V.g[ r|)kEڭ) }^;y'Z )39κۺ`t ݖ#ab/`]]֕Tݟ2%-ow1>.k6EҬCt9́3auh霨YZiu{6*HϞ&稹F7<"7l(WNׇA/URM7{F号~$GƻCtb~ `pϑy)l6.@( .:4p R TV俈 9Wy aЛB)]H^r'4=ݸFHAC:Ku`?M3΍p'Q1NN>`Be *xBS;؉-6O[N!A*9uAɔr^橈EMßUvtT3_-~׶rg,EKKޯ ,u.d0Bޭ-QP.Y|jXUoQ!\.jR a9Ԛ guP۪F)T/qUNqXxR*uA8 B/~`g@6Nwm|,~Kh5&(%+n5O/~%YC$2͡5,?:Q_+B hKu \'8= _(ҿ .? to+̃]ټ՞oW2zx.G"A^*T3ڣq C.4P?irA>8*ZNO*̧KVDb)KRi(F0/hf6!/Ƽ:\4ЩT Ei>u~u/1pQkz30XVp+qY=T'"L!'T+Vup Uq( bN:*PuCEXtA]ߨ%I8sD_}JxTKȣcm06XO!:(8|$~@W(Yu185FRXc]q^xuxSgUy7 mPwx<]m\j.üRTVu,2Cn(3uHe#*`x_[jDpqRXl\QWޒ 2a|xH9Kꤾ.E`4 Vj`Ł)lմFm =יVVm5rzT{߇@e;Uꐤ?wy8H .Yu7fyvz|A]$ $F6]{62> k(O7v%W d~ׇ S =O|]$؞6u{0=8FgGfyY$(=螸)rf eAc2!uvIVٳ;wXaַjX9dZ'"}_`X+im‘R'f깴.dfwpu~rXe_<:$B\rC@ms{1b/g‹x x[GRĻRcS_r V@̃SK$ܣ ݩ%oc;M Fh#<+j*a-͹|xz7(LGWz#uO`q/΂u};CVp8 ( ^Ipy+ j Wţ0"  w\(DU 0 :7^S^+qɫèC^ z*wnAQbI/b9ݺPOlo2΁8 PApy{¿؈V脳p |Baw"Nah]Bf}T`<u#:ON t‹!cq8zGWϸ[rTXNҰDgR^[XA( xcnu)o2 &o>shq&EIXqT p; IDAT1V 3/=*OW8GB%,|dl8`$\#MXS)R w Eqp|f+'oAR(-$\`ȉFhe(ps5kro _wЇzƉlPK[B(ۢ89<r )7l! ں6*A]3],PCOé;c|2GZqn5:&*"rx΃,ew7X[ƛ݇Ԅ{P8$nUvF,;5* =|e\(% ̳VZ |&fRu#hHC9}vmv8#c6_7a==Dd#cG^hMRBw黾s< noFϝ8ȣV9߬GzIWf7;@O,Yt;0UP G{sYB8 43kD4/[?%vf_j=cQj[*_@?GE;H:DZ7TU|G#W/"-KZ<Ǯۡ":s91Ɏ\%J(OZsdMO5_0of u7V^^ n>G v]e'E%=+:n_~t"mBʕ䗺ͯJH:(h7C#?s6FSJiEiV?P{:xEwPޜLUJ?µCޅ2n.qmiDn}zrj*v. Yρ[iE6*@BX`OsgSex`70!S;ְJPz͛Ή EQbEp/沌\"Qh ܪZ85 #xQ2VsvuѸoOOU}ΫJPc1Un9jh]EI΢K0xU<33aOsKд..if̖e/}jajz0TB<#?tWkY{k_Am_ggo<ڕ8U2W]w&1;_Emp&c﬛ >42ߺhoϝ0>s I]'aR}$Iȗok~}#Gݔ"t.$`5ꝾzY3*'gUTMQMF__6FXB,A9y(S@P7d/)>;> F8 GkI1ZD&a+ 1[7R1֨vb]¾M 5ۋ؟Y"ɺνMEXaei Tҙ4¼ӽɱܸ+Sᆵ4n6{?ܶۡ#LЉdCf~iEj~#thX6N(FFta:9'̍mdrw8}3.d!IK_vI.9[^w a)*B1,__!!feV9(D: u[U>scpg쳪x(xP;"b)E*Ę"ݺ-Uu=lj=rxSL/z'eTެ8N\T!|2ڥu]$.ceLa^#XF|&[ԁ,}T@fV!\l\)Mg|X;cU^-#Xh\ԭ1`Ilk?Qkqvg͝j;W. ͉ ކf .!gP]ƙ]7,oPW3PJ2 ^"^Lx@(\Y+ewb?ĵi m:=d})j( ?~+(MI?'CLp} ko?wBv)G7׳TEIO|mUaaL9-cCóؿ)aA/~R猯WF;.8$rjFgڐb(@{ ?fK2jBiuO_]-acާ@ M0z!vg窼E*L_#\Cu6^ UkF5]=\4!/3Rzx&y(hD>r^sA yAEL3;jCMdcpr:pZPZgmc) 2; X(rmm8#voJ+bT,4#6;#cԅv " /.W1;ijB^WV\n4w6WCUya,XLg/Yv+>Ɓ0`V!ܽRkiTA}DˉDMx8LֶQHzEe랊^'pC0h$_8X_ {ΎizD~`FG[dfYEPqAP~`fp^r>B\jpq5P-SL(½Xdr ެWì\YWU|ogCf#';G8bNj"Kmt5JSkG&:JkrCSl4^ *c=߾k:b7NJF>s-P 4߅>X-HPak4EksԴDܮsTFfVy:t)/(#9..\~'`j˱vjp5qWp >3'|Og"9#]X;/V'Mou6n9/j|!Ol4_r)LY3-^-u mC?m-Qgu8hjԦW j.cDC_;314Y 莘'L]dѲ2٭>'2|; .)/g!AKm[ y{t8-KVՐJ+$4H|c\3*(g9c1F=9?#/}lg ~7N Y-}'|*JV#R}%#{-cg9iRdpt ⡛]]J;RS}f} ~>`q7t j;n[o7򉞐zjҏEd4ύDx9o@_)m?`Ja;܇A"#uÌ3beffu+uc4;2ٍEwudtz~&iC| !qI,W,J9Ɂ%BԆU*O5݅*", mFi-s.c=%4J=w F) * knE;Ptmu{ Ge-@V83~sx#xd4V n 8NGX8@4?X.PbWE~m99 @B|#`* FP'm|*&\(j \ $fTJ8Pj/P*/Tí XU8tky l]R1]yk*%zV}o=!I^t]-v"zVIT<-<:^t m qj,Y DW6Bo*+|FE`ނTӹvp<%N=x+u(w[ؑ. nA)h_i1sR0x5w3\~ JSy?浜B;TQ“) "b+C$~LT(`mcHwo [<> BaSCZG c ;C-PڵRU6̒T<t24=$ZhT44Y1wȹnsg,n̑XYp{8E} fP_WJaG׌6:?3k|`*:]X_[(,,hN;xuDBH仾+EP GEFcbϨBǨg.~6:@M͓;iN;Z%{\(pn rH{ZΔA((8E*!bU7244\fwNZg9] (V5 ]'uEw9I2I2Ó1hvKGu!l$!(5;'^q^LoxP7SƺovSQݮ͟Ü>f[;DB89}`n xqs'I.q:<10`6&)J K. 6 k`g!.6'su^m;=֡a܅͸.䬜Kx?bU̵5,y k. wi.g)?SDtj˭-4tX5L (EdO\Mp CE6h-򊱼 z D~s_M knm9%^ )\+g4™#*T0p&<[h聙KNjأ[`2'jA> a/Vhl/IU=P{RuzG,wLӰT'$xcqFCu4xgڸZb˶E'WNЖa> 0~մn+l{_8@c= nW!^e:bUw1^ijM[p";E ?VR5!G@_U0:l#N:9Dw930"T@\emTcQ9y* oDM i3F,?NZ_>tcWab8VL$a#<-<ŦvŖ fžMz _8jnhaWTM6= V0k=ފA" ^3) I[VZ c?Ӄwkp1+M8$zQQe3CU%Y7xq^*z7] myXsͩp¾2c;~>>gHC;"+qQf|2p+v c:nQ euc@ׇ~S-TS==z^2>pBV:/cdN>:^ps-%J\ j tw\7ZxID)iO{ZgD#.D+t[hD ̣l.Р{OMz5&y6Q֛2bMEF߲_W8'CA# w6Z)L2NS~I]/#f1o0D~s]'BK;=5(pۘ,|0 AaLpP\#a8r ;%LܑwOLwLi 4U@%|2Y9NS>Dcl=PTi5fP饍"GʴVp{imqNLyg{گK{ ueb<[iks|%9͠N3] '4Kr%YC62c}j GmYSS(>/4 -V l 7t>R5RHV J-3>^J0dzf~7^\ ;ܼrSW+?䪉ڈ @=<U`;<QPFN_l3RfIy*%h;*~2lpL)pgߑ{j,pD:N.}3҂Bt >JSp,R &@c*>5 Z!gdR3\C}TGVTa+@K_y0̒70.aI e2\opAE gh8y ,I՗P]V}i<V ͉JNy(rs{ԔXn >4+_e X3,N aYN;gq\a6 TQ¤K&[}(TVdvGyjm5$-]܍VהF&r .U8Vƴ:wy GJ@[Ta?I Ekx9*~N7q?%?J5o3?/s\Wԍ=J-(%ƽ;4S~kN+,q7?\" Ku+kY%kY/mݕ=[S8@: 2 -*$Lk55M&$.̌MBÝ^lzoSi/ VR.{/{RpH:>p;F'f ܴ3SilPwWm (h>` )=x_Syu{5'i Z١z=#jioѭeC3y<巾b&70u詠cK@Ľ0iw iRʹn= -#`rq+ h#W|gi_-qZ{;1P>H#jg{YݖwSk1hRKfK3͔\0eq[RKX#xo^(jbe3I]6EM9k^sY)q)`%`"e\vj5\N<콕sK5ױtT.GtX8OUtĮ`@2J8Tξ( lۤ8d|<ݾꇫGْ_iz])9 2>H)dՀB9N+1Bjr5RI dA^~`Q8++,\BM܄f1)7,H㙬 j/14H,SW~ -Ұ?ɔnBGWpT ?0,՚Skա4GN]Yd{+B|N:Jb܋&HǖՐMᵦ<ڴ*(ѕ V7e3Tv 0H/.y\]NZb3'mOej.d]A-)_alP _4ܭBR Ʌ v'p`c8=&f$2 A*^b{Z_M|Gi(DM*V M3K0wRQ`X U=SLXyr:mj ũTYLVj(k;qJ W2;XHToN9qO]v:.=w~8ntAs{; ȖPz)Cp|Cby,麮S$H}T!+awZM4⤐nIYOG N*Z`wM\I q&܆[3 ,lқhXSߜPrS紪7uղ8$[ՔTV1LF9IuArAn)*B )~ހxEh' Ʈdj'ͿV#x۸)T) ̣&BZE/8x1I1: na|(JBE~~X#.o P{)r4Pg;"idf;'I&U j(gqRe1NAa(wଖ2kU[+Pʽ7>e'rb؀7!Aƍ,2iEl6ӄp94oA. J2ZT F3cZ'vY5r +Θ%l;a! E\nB| G]k OS"R'ez`1)rJ[~euϔ'qIⓘfcb@7#.Sg%y$`z2SrUO0-#.KHP.3%Yd$ΰH̴ɢWf[! L ie)bKmy {ud; |AV|1r- C S9Eo\TGe^b?~Bi ̡ SS}ij3,0U1jDtHXrvB+']8\B܁RSJf@?Ey#_bR ]an=q 3'hšL$13(~a^3fdd驽.tgP숃3O~F(eK"ۺ&RBp>.J),0br1 &c_(G%Aj ܣ[ͭe*EDف3|pYJ/}63Bc%T9*Dݼ_C0JV[r-|JJ79C3;K:Rv@-2t*k g3_**'ɉ_?]5DU)`zT_ŚX6YkI jj9F:[i!!윖=z! iOsr,ݰA&؆ qJ9L*ͦ3=0;}w  < ]H+d>8] /Gٝ% /q I⬓badM6 bzǃķpYkPlP1,w[~'8 M3%l<ݵP @%!cxjhvp ITHf5⇴Nx|¹ KXZtLy6Yw@sI Rk՗c<ݙ\*u2:m}V☐,2;ƵWu/5zs5CVhiO;iy TE5UBgW r2RA5Q "@*Mb4P#[,8^γ/JzNjt!zNN_laHيq_VrLLpyWM<;'_ꫩP=;TK+j?~y.ckR={u'Yh[qv Ɏg]B{^zyT0PNUi*aݤ: jeVr!p*><*oN+"sP,|eAا^_ܓ?o!S['7E`ske =aWe 6Q`+q6 ՃwK` 7v?'3/g9QbI׬)^^MV=({綫(فNwg?Xt =V?}7Y~UgєB`d usg(d椔Ҭ\_3XL`>֐kr}nƇ`N1JtT3&\Sw{`l<\HL7ʔ?vSYF`"FKC3FA ܑg_0*뭸 oX= xƌa:9SˬCh/;Q_PVx JsHe(_TXqLRSiok=vTh/D.XiN(Kx!љpf'E%c3hJ?A4$Xuj^8!jI4W1,YvVv44'!% <? Uנ;|S5('I#$+ޔM=pIΓL8FaK,,=xVZ"I&d*{!>8 _7STVPY#Kg +^ͥ s( %C+ m$&%=NG'鍿"a7,{u;]¹0ᚘR&s߶Ә/za:kJ k,;;667e( ʄ*w%`o&J@uL+CZhƫvTao7K4QukS@򲏛H zx&ǘ ?,,=p`v(('dt9%;] MJ!vaԀRjqqEYě=:=$U@/6: 5| @ŶT:@C$% F/dItNCp>dN8DS SBQRE0OHh\э&Ky%O5T;஛:xoǬP8GlhK)5A:8Nd0N8EVx&:m{#gªY6;ktWZZqaqF~<,JDepb*aT{遁3sgfUU ea-΀WCd4QHP p?)yk^M9)/a4WaXRM4F^@c iY ;WOD܆1\DfA.hf2oA(dfMaMٮO_P]j-9hȧ B* ;Š3u Ui(X{N~C*T@%bVf^\Ě!xiq|x c| w9a 9O [-x Q?XIvA*>"u0HFS0zLzJ}b_p:I3^&dUjz;6cއHUѵv濼Tt- ֫deK0.DyHt_Z¥RI߾aUdAdzѥA\u=4Gn4.o7HX4s8+1%u^IUii,p|yMShَ#HU+Hn4XIfF*jT͐TwԆjpsPwüU1|0bV[-&ýKׄBX2٧GH n7C.5]$O4b9(hbKZ )Q2Uu;۳ٷ R1q!]~u# CekPq>$LD@%nH`{kY%wc"]Ȕ3P0t8p^2-SDupy#cXF<(HI(c"T)G/e ͥ |tZ sQTdHii`u<+K2iN1 Ga8\IR\n-aikUk{5,9$Ur0A`Z|Cg) L5` )>=Hw"L=eu_4ס%*7d9mAeR=ꪐƄn`b.L;!9b&P\ǗlW5_"3/j* +Hg էTWߩ.pB6HQAN+Q:#̧IrONa|2Uw)AOq*f1'B 90a K$;σ9 T {,Yt4ajvV^]\e CK*f* d PZh IDATJ W=lkot봢4a+1' H ʃa/jW#.b慳:[f%mNGT;sjXNRieq eJ\U]h4qAji/ӝMv UOボרpF'2E3HCi-NNN9YXAUʩى2H$[X(#0=%) p!kiFLvIi**OyrwSDX FStҁHk'F~)1#~KB jѡdqSة*6ذ 1:gAqjqlr)GX¿ɚZK){in70X6}J[lWslx AG~h*q5]^ӵ㞔jiPqe VP;'#LajUUKeV:g}S9~ Y'pFg`Ox,Hئm8!UAlg1o#D oC;9aV]ؤaaOR,7c*f/A֮<ƏxQ}/OB{53 =Yl|!)irЌ@¿_Uڞx/ei+{Zz4̅<ü5y1drsMHw/#҄9Q3xxLP.)TrbI&#ԧ>k5h8spK=X_xTMFz9V#T $n n,˹+>wuZDh&HչJ B88l\ $tl) p?{6w3LpE{zc4+TK~sJTWBWޓ[Hi 񬑑ND/M. LEX {UHN8]v}fW "al* !/Z ua}W qohb oc雓>4o}:xPOR@pkXˡ=LgK75 5G,/'FII>w0=/QVQwz{GEpצ |?2u@Jr5\+}.n06MwJ]vNTc 7cG 2PKd* `-]x&^RMA S]a%p-0 q jnPiF2F)d-|>8yh$A=k2> ; 7;V"p},w`,ϙ!+7%vX0XH=$ȅ-8r,apħCmr.H%٤R &IjYgzQ0j^T Sc1HU tS5XNCdrIR\_}uI7}W(k3̹t ܊>l69 R۠=XF ŋ _TN G ]@ ),RzI | DCJX!YX V893쇣rg쥣3{8*K1I\prrc3|.s|AxL4f62*Q4:, |4':+"621]/=dI'N7a%mzi KĕR*&ҫMlSg:%5, ̑5ҝ;ƩcE٧SKi%/:$/^NjX)<o᪬1źjUk<_E8CFC0D`:HG`pV:ùϯ#C@C.2i9mCn:t ,t&ajm *R]Ua4 pT[܍'e.(X/A8bAT-=CWwTpk>r O8%K1{f'co=Mn$?t UXEqz//J7;72xझurQy.ez鼞iOY z5eT]VPQ옝^8ted<)85L}mϔN#>k&sl6դna2JrH̥sf!Luw]%I5=%Md( :>{'LIA$ʋ{)`2O1֙o@nLMe2p D YlsΫd.E9'fΟ׵OY4N#L@-og{7MXe;ʚ9gg:g(jSwv}vEVsBT\0f劳T h wh)0X Mc,93VǮ،n.O.rW*TC5O]jűW 3l$<RYZ"/ $X?`9 1ڸ60F$ i/Pma<*,t'+LK\U)TK̂z 9FD$L脿Mi t؍;pXꈭa*K7͐xp ga'C1 ~4E}A8AgOd5`)5|\$5 0QHH+%?>ʔHHM 5NjG1Δʢ^6ѰF!bZqĮ?V5Sj3bF|w  RIh^,"0 ǵ?ߕn7c.U椎:BHw"0@C\@!d=w1xF Rt^'F=lK5x4 uaM@xb=5kLrYs?x3pS1V6 jֶ?Hhӡ H%}5 e/i'{3lAcPdɎ׫Aj9t!c E$#flNZQN{umZD^s$_ 4bF)a'ƍ9騫j&:S`>f:,$+ ^G0Mf"mtK./%YIG%d6 o0c1xeF6ސcl {ćB 4jk|At ^ NKd,<@ޠC(9! Ʉźxzt< hӠ@_y]gPG~8*X{k5]rs.ԁ*Cm1AuC<+u:t2V ;=Ul~EfCf̍7*a|@z 7UŢV~uqo4q5wG@3Ϸ/7sܣfI)aH?环lL$C?uJ=vH/$%"3T )+Qq"n/r@Ћ"w؟ח~>)*|rHb! Igq~6f wd-ktnB&]G[-u߹֩oˮ-x;Vf"n~1jU*Q4i]TE_UE bg/%QVS,)i9 wì?˟)@*A*}ɼ3Ϥz_뿺\R^+XAvmt#T3Y2CaR@m qק%Ng2\7a7Ԃ0QCyCM3B[DG(xcIe ԗ7p'9YĪ+xC6 :xniw_$Th2{3۩i؏9tn]@Vi/d 8KLw'.0xj6t.>g>tTZzoG_}dW38SR_o :K.%0[܁W H4 Ӛ򊃴aMh(/&tFx\+y",>VaCHkx|U ܠTKA~$Ns[F( ;a_^;t~X8Kr5uUrE=Gm,(ѼD6}:w\??85d I;2 ؈]8l( c_(L)%ܕj\wjQK/+$r_R (umZ-u4͒NIyRѪbv hBLu6lTuQSeYݰ.ߒVJVءts'\ ulo¹-Ԙ[#󱃩K0APpݣh)} TX"XX ВcS!7q _P0*WP5=:`,0 OR,% =4HPntiuX)qJrF N =~RK`.H$4MQ'l,­\QH/0NFقA|qsf8<=ż171!ha;$7U)d!<4&9g_4vN&]y/ՠKA4 bflQ*5Gߝ)=X/ܟ6әä`H;9 aXLf[C›2js(pVy&S4l49I)\{ت$VSΊ[o>$IrR9M; L S;"11e\F|<%4cTW+ S/}aYf󙮪MT0nY͑^2蠵uz}e)Gm >o{;PCN8|1nq2qj95! dJ&y:VqW=-@ Ԧro2熹OvP?Z!-Vh7J61k4r xx6Nn;3 Y->kRc;xy gnZ^{SiGqV:LT̀{0Q3}[U2%z[ *WN'1\Q{*9P)˹Y#q)>32p,=ډy rmzeL8؆͂9 8s9L C+$ɿ(^1 @U]烰Kp 48e>49$3B<(;m80l .d)Ν0͡vxG솭e: ?uuNp"KY)VrCڅ|(2}m1Rŕ.`jY2@p!ʼnLc3B3>9\_!X _:'(71TZ^@ =\z5rcEUg7}Esks;x8il%s-r0Um̌#▢ԑhNq!p-7e F! S =H,# 5O˄3&"ؘKӟϘEBf:%CF3åޅP78/e"\s? I4>^H!%[]-õ8SRZ՗`LX1\TD*q7-F#`n!ֺ"?$7Α Q×V0>AJCJPS~LǕxIIOY0fc[{T\YVS<#2h / &T;tX|X=ҟgZ`!t815~8s]%LJ 3rbi^ȗ11!B*Bia8+ `a5_CG pt0>ɭ8۝%]7{$NDsB&p._ %'6)T3H0'CWӃ3j'{K@Ns+r"GSXB dYȵ+ҁbC|,7, 2a6OCGI7wECҮ jBgwe儩no, uGy0h$jB )L3gV+Z㊅ Τ]*W1t4s`fk%+p^m4qY[~g3MRM-fL2u$=U&+\~:JyDŽ!;ݶ=NgTa;y䲃NP`-k|fN vWQfr芈eɒXaCuK"4VW( %%,Π-0{ pFci7ɳJ* ꅴi77 %M8m,SƈCTPsiøƥ`}6yi95rp;:f:p3Y[hL7$)Nr-H+6YsEsI9' ;/ŸLN@8vø6OpNS5.V䒪Xyoz*=SUΏi!2D 8\ I 쏵h])TJ]K/iNkJP/>KQ@t,rSeܤ#R$zpUc"h*_8i ;3SUh : ? YaN̅3 u 3aD&L pM\~X;e;Lj=Kp\X#QXj 7 +XB*\T{Iui $dK('WQ\sdj@A=>Gb( `<n[&P:Op,2 m!0BG.<2a;ǹЌ_M8 w||U.N\?8NR$ncr^Az !V4c$ N E+ 6R$a>dOpJ)S*Q.A<R@v 6Y垜ǻ쒂1wF0|,is4aL6rS- ݩ;h<-L 1G.k+7G [q3)` &DoREa8ʸ 1v%ߩ*GC .S3{+>SBrA?Ax?0(6eUe6C-9 Fb3sjT\5 B>-!h SN/i;$OѰ{;΁ٴPF=aX9,1չnsbe ?~~ 2/lN_~x,r=9%!?Ufџ҉;:0M zP p(C!H@_& bX80Nd%?g\ M$\)I&ŗ.?;"yy"qi%V'#2^LT縓o90H-5׼ ds+Bcw} d.cb)f VZT9:+J(ʋ PB-ݖ&:9|L:Z=OX%YOeM||V:Vq NHK@'(Y=Tq6M?]F=bB,.=.އIN@c.gnRw*& KԷ^I+gI:VStp u>H"w%.|î,%a. V7舐+Q\kZI/z׃q|\}W)L.\+ #% l4D}qPQG7TMoN[.LK1ROQ ~Ƴp B񝕞bfj鱚Yaj[ (ʏ 1;9$s$%+HB~ 9 Ր{tSJF/qE.fY8u<3xZҚ]F3>8ȷ)ye_x~`o3Zwqzd)K9±Pv{ǓCdTlrbI*.Ao>jA? SwI*sHbF7-Qq !?U~疞2M"$ͨ&tNRma7k5O;4Wtw|o;UҼ iA˾#0TMz`$^wh%dVezfKՐJJ(x;S"PC}CyER3*#+`SdV(kT3{5`$Υ9]X{AlKN>ZdKURsx/UL ޑ ?MV|>mEcݡz,]w]?M~cS5I7%s~l(i40< @@`C`|RŤGq<[Dۑ3C\Gѷ'[٭UwoH<7LdV;)8RxtTO<}%L,JPhz+];/Ljn$~6ӁIq/ j~ )J>OdT0a}܉0!҈s{Oe.Wjn'ڹe';Fy?{D L7U[٥iꙟt@:;no@x9ݒN&Gou]6U"I\Bb*DW7b~țPʄ`Zi6ʧCCfSiUMR'8np~B=,EmuRl <ΜhyL64Vk%2ދE7`Œ0hxKq5/*U9^>ͱ3ƣZvQ, h*\ ;;Gl`:) g}ƹJXtgX`Vi8k$3ztYR#=*j@en@Mh4V婹ʨNXOCy0{.5ѝ76&[]su E ^O(+py6Ʀlhȟ(5`]D)h׃GdBQvDvǹ_M Cb%8˙ 7L>7tX<} 'r )ʌWUqucSr.D(')*Ᲊ3AG먳Tf)|wbckps9NmsZ:bEg7 bcMcQY ߤ̓IڙɃadj4pStTIԁgh ߘeZ,|MotՅ;Hhª"džP@J+IPQkcUCiwPW)lwp1ptM:iHxurSApiz:M ɁK8i&9%+d)Gh0p"=lJ x?o*81?=tR,"Ppn`2U? `CըCr=VsuIe;)rx?y"Kx:GKF+aN|. igBWpuUg)o^Kx_dS+,$ 1捿eBv_03q9 e|3f p˛J_Mik :|%j>hasB6qqD +AVswTsωf*2T0Ij)~X'>5h$yM' o{|)C4A㤝{H_T19D3`Kbwf]"t ơ{ī%/p( 460S`w1#Q* ?7pJVI5I hcLA8RKjJZȥFK*|Bu!YL \fNeqB52t9p29&<~`KHn̅(~(k&Ժ2Nr,_$'S2-TЎ<S3NX¥9X@+JLY(#4t $"&,5a^LU!uHa,M4ʨ9' rv~S?Kox pkg6qfRGQc4Ovi oxG: CUOj7LZyu2lyHfWv@5n%Tf){0МCmY&Ln\j;M3g g1^vQ*>y[TfW^DZ_;͑<|.p3vś8`;upeCV0q) J$]pb$=e IQp˼G3cq܀}osc5c,V3CSfΤɋłs:cuː!RX=*$je j/QHuN~8qeyଝw<9Ob a mÒzbZU[m3\Y\.R[]a,47I]o:?&P,,"`KO= y[xq=R~ Nq/YzBҸW /D.}u@U PLsPb]==nb޵jL?I;?aUp/B>>1\|u%zNVm!eUi!x7zY餷;N]2`h/ҚI1NAHfNzet2mEz[c%:9U>'?o=0URpm,.$\$'}'t/QuC :襚wq16_%\4ևr$dLȣZ >VKBHn1Y"n`a}^hG^jx9E`2tQC.!-鸊KRJ۰H-+ {#<3 =+#Id2x{yK8pFnyWrFAHaZ@9A%-^6|S+Ȃy p&pf~: HHX%ŏRH**] n4Пcf^ky.h1 44  >owq%m+u tpH L#a 0A#Xw|ϔi,Q\O{XiC90 ;q$k!Ͱ d)`KChBU^KU(V&U  i`%|8HCq# 0I~ۍY*ٱ)|kX 1D W0=pIyh!!I) i-pmo8 s?肥%Yrߜ`]o1)VDG{iIeQ%^e z=`*HݡC6ăE!uh6TIjIvΎ0\JskZv骆ǩ)~:`aILUGc0;JSN+ Q IDAT$B7owf ﺫL"&9*LUuNPjtU~%!_7yy&3].z[5u9h砤1AsӴVdn^kuR+fNg#[)ќW]qքXo>RJP,w?y\S 朝7*f2?!i4QQ5vG i 605`)-tӿ =tQ%R -F0MΪ]/%{f: 붫w N n:z-6uW:U64}LrKQw#ִיDezO ]4LN}LaWv)exw1uHur\6(juIZ0aj1cMZS  +7ǻ; OQ1]{\܃C6yFxpi&W.kw_ ܆aRO3꫃8;i 4R~ߺjM½tYJ۟2(m/=9lڽ̳ޫȣg=끩TAv?OU5ݪ\7"g9Sxsȱ4>x3av\ gq3Rlf}VHʺKy߹F{=){x]-l:“5++ dY8jPܿHRgq늜+9h']Tb_0*X'4N)jAM, ƉtMsRArn`I:(TMi%bd`^I%kyY.%-qS>X©%ImiUݖ'Jcb*Ǒ/uDQXձ+"5Gq:N6/e8[Ւr_~S5 wt:a&%&7s-R˅/e8:RsLPpͅGR8 .U  /p/cʦ KV GK\e(#S )xOS_a';K6Q$%}RD捊'WNb&R}<ᴚHΊE1, pܤ䶁`ZW0i0Qu^  I$Eg+~>;Wnܔ+{&NutfI ._s٘mV-Rq܎k^oHw/Вޣa-.zXXlsWO禫UQ5ۨVHgW*녚夅6d6᡿({ UkcQ/N[ڬ&l+\F̑>`s {ßbU"Z8Gtky8fZۊ[s$)4ȌlhA|BQj3O XWYR ,ԡQ8(+d+•.?c ;љ)ߓKa+閺)+&ҖH=hCUW)^劗2֊Ojv$?MPT"h\F{"9V>'34ju{_0wQ(3u{봇̠{*/eA SoXg5\E_ԯ!B_,s q1ndƌǧpQ_tb[fYJ \֜ ?R^ʄ%q-'@:g>!p;C2Bc *@TܓvC/mo+"O >R)JB}P,TCZSa$.4zC|%NEl8E2A-d\&?ot6-gyJmXm3sbҊTOTLZR؁^YUeg ,K)ef>R^K۩(7#)<"9 k0BRJW*^!Лًk^yg0 ϘW|juLp;_)Q I%V`(%eZK&s\:oA#u 4.ҋi!P\Jq;gy 먯MeύM%S@~Oe&ZsYSZ2t<688*`Ne܇$8a2/N a*RwZ 9RL'|pel"` {wީWHX@8A4rB%?A W}=Mm۶m۶ll;$Md[ٌ. T_̃RN99t\7bba7T&e}T CJB>v )&ipf|s_1OR^X/՜@c7:x)ګ 2X{),uLFԅY9vx6Iel_WK{Zgԥ1nY<ٝ6Hh[晭;Rk/x breTϕR3e̦݇hp=;BfLu=BQWE:y)˾:_'husn|g-ILõEcMẽ'ETm(w ;v7LfvO@) P~t岺-b.ifLK,$kUv= wo$<7s9r*c $yXE!S^2Re%g񞗹+hm`t? =-'3zi0 s xGOwPFJ>*sʴaB),+8! `R)1-|rAZ+:fϹ t޸'%tYT_ʛ\\rby9ܢx˯4Su۸ox_Cbf\J%J͋ lpR-9w^j1—\0(V+`5QP5sD>c /bQ|6ƘSv׫U-wh0Φv(Il5ٜ1CX $X2Szah !AP*d"=M 8wY'y9bBOYAoRIzsJvI8# gqQ5k& TEt,/s&XΒ@(EG_Z8{ H>)|G Q==O3mEA}3yi.e*L]"U\umxFdm%eI]"LѦjcE.`~GnI)-a/haFJI̅( @2.og\fAF4EN E\i!Mt</U?i |؁/~&r<>n;M3\55*FQ2S̅p(\缃)p &qŠ';|W3 cAcL%sA9+$t)29%c<{uJjMPU m T))2pOy`K6!P^[Mz op4~FQ4W@e)T9Vg `VZaeaَ;-iP~p4*<ǡ}횲zF54IZsVR~ntp0iJ;A]īx{4! ecݷ[j੮Y~{TR=ȫL-}IAiy&T!=`yyBcOIkSUYk%l 0bYLR>LӃ;:nJvϦgT)@UI?lt@I>3u[k M>w'>&n :0gWècb(sI2FaKЫ0Wv= B3eE}փûe ➁c2tv>vKFKYX C`9UvDr+4. snAJ#T>aҍ;_<.)W᭙3\){9i6C:LxSpVd2Xn]ʋɸ,2wS >,B$Յ5d}پDH>Bm7圸ϻ9t5f8`@k\tFrB}zJpF NB~Ə |3Zv(-E! /8ImS2A5u Zӱ"퐆E.j 0 0 Ce0U-(k2 ۩$,U3MM6=T3[twZNCnI\Ϲ)() CpA.ce, %Ѹc+aXP5trȊU-|)vpA]!WT  3z%͡! j$ oo / @J["d8R}0UC^?i1[o riy.A2,ɧA&؛]>VƏI \P;h )opLmeEu.N8)6RY !=̅}X?Aaaҭeq(ũ^*TF{: ϱ9XƆfxcOwX٠<*"X른hj~npTh mI!URt"j$<6TFC$=ROBh`( @O6 <*+8Ş ^uB3W;u:pNZ7s*tOIlh7u ?VMq5ZA?"2Ow39#ԇ'0=xתҜW 91 gWƏKxÑ9'2 "6v sͤ7aDM!<ӼNUoruVÙ)cйf:/FpdžX\Pvc<%R-1chuŷLXxoc&/Wށvh 汼QʮW8rJ<Mׂb#YQ19>́R :r:VZn:%сf<*2 5TB&zxܭ=dAp a%rH'Sx]/Mk:ipP ~dQϱ)Ʋԃd|V{|ڧz3uҕ"!-rPO=\9;RR0T^vp9n7 J. Ir4ҘT VscR:Hsl ]u_Lؓ:MBi0E,(bP<2@|.^2DZnZ]8W@%px6URmwܓ&(7%*zHŇPllvH2{sA .YpZP;pXR P1:)q ~^ o Zc  }d4b2HK }` PF2xM/.gB[X`14]!|vTKb+6,3!ֹٱ'Mjx.?2/=!N9L!;Nu++{$P R)%)h,YxT O}o+]Nw_4"UJ0o/5MSJV9 /j 2'UϭPL ڋ(/QRms`~ʽ<v_f8x9_n_};[ozݐrP8HưOᕬvNv'h{ ǜ[qO⏒w [[ǧ=*3m0ؐ09<3}a">x h*I![!=Hۓ<`p~+7 ٳ(fvS4C>!6l][i?P'7Mj_ c n$a]+ 5Щge!u/sRUX[vb4>2j'3pkEn^M|w9 < IDATv'xwWCdMOJ:\ z]²&7ŒA)aL0HM`^;w8 Qx ->n1JwS ^fdI bֱ7FCՠ^RԳB_VkE]oIByﶒRAcIlͥEP1͆0s*. @sp[z c$3Ƣ4'S5C4\۪AVӅWqxE+J<y\@.i]8:< /[f8K=4i&*'LsawCWځp,n,4Š4:uSgL3 MRI ꤳd?蟴k&wR.v] ~;hSЩù tL!In%+Lo+K,PǥjTI1$IRon=g'85K b9lvC5y* 0l ;iXMҗWƓ)~N<ā'\tFys#U*y^32\?JJ V̗Ŷ je0-7TUW!J7S5v?W!̣zLjRC rw/KeOVmp0h,'W0S[䢛]CoHM_ >v_PUvؓ33I^!<|t5>pގv؝M?wljt8)᫿χyYc=?TR7յ(mvr!m m2I S yb>Ñ? l) .g̠hEЗߐ ɟv~s Žl7Dzkd݊cF ŭqqr`sSQ,n}YoՕ &k ]7sm* f>|䡦QRօ *}!)fg8珻].6Z n>؅C`5 wLZ+p{n>4B1@W`#ਲ਼SIUe mG ry~c-/ǵe'oaҞԇ/$ĺ f0RJ_+wd BORZigywN8j?sxK2+򭵿Bc?kL?97=rxGL~Ìo ZaN|UbjSUS<*7]opjtV:*mA՗R&Ш12gvqj\ ,g?t}H]C'9tf #zsGlM:0ЩT snnH&D@ sO{n4$oeO|1&o 遼8˚BTo;D ž#jTBN_xm&jH1Huv]_rPrza#h54Iaq@455;pTgGhh !3=PNŌT6^G!t]*(J< n|% Xnf_W$DW tlo|A͵:d;DqUȔ*XS;ך;ҶM;ݿ)' '~f}*WOt.R(RiUisa_.#8czx(y?_xW*@N{7֩e\)Mg(r ŤdxoCq5o #Sڴ5:Yo*:UNCJЅ0fgQ 6-~]h}(He .6|M~gԃ"du*O; )sdǾvH W9 : ymiBrSgBx p W#^a܁߃CۥJx/|Ii=pϽ ,\fI ]LA[G.#Gf|EaXR)x0&M'f8݉fbG%b 3'z旋nj ֶ{\,ë䙬I2i`2KwJ+:6ԼDѿX[iT[̣S_idڛ蹮.n KB;yߪxbQBͨjn 8Nr0gr$'ƛ}wM?3?LMy:S%ah `dNj-\ YEaoqUT= bA\֓n].[A\q}Tu&v]U*QCD* (=VMe}F5\IL_(?FnO3],N1 [b== ]wZ2^Q#F Yb'w6@:):*doR?PY0vI+i WL爤i^O^jHVFVmn#i^pQ6:ܜ%=z8SCi*5I7=ePk0BQ*UYLCp&\nG(6=9SFA2 _cA4M1w-. r q!F0lpJ\HS! M/v 3!S81F&d&/&{حDނIK:g4,x/gJd_a5/rgLTLΪv{rZJa/#/V`9y^O0+tV6)e=T4 <jFBYCoz&>q墌\A>;]ޥ׼rJ0LzR. zVs"s)6Z#8LG7)ݣx~%y`FXĩ(N )Оb?%1kC( p  Boh,wU2C+ p4~ RBޙܑN8a'0 yl`UiA%DO(lN려tbXfx%EaTCuB/ _'5-M :?ױR.!Q0[RjanEw:Maa2"t'L=Ժ8ƤT>IGhZnyK)Te9VMpۀ?iuOe8&N :et`NXy{ 7M1؊K%)+ߜ:P~)-p I7` zF%?n\_Rq]<@j%-TZTD2a4?L J639nZKxt㌔zʯs,2 + ?~zo i-3ZJ8Z3%ܮ: ” VVQ͝@ z8଒2 b+:.8JE%RFzl1VRC' x5x.^ Vi ANP3j U3{!ϔznN{*IIU}6dU\JW;Yp{U& wd1o B@YQ8NQmx[-z&`U^~$QZgsaW;1N?.(R|B .刔ety,#=Hwy⾗1hNT"K(΄l>'&ZjgAm EV~FRIC1?hr'WeMH3}cX1;YdTE]%?x.g9AZhe5Y L ^K+w&V17±a1@k,fŧ8LH2ˮ4ֲJ.dUnj: E %͛屺$/TH'(K a?L dSNOFGݿq-pjXp0#dg;E1F>yo,M)vaFT-8 fuOm~,Ht˜CK5%2K|5`.m8@•Z8)6MtXxB;gr桼 D,[|>EyUicx7*>ϐ*<B䧡D~AISn` O("2\K3À*K;gp( |/PcqC#!;sG/WGCV_=~R]0]`''nLa .!w3q`)gsJ¥ W]ldUa똞XpE[Uv]0j^.&N1zAmX_"j$ǹP y0>a Q?lw_.($i77ĊGw7_M9!yGLțo7/:u|Xڛ\b0E {U҃Q٧bK?hZNz0lEƤ– +7SxagBo}&|7czDB/6Oí ]NPQ~]5=!KMKy.ݗ'3H3ɹ;;&*VNC o&$ˏN渹#sݱKμ8ǡ~. S?OzytSQg L2tt2V-0p==….7y7m~;Qu5v35+IBj@IP@=ozw(Y' % eźXS<6ja'Œz=3#zkRI%d01|[Ly -yKk<ƪsVq驥zԘE)n©p޾i{7,+`[gfUW폩t-\`o|SĀԣzX駚?Q_..٭rJ>oUZ]׳ 7+GLo\d <'M;`^v5Q.j΃,N-  _Qmy)Jk ߔ(%`?V]&0 n*U(m%7kJ5h >ޓø#< MOX|`]7]Ԁƪ yxZ%!03=0H`ldn+6 l)t, m2`iыyp81חžeZ>_Xux2e^PG*5`&T`Si`+Օ.r ɣIfT0C`/wƜX2NS,pԐ/3R~MInyz&{*ūd:M :;eh\'-GV1@]h ԗp!=;Jy>'І+@9G_yh-䪬.Tc,7 UqZFZe2 .s&P1GyY}ܐ:RZHI肺-<)]]oO9F~2sc)WHQkXk `KeY\[.*pęgz Qy]DSNS.kGݞlwNn*Ser$?Ǿˉ&D !v? V_rTwV_y=T{>zVumrr2n3747Lƫ'ZocIhP'd&nakL`f QR])a7X9TKj5::Q`:Xiw3㬜T 7J[6+v]bZ gX9tVaDBiK,v<ܰ2S`2Nz{b D']/60?,1 vxL#Jnz lU}<ޛԛژٴ8SLҁz$]v5xs; D<0ἴ05uM@W* x*|y7i5vmjYmٶk&??n#zl?}Q@1cR1Nj~,Mu\!xz?h.zM0@`!V?A+8[ 06bY=NՅFXH^) Sa_h]h\3LE p8CA8RAĘCiI4P<'둺UPح'r}u>0Fb"TAҌC (+ CF!{$ަRQ4Um.V@.2DA8mL<ƫzy.OQQ*><չ|Lg!ܠ6;ÂF0)8?!NiM{ քfkd8O~V1Ș`tZaEU{V9qg*D.Aix+.D9  [ #NxlJAfߡ:$S1y<0#te#-UYbK.1zXKKQV'_0Vf"rxR},^Ǭ6o*je֗ xSWR+kBKiyiM%.kq6P%pO? &atTQ$M18YǪHϥ.VTPsYOI4 Z npo8yA/>fZv`k%5Ԃtv5ZnT63jjkޘ!=8:|V͗R c(̡E#tW|Z/$;qƋKgÛTh)E$8384d[* .|h$>O`nuǾ"t2'1WC>+Z}jxU@{6tK`7<=Ϳ~j'ة#ںOpj2+lҰoX I¾'鏃Z8G0QzH݇XٻN1*Cubآ}}[e]=;P̛|zo쮿S?գ < q;/m\I8#?T{^ 5p't^* RCIul8c#s}YMdN:pLBdnpB% w!fA}L'!Bm5 媖Ec}Et@~+^, 7p/ ̵Y{Ҟ=.8=6fMHHT7juZ6s *fnsPpeTee$jF'1Cla2?H:A*} |^i cTHUW="Tp*)J? p~<䛐J$;SJdQ7q;Ə qc{JIeK C^'T95ف;zɥ=vRg[jucK(vЀ@#tu;RiuQ5KEYmQC# Bƪ6ks@-n$%xֽp&/4z+4٭n*0|!e 0 !h?˶Ce$JqyT==0_OQؒY'^pqwg7E\'fwW]ripf6#ev$at \ցMC|,k+(sF,xl}T6*`  UBHc{hWpm%n*}Jx̖H[;0yoȁY  ޫv؈tYAn:Aq^C'}@qp*t~3~[fC3n4ϝ%t^L8.%s]w*A(=p Ji9$5's,#""F :> W0p]rƕԝg܏#lO5qcL/C,$KUYdHvqpd1)І;h. 77GZǸ8ڼWFE6||OՅJy'x(Y#h$G?:ӱ0+G^ltw#uޚЭBuV1/ESY܃L*?m*9!AFK [deFS sK k`zhhL6j氚I c!A=V /^] F(2QE5Jr;́&nЖF)CԷ5̀ o XnR8|PVBt9L\>xfhg)E;xì]XdKċM$Ag[D h@a&ci [ 㿝Η)[J%>FR :gwXʙ}*S`;]!4(zc-IcϋힰL?Fc;ޝ-xEF2^Pe S%iAJ:Jg楜$so h}?\`U_π"7WV1u*ҞIS;9gfJ}j۫5ꇞ&7_8x'}Z23syePeGڒ[¥dp2򑔿-%ܝU5(&`'dPm?5_R$rƺFŻSvGVck'J^k.i*$-V9 ]>X{H5摼x紑^^jεp>a_4x/et4&{içn|†WIENPrY3`P'5`6A]tNs@oؗ|oFy sFiTD@+ ?bs5˰!&|=UI>,WvMd'ێ.̣z7ϰ">[كgO;/S~;o`̂t]a7&)^p twbv@%{LԍR{0ZSi,y2Ngz&]\\R2{(P!Q'N/dUN+DhQH4܇YTnƶH JF9_<ހ5[¤8&flX@'iq/;!7e4|z2& 7E`y?!-2cDꐂ0RYd.7FAA=XJW5L-@[xS1Ig"4:I1vAPT|U]`SՄoBya9tR|&*c1 iŝq.DI. e!Fp" QWg)1FIF)Ni8\g"?x~U\>\ 3Fx.co/-9V&fHMԂ7&^s2 ]!CRBj@}i 7Y;-#-4Ɲq u("u0恆X qsic6h=Aj|H+)i*qNagecOoj)7T8L?+ya,VO`ބnnaP㹫uL:SҞjVREǝH<K)TVr=[̳Ua 8uZkyh9]p p~D]^hCe5,a Wǻq/^v° ;uI Ђ7Zߊ[I˙R :.&U$x ss;nX9\IA<*DZOOP @)kҮ/S#+! n์RgK`uEf[93r}x tpVuZ1j*])#qGqQ\ q, ebS_,Άn i/PG?s=P`އycYÚH)&eWO>C_a%F/wS&8hGTmn2\zw#,_d"@tv>볎#tg ~` );#,4voWrHc*}+Xeh Y,dH(?^0[3`1I3*zߐBIn>r->P"y l:ߒMx))`2Pz1yOcT!bj }+*=SN[%7#,',UT:8ɇ%a<^n$F^K(_0ޫPL%,ἬڐUf (  Ў.sq鄫Pheor!`[y2@ޯ/qF)<`~*ƲPFk8 GAnt[RM`ݗ89g^I^Q,V &k8KaV9"p~Ca ϒ̕ݒS^g$AO4N/*prw2fbqON!&B/n*7؁A_CA-i9WcTHQW?z]qSd>D(i M̆ v4FHw}ADZ:ҁ/ѫS)s3R9CVFFh:8]LL G30\j ]pMrcWՊ2b {|?>jþ#aΠ)zTuJ}t~.T5]ް.Q)l kOῸ0s@A\2g0wԯU}))%6WWcT% 5Cu=2 OC}#q`M36`оA#. .7J9ۗaI V?U)s 6v(%m~g  IDAT < <wUYst5Qi۩/#7cBr$:}W)`?s ~[i%ny퍴Quhjl$WrG/>:K*8ӘT)>czJ0s-C6@5QLoԗ,8 $\H"6Fa'Ź ` LWSTejP^ZalF`0JpT&JQ K-U,\+p>WKl/_!su5npdž'7:tS)`0;Tx*v*vOq#qcI 3xDP[h( *7 .Nc d&lOxN^o(ͥ[Iu|9 +%l i:;90mҀ+'-;XZ$0=X1f:0^l7S<4T>mp_ꩼڇyqCp-aloOL' 5 ZPiF^"F CJV̥A> Oe2ߢK ͇ FNtxTzΉ͢8HEZX}4c#8~;/`O4U*,q:NvvQWފɫHhOPo"-itPjQ56iAwXFV/$Nan :#TJ?&բ00g?tzxOnb8^6:W $ cڈ-L_G/qn\8d Jus,鴚~.wVP+ԁϸ]Nq#)qPc8slǕPG*n 2&A>4< MGp. wJf}) jcrRxX*&H2  (ܒ㨚Wk~"X|nޘ(NQ|ce-67v*( tIġCPF $a1v0B1*=ÜkCxjp^q3 2b*٤3ǨL*'$vRP:Om1z WT ѧ<"-a6]8?B(O6#!L'TBUR:(vZ]"Ċ i&SBdkK PM$oHxUKt].4ڦlAga⿍VI4u7EyL_,+xWGcXCnSUHNqNtNb6h,%-, P,f Cuz2@ *# @{t¶& )Ʉђ=p _9\]_[o/3WI3/Dd$ahAU,'KrR4uQv+ZHiOօu*懲C#Fufplk+VItY c3ዣAJed^&\ i`,EA~AK6$u$Vbw\jI&$cjm`Kr!ꉛ(A>el̐I6e*طƩ뭼F$Pyb‚ /H )p57K&-"M")0# o!v}gVq 3Srṕ]IUDJ~he1,%R a}6Ig#R>HX BȑFe5U=0jcVjIyo{HR͋'ԋ^9|zmYa15fazWmbyD?ԢDNL0k`CSe ht^'e>9(2*n#s ^Y؅r.i, rR'B 4i0=Ca[7Nw!WTE>mЕ:&"CCC"K ٘p/yf e[s+GZ8IJ~J'܅y2>Y*Sf^dځ?p[q |k0܃}*_vRp9vOnDXQ z R9LcU#SXN  :YfN NrM|2Bu!=9P*aSJ~pcUKXpJ[ޛ|wo%y5jmvg%Wq\{OcCJR&>_>?AOLFÔ9 &dնJq,VG:ozb  䠫4dVgVy"RF+F[b7ov/AwCgfSW_h/hvp\ w됭횭0~ϣp[ |wrCE煡̽tԵY*9U9g`]$^ziTshW/&zګ^s.~.45.*sѩ7gc W;AZjUjqP3ltd~W9W2*V; |.&5/Jlgw)DuQ&P듯s8h瓼r4WNWFj\lNVyFIßu٢F u\bV ,||Q"ou|*DdZNA[6 z ng.5W7,ɿ%? gyd\KWLAh e_>į2,) 3b 2Q@ߑx `4lO3 hLx(~K4~Hc-TUq5-m~U Pq-Irchś!̄ U0;N,!x'ة"tC fˬ#%aUpE`v\*aK?+zn^e0TAad~PW 1cx@eD -g/xduTW7;T"1Q1Ne.%&дV (+%\\Rv,O^u%". .fOc4}%'kFMj[’ ^Q&uX':bAnJpYMTQ K.(ЦD0j3-#aJɨ ]6ɬB3)}TAMaj rZTp:G*r5a|WON I>: [ۛ$<>"wKeaYkFppXKa_2;1N{lJC[;"I>aausiڇ B'agq5=-h;TN|v,(l=0KoeTi T#=S:Bo4W`>՝^(v'2G?;hzt5QF3g2M^ NZM%̎]N-ݒA8_uNT0Vpќ(1n@VKpVMeO {?Op^ߔpOAbsQXAFt]p%s{QEkh* z ʪ f~>/ {pԎnFB ̌!SY!,s2~@C6en*皴f,y#[˯vE֭s&2:rb_,(/(yXqU0$mD̗"GFgQ="0Wch sF~^+ł-6\0Kşג~y /$;(?nB,#تb6{hXn |basjF+_gya~a< 'AiQָBG38| d -яPYIsG;nl.ge$CsGK1#L֟@Wlf <O}?y?fEҏ]jE\zb۪6rD v=6ȎQ>).Ե3& Yl[F0^ /ʆyqs 0^'[: -iyIë8d9EF/tR `60|Nw:/Hv w ҵtSh"2 AJ<\P8Sa<,Ѐ2"V?1SZԒwQA,%,O$uqݥXTG(X&dXTS$=2*Kw'#Gۛ-t6ZXm8 _/tUz/RѲ K!"tYx1si˱p;\pNXy[>."WRȒy7K2ְdvJjJ9tK,^p>%Du2C)3vC`^' \@] FrD0>Ryp-IP`ڄj .{ 5Rm;mݭmS̼=Q Wؐ!zLX5?[5o[K7I"P K̰.QugrN;)Rӹ\ b1Y(m`!k\2DXa]d#qK-b$/2FTu\ƾݸ 61A_ t,w8\/-C".ThkZ'* ċ:T/Cًs ̿cC1d-bE G %eb(6i}2G^ %Я4$]:hO'%80(t`# բۓ.z<]!rM=E5*s&W3㻪Ķ`IiWVN.?ZMM2.S\ Ŕ|ɵyUR(oLи A1e_#)NC{j&xh 8 6;iҺIm̭{4OsvɫF ڊfClum: ",olr{Xy|!ԝ!aY9D87%Ȩr7 n wt4]?a$>fݑ u|Rr+\^jcQL/ %"].v*7==fT ̞R4mJ%[dMWfYXg̜GAQ/tq u2]^W輪0+joQ/N IW _0;Q8|y8cgqD 8 ?^OVpHܲ{ķ=Ez6GOuQ>2j>nSZ悢mni1WA=6m^#VR@`vLה#x͉|(Lg,ÛЕzy :w Qp'aNq _*1Ca80Wx#@G>A*R8B茏`"vpҰB}`՞LTg03:3,0/6d=VY KO dCWԦx/&^ rF*Gd1?5Stj?FnQ4PSS& IDATcu9X&S0p%Lhgrk O3C0WOt=y2C{ #d󽧖|ʺ=pOcg|93݂pU֛ =S4DRPQ (3<'d%d7]Gd;<Sq#ob';6_ՀEpOFUEquy r2uH^I+;?)< *o˹pF)9zsq]I؃ pюiEts#@G  I>0iv?loC]Օ1*ݨ((/|.uWM\Wڰ4[TU[#N|ήeճ6*{JX땷cpr46sF'Ldk f1_>GK1Օ{Mg6`p'^,fm`n8pq\![ڿ׏1wƓbFO4V&%M g Muλt^Xc,c1ZYם>c>M6d7!+]\\pGK U}jB*UZ1̄ |.kn#7`:%f7)i'݅ft6tGIWwc+1LxUf0-漤){VOȤ q ["&C'U"C^$:X)DMo*x|؋fp Uifa66?PY;h?=tEUZ];Y[z%_ \-P+ 2^y~Qvb9",' 8SXQa؟A7=ƺh-3n9VsמAwxF4l>WKUm@C^iԤe!;Pa>O(@]x9_0_:!:XSW D6^UB&p2]W^t_=s8\<lnͺƅxڈ8G?ʉZ+ih(0P-Gdg!9Zp4"mg}x(ʓE (p@  c6^^|qfU 9~ܐs&d6YE6A":[ʦH__+!iKA'QgMxN'GbL|X֙8J^`Sܭ0S)5C.;e\bӛ #|ig9FwKs*|z8ps?5t5SDzbwf0.Lːp%se7])4W6= _\҇^g~+Z#yI\}Dt*#+N.3I%zg lM 0P٨2 :fw/mJ`]EG;<8mftM^cq\l3K\A=pc^毤-YP"}k,8gW3)?c9t $f̆_s4*ʗƎxq')~y^k'yͺmbv ̥%$A'Xk88! `?hB7 u꡾{ U8@B}A}іYWr8e)I4<0ffiċqP%h/Z 10}V,n:=鐞r?awk8c-S]ti|[(vi(un8Aƫ˼rAN2Ţs>nS {*FC>boW'9P芤P9Ҟg_P, dWUn`3u0Y4VQ%` jȅQBmS<t5(&c?ڨd_kB(G܂OhӠ>Lp}&n4vAA jO.}R2]W)\X@-}y TPhk# Cp\#+Пf r]J}ի| &6 0ܸx|5jxLFvNB8 Zg\@܋t)#R*[h-,T92>SpMA&U1li!Take-(@gx`f6j/3,E̤"UǪ). _1") v8+ n#tLVe (3srK0,3D@0.]}!9EUV[2YSփG2q^|] a$}q0W x 0s *b$X+Au:K.)|Q h?bϨ44ATf>(#xR K%$W]@sRʌD=r*[w ܕBtGA08YT~6zjlR:ǩy~P/#(T Ty]v?GqV|)z7T9"8L7+`kd+A;$e{ :vzv`M'\u-OV;8 EU%FGGHX?tsQ%t;j1{:%?{ o=R&j~Maǵ~O}m97/CYVQ.𨴧֎_wq0ԸLG>vu2.H3gy}Q_me3b}qfO; ϜcHߌm;#~a+.U``^n 6g;ꃐ[0U9T2Y;d!^^n':rzkGPWuAI5tCU5'Nj,\I>٨Cdx^ss͕K݆˦uV 8}zwK*"My1BĊVb.3\Zẓtܒ'eX ̆=f4p>H!+ UVN¸ML>XhʸkM0X-2vC#Sʐ #:qXBT3Mr{;c}2[j2 cB΂c !^eE';P?_7v| ~`.QD j>֠4c,ʘķ:Dvm%g( 3HXQ.Ŗ"gz&.\ڞ!Oxtwm]uF@VM 1TA!i=YwutZԅKFqƈaOWbGAsb;*:sf "'C!p~"S꣮H}͵.1 z5)ʮءXY,vن%t+W-qCD}ȴ#fEo \#[lt5s/=2`?\_)a:M [;3D뙨PNA`.F+afLe8eut YgǬa<.nP_ny8CDoE,hn+HFT=<ܫ-'0]۱`Kr]vʟ'emۛ:wXMYc3[mƷ&O\4)R,y 4O_1ތ~W`QrٴvE[,QXtp>pt :,\5?4q }n1O@3,u{5Xq 7aPVMӆsD?;-kڄCDQIdC%FS/̫s8\vyfck@z/5":soʏ]梸|$&he+CB\}<<b8B.M:"ESuHˊ'鍾7mŸNyi9ى_g!ff!P-xVUV[x,̡>xwM8.oo i& qIFe܆'B񓶊u >hQ1*vgd .0Hm:rIN/ZȤwuOqJj,7X_Ww g|ʏa~ }z"}Mu #?BXW= &KOX+zn J ʬJT|3F% U TϹhϗ9iKq>7ڢlz>Vu\G|($p1`8-ҺB{Mq` Q1ʝ|pXp ~"_{\b8jQK̢/#7\PY`%vדdFYWnգu5C Z,U15\a0㡘j} 0nz m᐀DsBpT_*tWĭ ·2HOi)%GoNcdgyQZAOd'2!c`+{qc-yirUr CԌ*ئ\nƷMZp6yb.i}_XUUy|%'Q>yǿb0V$fvd)#|l[f/Nr95ʹ1~=ȍ tjhtNlk&ߴ_[,xiZyaf0Z$҃}ԤԤܛpܙ I_wOlǢiW|:,;9_ 2:rrՔ9-wBp璌7QFgGhJ.`oQUi렚`}FYHk,1B!TJvI]OFq醅 !p W#k=S%w`b̕8aYE;ѝ ܜQIlCfnu +~^[砈c0ĪUtInCue.H)4t$z $P7^ p.a&7ns<߀`%Wdǜ4ET0h؁8Tc9 B7@7L{)#G}h,qmXZ븙mMg`{zr[+2@. g)\k"RHk9W^;| _4+~LDIqցYCM )a44;&|Z꥞nS_Ik7 AWXzojoߐbӾ#fN#0lVbregv;!~ K/C^"ve z&MB} F )~ϵt~6K^0eQ>l~C0U uꠀ?9˱KjAҥecO%b+X٭^iv6r}qC?==vH\^sƸ48du;GNX+\:lgUo&J^Y[V~ƘiƲ.S#)7X[ {#f +~0{Д+z}^3* ޠ!08b3_ZBWL p 8vO/\yķ۫O8ϱp,ֱk,V ZdN@71_:䦰@)ȍ47.4&!US}I@Lx@FxHg̡[rCʣ :,ԋY * #\a:,xM>*IY`Amb5/vD#to%a. `3OPNƟ\{?15^S /7yDNJrQ짍p\[kQV-猸qQEgEEt8c h7P?*`K(M-G)ɻ`3xLSبE9VPC,pD|ntޡ j>+h<`NrǡGWsdlw\Gy(^nGus`ߢx/%t_=?nθioy#fn +NXmt ΕU50JȎ 6PGNl!,ԅd5r]vK _1pCfZ\mcEh;߼O.аK}dǕ]UHR~7Pˎ[W͌b`8|jx+/5q\mZ?gr{{R+\+z_346ďXILȥ>T XG‰ȈE#wU us`j&O`usCꦫ51[*R6IF /t J^d1֎bwN-n%?hgMQ?oBQ]$BN*VzGQY>h[%ZjPZm'3_RF1fHߏqzW(!wR_J cς'REj*)Kr|^Yw-2p~ uxPZ N.bQL +h prp~RJp3m{6F,߃k_/]Z]] OHr[4 Vzh-R*O,G4]8aj/^?~ID*Ǫ;-k뽚rۭ\]Dα#3STMG9^U97c$aU ܜ:6зC,&˱ 7h2H!\jCܽvg|q\]N'ه$z첞cy~èJ'>ʿ^#m|yVT( Ҏ&n0&c+%trt,Vm<p((D7ݠ"Noћ8~#Pgx U)N$(}[BFC)W|#ixޭsvw,dEr~)<`%m|Ydp1jF],&rxȣ!F{z, bG@v !+3x_D,.~Wp\> Ns#()qPgC] *sXd.ϙx?6L b1V;@^yKu `k}A}YlvE|HYMau)c7 )4BĻ1PTQj9E/! @3{Ded ?#q؅wQI plYO؁OX,⓸h" Q[^Ֆw`]ZH`?ZhuN'.2fЄbSu6u*Akl syҼf.2:G.ݢNf 3q¸!ŚB_+%GͲ+sL#fO%azQЗ*@]v~ t.AuX{VVSMJ9sg'RK+ړ&US`/d6WE}6m/哖r^Qn-ssS+5QU1q1 }h")?⭣]36M1>lb0EK~,0Cn}M/qKq{ uNKhԷʳ6ފiC|c쬞8QN Y>|vgfs[6j> 4=,BK76"JdKŴ^¸) BG9CF]@[E]0hx'[8GS)up9XK$D/Ea4:>SeZ\W 䱟JKjv*C]J@/hX#Bv92VhgIZ"9$ar7uwJZ1<֕x% ^J! *x#?~dNxGsԞf25AI 7u1$ƙh#G?6<p?o0?:MF~>.Z(SnL!՚9Ҏl\yʏq\YڪcMTuMh- A;l!֜nr;.Q/sld̅qcyxH+9l&>@r 8s\Zx ja.n^_' aEu"JpNA!Nd\pXs= Eqp:Jk'~p3KXnA9Dex4<̰"/pR)b^ǒAmGA|nq؏5,j8BM8E7 z&6âDQyLomq=7<Uq^U]V߆K#Q4ȍ|4_^M9n0|]B76=frtXV\O=v/wL7gTB3 ܹ.\Rdpr픖/ϊy/3i~PYcLl :ױ!Nwq>|XT'm}c5*?쁹H^u :&XKa{Xf[5OZƗ)Eqpn-64gCOGƔ`sr;\2PYp)խ(Ñ+$͍f`1KE8@51>.›?A`BKL}`57f`-~r07BS3E&r%a֟ي@giVVyHA7R.~ 0Xqkcp8VA`Z#;YXf(.р_W 'WllgAjhh?$L'+:XD1KUQMWy|ĉT_^:4CEI Ki=j3aKPWq4=iaą ]ѐQnK=ȡBw& |OA x @{c~زNFx'zs';VU,p7Ƴ>8Ϳ0/.gBAIl lPԌfD}E 'Pj}wZJL[c.` {ڻ\=vٍ QNnY0|`( Z_%M&t@Qz 6*H]xR5P煖YSꆖk$*ISQFs:oO sbv <9QuQeiRq-Fۊ ZNm(F_p6&#Eg1]Uf/atx|9@40$b V X=Q9)#(=GrQHrLsQA \3,i9SR6xBb?mP.QW(1Z@?>}VZOg]fhʹT\ESӂ%mF=%ei<ZVbf _8qғ͛(e{P\Omg}o RTH)O3ſwіb> pxÔ9LK-S3oܗ;ؙgYOD9 0`0hDM\pFK~b1mZ=QTl|nY'9/Fl}fV+Ҙ9H J]盪!¼| `.w`@ChĊvy Yq;5P#y:/YeK!<Ch+DqMQ_T`@Z#n`-{Ki֡:0_nC^.T\:ف`=?U]2{Ck9WjAW8'QO*|~'PlQCa<*C}qPk'ZPV2PGU /`0F/d؉L om <^( rGNH't!f:J:r>IK W3x f^Π~pAVN^|$ +4c - 8A"VV{i Z-`0J ~s}ݥֱjr^OohwCKY.nR/s3@2izq:u~gM-X{-2آUVgc)O<NNw~-'ޘN^1J1W?5Zl !$(W1oaATQk*CKԣG헵f#W TSB8j#pOj>'j):#a~4[b EkpCUS0.GHg=9{enoBeYY]5,͝b ڵ.2 5åSŃKFb:. E o *s,/ON?$x̩D(#޾ހ􃮻h#1(DL,*M7-z5M TZ9ֳ"K?މ;HhZueu/6a0Rygߌf3z?>2KPwqz>=흇Rn$gQՇ{/&P+b>Q4'>і%bo?-F7`/iDkvVo.[kng g* uX|˧;pt5AbKx S c"ҵ["qB;)T'1YYenj)|! u?5'Z-bdQ7=4쒐7;գh9](`2T1xXf'gX|$WU;b'2K e .2> - CAnsqz!5gx6VU90AtR m_eV@ʯs>.lj?]`?y\Is{="\Z#st~ ȓ2Eq 0nϷa(6mUޡ(lnJZdKS/%J GZ뗴VdC;gf 9Fl"e>Mu  - CoHsq:+n;J$j' /mr)vʾnQ-=icv>խHXJtm6nV3x8)ְW{arмb1b8\_oݯ2"ٲ0\sQr"yy)ju/z+>rOx"1ߥD{^5œ7M֙ n,YXWq6jg NAI>O}Vy3U* {S6@u]-t^Sz0Pkڈwu@4. r ZcUʡ`&dQy3^kv1gpbFZ/!Z+85`N5xuOW棕r1ZB@^xvAf1`0pc>j!omV:([h xʩ5L`h|D(t꩹WpvIe-/I?PׄÏLL,6>&[4zA]c1n NT9 b ĦAi"71>5}ؖ =p]>M_5a~'lXB2 QsFW|9#>mdv5(({҃,P qL`gK m8Yl;x9 4j A nrEDWptipH5bAgQUCqBr Ou[KD׿AXK) u:+a0 oC18'6AxU f W)2;V5/z8?EJZY/onXͬa2}n>5}wgr;umsus.uRhLoZ6@ &@1+QaW4f6Q v0Eeڋpu8 vt2ky8ybTP?|^[ohqZ<Ͳ/Vd?AFcmK(uûS7N8Op6ɛGZ-mܐ[`6];RKeUC2湖x yze[lj\]H{̀OwY‰2Ѳ7ȟz^ޗhE2~ 2  R~:/gVJw߶<_7U]-kAЊx1_IXo+^UD+q u,(BD RA-Dv(#ҽ(uxjp (UP=#= KU` ŧ`+εyB7 ^VƲ/]ʁ,%CTnxJ PFky1H\.O^P4Է[$U3sxzgOSg5z!4cְx pg2j&SDh8>X|<'y,ƐOpGZeQC+4] k9Vjc{'?p>Xz͕*.s &"HU-i'E YA?08]fHVP ݘd$0ja5 ag$F (/5,3TFBNjȡ^>OoaFuwas-G"S./De-nW9R+S^Oe.4[qbU 4rT\PsՐPB/j qi4QW-⒜'eDҺP{~8Px/#Zt_A[=s`QSn2fx!i-5+E\[aT vAl\B;å E`zϝp6g.l-*C'UaNb*7!|_T]Ɠ!Ca'S QJŵZ}E#si,u8ç1{v8|{?2'ztKIުbRz&z~o+8=v[>X22HCTTI!UAm :"[f/A11}"p0 [#zq+aҽ \zo8" @oLLOFMA'ᡧ24,썽M^G,: n+ /^p*/x|T &-9',YF389A ;[ȁ}*ל+2Pm10q4Wq;QB 8o9OV-,a(Za;kչ0*K2e!6ǹP?U"uOC25fPh"WB?$57@~줚`bX4IU)VjZf9!l]iYggF)J} )Z :)]]8QN8|ּ.F<59 Aw?0^ 6sׇXqEa44@qt)QpZLRτW6x2T=N` | i-,XEP3}<%kxPc]X7 jf55,>7Y .֡xZ$[+Z-Dao.gL洹U<=5},Mkm[PH$jg u-2m|ODюԃZ>XD'u[}8㞚_k( _[͞lXv/htlXmSUl;e!l^Xhn(-XV~qtuq2j'-޿ʈapgC(bO WoaGk22ɭ|A0f)-%1BD[+WtOo9u罻N 9<C) 1 0p,oUCy$=$R! hIj(h-ii9ZMrMm moiib 5ڎO}i6R)ݸE ȃ %WpNG] ۴*n~=p j+agoYZ*N숭Fn`#PB(j%D'`i5QED_ 4FRy4@uNK|]u;5EgߧuMjgiM|̅VW {EܩD1,crF}9RU\)O4a|EXj3*O-UW.ˣ3Te^Z:'*}(tWReT+-%PW^‡̩*r~HͱWy_pu*,JT+{h: tfixV^x.~`<rQn,|@-`9PNJ,xz\GOD0j e(3q^a7Wꝧ0)3|=7*r?T  rS' USˁb*/ 6|^. NՂ 趈u@pv7nP*_,„1+?. o2Cjǚd"{Srx^5P SS LI50!pߠ5>EtpVt@^be YK!O}VzƭyZ!s ~P6h `?nGq$>R0nrcn\\uy!5P q>>rNJTcJla#ʊI"1mr+GRƂF!\uh aq_ΞFIJڱQޑOxԗQؾïRngt*Kyiy_nkIqI7_{z,5\M󾒇`260*r J* 5 _$c 3gׄՙ2&_wWj]>ka& lu:eny`C̈́`NS5RþI_;kʦG,!]kolϋ[Ƞ֢$Ga2gN56rCӶ|]h!D3ߡv3HIqki7^%uRuo ®Fj-E뢐hF\;Aa[ktb%nXoc?-ZA)&k~) 'T B,~捚# `9H5?Ëp ZbbvWdPv'eb1l^,K8/a<'TNP;gf paAi0\]%꛸O0 P7NjڪòIu!;=H%VN+zp菉Z+QMS߸ep86tu0L%*-Re9/^'0 <(kLU j/>  v of]ц2hb/lR]oN"œpt'|V)X~ #j8UXǒ^@;,A1+2gbe07RKE1ae~Wp3k)T(W&؈3La,+`Oy k,l#U$8# wc,E2+Yar̐PK:N΀U@\L4>loIAnRN =oO`/9ԑǙ4'&#Ya&DE q98%#r0^On+jl֊U-L}^Y9r6YC\ k:M>{ _9Jj/%ɌOk6]cm?VW-G cy)>tTQzNjU!@qz)8 pcGlM i ~p ` \L@:xRT ^rA!ᱜ_yaTuB:08+x ]HL?c>O8k u ֧*}^)шxEz/k}jY:Um4H,%uRfri˧?2GP3[3YyǛ]&`0nZj%nC[NoJE[c]oYjjxN5 bEP6f&?lg%ZsurRqvGOO|ړ0$5Ce({_-g9|5d aVz˙.eަS'/eOkvX4fj8RK!i2-f10 >:LW>NWlܑ~efGed&X5é׾=>P(E'ֆֲ*ZBq gɠq|qUv裺r5ل?q{zkphKGR /Uw]œgO=ED< _ig9.-Н@ nU0Ou*@gx=N`Mw IWTU0:$kQ#K[wp*p?8a ;3gW(b2T]CyJ9D d P='b~xq'B?20mp:D )6?؄3xE~9CŸP~lf (Ko0s}34u @#jux $i˰6d7Zʱ! Lf!'Ԅ\S~V}/b/Q"j4 0J8O|b`2ܣvPSTtK(]aC|{+Hh RÙ bS >j4 ǜP6*-_PwW͟T ^B Z|a\]\gv"_I8yp2$XU 7UG n&+P}9^i30|FtYYK*7 1C$2c| ])pQJmJ D0/1'22kr'm;۰J[ԣ~kXup]!T[K 7rirBf>9\s5RH44j`]7ʯop}k*NH=>@)!sRuP? Q]g_2XmV!czgC^MI4Pm ׺c V14>9NŒa01HE y\G7™8u`EnqM (K38M o3܋CF5->_]4=GZxmy}^qkY$͑0R2u!VYkJ'dQIO_ -ъ8'a^R0!cO`߮>ISܷwFtG?wp{5,9twfזP ]d*vJRTYkʉk19r~arM^C-|Д>VFqggty-gR@Z-6m=DKeBy7W c-ۭNm r 87=M2:._4˶8K^ЏduѰqm 2_%Lbg$E2Zq2嵌וWKԔCaEj|?|`(ɟ%\J 'cAAjgSTDD-f|WԠt Z%Xv&vSA? _/U5ST'GBu9[\J&Wt~z%<?b$Na,J-p:pO<k\K;}M!EFO-vj+l5xk-|ҡJ\hڋ Y 3z7r-뵚+)r#֎*(ji(nn`^g74n=w ?!ٜ:|0{r TZM]%x}Zo~,rq%**OmP]f#~pja j2N$詏_sGdw^&Gy!砂8`V¹8G5LSMp^1XT} <l $c!]z0=RZ|_i}Ҝ][h7@s a;7kYs9ћ\r;XfSŵy8E+lTo褈er12!D#Ϧoo) Co>F+"|-ɓUV F`]ʒ4vQKaWϨh3Wb+d|9]DcY?攟F+bLk"µVi4M̬+1a_ztȡ(`5ٍ_y4&6 ` rT^\9'd?&4J&~#rMib +%NLp47 a|=uY-ZN *Y9cI0sd [ÀbL57/|JS|ɐZ<_Xŋj/P#vP +=!iA8D% ޥ+{&P'\Ep2PE9 7]> ;`5] g&jh(`?`NG76J5ヨ.ka0=xKc KxJPQTeq lzsܔx c<":'>{8( gr&\$Rj˓aeۼ \kx.-`]W'dr •Yn̗!\mǪtCT9g(+]%OWU!ɳ;Y UK=..#Bij S NQ3ƭB% x0d疘2\]b.ܤF 7a:g0N-p 0@(Z+fcKm@=+"~To޴-90PsΆ;Bx/`u+=}/eż,2APUC S*w$ꯃO0?s3:%sqr"K֍xgxHC@5 wVx -`V+! xv=|&TX;ԀPJ?=3 |XREW#ʙ}u|UKAw >$un|:X[[ %M4C M*z_a&s&kc!k\_Qm*耟4?Z*s(C ˏİ#ĮcP]i y#[b[IO3 ; +Յ `]I#&وa4"LM T.B x3x? \'5Ԏލuh$/f߳|&TS%έWozK{O:Sm}cT]373G1vl 3eeW gu&dk;4?!iނ|&Yaί>Y"CI Ue|'qE]{VWV@+ZRf;މ 262%S񼥏V.g F߻HESN#>,óaܘnC/qnp(A:;tS[^>4 { O(&L}%%[鉆̀W ]=ERNtF?E̓ܒ:6NV6 Wp9PI1w)sԔg ސ͹T  A  LY6g70>4"u>$uzgq ̯|{yJP?I?TNbo?UV`CH6Dh E9z\EfB3r>2YPn(ftWBW+6H4<%_ԃ*p\1 ՏYPІ+i$>Q6 XU%u`V?6::UO\3`5a~sXFUĕXFg 3e6{ZW\'~`vvp]o$' h?o/.&U0ϙ 7%8*3 s.exBeYU-P_ђaf^VYbj}̓1pcj,Y;*Ц鶼_Pz^dO%cY,2..w[vRc%ܟ]_ L}qM># [3܁/=MK;<s?:.~3z&ϩ!.ЁrSL)iho˰r+&_Sy=ue;cQ v䴆ҾV$D > )Wh!vw`|MSNpn!ȿ3qbn0m_ܞ,8W6Αk :k==;@lAET1>aZsl/;p~B^`=͇y,B78LO:Pp:a?F%`ꂷx6!АC4$w)N"@qYUGڪ3Gރ8 [Q;r]EAM2zϡ2T)X }Uņt…)N2UV(aȋ/+2Rb4RZc[M8S, R}5h-*`ϠZehD=6 `yS]DS5r'{!U|8Ǽ"RIj(8_*N{VQG ;r 7Zᢦhf~]u͚"&^+dh<#U6g'vAܚRq(`2wv6/xr!5R\ߪ=~‡E8 )HMkTjL}j-v.dEDd+b*x[ZKaNRSb ~2pxjtX=7~r询*8$Gl[ۗt×lvqq` IDATOPs~ 5_a<36|5AJPnhc/B+-3?‘|8ٸ z|fg넳VVOv^sE+#,o;\ghy/dvv6h.8je5uʌC9՛ayZoύn #aȥ{MyO]8ׄ@Ӧˢ: ލPB|"Ѐ2,0W@huxF:aGVfP%l_&tW-n$뒶<)m}5Nh#iSSdzB$:F>Υp8W9+@W[J}.Da{>Z2#_a'` ^.lgj? i<_&R~NňiM9ZTPe/bxH92TޗeZA-ߨ5 g zT rh$_t]܆.P`yQb!8ߩr;l'<\%!<[s0 a,a+[NipKm0BV 图"yk O4mo ZcQ6< A04sʡ.AnY bp~\ѿBNu2 vcn܌'qC4^YE̍zn)\p4RlHW!Ɨ~'<؜&i2ч#)Q/*,t9E!hN))e+S] XQ' b-l^%A%K3l[-Ȏl` d>@N&*BT=m8p0EcK(I?slZ}n[A1EtFHh,^x:L+DcaNې&pL Q`^WpӰ1kVhw<qWlWB~ŶXܞ` #%Η 豄<~#﹜swKp$7C ʼjQ-S L~;f %6K]> p^]v ='g:h9u~BO<0j.PnUC=tnX[,pOrmqކj9΀WHRWҊ2Edчb;gc G{@qeZL0)~׆_=K@Hv4r5`l$y~VV50s }_Acko}:"h~V([fS9͊js/}l8Kgx/7: cdMQ'jD5.\FYGPqZV}3_ ҾzCqP8!.PggT̋l>qgV6Ox8UO wf ,0E%?.ׅ}R$@i,g,vVϤߛ{e\IO*| ~Q&NК'a7KES7#B9}B1Yhrs, UPN^j5߹,wW _izN8XڧҜ-5!Sfj0o*yDŽ/4,Qݕ#"?.Ӻ|HU觏AI0F=@((Y˹FR j?8tc͵S4wi~,*AUy'| 2+.psnXk)e8`pE`^u"4dܼI=ROdQS+s޳Ws}נqV5ĈBPDPW ?& Qq < TIՠ4nxbud]hӽTkW#^%8yJ6%T`m[ySdX1V~3[ސA#%O7e{%\-%Jn]8K~hy6(Nx'j8HѸ_քp^q%QAGօm0/majuPpV{TiPw؜C ȩC<M#yZOeW$n(Ž"'nVuQeI* i*,fW ;f( ["NޚZ{ty؟Wnq° \5d.m9hj d(ny)zN T kLTRUgE[U0DQ*a`6OLot`>$#6b/~.:BO\m0Bx|(!ajVhaO!dt{ uNI/X8x!%an~9S.ư7ԅr.E|KnEAR{cM]q i0jy~S >C$b5Ye25y xơ<]xZq L***Tqx =+x/4c$Uq&n 8 h T;4 cǮNB,,ܒ A5=3Qh9v֏YUxV:u)ARFFZ̻}G|3s1de|0F1{Cߏwv]j#cNnikz2gNi;Jfa9 %Q9M-c'+zm>N55ǼΘdLevpw69`7Guaki/XW&%u׷>QZאp5GCe l(=P^=6s?}\JwjfQ9D< 3\܃~{C7 6ڹ%J*mMR1>geEZ#ms=rI)%^hf.p^෣irXfA絕xGɵ>/8C@5h\W_~o8 kUϯMW$eB^2wvJW셳pax@Y b"'|ӌkj'?Q)n*,H5YAAǕ-߭m .ٖaynIcS'tIҭ\HTS#b>hG7Wa$ːQ<{T'؉mmaDl,Ga/kAO`Ǫ%ҪauܰMN ( &"CI!s('%(5{YCnD%y0ԁ\KPh T4xzc>ă@B]\8xXAG|+t!?j#&P ŷ^S_i5Zxah8 UQŢ '~]0_:Xg9p&9DUPRxp!foB'{ Z ǪSDvJA#Ɠ CaZAUh숳EY*=GypH&H;UtQ (2n&aCQ \0@5C4ުTI|oÅT7<P HŚ/OͰYճ楸 '5T^N8ccy^Sn"Nrh,3ςeq8y\cNJߚWeyrNius+m,n;gSP-vϱ |[S+ XA.eH[+k7l liަ"إnURI 3e` Q~jvfYu "lm}Ox>WYl<X<4Έ;R 7oiluܵ{L󱻠FcC[ =p G k\H+C_!_nPe{=3KF߅yy(lm93Hm^6][ͥx%aiRF_.'ݟ3-wT U=agH`Iiӿ5f-cZ_VJjl}8Xh*̇*/b嗱$Kȗ`hס-YTV;[p(n@EUWU}kQ8ymّCňE^gB$@-XI LE=̮`å_B9O,,ڨ7\+P}<#`(S$LS@&SU!Bbo/0jAZT ?a-h 4UJhy>~8u vx;mݐU q%v,r!;͇f9fe0=|[ZS=6(IFf~.ZIf?+7rt{=Y٭,V{DE+,ķW9㵯!ߩ)hB/4nЎh\ ȁa2Ɓ%1Ixp.(up΀:Q^jg!~Ca7> l 9_bwwk]X5XAkoVP$Z* 띛>w:OΒz՟gYř}g/dP ?1t!!l?]c}G=iɷV'D߫In;/Ӽ(#;1tBEqxoFwS5 G96PP<1YFx@ڪ~]eZ*T| xp2u9dJ=|T}| ZLߴ(0K,:=w oewFʌ@8,͡.f^\Z. :k@N~-Z59f2h<gzQh ` hD=8˝ .w1<^hJh(qTAįC $\׀C}՛gMliT~ 4И幝|[?Z碜E,Rɽ(OPxn)_vP'>2Nc5x_xX[!FjGvl-9?YSTxe@=<"p|ku )6(! gHVVp$Vüp5՝ӐI8 x BUYTf3GsxEY6hԀ Kh nVE0_\<SKʎsJybeCoG2|e2ORFUcwPQ-j$}-개*bM i9G'&X&fv1x#DjF p_'Q/G;wzIhe6q{(EsK'#mQ4S?ey&#j>բ"{bǹ8t.vV;MEwaW4wowU4YWȠ;Cϴ5>_~9]#5s1Ef:ܤ" қB!+ ;iXT8d|2zIEYO> 8{@=Akk/pKLrX7uݯ)S&z{0JN# 2H<L{)hX4'\D ZNB'P.X(f]1jVLK Ʈ:\#v ؋/i.Bo.ΔX9CV懒b.lc u,+B Gth)w34I찕r X,̻})QkEg#p>(88 P 8Uܶ QjEJ삹 t W!KH.9<,y\2xzA?/ p+8 <>޸ 檴B:6l pL\1մRZd <%?ƾ,zbw5>ZiFytz>;͛)둯\ewETn8lYh^RìaŨhl͓\xJ-mny~6-By6^//cdJCTOKy8Ѷ8s#f걺I݅QfY+/j < +VKdF)Gg3"d==J؟#2%m5]4+ly>QAM@KT zQQJqygH] L4^kNU'ƯEAުŐGHh@!Tթ6St\>@6!B <UB7g4|UCUBbpbUu fgD^?j  uX& _PcO2YVf%UGmVU1xt+0ZPs-a ;c LJ1q `v\"R;%B8K>$Xh5Zu5_HQ=a*zc5@Ǘvjsi p* wUHAH6&8 XNPCQ;d:#`#G\7܀SI"}ОPTu(~̣|Gi/!.j4 3p_:8a.cO|bZ*c9r{ L'þ(*My%guS.I7k1Pz1.)0|!IZ[%YOW}_[r*Xbڣ瞸U'pm5^#Zcs'q w8MtCXsf܂vU.JA m SO)5$@(ckQY.K V}N9H(yA#$j'm*;,ϸ4^cT CXp Ug8`j|XGj+)dXʱf X+}O+_D^0]jl [wՠ1Y{  \  ]xeƦ*?FY9}14 ['3s[Y3Kjs܋0\oyw9ζzjJO7_d՗T)ZCUjgL{9#e-(+/<|9W[}ʏLhq[cuV;l=r-OSmz-:h#IB*')>Xc1!iwh0u:gZ6Q=D>)[7W0 *ꉸ,<8!v¸v.\CYc\UarS+`,’\h9+-~Ja7H%;4.\wq Œ -_2T8&zE<72Yc0Ep$. e5.b,·x 킋FUa ^燼*]\A1K/X͡, c{ p:tn Hbrc\*[>B~畝O. k4\$+<@ֈQO<|1]d _|XP崑iݵrOϭ8P9rf֟0|d5,+x ' `&<jJ-r^8T*H [Zq#bT֔.bo^:o5Rmq*Z6uQӞ~:ޅ!wWeED +U|HMg]mT4^Zj*XkN7k+q-Z4UL/،UB5ȅ0 ?"dZ(x + ϡoeKmGxB^5V}hz/Oxr",&t@Vw!C_>\[qեC3]XFcQisu˶΂[.&ʡ5{q > |$5q OqŪ&r>M7]6l QO +?FFA eWݠ%d]<=<:輌ud.0[NM^׆dZ)Z8PJ`-R3tAml) Q(L ̆뱶 "HzD^e@̂" 7?~ӸNɱb$L5)c[30M"/[\˪*X:hCp'[h ù r"ࣼZCA~.: Fk7O8 ߨlP@ Eo9s ԕ8ʪIxx/fM$4( CnDјEݡ4Yn8p#7 -=p^.PNa,7=_Kສ0vVʍ%|9&E:@hk+ק'0m،Y>s#Wa1v*l}QFWsyB;@+6or!7Bn/3u?2x%|w(<ig* ڡUrEjCUL-wmc8s3l2XX]X\L\R=Y%|A*C̮RfS{k.~;ښǂ:JZo.V'lk->dcz0Hwݼ-Vs${M8jЃc|GPsMC}X7ڥH+ʩ2pJ! jB^GM0q74vP,86EۨNCaj YlG4( ^<ťjZПgCبު D~0֚#}45hմlh9:6=㝳~hk 'tʼ)ϔDϺ'Ȧyy49 #ߙiؖAX%4C~BT:|  (pj]sL-V"rA֛"ͫOu&je gs~\e46r,t^ÛAX{9عk.Gh8X#?~6둮2|"Y{T16Wmg]Mx{[Ɣ$G]>rJy&ih=VuVzET?j-?I|Md[7,ґ+Z^5pfByFDS1I{U0|+} rK$n ?tL/BaUY+vEbGNFI < cQo|AUDiATSPY [lx #aYGy @e!c__.C0fՐߍr|/B7NzJ>^~g < LU#\T5T9!/b)oxPA. W9ȼ `DP (h|ZfK.q4_e 7#F)| x\q2_C]Aa<6b.f-8~l_8k4bZg9y47CLRq Jw\)RW\KPT0[PzrU+ U!.3/&J.\"ުHHWUS1i?4;l0An 2NTj 6 | j[E5܈1.Bnn.ɪ>_&y Od7WCtV+[28AW8 ,:hߒ{ 8j{c.U \H︹:̡71GBiũ8-$n{8;Pa1tn@*werGEX5Fq:Vx prkD.j5YR;$PVM "gq`5Qw_M0 ߹"N߰Youv` I`ig)<oD2l0׌e꓈c/VǠ<]FA<]Qw,’]Q~y؆so5FF8gEbR[vLn/GM[}U IDATjU 2in3VW=ϨmhYLwuM|#?C!Y.\H=2ch0SiUKy8-6Pnꡞa 91SS\kj:ű. <4{DaQո*T]= +nFXreŻ4c͏*FAN&"_>b3HʛC}̹c8ck}٧ej&Xs\5=qdb)ތi>L~Fmj,!QY,G\opfVOlMLt1^򩌿ͮcu>7tz?.+lU]Mz4IbgCRC n#ke}$#VkmXCPŨ߼n؆G)P̂GU=yPF^q(= ZO5|́Ijkc;Zj/R];!o ,#&\l #B1P]xרyA7 )FQT p꽬~卌8,ښTGAswzg0_dk"eiwrBu8xXG$b?;?W>f)hd1X+,Ϊh&[J2{[.k?MuZVX('PrB0?Q70z^7,(-p>`ݠ0BA31V* 0W&sLUU-x'ΦְDSq cP 3)C ꂚsQǑARa\ :w5gp)4AI[puZE&>~0ZY4rCԋhq'7A=i]4^MpG`P#NM ~%w"Xo0x6zj.'0(sQY`7U!n/a/g!HePBgh'??eB?lpkH*# dcȀXi9XP.{.r[mhR|MPLU̇|dnۯ*OcVyJ"ˌ/#?v[!%}3/%]Hޝ*FHgޜ_|̽1[1z(7ך&_XP0"G?/ËGj%ϦgFm"Z[7̢Rc}SΦ_˘l]v/Șʙ2/}ti}h)i}dUY|; Z3%ှTFJ1T$ya8ZT9PRFhOO2rvx8k?<,Wsqlˣ'\}i0*'mk\-E^.OГACB [N#Ao_`14hق]*[,9CwqWRĨ4go\zqgKg=c3ccq[-'t1EekV51\w˺R.]X iӆLe%2Qd0F=D H3Dk؀pUk^itwz| Azxګθk &zbZy(,ZY g7-@CVRP2eΡF&3դ'2'ε\Ц믩/Q\q9T-,0âЊjn0 ꈟd;YjJUniV[u. zl%x@ja>)U] Ya?5JP> _a-RR3YƃJ lP$B(:0'BXCPzOCctCO8WT |SDSu 6p/ءV+W9Jwh}@Ȣ<[x. "8ED/E~ݵ"i?H#f NH:=!9:Ny#qM,R8 C8w>>jJ`WE߬*GjW_(ϟ8R.ꆿT w# NCC6 m(n(@8à1#c' QM\?aU /`0l ]*M7OHEHrPXI8RS >t.h WeO@u#,-\4f%M`_m۔,V' Q9YW/CSK:"S~O)9ݵ|,T>w.4Eu8Ӣբx:pIp _"wX iPgI<"=b=V>bs k \K@37E o7$'q%8xIy~1a5sq1^LatDOj۴6]J?K:zzSM=.#;%Bf+M U-luzRdoˌJ;lXOFG(diն_ET_/AUQ <^2VBv]}[h59^6E?h-uKkqlm\Yז+i =_- [#'mTԃ|nV+Y>Gf?!oZf~CՎx> j4{+gdz53絗yR3,g>^Q jmU+uحٓX[L@j;9;3}x;{%7lz/-²$/Ὸ0I%9a=P JA%f/_@{XNekDo S-i} G褊Ű-lF}! -űr;poG}A*1f;NyR]9!A;ET ?Z}aUSrxnfVIy3薒e08+}}M|}y uEMz¯M@AEGS8(zQuKV dnҖW΅Xm@#yauQP<-h5|{<=xS]R-4V- V'އFx&ZgӟJUQTĺ`z+!rTN܈e!P =q"-dht)'x)X>w.l1VKWSd*zg0 \ qTZ>]Ŀ>Crjbbee%|i;J _Xbߣwrw} x^4 ``a_p 3 {sl]a~NJòX,KQcPO_8 S͍[>ae./Br -l fWߵT/2"yp_H*fݹW%T# ^8Fy?+\A1Ro}?L?̓gri,-#-ɒ$ë0\zirk/i鰶xm64 K?%zS(/8;WlCB?c Bu Ld'Ғe 2&ôT8> XHvXLjRv\QZ4זQ vB"{ -17i )@Gw:.0.ІA/ e_hzNH{Ypd/!YR++MK_>)ײX/YH윇'}*7t!'twy6hi7C >9Tmm\]667lͶiish,w| bxJ&*RRP-=OA%hs"=D6d1ET>s|OW:YB>:+1$qK|l(9t8W8Q\I0n4UZO\]Mt1 Ak1QDyԥ0S_i ন-s…4mq(#u>ޯo#V$Fqs^Bn97QwB5T煢"Ex^`?[#Ɖ0Dљq$rXL/6*R4U)X,E?jx10Z%>c朕S5L[Mp`\%#+Vz{/+pܧ<A/eD/A%Q.G-rQ׿T{O̰_a%]S:a4"_Z#"d3r2F|5BÚoP6dT|Y~,VR1Gq5NSfΐ {/~ވ-9,bmC]#=o_]kog 6T}uv-|~jz-CjK_Cz #"E›\H/Z>Pk ٴq8m(HUQgx>@U+rRk\3HB61xvEUPA|XI'8]EKm!#0psbunb,x.(,h΂z_df ?U,- |YN4U 97&U&-ԷW,dgNg1Xb˸ckoUw*sv K(/u0V_Xa>ABEUt}{&.$g d1`}0ñFzHurk:U=źgQUQ9<()3]2U5{`l_:J (,W8yq`߼lTVP: GS-Chu\0'Ք7Q 3ʨݽ}GC#.ra2 *bl"E ,x#22RHC&~T{J|e|o$6"{tSzN (F2`էh^ &F  >SI4D*UtwnIp[C4D14ۊH4@\ 4jx&%S/j}sC?3iYpN n#VcbuuM;{q%$}Ʀ鏥+}ʚ#U,gAGu'hG7tsh#wi53|^JMǑYD#ݨG<>UDڅ" `؁NF!XM,3ܑ_]qwNܔ5,chY*Rd>gXwWYRڠFj?TҨ*H6?{2*O(2pzUC?jp`EZc:~7JtXQ\6) d5 )lh')?wjJ^ rM>d 8PBX~!;RGqŒh 9)5<p:~ykgvW3F;e{#䁬vFIoT |k1xqߨ/ul׷cs]úznZޥԟ~$}Itߩ$gfw @"2c2!:x'qQ6h>'hgl:坃Vդ28Exaa!4UGEQ&hǧ<:: IDAT6b_zB'Vz6>c(Ο8 h6K|F UO :7sIm'k@Ee~b\q=K֧uGEb-<'[)Mxx8.-a5ݗI|Q^~O}*t3PTCf_DpU?X;߭rxI=8NNfbGF9Eσ7l4!3Κ+cC~I~jQӬ_&Uks5׌]ΗXaGY3UEa;2\&/*3q/KM 5ݨB xfbUTݠbD{4(=8}~p /⍋DQ mت)aL'끦46i4W=,qCu L3aw{?y!{n%:8E^7+;CR $ۓ'$}ǞBcBz.G0qXfkwTtI==>.bK.YӘ)l,sߥW'1;c*|<K~۞9ץNT ]r)ȸ,io`r?FJ^yNWHWwMQ9m?s謘!#;OKkh`/Fh$;CaYmM2"}RTc-񉿁;|() %/IA0[+2zK9-Mb% Nʓ|QwRt uQPMt>(V4f/ң2$oxO8Jy? 7:O96i j沇y:vDeu3=Vq 澺gHMhzMF.HJ$ ?0&[z_չГ/5HԢ*VoxϝSF[0BdpBx%k"P;poԕ/QYvv?9sI!OT.t,϶[z#9P+S5k譿`8 ]!u6命&g7wdsd{ .;zʀSXgn=WCXl~E]/.Y"П*p<;E t Sߣ\ 4+ܥh/76H~ MǨO"zMLEfGO9pna%&rx"bUU]W8[Ai/Pr;:Yz8foh-P= Jv:bD86hG9etS+)j^EkQG?i-6FGUtaM)r&5FrI\!Û9z5G\'0/b-B-ގy(FV";[хb zgN9%dGn( :k\TuZQ!ZwcqY=san[љDέ[b*ڡힾb^dJ4mgRO,Ւ"'0tSMYX7d4NuGnI}eaRnF-_#,q~AXboUȫ=!t(P1 Z+Ek2qO/u_Aweve٢3.[,Ϣfʒ5_نG )T. ^%2:ň&d|so=r8*9MQ6Z`}26V)NA墠{08::?oȝ,%9^ FԹ3t9G6@v[ό<y5zb-Jz ď|ӳ46mL.?u'^g%V.q_~p$YAi41JrYQA))md -bwE5OeA.u!'ζrl.gvQ>bȦꁂapO11{M4򚍱CW C!Omin,p]Snyڹ͸}2'kWIu}//kU6{Bz$gI7;Rt)Pkm=[tuuC_"ڸR4A|\]`gqX'fYB;AHt<ו;VQQ4Ѣ41f Y]m4"EBX "SC\[C—s<6aeAl[&t.J?S{80A.'`qaԉ򨅮 &)z뉸 "ܗ'&c/1A!hc}nY?5tO{pFU+)3XkDvy7nC]я-l؄ q[KR >ă$z4>yGGt)s5>BK< -zT_u_:DP:IG,p mO"!? KRN *N/x})3T"mMKMf[.C9QPW3zh_/%hMZ@ lS8j7/߷~~\ n MQ%MZ$UiSTK.K~,ct¦4ԏt8.jJ݉s}.QEBͧHh ]X7ϪMpW磊Gfl_a8_DYuUĠ9? Kpe=?J[ҤJiyx't3ψiR&$D;*¨&ad>ịEVExXz8$Bm31u Gp'TU%,/[FYFn3kv5v'I~w&_ͳ~VyyюAeBˇJDx"*el#5@61.v Kj#{?}bk{Ѝti#!,6OZj˰fjBh)st 5BHac\ȫcDnrBr] SEy絃ߋTy%ǪHE4|A;;J!EMH V>O i#.j.?g=Q7XDvTaۧx;ޞJiCU$3Dw0U4:kPuϫ9(rUt,>ϱBK/<]DsSD3#EPiuL"J,@GUE!P~q{1v @] ]RIԀC$:8?Q4Z)fUr ȗZ|R~N+ 1Yn-=о|iVuUGF\7(@m@W'(O ]4ؤD/zBUϜh1,i;%a4g4tyPoxĽ8%oTM:+r)zk/DUE8+48Ky[Od}Cj;E!dEy+E ^xxͣb既 7]]A39=8Ǫ8{4s aP93_uI9}Z UB_CDjэVBh"t_xiUk`LD+J\pK(/0jj;PU(R1}QecP6NcU 1ZR<ݎQ|CBZ~\٧ya{ F3- y V|/9RKНi77^+"2unc i'xJd[PEx>=(=b18)Q=I Uw9(x%% (ʉ$WeTeE{Hprɰyo2j0ڛybv L XAyX .[*FO*251;kHTu TA@݁SV4 K 9#r$)¯sr=EEAhnz#U@ ZE7x>ʧ#$z37 )ovJ~0*:zTG˨߼x(4 t30 z އ:4VgS"rOxIBa|%%N+ᣴP6 IDATEIq|{TzP7n E;HѸew<"Jc6@(qڮ[u^/[w|fF{S]ʦ8{22Vʤ֧YZר&a1Ix~&tbև֋!"R,_h0 $L<䲦ҥ2g3e訜X PGUw$\9!κJ)ApaFk(ho"TNVʋjՄH 5qIBBNN=pp&fcF(*ɑtWNFW95ýyq)!Klj3t-e8JzE )&Ȗw$ \{O%CfwZ]RZ7:*O,W9_u^!"G`D '?Iw\uRE!zaȆ]^ u8/gV3:!"=DYY^Ix%fc)&ȐyQw`=NATehzw)^XF=>Z˜u6Bz)ܺ.S/mb:N/10:IYђX#kr({۱"M! xIZT>ұy@*jTz;vSI"(WxGVlOb8uAz )Ȁ23} 0W |Tlb;Cvte#ש1 EPM4Sjiد C39Jˤ)^nO}Ɵc"# z Xꠟl#ϱRL6ʱHN%bhyjL Ov{I$qd\1cWU/O?GbF\b/=cwV=P4n+ Nv$ 5<'Epf~o]xd`H+s^U>Z[!'P#zl|+^zW+(.cЛЙA΅BVhcWXx #sY,ʭMX Wρ)Vek6N. jpt<;.\_6ko1bBU5TCGY:KH5H(AUQ8fYn/HN=t%n&q+NW 3I{5d5;Zg>WWv?&cVUR=vxYSӂEڪ29E\ST,GgW(s\7,Wrwq d>znX#K=|O1ϊhT>-^wGa7y ۴A5CCOH76C࠾2~~'Ƣ D-zMAgiҹU g#tYe9>ߤ@ΔE{x˟ĹL.u"Wv0LYctNPT.R_=E^6qFz5X8OԼ)ў)R(A͏$~\goTS${)c\eOzˮ PI˲GD#-8kF\>2NS>q4Mt*jhU "Uv{(sYdSNh!EQ:YqXH_:`9PXBIg dJjdr"`HASZgd9@]7CD~溎݆sv̓_݇G(˳H:v?8\7 h(V ?} &&q=.;h+db Ƚ08(OA{hPtP7]-j䤂\ ymtbUNP?hGEZEAj&'ml#9's*^!xH_s S[6p N arQo~~t(IX$FPc,R #+ Xͺ4]R种_#yx?J|<u BJT㬜+7ޫ✕Jv CtEZ(4Tyfn"Gc]>c>; /wf+.z]Xu2w4W;}OP1ňCs> *%3swi<܊CqkqV;wwww?>~?62C�L"]/e.鼞hݞ&WȀyͪϋjZbm{l?cT M{y1&d>Xo>ṝ. 0_cv۞fhۍA`ʩY-7=<11W"W1xEiDSRuRT\}XN iXxa6ऻrjvnC %\ï`:~9>*a6,"31TIZ] 9Ie v?&Sp/3ʉJԛn h~d&n4dYOV=yŵC] q2 wwW8ըii)mOҸ-T369_3/QgP}tJ4޷@/{(Lm byߚCB_J2=`z)õ̶oFsc-U9*i g'Ol9:^Nh5xykll"_RG$PSܼ'CYn?:#U\Jq(keNYe=%Vzsgӷ:Zvȷ"Kf@4";xh=QJ7tPB{*&$wXC@Y13%Pҍ0Pݱ ܛS2zqwj bVjՉr377 @:FkwN]Csdf5W|)=xpC([!c.T}- 3?46yz^˂/8Ob/e΀_TK=/ p-ɯwU"m5\Qe;=8KDEJq/9177jh*T^\fF+'b/p3"s?q(l:Ag/[eTO 2Za5̈́cqp@ WYSW/bb;4ĿD>Տ<^%3@E hޖ"v8FYWx\ǩ,愶LmЖn ЧfQ0ҩe}.CG1 C&T8ƫ5xb8jڇ? '^&0P4>71aL?Q' ,T%4Kt7t*\</i\Y0﫶2TYXpkz5U' |R(ʦި$k>|#^"XGM8*hUO(HE_w[E…Hv8KE"_B*ƹLMoݤ,Kkb*phz O&hLDE&fp\8DG퍰 4g7XSmQ;{~XưhD\vosCkzhHc>op!GTv?W'PzV^o)k1ʅ-mE1v/vaFK3![.>ܼ?jM*"/P5?*@+B7 wq$;%jb^6Rv[. q|h/jحM@P2~2GύF@ϮN8*T )UhHL+du}5]4l=j5R,th5(Na8G`1>"(fݵQ+uKU vBY `t =UM.o([c:i-cF^U ݽӥ[ݭZt`y-PC̮㽽W3Yu\*E}\QXcɺ>]xY3,Ś z$jZm"L:*Ahۅ]xSYBk6~10kӪje ,8G)lփC"&mmy3lERu5ME z[[2WUwKp _B8Ybo vULK^N'`5\FLTҢ"Ζ_- p5.&Ox:|\&@Y,L ^aP[q1H"oWpA=U_mQbTީ+'T|ۢ&SFR.kTfl!8(p 8tx0Gp'(!WPBC8lCJ wͱj/6a"MXK2Hq5 B+KALpNH͍+ԦjS|DE)LLdP5d S(j9vBk% 0xT6p}%Tg: EY1,HLm?Bm\L­gv>fMӟ[<,+#ʏcnGNeȚ!kQZ s_`)1=hEar)G~]+HY,G:jNFEEn3 ZMk?*{bb)W~ V lL{l<TWc .)uW0pJ}O=pwWݔM'7u0uPf_Fo!=bXOrX滅YԳ'-_c,kMskBZU&ak:Wv4~3fgKnj9\?yaI5YIJX 9vB;q8Y:m϶yf;Ի+h ]9',nFU\$DzЏF )dR1\J89ZlQ/'GaVQm!QTh= Åt~ȋp^87 - 3Z}~ȓE. /wc/PQ8.jMEmb'U3^:7m*y߁)<C)E瓰 &YNSAOEP9|ey&djb^Ќ^@! .8 TNN8rj:!&tg<` gI' צ/PXUŜ,3D@ބ0tFv\R.Wy^ PFqfN0c88GM S(6XGyvO4f UՑ"`jL9 x.|FI!4r`IQjLs%f|& x VrA Y\(Žq\g\NCm40?N 態ߩ9PWsa3KqIi#u@ȈUǟ`GivHUSE! &Am2GX aT3XR[>Qo-F;?"=QhKGj΃͜^M!"9>Au r|V2*Cd3{I(@05Q-CzZ%XosO8 .Dwhl-!X 촜jRl},x}O3azL s$XU#tVpgA؏C'w/m3$TC&h#i9U$ůUeTN*S4MyL*f֢V}k"oА?`6U]zX,}җsq@jR 蓺N+w.#D*B#GV֜ƻoXX'f kJC:5>`Z/R&zRxr㢚+1*ܱ&!rsZA, ķV>]UvvF#4gsÝܕܭ\3g\Fv!*E<Cj 9T'ߔ`O~_3$6>mj=ҩ!GϞf#)p|l.q2í~muy/?։WMSӓڛch>zf;|e PqttgGziUM ɺ_E1Ӟ~f6bوaϭG Z3,dm@%_~ Upv>m'=jcu\ IDAT]|=-["e" bil@n0Tkvo?y[?xV/̻E,jT+S0xv=UN+xe'Q_Phhh6SԄ*r12*+ |PKx(V[m[a8Z4b''XW/ftlmg)jg ,Ug~ܴ>,I*`&R E،?WGojzXTTE(j~YoE"6U2j꫊i|§6B@=5R6tt b^XM-AP_F)&P*hÖpM96Ty vE0 3CwڪWs *%(‚ߔ)/ˎؙ .CN|x A G]X"rT<(0w禐 MT|an/D#EʣF#n\0BV̧t155@>2Zs٫ ]b8j]Tʣyxy +qg.4\M pVP 0RF)s0-T]h"\6ȃXל#*8D f(<Mtq~.`Jb-.:(|jse.E{1#PI9g YAJD %[yram!|j8egWBcUS z@]J!vJ^ v^rXyU*?m?EN CAAJBp0'AME:7Qwf?M_$~0-Zɦ^,ۄ ^I":`LF!2ɘF_cU7UYi-p&[oBDo_>m~߬tx?D_Z<XZzK~>[l^$qȳfozW2Ac~ʦE5Rl oyJ={pڣ-Ń]~QyoP8Av@3Z&.O7~T(hwm7aX(2hf1h\GSysPn0Z͂uLXo=Ww zhiTؤxjb̶,.Sq6'|hD.Y/6YɞI ^ٖ_{,0̜j 9S!4ٞC7WBW1leE }̜*{jjڔ$/8sgB Ywil+b~F~z%Z 6<,X m9ʶDbسrk7*ql cGW?I<eԟ8*䎰wvus47Է,[靵+#k$mgj~@pI%B#~ARί:CeU "V?ʭR(T)qwPu esjU=Y5E30R/)߂|n y0X#l3XP4jN30t|  b},.1>Z*s Cp.$x/֥:ZkU|OJCM w8A!fCHOj51l-H6AI_?8DU\1TX6檓*3;.!8NEmi1~^ 'ZXRS\Kh8"4{a<+wHA[!d5_^6q\zS->hamMZ6J9oF|vg?+!skSSETLg*joqw [ݼAwB-g+rcҐOԳIr/=/ yR/ڇF#{)'g8kZ8QfNĹ_孧o\*!@TnpPh w[6>؞+f'NbȹXb~Q68EŠ8#F8ZQ#ǍPF~1˱f?)eAkyK&Y@8~CxMIKx*' [~յr˶)hU}?NӾCA ;xyԭP@UP_c޴LP1[,yM_|ٖxWGo`z3X2r&-qb<U )l O`TG;᡼ .shå 3Op^p4Z Hzpȗ` Q;<)pd|> +"t Dr%G˰"UU\+<ܲB)bE# NjV zȣ7x*eԒu F]8S0U =Mv̇EP;cbw8]SY=\C\Kb6bh ?EhdU&Rf&+V hcrAQ4Y(mjg64/z#~Eiq1˵,7_E*\&Lb"֚. 2Wa3k*Mk nԞL%HU6K{\"CH,?­O'֛|uŠ9:΅N+<Ǫ)FqrU: C_́"]T0mk9h¶C N|f6/O_ K>G=@ o jz`W|+~}f+:T|_6iܪiS Z5r];"2#jQ9zkj[~VG|ky+ݍyl̻EFD{~:`x7;sLHnr-)k*[=CYC4obJP&+q;ϱֹ3#&-u~EkLP[PR; S#:nN̍ kuD{s{s[=C=ixʫP_҈qBKh9El!Vƶjcx4&T0??]ԋEd&[Qb<=T3l:m9hm;o4D)|xۿ#}.}lO.@]6ɕߐ]h7"|HȇE!%`{\  Qq[ZD^vh sa:)B],k©X|u'4|v:X #)7xx"$_j'$a# &ae81^PmC͂p8zq%\E/iLKe`EIQ*HP2Xun "`1 \Fh m]0Gh%8dWpVͧJUq{p=Cw~)'0 90Bs\o"9M ؘc8Ibk%<rlR;/br3PȾʦ>J :֓e> QPj0;Ty NaTKC 듵Oj87iw7e+b91(Jk~*5J#F@jxD .m1)T!TCۈQf/kcRrP%|_MQr3lĖG?m} Ce|ZSlH47m* MUS%v)4`%&C ;M4`!Ktb78|YԈl3ުզiN|kl~A@ y j|©^r CR)jDddL6& VȏfG>íu( 'C% l,șx8 Ǎx >{ )V9eu+ 鵂*zbHdUL5O6,'8m7ԑc +ӾBkl~6"7 '?*ʓR[UATmE&/*3Xw\FJ,On¡7Wa*PT_ǰRD,,\s葶j.Pd &;UW5W_O xQմR{'o{mz AQ=W%.ӼZmFpJa{C'0.c4Ԏc Ƒh<:b*7SpZ[DaŨ&86+ o,=8y]Jh֛ •Mj gZOa{2Ӣ.U6A 䄑kHb[1 3H'˩q'p3tIԇGpgApK3?R8,stvyX86'ƣw- ,6KŻ:qNz\zZSclig&fi7]^{61Kxm=YzBZ*E>%Zj*|5#eoJ,QPjekO<]dCȃ-V"ˋ, se`˫o]/W8[3{Nv[CcRڐ$-ʯ<"{l9)[K@_de_[3n)J < .M־D~m-Me}tvq4P#scE>3-';w5RpJU>17*k͇-Pu'%O*4Q±*k,!Q:e4XœxO6'kȾAba"W+lӗB̀o)؎#ף]wLM'F)I^m2Ic.o M|x?'V˰acOah6vśW9{`=p<|m#U":_é}N7\sw E7m+jwix*'%O\\~%--:mb5S]%P$%ft]|3v7v$ˌ6s }7:.zP#k\;$>J|%)3".r?.^.VX%!<ƙW=Î8L4n\ |./S_,a!'DЂ'qj qE;UY8o xFpv@+m65ն/RlȣG'5?67]I&R/r{RVjgE۸rݜ#x_YG=O3q6VK/@''J dmeХm^Uۂ/}p%ԁ:݅t,p?r LfoTX Y0K41 aPgxGXU_>sWx5Uvu6ju(<\Wf2?G^)[,Żp PjT_Dڋ8_9Ė e3/Y*Ƈ"^CV5; 8,8 Xci<&'V.x6xt_:xQ냓 l,X`ϡ'SSӖ/z4^Pcyy؊pv? .ș&$fr)x/} li5dzlhjZ*g@fODBphlwhx#v; u72k8Z,;lKsC ̭㢊`L͓kݸ.!+su bQaEBĊV)e뽐bSfMLDŏ)Pm Zk̯l۶]f۶mv76^ԩ_3z_eK^Hp1L<,qA1wQ9N-bgLF㖣Oxc^ #j" H1,GW1&Z1Z/R,S3m0A>Lq |Du*v*@q5oXC8 wbQ;h rj:dT/* 8 5 AjxΥ4/.ԓReݙkȯ*%<)TAGN`7ag xSr`rib^m)M0.\`r |pia.!߱ɝeaiU@gnMx^XWJ΃`iD(8ҨKXkC=\yF̜Z,{妥pQ]삏\Ө6rSc!L6PNIFshP'zɓjXtG ].=z#GT GX|΁DԿp#G'Q+c+GɉrZ0u&@#){*]dۃq(]DNOε'v~as?\ljZ@p 4(!X\/9NqWb0.̯%dJ8iuE`eRkg'#ffjj9r&P7p_x#FuMggX2|Lˬ)#WV_1=XY~vEMYDmNN3 ݥ2wJm`~?S.F@Akji!k^"!*H55(tШez.W-ku𞶿_'o%.Ogf"Ҝn3&oczyoSl%Z+%Xlt럀3%ڗF JΡ&W*-R4kX1loXi| 'sZY|1pl1I3!M^`$Nl}:gzN:Zr0C > jU[i&r.N⦔ ëO4lb#07$H1`.`Ô:hZ<3H0Pa|¢V*#t8hiCj@xX P+h <&ASxTFA= uPXU@bl*2TADSX4:Q"\P.i K J.lpL}9ZvnhKua,lPK ƜwOZO0 pv|5A&\žb.|Mkr'\EV*uaݙRc-oϠ؟ cxc8y4̅v4 O+HÛ8 :IEPoa&?AV%*-jr(FE,` ]L@9xxU/0&9Ssg3<+fgvgV.gYgerv[ĸs͢Z6a n"Q:=N$B4 Lr2rM#93*w %4I@<;1)s^ێsYe^ y^u,h@/~<%aZ1 LbAK>VIԔ*(lIMuɽqcx e\ۍ0GHc{B5  Eհ5\65QGJ'>RIW-?6v6m|hK+ŦUxM8pxgl&A-JTq2Ff/s8pl6Igއ&֕Ms* 9n-\)Sk7AvSJtTǹlIxeA(4Jy B<"j05P3daF̈-MܐZǁ| πL< 9ni|"  N|M? ua7ߖO|VQ! 7%A>faSnZL.|pn`Wyމ*^=v@9`Wh}๺p`?۹ֶ\YN .J{5|R<-^D۠P!u!2䫪0J'*S=9Ο7ŗ!V=9ǙoS]l~"aOsYTNuf`!3% |AGjB)oOߋfY}XF۸~xOht!)T^z6_SpT A3d7(EgU1PE[ZEII&]r_$vp_g`%-*4V'Qa9۲C!(1MT*P>ۋj*sS]q6 #ДF_p]R8[X(G'](pbWR; +R],?Od,7v.Exax#G=%JrDԖhǑb#Bj ("Qdp϶?*UOG cNiJZZOvmo!.G6㸱]7+˪żg\J̈́ɢQ >@< E.=Rx9UC`%Y9E ש_Όn<%3pp<+a]f7&dQTýxfͩ= c &E2Q~Qi!F Շ_eS) I\2/)g܂ ?/Tg\Op6Sƪc]LdopU)1;4s'ƒ`O{9ꛨ>ޣ9X)LU!X~`"?Ө1d03A!^hIkTR8y!vP ЅOU 5FZ}LWE?͎S1#iG1p9 vmV8/Xwc؏Y8! x cS(znFi"4 HJ-<rS|=B;A[D8m=RIYC{ v-\WTGO#r ?d naljxYm{KoЎ؏#%;j.΁)V/ܷ'ewʁ@L`~\ȵ}/]tiZ7$W>}.wOrf|Q[饣wALTy6HIY%k{O8ӎUM/}ύ%}该?15*6؄3Kfj9rE6#)GwHr w.ހ6؄kp%`?6'`W,o4fQ6;QVϼbe4d6zڑ cEw]eyRcaTJLܦaGrOYTsB[9 ﭛ^ pC4UF٦8 *~TrEUUGjڣT-z 1FRzk>Νэ/t]s*|QAOOjq{6<*)cDQ[Δ;s\.GͮpSXҌL}-wY`%9/<|J]G;s5/lNFO5]>ƏxOEVrJ@.r9~+93Ԫ$@#s"Z\3WtmtY~O|Xi[e{!I9YA8S(zkb4 6Ɛ.&ܡ m^KD"vOfΧ"{^m2ю~ tTE\^,{xu7\G'=N0(rɚI} S-,([]\! ۈifxX#H;7ڠH IDAT},䫯M7:s&+ٙ>gXǭ_RU&`ᔖv) פg?W w}}V?٣؊sfW]*N.Qֲ׾d W 8 s%EYq+Or)YV`lDE0 q,3hSY3qX jP-+iGVW cgFDehu5zCj[ 2ALKD}#^Ȩa _@ L_k{sJf b9٨jD(ҧD9n;41mOc5j_AmzB#D3I@v+ۗB8DMfTz.>Z`Y6_DNW)ټ5~S)xnu&مD' muCh.ҋ%}QC[euaәk*9$,b歜O-b.VSa< +q0?V{@8+ PlBQ2pn3q /p1ԛO@?g_ASaGt_A ֆL,Is*x78g3_Pw=P2OQr@vB88>~_GB fV:ZKQ9ъrs%b,6X[ Y9 oq_*+8oc ulBPwF>ڳ&וez~vTP}eބ_k59 -\<7^Be' " )DjeT̢j H(ǩ3UTM8 }U-81mR@st8*9SQOTEO2f -.&gD[gj?Z ;xh \MX7䳆B]+W8@$ 743}_cN<ԶFS7"E gb͔Y## g@ +}jƣ캪cփEj9_q>oZ6%P?7se&ԥ76ى0k?\r>!u-[Ѫ}ڑAP *k\Ț eG7M\Y O!!C򵑤Q'D9[WU1"LEv (qpfq9ƈS~^+uvA,caZdgPTh ھ/W5*Sy~FVjIZiٽiA-MqxKbJ%H|wJ@an X9h*vz9ʨr[Q؂e ,8 :Xo saMW>>uG_،@[0T:m0V@3 9*pr|O}TܜBwXz]p[^qt%Yy+];&P7C^N 4R TƓxŭ0RMݘ5|kg3{ VHMi~ ͌pC'Uk54+ EUO8ֈO 0\*[ XN'*E x3jANUC*pzqd8K9KDD#.43riK?a-{PZj-1RU?Np^ }*Rjn|v:;]믙+C3+a.e&Z[i`or L {㕳#V b],.e9biur/0w"bhDq(?\I\kk/`]j᭪"7Wp;ZY(A+4CF$noAy1?zZk_N_]Xh#%W]7 69ɏO_wkV#sh䭈m#[qٛHsJgKyW?n|ثOv* n90|_S{dU۲m={^b1h_\o3mg4#@W#W:xoΝzD25кaLq1#\=f+OX814E둡`fSj)'Bɢ?u,?B_WG G>/Ǔ'cK_g&l |9kZ9.^:R9zV1`׵K!Cg.p'v#i8k}02=b>+U0cxGq[srՔZ FKkP+8#0bgUږ*)F#uΆgS94MԆ&9jvoslk^ o)O\G]#yxamazm1Yn/\M*ynN݌2|OTȭG,\\Zf.)4[liUTtV*:yBêCG ;PȠ5PIq*@U"Gf99N()%Q{Oe,v_s-c߲*u/CRp/@b!W\ +pNP F(L1k1TRP@-T(3앰:9x^a7q2~1x+kW|kD -7,pN(qWxL\fb(-`m`>hi=itc~`J.F+ø<lHʴjS5pS Y>UБʪf x-px™$"K`u ذwRΫFXe36Q̞=95TpS)po1VV7js\VsIF.-Z:(lFn=x6>8y2#9U`4fEȯ*zGo0w 63!$B[겵:kN1zy W\!`lv㥼 CV9^{vߔho֝[Սnn6Zam1Fe ܹ»ZY{&ٮMw,iel GD&O },K{pqTQ^> smJoqs? }at]?bytgrM{LE(s%*k &B L=jO|F)v-:;fgKC-̂vi<=??d @FvcޒdwPa\DYk?kc#jtC2!AA>z.k 0:`ӬѲlvVVԏ' #c1|n= .m#qb&"yxsBc c;^{]VY_xdpje@Em 13r.l'?AsBoYr#_xg`%~\B&`6<mh5y)´)G̀q* ߈pWb#"G> , Nj,P>/!p.F~Uoaw jb3=1gPBZ汪Nc=?Uc=5M| 0ڻ0?v@%_2uJbw/d:`t:>C`jmAKuPJ˚z_z8=ӉH|ۯN@ݴxb*q#4o| &8Ľ9n < |[1_l\Ђr5\G+0g Uv-~Gg\˨2Fgq0db5oB~X؋pH=6//Xn/yV^z]o̯g$[`C$s~A;g6Gj!Y4-8 %6<# zpGUuDIQ Mnc3\]9׭5/۶*.?Z;r V-㤋BPXCv膋#)BQ-O9GqZٖ9tΡ"' Cp %G} X\AЍz^! 2rz5ggӦ}2@Iܬ^S < ʡ:vq6m-d 3ڛs|*1`4N,㨖[ ݠ#4  JK1R+I[Q01Mrf(N/⩊ܫ.b]v#%wYq=tR]+hTPm+ i*FyEI|Z=k>Ni ¶i+TMrTtAԤ|.\Cc ?@MنՖ˪>ʉnf Ȯ, ?a* o[THJ߱Z9L{.F@_Lq_LE;E^h ~\ ag1iE _U^<]`B"ɇ-kS۰2\"։#Qu=޹zaUU<Z\Nx㩰C ȋM!B>o޲)6n0`" ЇsiUbƫa/gX0qM͝Us䦢09,O0M?+!Ji.Y4^ 7&L¥Wal\mNL'.vwSQqz(@# EV.KT*DA{yK3_d3iMeO iocEh-y^y>K][ކܕck\co2$$yV_L#rK҄ę>4LYޛ=C_Нm?ҶIn8&GD6X`6g;—ۼ$z #pVN] eM)nbnjGj ǝfOc:an OG ܛ'D;P"꫷`wJ_kJrZb`V1`99LԟZdN[u+sЬeuH=sǔ(_`e1'OX\ޕ0L_ljF.mD8>Sb~jhf2;m4^Sb@ߐ8:c[lEa J.Eɔp,JLG)欒q? qP֪) Zzc-rɽXrOX=1.*K1J\¡"pN$;X cE)OEXZs9}Sܳ58h(,uVwfu{;xw>,')%fNK[(@xS.9wi e(BːpC0*TZpe9+W&'ۂ!0Gt[M$xE49 aP:8Vv &Uø *a#u!SuO`N@cǘe_Aø=tZ;| IDAT:VTUy(:Y?Ո~t : zSD/ sݏҫpm~(~zo!Yp8 9JM<rZS*c 9Xy ,;]> 4d[ƿp3MZ 47b~ L|Ycgk3NZmM(P+DѨ5ͣ("85tA XbS{qq`8 5qVr~TV6ŽpF4T<"&x^b;iCxz9tsĞuSKbKkov/H~ޓ[.F?ݣ'b-EB!n3Ej%NT6u5著Rg( k ^SyULBؗ iݠXDkO؋hH*<?SOsp,خX71+%La_UsA e<蜠/ON2DAs r$NVi~.S@m]/u@<3g69qBݖIqTW 3h%=/UE"y:7,Q!`Kł|uJ6Ԅɉ4ǻ2\V57+yS8 U2F㕣wVv-uڑf8Y8͙ASVzG~h'C>cܓ3apjnW]e}f9dVP^˼[mհj&YBh4lW視;M&wq{﮳;B<6-U (/h 8I65Yhe<*QG H֒_K* P'b+ނԙ@>~L28U8Xu,` 5.C6yh>GJb!UVg70dGmunx'=1h835gJnV#eNqI=D',aWSMԂ' \GxD$1(8+ F4 l ԃԖ$. cu8+kKأ.Hy _vp\k|?p/x&pJPba q _ʏa>y. TGE0Z5)EpyJLF~kLZ|NewPgW#M,0{*lg3VW+NpBxG>-D11K-X D`/X b3-<+ !+`8XN!4y^08!#6x,"@FmV d])v2S p&N2~x Yʹ(X-o8Js={xS/y4bqWJ 1e̕Ib'Z<_y7.Uϻ!ΰ{M;fNocv&JvzN3:.;]h]ȄÝOL'UOTCaw xW-],,2c,]s^DzV Wvg*QFs}Ԋ@L{Bu8p4p Q/e(7.2XETOnom b;,Gg A : (#ڪ*]?%9 03;u& P#{ZeVO#^ڴģ+&}\cWS79mVU%D+oSzgmL&Ȩ1=͹![GٙpϺJs'Qu'x[{d)#b$X+CTӍl2Վ~sҳyBжkx`u1;OcUA{%"0Ӹgi:%N|}\;eGakz^Zx\Ao!n&G8;gRM%rnxA|/3qyG 9O$jCHswvUE{/OԕR1 &qhy8XU4k>鸖2fC51ߊ̸QhdzKc B1KxC t0;M$?*~BN<؁aW1mX2b hTQW~,%C?!{:~$,um.es ^h‰TX]ǵ_b#/pW b"{QdSesO4cQոKwg VyC619NKK ,0J|YVF-sW>2 bxᓃMVIښ @؎3SbSŎ;@G+'~=WtKk*hoiTޗ̪f\/[ ]ˤp2h9zaY̬)RbQh%vd,(*xaBZ#u/tl*1ը-b`tʜ+,sPLr mZ+)5~?SzN'o+'u!$: g z> 9X*{:f?| !H{'pʼn!fc'Fqh|b.#69s1x5rXp!Q!ik1V3ZBj5a\^mļ*eqP4bG+8Ynox܇"\\;gyW;*s 6` q` -{Umy"WTh~ûa5 ?oh@wB3ܑ;6ўa9/x+mC<0Y !PZ},O8Q$ \'0A9Q+ f p6cq N$ x8􇋘c$f9;7`UE`Op Qf8>qT0Fh=d B)'cn Ϩּ6eHV0W|p|!F`mŸ1fmVHȤt8/.|M HXKa>H9IMQbrxA]!]b%Xl'RhQ\S &sz#&x: .WIm9mx+NJ s CN ?*̉xFbwQ xu"|N(PreJ!pSȨER[(} E yBfky]3^<]Ak9#[U7~tLlTUh-1'ž|wSKg)%3wD߅yEKy?MOh?%=wYz7_HW7Xj/e2oLqYmo+>:hݘ9V|%N⋈I"} 5-OrYzW3MvtN`vqA:Htŝ8qhj\F}>l( yBFfVI{?ULv|;&(yF).V?o3QIOkFzH;=hbgVg-Uurq[[} 5®d+'$rqYE fM8"[rvQR/V n*8&oVayMk⪂G`9;Hݒ=V&8g5#y.e3Q 9ϜQTeq#\r#,KZ9R]i߽MĈQrNf?\1 ntu JxϷm0tp<\ AdiNcSSK$ݸrUTuBQ_cznp:Fp[X `,_>'E;PpSi'tS42ε8&B_)RwohZR׸%vu\|Еs8-M,s0 @I~!_kp/Tf+op{("'sFpiE;lߔ`+.s(RW3Tnx4ѠYhj.<\%Cu0q1_܀:X_b.3Jqrji\gb2A%瓼AK3E_B!J8@ X|7!K@QŨO\b3>}xX I8[GPbS/:\PSSॸFU0P.Ea.Hi9-⪼G{膟_JxCE8P3KZQ aa;W ˈ܋;<O4;K˦jŖ}NϪ- U/bu5} N YV[W{蟳 Y&ic$UpZ Q`WkUW)ѩ9R$˓\?'vLT/;pL Pөɐ匧)DFJv]de4A,Oi5q?!XQM Wh+x\M_(gj8<< ;m< Rd`\l}WK8 ݵplb 긖=run}}i+xDK?bu?㣌:`Pj-뾅͵ pRN@ QXxSq5*szL=x%UES$ӇS \t?S7Uiaxt!\T |p_c/݉wZTnIK_(r9M4sM͙HѴ@(% UdI>܄p!EٶzpVsᩧ?Yj ;;a#UY5]Z|RnW0"CbK'hXZO̎?8 qfk$J K9B';BwoR0#VR'ذVYU}jfodcr%GʒƯ萘w!OGUu>i?gL uzʤJ-J:_җikeWWU] `W)`AľZ)*N Uqg}"f4|Y\8b]y?g7TB~yr!tNQ^h9L)b9$:T@sL*?a ް{P jrӸ V_YD`•ܘ%&& a4@Cө ͣg#Nڊ edZз#zx仯:;Tr_U v諬V$OHP!n~=~͡Z{"{(YЏdNZ#v%bCUBNӫySDiXn ^D.'eL" Pm<'tyA&+$ʑܶyN0^`™ MA8SyygK IDATfb!qH6Z)VIQujFy9Hp;roI55t|UL9Gw=1_ԉ֡R!Z]kƵ2 jl6ITfUOکHWk#5IK^kM- bH^V$_ Eb>NLX'fHl[ϧAc-́rG wp6hDE|apw #;`4\tZR=8EEѢ"3TJL\JM(Up QNR%DnI/i6\ YG)7a=8]k{Џ?6M$e;<ZJ|"n|n7A .sAK3aRWkr(,A-XK^81 gyq7Sxȯ Y̙8PPUnUVw]| 4 u"˼ӉSPyɽa <0g1܇$A}|QU0onģMPx[p.9:|7 * /Ǎ~PgK zDgaI=xO9DLW}9Z{KE.Ghĝ1c7OSXu(-`Q~ IO[ `(b&VX|LS1D7pQ[}!t-hLr˸!oި;xA p8+JmZo_WS [_;Z9u}VijhPMGaX F@NS6w@.sRZ͗ϼ=vXbU:Q~ֲ뗵.e;NLMhZh@$-m]f&uV 9f1S' -?فuoU&X>ʣq= g) >ωBpkII{8FSs֩gIщ*&v527Q[T>ZyPyIhJi35YpEW;oarj3<_mi 5)c7"+x|8vQNw~I=݈;|N 4U WvFCe8BYeC哕6+yk!ѡrxeljU_7K!?}oPmbC`*/vhY|aBܷ"vuo_~M*fUsf`5h 4KZ' :>Ue8S錿dO4&Ϡy~[C+]@v>3#JZbL6~i:#x0/ERэ:J7vQyXrsbPYa|9B; V_:֦k^{DP{t7rhKn PϪ'Q[(`6yF%7ޱ휒C#X. 󝚜r>OE]))G zj&ŏ8 7翱pR${ q-WYT4,ݟ(CU!~Ky MpA<Rki3Z NL4(~U8POIB ׈t_PF!è>_b\x^tubpmx[?Le|GS1UT^e4MĉbX91x M" KIj)/Ӓ%v T@J]:Їr=qc+VJS _F}$X8{GuYGe])r&:#Po}/諙3m*Zm([=uZmִ@3S+i۬̃Xd%[\fԈO^`=ךf^VD "dv4⸳ʳHpM8&N~OgQb=b7Ex8$?ş0o%0X5Anrpf߹8VAۢk{~I_yհSW bTӚ\\׹,)dFyտ}Z?rTթ'Lw%$'yg' $j8do ؜c9Lm VjT8[3\}MZVGwZh/d.G^*+Y9 v>k9]h9|`3DJ´[;G[`Pݫ`rfe{^h"Ĺj=59Xou$^p]8^dgabci ؀{k D08h6ť4 d }O:.870>sZ1 =P,[rY,*b^bf ^Z2,VɃ<j2FG0>]PNN 9kb8OlaNq \91/6n+oZܖz7z }Jڂ8[-nq-()@q#za ~PN>ŷV|6F_pcⵐR$ 60R+OHO91vC ?=*IqG>}Jg)P6 @(c10ǝzЙ+uɥZPE%Uͩ8<,WT k瓖.{ЖzC“a2l. #C?%Z@=^pjX YSFn?̈%i"_i[eInϕ&A]t_ l;:`WϤ3Wx&buV}`8ƕu_5 d:Vq""{oQl|Fknؤn+әdUM O/\}*Wt'cs/KߐY6Đ%{ٱ,+Q8gF&NR'v'QRʄxJf!*a}C;~me5L5 .p8ue~{E8-nFR5|-J'_6+ZuaPq=ԵA[0KGmF'ْ .p6Ѱi43p: ʢEjFٜx2`xݏW]Uey'h?Ęh;2X yi=qb6xrXkhWj{2ۍuRu,Q@ݷaӴmm۶vmmv6Z UOv; ̨ o͹FgXz~BseoZr|bfU9l:!Z) ؇]BO.-uQ1b"tR$ Y-ci{A_QEc5}UMau[⫤ "Dz3DX,qx | TH< 2U@Y@ߣxa5lJ*6m6\š)#Vş8 J_opWYI ҿU0GR$eӢly u1Kqμ)OYlf.+5JB IYΏVe[}q=nZպ~Om QFμ`t4&<9h5 =|SEVY KyʡvힾvNop4?i\^ [Dmg '8RNOm4DCcj ! X(&}8ֶNH1RiLW#00d X l[:jK!XC~-' "\\S|cӎrȉLQ"d ~qp޲45ڋ*:P(Qo2&-6RO5" {BSnۼoIsh.zD#e/TmݵAo&0Zs2ؠqW O'T\44ӭ޹T_L?s2 |{ZSɷT2c(UC7k5bH?]KpskO |W7.5JJ輛 9|ȶ!0 x)su-TJ|)? QܢA{!Xi =p/5" /K~h 'f?"EҤ#>N豑bȪOeٖrYa0.z/;!J !_h'VBPcԼxMd6!JQ0&.0V9ܢ,`Y /EIV c rby(zʜĎC0}jJ  /q5F;BAX/2<_Ο2VG'}a>"g9o訌r,o8F5d-qA pSJ8h-F݆1| ~bTVWE+؉6w|c 륵OĝbNiIq;gWa13,Kh$p3X"JJҏMSk/aZNA!{ ^9Yoշ[(+UBmO:?%pzJރl9 J X/8رW?f }ms}7!PU;IA%w2X  i YJ% ,EWesY ~ |T:lR/l}rAnV(pVC2M&VIrW:ma9RHxaØvPi 1̀% ?(Ҕ:{.,|Zb`4Nd;m;`?#>zkȁa?ZЎ^g&By:/ kUdNX#F0ްA<0Zi4C/Y%?QP>x#Ȍ %2h;lQ3 q ^`-2ۧ,0# nxzp "yK(9GXV<+SZ0XQ4@l7%ONaAi!h^R)lmvXmc yO#kH 2h*c|VDO_hoO^ΔR.$*iՕz/.g R8VtԫkԮ `x-Y.ΟZ+?Cnq7n@;ouf^K;pF ƒ)UTSMo(:n>,ea\fW);նj/ҾQ7yB88u,JaUn-|G1 J`> ,2Ց|6'k|#Ӳ&s';7:vDl󵷌TW6MD& |I3$#e;Mi!/ld0</{.9Ki?l_7xV5bx 1Yv,Hkj&_#Wp[h<%X8COV\%6k_5)x_cM_;ˏ}"S׿(XL@0ޒOa7(Vgc!Y=4`}l2v6r;/Sx?ҏS Ws)m#e4&ZqpGj}Mq=Jc3Qn0caul-hgsN%z.z{y V<{ Bhe2]鏵a蟒7/҇3&<̆e8g)bKƙF^ U| /mhTZ&WˆV=g;p.4PS/l2< ')+:ؤl #(I: ;)F6Ò0-9 %,el8X)B6'2Vvx<~Vte.a.zE_E`;(Ca2+*!{ȯ8eou/Lv:e _7݄7V5g YUٓ*娘m™ŬЈZ['/cSβJ:H JGhT;pmfq MX -gB0.V]`8k8vV6GbaxVEyހ RCv m5C/ym|bV[^E| mD,J!oPqZ,Z%CījJ6wVc痾"n$c.gnri]%T)6J}"{'ZK\a4O `Y]h*xBQ^ rԞ|zj(v=(0S`C)gbFcQ IN^7tG(aV]Kr ^'n+ V/0_<|,ܢt(Fe!눨K.@ڋr31nn `v ~Cq4?`~+$M)3M"VE ;ga"/o>ao]cTb]e]xc0\a+YRmل.PGN|ϲL E(/\4Dh ij=Q~p<?4:)dMa[6 @@g "r'*P*od3}#R!,t@ ͼ~r//('m;BHSb}~.ӿa!ʹ_mz` !1jDGOmw9oZzt9i4Wkn82E3J%R:C֚ # <.t+ zzxZ? ?-x7b> *wX %GCbl^ŎI| ئu洂-2tI{q*bt]%EOoGbwKj4;zPuoKC QXwFh3Y$ r|sjv9_ҙ&ybW!CTKO H)T5$[V56ƧpnI3}015A= (h[7ndTjg|lNMOW:Pp-/n WL)qfJ}B[ޤ_𛼱EhD }(͓TWǬI Wl3 Yq9ԀOD{9`$~(oxY\lt1?7HITuvlHh-[wCBY>&} lO?jA{2o]ۡG59 #Ym2P'T;S{Os65ŏC%ggӬ:ԛQ*3y2u(cQ,lCgU7EKSyXl8kE1c [ ,z@+ ZMQ雔Nj(Ͽ0L&GfI;&WD[2axT6`'( }vu;TC|[JP&ghvQJKEO^[Hz M+&f̋%vB0"p*xp+"`&ɞp JC%|h 4.wWA^FQ 'fXn)4 ϩita&v@1pЄ~kew |S 2Tq&lXl5EQZM c(>|drHLoC+X_!H۩0Dan=-T{<\$gH29S}9}Ǔ a,q  nXցOPjTxS!*,D GS!@mm `ʲ0ߨ,) ˁȕ|*Z +1]•ڲS%lf[K݊"dOVQ-rȪ.l0>()؛/|_"qEB {%U UnvJ `XYxg![ ~PǠXB;QAm2KӵXmG#ܧR'}hotJJ'SζA; vw5CAIOo}멬EE?$^M;]?_ٸ!ukjKpr%or;Ա0M+ط="ux\ػ^'.I~V7oJ\ Y13Uݯ(I{{' ~g.sO9¹[[Fl43Uڟkd^l q >iջ]P?^·)TR3ZyS)l!E$Ddx:h%WɽΩGxM0bVّ-kgP{`>mnK#QliU{hս!KNo0Rm%B'fsjvڙcye=nQJyғ||ž23ɲ=U\3h `W|0k[g^+Z=gQ(G* ȸljJӧ%M0#уjp5.3OݮP;WX5Zdz蔒5#"b%~ֳj<-5p{rn sfMa-lF}0Vb1l- |'Ћ~`c?`l(5 e!R X:0w{,r>&#axI9C'/{fA|AxVw ;9ll2/U24 X^W*x/*C̡8qʭNl6Dw!A `q0 xWh+J̴E%f +P !؉0q*nMlRgSG*<-(-ԁ&q0Ftg»y<"`k+=A>H S@S[ x;*(T/)eq ՚ḁ\TRWQ:!,9â4<"#Ͼ\pFa鸖T?֏iJ^.HNoG.Zhekd IDATN*\cA8o_\3GΙjqH7b+"SA{g ~$>!{?sWoor+qv5Vor1PVGDD?"e #{C*?0G$Q q*z'R?6>&klC?VqܙC+a/}%G^\MKߠM ^+X*yN;cũ;l-Gr+Y] A{Q]ǙoӝJrai'Cftٗf n zo\g-hL2Zs5ޞ<*c@au+W GdQ *xQ>{DVK0?[UpˬPD̂Uޗ+M< ZA6H)us^\*Gt`7zЛAs^' &Nxj%7msԣhqD?R(}yMusGBW͞JcWQCR b}"JօfbC)֔b)U^kzɆ[鷿w͔YM6]gխ,F6"fح4*{ܮD&SkPv#qG+˞)Wk>A f$cY.w:_dPԳI-3ޝxxK rjc[!gupCMs>QcPϴ^vU5yֈⱙ.X/Q~V?~cQ&D`5yH:f_`_[l`Kͩ pDmm]A<*$a3gjI<V\>b.Q7Nw-3'r!X :ڟk]G/2)NJpMrxŚ<;B9sz֤N%8:*3.O/l&{ʋ4=/c}JrڋkaVkd624RMNg S-լF+DZ mvT:b7t -}'_KY9OvH ':64G3A +8+a<̃ j_"BQueIP#T)C>^jtf`+NcW ƃV \B m,*yy,@e\; 3#G) Pb" g*@k >s:s`iU5ؖd?%sQ'TôJ& 4:-O+ Aq6e^9%O+#HO\u[A'ZȜBW1X[lu5<dW3SI<>\sܕV=T+]CW@m+鑾 si}re4^5O\Fu-Z6Jpw"ŭSݥS\};wHB dɝ< ;.E4.`4ul"lTh0  0Xa{ eŕ +\*ϩ(#Xӄ[Ha;vNxQ zS8ugi=ij\TB&N@pנ.#2w8.~a`0T,, s ap !' MgSY$! b'(O/W"w( |&;i6Xtv8@i @6Q[v/8Ohbnֆ2l@$bgC!Ll sƊpOT }x G@";Зlώ(b2A}t;֐JK=6 `#nJK>bHdfLXQ y4 i4pT<ƪ*V_Z44IU"玘!_i|Ikvyf3|o|x1Ql3ETn\~QWbgapйC #1NTxcǩʿ͖oRQ휶Q-+o7R`^C *vC=[jLޞu>/kO >8"'ܛ?OXa=yL6'ԑr˱4o"gťV@Q˰X~G. +"FUӮ3&P;7p|m|頑!_m׊9'Im&]>Q4fJ3+3YC^~R:ۤ}ug%+ox_soUCX6΢h i6EFi me(E)vUpZ[(?V~qQ 0 7%N8+Y]Hj.->hᶲJZ!~J%b8aj-std 6Y뚟]W0HL~1;=Wrq|KkD uc$n6@_"ǬQYcBcݽF5sf*#53goVge`}S{Lcx_i d:IͮLgw]uZx_ ]-L}f}sklzIijU&@fhxP({'`O&<ʘ &&geis|([saxYtBK.~xXGCun^󫣼}\r\f˲#-3 ABZf <΋|tU y<45U']dPl%vL~Ĩ*IsF Yv#:, PKDWVrOAxu:cQ$ j#jt:`}(luL~"X_ 'f7AyrA!l0'?GvHۂ/*uma ?Byӕc2׍_v?<+q۵1G\1cqmy 2㜗r,oh!?Ru9"Be~ӧE͙<a]ձA!UuXT0#B?$SwfHgEFԼޒKi;DGZ~9ҾUKҸTFh,Wc3FȫN)EI}w}L#t#]oJYS!&! ӟ,(kcuWm~Db/ { zɊ9wgC kvM~r(^Tl1zNyW>ζb?D+>YoYh/VhmfhgڍoCerɹu!/-~1(iEP@܃l Ua6W."?Y;nm2^ fe|g_(;j(l( ց4OfQs~ N3(Cdžp[&0w:;L)B|W8VG#G knkK __؟fѓYU5Y1D{Ǭe{L#- 8rHe{g++ [f=acE3'FMD7aiVYCXF `UÆg oGONutߛ0#C_DɲX(sm;l~56Ba]Inai{yHeanB(3jUjYCԪm~Q sʥ5g%;5:r}i\vYCԾ8GIbX-?BgB%Cn_5{|(=_o1fusʣ^ve'ҍPR7~,g_fQp 錳? :J+1ELqUPKklNTʧM_w(c *F1MVkA+"7zy'f6S)E.*`CE2z1m6n<񖲓tޚ %,=ȤJHb̃kq/փXA$d@by1j#/ f1N&H#)Kaa!!N0D"\n$aӨ) yXB!rNRe(T3ݺ,|ч!Z*N b,< 6@L:k̋ MGzhJ.1F ".0X1s" _-4b=tn;˱1 7M.5rX}a:TnBޝFt?Xj%~a ̢>gvb pM(nF0WpfuqvC qM&C7FQiԡîEE$ *㠄́*d[%; ?7=Ms:o6Ҥn$A.(CU5N>UG(&]%\ Q{jiǝx1t*4!P}ibYw3Vx+cVhHsr6l߲ɥ2l*޹ {\vS=\**& [>XչYQ-T[Y!ENpLOVT?6 紘c㉴DZeһgBa]1g#8'3w4y}BD +*=&h> +uz*F1s2wml%h1.+!PjhSR7!?uoݟ+-K|e#b\qBoNόȎ͘*Ef <:c~(Er6@:'S:޳<]ҚFK/6uɥ IDATcoZF#N¶G&{47Nr-~QrH!ؔA=\_`\ԿZ rz}sAC#G` 0Fo F/[$dEۡ;]CGb.O5?}kV-U,Ggͻ]s"ڬR:"-BIm#;a$ B!6 !Xg}]X #1}uxKUm6'gW5L-h)s,Z0_cuоId [H+yjXA}=1#϶bWiXc_voOZ ,~2 EOZ ̆#`q2;.`Y.V?0 SM J# ͊wU>P c Ohpq0> 0M'A0Fp?`!俳Hȉ@7E('4zKLv޺7x:MeD]iޅDkY Q [M萴"YԦR9JSzw`5$b?qT,|V5lE0J̽lT !'0F7_B.>BApB–5 [b9Ǟ`E>P{̴Y<֘k#m؊`Pu1ΉbͰwfu=:R ^7,)sk+5o}c-B/aHk좖|6L±ubI"^2tS\9?Pߊƹ¬qM X_;>d[YA(dT*T-%,)qT"\],\ Xu4O[KADg*gĉ3y?8(s{3[ǔޞk%Lnob M0gȗ"#n#ػ^燰a:l T񺻋zKiG~ZWoG3ޯF/Y%e\_.ɯ Gp^h{f}Q+cz}iܕuyx[\ 6swzJ>:;* $hW2e!tY%H9$ֶH\<w[syg3*en1 :oڭjlRJou0Pg~*&MppAfM̖Ψx3ᕢ^[_?_~_ -6k:Pn+%t(\Fnմv̔jiAu#f666` #fqQ͹3<~mZQ`Q<",MN3gH;}wϩI71̤4R',IP./NHe/ p?4-.o[s,pǺl1u@L/R'yVq)hmJR}Ռ+JS],G2k#1R_vy>CTHOթ q8>TrR)+W6MSzzS2 x.rwh7<`y(ܘsu_R|"y>D;kʠԿ3YV U$gtT;E[(WeԔb`plXWUHf 5ZJ 阣nPƲwGg\fe jOrgPrA^#-J{8'mOyei\P}3r~,vJ?jR_5Za5Z֑DZ M|gM9H < 0=~*[ IVI]>Aϧ)oR<OT]RP+RP@ipr=dp`u~sH+/b(^S,q6S~KW#%pv2ffqاpL_K׭3+|Fn4?;T[R̚d\ J\|:&ex9M4X܂T ni5hXC/Cr9VL7EĎ̡0AosZ#5+¢ _:&s=!?^xd= 0 LH6c!MaM/d!v  gb8ȺcՖ L8aX >#"//Ʒ)\2ҭɢ cGXuh]y?Pe;Sřp+qkjS݋Α9FnnO͝ZݗpC ~J4g>S~WqU_uwS{&8Ոe&+1zrΝaa h]8B}jf,1׬/jAW76F4,4ޜ}Xإ@>λEgVg6D\SW+YV?R"}VwS;xcSV٫h{:aeE}R="ch%mbX]MK\JPZɧ].[ ~@ +P}û\߱1X܀$v{ k*yl l$-NWTC%mn,}"C5Qo¯Z.RJU5N$ t7dMOZ`a?#TZ˕bvȖ{̊rBc~UO{GZ|h%(gPHj$/mXϤn4sia8˾Hi;MEexwъFvE1N4+ͤк3.,v T/۷׵rY!߰)nX `+^PD4쌠mv`2Bq8f^ ؔ=.s&Y\b駙[xO-Ϟ Wg:"rgO8QcEA OP>1\H3~e ` e*sDj@Ζ}D ()c.(%^R82n±6;l3R _K˩8=vj_p:H1x@{4 G8DE#l,dtn<%F5Qze3E_ ,8[U'}&́`5=; 7DV`'~>oh@+ LzT|:.kN`q1K S,4tG E{MiV,h":YϬVGA-YF)3fZ,'4X+7:YZ~7;򬶹NP)x7 ab;en05p'X\V~Tt)R3+5lބ!U#-zeA q };lL<CG-4ˠ]0B!["kD~ ?N,7}rRX𔜇i_X״Odꧼg6x[T%{:Xh{WLK]d+xUbo?p}( GR.GC)z5Ǝf[qu8=KJgmϵd;yqvіKǹJ,Y9ZvPޣmz]j< P G[|k7\"VJ[Q{oc&xg3ga-bgCi<杤io?QYia >羘ǻ$뾫oJe3Kb GZ դfbp =mmcp(fi R)p(b;-.koxNo,HS|"vM̥ lJGϖ<^>?/J,|^Zo9ϱxzdZz['3;{ٙ/ǠȿEwvld챁۾ft138ˋOȑl je@=;삵/I1)-.X) ſ<:{RVW+6dsnn6YԁZ0-<$OIp X$9^ c;g}ǡNI'k+L )ybUG2.l>kB C4B&.z+NP唏bL̳bQs9f~Ҫ˥ˡp:&f?gZAhי z^XLTe*QTD,H$#q#"2# ³RzθP}Zhy^1<<05Y~zٔN؛R5N۔~RS=/v TOZ"Qxu.ٿFٓoΰ.*! X%3)^"뢏5V5~bԤp"X]t!kC:V3ma%ʔA=Dڌ_p&Xsܧ98)ؗJTg`;=cb,9E+:}q"؜}( 8BF3gf:!P\Eަ~/oБ~Q. P A?Khgh9i53%em1kݱ()t *J #->J,(aOX)Ona*{61;&upsEXb=ް2 AeomņZXdJY 0Ԅe3L4ue X2B[T2pϲ5ʼn YUޑZ'#g<5 S;u*A<4h( +h%L`RYIܧTvYT,TC9 b6!"~'Ulkn}<ʅETbDԕK򽬌}& M`S"OG#([ds[7#JsrWgs~DӅL뿕^ߨocbwԙ=v3ؓ.3ʇw:g-e5 'g:ٗ;'c r|*F-Oۡ5Nm%*1?Kd-،>{fQPLwE"Ng_0_G՟MDfC@锵W9VS+f*o(`L`!QOBD̜cxyU~ӜS a!7(E-SL Ífn600&ɲ b6Oq8K|xx4-^R(Pdϯ5/(Oc͢x2[$)$K(eou",2b2iWIrY3Nkf̾'<k&8;!Ho鬦zPnN1@k/b.7?Z}>Ŋz*C㩯"i㸯9E{]ϊIyY}#/e3/=⓱ͬo Ckp2Ou[,b(y_tg0W`s|l5g,7Χ%oo IDAT $dIZ3n@rb)P Hp5h(uS]O?Jpx" "C 8@j=$&c͂9tp6@C?8/Bh`61%(W1E_F7<4Y<;F2DLjIۄ#Y@y'n b:F7B;6oT:)qQ ]0ݷށG4j0̉&V `E2 VɰC,D.ކEN$ 3 ]5( mE-S`<<%<Y´3*Auxmjm< >4Ʈ0DF i9Eo'{*EDR, "1j8d46g=.6(^{ s%en8-a"},69j8{FCuY2 X֗Hc 9t/d]¢ -`S Cu:$F]px(GBmp Xga.R0Θ`Mí,ЯPLa/0J\`xVT+"CDS 8/mKm}c#m{߮[};B1Ŗ#em3!rLlQSŤPvɺ|Ed X3|{LD{[;gz`RφIr9*)PQj3 [*_gbWim3Y_| 5/"w!N%+AԐ7޿,}b އb\2{5s Lowto 5dTnn~[3 eYƬz" =z8unTgi^HfC_P5=Ug7lbXͬ_.x[o(OdFS:*iX7'd>NOHnn7[S,}:ebCMm뢼Ҷzf"q]iF[I7Ꭱt0[oĽ8Dc~l&*ա\3n wr.-5I ?g='"(yrtUl+8:y-ײr2YD;ff⯞:)b{8ҝEa6iIܤ2c|`p|C]hÑ3ѱ^6Gw%J;dc 6]ye,zVfL2جj?n 2*7w4ǿ*oQ(&eʏvq@9BԊ8h{lKg';h^gg*a蓱D9#ge,NlZEiW s'lm|1koa }[9b~OtT̛ܕ3z|pZ{A5VPG.Mpk^˫Rǯ0J<x6>BMHd:uf: h0U#rCmh&P52&,3i9@ib(I^8K\h N&g0X GUΖՔXWX|ql1~Ǚkgb,n|B,˃"i h:]U!s Y Lc[yl[5,\2$70R> =aX|/;#k|> r*3 MP_݂?\>PqEhf*aM~AtTZ 7qQl!wR yrxI?h 3I8޾=ch&Ww;a]h9EaM.:}p_+R_;7rDHY.exBIXd?x EYY8Cá8M&/)6k8Ց#5]Q Ru`mdܦNl "ԯ7-.|0rz&__N[; jӘ$Ë3 .~/r+#9MXI{sm5N`Ն_f29U5>iw".>[Ck`Y7VMW_µ6GKs66z-mvܷXa%;~:Yٮ/Í᩹(}0;TCmc`D)VK+JtIUfƈ)2()SJs ̲:$]gtj*ojuQ>N}oiH=K.ݲE\C0u[tI2S4dl +-K5\꒔,/a h쐞=̑V3O3GHEX#VTv~}|$q**G3wJsHoaOGr[[n,Fs]o?˷|r<2Lk=vw;If{2dV-zq=k,{9_>q'8xa4O7Vٷ*\zU14VJ/翎jy%K9upoy_ Q5`iQ,PwX?`=OFGڦsm6ޑ4V[ K2=ׂ؁Q/ib0&g#ٺ++Z_gYs-Ccrnݪΰҵꮺ7v8]dGдSI5녫E8Uǧfsag) n+ΈgU^ǫecфMZm/diޚ)J/3Nk5>ӵ?>9MSUњ=՝5s[O9het@GЄ0+ l32jI $Ru(tĎ8+1/e$ӟP a!Ȃets *,{Bw(ߠȪSNv)e*|2,KaT1Z <Q2Fʤu)<؀ILΪbvÚcO8) @'trd8+7tJLLG#+.#P9N~JA|0gY9gnc%[K[tDVc7ojd`N*)^)  a-VNRN8m^20+6C̴By swq]ї [)cY8_Vjk+wi?^-RKJ;{iJAu2\g:?r{hN70_8:_SyK%Q+:6Č uDw=׻_J/P[m#y˄2A,#y]X6)XkҾLz('3C ̜Ҙ$AגB͔ʿJ\\ Sih9V3EsJ0w>R>'(@ؿt/6]`QӺ%6[]N!ZYH`C-?lOS=\2tEmRV}YVd  (i+ *Zgp^wgNTY~I 8Nq%(`')XjG3<պ~,ITR61Ɯcf|G-Swf1"3W a?B1 4zF  [FBM'}Z\-bY"/QV[tce~~۠,pLpH.|/~pnXHg C6jC7|  x+|4.y2$ɧ{`3E HVEjyl'[8v/c~ (eh{:2 c0ROk8.Q<k)MpzKKQaX3*aN!$u3x>S#|ZHrn+HDW+*q4㣀h+반uI2p3#fqȣT9Q4[p헙(h2偮b4$ݼMa^ a7S&b8|HO*Ų$1ŞL#YRVr"ʃ4zA Ngt5 ʊF"SE-)yS ScmzOwۤ>e ֦106ErQ<#mx6>f~cEzδɽa곗0gcy~NR[ a#~džCbޙ]ͧzIClV7`#~M[~VHiɟf;j{<:F=QzdR'-3;F>.&.l~A.ϿuqQ\[#Ӿ>4cf =k&;Gݪ' ?z#|b# z6ƅ/nⱕjgp= llc|/RrW}*aCw$,ӳȲׅr[LC |?\XtTwS+Cb$ଜEQD_l"V ?X+r:#|JJH0V3\h֤ rY#2eU6a v^nLŋe+g޶6柘|zj/;yiC\዁rƟLaJQyʃsRW{$^AMTSC[|D19*A%畝08IKհ=3F}snqEƨLo >/RJklU0R.'|Jf%DqK$[VSE[₣c2>v ZXЖR=xĬo^1#3G 5/^s١Gդ=۔p{pA6os#E'7jm?q4M09#qŬp F jHQ՜X^dF5G9-3NؒK=@"d>܌XH*m9i6&ɾlE:΢"{z.3m2}U Ueoůeܳ]y&63mnGK<#itt@]AL 1 kw nPHPS5(wPscRvl HΦZ,ƞ0P6lb`{`|ΞcTNL*CA֗NBa7:~Li:P4fPM?p%ȡlh,X\7KkR%86VV!zC ῲհ<N` H x J8a>P^Si^ Sa&qk/ >@0ZHEy?|KUD j'A}cu `pS"e2?2DayÇҭ̄a_LA:^x?~KY? 9 Яb /%8I=5 \@S$T\_`Pa1 IDATAY|rF.p؜L=>YBq8{!,*Ҡ8H"XTi<(b"ot7…a=M;]r s;֋'0|mulV^ڶ{@bUF8p&aE#>DYVy޲h mj eyݴZ4WR:SxGLJňsT]}9[50ϛ[)"PPeY|U1P$v*׵?rz{ϏŃnIӬr>`*lA%h މ:[F̨n``u샸%hJ i#|a@؆dZh`FMƸe ǟ"5"gfӚ#[U,5w?)c5myrhC8ëžԇj9Z"V"#~g}ڋDu{T=[jaǻ2YoXٌh8̖kxMW3D&3㾬s[u̶N:+2w4Kn/Y͹We򍿅HS&riOa~Q)RTluݢ{lڈ G1[멊z=/["Qi-7Q/ޕ| Jg==_@xs@F6 ǧZ'P(XG, mvIKTrDJGؤnQ?\6MTfiYJ#Z;2q|?>3ЅRTU+^?72-VklT%^}![w8f e?_@EOzIHZ3e(foo)Z+-qF.9,Xs rX#OZEo᳁N3:k8.z8vM铒/Ȓ.oo\x3]mf#bQITKM:fg"%!S5*^(n\i ͑C !)Y(_mg/;Edohk㫟Gꍴ'zS۠be!^]p0,ј |O8]450B2-(,j `Pj.80Z l<_6Ņ8ncVAs `5яķ6c .QP 8w($N&vXdMAѲ.S+)? vlN^b߆~dW {s yi!q<!N6Yj Sp<Ď2S5 fpzZ4m#yR ր8WF* #I[#5'x+æ1FZd gCQ[G?q&Z+^NyP~}kB7E CYr:#SG]AWY0+YM P?Vz?9(nm 6ߣ@)9SHԇElRl750y̶*?ZyeVVcYxec%{W5ܩіg"YO?;!4x'm#2B<-';s-_joť)mY@⺠Ծ?ߌKveg#y~_;`\VOHWh m3 gU~2^ݯxuLS2QVAqZFEܹ~zjGkT(h%'|SIai>բ퐨TŎZN̫)tՙfSS±gI[w 닦&۳뤶Њi=TTJV ^bI흲I*Y/QiU 7W[zpMb.c< Ȓz-/Bf6 eK$Z%X o`qь!GNH|뵯ZFE?.l.qZ 1VfQ]&-]yJpRJgV"T_Z-T!߉ɾ;P\r }[oR3WotVznF"Z)},'b9R[,#_̸Pˊ4>ɮm5> )saKq3Eae,±G%d5Rkhh"B <*`(Sq~,̂`!e ݣ!ct%h@o9C,(?=vOw( 5d>(w5N3~r}E/D=َ&L V Q:.ᾢ"U=AU/6pPPNE(+ˬD6166m 3d|5 bG,O 5 A5U[ [)m)vLXg%З^跌ҐH"LJ8v:'x^|'ZX (_)Z}'8>|zfm: Ya׆γl]YwuSv}RCYm.K>%ryF!AțzQjmO {¹S6^}Ƶs6RثbyEǡ0SRGMVS[7Tϗ[ut3χw5e3sYW8c=yi_x wC=xQ >(dԶ]/ab̃j#aGqG6}NiQlZJdyEv)ߧΥ۲<%:tOC#.9~kԑLp?o mݢ6X=}e{:ej=gÚj}vTfnyeji`)!oE 󃬽ZyCN6eGjřW IV2=PE5Ulcr_JyAG9Y_\aG8FY{. 9̡2#7?9pV H&79|;S\h91YK[7j]`#fj r՗Jl-v?u$ ~1?q"ޕn!zE1j)ʰ3X07 rVXzV ~چƎeYToL _j/mFjtǯ:)cGXEvE9jkkG(Cn>ZI^>"n5XՌwpٍfq{k%o}4' ^ބTCcx) ;ˋ+)bYE!8  9 V(T e^ ce&2k!%YO7^v{*3L>xjtvLDxgv5 rU+zD$"3F@2<49_4>zX &9z>GiI>)%q0k#G^h: '|ˋK{XIdxB~\n(`1T6864^=ͣ=)s@ItHZV=,N*4@savb]h,gC\qG X-*q䂃8\Jo#ڃv= ( x/PQ.J'%u-0 \ç=4<+'V<Ov(Yc0K& tZ~Fc ̡t{".x&uA 7sU Ϝ{O%(wA V[wm{m΢Pbk"_ƮqPj]lFQߨཹȪt7FW#-+gt=9<琯[g8>u UX]bJ4lu읕l1^ϊ%OX3r[cMb!9:#uj:LdZVO1tS}Z<`3msB/Cp9Qz*gmȺm??Yʛ];{8%(VYlw`դpZ|\ LM޼1mT :sa.ڒԝ*URCٌde;0Vi֭pF Zhݪfn#X61XqW>*=z%φf>zyg viS;ip:7+WU\%?Y0 T\J ::?k=U[@ݧNpNpKqw(qwww)BTd:܃6_ SS'z-L ٘{\ƎS+$^ oUe2l9$(bϱt\zlSքA:Bݡn rl:5aqts/LR7r'3qaER=,yPD >h/SX<[ϲ/'p(ObKdGd*qNtw mzTpP)7lGh|= KQ*xK{kB̕V j `xg-7z\O]_-[ S1F+A+J<\\?DO٪k ~c79?O kڬ:t3XYT*/6zY(/vGт?k&V7D\fl?ΟFy~RGkb SX!ٖ&bf>WE"~پ{ah6} 7G2:îl:UԎ^vf5?E ÍXZn-soȝP&⯌bzVR"EF~htRDQy IDATj_6<MHkE|rShlC&;Vs; [(b?kΨ"$t:ϸL ׸G|P)u/U*HUC&nDŇq]5|G-- ;ׅ((XbSkW)ACU8zNG r0J R2٘Vhpg?mWYhC-;$tؐώW;[ofjD[mcgo[B犎 #y#G3` ͘[U[ uX!Ҝ/*h%~Ea%sG]i[Znؖ8}!'lۜuj A#P7D7PLl3XO}-b?kdnZDz}XJ).m3 +ZlҞRۺ9KZPšŹUz%Rgs05_kskcydnL_/%+X΀g>T>S!bfdXodB33μ}k߭p-Z(QKaCXAm-e6$^Rm].ǩ dW[6'$pjxoȆ[Y&]؝ByC^8GG.z^ǢE}! /"61L mi5́$$Ld)E'* FT.bkx|;֤l*x _mzK18U(<-\?Aho( BtAuȣހyt^iH!g?)lTv̦ ,ōkXG^q i#u/041T; T,/J)*vg $K )1ۋ/E^L+ 1PJrʄc5Ǹ=8*ɳPUb&)4up)0b"̀T_vTfx fgZ)>kzE!ԕ1pZE5,+;F#/x@$xfc8~* `V0 Ė8 TdpMʪao/]7$3K1{=J9,6w\c: MXc>XFieS : pkQ~ebJk\&*6Ǻ0Ş19_(ìXm㙕1Qp/[:]$\ ,3gfJJdRҿUF2 jp?aYÒ'z*cJ>Fۘš9(B 2[{Ut̀O?z&o$.ŜɒuwZG=e'Qҡ6^SGBa䮴I x_^Wh#/ze=2(Xͬ#F҉qO[p RP*)F 3:=ΊaߪO lOMOpp^EM6<4Yb1BOq0 p C!*נQŽx CG`!iBɅ=ea7beu8Ck#C9|ǕuC?YQ=dNQ=0A,jc/*B6Y[aq0lЎ˚nS8Lǔ"+S*NS)1>SWvCMe7_$ᡒlVu$QLZV?*Ig!T-P`'%qy:P[`idqz-A*\vnpdw9f]`m@dX;L`0Py9.E\+'dP긌핗a 7˵.9ZNR[~uWl# zbpTHIUPR)#+v0fa#\MyE&h2Fy*vٿZ,۶lψtTp<52̬LɌpO>W ,,z\΅qL}KĐY?m;]p^Jï_Or,ca^Y 3Z)۸K>Ǭ+\`Z鍼zWճs*myM5zRԡ&o+5w/ßFݍΤK -S#ޒ>=k#R;:['nW`T~Nj 8)z*ٶiS_v\"lY.d) +UhO*Xm%Rbmc_L7F ̠g=jYh$gҴ}5jhUlY9 48`mPOjU> apxr[ O%R`pco 2Z[d,?Jj^5Z`;k߬d0In½B\r#/muX Nvg=vFh&aaR||sRCuȝLdk3&R Ky3(UN._#S>*xM/1h4|$F l*-;ԞGv!鵪^yjkMfi0%+:!'|X9z4KC'U`IW^Z NWͷD4ZF='E&uŊnF[qJ.GcN7,%xxGzf4L+/, n~U 6 ONi^.f|5A#ƑZ>E-t cq^2A%٨2%pnR=PEs=c6YbNi>nlήm  PX^|Yo”H%(.٠Ɓ^^ʳy8 JY.ll?d5XL!2lҠ.΢996<|pJ@&6w&\D6~/Ϡ'?;b !?ep18p $a8bLXENQ.;:nz#jL 4'cCHxbO%,[^f~LSg4rB)\  &aVEiq62^hHiynpS+ SE5(#kA{+J*7H9swTc+b^JVslzeY<JC),YĖ_)+vN7GlqEϽ>gP#t'֒ 2 x/e;0>8PaUOZMJ{~ Gkkq:`asAvqD+md}zӾ.b`;g_vE2v3E?N[0z C|d0J<;7K[ͺmjYƭSy>.#.{svfKu󈚮e.&ibrmS}WqZOhW[?I!;m(+(TCkɲ!²>lt~Ř;Y[k\eCZ5L01/D_gS<[vԶq4杝QG+e|+@f5Ft7DͻSMV`JEY2!mcA_s-evκ༜I>0O}O]:C2ǵT8U8mEI8V=*#ZguZVU]o8lkeMR3YQnWFmhb~1Lx`1 /$8p[̓&" !| Wzb/op}Ec|O9S摒 >1Z|7ȍeⱆu!Sl.OQ~qZKJc.b-6b;>L}o(|<ƺiZ_xbDrl[glCkEQO.&;aPJSdXmIT|t׵(-g^NYm=nGv@UECgꩌL=t) 4F@5l#QA~2l ӿ$X#D 8h`qlN1@'q?<3&C!ls(.¦tc% 5!:!%mXENEq5{̊jtѴ0.o8:CVTj! P26Rh(¯Qk|/݅.D6*\vE7ʎ`PS:AoQ8^ vQkBLP DA-¹PGcـmn" (&3K)A P4[PJb.n4tU kA+V}$,aƜf)̮:55L ߔν :80*_943iAUG}^!'CX 3fd|;3 |ZY,6aP+, m]W@] D[/ʼPoX le j3P 5{DdKjׇzXEEN)U7x/x#V}6q%B]Rz)ouP#J^ Bp/kc.S~b'f# R&qr p>t,5Q Q'k}l86OF;[ cl9ж0XJ{$c^80*(hW)qM,wcݠeL}tau\v_HW{_XO#Yu-U8~P2͗ 唏{פ}S/&ZF1rCO*KQ vh̀B ka$͇s܄!?PO`6A!exЃP7z Oi5:pp*alhi r,P`5MG1faA{a lt'@k(+(Z^BgEI(G%rb G6 c\GYnKY&N|%&C=~.`{D?)T")J!jL[)+88I]Gq <:f]( f="z3A:r5DX 1~f..@OP2L#f5}$e)LGAqQ" B0Q!rI.Dy `DA7x)a7p[X6؃itlEs<+;Z^rңOލ6f^1;Gy5yDb,K+>SmW]/\{_n%oyn"zjkYpI&Zug_Qb2x Pk'Ő1; ܏>#4=gMο/5rVTp&jfLJ'Q%0WS5/0TBwDĤU29>~NrZ˂/p+3̏}$~}:s;8E cE' ͌p.puTJ,~_zpU}Pk7n<6h< ISa95uf?N`Iʶ!UýĩiyayʖI#u qu=tR:φR bh-[GyYWI:E}_ߙ_V6Z^DF+_x1}"UOЙv#3LZmD1.ϼiHZ]G ,1|7u.tu6ዾA%\OC,smvϙ!tDʹ8dgz uZ+ٵSM5Br)_|Oe`ݹ!eKYF`4啕z kBHhŦprCKȀh0~@8 |\C'?i5dyo֒/dyN`9Vx'6C6l:T&e<`.TA+%|;q4AN;(!02 v w`&}ZgjO8XCa04DUa]X9O1$*]jMG᷼V(>j27dx@eFQy ݠ2ŋc2ƚ) ̵,?#nqkyd4.v^XwUgϴ K,Vaj=ݬIt1ju\!vʹN9""oG8:6v Z`/ʪ|Z\$nϔfZVwY"agEʸ7m"6*jG흩mVZ󺲢-Զ1d=&Q]r{H~L#ƞ~t"D gk)X]-/9 +!#X]\E)-"'*Dc6Hj%ߚgLDz.k?X޴Q8=ZoV8 ~R‹8jm|0?ѻ3w+_׿$p+M6;\9; j'^6&G*Ti|XgJPJ qRxC<`Wu`L[zGGƲwd~ĦxNd.#eSg"p=ARX yiSYUU' S[iˋZTTe4xe̖;\!FkāKb2u6#y0Xٮmui]a쨾N5|qZ<2-]gus qo9O]݋7ݶxKf2ђVy Hb=kpS3n{Բl6EpXeEq铌|֜`r O!X 9ױrQ*(@Óg]*G:8`UP `c(G68 t@j \0ArA;ES%<6A.c~ȄZЇJ6`dvƲil)pg`8_9FMOo6c%e>x q',4%X@eB)^Nc:a\$20 ߱(il8X/o,qI(Nhڌ OC $[d E8+*T`LlCCX9([.CTRaV耋11f#F+xPB8X:V^@W8Cuk4R\ 4aeP_.vzجK%%c%x* /cE1/7Rp/ƫᡉ 2'm@}fҴDĘeNW >o\:y// kZZiI;3Oɮnj@2g.1x)c5s] zGCqX9j=dq[ PuY *].HZ{v쎘 pbQj?!E=׻ɳlv4WPCAD87 6bV\f:(l&/qᧁuϙLO>~VA(n[%"k֔bjbtPe2f>)mzxg%IZoڬ.kĀG,ebex<2.*{stfaiH4J%{~?tZa2eeEh!܃n* 0 Fhl E 6RU9VXkB'i5A(ʆ@OHa! @&Z؀SЎ:1E 5C:CB`@Mg1=T7"C6ũxQwLY ،=чi0ކW̯V[.Z0p@$LxO>A>'ԎΓSH٩5mQL(($Pnh6PE7p*ҠdHL`2U+ Y<.a6`2` `/76]g_>^ݸH]Cr\ŠY_l ¸ְZ/QuX/mrjkxg*46l=oAvvɆ&:}T+lp9"VVx3~X55vke+N.VZi_/|9aR6鼮V$KC#+{Xr6g"Ewp7:ڈO\֬/bNejO2~V_ZI6 a-2]Du_Vʆ~ i8 U*I,*:YG!=hlfbn7Z>=-/CeS~^[dF'jr̘|0P4ݵJ=f"=b{[!!r!E6 $Mc5ӨrB[^`S-٦6 pU MOsSPڦ_>{gM'ZEQ-9{g G8dpOJ_[uaC0L*{keU0k lʀ4Z- hT7Sϳe2 ¼lr<ؼ˖4:x߻(ykP`GpU<~e N8v]Om].bS2/ycv\P@p/|u>¶vT  lWIq ^gzG )QGw6hMlB~R9e:|FzGm .[!U|l¯, U}0Ay l%}!SUj vV`GF82=V TegPADXJ@Q a 9 }Ʌ ϼ< I4V50 bCE j1LJW \;jav*cqU.s$:@g?OΒ{Š3v:f S/= NJ,^*YWU6963\~Mjnاq0*Q\OS|Jk)MҊZ33I6Fj $'{6T"f|g^ mW:y@7 _ d Nmz.p{$b`Khxpe1Cw݊rDD{^Z^JY Ss&27:x௵qXoHy5XqEQ&gEb\JrYHYr @CsË|Up;%cs'55}Vj .Xcnv@}ԫD)FDMnؐ:Ju\zšL=Cg|8,vOQp cvW!UK}moojop3:%ZyB{w6TTLu {*T-;eeukłW6zѬh,fI$kTVaUm62Y_}IC.X拝c(f6c6>kp'F*g}6@5ۨ3LƆLDY8bw vU-2BY32c+^J#ɑѕ2&MG y|h~X\ EV#s܊*#-2xA_| u{:3:l#>).w{OQd5'P{;gi2Uja>hcYC &h3-iSwܾͫ"O7^Fz?C']>%IZn[w-̻E~G2r8FY;Ҙ"ToTzb?v]q/o]n]G^+`wPMt6C- ^EzH17C8yM4ޤ Dfiu_+ps iEUyjJT%\BX`c8QrOs_w < ` =sBnhux-%,(BDkVwu5-E4~:"H3r<?p/t}Bfp"IRdsWڇ_hMY6;=F"ư;J7Ǭ%Y1ƴO@̞ᇾ!p5x ҊV:NVA+hb2 $H>1;Z{e6~秵tXc!-d Lt D_ZT[3Eg"R>vX%^ueM|cm1F[w ވs.T5Y2F,іk߂װ+?Ҧb0ߎ vІ4AWCCe|KfE0S3~2;{#}bi&ZmcVFfaMV]d/ʃ+ȍFEepkP/L{c}CԂFL [ /8;XxD0(͆]?VWVjHMz+ݰR->%A#xsxI%a c){b1.k@v `;8 Y;9CaA'flȍsq FvXy`,aX1UCtEVEFЋQSa64 KOHh3x +PQċ"l6gOx$7\h,yZͰu:h+ {X}e71A<CXn5gSsCaTƟir[SI)i eĵ0:cuX2Y?{F`,BzhB5+|˲*]y2a@M1zijkYjrqP$zO/1q~K|Vڤ?y7B.Vq9\7g/'h\@r]1vH#`e, Q w5¡! 'Z1=P;V *j~Oߤr0O4rkEܱgcdCA#֏odzb[Օ z$ aM{$>GF~/kVбjK?b}=/keoO v:sNH#%gI9UJGS7yӊ|S*W暍>U+0C}RYEk($sKZ*Z`Nejj&ja<dW|TwHMXƶ*?$j؏u“x a夏<ʫIPfX.6c_XJ*;D!@u(Á*̆0y'Z? %TᣚK[ x<'kȯcXݧʇi ; _Xx.JݰZa$5=pD6/b}/pC)5Ez&էb j}Sؒ>HccU!Dwta*B#"j/! _ʸ[8 ~fkVQ/k Mf;Cx9Ol DO &l^wqkՉnK'(Z7&j}S'1cmڝ@Ѻ48{Yjl; uLJ5>J4ՔVV{?!":`6u ʚ^B}$ݘm٧]2;XuTlѝCBeQ-6ڞ['E|~xZoX0#X'[zSISClK=Jcoc 3U6040l*#!pJWkC A-Fv^Ql-Öm0g[1됦O7Z9Nd9m'K ^P]E[[ڨ&`8Tif*{֙Ak w4n ]ґ%U/g1o7"[R`JԇeXV’<5TlG‹y=n2?Di&˫D^(Ѫ_#3;/BYhrjօ{h;|G^M@|0'fm'%cӰl.=vVtjkBS"SU]QY`2ˉ qr1Zk)hqnh_4=*LhWQ Mb)TpVmty [y Xg?AY]Nq'?b?8B-jVhAd\c֋e^}Ϩ,M~9~_d2/$hk'@\71\WI"ͧW}eRrV|5Hu`NVFeƫdKdU6'U)sǼ"̜QO\]cgjdDZI3sۖU\3{3Qѓ?)s7YZ W!>׊P-|%/!/ /_=%vsߛw_lPTOsV\uϜ`Ur.͡r$ .]?C}1PZ;l8{ljt7N"x쨿,UYf/  IDAT >1WR}bzgӝ-H2ͧGH<ZeJ~kd@U p8RHm4+9Z>)/2MւXhNJTrՑeykqIoS|=sj?obXvJR052hk8ٹƊs7y;AN+>6 ż< (097w:;iza Xf-2vEGc-QӜ"bNxњ9NQͶ3j>)B""@&V-k. x(-y0*'_lJI2wXm3ݬgnc~qvGhuz`.zosep5F;m]ZɖHLe#xnkvsxȅ- X[l'>^">U_ЦYSp a옶9-1Hl^Oask>-M5^lmް@-8mZosx: [J(y^+.bR=>^ !7k*a^Mm~*aU\&3z@q-uܓYJvîQz_{?`UkDfw_|m l;NGU c@{5"52z,J39W\㬈sl6K+ߢ@1Ö^ؖ1FwESk$vP<Pk_J Yռy+Q>Xd+ҧu={hSEm%čl\[oAIkRը̨`oi"dݑ8(??fUhr-PtVFt4Ex$9jYHa4KaW?\Vb%6aqqPѯVPɛ߆>xn}!豸 wW\mFIͺR)p0^;1,f[duH6hE\?G?3z}밑-k!MGL RG >]vdۘCZ ulnGs۫,/cJ詻:;= kTV-FK`lhtԛvmol{\g*(+sIܤj4Y}]-*xUU6WȥօK> .akQ_TRw3}Vs":}ɘٲ Es8@uU5RUj*&ZБ%G8.v(?G dB|1Y3.i>jc\)ֲ<[98T6cT8, ΣN/g[5|@[Q =.*mj3ο4PZYWGBb̫\kAz[_y6盫vHY mX /y"mbN7SX H;d&ӏ5ؓc5v |XDiTuŲjVPe5l˺rUtu:L.F#@l48jp5և;`_͇jԎJ|pTPUmPArwڲ-5lP +AcGpeLLEW=6Ϧ_Üj!aC\C&FM0FZ~Ffh'P-f) [=$b"8SӰ?m_+idLb _ZH†fX ml0(t?T2hx +oHu<~aϨti ]SxmÇ| ^NDK@9h> AVAu#Ub*ra"܇xuVݴ-Xjm|?B#)\p=vn@2¬2t.8泺+o7> D+^ 'xGi~=ٿ.k٬el,XL!Fk}G膮}cA;j~N mUw%f}ܘl5wqf :Y="ֲӊ|vtvʢ#W}G9ɷ]k﫵a+S:2SU?1>˵zPG2¿2Ēm ")"k^Mwֈ=WUQ-}(9a)q)f*acPrʴ:`~h'xENñU\*_8^AERzr hSWN*E3KyBlޣ&x[̳7bά|3g6[CxsaF_ן+VQ:hR͒q$sH 3O(M{,x]8,Cͯ]~aMs8j6R-/gƘe {I2vIl+6nJm{*㝤m!>G``<9 k6ڟ͟wf?Pw#<ŵ?+vzbRS#sy1c"J3Z1&$m NS)}4 +`_C HX$``MZO]Xqoinȁ;W`?pZb^Z ^DAjċfqRgCN6n[H"FF P,NQ}F0ASn8{ ( &vVuq@lMC0F3 h"Nܔ0FAk U  ?t a +bԋ `&68M pMc7+cb ++ρXxT:̻R|‹R'4T. ! ;8BO.xl@((Y%0Y`m`!5i$)XVtc$kJw6tSlzymg`;Q, (-d8IE/3KDu+t]v@Im`2o/ACs5EW2HI&=hzX~>T|"E?rW@uV5כ ,&3V9 ߃WիʟRWV:H9Y1ؾq@uq4qd>Ϭa,#C:1><6,K>+oʬUR VIǤW]rb_w5|:W _/}o7A*7xY|3'88EqRb[ Ikc(t4pwq- WJϬF)-Vn= >fv6g~-.9/eFd5>dfH-~"SJ5'˜o5*hIT9a6-LnHҗ^JL.d1O}uc Qcz"=Ϭ.{Y#`ifV4'ϿOehCPKY\h7P$_.n>ܾX颖pGCuDm}2ɭeh+I̠6t87Uf~33G9`XhQ0v#.QS(iNCQ!.PG"O;l,fp.` Z0~jQ&u+C (*f.@v8ǛNL#=|7'UZ5[M E\6u Pu3譨F56 H4 %:MME]0ӈY V"+yV 0z@':Ey dǩ'K,M{x-Ţ$~]hԔ\0N xM*ؖXS0 N+p>܁Pr/'AkG4̆f2`J )f>X ?XaեTRg $0wILy L-eZvhf,.2~p){뮞h 𤚏#lǽ9rzYGM3haZGXXkwFaOJmm$X'6a9-I]q7IfCZ]4C4ov 7J[yBP[_9I^.Op,Q#'هWlFA\j L]I FCzjMek|kceؒHvζ%l#waٶ'|C/V*=;Ev;D]j[KzU斋EN*<()W* пtGY9P*Thҙ7?GgCuN~;i7.[qGMVYmbc6:[z( !uqTQ]g&+M>}\?͑J٬fߘ'C*FgM14NJ) 8Zab0P C 5E?CNgIq cf@8 e+ Vn:R(36t8~lI5 c:XW Yl0|#NS^p@yh y͗dGЋ2НEx/' 9vx^SA( ֳ =s(jg}h `/ -J,N%' v:G.TO eSpv! N/K0d?ml ]"vc\rg//ʙ?IuVO]iC2/̚ n(^5oRqI%X^ʵ]>"%OՀGT̑ylV"흭sfuBrpRK>Z&OIك,̾y聶+q>}~JsOŴi?9v>fasg,}_T:Tg \Utai1T+ǘcH<z,Yy;cqR4mݦ%=ʸϵgOɶ41JӕR:YFyqSv\Qtev6$!O^( eUvH3oi|cR{~.iaZŸ[hCϱ46_.: /ٟ^kz1GGKR?.#1}dfm-oS[%-5JUodaɰȡpMњא*QtlmV̻' Cg_~|n&HyPRbLGwx_#Y¸n LTܠ,G|ToDmovwҬa"p'fX!K<^>R [@Ɩ6Xr|#l5/QS8q5SSM+^p>UjaKtR;[uh3vقB}!%dygrg3 yR}I'9l^`1M*Z~u3uQ };X Vql.?m0入R4Wn2_!.jN(oaM-xb/̳)PPq[q5#YoJY$cj!ձ6iQ]&fkTfYnkt%F"UOp]d7p|oTJ IDATJk/G#veꈋj]6[_%`U ,q%*/1ҟX8QLG > zjj+h9P r`q7>PhfoS'8‡QzWLok[84cy q>U bN؋a070up{ 5E<4fMų7Nn `'Ka)P>v ^Fc*-@T?.6joZGhB %ȉ`5t©0Ja507<. i8+>`ch9S 2 IVaQ8.Y SO\s/nyuA X3)I up̶֛ǡSyO|bx c2,(aQF,OWpg\}a+rCcSy'b}LwTgyh5XT2Mê",>da42 |E \X* 9Mތ7]R xEl2T$ -)"NJ #R<0vC fZ[ e xXB1m#DW,lDk]4m ZZu2Zx*孢dIzdK/yWҞ=pw,)}0Ren3Q"kodv<}UxwOyhkРI+֫E_'e\j'6]f͆4b#aeqke~Us2#V^}ZX/\| R˧Օz``mww2Zjn:n;~ȿXkXsuRd HO-'kOD.aikh-T{ˬlyXT0 <( 實_XCن ]s(&h+l{dHIa}73H Zj۴$򖍕I=Smm>d_c뼬hrا煯?p#`I)^W$V eE*a]_l/xא-]a33֑UWZ?nsq+sJ55kL_(?3?ĎYq,! hN xZ_jQ>3B(Y֟ӭZz3&v*e+c4}cAƝR9R0b1~+i2@Ty{)1R7lh RvK뱒ci=oGz%cJujxSNZЉ7J Xhx˯tKKKZ Z9;t50*yjyaJMev_)*Ja%B(%Z;KCDPg%k$⵬jgl)S'<.b!ItDd٨`(5 %IcO5_+S!ǰ;EW`k{>Vt68e9<(~X-DH,8V,BC 12,܂&#(A NE.GBSli0v.hmxh=1%fUp0̣"LZ 6NT;*/&졖~Ae3'Jci9\8 Q= $)v1:1 _@l uC2Z fAQ l4%,Ȱ^Q*&]巔m| *) qbXK&b$JJ#XOp[Ei4L6Qnua؟R#V! nS( o-^1LR0%8 Rq.X!&fp(#&(i=[+t 964$D3:Ƽ(ť7_i-Lɂ9+)`ڨ ^.J͝*lm*㋑&&+\Zi}6wZ a.1npS&Mvߕ٣bȩre%-V&[Y3oe]RV3J:`8 O`҇sh헕wg0~ԗ{Yl7pw^|TF?%[{kY!J&ug-??w;I.͚Hc J=vQp/h).J}vU9hdZb1Ca3a޳jKY]QB]!Ρztfty ֓J{qK)*wvIQgE_.^?w)Uğ1z[!r;r9؏8:;-YʞIa,%l7\tC#nm`0Y3'P9m3bstO.:-)lKWyeyz#x5E3]$HU)JSwxS]&×`h*WJq0(}9/LZ;遾|d F|h5}yR Oe;] 4L%xffM3h華vg[[q$Xf4-_!;W M**p svOJpw`?/O%UD]`9/[mGAibH+X,XiL]=2~yeged= ,ʚWHoCJ}4U}|B-cMY"'YoxXv0ld[`ІRT`VE.3][4o{1?NK8v5lmnkh[q2j@"Z|-6S-L/:Y_qGsl<9Wx(̚{wK'K+_q]GZ-'wIƂo2|`[8熽z MtE萹fe>5)s1,kMQp-EmӓU;"8;%w*dr$?60Y7zLKo};2.RUQMc0#zJn͠p|9cK4e9\bY,b޷f5hȿb)f7ΆZ7mΆڒtp'h/N ZYK)Z|Gy)ސT\}$uU!,2>G9XA6ṢEqoh7ntC0OdMϺ839M?yL9-Ndx=z>a'#G\e( oBi=EMkY(X,{] Ϫk[jY9Eq4t_?5+=:h3UǺbV.;:s9k4>LRS6:5nU#"egnk3O5tٓ=tHk܉P\!u*#k)YSX;؉ia{NqLPIWbaӨ4^5טc C&Zˏs5N7dNOX^0Ϻhec79Rl;䛩u.h 㾿bq >V_鸊rasgo ԕwkpJS7 U`> mgݵ4 NcyG|Z_rQ5EBq͊~j^i(5h1?)tMt c;,sy9eOyx !7kD*V*1Z1<%l'90Az%VU'+ '2= DI3N==/RV<hm9J|?M)WI}f݅mk"/֒Jy{ S]_ l\k' Jea5+ [aikE <5 q#O4F@*}… *Q$ F 2a>0(6CpYŸpuX 0h~(.,i͇pN:T~b,B b3e )vRv8@E3xG pK ( GS͆(QڱX mKy8:1pZ p04b{X S`=t*a=74o,z'I H n:N 41N0 >G9p@Ԋ„ؖ(=_*Mlք+`s9x/fG;xm!A ̇8D;/4QUMJ* b%*O"ֱW`ec+Sq 3dOX_ of +b1z-t}2݂&S'xA 8Moԯ>uzºD4r$;w+a<}1Fí KGlj_ATG^BsڪiJ [qx<.I;ҽ-ϭ) K,+#NFhc<@BM& 򬭡``!y5i ah07] M/NUFo֜FE1;B'z|8T kw^Xe]!tQ( _庑.bQe N pf=/VU f!ө%mӪ[B3EͬV+_]t$?ޅ*gIzfXMȭ8 }CHB\f6ǘxwfrܒQc:FSG0uL/"IM,jlL뮥gUK*JՅn@NG&[?X#Wv󨫕4y6e#lh 2u3X(㫮=Ojwi"i>:8Mg\]LEY,IFULMp0cJ&%8E;ɱR*k&ihd{ak8%;^^t.[ִRg;'F[a=W_M?fk<TZK\Tj.h_ڼ+>kgxS#CoѪ/咽í0@* }:73JPqT\ah8Pj;|%KuFNQ IutC |N pw}9eq?1-Mm5:"MNPgIhTJ(=2l{Վ1u֚f~jٰM<(xNx( woBNwgPT`9UaT(R by]d.@_$R l.uǯ9; dA4^%PGX.ŎAQq>b™*s'D=KVC}yA?!kke[>%KV+o]rq؀&@Ǡ8Kx%։͔ߋ;c.DL+~( zwMa?-^I1l<놷1 G|t,lX]hi SQѓ`$?EؑR%]dU/tV!c*t ٨j>w[ۮr1WZ69?/A?3XeZ:TO#Si~Bo"uUnE2tWdM ZSӾ>^F{κG'mS?f2 Df3Ӆb>5@_ĕ}>OQW05 ZD}< _)0[6`Y&r{S-BWxW3Zk V g,/ߋ _v>l6xY6t_)ѷ><[ Lug VOl ]TɌ.hv+aU + ,v^%ݿ2ՐCSW_,rH4핑WrU^[`>kpi?__>Oʦ*Z"/_LӔYPY*gUɚ9*}j8ٖ;xkmFv7 _}Z)ݒT )>Y~k{Ti{YV2/>,*b(ln } A6C~dϦE.`Y Lon&kwVL]*qOzqL#Y?1G_(nS;+gYs(>8q ʂepKԤ6'/)&=I̦HJm:b)84ާED`4\%!0v0ob%|h -8 s#N[E hk `{K2w+.> bCYܵ@}:I?^!Ǔ 7;`ͨ4i7 4ĊpP0 C^x{0SL`(PIWX{'BRE% `G% n~AF]4޳2||yVl &J9U ր`8hIA. y3ރxf/NZl̏ :\!BC\ޑ6qR)7\<˂DE"~l=T6 {PW?k1夷 b/zW`!8:1V,/Euaq 0EMv-OOrgf-C@wz?NfYn_a#k05\" e*"%,j%{~ڨ tF=F{P-{!ebMڑ4LZtkTVoLCB1'D勜YTag5ߜ&jPͥd .*!Z;m 5ɒR7[N >F~r^>-!-ۤFE +{BGDr8l`p-RkB~9?+M!Sza5`C799/)E$™84eTK;Uq/B4D̍}-N/PΌ Oa9a cQҁbUGP)QJ8;BQ͸bdl_j)ꐍv:5 ʨmZ&W'9;*V /kjl+;V>OM)0q/\Ԃ2Yn)0ZH't1͠ h G;f ԅbfgx a 2**Fw %%1]/dgzIy¡{1@F YJx^J}Pg`#]MaRgH&}r\&V+ WAX"/gh Up lsƆ>hbIXɋC} $)b'lc<%at# AWVP C+` Lc\f'X̦*X*@n +Xr{l\71ANIEi&XQFN5>?iSQ7D`a=),@a)f':jbaΣyB,fi\QbXuяyև6{1zn~=]5@gKnzZKO/_ sQC~9*|0%zF ֥6YMh uWpNςdac^Vz+[&r}y$1Yn={[jmN<-lmr{cifm5һoxs<ϰ>A: ]NXJpw{BzSE&3+3^J{FE$R6[fMk. Wg;c=y!yke {Igev} 50O̠\?e$iyL(V[g\I/!m֞}#ٓi~O^NPZSR -i&uZj؏G+^[|e,me8 ; ;n,xm̙=VxXK>ĤJ_a{*K[܈C#Bs 4%IJgM^Sꏰ~~;-PێJCbypI`m^JrKox~'rrzK*ENi^j#j^O;ȡI3jIX ۼ->&@ $ɢw7/wu>wLVp*ǖCqlkG̲TAۑGi4p"5BMi$ķ`eªX; +5p 3| nl6pa :0 ¥Up4+K*LDuOm)½&vcOW`"b|U^ʤSE" i$yx'DNS0/Qf1,cxOhGi,q؏0Rzɦ=h\eY9#!c#_X ie.a6t VQx *R'ր BaA,í +xpq>V"=˴M-2lb;q|`)> JXp!#bWBC@yԌoOUU4^MXGV]e{p$.9gl0o*6+vD!/WF(aDAnn.3n;)ga_,!l1)VoL ҘSjPü4?k/a_:Ʋ:ò9Xݱ /OiP÷EiB4 &BՁ f*%]T(l4̾ɔX} BFQKtijx@D >orgS#-ƉVJ~1r*a0Z?)\.1_H{Wnf0>k_oW0Z>ڦ9m$`քn@.S*zRI-ZC}xx9n|r-yߘ?@b)88iT{ ~t鐱֡J=\VB:&E˦G`/K@?f7Ɋm-Ժ!VK)P2j/4 ~-6U6S߾n8Zc8(\ wg÷GLtuTJ"ԥ&RUgRv1Dyh_rk쌳0> =A"wߦ|M.淡05*kJJq7t~P%EQ<2:MbpCT [NjT1_QE b` ڢ#/>8foTQ%_:iq>g__~zoH%"@"ٻ~!h* FhGqEsEʴ1$h[6=hjxQyH'rؔ=V)-.^4s J!,_a)74eqr(CBhm7.&x[x6aGK Z.ޏ|b؃TB_*>Z6씼(ҹ{eI6ݱݹ6G/r%9W ~ v@ٟ"R+-t-!(i*3g8foTXPB%Kl:*-1͸~*N+Wn!ga\a@'.u/@!xC# MkGS/zSm,n(ACK EDu2%M#rY!3 .ۚox]ǝȯ b4ʿkuDj `3oH5鳖Q%iȥ И}Qka#~3~~Jfq%eB ama؏,=in../ֳ![C4>h=dC9g#^?FÌzq3rOP٫DN/1Ok?-hͬ*ofb00 fDi+vA+]Y|ιl~R,_Z(q - v;}1--FhT"d˩ZGW]Ϣ;ړ%m.^׆s߻~]ڜh|>{iR./V[BW^($a?& /a)h2C%KӀR'Y;n^/Ԥd2/XI4jBnQ rb v`YG%R_%Axvzy(?Ŋb*\&S$CS(` -!550^f 6 Pމ| KMR?O3]PkaVY 1 :@7xhI-i<+i.!,e~97BV*܃ **:t?[!2q_ ( ,8,?`+;l;!``Ԛ51p :%a0ϣA`2?i=4{ ]q>xjŇZ܀xVIx73y,{%|@2}DY#5z5^Zo*PIZܻ_**u0wJ>a8fw*gc:B U>\҉ofR+֬ kZnf򵠂ПYw}٧`lܞY;;tKi%3pmoP:1S$[j_/,8 Rv$n3&;.drQ^3΃aЙ?BB;)R忭If^yfAb(Ku0 Qd\ ӓ}}ߵgz]LSQ6\i՟/c@A wLnsÎ# e5_npmB4ZK Ϩ9*PO;}|yڼxFp(Xl=4V5kOG GmFfufhh6<"qۀ IDAT]1CjW ^qynxڐC@T>Y{NͥW!&eM޵݉ruQf2 VHy~f x;X9*3*?ʢ` q mĎRE:D Q#)iXxϳ7#17԰tc}.{ c9L5t, 0ͭq̕tE-c͍oШjƺ# Zi LTR4 ux$ݠ $ZON7CA|*@_q#K0Vh p b \PG\w0MTu!tGaxH!#=;6xr`w( iz(p gsC:̂#x㠞xO!h6H'uPAh ` y󸞭%hKacKClϼc:i < NM-dTEn '# q RͰ~H uK`4FB_Ȓ7a1(&S?($AnX^lE.nPe?vU]8J`//e!S:Ea!dc/,٘yk*D Pڌ9zhY)LGltיff[92e֦'>`E\#V1;Rc5['W)v3zwcBnXF"N^Unj%ֶѦ@2'P&Q۲( G?~_kճJ>멝Qk^?8y:k<>j Wc_lEF/#UǮJ{G˾~5coI1/Գ7kR8u V)zi͓p-uIF&&1<+@{ Sb3gY;Wr],tyhO1 Faflh 0mc] Ũ_QB;>柂~#1XhnW;eBlkgLoh0HR%wvL k?`kdO';m ׋(s}1L]:$;~<@>11Kl9dz"a8Z_H>!u:NHo&$.o]t<`42cVy3<ɬKFܶ|ǂIU|?WK|5/CR h&)l93i_1tl%Wc!Qְ (0NbEKT(lb~-`qhǚ7H2P&@Xs90T>P G_QXjcifvb2hN0;q;C0tl X)\lsXu(-JaP`Ha94̢|PeLOhW|o3 {bK­c EV:3`J7p=A ,L(oX]NT6)/"!^l+|}`ǢFYP8 _aY89_$^- vÝuQmxkg]IZ5wi%9J?髋C33pxC塂aUSz;Y_³K$g/.O?2MupǰuL{橎E,bDx7-%6&@ʧߛk/܊/ַȗm&VzdSz:ꍬR>!ōpz^Hzs6, 7kUD5ϝ?%ac"ifrm=vjAq(u6$Uc?W[ZmQ/iVOYm'~Q ul..\ET6毴\f%:Yo<^oh)16`ks29S^&ʿb_c^kUKnB*h$Eձc J硸O[9mrW #;㇝K{A{~ zO4lOk8c֜G k+(c[(o }tM1&e ~ $uyz^&x ʙQ@04](ZDhNE$ȟZܢOK)gǶ,_`3X*Rܚ+K,-FDod_wfE߅Q3tW3 A}ܔľY>be 4eH!_]F }fWxT7{zG`?'l87,(DؼOIxn!h3Dk V\J0 lB*M$NM9a7f`k9_aB3ۚ--B0טỎh/C|cXh]9x,)lAXoԷ?uF Y_f8)gC1C+f@n>wӬhߡ7l/>ޢhB 7LքmPdMlr&l GF7 cF,*=g`R^/|4\RBӲЫG1?ySΆ=ݕ{f I 0Š`"5fGO[o&6,OxR$v ]ړ]d6;A̯)lzOj;BJk S Q}:SױގVݕڏg8sE(ՐSՖ RSG,ϐQ/%k='"],{ 7Vmms-ST8݀^8 G}p#EcMgTh 4C)J ,oip!lЇ@0'*џٸ `17o/Cf56s'.}֒SMSk-Թ LGUpFװ4\>mfm:g\^[yx,&逹^WbK&^ :XZDE1->oaL[mmU;i"Rsz{EtTCkm2EÆXzZ )}+Kp1 2EIϜoS@TbhU^- Lhz|ZcJƎ퍮o(`\,$?5iHP--Cil\vVW |iv(ú[eq҆f=G|qE}*@n(mGᥠm%cT% [Mu˿U[֞74"kh_U]}]Tlg5D^3,xA@x 7զ&o ZgĵԩkRfH{gjlj'Ssd?~$lm9sќ"hmQa{x%ՑrCyôūUŬm Rrc1rwt8lJ<crʩsoHSn~/4J]`-q΢֣(K?'ȓDkG^ L[1BnG%%2=4#NV[<m(]$Nxg_{|Kg%R*ѡ"KFNޖ阇ū>̋KY}&q?mxL*Jz2.SC_U])kG -l,F ߬2=TU%㓻Qo^=lQȪn*d ,Smhm,ʲ$ڊL Z@cz%O^t2Rk[ClXoa2E}t7̟=Ӛhgf9E?b ?X2̇(Ϫ4wKFg7ri\ͷ3FAry_ SɍW jlFSF OϨ#ݠ5x PũD=^f?jC]xQ$6yvВJF\О]X a O ;vp:68. pBcq -k0hp-0&R , V(y/y#RGщNHS{s,I`60'g_)IR VZ^\̰'L'5#6NPu_o`#3OSw4Fe^1PAW6,_̐οWF 1ĶasSHa'}1uhx'Q8wv,Dzb+,%9? Xs)!cw,%?aeT f1Rw}WG^4c:%s#tvؽ31k'H59:F§YRdYޭTvhzW]!s *-xBݭ@qP Kqw>ݡݝGc]O;~Q66'ک [^w~>Z$NA!̲"gx#ék^SiIQxIVC+ x zrL01 MzFZ!OruWKv[gQJ]o-yj fn"O9shگUُǜn M ^NJ9kZ~BN,g|`9K ~R#!fEtYnk?ێDEgtޙ[g5Uv^Õn8ǂ"\bΆ[YO~#0D=ԁXnuԎi[Zj4V*bw r~{@9eUKYKnBX/h#׼̀z9iWmxJ Cw9;oؘmݼ_5\Kíbi)[a^NA[ 3Bn&4֒i0Eo7~Z'A$:q0"=$08$[;yZ>C+ IDATF%HWe;9?ӊV/L,9S}0mNAn>W9L)ȩF1#S7cUT fwUcjʩU96d`Gz檪jmxa.03h v|-hsc5w?0[x<; #K<*PdT=Ň.CmċԈp.nhxJS9!4@ *rZ}b2NRKʦΩj/S,+18(K;0&0%^ױ%36Gr֏9qNb'™ jc+P@c" u!kBdWbE#!hOqް S&Gu\R^8X/`*|y>H“Nu<걂oWTNm]1X)/W;im*G#p V2>.UJh}1V?7Ql2 BEw`?{)zq `p*iFjَmB-Nn5 Rl`%4&,))/| al)P:C)h+.B< ՞3vqgf/9lȌ𞁏to_+?ScmMy5sqv۟(?#*vO 雖NSq x=e w;r/3ܨ`t0_f[ݷ[W%7eK?X=|";d+wfN@9r9;hʇtEtV3x{}XA܋ auuL!>-'zdCXAl*ޕeoZ)ȕ1_ZV)[DiEiv۹H?zh}㣖t =KGMp/-_)V FoWѓ<Γhf8[}fq RjaMW+=YR;?EyrS/KxFBUO:а((ïQ"*"'ik be)r=MKdAQXjhk, }vO [mLš1ߣZExXRcͰ`EGcBĻ9 wPFJ ȅJaekYXh?Oxw^ ۡqQ =Py ak=PM/T) 9!90W ڨ-Sua^ohSDk}-mGciU}ĩ'SKdiԈ }Ig/$,ɢd(B 0'821: ̻=ڣFް zI{U WeI'S>%0p GUv9}N ݤ,XP(e'XM^ʳBUŨ }V q|yw!ep7mxۀAvIvi ")^c():Ae1p e^hEr@?Y XUC A]ܧv dP[5waZJ@~-gIXh 9p;eB 7Z1`OXw0rA]HSd(%*fc,OfYSl7*! tdgJM l]iDbk}l 5و"]|PkE QM#FLd{>=\Ի?7s.AV@ﮭÄjaWU~w%A(s\"Df=\z:bmf#4DVȏĔ VA՝D9KOt:"GDU~Lwj{׶/5Gl^ NI}"hCl\+/  -_C^]&liD"Ov?Ħ?tLWy/_*1-D=5j}m0K_mcͩ*'['¾SW[(T<Lja2s֟T@.'fPUY.N๵̧cC(ĪxNxbNU\Z;:㄃YܪIu>g6VzC[r^%ngd2+f$k̽u>34p1ͼ<;֞U#,bύfTq?- 2+z'xz /{ڵ^vXּg|oJmVkYS>[K*ЮJ,:l,k|PG ;?uګjmx$Gi1R&k5ۖU?hڂǔc H_YQ߈Xs,7a|_TI<0@:d5'_b50&jmsNHQ^b*Ԭg<}|^><'{gUu4?N1sd0w]>;U۪'k5F5@,O9p+"8VaS;`%@PM$aT wȄPYS=.rt+ TIKe 9*{\aM&HU;.Ł\P }12mvF&cp˸CB$l[ 6~ƪZ[0f ЃzAJ{ v8[IW ]ƽt]}jV`sL  0 nvuR9hSlЇC D~ѠjZ>UT8c2FMo={ʴZn4=]K]lK0i=7;͙& 6Ec= )&6 K;j%8$d2C{c=P`6磡* va#"\eS0\M fcy{mIrzxÿ(c~Jo}Kj*v;dܠ'z D>Qz_l=a$VU]`>B3W4Y2Ì`%fk":~yf%u򆣙#&l{OQ6k[4u|/Y}m(xO呮ֶKOí@!Nef42)YV aXA)bLU5VUPf[P f4[TLQY_^+VMy?6hvSd+\AYwp n*N *4 :gn3ֱ"d63뽬j5l=+89%,;ci%e@sdl2Gʢ]QkD04v0[N8|7ӳ&_e f1ԦǶ'\S+\Q w<Us(;8 &RIj%Q޼+#eU0u/FSm,¥x`("X~5=ksƚ_[2/$-Li ́'Vj1z@[KTo`UyXEG &BDg 40Ԁ XGNS*C5&ЁvT8:R c_)Ak DlAЍeQ:+b+^fc%. é+/JR !\JlUT.$S;jLL؎"i ExT&bu[JN1tDX`3=jq-Ն+cX a^R h2pުPo^P v4 A;5~QOޫAT :crc;v{SguՃUHGj&PE|ЅScʉMo(-j7ՃTBū, k/L=wB҇2>IUpVQͨAA^p< Ca<^au&)lGeL+n-Hb0P,1P\u5l[>qZR7Q/ah{fG|2)V}W\nM}i+=ԛ $@*.U;DSLŽsgWhXU;Jo켫wV\ Wmz:[h8![Ew!y^W|BI3z'h`DzS;!('a57Q@sC2~zV$epz5WtM+7tvnoOs=ԃL+ ڰj(֘o<NR4K!\Y謈/pɬI6s';z֔ק$(mlXv3Y:譠xPwfA5ۨ柔ei/TV/ɂL܈y5p~MpӚjSGdks۟!mQ!X=T QU=Ϭj|`Vi;R xBwX;7j$;q'Fr!(zSl$I=eh$ȣ5v tcalC6}dD1g=RHR[e **BNb6+@:͞ZUFSzv@> h^۱ZYKa6m$쀭`M;1š:=f0eÃxr fw"_FliWˁǾUjn5w"?auu۴LƌVf64̂xE;9\A[B[0~ 8@jyGeΐ<݌]/Wm˲3/۫/Uu7Ũ=D%U/됺!7Kj: ֳOÌީSzc10+㫭.̓Xlt YōQS_~Zo5bZ@];4K0o zapCA8 Ո^`6+^b4L5\J9*W):yɠj3a)> /~e0R-Gx =Ћ5NЙ֑aQ A%i DNlAO!<j3sAp eVC9%,zr7P u>}Cyj;S<&CathF+r?ІRk<lT!K8A>ޘ7hfaICs0b`e!V:- es,/q, sc60&˳d { ̏v%jJ?)Aq>wM7sVM83?^hI-enWrs[p _:o5ʫ9 &(26^*.?zl4PǨZXm5\Y2׋_ګ"gFg7[Z[ikhkFW"Ěp+eE@?pOU2 SPZ F[%#V+8^\v5_ϳ#Z k=eAONʁ;'Ӛ^>=^<f[) 52sX]c{Fp<MSԠ3V#y!;Z8}^ܩ2}SkDZ/Н0$C.a̦'y,Cyd_`wYmom4NХȅi^VDGlc76(,ܧ-n\kŶ{oV~>:kh+).+PL 9-͛ɮOV詥9s86ꭘf0]V C,YކfJ(M3 sb*N޾rӉsm۴j-X '`.ojS+ͫЪ;Hgߣ[xuthO)_90^:ۄTw Cag(jDKj|`1' ;|aח6!NSk_¥xwEM˖,#ՄEboۈ!d7Hޝ'HEq dcJu 5z3&+¬e7k& Ȕs7z: dd`9U**d ׍A= k 4eeͷZm~6,"LD XyM&)Fb#8%QǍ겻-Wv6p)o`\dprDB8hrgoy$cv d gt=ed0u|s*p(k/=C/c%;lc?[4^E܃DIqs/UVdTU-*^I4B#Amp&a^x?A= A| 4S+ (Zl,dBX忸}*›4꣟TR7Th{.wc!?4L0"`0oÖp,):JlBWiUUQbc a( >0>{&Jp=1M7!`vyՐN؀]Vl>݃T|J[0Get 5Ǜ1@u( d(;MAz BU@okFY!v{/!bi v?fpMf0׫tPm&3CDobHN_gw~׊Ogwh|uX33'ay]P( e_d.Rc I(`s+D󨎘.Ry;ֈ'9Goa5[tiJay{U^&/'+52ٚT-}@LFπ?0?ٺW(MxG#ɵ7x^X9GfHoy_u7^}ҟB9OgvKEc2/fS4zYͯPAoI\^~K^P9?! ޢ( D/,I1*lj Q;PY*NP{.uc@8JT{ I# L7TVmʲ^j7ܦf|Oe( <u!6,x`N6tvK/"*t>:6)S?WR('܇`( D(Ra|E,;0JVw|!fcp%>"W𮭜}<+Ph QH+ciۢOŎ4ϩls2]G`1u{G MD0@^&e0fё.@ JdK̖8s֞_# &kin|nU~y]\0JiÞ,H;tY+861 EBn>\3g+v'`HT]L[ZL7dd&?ӲE~)*r*q|򢏷nƽӞ:AšcQ3q~}~=š<gi+6[[!85#Y]AE|4l}]; j~\eZ4906iXCDV;zkHRUOw>=_|T̺ʚk`-D/_~,ϒd]Z Yv&Zm8'I[5VavhC2T\P5%NG`%+ "ʖB\ck;gj6kT*<NJS$*L\`;/@S~cW,lesq$xz&Ok!l'~vNFP|op+k( eq!‰TbhDuʩ]\A(އ0n?֤O9=IOq,\,%Me$”aYȡ`{x6CCp6`+c$a~MĚؓR=i%K5pa2wMWi;JR LLC?%ju)mj-VqAȮZ>?r|Rl̲Q\;lP<R?roj?DffHn՞kEq(jA|!/RyYƚ:Ԉcݢ1.?m4CnG+-0k=|rd/'Y|G7ͳ)Z  a%=*}6^_Iv.ϰ1?]#+w`zal?孍V4㿰1c7Aعٟr|o᧵_ymkTTdkdT>SUhz_)?MezXFHgBc}Tq:+x"z<(VrΪ._(^Kf_7O;vWߴ񁹁檀MFө RM諨zLgс*sG[E[a5L_r 6EЈa4iހ`|/"wz,k1U:^8u@Յ**;^~[Dv!a[.sR^7jsLuVQ=B/4 D5BÖ1d]IQ5tӖS̀]X4TjYki(etA+&TQǘ>[/D爑V]lYl'xz6[a~%uAr+?Γ]/D~Z+5yIf#.XMT󩬩j7suqwZ,mt`z(8T  pCYMZge7x/CO| ڱԋeU,nopE(f hus%vJ x=JBG67> /k]p76z|?[n3&F_@,$6.f8$qKpl)W(83UF9E*rP6Cè?:Z9|aTe4 ?ڧC ]5 XCL!^6l\ZR6fŘ p<x臥ٟ3B8Z PP2v M 4  SW)֫ `9j_/lW⪹\|ْU %(F*L~!DoY5ob)}bE8#Z%0?k*Y5ށy=WwzGQgs@O?+ʾiuc3OJ֗;5[mzN+`Ac1=JȮ&(Yȁll٘ٯF-52 /V<{MǞkc={?{c^?TQ(中}A𜐁C>˶'Q"+Չ]xk[̗;Ef@X_̉l=XJg 'Tcjzz(#وorSXwq3sf;oأSz mGbxnl9˫s w K/g?siXj #6Whe^K;*zZn"X?35֒&+ULV:P FofD s [5 âZ:h~u4r೴65tJ8GS"7Hq A8AZ%;viPACVdV^)UP6P;hߓ,mϻ3yڦULv3ѓb^NjYN9`g9Yy1 rYБj׆{zSk1  -4 R _ yYMM+U 3ʨpB]~1؏wyK;R'{XzI%X\uX4 !>a܅giim˺?g`}+,, d4Wa\^S L\#ڸu*b’(j.S}E"Dw5`xTacLn2z *-ASZܥ;n>@}3T5V@$.6W+t:nKY%ZZS5#Zip}a3/((^Z 7B{-|SEN[;o|>UYf.nXR㴋lCz70/l6q"J_OAg|HX63/l*H! Fyb7u#6(ƆF˂T 8|R|b1>QgN5`9 r:͠9GqWj܂ŔVl6U*62 –pC^WSMp0c|AC mh$ S/p$NP]-+8Vhu(;@n*"a b0fiqPwAM {b L>ml wS4ITpsDoRt bhO{p&5 /j;V/UuMq!/DUFFZ3k=pl RaT vS)<s n &e@1E7le/`yE}^"n91wGWqX]Walk3 6BZQrb!>*<+`?Lŗv`mwc \)-,,9&i;y/;ߔLKT\'Zic3F񼚮|\@@N![@=u%_=2Ib#.krk`դd, C&{4Ҿ6I J#Jt6ljAU Z9)jVnm'ZF.ڧV]3t*1Ʋ@O^|4 ŞCmJRyb:款z |W~UOʄ:I Y]qx*SO[,WeeY7t.x3iDU߈-Eio˺a]*>_jF(̚n2>Pn*5zJ#xoc zU:oQ#:Fv"-⛑CHvSJ]e:da&Eó{+hP$gXK_ WMktJWse/~Wp.JO\ŇbTl9RP+[jK h`'Ɲ`r<D+h_ {zj /0a;p\>Ǯ-ZKC|,A(Eq$ll:OH;1?LЌepUAP uimPf4q%MC+m>mSXvNO8[uh/ʦNC2TUFm =Y6Ւ' Y U8S!1 ~P^,cNdp(P,v]dEmэ}({3 *)ZܐzOYmB)]aPO8hxs`MJ¡9dԟa(e9{;s1nd#|RѸ4'v*쩯}h=pCVYԹ^*F~op3!|5M8?e ׿aVL\|<'0+$ؗ{} c*K>Fe8}e=ڒugXOQ0,IoF f3 6"v^I(OM!p*e_>xW2KQ_g,31hKPo B/(+ d ;f]qPp}O,*7:`q^M0R>q$ IDAT mQR籰~^[!i D6L@vA)9a% R˩0ub+?Lj6fuD#=Eᵌb[OF@5y1rIW?I~7iTKͮrkπi!kjm‚X2 (wTea!dvy,*yjrO}O(ʢ0X=g1e (x[jeX%/zH!q<+`9R|Ѫ.0VQ4`78BPXmxj@:DXyэ3p]g>rVS$gyՌ%Up"grʥm-DQ*nC=̎7Xd&(H\Yf'a'E d\v5FYN\JTm<ӝd} ͟9JLj'*H/i/b[ 5poԡ4$OShbn8DL{eΧʆ Юٿ ?6mp33#m\]@֓J67}A|adT~1Cv]s%1XUiZ<b@ouДz'BW->:cP 5q3/)4ooٟmX3OØoU^1sopҋ,f.Fёkg ,ͷHS\wjmQݽ!"vK5\ӜKVΕK,{<[j*XRFu^[rMmf=ľFDE؍|#U8VOd'\ 8,d p=&\ ggrZSsz;(Nf܍=jߪlИ`4f^YTe؎@YaZ<&l8>_ p5ӂt͘itniT8+iD {~B #sxBS(vɛz!VEBFMa=0x5(N#(5di`P7uX4_A'99+aXW% f;[<}߼| 0 ALB p+]Xah'NU#-m5:2`oay\jPh pV2F"ۣXY4f\>շ}dEqĪwmek;A'(`pZ3KYCnf7̦2kX?mJ+}>g;F+*+n ?q_ZV1\v|@FQk.AΧlyr)? ?PDЩ:U;R :>X9+4j߱ ~`oUSV142Dtx.k/O!tN5PcR^E]=9:;kFMǜ~ѽ[tyqNKuҪze[`c~+I0&82ߩtԌȭܓVwDͬ2ps.ϗLw06娽 =ʴD<:P ^FSAfLM\/wP=<{C#~nq!>YOk u l *jKP4+~5Cڑ3t;]*\ -թB1T$%.mɆ8Ηi4q#Pngq,׽U+C )cܖ K;"Rly}@ÉB, d.qC &A3&ib<-p _ ELzK5i![Z-֛a Tbs 7D0YW|0j3=R PapNBR +@i!lV258Wu!3 ᪥\baQ׬Fw*ARojJOU%5O dMGх QX| ?ǶG&|81 [ {J|  jS*U)R38U ,5.i&\p!2 4Jd Ԃt4f%}ЛQ4y;W,aQ:EktM(dS`Մc8{fQ-*86$^,:w{DgvV!~ N+Kz1usR10ȫufYm6nmҘ%uV )fCv sQDxpqxmC]1a\W(aN'oC&IzcmKD@9yIۮ5'PD?dM-硌aO #0P$}r}O|cW 7c)U:Yž_ VGl3칠xWԎ`xo5sZ{=;#{ʒlD9 6Z*"yYZ<,\h&f4C;ml=7%5wR!;]gYr;k XX7:To6OϞf6"Ǧ3W3 *e~a' [>'lACYgڤ1*_[cH znXcjuO.nh~zR=~5g~ZͤZs7c\c +j:;bŝZM_Y$M<ˎ# SҬGVhlI6NT+KQ$fMXZPOD8bS ;,Jjo0rPyv?V)pK 7 *Au0IwV6":8ϳJ8oj/m8&EltZFg9ёdQܟ{sqo1;o#>Ouĵ_\DyI+`Z`xR,K7~cіʸ#9>6-ó8Ai *U}]3T}bFA П:a0tϨ |I+p$gt҅@^n Yq-I;d?6E%$KLW=b6*AЀ2kS v ˰Vd+Ǿ%lH۰=wcΗ4lW#ZE5%'%,S(-'K4xkhA|FEc -NXYu*EcGxzvҝbӕ,YFvů/Vmm6]{) 7ܧaЍ&,ItRd["5 dkTucӡ3;ͮ Y8c!|E6d9b3K+؈`.#*T6`\Y;8p4}X6~ɂj-x&C<"1/c9X=u"Ej*O`R1XIg0͟C^5N3Ɛ"a% a4RM+6{4~>p| y8F6ٙm M xO}qX.pS$;RcH}P⿘M*ICjko( l@a#<ӡ#|T>&wS_|xX`"pIUِF0ް+gpmDQa4֪ɆOաjׅuD+zaG"^ꖨ3r58Ef5m)qPmEX0DY9׾H ;~U@ԆD%m ] %YeC8sݷbE\5-oZ-"Krg=2Grq)cl/A#mwejEm˲G쏂\5<۞=bT5АaX脿czcih583mXQY@+W+\n5!ހۈILj~"^KtN )koNRzcO>UH'aMj7灧Vڙ`W{V9GA=LIZ5xloPRCV:(h{E1Ur$u[/ɹ %Úz;5TX/={6XeTLɋ)VQgߡ.qKUaJ&QN5/0C| 2ØQ,VgFCVef Y2N*5$w$T}߼ZޡSߡ_g)ލc+Mqg ;Jvװ2wȃ-D~ĖqAZMhXr}n䅺o@4^ÏP`$B,\@'|F G}  byXo(:AfGLP(ED+Mꦦ @6{Ċ0î0$(p7'Q` fĞx~*B6:'O |l1!+S AKj+CWrZ3 ,/Bma݂X̏r74:|?Nl)|+Tfl05' ngG4HgКy4#r\#Uŵj+Vgg/:gF;EF텵\%ZE5q&O2)ۭ6S߀M`; Ft<2rCOvj)_zaC6o^p{ķ,4&?n7Vyv1wx{%yת.~']T19Pw-5`?+&rm~+d2 v5yk ٘n`Ya2QSo0i\̣Y5qf[V zcBs1c]\ٞ䇡db+~c"L5;l=!UvZYMuᇱ1bw,E5O!n0`1.l.J8g;qp0~`3w{OT&4Eei"sG)G+gwkК&'j!і}?0,̶i6:hHzV"4~\Lo7㌏̀pJM.&WPof/F XQqljW.y/.Iɒ~"u>Û4Rh|\e%W*dt7P9>WV(ouJ}^]+%2׾0{/x8Fңev]t&N-)~@3訢=}z Yğ\h$1ٹ]յϖJjn 0]`s5?#& E@T6g@/#^{SUmC\? l;;f ՞rN{0 +|m#[%,ĊH4=klYhvp5Ƌ,8:i3l`K!A#O}""MڭAX ' 3k>3[+d٣`y|CMOm9엕N+OP GƖCl^M[nOw͎Yl: ,f1Y[ka^Me} I,;!ZML~T\el7I=jK+in?rg_:Da|#Z9؛[- n NT+MFhtluvpgv!ⴿn Yci<}5}íahk휽='8-6Cds8CoF+s MX}f'89l5T.!W)1J68,c3 eEl5ӕjC(CYF^̝8O>QX?`kt> &jN|.f^0-,;?NSa >}0FePxGJBojC[Qh܄',*Pg8 lĮ4d 'E,]y4l7Яv%xS[OUAaKx%Cu^m_`̇hjp7?.F&:_/ṗ DZjŴ~1@ YYyO>-?}gxjgq p4\c`/z*?c[U}wUoPG*(=!'|p:IƨKÔя5FLbGxV4`*Vj2^5ۊu4ʪ%CC^];Xap DCi'CϮx]Jue7Y*Pu+C*tw(OkzpUS[`@:~md&R_a)ye*.Yy`y hńQ,)ZZ-|V/Ld!~V4j 7xx|s̸fgxKxkRTFy_aZX"쒬žkoE;l6QEm'uANVy%3vr'hJȁnl,Gh\*(fJ5*C1R%NPHyqdQ i{z_]:[=a7ft4Z<wQ.A@%9EDԙvxLwhUW~U<1ߵMbz.;+Ai2.@+>4Y{6;E8]*[9gx:*7[b󩺶@ey}W);([%e`ce$gQe4^vB -^mKGi45(2M (77py!,Jt]ϗ@@)[ Vɭ kVGLs`%PjJ$뼱(H4/՝Ik7ܵf~X뺪CRV8T'$,i37={6:q8y?Kqmg~5^qGK%O@k_rP+o`_JEW@MqWA"NE'|[ö́A C>¦ 8Z+\3vfq,)iVP \TPY7$Ї:\ɻZJkm:WѲ?(/f8H |A5]9Ua6T>(+9YxC|KB&SHdlIX_bʖsM}vTQ2˺NY]G?p 0I[)_i-Ewq'ry@0))~ ~J K|1b;[@hy]p_@g EsEe>.}}k`O9Z&}sZv;;jXj"Ayi/vBLNC%,A}D@aUWj2dTE9{uFp'l2)6\xO-T҉>U֪~g&0X|<:ߢdo }?|P'8C_ꄇLOI'Mh(-Sɾ#cJ6=Xn(~KR3H^@{d{HG!dEhdMQOV`&E`2^JqbpRӗnGsG@h?f96|Rr]r/j hgA*`KMg#CPV35"1+RU}y;s(:y>u=K`]kC2ɵ5^_eoggJ8}:mYNU>R;5ayjQ^WO=P[ȷ(2Ң <7?&,Fa9XNCYQB63"W p|*cv׳L)0^Pbcw+x2ZOCNTaey/z\T`'6tu+F=KR)es$8#kQ=] `/?9"7p/r&SR%zGe 2]f<\ʤX/mvC/zx oMlRb}x2o2' _ajmmXJb>#m0zh##JPمNǚX"=V۹m/+8V?_0^{P(;y~Z@ϠR8d+→fQ0u^w6ҷ;@Ȱ@p`=* t*[ ȥx"j]mv;ufpfj`y3Qfv(unBan'1 'v]yJ[7\{"r;2"#તԅfvQB.%vIݚ2+36E&`e&ܢK:QO>#7Jke^9U+Py+xQ% . SX$Txt0Q=D XY>OcH\˗%PGRQ̊yw`R.eE:ԣ@BZ~l̺J/Zr6ճ^bKY YQPRYU( Y ̹RK"# NbޡW%i Oc`t؏->Ɛ|jM~NXV>9\[J^[G~Y6S. Ie]>;8)?5-ƾP`:2KJTG;Dz, %}.;B;8kwx|x٘,-?%%>%RrHn)DYmdo}ldzWz+ޒ`g*)PF߉:<~L7 s[Æ2GLxfilMCsdO ap, t|Z*y V d([X=>/E2|L9Ax gDZe-&$ ^r?m c(Mv؈ 4( AׁURYf s Nge˘>b< &،XkٝCq^^|)G GtvҮ47Ѓ(N+}.xYy3'ϵ9!w{7ssзeR !;/DYȱM{`Ȉu.Ta5.P&T^-=Nd2`}@c=E\r|kW'"Wq~!cAwzY?:M %) IDAT߄߄#]E;Q߱TkrG^Onۧך*cEo~vQ2aHiSz/ ſqXo~m/rEp^iE%?kyI" 8v'77^9|la+>e3TQYĊd8/)..+5ޙ`]lŒӌb_LDj |S۠_ @6:B[iZzU)"P^)hB ҲXC'٥i {a #w( q|ϧ$gB,eVCUEEReqBx?{,&c*<+, 5, ^v~Ddz*/#oˠVe_)eoEsk])^bw<_+Ul ljjV^|6gl5k@w'X\ne=^b٘i>Җ]`w`Mj4);`Цp*]L3-jo 2a9j(NG -F%Sr`N$Y0Ok~G#H((X&9]3y9FI{+vmZYq();?d^J7,!?!/'bҌ.魃 .2Exn?ILTT<˼{`,,h:IG1X Ortc`Vg\[pF((\0ڣa3]0#n,mՑe Mc1nTϮ*Nwv:[n!D[4lOƚ'N؈gǤ;n(^l1\j#y>qǗ)wCG'˲PY{ܔaT1;ʨ ފOe ϔHxH}Ii ydXcx2[g@=B|ሆUO{Hͩ(?*!,x{A5֟rxu'`'+|q;G< `{`44a%~Bev?m1ϢsZ-G-Γwј{yc`ܦbͫV?VmfX^ʎJ mY)G`AgkÉJA1\N2 Y#dPxZ@Y1Z/2a;4+_(>̤U.M بэjG(GRv!KMjMP9On>} ׾17t.RU6̵HNob.ǴǾȕy'FCHeaHMdxaoK(ӭ |nc L>4|`hc YWS]ñl[ 2\"Z*OpP*1{=󃫁qf Sބf$W ΄I!OoV~(k?Kqw4xdI=i?DFʭz>-VCza<Fy /]^ۏ#)c\ŧD{Tz?-f=0&0ZGTߥnYAoh(@uEYVt2^QiU6(skj6Z=/?@hC euJ&cWx2xS +tq\U0݌䷖*FjM`aj=q>lNJ ;Jb:w@#ߞɞɇ%Hٜ$y?f)"3;uU5;2fE<#yyM[4ŭg lAp5lM +;a#61xjOEcuwيJ@6YqǛN9y/c99)J1W:,Sz%@L%Z E0J b5Zf7 7(0JDpN0 Pccr 'lM}i_g=5SɠdZ];f~դW g*k ) 6ӥ Ũɱ8h6 `~u^ZGp+r;^푬l`w ڥ'ϑ2"<Q>3|FO+LU3PM;DomgqT1 0mX@9(8)-%˞}ۭ? R7e(,J?G(CJ˱3뵽r'w;-DL`cxs#U4wTmKhl'z^vvdu EEvE?k-ZC>~~̼)Rr~;k_K2 :y]S-SrKXsn/npΉe>0e!4>^OhFul7W.[ >Eg$U|-Aٮү.`Bp]`e5#+])P3KZٓy&{9Cvnv6e-x\>9J) +q/a۽}v[#v}mjUɟV>7wwqˬoi=e"hcPݺqvF>g߆Y"̾ka!ֲY0ƵZO*7Z'UY`|yE\!L u@E,YiC{. xhՆ5-3E=twUmZ;/^M:1۷{5#y~>"GRh&粇wMԤq̨bkV]4|}W[(% f㌒v'{|*ujG>6Kh:[z NlH8/VX`kI{s('qJgVo,>S[*L|~/$Mfb&Q,VĽ6VHۨfV+;hQOl6Jlnyk$5#PfM͔3z=cQ Ynd.rXfUZ̩Q;Nh8gctG{1oc9NVYFbthlOiUj-Dxa5boztHpҊ~\v> "mPr襴|WbV2b- >$͠{%aAhϡy-m4t{ŏ{+R-X,cfN:}yZ/~v>J4GJ ?[YK~MYx}6/rGMei<|X]yCߩ<0 /qA@naF .RJAȶep8Hڲ85߲Wՠ xa3 9) rv` f/`vc)9W[yy#f%Wt Ώcp+o%hQxK휞v5WfxReH{( aeQ:S(Bg}e2_Vzi=YEU\6QJ'/լ _oHpc`(Әտ-y";w(''M 5ve Mj!֏ S[r=9t/k U 6DS}j$ n;4ϛ6+6K9>Ą_Z"LhMƞT4[]ʕ~"ݚ/#%ZSYi S;e*rcXCfG?ʀ|-vjW[u슐אKJ51ޕ>b<ښ$+Fp2q, eQvBv\H234wbPP̅0 sQ'JsEW$݊VxƇd&o V h#xi6hjڃU;iUL8a/;N+%.kG G9T;iƛty)\6x#oֶ[ޱ[b؝}ճCGFP|VFsc%e"yldK`ƟX^@˪)W6"2nuvru{ Q|`mnuU:.K3z}XBE+ M"$Mew`# vSq:`Tty{t3* /uM饎*FAlր_."цOq[4ef;?A P WC!eC%!X&K6L!t_s,#>x-f4]#0^և1rȍ.TKĒ, aCfDrl# GI07n؉-tXN(Z4(!lx2X!/Ab7EeByX67YM Oĝ0A# {`47lXN _zdo:k /7V,SHV>}hWLs<菡8-&oC ?ѷn)K=1W6e&89 ox yF9hg:tz),ƨ1"Yd=RN9<#>`˒U lQ(ZA2*e 9 u2/8Uf1[2zڋgW}6D;*LpԌEc">O/VɧˢeCW/\MP? \c h'?D LZ egeډǰ^v3z{x8pg$|`g%Z7v4F_F|(9).qZq2ιW-SGʧ~v.]NN~ha3Pk*'CJ~]]<*eRذy:ѱ92{K],3 Vɉa'dԇS:`uC<-sF;tafy1<-%wkSju>HH>T/Z!oICC%YnXpxBѰ E6E5fzƸ~q[xF(|4ש~)as8`ɯՙ]q 1vJoϦ)cmZ̙U6O1s}XCd4p 3j >{.ܡv#tb?jt>`oB?C%"=w aYs?e@*f62B4LL1=F7x9TfC]et)ӵ⎜VcjP TT 88/9,Ŀ0NfW!E>i#68>lC=XY) auȺ1ɇ)YOvNX1l35iWai`j̃УF)lON$,6}v'RI sPJd%emؑ8g僦㲣LjdܮÎ4^jh]f9~;c/3s d4 AF7T=JG&dWjv˾pk]LT^;'>,*,ML+fY+v q R,F\HMB;InaJ;]]ޖTľ MBl ke)9hKۃHQwŔvX <0~JvR Ykv,opN OdaGt8!%U^H#bBc9Ca=SOT?DO[(`8SP[):,& YCۃ=ۭ ;kћѩ ]?IuȲYnʼnʹ{ iSUg!mNJ65Ԛ6 :^be\szW*>w3lf[QqFLǮ*N#Q\)LOmMqQm3k\#IDa dž㴱d|q9*rѹ/^m7&QsC+RAN;])䩏{-@=yaKqBl她'tW:TRљ/=-ܤg4`wI`hJFL@6  .s W- ?J\ci(}#p>ǰ|wʷHYWQռNsQGj$>X[ᬿ'_lb26)=[R:Sai윭吙z-X>DYQ(g]&A[)Sq Uӽ*&rf۽pN]: B?kuxCKZ Y;^]䒆Uۛr3kzA+W&z Vv ~?yϲo/^0Ι_Ҟ?U?]n IDATHe_VQIřZ~Yo~q:Kq,kA{vFYw~R6r^TfY[nhIye?a<gE=pV_1˓ugS9-B/oXО` bHȻ1J}=B-.B-sWk/v{vy#K492-?ek3P])]gq^1Kd-Hu2xXW6#{*HdNBC)\bK0'|솏Tm^\ǦPħb l27Ld鬒:+31ێ'([p\YBұq7b gp]谝I<.=@#VCs3c%Ȟ\!.eV;˹QIT@gvͤp_ Cl+F&Ǿ]vk6VP^W[p46YeddWY^h#Gʯc{y;-I/UN6HB`oI+BK#-`j [hl lJ%,7TQ̂FxU2yh9%ߊ`O삋!+"\ MXPB]!jQi.\Y796Y&:`!g{BIrS1i8'2ˉ-h~JMBq8װķb_~R|Fd9\g\P1¦-0"w%wU0lvrt|7exɍ[L*;1t94 bNh EZD =#5\s62+P$ôWSRF++CQݳz W+œo%ZM/Y7J L/7Sv @ j إM?] Ϟc1e~d=~uEH+kѮb 8]ҨMJ,>ۨE"JX)恗2}f+i?)'?TՔ]nc}Bh x%xXWb~ٙ?\CMYn淑KJ৴w#ciReۈ5f7X8^aihZf]ϹՇq&s][۴ٶmomf۶63 ?S}r#T #+Dkg0r,^-jjaJj:-T+{-QiGe Y_f2/4OKVFZNRswc1U_ˤ<^,an>⾧ŏ|JJe'A䰯8R@@,4#-Y6LVY3;Ə6]8drךͽ-j}Ǩ^N5n4FutW;`!] Ѣ< >vO.c-{L<>7Ẹb`8dԩǺf[G m͝4`۔?mnM_sw2X M+w^HSeM2ce6a;1/;EHм^ɻm=7Ԓ VkǤ)IuX:عVM[И2;`$ Z =< Bal`0[E0:H8Gs$KtS5?FG(Dޤ|,ylEa zH7NMOT P'`9vk)(nx;X#9br;i)֥p]vB:l b>ֈn9Lt9Vi'uEQNOGG=N!Y1>2au7ƐMp]s&by\g,4a?̇wt?X /`?S*߰*lR *A2bE0O](#7= Yi¹,s3z*bEY}΅>U#k`ű=xx}v:d'"Xdvw<緗q~e |>+_sM`Gu·R9OS sJsU")]U8v&sb3_ѡ,֩2TkN#,X|pF[OHR |ğ+oS <olO\6O{>45gp я硗 /:SQZl@v(#qm8dgsWLd m3 8Afk^`*Q9vj ӂϩ40Af)ȏL| |Bd+![;.Mc|4<aNSɂV{ +'lzsq4::t @<5h)g4Fjr9$ l &^PZ/T*>q\X^k5Ml__)hQ&)E( ')GT,_:Ў eՅlmt+nxJn/({Note~;7nAgT3,]#V'fDQcQ~ ~>x-;x(U%݇N*6VEvj'5Rsr$Zfq0w'ֿ[oK;{mJa^\. wl`Sk?q 5D5|R$ԕ-B$165YyZDps=YcneydMR enD*Ri~+;z=<E&:ɿ,8f,7F1I&MA5Tap#7OonXKd7/;Cixn (e3)g`Kj"ۨ3b)D]p`ZEFQb)TP2}<́DlOp˺/fI\p!/~.v׿ᙦ{jxKg]Mg9loǹΪ=/5g>gfEfr:T.G`J$cROz z`vWϑ~x, VwojBRF;=lMqVQԀ9vE>>AujJmZd/NgL~' dGeO6\<[nHs,L.dx c;'8׸N9H tH4=N=g%~(CH01ը'#/*<Dz3c^ͩy5A5];(M JAO,+᫘=^M}-2Z/-͉M_v~dR_ݟ|v`7@VrrjÝؔ؃[CɯMaF[LĪM~+̌CB J?~w/}[>S?m"Z8:MmeO mCyD .7oIW}D[-Q;kʁ@T7m3 KX'"ƿH-4]Ԣfnv(7\YLZl Vca]AD+[K\`o-N6dZtbsj GFLij`OXrf?Ip %F}O cV܃  ~a L|'y8?c^P*!^DdCH!>6i d56PdC;K(Ů|$*|KiCM .A]ɸJb5Vwa9_*(3M ,bPeg-TejiP,/*g{,b} O>cwzw1i .WM:KPUStcq1 E,Da1iKD2>276gxwqIFes=qnhJ~ =O; B.xgicheDx-P ׌=dJy#͓){hjJP -c0~[U?tVM֪+DX(E Yп̡ΐ-Ye=KUQf޿-Z~nو;5~;]>>|ռ5wưZ#u'襏\jQ lAޞsv* |<STÍR)iD 52LQ^*jm;JlxeS?ȥ0 \Z V>o7wv hֺ7F{ڸz+[z~ep$;u϶OM7Ժ<νô5aKx][r=1nutc4vDp^6iX=\Iy{߿s+|?|}jxoO/X=D C;)Oqǁ=ig]j:Ϻj_"f]qBed}R7dxͰ^Oi0J(-w.c" *%eA 9\h Ʃ/8XUj\NY?p:@nd'&>PNkBr;h)?#c)vG+>gT6*%(~)z `Id5eLbQ>U>w# <2ݢtcxze n r^Eas\,&XܥtQHduvi Ts4NQNb H{2c"0 |+upl'PbժnuL[ jy\j_#o}u6:]_" l@4I lŽEVAmk1y^R'!/C\!kʬ0Kʿbe ΋xnhC_dPьn #ZGu? ^!XIa, IDATlQ=\U52cG3X/e(QF^iHy]?@k;jw \M|XE*Eϣt]M6듀,Ձ4 4a#(ԞK٩ZN!1F]V p8^ARA"tSE pZXV)c;dӠh4(p+q4@tAyJazC#XBena8Cp  GXSge-El<.PQ([t4%k\O'Qz{< kTQ3 ,.vVXRǸnC#:1v;xwZi:gF)u~-qŬLFcEHX{ zA:{Dp,*|$;1oo[x{X$ΉI6hJ e[DQIab}_ x"دzE"DPgX0[.ts oAɬ=>G˕:,9N6RS;QiH8чz:NY|C]Gu9z:Un4%PIy/!;!#w -^L YS P%G)zմs~N]khzK{EWhsήYF{ 83hB=Ao(ï4[(XǪ@[ Y|#^aPМ?b#AfjK1 -: #{TYN\EkbE =I|VM=F\6TZQjb9k'TJ÷VpgRb#oX'|2;:@+.,:0>bYGRAx+n8v]8&Ռf)KV| wWG ? ~=)TcTt|az\ޕBzOIb%ē1wcS%*݂lN:P k Y8ǮJ1 -_^ b٢),B*З5Mm4]U|.6xKg5JvV[m^mQ= uQw<:/*mlVa0{DfgvSHlP~Yl/.VT J)#o],흭5aq4C†xj\TގWw4O} Ju/I{=V#Yb&D+op]9놺\ި\K mSZW[.aTRf닙M_#v佯# 2>6zGw]l <ӦMO1Xao64.k[t& C"C3Ciz6]+z\ϭad%CX{/LT1]^thd` QDmi}Kz =z"B@es./l4D[Ϝbl4֗rvHܶpaM"]*P"jv>U;NIp,a [96l9U:^l +SPؓv]n/rSiZe3Xa&qD^14L z`_Od^E^9rw(HװvHp/Ÿ k3.+?R5 BJwȊ^#a+܂7"tJɮ,FGW^VmC! &WIzkiϥUrxEP+vz}Cy*+j[ԫX 2)\l,aIߊR.#]c,N ?b3\ݢVO|~5OnMazu@,Ңyvx BjA`H&(Sʟ6-l9k2+iW6\c:?g w6"xSV[{P+8 ?8(tcsrjG0}be_b]T7Z(syy:k#N8S7[m#)e#c>=Ց%mmN5¿x~96G- _a@%isz*xI֑9l`F8]D2.e.Mru2#րg0UP Jex^؂qdbȃEWq́Bf` `a:~(xed2=}BI܆n1=Z~* JM$ʊA/ᴼķvrx1 b%6bcHrr,*7Úb*nJ\܆I0w˸ϋ0y/h\C!=]٫S]_Zf\a,bT$7{X KlRM[0ɺbW< v&gs\`2 յ[WEgl?V,i+H-qs*iڧQG]][ J\x5/(ҝ,6/jl09n$JzțPNd$8z(cūNz:μhXc2j+aeszgwCq5ڏk- p b}ЊUmkrz`6%).>:T.л(6~gYC?Rg)a"U5VO?JYd's'gVY߬u}kAԍoe5x)Ǯdz*l63!L[I7l&>X^cDܻ'S/QYʺ$J>.,20 hʩWD)0*,2[?ߙYѭBFk׍j:Twg`=+>E_죙V{%1SjHYkCaIY\t>t޿/XF+q<$[*I%,*uԆqmx 刎 I^H^Na+DuZV/CtJ/V%a]rGmC-s5+WguDK /}Dve>?*ϳx&LuECI/RCl>$CYNy{P}D%lkȾ<;Y-OjA?2b(UEiVY>B0G7~{āy'\^Q~cG2\T5V[Vmg rOZ֐K?i?-JIW8^<=1Et*t2eVWD.h\x^k5ۤ$?=h8b- 򡹋&#K TK+]LkfkhdU~OKIM)KY\Gr@_ 'Ւ FQC颽]Z~( 7:xOa%5`(]X25 rp6;NP 8?|gei;nFp}[iL*JbJK$:S{B؈/Y.-!9y3QRMt]]'Al˻.^Op[0E})M#Ex'@EONHB#4U4}lh*i ׯ;?|=y?uR=F;SRT gos12FRO;Ky\X\ a:ܖ;C< PǮha{1 OPKlif2T_V*.WkTx˹VE];ϡKr=ΎAym;MNNwT˥2Y8^d>Z2*EQ܅]#Ru9+<\ƾ3'0۫JMo3'`^`Nvԋ;]L G u|x2_+Z0Oq5_f(-xƹ}MOS_lF)@DvC['ҩ%* nVsO%a7&ӾFH}/F{G[:~,׾UEά3_,%k02(||Œꥏjh uɃ~JjJȴ Sd7F9W=@͒0UVrE30SܧѴ}e+Q*r}:P,|>@KaV;,Ws_^5xBQkeqiܔ@RO)M xE%n~mJɨpm6=e!E$~&X U9ޟ;&i.a ;L@"QaȏxOvvEa *PGp3+ߤ] ᩪֲo0mlfZcGvJ^L;p߼ ۢT_UBo 63=ƧO˖ʇ\f\̜i~͟)pڬO[s OEn6ɫ#664;ƚ)AIrUt{LYQB\KY~*x|@[4!*zޚ.M6묅Z.*-jaA:Xe*Kc[^V)̆(U:yߺ aa˶mZ7sqٵxmu[Ҫ_s`1hҿA(/dtDXdu^5XQu7#V o9m(>XZ;h  9u5tQ'xB aZ~'ry;j, Wdj6VY6M]X.!}md&J@O 7`,Q4Ch : V*6 n&V Z_Z"k&i|tU(R^H'a IDATWy4`̧ݼ5k`1g);Q9M =j2؎ފ ցW.sGb z!8hi]5L*]9@6ڂJV,= ~VJԗ*hi2^ij*8͂G(9N@7o][r`=A(^hfHuŽ6{d0jiy -gƚe2԰D&Ha$-Վ):< jB)ăp.Qp:W1bswkJ;4j`]dfrw=ͭhfHހ/pC؁L SyUVԝW#ϱ9^dY x(7)hxWַB7fSenLKiBW43œ.+ VjΜ5J$71_QA!M%|S.aVU,+fgf+ T1?X p27R*AVmLY}98;03es폄AuJ\ VC>V!sPҺfЬi&&AUqe[e$ ]M, U~uAlx5R2 s? Mtd,w@v& Q,M|r cc6TՁ륩8E-=ث`&Zf>vŸ!')0GR/OdkB0C[+/uR 1Bk8B:1x#|b?6 G~+;ȞY]̻G?|E`Zg%NK !ټ_+t|c$D[p}m3GR[zk'S`$)I/LxcJWc2ut,8v/_) XDF8M%_$w1is ^79+gj7p ^(x+^+sИcc-4%7#^lI@l3Q+ޓ-[X( >KM3?pJDJMcv>C x?gA: *3ai!K;򡭁þZ{Au!x X*󑦍BCYu/mhh| Q8 yA(A>Z Ms^'8W`(Hp6xcYl'1~.+…N3h'̗' J?_#οÓbu܂`<1 DT|Ыp4*c^H'9G+Vυ|FG=42$/ Y*A "05*FyT2-;,.vXvDn.&Id- 1 pLL!eBC3B„{Sf oW9w-9u7pN?? >yRMik:7V5|B,5iU9_ M2,4;=1,%8ëRloNQir3)@ିOo=TRz}*c.v9[#wU (jFv_W˄rNTo-@RxdKmr("Z@ J\W4-I?N?C Xmhî'ׅ-޵yʻQ73zoUGI5J{i#0xE9Y>лXGD>, w:Hf*"Zb<{7[$`&޺'yF) 3 fu*.} Ha?ptwSR=tZ%&mB8 QC7kЂAcPu6S| lŷQ n`5okwtc ZhulPiʭ$mCSYEk- GfFՁ^XZXPmB>p:ʟ9̼L8j+B>U4+˅dV_&A[lAd i MA%B?%U^ˀM \p\fo\ 23ʜe4 zOsJJI`51]gBO4hS lq yL[ ^h KKÊjEÿn DF%jd6mt % 䇉,Z??`k t& (72ln!ŵz imˡ&!fG n%l.Nr^ޙx ,WC&q6l2?|t3x3/zj(80^ClmŇ{^7DVSݚ`18v  s< `6X (<AoA_LQF~ቺO<Ȯ:W&ʈ M^KgA"Xu@WRĂ`8?LsQQ2 .)UtZlIW1P\!g@GP>`y{a4 Y/yoo.hiܼ :~DAQ%\38nxoq3QF!L> 2wXXZ8vc_V`*k)N'ŖJ{i؍(ա*e6/ɞ_JߖHEm8hVy(Z{칱^'H˅BT"ilT[[K{4f=0?7h݃j]U̒Ǯ_eΐ';|I V[:]Ly==gF |E쀿Ep.\}7ZU|kpxNМ_ߵ0of}ѿw;YS*vrq(+Ԇ YEы:4JKk<͞ y^AP+WQaf xI7p#^$(Gk=1pFjVfpΪOkQh`R+dDfm |aKo/܉ǏpbF C44)wy?Ick垷86&: P^=s;.j,ޠ~ 2K`^|费/G̻(\@AڇMs5Aԭ?S;yf~dz49@oǺĊQ;f#:,p*XPou6Nn=cS8/R+.gE9ֱ#n!4Q-$(ss9#+2VBx1V_*${{uX Ы7K0{C)/C_h:;r_6e8G@7I.:2ǿkh5=Z$c4&J]% n/=H!c і|f]3K,j*\4FUꁡS9ۃ/l_bh8a;YUƿkhK1Uumv$ Bw}jԦFv?9K烿X}bUޚ`.u 0|;kߵm-E+ n1>vH0DD nPvcoK0]gY|̉å%bY(,4ACI )HϤQzGJsMͧx6γv(J+o.KGah+? na DhGYoOa OG$K qm+!¾(OcŚnpKO_z{. 3 քNЏe:,́;!oFqgwG,֫Iss2_ϔ[u&?H3#'n>a72ǁٮK+Þ3c wCK*b_Wqp(ZH9N(NePZ/-9܊6'N&AL}%"܄kxEYp)㟰W! _0J0UMĈo7ʇPrb*(6K_ <* 3E={SK5{[9#[BP5GzL= hTn,^CkaAv*Es`E~\!ށ*h:^Oӿ~ SQIw5%_[R3##9iTmq@P`dO`U $TD;iZMFi@49.(ɞ)UO︯c3MvHY8x_/MAz^ۈ7_ .-~5fμ n`7Gkg$3*&Gt{Ք=i9֦XpA)"x>`^ ;ƦG|[-݇p7crĀr| [zOCV+' 0G9V) Rz,+/:%o9GJ?NW3&4^z)F#TOZՌAy3Mo/ k- 6)6ך͝\Y!M# 4Q zh+(VZ)ې l):M/ (rKj#w~xFg|\mD~iGCK`$'6WJd}S~=:k2M(D 8 Lؓ-('~h9 $2%̺c/jU rQ^.f4ǑF>HM֏U4 묈yEІ97[ 6}l*_;%8B~gti: ˢR U d !'za{4i ßhbP\i+P=HU)~K8yNH:G=it_n dWےR2j[lTEHa;}Hj@Z @Q#,d0Qc3T>])wmUNήeD SAo0cjGW&ry: ~rռ~f+#S@Y}d f6_?rQ`ߐP 79 jlw0A_ pkNک-/wMj|VoG^X^3a=x>"Zh⊑>bBCQ4p7Jn6NTs0@98 )B8>o&[,k+mO%U9]dn>)^&~`n4l^C/KXyCy&ݑJZ!Mc̦1D#}*HpC7}}km&ʃT~b)<2DMkf}gGa/!d_SyLm61.B ُKnl#K(J`(LRp$BǠjKk$Hx[7 j PyέX%YZuD7zzc7knvZaG ٞ8p΃X_<^yQ~&qJSlpgGyy5 N!8*_-_vO_HMq`^q< (c 7:AnV~IjZ\^-5^m1W%A=d\dw<*IJ(͕!'Hִyxǒ)~k(nP3Pf9XG U"ػ"9G|1V3lg6X5Xf-0>R^Ivlt+;_/ѺqbBZqi4<dHl2S`ţ\#/ҵx8W|F@hc QAkÛM(G 6]tK'Ž<4p.2g,2 ƃC uXLqԕ^79>aqC@wppF;)+||#lERMZow5g`\/P;g&S9dJMB&+ۂX6\EO|Zn /oR8ʇ%\:Q te{| ]k]k f[@>mEX*n0rY"p2ˊ` 䶽F? LVai?xGloC<(4uy˫{ j}/׷peCKX}6 S|;&Yx{E9S,X7g1ᥭm4 %~_ѩfqrelKA$ mx10Bx <Ԧh-v*jg#K* P}ZP%p t3@7o9߷=`[ZP^| i Qt+FY_xJK-]E>6䌼Ojֳkhm^ARKmB#'FȐbm<ܘьX@^-^8h=CK4łoQ&RRx! }fQ^#lMQD<̃0W3o[4ZƧG.x+ԑa.[i[_٣>Ϸ4<ļm6a6;%NH? E+_̐жD.pY@#~GW@Oszo2OxKR( cg O|(#PpKFYm:1>M {'%vyO'Mb=&IhRL)F.9#(Vn_#]ݗ),KOW;[,\a2߇Q.߁StctmZ#ZC L^deRpS렢Wu{C2ٯP_eO7O7Ǩ/*夽T(/h$z2<f#ko(IƇYd;)Vp\J$ߊ"&X~Y`AߛfLɱeьFWCƙ-9V9jW˼nkzS?=ku<~AolE7g.lo>\ں&l A0#f}r;y7-%{U;||£=m;BI6ŕbR,:s[? +`)Q <Fj$0k: T yHk'#8i+'_'. B-apFp< Ѱ,q§\CrPvrKKqp;Q\piqVzXe-A?uϩ;}j@7^0!2u{)WO+c YxR ~%s2H6|6dGxP˫;'rg\Ǖx=N&V;}d#RI AFꋿeцl<Ʌl<~Q0ēd|D}Dt,qvT?bTdyŸ7q$,p/nyaܒ};H}XY:C;Zj?Ϸx:.bňR^G'H< z\3uc:/N_? abx2{9'-{pVKl AM`\oL2TӍg$o7'ze=<{d}ĠyhR݌}BSreBiy5@RF6@ a_#zxW>X.kܔ1lxWXMP}`)2QhkVIO~V=%`c.@NVOh>;R~#K"BBO@@`*ꓵVMvYHf^[Zq^:b=ďڔP Xl(Jk<뿮O2̥OшT'/w*x([J!F~ X,G__6wۃbc=hvմ >!)=UpY~VZ8'*H_Lp$O {`.E s<Źʥ㴈9Ofu)9ɾ_STudAѢ]lʟ˧x+ڂ:$o&%:xPkTt-o4z|H<+f}ad>#/ẎɷP9Բf5z[Y`@~ [54P|›F$،K#yQXTLaQ\<yIkR5yT<Y_B:ErV"AglCCe u, l''%PoO*l^36k}~.42#<0Bv)$XWpPrE3+%Poq5R-NҷkG7AϿKr~wA@EvQbreI9 x ۆܔۻ o /+.^؃kH{>dDvdhdTVƹg9h/nº 7ʙ5p1%ɾY쮺_BԳ6{-CF%*jxvqlw]yS#$|+űaN-( kJ/ETy -6F zrMCE?8IeVB g9ߴ-R1Ydnߝ3ߗ֌8Px:<ϥ!Ǽ+oL!2]Ig?s!vTTv-@ZD~3`4O΅\l-ýJçjW@"y ;ÿ^'ݿ5:GWR>L:e#W JW+#R_J6kiBc&[ 1f[ce^3#?O/еV%],ulKf½R4ΙlL&8FDiX{!F%N_6kjqZUuټ,d>%mB+|U%o6K}o.< =Bn϶Z[aaRl'#0YI ʻ8X2O!}yy7YgH:cȈ~9>&6Ǜv3hE۲m*hj5rx+ȇ$2CjVیXLoK@sN`+=!p_:$Zc>MoGs8&[wbn=ⶍZ1#$܇x!K1$;DN&K#,d-].V i'O4(" {XEZJѺ8;4< FG| |ˡr*#3|sv`^Z(םMF8Q:xSU]u┃8\F(!]Gv{g|KjBM0難((շOmvFF^}s5;:SӭC~Nkm OΌx $`n stwWԍה 'B}JXhwhm<+ DEmeSp ^VUB<|Tz&[`C3VymfS: tX {6R!6x"ڃ`X ?#f,F3ׂR8x|#qI` .]FS)UqaJY2UJNXR͐槐픙7.NQ*+#BI{must֓N`;?<(LwCoLiJ#~ug=F*Ketu#w=؜XsǼc7f/8mem&d{8;_뉕b.;)S0"_w0܂UP֊8/&ғlȪmhE)#GBJѮJsR3>5|{\XDB]mH;~Yy@]WA_[,}c%kKrWhfۍ;)~G$POz5C%C(v=]'*IfE!V֌ WхxT vV7AL B+~-HKc 6 lWIp)Zr9#UFE>զ 5NI€25:2-7cvH;P do&5 ^c\[)Z_+;kG=͍l,89*U.^{k}!gይAS~/G[-Nw+XBu9mR̷UV`v|GV}b6m@F!ֿ7+d XW)4Fctư.~0l 8ijmnͭڶmmj۶A<\sw@_zeb9kW/yNa'Aڷ iJʃPOu9MƑ}X_2ր Z4Y5C]f?e~ud?<u#.R9~ セ,qODAkݹ/X>aKC1Sѥ2'u;!MTeˁBps,;|rV2X4oΓݶh&)ֆm0ax${a: ؔ,;Ahuou\OIưxL %Wzd>GM^h]UݲQ`4#ƢptTavM`+_Kx;짝 8@-@{0BcWt #& l4dwF-fMhm4co!="QhKV @PPCW8Wl.ͳSJ oa_05 K* -Q/w/MւHHxM(Jk9a&pt{`& ˢ*WNVn^Kւ0;Iu&} 1HhKr8풙Gؠ /.l,Vn-Ō*&>@HL!W>F. ]'{ິ0<O3t3Xzcp!^ ·`#_v܋zF8 %(eNBCE W*b*-> /* )EkX+rzAdkO&̶6Dމ,Th-[hG w- ڿFђCj^ hC]Tc7G]|ô [LTkNY#:1f;D9pP^Þ(v 4I(A7m,]GkѥFƦ82_Ӟ(< hX2Ih&XOTZa*0q^s+^hJ+Y"j6$ _Aa;tQM<DɃiԣ7Ǝ=.acgҼV7^* Zg8y/*eG0cP]GN'-x+8L.,Hu؀\7ͺ |T/8se} akMnzx[&+4NZCz_|:1JyJgiy?vQB_+7iw6ϭ%q /OxvӹF)l?L7MXRW@bzW+c KxūIZx dXgR]14|^] ߮ґ͞~dxV6ag<-CRF.7z-zoKSx*O!bl@Lš(j^LXp݌ik~ 6 ~|~y$/Ġ<'8ГP w IDATPP];Mx9|>`)=aȁu[BV=3_n_q"*)j4}<6)$Z0Dі<^_LJMgc.";qBGVIcPC|KUScyɟm'v׳ޠ6IOUr5O8* PCX @ b@1З:8n`$*mZ١@0C ɇQZ"a]umRqy4*hj)4CGO5Rͥ ֚'- M An6zwV#upVU~,]W'*tLnWq"楍+q'Ixu;M1 B3odz[*!ez.zRJg+)!j Yiq%}ta *w V %@o&<#N8WZt!(o-o-/g**)&!c56&f~:޶f)0 e'4I$ (H~Pop{SGh!vBh i#كҼ0SYT~@`_aК 6߱NhJY\ĶH %wI T_+sTu^E5 ;M g}t2nۍ!BtQdy3$@.ok1E6NxqXog!0J́YNw|4f+(rU6|/^+'OD.ƋGxXݥࡑ^HPr8잸K-(F1wA5dhiIհ<]J'PW-G[͋.r(TXv)v _p{S:(4O|vV{s;TF pH sh~W-cǴCPrWRKͣV yHs|p7q+%,: DН6d\mo&iJ#r4m"-Kam}>qdHg/x<ìwmQm![8~ g-@ɺVYؐlC=0Y"qBR0C@6x 셗] ,T]X- ~ c`{K쭵gy >.}cLPi ӥf(L-9ȪBO7טf?<|O~9_`'{R(@GHݏXq/;F&OŬ[`F2 p G#L6/xsX0'M1:z%cp}$⋛v&|\G|ZzG^:oMPϯ.Jp ѸǠ%^~n:nvvOa/ ARǰJlyϊ+/ b,K Xv do]"2/ne&4S˪@X޶efmT=_j(^6Nr54ʨ, -B7nlN{m!z g 3MgACc/(cQoh2XcA[a#ĽR<O7<VOcx${ePC(s~Y ?`;xDM[4]CRi‚@Q(UQ L3oU&#SX=lӌ3~OVMw̫=g>ς#H]n#kL_t bM_j4C& eMc\I8MG]r2_9Bx)t[~oīamO^)F+L6V=R',Ֆ/ n̻Sx/_=t`q3RKm/5|e.x&#($8haޝnxPg5|>#hȋc2i1wl+M5W|^l['_76 @3gVwt nt^?Wq2$Gi'."+Wm>9S=@-|Pv]A7oae0l-{f%h6^-n &?&X ͶSy?T=_Z&z>t͊*ķ"t9ϧ {m6S ؐXG cmh(n4 ScrBI4bk mr&>Ψ 3Pܑ҆>i/z5mHgQKzcϖRy%֞ƛ; `\[OxO'Len|mb3FB<97##.7AdCy ԇ[EQ/8m1 /A} lpD(`*Ӭvx9s1,+|>E|ls{쯟@xpLIx ͌OkoO})v ݜ{ؚ:-h{Ѣ5{Fƃ<@ys?y @ПQ>F揞~PWP'X.eXBZGƋmx)8tƓK[bT?ЃUTjqZxԲ+ΟQP)4IXVyI@_RM.IrW Sn ]Di7D\<5L:gJ0I]"FiaBGЌ~-Qm!;m?~xt\W09nQE8#r{[W"fHZ\w@aW#ZH6Kŋ,'4 mq- ZYFZ6XK+ˆ N[^d&Ȼt d\`a=Ec !֞y? !ؙeyLg\f5FymPk U;;[kJNd#*4 7Y}=%Z=NyŚ|؂1o4iv*A7i !/XoH\morwUՃJ:BfX[{1V*yO c /8[bm:JB `8p(uj"cUJ돽0UM\gOW 3r`c>6[`>LO! I(ϰ7ȇpvd0 Œ -L~\>dVȻ.DU3?CEJoз2z|8 _mlIm+o.`lP:b7he!:KH -1Vb2kY@׀,>s Hm OWXk q%Ou\aY] YTE eu3Zo6V"]^G#}q/"D>ؕ?,Ek{ [= t ׫l%ʑk)^J` or&h-֨(h2qٸ& hQ6V@5jMr1&ZH֔Λir.TZr򶬉%zgp^{oQDnxjBO P^"eVcK4쇐{,M%y̆ f{5w'-PA_L [ފ>M|٪++J@N6goYcR[!MX$.N,l/C y'Y".ɕÁZΏ.Hg `7Ybՠk&|8q5%&|1F$;E,l g|1͒x;,ڑPE-09l ;ۊpD)Z @! g7E-ay~l:sh5߲|! .V)kZPqp ipe?g`Fo={wq1[hO ˤad=>a lDu,rId6Jka> #?Gf9h 8Vy%|] *j*_ut\(!rXNJx%CA68ta MI] Dq'Yv/F`OTM twAwN3Y}dmH %䵅0> dބdi[J4Jbg[~غȦd\,(͐ .kDِ5kBʉ(0ͷ֊JVJx"k!EQJEnx(,Lf$)cP>2C+rUqQAꐧ$~7e2Pfy.+x&-%VuAa8F<9 ["Jހo&?O#@w_): Z OP a8 h*zd]Wp+9^5 Lw-()=.J jbGN|ei%7\yf[仱!!S}˛g ]<'k4CB#Y'_ t ⩖M `ƞלi}'vЊCyxcY;&gxE[}=9˽=Y Olw1G#|H1UkuXO1_bE-UnuvvGYyq3|Vu|]/?mS YX~hW9 6d|SGb/QyOѪ!ɜ9L<$񌜤$K')OaT정|ƥ ?npdؚ*r؝|B>ZvTZl{,-lm b,A#D/J ,t%' VmPW`BmLK#cCkH# 瓄w(v>4NF&B3n\>ٓ~.O:GW^^'zgzl4I!^6NGn>8o] m Ns]'B9[KvCXT.K'sxC0Ɋc=#!QKچ+_NQyߑGH,ˎbgJXZ L|4Pc/y;![DK'pG%%}+ѬP^ve;)8m\0B0G(ńb Os,>45g\KG.7_5c .P?xK):/==Q_؁QI8,pw*OwXvO\pLS,AA)PQ.|0Zv4&KGs]CԇSyުW6Ex\#鵈*~~Ln;o( IDAT1+CNҙb/5U`:Xwh{ ׸(.CBWP lp  !ZBȃp/@݀ LDž R [ƦUPuƞ$Wf焟0nW~f9rZNoMR 4s[o$SZ$Jah;F;kbN4Th1^(>$^I|"wH۔l{TX7mmu+m-VGXlj싢.<5q#x?pfYg&a5:7+05g}}Tn>hkU)tgM[ y">u %5ye5 ޲n ` N>|6kc?Glg=\5R2` ϮAD p_Y:5ZXk <,[so~+d*ȑ\1?GZޔe,/fXqh>")Rscc#VO)Wy IR^;#~s4Պm)ɺQJ[a(⦽?[ܧyyE5gًe~#qpumpT*(%s'9iPDc:ΊvS&:hKp$/8LZ7 $^LF~:*v+Q1#OP 4 u פ qgPAg΁U4-Zf|AY,KbF}O/hI9z~ܱG  Шq4 {+g Gs2;o^ ޤ6־ ["\G/_0.k4{7`+@%y*|EA5ͥlPš(${|Z|AtyHԉP P3 O>6IJyUՈ!R !*8R(WzÒb1?,rS>#/EKpAbxU4>b{Xgy<mMU:GK1|,c0 Rpy@q$b0?ʋe%^S-[HvE.'ހo gY7|\+. 74 =X&XFl֢zH]l4D&HD̙ES0vz+[&?ヤG1o -Oa E{{燏9|&cqހo+t]TpMAc oc Xp ⡅jW'a;IF!J;#x@PJ.4FGwQXxK4J4:+op]mě`񬸸uM#|;^>0,d{QsPVh9nV}y >yHhnl#Жl[{pyT S<yZ*>쪣Fvߗ&'؄x B5 hL\aJwJu(v4(]]ÇK7]3z~+'+-mWt^^&dX^%[;biY԰~je?|>wba$bwfYzztFt$a&LWgb?T])lv.xa(=y~ݯO>ʩ鋅H"b6>rEld/ěh(v}zFJ@*A)񞠫Wmj8.[Kw#@/uw`IOm_j_Y/`:o*崲j@WR*$NDz zhPy=2U1b:N:9o&rj^xkSSL?4/'$WOЗe/'zCy7SʟT juM>y8 l{DK|uv9H ˜k{@7G<5q\T=+k.SYR 1قIgJ 8q:G Qk#q8ţt2BpK/~ݴ.ykj `p8sPkVʩ~)yLM!&5V54>:"B3B_.|B<[7mRߪG--q&C$^Û=p֢е)[lp]TT&tƕy8>lNA4XZ;J騉5 ,mz ec VAe T#6p'Le)=!E`u4'y|hd4u{rS2g^FIZtbm`.G.$ֿʚ sFnl-ʉ ci;<""ocEl:W4rdTNvl4)6{z[Iqa1~ ԊP"Lc,ŬAYrU҇%|DXS0]V|-Ygz+tA_ysvXwa|:<~yaX]x@] /u` `>]7^u| ZiVX]W2L~aaeZJ_FYrQVpQ= D]ec(v k}NZUcP^LN"Z{hdꈲ5pەZa&-46tSڠǚŸ_hZF\]jɡY!tڬs #h= ʾ$fg-:ZܲX6) 7b#Q/cn=k AaX'ug;&_N?B##E2TҬ#[WAɕ(\"pYm)ϴde4:ڊ6ghso<7B@(jczEv]kGhihy0xҘ W*5?,oC'm !f85́Y(FT=]<-;Qۛ/w"anjomc(BljİJ vY03j< 'H -FzXNX!8Ҟ\M+Jn F+5^}ppfH2|S)y-z0t9þ͗DiqZTYGb9cyksIca/o@Pro5rE |NXjm#78Lߎ3>:=n Z!YM?T| (؅C仞sEcUPȠ=/>9A?'VsKk.JP>M{mm=,CԊ&FBx^PH]BPg4X?CT#-yH2!#14?8K܋dy/>BBvڐC0u^|Լɇ{\򷰏 4T<4X|)ߪG3tu0T,Σh8^UDSJwb4]q8VzS_͌0~ =V̂gtYAT# Y ~O2Q |چQH+AFǘӰjd&CgŅf:SCf%-2\ez_&h^,)QXsH^5*jP?[jq8@QK.qEE92ۿ ,4jް'=$6T}'8kqy#ͥjFwua T@Thw{.,0Mk< K@R9%W*M%Rưh,\<. fB[<*ۍL~R-2ߋI1ourW)+,|ɏmi<_ B)<=r25st+²0Ag?Z,\2R!eP^ +GL1O 7-dmJ+% QtAljE25ul=M])eŋi'tgEڛ- W6[lu꭭Dc|`FIhRh~xTyYGnIeYHĜE@.!YC yftBwaYOge JiqM’N`:X'|(>4t>U(!''!UW\Y|R(ї'eh4}?\;"&_fvwOVgcV$H?h 4.ݬ~<:Y\ *e?24Q8|$nS/rsR+%w|,1S2EN|0aݡ{| lU樂?.e"NMFZީowďٴ7\"}z8ʎ"1+}zhU>:"^&^< R\4 DHxVL1,Kpⅳ3'Vonڲ?\#\g#ωAK:|}_ _[(mZwYJ$(G[D@΋l8O(mq8Xu@-`}nrڝVYA éW)+xsUiVfZWlE?ycqQDmY+eӻ=a`uҡbe4Y/53f~:[j3@O=~A =O<"iG@qwԫ>Oܧj uux4ϵ*C/TT~ٙL]rKx~҇Vus-ce/W `r /'9P78 0N:α6xpwR(M C6jȗjQTKRjI+ `µ7 2gh"F7VX^e{W,dRy2n|2+h$4^~ fpK[*9MoB.xOAGu(3׶Yo/h}%0`yTy#^F|7X A8E?&i XWe؜ œSs Rj/ى.Wn jiG-5chiYK9PuҺ繟5MH$h[ RLmÕ(&|h#F!S9Ú$E=|o< 9 30wAWf7|6_bC-@t_7Cwgoso* @ ";ۗ /)Sy\A$K5i汥zõҞ%vavy؞Os|-9W.+}ϒXB6j7\O:6rx'Y ~0{o;#7?@["TRLAWÜaL6F"I-TxՏ^sOpQߠOy;bD% ?1XnBB9Wy@a¿G&EkLyLtt{d. M&5ÃA\lvMQ ſNJ[lӕB_i*RqXLW.[/a"-ETtI{cS8ʋH.D7eN+_ @?y>4{{y7{VW)fo!\ӆ/b]q}<u*YV-b:B޷]혵't/ߊRaQW<_H"B7\AuKf#fue1bJ'q6dDJ% >;_蓲 ?-?$</N,zZfS xzNIx%+tOhx>cͥXCXmj /-S #Ne-,B+%~uGu=0uy]w|1ga1!hk#?|bP{ vdh[ ZN,Hg\E#я[7\O?XOc,ӣfEĻ 򗤫1NKWt4yMSO;J&Ks} oCK}r4Hy%lR,ppgˡp (t!=E'ӑV%O/=#E "lm"c2A [ z6'+D}A2o 'd| a<p h6oYf;Ẍ́3y1ƾ 6փ'a R 3{¿49O##/xk) po|/VFˋ $Wj%7[Zd~Tn{yAzJM`'e=CKl&3F3Q_I/7Es8 (aQ3fZTp{^{As}\͸1b.ŖJwuRm'x[ ^3Q?p|e}-x1*EV9;^8D5=g d oCFZm{ ~#m8NlL>92MvE<sS/ (^ z`"@3sswOnVw` p /fێ%[2.x'4ޤk88Y|~M9`gQrSiX'b} xK T\yIOf@U9*[=}}vV)W;wJsĨ{+=b=UV^J/.#Q7/aV3t=׽wBu\tl"C-ĽY;}}ӭżUgh?BSٰ`?|,Ŝ/>TjۈgbBa01ƷMlV J0 jزH@ai-Zo4QaiΤ )A䘸:M̲=Us[<*ڿڥw Js}>ke=t]fu4X'r%vu>v_eǹ3ڔw"5jo 'IUJ 8]S<x{{K۠nꞔ1kFBr/6$4[@&[z8|7$'* aETs~`aNix%aa-{=5˟Mˀ.^-WϿe{/~h$ƞ¥+"=8KcD\ȥ=%g!f\]u1OQ?hY/p$'/vʽ*e ;ӁR`mA~QzpfjGF,o&./G,4(?La4[Dj d3/cC ^PeD^q4p<㉱Ikʦ>Ɋ "_U)57Za$mF y~?A|TgZ7x:6 ɸ2 {`;fuP:->nX%W9Dׂl,B7u1vǬmGWn>T(RY/EĮsE%T=~yTقw)``b Dx'MM9b=^qձ5j=I;)V6@6O!Km=2̱~9h$̷7kN)|$`htXބ݄WZ= nP,ΰPG 3O,Xx& vTJ&hU0m3F U}L%PP F5O-#/P\\Bg;iW՗[dpͷҖMۦMGSݚ.U<(8,  xqzWx'Q%@xֱ٬'ۋρRs2ZAMRUSw`''lhɯ1YJA[ x;_&[x%p?/WR/Bü,{:OŮR4W)dε+O'Ԍ &DP-9Fxjc@2}K/shlf;pJ4; _VXJUBxI| fM0O{,(ܘfDptD?Y3\3<ۇoj +2| A, GZhU{B-RsX~{K^4h.G֜5RTNo͟|uv8_n*rǟTGbRΡo_ꀘ{iWB鬊od% ޤ%g$ŸA.-q*U$6'@q]l0" ɑ)!P% }8Vf[]3;H/v: ԺV k%k7gQvWoJ0ZjF]oL0"'#8U+AV'Ur5h~eI:79)q LFB0ܝVIێ(#Vt%1VvUn$|Gmԛy B'rxX~+'!Y+oś & Y_tAj i@ VGlLi$H?D>`[cAHEe%qB!Df "in {p(X¡`Dh^;hA~KdvC/ Olϝj)4q]pmstLm4?B%}}C.#^R yE|p!{9TnrY/;op ,[jM\hk9+ƃUwgD `"L{rbu$D[E+S*) nw4[#a&,%6 YjAO靨ߔJ+xRDV!G8XOD:AKp[9T \{=ME -f)K^*VdX|(7_aǦ$>asX ,ĩ0LG@+Z9f{C+]3 4kot4K*.N%N ;N02M aWZs=95;rhx>A9݂ b"q$U>Sv&=O*#%gX to(# `IhSxD0Ugm24pNQQ8ǪUy-ߗ 3Xm Ypb/,x^ʜM_>$3/qL x-z/)zc()*ml6JR *īʶ$g2 ѿ+?<89=JYZx4 -revJ?]gDۈJt =,0Ii*M:=9eK\<7?]!E߂tBq7Ӷ?+}=V83k*Lin|Xes<].j/2lhvȿ9#'m[+٨H b2Rwljmπ_%lޚ)OU\G"flvہ{Ҍfw+E̱Ƣ;J>] L1ױ=~n[NMW4+nKMe+_끜ھR -P5,.^%W m 5/kH'`3~"3^~OGkUҋV}>(]P\-WU?rq+p>vh)G m4聕Gj"{mJ8'26%_q1py@ypH%fդ^1'fDouY |GO+~qU$^z`k/rz^4s4rDi ^L v 16?2+>#zsQIGq?XQh"v[tA!P'<v6g#Ɯ>J}f?RY W~Os I~R#lU, {h~EQy)X<'a[ʃ2;}2O$!k̒ =%k[K;ruc\I7hs&ʑKKԋnQ6sLy8eb[?!꒳0ϵ.`~Cyx?>UhoXMTo.LHoJ}rX촦vs<}m؉4 Ѐz @BﲿT_dKӏǍDt'J\t)a# %`D:I6g}":lϦtAz4B#.Ćn*tz6d0J0ϣRP#H Ҙ p0O~ga  hotBW{U,vkt9Wc@P\a%t|q#!+zJMk <0خ1iF&/$%8oLdiLFLl)'^V,.)ûtY Hɣnx-:czD³5R!\6Њౠ,c4e+&%>zntaXOXp34956r܁x_Yu~+$ ~vI.x[PNڇ6eGMdE?XiU.hjfy'y~ l&֖ G{z~ӶeE%9S#]ԶN=mKk4RL(O󘭬&=b=Gl`ExŶ^DU4"TR躜Pe{a)v? eyPi_ Z9s%bQm5;%m{=|(AnT4y;d߸70#VǾT]8n'P3VᷡEC6ezhNJ_`8pSdc[F@,`TA|'+߂g][p-d䚷: P7X?LȇRJaA |rT 噠XLp2P!)~&|SF~3@nUS%>" h_w[k47k>p0x>I-p ]x.hY X C_e}h.:4QL/'XCO6Z4 D~A7@>~y<YY @~V8lc-b}eޖ7F· zTp ̢5pl 6HzVRܧSzxi1q 7Z%lk$X>W>gKT>H$[|S{p`Ux9?`ރ#*r`-9 3 >S'Wp;ibv"v"ܪyz]H8|##娋/ϳ%wL@O-Eۺ;8Ħ+5/TSFh2i`9؅CMt$-arԔsF, V'ŇBA z( AO@+AllK>(rBh5o϶\2](F%vd KpH/ ?VMp+]P~2 _p m >b|? .&^E2^)(r /054t{'YΞ&}FJ8ͺ p#17h2YiZf*Hv|yY=R8cXR鵴4;=gFp4d ZПƋӾ,EwzS2H/rQ^(zØ}6*K4o}g:G?c1=sh=g&C,@zPYe IDAT?U`ߨl툴_lB_>~02A/PQ䟞{7QPBĿET~ 'RKפgqZ?+~m=2+1 ^.xby'YM eh[SU>Y E>/d1#|[poЊ?,`0mi=_iF%GZ$ف$ϴˡp-C#9xeV,Մ|[ {7/>7+| j{v8ɳUMV'J-#CL?mY56X![ 2~knl8J)(S*2D@ EXgLS.ߙ cQ ,Z( c.t#a$66|  GWK6`Q"m\ގ'ȏ/s`D?FO |f^Y͗b%Jg-IBI#A?@`K4iWe-U]>¼yȇu|#ւm`5d XEw(~/ci]TH81@ xVhn[;NI E>f10: L̇n~̆ 3t5IQcg<]zk.@!?EzjnWi--#r/f!q9l,/ㅤ36E8Hr m JzQ`bgsb`7_4J<ed+QQ !; @'{Tz#60jz!'^*%F<+XOp<p?/Jm퍯])"]QekevEMBw=zX&}Ӡ:52^ֶ }Ĝ(q6ªnl m YZ/a:ZaUu s܄ P1GgʷW=x*jnB2gN? 2\ [ҖV06UEM˱C4K 8^`#h1,ߡ x,E; 쓥o7]mJ5awuUmUKj`!&` 6ׅ娛5婰>lBy"V o<ǡnZ~:K@{ bNgfкѷ9W41W˯cZ؋)lT4ϳpW( =W䋸_K~i*˛'>c>mNZMYb-DŃ[Ug%VT'/[i;&[E hq4F( utNkZ8; hSMddxЂVmG[ݏ)`c£6&LCWC/C[AC>,-ONXS&`)\- s<[ 4>Y5?@#:VFϠ@Yڬ 1 }i1ǺBJwq, [sB~p!BeX"tFKv#oh$g |Đ̲|puGF \5cXOM z o/ J΢mY*k57˹RR3OB1 HFl[ 5kˮ2k~}KsfG:θc p֏)(mixZ?@" F8MВo ۜ}5x1Fc(q*/( ̇;^ Bs4HgXQX=d G2_W]YFˋb,gs2yիi~SJњL"N}Mbyk;:ZIXN?V ah2=!&:g\D?JoYfI#,<=Q95qw?._Imw't=ѪFTfH-R$tlnpNگ %NKiqPF,4EӘ㒒HQNihՄ( 5+QrOmaB~G^[}U ^!"74md)UΤ, cWXKwvw%bggSdYs}2[d*qk-,{jS|S6ey]KFZRBQ,$$RLDi%[U#[t$BQeeXC`X|TvWVV3( x YCܓVQ<-%(7Ј}EȥZ94busKEϐ|aS>*sY&jHKnh P7.`\EȋSe"ڂݲ̔E Di[p]}WÃ|}J+:ƨ[4)7]>g~-|eb6GQu1#=lh$G 2vi 22 7c+;V|,3Fÿ}5Y+q4̄?a ΃[%8*e>/z'+rLpGu£o \BJ7FGCY3M3ي^jbd#JAnW(,~ Y3$U;a#0et罸;(2ZOZuY@XV>.:p2n ѓGΕDzt&;G1]almhu hЇ"fL\,H`>P,k֐B$M8ŔPMql3C7cĶQVEHq[N_*ΛC} pFb "|HhL)KaG`Ŭ NlJ\ e3Dc#yWa8KnokzW шt6}E p a:Li(ݥ ɑjs16H^'(/%NKNWKyx-X^VǬSm.S"4r8 dGcWiKeRJcYoYi3N~IlrlI5\?ԷL%;3Vnl,|)@}qJ"ob!~G 4Ytz1`U4oSF^C.#E"Ydc K+fFJg]7&l]P(>@6f̰y 9v`$kcohXLn 霒z Hzh6o6Ws_l+ߵ>9gJ΁is^ .H!=^VwFB#Gd̦W /Ck|Gu#=My%~ [q2uſ`[3jWwcQFWBT/EzrGsl;u(Kq>=$gBs@F]%~aO 1J[x!Q9]`w#͒kϚyi%s^Vgٜj5rvA-{xMhۧD}TîPp@Ѣ7A)Ce#)lr$_wu( ѵFȹ]("0\ʚ_"-*btMdC9KGoa90STelly*lO`ՙ}KZ1V38 Z2:BED/#QzM^AtUr-nʊ/ B o`*8N2SŹyk'ǀiCnthwE2ǚ1cYʷӢ5WEuHlv9tFO->$p 裴 АLd!$] +܄r*IC"t|zؗQ *A6i_nG&nB;{zB)C+71 b;\er;&Kh.#/J[da>( I ^_&4E*Ur|;(M>A%#s,1' ,f d\=M J-km1|_kh#v|/Id1D*tq*֊,e -4>$yr>vIAtx)lQ(.W+ LuqW+-YoYrqqw(O-喷g+> ( 7Q[Wg^yLރ1rzD\Qb G;r|SCA#9he+eAh4}IL>;TVOMVcZ}wBHeއx ,]Pf5/Ff`}xgI fb;;_i>h &css0nb5zC?Z1|Xםn}/yY؊0 c tx\.E#6 NB;=W6>UBhQ<YV;<'$=ј( w5աU=\9e}d}VǙ2Kd['a[5/2Q%P BJK&}­vtNNkm <_ Q[x|# ?/f.ՑS/_sCG;]QHLE~qlnFo{﨏%AWH:w'i8uPl߄7yEݛfzǼg e47~sûC)_s$= 4W'%^ I,iS9XQ\gH7׶l9кR=?hzN؞>C㺢g8"@=QGS'#vx\6mxf|Y(P-0tU x[l\`'Uzᒽ!ecV?d>z5`QHYs5]'"Q@Y'jIr]QgV+yin  Nd}|43[W AwCII,/uNy Ǎ& u *Mf$jCGG1Q=vt r0}>6ENGk༬((q"ܑk|5爂~۶7Xw&fyQIFXE+c3-< 2$۳ev~Lq;ʝyusC;j!^4ލw$s݊ u ^|XYÈ+bE\ɰ E ?ȗ?(?N4H<ÚkݲdNiE1'h*wMԯNNz~q-(qԿQeR^USJ2EE}y-pFĈp&H=OBMԒ: P(߈Pk)ell !%;3eR?瘧E jitu1sl&-l+Yk&SoڮXwg/Gy:_~繘&* ^:#PV&ڊ;ѹ'kQ9o|]3c9PD#%m b$C=OS=ݕ%h>Wߒ܇^ (?)4#|" } x3uZDmC #ЈnpEgAzbFGKj Q5s IDATa3f;%*"1QPS%DβZf \#o2f[qs/c2'd#W-)b'SjNͭU|2|O:l\I]/qz~P늵zw<Ԇ-<8ZEYJFD{$Baȃ(Q |1nOZ[Bu\݉(+zr?pI:\ M'yW臘Ɛ h`ԁhs<^dp^Y/Wci@8=G29+U 2ˊV`X@2拹'} KdWWp1LvWd*2?*$LU-Pa4 D^&g<"Z@' dV7EQ nF/AR(Lz"'n'! 2jCwT/z$DB{`qhVi3^LU/& 7#D@F{Eoq, (ᮠ6WN28 *'>^R\'L(y32='C|7YBGqY8@Vh4-'W2S]El9-#u< G~:&j®94{c0nup;휝{$zi{31$ՆLk6|=qbINZ]d*k1D%\47$m(jJOJCN\gE9!UOetRDKVx=)VΈDFF,WrH ж&8 g^d >u9oǷz)gxv96˹ &#%k<Eu~Vː߇`B1B 42樉B\Vr@%7[ݹqMe1QޑB`g0~PI+Jp+enBO;5neM"n*꿌4xq5ePVZy:hp^Dxrt΢-h=_re6Ye Yɾ ZSQiiVUX9.oEjq"~@NQv(z4uJ9Fȏh7^[Ug %Wkns]23Nic!# W"$iqp-U#z(Z3d:ֱSWi6> ̈́]iq9|g]e]E,MP_>V,rd P^TM6?YFŬ,x?^Cc_9 !{Zޔl֋) 0Hoҧ ZdQR#)yR&#Vv_ -;(GcpkB<4'۹y=FښxUQ4 7xH3%_XD=8 :Z!߈D`\--|M$2X(i CbARi[lwQ<<3h_Xod-9^yS S? weK3Q#q21\bbQDbQَOG x-qwx:9p=aO\NrW8:Gsj_M\`*4!1z*N,t5}@!2ݧSYFn*.`-a1ۇ 2p-TtDuX}O~a5q=wsv6" Ķw8N[**1(byš< DZI '5!rޙFKVCpGtqeT_䤱2Gar'ǨǍhOd)'!5G@moi) ]M~ʓ*(3#c=? AVVgc(.wd,OEtH.g?鸆7F2Z徫H[ґ^q_m+?@q##zƒqQfuάJxG1_3uժ{etTr~z8*۬owْ$rqI fWu^"]ivMFx/aJVpN/>|+I B^w.h h:̂s>D"*- dt77" dVY^d*ʔNމ֤yCOdý]5K>؛e;c ϤQYxQtUe7TnIwmR[9ihuہ_jf~b{TI%9Ҳ{bkt(r`lr,܅V275iv Y@$7k!7Q4ۗ*@' 89&puZɪdQZ G); ҧiV`ix$\[5|5tҝN7ԂNjG&N@UzU}_s}~8`-Vз<{PO\|_B]; }1rߧp k&zi QV=Z.fwkDgi ^2>Yѝߦ'Bpu=BPH+tdTVRVTG[#>``ޥ #1B'*G@-Ė!Y[V:s/86lpZ$6i5vSſVꟴNK䍼 7 '#dk̮V~{W9U@B5*`[]Av#S% =qы$Qy0F*ZXlr4' F id9s((޳"P/u$iIǸ.$+d(YDF_n".QJXΰơ79QvվnJZ!;,'nWFt//Y @og~yRfOHWxWd! iWj"X!s@,΅CЊ'Sp1< eX%l]\99Rngn)r60T49=K'۰ڨ?.pgz{~uUV#uQTg )TZh-V\oޣ |ʊ?P-|ePvq\"Jbu^[Iv$}ʿ-'ɇl=%wWrԊVp~|bD֫2M}~iS"Olfz=g53m_o[*j: J&HS"YǮ,r";FO2FQ}-'&ٸ8/Ɗ /hPUE :S)E(n/gyesu9$HF;z2U2F&UxI 4yZi$㾆SwadrXyMe+@2bq9s(}QZJƠo0pCTG꟝]=*%DCIB^vMu;%rnzrW.wIM&H ;^_O2Ե%ڋXkF*Q_aҗ9E';9:r)LY!ae Ǥ97[7xǠPè$okTrh1 ~dѪ?,l,:g= IIͅD+Y5HL2?U&dIc/M+9@g➜x-[u#Asz"*& FURDsTkb/v88؂Y9KLƟU8 G>,c G;9 i> ib/ckQ/'*9,A9( `?>Qp]CQ$"Ůg> aHY.j/䜒+tOb8"ޠTgV[ܗ&#M"J& C)<̀p^p<#d_Q責-Wˢ) ..VS6h$^c([DɬeW"{C{\27bUIgtZUEs g4WUཽl V!#/cݐe]w te5 #h;LAwhX-K(@N"¼hLW+w[CQuh*?[hl,0ykyǷC'Xg NB7,T ıG 8R5vv5w8YX&=4ޤL5Kh_|.{M1%VG",@~z&øD{¢'Gh3͍<C&?EW+DL'X G+p2 r|#O/"h[j/ID+Ӳ&ڕˠ4ѧl);Xp[\f Kf} BFI}g5GNҺ Ԭ&SL;K:"GB}4m?cɓp86hg}N.HUCu Ч7#?|Q#C93x-Dhl#z6T|TOt k4X(ZMds( _d'5f.'Z؂Ŋfk"Y`JGc3l5ʙw>؈p柭R IS`%ds:N{ڨ1^FΎ]x3/ƛ駓*H=L6|;K"E[SE.i`9:[;fTPnG硾xRUkzȁVil6'i8?a;BHsrd2#KC^$y(^LPs0̋bOy!o),6E{^Y\DɽUAX ^; Sͪa41;4T]hfI~@\sq\^h r$ 7_ !op݅F*I+8$+.s M~~`D氆rA< $>GQLu.Ԕ+|HE_ x-5s$=dGX#Q,-q'6 mes>,r4Iu -Q {y5i ye2Pr" #aTm;Lg3)MX}|f,j,b4Z[UTM<ǽ޺{h?|x,ɮ#Rat>ꏏAk@URGx.G=C.KԔEm6LhdTof#vFI5a~x18]'*pE4Wq8ײ޼ c5K##95}HI#7mrF.8-+XEeIS&{a;އpۦ񵼾UT*3焆\#j%v^Rn,7:t0}cƔ.BGUYt0?*‰w~\nlJoϑTo]{'; )x-}*B+HVOBd8C<|}(n[55"Ud.DC hqQD|8h"o⢘Dsx!:;Cl 4~}gWDWg>@'4fp̖B`;l<܈s (u;dNY3T;UAGztZv==&kz hIVˎfNjV98rNY.  OzO8f޲˾Z.͕+KG}{hoee~DI =VdFP'9zR6yE-F+<}k]3Y%p+f(W41e >Wšn\B$cIH/SQ^O'1pn:=|1k1f &e'4-Y\'([KG>g#㡫㾾A.9 Fpl;߱GuQX/(0kX"ϭRYuPGi6'S/gCDGl.vy|U: \Ea .f*pSe&8Fm!3>doN ר|B, IDAT?l_qlfMp̕f՝50clKdP61omGBdZaku]}X'<7z|ˋ|fuֲE?jgjxdW@<_7\ǙIMcOdb3OG'j4>C[Tx$^ Q.HEFgJ~%-(_dtHGVW&>*ke2=B6Mgs[IVZ9NA+s9v v>5|Ūlv0Lgf(SCEת1ZEͭ< ڈ|*2P L- ✩V8x]TIفS$׈}nl%Ҳ#jٖEY^ED謶yD]EWȋr:pɢ0u"#'^]˝c#FikE>L/_=Q YaџEm[YE擴ll=/iX-Dxքߨ^׮r!ǡv#} MʒOD& <iثNCAE: G\bDVvm֏&ڣV!˕M) /V,Y;(pTZ[tAS^m]$m:O1R)-y<7r#+,K:exu*ZkYY4Gppg5Цޏ䕵hTQP-R2RQ:c"_9r3g2rL~8n6I8 E}R?kVK?}}#9Jj\DmVGqCC,zwX"gг@ c~1ϳ#jaD5tּvק ̨9 O)mmP<\5YQUC.h+X-e$N˚6$}ӧX}O_rqެ9EѬYCUk@?q6|f;ɖx:ױWgh/Br*\&z}CYԼ|'ً=I^{Q858454K^6OJ7^zL{vMOWzK Q8!U^HY1DH>K#.Wm)8Te7h3BEÏ +[t|7i+@abKh9qKvEӮ.^vm?AU=4lflnlmm7lܰqڼns?h f9\чZ#N5Tr (,G`;cT\5kʎ.Y_3.-ɍgqn+Ɍ3Ί@uֶ`ODM ڄtzߪw3N<+kC y""d_!VUish~3`OU'q4$C_국۩WXf G>=H/0uc8?7/P P.q$p_ЎT]tמjl69VaK\$DڐT;l 1X/JfF |zW6c=-"9t(~3_Z񟜧*7s .A3. & y}`J۩6 Vp*!z|a+NA/@_p,G`.;Ғfj Z&-eo&_H \rh}K_̷Q;csPgYW"i)wDOugbmO/Wen_q!+~wJjPOnE8 GSZ#s$/nMJzQ(}T[#֪#r9K['ĺ$\UM}IXu^%FB,5eOq~UjDO _װgzMY zL^cM[Z#ᓪ`%'r/f\ታW'^g?hSkܱ9wdc d3=rٮ#ᕤN௠yGV󗹂r7mr0[Sr Ât?"9XY6}"a<,<;utuw[)@='%x QS?::nZNտO9 Nqf]Z0i1i;LY/)[p?lΐa= Fo~Jr23êf/#o+53Nz9εPW?HRP׵'ZpAI8X6bTrX{DoMĮπ2 Lxu7r-vgR%A/u-+AN>/U~e?f}l>BwpsrO|"ɩd1WXAJK+ZYC{g\G&xwZfi1.+t=NfAqPTc "0A Oщ6MbX0-!lNoP®a+KF۠$Ɇ0Z:4BP] n10V-RMU:JG2=S$$ yאTɰMy;H&J{D3[W䪊WðVSOdBɿ -P@*V5IyGForJUE x2-}З;Wܣt}lU㱐\ꑛgDx9fCg,c]S%=eAD#Fކjz&XX.44Z t IgM g~64`]PgXu%j؏u|(]QJ,uIJ&iutP-- f(j9:uNmcђ4V_2u`PG;Ƹ˼F:y~9nPAA/\4 0gс0}uQ!ڔ%|VfiZ]VR;#͢Z~FjɟW)Xy_JTEpz,Ca:֩l aպlw_SRQm4%ɖ3$@ʙt>bH^OKׇ|Qޑбv= ^RxPQ,g2{J{-G̖{2lr8f vu3FAP%X 'DPV"&'%FÌ'G2>%-mw,wUWG0Oh݌a1+9B u E2a<+ST%u!8^v1Ԡ>'̆įpP"4S U9vG^|YFva#HwWwT1xb7f:mj?O1jGɦC٢x ̀Q3P .HO8%5B|EO|b Mz۩g\ٯ8 tpnpf%@i'/qwJU-%_Ez|-.4]0W6؇[({e}?6=mNj5Ziebm>eT1lZ1۩ ްx9qEX-:9@ұԋ~%̀jVow]W?V7<^8;duy>O:yu7wS` hs#u$aCD#c/4W+ ~[cu P'#sze} N7qa􄓤cZƲX8"2ToӮ {O[-=yZm%(S β&YQ*Q'IXK!| xTb#kȟj䄫ʅeƶN± 6ˠ+nAq68 ZgwE)#ւnPRjl8'|Yqٴ.z!Scv4&UU+_&U1>)[l ݮ1=gLWxb۱1|bY4YDnˇ\j`ܺ/&Სf_|7 ;?da78ޗx=lN~`M |&i^C sv!`+OYs9t"n/㎱qUk%O-%3.`NpÖR Qe8B^lR>Sn@6udl&iy%PgkU׹YܣfI>r0{!?Btt;?Z2j YX9=T!^;3ӵ5ofxK\K}bENvϬՀoYhqq~odח]~s44b?! 3niŲ)Ц \:YW.-fo+xg,2eg7]/TE1ٍD$E rҧ3^)˗7^*Ff';gFdN'qqMo~Gy>"3D r9:WaoDUyƚ!v36{w) cyԣyb5clB_^3qLAo`V`JC[ꈧś#`+鋘, |7ϚNf|]7C?4LǩO~  ״T#X75So¿sci{a`n+eV;b.Y ΐY6dK ,C! 0IL*< _lSw@iIuW~xjU9JhR2IWH? Z7(cj`aJߪF؁[Haj8>{QipT.O xWdQW5VY>pNZk5ڍcX֐֧"IEV̀]{]hCZk=E?fsJ׊y#9IweȺHcy`'si!ŝW#PїYd7H7/ ֓Fx?Xs¯hW/qyL/"6/ٌVZ_}9Oqgs GY: >) j|ė;{:/U0ffM>$7%Ic fA ~Y^1ΰכ8=jX0rިuf73z %$O] M1b}sxy`"*z}7\Ԓ[eIV륍bDϒ$tBy6@5S墌88Y_.vI*װ=g-'xePHoBZ?3FPjzYTM3Y3Tr o/YpGEݱ}U Q$;c%>iO:C 2VV}_W($eIOҘ/η:ӌ/jo HQWӾu]5y;}+ޯOܧj7`S{ƔQB߇}v KZ\8<}JDƃԒ}y*^^xA4@>ЅZmcqh"y~vql|g=<=قH䍵Bb-! \u/C'zsRNW|~K#>>A,˳+`(lz'<;9>#g=K%z*֎Ɍ}ӒjD>~TAULN^} `FOO^|ϒJHΒS[ſX' L OuO<>YWѨ=Lg*\VPBgwieQ&'v9vƟwl?& $E?$9FGD76F_jVEd@='sX[*:Vywg|/j*cHUoC8L;qpF;o AMX%_{Fv 'v^QUYa5 c^Uܱ[0uO]-{ɍ3li;CG5=.`l5v,dbzmM%[X%Sޓa;hFh^:CHuxr@>A{=xH'P.,V= O5*8G XvIߋQvɸ߲6gcsWLV9G3F? J*ZRB2'X9D dMxP5Xx\#VȝVNqΥǻļr6 eapW+m|"-JӢ92 T௰ pp >x5P60@w$iщ/x3_@26}i@gM}z61x $C@U!9ޔCVr-P֣VX{Fuc2aP*g * chõvYux[gij1N&-Pa B~c=MhQ{GN' ryi^r`Lh IDATv_N>1Gc'lJ\JG;fzv'gt\nŇD߹L_]q <_,._#ECD+bg Gڲ|APGx=F9G5]Yc>g/򂤀]H@.3>$#zO931<ZS 5{:GJMAS8K^Ɔ`rY05@4_s̟3Eo1_h flxKn]NX]3dA9z6l֙eҖxR\czåkQfG*A0a)jplkrY8 .nk:E&Gts܊L+=|iǍV"I uJ mUE3.?w TGnAVrum{|275}}ӗ )*.&j~w5<'V8]\V}MN|s1-ϚZarܒ>'vɻ }$,]$dt$Xn8dOt@n G?CyraܭXY {Ti$Bʬ\)4<~] L>Zꕽq'6aتlP{j\/.<`ϐLTs"Υ\ހcI-JEHwyF5{73.k8eT(9XUl7G<6|BA ؓT[Z.0 R29l4͸WkJrTk*O <a1`NcOOVHCMZ:*ܣ}$@ )rOh"bz5=8M&3fgs31 +Mr 8VBX= 4jmutY.tSI>RgJ@s.4mϓWW'd58dUH/T%L 7_ &vMc S}^WndE'ZpJkCz>\zE|?|h~^o&͎C;QusLWKlw U*zϤYlޗ63,Sac"46ah~hA.Î`_2g{]+`YI`>?r,TfT<||@3uZKN>mK79Z~MOnk5a#HYLP'%HW@-b?@}9iס:[jO"td!T>̮+&߇Jx+ȧ 61D}y{]~[dVŞ&?Z]8( ~'iڧ>x#7'`{+->NZۑ߳׽VC Ř3Ni:ܓ{*LxBNy-! Z hM6fYK=zwtЍЎTDiŚo8Qbd|ȋuRUx)-Gω-r(&K-vG8iIi}~|Jf i2US~]&o91:7h9"۪j5'v?)j܊a0ު2؞bs#G<~G%*EJJ.rb fvvd>-;Ý#lpzZ>P]- |ߕFȷЋV8m:IgU\alY'Vq,b 9ff'-M~$JVahmvdl[vdHndHxL5Umx [ZFo{ڳp]b0Ab2.'25R t$bUk@k9:z'c$kmH!x*=^˚2VF% `*6a.ӧpFGN J/V8'ܵY74 U+V8%փ>ջpx AX%09c]G²z VWQt<RdT%e|=8&UqglDSO}.2v FN?NdB,yDwa=iڙ%ʥ *$O[E5|ǎ3ΩUpyجu&ɸ%HFJFM_3J=u?LER\$f"OpJy_0 ^,`v\Jsiꩴz#ކ/!dQ#|}‹Ӗ~{}]7Bc5#ݣ"L*sWȀz)Zm06wG }'f2eH, ˱j Ɛ]rz2$Rȟx]UaUr 9ncHĘJk6\\L wxQ=o} OnY+l#R_|TP]?eK\8l^l v|/+Ah 5|zǣ+“][__f~2Dqnd (&^yvUSv1}$M[Cb3F tlQx^v/3 q4EMrBu $7.{8~gTl)1T'mdZC-T[(hfaFfiM&Zf{>j;U^EnOO o^&8Fb'uTš2NFf WoE~eL_uBoxiƵP> &+CzEEeY]K}TwjW7T:FQ#ؕjly<:jY]o2#B}j2J%'/d)cx CZGD9ïAXFwozh'tuxu%Ґ!y$Cb4w_hGH:f4%Sd7pLck\Kxz`,udP>7^oƌ1/0g;Y ~~W!^O-I# Q{t7 V|> ^2 ?mݪf:TmT,*-jLgrT*%=MUXQZ}J+z٘e6{B2Q} H.eR)0>jK~A?Bkp6ik#~gi8])Y0 TQvQONTiCҐbS 'W"'H҅sd tZX{ G8tH#Wu*]X$G~ u@{@xI$/h쥪ci=hi„+³Ͷsø5[ g͘!< wK Έa֪ZW6Y<+s", Yu,|YY[qӻػ<4Lڏm2ʳ`2IK{=MR9XVUU?;֩ #5H;{A)r4dH"cl~,3;ֶWuX}l]t'we}C^ykjѮ 9n$Zb<ǣ/Es 79[E>{g*Պ$7YF3$]@2ʐFŪѼ)wY 9;`wq8aH<+&‹߉|נcev'ס3Y֑6hk28Y K~e 2cwGdNcԶ)}'#_CI/yR2OBH Y7=M*b]̪@5^"942r6,Wsrzz䓌#c<ŃNlutهpjhfňI=GHp8/O;lW/PYo*DuY_ZI_ i/l,R"yx=L$(S|zRM/t{iO⬐ޗ_~-agkzȃDY,y;+Oby1Gn2lx\RciUwZ{"ulZ%TLbXmȯpAd%bo 9i.h_o8I[uqބڵXV=ޜVEB3Bepb%$!?1$ګ뤩ڌYT]U$CIR\od?9HT)lBƨT xķ#a؎d*AH:$NZk2Ypkk8NR0퐹TklJBϑ膏#<"Y9F?5#nEѶuu$+ Ey]n:kr&SBpRDzOCd (JʧvVW#E$?tj[U}$Pxl#DZMk'$r/ 6xQ TWp$u0vè jtc}ᖤ I/ϗ&\{=~aDi}hd:䟴h֞&_٭VX~/*o|)kn%!;fI *crg 3 @  :2Ve+N XӬ=MрmWp[u}d(F[$wTz:M}.>"#x7X}/ SBJŞ#,#AmOk^zj֣xEtF*QTa(dM뼽ι%lOnz)O46/jI:]ke7v8jk* U7EFm<<8`M)jI^ ArAcZ6PFՌ4:G+85/)M/JHN|>^slĮLʿ\Bjª,H^@VfCYxV3+ӐpeSj47(92R܏1d]ĉ=!bCq*:i 4b4\IDzQkC7\">#}#b UYmHi۪X,]+])7oY^_$?TQ1JV7ZEBiS&Tf>>kLfbxV'C9:t+3z!`G"EvQ19 O"1+SlrN< DQ$8E]Q  ?9[͐4T,/P=h:G:Nk%֑bkJP"4-"ױ,6mqܮ=ݗ܈jH}5QOq| gfXLsH+ [ P*#-\Z[ggGK?nCĭOu]la{wk=VƓ:[ޢ~"YvN/h}]6.dlϱhoZ!Oʋxyc}ڬ6ٽ K+~ZW@z`Nk }-=&Ő@+zLY&Yps5ۭ:wp'`ldFtQ ;窘:DG+f!H;C-chĘhpKndg 3jw4Yյ{Б}_%HgGeYNbYcrz`u@…hk ]kLBdMX[v';i|P&&C$ t1arD~YZpk7Zl8G:1؜DߊQ; 4yisLS{a=RҴ9&@AJz$`9Cr_`x]RU&i:=.cQ,CY,<޳OZj苜 Hnqg)cBf%ji/6[6fv(-xD:0&}rr&k=gC:,549HwKi1?%[QZY&W(gϬY\`H.0Pmz'c\BF'H 7aiTe1 ŀ'GdGT+c, _qpJՔ}(jt; cwdOpG)WE{w5qRETŹnWTVt;H~ TINe+nOX=EdֆPi4_P5Ա^ CD|t޸toYf 2/A~OAa)sVPݴj]=]3oѷo uQ^*՚t6ej)7hJn՜T#w#jP5Ge%k9Ǻ2B-Oev(̛A;Jfj &IQP^3d)qJ ñ>u[jÕ>JՑnԟ!WM4n s&x %r*/ ެ%]P&%1;mP@/)͂zXv2-cҷ<)35g4A+l hj0]c+X+*sKFN=2`l/>5*(*kωPVpW,"/YArNBg;s)αxBSS"xTlUQ}r'`qYaetX/Cz9jfͮvX+t-syޫ~'Iu]+vB|oSz^6rz.ǂ Drx(ڇT : 27a|V򄿳 MDu܃lR0 GS IMd'Y #Zx[ak`šꊅ| =hi[ڕk7,QQ#BZ@ª@mcUem~&G]"S2 .*b<3Pe\ ? 1YM? ~O2x*.2{̿dqrFbԘTñkVu*@u4D":舫chTd +Ⅸ\*' 5fIbZ\ Z{n߰[p{H:=QHU0?eoeDm'O?n[C댊 x{z Y'n;FY +dCZJz.r OȪܡ]@3yքHcYWdrb9ź%ւRrRLEq~8pM:@+NzN"iS'?(<\Qw7J|:jF_HF夎#A !.`8kcgY`6]m=NA?6}P+Wq*ʋ;ކfZ2:d]6xcQtNt nɺ2#$9ؗ{:Ĕ߬ց '01)JW까^qO9 r_? \TC&S9ǔ># C@%C 82HUN}aG?]Aœ1c#ZXX)lòVH`S$g0ɍ*A)X"і>ZrZ / C5 41uvٮƻN?Մ<8'8 GfU =\8eDviyL('?-;=paeC:^Ld[D/@A̒ M.as!^4Set)>S 0w ?dǃ=\,f=b-F\ A H$+"( */Qi<\)P\$24-:Bv '|> eGN.cPExEU,@gZނxqW\B<փ|./EtSr,lkϕɛD@bF'prp%`kmC}d ^eJUOчL_!uA$فsp^PH+b k~ߖa(gB]]{,dZs2|!UhWy$,"H< 7Ac aK@SHTAx a<EcKpRN&,ts:w=0 *l'ow(!'鬏 u`͆%el"!Fڤ2HZ 3P [9&!e0TX~OLT&dܗcìbg2(ŋ}"Z>/Ǡ?& x\&@o "[Lc7>K]4S!_)ٗLq3na&֢p'f5( r5QTP1mO6~G"ߟ~-'?\E,4Ǹ."MVU$Og@3uqC] T#a ~Zp2X aDYϬXxRd?L[4mWm %U$ -wHD|S,[TakZ FZ;M9"Eb.N)!>|S_%U=X/ehx h3IE<48 n¬ 8kI~\O6q`YC{ (&}qC&REI|%N_-ETEˑ  `Ő?^Oie?5gb Sv2,I7p$l\g'T&j4 cq{kߧ/Ox&~? ɓwN.CWĺg=I)P;X<*zh('4Gg˭P?7EоD3YV@Pgv:C'I>x=M#J G\ 0{3KZ;<촔Wj!r |ώkjo ae?"{DV/u]H˶oC|[OWf 1ӊM E=.`7<k򃴾lsp5Az LnV+eF׸NUB7`VŌyh>QUwC3% yp0:Ơ "Tƣh.Yp ӎ-t2 vx)7~ Qg`Zf&~ #M35ARY92x-Kce`/'e6F(pXEOshBru:~17*AA *`=/ x'p(9ڋr~( =6~>d6Z=sLn+\%cuze,TJqPDjzJ9LfPQS4ZK:1.H~Ûh)`Z}cQ-Y_=:, X=?lo`7bBh()aA8ı)C\xR4cYO `~ ?0X:jZ=rLӤn㝕`AɌPL⩜l$%`10^*'VYܿ\采o 5.[rL+o0 7/zI?*=8Y\#H!u<)&ľ.qf%uj>`՚}TA4%pqAj'$6mU~|6%`]E qɁ9Լ %:NR35fgɶ(MY|qFG|}%!ghr yiE}b{چ?GF9Gˇ!(,wQWLE%qjнWQI :AlH +q*ht9B7^ݳ x Y6$`9MzR&zx_qQ)ʧ 7()јpqVržuX\YGӰ5{Bń #}RF(g h. ;ntvؾbfQD+QC\,P[2Bx5w8FܒuP{@ /n@ot FekrC&J:Y/ֳsz9;-)9|X G)C|Nk &'~ ,!.U"Zxa]$ϣu>T\%+H>6fEȑ=7ǰv{fl-lD|.{e.{v"ULo]Uci\Q1^^:>=f'Q覘L!B, Ulb2i|_rQ>b̂1?e30DW=͆K`^V TKf0 "EdqqE`3QPO>r=@H@*˹>׼c@.;"EKD2c8mo_b>^]]ގ*+?rD+$O+͹@AV*qQȄey$yՓp!b ooO*0rVcV+/jaQ9+ɳ?; `nQ}sV5kjT^lxRp k\T{ ꕫrk,\r kzk7Ex մjR[kqL*+jfo9CΔ E/| +#Q9鐛72|(]?->u TF3XBU|fv4.^a3~e12REJIb=H]5*u&7/ĻFDz_!R\Ynx{MlDV/-e#L) ^q?u[Z^ȥ-oPn)$HFkax~mqGv\Rw8zFa3@|`V`j/Q4NtHƆuWU FVD) ^+hAFP4 Q^G5a1Ae2 Uu^_^N|jS(~U"wH(RD0jL3_8tlQs{\r32_VإEb 叀9Jqi(ewK1ͮ6W77)"IыT=A?~݈U*۴Z(*+M*Ea'|zG4:^7_;=4r7f9%AB',z`7Q\ӎr^G~@D0̳~h󄷮/C0"jDP&( tN:eEO/F?t Z6W wIx"jA`(麬GJx;0DC QWYR⅙-iH]}I%3p\[CR_6n O #S ^/ !}P -e|Ί jkӲ@=:P=g8F;?4R|$`"BJ,bjIΠ |((=[)۰͹_VAKn^n؎ZCrUFxzdhZMyъ%WXW[Z5My W8qT?tqF`!jX]yՐաЬ{S.fޠMq`⼫͋ ,>vA#ׇ3ѩNAY؃z~p({bL\_7!tl`CЅ0wЋm۸,B7@g?:Xt.+v<7aIb%LRMd: M" ]Lr?p ;;㠫U؞34@Ք_4UYn$a9,k_JwY=Q65GҞ2T%`ըJ-bwZ1x\`KCvcQ.5q8W)j[Q ?\kcd_:7+1WP; sf0/. 2S\N`y)Nu. BYH$8ÕRl"Xoo.:t6pM IDAT],lI&jyd6&t\b5Nb.Ԓ`{Q'tZޘ_t0^Kkd6hAuD!oJƈLR@rbiG~}E{6(d>&tu,vxRz]r5cޱ?_8cW=W */I?'ۉ7!bSF]:i9ӿy{[^?iSY0OVr^3ՅNdgY>;HRfq<ߍSg F vOfq:mv1i8nND=ђ#A>59d\P͝]_˻R5AЭ"g><mx7} g6(BMWZ{6L1*-KX֞dwl 7QIA6 S  jJe<5ʩԢ[ `=|Zq!}A>#NćrLo#ɪ)]> h !Z!K./igqNIt6!ZA+ssRL@ WX0 ᠗q+^jv'}ϊ/Y{[]5ڍ ]a(vp@4$?Qy 7`j_VeXwsw /dO02e? V@,yeJ[kfʉf^QN ;Y%\;^ɣ10ϝfq6Ϸ*kˉb74Kk;}I獻Q27=wݒmdQ2 MFC ^J*jxj:d d8d !IbEnEI;F ևsc4Hqd3;oew@@W̙UMQwos-R~on >Ҙ7Gwd4(NYQ9grfmB-v,S' hcҢlV. ZdMv@{{<"'1"UqHAOP2xDyW+MCAŔxTFԎz*"#$tO߬Us0Mv6?}~H]clȕ.#;_`:^FEHkGjX]ٱ:!ګD8')$:]”AȈJKɕvH]PkX ZXRփb3뛽*/~S?k}j.9U=l5]DZWTPX#8hd@|W,DZIEKd%VJ>Z*"%jw vG6 eh]+󐼠<npT453ֱ 8)&TFy7Ы=S |93!{HQL u0ɢx- / l#1p,D<ɗc{%OznRq]oSuϹǹq$>8R?SpzWj_5^Hk1?e?S06],.VWU^BZ|ӾVUaz(e#y}Nk*Vhcur˨,.4XbaFoW V::J|ڨwpH=di$f74j_ꏠio$tatXפ1Xj,>Sp@d&U֡cm/k#yFV3Q g"z} W~Am_RĂ@?,Lr:(4Y-3Cށ'K.ޣlD;Rٰ4d)y6D 3_i"b V̧"7BpyB?s0Y]ξ`ǐưܮU)l++)xw |0P((dвrBT :s H > w7‡q BWu\KZ! Nэe+p*73ph2x b{@/cFRj9srNUq)Fv 2꾍(,&vh0tW N ۫Ÿa#u|"((9LE+8Ǒ8p8;Q^R P%ku(Y YI֣j΋N@ z\W Y{68k\_v ʣ \COyuS< 3 Lү<޼jݐ;x>Y4#٥0ŒBHXEg1|<%%rYP>^/Ɇl .[ z?~WoMҌl0ςR'+}";sywų/DJO[}ܴ6u@~LO)Q;kT_rұYT-iYV2^ r̰2 N˛9!W +R/Sq3ןv썘$agZG(9lDҰYNsal5a5Bz}Pxt=.w3.׵BaڛE#cq]xFV:9g6*_53١B$&81?{َ& 3|,nPG_7c^ţQJRL#MSzXW3Rw02络>{#JP=Y2H7R%wHO8 Md}Y R}Q`<2@wy]:ֆ7Sڻ38^ ٨VT rœX'z=:kB,̸|šZ "H 2-SpOx;0ApJ6&'$[hV.uOӥbmhǟIt /8VSa<*PΞ $t\=^*I~)([&{vQd>K x/+Gێ[MZ $}fStE5U=cբ'0-56i.У\|TVZr-rc\)pPG΃@4?ZTv?Qh)Uz/w݄.(Rfjбk"x[M*nU{kn(ދ[jǃ*"{A91L4?>2kLek;)Vg3]d?n]=g +A;]R9ߩ4@<=Q3SI~TBZt]݄P^Dd tUo |-Yp</'s@@lAxs_O|IY[ր a;1VE`*'(/J~-˘>e;@ݍC\tyAk5hra@lpM)NEМTo"ަ*ޗ{+;:, nB[%dE{7vpN]kPrJ"J=]Vw:KH J>xO`4p ^ِG|%_l}3alnf~{s[֦_;f4f_M5zثVRQJa-R +(jZ}vVN&`5ܮAaefm5şe-=bɯ};6՜[y%2 WJk]ƣ&gE+-@{ N @j :p"Ep_l9?bUE+_1;X]^`=gK 7KUe n\+caMNx(B=NXCK˒z1ʄpŅ?ȓ4.O趑{#>/P4{|-=BhДVz^&͇3{ceZu B2Y=Oe%9eUC, "$lX]`qOa! 77Vv&I!)TqM.ν)ojkV2ãW5g\F}n}iFzm®B-XGVPFϡr ;/Q'NQ:7qrlb]ѳnvaxQ PNnN>Pa+d;4VohTZR_+y(m@xO'Ӿ`<<{+meHӽcrdwpwveN'[r`/ dpb>(^XֲV Syc)k-%Ln!q g0Aަq*Z$ V5v r;8 0 '"`WX&4l ɟbS݂v-J/pc х8QgqHU|a V˜4oY# (; Ekiֳ2h$!'5g=5Rz _pyH9"J2 ܳ6ޓisykEVr@B;zk zJ[ƫoNNg@"B2V 4N`Kv;nm o/Jvtf@o 2[j/Ӈ~p# 2:ʒ$ /1( Vƪdke>=χ@ q*9yJjlW#y77 Q~2q"GW5@Ea!u4@oZ!-ɭ҇Շ8|wV.O+1g^ uapӇZ;h9b+\}/s4cr?p)\F1Lޖp|&trDw !QⲚ*RJ=juQe͈ _a8ZJqQU?<.8doy_e&ӱ%L+2pxDH^xʃxq4k 看ĶmqcvcI&lٸi<[ -"[*p_k#['43JTW:[]s$Ll5LWpεzggX(zB ,u=ſ"SG}3/$WLⷝ7g{vaU>sw{:\#y%y%{,e-fLxA6c Ao\ZMW0LŌ'm 4/7xWBn65eѧ-2C?k۪7;Ih!(%ڕ#z8OP+#/2?wW鍓eD sgyLb^SeMzB^`Y[UW8Qg?WJ%zy{&Ukqd4yO5Z^8e nb;ҏ-%=)9Id8p^d<ǫ~d*<M0 D?kP+E/fS6Dݏ1|+}̩.? ndjex݌61bx|NgGyE)Zr՞#"ZPYI.jc]P_2w1s;:Ո(v<CzCi^ XIS7)I'GZcU|Mzxsl}/xӞ` M:<+HFG`y32Gj< |ŽŢ{|'Z N6V%hA}+2 3<$N!Sk& =J8":ċ*"a+HsMZ?uA;Uri׳ɬf:]#yU-vA,B!J|4sNMrVD @C+}u'C25w)Z+Z3]vs5m\:ASH&\iU TkߓwGD__Ll f3:i<{\jj؈k3Pш5KYuԈ?xn kC7Ac+8ߞh 0ZB摋 :\J@SU!}Feuʓz("xv\ RH;2!2*C>t֔6 zc01\$4]]sW`FSD<)ؔrk!g)OMWq7 ]@@9J*j[ WP z›_yVhw$_ i}"l9h$̔8/AY>оOvƓڧۨ3 7k yNFd8fX cIx%+IЗR|m r*CR>c=U͉}y2´H}: {px~pp#ew)Bi˝D{j&StllĻwJUsH8 `$dC₻`k}:Qj_WuSsҌ֤҈#TOg3 YuFbS/fq&T/;꼓񁧡сdo,FZ;C<\U)&&HM<\.k%Z*(j.󪹕L:hy IDATN>6EcY\QDI-+:c\ڱg!F:#+ NbJqglizi-;TwRW{>E|CBXn×v W?gޔ!V#;E.m6gXQx]+!޲gRboeQjX?BȰ:9EcV :g^nb62JȚx-Dw+Y!ͬ]9 h_Xgem>r` gV>Vn{N[z {@eywZٞ10kZ}j%odq_Gj۟)uS]\uZk/T cQ!ź3ȿt $7!M=dĢ\r8+B|-W[䜠}D1/<; L35:vy_} {[䞦_Ėu|0zB?!$T&!ZK &c'cBZT40=huTՌsywd{x/8|'-`pTS?vyr>^8zDZgbӜQ9а*ac6ޞ_ܜ>3+柮CJo<4^%HUUCV a6 n02%d}%[5ˠ/ɲꈉ TT-_;كBsPY, <=̝Uo\O}\R\YRY&즫!+c=7䘦g-W&p OõVfUs=ѿ)q9EU,I"O~da2{1V%p˛53yf= ]$lY+W 씇zz:᝹0p^4ݤ(}l0ԴPb.qSN.B%˨ưP+u^Jɷr6ۭA)&8NYCҼdF/K793V7t,SR;w&NCM O􆮸 jBT(zI-Y- kUބ<`?\ؙKJ."*Eɡ* 2d^ZIjka&Лs ͬe_youT[zK Z4Tq)a- C"]BXU`]笚J_8ؼIkvwIcdY HQ5j-Hm~+AqPտ/#iA*x%~>'iHϹֳŷ8GvoL5i3]i;DGgDRTEJoac>?rP3:y,4sA$Y 1[C"1+UZtu eż-+/d-C}{ !dw2zRwCzzQPwiPa{<Y* o}-Jg"izi+p^y8nfX7 ϩ'g,r)11ސm"=ME͊y1oSDkI#3b1  (s&bWܮ Z)Z Rtm˙o۹ۄ 'g7  s*j FAvEW- =2@WM-JU^#4ޓC}n- : _0%Zَ`Yk3i2o:-e3io ||nkd&lWjJE6]>s|3*;|e`%ٔŲ: q-Ssj̑Ö́3&_ߡP 5X̓ҞϘp5m (zp\qrrxK/6y5X$o56.(b┰íI+c1K/ӊt=2^,]c#Z5 ,ޚ`k Dօl `h݆#1ĽW:(kRee[SlۜDˋX+B y0C1N=+]N`>^nXx,2ڀ>ǫKPRLJs '2F+KY ˽ 9W69i7vȊ1\g'9/qS,J}(0<|v2Lc4 ?[^ w1RB0-, l@[yٱ\Dui7pi$6\# :jC'Y]3#hʏQ׌lvTU<߰*N:u"79 ̦3NDg-u]'tVs]d3 -3{ىNP!YowtcqO3=!F%GI(Gn&"N}l +@|Y>d9m\gd:QPgamg!"4bc~Cܮ|j*j&%.F<vL aLJ=mH9'u))/fR9l&㲖W 67LrXY Nǻh!w*Z6"Lz2KX+Pi;&aSM6\F\I )ubN2h`QV\D={T+)aj9W7W?B͓`[0^Xv#Ye0Fɋ,q8WkC~72wE9R*&BW2*UCf(YSDNjs0h"'?,bN>"$E4;/ dq&ڧ&߈0VdN p^b9e%2Bu{3"\ maV_岷򊧶#ygR5B4ZHNbZJx,R4/S'nRfVQJ|Wi 3h"5xџTV4ROՐZʢTa 4(I%7\&UHO}7VE!+ŚiB:MIj9"5zJxᆰFI1^cA+eA*d~^sUW$7ꓓ6hpB@i򄆰uI}ʎ=Ѭ:5/CW14?./k zY6Z3b}TTw!둽:-6Ɗ)Ӎ!|CO}6SXȨfitU,o`N ǩv]E9_ nЖ~N:O ig_3d5RSU},&"K m R'gԲ׋) S[<j73VGXG`)%!l橛,&$]cS$ .t\ +Y.qڧ2+2Vf-'A&GF#4U WuⰓ*=µyݞ\U{YU10JFsR.܋59 a[ca?qeŜ07&mPʹt%fגH9eh́Vl1$ev¤`<Ʈ+?#R;̞BZSKxry9*WupZ UNG{x;ӆM0:Z>_@3i(n>;X$}A\8Hg7\|d%z:xqabG*UH:ln=tL%dcP{ƦApV?{ί?dyIwd&S^ f&O+ΟSi>ZG) 'FxO c嘪څM4Fm>(/6kq5j=4SLnumKVMIolK/TPOxT hgA[;N[.e1]sqy sLN 83?e˫yE,2#\dfև!{U'T!do:ǚbeArև0rk50څ;Ǎ#hK +C9Ν~Tyg&,iu$󅢐6t??iP@tJ3 .M'vьRUI/k-VP[*ƖVxo[=z5oAf)g 4U9Y;y$mZXVU寎@\!%wjyM_J-LfW||րy&?@/'c&^V9Tt5K^'pNDc/ OQp!ki "y+KdAMR6os}RFe\÷?8vS Y4ppAv!qx5d]ȒTv\bqPbȣ.ʬo;vYw[ːbh19}^Xs1XHZ֑E[~1j3~uh>zƒ9Q+;Y.l\c9yJ῰KM#ȼrLh_y"YNJ_TŘ屿 v u[VC3^wέ Ej+ҀZ~m4['A$7BVU5Fh,-3{zӨ[`lWY&b4k0hb6zjI61{EZ|8OW̩LV b(MXi>xa"FOqI-&wQP%wDuoPήz]q0֑[r' d&E ״^MjRd}KpuڔxWĮ'x:a F~eM" *};~}yLu,/PuZUVՒ%E#zbY v5QYX߫ūJZA멞=\Cv KD%cyu>mt7fsy (>t̐pՍן!p4bX+!QUjrO/hf_75p)z_UoccFfZH(%O)u=X֞O(/jwFlCt̵hӷV)8:xa6ehSך[,mF]_dT%iuY:ųvAta~_#(8NgO f NжlʤKNJ4>93QF-^ ?OS{$En(/Z wt$StgX~׭"Pc)6񛪕A57CD];UfUK5ϵPƮw2ZoE=RM5^TsUPdQa9ΖAgAI!uSw4 1ze62ҟ, H^88Oe OWbLͨ3ѹڢ䚌lyHjuK9B UNcNhmlve%2˱^]@N ŵÛC⧃WX鉇V#*m$3qr ̷%[,(E`k%עqk=Y-ŕ~SUKWCZjohd b::e_^P_޲PZqX}"dAʑDg7bzj,Y޿z֞"BX C%Re>tvHZBeC/o-@s $z>~ Y$8SӰ܅wE5P#T57 ]EMW-2®pbm3Ϙŵ=bX$bg"cB;9"NZ?4|am_lY2ZLUԊПmDVf--}?ȎnېpY]q$Ǵ4 Sd7KIENDB`libvips-8.15.1/test/test-suite/images/rotation/1.jpg000066400000000000000000001560721454007373500223340ustar00rootroot00000000000000JFIFExifII*V^(ifHH021001004ohttp://ns.adobe.com/xap/1.0/ ICC_PROFILE mntrRGB XYZ $acsp-)=ޯUxBʃ9 descDybXYZbTRC dmdd gXYZ hgTRC lumi |meas $bkpt rXYZ rTRC tech vued wtpt pcprt 7chad ,descsRGB IEC61966-2-1 black scaledXYZ $curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Kmdesc.IEC 61966-2-1 Default RGB Colour Space - sRGBXYZ bXYZ PmeasXYZ 3XYZ o8sig CRT desc-Reference Viewing Condition in IEC 61966-2-1XYZ -textCopyright International Color Consortium, 2009sf32 D&uC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((4 cayjuw,WWWUko91l +tf|l @:֭]]_躂+9tEZ^&Ǩˏx!R˾[Lty۾Zo'z,۫lՋYj^]IGx|M}^^1gVJ"Od5GCB/EԚО(zꊚΌ8 )ǭR7]]]_,rܳU޽/)оr[ֲ֭Q^Yΰ'Ѫ+dž05>~Ui[']]=_ Kt.ȺS1DPit׷USDSUuUѨEd ΅2=-$m[/Op*t5i[<::zi$r)ldE}P"3=[H~1FȆZIJgt7~SXY^|0ӪI{&6e}Al; %'CyZZijYc!kNr{O 1INs9N64]J3Ξ`U: qU$X|' 3)9]Qڈ9% ţ6n֗{T2U2F#f/9Fkt2Zҷ֖F$irnj 鼇9jbS"m hc2$N,hw)znM >̋UYR<l5Ԟ]4lFuua]t;::e5xg-йcZ)k6x'.`aJMa120T!d/-dt-.#AC:X.&ҎFǨEyL8Y4c42ՈMTyvhGk-h&7g+kZ @jsna D( Vlr|+d=\,tV՚1sYҖc!w3QOʍ3]&*ʚjL:Tt9A4쫨Y5}+snhUjy3HQytɻZ྇v:Zm+6}IXV|؃}$u^|ŸjZ2LŘIifN3/WAMV!o褞^:䅵HCVQȶ]:z\O7_Zrf͵z';xN]sDΜV9zI/LYk:kеfl׌ڤsAtU{9jYWKrj FR$1aW/^S.&+elE-d:!Tڮb.N="o,bhHR%";>S{0* _$S\@ LhDoFC2DX\-2f6lP< 0H23.WA2GlyUuoV:S2v[ٞCDx-X帟)҅(:|3>G> ~kOLJ|ԏ6,Ոj݅[:$3C+ Y:VI imVumChq.J׈ &jsuQLC i.JUbn)0Cais$e- Ѥtgo||7!aXnAJ0Uu1I*MЪƭҭMK"tN+MTENE d77®g1K1y u34?LQktuX"xmxXrR!R:fyKJRQ?Z MdӴha2>+*-)hfZj-Rr,(Y;Oի8l۬b=xܫIqRCdiEꜵJj:d"]>a6KFѢ}BSY5zsŞ`#OUexis LUfdZ/V.ֻ6ZLbJ_) *[V)4'4B 20kzէEaRЫX4~hMs xDPALtȒXj#Vm%GD)e:aҢm:DM<|Qwk5guܭ̿:wRqRȵxVURZ膁qU/o[zhvղv*ѵ0qGJ8G/kCҶ*yk\bkh(n-ϫk9;M"3im,Pjx ꋎ[臉=*eez鮝s@you {y_|4+g@% hn+rm 6yV ; b~ؿzUkq'Dzrg;g.!MX;΃my7P9v"Y6]1/O TWxz^LffU93v[`lmm'8bFnktkpM: bε[Xd|N6q1.Knm-ODpp]Z 3aάX ۅCyjLU矚mCyD磻䝥H ;}$c>]wk`S@tmP*-cQ**ڭ>p/AѝhG-BOlzHBݫJZ\+Z-w g:S6*iOe ,t֫o>jpc?a%OdDn뀔ل b.E5d*#gyNGbo~} z2b*qnōtq_]A76jo"lvPӹf_rjG&Hoܱe ԕ \NY?AUG,!ݬ]br\rI "ÍoE45CRҬg&ͮq{OO 5,J;_-~!`kؕZ$Zޜ|ρ\kmGmQ$H 6=Y֪(z:Ue+~58cuxF`l8;*D%=-rԷ.ojj0K ='Ը,I~z1f&p`l$̳0 HRTJj z+_ѱgSxC7",@ѦHl>J'\[12RaΪg{>pqVpMs³R8ϟ?э,Xe:6`X,`Y#9 tt6+5Ջ9a1qT:an|Gx7c:)f# ?Z cugUa yO"caX!.8$9TYȲfW[Zqlje7<^ zS?32&a;w3D" aUVK3Xˍ,@'(z31ڞ[qMXlޏ-FC35x?P}aLSo3 \lSe6$(+5*DJ6D~jvJnLyL@!LP);tky gqY㗱i؆U*D,zeUGpL8G)pfa83eӀWϹWl˸i~C'uɮ]Ab*l9"JW+&TJrCg`M&2_KޛaEՀU_05ؐ l~X!=mLkA hN#3GdJZ|"8F ZK AD\kZVsjڸXu, b t̰3.\E8!VW?G\%QxPC¦䟍/2esJن~xpu88#7,_^Yf |$zP c۸ni»§b–٥&,QQy6 vis\Dӏmh *Wsj :0̍L>$Dhul8Ƿ+.[mjpƺeשM8*尡xW˽V!MA{@,8ίH..J"䮵r+rJR*X_ϸ%&gqN?Ʒ֌-wN*~s~*ڼe5Sؘ;H)Ї3W2ʐx^G|7q+zԻa BSzXk**a7YɲuTeo=Vr]634_*iI{RIMSPJrJ\!YgVk`y`O* 04Y$ В>qط+s՝J.8uM?MMNv"I ?zUqs8W6 sP#'YUc3>˭ոy*o?|8bxŦkZlLt=:?#53ő4fgp-[dQ3a@ OϱlC`ιc36-v`c2&zOMZx{ Yܜ䉸A5 n\~{X@$iٖ3k-;Sej2Pf1]DQ~Qzkwɷd; H%WY<Ŭ @C{@f(tTv dO{dM.`٬G CyY [Vv>cNά]ڝ6,bF|Y 2gE`}|ٞc"_"҇s"4@d&EUj90>P dą4uUzk%Y"RY숧bOnBܜv*1:qdڙ$VA(Ҩyl\ۊ.}Dܨ.Y\Ӄq|J抯ŊV@,C$C"Jrňo94T],7AI4RȢ҇F*>l|$ɧ]dTų~~>~E"hy]G$~LO"6Hjz⟁i$~?i$"I8$j. $ί(UlJIWN0kѴAAhӮɑtTpVk&&XTIE q&@fHz}"ͤ@\ҸKM#j3F&D叕#8L/i HtZ䋚QHTp Ҷ")$-_dd܌K>O/)9Cl4(l K R"H`#nsM&OGB=0Bfבn<#B{TcGn$lI$I$dE1DB&)$85yOhFi,SP!Gk(!1 A"0Qa2qB@?ح $ ,W/f a<i8Μx>K.u*g#̉Ih}kXCV?GlEUĚіB[+'Rr2x+o!-֘O3u]%k#",rDHD/X]ߑIK΍m90 qژΟfbHR(lC.-)$n/KaK~F#ȥBtYZ#)y97+Q1x"褴rRFșv'z_mEc  (xmdT:-.Z.O~K^jI:Ɵlhz'\C[L `"Z4($QP|I.< F2b/'"(TG@i+UYJTZy؅!zIY:P!Bp8G< uG!TFY#Y.̮QMÕ(^rU%C"ʱ-+&=>1|ؙyrp<|ĄtYƍ| hƙhEiE m Y!k QF O&4M j{$9gLOZlMqL *gXO:݋Eѿ զ8Ǒvy3%̶'tn_#Jt㶼=/ [1W#"鿃6Q"Z"HOԞF^J98,i๙B뒲&ΞJgL 2CeQZ9),4DdZznT6DEincE%kBCǒqFO8ѿK9]{ٸZ/#0rr3/9v'3,c]uzVKFXnj,,9^tO^=׮$#緁[DZ2x7н^}q4h(/iDV '&|m󭜞4{Lc8jeБz!{ eȇ͹< |iqw]Du;/zUEj:[,ǭkK7Q_k JE^\i,|Qﲾ Cj<,l:7ؽ\7oWȪCd;ܩY n[oJ(%X%OIE64QDhKN.J^MmHKOSx!=tY>$YYz-F\Ilt[f,\>mw(QR66οQJ'|QbIBr7>)9>I=:[#ڜ+pDzDqD=*$u=MjnuDRNT^սߑQodF&n^JvMr;7rOܮGk2bC)-%U+wtR 9YmXRd:vlΪRA-\x%-Sx]5vc6mƙv))Y ]:d7~elOm, cj#)"rWtto,2 g/(4~b4JF9^FXe Z:mWvFԃ$ E4Q3y}jDpqV~bi~HTGXhM§XQ(gSY%\ (mxZJ tm>M›+bȓ#'-S7 S }cvʸ* O(g,ݴڞQȜ"Cn^| YM` y!1AQ"aq2 BR#0r3CSbsҲ?h|ߢN&ެV7ď̈́{31s8I٨ W?^N.vt`se|a{u8msZ[%?F:[\,&ȇ:xzdHTa^'P46k6eVLl7%6I&fytSX ܂RLZN,:#{~&)$Hexpm>]Sؕ6koPEQjz( pWuD-̎m|T M#ꮢ { [i Z)|>sd^@3t W8n20贃lRݭfMY)Gv΁s 9WP/͒׃KFS2[6%\ڢXdr*W0Tʘ٤\z&g.@@SL %1.vx| xM rt+%nqbdƸH n—OPPvPtDJmSGK7Xp\ӿXM@;1lGq;0q!A怼^Z'XTF'pLܷTKyZ1q>Os_Mx5lЪdZn8߳= l,7O^Wfu#4uR]?Bq&>aDzz.g[xe7 uCMj~n"Wˠ_\,69J5la4SH$]ƨq2;“ڦ ۚ.y"">U7`AnS$賟ޫgUc.|w]F'e.'ba@LIlL zFԴ)2VpZFug4?򆝸dX z)-LuR ';>pʤWr=SYBS\z>xoę}и<&;3BY uo(Sç [sNwjg$c x\٢\U8u 4 );tc! yVhB$sŠvF42z/: r$ٌĘS"V OE2g9X}Lo1d-"BcBp;#5Geǧ?p$jS9s;GɅsZ.Iok~Ô<+7?cb1M,>,j4 㯲9g$qGU}B;&MY] SeȷYOeꮭ&;2=/]DOc5N•HsQq]xϺӲ{i'C|A-:tR=*^Ef{ ([`"}xxs/=CS EN%V_"zBUtôr}Kg{KO[™|:_? &/ 1 n$CAˏ?l CtFs8N,˶S?(8AeeKt 껠:۬CшсH:|v&!i-æ8-#[$y_zZnE+? 9&dvMa3&U0ǵ|N3q|\cb8oÜEN 'D$ \  J䞈N^ђr8ms#+;p5fh-R\\k? x|[Mõ-'2ʘj {263aQI\ABGU9SCM@lUpeaA_6BuVL+V6Cn{(I .>S#4ri*'T쵨N ظ,tcGgm\/C|iό1vVqm.tQ>{pSU1͚8s xYy\!_42B7Sۄ'/Ne[~H[hUFvC~"8t)@RG "Wl8 #*c~!3Q5%bZi!d PoX|@~l~[nd%M\f UW2"gHfEP+p>ketYPKxW}}0U.tV*Cn*GԌj@7 -Cj8Kwfh Eˌ;§ UQmE1ԽO|V/Eӎ'@XbB$6O:NHꐭtTV?}6[ 8iз^XyE;ܧS&94T;,w|7S.eSχ6WGĴxt>`KSO 5ϊdqp"6*Xlgќߪmv> ]4j\ BEQ.0>T; tvCZ"I K: 3pű;/o6yeǕEukS{ƈN!5٘<|L7aËht'aWJ ш#/KA5sGB|P/7I E-xz&\XO!:7?NG-FgBW2#:n;'+s ahTCC}!H9k1i3-&ZE5 }`lFČFSb梨'¯ AywRr R: XC ] f MGoDD ؇w I-;,l`Цg9I`M!":[4$r(T?pLhȄ\a]YG3-eMNvUMz.opX)"Jdy߮ȼ V^3yfdALivX n10bSrB Gbd|F+F#nq< uX8cGXHpSlߧdp<\f0$r] B{)phb*ت7ydrqao6Fws8h <ׅ{L(+&ǷQaNviO=:&`>?D|V:.ڵUNo'n,ÕBB4?Yi~HsuLaN6o Yd|V5{AW_˖2+5p^]T6C*i2h7NM9K7!2Z3¸x W!ya_=^ajYp?ej=C]KJ'憱U_upUgs*#H'({.TrB Sd&t$dT_KʛF};Nr+'5 7 >t_ <<2 3]~07 s&`;-cٿ񎺬64LLJ+ f 'XX P@~ W!baab9 @IH/逼^_) vk}Cy@\41C,Ā7Vp.xG[-Z3r#T"U}B:#3o jTHBe dA xq 3t_%N/inxnsf&,frKI28-Fޑ TD&Hu sb<1*ICHR/wGGlh[pDLLc-S̨"-A4O66Budj?W$e9B+&MN =GU:NX2!ҚFtدپhnbnY'!1AQaq ?!øx a弓pbRϩ5B\+X4rN018:Vvg9~" h-oW%FY~ $Ro[!-yT Ɖ #gŞ;(.k q.ef DnO&j4QU56K.=יmdqt$nPdXN\ D uڠW^9` W)G0d8r1@){2-Ya10p2s3f/747k'n"pgZvES5m녯PdZ W5(W :;J PV7 ]w(V?dKÏ.:YU")zRͅcx0raG?̺Ĝ-*N0f5G9Dd@A Kg2Q,N|Yzo a;V0VYYUxT> ]cVW+A\ɗ(kM8}'1rZk]a|ClSAWgC1eAp(˒J3gSJL|LElѡ%ijKtHլ {r{Mg`5h!^E4zf0v knյmc P̳* 2TÿĥfT US%U>!qS9,@ܶ1;nW"w1,2qaSUw8sg8#`#go^[/ۇ>,757>YўWL)x={#T/&fGPifPUjc}{h*{"ʅеi6ů츉Tru+O2bs;*CqZJl:8ᅥ+BiGfL1丳ZKLֺ0vdpV}įpI'U#rER|טjŇ+oRx*|2FTP:tˎ06ZzB؉FE>Z⯉x[EʑMzyqeuaXa)sk/3QUf,);ke<ר /xfe%kPi!GYPq(W>o%j0M_kDKOpY'!P-El,`iloŨ4K>?3w.@l*|Υ⚱ njbr6f~Zk4-̲xm튧0y}uhJ18p{bvz`p s=Cf"}Q t6\àє5W Ud[z2JF]@w3t?)/_̰jrFo45,̪6g^kW1+OC1KCY[a`Ȃ7g.YrMDl$-Kn uMx'yEї0l⩽J'|b ,.T|X]mAR=˄ /9 ĸ[L!cW2Y/@e;^B$M. u0_( )7qh^6u/>[ _̩Z0H_.j0K@Le48E1U3]&&;&ƙn&eo%ʠwPB"BՒ!+8Q.`~r3<ҙŇXy?Q(JwYLn g%[i*|E#OS2/*ۯЈ(eZ2,s+u-ɱ*8` F S+%6bQw,1w;C3n.@PzZ]E) 93'F_̸\?Ա`,=gRdf Vy %nNJ;V`;:͑:^b\cuk&a{p3kC>R3Ek `91<_No}˺Y/>[B8~["Y[B],O#ihdͿw_S\C!, C ctuzߨ.b4"xB5%r:K#VlIOHĪ#)9~"ʭ@M~ΠkTxSL@-ojP5c_$OoHR(f#8{U52%<t̘o wMr_S\!kCL%T SrJSvX5bS\ғt5"7kEK0UA $*^O7.I,:nĨ9Y w) c,D=AL􆅅8bl&> J+\)ܣ;=rc3h L2xX`<* %YelL>e6 D W7Yu*-]*f'TP4r C 1d,/ PvQdu@_;ӜpK^P/&U|D+S~1PJ.:o=[.}Dv\1Pxw4nysxrˈ^%P4/io/)H.R\6mnoj^&J Vn"=5n:(j]bԯ uj5 Ԯ察3k?M{j/e{џ-Tj,C@.J+?^vc{xxDz5ڌh"S2D%/P c0{B}!dhSG㙪[}}eZZq{|\DVZwe8v*rfBx*PE/7&QRW[.*YRWFSu [\!(6Hfţx RTķ-x<xI([c' K.Oo- EnXW̰/yRc`X)Et|G NӓVwWEÇ`H=nK1L~eAN7iNhQ% @W\ l`r&gGD&ApT PbڅG?ZF5IjSd_Np M/^gDGomXMޯrt>8r'< 1>5&PSȋ"f"g+)!݌cZv֥of=bH1[+Z%@ ( 5ԺtÙ~R#`, wux7@̽`pT" r:<( w+ɸijrµ~YԷWqlfKaUȗqDqAGq+vzOT <^#3VGGNՋu~ k>麿 G0ۘ(Lp/ 50XS9Чq"Qu.3۬l(8^3K8,?2ժ>cp=\Pcv\)b"7 FZ((n`L0&˂0mUC伺q n'-`o͕^T^aB&*b0/mݦ kL[_1}TǔpT e6f 5Q}ғ3|+_npl}Mv2W&ǜ LϘ1E5[邮YQ@+!4EEB"._[O$3*C26LaثVLtџ: 0cqX-2+39;0pAaI=Qyۆ!qԪϩ}GSw%q^MQy[^YylzҮej1m+ZP"SJnlx WoqzSsD!K"T`k!(/Ri9]>BEFi4.g69P3r\(>*;ڋeiy[W(`A^\{anB4Bywt@G'h܋N5v% xKqzMz /,0W? )T R̕aank VALBZM25oO1e+кr»zm[̯9*_(ZßQiC4y L+n(b[CO2; 2?^\}"?cmcuq(3o0z}S0UO]UFG K"[ɞZw(T{L+qV3'+2^[RսO]Alsw,8? J;BQġ ̫\F < fBX}u[YO%);YwQ 0J&Vy?}Z\ɻ|CR܈1P۩H_`GΦzmNC`P3tԥd,\q6 7(QʰmW ueF]Q~&2٪U[ܧ2SSTR0,pX9yKߥ7u)_*LJ6zq˯wd+b U@i fuR*-W[s)lLe\"U*U8{Z?4q7TKX,r1Aܻ@m:wA0Y5 ضQc>%zY[?;j>QF3L\|K8*N5nUGq*á"u\HreKk*]fQ m>jPF[!=vJ2L[ޢ.*l9b3uʉEe"̥Qyz4]z[Rp3~%mND,:z/C: Tl?P#,RJǤ_#tane4b԰y>jPy֣w.]o5PZ*R,l͝-KuWr"?2|b~3ߝ^eO07M VWV,WAww%Ėx D 9q R *oG߄aE/ y9S\†Db_&n>5aU:+`~ 4ѵz Lf'" m 3 o VrKxayaFIv[yeW2F+{;:/Y7:Uw]pQx'K{J 66YbtV;G,k5ų)q7"Jв2mĀSa/6S}P4ß\ ]W̷l࿃L 7&6ecWL_p6\*Bf&}}"_iiwE27VJoe7Wn M ?A23ǬruD_h:jip> =~bD*aLo>y9r 8qgpğr~owa\a]mTz+Ks- UJr1pm+!X9nUlPl(FRt˻TͰ.kW} 5Q7ýˣ2ۈQiP&k!Y/uV|†QCug0#7ciSuł+[DLxPKA#N"EԶ}ʢĠ5X䶁/b1aMwE+Jq5+b|L&o]kR ȍݿ1ܮ30 )cjy dSl.]X=m,dV1ݦ3V.5iKt]Y4BR@}0 \/ 1S)0 h<`y+?s6UFpb?7m"4eikjc+@ 5Uapvcĥjn򻙣9^^ 6V]dwr7/LdwG+%+[LtBѧ`r#}VfX,4r74B!EB/a̶U,G!Es_^fӑh[bfR+.~ ;xsRꟽE v.;ŸueՄ0mBЂ`tc1@QYv&Iѻ+>c|Vcݰ(99g9Iy> u 6q7~(hroǛ#̫~fW>CQ;g7u.$#3;* ڡR&ޓ e n 4c+zfa/88oɛ›]P竍VRJYtwUF~|JtXSpz or\-q*6r*%o u Һ W/ba=|@+6,n zSg}> }%[G V輼FXI(T ^G2Վ8K@ o,`22͢ڴM,Vj]-8Cg*qvL%dZSb­tP^VM76[э@Lv t\WPwEi52ˊ^]qf/4UW+ ]‡m^1׃DȂy 9[Bq_2Ζ0>2]OquX8,euK^KEL0[>ߤjmXɆ&k-\ S.%b4jn<)g.A$B@ "b) S |jm3Hڸ۝6 yAqLD7Mc@I'.s`/+op% ьGЍ@?? .I@$+$_) $H蛋$I>ϲIM^F*I I:L-pII5' 2w1O^M2qIK#K4QDFV&j,#HlKO3[V?xwR;x<!芧nV_aC@mreDLbCv[B\'4O pc<4VpW? Ob; 7z X?U=ȵ\uYD֡qXxVḴ]O+8fsb䝿 5ρV&w'ItYA6[F3hNSO>U"N|2+:oBkBA֣sZNY qr+Rj]Hlj%S"q,Rps nA@Y]Jlo匝q(J H'F^x$YJ%q󈸒M dѢ;h$/pli;k&4W׫j䐟O3ıO7ۻ띓SnJxMݬ6w?Hsݥ*WO&A(TSvZ'^Kox,שh;96T8%!1AQa q0𑡱?мHyl>˲sˬ˦/n;8mx<:,g݇?c37>{b\p.}zH)yrv|4{K2Qwas=y<²w,̀NO 䏫[σcr'tԓX:˲l[oN\| 'w;ɘc_yHvMyo"y3.dyd*G샟Z-#gd3ط#~~Zucy=?hI?h r~G}g~3ټ R߇:ǹf^v9nB=v ̏yx~Kdy9'M 8ٳ7X?vY| 3 >-7g=ع8d[FG. |=>9';=嗆72[K,mq`}F餙}rgJIe2d3w^O~Kw_W~;;<ѳ{Klި>~$c^Iegx݃"^˶ށ$ o\na_mK?`gs[me3n휽('{wsӤͳX;&K0m1/6ϸM/\8v{ƍذfkyLӣgroKV>Yyfm}=0nNGO%Ye͍Yqk6հ;mض7"}.x}r;zs lCu?M1||HO/m%gmY'Wv%yZ.Fpog͐G'd]9t>K̷χo৞\~q%l&r=L ͜PO|_o؉n$_-QÐ'b}O}̌n[X-2;7חgg y}ޗ {} AM>9fYıѶ璟1%Nc^ְ9@$Y~!a59ۿnYerQג9=eݱ}@=/lϐ彞[o 2'Wr }ݦ|ϩpK`3Y;knm~o-/NN=/{%m񗽿 a< opW۫/c}w>'̓mφՆ~>>r >0}YhGMdrxlK{?quvNWcR]~>ȶ;s%~%2Ԅs㏑dCl'3f#/=^C\td{gâ{a]M5oE/φ,])#3>xX헆ސjoDYώo`moV]pfd`.^. lycߏolmMdYǶyn6?dM '9?|lC̷tn'葼;on÷~ݸgܿg/~>/>;`-[-sax;?hܷV^i|mɵ?HNov-oo~>y߃qzi-6#~^l<즹yɖeANk.Fe&y>wo'3-w~=,=% ?͞< a}1r=!_ߜ!!~?o >Ag^0>}N& {?ly5ݓ0~~ ~R9g'3D}D8p׋/g?7 /ݹiq|-=g'e|'rGՂߋ,,͏lmst`9ݝ?8n;ⱚRRO^_超.[ wˈ~_:+ Wv,ClI7`#v9i6d;H>CӐ>Np|NB@<z>: $_Eg <u?N(,߻o}c1kd^08?gN» &=oOBDhe sۖ1呟~؞E њH3gy@;gF=9F%hG<_-,F?p2f;=Ro,wL,n_ӿvpG\W  %O=V1]coP^;쏹/A7(!1AQaq 0?$,%rǙ`3P6qݏ.~E0x)W*Z1 jQEIN&!"_Ѝ/!0+RU|VDBz8*i,Mg3O75QU~.Vy{6Q)e`]2/(2ckl _爡QG۷epѾ9 RQ̀ jrܺJDlP(apU;N 8<8c,* N`7u,c 0ze~rfĺ[l%˲[AY:ȴ_֙rw/ZdbN`ijb@+ux@Y}Ecľj (é]caz=SL4\cA`Y@lv1=N6( *q7ט#j%#iH +i:VWqsC[T60MhM<%HC6 V',n+Ġs.ĵ]Sԭlp h7cdm9Q#UU l|6, )GO1=hI]S!`PbmR"K*H")2Gsb l\J s-EtFʒg=I|wD2Yf874E5ʲ# *4Tar|•*ˉ+Ue^8M"w)aS@wBCu_-XaE8=Yw1N3( #r `, g aZABKܮvb;g f.OM E0F ,`'2(`^DkG7#"bž&|y--Cpژ%ĤdTY6!/PlKLZT s *RG9jZ% Ryzij өa ̋ ml[TEG1[Mw r7A@(SҰVX<:# `` 4>##<)~q{M@Ya,]liea|XbJ!BRS1IVZu("E)0(Od uܯz yUعV sFVНVIE@s4NT&%wAU.<.p &`s/ĨWJC l˦8M ;8<|&@ B(ۓ8\ʦ(cƧYgifl* xc 4UR1%E@F =RYmvVl4 2jAK#cyGg"^Tz V9ܫe.1'I=ivTXEU(,o|Wٛx=0d5In~Һ5[8]e%*kLT\ n75Tn-5Yw!Db_R#t=cUTМxG􁼄wBZʉ"ȪBU),Z&.^܇dEÏJ]J-ªr / uȈv#btLDUQ+ +)riW r$/}+<*1bG;T6R[TwC+ FpA*5ķPƍR[8#抔B>c[9%w \6*\q "1PVLjj%؁Erx@I~"ʃWt=(}8=S8u,MXJKYkp[EϢsP: sAC*/BVU7<=}c[le%œeQ `mrwSQ\HVeQ1}!M)ϠyaFؕr #*!juwӈ%0F(un5 y,JecseK9&ZᅰR[._Oxq\T}%)<7_09+\K\qyB!QVQ*a]~"^!uװA.뽄ƒXgXWD ؍M:rae啾SU.Xs3% X"ѡ__r Z@Vޥ)I P)MAB hY?X !P"8No]c"[ЏwwϷ(JQz,2Ql44xA6 Z0E{A8J 6?*qݹS:&z-q,(6.Aϼwge_$*}xFR>=bۈ^>bqEi?21a,F=L_9}D`br{0 Ѧ1Ϟ`S?>r A+5e([+{@KB}HcX͂m,Wz_qO.?ii/.{J6])z78*)aoʔ1n" mg |*;r~^UrBm+1*!RE*4*Zص]Yi%0ۈNw)mCi JEق\z,9c|*a $7eJ-%Bۯox^]02W=a7}w,&̙D fEYq;!aJp:^ӏDJrBbзRv7v349,wϴ9NJK%be+o>7{͆.]6'^=)S)*0u K ReFy_ż'{"!S^eFr-3eD\/eWP'>9h=.9`p(0(/ qF @"xplQG^`q7( ǠVQ/9+YQNTbȦVS(ytruCM!~hXfb 0`Yj`Cg((82:}%9NxMO pyicΥC:{ÂrO'!1AQaq ?h0)ӛ~Ik ~DD%дsM &@k VWf+: ڑQ@-1 \sJBz8=ph3v B5k*t)mdh YZGDӆ*Z!8NlEO[@ЇF1^R1lMДy WKp,ET8EBM٣4X%.G )Wzۅ4g:\b@(]|0n6WJ XS' {6lyEU%k8Cwcx* 9RLFrnzi A;D>MŬvTxjt\+} 0V\ێ;~"%Ơ\miQ L!+dd CP;ď-?COp h<NDLkfdIېIߙ(!'K#rj4Yq00/`Qo)odYw7=ep06]Icd@C8-xX>Пd)U[I%0<&-- qzƂ͸QG!Y  @]ݣTCWqhoQzck|pbaQhϪLfd#9ʔ8GDn^#fa"i)F& M9,p?l?yj ,N'Fi89b3&RfDD[+bW6.,MyA 4D~Yu4'Anٓ m"G^5c*MVD >L@.NTpV4H/8*3d%M-kaf@)IpVT ui3ũ>6`FNY+exc6u?6?88@p7/l(gX+yeǘ4l ' t\p%ZHy! f+cOx-m1/XRs e ,2-R.4*7 RSzwDv<:9|acs-L]vaN6( p ,n=F>\ZϩD@G"`jIfj8,5.H١yQb^;?&x)i ;v'HP,вФ+@b*(bހSr!a}"cbݠG@sBrMLr_$& DZ\ i.m3L%TNOHC\Z"iDqaHR1_w5+_OxE]&:GIkNÀ*@NbWGy; slTY =k5υ?&I"aGLˆ|wOkhCp,/ Nd (";fjA 4IXܔ*ٯqqJa{-b7wc񒮍l6TNl4Mv uzץ2\Mq-iupθL6citaЛ#o8]*Q䳬P %<7!@izR'8Dl+`rd*5y+'cb,@f䱍 Ӻ@Á ۮJdq-O3qQnUp7yl苣%F*u5t<mYfy~0.u*(rLcp6*ÕP]+d39DևÂN즟kirOh |_"xm[TlWw$RK:ʽWˀ \q"6Cփx7F$v4w Fp+sd /yR,aϋ"֜lpɏ[wu(I7st;n柘 bq&a1axƪ1s`Pu3Mm8&lj+G_8/@myXSEVsse*<{j>/5\@;ͻ[x\κOp@0*Q(/ufxӣyL ,Û CDT.'DNkl 8:r"E#袸ߜd8;=<@f S[mT9\x/{͘V=rX;y(%E ^2͠i_XS`P|?ytelLK"УxvƼo&U{KI6+P+:+dY~xiyƞV#zLD NtaP0MӂT;Ѽr,ՊH,9c=!ýbOАVڏX3@-$ xCηYD1*aw2 FmyǼ)PA5/|cu%mEkME`$V<yL#jO 2T 9r`o'uv=YZ&ky/顔~ d ae/+$tS;sHk?uJ"w]ܑihD Z #]p]`KFS@Tm_F,fuՐk|x D3HhMj1fWLy?%7DMN]&.`{4P#3L& tL?&.IM2gH>_\o/y̔lTt:.<?l֏#^[}` P) |l1n=?EJyj,MNͼ*hBI0qrK8[B4 Q"Y4Ac!yF.E\~Et)Zwgiu}57[׎mLUbv^~qn;GOxˈV#F7!wy aNe` oDt9';04J^HޔnQk0 1֘yH@^uEC_/cAӱXٺTSBeI94"KMÞJBYÓʡůŹUM~qS-V)-{O~\U2`|Fg6o}k4[lvs aOXi~?i-M_\ʉv[<; Gu=w!8M$'!GFy:w!%ڦsR KM4j [JE6Ab֊ 8J4Ƕqi+HP @vRAxf"Xi:}^2ڡ M T8УGWQUd^r3Fnp7ReLpHU WdƆ:÷s1RxZ!#'*!j JDݥw? A2Z:Un-X')`ps`m'Z-pEo0%lzQ+DQ]\ch<դ5'k7dcWq3\2~y8P(!ͮo0BNY0h6uJFg! h1eE@u88]kǿXqHM1qH1dAPD40B 5&`QrMuR;&n/JGzdlD,1i"zlٺ˛P*B4ܿX dQ#rx?0HclU57o&E`éq P-oe0AAodBʥsո ci#@ mM{a@Y#49#@4R*yrBzܿpt~}i73(+Aŧ,!uA>*q*dI8E*U7Q-3Vcw%Ck~fh08u6V^H5%WMeer5KE_k (ZɐQf/ ˃A<04!Srg{sfN'Et#Hܐ0HB. yvːưQ [͑MTz|@Jھs'mxZ+>Kc>X.QҾrEkiB_y7W\~soD2\B"Bk򁱴LЂlp~׼**V?72Z#P?|~pX.x]Ch u;/E搹.KmJ8M[pT>#x"tњBrˈ ]n۝wFtvpTA7|elE*x|dyOnj47ŀ1}*]qzɨԗ^q "sOߜru~*Xj=,LZTrqXk :h7k@O &P@k; nKl|Ɓ;Cf])azHCL`KtـC#82Z~9ƋP(x#V~b 8"ˇ (bzhރ HVu[$TZ%M+_/6> !CK|TOɊ0bF5t<)p_Xuu.Sb@I iu փA<<-|n\Hh0uMJz“(BEL+.hhָ5B4lm̦4$:vAI]I^wqS/&;I0=abq7Ca[9)EXEo()%N{+Cr^gr~u:Ms(qYSn&*J#CaXzP"UBvT&l0*(@E8XO)3б݊RXK '$Sn HVpjR1"h _3$J 1UWゆ'ʢNyq/\SD1H)acKߜߊm2aBwtpQ*hM`YByط\8 _й`r(S}sL[#T-$ .`pĤ[՘-C_f ax-d ӂ qci'vu) tnAI#ka%N8Hd02_ BԎm=.a (^cjp8r#>>9`8#dL XK7Im? 0PoBpy׻N$8t;q_!4|}>M~3GxYuhyfRd׌BOBDkƣmzCn%x,n5Q}Ҡx]H|`(za@Em3ܒN5qWEC\Mwڂ{|*~0Ǫq/z]5tDyM夥_[T"vr|c!Mp?Ubc~lA-rT j>| :s]a [\5Wɯ֥.HN.#&p2 8ұx$uZDĹ ئk |qo"LklMu6(z*a֨0!:" @ 9;0[`W*=Y?'ksofxQdLmN"GN^ `b m7`.k@kW(p`v8evXzF.p4rs P`!0kƇDq}P…3^\F6o6 /!x͐h3[q]kst x\cU"^4/9uΗ-/"B֜]zUAk+QDfIw ,G G8SiӛFu[~y{ߟ71ID]?N ^b )y48ӌD|}e tcI0:sJGpS^~`W̝}k']`rE|~qC2b6Unp MG]-Bi$k0{bP`< ȕFIsH7'rpaV.v$c]3`7sZ. wLp;>% 0(`sCɊSsԩK5f.Iy<;eRz`J . ʑC"r:XeAhb@[u!W) + iW}&V!B DH9xmNG%!ZzOoX5E^q3;a `#x[z=B'^n'1, |tS9e1b.04@WBЭ%6 W/Zx \,:˿E$ *5$c2@-Ǘ-~+^uE` žOA)#'" -L/$8R^>x`x=%nM!O0? lk[UJxDmP|@7!x^ANj lmB찭u~\ȯwqP&J7z.[R0bzpY:f;tj4dPJ Bd?Ls094eՐD C0Z`A Bg6v9X!(A<+82A;ӆlX>/7 u=S<қ+dG#cͩl% 3L {fڸJM{W˪ x3cf~I*`Frf~+3Aԋ<~_X>0 ]zjX*ZLU\Pm4tXcLMXyŸʆVxAN8t> ]B3oD78%5rvE 4Im.iiWmѲFɠN4pdDnZFEPOcWMp KB\8 /$J<0E*Zj@E: ~>1,ky_՜ޮ#{CZ}qPB;wj斛K~ZXoQ vI§4PtZ^2%j%b`X Zp ë5`52=R-q@{َ NYO[Onx%$uu!NxĒR6ZAۭwm=+Iƌ 4~Jj1Bvmb^(IJ8m:ȆTeZ;7 -MB64b< ʆ JYҞm ׆4Шyh譎Pt'A"5\q4h8ӆK m .ۭt24YsfAN7mh"U ٷX Ѧo\20`nOVHc5T*9b} 2(:v:\ႌrO?r aF]cN9tK5$lfԸ%1İFӐðw0놚DF臡S4 pé]|f-Eޖ8#DPSCHzC$Z:M^ve*2)6dv@Hk!5!AXPMHAp@zS Qy>q} P4%=chpR-ֹjjQfԲ"urrw#JVƒYl0 *qDsKJ=#U@YSB&h D q+» $Ѽdma-M4&ݯ p`e",E둈~WEߒÑ IEәxlCXX~$\CRT`TiPS&pپRӡ7JJ@GYsj/}@ ' ; !#AC0Ew<0'j@T͠iD_  b9ڄd#RE  8nJ0 mhpapIDWD,V]VzE޴s E ֕[" vT6VE-%+v69 h;2]X.h$]dPzX޷iGIb,0j*9H®'/؁&Dx%-hlZt1#.%BCD2pXtNQ* "244# 4Z.!okN T] Koʈ (W7;jj풔.dww?5; SN2m!TJy>0";OBzl!y꿼`4\x-ݝ <j<!F;]4B=|rdQ`";NJETh-iM!Lh @x\c%&Xmkc S:w>| @P oA0 CβM 'cbcZESHh4[0{4W W"T#& Ŏ9J!p4@&Ĩ ݀Yp҂kĉW YtҒ.8Fi@bɱT% dboVˆ<&!>]4>کO. bX[8se#VeoYZ h{np@ S!DRF^(?,¼Gyy-CUT~~ݷZ3Y4_M6N[Th(%ߴ`IvFxMZ5F LIh(T@9n*|y@W`_-(#Ǽp6 nsJzCE Z !4Yav(V ^1*kcNr 1 /5޳w01jG.2S 8*T0anfI#dD*v4H{cW6kâhn+5&qX&~q%cA*(ˇ6\X,6/+f57?ԢӾwXO CaVt߁f2PS~Lw1q^S < >,$McVඕhkkV қrW\55@Tr5B$@HLn `o\quh&5QI&6I! 'E U8鍃C 钫õ qvuT ur2*ip@5vL, E4]wkQFЉr:jo@|~|u~ z\^CdCS  ZDU? NٽX.5 WTS}i))o #*:Iq͠%%P_h]7ktVEY JnɠrEAۀillbBy\."ݵlAPٽnrV)ӂ.vsa(qSz4~;cGnͲjcWszAAGkqNj*\A9QW[rTP>O14MڮQLg,8 [~: X)16M]!oO%7 ? db=(?&[*$9|(S^g$ |=q~D@;C); G: >mx<&l;-g'w񒝕^x*^/Zcjv!52TvX9RnM`M񈀶:ҚP"BA. dx&~s\+c24{Q-u&!"ַ([at۸Cަ+A]b9ś<<8QW8ـuا>xPtwLSpʑ=S[N2 q}zR$↏O5((ĺnjHַM8f `IU)b &|C65O>+WA*3bs2;…0E^׼ p20Rkv?ոg8m0*09$<ƒufljNk8/[.!CIQ6[@lq@@,jZOpKN1VFHG!;7(&h Ӝ'ւ( 덷-Q]]7\0VzgXEӫ^SV`ԩOB7IxE TD jNp:Nc;*ifL6t D !M8E4ڈӢ欘@iM6cwnuMjWjQ)+R^dwh(o9`pzW #95>HlG_3@ 2y*qp-b wVELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Kmdesc.IEC 61966-2-1 Default RGB Colour Space - sRGBXYZ bXYZ PmeasXYZ 3XYZ o8sig CRT desc-Reference Viewing Condition in IEC 61966-2-1XYZ -textCopyright International Color Consortium, 2009sf32 D&uC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((4 u/rLK}=f&k*cju7* 7as_Bkf)~֚eخ~mSKWkePc3+3M1K@uzט6oZ4kWsl_O>]y}enqc fe"7=QS]Jzy>G28Yy3:4 -IlsL+`tHjygPu&+Kq9ik^Jt}sLϰyڃ;,+ux=VJZ]JR7UZאu%] `gzb6/{9cdt,\QҮb鱴*-7^WD_+ !ռHq\- .-m}aʶmF Q5f"`b|)ZHn鬛%jƻhL *YU 9z>_2`j[9&V1 k(p^LEuM5$4Pvsr"iFsZw0ƋBzpښqהG;tI} |ܰ+{SjBi&RڼtZ-т .ngSNv&YUhLdwЦy;E12E*Ɉ8Ʈ9opbl:-eݳv~jFM,83Ϋ Ej(oD'5RE*1*Z;*4_W: 7YAѩX`M&J4 ȓC%]-zus1zf\ Ưj{$;z|^cvaRӇ$odيIr&8e)rtpd[CE][|-fщ3"E^Yľ5~1 W"u,HAEh5^ ?^Z5ei0ə@wMilH5}˖q_-[+kXaz4l3zBŕ.sj)s//djQqv9κ㴻c cC>٘2v%'gLti^3۹y#Λ d:ﭏ(b奷!v& *P؎3=[\6:3A3Kc^rP+Fd+c2͹yת Uj Yd{ȱ[ҽ9l@J: ,E-CͬK.nl.kck5X+cB!+B&g3:.ݜҚ+l6YCi!k5"AqCEXA=1-ٝ+sHRf 剮Sm7ZVT+TUj1AG@i[6N$ ލ [B\ɦZ5QE dV,32U!\d<(=WM^lj4O kLfVA W?M7)iAfA5힃GTs3Ο%pO'Z:g29m2^_-!1"2A #3B04$CD L.:&L5&fTSIP`{]WS0CI G@ᴦ˵:j*W}4OP%{cn)a ǻ/շGouu#Zz4 ufv5w4O'uU55_56qjiԧ vw4=qg5CqPeTp_KzoO_@C3K?RjѤԵ63NRP4ٕ n~!ɺX2o6>m=S9)oZ mW&-jq2קCڍ+g ^#ucʔeV =KR^ǭbRT.ښ[ vYF˵sAw5P}P݆H'X{х"p EUnu\cl֊y9H@zְhOMb%v-mRr\ɰ3G%vj/{%0#Dz> [u`ȕW`in:[38PtͼeVg*ơTu l. ZiX;RГ?fF->c^KCXۃِ]o&Mޤ gJ[[gkθe&`J?Hqp-یdؑb,7W5Mbr/=|k,S*6ikmR `%7KKq˪eC-v4fu6iȂ?.ڏORv:GAbi/}5 +]?A^zC `̮ӄB'|Zp NLWcz~NvAoe1*!Fv,6,ú ?#yvti*" k³l*ĆqR ijCݑ&jmbpշCԭ>D*O$Ysc @Y\*Xx߹  v-ل mlhՒQ2$P~۲4ݵTq&ocWt_*f'B7Uxظ6 \!N,̘{53Te-`'*N0Z+ 1?Ycm _w].&pȖ9RP}ht!XL4M7r({7&0/ֵ;sG9ہo9 1Ƕz} glYoݵt>tK==>,CnV~1w-tj*eVLw|2'b9ӝEd<} slv ;fC 4M.lk;;i,vb:3f6&b&AC`Y>z3y_f45@6h@KjqW׮-rXb*d&N=hQmN~Ch2&&L`gvHiG͵x, Z+m6B"o$wX]0݌}m>Y8>磩T5:ɬ[ƪ9wnʯåRbV#ham.d0@1,0b6@4_dMh`iԓ߭Uk@ MҿdUu =Lfd/Mk]M}6p9թaU 3˴]Xɾ[0aX^Q+0Y}7[%> <0f+%lҿ+6k njsz|>O.#.A/`>OPsD$k>.,;~/X.f/O*d25G8\ӭ=zڟ>~uVcx'BsGlKр_R_QKtiR7g1AiUʵ5t ffTqhya^36\&nUCh: HR-F%^~dUlt•s*lI%0 "gLOލPv iNBhV՗H9\"PKZ[ 8!i/sDFn՜fK]i$6zY-1;6 ȌоT:DZ9f1btI^b~~}^94q`&@:a01q8UL}`{:Oy`'5O}wa7b<>.%6lQ6bʘ|)3>::{zkS]tz.9L0A-&/N[Vd&!u 91nc@(Nc>2SKU#ϋLuO\ω\]@UzpV m*ޫ:۹]Yު~mWh /k`c !cnf ǿPQ YB.8Ra@MJdTq o[~frO,{XȔsi{bd0U$ّr,"&PmY.[L8$P7R:1Re5&\:MVq *(715(3 54qVv , ))/pAY>֎(jʛ]-Pl&nFy,i{5uYXU~Bbj.SP/PP&;r]BEdbsx6r )`S=?#.iөZ>9fq@Pz^QMa;th+MEF Zm-bmvf.VLjƮ V6 q^OįDE֭]/Q4YW IuޚvW+-u|w;IEeƞUPff 07"M<6X0]fݻw1ފz_kZxꪽ+{A:s=;Y2 EW驲 4ڗTQ ?&ņBqfm3s L<ǯ|@rnͨ_31SvWԅiqZj@SY"X f8 gi?Fv& mp,a&3wDfar4V?c-"ȕ oXz< 슘85ɴl8'0g@Fn\R2qtH@o|\Z)-kRAEXmΛ9Fo_~P} b7Q<͹#r؍Mcel՛]v&`۝;Un‡3ɵ!+[yD.0'2<5y_??_Mo2Obެ<@nb[F%oԱǗRw/' 1!0A@Qaq"2R?D ]"u1V*%Ϋ$XIߊE"OKu?F͹vESRX=&τ;J\#G?c1luGXЫ*飤 U[&tUks=9'$z j:dTV+2;bt-(WcJ &*5Xں_BUF;ժV@,]O؇AfIrEW~).ODܻi4H_%*œkBMw;$QI6JFBI4ۋ$I$HI$b2DUH"E=XhEݩ F*md b huJMI&hnCsD b$nEg $V`o(@ giIGݐm6=$$=p#VKY=Rmk$ /mmI#MbC .ddNDrCGD nէ&gQ5cXߌidj%Dj4D(<=Md(2GMKGش4铕Qf Z zD:.$ZĢ 6rm.H AG#ӌׄcd7D6MZkRK%RO-?3#*",c7o7I%T2`#j5WҙovH+"A$Y$I&q5tgiV,G=]QS.!1 A"Q02aqB@#R?1D/8,}K#BSU"Xvmx=LmJb昝ġGRQC&d~m%f$} `#)iUPゕOjm'K>{YcLt/U,VNލB,ƋrqLn>{Q,,\Yz+4>ΧMQ/}?BYHUyZK27EO.e3 `8V22>O6ctzXbʦy+'`iv69MR$,cdk(,c#ԧRcf9/$=dh۱I} WDe 4咈t(wBȤ'c07CX>(m DW:`w(D>t3 dn(uY"Nxoƛr-x,ΔQ ,#EQ(Q6(hO[ƒvI{J׍9?6YYҵbJo*rLDW>D#G'<} ӁhؙͫM=(Γb~XkZ)w=8d:=GQ.NS1Fmiԓ)#iL&'K:g]tj(SR=tM,&u["O-ۣtbro>2cL-d; >Q޼KܭIMOWt)*vldw?=^Czv_ 7gNN.Pٝ>{)lk_FMS:s_ӄUpN^H5rOJRm$||7g?uH?w՞({GJJ#6F~iHE&Ig)˄\E.)%c_%I%&%\9onHE۳Ԑ$bBy:Μtm'8&u#F EF5uFСŒy\ CK~䶐j==M ׵nlv4f֕L]'Y.tDc9ugjC^FteL.DRcW!F(5!*ǃz3z~D55~ezV.>"1.Q4"UMYB~FdFt6rQ6lE,䍼*n,Z,jM< /G$|c"R[n]y$,/-|!lVn(1?)8f_zJI(RѪcgُ&kkߔ7jTۘ9[.Kڇ+rͳ~ܞ$ci>24Ѳ Ŷ+mmF}QHpL}(˓gjMƿCyfnk~Eٙ*lޘ/m`Q{eUePn4bkViFŢn(pNT%DȺX/ǓCʶ(1.X2|6+i _ӢqE#ɷFI?R_qkCvޟ&hE|Oɻ'%f5j(2@)ѾѺ VE=KSRR&~ S NCSrQ]pnXcjղ]Ei֕2] O*Ȳ*OsddEI6IMN=hHo_CB[άv)b`v iMM-<2B~O.P'Q BB?yd%:G"H|!j=!1A"Qa2q B#R3br0Ҕ?i -?Qy[K+~jW Fi_w03O &P0W"ۨ UvW9 7*viҙ"ei9jxknj"f(#o4 !Ӱ!迵O!^H#1_>㫷wgշX=HAn" T%kҊ@B .;y{S{T?6kF8EF"i3(j7q:M='M<ʳۉ8kuqၙNķެ*uU l:-Tak0 @pOT1Yx,8/9qak8AUG \v69c`v;| 0}׽ 'DťOGpZ~P{ͧb fK$;N|,i'KzwN;P~[&ٚ ԘB[@~+FBգMqqfp#U]L WJ<"1f7s۫jI Z4*q(;7W 7D^-`(rm]K u$7p "I(P\K[4d  \s*\M; Dt*#Bd'mԙFp]lJ4 A VI:@#t|? b0Ehnl`rX[fѴȽv^Fi"!6bH&i2EU)&|(rXWS y1 [\sutCOHTs=.\Bf v<}'`P$I;‚.[6xӲcDaFDg Ԩmt # =J=l?D 07T@NV ' D-urXUZP*"d%r8T5!䈗sVq[溕ײ{lr͗WYYClILZ_ B[ϑLeNbkZe!g%u\+0ѕ$8(ȁΝ\HO;c/Gj ~/$LT~g)gP!T?M-cLpKDlj8u nڣbe\BRDnW^/+讬gTxD ˰-`Zjak{AqoK[vtKu7!}VdLjM 'B-O'mՖ-ع_9T,aZGKYx4i_iiYw&8~7`). / tiFU37VE@Exv#u߬qw;Q'7U{@e&59)<N mRt&?T_H?eÞj]i?P!CD߻-Xr^ܻ~{/įN5k-TC^{'ȻEJ簫\Q!9*!)߾ЧRCX.%] " lp`2XᝇŤt t>" 4şSoы(CUiг8\ێkOǻsO^IA]֞utu5xlڑ={;_M=֦nݻA 6(w\FHӷ~p^~j,nӲ;'՝tm}Xeq{C-OH;OXH*.{: fh'!ϒ?'W臉Kenˮ#6P=ұ*"y&%.kORico! c'BiI?&R֏! t|c_聅,kN(\^Jy䏿rTO['ҀC0O4(5}[߰W,)Lt=j&;EbMKčvߺh !7R<2X<".nNƔcϼ|ע[vل^@Bs?+yW![S+2gvrWi(jP54M+C0x7`iB7v7y*ɷVVAʦ!i ,F.$l7Vǭp7ȨϒR"7;>j\֛Jÿ//kt`uPKj6&=q\VM_%rR.!Zx|\& S4lWlɦtKb|yA .M>5lE#SYE&J *jt2*8N7ۮ2l@tNg?d,$ƍm9WLй6@66A|:N`}z Uz!v,I$k>(#1xB &<2CxU2~Ɠ$Tՙ-WTo V:aj.'rP;"u{]1o-qRGM-U!'hi*l@(kOߚ!e Σ ̪@Ç4i}dmU3|HpbIi 'SS[=HP&G=ouqUO@ݗ;4JsגulnIGӬp 1UEqmG5*a.saU&s+𫙘 r^[9'f~Ua:u#h5U%8&6_ QOQA9nd|^H]6Z#il]iLҋ-9c ֫R47~V#lVe[.XbU(wv~j\WY"|f%JyqjGhgKSݢL!"P+ilg;f!,_ 6'ھ25[ lɃU[]ߪvR>ew%Ѻc30ޱs~.][qL[&!ir݌--@UPnz$Kj'~ix MZshKDt]:Uz 7H6& FPyR5˳ QIۢ5]q?Ml3wt ȷ(ӣ cb'i7aw#Yu./"zl{ <2IZMeG4rn w*DŽ5+NKv-wݐW?;J{G:\捓+l6APx?Nj;N_(k{Hyz-GInAX,OxG]({.]h`>ȟ?!'nՎWzYM#^F %Dd&2vd.+y&I")p#-p!sHilo{;$<-|>Kucee?UP |="z.ޛql3uꭉDD쌸J֟Da.v*4r7*MRʵ\kDF;;#X[I]ϠֆMt)c{5:Z` %eE3 ~{-bi5z}6`ݤzRY5vdD{JJV]Z.#nʴh(R/o6T6Ԡ ^.U4nP{rW4CCY_3D!l4MYci>8w0Bs3u9``Lgq\3.%t0.jud1dv6[Sv]`c! T2YAn #i#!<&WnL "荬6HZKЦOdȣ/ _ Z8 Ч@hzˏČhd?aDU|)~'!1AQaq ?!>6Km]VӜ:. cȅFU&|5Qb qj$6hGC>azk&p~ae˝~% z}&F+pAee]˒$דC#U.*~A-L;WL|07őm\WTgqZ+,(i kmYU/eV53nu1L/p_+Hi-jG4]_gBU3sBx^n3],"NHK?6@J&" jkWLUi.S|pJ'"&Մ^AXvaxmAf.جJgem*øV %mUeMCuxKx#Wao)䵶&\$XdP 8^R0Y]wNa͎ 3!j_b;e&8Mww1 T!sY[!E{,q|KQ-jw_+,|mVn ryeGoh&{ } " /R2}" f,StQ#vfg,4~[ /՚gR)Q5`sg\,9H7pH~QԚe`d. EZQوƲI"a_Y!n1@/xlQ?k r%L24E ]˾H8eۊF'Kfqrjzb\iw/l7f%'oE5,[+-o p/,5~?|XMl\Ɗ^ڌ )[vQҕMo92ɞMfœch&P0>+KT= CX38fV6?-?ʚk,gijZ(]Hws+弲1 ݻs%(g#~Lt} @s3%lXd"| xt~h.:k f*V"]m9#UUc~!Aw[Uw8 ]3WDY_0f(-ej,8nƜKg]3Ątnd/FWUr{}ZͶ%g@mJz5HNqܢW厅%3f;:Ef䷆7/~e-(e4AKéRԷ:8fLw2kb ަFm3pI;X,t6UƽAǪ2qA #\$4ZGo\FGC q{z~YT;2b&Ѕa[p k5/8k񩁶RC-.Q]CG[@Å,$[T;Wkht<{~n([~ įfE&q()s ZDvg*E|-n`m`*UEJt]*X'Kwy/nf[=x|!"_㘶\~`+kL.瞠05WͰRQ~egUY$vvuV-JZ4|)kV q_8Q)FśG r(!.^P[o8)z1Ribﬔ*XO2 U#IK6bz| _H^ AÀS/YZpIc𦮋fT9PMkfRIиbw~Ex-*6ԣUyWj׷5P u7,ׅ|\ED-_/GIyd;?yuBMeI*s[*p5|u ;3LѢ2Z'oRb6x;7_[N#;vUF]D+;3EaU9jJ1`MӨ%K)e)q+z,1)ZU 7vƫ\t_~Yr榝\Ώa[bY acIi}'(~{=w9X>93؋/1 3[IQEhRyeia.h ^xK?jb+9g.ECS'Pu\kKCv 2׺P֣^a6, Y@A r>pv2r-Uf0%جbXا0ͥ &2` .it1B\gARnaH+CSda.\c FkhF+O|;p6ׄ"ϊ<\]|=`PHS7JNXן4 _ffu^r,\ƦeA[)ܫ|~a1C^'$?w Lі!2ݶoK8a0]P{9U;d @Œ,lVhA,B˫̬04.{+FAg <i!,|E2%~!DtUzn/@$ĴNHPLm$AZsĥs٭"(,arWE1@zn«%5,3[8`mu|(YVq[TSm <; zY+YVMnNDbLS "ki\LkH(0N<h}E2K9#L ee[Alu2X(a79n%Z[=NgF)q@w(wZsxxF0KPwJ(w"֫d@h)C: z纘Sq#?tAMe;8Pt]٬̼Ϸ=pey2`IA¥b7ׅ+@C&Nʖ)LLU|jBQ@\.~?`8{cAQs4=bL`(Y0R*Q.Y~UB4}@t0*gP.ј $o;6bZR*Fw#frXyb t7̡^<W#k f gWܺ%_w}m%TZK`(25?-P ÄNpA^% Uk̠p\3[Z`#%uvK2%!1:Pzk xmkJxL cEb'P5\ unWznop5hm\pG}KH_<0= ~قJ VBƿ2]>hL̯U2s xNщ.b 4Y鱍 7t7 1":ws€Q<@f&5׏m3mk(zjcHr,8F `ͥd3QшǙFl0r/5>;p Pjc ĸx\r3= ~2 +K:K F0Xf\x+ԺA%KxZw;fejnon`ͼ."mQn#0^b&C.dGI Q54g,.l# Y,EbvLӨ 9*oRġF$OP|5fQ8%&JOz>199Gi; ]jaF%hWl [J/g'0xׅc7_EPgp;@ 'shҜ-|LZp #q5gXi 00` _qduTz%MVZӓś.[m Fܦ {85_Ddb4VrXQ{Ҙehs,V-Zw DE5?u}ᅘ"Fq0LnZcPd!r CPDjĸ\3 S7GR(Fs[Q+Ys/go @W߹[zOa+qg j;-pWg!ģRCuT@X=rp]wE\@U6 ^*6n|Ű1(bF2-0O ڗzD5w.|w=sqSMljM;|F3p^+ s_ÓLUu>X醥EqRia,w #|,B2Ns9} ĥu󘛬3@Pu{IkYpl㙱.̵̛#QEl0i^[|"<̠bTb'稦B7ܬfVe(*wuy/ uwqw#gP_V+jq[!%=`\jRȅq!u2`>Xj O\B-Ւ2y)f'Dy^GZh^ZW ~0e.:cU\*h}E@%SY s,=W"vqX6@VJ8D~M"p2]up?>&bu &xcR5ȘfWpͽN  zbto eptV5 R^  e>g hQ* R6LFU4FT$pw a@vއsU>Ү[@ob=eC^`?n0D lܼ\0X+\gPg9a/ Lp8`)T;cnN/R݉K.,!YVJ1 Fj+EDPrlz[7 SKN`a_#W Ym&)s,*a(b(X1Ư9b>%@2`غ#Y6{ `x+RIR~SH| p.h7s$Ҙዀ+ԫ+q/='}@_ #nr䠮-UHjY՛E+j&Ge,[` ^qx[c G l+ ~R֣,.Z@U*gay] iv%7U|J;3[j^U12- +H07ߊ 5B(b.,GF3FQ\wEoC%VZ(K<_- }|Fc+ya@Cr?2b POݬ-*kjQG6,M`[7m|8+\Y@5&bV'7 [WR iJWԫi[}=-KHX u: .7AhRugVJv ww~zhnV^ h:φYPGz+m9Y@#o2Pe?tegs77U\dE-Jt1}wm+/3T.2mm(l|o>evJb9J@Q_׈k3+ϝf;-[dҳbx} Mj;" aTz$5\ _wu|àY"wy1,v /1hp3T) L/SyǏd/ =y] zBbE]c RQUE/<5?Xry kAm_MۜAFte[x[;6ȵQ6JPh3=|I!g+E(*a͌4,c&8@Aܦ KFoWs-`qB4J(C@˞-5xB5VK bnm3cX8g"sU4} h+z4@ï.LUPX)*.]sրEN8O}#*sa˗j_R{&Obyўa5nM o?7QJm*W_v׉GYUl_Jn21e {6_aLl)Z_m~bmٲKS.e3`<7:aQ 72zcp>Su[:wdOV'ڷdai&d,dDt\zsG-8yL}ܼ=On <)h%1S1ZVtJGfէ9^j\]kp01)S/SG<}|ܿ>14l2Ţ~R5>`x< 1Qiz,'@4VkX5纜ܡV 4}n_ı ܰrn1ɋA*a?ela˘KYgZ9g}><ͳsf"QGz*yq`I|2{xQ&mS啂 L9CDόD`X?itʋ5QhF %7W P&j1ՂU-NW2rP X r]wyѨ7A2YX`F馤d3 gsU5`<1: \PbiFk4Ufl.]dp> xL(U`+TO?[R9!c`vY"ˊH/JP*L*dLh||J:k$NSl'v9sll%kjF>ѥ.qhE;=qW%?V(*`◳|!:Iٰ'xAen`^ MeU2j{y#\ sDm$A 03P$ $d $I")$q~I I";FP) kI"z$:AaE$q5="kME V{*/fhO+V k۞~'ܬQ#%(ɢ06 uySN(dv[t赣0-2tJz)e)4WĸhC` wfkfvkqrLZq>K"uPY~TU6I~doX{N?-m1#.΅gke>N¹7OAc.^??Rxv:זsx& W>k^S!Ȣ4Y cEJ@} q[Pf;%G ,t5視Vo0mvYpKf??чolwdzvc,;s;a~Hlc{/L# pp3far?2_r'eFվN=ȸ7F[܀Go.&}oRۙr[/&%)o3;fz,R@M6u1{l;{?o'y cG9o̓Ѿar6tbd[ nO2sj~WNYc>] }ݿLrI< "`5Od_@bLWi!9k wltlr=Ŗv߷cn{Xn7f݋Ͱ=w'՞z[լu`?Η=I؜6WK2/ϫa`lb͗eۚH--s! 8\3 y/knvs-,?o^GuNK^AW] '+>s,lǩ{ 鎐gKqK hq!.r@6r^E7"cm#8C#{ Rkoa_qzO& or93gY f2O˷~Ngyr8INA= l}g.njvyvG!\5mPQ/lxݛq2ʹ-gv Omm/oCՙ&Bk `8-͏L3ߜ<%۰w3e0w\oiwݽB|MX;"]&-d=ʌc}O8[ןrd_azHx&&Wk{'Xcfo;fn;:df]ٰ"y|d_|>wblێY =1# L2^|x{<M R5}/8>_g~Muv'x}g9V${sa[~O&lH7prr&$zك.I9fy&ڋ->y-?_vЎ]}Itĸ6ml=ydl,Cl|cN>B_n,8g(az&MѶx?g<<2>]Mg~{z]zܻVI3Vqg#\Oo!OOtp$GD3ܧ6ܟl9o w/f\:A8O%,r/%x`*?ǹ"XnA's Q@2pqwl2xqOm69Öuݞ;j^:H^-CJ;~{/xg79W; <ȸERitqdž_D'59;/=܏ԿNr8 DA% z3߸XY!88?I7Pg}F ]6O9V'e}p\ՙ0=e0CpPmY- _}{,-? [IO9&3HmL?{˨[1]]!3\u{YC:c` 8?!=~M{fwrȷGrzp-Dz붹 ޫ #5Dwl鱢Y3'>F46,/}M||ݼAOmt;vQvKOrZ̒;eWIP{O#^$~s|n;fޯq1g޻w}QM ;kuۇ'~$Mt#Qiǻ 9퟾ >nv'nEϿ-n>C-)ْ:hrߧoH?'3#݃cmr{fFjٿoQm`~wwލ;!vuo~'FlqqG׫PLl?y?3/h/uz#Wz϶[?<mb3/(!1AQaq 0?щ EȳV*hd2\u0|lê J*w,.."ύW]g&.|/ķj*\{X?ޠވ#Ģ X=6pvXαW% 94?i,,UrD^%0 sRkg^/3B4n1|Sx%$pJ8K%,Qd%=U$SFͽ58ܹ&c`{DE[s,-[p7 yCYן渁sX\]z̔0̴0)\ƒns9Y+Ɉ!(Yqq4Ժ-..-a0n:or^_$5'1V ƨ=J96N=7(8)*&ĵ4ip"T荱^jn$nRaXF,cs;-m$Jĩɬ|%#re)b4TS;%Q6\edk̽%o1:kd! R< )XPx0gF\gh-D u~)fRf\Pab)Wp'1935dAR?ج>NHPaq]dSdZ,5*gOBwy<1*e=@O,T(7TE([Lfdn6pFY[*14T5*nbD'EeXP@(Wr dMiV./P1== q׼EU"IzmE2)bpi<(ija6_Ǚbe9%5+bVP45rRsHeĠDB bd0C"JYO,Ǽrd1 a2}U3,G3&^Xƭ~qLhHigY~FĠ+S/1l%CJJ CY0 9K] xmޱ* Q|Yh"kqV#na)0QCqʬ;֢Jepֹȕ-690hETD=\e J,Q^U2zS[/A쁖Ve!Xo^!+ Qf љqJ"2"[De%q6Ķ>L[wqPQP 1Tˎ( eP eK{DJ(ԁhjXV8PU@ ֠[8 u3 W*yȐ1=Xar7.%%ɸ_[4 /:fVjrԬVGylZb 8\⯕i!ƟP?61V`nZ솢fPK(ǒ@/(00I&J&i&jȫ eabwSz@JXx?,Ɯ\ļCL @UŰiPpQ5v5)FV%RE)$U5,\B4)(4&܅,cx`~Mѿ0qpv3˞߸-q92usC"8ccbflj*< /-x yVƥW%B( (  kQS$$3,u2tL <.a1\efAS2^,QI;qE :g|@G fA j8VV`}RK& L͓,ԩDt;bS"M {`Yada5pDemB!q.2?EQԬ\2TeŴnQG!v*G S{n+13*s4Iql^%L.Vf6F1#Tĭ\@bhcn"OH,X\6LUALؖ0E\vDeQ#2W)paqSU< )BYlSgom6+yLvTĠ+0fjɽu 5. Pa㘜pC0n3hLZ9!َ`)3w6!a2Z`eXUfjY-e$j\.ڝ" ĉ_H+ϲ (Z?2OC/?Hl_.bQ%ܫܠ%!Q"B%'3{.#,1 PZNɎ*&! Yrj>裑TiuNb.zw S7 brC 5P`q6،˿ŹW/2 0ETA^ 8᪮mV3!E d84+VKOW---fңpeU)@i`hˌ9`F{BnV#]7)sHSRbn 叼*E<[n9RL [bmFs>u%)$jҦ9+GQc2kp[72f8gFbܸ}Grʂ-F8b-k-^)X7} L\ǒ&qܬ13ɈM$F1q(n0@MlיDj]{K*- D fX*!SݢS<}o?QĿ %KPjBt!wY@c=os ApjiE%s  G7BJ-bd0EE~;ƽҚ @< /0u)o_P4f&Z7sr5$` ܢw) &db@0u-P9:XgK|Tq1y6QYg 2kX2K--ىRۗT~EΆ3"+)>_X~OYEPEv/ǙϷױ`m(r^U7eh+9{^``kV[V V>}&*dpXIӋ K521F3eu\Ҍ/׸/z/oM^!6'' ˜a)MHmu ;5̍zguLJޜ>F{y-y/^<v "$ 7 (ۨ/ύ&oNږAckNpjFLxGfcٟG.]VWaXm“._D Ja"sckYhlϬ|g>L/2,T=bYGɱ0)mC~[T5?2Ľ)0y UΙV;[%w sA'qDWO((WǬ5!F :o^ ;o[..O]=`*a11FjWg̽/oIuKwwcO^#>Ptv <ܵ(ҭKTJH2Cd?>Oa[M+x\1H?^">4Ĩ VNQ LgrХzzh}+k,M`UGǼ@jqƋ nQ\Q/$] jA)S^|K[%}w~"oLrM_ϛ ߡ=%H/?s3m0.,ӆa3ˎWwPiLHTdO"a>xXk3&`.< *OX9&L; TD;dA\.z+9th:Zr:H/<cAZ%ɚ@r`+2n)c_:\{47\ŭf)qǏN E&xG>s)"s7hf{A=D &#C1 :bJP V;TLjq.7RK2qzp@EŋܠjRFS #64V䷈sA^^S%7g$7y*#87 &o,30H|~"`+(Vz.,r H Rel1C {$pfnq^{0v4qXDAFUX(+8hӀ>UjׇY9nMJDP$Sd<6)/aFI;CAVtMmhT%b. 44j @TS1ԇ N]?p)R;զ:`͟\c;,"RP)XI_RIN%)Wطx[ U'(<.'!Pf]r6 "y6 p -&jcd!\O %!tp38(B"XYpte!nr]tnK)Z@@I)Jq|cu77CGwNCwYibskR}\ `Jn ݏ^"<trތg(3.i9SE~:$܏.DnxԬhjAh.kN`N'aw/5a=a[vPʈ$+3Q댧ء ԍm 9*AA<l?skВ Eh87~ӗ>/ d]0ͶU8Ð4 gn\C*4rT `x<-OrEחhF_́mjӎ`OGLL5ٮWjtR6x^ %TEN[~x?f8A8Nꥃ|h -4aZ(㲴}>o`hvt/NE0l j׏D.*'DﵼԈQyWuSZ vp CG{ʊ&aE(*-h * 9#9,e+dУ8ȂS&M GDݠvD9Q &>M5f9 {vĠQ]@Z1;e:Զ^l6┃9dI9Xtvpmnީ$H(k7PbAjw.YcZdPRW{rʉG@ܐ,(&NO0AxᤌOAܡT38wEpwKq;,\j p144~xx>%ym(7/XfAݚ)1Zi㜧*ChӖF1B*ۀߌ]a QȀj;8)HA KV>1 46rWT.iEXoSy8[ CyA/BkUT(C?ƧZDZX]7$*;\ Ëv0Z2-NgN\d'%*+ׂpYwTV[θ\|AEHw1`*t8joJP}¤hP$Mn]k ,vD ) lt%en1b(n#`-kue)?:䑩H0PAP㏙Tv4nڎcm< 7ھp#"j> Rsu  ݜ[5TXpQZ~fh4awVbhSMy5f`]Z~q>6*x m$7|kmqo5x wPO9RhyCÀSG!Y!sm_Z8G\bmG|oyDߕP|y,B:AS$#)0!:kCBq!n~_P:ttcÛmLIn^A#hFyڂZ熾MgyًۨЇEū (TՇ% ZzaQwh;ps.dF@2K$Dl#3)oخoHzrHv|oX PNΞyS3dR&EGPhjO-s:wQA+"IP |NEZ׃9t% ;anuBnVOxuTōް6/\I̮`6ճv,]3WhaN骠@!c@@B6b&0vXu` OET.~<+5׏(#U#sdu;}ey&|fI[89fX3A4¨V 7"g^Y}M滴 mL-Ww}\D9vlܾmR;xX+yjСM;v (?>0e*w;kCwvullB`tiLօH$Z\8P\Jr k٫]>x0Pr/*Rܫѥ^&2 !ܞk4V}9$5q("Wr-_ jjo9ىBB=0a?񂔩oYB.90x>O:.rz~()xHz;qv& c 59Qc7@UYxccC#Ki4V1 6R@SDWG_7 ^4'yƲC{A< "dxُ.όFj`Q*&ɋׁXTi;$%م+* @ׂtI.ѶԢ*+ 1LnsšT:J}q &GB6bt]{񓚒"6k'7xbjhyI|Zv]ZÁUo/0&"oZKmWJ /!`1Anj2Aǿ2ĄxIx+1hۡ{$ X;PqÎ-&躭y#u]JmeHkɂ뙨HpTQZ5i&㒓miGҬ1a 6~Q4_- nlhއD*HT>DMsJeMTyqe qk3K$4~%vn фvʳ-׏xAZ@D[PMm`7X|cIЏXP %' Ad 0N~YqJ] >)r[$ .ckVh a4yHFC%_M6N5GtIO;\R mC-Po^޲`,O 50)^˞HZq+ƺy:<<2[T{MHy?t")Xˈ3OX&1eP)P@\a0rݍ]&k=R4,%5:x=dF>NM|b17=2Lm_a]*i Dx#?F0Ngh%&P;|0i6hp?N+fWp=Yr<'Km@!D O1,@ET&k IOrIzA7J3k1vC=nٽ>1MSѶh1pEֽdbz$}d~pmh5K#/w㈳衼l‡mx&8*T&ͥ,M>`(`l3yn!@p8ƑjI0i3 IE>qPx]M%ۛ Iet6Nt)&wejSLM}A>?xB5z8Lv'OXňT >& UOX_ ї&C mao{qWabFy)(o36` ux^AL%&)-ɿ&W)&/s1>GAJx҆0EAr@0bt }2R\ssUVسl]UQrfŞ2)GxI6\L[qLp \uJvNft,,CC6miniЎ;׌.::o\InjH?XH5٣u2TkWQ*FB]c/CxO@\pg`=G" Dd5ɍ)(%3");R~?Hn)E+evN>ᢪlϭH c,6Yz@oC[՘E  /.u7= >r6HOQMmuI|;jUN!Ȼ³5P!k>Wp{rQp:";zsw( aN[G^XdmQ^9ufs]^~nOxJx>PdY,( `KroW9;z `^|@wk^w$ & .kǚ*teRmE ;.D]~!5e޺L )kbȸ*+\h m`|rX*w @OB/PqࡠkMK.[;ȹM*qUM G-淀 *4bz.1@k-N8ax%ҿAFSOZE' яFY9Bx]Fi9<9}`&J4v?:DT0\|~E`TƭZ㎘kP?[W8w1KD@;یDϣ+9z@]K& *?ynfÄ8FxO0ɂ<>Q0 r#֩3PPq]-t4ߕcC*X";Yd~_]6/fyW9LEe5ŻKo(:?hgf5 ArO5NT8TH^]1/D`z+$+Ihavi3;z追`0*(E Š_< ?(޿8l?g[ʓ\|pq"χ歩b cm ؁C~?p:kPhT!n3Oї 9$K[8lT<8lÔ1y<S u$Y̆ sh$"AnGl^_ڮ:At90mh$;ǴASj 9))68kqzD'x@q8RGY0Rj*hǬ)<[i%~R Ha%7_9j@6)WM<+Rj_ Ck d޲ *u`˵fPkYsߜk E5(/?I >vd_e!YҠ{J/Ӊ  eց¯wW o3bD}:&]9{4yq.k66o|bܝ>‘c\ gϏ 06δ~1F2ih{[`5Ú߯y[@yoHu?r"77/x]>aX{@ޅubrtmrM4Ix5mCb# cɋ/uCM6hۍVgb{;QPEcez@T& +>H*;rSҁɢ8Ɓ!Vjk_dmo`TO@!{CFXVFmLv;(NPѼdمFlX~<㹦E9~aA$xu Q{N"<xƖ58ŰRo %ϯэ@VĒaC`,ܡ79 y{ {({C*d:Q׬iR)joF^ $ ]Hx?( gwBba4K|`GKz` iJiP.' nj-<i/̦~qq@Q9D>|E m9*Hqc r JkF ƺ" / ɼlsQ ag24RJ c}M_8X`J"!$͚:18pnniL4tnD~p@u93P&p"όůBP-Dcs9Mt=rIFΰݗsϹ7xTE^]ETԭDuk^!EjWoU6?sH ک{tVC,4+lH@_U”?"흃 t[<`!+cv}6qP4aGh;)\[Ǖ^)z_XIvp 9ZU)KzH%4ybkw~YI&D֛ǟU7\T\̧54ruMIZ`6Ӹbi{02I*ܤvqI׈QD aHWm>?L k6[paZxz,0|&Gf̯FYe3f5#:8A,8@u֡$?-5^&Qu+;;?YB ?oL k11iG֣GU[WO6P<7{Rxy뫀y1 ``i mMܻMo`qjvަ\bsckjҨu6fNs0@}˩ܕ"0A [q.ǁo>O8RF04vK$Qԗ)";r$x>׷ #k|bek"HӚpZ>\Mh$ _fVw t$\pr6U[5Z+dqBC%րǛ=wgP&0qZƅRlː[J$I+_vDsz(NbpyX}5sFE=u ]ꚑ9L*=-5nBvtB-- E;mli#&xQeHX@ $(pcn,PW<kP)" P(0 PZn Ԙ"'Ipu\ trctlJhТPЭyC%\)c2bmfȫ P0րW(`\++=IU$àbѢ|`4g]4~vXys ͪM@%w;V:#lÂԸJsꉛʭm3_!ZP.Ȣɣ` DKYS!b@!!Ipu,.;49D iF6p@-Dq cUN""qO;glo6pdExc]YU( QbpCns5-d\ dF`ӂUݤk`w@v8! (í#(VY,+E{Ewӕ@q;a);?8M]JӼ_zG;#bvY-Z uƱq@ >8P=UD&hiRYz?)kG!\ cQc:nVW;x1%j,֍`_"E:9#&CHJcB%_YEt4![RM l(X 5%E V+t;`XgLnkeu-0 Bjk2\R 4 Aۛ|9#H^((i5J}5V]A 8P(@pwUJV >58yV^>CBt8OrR:(kK T)XB;덵 W׌TTDy(?MY)t~0|<x5 .=b m1.ޗێPQA/Ǯ~1#W;c ~fBMI ^}CQi5Ljӈ)6^\ U|{;p[94yսN+paq}a{nT5zy⍱.udV, wۃs~S)F#}}`#D0OZ@&m]h@4itG|j7ڵFtP%0銨Xd+V6^׌{ ND, Ϋ4]j @4Cqx^9Ƌ(t"Eje ɡ¬XL2d!-*>NJƺFivi}`m9=7@^i dL5BP.@90M!y>ygĢs]J$/t9z8~HAL=2#/Wz,mX-Dp$FUsxR@(_QBˉm$yƑ7B$avJrL -FR΃ mơϼY&zJC0ґj<<`:jP Gi\ ! *r+,I eZ O͖i6`ʨBM|8>^[[ XMZ^}Shw&=׎3,"2ؾ/8" ԮاUWy\Y*2k..2현[$/ )ByECBpP"F}3p:x:8GnX$5ư8/.ۢU0 QM a+.'IO=LiPwl c <0Y4jw sc LwbȖ Pe?``(UWa/u7; Np 4Ta)L/#K`3@h8i"_;Ĺv  :ĵlalibvips-8.15.1/test/test-suite/images/rotation/3.jpg000066400000000000000000001570731454007373500223400ustar00rootroot00000000000000JFIFExifMM*JR(iZHH021001004 ICC_PROFILE mntrRGB XYZ $acsp-)=ޯUxBʃ9 descDybXYZbTRC dmdd gXYZ hgTRC lumi |meas $bkpt rXYZ rTRC tech vued wtpt pcprt 7chad ,descsRGB IEC61966-2-1 black scaledXYZ $curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Kmdesc.IEC 61966-2-1 Default RGB Colour Space - sRGBXYZ bXYZ PmeasXYZ 3XYZ o8sig CRT desc-Reference Viewing Condition in IEC 61966-2-1XYZ -textCopyright International Color Consortium, 2009sf32 D&uC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((4 E9Txܦ%=oVcR3eZ^&NsPMURTR ҧtVbxdtxMNgHPw66OM391(1G}ү+DAǐ hzQjwj]Z3'j3%z7ofcдPTU&Py6_z]V*Ґ%Ա{f:qVEH*qAĖD^+&}9zV,uA$qR D-% mz4;gʭ)Wh\dWqpRhpwKNƕ?-A\l򄘥D$6loMut'J=Ϫxy]/cnoH;ƿWL^b*Z4 0Nz@W:cZtru-962&$SV1O;Ⱥ[uR`HXVHtQܾz5K J+oLCY{|cvc;U$Bu_BƾӅv6ddPWf[ ]jԣf;hlטϸI` j;4koU4DԜpɌ2u.$K{W@1/^(,)5K@tJ2}qAhhZz*&/QVЌf,f[6 z)4Lm1G`y2!—72,]e;zƹ&hTw5hU@1ltYQ|%,p5l@ٌ0*։!e1 KͮmKR_+4.%^ݲm5*)(Y=he %v%HnDij;Jn"V-e2Z^UMdhI9jMVBbZK1N_5 CYLIL{kk!>78GBBp4EmㅅN19t`qџ`0x{ye(k?TOqϞp9n.>ȭi>R+">qzZmc[V8W>\SY/׭ b@+!"1# 23A$4B0PhjND#镆tGT"<99d_fXw615f*00|`m#g+ m CiݵݫJ9{ /FrJ0JqnNJr*V1j`D"bj=06q20b5[>01X!6+Ԗ@&m~Y`Ż7\b?fc̓M}ְqZhĊ0FRpvʦtyUYj6wuvkh`Ο1ՅWٖƁWG1i=UȿƄX-d 8$ UOxj;-Tqqf!^Vwv(ek yo#UDege`u[.#v~FZԩT;2|۠+..C>66*?x$@L|_G'{c{ g^6lcu  |fж hg8 (iWT$5bU>Xcqp̈́o ͱ6,;Ddаit@ `"b [>Ov$[&:onő# A"[ox0[ s9&!c 5 9Yύ، _In{c,30 - lF̈́ObI[en30+^<7z1Oo{P 'y4cY>Fu 0@?h,_dKYiϷV^:{EWyں9DZ00H5'Yj02fg`XrEc.={Mg`?[h}>pXc 1[W*!sHcubmCzsk(N9J? cY~[ZbTZcgg#3AbcEvg }rtǰ"gM\x܊ 죑!L"&0_e% _fЮ'U,9v_ @:q?z\9x| (:Lug"Ւ`4dB9\`^jШ14hʪ0qN9Y(~_Hc Ssl8ʂfؗF͟[bybDX*/oLcPUճ"]u p4-9d;bɉ_Ml`|D~ :9xZCƣXOuW&j ń |B/t~II jbD?ڌ Q zb]CܓCXy{+r `0`2|a&bшPbV7`t O{, JCr_.=Y{7g क(ehakv+ /ً@=1aPώz'3h>=Yq ' 8O\S~.ݫ gY]ap M9O Hn0v$Ls_LpۍR.z+ZٶWв홾c|uMȵz+boAN²e ~~P%xi ~]Q96nSQ*` Je1z}q?9ֿmlOFby^Vƕ5agJ8l6[Q9Y -V.:I9rnjHBjr63BȨj#*eև\_&15^EAօšT *>LLna`:O !r-c:@ @;*d.>Hicd`^eK=GW}WCUn9p؇"c(5p@Z2̸GbѾkkdEXCFBmt9©`/sʽ %.X{k" Cd_!H1i+=L,-b9!t`d )բ1v eZ:`}YZmaQ Y5Xo0L[Z;W{k-20S0@h[: Qda+Y*+ /5pK1վŕ Q0FmAW K)erjUVbQc_#"Y T _X Bn0CGp\p\M8A,[@'е@3(Y3B<-;|#PRm3ab,, @p3>~E+ʨSk18{,/z%F{P[k\*Ph(0jvTPϐ{i2_M833R`(ٳ g+-ȷU3%Yߊ/IpG/VU zσW{=8p-t-OQʨfO]9AZxQJ}G]|UkPx%Z˽e*Ūɢ) 8tJ-om<Z}<|w ^/lol ^g Ald<׿UC,# ^+/] 4VʂQbVn=R֭9J?IEX+ⷒ0",T }K-(TM hFYe5#41sOqSmV" ?7%O.}tqOmd<~/WGa\_{DS e!BMTA< lT7 ?ګV/ؘ!P)cF(#d4hܢu,j h>s=)NQRtA#khRKBg&)!?8cT3i891bɓrWɨKs4I5j0cM#f\?dbjjQp7sGd@8#&(hՎD2Lk%[i63KOݜك?_076MM.τ#Som RNjMAخuV%&xPEU})34:.Ow4E# CAXMBS=nw "2!1A "Q02aqB@R#b?LRO,i)ܛ&}2HJZ%e[}`gђt? ԿCQy"D|NI4J-*d- -0SFѴF46]i."JmIQW&!J]:<[Dwl{m'&ɽV,mIplVm\mEW#Lu=I#nwv8҉ k"wd8$ROsYƝ]VxDfnP6_׍,܆Ęicѱwh%}Aɒ+[lȷn&/ߢݛiIrnD',[Y/LJ_%ݛTਸ3VZ_/=ٍ8lrxD$Rv?la[c,FBW#QIt\}(> ?g1$#kHBDoQف1hd}1Ki<(ױEJk8Kiq~ܱy$OmtRg9]şmڅȞixc-2~pCІO n<C:rQ[k*S䟊3G;.Ĩ냒4Ɗ6 j)R6JEվ؛6.Ym6)|%Ug=~J\P\hȬ[B[wp_Ϋ[ep?qѵ$!(ˑ!r(ZI`f7vE[fQ,B]EOZ%fݢhFnGE7hB8Eub^Z1gH;֒dm8%_z/bn_vδ_ ZECNP!sE^KK.ZnZ9 e2*qBt)/K+FZtG9ӑq(hi77_(bnb/KќMp8gOK$} ѻ=]nb2bbccEYEwˣmJHy(Zf}]v'LZ^zcNN/VGI2>K%'zxǜXCr覸/}3y`e↓M e%D^h&Md] GtSX>}1`_"ݝ cuTu/,JJeSFo :~'b K > _zGzrrX*J6x$(|P:CzmLeEf 2XCx7DPݳqQv(܈伖6ahMtaѻi`7`O#o,xKHuEP%X,ĊG_ؒCt3?f&*Hg4;,yr6&#'T!Q n\"FyS $"Td$mZm^J#b/pDz6R/<Mm呎# bLHQ+p*FDE Vr.OVQ($JQK{uBBŘND4J$^vYЯԝjE:},G\hӱ~+r(O%g"}hN(hhYCE7dd-Q#Oq}%|8ҡV?EYFyV4_,Uf93pIߑgőh_9(]QRp}Ihe?TO$^x럓jyp'eX^~Y5(}w)*d <\%BdD?$!i.H~D?'g>!1A"Qa2q B#Rbr30$Ccs?%· ނۦQ$uF.+1lF*r-Tr S^3*8qm]-ptE&IkniX[q1DDϢZj4:,iZi homѥ$eGv։TMTTjudd950;/ĦgN] fmr:'X}fC7TŽJ9XXXFf 1RTqP'whwlćByh>;xsIRrɲe;b3 M k." lH+OHPp,qBq[+$tC*[pA ]>P´4gYXSnν}^H;oT™~oeeXٓ="@׷Ăjh@4u:b~Sg?8[D8zn2'tMDepOOa Vg.Trjf>.۲3HXLdTڃ CG]պ*k=Sê;>O(^ -$M@ >B< ]a;l+jjM.-o Eѝif!>Ec?^[ZñĭӢhZg44DXik qZn~@8qtϢeBS۞t67 XW}x=TȪ?.P-:wX?4!j:GQ;9_{v]i4֮WOÚ殸[*ph!Mgգwv4~r-VZn-YBx{mOq,p"M-f{]n!2>5 8ZSn{41-nl:vjn~Ë,nc0|52h% mw gNֲ'rY+JqW>:,u/${; !w\]NBs_!*&S2-*%.3n˅譕Ki丼3„(Z"7 ݮqcӬb'#G_ecvD)Y]YrC4 /2~is\0BqS.%KV7D^ݘ]#*بٿv8^fষd&p \TyOӐ>"LG9C%9)RxTAq-S-tU7f C7:(aH~BM I\\+pNJH<<.od! =SOY1sHS*\@Qb3QPFkf 4*}3Qvjhqq+MMZe!0yrQ?$l\(3J!Փft!;-"ϋ+/68+(d T,'aZLUb0gOM5r$nn Nnxj컧DtDj4 g!5VT%ή u4ΗS`=yKO^i8jSvCr+]^en&iV~cX(pCTj0T߈ [:Q }n4PQ= s 8sf^_wbN|EMu $`-M-Mk (]@b{GMa/o'-m.Q&Pd;S-O5ǚc=dɘSG?XFUj9΋sLrS1$Z@&4ưRlw1uBL }yrKo:O/Oq=UE-`8LCALE6`ϸ$혯-qdvFJsp"Jҥ3 rwx@ӊ ЈD=_0i)'pA-]R6Zm&Xc+4Q͞b4ܴmi a\ʷi_(ىN]w<-#>$>:_{ڜ﫳3y?Z0|BB2ʯv Ew%UOկ`tM1B}ȀL!o_ $I)FRk. T\ї-gݥus:VI;xKCyvX!6^ Jt;9Vl` ܙyBQ;[?wT5x KCw$&k 95\ny'`ac kX5.4ҝSZCRH=OݗO))E+Zi#OSG{U u:? NȣOy[1 pUz]3CKm׃2]8&s ։L!'*KYZc˶H`tZ&9,xM$b2 gnJZP@铧2yӑȍLg\#5?Jsѣ$3Q|40"-IOL y` &h]Q3tx$]@ii81i29ݘePͼZR<2$|љ'p5qJ`Ɏ؏_ s-7+{;il6^aHB>KQę+AV=|a&JUўKOɥKN'!1AQaq ?!W-?2︈.9TIg pꯖ̌8}u.`aHFɜhXkY)k3̎%Km7;C1#6fU ?5MJ߳O LF nQ^dp/}^lbz6r}X!jT5KLN-zb61)/,Y! ݍ:QyeLEZsL4_\;-AJr_`O hN^LagRga ;)AR)0ҿA0lB\^+3}gQXd `R{+ (7kO0 6,R7,^Q ֧>l :`,h4Mezgo1h*xnKbu֯gT 4יP-ltxK)w0,1ExD(ŷQcZr HP.5«u6xD3\©r@-oR«vdEtصY jwA6@uDd` %iv# -f0-%wP_lABA\I\ŗG8gDy -=SΕאClKsy%NHrԣeW4am&i2 `ע Xu>P5T(СP*U)%qkrKkT]vczG7ĺǯ1Q7 x;rJ2 QD)a¨u5_Z7+kgw4.> ^!5'=br(GPfQ^XjD8;`F"øw so,'x-ae1 _`ɴ^~I=3j?OPY3ʓptٍGsCPH[݆1~.cge0 N>0M*4H'`UJx qo2Zm[)q}-/)\@2yȘY[QWnPCt,ysSxV"nАAtsp r K&lc>mswwo22|Z7pr+97J ]^T1.N"7~@k'Znd|rXY1 Z}E87,//ͨAv .& @.@K#G]-Ƶig>p~/xN:bss*m}'}@K^ د-͏\߭^ FEATb8b/,R–¸3art{o>fh\pp[<JyC3mF7(%8oEfSȥjWtG`YiU>a";{],x 5C.>u@!{W9X>Y S's':8M,l)A:w\  )îܵغN?鵗*;ݍ~3y%MuzXc-ccoDQzޥ\@7kWPc2ۇLqO~-߬߈O@c7coݚY~;ܵVi!< 4G6'%pexlbYωGDԦ7 |^D3zG#bfE)Gb &n%'ϴf[16\ٕ`oH+qdv1ُpq.C]]$YKL!Htyus(qW\n#}Or,cC ]DX>^0^`6O#~ xR-k73>&JcpSD 3 ]z5U(RO(ZُCU_g@ \gjp_'e]\/̴YvUQwj7KMF빩\üz;{W R1>7V vY3}  !|أsj, JAA{֬c beRZ\qk& o̥7Eb}+7/K8>KKp`휑Zft0r&Q%{ 6~l-_u@K >ǀB)aQb*˘7CPC bS Фe!:w- 灢kw}++9) (;Zܵ',ږ]u>Xb{ 2k.G+jw xG$Rdarબi B׸Tʨ|~f̸67w5YZ7\4A,6 vޥk /ﰸ-ttA9b07 N35<#o?Y+_d'?iP]ꂔP;%M-]Ai؇| ֥^+꾈.U^p1 )xO<KumVq\ >1Vrp)T8sͱ8]u1K{Q ^5PR۷DG9f߱[3c%J Y_ԥ3c2u]CP5SolTF#JMqYzRfjaPZnp6pKz0T.nuK>S.%8"\:*E,zLwu]11CZ+&7(t[tވҟ &xzKd䇓k(ix4iMko|] &Uat= p )˨ {̥c]oB7@7GIUx3ܻ;k|n]`U(+׉S1c,ud0LJd558xGZf!:[#,io>v/8~_`~R|Kv/;:ܹ\ v!Z58{ *_"!0q 11Jl!y"-iUe(̵/#F r:'31xwQaq \xQL5V#vZ#meKLKΦ&Zw,*\8c]w9[>3n Srιl 썄ϹP;HR g31<Ҝ7@8z\E=%6.s\.q "b%r&Ai\:\S:-"/ ׈r6 .^3_PR D2,jj / !.lj 3]th%ݼRy"҃,bVOG #%Qܷ5>a1U^#~%Ǩj*ږLn%eM3R^pQEry/Y繂ͼO 3P))nx)ܱc]JR\-rbY(j4.`;s ìj|ޥg93^(LsAĥG k3qK̢ ue|DpB2vWje*(sM#7*Ŗ*\e[ԳF'65ڽnes:[yJS5lagC'F+|T 6Ńbm^=%huA)v3+X(QP0CW]Ly4.OJ1(ܸٔRNl=E8nf0X&R(_XQ2`X3-sbMUK/ 2IxN\Ʀ <oxPb8ZF`([?FE\`;J?peCIrBW*5 ”,RQ7qax7({I1.|;q.ȞpQd >crHW3(lemW%'L-w`Zt1zfݴbT/w,]eҮ0 Gf8]>t@ty ZX( }πu,|Re/w8~\@+w()#2>XgP«e3 kA͇D_;)Yl|ppY&vGnw˒=J,m^"uuMݔ|,e扂%0pk31ZE^ E<$2Q/v<@ -ð/,k lrmWxQ9f1-$R[IvNCحJiF F7M!bblR(ܼ%.w9$/vC1M'R,zz m>apSZpqKYizĽ3ft qMޏ5n텧P'YpVc#4pT{N%EJZ"7|k,1^L_,f`YMtA~SqwlүR >)f"^B4ek"Nl)ƪGPZ}I{Եtwmca:Ç `pnX7ܫ2L^Ht"'jվREoΦh@ /Vq-f u,3R#u2w[ыU)g2>U)zswd`%0?up}R4k wRSC0yჷ:nN;m2woW/NEn_Ы6c61-yFMJ9v56/{h|ngm''tUYUV(p0FN]~k_z8,EVzbǙ9ĸAh]L[Px?rǕ9p/Ώ3rq*}0V QGYr 2Y:j"`lW*qfOpɮcLuE}Džopj]0eu{Mtj6sn?S";0WSw1&%内VDz huȎ_gUWIJ ?nfeϭ{A!y%\!% )ўU2U\=Nb#G''1ɌYU:?wD*O7;C^zܶ}°(UWd *E6^aL7kڙi> )G@`WXb6WqcQ 9E[Z5jc,;k_FWPW'qmٯZt@+|W "Ek@ccG13@ÂS?pEzO1`ùBw/7眞!3eӢzSX&⎉vdU|]j R% FaR[|#.B?VZ*./6"#QUjo~e4J#Ʀ\U CN1&ڏRo 6Ai,,B_kE ʕyp^]|L/6`E8=iu>$̿C} W*B .j?GiYtz|v<^Q9foÁ /lJ_D_pr]5b7'A±A7z,:92cNH}fdxPf8wruBYo8+ȯ\>fRƨ$<F7,{MZ.MטշCwQx)7UHүQ(h<*%!ǘ( Ne0kԹses>'B[USĭ=leNd%]~\xՀY-W8wR1 ,?iw;!lLlΪ۶7gY <7 ͍p]<+0e+IO|J\ u}Py>%s ;1eԉ%9Kv(7U3!œg/XmhS ɭJYr?fyt>EYUjTw{Ch7(3 ƿ`v1l,EXW-iX "@( 3ɻ uJfg[ zU3M"RN^}Jgym24D6_O^+-L.EC*; 9zKchIA8'P6|JH?&eg D<+3AN~."ΐ,XTvgjn>e;Zw%gd [3Y#!AEv| 4b#O:ܫ7 he.S~oNnZiQio#8zn_CRZ#LfJ3s0>6߈Òe[չ*~s |13yܕ41zyf?lxeDӄ#->q*]|ݑ^!z=cn4P`5S@ l.SgΘ`PV5_"+*c};4S\(M/h=2RxdmoR4Ar.9T{5Ww X󉈂SY`}aϗ8!3<+{?0 f2J魼[][ [Rz*i7ZW{]5wԤΈ 7Z:r+Ǚۿ~3QMS rO`rWwF|LE5W̨V_ĬaNqG \8 p.!:]n,NA 'ODX A B,| FW4"VImY%ڻac"to! 9j r3 ٽg ^ޝª1mV|Π`@nu"ڱy-OS-s)YHEwG4;B9[P Q 0TaLg~#͓AKZ9 BQD&=<DzK۶5>BVsTZmiygEVٷ W&ɧ/nY|\ yƨYY}B_Ӭj6ȧW2Luˣ/ c."h RiS{S_V e=I)8ptƎ (9M0S~KaHB7rt56* Vتf.;Ip@+) YenHV\ZLӽJL* kh]E9]!*]!}99#k*b[M ,K\N/*˕-+R灌8߱\9Bٮm!qT$,q'p WъȘ/W+ Bֹ[FWq}yI<9Vwˌ"G15_U5gżxkosrMaiAPS|[Da恍O!/i1朚7L8lr{9qmju*=ET2!W ʾ^TZHMF /``uTsbmA?' [Tczic^^|mAUō1L!Խ{TXȜI/Y'2Ed@$Jܒgg=*$ $~}<A$A$6Fh"VY $H-pI b$_?'!1AQaq 0?u-23XlIH#rc~nDm"쯄8ΰ[[!fZl{{21gF ^s8䮘GX0[ ƅ2te!}Def'NN,N Pz\; OOkp`$6f? Y v-2u'v7tvA'/o[/ _%!ρb˷nXn6pOeradompۖmwg\zp}޿Hg^n'GN g̙f0!^5c7M L떒!h9ddz?X\`ݱ9F$[=< gXsK#v<9=r#LX5i9*X 7]9Iˢ[`,f{'7پf sHOX|K=7D/~\H\YvsH8T}24ԛ:ZZmd/9R8lE8@E2 f!lR{>J Q&-HIBqN33='ᜀvpv7u [{ d4Gv<\q^ ?_Hr} Rp 2LhF_ԍ' ?Fu+3h}{.GaA݁Hחcqr_^BW;w%蕖ۃ|\sgK3ݓ {gYϢ#kEK˟?~eum~t߆>g ?dyc(n[8d'9`n_WmMrGnk[ej[ݰ2^Oo'N!l^,A"}6Jݟ Yo,ύ̎ۦmY.,MMlO%G>2χ>H9kĞT[c]lϕ̶Ё(|{{) v}`dחT\v sv/:rR.+>6ό /f8#s,}>_w|'o-ehf}ocl$%ܴ[%d?{>ϖr9Nζ|z{/m?.>ܟoO--#'<(MXgKV,2> y(ݖL|}_Q= 3d WՑ>O3F 21=B޿$/>6>!>`1m,.'d}l?=%~Aώ5>l-[$GJ<|~>m>%>ٽ-ŒF|NJ|=ߌǗ3eXfEvϜVnl3۲gv,m!7~7m?vfޝ]$q-?`y<$Șy<2'#e3lmY<$_oolV#Rd9o\^2ӳޤ[.]Iao`%Yfφlyc<&0~llq? 7#9ggl/^|>yـ ՝?H`=>=V伿2ocsoԹ>vY~>}ݶo aD-GԱ:vn`wpry{{Oc-R1r?M{92=cH ퟐ7;ϲsdcGWkL{<|o?pnÓCmqcoFHMϩ;饷_qH;J:dX ,x-e#!FOguXe@? (;L{nkFVΜ:mj} {Pvy]gHmC$SR>C|D/}%cPc ~P~r?/$v6 /9 :e_gY{&l^(ȸR;.(dsgfyf5-˄{(oχ&|fvR'-Yqe_?d#>eX2"e[nC&eu3?\<]^,,xYS vTuX)مILL|'9{e'%\HO{$/[ڐ3HwwsD B?k|G?w{?w}ϧx_(!1AQaq𑡱 0?*KsEeea`PM]1 gOB?IJesx0ujĪuߤ|+0>^]2vo )v[XtQ]o0Xw<ƓtU7)]%w%:DUe{pvZu l8f>M-3pYI6rH_d+yg6KzE>-oP+u7>t[enDaŸK7u+ӪtS'd/ߦqTTqיI`QFLjwo=Ydh2Ϗg{ U+g*D)hxW*[Ǵ:ϛ&+K]LjA8rw\F̺?dp­w!N5]0@?N3p/>$h`Ke ^1 i{,2Yh>k_h:q+W>ݥMT+Eq0_=-]nl[Nz@jo8]:Fۘ`~.0}foe;~1Iշp/ȮU *u ^Sd569QLj qŋ~QZ{W_0¯ e'Su)hc)1n}| ؅^tu6HפcȖN.N_/sm*xbUX c:BjB- j; J=P eQ(efl ]tC,&1 Xb) ׎YE9JZd^bLJ}] h_'W{mUW0$A|u4a6׎W q&ӵ{D &Ck˯ͥt4,6Z?pnWMŏ@3%i bltC(`CT23 w 8N L[ e ۷lnVLpUrtWjHq)p5ϙ`0=Q%""x0diLy-a߸z]^OtQ4]64T ,:\f~eOG,XǼsW3n:uN#8a``-5I13X-RٿKuRM\_XҳYEn6_0FzU,@;.8,e*f!'L*f\)7f ҫ,(ec]_iQn%*d2@Td2!逳.J"2w4Ж TYw*cK1M{q^˖6LB8ǪN쨕`Jcwp@ 9ХM8$0ÐJ9q!/FZkc^5^C)c*%a,Ed*`T%t[fu%t(J5*}+zKŨ-S+5*nXR&I⏠!eKc {Tp>#AA}Yrls7At"KU+10e?+D\N?h ,+H32ws%˱$!5j1qa6r@[ɨ"S9KD.[FWFWMB`g4S0Gd1M\iz)q\TSpFT3ӈ:%ՉnTn!Ȥ-N]RK,h ,3q*]E9z hC牤ץè1\Aҹs TwSC 2c,3EsN.eIiaeUPW@gq $ems@LTm{/ҫ|]uc0,ض!9+6(q 4V8Q\:`a0!{AQ.]E˥AX_1j#᩼H˕@ OkCXP]^PQ* :y bdaߨŔ\~еL\&J&5 LLwyYf 1 %Bӫbbr5K᮰9q1g0ho<bbfS1(-)ZcQ6E7 9[n8b ,Ns(:XDDiˆmrfQny `ZAi]Ǵ#MWm TĹeSl1-7 %(M!Ez7~fQ!*$-|їK]_bHwٕa \IES^RԠ{CU -Ap Yu%:Kb5`:,AE`JPQQQsiʠQ1#+b ˈ䡟7 z4Q0'"< biDj*1 =7,2Ÿĺ90M3ULpFq,X+t`U1ʴF% AI+)f Dn. ,m*q!19(p:ŢRZNJHO9x/Ƨ 2&j]j3liYj/rRs1{C K?iai8qEIp%DJiD3:VkEVn]]c/I\pe6al1P5YBm7-˂`YuzøGnVT(41/IwlGzPn9gQP^J "fPȫyD*J+kP˩AC*Db^ITFqsJ*Dl#ӘJ1Vf&,`/^b1K̹WoL̶ U\<faĩp؉}U^ )19y j]bdTp D"ujuzb\guT8.~-haA ݑ޶sTFU}C1ٔ$io`1)-GmGSu!xqVa>3Tl~:3t }9M~Y4fcYDߘAWXj>]g'!1AQaq ?DZ֩f/86 +}bݩ- -\G aڌ٭T#i&F>>Xy+{(Zy_xU(o˂ S狕"Ek>MvH;]')= V=cr8N$n ep[A#`Ќ0]/>ha{m9TRR.RKҶ lnH)D3FC~]XEBKg36% ø8" aQDѾzqZ.;#ZaUXv֔_X6 nR5<*rݓ͆(Z;T#:Ĝ=#,&y| r;=~tl;j*ΰ%+ SB:\a-gIP$vbڇWd'ৌ4H*m6z/+V Sy BAxl~a(D]:o{ʂT,!"B.lpm. H[B.U xّ\Gx"\$6kB  ;$ص')A B5t-qup`2s@U@S) NjBq"}!~3KKP] H^k~rJ8| K'?k @p`; @F4I7{&éEs p(kو«=^˞APh׭ˬx5! \aFyū$ζ$3DRv#ٵq$PET3]9Ce#U3OipWܞfGs9cjWV#v_I8龹dy8>uO`I ۟EA{3"1TbaqJ_0`)!Z]|_/ ߪw[Tke ӔN,|p0"8K$CEMF+'}F6jQZLjxC!nyZrs|^wtx2`TtЀV}sx0j&r<;=C 5Faj @pEf#odox Uu_B6N_0ё@)J1|q)+G*~^n܇ӛ'5י@RC۰kh9\.hGlr@&Ty$C4wA M#&ϱMcm`A^{71,>7Zbڶ˚×X 9lk!o<lF4.̩0h7Er1p|\uoª~b~a%p"n\86ۖO6ЂAY Fټϐeޜ9z-ћ-Oe0-1R ɮCZ"h%rqkqd21UDA6Q4DrYVv"Q-Ndb &dιƨ2*lwSHRWf ՠ~o7l(BDO)_y9 hm Eۇ <.@wT7Dc_XĕH2zF{8b!M5<7E`&ډN m*@hhô#N&w۵hPmڛBtkJE$0D|UsYa1ė,$S3uZ fni%"9j pFDhR,nƐ Q;*gm78 4cy8=^5:&àDBk=HKo&}>2O1䭶꿣 pBZX&/M9 Q$(6cwr5#R1؏'NJт.B- nxR֊4]zͤ!d7);&ԧIE[\\hP,^McO,Hn 4@,X#R "֖y|xnD M+-uw+nyleiyC$Tx"b褠7N0IS&N#“]&<+d\@խ5t jtM=r!{6!ÂA]{ FL]CڨTj@/aP16]7/^OEL6y&k!oӐDoֱƲÞd]}e_-nwPwԂjnuvhÖSgQ:SFы8UfDE6ċyp÷zFj -J̡.sMŴE P~m)\(B\r75`T7 *)|owj}iŽ*ɑ;j*l2ʚcr",N-F6'ISP A"9 !^GP*\sFHSh5jR ɢ6֯&+EV* Z+"ɇ\ɽo,`c@TK"R l۴kO"o=@v^R;SI~Cc76E)u8Ϭ.4#Iz_@F?bRZH۷c^f Dm|9] U5ua7$uobȂ[$zIm;@I]:Uy6ƣu$aG:;!V:G EF 7W-=(cPr$ rHm<7i"K[W១Hi3bZ D]Ff|8n`@&N!ڡI49FHȫ60G ڒYt|]uhdL("Sy4BB"T);9*0cTB+T: "`z9$5AHF0Wx҄ѩcK& UcÑl#@oG! 3hIxkBϣhXz lC`z-L$EH"+;GUPJ PIX4g$pu( 8~D"@쀝aaU[tXtOQ.יfZ 4CDaQкJj68BZR69$dA;.:z@Ymqige 5Ř˪:5?Ror |(44ק-y&WVMpjsXvW&8Xiv JEW-ETE1h ѽ@7tzi@bI T؂)Co 4ipEv<U.Pl6^rrWٶw}`#lCP D]:bdPG8 A"ۥm0 1 {ےubJJVr:JKnb$N"y.T)8d񁒼XlpBC9x=[K!9Y[!|;#( {H(fͿ h A#b*9WY)1'_\C=|k)^DЃ]aQz1ݩ[>q-jicPM KQ_O0Bq )2/IRS*WOP{+y?cHD(v{f/bit\b\" RBISM'qo9aCj$U_ތSOxpXEPe)\JOh,&I;Tv'ӂ8 Z[zB;yBG'׌4;5e\8 ӽAu(2^wE -ɐp܁׼mk:1q& -E6|珣y Ne5e'dtlxPKPPpi?<|QDyfK^R@{aGo:$b 6x`6tl+wxU]!yCETz<˩E֔ DP]񁕨wE&c!E+q)d K翼bP)>܄1rw^2n__H!qA>8ɨ=[9$4M¯_6Ye,#)ư ҩ.Dh4X˨9t#7Ȋ!*~gXm6!m>40 8Ϲvb%OE7/ABkʼ/ )OVռ%4Wa]g90&e*'o}5Tagf-/ 1:ov8'aS"SEJ1%(uN=} r9!tH0Xz.A! p^_ZQ\2=O%BϬF*m'Ӫav=0YT]*i<)"Cw*Rꏏ:C ?!@m˙T ̌|:#~=\Mt kcng/s8Ÿ@o9#P8eԉ-3xHWSMp qF8vƙÌ7XB ǎ~9 5밠׌t5fǼ\"O|츊)㓦TNOxQx{zxL@8<: 5S}[rZb;Ķ~G, v4x,#vo/{\9:'/<y#Mfe2 Zq5%+ V10B>M=b "ӌ@*nkS"jk`F~8ùQˌaޥcSO#٭6xz}xp ws g*1tf=>[B,ڂ3¢>4BuGтT@ 6:~1̪w!1vԳ!&`."{Y:{!^GTf8>U.[T@ЅVDGwrb 6?P @Y+gWX H֩f&;FXyGp2x^@b YZ @/xBJo|RocjbEBAλX yPp=OA Ѵxd[pُW1c>6qJeޏJp[ T/<uQj)u^0Akc}CO<ԯ~j<l9CMƘԋ.2кyE,S4p>Jax!}&M Hi6T"L^6 {@ԁ, WqsEInq˱)sEy([?8Qs)m @ jøDG=.S{-7ӿ{C-·'* $оdPf.;>q(> ~nYBΎN|GVW xGÞ0B}e8 1''y"Pt` 2BpgIDx'rɭVd+7 |Ru,l{-ģbӫ6YՎ cU!T!;b%#5 =u`NZo'AJV\q+CP "}ݰES7.>7 {0xk @=@VuI^ R?Z@8E7NC)̮|w2;*U 30 -xaЩRZ?i4s2d0"A,UP0bEH'b$"5M!Bh}a]{$g H״; c$溝: ׸v`88b45x6hev-1H% Mo )ĝ7(Ys*x -v_d8iVɊIÝ Ÿ0G6::OxD~R{,9 AƦQΫ׸aҾxtA%,Y vh2Um f `1)1ԡ6m:JB.T0+L9'~<\Wb18\B)Sr!&:[VŠPvC-$N{wpToz0A B/T'i̔!iv-io FO9nU9*xT:/"2 6'k9u+O.TMC@vS7v?x7\xt @7C&Z>*Nkb@*·X1藼H x{`vJh'5y8%h'^NdРqoXnl0Xf 6$ѱ:Rz,gf:J Tª;xt ^ҦᰜmJm}pcm66Xt pBrh2oK!+)ˮ*eQu9B]:㎼Tr0Ikdu e~Je(?,_>C'XdLrü TcA5r27kzs0H61'/M4L!Zg2`1$i@WPqRG|QX^*αxRIIGC=%z%(He]87L6;C+ ? {$]v"k\eóiKQX W|\(FDRE!r8M=og| !](S[F*p㭠ѵK_:_ e>S6ЬRO_b<gyd pa [gQT_ O._lE>/&ְ~B^AwfrWR0}Ggo[`7CIr;t@W h Z,xW.=kH8b"펰жG5H6 rz"}ng9wxZ:sY즀qNK>Xvڐ-x.ksC55„hx8E#@ 1{ 8:ܷ36^=;?P+U9j,qk;F X]bVMJ߹ u8PPՆ,/d[/ߡ템bV$Uױ_yP,+kҶ7';`A-x4 ơP 6-{윦֓$']bu ⼽1T,sr"ɼ4" ֹ Ҕi}x1kOxY jwiz;0Dn'*%4#\2[vjk:Ӆ g =lCQi:!],O 4Eྟ)>)ؚYBVA;)t;782' !RyO{酉2񈤁(D]Y0nH!V9 '6g߼ÑEu.s7c5E6$5\'4][Zߜ|Ċ馛dr_83pTWZ!'J}7cHZ&"SX6)mmӯjVrN? |9)/.qژ"q-#o ::y(ӿ̩@}u InXG;P90=9@bj#R 7!d%*C na#`ʚ{,>\RIz5&TULQ]=fG8*W'yw 9>f8R5 WL]҇va"(8+Eykzƛ4GjZ/=D)zf6ޔ'G]7<*Ls^N5>tHHjC "ɥCCEarLf枌s@STZDypaVhi;%@$PT}~L1I;@nWt@Me*o^2(dR 4ӯX@խIw6XٽdArF s; `}U uJ*"Wlŵ P]~rMi)DGUSK,? 0Hj<.p7WPV`ò%)#{V`Z>7u krY:ћBٞ;}䃦^Eaxf לY/ 0 H[[ևʧpT%FG\hUg ɦk!EӐ5d Dǭy#qH AlQE+MU/`nR7=?-ǩ8 -̔ߕř^OgF S\f嬠h4O/ZE+1 {y >u x4vrPƌ,(k'2AۓmءZ@>+ﻄ⨙4  I|Z:79kau^5һm:wxÎ%o#Lp όWl#hXk {1O;Q9q8}:$CC7. lIjFsmP8Qk!QNCsx8Tw[W TwRg>Q)u5`x`$ js'J$JbI58pMzJAA8՞yt4Au^S_?^7qz(/!d9UAwJ;5pMɗA tIxwQ9w% "h^&}i "Eִx+e WIMBn^!@XشҤ1[8`l"=kҥ% aAD6ԡJG0e䨛؍f*Z<-1tD7)qbU\]udBҽ;b&Yw?+QfΆ2(o.蛧lj!ЅQHܸK|qbSiّR#H"쥇<>|et*&ߧr趭E:3V.éz~!HJOC:ˮ'S<_quhS~.<ܘT5TL̓j9+AIˬY@)[kv] U;lwz + .~ID녯8)BBkL:B~_x]CtMOMΩL@,WgnA 4 "Zjz}a#jHۺW/[Hcb@}sVa.ӳ,JɄh8/ 6jVI̠y-T ɠV2T|* n񑰡$=$F IWb@8D-[ՈA^pȰUJXo>|IGp#!&^AybQ}7ջ DV8NҪw]8U4MޔtnZN Foy@|uIZEY@9t2b:.pP5-C~Vi޸B6C@EC}At 6UXv<(uQQѕ AQNT>ʬMTuLX^`|^Z; 4±**` *8R@F#a3)7]3x71vͬFI(~Ѽҍ  fL:(;f@q= iv!A-J(CJ<Sq)X :`By"m GBsiMة0&G] fzp@N_("ZZS(-4uHoa;HJi|R(*Fӑq\LTfH-l1YϟBbuhbxk/vrM^88Q;qemUwn?B+ 2mDri"'HD! ӂx:0uGTW!i=.eB\1!nxz=`>@!Tsc|6x1܃27 44@jDe_ 5^ev\q(dRo@%R}ٛz  ,Ig]e%тASW:8r!j%wC&onor~Mv2#a-jgE:Ԋ| (E("94QDSbh</fSZEiCLbiWEMKVUjdԿ1mPlŮ)ګJT#ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Kmdesc.IEC 61966-2-1 Default RGB Colour Space - sRGBXYZ bXYZ PmeasXYZ 3XYZ o8sig CRT desc-Reference Viewing Condition in IEC 61966-2-1XYZ -textCopyright International Color Consortium, 2009sf32 D&uC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((4 ۠3ШQRH,1s:'ldR+Zp,A֤'z}&rCl(KJMtKuLV Wg|GmFef=W65<8-!kG]νשT1Wh*cEtLs#@Bf O}M"4VfINzI :&F:DPIJ $`g,hw0,f"xR0$4LpU,e3T5$Pg CYxѕQOTS:)SЄZ71#EII4$DževF$]ɫ'eNk˵Kr@vZI?z^ؽ܏SԈO7 ZawgzkW<&ܫ6q2c]֏ 2vGnsFFi[jHԓ-xk9SʺUznwʖz_+{7gjV|gdXb:sӶ69V8Yα=y1Ä:nj72'o-Z>|]p}+~9_g=*LL%;0W9}t}rЅV*wSP՜]C!3J P_:حu\/sk ӿtUeU?"`*5[+4O;; pVB[6t5 fXL9~UZrQdC[BYjuoGh`tmyW>GQ09`Smbs,bSV6cL4TmhEhbқTѽ*N#)E*mZͯ쒊O?d/nuT^m.0jXޏVq3-c QQqw 2\W;L7N#f{:(iPܴ k9uxѡuK*Pts)`VwA^OM}EVMzB4T[X2ýuZ¾WV_ #1bLͭ#[an'IO}\thuڬf ,q%3ufV*fSQl fsבi*[Q2OLƬw*يwU'R7ifň+rI?Gi`5<=Ht9KgOZT::,m JI~Scm59kG?ev6hwPSͻzĤ6>Gf+:̲q:,f=WΎ7 jr-Գ[tc*gNt7Z_55nuuu*]E]]CEQXȃжJVz->7WW84^I?;7zӝLJKΏ.:|z;ڱ2]]_]R-oA;9a]xsˬuuyj]G^+q^Ǵ7S%uiH|O˦lv`bc>o5Lˡ!ZuQ,LM-؏y^Ԋy*W C&YJ:Py a *IȈ 1sU111<`ZMFj+\d٠8u,P2\ߍ x3d , 6=@c۱2iț Չ M)0aqo1YeN+=?񓽡ȇjtJ3"B[rȠ5~p;O$2'^3>zbz Sw mH5)/r+8M5`gSagqo%Me`V*TqE,S",2iWKͤ^/K[,ZP5rÑi jA5ˋٚkܹyZrl7_RW`Elk7s* I +MDJ- qb$3+b%]ZWVʜ:n?qh#]~Zpzx7x+>/dˬ#褱j&,)Hab߾.QYxoYV d@C0?]v7Z6d^0ZmbPuy[,5xrZR֫穘[˾gZTڻ,L؟mSKּs$k"˗(Zϒ3ÐgXk`b dY (mץabDf0+k̿uCzU`ČYZij0B,KZ>DZɘ>Da֤£h[즖Pe˚v D`,5\c~kaXi|Zy_\ʮĐ}cYRU5!pD%o&L?o7 12)ZYG?x`Xi1czjuW,Bp7!jM`Fh_ad > yDe|p߫|\=k 6!N!6l̈2ffpΌ)GFiM>;cRF`Er=b 1漳Zff7@gAftt9ʏv0GƏHV˧'C,}`8A: _fpC"ʡOͳBi]E6&gf1z{*P@,~©&/e1`Y_>95qc {k~<[;pa8``zV؎ـl W%/-YNgy\1SI `8 ʎ"kTϋTږ ϐ:B&!MsEQw>F+0!TbL W+0}rM->Hm/Ʊ:8!0'r"a?Q'>㈫Cn+rNMlQ˭wmv*os̫gU3c0*۞Kdz_~J~W%xzvY9|Un oE1FxA!`G"!j%}_3))γSŪi?dۑ gs$)`^3p*y?Pz3; 5[޿Wɾ tX"j1H1lS1 ņ'1mkӷrMk9,}?M؈E*0٦>"!G2-uIJSs@>a}{CoZ3ORjET-vg(DO?!ᓫ=~7re5kopH#Gf#s鿲bpq1׸4kJL(t] k<[@ϒ1xYrb9֋~vCgS0GQ`f"NI]p {iXnmG,ϐT"Ӓg>?bhLV+mq?~'%#tT@pwُ^]y:e qnzm/ʢpBM{eBZ!Xb}RZJV]aGI褅?2jKq̫)IrVَN1cWԏh%l`,c6 Z{1f ־¬,1 و>FLxUR } 1Bb#j&aׄC0VX1:v;<9UHEvA_6 ^Q6z*oV,>iork}xADd[.ũOa@ɅhUg,ŀ$m'^q< z lBmv+Tf;Qpu:D\%-KPA6Gj;r #3}EOZAcPŔ v ץƺc.Xw \W%f̚/P& Mcۏ@C%@d ,Dx he飯9Xzb`&)&0Wc55.;!;fN  {1=5YS1_ڌ4\E Ov!j=\BeWyc;0 Jegʛ0d.[fd08 ׅ!m%cblYح͔~&/7̦E6VSSa=(̥k&?oF33,`Z\Z/f`ҺfZZG+ŤV#PQgS\ZPZ~7,20q1#lpϊ?ǡirUjsn"|qK~j8]b rxY}*x2/zZי~m%l^9rmU_ UW(IFrUw?bh3Vqk NpYT]eL?ZiȬp⨼zm+V+O{Jgӑx8'0=S`/Ҿ:_N+R;ܜ9poãQEj>r[kVzv߁z%(T|gy>{ N8;)']""^DE-̾?tF4N,DHn=EN!_4Fi"rhɪFH˦a@QYN,b\4|C$I_H(;AhM9E  D xt8I;AL{*ER< ZjH5<'7{oOV7=5>B)VFұn**AEb'mW^ڪ:F? 6✌Ĉ *jX"YKuRju&H;bSdoB{-QQU5UՓ{WI&kGNGHWc"z$oi[,";`JGa*ˤP"uB$ZFWnbH NoIn{*~a;$:N]Ǿ$w;7~'$Ws'f-dR 5^:Xޔ{ko; hdMAlZ bSv-w&f[]tZ:':dH70RU7ˤŦ"cQ.l-!1A "Qa02qB@#R?QClc2J{E[y%^+#psE=̬x&s&rZ/6I|-Zd}(_dj bͱ'B=qFG*g&o 4N2F؞Eޗc$|ip6%^ K!_|[VFɵ4 [VLIȤG(p⿓Բ9]ЦޔQZ86 m~Fxn1X#%G)d3 ng[by )e+> I^ y1G5A]^!q8$&dJ7>({Q(iTJ d:<>?jҊ)QM҇*hb9yRckdZ?ϭDQCяY/ {_Z!dxwƼ9Һ",} 'O\FvsCb9' zqȹx,bDp;"^&t/G> e`xӜGE,EfحʄQx>mߪby*Ҩ\"DVШM#qwdʦrYZYIЕ?E7&`ti2cDHGc-,#(\ Ѵ,L##*QX5jEGFw}c(NNd,cKokd͗Y#s%5e$pACe[KDI _q5`y!^7~1N+oGfnmXnÕz6? ] Mt299=PFW&bK(ؖM1,Rk"I+/>u,+r9RӗYq .p}+bcȄX.GWH)n#DؾȲ̼N7JmL)pAd.<"u_"le<73p~ReYp{{4U&\pgWfNߨNi;SP5CsT]64bT?[Q;=Ϫ=W "N=f2 fL/ {3y4)P ѱt#G0%,#*0@32uqͳdU)2}Y[,-x\(Tb=VtSVqub:tu*hN/$iiCA6Cai9BƣnUY .mſ4jkoEW˳d=e +d ]8ѶSL5~EHH/Ҩ5)m?[]q"DŚwu,gH;I빮L״bF-72w6D4o24Mwd]3IrkHDڡ⦦|PȜe"Gg’5kR`[->jr_t};ᱷTk3'&y܍M@Q1gNF{sbZݰy«Hh-tR~#{Z :1u*] }PGLß蝪6󂻦JJ;Tla:l AՌ.y&n`lpU$s7ZAnצ-L~pP9jӨFzB~ [?4&\B=*\0C.v6WwD!'V<>{Q5Y0zN$UOX: 4 }SF4Mչ(Sg7nii0l/tdӲ}:}^Ndm/ETN?UӀ<˃GX*$NUf'oMY!Ƴd82 +,#OmUA}vTqLjYOOn UzdžK2V7s%~wܦ9\Hp^Hxwny]NйTxcXѥp72^igsq}VOg? HaShyHkPMxGcw>PtUzH+i5 i<%O1.MC"5M]:}k-siuInGo=4ۢ. 6 k IGRM6;j^i y* 9S9S1.UbaTʝC?ӿ8:Ǝ~Q8EְN2f8[()Wo(J/v>z]P 2cçR>ɯAORyT,]w% A3z~CE$jp.+gHིi}֖Gӥ of|vj{MĞhjT8;lWkhߎׂ5,E\(487Un\լ\M6Cˇ(<=DiE{-Q-oe2W$ߚ6]IlzK8:_dIӳ5S^٬҉dZ<`ut5'it/)vo0,<} s*ݺc=wZ<67rli}׳{_qi|}Ck=A_e[pau\|(bVi"3TI0= ݃믹䝲~Ia贃D09j{B:'y'gU:e? }͂q]WP$oP8W.Cr)?DdKXP>ixQuh$fgT:Ejz*  4 [ qD邢ךZuWVFKH VU N4 tU]T ]!]ǸÓJtxUЙPK1œ_5e6dBY>H ՠ5qwM_nDc;R6?¢ 8E'Z)ZdA`"@2?IZf# ׋*Oe ABZLaи.ҸA06'S, #a{ēb [rd`aݦl+TQ*BL/$"F tDUxNpo欭R*6d8jaϩit^YP7P`JZg<ӛ. TSpƑ:/À2VSiOS[nĩˆv/UJ>8VʀEF@mCEǤI ֿ.#++˜Mj{`'ll`)ц#d> p%Yo'b!>tPMl%s\]Љst|gx9vAZ6 f~`q6 ' 9u(ŠBZ)c]HTŷ\>]CF;.WG2r9DBa9,UECZTnEc=<j~K6T1@䄝"L* -Fwp~nTf0У". }W5B*]%(;JOPQ:>1 蠙L+uFN=;+o8^.F,`vZ E.] 7U` +!tWD!] l+f\ne{~B/p2`}SIP%U-bvB`,G17D> \Ѻ.T)n iNRؕLPW9@DgeuVւ2eYCu-m7pT8(WHT Ըُ y>VDm&AK*24h1rʼ'2xm{ʄ-.ߢYS8B+[5䁗[ߚxg(ac0cjKy2>I԰-p]$mpy$_t6x-meT,XoGi1rnwDU%XyM5MuCm*=UJ}4Ԇ:pM لSc\ׁ2.!,sHq7 +Pu~DtO$*0#2- gk/T.mEH( A!QͥUCrcڲ&=:s=kAnt`?T鹄Zvv)Bp[SE`0o>Ja=,)AB5W=%`}P]%g"cnR]1tp/uMNT5`Jc _S7ZZXqu;q@ O{H;BKjcMkk.ۚx-"Ih?Dn49ERQ.C;n7o*]C 0ܑlHw-h 4 Je4h:ݓ&)k鍗߄*Pun`b\ဪd;@TU.KkD2;"].u)H Rӄ554׆l>wMw#>"拻ciLot(cu/^&ޛ%!OV $P^ z.M° lvv-vK~hK aiy/;_0-Mqq\px[% =* ]KӷZFu*g nO5taim PDǪfP>44^cz?0p×0TNKLA$0|#ݘ\"`)dNHZnAi佗P@e_E-e_m~sc÷Q͛T]ײvUd׎/Efvy#=:-o=Hk8TƥN0~h;pQs։%K+ֶcϒh{:cp^uKSǼT  ~i⩶C!/~?РZ/`tS@%ov1iת%KHktf?5 t 1\ߙP?~sMs ?LqEә R ӢN_KRjNG=qhOwtG}~/gjg܀8N#no)CZ/ZR;Z _T4# 5ZDjx}q#sIyԆG/鞛jv3V'L*;sW#KA=5p!g9!rooF;KR1"lMDə9CH ?/tƓ)5&Ò4cQb,ALkZѽMNvR[(*_-i ԥM(MSuDRGyHprMZ5I9riPio|5?Vmӛ|։u,Ϛhq$ ?'!1AQaq ?!5]@).Kt ϙG*Jõ/)*d6~F9E0~ňLRy|_D)f~ JSooWM!i`Q:'̤9}j,ݽXPTCKDddLի1|QW'.0wm~boq0;)={ bCd= 1_io~Ӽ5üFK0`bG;@1ĸ5Eo j n)7Jn qJ8q]y,F7.޴Br3&0Ufp py,DQ;˸DYܹs~uS]/-]ADŽ- 4817%5Hw㟙"A't8e"{^qn c\$q"2p#P˜Zl;HUc*۵BxǼ fӁ-!%ff#L߉W?X#_0xB`, mA y(cv)7䳎#Z>vkszoiErUՀ zFEsPU (ڼ1]%;KBc~aPD\:". rRPu+=2,DHQ3a룂 %^s)lxMT5)+~XjЕPERqWMWrpG'k>7 ̭qR_xƦ uǭJAYTuk]4[6[# V?aW2/gMA/ "\?7Ln j̬{A)r<ǏfV>!C61ՏF }q\&>.$1ԛ=G*uxן;GAD*>J:-ɃHbM ɖʍ ZbDu.-V>nWD~ Mx09z{r<~S0x*mYC~@Xq^+WPTW=owW틹 alxd|ƦzKs{ ^j/?HqcYu|A0/lX)[eǂ4Nڂ Txx#Qy>$2:(;;y\|(,S8ꊕ-ʽ9CV82+ݶ/x0vY76%}o9ZT,iw`~0c),] c+6≠) ~zՙ{΃-諅8]ޥq=*˜*ŖĿ/~2U戛)fp?y̽#~&&Fn8k TkWzE-p uJ}5&^{Lc!e{5旨-/־˻N`s눋i`"  N_V*_д{֥iTUXGQF,80yo{1B8Ǻl1*-G<]M\,@v4V p 1cӿ0z!~a4F,Mj&)X0 ;XhP~Ü%>1a/=/2h ;2%]sF*ifdzչMb98J zΚmBrDmINko3VXڜ>5/o@pǭXG5VE#V<[,$7&m=LW688%s}r[Z&S%KWrp)/џUKEp)g j[q<A,Ժ92B1hWmM!Bib m;6hsHU%ͬtx)p =8"*sR+`YW;MÁǀ%A<˜:=T1]iXaɓ[)7,ћcH6+fm9ϜC(3:;}I"TxZ,暘 ]]$D.*Thbcnw3P#l p,<}l+͛ρ6TG5OV7E#C}sJt-]w|Mp&TQ7zJr~6}ܛ,P1ZBo}ٌ`YaX˱}/vIer0}>$ckՁ♑(~ g+1:_PBa r#jReJY}L䷺pQ5%Ŗ6't%fZcQ(^5]F]9Գ@_hؖku6_-~!cw{@t >"g_Yyu I/٫2g{fޜk :^R:ѨP@g(R%ԪRP~qLw{߈-#¢Ej@^X:3&]Rw:6*#. 9Z_B*%g<&21YWhr 씂t [3flNL*jW›*P&N7ڈ&|A3 Akk)7s\Y3TpP{ mĹXs|&ŕZv8"'zE;CP/eqD|EJvCr\q*8D tCLjP.и͂F ^!֭= =;v^l2N3c ʷfhfTf:0mkwG T!cUU@.q,dg%( N`]#Ŷ,o2uy} Ӟ].P %YK61z!&DnI{7-n㲫=7{R=z&}T6Sk5,J}J]LCFd(ģ hv m^#1Orr18QvW.2g[0zG*O\is_ ҁ\&~Mb06#"LPSk0ExϘr8 5Hde32b`S6oY'B@xfD< Fx|F78pu^$bbzXm}2NqePc(w,& am׷z1Yv/A3S0 t)p~5V%)kk-3 \SGu)?}@;bػIrr<8kP?li әK{| KM<+[|ǒY6<2 e9(knUVޟhJ1mK-GchۇЕ~zQh8oG\ӿO@ MtP/kjStA~_y+_ܵqEWe +7mW0 j":K^.4jiGauQo *2eThh/`gR@:7~%(F;ܰʤޮv9oQe\fnzy,jfqR8o>ҜV(yOO ]}ٖ߀.U_i+SQBBn:at@2+KUx.!}V^^-aP8=>w;>9iˈkTxqECtnWrW+""[2ʏZOf'+n35(h☯e*bv/3I4n_2*,eRT1˾( ^3W.0O/dgzB;QoK-*t԰VQRP9_KEXp.@S_R*1)p6scc J·[i5yg ;wf/1Jىr5:Xt`d05 a1v-̯\~AkiEy,9u602@hg5FV[*'[W0ɨ< WLj]9VN艹 L* Qk9fXªwB(Lvjmu^F.Y]^p*Ϭ#'w5 SKC{(1} :QB*EEݩz%2uE}=xziO ^|D9Q]%놝 Y,IQ1W :DbOdǠK40kl`_1ic@۔oPJ9ڠ;\rNN|Fjn\կ0@Ը;1ӂTfIAl0h1|wR]o k4թs .d~SAݼH@[VbaZ86s(u.,qԵ㩷%-iS/nn-+-tdE޹3]: R8JOƨ 51Qo b8n_)8UL"~Tղ?52g\[%o&yb+Apq, ŽۉS)Ef3+< f] tzy o)? Fͪf.lk0(}cA5m.1șYr0O>[. ߖwf i_y4z,R&9UEwՁSFܚV`4^:@L!\+],u o Z L\+FP3CH9غjY,/+~W}^eԗSia,C/X +q(Tz@0ES-D24uhL-Uɐ7@PJ* * c B'oo?~b=,^*҂# ;qدtcbqLLPQJ|\6]xK6|ţ`ɥ.Y:]%q^$h6unRjimh$N _0)+' b&8m|M*ݣ+U7%Fq;yM{EB/*)&Z+a>]x'?n7(%y&?:sWlJG+:#AG> A_ gnw;^7.%V {-z-\u%qT'Yˀ&̴|KX7x"ۉG[ͤ"KOXjǦՊAz=rU!B̜^=b;eږH6vk`6*9[vc1jZj#Qi얪?0Us%Zػ,/׼9︻V._AQ4 zϟ%[v- :G C(Au\ᨴ6Bɯ^j)Fe i2pNشqPR2U ˜K"k/3"A+Y11daשj·}ffe:qp%gƠꞶq@>1]Uet}? ,$W"<ܺ7vKJR$c| 5V*6(hǝ7%7(o2RV3>fUsȗFgP5v^6W ]48qq7'GPW^E)6Rb4-<̵.Z*f$- ~ M-cq4-*htU߭EO(Bqn_%=l 8LGBXS*褯i؞ >147".὇5y`j?0 w<0] 'nC7 AZjiBEwv|d.K? zJ k /RhlpNb:V:}Ma噾r%Pk秹fǏQμ* mutOxZCsi p-L6_t魸5'.3/kl$J[,Z&dQ-!? 6yI1٭NB74ot P lo|0+ 3Sү)9Gᛨ0E7.hRe5RIw m_+7MpǗg/PJ@i[ל^([_g n Zv?wvs ʊ?( n_ĚVpHJa)]^ҍ߼AЎy"c߬kЩMjo]  W8s@A n1inz_c%{-emVsYK0^W]jny&T_(g8S/S]y_ȀH &0G9tNw{xoh!]|kez0W `֮lj:taa$êSӪ9×nV!{*HA5"<~{ϪKAa]"ٿte 90 O# 90>Z1dJ֕ᕶ{$ /UU$ΘN$$,I&@$ qItjMRH `I1^@B?KF3P%!1AQa q0?~E(g!_id"ѿM'6hgiAz.:q +;H?#KEO ?d#DK% э)DcŃU> 'a-[KP*ɪ7kpR)|ؓD {/d!(bAӨMkq>"8؉8cFΎVpM$AsGqw + KQۡ2Xmɵ6 %C>8iVmPF"vЍ`iqS24EmeƱ 5QkN)u*{h>NMEP rBD ЛZ,L+n"Ε11PwHf*zĪptm`ȣNaXmhj(U(ɴ5Q[s1"zoCTb.B*(&6xz ǣvSQO :KEz&FD(t'Pƨx9pC& k:=YpkZb V_&OZ4six8O4}Mh C|( 6.,_x8$bdbC5tO0 IH@ϖ3cm6 _tHD<*`(ܾ|H!+{) Ɖ3rh^{蒴~>(ˣmtM12FV=I7c-ox~m`\6wW (ץ $9ޝ" [4|>OceЛ }[#/b 芊Ƈ3IeŤClON DsIG Sy\AJ(XXcECCET4Bv`׏RSb}pHkD8ѓ xpFij0Z=?B6hXpp!bH!?C7|)kt&LMO1 c >l:բItP0b{2zѸmlm B25 2 4BqC΍{`A<6O m |Q&Љtأ4#hx$J.hh.F_6$?|8*?14Mh:&2i0>0zFz.:tt}A^g"JL~Bф*^^W|3A/hGG"&Ã鋧$.ai ӊt\`x? !~/{7Mh5Cd* ֊g4F`K!xO,y3^QG ވ%( DEQ[>Ѹ}Һ]?B\.U)>>t+>Q6F&Ζ B(^D8=V,EzdJ|7|od#NxM_dgmXǾ[\bpwQ[<*tn4FxEc!<,IZ$PHH!HF6zMcN",ƧGOcs 1D&pPO \'!S'n}OI1hEp7׋=sGFJQjzC#{oEl5:E=Q҅k/ ZtneKtvΰ`Bi¥j vشy~9iGF֗Oċ4~΍/~x. *{N2qo4oU4bmkHI\4*%eme;ૈO1fp]C=T}h_ߢpn{DB~q'HkWXt#:ߡk*xu#*4m2=O:%z'b-#4JFp֬ -L])~׉ xczUᦜECqC"*pP0:V' WE!3pn !i 6EK^bg4>0XG VytPS̄pbgz86s} ,6-o~ *cApk)DG"қXD:&jchn&EF$?$pU;ZT%+щ HIfHo 6ӈM c7GXȐDaT~}B:ϸEv!Gw~FX|=ps{]= ^(!1AQaq𑡱 0?vB!QLZkP]ζ"0qgBb0\~{AS_jsPJ>\t45-kRֳ8 wSӷV7ˏܫQm]1/h'+S\cp&P\MD+q c Ȋ߼"5NHD(Q _.%مaZN{@V¬sjbi\J5iMjdدBFyfRĥXNȵ.⛝]8űh:bu u u/ڻ|3 fe|.Ue#bL*c2o&-[e:L_or\YNd/gzMq5A"jb4lB؍Q[i:ٶK[m8Q_}Fhx}ෂ|ZgLۖ(V?TYb&]@YU^4n-]CXwѺ^:\ԅm,[UsT6"#*ʵ< b"bb7A^8HQ%ә 1Nn @SO#4)Ic,UiR)aG~siuG%C@~%!W̶=ٻĶVe7OYSغ.TW/#z]m,3 P[G0Nax>nX.} $%Po&j} K:W@{[5wX_ϝb. ~k:,)׼w5玐?<ǗKlxJ(xʵA{|"1CeXu|DyhG uLX00$}/&Mrb[ck樯:Nwpֺ}qg#qt7q<<=N}BUqbUJF_I}\$UW<-#OԷyQ27Ž~ˣOY߸*g,f͠s KpQE'-̪|oqK=WX&U?omڷ` Y;.%[ohٱqOIkq6D Ĩ]g}{ <\?jz>sc]mOxkzžLޝ|vYoOJAK{! յU@Ay+=϶=Kq+& ~8\|:s^y&FU-[Gk_7Z ~(0 V?ƎϘ7}FXjy PϾܺ7~-`E1v7ђObʊՌLp H59^̮C2ǘV"83 ePa08=pR0!"9g"^} 5#'SXjZQ0ylVܧOL IhV[@&'1Wj\-C^)\dƇ JVJJs-Y+),]8}+F@J3nSķS4chbK, h!R\J]10f=\4[1U[YDPY h@%1Ry̽֌c؇Nx:^YuUcVReૅ EKYe:=Yu,RΙ/gQʽ,<(멝MuuPCuNaA@GROU+nfjYK 2 'H%jh`>R1zj6]e0b &M> IhLjKa6T%3P.ĨA fȎ B$Tz1#71b4Ta>X~%@@bu0qʗSslfRQf#^#1Up>s`P 363ânhCᙒUż.̃2cϣ4(S1/]"Afw2cr<-KԳY (b-Ԩ+K Ne]nӛk%g\B EKE-2J 7f ʊ<<"1oSN!9%ª%Hew(ʼhZiR3 "wVffHFQ 0RvTi Czz&(3 8_X}=+)m HXsŪ]cK2kӈİT[R˜ri1A1;2f .T̋^"X9BrAd,jZs.xf1apfGE{ кR)qAWIj=S-\h؀zFa "QiC1 \E\lj4P5˖A"(,$u 7&"R"I̢Q,Lm,%:'-|H*\@7V&p蚄wf.%`::X{@Ju Zaf3 Q0@|ܲ-/eL^+ Xbk04˂wfb&`ע%-ZdbAxEq rDmm3Yfn Gg ĨA\Ơ% 0FYkZ.PpaU͘MY,ٗ^Fo12Yw 0;YXU@Ru-J6˜$uD֛L!`nIdI3Bf5җQayO3'/ipc)vp= LʩQTLJ8 Evƙb#ʼnpEby5 J7Ljf#z5,&w3-,C+@Sq2'Djⱳ&u i-(_ *BEw?#R5`23p*ۂR" "TdAUʵ\F,ZK".X9(Tp2 @A"T7CV12i&aΓ.1qX0uq1n-p ` 1 of9uc1 A?I1;@q2V~3l8UD 1gfGfX}P(@aEhp y*D.#uԠK;]X0:Bp*RT\ߩL#J!n*Zl2 c ,cilߘJa3;[@  0FwlހZ^%uDeEB#H2+Y:o)v%DaiBFt0yxFYG)fUOx #0; / 3.b,:e=% 1DQg\z`9`uxNЎe 5Wg0ZAD #pWh*9(lX ?fgcP"L_l}} ֠bqDIaeXK =!l q" $FaYwseXøg-F%kq1j(ڈ%FPFI !E~[e^ k$չ22݈1K=a^`3:P@E)-od=~?AC+Mp ͱDDޖ&Gٿ!iv:NSvL] [י[sy>Tΰ"1#oZĈ6<-ʩ Cx# ZY7@oT<rZ#ƻM[rPj8  4\J$2vY^ r@1&C4W,W{mL#ÔDjjTⴌ cjQ B7cXFЯ%BkӢl;(aQ)V_Ks_CBuQvIn*&Bw p*%nR5c XϜĿw IfΥP [y_B  $_*^m]z/aF;C;.$m 5H$/\_SQR//o\C *Wˏ0hUKi mL5+ tAB['aZ ݱ1?0R|B B*1yt.a{^$NQGT &C bu"Htx.@8%Fl7G5$ɤ`c?k&c~:D*7.LhP60\D ԬFF@m0vv>tm*?GR$bh V ,!`a-N![a h(#u)xu%Dqa`@[@EIp<(SB;-AE>\P7,T %IGLapq om?M!kE; | '){CX>HJ͈.!2I@ f6 xDZCSa1i"=^AOpC@릂&$8%e k{oiBڭ$:^\0uZAlHb.ljН@FD .TW <TPN3k!DLsZ '"^b@2iCq @#8 zj/0/ (h<.Z]CuLAԷ4e76[T!(b=GgBQ(:FtI'%^(/XFs\R T}:XX_@Yj j&@J/Dv#D MTpP'xk ߇si]QOډ# eq`JK0"ʵ>`UkGʆ`JvZ7B+M݈LDo'S^Dv#EdWӬ( 0HV(C|P;1B:A7TI+PBafAFd2+DQDS%L tp.\uNT$K 4w T ]Mk}X ز;|LS): 7B[B!<@4 *Xm (&#BUvWMPQD. Y]BF MBuKUIb7tP}b|ѶHk47HَL⯐ ,ś%B7|9m Ëxt«i4.= vTȼZ/.fύ0 > ;}n~0mzgA "imםbC&)qHW]2AtRo I`IMkt &PE>~q،O9e\Z3Ej2O&Rwlh$ 9=`Ȅ m|%x6)@%0{*#Q]+Rz'O#R[=hWS%Ϸ%!~w?nRa]m' M`.S7; ;:_GMb)+] bF_- }Ťݟ|;Qŷ-wѴDŽ9(84#=`3W ѣs5Eڀ%[xə=N)Qxnϛ(Xuʁgx-b@Qah ܆xI Vο~1OOw4~L%׋yq;a!Hd W'N nV@cyNPUu} .2#l!ɣiSA`ӬtA4%d j\Hd+RAǦIH0qMX&!?FĀ@(q2@K믬 ;#_qa)?zL xOX| OF2 4MOI_qLTz}DT4V£P}f\ڲͧ%o&t Jx,P|kD>wvû%a_%cD6oc< #ƈAE_~1 a jѶbĄE-ỳ6 EXARY63fć ?$P~~2(՜ڽNy~4j5(w0,/QB'BYj#Eob{X"i1Yo.1hɒ=Z_\F&Zfa}{caOx UR67Xn^y6HwO.{vT#n`!I?=I(jG}׉Lus%4X^ XzY=kZ5ufxO~2:D~߼=GQ(2?:7n tلC!GofwsIT} %l!{0Q < /tb=?SbJ^< ,UvGjT|o{7ϹAa`}0F(U< #@mV+͆hu||>uxS OT=k҇ nsV7 { tx]u?X] u9sxH8 BFQfP(ǯqʟӜ{Z9BI]$;]Ia_AHqE<'=@>uȉRm7jy!~]'>qXfŞwy nip$K>`IዒxfnQy``z|$[.]bN\bӳBujV _!b__mްzt_.*)j_)qX@/6iXޔ:x;z0n8 ȊI`v .B<7:>?x4\@|fI?`tR+boM>y!vъs i%oY=-asƟ&nh5}~q c/c3hxĕwMOGg@hy.Ύ&׺Xx$=>\ 2e3 O埏'lwϏw R//^syJ  < ?0' `2냒mp!GGq#ZiޟX QnHGHn|`Jǟ}3+WM}Ln?[G^p[?,øc5A{c ˺[ɟrխoP]BOW=.KM:ywBZk*NxCr><6o~'TosE'{_=>'%ߟӑ64^wp4CH>f)N K%۩>q)$P;p,{?9U$>z`e4bv]ߕB l/\Z&߬Iv:@ػgyĄ:bڀ1j@7y(tzW% w.WuG&EF4,׼-,M -BK7|4 >' _#D| e5f2NIƚ9y~8 63ו]46OA !TۓCεDtf%fH/.?dP v"Iɲ[׼ڪ Do÷{ް&e7*;KHGxLWw =xdSo>7ݟμWa7-@o0?)6) v9]J]uۿr\[2}CP0ְ"TT^[I-Z*Y46[D)3Ķ| @Qm~ N`]4ehu?`@*nGVB@ė/r&v|gG~nV޵(:0|w#J~k(oaf1N'%"KV yExoB|ҿ6PT}WD/=CV ~&():jޫ Y=UQdDeX=6cmZKv\F:|A]O?$|0J}O8+)|ok7b"c)bUiSlOr#Aڥ$KjN:N#_@C'O6Z5|ޢsH154iW *xU`BU1@NA?Wn+y!asUQ]Om tQ?Mb[l5CCZϚz͒W7УNlaJ@EsM1!uj=zXr)x4-~"@P܈aЕm РKb0D*@wfr@ZS3'EjFsz)^sAN{L GYTjnEߵfI8EV\aYa ,Opp}ʀCrJ y#XhHF .wE( )21€5Pugӆ Eܿ]hW_qĨF> sA%8cX@{QTHxiOU}b<דn Р|S0SBHFZ;aThֺhO8Uv{wcy:"@Din2c~.CO yKI@>M'b˷SLWc;Lvo:`b ʤQkeSʠJQ0~Q:Ʊۡ\ؑBY94;΍R ]M.M-n9-U؎pCDMnv4'7Zc_;4{VYO1iPֲ֞NWHW\|:k~}_XZJU9:oC]C( WM'bx7Sg/ߦ>6Htq0W-ST󎆏t莞izF u6ob 3;@UԌUA#^'MwV_yzK3+鸂Vb-EKbI''z'wyIBMyc7 gJ_{NG-(m1j3yR q(#֞P( '~2"/׌5{2D~q1GŲ и@p1txBl1sؕ5,Zou;`"kh}:Jt%.kQ+P1 kW6P=b6$SˑwZrmM}'r?l UN'O4_(c w)2o889yW[o [t@T?=! @όa %P߻(xJiM$ b %G/=hf&X00i|4L B VЋpLUZ AoS["٥6V.z`"$;,?Q*P1#b 3!%-](f}8HNkL6B EwuSz i7HnhR&:N<ĀAoDysxvaly3cAmP ]۬di(`1@D TjϦ~f!^&pZ4l7.>K9ca&tGƄ$6(K~SkZ5 ʾuI;ᤔ-z<-[E$CElFDWs^b0/7ϧVftq$z?ɗD _bHSR6=Epk~ .dzoe_ao|50$!گy p4# Q{nX0̜X|)E?I@ }qDD@^&6eW"w;+ Rh+'K:JmtUw@8U '>;6 kU"3 {_vbd-}_G%\du7qUNj^[c`Tj9LuYBJ;]2AE&MK T 5\x[(F80˅VDh+ֳam -!l$c}B/Y>q;A6pwZeo/[9{$}T_? q;2ȄMѿ ti2[@'_QV'*Q3b2>)ST I$5" e۰TtgxtI 7aJ0Ob84 Kmb\nT #wJ׀8Zק<13|߬D@@ a'p>85b>1ـ0|ZP-~hU{\z2]4,#?'Wtc5[w𦋰a$[)xI`^e՞5")@Y|%0{̪MRt v}5R0nw2m$VҐdkEEC?^vg#`uZ0Jbl-A(MxWgrBkAHmx6{O3aX % k[^* vT_y) +RPC\*H5 X x~O~>1v+~u#">392㱯dhӼ4wcԚ=aQ}*ZX,9JX8&kF>?8Me,Kt8%xZaWx"9Nz;\e@D>K'G(TQ|_^X S< qٸWXj?Vz'jUa!6gR^K!lEGPI6룟_X63=Zx~G5լEue qʀ҉wDrNH)KrήC(}yP[>2zP?d)(ݱē=sPP>g-00#*= X8hSny@ 1hϵ>|fT]zƛ>s&]N|o9ܘ#R>3Ut'}`T)hSa70tn$>PH8P$!Q|Oq ~}{/9%<[ORxS>3 BD!> <;ENs(,h$:UtAV叔%ahٳGF% Ѣ$ģ@ K<@h 6%>. Qx)SfC@+cN< ?U <]/߬R|2"?|? ]w)AESֶٗ@ǦY?<0n|e,BL/-M(mĊƀ`Rf͂ FpyKFJBfd*AP#KJOrZqDدs4@tA<_$UϪhLEFSyNֱ"Ip܎1k_Rط BX6@; ,#jΆ\ENtC=bw Jm4^a8Եb}k.cpkFwL6:i% qDP?*ݸ|: $}:^!*<g܆m'SD.R}^ZZU!kF @ї+gGy A6gKk@A 9Vc4TlkHL7lܟ'HϤ!$ʩ!Jr4 lY?ӭ4q".0c/Aw똅ej6_H_YIЫV h2Klq(B~4^~XinC^0P=:|U X(6iTl&䙨~5ֽNk|c IY<8 nI<9#Xɪ|~v68`u׽o"R ;g[L -G|O?9d<Moq<"l%<"MsXH w'@ a-], P&ݾ)@"ِBɼq:C>LwJgPJn ki}=x>&V*4f#oM?xkA]Z'w%/ (j_yAThfB'ϼpp|(I> 'O.VsMIXUjz_2CUFU )xJ|ۍBuzHާpiW vP0+l}^9h!ӯ2{s0(kGxq7@ ":@6ٿW J}ӘI/l. :J@S`qrǁ5/7B[B.a 0M׾, I]U+)dC O/[thiB4X 6٭0.&@#t!DUɊ:} j-NybgzʊaӐ ]ɎEʆ6j|Ejư $(("s)v3ylV9e& yP>+PqQΨ (hჴLXN&]ϗ|=u AZ=9bGNhy7- sDtdn:j8cƫALMeK$<хiu4W<d@%D-t\#Q y_g "۟An,qxAQC󿌔SG_X`D`3dv"bVW:br?>0t8#rw~7q x.'Bk#R^my)+9=x>gMr=%,AuJ0]a*fqnWJ^of@Nt5)рpH [4HK+Ba6娰HroptHu2dɛ|Ű/"r<б vΣƚU1mЈD;64EB)6?Ⲫ1H 4@ʨ$"1!Hj"l{ nvxd;)B KPR3p4jI0@j j P~>1%Z V D75|`?|6M*d"چ$.aBlE`Pm[#t.$w/h GBB6EzkIEu^K!K>1r+ˬQr'˨a@ HQc_O "e'm+a_ /AߌO)bkΑg#}Fу@ K%`lʙ8`l-d!!hÛxUEtvbQ(nvͯ9A␡ rj: ls:,Tly.O<7KsltpVXfޔ 7BML.h 6-Xb-)vip%ˁ1 M)%tCapS\}/ҕ] H^UNuM<U"E {>!~ 'zqo#1}`b]|jroGs(8$ͭq`^I!%KgɻN!*P_x`) P5OϜfz&҂alibvips-8.15.1/test/test-suite/images/rotation/5.jpg000066400000000000000000001040471454007373500223330ustar00rootroot00000000000000JFIFExifMM*JR(iZHH021001004 ICC_PROFILE mntrRGB XYZ $acsp-)=ޯUxBʃ9 descDybXYZbTRC dmdd gXYZ hgTRC lumi |meas $bkpt rXYZ rTRC tech vued wtpt pcprt 7chad ,descsRGB IEC61966-2-1 black scaledXYZ $curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Kmdesc.IEC 61966-2-1 Default RGB Colour Space - sRGBXYZ bXYZ PmeasXYZ 3XYZ o8sig CRT desc-Reference Viewing Condition in IEC 61966-2-1XYZ -textCopyright International Color Consortium, 2009sf32 D&uC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((4 jYcEl^i/lg5qD{A PF.2l oTA)ٖ<;Aڲr`,*D`GJ$@n0J̫( EisIj(Y%ǦxN[FE39Xd<ꛡ+yF:y7TAѽ. ՚s̍NMd%)OSCcB@jE@iwB;g:y-l7NV2X8F%O::ehե̹$t;S̄U,t1qrz_E]C_ FHe> {`ѐ`Ρ thVRN^t`gg e}gV"pԮnв%}7xPU<$5H쐶P,1# (ȧxjLq(VzNKQ9Y9ye>E)MZԲ6vjZUq²v9:`ad\ǵ;# g7RN&sFà:k's)=IjIxeI|m@]ٽϡt(R,Ƀj6*QiR}IkMK1nGEy<*B,ܻE3 ,j9m6? ʭctʅ̫{5pfږi(S2eO/-Vι3 w1j<,[m8qOOxPi+Q1)8ئwY~f L1ZK& C*'pL@Luq8?Ҧj RV6ۻ0R9p"54mX筫\V>30 jM:jV]EKi+c/TaYk~;VݧkkZ(1؁1PƊƲZh8]9mYONb8;,/*pb#xۈ 3e݄*yT=֎P3{n Q: Z}(!7ZǗl!yKL"퀬=Tf+j6״&mY{٭ Og' rOi8lYo|Lb%~G})cO*ڳvU֐ST3Qa2 n8lAr+cXB U=5bz耦wܹQPcv5@fK)as9쯴 WM6#[=}n&]W+)CEWm3Dm&B>F'd+Δm!HqI=,nVk<N%^֥+p]tƪF׫rN,@2z|tATY&%U@ٛNKuu!ۚǝބS~jl͕9 CٻZt&VbXt @wkvziʲO2tZ8>gP,[W1gjlDKYoMePSuBnMj5ㄾ!ؾ5%`#PM/L/Lgku4]w\Y1r-TU콍Abq3?1N }(%uuJt:[ݚtwj٪IA6;kg ܻ͉e |aѺsSUjY6Ė΍^,^a=o^dzn ]63s"Ԥpfwb$jа).-kiףmZUeR׍J(4Rұ=SJ#_m&zE}B@}a[[k.TF6S]Eb'L\Jjε'p*QQ6YgJ'F ꆜm,8>'?sTck>O'FCPxvNӥ` MhǧFOI,ukOw8ufԍ%Im*1rB^Zba< - uq*֕- #/Eڀb5%wX00َjjv Hw6Xd 8 / 00f;7 V֕P fjKɼéQvRݗjGŗ`vӖCZr1)m^p7b*CFubݻTf?y2bdCk>`{}N0}~R1`f+b37&p̹32L&)V;F9r-GMV[S-)[U qB>T#_O 0 +d7d !Vf _L.Vj5s_{22N՝Z6,$*gnW)7*DײxB34Շ@މİ~E+NҺ:vֵuv1ia0F"G1'EaaQ0JW#~G(W ڎF>5gx#2`::Lza콆 c !1c&`nwAUֺťKp9W? 6#~9[uسjw.*C!B2 w33O͚je)OM&>_f~ާ^#UnγL/< 2Mtٲxc $Υ Ǩcgehcz,|Xu=ś>*SEC[e kPX}xoZ1:p75> lǭ-B1W:٘K%/=cgOQU7_-C{{f31-^NTl~r&U"Ḵp9wfx)& 6.+PL_%cb{Ԏ'aW(Qǵ ΝE'YEO}8E m!MбJǞ*9Ʉ%x#ƒ"r5QHKOȎn[>H,[^ŷ,2:vDžhyӌiFţȗbcWJ^ %մq7Z$4eTNh⥓nҟ-|T#BdF|2$X)mN#t#EFH{eEܒk$V_$lPcw3:E20^N8g/W+q%FƳb(N$}=a7:K$IlX#[!أ'.P[RChx+LЗ}_-+% ~HH n\\o7 ۑ[:o(%ֈȵuhs^xG~n[jBr D\Q'$ p_a,ƯJҴУ\hg|Z#)X[#.۷y#n$ HI W*D۬駱EV[G:s{a&,莫:!IDn1ܥ4QEVVV?)n.%m:y{szQ`|db:N꘶?dO%{'q7z"LX ɟ\लXxOW4Jdt诱)nMEjE=-w#T)#z6ogQfm?k#DrFU\+0EE_Ik"]8?#Ԯ  2 div!4Ie{gǥ}bW/FUCVezu7ddE h4ݵϮcF,%wf_EtnK$LK K~d}z$]|3dX螗L|Ie}N􈥶FDY#rj)ϩ*VU/)P2ʢ9,R^torFX%qJˋ)p$rGryOE؉H_$x!wҴM$S*ORj^YD^E-8^ɸN~#-/W [cf$*gR*+wr(pEEwZ~ϯEG Ȧg<#ά+՛;i2(E6$"2KxKl ܻ/D35zю:u-E2WHYN%wT6apYhbbB]`eOIKr`۴1ଗJci'%.6^ KnDӒi(d֏I:Jo$Ir\t?$ؼ6.ÜO蟉Us}T8A<_G&<$GT"> a|y0Zg ͘oUUM][xB䝮;* 6Dďs-Q`pꋘd$;=ջiBrYJ \T *mZ #Oe5 Bc`meiGa纈2qy&R*R"#b3@S-5I%CU %<"B.h,ECoxPwjECRa5v&{D&b/Hc sH#% T!iHHSq+q:G̬#r)cu𿔯 Vcu%n %  QVi:BwU~V; XNuc951. l8{2t~ D Zu9q7y+|L{B>M?U"Hg-r%ă˒ދ_ZjsI Ks-<_XxNeO =@"dEet%_,mmUg!N+m *#((rӠIjȯ hq"Z_}*o B4i6soV#S L-.!T$D`i+YQmVcrt*,D^" Úr Zo=(6 h8pHЧ>nOʼnY$#wFTHV ²?p~ #WiY,e껺!Kj9TŹ Ϛt0qCa{'avVa)^b&, &Je.kN \z-3 -EŽ_?Pp|J BQlI.nBTb߲C OX׈*,tyhSaHFSœ7&UFMu an$#u60!ۤaDNUU畼 PV-珌x\MrDBVWCLc5}D染$X|d`9! LlhރtNpKQl:9+7Dgmi][3}e Ᶎ4^Dhs K~nj<&Hdԭq!8ഹla .(*ʬF7Ĩb{Z"w_5uCst;yڕC]Oa'A[xo˜m礣Y ]W]>%@wyN[4u|?S;;^aTˎh5sϚ8r2q jࡥؿ$FeRĽoxovt?&`z"I8ԴP}81azSx1l>Gy"Gd,?U! mKya4̹#sZ:IXVi񫢭5kǂr)3~:DnFTL V*mQϲ,|6$H?f2>= ͋LTalm9U{,h%LLCduR Rᱮ"k 5rjT*-,hHT\;ڎ`1K_SUX0{?o9KR#ߎ9yIXټ 3@YYa pG,AӢT8)iá<qilDήY-t¾a 1"Eg.dN`l!*<&TOU1@ 1 &2>)87sDGD҉فV@W;t$; ?.gZe2άrF>#X:'-Zw5'9mԶ[3Vr\h]=/g,RNXi#+MrT0X ͚Z h{e9h2F#\ZDL쐫#5PetWAO3fi°o@C ƽ#z6vtMLY0>8UdXrxPkF̸fSbUd1,v{2$74ޜс)>5=̏aQʯwO$hnY)MآT_S)QVSt=k+ح+l8ӛcA1ebwj~3Jy9!{g72n&}⇊f<ߢTRXgMϧRWgr VټwaAAoenIǩ$_$^*5fU$ U8!Ē7ZH?3&-#%2YJ1t9GcU:eN5G"]}>kZV2 `o*ʇCy UV2W]~=B2D6Q1N3FSH?4.$%a?1fI{#'bU5v?t|~."-n[T0(S flkMQOE7v'\Za௳9F{oD0OsLAQK^n3YK<8D;6n6 lf0Ɍ]\)ӕBFªgP<UrN/sC} 򜓱r\O_R5M Q`23 q!f_49^YZd:m$@Z`r#泺I@I(BȫqjY+J,#5Q?IMqHJhQ MH^utZoʌm%:Olj[!M#Iߒauv Ube TKNs17;kӆbaszIP Xhz'!1AQaq ?!$4Qßbemc[mAc vu(7WGI5[7p+LbXFmQ`ZpVRU_5O@ŨkqZֹ'ZЏ8)U6Yl,f1z$֥nʾ,[ @rT.P_)KqhoKRgćM8cWN0\L ne9jFUUśZt{_c&<ǠV M*~;\%2Vqߨ.O)vG^+M s}@5ysAx\᜵QݖErj>2jsm1Y7YZNI,eCC F)J%f(_C mfMbl|/y"_Qvj\-\ŏ4m+2&:jd|P4L2v>5935" ö116Gefm{2pt(RBܲN%/tUn%F.a 6-=ÌYf^!\%_X8%MLfȔnP'hsߌ{K1 )^Zsg*4Rηru]bkϘbqC|$~/S9->ymk$+n(+rn^ ǿ?r|.Jr+Q/g4]"9?VdFWKFke53uzn{xxB2H6PmvE:q*V6eΦgrP<7R.Z[Z3 6>pgv! Ucuolm/;l2U-|˦\feTŚSzWxdr CU+)wq0 7MT:j/7@<ªZy!L5xod00:I\}3+~#ƌ/EG|PiA0%ͫ8-?,hM2ͳG~%H?,ՠÍ㯈]z`LWV񫁠NGa]^!n檋+%)@wN01t6/rWlByWd=Epɞ&2h#o %UY( >EBL@ ;^ycΊm^V '7pO%'-K~cX\z,,hIs ZQo%*/͋*;U,ZRVfd.Ne %fĽ8p/`G8 0q*]BD*[([X q*yo3߄)WTwP`rh`nn]5 p_rw;nJ5,V ]q{\zܓF 9f(h72 Z`3Gw`RԷw|\mø~d2oc08nE8q^"W~JyԺ˵-_󝂊s{s`[{3@P^ȁ ^#,t (U\4rƋ-4.3e2qZ}ns`]G'8S MA 4Հ C;V.s%L{=!f]bzG-C /M).L CNɇ/-Yƕ }Q[M *t`a(do_#.ӓÅ@t׼G=Zr N $x_|:7(oRhs981.c(*M ^&^s-d."./~T*(XrEٍ;t#-fB^Nq XV"M _+GMC;e^sS_5)n+ *<% ]aR"+ 8V keIST˷)\5j e/}Q33G8DfE#֣DI pޥ"y fOX,f.1/7p}:i@;ByZʝ/5XCK4p`orYïVrgDp喰B73 wz&  SKQ"W`d.d7^+S&]߉_bf `'CcYŋ$jjQ rG'NBfN+bJk;z.-NyEXp3Mpy1(*,ߋ7^"AW/6<[E6jF#KPj ܦRb#0gG 0*\N+Ѿ%ywY7:}Lèf n%PKб;J=YΆ|J77S`jWGifԷQ Vz (Y^bᛲzwQY%^9=b "MoYP3X< 1 'YuW6 $Jm\%K"zp!ukEA =\fʮOWb-+0*+FtjXQ@MOx-dU%"xu_.֭)ryIɗc1 P5|ݟ'RΖ 8gftf@cb :nDmz_R,3nJr^o3Ӌ1d }_ յp Y LbVG̫['6hZ#p=(Vs;p&]}+`yfYkhm ˲1fhmX8Qx汾i`A\tiAUEjSax9ǣs,6͝6CQ[Pnw(:Lf=cTX(qյ1CqڲL~%EA՛M鸫̳ }bުa͌-f-<Wʂ p'0SX\.Rr Xv,f; XsP܈<3/++UJ7o1E+Bd6 RP~pXI!tSC D*_6 #4 IeId8_ GO0 .X43,P'Lڜ̸/\Rbau;E0A"wybnQy6^)<\fnysp(LWFoTfGV5u-G,{+1U)7&p_^^[_ *zOl0GdggKM!RgR>8 ,Pl)=D$4"sk]Z@wtbZ*5A^蕑WUp4+?prUZ5Jg1k'vz+*)m%b~cJd,[{c1)lf@P0F.Έ"B~oL/A-GgP ڳ4݈7jSz V[M2JAW'׮UJ;ͿLh``c`u*ֲQcKkI~PVTÌyܜ+^J8|k3m_ 3)4UX+d8ػSFZЧ nh^I<;1 \ɲ@2b̄ EE\Lj@6 O^$+FZZ+,Ns7!3<,{G[Q4t8Eop·NGJ~bh@fљ 8@ 򷊓:H@wyZE;y'klcGyh"X齯u DTr73,a[VN>U EQ~⾸稃/M<&lBMrө1=J' c*9W@U"*v" [ B$)7}h)[`\lm(ҿh'!1AQaq ? >? 6 ?>_BhD끁 4Y,c~tL(!/ }{/,&hC?wѭ[ɝ!,q-ïQp˥t?J1;{:6I<1NtMlKr2Czz`ih: ׄ4=2epXɉSG.J"xiQXXҽ`"7Gg#G6?E^Ck{Np6!&Z%F!?RF.83}f0iA~ܮ r74ٔ{bCHٌэ߱')5> |)ȸؔ);c|#Htqm?f^F1d(stkh1DpdvJ&98}&ē|9Dt\ + KI8'TrQZ1CxNӈtkF䐮X6Bz*"4kzpsȔ6`Mڋs\]B1SeiTIjh"" ,4%=xWر pI "$NrVjBh7HħK<>0Ys2`bCm[ʈ2_|`Gy1_#L9ьmQ叺; cL=ap1b&\ljj%Z{ J%B'{1XNo}4އd#z)'uz ȴgnK_PQb~!C)Ue>:%|Xm 4N-ռv!P'9DPL*G$sģ KqI3#W);b%#LxGF'|+t^8ikPk~ؘ?$'k4 ,I!$:/c^]1oEtirS&*ZДRl91c~Mi]>"9i Zr8(!!t|/Mz~PחV.:> ޅR+FߑQ-$Y*eI1ggȵ~ÍABf^xMmJʭ-ѸRqb؞&d5fKXB`( ?]JBW#\> O6؇t^*j5M\Ǻ&J7|)`w/ U4+T?$+uލM Q!i`fob[5H;M:*':!Ft~ѸmpW+-Q.aWBy/bDF8'Tx4ɤ§%ppO[6$)A*1ci./ksig%Q9B^^ F/|9JhQbBH  lODN(' E|9kz!pJ@x17Uz5X-G>:l8")F7hTC'&iӐ3 k96&5[,f8bY0pfw (%En >9b6D7RxNpa !F7G 76FA\,hLi'#DГ^}n'!1AQaq ?6%:y_,W>TU/^ J]y@f. k%pw X lx/ßO6k3d7u&&?QDly@+zs7ױs*` k/9qOa/Z˒5u:7_*'Mۊ_O 5U6+ ( AwF&4 >yu 5EZ- ӷ3ۤsV)*fֻycY{N1o7Ӵ}[`8:w]}޳/~{j#uuITӶ?p9a| SkS0V;1Iq7̅ *. +?=e;Crּ FP]W:#eWa ɈBZcfI m'9>p,YǝJ'}/7QTYZlTEݩ:;Fն>2 ~/a~нuE_q >gLb:XGʶÞ7ҴT&,>1. " m qRײ –-X[J-\BR1R&pfOcHa٫>p<}xZS)}?尜MV̱ag#ZTB%RbwQƯb*(eGSs'|J2Xmo ^S"~F9˪?٧pda7p!` ~s!Hx fBwwRεs9ݟڌYjAf]s?q-o&~oJb0O 4e)(Ԫb6Y>gsg\fT#_31R㈂wT;nteYNG7w=f-|%o>_2)M@yhG:hH+AJ Ժ0Kj];P&skMX֫:Q۷ǜ 8hIeobRӎP8jyuX.+- @Xu_IQs jX` #zW!71XC ]`0Fb TQ E [Dt%DlU^熥tCͮ{ w߬ۏc]S=8A ]ZHܤ- RJҳ%j,AKjUa|nxy}5}{.uVf(~8q/55 DՖ k+ ƭ fasV#*|J23NNo1ۈ(Xo%+<_@.g(>vʬz_Eϝ%ç|Q7ԡo )P*f̗zxDQg$*l#Q9Fj Y e.g=g{g6Zp;< }%l J =~/ !W˪ncHww.R-j$pĂĕ *"zܬ*<KxRCA( ze-o);tK bZj|5ًbn,p41PK,CHWF1 ( bs 9#FxBb7u%.`n,F]!&eX:;cYCef2)'jyG,!h}`X Nm _ERyKk| 8"A ̘Ƶ0-gmJK!p,܇/c?=bPZ*ӥ3?{'3vu GCK2cPJBfG' Vϟ -<%.MUY2-ߴ֖.iUj.VḶuiT+D=e@76O?YyחXaܲ@B+ȡ Qh*]%T#8%9!a*<+rC螓 X&b85Q $Jq? }~R=E1 aNJ {K!4n$&eIF5Q 84!Jnzߴy}#$2iXn"}bzI0EduXK5̧1WPe%V`}:̭ns0j-:oIgF97_3~j: F d梕uT TתD13mbL8b"'$ܺ)q1\ws;^og=9FL9aO&!1AQaq?*`"nțACZ<PHSA4=: g(>F[pגMnnN޵7ai;uO(椖>:Չۭ󬕒8(Bltg̈́&Oŀ'o.NGB%a9~WPknYфg}&xvu\59 p)%.r\, Aqȕgx,m4$ܔ_ d4' 6eP}rU jJ'Iv uW-ƭ g` WǞ!Msj+H7,JBNbur+A4]HK<.6^ޜR*PwϼTK[M :x&nY5g [5m8JMUrsCZAL/hWW"*& i"X"0uo\ ^qUFv 4 ArLsC^AJ "[:4HlIw;k&w="aJyޑDB|>ۑXWt z) p|:D{>0E1gb֜ nJ>Rg*A>so'Y]GIVBs ( h5떞J^.֦UTG`" 6-tx SnZP $yͫTf)76|~˜-t_?\3_M~/*P:C\݀,YNk e6,J/wxu on\uBI?q7/'p$5S­s`/X ˹P9j-3FP#Q+y:# pEsη )f2_ƫDB+.i4+``!AkwQ`1("hQ= D]Jn.XQ>Nr9A"p8ӋW'hGR;C@C9׵@i`7a6X~.H?)I4j^|*PkDQFyʨ>FW~Mqμ)!V'4Y͆;@ӞtXd?1ޗt(hGv F[ϩd_=5h+-m\kGe>0KM|b!G\XZ+=eeB0o-UN+%uٰ7?*k_%Iw!ۆ G@(qT ClALKPIp \n3Y7HGa@\w>*Pl7;GZ뜹.;":d.ḣeo:٢W!6M$F 8":yH-(-kWDra:W FC^}GR%J $q E%¤+LP`KdL(F'':Clh':0 JosqKɳ Hd 8 sFgn0@MoȪ7@l0!#$ki-: z-[2]qu)N[|x0ꮨ!+Qٮ嶻jCA"ݔZjJ[ )L&O Y^t i5bD$NGXwbՍ#Şi~fDS`=P$೏jѴ5# bA/5 B<;l%#L#1(;`a:(J)m_/VTr vFDAmH Ap "Iu7Lm)GT)vmi $JFrir(jpxU?sR֒KB{p*RQq${RU_! YߜԌrB>p`GMS["s9XnyԢ+Qfix DG(ӃMi20a;8pH!ūӀNJcfT{AEPn4MCĝҚ*SxaK;9??4CP4G [:B'8r}0RDr?K4_6}w0jk~ h~渂8,Ӆ`GB s:隇+zxm]wIsrdJE4NWPֻ7)@NǸpT; Ԁ0-Jw9R=Sц#C B qRa%Bޮy0v( ":_\)1\ntd;r3b V45@9GSCw00bbMzDw S?fsc'47^\6dACx[ipXU/y1C BP!, E8o'\v8: S8)Tb7 *6efTAA:e\a`;>z-$ /W BP%4 @;]"1NB*)+FXt"@*X('jLZ(ۃ҈`r`[qIB!*89Wopu>G4>2ZB"5^^fB e_4,WK*h׬(:S.ʅe/O0@ QD6E/9d'`Fo`]Nc]?$/K#9 ("G 3*jތ'C *?W7C`&!3Dz`6`)G>/7FOu:ht}aKR6[ÕhZ}~r*6D{5n`~?;/>;f d?ºÊ/䄀b;uSޱZb%NO 9\KKwļʅ@@Xl px1d4q\tNQ5S/ɧh)'YإlBr;1dDrk},pd<$P8b]۬'֐-0 ;PҁV* xf~DjxC\mT =Nq@uBP[o܎7ueoɦC Iy |%+уFtV!!`'lu)+LOO4uU5lΤl@ S< z_ [x`<<8V."d)QnՈNDŽQ5Et}kO}~U) wh3$Mm`\m/pc {Q1KT Wm$qϣt2XcΫÍHd)@_&q&ּ>.6;S }NA.XhC|ۆ xK{}L=2Jwrě 0\ b !ࣨrbrp )4H @SL=)BѸ&EzR&E.}`rʱx>g@F6K6m}vnr6DhݠA:8খH@ٯ+M4zѣ)1}pj`;Q>rQ)TM 3A8䆊-)ؗ>;]bxS= 1"?&Խ4v:TvvN1GMHT؎[6hN aJ]բc{fYg8l7OIu0yG \ʗ/񃖺*Π3 Өpx /5G̒^;7+TkV!&'~wuY"!M%D5G Ƒ8ЉDZCk_z;2xhqdGusQy>\b zW=s0Y D> m$ ?`@B]y9n ym¦|QˌxW[1v[Yڨֱ0Z\skcD`N{ ` gH@ WX %%UPsjD5@y]R CiCa<ꛖ~%I~.VR2k#짮1b$:[aM> _GTXAS"ਆbElxbusuޗaN`8+:~cflj}geP_뒦qU;PC6'.Š)p:}Q}-;t' izǶ@_& h$U/j*sOhh|}g#{PI]fm!ʂ^!vЇj$՚Q E`V.:PCÐ8oJm"`{OSn29OhB&8V ryOM JO~Vn͞p! ׃9&Jܰc:jۢJtK|iᄮ͐Q T.*D8-w>N6@tZb3*0Vz1d=p4H-4 ZTh0o'/&ܹx|.O(P$1~J F`Nlhh9%[Pr)H-TpxT/ytN$~3U؋}Š/,ce RQ+nIBI'=6%a\Ec]؜J(nΜe˯H{]Le$4>%M礁Up2bOjUGiy\O1 :"dw: N=.!S3+ X+8-qٞ]^tw5Xzm @:|oq#mWyjC 򛔋mpԨN$Z=Rh BΦnpve$43E m }@&ܽ؊~_9l:G_pxE49 gYt8wlP8 #/f-(KStW젌+Rxƅ 9Vg|&, wv%OjadPM`4, 0(;}h;u!r ?:~XTH W"I87k(/;8ܻCPh |, j w@g DqXQ:`P,To(Wo=T7}e1E-~rЪ$>3 ͛dg+iŶ;W:\bP(+ijj1ˆZ #:x<p*N]ph4=elQM0r=GԂ*)4hE7,qTņ$6TKSV*v+K4ϝxaWݩ SL!C,sa3f94c- -$c-3K:r;䨭Wmv[4qy. p ]ˎ$ZPmDK-Uuǀg<˿bwJnQ*X D]^}`@%3nkv`slibvips-8.15.1/test/test-suite/images/rotation/6.jpg000066400000000000000000001030171454007373500223300ustar00rootroot00000000000000JFIFExifMM*JR(iZHH021001004 ICC_PROFILE mntrRGB XYZ $acsp-)=ޯUxBʃ9 descDybXYZbTRC dmdd gXYZ hgTRC lumi |meas $bkpt rXYZ rTRC tech vued wtpt pcprt 7chad ,descsRGB IEC61966-2-1 black scaledXYZ $curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Kmdesc.IEC 61966-2-1 Default RGB Colour Space - sRGBXYZ bXYZ PmeasXYZ 3XYZ o8sig CRT desc-Reference Viewing Condition in IEC 61966-2-1XYZ -textCopyright International Color Consortium, 2009sf32 D&uC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((4 @Hpy%~C0a` KBFGF#)brU!Wr4de'TŸYwOEiYp+ec%ئsvѺh ڣTktܚRrv՚-`bŹJW);\&Vyr1ʥa(Ш4Y:23HGTyBhTSb[/'BCJPFhv\bw+zgow(FhiQ^M1[" jHpY*Fl6)yl|um%T#[?^x=80meyrXC{T88 Y3z@ +SJDCҶi+V(^t>]y,˫~Us X @A2 y{]382rԖ&pxڜ3Z \?_kgE@Rpu-f f].\o< >b页g ҍ\6^~t4gROZg4!48*E^' >zElcLh1C뾙`K)u6u0 0a8yh:X} ^\o;g<F(p2iV-WSaTP DE`(y"8Yݚ6K=vв})գ&"y\ۮlZk=Cvj8?J2A!Gdڣa挊RZUbh͒UjLpS=hAtL/CϷW&M z9g jQUf@t!q&b,tMrʚҚ*nNmzqKϰ mFim zHXܾ V݂F&A: 0V dW/ys*!U&1aɔYҝA6#U~E=65izWen%(B]H.@7>37`f!DU):z4 loOgoӤޏD+Rjb;@v r ^`"5gk}YI3*1xw%f{qC26`imU ӝj4{.є6\Q}OQֽS)fk P֎9Y0 330JmcC%=5UnzO˙vXz`v)d(`_e" Lǰb`fymdwMMKء;4e+kMkiVϧFV;]-$njc]B2fT31fg0eywՙPH|]Ur;em6qFˁq-]hA TcqEߋLlRj%pq+27t.)ţqaV,ls7܄sZ.y@ g26@ >CCc*pMlqPɨ#V|KMrb.lN5fTڇV*ǵmUTlnwLwV{ZPefn%[ijbf Jp-_MPԩ|n"V*r)l^*!Cїb]J\V|Bދp9gmV\^1G-ك&}QԾ(gf;jhZrՖ hz.gj* {=wğ(E}Mm-dT'K UsT .Ye|f*ep5|i}6>(ۋxv!2LCjOȢ0e-wƿž1E%⪱?GꌳQqgGɿs jhP{Qh5ZhMRwֺhkrً9BehKѱc.,B+B,oFG}bE3r.z}&O555Cǩ q=]!c1y+qG[J0rd /Z6|v4ta,-!1 A"Qa02q#BR?Y:3WvD^ޠ-R\!שj|z3qbկUO؇Zd]^E4'f dRi8,oE9+Dz+ΏDxj6>,n+^J(hv"MZp^4z7HK&8O'I&,О4G#H8/N *c$x6t.h6ӎNxEicZ٤mID:ء,K4m9+LDQe!fD?XUwiJMIRfp^شdQ(fQdHw:=y(ct&-+$T=7'UHW<<oݧ% kDLֈz13t/VtN[VG=E)~~J$}kWX}Qk"*DrprDQEQHpLpuJ{VTƯ%dYY|KF,cZ(Z(rƟXx; !^tq?gt[H좻-w>xloTaQö')oL{j$fx"u.ذY}i_Շ1Ko(;S#4Grqȓc"H\i繝NgO|?ɷfSl;^$$:KTX.Ċҋ,.u4m̯o%vC"#w~",[dE%DU ^aY?해tQ;|$_Pop66@E}puhFM2+~zE\!5dvpȑepu~{FWFiTJ(UʼXKM~E%7$9#r|/K,%26YA[2PG-HzC_"Χh}Cvp{{6؆®Di>\5WWYp3F&b0 j ">hNjnoe.#7)і.#" G] L39;F> slM?u-OXֿ6AӦ˘PkT+}W aݷTONefJ(O|TyEvK2*:.qꃮ6BM,|2]xv䯒_5NE՗@pPC7Nt:͆,eܭ:&V bU Y3Gvv_huD:)Ȩ_e:Q8dQIb23jx\R:F5CXNNmEaհW[7Jk} 56Y M^ :$D\B8싶A%|ՕDT|6^%9NqG10rlj`sDl,/7R{ochBb M  &h]`߇ka]t&0xL]}$t _rAN4c$:X&!^<JM/ Jg5M3- :6]UӏXlh@M/-˓rLd2%ƟDI{e8ar` jUgT;Gk=9&ڨfeǺ**R n+#|bg5t7fJn cbg!O{ݓ` 6F^D*R\ Ӊ.29+g9SS? fkHkp=ؑiOe{[Lz)m.k2ήANYlp&z+DD[HixHAQbť<d_-Vpu{bʩae4`ȎwX݇Ii6 :sYr J!nХ&v_ɯL.q@l/féLzO1Tp`3NC~'gтW7ЩwPPN_ڻw`V#%5&7c}n=EN1$7.s̰ttSKkz'(l&: uu RmH5M,Bw]u?7߈=ʒ??E!YOE#$+"]ӝC)T;R)J<0r2!d;? @v#ym A5KgkO6]᧗-^ q*|P޺(hd+bW827rtU# 6N,ޅ ? tt(?LMql!T\X9bCݛ{3;Үq׀kΉh#Ejpm7 !q&?U6VDW1XpiW ֱJ(T$X0AL^﨔KR\ ]S4S:z"۵wvN9]嘕ʥ]=s^A&NS0˜8yAǨ Tcy=Z]F- xB>Ig XDZڇ@YDO0yo` Dnw85}T;Ut 7G,FH@IUp @_ +N `DrlktXR~38iC$Q UM0KdS=4k_C]4ᴼԜSdͷQhEli8uTSN!}Ww1e- /$68(T?S\fMP`77 I9Tm9nlRj8YS\xjxpk"/o"OuxSQVYʼ{DQ'uIyC{<瞘dVFe*%lF}xC_}SwqY%2Jx7jTDyUqdgoU+6y]Ix@\iHO5fE7!rħc4 Z&E~4>ar+'djsB9SUjky!M2.fjEDAsjA͛7nӺq`f^dΠ,L6?`\T.\r{@b .Q+YB8=!6R.k"WjGϱ&a0\68ٻDgD͟P!9XXx~ӄS 3VQ6L8w1**b tlT[ucY^X#?]a2Ӣ-h7`U#&ê00Xu} Җ䏊 柊p\[ZּS ;.O fSI6q;&YW(RҮ.B3T"*U̕y~!0D@] 1> o 0%FKBsC0$zV3`\NHK#EFRޛ"_jG9\e}~@賟ߚeۮ_% ӪcA%E}UHRkZ Y 1Վ@"@*N@ MĬ_%k dFp>dp9C8C(TL#~&#b\yB ;'}U3y-W1}4B|E.6 es%I&Q+ē{..WͷXPBwRr<.h[e|ʿdi3{'v]/i&{>y23xLX4f'tчE~A~j3wU&RݥMêKejQ!4|{I,L:N!>lTAxYuFL"J:"kj[Sd%pË0Sy¤b{k$YO^@WR܊ (t!KT@w&W=Pz]uVV({9-r}Q" Y`'6P}Pp"MJeIPs+]5ee-E:5qzTFSt7u'!1AQaq ?!e&(Wo!weǴQWI_ q/coW탃g7ow*6M,P^Q`#{[bg1YۣX HZp;m;UdbXTexT*;!@vqmPmY`GEw0eJ۝|Ùz7ufl]_Opkr>`9M; {dތ.+4ZF \.{~(:Wo5Q"ҨFˊK,P+"8ѯTyUUT wܚk]G7v3 [#d<1 dׂ)9;jZQ} eS1Kcw_w{nqgB߇6ݓ<^|X"v( ,n\ihd^0bYL]B+3x?-Ea[XFU/T {xhkۍJ<`o+3~sXc/YmPPܡSvTt;$uݥΗ24[fwh\\(`%n5Zq _tm[Ǘd;>؆w%F{~8/pWs-0TItEVKRuv*s,4S.7Mj 5W Nx@)NHsAvΚW.uAlvQx|CvTWS &\ȿw5Tr%Et/|LTz,@{l.q,.An|$:@X=FDZj[ue)Ŋ=#7( k2|ľ-^^`^^-%jz[&QtV 06U31 &SLP`m9(̻sbb}<@'wAJs7GYlj>S~@htzwoRTUgrf3~%ٷ \X9TD(R91Ua{VLٵF=x6-K=56P"w F?lB(C'8Dv2S^S#P=+r׷\u>GO$L9*T'+Fa^)tVXVmW>떵+lNU2ySǞXL42߈QĶ8޾#ENZ%v~cSl1498 yN:[(B2<(QDȼQ/]g+q eQ~jW] >W_.+ݏeSB2j#>+Q]t9wLF>Mu*P{Ǝ0:gv {V]z~H4]zۮm?̾RIQPjVxJA4 )_K̆ܮ^Բ:R3s#KeKm j5^~PϬ_q5Cv`cRW冒ǂC5j 24ڃlXƍXXG+E(oi]+=qw4׏!gl-Y^a`n !KϖujWט qiDŮ}7Up\POl2GB@&%e?IUG+,,f6TjJCWu03Zo'x&-oIw w!ݥnKҰ]%㧋h/aXޢMd/̄Nq3z^3S;ۛfe^%PGS`ۅU|+)[S /UBT6f 0PJLE-+mp5 =#4?aW%#@YqTVGV)uw?$e^`G-ēqعU@oRˉٛʏYHI"r=~#Ps֦LN9uYEDtrkRpmsۨD5z}򠢚ekp$[}2:)$!%lۨLUqqPE5qH⠙[[p^-.eNV؅0u?Md2^KQ`"Jjǫ*L7BgS諿Mr|LE5K3T{g@!\ c/n~׌5.XlY~(Y~a RrS!%4Ǭ sB#_2? KPݫ_&/bSj%Ddk#MQW8hK]K`'qGOwr4Jz.ZF'Ro2dOY4=^"e 0U9JeLf{8g1jM0l[@sU Dn^aP 7eJ*0!pM YvE)=-d..-*8qC3p= "xd`H5KvERT^^"aC1g\ l}O*%u^ͼLD\ TtA6^e2e!yr!j Ak֨3^ Mc9ԵFmDZiyl Z_v0Hk#*SMz`;c<,t ^#X3#o$jb[&Uy)[9p>rYJTpT-aXcX8f\}9ܵ᷶wNs*: r:n AZ{T]Xx8;5fGəOa<2F詍2:000f?i\%V'30t/}GCn2CuixϒR6XeV/L*ef--pq|+)NVeIn:0ڛC: S\ {E3gwӬylҟ=Kj}*P4;V"Z/)sa3TfX%3 DcAwyWkWq͵̂oDy@#R+orK0lO؋ ަ`oQG[TIſ+(gu&AE8eN/Æ|J!ULO8ml.ˢCij` Eqw(B0\z4l"8,)0\.@z?}ź/W!-sK9`ޜh 4>˄sq YXV.M^&~XUY˽BpKћ΢zT@pk= QCSfx3jkk<\w8#>;'0mV87; ,`HٯcgSa$v$/bM{˗OzH1}zK0RVL1^9)*җ <srGP-~cf~ey@{ƐS}@WΏL5TX!熦H9EX{bDD<\c# hR\s$;¡|ͫ]V%3PXֹ,3QNjm*2% +;|3@4zQ(YKteeѵb_oDG*T{]=t_<㣧xr9҃VYKJy.ny~ZWZƜ.H&:w. $Ј`-#,k()aуnG jCyʳF*mXb3z*T/n2ҏ0 a# 6eޣ+ ʊlc.sEBk'n[q>ڇt;R 3 < ]˦/07 {@⼹}ٮ:4qp,u%M~$*: uȿ+_XLRFWQLH!|L0Kzs=_'$%J(h%P5]qPչ3<^>0V棖;KҘq̃XQR|.SyeˬpK._Yw^⾗]oWPS=%Hݞ_ zBl=2i"cu[N^^G1УWO#0^2gDWKH0=%'eN[5 ̣ ͑[b 7+^b yBkO1.\x\1']3wϷ3(;]c'a_xdDWWBq+G%/5/5"t1sW3VK*".Rdk^oc578ƒ1ԀOj|:&V(So`GSyTzf_pfY@ -%ԑT"mUjQV_0I<~šsڠhB,Μ#KHU`spzF#^Dp,ژ> J-YH#$ /O11j!P]X\#r-1GJ 5 ^ik> |$>jfvz[H:8וwh^ό~IT^$T;(DP{(rxE+Ǽ>84y_"DHFYSol0Kg 15 5k<`Hvc#9w0h8㷯>?UUa9Hmǣ.u`u9k0)DU,:^.qv&uden̩Ou5Ag>OƿTWYmD7[)TN/z!q1m giCh fji۾Az̭UL4,podluU7/pv˗ho8V0xj.*R-`Y\@kP]Rqf0e(K,AMh'rk,39yexU طhPCG7vs_>pS: V]!yӘ@ҠHQo5ɟ&!1AQaq?BŘ;BJMcHOvGfhڴkWVܧj"ucA7|, @w]4LKX S+?YL$3wǬ7DBH{at>u a;~0( B*!J .㿁]`0`™i"'AѴj?Gׄ@F&5pʡ+I&1ʣiઆԺ*Qb*O:f=O>HKL}]ߗ?Ӆ+m̋8g2E4 xݡѱDWWhThS Jl1ve X֣F<yfH󛯢ఉV]yt(=.(LoqWmt`_!.iot=%M{m(?yiQǎ#`#޻z[@oا6\>W&χփOnm|90MRMbޡ DKóF)PA,I_قYa )h7|aA EKa y<WO1A(/&o f;UJBdތ]\6>r)u]L01-jo".g6=s`'.s ;[@vҋT"a ~(_y GQ_-2 S#^& tw}RAf<#XC51CuU]'oE^zn -N`+\gϟӅ|*Hu_=dޡo>3up=~{ hEE|\c*IBYT0+ctin&@- $c <2Br('p"sR\ jn4C:9rdf ]Xq`Iվ0E>>8EXq/b??86NvE4~0|CcR:qcCGmzK@F'*/b8>qNgl č(zT4&*9',&? gH?XިXUg_(Lz`߄?(=9%`C.][NpD򓹺`gpuB)tuPPp 1 ";W@IQCEW!gpE׳Z4\a"4qٯZ 7?i Qp!Q]<“)ߑMPI"D6U:M܄Fq54b8S+٧NjRST| 4BOxÙ6EAҜkAg(B.F#U >LGkV(f;' [X <>!lȨQ2;ѡa:PA&'UR@Ϭvt8x^D@ ` [q&$]ޟVp3I4zp䨽Į0X?Gƴ?LD &6&~Nfl"B񷘂Z%/ ~냫 @Fz -~-_pE4g*I3$#[MTWdvz+xP>٭GMerTɓd}#up쐔Fq森tPoݵ;؎>S]Ė*ӰZ@t}rs CqE )i+y0=6* X\J ~ޱqa1U!]yP sjǨ~{_uTDYa!V$}}MFR y(=ߖ:,`S{aXߗ $:Sn@}x(.RxT&۷)Fl64`a($awBmsERbk: x2iCi_'TI&+B=XĔYg`M/\V{SɎ&ǽeҗv `6IĀ`dMh&% kYd8lDtco""QB hM{}ʂw 6tc#=4.ɿP j  `: ѭSOMhL%63XHbطR w}02TW8dkOyf>q B|bՔK{L8$ l<'\Fr3+@= a) UuO6ou5,ڍǫ}j`H xuR[P'rDpv{;Ǯd 9y7}T/'֞|N5LܣaĐ[p]J߰.7Ňή>2a"l5w-M )UWvAW#6v`  vU,D_,;`GQOTQQDyVaDZ=C8k],VBI:y>M/Or6/+iG%6{#qD |Bʽ^$#_~)8J({E>P+d:‘`"L:fQF5DIMajC, 84K—*RPYʸS&i:BfYZՄD _xZlEA)DQk؈eHm4B{LV$zyÁwAvT"Sۀ'{~Elpph@n$^XMT<>g0xc<ӤJ8m ՅÇeoօg)L|%J hqRϏAX^|kkÚT0daYu!T&Sj^Ɏ`A>y^FsH3xGbvHs=[|.ZT9M`фTn/,KXM_0 /OOVo5Ǎu̥b<!k?ycj_:JHo? =)е?M9H>~Hsf&PkIê 5%;6AM}*>AוS]9%0aH*hAbðJ4WW)B+TzLyCx+و-BX)CR7!qЉaP%`u ߛW E+vpY]6B &q"FK>GL! M+as>F.")?m1rC V/pX6p.lPZ] T{ӈS^9 -CAOT,{^O6O`D "U t#h"#@T a.h ;55v W B#ցՒH $hx/gJ>{wx\dޭS2*b$ݧ0H7Q: .cZۑ@ߝ{LIQwBw:@y;[CÄXE:3O1)# CH M=.2]#ʽT9KЮU_vi{Į$EĨP$vh[/ƏLԁ/x&^jbXO G0Q oO/0[:z1p*i  6=`C e@5{#3:8F> ĉZ"7ʚE޽ažm俩{&*o3d+m5lu0- +jzˑ`uVA6܌KR1q;Vm6o&" $͏o53 #>PA5DM2QCL]{cSI)MR%a@0ZFb(NE.4><0&pF8MF LcҷiWtǏ}Llj6_.aly@I)~g864uվZ >Hx%`]wfT!G#tsj46Oi@f{|9$ 蟾@K66.]f +Hc1PjV?kv4Xۯu4nagF|CPMC,Wē!ZGJ^v'&r) 46BJm#Z BTHmd|yx*TZ_i|$zOkG%{x׋/?xFJ>1xʛx}׍;Şo-_;OL6ݕl2e{ Y`\?&"vz} dT9/0x$ TmF q&/X=VC`#`] Ѳ)Pp*dRΩU#ZtiLLjBxKA"+nd猑E|{glj||1ߑ Bؓf2S|=]-_~\cyY4K۹cB'r  Hiܬ!*Zz-=2-|<8tO}B/۽ Ώەa+$B,\3|D*'Cϼcp% >{aC٧9*wQB8~T_sQ*aHv~2Oc$u=&-{+Ս@$ʐT2mRlD7fYmj|pAӫ@EjJSؐQî஭5KoNqJB. LSo~qeY@h^e^ɏ6U_9EHu9$T!5QPh _DP{td'<~TnAק9mP."oE],H?xFxNί9r7Bx-o6yټ\1HsdB7LEO8bmu,zyAUڂ;544˷"])7]-'a )UN` EO8kޞ@jC3\(.k Ƶu #*WWQcdֿ9܌ R*L\s@~unl[M #3 -TYb[< XxDk{U|;u֟ysie}y^< bLjY?h=~1E){b-!H?=Xè\/3vkc(~rKN4Zl%kfH/0m=)$"HO5إ;O᭢ ~H0iύb逦@*IH "E07Ie*%7oXrב>?!KDz&&=Ԉvnn`$vN>|rQz'8yD6p?:+n'ώu/zw_]&>;D0B(C $(k}j1!MNHkku'PqHZ 8K[*zK_ah\CT #}s0Cws@l<O ڻRR!`h ^JhAXttU0/xXBH<'4H'O8vKW|mJSqdGܼKk~ap|ucmfǼ|eRP7s׃\7qy} 5A7ߏoE[ J^2q0N7`d SFߟ?^2c* `_/9 ڼ-h0B7ƗB6 &]5P' "_(;]Wۻ5ӌevjڞwp!` pwKtq"oHR,S \"Tl7JU awsKw2PnYOZ391%Z)rtt*h*(:^) \*M$f4Aiv fHA@t>H­2IU;ݶޮ9t>)f&z9`oxo$ 1x~`f2l#\PhFÓ`Oƛ51֋ Yv4@X= zxf=b# CW?9#A %k5N_7oZǿ&P(5Wh|HURW‚H-~c?@ 6ƌٱjDi G [W_w7g]/=Ҽ1 ,΀WcQ4pmYL[ x<%׫U~c6Y-V"[6RN.e{yn?!E o}Co;_(%(O>.ƚl:o^|? ZspMγsmSsTTwfA:?71{~fO4Ox3E &Ǫ+tb!⿌ #X9y-5SAgr)O{=UKB:.Yk@\C(mM;X @tDNЧ "'D.bj/Qb28;LX-; p@%$ٯJEYc"~<EpU͂oa`SKm/_͇Ca&IB tFdm(7L]`8K5&k"ݲ/ӽyp;PPeZ^)PpP+J l47 l{^j|6W1U_C&xBL+H -է( W)8,C9v]e]0!avV8CP(KupVM:. lbdls"@2t@2m[h W@*>#$4I `'i„L+W~yr@/|V5Ł4=?})e* J0a6&xhZ_jmGgD,&x9o v"#M@}b"=EzP*V1e1f|~hW8|fi)RM'Jevg*Q46y.4_-*E * F7NH I_x&|yi]<+}4T&&n Ia2XDk 6׿DgDE?uɑA' k*lܩ~)I"7i5pT*<oNN i^)3d4 jjbtAi0!Nt&$mAzudzQ5eS@:z=Z$UJDʑdXfcvnњlJ4YDWGk z}(hKje6Ҡo!}iv#`%%( a4``5 (rZBӂ0Lm ,"a_*e8i&?Q0Y"͝?āAzy5EW_4Z&IFlvՏk!b:0ک y.$#}E'Cќ\"BRlqԇW]T] 6a)<#觞`Q 3vǀǜD HT lkH v_zjgAt1blhw kz ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Kmdesc.IEC 61966-2-1 Default RGB Colour Space - sRGBXYZ bXYZ PmeasXYZ 3XYZ o8sig CRT desc-Reference Viewing Condition in IEC 61966-2-1XYZ -textCopyright International Color Consortium, 2009sf32 D&uC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((4 P|%޽-t!p8b.4fҔG fR1iFn;AJ[FN:B:֘fאKhh2XdM-X̌>&,3L#_ew4⬖Ŗ|/yGs"3:{L|<ԃai(݂DԏAQIyF{[ Epeg{Jګp Z>@qn]&fI-T_Awߏu6*1?3םT$7!J;hv:jR[2ׇI+ZvG*,.GclfP7~Ghyv0t˛#WAp#23XCGD"X >M-Yc[}GҎ<Ω ;%ܮ>gSc:Z " >{elmfױcT<~<65vZ[ܵ3k='Y  pJɝhyRzYu7=#eg> :9N+PKW4;!@B,܊\Dǚ;rU[l[[4א9E2-^3jê(`РZIOV̞BH6!5+N{KF{^k2ɪg+gDY|lcŽrJ۲%4dKh44-{yƱN!*oDOv8)N@)@ہR+$"@U0HT j5j.!<$UHY&g] q07KMczOs,ݹ 5z" UNKPM3F騺w*R6dљs.ˀ?hǺFӿe\k C֜1U& [~&5EyeJV4XaFٻ5ٙ1GܜrCMmmK-䩤"I~;nhgt}$GI+ksO~hGe1)ټWHW8jZb&*9K`Wnد <7Cƀs_ࡠxNbh7浠qGA[ R' i1Ĵn̕·m>{r ܭB.9^`1`(Q>^o%Fes A4aUi.5r\as~Wn_%E p )ZFuՐn{VXsvӘn0Τ!o\na3?j< cCVIc95) ^+V6)CsD')E [MLi9~ mJkd9^+qX*vH{2[((ɱx#{n"uu4msӗ遅&#ay̱Em2Gך(n9np=~)06% 1cF2݂z|=;G8WjxGdFt穼D_e8V8bF{gi;l<(e;8oU[cZ. 9#k5;f[d_*䑱b(5`@Қ FlT*) ggղ fYYJE种 ,ޜVֲѷ|$QCX&k&C(aXcc;t1I?U?w[zm$PL f u6M4vmIkk<ZGz qVcQoj1Ȩs^j< W*:[.5F1V'Һњ#*P+UL $-}[EbJiTJثze0sѠ)`iRRuQ]%5nTy1Qf_냨-.E`,n^ v#Dܬk&MM19Lik8DE{0]lz4쮫SǼqīQ,dZR˅{-‰~Ld=nΖ!A "wDLkXjex0 \V$qMgh '_Zݫ"#:Y^XbEt?fKj CMh|xqзRֶAmcBSuUW8Y1 {0orHo3CJt>5?I2]SEEe5Hh&I5kE,)y&RO[P(:{9X̍\;Ij2 V| uuyde0 ba'qP6AM/V"^h}vġVh`ҡ$F }]u[VI#r𪨨KT'ےƶ5gI[lsYz,Ƽg9]c0I k Sr}*TMnGhIk4h|{9$ѥ/Dke֔!f xdk-Yշ'?&se-ĭN#ߵkcobCX*mRb|qKN#5*am&1 2]*Ku^( "Rm p|i4E()_hLjFin-->D?$'AtknM-c),FyT)X=Sdnⵕ KC\Z^4qQ 1[k+xbk~^lSK ++zg9c'58p@G*AMnFF[ oӍeW |NdM$Ù雀qD+d}ݳEYz: GRN5 44j:]:k˞Z=e6#zdYHߩ5I SF,nSb1JsI#2VpKFFRSL+7H""#Y+<_oei8xndd>CH3qR#rod{֋>1|I$N:jKb?ecN}*OJdisdT9)x*{+RU"ƾ]ȯ6"ꌥ$JJOdaDx@ŕ_9'Fj5ҰwX;FEQC<*Bpqn.=N"x1;;d'iA8@=hCgˈb뛼c:o[Y!1›ձ_< Z:}kb?K)FjGSYvM-!1 A"Qa2q0B@R?ut8D|R-Y^H3MIV4WgdNћW.v+!mDeá\Z[1, geדYItJ9GЊ^.E l{Lvqf2?y[2 t7Bg{EB_G;%YCtd:}et?slBB;?n룬ĻpWey=NuaFIz,ϱY(FUY'O-Ҕ% FSeQB'fQ}rԹ][Q{C,D(vz[k[)YȋFED $3B[P1?{1ȍ ^pOQe[K#o,Q#J+wyի7ՍI,BD>B طe9؝lE妒45&Pf!J>,t``MH^PUk[UBlƧY4"({^P=eWvblV/ɩ_{N=/fJBR6$+X~JIsQkd '2'#Ԭ$hIUcm2RVŴDJO9L<-'/i .rRLN?.غN*$ҹtIIeYer9{9rƖEHi{U$ ƫ+Kg#X(`Ytq"wwDљb™8|JWqBi,mMNV#D13C2AS:~nN'#"&%+|?ʎ:8,ԓD~r= ;=]eWBg!w,q`G2^. =HD+;ʥ9sWӕ}zQD.5:BnvY'.'_G>/8N2qHsKϣ ]VJ4N\QVlr-+nnAU},'MdJ*'}&p4-Go DK<}؟+fXېȻ(_cP[Y9*>&)q,Hx%pbx%aY"ND]Y+6_~ .x9Ļd~$YD=8uDF< !1A"Qa2q #BR3r0b?gʁnAsf7N:q*cW\OƝ ;fEퟫ+ !V(G1 (xfAMCc\uOFuG_]Fn#'pw5U_1aKtu'⵼-oie!խPuSvizDi*ȂS0!н{'@Lw tjw@<0A[yCI.ӀNM:2K[$Rq?m{Z-13syC.7_{j1A쏪-nyp*Tfsw.On;:g[(e.DL!޿@G&SG4]TUi?IXWӹH; XWZaY\G_4hܒJ<6nzqNovCP1BM`Dn/kȞe\ZtƎ i7\SkvہY~6Ai"Zpݺ9n# ]i:fEU  韗̍'k:{MH?Jpx@(8HTe;+=g%eY`s߰@`sHTxMt%gcd6Ԕ CV ߧ]>tx|WQ%w*: wDuuAҨm-2Pm@ TЯ,)LZFvU<@fЅ\p蚡 jU1~fɸ*xLD _NtH]\F\杪EGL!^ 5]o ji Ȫ[@'%@ /L ߙ6*4AOu47[ ۺ9ʭ; 2?TATpqf BE+ lBlXNuer%HDvURlMgvD5N@hꣀlSK)XLu S=l>j oS4+!Ky*7Q摗%]޲T. 75+K6rIA3u.d*1Qr Y xzg~7dUl`WFɎn[p:ECnoÒ#ԅAs{ K_].TMMMci7+q nZ~*UXVoyRV pBI \A9--sjeNeo0 ;0hwXàlfip* F6bwL}\Ejj :/,p ub_TISC~JH,k-zs>xɨ#@S+:a ;ܳxPpFwXxiOOxR1~ë3o#i߼N`E5ܷ/;E2ruzHE,sHD: )җ}_j5ΞMuU*B17,jGIBNOBO h.ܼK]c,N w֯N-c+v2F~t7m3+|S`"?qi:sF )?NѨ;o?nl7LtU$ShYyrRa}ЩM*jG Eæ6j榒]2p3?e5ĚQ"qlrlB8 fdG5}^'r#|}Pf |%3LUw<z8oet Ghvl!F'B2~4$vМ oAV9S|FS1~IoӶg <n* N/e%Nê0 .E1ͼfK vaj7SPʒ3ߗ3ӃLAn޵:'9lB4siGe?amׁ3yTn=44'UjuNi O?$/aR[+Lq*d *W.յZ+uH\ήj$ @֏euYBzy=,CwafSc*Nd\\ .HM.e|.s=뱱T=*CIBtZx6;PdZ.҉ay`d!GYaɵ~ 6D@%=-?d#U?4[\^ꙸLJV guAi@<-ÙG75Guo~}aiӡ\(wNI mvIv `1GU8.0Qci@'QWFUȞdߍJ2aS?P#!=V 7PSA8*ο\"4.PauEQoP{8L&H#ܷ_oӲ# AW${TU;'(N6UirI MtX*fMRb5)s[ 5\[h='̅u9B8^l#sO hYw<ѩ֞"N C-;JɆ8IO NU<zpH8l*X S`Fjz1jQ =SutMkabkozh!I(X)yT1Y =.VjW9m<Js(G8JG (EX`xR4A6.qQSYwA?eVs3q.$ߑۉl:7٢Gl{)6Mo8igOshEn. %b!WD  T f-@+olU:]' T9MSo9A4l[o)~D5to.GSpȻESsl pKDxtxo!8n6'y 4kH֕csEܛ70D'Au5fMYC5aK>򆹠g ݻ 8{E:ߔ @ ftbD@Mc[L0v+Ed=sI.XB#ec8f8u=ǙqAZUKu{47淡8۲L 5 T]3(XT?+D"HU:SPvojg||O|o9i:o0Cga %S=Sb>ҍn۲xE޸S^Ѣu}pPgx{\4iCU`9#u$HUT^6R=d&Pö'x87ˉ[դ=G52..T] \^UhˌN,0ШہoU! K B{_/--2 \|ǽ؉WF !Q'c.%en#Sea!:f@'`q ڑ'!1AQaq ?!ٝ-8`DvIB +N{x xLs xl8 ?R tfկƾ7QjXރɊC$`8XcL0cj%_×ԥB"KLT("e /1K!E|*EULG2Rz0-ZgLk ? J;:Ew*<85~&P3Or^q [/#iyd-Rn6j2 Plʏ@84asMH8ZR1hܱn~*Y&K=P,"Ϸ-ƲIcJ-j֪|(mF0zH J~.\5?,Xm',/(Ϋ11CUwΈ)r]bv;9p9Qi1P}J|[| c~]v6 ޹ SE D Kk%4;w bVfIXU8S w*, s a/HiL Y ;z1aOYl  1Ac4ļ f,gf&ra¿,+ٙXAk2V~)~u+ J,nf썪kf!1\:Z#|hL*{&,Kz降A(8Af= З;LFK?gG^`-jUHǪCRĀrbwz/#Z'ԧ}L˃cLJDD:a<@.iX""^p[`snߘ̿c,#SX2T\ܺ)\ up}9TiܻWHvzz 1|[V}}k6q-K^6m Zs~ .ᑩ`-)0#␪eOU5D4yqQ:F0΢0Q/oA{4&%a|Eesժy]v|f]`Y"aya Y^ )L_D34~z5 < ?puɯQ'O}ryK^v#)FYEժ?3(4!b8jR˻ GOAb?82H=>j%mDS5C(E>lSIZ(-‹x4~zf|]p\N&IiG'Zs 4g9s%WѭUho'@P5ZB8r~o`Øv+`r1L6)R=N1<56pTFRX`Q֥3LTZ]83eQ&j].ΐOfXQطO`/Zד ,e{KpdDP_sܫO&`ylir|jf/X#-`U?Yw5|0Å;>dB/o}Y Rz45’s =;AA<me(/5̺m8M߈̽;l\vY3{l_2`lǸ2ѷcg5 [gu:3+}Ɠڻ/s,@WPXß;[@ZL֠Be ֲDM>4pm0e¯b60+["pp[z.Ppn R<eX uV[d곍U%?Ffǰ+ ӈB_k4 bwA(1U&)?#+Cuv@JaqzFzF<oٿ 1L=;jr4X}[c]eKԣ}8WG=Đ1 @2cRf²=uQ$UP*D FV"0'QUfe@l;h>9F7*m7FA Ex-u1@|"eeB:c[~B|̕ u`|,ý(Zy/$+a~'(\f%J}%'~f4?3rE>F.`ϙ\viI S9P992k ZwT0 Uz/az%RYt !oWsXe_ )];G Tͽ*Zg[B館HHz Aw1w׈i`Wj`yQK&Ak=?0 1GY)Ws_!k]c" !BɜBr.uu'}8?'4RKeFB{;l n5O 61)USԼunȏ(T1-WŸ }]jvO7-T_wC*F~*>1w~Nd.,ղ=MZ6^AW[2@py_w-t1ˬʇ,vAx9>z Ro1gxa BьQwX6-51W=nU0w3_' #Ug57vj>Q3|6Ndo@Zxp%ޗی6-k F3dԖ06:.qeAy@Sf0XY 4U5 "y24^Co3E4k0&Cjɱ6e؄wҢוU\5灛CE[6|X3eƥ&MbMќaG Fgx*XmZ$zZCmaJ"Tcw9Ы9^xXɏN>>""nọM~'%bex#98FiA*9#v y1䪟o Csyܾuw~F[ J/9ԩ'$ˍr*g{ѕ5ʼ[Ĵ9{-U0g "X2*%:\f[tg?zĤ,@90KH_r1 @1e % X] U!mu.m5J:  Z1E@Q+`b8h>w 35xwiEuzE(#FA?p&O HBPb5\1 .> `9sX)FYq5vNCƢqa"唋Jr?Hyvld6.i;pȹ ɰϊO 5ѿPY!mXL(V5H&njz@+a7 ij0VE"8K~sB2'1q9Ѭ=O{WWtR}‡`2{:hc}5WJv=rtN*cHӀ50g9 FI9,|{$Cm[gnOdۓ.gUPj º:`k?>u ޜ>6 ָSzmbp!5pnܙCr4ejI{*txbV *IeiЙd|L8 o@Bk:{0tGVt5nƜO;[T0d@ߑ$-D\^ʲZ);7 J-ǗWq(;0W8ÏQy^v-!IJ0$'2jߗV%!1AQa q?YBLmB|V\]4̓A}=ulbwC#4SD-xOر6= PiCTX&D!Da$Y!RYN& *Dlxo%ОG%pJ(6y.LJB6}bN`Hİ6W\#b8#b\WmY豞"jB5D%6Z04dyLhކ8\pF`aQ,q6t:H"D ВYTcIXj*|*HFdc,ᱵ!e{=EtƋ20:DX1$2#1#= }q%L8v@ch4,dmQA4`Th6l.{Lt&4` s_0~L n&$|?Gd<8ҌH&6䣧hy٧EKbUhpւjLcǒ6B^cfiBp6B{ <7Ǵ\ARXH6؇Zg; h^$i!cțBba?&)mЙ2cFmCyxrH~'!1AQaq ?[7)l_R)oQFx1Cg B|vfbDZts*JFn1vZOK21/ʪЕC#)яy=+.5~J+xK-q,'-P#JYkj23Rə߁ qztqL+B n8u =i1+d26 j%$2CrS0ZqmjZ²ffRJo+ ^"/6Ϧ`PJiNzpг.DKAjDF _V[Ek35%hz%Q.#Hul N%j1`9Fd.sQdEͨ1"nlm KeIԩBpzG9@X.È <\σ\~"TX>vġ_^2SGv71 w 1hq,+0J.w#p[ R#QHVQ,;-wt|mJA̵~f%8_=b3F2Rdž2eYbK7ZrDBC9b+(X! JWlnQaFeX̩%Lc,c^0̗ 楕KwD(W=Єİ6pECpGLqמ+T1Ή|Aq,ETka(/HZ`Ҙ")/l^{~O_cli/w0\=zԖQW-,AԨ)é5̑1 XGE@XL.CKif 1]gdvµUUي$D]noWPwt(Bx{3Z U̡J>ݘZ\a 2g +}O8_݈K~j7񈵚^6 rs+9Uq/Cn-QeQnz4k s))8EjĬ0TD(5oL _ @lJ$q# R׼p52?ˉVMNPdx|Ul5_w+*ٟ Aw}wLVm<ܿn?AiLzj#YDT:PA=`SS-^Ռ*"+ |L<6c{H۞Q5 kRJf{EL\JTwei C4xF] eDX)׼ϋ[_X,]}W蓋K?2J)Q̩.qk91_Af͟ްQFn{sB" ˏ"*.2˅ e6T=EA`#|e&~dP'M>ϼm|kX@vb~_0ݕDlUTWK0()K[{.-iҕ-! b*@lGGMeuׄͫ3+g>tR+x.loczKt1or閩mEj3q,q2fw*1%0sದyX8aYy-2mtkC :w򂁥kP ļLZ19f8eKk .΢< !_Ɋ4/tb% #Phmuua}aa`ƼX$#V4f$S"+fM0D]ìN\Zn`l!+]h0)ܢJe |^z>|< ؂q&} t=igʜk< B)hS.ĥ1Z s$J+5p[pSjĮ%30S]#E~2|XcId]xK_;>+* +6> a^iX,/U2իY=xVWɿ{vk-i* d ]Mo-=Uš2ȵ aGh$C笡Vk#t(aLLkw3eKt ֠e3=h{- _'?huƟߴ-:j4cCg\F9YfR_l+}"V~Ҵ)QS8y񉁷R^ o6pݘT1ੌ-7Xߋ 3X믏N>>1ZZZE_;g߳g/fk .Fo:zM;|aLJX/pJF+B؆#-M| J8Ka 㞷=!PJ~xˈ\JO=>RZKjS6{~\̤z\Ɍ0 yK \^/H|!A\}%9p_yz! d.@ʿ]p 8! e:Қg,?hߟ:@4²0.<;Dž&D;k!{@nVaoN+MV) AQ sK :;"յ;AJx%QLB]U8HYVujU_j)Β}b}bhהaTl-L@Nb*:&D'!1AQaq ?5Jƃ댇;,*ء"FRKԛ<S4b{Ƃ_9(r: 0XΖ`ڮHM G9@7zT=LH$* gg^KL9N,I8 Vnc+vHhW 6 q~sTU?PXFj}nYifԅ\l˽w R+ާtM00uw~5D!RVG G<sD2RᖑM9 9O!P)٥dNŏ+|QQ(U,d+{2YA9Γm Sz\H= >~ sN-Mʊ׊ ,}8+& %֝|)~bn+M}" K#avT=)m Ҿ' gƲڲ0yʔX嚊*r~0޷&d[HnYW|qr6Vo}aQ2=se -AN)gx J(Q)ջ Z 9\DGv|Юp6k{S^q(:XzbGl8j}/r}Ch+MzZɂkӱS&7xkb)z*(pY~gXSƽwB؁󄒕ʈ UH1wUTt2+J[w.ff`\$! cfp.;&/b-m+N:қ xwX]݇כLABNhGY1:l]"wRR @+8ɢE%x PP4Z [DPT]:F3.;/w Zu] !"P=zKF:xT=.M0&|w"M#ӂwyy{8x|`l@;f-pá1,<Re!zc/8sjBh)QS%@z @cAl1g9Rda=)BGGGi`xw6BN#OTz}#&FIS'>F0q7āYeNAH>qZ vYtq1Ahˌ``vs6VwO֝:o:D%lxaDQ(+ƅtVA㣗 5oU]dN}LbJa0N fs2>a>/ͷs) xy¢s)X.;IG/h iGCa͢@B ;Dn}a rF͈,0QCG-Yݗ^J=@ q\o0[Dst ¹)vzq xRPQ*VlȴD{iXl&7L<@$Ru9$@]qϼnX| HLI<v|h0<t0DWKw BǯXyӥ G%g!SX=:[,j4r4^X 0(A߬G<_p-GI4eX( |ʲiP qPp F27oiǜm)@sG?xBEEN $l&j?1CN'hk\q${5zu1[ o@fi)#T{9Ij 0NhacIicۍ٧TIm=ٓTϯrؿIC{Jmn~1 :]of(A(ȁa+h&|._>6N W,!/A}`*.,N;ё [2U&ZDǢFsEC2BBl[\7ryM#Ò%& $Li@w֞2BnD2մJ5ðYLae^ zA&۳qˋ@p h#NOţƓpF(DA9Il9ۚn)60:!#2պq]ộޠ-Jk7eػ5a MWkr xɛ@>l[  fK6 K<xjI*wSx!yQ΋q k$J$.סP]+/]<8TM'm~Y;7pSNtMU!]K-\c砻j.gg>rtc>4s@Q0@ 0bZ5;6ibkphxkiSmEYspJ!͢uN>n<0rJA<8<`A[m8N<.>;L|ސ^2rh#&QGaE;HMtUƱIS'n]bݜ BbJ͒'`\Qt.&ާ=o`i=%ˎ3+Qygj|~uFI@%wdRߌ]y ]u9{Jkz^Vp1aE?! F0;مFos Qv8nfM ^ [R"$J!c!%b@@Axފ/^Q%F5V6s1:$4ՂZAF5щ.ߧkñ9y.;Jh5Њ!27EĨ5 )!a~#C[6}|\"qIPp$)b{ lgF&舍, eQ|yZ9;:%ǩ5/8p~."Yx5_qB~ڕ.7C4c6$R PQ9ą-P|8L[V.`1x;&C"CAD( ^ՒA2E3)|6̻Y{֜إlAMf=+x6tfMd q7Y6K>P2%TDb!h4"̰E6PJ' p5F&2q[h$GEPX][c87+m9^m6c9ѹ$PZڕ<E /?99o]?; d"1Ńp_aSB)caV P<5iI n-V:gvSםwXW6ھph6ss};! kènhGhj:3NM(XH ࣲiד c|bR!jx.m۫<\5]#1A):_#4tOh@shs)ƆT Ƥ*Lwy,P*" 6M @&YARh6jk$1z ӛd IâuTA('kY$ \=.*2M%(gJO\|ȎBk4;9ͮ@<" 1q|VWPa9]=A~q!ow|roaiF^=GwepDf Z(8\R='"qǭk|d(<7񐖸<=o}Q0PvN-[ RpR :/?RQ(6vŮѫ6T5v }3 6L\ 8bk*11m Ѵ]a#$V{1hsyp Q<\0+&t]QQ[@&y Z\wޛ-p0;H#KO}yĽwz>3kc_X8Bxkuߛ5{*GstWg@! xs,N54o_ ]}apڏo57aV¬ 1)AT"H}8zMCc@ C1"rgChLBk[۾B2"f;+`2VBO07{WT7eD\L҃TZ( *f2E'^JB:aKYGM|;mFkfW_%dNθ*Sg:7>1%9y9~<`ItÖ]~y6<3)"ʝ⫒ bF'N5plGښg0ob)g\*"kÖBJ;6.2L@MXt>rs) #Ȩg1~㸚qUWOZR"oolj j~D:e,CA{ d)ut{|39@@og< )Q>'\emD(2f7VxT*1n3GC K'~VJpP8NmlE EwAqsݘDE1Hb (@0|Zj0)WwM'婶 y`}`D__8`ݝ4S]ts)_ؠ`aE*Muw+sBICCVoZtX۩&r'#U 4u4&􂎸jr`5 7bDm_cJh/̗ ]ᘻK)Qi$*MV ),;hzv_L[JFLX+vۤpؤj]?-EkS㘁:pZzgLz=hq"A @NJA@bɮ;N%Yg%A󈤁Q *=KFZ&?8 i]N` :ĭ~5CN~@§Ep"!1U$ݛAC!BҌ0R!&!x*".R|x4ip9 8ZG#U Mhw ^z)`µTLAJ(4'fvf(Fi./Jnmtg+f6;6Skx@i'#p &I180‚!9 lnq @ӿ>^R_Bnekbc.Syo&>YvӿX@qHh) A 5 {tp& ]y ObQG\rEAgdvGWA>I7WnJ$o>0SmJ.&. 6e9e]/S{Rʇ(OLI, @i.@E ]y/ߝw*uQI2[WmϮ,Y } _]K|V/=ٜIR'aZRAV85KmzA 1Bˆ@k҈U$н#Mŀh@~o,Pݿ|⠉*$0]q8%5 l=?oHt H5o7 vBˍ`—BV[1uaI Bl[PDx&z8TQnX2M?XZtF}5͙]!csm;+oxbdfYm@f.<@t j"x(Sp#ϞsP2.fh*[@-g,QX8MS}6LMNVL)pT%KXF}&IN6ޒxէWQxC;AO"9|0wVSzpWiؼh haR.z9谲3/mdz$8jW@حLr- mw?iAx?;l/1)sB.?;!^0W^2ni7Kr(i@@l$IhO<l8]e*b4l[p)פ`9!BvXAn|ꗋE@a:*wEftL rZe "2 Y&AK9z!l|(D!j@;QξJ{]%*{"Tyx80PCW"9X'7WHш#۔q2Jum ?] ]+儜j}(&8 kL}d:7Vҕ;sRzJ6T4DP2PhFfFk<'0چC ?9 QCY\gx2phZoi9D-kpd"7 ܼ=q"͇X-#άxuL]he|Db*e,'d&vADJ mCN 6>}'W ZE` @>)Ds٢T׆wdF ֔6h400OW#h55"t5]q ;MyM޾2hC uل׈Eۥrc݆kk7A GMRDдSXi&M87ƠWm&ׯh"۷-\|_x5>.8{ŨC8/j[<vnVwN'$FhU×`BWX82ռMp2 "}޲s&,vӄ}b0J-W~KWDpw9٭Q_dӚHP%r^xØӑ}bxZka$[FH0TkU(h;z"qUWׄQv`: #5+yc94V?libvips-8.15.1/test/test-suite/images/rotation/8.jpg000066400000000000000000001026471454007373500223420ustar00rootroot00000000000000JFIFExifMM*JR(iZHH021001004 ICC_PROFILE mntrRGB XYZ $acsp-)=ޯUxBʃ9 descDybXYZbTRC dmdd gXYZ hgTRC lumi |meas $bkpt rXYZ rTRC tech vued wtpt pcprt 7chad ,descsRGB IEC61966-2-1 black scaledXYZ $curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Kmdesc.IEC 61966-2-1 Default RGB Colour Space - sRGBXYZ bXYZ PmeasXYZ 3XYZ o8sig CRT desc-Reference Viewing Condition in IEC 61966-2-1XYZ -textCopyright International Color Consortium, 2009sf32 D&uC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((4 ?iF,-LEwjЉ_TjB2ͳSWg4wyA#JF13 Tt$sK| jWi^]V%QN1%gEFO]|@ۢ!7 fF R%AپjjRgoumth4՗\MA|j9ݪ@d˲*03IJ8-5~ʝ\_FZCcHp LM^59eBfp@TuAa'\דɓ157}U95Rcfi 0(vQ/- v3~615Vɨ9[} a* L@\4슱|Z}eԎZ%O݀apjy;`y93+Y'OA\VBb%1lI|d':=ogX v% c)F%Ze'n{9|oȸZoP*yq24571@ ufY8DE4EO L4m<,ԶZM[ 3̌,wx%jQ"@iujB)'+j\88>3݅c.gӈ=5 ]uȔae@D:PǠ V`kѯCLH*/y=t޷y$rJ!ql/v1$=O#gc,TVEvC$H%b$?L GN)WPHZ~!JyWy2Z#@@vu>E,O 13[3An}!@ܕj7LEFD]Plt7tl2k8&¶ \3 \1]jD*eZqq,ɺfmR:[/d8Zb {>ލ_rP=Y)YUKZrHmPQi(IMVXT\9Xm[t#b)+ [C#kV& \%K,s\aeI.@0@QU|}6FTjQǺ[ w1mõJ­;kYD&8-"_ֈ *qk s+ rغ9SQ\KO4b?G犹4![iV5ʣD#b*+TF=H'ȣU>AR{"'W*sV2PTMQ)bMd;2a~ \Zē"Ealc5Hʋa(bhyP@F5yx^Zt6AHԵM$0WXZuԮ;,ʊjϫl_O +eӎsIŸG)#ƾKe%UdtG&K+!L-SqV+2VO {qG(G`B T6ߎk4{%~Kri~Y.|TXJpi=/m=dҖK=('8'cVޫr21x`["kE[ouF?V3K=gkQz{q-3xF4 [7E3 pZڍ˚ziM (fw]ψm{ ZHjT]((W&+J Б3'CXGdtF|-야񁯐LQD7T+-E[PPŸzm-A(X?- 80PN)$.Nd7qFW`wvW 6Io5ˀ8MC> #A "_4̷ēl7wQ*uS.Z\װs $X8$N5f[CowOP 1Xޓ1T@!_DZfTnig4պ:۠:(_CN}}XUkQkډ\lCFp@I:T템(diL_6FaV Y}i})WSZUtEzk[~6 :" {rAҞb:4c0Xe_ՊuԚ>GL2Tk>EE,-tV@1CZp{3=%+eT>m-l>[>L0'jQ=SwDz)8zQ RCndOrҏo yz}sޟh+mlb({G8+*N 'ZvkdyN#2~9_>d|թpn2b(0*ԡ:-PSQ!{HY=GQ'v|郖 q/.8-Zjs j)D\FY%Gjr=Usi,F"=hLz-lV18mU޿̗ll 'D"_L_% !01A@a"qBQ?WWcc_\HN3~)[>mm :vQu\^ C76LGgoʶ7 \)%'J)hgWbDwhBy ǃOe4v D~GtĴvush^Guv~߽2'$Ydon+_*[>2O-Rb^ Fɟ-OJ?p^8)Z#wRCbgz30JA&T>og D!b_JydU"Z  Vt#ض1|sd+"Jʪ_hN3Vf)µNtYE(K&0xŠn͊WJ,/ЬWsgu_MgJO NI|*Tٮ Hc.!1 A"Qa2q0B@Rb?ϢX0DbsqJ 7i٦gxG}vScŦc2YLjgi:8} 4Fbʼ QNYHivܝP#Q>"I,a Xηr~u}/ mG$v$?.ɩBVG_C 8.6qM෦!)G٥],o" |/4,`yI1BL_93h8;&N4Lӹ%jhr=K2ľȗ4HmHqo*R+#mm<ɵgOdjrJԸj9]#NzGEW2BoCCce}'oي}gyog]6 NEjHGd2[V~{gfE&t,vWьVdrRDddTMI_F.+ۋwC+ir Xcwtyoh[D{n^XGQ%N)wEoˬ2PN,#M׍mG' 9,ƒCVA}{ڲ.U)[NW&KOjqοg%sQBT4z J1PIJx qƭHe{"/-5$\ve)IY;x4oir8p?*qSFn8$(h;YkJQ-;T-!hɵ4 D9Eϴ֪@vcj.F6-3¤GT9Wwخ4H]j|=`O^٧D& /~6AWJ/H~h9~h /[CD] ABnU&TΜ=4Hߺ_^=/2mrl,'x4Z/ w<~ifl'aS)20}XX~&i6&8OV\o5SzqWňmzq<0fmmi0)Trʒ7|.lve.쉟QAW1Gj&a?$UGK@0%n[~6~jA;總FSuam1/vMI.s/vMJ;(je5ͻQw6EԛU8 oeYUv]Ђ!"xL LÅjw7Cz}D_ELk ҢEv.O ;>nLJik`Z t*TP-EB5BeZ7߇ZuuKlU*h7+w9BT% є'xR'sE1d0*I'⵹8u l?q0 1bshzqzC&$0Pmf䪊eU ZuNX)FQuMT]M}JZv\[pg;pȸa5Kftg'(;BwtF^b#7MBfX/䠗UkY0#2y,ԪEGoO^IM̯J_YDo6p'65XLf'e>p0hctCI&0P y3@ɍ9݌sKI|smyO>#8"7jtz.g% EׅLV)s)Ia ~YlP.‘g z)gPh5d7΂&\W8M(ĖwrLOsR*ito#܏[S,ű;t(Dd<^e1{hU3Jv ~>._&4xE8{e'['%a/]Φi7L72 +|`=lVp3N-fMCok? XpKsT3zCrU9MpN' ¡\ς{id- Eӧ m(eFǺ9*W+Ђ gDIs 7@ײQtN.7~v:[6$QtQN6 8ׅ@Wڔ@*#Ʃ>hN23^6Y]͉& 6%Ԣe>'#,D~˔GtM4/(E[^m/d}HDmŠ~Ē~|aV6T$I)yBG9.n_M~HML!e'ƍ`c Q@N; er]R^N0lx_4=SlOPEOs5rwX9 wOtDXe'RwӁADX;R7a䟉 :QNO6p=Uׁi@ĵu`~~c4j?FC3寲z.–껙 (N'wxڃtk't F(z8#];b~=N~Z"c⨠wFEűTtYCvs\R3Q`) p<[)w]; 0$x(+^'TeV꤫#>P t"YR&eq_L' LkD2-um.8X--wD{7'U^1ӈOoŒڮj_X5~!> |/@ip>H(fX} 'NcRtIT!CeX`Cf!7o.XW1u6! FSO_hq}ZqTp1M%ڸjU5BE ,VQ Z^#KhuEf:NMA'4uF5'!1AQaq ?!ͪO| PܠX,.32hƫ3mW473 kM,? E6*@ur! P[ދL2SR`f|:LڸT=/YwV*8%qFUơR9d%vqnse.+,okV})0s\{0Ue{BMjG!A/6_:^my+:%uErĴo3,B2LGa;V[*--v7\ejV~aryRӑ.f쁥o9l1zKgҭwlsVQq)/<MF=/kiqYnmq9:HI:Qs/ÌWg=VKbӰxWbjWV3. GFfBƔjY@XZFODd5WHUWit)LXf]Lj^Uܦ+Z8=gdkA%+TBʸ6ojR joRz+`TqY⵳KXJMHk+.ߏbϋtۘ$_[  "c k)/@ Q:kHBStĪG5xg0BaQBs9-qYmM7PPh[DW4Pö50@縝eEE-;a04( /]rkaV~KgR9FH^~zSXawKQ\AmT/>%(Q=̀oI4gsA`A0p~Ц l7čpv295ܹ2WOskvEn`\> =#]Z}-y1pCtX ' BA,fgmB4ю](Lwb`,e̡-B@{JZ n*S <@qw)}ڶ"/.4ZX8-Mכ4V Bbh0,ѹs)ЬYv_YCf9^W ~\FkiThd*Pmæyʙ./(x`9u|\Ծ8.#^s;AV*. tf1< 4jf b|@+pߨ q.9oksS3, P5Wnv9d!12>yxYښa_4uoMA*9Lc&Vˀ9ڥBˁjNPMM&VʫTQQVw|LgU}CAn1\7hgRdIZtuXçZ_[V_u1eevkw1p?M:|\MƉU}`J*OsȚjpԳf&gVYanhqxQ8lWqⰏdPNH1hX6KRd?A&6 %Enm]b:-o^T٢Dt-j"2jΫ#(ٖ+_i.6qxg8Tln.ȊKmq le o"ŋJtq۸j+Z2 w+!&@uk`lw;P!]L8uޡU8[5!߃ϔ0[?f^8uԆ=t63;xv\;XVٟs%]-ƟCNt]cC &>wBlX'{VaR K,괽xEܧ贡BkFw+a<YLGMw.m8 1H<Ѩ(U_.xZ1y_pd aub<&t'-BJ Kſ(nNw#4EjP*(W/=2s/wz"OGU>)gl Zvm8'rlJT Wu|q ƚA]e;("]Uk%AMs "lErPWZ\x~2M6;Teoi&ȳ.p PJ*@~n$OQ"zf԰qfTg Y;Ae Iz!)/Z,L5h,v;k&ۜw OKq&c@mtyU#ңRr{X<r7p+c=\-@jS_'+]ll[e0=q'tQ+DPFDD~H']3ԱD}7.g{NG6/F%{](eQ:TiJ rj/DlQKz,R! q݂C`b7.gl%l9#<?ImRw,64xS2QnUR1Ɠl;W<It*{nT2 ~2Yf]wh(]7Ž{n\Knq*Ӻ`Wt΃@e b ᣧ*0dbk]׺ۘq=_EqX{~a} -DW1W#DM߹yL _1%~f ܥfNe_l| %zVT`A{Z4a.Q2ſM73Nc,xqك:* S]֣Q44ko^P%.4M{rqkXc+;)+JXz&] -@6~vF~V]5޿bAJʇwa|9U̥( x YY\u E[ T:֮0rh`c ӁVIs e=F% -{r$\0px1}\K)[ 6{mܢ,ϸk %<.F⥗߻|6Hf8R̮[}n. 36Rx>e!q@km%A?)㘜G|A,LTfu^9jixi3|D$^ne/mVD#p(wK tc;%}&r+ekj *KKxԢ 6kUj]@xJ[{K`1klR8XI~b p{m)EMm9e֥m7ԟqJ?P/A9&ԻAD5($kUa-n2Tˣ|2U"?.b,yR5 !rzK_dDr x^C\^0-9W`޿Qm䊨-2zbW , ._[pFE_7w؜Auı+MWȯqg7`yWKPKVYء(q-1{cjދX*_,\늏ZbZ)Rc3o3<'V󀖉.32v<(w* qԪ|@M(o_E.`󅵢fr;AsdЎ`d(FzLy^zWPYk>X kT hj-aS^eAFZ1yl363,IUnX`8(pFww1̄lj9G) p2[\Dfux{|:=Xe ! 1U d6%n}+̹4 mW0k$|L 9ؑa eTˀ%͸] wN9XeRӒx㙉nZ#n9/(N,g0(vZ_Z Ҕ_Ga]`x6㙸g4ţN\2 ;%+z^('{ mLqܕsc qjj[VW;?Ъpg9,݊6z;;*j~ +>uA+SEfUܱ;} ,84X͚Pgt-s;5ga]_5 1(x56;oJ_ 1Bڢq /P.Q"[A6ۀQpFkl$oACE N~!o/[q,yC_pTչcԹʎ,ש;Kmnqt] 4 `&x:-T[7tiQ1X(8gZh*%»q(qҡmC/MCrwZc̰<8Z0s+[_?ddDݹUnKv[SeE9fAZC{h@KwR[[@X ,׏ E9gR)AD[Mxa#Xc,4YR6zI0\|™o.L1@>_o}E/Ŋط<\EU&4x1^%6q-mR 7 +Hɧu2 :J ޥHzo]Pbpӥ6t6A)fc=ix. Qm E[j\W`Ii\onvrl p,W1u*\T `Mqu&HPGh/BҶ2  B%[Fk7;?E7U~3iQ-hxDOH*(y9rDt^Ưl_M4ij6A A]Co/JLCejP89+rUr7? `+)(o "8 '" ?j/'kq<>B8J&hkub=2;B^v qREJ'tyT2t DNGhzN%O=ja':6aFR@c,ϫ_RPdrܒ4ZTb]<")`?-*_Ưр^p)sgjtЃI#%b\RI"hsG[$ Ϳƈ*qGdAP#t7ntXTQ4Oh T@*c>PeJ DꍰON.lKO4(8OklUs!GɴiWaoJ/M[6Wr<קM@Sde(HHt(!1AQa q0?lD??rK9=)Gx$?bTZ= Hnčx?nNy5IGȒ*qӺKAj4L6+v\'ĪYJ4++g$^r"" x|iкkEM݈YysLR ׇCLXR2nrÌqg#'],#Lhq/p1<4%*l\C> NDwMѩf> 7t"O=#o9/y Q>ȩo|~#!hI27#OD|tw&Ue'cmiH})"hC5|9؞$Q'+ Rg<@58} YH"fL4Nʭ>`T|sz5ȯ< Uq1UHehG* 6248ňjz7%:*4z:8(!BLhUɌ}"b. r(9XT4 PQ觭K&Rf1<{$PF&eUGW|L'NZ) X\P6Te_":&b~Ri>>⍋0]BH%ら?_j LN|%?|B D؈4U|$Gy(=Q F3m{0iV'|Q_,($(J/A6ߏˢ,K8Fu&x^o'd&!NpC5 <<|88 < 9 oGDW ky]42h\"PT Ish94!N Y=tmsx6u&fE \O*OD"^)ph(I"e. &Aȵ5sm%\4 H7(5 7 JFW|7PjkH lMtQi>N}/$KZ Vr183R6pǧGED M%#I%៣bX1x.-G|:ZsX6O FY.Bz&3 | ϊ5LX.O 1/mZº*HsNEe*`8`NM52 6\{o'~v4&ncyLV:pS*K'>7,/`+F)4<($CFOF%W(n_;(|bM1%8EPtDӺh1/Cң4Ҍ 5J".h"Z?7 :K YѫȜ®F谢sDA,g!5ÑKioB&x~.0 0J(΅$XuGCVhV Q$9*i~7^ pœ6DJkba 6}Aܧ=X$ٰXMn4e"Bj\Tb/7'!1AQaq ?g0>佲_˅+(8_3:KbSqw[9.uホ N^A L{Lx3_X~btUcb?=rA~~Q.rIN_. F 8zwΣ=:yNzc{XP _7nW0lV\6=*., a( YC ‚P/.=\ҠFd8~gIdD!u4Q,z R1P\}-;WٷҿP*Fc+!۩߿JD+3Fs;9ލ.%F/zf ,x;&-ww֤KRVڟ/lě2>jckQ߬ w>qs3.b6/ Q㿴CΟHkkqe>ZJ+5!hoQB]?8|s.^ӭKdQ];6L(\@7Wǜms"W=+Ȍg(V]WϞZ5_9BѨ GxZ|g5 ne@uWXzZvu1RT1O(,i{,6¹yuk(̺65( w4 _)[% e293 t&w͗?:JGd\q|:YW2BZ~D(9/ ~wxC^ՙ)(vtӀya-Bb\P, EE.% UĦ%Q?V]+ÚHM&X+}%W$/H#Yj )< 7ŵu?XZ`w:h.ݟ5 Tt+rAX]2@f!Ԧ+BY)qv8s3PC-]BלYQ}9g H+!zQ_LD6* Yl>U99_YVi0ZKQ4A][XMөiZ<Ҡ3ĩj56@Ye F?mJ`dz?7laՎt.Ciz;}.\5|w 1[`1* ",,™q}aTC5go% Ak2R=ae=8ǀZwߥc= zxs9襕r;~PJ'48|w g_\Qu1(ĬD8J L ;nLJ*cE*)ϊLWq(G$q5ZQ (=yx_n}Uoe#tAχ_xx(`8w*LoQ] `f1|% r"b."RW;îD׬)\>1hub*W8s aA4"q/Y"qP}e`5 f x牬' VKϤ0mot ;͒wRϿzy\.s*zթW+ #1^:AḦ́xzd-B^Eny d_$.ONEKy*aGPw}t5p| id'G,E5e 3!@D?|kMxsq~^rYIbq)J?!DžH*q/W/IFYDq7<)U%Eˤ2)u2_\AH6"{u +qk8o"T}OC4Lx03C&O 1b2  Vؗ\44nRWH9ű fPS\חh8OoG=A; `cȃo*!12͑rJs`(w4p.7,hܿw՟sa+xsEt8 POQ7{iRۢA@(96 \/Y-@ ԠX}Ov,яs_nސڶCF% N: U1zFѻvyK]Fbfp<ԼWKH=T)9e%F"&_N2b8a=|4[u o?4Mu BֈN}%,ԀUӯ7 ipJh3Yo*_)s;Mf4f_("RF  Vj@[f!8\Fv#V;c`B+xioNUn4;8mܡ(؜F* iɸSʛ Wur$!kss'$C1gu kGyKspgqdm2ԩu,#WҡqkP:1":fGrw4\3^ij| Ae@=ߗ/Y/oQ6Xb8̵RLs/Â-9PGuc7.ڗ0Pvuz؛>4 }*Ɇ=g9"Ƌqr1.nDbji:|d6B Rg ͽEX̠.&J=0+jbpghba/I-˹b_%dZ1Q[,"x.`ĻNQ[L5. F(\EE\t(c Doa~]qiLf8mffFlp,A]-DnqkRɃ,jFF{!eַ*Nxgz]NCw1*c?>T@"jay+vpPaIXɽ}#!fϴ.g'V\eXHۘ XHFF!ef]QϚؕ?'!1AQaq ?y O"ڢQkxZeDGh4]_0d`!k:J삦8\.44ܘ@P /* oC>0]ͫuTg!* д돌8%CAܤ4y1wgjvg/Zi\]۶WDI @B@4ok mA}ajJ4H|7R5ئ̣w؄Xl5…kXCUTWmdmY PFoBV<{1蚮ҡƳ6rx oxRHXL ?.q;:;`ѭ .*7A J kO )#& &RsIDp82 @0kn4Hr*/ҧx*o1T.Tۮ\]T#6;],5'L(VP~&]I.o[h|N(DQŲ{9|d/ xK*E' D(8I>72݄Gq`tdߗ^:7woIGYE kFBoc\& Ă.AnH:8G+y%E l}x.o JFmMmZQ := i4J h+UJ IR8LsU cc-'TZ7H=`!^W60'{}s"N*%Rb`R+ 8-܃T,Ԧ`1xFd\qY,.4pXo9!ڤwL\-ε$܍Z |6:\]θ0REIӋ!(L /" - ~nHm"eGEq4<<4E7PI \0Go)]&HS9)?))#:Dw2@Ђ:޿2O4\*"=J"*Fۍ:X6=D\\ FQM[WM_#!;=ccn2W-G M\ESC|~"hx=q5 w_K}èh9QO!JWnw");%1az1c{@B}l,Kҙ~k^x>}!#cAkx&uF8݅M"jYMb]d11hAf Aȏ"kPu5EKwrx`MQACØ1 `6Ӑ5㥐zrtXHl Rd@S~؄' -G*W P+xtBt=(MP\Ӓ!/~re29tU%rE(EBGؼL~edͿ3^& b6h6F5kĐM% #9& DA8bD ix~uHCr#/h y~'@PxkD8cӁᄠwdSRzRv8/8JhM9 /IɬZ).\e!QqENbU;w A_ N h[qCXVs÷CgǒtGgP5gX AMOOV(CFX yr:NțUv3\4?IJ\\Ha  )j *h糢Nph]pBJ9&צs P4IߦGWdHZ֒ C4w0IE)asuxֲ U ]HM5Hvb]j9G~3=/xeM_#Bӯ^e$Gيg/3zK% +Vd)2Tammȉ>xw, /LԒߝ oJ,ޡ!VɆiÎrQVSP^q ߏ{Jyfh[)h ;/C j`S #$öJH#C9/QH-8(0 D pG{ۢA# q0~l"o wMeG kW  <ߜ+7"ZO|Ng@@txN2'sJf-o`TrLx(B#6')\‘FV`d hI*M_8^|S9r睟nEXGYH*RS?xch{`6NnkG#@ Q|x7,BCWHoGM/ ojU_U(}׼@[ƻHUloDsN*^J`-wLڙ݆þAA%kS _Y70i@mjI-c &Jc[[ϯ0SWP؂&'J gp4ĊwLTS[Y9%lP4.\v:ʳ J {Jl/hN":0L=x# ~2~@8DUkCGCw0a wYJQj" (:8$MUEB(ʮXB^^?Bq$SkIw:p`mӨ;p[V$xt\ZPؼ&R9_rU'! 82_K /YنƈpdKp%WT|m6\V؊2~ i>ƔG6Maw3Yw"o{oxnU\; CS(E-) ҡ$" 5qpD8fBAakF"VNp=`N1qbuzGKi]}5AFP۴~1NӬ"PW)T<8`!ڜP:ӟE<9+>QC8*s)xc8Cy-rjB&j"l }~nI壕*#}ɑhAkI:>& -Y-zȐJ-*Ow REļZvSѢ!Zy%8Pzbr8)ZP2+u[xHe@M׍ ^WjWT5;Ȥ6*)c)mBG<tؒG_x7k M,' ّ8o["'SCkj@~" &/(&KvN ]u [J4JBMW60:8GfzsMA"g,Em DM7xuho7^5K a}M >ƃ\eS٣N5 BEo."g@%=ZR8g#߸&R4 uQ[7lR0:7N8N-cEyxRRϽdMZ@_9ZQlTpSeJz{*;)ʒGANSqYcS-@&f=`Q2ȨHwZh); LK M\kh;cI㧁+&T`JF&Ց7dpiV׷ Uclq -9^ӁP5yyԯg .77pk$0"KMcR^eEjoz㮈tȜye,ɣ tzNLE ?rCP]x9ޮ!P;RHY'bwT L1J:YpHR-`&.KQmp).ݙնXRAK:+A jPqL0R8ZM޳["}PIa_$JZIgK"Y]Buɿ*|h~f^k޹!˺uL>r ק]hW5YNl+h3p*@TyRfi *hya:ADlĶh!tbEXUּ>0M^8Z rNٳ.C5l[?[e*DGyE*+5NH^#rphRhh`:M<;g7G$POWxˠ7`X9N<T@G:I{;bj_Tv y./ۘKjyE#u 1ۅho7_f2l<бy1YG '@Ti_۾ō3`EuNz'Q y \'j^v7𿜙Qӳ]o6GaTD&w5޾Av\׈BW>#{ct;G~ɨuPӀ v7!Cc@k&o}kE)Αs=; P'n@yvj:(m~2Oe._EO. UG-yhNc^[q$J4'|J[H0pm.?*" *ɾpQ6k7Ì A@.Ъ(SwDiw2Vq1As0[\vw8儅G hгt5;|9B HXBCINd0ΨL+DFA@Xdh~q {;3Q`g8]{BЋ6>Rk&Q{Xʐ#]RU^;/ ;9Eihbm7㳾\fx8uϻR!atqhu # Aɪޢ^Azr BBࢽ|菤*e!o=8;_A5vo3 ܆\1Bv-՝\PɸOX5MQg߁FOgkGfT˾ [:KBVna㹊j֍(Wd2p'hi|D=&_r^AJL '4;t(sOp*J$&3BA5V*}\TSA٭Ld2^$uZT4$A/%^E x@dFI9@mŒ?9ݩ.]/H!h8vPobyXm D8 lMւνbYHߌt@tL7)pU.hqۊDhR9z{є 6eR93ZuÉ0B !z|M K-B\(J vt۬D $ ָNc1F)z'Egѽ) FϸFFlt[&S/bw_{ uɸ\?C{VJD6AGq^qѲH` ZqB#t عZh1/X"!ֲ8 ыo%Z3 8[&VIuWԊGô+oΓqgn+@Myǡm`tg p BpQry5rRP*+2l8libvips-8.15.1/test/test-suite/images/sRGB.icm000066400000000000000000000154121454007373500211120ustar00rootroot00000000000000 lcms0mntrRGB XYZ  acspMSFTlcms-lcms dmndjdeschdmddhwtptPrXYZdbXYZxgXYZrTRC gTRC  bTRC chrm$cprt!desclcms generated descsRGBdescsRGBXYZ =XYZ o8XYZ $XYZ bcurv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Kmcurv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Kmcurv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)KmchrmT{L&f\textno copyright, use freely libvips-8.15.1/test/test-suite/images/sample-xyb.jpg000066400000000000000000001653311454007373500224140ustar00rootroot00000000000000AdobedICC_PROFILEtjxl @scnrRGB XYZ  acspAPPL-jxl +좼desc,cprt$wtptchad$,A2B0P$mluc enUSXYB_Permluc enUSCC0XYZ -sf32 @*mAB  P paraparapara py6y py6ypara#para para[V3OTC     "RGB V !1A"#3QCaq$2Sc%4BRs 5DbTU'EVder RGB?`;6_P0?O)cÖ\O6 [wh_/[Rɢ c!~cFNNbGgh5Zp8ϡG@ʒ6[ÌvA, nKڧ_Jow"UycV]DzZ8Ԡ֐au?Ec&Itrc@D38|Yv)+7)!D냬kI"3jj\HQ{*s㌊-1! 7a^}PVotԐ7M5N>,%@3]B-(8+Íw#J2@YGjOQ9D$r_ǘ]`+*RԷ)*LR1PLZͳEO DXW6΃na)k_!zsI}F]y5ΘɂiL ?4:so9GuG&NtkdFV}.Sl|eNOϤEW̶ǵ;CcldoL(hs (왻bwLgYBSq Q")mDUSUiӖRz̀zAe#Ee۹۔E(yƽ`Ra:f* jys=j3jʚQNMv1 ־n^vj6لKF=ĬY#Xq>⌲Vj{ ?&#ttsM5$[,%d%'=NczhzDFJK[ήE8ay P/HRUp<4(ܦwQZk"!\h+oH" p/ fhזUx>d~i&0fO Xbfhq*j J/XLf"@42 ݫ]ٓ8:xdBRHvT]|8[1:AodtnPCw\F6ܡ9`jn;_ۖ q't563(Dn)NjiIcnb*VVq]\΢o8IHQ,{ؠUV98xPMM]cᤱzj LL7Nv%6qHdq2~w}떋^IEh!%yޔLG1APojPi[p.2+# OFg#8hv}f-꯼C~_ T5#uαQumdtx=sDGc{AM7y_J36yr)x6YQ4HDGw"*QPLǦ~O!\ۼ=1ˤWvx\l)Ia-xQ*|*O39. uDMMF v~쿤IL-ySk4j1o.BH-]"x}`wD\Ư{x]VE?Q/cA99TIRyH+ćNW[:GFE6I侐ƥ:)=(TLĘ9muvZ9]fɧ" zFpaA 0}괴:ŢʗζB1T=SmEw[MJUUFiIT>$8 0zv6vN8NT;򜞰t`i[XA賕06k (rJ9EdH VjvHhŁ%;d A N"h$K]zu8JCg?ӄx?r.=!c7kt]UC 4N|JdD-&X*NDb]DEd4g(-SإTojAPB25Jp9W=x^cԤZG/*k184a Q 6R|)K X3!M"Mi \8p5Jj #; G$Vi.PQ}ZAjȔ8ɿCWg0'wbvˎfg|^T*R0b&ljdjWe7 h"g7ˬ:Gj4*˷I  `44H4-_y>,j2_HWLt`9mٵ&^)$4Fޝ)5Gh?y':˓w6ymOe7]N#a e"b4(*K"l9ѯKT<)(y=܍N睚QFerTPBS&g ps#\Oyj)&C&A&8SfT+)Dq+\Xܦ&`m6ef]r37H*Sf%JG=L[+0Ϳ%vu?YeWxňW&ɗ]1HM'f\ . eQE ɔy 9D-nY[beZخROR]ё@wq*n+fc#tpTPq8I&42~>g:.X Tiȧ3 : |>ygA֥ tN_n,== a21ΑNv'o3)t_ņ8 RH\?*igib"ej|Z[*НBsYU{f' p"FsE^44Nbz0<^Wuujyg&#'QVEWi&#XGs XU_*qz-j9wKҍʒ(8pLACm.yr=lfB_q饖Yq^cM@%2%" y8r3e` "l٪ZLj.$aI$nGi09YOp&RY i7 um7mebr9CK>#M5ET/)kg6ruds<H7ބs+NȲ3v dx*q9Hۜ'p8s?sxҎ4;çXEjSuw=fPn†q$܏SV~wפsŠzܬ0{MI*("pecz2:]մTyN־n!g#*&'_ M5h%1JdF]͝Ѭ#pv)}qM4?jתa:þ6,Gs*zR]N7LQzMLwtAjM@y~-ǩ5ALjLDdwpu$c &:MYSAXUqPQsL>pbse"9C&i rˆJ(t-} &p*ݾ(ӗ|@Αw8SS`WuN$QeU*pB:Y@~q12ԩMK"(fLA\6z)57.en7{DQGI`)JmO"V659zuk&ӿ o:#=sCBj.5#Istx@Lzt,r}-#d0dQe}Uq5RU8_*<LF$ogfN1~lLLzG#.Q=DnLyr CdLC*ATI2Ӊ)h/j`c@%ۜ:#t~Sڊ6F:_7k&wwLzIXǩ"#$q`9c4|7K+☂(eU@?tHu0MYu!Eu0/lk6wt6n ʞ42kǽ$dXwBQtCR7r?JTeHٚWrWvn y E,cӅD<&a-j6UJO+L Buoe62pr*0 pgm8E]f0+*)^e&GS~/T=0%:B+ǖn\=;&uEYx򆺨9M68UqP #ep(d%91 tw7h4d98'#kW=ȏd #?hYT-^-<ّ-T { ;{bUd!-]NMɵ>%@Q_4qӯ6&P+/ؗ5yinJMUYID=cq0REj̖I^:eP|(^(=DtCEQ;Ư/T`;ujv Vka+~{M|&m5;֨6U)JS] $~|U*HxőH]o3z]XFLdM^Qԡ$Q#d^#]e&͕Z)P4 MXӮAJAu;LF)8f|0ѥU1IʴY8<*.'$=s6Zm2L7x*ˍ2="@MIdh ƭ::L]JkOuf2{eϞ9'=}`z7}9+mnPe‰b3 bH2DM~֨E)$xiQBzsdra][h5A]v?IțfF2a 2VũS3i%> #2q0bZr仙NZȩX9 .y4OQ-9nOI+ 6#r]3|ml5h ʍ'UdQ@V_lK}I _5(A(3NtA_JJ*l'ŋ<:(_/"_h#Z*ΊDSG3q<0H"\k%O9$,3ǔg$C8?8Ze:Q?HRzEiuF&2LDŽnwzYA 'b@Q@6x:'%pub Sm%P2*UE46'!lgצ68GI<.d+:n&yrosLqIpԝF1$LܣxܪГ>*NOV0s!ޖ}(܁V?B] T<59IP$IiVA%[.$D0LܺQhM%ѩ.&-59g{ 5Y{mGpx[oSiMP|UwOhYof*WQd1SokY}=E%iQx.A1B:SݬpTStg]ވ<^p`|6rWp)"Z|c~"pcf< +>n08AM]veʉxNFmtR\҃Y~lq fE@Rzb3}GˈfFiħ ǠK:pWu *ug{$^<,ݤ~Nk >U:R<H$'j-*,8𷇙=PxӜ" G3R"tZ6uRg$QL|)bcO:ۭVq_[[*W`$Oeo}!2vYuÅ|dP#Ƶ܋mmEwIDhϘWxl-60a+jݩY>ҁT^~HJ<8eW{2cH"/ģQ%zޙT`Լ$HxB9S/J!3.TFiFeX_1h-q4vheļQ$:"8v昐d?\D,y~p}~ue)4(ʮx A4Ļ{k};@Ϙ[(QT|d-e-EIι1p1KjRWSmP(K9J QġBGL'+4/;Fef#ftڟ`>,"T3'1n=*[7Wǩ+4"d"YVN:-C*iOQ+yeH 4#1P?5Ee#'RI =I%|9&98[sҷ#IED4s1 8;vZŻsga 'BuI .k%zl5F$%s_\BgQ#1 JgLHyQ;y t\X.yAzu $n~F{M$BůeՇ>|r#}9NI X<(RMz_2a")oI(*p;X0j4|W*0E4QyE'KH6yDu6t CfMQφ> +% a]wF;:TiIQv $ L ?EbPڙpJcJ=bjD3!#aͳpSܔy`/kx$ x$c[jf[95 o' "SĚr!]V;?h6rҥ +M.鸞0ߜW6@>=s?l#r8fb9u(%yUpZ56>(<(N"h\4_.E% 2rO>Q +j7lmfTE, )Rno5t,K1wU}UC ; I:»h6+׎-w Ч?_IcG4dC >?x ϧ⭲J~dWV /*CvUUؔqI\ăS:NkJR6ΖJEO |v v~auBp.c*ݛ1(M}nYͦj޳-2g!ƃmUK :>jU%2[~(uEyF:͙`3U)HTj*%V*8)>QCcPK^ھ֨4{۫qOU@RNL0 tQhi|r9DŁLҁTCJ-NfdsMOm$Btΰ s7-)u{?j.nW@bs4 tfā>q.GCw^4Yi$2%2uH#Ju gI{@{RE6RSb .Fcvu$\&Ƀd8I#L}̒OEpeI<.W}h<<\C:U2f~Pt΁:#F͜)nTx}$:Kә4[fMoǶ$$n|TCjSKn';`.qZ*ezS\T5YГ)&zb8iy¦.f3ViSnRNH&fK//tFҌK rDE _i_cD*tiTNfU't'XVjjWT)۰ׁ [=IudDF79?mnǰ*'G̓=4ú|Qo[f\w8ӥ<Ik)kjoULI *'M+LbNc.R=tz E #bnW 0pq9nՖwJ|!ˬn M5*_Hח"rԩ&S.5z3f!Ff jVp$y234%~Dgmmա)<5BPqKj59q,/li&wJ VMS]嘭^˶JFe?|cXѥ2Luڎljv\IMYB⬶"%ӛ:gpKR(tʂջ *nhSN]wt:DxޛOXVζ{*Ӕpy&:20Պ1Ђacd{#8zZ3fac(D.CdNTkKAJI+&8qYH.,*a2 .7lφ NC4cXZ*4u)Uw)(&Yʤx|ᦘP.k^qj#8f&%`8=D( yVS=BHrxJSU @z0} $,kʽ{\H񐩢QljӨ7D܎9F@9CP[UV |)Q i6CwPvebV(Y4`2sQt<4G~l">:V%*T\q Rؓ&9VYr}UNTh?%KߟH^igX rtzʚUi"@"|GXQ%Ĭʊ¼Xq8 ʦXVj =i SB'f9^nOv=NOp5YywF?8)Uu^ڋæQ^MQ.1eg!MPi+O-ƪsS?&Zpwr]2"D Y1bo@P4gm(b1\#ZcS d]*I!UA,))' f8}mK-u(6V*4iTe%RC(<8ndGNv{TU+7n8NA-$}q4SZN S HL?!$ )9pwω?hсf;=m 5%zR)k5UFiVLFk7I;9ϨWwJ{Gpt(sW^0q:jJc{:rk]Z@qǡr*!Fwqh?AAŠ[_` 1^ѯ>`k أ"OH$g%>ԫ,ǎQ&n4N pL)/ϽT.;jѝVܧGG *M>xڛہZu%!ݾ לHum槤B g8 {L]& <+ p#YUZ>\j]n"Q-cet ݝ)DdbjX4}lij~WᇈOli8JvLXhʖZ&9ܬYVn<5bRA);Q }&C k= v+^q":~g=bAf{A7Jm7 񻎐ּ 7%'d<"B:/eh[Kl bdRtN8ȁrwsll䷝[BJrHi%,AH>:UCjF6=ݯU40$L5QU2yts7|%#;%:U:Yg6DlHCԍG8S9&s ]!NDBc."RܨM'eѶRޔ]%Ց(KNF#z^wT-lΟTa4(yV<3cX-#]/RRnqVYa 6z3((-ˉ@pLô? Se]yXTM)7RZ7kQ98G-6w3U!53|Kٽ_|Yq*:M!,b!?#F8[ϛ9J4αDfUpߞbʓ1A,y)2"HާѪW F?( *Y#&$4pxy¹\vux_ƌc:c5''061 <(2L>˫bO(󄴋5<,sJB&#QJgK؏oZZ8IT)(ڰIa:.}w DiGM{ry7L9bNM1U lb☙]_lZbSo2{Yt#J*rwDqr{暒4kg- y)9;r*q!ɅKZC^U*۶[<.g.%NPq\dH)'ju-w5,,Kgpc.$G̾[i24T* { z"u:"rG"X aypF($ &9uИFuz\g1tW3J >G)8I# 8YSŌG(iHLN8dI-w$nӭ[j 6dNIvs,p=`CP%9ǤlϔzMq܃-wQęxXX{Ԃ`g"YݙId1Ie95bLC67VA #T}*y砇lʄxej^-n+ժN;EދQcֻmqAMVŐ74y̳NztҍPG>bdMUHG8 4]bL鴶KNV 4 rXԉg=ӑ闝GiC*ch&2N;ܾp&A?QiV=V7r),:<ǫ.{ndҢլQh~qᬌ0TQ0!Es}ziY=,bkӜӐ~'Hi1θ²EejoU%IZZ_S0&THXK:ZѸ*[N $&7ۭ<1q rh/HM0?{6޸(VW(xJm6riX"[at'qaE& r%4g3MjDw9./f{_*޻ +UafNxi6=M48L+̍*N^NP Jt dAODrGkw"\1a}>eqXեjiUk?}8]F$XҶp V`yk&v/;:7L Z&.WJ{%8gʈXqBJmvu2Us%)e7`;mqX]>"|cA׬/5myߗ# LqJML2= \%Ȇ 7 P7|EHNqX>!)a,UF+0u%b /2Jp4'{Xfl'o[-,A~fX8F'ƙan>QgIFE4Eo)х@H, }`+رxRuIQEB||)t"-@?!E;6QHvdVƋ 'Ӭ79F{^&Yԧ?GyPR8ݨ*@&cQݭ=tYRu( 8⦡V)5'2e%9F͆GmZT, $ҍP-vK5lO8’I(Gxbm_yK}XWw9*'RљfXJNlZtKD' veA_67ieI,75]uWoGP4{RREs7<8Ē&eTq½ۯqKFSUeYIF^c&"V6Ol qo[T}4FUg mivQS 1Ԙ5(hVdU_/2Sqlf'􆢌 :;"FoEG-dE^Ձ'˽9hZtk璮b4Š'Μ'_*O{? m1XM~/:rs3clv̢i :T(RYT#7e(]>}E)E h̃OH*,! 7'TF`WQTޣ. 0Ƥ@H%Oύ]?8.6uQVQ Ma {a%at,gqd|FA}#xiGNB W&h8 GH a ^݌"4S.O|8݋0z_C`CL s$p J5I980Z-OG&L6c7:Wμ,`V9*!_v`zF4[09DqW!4n˜91;r134 *{`\CE>ezHϋX:BL& *G/uq0I$8́^pp8EtY(痍*gjIG(vQ^}#~ѩ*c1y90Pt׬;_fS.2]Np80ϑzukzV2z;(KWd"owJX3m&GWyPJ6\jfqG-iUjzU JxDY L`1;߼8urS-pڣIxj;(sƜJqq^[)TH&e=[U20[iӹ3O0i$0f/(<+hij 53M]6WHRjx#:3۲f՚dlA83 796nѝ.JMHH":pgUj`^Aq3QpVKHB$Sf:gszՓAN3PevOJ`1CwJyoO1Ucw 4nf#zOzBٛe8fO"ƤK3 y;|sQqb$(b?6̽đ3LF=0\c"SM0 `i d q#yqaeWNQjز֝:mQ S󁊎x*'S 똭N-)U^@S>R_*(HU(KŘ f程}\cm7d$P#>yqlt1>wQqAH8Dx ֢2%1KL\") U6Ɖp,-fLjɇw@0aVݾ~@&tOH!ykG3J}MJb %d? |I0b(oUNψƐs%#V(LfViLC(T_K.AŲ^CaS7ϠbN.]x+C-kF&#X&̯0W*%/]#˃r9Žѯ;Hp',9A]ޜFЧ]fUD JP.}auuU:+*]d[}T|J1k\\ ~}- 9C R%%eK}#{!.(@\ŲZψ1-Fdq3''0: IG#WgH?wH넗h139:[9Xm՜$u</ξ4g**aͬs& fY8D7rMC3wI'v\C^m9hbaHƧz= *#jRPEN`!BʍZVnò} rL%=gqD nqO,t#|Cd/ ~LFAdbocv4 |ﳳiN|?2E=p4GhBtTn'Ԉ@e"~]`_X^ŸqqEj`8s<ґhQCלԻ8MmFH{rTlW%!#.8cLw{޽-)'o RFz/fj:CYPw_7Ǘ})!iN 1vIێɌ}^Q*}_W0reAmW[ߒpQRLx*U$fz90ƫEpN)dfS%b]F[R ʉK.gP D;ޘuUUz~H88yWQX9]jCGj}6v.l 0c9\Uz 5idH"Oʉ$`y@U q]RjGL:NeHIИ"ƹЛc_Xħ'>ˠk4dLŗ+Cq?{0+`q _*[2QP`EuQW"PU*vDc5e#&dG8mǽšEcQX(z'{X1E캝v {x;ʼnO'9A2r`2!ykB$M#щql۰CKr}avQJ]rOLg8`i R)4IgZu`#9#0tOfճ㞹"Q` sr1 vlL IӖ +Pz;qxU3,Ww qB3R/a7?h[4=QRֻőL!DT\0cZ 0;߼$YY5G})NYi\Ƶ^qP?{KY2xvf6 ~e'1ҶkqI:9Ljcy'NWOL~ЊN51e\9 vdM a(JyyWaQfTxk~L&:g.s#ڌh)+4fN3Zʲ>Ϫ#/xC]4TWI"=,h$(GnكOQӬ G6wwrn QbS }/LBPsQtXŃBxHȆq@AӀc(d TDkg74:2liJOo;vE0*H:MW&X@1Te54`Tcr7P#SH*Q_en~mT ۇydaFCbygjمz5^wUDɾA+m\VvSd" )XZeMtMSKz =:7ăL&|HAh׭YzK%AM]MiOK$ds.Lirlڴmd K$xr#+4Jlz1Ri֭tMnPa08EԻ)ԫmU 3 VI"%;Ql8\+NN#]"gWg@D_PeO2BZ{$3Q^^œOSC Ǭ55#gU*iY5?&%"z՚Ixb2 EVsȑi:X(Ju> f"htbuf'$f-4GƉA:߅-f"0 o"A1`yi0"`&c1s?XˡŒp$ttD7 'fRF@GZHe]~!^TF+5S VKX򁠅+-F k>V]zE{qDtIx9EGu950 945,sJAYK ZIgZː/HOG@DXw''W:yDs~M_>Ev]RjGih¦8)8JkoK6 W":JfwmJEh˄Y׬%XULbj_eGd,~ X =#mIGoTFxfN;9LH}cm l6KQ"JyLC:H*%*@Mu~"1suԞcGhÍeoOt\;upxqW#K=5SjFab7Ʉe]&QinOR)91_9XEnH^G- _gNM wQ>EAmiA^6O|k{(w֋L Yi]{UKR|dr& iK(ҁ4BHrX={mMoeDβpG%YI!X9G{%zkՋ)Rt HŎ{\x1 r3Xܿ\y}t1ܓ JdPng*W:!Q#Ϭ`U9EB]="XQh8 $wrL3A@ c1r1Ƴ́ #'0: Q%sHyҭđ?8dG1H*cT1s6ubYDla=|_&EzEps)FNSNQEb~J{ĤE pƠRA~ r6ir1> -ԓ1 ܑ5<ዉD#Ryu7DfnJ[Ϭm'?X]p&9Xb.zSr(lG"cz~ /qQqŎ zXgN?8I3yt<#Cz.HXUqK\ӠلOPSqCŁfbDkVhUݗx(? &d>4F!ٵU3I^/kŔL9Y1{ڕMJ0W* _ev`s[>M}Q]ͩGn dY#8:5c|zErĶXm.4FQ3uڬ'r^ng+\յ+?QҊ!M>FXBz婔gH"X>\&{v6W(e6 Ž}|37Rmg8u0G1B{YfTmkPYD&ݼș KV9tx|$n0OJ#JSAɃcś&19B] !lti0 jwx0RDel\d$ tH8mB33u=GwHqA_xWzM`u$9 (g iL7%/9{I+#CǖYyx~2CNu4k vfu]ABb%'0nyE}ڞd1?>q8v;@KaF⥖mmU4OLAW@% |?lhT\˥60Q!s S'Q\C)v,\n$O5C S(t1EjI7p'Ɛ%\iQ0Q1)"e=9W$f IHe=&Y8K(8RUϙL:IYA9C?p_2tVħxAv`BM$hM3ERd/'RA]1AmaTШ7KAizAtſjvS(G # c}^:U'9M M }u%Fea.zbo*9ڤ/DHs(:w@([s ߪO<1[M*R sJn+:cvt8F#"Sj˼y>7At2x Kn9.&zinظnqw"h7q A8#эb2:d)F4s`3=%da=x))LbS1#2q=܏H=p`I9#1+W$1Jg=Y "DgJw^d72yeˑ,ɫMtSWA% *DKcmC-zG~e;A#'HKoj{B&bղq8'w~G5/(O yTc4O4ĵWNG&r:<)b,I&&)KPKy q3E>g+kh9ˆ)4|֥ZR@zzGwGf'`#Î~3OӬVos<⮭DNQl|-8jā` v 8kƏ0h ӎIg(cI OY e9\D¥)usѰOH%T6NvǟJj%f9:WfM{b)Ɏ+tv:dVZY7"$b-`ngrYsX9 CPgFT\FK&@ Azz_5Nu%:t'XjFd(WSMw]>7GT.8wwzrguZFEALxEɔ0|{m-Jzɨƈ\>4OOxs&2qf9RL\8_x8kE *Z:(oά/ .JiY%EOhlRQZh~I٥ [ʚX'$g>JFbf&[tzk^ =^T el]4P# b̘L#R> 0~|K>U:?gīP}5e%Ea:C&ρ(H̙zb0u\A: |b,nGs&{LJ<__XbwswzHfgx[wxt12I,r7jAI0@)Hہp—ZYG4ԐD#L')·z^c"]ci2$ܨԀ'=OiJ>Q5TH1lq2yι}WGk>ڽ.vRJPI5i^8Iq>DJD.cɈfʤڈUdN fQlLHpa DgDSysOIɋuXsy\Wt|% W#\ 8="h~R]:$g @] 9FiSgOy^.'bQ!%j.s?XٲV^KmRevԬ5bM0 Q.Bq̩Cq^/{]e阱R$)acզKF^΢"icS 裻ˤ]vcsm'h֤QFUEG"*w^DI@2I;WTT~]vf`H@>l-|&eޛu,&ɩ:š229#f&]mfzDI@Cːu( ?Dc1`"x5"DHcACv2=}#HТIzNF=bHΥ^pz0rXLAP<,|Ƕ8͑󊻶u: (1t!AtƧw O,΅"jV%5 G(,|n24囙EH8-.aA |{pQ>X{˞nWGNb9:?XU^U{VMQg*eڄIrJ019: ;;bI.4934#=5dZY'7jzd"۳y# 24S6 zDslPbD#"6Jy!/ F4Qm"z\">P!cF HLz5E؊FOڂa73{A]l@Mz%-rLwyfLۤWQ10㨊'',UHF"=QoEX=KA(2e%[*Oa~P-RG48RFPw8ϤV|s솤m S+M_X ,̦禿~۱\9X|- v \ ħ9H#ϻ,o1Bs@sCj9Y%F|Pޏ,q6CC]9 lkQ9]?QYeg |Hy?Hmof6ynmQnrp+eQ4cˉ8<)K8fLRT?" D@S83~QC*M[2G8g󃫁|_@anҦ)P;Zػ7f|w]%]T8?bmQ}8ao)DpB ;@ Li"3/2qYp:HI[s0s'R7yǤ] Io>R#8$3 t!θg#wGMXbnF"$XT+vr9 T3s1'>ZO.)DP G(/GcMvL {^F?HM2r#9aqX6G+KVS6rĉ=Ǻhgt޴1?J,lui5&ҪqRyQM s{Ʃ6:b+NU^.mʲe*H`e!:D49lw8Or5N hOX f aR.G,& _vQn8Ung{iH\c4u.Nwʉu8HyCh ?l۞ƆL >Q?EMš9^Y8,H1-I$ds }= ô&-a~/zUbJ^)Qȯ𕍞)&7fN0/Z-%z~=,bzYHHO`=ZXw#62 ~*A"s.&s#{:ICO&2z cyAO&bMW T‰ȸFޞJWQhԤ0`(DnG))I/!Ee6;8*9SE[>Ǭj_u ,\/HVHY ;ǽ>TSrH*yz`'%Ր~(Y>FRkKo{?Ł2cgAS24s.3WP3I T8 &bxr ׅuZg'Np1 (g>L U&81,iX5+2$6wH,,VcH/̈́s>'Bb<C"C$NI cv,DvJ-PN *wd{f1neL̕T1U>/sZ'f H9kyA0[Ll=fՔKJ9t褰Ƽ[hb9ֳ= \IRhwO|5(tQ$  S13گf?ںU;b)nqHj$UuJ.{1Zm' uc4Gt+*$G c|$C3sEC@1FI-ZTܸS%ߊ)9^VKkwԄꖽ?|4"MOVrr{1MIe:|X}Rdևb(t0א~ฟZl^`Un\tj:|g%#Wdp$1阻Vdej"dmbЪ(d*ƵV(M؛3u{ /+եRo#ÚHwΡkߔmhzuSƎ:$TeI&= vp*Jcv`c?HDsDmIikg''ܵQ@ˠ]Ȓ-ס߫l_ l6Ter> (%.y\_T@[p7Jab& ŦbLq~EpޡUTy"!Y@c:ԠHyk-衸f ~JAr~)3A'p @3 ͷuT[>Z-A (",QqFvf^wKbH\jXm I̓BQQzF#JӬjƞQzM6Nb7XY':Ɩq0$LJU4zs)AD\]MXW~c 6C40^qBKIN7?X:5 r#6z$n7N1Tג%.@shLJ\FcjZҶɛHԨFc 0 Rs4MsV񑄃D\%[ e2 ڥ@}3`v-\JNEE Ay$@ӤX?G6;hK .6򬋆9EEuRw[k7p%#}NܿeaeוooɸL[ {is7L]s 3cPկ նfiNYTLRQ`]!%14ǖ2[z޻'r[)8I;ޙqd@ƇSqLc=S~i*·O̸:"=-k:H.1aw6&'O'a Q28YUdxx? Tɾ&#Ӷ3PdeG~ĥV"TxF4i8!_v-͆'edI03y[+nЪ[71-^e^οB%ϑ0iFpt慴;ekRlhH%Eeݘ9Dž\}ٶxVzIꨫHm@Ϝq򊘵*Ҍo)= ģGLgd &zBfe2b9=lӜڗUsni]kl0Z▻Y>7b[ZwFtiPlˎ jES6CExWo*5 ھ똪/U[LMKy2Uޏ I> e@1[/C{]:B92amNq,%n@7Qa7EGЮS2*0qWA}ӟ|SFA4vJdsL]bsG8d=TXog\a0L1:NKVΙt Y\CfFMHI(\nV498e/!QIe3b9;1e&XzDo55*KO0 c8T**'X6^C2.\EO#;s?H"3ΐS7j`Hrʩ_tɜ3Hj׹k2Ae(Zzazʔ(ޗzG޲ͩnQʺ Gjp&N=>P}j%c]9nԽ*z~ze<*(.(x&̤NF%=!]ݭ"6ʼدE3&ɆSx L i ]K@UDK5LyEzkO\s珬4g̛xM󋥵q(YPVJF9d̷` l w W8ztM]elQ\s:NuYNT?rmtďd|%et29e/1,.j6p_-Šי"]3 ǖa*Wퟲv/)N7^8s,EݝJKNʮ ҏORI$xko4'OV@jT+x- DfK&&7,X&]6=L^X?ulf/SbC턍& qHк(U%PGGi"f rܾi4#pTv;ڢiq y8>́ ]N&@"pV5 VIGI$sE$ N#X}l6hbS+1q6D}c5#BLU***ylIF 샓x`kO쇪\)h4_f~/!+H"SCm NK:QZaA$N8l銫۩*fq֬bQ!Ʋ: *)'X$C2R5qH+)S OS6YZMt'LJnUs)X ="uY59\@0gn< I}2D\DXS5wb^ o@w&~zDtB}0;q)ރjs1}`{ML24_ҥz,qe%1 .hPr{&g< \JLB%V=6ÊBS529,H,EC90ct݁SjB-Y)o68*oǜ_̣J1Hm#js;O)/QVΕIo >R ɷW\ea)E*~oӔ"iFr=`R&ιrh{NKoZTXA\LDN "3S=ZZ톞J딛vW/|Xam+Mf$i^9X[+7PҶߵ4v4oF&pA8Zɔn, RfV(w*y嘙TTCLw_(ͪ]*7h"jҚ̲RA^R&9+概rJ=q:I@IaԂmѡqinLpI$%o7;:tB?X_(<}->F xPR g#Ps.0 qzU65Xo:J!%fXiLN:@LbK(֙:̪ޑ ɐ>2j{Y^'9cN"CL~'|s}`TPaU&Y.$HN9cb5\丬*,R^8B0N!RodפZm%*apyI%3+^b#uq({{B%:ndeL6<*SWb@:!5P􃑗880LB-ߛ<4R:u>u >`>l>.AYU_$7i_JS#82Kb)&VCjQn:A bt-\zH)O{N|r.WWjI6]rݛ~>LiLY`|hWM.ZYbC3̔-i(^IӥUK:~,'QhVt 'Ol5ojKFVWVWb,'y$f\{9mf4f&מQRPYM@4ѳ tZz$<(6:তU1GH(pu {;YTx7hHte3q;A,;ڎhTZew JqPWc[jud6pNzgXhֶhN 5Y$^D"Y‰wI ]e+[NQt=f,xQ*)l15fM+neIЦbI"A9ˡ#{lP4ҼIy%Rtq" G4?qPB5(8Ö́fYO"": 9#mKiVArqzrS7fGw/Of [i/n<,#}`W*x#`F$5:괗sD\&i-SC4"#6N+=nl1RBТq6֌+6iOEO(my(fm",jj[RqR]1OXPIDb>Lb{K!zj[75qP`(f΋e7`HC><6Ojx }X9Ӑi`88NӔF N 5 X'<30"PJw8YH&lP%?8vS#6 bzBtD9;48s:"Y7mHN{:fo; Zn'#pxl40nQ,5&Q s ]iy cjz"YE<̃):r0u(;u?eHZHFʅGo sg Oi];$WhÑW0*s*LH !1L(S+fI/ c 4/Y&K` ۥnuǛ;ȕMl>W*0q<{<>=OX\[tXSf 0WiԿmpxHާn1=n-vYpEY&Q/?Cy.&TcwלiM 6ˆ[¿g9^ۭ7 J #ΰB9y 24ˬ1[;Lź4uT Ǭ1 pHg;%t;aTf)KO+4æGԑJ.RJղnXrKySQ ʹhdX܍3%8sH@ɷreΣ\Tp3m_.$FclFH1pHQwAiU3kUJk( ;?8,A,gDƦ o ?(,3eVH< ;iOW?l`I/DFY`rҷ.Tv7 ;h3 ɍ }lbD)HG4qontQ%:f_lŽ6VޒFuBHΣUgNPkgJ}̲R57-頂Jl'Vt]![6uoL⥹ē?wr1 Ff'Qv,lybQs28U= 3}јcG*okkvбJέ(Kk(<7_@L&iHBʻ3wHEvj6򒑞"rCQo6LQF鮱WŅZaỢ#1vzG =`4Rޱhڢ?fy`4Js03vy1d +,V Da)7N UTZ31e>pޭΰWS11/q> f#4$dW Y$3pˤA`g hs=a"IG=cVtn9K}`j3)9=a_6 j+oˊ{>bv]0DHg@2,gݭ[m־(:Kq~P5yH&Lkf,n)qT&SțLyz O<.[Ir6q"yqa$ R1i7NPp4<ͯTzr7UWh$QUU$Cy[^xn"]ڕ3n4VڪJ۷[fk I_&v۾=A}b`&sj#mIt{Fx?Ά†Mb1(l1g:cZ5jM6E-i]LDF&tB*&W4E 1Gg\U8;j#378OUj!l~LWFB.2 oXWG LI0Uwڵ]V{$O$T$wL )vd\pWjFI .czY*We% ĉgn1P9 ߷֘z-JB̈l$rLC!5eST1 :Iickܔ՞6xEh!#OXˎFwL+jOv+ ˜"IFH1}vr,uݫ\aI$o&ʮ[wQ!,p1fT|wRf&ϩ~TK$I2(M* r\-w5$&z1w%'hrΞO읮RwH9lҳeӬr;o:B]f]5rLtvΙiOaݰf*g' |ͽ/{}[::'gsI!>x.DJ,>O: r1=,%w8=U4kp9@NeiF@(r39Tq 4Þ4|7G4;8lL:nGԑYG#Ci)ϋǰ=!h=c`"KȈ0:}#jG'N&~PƝ/tN{MN)<Ӹt E~j# s: 4@M"l KK̓k-tp&g3fgt:E*K5V`,#ILN ss(<}8mjҙ )rWE,[Sח 'Xפmcgw)}WTP7U :>SHE^i"( EsHmښ)j@:`~Cl[Nt{GtKAOfV(ш7v\ 5 2F9 zvMLqo^ȥI.]GB4i^\z+ZW:jc{h;"ZD$|Ql3d&o <|)!!GXYF=#">'F-`z7+`ǹ"p"e H="V G:Awewώt0L@yGbӜA&~W*ub0A tP9GϘr͞V9Gˤlj2"E Ugc1Q @Ps  i:eiЮ= kw1>luIP,GnN84TnRHrIvح栢=K,,*&@NYmZ@(WQQK}QKUHieYR1vx{@sMaN"MB>Xްwi>s6:`fbWxGQ5e )!%[ qus126 4Ѷ3gUTl%MFQq)Aއg?QV^Qӕǿlh uLN% fd` : cmh\*qo Ņ,xu>|IխKSg}H)x&^l7zcnנS)-YC2 zid#}6F[fҥ$\@{9ܚCSAެ7IјH%AH*=`L%VRsê%rFRn#]~ˍ emP?jJ#8k֪tE:oF#:BU?IO.]!wqm;N&mMgM Pc`O. K&TKJQ{~= ~MyHtG>Y2"+]ݎ\/A ieЙ@¿3ҖScPif#X%\ `Pq6ߔo7ݍ"%hyDq CT n񩵹@\HyZX- ,89Sf.mΓrxB75D";9ζ-r[U7KVSުqW Y3!|uOZm.zKU{/<5K @U}(7gLmRD9N oF:jX.[hf8G>Ic$—yϋ{?H71Co+E騜 RS6 昂{߼,1Ԫ[t&0y'rLs9lmXe3VrQg?h=E TC#mP+ bOf]T+6E~g-4kDjwf󈙳fL]6 9=Y4+ S6Mft$GPTڪ}TyF7h;Pi:mD㮑4P4L4fߴMio)BWl  $M(̿rm?hMkxa*; Hg98'e:7dd\fESbaLd"$o s1A(/ ˡ{s*4WݜɓHV&9m-?HS2ȧtq,M t4Y\wH8Lx*ȩ;)"O֜>p c)eٝJu-R{ťJ~ UԁA9=B&藭6ϑW TRQȮP<䓠baKkg+Q~{+@Z4_PO0E`/?P.l{فNyy5KtQf͝lگY~Հq/zO9s1_`>JPMjеo׳֫ :,SI˶ oܠX@vlNLt'"/F1GXydIN) 矌SW1$щ9ݖJ=^ںPgiC[r(NAS$*թǤF}zuYN9GCZtŬ(j6QK#A6xH>>aݶ-FIn*z FD"Ith}a7)fj=oJ%„J`3)dtnYϫ2O8,T Cܿ`sqVҬ/ĝ&c|x Ӭe_o"yRMKSQF}NVAG緥~ipn!PS^u_$PHR^S!VT22MhaՈ2TIa.7HF+7RM)8=@GV[Qٽk'UIQM$KY|'0qQa4ժQv5k]$ɛ:O2nRiXY(F0 -"c.NS=X\ZFGT=7.S%;2DG,ͽlXt%dGf$1Fs߳6ԝl.-&֓VWTWŁq1 &eeѴ]S\JdݦXUFkF]lgg+lkQ@ޜMykg{OXj}D-xX(1nGqP֎F;vrXݜ4EeD+Ҍ>,A=n} D>#vYhrhݥ)AdQ#>i佖ؠ_<(*ܹe Q6fmќS[ig(pQ$ sLi#g쒉% pv''1=fB:)TEE6?)55A=: rݿ ^к~TMM Reh}.kqV=QmQR!H 9EFm =9O"eK=ybn%G^6 9Q%!4aKiTKV@aJu@qnE"IEٽJڽE<(a~`2XFu/f;;):6}ÇVSvR'1.u,SS>r>zyN%9j1`_6 oYinʍPI??iiT^q@,D#xґ6"AnTy ESA忡9#VͲ DO,5iXYM.sSCf%fDT*8l)nePOOXQ9{Hڮˮ`E> g(Y-YBZyt%*>A9Dq^.uMDΚ>K|%]t2qݖҚ^6''\4ѐ$Du͙YP)*KTҨ3 vaٷeuД=M 1RP̓jm6Bٖ-[$Q|5U Z2!<=t ԘJ%_SO,Fd` +ը4A48O,AO8 k ;}THmAUZId*xH0K1Ge76ժ)v#8M./ChIP%Y ͦ!]Ԋ-)g+r1`ܨ)$4fN Fs1F.O(/WE%|]YܗP9tc11R0c+7]c2L&Xx0½\P''XeP)pQHxF ڜQVHˋ$۵ ѨUI)Art !1k<Иy) l n=p2y|PyY%>}zC03閅f,Ɣ:}IJ aqT#lʝEg&(t34s!)@>IVlfOp]S1Ff`BTk!b>56CkfZz(1MEZF]NRS *mWp\"o,\SƢR<-:_Z^gb$f.t) r=v7rlwʟbUQm.qA47W` JtΑѿٽjܸnہpה/~\ջ*.пexFtQ/>Q:G%E5$zx)r[X)xJsW7U%C˒=D,O0 {.q IJYI,ڑ @0H##1L z.339:A`\K<r"PʣpW(R޳% <1> Uim 'mT((UY%qട9ƕ:ڭ&߽{#Bk)Q#MHyb[GwݜܴgRgeWx9?O"OS>Z1ޖwň y1A4K!@j+p@T%~PEl.s$[ACAO3sQ#{Q9U3*\5@ϧXZin\\ieߑDT|>Q"b7c|"r[fԳ!#c&"b-~P7j#*(7IU|*) $pɟeR0ƖY$ ߴKz($TਚUpKrG;Rx[{‚NvWRNRDf3 #u4b/eDx+tw|@')8Ua4YE€yPƈAbr8UItL:pomSU-Rdַd偓&s3/vlʽ}ۀVUJ\x#,{?!x"d8]cYev7&$SeUg>VE.Ym{!U%IU ^mV@pHgAZD;v v.&LIlR /;#5dBYKOCZH9Wb)馑dv %ex3QfrqVNIw4.FɬF9b p(]HȨ⽴ M Re<1vk2c].uW`$ҦˎQW. 9oKUOrn.f %}NQ!۶3 (Lfl~}2ZTrBS4͟%2̀:D.,H>|(dXI+10p ݯ\iP`=FA=1w ꡍmJ#\i zFA$=2dѓT~P_W6y_''zV35.{EfUUk{@pYT"'\ bl|gch>OI}Dn pT AH#obkvf%9hYTB##i;Wg/'M57jNiᨐAN @AnzG66cvzͻ ¢?`/wt0܌r-WsC.;w;56U\}PQ)"n}ajfh X 1? O'b@Ʊ ]\-q3y'80[ &vvnט %Tn[A)~M(_>7jN_(TۂU0 +'9?]MWvUqDkf{Lt.tۮRtb.%y߯(9n)MzA72Hѵ1YVqRmbʷieD>9٭׻nq'\kJhۣ$Cݰԫtי* Kj~c<ǩSlof-Q϶o&ШU ؇ 7 G(U-gKąܦXw&/mF|4t[ixPOG [-t#Q.,i-D5@bAZuRJN)*](Wsm[oVӕ=3?{WDZH_ߜsح-{.x!`'8"%āy85zGN^-  $<"! Jy>2 Ԉ Yj҂ ǩ)tN&ιUSlKg(ꊸMN'$*SRisg*DSj=55KœQ i&"co%kmB U[Q&{:c&ݗu(HM&73J2K6O8BZV GJjpdϔ/z(}ugRm*QIWhY44veMb t*ͶmC:Afl i$Wlt@pE*I),(DLCH.i.9PW!AXD̳Hc:=R` \%GÍLOuzh6+Vo Sꡉ\9#բ98.ڶ:iI)$$/WOXiо ZJZjyBm 3LÚ%jƸ:G{n]aowk'<;y|g q-[C%MEiCn6=>nT)/7CQ4囻6>7( Vo(7)NCy _XzRHU+?LuwcZ(9W{f=t[⤺Y}Va6嘱0#I Vȴ]/*U)LځCj%6~|}l2r^h&UEo%WӨI_+6s=' [ݠ/9$f`E@aj9 ~Qbriu貹r=U=OSBNH1_ϕj3RI#UU/‚W9' \|j{4%ajjSʨ4F7 ?/7֮6d­KT.BjIYV 0 wF+WdKڶ|bꜦZyJwIi0bj{DӞkM= "k@Bfȃb mTC*6yļcJs1 !veIl֨QA~4_e9x "E iwhɼ~ Jj356\`EaMJjʩqGK|-#N7kH+e~w:8IU5Tc9*^T0 F1vnghPIlX>ܚa4]#9ξg8!IxA#Cфǡɲ;nǗ-ߑ5*KADMڴH:E=k^F˫kT*[of (Rf hK}d?**)3"b .*)6,4p%WvtFEl{Ki&=8m_rsRj 0&OM DGTU(O(yfuv-I4zq H^ zf)v L<$$}I.F"f*By:s13_XL*RNm'*y)\.pOz{5l.zNq|U*2ogyMt0qEg3w@m3|`_(̃3 \_d *4WBhfe5Qt:-lKc+$ $򪒥u]TSRA B1D96Q_j LI.TDu P0bfK)K=# ncrX.+4v ⦑>C7}"[9T]$r)Onxu:mu >6c_;C=ay&tYNUJ,nH.8ǟX ~PK8?]#l]AJT>ÀX߰tr<騰/+q}RU(٘hf:DZ k\~tEU$U3g/i!4ˈm۝2E=o& IWd7CXMm weࠣƔꌤftS^ )OsYjPƍ}"edmK2h*!HD3#11 ҽ(4ā'8o"i[D<ؾKaP*5 -^YWqhog2gިEhX9{zZlg+;ce: 67eC*{PænzDxN3 j]n6ժHGąU" !LPګY4y[ȫEpUOI~`gTr!M6XJ.o*ef#CT A_'(#K9*R_P1PC(IN D3z%^Ҧ[Ҵ(RtD)ePpgxJ}yG,.OzV(,Hj gqHI#*s(t-#o%'=%2ež r?xkIJ.F!H;kc,U0Nw f"'AdR.Jyo@UXkW9# 3C ˧k.9s s9z}vz"`Bl;f.4% $#Jeʤ2q rZN̽)7mYmےޏTFI.L㦐(AdM{gRRjuwGTUj,w&F e9HEY8Vy ue5b:<w1gg- [hLs$ AU*;XtETDu!F1-. ,JpH*BlJ,0'&>Xچ'))r1Ya)슀SOw$2S5wM!C۱$`)AYtRg'y@L[ U^*6}5f)(y64G9(1X e:|`XӴ&A]q[Wuh]l0 qB@] k!o7.Ll`g EmՀ3bbQw MѵUYŠ+R*tSƕ`h`[uY$w8$2@'^$.dԊ쪸`2!A3>uĢr&U=!=Dy9ݴW(+)8h@2*۹w;xTJc3\0%5=#jC[Gfv@^x$ϨX_6Ldc䊆ox\iT\ٞTT[+R!0-"gEKO dSH9->-p)՚^x/Hvԗ|tp͠-\Gpor%xVP*5$n'<%8' 3أ6jAM65v.!yQ9']r4Wi!ZOSwflN8&vbRPWH9D*&r]hL _hvdmd;B*Z7 A:t*5s-;58c0#ÙĹ#jvC"mZjժ=4<>C4򁉽4,ݐ?HkZIiq, /`}'f4W/6 OfI5f}cJ7 #Հ ubWri)QĦaXwc:%&}AtVvc8AFg''e E&~ηod8\'J:Y<Mz=祷LH$Q#FS4SI:=n$;gǕBY2DδFפ9mtu^u~p?|(UJo+I$f_4c4} ۉjtUe:r$P i7e0Fy=끃h]ڈ fOi4:1J`$ Gq13@sJJe,7ILHGX&Q9.94:MuKO$ q)~--皓k$B^Q)UY3iI:vT򰭋OQ 4B#z$AK^vޅmʙ=Gcmh4VPlS%UqaM26L>lϫ!htN ͱyvlH0x0Yd8;j[Mm96ٵJ%Qx9A 41. /YR[vHTOsbFn1FD8mgdV.Z;yv3tG42fƙs9׭:zݥnD3 ƉM89D>kuO\]Xtf;@E֟5 &1C780x^UnݞEK#LqCsb:wjzvdH6)ANJ|s#]RKQU^L؀'S2i Vow=B"' ` f -L-Ff4CXf.I։8mWf awɣ>"')I>=`z|݅0۷c*wΧB>ڪ̅/eR:1EQ8PjA cG~-˧jiKToSirveAt%2 1r@>2nSު]Z4kvf4 T>e-A=ke8"Qid,؎%Yv˹&iRIDpQ/Y {|HGZݰRY#7l5| >~aKf omU]Dfg8+~i^#~S(ZWMx#fz(_KrNuls1(D\uSY%11jxFIO!=eEV'} 1H6u`?g/i^!~]*I*%l$Rq)g[>߮͘oډp$'hէĺuEhKiګ76' yˉN#z]YK݋$)AS2@&ߗ8U?}NUPr9gy; Tta'ʅ )<7xhL2'y߼M[jRNnA b+K$^qoڭ?fNjn&}SA,X) y@=58Ac_orK+*^p-JQ$w2Oj`vj .&P[V [H~I"jl[A]cgSۨ8X"똒iP͝3j4U*L_%3\<$eNƪ僚-1NFSRH$F51Tm*JS)`JuapF-=V}hp|LQ҆(y^:(MW y0n Bﰲdb[oܕ}RUoy/b*K [̧#9wTFh.Ã$ ҧ:O[ct/u!J3Yq~q$Gs-^3{t(̒DTcg\m38c6նWSal[ɤٺ|.`fnfJ}&6jZ -^׶?H1E.6HV#$ǰm[V޵_iQ#wӤKQcF~ſ%Xb9Wnέw]搫J݃Rfx>tF|=kgwHզj q$r$Mh8ɞO7(`_S1leaWS4/&ģwY̼όj*S]T}"sO? Np}:AlRL>]^-mAWVU75-Oz\Q,7^XJ10zW*tWfmqsHYnGTvY,8K)@}RzmiQIX9QM) $Jc1I.rS:n⢸S3} Z֤p/&xR82֋l^| .'x =]374DӮ;4/SϕRew(l9/>Aj[5LxjEg&@rT @tՊc3B{ư2Cq_k;-w4iǛ.q*@bNu\VA~~SM k8Aak5VM?3>ѥ+t gf|5ExK.~pm*fv{ޔV]rͥ@JlhcMJ}q/H pk8(3wd?.UM͵BoxT\A`eE(\`O0h}2C1_p|Ha}`͞f){{]fn.h3t3M`eT*M/ڭ$J8609E֚&m DfN>QZMJWo ÊB[fn-(htL2Ga,N|CF2Jt>҂pljJA9˅J RN;&>Bc\SyRNO35g+dJ`m2xU*ӬC(117#􏵨PgqNbU%= o_i[ef#? :A@ gmesMtН.H!H.ෘL# !FpI*c6@:G9?ݳ)OxH.9Ӑ7ĺEMN.Y1hψ#Kޛ{!U2A8#Cz_/:˙3*%7R}zCzE YC( ?zпSLs}K,Mg(ِ<>QAAӳB?'GXcT߼`z_({UI PJmOF5e1Sy3}`eSuK,҃b&H)׬+| IXP>F~PΣ(wVx%pzD}Lh~q}68)iN9æZs+YD#TT>oXpD-x`g>|1:JFd#ghצW) 1]*IWheoH` >c(OXDs I]"‡Z(q#wmmFPՏ݃Q!hpӬGQ<Ҋ-fHPc $ɪN__ً*_.@~¯^%.5|XaI9!=( :{LkBNՠZi|vpCG/!libvips-8.15.1/test/test-suite/images/sample.cur000066400000000000000000000013761454007373500216230ustar00rootroot00000000000000 ( @\/}c"  ! !" ! " !!C!C1""C33 C3334C333@C334C33@C34C3@C4C@D??|?8??libvips-8.15.1/test/test-suite/images/sample.exr000066400000000000000000013433121454007373500216300ustar00rootroot00000000000000v/1channelschlist9BYRYYcompressioncompressiondataWindowbox2iadisplayWindowbox2ialineOrderlineOrderownerstring'Copyright 2006 Industrial Light & MagicpixelAspectRatiofloat?screenWindowCenterv2fscreenWindowWidthfloat?st]|C0*~kqh[z{AEQFaqq  $I$I$I((,,( ,,0 4 4 4 0M4Ӎ4<4Í04M8@<ӏ<< <8<<<4 ?<<{<< E73'Y?wY~"twnnJENܼm8~QIMc}9N޿:ᙽ}̆!+w }5{J}3 ކg¿vv߿s7!5?g;o=_{u]/}o}SߙGw773;~[ۘsw-6C!mwgns >ѽSd{/!ͷ}9/kWa=~;)wg/KnݾuϽ)wWm{ߒamUz]w~-̵`9}7'l[/_?{a{nb<{!do~WM$u@O VvVu>oI^|?ߝw-{3 /msڃtރykR^}(-.oV=~g|~of?r~۾y.߹ݿ}YwRzoᙐ_?.d]4$ [h_x ֛kڱ ek^ҵVzfz=~fۭ O;ߝ/}=;o{ڿݚ??//v}̒0 ܆?>oO~; ڦ6h ` / G`﹗䯫S;뿮9vulw|l^y{5{/|%e~PkW 73o?|6xVw_t~ݬvk헯Gk~A8jjS[שZ]u!8?{u5*\{^l߇=~_#=ܧQARvfmݎB{ t*e~[n^׳iዻgu?s-_~e7_k -~zr^ ́) B(@*3w׾Ϗ߻q}Wڷ蜱:].Es|yv C'dC-gf導}=G;B}3ߚo=wv'_+P+@ }|yA=τ>V;~}|_kc/t϶o۲7^/~W#e*aMf~?G} CЋ{m;}tߏB_lwji֝݋5~fw^ݺg =*i?~>[廯#˾7߶зv{;?cm/k׿My~7ou>~3rεq][˟BAȂ{wW~|Yy ^cۗ||2߻-{ +kvY9nڶg}ᴗVkkel ՛}V~nc<{s'[(KozzYOa{z{/|/r]L\ ~w3r̎ßȿ!|Z}_{n[q{;:CwφM_3sv/h7afg|}C_omμ-ߟ>, P A\$Zڏ_H߲[^rP]~߷cW}l)Ϟf?ݹ.|ގ;]|6)AtVgee h>YJFܽsz΃;/|jjfmoχvs7k]w[N%p&sf;'7?+2>?>>05gx?ǿ7n>/N>8x=h>ϋߜB{xgoeߙ_~_w[) Ya<0@ ˁy:̠8HJds`~*|&=PJ /MP1=[+J{Oz^?2*cO QnʇQ::$ s]PnVbt>Oc1Dݠ%dmPCUfLx>)t>@yurp1T$șpU9TVrBjQxikLOok'3d+W)ckUM^ ~W;ŌRJ@R;ij E*0C١,0CJW /Woe6̦c]߿/uj_ۭ@vN o3v݌:]%.Saѩz̨7y3X DfRU]uy˪eD$i"6B)\suEL6qMK<_ȝSS? ]c/f5W1H#'ԉ\]N*UF j#@`@&u#|3Yn*h2NeS3{ó +΅ZYxru:ǒ(HdVI)S}jRK~p t#@QAAD]-7(ayMuIȹb*H9,3v`LuKfUAX26<(얔/ )F{"iy%(.j4 0`-'%{W7X0 m9v}u 욇.KL8:C2ւ- ĺ= -1-BG&ͥQ@Iݦ(/]AZ!V?6VY(Eumkv%vM><ҭ=ڡ.|\;FQrY1ȊK[fWKHfà ")dC)~qjFB E Ahgc0$A@"V` F ڛ1% vJQ1^y keɊ>W 6%y@3pTHPkL5al ,*x P p`3 ʡg>-1.2EI$m+l*a?e.acw.?+ mkZGWKGgbu^FZ1(8K 5 qpUPM3Y,,)^TL E@(1a$0cγe]0{VZmzXSS18U ` !3RZ1a,K3 Qp'Gf*tYsNݞ9G-&%waM m8XFl+k߮>Ib(WK7-BR[H\C rk-,k*|aDCPcx xX#J,GC!(Jl ):EMmPN8JH^+v"I ;P$x'0@n H,`CW"p BO+ܘ0Qx#H2fpE s!5:CLF϶Pdd/+I\17 E&O6QVtwckf ?J1m\O%?r󔐗1W BJt ջtȠxb:8*"Rt$L5yd  ޗYCQK &S#@)dR! ZkCB"0@1B8Gt7 BT8 Wr%@D0̠gM͹h9FsV0`B |"2oX^麹.T3rNdgvM]:Ѧsr9)6;* wl?!Ba>X;KVq{7hQ`Zr _i=^k٥UĶ1\Ax@Z,oa>I!T0p Ip"H@2(dl7xy-A X<!laPX( -2MHq\.]0.$8 @P*E<6> ̕K72dd AnA(3NRO 'HS)|-lx G3+FW>vzq0o1iUq$aV\錘,B==G 0XvMw:ᐭH2:4p 1$ 򄲨TWެ ,A ΁2`̻*]UlL HP@I?O'Er~ IY0s-k^(9b@DA2M"9@Aha6t1BEy`r0xi5WKs(c Fe'{Z(BSᑆw?q5":VT# 6Y3/8>%BvJu˻5ŨT<̀*+ PA*Yy麦l`4 [*c',TUH#J5mAI!j% n' YgR}@., }a &sDtC`lp4 7(Y-?j)>pyKW ]21A^ڏ+} %9̞?ڣۓݩd`/EG~hѩp=@b^V*3ud{_5>A KD" 4N lS.KX?C^Lw\:j6"h/ cKmb*& t+B$ "p!`zgO/.U@zHTB*i\]xqUP5zo/{ XfNdzC7CF+i?<~ӥ)(&|h? L(|^\JJ[>PR it4Vf=4 &ͩV\!'҄N24\ ϶z%k #(Lj< Z~o6KW p dwG&)hh:6A8.mVm3(Bzwu[;d1ͦ?bO`M/__$wl;eVRL$$Uޮx,+;{~ߺXJSB,N,8D?ŀp#6) <aG>—1r6AoZt@Jw) `$ 8vbk:'F5gUNx . D us Pm>ݛj j'%  R{`{m(e.IJo;C2m!=Nźzìߝ]V\&f/)R;U/ Q\%W "sWwq)y^x'hx M&<+Go ;v *yfPHdmu뫔P8C'^pm(>0% cKF)]&7hGܦm'h[7\V9a۔U__}/\| __n̥ƤD@+ڇJGޓ#90\GN)[v[-*iTb~Vf@%;L<)XX"`b b40l=!BH,*XY&`]ly$xA$ > ǺAX zNa8tRTX VaGhp#sg:US/ƒhCVr5 2J0f glA’ńPkA5<2#G#T5uۉpJ/KDE2&>wVqYuSp>nEb^ewX*Dή]ru )l\pO)iOUmW$$A0JBpAPYD QLG H '/JQ2jMu"l3.Aq6 :b& $>WC*&4ewQBP 3FQMso;(vwWT}0ԩp˩zy$FW*QN\ҕnֳv̺upM2tC'gJN k쬾H(y7zn7ns1c^b#m?\-tmo_{}\ծD1L\B);lYvϝ׺L4MsBs*NS9dҝwMIrG֕rbFDKع|Y>$OHSv,$=N5$Fƹз[lA]H7n=VG,n+iN<^ӒΨ΄Ʌ0%R&su\"I :LSp.' CɇTm,HɆDẋEL3gP" y;nu)27 (&;1VKȰ6pprnfʄ K1ŪZ}S4+%+h#6~t TlGFT6qJϚ!7x9SWj\QtNN=ͬ eI<#$EG *`d8.PQD"``x7bэu: 6~NVC(G e&aG8M78.sW%{ y+8g"$F3BAo#L?ңV QFhVT:8ZccH1j 2o. M)HZcɵOb.^FLj)YfKh67=Lbd-ՏW2 ȖM&&)*e >=>ҔȔ;7U D. #`$ @3o]ό6(Iwg$m,IL#H\2,mLi:DX!d׉wI9˒sOL4#dr&4w֢Q4D:D.ְIF$]xN}m{*):iM`R}U}=pNVV{ q]E6%iblmaW,W$t&Uyߛ)2V]vLJjJC[Z\z6r PF>hD<,awGu y?bVyRZfM;vvP},D(8Civ\XzLzZ) q1zFЕd M,I6,DX\Q&W ᲠdH[G`j.NUb7EJ 6MUv)@ezhR` ȩ҃t ]uv86`p pb`: |,Yh=J)J8T/`9s(|3ITJ#,lfWrI^xԲ2>NeD/A2m'D r$:2t`.TT)UYMYs~qLXP2dE~V,˙OfTCtoCv{ĕeb eR\p՟%u9W_rzup >a S{?g'],q\4*#r]O,w!.T鰛<7T=3?a'w;Q;-/&u,Os?c&=R[1ET=dl4E7:rroƦlWyH[`ĩ;1΂]R[!//Ű Ψƻ/*uxqo&:ՙ;6u,hψELkQ$e(0W7e8|^FUkf(q>ծv L89K˦ FFdG$!ьBKY B2!ОU'@""u1yt&O 1j=&Q p;EɧO6V >tse$ 9;Zv`m2_qIrqdh`3ꅾ6݇:>j!lRUϝp+mRrR1jij'X5@66mɪ ^D3Qǫxӫ] ,ٚwVوBB ʠ d'LFj >^&.J %\%ņjJD!ݡ>AƷyvLo]QܻF9AnPm0`ɇ >UYZ]@/m$#PQn*}.732@<}mg.weBa9/`1ꏋpm$LB+SC@EiV&ABTG=a%DDfId2ٔuf ߭A#z($e;..uI'k$TMb7Vn$:O#tҎ*yK.59"}H4Hpz&ޭ4e"%qbխuSd;UNEu1>en?ѯK7VG)NM×6[b"QhTQٺFDv!E9 wU#ETWTQKkQ1Q0ެ$K &:cVgFq ɹY)khw"#vw/C˘jbvR25%/,'CX)T2jY ܁'> #,9%%Q z))"UsM;rYp*BT2.U&iR8W${ ,93`XY@ bLjI 6(i⠦4#K,0(\ t!6lx;l?# NP>'d军:ap'dasPx29Z1c?ANht*8Ӣ'٣5ăib]zPV Y4$`,C |&>4 Yd|LP`F@1qefϱlę9$d1Hp`voH7^x\:pD($p2ld<ϐB0j#! %q hWSE6ob`)0Ou+%S<`J\czbl&plL\&J6.O`PƇOu\:A>g0ەX純]- (#8V A `:@'Öd2YT™s@8Z b@|Q]*RI!#I  wB& 8"$E8%Rϳȋ:׿g`,$KHuٜg#i^Zs="wzm{ d'WhrGr:ͪ=E(4MuyfjCEIks)QqJ_7pg[r%wYRL8WDDt84+LUq)s^R˻#2j> }}պﴷykqvdGv׭;ǟt>Ʌ`_@phؼrµR;JG!Qnk=2}8~G6Ѫˉk-H*#/XŢ {~VlS%Ѵp=&MkhawPr|(Y pSp5SMFŨ=Q5Ck;e'#q%.e0iF'pĮ* Bc"p cU"fhD(4.9y@2qFxEfP Ȅb Lx.N(Y&[T nEȖ84-%IN#[=-@33E1E;XD^UűOWY쇸?!WFr]C>S\ޚ>\rI:(dB,HeaP5'ƂEb  C #sGZ8?M+>kvR#Dmp%Qw]2V&h6ia`zB@X YC-5 ~"Cن?zmɱ%]ቘ(B҄=} C!c#x"`MAk&TV,V\8],[*:VGV%6gSl ]ΜZ2; FFOQYXFqrsmOJz/-نP/ \Pd4(o!3A>Pd{a,P=l ^>~'@J`X#ܣjBs]Kf9ϕ]3?qfFtҏM8azfGf ]fղP|Ŷ(e2^mi*V,OrRgݽjl$*R̰/+($H)27q#fG4YnuI{N|KcXn62u9F3_VQR.5e"rbbES66벦kOCߑuiqnFqU'vmډPD]XLg%YD2`$B%FQ%̰l[]z7U]6-XŠo ж,r+&Er @C]Cxb6**HXN@/7s7uPp:1yo Ãah<0] h&@ P/@8 tqIHyJZTl"/ j xABl6}μOOD38XLa8!a$}Рadr̾"#C 'hUD>KhMZ:`6f$hBC8~h$6<0!F*hL56@t%f4Z ȹ9[C,`N@GCCfs9dn-"<8)0Q 2J|! ӷKʏ2*]hFmc~D5n\H#cf 5BĢ:B q1bUy.re vk>X*`Z@[[9ZL Ɏi V.sE_VU]xv%53'yPQj뚓\wf}j*W{ԏ'Ŧꙏv8O.oMO?=$rJ:ږ8Cⷙ*p M\ZU?\n+ӴH8PU#~J tm^W 2)DDT__PٳACKSl(F/fXl0""Xd*NzD 1} D!0@؃54'YBtA* 6NBsPQS6;$4m~o Ɋ \brw֩^čIDR)d۷(zfzׁaĵ,V7AamTPP_sFd40рID&dcheD$hPx0Ti)l.k͒.υpQʋ9hMD3Y0Ry:$~ՂDD㻊^c" Fy0#Alq.#Q <0ShPD&0.~&?4&B`B8b$2)&ޡ:dx:ϱURa 2Sɢ=Z.L/,Ͻ峤=gX?+E9׽mj(^MGTFR?sJGS`z\`H%؅16R1ץYbG,$K8@* ]e.^!Ok!o !4eǟ|)·=A/*'Ȑ# 8%}ߐ+}ߤX咧'컟+FЅaogҪIK/4MU^ޓXq$,.hV3ݷ>ܾػ'QGWUksOH,Ѡk(82Mw (UO"DSy&"{oA :ZuII ky[#. \KXg1@j[lZTWnZP8LPk'(  (\m٦uaPnk".@FWay1m+sr<͉ ,S55H21dhC& PP^hPWVzI61#6`#,9T߆8w;MRv1WtCM $햑Qzv2P=Ğ1..JQ1BhB’^ۗl=x4Yܳj5OY݆Th,ol7ET@YbQW3Fk:h\S,/:"C; Tŕ6\݆ɔI@N/'(*JYɡ H6HL6;aadU], ~}>ՁVLP8dj WlMrUNeda4sejx|S +z֌2;$&"cPu,뮿y SY"mVs;_G%{=&mRˈE&gKȴo/ݲϿ7@\5L1ya(\weői'6Un]|adTcxėq$z)j,rPy7bRr**e w&$L ^DH~l\mfVT?[/lC$^UV|v˸n9Z [n/hXvZٰw1kFJlտ[b⏆ӗي/R$xŲpm&1SʼnCL ,XV` T\g1g,j㈞_+.YD+ Q]$Y."JY+= iY |CTt=BHCԂ eaʪ&U B  aZdcD07_'(@$FpeXJGA, T'0Z A%?#*3|QM $2D" nVƋ.bTs܋L9gd(ҫ'8ʙ[tR. &VV uEb`c ~vJU LXm+hy dCERybg(aL[?hIߋH.i Hm'^(DV'+TDq카‘a|EFn%J#,yz@dJn|=7^i,i*N[IJK&5hHBh^"4a6K;NF'V x \&Њ:--Qn]G2:EuG嘂C8Sn .\9r*5~aEM\dT*=3!Ec u3C>i>:5)ýF8ܤ¾ר&(,a2^?@=wTY Jc!" ` ` Iޖ)5w!X2*̅Qi8[qJ"J @Z?"eu[Ep#RvN#D2M# nɯG4gf2\8&6f4 lW6 qC܋ Iv߅z-rrþA~7(~[~?q蝌狺b& g|Sdny} Xkzh79ߚlqVPz/7ú^jvރzvOwMvčbgPS+]\%U2lƑ]!G{E{})8ޛ)ۚ}reaނۯP;|Jz9-ܻOF؆ݾ}d5=~k q gnԾls̛f tӓo[' .JqwaΩB · 9O=[xuC3>봿6+Y3wiYNr?vzYG.WG#,^Ie1^n`pTdFqUXs-S4wr6X&[J sPph}GݗAΗ^薦`DXPfKqx<*&@tS+D`f.tqpF|\xS)+TRvk J WDN-$eVр RKhVtU $.uB& 'xbU%0V=D/B }"**6 6"xleP fTʡ l-4Xx%#@R LKs!){>*՝ px䩉B]4Dr2`ܻ™OWSY1f&(MEIGfä@Uj! *LKs^e3VܺWI* H$0\/Pjap . ƒ`YEa!>*2 Ác"@J-g5]0#tD\"X|-BHjJƀ.}} #SR[E~@駦0Pt!k>Ѯ+ M\\ @#7}&%7e׸:KM7d >Є[jA§7OxDZ%8T;;{0HYS))ӖX/qbQl@2 ,Z^d,M)5QH(t6;optH| A70aV^0Աd<[z 9JQڻ@f#,ץ%'\?Dx}R$nW<>\ӄ|-^9f>Kl+税hk؂ Y3G豝jԫԎ[=hZ|{6fIAm&9Qg6pp*=<$ZiN&omW*%yYxJvK"UQ(LFkƮ1>}6|( D @69Nn@ęu `.$5׺³R*# }q 4>GHMS*MEKf75 d%@^* 40 A8 pq"c(#)*ǖPa .1dF% @XL4dq:hB"?3*L L3~(̋ZvC*En(6y9RM$0}HX(uQdW$s8CPlh$*B1#NZϟ_#4Fsf;swLJSY:IY4߫la)L`pjI67JuJQ4 [6i"TMg䍦Uک[ÐVN|i#55(hy0 dZl8&. ~0PSKF,DAubO$HD=OR&z'^#h%,.ɮb*F$6070@P2Sd,P7I7uҝF*D Wҵ+F:^"lFpGͪmءz)ge~Ϋ?uqYU~ϧ%i>Z_ X y4zH9̃OrA%'nk hGg=!b%9̦b ]YvBhІz D7j/n/Lxsyd?#bׄP%,3=.$y硲 [i^ǻQ?POl`L-QdLچiؼIR1c1>3!BUNbZ`HHo:n$ [@:4*\?+ ˎlRZ2Q @N5JԣH1iٸ3$6(]m u-3gp-)2UcPg |Ezo]6 C&"(\@3Q7MN-.dp|վk$HL Dd!00!9!z &0LTy @M4DfAԬ,F͇7iU^Gtぐ?O 2 UcRuqmVa2Q/k"FQWj.1W4%BqoFhPBUyo-bǜ#6kee5-/ ﷸ/ktoH*-ڜyo[=Ά;)[?ͮU'Oߙ䇊Mhy"D͊,$87iTPBGfK029"jIKIyGⱱ. L@s.9#M'J)KB/5\Zcƚ~+u1g=] eq^GHCғ+S .bAeXy [Sc0bdѰbIG,<5rlLiиH1`@cGAL=LPT+eWZW*&ՙ?"}ɐȝWM]( JT?i_\"6\Œ*$SZ/YM_x In [caAĥBl2FV),?y&E%(!b4ԉSe7a4iUpp k.á%d(_'{ l⮎nTjQ:Y7 i-)Ӎ5[4$l0s`hf"풽%s t 8 E<(y5#VR}H/wz0dkȑ).b[)N|pΆ)UX7VeݲY3ފK%0awX+wTxs?f&{?-&ee EK=R2ݽR thAM9iRTR}7n͋bY^Ē_u#8^2t쾽7OKleeY$ DZL|j#Z/'I|ҪQ H={f^JR nGW/Ur6Q#6sH>dFDI1Ť雏4?ffQ1 s\hAEQaqq  I$I$J(((,,K,, , 80 0L04 84݅|v6]_>s#Х2QyiKkm͔w#%Tܣի(^[ 9l̆b_kާQC~]RU竽6mXow÷i 5|̕M?L#!/21ǡ/S3w[+[svl2C#s_(u[)[>?ËAgـqGoKzV3zvξw~> Zs?s>/>0~ZTe[au:߆l;ZдovF̿v+jeݶ{;#t69/7c~_ nnf[oۻ?_oh1ֺw|-tᛟ_69߻!B1խo~n!Fj]e9\+d?#mV߆ujMu*aGshO}dzrkCcM/)Yy/;O̅?BCюC/mscC?/UR5r{"߷U ݎe6;ߕ헞 ߆9XDz?w'ia߄|23?z~[)+X#Z6.Y+ l~vv_3w37sw%eyMK/{[fǿzQ{?2vCy?kkOC6Ꞧ~- a(OwJp^KF=_cYv_2w߲uz#ųvkٰ[[Z~QfnϔaXýovQy;-d~73i fd68=Ժj>!vA]߿Wv/h*e{CrǮҭNJD݆fN߭7coJ>ogB}gn3s{GzY 糆n/ڴ:9WVoЬ?3B]G;/ g ' f-O2LNbA' 쌧{g) [vQϜ?X;HZ?z5%_Vٗ_i+wwr{ mW|#TWٿOs;: R~vlBZF^ߟv?c})kw~nG#ЌrY,\eVŠfq 7|gvφCcތ: ! Cs/o{S:VR d7c%mx>NG:W#,j1Y%}V2|!~3v[r#FJ}.+u־AC|}je*VzT.z7Fp/l'wYB_oUI=u#.Ux9Kߵ ;e~^mdeuKzHvgYZWv3ޏ+~[O}ކ93>ng%oؒp8xlȚ8C:{!32?!]B^1!ۙ{Gco B[ vC>+ַg~C+i>w732Ճ]}X_ﴥti}[{^VW+-Ids ܄/8?7߇ʹ _ewʰw!ʠGц1X[ ٙ^Pwǿv_=B rVk!O,=/z#Wmӌ-r8븣Bj)l??ۼ 9ٿZH^v0d?7q3 A;ԋ9φr9?/מ^ytr97:C!p=O~k.V Faݞm'|ΎnCs~?)SԶoC6{Ѷwayduwv;;7`Gajxfw>X ,m`69r)Q}Y$*HJ{ ܙ2BBs5߀@ ` ppc@ .^m%e_dN+ūx]rBLQos@%PG`#k`zgO-*l!VzW6fSZxL=on\egMJ[c1& U4~y|o oYks"`-L>#շ*0u #/-g][0}Oszv,lX ?c󀁀 dP6 a۾oC-pp( Gtݤ ݂=}A~ b~idz;Me2mp2Еk2/WhMuڊ%hzw>B^Z7Ӧ--TvFkuGno*, #(VyoBںie<\h״iGDA B` tb*j??Uv>ү}/H'V1 "*w{`f'Ax1a2X-_e_cyWeZl!1[~ ŷ>'k)՜H0YU ުXC#{oqyxYI X( rsj1+Bpb[> V[hRJc;y/OA';!P\.x% k)wS mE,Rl@~c+HShۣ]cH~ݙJR 1 yYoUXW&;ofgIKPixv`eL՘SCqЧ*J)vq.{^k>3?hH/  2Ap P/9d ~px+W_PR,>az^U۪ #@H5L{ 3z[&+qއϺOJ p>1+ƪ;4(`Ww&K끦,*{):$%^y`>P MqT+ C;|=ɠ;@4n:h˯2Q[O-|K䃑KʗRkwO+r1y޵{tiE?56|͏=G>] (̒` p7nWй.oVeBKBш0 @uiǣ7]$pFڃ0  wp /a4; 8Dk l[?9|,kQygp:NxD;_4ѺNOJ[m ܨB?/c^3Czux斬.]UV"tzgjC72~Ĕ#>,w5܈)`JoDMGpFD믠 - ԬbqI?z2w3T\t AktPi! 4@E-fI(H6Ĥ/$z JDW(Fn Ug϶=Ec@𚩅D bDG.pP! $UbdLC 𭢲5Us Tu%-g܉,a%98gQgUi> hr0"$= @][X`,E@F| EsIuܻ۰)A5=YOwcEy=P5lYS&oT4UɰzTp$HNX/0uCvJvi*}^'TDC Iuo5V&q>20edT01h8*p 9$kfO*x6Ntth#8PgT 0, BƤ !JBX])vaIxbА;- C)N[5 YVLSss̮   (@, ]&w+y;Z^mO-m \dzd3?0͘`Ǫbd,tQ"t+),\cJ3&'_b{WjBMdl*չ7eX:jMKXoX^`TҾ 'f׻WbtUW+~/V54a<|~ui 't(?Afp:n v,ۮbfiKvxֱEճ#ƿ~Ous(uVJ3^:_%uڅm?ҒNV<,v{O#г?{W2=Pc{U%&M]lqT/:Zjpֳkb\u^ε8Hq6i覊h~/k[8n%~N(fj%עԡ¢C)@wqJ,iq M$t'ď4Xn1> 肕Ni9%}y #Xyy*_&ȃlSQDۯ1 }d-h 0X8NLiEbںV\"o6jPFtT$}¿nIlP,n,ZYB( uqODV .!(9tz 徆uScfQ̼MךQjJ ܕ"L0XIC,t2Uen˻spiX:3&TӚy]Xq:2¶GGLFQ2`nTBLv%i"iE'B\iM"toDaPx7p^j-Lz|mZn((Nhz, nAUg+2)/%}ԨyZ&-\;WtesO(E盋t{AH3S A$T@NDB K,g0aB0`~s!Y+>Hs0CEd2.YkU^.X3'Y7I"ĩJDcqV/CM]I,;Iyݷ퍺~$\MS } b鴺^T8-ϝZ)җ5 'LQ)6Qrאj26S,.…O, PN.uW.B|Y9H%B `idV._Y{~LkCՉ2CG8;((s6 ӻ-Ŭny˿͋}4Գ”d"C-̽Y"qXHd>J94٦\hO>Abl{077&Tuiv{갟—Z;"i52Xa@%9#U;>Z}w 5F3L(@ XT( )iq@%/c"qhߎ\ܤ*>|6\GB'G")k2olVDCTH8paLvKNR7h#Z97bvFLU1NHD>&I Se{I,q6A07:8>F*NDm/l%wL(N1/[قdxAt6\8mz9l)sdA.$D@" EFdP~ Zbnɞsw[JfM8~OW)SUUM,QAXjן)LՅ]3)ӪKJ@q%Y ֿˊ3DԛP\FlBFЌkjTdA5 kB?! ^R0g\n<7 I$ĵ͏ֲ& AHH85 e!4R1 !tpPlXy=Qq9(-b"@̆0@|g-0o1 DZYyh|7T:LYGB֌RcxM+ݾۤ[湹"'qZJŮo!%[U/׳6vH\\=[/_(H: IhvK`ډ1^lMrSi&dx{Page+1l'A bLMiU\@Bzmks(_^Յ#+]HJ7qL~lQ94noF5mƾ?(:V>'5tXJLh ǁYgU,/w_GZ,rߖz~jNA_1G)LJ4] "dPR7.Ծel=EO9=x(brXҨhC3uǚ!S| ]%TzIIU?zϦAqR2v.9Y*jՂshOAv`LSrjTYI!a Ƽ_wplZQ6}bDkYL<:F k4">Y*&N^Ε..@rlQ#q<:KaTr%INmZGL7lFSw6ڞJ`[!$КF :"Br]Gm-P̯*Ylʾ'VYArOڢi*q eE75 cF)Jm0S/KRVfmDI0EX(!&l'0p%F R rUauzm3]h}t%D<Ŏ3!X]Bc2`b2K剖y*SEgR<+hQ Č$EHSY uEeB ǖ0^10_Ó3'FKyoCĠe%k)NGh67Gօ/ S= {fe,GTk$׷WSu$AR44ӷb60^TTї=5v n\C-m*Y$]^gU~U+vH&SǭdfLbS- P[$ļ;:cPF0iuw˧zUw>WzWg-h'}wyЇ)+c<)()}Q{-Fxfӛs[k tՍ7nIq;9 Z&Ʊ_e#{dנ;yQg.8PVqˇ-^24hhWuR;XqB7b*d[SlSbC5!~0V]?B X,)sPJF)0l$Fp6u ʊaPشddEl*t A N!`LGT}T䡞z ~=fl  EĠX *\"[.z)(kMǂ;?Rr ,'#!ʤ tZp(2/D(A2~K4""XH &HV1Hʄԣ&JXՐi8vH '7 ӛH](tGx$$XD @P '9`~T=e$pѼ6NRldTdNdKv89I13hA|^LhH"S3zAӍN[nv h bP lP) S 38 pI"&CE"DH(fj2 #'&jfU `Ѐl ;Fn`%  tA!0>TtF_\N> / X0E^T &g J͇Wz jRdx= 4ʎ*bA?SzfȖxNrFkV90A T=KҜk9>(R,\J+@$"0gXTtdCBΫBtSb;?u⍭we%~?(Jj:Ui/[rq)C-ccR[=i?OVn9E w - &&X--| %0mX+'i&VNbJ84<# Џ,Tqt2,~uf1,2$,T(1DǬ܍'(zŎXP8GVe mbۅqxuF88F0<.2%d#R>JlI!S7OL'*p%j# O2 ˃J}pf#k%ûT#x(BxC4KX;D=0f8 (4gW9X=Q2wdrPq;9(4Cm+» JQJ>]4eCȴ!bلkhhє#Gߊ0(&i$nOwfj`YZx$:9,u3ua#$#âO:Yey閪T(!^O Br< "sɟ!drgo д_<;XrBaF!nXqw*() GZ).VRE'Ly-68"]KhR͵SծP@lI &)c0btN,>;6!:ZAJ[ә!# QȴWsN+3GAF8ugRtx(%\+(AMOBvhk0U@NZ3 ̱(jn[BK(:GȺi5ed9΍e1{vS9[5Tm)^J?~SF *@R^.a P_HMeERS*xg1X!8 ZWc|U~IZέ8̸-?|^3Za{(QIϭ9gS/ϥzU黶Ϧfxk h M @) @"*~FM2>t?#m9/Uu㾻u<+)ʒ'%, d p\A DwPS#p0U<ɛ*Rd>AS CQrd%4 4 1`hׁ5a.^Fµ#r4('"".w kᲂ4ݧ,דa ~9B`@d&/8v} <+ib< cscc%n $c}eie#1~T^H dFkn]N:b9j}?4,µ٣-cqVi^~啣kϼ7R[%hAOeCV|SEbB#"TPxNf)FAڣ?*f=[g7/{um:RjbqUlz/wl{+nEͯiwk]=:!,ߍ}ʤt UNC#dvYZ.R[ow~yX cq9+,C6r)zJ%+댈y(=1,\_&L$>Є9-Lt'ͧ%n8 C)b <@#`*COYNmo>%PuuPB H[` jhn1xu#`4Â߈t ?($%I5;~'x>(I3eW 0B  :()t \_UY(kő>[{ˇD0ME/jFY!d[hڨЅX?aE߁uaܸڭ<M.#e)Rl!^qYoeDZN!8g$.{sj@TڃMuG̷ޕDvwDV|, X_;y5P4 - 8Z^d+/ng=d?EBX-ݰQIŒFWz6o4m&~i~8FFñ 0γi29޳wE/y7`r <GsQt:It`=KJn&(9jH=$8N-F!8.V_6|UeWq1yvȹQsT9FE]qcDeerD/ Ĥkܻ'eH$B;)zjtl}rpͯd- cשDԔ[e(+J43+ |dY!(_To"Oz<˕/Y% Dbe/lKnUgeȆ&Jg$t(%geo[\UdGiJ4iJc=m|)MܥS%R9 HÛZvwh'0{~^(EW]1joU|<0AC(zbmX;XY$m_$=gM?g2kֱ-Ƣ-^aiՋ5)O6lWg,̇B~,D{.ׄT:/tVNMY?3/V-ef`?f j<'N͋FfUu`Ř:;!Y}'~Ik VZ:m Rr1Ȍ\Dy )^dp>0zt0 $Kq[CA5pDY:wZ 2)#EBؐ а! PSF2!dCHS0n&!yVsTP4/>x% O2mKIEZDһrtѱ1)./^%:!*h^&8]hFtaQ+I]ƘqHT\Z ٷ^2$CQ6])x`27' S/G1:L7-;lj>/8Ubyb钫##9()tZkaxʐN[xϚxfrX^oEEkT|sTvF}3_mfG0'J՜~?VPe%1ȿI?,yl4A(R٤u&і<'!vȘa2A 2/KۣIZ1Ac\6\u!VnfK7sfflc*~hԊ܇uo_}kPVfҁ;+HgEiE9ƠOfcICS}X0jBQ.;3wi"QH#_Ht46bLz0.].y{+׺K" TIp_[aтS 2%-a4li+) Nt@0d" zI PԄiB- CHrc=A\ M6_i)Lb~RjșpinlrC{5hXxeL@qce C̬fD O$RA2#å&iQ>2z`8u[8ʐ'.oH r0p Q5Jw- j@G/)'2] k/NCcIKF/UXHGw6-JAjD)?S㣅EeY!d:*B1JCB4gqJiE;uW黟ҔƠ]Cs[e{[YLV0Lи&AqCbX) Ȇh2VA xz`]0# zV&jtHHPb%8"KLhχ _bAR$04W%f[!8/:n̬N\dCD`o! Όt%3'*8n5w,ª&(/}pʈ7xD=XoEB80rC҈@YР#d|RAW I2N/yD qt-KI"RG áq" *cm:핤6U_ly/fHf 6Ht=$  -aq>mbsa%C xvX^`"d/?4K@:LI3fRTWC@NZ-NuUb7  Fyj#\_T҇`yBDZW |}T܀n.4֪*ϿxU6%L#mQ(އ&)?]T z#7|ކ|%^]]{ee)_3 r&O5CغZc`e^}G|B!% 5 P`rzN<]M:lˮhEɍ8LX5ID Pva$~'mL8p#~ך @9k 4DOM6*cp! 4y=Ό&-Q/@e͢! [&ENCCOؙi ltubCD8ی# 7(2]}:K5fճsA {b UiӺYEQ!6,؈8u ٲQM4M3aOd^DAS+5̢lG BwHnW_hZi[,ԝE)LwwftIbhSJD * '^^$؝QP& 2'Y#ӡUa CߊPN%n,7e)bВ4A)"鐖JԹ*uMTN#xF6ZoY6zw['H[$B,^s!1E c%e))(_XIӾ",'(f. xs$%?LԉB+Ux0®OBd遑ނ.)ӎ=gMDXP`Nax% ;p* b!HNt؎>rZrGGd]2+7E'>nt:d}R'}Ql L:hNz6p9$q=[.xPsǘ21[MU!ўUfvZd sFHʈ?Pvl/M@G9(pS!7 5Hw~@> (ߢDZb(\8F"k}qr:0&D) GLFB@㑥2^jxT`X`-9.h=m00I,{0lIߥ[TQ&iZ(Z"Q؋r`<L$"m@1'f'Z0M4%5#9:=tIJ+XzH8N\ ѓ%h &AGc54lF",j VrՃ!IP5 =1k!%&tALKk^閲b6\q)Pa!7&pDdD:xi_!A܌C|HmReӴ:G4Jl^iRG2ϗ,Z4hjj8T+|>$WcJm+0L|zy9QJRZ v@ =#%QM1E* Nile(FWJ"HNQURA8YxN5(O<ݬN񃲂ؚ d hTbmDR,FCi0XkՉΑTm3:(-EΏU۱>G \nnXҙ|Иxwqm]A[3ޖV8+]%ҫaVQ H(+g8b|aֽmce'q&=elϧUHBZfuuBpAk-}E6O:z_ȿAzcѻNJFg>,]oqgQ!y2 &u)NEg[bn׊@u,@^+AQFaqq  $I$I$$(((,, 0 ,0 0,M0Í0M0 4N8M4ӎ0 [P@b8QnvBc )z|~[nfe+uo\]~UN0xV~oM;۶붦_w7w_oZ;V7?'hu6l9=l~Ͻ{7?#vgn[w?/ESqB%y `3g(9R2]n1_}_~[a~mv?7 ξw/l̺ՑqKg>:/}ϕ]cg,UΌ!w(+r0w6콳^[sz׾k(Uk/q3n 9Jd@_~uw@| m05܋63Pw?'mv/^XkWu_ E sB 1(7 }uZYjfgm粥MɌܶC]Ap̆~?ss>ٝνb_:x]7;_vf_!{e6RjWvz^]&}SL x^}Z^HWZBr}koֿV^p%{eel̆g>sfLww6UKweVXh_m}⣵;ݿK-\Ͼߊ}?o}ss=3ҹ* C`!wy)sڼ\ a;Knj=muiuc_nvnC-N`(0LD*_ S/KVvnUxkcQIVm!xS{"A=_{/}OienAH{>}_+G 3?kD X_yOEH/A#C_mw|nw뷞=keܬ偟d#ۏ?ޫ,ZяjSѶwӽ|Ͼ_+~Yo_޹W>^f܊jTխ#)ڜ @Bdv렺N ` RSZ0_˷zڿ;ӕ,;s7ww>0Dġ>7jOmzWںZcŞ9M @OՙVg~™ ?ow߿oN}Tex^/{o h)E~YݷCߙ 0!TH9"|27W>\e{f>pT|31Y,WnmR; ̿Zߝٹ~ӟ73vP{_~qhh bl+&ϏOm>|}+?[[>ovW~\| W~l·,AH=YŻ)^2~(WU @"`]hD>rVe_{w~ަN؀nRJoxeߜJ_g>>S܇f?p)`#!GWw׿پwwn_6;_ݾ=_ =B͵~umr  $FB@6=GW2۟򗜫[o }VSA Z>o}߯_{1?4~q~_{} %8>1 b_L쯿ml{ջn^L]C-vR7~9}n6a|%&\[knse~mW߾۷ηͣuKd=9"4ΠJtTMZf_-0.h[U*IW/wrֆFud} C\4 (ۻ}߾o߶r~uvON 0}}oq^dz:зe>,Yt]W̟3:S?#~{YFMgh9={;DYjɓejcv@hX'iRo_ֆea|zz>%=;>Хll?A!90*yV&WS2]Kk߷ٝ*lgn܇ٿߐn-|}>ͬ2m" ͣ_1=ߙڻ>Սkߎ)ݹ|g-}z#ByYQ58ջ-ͶF P"oi]<$(@PK"H %HVz4 s)=7bSN6kzPƮ2L)| 㠉Y{Gjl'ÐQH ^@ F+Ea`7~*FH)C T +:v~nb _}a. Lq"h<+p r0TM [(IPW[(=y@, sQB\0¿r/yȋ;}6&ld!Z:L*aLM?Wmbi&( i8y . +.HFkW˅c;^ @)&/-OM=JNt Iq5ik(cAڋџWdeP 0W N[Lʿc/|mw&A4>f.OV˥k_7g}="C^y3a`"aݫ+wT8N6Єw׾v6w5S|c' `t>1x8\)<B-{m7-u˹|we)Xi^^K0kzӠ+8_wbӅb 4i "kg1PX/PoYo?m[MpO> W~jkt"Qй€ e's}+$& zʴzqsfRViV9ϣT|,qJǓF*HI FA`TXHx, ")c{) v0̍3 v,Qz!#S!q2j^=%kS]rO/Vűy;` C/ a0}xdd{c0f S%-c;s`f _`t<@`r+W\:iQچevZw(/ "J0lOޥ~+ h ,߆+ǚxA/4rFϢ>woX4R"FeP_KoMrkvb\3H˅b$[Vj y:Q >^q-?V0U\'S&CDVN&] 6ೊN!"DfYF:/Q0'Al @:SUdSRmŻk'@-=P.(2yW1o& @wb:qYpMev_9bL 'GMbt}}welYd83 MIB5rku{?վE,L( uj:g{f{ز@Pj;ft' Q >58?->Fq,0 Zh*"bA%gLB9v>pF-A3갠Hг0 pJd%`M& )Yſ.|?)KU-/h[Al!vx* IեQc檑xpB<&`;#O>`Fh8i_Z#XnW ^Hq6לs +oY+ѵ@U1~/Fٲa`eT(R9ӼQj:Κ)8݁H"Ĩ 'F7 #:\_*k9z0-;VN1yP&q8]x0 1 K "ÖLxC 8pj=r@2 `܌u;~Qy@0\H lESQxAY#I[hYh Qt?E3w[X=?%nV ]"Q29,%NOD ?&t>W!鞼Pb UCȫ~uH<;086h* elV1wXtX-,$@D=2/69RRT8Q4< `=S bHq1 q}!I e/.fj)U3hZ_`|VdPiWEH7uWzN=f7R$-0$ m~~m[}K^zde7Mjf5Hi dqnzg]WB88Nh:*p6YF9ovq@G w(TyEE }#/}V'|Pܾļx8v ^EgU3[%X5!;j}BKWl>bRPk{j}_}(-xP M$6-Z|&&Wl&qgqY*"Lz<$W\[!'gk',XZאDA*ݑսwQS H@Y@lm8S?j!.adgʃ|5^rP#p.sati҅UDCh*uTf|^Vp3u$nv(}3Z(D^ BA @|0CO+{'֓uu- @%8]EsM0lNW8M=ELW0mO3Zb{- @$,O T:nRm_̈́ țOW /qeB M/q.de Ҷ3ǼޗcEeAG)< aH5T7: p5a}ɽ,?=.|xK qI@ȣp8@;z7ٿlmz=KhVp#`v  J^ 2h,@RiɼQ] 9( \Kp(UMRN봧d6r@B@p. p7h4 aJ#wx)*砏 :]24+e*}p>w3X}&spńtt4; pLV.Z(' ^d$>oϽ~2^' M6xf E+rUx;q;@MtV^ /ú N՜ZZd/Uhiqyx/Ad1$众U a~ͥ]P+" bW˻Phufc]޼5g@Yx+ 0 &hQQ㊦Yל;7]M9@@rٷZ_ewsb!N$@(T<$[k+z[^ vIGwO8!jP?y iL !$"!2_?ڗ\H<PCK a; pJ (}P»}.8 EfѼ?Q &+=->g)iɱ (EBIL~Ƌgm~1WRhM ^Tgpox}c9 @:(mt77so| |Â1jt tkhĈ"kkvVnzB- R%1PI@t>YR9 ZUV߻_$b 0XHTX(GV$H]bv07J8yC$f%XE@VIMpz' mS xF<"P'PCbhF<wo4n Q` %p-HFG)(vnЂ2uʶP pd:X >?>lZ<U]6Pӟ}@< ^%g,t ƃ"h܄ n \]/pO@;nU`PUV& t%h@0WV˕6xsJ[eѹ%&i#DIL  @FjءaZ R,\ 9@w^?.:,p\<G .!,@^4D(4hJ\R|S 2u0J-H8rm%n<yh&MR@eZ FOtx)1Gh0~"Az> 4=(=G(Ոekx} (CC *aQ>T&D_0R"t(Ăei|@& p|peK6 Wc (DwtμW`l\{%-S ܟ3:`Zl7 sZ[ѻJf$N .y+Bxd\L_nAqO Nt.S : (#05D'S؆C'DZm.p)XK#r5)d,3r[k7ޣgl!'#Mq(17hh,ۆ"Kߑ u,2@4Գ*Zg Ԡl‹aQ<[_N}SUR(Oξ~-Hb']>Ѫ__/bm*Q7UiZKszL.9pa`4 'wDLy+`QEaJKŘ]4qEJԥh[r,}xхW| ^ ]S/4$Gf`|Y.>c4 ٜKą ƶB̏4o/0t0*q;ыþfqB"^^_=3Zz2x¨gba>LftQ,O]t:O#jɕP{G'y(ꋅ&sW `bM>dチͱq;8̑8ՌZVnq}K'֫^Ӽ9\'u]>] gcW7;귘cc|V2t&[ES̋9(q@`~(l3@)ٛx] s0^T"Bϔ ,z D Pfn p$ B,.AG'Ϛ=<7 !MF4bE Yƛ'XxUM}:?^DF fBAȸ TMQ:!E橔NCdmN:F\<3Ԑ*~\&HR ˆ'Cؿ51"(MiC 4\qpDN_!8G3O6[4t|p+먜DTܧ?f^*(=Ί#JƴrQ fDGHHS!hulR#TXr%v(N(8L'!:J^br7xp7~Գ}{ĿYO+h[J!U8hCaEGe/%G$d/!u=:[O֕o*?bj<^ѣ V<-yU!fiⵍU-Sg~8xwvEksQj6U,&~⸠,ô7 b~059B/Fٰ5*SjGDDlP#|MOT#_&{<#Y}AS Ue!@HRyki]4n?n%:yf:mWEmqti(NbNvb7ј-jے0>|t^2("HAҹjjGNM̨Ë:]Ѫp-K+*\#lz=y$jåꖑj0׈#J]Φ$ K628yAV  5F7`hiª|u_qRk"HZm&=:Dho6Qx + Ekpj MqUlZ}! FhM$4љݶµ0=!` 21"2iuaK6ۦH4In>í5JScLb{9թrUDNDu[!X4cF nZ*$/Z<d,Nj."9Z3Y٫'eJ[v6Y#.Nyӂ#!l 03Υk|\̊5!-Nq{2{;X*URIZ2R95PU%[yZVKcYO'E_m .ZsqG, >@}qYӘ>aN**vMEğ z:VBz;7vX{uHi^Qä7{X%pFщlH%7ݴV#WZGX0G&/-Z.]vC]6z:U`P'_%lv_,I4Y馣BFFҝ_hXUM3L;R ^)QIx>1uaI4I\Y9Z1Fiu-s-J˘CLиGByi^SZû7|M{vIzܾ#:'Xe(\*^M/+s]!wEZLH9B8#(RʹέǦH5J'œҡ=S1s惱j'0(A8i"DlpH#b%1 DQJHϹD,4x͂ғVBhg9\`)!)ޝCRV?!=Ѻ@ *䨝$DB*-):-NW 4(J

*ycozLֹ#lXFX{Fl1]7eTMƐz䘻+1%'\9ET<ɂ`yl7/H(nZwTjt֚pdUť~n ֭zLMX{woW SktW]auX':밢[؄cElNG{T~_3.S2b'u㯾kuk61c''ty; $LaC[:{8yU+ QK6p dVJ9Ht[*.PL tGbkm,=x8묎alcf"0L2 5y`iR7c; BATNt|+ Pl^9.(B7HW䆁RtDŽh-0ܰJhqs L|^nFњ [8TPAF d=;/`euQϞiKZlDMuQuK6xb_޺,x.}IʍqEQ}SĞT~>$̆Х ''/D\+$Mp4FƈdLJȉuJN/ӊj,ޯb3!1 f V7+12|_gESM3΍RT&-AQj|HVpAL@3"[ˇDfѓ?DPi25!R"icETzה̴9"`fYe,.tfXJ. 2,n6/ -Jwyy%Njn@6glu3Qih^kv 犠z!y9sjZCT1%ZױλSQؖ,%ѣeS/Tnh0 dlqsyhrGxt}gʚ]#tgk7Igˈޛ+CP1b b25P٦crc*=`ӲFLEUwzWUw9>wC,jXu8j[o(R -#﯋]Z:uAF/6l\qȹӬ['gP757qgUvͨ@D~lWm5K0ZhN؊SUOKE2ut(Vdo~S^R[n.m̚>cǽ{:a":b`RV0-ݢ<"zqQ `mY,8_^lؤ;* A<`>X8I-rh0fAmsHU'e~:~C:<Ēw pSFlZh1^ Sv' .DQp1Mt@X:# p~\yوKa PEq8Ѹ>< рVf *dap->ERpv޷G͎K: @+QkVhzV)SO% %f~[O'f݁ dݖjwLj^ I~eca-$ hH@XpFXCVǤ$`4` 6C6z; LיNcTK͙(qj-4wՅP'S'&GFͣ˴`DJȹ8dX`ylhzR/w|4+]]ֈJs)u-,FEG"$V<<дXA2!""HvD呯W]33EPx㸍s葾޹c Q;Dʎq t؊bp>̥*D0Hz i윶dؑ$8nd8ul2NrU9s!P| (*{4D$BP@  6>ģ QObŭj!ZiNL?(`V;LPˎG3 )jU*+]w^L߱JZ]ԪRL0>Y;u=XTc1Ƭfqta|p5ӣ!pnnm87'\)kƕF//NHuT{r|7̲%ª\ne h(|z'm>J?zrytE-ELMȮf)oaGNrұ5,5H2XhDXJ PIn谜6 G%aCawӂ"R2ŮXRjfM-c <9ꨆiFHM5 TP}1B#ZUkG\8pag̮*l;2JlgȁK)" \+DSՏ< MHS"n`H" T+858F{.IcB7=vj)\L*[ L2ic% J2(`it~֯Gb\#',V x'.UgS;L!+qnhhqIƑ > Ԋy%|k}A'5ZÚc(BQk+#-Xb oGXRJ\U5NB0:4uHF\?1[Qp%bZ64V%1X( fVkCQ~7s2@n-]%BgL&B+$ g30*_y(./N)Rc}X,t}s]vqBeƈ UOfљ%UY~u*eGҟ (Xgӂtb%2n*ȸ}K睜URTkv7=luWp'qI"`D= OJ` ӻniV }QD|b7)U%~-j&a!݃Lhǒ Dǯ sJK/D{y{#U[ ʎJm[6ؼs[ko^.lZ VrƫFuj]kg!YO甽5pLQW+u1b}1pq"z959"7tō+Ldo5=_㸕b']WrK}lWVi/rǛCç_$=HWJ;=WvN)t,eH䤎r+ #'eB;$d!I8g#Bֈy VJ^iP74 GG PV(RHn.idFE-/8ĵ5)yv>xt:zvx"M|. 0`gt4evH">/0 -JAL \h:x扄%KڡkKX!D`,Ncٵ̕ZUe8%9ada=DiuRGHPa/"&!Q#-6:  `=p}p*#0H]G, @1UD kvXi(Ra%S}݄Ctґ5rDL!6x@$`* l- Rttn(jI1+f7!V+ &D/ aʽ$^`[ƓE5j=6Yd. YWj_Qj,+ֺ7k.s飆f*y岓R-0~' BeFQCNJ%#"頺>/sBˆcaiyJ!Óe&;`+{<F TʡCy6Xq㙔J[QZAw,3$nSSBᥦ20!A8TcDž1h6gN܆.cmMّu4 Uߘ,ݷuj9I@L&t%[>B;c܋eVMqQ`iYR^]vCθo SZ:k=÷5s`͇E,Z5 pH)d:xkԼ` U蝄γk sbtV(ҰVaX-O[c=vbĭZ[>?`E?O ] A#O{ٺDkI_c755wNԟWu|EDn:Ab,$*Q;uN{;3{0,:.E/:Snū'LF_\+y>-uOλml/b:ױ^i[13hdԱ)whabF֔{)~dA0:!,7V,ɃOT|DzA S8,ӃzUJpYr1Ry ׊NWy)%HE 0n8B F2H zxёeRF PrFL4m"z޻xŀ1KrRX+ +2]Z:3IbB)7pʇpB]d\<O 975E) SφRvqg&} A֊R⋏wxTZCEDņ%':t >f+p[GBU4 Dj22{E/*(paU*i X>J! ”1*#"PʢzĆK݌dB7up`3c?. EqudSʷ`/XGCF,d(- A^;h RH:G_(/GFU,JQ4yP\,Ű<ײU/Or7;mALc~rnڭ =1]j͸xE;|N# c rJ'kz^q|Zmo}I;s԰'6hέ_^υ3* =)f{k{GS ᇡy["4)qJܛ YhYHB,!¯o古'/n]Xڵ]aTA]G1 }VP˚ai8q7oGV|a{ױsR"L = (6ۮeZI+-\wU@ $p~J$"]-8\Ac.R:NN3G^CiD,'/ xSB>&FgEVu2hRp~QCH*1$"GQqqk2{!B`bdtKr󅂤*lT A1 P:0 4۫2*}̜8okNAGĂܣ0hɣ"@QˑDv!/ZN?5$<ۜ!'M=%Pl!Ph$T (/xpq5ąkE֑{"eTrqY_%T@P&3iyuE܅#3NÉQr8[W_;g^1tOD˔LrK'[rxξ"r{6,QCfğCB㨍;rdȱByBϽ? .\@@ŷ*Ik~qiwv%SZAQ ϲ-fńGuDEfٶ[yKK@̕yw'\\$CW0<0$U\k>/UF|1s6b[ ve7sVk8@Yke9@e5ety-hݻk+m{wgmߊOjۻ|D+AE -xYȽ: T~UFcv6\+}]1 IRA&Bi7VbZ}BRL:5 $>jukJ̇S׵ogJMtҚuYAJ6ZۧN,3K>hixUNչT߄WYSn~U| ]8vytB^KZe@O$bۊ\IYٹe6qE B~RpvB`l5ؚJĒqx7x@Ex^"HF3tB(Fb*\:h㢦lѡi葦HPRXgHC[ðYD&-J4d-rdeŢ$Q$7 ˌN19%:& `|`);!aT`zDlfT̈#&6#'Rp ;eJ >42.Z&`q7Of:d\R8KURƉp n$G&VFgqaݘT5Gy [KrQzi^|5婇E,P22lÛl&m%WUM 'XscT/L6<9%8gS+wPyL`m.%,]D:lX$2' t*cvC1uM{X,&x>`E*'pۅ ‰Qq5d:0ѱESB,>qщC.u[ڗF X괒nDm3WQ$S{J%v.Xހ) -ldhʊ 6\S $\˪l3{N, < jjK*s1i,er̳Wb<ú2c)u.n,bo|}k{.vSØD:ߨKhXK)=ndCi:>]0bEN )u]}?n_BEQAy}SիkOZyGxW(09ij$KP+FE)gD˵m )41Xe"Y?>4kn_l^yhb?Ϣb|6YPzpW}UAƴGYb7K lN%`$d011E)Ru!%eƼVD5#Txs x8\L½,傾zh%+`Qe8t}8|VVZ}ٞP)$YNJ<;\ 0I)4qP|R]L^˙[ Zhr,0RUjtX+ ygALE"y?'?0Jp%Vf;{/TVb^O!L t=k=u0FL$|PLקOm\IQppG4I4M\w7gM)MFXTP80TiT5O%C!'Gt!WD兼SUQ[`~]Jxd$n+\LX\QjL.eC3y0wP8lV*)qz[Lm*[&6(Y)g5 L/"lQ j -ѹ"v 7j 75,N7Ӯ`(9و؍_F՟_)&w7/L,Kv`5Y_.- ,&aZ¨Bk5f7+ΩqU|!uQX5Q<-:?g33lHʼK,X􎠁|P8\{ZY2ɪ[zz (Ifni8HRd|XYsJysxrNPRZ+vWsk< KawVìv% p}!ōTFv \#h@>l`[pt[AQFaqq  $I$I$(((,,,,M0 4Ë4 80N44848N84O<448@?O884<<8<8N<<<48<<<;?Ï?ÿ?<?<<^Z[nٷv +QSpt4,s?/\as|C6.h4|yA[`6gMZ FK49*5V}z~(@[󞳮N*( dPPx$+;|;:~QuaC:2>ԉwwVrݻ!C{H96Pɒ<۬+;_wcɯ,uw:vAj(TV]w]^^WtwVr󭼻j[_鹷NO//9׸ҍ}u3/a} Abim~FW3?IgEn;3ivΝ?t|ߏ?~e7#{.9Nwwwv]_~{/:?n `sfv?y}t~3{:e*d.tvo~}ʏ}s{yشa/=-ly)(&Jw{ǹgEw%vs[U+uk[}_l5{q\t<| f4]1i=̾g߶\;y߷׷[ϯ,)B0Mg]W{1J}ۯϕ~~ӾS+\}g]π=,K=!Fstywߛ}W.rEoQ۬6vv}_kS~]|lgIv}36}ʘU5m^FeL;o}Q IWk[:^uE׃rTׯ׭ed;wN'M`M/V '@ Av 1, FnIv7ҹyw{z֦ $: 9un/ކ..7vmzt_r;u_8N>Ykf^dcWJ,I:ns3o鿛jf{a@$Tp <κߞϾs~{_˼m;;y"wW/){z;7U_~W7/?s䷾zYӠk#IX96T}kfh}ozƢ{2+ u?.ses~Ⱦv`@T.X$@d'@ۆAQJ.g}w OȞ0T( ϼyZ^:E޻κu!}|}[ϫuI ?W;rl~]۹SuRAPGν?_&a+ $u ӫmcu{{^˻w;]\-=C߾[t\ iԿY+/>]˟wַ^~fuړH93tk$\k3Јx  :RVުϳ_gNӟy7NuqAw{ug V3/]پwݟO|:v?G3|v!X~_]=Vn_*lo> ^̽Լuoah/{9wy{]w? {B)lHy`l.%.?[ν[STJBu/__;QhW7ktӝ<n?;]]#mWzWڠ;oUǛ'j.,6t玙 {7~3w_wk;,s_@> @Z@OEwYD-;3'#֭<˼5h|ƿW{y7YZ ~|DƕD!%⓺__{]wysyv_m:Ɔ@V @+XY%dž'4e`=`d @,.YKz%X@:)<? O!oǨaƴ)$VNuv`qᕨroͨ o@ &$>_@W]}^(joO!p0 iPj[~ߣ\RCGҦt9v8H3P ɰ=$ނJmyVP CZP0Pr{HǍˣ`/|Pd̘О jhz4/":nA|, D+j{rz4)'X0@9 Za:` 8:lz7rBn[ 객ۋ(ϩMqwcKR|`~e3`~)͓WݠBO o}})-W+HO+@Çjj}y:lz%h"8\o}ʻﷻ>MEƠ @6?w߼\*׫q-%iͷ~xҥ1%4AwEv>*G˫QI} \%?;]N(33'X@\jP4ucE_pxYtKQ+aSS0T3Fu#uP|@l;T$#EYW7QF/0eh#Y|U@(ctJ*'~|.mNPE谸E v`_4umߤ6@5R2 c_ X`E@8 E"?ڱK@^Z | ?Aeo3&|Ѻ:ZdpDh+Dk + ȞVқHKWdcQ{c c!.ww[ۼE qb:޸N~]e*=^gP Alh6-RԵp*҈?:ꍊVj]S)D樭սhĵnDш2~έ|QP(&sٲn'x:M4 8.@$/7xam0 D ` J&`x45q]S(m | b8#A@2 Cw6 :0O+; NR[J\R)_:tGԷ]߹ʳ&9Z޼2 y1T J LL]"c})_k-j׋ۙbI!CyC ,A%TOD`nPw1TiKU@@IK>_/@ڥ+̦S*:!*!;3K *59}VTN8)wݴwyu^Flj0"!#^ LJ򢉚1nnT5xC@\l,X$5LJa2v7"*\|* CB47[`Nv 9H(`X! zO3Ӳn|9Э B0Uu/o?→yt*`!l@v2M/KL!,(2 T9)Ѹe`$(-ĈN4&\eJ#f}Zvutog xUFBZ(6X(0`3NE@A h <`= ġ$uԚZep 4EJ|PLj9Qy>9ꩇ@.{{w>Kw@hmAfSN*iȆo܃Z g RF F!$)!Ma(F#iFfe3ujW'ջi g |j*H (ĚL$&2Hpc."J2xL* kB3}UB%L v5HOFU 젨Lro\[ P$D!X@%,l!.ѳ@Ԟ6"jÃaDG 9bwR4&Et7$N 3*qc'2# ԭcD⁰%ce4l0' `Ե !q8|Z %>rו5ǔ@Ʊcy}oa$qÉL"26I0VlX deLtm@Y]\ 09IVXܢ2E].XA@q 8 i 7b Jc BJXŊ@d,a@51b@ՒA"H00;`0Ka_WzIRiC0By-1Y a|@hTdC%m+@f EM!\DdtP)1S Ʈ jUY%I%N *Xyci!=Q4ݤ_IԺ)g r]{-hbN]}OyUPӅTi/μ_ףؑ,*LD8D]촳w]%.Tç#,RNLE=COZF[4&xx:-UBdwU^EuOSXб Cōa@CtSLչ 6M> B/DU$qH-O0isIn"ўr15qފ11BbXFI%B|O5K\4AKG0-:82Wb6>R=(JJAtȶbH9Ct{5?͗AukAz7\:qRCX&0AA!ݸF;>y)}-[ԉUdf&%c )ZLh]6?hh 8~"p:iРwֺb |T2TP@V߄!\%F8L# K юЗW5]Zu BpRpȨ%4,18Ӑjs\I=Lh/ 11 8bD"BbA 4|IzS1htAJ`3K޽2iQtŋ')TQ6P =PڴQl蒊 2,PGCͬl1Yju_ \V'Yhy-b[F`&fK1,_`9KֽSq0<5E<-7)V 9hxqS l9Uػ!:OcJۖ~ZkboJ} F` m>]Wc/#[MaZtz8V*BK Qޕȡ䥣(*mAq &uLX b 8 0DK^F/7rZ}Lu]ia#pJK)FJp3eo2>#CgQ2׾!֣@8.)h]’"!\"`IÀE_MH1$r^~sa%C #2|3@7 ~"2y@lTˑHCڔb[U=y@ޘW@J'<l`2ib" OSp=!$#, #a!P-B0QH>*4v*^ @%,M0!UT76QLC(X/$jɒVG("b!ꚐgDP9 NOW{'ssל5NmE.9Pf(.Hda1hR`2+;Ds\S@(JޠwF3㭉T?hmi{Rz_H蕛lf%dD`&8PTB>C]~Swl߼͈& D₭Z0ԬU{{BoNfM3.Res48burXh ne{.PftfH&r=5N+ҭ1JMѾ7fF4*jY'dJBl2UU.Q+)hJ\[\VVXl?_j?'Vl4G2o'a5V(bcǠ&ֽ]{%yRFeP-д̓r;gMTݞ1T3PAs՟khh]!6P(˒%m)ilj, ZN/aY,ؿh@$1 KҤe0e`6KD#<^'!0t_Dj 0]Q N<ٓPIfi)ޗy<6Qn䯩mx`nFb,CL^UQ%hT#B3uDl/z Q/NCryF4KYTTe6qqPz|J3>!ENk.?1QDί2 }-y;7P@ڭ%s/XH?$ \zimr,smf&3CF/lDJD5m!,!͸!^ƈ"Aƅ"Hȸ1N/Gy  d9C$twpŵ.Z^  ȜWtUu+WŲuSlz `*P咉Z b\I5%Yx*)Sl*+-w&2DZU-6Z/Lh[Sꔚ(X5 J顯! 89dV3(!r&EI86>!yjmɕ-n-,-n gF"Lq!p><! d32lwę'GR}6)0͠`g*`%%J pܮH'zkNWeX"wBF\A`&Oei*u3`+kJ%!yQI= PyL)Rk'V7^l1"F^޷o2z?֓V)0LżL:̮|)ﺰ*{X&vOyPXY_߽^J'u3SȎ8ֻ絲,nѬV_ wA>OJʍ"kp}vA|Beq:hS>:-oTd`Z`S>}Q. PuQF 9Hp1`4bDFM(mPM5嬤~6vlJ``7 dUjvVAW+2HudX\  SЁ(Bl!b TB:JX/jF4ڧpb y~핝5qy*,!66,6F[O:t8Q9?"0*:rH`;!p{^hǖ_i$IKi  p%"8h6P`٤~0h,Hp #dĄTp Hn6)?Q# A$@#@|h:S+'08tsŐuChTLPN(64ק3bF~0HpQ`F5⧽^mkLy2%lŐasQU4QKa"(*;!.BIpCZ˓Xi~T/Lʙ+X_!C W`<9Z.DŦczŽ65N{ijT >|XpˣossZ=Б 5MņD"qY0Z)L?.w?woYiJl1:Soa"ʖq uTU+Jw\VRN/K\EWFFT-;3-G^pv+jVK]T @!VPi!՛)L鐈Z +MCq.Q+^]=Krn܍#:ةaJ'soQ0ܥlܖҹ֪%@QTe_wo+ cjNUJy.6>d{GulyZ6uDve?I&~LH(V(Ң31*!JDLȇFQG^db~j$[^V0c jZ6˛! XAFG/KhjSodXXk=skaK#dYꦪta72|PDPiĄ#>dl'L"`DLT=P&NsS[sw&h,K! J+ 9M4mRhϦWЇ.Zӣcr7S׌;bJ<XC`" aˠF2ZfTkZ,n2 Jp&.Y| &{$jjH)NBb(2Yc Z08:>1 rB3D̒49%xKHȅ g *p@ⓄE?E+ 2Rjݡz'D"bHf?W8kf>nwF( ͊ gl &8H&(]*fI|\h3*sv:d]E'Se}Ƨ4Lv#=Qs߫)559H3szXVqKhIaP([ &Ń7ؑ^:694ث&غQSk us꾽;m+c,T`Tx&]ZҧSh3I=KpYnumyiȔGrZROy <~{).Iiqˍ{iκAr(aV lէ*(XL#hL}^>l`el#-N[L'w oJ>TmMZdo]>vW؛8}e_(YrڗM׺t*buw'i}ޥg1wZιd궞&2K2pk^> 4挢Bb%"kL'J(B4qY0NLJY,K>76 ^ԼNzud!2-$4%a8G& JdX`9G:tȂD.% |N~y%&DRPC"V`#..xQLҢ@R 6 $IppLj h24vvCaF5ar~ h ;HƂU`L'Nj$.F͠8\&z.hmlVہr֔<2d G'mg9ByNa(SaC`T$W q8T " M$FAD䁤U2q9cNn 12 /`ZMc:q|[BXLb%aH|%4H, rłN0 8YFJȅ . &ENYTڂND3wXΔjX:.3޷ѩRSՓ_M"681%t Ճ4=Z./NfYrw$Mm:pIm q hyzdZA~[ -*QRMKY%ІEZ&L]BfmZpp_VQ㡵H4) *)#ND# ht/ bi6oou]lHaQ?AVibDFItPocK3 >FK7S7ƞxhu٧%R8MW>])v>}_`;4>sf aDՅg}֕Z 4}B@SRZF촭A R#^&eɧnSA;b8E U9 Z?rR{EqMW-?Yj*.cU4ͳi=Gi}ZnuvoG!>i&@9ܪ$a1cc6Xl$F%[mV'\b'##zCB5~u0\ ??ٵ̌apzZl ΄(p9I Fb 'b#k3&JD)D$*[CFDL")J 3H`(lpH΁@Q% E"}#;Lk)uԾlxx8YQN Qw7 fF(ߋH{WۍS?ZM>^JN*eNFjtnV5z#onaӰ5=ɑK6Njwd€xKTJ @`56j ؙ&5%!h8 2k ܾJn iTeڌIJC 6(8AA0dF6JV`YDҦȜMDk>GyB)kgFDaCRy!ԺBuK_*s4LX j;2?Tj$ JU~q7;-/\Mhǩ&BNS0X64ese\ 2SRljFPg\O=ܜ5rS=H [b?.Vt~6[U,&OK8WA-ƪrSu/ӎߍ+iVk*U F߳ZfS݇f84\S.GF,|3 >[oͰK.J[?06<_ 0bܞYMyn1*Ngym*HSya2DFD}MlЬxO5tf , Rpxtz^+z^I%iplf 0M]a+s&$@Kpm!D:ѐ$P64$xJ`nIHg " 9R7Rq]S0Dpyh&N=&b0$(lAt(tX" Ȇ.KL'E%2RғcsR EA*:DPk@Ԛ<|mDVJc3{0? ֥.PXq$&$yeFEK^Ҿ*,EaqZ"(Q9apm PlcrcTUE 4Av/s'!5>#}ⶅ*S|+\;<`* F&%"G..POkIZUZxv!GL*qB @[u_㨾{s"nfqUcT.) 4UFP4CuU>MJ~Da$WVM .TV EՂ}?XXKq_ zYƒM3VC ;HoJfF͜@D!|Sɽy{GFEix*rdW$iO#%/!}OZF5}v>7woוsS6H-D`m!:; =t\AsױZ,,pDn9t_$f,Bf0 @M'f7][M$tPc?wf-MLKJމRZQLu~b ՟CD4Qڷ4Σĕ%^uubVMbإEfDZIm-P@-< hOd!hv-7`5T `^Dr+4kd@\#eB T%lg3 uD֫ eFS*1   ]TL?RUuQjYf?EF hɲ226'ȸU&)U L! ƒR/9ʎAY}XQ߿wwOPdbLf 0 )j'DG:WJVmUeVtNQ>xbCY *o&_*gz1fIJNi(!없tl*d)Z~7j6œpuoqJW-|WߓCBJͣ)988:PT9@ZHҝ(E2AICE:0^Eg@SY<Ù, ߂bJ}_['Ȧ1GY.0 p@!|0 Ȅ!S"=RNԊ4Rdn&LDt P׋ $SF>u7a/ (/:-K&ߛ,oYX/U4$~/cԏ^Gku->ȔЪCA8䩶I&~%:zc^9u<ԺaT:x@`dG Ijl_7!k-|ugkJ,|d[>J{I9v!C>m:Qz3kinnQW~[~,8T^Oy9oIoēKcnb̠-j|޺F~/DuM~>cCl8Vj29Ehhz-qUJ|s\#eD%QXtTZ=|@MiFrA([ExR DVeɞ:ۡvs 1~4& Xe<8Gm,t? a#dK rbyTc% cb A " X@lzR //x~1Yiv@(<@J.<^6JUT}{u9|b1i'Ǒ"ţ"t (:ɵM؄WGkl({ߌ}{iT'Ϻlj& 6G敤uA@fq!q 00X`<FC> lC3-u`@:@b7p !_Qc(<\+AQTV{(DX(H͑A! e!W#4^xC`QhbX:C2R2Ģ2wLD8j-PL]k>]{E0Ѵdu}3"+p$ 8ȁ= - ͆<-XI6q`a0IJJX9 j!./?ro)U5ĶZQ Q&Bid}Xʩb&*DHt5FmsSESЇ_wԊ_Ͷ'^>N`u]9w&:;_S]ڒT>!T͢0nȞ'C|c0ʧ6MkJbS4=pq֌Yf޻ոR>wo7|*r& վ6Ἓuj­,9U8Atw][Ss.!gQ t*He-e'5iU VŒɾM5U6bө}Mt[.N)ܭb,C O P,TxdK dݤ(,<ҩ.ȃpX cBAtww5@}㪃[CϿh>K䚗/|JdGZ:6#2#r[ tȂ (+ɂ]J-2E֋ltm]Sn qi)i1""Ã,uI#5=;$6l٤;\h FIa[ly ((ꑞ,&/"6Dڻ[Y&멱m=~i8]D`m4)ƞgoi!Z"TGDM*$LVUU)*rr˴tPt!&pmKW8SX<!Pa!a$H[L^ªR5= '"&[9E yN<؜uqvv5V[%bu+SZ7HMC{<9F^%N.ĵc#0<׭|׷=ٖKijӡ: 3q̝]ks<8h;,d4xΛ1o7mz5 Ĺpl4I23+S5jtf{/(\ks]ݒs"(M#( bHTTY_48%Q\ۈ@ 185СBA,VA`jcݖ:K02$E !ga8DA8|E%˅0ahGlҥKDIQV ƃ[6\6Am2D  2 UCƒ)̸K@FPϏX봥-ܐ[zu4>8ӣq O4!F-h8=։@/I"WxJ0AV4lHh(ԙ4^g LC Β.0\Dx1Z[9ގ❴H4=+Cq\xS'jXԙo\FF.rH({ԭ/OVJq"GhZC" iT՗v̨ C(̦*JgY} !>g](*+_[2_$N(MMR9@[JEtSUb !:K՛E(f0}L ;Ac`b鄭+ h0l^=E5MK3X}}~ (iː j{*fcca_Rh´:|!7t1${.0DR$45g|" lTTbdmCTFrC=H*H%(b`^I _^M6`)P\nbBHR ,^lB?V\?c}r,=%07hIxIL쉐t[i$yx4dZw$MXʲpa*J? :  Gx ̋nbuq;P#Xa%DXT5xxh+,<$ 8X6 ZMOeIˍpETHx^OL*<5DlIw%lӅ$LjSޅr4&B`^e!i-)ãb D'M \)EILT >ɱOa:8V; ~{Wۯ_sU%rP^&A&B֞=uyVĞ -)٤|-Nkswmif-hz뽴RF:Ǘ en}^fc=o4&Wnu©iHs|_xIǖ G<^MTFpBiH,5jw6UgwG{녿1Ǔ.kRF2:v`x_DAEQFaqq  H $I$J$(J((,,,,, 00 04 4 0Ì0 4M40Ӎ0Ӏ44M0L448ӏ0M< 43!wnG~v|!i~s;;/ߘBeT u݄:[??~o%:d_a[!oYۙ-c[v|qn(em:{y_϶o;;'K;-!8F?]Ε,2L[{܇s;߽mn^J\Vm=[ez_{h~l.SJEsCS%2χn9 K)sHBkX˒Yf{mԿ=8߆__?:2C{khmv]~wfwvns~^9ގC?߄29V}mބZfGo67v1*}ong/B-CeAKԹ ww7s#s C|_s3?w72}b9kwܶuC#ϞW_:){~U?}C2Q?ݗQY.?]?@ʛ Qa)Ihx*S Ո!?>Mf:AׅdI /!sb'(sv{frm9 ߄Wv0~GB1 z\9m,(+YjVўN0̗[2-,~z]ݏon!߷}vvt?k߿w؍xw֍}Bӆew^6ۻ)\g]cؾZID~;qeGz(>߄o{of~mmvi~#0r_0RԮ~&orsi da.~:㻒F>3MR0?o;rךa>Z6jd3 C:YI67nri魑/%Bᡛ_u7ȭ<݆[B_ؿ~MY4Sv?Эݹ }󲱭y6;%Y߆n9W .Jgي=o9s33sfv|:ޟʿm۞!xg2z ߖwg:Ѽ~eyI˖׾nw׻^j׺wo[ǻui|7swod3?24z̫@n)|ƙAm9:wnHRe4РcvUxL:7 _?m߾Ҕ[ovҧ("n߷ZVJyofs27޿bٝo @ |J^.}?ЏFs3o~%mY ?3~9̓ěל<%|vzo-K.Gw:5G^z.V-w7T*moCz_ ߆nl3;zuw`0!0nGSqvWo퍯\[|+ox}-- }`Ɔ"{4yϏ[)n&n@;H- kO/gf ܭL]j*{2|#5yWzٙ:y fvfC!܊ ݟЖ^}·3f=wN3!O6V7߬?wN_A_[~>? fu;Q9;?rgvgnBЭOZtVXw3! ޅuݶQ%-3s?'}w-) VT1 Áy5lJLID`Ȃ@.+s<(9rP<A @";$^`*hlb0Chb#'FTH 71WzUjz&+rxцds-/`g - {ìEfCh>ʰ^IlW@r,B  JD4*NegU'lV' , #|ˠׁܶd1e,#b@u;}\U{xHA|`" `p)p|Iqx@=BH h0mP`@Q1.T0\#sM@8'^ 9{Z;7߄bB#$O"T;uC=޼!{l¨ %:NpJ _@N )*?sΝOG=+}s%mhGeb UD.P7Ձ `@眦soyt5Gh?"oML`O,,B1:kAd 0!HZ~ EQ€U #2X3SGK^0L|ߖls6p dYdlY% C0PA(&iW} ` SVҒ((`E 0!jbţ*HP$DmދYW_̧쭭;_-l⸌ 8]S>zO@3N|j;*AJ 5;@%0 LA A \Ձ $TAPi*IAoI HXV7dmnG떭w3+#@jߖQ0X_O'& "P0 x h &ӫA@2 n'Nxe_wnvfno@z~]]C{y4JnAVH%Ь݄p +NF걠͇# QsY;vzM^(ܾ~;^͢:Wiuy{QLUxPl{U˞e eS|TV@$%d4p;<I)rD050'rPs A*r$d?"̉\?[bhb]b<onGg~d=}^s;9PMc񴗍7hJ0 2dĺܠ5CceE l (U&$?gJJJWhLZ ?gC8)B`P!Rx$ 0h*}Bou`h0#7ڿPRxppzIy#1stZC!H $+=h0:f(@d7s3a F7my]݃˛j 3pNz+S#%C?3)`@$7*lʫ*൤؂u{-OUR p$<qxXy$^\ $X<}p8"4T`p'ޥCցd p `nLh*=d,U'I&[wiG>JzNyvG"c7;8?-3(l `yU U,}:l!G V]k -@ JZ-GLh_OYntΰ~K^PB9@X` B7D[qv7Yr( #b0pdsY̿#ͬ|Uōy<׆W΄"ha( )xXtd~DWv˓6H`ѳ Cs7w?336gCJ.m->2{m,(*"-#h H0 aIjF+2f4| DŽi/ߪuzݶZ? ZQSd NC@EH% $84q뫸A*AP`:#.0*K pc+dj+8q\D13 KwZc$gJJT#<` ARVō+{//nf|~,`^Yޭe:8$%?Eh<.Y&V$d!8B@Qa 5Ҵ=~bOb"@&q$_Av@́0)~0DAYHvT^Ʈd PA]|kzJعB-D@s L$ږ55D@ s\@{L3 BQ_a~ofnC'C ~1Ͼ_BJ 0$Ic"%Gt^4I %xb΀k~F݄gy79*z7n5Rt)VѪeo5 9MW"Zҁ{}Pf+^i*\ $xr/ kQ^G˱MIPh QCa 1Àn8y ŠR( I9)e~wSmڰwzJ+z߼qlHA $9+wNH5$d@`X[W4 6 vQo7tMnk7(EǮJ)e ɛ ֈ'n/Cʆqz`|ӔHKh/Q@WV n^s1x99-խe|` ZHdF J0#.+v6LN%)K{tvμ?#48@aVՊK6@aыRi9Z@|0AL{WT:: ޳ ս͵Q)l2ltk*}M4Ld ̀$Ne=nfnft; ~gggsn;/YDes8p ,<`jJ nJh`;*Rwk6TOANm>,R;g1wozŐ8G`=!܆ 6@Lp(%ic0 Q4!D#C㬺K`!+q$*Jt B"wXf1&Dqq@Vu H5tS-RP~3yI "|N?r,2"A X|ɱÑGɗ94qc.<-SҺbꬶGoϺF~xϾ_Fx(}K LtIIJT |2J:f}"%|5mj]Zpf >6W?6U{;lFNvSIz8K/]͝4ysQLsuuqhB*,ӊB_B/.SF⥅]Y E=pT,jD)pkʟogB9 >5ʨN~jƠ^պ _1`"O~gA4=:k1<<Ƞ$JJ\,ДлRjs4ór,哜e/A&) ZI|L(:pHA-mfwy-=JBZ6Ezb4tIa2< ~߬?/'ܯAUͺGzП~vV_g>wM"h&Њ LDSGcj(5h~B ͋S91ˉ"p~|>.jїQ ,/Y$D+q#E3}:$@U!)Q51WJ?PAPx qh.8R ~NaW ;~`9nW.%ȱ>uZ]ig'xAs($[⌂4/fVTnzZ&y?TQg!ߖyǻ$e.T}N(Qzn<gHMi[j{X]ys2oqos_a=΍Ȱx.!"xɴ:AfWtdx`/N{}ss*`ό&taqͧ\\+?VI(8wNQ<,"`Ehi.(ZbT&8yznqUT=+wj&[_աy{߆MǟzY֨y1JkrX IUXhI' )xIwQg֜rcғ(^VgkD9WV:szO^嚔քFʖHJ͞M, 8 y ujCski g}NbZLhmŋEUN99ZW#є9jfJ-Uo?qe%W/=᷍/OO8v,j'82\+lӑ*4.ÃT>'vUY9ޫ7~Z8^v3 Ykdc춓=}Ir/>8ZC`]NM` C@lm^udĨ&o%cx^IH&AhCX_2L5y{)H_+Jɂ,". iJ8\-`Ծvxo@@q<\ 5@Gm۹wadIiU6'u؀KƑ/m '.خ$1ӨId`p03t*UХmE;D'yQ '7m{6y N=a og'#ZIU&8b$  E#gpQJDsyh|~G$yDD$kh'26picp7̏ DC*Q7kiBAh8Nd@J닣8` F""A?8͞q|VRj@u MΆYDM)# \@#x`> Gr6$-u o9ݫTՌo imKjmse_o/׺ƚvGFʢzk/-icg,:0+IH2y.Ƭ6<*? J6b R ƍTkQ\IMR'e76XfӲR$ܨS(`)6sTҏ Dit鎐#u™k^I:G&nG60T.6S>caN2B#ێLZ 4!]),{ohkF{ aL&m#-'W{mO${拮iD?fe2{ZZh#JMʐL5>ݪSgꅉ@ʆ Vyd#U.؜!,5_r[[ BkmjjJ|Ԡl#T0!hP hH&B7ȶ4A" n'J\a3E* J38ԯ'u>(u GΒE,Q*r)ijqвuKBSx?(Sa\ P~},6:af*/l+1 R8¦ϨѽZm0".[+(^TV+܄o(jZm݂#ʚTɢUEcsEgI%e826Knžb ۋºwmi˟Go\9em+liǗc\<}{0 M HhT.Dv9R * adXaJڒA0\)XAbkiS{3<څ%" 6TK19 bJv{Z"Bj"2EUXG@5llDxbbP*<cAl9cjA},Ãߥ^xY̸P}ow^a0/3 &`JG,ӉQ1w"M%xТM`0g,1 IG(N6:r@Zd$鷧[HL l%&-NJBC&FrsUjLS80>$.>NԦ" ?0a&K-lzf+EՋIP*Aڔx1Xc`2DPwO[P/mx`7zHa:'b)$QBC|4D锟C C.64設LV~Bg$WٞmF*{5Pjx\ % i OFhDZ M&9eӖc)UQ@n~>KQD>#j]k뱑M+0bϨbjѾKk7eӜלzov*nQrq_a,arm({_1 㬱bLK'z.1~Q4˸IYsuxR˓UWg}WJ7MWڗ ;I7}k=v2Sz4M#uiu{ǰS_!lEԨINeTkBP Um8~32÷nR۲^?dq5U)}MV2ۖ>{I[* ͓QHޯ"栝(}"V־A[a3榉]z̏:4կ ˷aصTN3xdpE슇%- @577 5L/1!O5TAu8fC2S웟H2-P60eS:o.?fo[ Gjٝqf \&Olمq-bcC)b`z# h HoPh7ߒmUݭ_mE}YZK`1DHFg#Y ;kHݨBJOu%O,kL Z챞n>KUO5yeo}{7ur xY#(5EwX= xpt)FYמ!;Ds $^phYBdp2FMHkeC\5UbIڽmHM**:GTq}0/|jn,ܙSwI@5~d:/(U,aaeM#wx%βkw~_لo<ر/&z9SvO2-u h Gsvfi(KUםz d۷n4QA7Ǣ×̇G%|UV0z{JS ?w wq4tM\q1"0_ujE˹^ ׫0f k>OR)ªf9hMdbm|gׇvS}jbp^2x>0P'0V I "K 4~|ؾa&7$;E5:@Xz'}*T;5O*VL#F1 AfKGQ,VMFHI*ͬ"BJ|(g LK [o0 D!hR.9MɈ <3 Պ@a@Ċ/&,|QA dfJ'@ L%2jnyUMm:WJ'Mg$fÏA,pDch8IKM٫U;& 0U  5^1pO •-eО,>/%cvA1+8̖.=>xpb B8~ @4,8ѱ#%JWChGhY3CXZ[+W ZhR4(9d1+A)Y#LhQT<8ꦇ9Uv[__d;μrжi]OP1"J^@>) (wB-UX?l14҆7xD0>Tsڰ5+^zgu&ܫOXr7.W^1$Ubu[j˂tx?H!2J _`lɊ=zc`/)DğH BҐ-s$KT_=~̾~.h١ (ѩx2R|Wu$ Жw&#vի=N"?6]ڿ{s::'quY;TB_$O#aQ,.pM#m5oO孛+vjj^x/(LJPߖO< Y̋ꏛǫXմ'KښuZHV\;@=}lɔPxN[?F3#|5PN;d9 B@_γ=贰*X!ةK@@@TBTȭay bq%ŪRc:Xb4jeR@'hp# ycĊ^q5 ɬJωf c2 X0~u6kPQEvP,TeTLF6ٲ!\L;3Tf.C ?"C&c&HϋsNBEjK(@ph$Zs@kQ S YAy#R4<|eMd9j~QkXUYHl.㲄h!DU$,BiRL9e0P _뻏n.?Vdk^W_;wlC7њZbI&t#JHat3%(Eӆ4ɋ _4L )'KqXvb4!Dfy/!5E9uE|T,|PPH ;M_^Wx|W35y1g+1*>2Lտ?6 ie,9DłoQyweU}'Xr83CA.Qn<fkjEjb9Y):yQP?GE'B29GEN~K%T ۯ*긬G('oSM.5Y^)u֯=n>&AtF:_s9#X{snyYOڳ.| A\?"M2)9xǟ\[4oY;kncAk6lėp:9ῆu!X:P&3pG/[!M B4+͞%g,g1Bb"Ξ>^bS R~P Cd.:!`̀ț `%dH U X! ez;ECTB5Ò(JOUzNtS1aZ3+ _Ye%1m|~[7YpW.Ptfa;Ä3B+U]L¨þ0dkBXecAPPF<]6uY2E-$CV)-lPR]B: |K@N6@Ԋb7$"-` D,o]dKdD3I % P %r&d0$'Xc a܌ |7if0HKP@AA!/+sYQ/$B$ttӎ9HgrɗA kO6%$ 1xN٧.Y{/ɸ\J֍ɞ+;'.rfviP*d0A=l%s'&??(w c+ibK 9dP\Aun%k]9j}t/֊&4oٽ7,:c(_5&닿n-\a(⊺*N*~_ڭiƊ.&>3j[_ݗj ֻpǗOg}5+Ǎ>s>/ylh/mC8dk+aXtWŒhUUA&+9:q"x smrz%򍖁ƜVUwNyy6sXCD;|a? ՆJ HT =LҐ_]hX%|QL H ANT(4lVv ͅ|j?eD]'؜lR r`nNx,X)3H#dD_kl+ M!-FwKjΪѳwT?(@X$"T)NQ5X?@_Qah9j@,0 6A C_$ I  @n_Ga'jf\n Ȁ@FÊMCsRBsۡp>*ޫs+b֝hYdn[4UD+ EAnm6ʓWv!5&RK9 >)*XtAաR34ة[4`TRib"= -AfmQRh `_m-ցպ>+"\摲  A\ |bN\2V)n5x[6#m= lOjɯU2gJ%Y4BȂ g l\!)eG*5`n(Tn,E!l_uA{4mR?.H bz M6_ao*J~Gר`آgWlï+&'D#Uj($Z қl坬"-Ǟ*(Q'ߙ`㴣 uckH`F j ]^^]P!(l4R%ZtB`ɼJ>zuRZ.5N6##T6Zg_Xؕst2 ~Y{mfַJw_$0XtW>Btyyٛ+eMPENJA~{n=m!\#|/^~K|zӲ e ﲮtvhImTJoQH2 H4:8v'Z֭Hd0;Z*q YxXf;Ra|B:z&<'0VJ]T(0DA"-aJ^lШ.QLZT/6KE5HW?K|@q03I|0A q^ B8VLPIVIPhǃQ)0f7 cdƆ;AQ֠sou2bh6(4 '*,Bօ-M.ni@:%Jq&#l\D 1}pJHv\R DY 4 @tdx ˈ/#o;XQ|jPb1y W]4z+"~PFd y4JA(AY$]%%Q$`JxT7*i!cFX,HP?)dѪ*u a %d:㞄ԺfNO֓ 'jyq <HAȍ@2  @O`O*xtxE+h  cԯvׅNN0U}QƬNJ|jL򛄯DfAdĥ`j3C0GY1@xA JB2өFit}!P+и LdkCpVE/6YVGE#IyJo⥌6WJ\q <6“5T\E_%YC\/!;u{~k0Ov1gI%2%J`&3!0)à]PA0hC1qno @Ae o+!{\L}ʏoΰ$SI̤Z2S_aI䡳˾sI]WcYz fO%!Q֑?;~DSd˱1QXDSOg`̞cYϨ$~S?v}X87~gve{SXV@nF|T ഗx=lw9ų%?1؇F0D=R1"V =ꖂw$QtU kpGR'4! T Nz xr>RF~Dw >ɻ||xm5GT|L#]A5B{vM\Y;v6N U.!3OLþU&t䑾{0+:Kd.fqQas5Mo-ǮF}t{FGȐcX4>76G)vQs:`Y䐅Ǿq?i^ R.z3]bVS LYM`}K5', C|waaxMo oe_jB V_*qpHIHO:w=~lvy;^ďib1"}˳8&%VqJUP=\QM 1*ey1dZSaHqQhjsGŶŃTAԤ1T0peN'-Ů֏˟~㈱oš`ꯇ9CP?ڒ/ZHUz8÷g.y>hi6ʚ(R8V6HnyI͑*LL@zsN ]>QIAЯ . B8j-P$E+C/<砉Sl$\jTp!'F H#g#@u0fl:ۼ}q1dF(LKq* =7ŒNHHǁ@6+W @j0`< p `ZE.Q18JRI+/V(\ @`<~L\cxc:bEҔȍ"jw$WR'@:M}F - Oa\D#sEP<)&IƗN3' eU\ ্WwLE?(.)$!$=MHg#MDKAD(š2*ԛeŒ`JDKt,< `&LMkr_NA\j,\ZRLrp96P/Rz_XƸðu'6յN bjm'\mm9^UNʆq/=^q0*3)Jهj[ukeɺWi-27,k{_x^Ͳ{J6? aIYXF|]B~6n^eI$GTZOC篹 ͜MvhHlɣM,Ӧիƺ5lX|" ]%*׹i яAxnf=$ ý  ma[!SQPLj V |8|DF ,S{̈́7ٶFT$6dY0й|VoƋCPp/nph'13(99+|CVV tA.ɨ$$M<.+D!nNyj͆ZҡjLl:'@1)G0qLݷzN0`Tf+,I^?gFυ"ǶM?H uT$`C\^ny4MWĿ4+KB GX"Ya7*#1L3>2XG,Jn`RDu1B*(vEʉUT+(^+;UI14 4|P.X יU*ܭ Ӽ߆m}1232zX_\ź2T>D"':Lʢs>XARv{FZ5~6MbZ?*;ޥyz65썊y8wŢZ I#$a &$MZBHS vix6 [d!ͦW%t 5XI>> "KHy򃜿,R':$&+ 3Z ;{X=Wgm A=xy}U4bsC+ʝg5Zǽ3+ZEac.⸶}fgI:!-?s*QYsy2w.3tQM_Ya=s޻)7;;+;(L2xJN[HX&UW-_Γs}Yg޵EUXtpEɿ'w5kأ_J#HO -iyt~i+ABۃ'o4IKo hQH!O^l< !aD1%T+i b`צA@l``[Pb(Eq,hI.Jf)V[d{c"-C9P8A֘@@EL. M?@9d >T" S8.$c%V>JǷSV1#%,";B*HD2"XjV!YU+ ^Ud H X@u$sa5* s9,jru%J,\BA[gjD XAb/hJ2<'$5+gWժ'4+2JWq4Hc\'G\1]f ^Jj6|vt7!@)ρ6"(W 'EzY1hlk?CUmiEEscl6Tr4EH"Tz-Ot0*zU g%.Xg+e&Fw[3sSu07]]m',!OfqckN„7CBbxٴ$Sȓh)xz3 xul@PZE#m @ű>Kv<~mMsjPe ˢU\-EIv/2/sV-{C.[D <.&5|8M5e;Xe:a*>OW߲ͮ֕QH.~>H}o_uIdw_)% zU,zly=KB^=޻:uZ'9^T&Ē>6t$ЪfV^9Fk#8C|< aLTJ ĠT`:5U#Ai1_χ6c:b .p`0PdF2!$j"S2a!b*U+. L; c";Ţ3|Vм50_>*a: "rC-!ETE8>dhDQ`a48C)ц~5;{@T+!g}ApIhQ$`(;\K- *Vz#KZ,XA@K ,ȔAmpMG(;OwMaK*lԠAo7hZ,B>LǮ":hETjOt5(Hlx\䑿͎rڲDRSxB-!f_e uu& AY~ՋBVͽrŖK"Vm /I:nǚ*@"O }ok]}$qZ)| CW6>NVy3Tp$ʌ tXˆ  dl n uF-#h V1y5Y%qD̿SUHtǹlvn˜5s ŗӧf@<%)QW:t&t8z fOihG<dR'g< b躥C FψZʾ3z{`]9 B U!U&sboKV m#454UZPTzʞ&[ %n1tFy;.,ySu7XSjtRgdq:9 ꤦ#UL2M8TUsVD.Be]?sPr !Z^vo43ּHҡ8}%dW)1^`͘α`z^1y %AA!G@|(jD$E_S}: i4ä -ȈTa@s]]6AQFaq r  $I$I($((((,,0 00,, 04 0M4N4ӎ0 4L0N8ӏ4N4O8O40 8N88Í<< wp[{trkߗpϿ~|>˽S;+p<j`+wo%u9JڰfSyڔڿrw+cn{qwk'XjMMտ (JWbﭿo\tQfn FxbKCrRwwyiH>|Yv*֗w_n:ʵ_Wua^|  2y]?mMSzyoZ5B7[Q~b1xf-밆}mS:_۟Ww|foi}ǾnAHt no_}__ˍ{isO}ҽgþ[ϡyN^)\/)s~>߉>:oƟ};JXb؆D;ev==L232[/2(Pm;vf*6ၕ[f_/,4@~>din{nskr|_\MgNӷg{n/kPg9jwewA~g|:O[w(TU}I6"Vywy9Y3ß~k[weu۟w6nܚRq}iզӗt9^CߕwhWaJTw1h?&f6*YT]nɵ̆uIMZ>{ plj&:¯e_7IDF鏂J[߿[_y}/_|n[֭!7]s9qu_H-7ߗ7}Cy[+9הoW]ɽVkا3??/)ߐқfW7]=iwW_U)ۅ_Ͼ뽮߾_Ӭ]o6e]_} }f]_oz)Ӟk>zI^ALғ\3rk_}Q&;]iuQo?~fB)(ֿV]Ȅ<4B57ߋk?uYڠ{VݱGݧeq #S՞knma{CyNʷrcLwa`A$\p,Y+<*׹NZ?Oc.ss/w}o3.v]߂tf~h_gm+{{ww]u_뾻Ϻ]s.ƽo}(eܵۯ&:Og{7{7/&W>ww? Pij`vMcxݹϟ]:_윕ouVs_~W>{C]a[\2y[K~_']kk(9{j;2'Z.8rFyEm9[iH{5KWmr=Z•o6C\$ &Tٯ^\׶嵗ۛ[s)t_ ܶ=!7֟}}XeO'빗w C7\kk { RmX}bK=k}/n4R;o>YR Au%TGyͽ̽ϺL;serywsiLX~^+>v %@8Q5Ά"̀FL6u0@J"?92 'WX[(@ *d$Q@y w~[`,Oz|f!,EA 0,Ǟ-mSۤo&ŏ/; FɀYSE Jm{\#@la׽k)57L_/f]+ Z-=n*!'}]o/o=wwחwwyھz'E;ZժIHl@F>_S#h3u\:@ )VԦ(v_kb}ZoK4Jc{Td*v|sz'Vq8oEX ur`a4dF4EIb K|)Hq'*K@A%U!k2Wm3k-0'ƜU<k?֩=-~ p"p_rFrXcS0CP@)@lHǒ\np,:@ P%NmOڴnU»x[q~g՗ē$v(s_YmwxHCF AHC&ofaC0%th\ @b0 d9o쓱ZhzfˀȰ GҒł$nW(Np޼dv{x˷{Q0:Ώwb9y>Urp|ӤOZ)Ys`8{rs8JAt/q*jPl mfw}&f/,XrkH!IU"a>jX PU 8,' Jc=dp3].F\speADbh$H@g?"9 }Խ˻VWwp6 `9zu}mՓ/eisS-Rtndl@@2( _ /˷vI^rR?o}_SjOE'}~&v0JKF?gw: fd0A.nR )ʃxB><؃p0BSAz'FH' 3g^~n~^~g0fAO n5Mon|ԴQ @7@1U@ed+o3[%W?;/#Axa*.\VmǭV84SA8=K7-<..Dh 1Lj^v3An,#Ə.R]0 ZVJk В%Hַ~b}wKgy4'-@@%9ӤԚ_ӑ i:^<&肟 A9  5m}>UVIמ-^SoN}r+ptg".HOWg+3@3kxJp0@q"O"ԅ4 p`!Hr wP;tan+Q%ou:w}ٟ[?;6ko&#B{IJ^^wLFAMݨ_2jBG986;DD->1}uߏ_繀@1ZjQ){NRV7I]a~` =0!Lo8x-+EzjbP٫h`n:s!N:@Gd=LSeHgqo H`/~oSܸʸTdh^m}+%TuB'"V P: Z;ϫ㌿=;*U&÷~c۬P@`O FPخY vXq é$1rֲw=')Lq`(FK9 A|nuiVmުuM*hNåov2;k-y[gvsao}a}ʪO8tXzl3zWl1Ua@&@D?+87nR)<|nTqJF z$Ԏ1tPr<,)ETt&frhQZ F"v. Â[P;BK&Thӏw!)mP81t!IQ_q=-AT>;ܘpAv%*"A"HzBp>r7^qiE^Ԁ Aj a|hGG`ǕkpE pHڃ,\ !KR*S#3uI%l_Z_RX(eX0 /tQ|!R6PGTwh®gBY< ƇL] YvK n=G(NL\}+xAn RSAQѲ C6:*(AĩNQ]uaήE)H?gSKV~obcj? ,Ee:Ͷ~ a̒q!w[s*쑣t*`gm˓=6מҤco2ūRk2&Q{+'i- "K==;uRL`MF]V}O_"4rv\=h D<ꚵjy&zv2[Pzp?BDxB v(QrtHZ/2yHM`6_SmK@\P*mWh4-U.{J)aB9[?"2s9(Lg7ҧu5~hz XzQ, P>zAdfxE`}#JӴ*0h |q&/Gqi2XX%II!} "1 DAeh|&W̯G=_Cp b؊!2k!% 1aP6<*CYhy[gj56:ޱF[d}8ײ|eᥐܻNx)qʝLf0hNB&\)V*ŤG\bQ32HKP¢VI=7\3/2C_d1]Lqpj7!%U00bgan:PtnCg TcA F4>~axcm\YBdнh>Y,48l9 EAv%apC1X&E!ld'  SiyʄᏎDs B 4Ӻ pw\2TUf fPQ&a\{ *4pIy?"Bx" &":e GaAQDؾ%"їFpe%\;_ ׆DFEa]hĥЍ_HME.#U~az | trה06_G$Fk)B38oI=Z @?- :pP0:X=^'pJK@Gs/y0I3N N\ݾ~a_ϭ|MGkKNPdB8جlGXTrmJ>ju(Z_PHϓ9e|' $jmZ;.8A栨 ^t*km_FMA0ecAli>t RA/&㍈<%T&80rTlFq8òn]_W)&'j.=_[}ʹQ}Q;aEӒP>+<n |cVzԡ^㛲=FH-]'.q4#Vl}:qw\ae|, $Cjyj;x/sfwW}̜`a".`:ԪZ+-^H kCe/WEF|3JzV8/jgro5ivazKôkLTvQF>?& Q7VxnT:"{ %M4l&Xzec8N" 8.⠚d EA.1uC~7hDGD ¥>`C(͎ՂUeszaf"BMl OXC-m'F)#AX7߇ P7.p6"':!%PaSF"Dd `"iA="Hf EwjG &F:FƱu7Z5m^9Xљ,' #ra,EUNJY3e -6[̸6v,͙e9%-ϫpA gCUE3j)lh73خJ4&D.. t_{hqӧ&IO?%q_ DG:VTƞ.@paw@#u)R h${ ΃߬SzoL5w5sWx =ޗuiB/2rdTASa=ܣg;28 >/+by,r1idKF9垂$''C]}+3.X Mxg䱚Vkͽn)#RH[2!=~Q_a}[CmOQ45MJA@AE{3W&SB$Yԡ]Vjbͽ}]K7D57iGɴISHo_7f6k-Wվ&_U 7%ϻE.9T׵z]ݔR&lY+^+GcgE|ˍln޼{Wgw}zoTt T9?]<sX3yʴ+IIDuxSTRN+ةi,`݌c2@ k3϶jsd-g8ܡY OhqX|a-`8F 9rQ=+ PL.: 1>tFN:'tdyI($\E&*C2WBMqHdѓtR(l2JlՔ!m?'utkb^Ra{Կ:?Nqc pUC ^ 3g(שu6vSuAGr'CZ8|TLmmv5$%Z+to㨍tgQ7:vZؖy bD@J0]Q BAV 7?Xdgz"%bg"DTe(R+TmͧI-E;"=wn{N{0Ld_u5cRMz=ڗ_1TRJg!v)U9W9w'W?CMQZ-4MAq>FT\ޞ-o{&V:3?zkfN1yo۸R KN/I *ޜt3ePѻKe,%,& ܚQze4lMTUтIO"H^x qY"؛c?k}[VP E}iM+Uȩ35Ȭ!9(J}yҴ2VC+WHxḀXnX%N#䇆]-)8ŕH~ O^b`:t4 T͘IX+X s8׌@`T4GZ7'%RjdE> QN6C&\PXyRI|C02eX~ \S8>RT+a0䠰88&P(}H|@)CA8ǛL. "S6 fQ@SÎ#HS'LqX.h)[Xo%0KOLtx0b0rRz8BxZmD 'yad.0eP'T;!0팃I2B!ɵ^5 ZƨĸSX^J-Nf Cc7/<,fhAF+,`iE 9(&Lby9âNLbXɐ=}5!ȱ6@PF5JeRHg %Z dB k:ԕ "<@PNKgCxBaR:^&iڑΌ tG usO[V1~M*~3J֫7yӵEٯkgSNR!8zρ8TCvzW<+Qڷw2{w )^됞?;Yӻ'y}+긤@8>J-PJqѧpl/YF%fv:u:A!>1< OqvVJak%l`d٥T|$JPh;' H  [ k" I0;d @-T rKHFT/ 'և䃒re9Aٷ]RpJ @ ma,` hV_˫;"puF(RdT-T zt4O&*HxLU:E_F))I /~̋MVI_i$qhК|^Tvzk*" Rcy-8C@2E-v󔚞gcS͜@$PTfbYPTlptP#"xv$A!@eb IĒ#181!Sh']alÒ?9r$_P:VXL>#:ȶEz{dOw5jﱷke⻺~ߌ?禾)ݗ\fyቷ-s=^Xe !sNvh,u8sF±_JіԶNTec6y(!`ߍognRd:r1HQEJB k a0&B8&Cl,6B`Q1+Z3PJ8V㱛E1/c@aO5 +phaT $`S-ԦH(]B*O2 )A9)t%B1]N3I ΃~@8Nz4r |F !+aN2xlZDaOJZN1W! z?'gv'rfGbBa {*ה Y(V@of.E REohcbldJ|^azX\;sYEI^BDHdWFr+Jcs,q34ÑV*.n,]W{&>"fIx6+.e "{\.6xsGɻ#qpz\;NgO}_~QgdeΉ(I(rJTi\nzZk%=lv.oITɸOB^9nji#(DT]@#̃5>>0>(UK:^ѸS%PNg# C)o\*рhQ:h"By0 5.c" X6}*f2ˌeS:*ZtPwT29#})\>2jQT@چZЮً&!:+IByFap@R0 Hh*ǡy/!Aȓh~T#)*&6)KDX)O{#%Ep SIH:-93‚XH[fӥ:͵&|Ba91/2YEqśY}><>PH%OǟMVA`e< 蜄OJ $6KT&>*'aE0zpHDtdR-xXd+@Hjn E$,+PX] aM6/  P>CC a`% ^U Bĥ0o#Xz)-H?610bѡ5q%@D=0BH68"4bB =h`kHdi Iѩ*2(0e[jb%e ㅊ v{rqtʉZ-(>";2DrPda%IJcCM䢄5rD"NIU+!Us(ld,ӱ)FK'\-סH*GT2E9g[qOTP$4uxIW}Fҷh!CoL@UBS%9[4JIȰ!zsKe[56ߐ^ Qh^C!q?!Xq[ݗ)US{_~swy̮rD`ٕ~pNJ̊@6]O/|IFVpkx.T]а6 i;h by( jeM (tIE'jL.|ʠ-Ax,P`fMth;X6je Y&nnt*!PaLlz xB!qXIH*@8K!*uC6++*͎)Z >1NNxf1OۿgVDuץvuyLȝpӹbwUq'=[uomF*'ľ{ȣ֙bk4i+Fp]ɫۊV_ ~}?/֧ҩP]" 0UZVrv^tH՛u{_8z1wbVYνjl; BW+>lz}arfff\oAjß~73ny qI`-j'Dz,&ʉe^n襚,p. !ɵS׃2yŢ D²J衒rxL55&!`ٸz\9YN%gǁF2Lt׊##H ǃ !Ż$k2}CQ% bjL8 ܩ& bjTD8KXИAO7/xQX2(59S\ύX$D٥iKITq1҃몢^鞘ur{)EFſn([~xb" ,;Jy,XB adZ`PipvZcRDych:_Ltj.^|W63s[ZAeY%8ɰ0̦"_ajP%F(I\SFr"_C!Ou)Т,i!ƕ~ӳ uM)}pe,AReqlcLWIY֛w/e"]5n~5>Fu=ZNdx w.J.d+2*xhI28^x"uDd DGLbnS WD9lܖBs  Z Uű`2Yj!BrR3$G܁0=1U ۥq BPIlIE&gRk#Ű*IEUvo^U τhdb&vPOƒF>[lT>!R1Ah9!|v(`x(9 #bQkǃ/GOUm ' 3$.>~{G} __p}[;j?LNu*ڱItnj>v3wV#{{rioBfY+$ӕh2N8JtJZBaɎ,MHɡQ9K.ӈ-2썰uҖ8/c?[/ 6IM=R<'^>6_:Xj9s"bߑͱ|[m)yS{83T~j'q%C\d=My3ݶ< Ĉ#H)rA <,X&KK]=R"[,1}ks.USUzU9ů[ŭ'ylDZG_}2K[qc()6vQA/<8 1|X~|8Låмjٱ@#^t" cU%bfB2pvd1^7d" #7i-%~Q&DĥpJjh:d^RB =:!0WQhK:XMYC/--~ipyOA]"OE2'Dl:-/*g"89azȤ;Mi4'*;\vN7ɭT2)4< n< !NixK<+2o$]UvjZ2IUn8Ҁ8fQxLA1/\Đb' LH=`(INJתtV)%QžLpo qMݠ>yk[3家:_qCϲFCלh{jMǹZe_+}NMoZ"~l!,:Y*}n YVIK`݊LܪS\[X˙I*L$c1K红\k"FUbCVGdRQ_4NFF02Cđb-N4΍0aB~%'=ʱnceڛ,bU룳ik=~tSk^IIdC8t(oVf͜$kZ1ͯI&&lyOíj-Os?ïR{vx8 bAEQaq  $I$I$J(((((,,,0,, 0 ,, 0 0L0 0 ,L04N4M4L4M4@48M8ML84M4N4OFZ y}ss9w2ypCJGWwkӥ:V|~e9J/ȔHiXu6Y"[=v.rCm3^>ghzwss3swc-g1_(ocj?J;n0-F'Aea1σƹzhq`bO=1b[{OSK/zG]_ї8?u0)"'|K߃Ivo1;CdŸ9Xg:2 NΝяlsr1ν??:7oF=/oiWvHXo'5yEWNCюgeOcov[:R2??2חNfʹN`Ύ__bl+ JN=Occ/^k|3729Ioܕ`cJтoFm~[w6cx{3Jrֱd[ߖy1̏*gd+Zp)|0`vY-k4Ėo.;sf_m{9sj +')Z;BkF+YGd{fz݊sTO/ִzޏe-q0YMtQ݂mQEZscezYW7Y4/~*ȥS-kz/ʑV}[jfo;Ytܺ9w߳+.;;ݎ|7;_a2ќcNK-s7s37w1Jⶒc'#o_--c8/{:̎tw{zQfd-c1/q(z}u8`vr=죺- ɳ D)-UkʑY5NW|Paf[h`Ÿg~w˺Ɉ׾rzVgJ+~;ywfff~wgm9wόwCq]^|6,u}|g CϞ~i>~ٗ\n24̣̖eߝOl-Rv ڜ77^]=^zޗя2.ݴ1dzoϾgw37/۟ifKz_3y~Ievu4ŹR8l7na6K{Fy/R/V? d >,#0LQhո ^kES,] PE/HtwS^cZMd&@yG+@MK~&X [T@Ao)"/[]"NQgT_a,Ǭ'-zGg-G~0K%ob5jδ_klŭ=ciӲ~m֍j菨 p[/(>V/C 8L*hJ]~oXܒE{GK6]ra90 (j\TQ/9ZN"G(b]tyx1RT<J g`ۚ 0N(Lh$C ) BV6lgj9@K ` aj@ *ٖD86l`P,uo5261`G)sv.Y ߺ'%Hp(r4|șVq8rp0wcWk&"a'aΐLI'6*Ee J'RN0gs~vpW^LB3@> Y3y[:7~ F!HBX`2@E "&^6lqi@d(h5?BH$A.&<ˈ j4ruX)bH؍lBw2a [ě'~ T @ aV 0 ,$,2[aĵ8 %t$9@+'0(@`p0H~5B*cє@ԣ ^G`:0\0Łt gf)b+TxABa=3p?a `'AU{e D\l fkuÙC9J.맷[|9Ώf~%X ^U՝di&0ןB:tuN+-܎‘1( uQ*ƅ@g"*Y>H?k9J''ыE4'T;})Sy$J@v(jH/T )3dgsȢF؛Lè>U`; 3tؘvBDp#Bh #$_]Fz8(o=XFGAd~VOkF?Ҩ@7$N5ؤ8[u`Yt+S *۰ Pƍ5K/nLH 4>%ES5Z>JF0qR 7㉝md43>.N\bVt5AgJc?:djQSz? ̽YCe3@XX UD0@Lt^ 5@9˃.-}x-Ef"KFv@9D` @=AP ; d,YK)^"H)'!K$R#Gp`hCw"Y[2/kf]%Ibюv`2# ?Mo`9G t11fC_lS@۱Xi]]^_ L8 AQGp]bV` m>ay2ӧP,H 6|7c'jQ_0va#{9 :C2 ;@. m-cT/CtSnP Olؗ$Jm* +4́J_*J;Wgg:J??";{K?㐞 UJC*_\~hcm֭Ɲ02k{#][VH`WArS%PB0J@h $gI I(G3pC o8` ha,,RCRd{x5MIh22@Xk@K0ضcsňSO33#ht-0$S)19),v$Ʌr`"_׹bC?[uɖCg/ZD [zuXV2Lcq_)v(LTҙ-^蹮vrdmEu鎚I*PӤ|dEdžvSMyV`~ N p+,1@86@˷1 {#R~2\|W<!YG8nBZ墼6_k)k? H7W|ᆵA]ptvABKh)ŬqVu]ݸ/m,!U<$! Q^r"W  O@VIoj>gcv-Җ[RnAl1_YnS,F90Ol_i|GdE|ѧ*$Ƹ jeix!G3+atES'@.bh/K !VQ$Bz␯)u(.V0›BAF#io_ZHwƲ p qn!1M7,x \P 4d7V#~ 2rjΜC04-Lgh\Hh$z @AY3~KANyq :R}r(Xf-;&`ێҘĠx~E]<-WBC3DR5p"q.j5ː, ^nؕ}Fhp %7( !GV *RA| Es ޭ\+nL`X~]tm%ԥh|%ǣĉ ^6<$3) =&f"aZU8|} ֐Q@"T!-n A|9ը@M2p[I8G('mvj/O-npocez?e54Wwy?}vW_ ;>Sl%>{TZ@BEJ{l̛`WB|S!`(3 >~&H&A@P\Պ?˥$~[7;t52:b1xlGEI&gW+:Ϻ?6%+[YR UUn˜Bl6.ʬK$o-b6Hy#V$Z[)BGDۑo/!mM,)zoG̾7,K[#KرK_hZ\mOI=qGȊFo'/ #Y?"!H#LYe}bs%BU 9%HYj8ÐqI\f1?(V{WɊdYTYgZ?.3ALÊN'KŹS~#Cekx V5FՖr/g_eT`Nڶ^7./-ݾ1K7D܄*fqWD6jI׫B Ĉ;R5jgF>gbɣ͏/tazj4;ٓnVU=J{9r Q̂ >͉2z/Ɋy=Iy,q-7z=b$x?䇲3<5$='bVNEh4׆.z;(R>_["kr3~adR5̫cqg}od.HxrJRȓ&P9 2LTU %QT()QWD(PCȮGŧnTxq79&)sIb@:+Dں FF3QPf cH6][VbWS.%™f Th< (LiKFFP&wC2EL|~TyBDV#yO9i&;r6?.%1`Y' %<:7u!@L;KS%I:*5+.|iS%x]z_"Jao eq0qtJh4("whX3#n)VE /$ % kVnr!_U*E+G!1'-C~A|+,MPbQi>5YQlUZa"#|7:8 É^~H?dd[hvA*5Y-d%pJ][Z[(*Vk︅QBa PHK lRhXUdMs HF !*rڷ1_tqI<$4oE۠>S0wDl.i]Y PNcc{G谮uKs~WoZcb9hNaaRr$,_hT٣k[NZ8.ҙEW| ¢&'Ѐcq6!a:œEKX*𞸗2dyC`*+*2Eb15/s)Yj ) TOnDq Lukp=S0D LT ++g!m:/(iv<v 1F([NtٹrËaћbja4wI8TvY~4aV-+ Ač>gҕ(hCtlwU>1BѹqVۥ#âz#vKdR[.d3> FnsKRgQ r53RZ 1F\,} TR|*Gnn} >(PTpiQa2w 0)|X?nM=/픖҈IyRumPH2)İ!R $ %#yE)(|,Qo!Ky4\* F h87 C#2-*ueuxD.&jՆVX!XĪ/TJb(h*y&S+|7>f0F XsB5`1R VOEc͠8QYHk"SJކ?ɘIb&iQHL!a la+ӠTjSN[{tua%]{*Xۥ!*L@cPKj%[E^}RzlKJ1U)UBcqi_]ɧ-+6׏4\66*8ϬhIQ<[;^/Ge\Xa bV%!QQe!4bP+ B,C$* GBJmU9#?AV ԓ薊P-dky\{ ֋ 0e0:m# _7ǘwPJ\Zm'~agg=nX M2~YT6V"Va?]U;7Jϭm]d{ۯ-fTOQ5vLHC!q}qsŕŽRb,eN= J[YO9z3R1 Z o*|Bs U$ܞ!  I/ G#xE"8bc!(DQɡi6B$ vVZҒeLDD<<@<&VVX+YHD1Z LDTddžt8axaU`yD'0z$AVRú)8:xf ' f+(uj@T"P2@&4&%&(|X՗78:*&{dj,)u SCBRNً QaG_c%AJ?4u'PSM~(4!bDd-<2:`YW}Hjx%:v Ta)`lP*n.ZΗ4Nk'(g}NR P1`0$xu/O0.)*5=(8P- :r㎕>VItĶ I75k.',Sh`d>#U V_PUIU[*VE|PDH! z0b҄*;a,(cF G'c huRz5?l)d;;3-D*&"3:- (h&%(ix_h+ d0) K<].@B>{Z+BhQ@K$rD9RT(gi|`ChPSQl,yT#H:-0Y jd^?V~d2؅4@3_;}ӴlNIY?ǴdLCŃ" #"Æm@RQ(MfW>tK^?8z}Z皁<ջ-al%~ l O}#@T 6QBaR&fQ_,ft.юX771\DcI~n(t\\/Lѽ ?Ft5 -!Lb - q@$׷4 fg߬|JҽCR m0@,@j&-6+D A` 1t`<H`?CaMha Q @u / K\$*~(fJlR:B70ęs9M-:eU=ccM\]dNRغz%FYͪoQG-?[iժĄT]μ2K }ߛvadW'80OXRǜDm vUmp&*h k ,N^,ޖAOU?lɸсaٰȪJ>/&*sVGƢኇ 4C#i; [a\ش%I0JGӑ4|#_#( j!-'$ڱ&Zl@x"ZQ#0X5i%T#FHCs2/}Zmt<)(s +l6!0FLO !dhR6Gp 1,ƐpkiiBCA#(2\$/",BF^>dĕȄ0DF!.(!;q6|0Ab(5SKAZJQa̔cN h{$ "P1yl@,68\( kIT,!:|YɊHPDBଇi ǡ1G M$lQ^h!d!18 OQ4NUY+QynB KTRhyBARHU V~Dؖ %*! d-JU^ 'C7I$vEL~IkPDAd/- ņH;#AUx 6.%xh*(O@Ur߬b=ٯ~EpXnz0S"J12O)`zZF|?7 *\u).FУc׉-Y+77(eB?3tK(dψCXПB,u+\ͰR\[9 +p-8 nxwf9!" Џ!-`xT0q/$NкijM"h-7 b8hGL%C V8!t`Er0{-+OTWTU S:`C~f%JDPkO $Sp"$A=6a$i4V8jfQ PJ ֜#HA5>; ]O($pz6HDCÄʞpͅm;6%hgrR¯_ICfzշ$c"֡2N/R=:WݦLަm TOs'56oK ~ɤa=Jo_ t_J"%,֠ҵ[Cw2@B~SCB*Zdk.J`]3 .S$6a]g-RbS J䷯_ϋ:QeZkֽ}zEu{~Ɏ`?W;{gerڠCG)vG)7ꊩ$aQ`qǔkAѨmP-D$" @<_@^Zi1muޚ*R@?,t~PGjH99sUY!mpi&,&@X5 m)ޓT%j;$ Aq&40AqV%¸:Hs~Pe+1ܺHN!6䪒#Ҭx |I;jHkh70p@[d-RiIG㕗Ome}ޢ4Gh'yJ4܃UY{kn">W"B;U0ϨuN3xPJe,IF Cȟy$E2ӄc{Audl|xh! i=ɤI $D]bTys(8J0 Qy ZIΔ-p\* / r>#`~ssy̾74fi棙PmEC zAL?`K8ABV J(⤢Ն X?7Ӝ_֐RW4K%"l2a2; BJ 6?hj $€J㠪p26w&fq?-gߐ0s`2>x$ @_C+ba (nfa9 8*Ɂ¥a{!F4 KggSu7cE ˑ&)Xҹ%ɷʔIߐݏ)#@ gZ_S!,Dۜ@DNuomZ{hλ7?Ӈo V%*՜fΑ{ 'iV..\h>0V~gXd;(V$Q[k)T'F3ƍDun"FeHS@ߟDSAQa0I(<^VqȜ%EU&YGIZ1TI'9!FH a2@OTX%\L0d%CVWA(`SMBHqִ9* d9?qK';L~D[.~d_l.](<)2<}#$[wARCZaN0 uA*(1lB4,9v9[]z37ЄJ`K .pQ"R&FFv+:0#¼t (Ƃ> ~z-b@L9!)_>\9sQ}%vW67r6R+^a'RTZ[(E&v|s6_>N[oΝ OS>[eK{3ѯ7}Q%ƵK"|N{AxO{lG\ib%plI{1,# G5%+6>|,ඊA]$p iQ$ u! <q||p\9P5iB$nv2 xS2=;1Jd5$QrV)ATv1 %'LMA,~rs)2zO!W#ADt1x"X5BAur2l4=+#h=Fp4- yhѣDC9@€" p6% huJHM x70P)i pq`q(E}pyiu!pl=3". 8R '`# FE5#" bIFPDdg<x\B)RY)#ۻ~+p1^ )<8j5CJ[eM[2n8%~nK̮\T|yA=qF 1mZִzjAӒ`sp}\F6^g\2@냤¨@,iBAZePnt 5Dwc{fSXejP 5ol_gkiGXW 6YxVWd]U15^ge-b4wu8ȯ14E6b\1nW`k!X>?VnHv&Ҧjy/ǘWV"^3@4#!G=i!ilp(D^gs!oE#h_a]T`AšD(04+Ra{:RNo1tM|XINS:VN G"a6"]M"LMxYPM2|E0̩3 jcR`ܰ9aB'KNʴA #k3x VgUgR:4/ mkW'Lr7bUͰW8 b[l%YfU4(HAaAKKCƋFҡV-A~e+H97a_¶R;E4m%ĥ+FY~ݲN|t?GVh#Frn7̿}mHo,9O {|o+ M!UWg_}|o k< zr0Ed x&]XkF>ȏ I,f@ʁ8trVPO3Sl8g62Y1)BǦ\KTrZ'*A\ZRu.T.蜴y { ou kmendVlו<֗bQ7;_ߜ>?AZo_`T4GlܴʩjЮ)M2Vt|'yaqF *,1( `'dd%O#0%e #x9Xt -J/̨X6!M <] R܁" 2@)Fh>93py G,lvx{!y TUMDVǂⅡ W "hP=Vz B >YC`'B̌Z갑J1Vb9*FQ iEk>1FRU sP<:!5;N/Ar!G0$bYg  y痋'mzrX5+%cjYj6td/0GT͞$ukcRӰa< ѩ(ಣ5Y)Fb}y"b^K>>ά+m5a!J F2 >r\xyfe0{$&hu bkw?#I ٕV) W-/uw_ܭv3fwϵ6r}c!RNVTI~|Lب._<﷟d;csSJS#C,?1TIIYЖ3+ B9 .pלu)CGgqɨݕРY9 Z$RLMgN_;pU I) Ff(?5#Y! < !Lt%.֎XZ? "PsU9e]1h- 5rBۉT@imIN([)tH#0 TL( zWo۲%,<@:FR^{ݙߝrq{*Y3{׎ٷ[ [I/%ezP/Wqh]g]l'-$4yލ?;xV~^`ע9d*}Ȭǵ/dWnȵ3KI'TlQbCZ'a 6l/pWY8R+Hxl`(3D0g1@tNa7$u"##z!ܩ)1ȴ]\hiy2of+ P7?UoO&IyD`~6A{X|+9KEB Xau*N((y1!'4~\l 8i ë 4-@%wZN-ziQZ,9H' =FrQ^F#h /Xr%') 4JOy뮐#8T 秙hl6$(FR>ng_gfoWb_ѮFz*Fn&WY޸%QNfH G=bevO=NK.ï۹n#͕NEZ.Tj:K~;::m~dޗdst]#A^yڶG1XF_+1}eO9! OPjNuC x䊫g|[:H;;( jv"^ocXB9uN%zYsFٞ!H¨Z>-CrD 8nnZudIZKGt"m}Iu(|!p.OՍ`j$Y b۾đwCiH^4~Ej0;IkHOQ"&%ܪj0zKRwՏغf9>̔ F_.c{v$mb+(R&҄Fg_ߵ;mh{ֶy{w#yxdWcٜM78\Ia+҂.kPM~F_^6r`׹ٻl9{~>[{4qZ˱AQaq    I$I$(J((((,,,,0, 00K40Ì00M4N8O<4N4O48<{4M<< {8< <?<;4?8?O<<<<?N<;<N???8?Ӏ<<<L[křAzʶ ɻPZүQɻ{}vJG=ϵ9WUb.Ŧ׍JPtZ Ӏ0$'jD)^Ы]CvUMƽfܵq==c :uWU;S~ٽס3z8~wuu]W(eSz_-bq~w^_d&UgꟴQcerʻUfW^e]{u-Nu"R.l3oRL^I _R<Xn5P-R5[>E|q墇x'E o2nu{F++v~~7MRlNxJz*KPɶt[3vʮk}?ѨG܏2|_9̽'EL! *[{xSHQȗ@pÄPLM0+! >cEߴU~' NZ맨~o浪z^9qEފ̹^~`(W|ڧ 뿾U{|]uVWwPG?>yww_Ͳˍ ">ǩl 9fIECPE3 .9WOB@%24d"'va ϺϮ®꿽jڧg?ʾ]\˳'վUfqoU_$ 9tV^a]տr>M׽m"8lh3dKAhPF8AH<)@L@w*,U6n:j곲U]N(y( JShT"j{p7wbh/D -8@M>ʼ>m0,P[U}]꾾ꮪ*_UUuU_uVm~׵i>79cIBuT=wypv={9NUs]̅}]>[wѬ'#eedĬ3y;a8ALݮyD+oGB B$/4UTMURO{X?2몪:w?UTaUSUe>fZu)C{87MLW_{GWYb)uWuٕU_P] % 93KWN ϛ]_+*>,,܀d  *n6jy_WUU_W՛5(9 )qNk.?./Z}mܧ)vu]Q݃Xޖ??W[䞵7i1e[T_\ՃSi25F >.l.#LΡ1jT:<033꾫ꮓQEPP|U*uN}P]y9竽yԿUj~k] R;SwUw__Wo]W(f>+>qJn b=dШjWNMۓ9d%u)[r,JF <pNESF>꾳G wYUWUWWUUww]_ss:U\-̻}>߫)ƽuSԋܑ5f|._I*6]_iA}GDǂYɫ}j\ \{O֥]W_W}W .Ut(?9ce_S|Q}{`5Gs= W}^W_+o/.3ʺwW&쬥BRԖM#խ(Q.f%Sۨ/SOۏH\0DTӽ?@$$OGfǖ~sZvl5jXH>*ʬf߹un qTӽ+}K/9|R՛6}m}IvӷnW;_єBpB =0ދĜLMl E`z2YUwUuWU]oWk7w6ָy%l6?^ǾYVjԱ;3|}'wy]uٕWﯺogWwu]{{ӾZUK{bJ\ }5%}4}E\C=nڙXA< @N90C؇D\CD`=:7U9wuwUPC>(+rSE'\.ZRq)Bo:aF` ˙7$ ,xyoypQ005'!3. #l-P2Yx#$n3y>T6#U9I8*W >Px"컧 UV#@Q|fn|@(YܾU.-œCvȉYlQ tW}B 98u'*d !/2@Zٿig=A zE8XZ=|4j˱?O@;)n`r-BDj>䁅B$pHL("Hp2uD;DP>jџ|P(=OgH7lmR&@7Мu"Fo?::- *L?UwbH-gGmx&vPuw\l}-sFe>۩mĽ S<`MyMM}Γ%̾,)0 D#AhLND,pH6bX 2|^.XźvRr}g `7H I@rJqirћRHc1Kb!NvD4| \ A@U[l;x(TO&{ @O 뉖ŤЃpjB 5HM @0G 2N/!uuj̕B(Pv8k_7 RÐ4mz\Q7D,/ ʓ)ۓK[g[=hogj{{[[[[[bPD`_fgE#߹'uo?O+־%uΑu5G?Tuolv߭o5uMvZv!ZG- 42@& "i䗰$dmHA4X-ZIܜUO;R1oY&r$p HNaFqy!y6C[ǰuo@ A5)@kNn > ^:5Y{/}:F!aǾyR/?z/8(t ߪ[MBnChAUHL> j9 6ċ)'Blg9(Ly'P` ` Hj/ڼ5}5<i)Q%Τɾs#Ȼ^/frܙsUUUW]U7=oRf 3Q{^w[yoC-=IskRN9X8gU!eWIݛR&8GbuǼgBZ z|`F`e uIrip`cfajm8#g*q9SRR&!CD o3 ƂoHJ[lf_mtUu%WZ'7_x___FUUUT LGawp2}|%)\eқZIC+V72ssnܼ}2Tv:x=nT#RH&<`4҉sv,{.1AT#gQ ~3V?^}3*| pI+ At<9 ⻷bɊBï՝krP%>b4꒽l[2 ws|jG9NAeս{%ROg8)TjL$(#vT.] rCFQvF|</T7vj% .J9qFyڠ s)PoVsOZD &~^F[)mʫSܟu.׻zI7GS[ꪪt~ PP 0d ޿~]{oMtyKmZa*3PLQ~Uo[nʕG;ԣ[Mss^Q.f3̊w`Vh|6&NLGu] [eTMD5DJd Pу$5dՇ\tWwJNF[sH"RLUU}}W~?Ax pwiYpwo3ގԕv^״yk rfg%iV\hią,L򷳖z +|=ry[gMUO[J@@ d JvtN0)HOl EsG@.d P`?A` @JN@+!7Yh}?U'VWӕT3H7\6OTQ) AX#N{9 X9|JvCT\ګ}6ߞժܗGOz^p%T}8TмXڋ[U. @Jo: ET }>RڟNx@  1}/6q,eFIV T2oW^?߽84 Kx} ڪL>`PKw>hUΝ[{mSqQ$s{r} ?׸sgW<#`9dHG8̎y>ɞj8`m8TK"|5OiUSGFL@-, \# m>˺u_W_N݂ j(Hh:*F~ZZ}]޼ N!T f5_u 2Mznw'߾v ܟꓚJ%F"p8/)qg\q3)eiʃkOP E$dY#NetSWBP|(`$c@3oN AjrAmN._*ϼ~W:uj0tʲ q`\~ Q73>|6ϣHV)8c7y ߑ7O9KU٧¾;>t(9m">um48R>T"d BaQZCBѩғt( 0@ׇYZ`BVmvA+Fe$^?L;HtG\)6(S,nP* bq<|xT1626k1Ғ0 8 Rm4 N(v_;P\$fIs1ix90%SJna`Р1,V@E4؜f ewed2VQpDtɳ( 6in8t6Aps$t8h!5:264&ʥ7Pi%@B"=Xu`VZ8)k~ Oq Ds@F<)Rz rfATH(Y R*` lx)0v."[Y[Jbg5:~E.tMNc9 F}&q˥n30 Uu[>ڪM~^U'qGGd>IgC"\.(fyL=O ,\[Wk9Gjަ:9A4srEt YU*zXoJ#@BiIuw|~zw*Na;ߗݾq=9{~6q1*Z1s G|=` DܔjNSVԷeŭ^ß ]\:7}f翟uVAڇvֽ 꿝!?uw(?s_+uc9[u)gV}26:^e(r|6YNH+ XEq)%HAdhtzGnn OCpk ñ=*35C6PBMb)LO7`ADAȑx ЇsL%b3%K?/ ݀_AB5\rx5D+O"U'HqEDNtO: @Ǎ aA07 h\hR& T>_3WTa* J|3xSJMY} ,J`7^hN , @DAGG4Qj8McMDQhw$W݂qQ"O(8{iȎ\zojc򹆢՝=%-J_a;jdcEE)qE(YMRmka'>8h_4)}u v42ddD{ty(LTqfDH>Zؼ̋ƣ@NJ#HUA }}DZ\Mri}Da)ƎR8p}3 CɵupT $@GHEH BDS֘_f"/!oT!R8KN8Tz dHL5Jbf 3r__ɞxV, @F t>>Vs]QƏJ5bza͉g,A# ǑKsi1j鉸ά45X5.7oWvڜ}OWp}~)'Sƙ#)U eԧJǾS}sOow_uwwjB@ ED$Nd9,p^ ]I-$BN)0M#'%1@Tpܰ+a@X6vczbm A$03<#q<9vrA*LV" BTPF\DQ \1X A@*PK1*i lWmڂ*!Zp>}(p.xP U H1(f) C("TFL'P V"A)(^d AOjOC2HP6 ADo\&N]PӳԐƍy Bqz OТ1d.:ޒpSӱ"BHm &2;xu>ZT堼+8[i.%N*6 A1P,6@ bxh>~Z4`F ȏ9>r Sr/S'jfYvsY&uC!M%AVR:tCtIqzcSˬSnԭ_׷NVUte. )bv/"V#@pܪEtVE ~ap1ib>av)=݋53*Z\1XC!;ӪQ/6;rgUDl0B:pET; Z0$ѝB)^̷ӹ>wvgSY+HT7EDK5t׸P+@f")$ES`ΚDc&RLU@oK*B44!tX@҃;7.AUKC)3 F oM>orwuLH ^t (郌BY<~UB,8(d/}'N=0GKF6ǫĕ2.jIܧ/r ϲ)s˅}UUVfwؤz/mva5U!+%uNsAo9=/G1|jR¾_~VUV]_Բݵ(Khӆ(W:.nz$Ml)/80rȊ؈tFjWcbÃp#Pˆm/BKXzq^PA #n=1\$`A l98Sϖ7.6b;A9d1z T!=x AB?:nd~)Th&EQ i Ά. MebZ>9!jPk4870D@$HQ,y;<; !dؕ1?bEBwp-(p<Aӈ1BI Έ?nϦcvߦhO}׳AnŸ& Te-I:Bg&Eyy- 1΃s>{³)9Q6GIf9:v( !M>:sNWrg:qS{UW^Sn N'Q?iIEXd1y#fFn:ra8G~n u :Wmqa4z䈑DV1@uL@dzlKfjrs4œCA0"X\xZikBp]XY-9j N o-eQw àa !BB!ZSD#QRn=WCɦcDO^(L88iT4E !؀a(@r t&3L8ٓ)cq5뵼t8 d3a( `WZ$'OZN<\J]t֔緍A],mʶk)>J8qFzEǠů)nZ zqZ>[S~okr}?K*3 QQkbDBⰮ2Q:@- To[M v.F0)֦ QsY`dŤB-/@fL$,Vu@$%ҭɻ£.*p|l4AIbi{0@5@ͨk.Q'HzJJYO\+N*BešN FBl I! Wh7< Ah 3Pc St>pBJDE jT*H $M١Sq;{J}Sz^׈0:+NAEń>[3_^_6]ys)eXsKHB"x A)m U.YgӡEsRF@w-'|WuT^gY_6~Yl!hφ$Ipog7~u"tR=фq";u!}][k2_QMY~Vh`fbX๡r)yas ^H$ CHHY4ms +,K&S0Nԙ56S%OmJ$=饻{8_j2ׂ5Fv55dEyFH y*b## cA $ y$pF4KgF?]'a)Tu˨Oqm_S1TڝmT - !p&Dd|EieǗG3_kprS^vee^ʷ|Jdu{Xrm{Vo\ujW֪j|[WYXi83mG<L1qB<vԼbhgCxW "xd LjQz ϓޚTdq8EľP>Ŗȑ& !Dr! ؚ&FEtds{<@!Մ7gMM ~#1j( ( h1,*COI1{.T*&}7Sӕv)k3*y׾$^R A`ѩa8QqzuqN7lg1$Lي&q>sʪ1'W;ɹ{ZDƊ\))ڢ ξ[ۼOlg Ss7~Rf|:tzQE[ BGpHuN`%y 'N$N]𐰱VR'8ӎ?-K}fP%=vxqhLHj_0@VԚI~Zgbg#jtNܔ%x(U5 ,FBS# 8 gB4hNLo a~ĉNO);':5HM6Wz A^Kϗ6Hl$?3GcB蝉Ec0 b<+OyStПFpmN2hHD+| (Fg!N@KͽݗϧNM;n|컮U÷UUunl kQ(%}8~ҿƣLWnx7SJ BƊT˱d#]s \rkLf$ H8rՐ,ɂADl̝3Ta3rӐV , {˕IpEYNJ5Z LI0M%h^LDbM j; MAxZ CH_0@N8K! >yN:$(FföCQ̲0h:"Dؒu낀Pdɑx|O ca!€[6T!̄Y;2[Z @uQ!!NGYmgw|3\/{HІ IkxVnߊOttdzۀB]`r|`DU c$B(q~uݔA5yXTe֦)}HFәfNu{H FA b_vOa?}Δo"yNsT6=SᄚIMKe!֪lE:s dyS_13:֮ˌ6O1#p>B cGfCGq.Ö4hgqEa qƓH-jrJ[&|Ճ'S<_InIX,tp_BքI-YjܮgκQ2u WB\&"\|20јI|Sc΄Zø yoA!C"D6 .^YI8+|y{~^< 5 RLF. 0j Q>+dH !mAl 1HsqW>,J^7飔!#g)>Β{UZ TEq)]/B\%"DEx|U].|f[f=mлf_Ux_b@ Y*8;hvuzߌv3%ɄW%ύ\31ʆͿolgqԉ`H\W+UOf;אQߒ32iy2vlzK_VڱG}h d)EFH!+RDoGI¦gUy-ͽ:5rz+-ا!driĉ n"p&q@h NSzƟ؝Oe5wlv|9g]ʔr^$`#B*4Acw`P]ϏMWu7N[m=ڝ~y'YwWf{w&$wJ*USUȽNcTŪ0?c-{VzRڍ_7 ) jZ:#RHz gIW4 FjJH4'&.Ehu SJ "&bO8 `R=PNh7 J## ;wb`+yx"[`ϋIN.1}4+$%[M4Ѩ(iN^.qK v0,b@q}DE$*AIaU!"ݔ|aaY`OSg?y&?cXJ.گR-1W>HnU3Bg^KTS:wk?.w}1Cr2Ϳ 灘yd9 .6}=PtVPT8HwYFWQ|t~+FżȅP2 ؉֥q VSsϏߙV?ml ˛})59oɧQ\*׾nݖ!HdI1&$lE swŏ@x AHx҂n»NÚ:`dDcNW!2(:LD٢X mϽݶRpF,,t* F1T] v>kLe 'k86v,$k(Pe"/!I{髮S/.c6]Wf^e?*>{:Z+1(47:5}vYr?{"+$.<|s! 5:ka<+(,JV/' YVfu$b,yPH&3-:;D ò1`q9Z#.lм ^&14T:e2-\SNkN?,Aˈң&~pr-`+8F>^B .WbMX1 UDHl5 1V>%!=_ؼL-Cb_(XpX @m u#.8=dt:Ԥr:LpcfO,47sog9EO|DpP3\ gBu+qNg]lw' t;۝K^[1$JGm5%+6VnWS#yyJZLl PfR K,3m :!!m>ep!V Li"fX}BR0܀ /4] 86F4@_~{g A$2 ICi Ԉ|;2<*T,yaRo<"Q\YJAXY@2Pv$G2)xЂ('-u$[} j"$ |;1"˂tfpz:% !æ Ν gXAsYze՞v^\-&Ո!+{q;^яLU[ՖșqD "<JR9M㴏YywZIÛQPtPvDW $J'\{W s4Ʈ7⇬BVW?U} .٦fu67LOP T*ԀaY~'}u\^:z*neܛOwve.O=ᛍ̏].v|E,;,DZ%J:RoEyOq._Uw7%m0^,omGˋ :W)+.*DQ]d(oHlLU uE '9d| ;2F6x]20ԭ{\6.4pfEEx77ȁ^Ӣs@D@I %)XS>daX&iLQ:L$GFú,8IKS:B J\g=lu(^GQ1&nw3W99_?T2{ ۻɏU=!X$gV?73}'՛:wU?nW,qMvrN;;LiwK4ڞoKmPIr[Җ-LgT;5ޯx!p@1-"&Ӗ,jGΛQ^8> GRtdS‘%,?#pM(@Btraq3FV8]éC8n lj8@Pbc4G$"j,NPܸ~j`T)á3{z=+xSaZ 7HR9ټ!c!\juEQ`q dM|LDWG I| =olzVI t@ؙ%͠B4@7c|nݙ$cP2BmfN1wS)QSNڔc2/1H!x0Piv Wu㨞` lS_uvnU]n\oQ֍0e) e?}B)4ܣ 4zt _r;-?e]/*(uGOO~wH^rzvt݆?O#8ulem$L ]<.;Jtmhj#d~Ubad*f\EtRYhqݭEZc#jˆ2P1e;Ƕ(hQO޳>.5[ud ЍO [$X~QI934I6iWf^GkUʞcVAHh6b qػuu{sSOsR7'͇~>c/.qx+jceoOIOTIQ]Sczڦ/2V+ؾdGP.(&B9=[NH tt` 2'@JB(7`j-MS! }tr!x.Asj PV5 0җB)(*=0Zt&BweO"J|\|)@ׁ%% =m<$ @? F 8#`Q.%r}!jx:qaa"g}3) q!#MW[;ɦ$.$Qb8mwm3YJާ}^T=!Y S/˕PBu\ͮwxY]S7!W3L$k0ZA|i|5?hճNFڦN2#+x^bP/p~#En1B+Ezyʆ8oM{@T"L o5EJnٌMx/]܌fBh0H286v5`lf6sCG6}5I`ԴG 7HOLAlۑs2뜲LSQ`Q$bZ>/"\A3qi+P#H2`c6 [$K$"+i8ElhNѩ AIbBfI!O%P_L%TQv :E FtHGMV)!yƎm,.95U|rX\$nϾWuySvOwJ)pRѥqMVԪeveu4[G="{IId޵5RUO>5F&{a8ЦbѦQ.8>`rtH^AcFC š0r~aC0oD׀td1HJZLxԝ39+F;&}9@U@x̵D e7 LcsA=X7Qšآ#2e.6.*YP[8YAa HG0MFl|8T@tLȪ^.lBDά)qd 7lݙ{CaTB Lfy҇H'U:CLIJ6Phnhgi'v6 -diUO\v9Oƕp8!6kh&X ̉y~KZJðӢ뺆 F¦ &bw۾vÖiDk1ԺW~ܧNip23LĒ,(ï]ϬܧLs亣[ UDzy)/aܨE9*rDޣg?Ҕb Wh<h.&d&N @o gb&+P|2p7\TRl!&KL-gR)B=8fOk &0(j<$?5]L imtHflfT4/@*EiN #dF_:P)-hl.KBrIv?yןYWs͝_>eEQ}4G/%3*ogFW[rqZc#yXܒ%vy"VHoub,UEHBK!TP1^{ E9@8쐨.]8J&LȇH0BJ8Ŗ7p+IwL8K7LH&MoopF-MbA ?]PwCNnpY8Y`ŒرFIO.Tu &(qB[@Ԓx?؅w`cYDFģU ILv+R>1]n9v+JB!)K9R'у1M;)'@N~4rV>j(N% .H+^Qj:C6-/C㥳/{.Q_oJQgO!H>e8t1&V q)qD E`iD19ZJte.ꬔ~아v_UVO5׺AOo 0#w`TWn2vURz\'bt2Ou LPt?X<~Xd:j?VgCicAl&#e"tz&mKi)T2)#}-V)BWnC@NDa<S!83wG=x-Hۺ}?!uwun__u{pwwUyֳGVj>7P_|gr|fٗMUtZ5m-#Vvdiz3lW*AQFaqr  $I$I$I($J((( ,,, 0 0L, 0 40 4M4M84M<8M4<ӎ88O<88<<8<;uO+)Ss꺀IU. :2uO <&P咺_D TwWe|ܻ!Uu@$k?픩)դlďo?*7m([@Uu[~):I:̆W`S]UUSl _s!ӔfT [uյu{wMUU+o{>꽿y<6Q"I=BsRfQq{ʤ4R/E'rdYWUUZۮ7M+~_~u[{fڽodoҤҋb%߻vf< j- [E] u_u74{:^W_mwu;Tm?ҧ7PMZ,ʼ쬄?}Wϕe|WUOv}B{Ջkfﺌ{*Ne!+=P:u-r}Ra{uܖU6Nt,m/_/S~*i_S1ξ˟QM}O-fU1RuT?N2mo~_u~Wu}}m}SO]_}}gSzSI:}R)8'ΟG-Mj<\syy+$*F xRWhSK(64TꭝQf UR8!˯Z5u{+:ٜ_>]Ϸ=LQNEKXnS]u]}NF_=,}:5w_$SŪZe?U:J^)7_:m1үܫ˨5z73ԻUzxbK,~/Uu*yH6$5uUgYmw͟2h3"mQ+#'NW*꺨|4:[.u1?5QU}yuUƷo'}t}׿mU_UU# ssNna9))muO)"E >4cٍNҨczؒ6OnyI ɠѵW7qok;p˪o7Y_{_[{ߔ˟Tc]+{κ޿7ߌ_W_W޿nGُ^uW{%wv+;Hq^g3wUV_W]m5&t9'ŖʛYwӂpV/s>m>^GNl۞]#{Tͬm]7.]:ڄ[[߮}U}VuV}UUeWWb:Ҋe,0[.E9R=+뻺meRZK施D.bIͮ6꯮>mg kzVƻ~;?[K-Xe/.Ff}0 '(`7pۆqLa<2m0YLf h4 Yd/ti2;MK)Ņ#2n8$~wWwo WUWߺ_ugDhR1,Bx8 O6H#f/CfUqDnA0< Վ V_7?VklVDL">eTUCf鑗<C0ȍfɞQږb@/@eTFbE#T. ]=)*)CfB|ڈH4@%M# `+*=?Jە_UڕΧSίc/<*ܷ 3#}BAlO>Τ~}?/zhGrURl[ۤiaefoJM!vRQ.d "tc#nɘZ ͌cYײn aKܞڹ̭ToָXoԪ3J1~b92el E2Q^ƴ0 Nz@LM72D.B1^a˹vW;fLr9ͧͽ@@hiK= WY5G|zQ=G<vm]}?ڼlNhp>q%ړ=-ѲƠlT|eߩRQ5b=EkjA7\m c͛33p`U @@ YDx&T@]^>{@L  cT/Ȑ#tJMrISws*(&cb\p20F E^׷UuW__UD_\Ui( Cd2?uʒxuumi yWy}??[t)j nk:mӮꭷ=C1X"浜i`(>Oat2#@8d1O]%˔@n6sAh1TyQڮK@r#䙺ڝoN[]}ut亪ӫu6<l Gny $5]_mJCwG{^ʰR6)ivF 5FsyԤrv[Ο.N/X@΅|}JHX.Z2R` A-ȡ|tT0W 0N#p=i3%XZ^I{Q#0JЉ~BI|o@xbM'Nrk?w]moƮ]VPԸo=%qVQ,Ą}wz}ԓ-ev{'ԜI/uMK#[&K3v"1@`|d쥎ֳaaMt#F<1qŨnd` @^gMbI{tʼe/M¦f0gԐVЉts(˯F}Wgsar"DS{` #Ca{/k$ӻshI%co6 X \ ջM"@-@dy"$s3u;#f'My6;\v֍ F~0&`n %ؓ{^꺮oW}w}eW]}]_okZ0@o@)BgCQ0?R;oUY199l4rsQ 14ը򜍻 ݁n(ֺꯂMmH|J@蝖_NUPTpCaF 3U|6{Yw[m$^e~j2U>vъԤ# NZw;unNuU[ݗu6x+9&04@gqr&Y)CR~O7vWF%OQZB K&17#2|̎ײh$@>M R9dP>'HGC,RT8aS J"i rUMe5eP"I0u Cfhpj.>uW,1 Z;%qyHуc XS"(|Sq!)~BzxJJY>!iAE֙dş 36$.62|+~4 _>l㕩ȊAcNPD,!vL$*$!y3q jsG5=z'ilުnZqrY.LṮQ2壛4 (a ~akM$e菮րN*p14'"/S a&Srd#UD:̅J(xSv"=J$gH>hqd j[ J0? w"])oZyɗ.$Z%]0rg C3>K,y}MXci۝{+=ٽ_Suls Ѥ},g<[]奄 b^qt-.+ZGh)Y# R3* Z-ᙣFZ0*22ih!dQSJ%2|~8Id nh4f#R8bM}m#+Tr&2$ģs얶(B)$BT8Q0T$("),':6G("#ޡWIO6@4A2IjD]k}Ziecx>W&k5N˓Y+H< #,-G2 0E3Z/YUT'(#tD4b#ɈdrfHI`'ĶL'IOs o`*9.¢1<6tyޑZ$־u/KuTcojmL7um~N.5+ߖ3RjpEyz:uݯɹ:u==hFWiveXBileCOŦIHAQԅ(C೎0HR}8J ApZT #-r&+-{* RX#-Du<6ʕ D[Dm)>W:+6Si~ V%šۅJ  TCBGI>,g2Cg։q*wm-B3IB6T* s9`Pa/Cr-> 5MtfXiϚő,Kjz3 F?J(_ܢ.kݐ8^'d|ǭ22jH̋3\BX2I@[aUxΛyaNޗH :Bg:̧\ܼ^l7c{m_?SimUQ\z(D-+]9պsFIGBӑ`>|ˌNtb8k`CfAp4a; vF16X^Hy 3FBH[MެS]'}ήOM]#DM2 z<v}VtP3"㰉1nQ15ZZk<^R9Sjse@4@k dd"$(^>D0o`R^ 43Lꃜޗ7;ړ~q'whz`jLU0>NZޗ3Ә?>31Wћ=:NLM~=KMiEfm?%^WBj'nZe>{r3j?b8vJK %6ʉu.f xQ@hcfIrO{-iάPBҨ }>2+e 8I Lq;CF &,!PQv5H|Ȍ0a΄fiIj]W00{T=Assֶslk[.Df LPtF"@_kJIr4Yw3n|7 HW!y44-& G"JiJgfO!H)BO'>2L HLXo"4Nµ!>%Ϳr=}aTo9*mT]:E0p̸a(q#~HqfaW q1JR'ƱZIϤ+:_'{We=fbaP|#A5@W|% d@loΡ5|.ighq!;T(D萮dX*;$*: N4 Ñ8ԏH~*|.oܞQHBQ(y*TFLPЛ8!"B2aG 5"Tļ[Ne)H$rZd&!: 4뫤s\zHxl/2Jqm)1%G6bK?[^c)/P/_/Xt-t|5M-Mr鲑Jb7wrelI!k↞xaQH24>ᤋӜIJu-8i`ECT7R:Z4k0"c5]t?0Bg\|+/w/?%njuOn$ܔ޽gSn7nFg 8 S(á9)>gLƚ4fsN4ȸhŨ%{imVӫj钷W{I -jM~WC jK`aHZ!cc>h/D~Fqǯ%ڮJH^!XeYk^qꦖ:Oj״Dฅj 7 wMtc9Kkچ ^@֔bֹG"nl:IҒ/%Ж,3NSΟ̙}V^wCd`w5j?MUoce5 JdF)H'8#|a&^ -2NHi;A*0>W᭽mtrad0 k(4@*FH3f0dșP9 1n!IfBZv)X(w4HEfstr{W;m81B8QH[EjF2xa)nt@:L8AK*u 080&&T08B{Bq,GND̦~d)ޛеBq!z !"m-'eͬ^)S6-{)9Wy_|D\ukėc*ϗgݵRW76_^QLTfG"A!ivfNkj z5aUcHN1?\ 7܉Kȇe-$Ԋ$X*(:xý][7Ix\X)C081Ha.ov‘Qz 7! 4>TAHZ`OqK;d(p~9"jBLy5"*08 ćfgA!r.@@/ݗ6f}b*/s DvWǣLl|e6J&`'?;Je`#>H6 ݔ5ּ7Yxǵv}fo3Vd i^JANec3xsOھ_鴃dizaƻg[ѵw!&vÔjT߭lsv>ou73FK#hBtJQ}"4+#kL 8F(=cbxhH)H@@Lkcu-"[*|T ^261 4Ca$p%=@9`8JaiXL )䡒 l<<c 2fa+\hNR- `!(0# !bP=d$/3%Q&,s>a f@Tu X-VgYz4J?:KzfgR &9,lʳѽSqNqsy6oiQzjXف,xH,II)1JNRw@2P$+ !38jNdٲӇ^v'dB*!Tž-TQb4-xaz pQ7FL7#L2(V Q 01Rb4~"QUyCi5J$E9G,hZ-2;H -f,PcU`'D$E@C̴? \ ȉ82!.xϐ`LdH% ȢSAtf`*ؚ`i ȁ8J6yp R\:$] p&A`!ʀ@aPش̼ "DLH]iX,%8\X!")$ND JL w#^ЄI_~rW06qLj>6'w"_]bgk{s8WMlBYf54շ`U3cBMCZCf.E9TG@XF {AioҦK'M;9QGDĆeZnZ}euz\1ء3)LESuc7[S㠢 ʦ.`*G ^\v ^ʩpj/0>@Ok+Pi@ua<aX6s%i.ۧpC.>W/{R-DI2˅aƝ 6(das9=DC&s 08b.I3kP*z|//Yyo16 #rڇe9hD2-HM1m Om.cS%+$JGz9>EqMA7Bhik%)!-"**b{fħ2F@A܀Q|-"0c]e{?5BD6B"Ţh ;'E5!R6:MZ ( ff 1Eeqre|rB2js ~ :ZMFzf9m$[a˴S|MQt%5kޟBljF@M4"2Z覤&cиiƍQ6O1Suvdؿ9kDO6m @ $ž&L&+`梊c"""xoe˵Nracfp& KAuVPqr{ $fl-fT5 +?ۼb@CDSBˍh`;]ٽcn)K³bWdA tC#,m4BHSz ?`\Q2"y0i~rRD6: $crPk//^~/". V'Ķ+1,:I>AWmFAYyv% 8)o249T@hsMRhP#nf Le?Lci W 5ubM6WLNRlq4}|*`" q@1szjIjo5׿um߼꿫F?ݦ ?"2|< `OpHxechj6X mVU4!д`^7H9 +iZ#$hؐ[@Ιŋb #jd$`V !h@3%aM̌d^y@ei 1jG?z\dT-vӳ+UUoNJo?n3f_LCPR޽z\AK3~wEj ÌZDD{$JA46 2p^Jo]4 CBx7 @Y_m ]JuwF~q(x)3 sxgZdž[kb(ma}#k.DqN'D>艗%HLNm*VDѦ/T.ѱϣ._5zQA'[^͈zlu50UVISL b -3/$3k1tޏhǖU-G3eqV&8xIaA[5h늤V VRMtW \rUeRR@  \ȑX x0Xq#NF;W?eˮk۾twH:#o *$q'LE)„W&ky1GG!,Ŝ,m;epE4K!bi$" ,@7Q*Є%Kf~j9L%`]pM#'iQh9x9h)Y (c;606md!k:6-G!{0܄/enJ0lb.DiGقp# < (~xp_B^`Sr犏h3 &J!Z6,f{'Kx# 6dJ]a_d*Qc/n /cÅ#H4tb+9!d"rTvV Ci& ]3)+S;8Zd%H3,f$It@pxC<5!8NYfIlf <0drrs n6n @"k\)X]HZatt!>\k7 !'aP*eY0W4l͠8&Чހp!LxxnǩjsJI;ҞUlZ0 l\л4B, 8V< cW4@#Xn@80\ C cp_"n)$T#rqK<6 bL̎̐$=2& *6rEgAո(A@Bp>!DAv) BHJG""ѝ ShЀB^ WuU$oS4)ؐN#1q1QluazV0NA;R*;b2f&g3NēaFϿwvONNRO̐9YЁ~B 0̪-P.Av>Yc@ ̃gd IbHS3ёsD"rgMSCY[m}M㷼be#m6,G"̼'9a wA98ɲ3 E@b!xB.C Jx;¼Ќ4Udj`w : K+JPBF5,B $bO*ŀXDn% pQ G=٦V[Ik&=}+@K=&5QL8`CN~OK()tU>WNGpQ.6*Y1nu2mUwI,*=ͭ{$*я:I=ά̰ca‹i>SXŒ>?KaL27hh]dsd>&[(i ()#1x#g*6<6`s+}t3F R?vnh`"b6NDFGg%T214,бa pp+@;@ 췟 n c-_ͩ ),ʻ뾛,^j$X]zjđZyXRcp\Њ`!#6# 0xeaX:5I 0g]ښq$k8 'G q̅pX.Hb.|PX9Ѱ#J$옷& 5Όz2#Zd)_IuyyDH[nBhd<F a"XveW-" ddqS29M(:=imW>7JX ƕA[Wl_HpUHw2¥,\ғ7T"kb!CL"sb`PSC$m2 ~V$9 ǭXwGzǟ.8c++#YI'("Fo\\Cx^ҐUALZO&' LXrb>V\@ "cbk1c'>C!8Pf,Nm۶7s-گ*Bh p45Co8MY~P0@6E`@:F~-mγ" OEffZ n"2$X $D0[t<`Y1]NQA铓)h!|C( HZ} .R C"*"wORǢʢ$ $[Tƾ zWb~IFuon}ᵌRN.u5Pt9CE;PDdR]$0r' ql2R 0^%D˃"5o0D<=٣YR}u9eg5ԹA$QINz^^O:&P 0؁t%*>E Jx f;Ur6F"LyHDN!*p}e {$o6'ï߼NH5ɴQe" t=dh LJ .%X^$b@T,2hLT*vRu-yYQNc-@XL" rr[AQaq  I$I$I(J(((,,,,, 4 ,K0 , 0 0 4N4ӌ4O0L4L8O4N8M4O4;8@<Ӎ<44 4ӎ884<O<88N<k-H1J>7mRL/t濛Wʪ검1+yts2;YI#$o>bcw-%uV_]vU諭UWW)w_Y\>*6rG^q򘥿:ܧy;RWs"[v*[PLyת2=iҎgwu}w|z9 ǿn"ʼݧ'-yu9d`y,z_n}oؿk?뫯?]UM*co(P?VOy뫟š?.wwuW |*w]mzEŧ:TȖW2Zʞ2%;ȷO}?Wjr(Rݜ9M߼r)m@͇?taM~}*j:pb̫B? Gs.t9UUYTS bpn>uy |!ν.*pjߙ ;U=zj;~}eg}߻~wӵtઓ籭|r>uUUY_oWONOy5PфQņvuiV{կww+ٕ dZG$uxOԺ:]_}UW2ʫꯪv sc ԫ9UW_U}_u;WUgWߟUUYUӣ~>0&*j<ֳtU))J6ת-E QϢ3r'|9܄5]d*ᵸvwg]~J ↓\nrrS?rYt[Oo 74Շq&#U|3>|5[^g.꺻~sʉT\}GFY.ruS\w\r[w:nRzVfu_>/f6>U}]gmmmo3{:{N]>+*v_<ݍ>lȍXmǯWiDܛS[3%?*&nJ,tWn(n-ۛYjp}O{uе)Kʺ˪|3*iדseq}~v[Zﯼnw>~[~y~}u SSZ.T]%j09Wp7ZKAO #^=_w\\ kRݙߺ§-> 훍y}{Ϊ}uw3ON;>UU_wuQկ_}l6WkzwՕ_]ϟϪ˿"`skVZ%`$d7~;m()UG򮮗ww'td'<̒d)_U-kW]6QhU}}Sʧ󿾲 wu}w-rdO!7Sr;}FW1Ìnve`:**ΓzSհυHEUOi9njBq5;j\uڕUMNY}]yUW~u]]}{򻫪Y]Y+}n\?SNT_U G?kHc~D]f<`>_v-k>S.Ѭ\65r5{j{ξU2RjiBʺ̫o;wH?yJ5!WW{_3rMtl?Uem՜\iuD YґrC\ơ {[M}βjWK/%y.U5_VSIxEU+ʝg٪9gY} WtyKϻտ.:+3F ;w[U_uU_F&ؔʪݷ3n[*u]9[>~f__V;ύSߏr^>ϥېFUuWwu}_T\rǻnuu?IGzT~3FDV}2w?-߃NOzuֻ~lnwwtV~Z;OSo^}++~W5UVwg[|˷W]e?>oͶ@]F,9\UEfyOZVUSOe~T\WS]ovNܖ.:s߷^N*W*WO~{S 뫫v#3XG5_x3*Tp0KPD|CV!H !`mݠ 5p x>w$JӦ܀S~WLo7{\mRTSe`+V>Qm;rAY*` %%L ڻAUG/,e_(h!hU2M@<!- ,e]Acj`!NJWQMKo`]ܻ:r%5\񉱩I:èO:'9VV Wuvv3Ҹ›͑, peoTN(ŨiCUfsMϙV^Wd{?~L8eDвkp9(HRsݩRPm ==t-J9Up[By?&|WU&I<P!`E A@ 076JP*wr±t"@n&ǂҕ.nr9ݯo>>:15=# ӷQFY#&I@#ZZ/ >VAƟz C#X" 5}J/+ɑr '3͹jT/IbԺo{GV{>D>lY]NyCdjow55^E\&CA,c`3Bt@k X 1}T94&Q & 0x!b _Y3mv{7,?zY$8o(,po,Oa%1G |!ڙw)_W׻ZU;j\ZU[kLMnB2|)2VjMݒza m>?gH/Z;18 l#r02fQⱅ9` 0b`2 O=G,@zET{ӴT*C@q *C@*`"&0-*0Bx T>0$`F& Sۓ}lS?w{fPt_ᅲLѩM>2L6uxhS+O[i.jbs~SUi:QJTzTMU}qa9@8=E%wb4ՏOɵ${l%n8+{: ]Huixk@PL0xY `\p @B ĎJT޲{&iΧfU0$xsSU#I/{ZtFd P&^dLI!7Qx2e-mENbܒ }gYY 347gSs:. 9@ rjYӏ0'~y3T#:+QgӞ2"c휮e?ݦH_fJHzNv! u7 l@TUie (BvwJpALڸEm ZC*J69WlX^ɝSV bC(&o&q-0f| x~ 5 Me9C)wR9? Ӹy!B@ҭ*sxHQ,@ 'S8eh>35LP}B;D=cIGFđH4@& v8[yu;2ffl!,V5pMNADFdc$;Ҁ%38b~$`LLdEFI65)`-G'4ӥ̙4!IbSs#]@ bJ #QhЛb9H4ǴVwJAvĵW8*Ph1XC"bKĮ%5L8 [ zD--Y0V#yn{zF2Xs.y]U9Ş|hmfpl:qV Xf;4.Lܯj~00c)fieg֘E'ZRn׹s:rlN+ҍpd;>V|@tX$<2'J958h;p# !Q&6x1>߮uZ%qn/}g}l9_w>y.2,-0dBT^xv$ [2Q= HmVL8o~}뙮?TGfmF5!i(Ӛ1[G^m "Вv6PE#a\ ñ ϐNGF'(^0 "pbA p|T&@Ъ\PdW͆ipgau8-A}7%p:Iƣq)LjNFnZF\Fa=i4W>B^q3TF5B}Σ\^d|(Dz@H0B:QhGBt911 ZC#a91,`$P=<- rT-%Kš%b7dɣ)ٿ\T/LqJ5<ލx[j8NnѤ٨&=CBqdK8eN8OSWri^3c$lwê[ӔL& |VJ'Xŋut'8zICFiE 0gkg6@>Mk8_4 8( @ 7Psq&}>${9}<<͓Y$y̔2p1~~P'CD²rqbDnp2p8&OP4uY J D6D̐cCT'>b,n/.ˑ<ɤ :wNAeC`N&x> I}p*1¨=ȃ٘%(m}"q9bJ#!8tZ|d?iL(Pk[N#74tΠ8pJGR$  N%5Ql#D]+d\! %-B)K[k^9f1~񭽍Ӯ^[群WF~POQ=rRUzR mJ+<6W/Z"FAӎo>pQ>H! 6nɊc&Xt̽CSKҴǕ#q!?)Z*dk Hk&8wZlgQg5|Č%|h0aXEV$1Fn~m6u I(qCI拝d=,>+2_Ϸ)}FJJoE8t݂pá1@Tt6Z.ϑ+dBx!C@+!q6ʒ9ENqlL/ e}[3ȣR%%Ƭ3iQ?(I55|1:[ӽzq5g̽Q=(arf$|NT+tqWSG|"}"mfP30EڴBzGMD#btu;T 0S[JTf©c+<j(@C ];ɏk 5 B~BtWhR=ȎAVN#Q|M 2  [/Q&ccDEDS7.5N ]Dɇrebx ZL4e¡sQ։>=lF+Y㇒y,\nR@8fAE!= x,Bo!ST `,͖Pgcc\Rva*G3GӋ]=엦==5_iibi,Is* *X<2<0l<pr2NFȞh:O 0 0%B6P,~Er dQ;i86zkUkj@HM?7V]8KJq^y5H'Dъr!R(7A*Zc%0%cBBhM$n. g,H2.u$6UKTmngV^kr]YiW&Ke[?.3V.E6&ĺٓlF Fۇ0sg6rMΥ5bжLS&P.ԝv.c~* Պ"Znf 4Yl}"|.@_7 P20? r!#SׁN(wQ ^^$$]קD=$K[2"ELN0 A@V N{B& @ b5 W Q<8q:1t "&1H=+3\TzWGV.:.(N`pJ F$D,aqTb#)N1ZQwdf:6'6 4 p\:P Q'lP fšd .K TXGqcf<#/fG;T쾍ՉyVVܗyNED Uf"n\%: Ib٠;~޺H)9٧rĚ#QX7iHH#Ō$ "BXFʫS4@ubߖ[ sYf"^O'$RBrC`^*ۤf#q#y,("ӂ@/RSԃOQ0'IZI Ogl}S~ͅW5)*"yq <~AXg" 5i Ep֛>bmMO&;gdN'b3P]$Eb=Im+cM >fUb8&_0yf$#{5)Ur#o3cQfެ\>4-O|Lv?[ 3pW!`; ,AӁ8 d c` J9L9Ċ8a3IN[ϸN-i:qMq"ֺpD LDoKܗ?pvSjcqܥܝ^@鰚NWjJ̢sSS#&`iΥ37e8c^n B-dDR:8‚SHm@x#m.Ld,c{@~(!cGчOa!Hmd I)BJ1 f#w./.%܅s]DCu%@JPrD()Ar#<`C"&Hb` hL"HXvY(cX#QQT91(rRGBd[h: A07 EB*F!L`Nᙣvw0813WJT =ucu S. FTϣOMs*w9w,rNj$1P&B„"XRDET> bR@"θ6 /& _XؐJuKHX.0J/c@u2/&D/΂( Cd=3KŅ^Y. $ "Hy,NH#_̗oXU6gt~,0t'YQPD " HPjJ} =&h8SA ݄p+3vewg9heQM|O5%`CiSꯑUVƈ^/!G{WQٹ;.W TBH/p_*uyTڂ"  Dxzl;EŵB3T@2Tߥ&V)^G`w F!iGmw9f)j)2BpUM@z#PvT\f!(b KDz4Am ǂŒ$:yPk5v-ϱw>JyV,r=u6T܇>x)wWW/)UٞZܵ>q2ԢVJ?M/L w+Y N47v%F jM\5%m;er1K'=:q?V<'A*QGΧRN)Qwk6'O%}:M|{]}깿o |' gJdV]T.;5kS! {˹65~y߾{6nƾX8Ae7]x%hnܯ&*۶Gdؘ@k@04HbieUu2O4n 8h KK%7WG5FPO%8p[% %w>o;&R0GhE  :P0uCIYW5 ޘ(jگYӥK'8tL+GG'R3?Zn|&jr$Oߜs gvaF) Ӌ@DVXc9# qT V!'8p" E 'mojx7Ďy+Q]U ":!֜qymˣmܡ& Uȃc$虒) 9kvS͟2bۋdN[%2MU/JoJ8dS>Wo)R;ܿ*L58Ү&H:XR㦾)HXMMi9M-%E}V[R\8'i4]#/\"Æ~m~V簔RPV#0R%M wf*dqI7.FCFE8FA@I<ה.;x:ҋ8Zo4U7 f7º:FU֜|}g]U]ʪZT;QŲ)Jť͏KYcl9ML"LѴ p; h8P PoY|.lBud‘JE,b4|C@pR FO)Wrʿ*_Жj ej)\jw;_}]|ׯ^W{_T&כ!쯅=y{^SFYuvO{XbUDtҲS{f=4VA8cԩK*tiw`](:M:]ep̫\#b9P^R(lA^D5 t郡AZ>2 1Xà$M"ᖀ3! !@|1x^FLur5l{Z2u] tv)KQ:@"6 G& Gs!2д]q`|lF6$Al_NLL%~! 73vOqbs 7غM4>(V%oo`!Aтe -3N TU+ O:Zu CٷGI.`f.2@EBṫ- DS3X /|NQ398EpZB#f lp$(xsAu$((/I0'ȱO$c_Lq'#bш*?2wB{|';4/wwP" I_lQroH(COXt/XS5g⹒Lg`ŸX3S:DlwJ9LvWO4r7/Mc6!Dx بGa!:S5ZeXi4N԰.V1 1L G.:.16a 00c!8 j@8SEN8 L(U@5u4<9Ѧ5XH}+-|֛%H1bnk}e2tb9G*s^s#̽e??2ײ뭻ߜR2NPٹ]2AiYܶ֊?:mڔ]|vv8 ~fJݤM[}23 %͵g'CvyAj\Q f q]HF"^ѣC0̑:K;N[ZooTw2˷/,/C/Z`{4$.2!8F-У)")台E>;anq4.HWHH*sqEX4zҭ'5b$5:-zgl <̬r*Teeư& ڮ^*rtCLR <'>t0^$ סWuCÙ@+h) ,*J L$2'>F"Hu')@{gPŲ-d|2oҼ;ݲK;e;̯'"%s[w55t#hK+ڪ[[TkY1J F@D7F8~@B]9}wQ}{U-!Ev `նkLhxQ"ȵgR}MR%siY-Lz*;b0]%)A@IaퟭbK9Wn*%Q5oh%uCygjˑDF~BO%)13/86X(#+27W9xZw_8^;8~#Y*3Tp y z?PBXA<&DMvS4CIgL7o+tT"T. i+;%q1̤T~|<8HŌDrdĆ<ᢥH> 8٩ F F1hKYs ſY`9}NW_̅\=T&1;9~ܝU۔]~͵Xm;]R>KQg * @{5*$?5MOo҉ Ԓs6 aܖNIӕ-ž4=qgӘveDŽt [dIÀ\ۺKIvKs:P,SoZTM'N%GA!|e,z=**p˧<&$.^']E0d'Wy'5BD c( 1 j_u‡"N?Kܝ*rЅBFL֛O~ %tYI…5pa!yӢ.PYl'TA4n:* e(1FzpZ:=*`0ldV6']\)A>GAh; .-PGДP9^k%X Hru8w!Cy."ӈxdN ]"T MJǕX/ %˖6YRl;9Ϻz?|ٓ El](F o#<%@*|Tĩ?/gg7ӗݻ.|ۖv}_aI)YPj*:8xTjȩmZvFCA3*nXP]}ouT3T_TU7sKԴԂZJKi|lE zc=X.UUu%s7%9ȥh^t0c0D#:er _#yq9Aѝ %]H IuتI%=KNw}fyG-FtiE[:!y&o!f ȠXZN椋k̉$ѩHY`'e`d ʕr!h vȬM, C' _Ԗi,Le 'ęGq߮}}UOȜUgjSU5'q쯮JmVPuOԗ1׏QX>hCy}ٸ!$i.e OHv.c|O?иȴM18RTFhS fʪ;(6*K%&ŔDEJ'UMV#xYhy!d9Yx^)N#jBdN5m\ytBOqJ4-J) 7)' 2@2eN}m  Jp0H¨@A;CIe"ͫųNQs#b94F|! i6Br/:B8W ImI8g2apQ4KP`!8 Z]I `6#  '& eɞ<8Q+(L5,S(cJ&%,Ԇϋf7wJk.?zQd! ??KsCpύ7&ss=Y/|U/|+) ^*aj:z,`28FİdZj.EU4 Y7 Nj0 tոq^äHcE:>OsR݌: KZ9q~^m:LC#D{TȐP:dA̬CԷVKN\+n H S@dz!NC ( Ka&c 2erxjl< B+d1!lhP1Uho7)y&:H+MkZq‘|, CЕep6umH%aB;PGWkLf(JjDGWDJ(]zb6W`[F!fI˨+ (RJ)\;ٟy~63X6HuW_f\9t4:_%UV˭{W_p̧if, =Q =#&ENe&]"g ғuSSqh7tNC⩵xH%ŬtA}:A*R3`uS>V'50p$ŀ`M$!9DD! e9rtGv~]@g->u2:T'TYu7KBK O 8dloRy?˹zN5Mfb&-R?&236>$fIl"Jp"bZClEٙFAÁފ }PЁ![RsBguͯuu{$u9I:՝ՕWF"dv,!ҪEa) b 2dSP8lš0t'C iFCADp)RBsX|`eeqr4Vp+/9 b\sr]\_U~mldFMrB/LF_aJѵځQNJL4di]?a'}jPWw_8s^Ő޽ Z h3ģXN|<"al NU_w8 Û"ґ1dP'?3@cɭ#_crYqn7P@넑WTw];KJۋ*꨸3TRSqd4p_pq:iݴXC>V2F /D>X&˾q67E׿VaE*5 W'^D'XSGLE[r8>lxL5(C&Eպ槌zlOZ7ptħcQҘ l>ur[vNj(#FZKe[V~W>6Fn![cPO-.uovܷgj w{XۿۼiӞK+,˺{Tm,D?}yBH=ήwf r2 CR3:3J;ħxim /:L?2\SRC(6IFJ.$~L : <"!&g$%eBhBѮtإt')5Kօ TО:Fj¹BrCϊb b\.R~\9g3ȃ481 v&8OSO LO^.CIz+P剴B^PF1xVnQJlq ^ izp-2 #ΡP8؄LxUV D : [9Q$GԬM"QIiT2lj %=&d0fǜ3F ԸĄ3i\9-W~-Kr#.rsw|zē:6͂ ,E ,ѹS?WT:Ԯ]z9K_[sQw>uĐM9"Pr| zφM/1 |j6E2%4Y#L6{͋ "ZT%Luzy}4/ 2`X2Qo+2s=af'{0`e⢂-xc>^#@xYT\lt ˭֔L@ˑ~7d_Rn;ݛOsz= vFϨ}_mT42aa374YS/TJ&.{0d(@m aH QAc'z[.yxo7-'q:]#|zB!lY*d>6{ cz;J/Ghxl2Sgc5/GNZn.֦?.=VŹnUHc~w-}[(BāqOZROz;{G.iX} ĥ \YY(,b<@^љz mUmRV:b^qTHg ;,Q8b<*YmM5y哞4dM9ٸL7:5AR[eC 3:HDMtj4G}(vR$GRl=@`Ƈf}sjJ0鄧*#V_?zg y h>gDRQDUHR(C/l%[pqeGEU9 $UӰvgut`¸3*$V4yIޜ_5(",8܉Ϣ-D@6JhfMgm_?\w8g[-{MyG9M&!!Hȝ0u򶊕q#Ex]$ʵ%p?.;.>Kۼ˸su^/s/>69xp҃>0h8 PYIur3-uo:YߎW[YZ{#iO+ws]k+H[o2?y}vwC㹿Wlw.yߟv+N{/ߟe}>7w^gmgoV~st )|Tcż^W]TkgޭunoS_95rZ7V{*iTEbV~oy+ǧb1W7k?~0|=j˫կھϯӁcL]^~esk_ۿ~_{}j sw?7oS .sȸ5 s85^>X?Gg6Hyl?; M5_cw+3O};s˺f}땯Cj\)R;|Q 6p{jh6F'a6N4n!9 *ve͓2:rڧVcݿo=w{{߻Js?SDg >˿}n1ۙ{]}:y\ͯ*lks~/r^^2X aJ(\ofEtc{*شpmỚs<^kCzgBY>.M)|+}QojN`k>rYc]Y-ypv^Z}yoR[ۿwןwJs-h˭)[Z%.w׾׾:+x?"bCE^$\#T/}B2*qy:*u^3yGnÝcUC'ea-7ɧ|0~jθuZaZOZp,w]}f\)w}}/ovɾw8+ }Xs_fvWrW/;so'G 2 P$T'Vi3TNۯ~UC׫rr}UztU|e{x߻^v:VϴP3o޵yxa[+y}}w׾ou){?~ckW[u]>.kni-PRsZYU;q%p㧹;m뉣<}7݌}Fn+=ϪwJg;[=Z,}q\gɆ談>w|־fݿߏ{+o_[ۗ}=w[ey]-laXrKk|N*_+~gKloT[-Wnfv1fm~X\]iyZ-g%*U(-uz6^a̅{;36]9y~ӥJ "̈́YmMX֞s~g~naۼE8YkUܥOKy3jZzߧ(¥r8==QڻYg5cy4L¬ԫy/nByw{Ov]mu_/?3/ywg[}wwou_eg?6o2nixJ)u^)s?{)r/QwNZ?rdn}[f]gs mCF^7̬2(;Xg7k/w2 r\]̼󯟷^[߿ _~msf~ ~[̖Bk~ffo^]~_umV!UB  - MƼw[ws_ 5wZUߵvYo]>,?mA"$ ,QɷL~&=oMiOGfC[VtwvgV_!vC^_~e^uu7V)VT- ;hF02ӍFn/MRoiw-ds21ܼmZrUۺOi\'V7o˿|?ECs੓xvDǁ 8CL o/gh쾋x .{}m{;)լ5+%*~Yymag(u!fv8!U- .8Oh,F]@N )&ܜ " 7 %|Bz'8 #X+T-@s >5y2;wܼYJ& :o÷2j[[_GW$cQz e+^s'UHDe:ocr}% K/]ùt>}4ܭsz/3+my͹{3_zq OF<3 6@C `%C@ pMrT|x)C΀N+$DX) v@ 0,[X=8}q~;u% 5 Dh^iճ+iL11Ȫˑ5k3K2 B3{b3x}ds[+v}rҌ7usO3WZ = c1Z-,Z,X\/q~&70C2~ 0V|ش[0@h86[a8Ua%T-M`EC߼W{gկK89rڸ`K `E!l:{ *H%O?Bc"ֽe}gY6^sY>lYd7nN?k3=;)V/Z`~mp[s\ tm}OM4r|  Z7R,!}X0tphE- (J>Sw!GO=ҡ3aYޤkyʑ$덨 0h7=[{X p2'.g]>K6<[{p}d]`5N1IԂy!IX#jHw_DJΣZo(@`` XZ@81)fp![we4Ќ |!T-Q| )H@#HP6 6\arC9H>}TXf+8a9^1嵴ύQ-J !/Sum]lT ]F#XT}6Q׿}_!nN/aM%۪r8i-߾_곈qqSYS+d8TKk .KD4/o( F]D@ `%S"PΗD;!$'0}0ȔFAr@HKz9}`̕z3 $@$0ܸӟ[M_{WqzG|(vGv1b]xZJ:u|yuzP2kv3C޹ Ϋ%e46! atkϕ-gBJ &B'B|Y?>ebh;3)@bF8@J ^ lT ЀB ` dJb0:X.3hy[P ˟ƻZY|~q^BSV5R 5Ns~ɋjNKGǪk|c[bJE ("4! v\֩3JEemևU c`-bX@V[-H/{PYުAx\P`(ba# Ș:l"0PCAhw&hjwIߺV-{ugS\eT7ϣN $%q+k4@"NunY9Օ=x2ھ^Cu_YDΪSҰj jVjuw {޻NJ> pN=*s!l" Ņ`C@Z;Xy"OL3Vb'+@@ SW&I g4v)7_AX;}k.+Wݣ~thK;X"<  `qLV>7Xr /r9^rGS7? =mÔC}_-ҁkn6yʡ*=Z(2kOw;Fo]JmW=sk8̀ ( 2޳hI>Ơ!B>ύE{#a0i++ `xAl-LeֶLV4,֪*%qM$Kkפus_?YrFHGI0[ZHa L Xw7jFE۸5}~G%uW#p|^l\lA `j8wΩ,s:zur!A,z. L.ѹ*t @ d7B,5aW^psWWP 0$BUiiffY"ńm vXv~J]E]Վ\V֪#52z5bJP z? ko~ϩJP$Yh/]o>ٌ9+Ja >E=@VuwbNr|[ϲM7u1K4L-_sq۝a\o),;~Z=@L-su@MP=5Ƚ>Le<*O1(jxꡂahGj[=AoM ԞO<u~] ++*cQىՎ !%a0}jE*A?gDBϷ7JRoeiZ/kҝz*γ*X;:Z/_%>\Aoh!FT eah@2G;/<]e MNg&a`~\ p"At@p! EReRJ7wVW[FxXvݽ׫SNqa($@w:\ y^H?uibjqȁCww=pqlmsOLr|nOw1+GMiڼZճc\B(E;d꒝|TxvU<"ttLX/VaP#p) eRLL?h Wp <};:A~ӕUR{:4AEf*R@}k*H J An5{_iG*!ݽBszEVt5Y.(}5w_ϺbT.  0?[uǮ~}O-' ec` /pe͙gB_J ZY@-L0`>nj'|֬>ϔJ䕽wVv*2WiªR-uEIs&GCE*t˜E v+ҹΟ|.|cI9HL1B4HX*G?&O)i+X@5ƞo6^eg QP'@+@Cp18` Zp֏֑N!<Ҫlh( PM"z.c#C֜sۙb;) j&!$_*⇘m3<]ydm(+ڬGSBsP]>Fdk@N@" >P ;H&,ln<RTlhfO(!K kj"逢µie hm޶gC8t+1]x4W93̉ʂnl“eDwNB!.j dpE zDd<2 TPN-X<ԃ6?0FA|nB،b<83? ѣ!GЋպ_? klV:*x/td- IO2mQ Q=Mb+I[6 n dP F1X A$!AdNX }Ujt:a4? 4S0ɸ} A8dHN'ݘBfAcIMT~q~ט_jk{HS@ 3b))GmHDDjGn_wW[}Kϭ#o ueu}7Ҫ:OOөrIJ*  hPpDaqkY(ӘV`90Z6$B{!Z.ْ{SFO!U\}c֚/]gۋNKV1=V7Mͷu×!$y ֭iFx? IO}0]9EW){L6ybrB^ÖN9Òg J OS%7y:h_Vz?/j؆rù HDQa gy"Jt\ȕë|ݺ`L "q.: 񵑐uiRLuCK%vЧE:Rʛ41hz,/X&Uy=D۝?aCΝp=P FKWuwXݙ)$VQKdKKSd :-7gHG#^lV$0O(-7awO jTĴɠS/)X:T."(4ʕ_Ué P -;r\±Қ=K|=,Y4W!5mEkvO[zߪ|/aLz_޵ưf5Bd|Unrc5ydLr/69YӱԊYFi`G$&"Wj"7fƦj*<i \|7~.[A0WRE. 82(*0 &L*Eur ]Pq5_[¬;dM'.Yv-Dْ9gS%ܣkbEfEEȎñ}{]m?9նղpv七P+I輗[!@m7q8dV'g.c҇Y= tI?Eh4hhKGIO6MdKĐIhb:$y&^?g}祆TLQ AMpW}n^xJYW F`O2'R3 u#"fB 4nZ8J2FEk/TZ+eϧ6u%7^򜉒]6 R/PT)hCǐ'`hĂPe*̝*,t] &#qųJxFl71m0h',Pd[" _5y)ҔGj`ofY\-!NbϚa@ %7K$ȋe ~NtY,XALxW|w\N!JUjAu<#W $'ݵh]}u IKQ-UW)8p4/c7)tWAkZ4)̙Z RJD3,PfHeQBŇkߧ] sg\Ꮙyg\'#^PsU.%,Mƈ ŪN._>{z1ь}5p>?j[q'+Ljy߯ooXu!D п3F4}1Z֨J#DEn|y[)ѐ-.8?K6H?w׊ S+gF63#pB `AF a8#񉈈R:Z받zx>+:G C무aתj}W ;ctZ5|vط #U"rMe|۽[POPyak5;Ex>UԕrՊWdI 6(%h`ҹc/5EEIfQZKī z%;T Kc$39#U|'`K@bX`%/ ٓS͏RA#JXdGD,Ēл^igx/,qG*Y#T(qdYo>שׂw6gGCN< :DHˆ#CE/5\.ldJWRUsA  3'=!TN5ʃ9LPA1] Q10<`M424>SЯ+(Y]"1Ƨ"VC(G 26,1 y;y8FGU+H@ډBO0^ʘO>aŨ{iJOUS-9ZA+.J' u P gNkEؒn\{vtYJy3?y8jXu/dYh 'GgJt0A҃ŢM]E~rvɟ=#fYgqطw֢Jtr(@C!j:?'Q ,U^G\Al/Qƞ5:jSC]I7'F^\jx֟ٓ+AJOndl- GGPœi"tlwu C&25NT?ۦWI:򋸢VaۛIJ"e JyJ!,_/@"%KIKi4{fqdŤ'z.6U[Lgu=lwZbIVzX3ާUQٝ?qU*4J>=^NAR/AV;>>V̇_eoMN2_+biZ#XԑH ![ED~T?v@Dh.%b gNd雦*иD8FylFxrp:G8/Hb@vY`hLjCNT0?m6t^L* py @&Q\؂*?0) TWdPV/%>a%6m%Ҩ @f f8 fm2ufU 8P;=P0& MPҔ:vC`Gɏ8jy4"bTffY 3rQh 䫏m=B  #c'۲2cvJh7`].0Q !x6 fJIO$!33a IȎ7R >>`HGJSm.RnT"m *c/gJ5mٗu$€s4*ZQ%/BȊf %KvTI0(L/HѠRbЧ7^1FKI>Mb+TzC@: 3?lʸ\= ==B2# ! sNs3O:&I\2X(27gq>IEZdz2_ٓ_ +C'gD6\džZ7YЮC]V:qya̬zz c$E$vk9 bi3aB%r=qȧ4nM<|L,OS)ٟ}΃d2!L;;c2 Ps`ad5 rww}θE Df\S(ߍa)$dgIk>LU5-Q5Yy1= ׺?:P`H! FV|vcx$@pe%w3oZn&\`cO=Fbܺ~%&;.kWRV_+XԐK,Ghq3[3CBBN Py /qٿ\>;1RhJ 8 :R5 0- qt`(lr q䡱fa9088P56u}SYYXq02q Q F(D5C褒GEWTnB9bx XVx9JrJM#& 5\ߐ3zdԒ:1U.l:%9*{ًV@=TɏDb~ ݻ .A7QxrZϩT'9'FIg+u~cnUd gE1t! ݙ"z:B``ux"KT$'1]g[>;zF(\:/D|3(;.s8V+`V#H6<ӔSj-cWqClhdq{#P׃jf=[ ߸'mUhaV3*WG#/F(b̈́dE{Ɯt#lXaAzfA"q_SZ 5 XwU9"( (L(>s%/ \2ޘU6>-|&Ƀ⼁"M~'j(] %.?m吁Ɠ4@4 +JY'E5ʏmd ',N3Ih;z眜nd+\3gDcgL:mKpŬ.ݾݼ}\JVceF!y~%@8#,#̦clAٕɸԑir$rOT*H`}x+:” >3}u*L]&\6uDaǐ:P %(Z=b::ttLj8Xi)7@YWUnӰuAd^Pp!>(;l85F* a6͟R_s//DCjjU :ss.kf y*YS{ݼӟږ:ƚZ8tAp,LPr R%fU}F1+E8MWG͢(s|(q'Ԛh68ÓdgET8,6߫m +zXζTwl_eK< g*pq; &+  P#=#$ıG9R[85]1o0LH9%eaFD8>*XA>!`Y:GEaLJ+l o^Al Y;?Vf$񌆥Z$M:yB3:3}3)%\*UpUqGѠc pefCN!^yJXxGa8|QxlJH )`2-RWV5%ZrTud!g0|VQHI3@|m2n7^2{w{oH !L \,)p3H} f$E3 P$I[Y^ lh?Z7;֪Q r^yLnxCէ֙ wShqcMk Hȴ^@J2 \ D,P3DRrg2Q•h#8/_`vϵoIS5 p~f}=y$!3/&(Gxe$ߋ$b:ǝyHdOUrQ5ֈ"P. du~?d,ҝIiQ4*BAdSA5 4! +4 h!#E,^ɢDH%*V7}]2Jֽ7:y l@#&`}%:0ES"0-MG"0NR& lz)*:Ah怃e)r6eH!7!6P".]!pE 1b#S~m\xf&=XNBMp$+X3L ֪L6b`41V^ä H` dX8 Rabi 3|O8 `E7#9̕(#!ȤnDRɖ`HBirs'(%吘Դ=8tUQ!7P{ O\ M83 C0? a:@Rp\0B#0_A&E MB"Z8l|Fģh -$1\ɛNi &2 &p%UBbA(L\<8!U&#:"2^x.N]UVAh%յڱ H,@J:d~1M"qL+! W JXZP2/b6yEȮk!`E9BOW0ȥٌ|m)UyliMTGA8ɟ^B+M+Gc+7KR›b|.ZoWH)YJs)%CrakTPHqe" „Q2pwɠt#Uzr0i#0{J@9.Ӹ|%@ jAg,յK ۳N2"6}71bBΌ<|ê`&qcGxF=Xz'GO4 70r-,Zp`B.8vH?0Pq ahH`^grt&ƴ苂 EA0ic/pur7W7?ioQj5TidE͓i k,E 2wz}VEKfiFI\X98$`]149'(D9 3Y[(7gK Nl6IlTND dD:K0YR‹BBvigެ#9C]ʽ"V1ތdƁ]H3/fu>j>~#DPF; y EG#8f٫іz,gW{sU+F՛1JrWX lUi_v^]{v>:6pAf%Bm/ǧ]X+$ 2`x|[X>Uy%VEp_>Y5gR4ʊtW/cTI1 2& ^3da,S!;KV_+jzi9BBKx<yUw:صc6s߫ok֞*NnV:,Vv1,=EF}^.[2fj*O[Y}}L|-Pvn(8hpX+ )<(bnM()PR&nh65B@Nmٖ^BleMݿ|PG b)jʂad`uN6Ř!ӥȅf\2ÕNNHd1XGX9F]2jGF>$q@pRl )ƚS:}2ZY9M ^<̅^쳷gq)3xf ?ֵu[UhjJCY |߽$bRN5W"Qn$^ȃ꺱TI3JU] < wR2:FdƮjb.9i6L,dV9oTaYOQ//'AnVA+[Gj zu37&dW&d,8"#;"z.Faf~GB+6°sv,~/ +Y0}Z5T.hILS+Ah^yP4hE 4E)$JpɲIUn=HXv ?Q{(CHekHw#kbυ^;AgHWYhS B6VZ }"ǽ/;+|qT{4*8iChq֙@]IRrؗFӳg5%ŗ_o/:Il 62Ff4\t,r03X*P3=1hGHKSіځӪu!XJť1(kVjdF!)(Tr*[C-L|4# fՠ.@M;jguŐ0*YaP.")&Nyú "]sDl΅Z-nT|Cec"apȵ×G,5NlHn/*2YJ(Y/G4 v${s#6YLM,dʷs[?}k?4zhaϝ!Y{/' RPգ[JbójAēKǖ_X=eJ3<4diSu$3OdEΌD8%K2+&k JIKcZyVݟ*uqA$tN[ǚTR"xϺyIVFUnLs'r#ӡ>#9rF#4̳GuL❥kfU9#i92QV(A~>hjy+䔣ŦD>`M׹ě-X!g AbF#麱w筟!p*;+:w>4^=KCmVP6u)(qI!:zGsp_&,i{ `=8U1 '+1+ .QmImpu '6 __|iJE:vUțqG ^#䖪I@t0C ȇM'X τ P?>{.(W#i9@A * aJPiYI(jnP8 !Q5v;u[a=)Rgr(#Իgy¡̚tVpÖF_.ॼ|"_27'cqiʫdsIq($z%}b|VMrFeH:)@EU(vx D!0D+,6!q$)x0bR( A`*6b x :`wAxeD0BzR9Cΐu"1 Q-j)p 6fTyB$Xt F.;Az t*H3CuH!.]j4Nتr-Smd޴Mݓw[˷noYhAncR}ui GS.DV*U뻵b4Bl{0]vS75,% lr^JݙָHGt"H+Wλ{<"IW$Ռ^/L).C4GZ)k fWzyj}]vUtxK磑aS:m)=Tn LX@$ٟ4м,?cѽ}_\=6:e͊C%cCIUkZn̋fY<qYtPlhq4KqD}h1Cb,Ŵt0$/2C4^y| p X{`Ľ͝)_t*c@*pOG8ĈrkƐ4wGj,Yi"d1Ce?Sؿ#aAsd( 9R^Bѥ۱w&~`=i4N/Mb֯`n-ٚ@bqqTxdžl[em'6UBY6$*B& M\64<`0M*Dl٨d pG C n(10HgpN;'Ȟ\p@XʆbDԜm<$1kz RdJ ¥.8V30Ą ]iVavNQEXg.%_}m7F*rCŲqE)kZX$:QjDd"8bh+ MŢ8ÔIWkzyEgP3h("+:L#YxKK4AmOqdAr,6}՞| (:4|/8!%F=3QQ HPT 85-2U+{ʒewp*̽"ܓځ#ǮV3*&Hlr^u@\ ys9Ou^٭)2e:~ƒB 7S,@C*QiAH$&%iu=}ܘnv(JB5UES3ZkEZ, T!! A@BBߋ~+ وHޅ5ڪW-ngƧqj [*Ls3H!nSB}.Obk6 qΓEFVϪؘ3hΧweeъEMZ{\){Xqgǖ= jPs|к-y 0 /IhҬIThΣ)$D>Q *c1r7'ӟiSN2r'5m@ VK 塦W:)j.5#4i`Pp0IGT63 FTS3ZE'_}1m}9wmϛWfF3R p:)E!TaƋ\9j*M 4oVqELj9҂R‘(f"T *t*A!7@$#@`>8LIy`[6Ui54^VvB1*c$hfG yrR JŶz Y(5$\;!%B cFhUuxN8ȾAzX1(HYc㓬鴗,Ca!^\pbFUmEUz.\l1Ń"C`EvKn0"GN= rnO"'#Bc䡤Zy vOo N`8 xj"=-CY^)0)J "z` (S ӑI2HH0<;'тPfN#gn5[#l'MȮSj:˞QAtx7.fW7~%ŗtB@&$s#֖j'koGߗ_eT>t mYןt߆$u#VTKW&$(7JxV9ԑ=hh5knL{zH /t_cIG%LSAd]maN2ZV0%)T]L;wrwU}vЕ ,~Ц CHH]@ !PAL4"Δy,~>dhŪdz-H_BV/~-Eؤe) 99ܬ{:&mUXTOO"O^ڂQMsO|h͝Ykuc, ./@d%2$A`lOLω lmc Yŏ87Ѧ  1`36(N+k#w&w!|Ѫj/-3$Zs{x|s6wA)H f$՜6odMyM#n0{u1ncI'h7'&djfRMʮ7LӫoLtqcDQkk²to E}806 GD8Bq6Tb?H:bC"sb*}wE1춋PFřჇ< e+8S]9r)& p )D&P2q6\i$KN3>=)3tT_aъ56\b=X׼躼ˑDkae) TeQ)'$DFf! Ŷ5bBB7PHfѳv O5)0 X=~JMA@ODx5(Pt XȈ"iNuXcr? wGBD$,&cA>FPO+pVNS,C"rlPc tc3d.wh[$mbufTjmZ][X܅>obC1馅ֵ9ˇ羬L!qUn'z/>yoZv+b4tAs_jQ*fIů)mVyJyڝo,z::.ղ|$ :lx=!d4I!y\g713 *ӹ ~;%%کb05DЃ?(s<ĎuJUU=[ﲛ; v]_=ކ߯1-̅y>AijsuV[!'YZL}NhTMzNR*zVɑvmw\6WI3hjMLV\vl\35 0 dV $x :rUp,Xi (N B,l<.Њ+̈^LѲSD:'QV$;(9WP`Ou0^>AEQaqq   $I$J((((,,(,,, 00 0, 0M4M4M4@4L8 04N0Ӎ84;44N<{88N4O4<@<<< ?< 8<<<< ;8<8??c<?<<<<;?<;Í?<<?#?<;C??<N?<<?czgP߷wpIUizz_vݷw廑^;ޏ;37s'MD=En1y1tc[`nKeweY~voFQyF,~_̽wt\m -(3r~^(7% ovcLx^;i}G~{ 9B'A]zyhg/cߏ-:dws7k̍29olww㙻۟swldM{At3^6r:_~}~?3r[eZ-vG>ŝ؟tog_m/Ϯnӡ/SojEw_7cvjo_[ْRynz,~S-Ga_wz;-+;eQ41s̋b ՘|iXCmz|0s'ndW~c>1~Cdc}rMjAlb ^Er@Of7([5/.wţ-l=#ّ??ds7>9G3e?t{@ @C1_/^-nm?sc#.r^k2_ə_2]M' G aP#!<Ҋ/ˡVzaߴۻͿtYo^2~omލo~1N9[vf3۵[, ռG2N~Srw^3#r-Gw۾ϿKJCLz*e5ToO}evo_u[sIX mM/V;zhnZδ3?33-sӌv?9;3?ݗ_vV߹uf8?@AL=ŷ`W|hvgN_c6ͼ3o/ZV~g}(Qg V6gG6ֶƵK-0!H([byM `NtVԔپm3e.̯ۛv-trѿWe6#_7%z,~ڒ!gl,8g -Q۬0ѝz֢|#̼|7KwoӢ-avWu3~;rxܴ,fxhAD .H d@),4+If~w_nG7r](39)GeoG3:gnfn~t~QfljEP#R3-(fCou9}fO7m˩,Z6ߖV>Rgcҹ;4ʔo>@oWl屶NV ` `*TQBgN=lE)_?7?;7{s#fow7-/sчyGo/gK;kWݼ!?Bpǥ8J/Uemw6όsZOzMNRbMeR#$1uoK9~k{~ǺbA .` @^h|&"fOmNE67>_gf~n6K?+-8Gc-܎om3rύoA?@)D9c-[A69w_r_NߑίV;-8_Õjt[m|lzb;bq0 `EjB@2;ls2r~Kg\flg/ffoKec8[ob<5bRR|0sc,o{yFT F6F7t䳮_is(dzIY]gzwMlO6gOBv+a}֌ $K`C !`pE1XXBhZVb {_s) ffo3%zKss#b_;>~G7|e3,ou8PZKKeo̬.onow+KnrjK䢳32pz~{YMo~[v#Rӡ@6vXLhKـ#7R_s{Ío>w?ٿA|͏ZK/߂0Z=#:P+pvW.i֏CmMGw{;=Э.~G2=m rU37nfn4$({ zO̖Pc}gP bN ,Q 4$ܸ|(F.77;;+,l?voG?33߶vdg҇mώl{:rf?Vg?;}r/ZN9+2G~9e\9*Cgl3-2gɝC{^๫اDwJAr}vu{@QV' @,&a TtPiHݧGS^og0sqZ@Hp 3Fa;J ޸44Q ޽׹Or ycCA@p`1֯(`t+PE텘;[()fwv ̷(3oOH d%@KLDnb0JIUX=˰{ٵww}cO&ed;^@HqڮA!_/k8zxf)a= ԼĐ+%Zdcص Yx`U`1x!'aͼ;:b_;v-U[@@RA X6G6D b2Yl!_'l Vr>QK>fx=Xt bAI *BBaԩ4Ԃ^R(F?e0՚-*N`: wkMB$PF>7v&$o*/վ/;׬g84`p?^T `PnL@/djF@"DE( 5 RӬk+<eQѲp@ӥ8z%hPYfUv fTwrrZP ұN!u?ayVܼg#14 05+ZF 癒, cF ~p_3qey0 1Z@pxc-% tK`I ^СV9 Z:?^otϳF  3e]U3_Ubv}C`G喁P'O)I _dCbILL 3b6#|i+kc!  _ =i䯯b&0Ĭ3d[cx!nwgC۳+׾ap }g&C0$3^T?UyɵU*8F,ƶS$@hBYKD>Pߠwe^=f;,R òj랐āa6 {̮Rb~g.d~jnKHI(+ ,8Xu$}>>~P@廙s3!5ic8cuW|ZW^kҬ1 Ppz6}~ X[.-*|g V @4< & :2tNSϢr+ e@ 8&vBV H~kN4a,wG,%D&4uiohbIv?8=bgO@oLRʑ tnE_*Ck ȏF^)GfZKok:VxC_~A#%x t,Nݥqh?AWKk1XЁXC(J.А@rpئM 8JP-d`C怅! nJLx 6^[*ʳAYsDCֆV`ܜVNteK@\ҋSjjڛ8굿kα,deBД-2AlC5EB, G:Q@*%z`ݱk80Wm2;=jC֬zY1_(7[Ov?C>E8?8¾|Uhj3G$ H PN*Wϭ`[Y?єn`>Pwř+x\|q+kRϑf5yxVgM󺤱ƞWbwrgR Nr3HK5&B嶎@A0# ݂dշ?t:I[?=̡Z;v v9n1|χ}֠ra6{oΥ+|i;\TnDSR[ځsB`at.%R`g2 al Kگܴ0љDHl]ƀIIQ!DyXiJiեM>SW4s"Q:c-ұU| J@ yq: ^h 9p^vZ)H $WPLگ󋣯Y[o[-gB76*Y+rm;EI cʻvG[Sn8!3,6  @Od<\YpCvzy;zhh.?U+(mt1};ᑰ+HLQė 4l͛7]ujUrLR3˩URE 5Rl xE:^ldٰ rK{_spHðYic>h;^3g~1.}|b]>}{I 5-Ws-~p @dfKuL$W'M4 ` Rz:2utudo f*BTu?>N;+ 4"Ka.cEkަDv>d¼$%*IdUy¨Vr'f'*HR 10pu3F2 @ajӑYԌ`X0 &^0fnRXn}ݽoJkZ/>U&XvFLfR#;t9G<2 `R"l3@ `f04Owچ4 PZ1&֎J!Z}WkF}W8f Y<}$Z ` ѝօ\'ֻ6v <@akfk`2~ ww9hSN%dbctk~'|.A*t۝e?:|`f KVA0C̱l,+S]c\hP0-@%Xr]%piOjYu3hs9r~[+OQI["M3%l'76>D8xX6y9K+3% VA סncW/|놴ZLK+JH-l66Ll0Q5)rg<  $!h%m:[:_Xߖl…cٕ1p+tep$`p8(4!A;|/!n} [.33V_Y)'a~&vR6t6'tF EsZOHUMFYF) i0/"C@i@ة=td>}^[eQ.$F`faɀc9H{eGxKDURշGU1:Bk{wmw8ơ5/W=?WX"ɏ0&a|x"84KJX~@=dF3v@ZZjRccX1VY;'؆N B„ 3(!9C\IB6?!D@@x7zq{XnX`4>Pxl- I~HlIc'yYbĦ,[ȎA2 )VP0²`Q0L9@a&09(/Ih2J B[h.sY|Q,R*.~6ٳ@'BmZ pF$b *%8` y I ChS#DjLVTpeA:J*#hNCBd]DAy9xq2 E)t*ЪMSJV`s={;NL;N:#pjk?]o8¢TVu~TOĘϛ;oS/l%(cZ hQknmh;M|J{;ȵb AT եΕ[cY5<篞qHǂ|I8¥=d 9 B`8 Q'R/,;ٻxL3 $H,plsN* auVBh+[C`b8&>&Jlb9Ů#jly[(N@\C_#]fΒƷ JͼӜvK;iǵ|Ԑ/>ޔY[S}hejPXlJc(YL@)O׾94˚J| JNpf1i:d{ĭ=OUsgK7_Uv9, gHx/>HAvԊbbq[H4(=xL!\gnkOvM# ]=a{?7YSzcIh'`)-\zYlRv6$Sfu| ..:&")t뚤N}?S25 T8(YuFw2{Ѽb}7/jR}K/btܑћ }4Zل⇚u xOf ȡ*^7~`ESp#x`U1xYjagnolX /RvENXѰ)=q!wƹOqxE"0gfsJ - Bl)d (E_')9$buL3 ' $gA|"A憥b" w͡ywԇ$l:.LT Y.!ѩ oxJ bufW_[ky,{EN,8bbt}|Mt#EّƧ]jDx/xıR"͝Px'ۮ!0Kj#܅!LXI35$# &K:MR -`ƇWÃ2pFWe ķ&\) Gea8(G*3AFjAilbE<|Th.8b'^}M9 ǣE4-U/= E~}D [A^x .֬գ(wi#ʞ}yircUvk60jlbr=-Yώ<*˩Fg58=NomZkoC8Ì)m7)zlfW!'ͺpwt?,Ce-"}kN=}晴{NVd`LO%WNN4P3ȅR1JDrRpэm(qث`FJZF2_ ^u؇ނ U[vz6sw%TF<@:-R(%ӂXF{b8z*iL( B~0YH#Q6#^c CpALb\I 0#PA}r152hԌ]P83>/n~L}@X4 m @ElDU_ͬ ӎ k#L^dr pd (  WULr?vQ c'PM3<܅dKy9퟈)M#bANg%< d:IДXG^H0dKNmHd&C䀕xVjw5;IωU 57FmvZJ>N W l@Q9 !!Z!07 P G1EV'D$D jZ-" SH]2pJHt"G:0TQII(yMF>IBB'\sVP|{VL'fKmn9G%hޞ>'X+$|ȡb"ga)%!׮YYfInj`M2.ktV |zG=9G7{rUȿ>x :h}.U%^`ΞӼޤ=L(ۿ`nĈ`1?P$~Mr%)Q #Xt|좛zJ%x,QEIfrP3%/֎旞Zj-!dl.P^XX)Ft<4;ak$!fPǟWGzk*j' ,T"X%j͙Q!A4ĝ)HS$O@@'PV,P|.!䵐$#jh$jMŨ˾ '|a\/+ ӛ?PvbDMtoH5b:N:Nb$̾Uƪ멨g+S;1,1 R#0tV%6bc1TԨ|Ԋ f0Pa vBS+v3 .@>  `&"ACEe(W`~&P&'.KS 3QʢT*YņQ5瓇%0 lI1T%y^QBb hpgfCY2p0xȌ((JFdnIa+Vz^9lV:RaaU$ A\5MF{L*8~ D0 N Vܒ/V^$~^*A 2:t=h[Hc17U0/;EʃqpC2@/B"Qa J+Swt<=Ѹ"3ifh۫f;_BG nDS q Hb@? "I-A$$VHUqp\!5X9qwz5W Nj+l>wN%eC'v," 3PzBɑ DRcCfIm9(8snl$h9`'1aJ:!\,D2%'^M)48cʨcB\YPL-@ģ%j9aw f.J @ h#),D1/Y hȜj&CР!&(2yFV&*l.b0Exi/T‰RPl-~t9#nm7xunםҔ! @CIUӈ@$H8[hm)g`Hu]U._< InjbNT.jԗwe+DZWf-Fʙd7:rbsfK\Z+NZ $!f& LG 3 !yYYA;3V5PȾDž'0"BknDE3?rm+7m]WiX-P? s҂lYG0E!=ݣP;i@ο4 抟ǞnEn x􍘅t,$Uoe(ؚ6TW#4c2f^q <"N[-u XO&x)%Qd*YtIMy:y*Fi O &2.Thm-[{-?oø?Z"#B.h# P*)PA  @R$ZbG 2|X&8)@ůO* e)[FЊONXa%°x%*1ySh['ih,%F}sRf Llw2{1T#Ն Kܾ ÷(1)#ߟ~[FX!bv|f5bTKa\I0[I  wU % Sa!ZJ o BC `!al%.ɫy*eo}ZN֜ :#Sa|zjRтnd!HN?qQ"wq ƈD0A>(/"B\<'å"Q!`[ TdEC[ʼZ:ףlƎ/sb 6X*@q |Qh,0|QJ/ GiX []B/SĄ * )3\_l"V@g7+5 4IB.,^BR& A&0ڎI#a4FI1di|VFod5L\׌c X5XFT}d zcTY&v+QkQ_eY$zO7Q{y9Ïfm׊?frkܶz8Ya߽׾N>He=>}t60,]`xd1"KaRj*%:xDJLЌL=_* nThפ+GCR_*4͛bqazo5,~p;ދ"ЉcR랹R{5k#qo|&](]1V'IؑBwxqdH!a˵6na=f9L,5 kD, >?ud`T%2͟' aRd$ T2)=QêM!MF(Jաtˠx#t#[M7Ы7PشiQ"N٭+j^mO^#6|TBC$PȢ!7 b`HQxj%"(;2hC0RcjfIʙcdR LV5*±>^t221S6zH0F9Ld/prF6RoV!HU$%B[p)`##,taDvhPSWP+NcBB]r֌R'l:2b$JAs?+}jFb?$!B73C5FCyᧃI %| p|TyNWBfڬ6pİ[9vSpwx.*.!= Q82(E@'FC1 CFAm> Ԃq9rk6"T2#\c pJ:C8 tfeHl6U{^@6D!ACs;YoTü HA8zWUɭ֮ZX%&tڦ]&X&0u3s?cc-Pp#fy*B46OT+1KS^jNL=yhuӭHXߟgqUƅ6 [2`2R(m~г-9֞䋛kxBNb(6T( !o!qXT roG ǯ|TJ;skVӍ /ŏ[1\ +n=Ϊ,3a-ӿG;Zz'#Y4Lw/.HtSU7q^#W+4D9ak8 V,XldX5*sЩ[ټ^T vAwF +t2{{{:CObm`塺t>%3DT<\Qerua}* ،X:ܐba{߀[`([Ǩc( IY|7/l9$^Lvbes푶)d%VF4Q " j`cl=XzEܛfGL 0=ͅ##+>HN2#Q DAV<~5G`6/3b2-[ 5yf <GJ ."\ tn8`Hj3Dd_G*|R؀ L |JL'xD3h).-YҾec5If6 Kae9ono_6]n[kΔ9>Zp2szzNN)vOW;a8hVH]kEuq-u&£ )X'>fրPՄ+}6ж??*l4tt9׎vC'JR":hw#0)" b119[^. /(%q^'=DP0@wm) I!uM%Yu.e,~"(8g3W>zKJk_44ȴ/xϼvZV~C(2~/o{zpEVw,@+2(p^duced7YtJ]]Sw H V>DkF brqA fJt0d|*ÜNAJv$o`?@*, ahKxX\JukP5ier&A $&Da`#earX0f|꼱;z1S7E0^=}^֜mG?e-΋o|uԛO*lڤT=P'aCĕO:Wt%PM>W~B4urH[O34(Aynە8FʮUI)f巣>ɌGD]w Œj )fW к,q2[!ԚHa꛿|%F)G#^T*1ma`*#$VhRҵ'brү&`^+k.% ("XM=.#sߔ=OflgF7❒ hD¥$!@-ӢTH d^FWL(2Ch621<0i XtVI ]53Tq`dY3^[Waz 8޻'z)zthsmbY`J3leTVmm Wթ֬.(V ÌB Ս Lhܧàz8޲s1i!B U+@v\E:"$_%S?%Cf8|vD Ks-&,5'!,>ELPj./z;=jQB2A*j[r6rCff7TE P0DJH;Ae9Pۋ7V+Yt[!YCSkg#])̄X́B|KPe!6[v 1B*4'!IUy4x{߱hyѢ"֗;fI9 LCZ,PbJE!35wq^la}hm &u7ra٘2hhO-M/ 2(^"h <$Kq- AP?N/$KU/¨v$ a9{jӔT麗kcahIВBr04'Xe!e@hIkյ9dO8- ɵ6:FsGuxejq<bP0D)/L]] SUg~hzxؔw%LZ:F c / >a^`1L1' ql\逕@}R΅胸Nu,ltN. Iu{A(.q576ESbl12G .}J$Id¹:HYłCH Kqi{կZz_^ZQ aӶVJ~|];=t;'ud=1dPä΍bes!d|0uI!nlbP锟io8<\tč #@^jٳcCy+l8@lh"Y?!ȀāPn:+()9B7*Pʲ(X>f*O!ܘax{"Bw_q;'t7 ~fcLh+H~XJ˔MOy*TnkOwRq?OzS+W_oX{ [g^I䅐=`$<XHб\LVQ6!F.I@ f>؈r KY/(9Zd҂R8ԀR5(N? $&.q 4DG,RI"*n1r_oeFK-K%'F/L8ajr˅wwyw+^.5̿^V.7/|4`ʭiamKU R^t_/!tayG@w 9tJ Ơ|($0d 9$Q(]]òg v}~]^^}_3}/Go_ﲷw Z9f¿L۽{}Ob}yy? ׎G3c}}Ю׻[or f=m|NZ`Ft"Xx{oq +[Lξr)uyyJ/3/#Z]˿]l72RBpq<.tR>LWdO?;nvj)>c#$8Ve0E9; ~cVWwߕ˄s.l_Bw{ώ~ma[̼i-{^s`p-';ZW`? Q{bto5|~7}wyt+o*ticxp{ʿ 3ğğw|~C H/V)4/tav@J*BE#V"0#/\$7O}.0H/=^H!+ .9oDoPIs(v$E;\H< %xFN%sL[i rXEYۙX»n3X0g/^[w33>;ao҇l02-v} AyoM++! F 6u}cJ=cN7n7ϹmIB4Uh}2pvqUɣD4%8ҮF|] GĞ0_ģk; LG/&>x}ǻ^%A0|ah֋=`QM ĚQbQbOc *<:>X}Kzzt^LGH>? ~0 C@a/4}}"`Y 6a&{؈EE݋V.^aXc x={z=@a#  b91#t|L]6DW P^T{!}cDA#𹠻s` P>х80 0At-gK111y}}}?UA{n{uB[H>mꈺv|P{~j@E@6 @4hh\4 n2Ԣk3ɈV/"J,]@cCfj"Xh.?O8]-ej MOׄ?~Q ^2!,k z~(O13RTHB@x2xg?&Ƞ$BuhKpb> {n,.ìzRЯW715WA)(MW,IO}kW;_%>ݯgl t2G$-@g@Fn~vZ#W=3 ȯS%@D%5 cY SZg'UvM%+ՎgeZuǣ__g= YRTk`QcPDFk]A gEmkoXZ R u]Ɍ//Ş~gk\؍Ԭ.3Q~t~7[L]緮InALm_^sf-}EO8&A @6 \@ px)!t-H-ZhznU;cvࣀsǃ_~eaȵs\˦tmb=7 iىրa>c֤Z`^yX8^4r+(*BAuЄ Cc,#D6Ua8/X5uIy}ft_#UׯA;H)C8yR u[;ç?ᑹ!_R>oO_J0 0]8@ aV 턘-Z"` 8o(kUal\P8 +8Ʋ+]♭}{ka{s7a:K ('"EA=gl-WY 6P8VhKc3r<) }-w^_K޿Jo|̟rnqi]~Ը}!_waDH %0! `g4M@聶TjMvv:T*^w^'˪QBOku{76T|.V{ea dT0Ph`; X+b7C]:uMEB!<'1@mlT,BᛖsǗCnGL  `e+n?9͔ އ6H/VpA0?L߃ hfAPPvziF{渋2IÙճ%*0i% 6+~.!n=DW>wy})&P]L1^ p0"vA9$& )haW%,DLaa+F[;c^Yt^CVFߴ&|jL[[Kw{VWc ]4|w[JA(>4 ,DX z'k@t}xH"\fJȟ2,Byʱ?g*4>Jc^Od//rBnjBAl8*H20R &!pW@tIh֟Tґ71,&"RVPӜזbԕ[2q2+ɔSNg%]le*rx,Z){WuG.֟(1uޒpZ0c0cb "!1@&-CRpCU i[=o/qyjŵ$\G[ǒUUR]zwKh`lgC0.@N&V<>0S69hlJeSʇD"݈ehb,v~"5ƅ΂',a.DRDNrN@>,DTqKi,XG΋} mkصlZJ/>8p\\ݧnhf*`BA0] $xehD0 ӈQ 8F`=gBǢFb5KkH[g2!RD/B^uuĸ, br{^ ~ waYhA\2p  blCfgq8BL! !M/@/ZipڰVtR-،2ų:߄ PX .=ބ1kNSoFq܃/{+g}Ait|EN#(Z}wn%ЃAQ-o) ›U=8^pUr]̿fX.ʽWa`rK^ҹ/NC#hX$F|@Q 2 l`q$ʃe04(|K(!Z hZ`4"mŚac1|D!!"F.:S=!r P]Nڂ3gDc`Z.<\@F|XŽckcƋy }}KU!q$.Bm/9`[^LJsh 0n0)D8lsh. a|\C BЇ" !}dB^Ŕ!eb#!QoBž "j&Ј/PBp/z!l^໡ TQR+ ]/ dCA @s 7¸ "ZD` `4 l8/`fdy2k sxv 傛n +gׂIYE+OOGA7TJ/0sRx $/V+]u9xa!+ٕ/S_Sq($x8#V}Ŋ4tX>DI<ܟM`NNhDK'-6êd&aPT*G^`t% ;Hbdž R]QQ3G^ot*Oz -ۀ:tAC4Kcp5$IC18&H, Bw9U !1`,.+D1lªSh"20Dfbp j悀tv d!F E~$r9>rD^ +)*mA &Bћp/>y Q#!1 (ȽG}||j,"RyRw'Ks )UTvz;Urc֕P 53v[r^-lnWdZLI4ƠŀRF M DKVvv3TD>3՞61KAHg[ .U5Ch,XOF!=Sӏ ,Y: Bby>OSx6rBƈodh~9Û:T2*UI14Bd26Yl$|W ]nt\85*m#қDkogPבݧunO j-V8fpF6ȝG4}eFƘcEwelRo|)NvSVcD҆ z4UҀ}[DVw]]|Nwlᑻu%fA@D6 3a1}#K& I-y+ 0Lզ+ NJfg|SZ:-}-Q< R봺cOCss՜_ҿKA~=Jk{˰FKf͙55昃.+E# &], @e٢EIk'R0JG瑞rR܏ml1daPd"K $QAJ+~Dž$7c'$d] vFBb'j\XT/5L' dœNJf&ȾFt~sMzL&w\o+oo>Gq*I_ֿ |^+}Ӽ}o2υeaBaq:a)Ilɒ)iFbgu0dH>xzǍaRlmVwq5kL7Ifմ$#cgnm O KOD&L gd«e {u+"1:j+^)\qR3Xjy<*4ՒB!G|PS1B7Ȓ=<$9o6 bH'~XHh* L} 8.U;0)MF#frQ,@OKI^b#T(UV*/F@r e NXKтgg KI:}wTx(]XfOQ*u ѣsb2=,>' a 6ĒQd%L@K?oAutMkm\|@F%z7^ :vsJX Q@p0b\)̩Qtp&hkqikʹ&7D ӧ y%|'ūt/!OAƖjٗoUf0݄iSwy4cs>ճkz}%}z3呸WnV-KpX0"Id+#ڦ$c(b*Hy'N7hA1 -˔Iى':\y3GE=ѤNm~Yhv C:fR$+HiCsRGpꄔ"/ȕLd:a^'@`PadƥThJF唥5?Ue ku ^Ѳ%S9ieok ^. S|& å!Cb\@X]bn^{1P2OA;>VO>y[uC9,!±(A ܋ك0u*OG(3F~L pP~b:BzM'36*:W@"fZgx%23Ke*&) 1 :ČX*qdkWɝM)'XºIIOW.˭% v}~ۼOzG~b:2eU|v߫ ߯MlYDL,zf Յ{ =_rU^~Ē5y@;J+;$ a Yk^r6>  8RHg~5iy+$cֵ||QZU( x˜6T%B j^kLz3,^eQ gS\$%ȍ\,f+#͵M5Vye?g~_ ̎PuՐH162d`~cCdpS-1|qFi"a'ԀJ1C: K3}jOTLT_D% @Pc1Tj5wCDȞNŊV㙔++.(-:<<;I`\4/H~C#b (J~NvXphd\TS:1Ϊ1,҃]WJzyQg'%S:LySd HtebV3LQ)l2܇AVLlO¦'Ŏ7!U(Ԙ`tg%J6 C= {"Պʕr䈔Pq(hiKcvsWkxPbNLNJL6%Xb'\!Ψl^V;-q=0Y>~TzjU-5\o1=qDfMx>ð r-%y0!QXPTex dQ x6E09rqU,ZG G'9H ijF(j!Bb0 u +Ժ&oډШn~P(_%)9vi׵ξ](h/l٦Sa_d)sֺI9Sw*{-J )':W-,=9m.[;dkIѹj#ICC/΢9usܡ p- XiMLA¨js+D& }DUF֛-N{ju%LіKÓI3JI IDϦY mMNWL9u5׹}Zh^^~ ki>4Z'huI9XڀфOK30ddiZo3{!p\ܮY퍕Yů|3z;ۍq"ŝ,[)F~R12h+HI&tHe)9'5!; srM~hfzóɕ/CfSDAc>4X)4C0g (E\PMREW"\,'ȵj 6`V-^_q/I[鎘LzB6b֕ LmdsAWrCN\n`@bh⣕Ϝ:~.ߺywG\eZJG u))VZ}BIeNݓ NԊb ȇ6;5Uz_hS4Ng3Yat1͇s4p R/}Q יD΃B1߽HF%oSU'$iq֑$Ň$2m'HwʩZT]z2!.,' lJgk3D"hc3oȺdݼ^+kFTf)JSn3N4G׍^bzWmэeX;AҴtYTo)Zv4 6˕$փn<21 劗B[hי.D&u,\&H&erBya4#qoNkXmOv2>"J+)G 5w߹Wo;Lbׯy^gwk>Z[ޭBkg$;xދukHMXSx6ƺd%5w/hm-Q%Pj i tjznv4?J%`p%0SHRa>]Dot9h^ 2:ԩi z(m" D HeJ󧺭䥺*q\V [1Wᐎ~Րqkkc `\< ͞wdqTmqXn~2|6θC#]1/Yds/r0cR)U\XDϺf|[3ih eSXëCTV8' eE3VQɪ Mp13`+;|',:\+iS*%T?uʔjKPX+R5⨖(eե:bmMHI,(>86n˫ XxrPJAI!# ǃÓ"HGPˆm゘, V{$bmNhgb : (Vbl7<4f-QYt8ǹ5^Χ"l98茶^m+gշRq?]mΜ5ylٷG7]߭JtW`\cX8q}c1]*RUqJ0ٌ@MU?'J *pbǢࢢ#)KFz&1i 2Cm"f9Fh:ñOGϨRXy弪Gk0Kd3'epZի(Br'+ACcr jUUJ&^:昀ƋڈMgW G+M4E=s:Ғ]]UTr1 a/t3>&54P53U'|ؔ<-,Tz:5Sm:G+irJUyd8?K8g V3Iֽ"lޤd뤂MGa diL>{-Ug jIxM%2uI|qߺ ~d擼]?z~mcd١u\#W8t՛,&I w4ihrۜKi-E֑/*S0uVO.pиL85ZlkY5;()~kRki'[kHDZ|Տr )H0^o9aU|Rwg}j5l2jJZ7&${ N ՎIʦA&TĠX(s24 3hxNhtUt%,0)!͍W")Pv14p;>K65RrbhD+,0w̒&"KaPar2%HĸҒvvb*Cm/eJ_@_%'鞮]23.lk?J][CER4d vzޯ] ibSҌ>Bn=Vv>N9 v X5]TB lbQ[o݉('JgVQPzf'S'hQQ- BZRT:?EnP<`{,.Im"zKZSNtuU7]wޞt#ih3W5dIT^Ty[r )Wͳ0ξw? InR,k\nC:=5Pd`mm<1Aqz:׾vO< @Lٔɫ )jd+wtΆVnz`iDLTe}i-H"PT X&-! dي'*IdR61oU2E!!җP*xb5T n+2z)t?bnro3u~^ڙLfwd9Z3S=F~‰2\dC=WNbp6ŷ#yEyv/ fWaVbhfihaS?2F.47MUIJ T+ [?W! pjOdvrCsJFo+@#aCQp)~ iVu 3+xHXNDǪt?T;$-蠔\[2y0M LO2Wc J(D!ɐ?CPrr3&$CKo@4jvQt4q[EBh"f&MB?dP5Fb/# ځ\W S0#!qcŦ67OT7P(+9'"bŠ /b/X'i,0(.+BpV=ZqJU0*^00%P Ȍ0&(:]:c[t0UϤWˆ5C{ Ss]8pcdÒR 83ӛ(x0 - סȤ`仟d>>ž׽cG-hGݹO嵨-lvRu"EiӭLv`ͬ=if?BjKS.VL9eyr r'uګH:bK]ҡ zg~ox] (W}5a6Pbz嶐?ϕz$ÕX aU s2 ˎDL6dzیΌ8S!JBYVY|묬vH Eg,yV15H葔U@7) /QR=W#$p>WU1>OtgKm hrϸyAK_hq#I6Es"Q7p ^}+.߄Իj2i^߷+VqR gdal'򁼽h'$Pl(ˣLX̓9i -b"[sy0Jg,n͉z#[cbwxq=r^ybELU )xup|5dM",sC'V%"%Ӿ?i/T2Uژkt(fX 8f5 Y7Z"9(79QM#4Z%h8g|@, T29:|E *A# PhW"2̊*Cb zv$q# ;Ln M> @Kt@V0.%J4R$p[PsgKZٮK$&ZX_u"É37WE [r| e#i~][N^o;EO_-)`mR! WW +GkGlEPtUF(Ƙ@|M`#hԽ֮-&Q25ъ- $8]fL̸xfY뾁yHeIiD"tX?/Q6%%')(A,[JGЩ5Y"b! )sv.l:Ԥ): [OSڧOߜ- Cv.*V=]^YH KP-->s4֘~ʯMBܶ?V'b>q$?L G/)Mbƥ; d8B Qh\3@'%DEEOC75L>Ӈ|!y8 nS^eRl{X2DKaOSvVV'#ZGXynbեo2&@xk/k R-ySqŗ>_ϮKaU])~43RX_/uj]CDa=kf8)8;I19 Di8i!a}j+r`tRxnJT?F}/0OL ŵMr^E}AT|Ӕh2LHHxm=0: S) *Ɂl8%{JNHphI @( l@[u@SxUMM(sSE!a}y0~SRON_]< '#W`(aCadGVX0E`!D@]{UHZ%!Z`Ec B`PZxvUX6B¶8SQ،?pOdƄx T0b!/0%SH,$K/|&Jȅa8@@ć8X@0t,kZQ-&*^hؤX>p,BF @\A a7 `Ѐ*A:8TEIOà+6?P." -(Ub n5BP|\l pt|ґPzIhDF)m &xAK -'A\ cB;Ƥ$DT!.tz! T5PyS\= |2Yq4,Q@EcQ?pvI|T{&,>;k}l7A: HsJ, 2G"K!1"BT h*303 E`p<` 2U/ɶL+(A+JU2La)uXM<}Di̻k!S9꿵a8Voǯ_.'=[#NSVTkϥ^#O9 \{}!t_Yysćy-R$>,:Xæ)(tzf^[$&aV2mc(gԔ-04oc0>e[2\Ahq_~Nږ uᄊK^q`góu9%z,ZZ短h=񟹏 _1Dy}J'<)HJe$|qY³r3:2XL̋&,U_]Kl=25Bq˚2|6Lp#rlibvips-8.15.1/test/test-suite/images/sample.hdr000066400000000000000000015230231454007373500216060ustar00rootroot00000000000000#?RADIANCE FORMAT=32-bit_rle_rgbe EXPOSURE=1.000000e+00 COLORCORR= 1.000000 1.000000 1.000000 SOFTWARE=vips 8.9.0-Mon Oct 28 17:00:41 UTC 2019 PIXASPECT=1.000000 PRIMARIES= 0.6400 0.3300 0.2900 0.6000 0.1500 0.0600 0.3333 0.3333 -Y 442 +X 290 "䋕濰䎑Ⴭ더ƻڀӀռӃƲ튓Ѯ܃ݰ敄􅍏"兊怃Z[TXVXWVV]d_WW``X\mueWTRbhaXSTZSb\Y\_XXaea[]Y__`^XXadceeg`Y`\_\XV]a[Vvu]bacWPZaU`e]UVW{rfhWcd`X~yegdWyXe[VWWR~thW^^\XXW[h[RX`dbb]_WYbbcbZX\]YX`ffbddc[S`aac`YUQTTVVTSTQ"RTWab^X[\cmdWYZW[\WSXWcwXQT++(HQT)**)*,.0-)*.-+/:?5-)(^[NV43-%(PNK+0*T^/*'*,$#)01,/04231-/871-)+--421+)&-./1SNNQHEJI;J../1*(IGCZ[Y1.*6:IR[b66,&JPVF6ETR&%F@CA>PNJDNS15\MOT>IL,2+('KHFD@;A`92-)DQTVQL-5*!%% NRX~_pL/'13-&*-Z]bTP*-+&-././.52WZf^MV14003/++.0++051/-*%!CPRW2001-('&FT-)*-,+*'"M*(,0//,/39<3+JV3,%'(((KGL)*9K8L,1"Ž䃂뀌ꈔ̸̢̀삀|񎗕ߺ轨󉑒􅍏"䃌̀VVUTXXW[be_TV[U[zrWR]hn]SZXTVYXXVVTV]d__db`ad`WUU`fehg]Zd^^^WUT[UUYY[]Ul`icafdXXSaia}_ddbY\jhbU{x|d`XVUyƚR~X]dcZWYWUWXbc_WZfhdeacXYba]aXX`eZU[cdcb_^YURXcigd[XTUWZUSTTS"SXaccc`\dnjdZY][YZYVRSW^gU*-N@KP%&))*../,(Q-)#.GX=0U+]SGM.7<0LC@H+,+),-++,) !(//.047674-).54+)+*-60**((*+*/SKEFRQUTUP*,T-*)LC&L\Y134L?Sf\d:7-.SYYUUXi_-)KML7.CP'%&),.48);;&./-.42464+>F/1)(*(*2,''%)O%'VQE1=CUYZPK%JB&*)O7!BT^.44W?MbW\;62.XWGR2_eddWZYEJ/+WOEHM//,VMQ\OJQ//+*)NL`MH(1357-Mgf\MDF%#"('/7N\4b_>/.-+),.,.3764-OJ,43/..,+LQl8XU2121/&%*0+((/1..-($%'))032.-,)//g9630LHTWV"ON),231/2/(&/4-*&""#%&'QNHJ())%EFB"ܷ텇Ʒ׍ƬƼ풆覀;ϼ惒Ų𴘣劕񇒘ǵ⊔"ւԀxe\qW[\b|WZ^lXYXnyZVT[e`X]iW{[e^XYVVWVPch{y_XmTeedca]]a`^bXZVSa]UV[|W[Sr_phic|b]g]Xccabd^beg_cXw_\ed\WOU]ded`^[WRSWaf`^ZUiuhY"W_e`\W_YPOTY\WTSTZZT[jfOP=$+H*-00QH=BJ8(X4G]B<7GMEP-0,BNL>8MUFA6BR.4856/)PQRP)2=:2UL=Kb~IG?dIINKQ"OED'.24.-RNEM2.KM)(%%MNKLA=M5:5M@J~"ß޽ׂᵲʩϝ龀寧텃⫠ʴҸ焎й༴ƩܽӾ扊Ժ􁉉Ę㹞Է݁"툅Һք̀flxpYXbdY~Tuu~{adVVVRVUcttrndl`R|dgi}XkYVz{~QadstxaVpyk`_w~stU^^]TydkyxnxRYX_\UVT{]e\yRTpu|vYaghZXrxXyqqxUV"STUVXXRRSy~VS|UfUykiS;7DMVX*=9a]P/-0,NBKSEAEGR+NOVQC@MYMTQGPLO]Jz78(',O&')NL@Gq=DN>6/,(A9MQHKSKEI]F6=+4JKIB6!C[j4)L87@G*19;/A?FIFH+??1@?ADAGI[\QABM()"&E &+--'N(*NNcW>DQ*'JEHGIB48-;7E,/0Z@3D,QNZM=;@E=C8:JJJ@)-Wl6RNMS\ALN,7@KGKJJMVD:GZ?CLE7C&6LG@EJP>>JSKJADIHOR',*#&GM]]dr\4(:LNHKLJXZKCLMPC?JV1`K>DKG:FNTBO./FALF/%>W86[=-G6Q*&GY>9BJ]ZTYMX]P>@AF.9-64CEEDF,.K::N/,"*)%,/,)#F(*%CWP:7CHACHJEHG7-AYX;7=~~"逗ڤ󍽃Ǯ齗셎ɺۄ;Ĺȶмèͱ̽ꂂѶƾ܇÷茌ҭڰكԦՀ탅˾ց"򃋃ӾĹkuZvqWi^Vjjic\Upks~cksV_hhWSUurn[hjyW||WcL[]Us[}XXa~VggXTUX^c\][d_Yxdf`^UjrXcbuul^}bmnqwU_Zai`U_R^_"^a_k`RRRUPyVUhf7?de-?^F2N%:4M58011,L?ERWRGN+LGNXUH:6AO]^IC21;7@N*3;6'%(U?22:.4mFF05NNC;F*KMUGE@:IGBFQ-JJD(&Jh8-VR^ZVhb>IHPMQHEZfMHW.DWONPmJ@I;7R]4*/YQELOYNNRT*4+ !R*1[48fF>MTJLVXT47aHHHLGKP274,@BTI18IIEN-746><`TG?JTTADNNIA;62;GOeX2;DJXWU057*(*dG87'';VW8+HH>CN+RPL>@IKSP@J0-MVW=.GZ0*-/,.XSECHJCMUR=BS2ROn2T0/+/nXINS@W3124RC?CR]UPU*1;/ 'V.0/10(PJT`YTde,15.$'QQPMZ352/NSa[F>>>R,/*&'MLEBT-/3,8.G_P=5N47X>DKMY2657:860SEDIIFFITQKGBCBHQc2=LJO%%E,(/1GFL??>EVQIP(/*(LY@3,&)HaiE'5K<>JOY2ZH7AYR-[SS/(J\ZG($?@+!0?FReh9!6G89RNTeUC7QhNI.^0/%EC=%Dm.102,eY6MZ//ICXVXQJKGFQ//3522T=:SK@R2=iROL>?AGMO,RJGCH;E&+.)MPMIKFR/1.00*)+-,RKMZ0+F;H>FHLRY*().01TU)!N]j7Y<6DHRQM13)RGB<3H+,041(),Q43UV+-*+'%"$$&%@+@9+(OGQW+,0",&##$%$FI)-*(MJFHZ/*%%'''N(RV[[RDI"򆗛εہǷᾭ̀盂м߲ҳˠׅϲѲɀֱϧ񃄌⅁̩숊ۊܾ׾񊒓ᶯ򊔐􄑜"너񾵾]W[ebPyshsWzVRTWWWX_cTXajzxboUX_JnXWWTujXrzguhv]~y}[bQnXTSUxw}y~^oTlqTSUTTSUQVUnOoW[Yd_Y\Yha^Z_^[RuY]WZTPPVXWV\[XTV\f"_RPSURRSTVXURRSUUSPPR~&(Vc/2/(37Tei9I6OOF @T*?8GOG>?(&'&''I/"801-,EMXG;:?EQKA80(;C)U0Z(:F>9PDPbWIEUqO>S---'E=;#5fN0'6`6\XJ/T_>:I;.3,PVaH(EEBD@'))&*/0)LJNO-'8-9$9FSUX,(#)(M@G)(.btD3 ?U.D;MRFEE''*'')R<3;Y5GB$KTPC>SYVPH>?>CC%'-W0NIEGFFAS1XMJX7XJW,MIJEFI>9G@<6.U74VG8`fNMOC+/)$*3]A','GEF2*CM^DEI%FHJL%'$%)OHOW'&/"+!$&&%$#%'+NDE79R,+)+00%$,J;DN]^-~~ "􂆍巔牑Чن爎݀܄ۿǥۅꆓ݊Ĺź嵰پ汘Žɶ㉈Ѽ񄆇"θ၈^bcc]RWY^^[fZWDOSTWWVXxg[tW^UT}vVX_`WZbZZ\`[a\dfyYfYWdc[WbYW_]XWaVQ~{QTwdXX\hX\vYzWWTUVWZXWOUVSQUYWWWTRP"RUTTSTSRQSo~YOSqWW.2/--N!9J//..0PA>;9)$G@KYXL*/)$,45/5,-JBO5*&*3L?=CMCGGGM[nZO=2E-/M7;U`01-./-,$R`QLFIL&)&%H@?JMFBJS++()-LBN[*$""#%%('%%$"D#C75HLEKQKKUBI/&*K92BX10"놐̠؊Ȫ̹˶ṻݸ˭ذۣ넀惂٥θ˼މ눏膑󆋈"价׎ܴX``_V_d`a\s^^]eVTXWXZXyml`aZVh[{s`\~ZQr[qrXu_s\Xd]aka[`e\W`^T\]XTWXTTSVTVSUVWUnetpZVQ_~W]VW][X]XVOQUTRUWUX_WURQ"SUTSRSRQRR}}crWQXVwwT-30.+I90L20,-*QFFCIE3GYbLH(I62@(('(,0D73@EZd('$%TAD[^PUIK0!EU>?WqSjyUHFGMY3,RA8YQ8M*%HPOMC:Ve0J78_/L;Z;G3H-+DL/),44566-.\N_4,#.2'@>GUNVQ>?#)+&O.[LPd+0`)(*/UBL\W+QFFJKMHIMX\]SR\0(D79GOB2$-FMPWHBQTNRIDJL,-('-*IS`+%""#%&++*'"##@3+6JVPNND@M:;)%,)K>>PY-~"ރ侘惁厙񵮜ՆͭۘԅĽՈֵܲЩ቎أտ䆌ܫӼ̸쏓玖틍񆉂"ŭϸT_eaU^c`_Y~`btVRX][WSumbcu]\^[Tu~Vl|_rteZTzyYSW{pdfiWn_Wblebae_VXZSZ`]USXYURVWY[VUVTYZWTTuptcex~U`lk[]ea_]YVX^TVQZ\WXX"RTTSSRQQPpU[[+110+G51M10/1+J14DNOBWc^MJ)&=:E+)'%(U:(&?GX1--)(W;;ZeFB>=(96L28GXMq?O7BDKL1'QB?\H,J('X.WXC9k4/PU_@/=1H9ZQKIQEAJ&-75598/0h]`.*$)2*P?BPN]MC&$()''0aUQ.+.+'(P,SMTXIK''IJRULNWYZ,+P[,PHA?NVN:44S[\WFL_ZG:89J\RBLT-aVS:FG(*)SX^^\ONMKSQG<(+(+/VNH"(''+,*%$"E=)'DT^VXVNHDA5A&),WK<=HN~ ~"䄑׃߱Ѓˀ絜ǽɯہ϶۱؄킍񆍆߿划偂ڭ̸܁߂􁁀"Я肊㄀`mc^e^VpMXoVZTTQMRX[ZV]RGgRxbh~uswx\ZaVgu`rj~yV]Pw`]YWenTzcZT\ejg^[ZSUXUY\^`SUYXUVV[[YTRXVVSOOuruv}zsZRWX`yXdfcc^U]eXVXXWVVUUW"SRSTTRQqrWVTQUWWTV03/UG87L4435WJ$/=T,1.KJQS(($&)*'$?@2!!Y;JP^[+NM;.?pAcHC=cP=)+(FFQE@Ho/)(.E#(367;60+VX`,-')-01FBELKK*YL),(&/eSM)'''"$PWQPTMCGE$ILQSOOQSJ%##%,_M@=DG@HDJNNQGALW/OLGJGEF= :_v|FBPaUB!8=B\,,/0,.I/Rb91GIP7?XD48u2IP_SJ)''15260.VFAS-2'&>\5L@DJHH_TIF+*)*\NL&&'(%%MOQPNOIK>AHLNOQSUYNE:@W^PA:8'@BIK@AB>BNOR)`URF99?N(+./0DD=TENE&)-,8@.@M46OIG@:;B;(B[0,/^+%LJGKZUS'cK=A"MN*,+)'&SNFGHHW-)'$%T_RHHGJ&&LHAJ+~~~"㺽ұۀɲ½ͩ耆Ɓȡ鎅˷реžûڹڇꀆѻǹ"ǹѴ샃ν℀gmSW`\zamsTZ\XVSSLe>{P^\VT]_TQVSfzlQZm{xrakdn{ztuYNqSR_ePsq}]dWbToo_WVXVVYWa^Y]ZWTWyTWQQTSQlt}}~{rtbquib]pY~w~TR\_cRVVgiVQ~d{^\O|~"QTVSQ}pZ[WVpfrUUR1:JLGGL.`342PF<#2>H3EGFSB?L\H8+7I>M(&/3*3@D7OV02JEL1;.J>+0d.,55+**)00.1021WG?GK,Q;&J^I?;=RRIL.bC833;DQ*'+-P\4FmH#&2216VH]aR?-9CGHG0(@]+(NNH#IH@EJLHGXP?;"?EU+)+*'NMJUSDIV)&$%SN?;GPT('LICI(~~~~"ܸ슐̿޽ƴή復ݽ򌐒Ͼîúい߲ľɾնꂄ憐߻徨ʾĻ"ཽǁKAS|[^`\][{ch]bljUlSX[\TORTfrvSy}hNc{qYZYtzpo}tkz~{wstqT[QfcnY[`TY]c_WUXV]WVZYYTzg}tuRRWRyttvulupzw~~~umccZUbtrgmqgYWwSRWY_m^no\_z~"qoSQPcfTURQ|cXfUV#!#8N-1;:50YL6Nv<<67<;$"&EN*-# &*A&080WO7 3D:.62EU^7?KUC7@B1NYbHKL84FC5CLQOIO->I=(.$GRI+44A[1XZ/5-NJH@Z+/;91/.+2024460NIJA?QW:@GEBDIF@NNL@EO(*ZZaaKBQ) =EVCEG;G;E?GJUplw{S<@CIID95<;37GC./EWLCFJK7("3?BE(&&::DISYF22BB+0UOLLQ?@-&>IJH80G1)ELJJB>EB<=LD:DEC;"49D=E)-)NJIOI=@H&&%%J;-);IWX+VJFH(~~"ؽƃ͐ݽǧೣѻڻѼƽѰéھؿȦӶĴ"؂ٿ㽡؂\oUgd][`qiff\w_b][UOSXTTTgsh]lw]jd^{sTUVQUVyt\]VUVSVWW__YY\[XX`ixsnyTzkV[bkvxsddcPWmfZXiVgtvk"skitQUt^UzVUS{jbXTX<^KA-269:\GJM:I:B=853`I7,.HS,+$$)#:D>ZZ;'APJB>/5D_IO\X90DQL]rkON_YHOC*3N]]UQ.EP+()#+6oL=>HJgf^-.+)('U,)+578b]Wsm89900Yb^ZLO`6,BGDEFB@?BIQNKMKLUZnoVFJ:T\IDC01;;TISooH?5EF=:>H651BN(%!::51.A[d1MRGO4=?942QKJ@>AA*,$&+*K'1BN\JG\QRJI(#8XM04\@@U\LK5aNM_10X?$+ObjQSGP+2.(&3/1/][^Jfh`/*.-)(,2+)07:.YJinq:8*.4=?tOEHDMHKMMNE<-39SQQIDAB_ġrXE.dfYQSobXH4CDCDB=3ZGEA<4*(@OI#*-,O46>I[TD&Yw8SI'',33-.3/-0^bLG6oa3.00*&/54/,1YedC]`Qm͎ޮmvު{cɾzRABABHIMZHFSd691)%+adQYju4+LIKYMOUR)*WF1BJ?>hbMNe[Hda>>\_069VH;14ID;>ITUQHKBL01,R"LRbWFI$GGS\K22=K%$''%'*121.1.P@9B%~~~~~~~"ĭܳǵӯܫʛˈɓ惄ܿ{kmmįө芏ဇ́󀆌讌憖"Ŀ̶鄊犀_fkx~dd]eWY_oxweRW]sY``Syofvw`a\nclN[c{X[dgWQX^YVYwjVf`a[WTUmSWtUVadgkixzsʀt{yĄlĪVUthxZ_]a`b^UX_hdU\]d^X[WXZ^[\wVjb^Sb[T"SST[`ZUTXYUWZ[WJ82B=C564/NI \>;/F %,.11?F1*gRM4Eegd5-1-.%+gFoK(v-4A3YX'*58B|^4vIRKFAO[?.HUftxfy|wݻɆؐUrĬ}\J 9IJTq-))0594)MMVZW0472TJAINRheSO-1W>M\LJ793161IRT=I-5531E>*1@OPMP\2.SLRGF.81("MQWUJFD5;DXK9AHR&'+/+''',-,-.+J89"~~~"ه䱏ղǀñܷͭºۯ󉉇ʖĽƵlk˪ȿȪԊյ테ɾӽ"ЀvuZ^GL]ahqv|dZky`TepuY``RraanicSX[VvlnSXb_ohIWV_RU\VSQ~ioposc]YWZXRme[vb^b`TWUZatֻv{ʠӿxj{Z\]^^^XSXW_c\a]fa`YZZaddeX|_\x°{S[VR"SSSvgoSRV]^WUVVWWX]VSHB:=M8-"+53787H[dXH)%!'4'"5@ADMU+(#$I?5.6G?&1(*-+IOZWWZALQEA:2GP3),'%?3Qj49&:"(*,-Ya5?RKC;?SW`6/-*.&)JujIPyi&,bz1-15>rD%7:9EAEAMZ,+Y-/,&##$(,..)?;$~"䅚ĤΤ󌖉ƩȾʺᆚ毑ȡ¿eo|{zllȻ灈й迱牊ڭ̭̰"ë򄍋\X}ethLjhecfxjPSoujp{Qv\QZgdoW]Uu~y|ql{{YKUy|wS\VRbZUdk^]YT[]hPa~SVUYbk_br_Ynuy}jxwu}̶yW\XUT[W_\V_\Xa`ahYucvnma_RVTQ"SUcXShXb[XXVWVU\W-1JIADJA%7?;]H;$()'I>@??EICa턉{Ʊиrol_adf_-,'+,)>D?AAI&'')SQMOTMHANSQhcOEJ?7:M_5-YXRO/31/93N4&3=B2?MT^RE%6P]b0.*&"%%C3>D1-,43DBN\EB)--J61&"3RFKa=XVRIHJTs?S@5<<-7BA+/*'8#%'D8N]>+1@Q<8F((\A(*29D'IDHIVhP*31.-PGBP\y-/7@9ZNFNSTr?Ag[?6WL3FS160*F#0'-!DeyO;.%#6R((\eJ5+0'HdJ]j:0PRMMNKSKDSpR29EBLIn}}ԁ٭繪~j^VHHH?=;IQPJ&OQORPJW-QI;@GHGJ^9P:@>E=DMNVWOB8]Z,0RWNJ?M]`D3,0'C`m033+"'%G4.478CARX12+>8If/CB~~"ʬϵ󀌐᮲䄏ײà˻Ȩu|tjز翮Øр"ȼ乵~x|rlx}}dbuy[e^TTY[X[XY\dfchdTw]eZQ]PrxgbwmRXu}V`gbim_swyr~ux̾zÏᵤVUa{xtYWdiXVR]eaa]R"PP{\Ykjq}lo\~PKGOJJU\Y^V^pihaPCCGO_plS=6INFBEMD:FO57RLJUVO.40*+//0lo4,,287UD6JX]h<74Z74*\IMa36/)H2>,KCRx:/IG9'=Ya,.eZEZW7CD27A7[[\UOOOYUI\lH1BHCOWӴŋᴭqbUOOIF?>LU[SPWQQVREI*/\F?FFFMc5I9CE?CQeg53bUNQP,5LO//QW]UPLKJ6%49322,"(&KB7Hjk@&+9/6AC@2,8833=K(F:)6QWQV~"ʷǺ½î򎛒ѮաꏌИݲ۰}ᠴlھؽظމĿ䊑"ػƸuyxt|[~sw|zvntZd[SX^cd`XYWdqjv_j]YXeng_PdPWnjbV[bjkhbjoqso[s}{鹳ϯTUv~QSSzj[h_de`[u]dcg`fhibbZQ"QTSz~g_v}L:?RXNFMVLEKfXTJSEJJN^3ZHA?=<>?BGF>JUFGs~HvbwyAA=:@@2_RdRF[bxgolbLDMMHFpڃsu݁ϸ§waUWWZ-)IB6JT^RQJIRZ('+edK>FAHMefD;>03?T75550N>PS@Z\386^^RHQ]c4)-140/.&"'MLLM[63E;CL2)8EIE8F@B=6>IIRJEEN\S  "̶ửꍛ ၅ǐ嘑㸗򆩖߇Ǜ跰ꂄﴘnä脄۶ɷ޷䌔ڽ"޿ķ҅ڀgbopcjnzzumnjkbkzwxmr|yvn]Xlu}\dURXXUVcxj`pnocw[ZedWS[l`veTUzngZWTVfb[gppgjwtqlv޾}UTi_pVQPwlh`sdfb~x{f2dWiihgb_b[SQSSpeuWWZW6&,DUG*#6:=?H=96<4:FKRUOG97-6GF@=KHNT>.*:329M13(HG('-_X@*/N:PN,&9?0Gi8155.: '[83WG/727JPXg:3..)*[[:vs_QqcetAa55;?:cRAVNHkzrkiZZQTNN\|sž耫}gVX`a`+*L>$3RYNLGH[2)'QMNADGBHM\\HC?4Da533W@8@IOi513057SCHP[1.00-/3/%"$FDDT^30G=OW;4;IPPNTUVO=C)(-.PLRVK"ܲƪмϊڼ隙劂ȍм𑐀⇹؞Ƃ׸x|Իֺ̿IJ﹠¼̻މʲ򔛔ֹ憒"﷬׵ϸdebujGMgzhUWhm_Va|q]\_ysTQJRW\eacO~}t`T_TOd~hYnEI]\v^SjpkUPSRuqorm^VifYjsys~߱ўtSK[x~zXOmrl[u\ba~~}kkbbcWzaida_^]ZS"qbqu}STV&#,=MH$!8;,%)7?7)2IKMTKC2+':JLMGJGDG0-!! #P71$94A7G>6*IKF\y6!$44#=TY_?4W/#O48S>!'Md@?Qh@;-)&&FAZdC@GGYab1D+751RD@PSHQibaZ`^w`KYU\w{DzѤեh[_jdYCNL>(2EME@:@^7S$E?<>RLGJMQYMTW$";X433S=P/'./3-%I8'&ERbUAALT@81'8GHJMGHC7+-@:"%/7Xx2D3/2783""6JJK<%)9;9;DN^oR7)#(@TeD,"D&;=3EXv@ZH'HF55M,DhANRA&1I4nYAHU`T8qEF?BNKKMOKTFCK958/R4-UU=:47Gb741.20H(%5P541//.-*L"F*&?FE@?AICGECSklJAFDFMNJEOYSRWT)~~~~~~~~~"εԧ꺧ֳŷҶģ׻̼޻~׽|~տĵýă爔軴킎"Ÿű퀂}|WJpcW^nrld|cZfcWTlu}b^Zb^}xnobRSxt\`uo`khfeKDFDgu|uy}RO}faqry~Xay{~zjeqrxmк{st{y{cZQj~~hPK]\iia]X~wWaf`XWWT"_Jaur|w{TVWTnKFLH,$CI+.u@G<5>IMTR5,66I_0OLD(G9*;YkG4..BV\RKF7@F?*EJF[VC;75'+BVB,;LMO6:28=A?(&'#7OL6??FhLAL''BJ>Qc\ZV@O25AHgU9.HW\[@AKN@7IN@>`nNxܚʜ٦żsthyyg_VHDOVLM=GHNLHLIL?DG9;GOKRTP><;?7,4v$R8LG^N?03CO5><63.K2+?J384.,.3/T"C$0E?7/6;?BGF9@Y\D6CMN_1-OL(KIGI]veE268$O]jcJL_Y9IHG\^XLGKSMQgM:5LI,M@AQdV>.,5,L{hT^B?QIE^)(R\M7R2@[GGEG^L*IUNLRXQ@D?H?3EK0OrH>lmOB?AFYE@2)+9OWJ9%2@8;AKWT;9GLMKIHKM~~~~~~~~~~ "Ϳڲޏ׃恉յɮ̷̽݀ΪŀՁ}|ڴ}z}zҸ̾傉μݹ䃉Մ"븖tMkvhd_PVVR}hWgom|[^wXVS`Xw^gxtV^eWUaTffgghdqdtzshq`hn¬¹ouoicdj{xwrtrpi\i~~UTbgSU{~|bXzeou}^dRnsTTY"kj}rg|kr|w>8DHEDKSUG4 7LSA93S'KMLB9JK%&&C3>O^YNYgaPRD"%==;MPWs`E..<9IKD@C^cg-""MOX739058?OC-5Mb2)0:0C:@P7336:\K_jV^m;90F4FRFHMiAu_VLF[VbO\}߯ĉcpoaMXqxl~ukd[S`y{jYH?MORYUae51P[`ONPCLQFBBCCW78YIOJ')H?==3>Z/&C7'7@>N28,`>;%>CN,QIGK3";9XCB@>:+6DLPG;09B;BFHORLHKMLHD@:< ~~~ "ھ攷߀򀊈䳯ڲķՂíۆ뀆ﷵヒӪ΁~裉~~mʷԾݼξ"۸igUxhXOUURUXSry^irUVwa^uzvph}NR[a\uuttiH@CjZVZ`U[_cnqeW]ofk[acT[׶hqՀ۩nrume`cpxoqhnmkkhes^ZWUUxVYxxY"djyynwwFHWTEC3*L+U<<@?\ea/B"((%E@KQ&(*G38QZVJLQVNZW>&7C$":D\SF1*>AE@30-CA>) (-b>FJLOJJ[">TH=B*++ICPU)-.E;8IULBEKIHXTG4FZ."*5CGC7DEA:792,'&+;&%MleF647?49-=05G(23(E?CCC+/128gLJG@DF63N)A*,Y2K`jgjjbeT(UZkbhϫZQQSLHZ]aWjmngXWYX]ubf^XQFGMQTTcr2,[VT\U12?9GAJWb^QKOBKd`R*LLW-J;6;#,OEUUPYKCF,;=-#BGGMZSJS"AdC:4=>>@H,-PA10;CRYY*(),NGD9DTWS)~~~~~~~"󰞍ĮλҰ潕ϻʲ½ʴڿŐ瀏ܻ¯Ŀ̥򁇌ֿ׼߽݁񻮿㊕"ŷܺŹU\d{iOmBfdO\|VUURX~r|h_^~zOCF`Ru~burP[aZUUYT^Y_tZZ}^Wbquqjㆇ}ƣ|qi`_dZ`X_]aUVY_abbc[pvhy}tlv\n\W}sSWUXd[S"e{ruVV|UVWVVW)-8aC<$3!=XcT]N2"*9>J+13)NPPQ1ZGmUD3, 6OYFKMH8EVC!%.> :;HH33EHN9@P=BD$,/'%(/G>TSS+\WEGB+?MO7$@ai_]ROFIb`NLHHLO'NIHP\T9BN+-RHH;.5.#HLNOSSEA"kHj/06O^TE=6?DFIQSLKI7?N(*QJC8E2,DCM,.XOK>"HRD2513@JP&#YWCAF'QTPO')))%:;O[RSh~~~~~"郋ةꋉ̩໲㶸畑œȩꅃ~聈ҽͶ翼䄐ŹͲ郏ִ"肃쀁̯8U_}vb\cdVWVVV[WRROT[^Wm`WW]Wxmf|~cYQRa^[ZTU^{\cuiv}fX\ދ|}`WT[VYZZ[Z`vfdrfnq|wnvdvzVvbXY^TOUimXQqSZTykoryhbTTPQTSWW[XT,7JCI75CAPYc_nj[IVTO),-,,2.$#$?BCSSTZ[OJ')*,]:'CZ4okRScYQY^UE/71>8R=7E9AI[XJ1+SH+QP#71+-Y%(3^F-AFLr;_Vkc]PO+ZW:9[pi`e93M_aH?FDl}|ầbOFJFIG|HROarlQXcSGKNP[gsg]O>AVfFPPVb]ZE"?w:[0bQ;7L,+9>=J*OKLB-:HL))G>KQMNFCL,0-SD9"9:;HF-(8I(#=_x_DB%()M&'$''$LDAGCED~~~~~~"ͬ񃕙ఢӵߍ꼽цǠ߀􁅐ⲧݞ؂ަἴֻも񈏊꺬"éϿYbwsjvUUTTUWURSRPRSYT\]XwnVWR[aWtvahrfh[X[^ZY^v|ab[iemyokggfqщz谚yjWY[\[VX^fakumhmrvawso\t\bYgU{_`XWRR~\T{RQWYZ{"|znSTWXVTTW|l`/:TIN9$4KXbZ^`SMU_TG(,**,-'$$%&**/WN\dQ@$,,*WC7M[`65ZV_[[Zdt,,3/JInDD9ZB08ai43*&*23.4NK.LJDHN@7:DR`96Uo>9ghjVpKI:?DFFtlOH_aYGYX`i񖔎}ݰepzFHFFIHMVXQ]dQCAHESe9hSJIM;XBN+/.Pdj4&joFK\OA0E11%!JI&KIHJA$"1Ii\KHM+RK%%#(*(.aJ5460~~~~~"񅊉Ϯȼሎΰጌɜ򇏘绳ڿ䃁ɀ耄ߝϡՉєӲ֎ֳ"Ұź]V`Rlmr|XSSSTVXTRTV[[\VZXxc`cdkkW^Y\adZ]ruy^hx_Z_\_Zhrve]noba]WԆz媓h|hWZ[][_fbh|voxc`ptzvff~vV^tq{v^_ZXWRU]Vu^UvWVWWY"vvr]`fxUUUUTSTZ_Xv203):*E*OGKV3]LEOI@7K)(')*('')(-.,(AEGD9J-*EIEFR[MFFJIEN_Wd<0*-YMD\9?h2H*"M_n`OJ0681?YL?;CEF|ko<=0KXhjxߒ}ꮒo>_}IKECHW\VfhWLBBMd29dJNeeXIM,.REErZ/EN3CNK:/E21*'%''-&GIDC2=Sj2-RYUPSVYT(-0\PP"LYO28CBGK>2)_]?v8:zux|?:6#[j~Ɗ|tⷕptVLHBGVZ]ftfXPKFMd8:gYnwjYPOR/0LBEeT5DGESVKB3L3-+-1.57I>??EE3>[DN7+PQ[000+#&,+'K"LUO8;KMPS@("&+1ES..LFOP&LNP*2314dY~~~~~~"ЩŰ̂ϵɟĴ܃湛׃ג֯鐊򉝣θɚ㐑Ùڀ"ӵռӅ􇎈値bQjmyhkoq{SWSUVWTOQOrvTS|bv~xp~}se_ljgZoj]nuefkxT~jybY[fgbZgwi_mv[Ykeb}験m΢{Ʋ\Zblqto_^kvZ{d|pgiixfR[q}XpprkTZp~_X`_TR"^E`uX[UVSY`XM7(HDMZPIbz@-;CP_P+("#%'V+*(JDD>58AJO-*1#9H=:9FOY[GIDPOH85(3;<"/23@C<>>EU[Z/FO;<(145/29?3.5CIT.W]TIL@NlMJF>D:CROVK(/@N8NCISX*/0%$WTQI"GPOCKUTMSI1J#(;H(+(MKQ*&IFE@Q360KG~~~~~"جҼɷ􂃊򋊻ǫٰ݈給õ߀닉´ıˌ؄๴ВǸ"Ź悉ԀwpVzaYnQPTTSQTZ~{VTqSqsWPjtcba~xi`hhmf`_lt{cZu|wuuu\OUW\bkhYavwy\|ƙej|#|}귣l鰫_Y\zejlvu_mzziezzmahQir^HQv[[Z`vynohYcmWWYSplr|lIa\XX\MG=4:QRX\,NNSC10>gxmM$!""!$Q36J:9ALOPPOO.)%0G4%!,8.CUWO65EIA40/7=E6(+BITIB8IU_cPA9=<:/13KJ7>HU3:@1:9;LIN-0(FWUPL"OUN6.4AG1)7>9HTGRO\BHUF&DW_V95D<5AF0/G`GDPO2GWmM3@FB8]L?GKD0.Dm[NIGSHpF9?HWVgCIPF-"-2XL0'WK2LO3(:DKJ8:RD=KWTeaV=;KJ/ASUJ5;\K?SX;1IbPEEA-Jw{W54ELMXxXd_T:WB^WKUMZADIK[n}|ٙpcDF>BLG?GpcYRM`OIQLC;IFM@CN="H=Th^A4AO/)M]WNFQOC>URBFVNC?493HJ7I=7Oj;-$%%LMHI"&(+H3&+,-;AHB3:KG=BD>FJ@>@B>@BGKKO ~~~~~~~"ꅈ֫™⸸ǸЭθ胑贜ɾ𱏎УƯׂŢ˹继ߛ"ٰǫ틐YZ]a^ZWQW^lvg\\]YVTYaXSQji[b]R]Rmu{[^_g]w`gf`bk`{fjnoyhvڔqZWT[[Vyvwop~n{_js`WZqTV_zpOOR_qrr_PUoQp{\b`jl)'),,*'(ZZ0ZM8IO@742-N++Y^20,++JTY:7J+,)%A@B2*eu=G^K?^\D:?CF+-^rRTS[hb[VXVWi.2-HA5Z>36fZHIHVVL@E.T8s_@9MWdUXm:tVNWfxb^^gDRSJUo{rlkHNCCB?;JEG|bRJJRQIOEOUl\\X`P~cYK@ay^SD:IWK?HKNXXSFF-"$3OYbwY7=A-0PNN:E8e>$!IB=@"%3HGH;90!+=QU+C9:;GTM041Z@/2EJHNTT~~~~"񂇀뇊ԾݱŬĶȞ㏐胂볊۪ݵʀÞϹ¯Ͽ"Ȭ߂䲵򂍕؀S]d`VZ]W\y`UWSMX`[VNUY[UlWjtbdsUehh{dinhX\hpm^VUV]db}xxhypΪ~aWWWUW`Rm|xxybdmU}}]p_e\SWcrm"Pc^}mwUR~U]fedtK&)).+EoA?>lVV-&MQOQOO06`L=9JYWHJa^g;rMIRhrONxuRPSWmr}qf~[?FB=::uJIczeQJKTLEPR\p|ngcfIHR>LzdbWB:ED@NUXXb\RPC5!2L[570B./I4YU2=:gAB?KI?E"':td1AAC1:G[1.TF@INO%*116dC6OTIH@F~~~~"т軰Љ¹ѿ鴓հ׼슅ȧ凒찚ϟ؂ܗ򻸻z~zɘֵǯν½󇄷"̹|Uc_RslqZnSXytvrOQTYT{emyXZc}E{ecxcJX|hfXKtl]cVueV[^rUq|sj]j^[ms{p_ZWTYWy}~xxɼY]UTVWYYR\ary]"QUt{bTZVSTVUUYim79(,/(?%7>CV7UNKky16cE43A:FOppOFZcYK!&)+)E9CD.1OQHM:/1RN5?B9U0-edS23/\Q]69S= Ns>nW\_63%BD7EP+25M>_3>OLF=RY26W1/:_T:HgNIS]vzvv||VkHH=;;txOwvm`LMbVLY]swihOex]Sh{umXE-CQGDTO@\sWSBC::88DDA6+EI+:FA94PQGC8#";"*9A?]jK5!GulODUo<0"24+9NOU5N+OnHFD>5Nh3*S(!(FN9IcGCMQ^uuw\Ut}|Ɏ{rXDDnI;dOI]b\^l|wpei~dLW;dXEGD?AKT2/*'$##+H=MYC0NS*'5(h5KNA?IHXSYiWO07W~~ώzvcWzDHxFN[i[ZNO_ccchy}rmmxkLJWvXUBIN@LO\3I?%&'%**C?885:>#D@>EC>I*,9cMN=8Ap"6.301.#%'(0-GG>>MNRSMIMM4." =CNZ~~~~~~~~~~~"չӸϱԾςܣ˿Ŧ͉𬒜஍|yѲĻɳʹ޺"Ц՜π\_b_UZ[^wpzztuWLy]RPSr}vs]]dQWbfZ[kX_b[`fRfckkbWgx}k_huX^~geuRb|dICK]}ןiSMUWXLKR`yqrfkwZ_cXzpwzSUU"zZXYZXUQQRRVUc\}aNt.243/QLM[6rp55YNJ;/]s.A38%&j^/2\7)0`oNBD0/5=,3AlAU?DPTIOD&,L87IUKA8127B,/URR;JZI5[D]TW[O;..E~lܘz|z}cABHDEu@GLXk}aLNOWef`doldmztoB7GRUbPEMHRae4H:J&&%HD;AEGGAE#B<;@NEC&'QX[iV@qi"U4/)+.&&,,20LF93EUXF?IIE":QJ!.8D~~~~~~~~~~~~~"󀊄ܼȶⵯ޿ߨΆLjϻܪ⾧񬩩୓ʽp־Ƴ˳"ٳŝ_ac^VSR[^fkhZX[aơtqXPxvgti`TeV]dZqcz\Wh~~zoitffq_c{TCORnĤkYWVXUMMgtzaet|xq{phgdabVmjzTTTXZST_"|ZUTVa]TRbdulep|||/320-*LS-49>?<212T]eAFSY`:cDRROCPL\82UMjhB7eNFF^mc>G1*0V59hvRKXUFAJ\\[a]H991Πyqr`YE@?Dm=Gum|Sec?BLNOH\^VW[[@>b}ej|x^?;A7@VV>@9FW_eMIW/'#92 -ERTJN(MLIJ(KD$9=O150/901iTc2WVNH`BFeVY`fZ*11RS(>3@GW^R6/3V[M&K]s7796`<8SgtRMD073`MAO^Wfv1,[[UWYA4Lp@5HE5Ade]3@mK;ML@64X4=::-$*OG6>OMY7hP?C@}~yeeUQO~|xA;l>EtusPReiUGMYX[ee[OTEG>^pIKhoiSBBJ;6BXSN?8EHIHLi5)#9734HRTHI((RPS(IFJ=7N*--046"5-B;(2/%ABF4;*GIO5<2(HEG@.9a_+-LAD~~~~~ "Įрʸө񽯹읟责ںඹ򁊂څ怒ʾ炌è˂ϵ닐ؾچ"߁мˇрfe`XTUPU][RzT^_dY^cXTXnviw{Zedbb|lp`hmspnbbxVm_PS^\rjftbXYZjjqh_TN~XiXmoHMGVmVr[Ybuy][}{Y`ZXpxaa|rva^VXUVZWWTZ`"[TZVVuzeVcgh_43/.-.(GINV.50-VV@E)/1ZXbAYUPXd-,2/U-,=0BIOVN533bUI0[k?<5,POL?VbgW_^9=6cFDCJF[779:A>?`A)Lr;2)D+:;xG:PcAF=6na7Ui8>=>431,I4@RL19^IcyNbug[QMxm||{yUZetd]fim<7\VNR|j4i[asl4\KMYZ6]k`,JKD8>LHZ60MLEAORKGAO-)LMRO&',PA'+,-(5:"2D??L0/)MNOIEDIO*>D7+KBGECFe854,F@ ~~~"􄍉ۧʸȹªö݁농ʬĺȨ󂅍݁쀬î̴ָ݁ѳȺֵׂꄊ"󇔙鉍Հhe[XUzTUQeZhWh`|TRmz~sZkeZaXU|mkr_xdqrhbb^hY_ek_bpiYbvf_hrldjWe{NjGFJPMJIr}eWVd{Xrfmkfþbjxsed`WYd}lhqultbbUYXV^]ZSY"^^gid\Vca`\75/*.aH6@PNQ-/*A6((LcZ-`\UMIF=GVMG'LL\.<7FD;KI63L9?6\KU25.)@LH9FQSf~>=A7`ILMB?PZ4;=-TB=1Q:;K0'$2HH;?B>eIFx?VQ?Fa3MGP3:61pSTR?M70)J96LeT3]wJYSQ=}]Z)isNF>AXM8IVR,6,EB=3430Ig}|vrz\H?}~{ylFXkw}]aqybT;JZoD@@AAA94`G;7fV5/+$CJHII7D18-O-,?F@O%AGBHJ*LK(&)**2ON"ODB:CUTHL+MBBKSF*/?VI8+C@%R176aXE5~"ۿσ̨¹ȣ㼱鑖Җ쪖޻侭Çş°ʧdz߁澠ѻ䅏뷔׵􅇔"žʴcdQ{|X\pw|pW\jRWTdblqp`IPv~qikWdaYWv^`i{he{z[_n^yxj{pkx]l袓xΎőxnOWzuHBHKNHJQM[knXRF]RfrrrpT{nomZgi~k^iXecXMWzXVstUW`\Ysa"bVary]SUY[_f]vrA9*==?8G-1RPfZCEMH=LR>DQJ<03!1JX^/N?141-53!$IZ?>dC?4R6<\9.H.:B;B>5RDJeP28]2WkTR[`o,LD/BXWGMX_N;7@NF(IoOtWW95i]>YtvT;D+0GF331;@96932Umyuz}wunaNB={exO?YntrSTjb[RHDgIE?9C?qgW?+@bVGTPGAGFJK8G/57iF"%NXQHK.+DEFD@Ka~HOO3!!'+2/KF?4~~~"҇撣ɷ݀ôɱոԋ谈Ż–ݫÿȿߏܾ́׾ͼï늅"ʰۃ﹪^smmzSt}_f\_jukWWu{}tTXtijg[WY\sU]}nxXJr\xmbyhf`k}onm`W^kbegcuoUusCJLOIFIPV\y}{rMMFŮUjx{qeup_qdRmdz[Vab}nUy^V"`cynfsQZ_Zbhsbtc<\1/?CX@H,@LdMG989)8EN:Jh>;;\=Cc<5K2,h6A9#4Tg4#2gN2GOFV`dYU<:$3NV;85?IVV='..kl`MCPTX.KABDGJHC2?:DW/#RgR";@EEOPOGI14MA64.9GTOphO"%&"(5Y5+=C~~~~~~~"蜃ũ눈޷ѴDŽ甛ū޾̕ժø퀕ͺռԸ܊۳ƹ㾳Ӷ"ȿõνӋ篩Ā}Ypos{Vtc|`ajo{X\rWZhXRZ^kfh~ohvPm[ps|ter{jUYSUz[Rd[fgp~iftĉgq{RJQOHGPPT]qOVhqsxd\gYWeyXdZU]g^|{ozsu{y}"xrxnfU]`h\``tX:-,U`nFJ/?=5Ji98fvCoY;0Jhf>?RY)-YUNRWLHNNEJPLTc1/;s<<_:5\?38$-K@#5-(;FS<3>SaD4:8AaR=*,(*Jyi?P`L2#<0:FWcC>dL\Mq;8IT=EP54599==53DfcbnpXZAd{u|}?XrpLHcQqBPHv>CNQHAKXbR5OQq>h8aiQ@:IXUC*/,JJYMGX]JKB-5MVTQA629;>SIFDE>"2799F\]H?KSJGCDA:COMM9"8(++07\,/YN~~~~~~~~~~"ą۬Ї˺عƕҰíĄ퇮ᕢì읧߀νָ󅆊ïϹ쉕է󽭕Ķ"̹慗еsz`hlld{mw^m`a]Z^\eUwU\||T}{}k_oa\xezlMPzwogompxawt}W^NLMPPOQR`skN~\_gn|~Zaff_azwqbWc{iZeXgswYMOe\rim~"^~{sjs}z[qw[Xi~Mf5B7PY;4H_.1I?KJXJK[rM?!>06UgD-%$=5.6??T};#@D#F}gejHOA<8D2A@Wk[Emm[SM:CGNG+FD>50/5=>A2HPl\imxieCU9V{~foPPZnfDPGsSLKPKNOLXJ;@>39bT\QDV]L;/LecQ+0/E1?IRg[=?,!18JRMFAI>-/7DLOO"=g278W_D7FIMTX]bRJD7>F>?Sc_Z>*JJME09OiSA7=MQGWIRBQX\ZPFBB/)/3:=FBHUhajrjeRC:OCwyoauRRUfN]NGWOPVXYemr3QR\DAoe`iIBROC.D22X/55_@5@U3'=9*!=<*)8FIJaXC,?JLS^"3D;?9GNLMW-Z_[VSOA,$*HYGMXLh;2>D4 ~~~~~~~~~"􎑗Ȳ׉Ѿ㳔︌ᯡſ쀒Dz厍ǫչԴʯȯㅂν󎤨뙪ロؾဋ쌉މк؄ꀁ"׮ȷ̤퀧{^bllWhdbu}_\Z_a\ypUx[_}v~q|`rma~dnpg]ry~XbmXaZVioî_W}udPTVST[uyxllbcRyut]^vyj}x{kmzwsW_[Xd^yvZT}TQ{Jh[eaST"Z]\zZ^{^Zu}}c_jytyMC2AV37?B0H?KP7/U6U9CSPRER/-R'',0SMBLE94``E2#=]WH..OWS@7B@AERPaNQy@E?@ZOe<<932OPk|bhl@B<5`0dDPe4t@cV@DQd1/GH]fYacSV[Ndqd74O?@?0%6:>QFO[alxeZX=4:PK|wunNRajnS{_ZKLN\ezud5;uvPMa`gl]H<;HS?'.*+Z_<7TB@U0(MK>&1K?B%.B,02YOUP&'P"353>6?MTb2/FJMMFIJ73/Oik^JR5,2JB:T ~~~~~ ~~~"Հڲպ޾حϷéؼ셐ÞԹ඿յ􋜨òѺ멃Ʒቌήñ΀ݏƹن򄆀"ҥĽާ΃YSYZglpw}jxiYX`XvgzkF\}z|yowx`jpmhjhfufoWo|Wb[awUuzgIN]\hv}}ttqfc_SJ}wqm{t~}llxǩdiaz}|zxTWopWSmTNUjXZWU"QivX}xfmKFPlW*G>G-3/8AY=.C[N5MS?4B\beVT,,F;C,0QA6AA))CHA1"2HJEBARX[QGO?2F[JO\ng7[fPJoAA=:=`=_tpqAC>1ei0&LLZ-S\af`MR_64PIhra^[BFLXb[m7G1AG5!)=G\`aabz]YV@4BSUJyy}mi{wxybi]j|t[X^TIMdfH3;9[VQO4B_eV@;GUMP.)XSRAE`NBQ3-M^eJE4%e:=HO)/1ZX,I=>"NT0@-FIGFOZVIWzGk1#9XJJ0~~~"ɤȾʳŽʳ׸߾į̳ȶ̶¶൛⾽ȟ̸Ӽ͸ͻɲæɡ¸ͱפι"ۅїγ副ӹbXY]VSU^kifd]rf[XX[Vuyto~VSWdxbk}pazglf}rflbzw}jda{Zqgs~t`{laJKY]{y~uksqhe[Jytvw{|xi^qudc~il`}^aOQYx}|w}ulXbTbtUh"sSZR[R`{skefffjoy\HUm0)IX34'$1aA#0UO3654@`8m7.,,*C7=IVPI6:B734;FB*+2;CKLNOUM?LPT\L78LiRQ>@6DUe=AAOn(9ITRwuN]kq+2MC4JIH\aP?`b53JHjXHF8KSQ9>QJeP4974"%:D_iicdvZRWUKJRUH|wvpht}t}xRr|~zXi]MTmleWZL52N]PUh^@QA;3YlkfC9DBWU^XQNg>1)RhP1M2aT:,?ZV4+9=Lk7\-/+*M>7AECLRF=$OJBDTT66@I8:BGKJB4:NrvL94=F?4(',<[6;?%,:BGSgB?FVS:7=0ODKNDF:[f60*OS@85A:I\I@X]TN././/':FWabae~pPJXfNNJKzmtqwntgpx~mP\|gbr|fra\hjZLLI/IKg[&CdOACHA>";AJ2@JN(1=9',31,0M+F?KkFgKRA!9FTT~~~~~~~~~~"廤ꈏ񫉉󅃄ӹ⃌邇⼥ߌۡͤ댊؈Մ٭ϼιúĵī삝񜩑肂Ѵνރ"Ý𔤣큻`__gjZ|jabhOUapUTUX]UVYSdwfnrmuekee[kr[][`w}ivs][uwbUweai^sq_cqh]KQXXWMJEg}~s`\glfg]x\gj|y~}llt{npx{e}\lyXWZ^u[\s~vveh~_ju|ws_\kcaaMOdaNalWa}RV"al|eSM_}Y[QsdX^ryk3326;1FCF?BS18]0"/AB_\?H,+-THBMURWXJ?&-.S\0-$JOT<8=KNU>+5O8:U@:>FB5/.>J^93*`h`\452:EBE7HLoV/,EUGB@58TMSe52[QN\D*Q;;SNFkqYED>ATQ7ZH[J=LKN78,.<2) %?SRC2+6.#;KI:668$,c"RME/'*FE1=N+CEH6%#2^>O,9@A5~ ~~~~~~~~~~~~~~~~~"ϝ쐑뇏ĪسԁУڃ이܏λļĶ®ʶDzΟն"ҵ뙻˷X^eg_fgmlfcK^wY`\SY[[ZZp]^WdeXf[ivgw|nYVjzbdZapPM\ka]PWIev^\hh^Si][kpxsx~wmji`Ƴhoqx\begf]r{slksgew~sccg_ru]LEP]yjRVWRY{[j^"pkprb]eEG`qkd|r03124P@;-/4X55Q%9QEQ[CN034dZSY_WZ_TMJ'?G_/+((+\SLJSYF7*>Q*$B65?PWTIEOMI0Q:2boGPS]RLGK5ipa~VBHaK==;;6;;P88fK1@^VfxsOC0(*>DH?EBJZ\_cl_KERP?>oZWbag]naZv~p_b[R[nla`bVO;OA=K8]t\HS^dVPAF@A>F_hJ;E>./5/CIA7"!$(/BO<46*"1UM9BKT4=5"_af`C>H_S>>=O;D1@GA:KH( ?;L@G0;4~~~~~~~~~~~"ְߠɱ㎐Dzك竅ɹʺǮǛ߼ʹƹѸⲅijҾЯĶþ܎贿筓°յ⼱ū၌"ù¨ɯ֒얄`]kʅu\[]Vpze`dg^wmYm]YYZ\]\ioTSrUg{[e|y\gȭgO]]WauteiԭVmrcP[Mfvg]]fdW=]Y`srvu{u{~tnhnh{{lee_Y[kuqx~{[IVi_H[scWdjR]fT"~{`hrguzg_hzn_OltSV**YO;&935J30?!&ANJ^9i6451UQUW]WUffU;,,J-()*,/2UKSVF;;E%#@9/DVcWVPRRD5LQOC3EbqkwdP]gGAUvtYMLkiOKS@/4%@38XNBEajly>p^:v{l87JME@AFJZejaXOJJOP?4qk^ghwvrnwvfcz|_ZYVIHUeijq}e[RpgmikRrD{lkdhU`fZBMPqyqSA><%!+7WQGQJ5!8?RF-3EMFf'4<~~~~"ѵۻ댍鸏≐䶐˛˩ǭº߸ȟDZ˜鍭Ӽɭ˹ҳdzܬގ߹üɴǰ㬌我"ӵpWwwnmnriigiaVYAFbVWWVSdbWTefzghzzutk~|}|jFJ^b{qleqb`t|xt^aSm~rfaahra}dZgsuwtx{}}zye|npdv|per`_bae[{\V`~r_siUghndjV"|{jl`[{wWHc|hy~kM[JOOPWF."9_IIh_C256@Ki?@;70&D?DNRLNagT+ B&'*+)L]SKKI=>PM&&H?kKZhN;7GOD2CXTJ9CeqsvZ{\ROM[qjVZ]ulWO:=L<++0LIGW^D/=Z`C!9HV7>7TKALe5*"H=:,-F\p4,K;AIOVRDA"2FIAM5CG?G=/~~~~~~~"ҺŔӅѽϸ񅆅ĵĩґՖ찗ġ녚ȹ˳ºƵˀîƣȵʵ΀哐ѵΎ"սo|kWenjnvpfpbejiXSuVcvSQR|vZ`TXT`yfshY\s{\blMcubVq}tlspZSt}rwv`\o|j^lvuyzg_|wqa`hgvlOxfgpxzyczrznop{ypjX~okxupt{l^b_WZxqt[hepfpe_ijh"|lqubcfoi^qeppvn|V@A;;IR-+H9XuI7?H@6II%/L<@R]WIB4T^d++C^U97|F9HI>:6CLZaQQ{HS;F>T_8#))-572B/32/?4M^Y"KK, 1BE0"$79.@SQ*&BCLXjlE'Be="G\f1/.)-7I$ ~~~~~~~~~~~"ޡńǓͿ䬞މɥ뺭貋蕭웳ナĚdswyҾѽ𶼽򟝇츐õؽΚ呚ߴ"ƭٳ̩ÀԡWPIVpxQja\c[WYYSLLjZZtGFNnpZhwwhjlxmOvvLpzdq~me]frww}vsiQp}sachhirdQrju}͇~tJS]wjVWotuy``{~{}ckzk^l}vposXlbwsZdjXR{XaiKXbxgcIDE]gpp"~|s`lm{lfkngjp`]c\}^b81#!-ZplfaB%E>c=4\Y^eRIahVf8-&).O(!'MVh*(D:GE4+:JPLXF:JcdE5lgB9LJ;(DX6Sd_I0M=MJI:.Tk=Q06C|R.)=KHOUkzqO=TY=HN((+0P-hWU.'!"FC;WZVH1T+$@M~~~~~~~~~~~~~~ ~~~~~~~~~~~ ~~~~~~"Ձ۶ڛ߶輕ٱɻ뇃ֶ°܅怘񊠰hngU|۴ɲž΂ޗʤڈʹֈϽߌ"ۊ꾱֛Xv|WwzVSasy~}wZabmjX_XXWVUw[}j]e[w~YX{lw˻]|ov|pow}稅φ{c`jpvy_qedix½}|SRKtYeceknKZmZez}oYx[c{wk_~rte_]\YndXOYaWj"zgVfqofm]URHCUquwyofvTSaT$8K8>IELnb9 $)+7DWqvu];JS@KWM',1X8=U-+$! $'FXiZauv}~ROSSP[SWWV_wٺqk[MJHEKTBWvwxwa}f~{yqwD9/TLwX>27MTLK>J=N*5gRPI``We_7@>94FAc[VjkBUqPK.HPMNQE94;3)K3P'G-?=64;A7ARM"?;=oNJGs<8d_[I1!%+&%1A58IF39`_ !/7~~~~~~~~~~~~~~~~~~~~"􅐏NJϻʳٰȧӱ·ǍvomLuƹۻ¿郃Ǻख़ˑ܍߻Ӊܫر㯎"뾒ԐѱߢzRo{njx|j[gmcslrXabbq^dYn^|}UVTrQ[S{_ʼiU~ĺkwq̶Չz]zi\ghm\~kgpz˽OKJgarpln|jdX}`foh}ySMXu\kxcbzvyfvsPlvV^vrknkS`"lw`\wvuehgXbtw{lMHhaMu;"XME936IB'2=8B5C[lnFEJ?[l))-3^A+L0/%CFDTQG>ON1+D_^U=$H-L[&HIHD0/DIENUT+VPUMS`iVZ]g_ICT[5"+@"]qhMQH7g>^=FdJ=E9FC27>9>?)"4YS.(RG~~~~~~~~~~~~ ~~~~~~~~~"Ⲑ̺峻첥ȾĀ­ʫ޾ʖ§͉lvo{qSތþͧøǍƤ߁獌龰žȨ"ь֜弯ϡ؟ydux\Zzqcuz~{]d`WXuV]Xzr~aQcUU{Vo{fӵlinr|{rhfp{Q}h^cejw[m{{{{{gwsi}xMUMPaaXU|wmXhusomss]Kgojrp_osxZP^zs_cchk|mLl"zaEgcy}}lcfoqMUz]WsG87KF/3C?3$.5Hd\<:HPgs]SI>Wb,-./.B'?31(E>?O[HIeV99LY[R@&)V2'JG=A.H:HHLS\aYRSNJW`OSTUO=pbE&\Z[vloLHNIST[a򇜯ƽ_RifNHLJKUEdxxezvtzxsnn~wz}z~yus}sQD6sdKWpH>MmdH= #QSB:BOMMc0<-:>! 1CE@267<@KK8<4"TmpDE<$R>\#:nPEXDBF43:DU@#+;BC-,[A~~~~~~~~ ~~~~~~~"곣Úи≊䬥仯ۃٶՂ۾ۿխь¢荩bZicegdf{|WȚĽøڿȩø߇׾ۯĽDz"šǺѪꠀwnxj^]g}fntabRT|pTVwrV^aVU}s[Sqfũwvku{traű^[hintxܡucW_kog_uvw|wo|w}pc[hZSdhWpTTMztws]hovz_Zuc\Uulik_}\S\|[NOSW_aR"`~eggK\mzJsqad`RPdwdVp`imQP<@M@7LM>*+0/=cpjRMVZ44(F*N2hOF$aQ;F-!'$-AO0!:RH=1B`>~~~~~~~~~}}~~~~~~~~"Ý󦏫߅߄ ۴̄볚Ԥ۶ǿ췟ꁂqhhfdbefchdf|{Y{ȕ쿰ҷȽպည١̼¬–¯ڼ˝"优뤮ƄWtYkxWoXeoeoubdaWRS\SU}hX\_lrURxYVynm}hu{jitjljadigddipmqnuzc^_fpq]|rlxwqy|X}]Z|dsqjs`}uux~rglvsZ\sq\X{bJ?NNSg"{b_Hr|d{rh]_kq^rYtUh0T7)EVPS,UE7.8_5YB:/8Z>;1\a^43OH*0SJI++N;+Kh.1U:Iq7E/=ZiNLR.&B:4FJ;;Ql`UWfhQOQN~AMUMLsbUgv_<@PHH@D@GQNXms˾dOONKKRCUqyzubovgZex~y3Yz|FJ_S[R5FMbUjn05?GBPd~}r^GGGDVMNS{QIbiaW_Z9*.1>H96EPRI;?KfQ0("&OT/-FB"LAIQVHC@M"4HSl`7-31W;:3cg]WXWV177lY+)+MQ[m30O9R:1@:KdkXT)*&>BH\daa\kdSO:MBDLLP\df[K=eMVj{TFRdILQca^mjx\MLOKKIFeh||tYn}yjl^xz}~~rMFk{_dgL.PI4DIb8=NPOTjt}gT??E9VGH_}\APflnhQP6:FK*c9Y113:VXPOZSLO-OWLBJ0//1/D.(EbjTE.2179>~~~~~~~~}}~~~}~~"ڽӈ޽̓Ģ䕮ﺤȤrkijispaQX\\^ea\Zjg\]~twS~|hzNR|†Ǹؿ{{x~xpާа帬ù􋋊޵մب"ˎѵ燅zs^hc^aifhVVQUVWWjv]k`X[OWp{sx{{kffkdkdb`c`\[impxgbVyǂXilge_dkeYOli}mye{}na[eioqwsnn}r}||xvknzly|vX[]WURV`_j_XWhr|}yh"bkffe\czWhebgjdbxwpY_kszGJKRKM[YEBP275297Q4WH<6)0V?CGPQROlFpk^aFIbg_itx{{ǒPIIBJMMSCsvm]x}ldftnVU^ry}nڱPSrYm`X_haYf[[_`Y[br[C4;'*2.)"+47YGHIPXcopt<952`c_NMK>1>CGE?=OHOaRD"M/1121..gC,S8.N-/1,-VMARi`@0B.7<>C~~~~~~~~~}~~~"Ǯỳ׺ۻ񍏉޷Ƨ㲕뷊랗ìzolomivl[HRVPkiSVjSKGu]CPTmrovkRM\HKoʪ͹ƺʸous|{ij{ؑ̇冉޵"۸炋mwyiRe|ui`UXUR|omsyZaV[|dЙсzmZWbZhd[[VWYFWUByKY{p|aS[olk_Za`^Qtjyyžtv~~f]Zeotgkjqhpsy{ps{ot{ukxljVWZWRUc]TTUWX[jbTQV[_~cZ^^XJ\Xt"fc`aacYldkdehfijdv\mnGT\T>Bfh@3BfCxT_c&6bfS6'BKQIB*"E[:LKJE>5L]>?;VunE,?9^E&5T>KPXjaG^]nvWV[^jrtƍ峎թKLKCPRIEojoj~mfjtsVcsz}}ùͳ̰adOe``KRPQam>bPPC51FT344-'+78-(&)/6ehmk98,(.3YVZ.E956/&/'4":USL"c60-./00X65Oi4.-0,*-2eSLaSBMS2>FJ>~~~~~~~~~~~}}~~~}~"÷ۼξẩӳİڷ̅״䘀፶Ψʄ鑪|xohrqkdfl@tJJ`cI]=89BDLdn_dq`99DBAK蒜௶ıg{pwg[hs?IKYxӆϰ􉒌ͧ"⊎ټكဝiaxumwibm{oT[VP{j}hM^rwtkVgYtfq}RObJ{bTUE@8>K[}mPYPKMW|dhWS]_\Sblvqz}~{bdn~yy|wlҋczxxd`wBuPO^㉗ntgsXUPZcbhbYVU\mWMHRNZ"[`\^`dfqE_cd^[Y`syaf|jLSR>*Ch7PC>Ut=6>?JkgF'%I[`YP@4KY>CK1C,+&!AC<8DBD@8*!->=GaVy<)IT=-CCSBRaidR[rKTYZht}ӝҲQNFFJJLG~frs}~zzadyuvyzղقo_Z\X`^uIn`YL=79Qeok1*NWfcW$?-8ccfg25/&##QV_0F/'%#EM%*&1SV<"I31+1413rG$2GW0/01-.`ZP:A?Hf=?JLHx ~~~~~~~~~~~~~}~~~}~}}~~~"ſȫȦɥִ։ŤDzԗ懴̶­✫uyssksuhzZP9_LH1[QeJQ>/A{;\Q?@ETkpaK(#>O\3cU?>E7NS(?/-((*M:16AF<5')A;7AYHuAJL5;+SFO?T_ed`iqclzrԿ襚½YNIKIHJScn{s~w|ids~~rrw{󼶺gae]p__kUH48Pcf[+PEDDLVI/8gXfk-/..))/220$>9@0TXAK/@5WE"5'--32.+0I(8F@)'-LGCH<54/"4P=deKRW~~~~~}~}~~~}~~~~"⭢鄌ƯѰ쐔幪ùݹ˩Ϯ~{wu}zrvNE9C|q:;:q38Eshc`zK09;::5=@AEKAF˖ʲ쿲ꁀ뻞ܶ򏞋"񏑌âȭ˩ΫWVT\b~ho{bugqEN}eX^baVV`zxtqmq_]UShzǽSF<:ulkwz?A~~q??D>?dhJMLIGCp_X[]YWVhkvnnxyrnox~|tilpvxfY}̒ibhkmh^r~@D?DMOJJISz~x[[n]a_bijeZVV]\Up|ZvU~"\_`YXT]Uop_mqnulPLRV%#&IGY,.]D69PRDIS6H@\O6 #FT\YXH5''M[:G1/+-1XG;GTH>@@CTNHQHFB55PLIH<GP]YJQ8)'580@=AP;-.*7Wbjn]釆o䐐󇏈ԓLKCGHPE{eWcx|daszsu~uwu]qgzyOj`]SN`ykVPTgPM/1/kpo30996vC:--04)IJM*/TJYZQEG@H/-SW"V1-(Z[V048`UQNN.6V0F;TBaR_fP4&/617~~~~~}}}~~}~~~}~}~~~ "էȫ醐뽱کꁏp}|xtqsoKQn8,ol58r9422_q`n7665873>GAyR`^o\H@<;?82B씝ƼͿts_SXPSc`^i>y497<3;7=:?=?a膔B󀑐םVSTUXTt[O{XZi\mXNQcmgl^o]]Z]a[URV_mmrY[ksgZhfhvpd[TorXlTu89{v@Bz<C3?"EMQZ.3B@WD3%!Ho?CAABzCBB@BBFEEJNOMTWVnbeaWNNPFRZOOylzxv{{|zvw~ww|~}yȧaJ[jvyu~DCIPOHAEKQRWNȆde\\acbWdbiw~eba^^Z]UVWYX~"`b`XcbYZbfcdUpbnpnQgnu|'&%'PE5(HJ%:9JP+UGDPafR":c;8Y^6!92CDFK~~~~~~~}}~}}~}}~}}}~~~~}~~"ӎ‰Ϲ҃݁鉥xrvvk7?84224245399707<98987576D~|NvUFFE==97EH¿ǻĤ}b~peCV\bzlpyutw>=<=?<;>>;?MN^ܮ񁆊½"ȒٯܥWUUQhL{VyTpU}cnamXwgqXYUU[WV]\|gcUVdv~r}kOu[ysߏԚufw=>9?A@DEFEEGEDHVN;%$"IB(,%"&+VA>E2+BPE9QaTA'5>FD.EVbS{Ԍ쮗Ļåɥꨀ}j}k[kkeo}rqt{|}vֵܳ܃¾`HnpY7)-6Ta2/.-<=1T?4BZ50146320050-ULOP*0O767;89:B=<<37356?xuhw[traaDGFB976:?j˼˼ƿuƿaE7ACBACH˲҈¾鄒ɿ惌û"Һ˩YWVQjxu`TTsLfXz`~qwqv~[UWTTU{wsRkqTTwk酲ϼwښ@qh<;?CCEDFLNKKIMKIIQLOTNSNJEIyaaLwfqXkl\QJIKHNuqzgcpz{vuwvyo{rnozۭoMMI[U_npks]al{B>FGaeZRMSRNKKPadnwYX]gg]V`Xef^VVUUZdXb"yk}}wW^cTkPUkV}e^-/-%G>%ZuBO0T,-N31HN%JUwf`QdR@*@G5pHRTUUQʋÄdzƸցpcopvjiyujp~uuxy||~z|Dz뀄珡ľbcTK38>:K`c.+/=<3-R>B8M,"Rc651,'&+EBAL.5N:9L/6R52"60GiK=A^]SUW-.1*?A)K7V+/T>GGfA2~~~~~~~~~}}~}~~~}~~}~}~~~~"ęᒖåȧ񄉂¨펌絕̽t}}|uc:?49432898798<;88:788;?;64453:8:rlULUFGTEIFB@68B7E¿ƼлտL=9@;>BD}Wdul56m8lrz<=HJF=:8@===ADr㊒恁̧ꕔ܁"ڑſ₌ިݽ㛀WTUT\RYy[aVST~R[joXokwwgfdie{WYTyrwheXfX{zxiͳtFnA;>>GFJJHHLONMNNJMQNMOKKMNLGKIG{qWILNZoShr_VHHMIOzyxnjmlobldqplovzu~{jNQOTSXamɇedyt;<{@qsEIY`]SPNSQPOSTxy}c`[Z_lo[WizibUqZ}W"~|~l]TZ`YzÖutu[X.0.$<@3!3J(+),/V>!(\FC/B?/7F63Q;?@p\E011SPFHIT...-KM92(6Uh]M=31"FQH&~~~~~~}~}~}~}~~}~}}}~~~~"ݸڄ༥㌌뻧؃₈扤h{~yx]uhCY86:3354;@@;:899:<:989<74468577:pfHIFN[iKEHDD=7696?b˾̾uF;ABB?>}YIGq;7:5op~s;<=?@ADJGKMKOSSPQNNNPPOPKKNKKMNMIKJHylUMGLsbRevaTJEIKRXkyyy|tvmzqtijv|s|eQV\Z[WWʺw\Pt>;>>~DHP_WRRQRSWWQZRbyt__]]ZkskVm]Qz`x"bf[W`ff][qypks,35.$KPPCDP_))KSYLH7/W9BKE`RAJ<*A375cP@<8=IN,/-XOLSYbfV/24/*3_B:GFxAGCCSшˣ̩ʊÆĬŷܳwiYSk~x{rz~zmsty|~|~恙󀆐hF6Rh0,(H&&?jQ5RL:7C/;1O*bF3=RPFA6:;PV]F="/;DP66,&:UgdVK^cX9zP4~~~~}~}~}~}}}~~~}~}~}}~~~~~"舎׼󵯷Ħсۼꄅ㮛􊦙srp}cGuvU7:89;9<8:999?<:9=:846:734075777hhI=LVaJFFFIC;57;=:CįĴD;<=C?A>WvEg_54gsrr8;9=>8862:AECA@KMIτ㖁٢⌏⨄"郑շо܋ҚRYSUSPs~wslwojtV^WXagmg[q|iOx[owTBJLMRQQLNMKKUSLKOLJEJMLMQMMIOMGyoVJSO`UW\dneWLHLOLKsxwt}vyxve`g{|r{|vqwVYWVYXYh\t;@{AFHPSOLKMQU[WRS\Z^o]_daZ`^yrvbcTwUlW"Uah^UdjheeZd|gfvqLY11*ONNUTV,+'?CFJ\QDV_@pYymMF>*T68*UnN*;JNJH?Kioe4PD"ELLO/54,'JBAM45107:`M\[RRQRj<7bSEB~~~}~}~}~}}~}}~}}~~}~}}~~~"ȹČɢ؆ΰ޴Ģ鑦xorq|zkFwKH<999<278>;:889;;><=8876650479614hjdOQhL?CEGJF=3698BN㱹ǼD??DBB?@?>@??MEA:cbepr;:<J,N76K(&'WM0+@L\,JS*-D|gfINP3>N<>rnH0;ET^23)'ZL8,>@R+C6CUj^-!cNqPRWm޲꾶Ҹȸƿݷg\\qki}}~vo}m{ywqlrhvc톈ĸɿvL4N'KB?!=PAEE,Y?7:FL]80XmG*GYT*0.1:9760-"*WM7Q130-WOD@69>:::899=;;;75:8764;98;89gptakpzGEPQF@43;549θ·{T=1BBB>?;>9;<<@BNJKQOLIPPRWci`beiko{dms~xm^]~qU^b`icbd`_"bzbigWSbi[Zcbf~'07N-L44J(%(XH26N)'" (*IOKE;_Ob?6HRMY]=008O`857RYC+&8T-I4>Ppi?-YH^T]yǠþĥ·þĹҤ򨀵choheSq{mf^xl{og{񟡄Ǽ3MIKPVI-9RT_s]F>A8BPc:7XRGF``M&/512-,-,)".`I8Ja62,*N;;V`R+12+?6=QRKR47/4jQI~~~~~}~}~~}}~~~}}~"旾ųކΤ됑УߍŠսݥ{tpRIJcK>0;8:=<<:697;:<5683<774896458@;98<79798KS;4DRDEFE?5:<:;6૵οtcH77>>C>>:<:8:834/9:9<_7=;9A<79::5899:FFBCGHCLҲ˘ѻ鈔쓙ƿŷυ̮ζ_VRURNhk][XSRoczhWVm|lhfiwk_hdVrkx{uslYUʇQUZfNH?LNMMMPSNONOLNKNOEMLJGKLKLMNTPNNQFB<@AUTFLknmlcWKPOMNL^v|yz}|pwqzzrhuvq`PKKPR^UTTUQOTVRNKSQNKw>?BDOMJLKIJOOQTcdabikefv}prvyoeSWb{Ydgdd_^\Zg"dwqzdjXv\lbly|_C5CP+(>;N)'(UT:;Q)%%%'H=4B\mNJQAZV.,>D65-6HSAW/DKVH=38R/L03GXLE>,3i©ſƾnmjdWPh}e]ze~shy凅ľp5KP]mf]MCIDhG>*3@MLYf]MPMXVFL+031-(&*+("0VH7ALj74/J@AJP?E(*(KLNRQBGUdLL/7 ~~~~~~~}~~~~}~~"硽ްڊ츌댦ɸɬt|q_xjF:::96=:97879:?>=:;689897977379:63999789CODCBCCDM@35::;5I`Dz׿lS>58@<@@?<<66;7;47?9;A.55:<=79?=<8:73;AEC@?FF>EJꏮ߈Ϡδ"ɼ÷ҬoWUURO~nZ[YUR{[p]Rk_Vqvwfyk`b}ukrxpjށntwRCEINJNJIHJJNNNLKLNFHJIKKKGLKMORMGKGB>DIPWSkrsrefVILPOJGMUn~uzzsphW{o|nruwustqpnXKJIOMX`ZbUNMPRUMLTPST>92>EMLNRNMLMOQUXjo`VYZSjyx``ys]maSs\bccfi[VVb"[jdfjbamqj_svvcZt/9HN,*C=K)'*\ZF8F)(,+%?- GUwE-LCgpf5=I57 ~~~~~~~~}}~~~~~ }~~~~~~"ׄ󄆀Яکكͳоӯkswb~mm?<<4<=989989899:;>:;;897857:98469574;<@>><:7=C=;;@;9B89577738;9<789:?J[F=DLIGGUauǓ向ː΀ۀ"򠍑̬ƅ³ʀ^mTSVSN|gZXWn\{iuca]]m^g`hnqvz{p_iQGIELOLJLKHKJMONKMIIKIIEFEJLKNLLOMMKOLNJNJHJTnwrqk_XLOQXPGIJ|sxvzjceruh]{eijxsejrjoĺFIHORZXWUTNPWTRJSRQWID8>DLLNNLQLJLQSlydaca_gosxߕsfhaaQVqogvSYXZ[][U"gMOfexxm]yiw(7BI*(GAM)&)\RB-?T-*(J<(#GK\HXT@=wDOiVS^8d\C5 9@OSCV]JABDSLFQ\NPƀź¹h_nvtfsrfg|rsbwy{qvx𖣕ȿoPZZ666fU1--B@UN=AKLPglONXQ7%) #'$@LH!"I7%$=:EQTQPNWNJ<-A.D>7699:97668:<=ELC[IA52:C@36:ʸǾ̓ڝq284698@9<42:?A89:;07:84889859;9<@GD>>CGCACXhӈBݶ޸ֶνúMg}UVUSpXXZ|fkWpXjĴS[eegpUo^vvTnLPSLFKNLLKKIJLKLMNNSLLLJJDFGLTMLKLKMNOOMNOMJIJOWqwm|fZOJQ_VHMLbquwunom}fsdcicktppspnNPJMQR^TWSMPSRTRU[STPL@HOQKMMOONONOSWlod[\b_]eims|cfhaUw|xbkuYX^iaVWVY[U"~YSVY`jy%5ES,*LIS*&L_XE;AT-)&KDAAX<<*E\]>`;BTtj/49=BmE/)hpTkV\.GIUURJ=J]P\ȯ¶ĺ¼ȷȾhytqqf|m|~usu|tüþVj4-,)+VTO"B89.-87BFFHBAGG=6JODDZ\RCGJKFBI?+>~~~~~~}~}~}}}~"鍍ۈׄ墄Įּ݃꽪}}wum=E<86>:23;<:88997:85;?:>;979<5:;:8356877579869:;4>CVJTID56;B=:73ǻ߸pa1788862<;;>7<56<:;;:C878788:9:=79;;?ECBAEA?CEDYϳ劑"ۺ؇츲whlYXVtelzswZYdnaXwWVY`YU\dno`sPwe`y|IA>KJICDJPPMLLNNLKKJMMINMMKKKLMPPNFHKKJLKKMKLQ]gzx|jaRPR\UPMFsygqrzpx{kyotv{lnthfPONNNKLVTRVOSMNSTYWRULKMLLMQPSYNLPRT]cdbgYV^a`qtikdgXRdfWSWZYWV'Rxgkg_v]hb\>?LV*%#L]WF:00==7G,*PTEAJU79-*`hA2BBM5.+5:?B;K7-VHAfbX,DLX\UF?OTRaյýȭ;qy|hd]o}yxyempfqķ˸sFa0,&,-0_aY`TNCRMcYIM@?N35-*-/54,)ZdP?"<:J\84@JSUUG92:8Ѣɹ¿rnh47:59689<9>F3.5/7=;>B<:97;@A<:8797:@FEBCCHDBAABӘ´ҁ"ɸӷro~ZZ\VZXqahg][lxj\|[`^SPSWjclkn|~|y^B?>EHDCGKSNMNRQRMJJNLGELLKMOKNQNOMICIMILMKMQRNNMPYhlw{eXMNTPJNSqijkgpqw~wvvvqnihQOOILGLPQJTeRKNKT^UTUPNLKQQRQQPOPORUdmcdjgZURWb򜻞jndda\|{WaXX\^WTRS"xu[[ic^W@;>J'"!"MQ>" %@,C-+LC:8DU@B4.^^G:E:@W" ,4<7\D7^KBWKGC@9AGLNDGRZcyˤȽõƿ¼crtq\]jorqmmpifZc뛖϶nrS12.157YKYYIJZgQSUHI=8A)124220-**[`\V"NLUnDRBS[^6`URJ?CQWXV27-(NKH*SUWSV~~}}~}~}~~~"zŭ得ҋzsu{`}@084887579?;9:46676:Pf<31267<8??6AC@>;7863666456769764>DCDBBDB@?@A_cʂӾ$숇⪆ʸ݀꿭´fv~UWUlN\l]h^XVa]WYkztg]svh{ptgfksv{퀗F>ECGGB@GJQONPMNOQORq|KELKKMQLRQJUWOIKKMLMNNQONKIPSbspzln_PJPJNKSdgaftiyutvyueeaWwNHNMJILOPNWTEHmWRUPLDJOININMPPONUedabf`TLHR[ln\hb[pXtdp[m|\V"da]i[c}T_XWf6:,3E!!K?.##G/E-'>.# 0AxEF@\MC9J>6H>2HZ@iHFMca`:0*57@AF@=KVm卹۽ƿ|xtoml|gelh{~q]Va⛠ƸݠϾ°¾z:/312HV0-=80;4nO:B:IJ@GLT`Z2/\KSUTNWp"7-KfG%9IUTg78e/+DgD==<4966;;72.137FGHEBBAFLMMJINKKMOV}PFMKHMILMLNVTMKKKLMNMKKMONIMTdqjlkg`TLIMGLOPajgcc``hmonor~jtrjNtQMNJMBIOMQUZFGjWQQSHLKKTTNLJLMPUfkhY``]ZPNRXesridvp\Xg~b`Vi"c^pi~zohyqRrX`og7J9(3DFNQ:&#8gWmp=?;39XdL-1/DQOOS^XWXXYVVOOJOl";2ELR55C?AZqAo=3JSPWaeY'JF.&6@D^>~~}}~}}~}~"趭դħ÷Ҵ|qmrBu75255468757569;863575:::2345577317=C:3534=B5,4655463@?7463@::78898677745638:@BBC>AEDCB?<@Cx}ʜ펀덶ɹƳ"ðƣ巕|yQmRZrtpwc^uc^~r}z|kYs{Risy`az}~Lo8BBEFECADIQNKLMKIHLKNZ`PGKKHILLHHORSNJJHJQTIBKNNNLOS^iixjm[SJMOMQLOS]΁hkjopm_aYMNOROONNPT^ZQNQQ\QQRPLMLJNNLJMMMQQXc^b]\]YTRRPTpskr^_Nnwy"|uk~nmv\OYq{qpyGaB06H&ZV8%-6CJN;)$CD4>BXiSGJ/o?ESN64GIGAW|Ѱ˄򊦪ȿ̻òźžûӦ]nRr{lvȯ½WbYFwgK@;sbrc:*JR=PWTVKJF?;@CMGHOIR"n[BDVKKH??=@B@??BEBUjϬͺ׶˘"˵ۮThHRy{uoY[xr{dHi]RPgyiw~ٚ5>DD?AFDB?FKKKLKKJLHJMLKOOLKMNNMMOQMOOMKIFKPYMCJQNOORThHpm^jd\WONPOMNQ]Z]]YakSJTP\b[KNOONTKRSSRTROPTPMOMJMMKPNVSli^dVZZRPQTXkwyvy{ns|e\jwfqjdhm~vQUqwjZShE2@L'TP5#);IKE?CD3'BZVGN^bZKALf]ULII 3QPSX5taRI4=IYfY@5?MOOgϗǽ˽լ^J\ɾ񕮱õJG8FYTOMBuhTL`vaL;X[PJEKSEKQHLQOJ,@"TL55AJNTVCDOP>AGIGBGLQHHG9#'69,-5Q~}}~}~~}~~}~~~"Ųق٭ҳձМ׿ɷ~zbo8178;68641/3588>::5=779@=489859>EI{|ĜkoosdrYa;HDJmu~/:DHA836798?1.89;@979?;:667388=89<::>CBF\¬򅊎╕"ȟֲξ󀜬yTVRqNP}zhcqxoRXdj^pk}xz|yՃC=@CE=@DC@BGLOJLLLGMJLMKLGJLMQQLMILPNONMGLNKSaHCHLMOTYT`xba^Y^YPQPNKRNPPf蔅qCQOPX_fQHGILMHQMNTSNSRQPTRSMNQMPNQOPQQZ^ncVZYRLJMV^oҁesZRoUap"iiru`Ym{ebw~|tXViH.A))+P9#'CTO>=LD:0>FQXYZXLBJLXX\[VT'Jee1253`Y\LRXX[VJ:;NRbüþʰüݯw棲öý»p[r7OINWUGuvt=,@f^QLSQTTba[]o1M$>"ULH63[bf]YF;23(1EGDIKLGIF0@-55<>0E~}}~}}}|||}|}~~~~~"ٶ΂翕״ѭ̣򄎁ʟ~|sl{tG7D;34?x:;@76434548;:8:?>8;>>7422324=56488521078LT2/;677587<@EEB|{428A70739qONWQTh`ML~OOQDETEzw{>VH5428:9;7987><:669:8555467;:8;>?A>?C7;=8@;BC@MͶ"뱻ЩϪècxpRSP[Rzup}zvu}cYas^n]x}zw{faK@@@KD@CBCCGMPOMLLLMPRNNKJIKLQJJILLKMJIPPkuICNNNQPSU`iga`߸OHMUNLMDInnxysqefp}qta^pzxkTCFDMPJPRSTSROPKJOSPJJMMNNRTQSUTSTYeTXWPSV``fwz:fKqɭ[aV{[g^Z[l^hx{ebocvvZSVA0<')*N@+)BefKGKIB8=CMPC?B=AJHOX[dkU+'\lUV4:0MamB8KI=KXE?TbǿƼҸº³ʶ螵̖ݶҧżkTRRGIPWSPAkfUR'AgiVQPWVPQQS\73'.B"[[W;4,30,*D?94$)>HGTKJG?<9::2MP>-~}~}}}~}}}|}||}~~~~"׺ꅅέϭ뺏픨Մ}tacuE$<986===8ro5878::6906<<=:9885-/0459:856939<548>SN856876;;=9=CBA|98>=87-40:eXHM\]OQXMM9=@=DRFS[cG>FdHB74399=:;;:;887;:9;664;:779::;=Aqx>;==>;A@BB@bƃǑıЁ􁂄"޲ljصĵڄϓ~RQQmRcwgmv}]bio{w|mvqwl_[Okndsq|rkADAEAFHJ>{EIMPQRMJFHLNRPMHJKGIGLOPOMGFKGOTLKNRwtNJORPOQQSQWaX[SMSQLNGJFJznvypqjZg]^`ajokrtȻWxxYNAGJOOPQWVUPNLMOOPWQKFONJLQTSSV]WXY[\UVWb]`qzqikELfVXZ^]]ed"zajeZXUUvp}lpZ^]TNGIF(*-\I=/7`fC=04?=9IRF'-/7CFDLULS]sHNBD9MQQKGI5GL&9ET^QQSS,)$(.Z1,'9="HKH0.(.1*(GM##DFFGNYI:;+2AZdTI24J+~~~~~}}~}}}~}}}|}~}}~~~}}~~~"ձֱҊҷƳznjls;2=;8;;:<;u59<==?<963079:6856742324698=779<9977:9997876=;:9;>B9:32,32bZd]]\KWXPBI@?XE?Gk_fBDG`MK:10/9:9677789::86:8975.57:C@kp=DBAIOPPQPONLHKNSONILPNIGHLKLKLHLORNLKNSSQOMTRNOOMLOTTVWhi`VVUKLIIEKIsouhpia_iZTn`Wcp`ck_HFMMSRSWZTOKKMNORWTNNOONMHMJP]XYc^[UVVWYSjܜ{[~qr\evWWZZ`if"dldXVXVV[Uycwh_Zg^_,RQRW--.YF:64>?0)-ADFCGH:(''>SJCDHDDDfjZ.=CB9PN4_i>=DICbkb㘬膜􄝨¶¹ƽȽ䬝ÀѱϾĽՂvsWcDN1HJ<9JG=i;9CLWLQSOJ*(),T0,)B7"HLIB@+..,-/*%&(QI@<;:96..6:7735560/358968;9:97:954546769@:99;7>;=;AAB:045202rf]m\LUUkPR_OOPRNXVc>@;?>;BZ@02/57:;;998867;3:98744/4.5=9CAtqiFQE@>CJQROPPONIHMQLKMMNRMHGKMJGJKKOOOMKIOPLJILQQLNQMONOKMJUZfgaNBHIFKHw}sjmh|hkf[cc_rovge\XPMWdREOPSRTUWWTNJHKOLXVQPNOONGILKXYdriUOJRVQiynƾgrijqUUXXVZbZ"W^dmdXV_`\`Xcrq]c^QSWV\Z,-.0+B:A8"=!-BJRPJ4+88+.9RUD2-0?FBUJSM?/1:.GVIRLMGCxwÏ½̾ǽ󎟰¿Ʊ˪ݑ˽Ķ򑦟­_ddd;WJOIIGRHI=CAPVORYU*-/.,X,,)ND").TPS.0-0164/.+TE3=>/0',xDSyA]''J>~~~~~~}~}}~}|}~}~  ~"ӾߑΩ̴Ȥ޶jpkfeZwP?517:;;;<=7878>A=:9960537/0307810,4769;:?;99768737565975639<4668;7<>788C9:2:;::82669979nnmz}FMD@=?>@Bh⻴ހ"񆓕ᯜҸξHU[\TSS[`ytWX|lbqi[srew|uonmYBB>@CDE>EDHRWROPPOILJI?EMLPTNKGKLILMKQQOOMHIMMMJMMPOLNKMOHIGDGLVYbcNJLHHGFL~nbf_ac\Z`Q^ksXDORTRIJ[XENPRTZ[Y`[MNNVORPWXSRVSPMMKJVOluWOLQPUatø}yUVV[\R]_Zj_eXWbba\RqgvmegtZ[_01-'(+D8DG-B/?UaZLF5.@KB@@HYL5#-HJM]`MLQG15F?3NUYNOKQR͍듅˺ʽ¼ƵȿꍟȽСƊҵ縶uwdn`\[LGHFFDLF/=D\)OQ\++24*QS11XPR"14-KO[2*WS-42.*'B/0:2:?B600MaK0,@I~~~~}}~}}}||}~}~"킆׾Ͽ⸡ڂ߮kokhfaE==<:499:99;:768;>=?>:8855422823998688569<=@:;566966224?;;68896>:5==:7=H46533277yfXVLSCPLTMNWRYf13366802EC=<7>;:=@?;979;>9<5>><865698789dm}{FB::7>DC\w섀׹􁍕"؁ѯԋ҂RZV~h^V__cWqlZXXop{koxqnkkXVA@D>ACEEB@?=DJKRTRPOQSNILJGNMORPNNLLJLNNPUQTOMHJNPGGMVQQPTPONUOIOONUY_KKGFHFJMnl]eVbaaWSakmrISLLLOJM`UQSQSTUVX]VRQQRVSUQVTSTUPMMJKNNo\ONKRT_ibb]_VUWTW]]RWW"cb~Udgc_\{VZcY]mxV]PLR.3,E@GB;8>59Y+377,IJPNLGOM]eR=8>FH,`bT,1_H@GDǘǽļùϭʾ斮żѸïBh333'E>=B&MXJFH`+GGS++.0*OX0-RMI"Q/-K>D_VJE+32-+*A63?>$&]G5"(.59G')~~~}~}}}|}~}~"Ѹҷ厗ƴۼ򼘉׫oopgfcbm4>?:u9;>88:3/=498:686168A@A98448784kr|unG=:=@ACAdǎހ绵􇆄ֿ"҇窪쑒Шtqv`dc_W~[[X\^^apdserxuhjnjC<@=z>DLKJ>=AEGKSNJKRTXPMJSRJOPOSONKEKPJLLPTQRMHPPKHLNSWQOQSPTXTPROQTXlZLFMJNGHQwVXaMOWTVM_qq\RLPLPQJEOZUVWNU\V[SSRQKQOILLQTaUQMILLOHpSMPSUYQqqgcebWT]XUWY]^TXVV"\fryfhaba[W_ffmk]^G9I_aXIDHD<,0CSr46;;5QMQPCK]141GCKOKP++UX7=oYHACMN\edSK>ijͿ˾Ǻ¿ʷ֐ᇙؚżµ굯²rPF775+&?;E',)PJFW(AJY/*,0+P41,GND"@)/H17LXBFd64/0*'B<@76:?><551121<:9BE=9C91/?77:::66;375683=?:<>>=A>;=;:9;?HEFB>-067651bZV?@G?BC=IQ^c/tT@=;=9:=877=?=<=;;52/8B8:9577576=;;2775:9ufkmboG999?@CHEv쉊³"|dw~v`ile]vllZ[XV\ctyvЀzmlka\q>>;9;AAHGAAGQMSNOV]aXOKDIIAKNOSRMHJKICPFGSVULIRLOMNRPVTNNLNPUVRQOPQVkwtogWLMNLLNJhIR_USSKY\_zCl[UNONQTOOQ[^Z\YUWPPNUcMNSPOOKLNVTRKNKJRRoPJJSVZSUwktc`_^YVSV]]aaWVY_W"^ezbfdca\\XVUVYcjiZXbc:)B^`fcZQF>2?\iB@BBCuLB<96Q430-HO\]VMJFAP5;aTSPRSQXVZWXW̔௩»̿䉂ʑӇǼ׭≠D6d70,,PNML'CGJ@W+*W..(,1.,/4,FPY"I).VB=IWH_7410.+'$E*(%&*.2.\UML+31~~}}~}~}~}~}~"ͨ퍔߰ˆԾзrmmkfcZA/6<993598527x99@@84>>@9131330945:>99<56538948656<98668;:8==7<8::;;B<9CBEcVdY12;=866^aAI>EFICDD[\[;[~YH58::9991=?>89:9-,4:?87-367<91;679=sl^e_xG=99?AB:@Kצ򄅆"ѹڀ򊑑ipjxenld_}obZ_]URWznzvyrljj\S@=@>@E*-/0-/-,+.'EKP=D.0+/3+EN24~}~}~}~}~}~"년ҵɾqhnjd`\8*qsxuq;;8/53?<<<=949<;5411264732<>957687678566539895/5368:9866723B==>@@PCRHj;aK6852d[KG@EHNDBOZ3ъX=6:;:82:<>=;:<83897:;=;;<3.27@=:?>84;jcamr}CD>=<8=@6:@N􅋎"܇鼪򌒓退p]WtY]YS_`cWN{UV|zbq~{{s|{z|upmjjl\D8}}y?@BCHHPKQPQPQVZSKIHJIMKPONTOIDJIJKLKKLNPNINMOLFMLNNNJMMMNKIQOQSXkfugceMNHD|j`SU\bUJ^`vnTFKPQQMQSUSQQQPPTTTUTZXUXPHHMX[TRPNN[ҠorZSPMRUOZkXȞ^^_USVagi_XVV"]dbX]fdc`_`_XVSuo|[WW^Y?2J]YfvzbEBPLKV4<@8YU;+,'$J2/OHDE98+AMRE:1HIBMVVFDLEGVjǼ˾ƷȼȺЀȦ®酜WTd243USOGIIOQP.[1'+,-,,*'>N\YX"23-+F;H.1-(&+0-()%EA>7.7Z.&(41LJOU~}~~~}~}~~~}~}~"Աը薠臂̤ȼ~mgjiec6297owv;;75:>;9;<;;8983634211/0.0;:8226675161400154496455799435878:@<=>?elxbQUk@U:843_KHJ>@G]GLQK8HuWE/;6<94:<=A;8<:1?=<8?:;985428=A?9<:7;~d`e}vBC;6:;<>8CNNĩ굯ܺ"錙ꄆ庫戏р{~^itmiI_VSgMPT^v}{ux~vz}uiehjg69B>v|w99@FNPNNSSQTTXULKFJIDDGKLNTNKFHIFKLKMFIHLNPKGLJKLILNNMMMOLNOVSSWhv|wpizSOHC|qkXWbu\JcYKnsmDPMSROQSSSRQRRQ[TTNTUWTSQMCMT[[PPQPSiiTLMPSTNXcW]VVVdi^WVU"\ecX`iaYX]\\QSzqWVVZU9;`zspvwYJ[dM7:O[UBEBGMJ>%O.+>;3 $3>KQP?8FJDPXVPNSQOQトƶſξƽ˽Ĩƥţ…ͷ宩VWl58/MHH@9ARQFSSQN&170-'&C>PKM"372-E@O02+ '2-F<''JD;7HS)$$.1VOIO~~~}~}}}~~}~}~~}~}~"臌嬏Ÿꀵȶ΁ۻнtgflfZR}o4556uxu=>:>7:9><::688963431/3332695.276776664520.2467760771466>77347=;AmYPZn6L<,92hd\HIPD:5748utx;B?<79:EJPIKNUTQSRTSQKGKMJFKKLNROLGIKKKLNMKHNNNKHFJMMMHMNKLOMOJMNQRTZw}|x|OrSBPKwikb\cf\c]ErzMHRQTRRRMNOQOQQSSMQNT]QPWNMJRUXRNPKKà^fWRKNQSWVXci{]VSi]mpmXTXTU"bdWdn\SQ^XVRXSPTT>Vi>?@@yZAVrZ7/BNF?C9KFs\?@F)M<23-7CNJAGDFCOlD3]M*1+-NT"]55.TH[32$)5,?5&()QNLa[C#$(RSMGB~~}}~}}}~~}~}~~}~}~ "ԢҾάշһ{ojgjb[vOk144iqty|A9;4889=8748:=:932,41603464335:7996788777658;9573445.5<95116;>F}i7=W<555988^cWVFFMCFKN]];E`V`~99=ECDI>:;9;8334:745:945@A:828997889:wuur=@@;7?;=??@GXԀ怂㤈͸"ꍔǂ潮y]_]alekOgUvWrevqt}xplmg\Kss9AA{y{~HIOKMNQVQQPRSSMIJPMOLLGOQOMLKLOKNOLLOSSRQMIOTQNRMIKLNMMMOPTez}wKDJHKPUe^d\^`bdtJXzq_\WZ_XUURPQRWQINQXTPOTTRQXWQQLQXPNOQ_cWOMTPRVSO`iq]Z\u`kko{[`a]Uci[QZVSS|a8:79B>]?$7a/D>IMGKP?2ah90JMQD7;ELNCHS\[]VPR[eeWRVZ]؏˷ͨ¢ϔռվR{4.-PLLL@<@CHHFC=MmbSKX42/.S"W_\3bQ^3,&<8J]bL?#&%TWN^TCJ'-TK:;C~~}}~~~}~~}~~}~}}"ߥDŽȃ޴ukjhhfWKBj4734gs7;BB;33:::94569;<9143115222/3111257:789<:99;::87740657567:=9577:@Iu\-B66=E9523299453okP^sA@@:8;@?C?>DMdͿʪĦ򋙗"퐓Ŋߴ鼥cakfZ]eanK~SQwhXr||trojgR^@h9=?@w@CINNJLRTSRLNPRW[PDLTQNPJHMNNKLMOMNNPSTTRPRPPONOQNPPROOSNKMMTYwtW|ro>HSJNP`UFl`YQe\bLo+pnSkZd~`TOOHQXPQKNQTSPQRUQRYhSPJIJPOLOO}edZOMQTSXUS^iq`_d;{zfpTuiuau^edaVghZW[TWywX\|{?C>5:?;U07@-(MOIHYcMJn?4HEOV[HKQZZ]Z^TYV_`]]btڅڄ񂅉ƷɴŔڤ·ǭǀ岈ֵ½Ʒľl4*+_^UOM86JV-K9+:@UDJLX20--'"TEIRb[a62,F<@GIG?(''+L8>A9F+2J954=~~~}~}}~~}~~~}~}~"ޭہҳኀ֦݁slkdd`@B97;9rsv98;=78><;9;8749BZB-9<3514232/1-*00878889>98;<8985666:@7;;?C86667?HgYyRB::84447:5_XKJJAGHSPX:LLiO89BUB<5>/398;==>987+,7;9:9:55969:>:69rj`Ym@?=@;99EBA7BS[ղކк쇑"쏑ۼі܅؀b_YWcazYLqWT`ep\vtzZYS|sqmljӝJ=8962>?YE63:65565:21/17:>>8:;93:<<<:702:=@9;==>;7880=DJf}n2577836;9=:46647:86=985346=B?:85`KQlA@E@@??9>DFA?HRN߅:ڀ߻ۉ霘ӳ螙Һ开dbTbtT\W]XbkzipzSQppljif\>{{;?ACIITPMNWQONKHFRWyaJGQNNNLJJGHGKNLLQRPQKKMMIPRSSRSONPOSOOPRROKNSOT`qKINONJR\]yZTXttfpx:}JLUOYQQRJQSTZQSQQQVNQMIJRPQPOKFPWVRTPinwgaVRMPU]UZ^fX~`rXmr^ihhi_Y"mhYgh_k`WSmvZ[T=:(1Bk:RSOIS.+&HOW2/V]sqV-*;TT:;HISY(KH%LUTQOMWXY[hȼ܄Ү£ġݮ̈́𦯧ŽäȈJ^]28GL[CMaL ~~~}}~~}}}~}~}}~}~}~}~~"Ч潰ڌȹ۲Ƹиjbmkacx=bzr99lnt>9<678;C?><;964=8:86rh553.41//340116:;79;454175582569=::839658>:22>:8/,2.6::@C?95878;8;B:9aL\t?D@:;:;A@99FM^ĢꮁԵ"ߜπ²h]gdVyzmYavgovujiihlrJtvp;?|xCFQNOORUTQPNLGHPMPLENNLGJCCDIMKKKMNNMNMGHJKNIIONOKNPOOMOTTQOGPPJX[fzZNFGJIJPP`YVKqZMT\hgs~DnHMMSPTOSPJS^SMNQPPGIPKMPQXa\SPRLGLOR_TXeh\RQKHORLNX`o͝tRmtd]d`db\Z"nj]`esXngbYUOSZZVbmt~vM.'KTEHNUqB7(DCD?71?QRE.(;SY>9?CAA<5678:<016ss428B=gje4/19586658766755:?695799<><9AB:/279=C?A575/:8789;55ibQDBKUJKTu=X[>4/78;;54=1:;92698644.36@<=9<;;997:9<=39m`aj|ADG>59;>?BEAPL!GORWOIHGT^qxk΁胊䀅ĴƽíئҸ唺βºϼwP]YEpr}G6,@JSJ>532F:N`0(+24."I57N\84Gjj0BI@M;O1,+1-Q[T('"K=EH:4~~~~}}~}}~}}}~}~}~}~}~~}}~}}~~~~~~~ ~~"́ጻ乒ȵdžyrejhc`Ryde457559<==899=;566796443r\_dshfb32;5668764865822631768>@4057=<935989?7.059>;9>:42:6YHE=FD9WbaD>A914762-667>?=42597/5367=;;9;>=:<==<<;9:kWwnrw@>=677=CKONJNQS\^SOKLKLQROLIHIOHJLONMKMJHKGKOMKLJLVZNIJKUIVPILOPTZNDJMMOONOMKKQP`MH]_djk~d\YRJHKOMHQNP^^TNKLPNEOPRRTQRSSSRPOSTPUWʻXUSHIMQSPU[p򬰎ptzvux{e~\W}xogsYUSXXVWWTYSYgkxF@9UaRPXE05IV-$AGEOaihSBd@"BUC5HSTYK IYfh_RSWV]wx郈ÿºӝ½óȝϯٻv]ZVItwN?48B?@B>/.cjSS-%Dclc"N;BOTfM,OR3QO(GRX0)%*,*-,&%%H)>W<>~~~}~}~}}~}~}~~~~~~~~~~"h켩Ӂ⨀ǙӂômkifkgWmTyvi766758=D96::;<>=<8675523623dmiffiglaj2239;8:<9:56210779::785080>8886;6@A=9307:<<=:<9999<:IQ^;7741940-77;?~:47878606568:<6:>989<Docjmlo==9<319=?@DFOfɭͶ6ӹӼ횯󆃂ֻܾ䊍シX]d}fv|yu^f]{asWVSRUUVvnqsqmmeXNm|BA??>BITKHKNU]eZPGGKIIHMPLJHIFEHJJKNTVONJMMLILIKNSSUNELNdRMJGOSaeWPIJPROPSNOPRUYeMHZ^bk˿USSPHJGIGOPRUŶQLLILNNOURPRRWQPSQOMRRVNNWnZUPRGDNSSSW`nưpht]e"^^fqrcaqw\\ZWUSOze.:Ce}]TnT;W`GB:&=DIX:Aw]9?EBH(XLQ*+&#'+3iZRV[XSQjڂ󃅄ղѺۑʾƹ¸¼ދ񔣳ԻyT^_TOJ`MMN^MC=J>2ErCG]-NH]3",/`iLPC&=C=037;F=;=976998iP@A>GRXxH>=:779835673=D@55:6799599:<7569973=<@;==sYTh[_r;9<@;68;ABADMYƽӻ"乇ɑW^j{gsvenp[^p~td~~crUSRSTzemusqnjlVx|=@?@?@CLPJKJKTVTQPJIKHIJKORLOJHHHKGDMQNPELNMOKIHNKOROKOOS]PKKMLQWZTGJPT^QPVQOPRPMdOU[_k~mWUTPLMMLNNQR]m^NOOHKOSTWTSWRPNPPOIPQQNPQ歓YUURQJLQXWW[mqƢX_~h"ffdg^d``q[~f``YZYVRRd{`3AL^m^QiZ1=F<9.!2ABMkB:C]LjQI/JLF#%'P()Y[SVX^QEN쉞ŹǼĶñᯗꂗƿ쮞񅊏rTUT/VMTTS]kWI>P[E&P`CpA`DH]"--05/MA"X8=KX[/\DA6-G0-0,%%CNN6Nk/~~~~~~}}}~}~}~}~}~~~~"һ棻߻qskkjc\Y\pfpxvul4697868859:;>9:512366510YaS[je^d^a753689=88;?><786268658875442DE<9>;889?366:>@<9676:??9lG>D?FU5;A==<6;;669759;B<66=:7>AG>JH095>777=@C658868:<>:;89_6".+-+,E9=d^Yi1-''XNTMR166,"2+E_SGAG~~~~~~~~~~~}~}~}~~}}}~}~~}~~}~ "̱ڌ픢덌˺dpmlke^xfoxsrqno76622488:=B957451).35831`ZXbT`bffbi427679:<=<:87589;=<<@679<8<98;9;9:<::7:39888787:@B<<6^>A=JS7wyfw;487::78;2678<>9492453<=9:@<:6554169:6.bgQ\eHVNDG~<9327:9=AEDINI̶ݠɸӐ"꽫뽑T\mz}]|`eYuwgpVRNtxz\nplmmi}s{||yxEKRMMNONPTRKJLHJLKJIMSLKJKOIHKLOSRONMKLMNPPQUHHMNO\YRPORSVUQOINNWROPQQNQZZSWJ|ZYSie԰pXSOTVQPSJTRSUTNLRMMRIT[TRRMLJKLINQVWRJutsrsVSKHKPPRU`a_hxz}uscpvalh"f`ca]|RPfzV]]WS9N\[IGZ[7PoTUR;@c@'471EEcIQ:eFKN'&'RTkPS[GIM֒Ǻ½ƴؽ±²µۗҽㆢDBG`WULO8:9=,2K2YA>OD%.[@"70-+&F30NOHNL%&CMDRf\.4.+%94EOHDBJ~~~~~~~~~~}~}~}~}~}}~~}~~}~"ñ݄ԃƹhjkkh_R|jozz<7863787518:8<@>5756753477:92WV`cc]`aide9=757:=>>;=<878758:;88778>@:68<6:>667639:6:76;<:?>A7276544595dhs|mXSOm|9@<77=;:;>EDGK[ϊ"ƹȢ憈 j|Z]_|Uwpd^ftr\URijjjkifcxtt;8=>?EMQMIORPU]VLMFILOTQMMOLH~|NTLIKMMNRPPPNNOMKLMOONKKJTc_MPMPSRSLMLMMNOOKPRNOUTVPL{ahp_sǰ^pZVU`ZPQXQQRMMKJNWYPPOU_TKOPVKIPMNORRRMSVPRNPPNLQ_]ejuvvoei{tmnvy_b^"a^d]Yx}sd}WVYXWUaAUswin]0=2\f[TJ0DCO#++04FHDPRAQR*+QOQV_[NGKD򙝡ᇅžŴƺβ޿ċ󁍋Რ񀐖MB@PZK9BF90*+6JVEAHMM73S?"<4,+'J=7BM^+),+,)DFMOLKV5~~~~~~~~~}~}~}~~}}}~}~"򃉉ਔիɯδmpljjhYxOoppzw6758:;997699:7;8776731731554]eaddgcbac]24:=979::=6A<;5:9759;<989:=@9/630;63039785533347936755[ZGY]?=oho9149=71288=1481587;;8689>HKQ6+FW"/0,+OG<<@=UbWI!,&cIP(&$(-*(R4gRB\O~~~~~~~~}~}~}~~~}}}~}~}}~~~"ʻᬇýpngfgheWgtjlrg36l78??58>9;67<;:653/44553//a_bff`bchcd4746989756.9667:7738;97884:985568;:74,57<44/1/:625279dNYQ>cC9`a?956874323785.4<7=8;374;;8:965:777<865965rlZQMKRas}E@78:5A>=9;AR[g馷ֵԲȼ"࿯Ʃ݌Ї¹΀cȩrUbť~kld\_oemikkg`Upo|~@?wAHVVJMSORMLQPNKJIGKKJGCCH}su}}DJHIIJLKIKCNNLMMHMMOONNOMKTQOOONMPQPOGLFHILJLGKJIOORT}hTseXPJKPPNKKRUUQKPTOSQSHNRaaTRPMNTPNGORSPQORfVMOOJVTSUOUsuƒꏌx|t"UZZZ~ufvnbWRZ_VN^noxC~bFFQYu}S4Td53QIMNJJSRF绾˼˼ȷùƽشׁ݄ϺߕWNPYP`xoF.2IWPMKLS[@4EQ"(+,+PK@Lz~~}~~}~}~}~~}}~}~}}~~ ~~"޾ܮůǽpmkifg`ID}{xoqp6m479A=::9:97898872+1598<<10OYh`]]elcee1099:7858<<679:;=7734479;89731657<:0429=5401/.97/3697oP_R>PmA7967567:;84434735:75;237688826888:=>99736889uqeQTOV_hx>;879:BJZTPRONNLMNJMNJDHJLLKIFJ~}syFGKHIHJJMPOONNQONLMKMNMOPNJMNPSQKNLQLCJLNMFJKFOPSQ~aKmseZTQJKMQSOJPPQTQQWRPTSPQPRVXMKPPORWWMMRPQSVXVPNMNPTWSTVZnuwʍh_Wx&WSW^ZrpfjTYgyf{]}qkQZVKZtp^[SWnjB:_~MK\9;`L@KWLQY0/SNLCBPb\Oԗļǽ¿ӳ잞ׄôn]XptJ?/?;IRVaTUWfZ.TV"$%+/gTIWYJ==>,6#H887NKNE:L5?KQJ;=9~~}~}~}~}~}~}~~~"ՔľͿȴspolhgdYh7stno9;844:3:8<770856679=:.5371@m>41159872446206549Bp\bADLowq:7532426665.568466:652/478474878;99985.5;7=?>EQUUPPOPTQOLJIKIGKJIHIH}={BHQIEIJKKNmSDMORNOGMNOOKJMPKNIJGc^QMKMOMQMOQNEHPNOUZXV^TNIKOOPNPSPSUUOQPQPPQQQPTRQINMOTSTQPOJOVSYf`NeVKMNQWUWVSXlpqɋchmn^STSV\ZXUU]Wzcco\U]ic|mwffa?1BS\VXY`9wJ=V:72mE88=;86/34149>8950587;T802417:8543-70-.47EtGbN8Zjll886138;72043456178/796468448485:97988639<9x8bODFVT[kyx>968;@>A?85?GN{;睫󈆈ħ胆˄ѽEi[mJH`fkv`RPmmf_~ilmpkjf[Ynw{<=;?==@FMUKINOKMLINJKJKMKFy{x}|ECMOKJNJMNRSDKSONPLNONNNMIMMILMNSvTJJKJORMLMNKQLMNPUiukU~_WQHLPROJNSQQRSKPMHPQSUTQNPONJEORRVSQPPTTRbNSMLNQYV^\QQ]emxedfhdQUVSTZ`cX}p{b\_ZrJc`ewmK<, #&JYVRVPKsHqDB/&)PG@A<-$9NYVFAHLRQBETSY䜫ӫ⁈úñĹɽĸƱ݋끕ǽ񐮾iDHaFD?;KPLNDALJ~~~~}}}~}~}~}~}~}~}~~~~~"ϩȜ羧‹Ǿiknkh_Dcur879pn78<<>>8269;;705431308353999>=58?D>744575-135/9:;9565297865;;867884+215468:@jO]>9ni:`97557665:42759749<989=6663<302==;75:;647:7x8\bYRQRXwn>668:zA?ELQOJGKNNMLJMLKJKHJGIIOSx~suLRMKLLLPW[KFMLJMNLNOPLOMLMLNLJMJNLHLMPNKLONJPNNMPTVdkblaWQPRNJLQPPPMSSPQOOQR[VSPIONNDGNRSSTROPQQM]VMMNOR^`aVV[diuc`gedciXUT^ZSSVah"_wfytoxtY_cg\Y|{q[\yd1%&5We_^N>3)6Vk6+&UQ@7DE;EYaZND:>GQTNRZB㒁̿ȾƮžȀ¾ݾƸŮñ݁ƭ昫z|qGN^@CB@<=-GFM+U)-0,*-5;"3N73I@883$FY24:1C2TP2@I=+"9JYjSBDC~~ ~~~}}}~~~}}~}~}~}~}~}~}~~~~"Ѷ߃ͣۻѺafhmhb_vahj8stttk7::><9668<:353/0/2068657nfXSU`jhiffcX9A=34<::859=<81512-2338:<9638785476547215;<1343568A>I~`e^;tllkl79689?77578;:4387<<<>8=76?9647C?67:C9-66runa`LUYX]l~<=625;:=GK?>@Dg"Ѽîΰ¼dht}ffvkURSgtSt]jllfc`zz|?@FMTRKGKMPMHLLJKIHDHHHJO~{x~Q^VIFMLLKIJILMJNJLIKJMROMMMNSQPHHLKKJMLKLOSOQRNMNOY^seTRRSQROPPSQQRQSTNTTSYU\QNPNQJCQUSSRWSKPNfbNIKPPP[`RVW_}bgdc_f\VVXWV\`^WQVbn"kar`hfgp_ez|64:ELVew==]FDC=HJ0,/og9>OKKacVNG:=P.ZQOSQ»ºƾûƿųηȀtDKUpACC=90*),+-../.(-7A"=9XNDFCO8*Ty;,3C42XjIOboYMDIOTKCDA~~}~}~}~}~}~}}~~~~~"ϳ㱁¾۽ѿfegig`MoG8145liiheq98756511+5965441njaW]Wbffbdf4=?:7:7233944088332277;;79563848647732:47?95.+06<>H>L`oGDststn578:<;875:881764864735544?877?::38=D:596l[\QZRKYX[zvy:53369:;D>?@EITb􃅆"н⿢IjxVhnm`~Y_vI_~hllhgaWpNI??A}|xvCKTSOLILPOPM5DHJHDAHJywl{zDOXMFJJGFHMGIFMRMMNMPPQMHMLMMQKMN:LNRINTQSQNMNQQYiƒxsijQPQRUUPQQWQQKTZTSPMNNPNMKQNOMMMR]YURTOUNJLMNPRUQUTQ^u~dffh][UV]XXXWVXUYbklj_yjkssfbhXf_iaq`gu127AJ4|FJF8KLQF>U/Q\:c-%BEMdZEU\ECWa`]ZYb敜޽ၣȻýŮՂŹoBSQeBFF:61-.++,,(*&-8@"><7XFIST4+4C=*.4# DRR.?Ft^L>7B?8660218;23<7629545gqi`Te5qocfee:AEC5573=C286741454:9>9528<:9616568<75,1248@DLH{ES[9uzvwr<57:<:16.67@:73:749986447:?86>:62:;C;652gbXRYWi\^]yuv:74124:<>@A@CHSZyű¨牓ʩ߀}_limkf}Wa~blZruslknlfZeSI@?Ayo>?CJUSTLFDLKLKNPLJHCIHHEIMz?z͹NPSTJILISXGLMPMLRQNOLONLIMMLNOMPNNPLGMRPRQQNLP]ixXtwƷXOQTZYLNLQQXSRTZPKPQSQLLOQUOLPMQTVSXUSQLPNKKJKVTSSTSU^ty|bdhb_[U`\XWQQVWXej"mojWvwrqouiapmjj|ryBCBJ1@@ELHd6@LKMR*=BaU*.[WVSa]^]^kꏀżƻ׀厬ĶĽǻÝ܏Ⅱϸ󛕍κ¿뙶¾dC[R`GFD=6[,-,,,(#&)0;@"AC;.IL]X<.8TZK3/$/@HP6EJIDiP=9AMKL~~}~}~}~~~}~}~"Ёݺӹƴиqjeef^PZM96;qhpnji99@@?9;86887895426645536jjkgaRQcgefadf{z5>BA;59;HB389;74818;<<848744:44457455768694658@WHzsZQMnpsw427/9914488:8869548083585<<93066719?<>9:qYOXWUZXZV`jo87:689879=G@BHPWi"Ӫϻᇏ¸uWkulebr\OuZcor|~dljihg[mTJACw{~}z@EPTSNPKINOLLKGJG@AHKGFMyv~|z{uưPSUQLFLObTBGMTNKQNQRPQONTNDCOMMNPSOPLNNQOOKNQPXk}TOSMUWLKLPOQQQPRJHNHROMPLQUQNIKOUOQVZ]TSONPMNPPONQXSVdwzdgiV_XXZTRW\gk"iljZswzx_ljhҬ:IN0>E:6AyP/7Ze[PE7AMD-#,C@L]9G696CQZWQU^䊣Ղ釧ʻϹðѹ£͟ӱڰ󓕔ܺۿꗹøfXQ\ECG{ZO(..15-G*-3;?"CF6'OMFFJ>)EeTE9,8HFDkJBFRMLV~~~~}~~~}~}~~}~}~"Mֺ̰̽ͪefcdc[GIz6q{vqrnhu87;>=944697:7620422234kjj^]Yjg6]hm]u|v>CED6:6<=:68;86346<:8833/679;49>4443/4*766<:31ASlnk~NG|ufl:/26877.54:;7:8;7658640882:>82558738:B>:6nfYVQNWQX\SZgn6769:@>:9@@>>BITiͿүƱɸ儑׷Rn`eZkqi|zbZ_xwmdmkiieT`@||yz{AFPVTMIKLMGKJKIEHEGJGDFIKz}t=p~ĩW^\UGIGOPKCHPQMGJNUPMNLNOQLOUNOSMKLMLMDOMGLOP[^st~usbSRSRQQJOMQPKQOQNLLONQOQPHPTQLMLPSQRTe[USOOLMORPPRXVUX_n{fgUZXRTW^ip"ngbVUxX~|q|^njb9]iST=%?I];IDCED@vVc,3MUZT?9T藥؊ŭŶƁӼñد刑玚¶吶|huU@LpBEyTMYZ\350&*,4>F"H?7$(K9>T*.1LGI2(8FMaBKC@|d>BQOLLZ~~~~~}}~}~}~}~~}~}~"ϲǒ깏qebffbV{Cuofiguwor8:9@C;98999=:9543/)*4631-4jg]X^`hje`klmsD9;;=<=39537665776664.243>835897352525:9585=AJ_ڌYoln673.72552966978::98796:8>:49::7;@D>=?A>?GIVc"ݾ񶤬ۻJc||h`snnmoqkg_[xuu|sl~@CJWaQLKLKFHJMKJID>?GJHGDI~{yjTVc\RNLKLOFKKKLMLKNMHJNMION.GTSMJMMLKONQNNMJGORYpo}ZWTPUPQOOVRPOLPpOQSPXWWSPQRUNOQWTOTTZbTULMJMOPVSUX^X[`pv\ZTZYWW^inia^t{[wypjcwS5bkelQ?IF41QRd7JJHIA>MOB@2cypMfaUQB6򁍣ڻ񅍍˾ˀƴƸؠ¼ቲzXIEfGqSPffe543,$,9FL"IB3C>@:8J.?-9>:.&?SNZzE@}wT6AIAHP+~~~~}~}~~~}|}~}~"ޅڶלifgff`Qm?uk`hhsuqv>===>>89<;<;92000//25332/\iY2/_cgfeaaoeq|68BHy99@<677354544633232358299?98:347151869100=:dW}Tku79:6431*8-32688734?6688:<;=45776<;892:5::7`qh_V\XTROVh]q785;:A<AHKP\l麢􅋋"۽΃ƪuVWhmUYYnimpmkf\Wy}{|wCIRVTOJKNKFEHJKKIEBFGGHGD~DC}{}~}SU``JFLLIKMIJJKKNQLNNLLMLJFONRMKOMORNRJLJMLPUaswꃦ`WUPPQPIRLQQPOOPNKRLNPQVZU]SOPSLOQRWRSNSTTLLIMLSSTVWWW_iwt|uyW{tW[WW`fe"ca^{Vvin||o}ʵ~oTTRCTg\EKY].-NVi@?,LJJNOU`f,-JF>dpZyXXSSZaۋ􁓬ºĿɂƻĹþ̀ɷȹŸꙻ󈙦ڽ˿ʴxF8Cp=^VEG3JOZ300/>DE"?>3KFLMAJ.I'0392!5NDRs}zqN=;8:8411100044552cd`Zjs`ejldsjq{>?@x849;>697168341,2/.464486@97/6<8956735865.9DFN[_7_Yjp=;8918266:<9:66631=@77389:538137527:=87B9.1lk^[TYLNNjiri56;:=<9<>;>842255311145652_ZXf{@n4`]fktuxzG?<59:=LW>778825442+658-55566713=4466<675:65:AHIECs[=_tz?=:67::6@;>:854724::119<85452326<37;:89:70\ccY.X[OK]]knp<8999?CFBA>?AHPN[pÖ㷴ɿꂉ"ϼɥlXbc[t^e`lkrje^KAnxzvFNUSSTQSUPSKFHIJKIGECFECBCqjzL=;";gU+27;oSQMOEA<<,DM1B{umd{j13,&,~~~}~}~}~}~}~}~}~"ɳ¼ٳݿkjnjgj<6pplhlqigi;@C<:8::;:;94234446583351`XFJbhibdbkfhl:;=|@GB;1778FOG83564037;466;475040221744766347668;BHFBCR8\nt>963<:;=>::99788349469<;8957599867<:899973giqV\YZR[]_bm7337:9=@@BC@ADGIKVoƤ透"怍ީx~v_suh`]rh|ziglkgxQEvqrpv}}MY]NJJORTPSRIHJIJIHFFBCC?v_f|~}yzs~|MUYfueTHLIHU\VJGLONLKKNMOMNKSPLQMNONPKKMMMJJONOST\of^bn^`URQWTSRRRVUURPPMPQLNRRRQPKTRQSQNPWUTVUROGz{wOMMQSRWXTX`]`egkjl{xSgRkWfid^["biYrwd`Sd]7FkZ-!EVFOVy;GKOP^YR_87[IIb[Ec@Mcukdbvİȴк¾;ڦ㊘͠ᐦ}UV'JFUNII8!:ZJP8@?>A;"pXHOh894cd^eVABA2LS2@xtj`i|93)P^~~~}~}~~~}~}~}~"Ȫꛗʃニ⽓ตuhhiffN8iqmnhefqw9?F?<;:58<>?5785470552578656638=13541686743386<@HKCC>]:[s=62;85<:<@=>;257358677997764/8:823?<89884`emdfeMUHP\[a5237668>BECEBCKKHDO]w惏"Շƀ܅۲ڀmgxxkc\\r\f_bhp_VywdhhikjhXJ~rlpnoo~ER_`LHKKNNPTQNLIJKGHEEB@C~_Wrsp}}|zPV[`iXURNFILJNGJMLJMGHJJOQOMNOPMNTLMNOMNNMNLMNPPTZmla_UbgUOVTSWPQUWZVOQQNPRPPPRRMJLPKPUQIKYWTVTRKx{rNMLLMNQV[]^_WYcda_ozvRV~ZbdZW"aTdW\VWV{z^W4-?@7HKG()fP;>;ARbdY5?>Z@2EB60LjkndGTøöʺĻ仭ŚچwS.*NDJHIWOFIMFS:>?u:4"g7)4MU)8Yno51SKUH1/>;[a@?AVrviXIOL~~~~~~~~~}~}~}~}~"츨􎛝Űͷ슨okghf`K;q|qdcdnqp8=HM;464=>;85403574666735lP@G`e^_]fgvlealt@B?AD=<;77;<<85988895:7<:3533346456223874-.3=866:>BBDg^Ymw=:85/32=7:12;97705736676:65788694576:;:>36kgicX][ROXY]b3.426<:AB@BE?HIHIFNXp܆ɿ"݄ڀгģπ~j{ݥXl`qhtq}~_|Rq|^qiikihaxMItjsw{|GYkfMHLINNNPNMKIEHHGDCDBGsUWuwhu|^h`[VVTRJHMLIKHKKJIJFLMTUJIHIKLKHMNKNMNNMILMRNMMPVX[oyx]dZROTSZOQIGRRRTPQRPSQQSWOJOSPLRQPPRUTU_NKz}wqKJOLLOPV[Yb]R[`ckirygTR_["PbhnZoVVY[~gShNJ5-9?2E6,0FIU?=2DNHCAV:{V@$BGK5PaZWLp˖הŲǻǽĸŴʴ҂ʋtGQ-,FDHLS\RAF?Nh76c_V"OLB&:;-?fa0/TZ[N01F7E@-OcjqVKRK~~~~~~~~~~~~}~}~}}}~}~~~"zÉ򗞓㏃UffidcPh>5iqn]_[_hk7@PH=36699775.00856556444aN=R\Yaoihehli14:==89B=8;::7=;;<;6:;9976762977568447758988,04=5838>@E>Cohjtt>5/-436:;98789555427,447;663679616389:;7fhij`2WYTST_Z__0/04::BC?@@?Pc4-B>JPT4DML=88KB>LN*'F*,I;GG6+2FIQo`QQO~~~~~~~~~~}~}~}~}~}~}~~"ç֎ܺÄ^ige_\K;3gkjiTZW36;AEE=<997453//0.04686443dV@I]T__bk/13gf34>CswC=;=HC<9:@C;485496345996:9964988897673.:77554=G{|Zcg7<824404;557;96645136.54858:569656555=99:`ffji0`cYZX[\]d3.088:=?ACB@@@~EISVe¾һ"ϵѾ¬Jhxyg{ki}v^Xrrhc[ie[lpgrohpolf`R>Bwqpivy?GWjnfSPPSNJMKFFJJIHHICgQYifnpw{36@zyAFRb\VQQcWPMMPSLGKFDNMKJKNPNQOQMKNKLONMMKJLNGLNMMVaƻq]eYQPPKNUQQPPQPQPPLQZQVRQMTVLOQKNQQOOVSTQysyx<~TNKLOOPVVZhf[\_np{y~bY`Vk|utTySwmwPL9J2?X?B24>EG@+"9LFGG8-8QgV98JUKEBDBICGKQ]W˰偈"̔φǿw_X^q_h}}}wi_oOUvnfuntwpnjjjfY|L:?{up}?HWkfWOFKOQLKRKHJKMJGFEGJC|\XYkgasr96:8;xN^^[PN\[PNOMRiLHDHIQJLLHMM2KNPPLHKHQMNPMMPKLJMMOTUdfwXQZOMROKQMOOPKQMPJOQRlMNQRNQQJJORRPUVUorwzx|FJLNOQTYY][g_gimtux뮇U^eU»x]jS\UB48ANDnFOH==>;B<,I^Q=WG%/IXMA>MM~JNя􀆣ƾļѦĀŽŵثۂ¸񙴫܃iCIEEGHCW^MRS,14-LLb"xvPn]pbACO<8?=D,FbKCS_Ybjbc5c25im17?n=DB:2221773DYC=9178648488^766321248848;54445558??>s{qG^cq{:68<:79:665776798<455237:997656:8?699diadkad^`ZaeZ\U_l11:69;>9>@G|INSGI쁉熈޾Ѐw{ism}rs~znieZ`zakyj\bsvy~mkjfdWUF|tqzvsuuz?FUohTNONLOOPPKJHIIJHEEIPQz]S_skpzux?r8=~FQeǟUf_SLMNLOQOUfUSPK=MFLNMMNOPMLKMMKMLJNMMPQNQWYe[wNOQTSQSQOPQTRQQQLQQURLMORSeOPURTLTZrq{{~yKNQNRQQLTUVZ_osui}T[fVpqΖmgVbVLTTJIdnORH84@AC@8ShQ-6+!*GRF7?IB:?LRºǴ¶̅ͯǀͼ̴Ϭ׽򝩘jEGFIB@HQ\PV\.393\IX"xIKiI}zIZfL@;DM,MCPYYWZ_kmg6eTQ*~~~~~~~~}~} ~}~~}}~~~}}~}~}~}}}~~~~"oʘıumiece]u7=i]^ouolbe52=DE9700344464<301430028f_FIWX]gpjd^hf7mtf?>EE:9786789763102-446665:36/066>;;8866166688tpS\afeh=7``bhaS\\e20379:?79;;>AxzCHKM`/Ṯ뺐χ刍d~wsuk|ogru}j|~x{xsmnmjiieZF?ull}}ttqwAESmpRMHJMLMPSJJEFHJHFFJTqNN`hnx|}u?VlSf`YQNMMPPPNQQQ`aOMILKKLNMMLMNOLMKMMLGNMOJMOKRTXdƫ_h}zHGOSQR[QOPRTRQRQMQRRTSPQUPRTSQSQURPzyxHDLKMOQONGNRSVUhqstznYTz|"puq}n]\XVXWaieUh8VVMO^]N<1B[T@5Wi^GcB<*HIK@LRKHILTi􅛝¿ļνǽ򪪴䈏Ƹ晤Ż񏚕ze>HFHFFLPVNKONU98VA>"j?GJ}jTcIem.)')P/+EGPTYY`qy579fU.~~~~~~~~}~}~}}}~~}}~}~}~~}~}}}~ ~~"دİvkfd__PH/:fS^ospiiih5AG=57635815544430131002\UKN^Y_hqna]Wkkwono@st;A<::70498756?:=:79677889884086005677:6144396;488bnmE_mqp.:<8;?=>155468:>;:957927;:379=55176jlPQ_a2d:4`hifc^^_e20687>:705:@>}wBDMLJrꄁע"琯聈hztlt}ieZsztvlinmjggedTd@?vjs}xww~CTk_OLLLNNJNMIFJLHFHHFEEeSTdglr~|s~]R^[USNHLOMMNORMQONNKLLMMMKMLLOONNNMNMNLJMLKOMSSZ\cu?MQPSVURHNQQPQPPLKQPRVKLPPLSU^ROQWQzt=q?@JGNNNRNMJNRVSsr}shzfRQer"onkjnkce_UVWW[Yajlj`XZe3LWZPB=EG7=`U1,SomjIJCCDv\AC0I]0-+*Q01F>IX]/04<;:=<2/~~~~~~~}~}~}}~}~}~}~~}~}}}~~"荗øóĪ̭~rigieZ}7*9b\]npfilhj3=D>28:::79544413222341_HNNSW^dikgb`cksomgbhjn2@<7<9755868AJC<478567678:=67:966535776673444641:71g^avxj[76688:9<83338:9A;@.:77;:44579740..TTV]ac7mid`cadri_bo:2:74804435;?xxxCCOMRs̾"ւ累׍㻺~gpny{ec`sum{utpklknod[O?@idh{{}}DQ`VKOOPOLOLHFHIJHFIKHBj_\aelxxx|zy~|M[YQRONJGIIO\dWPINMILMMNOMMMPOORRNIJMNMNSLNONORRWUQrq~MNSSRRQVPNNORQNTRYIQQNOOJLORTQOPPMuq;ynr}uzPFMLJPJNMMPV[{x|nf˔USRVQx~"^dahj~ahbO\^cirrmfbKAAfxdND00B/0/G;L/J>GX\a02=@vxxAPTLVםƤ׶p]olkoywxmbjasxtoklimpfWrG?=jjvwz}|{}KWSKLNOMLMLIFJJIHIKHD@vgUXenq~w{|~zty~v}VZONMOHKILNRVSNJLNKLMNNMMLROLNNNKMMNSNQMNNRPOQ\WTuyq;BIKRQJIKQSTQSVMSSPRIPOPPHMPIQPQQQLqty|yz{>m~SLHHQORKPORVWrkqSUWYUP"Whqjįw~g`~W]ajqroli;*DGLJ[JJ0AG48AISL7/7E`dQR^iƷ⬡ۊŸĀƹоЕý`GWLHLRQKMO##$'''LF"T3WeEIFtY44S31B1FQICJWY`-/7?ABC?6~~~}~}~}~}~}~}~}}}~}}~ "䟶Ȥзtkhjgkm70rjurpjkgjjlh07=?;.45758776?:8115359<6277877;63659?y:nijfe6805578548<;:>;8573/-5<787547866652c\_S]pen1hed\1^c_\]Z^32:4565287:?zvq?EIKT𶉻"ƅĩߎʱ`xq|ztugosgon}ocaswvqmpnkjnlllC?lw{{~~}@RWMMQPQ[SLLIFFIIIJKE@mSPYfmlt~zz~~|vy~V_TMMLDCGLKOIGDMNOINQOKQOPONMJLNNKMOLMNOPLMONT^Svo;=AGIMPJENSSSVVVQRQMINPOPONMOPTSPNMkz=|~|=ny}MLRLNONJMMQWdxyooޞnSV[VYXTUR"TW`stiv^`{U[flnmlr\\4BKX\>C215.8`qSKD)&>MWNB.0;9<>NNauĸ˰ʇʀ¾ʿ̸ø̃þ^G_MLOPQRQ'%'"%)*-+",1G?7D]fIBU1D.4G.KUJHIKMQO&/69?B=<~~}~}~}~}~}~}~}~}~}}~"Ӝɳojhgc]\32lmrsg`h57oxx7<;5..3297328744/2314fUEIS[_ckineepnid^knmkjYP7CB:19A><;7EH?1315642887523666:7<36469;8<5:869>}lsgbd6376<7775689B<::6721,0;:6857961176=;gmtkgij1.dbfgc^bX_OWbc42089646>?>tsx~DCHQ`"́͊۹q}logmftyzyh[UZionmnjc^@?tjpz{}ECGPSMHKMJOKGGHFHJFHFDE|^LUchlv}zzuzP_`QKNMJKMOSYTIMKPOMLNMJLMOTONOKNJPNKMONNHMOOT[yp>A@CHTԅѾ厪ƀ킂ꑒü˸㭻Ŷ잩^eOOVSSJI(#&)(((*("*1E=0>fiE<[33+1J9KUGDB@AFHI'-4>@??~~~~~}~~}}}~}~}~}~~}~}~}~~"ϧٴځgfhhfdhQ605iroea]28u~|65?9459==;22776765406eSH@W\jq~ticZgmtfkhfihhXS2?A>8388980J[H2,318889:6406262:786337;:=:16368=}w|~dh7457<=:4=6789=4=814717887.85985/35975tyfdhm/.dZcbbj`bcH]gl4986996988>voeo?HHQ["ԥꇓuigjxsnoxhYglmkjonVD:5jxxy}BEDLWROQQNNKEGJJLOMJGDCqYQQjhs|xv|ryqs{N^cWQMLJLMQqdQHBLMRLKNOKKLROPIOMOOPNLONOLDMONRZv@?BHSTOKRMOPRVKRRPRUNQQRSLTQRPNMOPQQR½xrv79~y{KMKLNMLLHPYftrux\ŝb[[WWae]WWV"U\WUXf||kg[Y[VxzUaiqrtnbd?_cnXQ858?2P_^RRVO;269=87JGc<Ђ쭳ڄɸ׶ʿּѾ╲͍̼ˀ»ı􀂎쒋϶ŽĶڱ֋S[LQhvh522++/-*)($"(1,$%4IH<94M;)-'AHK:;97;DDC&,1<>?B~~~~}~~}}}~}~~}~}~~}~}~}~~"ȸjgdhea_J630ddpokh55ov47;999<9:<71541252123^EPKVdnkvmihgioojac3hv{ik8ABA;589482HR50258??<;7[7=88:;?6989<7:::6553246zyvaa6829:41,3<8894898?9>88<6=17077/033>11uidmw8ceS_b_bSdTO\]d9<564C9;?~rlwzENNY󇒐נľكucfu~g^cs}}dsnpkigorMB<3ou|}ABBJRRRSUNLNNKLKLLKIGFBjM\fk||z~}|w;yN]cWPJMMHNQj_F?GKMMLMMKLSQPPNQMPOTRJMNNLLOMNQTŲo;@AMSOPNOSOORNNNPWTZQPTPYQVOQOHNQQ^OP֘ypw:tw}}suxLLEKKKMLLOWjuvychllh[S_fcXTU"VZYYYclmhecYT[a[\uuR_jqrukII?3qmdW8?LVSbj^KDKI7'!#+/8P@=$KZ֑ҡ邎퇕ƼȿҼ܊׏Ȁ˽Ǻؾ݆ջսжɀU~bQSpBBA>4+/..*##"'/-&"0?A9;>3'*-)%JJ>=B>:AEE%-4:7<>~~~~~}~~}}}~}~}~~}~}~}~}~~~}~}~~"ʸDzriedecZ@74mpsolnk437|t9<<9689:;==HJ7.335799?9777888<787>7678842555/7;wvvof494553.,0<8787;;8:;>:8:@;5654:202631XqjhnwredN`^bo]c\Z]`0:=<344437<=}tgy}JRNYϋ"ۧ⊖wUV]ibbqtstzirusnidkyq@>@?Hr822578:8:9;:35377988989626254402=9qnwork59844//1:98:<>:49;>6679974625255460Wcl^jiljd0S[betY^\a`c05<8657669:=vtmwKLW"ޱāuTDVm~STW]XWV~vdrjtsmilp}ll9y{GJKFIJLKMOQWzwwckrsohVWWUVSVdundei_[\\X~sndlrXibUI<0!"/<32$'M,0,01VUO97RQCDS^P8D7WPrăµȾ퍩،Ľžɲ냄Ŀܕ¼ڼcjTOR\JIECE71-**NK"(PPLP0?LF?>>3,--+QN9?TM+$6;E+3/%M[~~~~~~}~}~}~}~}~}~~~}~~"B솎҂ۺڗqmgdfdb=2f}z:ynrw@>:689?:8;896453--1/23]XNJK\ilgcdjkh6sg3bgkoED=@B;:9::CCo558167989;@<79:74/6>8041.-32653/S``ln\iehhbbc`gi`^SS^a56<96476668vttryNKO踭灓犐qPMuSVSRTT\WS|~YVlotwqnyz\@>{CPOICDHOOPRQTPLIJJIIIJKIJEnYWdl{{nr~}x@}@b]UXbROMJKOXak_SHFLNJHKKLOVMQMNKJKKMLJLLKMKOKMLMKKODIHLQORSRRTUaYRRSOLIORPPPLNPSQSQPO{uzzyuw~}xIHJKKKNNQ|wvқjpc_STZ`hknj`^Zsupf|bXP@1&@]Y"$$')VJF041.OGLPGDI%+SI}Q؆ĺþºű罼쥷zPLMJWBA;@f.,TPPD"IKKMTW3:DA<;2/-UNR?ASWL74-=Z3/&PV~~~~}}}~}~}~}}~}~~}~}~~}~}~}~~~}}~"Ą̀ȣ|ogdmvnOV@ji|A<=uie9:677851:67723.02330+..01]UNRWZjjkgjngrmphgkh\o@?A<>BE=<889@GDIE61,/5:<:6:896677357825:2.14333945706h6quo09>066:5>79=:::67:975=;72-5.01256-.MXjhm_\deeedbjk_cOVO018678167=8:|ngruGINߪ懍"Ҷ|jWo^VSQQXhaU{pxzTXS~zvrltZTC~LKKLJDDDFGKRNRUOMJJIGGHHIIGDq\Xjr}mwX[WLLXdSQNJGQcvxbHEGMOLLKFLMMLMMKGLNSMMSMLLKKLKNKKONTSAHKILPSMTQSWSSTPRTTQPSPPQMQNNMMQTOOx~yzxpt|EGMJLPKKLQNPosunTWXRT"QWƿvv`[`vxYA2&/l7(%%%STHI0862]H<@<88"-2b^]jǂƱ͸¹е׾¸÷俽ҏ󅇅UTUC8Oa3.2]..VMKC">F"HNKJ0}u6@71+MHTFD]\\WM57S^/CBO ~~}}}~~~}}}~}~}~}}}~}~}~~~}}~"dچյڊ×whchnzlN|kfnsBA6dh5<63577668324/.12210,,/.ZUCEV1eikkkgikotv^fx}qv@C@C?><99D_cV84-,57:988:?:56783075787556743/3464/ie7>60983358?878:?5<;899749;71/3+/01451MO_pfhVaejfdhe\S_aQRS-01345333;:y~lkmbG:DFRڽƬிg`U~gthZXUR_ff^thvX[xolpxKx{pvRPEFG?>AGMPOOLNNMKJIFCEGJLHkSSpF|yy}Y\XUWZWOQPMJVnmgDDEJOMNNKJM&OMLIHJLMSNNOPQPKMONKMMOOQSbNBGGFMRRUQxUNRSUTRQOQOPNOUMJKNSWSxyzvwwzuqGHJLKLLLJPOsgj|֙k`h|R`ԪXV}Ugz;+):@G9*'%&QQQZ1498WMDA<01=.4d]d晢󈖈ʽ܅ɹΛƸͿ뀄®;ƴFUVN,8HQF*Wdg[OQS"HD=1GNLPrvw/zg0,IBTRRZY\djM9IN(<+?~~~}~~~}}~}~}~~}}~}~}~}~~~}}~"ۇȏ񂏖¥ɕlbbeofW?;jmkk8m]fj67o565664672011,2734--+.SCFN*24deiggjlpxco{x?@CDBBABA>:3UQS`[N@`\Z/NBQ-[SPQ[5UAKM&>&4~~~~~~}~}~~}~}~~~}~~}~}~~"ʴՎ鼟slgitzG;8k`dn78443t>;99765585450131.1/.W1/):K?C2895464300.35135Yc[mwdbebfcfaaJ``q_HR+,/02387357;AJGFFHIJMPNMNKJJEJMHEIF>[]\n?F=98w|TWY_Y_ca`e\XRNNONNMx|>XFJKJNLLKINOQOMRJNMKNNNKKGKLMNONOOLNLSRSQNGICFMQU[VSUOMOPPQSMQQPQKNONLOQPRQ{{kt}z{{~s|}GHKKMLLNMMMPTSWYfhorktUk"hmfY[~VflLQR3C5-%"""%-+&&*25,)J5 FjIVZ[SKWǎ۽풌ނЪŵÿƾĿڮêׂ􎎍|Vi[~:3ORU^knfl"nPB,@HR\PFNU*K'0~~~~~}~}~}~~~}~~}}}~~~}~~~}~~}~}~~~}~~~~~"ӯԋĨzihlnxv@4?raj896877@E>==8427974433472213bhoRGNFP3}kbe016jk5:FBBCAD@BCA@BGEC?:<>@FNUH:::7:97:=9965776:>87468886;889555>9>=75=7:58>98832778?=<=938/5021/,2-,fifcjmh1]jgw^.`]\\`aL$.-0342792957qvnqhryFKPLNTԆԸȯ֚Ӻ鋊ǀ^XUVTW`edXmɓladmyVF>zty?=:?+*K$%+0+QJ83]SntlXPf޹ɷ醋򁂙ϫƿʾ澺⃧ƲvRvrNkZ(IV(WdkbY"T<2+2LRNb?33?66BHUSC7:KSZLNW20S:G~~~~~}}}~}~}~~~}}~}~}~}~}~~~~"޷⃆·ŁǢϤ|qpkswU]*edpl88=E;<=?@E@:27;@;46647:4-41\eULFI@PdwgZ_h6lmfnsAGABCDED@EA@@C>:868:EE<6798:88?8<7676:6:;:;:544666;9<986/758;1><:898748787:079;><=B<63484300(X_Tdbdft{e_drfg/]`X]QQTO+5.1101575957:rpcllmptNRSKβȝ̩Դ"叙䃍zW][l}SVqk``pgjnbArq|ACGQLNLKIKKHHMT\SILMKNRKDIHm\TWR[lwndhy@y{w~Xsc\^gki_aYYXZYRLIMMOCDHIKIKLLRKOMROMMJPTRPNKMLLKMQLJINOLNHQZOQJFFHIMNPNRQSMRSQSTVaYSSUTNOKNOzzz|zw~v{9u|z~qy|DLEGJKKLNOOGMT~|wugnsz쥎l~~"v]UayNRbNrY^[UbXJGM1:9O1&&)F;69CGPKC@BCNi[Zr̈ͩýIJ㔱k~T]FJ?FKR_a_M">-$*&?QKW@:,;88JO\iK<@J]_QU2211X]~~}~}~}~}~}~}~}~ }}~~~~~"۶狅ҴʘttolwzT?)gin967=A>BCA<:A=98;<:64466653010]JHQBDR_mbaagjmqtov=BFA@@?>;~x;>Az;6884046815766<;>74995679<7068864656776<65565595::4.56.77=8894:8;:9@D@@CFA9:994768630456b`JRODZW_ja^afksyqetyCA>;;=BB8<>?=5:::669435536:899473989:<54538145897744<<65644g8>//6>367?<72>7:@:::<897=4331/-SSVhbcpwrgakmd\nb^\[RVKN427541257<757pphmknpksx=|ILS̵ڟ䶫"ﶇ²ufVVxUeozpqowxYAwwDGFFFHKLPVVY[c^RQOMHJILKJIJIJyX]XObSgnhjou|{~yoWacYWW\[VWWVTQPORNLMIJKKLKJEFKLM5INMOONKMNNQJMMOQOQLJRQMMNOQUVBBJQKPQXYSMPIOTRXUVUTMPOiQTuuw}ywywvshrknGIJILJMLKNMMMwx}y>k{¢~yz~WU|^~mlVUYX]`E;YV`szs[G)*OH>=>;::7884434478=>94668988855355337773677786943789=932=7088851>8<7;<;8:;74,/42000]_f^ddicafiljckd]_ZPKST23857,3489662qnllpn<89@Cy{}"m[ib~asXU14-Xb9|c)(NONBEP)NLP^hfK@Vw콿цƨ¾ɴʀĿŹŵĺúʼꦪݽ~ca`glV>CYi^WV"RB514:@J[gCFL:KHKb7]@?@>??A?>>:66244320724678878;=:;224686634=;<767:?8:577n>;;6483698;67;4728?698661456i4//nYc`b12ee]lhjT_PKUcVHSV-5:55236<:38:upqqrr==99mrwQTgyѴϱ"ҫۊٍℂ멲ԀSWYUV\a^^h`ymkm~wG>ww@CCFKRS_dbc^]Z_fRJFIHIJKJHGqZQio`Z_iojvtsvzy|}Yib[\eh`cbZUWVURLHLLMMLKLTNLJJMNLLOMINMLLNPNNLOTOQNJIMOLPLOO[ZSLGNMQRRTPRRMTSUVNSQNPNSVVVQL}~=;vzvzywYYT[`hgdkq>AI9JAPTF;9HJEBVirqgRPqrᑧòʻĿп󍓏ùź΀Ƚڹ聅ɷư뜲tWaY_maN2OhfZW"S=.-;@7B^ZEYCRDMQ./3bCZT0=O_0WNBOO~~~}}~}~}~}~~~}~~}~}~}~ ~~~"㉓궘޼ȳ{kkrwF5ip32438>==:<>>?BCEBB=87;247:356655:9878777:755<76926=9759:8=58679q<678<;7;9><5;96375<38764124/2-0`jgif6/1agbhkbMO@AVUbUYW.1423126769896npp78=<::7u@HNTblk|͢ھ"ʴć襗€X]^`effc`ifdtunrkkxG>w{8;x}w|}sVOHUbVgglp<@HKNKKNJJMLNM?;>@AABUpyuxu"whqgxkd`c|hs?R-).5;?CA?A8F=I@-8GHOGB]rna\RRzt½ñʹ¾󌉊Ķ̀н˾ƾ¿Մſ񕦳rWf^XelW7C]`^X"R:/6@DA@?98444642432eaVHVgmhc[?EX]efdjwtwmosvD?<>9:?@?@C@AA=98=87665644554835766582169;6555799:8=<;::676737763859779866788418:7321-/0-)`ebadp25/`dZ`]S=?=IYRX\j1145324476685e54pg9<<::t9;BUGN_ji맟İ"ɻ߽ێɿȻÀzQXV^ded_cç}oXrX[udnkjyrH{}w;DGJNW_dU^eQNIIHJKKIIF~ykST`fimcLXhjqurwzw^gaa\_ii[WZ[f`TMINPNNMKJJLMLFMMNMMMKONMMLMLMLIJLLKKOQNMONKMQSUPLIOQYXURNNPRUUTPSZTMLNOQSQPw|898y}vupdMMK\hTVeu;>DKNLNNPKLQLJE{AA@@ACIX|rt򥨦f|z"u`rzyjrheaXd-5?",,3<@?;;lY>67(CZ]-KF_9dEASgDz逇ŻӀǷƽø߀ÿ爏鐖po_Wa7eBAY\[b"Q74CBC99<2<=cKtK_6..gN9DQUOKSQKDJT~~~}}}~}~}~}~~~}~}~~}}~}~~~~"ׂ浡߁Ͻlifdklfoevu98:9@HBy~{kzq422523352`WLPJ^fptm@=K^_adhkorov|wIGD?>C@ABC@@D<:98857;295427764::8465:1964745696;57::>;:7458778;>:98;66:=8559:964//,*.,[djbcs530dfeb^D@@=N]XXX4/34414223557fm50hk759=wx63AFIJ\ůҾӐ̎Ȣ{z}|QVWZZY[baWnZzbkkmiRw?FMKPZVLJHKJLJIFk]^T_l|SK]iijmruv{y|fhf^]b]XY``YVSOKJLKMPHMKKILPOOMNPUMOKIPMLKLHLHLNNPONQMPQQRPNORU\WTOQPPRWTRQT]VMKLOPQRPw=:8y~|ugONMMel[RS8:ADHIJHJKJIMKDz@@ADDG^pjr|򮶦`#{mekmdcfiru,)&#))3tyq;&1,EecWHGa:hRNiz̊ŭľح℗ǃ䇊酒qfTZ2kZLXZZ]"QJFSPOHDC=3jqU3V@7,2R@OVeQ68ABAOZ~~}~}~}~}~~~}~}}~~}}~}}~}}~~"⎒ᵖpabjniVrsdw=<97=EAB}utlZen\1/041-43-GOJ^[bra7C]ddcqvzytyvvy~BJFD@B@@A>;E<<478852;7535466947;7;8846:79@616788;;348:977::;?<:::A7=;577>=@734,0./^dvddcih7pjkegZA=BDIYTFW1/043/5364595mh4cmp8499ux56@ADa쌁γÿӬƒ҃詙}}nlYXUUd\^~]jdiy`Xopj}BDFGKRSWLKJMLIHCBf\P\frgtsjI]nof]ruvy{~z}Oegk\YSSVWUZROGJKLKHONPNLKMMOJJMLNNSOQNMLNONRLJPLMNJIMOQNPTURKJKSSVVSQQYNQRRQMSVZNKOKQRQ~w~|=yz}zv]EGMTZeNM_8=AEEFIGKIIKJI|@AC>{DOhfkhZ\`"{Y\W`{mst{3-?/*'.psywQ4.7Uk/NB;Shc\bsžкͩ`ų灎ԀöԶ񺴿Ɗ͸ᅄęk5/S.6iZUW[k"[XXe^OJFHL;6X\Po:G*f]hb8cC675:LR~}~}~}~~~}~}~}~}}~}}}~}}~}~~"یݾǴsdfns_CO{lo8<<<;@FAAuoprsig[\11212/5a@;E\ck]}3@Qdlef7xttwzuwyyECA><=:<>8:887?@<<9751223ReybnbikjriojdR?EFCEMLJY.015394533882343aps778:u:45@@@CEP]_g̲l^]^"sp`gm\[_c^qfhlj:B0)L3+$GQnT5/Rp1I6/AU\^h׳ɓIEkؽ;̀ʾ춮ƍ񀃄g60S,1b[ZW^i"aYXa[NEEGPC9<2JbFTcAC26r<<:ZA:9:;>~}}}~}~}~~}~}~}~}}}~}~}~~~"΁ױﺪĸd_hqzi=?BBxtttyujiX_352523^NE>BXsxƂ4CX`lhj7:ylxwsqupAA>9=@>;:89387566:<>A;2676664677=:85.6887:;;;>97132464:wsv9@9<::D?8595=;92::<;=C<:899:5789=972:797541577:96689:66<;;976566.:8;yea6:?;=?>57748;>96489::67620.qqgjTcgmokfkmjjhV@H763mnl678wx:;9<>D}qŖ"ȿ뿢ؠ㸷UfaZsTSyliwselvGCnv|GOMNMQVRKLMJJiTa_ȇDYotoprv}vxzyxzyf[WUTSTQOKLLMLNNKNMOMOILJILMMLILLKKKJKIIPOOOMGOMPZWVPNOSRTRRWURMLLPLMROQTSPN{{}z{}~}|zhMUIPTR[LcDDACEHNNMMRVNJJABBCJPSQWle\]`ȸcfedwww\|~ \hijklh`)@&+J/,BjvNHa\:("3O[]iûí퍣[alͿ¼̀ǽĭؾ¾郙r|]7111-]ix`PW".0/2nVGHE?8FJLCD>OOCH.27?A@<7aWdUN~}}}~}~}}||}~~~}~}}}~}~}}}~~~}}~}}}~~~~~"뎑󹟗ȫҤy_bqxiQoI7479::;77<@=>6::;67878463468534440:;;668:77697:8156852779tc-3:9=<8<0732;:A779=<:;24500/7mim_cliiv|okloaaH?>GEPCJU147<303438=:58>9643379;2968>?;Ghe"ˢȷǀŹWR[qcgwckzv^^brl`i{fF7BGOmhCgejijryv5454/QIFgmm̿/qtq9=99567<75565365552:090369:9:977548698854374709820*488:<@96287:887;;<;:875:51/2okmcSebvoCynqro`Z@EDGI?KO083b..1135{u689965,498/6?87;:XbA241C<)CTY`isт󑞭ƻĮ􁆔բgccWguhG߃ȀƼ¸ö܂ưP631b`_ac^ZP"Web9LUTQA:;9616G:660QKHM ~~~~~~~}~}~}~}~}}}~}~}~~~}~}}~~~"˂s`doxqEG=o8<:;?@EMZ~ixYQ_fhv|sp42`PLeuKȭʍ0?Ycwpk6:6oqtrwzrl@=z<<<><13459:@7522456568:564B44<=9847564365676506546>6./)59:69=5169598?9>?=89845844/=zanS^dlgnwr\xxFC=GK@JT-1/1233648zn/988gq46:799=995>BDQWK޲ց룅ǻYd^qo]\ep}rZ`auxk_j}WU6pBGHLNQZdhxjvFHpOSiiP׉AVt}vr7<DAFKOMKINJJKEwAACBCENNMMSXcu{trj]"cxnprjwgailc_28aJ:2VeF*%4H?V'*/DA25;754WLJCG~~~~~~~~}~}~~}~~~}~~~}~~}~}~}}~}}~~~"󆝫㞴pZfvsIGyl6;;?BDGNaGVLYX`cvm5^ELetΓ2;68726939<7563669:8982552.7678;656255<43/44:7;8<<88>;<==:==>:818755414pgld[ehjknqrtzxGBH=;GIMPdd/2121465:q5858oq8:9677<:;9V$//-,(&(.;4GA%.I[^ialo|懤担㰜ۿs^\]copȀ÷û̌ރ~l7d]ahaY_4^"RO??fZUSULH@CI?/EE8qq:;=ADK^pUu^]`[an]EoZCB`zǚ2B_^hnnkwonmpsturm=A<<=;96273:4iZeimmecfebktu~Fk:?@QNRW423522356u~p87667:>:;899;:<;=DHGUt"žo``szxupihkg`YY_km|eiQNpsAHOQOW{_umtntyUoMMcesmHhzlzyxxy|yvabVPQOOSOLMNKKMKLHKMRLMOLKIMRKKKLLLSMPMNMMKRMKNNMMNJA??ALLNPRRRQSSSVY[^_UQNOVQTUwv}~OXkALN\_hnAACGHLMLMNJE@;=BAEILMSONPRdvqzeV"fmooy[hpf]b_N>+"0:;+)-,*)##+'$ #1Glmaqѻּǰs\ajoppû􁇌ĶƀϿøɼײ՟ۂƹǷmb6jccec[g5a"SRKVK7<=FNjX 0A<.6YhThn`dmqogWI~}}~~}~~}~~}~~}}~}~~~}~}}}~~~~"ȩ|llw~`l3pq;<=EMN^ubU[T\\Ya@KeMH^l•o7HY[ckpsvmmjilrtq9==qlsv::166877<9;369<;A93897976:8243349<655648=64mxo79=>;:?:99:>?>BF:4635078ncWkj}jhfgmfn~tK:HUTU`371342357ws9=;7t:;9:7:9=99;>DU^wǷƎ钴偀øxxzwpgii`[Y\eprzilGspAJPTT[}hpmppwqj|SllUP]mplǛx~skXw}{||{qw{Qa]OQNRNONLNMMFMSSKQLGLNOQKKMMLKNNMMNMILQMILNMMLCOZbjy>DBGKLNNOMLG@]kbqѽИりܹlofT`np`Xȳ򅑆枷Ż˹ŀҷDzӺצi큜₢ùwhZfla\b``lpp"WG^uK.Z?^g~QqN4?h=+[Qhm::elowxkaU~~}}~}~~}~~}~~~}~}}}~}~~}~}}}~}~}}~~~~~~~~~"Ӯη͆߱}wmmv}[C'x<<=>FXj^hmJya^Y[ZVS_14ruYBAH`شɾaBUY`[[nvwfbghmqqs;8>|p<:<=468886;268618=>9486899=7346:8778863;78297786ekne77>>;<>@488=::?A=576606;mahwomfkkunlmxud>AUW\p434213863vvc68:st<;79799<::>EHoj"戙ⷱրyzwrsy|rkaYOcux~jg|koho5m;GNPV^on[y_onotskl?n}Wjq;s>@lZ_~~~~}~}~~}~~~}~~~}}}~}~}~}~~}~}}}~~~}}~}}~~~~ ~~"Ʌ۞ujdhy@)568==FekahRwmYR\`-.cba^eaPDDXd|¥^\PZcdacijommrjnpo9=>FD?>>BB:8456167878;9898866889957757<84=8>77766753679qgjh4/488069;657528<<868507ws5iar]jfmnnmnmtkeA>VV`g0/2/36533it_6:97889.;678:;<@HG~ͧ"ꈙئˤ􈒆逃cduvggjr}|iYQLU_hoycdsgqT15?KSRWrauiikk58wy|}lNIQdop}dy}z}LbedUVUTSPKNMPOKNMMMORNMNKLMNPLKLJMLKLPMKRJMJMNLKLLKMLJ?GKOOOQOPMNONNRT[TKNOPWW{{|hN?F\e|=@HINPMPOOHE>@CC52;}8kkl`hdmwmqpoV{냏d@DIBBNKNMKMPTdqn"eoqnxyywtj7+#2- '76'%(&-"!$2C[43vܣدعbmXVgy½ぉ򁍍ʹľĀйʼýǻðʼ@\yPqꉖ폟ų΋dheWY]dh`ZW@"LiAD?>}eNSSP}LW[M^jfgkdzH@rVXc~}~}~~}~~~}~}}}~}}~}~~}~}}}~}}~~~~~"ݲptqeg||9Xa8?AAcNMvKD@jkgikqk^\bdXCJ[aqybMlxZ`gc``Zcmkpvjge24py|96<<5=@;877788:DB82;758643=9:369<458:9:<=8775536578qrna6343555:7534462/,//7564szq8molYfrqwlurv兏;FHFZ^./395466uzne38328:7885229==DHNKwŝͼ"ȳ܂ѧqeTc{l_mp^[o}zvVZl}nv@fyLPOVvTQsWQK~vv{~~|~mOUbepjtp^nzv||tqBFQNTTPTSLILMMNMOVSLHOJIPOKIOL PLJKNKKMPMKMMLOLLKLIyDBFKLHEJKLLKHNNLKPLNJOPXxxraln|U2R^dpv=ADLNMLPGD:=EDADIMLHKMLTfsdҗXyphrx~my}kϣ;4#!! 22 )-)9LG6:'Cepmˏ훷胅٪Ҵ`j_ftû牔ѻȿ̿źþŸޱD3nGHFFCwlp\WWONNZfWbyslufqEs`AI\~~~}}~~}~~}~~}}}~}~}}}~}~~}~}~}}~~"샽ۺ||mctz:8777599JJLJ~IMLHNMIMMMOOPRY|~}v{|`klkdf7Hbh|:=@EKKKLQHA@xw;AHJQMIMMLQX\UWrmtzn`̰{z{`hq>?CJe4CSQ)4Oej]R2E"2>N`jíٌﶖհ_rjt{ϼ怇څ¾¼Ǿŷ⚵þ8868pD}ξ򗛇xVojdcea/\PJL"F_DIKCBth_\ZQTZMF^`com[|sQ-86664547864789767759:997656777i654ov@9546;6658896>:8988<=|ttnyrbZehgpqt|L?AS[0./455459q|s651i548;<988;9::9CDI}߹"Ʈ궲dTd_lopлmmNiKR`|NP{Ryjo99;x~|wmjVKRcgzjr{R{toxvxFMMNJKNMOPOMMNTLHJMMJJJMKLNNKLLMNMKMMNMLMNOQQPNLKLMLLL>::QQMLLPLMMNOPJMMKMOPUYϵtvbinis8FPov;=@FHKMMQLE;z>He[0242598vvw~>863em678=9:>=:998=@Frո¦ǻ̳۴jr]~dNOdopj\jwemSg@LUsIWM{Y{nfq=<<<=A{ztn]MZcjo{[Houxq{RILLNMLOSMMPLINLLLGHMLHMLNOMHMMLLKLJLKMOPOORMMOKLKOKLJ@tz=ACJRMOMOONROPONNNMORRU]ٴ9w{fbofr9ERow=@GFKNMZTK=mr>DHNJLOOOMNNMLSԂs"zljūrvnlcet`dnAH6.#; Gb^^X;.61<=g݂ʂԏþ~b_fqmhΝлߛƼǽǀƽʾξⷻD086wMۺ̀ûWDjmhgca[ZZOP"NV]T]ZjwDB{ski_aJD<6G;Bo^[MPcy~~~}~~~}~}~~~~}~}}}~~~}~}}~}~}}~}~}}~}}~"ܿ˥ґzp\_s|E^:HWrGQBsib15745699d[]b[MK[br㜜v:cxeehhge\Yspodggp{|p,/2:=725=89=<=9605568;<=;;:788656466:;=:5579:88767:9886dm69;;546:8:89<619;B<;47C}vvwtvi_12oqtrxBEM^K21528678nrzFJ]ٽ׳"ڷňе|\WX_XtqsbPbcfhWx|bjGZ=N\RVDtdk7:;9;<<=zzzwkTMYfyǔ}XCu{oy}{}EJNSRHJNUKIMLMMNILKLMNMNMPQM KKLNMNKLNMJIMMMOPOMJAnq8=@GOSQPOONPSOMPLMLQQS]4<|yygh_nXpFXsv@AHGLKKNWXOBCCGPNKMQXWPLOHLVXvö\ml˶jp]Ā.*,56D /* Wnmn\4(95#?aRp֏؂ؑꉊ̽zXZfwqƬõľǹ¿ʾ¼مڷkF563aEGɀSll_bca_-ZQI"T\]XVNOaED~okkeZWeQT8A:]UY\s~~~~~}~~}}}~}~~~~}~}}~}~~} ~~|}~}}}~}~"ٽڟᵡ񭒿pcppCj?RmV_Fmd+/477m778oebaYU\`fq֡P2Umqkikrzoblnrjd5u}q6446=C502699>:;7335975:7:;9864775320;79:<9768=778692759rop899<:99;:889;959<;:96:xxuuvr[V34jmsoreٚۗÆBAS`[115493255x{?77C>7=9<89:A>?;<<>DMl"̿΃耭Y\|f[j|_`asqwjEgAVl_`Cih39;<:v?=<}|yrcQO`hl~|F8fu{~~NMLMOVYHDJOOINJMMMKKMLJNLNONMLLMNMKJLTNLLQNLLLMJMPMRJMKIwx>?CKVXRQPNMNPPNRMGLQRV|;=|y}zTj__y}OCLs~?BHHKIINOSIIUOHSPNIMR]SQOPJIS[p]]"spmnkͷdoiȀZPO04H;W_ ,Xnmzb4@`@fDJj]ˍށ镟𿃐¯hMkaoȔϼÿļ϶¿Ž܇¼Ⱥ適]61/[KNЂɼӒ¾\qkeccdh/2RK"Nd_YULEN[euyA@>{na\nhN/::aTeiq~~~~~}~~}}~}~~~}~~}~}}}~}}}~}~~} ~~~}~}}}~"꩔ܱ섕w`=d?OeKURukp,4:65e033`kjdVR\bq̨_cpmieijkgZdpsnj5]o535:>?@60.548?4:73665568936267:721344747898777:9766768577em879946>9989:>=6577821qzrsqb}hU005pvlv}KʅAKOfd43652325:=85A@6:8=999==>A=:?DLn"􊑂Ħ怦]ip[fu\{okDmCPdR`Zdu7?C?=s:@A~zr_SV_f{^ptwuzwqotLMJORUWXLCBKMNTKMMMNLLLMPQMNNNMNNM(LJKNRMLNOMKLMNMMMKMLMKH}|Wcl]]ODWm|@AEFGLLNURLHWVMTONKNORPQTPILU`nǶb_sxloŨdh]`XO-oiWlIq/ .EILV;"EhosîҊςɀƇŷ~\pkqvʴǼ¼Ā·¾ꌚĽϿƼ񇎁b;90._OLy΀̥Ƌľ¾oYtplfekm42QP"`h`XSZ^WU[X^r{v:@taV^oxlLU362Vgxqw~}}}~~ ~~}~~~~~}}~}~~~}~~~}~}}~}}~}~~~}~~}~}}}~"ìչ󇣝݄ɺar~sg;^:879:<<9477235u|wpvl[zee7/3orqx󍎏ж9GUgg;575152/9B7588558:86398=;9<>AwuhUKNf~Ņ\ztw{u<<;x{MX`PSROPPU\\NKBFKLMKNOONKMJLNOSRPOPNPOMMJLNMNONKKHONOMMJGILMK>8B@DGPUNPOOOPONNMHLNLMRw;6<~˿e_]L?]lGBDGHPNLR[LGNOMNONJHHKLSXUMQTZْy[c"ãi[_YˀS`H4BEIRhU2:~rq68<8879=>?74230138:8405457436799785-3557<8947:9342442868789>;=76;45?887;983279:snwth[Uiddsnkvkwwq҂=OUei475755466@142557::85;:3:H?A@EMI&̴ֶѼ쀀yafdp}oNvId|rGjFnQdZjNxmw;;=yu8DKWȪ"пϷꁐ߀yuYj\We}[_zpmGnVl`Wyjhmq;~ue7@vumhkvuxaVLorqqyz}AJOMTSTXUUQWXSKFEROMKJMNNORKPJIKMLLOOJMLHJKMMOLLNLGNPRLONMRSONNMJIOOQMMNLLQPVQMOSRQS][syz@:xjl[Bas{}ADEKJDKMZOMHJLLT\QLJGLKM-)*TU^h"]Z^[lnebɽ71DDM-)'+))498BIY=SolZcܥ떥ׅĸ]emdœłÿŀӿɽúȺۂnhmFA^@iޕ򶴍ƵǼdž콝L\ieS\_ge]Y^"^]^`]fkaXNGWbgdd`/a\Ve23PR09933moy~~ ~}}~~~~}~}~~}~~}~}}~}}}~}~~}~}~}}}~~}~"푋۝Ɠ߶z||pkbCn{opklmpmj3420688ri7:975jhk76=:64783366627:785/436668;:<985564550.35045;65775:167968556469;:7=;8=9::Hdge5973.ciqput@3,1227=?<99=;;5DK˫"ʶ²湀m^ja\x`\YowtmHlFz\wkLfmr{>=}wx}wxwjU|~cuRHugplu~}~@EIILORTY[VSRRTOMMPPKKLMNLPRMMKFMPSOOONNPLLKMOKJMMKKMMOKMKLQOLQLMLOOPMILNONPTRQORQORR\b|{?;gu\NAa}zEKKIIUNGIKLOVbUIGJLNJ%'()U_ٳ^ga"ca_³bfmkli($XqJ?85C89:9>ADJ2Jcj_oڌћпÏmmjV停ɾӄ吜¿ƀĹǸǽѺ灀_>pal;Y܍Ӷ撶ĸνȂʠIarg0;5]jjX]"]WV]_]_``^Z_iiX\[12bbk4c\\1367:9uj~~~~~ ~~}~~~~}~~}~~~~}~}}~}}}~}}}~}~~}~~}~}~ ~~}}~ "ۦڥů󁗻ᰟxkf`EN>AOnx9Qbd333oljbhhovlmsrxĭH/olnmmqllj37541778j;<:96cgm7:;9;A?;758165798743663779<8::;873445556876;9;<6673135:95658737896:=9;995:zinwsoY`^^eejkmnmu~⊪؁ARnfcg591Zhnohnu@8132/4;FE<::9775CEJPζ"悆관nmYXpqMx\oո}jknOSAWZp~Caen>>;yy}yzz~uoxwxáYcN:pkux{{~@DLJFMQVY__XWORRPRZWRMJMKONOOMMMOMPPSOOMINNOONLMMOQPNOPLMLNPJKOMLLMTRKKIMPOOOSPPSQPNPNT}~Zps:Ef{xHOIYPHIKLNSf]GEILPMI%*TVcr}}gl^"_``cchlgdd3@f\K[qF+C-HC>DCAL&-Qe`kɘ先־ùzfXJ͸݈݈ǀ½żǾƥкc8JWbN`ٿȻ¿ͳTVzj7@1AZaZV"\b][b`aa`ig_kpf_Z/24klg^`/156:?:r~~~~~~~}}}~~~}~~~~}~}~}}}~}~~~}~~~}~~}~"Ɗή֡nwhbeW~M6b{~AP^h58njjfce]hpqqtzv˟׊Fajnlprrqlai36432687;=<<:6778>:9;@C==676656588251678=;@=>>25;876766687<879<>:6567<55661547367::997z}f[knk^U\.eihnmmet{u׋>Qumnrkmbdci5_e??854115:FXB<884539@FGNdׯŪɽé􃇇̨wn{_}nRiab~·obamdtJ=l~Iacq>@xtwz|~tx{tnp|ŢvYItqpv~|xFNMLOOQPV\][WQQOPVSQS[`TQJKLONMINQLLFOSRUQRNPSMPTOPOPOOLNMMKLMLOMNKMOOMKKGLOPNONPNOQUQOQRB~|}qw`fcdpQB\|zQc\PLKKMOSmySJFILLFLUXXiÞffV~"``a]gomdc=VfXKZ6C1CPLGMNRg@L>ؤɸ˽½Ŷ縉rl47(7>@N\"che_aab_^b_TTioid_0254bUW^5;;=:n~~~~~~~~}}}~~}~~~~}~}~}~|}~}}~}}~"ѩʂ༦Ěή鈄xikspNjDU^l8moghggh4sxutsw֞oanyvpnsrqlt<=;:8968687666899:=:<<;75;;;:779787;:756794:786:69468685445786887:zq\Wlk^a]W_hoksnjfvzJ}ؗAOnekqlcUfp6341;75523338La;87767;?EFIWi׎ʰ"ʱѷȂ䶚wvbe[ujziyj`i|TmKeg{Azztwy|A|{}wV{Ɠ\qrw{|{}||O\UQOMHJQUZ_WUNKQSSQLTVPQPMJPNMJNPOMNTSPOROORTSQRPPPMOPNONMLLKJJLHKJKLNIKHNSNQNMKMNQPONOU~vv~uKlbVucGNttOORRYQMJGLMORv{JFGIHHMRWWaoten"v~a]\bnuaxACK0<*5+N?CFJMXUOV^VRU^izy㏧ԕöUU~lȷ뉝ÿ̀Ƚº¾֧상R9/.eKIij󊎄´ɽƾh^d6;][`G9R"iiicaffa[ZUSLO^^he,+/b`PMV5:B9XHgl~~~~~~~~~}}}~}~}~~~}~} ~~~}~}~"Ī톉д䷒n{}xrpppmaWWj{zoN_i2emdajkk6qssw}Նgavpulopqpmm?B>77445:BA>B=747=976;88=z|z<853975148=89;899:5;;>>>;957648987984/m?868587655635698627899wuddhg[a]-^gljsnhnwїe?]Tnnje\et;434634487388@\8787::;=?DGN_ܴ"Įޱކ⩅vham_c}w|wpijr}{hYZd}m`r\du:t~toyz}@uXĴ{Qxuw|pysvrrxR\WQPKFGLWcWTSOPQRPONRNLRPOKINOPMNQSKLOLOPTRVQPPOOOMNOMMIIKKJF?~HEFJKNLMNLNJJLNNMJNNORH}y||lbVxh?``~RMMNOIKGJKGOQ[eFHJIIJMQSVagp͓`qdi~"xsd]Z]npŀv778878=8688:wy>?:6:841/6?:;<<;6@?D?B@CCmbxyuryy|z}BKV]UUMMLLMS[\TNPQPNMPMJORPRTROOMMLHIROQPQRLTT[QROPLNQNKLKIKJJHC>|>=BMLJLNMMIMOMLMLMNLLTUQQ{z}~ca]ǧGLvIJKKKJKHOOMOPFJMJHHKLR\]elcs̜"p~ah^_ZtǀNYkW74::EUPC>GRTJPKgZPPVwࣝぇevf쀈؀¹׈ϺݻX774[Pxַ˹Ǻ݈_l>leG]U"Yepc[be_UUNBJvCM03/00fbSPWasxRF~~}~~}~~}~~~~~}~}~}}~}}~} ~~~}~ }~~~~~~"‚ʾĺɯuqx|{sifjxݑGI14oskd`i5:;sttyDj䙗Is`fswmnnpnpv=DF>=?;<86<;==8753779<689;986q~=p962229?;:<<@9;<><=6:98533464757734ux46;76485557751;5=8652-2bqt^Ycb_ej54nuvu~WߔubNygobX\jqut7-2579779346;8<<:899:?DC?Vi"޽ӭڋĮsyŮ{ϕz|wo]T\xcFS7>~vnu=BDIPmxCxitxx{zz||UbgXZXPNKJPRTSNNLLONMMILPSLJMXPLJLKMSRPPPTOPNPMOKO^MGHLKLGEB<:uzy?~~~~~}}}~~}~~~}~~~~~}~}}~}~}}}~}~~}~~~~}}~}~~"֑ԟศox~~vuqŒHF(1mpmk5558?B;s:;E݆Z2zifjqmplhpro8@DCBA><;::>:9;32467856777<:99:;@=8440-68588;;8;?>:987986568:45771557tv49<87787553954:<>8451.5fkpc\cac88:4ssvu}Vlmsyeikvu}744667664479:;:>;:95;AB@ER]w񳑟"ᵣ풕Υbqylgrb}c~ݏx{{nlrfR\1<}w8?BHORK;=JYq`L/jiyzuq~{z|yPhlheaYSNLLPPOQMMNONIHHLMOSNMQTVYTONMKHMNLOLOPZPSSPLJLMQPNNLJKHJHA;>=5yXf^\pfsMDJKKKJLNJLPMNMMNMPSUZZjzp^]toee\\g̰Ub|8:dKB>D2FBEC@HOI>@KNw=o|kաݪ탇Pn`N炐¹Ǽȱ旷ȼżۼခ댨I]725mTKųŸbiiG6INNP"\[bEJT_\7;maSSPGU`1.-/o\L@_+-<~~~~~~}}}~~}~}~~~}~}}~}~}~~~}}~}~~~~~~"ʈۼ…಑}}r{|xvxrbHQ)1j65;655;@Asg?EPUpprttysjhktu?CEEB@=:93:;8::364607755534>876;=::753358<:8;9:::;;8:9471:86:67875666nl48??;9746613679::81265mjmhjc_`gwn66pruw|=׎轔𪘉{~rwhferp>:56886425789=?>=;;87;AA@CO]r͙"̯̍櫃Ȭюʀdhdd`txȦsw}yvvh`_u9<=:@@FIOUU|BEMybWozzsz~{|{XknndZWTPHLPPRTPSRRKMMJMRMPUOOQQPNNLMMLMNQNLTPRVPLNLMKKOHOOHJJMG@>AA>}@FQRMNOLMNLMONMJJMGJTS~>;x}Rd]^ח}mn|RQNOSRIGHKLNMPTSOMMLLPRQS[dy|u|s"i]b{seie[ab^xaDCC//+)C=GbgZYejK:;+[qL^ܯՇ\9^̿އĽҴڋý߷HU947mmN䊥ǿŸ˿[^fV>;@O]"dYV8@CA>?=8;6:;766788;6886403357768:89;7/0487:99498;@<;>;77678889;875864hdf7:@::96535459;@96544;znnlikcehlkilppyx~Jĥ߭Zq|k22Yg8768?J?8247899;??B;;:9;?CACHZq밓"򱆑ҹߌ]^woludgllle]osfrrt~tqrIqB<=?@DDIJLwHT`kn_s{zzrpy~U^faVVVSRKMOQSRTMNMNQPONMIIIKMKLLNMMKOJOQPPONMKOMKLNMJMOHD?A=;|}}@JSLMMJKNQMLNOQLLMNRW~x}|}Q^_^{>^BDMMPQQphPEJKMPONSSS8MMLMRUURRcl{{udi}aaiii[j`SteHRB!8/:4;GI29PQ+FBD3MWF~ھۧۀ莢g7F_Ľɾꉏƽ똪ͺ̹񄫎T:87oadS틅񃖰IJ³`KYfT>0Xx"qUT-U~~~~~~~~~~~}}}~~~}~}~~~~}~}}}~}~~~~}~~}}~~"΂߽ܺͬΎs{~x|ww{vnPY143lpr;><B@?=><9:;:9438>;977;<666767577;8:?9840269<874779=::<>:89;5:<:988686fja56;C;=5755366:==:4245ksjfngnmdcgpg`fkpwy̯q}{o2mihp66:Tcu<37889:ABC<9:97>A?EHUlȏҫ"ª̛Ǖcvr^Xfmx󔋦ss}pr~ZMu?>;zDHJN~|K]I7itv~zxyx~~NV]ZYUUTQOONNMLQUPOOLMONOQQPTPMKOKMQMNNMMMOOMLGLNLLJKILLLMPMOMMLIG@>=r~@>GRMRKKJNNMJNQPPNOQR~~z}`~u^}ALNSelNIJLNNMTUUOLLMRXVTV^h}Ʉd"ႃ}}mȱpta][_|BLL3H553GSs`BPbQ.GBIjzԈӎгʧ˸އgk~]냔ŽǾ¹ſٴؤ[u;gfa\THQہȘȽļhO`llT8`"vYSCJLNHTiygXENirm7d\]{S&%<7<>;9868769886767979::99;74/33578865655;?8=A86986784699nnrf3384;>:=7877467;@;;6212co`a`_aoihavgbglqypeȾޘ\sfpo}88>f=<3D46?:899<==;99::=>8AGPo쉲א򄁙üŀk[oo~faX[y|{oяurs[JT`m9<=|DBFKO~y|H}CCskr{{yyvvwWaa]\YWSMOPNPSOPNJMMLMOQNONOTPNLNNNQNNMOPPONNNLMLHIKHKMHHLLMMKHKMI~{?AA8FMMTNOMNMMKOQOSQPPN}{~w^_K~~MOSrBSMRHILKIIOQQPMJLRVTRVRcyxqq"Ხmt|rfqrZ[bFBEdDS-+CZS19rkm*EEgƼ儕ܾ䉧jWp튢Ľ÷ʼýſ考ǍitAif~MR:"*JHLKIIEMNLKGMTVSTSVTrϗxe]ly{qrrdkqUNX{WSOPPFwBKNI;3>LCB/9f{}>P\N||ųdʼƹ耉鋪hBYͿƾþƀǽþ섄ඹhwm_\OLTR;|ޭƶcUFgQ3%"=<<:66=?9@:6887796::6378;:@?8:78<:99:689896!33.4109=75:5676556:7toV+2936621257{4657oppgcN/]_mkxc\fpmilnx޸”RlL@_ps:DVL82639;=5678508=?@I[^{Ȟˡ녝ɳ넋鼅|paXXlvy[\hnlfzʿvx{gaq{<9;BEKKKL~M^ԉHHqsryvyz|}~bfc\[^aUPLOTQSNLNMKMOMPMLNRNMIPSNPOMPNMKMMOMKPNKNLLIKMKKOQKLLIKOPQMCEMHKKJKLLLNSRPRTVSRNtuz{~{ףĪl-ENLA8RLNMbcbWZF1iwc~~}~~~}}~}~~~~}~~}~}}}~}~}~}~~~~~~~}}}"T瀃˛|{piVc`16888944==<8}VQ_hooknuvnejyG@@?:509:;=;9:7:8=9;=;57;=@><;:78:>=9:8:9:878543/1573639:624/2:89m,.3;8274-25;5498406rmd5644_]4492kXTYeekknxD֩jqhLAJcJm<9==0>KD24:=A98<<869;>ED?9AGKJaĸʼ葧ƶĸ뭐q\`qу\_^eab[xxeals;=<;>BBGPRMHy}Jo}Iou{}zz|}eca]\_bVRKOPPPONNLLJPMNOOORRPOOPOONMNONLMMPNLNNPOQOLLLMMPLONKFGEJMIHILLSOHJKJKJMMQVTRSXOPONNLME~n{}|Gε[mHFoYYTVzNJNISVKJHLNOJKNMKJMOT`ZRMRWdkp{F"x}ZŲ{~\uch[BFGA:AHI^`\`316tgYSj2.*L{٫Ķ郃°־fcwډοùÀƻ󁄁lkmM2gjebSNɡͽº~@I*AQF"SabYznN9"K]Oy|}NBJNN[wrdU*IAHN<~~}}}~}~~~}~}~}~}}}~}}~}~~~}~~~~"sɺŁŹ򌍗eHF_`5:zu89669@A?~{}RLyfhmqhjurqi8AGCBABC?>;26>=657679;>::<;999;;><::978:;799756-45:34;;865674267622498688238?98;9844e4246143133912QXYNofj5rz|Qڹr|nECOPh=866-79=98:<<948:;8:<>BEA<@CIUrރ кºĹж]}txŞifljd}YIVpw=>~>ABELTPIjzeFFsv|xv{}JUdc`_^a^a\OOQPJKMLLKKOOQRQRRMNNSPNONMMNMLMNMNLLNPRONNMKQNOTRMLKJIHEJKJMOLPPKKMLKMRKTXVTRRNNPPMJNMMKMFIvx}=O[ĵe^‹CL_UTWdPNKE?LDNNHJLIIHKLKHLPV_\SPTV]nwHUo"isƩs_g%@@A@DKUK\wMYTUa\B956=<87<:87995568:>A>8;;;999:989::89:<:876697;;;8?:=25657-448445966:636;:;=?::/612202101120432W]_Xbpfl7:~Y쁖Ħ[c_GGW_f:77:59636:::9644788<9>@DA@;AG\gŐ"Ѽƽn[mulopwuvz{}lwgVo}A>{}>BFGIORKfNFCswyw{{}~DPch^[_^^_[UONONOPUSMJMNPRQOOQRQPTSQOOONORPONMNOPQQOKKRNMNRPWQQJNMKKDKKMLMNSQNNMMMQPPVXTUMPINRMLMLMLKJLLKq|?AUt`lcqNMX[Y`mNLJIBIHLNLLMKKJGJJJLLUZ\UQMW[mx[O\"fy]~njgp[i33?KGA=LcEmC/1EC9Cn?I{`w˹ۙtu섟¹ĸļȾӂa<;9owpdlЛȎȻDzsTZKEZ>"0KN~jpp\Hb2X^GSc`O@DB;?MPLO/KEDG<~~}~~}}~}~~~~}~} ~~}}~}~~}~~~~~~~"«슩ßۄ`P[026756897:=Mf˫Jzelxwxtromk:CDHDGH@BA@A=;<737=:8::43.278;>=77;9667586:86:;;=:9:;=78<=:6559724575<797897889><;;77335/3,6/./313059gXdbchlq88Mqͷ귞֜rSFXR\<869865558865/:1879=:=@DAA=?CGJPNMdBrpw{x{{yK[amcgjY\XXWSOMJMTXTNMOMMJLLJMRTPSYRKLOLOPSPNOPQSPONMMLLLQPSRROMNMONKMMONRPTQPONQQOSRSSRROKMNSGNLLKLHLLQSux?APKjjfh͜k]]ghzOLHIHJJLMMMONKQGLKKLLSZ_USLSYjwscl"]lznt]NO]llo|wu*'44BB:0?AbF\&@U3;OYA|gfԺ苓ςƚϽóĿȵø·½ʶ򀎲|<=>BqYv͙Őȴ[uyY}H5"&5Q^[@@\EYIFQ;>^TM8@:5ANND>JD?7<@~ ~~~}}}~} ~~~~}~}~} ~~}}~~~~}~~~~~~"`ɪާވ|~ʲZSQ+334679<999{wP|Ş;xknwutpglr:@FFDCECBB=??<6=506:;85457::<98687789<58<:<<<689:9:=>:99=589:88778<;;;<<=?>::>B;;6634321310145454127:^accfkkntjŮK>JK^:;99:56657:;3,6097;:;;?F?@A@DWq*圍Լ⓮ʀ[xf`nrhwY]uku~~{ouQcd;D@>@BEIKNIQuvFw|zwpv{y{HTeikih_ZXRRUSJKGIQRROLPNKJKLJJOMOQRPLMOPPPSLNQPSSR2LNNLNNMONNMOIOPNMOQOQXVRTZWSUURQQTQRMPOOKKMQJHMONMLlMKxltGlhjlhtEQedvOQLKLKKKLMQVOFLFLKLIMQXeUTOT[mzy`GN[kbylsgz]PUkld\{yv?B-7<2)-F`Uey%/1=@IpIKxiS{ҵއҼ퇋b󅦵»¸ĺ̽õϢ@;>>=6=?=?>>B=<7;855562721554489463=c_cc`jlww}Y𾵥JAAM\w<7:96<658@=63447699;9:A<<;@FIILJG{Ttww|xywy||zJQci_ce\WTNR^olLILPUSQRTPMIMLMMMLONMOPNPTNNOLLMNPQO%NSNOPNNMMMLMJONNNPTSTTURZbWTTWSQRPSPONyMKOJIOONONOLLIIv|A|sjca^zvw:N\itSLMLKPIKMYWPKIJJINLNPT\RPQVbjuYbCR`Wji\i}jd|VJ[^\Xr~yv@8@#701+%\DIm)'28=OZq{z±熖G}a뇣Ǡžν¾¼ƽ¾ܫqC;??=@D~~~~~~}~}~~~}~}~}}~~}}}~~~}~"ʂ̨Ӻey}{pAZa487987:9963u}sϪˍTqxvtrtogflp:?AA@A@>98=A[m90233:9;@;95789886589758<;9:98:;87865975953665789589899<<:?=>;<>>==>?=;656455665665355476526XZaXcdqrvy㖕ĤKMHKax<<8779;57>D:3577836<@>@BB=@ES^ͱ"ѶᰟȔ⃎Ā^`xxgu`p]wwiÓg~}wpnOjm<@==@EJLLIC~~glotu{~{|{}GT^dhgbaVRUX}RJNQQQPRVONKNOPPNNOPNOOPTTNNOMLMNPQMIPOLMLMMKKMOQLNONMOSTQRRTSRSUSRQRQPPMMKNONLIJLNNRPLNMKEF{~toegfVi5MW\uQPLJJLJFM[fQJJLLOMNPUYZUTQSagshn|"XzggsXi{jZvzQTSRXcl}zLJ-+6//"(JD4@:=AMchzbSUέĿɐޅPc\H򆛤ЧĄÀƾ͹Ͽſ׿¸D@;CHEkmeP㛭ͶMgi]#$# AAdE=&787?I6(7KC9,e]dlDCt=8=@EF~~~~}}}~~}|}}}~}~~}~}~~}~~~~}~~}~"剂Պۡax|gPNYZa7;;9:=:<;txvNFg?<=?@==BSD65375647886467::778986759879;36875673874545785749:<;987;:=;7?;77:<;:62526776556517344030^YQXYh\]iswƲݧtU_VVo@;=8784596876455=>?ABEA@ENZ͡ـ䰭ˀ턠dWrejtdxxj{wsx|l|elF\oos==>@EKLRPrxL}ޢYl>t{wvz|S^`geh_c`VRTcxcPOORNONPPNLNQRWUPPQOLLONQPJLRMMMNOPNLMNKMLMMJILONQNQOONPORPIQQNMOQPPOKNLOPPNIGLONUQMLIJD}}|~Xvllfglc}BJhhvRQQJIKDFO[kRMLLLNNLOQUYYWVO[dpߧyVhxr\mRUk^rg}v XWikSVrrKZ1!+*57A8??R^UJ]NIUxO͑úʳ󄋉]__W~扚̀ʽȻ´ÿƼчbEA:;HGsldT`ۓβdheV:#"$MXTN8?+6@CK5T87CB;8;9435:@>7272:;?B.CHUaޘüɌȃ̧oaWZx_eygw}^}|]ejE[pqz?@ELMM{:;Kyʲg]uww}ty{uyWd`]\WW\XWRQNNPMLMMMNNNLMJEMSUSPOOLLMOQURKKKMNLHILKKNLLNNNOKLMNLPONLMMIMKONOOMLKONOPPNKNLOQONMHJMLNRQPNKFvfTVjmst=78:wy|ArݷLequwplkjden:?@A=;:<=A<:6753546;:78765599;96169;874;;<95379:65556469>=8345550427756825:<:987541755333668465984:<:6872UU_\]VZ\Xbuqy~M񍓈ӷ؝JJHYz88:8:964369<928;46399;>??ACHP[ό"ݚ酊ջ|suqT}mgmyqw}SNiLToqz<B4g_`zkTۊ̽`\PXde"MJ=LYJA6U16BHD@?3;CA=?>u853=@D@=99 ~~~~}}~~}~}~~}~}}}~}~~}~} ~~~}~~~}~}~"F΂ఘƒTB}YVe33kg237:89;xy޷Plonqn@idjs>A=>>><>A>=::67:878899798:7;<=7369878674:640548875-5469A@85546636526367164549356968<85886?<6:888;l_U^^W*$*-fwy;Mnܴ=?Xwq:=89;443:79958?=9688;<@?ADGMaЇׯўŹ  ӀsQswZel~lrxmï׼{YJnPZv>=?@FNPPM|¡Ƭɖ_t||~W]UUW\^ZVTSQPOQTPOOPOMNQMLLOOPNLMMJLPPQNTQNIMMONNO)MOKMOTSMLNLLMLMLKOLJLLNMIMNGMMMLPIJLOMPUSOuRKKRQOLODBF@w|z?PQeVuzhl_=LzNNJLMIKKRLKNMPTSMGKJPT[VVZ]mu֑gvkh[s{|]Rfow|&16@0_d8C19:`gLH\PSTɋƲȱҼZh^ռƎžǽľƺú쀀v;C=91OFbn{򔛤˽ǻ_^TXe4"^T@@SYImC;5=?=@F?=>BHND9><5< ~~~}}~~~}}}~~}~~}}~}~~}~}~}}}~}}~~~~}~~"ׂӶאЂIAh]nrqxs348:477vp|±Lkuprijfgedsz@@>=C==@GA=9;:=<87325347::559=6537:53432874454567636567<>8645288:66654885501;57566755;<779423939:895:69meXX,XZ'*1rxwxKqݮҜ[=]mt8?979485897;27??<899;?EGMiwՊ"ڧۡހܴĜ_huaaWgYdyTjԐruͦpOJeaCFIPOQK}˱r[s}~yyRTRQTUTTRTSQQSWSOOLJKFJOPMJLMNJJIKLLMNNMPPNMMMNNMMNPMNNRTPNLLIMLLJKMKILMPRJIRJLLNOOJGMNINVRMLRMNLMPOSOQGDFDzwLWwz_Lwlffko`O}MQKILJLFNNIOMOQRNGKMPS[[Y``isڒ"ȓz]^RQjr}^i{TT; *7*9b:@A!1&-;F#JUTнϽ񍣭վsPeVW¸ǿ»¼ɲ˼􋈞mCR;3N)4k\tꅗý½ygiVO\Z"d}V@OcmO65@#!=?;>7G\F8AIMZHB5=~ ~}~~~~~~~}~~~}~}~~}~}~}}~~~} ~~~~}~~~~~"ʩݤ˿~Ceivql4/0475689vrK`quupjfigkos:97:{r6>C@<7:<>?97555354:74447588766521,58754556676445679772327655546777665064756574>=;;9/2357665523717qg`X.[]V^eqtzz}ܸ썀ƊUN\c7;7666878:8;4:;>;9:<<=?:;CJLfsٙ"Ԩ̰峋ӡk]Tr|_f{{qjç{Mim}<:BHKJMNKf^mzvt||HKJLKOMMOOPSYVOMLMMLPPRMKLKJGLMJGMPMNJMLMLKLNPMKMNOOOPRPOKLKMKIHIJJJIIOQMGLHLJLMNKOMMMUQQONPNLIIJNQLOF{wzsmfeuPjWV[|\mORLIKKKILNJNMOKOMHMPPQWXZ_dj{ޞ"ばchVtUdPW{_ZTfr07;$;@NRE=6.IC9SlS291=E/3458A+<0=NMTQB;38=~~}}~~~~}~}~~}~}}~}~}~}~~~~"Ƌู匿կ҃pB}deup887568757:xshz카{Lcortqmmhgc`oj0ffpj33;;;584:876555668:5263575864652/35::73264783/-56575741545751348;8757445665775:;>:8144.79895335336l^W,^`]gyyxœ}OT)67:66678779>;8779;?B?=>>>?GN\qל"ۼжј݂숷s]ycx럟σuL~ek}?ABCILLKLMpxң{l`ry|~|yww{vs?}}v?ABDJIJENLIJJKMPSTPKILJJJKOLKLONOQMMMLKIOQQMIIJOOONJONNQMNPJGJKKKJMNNHJKLKHLMKNMNNSPPNIONKMLLLMLLLFv|KqR`gq_^siHOQPHIHKLKLLNNLJMNLRVTRUVW\bk~מ{"kfR|Wq]YStuI820SFoo_lpJCL4JIHQSPbidܾ܇ɲŸөǞmfrρĿ¾ü޼ٵۂžμi{B=26#hK'7tqo⅘sw^nI"Yds[YSRd\QU>:?/2}yBG+=.q=FJ>5567~~~~~~~}~ }}}~~}}~~}~}~}}}~}~~~}}}~~~~ ~~}}~~~~}}~"mݼΧɪʃo{?wZ^ron6659:8879phxSqϩrQnv{yrojg1,hmjjprtrl67=;6vo54685688999;345787621.4556533<6747237566;7710-3443/468;<7668955567445777654267845424053b]_Q_dfkrwfsx䔎ɹןHO.;=855:376589<5157?<@@<1@=>AEKYuӠÅŘ˽Ԫبjw}wh`TxȄOhm|{?ADJOPPLIp}Tfjfcy}~{uls?;|~tu{usv<;DD?z??CJKLMOSQLMHJLMMOPQQOQLMLKLMWRQNOMNOOPKLNPMMHLMKIILJIJKLKKORLIJMOKKKLMOMIKLNLMLNOLKEML{}{{uasto]\dW{f|IQTOHHMHKKKMLQLJNLOP4WZSUTX[aj}ʠttaUY`sW}asH:F]H[VMc^G\0A*TOOTc^Go̶ا͛aVkĹɹлǾſĹûƶ˴ƼߺRnJ:.$$6"ORs¼Ͽķoq_JeD"o;Zlf^oh`GIEA:6@OKLI[D2flf@F<6/27~~~~~}~ }}}~~}}~~}~~}~}}~}~~~}}}~~~~~}}}~"ⶦЀ继ͅC@gdlsp9:8<=:88:uup~kMixutosoi_1isuqrssxnoqsmkoni54355467977876657682227<5;<=>@?CFIcmȲ"銛ʪ®ӡ͉jf͸bj}\vhۋˆVN|w}@BFNPQOKGzqxxsXZr~}~zxloAxqyytzy|x}sqtt;BIONLNPRSMKILNNPQNNNOQRLLMOUQONONNONSNLNNJLFJGIKJJGFBFKPONPLLIMOKKKLMIGLPJNNOMMOQMJN{u}|ywep|T]VFdn~׀wPSQLLNKGIKLKNJKGKOP4TVTTYX[eiws|g~ýinbidV}~Nq:o~uRI;;EGPD;A!)J[WNTT8KȲƭںtOWyĽôǽƴ·˽ƸϨ@ADKnC-<@V퇞õqo_]B}"5^Wiwe_nuf\4PKEHIPFJ>KD@[fd7=9C=<673667478745:>EJQMNMKLKMRMKIHPNPNONPVOJOOPNNRTuxxy?BVOcjlv^axnQTLUROGLLNLNJLJLNQSTUW_`_ojr~}vtxf]S^UX]rgbLUo9PVT8l>GF@?<6=L,?UXQPEXLËͳٻʿUYx܀ij¹̿ʀ»·̾ʿ퇌<"UILV>HQ-SR:Lºotd[RN"TKYlyhZ_q\K/(+_T>53)1JN-.=f-RFluplgijjjljcbkl530157760669:8555344551)/12445518436692296;55223045255561268;2385533545657965577MI782331210-VZX[ccegiyt}=CH̢듑ĕpam===CC=5756.;88:4668?=@CDPWo}"ѦѡыΟꈣ_ffhg{|^tmpezdVK=89=?AFLMMJHC|z{zd]wz{|}GXNz|x}}~yxyx{{<;@CHKJKIMLOPNLLJFJNNNLHMOOPMKLLOKKMKNIPPNIKMKKKILJC?;=BFOMMNMLMMNIHKKNSPJKSUaWHOOPNLQROIy~t|9AEYKocc]npQROSVOIOPPHNKKMMQPOSTW`]hnpxfڠ}vkec_igf}L}Ƹ^oLXp)>FF>DJ]D550146756:=><;97s}T{ѧMjpsqjnoltEtkmjhiecbh31hkk464279:54483257:;5326655013356315867542375765975435457863337854412265777;67;989C3e<350.62,02`b^]aefklyu?COc҆ꃈ^`vA>BAB<97283985958<0<:=EFS`dש"ٛ}i{nipzmXvj}xV\RA:8:?CILLKJHC>I`qXtw|{}Fxnwz|}{}?=@?@IMPMLOPOJKKKMJNLJDQZ3cQFOPLTTPPLw}4ACOllhNh^^f[gk䐈TQQQTONNJOJJGIPPQSHRRT_\n`{觥ד`[^_hcowsdlvsV}B8rJ>9hCBgZúǿ臕oe_hr"dU^gdPG)! *+.'8^Vdr\MQWa@E<~~ ~~~}~~~~}~~~~}~}~~}}}~~}~~}~}}}~~~~}}}~~~"ŧۋ̅ȓґjptIQG84588869>=;;<9sITאZfqu}noki8|tmlkihhce56m9p8855m78=;856425=<854597993145669456975233567757:5505756o645336:4112/55986:467:93Ip_Cr76.7.018eb[b`^oqx{vH>nےarB@BD@;:86;998889=C6699?AYR"جיʀvƏlamifuum]fXF;9@>DJLLJLLNORNLLNMKHLNKJMNONPKIHMNONONNMMMJIMNSOOKGB?=A@?GPPLNSPNHNMHMIIHLHJ]niXMTO\USNOx~hABglWmXgoseSQRSRONLHLLKJKPPU\NPUTWXnd"ݭ{]bbTZ^hfjt~hλ\zXEDzCG=K75-@KI>BCcW;vig`̽ӓᓥfi򀍍ýĶ鋏]976"a;epm@FH: ~~~~~~~}~~~~}}}~~}~}~~}~}~}~}~~}~}~~~~}}}~}~~~~~~~}}~~"߼½򂞯woTNI<5889879:;==>?BX҈Fgkqwuklinoxvjfihfdgirytpnospsq9;=624524:<7554798:626865797:776344458766653/2446pkkm21672/32056;=;819994msVGrvm847bb:9742;ADI"ʡꅐӷ΀so_Qeeub[m~ri]UE88;CHKLMMNHEJPU|pùPypv|}y}t}~~~~{psw}|~yCIMHFIKKMPRKJOOMLKMMKORNNOQMMMOMNMMLLKKMNMLHFF{y@CINNMONNPLRQMOIKKLGuRRXV|}|~{GOqce{`adbŪ۪MRSTRLIKJLKLLNUVTURPRQMRdtݲ^lyu^\apoch}fnjmmlǩPR[E8H7#0LG'?HPK>8EO-/XenƓ̼ܝĪܞzrğ򔟩¶À񐝫᷻테܅zL:O>YY`\57B;d]悊ľŭñqgddh"aR2{w]hRY8"!-8, "8nFGILA9y}WE02<~~}}~~}}~~~}~}~ }}~~}}}~~~}}~}~~~~}}}~}}}~~}~~"ʽʻ󛬯ws^}MB;898:;979:=?=F[bUţWEomrspojnsv|kkellfemu~}~sosynp887853534577965556887/5563597669755241522565643844lnom1354.267454:;;9358=gub2149q:=8nmspfdac`cgjxxzM蹹䧅>@DB<66=<=:;=?FD<3986136EMMJKMOKCT~xV{tsXRou{~~v|{~z|CEGHFFJHKKLMMKMQPMJLNHNPOKNQOOMNIILMOLMJJLLJMMLIEC}~ADKOMONMOSNPNKMJJMRLNLLRWVuwxT}ipZhqOOWXQKFKLLKMMN[WNKPLLKKLV^W"e`~dwwwxka_|rapdhijpnkkpgWTD%/A7/LX6FGOQK?<==GPknŠýؖ~ޥ󄒛¼Ļ܏ŬɂùyNM@S16EQQUKjh`iv~񁈓ƶϸeodb`"-0;8mD*J9(!%BI-!9uDACCB>>AD@PJ5@~}}}~~~~~}~}~}}}~}~~~}~~~}}~}}}~~}~~~~"ä񬍣Mbu~ocK<50469=8889=@AFh~|xϝi7jqstquq:uu|FO}moofbfikz?H91lj374::7303645564562556895535658567848431364534697566jkkhm317523965329=974269dmh\/2696987876][[T]gisyGWۉϟ~{>>CA=:6=7<:<==C>=33542445;ob\"߇î惈搿倊v[jjuk[pxwnVv{mpyloeJB:>BGMJJKLNHDP̊UC{uyANQ{{IPD;FGGNMGDCGGGIIKLMOPSNLLNLONNNLNNRPMHKLMMOQLLKKKQOMJE~zxCEMOLKNMOOKMMHHIINQJJKOQTTTVUQ|v{DKwɨfg\sPfMMWWQMFMLLINOIQLKILJGHJLOOk^k멳"dfeXXa`WqeecghjpecirnqLR@1FCQBVi@:H]fUPMHP_ъ^Rϟ|Œʺ킒Ļγ큏´ݺ遇ʈMMB=7GHAYgjdr􊉔þɴjiff"24G/tI&N'$!?gD"8^}BB?=BC=:BEvEFD~~}~~~~}~}~}}}~~}~}}~}~}~}~~}}~}~ ~}}~~~~"ʜݺ͘u̞v}lcM=5/4<>?::9;=>@KѠm?9<{sqtmlo77HmXyx{n4357?9;5.1428:=853/36647734544346660315432666229737377323641454h345358856;55738=97443625k^357g6766755cUZY^ejlx{I[怉񢮨H<;A><;8:=;<=>>A?=43146034cnceY"Ūſпؐmpbd\wZzmͅtuivmLE=DMMMKMLMIA>T՗UAED}?BVx\HGHGMHLIDFMMPPTNHFBA@BDKNMONLKJNMOLNLHLSPNKKQNINMLLKJJPRLJF@x;=BELPPLLSNMOJMMKKJLMOLLLLLRRSTWWUzztJG\f]c]QKNTQNKFJOLLOQLJLHGLJH1JEJKvabYqslf|{YwYcejlna[^ldgcF]aEBJQG7^LBNdiJYrSޗRܕ޵yܾ󀊏ź¿űꂂ셐ö瀇pCAU8J0I[rgUźߙLTeie"i;L)gHB??H&GNR/H8PDA:eM5.~~~~~}~~~~~}}~~~~~}~~}~}~}~}}~~~}~}~~}~}~~}}~ ~~~"ᯋ֦ʑxtqe\?77=@B=<::<><|A<93578?:352323::9642.hmk237612669445633-1224775310557897132442551f359247899984448955363422jd677jq=57<:7:^Uc5eiowy|}M`파̰ݵһ;8C=:877;?<==>?BB=1288020OXXSXU|"񼫾гٰǽζz]Xlcl\򘔁zlnzRIBFPQLLMLKIC~s񧇨bDHEz~~~}}AEQYPQVSMMMLSMILJKKMTSRLIF?uvy=BKPMLMMOMKNRONIKLKMPPNNMIKILNNIHKLTTLKHB{:BJGKNMLOTPJJLONMNMNMNKFKLMWTU_bWRNuNKzecw`po|IMVOLIGIOOMLMLMTNKJLLJDHFti`ZZP"̏f}tlYb|_X:XaE28T=>GLDzFSfJ[:LOڀʳч¸߉xiƷź½ɱ˿ꈆTcor7.>!1M(-SpvYLf鄎ļܢ}Zgg"pV.|HN>ARDEE061yF4qs6tUjaPIG?~}~~~~~}~~~~~}~~~}~}}~}}}~}~}}~~~}}~}}}~}~~~~}~}~~}}~~"ǣ˗ܟިٴuڮsG;=?ABA<<;<;:ઝ֑J;<:qglllkq;??p5::;877:9<:30156216743`cknthhk544644;4542.02035:6512356769624447654346669668<7423637747475964j45943r;5:=>:zj\674i9vyw=OyǴtvD;:4489?:;=CHNLE:598.54NIQORF^g"؜ڌƻr\c``\\Zyd;}jٳXMIJRSOKMLMLHzwu柊sMIF?~x~}|zEKJIOSWVSQQMNMJJLNMJKPQLIwt~{|KKKMLNTNQPOMKKKLLPNNLLJJJKKMKHLNSVOKJHECHMPOMLNMMKJMLNNMQMONTNHHHLLNXXWZaYQPJE{CETŕdibxRh衉`ONKKLNROMKO\bTONNKHDHEp]YUYM_"̠k\\{~Xx\kryv:S[P7*d5*),IGNHRBQ>0aǬȟöԿukl󍙙ǀǺcsv|553[393 P~wXyſǷ殪bZ"{m>8F>TEIYG?BFB7R998zy笜P;86looonox>A:776:76046778204563/55ia]jokkqie985633635422572467431246886441565433345574101686534557:87666956664641677=IJbԮʂrnC@976:6;9:>EQZYQE>?7b;qNKSWOIQu"ٕЋ‒Ӻ苕񖨶ξ|kg|obnڈ~ʭtRHHLMONOQQOOL~~ȉQH@:t{~EMJLPPSUWQQPKJLJLONOLHMMvu~|GIIJHMSOONMNMLJLKMMLIJGFHJJKLILMNNKJJKMKNLMMLJOMMLLLKJMMNMLNUOMMMLNLLQVc^YaY[KUSKGHDHMDjЛabhjmr×aCgmƇWRSOOPMSQMMQ^`WVRPKFIiYTXXONu"bgz]edZ}{`\]^gpQXWGDDLW@,3jiqOJJZB>{NbƗἙʸǺ쁨rvܷ򎧞żȀ䀊|?A88:;lA MHjn搫øѵNP"}UYKNC:TVLV'#()]JAI;J:h30GHF@@M~~~}~~}~~~}~}~}~}}~~}}}~}~}~~~~~"Խն؁ՀxsռfJICORPMGD?7:xU>7:rqpljgm:;997;;65866527537<753id63dfmsupif9956633213665657:74323996753239553334875972/.2455549<7:6:7577nlkl467:365>??:@<5<:536ovv:ÆϬ懱}mBDB?<6888<=AIR]]UFHx|_][\LLNcx"ձߎ埋faaljebbbk[yrx[LMHJKOPQQQPNLF?@=:;;HBLR ~~~~~}~~}~~}~}}~~}~}~ }}}~}~~~~}}~}~~~~~~~"˅Ժޑև]wݴwlv|h]^\H99@{ߣT>:8onmf`ijp<>;9:88585777;;4<98775317jqjlnjj5683433013767:75;=705437::25556644597954495221266896996ln;6447cqi437>JJG>9?:8>=@ILgrdsgYVHEGapq"ʿۑڐŻ[efvqfa_\[]xekbx`n`YVSMSUVROOMuJEA9wyx|LUUPQTVRQNOLJOPGLLOQSROKK}}z|>DHIKKNMLMPLKLJFMPOMPfPLKHFDILNOKJKJIGHIMNPNPTRNPNNNMOMHUMIJNNNOSQUUZbcYU^^{_a^kphdfTZNCut~o}N^idPKOMN8STY_VY_ljPPPb^pŸ[~g|tvfx܁wlk|y.4 5EOQ8#(1E8CC=ETOYfw؜fͺݒZohƺɺĹĪ傋yn=>7?C=;c#;IY`~q-C\P=;568:?:;8:>@89757332574hcejkkmld034604455766699432337=84654584436569339513756889:A6fh`4132o`kh447@vpow;8;>CBD@?gdlF搏ƴְBJK@>=??@>?GJcͫudZJNFDdeu"I[Ɏֳىݞ̛fOwTWo}eVXRƪfba|e|v[mhn^eldVMQP~ǀiJC?}~z{}vRURNRTQOOPMMQRHIJIPOONLJG~{yHLMQMNNMIFEGILONMMPLKLIGJKMNNKKJIHKMJJNMOSVQPONPSYMNLJHQOLQUUY_j[\^[Oardf_lq``ObN_nɦusˆLY_RLHINOSOPS`mzxݟ|eVKV`cv"bmYuZsqv^XqqXPZ>!-F+3DONA&&F6gwG4oeS񚈐VfhTac󗥥ĸɾľ؂ȹ~hq?@3-#8=TOJS^+mG:@?GAA:>Dml^>PֹI?<=@AFAERZvhbJQBT_qal"t骝ɀꡠ鿻֢p}[Sa~`U{kiYqNcvoNGwkoqeSKNTլuYKCAwz{}NVRNLMMOMMOQQNDFHJOOKKJGIJIHB:wy~LMONMNONKHFIOMPQLKKLJKMHIJKJLJKJIHKNKKIQQQSOOOMRV\RIKJHONHNT[WXVeZ\XXc}W]^njhfkzra|VUOnʻ~ƮUKHGJPPRRVZU{sohLU\fa"[tjwlThlcPxUzUjzx{x]DdH9!;[eYJ1!;a[vVCHk޹TZgfCEؐZdgӽ֓¹ɾay@AAIS>9? RS9h}[iƿȾ̿Vxο"^Z]$1(;AD>!87&5KZMAd4S[Y2=FB:.GH~ ~}}}~~~} ~~~~~~~~~}}~~~}~}~}}}~}~}}~}~}~~~ ~}}}~~~}~~~~ ~~~}~}}}~"ơȋ詍̈Դ䄍t㵓uV?65pmkjfnouyy=<:869=;65:9=<3754543400143777mjh.304535431415768752-03589832/3e/-.+.3683856:85641::;og2,//23frnh357@6nr;5y@F~q>`^pK󌒐ȶ۳C>>@CGIDVЁ񂇃pjYaDfo`i^"󢕪бݕyl`\oosybaᘯ{q{qxhn{ty}tZMQK{{ke_LjqQF@>~v{}NVUOKLLKJJLJLJDIJJMLLMKJKOIGD@~}DMLOPMMMLJIEJMMRSNKIIFHLJJGFDJIHHGJLOQJNMNNIINMOWTQOJKJIGMLOXP\SUYWinpklc\]WtRbkr㭍˨MGILNPPRVkwWZRVV{wuYefuwc"tTrfiwoii|ZlkfRMdzk83+"?YTS0A=YoneQTg{Œ{wjif\DCH_^e˸ݺ¼Ƹźۃ鈅—āXuABA??;59c)[!yamg՚ųµjjǷVRJ{𹬰"ko]8C"AB81ELC):9/0213Zpobtj3<76e65:FM_Rpmsr_l`"愠Ƭߎٗ͋ـn{|zaakouqtpsj{osyrhWLRSIHOHrЏ[LEBDwx;=~ELSSNMLKIKIHGEIKJJLNLMMKLOSJIH@CGJLNNJMOMKILIHNPRKJHDGNP@CGIHINNMILIMKHJNPOUPNPPRKLMKKLWTQTRSUVVVVеe}jvvs]gzz}NHGHQQTni\_WRUUXcnruvux•"mv\[SUcxsZye}Tl~wYe\{|RKFRD2ETbaAyp^[[ယźǻĴ⁌ӻ򆜙􉄁ɏIKcDJE?;YbfkjN@SHCYhuTcӷdb[WTRKoXʵ"w=:F=?F=47@=,BX3:1cV{`T[DH6>_g~~}~~~ ~~~~}~~~}~~}}}~}}}~}}~~}}}~}~}~}~~~}~~~~}~~~} ~}}}~~~~~~}}~}~~~}}}"о򰄓т䂎lyꗔP@EB?=upl33iqus89995688588976::7757:854457576ha1-+25542231-/22345>534848>|@DAi]nzƴˈMGALk߆đy|ztxEdo"wnӺ͸ʅ〄}z]VjdwxbpsҮ^\^yxok\KTYXUQSSXNRHRKAA}}=;{zELNMJLLJILKIEGPPKNLLNMMNMLKIHC}{CBEMLMONMOLHIKGGKNSJGEFEKOKIKKPLMKLOPOQNMOORNKIQPMORPRYUV_^~][`usdZJHTTpxSV^XYTRSPP|Vqt~St灓atg[]{plX]XW[M]OH\KJ-/GMK^mL$=K~MI|Ylom|wr_LD?@<3;JMFaVVιĽ݆Ĵℝʺ߆رfO*YzC?>TPVa|q;J_`Sp^X`yg{^`f]ZSRSNGwnbŻɍĕ"yJQ<1l~=?;9?FB:;JWT7A?wGAbV}Źɬ얦xVF_ឍ}rspR{"uIۦ߀ֆܥǁ_gYYryz{kx_ʷlsrt_Ycq|JvombUGUZYXZ_lnZQOeV>=zuvEMNMLIMMJLKLNJMMLOLLMOQMKJJJIGC}BBFNNMNPMNLGJKIEJHHHKGEBGHDDBBHHGGHPNNLLLONPMJMOPQTRLM~MPJNQOTTVVR?EXwlq{ք՝~TK`lUVZUUTTPJJIzu"ƃXa|uh[n}fst|SWYO]JAO?<:=^[VZT5?E`}jQRX_PPdwPvqxmTDA:988GSNFX\VX뇕ᄥϺƻȲ`BCZ7C]AIZseMUhbZc`chWY[YULIJEBBռ"mMjI5_kBHED?>:<;DG8oVIGIMie5262~~~~~~~~}~}~}~}~}~~~}}~~}~~~~~~} ~}}}~~~~}}~ ~~~~}}~"ؿÍི~̎PIYE9uurhppsywt;:89:776:743345454889;=2,48;98mg126955565472444/3051/,2345543/1*/2+/022476897863687mt889627oo2-e_4lp6415jhjl>yxuadyڨлҴv쁀ݹut"S݃òߧ釙eb|bif]ZnojlwzxLLIvmdWKKTYZY^z_VZz[>uy|z{y{~DINOPNLILKKLMLJHJKLMNPQLHLK=?GPOONNLKLJLLJCGEIGGEC@EFCEDCLHJMFGFIJJNOPNHMPNOLDSRSPKLB>NIHFKMÔ[9;>?bky}wv۞Uu9TUVTSTTQLIH|[ϲx`UWlwlar}mՒhU]Z^_UPLC+(JvAJJ2C4n}=B\]UZk^qadxRSL}npdSGCA>?@FTa;trn:IRVdicwq}KOTNpibRE=BIMJJLcF?gelkeħ퀓žº²ũſôzÃ[) ERE3?SDFQPQi[lav}TPPJBCII>k·"ځJ^`+7CFH4?@=;@>HO.cnF+,88l957<9872//34446855768724==;5fhjg1053651332ej32004423/21/4760/114369545:cO=8:7898mqc4rpgeih202hh7kon53dfc9961x{}u{ԎѼ򇅀ʈt"N@ꞻㅋߋVWʱWV}pleuLJLLFmaUOIIT^YaVCGj󠗾tsqQ<=~{~~vv}{{HQQNORIGKLJJLKKNOPONQTQNFFKQNNMJJGFHFCGJFEIEGFEFJKGIKHKJKPMKLRiPOSMLMPNC@@F?>s<:?Azv[rR9<9FR_oszrtFtZWUTWUNPTRRJzVlzzyvmt`l|}uW\zsT'NpqP;,6JNDMjWMKFALSIHskX@RwddcϺľίì¸ήx]}9. *;?BSD6G\bbnqqĎ~sPSTRROB?BFHEsMϷ"qxrGN*9TfFC=A>=;?EM.1N{WI6OId^9~}~~~}~}~}}~}}}~}~~~}}~}}}~~}}}~}~~~~}~~~~~~~~}}~"Ϻͷŷы­ʋ셏Ѧz˄oT<48rvwxvqponp;<9556777569336356654:;646;;=61jnh34522/2421000-01353531/0154174454976369HG7478:89sn/3nmgea]014243itjege48:99~ꂍ򸡗ƶ郤Tϝ"ecń񒛿ظ񻖟Ɍh}_a}~tyepxUzUULKIl]WSLKIMMVguvqftvdL??~{z~}GNOMMMKJKLOSLKMJKLNKKPOLMOQOME>EKOONILMJJIGGEEEGGGKIHFDBGHFMIGJJNNKFJM[VMMONPOPJNBACBDD~>?@BEswikbUE>jgtzfۚzjYVUTZYOPTXTQOQ`"枛^~gwjov_]q{gnep[qlV^H{]D:8FN@8AKL_oO?:nkcshG`rTWNPPlf[K?BEIECSwrPzqZa\c󅗢⇚ȵ̿퀋SE_FH{S F6)HDNL/QʆIYefh{EKROPMB>AEGMWIpP"ocSX.8%@IWlPJ=8=20PNWI3~}}}~~~}~}}}~}}~~}~}~}~~~~~~~~~~~~~}~~~~}}~"¯˭ԕ댑Ѥ𯅐Dž~X<6;txvsqpmqor;<662445677865732535879967=;7767mh1534243641.10-24533431-2124384;45656258;=4/38:886237>=pl^\a]31210cgpj5o8:9;@R߻u^`䆕ܸѴ"ӂxߧ֌𶦱Ȇ՞ɋ}{gVfvɽDžhgg~c\NLLnd`XSKJKHJMOQڪbLFE~|zyz|IQOOIIJKKLKOLKMJJMKKMLMNNLMLKF@@}EKLPNMMNKJIIGEGIIGBFEFFCKGJGKMLKFKLIMLIHNPMNLHINTQFBDEFCFFEGIWhj`Y|XveuzkZp{}uӍkhQZWRT\XURYYURRL|jZȬݕ _zcg_abVe\TX[zYZajiYZTqNP<:BUL6:EK_sLBp{^UbJfyjeOOSpjbUI?BFEA944vy`µ舗¸ƼmUgFKIeEZFDAKQ9EnЍNLRє7DGMHJEC=DEGKXK\PS"YLt??+**@O[^c8+;9+0:D"$B.+@CBEgK0~}~~~}~}}~}~}~}~}}~}}~ ~~~~ ~~~~~~~}~~}~~~~}}~"}£õ뗮֭ĵĩyY928lsztptrtmu>=;7774237884565646557:779;=57637k44940325841103212413057;;99542536678842477646348:;miaiqf10311dexb558;A>}}t꧰򇛁{ඣ ᡟ͡etXmRXw|yrmnqcpnzIHKJxph[SNKKGGHH뼏ȖhMDDzx~z{{}xLTUPKKJIJKJKILMKLLMLLKMMKLMPJIC<=yCHONKMKKJJJHCFGFEFIGHGDHGHHIKKIIKKLJKMMJKLJGJLLLKIKOPNFEFFHCEFHLK⟥mldpHdRqpcvvjU_TOV[[TWYVURNUr\^w|bt"wvLYrgkDNXPJNXcfW\kVR=[I27@ME8@>AFEGIQgyPMUqvaf\"BJBX48U=:L\QOV43>7027?NFl=PM;?C3-~~~}~}~}~}~}~~~}~ ~~~}~ }~~~~~~}~"ϿηҼ蚲Ը}멸h9598sytjrstpu<<;7766335573367556868::<9<67567885583114783.2131221443553268<9888556434577445640653025?;mrpzl52324hls\34:BBjwzxbĿߍؼūqaaPeoDCSA<0%BPF?M>HjIϓ隅C6EEE>=?BFKJGCGQ~g[OWQcs"@HG7AVFCFNYQ:CJfE;pj_4?wm@H>8F@3~~~~~~}~}~}~}~~~}~~~~~~}~~~~~~}}~~}}}~~}}}~"bɘ޼਍뚳˶䱦}mѡZ94767vrltp9qs;=;87454544634576564489954688uq688.,158;543./.565659;955764445<7342///6742210154/TXk:?;nyrnn5305pnwk47y>CILKIGIHJKKLHHEHKLMKHIGIGGIKMMJC}{BHNLLMLMMKKIFGGHKMMJJKIGIJJJKJJLIFHIJKJKKKIGGGILKG|PTMHEAEFKNOD||ڪ|{eimzx|Ѹz—~[xOZ]XWW\^VWVUSOOLxaz}"}dstkelfT~ds\]ocPIIOWO:F8:FLG?>DQ`|TPUi~RYX]mqt~o[PNF@@@:>mc\wvfêƿǻ삊ʄԶޖ`P,2O;?i?OX=9IJ=:;EEA<<=CHJQJIXZqEHxQ=f_Z^z[h3d9::6loowok6@worffiV̨ȝʊۢߍį"ƐĨξ솟ūViVyl^TWoˈ|jeyxtnjkq}~p^UXSNKJKKM˂ÊgQCD=u{~{=~>>GKKJJKLJJHFHFFEJLLJKKLLIGELNNMF~FLNOLJLJCJGFIKKJFGIHJNPOJIIKJILJLOLKHIGDFHIIJ|uPRMSGMLKIIOʐqZeNXxYatoyжruqdOWZUTX]`YWW[POHHhme"`pnkYzwnySVS_ollHFKN+\T8!?CND7r?BOeSpQYcsW^YYejfgtoYJMG?=A??Fed]dtqkܭ´Ż¿Ͽ݂Իޒ^W"/iJLaPN8.2'-D?KBLwxkYc__z??EB=>:>FKMXI8.6v}xhX]wb"W[\i`05.(F.HUoSMRRE6]\Zq>e73GIH9+~}~~~~~~}~}~}}}~}}~}~}~~~}~~}~}~~}~~~~}~}~~~~ ~~~~~~~~}~}~"ϱ՞邜ԏܜχƾ䑰֭}[@9:nrqspop77::9586566557:<9968<;<=93139:<>968773.//243b`411473/122565.10/.ZbYRMF165i8207=?Asrrrg46:hnhgbcG׭燊ڢ{{NJоڷ"溠ʄé뚧ﴃ“θ˓ÂRSUVt\[Zԑs[t{zrifjr{~|um^TXSQKIKJI獟鶚kICCxyy}{z|>AFLNJJHKIFEHIIHFJLMJGOTNIHGMPROE>AAFLOQMMMJKHGGIIIIHFGHJROH@GLMJKHINMIEHGHGHJtrJOILDAJNPSCCDx|||kIH^zemwl`|yeT[YUS[bcZVWRLHEGq\`"^khiZib|gpV[^h|Z~xCJ%%(+SL;0,E75FQiaMrMJ`S\_XXbb^am{~~|p]OLE@=CC??f`_`lrr䤉􀆙ȱ鄋ⅈ󂃁Ԁӹ܉\FyiTUgf;)pNZGK]JHayo^슒EBBA=@=?DIMOE6/2lvtZTJQݛ"axogW.3+'!38|aY[LC>95]`eZ6:@9&WJ:4 ~~~}}~~~~~~~~}~}}~}~}~}~~~}~}~~~}~~~~~}}~~}}~ ~~~~~~~}~~"窕ጰõƼШrYL?9muwvrsrsq:<89:6677766;>=;;=BA=2201/5422kcY_XWTWNIX_cem:86uCG=d=lo9465tqhbbhϟҭ͈~hinsٿƪ"Ⱥ􍖣ҒŹĈ΀SRTTVXWVzbxnYh捂Ljds~uvtojrxuoidZVTQKHKKMȀwWGD}zvwy||}GPPPLGJKIHJJKMLMNNNOQVPONQRTWQB;@EHG?873dmhNOxzdMWsI?"+.'DRz@/I@C8Ret~S(=@C%B>GD~~~~~~}~}}~}}~} ~~~}~~~}~}}~}~~~~~~~}}~~~}}}~~~}}}~ ~~~~~}~~"İ鹠̬߉ٻʸ⎲˪weTz9xyywssqsqs==>;6555867:@><=?B@>@>=HQml"uì`ntfbXV~_^y^+#"&()(+..[QC7cVH>B_U|jwMbup_Vctx|~rg]_e^TJEHLGEAK^hagqvzꃋź݂ǷtfX*.fL.A<(DVJ@A:853888:<>>>?AA@C>>=@@@DD711-1344355011`iif65576110/.02653588740632/effkkbZdXMSSO[\`eyn8h>B:35579434kmfgvDZǾŷɸūpg]҆ĤϨ"ɏ\XUUUVWX\]Xhy|}Ӄyѳvhai`^agl`YVNQUoȹwHG|v}~yuwLVXVOLIFJLNOQTTUVYXWYVWTSSV[SB:?@CGLMLNNJMJDCCGKIGJEBEHJGCDEFKLHKGFB|uwyz}KKRNFJKHG@@AbuΙn~lntr]Ѷk~eⓣavglQR[Y^\ba\XQC?HQ"pΨYdjqsl^h^aY\~knMi/##'''(+--/cZJ4MCBBCY\WpoYszm[[honmeUTV_i[QLFHLOUkejqprz씀ǺѺ쁒ؽox;%6 #$.|zwpLN4E6O|}zQڂUI>:DEE>AB?:621fpPQbbP"Ee_M'221100M@4NQg/<>wE<2<>+I+>I~~~~~~~~}~}~}~}~}~~~~~}~}~~}~~~~}~~"繕¥巓ު϶ɻ섂ജpZo><}=8qtttuq;@?=:635788:=@?>?B@?@=:?DC==?8.,,01142352/.dbg213454334/.048974677423322e`^mpjXfhOQSU^X]`jmj556:7lqm77:5brh]qzDąâƽיȟ׊"ʼߺȄ٤㈦`WUWWVWVWWVUdncęfaǻzgWZX\bjugS]o{yg`|KK??z}~{JUWVOHFIJJLMQVVWXWUUVWVXVXWVRG;<@CDHNNMMKKIDBCDFIIJNIHIKMMKFDEHKKKHGE{z}~}~xJHINIGGICyg~}K[}dI{wkYiᲥYqtW]VX[]d^XRFBh"ε|lnviY^uaxbn`ZmcgVq4)#(*)++)'+/XH5!;CIELfo^Vkzwnfbd^ZUPSYep`LwhrQcl\`q75jei{璭Ü􉒛ظ񈌎޿bw~V73, ?=7DB2N/:.;~~~~~}}~~}~}}}~}~}}}~}~~~~~~}~~}~~~~~}~~"ʴǫʞ讗򍠩ރѶqa|D;z{;7nmuwurw?<:66146876?A<;.&(,-,+(&'(M$J@&EJJD@AMtte^Ibmzp]XYRIMV]ocdSdSetlds:ood\אꏎ¼¿߽鄏߶؅MpttlbV%"-BJRZMc|iIseMNJtõRCBA@<<@BBfL]n}bQ"JJPYTdcL264%"G?7I]UIKE@88r@UO7CL4~}~~ ~~~~}}~~}~}}}~}}}~}~}}~~}~}~~~~}}~~}~~~~~~}~~}}~}}~"ޜ҉ڭ̴zws75lpuxx{|=;556//6698=@?<::AB>96=B><>B;51565256:7640ib_01egd4789>|z|{zLSPNNIHJKLHMQQRPNTVRSPSVTSVhWG>@BBBKMOMMLGD@|IMQUVOLMIFJFHHFF?ww|{DBLPJHJFIE;?̞`a[OeibtꑍufwV[WWUN{"z~xU[`_}x{ptfYUcjm9-$%'*)((('%#$)WCOGID:;LpkTW8M`]ONWQJTYhttQ`hclsmehkou_Vـʾݦ¬Ÿ𛳻¿˔oo@qatas`#1y_oY26zZMJ"IJJJG`\F+++'BG?7GXMDGC=/7rymBB@^F0~~~~}~~}~}}}~~}}}~}~}~}~~}~}}~}~~~~}}~~}~~}|||}~~ }}}~~~}}~"Ìͯϸ繳ሜľϱֵIniqnlnqswyxx==6474457:9@56j_Qkƌͩלu~}󓿹ͩWXtro"ȶ˿ȿ՜dTQRSUVXYWTTRRTYg{p_onhQNdeV`kgdi{ըTws~{xwvu|IROKMKJIIIGJRUQNGSRPR>;<=HMMKJHF{LPRONJKMMIGIJHEEAAAAD{w|~DDNNJJFHLE9Bdca|fb@nnoz}Ȃyqz:ƒwljf}wvx]p^Y\ukavwr``S}ovc_1*$#$&&%%%&&&'+aT,9:DEOa|oOpURBESRIKQkzRHqnUXlpa\\ZegRͰꗴí󀌒Ļ߼惌û˽ꁀ󈔇ﰗ̉CB9+quhPY\HK9/~}~~~~~}~}}}~}}~}}~}~}}}~}}}~}~~}}~}~}~~~~~}}~~}~~~}}}~}~~}~~}~"ԛ֞ͼшͲ̼ɰɫ}F2konmhl8quvv<<735214569;?CA=8emkqntt85gppmspl7559521311mcbdmpm87h676li7=@<;4279p^^`]T+(..ZZU^^^ZVW\[YZ]ai765ni7:><36paSfȥ~ݠՌ׬ʲ_brh"ژ֍ݼ׽ɸRTRRTUVYXUTSQWmcisttb|sM_iib`ɗwfxĢT5huyv?CNOMJJHCIKLJFGLPLLIIJI}~x>>CD}{~{MMKBFJE@LǗgd\~JPzM@wyw{svt|~Θgws}f{i"vzmWYmbWKd}y\R|ys~]~U*&"#&(&%$$%')SS,S/10GQMGEcna\UaT6mJPTMu@zd?gyeZ\Y]S񅝬ñ䃗˹ǾҀـ녋޾ڃfBC6<.7rxB&t@:IY?=C=botmf|tkxwRvqI"SREFLhRK)#F:7<;@?B?5Xoo[B?LHcJ4~~~~~~~}~}~}~~}~}~~}~~~}}~}~}~~~}}~} ~~~~}}}~~~}~}|}}~}}~~}~"Ũȿ􇕷ຆ‒烔ϩfqP6rqri6ptpyuro9;454343687;?A>;l^cppwopebgmlonji46;535535qkfhmkjkkm7806m28:=;478<8b[_][Y+,/k`\]]WULQXZZ_aae:89vqpp;96:rlC܁}ᥒǔཔ\cyqt"觾ݘ벐ѦԿ渶€߀TXUTSTUVWUTSTlh~qTV`Wmаesbsրⷠp?kkxx>wwt|yKRLLKGFEGIJNSXTPy{?DOOMLKKH|xHHAGCHMMKFKIHE|{>AC~|x}zOKL}}FGLVad`wn-J^N`Yu̚ymfo|uiwz"چɹ}YV_g]PX}w[{PWtk)&$&()(%&&##OURMRD2CV`MBKeoxxl]O^}l6\sEOEu_}PUW8QylegfgST͗ꕱíԻƺϻ΀;懍|Sm4=>`=G&JomX828NI7MKk~ ~~~~~~~~~~}~}~}~}~}~}~~~}~~~}~} ~~~~}}}~~}~}~}|}~~~~}~}"Ʋܽޅ剒뿍Ȳ?:H8ghmt~}uvsqs<<:65688548<<;:>>46y}pk^^i57lcfjl6::46456imhfiilrooqjimj`7;;::88<:eaW^[^2^3ic]YWWSMOR]\fgdo<::9tpl28?=rrH݀恳茲aYix"粗庳Ø̽ŀ]\WRSSTUTRQZx|wah~oVVxpnu\b[Th@jnz||zyzy|FMOKIEDFGJLNQTUWUMOJH~z}BJPKIHMNvzHPOIHGFII|~BE~z|{z{|||NLJJ}tCJb@ENJd8H;?{d޲^|wb}y~fqxe{MNi"|PSk97:97258=:87==9=xie138876bhkq979643564liijeeukkkjecfhp<9=:8<=<6hW^_e5fdbbZTRWQQPSZZdhjx:778pl45;B|vwXeɾԓɆݧޛ~˪puy"̌⾿ɼí̀X^V^~{rbbnv[nmx؃t[SPiȦnrzdjkjxvvxz~~@EKRNIFGGEIILMQU_]UXHJNMNK|zBDLMIHMOJyy~{v{~SQNHFHKKF~{Bz}~}y{w}KKJI;:KUXlo}ˊns`xrutyvju䄞~pvj}deyј"yn{y{o\``wwZWeSH(')SLMLNQHDQ]XJH?5HZcjzfOcaYbhHB/Gjqfo|OmjXG>/9UaTdjh늡Ӽ߃񙦜ǾꁏЬMk*9)REjOmIH9E]\EKh]AfsH4:M_fއzsgpdH`㈎ƤybXb"MT=?/E:,$#@5<@AGNFGE=?97;653778788<DKPMJMNNzw}{wqx}MOOJILKKJG|s|~~vz{uMNKKICBCGPMa^lfվhssvuwozgƎqqd~zmxnٿ"xwmn]a]`gS~nirpO?NOQPHIMWYIAIT]WM;!;KKKRbgQGO]WUb^"AB{Hbn`׶OmfXrlR􏥰ĽٺõہغᑥѾʺúۡYeE% "Oo[I=DTdL|HO|EGZv11btt~kYbk~MXQPc¸zf"gWLE;L?4(*"#)&9:DACOJGKIE|klJOB;/~ ~~~~~~~}~}}}~}~}~}~}~~}~~}}~~~~}}}~~}~~~}~~~~}}}~"ޚ򦸹䏣燝̼Ǔžbe}rtfkx}|tn;=;8743454345::=@CA@BAtg4657>=58668764213<;?DFHEILOSzuw{xw=?EzxvCLOJGMJKNOJ}}}|~t|HJNJIHDDHQQ|刟fTVNZkftimzpʩxmFyoёqsn\͉~sշygW_faeWkn~vsuz_XUp4:7:B?AJZZD-ScFQZF!=GFGJKOP_bYS^}LPSC<~yvβYdPy|ht\摨Ш둣˼킇ǦҀ׶¹كb[B{eg]XYDK==>IMiKL{>5N^oOoqwU`_\TaynZ"`N;`QO4,/0).+L@FB@D?AB;63o8=A}769hnl6752.:7iikhida0/f_\Ra`n?;736889:52/2111f_Y]`NZ][Y_jqd3166:<666:;mvỢێ찋򔚂왕ʹȋޚѾ"ڍӈ۷һǝ|aXU]hzSlkUnVh[h|nu|s|kdbel}x]Ǿox}}zkdr{|LWZRKIIHFFHGJOPV_[`XVUOJIJNQA;=y@BGLLSIy{zzyx;=rwvRPLIKIINPJFBEEEA~qzxIIOJJIEFFKL}ފjILQky~Yltby}̟rd\so|uĐl"ui~fXifa`UhnmcXW]y[[x9"#]Y&0HI/ >;$8JM.@FHPVM\jadkj[NV]`hlR9jkg}^m^{O^Mڌʨ܎˼ҹϼƀҴݹ쬄nfUS;i^Ch[hcf@EN:ACJQgWA|mCHBBWhs{~c]iOo~ycL"ZVG[>H>i-52/0.IID9:<:;KQLFw^;EY|~~~~~}~~~~~~~}~ }~~~}~~~}}}~}~~}~}~}}~~~~~}~~~~}}}~}~~~}}~"ץŗܾއϙ͇ǯ񈒋ǺቂrrhqsxELt7>>97545635557:=?BE?>;:74m8:yt54ihkj68431:8mjnjhd0/0`WVY[ei9875368<><833242402/3*.][Mai7121679997466lmzRȼ񠷮޻辉ߋЛɲ궭ʬ掼"ӛӋȠ񇯽ϩadwPxjXaWx[aiwzxrnehybSZiidjxnϵ|visw~LO|GW_TLFIKIFIILOPSXX[URRSOHLLB?|{|y>?@HKSNx}zwx;:<}wuxwMMNNKJJMPLHGIIF@GDB=B=>{~oJFIJMKJIHGBBA}zNbwxj^f_vin|s{pgzz"}wqjk]^fhfh^|`YTop_ӀE#34FiD2AI!EJ@=> ..FGJLTSPiuq~VtQvPWpnWLGDNWY`_QvyD?x˂Ѻ멵׃ʾꀀ̀񀉁²鉪ľϩvn`lb1'eZ79*HEQYKIDnBQc=>JZU01ufBTN[~t~zsnikmNpm|viSV"qPSUKI>:jli7d0.1bRLZWagY4842029:999434451206//3\NUhlf479;:>9ro65osuʨț󯡠ŒފꨋΟ¹"סƚȂÀ}v]`q^bS[nZazj[e|gf[t^dвuwvuonǥýz}pr{~KUmKCV_VKFIHHIIKPPQRUWVVTVZVJGMKyxwqDBACzyMOONMOI@>Ʒy\jPhpxgzmXnt{qt}sooˡ|"dqdWolkfelphaTdaY}QI>5c*5+-1?E]hXUG;#1PLJGLRXd416|LtWqAHk|oZT\UZi[bqkH]zڑڏ˵ʲħxlhxtRI6*&'*@D\uW@Mc`L;:*1XA3~{~E>D?>jFF70/210.L@levwUeBRJ@lg=i~~~ ~~~~~~~~~~}~}~}~}}}~}~~~}~}~}}~~}~~~}~~~~}~~~~~~~~~~}~}}~~~"Ԗ؂ϷՅѹͮڵvt|iiryzE<7M:<=<:9:65458757:=?@>;>;:6450^_afjpkjjj756<=;ljih\[020ULNSU]T262211168795564423421.13*Q_llnqqv>;9oq6mq|超쀁롯ˤɚɑЂ׹ު󷱶ƾ"凒ҟƻ難ry}w^jpЭ]j`[pbaW€ee®rw|tș۾}{xzz}T>1IOT\RKILHEFJLOQPPRTUVU[]YMJKG~tszy>>HTVJ|vquzy;?Auov{{}xFNLKIGFJLMQLKIDDFGDDFCDEA}SNH>{wyŜ~FAJcws`Y}sbq؞lq͛IJyhpyآǐt~"~bwUbcoqrnqe`X^UZo__`nnTamAQr]@B9;9LRgu]1;73755203546:9;=>>=:7324111glppmjlp=76:9:igik]000-RQVWUUV^451530678:8755631/11-/`ovxpkpt88nsnjfjޒٰߑ郒ф¼㮂ˉوȔؒũǀ­ŰœˉtΈڿŶj]oek]Ît`sr_yz|ݬ뀓~Szu~G[9AVSTWPIINJGFGKMNMMNQRVYWURKKMJIF}{yy}~A@HTUQxtzz?<>>z{}wryGKIMLFLMOOKJFCEFFEGJFFGEHOHzʴÁyѼ߉lN`~k|jqWk[o]mgq|eưzzzh"Wyth{}rujdXvWYly~Wxt[Yp|qvehZ_IZbhzvzykYMORTew?9.LrT[\e4>[z{no}tJEnjkulcRWm߅ɿ񀭂禡ôڷɀɵ¼ȻU[AO'EY@agND)0:QN>D]o[8p{g_[TWQu[ji<6BdwuTcs:lsqVz_SZJ6"VoDNJO=YR,33/"639BFHI;[a`CD~DBD~~ ~~~~~~~~}~~~}~}~}~}~~} ~~~~~~~~ ~~~}}~~~}~~~~~~~~~ }}}~~}~~~"ѳDŽʩ򕟐򀆍ϳzgme[ggpq=DZ^dL;58975654423556::6;;?@72jf:;54oedjmgkns938<==dhha/.`^V[[VNQSUe1033269:;;68564201./0/,23vr:4_gl4mnrnmd_yyܾչ籲Ի쯂꼲ŻğڋُϞ"㼱اـΑϸyիlpuyn\hx}uvzZO`wurpm{tFLXW\QJOSNJMQMIHHKMLJJJHPSUTPHTSKI{v{|vxsxAFPZXLtv{z=;}|ptytFHNOKNNNMLHGDFEDCHHFFGFJGPOM~뽛榓e~|q|x[\^l}~ovdlpnrohŹjqw}}"з^c|zut[dkow{`~[Xpc{|[`e^QgyhrpNNVVkWMEhokGJg9>JaaR]sY?9OhzsnPFYlԾɾмĕ˹Ƶϣ{zzOnk&+/>BFROK20VFNLIAB;hij<@;lk`[gjkori5/6;;;g`_efX\g]ZWVOKUTW^/2326:;7756441.1114001/3853-0042gkprm^uͮȡշƠψ퀆ՄҠըԓզʁǐщ"즧퇓ΩŪӯ׀¢~iyg֋€f~t{p¬{w|j~lZDZ~}ztçʆwc|n{CDBFIF=BMOMJIPONMMLLLIKNLRWXUPW[S|~|zvuAEQ[WLyuw~y}ttxouHNPMONMLKIGEFCACEEEDHIFGJJKHMNPKz巬_sti_Ztew_vgiqTlnagķU]p}|qq"ίkkcgxtxbkuwd^|ZxL\s|oA-G;DnzJf>UEOeagYXnND@DXtJ]bO:y^^nid]UraQ{7KfɃù뀄藩¶êđϵwIC2EBQLdDR-Ni@GF\NQ%Ek;IS1=CUaNERll~hETnojP{hd[`ZO8"Tl?fH7/LLCZhL/PDCHKCAArfmFGBB~~~~~~~~~~~~}}}~}}}~~~}~}~}~}}~~~~~~~}~~}~~}~~~~~~}~"̟ꢝΉø󊞢澶ᛢॾ{Eltp69>A?nfb=C|kd\\[elml^/138785acabUY^[YV[VKUQRQY2143:631213/12423511324852121de/37pnXn鸯¹䔡䲧斔ˈۆ܇݁"̖僩Ш֪׼ө抴€Żhgwmrnqjrlulxmrӥŋ⤦s~Y}@A?|;;@LKIIJNPPNNJHLIINNT]VUPZd}w}{zyAFKQPIBvuvxz~|}{xxkqKLPMLIKKIGGDCEDAFIGFGGHILL?;@騈Vz`suq~opȊt{poumorpÛQR_p{th|`vkm_jwhawk\zx~vtxrhcTb6?NlXC\DCupC`nhVX\MfMQRJfNhfNnXXMKpjf̋zfVLMh؋ȷ뙩õʹ¿i}sqbgd?GHD\eMclU_{U^_U@Wk;4{c_OeRk|=cKisqzZloQmTRTY^_I":NJZn@L4G:8;=ZmI1TJ@DRA9766557;9:<9636@<>9=ELMIJKMMNMMKKMKIKOVYUTQJG^ICzx}zv>CECIPHCz}yz|yx|{wo}}rlq|KNPMIKLIIJJEGDCDD@EEGGIIJJKJ><>W٩]ft`pn{ؔÓz`hDzhfglWXY`"actpemYahxcex[tt>?@A>yuw|gfFNV_SOuJU][epWJKmcukabR@c]e~Qujx{px|tumZeᒙǹǭȸĸ򎨾¿þ녏kmSK{EaBxpaipl`6eeniRȠTggAEv{i|SxqjVvsnJbk_ELGPTR^P"E?E:vbX?@YK8>?<8.`r{pb022goqjh43469;85dffdhb^WOSOS+UNLPScn34=641431.17822131116;9848.0l545imh?cŸՙ؄vܦ߈ȥɗЫ"ɧ˚滖ϧٳ拤kjffmrkƱӢsy^{xxwmZ\pyyyļ~u=AAD@DLSUNIKLLLNOMLMMLNOSVUSROFHE@y}z;;BELRIDz|{w{yxqruFxnuyGIHIIGDBIIEFFEFDFFDDIMKLJJBD<@@?@??sYpOHL_~VvkTy\WQQ"IC6 v^.:?d^RHF;14b_P@??A:3cnphagh2eqslik65664353cidgf^SNR)),.YUTO\eSVjc]Ye_0,1652102224485688704434dgbT|ա݅ŧˢٰԹӓֹű"פ􅗝갳Ϝ놑ushakuqjghntrfȄdlەtztfmumszdvõqٚUvzADDDGNW\PKJMLMOSNHORNNMPUVUWOF@w~||y<@EKLIF@y~y|zuqou@DHF|rwv}y~{}xEEEDDIIDGJGIHLJMNHC=>=;@{jꚓbZxyrvl㡒Ŷn{yo~ktp^qdwxXd"h_Xaåzca{`{mw[V\gV[`ghJJGA??@FGDEFB:[wLADI[{{zvjTFHXn{rmrhXMLNC?S^Qczqw^m}JU݃腍žø񌑓ƴׇɾ0xg?aIdILFtTuod^ZRRS`s[PCY2ebvUht]UIUgoBGisRS`zOQ"FB7-s]@FYg05c^8@>Ca@?dL=>JJW%6>FC~~~}}}~}~}~}~}~}~~~} ~~~~}~~}}}~~~~~~~~~}}~~~~}~"ሌ۞֚úβྻé~{Wxosz=88>BDD;8426::;648;8:8:==>?:714<;<=~bקzmxnʌ{xktxီ|lwkqrΡv}["cPPel}a{g]g~odf_VQJwz>?BDDCBB=YlI@GKnzmu}}{ueYaiouuuvpdVNA# @FXpklrhnqod|J߿¤ж웣޽ǻރζ聟V:f~h|EyIoQcGEpwnhEJ7zZbHDwIDVQsvXqnhTp{Rjj_}6ePJ"Dp:Y_Z*Dil4cwaB\ea7@8JODBIQ9)3?A< ~~~}~}~}~}~}~~ }}~}}}~~~~~}}~~~~~~}}~~}}~~}~}}}~~~~~"򀐟̀ɸʶȦŵѶ|i|u_hs=97<@B=76135577546:9:978<@=;813?}fbiiemqkj67665:584cib_a_VOS**-0^PTZUXRNIHNT[^d\SY`[a55599433438553003jeUuM鄽żưϖѠƾ⨧鴿"¿ú崎ؾ׺xcltuwokxuqvjR;boU|s|^ƚobv]vp|b|xa[{uiɔɁunɑW"a}xfh~|iWdhgpwh^K\__ouqwDCDABCxQPxELDbplr||gOFR^`cn|xbM? HbFvk`Y^_;6Dfײӽ􅌘Ÿ߷޼źŞꁘYtd-]PYgpz{>h_b8X]sq_26J9LsS2NLD^[1GTRMXVTK^ZQ¤eZo\MRkrL"LrlbLGJ3@LMLfP6dq`6=U3BLDDIA35<>k~}}~~~}~}~}~}~}~~~}~~}}}~ ~~~}~~~~~}~~ ~}}~~}~~~~}~}"獛ǭŹ̴VZ188:9;<8674325777176687459><:9g4=v^dgfbhppo38677465gah_cd]TKK*+/1WPTVVURHAFQV\gd`ZYa]dic4;;888544242146orqCܩ흊ķ֘衫ԗ؆ʨ኱՞굃"㎍鋗ЭۢҎ̬^jqvwsodo}|wmu}paWm5=P\DVͦrrlZlsGHDGJLNMNPLONLKMPHJLNNMKKNQOLLNT}|y498>FJMIu|xyvx{HEDF||{vvtkluwzzs{y}@HJJKLHHF?@<9=AaՖrrry~q~q|anhMhҩjQ߄iwlkzVkpˬi"gwYW]VgdrZOLQTezh_Z02?Rj{ln|CAABFsOOF@@^Wryy[8:GD7=YgfO8".*  Iyrj^N@6<><9897~~~~}}}~}~~}~}~}~}}}~}}~~~}}~~}~~}~}~}~~}~~~ ~}}~~~}}}~~~~~"pҵ󌜤츚ȼ­ޥu_^T268788:8355346655355434035?@794186dbemon386:84543dfeke[XQM,./.*OOZ[NZKIJP[jiebUX`bd]T]hp3575443jd13gpv=Dzƪ–ա۫۲ˁʈח.ߤƢȌ鉂惛˿^oeuxvmǚwzkĹ˸q[QTnx\F99?B:M~|qP=BKW^{ksKLLJKKMNMOMMMLKNPJKNONOKLOSSJKHJRM{x|;=9=DILI@x}}yux|IHEFCy}yn|uvx}xx}~zpxFHIFFD@z;?YpØv\}ox{hpzW`v}wx]fcpvYUӕKjh{{X"WbfdsiZieyiÇ[Rkdai2 9ht_bmp>ECDFabGAAGJ|ww~lQKMB*"+;VbPC3! 6juZUlh@(tА򔣰Ⱦ²򅖝ĸ⊗IJĿǷs\o{byGXuc[aslI77WDPuN4)CeGDgwMWdnWS~@7fNyDevfL9O?Hc8PS"XB06439:E-AK=6O>MUL;Q^I;=?GD;:>~~}}~}~}~}~}}~~}}}~~}}~~}}}~~}~~}~} ~~}~~~~}}~ ~~}}~~}}~~ ~~~}}}~"Y犧Å屌ŝ֠ӿꭏ遈|jR18;988;<7544568433146<@8664;64.22`islm354865451/a_ed^^\Z\001+VQY]RRK?TRYcacaV[adg]RYij300/132egdglo:;F\曶ѩڮʛCмљӑՑ唗㝝áʥwqaapms}futqm|ŹievepaOUUV_pbkr|g}_p;>D\{|JPQMLMOQONLKLMMNPMMPMMNLLOSRJHJKSRPJJI{?>99niWIC>=OuwuZ8"#X}>V@WdHL9& 3x楡圶÷˿؃ĺɿºރށp:kf=8kqSX74OnhIqhSyaHa]b`~dl_Jy]^mDpxdLLKMiJAQnj"liZ=)548GJJPWAE@J_W_EkN{CA?Dq>J~~~~~~}}~}~}~}~}~}~~}}|}~~~}}}~}~~~~}}~}~~} ~~}}~~~~}}}~}}~~}}}~}~~"X޲ԉீ͌ٺለ玕ײsZ5:>;678::83546665763437;9796:852c`-4mfjf24664463ba`aecfbb[-,.,YTVXSGMCWYZ[]_abcafjdedqvv51+2c2llj7qo:;Fw٦ߟڎԩȶ|ﬥEⲶxɇý񌸻尿ʸىĬëÝugpzupmeqhkhæxx{ggaqojb}}rwwt~hdclyJaJNQLILMNNKGKLMNNNMMMKLJILLNOLJKJRTPLIK{{v:<>BGKNDyxyw{zyyHGIC}uqsux~E@9=wHD7,(Q?lCBB}P[RPJ4Vjimkiwy24m_ZdjfjECg=6VhJ,BrEDeETY]Y10v୴⚱¿޺ɾ훥ѽ뀖srAA=iCnrEOaRe>nbVRd~HywilSDOgzMNDy`JNFA>iW"Q;gP&1,2FRPKJ8<6AhFey~p]pgO@b[V|T~~~~}}~}}~~}~}~}~}~}}}~}}~}~~~~}}}~}}}~}}~~~}~~}~}~}}}~}~}}~~}}}~~}~"ٙDzïܛ贿􃐇f4:><67889<78566777534585446876359<<9d0+28gfj46562374dcddjddcfd/+.,.-.XTMUXZ\c]XThed^fiiieoz=hchf4mlook_uBO񖶴Ă؉؟윋臓̆冀팷ɲ"ǶՔҙtŚb}Ϳf}x[lh~xpsҔfpgj~FMQNHKMKKMJLLLMMLLKLKHIGJMNNMKGIQWTQLJNLwx<>?DDGME}~~x~zvxJEEAA>=z{}Mz|y>{Uq̀_vѴth^pvXwlhZu~pvfdWO]kks`bcx~iO"q~cZutv}UUVYg|vklwʼnfjDwYJHNXQC:a6Rllr{nw^aPK.ATbeopX;4I@>P:qlx@>kOQsltt?DqYg~}T=* Ǫ𑧭÷ûóؾ숗uPZK?KPIsy:vjbIR;ARxV8ob`neCP?eEMgiUy\Ş|A;Piu_OKEECE2XŊ"N-MS1-(-=HOQI7804BJBrePTtFpOkEIyV~~~~}}~}~}}}~}~}~}~}~~}}}~}}}~~~}~ ~}}~~~}~}}}~}~~}~}~"ץưѕ焃򻩤ϣۼf29<98989::74465564/137;7427875648>?:30/5:jefh2451483`^]dgfelc_0-0.401/XV\]\eri`\he`]chji^mrBAjhh4kkommdji@cݛ߀Љƹ˱ɇ࿇ƼǶ̏"螉ʨĢpn~rze^]i^n`RO]xy›נ~taz^jvCMQNKLLKKLKJKLIHIIGLLKKJKLQPNLKIOWVQMLLQPvvx:>CCHLBz~zx}{yJEECGCAB|~zQS|}A}Vw|Wzkzncpz\rVsh{xUYcxrbyk"Ʒsubyt]]gkyis|lzdyEAbDBIT`]TKDIQUbnsu~hqh=5-/9Lf2bR55 !2YaSN]^SS\s\]w{wMTyW?. Hq½ƾíو¿ňrGsMSLG[WI~\AN\lp[K`}Jpd;GRs\J|=KB9l}gnsFessCKFN]pyKFI?=DLCVk"s_UXP7,&9?GYI=>kor?@kVMIDG)N_}YSvX~~~~~}}~}~}~}~~}}}~}~~}~}~}}~~~~}~~}~}}~}}~~~}}}~~}~"TǗ٩𺟏߀ۻդዚ˵󍑴d28<><;;877753212136;8547787758><8722585e`cfh624520a__hkhga]0.0-1/14\Y_Y`9=757sfWXajiibdnAAlfehsnroplwtBlݝɳ脌J΅񭐌Œϫǝ˽ڔ޻ԫȲcd\kz^fs_hXXPeo^oǕsjoq~{X5:DڠzENQQNLMJKLMKKJHHHIJLMKLNOMKKJNRRNNLLOPE{stvz>AHHA<}yt|}{{|IEECFDCERXTSRwy}}PRvy^z^`kkkstzma`mqɷr}XbaVo;dexwsipwrzwιx]yuesZkzw|e|_mrneifcH)"+9Nae^OLPS[bg`SrEI0PM4:Ic5cM6"(,"):POBHMBDIReznLIUvKORa`ih% #Ь≤¶񗰾䅉ƿźۓܻͷ7cKPPEJ_HAUc=EHPloc]nFZ=>EAevqDI<@>;QkCm;'~>jiYemonOADE;>JKIYr"||kUA<&6>CKG>>wyk7>NKI>?V./Jn_YkG~~~~~~~~~}}~}~}~}~}~~}~}~}~~}~~~~}}~~~~~~~}}}~~}~"˺儒řЬХ뉍ֺc29<<;;:67789676335613476547:;<88;=976003:8ifghif3453``dcfkml`[0--.-023.`g^148857{jXTcijd]Xn:95dfhulosxrnHmwڏٔݬȗҀ橊枔չȤզ׀"óŘƹb{^[ixuRvjb\voa_gx_]ptlpm|tW_`蚚HNOOMLMKKLNNJJIJLNPLMLMONNLMOOLMMJJNRF~trqsn=BE@tu|zy}~{wHGDDEHFEAHLRTRPz{|LJ>qxcpZVw|}vp[TYuc^ׅYWpy;^vmtpyy\`^wVo~~~xgqV^tu~bs`_ŽgzFJ:!<:PkTn]nFHNmY|a2,;ۃſ¿ƺ׀ƽ䚡ŠV@?s_^s|K`WşȃϮŏ´װ絹̳Ϙ"µԗπhrg][[dtxqrl\{[xqyzb]¼m_dk|wKJLLMMLKMNNLKJLLOQNMNKLOLMMMPONQPMLMLKNPE~xk[TYewxvt|}x}wv|DHFFGLHGDIKOQONyzHF~qw??w~C_a[aXPayip`yۓ̺b_ouo˨lvpdxyojgdm|yUUt"_Ymqx̞pzspgl]dVq}Rp}aoZq~1;@5/)K-]/(0NacUIHRM@;A7B4:=t77KG{e9FEGTqM@wnjmxCFMz\\OmqoukfY[YTJE5=KF?:"CE<)YF.sʝL[d~~~~~ ~}}}~}~}}}~}~~}}}~}~}}~}}}~~~}}~~}~~~~~}~~~}}}~~}||}}}"θگ쇠􇌇Բb09:;:;:699;865667;=<4145655766;9CE>996549;jfXRIHOZd`hd`cdlsneb..//,/.011h]Y245853cWU[[gc\4477nfj6mfbq|xͤܠի鎡џЈڣ̩Һ"ĽќСӥ}~~{qjXrUtgo~_}elkпĚFNMNNQSOLNQNKJJJMQPMKKLMNLLMLMRNT^VOMKMNNGw`RMS`q}yvtxwz}vqy?CDEEIGHHHLNORNJ}~GILKxy9w|{~ϡt[qփvUz]c~tRvt|}TyzZX^iytqom[OX|\"VJ]_jirrq`XWYU]X{{khX[Suv:576/>3-9FIFEC;016BEg_Hj:>;K0=aSbl~~~~~}}~}~}}}~}~}}}~}~~}~~}~}}~}~ ~~}}~~}~~}~~~}~~~}}||}}}"íԁμ򅎊ܫȸӃ԰uQg/4:;<>;168;:76669;:;3/28<77956=BNO=89<769=l^LOEFNX_hjaZ^bhhi0/.+.0-2/1/1naZ178764bWV\\hga23;;7jiimppt|Ϧ׮󂾇ǚ񖬥׍ݽ̔ɇƶݴɸɕ"∗Ȕ¦{ij[aabggưgꅏujcrXooiȷ_DLPOT][KHLRPKHIJLNLLIIKORLKPMNTWciVONNMOMHqZXNTbn|xprwxxtu7<==GG@FHJHJLPRROKCEONE|r|}r[o`|dwuwa\|Sxʚwzy~XJ~mYXTP]zxm\u{X"}{rZm{W`WUtqZ[eeyvvl]FCNTUSH8WMDI7P5>~=xtl\[WG6@KE@Ke;@Duqh_[VRLEUM:#/>M\CHGKд䕼»¿ζ¾݀􂇉Żيޯ裌|IK?DFNMLYncUejtgtdF{CMKa?}ibL\]wpw}rcQOPbXQ]um^SSstIH8aEG>"xoVDhGPvTF7@7vlevv;DobMS]\IOgq~~~~~}~}~}}}~}~}~~~}~}}~~~}~}~}~~~}~}~~~}~}~~}"끁􁊏﵇񒨼ٷ{tv^1.48:@N^815;;975476694039=8777:BGGC;687858@5XMN@HPT]heb`\`fhh..\T113111035f[2764545_S]Zlm5159>9844musn|楓ÙĽġρșՄϦ®԰ɪ≠ݏ"֔‹䇊̄ūksheñ]higijfXXZeggbüXWj}|t\HBTdl`li¶pADMOO[}PCJSQMJJIKKILKLMNPMLNOQ\a]WQOOKNOOPDp][MUaiuytxxzzxz:f>?K^MbWccYTf~~~~~}~~}}~}}~}~}~~}~}~~~}}}~}~}~~}}}~}~~}~~~}~~~~~~}}}~~}}}~}||}|"񷗃ؙ惉фs~4178;AuMI37;=;721788:7678:9:79=ED>;5566:45@5YSQCIOS\da_XYblfe_^UP.03..0372b[`854676oZcemohfc5=;9645oqnzz˔ƻξֹì򶐘ŐżӢ󡯲Ý"ֻƀՇ丛ȕfiw`ylmgcaZQ\heddcȿ`b_Xxn`TF9tFIEY[eºDCMPQ\Y`BHPQOMKKLLKMLNOLNQSNPT`XPPNOONRONPFwd\MT\eqzssyw}vyy{sqCDBADGINLONORSP}CIKGB<<{{y⭯wũ[qebwδXnz[^^UPUMNESxrY^"ySvgyXejobmt|tooDf47Z4fXF->MyifEXpFFEA>=nZRNE"T7BCB@?z}D?99mLrG- JCO̹ԒëϾĺڇ󍑔󃓎}̆FCGBWzmU{b`bA4GJ~SRs?Jzs}q{rs^TPQDKfsQnSprXB;63269<<865:;9989:644lss}ƕੲȶόқΈѣ٘廙"ǠƶƩfeWtcpelɿgea^[WVUUbri`^\ƹcd`qȲx>;7GukQ@FKQVsVEJPRPNLKJJLLJHJORTSMORWPLOLNOORSOLE>m`MPYZby}ux|vvy|xyBFE@@GMIIKJMRWRLCGLGB=<}|͢ǎ{÷[Ɗjhbmlhxkbg~v`bmx~_PXWLqicdn"[l^Y{o{suib^:V<=Sh5dJ#18Xr?@S"WNB}i^@Rq{qo3@FZCEOXD<5t[e|{l{GBs~~~}~}}~}~}~~}}~}}}~~}~~~}}~}}~}~}~~}}}~~}~~}|"•聊ᰔڵwzG`9988AGB;9<:55657:;;836::9<988<:731444358850]XJJLPT`d]beeiinld^_ef51TR.353he41158>;4diigdbg38zr4/1kpv~⮛ȗͅ爩ɮƞ︠Ǒ턝ĶŁş߳"Ś󬈋ޭÑcf`}hs{icldfhgd^WV]jcYUøc\W}r[N?p~nݣjeybTb{`[\lcmggej܂YUobkmilxU~LRT_ڜŏ"dzibddUӞbqn{\^:cGDGCJ\_=HI_?KM54Kizuqn;:;:5*#&0>?73fx{|D@;mbSAinl+ AK띺ú¾ɸĸŻվꈂ񃏎톊ݛ[MGYk;]JON\^QOKHBJiE/B3CJKZNF68c]ImuO@X>HE^vVIL>xJGKciPHE"}FsaPYDHU^J;5v=[rnyzpkD~i~~~~~~~~~}~}~~}}~}}~}~~}}~~~} ~~~~~}}~~~}}}~}}~}~~~}}}~~}~~~}}~~~}~~~}~}}"pذƻȱԨuutSU47449<<:8:8786558;:667988986679842420631]VHHLPPY[`T]aed5dcabda10YV[/410495578:884eaceb0.ntoe_14kw}ۨԿƦɘ뤷枾ޤƢҥ璱ʈڿ.߬ηDZ̿矤Ꚁmipi~vrlny|cgkjbXVW[XSd^qakhZIdcpjw@IJKMLKJKNMKKIIHJLMJILOOMMLKKHKPPMNNOPRNKE;h_PQUZ\lw|zq;v{}CB}zGMJHKQLKLOROJG{|CE{?@՟m]yu΄~cmkYԌsSPc|[a~cv`}ft[܁kK@zoyk"Zf\^gnk\{ryu[?:_ǵ|xtz"paVOORxrinYlmEBnXK"HozwpV9Tt4/[K(%IfwGG>4/'$')%A>>?CRYZ\jw~aKJPMEA8#SAB=Յ¿ƽ»¹ʿ©򄁂쀂rUeA:SSfkRGMMjh9Eh^I3xLggSSWM79I~Rg]|QPAXMA\xxT~LLzrrpjS]BVIL#":98zYdi_0,6]zACkwt^@<@B=zyUPRhv~~~}~}~~~}~}}~~}~}}~}}}~~}}}~}~~~~}~}~}}~}~~~~}~~}~~}"땯ͱͥżÿ켐ך~yz=vqgA>T6 "/-=O?EZCZ^vmum@=OPJB|Ly]b\So~~~~}~}~~~}}}~}}~~}~}}}~ ~~~~~~}~~}~~~~}~~~}~}~~}~}}}~~}}}~}"ꅌᯐÄ᳓ꐰĵ՗ VBc574376768:<85334389779767:78=>:85777853sreYLBGQMO[f^]SY_^ci`cjtfa//31ji1.07>@B:/2iiktma`5:@=hpl8CN۩့ݲ鿳蔤㑘Йǀ˥򭞼化ϯ׻"䋐ήy|րūhg~d`hnxdihhiaxc_SVRVTUwy̮zugb]Z]mTtENNMPNONNNPNMLLMMQQLJKKNPRMKNOPSQUTPQPL~jZT]c[_qzw|suxyzzr|w~AELJHJKNQSTPKM{KTYL|{CJLIPX޻azZdīvq}ah]pֲ^YWHBNaws{lz~[ts`k]"Ydtjvُz~~ccgtr[Zf|R\`n:4H:9w?}@>O]O^8::862H)6AF9_W@@R(&)\.-*RV\VE84@T_j||tG_B^lo72446qo{ܓµżܹž놏䀇{aw@fj`K0FJEAnh;IVYsWNKETW,7WiNiGS9hfozvKLAHRUuzea{ZR|prLQUD80"07DINglrnP=N^MG>CMCfch\d ~~~~~~~}~}~}}~}~}}}~~~}~~~~~}~~~}~~}~~}~~~}}}~~}"ɩߞ̋ڴެ䃐ͥfFg645469:89;>>766757986789:=;9=<;95656751mpbLNKJOOP[g\W]c\Yegekux`[\3203432d79<=8456bikj`d6==8hij5>D?GV⶜߈⑍҅ڨͷז–ٌㅒ"琅ȗֶÍlm`fddghb{PMdSk~SRPTYY~mqc\ilishtjqf}EKLMNOPNMMOPNONPNQQMJKMPQTQMONQRPSQNNMJ}YX\Z]Y`p~zy}yu~GKKKIJJNOSVSRQLuIQNDty{=FLJOcq}s\wwWk̖dqȲnxj|tYq[]bRzJ^iuzd[vlr"ajtiXUgwuncgy[|[YUZXOOPHnMQNcCM287/-48Z46'&3"$#/L("JZ0/-,[_ZKC==EFEZ>5fI13Ki;>:gYTS@AYא·Ľ½޷ĿǼ󀊖nGnR{tVC[OOQW"LsrrsyzwxFAun=b\KGFKTLq[a83~~~}~}~}~}~}}}~~~~}~~~~~}~}}~~~~~~}~~}~}}~}}}~~"ʹ˶Ι؃Ԓꀇϩϻpbq356779978;=>7:73667756:<;<<9:::;97779737raLTPNHLP^eZ+2^XUighkrtcc^/.2349rpr739978:/Yf^nk<>:mng66=?-N63%BQg8S@'S,# DQB>LQL'-/0-))MD<=9E]l]?DF60@\bjq`M<4^o䖼¸żÀ遍Ľν蝵򊐠MXD~=92Y2ZPX?#8XuVS7E_XYJWLCLHbsZTSg:6:7pjqv>@DSNGUJH/,RU{gvmg^6>"<=DEf`cW}~q`TQLa7U[XJGNPIC`b8~~~}~~~~}~}~~}~}}}~}~~~}}}~~~~~}~}~~~~~~~~~}~~}~}}}~"Ŷ̛ӁDžDZݑʮӿȵ}eo{468;875788;<9:60255686;@>;;:899689:<975qp`KMMOLMQcd[.2XW\edgmooeb[),16p:538<:8;627ft9A<9n62658=AEWrɾΧה̗󞍿횽񍨤뽴̈ں¥䦇暺װī Ŝ׆jiqVvaorXV^d}sr|[ZZ[vov|y}z|}madlx|@FINOMKKJJMKGIKKLKJKMLOPPOPQRPKKMMML}ULR[WZcqtzBHu{wsyyxw~;CIJIKMQOQVXRORNKMJSJE{;6<>?DAPa{ZтxtXrnɵ]Zk功mxqtbSV\SZytjVPS4^bQKҖnprUt}~ehvt}fvŎ[\\W3T^\UX_Q@0!=B66;]4R:@Pbd6KPQjwļ۷ѱ灂zFn<:6]#_ZbKC>HZ^15K`[Npl]AcpY@gVB.;FB~wz@CFUfRVYOOPD@Huhpw}z{6"@D<7iscIVHUel{>Ch{yWADEFH5i=~~~}~}~~}~}~}}~}~}}~~~~~~~~~~~~}}}~~}~}~}}~"␵޻Ѡᕷͪ񧓎덤€ŰzbxE97;976798269b.49FQIFDERTTWT`VMHK~l}p"q>=4=xHKJ5@TlMCDZEQrC@BJJCDDF~~~~~~~~}~~}~}~~~}}~ }}}~~ ~~~~~}~~~}}~~}~ }}}~~}~~~}~~" ÷t[rF;89746:::6689=<<;8635:<9<;=;99:9>=;:::97lU>KLPIE^ih`ceWLZa]bgiqec]Z[Z*-.32358:855799=:>;;mgfgg128ww>V醍NjߠȔ侩ȫ۲晥ꔉ"£؂毳耎Yf|{qadgaadZj}qt]\ZYVu[Z[cpnryEAJNOLKMLMLOPNNNQQKIHMPQORQPPOMOPTSRTTTPL~XTXcagz|zkz{yz~uvuuFGEJIIOUVSRSVUTUPSQMrn};?AT{hUa`ksX|igorkmj^TYWJImU`jQPQMKK{lփObx"YXStay`lezjsvA9 (AK:8JZdl_ANDB7^\59/?4JK0EFvo61##AELA=AL++*,1b\TS[YM'.BDrG]sЍľȾž˾ֳ۹ѽꉩ|fJYw1y?48IDDI]U|ZNWHGe}Vs:GVelxb_NP7D7:GD~KC@BUEGQWc^UOIdXih~iNo_47=sfWwS;.R`}IHTp>jEBIJIP^PX~~~~~~~~~}}}~~~}~}~~~}}~~~}}}~~~}~~~~~~~~~}}~~}~~~}}}~~}~~"ĸ̶֪򇜑ੁꊒǾѵ{~v]vF977867<=<;76:<><<7636:9589:;989;=@959;588[AMROLOcec`bhZPW]\^bdfde^\Y_^2.30244;;7:;99<===;ndhim325syCWϟӷ챹ōҋŠȜƹż"؂ؖဥǫɣglv}lunRl`iYZQLdvwp}`b__^Z}^NAES`cwuJBGKNMLNNORRRQNMMNIIJMPQOQNNOSURQTUNQP`Y^`_jz{}|v}zz|~|xovJFIEEMS[WUZZTSSRRPJuv>@ATydnu|no{ǰpi{r}u۝}qhSWjzQEJM_o6RT\KHEbn׼ahRTWXXZk痠[lzy\vh{}xeX0=4@C1(7IdmT@/6]{}`WalmwņùƺDz׵ù񖩻jfE5GV9k{Hi^Fe\wGVUGH@?Enso]DF?^9.?|GKDE74L]^bcOKBKttTotEHuh1549rEQu`iQ^kvHPQQJJ@EKBCE[]2~~~~~}}~~}~~~~}~}~~~}}~ }}}~~~}}~~~~}}~~}}}~ ~}}}~~}}}~}~~~}}}~"ƛ㲷ۭߊ턈¸޲}w[x6686489=?@99:8::97879:769998<9;<;:61784::`EHSOIRdeaa`bZSS[[Zaiadc_fZein562/119;<<=;9=?@Ctjeplo66mt=DQ͜ۯ¹۹ުܱۘϦ۵;܇"冑ԬӛƼӁ\Ohþb^dXShcUtv}zzhgfdc^Z\mYV^gp{r>ELMKMMNOSRUSKLLJGJLNNOPRSQOSPOOOQOKPQKSR}^R^abkxx~}~ztv{rKJFDKPWWXXWSQTTRO{t{~@BJSqpy_~zWt°W^zqwkXqmbTIphWZJIJNZRzUysWZ"V[agvfpxؘkx^GV\fvrf]~anN^OSZB7k}sjah|tfM+ ,8&7S{~M6U*9y_gYKARt=97750-,ZTM=*AIK\^gjt}Žɸ㸸ŵŀ煎wE_yQLVF=amFN#H[L_YyrkYmjNJ6CRwTRqsdI?Z8RuCYVf?3aiUjMC>ABGFFBJJ;;>K,2~}~~~~}~}~}~~}}~}}}~}}~~~~}}~~~}~ ~}}}~~}}~~"ꌄڹψ쐗򃏣Ⱥȴ⺖}yazp777899=>>;?=8758698:;9;7;;;<9;<:7537:6;=ZAKOROTc+c^W^_ZWUY]W\b]a^_h\drgo52/.148?=<;79>@Aqmfo5suyBLj扖멍﯋Ŵ̛ŖгŽԲ좡罓ZTPbzotnhefŧbhulkwffcecd_]^r~INOONMLMNPWUOLKJFKLONLRQUROQOOPPQOKORNQNwWW[adjvw}nl{~}{JHHIMPSXUTSRTVTOyqz=@ABOYx[tԯYac^xywgqkTn\Pd|McMwxONEMIIk}UPT\"[X\exvࢭfra\\^WljP.)[cK%JZBCB=;>^EG3MMwlXD_VOr[=/ASmt992./12]SSTSSGN\ZX\Y/7~➷ǻž¾߸؀άہfL4~g]Gv`D"#(.BWK}6:7kI2kzMe^tmN`=6`vpEMthL{QEIE?JQWkcEKGL"I<52;>MEINoGEEEP0~~~~~}}~}~}~}}~~}}}~}}~~}~~~~}}~~~~}~~~~}}~~"Vߦん耉Ǹ·򄇇⯎ybn:9:<;:;@A85795569;8847<>85:=<859;?;>;X@OORX[ec]VZ_\TQ.0UMXTZ`W`]_mlk440/218tkgh5345u~Fޏ򇒠󼌙Hׅ̊뒕دծӳȂ߂QZQpUDhukosplimvrdzrueRPRWt¼bfcV`a_w|KNQTPLIIMPUXPNONIJMONLPOPQQMKNPQROPRVQPJsO[^bglst}wyB@leyz}JIIJLHOSWTTUQUXNzrs>?CDUrXXtق܈oY_em[ow|tr×qј՟PaZ[_lwYx^PKJTQK{~r[U"lj[WwDz‰yqZqjn^[(,'RI,'5]LcyDCCA>=CKE:umVBV|lqp^=MMfs$-E\wl..4ndW[gqujgiac\M'9ECÍĶ͵Ŀۀ惀î㸦}u-?緙SH5I"& 0IE^d?==9>|iTnqsaj[8s|NF@G@fao~~y[WSQSJAVjXYZ~"UL8.=u}u2'FWwg^wjcnOTcDAVPF3JBE/~~~~~}}~}~~}~}~}}~}~~~~}}}~~~~}~~~~}}}~~}~}}~~~~~}}}~~~~~"ֿϹɹԵþȢxfKo8:=??:878<=9436:6457<8768<=87:<;87:9;;>7Z?JONP`jgWWY\[TW12NNMMQVT\[Yaqso6122188@B?><=D>wic24457:@Jܪ󂷿ߔ飇ʒф㉫娬Ÿ"⁞“ؿTYPKZj~|a{хlmquqljfgeiw??LnzRwDKPURKGELRTQNNNQMLNNONQPNPQNKKOOOPQPRPOHpJTabanww|}vDAms{uyJIMLFMLSUV[WU\Kyr9>@CEIRZ{oKnxji_Wj[bbxoytfoĔwsz_fxnne[^ͲTEWPGLYfyxVYڙva~vŲ͞my_z)+&D(331(+0T|DA?A@>AEECEJpxpTdX/BA6/# Qfdlރ†µů؀熆êɷ֩PL=``ubN;:7.!'DLlKd<@>;Ib[ZҎawyT?fxFJE?JT`[˟^MNE@CNqP{"fTBe5ܞ=/K>U.Ec|g[gA`WW.A<@S~~~~}~}~~}~}}}~}}~~~}}~}~~~~~~~}~~~}~~~~~}}~~~}~~~"ÈƦпߪy|~xj{7:7<>:758<95535:;667:8899;<:8;9:;96877;4WAFNNNYecUUVW]\Y12RPLRTZTZYYXgo<87733669=B@BAA{sd/34556;AHѿÖח뙩͐ުڜ뱾֩ԝ"̼짢ϜǧVXROY]PX}nmllopiefimmkhXidw~;=FQQVjzlp{{oc\pw}k}AKLOMIHHMSQNMLLOPMMMOOPOKNPMILNPOONONMMGnRT_``kx}HE|~|x|RNNRLIKJLOUYa\U|v:=@B@BNUVj\ؕ\][_luu[xϫۚS{g|g]qWMg@MWUJNޅ"ruք{Éqsrp̉]xbo)*$:$.9.'i`EA@?==>BECEEBCoPV|mA"6'$) "&6WkqjdfnmO;=AF/*UNW݈İʳۀҸҽ񃍥EAKnavee`PbJ!LSvEpGG;g[nqȷmkG3mZvIMB?=IdLTwxbbDEFMAFx^w"TFwY`ut^p86A>K/>mO?Nu]bvdV$47965678:99869:;::987858:9597363W?BNTPT]cZZ\\a`Y--UNVW\aZXV]Zb2==:845545:>>A@>A834;GjKlIKFC@<8;~??@DDC<48|gBF-38 %+%2EWp{y]JB=>(-W.+Ļÿž׷ŀ뿸w5>ltOOsPgjRu_zN'@NKUhdGIwuwe~dFUUIY_NXCG=654?Ncm~nTj=B@SBETL~O"NPGubmjPMD>75CF6LMt`aClo<88AO~~~~~~~~~~}~}~~}~}}~}}~~~~~~ ~~~}~~~~~~~~~}}~~}~}}~~~~~~"ױۮȐޕ慒譊ꄁdkqh/26;<974:;965688:=<<:7:887886535:9888554T<@KPITch]^abdaY,)RSYXSZ[XO[\119=87645309;=>?=rggjrnliejGE꓾ɯݦɁˣջ١镈𻼾؁ޡܙ"ٺⷰ򣸁ʫRVVggcfsXoyync[_inorroni̺f]\Lwtuu{{uuBUqrvOS`~CIKLKKNMPNMMKIKKNPNNONOMNNNKILLLMONMLKJDjRUZ]Yix~|FDxyFGNQNOPMLJHMOSUVPtvyy_eXiorrU{t鞗砀w{{l^IIzt}_oVZ[XUTwT"|nٯkјqlh`]X`{gy_ #%KMG8I8458;9;2vNHEGB2Ual9>CA;:?;679778754359:;88864S>AJLFO^d[Zddlh],,`Z^cQRVVRT`124978:84527=8=A=pmmkuxplopLJɋȩފЪʦʇ´Ϭ􇆫εĽ"ċѵЩߋRU[e_f_siWrudop]iotvsookϴvr{b|}@<:=Pqvy|kv}~DHIKKMNNOMLLIIKKNONNMOQRNOPMMOLLNOOKLLIEr\Z^^W\n{|DF|}z|DFGLLPUSLMLOTQSUOv~|yekqԬdƖȬcսq\SwinġënuN^}ZNxs{y̓JZ_"|ż䤫ojtJģn~qV:#'RWYF%97;@?8+3C??AEmRI<=Z:BB<:A@ACs@:We@%!! =izwwyumdTJZZxcU|׉¾ÿῷÂjHoWK?f~{hAWzIw[>?F2aF|z}{bl9Zt9"=h|?K6;;8.OTVl~wzQ4[e;["euV~3ceF./$bovH0`?*Bh~~~}~}~~}~} ~~~~~~~~~~~}~~}}~~~ ~~~~~"܃‘ݳی޳󂈊ͷʹǼnhx-17::7259:96469:=??=97599676324788;::953ZHAJGIM`bVV1akj^0/d]^`WURWWT\[23778=979<9=:>B>ulk79>qruWW¬ńʣߺؖᪧ¿̮⦴Ȧ}"̷ՋꜙܽͅဈRWXjk{gd^_\zluhZv\cccknmkegSF>z??=wzS|û}@FIJKKJMNKHHHILNNPOKJOQQNNONMNMMNOOMNMJG|bW_^YSl|{FDG|}}{EFJMQXUQRVRUWWXOpz?@EgnЉiqΡzs݈X`q~ʮ|afhnx[zÒwrmO\}"zqϳɃwx\X֡sQs1$'QRQ;!A?BGGE937n99oG/=5(@d|;7=?q@CFz~gLmkJ5ShyCIO3:>32G`Zu^h{owtmvpi77:sw}mvŒϊšβүˇ”鎑ӻѽמ"Ÿد؀ʭYSYTqGnhtilvTg}doomiiju_L@@CLRZngʲα}CGHLMNRNJKLNOQOMKNNMOQMLLMMNNPPOMMKJfX`bZRny|EH~~?CF~~~|AFMLOSSRTXW_f]^Ovw?>@r~~si݊l^t˶{twuEfywu^đaXJGX~v}w[i{^b/%)+SK+HNIBxYp}EGgEG>12=<5Vqgerxu{{{]J=0Rce"zd[WHA:Mafkvmf::6Svl{e^62JK1*>N~~~}}~}~~}~~~}~}}}~~~}~~~~~~~~~~~~~~~"k€ԯǐʠ麭ʸ֮ypyؤX\38;<<8776886576<:98724.K@DGHDS`d]+.`caZ3100.-X`^e\\1.1523996:;@CA=?=rpl537v@=C؂Ӏλ՜э֯3睜ƚĨ̌ʎ¾Ѷ΀T[zT`xtYxpTV^]hsrpnhxeTEKg}cΈ]ѻ|GILPSUQLNOKIJLPSPPLLNMPQNKKMKLKONNMMKKGiT]c[QgsHK}~JGBCFF}zzB@ELLMOOOTV\db\[Oy|?=>HGNցg֚jfwxrne`aޮ`{]ؤͶpbk^irϖ|d_Qf"]u\zzstifo~~{g2%(UQ="@L0_D>Rs]RK\A9JpaNHG1"%-NoBB@AEzfahjW:-*,PP(hThur/Pfvxpqx{ոļ¿ǮƀꐑӀ胃ف󆏋vR\qG‰BDf_nb::[wW:57< ?_xkO6QWf9^ѕ_R=:.'?Lhsxrdxx`]YXLeg"{a9-9_X^=`K9@>J786c|]]>DKC/5>F~~~~~~}}}~}~~}~}~}}}~~~}~~~}~~~~~}~~~~ ~~}}}~~~"ɏϴŹղ같ZS368=;njnl49>F@Eoυ䶜㷯ȂᘈꖭܨǼǻߙ"٭ӉڋÀTZe\Zii[p~n\sv]V[\wtsppmĩ}natnhky~eˤtJKLOPONMPRNJJMOPOQMMOPQONLLKKMMMNNMKGKLtX]b^Var~IJFzyGGEHJF~D@>IONMNNVX^[YVVMo|@DGLIV}ᇧ{jÿz_`{qxLNz`g{̲oXZT~mÈr"ȷa\Z]yrrhPlzrxݭz{e|1$&MC33Q$6Bn2CUHP4M4-6HhYLPI'0.7gBEC@@xrh\cQ/>PS3.4IWYS:9Ypmk:z~ǽ׺㕧ƿµﺷĀ搗ݶֺj}f\|CrpzuI4nquB,4:<K|bXpK=gFPnvqid¹[<.$8?SJg\_MerkNdƗ`Ru"`9*:4eAJr\JK><:-HaXojR_^G1>5;~~~~~~~~}}}~}~~~}}}~}~}~~~~~~~}~~}}~~~~~~~}~~~~"ցᄏΊżþśsWQ077=A=;86886777:<:897:778775798799730041PGJNMTbb_/--\XQ]04730^[XTYa2-*3127744:<<@=<<8e88ov}CCK~}₍䁇Ìϱũߜō٠ܘǎ"ם񥽠ֻkUXhtrtrzz_fuuRRYZcfskvpmrmȸciʻ{h]VaiXK`iΎj~INLOPLMOPQOLMNNOPOPROQPQPMNROOOLJKKI=VP[__etzGIHvqEFJIG~}EB@ILLJHLT]YWVRTOCk>AKK[iw킜jkkjkajUepmxztlYnts_ƴs^[VPj3ubhrw~xs]^bvwvqneh[Viȴr{i?)*XE%/@??EK{wTPVUC3**1:.4`xv<|ƩȮ吟ĻºÀ¾؆ٯn^ڸRV]|~?;m{Ohd`J9F52 ~~~~~}}}~}~~~}~}~}~~}}}~~~~~~~}~~}}}~~~~~~~~~"\蹩޺μغ߮ꐑշyuo\V068;<99::97:<:977:877:;8688899643386SGKMHIZc_^,/^[Q\24:6f`ZYT_a2/12367753;=;>>@=9j6:s{=>BO}Յ􋗟怌ۙل͒ʙA㼥á̃󙟂ΝҀ[`l^cdcRSx\bnqi`hjlnmjdjOBnko}GJJMLKLRTRMKKKLNPNQQOQPPOQSQMNQOOOLLNNOCYP[^[\o|FH{qGGMJ|wDDHIJJGGMR[YVURUUHt>FEJM]rjnpmmppasTh^nyg~scͫZ\\UWVuېeپfg"h]RpxիvMu›qs}oê46]_WUiXA>DMK<) %N|\%1[`&%SJF?Ya(+9MmA=7{~@EGJHCArpws_OF1BJ#&33VruŸꐜļþȽŀڳ򚚓񄔕aiy^^id{<;>=<:<:n7:*?KOAF?c14@{s{UXJ=lulx~vfL(A.:~~~~~~}}}~}~~}~}~}~~}}~~~ }~~~}}}~~~~ ~~~~~~"乶ɴ专٣퉈넋έ󁋣voZ\[468:888:<<879899::878:965;@<27;;888769>:XKKLGI!Yg^002a]Z^127kea.\Zc]0/31255779AA?}>8ij><>>@7ڭ̗䀍‘ÿӱՏثڬ͞šϹز񫩨ǥ⒅fjYiX^RiZRQd[finoqqmliƹ\jkQe||\xwGHJLJJLRUTMKLJJJMOQPOPPMLRZUKNSQOOMLKPUJgV[[TWj{HHH|vHJMC~uEFIGIJFINS[\WVTTTFx|IGGFLMəiojpsrnsyungaupǢ`h˶DžycXUett˙irzpsrl"x[vcxhogғjeu؏s@?-QOTk3,MK^aJ>=BfHLp4'%XTPB@=>B?>S-DWd7MbF^JKcdhM;H9QxwTioclT<:@HF@A:>nsAMEG?GD?"@30GJ3SJ977968;=:6:?;46:<<88777=;YKNMMR`fa02eeb`_/03lc/./1_.//0/-/37:tٮڤο孑ʛ£¶"腑귴Ρȱi`wjZ}lr`_TRsr_|epeospmieczq^xc]eTn{GHJKJKMORQLJJJLKLORNNQSPMRXRMOTRQNKIHKRMiTYWX`hs}FK{vHJMFDAADDFGEGHHKPS[[\VTROFp:DFIQomc_VoxqsvzmmwveYqyԔjjyr`ttzrux{{wyvxxq"_\i`wixhrҝխozjxfD\@1B@C,+H9RPUbny`}\b:<>L~Y~KHFADCB"c(@V.4.[?/)96DawyuoE7\lTE>Jie=~~~~}~}~~}~~~}}~}~}~}}~~}~~~}~~~~~~"ׯЂĻƩӣ楨ꐻիŀ닕ͷiyaXYk79;9659==:68;<96597::;855646569<97567;8]LLMORaid210fh_]10230/3140.0.2//05;B@DDB?A;;8bd:<@[pꏜˆ눎⸲շֵހ䭍ꈴլ̭"꩓͹^mmZ}hReczk|XzioonnkkiĽflc߰^nfkJLMKKJKONLILMOLOQRPMMNLNOPQPMJGIKSOqUUQVbjs|GJEwJIKKGGHEHGECFIHIIKOVTX_\TTROGnpBFN|žSZN{zxxmuyxlZkU`Xdseu}?ezgzhViyzywzryq_]ZqXd]fd|svmqB'2IV5aD=NOQsytx{eU_a`.`n]X-*APbKx}F>239g}ADEDCDEB{usm`fzj9ELBFѼ屪나¼ûȼüú¾㽱΄񅉐٩FO?m`gZXSpqZ9LgCJKH?.M=B"~S:>.+(TD,-"*1KOqwqY`o_4@QLHOdij\<~~~~~}~}~~~}~}}~ ~}}}~~}~~~~}~~~~~"Ų׿ġͯ۲ڇˮ}baRS[f68;9555:;99;<<64789:89943345434964346;>fMLROWgrc210d_Q^24/21/553100.132258DCAD=>>xzSHUOHpn涤냗üöûŽӄл凋T]aHuJdKQSfRJBHU[@=<4D@QQD)I@Zfu{xnjI_~mONVbTxfTggv}WKI65\vFRQAuNED9LHH=7477898:9775568506314466oOQYSP_eXX,/d`X`jck32101/1/1139;9>@C@@@7;;A=qmry=FGKIĭ򑵽Չн܎̱͚聲ڔ딟ڞ"ڲϝ҇̓Ҁg\lufhgǑzY^}\mĉubsuqjiotrqrokãÿgXifjMMQURLJNPNMOPPMNMMOOPRQONMMNMMPNNMLMNRVWifalz~EHryHGHIGEFEFGIKLNRRUV[VKLPXRxxQe^X`Ԯjwr`m[WTNcjio\q]N]Rdmtĥ^ppʰziW\syc]n_^]uscrr"oolei|h{v~xmgmXN4VX<5HE5@8|x<=hAF0:h9=yqVUV#0F\kRXkl@J[rADAACBA?@BDEC|lctvձг۾򗠊WxWU?ZI1H5#%-cR,ED?@=A4;@-!3=z@4/W\0RY8r@}ztVJT4QQ>:Kb?@=w,EjHC>z;1=TBRZ8039@A8g}{>GJNV訏踮íԗߜǯƉ禐砳ؕ􄘐띤"ߺȖ̖ժhomzi|sYdhĐ}[dhhgbmСo܈fomigluutrlgfjkgǿ=ksbd{MQWUPMOPLJNRROMLLMNQSNPONLLMOOMMLKKLObWee[n~FGEqnwJGHIFEGFHLMKNSVUWXUMCFOXUFyyN``anqyΗ|ilgbXyX\\]x~iobiYtrktqguvTwuweW`]]m\lzs{fq"sjhio~|rbwn@DRL*"?@151x>?hB,/[5>BDwA/:.RevEBFo_dS[uCB@A@ABCDCA?p_f<>@@k𙯷À󌒋ܹĻ䃏aHMeF/EtK9.)5'0.7kGG?2N=lFRG17/6,\L;YihiendX_C.Ac~~}~~~~~}~}~~~}~}}}~~~~}}~~~~~~}~}~~~~}~~~~}~~}}~~"ꫝʔǁڄ۲񧼞툛퐐꿣ԫJGrWYrqtw89=;885106<>8688778998;74368:75432525jcV[VJR^_]2-1c_VQZff326//1468:99=?B=@=834lg?FEB>@ADDi皙ŧ̹Ԑdzĵŀ߈~IAmZ?PYSG8J7DJ-7@_lUP;xxfYQV>M{q:;34Y5tDL?0\S8@[@Iw`FVIEwrwu9:=BCEdAh;"EtWMD>@>>=849;CC@rR1>KQZvƠӬڳØӡﮋγֱ۸՛쓹ೱὼ削Ώ"Ȣ巒j}ZssnqeiinkY]flqsp_eptsfc[uyiflolg`opmllmǛnmWUoXmHINQRPOQOLLKNTNLOQMNOPNLMMKIGNRNNMKIJJKy\[`U_~EBCBxnIIHEEHKLLMNQWVXW[WQPUUb`^fAS^]lfƟ~z~čӣ˽~lz~m{}fibxpzƜyUfkhoi"vhaɒifirj}/>Ub/L11HHITEh>>DyH:HM-8CHGFB6;bdGIFt964hsiBNqGFl]jDDA>;hZtCBBEEC|[v٨ετƾĺ̶žմذbAlkY_DG}`raHOd~vY~{vsTWDBlcH7;;8>@3H_?1RL>PL_DGGigob!D|rgdj73=?KM?Q"nTNQL@YFChkQL`fe4;x~ocA=?hRKRMm~~~~~~~~}~~}}}~~}}~}~}~~~~~~~~}~~"킂۬ܩӅދͼ̝묡ڋUL[X3228<:887521334:98;;989;96663358::765768:scXXUFGU]^0../_`V_hbZ.+0226567:;==???<98>>AEH_R7BLUcĐџ޽Ϸ讽ޮ׺ٲ쌤Ҽ"úϸԀ􃉊ޞﲡԀZW|}kmjjŗlr[_chmqp|zqxuhcfwgefhecmqonoi]VXTv[pHKJMRSQOMMKIJIJONMNONOQTROPPLGFLPPMNMLIHJsZYa[dvCDED{rIEEEFKJIKOQTVZ]`\VX^W\ciydIVbdwφ͜g{ñz샶}otygq_vhf{lSBhrXcly"nXqq^cbccŵniia|?OS_gNsYB@Bu>:X/2;EJJHH;:XXDHF@ZK9gsb?JdDEqlBB@@zhSeBCDCA@uQiŰݗƿýžԾºַ񓖝ûcocltLWKYX\Yllx|y[\In2-7GAA275njME>OYMXE5Q;=R< C}|}db`2/3:7;_J"VOMMOA2]2DFu2G].39>~}~_oE@B=tolQZ~~~~~~~ ~}~~}}}~}~}~~~~~~~~~~~}~~~"߃ߴڇ揘Q܍㱢͘[CAxYV123798898656597686<:9::;:6898587636657pf^XQGNU_a1-.1_]Z`dc[.-255633678:=?@A=:>@?>AFIKDILXb|եɚҠȖݦգ/רǩ򝳾೚ۈـYiokeho\chlnpn^U`r|vqntbżgdbaprnpiPIGsZmFIHLPQPPMNMJHJIKMKNMMQSTRNPQOJJLOOLMLLIHKq][eekvFFHG}tsJEEEGJJIMNOSWZZa^Ya[UVW_]YS\aku˟`~tioȮnyr^uravu_PTRPCmg_\kw}"|pzwzr[dhlf|nijcgT1RLRQA>NXfjS{XECCv:6W16>FJJE=K7+XCHEEwBGpxtMMlFBCFlSXrCEFDBEmĔþŹ񆓗ֿ惎q}cdqEeTXo]SOc|mLJ`2-<:C=6>MrbI=JUWC,1 ! "A;ruwrjw;;3358aN"Y\XPFCBI;@A@53>H-3:ExpCNFCE<>}}YI~~~~~}}}~}~}~~~~~~~}~"ကňŀ񹔞ޣীݯ؃ΨkZeVS44599::<98:75866559:9<>=:67:<987877656313nh[WPJQR]//-/ghb]abc/.0023324388;@A@?=;?@b,!F?GGKW$0tras~}CCEtc[nDEDFKy§Ӎƿ񀆘݂ez}u_Cjavafwv~arZl}nhw|xsS&1.,?C10TcwUAHV0VH&$39;0-2ojrxvHC<-'=DY;"PbdTDFSXEB3-0(",C+8==:o:ABDE<<>AiV}~}~}~~~~~~}~"ֻ̔涔琖שѿիŽٹ`O]VW25588:;><B<878<<:8676536610/hcUQWYXX[//10ddc]_`e0./.121044<:=?@>;:=AA=BEAAFGHIOSIѹ̲ƲԼݍџԻѤ"޲쏜Wdd¹fnYcknmnpl~Rs_xwhxWdçmofpzku^Y`[e?FJMMPORTVWSNKHLLLMPSQRQQPPTSPPOPOMIMMHJH}e]giio|CEIGz~HHFGHHHGIILKRVYUQNQWVQW\_`c^^bgc[ȤugɤŶllèrqbwboaaeĥhV~wcalilNE"d}^g~weoqg]`hlhnrrjhggW-NHNWSH>BSZTIU{h>?S,6@EIFAAvJ)C68CFGo3)tsphTPkAEFsb\o{zSzҀƺõ̀󂃔𔚓yO]\|rkD>oU^r}|suEw_gZAxqvmeXG@6*8@-%99haMLV85fPI"$G>7::9gnnr{LJ2"9=U%"8YcVEGU\QM<#") *D379:;<=@DHC?>B>;~~}~}~}~}~~~~~~}~}~~"섃ꂃޣ㶗򑕗뫜鏕պʦ҈UMYW\a34677:>>>=:788:9579;>?;989<=987441/3311bf]KK[d_]``a23_\`Z``f30../21269?=>?CABFJA=EHIQQYXXحǰŐБӶ󁅁շμ슉ϨλգՅ"ΦVSUXYXqdǻjtYalpnnqnhzmihW}Ngкgyog{{uxɜKRPW^\euCJMLLMQUVTSPNLNNLNQRPNORQRUUQONMOLHKIGJ~hZbiiq}GGz~~IIFGIIHHJKKQSUT\WUYb_blgdniprunv{~peø{tmh^f`~dijc[`Qh}Yr]Yu]vfx[gjddjdgppoljmS,(P-1^NEL./VDFi~{c?CV,7AFIFA?=lTFJh=?>]%24rzT+ Ez{DCm^djcZkzR䔱̀얢`xCDNSjD=}j]pzuj}}qNLg`CBusvk^-%!:?R9'.:@ZXFCc:632KF3!9DA>5pcrw@D+!54YK7"!T[W@EPURQT?$2-('6L-6>@=ACGF@?BAB~~~}~}~~}~}~~~~}~}~"݃ꁊŅ갱䍒яã¤dLT]WUY148978;?@;76::9;8867;<<::;=>;9755224321cgXIL`g^[_]`/0a_\\^Zc61./1231479zvn9;>@ABCCHIC?CHNfffelȱʯõԇթ麦ŢͶ޹"ҿ劕TVVSYY_[vdjʹqXakomprrqiidfnvmqL[lͳiˀ~CK]b_dq?HMQWYRPOPNNNKNONNMOQSTVVROLLNMLMJHI{bXgkbn{DF~~}zJIFFGHHHJMLNNU]_`[WZ`bfjkorw|~oiefvyofuxcJopѫnu\phde[fw_Ww{ctxXijfegegmlrsmoP,(([1XMP,0/RBDb<>sjP@w{Q/p}CohrmWp}nyvˆ˸€پ߉P_QFJfF?w<QEMB"P]X>FPSRP^_:;4$%3@H4BEB>=?CED@@?C ~~~~}~}~~}~}}}~~~~~~}~}~~~"߆􉏐װ󍗚Ô̯ㄜׂoF\aSRU_57667:?>;88;:8877417:9::8=?=7765543221`f]KH[cZZZ]]//0deb[T`g001334226;>vq58=>?AEDHGDADFRtwz{냊ɤȭމٿЛڑ۪򆒑ʞ㽁"톇ӱ܅WT`dcainke}Wbkppqsqon[rqlmyx̾u@Fy̸rr{va\I^f[`kvBGLNMPYYTQOOONKHJKJMMLQTTVWTLLMOOMLJIK{e[npdp~EFF}zIIGGHHHIMQRJMSX_^\X]cfedgrzy{䛥omkflnmμnvipgsgSmxwixpZab_ioUkR\o"m_YXTtiwVfmmilmnmjoormR.(KSQ@CS-/14_as?ABDj?>@;VVp>?{hMErV Vt{yo]cUTd]çûÀἱRljX]tDGF@B<:}uYkwmDNnt?EAwph;>9H0B%CK^;<\P-)NS87][/30.NB0;6A=5]]WR\\_V3Nj"4ai0FORVSM.-'G9#-EZ6BGF><B@ ~~~~~~}~}~~~}~}}~~~~}~~~~~~}~~~"뇁յٍŗÔֳиֆ͑IUWQPWc77987:?@=<79:865443798889>>=77556431//ahdRJR]XY\1/0/._g^W\`d002676638>@;<9;:<>AFFIGDFHTm}䃈Ϯ텢ޮ뢄ÜҤζ胎ʪߴ"Κ里ūWSxg^beeZ_immkVbkpssqqmeqzwa|źYyB:e¾l]_tQY[WZao?CKOLOVXTPJLQSMGGKKLLJORTWVSLLMPQLJIGJ{idqviqFEGHFGGFIINTTNNPRQTXZYW[^_X[sy}alsqlnrql÷stholb[MjrulW`ed_d[YjghZǓmon^UWZYVinb fjnorssjiecjjZ2-RL8+=P+,297o>CEEAlJ@L.5;>@A?BB=_Hc?=>>RC=R|m.+1\qmW{,+Rn莶άº÷ǀ׼焑ӅHVg`29?GJGE?>y|whoo\nzLgx?CA;jmVd0MN5lwnxmfM60RF-T[27510`OY?,:1S@P\_2j@2T"b@?<0-TURL*)))G6!Ip>EF=8DA~~~~~~}~}~}~}~~~~~~}~~~~~}~}~"cʢ򁍕Џʑ˜«cg_RUQRUe6885:@B@<9;:987676667;::97565991*/mumYPX`]]`100../]_XW_^,158:795:>@>w?;87==CBFEHJN[lv˿ϊڃɼ;˫ٸԞ䄉ѹĀ[Vic\ac`]]fmnophUZdimpsrpk^pxtax}J;Tylgiruy[phUVVU^xAHLKPWXSLGMTYRJGKLKKHLPQVSPNLLOPQPJEJ~kftylpEFHHFF}BCFFFDIKPTSNUROMTUWUWZ]Yay򋬣hrrdiktpķn}fmlϸÿ__{Ÿseb\beefQ\`]\o"^ttoeVUXXT}s\ojkjqsrpi``62WJ01GT,-2668>DHFB9WJ*28;=?@ADB5N9UA?>=PB9KxjX/9ZuJLkZvK47d`ȉ޽ȩ̻ſ퍞ҿte]_aTY37CDB>ABzy~tqRZu}@ECwepo3!0[A{[4?N&B[575/4[UMYQ==Q`6-59N<*l"FEED=1TOPH&&)*WH,'H6CEDAFF@=@=U^jx~~~~~}~}~}~}~}~ ~~~~~~~}}}~"ԪԆأ߆ټŢnBiSTUQOc6766:>?A?=<<<98::648775369==9675=?602iukYRYd^Z/012.03``XU[,.1479:;76<=rk;;76;=@AEHEIQ]YÐå􄕗ɫ兇䗉ͿŁض"င˿鎖򽵱]X{|X^ab_]_glnnojZTW_ehkosspj`ihul\Yzoh^zOCNZj~mjur`^f[GtTPUT[v>DINSVWUNJNW]QHILLMOKMPNQTSPMKNPUXQLL}j`iqdh?EFIGGHzDEEFHHFJLOPONRNLQTUUXa\_hjyՕ«a`]tym|sveioϪz|ξsmxUbXfhg`cRvosmhi"qrrojX~SVzkmkglljgea4/SK;BR.121/16<@CC@9/(,5=>>?BDC@5=AAEC@U%;@H@6O*=Zl|FD|mhbd9#*F荠˵ɿý憖փތfymjdTU10rph3=C?w||idysksv9=GhY18Fvya/+A"&P02/,8OF6MX$3>E52>\>""H@@@?5PGJD$'YQ]TE2;]BGEAEGA<@zGRCV ~~}~}~}~}}~~~~}~}~~"׹쏗߰䀊߹{RlWTZX\hot69>===>>;==99==846756479<;9755?FH@94neYQ[e_W/222./5fc[\_,001589<8j<:643;898=>AFIHIzmޗپ膈麴ǒֺ۲݂̾ǕՁӵ"ҵ嶷􌔌ƾ΀b_beccb^\agmkidWSV^dgjnrstnbswiw[mph\rIAJNvjme}իPYWOz\U\\ftzHRWUUSONNV\PHKONOPMLPOQTTQOKLNWhpcRFzk\dkbf@HGHDEHCGGFILIKLKMIGGPUUWZ`^g疲ƶ][fst_vqſnrrtpidfͿl^V^j\p\{yuҿWx|sqqpoY~}jjacfg`aŢc71QKHMW26760.28;=?@=1+/7=<=AFGC>6A+I~IExHM,P{IHB7L# VNjB?9mdbh̿o Jm򅔔ȳõӀ񍩷f|{qic00USRUT4<:@8QHC>HR\OSVMD;TwFF@AB@>@shR\~~~~}}~~~}~}~}~}~}~~~~~~~~~"ַE|saTWY_gqvo@B?}y=><<>:7:@>33889789879:77@Gc`K?n^WV]fc[0532..1gjece0./349:;8j><:8257:8=AAFHHJkܼ썊ܡ礴ɽǼ̤څ阍חȄ"Ŷٵ򌋈mlqzplneYY_hhe`UQTZbhknpruob|yklimmg[qv@˙hmd~ڜ\\f}Hp^_emvW\UOPQTXPJOTVONNNQQRSSQPOJJTcmSujbenmr@KHFDDFDDGIHLLOPLORRIJKPPU[[^^bgx¼c_ooU_h]dpnvxurgiZju^oKwS|fɜtXh"onopo^c_`bd]^ifcflB=VBFQ]5,-4;?C?1*.6:9>8_[UURsDxD7]zPI%NvH/)2?^8GH`epD/rG"DA=?@@EI;;~~~~~}~}~~~}}~}~}~}~~~~"؉ᤢ偌⚜파ߧãᛣv~4oq3.[afjmloADzsp==>B=6?><4/6;:=@CGGGL}|팏Є应Ӽݔɹޭ۩׼"ʽŹ셊djmp\_hcWQOPU\cinqrqmc}vvqVt{okjja`Jsypd~VM`x=C6cszX_PQUXOJS`fQLPQQQRSSSQOIJMQ]enjTkcdokj@JLFEGFDDFJIJNOPMOSYYNEGMQT[``afbȨfl}wUYWWPS}Š_]vr^bvntxtj`νcγ}~RBOevqΙWb"hfmjjeZa`c^_ehhlleA;J/;SgMohgzW'8V:?>7,%$-78;AB>=8.K>CiDF:DcIFDD=dB2FnZx?6bikz}AoЅƻųĀzk_goyv=@sG7CUW+,-S$"'Agix:&=GK>FRqDB?:89u_:7?FE<47;=;=?967:$1MhVyano'0Ru>;1(&)1899>?;:6-%;;X>D9HCe?GEB@<4S< #;e]E9dnnovgsöЬꊜezm_hisy5RELa[LXZTRIT_ae:ADE@@DDG? ~~}}}~~}~}~}}}~}~}~~~~~"̢쐃ݔ孇ڼԑ}06638Kjlafflvsqv@E?BEA??<;<54:=9<<7799<|:5464:HlXRcd_285kjie0c`^[,*0/235988;R48VVGPMNRSbqemm=><8;@BJw~~~~~}}~~}~}~}~~~}~}~~~~~ ~~~ ~~}~~"ȦɘҼؒm_Dhv96:Q|n]ccftpk;E`RBBCGN?8856:::<:99;8;=942115txp\R`cZ244njf.,^^`WV*0/0237:8;CCA?=8<===CCGLdؽ焏罀ە򶂷Ο"̾`uRRQPbaXRQYi|Ybmkhe_ZTptmnppoheb^tltkuȐPkvl`NMPiP[|p\Z^m{`OLLNPOQTRSQPMMNMNNNMIwrc[hmsAGJCBBEFJLKLLJOXbb[VQTSSTXYaeu餾gkh]bnpp`tyor`yps~SUpʲ]~PfZYanxuog^~_mokj`º`"cjlpqplkosfQPt6\|j<;<U"$*FKL~t}u\|E?üŀ߆nklwqqtu|=;82g9@CCtg8?BBlS5a~MLCjRU"3WRrk\O0mGE[&`nE KIKEDGD{K6Jh<*_H8:>|gtv}D"BDEF>9=@Hh+BO&(MJSS`wsskmrha`oye~~~~ ~~~}}}}~}~}~~~}}}~~}~ ~~~~~~~~~"؁åւ֢ڵl@o\aky<:CCB?=8;>=>@CHP_Ȕ腓٦äًɶО؈ЪՕ"Դװsv[\PSSTW^f^TYfzYamlgc_WSNb`qsnnqsoggn{JrxUƯYG{`gjPPRdpzR^|a][oxTLMOPOOOPRPPRPNKGvlof^jot>FKLDDDDFKJHKLMSY^a^XSUWUV[\bgugqqifksrd{yvq~gͻdgvoY_ldsfvv\yzrkazomqkb*dmkopspi~cdrQPvtB`<5FEWUJFH##%+3jBF[EGIN;XxBF/g=.-@N?K_bSN.AEF}{"CDBA;=AD[ED34L%)UMWO]xyzww|{ohivfN~~~~}}~}~}~}~~~}~~~~~"ꅍ烁…gEjp<8u~=ACHU_xȀֈᆉܹ㕺ᶓǸŹޔ¾"ԾåаZ]TTSSUXXX`ikZ]q|hZbkkfb]y^WO_V[hooppruoffnhPpvH_doۼmFyYU~NYppa{YhojURWKNPTQONNNOQSPNOPMMJHtvqktuu>EIKGFIF|FIKIJLOSX[]ZWUOYc]bhqwohƺhpsoqttiPwqq{WwaXhq[Sbfysm|wrm`nrsnfa̼"cmnnkrwjzoSvo{ia^L`74'ISU))***+/6=BBAAB@?@@@?X#$#-eFMtۢë맭ȸƼ򗻹À慠ኟ@gE>st=<@@BDGEx^I"9yJMrO;=KC:;CB.45?KOP9]+)GkS3 *)-&gmHD>?AAnKFOMZjJEDEHE"BDB@>DIGSFcdGU)WROZ\fEA>rvdM ~~~}~}~}}}~}~}~}}}~~~~~~~"򊑋ꉍ܎|bimpBDHHFI|ILKJKKPWX[_VTRM^h^ago°kmjgliffhlh]etbyirǑ[^sQ|dcajuul^aUcrfzpxur_fsqmgikjkŤ"aknmlkqjhjxryǽggfL`44,'M'++*,//1:?8Q5:]2.7=934<<96-E1+)I7:@EDCEGD>=<=>?=<<@IG?_GLO?OZyEIs>>.1GOqB/*-+39BR/&9e1+&Y/4/@uq@A<9:aCDMGEP\gqyzdAvc`4878<;9798;<9;;86468gafhdaci75856017ksm_Z2467789v@>BB<<==ACBCKRbvդ􈎑ǂ쑲ȡلڤ재º扡䰾"®󋙜yYZSXXVY[Y^a^d^\dotmjjfaX~crTlmonoqrsvshed]pptcP]?OSYaW`f斌hOKOOPQOONPPSTOOPQPMLIuvxpnu{?AFFIEEH}GIIIKKLVUWWQPRPRcd_chq˗glmniYudvffk[]O]QnYZyVhnpgqfmjis{wwr]^pqrknopsm"\gmppijihddhbxxilmemIX00,SQS-*',002;?oU=Ah8.2@NO?6775.K@FB(/-:;:>vGDD4BKb@HDocnΦƸҌȻ񳩸甄߀끈々чyjh~>>@A=5dja5LSEQ=4MeCW-'4djN<($(394(d9DRWkBJEA@JJEGI}ih">CCBDCGIC:9?{>`JGN^u}wFC@;wO~~~}}}~} ~~~~~}}}~}~}~}~}}~~~~~~~}}~"͵چǶ؆ΒN<:@9?LKkawnfsyKǒM?nd5978:9:86:68>>CCDCDJMYۮ뇘۔딢۞Աܖ㽼倕"ᴬ⊝䀀n|XUTVVVXW^Xdcc^W`llpomoomlnohb__]y_mp|ԥ[>7GJKS\n~^ˏbQNQNNNOQPPSRRPONPPONJE|{~vt{{GHKIDEEIIIKNWURKKPRWXceedir뗯eqpm^R]k|ho\VIY`g`WbWZ[w_^rbfyxpθxss_Vkgsmkjrut]"WekqoiiifbcijhjŴcmoiZfDBKVNMX^.)&)--.1cYQNVj4*Qz|c/+34/G=VR%(Z:>ACB?BD@?<8:wT)+Vmb:BIlaoqóӄׂ솥}|DŽрᆈ􈠹㻚fme9A@?:dbwwV!5NISDXD`hjX 0.9Y??=IMC"-DIABK=\U":AABCBEIB=>BBAFwdTTSSWVsx|>??60pL~~~}~~~~~}}~}~}~}~}~~~~~~ ~~~}~"¦ѩڬ󞦧ު胒𥓕ݗUF=>KY~do}DcՌI8i567988:98>A?<88876647gkokjjifkk43313734`[443337|~{?<;54:?>BCEDEHP`昩̲䆣ϑһ𤪢ЫָΧֆ"ܽ㍣ӀbZiXWTSUTSS|~}ċ\[_\Vuxmflqnlllkfehfa]WqaYhqu{pK@FGNi{Vbxv~TJMNOOLLPPQVTRQMOPQOOJG{z}xy||vGKMHFGFHLJJKLMWRQLIMSTVW]chekx·mnmicQlcy`j_dtWTvoq^uxiqgoq~٧tttammjhqowc"T`ejnigedbjlokhirgy}nyavqW~B/8MHDT0+&%'(&&PNDAHTd]E>f|h-&-0,91OIC$U:>@AA?>;FOgVebSڈ󯈟ڙhX_ƀŷڔ҇^gaUf=>AA;pqlT@0LFp[^raK+<I37:>:57:exFC<7fJGDMMLLtC=BG>?L>UH"1:=?@@BA@BB@B@B}=roR;6FSPR];A8'Ld~~~~~~} ~~~~~~}~}~}}~}}}~~~~~~~~" ӄݯȹԒ’å혁kCEVdsygvHtd98447999<;>CE@<9;96655nfkjikiihkhe67425562.555227~x=:997<>?@BDDEITg䅒յϑ˜볈쫉گ򍓒ഋW{TTTUTRNtkig~kVX][^moqnllkjdaddb_[lZj~avpyz𗊛LBHPtzwWtfkMLHILPMLPQV\WTQNQRPOMJyyxz~zz|IMJFFGHHJNLLJJMSQQPNQTUTTWZdemagimjdefbkͷg_àЦST^smov{U^druzזtt~l`eXhM"QX^chda_gkqlgdgdc]d[`yVieaK1EDVD)',/P5,jhL-W<>>>?=848A@759mJGzr?OjKZPVaz~}͆j^NHxҀ爖ӿbzujsc_R^7::;=:4H>&3:>=>DGlDfeHM?HOD/Aknn:6DpK "&+8@>=?=w??:798ceEoigGVME\s~y̹ǖjNuEJLrù؀ͽᇫ牢QX`hWYd7:@B?9o^NEROMG;Up~kWc}yx]G-: -?NH=0,:5)2<835=[ECinr9AB*7E77}>BcWXW]A73" !3@A95._i<=A?:~~~~~~~}~~~}~~~~~}~}~}}~~~~~~ ~~"ڹّ汎脌˕ʱފ瘣󇍇羫l^`\ێڝFF~t=;<=>CPbI937767875kdmjekqpjlkfb.386755/44437875<>;;7?CA@?A@CDGP񋋈ıקԛތ˱ӱͼ򆎐ӄɆ܉"튄؟廻fwXTRRRP~pyOU^c]Vd|gyjpmorqlc_cdcdebgkdpg{srt٠dY|q|kkonϹm[vAHQQNVpiSPSPMNNLIr}}wyzwv~EIMKKJMKLIIIJKLMPQOPNUWUTTW\`_dpsuiȵnmnoro­׌Z|e{ťwydt^nuoqtfboiu]\OVY_epyuiz"RV^ZRTzjccimmlkZzճH=C)4>IY/+(&$#>:BT_PRq|cA,+'.2/-J-DHS19T=A<<<:70/9>;:<=rqOI>lrvRK`MGe}^⑋玐hуulCEHy犚ȳۀN?4OYKds>;@C>8jbak\Y~S=WdtO0E||ntF@Z6NV=4407>F>8/22IO$/05?o)(?CDDF(6IgL3%0":$0<;/&:??[hwy<8=BCB>iA554ftkyXCY~~~~~~~~~~~~}~~~~~}}~}~~~~~~ ~~~~~~}~~~~"񋐐ݥ삋ݭ؆끏ɢ՝˩_dèٯRwy;=?ACYvZ<28:65565henhikm8hijd[+065754369636664=C>:>BFCB@@ADEGMm휡׌彔ܦȼε氛Ȼ虣൴"򈌊ǜ¿ӭ؅friwYWSRQOvivSWcf_es\nnoqpka]`cdeig[muvedlyϖéj{rߴgunhstFQROXxrVS_UNNOMIs}{t;t}EHLJJJKKMLJGHKMMQVTOQUZUUSV[_aeln\b{~nfob^dj|r\pʬuhdڞpS|nTzqqagr{]eJr{Qos"QORTOj|hnke`~kbWUZ]>AH0:L]0-)'&%A9BTb[]vpSDC%+110`XFYHH+-<6B><;<;2/5<<;?@pi?GB?=p`DMjRLqdІ]_y׾ÊDHFJu޾ִǽƿv{3$=?34WmA<;6ggh<=>WVE{e{M-BttWQz7)NJLh258-:28:V8)R(4C:IC<>pi^E?"E+*31D/>5FSfRfo|CEB:9UM:2dxgj839~ ~~~~~~}~~~}~}~}~~~~~~~}~}}~~~"ݐڃۛꄌג񒞢ڢӣŶp}̘Q_v~{87>??Omb>8><264655lkeiij624lf]/35466546765746:=A96=>DBA@ACDEIUͽԾˁʀ񶛌àα¸Ẵܶ䉐"񺱱ڹʿƌ^^`dhyUWSQQNmÀ][]\^]Yiqhpqplg`Z\cehlj^^muwk\kug{fji|ᝑgsncu̬kwzBHOQVnuUTc^MOMMHB|zu}{v<;3-2;=?BA;n;<9:;r[=IdPNn|iZnFJNvyӹڶHIHKlײ񄛷ڳȰѼہe#&5QLvpiM`if:DC^/N\{RJ``G>Z9aA?@tG!6=F2!33@DC>Cf8LZ<0#NHJ[C[\BaN>@xn"/2.gY3)7XWIM[FWjsGE;q^NN> ;NHa::;~~~~~~~~~}~~~~}~}~~~}}}~}~~~~~~}~}~ ~~"􇉆יˏզ抒ԗ뉙㤀á։{ׁ̆tF\t}y86<@>DZ^A9>;274579llijlj553g`\.3558877543784:@AGNNHJHHJJGNTWVOIMTVUTVbcg̈́J9}r=ytvSRcڀh_gfΎgŝvfnusq{{vpnXYTMk|ZP|Yzo}zYq|ywypxg_Qeff~km[uw`if6H[q**=JQ+*),S?2\gJ_i9mQET0/..+(SUD&F\t27Y;@?A?:5.19?BBC?;;98:;sY7HcFHxW~n_c{CZ:*BqFFHHIEFBbL0 B;7231A,^LLGOf6q3'K:QNFOFmJH;CBD"8:AS$%B@BMaH:998:778:nnhmnh46cb^.-048:774442775:>A=859=>;5//5>B?=up;;;>>o]JYqD3Zp\^HDBC>}óםTxGLѿ̿􈓙`=! (@j\<_szBEbGSrqphDFCmL2?SuCFE?B=5L@0%'MVG*2= #KVLLTlPc~E.AeL`iQ2QGF>@?B"?Jpw4'?VA-9BB-EjB9op]ROV6R>[6<~~~~~}~~~}~}~~}}}~}~}~~ ~~~~~~~~~~~~~"􃆁氊Ⱥ〉̿扆넉٣kӎ_ZcEw~~{@@@F`R<8:;>:98srlbikjjicda..026;773353666;?D><9<=::=BDEFFFu֣̯򱌊ׇⷭ∓ǹѵœ𡘍"ʤմ쁁μ޾խXqTWPS{dcw_]XSPRRxkrY`kmjhe^YY[be]UXcirm}rIJo`cjiɢ䁴yimY`pOOQOTqiOHKKKHHD~z}|yyGKOMKMIIHKLHJKKOV]UROPQPQSUX^`dpɍkm=}x~}|twԇďZZzgmmir|gmstkZ}iklyqohVT|aݶÂovsm~xwss"mzÏ`x]WIOal}Wghx*FSLPceLB*.)P)F20w?Lg|~p0-+&$&)I;3-3DWUM.9?=;<:4.,0:>:8kk<<;@?pkkpuK9Yrg`uIEvv@>>ݥ_}IM只ÿ󄒗T5(! $ @kmeWmos|tR-6NOWe}BEFBlE,?>9>8^YKA3< -9cM% $1 8ABFKivxuO1Tj416LHF@C"AY40?H73#78R]FXbkMjP#5S7@ ~ ~}~~~}~}~}~~~~~~~~~~"څ򾞋퉘޼ۦᇔ֕O\JG@zy@@CII?99;?>=<;;ADEEEGJOƜâ󇓏逊؎ݱ鮃г"Տ֧κϢaX]UUWTSVvi]}grndYTSSR}rvdb_`fhigcYTUX\^[Wafppöwdmbirrml½miXSUKMMRbaQHGGFCyw~|=zIHKROKIHIHJKIHKOOSXTRQPQPRUWX^``gtǗ}D@>~ލǠnjVbtp~chifd]_YUX]UcJxZVnmȵ{\`rswu"q{ŹenzirqX\idqmkx0PXEG02(I),')-M;:C~>Sp~DE9-)'%'+O;/-6La1-/7;;;:82+(.5887ikw:9@Ay}zqRFat:ipCApn?@?@EқlKK}󓟫ǹbhD< &##,BnWoqlslS19=;%WgZp?FBT$4k952065e;7eNZPY`k-B2$#"799i|CB|`c_:(\pENJED"CNCJNRE&6%0EhD;$*EHSzDLQ0Js>=???BFECDHUsż垆̼ǯ̸冒饗䀋ѡ惫VTUVVW[^Uuit\mlbXTtw^gidbgjjgaXSTVUVWZ^a`mtgeiucejnjbovvncl茗jsfsW{eORUXVMB@=}yz>>KLKKQQJGHIHIIHGJOSX\RPQQSSUWXZ^_co~ϫňihRvsuҬơrRezr~j^[U[`dqpkfrWrews~aVUfkqzkd{[}vv"tpbW__alZo`apuBUi[V2-O+04246+CCMKQag:A;0*PK)^YD4.7K032027<><82)'+1588hg987@B?D>nXM^l::<@@;uAB@=CSvoFIGn߉󀂀򁙭·{ZF4",37CTd}xjok_:2-#^V-;]@F5=Bmj,&%047@BEw=Az8jRE8C\5;5;XoBFGICDk>GG2F}E>"FBTDEB686]:C;EV:P0<1Ny[G7ET^`@?~~~}}~~~~~~}~}}}~}~~}~~~~~ ~~~~"Ӱܺ肏삃ԟ鄆ߍrjzʵӗion|df{AF[WL@p::vvplrurrq9:wqk74464745676678;|EIF<:;9>B@ADEDEIQa韍܊밉ĺǠÈ󁈑඼ˢϷՕ֎"ⳚȰߥYisgSxqpwgro[YxS\gfcejlhaXUV\]cticdtbensrmjmnngtڟnthʥwyivfkTovl_Ku::z~~y{~}<=~~FJKLKNKKJKJIJHFVh`PMPPSTTWX\^_dnŋ{Psl}v֢ׄuҭqbawt^Ÿ[goqqigkojedbsfwͭkvvna~nuSuXd"pcfiligmg^T`oqqwc[qpl\l|yspRBRk><94(DKSTRTXS^>HC2HCU3eUB9:D$)01/08?=83+(Ubnvvfa88iGH?EPB/?_5,"D>5/8>9E9= N5XF4A[E@379PN\nJC? ~~}~~~~}~~}}}~}~~}~~}}}~}}~~~~~~~~~"꼻݉ɚ쁇޾񓚕辗~̈Ջy|FOH|q?Ity^Eo69opierxr8tq;xpj83377966376469;x|GIC947:|??ADFGKQfꮧŠ۝ެͅ߄"씡灇⴮ӑ¹is~||qlw~`\`[~agb`ekg\`lhr_aottqigeiiyjmkʈhpFRKLYeLs8;9?CBA~fcSyJMIk삒ÖĹݑǾ¼𒢪lxcSeuQ(Fso|ztyqReL{O:;U;>87==fMBVim>EC@ADA??DDBIAMB:=:IֆthlAQUA/,"+/("ku@;;=>BDBO;#"$6:W:D^@D'#%CEM\~KJF ~~~}}}~~~}}~}~~}~}}~}}}~}}~}~}~~~~ ~~~~"ⅺďͰҀ働ϺƈؽǬ̥Ыα؄|{?>:9Ky\Co2665eepwvwswAHsj6436:999346547:vuCEC713:>>>ABEGMR䲡ታĭ썍ɛʡȿɟċҖʍ􂃍"숉󃃀»b}bkzx{ytglW_ffurZg`Z^hgX}{dtp\kqplgebhlȭؖfhldzno{@>=?X^Iz9=<9nnv|{}|HOHJJKKJJIGGIIKJJYcWJGMSXVRRRX^aj©kxto|Ā~kPuslrygƦ^l]akkpnmjhjddkusncqwyʢiq`LDM"mlnhuv~pUWP^wfnpgXkcdn~EKUNBELRhGD/JLd877]<+&!1-5.),123\OIL[n=xlef^JNkpmrgXQI]uy=A@=97"":UF?@CEFKL̶Ũ賮ғ͎ی"݉󎝜΀úddkx|bijctk{Wf`XX``Xh_na]rprvfoohcdcfdȩղݧhhkiWEw|BWzyNtz<8nhks{DLWIJKLLKHJJGGKMMJXRGJKMORPPQW^_cgjpڛziZZJtufilrzi}iťktpigiljfippwmgl\aoΒk[f"aXcjcnoUQXd|UZ}qtsy{ysÔ넫麈»󁀉Ԙ˺菥õnv?}s}lh__H{pPC;:7aSa>;x\2qjfhjc~mQQ{C=8?E@?CDBDEJCCm=*G\@:6?HQlS?(;?)Y"2(F?=DBbzX6S2++?C#mAgYK9S|DI?Q~~~~~}~}}~}}}~~}~~~}}~}}}~~~~~~~~~ ~~~~~"Եȳѣݶ슭칓֏ﲅruzw{K`_p~hnolhVTa~C?@wj:9:7:;978633366mqwB?565789<<@CCDIYȳٟ稆Թ畚ى㐭c"󅁆ہᛌäĽbgbXTSRW`egie}htd_YWYYW|wa{xiuhtsibbdd`ּȭmgjjħi|v_eco{{smberKFBKJMKKLIMLJGJLMJWRIMLIJJKQTZ_`hriiɲœ{dzlua||WMiVwcǺ~vll^acgkdlprvsh]{tse]gpȺjck"{_]]_blPQiZhSxjkuu{;|֠呿ɶɇƒƽ÷ow>;vy}{rhSzi^9GAQ4H\WcH1*6B1H^]*7Rw;uyKMV.3\s;4=E>:DGEBEFEC><*5B5),M3Gk{4,H;e"\2ps8=@9j`)W*!F )S+@=cH4;*1112.(*VQbr]Q_32_hlZD"0P:FpTO\uDC<97<@?>xxubYCEHGB>~}ѽČľotvA==z|ywuhek||TdbO1AJGZ@4PAGGKzb ;Xi8Fo=8Z FTf/t}71=D@CEEC:DEC3.(05Ls7.MX<\"IUOf{yeyiDP;9! @*1(JDEVV<0T+~~~~~~~}~~~~~}~~~}~~}~~~~~~~~~~~"뀉ԫdz󀐘߈ۥ́ɜм򎒕۲ˇ~{EUtfl`je_ILhǀnr::;=BDH]F64<<=;;>DFG:675g36>HE@GLoϤ򍒌ŞĵЦϣƁߨ򄕦֠ʽҹ"ḣ뫖beillfaa``^X{Udkd^\^a`[cc^ZXX_`]`b_]coTh~s~akrneaafhgcgsrmmmǥox}JYx}xsuqkdu{πJJKLNQ`~^LKPKJKLNRZ[LIMIFNTZ^denߠqunůjk̢rudXjriYaej֦uxv]iqroU{nZ^]U_szWVlq~"foq{nqlYPfaqn~D?=@?70/-.0-W\VTSMUZK6:PY/9@@@ACB;[HK,/0253,-/WV_YW14667r;W(9`NR\XHJ4@D?75:@>??{=ugVzHHFB=x͋޺򆠧spqxBA@lqxssrxrs@?zY=HLPS?;BX/CJ^p2!FVAYHW6|B9>P_EPMML@XnqkHLqTe2;<;=>CBDC5g67AGHFKRv䥢͂ރüГЮ̳ŏÅԫȦŋ䯿ɵלվ⼰ݜeelomjfcdf_WWtx^gbYf\Zbbba_ZY``Xaho~quxglqj^Z_gkkhghiÖͱvwxpmmhȻy~BM]plkdbqxcsˡ}KKNPXuJPMKNPPR_dKIMMLRYXbhiuꝗfpp|ȼixzrpvcfZkeWmw`ogujeZty[nsrc}\keknW_fk[us"X}nmhoa^Jom_QSlwsG@?>=82.-10/2je`SJV_Q43PYX4;@B=0O+121021-/3T>@R`,Tj>@FX~;:TbRicNCR4=A<2.4;;oߐē󎫦넘tmrnt?@AzSdvzz{zvnp=BDAlUTW[]KJkJA/GSG=5.5CV?-&"EOQCR8EB>8MG.5IW9CG)<;@2)#(":KHX~~~~~~}}}~}~~}~}~}~~~~~}~~~~}~~~~~~}~~"腏ð뺔焒䲜ݹ󏒖Ҍ汃ЬiAAITgg?25658;BGKGQZtƐ჋ޤ㈼Ƚ㎔™Ǘי۲Ԩ"隝ğƪhhkllljfdaVwxXcaebbdb[XXWwkڀ|xbl}mnqh\Y\dijfc`a`qțjvvsohΫcGHUo׺ϢmdY\ovorwMT]`BJPOMQRUoUFMPOQU]^gcl~adӄơtyvilҍzxqRwbxpm|rTm}f\~ynspfvix~ciƳp^f"}{ysi^Wbvsm]\\\O]SZsFA?>>>81//,`tyqo`S^`TC@TXU3;B}vxmI8U;84/-+(-4U2,CNLHVs[p>OgXEc]C@^8=?;1*+5<@??@A:m[ąID>>=>ꢩ̀աė˩_eqhfk9;rg^||zzmY^@CC?}kZ]_U>bbKXFJUc6_DS=8D>4&FcgM0+Rj\QDkEC?:\\Q6wI_g926W24"Y50tOD?IR@*'7<5&%[~~~~~~~}~}~~}~~~ ~~}}}~}~~~~~~~~~~~~"ρζパƽބ୅ñƑ䋦ԽɎn_S_y{{䨁e_VSZ^h⊻ɀnhoHf϶H/8===@EWY67566@<4/.ZjAC|ylZ[ZQE>LRS2@DA4+(/8==AvTfC@@??|xXu֊ôr·橆Y_]gkie`ch|c@DwBB?Jd`\XQVlitbPW]*2:9?0&:LF74bgeEClubyAABBsygdf`r\behXR3;"d. "D= &jNnl~nHnGXbxK""8DG908T~~~~~~~~}}~~~}}~~~~~"څҷꂊ䀎٭㮚ɀׇ񻉞򃆆ȉ뾒ʢΝߑǁgc[KXjmՀohtXÈ-8=?>BLp?<45:@ILSk}ñت؀޾ײ֨μӄó㙯"Ȱםõˀkqdnjeefda[lkȪw^vV`aYgcXSwaZo_|^_qogXWW]b_xcv}osۿ҆߹yVSe{tvtvi쯏?OQNLSWjJLJKOV^]oɟprؕhd][[q͓hfM^ΦtZU}ku}jqojlhcdeýdhŮYk"d~[O[ZUT}]wnt_BOf}EF@<><51/Y_|ECpUIHJ@/6HL+5?~qwoYUYl}@>/!AS]BQKM+2}|zxaDJ>~zYT2md7@>@s/*,256z~xqlPfs?AHIDqJr~~{psó`_ɳ䪱]vnaQKZXkvyymp[v6\7323hmsB{aWRbr&BKMR|Ėֶ‘ⵧ󾏓頑֥󰚲醕񀆍"煄Ęxeasagcdeca]flǧmvVZf}~Uyaf|\\lw`|nrd[\YZ^\x^v{߶겣zTWv|Ʃum߼vAMROMT[~ȀSNHGKW^^tȗΠޜy~i_~|mlW~cckfttfSm\ҕv}}֤vepsokjljjmiphkknnie__ah"cf{yV_p}fӝjNG@GZvD@<;9742P:OwDDzbE;DA.3JP*/qtwn^KOY_fZ"DJU`M\B;DRelWG<=GLF[jRGi?@1Xpr70,,,-fZF@Xa`cWel;898?CJHE?@};27:="A[).A589&!>pDOH]qwl121579>g~~}}~~~}~}~~}~~~~~~~~~}}}~}}~~~~~~~"ꯚﵪƸĬᵇ޷ڭ􀀌ӈӗ눇hpiWd~ϘlݢRi>>?E`ol:=CGJHdǛu㴝ٸؔꄐዖޙ雹ނ"ϩǷ́ҟ{kfaeghh`xjtlaeXWvjqǹǘę}lxgUd`\^Z~caXYaoozַԍk^q|}tз筡ÛQRQVspJNX^dn񺅴øbGUYT~kghܔkibmdgkZ}|ie֗cblqkmipnoponlffhjga_edik"mn`|t]elpg_WXDDWb||Ycu_@ajjWlCE;)GSdp6/,,,[G)@itog77:@RYC}js^e{rpDzb_}^Ť벜ၒޒ󉍕Ҥ}sdPztvna9 3;>NghH$@;GM5A:kAA]"?PMnVAZoYAK80HOIqAl\}eCB>;DB?<99:>EE@B@AB=:@I{n:@9M234CjxcAC[1-]]W[X^zxfNGKM_vn/144.XP>fPMf8Lko[RQ;*Gqo[\|BQ0NnN\:3]/]VD,50740117>A>:{sTz}czXgغtXuWjۯ熐t{҃sꊹQWK>Bh; )EFSs"Z: 0*9s8$'++MpqRvuEJlI %"GD=~~~}~} ~~~}}}~}~~}}~ }~~}~~~ ~~~~~}~~~~~~~~~~"Э狎л亳쎗֫áآڮٳ͐ⱍփވqA~uᄕ锟ZVit@Fwsq?FGKVhsq㊑ʹʞֻίȌ΋񃆆ڽ"끒ĸƃՃǖҀ]abd[nbcc`UemmcWS{dcqɦorS|]Wd`dfcbd`adda_ZrįsȪڮq~zw֋̄۸vQWnW]giuj~sqrɡRZq:2XP=9Z~lTGaj0=sJn3_0YRJ7*E341-./7@A;<@z]FxVXp~vPe~MerZu®֦Ѵo{˟닟}[|UeK??zcG .5442F9=ScxQGfdXS]a>FFXPOMJjJAZ~aQiP0XhLt@BDEGBs_Wkl7`L}"F'-!6WQWKB=F0HEU.z^s]/5/43+C3 ~~~~~~~~}}}~ ~~}}}~~~~}~~~}}}~~~~}}~~~~~~~~~~~~"ցϳޯ艒ڵ丞ۑӪӚݹ㔓֠͡ěnO˟|ʛy쒫aXdsFmz;BEJQev齴vڹݗnjќґ񊒋˼ջ"΍گ菙񍉂䀠dnlhc]YYZXVVobɫ[aa_|{flmi_U~ha[tfu^zq]dhpVddlhbbecceeca]Ŧw鼵~uz}{}PؙoS]bekuuoèeA|HCIKG{|qp}jd~isroXwW]~u}qshfc_}wwj}y"{c{y|cms[w|yOhwpj]]8512/,,041--UFDB;`uLMY..03d[SMN[UNQP]pwtw@A@>81TNMpe>C^m6.SREBbCoO=LT6&7HB[\X,VQH4.T742/008AB?=@iNsbtwzY:FLQ[>@\5693GnykE@29!@PKA,9~~~~~~~}}~ ~}}~~~~}~~~~}~~~~~~~ ~~~~~~~"ڰ䦵㆒ٰ􄑗䵜؀ӮՖɴ߼ɊҠ߳vyuϭvh`o|fFRM>3+QEzJLW-.-/_XSM@:205>[u}z|ACB>>;1L>?vLVN0wBmVTJCWwBwKmGWQPXECFDCKqbsokrm^_W}kygmofac^gm[MEca}S]"mVmtvwnd]dk~]bhf}uq}ٲjk[4.E^PH*-)A8?QW<%4Qh]M`l0+**WUXT@W"),0Opzz}AA>:=;.@/:F^k]1?SG^NJHSjyI5Nb\^kYMHKTWRNNJ3%Kg741029@@=<=<4WPS\vtvukUCƋՒwUIĀzsZҽ툪~tfψ_iYdtEBB~c>  - &7wb`=DC>=6A{A(Vxrnnv]JZi^P6 ?O_SDPD\U-*20"&88+JOaT+)"%"5*"); """$8e4202WLf6HKpedt>2~~ ~~~}}~~~~}}~~~}~~ ~}~~}}}~~~~~~~~~~~~}~~~~~"·߲Ӫш޶񄎔ě򄃂ݼ壏ޮݯ̭ÀǠаz|B\ůΓ8=}Mr͙̮ɲDŽ뷛ϔ՜Π唡αЭꐤΦ"˓烈ۨ흑⊕=Cdp[[Vlyaeb\Wnfmzbgjjf_cz`ZY]}xw_^d]w|{b}Wfeccbeihfdba\v}b͠tex…UiPU|NփeítmlxmqheQLDBK./-ZY[dePBa~NNo;1)&(RPUQ=GA`?=Kgwvw>>;9:7R32Rahl1.5C\JGKWjyrL?T`**1/L?H\]VTSN@1B0533238===<;82eshbkuqjeՐzlGzR۩orsut`Ë_p~>vwzjR@'(88*>  ;~pbqns4EpU&8=W^p_VXfB8[hX_L;YF[.-TnNA)!*=*-=e2AQQGQH".=7&*"B;-,d4../+9fHoXUYiOn-&~~~~~}~~}}}~~}~~~ ~}~~}}}~~~~~~~ ~~~~~}}~~~~~~"يƲ늜ǹ쑗낌췚 ޻稜ѥ߀וֹu|Mǀaڱs}GǶ3) DGNpViLla"$ ~~~~~~~}~~}}~~~~}~}~~}~~}}}~~}~~~~~~~~~}}~~~~}~~~~~~"ܐ捐Ɇ󴩹򏑅Ųݽ挑򁌖䳣ᷠ講劓Ӱ傉ƇמQw\Àpƭxhqą6>ghԯƧԬݨ֭̐ڶ欆ހ"Ӵ쒟ɚᅿݮ葀Nsea\[qccZpr]brdiombW|w_Yxcyrz`h\}QPQ\_^`cdgjkgdcbX`hWpc`zkKVoextqz»~fWof^q~N]wp]VNZskwtgy|qt~{xYMP"xvpj^Rnio{Ogncc`yy̢e5RfZ1E^0-6}uLsrRu]WSU,)(SOJH<>0B'%5Rky{;:;:4,D1;ewo50F&BZRPJMbspI53$6).,LEV[T'&)W[ZY..121258=?=;5%09N?xtNJǿzt|GF~wwxw~xV̳҅nkxyveRgYFDitw}yuhOE(BA^dSV|#E4B*12)&rBw_A1bqVDOF6PrGIU_oq[XOYQ\\Z6FSX,9@R*@3>".R`_I= &)*+0$9Auߔݺ߄ƷӴǭ،ɖݚӱѫ"̓β勂̅_oa`_`hy}rd[b[js`bngmplcYaabYnmtYg_QRRY]bddeijgdc]oyѴa`Wtu֨ʊnzTwxtuugtȷƨ{bepconf]Wm~wXqYc\x{Yp"WYqg^en]foRq^dlgUxqhv9N`g9K_.,5@}z}FKF@>xfRY1.,OIHC;4P86W6450<%-HWTUQMYtoLPK ;/3.RKMMJ$%)V]acd/0.--18??<==X'H}Ss}lꫮFGDzhguæx庰֖py[n帬KNeezzcFz\HD[u~t~IE\x[bH,CmIJ9/:B1-;ORU`oM(4[3`M3I/rR|~A XqzlV_ittxT^ivBGNlJPAS"8.s<^Z4+/:",1hC4#0GOM?WS|DS_-,3;A{rvAFHC>|]GT^/.QKHD>J;G+1CFOsA>:<@C?3L;M302`9$2LTQRSQb|nXbR3Ga51-N?6AJLQUW]fi0/,*+08??=@Cl5LmlnОEGIEtSSd\t՛ɳannth|⺟BXcgw9_@Q\]YmTxmV}dIZzofynVg?U{jB\aGL7Jb0b^YX;70S+UJ05:GW;86PZYy\EDh:`Vn:@xUOR.,.\W"D-AA4.B"&40@E245clA&*dLSHKkKdAO~~~~~}}}~}~~~~~}~~}~~~~~~~~~}}}~~~~~~~"᳒ドݤ冉ί끎މ񼢤⿪ŭޣל}߀򄏏〱ɦzyGnolꐎϐ񒃱Ħّ֥н˞֊͕ǫ¢ǻ̈́"劻৅ɘRvpW[^]\[er|ǪsSv]_wm_^ggxghiorph`_g`^g]a`SuW^ec`cdimjd\xɮّijebaꍓԦjخ}ftps^m|uyeɡ沕|~rڶzfLts~S|U_`QWjpɡmfrj^WTXXd_\V\gla[t]SvwopsvxcT[mh_O=9DR--,/5=su@LaSwH1AO//\RC>=0V.(,EFHlA@<>ADD>kUW0+,U:#,ISMNWg|n_]POX^23/&;0?NQTSU]df10,*,28??=?@kFkurrc|{~DEGHDs]ak]ρoQj}ytԶknapp~}q]@GVpwBWycNWSblIyrIau>}u{bsXjvGt{TXU<<:fNBxgc|HCDC@ysmfDթl洝\sa楚p|m?tbCM]yGM|hD;1zKehe@&=k8cvjcwGEgnt_l{FY@HVi<7Mc4Q,! dFnuVUs\?j5']`*&*5>>"13HP;\=!>7GLwm?>???@@=97R5%02.7Gs}>c`ZF`8Ob{{4/+)+VK;<MVZPNHMTM[:=424118@xeOABeWlJMOo]SrxdbxTgd\›z{uvԝͯk״Kw;?C|kInZRlwXYkhIV\soxAD;OiwvMBYrd\747:td1-65O"[GSO>=`U++4DH?OU*,_6CL@77aS2>:gXKPj|ghHLczjw|bbxSiMjPety|z̪|^p~xfXu69@EvRZtFVWf|DoX{llsY)'Cyftn[Qp3\I!8?wB>=8168ArJDKm]?B77;<4PeX[[SF><52KL8=6n54"G /$]I9 >Iof*:'+F<6AKBU~~~~~~~~~~~}~~~}~ ~~~}~ ~~~~ ~~~~"쉇Лnj҂ܨ蘹åދϽڶˆuƱEB_tvچƼˑӲЏԓοՇ쫌˃Dzޙƈ"ÄÚλֵ􇘀oYUSXVgk{azdghjcWY]\j]jmjkqrsrni_rd`^WZaecbfjf]ruUe[|^_]`n{n`[cauhe^__xЂæf`lytuie\Zadneȟحѽgzl}ztceZgt~~VmzQR{Iyszbhmd\Sj"6-OQ-38rTI<.Jlvg5>BA>>@A?=95cS9!6`p62.WU^9CDA?<:82I/ItcQ!*)KOf--15DOD<9aNb?8e_YQ^|hwRDKjE@:=F}dPzvrn{~ytӥv{xlelY|{77950SS.25nc=BB:dr7:=?AABEE@<60N3")Gi:873,O^FC>;cK]>4[_g\QSgL>FhEA?=;>}}ABAtv{yn{G~~yrŐ􅔸{xrmbbԼ̞758:77jOJVcSK]fwlV]m}tOV_gz|k$5Rcd>Kj@BA?^R6$SV?mD39?3383*HtH@L0jXHK9@qG`; (jcXHJWGUrr"B24(+U728%M\@4_??,&$>n\=5~~~ ~~~~~~~~}~~~~~}~~~~~}~~~~~}}}~~}~~"䎓𸤲Ћݲ속ݍ탆󇔚Β˨ʊߐ߸΅؋ƞԮ޳կΉݪ򯫝̓™׌й펇ɍŐꇈةѹ"˳ēޱ҇ԥz_q\]XWTQ|mifdf`UYa__`beggiotsqql[wY[[XVU]dc``ed`]iYmdj}VV\_^ahkgd]y~VXZppjid]eecglkdsߵyhdca`anϚ}m^llnqtv{|}]cZi_SJowJRdaiRhѳ"Ubt|a}teadhcgiiieh{~_N{E1>Y0,)+.-XEFidqVRGA?=<:/ML,12hkT.BSQj458<>AEHFA=6-;51(Le5683+GV;BA>:9:<6@.NBF>kmL+9jt0136=C@==lJK3-MUgfGYSfdE(iECA?98roEDA{ut{xv}G~z{wqY恵||uv}sZ˖{74654:]cz]SQWo~}?}sSRTXf|pX~FECDQS5NP\NgPn6/27Bh?;U!"LG^6"Nf=5F-2Mzzir]\m#R+C)9Nl:/Iwj8$P:F$-XjD2!~~~~~~~~~}}~~}~~~ ~~~}}}~~~~~~}}}~~"í󓚘ཚӆ肒㧄Ҵԭý۷ڙܒ񂂂򾵢~䢮ڍ򂆁ڙgⲶ挍밖غ蟧쉈ļŵʛۅ{"†żϽp`SXXVUS\ligba[X_]YuZ`dehntsppk[tW{X`bbeeb_ZePp~nʧxW[^bknjd_V[U}b_rrhd`Wec`ciu{̵ͣidbb\}猯nmjӪwvdf{ékimqxtZuʅqTa`zsusZqUVark¯ph"zriT{~xy|jbgfgd`ajN{CW1L+,++.-ZML`Oa5`E@?=@<\FC*/01hbHNH@X]/6;=>CGC?@;/=42(AKCL[YODQ7?=:98;>44"C::5q~jONfi/499=A@=>qJ<,,'OVW@B?g]0iDC@>93dezDGHGDvjkloft{}xnLix~}my76:94sf[gsfZ^qA?>KIHQpSr12PPWWhn2JQ#_q>;mB>SVj>2.X.4^QJPuppuKCn"IA;Kn?C'&JN?-!0?)&%!!=`[*":~~~~~~~~~~~}}}~~}~~~~~~~~~}}}~~~~~"پɃٶ숦͍́狢ɟѮϥńެŐד£džӈ摧ͷߍײܿ炀Ӧ˴ǐᓦ݀ٳ窡Ȱ΅"ŹȥkVXVUUkjahfd`\X`c\i`zWacdglqrswo[YatojuX_fiea^^O|syldU[adjnkb_UZaV}fcd]qqe`\V{jczmajbgea^~lnogɡy蒩Ӹ_\dcҤjTVàrxlnN}bezZQ\a}ŷikx"{qZaaXWl|oplnec[UNtSnSBW_EP,,+-/aZUR>_FsGEA@>>tYA@)231afR0H5EO/7;:;?B@=A5l=8\NU[)19;>AA=;2A9-1*LGA6@?R|i1iEC?>91WWk~qbmnh^n}wh5X_}HQTtsPv8oxBPXGoZim|xE\j#aUb>1/&N58U=S}zklBFD>";EG?BA+NE'#04:8##%&"( ?ob8-~~~~~~~~~}~ ~}}}~~~~~~}}}~ ~~~~}~~~~"ֆ۴˜䦎AᰀӅʸҎѽ˰󦛮łǕ獏̠臓肇퇂镮ژɘڥȡ֨"򱛋𼾵⍤쑐wpUXWXZYxwefba]SXgobq`zWkfehlpqrwo\n`sudZ^tW_hiea]g_XlhV^dejkd^_VZ_OzX~l[kla_\Xzkkʖo^ffYRxde`[xkoʸfloej`qx}{mmUQtimkjmx_Z|qrdn]UQxaɥ"c`yz]qVjϋkvtyoaYMwRJa`@K***.24fbWMJ_IFDB>vlXD!+8:4__J,GcAM4=<77;>>==8/H.3F="*HRMQb7:;:6:=]/$EEI65<8\EIN$+5:SNLQUoe.hFGCA<5YPZqznhc`{tZ\szpY\Gk~BHC`CDbfrYq:AC>nh`LQKcztbosgl>??;sW>56-@LSO^n>>mTaj33PM2-;BIfKk3DJMyktw~lM2Pag1,.&)fV2!T}b_t~\A;"T=9,;=JE"4/k~3)24**_ii=1'~~~~~~~~~}~~~}}~~}~~}}}~~}}~~~~~~~~"όǂ۬划򁄐ĵӴ򽤛尃ꇎˑݘ܍ԼÞڥ悆إ版ձ҂ӽڂ㘍݄ҒًȕמΑ蔠"βݩ˛踑֤ޑfTXW]b`hnieb\SVfobp_bcx]wnhhlppoqkZ|ubWWnX_hiea\vua]nlXV`dfif_^`ZXZdinqdli_^]YUzrpdyi|ðnɑcbhfW]_fmblql_lnPfxcaxcgVyw{xc^[R^L̩skwp[V"y{kemWVWapɈO`p}xffUp׸]Qre=G'(*166fkrhctCGFEB=uiTJ%+793YSA.+:FM7B>879<==;6/TOIG:$HTRWc7:>>;=@lC6@:baA9?<2KHL#)3=CB><4*EJ/0F3ZL^_Qm_+fFHFC>90WYmuRBGIYuM]|{~~umdAi>AE?k^k:tcj6<}qk]P=K^mjh`stfe=>=<:\[ahOUPVQZk??lPLX-H7YV;WS8=?.20Y{h{N|ry1UK0-)'R. \X|zUJJRP"PmI079,AA&%1p2 %.916HIu>9"~~~~~}~~ ~~~}}~~ ~}~~~}}~}}~~~}}}~~~~~~}}~~"ˁۅꀂɩܱßԛղ͙ޛ޺Ϋۉʩھ悔¡ċ}橀̎DŽ鬊ݟLJ"۷ճߏԥdrTVW^fagpojcZVRTY]YvebmoaysifjoopqfXV|reXXtQSX[`jjfa\xvkbfoogVU[cjke_``^XU[^gdlvqi`^]ZXTgXedf}y|dbc^DŽޢ[ucf̷eotpgcbmmtΖnV\ccWqjŽĨT[Nj\YTmayȻ`kuW"lrmarj_X[RY^RvzXrvkteU\pPEFG&(+063^l~k_sBGFD@;8\HH),/0-NA5-7FHM8D@;8:=??<4,+aQ@;&)HW*-7<:>@@?=nSHPN;U?B@:.PK"(3=DCA>5-(*13Q+;<=@=>A>1(*1XB8'*I-*,9=;>BC?9jXJPPIKgADC?3)I#)1:@AA?6-+-36^I0"36Ie}|KxLJB;9855lieG4>DYHBCAB>:svmkyZkS)W}@BB;jR>hk7b\ec\LJZ[kBAAA=<>BFF960OOF8=u?==56%$!+$+,+ %?L4+'~~~~~ ~~~~ ~~~~~~}}~~~"Ѩ̴˨ϹՐ̠Ӈԣ궖Նֳ̖ȳҥ҉¹Ĝʘܛ䭐끁􊋈ƨ"α̿򔊒ÕـoTW]aXxhn|w_VRmwyxqkebcbb_UT[Zq\TWnUTW[^ejjibwvnpZlnnng\X]gnigc`bc]^cW{u|lomph_^`][Wlyorrnkiaxyaa`\mmu̅ceoɵ˨mlklmsuuuniZWZv}nrje|{}v~nutlmkmGkgccb_a]e"fj]h`hmxMOT[m}xbU\ejStPbBOXSOT**/1)Ss}\OiIFE@62T@D*[UTXNG7N]hcJMJD>;98:90&'01L2!%I_,)179@EEA;kSEKHI[655530hnM6AP]wFB>>?A>vxtnwjI@@cADD?tP;EShu:8`^\]XH{ipyCDCB@?>=AHG700WUJ7K<96jY9I58->MMLB;?LFB/_OCfGA<9m7~O(j"a=F<]%&%QgW6*'$,%#+!%7L-/~~~~ ~}~~~"ĭǿ٭ﲘȴӢј뇇٭񂈉ĕꨇ󄍎Ϫ伻ݾǁޜɰޮ"潔Хй刃bpUTWYXuhfl|x`ST^aerph\XXXYZUU[`za_\jVTVXYbkjf_wxqxdqonlg_WX]]elida`ac^ZZUrfdnf]^a_[Vx]pjffhmoe^`]db^]_vdWnssimgceiswusme[[[lnunhgybz||ZvypllwIx`lVt^fkc^el͖"ylfk^m}fɝieaWtzZh\Z=@IT[.++.,GNefPKgGDIF;l\FF).\^_QD,GSRO8Y<>@>5122/-&%.4X4!F_,%&+2>EED@oQ?D?ImBC@DD:2-,038;;841-+-34\N&OMKMj[:7gDD=97883.bfH&2K`wA;8@ytqrtfLOlDACBBaSgfnkeGL5SU.^PEEYCDB@>@A>?EF822]SF8b;968aA=44=L7.$;S8(:dp=>>9;~vM6H"-;GRD1'+d>|S.)*0*9:)8<&@*1G4~ ~~~~}~~~"v犾Ѷ󌒕Ͼ䈋Ѩ򶠟刉򺟎ĝӘ佨ϫ켝ˣ̸Ǹ錊ߘҧĶ˂(Ѡހ׺䁋򀚔\WYVXYVgYwfkni^UVSvo|fTVWXWX^cpm__yVTSRT`lkf_ylqiqolgd_\_`afihb^^]^\Vh`ga\`b_^WtSgugg]\_a^^]ve`\[}weSVXbnciaZY^fkonrk`\X{ʙntolxPdhpry{rq}NXgyolfyDsxzSoS]dkqcxgc`"qcnj`boy_giqzDv[a\d^WK,J01-+,)FIWSC?[GCCC?~mKD'+-ceX=DAIFBL2?G\nb\/-+-)(,-ZA)!7V+&"':DDDAsW<7nLuDB?@?831359<<<721+(-lfSHN+\bkjQ4<`|A===>;4-W\D%?^rgU[wA@;=?lI&)56KlLk>CEB<2 8sHA?CN=7;D5%ZzD@>9tlW=:.4<1".4PE''" %G;BiG1\*11:8 %BTG3>$!8~~~~~~~~~~~~}~ ~~~~~"ϸ쐕踬Ԇ߫끄﷣늗ˢ倻˭αӥѧȁ˧Ӏšɱֱ灇ʎūǁߌ"۷А񍇂߷Ѡ€t[TVXViuknhd^UXTz~Wj~TUVWW[\Ytp_Xe\loh_u\kionkcbbabadghgc_[\\~yVV|c]uc^Z^bcbW|`tr~nl[\UVX_ab^Zafb]Yovg[UVY}_pU`j_VXUV[emtsd^XwnoponaqqӉjzi]}=9ƦtnkcSstkkckFMklrl^TRXZy"tZRajk}f_[qaC?}yZVTrJEJAa2+)*+QOZV@rPvFD?>=xOG')*Zb[@IB@?=DH!6S^a0-*,03.)\L- !D\VB3C6@A><:52126=@AA;3/,,giUGJM)*`j\C/9Y|C??AB=4+Q]K0ADN[E7Dj@>8:=@<:>U./SiDAC?x_:AeomFYv7,,.cnV<5IJ5EH<48426>@?>515kXBBV|EBBCA=4*O\[h~^LRB9GTq<<;<><:x|y:)TeABCyiL,1PX5rHN\.-.06`P_g[6EG=6@>44;BA90.kqZHLs>?AEGnA27UbtNR325D^@?=<:L.;JO>(V7.hFEA6f[==83)"QZc<&!. A2.*,5.1 '8;3FCI3 @2#*~~~~~~~ ~~~~~~ ~}~~~~~~~~~"񎌁⿩ɓ幯Ձʟٍ΄𸀷ℊڀҴ茀ȴ󌕋׈޷ڲդ놎ﶣ۽ݷկ؄"В뀅twWWSmyhlgbvbSXTRac^dUUVTtWUSYa`X\uWkmc]Jiiiecccddgkjfec`[ZXbSTQ]\]aa[V}_ea]ZXWkidmzoosVVWXb_WUYghjxv{lX]kul^Yqptqhak̗ibj]qrqjlsrqi}UMQar{k{exj|R"UCDOZvPSXYRfCLdsY\RNIVjYCJ)+,WTMAJarAB>?;;e63Wۏ@<83..,.5==<6XRVGQg<;{vrhV?Ia\BVn?CU*((+33`j6-8ABERX_I76=B:.-f^WOZ{=>@DLXI?AAa++FJ4)-?f">\|GU$"1B,=8GFPH%$+0+*!.?TO,@T6",n98~~~~~~~~  }}~~~~~~~~~~~~~~~"򍒆̭󋖏סʶ䖽قߦٯÏ􋔔ꆇрͬƭꮜԶ׵ѽ̀􀍣"뉆͘𔯗WZUlmikfaj~XT|rnkoprQRP{tVZ]`dpVekcZjwhjieaaeeadkkdba]ZZUUPadcd_VTmfYjqiaZWUogndi`aVVT]_TW\ahep|[`kpia]{qosrmg]|lmmckmxknqusfeo|Pb^s|rSbw"seE7NeiVVUVLQWXhVSSe}yuYTP`p[HM)+-[]N69\yBA>=~yXBHT,*QUY[[TSNEKI>@52H[Y''&NGD.=$2izKP_]S0>?85Q#'3u~@83/,///5<:0@P\MCJ763klnogWSq6_mm]Z-("H27f3139>=KnbhX;82.bTPNi>>@DIAo^p7?cqw?*8DU{{>?@CA6DR`:>?,wU9>S+MLRS+[ROIBJHCMD?OZOC$NN:61"""4HPXa3_^8A?71H!.A}<2,,/2236=EJ746^B3=K[X&%H@C]mncqDCD?;3MH'*&CR45]T+1o@>CEA95Z8BJOJU842hhlssjb6311:83.97)*3`_VJbz@@KTD@E;:5kH4;O_MkG2hQ&<3,`"^I  5e/!WD5KgmwQ82W_PDaDP[pNK~~~~~ ~}}~~~~~}}~~~~"脍ծי̼݃ÙΈ놕ٻ􁉇򀁆Ǐō󋖘Ý疝ݷ「"଍ǀ܀|s|UXXVbW_lgb^vhWW]YUScRdxp`\dobe^Xcg^Xphlf^^a^]bihwqVWUSW[_\\dih^SUUWZT\]\is{rrfVoqqjdZd`egeaabZTmgc`wmakm]VZ^bgkgaVulxonnqkklehbkZhĒbMn`qsso^UlwQVVcme[dyVdm"pzt_kj58MydrpVVTR\TOQZVS))*.wd;1O;BCDAxqKJ.O,MJKIMRPNA5?LPYUJ).)$%PO?)3+ (:fLH'*&FM,.+P.3;BAJNOA5TiN9,F.8I=3pEy?-6W"@3 ?K#4N70"6MNLfVAM)%QP$%YYOC~~~ ~}}~~~~~}~~~"帙…ċ҂ҷذ򐒉뮀䄕ҥ퇎񋐊ǫڜͰ؞􈙝݁얉֯‰۵焏ɪ"⫅Ë倍pg}\[YVrQRake`_Yp[VUyYZZ]a`YVS~`f~eW]qee_XWaib[Zmfljc_a_\^ffebwUURSW]\^[ZbcZRVU]`]jfywZjx`d^W^eic_cgid`_aaw}|~{~^kn`XY_cggc[θqqonqjgda]`H[e\Ver}]fapro]ksWadb`q"LNYUddgcnhpLN{Xbm^d[TXZXSQUaWF6Ebk.*++diN3/O9@CGBtc7>*O-)LGCJSVRA:G^2b.()--)()PI5!)?:#!9Re1-*/5:92/Q8$=ro[2312100/4=EmVcR>5>Q`VM&(&%'12215}}>;7U?G),'HQZTLM.3:HZqmtERFZILI:<7*,5;>x4.-,'(.8DVbGſ:=bfA>>=<749>?;2KP]yEBAA>?=967L!?Kf&#@EE@lHA@d?AC4IGL>[Q:/dg:,G08@:7ozwlR:KD" '3"'EfW]*'*+&&VV)L~ ~~~~~~~~~~}~~~"ֈⱐˁҹ˄̤們ĺ߄Ƶ؈ٳ汷萱ۗ⥃ㅳ󏙚岞۰ڌڌꅒʾҾ"̽Ŷܼ}heaaYVTk^ie`\~i[US[c\Y[^bb^YUnejTSi_gd^VV^__iwbikfa`]Y]fggjVRSTW_a\X\StSVS[b\hĽjYn_a[adfd]`fdbabp~~otx_osh`^ddliaWudxjlpqicba^^}sZkrdqqo_~vm_Xcged^"N|LY]\Z^UM5[Wzoq~VZWSSSSUZM5B6e;3/.(NQFj^M8?CFCoJG;3U,*OLKPX[VLO\450,)*.0-+*RPJ/&@D(4R44-(*Z-/1/SE6Ltd36773.,.8?DdFLCDISR,PL))(+13/.]kzz;1?/D*,(SglN;))18=z:76/')5G[SQPӯ'8NIrCAA??:8;B@;2KHJRlFC@><>=:52[Jzq<4C_03@UK:@@D6HAE]fTA@3|17H18@?<6hgzyYY8",!  ( *5+]d\N&).)'W+')~~~~~~~~~~~}}~ ~~~~~~"۴𱂓􊏍𶡱㋑ߦɵ݂⃅ɋЪυͣ˜Ӂ鳐ᇚП隱ГѠ̪󵤿"܂ۧrT__VSz[ca^X{Ooac^Y]`abc^UTX}ezqaT{ad^U[`^¾fkhb_][^gk^ήWWSTW]\YTX|SS\‡r`h]]rnYVҞ\d_a`d³[[^aaowq}k^jorlhchlpidX|h鉙ckpng`a^husprmn`{bntS[hqnmgiЛ"_N}~NQRKMv~XSVfahY]WXVSSRSVO<":_^:61.NLWS~u[=@BDAlE#ECZVTPQSVWSST\b230-,-141-)).[78D.!E;Y40+QQP*//)LH[yw=?>81-1:BC@iQTXJ^h..UMS*'+21.)Ypzv9[83I*)T]>X7M2638SmY>D90d}bRJ^??/,3:wux;;d,-8KaMEB68A4^DJC?=@<@@DZN+;C(B4=FEC<=sMI@" $'%'"# $/6dl[RM'.+'(&%)~~~~~ ~~~~~~}}}~~~~~~"Գۣιʧ愎ʧⰟ⺶Ì󍌀Լ󉗛Ȟ߉ѫۚ񿑻"޹㺺Ȕ\{fa_`[sl`df_Y^b_^`\WY`[puyzs[``[SYb\õdje`__abfh^b]WSRQTUVTSSsbqdU[XQU[Zaií^bc]]^]\hpign{uqcqonnolhpung[sjhpqlg`_spkms؀wsij]kvqawRZirtrolx"}mlRMvv_b\hcg\bkWXVTTXL/D@YSli`YOTk`yq^B@@:Q]VTSQNRTMMV_/031.-/120,*.66H'196>8(,F^2.RN'R.0,OERuDFC:3/29AC@jW]b`h51.SLO&$%,//*Zt|vo[FIW**UTxiBS4;3+cm1.(../69g_FVn:3148lflid[Z-5=EC?Ax{gC64AWAIA<>B?=EG@:0TPKLWbpHB><<>>nG;\Elm,7\a/=4KP]?<;B2K?6:47@4I,D7CHGEBDc_cBJT"5&0/,1+-)+"-+56,_tlYNQ//T($#)~~~~~ ~}}}~~~~~"óԕʹޣꊑڻ¶ɷ౬ð􏐇淟󇒑گ܀̍۸⃍쳷ڍ쎟г饋Ñߜ黒Ñ嚃"΂Ѳ缘qj}ydce]cfdVY`^[YXX]ggzi\s][US`]Ždh`^aacfhg`]b`eYTTPMNSWXWZ[VTT|xdvkVSUY^^^cif^e_X[`cdf_af^iqokp{}famxp_\y̾ntpnkbb̈́dibjj^b{uq^^Xr_~yrlRVdrusnlriv"Zv{bZ[abf[XYZvXWTL_POUE^`[YQWeTg\TDA@:e_XORWTWXRHKOIJVb132)M+./.,,/5<>cA8:JXJ6.AX0.*'LMV10TLQfy@@>94-/9@BCyblA>770STU)&$%(-/.0zoYT.1/,)IWuaNZ7>6*PKG&,1,,1325[P[c00./ZYml_SU,2:?=7`>Jj@X]C1>D>=DNRE96B8QI9<6$:8>>@JyP.9VR<;@sSNiADD=@CADAVAO}hP1O9>D9Tg?L71*<=]WKEM=?=Bd@+B1=GJHFC7T4+ C"ubm+'+%#*2* .549'%XxC7IP("DH~~~~~}}~~~ ~~~~~"шӨӶރǸԴ蹮򎗆ƚЂ꾞фׂめ򅒖扯Џ߻唠Ŀ׌Ê"ٰ钨h{neRUdۥjeT|t{RPOSannez~`g_ZUU_eYyr|`^adhhkhaXdYTVXXUZa]px~XheXW[ZWWXdkhaXWgbeb`d`bahjcnc`de__lpvt]oek͛ZlcimdfipYitUXel6^VV_jorkfdbYQVI`c^d\TQ|_vdHCJy_Fb^+*WZQAyHCavcKVK:75QH162UOmBA>?:649:7FCkc]Z_87776;?G|WO0]gA;C|YOlt6=9@C@@AV:OX79BBdNEEH ~~~~~}}~~~}~~~~~"уԩ򀎋۶׈ݳ⁃éܟΦ爃醋ʽ쌍޴؅Ǵ䂈օǦĭɄظ۠΍ڄ΃"ȹݏ~vdRTc֔muTWVkufQ`~RQQT_kml]mbS[]da~su{yz]`aeijgb\xb[VUUWZ[S[bamve^YTTZ]\Veq`^Wddgigc_]^cqdX^ba[__aZgomdѮ^v~i`bkmfilnljuzS^jjxoSUPW_djhkcd|zHo"_}aXkjVPn`^_\Uyvafe\uLCG}gEba))SXT@wtQ|]cLVF4A('&MQY^K>HISe[8&8HV+&&-6;756K" G/FHNUER0.*+/50LPdtu>qTKb;;jTA7GUXZe761)(-.0.F?]@G;_VINb62HCj>>@A>85427F@665/+3475h8;A@@R@;6"8O"%&,6.(*0/)@ 8UeP+.' 2DKL ~~~~~ ~~~~}~~~~~}~~~}~~~~"ӭݐ޺τ㽐䅇ƥퟰ񫎋ꂈϙ⇈҂у洞֮ι٢܉̳ā뙖˾⣊؄Nj肆ڃ"⫋Ѹʀ倎ڀvѱaqxzyRWXUmc`]\\WMVwTRSV_kpoajT|kkuySW_egmgjmVv\\_beihd`ra]oTUSSVYRv[\W{d]\WW]^Ssd÷Wafd^[XWXYW\ceeb`\^]^hmduehjfa]qcfkomowÅeTrUhmVnQSRU[bhhngbO"eljY[f\mXTRTjint{ZROoZOLqnR_RRTVT=^DGS`jg^bQ716DS)%'/6;737Y&0k|zNC4U/+*-6BFB9T<_vi1/)<-D*,,+-,)Rj?CCdA1JWU]em}s]LM_32/*C )0N:?NcdK5>I]WDP`{V@l<:720,0-.4961/-036=B=96Q39Y67:;;vla9GrV<=K_5\@!/>N.',HWURV\c40X]QorcCIEW-+,,cAIG~O#Q_5/)G?K+./,.-*/?a86:<=vcYj|YJsxQl>CD>st{reQ>RwG3g6hXDHLXjvdD&<>[LG@FX_YJ,3?EX1]VW7CDrGG:74=I0-1M[XQUbk94WQD]nvMdW1110X`?KwIJJuc:1*MHQ+,.-/00h?IFAv]27WdZ`7@OPEBV52-+'#)25icUTMI:6WhLAT^lED@=@810-,RU7=842-+39=>=A@sSJg<48=@=[IVbJ>wZ}|9<67uzvtuV37^38Fe_~uTLM]uw^PJ'cc=a"SG@3#.!<7-2)+>docC3*TH91^1".67@*~ ~~~~~~~~~~~~~~"Ͻ˱پᆎ򥾯ƽַل긅̆泔꾖؍Ý򇂉ūȿٲ΀ͮ蓳"ʼ󾥫ϑ̅­trz}kf~^rlzmiVUSotq{Xghpvp{fuxdkgȺode]X̋cWlk\U[__\Vfgǰ^bXfgqfkea]ZUV]cfw~gWXaghsqbZUSVipk^]UdqpnmnhdkhjnlXr}fhmib]|vʚ~mcX~mdgljmd̛h"vi|vrwqOMPMPWPU_QIXhc^aim^>PE?<@d\k[TSNK$!"LWRLVSOYYF8BT[^`WPU6A@e93-88;H?A=PWSJRkx=9aS>HSy=Y4650QSp^;5Q[b<5-NIO*-//00_`uECwP&Hb1\]hvkGC8J41++,-/0466cN9E7TZy-JXZ-:CBERF6.*)O-7>=;3"=3??>?B@@hXm>69<>8VETbQKL_n:8;>@{{qV%-U;FhtPBFUNB]9=.@IHBBGHQO\4:ACH@hZ-A"OPJ7;RIk^[`:9?GI@<#ORDu@G<~~~~ ~~~~~~~~~~~"ɱǽܹ뇦Ԁ߿蛾ɸފў𽏗넍Ϯ׀ۀĄȧざӦı򁀄۱䪻֭󐕖ߝ"ҽzƀgkendxnxtwSSyʷeoyVTR\Zvy]]xfӾ~kcg^XTͺsU_lj]T[bcaZ{TTpUZcYkkb_bWbg^pyjx[STWbjgkj[VUTekieWotnlid_Zkgjmj\t|^dnneVVXkt˵ywrdn[fhkgedb"zheMc}kNIPMOzvBMKObpi]bnn^FcPQ[I\C=4Xc2/QNP197bBD=>92AENCQVKHZy?vdOi@I|q7T6960(J^L+9VW`;4.NEI).2100ZWkrL "8P.YWenY{8-7+0+*04^Z16:6P4D6FJt0#G(,8CCDXP7-'(T.6:=H<.'RCB=>??@l^6<6:>?:YNdk\^_Ne|<9@EB{qeU*:_]yB$JIZWo+JIIKMMDNYf7:??GGcK4&".TR@!9PT?fh\5)1.I?''WmozPA/~~~~~ ~~ ~~~~~~~~~~~~~"Ɵ̧ԟñޥ߲ʐ慎ζȀ猏ցױՈ买ꁕ즐ŜΤۮ߮"׉亓ߌĻˊerqyxck~q^fR|ɸbvymve`SSymZMfmegӹzf_YViclhaTUY_`b]yW]wUYnbkd^XVdg_xR^WVUUW[dfbgtshYURT]a^ØwmzoqqlbaWhjlmjfyļlɽb\JMj~ɾƥsec{ohzvyiiigedy"V~z~QSlv[Y`TBIQMUfatEOdogYepmgYB?MP>BWH-2GSR&NMIMOKIBJK@69Qn=6WOEL.4iZPGX8(>FVIOSLRlGBuZDO9DZVKHEm:60*KRnrCN]M/`7.+&<@)/320/XSiuS,N/BRX_tsSu)D//-/.?L3888`DK9&Q.'#%)2>A>>C=7'(-/456u/$;uB=?AAAn^398>BB>fXhi[]g\cE=oiS!3S_HL#QFNKJH>AZm=;:=DGnG6="9-VG&*DTQ\U'A*.+@{v|zV 3~~~~~~~~~~~~~~~~~}~~~"ջοߜ܃̩ǀ«Ơܦ炃岄ľǜ׉ړ䅌Ƿɪ 񒖊̻ȩ􂈈婝룮Dž퍍跥픕"ԣրȟـiuhreUSkfhkxzy]pkhczPjlRUdjgeYy|nlz]^Uw^imhcWVXZ]a`z]kroolqZaĩ_lgg_]oWZXV`hc[_nlZTWb]ZwWDVfoqmeg__fmpkkb_fazоe__ZiL`ǘpWx]\yoihgddaM"TWVziSGZki[\]kJSllmERbbYXbhjuu]^ql`lLF2EW,(QXRJJKLJKB8@HA2D8A;84MAK^puspVJ+BK_(&RU_zHIC91RP@")[=@CDBA9a46:ADF@k^__,,/YWzH==7X4?Sgji9(.CH2CE.6Q)+PE?QFkp=:;;?DxgCS",/.I3/F]_Y?"Q31%"9DKc+'(XnDIGA1H2:<%Y>FFEE=858;BCC@4ZW*,,,PUJE~xDG?EE`#.2Vwq\7D[=&)F%$L//3/UKTWzq=<<<=>{d0)/".0.*BFMbebg^6"%044!1"G|}jtR.138~ ~~~~~~~~~~~~}~~ ~}}}~~~~~}"ƶՁӶ詁ԥυ԰ʅȎ􄋏ěԛϻ"Ĺ䃃ȱݐ󊒅{ڧ҄򄄆؏鿚䋙֬ٴɫץ֫Ԩmo|zsgld^p`j{hcilqsrwUdk]TVcdlzUZVUUXcjga^wdidey{YtYgh\TUX[ZY[Xxtw\NiY^ǭl^\^ZTfb\YZ\``ab_q^mx]pmkjedfgkniidXZX^gf|me_efkqo~^dʻr[`}ipYWafbbdf[hohfdbϥ{wS"YWTTQgk]bpd{ǷwKr]TLPXb]NLWeljwDC:m>E6D6GhlXQTPGG@4k=??A>40E[&BX;>:34@EpKJDC.,(),9GGC?T1$?V,.reLCKAd3H--'%G_>71*%)27=>8eB(957<8ABFG@<9:>B@<;4/*+-+ME\JDwiBEf4;JgxoD26J4,+T&&-03221bagu;BA?=>e7(("+-./N'Senmvw;0%'(.%)3gs~qE9 &$~~~~~~~~~~~~~~}~~~~~~~~"˷邋̷ܺډع쯃ݪ峄󄊋ݤͥӞ͵Ŵ܆͊񈐎ɪӝߡكጸމ̈́彷"ˤ껪ܮޭoorz}pauec_goWx[r_cddfqwxcle_fgew~X_VTU[gkif`~khðti\`{yUx`dXUXWUTXYW_dd˰~l}}zropqlhwmcZ_[gcZX[ahmcdli{[ourlmkieedfikjg`WZ\beaole`egihmDjŮƲkuWYbca`dc]duukba˩o"YWUWUUSswt{s̾{YW^EKORXTACV^YNbB97CG21$Bko\SRNFE<,Sj>>n1,1GU=*3OM?tF1(0COSK='HfXHTM30)E:?!"#'*268AD@vtZ`PYD^YQSPScJq5+" @G@9DldKDQMDI,,(SZl@7/*%+@?bB)3DPz@EIG?<769@B;71.,..+?6hJBn[o?<;;<^6'!GtLR7CSF?a+*1340.37|}u?GG?:@sC@"*-.-)'+mttz]K''.0/0DzvrL2'"6~~~~~~~~ ~~~~~~~~~~~~~~~~~"Ƭ򈓘ݺނݱݬ紑􇞢䅇қα繁ףѧک》ıȶ܃𛩍"֬ѸՉͱtvvuwy}fj^bgp[[`hZ_`fqxoz[iigrm[zxVaXUV[gjkmgpdsdfxyr}[]iZWWVSRWZZabcgxyskivYZOtf{|mrW[Xg_XY]bnrgfophv{klljec``fkkbWTWX`aWsheYTaZV}pIv­pzubtU_d```b`_}l^|"\XUWUSqus}YoӻqYVCGDGPUROEpDUWOJUps35@G78 .MYVTQLFDA606:eRX2;IL=,,F5AC@EE~t_`-*.+0,),7CDA?;g[Jk?F&:S6=HJIIKIC*HigHRM87-C4:#%&)-48:@BB?v^vRdO_TMMLQ`y>b)7eM[?&LWNPPOHG'))W^rD:1.*/AKB;<@=ZE3=bgFHID>70,0:=4.(&%14.A2kH@5-nv=72bS3+%Mȑ{g:;;H?[D>VZ/43/-*/39|ll\[=8}O)>",,)(%%Tg{upX-'3133(Gq_Q5#%a~~~~~~~ ~~~~~~~~~~~~~~~ ~~~~~~~}"䎽װ膑ۧၕՂتљ쏍¯˒ڸ䇆ҩĜԀ׀ֽد腎ˋഫǁ򏕖멶"ӠŨ鋳źٶ~~}||{}|]guZ^`f\vadmr|lgbftUXWYf|w`kud\XUV[dhilmrjxa`wl^]XWSQSW\ca`eɨpmthUYZXh]Utnu}WVag]WZ_`_Z^ajnlinaolif`^]\ikcYSQQQWifZVZ|^[Wgt~Qby`eddabd__pea"Y[WUTQoW]gy]˨oiQSPOUYVM2XCQRRUNLU,.5:7R5,6CLPNGADLH?:7cQX;CJQXE9&.12:IG=oj8/.X2-*-7AC@>;iXH~OR-:A[N\SH=qE>506lg`Z_O86/9jO#%,6B<8!2DV4/(*+0149[gqkAr{CCX1;"*,(&)+[hkyyl1(06H?||vh[L'";<~~~~~~~ ~~~~~~~~~~ ~~~~ ~~~~}}"ê􈏑׮ֵۃԯDŽѻ畏ٓެȍЭ̀޿ͬ􌕑쿉ɸՋ펒ᘣ"ɰة‖{|{{yci[]]^^wmlsRzpik|X[URYlsilV^UVV[dhijiqq~saxz{ca^vfcgaYSPPV^ec]_czVrlmlo}fXi~f`glswTVTTbd_\^c^UQ^db|vcpnjdZWW^nnbYTQPQ|mj`X[MUyƠd\mxvz~sKb_bddach_x}dbe"U[WUUQ~aPOY~hh`XUVVXM-IBRU`kTDO,/137paOJEGMMG ELKD<8gX`BFGYi]N)0-'.=@:uE!(FR((-6@A@>TlqaZVRP'')+ewFD?<50*!!cj57>r`^IA[KJD@?8/+/;=7/# "LPXP?B_?D"&+((,)WrtZczyh5 %>5@6NipR-JCS[ZNIA*"09i'"/;N19??>>;4,$&4>EE?|kA8bk40b[WO)(),35/*!ZQ:`D>;>Ct8=;\M7!tk&-(,-6F3-),0353T>Er>8w>;4)%"#*((&'XolT[lxw4!!@q[uyvfS0'#+0~~~~~ ~~~~~~~~~"Ҧ؆綠߀ᷝ煇С큂ϰ㔜񀀮ﲀȀ͙遄橣ᅎ߀ۻLJ㨖封ǵ"èѥա{x`efe_^``_aglorl~SO}ustaWey}VTRWcc[Xcrqlps\eXw`hmlabgg]c]oxa`cb~cmigmngZRQSXfnhe_WWqsghmi`x{fggaTUVVXcjjkidZUOjomgbXTTemnkeh~qc_bddekkj^\jbkǛUM[xnVw`a_cgjlZhdcfffeWP"PWWTQPlZ[]]נiReVn~vcTQS[`bgr428=710025:@CD@t\PQUV(%?:;??)#;;@?/6%U;@FID@?A>U=J]52F;PWY[VUN9)1<^E)DEM2>@??>82,'&0=CC~{=9WdQI+)TZlmOd?3HEVzFDA;8V6?i3,-/e`P,*(*2;A=?@8.*%EJdldcdUMH?mGA@?;512p>A@?;AYBGB{;fAD@=D=8@@9N:)nHq!$::'*>$&?_1+-/29<4OJq>@EE@;62*""&&&! Ytmok{vi,!PgǁYo{jmd*)-~~ ~~~~~~~~~~~~libvips-8.15.1/test/test-suite/images/sample.jpg000066400000000000000000000546471454007373500216230ustar00rootroot00000000000000JFIFExifII*V^(ifߓߓ02100100"0http://ns.adobe.com/xap/1.0/sample xmp stringDICC_PROFILE4mntrRGB XYZ acspAPPL- desc|cprtx(wtptbkptrTRCgTRCbTRCrXYZgXYZ bXYZ desc"Artifex Software A98 ICC Profile "Artifex Software A98 ICC Profile textCopyright Artifex Software 2018XYZ QXYZ curv3curv3curv3XYZ OXYZ 4,XYZ &1/C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222"" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?oM0kT10So vȞ9*)]3TJ\Y. MRUNqU笠U)MC7jM[q["U<5^(;Ckm-p<ޚi'u'!<k#IJ&up*M$C`{IX.lO:9rrFq< ڎT]؃{\`Rs-Ӏ9nneR"8VLw8V+XBۥY VѨ(.; [N=*ʴEդ_J%ܾdIA:Sb)=Tv# ,|5mD+ {Q}#C|FJ9,hZD/vCmbd3w 4ijCTy7QsD _7 d҅.bo<.(%VઞbY#1NE6PZw< Q.IlF!vďP[L%rjy,sPLQ_q[d'>h=OCBZjrͰhݏ̌) +]M%;ZDp 2̤Z"e(mO46y^,|z8xCH.# Ҿvs \b1Ԡ'aҩ3mM?a/h))*jhn$|i䎕cvEֹSfІT!"Ah" RCpc2g7<kԵ,ד}8vF$K${vi5PHdVfkk(1zҋ ;YyqҕȵI+zPv AgWy J-̔mXdfIM[W}4Z%PVP"#a̞`0@< nB |Қ ҹIbdi\i#)<9ڬ*Y$<c ENq⊛1܇Pp:BqYn5oQz^m[#?f+klQT 涋%0HvonG'z}3RWnF9wMTE6^UZvJ0a]M(n9ڳK/0c]J @BJpy_ʨJ]4~['ԚH&jKʺY;F{һ]JmG$d&CgڕOzZB$ Y@;)֘ =j=;E% MrI]\=lMPqi (Ŋq$e7dRG}+GA;T4jQF:M> U=jR!Îz/UG(ZZoI]VèF$EV9 K4F3b)uJ;I[|0zP"ccS&D]z5z-©Fj؟Rhyg1$0{ԹT dp) IwmqUe=H'\<ڬ4Ⴂ]VH< )kqIEq~ eY8/(qҴV H52ƅ7'>^L^dQ;m 1 T鍜dݎGJT 3ݩw!*w E i!9åK"$?3z) qUCƖp!ދ61Dq!ڍSYIC&FؚݤS $Fu;o6Ynm v݉WO 6㓐qԑ&s0Ctm1|40 w֩+dR5i& p(nV8 E@ tM %*89Q{1O;pGcQEm%쒋nT-$qڑ8ÇepZhyF4{lc͸YUܭ]-rcZ$FiUgnYd+sUq\51SysR퍕%q.0=*b';Z,G gɺ.q*9kg6sKmdbۯ 42yY Fb:ԓ pNj8UxT,wHqo#E6і̖ZV =j4ݻwF$h= m-+KF+R"0'Y0 2;R`$B_zسdA(u8s3ZPN >)M =RDE~~ޕu.^M%LUKMFIBT쑀y%ė6ě۰ *doy*~SC3FBcA99#.Ӂ!9 ==3[nxvw5<3g< WyI$1ĪenToˇe2KVdvU]`r+YH+$]Mimw*;{˩.L쁞ZMtn!؁ e²Fb9 ]}c/j>U- +!v ckxV/Z `8ú$C/aMy2Fԥ+K`&C`>cUqZG6tG&9^jj,v2+po}KBŀsp^j1)H0/*gRp}mܥd,7PGvl'O- (w4p6&plzrɧDvxjQPfy񜓌RȫUg <4]̯8$}(m{ũn)Ȝ危܅#bc86ddE~wzQԧw1{Dsзj b/= KsB.2Am4jTcNhzj-..dRF; 4%,9̾cNX+q[]IK9d[>c֬<gm.˺؍Lv1ޘ)s fNr)b\LuFE>kI^5R}1ړLEB޴F#tTKFu'ڹwr\Š SuV^*#R I0(c[%,J~N 9"*Lfp}*P%GAU 4T_ wO iJJJ=D.88KNT1[Φw,`O֣攓hMN(z =\B7+A=魀*|:1nS|dz"ji4 -䍁1mAgd옅 9Ls!Q]]`L-+:);CsjɕKQޭn'n b9);XvGbbS{=O#H6x=SIYm jq-p+/펂HLy#5{ 楴\G$cb^MqZ*[?6U.c "45EXZP.Œy%c8tO09SGfqZùYeu!Kl o"}FC s*· j(HOkcO:WfIGʮ2"Yy.- gbHfO{2#@rGCn<6^WG}~s-˜*(ԖF'5j05ږOAM17iHsQ֛1ONM(k'ES9ϵ$D'Ҝ1h4t)S9[-@Z( Zy.u&Jm#>ԈH>: ֹ+C^((/Z4{QE0^ ' sPs֢Z!2S:ӧb'vzқtQ# kR77akzߒc qVmϻz Տ1_z^vLu3b@u$(#aG4 NN{U9e4;McXi+SO]6cGޑ%ߐE>; "-yoPha\A|JH$w5L@V<}k$Pv\ܯG88U)ryQŌc9Y]ew0t+@VD0Mt*o=əeߴJ59 WIrweP;TNz`$֞[EjC*68Ri'&L&;m .IH*SRGr@Y2VaҬ7cBEJU ɶPWj棫"R6Wcq EcT1&}EMLa+T(P"u0擾(-?E w23DU"ZŲ T7Ճw2.Z̉}5K&ߔifDU^@wȂ<)~nRՆF (vE)Hgh@>ů.O\P8vz`ɯn qj#2u&$x;\sRԉc]®Ir\9،ǰPX"ipmIX泫VF78x N*xkU\=SU31ly5PՒ&)hҒ@:(Rc KH}((dc5QIouN9<gaA$=];ːR i{"z}=*RqV"ʲKcБgSr#j12o9SYC[xnΘ+2lOZͻGF5ws G ;u4rFUrsP{\@HcA!z#v>f2 *]I)@ R{JѾXeaI]>ޫEREB35V(ԏO'ڦWlՏV/|bArWҥǩ]$fk9Z7eR28IIv/˶ZMij"$FҹGxEVch*Ƽe8P@GZ&f3Jd,XZؤl#")I!Ψ I={\D$B >Wqqt8-F]2HhǞmt*  sv帮=+qK wgiM-;QģPMG-AE+6 c-'NVJ aj;F#@uH'a/D#^s ]o;Mn#`|F$/͏\4$L˒L dSS5j##皙& 7^-Հ32s [Lp^slT5͈*G'xuժ4tSFVH$!\{+ FG!\rj۫?$jhg3;jSý2-dqe(1Z֖#%^:/2RWi{S+yօ$?**^78EUbnIHI)Q?!-5H׎YؾxJk{ VrlC%2m, f+ȗH[FaH9'Ҩ̳ 7-vTQ9<F"_Q l^'>HYi$SY:i ?gQû2SĮiF N!xC@2wss9һ3l{ (;O$U9==kFy}#åeM0]̒;$?> y>;\+H&[cS]Gz穥Zdؚ@EKV (]٨IXM.)3OXy&7J/a⡩uGv氛kLtJic lּ2C\ס[]XoH_¼b:j[Ŗ,u<)>+.$YHtT=T09Ug6ށzנfJ$*):2?+KFu$fbM"/K7 KxIml]dB0Wi)C ۚH'}Bʱ[mw0ncVʨ>gefNƴ"nua7Uk{1\lnq}DĿh7EG1VF UAk9ds} svY~IkmqfX3OTK˿8e2[dg$V֐pH` +M 7$Z:3\fٵ7 qu[J?n͚JylZ5'ң 7 R{94S K41:洠83V) Jѩҷ|/-.:3|Uu[@ч:} ˶ivC(Ub 8ծ]u-6 Y#7q9>k1wϳ0bz)5lgU n>`j_%*\ڙޜV'=;FhhO]9XdR5)R!ܧI*%=zչ8 `>(Dj 9yJa ]D rxLݢ3ia(2Mfy ےAj0A Ac=.WxHۇZ]Q DD55ݬRNg=*2v0].^S⢭ v (atuͫ['k{S%խt>w: TrA"`dsXiieaxXsU 28m UbֶʮHl=hMmqouK{ Tut-/ ^[fOy,! U_ (UT0}*fMFo#S"1ەoZ瞮qOCګ$)z5rx#q@>ZO%=iP7l,I抛tQp&sOUq֮[[$ C ̸yLiހȪ^b,ȧnSXGԧse>y|L-oծ!uEwIxoy{eӊrKRic( 6~'XIo$,Ztur5:La*ϻ#mye ,_ ^%17$S\\ZLQ9^G֡ke[o8U]r P xVmSօbe3\j-_~aowZyk?fb[_C+qIOdeUb>ViPyiiRqLEv =jDQ3x槩RȰz)!zԤ)&AJ1Q>wg֪2 p n\OoGh"N{YeȻ=ʋuugrWfZ\,nWzxU=DisF&"vWl]KD T7S5}\ԽԦ{dEo,{V]FAoQ,1zZ][G,r\svRޮ7tqI++[A[V_!1/>B8RiZ$%JA*ݵO8秽h i .5v+Xo'(ޞ.r8H@I`:Jox8jfk:ex8'gI&D* f.Yde qE6uC= N&PxoPVܥ1M$yb+ب╠A 9 c3P^##j=} : ֶ H$7:X!iqaһpզsP2H)H^̀u[*!5FEPֲR9i3f> d~Uy RDd|(|n qҠakDFAs2O&ڴu᧤ Pc#b[S%F9}+iuKGB6^<׿3h6k+k" 5a );CQm2a8&SVfIHܹ m5-&8t mP]mi\_XGmmz*;Hr$9_U/#+a֮1#&p޵o ilm=Z}O"m,UEkjF\FKi#l\m|]ik4A}E7L[NFe.$[ɞo'ef}K+aqw#89j ) ȬbἰzH[I`1sQOȮsnbՑ$/k"jM>J*]~^A8gde4uAmO~gEՅQ dr^Apm3qsGEG"dl:XAYضgY on(]Qm z,p1ޡ;g-0~_Rw%'QM{ 6VڭxƆJ^xT-@rʹǭ]KC{P՚vz-P#<ۈ HH3Ҷ%Iڲtc&dV@9#V@XyXNJB[LRrOS>R2/lv>sU5g>rqQqRuZ.ZC֊ PnCj LqߚcD悹 9?Պ ApjDWeq .DDfQb5>666ܧ}*d:iQ\ ~l,qY4^*m@:XZ2$j70<8ZEfKʘTחRWmqcd+" %ӯ' d ]{M# "GffT=+++3DoR$=j/ى03frDJ,D7v1XF#mWk}53iۤp w"I9$5qC!P}CKBӐ:ݵE-UGKQ6cX_emA-l^*Xͫ@+zwblomCĈ s$8kί& ֢yo6z*ç3>YX=(ɭRyr%fIg"I"=(g yV#~geE,wS28e=`s|Ek) $Gf[h޵,r[L3~f:)|~"$+2:TFMJ崞 P0 ֌p!1J)V6A5n lڇ-A-@[Kw\28"٫ Plbαy".qJօؤ @mTr0*$/_Z֥6 }N/^4EYxN;,5)Tv#[ڬ`@5jy8J_zZoB8>!ZnH5d@B--gWUgҮ*o$Y#GМXɚ1ȩk`$"3OszU=zu" ;ADMoiZ`eP=QZL؀@4q;$è5gjUSr#֭sn@{gyROc'cAp'SИp."urtg֮M 9%BǃzĖ:qy$|z_6wbp{{K.Yv<t;nck;ݕkn `4}jz}Y4Xu{dw0¡~R:Zihk֡Ks\6= liגmYǥiRw[$ U?4|#'q[7̓ћ7Q J.85R>]լP*Y2:r+ȫ.V,$*+K{a`OJ2D~n*Oܨ-M4ep) [xy_TR.巎H`peyuđd2z4Veem[7e=S+b/c\Q֋Oe"a{\IQ >0A}#yIrQ}*'s?Qhox[VRfC0KF]E-QN=E7V`%n"=kԆPl!cK pg5X=יA bķnT!Uw>DMRЉNI1Fc(qS7jƝe-쌑&=k_[X̃whF a-=kGV˚$(c\Z' o¸|aa޺iϚ7d5f4jONjA=*rPE"*\Pè/HMF9; ~H"[I#?)vs][Ě2S\\w9a,r6cy{o]FI>Ҙ.ƴu:˜\Hw9L3!{/؏'1}sFm閱-D{gS&ҹ mOT{cbĄS wV )>~v/=|{ϖ#GXQzU5Q S2'=U?"(k~Lti&z>qT7sdNU6{Yc$6rK467!מzPd? KGl H^#F?7NT؁*Z飍w0I3Zlc[2+uj"L\9*Gx!G.#(Â9-t&-)Y]oeڵC<[-5(D&3L#M+"O8_ppAYw  2Y{a ZɽpZ%KV<$TC :+2Mq !ZHu2|L"U,2}*? RI3vcZ3BP0x9Za{[cX!ʰ!?u'y3%ēڳ-gTV 0S$`vwYgtiX ;>n8W+&9"fW,-enrpc)Ƣ0ON{9=*R\\Z[[a7`sM{R^^b aE%Ҳ`eQډf|:\IR޶5 @ڹHCDnN:WUkx;HCz0[v Xp0@6qJ$})stC+að+;0.umVhr9Ya#qD$#Ojp=kJ #(ҳ LIkFv~\g)n-K,.ObiJڶHs s 8.ⷥg36YUד|>XߵJi0Ď; ̵ݵ /BF=EtLY:b/,v3n9+TkT€Hx͒_jw?bpI[kgªrWZ}L HZIbfk5y[oPoc%F c1 [yaHf +~gݬr4{Nr 8thmG$O!m90Kꮩ!բ5G&\Uۭ-vjYۆP:ҵOU;J1-*ƛ)YwKu+I=bh֌n&G,#ak2H$ ҳm58&̹b8vF2 K-Xvc7ic%t46V[eaS4..Y^I$qKnd~0irzX,c{a'5j ^?2Q\֫%Eef'޺ [eվA&ԐYRS#0!0*;n[Iyې=JK*@fjXd_HGaSfRW2 H{NXDhQX׷6+'w]+yI9\"[ن{R4{ \Ec9QmsC G/zVf`ҴOKؗȌ󹹢(E&37CيqP GzPEFz*~٣%qebzI3@ϭM`$PXKccD(Z?(,7{T`1Z֚c=7z{ 2Mz9HM[Uك`GZuw1#oֱmRHcF:h 1Xij@`ӑ+nc.3Xj>fb qWhRz28r@؈2}E+1R(mdRln^PTp&]Eħ)''RS\:UBVzV.n6uMV˙F9֥i h^*pV8íU.B?},m8YNO{"O%,o+ϥXTev#4&ua":}09grfVڍ@gioZ~&3"[%2e[NQZ1$7n!;(h Ybv2!PǂkE4QtN+{Q \ktoASjS2n\ÌTuA:W*;Xnť1|جGcmR6Tctԥ։vf' E.c#sjGzE )\m楟L"\PS 8s4{)4Ѭc?7Je'fO$RW/BtޚV٣-,}eI#ZB5eCyAqw,YIE,!i㚊"VR8aW%{ ;Heix>_Okyj#G#f5:DZ48cVCZs+O?'֋ۓ֨r1[Fyc .: mBŻ͹*k˖>J]*Yłx9P'P6n}q弋3ުZsv=k$ԫVmF8><c[̐+/kpf N=,6N!v:ѕF~QzՖ?d*6±/d0URMgf7'k3gFQH2+])rTp~iJzR^vzM=4GipSW$%=lt\~V Q.{QʺF 3ޮ۳ܡA>FTB(]fQ`x$tIhFu,:[}ϾY{rޖ3 +֤n#qaR_uݣxS^(}T#0`]l"`8!u[]5zvM,@eaұuv?LV͗zTsvHM[KmXiCzv5q@`U 4'ET#ZZܸ/|>\Y ˥9&n~3X _n"ڍI`n"bpVyoj08oº4v]t1"2kUX2xӁE>-Kk@ܔaTKw0˷VHAn{hLh[SUVU}/=R [AMRHԷjQNu֥ g˗K;jO Mkj@}vq{%[}GRN@y *{ "PVNskYֻ/A*&R%b0+r<1rR?ʚO-T^Xp0+m"mdb')l{Y/S-W$ZXfA-Eac~W}ƳhIƗRIQR(țlibvips-8.15.1/test/test-suite/images/sample.mat000066400000000000000000026374031454007373500216230ustar00rootroot00000000000000MATLAB 5.0 MAT-file, Platform: GLNX86, Created on: Fri Aug 21 10:50:22 2009 IM{> x,wpT5PI)oKq HJ( (qnuw߷o[?ZBNo9ܙ;{9C{UHz~=_^߻g=H9ݱܙnTx޺R"8*XIIcSi*?Gda㙫GT1C:ٳ}bų %@X͵r"+I gOHջ a ,HӶi zU<6\wI"bi+_LKmtY nox"/ WY颗vnns=ّ鱋mmP (XeOf{^V %)/7XQ{2f)ɕD'KsWM B! (-$gU>{\K|NCJl0^61Bws[6fDj~2䦶tQ'q̔<`XUhcA ,"M4gϔ%byd/ xu`@4gΤ<5X'a/Q_0}_hxW ;K]l +S?&] rֈWz]ZNdEcSN>u~@]qYmڃfdž_:7 1Dbyэ/ujqC>wJ_9nxzF+ts;{fa8Cuсb考&>ByE< kG/OH 6/5=u%x?# r?N0 ǡbOe"*$M˳9xH?Q WX r%fi){T?2)O(鄨gX%?+ebnm~* ?z%eaY,`0p@1[K3-`anQg5A6xQ LTaGf N-?,ϣ74&1. )^%n!SYGʊsYubpbB:kxea xX1Vb<1|H)mS0>I+9;K Ֆ@.1[N5"}SI@X3o΁3CZT\tA4褎m@NZE_@-ɉEd ́htx9jhDj%-xLPt[=mozyHe8HUm-26qOgK.<_ZSuK}e=:gwiv& L2ھ:xS:qd[KKL" *:jVR[ǛT=]c xC6Xɭ`[$.V8g.km_~ bu1)g4Osj4A~~{de sBmiFmU*[4W%tj,ZwZ]z{K.Wd d Zipkmw>A0 ^BXMm6bA 7_{}N)RwZyᴰx@Z!T$\1VJk"_],;~iuPFB1hדlJUJ߲k^~Z4Y\m--˅Ө`݂WE8*),Hō23ZCI%*>%qP9QU|?AOq[/[8$7=pmShqG9VkeڣUsk*7.>t]Qbդ<C]d#Rf•O~F9 x:mo϶ʘ*.~JnԬѰijhmKh1? >p&LJiGIɬI;q[GE>Jb Q1 k Wx#9ۏ8ƪh!e Bճt.ZIʾ"^yb wx`3F/[+ܯMMvlWzx4I>  "^.S7ɲQ{-DO@D̢d?C0[l Ѭ I P$ 5KI"(ya,/txc"4Ed 3&6-lHNJL[IxDc Rx.V7?l#b> d;^Ii?04 XyGgkȝ;NkP^dZћcFyqf@'=36G1K;ڸʴKU@b/.~h7uȲJKR3鍬K,%w6SH͈ StwR.[j[Tu3WYkYIMYf߃̉Ӣ~ ;L+9f+J¿[S;6xKĝb|}B>?l:Qf ~e\ߤYѤ{b69[Nzn%kȑMo"Mhhzshv)r\,,催4v>]gPr y#Kb; ROK m w .hko@xt0bM5o;w|[-P!wb -^r K _5쏬n |e?8+tƆAT,L鮱Ⱥh{dXşZ/-^o/⬥,պȶ`O+8ǂ {n]vXHUV*yE6c{~ŮhY2Ik>EPGk "<0Edv' )QC+0xB"+]/X܇ZE<4&9$?VBVނ‰g7x]>t,sБ_[<@MgJWD ٸԣM*v \s&江%&Ey諈)ml 15Y.k؍sq=J$pޱʒo^/uS4F/ߣB=qܫ ELݷ.o ugʲH2^*3'1̲4<@1ްȑ\mZo \E=|Mu~ CNx* ~0ӡڰݧǴe#Aŏ0)"+lFs{3ސ7jHinj?f֢0 -hoJ߃ӯ ;wm1L8n֘v۾"yP`嘛s0l eeFR#gӚis@BrO_}tk^$t70vQ`#eٚSQt"If/>"y=F2S}B! Ax2VxLҖ|Z DVa4Hȏ<]-fE`Խ<׶VLڇN_H/ږy+9iաe:u䌊tS21H8O{pB$HkSi "SSx4Ue>D~s5ɭDMYE\TT$~z-yq䘹-|OGeC#{sq~i9;SHF PWp3tѢ3Y!jqּSZ Aʏ V Lj übL+009`kP!}Ҷ;f'&ysKw5S+0Hh͒tqk=)\d8cK- { C0pKt7JM$i/ul>+c./8վGT[@Bld"ctSv°f'Yƈ-pdе)t%xH(!4'_}6CF /)Ve/_1h,L_d"m!Ӵ "zomwqd$ci.Kky] [Џw#㮳s[P,% Ss; ;8\@3b5hKhb .4n޺'?9B-5QOͳ TUҘzsb$):04_40\م_TP^`v6BO>(mh,>R4}tVKݪH5NHp.Ӷ}Si T¦DB-X.oh'ź <,<;v^ ^qv^^ֲZbwghފJԯDe5 J ߁+Pv) Tmypڼ򁾏l`wDb}9>_C *+Y.M8:_ycXfQ7p[P*7tc ߁Qs.XriG̾>, E:v*EFX}ȦH!ZT+E!#EaF^AI-nGPY+^GUV&${ ?k,1'O2 O?::yh ;ϱI#KIs*,+Mg m`G^MZIwTT96\B;#=`k@T> ,r ~.X0a @3B?#QM[IP7Z &'Mq^ʇ^m h>]k[R@K+Xg-ngq1n25ݳ?)Pٚ,T]R*;t8UFHfQ ?7d6->}U ̿oR (,Ŝ] 7&+o- a F GyVy "Hu)˼!d恓KxV*=ka(-y%5T<[1U1L5KJkG4f+KW-P:fpB|Wr!2-F MH?CT*XWl.ۧAI~Yy~}4;rQپ4WAS G|?4PWj'ԥ^*R0, ٵ1y uHnk[@Y\{De\3INX:CBxx p_ %Q7PT%8w{zusݗηw ]Knt?!Y@ t8y[Q7>7B {;"=s!3,+A8uXBPv(WCa%ZľEDjb-ѥQsĂ&FsݝXd]̓Lx;#B5B.@K!\6tLxQnāCHP I -Ehvy1UKy!d -:@&0Aho]yr.#y ;mmW^ - Ou2>Sb loTsY_Wq&>&w-/`6W>Hܞ9ryť ںʋU~ԍ/ǒͶ3~LaveUP YyzU̜"e ğr`#ͱ#X*:썈uām/4tn, _!g}I}p/p:N!VѣV褖>,w4̺0ZL:.9va2cp|8^'gүb#i]|:|Ͱzv1͸Ӳ^_=Ь%O;ߝN[aEPcӘ57@0= l =v~VU5Ùhnv׹uw>Y-}.ø4X=lOB3Q9BhtS X&W"Fowo 5me[83 7{Kz%GCMkf]ҥ4s*)ěK$CSYk"/쮒1vȞ utGÇvdIPwik;e$jp{2q2r!~ 0QS6]onhx;'@]WIo<x_GZl|)?HEU!x Q'؃GUԍ'b 3Yqc5G~:wG8'lɱq P$)Ǚ9Ŵ3kqt!牤Kı:X8MA\c;rK.~ +\_%ƻ2QN40u?ґ]/:GDMk?R_b=o7M6*>Y)uP[^}fFE.D/U|T57%x#s0 2JI1}ܳ64 J|omomqbW窻ĝi7Yٚm,z/?m%X%g=$#ƍ ۼPih=u/&QIu3rE/V~ݧ9D!̽G/<%jS d"e/+ fikYm+G¨G42@zI[.Kf5nf0FJu'\"ZIT 7c!M:Ot`D a{[^w]6H^L$iecA}~376A7}՗Us^.oh `;s3A6ů`9yM.+enxp'3мF/Ǐb=`dV?p6~nZ ߅s%Iһ|fQaZݷ6|O(X88#7 /ĺ; )di AN VYk/UMBK^VWU78Up(<ڒ.tp ] ,l-|Y.蓳=ud*>X3G1W흪9رKNg:,dZ_v` f7Ss꾕[ H3e;r~ԠYVDjʖ;v,_D (azg-ZkPmBoCۢ&RᆠMz~!>P|)p(87S~W{C0*|' o Hu_O/Qiw@ktun,-I&hwc cVmU~L4pLmֳ>+lUU}ViT#3 oK=TխRUWzQOL 6\4EqyQB[n/ǓaK7eiFk[XWxsLDfǎkՐ*va-_L[1zmVs$u tpM}\KlO)S1X> u W!YB/tf!{-GGEцjoX fqsgNٟ>\VA 4Ē㞳r<$؇4@9 gV(qD -y8;:UTV=M+ ;D *Kx~fp)ѕ.v5;~جe9w. NT0Yej_) M+^\| /gxdBkd< C%ev!4M*9befk8WLZ_(Z:X}uA ջZ_YaLy|GSZ}Cv[/ > =_Nxaw[X--YѢΩnsm{-eצ=N J4$b 8n2RXBdC#EX"*/qREl bj2s/ՅKW;e-vrE<}MDsS,&2*pǔ!YYe??$kqSQEt\OV{`lEɀ.ĄQ#d Ivpd XyΊʪh i$X9꓂ɂa"P.L ɴG|I!&]2{[zXv|f YJ8 V>G!¾;|-e_1ۘ]V)Lv,?XRTՆCJMyePIq$ =i*]aG-dCb4g pxxE?s\frj/#9J{H ЌDz>QnkxyN--F s\_PrKz}{v樺KlV~ _aN9qP^0X nox Mf\CP_v}5~[7Y,dehNsc"%y%_O&w>unUte2la7ƊSgc q &UX4Fm)a0WTzmJѾ3L}OӦ-NgkjRł`feZ7;~}żrNA%lAZg:3- /ڭV켪貽UKªh~ɽYw_@F+QGH4k-3_%P~+} "{ bZLI⡣1s$E'ӅYŕ '\i]s4թ ,uQ /ʧ-1bKC/^j9BS\q6 smGsÕbYcԺ;P]N3z[ftY^ͩF[IP+JN)dWV&_Et4NA 2-(JEPq"ld _lJor0vY?r^hgH`%h9L=e =#3jϲTZt mL/"SH@ g!]=}{Zwi/^4t1wf{0ёy#3MZd;e\#'(X&ϖ]0`'\ Y uz'Y5T;˵ߕj~U4A6G5mCc) =;ouN1ZŌn([䎽mJ§bhc ;U͚ F#ByE*F$uT"g5;U)&Tjߠ&xq0ze14Vj_$ 'j=9yNw -ܽfVyo]PtN&DC-h5͞i#ʈ.Sh/cۍo)aw1FˌNDKf2CEB#'t.dMOH4C~7zvoE*CTdGz/k+9[&5 L^"}di;3 *ex$?yZh0dڽC_-mgr[FU$nfCyx:!ڛp\@)J{D3T1hcg^sk*$]NtnhhռMPL 87xEmT֜vn oO6Da+WB*.FA6;6 pя0#p:?I4*w ޱ +.C@Y@qlIW4PR;vsqlns^XtRMlc2KhxjB| Ppo|ݧǫ9nL-.8贳WgoJ<> 1_$Į*}-$;{,5`O !k0+Y{nVƃUsmfVG>j]dx\#|}\7JކD .Mz]@:xmʻr'=}UDNIj9w񗋳b\AL{Wyk!r"!%+W`$c;c5$;ӟq|c_$ Io쇾K[a?A헪Q_;\a$@Nc<Ų:϶ɹ#?]JjyrrV3Ćoui-~^ [37 z*L"'Eqף ?$~^{ 7DQ(8ANsiFYgpetlȣCa'ߡڔWL g}I!yba*AjEO|6'Xά"~}#XŸcτ2 \頁]vs/K/_&c36SMQJ4'S__H? ~`OL}ZWqV#y͌3x Iݩڠ߬ T3 2>S;FbYx1ѼQ8h$_a~ u)XJ[# 0F q?H\\"c-w eXT ͵uյ WڵD1AAr{; b`-v~_s&1Y!5~nmzE+0"834@9K@.zCS(L LU'`-ݕax7TZ!YHVӧbG o[f+1vS37yY:b;EClStoUB!D,CFQ> -4WIk?H BQHq7cS2J8φ?N*625VـN'fgm4 #ȾʙdolRSkq]ܛ tEuA,W| H4-l$N58xZ3JI sd~iϋ6Sf6k@)s$rB>1[܏ (09G`+Mf,R VhT?suNyR!}ebJ_W 5Zad\,vtFIqXf3 9#>|c]BYNrL*,Rb c㍙d2BxhC01Cjyc(NP'ŊTa8\spӀ/,~ (k3BŭI)%JVl|4\i6()07T~Mޅ{S)_%lp@(eʯnE}ގ/( B6<[pyF傂jvGD^MVpz| {.HegBr}9mKUOMKK][2CɃ*e )Cv|/%T 8W` c\3rۻ˧;.! !i7mu>IxlNȨe F'+up]6 z7h"_e"U؀ 2Iiml![AA;Y)Ve.|sۏ ~# A'޷[:4oiK.f<Ogƹ0Cg00l* lhfzx:WyJs@+@7Ζ2[@+;X=IV)['XHX.5JREHhk9}YcNCgbaZz])ȬHR. {:d, mP ZgdZeNii򗤭e p<#HkiǪD}mѵZQ`0Ll1m]^g7TDSCXEcvs7F%AJVEUV_khzpI_hR"p5')W0o4b(zmxoh4O5eBl_]}B\NÛh|0n)f*frttZɯQj&" UIyA; rr_4MNu-&pr:zAL(U|LO&J=_Xp/[}hyEoOڒZqAރh<[$%z.j)YRWVH("mAoqUY}z$_Ӊ+NjfHag֕TƗ>GcC!ǪE0rZF(&MxbZ!-[tqo1ՀQ--wjf²s1Y | c`,yeJl/q&`<5dٻUme-i&WZge4S&$ipiYL6{u1C҃)R C뵀<~ Al[ױc7w?!AhK mg:-κއΓ\?;;pekyӺ/% t㔿I+4{G]b_Pv0@)Xorء.gYx~-;As!cW@W~Sh8(^8BhC#,_9(d8jRMn&Yr0ʙR PcA >A;G+`jiniv2Um;h7~Yl>w.DU>i\(YWv *勵YVMWӄ(FG&i4&uC߆]BV/)T8UPݘK8BPK8Ƚɾ9RyI>iTS+[QӍ!7tw@b`[b%Mt N](1ܣ(V<"防 !BeC<|<ų%L :/P/ŧL>KK@M"%vK>(?Sz6->͹0*Kɮ+r%L?r%dX<"+N{v]czmTgXd$ ncF$!~MUTzr1ś8O{dՎu(0胆"VK'G`:n3v6[=ɉp$8\lmiEV5\ t4Yt`/]KO;_L kRx\HT,g4gY]J\j8޸;z !s#7YZjh~BK-s! H 'sP(Od/dY'q)V3%mQ˱|uT&ЁGC- ~&!˔37*ˈg.?NLK>Wcp)N\eMe{uu?q}Xr4Jlp6q ,Q'2TNQ.3:;Ku>A %K4=}uhj&c|@Sz$꣜vc-AM(DIzGcH4jn4S[eabWnV6ZB(ȟd 8TV nIYej+Qu~m<i`)qJS_yemX9|2^ɧ0q[`50xVWֽBzU<~xҎ5jHR@qⵧ& ϹI"FtyFRʽkE)2_-'J_4eS6n**reR vEX>ameg(plJ2=%3#h<Š䇐 `IW+=e~Km{Eʐgi>hBwa2@ܭ= 9MU%v}o9S]"QL/YnSx_{ڭ[3Ȍd8ݜA^+U\y^afP_["ժj= tOqSM%nh ZA>YÝX8"$#O٨h*,g]qH<lP8f꘹Vif"&v~HhJ+Xq)ụ >x Z8hu:XK)l00tz"YGr'jÕ0ZG5sy1'fI?&53uVgܤ I۬sxG'o|׶}i[b#Gx)w; '*{oxA fT.;Q%axL`!;Ka6eʼn+;xOh]Y*8K\gͅ$V9%T_jɿ q? }$sz#K]p-qEi_IjIVD-YF(em ?b.hRft1 3;. SP'gHrx&&cT5qx(%=\˯yR8(Z\[[[8uřٟ³b FhXkUfiW./ jy W ~ 2c4#Z\]vV(skA'cdy(4mX Ld٥`4Ϸ`0ȳ;uis<0}kodk_- ZChoL=xq0!xDaX !ѩغa6lTU{)iBoN w,kOUcd=EI}i-'Px,$*Z$ e4;ހHD(.)4ǼVRyѢldBbժ@Y5 Mc0^t2QhbkhV}å-RJP p>4,ccmVI(04@)զYmھ@)F?Q˲quOߵ[fý}WO2T#$煁!UzcX'q/35HDY7v?a|Wx<UrQl@(n0֪OK/K׉D?v1BD=B%ܢc5Nf%CX:}sl E+!=F!_#q1eT?_Ջ%jJIx"Ƹ ̦m,}HMƖqPCq1.-<CA"T1zj"0ٖ $ғt笂8Z%ƛ:D"Lq]l!yS〽`iMє+kMuE@Ǖ[YW 9QƧP. 87> {$x$;Khg$#ɡFTaΆyuk~m@q070JDocx Q74Y&\!_ʗp#xsyx}x+@ǜ&k Rf$i%P@K=Q\C@?)؅ }2B8\A ~1)Zz <#ArK7W k R$;`|ݳ1Σ Ҝ,QZ@Ʊ-/ϐ&791'}F15>gC+"/ /l~:oKiL)fIg dźrOup↴ G{U+YbF.Wπbqc?cePWQcPT_ UYv"dw03hoP(+cu73 =.i~>[wAD40ZPmScWЎΑC;ww'_|CA!iNMX`\ ogWsʭLWP( &K#}gwkky`6XP{!L6  u1Zn:EWL[9 ȑm44^¿}^ݤsݒ>z9 +=(R#0B!jxa{Y*WNTLPdl-̊10TV+7; XEj)~,2!+P@UuƖejcC^B7^*B Rq]42s7M ,H\Y>V>MFz!'*C-ž\B$cO'2zȫ6POy{奝Y+<1i8!"gAe0H6A7 NϢ| Œ.bلt& v 9*} ~jZq;1`3z>|q AmvwѦraVyʠQ)[h&jchP-C:p=фopq_Jl$uGK7FMCnRԵ43rs1,=xXW:efŜrQELٟ˨eʪ+ͬ?WGK}լޘ%6>$W8.WЯ W8Xwa/m'PAIm0Z1(?3}5gԺр9N%ŕ~\iטhF >-E퇜 vH *ΰi'| t|; _bƜNE_Tt؅S7@r{tS1|s{wG:OöԷ+wx^[n}`\Q3ۜi-oW_B)1obHbx0zpty6y; =F$bƗպƣn/mro4leRlpyfd8>{CAlc~oٙ~}|JF[Х VH+Ar &:EdWOsγMu}͗kC޺8>v{r9%\=2%rz_l[&Ʀ}YёÞ:Y*)~is>1ccbFKk["jI{'1drq <ǂ/=lk(Km4E1_h{x(3i%~'mԔ7basf"FDb|'ag~ Zʽ!t DEY[tGRós0ֱp\y|Hv!.qAc`Ba:t`v"UuQא&TcF0ὰT\:f#7`bNa)&{@Io`ih -lZqE=U uXoqi5'¥uњ|_C_L,|`~YdA, 9#| f0SnrrQke#€TJByR! p߀B\XV/ߡd^"ͮ GX&.Eg@ -I SbNcn3<9jYY1h%-KA r';}M͇mwROn[&:+7tOtlIxۿkxy?SBU~k{U$ nB|foW`oE|G߾bo7ɗpzlVPҥwgFz=j-PJ Dj3xNrU`%RZ$ ?hZ}#С׀Gq^,*{5??t`zW?PUτ1tyfTx xZ9\U$1Dj즎]OfiJb, fh~-оЋ8.mw_'8-%h24s&/7V(ogr\tZI!@eP[m ʡ\IB]]M[}m9i=:g޼i7O%ŀ Wmw%Y@k~-.pV[XjǓMۛ5mgsoĮ3::m-˚'*BhvCF#: OR}<@+@G<7xaY =;ok}Sn9WbgX݈@ShpDUǽ1b)\Owĕϖ&#դRJ*u 4#}&?uOcT2R hI 8#xE\@ľFKq+avua<& 'ssuUi-/)+/YX^u&4zTC>˿ctKwo`<1Ķ&َb2YQ'XuiRsJb``A( 7#JWbl$P @g[[_wyeeKǭvzMveTִ"!c{vo |Z'ٺLp6$-4IY:^?P~\!_ (0qqA(+hlizl!YW8;J/Мiy.hQ LEveQq]` Km3 om؎xK!y[xr)NiMU.&S>MPgv|&J/~uy8f8 oLneW#0)(@E ^ 6!AMGuch5vtt'&u:]MT4'|eѾD8 GТ]yrET@1w/#%ƂvjO=ԷSˑMh'`PK]AzN~ _mdddr6$aT:uՏd(+pA7nl2 TKz{Agv\1.>ZcN00W`e8ƻ"Ns˚ilhHjJRr&sM' I1RpNF l+OgKI-/BorL42>Vg XصԅOi2{Rȹ(z%*/*Lȸט9bf5ɓrr3yw=g]ל޼Py5tv7QOMI:@<@ڀ큤 jA*O1 PFY9-p']i9 =Rq[܎lwK߬:8A3'yMkoR6d:t}b|Suc{!x%^ 5LmJ RQ{i'CK#wdX6{m!OЬ6G;W-H>T J7 57d$A܋R)eE,VNRj$+W>'$[F2D*6 Ս (,yjd4w3~ =wi~Fp+7K8#&79{wC$^NK&h5r_h a'hX͊F=˜XebR&֭!$ qi;]x|U4v hUn$r!ٰ@K!Q5jW h B*\55M q C]G㒋HHI%} &|ouX7AHsqXgXPkcSxSDR.%$z! Ӹ|1T\pfҡ . {#IÊ\K质sF1=\tj>Hھ{hY`Ƕt+ !Pi/#Lr +帏2{ 1,+:LG^?8 5+hKFcb b<_8=iB W!ipLp;q$GUK{ jR0O&.Cx҅ :UCr՘NHN6~6^P!d.ٓyn4~:Wgsɽٵ1ӴTS&I%ѺFn~ot/_w2ad bzBs^P OM(p0;P\y}l5dxwd$F \g8SuGF -nPxoo|eǹ/bxfU;r7#VC!Gb{}a$O:P2[ ]Ex2r Ij~Z1Uf'y?1 Gwlunr# rIH#!¿&$3, {=%A0y?_*1B5/uG[d>F_ ]2JL2XD79K0 jAr?3KL8v uUp   yC֊ @55*8 PBŪE$ADcrȳ ``NފտB[!È?Jf n K4һEL##՗¤~fܢ@LNI20 <6U)iQ}͗| xigEwd9E.P-qX>d` 2bHsY 4Xo<["hZ}W/m ?H|IaէGV%G$,BP`HMd3=LsR煙p+v7m#roXt||CΠgz\lF돖}g]=#;/7󷉵4?1P^9zb\k5۳U{Xk߀*e}+6$?RI|Cߡe˅o P&J; $D{``h0.d "!_( "PRZ!~! u) W\غ3}k/+=N? u5i$ !Hp4#$]gkk p\UQnP"&c5-l!4Qs^4CQsrVDn3}/C"`W}og?dHd20f.x.?zJ%wQ~p*:/ _Hg(x6)=ݮ G< !JI*Uf+z_V*yT_^QhVn JrM|1lF)g4V RUE,_-,}YxKm׋WI301V]/ee)`yk5d!z +1F2Ecs8,+)'ƪew=_vX_e`-U.c t{#qW]skm->o=>NwԶߞm8k!"ԖWރhƄ@@5݀ *Ak@<kwH5*`KH]==}(iKE)6m1~k-M6qjcOhyXbZ Iq; D=\)|Z1hV^G'NRT95UUjcM% l%i*M"\1L9E܌3y‹'3V~U}K+Ceץy-DˊScfo" i0kѡ\R Im_M1qbYK3xV7h"WVg~\zNxj?=uIϒ%_I'6%}iJLh#}SgGJrk-}f0CQS-6@R^ -Ifi_N_U2 )\Cg}\RvWk!v*"ٜzzRg%D$|쐅@ ulk 9X)ٔ<$U}Nk3bBZ/&Db@-cCGL*2*5qwꍴ_36dLzc=z⬮FM`d1X9@$c<2b⼲]ٶKOSC.oq5~nBV19U-m$* ԵP3^ [YAZ^eˆ&C_$b #7ϟmf3;Kͤ#Qpr"8i',e=VM P;bv_ Q+vz>CS{|=I߻`]#>}BE5 1x &7œL7%fb,L5GtZ"M12a<2XC*%pcem7-,s)Z0Td "VS<@`Ngmjk:MUn(wΏ`ڱYoZ涮@&!lk;ɶE9i"ȇPK65`il ]E$\iD6kX|LUa496űmvt+7z]{tY@yfRM^(skn0UY~žc0qH. 6~6V?h_[O .7Cz+/?i_맖&ZdSbDdzT.unnpK~\ioXwXdJmS{(y&z-(͊/1 meH\,tAh05X_YQ SVìݕOac3P0)ؠ,Wx3熜N9J'LH|j䂲jP4"xt$KLҥN+ޗyf?:32hJi |q3(f&n ]c.?? v-٨7=ޜexe\#@ .J%ysB^•w]XÞ#GSˌ\&$#%YRE[#Ak=LhrXF s,.OΦ҅mJ~O[_LU9vm|1%ù[g5<*;,n (0Πz<^Fyv]{ {A@Α;]K{Y'j|+j1T@ "HtHI~6~Y .ޫxH⌗$ 1YǨ984㛸&:[[ؓȢV:\UufL!!VʹkZװ58P+W6bz }SzF(c:ߴeSl3}~ ?kIhX0'OdI8jn/y"7vu26Yڥ٭ mNGj-Fiuve<*2 մ4Nsi<: \\gSqUo<`zϻQsefsusYee750't>c~œpSDd<lN9l6U- +LڙN:""@@ BI(MK[1iע =:|텲 ħ&nQr a)L@Q̉n.3j&`Ԅ躘x`L5.#ng#7d9d4p8p+h nOR~n" }Ӗ?b)+]/ >pFeu㣚guQrg1ԙ$1qJ6b[;TfvcvMa͟TX+W\u`"QjO^QO5ڄl/~kmv.$KŚюN_~itT\a:&e -|~\ :`qg:XV{a`MWMR-?d4BG.isr1ژ*^g[`{S5yx<PB'XOe]l9r|:x =T_w] @ƺ~{n~oydjX"!9-OD߁ RΖ֐c1,7~;"g 9?s'Pҵ2 NormSq/A3534V84[kjJm:A٤I0g?=%$&!]rFy|ݎן.#K̻E NbdSV7c6yG/eMRXg9wM){`eʩJb{qC9xODr;r} OJGeFŕY0,j+I~|\yҥu.-5lyϦgk@7=  ٗH@%3"O۶xoQ?'|@㪻"`dQ\86W7vG?MԌ7[o} \FBC]0H} t=5dzzznkќpPN\' ANd|d#9Yר!"BSՈ22 uzLjӱZ,ܧNn">/[ZCJdQ,TѴv!ʭgȮEH'ӱO*'fc ~9oڮ;arckԬC9Q[MsOY]p'fdP?Ӭ6BEr§z.Lub:7zNX>;g.j疎BjCVeb4'g$Ys%8{6]%W&^ui\k>T<<8æ{ok`fH"կ7ԟA bi 3NFm,&k!5VG#[Jo%C uQ$Yz7::OR Q㘉I8eB8Fxo"fLg+4VvxvpBP{R0K ZPk>A$_n}qPJU^N/ 8G"Ϳ_X;Y ,c]dt./%{+3ifcۋ] @w-v1WJ+4ޜ6qMٺbLbbS.jVUגS4!}3 c ?N1Ǫkklj]WzecDSm\0|)ȓqJfJBϛ%x:Kmw}jUO& lgY_WR[>z楬`ySEHXYky $2qkBr!m}?\ںyxq~Ъf2."֣RmR5BLXm`j'qq ~&]#G?{YfjgK /#Hֶ1ڟ5ppOhM^X}qu"a,mŎfdn=|󬑤-G+sE 9/^OWCw1!0ukW G'U!T.V_DGH܁cV#J>0Uy#a շkUE@ǖ- (a1df}m$b@ҳ .d<ԔC ~\O|II؋]|t58 8t"ĵ;iGRƑ6::v},>G5Gǽ\ρA#@ %bݐyIvny(\FC-W0 N` !'+9b^dBŒ Z]jPןD=|M4Ws!yLPG6Zo.E>辦L7EB_%:D/ƕ~Q=K@ 31Au3HOz ByZR6Pdg@M[Ieo˒GzPgٵ<~ԋ }e䵚kݽ,{3DЮ+p;zE?L N>lrq8]8jWا/__UcBjP?׊ibcc?syڷH0!da =N F8lڹRrc+UCd؉x>\BM[NΗ@d&I(B42NCd`4P C8".oPQq^ChD+M P %pmyutO1S/0 2'H`w? wN')F˾yskcn,!RBkUUF1h'ֱUT&OtĔ9ܫMN g|X)*;U*]BR}LB_Ei]* Pφ]ΨTm\ []~RiD!{Z$^e1@;0h?G+@Bč$%@b!k!DJΔv}7;O96,v(>_RfIm);@/ݰi۷7[bt8 ZZ Iw}`pp s'Wۑ_`DdMƓzSpqF\4n9^E(!R=9.k^UC qITo㳪Dq9EAn`0*A*!uvfiԚqDw}i.!GzP]Cޣ>JAzkoƸGpU}l}C(_Fx4pˤ?Ha^W}NvgRODr?.k\7g׏͵۹8 ?_`nf9@o/)z {y.t '! b}1d$\-Zm L ~CאfPnk2BU$J"*?fgs!_o Yuc^ 2Grf5,R#3ITO4@mL $_׷;ͼ Ʋ]Tv1+16xG-Į1֓ǖ,acQS{5һD Ȼl!{V'z'OS.y\+΋–SWU##qf{ao}ڶ:O?W$.&< $m\k[2+9\UW9^vnU~)B- 0W1];@ 7 cHO|`c */z|g8Hgƃ@IgN<L w u@ĩ@WA! I;Sr>?*e=i+mmUHIqٸB UF`3~0h'Gi1 ~&4jmbD+ "$e4{Ifc; 2=EO2٬!BZmx*ZlCE#F|!(98Q9 phq3MIn L)tMdXL:w/'=8};?KhL3e& c]#cGs%;/2O8\7ԧ"EkDxݠW[:C;0Ͼ#)DS{urh_Nh+CR{>7Y*di=Yn5':K eXk l=Ʊ[_ -X(H7l 66#6=ZcDZۗoϧz>s>;._β#9lbÌ[Ei7S-9:n9>@q&a0a~&ۡx$Hhup"~+C0OXhoD¡D{5@(xZ >a Ř=1?ݒիla[j̣UΦtEWNV|f.ON^(yHrQ i,8BPwיS|瓈[}9LӇ9R,UP8A8Jh3'Ki  yr/ \*Toɺ,mfi\gbg2%?ҌWo5TG讚 %P! _d9%#!1-{gvC i'%'*QP$cҀhu j$@"BaL #p c;ӡ(9{N,!av[om9{ˁ5X*J@}@ǃy HB@ @?EσAŐP!P >P<n-@@b2aN F"3WcGm:b>f*>ZyyuE.KiF,/+_Y>*K<=uoҥ䧅 wŻ˪"*ʈ Eae BiI..Sۙz.t5J}K!BG3ԯfVao3/tu7wGIQJ g n]So7Vf0 xO'kSa|vnN0i9RtE8ְOblͥu3+kOi艍cj%MSff5IΔ‚A5y.pl;Q-Yd+F5tr$2)Oxok`:ה#)j3⛤K[~4>#کDTlk.o5m,=.4W>k7ՏfQ VS<RYc'[[)oMK q9"l^xnY茎Ù3gS3OU5Z$& "n ݻ#&: ~p/j'<LU%9 ]d7> %a"qc ^q%qW'o ۸$q(lD|1O%G?BB82 ̈́A  B3s\>w8鍝D*;ćYH$630-#qb|Țt*\^^AW|%y+)3IYgdCZȽK򫒘^K:—'+P>o:I[p芩3*^Zm3G[2F 7^{[ybO3\#GL(N"Mw:?<+KP`ǦpU$OƝ+y'jur}=w) i{q~gsB.>R @RX0n@:~3ʋ$7M\m{un,\]xG={} -Vf /v??>|~Nwh'΀=Ӿĵvlv[=axUhtpU{+GX~\u1"lQfF9$v_=g wط:cD'r%84:θŒ0rKwȰ-0Q%EIlP*Moa#2s/T#T$[ͺ g҆2fiYhKqhe*nK+('^b$^0{:_ѝ $D<"elj ӢgxykHԥQXڧ"!PTQ5e5mcWGsv$/?b$h~EDu;(sϘx< Y.ŏ_CN=2 Č}QCYp?ڇ>~q4 S`+(L=H2h1$u v`Q#1jflF,s϶qgv&$cJhẃ<'ϤH1$W)u<ݧJ #f(j-,(4=@xTYV9l/Xgeacޖ΅Si7z$L{As%{ "TV{A }sӷݿ pʱC>N|7ml QO>Z:m6iץ]%]pӱ&xg)##gbƸQ<PVQe*_3dzM9Rd+gi= |Zη]o=碬{ye˫:|?%LvX<^.vt:ُU*ibfu?VG=PV{uon J6m}g"S< g >S4Čq]r,5> n  ~w~J-=~i"[SܫQ*Yk;y4uIgCH~Pa4DDebhu 9?g+u\ܕ3%yl?gA5E_s@P."ƲUԙ^E(J?V-zhhN8SXC5"D'{W;vhQΎ'Y9Dz'e/ΚXr:DSr?[c!@_g! % #%  FQPa :x5h1;4 9wdb$s@M;=`@)P(Xw",hz ÿ~/،́C`-?J 9dcna1~X3rVlYJxzb_Y,{_M%k se r[^Y.oaaW$tYH NV\΢S;q>ΝЍrd{nXיo+*9l'jVPbFlu+E?d{J3Zmͮ)&vƭ'bu6ye6ѰObzԒ zVdz9֋z/!Y%pō-*Ϻ{*TuO.x5yWOq‰s M,Oly}n3ι[U6W;+ tͱ=;o8\Kh[vS39oLm2&RwQ+s rm[JXnLW/sec+{{A :wM|^NuY Ԧ ?UZDsks 9ZjE|K4yW\@kgfwRcgT0j/,_a-i SY9Ю?X789k jJ2+#FV22פKRwN;tm?kf-3g36Cdtp%8!|(Gݠ =Rj-5cm0pboa#ŎQnm>4aHQȷ27` OB{ x6h5p1 Oh8`#C&x$,qP ̈́"zz͂Ո FajAbV%SuW_M6SE%JK.ڈB:q^¢7$)d4mS%yq$i5e),/yolOKnJ>s%XR/\G\/igD|\O}Hk?q H+V+Ys%JRǓCMm!>-nCf mђd?ůjjI|d)8y׵T5l@Oo7{/aXM9wQRňn=/x] &¼͛'镶8{2Xo{k;{⦺^99[jMSu&M0KOG8ttX띺i uvtjycl0'ݠUzUw 45%46mUO1-Q~t.ߵᛥoDE^'e!X^*M>Z TjʽdK3Ue4%KK'7V#FmR/fK21Q{TBXWSi3 f.Bb5ͪEFVq(076)7T}cgbt67bM%#.ʺT։̶1YPŧ+N ;2y8\L$: +h9Pp3;(5Fx &'.aݱܑ"\?LvĂsѠQozG_~C1~#@6Z XaPEˣD?IB&C1`ȀT(\dx =_`-n·[#bM v.IB`^4u>|C?wJ'/5?PXph&t*e.IJǓ2DS ͠(lZ'h2&s67eY3aPQr(K4Y5XjR ~r޷V؛IMTQT1Xa* mZ>S<mA6Ocih*_V^'%]?4ڻ77/ë n{_مul[6QҤ=*:`9MxET=]VMY5!6MͥkG7F嬝qƄK\Qm|.5׳_oѻi;n4l|qv$w]niCܻjT#L$( ߝΥv)AViV9Gi/sܼuQ>ۂۂ$ 9y]伸IϻX$ (!F9Y /L_xOhR m$jvUjlC^ZŠo̻*>LY.4p'WU'WU+ Դ.`YH;lWbQϢN -.D_/h *!"uH B@^CQU@*{ [ˊ93.{ pC#O,bVبN4nBK\c@3i&B~@ja7؎9Th, p C@ aQbcͱ4|>+޺,=yVD;{TGZby)˳W¯W'spr!vT }xecn4'Wqs|7sea 19CAtыu}=Ͻ%V\$6+j'CJ CkM#,sk\86"Kbx~4ǽ{wԏ^tw.=hjr<xwy6Vi޳=IHgPU4uI^crغ FdDFXhP^U|oM2?f5SYFN|^)+bv6l*)К4.Sn+ֳ$Z"gRV}3H-Gly9Yt+]xB`=cr2y]Zi1٧r_dSr7d26dEiL ?tU`ס|`*d" ֠w6TwdZ*. tP< _A΃;#XTppb~c`;6P|ddzH[h*E`NrDt{T0Awq_Wd*FC>tW<#cX2B9 Z މKpcKpŘ0|ʖy;?}m7~ SVf/=wxLTb~ۯT+rru%%qRvˉ܋K 25`Fʰ\R;,YpV83['*wAk3n u͋tU΢xrKǝ*Jh W{Wxn&BW$Dͤw۔~Lɬ17)2sg Zv|+\[_Kum7 *3\,oɾ'aB2Lל#|Wg}ʿVٖ>sEimlleW 齊@֜&j%zm8+٫gSe ʅ՞Vu;=1=eiRv7)9n +kv(=ZblSxRsr ۩RVJZӤ7F+4_埯-0MUs4=9O2h:Joddt7o1_,1VT$*& O7׽i*XRۘ'hyqoZSՆ$YȟY)]\\l"}/tpeϝɰ&/;HZBSo`0ڠet4Q7ߢs#DGg#ꍬB)Hx\1Jx/*fj< DN"2p++wdR4cEV.Sky~ `azX C /̆E 4"5>Gأs~^?eXӋƏ;zc'7 ԣ"9bXw'zmy\ϋ>2*Z oDbA{Cg m ܶ*1{hǶ]/[wlZy ̠Cc :T\~1XZ:UXC.I@0\Gͣz5DOw%u]uuN_l㋋hYw$/E*:[Uf$o]v&.0C[]+;s:ی7F]ffjVVӬ"*gđB<3>-Maz!ɀWU cfI hrCqp 1kb%S#6^D58 BS7:~Wp) EN.4"g#F`!`"(f$ @: bAK0SA_6ߐ^<po?Bކ4(mB=:GRR9g fY'*pD,rTwBspTAu/H6 +N$_`z60J C+`) ]棎ແI%cD:0rxV*9bt "@)Ǒg@@lrᩁBWGT0A< .Y B* 9!bEY1MqO}=sEdd*x(vfTl<1$϶n9Z0wihؾ@XҖё˩n+|˫U~vȣɾIJw_qKyJ+T7R- V#AL%H ) sTD'YdYDYX1Nbй^lNWfuhǣ.P{Cp?./o*,."hy#RfMl*+Ӳg{k8Z;'syFgpSo gV'"oqW g(M_!gMeelc|N+# NV1Cÿ%0W(8:[rAd]6>P]?`J"tMԝpZvٵBW^YJ-b䉲;) f ?M!j$p*wfj>^a)[qg^JULnGVnvn \ךb?vmX]nk&c_lYx_k8*j_ӹH|2me!фjnKsYׄVMR[lCj\Rrr `NUE؂dRfL.áD4Ca&\ àۿS0`piPcЋ<ۆd,ȝW`HS@_lr A u\7/ W0<["#c*p=BUNCES{ ŘAIB×FVyp쾲HZ"g;n*ʶ;F{_T^UD]GV{(Z5m4Sɪ"8g(DH5viF5d(kRf??\sŌ?ϥdWvtrci]G\ʺ)iZwםUKQ+_W**G+S>(8,/%vY(LWdw8OrY2C2g4uq/.;7l맖G[8EnbM/_BʩXQ |`zz37@ W6=-[\u*׭yV.pQӼ9 ,*{A(9#Xep^vnnhI1{:vcTөfyd(Ai7WY,B CM*i:VɅhJ]ҜyoHEFg) ;Wݳ{':ႿDzudw{ z7B2Z9Of|n7.h<&6l#--R8In3ZUi/F []]xl#w\ȣtc~rh4W{pXɐPp e1h)bg:"mmKO6}5|9ʗJ\UnkJHEaur9=*]\`Y"Fq@ i 3[Ig b"(": &C9r`=| J@ Aww! j$>p.yWN .Zho*ĎK7Dd +`ou 7w FTG"Ŀm$ Bzho*8D>b>㠖@]mgǙzC⿲}Ƭ m'>_yEC3S=wڧ}]46XeFa>ț$UzA ϟ8,c/WV{;L];_wZ#܅nWCv~DcqtQ!p/9sܳܟ3ٮӲZuxnuq)γ(9|HBZ BnmX[Z}kM2elD |9D'!kO8:1u9M5S\n␥Sw Bu,?6ŏG3B%mn,0c uc$v9`끦ޕsuEDuV//P)Q'2h~zh|N-O'w)& V1[ewJ[#޵׽t0)q-rxS}s{rr_i/IwJlW_-#?-ۓ,g wKzCCvF6H(B!A3R fM #40 ߄aV"/)!Alg`)U(ue8D$ \C (3FMEeAߜ,E$#zDȇGoK[ ~e~G# "E"P 1ܠ5ذw,:#y:߮!*h>;ږإ+lf>vw9(R=Wnh~4 kvk]>72JEn?e( b?;aUH3(cG9eL Oڎq9.'22?OweO/2% c94 3XT͵9CNJ n:U!Vg3Yj?ILĢ~` ە۞zv=/MI'採 b7M]u-Y$riE7L`d>d7֔eo)#ݶ5 滆GTgqz.AF eKl /f&p_V\;XO+ySi<;H )9&f킮D\D)J|7>r[f#sS&N#y|- NU$(-j!߯]V",% 䩼1;Vua[춃ꫜG5ҪSCXz:-{j$ǢJ;ƧQvn]~PA?__ Xݞ-+2 GDŽ}& <1n۳BVv˿]=+-=Ww9#ZiSȺ[jHX;'ھFIc%]wGllMyxc\Xi*^բ4gU12<=SZA3^B{_(qg h&Yj*JV˯de 2nPRxjmRX0}KO\Cf]GN{I`E1pEdA=5{3ӟV\ֈ7w 'W?~FEP^3sXV͇`5=E  ԯ='/i7+FsoV>rzHB m@Dp1!lϘMyCC-5Z||ɾ"vO^DYsӯ$MI:< &p'&yQLeC@\l>˄=hxgORumCB݄"`LLKvX/ lGXP <t5 P9sMڭW lx[< s3< NҶ 'mjk@d{Fof|<8l`iTLTIU笔kKTTlm"Ř[Z7♅wQݏFIo S*&]r/>lb T>j(!+bcUC-N5>%i|clC.QS;SCmSf̖JsB`Kzi*13ulԵYuF 6yu<\Ip7ΓZCR(~/J(*Q?~a}f TX]biiX`Qܥ cq?JTq8%'3aQz&ia~6'8@@ƞےc[-#u=0㍆Y^C)_/\IfEK}ICwbE,!.&wvJjsd'QkDթ_VQTǙ'8S$r2x_ܤlw9ƋdX_􌾤eMXUm%" ;M ^(F_SU.U=u0@ȥ$I/n8!.& 0-7[ݗzؗHf7 3P8r>p =wĚ~A|m *8#ߠ :Pe`EG҇HD $"R чqo{g6n?߻dWD-C]s~X![Ӆ #8Qs+9sɴ)Ɍ8|EǼ̘S5dΑqςbbµ;|w ҏyz!D72q|Ă'2W+ |rsf&OxprV.܁ʱ̮͸$8m1J⼤H°yk:jURZe14v<fU "DkRfgX(?ctojWaR%YX7Q9 ŋ a0:]'9Q~=Kg1B[L7Q%Mӭ;<vz5)8}JYh!?N8_͛}O}`'tKϚsT|`1H1Kdh!E . 3f;?g\.i݆0f1+kGjrAoFպ;;qjHexY<+[$%I)MNmrWtt|UBZ1{lz"7Gȓa𪢫[k<k s ^FN:RUH[oMfxK#kU&\JݼgLD=n^(*P 9 j#;\x ;+p.f|?>d"@WiAs Cj CGfvp0Z"2|]T.}M7Nڼa/`tA;/G)X"SE(lq pS9eTb=a\cr+ “l %Lp0<4l:|RL:O QQHx<r"xbДqi{%|E+$6M(q\(y;j1R(ш@f/ ORÅR+Q] ma{, 'e㶗0vksȷ Ϭ4qrMYUgTS+vEڱ9g$EŎ`[zBBIH#$@( !zֿa^ì|=k3/#UC>!Eq!I[8[et1{ !pLNBq9}䢙AZĴh5گU)k{;P3*W-3tljv{+uEFaReuykI}A-Aeިq X "\Z7$ {]6zZr[p%i2/A6㐇'>GPx V7Bf%L  O܋/kB٢_䁋;r\^j :]zϒ`_HXI>Up$7jm!TQo4?C3~!K~j[OZdHqL28OQr|p-Ɔ htyHnC'F={9x+oǀsΧfjKrʣtT^-z*C7i?ة} 1owh}ToՋ~ְZaYfT/ߧbLIm=꾘:,d2@jLs[QTM~ܼP994 GLX(^* yׄ:Qe_*"V50+x՗뗺I!rbn׼Oy9]zQ\ثj*GqT*Vivߨg7Ǽ.cCMEMm ȴO:u{XM0wg})U -0iv: 5]m Cg4t46=-a-SXm-Mj^:m^7'ONyW 4~lQe)aUzq~|7 *їY׊?Sw?{9)F2#rreQEEVܬhL+JL >YmܬJ+>|hҕ869~]?UJ|lLOge. {Y鋨L7ueB!:"L?,(=s*,K1 Hc?prA-H_8f ->@._IL;B q822 nWp#-Z N]Rg4iÀUBh•CH-AQ-g}^ ]Y7,[&kM`t"]Dbñ2M)A9SԍH!@ X(I[$ ÿ@7bc+޹?}v/%Emi$LMS);kJMK̓k' ̸/ʞ,+)khYl^zH]Wrnh9`Xs6(.).Jļ~ .Wʙz5ePCL+|~k+_˟zrorP ]mY݌#X&ZF"7xEt H+m=CI 4ЎU@ 1p AJ3W 4a>,t$ "p"8ex5XD1&K3K6,^E $ADpZ4t-)ܱҞDq@gQ*jE+HZ "# L= 0*x: 0l0@*~w;8|<.܉sa܋],ϑWf#Ʉ-o jV|uzU%UʹiM;"U6j\-WjʫTO?6=hf?ڰ)ܳcԪɊɲT&ml3OE~o"p^Lz~I|<}U8eqfr=]?[pr7}tB_}re&' bl]xsL/UPesg΅%HKT6i^Zr2kn[lBc/w+M9Q`rUٶբҎ >uͳ~GK6z9͚XOE;8/9`іmc[7N*/PtZ^E/#Rm7'ȵҲCrw_RQaܣZ$3ggiͨp*id$dWiV^(S,_PV'U@(Y\$hlpX՚C}$ZWvFOOp+|G臦U(+èOL61~XEB.UH}D|:SvVDҵ,/Դ;gJ?_Qς:0_ 7v k@ S/gAt#J؂G80}"Qy GB@*A_ $pւy "ڐax[68BiOyvT_)*LP >jIm⒛h*.PvwצswH~$(*ZwfG0>j>F-y>]zI?= VrGF*/Wef,)ߡ͗8)Ӿ.p"t۲0NSPƤN^O})x2#D{06 MICI`2sAN՘÷ai,DrFX?l%ƌD$x݃`h 1H6Bae8$=)PM6WܾbtAQovxz-W(XċVV)!mZ+lraٸuGXFF6ކ េ_p0m0@-ȁ`'1WUMZ:MOHx~+x')t?za3~PNp8r7 K#V@< Tta=zGC#LoBEBUHOEIGv *Ba$w,0Pa}VN?cg^Hiy %PX~[I9)V#=[ p5§8Q=,PKnR-o3:Al1bEǑEt %R8FӃU /$}iέH;K~7} Nzb gdSӭ[Ѽ\(<|7?)/_L8^*x(mxf%9iƴ|DS7IjE>.-/Bʑ̦.,WX1)JbBO_>vl{wmӜff}͞.|LX՚q>6:3ÌX(cmv!s+c-ʟ\j}ɝыx}%ϥ1M}2I9/*U%LuݶZ+᧼+у69 }Jڙ?Y|~4Jw4[īb 4W}1=UAHIcfYGf* #tOUK6Jo[TݧdMqMa~MMV;6u,jK=6p[}Q/wm{ }HE;\Mq=`3,K-=oHyYiʑ*d8F_:rsù˷ +jkկ|R=)bk hɶ a|I_a(E"xJKPw]M⌜rBN,yTU[,_7T2CPNxn!%&=,}mDu^,>3?3.[~p +ؗ a܍/ù?Bs;< rq` 6xwA2H\o " NB,Uw8#Q!& B8H jD'8'k-(x ~muJOU`SRnIj=%Eki"WƆad9q4˱x~{ކu1nk݇;lC4E4;*X0KA`FPukA-r݇`z;&C!N܂X&Xţtl;C(@vM$ }1}#ҋx^v'>Aݖ.NZ#cKtr@-v{7Opƌ􄰙I@kymOrQÒOeR*ՠ`B^x&FTϚLb8Ӷɋks9>4XyYFmN_7<}mJ!=ޚ!/˾Yw /UyrKxK)-Us὇Cluk459G8 U[{3]zZ}=]Hnxo{P~ere{ε.i4-nߒp,egkO2luˍT]KOJvF-(O+]7_X5']l+*MPɟbjpedM婜%lrPVaw0dySdj=Z<(LLĂ#&ʉ}X˦-y#p,fQ< Kiͼ]l(T{K^%Ǚ8d1;+6z]H*8+%9q@.=GBA$V,}eQW = ecM7Hf90ƀ` >0?8yh!K ;!~4،8 o}*x QN}I󦿡3?qڲ}Y=;jd꿙Kd|E ޛ`RQhEͬ-cR]vC陼tr Eay;pB6-_~'+aЩ_l|%Y-jUR0j4lyݘps>+H3&ga,6󷺋-no*j7C+m5۝geWT1rj<`e)VSbUYyMkulul"\vollGu;l_" {:׷6Zl݉=mDzV`^kjF68ڪ8Um6cOJeU+uTT]؉"9q} b(*"CtwC݉ko~sϹyǫe&Jsti7iy ϫGf^O/P)_];Lo)R*K֏J/?՝U,m\>Y߳d}*ϩ=k"RQ~+hwIPa~ԧZOG_@a#,X;4%n;SA1KT,#D4$S8F&'q6)&n8)=Ffǯ >~*b|ݣ½wNnls]΁h QpGg SfA&tю`@S?xA#V!Wo@O\WptG.TKxd, 4E872mSPΖ/In4Zv#|FF p0OGN^9U6h眠J>bg(rb/}Qç}ħ* 1p}xt\Rka|Fo{,}͇J\:Opgė}6] :vte>)3~KMܳj_ԛVi+vjaWr%/Oh$/l\kjh=XZYGo9{slU.P*/UKL5ψz+gVU/jVvuOS6{5LUyU9W.T<۴V]k^+{|S\SV6x#r"9Q3{i WЉR~y|sv{IK9}yzu%jaSiYaZpeJnv6:>̾ۅsEpgo#1gܻ<>]!!C O:Orlݯ{"x94 &]J:qPLE!!Ŵwi N!k')=?1e2Ow|C7nIYy10x qʀҨk*ʷgNE;~xx̮X4nC húc8dCv N hnC|\S~Gχ!RbL<VOdc"x9t2FN!܄j<`WL$@}=~xdJwY:+4guv䁐 s{{_h\z*TڤIMz{]{WQ ܳX/w|K qIqۓGJӾ$Jĩ[cҘ_3 U9O*G..W *7噲tHݓ}&CՋ߻N)))-UZےeU[>FL\vucv[FT{9S5$eWF}R{R _ f7 k\p49%=Wȯ1i_BXUQ-ɕ4:':(0-CRk_s|Y3?bOyn >Y <7#`1#`nз=Nz,x"Z֐O@` A#ز,[eI"YlK5BPD|CzEJva| ny:SN` ;=3?)SN_'~5k 90mLl 슲rg_< o5@ojS"S4,Oᱸ~BrlF~yBk%Cu`+8G-U'&A%h%xCzk4Wg=1x}';nF|'! C :  Gd6% KP<y'9#B憐Pt LlG1NL2ug Nu_9>BO -ԋԉ_Vcq\wg6mx Zm$eL 4$XTf<ꄧ9R:^WwVA9•ԾV#edݚUPcyWBs*k7S\"&,LNЋOX!g6wO>Q/RY6V7 Ʌ"nKvF[ľKvN*%}:O(ߩze';HE,MV^η?7\MP$H$yKRdRR d*\Vfr}lR*WmGIJ%|]~6zC홦O[N :.vZwjlώ7LVlٛI0j\KTWh``ԛy.yiiwGdžߑ& dY`}FR2&'ȗH4];"!sH)jS؟ZhP5{I!Bs򧓙L4DNv&p1r0cR^T4Vqt+5/DZ[Yc\e&7w(c0pvOwȚ_]`{XJx:rǶ?N2]MұhF5,P(2kPXkxejx:$}"f5,aGAd.+ UTK3QS}}L泖*剜DpL˿-qp*vb6gе <> Q+)>G3 l2]};Cwy73B߰s1<.)a;Ww!\'cYgoS"L6dY>vjSOwkQYj&vqz:Z߮J/Vn,~q] ~L繞W+;Oc^fEGZ5? 'GO_Izޙ=-hNyg$Pzyx:1|eB_NrUWq꜑?UY|1Er:]=;"랢c~۹ʟe+~VUcTPp@6\zRyS5\-#B=K]dlG EDz|/_Qn*ӚhkN靪xwR_hMc2eUY7͊ga'eEENr~)3QaѣڢKŁa{#qӯ+^\+- /l|j|ⵘ#~Zϧk[73xbDQھ5._sL^"ߪzP¥Y֡>a[ͤ[ըƦ|Jy@mRgj7-3?tgw,!U[\'3ȍ(+k"Rֈjj" 3h١C ~;Ogȏg|HZ(JNQUڗ}3&(?OdE.N$>֯<(,d_,':H{Sz.\K. փ-.1Sӹ\#p/I& "2FZ5[.E m\2,oT g7{[=̍~3pr8_ӏ~'yZo/T;XӯzjjYԕeUZ3\3Q}AY.|LV2&wW*SSBg|y]i =/1)RIDWoCYrUpYI%bEh|`F@]ޫGH`m,Zgh-].U~YBMi_ڨa li_mU͖A_{NԜ5ӵZD\1==5ggG)Y{F~Ggݗ+NU$cSD/aNnVk֬lkIEKWʥJYwd~RR^[[6,~r_)"2,iN:<+ne Wၱ11 QQ'# Bm_X'9sFL Zi+a} ˅Z2FjYc#a: x bVRrj s`"D3q(Թf3~nssc03hS.dsqFkNU/YmfYe9ͺUX~ןD_# 1cÑ||rn%byI3YYe~v` rdru|&Ca 0+Ѐx^_^@*Ӡ~pA'}Au:: G:aj:dI#>.~>R}dvx},:x n$Dw86yY?pTp6jAw ]Z\Q #Ii- ^-w1)IropqGqg>6Gs߭d}Nog{֔]躕.sfV64۴ulYhܺٮUOZ ڛZ?zUrzeh)/"-KvI2뫗5uuc- z/UfTXUZ5T_RYĄkQis~@Zls6Ԗ5mZ߬Y`"b->rkBbeoڮDcij?fkE]zq\>~yoƢH6|@x?86,52[ڔ6U5M##USφ Y4*3%qTV JDώdϬV9ZNVUW.P&+"͕~LNL0/ | b{Nu(Zg2؁fFG~`/G+uAvc@NSbx֢?i%sVy>0JdqFB[]R|a: .;%gP&&_qB8*!sUpnיLj7[m*2e\!EՊe_ A'ĵ#/qR>3nB,A(Ld^`O!"73rQPd,X58l '6s &$e?n!̇P!0~g"3L[`ƌA?$T@_)X$ⅯOb(~|^dr0u& ;A :$)'rc^ÎN9r!"pt(cStB٤ G7W*o#ܜ{o":gp@=4(G9\l Pk-=.sl&Y=rqxT^6oͽUP+E;>yJus[jVZe7˵ib"^Krhnz& N9߸o~&Pm`\7UM7 xjyrAeG9B_dдK toe߱.-Uk=I74ǫf HjG$}/w-T+4.mmiRU#u~u+8|pw94Vv',Nz:X"O)QiU|#NJPWs3[RMLHa-H-Rwz]že̮-JD("NnsoħPkX6  Ơ1<50uMp6p cwO iFuDh:=^0hћi*ϸxɭ5L8< T Vww)1FU}F>fȵMpxY;6QӫO|>4%T`XpCZb Y|%*2V"U6t~Y;?h}=]Sij:s: K_E {s9}{O]xNXޙ#ޒPIʺ5yO2e~Wyv%nrWsu5VwTVoQݒ:MLiH9 jߑ;)Qg{[Bu#s\m3zۍ4 Q.#meڛNJ;2Ӣ8:GZ^, / -VYRkuFqBI|J_ϒSD)"jdW$W})QϪ2׆\]v͉)^ń?_ LMcł ǢeY3<YZR|%\:SYֺܟ7͏3UL. ϵ6luɯe- TqDIҀ|2'S&sCiAc*N%^PPn8U-5H60bc\|=qUIC Xi}Zy;m[-ɇû!IGrrߦøee'<$%-I8hR̄h١]+#j,^ mpWp:h?:u|GFdIĝGv Feq{qUh,Pށ{vdNP5v= 9L2g q!kp/fQG"e4[a1@%3unL"(zgW~?ja.>A/T9ws#w%-nN%Nrk-}F>P3Y?.=tA`_M`o3lFVH/|g vAQ ;=G%o4?%Ȟt$S 긏؀s?H:IDtyf^E̡-“_=\|?=]2.qx!KpI>%t>ƽ1!]mA)|8 OʺK6)/ڢ˔.W843U,yAԀnac2g$\l>%W趠!WB^vvmqПyKn!Dʉ9-'!t L&\;N[I9&m#kz> PL$Č6xaoqkria&مَ3E Lj쀮 h b&; c61m۰(p&a*0ٝL=k)Vīq1͎B;JMA;I)_r?,/;~Vj).w~ H`)0#W.H`ia- FQ4 + *䎬yh8V̅؁@Yr ڎt&>#:GqVb ړ\%_:G>8f*'B,PZBNB>C03DE,iHᗂvb%L# MW.DWR2@ LAKucv>\Huqh헼OM:tpA"嶫[w{ }$-i"iU埋DayK3z%.V78/"1oM׌LwL3LMiFp0qJwLU׻nC78Srs!tedK<ķ&XJ7DXRU9J.|œnjj4UCn̰ɧ0XpF{|iD& UT(Lڜ9ӽ4C}2f-Nګg5JV/Mzuuj_h) U2hTFEBėbygYSlcdž 4Y 5ǥyxHqVKx<iD& qtQji5q}=;1VqǨ7~.PW cӌڙf{E :٢Vqhc $G!dChB#SXAoHeN`\/hl̒x"(f8U:]EDı~zfh.̄mO~pT"]ß*2m8HKgHùwx]#SB:< ~WHG@C;ӕa^ ơQ)A\o-hCwf>RHѫ-I."$ou7@WP\ G Ol F=$'f@74O&>w1sh l=_#I:sy"E!Ad{2:8f\ BZN'Y>c.(Gb̄@#W]\ݭMutR4Q˜>T{vydFG]9d jѨB}MWبaOl#={)%%wdnTǸva3'/^>F:[2{ &RKI"&8نrp?qF'8X:|n:#c' LzGhx#)^IFJ>-r>͒au|d$ 9،*tޕ{ϛx# r|i2Zl8TȻp|Ip46DU!F6@a>FVH/Db fAGvaW\D 4.rR-YNq@_;R7 HwnJć ڠA~xJ\H/wb/4Gx] 48H~JBt2WFkۘR\yQ mWz|^ տs=? RdrMTi O<Bx߄֙k H=Uy,o7~0`"ݩJh:XX b O%`1AY& `gDM K xفc;z;^g\aȆ{l( bh}ٗ jc&zԂ.P?: ! 44̓mЍ좉R *Q`[H/!'rJΞJIMsEBOԒ5\*E3FSE8!UesNKF,„BNFc))`OTŇQ 7 TgA|IOx.S@O +y҆ Xq;*)5A{5σf+jMCfe_Dp#ɧ44WS:j/iA$;u$/3 'H{@ڝn !}hUh~N%JVG ̍L;{E9Η%;?p^>/(6M)הN,S4M=7}vr62򑕯j$եoJҏjXߘ o|4]0ZV^}vAmnՒeϴqc-T_k{hΖX4)y{U%h^낿[ҍuۿl:k>rm=hF و9Mqu{ CF,)WXYQ18D5+L+LquåF{-o MttӋstkAS͌ʓ*ݫ**J܊{+gO}wTmP+C,Oߓ<,)(rU~4Y^L9]˓3Lkc ƥG|LyLXڵvvZe'DSX__XSGՊ:m ,ah} ۣTgNn9|ƩQE1ڤ"}m{ yx|UL!:$} }*?KaGY\oڇ!3@w;8$Vhȍӑ+XKc g rq\bzv9 ӄ@BBwa#0=IS%e; #멚$}bPxng;ŏc"1"SkG170X zt @1!:`t 8Chn<""!# `F}x4 T!;ړP ^>z^;$,.؄-,Λ<*L[$67m38MM-9DoUڏ!qI<8Guݦ$&>ךXz=vዅp@ܻ~:bcMR=jS1eHM[ZӣvzݖmWN0cq99Nk[9纶#l]C¼ܵ\9ͦmoVZVX%ES FiQLzOqdJK8+B뚼*Qf?.-*]uv_mE6cѨ% }]Ku[}L(MəN~Nҽ)zJ-;%7<-_VuY->1Yg0K&mn~bdPcV+:ʇ ?+;uecwoL( M XwTdݦK5@ ɚs$B)+Z?'H:c/tȎF@PFG8q:q9Q枰9NP.DΞ R0سLOgľ7`-!3UB!zNuHh'! Gm22X h-NJtDh2gM`J ۈ &w񄋡y"8 EG#m2<_jn..t,gY 4ƖXM\dwÉעXڠBHTbHq;hwOmQ8䛁7 ɑj솫q#-'  35:IWQXFx4^K#ZeIh.L qj":ks7Wprz,q>$/E4Lc󧭈ާ,?=d_廹ڠQމQDe =QǛ5{4i]xsۚ|Qc:'[*M=MƗB39_678 ƋMՇWQWǔ WM) wIʊ2-jZKeEkэm8so4V=͸+*7>Jp3|ly`J6xۨs>mQ!#6=Cu r.I F޻~rpS؏IU{t 1'RY ?{^ w)E)NԾ|n^Q%dJ.D'%Gtv|ҲԼ%ڱAycaJh`snZb zg}qDcHӰTlhD&`ٔt.|]ѧl #ԤiٮH~ejx5\;nz\uQ>A~}ׇT3Z̔vYoe\阛Vn UK|kgdK1zvU͜B/Y[ˆ*TVTcȃgF?I }R4$o!y WjX[5hBXτ)6SN>p-<,gA<=3ܷWHzȳ<=u;cC-h  EXT4,xC8C ݸpXuFCǰlƫ ]PE ܤ\<: p)[[ u;H枀L@ W4G!);B l^ N޼]|h YGīxW pmЛid.:k>cŌ._Lҿ.r:{x2ğoa( ZΧអ.W@jf҉?lQ)wah ,hfHὤ/'7c ΰ@AX9 16.Dž:&up?}9{iHBzDZ L 'umM `.!+-ɬ7̑}.[rY޶cϷ. J`oo]ܪ]/uv˵;tM *.mGr^M޹qH#4n10N54B7F7/_8vwz.ix|llhXTߩ!!En<+lk"T5yΑߟzo]y֜neURai,)/2I9pO2S+ fM!1sjA&uM]5_4sʢbShݐhʸlbuńߔ;H}?6!,0{*̟ѦUуC'N\vH8slxe'b:<}\{]/ wma>x3I`krGP䈈9,q K?d"v_m됅CG[`{`%\?em?qdy(TCJǁ8}}fxޖ$E~Zn iD*ćxl&9Ƨ;<ѫSɩ^)N':V?PZ]fPøA -=KպʳӪ"TϩXRv+oE\YzHeԧյ+,Hڐ+z_Ԉy) & mer}܌Iʤ3yF+desMBTҌqZlü.CA~Q#3|rM9{oC'H9{C&Gގ2Vw U,BcFƾ-MΚdzq)ѴѼTaGMS}M-W]F]fNEaf8ߤ4;{mkP7C^wR^d^Nzb1 d%gv;˥cy9qL~|u>jjO\+*Cq%6iF%H&W\hPЍ3tOB Erku_Uߪ^]%?%1am̕P넷kr'VUV/ X_W7L{Yi/K7{T٥oL2'7{J%Z- ߝE~XKpG c?(\&{vI16h?硫5<"[HtkA a\6i17gnJU0&((b@G3oH(Rp+\@!t<@3TJkLNƽi"!& troo@z<Φ\'h5tN@/pHԛȖ+jD"=$^ B&FWr(Δ"jdNE`@ױ3 {?2JAwlBė%-( &"*P8ceCe}de-|/:[igcYwAvGiȈws)zSQ~ZEg1u\Uh>ah+iYeY6bQ,{DڢyLM?P~:1WpPEdŔi9sRVR-ɪ+؛ n8JZ5ۥf>Ox9;"#&)ץx~V``.XteKgY@`OH:h+I֟JiNmi;0P$̏ &5qFgr;`4F4\$h lg&݁w2*b5Ā WVl1d oK iO 1}1)Y{;;||U원Fbn7e_Zv̂h@_&4@$;S\>҃XNs:#'9t:>g_mW4jq-f2[wd:myVpY&p̞ߊx9Q`Sp*p7z= WHM\C 6t>Qޙu"& QTI( a>ㆡ2ڟn'βnN!,;)ϘHgDK/6vHx x3TV[W3bc%ϢH܂q :''6y#z.Kwb3a?u(_A+ qްPLyp9I .4 93A=ČHlp'2g%g,^zfM݅zMա7t 3=S8cq#Bɰ^BGJ5N>d#Q0'&Jm3@6s@b҄Gt $R.TNԕlB\ѵ~Za5Y۸Fg%!m -FZ:+G\jw|9;g7 ZVZ qnY.~vV틺t#Tw껵'͑MV߲Qɲ-$%?T/9)+yU'^_a~o~e9t4hZ4di,S5S!cR$r2ӯ[TZ_R}O.ܐfz{jܪfW|-K.h槨5(P'D&{ٟH<,PW4̎2yNE݂vp$I+jPЃ{v`ďG&uqzt`'?_*fĻ] ,VHfTba}nr0]7$J75t6dvl|t)bY?5zUh-i0I wyD)$gfB%L`v^&gDBH`VoLbWYl0SH*&z,ME]p1涐Ju"T$_H^hPڊu+fE$C%6)(+k8GQ+p<Hv%.#npX&A&c M ; c`3é,ޅ ZAp5~#H* 3|VdeKƶ\7ԓL8Fh2AW>Ƌ[Ŏڌb' Ol0Iz,_aR:NHdmBg ٲBۺ{]gO*N?ppr`pKvMwB @w%.m7Fp9?%!MmJMuy씼DNLp1!K?H`X_KAl16ZŦMcJ\(aQR|*on6Z\"Xkd|1bKUkJΐ_4YZ}iݚryi~cSeQ29(=*5zSsE9nPEKmedCPoh}Z++7<*();TZ~=*Mۨ!r.5ew0iSWJSؔ[AɻO6ҋz4?³، a_sOr.3@ęK<#s,Apg 2` GWe_@6#;rbw, p'7l2^BrVvgo\_*ZJC۬"e=WD^&>W>!?s 3=ai:;k{μ>re8sAo xҎ_a@ph xyHn"B`L_\C Rn[M!˶qn\,zp^HƓ2-XG/v%n⻰lX& xkڇ ec$<p! v"G \/tpw"Ѩp%a; oI3Y@%| A8XShWa{joj*pAO&>|?41'ggX yquGE8D}_w(Z8_-u5+kׄ쫻QWWko+HqmMM]fј#V$){*TuiZۊƜЂJ"RE}H^94\6ìꜤZ"ӲRf%?N=is)dIN k\ (*VEҼ{х15]+&YT ;\nPd1qXgo/Xdv97MosQ=#1xrj`P柭N5DG֦ ov/<;x[/.};psb ߍ\\n( 7%n*cXG<f"{DqWoFQfoR>Z7v;7`="xjLFdF÷o21c,6t ͹%)f\O]FNR馏k^_)M˼sO3(O/6\}NV[h7=+A/Hvr'rJGZȺd `*3%ЊN[Hΐn"'Bv$g(De4VA,{TZu%Goj`Gp*F;2C,y챐Ϋ0M0v p혐^Rʱ$ '%c޴S;ˆ aQf+epMJr1D2I&dq 4I+2v| mp.+ҙ6,1%Y%dz~ǞH/R޲q־r}j|N b+ NX .:9.qyr^:) +oh,L)w=][@վWԻת>*Ԯ(T]Y0Vt/njĈ߈^c˵6a+'}H(}Md2:YP;CXH rhk:қ| WߡAbБm5DA YSgRKNU ޴6D!Ns-TE)HY+vG# q0O ʄ  ?a7BJU.`i{-v#F=I0]70mGEKP,\+h 4p E4djO*F>Ʈ#;\&%t:P_' Bb6d@)@0 q/DBap\Z%Ǯ@ 2Z2dR^IY5ݐC6}/w6Ap5poCt6-RDd)gU":`swc$] 9!d%y:l9H&F@5$lGh'0W6N7aпJ\`ŧx+geM~{V<}7s1)6~ܖ}w7w.K^Q-9\{8'N* XۥUk&k~j=^S:c-vvX5nވ[K)}VTuSC2B"ssJ^Wnr*ZݦmW`b/ #k ]+M >J(0*,㙱\+\=?3{bZ11q)w+l_`|TW}a\sN]_=4kawJ\[QYKC+MY졹Dw$IrI%Fw»LKrr˜tRެ`!&)%|ߕBԱ xP. -{FIPVʲs'yAN~Ibb`*.;0WQ#+ ]-|, lv$fD+>^IkwUtT>KF{!nҕ퐊.AWh>ђJNoQ3t2r:d RZ:RB֠p%o)ijp;b7c^b#>Kg*;ov[aTŭ ^U 9Zm60K:CXxĖfx֑p6$NC1fx2FХ"l*B:C n|9s}܄a5RCNÝ |"&d-dwZڑc ~vqag2ZrʩҺ~'6=T1ѭk÷egVmP8>q~虿_.i''> zUyccەW5ԇޫbIPk>;ÿ Ot+56-nt2~1FZ:FtS)oI?Յ˃O,jUUԯSm)Pljj]xƣ~~ɞ#v'N|P PQWZSU718*)%k6S̚Ԅᓒ_֫rK7FOL0kIPfƔU~)?$aoa _ƞqʣuϗ.0"eVsJAz ''9Vc`$h ^I*?XHDziHLjUzBpb"[G h9xDZZdJh2 l] _cz t/]2p!P8#։;/H.& @#8G^S|$RC߿%@|%qg 'MR+%p& ph%:)'J#1k&}Y=k?1ul& /vHks-./޶a]ێ\o}O#:|5|߈D~<Ak'ZgHS3Sb_[!Z~V+[&U%k CU { vO?-;SƼxE Tv\S^.@;ae֥~BmvsjǸn*mS5jږo-gGEO.S]UN2_}\!,Dc(0Ժוw OtMۖd9gM!Eʨ4闶-f"3$N 8>iNd]#9t9?3G>;Jp,:o@ *Q_Yzv7RfFQS6hL^.sAN4@&ģh!'{,WOewI9Î,6 W? y")2B7a0Ny["RxqRYV1Rd_9| NdG]:hHq-RqDtq#t y@%ͩ͒L\Hzc&Y7N.{f)P7=`OnC8L^h$ (mMMP"%+dĔinިOī 8(3wLޜu~d@ &gY[?ՇA(o/I01pྤܦy:'h60\Jl(@RE:IZޱxSY,n3 O×[:ԶlO_YlHuƐIq >؆D +*)fûvrKRZOSBYXT@}hg톟rVnvަKej~lԼTwh**)SOx&mw)]B[1ꎪvST+떕Me1yoԋfGO]npcuK-,Uqֺ*ų⠒=r6dm[4H׵g[zenIO-K3 L;Xs%lDEIi4"sC}uzh١N9v/ǖ{ݣ6t%d#vB|yH z,qeĹ;C)3;4$+?NuXavZ;Y>l';Ԅݧ݄v+_/bA*yFJ8p O>D'FDޒ$ǣwb p& eFG)6h4C?_H|W%{uv8*6l~iYnZ0\3rTDPGZdqCkd??܅X e6H\wk'(Cg l4}b爀w/JDCOY̤>A }ǿ |Ǫ$7IG%Nt)d$1~2ziXrn8=BL'\!:!n Jp{7,If(P=ߍ`XX@,OCaV-[edӼuޯǼ"|8.uש &O H}.{IG! |X}sĮ=dRU~>oYmMFcYsZˆz]&X[뛖5ԞjcJ́rʡeeśJ+:㒳&qJK뗦u}j:jYIyFTM@qNӧuK>>"uOnϼwO)SSLnZ;_Oh9mvytEip{gGL1[=ꏴ(Z,9D ,Ά 8Tݨ@/8T|.|ҩD"8t# (NƱ'xK0!s [X_LnJMBcb%_ĺ &f3ﰪHKp1+'y|WK"(1t%ΐ+R 㪩Fbkˎy0H GiEc9.G Id-İR"3P=R.!>x{;؆%^1RJ`P8Gsp i; .\J(7tA-R;sYzaLHIྡྷLF2SYE-]FK|XͥtLʺboډϦ0]&@JH&6%:6݀~dcJMK+F-MSq! 6m,{zm:ˍgXoȒ>uNYϤ79^iNQ'zp^|ԯyiF%ix1PХa J5V:FE;CL]SPZݤWwU܊% W?[onԝSf*ӳ ѾWNF2NU'_J>7oxW\U*z6}0lh5sS#+T͊9*]uoUϐDň+氂YEDTD9d$!3 Aĸfs]^a.zuG]^rgy Y7 tэAWޞ{C##&NOwcdji3bxgAoHk:Ԑ]}'&\7elP i-l{MOC}uܟhR O`) 0SYH7}=s8Sh.8PTZ1ճ|(c_2S]gmt4g#i0|Xa%JJ#8]X BF en;rM d* XP}S]C͢H}sqYj|D; SBjs*ra𜲄ϹU8k7-1!Ěeh#l? p R7z 0dU7x oc0Ĵx-8A">ׁ?ɤc3/= {`4bxOgl_]fv˟ Zw%,GYXoŇ/LsbڢO;'>8d]kR{N'zlD2ñ$ؠA`w+gyĄ%ZK-v/,>[VQoqh|뒠QJ;wphŔI~n~׽{{Gn6R jD< SWeQ/Ofz詗dB ~A,#=,1p6/{;OLzl_h;C[,W(CN} 1pSO^fߕ(ټ Jb5KͿm,`X="1 $ԣU!/jm/V ҏWi+ 9Kג&zX*Glbָ;axRDo1]>X NB*##'$쇖3 t$ 2c$^%9F֐"b$ 95մ?W"0쑦H܊Er# l֋/:cw` m1'X%ܢubȇ؃oqoc[dEB5+fy!<1 (q=b^|#o`'xLQTSՌwd#Ğ,w`v&[;-:z\˕Um4hz^If ٸwm-}ߎy3kpά>ӟgE*Zq7s%2R|HL3~9鹙J6ҤpI}#CJ sj68te]E:]yRѽ)&W[K568q_PH)C^~:'?>G㍺~_|: c[ݻnRΉ)_ Q9'um59"θu̐괷謝'?Wvrݩ [;pu:xw2ݤ:!KPރZxD?~ï$x6AʁX+0:hŤ :Z/F^)A¶u԰|ot\E;ʖrRL_c+4ӓ$rA'o1_˕ߪ|z ;ʪ0t8ܕa03wa;šiHsRKѰ[a=a8?WG(>ڲ?0hvc3T  *(%9FT2inc A 8GBK}94Ad:&i2ay nrW2}+5Z

&6ѤTz(T<-A5Cj Awн/P< v7,_FƱ&( kl! Y=Pn1,nPCEd`[hXM!a%=,+Z#H1ڳl^̫sfL-uc7~BcixxS4{By$W)sppÜY.ulu Άfk\s\ϸisf) -*S43eN;z'MDkKiV}?)[SٲreiC^S򌤻)!%/lkuOfI-{xRGBKi2D W\,+zWELː"O y}ctA]ZcE}{7zjLˉ fcHC7V̏Eo.RYA&^ikڲʢ"Bedqis?/b.NTE G(rw6|+\.K!<S )ncoBz:6p+ە ۉZ̥[l98gtzHd-yלgg5f܊JrWam5G|&^R+d'H3Ia$Wr:'VC %r$h$ߔɾ>6(90˞ S EC)q/gl9%lfrl]‰x.QOY"A+/0WTTފ;6?>Z$<Ƴ]V0kZQTTQ68m]*Qj# Yޜi@XjnpnIO8_vn|hgtjyR#ss.ڟXfNU9R;qƀDM ʼJue`9/YP,k6gK 9S4pZؒZw}]j^ߤJVRBbyOwrߌ9\.X8"gTCC;ykx_3_GunŭE|wM}UUybbF$EO yڃvlyqUނ3 fK)W@\+= c?4`-[x)JmR$WU/BELn 2DZZBk!fB: Bcjeôv7(ӶmޡXRr?LҧR9aZA hGjE%arLudy ҂e1쵀,ΒTHh,tbe!-$\&.F=ϥu$,\5M@VP]D#g%VM7?V$MZݤ=yDCKc<(AQOzN&֔zBm&d Cix/Np"5ӅQmð-}Bq'N˥7ҙia1ddH!38u_6`TCVy{> ō`F!/I=h3IAN+y͞Zҹ͒[̍fm֚ccF}8ɢxAx}g4˪~QݻڲGᔜIo򗗽.M)]\Kߒ)/ӦOu._TkVMP=0`Fi^Ƣܷn/[XTCE]z Sѯ@%YIh|Ae𫀸aOO5i_ކ]ib3Űx{^x߸=˯ Vq((mld̂3Y_9зEW"F =]$C8Ѿ&S{4p ~tX /qMױ fWn%r^rʱ, PVX[ 2 Whnv('c Ŭ[p={Z@4MVykqY.e49kbj:(xiNJesJ7T􉵫u*^V\WY]Y3j~JITTANўK#e]N6GNLLALS\h~4èӡsn=_߮[I!1SNb{Sa)#O]v3;uaBFm̛aֱ)]g6)+ uKP3kaD;)Sdbn( YIm}nuO8u'ą=\|upfC3k{HD+ F 9I?Vr[<ȝeX患>=!uBo%ˆ<agCWI LZ2#}R9Xjk$d?: E׽'E@1.teSp-bziBtX; :^84f_ӳ4^ "]vcGKh+[7ű45|'Clɏ,abK;)t,[v&is)%]-0G(R1/C ܏pv؞7ďc ɏ3+4:`u]}?^w?5{g>n7/;\y"Yz~Ra5E n֭ՇUtdmϐRg[O6 zd=Gq<>+=|eV% >'?=0u&vyӮ:AqR&.qJuꪌ:W:в,:|Ax9Y^qK#;$}O[#Wq3KȲ8My.>?L=#%u1*sZ9jC[Ɂ" zh׌us&0:QVk|]"5t"?MH})OwXYƱ*ꮽ̩3 M**bWl(Vz-!@`[Q^U]\]7\sfy965H@p$ҢM̄Z: Zup.~Z@6L'0O&q-]E+B[U=$ꇎ-X,|iy8wL)Bff@&0i棯\+Ș,HIf\姥=`T6y:xy#*Ns]}k 9PĈʗ8eirjWub$qWxKõCZ{LrL_>}OV\nzW]QoZoS9:IKOΩI2./bEx_7Ǽ\~nC1jxth걪Cǂ6k߿&hndJzo.~BxBx[@_[UZJ*:/:AOD7k+qy %vl"{@IRa=ԗ:Y>Gd .&;D+{o`K9 YKӿS2,HD]p*_CEOn4X/ OaAC~PTCFKYcZ PyETx,#~bz&X\WzUH ߠX ' @Y +VF#П7ÌVL )}׊`bcdxFm, ȃ`jBA L|Hz Th: sQoyZtGQ%_!_-/Λ1fr,Z ,-w3qd&}>A7>𵿕WlCw1@ gͺ ƅp$8<;-bE4iAϰI΂^XCXH :G? T|$V!aMfq}طd`FAnG;&K#m4Aq,h&U$3Oy!h'a1jn0\n:_aG4?v)PN*IśޒV[)-^-N)%Il%TąBԮb;i^E™~a~|7 m%*C#Q8l{;b~kS5[{x-Ȇ<=f]OԊh9J_KE %r WّW\< ] HܞWfWiex-H>ZZ=ٴtҡ]ueXӤh4ohP6O1P%uls 6{eb18$}syniyEM/RNSte)K&![ ;BOFR=PCC3CJl Mu#̕ [Lo]תu3*2+>8)=gle^pS^ݘ_S&MyONOK.5QvB:O^]2ϛ_l&(8Zh5ϧj8#mz>4IjH߳H=|&jv1͞`o 1 ACn|O2h_x>H@Q$Cq*/$ivWnnAG&awJNŨ~U&f| R&rHYBsI%h4QWR4\#unÌa'hghЁ_Rs"P=4fGf4xYa6`1c`Hq ΨrĂQ)CP8J øFg=欸t3fVb{<_k9'6l7 \v>aۼsg ~M<UE:\ixxxWX2oLpE -}Պogɏ/ *>* EКɆBv3IE3xE]"썟,Я)kbBo}NN6K9>ݵC턬K9(n/#yK eSo =ûöExE,qV1;1Rr+߽摿]XQrnl~BI 箜Z:3Md`()VmS^| >+Ub CFߗn:UܿۗhYQ5 @~u80ؚ|?BH-OwpjT/mv&x:O4VOpZq H6`G4x0ށI wΧ9E.)$N C=;6Ua-':T Wաd;\ҍ>t-Ut'w]C-pxV10Sd<aa&)/sU6=^Fj#v8@| wN].FxG8A,|(J8G޴z_U}괍n- mN+;ZLScpۀ&m͈?.[J>do>'%K.L5_hk;ljm$ }>] i5kzlԴVUݩmm mlmQ)瀶&}rV~*ˬ[t5lKgٮi/CERUyk2*}g&$U~xԂŕ776ܯU-]QY{[4ߏ{١90*5azP\aLW+KZvc׎寙-n;;!~ 玆8^Qb3;_hQ}l{BF>+WTS%G<y4~FuGW))w K9*1W6BGH67W"n;.r'I~E { -=UrcE6/t|\ b *ZOqc+ӡd ?H&Uާh#%2ZHi?.oП% F qO$B#i!x+~.ؙb}T43Dz5xųU.\KHr]1uϦhaO |o/rl+σ 4^>B)L<@B>`@Y ƃI"8h~@vtexrX-!؅DM@șZ,?%ʤ%;EOD],k yŭ= J"p[Dė$_%e![GyA^-M潹X(KoH% + Bv>^<6$nS (D`>[8+PPdPjR,#>Jyǖem[_ ,٣ {q#Pĸ }Kʼܼԫдp-NWk*7ߨ0ZOl,_m`w-9S2r33(ߔSRPs;NÚ-a%2<֒&-1clږu*5kw. OC+d謃[n s4׷jMNxu;p0ۡ!eE[w-tM~dUw`½5S| O 3ghY cpyh ehAi%v<Cp2\)[4=?0f|7X6p&|@!-`$192+E'=ؗϚiP˭5 GfxRY8'QCo#P,*K>VU;;.[?€SzTg2vmJxxvSLXeNvmzҚcrKL^@Cu?j3յon`]?>y갤HeNEZP>v`"_1.-O!#OWOt2w*h8YcU^Q3ӄ3&WmʟT&6T~&M|q}_]^waI݀<2ÒZ:}fTau8Lºx7JwmQ 13~TKR]ByED삻cm\P̟Q%Gm~rpwd.hrhaCsNokT9t84ٿcJ&Q1t#F9TN$=Љk+Xwgt JBit%:D'(/1As%*l@64`Kq&bLp/k?Eez#\>G~pYF3B iH#GR]ȏSzz+dU {Zc\UHtTO~`SHjxDZp1#; s/x1P߀=p n $8Z.`5LA8|`c#<'qZEpZF{_hGE~f#KI;CSƯ5Pvη(`X( 6:Ҍhھξ'<sQP2mc]Z;y{E" j =dy, pPk4Px!${*{m}M÷qzN#ݒ͔O>u 7ـq ɦt*Iy2E$̵`iMf#l/Ƕ֝9r%2%F?7kll\=>fȈ!la_ZEXۈqIi3[믧=-tJ/9NRwQbY}GM*ziFӬ]Rk_|s2Ӳ*x,cMY R.ꬒ`lxʼn5O{+zWsѯ<ג9Cφ _L}=a+>GTkVF=^yt ] YjϷʮϟztͼ}6]-Xsvv3 3vg}ef] [*o?]*V "BV>$I;Z:MÑ#{\6BX7aF cJgšXG|D"lM0r P'9,HRM-Yx !w̝5s L&; Ťh.n4:E&'^U,Td 6C+x[<%ㄩLGїĄ"|\z'I+~s;15Y:HbPqo d&KdL@oҎe%o$WS`(jxmA<o@&i?x:5 "| w.pA p@e]^u;ʓ{|W n*yW~xi`oDEx_[ĉAq{R0KVydKN% jz'Hg:$^v{TO 2S<0OZqL>^ǒ'N_?TWkNf:-ږ{+GRѢ&E nv9YsB;Df #Wy I0+eLO"$}LYq6fִ%J5ejʀԳY(gꧥfZ%{0F\LOf'Cn]^`/XE:%D$hHSOF=/l)5ɥ F=j?+rfB vJPH;,O%ͰhcfWe'uRz؄U'TQ$aXV Ϊ=.o{ĝFg|@QF ':t /-!䧤JԎ̛<4D@s0&34J'$6ڱ+GxGSK!OG#ChώS NaQ-ٌW<w C|a18 -!sX:-x!@8!9|Gr$wF E/I[ n%Ӌ,C3oF]xWN1̞kfK 78 P=kE{'e:@Z4g-u@\@ F@͹y[:Ȃ>R׹ `(K5E/# _?|%o;) [?o^N+=0rv |ԓxp(\O,uN t8suѪ7n}]K:;:i^Wk8iFŶJ|k\o7.dUUG׆33d JQ&'o]eV,8S$^oGbdl!nr4J}Yr5zR}V:֔{Jݜ3%#4)*E36+rjһ )x[V ?V8(|[d̿vK35Z_ѽ~1iڄ?.,4bҝ)$h2v-U,f8ޟJ5Bg=&r+8okT6@e1))?NJHYR.D/$EJd#WBlQ脗;ɖ z0eўYU ғ,}=ă \4ñx1I>D:$[VE7 wi:IW F|}WD~S(+uTϒrG x* /PÂ} l& A@1l0B“0-Y.x?|:x))v1{`etp^mE0v]HK+pkɥ+qJCĉv#]~# @+u\!?ʚ/ ` `=ly-xq+o/[$(P* ?§4GEp`&5bxG X)˰ F:uR*Nn! x>%1ŤlMfi$vRnWq4Apw]v}n=Pɑ!Es֤>lq$"~q"sErm5jzu{fS~̡Բx[zK Nx+jVEo2?ewy!,|Sɪэ5AEN $0M2F_Iy=6V.+uK^c)$M[L7 UU}3fS_ (U- [1A{*jfm})=fg23٘տo)WouelG#]Xq8v+N@=q_bFw>r}U`tͳ}g̚kjw̅Q?zгXݷvL &;4F}2j}Ɛ\^w&>E}v1!(,kṾ3lҊ).gǮK,9E'WE&/,R|4{%4]dZ_\RRUֹdocV݈N7csMJiH: !#aW{/4i=Dh,D08BmyN%CS.>Գ3OՍ-]QSsjÌN3Xƻ=‚"%s?.JI9۞!4wDut܊"hxޮu1"jd&nM8[QŲE%٥cӌMͲ4sheeU3YIϗdh"αqD3Is.$Z&NlJ뭻3#߄M))G8c{Z"WG*}cI<&Dq dOiI_rMJcؗ5(4)[+TmWlnL5T9_X8EK)8! 0 :bZskRE)% O F4I% 9|p,\.-DDR&5OWo*ԑvSo<<(`=q .,Px*B%/\a@!\I<uBozҧU&PL^RG""D'BWW8Dʞy{14ld/xM'֩2uOyߞɿX?%.{"?{#3Bb+o߂S@n8^e }9649x'%=7$x%1 L )hnދ_W>w =h2}%4ϑ+| gM"*2APu#}[kˁsR ACȸ2v9Kkgag:&OM.QRkuB-WxTI1:c5_MeUk&sk67𹮵hnOط/ջcG'[(/%aG˔@>u`' 8r3$W :,_a_ץ*.f h^q<¢mPibUw'U\ńE%Y˒&$'S&SL)-KUIA\IlYtDqj< =64D4i-4tf`~g vi=.H``MYQo2-"i-M6 2*ΖcW-4Xemca{Siث YĀwa$O`;Cѫy@Jҁ).W"WR  j;^O ͤH L)h Ő;@\\|Y^Il'ucߐ#X)J{BC|*yGX }&Q䍶lAx;j>iG9$ 7 jR ^r)fX-?/(PqBױ_,ւ5`=CtDEˆ?ǹN\wOiyZ7sޜ%]>M?k> ~$AOx0/C7) QQm*dpùֳ=u`,~$O> |A5p ?I,?j n4AKN &%؋NFdXvs*k'Dzan)Owl>{r%Y4,j?L{t{܊ ˱L_ywũfުO?[v z,[_bz\vTz`"ţ3Iw;97Vՙ5MM:,~rڌy3c+#̆14CchUXT|lW0*YcVE㚊]\NJŕ &#Kne}H{chѺlS ײ29L_5a)4Fly8Ek~<*8%dyc!O=gaal2U c!vlĂStSWT"F/nƞ^֩TO L D=\`Onž# O܏8/8#bw ,D!*}$:K4,~I EQFx2iBJH}׎,Bkh): #3|@/v<%:[nZ@]0q}0%-w؆tVh<EwB֬+]F,`GW:pwcI{Lp[i!ǐp'pĺ?'N#}X;p׹H9OeY[dZOh vHn0I0 mAFi'ߍȭ#X@o0_{4#0u^0?GʈUBZ>FFky QHH'!ԍKjK%?6A-Tmf[5vϫ]v3 T90!1vfBRoگ9tEes偲`ȉGjXEᓪ _lyzMKJWͥgfWLXzidױQ>5UthnO67\]Y0?vp62m¬dMiUsJDӴv(|zb"N{Tx4øftњ&'X&xUŲv+W0Q[_=|^黂AL˻iG꿆ڜY)Wc"~G|Ί3$^رQb"MΨ?0a/Q.?lOIM:i E׼L4ꔅ턙mj~wv_;өEJKPF2v$߈V\x I#tJ{͗zXMޒq F2^ķN7m6\؊$mI4(h:̡cPG4:'@/KԂGЏtaHv [GplM|NtMpy|~ n:dڢUS\75Yvnczۆ8m~E'o*w|o~2ݾ@ǎ{M͕M]x]2kJ}˙w U07kmƻ/ Y 8׸ iYeVcmZktԞ}PS'66UV:w\5l~*V5PYR}R}*s*:ۡ`kYJŔ,,=;5(eKI؜ܝlꑚ3'eN6NOە\G|Ik O*Nv =ns\|\kC/}gch ygT+fqhaQ, !ѺSL/qeefSԉ(,=ҟ̥Ѵb˖i0NS5䤤,]l-U ePWFr .ExL'۱`0"%@4lG[ESa,2m^MQ3J*o AMl` ,&)>9/did?.!5} _ׄTP5Ȗf|!DN>aM ǃ-߃2d 951g[ t\!l[f/x o1RUkZ<8n>CNAf[q0C؃~IwʦC!6cp&\x1,u47ӷGH!`z4_-0;Z:AlK Rb$Pװշmkmڅ.n[yL[BۺVI_Zݛ-?)rM7Gl{򻒵-w;δWp {CޮiS橕 //K.oirbݲҖY %n,n8nhMIUyjUp`KFE85RNi ߲df O_-k|"b%r# q'f%%,Iۑ$̵ʬY426'ħǵOw[ȶp{>^N K&y;C,n(4q\n\*|ׁ݁4!t}^~=BJ:Mg4!jA3 wzj90RXX_ gU$W:鋑̘@2ߓ!?XH![ A RG3HΣѳ2_EXB`DměpI M6s/;VgR P)G%~A+Q?r%z<&x"~ʹciE0>: JqO 0e͢bTպJfGdm~72 >TRXPʧ |J!7ޒ!D+xm*z:_{~J'B)<$J? wq@VB4G܊MI^$!YpN|JE1Ex.+ ּ9U9A` ]I 04zcMK˭PXXUMHM4I5_\^(lhľʒ[4m[>TvU7kղjƆi:ͦmc[7nQy\;5iXfpη„S~Y+۪kԮ{Uw~xsM[xl/U1nq_:\iJ)KVUNͱMGqmc):7!soƢ4oYor6_ˋKˉ/k@F_w\cOƨ'OoWq;ѳzDE 4sJN*ۮܨa=U[-4XoAX'R+,19RP ,VzOXLqDT|$[!Y !>Hş$/% 2qŮQ' ?-v]v0^4HtsSw^tqIlSQS=g>vH:,QlPzbR5I0̆?W6џ  ,qn "v,V|sctȧ Z%/E/q]'h9LE'dOХp/y:kOl>\Q6TSD>+Å~M W x4q w ]'Zc ?^scl#8"CaDd'qh ?\ d! Nsx[~#ClF gLp]_>ŷs:P> @w 0UFGL8{܁'F#"yRr{.۲mkVa~%qe>-ͽM狺i3e]M^I~y?T5[EUY[4cVK]WuuƤ6mkQY_SyzgU\U@fJb-Miވx~?tmPPiÊHjb'ǝNIV)=cegɏR'&'e Y6xdڰ{> ^.׽˼w]S }dz&/̳yS9nvn_]ѷӶ4v+ " f=4zmJ\RmbOaߨ [1,(u@KA6m^|c4c6z;5X`Mhv/ ldCPd\pU&2~&n&$~g.=zlakbD  8h(E`'JMݠW\aZv\<<"}.Vr\Q25B]tjn1d,HlӘQDZ+)>eZΪ7m?8*mǼ?pRlVS]~ZM)M%m  E +~RWONX~Ϋ ܥҮOV&yfw!!%!kB[v0<'m\jlHs,d_+DU &V&,?V6ۣ[rjWss/S\;nM?>;<7 N+]\䮩Gz:{9Voa':X)RU${6}ߟ*pbECTX*b5\?d\)"F)`%ޯ(Q||fE$A8Y1S0Ck{i.l%%= QSϞg@ya4{>D hCOfK&t(c`M5"(gP f<F[h8!c ( Br dN $k.$Cycy9eAՐHH/ +:Ngぴ&R=72$G8ϛZsRV)_+KkIs/::L%~f.ɮn]8;;:SJݚos0SzOLXROGHa֊"$ܦ>-e-zX()膰FJMQJP{!DZ;%1UH^#@k/i=!fa&XH:F#$zkCʡPJ4g.E,- h9}Du+OJc$it:?؀R#Q"q% :|,+OaFtW%?;/RurnA$Eo"eK\o =:_t|[tvq n/ c* M-67ɴ~  EdkN[b9}ȇ#䷹:\cLΡe> Uh o@}\Mf5<z*šlVW#K( KÕ$T@}pPHsӻ2o7+F543Yh¾cͭW{ukvX'n}mUӖ]; OUd6'+3;ϦxY٨l€Ԃ{eFMjƚC]3:*Rd\M5IoMbGO}8J/OxWxdW#mӊSDGvG t KΏAc-;y= (+ O9 7b຀`SCz:NJIk\,ig2qSrbB G]m?|97n}ˬn{iWV^q+ bxɇĝbcl3<|DHlAA@2^H Հ48@ HFpIna*uw9,]Fp!zm1 Yՠ'4]XR?4G>9`B hi+䡨84=:Pb]!#a:5SbU[R ďB!ax r'G@p \"9<:D,"͌EF!c!C:H< +a&{-[.B. B*tg7n\'| ).ɑZx9J|9-a.q7& DsC%6z &eIq/zzT J;l)Ah"u +Uhzo4`dhm4DowE7IJos3Qn:;royp5+?園V7t,T5i6Sg:y#ICV}!c^5OЪRĖx:ScOu@zc? B'{ZJZW']7.S&7Nc)tyrCESKg_} Ml\89trR9L޶fб,0"M99$䓖0_.| c Q,V`GIh1;+! pC,"RQX*GF2σCC$Ё4wwAP!Z!ID72>,fHg0_ruDba#KO2G(CJ"ltYF[ ,\"_$R~ŤGk-ڣEqW]a4CtD B/Lw]r 4w nҳoi0 `ހ~>TCa+OhRl`N%$5xV >m1Ogch0}@n\O+Lhn 4ΓBe!d/n Yd&LF W&^(Q /ߘ{A%8 Gd4Za-(A'8J4 tRD8W.XkI,mb )LEo&tC /weۻ~ݎo<|r$iӳ:W)BIjQʬ aEg򦤻'OQIsHww3;ljtojl\пִpezM.u]N5)|]WRR^^ OZFŚ8#_V"!g) b{z{Mq㱫'ޝ;)OOg_NL!ȖK{!zW5@ٸnBf6=>|/HǏI.{*z;4!@}I'G 2Ho<"wt'!p=z `uQ§!Rw -va]a"Rs76uq%ܥZ!yE2BȰQ'}i1Á5AV- '?}eT³ߖZ{W,IJ-EM≒4z)1Y7~@@;5 Cp-(h+%co~#.l.qL?eډPiΣ^SP| f'b&d'3p*s`|c$0!_Og/+*lri;6jPD^DObמN;|w]y]cTw5Ny.^+٪i1UO<\z+}geɽFզ;ãgv&KǧHʎӻ>#mșC]џUE(mh\A26yGE*>'[Q"+ X[-7HiTxϠhfsQGT1ء{zZ`>Hl?o:;7WuEnu8Na LSSe7g˛_mRjԪ3rA&7`idكMYj2(>>TEh"z~ĵ3"><̦0ނ/hvwwa (XhHC,h=C8WԆ#S|bJ7uܠGNY J pEm+kj)] Ap>?3c@>t3SDI5.09eb|af0n*~L4`?tGoPEw3M"Ιm#XC`WJ")|/i*\s>* C4.KzF/NZ{@$r4(qACގ%O>o,\|!F* -^e8զ4(csk/"#'3Όs8qԃb^$ו656z{m5 fT^Ծz֣i~,3(ʱE犥yi1A-$,KQ}Jᨿ+:]G@>?O( >GWmuu}/}Vx{,SULwv^QzED۩[Y [+{()*ԋCWQ˰- w EȦǫ_8(bX<(mCIZI2.‹Q$4/3cҬf߲|ad܈G 2I$Nr.l9~Bbqld#l-%{%3EFNoŇuhd'Bsd]¥|K3#$W&Guj&zE Ŭn+X0`MKpOE7& @} nRW!!u= m\1CXo6>| Ÿd/*&1lWk=_d(l[_tٷjC\D}$53>oY_)_,JܟxPǑ4&å`]yVUh5W4uYViƻuo _,Wd9+1HAFIn-OͨVrsYigmd_Ԯ5MA-6m[˚&R*X\]C1V1-!:} _xwڧds3tgN{8uTK|sN|ڌI_j9E;Q0 `]Y_NA. }Gߠ'WLXd+x'Z~! Η]KQ-똧`]H9+P=ngۂXp=%#l M e'Q96)& 9aqfq$dh,jDQg6J<:K < d(z!|YWlڹ/<ꉫGEpgϜJ< EofD"~\GZ"Sc>Ht*R&YOE%f5I$h;&;T΃RFMp~zp.k@3j 'AW0[f'Oga9\Eű 9X*\|'c 뤿cϱ\1㤋ly'oǥַmn8ugM<=-(dק5f8v1Ҟٱy1%N:jXzdž  ^۟68T4T)o-w^9i'aS"c’Z R>P-*$|nLdkUojtjؘ?$İ(CEa߂giC΅x A ~ 8߿_ԾC |.u^LV-s3wrnP>I/?!>>yxihvjWΪ'JȪxq(.|E}TXA#+IkP)BP%ƌDZ_s%꣞!zZZk/_m%I:/JK`TZO#av+A/x\nB d}(Rg2X@+QA;q%%c 0 `_ZnfR'$-1 C#sZ@# :#!  6ڕ(=Idg t#EVAl;7tFX9ZD[YVY@j4N<ňA,C0X1 $.¸2 ƌ^Lonx8y/P.ڍ{p-v^do羳q1.bm\'_Jhw]z[:"7C7d ×ZCO'O6;$sBFɉyye}+KgR'n' IW4TmeBmCz{NZZұd׭Ƿ4O;RQWQtCMMcci%*Uf _N|ғǶ;>3TNQwYHmLUR)%>1CxjuGiXqG*!PQ.29)pW:y}FL}MPRpuAS" J+m PXU ^U^#,7w$P.NխqVi?*9|<5<>:,:y{2VUiST WmyV({;oYY:lü5ۢf;6^[ 6$3oQbeh_>",U) ( w74|N;`{J[cl<42g0A?L-cM?Ȕz8 +,~@5xlW`6sXS3y|P6d&N;Դbh)4D{qċ5#41 M^~ZMec`"w3 }gN3#]hn`./a z3bX&! Ȥn\jZdJVxqdD.qc~2ދl8l7_| F: d|!ufaŸsȁq-Tm 5HIq.𣤃 2dZYOe ztD\Gn/#(b@0xTؠ:ݻuXy!4/fa:sJͥ's|dҟq:.U)jrV6hz8AmreciEaqUtfg;:n<3=4oVʼncY4[V/)]R38`*Rŷu=N}l?\kKL.rXD9Y>%awֳKSqU8!co kQI3(Ҙz>5l|hJH&zR0J!T?KjتV܆JbaIrօ![Ʈ'G١ŽqaS 0K*z0Oao o! "Nd&n@H΂HB$0\UXytY 0⾠DBtVA'쌆`ӯA3$5l& bA,'Z.j7 ւ"bb_ Q+%R&\7bf$S"$"C`W@cJL"\^.0o6,#VRgމ|,"FJqf`ߑ:Vd΢`cM7WCq< oAJ%}!kX !L>` 6d!HIj#&Z,nY;[Ox IRjIنO\SﭽĴilvnvlٰwYSAJag auݫ}ẖ۪^5u4-K[Q]6ɨ"'v ɶr1VR:g劼Uӓ2`J&;>'zhcOnoXΆd-<%$%"/4%, G0,`wC6Doj.73*,+sy{|T3\/7S8s+ԗL2R~RVySzm_m-|o [DM_+L_/4dʴդhzANlt4nuBtVrRfaFgTFkk%Vp֢Y4G[tR{fʙNz9ހGw1$l5^/~*0 O,&$jg?!+)C/6> z-xkEfd9#gew.xi @ \a|L+W<W.hK^\)L3ŁcJ oE 5z#0 ǀ Ԇ -g{tc8g`Ab@#ƞ LCSE0 MgQO7n!I}S8]BzI, u`Gb3VI)ד]Jh n@_ bY_˹`f_͝`?Aq >M:O&JgqQd(q %dW-\6XE*,!h3[!߻bFMv`х;Sn/7dU|jEMk<h|[he:)aJUQ%\c陓rmJ[Mo߶5etz}MWm}×|GҌs vIatD"R)Y{G׷g9DG_<, KHs䐔+Q6;|L+g?>F>mOy<}⛪{֫77gC`8Wdr{E!eK7S-IGX tx:L4 oBccH$I"8NS\ `p1)mʋB"{}-\7wDzRBDB=qeϱ}r5ēUYJ627UxMoxXGwMvs;ثĂ¥T`+VW-7|럡8 'AULHa-d7e++ϓZH5r7*tzKQst(ީPKSӘgܘ@ǤҘ=;[jexIp-bC0R@-ǔ+Yxpcf7ĎkxV\W#I6>QHE3\P 2'~^.]Hs>nwH1e(t<zoJV_-'(U?1eFH ?Ξ[w~M1>'63rÁAVU=ZsfzdU۞F\W2=a 3W͛mO7>z*xi 9ᐜɅO+WlvoL]l!,|BO,7~7DOgqcG?5Lm?lO"jnȏ7#^D |*\0 >+,:o #``Є?[g^e+}8\9>`_@1|glI!kXhTbibnYgn]CrCtZa!bsKfȕ<—*vz1/Cx_2M;/XfItzh 0 p+r=G{{L,DF(APVWRg|P/aHqP N 0 _Eh"ih:xH_~5;;#ȃ3%Xy&dk`=4 /p)ބC @Cq9=>Yx7dS6FvEI)?K(2{?˜mʋh5s Kb܇PIϗ?UMt}UȒe'dCŨ'N%3L$hv/]ʞ;lYKa;g+w(5,.Ϊٻ =o͍c<$QIޖ!dyßsg7OG&|[nCQXΎ]Njz03*} K]a贰[ea]eK7}\ʬ$T^:lXOHrp~˰zRܪ\]=\OyuM_NO 0?x["_b$ *$MKlH66m%}d:X#<{L#- kxHPl 7h0<[*j#  FWMx0\1{x8 ѢV5;ERn*g@?Fqj 0 >yw1p":NnPQ$qIc'ECO z"G]0ݘ63vUd"a)t3{$ֹҡ4L"B~\+)T)* :GqoPG;TA b=2/5WD6n+#CzFnM|RA\;gΞfX8¿NjCq$B\6rAlB.>.da`'s`~/~B2DKyJ*,|TQGݲ[kvG%lUٶN]s.wx4}=p޶UoB8=sSh}Ѣ+µ\kh˲~ͦ/f6+kGw6oP0yѼ^A:]Éy]6Uݧj畛,S-9LGdr+Ē9)_7$TMKCy#^\[9B3S;ðP_(&1nGt]:'tZTf.Dk/0z ; Yj#G؆lڼ%~}^s g5gqO Phqraeb& y(O)O':IHrj[\)p|x?ގ̱ G}}§!Ü&h&Ќ@Cm0ʚ|DQLح2p: ͹]l &*-D,_c5Ğ@C9 ov0I[ :]`mb_h.1r]{|42u`)zt!3 te8bGCW AX.#Zf |o$6156}Q XE i<A{'zE;2t=}~+/WL5&&~G}"ZMߦпw;KڙJ0x I%2Lr-g?aI.) %T<pZ^x{c=ꈑy%\T+ 2;男ϕ&*O+PepCxtScݖW7fo&{vWg;Rq k7:5('*X߼)fAD.!zhO>8t\oZ˱m~M-/.z_CUmn#ƅͳZ\_VqO]uBWKJ~PrZzBTPXgsƩ0(*Xڳy.5-6,id?==0:qݾާuC~75(fNiљUs$n|y2AM`$堻;}/ޠy4JQC 9?٧mkJl=՞?E're eMUDͻUk}v\Xu[oWw. v/+JJd\fmXD'$oKNi8pDq;m#P@=5Z"ZW4_6ҡzt67k xRƖFְfW.SJUV);5xCeEͫ苜 F={씲I'2ك3;OHO¦[?|!9=Uzqں/RmT7DVV6, ߴw4+rnTbwcfxݟگQ#[F wB~i-w^oS-7!c]x=m޽+M{Dr X/-UrBA*"M[wXۡn9M_TUٽw4 fP o~LOS,# ˶f. *urĞ=6C/U|WCL 2P)( Q DzpCu`ݍn2Y&x..nq$و;8 {Rƚ~V25 fIYnZ b,pp.Oܐ *ʁY0 ϕ")$Xu[4H3d*\F:H(-?&?4Z+s#Ts㊗7hd"M[ŞR\ƿ@ rf q0PX]yW.X\;v2 ?!{{NYO ˏ De8~HoBrDY$lPF)eMYV9ZuUWV.. ǃ6m5úp:dk6ɡ +eyeNZt垥G5c3J뛜[xSSGcyqyW M AZNQI3\nNVHE-/Zzks {OϩUNɝSvbe TIҵƧ$X'KKDkf6^[OD>hՆ[c9CKԨRmXҼ)xx)jdv\+* .ӹ;]w_ ~I$ܯ=_Cy=ev.zY_<ѪZ/$+`R쵌 P=`OӮ+<(+ wEH ;cqmb"bjGgb&Ž822;5|HZWXgѴu"bZt;o#}s8.4|9oA&ޅux y$$П}'xL ux( ׈#;qƱ! |+Q!p/A`&@;aB~ЁR\eڠ?:ϒX>krpy||lM$!E~^IdҭrΤi3#\*X'Z|W͓MS`TL/”ҽ cKdYb.Sf{6v ƵFN 3DNKo_mJgA-S?WMTV_Sǩ^*GmT;oߪ)oj6M*}dd <;Ӕ5w~u;ژ.~>fey&I>v:iCzzICHӊ3ϛgW zV.?{մmxfc]UmdK㬆 y׶n6f7L>a޹!KW=l}1cQ{7gPQ):OOXg]>jI)˜a_l_"H{_վ c_M\_Kרs宙GaAnXݥ Vr }"= H x7?hGxrICGhhFw! rH:3v{uīvӔUՎ{+rEnX Z\H2]GN >R;4B߂MOA[:?--J1``h|+̈́!p7#3IN,Sb++?C$x"^޳h9cDK,/(HKbLyAC@C?c#z\PCMʒ5ƙ9lCGdErܟ?8DV37geE3MCE f3 `>;L̄kuxZ$ )ВàHB)&6tԑ%*!ɖR|:)ѓC3J4kY_ fi'f3iv=jSd5BAƱ\&uXTUlQuU93b (1L1P"-ݥkvb皿u<שg󑬢\D^8t!sKaQaA(K/Ofp̰1:iܴ햦&m -fM vH,FHpZbv+1xfuٚp[ƉJu-wu~UmL[FCHRzܹ7}J*ms_](|g;䓴kk&$U'Do E&$,TT(2[RRMGJo==J\Q)'k$]~K;Q2Hf̒2ŪurVQV,ckc6ɮ'z{x9=Rk: K|YBYGj&H/ge3u;(P+HC/Ĉ<ĉ #+WO(ba DJDn ;!Jw#y qކ &kW4k3c?T%x=I0ed&Ť_Fp bCN$Rjq=+i3H0c>(4/rp F_'HĆgF!7g2 M1@lX70 zC| !WwA/_C`.X)l>a*CP8= Gjk3bGFЊ9@ HȎp';=Er?e1E!Bʠ\ɬeFЃ@>}A4m?iHhdefjbV3lx;=dA=Mig~9a$ܔ! KOr(Y;eADž)^yLJҎ]~ZO6iUMy[ۯ~mZo߀ |驝z-jלoD:&6sJ:۝x@ӼWZ7fUVϔXqtPDFXmu|2>rG8!m|Zu.AuT9G1P!TPV]/<앎PT+9bY%wQ~#|gV;KeT=k]8}r]2cf@TWK~)cf^< x'ԁx M_Fjp'٫{?X=2ěa*tf3:ؖjяd ;B-ip3f`4Cmx(ɬ'K4t Kg8C*WCnqt$|ԂLr℃jsF7 Hc.dKGr/#OͼkaQ3 U s  F '~N{>cX;L bj tꐣd3^`%,Vq / aLYyb_4fSaঽ% 6mDCiP Eӡ8SQ `?'fᓠF` >.> ·a zF~7Gqcf |Ƚү1u3}h(DuF6/ݾwʪv~km ?luKXL6ꀗQYF/ɪZ3P'mW҂xiV o#s##M}{v}ܚ2iiZѺY ԕ[7QWWRZ1ְEcryaokz{ڴ{n33V4ol dܞl^hSeYE!w=1&U+BD<T1?= t'ֲ2O\/7Η\ / MMV/\)ђ$m=mO_q cy];,hw7{WcN/ AW{ٻJ&g< q(#!}׏h~-q5ĺO GNd5pTp8!ԌJ+`4Bs`: :ЯPZ¾e*\Q,LyXEz>p XCLH;;]93rXO*!yͽF xfc 戒tB%Eqd lMٽ4Ż)dI%Ą^ 23j\2}`'ߓx:ń 3k/8 aJa g`Q ~ ;3C.7LiZ9_[P1U\o0<`36öLky[d;Uc]  `!;A|JCEqt?JL7{t dV7P 2pKYt kߓN^cYck ņƆ*s[e/êC}69׺q'$GWE$&}Z.Ů]1\0[e~5x0MZR˂Z!WjO?};/&v>ion,i.jѫ:v|[v{kNI:{֝axjCufI6 r&W:,K9[g!g,{S-16Jmޠ=$D~Q0Q*'EdeAkD,UY||Gğ < a7wO~kc𚰞)"|>"'x>^t%ux罙j'&9ȫA≀,ƊFA@QhP`%OOT}DDY]n_4G䥟`p֠h^FH4b=w߰s^ >Sې,>5S41:ῇCEY /Sq޷l]ei3 Zj5y̻ƨ#bc<[[7P2r? 2'KTCM%#ldVO\}`;펝׺ 8Ga[{CZvce3{I˹5M-m[E l|_MqMYIۦeORCc#44jN&dj.!aRBT\nN؁1aPHzgU,P*v(Jf&U|"HUf+werCUi\*-Ӌ ޫބO_(rMͷƤJˆ]s+ۦhiu x85[,neR[rye˜[qLXػ4jd̅ȻQ\Թ7iVjkgrl2T_1HlP>WG?6m.9ru@QS%rSXsz)T#H%m"wѤ p'bo[vuMo;x.'D= :a3db<xx  0 Eu*%q".{)Fgdox&9}PL>۲ȋ#Ig9qx<҆'4_!x;UK:S܆ԛDW- "v,=ƆT3#V% h  _hi|{sBIq0~LNzc0U(jC1aG gf1s-kNT|'eF\: ;sd<[H.8?y/@ =r~p/tn0ˡ΃!p\(\(46H|pF'8t8ZBo4$SKO+Y?+M6b-;wlܶxK6c6+UE$>H*Rqޫ7bZOBm4?h:>y*\g-h}suF,tCed f`+mf5Ru}`C E4:f< 4%)%C n@ˌT;\O ϹXWWqѶ(//8UxkowkTWU~*bzI\)giԻ%C+SKm7=V 92!bs#ֆ:ةTUΆ%7UⰅ#" R+o~,8G8G.\;f1z-B b待o]r]:3\ \ #ւD3xP)=}zt;̨XSA>NVT_x=wTtB4#ğx( q?:-vǟ0xJϧ>d}9!3\hD&S07B)쇯62ԆװZP`9kkBqnLvKC|JݔZѨl (gvyO񮎱[5վk^3zhQz^1JE}Tq I wTWc7`o jbQvf^]:Tl MVIYv)Kc"Ƃ-3ǜskSv8[З8Q)e47R1# ojSeU=WuF*2z-Tq#1SceA-mwjIdH\'= F{^%B,| Ȕ FքSG>yvLi,Kxl XETv x~K[}eymf_^}TO`$s1Z3'sT"&3bf63cؘp挀2rC^&m'y( McWp<"Pn<,pqd gw/h;Ȼ % xx {a*젏0-Ws/=愛wbrU>$Ḳnʒl攃P`+DOT QRK 8TA9if=]F^ N@9@\#;E?ȘҹUK̡ҩT)B>Fx '/!/|=[^0}t=}WckJnn%jUf{Jٯc?~c MΒ?F$8a}Be oT4kǶڽ4Տ  _x\z@0R䧈E qIʬ.]:g{B,ޤ|Y~-W4-H*}-VNK_Uzz"k85JEڂeSs26<,N-:qѿwO8)P2MB'=]6صbb[yѼ6O0nP /QO ;^c[nԎ#8!M[Zrmd~iW x"p֑9),A'T b⸏jz5ęiEvtz @fL r01h] 8AVwH3p33\ѩotWEp6)0~0`18YGn!0{>]2 GI׆ uG6S WXVQ{hZ1-GYG2.bfXPC=P,&ǐirې7x|nHaO:6g%M3ŴTV6-l:rGK{C;s5:{7ŷߖӉ^>s*dG×I}TX9ƺQupq־N둺ӫzĽp˅٢'"R_<:H(_$S*cnjEɫ&]U4*Ū7/1եUVV:VT֖. .WΫWtQߔӚ鬓UTǗK}]c^缮zuroCb&'杳VM\0|P1\>F&mU㾆#5uK,d6)_#ml$]Y-VNS.߫)EQ[Uluȸ1rw U[WAwdN4$~/(Eى񍅅+<ᵰi nR K:{ϏOdd4:Dvϓ;V Zz0'[s_zBk\GbބFrD`gb  Yf2JT:[aHL'eay^ad^l4}{`5>~:8C O L2-k8SKSQ82Cp?q3A q؅x6;X7 87XER7p6ZÉ(pTr~j 5\mQ( a E9x F` ȡVppf<ކpZ)x D / mzh .}x' p j">#(9…r@7 T'Cj#Zj`} 3$<#UZ/BObYfY:޶{hgϳ5r1rvr"x#qM-那ZkSU(=??eL*rIժos6 }+^aIUV͝ꞎw-FMh-uK㏍(Ȗ6;x~Nz,3Xʗ˽UqSgn,^tzažE j?^0 iDJ ]hR\7Iv7ZvQmp/ L{BM{@Mڡ|UrZqESm۸]uBkCv@ sB3n$L3 H.XWcƄ$r[հDy]6CN(2T^18e܀:"+q[M4OοZ xF<ⷉ on9}C xNL~+:;7cMa(R\oMllN SjsݨށAO µځȷEBp쥮Q t_xsl]gncl}f#''ÎWM>]÷Ot lc\f,u>!ޱleefj8)FX4}^_sVV:5ڵ6tk~v7Rw5#Elߓ ̜&wJ҂ ˿O^W$v+ -*Y]Ԧκ cJWVoԼНl^{BGk4 MsG]՞H}ۈm-.Kz^˵Wuh oMЏw{ێ+&)#+sR{nĺ2jdq9-4(Al!W =6#A5޳r:`/T&$}k\V1 ə[~'a_gAـ Zj\/|}֥ځpcț1>UVgڄ315bƟXS9޽^Zkۆt&]]o[5j_ܛ3vק̛þK{B+ mZivjA8!Y*t*rG(1Vفe+bK6^[KЄj6(~ԥ>iu.NBw@w{O[ϓVfz4ί]z~{y~{UeK; b|P|6=L1|@-JAڥ(,+^׈?G9E[~@SYn,UX/)WʕFQĿI~ݔ숼" j7=*\·x-Ǒ BTcE;_`–CjA=6oY$%'Y2̱@t1An;uH8+q)q˘}Uh-Pd'l`eFhvEB{ pt92jd@>5L>A(M\b.mLr5ڬm6Js{ٮ4͹q)!xy!?4w"3͋:KuKyI)o&?P:DvU=mlZnhU]V9kW}MP:^ .I][색3n$MN:ȅALZE␼)ltB6)fd4 }iKO$q~/J76(pND$+D- lƷOH ^*Fwt0lj'-I_ҖLA/_VX͎Z,cnfg@nzjAr,D?v92Z0W8В$*AaU? rAgy3+!Su/a)YKh,mrt5nAEö# uԝ0#e d ǒ E2 Mt?I ?l0en\{x*ӻX9g&gshE ǖ\7h~| FlG̢5x͔^UUo5]Ϛ{x8mL8~h)qHtqp[YOR׶:]bNnx^qtX|Չ{G{:Kg&/GLwc^}C$nM益u%ăɗSoFJ6&/FhBI_՞ֶT;TWdܒ--{;6+(Z"U8'-^UT!P9v\/S}~+C.]J?@Ct?wU.9wt]z .ߖгW6;fݮ#Wﭹ$El5?jDtP:t.vA#ij(Nޟuav᨜amtAHûMŇ^p(9gq9!)D"V.VF*]rRE'(zUוX1Km;!F@8Ai8r~(Չ/OOҒe֤86_Z9'VQe[>)@eJpICXA8~]B,},0߃Y& g\WjH ց3y' KAqFe% {ށ pRWTkY7|?_p= _EQ'({q Yk xLV7Oߠ &%0Ƴ({@o0E{A:BL&^JoXϰ?қ}ַRd*>oiHe9҆_q5R9>ҫu466agaN:i0*\3 = V#w/ [v4>݁vԒChu ]~GhOx/>n30͘?3ZH)DR sb~`؆cdBVZV ro^{=tǼ+}n?7Hu8@=>:fiIް L^LUO.X|;So@?~NhN7mՌyœWi{S/RSU%k6`b7<@<ܹѼD6suGU3TȽo1m,2fjˎ97-foܑ+Λ]4WU5"qɨ ^{ɏ{g:^+Yo64cz0+w hj~wZ ~OMawezsf92}^3KWDפj 5i% >gw9 Kg$O/<2ji׉M#6t6ԋx t8 >%+{[s^.'UʴՊB3yyugł+VWg?O-MVnoXC7[o[NeP|5h H2BU:rJ"ǩqxD!DX<8N0~ &47qGpseJقz@7GS|%c3h6f6 rG `#;P|CK S"Dk2D!l=kzf gt` ƶtl|OSHSsAnHe,$ؖ]-44 Fg;t:bo}rBIu\F7#yiLd3VKvE8 X#YӬVlm1nbc7׎tst0븦qƤ0(89n|J>NjKNdV.G*$;51kT):c᲋߄ӞM,ss833XIy W ^'lYc 㺚AF*(Z,Pe۾C1_n/siο-uAArNLAWhlV򌁠r@AipWr~΀f0"Je!7%m^ߣ?0<97t:CpBv8??gnHmMǺxACw9ff˜)߲<JJ.)?ېّgX$9,LNJE.Y3w¡ˡtN O*= 龼zzov-IU%gG܊8\`gMNL"\s1u!܀#oXEعGߘTݔWs4^1qd ?1l>H؛6GR|QmJ*z{q6ݿMwnMkω;J쪽U}O5Em es;޷Lm\XZzޮL*{ŸWDqm,8W% j=[T6cğZQV\NWZ3&e:gɥgnr̛P֙h=ʸ P Ç`QD6hb |1r.]b+Rd:'gGp>IV0#ť+X1PH |:A.6#0aK1@ <?ap'@N{d}D'LvA蛭shL't=ZyV3!l nJ܆+kW I6qd8\b oL<+]B(MMBU0^b|4 [iOOހg` !<?r.?~ {M|2!F۪6 FL/@DgӧZmX}oa@(6;0 }6"1"& p `lG~?Θ@:Zؾdx32+Lsߎ|'+N4HD/a2npbw~ힴW}-Rsc&["㷺lWT o+R408hP}nbtdd䞠"~hI^ODArD[YQ4RxP'>?6kFd5|vI>>?'jISԘFP&i/(#c`1y+\@p;IɃ$:N<9g̡>2xMZ22!lp1f@-nk㾆 (gЉ/9L]`h/6# ?EgqzFgCYh$0aOy<2hۉ##Gwz]HIcOO|$r]tW+̫&MV5]0dF_+Ņ5Teer\@tBm[)V9/?<*uvRpGg]kxЮx^0mkVi~@[kxlܔiW2_5 EEVz?2ώ>al>-7ttMveρAX5T/Nc1bHڈCaUzV7K=gV{]9f')ou\ly o 6o76SRq;#*>~'.+]^L]ND .[0^W^-"֢\i5Z^UEvBGW̖<(EGp"o,a Ot)3L#kZ5!#` Q0Jqx=1˄k"mnH'f<D B!147Cp.LJ 9>[$h,?`?iI2a@ƦA?!-F t.ABp2Z"i?N'0 n0M8bXB&g7FeJj'\\JH 9Ki>r+1ކXr-@+2KkƼ=žTP"v#8Qiv> <?ShnCEҽs>rtR`~ê ]dDG:%/{W]nu+cަʐeAG"GqEqv! ϶늓g|_;=ck"^l[r~A~FapʉAQqukxRqܪBѦi-oKy+;˪@\.2|5!-$*[6r/s(cp]lR&\fH.NOO9 OIefϜ][Y}8={j~!gq| nN'/\W묹.UzKVd~5ZO+ _w)R%kUQ"ۥTi{ckU`}V;/c?e]U=K*Kƒi"_Q, =jk^nra$W[ސ,˕+:%6ɑ/ 6ml6p̓i? VP],.kP6[|te#`S5H\02̜d"d5;\ B6Ƀ(8 Sh; iV0S[IjUM3CxTq4ULZ FETl-ydgѷ /u =E ި]30S`۰F /ƩDgF0kWMdv0b*:a0p+*q9f !2id J,| ǭ  A&Q?0Lυ9cT?3r=4su؜fvkꤗk|0Jgh/YS^V]ZgƆe4 g0! {z084߭9ʩιߝu]7=}c)JUlmʗT~&sY9d&ћsj~hk wԀƀY;{LR ޗw=<% $ d07 m,*sD]'RjycMԽsj*hQ81=WO,qs{vϩvSrMjyf= KVmULnX^}D6v-sʿUFt*JPgjʙ}.Zb"J+}bLT%GiI ;i]r΁e\u*o^ WX [^L.H^Զ(ZwJn,nJ-KwTy'G.1/]M))#9YKZj)Il:{aSzs`:]{ǠQqܘ19R2o3F]0hrP1 q ! ƈ *l- ̉T3+#4qX߈SщLrG{1hQ~].%VD[ZpW>rz`1 Mnr 7` E rvvM9f+6䠲yeifdJYUmsYmڛqα1a40e|c10G@JB#L˧>wȩQPf'A&ݘbs6?95-p/ghCޡo}SkT~($p"JS{N;D::~cmCG} T}MEz ط}Gȃgވhv3tr²%>JfA;/HX\wVbi،3}'46tw:~l- 5~W~>MdH+vj-قew?WpqxuB\M|FU-],Y LXj~ՅvT8ˣ}k+S-3*sx;d_v0.rghsX6E+jz.ArZxdE sCފo4_O~zZv>^*Vƪ&ޅ}!C"ufR}LyMe_ښl+",ڧioŽƔƿwW .Wp^vx{ NW/o`w~`IRyT}TJ } W%.SNtr;Ur|SC2gw)\fUos]*p% sũ[ݛW킺I"VKbRx@5M"jQ3`6τe"= @2 ҙ4 vܚgNJɌWd3E@"k. S&z32EЊ7z99BV?J@0@ 2zE 84l! )EQB⼑oN|6rqḺ>(Η?ds fLHu^߽lc*6a6l1U.&ʒD'J _`[g-:Vźܐ<# T"" "BI{$, Zu.l }BP\BJC~.t.w*@tɿ-,4/ɛ/ q^~ hܹ#U"8ac%s7^8*yeڨ;0T:{b"<&E-};ߖ.1\$214R[VBt?_hh* > 6س1f+.b.ju״$E1o5/TLV<׋Eomu|?%5Ir^^`n`,ED&ڤk,*~*?_nȵ^q6_8I :u!y!U&Yմ"CADTQn/gYRIgֳPҫ(wj#wI\ivo-j$ഈjZv èb"K’ZB-dm#NrV1I DJLcrGXzĺ.}^$w.py없GM3e<{>e=׍O}jęQ-~jX[Dʊ=+G Q/K|S1 t_Ao!,43G-\-8lt^a!r-r) G@b1_`= ͅPf#SHaW1$4&/p*<_w~I N Q&P\tm#p D ^/G%42pߞF&e*3G,8dE8xfk[{IDC+nYß) ;HO~~~ 9WK("?NJ ƒ9Fs}jT&&m ۛZU%/mM.9kzTCV?z|| 1JaU [~1bT8d` j T_Cr3Z f**vCCH"x '  GM Ā|~ Ifad緝w>J@ LM'U`p scaDr6+ Ri߇ӊ>'2蟛ޭ5Ż Q .LJK'jΗ+*j:bQ{a`sPZ%Aglh&گݿ?>3 5*(q钔+$ pȟڜfa/-gg SN/-2q-orepy5{Q|CќcX~0d]"(Sc13]-ҭE)٥64-ihI .'8ʉW $@ 8+Ĩ YKZ-g :?7-̼R2d].ʜ w^7 6(muir!8JZ2ZCobwi߯}¡#ŤwK&`f9ab "㋮JC$13$#UQ=@N]׏Q89IHTiw#%GkLue_Ծ|I7ջsedž gDǴ-Ԏ-*7+4 uTOUFlgҎڶcv dfPk16ȃ:f*OɑmЦY*Cu>yB 2 TƊz:_Ӻ5oXҋqk͜z"@܀ Vo @_. ʈc?:ށv(ɂA4^t44яA"("c چ^}Σ^'tb,8p wݾaזH-O;r:"v#|#2vOFNF a78 =ZWE'-L-nX!n-[eaqM ߸.1 a 2=Oq-lA(bwص9!a]л`A>> z(4$˕kȅ_r*;;گ w5%&z8CVcl0)Zk2᧣krə\^"l ?2Wo=h߱w?g.>B?;崬@;Wm&"-/ g3g3x=[jVUaIy1jytR^DNt!9;F U؍-R#Ie4wV@ڗBkd)Ru%GDK1X&o2B=n^fg4v_kkh? >~_7؂1E !r:R9AľKCP* ށ_5~O<VqMS2NSqoһ; h0o8u-$PUe?5Gۚlj7ڍhaoLF>mN0?:zKcmFfO?r0gcmjT$.>5HdF"uiT{@ͣ_&Da}pOf:qZ\ N6^\9T?TunF6~EnGE;TN[Wh;(EKهX=X^oτºlc#x}-`|nTWiN6. S*YjjѺi OI~/[B#~.lOoj&KVT UMlm(ϕ[uFtv2:l-n6z GQ)k4EnJ'_]Zh&wi揿aV8&5_J3Ps(6Z3]J}4<+V 7aeM{GV.Z ΗS5c V3 Ŭѩ`6y jt ,vA h7 *A!_P115/hEP%.j*h* +>N`t¼GkP0|*R{7ַ߷XX EG'!|}G`;"g3_8{Dw_o]U\nݒnK+G=zAojuu_p9.v;;X:#,9ҲєBf.Ms$O;BrٚH/4xvAkrs?H&Zppu[dgE~<2"sfv0u.L_5lŽ˗]ugqpc¡]{/\y+yu¶c̄ܘձPA+^ jK2i 1hu⼺2MѥeKʌ#5 ܮU ]s׈7*GCd jFWb<ͪ5p.t|%B1MǒOiYGeO _PRLn1A`l^$+e(N.!X껈 r:Xs6g+Ւi6JZM+Me殘΋NמXWVWYū5im[2SMMh)-]%A@퓖ԮA=Qg^({Zc$  7wub퍖O}ta9W;n^%'K^ h/KP : ρoAVt? 섯SrXsr(z﾿?z Zy't\O]a&\w|㑹5Y|F$=(Gj)p0Ex ӐGbd&!~;d^;~s[2母Z[<UnJ[,,cU:_h7hkimmX-F.EözǾwsFWQF Jx: b~ؠtqn4Tyy'lQwޫlwQVJW-ZΛB]Lȿ-BRV̨.4$o \(ouY8pcIJLyFz y:Ǹ-X;w=;wpZ BWZnf&LI:pJd96kZU=iV՞l_Ja#dOu!8L*Fgcʆ}D38Mii4g֗ZHzD7[i|Ԧ Qry3 u \fѶ-mP:a[T,(+|N.f;8finWۋNCTt9=wzL;f`٠v0"~X65W- YNJ8WXksAߒnDx}LjeeO]U=Y;_yeѠcꇭ >~XcAcF艨WaPPjsO:1)P N`$j:<e#(5/(8GoLAEcWBߡJ*CDx1\W@*T-\C꿈.n*|>Bd p" H")FB 7 vDd|Q;on+yj=57gySvc~+ ҙaR<-@Kc*{IjG]_o 4tQ{ O4y{+l=km-F%m%_#ƊxENlWPCߝﮯ-U8Lʐ_CS^~0M\U٪jlPOګn5&e=~Ye`De咢,|e:8L~ݮ!&i5ͪY 9=\T_k ]@ l~A}T M*@&4 u@=@AP3x,<dx؂lP,(@`0k@!/ LhF 04O| =yo9-5Kywmdr_T=LlV{2$]6"?S5A=ΕZ>hg[ا] ִf_Il)3v{/# qgf3q#YSSNc. , ڭ8w?u7H佋 syI鯒ެRZ0($/yP3W#\](Ve+=f7NnK]t]܍S5== L#BreysC3\3{~~=;xL(eʞy>e s.wSv9b8Yگ+WطE*wSK|I].ڜgT/hVUy2W1 ב*((c_]hkf+2>Hﷁ/w ;z;tk菡=V< Tg ։*XwF5юy>@*?e1ĂrV&e~PyRԸTAk(QMkjh?e J%O5IsA3C2i'h7 5Bj5 !U4L~rM#&gTޯps3(O퐽<"wE fsH~jxM/@:?Q s&zFG@E+5j5> ZԏYdCׁ PGǢa eD/Co%C&^DC>C[D."7@#dp6P~GG^;f #_!7}lBx])yr ȻΫCcΖfmm ;u-GdECj+N|pZЂ5zۿ:i={ϵhZ35_-^θ>3@P[Ėq:xm]㇫\A.\)"uړޜٝYϲй] sGɅ"LaBǂSVZ4A)/c%)vjb N:0o gM;3>7Ƭ,T<,9./NSn6BധcLAIY exőlp26RE (uwo޴iҴqiwo4mjpw ^|1/t;K+U xRyYaeJ˺dmͮ^OUsۦ]2=65^airc zPu~PmiG@o9aI9Az9‘7?~lj=|0vޅ6. ?粻ƆUC-#Z򃒫5>f >mδQ։&NuYO_5,,s1g̀fn4wp}6e2Vkyfn mަtX3ʴR}Q&MU_D.X譗$^Cz%ZGhGZڦהߺ=+z ,Mݧ IEһ*I|lBb7af]":9>$h >.5`g\0={b= ۈ9-AF``as;aO0: ϨG9U~bs 䋂  f+w!6!eH2!Fg#; yG$"='c6 <}^<-^r^<ܼC=f/5~}ykAwg'%N[]#$pmh+u(|A-9 #%yZ#8S\]2A;Yؚљ+.[(-i$tE4֐O b9GL69.:TD~zMkfl&T\9Qtc e7'QS5^椪\̒E}a=w#S#îq0ZPcoߤ43}14 8^5`*?I{mbD=Y04{(Сr,M0E|W0Mm[C燥#S#:N%9 {; ůȁ+b8^jo׫h,O̞ZmɷMb-RPiUX%ڥF<[gfQFL&z'Xt[\$^H2T<\h*בu(و.̪a?ڕâŽ&{w~"|u`Q@fk:^.p; 0ص,ÿ'\0;ksDZiC#MBCD! !``h_p0Y@7U"*r x\> vƻ 6"@ A?>}^=EzFCP4; x'K;k7Mu;/2jz殊+==Ղ[R9[x[^^pm?g03R]K8ʼQ L>:E3Tww%_I)^ZXxiX0ewj.IKEk՛t~!*z2w}CSPQ𭐐ɫkJ;vʺ( npuX!ZTUwM;yfٱLYT]xn!Y̑6I37UisMdJM3qO3'aqF[߇93wY }i-/ʍz2{?^{w v j؉5i~3X2Ǽlm_:(5H؆#6:]܋'Kd26]s1^d3fٻ># 3W7:z"7yF]ݮ ٱo' o*s- >d.G84kn4i%\i??RiІ 9Oi;ɮŮ4;~mW7h)\k;#Е n-EYڿZtx}IVCHe27!tg S _L|AH8Aa.#pM b/w67T݋B\Eע0pl̀L8 ,Gx <_;|<»HT`0=C^APp !BD@ 23MuX 4g"?=ܯ}z: f;T|~7 ”- U5ewC6@2ގߜn3(ݣ9o0C]E ZLOa ^Qqs˶7 /+[>dKWfGRFl|>eY*=LH Z]j%Euh34pH݇? y3f2ٕԞc'WϪȭhݙRV}OϦ1qml3@zOlxYztQ"T}PfQM@}(g.q6V/ ']K42{t\+ŴD/pVq?g)׷9ĶYcGNؖk9AԊF'O+ Im=vHa>2tsEIoLj^ʙ/Ҽ<3 ڢ,Wɲ:?>1b/oꪭsGVP^d.rC Jal1G'[ %]|2m`OXdq˫RW%#P26VVŐ[gxS8ȧ6z92ݑJz^UQ6YԦn;DS!+|y@U]8a+H, $Šp^aеyld:x;"E,Q"S`R؉EC`X O8G{}a?gQ UE=AC|> ƕD>lAmޓD;鿦 q`hE;P94պkl͆NXYz|`LybQ?iU20nsQRYn { JN8#G,-*;gyF*YMMG˕Q8=_9$-Cc6l{;XdNP\KDz8f<>`ەs)j&:.?t U)g[gA*ws h /UĈT%Y3]_2*U #9sHEd2@Z,ὧG6δPЌ˛5 2z_*E0xX3Qe`c5g7rJH{͊ !$\_q?poC̷m&,p!Do: @b (.t! p]})}6y݁\F(*@{k|!=QyȿA( Ph'@"" =& 6<|/Հ09" #Bv 1 GQX0 .:!rŜxk1 ?[=ޖ~ )k G;n tKw8gXcyh0֛ srz#h7Q*e}xD+Iu}%% MgH7XIDg =MK9*GƐ/-¨c=9I@tEx S$.YSzZTh?Tkb0=v&W]X{V}P/e#چH*e%ܠ Mn79#Ih 8^L?X-z 胘Ez;lZ 2_+ha3-`R}7Jl'<1  -RL"8*>TG} `4X'Pn!ONcM948(2+Em@{ϠVB1 [C 4CUd{[(e=t oBWMgEkh~5Ctjfbb.`s[5j{u!uiޅUk~L_דĬ,&lS8Z_[P*K\/iYJQ2}'bb,paFŷh7TnzW3{G6%"} xWO$#"R x аPfuU'aN5/ Fy9~D2,L` D!™@!6h0Coo/#\:!nÎ΁, ~D4 ӑEHaWV(*=A!QX] n@F ~Q0蹨pV썠"筧D*>}IU6#R0QY+'غnf{^'m˷lbUtΈt]QMj5wuKS)]\mvQކ\tg֘&ǘ}rQOӎܬ7y { I _0UQ{WQڳU*Nk'[ 5C"/NHh;yby؍mJ{lMBugx {L0:Ξθz'y?罧2g&"΢Ʒچ+%(0˪i(Lk񿗺n8Qԇő {c+4Jh *s Ytsg_Ӓ8 Ęv-/MΐI~ES.&L׌8?>s5{]sƑqV̷1l$eag?DJoju2jlka>[t' yMfV7 NH*qݨkۿ?wZ6,^V|PVjPD_X"X0< n/) -RPSj|LTUe ڥ~V[+ǞtO!K|oe(󺗳U2cNkքyqyG7FI|,%~& N '8%-4<2_aa>_O$g،5;P=/֟vt88@h FlG$ pT@ E@h` . ܊E86r( y ܏@UCZsp DmB1T2 C#l:| r7,lF|z}N/O: }X ).#a0z#ezaWSviF آ>,i2([ NNik[) G];Bd-hjړ3).TIKc+uwH7IҮXpu3Nvۆ23gD=<+&61mMFg}ux*4&?>vnDFZʅ«&?X)b^${_ukg q rvFphHYy³fYI=u/o|#䊉?9_!vY/}SK'qI,Z.!%1 u>R3! P yDpǏs\?>nA؉v  ނ"ϰeoQg,!%`"?@ w->28ѣT'O<;KNx욿vW}ŭRLVCFRh85[:a0 km9#'[Iү?UJ5 54*;CxX 2lʣPp*ju4{#Hؗ~6^YR' S˼N <@u*U/7qj c'eՆ|8KfE %qqwa(T`iA; f/2< ?iFN_\?#YYUє79r2ЌRfѸba/A_- ;+w?X[{bd\B"+y63Ԕx(~袤,x$AOnݭ 8iԛ}YkK;KZ_x9.TsKrZdՋ zoיG=Uv~SfA[ѾuEK í%Gk׳N7fU7[UiGSE ߋě+3MƲzVZJj))W4gh8m-@[~OlSeUqaQ̸|@ƅxLѪˁbyQ+.g97kQ+B+AB?Fh-ףqGP!!YD[^mAHM@HTlcGpl|yuo@`jNwv.'fW;<=a'X6/p_~-kaa6KD:c:ee*-" Bbj`N_H_j[Fi1$#7>2qD [R7մRS,~St<*Ɨ333N # [Gpٜ/UPo@\x^k鿗/|å>?iPIPFR[jVvlە6GcIw?Q q"sL ]PY{!ed!GK3;f>̜^Zۯ_:ן~kᗁЮ"s:E@cΤ-e<ܭk  g~K0?Uԫ<%+_isUP[CƩ<W2%f6ؖMN0.pXPVq&x?DV$N(oC#^cqcnS e=̻ƧWhdh7fH%H+,5w$EլhZ3)Ub9w'D5IZdF).0 YEga+yH1ך w6* ؚC_RΗTv3@TG-V0UX񂘬 w73Q舷FWD+h:n'j W!X"V{yduE rp EH?UW8-U]|lFWF1->1aUϟV&H$UR5Ot;Zv ^: "94j/ƚbCtqKCb_eWpWq2y^Q·Uxٌ=^\11NX'\:wn-;u4zUڛ %S=#q?JisJTC(vV5&ʨ2us~ᅠ&wG#vIeһ~gLZMQg*W֚Ֆ2̅J ]\ Yeb%A&QI5iWܓwL.ϥ-uKZUbZU#!?qJ9M{U5q::2 tw9R?Qwvv\פ VNj])}ӦnU ()tm=k/V6zV:^߼[; G׽'5wH7wKte]W 6A ª:).?'"]ZMIk_:h74i2nN m- ET~G( >[ %11L>8A,p5H _33¥Οm!F3_N" 4 nW? !<GB0&L،81A,ل ÍqPP¹ jARAr;Aw_r/ D(A'ep ! d.[8Y<Řc\e8˰\kpokvACfZGIA%aoã ɔZjUH},!3uML JU:SEH%brēA g!/և?۞{՘ LY<>-JU&MF&ӪlQ]HP|ĝ/HW?)N EsUe볆Cx:P~~ϟN " Ls)pVH\LYM-j9īȣ81Y|ԃaZyu]_F֟[\?4jwsh8mwh͔Ӛv0>Ƕ3_إliGjO}@AGU5خ?uZҺeMoh?5Jt;ZUmQŞ=;3j}[Üe?:%K+V-ڈw]~NK-/0oڑ#{Nuo|- "xgvWo'"$9fe UOxc^>&$I9zpXFo )1˽f TڗT[KOO&a&ɺ#mǸ-={\SdP]{J˕"MjT+˾V0zUԓZzRit>LVTRWGsHA_GmR;Ҧ ++UDT^T}}Ebr{{M{,{2=^pJ?b)⣙?]y+5A'_= 'HcXB#A; .C,8 CZ? &@ǺB *BeQdj D mEBcx8h*WAW* 1 @P |@(  +OfH@%f*b +E(ĀFp| fÓp:nq 09uH:K`WX5̽P3^ҔP'U.vHJ)fѢnz{kh4,EEyo)#U$14nz9Q狍<{7GlGZ]J{xR_װ[nT6nyvaBPĈ,VgHM1W5էh47mn|ݒCH_oY5rjA}7v3b JL1Y`P`12%>#;CdMb:IƳIkӬy$Bx)oS-*L:9*W*1~Es.vx?!ml}xS轈q2q(}MH{|C}׮%C'?/4>|7 g>p::BQ-N|ϾVR'`]$TT׼꛼;vҗ/|ŭg% MLMOƄE5Y[˘nZΑKD nW-N4okۗЃv_?𦧧GW6XؓM"eq8%!AJvD=QEAr$!w񟈁Do=B*j C`&a":Zh3S4Zo'M1\!⏨)AQ!W·&h32@`E xn9}[k \dĕ3n1K|N&q R7D&%.KpZ-MM>9.*XR)gosjQE._=rE,;.5Vqc^^C̫X4<%7^bHu\(ȭ{ԴXt jsn=P3 cύG>ophn$h;جguunoknPռi#fplhV.\W۾C~, ly9|/ʭx] Э/TkJDoE.J(A&- ›H;1H 3f~]c_e@I:>јZhaߴdy0M7ssq:i gH174gZ,mncHY4݌;lBIZkt9k7a 917_#l 34n7-E$P ܆\O es-3,s $;:/! "-"'F <@C<;mRhB!?[p Ɯsp^w Ǎb v xXќ2-Vr+fˋ̪o ʰ?sS/Ea|ݯܵ?e#!u-s6\ޝ9dɾrzr3^`n/[3/>dd'])fuvN o1cRo.eorMnV2OhK4|y6tfW *QHk3=MMi;{-dai֔ۜ%# t ){DUt^㋇t4k7eO} .H&Sh!2|+_6>T;s+)#a+hBMK# @$9kLڵqsaOeΰdM=6i}Ӓۼ_Un%:i4tiaBxdC/'y-MN> -E^{fzV+Xֶ:[:F5Fa]ۙ,P4i:>.|R.l_"@ipG8B11$-P 1ٲiyV3;hҘ SW.nK:fyt.L(  9;`5@0"՟ sY:Sm^Ӎsgzܰm $o ^_ɷdw8Sg#+i4!<#_;Nv-ly8BѦ^"Bgεѷ0궄*ӒѪ(&5kc@<+D-;4d/iBh\16l+="P9~q}9 ? 4p\j3AvDwQƱerKV1eXk^>Sر_heաM-Wzu8LY^ަ0՝z*pS<pZ$q'[%oU;v˞ ďfVH#Ɔǀ̮4$]ywHGd䢐"!Aڢhf] q6֏-cIAor$`E#RHR+ZY(D eTWk[۵]]@åP@b=Ю=~ywPW''Ѱp GV pY@nh 8fB`|+"SR_Jޣ N?qm!ik֋`GvU+f$7Jkɖcct]WYdsZY竾ZmIUZՆMʆܲߊ랈>jBuњdscX[x.__ y]G(MO& B*ޢfn#fuRf_jV$8ǟAU_H:H[Q2i̛Ci G/u톌anfe~yTzFQIdAmhhw-;e/q!Z!q-/ e~G/aěV%_0]mS &xGl408̓~$W 8큮&8pV00  #V[0=p ?,vX s"Ac7g+G8zQAp&LAvR~o8A?c'|(NbY-\d]f#2,I];nW|B.NFrr|;RϏ(vP] &}fGMIQ;> w'*;pV{"#6?͍ .|0^w5.FOG&1*.<ƑVl&RqqS9YQvyI=zy5@OMZuEr _B]dR}aUOO͙P[^7|+M*ckbYҪh!]p!RM\[b^/Z 9Зr\`UƖ"ଆ7)l;DCqIʣik"-u}4(GL9FaRY^|{w~MU]&JjEuxW'N ;1hӨ~/YWR&p*j%SrPW3*e=mȮh~yFaUifo4H+$P-YaNs}go9UMY/".#"k\@/tw0p2l4OX;߉BV #ؕ0VGPLkHtF@:dTB_`> Z)zv-^cx |8aY=\7%zpթl'(v<gA"`giFs; DO^8 NS.[%16-Yb企s>qYZe5_[KAgB{)8_rDc8R= }%59T JW&Ϣw`CY] kG's 8 խԤlRhϯ>WGb%KK/YU'h\,a Q 4[]28|SA`Cf%YYQvbE[s ''(7W;1vrFAjسI1\W;hƹݙDn>׃:Ra^'OJ'L?ЬhgRդe1=U>fݍmEʦ:@K<ϼ{Z?p\ۦ-Kk5urm k:j`Z@JFi.H+ae/ ԷӼݟn/<.nTU0hZ*V Oݴ_TsKd@&]ޟ%^(!vd:ԭôbQe|A 9A/lLGp`lt6w:H'Zb)#TxE bc/.Vc͘Y<GVr ^H2\JX/06D=h vc|ȇnDs-` ӘPs / ]2@-d݊='0E&%,~1qi`!(zL4Be ]o z E`5X!Б X.)kYx3K!Vdv5*HO>o+[&aj<$Y*;+ɖ )Q/bo74zzxڐj7$I=XKس;_14\.oJ*pz:& <UʖkM!j)GX7# #lJm29iGs -BRik4wl}8XfˬQVJ$^5f'kroj{}Z9MS_)Xid+(CTƥy)SEt颷fn]G2P 2c)ٙsSk6ϵ1mk&yvVGq.8S7`۰Wq?aV\ oaO`V@%,Jـ7U@-H~1pB"   8 7x0 1d°pmm~ @3w%1 ` D`)x Xe]3 `&Ct }w">gm/EɩQqwMz=/ ia)U_Z{zGT\d2£-եS| t*.Tn #]!nUg\SCΤ1sziZ]7կgI*:Β6sV2쨦CYkf):k[L;µ&e=:q#6,=[:)Ù,:I<~} eqEwSԍ=dܮ RLmVszUjA+N:,KBFkrkd|~k@AIL[!:+=(*ޯ+,\u߹o'&$[ R$ϔz-ǚvD9WE@sco"͎W{racs5ɥ+g#Lt#KJM6=Ulj^,ʷR/|]`K*Z;hk[kv4,`Z0Ԝ(LJ$X |nz/d ƬU\:k tWAYƥ~ Pz>X4@'>U*?KaZzdo8d\o5`Ʊ I)pj߄paA!ZT\yr.$1߻8f,ϤlVQOڕb­o~3vw/~ͺfmn_-KA,*hٺũ'Ϥдo`^!7z߲ٞ߯j;"~kGGTB7F%ժk\<7j9V{]QoUMu%S#5ϠMTJJN"]XV'5=FI)mON^\QbƷu~v_9aYw4ݛȧj[#e 'g k4 z^XJ/ސ^5`]<~2o$"XNXXxw$)C#= p7l 7pH/Xh| ʅ) āa6fd Kdh>:pk/fA}F =uH'AC ]D\Zagh1{f`$rPR l ׇdO8aόԪ ջ6%^EnH]'9Y_!d}p V^K%&M)U16>N' srYE׮saA~>c oõIR>'9 >[L۸YYș̮pqmS(d^@.ar EwchiB^TrR|}nWJootZҮ1+GLȫb'cT,ye娛G3+̦HJu-:+X~Z!нR{b>Lz7=^40q||xKQPg yk=hHřӮ$O,x<64|7x\e_ϵ.fOpS#Ro:jB%tUEYI)ߦu=/RTy_6oZA0,up> $A* J5aaaogLsC }=U:-1O3 #u30 d`ct#v6A[a ,4d_D4ccr94 !yA4uP^!Y|dК4r2-?۝bs#Jiy~^&!"ѷR&G_?e{%Jf}eMJE'eI2Z{4?*$s4ei/x\p0"y,8N T|hy+;SڧS^?vo[^WXV?$QΝlv\g7էGjHyF2܄)@ '驋;:-H(U7ƝF]h o:ė2yؤ2߂υ]U̙rf`&E)%tZ3*1C-Z߮*Tx?}A'+.okKN;kO#LbO˹g<mn3 7kU( <CQj@ñH#xxdhآH"`[g1Rx>jr!YD"++2#ÂL/B^p="B`2ƛEaJaSdӌB]@kq_, g.)6qiӰNG[T%g Og{:%HX}ONjZ\d$Ef2ip⦘D8-r,ol*}@DQoo燶ǽ毤}k6uwSdO-b}euΓwݖTyjfygӝ2!rCBU,X^Hyo(t* Uzegן8𛭝MՔ/ֹ6JKa;d@"~&06p696jK1(f͞qB\c` ;f%>_aW89,A4A]35py؟% 80t%agg#kPt jBV̐D^#gQ4iwX6>nG,вBM2`z~[ gTg[[gqkֺ@V_7$ySD7$$H !{lg먋pr/99ק'::Z* * mΙ%1$j&g}%E`39c0o@! 4oq~c<}ƙ ܙ'niRb0V2]R]Q$)Մ#MɼB׵J0)Tԭ܍Xz{CzY:zP["NʴGG,9Gj7`* A\kxT?iJC7Awd/ɿ7S7PCr+TL:9PQ+\ݨᔟbg|ڡgN銕KeNn^@.+u--cSb!T(v^Kp;2oebSԏqbyRe N[vv&grRdl왢ޭ'y)"0t5⿥VE{'.''55m$2I>/y nwx yQX5OgeN:(gE=}^o-u1ہײ)Ot (o;6N/+2y5];JOu41sTܡ˃5E" hI튒0# {gDhcHB6='Kf;jrє̝ߥD]TTQG~>\s+V`ϐrD@p6`Y߉ҁ݀z:(j!l>w7 `PNNG r3A LF`+˻` 4J ÖF w dF}x GÕ&?&rʂwuج&| q4L֙Dl!n&ln\VR;?4-%4[TQ>f>QZ&KACVGef,LF't"KÌWAa+)l^Z'dCTJ%H眹i R̦kiXjv5)ʔFYP+rh[}9F~TN ݾxeAMbZ H鋋u.p칵#+~5cjS(4An]s-?q%vR!.~y+uD}%zɽqⷝ:f:ps!}qj"I_Y19 doh۪_{KwdYKmI6zCwxFQھ.ڝo,Ҿ.i@XYܗ{cjHs#t ]{ǒ_invO $sS# Eɪ=>yB!HC4go8J{wk1@ oMZ9K /W )q)wwbn>U6?27݄߱U~H2j}yu65XkI6y!FY1Gձ]AJ=n-4ZpvFrƩOsO|s!rZ3B2h{P~@fUAGL*B\= Fa Dk=9 |[?,W`20`vp|"^ŏ ڀ%<7 +? n!rX}>0"L Ɂ:;kA/da+qz\h˙6bg's>GJe:8Y嚒 Eӊ7ޠūjR+uy&#Ux/LM]Px -!l?s 7~QIlY!A;qY26%-%$CIڞF,.ASD_g:Jk$5-5]Ds[ 7ʮ+NZ|E},_ q֑y`뱜+i5'+#/8Myo|)KU5U'[o ? u^⯑IaW7FNC3drygaT׷j~N*\_WzogӍrm^eZ?h瘱\t ^u8NtL3w#éꛩd~Otw5#/v]bdZR5^oG5=LHrV-=;Э]$2}2:ZOY$JgT}*ۛN]TНZ(jmƻ|#;< [(; EUz%\L$yq~ lބ , `; L3/ \ׂgQ7>w!](l&$^ O}LҴVNiBZH9b-;-@ OB Jt66|DolVCj&#v^eYwJ2J}EءF)?G'~ȉN|vM|o!ZRJ[wQ_jVDșio$F?)_?-'\\Xk,O+()_)"I${ھ'5C'A[n{g Rk8b=>j͹C8WU{y/mF=9)*%yw ]p\BA_8^vYnw+'G!-MI[eeFlS㬳79#Ydk$QXj݁)YɹK_L*ǷJ6ݼew[&sTGZק6?~ ªPMtɦ޽*j60QQK0=E״#V(ˡЩroF&y*qH[$́um=Ӏޡܡy-bZmF℺R-Q]*zz.EyiaT7ɰ0jtigjmȞcB/(lR~ PȋﺇJBh}IhUgjg,uV~2A}AmAA''n0|gCWC'0TH4;!&$m)~wO fO94(#En* ?B@QB_A`հqZ^7ɝ $8+4#@+ T>,0 ~Y8=2  aǡ_a`еj@6`А%Xq=Y@^j2䲄KlhC<:F1TQYtu'qrce;J5N0I6R-hvyU:_0@uh=[U)3^yjfiY_ӰE&OT5SiUVΎ=Zy[yO22K@ a8E?gYLHV˞k*MИbI~vфG:G .憜 nE(_߈oNx7<N@Pv nAl-K}I |984f$kph5\TF>7|հ];&iŽ?#v5p<4dQ w sk?tQJM(j$ys> ֞Nms/$_&m0!/v~ >͋!Dvߌȉ|ؠ ,NuPg*l?k#wZK0y)9e9}(E\LՂVV vegO)Ms}ss)Njk.hyzfC::T=F}RSOץ+q?p5nAiC; TgI$U 0+UIv*:#,5,Iͅ't\H;i` 6QQf׳ɏ \gHRbL}#{\Mi@L^}M?J'=n&$]RM߬/L\ǔ^Ie/q; oeӠ/G? .gjbkM˚+ ) ?4HC}M'3t8x/rO\{g,= ݈4ZֹV^.nZ̄_^ d z(+\!g] ܈x#.#Yef÷Q`^/ vEd->^p>w ᷁Ucpx iС3w|}|^d I8r<QruNXذ չ4@jI~Nj vtkbg5'<;9URE\]&9Q6>;~GyiYAQ eigUO35% ԧy; K8ɿ[>`J`r<*ɘe'RDwP+ ԩ: ̣V n%5i 4kDڧ$_FaT`BަUTŠcpZB/CM[iۨf.2GSn\{#{& bOo .r`~*fBh(iwz\Ϻy&J&i@ITEĽoT1F51Ec/z\QONGց C^boq0`cz\tJR,Ja= 80޿ݮ` $ N? -:F,q柜q7jЋ׊ ,e<07`x¶OH!Tl:õo ".Jkb_eiUsiXk4:>֚֚:̈́8WC1Ő& i_W6f2Ë򑵔Eg+QݗAx"C)YJ5OL ⻤m6M`{dXL<pA9OV.a=ꍪ?^xf,q^SMD3 Ϣ%:_OsC+w @N1u3`~&~[|?D/1  փ|!!-FsJ~= w[2f2{}Jw"2Oze`5h\ ]mmb5?[9'bq[:ݶ}MkB)\ jho*^ʤ5[q{ykߟy;kftsN@yW>N`4eXIdY. )ż. hʹ$?O UJFڡα 5Y6V@9=qS/^^> Gq[⮖eY%3*B>pô 51{;vK3+sk@{ƾ}y.>d)EKfsקWW`V1bxLMI WjOo2Ԭn -; }tvҟ:85fx`pchZZo2\;WgufOޙf ;O]PNWo[.~[Cyf:l?xi^S9`OUcaMbujڳG*]MYI4;T{i,|GgN PmCK w!6`L52<1>?m34 0nD X~ܭ{@+Vk﫯U-$Ѝ ^.q, s8fɼOiٸ6uudkV2K78QR!",ˬ|1M ``1y#/"8th9e !`k2_z#.4=\GGE!P:_o7" 'S^GH9kL`"  >l+dB̈8__doZ^'Nk"ڲyYb`٣Vue=4yBCq*1f4%m,sMswmy9(~&'+4|BnS1DjTgکBxKB-z$7tF賣H1ѹG'n<9Vwxs+| `G@Uo?L |(DF!//#ss:}~~'.$uigr$t-1Mn` 2oA^n@+}jVsV+'$3«cဦLsIM9%2TB0Zq!q MH B;a[dӻhѵZ>[*ʲ"^BTnP: ' Ӹ1;nAVJo;RgYh8KpP\SUtȖL,* hLȒwk6 m%(jEPk=7b4V@$zOiߘ쳌̿|o 6<Q13.lK8eľv…Q_bO>gd|gQu~c =W?{;g)dd ͣޥ-rrbv{Ӄ㴇 dc/DzԹqSIKǓ&:I׶v_hTx%2wGn_i[Ymm-/k0)~o2E:T8fh2dgCE Xe#R$d%d|%;] Ļ;djܗQӕu?,svu{؂3h*  R=A|+{4DP[Ɲӥm@&cCN= SyxI P@(:E8zh1yDxTAj"@m÷ ;tT6*i^q:n u PI">U<5idG1ROUP+%p+ }3xc2!jp9< Nij=KL_-J"9WMx3W  Iw'BjrѐMZH;DAv[#ϫK{I\Gbxyp͏[&n7vsk@뛶gm/ےۊ+۽[IE˲$=SBZq 9VXhT)/!1.IʕUgКU '2q\'*7Tc;WtkNhf6^~ԶB}N9lMf.EƂQa{Í!.}9/%/,:ڜ<,~-T, 3 g?V(y#+|%l4Ni|6Bj C^ȰǧUb⑁^q-|s e~wBUhj O`*K4+Vq}]QCXz&"am`d]YLrDP?HR wLP@ֆ*OJKB^^8]HOz9%& X.i/UOiEwfZ?jOIp.ҵS##BNLVÄKw.VKK5@dg;e3PprӸnxj0wF߂o}w+P"A)MX&ur@߷(EʦkA6XNoBKAb.QUM4dkT ?9;<4%Q"3Dn|RSFFe` "7_;ݕ\s8*4#1~1]$<(8)8*hʀ?{ߝ>!=!r!5KzLeE73ћQsO9?pY>*+/!nicRE [\OQM6u8*yVWzvrI(sF34R ?Pc.9{KFG F{FJo8]WV]:--S 4HU̩fpqM݅МoM 4}{^ ).*  =2<@s'Ym@U4:j-}+F(#3M5t3xx慳筌+Fr^׎α\7i3-7 VJP<,1,D=o+}U6>~CcQcQ3dL3URjE%EzjM.&-UGhbOqtnȘd9JqK?_` : "S .|ǿ(@Ġmdh5C||h9xdajv䢨 gi9>*x-b{VK{tG);Ѯ]6Ӳa &fzg%jvqƖ2i6%rk\H6!&FT*2HoFIV̇OF= GK(H%fݑ'*r/fϊM?X; pw rEF7 4m++RЇ`c'c": A3o q?}@b1;K?.^ \Xc.$$jIq<~4p߮/-M(#kJC7nՎ72tWx`"Ts{41DΠLqķFd`[n<6?ȕѤ }S'x)=wLLKpa(\0WdSV}BOI$\Zqss } -,0E]<kx*.b SL6ezFH֥+f<EsO/.'jdQ {'(2]UIFcW>Gxb֓9=5%i^IƨN5ɖU&G;H>qĠJFTu3#Kpgng|^QaG5+qJm1lP)Q7cuc+&xOUEkWnjvon]^LՆ[a+eU&lhbY3: s'OrP.fv-[OK4~,/͸\ԪS3=_;?7,/g3 _'on>r::`!ҢÍ)-m4OTS,{Srs*zy's4ً[x[, 3IusKFLc@|r--y>#y=5Gp] 3?_Ͻ,svȤ޺}0UɊ%+CFBcC" >_  ʧڕȌs g_jhrCE m@8DQ%khywCl`Ioɓ]A[ Bu<́yEy( |LQէ\[&-fc9nqƅ&,,F!c_,/-,- wUb=׹\X?kNI2IIm{4(MbZcɣgt­ SvNܯH7dK4̕dqoXc D(*앐.RTlVRiwi)+ i_*'mpjFJOp{#U'#CQ?E>J¡aKqg913 Qc뎗wv:\ߘ,lZVZ_S}*"]1%`>kf\ L3 Kra]Ȟ9}SlP%!IP})lH"Ғ5zղ|E׆"6.VL KRF742Uٳ /uȒg}{ i[УiSRٟOZ4}*-8n<F 2U֍:k5%B| l^˹^[B928'=PޯCzY ?[o+rجe .#a)i* urWpxU\*;))whtF(nua93'ZF/5 [\pi Їh?kV5k9IVܿFe]ִPk=`6!e=28qBXnlw0ۙF *[q J,)M.2՚k; mV/ey{4X:J?i9 5iӀqnG }z)? ^MjlY]G^@};=لl8}ƙD?ˆf?Zs~!w{jѳsݧGG|(q?ICxԻdsvsBgoo&E](+)]#D/}>^@p'4 qWLbk ]397Čn1kTU`f>ޱ-jf \K d a5Z=/0JYjO^sg6Zu|0@/DT5\.WHgbXS+2’$}bDμ1\X]F_wlÏ'sWx'6 0rQU/pzv$~݉.υK_V( ڰi7ğ8|2r¢Gn0†4s ]/PN-伺`I ,eaDnZ:xZY:{^n{Ԫi>^WH nΌe)6)%ʍE~DG'Jϭ4VvvHiXC{]2Y^_O4z-zN򊲚MKcDL 268@OrogIu}-փ[G\BN=d~SDCKX*e>xS(Pq/\3 M-V&Уv#aa4o0E>Ǡ5O{&f/=٘l,7T#)I'j~-$4 grCyǴLB9m$rD4~_ WY+iloAt b"~8+|pbk%I:/6r$yNT%@nnz@Z:p$G~C:=EKSgҒi|^xn8rll`ChFAQNlKd6ZVkXRBWقLA(8Gb*n!ZDUvaY)!A;E~J0Je!Ջ5u5g~WQ[xJ wA 2%{ԫ)I@CbM1I:BtYOb"o|Nl24\7za4I,Ropz3ݱгˈGpEO%IÊUPx|YtφO_8:i;6.]ܣ`o򉹇%Mg!.s|9Y8 zg`;,¶,T~̿)C2.M_ܳЏg]BL> X@ᕬ{s+8ɚ@5\tNDY]k:6Ra;ztIZ8[?>D/֦5Z)`t @[h;6U),Z]PS8Yuފv-Y3sQ`p΄X@ZMK^>eL%>uaSwӫv Ww# cFfZd"՚Vm&YK ejaK/˭TŚb'soQRݑ>…xHhX>+1k^?jR.ԵJ juzv&X!cp0Z}~H CT GxM5V]]uWT@ iAczԽs"`w6k'<~9y$pKuRa0N ([Jj,U=-iKx}p] Q.vixW+b Z'臝=WY6ɲ0DKY'7Phk3ELf́xT.t ?qyUe7!cљeЀnHSտpҠZe@w@,rZg_idBI -IiL3[Ye]'p yopהS'J_ ('H)@n> D(28hF͐U0:+s!+?!j*e)3ZU 1:P!✕n6HdRJo^1=v) 5a1iYJZyvU|7'kGv{ؽz:|p߰ﳠ qg;u$.`˾n?yɏJ|ys#{(k[xnҏvSu@QG*ə:?5@MT*[t5]IsrQs#n)ϫ\pR8 :Ƕ-=/][Xiܜhz?dJCQ留Rэ |mHݼR] &`f~vfj ^'VrHG ghuz8i=M3tSdge;tm\@l|*BP 2/K2 G>s3`iͳ}F[^zCO^p\v/|ъrie` TZilMfx-P^ 4M*H:[0MdOR(ԏDqvA(h=dziIF ֓tG 7HV_U cy( 4ۦ"S#]RTfkipgF'R]T  }h216Hmq{oC9w}{ ^oKCR7$e%cL ! +]5ߔ4 "seӓ땁=%'cE(#tjeIDm2v܁ĸθجyjSj5P\E8^|oF쟂 )?ŕ忮I*0uGrGdѳLM(V}`F_DT.cd"@Q5 <҂_~liK,Rmq&X۱Ud}9Rd!z&BiUNBumŴiB)'4OILPpvBP 2QX34 j&ڸ[f#;MAN+mcɾ€WAa}ueB%|G'O v<4#;]=?I Y\%H~lV+%%tWP U0 _oZʰy :ې=l7twyiö<)RU\nzb 5]/n=agv]X1}$e8kmr-LuEVMlj54gC3ީ]2hEtՂ\+@l tbZix.-(`%Krh]k4tWs֦΃rMRٛhNjf<5a.>rvMj/wZ#cA_ ?vbMpҟvGMLfnS1_x JSɂE-VE>"xcHʩ++Yyå/<*:bC9!I!%3{bG\1;o]H#K|.5(>19(-/l/ }T}KƗƦsj5B R,YgK!K^HafXIl| e!Y [d{'/fЮO c(Db/@j$kr[YYq#ChD=qn} '˖z +j*ַmyvܯT_"K=tw[3L3A5B*Oʼb:4/4< /YłZucmةٯ!KyF!hEܜ'l/߽=TUD+V}0kdYJjp9)vTݚJAZ>yheTȲՊ90ݚnf?ieaC7XU'{ވ e'$OzK2 xew\Y#٢lӝo#.7'oDhM-b= 8d2ƓqszKYdx.EH?*| P|Ս$qǐPJ&sV^)Ӕ1$rk!.W!]xѴmQߊt.~RjHf~ A_~!b DQA_y9 /,#6ƐpK5]ZxȞ!dWcc}V ɉ=(īSXU;'#4*4.%PQ95}rGEe>.}ryyí=sFg˓N:#_ 6pRڨqm#qIWmiyU&i}L 73u4|r c`J/XKQv ]ͣw`899Ek-]T*J-FCZ`3Y؆i$jEwjz.*aW<#eajemrP3XAozoWGO'.n#YkYɦ c-z+u+D?RLc)P ރaOcJT-7d?t 1&Ť[HUh(*t8_k]lvK}2 z8ãՆ m:M9)JՏG&x0qqXV찪ɸםm513sy By;NIJUɎ`x!k;]V|U`3.2B:i X2l e;wzK /6YffGs $*g2[+kT&+*˗nS'g];'( w=`^ߨ9.J()eTo`o2D5O =$ Awϭ\UW{jTߔeIUӱ `"l|9j($=ܬG8? ^<ptBHJjlQOM_˝ e.1;[R_K/V`D@3VږזsܪB}LY<&4;9tZWDľ{^_0#>y]L{=)5^D#^ZK,5:={QEUÙJF_&>}@>awcm .>+T$bk Tqtx<^Y¿Tr}U#~8`t77￾-֦叻oLv_Mr/ߺ wU-G_$(#.[\d:L59 t;rZS~5xիo̩ƗIuI4y t~Bsm7Y~ؽ 쀞f! І@ua1Jvwe;sF&!TM36Pz '@o l%rT,?B_$M(c Ԩ{F}lagфL!VXDh7}a03jgL'?!_ ZYѼ^d~QxkN|03ˍ=M=(x+0+I KƏScnWQiQ~Ĺ=`sOwA],畞{v9L=Gh|Y'߳deb,j&M&MmTft$(C> VZ7?n~Զ Oczp쩜A>A4>"-дhc2V檰hWA:R-|zv2 W 5?'cC7`؁)Nࡀ'~T7A(03IdU:/|JjafGOsbyy+o Zsꟺ8safSzR/OwpuLɈ;=7F~8[VQ*+0͚4/Z|d_ )C#2eN'R;B l%kn oaiw6/^=jqk5Q ]?5]Л;`Ggr!Bŝ~ xVTlZf*>PxlmnbӢ̳Rzn׌i]!v>NPЕf<0Aab~": Wz.߾|oq]{ȥ_j$a6±Rh==O?X@aZLzOuQ?0Q]p򢆤sʗ6$ӊp*)OdꨟUN_'lpm_f:MVYڀ!H7(nZJ.w0S4c=эq!ǘ&)߭'4Rmf/&ۘ:J-Z  #i]dž;< IIhH ߨh_8Psw p"=UqMȎds(B/bGPs ĵ-?,VDՓk/M/zպJwHhd4s؇H b9R=MVi ]e:6M/m踇IzLxdr\z[ ũt` 20٨7;nR]RJkU aRgbZr:@N)z{@I9r-Fn,^8B$j-4\UrԙlWAb}~Sc/$N/, nE"^bR71ͧckJIߨW3 #㙢-Ar XRg+E~;Q K4;1:=)ezֻ¶Rд$8Y)"pp!&soٴԋ@DQ^MV'cXkXi({ =} {9жO嗆1 $^vJlo햗&#}_8`'Tvfe<)'6Nn^J6x|e"Xq;Tr2AߚQ.ܫZcɵZ0Qxqdi6<̷~L[XO H㜁vW Y`jND[DDj-?Yoxd vKHè-]څ*z0 ?;k)_'z*2Y4R\g!%+-> N6h zN:q)ڶHQ?U&Ͷ0x p %TM$ Z]rۓ5 KDbMWj[:a XoD Kk&g_N3h\B >3Y޵̂t8C2NZPy5YgZͣ!%_chB4 FQ[GAb/M;  [F@ݍٱ) \E#CĎ-?>9';wsx?\JblmymKm"n>c"ȧ)+ӾZ90QrTtԌOn\X |rYGc+D,CrLό޼3RJחEG] S(o?.ǜII].l-.xX6pi]qGsc2]Y˹u>KpYc(0|nm\Yܙ'ڑ6Q;OqNL#icV͈'m^d^(5;w%Ox$P0%` D#adXTdVqCmdu#^{Yr#Ɗ[^KoR4nm:X4χ#^9O:f6orgXNU f ѣ뵵U^fm>5̿@WV5Ҹ9:?f/o4(MWyGS1%E_ Y7ed__Nk땻ɻ50慮ǜ짒PLˁˡD7ΏO&QMU9KU4(& FCSƢ@OcE`y?ɪ.Cd4c 9";1OSgmiYDOxTG~}^:9M%eR&TRtq{b+r\Q%SYҞ;'\̶q'R&wݗi+!w3">?z~[q9gzN;Sb6rwOSdг&MqRrkl׳ʫ˺i! 8&=w]Uk(r5s/|_CMoτF6fusmzMïC B7Ӻ\#뚻=AEaXdT6V-#W8NcvGyo4/- #\wvLL_6\">VظM] U^@: W'd]I–׾u?|ޝҖ@v}t?kM ]i=!ˆuz4)uَJ;1A7w9XIb/\'=l`6suɁ~[qI7ϔyHTh&;K+SO@6쫤v3n3Ǜj=T؈tmƺ8G8)XD2Q)[zJ EYLV wɣ2۞h ,5ц(I[9= }+N 1'9CH(?L3a x`VjI&| ZE3E_Y2POret plRMaOhh!%&>s^ D'$#e  f+13dneYeeZ?(zj;N= ?ya~҉T3DB^$xe͋ ,q as8i/M > h!rBcv[W[ZSh!) MDWią4Zv#*Ma^D&7^E<mT I^ &+鴗d ejeSۅrCX936\_6&0\ߺmkö5Ƚ)(M^;BcEe&veHle(y䳴+zJ_?wGZ)RQGZ+#e%DsvsxCCYi59Gʧr@.ߦߌl WxTɡjN~Y#eaCØA#DD5bO07D)EGMhν RV'%KNX8U3Vx8r.|(8\q[?bĉμ8$#`0Ϭ;,u!&qWrxadZۢlG6VO&jjjdygc7Up -r [6C9$p\1#KodFHkϊxM)Qӏt.O`Eͬ-Q=ttX SIZb0g k) ((-D A8BW`d%aB*Le7~B9%>{Igu+ )_OTqt} _>-!uHK Y;⑒gü6^tmmKNsjCS[[i5X> FoQx5~Ǹo4u؂P;r\NW3Z. {5r_sϳ_` |x r?"y%kLC3]j/J'U(L?.E,|Ӿ6B>bhO hb)MɝݾҜWp_ X8P3ΰ)z1[xm<[`C &{{ )jB]Š"afEx8Q^6͛DE ugF@OIR-L\0ou REW_ԋYȓ6R8@O9GމuY7zqQݐ\rf6]OJg2b*[JΔ-ObW9K0PlZ|£ָ+qsv6W{`"SJ0`orlE!8orqSM_:=UV ċVLlvoM ez.ةT)föVdKR6'A l%2NMI@m#鉳I)J^t @[ /C .F޲c8\b*l [ğͯWY(#b=t5O=aaY*׊NG7>mm7n︰ҫZ)M&Z/ΰb 2fz_9P9:baIhmT1dkmMIvaٖ{u,m 7剴oޒu zg(!U7O6Y=I1,&oSh5}ropCfca(s~}Zm$HY.qh4*E$Glt*a^j۽˲Ƕ̎6+#w-Ƿ5nul;-LKGp;T3 N )KF>‡TvT;Ϟc;``߳ ,,S$۠k`wy[Cca7n$,{+u r ^ #zIV⻨(zD>xf%|~ʼ`,pڽ}UwX| dYfƯت,g!AᏱgð?X gg-e+T+% $Ln8K~ԙb&MXX.-ZFT_Q_S63f)WS8\̄𽴏||:67֍%n?"pŷj1TC9A*ӆ =&(K'^3{R&w-l7@#/ܨR }> U09ؒ1\ ~W˕}לsཀྵX*:T!a 9fLmcNF9C]ηE%nYp COMK>OD+ux9m%~OUvj#Q:AO{.G0 ")fhf3Ľ3ȓ:6ckhCu130(Y+6Pk-E&Dvpb՛t;e%|[oWEw`3dPrZq}ҁa"0ocBS܇?Gߩ\3Q5_@Uʆ}6@l.mT b &s7p97YRց䕔mԟla;;YU=nڔ]+ m'ŔBfcOs[?-XPzl pRkEJ?"1?+9!ںWg+[> "5>p+tr}o'l7KT3 GkPnk]l@2ٜ L ac(Ql̖,/\ l ;Y%>!kf1$W࢑z!bYe`om ! HWQnA?0ZIV#05WXt5n;M?ÌS!H.Ne_\poH[hJ^tm~'[8\h`gU(cdji;:.6}R3Qa M6Dsgq /8p9TkAnZ hs;l6c.{96A^RRձJIHBP`aB[3?8QD.Os_8)"*c:$VI$OPβsfI\EgO8aQCbц[Ad*!$s|fIO U\bY{Pdq\'=&C[ɥQβH7NWD9]+(߸Rz)6L<ͳOz'xJj.!2Ur }!ۣ vD, .Shby Si5U ɮk9ؿЏQDM!pZ} zJϒ vF<7H(Ay*_!6 jHAo"$$tx>E%'щx(` e$H_y37afScS5+ ܳ;VUM\V".=(&C1?Yv~X*b8- Sv'1>n.7ߑ|UTB[_|M[Ngs`|@)E[26]2tkfcJ9b]F`-}^rlz˪dPt],|1AD6ҾO dz~CYݽ0sGxstcY=EGiK/<ިS_uj"pS9 }֭*>Vc;}\PEXˉYLoxl{E飄cx@3۬IfYR#}W?H6 ZMJ7b4 C4tK|K4kJr3HKOO9q)>ū9OG QQuA$m厭!7 &n aE⋥̻3Y `^xJϛ-+HqM˛{{իx3>"*4Qq{A2\xɹ1J,ii:"$uy7P,JL?|¯B@tqZ[ _W bhsR3kvh-un$:;ϺMݮn6ss6>-F wKF.]v2'2e?Vif"Dm5 @55ճj0ЅCX>v eL`s |0.O]OY}A͙H&Zpu+O( w9h-VG&>&"&!yD ~xW? [)DgSgXS9kร;9BŞS,t yßjҪ{ ɹ`?!vmG6(n}Q'6AiF)m[Xok7BTp)Epft#op/ Y\ \DegBg~ ;jC±~?TE2SdYXv==Ip61nMB]\:ϺظXH%i5b.4YQg" w_ޓh~1Y&Ӿ5y֡x;ZZtda<: 8zjc1xl͛f*B%8}cu>mzIk U-^'"A-DjNi"C3JpJ/ 9*~ÆS/%\;Ձe@xzEvC,5q 5|,wtx:\]Ug|=VJ1Ucm‰56)rVh0jZ&қ5 qQ =_]D &u5u biQr GE~QOSHNC' DRlLXq\C|PzJop]q.uGȑAv&"+S=CAڋ'ap3s0t PSͩ5%5num(A}o3ZHqW,'=i3ҁnFІ OK3_b`hݬ%O֐묏w1 ;RrxvK+SLҬeyXX[3ʥSCl'k7oh:f v qh w[i.u >R %J}_%ڵs!w^ ,ڡZﻯ8f;P#wOlqxKݒ42ߚPblH/6ԫyi3 5E/ސu.d %#h"a,~<,^7mJ}7_!]NLAy `E*M.QerY7s~ "֬L࿘~=ݏqm_ff!S ?' vO{rx?  k(.0`q8&.(3NT<㾣M㻅MTQG݌L7~vm1FY0B^RdKˆDv$<_SdYVk=|Q ۓeG'X?^u g AƇ9ҡo:vYJ \?5x *]u(W)3e/KloL&O%T \51T֩Fx|Uצ?э' vT iMW؇XL^.lqkmɜGUgws颟s.6aJà7|Bo{\ "’{5|zz3ղ GH/(]3v׶}w@ǣra~S葚o}5( BM۰ =p ZWBj3\4+.Swh<ˀީZW.)iO\\Ug{>~0;S4Q@4*3FԵAn0F{KF`c g(f7Zl1M*$+d&-δ%Hku}I/Qms,Sp?XdExys|C녗:,wK=_{~\s|TڊO_S5Y%o(LYXwJ 4rp&rd=)4I ʲse+TVF?zn#S6:]CE2u/!VEYEe&.p7`4!R9 :ڗf8'sHj ^`9}%. " gXl6h*`fyo%t'[њ */Y% tnVJƚ ?5hb-AnTʱFUUˆ ?%FY+qP2ܚU+_LPUSѐ;]\4"w-b$^N;9! aȳ ˋO%gc,˟xrc~Lza6dHStM:`kz0'n!!*TV7xzJ! ­/"Pzԟ<;n[TG@CU.exGǛZ#NZjVH, 9?V1SƵ.$߱OuN=utjT R|ljFyuY/^ǾXPpLo0-Gn'tA^:tR>E'NdḂ+7/(/Xhf3?044%0uU=CSTU)"IvL6V K}\C=/Kg6]{IwP`-B/:&d%jnmAnO]6{ ŸEe#S-惷 tǫ &q_K A\n$^rYO81a*G6|cVWwwq~םЇJ;uy}_ ==oc}$Z+wM`9MM+5r3 wD! qm1 _dD ]4M-'bw¶$VAD4K-V1^G+c*Pw{p+>Q eޢt&?h@!f!Bwd\6uCxpw#;2{BY<6R{I:C"Mv@B,&O6g\99;<*pӼ3 ewR:^a"Y)Ĺf>u'=` X|0+IF~ĥ1'#M˚v_'xRq «R]hS$SN:a/2YO:AWcb<_W=IP1Rˣ+$PZxZO\ݸOo~@y@^lnt/*gnEl!d`;)W|*^pT CK.:˖QvU.c4 \{Q T%w嵁ĖDr&'LiC|M!ku_͉͠o +> 9g^02JW Z6-g?2m}2 ? '7nQnȁq#ʽGTN%aCOK'#!yZT :˫ ^cbANhnK/eNhG%&AO0W^VV8]Y(b`LSVWi|12$q6^N}H%-ZM jGMo5MN>m@jAO![npCIB[" BUW1-G{y;M)mEŷ p *C&ҵ deԴ 4v?2/wiOnz9hj5f u(&H%A歺ZltG˞&!7'zv֤0pCy'ws{&+ɧ qd1bՅFrK!+a*lYDKE";:2eQKJ:θ$84i òj]R*Oe"'D{ wwkzRz^-9;{l?C ҉:R: 5 e?R-[@yX [.^{bخۧgy6)@?04wsM (rK.=@ėD9O;CABOאXjNNQzo pÿUIG1jjmvJ8 C,P XVjĭi`\$!dloƺ$c8y&嗊B&75E*?MFڊx=_,Q9[ > ڰNeLh^PPp?t6c]Ƹ g~k@ridm|dG^_u2u \]WAO6$yuG2v }UHYvPb#8,i{U4 -.h*C֮ 3@HlFGoh&o%׷ajrN uE{_u,- i.$GձB[1CSC'bz[S?/TA5xV+"{MΪs%`zIJ>"edS#j>@:vw\"ZG* CsMy'/U6@$kv)`"wqp2Ax|OitӏkQjq`COwd4_ѯcm o5V㆓lx|c/a)i%Ij#CC:ODfsaS|RsDx~ҋzm}~7.sMr07+.,u\u{n HXf.WE՟&~ PvU3I2s~**c+ݥp}1m9;4 L z-N1Ϭm] ;5#.|SwujyrKc&OV(Fر˲z%֏$ۥkDz8tpF}#4۳&QM 80~/UtU-ڛ[t.Az!|ۗ%2akHҌz;HQ#5 뒤ֲޱ[#~L}rjy:+w =`"y.1~g^y.):=ꎬ pmN(@eȩ3suu&L*^SE)r6}yV8KS76h-:_I-UQpNC!U-ZXpN64t^m z|݉b?O(uv›*Ml?ʪW#Sa$dj $]-ese]Zo=!5 m@ulq'GO@̫mJa1Ɠ?k>9Q^.GOl8Wϝ07뮌;O*~_`n1W_k21E#߻V!J|J\xGi@n.YRahPIo m?*[`×ׂ؋aDb,*gJ‚/З506$~/7:wx8c(ZX9։)`{(e@U`lG 7G#qXxTЪq 2cua3IƑQr9o "{b( @ Jxد]d]xy_=.suDѿ3\|Ւb[=\!\$dmq|ߔ7 +:6q g#Ûg_fMe5nB3҈< N@SfUh: Brso>KE~sv2Ȳ_qk֏;D-|Х w`DиO/_hP{sMMz(rs7r>¿eӚtZ#ޡ/ p/Փ[=cp$:L\J 6xrZ݅_ܛׁvOxSzk5Hηc ĜokfC3OGEh/"wCC\ܐ):8qu;)}o^VYr4p,mL!+'гk]ȩgfd 2 Bہ;ʶg #5*B:Z}2 NQz1?U*QI hyp4RYV8z1]純-$ ʱz}i9o\cw .Q]'us\V RdD6=TuNio9ΫE{oxnuWC%hvkfzhS+ ֧*o~X:FW,#$Oөt4bQ9̸L7 /17UX E];0V]cV\u-l`batݱkݞ@_+B4zcvoHU^`\i>[6{BU/Y`撮mdgK뺥;yF~vXp_\hOrx@֡/tt kQzR3G\s Dٺ@YI{ &r/3(E2U+!W4pז`;ur UɬaJn1i;:Nzs伡ϚWLJE'F_𠲍rNYmPt3%%3iG\kLu6k[ܯѣvU +NƂ_f"Kss 㭓c%N&)(y2\ ΂ogƊeO֔8Q RM/c|kk^CsC$ x8D 17K/(>l5{EͧPؔc%9ڻٚdgI4\9g?#PJP>@)an!̼P;]w%[7[ؠfAUi0êe:Gt[7 y({CrV5 r6MQs^[[2̤h%˄W3yOL,*_YO#0".ӭd#Hѝ?MW u$7U@t WMoMgA N9 G,lλj;]iHoU /6dYk# ՞AMW`CMp ̏fY&ſvRA1!-)nýL;wxElcʴZ~;Gf jS6xn8>5.`aAfNCIEX]'t. \)u@(i~UϢo. _7=rpr>uI7K}E.1x][_QWsf6>.Pka 2 b1d!ԅYxPRm_J80bGFJcK!qL+09R Uk ]#'EFsFHk%6Aͧ8 yQ*qf0e$e}o(M;䝐ha۟.{з kTeIc*>{>Pj7oH]!UUöA}]UڕR0i)*sð6jsXs "nmz-_xfas#X IMGq\Ɠs ujE/Ay_ /u32aEVijs5QKGέAy?~>b̹{ Lə,rPBDyӋaaǎ5wU8!z.Ԉ S(yO(s7WJB]c._{s%;^ ?4fk cTQ};IJ8K%:^شP{SIZUtk zaŔN4^.։)ifJP뫦Ɖ "`:|}uP;4&V.lFep‹r?&[X*rop1@2q)55zmҹ!FZ&;nssƤman&i&DAP˿+M48\zdd,> 鸈 /`hhhS|N8aU`#^q38g<qim.{nשYQ1{ıGgIB D9 <k9&$@l`@WFsNn/Gbhtm;}>t%?VOȷZ &}kJK\SH*N]i-n9lyZ4@ne^=|I+ r[y!_#Tj RD vw=)|{SzSd}YoqpB&׃n5d|Y4GxGҗM ɕfu~k $_sza3#gFKU߮H G|+}p~E?$LoGR2xѤ0u0O'~ VǎVkضTku "oLOiM_+!RΓ{!Xk`U'4TմL$䍠3 a/+#]$CҴM6Q_Mv5i.GFaw U]aqz_zUZ'o^Ԟ?D\C:]j_FL7{YĉbGAc&#-a!\[f:ֺUz^LT(rZΔb-H;]_g_'5H @x9(ʞbeˀٵo{#♒=q{C\&O"@8. Ō=5̝$|-Ecd9Y2Ӵ14hNB$8vZ:&DxLAl\]!M6[uv4҄.3 SUm* ʆw6;_>7e 7Յ0oUK]D ƴ ^4P̔ ̐Hk'c>œ:-]Nx9M?GjpĜku*6B45͓jOեM%VĶ7 MWH uYDtC=k ēť' 3c[YɅsJT0oZ̫+8PAJ_k L< .H&nLItfp>5ʫPSS1͇rytX9QNdžQOq23PvT݊K!0XLkJu )>6 N_wK])gXN^9ĺ4B㠤/̛ lh[@yRYrʋ+kzeP08o=Bgbh;/I5+ jT iǚh ;e%#vqi+zr͵-ڭ⥌̔҈$H┼jr^Ye. 0/8E-mu6{v9j)89  nFwl[ڍHQ@{} ^=yRq pۺlwI6%PJ-t~ CD_n\ c^ 3˙qHɿxM*1;T"0 X߈9 |dpxku߳EDBP9.U-V [É~x|*rd5B!RIɜN-NM`JMOmlE{dn>{f&) W?y38񸖺ʃ _XHHJqlj|@8^,*ҭ $>޸Ò}O? m5iLNמNroutuOq:S< 1sP^#]%@RZ][%pT8m$_*V;-*i/ybiy7LNc:7^ʚj# 2/}4_6] +EcK4´)E '\˿d[|honH7ݲVNޖ/9’*_ c숃gFe$*=RїUCp46\dr$pxr {, EƹoUZBA՝}Oޅ*|%^-ZHo1og1 ks}Yܹ5Cs,i:?4k`?AlB>r}l*P0)Dٜ N龚k¦Jt.+<:tl}*nT $;NonKK/Cd"Qݣf{SesrGZɈ^ՈmO_֋*uK=6uz.Ӌ{6W i٢K"nn; !$e{$- )֫xHVEAV֏3NSmuɫ,SYɶhPFu/VU}›tj(L0o$SS -UX>Ӊ ]).>OWe)/ [ `]Xk{UtEصE:f7:E@lە5?;WϟpssF J4beb~kPQp ˁp꼖%p!wRSަ>LܦZkTvW@K)D[0$] '}k3Ke=c=}ej.}.mG5–֖F-3;2No*r+]n_SV}CUL :8jY nWCzo5VqAfi^RA2;5$5rWDVΑ_% aٝO%q:z`u@?s4s%S|RoKmĮΚFL lN9\:ge=({6&G;t8" /'%%];kרּ=#fL̚6u0wYfN/k;IP̢7,{(gej,:UŪK@2eSGkJsκOԌp;TE32k$<,xĵ#u2?ڝ^2ݷ>rNYyvKsaH}?Kg5(c.g˒)rR l#{=>|Fx9ն:.#Rr0)G%$flH?>1'5w#) ýG+9R\KDθOzɹE >{ffb4Ѯ.J>b߶eK7:򗈈廞ƳN>%a@ mלe?y3sb(798m6QQ98k8ąؑI}pGS;ut m+`QEU_˦z/ λ?=s2g5~,?1e8#"%8uZ}\!)dgďn }a*JuХwN`_8~U/w"ˌ1fT4ZM׿vi/_+ $eu$q ~tɤƒR{SkԚަ昆uO4msrx۱6~[# Q%lI*\0d:vXX7WUh <.XQSZnQB`|_!zbuE9٧T56Ҽh8_D##//]v]t;^u\c5U^!؊f+I<#$8b2Mޚx[R[m{J|y _Y4]h.Ѳ_?@ikGSјUMϚQ?-ZajV5lhnr&B¹B=ˆgHs͝[켷jCMzD*]!)$O vkyTV3‹ȤO|AfjS0uOO ?Ԋ1Ԇr{mm~צ@rݹ^@x3{:+O4A~EF&pS(SO!ccvilNIR #6J$rVggкDŽhkNi9,T*|czzΛANg"Ugfk/B Ha70ZdDhk;]f{ ? =DRŌ#0n9GG0A P2\D$Z n mـAr]_=1cJ7*WhHO_[71 N:8j1/15E- Kh,:5Zph_NKUldK@%.cL/%dd!$՛Xop$?և OfU{L@NcL1aBNya_ Pn#Z%4( Wxd#(BaةָTdN Q3 zbQ4{R;vq4Nd>8+VE<⽠Uv..{ }W97E*rOޓvw!%%OtHܬO5Xvvr3%;Ys9%쾄ߌ 9+tDcJWU ~KX^)Ǵ9fZEfA2-*z! uy=W.R䦩ZEpA/%&CcKghGϖ, 2$ Ylia"?QQ[,+UZVD;}g_LpGWZA1&j '-ĀK+ۙ=̷#lgK= *??[IFZI Tbxw8Ea 5;,cHB2}-fgkE%R%3ǍfTl11x'9AeQ=@\1OY/Dae0)kTNK*<_?Uگ|!?-Q1.39g/K`_XADh;5 鿲j"]{|-|3%#8TJĹ.S C镌Gڠjk^c-uvd>\SakWي~?ۚw:/<j,n[Lp'!/# '֝q$g\g~!~#\cޠnlR%N!KXZZBՓDi>({V?+" l]++EFkdž1~ɦF;-)oG50Nۚ'y&o-k4g؉7$kSig'A$đ2R$m~hs@d?+GP@ON Ϊr{S\KLYyrR"gPN+H ,w1sRQ0UH"͐yd!we.YtD!毢bog9s<4>Vkf- nCtDe,_"Y~6Sm2S ~brϛ, ҖL9W ay`4B0vzJ<@Ҙ3iӲQ" #p(9id]C~U U on*8EL^@WHXBuOZ o1Ivu w;5g#vJ'rbZ6cCq {*e#Yrҏc J$G}'&.TꉌI:C+>ex6nW06674&&wo6eBAD1(˖-~to`ק0nR<)@Ƙ[&|b'e>07P§RUx2YU\L3=H%3MW-w,@/W#n`ِn'Ν kF'&g҄L!(,-О7TB;הk=ؓA0U!tU/]AOUl쨱/l}e ܘ'ܡ-z ̄1CX@u B{,Ys{J̮*O^K w**;"{OXp*$[Kf Y}7B貨t$%vfuäQnll'}˚A^(k">p:.A/*~/9*xr~^! R?CZSNAv5N3߭աmyU%y yvX~(|'0PBccXTVbH:JWP[=k+a *5pV mW.LhʒbE߸K%Mb掼H>MFn/K`\o?a0}pɨsQDql8w[9E,CA'q+ѽ7㈁(8Gӂܿ@]Kl!`1d*nB_ipUI*5If%Rc7^ç+Ety;\FBrb03ӫT]tYGx%W19_iKo`ekt=4(p0flz& uflfv+Njf +4<"+#7\FjQdwjS #bxr9 \Gȴ[? ]s{7TBa9>xm~i g3pe50ɪi+}3_"[X-L,.OhAo۔-wZL(7}A#Xd* >9M)IHYpc е GW-1*s.s֎hؒ PRr|Uizݩr-uUt߹.h|'mr(m) ;x>FZ-[,ylo0_bSƴ;^hBa0D--_)D鈜zB9rp=s=]֡ց+? ^#QskQ57_ =bQ^J9b0^&DDٹGoV0Q @XVgZSp6 G%?]oꥦrh]c [$t<^.6kX(Sѡ_|ΑBB ,.y@]F/q"YkNˏ|Son/M_&|K퓽.gj24cL`2:Ýh&n%$fDOjEkU噢I :9*fsrb eo`Lߊ;ΉΊFcp *y3S/8x;DfxY{VI͜@+UnMN*H ݔn6 Rdp!iu˘ ؟òF#v[@ F޳y n>2|o7O<(QZK'ݹO{ c,V ̡R!c~4Vcgy3ef;& #agO;pb4|7jIݢfw[yIxf>hu PTv{~DcV/x+ZsW!5xWOojĨ/k;]HFDzN)}DQ?=#&2w!"9(tYh @T8@h. 9h#،tE!Էw+x3xX0ޟ',]7:]y0 =2aT؁7Ƀ X#<`8FD*Qr rT4dONIJ)#)TzbC,`c?g8aXHiRDF%>&W+u}8t#s7%Q.(+:\thX ۬}.[(]yKĨޛ D_ICbU0!]6ÂxM#4t6c/QJCP2\;*̏'HY2VԨs;yۦ<+͓9qPѭ %f4t%i>ï$\T{xRa( d^̥꿣Mr0¸]]ܭA)RUHJ?XP2h9JDeD0ۧ8rnK`Y`3n:8e4+-5Q*k3L 0 9í{ axD!ˁvwt22 mޅ>)I d$l u]l uk4KQi &=8tyfWM̑9 K'p+)gk]r[Kj;޼9%_mS㐵D'^`,xR©oZ$O۪t#. et w΀aW( i)u4ڤqwO޼oh)0 E7`Q>9{_v,s!ݿI(-dˉ,] +{SrC=[WJXt_Kx ߬:%۪Le`+̷mBIYE6vh5QIu3;B) e ?mwD~ᘛ1Tȓ\iLomjMV﬉fO_Zi:B#B66Q~h,u6qj"9R*uo‚<1[g&YFchq찟eM?L"ڽ~t!wIyE6u.AX;'⍕Z""/*.wWVoy[;&CU[A @3`>4'MD[zꯥRȞx HZGut/K!lvP|(3pŦ6r f^n?dyi剃M$%M"m[3`k:26XK$X6?ՆIgmEߦ%D?.sr6˳/P:sgC 0r\^ɪcj,SlOS20L'\`~{p"_}U҈ֹ%x[& Bx$hgHgt<; D0HZJLRQvdIy3+E ?ӛM*3Nz(ղFe7Ls=a\ 8AWoZ2&"݈Ô)gȖʦ/Q*^m'4 jG]Eynq_iuSapZ w@̓c|3<rq-{M2G}ظY ˻#h‰t8ǧV.2_I$?v"O]'Ri+.csA-AEoy/M/!X(O +wW $?:+K5}TU 7'jdu)ٲUQG%E ?HmL\Ԝ)Ay:!/r$`weuQg]U 9Ŗ sbts-A64ƹPI ħ8u9NcH2)TUpeΑϨx*RNBE&Y$ySJ\`1hSuN*<~Q  mR#R|͘_vɚck8?s}΂N ٜ%Veu ޟ;묫,,{px!Vqx7zhj׽n=x@ϢGѻ|=%>i(C@ߛǻqє5CD5cK*~-_jCc_">d1#!{R }Al"#Bxk*wsE]!kt6E%D(0߱Ѫ$*&m1ŠTi% =X5ZȕMEg;QY! ~ʖ~,,:jHTt.Rgk7#I&8^>UB}-,^9>L|ްmv+~ } ?܁`.2*o')uk?JCFhڭ8*%q4tt RsYư9゛ζ7 E]!4ȿ2PZNEf{Ƃ~,ew*Z*|o[PzNvEnoLOJx: ߧCJ6ܚMr>+oac좹&﫿d5~fcyn6[˟G~MO~kj_ ,){m+veQMXـ}Hārc\{"I/,n曗ڒ3r2>S;h31ʿĩpN vE#},-k St5bm~aQ=,αdh@9U+-giسK-RMx[?|P߶vW}T=!s3ʅz[1Ze\Μh_Z՞ %wd'o9)E3 6LHl=Eu #h|UbK{6l6Y cKC]5c~BH=9,lx@j7{҉꒟8w-)z38ɲ;w%N5 kIķ}dպ'gۆ)?0L4K=a'?*hS0mJK&,ZWF~˶alj8W;ZI<ØWYp*oi,_ B113Î(rQfgy O{6(ƬHޓҶsűeys;p9D`ae.~ t| M z,/ %jyEy+Զm`шEVt*#>|*o|y_푮Cx OS,(>Sec|PGq 9n uR܋M Z8 n+j/U -"a`ʦbb+]aTY>=U{P|:]uz&9Һm:"v@Z_.y1{нD6]+ڹ8)#GA\1;ZDCl-"%zl_)[^DnJl pYMYhiNY%.Om{Qz؋D>2o96-h30H*kęN}Zie,~Sv/g]D`c57f%9uk`V!&4F[D˰xs$M#>GbK(ksAk(4-C9KEnH L+ /@Oײ^Rj!QOwbLǂ6BX-lYENtFzæ^"}<;@bK d؈~ ^f+YoEie/\dX퇕B3/Mq`FdO%G;8ɻpw i&[CoPkP,]u|RA&ćb몑3<$aз%f2Ns; :si#0$c(8ER[Y3&ا64O埊݂h lDj8z})+-Jqvt_M-"P4 5SY5RB/|W'/9oR[ϫet.*"݊75JO+Ogrg_fH)+J!r'G"?7й9ot!쨵VpCYooΦka\#=mO(ӳNI /]t~g8ܠ562[:U9j^U} Vm:|#em 8K{ g.h:|lԳnЖ>X?df<^J7ݽ?Zeȳ6Ci7A{W:3\jJ')#|)nPVЗ \b_̊v,d."PY53kb5ބh/)&:gxE"ј{[[^J:b?0FTYUC`n褵L]{\QjMhB#~gT{@NA;AÆMYʳw4>b^׈$\Yj@%? 9E-_Zu=zaumÝ+G6= 4*Xc$p+}!"KJ2lVal8ΡպSk$Nge&&m2?.DTўvnx`_z]Al:}NbP> ĜstGQp~]mʱѾ{{,$|O3&&~2~Sh}{x@;aOS ؚ/.A#qwp?_GkSVm_Mk˚UEN-)--2mm;.r_\rQyc?J־bbW.?Ku1oGxhv#tECC@;_ퟜ5C*e[ *w#;uHu70} bE^4VW#n>HZ83zrSgKkav]Po$g൦eG qdkw+ZJ؇R*1)<#EwxdTdI Ka.jBg`'-@3l xQ`]&긠9 kVVƳO!eKK)r3BҒ5.f%s 78JUtbwEWxt|̴CUgyQee n+si޲~TgyHj_?kW6?`u杬"*wx}oʯ3y;eiXiXA_z ?cPc//_5$FNh;t ھOqC?Ew}O_/ =ֱaw*J.WyQ{MsM 6zrSްoEeHvvDa$J\!))`Ve]MYQ-CJ 5<"t,Č&0t Ri8N~(SC&/\?j+,^,*\ |tv_tṅʦЧ (;2Kvlu/(TC S_JMu'E >8CQ+RshLufTm )p9l>͛a;ٳ{t\]t:S g&-E-s̷Y#5Tc Բ@-I<MMFC#?6X[ >k 烯;FN4=RiX`i-8=_8+/phx0vr z?A#e?*VWb:%.`e: {oˇKGl m.\k:rǣ#6Uf6N*m^VzGTx7| 0Īhy\f11((ٰlٲ I%':/ x(;9qjr0_9مH326ayPj}!P1-I;L=;s,~B z:)A}nݹEQS}BhP_IGص[>RImIX嬚ubnd|V; Q]؁c01=Xf&Q3N5|my˷ p<ֻ2U.O1R@+ݹ^v;,G:Yϻ,i>[#yWAXBEvא Xg6w&*=w1YyTC+^)-ot B`k[VCtP ˷}OFED\4k#_V1WWtQ:帆@[ 3!uXv"3~RzVd1'HQD9by&$kS,Pu?ZG6Q7n.R UZ4{o=4^gueq)>?m4\S%nMNvhrjb|Gd }\vVnr_(TRa%l.96q n66$HfT3ͳ) ->nRP^#!):jf٠ Lw4fՎNZ]V3GDJ\W{Ar!eeQ~Yy%m8)'dA}0t'}-ɚ:XHjqxQTWpe>doMRb)FDx]Ⱥs)G/gV}y*Ys%]z6ctc5|js MDʐz$c٬C G!;ՀAD;xr"_gF|ˍ)ndZh`.j C=)4"Cs"28)p͕fM5]"lR*2Xks_I˪K~n^_N43md ٤^;pۮ{k,[gDk$6p#塣9/~;{rJ37,K/#o}s}ם7}Rwܖ 8"A=%rM@R^P4f&߾|c!Uwx!&U7?:^inPzSO=\bw_hʹۆ:**rx~v5w[}~mxγfVD;X92(K pt!h5lgLi~2E^0Y 솦!MTۦV6p%v Op}vwG0T ]q sܪs]bf3O ƲVXŬHY]H^keB< Vx*7籋{eThєel}ʲEqWN/\MK]BBsWNZzj+HKPK9]Y1E]|ڐ{"q~i7'95`@>->lqyNgӛ+jl,f\ٸ5Q~]9[^ьP|gjP$ ]$e }Y#G#-m:2;w56DoZuhw#ڟItN]kãzNhYZh}7SG¨b.6-{͓ VJTmiv xcDƸA-%w]o+ŶOk@Ag@pADj}uê" "zjߑpi{r3)cw 9٬1 ~w|WW±}1ӱ])U iK}JTueTԂF9z8?źV9ejIt8J4+.ta?D]}a{TCpz.>%VkCd1G\3ٺ[ޘ+q }DFM%WVelYuSmϊYkqXg"H-{4t(U[-a^, +ӯqQPٵ,zg¾9J)͏)YIԡrkw&9+Vy7ױw2y?RIjϤFv=s12P79c1l_V߾aT`3 S%|.~l?=7"a1FC" ϳp;}Ϡsс*NѲ T_[[taFlO4>IbOpGBĘN[Ovc.J lf%۶>Q9T~pw'-~doӭթL~,.e_VyyÏn/fɉ-#WBLBuE znӵ ڟatpU/T=P"3 iErm> /L5{h.(ьFe9 [4UvW a]jI ,Xk}o %xD t4(HP ¶{[PznTP|Jk8  G?Mr.&Vmṹ\ݴ| ŊjRIYF[1^i+3/WvЭH,c:I>A-X \*b9z]]#VUwX8ZYp3Xt\╧]Z ܳ%[mZaY`[1ҭEIOd^osx]~NF)zalվ#]3{Un?7t|u1rve벴ګ2~ͺt"uZ2nn*OLaCQT>K <2v6QJmž;/+o/G*1|_}swY#JȈ5R _1M %I%nW5>#noi7(<~?47Gd%>jB b\jl%!2<8F_YSU CDthҗjz5[V*eI$owgPo=y6o蒯̻³ѭqsQB{`\ +`o~u>pCC Z4mD3w/).9)».ءweD_`ꓮ:`J8SJHًp,߲Ӓdm&o럫I:!8 dD gDޟg[ VwWULQG1^? BO̷O%'Z-V0m>Tcz ^FP>&,1PMNtxFG#,.@8 n3JZf-RCNGoUQQuL/3ɨ pqzP_mkix'n¥ U\1j}:vBF(er`Lm&YAdAp"rB(wG]w_+zSHh}%jۈ$n+7O0 ~,|xS̆ i;*$]_[mS|}ƜAE?eٌg2榬Iһ>Yh %iQ=VL{V)Pn8`^11pEs 39N(3Rڪ"n 3IU3$Sy'4z14#S-umkM%U Uo3 eJFb; ؎OmmrO3~O؆UzU4.Fq# q]_T^Cjt r$F88%ut ϶ֹ\R iu< 酝@b2d {Eƛdccy<'l)39{+Jb}6فAfX"ޠͫMT?t9Am@:_4FH,[vCtx3yXcXweor1.A$fBD~u{*?i'GZYh\1&` S%OU*ꞗ]1DzPqXtzRMYr8%ML1B#>q+ E;f\ՃB=-0 G[z:wJI['ZE }^z9AffTz!hI׫XCD|0L a8,YKa(hk]BU՝;ɼ %GY-,ft4h;MA^uKi+NydoBze7^˔x֢+6 6/Oߛ(kFfoZzbC um>#-1,]/LwgO2Å.CvKf׌Q0ϗ/w35To`F4OJ~@΢?r/pI=XK`Ra׬bɗB,Z-"nΒ|2GB_Yv)NܙטpGx uc-rK]Rb@hfTاfZo_,1/o['È,09ݍ[Mq`t 0﹏ 6_UQUAPUIrHI%CD/r-vj8 5mUɛ Ne^$u>STky*2"ު}*h~m =F!X`kSMyx 0#r./S+2(TڰT_5E'hWD %ZJL$?0^4A$z);΁+TYYjLwŖ[;V'c,i*O;`A}"^qLհڎ; 5kۗ"MSJ>4Re=*k8O%_C3YOt oGFeDAޙzEQ{VHc3C޿<LA'P3%k;-~ۻ̹ĽѰ۵fo]dFl|f5NFZoɖ_ve2_T$h@ȗf%N7Uy+7]5G"fr9zoIX+\^=c yiY繙ysFpfȮi5lfaF({LG-Jl YVuDFʸDfygK ?K;] 7-cY^eX3ζ/ CqǬ*SQXu5+tBX}/q\%*VZ}OE֋_M2&K -CQp3 'no*>(Wޞ߶Cnsq  Gnt52iJH&bvT#3]7$S^ "! Nbzm w8~{ 2RbǞ)u?_aZdI||&Y1$UE%*~5vPӸ&p v'td:+z1exTqš8biK dΝ.$-Z\H߼Χ9ϳ^׆H>O\6%!L71{y zF2l6oYNVVF%Rju>Zùlj_ӝјSuW6iθoΈl^UD^u$qW \M-AX mO#tQs]Ai;i̛Q,:&腮,]Xf6A-H)mCwݺº_xYO%KH^gR?zqnGScY%TN(<%p'h:d3ܳ 7L!a@ю t~T3Itl|wkC~&Vag*⵻ET `l^In:S #2vMٚ4*mRr"p|׎[3Jb_l9 jX]Mb6fHHO7lX%{«(O껲tUf066}/Ϥu~\iȤYgd̩˹[!IX Ɠ OK]--U[MrIX@B!ɯ)^0| %bx1ÀEʕIUɢ,eӁBzK-Ѷ("AWRj<7ȾF+]y>vz<ϴɾWMSW{IBcj<ԱَYw{1vb@.L,DkšЮH qYWA/vVoV~VOcƱحI^f&BT<3YBw~}Yг&ە&35]$42 /Dj>铹v%qO?e %~>N@}>^{Q~5;g"^H`'uwSgWiw+{U39Ú~?DQ4X,g/HXRuVC[u7$Y691];@vG4Ķ9^n̽{i;o$ ;9{9;{um8%D9/ELjDC)IV 6\& $l˦*;c3` C K@We iy3]6lC$_5FNT9%)אy$7I2࿂ɣ+{\<#%yȪ+ϕ aq_!y[+9&2j΢{yC򱼭 9ܦɹwSJcdn?߃SQKTt 7oV;劆oAZc'=|e튈ζBP%qO!*F/D `L߲F,fGZy,buXmM5ѵj1U~(7W=-cGj|i#ͬ$";(K|MEq֎a.ЋX'%zARh8 's%,ޓ{}b+juDŤXg2lD~[ %7KiRcX*260ʾ_FZ(ij*g=R6h~r'ݑyJͦnmYD"_K4 7?,Լ*%M9by%)QXf$o6`nP,GCyJl*j+hU+=1k~=50U$_ v M^pJbo8/G<\.XLNժ[<ٙ1zm۳v"ېɗVdTiKcΈ+xx dKº>ɁZ傹T:R6_9~Oa+i8ϱKUY1YL_4n޶hOD@18km@Nu'i6; d_n 9~UY@xQ| ۻÝ>-9 bz1 [eE{zKwKU1kg[gVu<#=~Ԍ2W_f17\,N(=p;i殈 OVWeKU əIY| ht$Kz~7);٦.A: lq@R9ȱk?q"%59GˮQu~.FEbQ3$/;BެWL߰W_*ZU]zW0$T_wW͊ڪGt>-owsgJQZK.#a&g`r  cwM=YoBGsҽ7<"\q˙HdE|+~[B /5U(opr& TWLl 9O4MF[iyvs!a,?x#u CeAF^%ZZFx#Q`iׯYg<3]ÔP(%qQ(V'[S@Oa`X OR:Imu>բ{.0_pһr3|?bKu 5`uo;t659;[ګ hW=q_酔9@m%\ wHO^1#}~u/XF Zك: =6q>u XMolM{k~"6RS8*>s_FfQYX-V`ѹ\3Z/]  K42day0d`|gO3(,-mh-$ZyqHJi[ӿr- /&AiI(Pwji[ BZH{%\Kϻqwg7 ~( ݩ\''"8.x.`]B/h< LCm!Db њdzq*Hk No/qN!ڵ5ŋŹxa'R먽9^#nwmg#ET#=[|=g&>-f1 \C~O) ͊>aP/x>ڄ:V@]bq xp}y:+$x^蠿(f=S[I7B'`.2Hǖ9+cSK)P8ښ8ű:%a9y D:K╒-DI.{CZ*-"JWk6jɧB}+-$ȃ &9#–oC}t]!/Z9W r(,ZS-ոYTJ2Nߴr:*tZnbԒ_z!ids\Wv>}pǰ,3cѬ)4 }A5tղĺ~Ϻ |#nSJ3`eRz~I,NZ`+ +j!ijAi2qLw]yk1ߝD_«m'zgnՀԪk*:טcFůK/f ׅ׿ <LI%l]:%?]Vi g}\}i(+[O5n|ըn߸>ؐ՘Q_S7nq%5y>7|#OcQԀ'rC$'mUd @s 3ï *u]xGWBw|荎`ߜNmmMcѡaY]:6 s8q<^^5l|,@ߡ tJ&a;ݹ+8r ?_ᦗj02,t'jJÌύ-5\f*T4 8@s_ݏ_$_s41<؏ށ~<&(gk0;n﫬RZ"r.C2[љڪ[4UF2<fcm]ݥC8a_X!Au5fFuLjRSͲu9GiYr~N\}P)ߩ>ͬT߾PZ JNS ;zr` }/76`Y_^کzȲm-72|]Ux憁f,3 _ cheE| .Fꠟ>z?b0O(evcbk-;Rt<Ӗiiifsپ3Ն=o%{vŦ.\NjFa2Qvtڃo=.omo g҉u o˕5;j9cQȿGdef<7-`ങti?S̲{Q{KJPz~QC\F]cơ6VΩ- L\ςeIya0BbT4ɍ ^U;jn9^;0: ^2O5O8[CFKs!*}ABEJζb`5:mY\//qXH2NQR+/: MwO0Rpavl%Id#b1O?J(3ԙJ !PU}33v0a(ΣX U6mSPz>=BN`^ob_d_J61-] \;+8#xIPYzGvgQSo`X>gM`i.8 7< ~lEa @57o(3igvoh;|uHh.eѰ"W~(HVjWi-dkn񻒧vȯ~##}㘀A ,F3(m7i:yzUvKGIJ K?+B Jhr 5efA;:Xa馍Qk~,}< %83K;͏-cs2Pk6+/z D2у zS+5 ѧ.z=NdK"ѕRգ:2(eCŴBZpsf3@\Ɏg\8صՕ:{(MȈt֋ 1<3i>> [dӶSD!MS9<{˹6>Jɥ p&wo8+wF ;!'oTt}L5 #9nVs@qk3l(C%:m;&=XdZZ~l zY|&In)˕MmWKlv"3%4˖Sj ujVFkNCjE\i#Ih='#h,XSkuӁ#`;*kiG:%Hw#7F G,%M$h \>|2+}zC$XjmNCWfU@) + AIIƓ|7+"v~/LF\B'9N.c.xkKG>uڱ oӾ[^wJ=%ƔJJ+KCm5-V7HKSMÁPZݎ 5%ȪUĕ Aigx?(COA'1H$5iB~Xz/SݤG'Я`"#h]EWAs9ߕ1f1ʆI2uT5&V['Ԝ6Sig돫[;ޥܢik֛-Mb}kk`x ~i3o#ϭOM?Vn?XO:wv߂ 2A8 =Va9E)Qtv=εP moax16w\d}+tY-+O'|)GkP=Pb o% e2 mL ]GX9F1)3ʥӚ=$s=H^ԮIQr+H$RGk鼆/V/\ $$UZGmmKKTR>]对1) /eWB|`yis; y۸g]a>5ùy@SY5LO{WCހ̋XCa_t4rZnmۊlM*S ؝-2jcw]}K%%@c?O<Z$CvM^zዡs œfݕRN.\1?O9nZKSF8 &nۯ ɼV9R5-% {'dG$R:s\ oi9d#óՉ;U=t} [ ҿBtrBx-n H2sIUUy.~U#7^0osEuh& uXT u5ZsmE;iEDiawNߙ{`!TUZ;?XkUt<<}'yC7p42"F+U6f3ǩ-W勝gvҤ7FaV {t {8m 3"/r^`GquﷻcMMJ{uwA- ]vXADb_j',=~"ҧ+8mEt*ՐO?/VD/7Z+j\U:}_:!6t5[xŦԱʄGSf6 X㎥Gq>"hYc+h4TE(l+5n!ΚҮ/nYms%ik!cE5/&{ MnT_&IZ]K $4-3șD7K:pxPcw^pGљi2yMNrPM\BDdOV8u'O?ug/i@Uϱ\>SwW*〙SihjnV3[,./Z鯿bJ'pW%`IW(6RQ3 15{! !R .cK1ڄ6v3 S.> GC<*ZjO6;Ώ{[i cD:y]s, -d񩲣f;ߐp%/ntw좂0hP%[w;x2Dޠ<;}W12z3a /HZa˘w[p:^?!eZGYO N` ;eǥ<XC}vef1т؟ YYO^#wQOWu8[U;/DgphV;sxHNDx\ x㗾( ĶČ%n8'.o &O(*ZDSuL1xVЂӅ#8?U,lfL J/'Iʟ(pz0:iLPRxY4(=O)[.pnika(ĖY D>Z)J|ߚUsG'g%ːX:Ѱ^ӫ$7O!UIv[[_˳غMC[ֆKj =B\PZ08]xRYZzVG}ո8&b0 (D IeT8S:-u;5 ('b" SIG4Ţr@փ?8X_ymiXCuzzBL0QDղ,W0\d_(3pOd8ݶ* !4,n&P*Ԕ yª9Tk$\a!XΠ5hd3^@,~nW'5bٮ3 f=>S#([mי?mJ8K*2cs&u>yiCe7FgSurze瞣Yj} OK%8&.T=Hܶ6xI3ִ֒j}`4 SJd?Z:xߠ=OCYAAeA!EaVƘ}bJb uqulrg@0EdJ_+t̋Y0`ErU^uDKּ_45cG㯬#=f)#eq8 Y`b1 "83`rNK'k^k+ꈀ1a((\P&п%y{!Pg' tȹՓRv-.i>~gmpEp 'wK]M FQ,1 {;w=lϵoުfS]uIy[鯢  ު{k+~RlO' +eƑCM:b!KA^D}earBnvʯ\qW$S/H8X_&,Q/?0P1{[OWpIJuMg. *n*yS/?^3 +71رd O%j,IfA}3PГvկ±%EQt W9cAR+Tib9rzg>zv'C_EgX9c@ c BfG'vNsYg=DQW{gcڡ鮎\/u^t|bYݑ~:Ÿp}xh X.iJ%JmM,]^Х=&LҾQ,B"/=pLuCZ/࿚=l:zVBׁ[RhI#}%eSe/e=d%@< &;^7jJ: hL5l).P'Z39=Zd^ԘȪ y5!oCCl?E#J)qqV_ML"7PSOAn $5Gx Y͛?tw%c]ۖ3N +Y xjrt(Q#jn>%s3p(B[ 4D5G)/cM#E54Y V0>KW/g|j[a'77EH Qgnsjca?q\;ڟ}Ձ7Ҥ:psF쬪ĊME)C6lg k;xSQ2,>Fv,8ϐ1m9r1I#Lm=i X^^X3~X=SroiYe<GC}o=1֎t;9L=jޔeYI O nwr^ճkT.pt1gGL ~β?zxhhfq'G1UFg0-(ezuѰ\c xI$a6u{'owH(!6rҎ7.05r`?{Y]YOfW۰X }nmSPhÚ,E^ZϲZRnU;̗A"leN *v+ 01evP5![4Dkg+T^dT&; z_{2#UR@usߕ1D:oȲz=Nn#bvmCke剮PYPe Ki4 pHIJNl*=-/ RQ KqSsf0f$~;lp lCrae KO7tX(]?J=l 7Sҋs'rvWT&5}ts7HմA-\vYB!A9A ~9lDxjpgڐ/A;ΏF-v'S|k+Rs{p}pHvCƈ)a xR`ViPE@0{A(qZSE&\X_5y={Wr} g牪 onMN #-{4WuqvѡR/nNSm|Kqr,Xoc)Ei-'<6^AlBB`wZM"\gOr,,t)NmEmCB' &̲5J`Dc:^`OG"bvPx "vos+Uco<K`X'RmL`Lw\l`" g跓ճCv}Bvwa]-d\yZqD&ڌv۫1%'`H" 0}x=W7e$Gm}*sGI-oOgSu< -pl(W8>dmEaD0=|u#q춸~ &-͙ʙ,3JӲGP0Iz? eyRْC~@ haʖAjV O;h:X-]PP0*Y+zẂ(rMJz\Ul 3++7*O]`丹K ų$iU!TZ^Ȁ=Dc!T]J߸%4귃1Mx"M}~ZٽVIt.D!ݧYiYYԤTM N8J}Qw|䆥ff6qwOM8(w+p\_OsK"Mq:ݴ S7Ժ ئލV'_+TuUQ*jfUd',iDG;+˒#q哪BjjoxTVj7@;^Tyzkڝ'vƴj&5KP]1F9wx<ڴT2;R]YWl)_#%j_IFzX+F*|UX%lx$,wD slLFX%gO]{c!ޗQ \3I:T5sR.#mB1;(7wP܋l^X<ވn>U\-+YХ4[*WrVSI:X2_rCudRn.1avlpmp{B.Wd{BBC~:3 KLaLALhx ћ_nt暊cJʷoWipܟ,|w~壠`[0C')Y%NyBׄm ?_ÅuݵcumF` $fa{1XcU֎կpp?9n\`#3*:Vq ;bO,Ẫ/V(u}HjZ:;O5>ޥ&ŝag;=U' /_?N&1t@^#s BfcnBꉐ;9Ji[^bͲe=uT^Btۂ#* Vˈyxǀ^Xg`eo ]DZ\3÷ً Z}ߵЀ'<"4:x?ʏw>K[zKmGX#\;>hRuvVq?WO n6%r12)g{Ŷt8cn,oBzh9d4FFӮIT4#T[;[5J|?6R [ \9@u@UzytZϤ%Jfii1Sw^.eu6ʆg֔:jrVѧKE3j,lKfb#~^/G>[_koɶCM+׬ w!{.gN[<"6F|D:FyU5ZFW * LpCU'}WuqU>eh# l Ѯ56~o3z 6QN4QeG_GE΄,7րB r;o nIRn)DEDc7W[P‚ep }bAѶY?QagE=+vxqoj_` o1: t B}l~ HxuA Fv=ՙft}ՠj ,~ >VX:e<%k ]= 3Egǒib_Hgf*OJl g*ݭRa`< \ϧՕo'Śl H?ӴRV%nꉼ\}ݍm?]Zx6ݶ1my{mƏv@q,UFn2\$SdhAb#8"$DC֓r9Ic;@j5sqw~Y:WR_aZ?;ZF3,[L݂N`6ٝ<'c%WcNuݏY'Fzig|f4v?::_1MRloV'KI=H\\| lt>5F X31H]ֱ> +ɼcvތ98&e|av)aRV,lDzD? &dZ,=e`V T-J*7T+pi >JmeЅ.q I@NH|LTYLW› {7RxԉTBr z&5 b0f=pm0 [w?u;7nƙ&mh_ \;np \%lhp :@wPh"'Gdz + #?VsP]"z }z]xڇPo+{ᕵꫤGKv)[-VT[QHoʹ ,u;1|F5CwDbCC\L`30 ]{Skk{VK㖝Z5ܺ]GI.uv;%29.6oՄN#^_Y~O2{r;2ǕvރZBm[3c/bղ86~>6\&D2"BomN[7ӝ+m 5?,z5b O zI$>[stb~fFGb?O"O"}79Lo&D9{y+R,e//+m潎(ml~aV#w\?|z)=>o`ޮr)Q:]ٱYzZ~dkZaXpA* "W+z%2v#Er.6(ZE-8/0ZZwoi-vi-Vژbr"|1,\loEcSZjly'ŧM6sSFD 4/sUkd}=k/kXx{`eC}4 Y-{a@=4>42n3+WZNt3\*G 7kC V93I&~x~S%Sc+ly;\XOT<V NܦY&--6sitw; +4Mn;7ZXeakSҔ Le*C FqyBi-n7EMj'8`v?vzl&nrM= /kX.LP4lHNJ$['XvuFA>7p8y"bcg<(^sPʷn.O;Np#U2#y ~ʵ;E ف,րAS(H;x7p.~щhEnEBĨ}( *ن'aƦ8[7j kkeVۆ=5UK]*l8n4^!:?X)*U#SBYKvR=|`jU ۜW}Hz$┙b)Ψo~ oc_ccwMTrtyˤG$*xQ?ìמs<6ϊi/6ThJԻÎkn5s ٬L{Ugۯ)ǫz $%t(r7" x^oL=k=kOjS[7o+ylfukZbx^`'LLps",Vjp3f tLs̛݅q## _s26= j%}RK-3Ʀ͏8QߩQiOɢF-=VGԜs9%1C4|CCΖPx8U45_ (V-}}2!aB݄UYS8gJWWhTZ~%t):J~p!u:(UW-_1db4V*R%$œ=@K]XBI #φ{Aq ٍT31Vt+,c̖/['f.`UՔּ͚ڝ|dSW*`KiH~ C2 @@pd"x ~FBsp<_Dp]ꇹڀҡN`ne7lu?PƚKsoc+,Rؙ$A- qFa7)X[:[NK2/Rqso5(SeeV"198Ɔ~}<3^%@^{ae3vDkyt3U]}Vg_Uѭo1`ouKk#8{1u)><ѳ/8,&-[{npmog'ʲ74Gknd-gɗh[ڽ|S!Ѻ^Yz)?mڬc-S[X-Z᭿)џ\mk]ilpцw-@2(6~6[k\ ˍLqWW7L57E/d$xY!?gIi:>eh te?m Aњba`*? kokVi"ӪDvOCC+$ KDz|7VJ6ȬN<^Wp3lu WΪ+:!O4CMlM_lP3'+[%. flD89P(ѧ G9FTȮh\A>BG0Q)j"29@D'Kc D\?xg7ߖު_p%Hڂ~ڦQ,c_#،-6VW3JYkS3c!s͇=\|g|ܿ3vE87G\$34b0%hq]՟ԼQORSN֦kMRs%rָN-/HݓYф":6veH,~Ծ%<3֎^<⌗ MD |ԥ+27LSnimϦZf[Z3mz%Ne5(,ic{ TV`0ZWQܓW%l6Q>.z,#ߧ#+}"SE"BK|?bx?ъ,[:Z8&JBG:WsD4[vx' [يrgO"vp6嗤(F]G@G4ɫx^*4#~nM 6,ԍR}\)2Bʋy)ts*[ɂlu <ꡨ7g.K_@#ty3@@"  &h2(!V9~ |XjA?@f2&g8Vy0~djK(5wq86 $L1`&(~aQ=SJ;6A#xTj-zʏycVcޣhH+҇BDg""Ȩb g-٦i>֚J@쉲lg6l3Yƚʖhke¦MHÕ/oMO< ,C* >՝lEEG1ߪ?Tx}5IuOV!qgtkA#;ջҹXy$0Pїmqsy¾Bku>r87Noږ~af%sp#LH;y.l0zmSX/Uy՞6OSf2/N'j(NVTɦ%{7#nh̠8Hkbfk8 99[e5bghMҘm.YiYF"WF35Q#VsYN P^DkWPE`8!%٪\<֑aXEЖd3NE}wݫg6ܠG[tsexX Zruij  ȑj&/iHfCaXF-TS8!ZwȔ` k-[  ahIrj5\nHWzF=i+vHFR~|:\vS2* B'"`:::xUz6MΆ 1qJmM`?-Xr^JCP`.@H@`#8z ̄.EDoQ1Ʊُ3,4F m^:1\4%hONl+  z!~T.D !p;rBcLh;b3,uBLCT@B#y1qͰ$[ xb:Z˶+ WZW'uG0TWɪTIꁍY<4.)/O>H#j|z GuO]vE܎bdASɾBtҬ:Ks)&wqd5Ȧr1EchV$Z;+ X,iwPԲ5]Sny y1.Tkwb}>GrŸ? [SۇUZV\pԍsNvEd)(+E{$';d WZm_ZQGպ0X0L/'ɌZYeқ:ۥOD EHDz`yt#ffʎr(코 uh xP: U \:u)j9Faѷ!Ta=un"Ƈ3YG`¥cߢIwR~Ky,O]R9%@#*NBM@%I`10LA|#%䧧g#&&'fb \5oX= P-2zIC:hb+26e,+][̏쪓W7S֞ğlWWkq򵼍{ϕC`b LVF&X/u, #%n)q;N_мo Up ~/ky1iYL } ..G 7]-W9vyd=p8 !򖂖ɑ^$Z\\"ơq/~6*jؼ*#UtW/7%[CqlXʎyj$y}׽U)ńeWBGNtRf]+'&dze5D~}rW@9쮉C&sѪ /q%:Dǹ* ?l N#IW̖OSo3s|c,0ͳo:]5ǖaIQ'K5X^)lc}rަyL+NimfS)  b%sI-vqN)XBwZ3aS^Pha3 W.+T:#18U>yL!)rj%SX%akEaDLCs)p(>z*j;,B-DMHuJJNړVT- njz 8NK'7daCYAğ 0}GShԁ)7I]!ZO&!IG@|*  LZAK'rHyv}+*ߘ2`O*ͤ[+2bTLb`e'WU;wVXJf>FCK%!S_6a'W?LSв*U vgWlI =)+1zܑ9n ?Ftd6d6ZT m;UJ:;v(ʌ*vmI Z[5\ 1ʼ¶bNs庾}ljZ~i4_}b{m҄7;rQ1lԶZ<遇MW"ӚSL ,[SP8^-RFp&E҅'~^̣gfDm:sYkS#|C%c]!mP`sxEY$9w;ZmDցzFWgYf@;C@iEDỚH'j-6|px4ر#N;ER6BdxT4xmV(^TJn4tɪ^~5` gl6}^J"g+ߊJ5NGPN"-A]g2qyX%q#xYt"GLۄs8n/7R)%oL X2*ʠ*z& LJP?s!.ЍjF z̅c| .O)"_QxCiֵ/dN%4aWdpI}4t!Jg7״Ov40: $Dhx0j@s0]%e>̈́Lo|| *þKkO6apψIDi+Tc2ECQk Čyp~Er;-'\ϝ#I,Q*~,6÷ _{V5~=VKe /k5+lwC:7Edt?p"~*;4hUho'ɾh &lkJQ`aME*M@5p!A?ۧ.,in 뽙2$HfQoVx]4oKYyDzNT]P4$*';+9&IDxӻGfE{} JֲK#gPSF0ǰzKyZ}h P%UI?(;^"Re|ݝ!ՍYLDR}?0Vl,h?8PA?Ż뺯?yF7\1νFtgdM^o$j#M?([9fpū 8yIZe^ar5 8OF*$ȁ&mku&EAhpζ<77NnHW٨.>G0 !\wR"[Lo8ꟘO^XiVqN}F_.Y0%sXqIl(VY\g*t0FP~3= BPu{i(?x @6W"XtƇ>`v$n"dsQס#ȉxG;P7R (uTj1^@¡cM 8&@?@2bH }۸:%tFu,Jhʀ3*P^0a35qe;qXTЬu쵲FZ2TI2 #=a2u/ {,O]OʗOGle0\ĸZEjB];@yÝ~()Sٺqv.7Kυ,5 A1LlVNw ~z|z޾]Z S)*vL<жcr*U*y6b/ V 'm Rg]iٟ"Gs^-X;=BJ7s!=96+;YTY\)OH=o+9j/׍mlOW\ߒ+bYОe*+Ip{niI5)8?֝l P׮sǩ9V4Z9H[xyx\nl>N*QeO1~L1[k1c@ &9}فQ'zINhGnsm67V]Ŝa~jCgGٺ ,埌 ;E^ש|M ) "IHF-<˝Ps HpH>Nr`6ndS0%5-(U4ZB*P"tlH NCG/COd@6=Y ӡ89 k52\H"mz=! ӛ7 ? j-^갔:@4:2 ^r`'`tDqJ|~9?4a/ 5N1rW[+NThŜj3YP7`KZ!9pN]_c|C}בOs=]iSQ۫ub^xT[4gM5890AV;x oǴ~DZmn$ ֏/q$R@7HFNrNgIڟudS 2_sB]zv-^Ni[y/Zj!0r :ۊ ՋhS 5KD"6~xgp.R$7^W̢Uh?qn4_ОPP~U=r@Z,uSX( 4_"%gUHfM&JQyͣ='v]+|hza 1^ pf.RQ[3<.gu}JiNv];Y[VP$U#_ JЖzCvI2v叢8NvA\xy[]+BʟtDF;X<@$Mh'1R> i}jw;3(KelG}`?QF2C$[|[EA\T9o?'X?s96J&=iDX~_Z*PP@=RQP / O2FfȸOz-c~D${m&ˎf)͝&4t1/O^9.:`4: >PN_X$cvEԀ#>\73f77 =1?dz ?V֓ 3*Nn\o^יkN J3TLȳm1;?xlNN}9@L :'E$㱗;FY#b@_/;ƪDu kmY/bdrAxLqT"_·;DsЩY>F[q|qcbxnx|41LE.H*LI*?[tlZSծ\6,v&#sqfR{I7[s(c>޹X64G,˜KS?RT#? `5  X""IInG(%&yx:(Y?tjj:[sA!ka*ߪ^cj-'! _ώgJh`dfKh]T奯f=`K[7ws9&;b@ըO 3/һ^k'W*)YZ#Tpv2whSX=WBxv/(eEW$R,{ٻ9[TuX4 kDDlUTdod! nut r88aaSŪOYT:A!ph HAuҠ"dO]  `%Dr.m!7y39c&u̸ˉ)y24x:C1(}l:6ݒN'B%mG6;b}`p,j(mrڋ ˯ uD솶j۠a,dVψB ? ӭh1z\Ys s|p4QMxu 8yHCL P(J5}0=^v XOݕ8>9~kW yڗvw}bѮwhA' ~Q˩{uv m4bQ[U ۮ/dZHT-Rd3=ekh KQ~0f~m#؟uv>*-q6L6x@{σ 8xߴꚿDUiͿzhcL={׆mYtx]4iĺ_@ei^>|"4׼ҹV1S2Eթ[{Xu_=҇ 0{֕*&o*u8Xwkׂ&7rZؼ#[r ٫$Y=ynuuia&!8IKM[T<7mC[1s wo٧;v;jt!xMzQmu2[&KnH}8f1JݢƊ^wLnPZE:[0rVۂoì8gޱg5N}yɽȽ%z.M*#=&Q~K)UFev2|*W3Dͼa_9dh;}Z %m"30 @3x ؖZǣM ;Nsrwsg韈  K$> !mɸ%Dg]A/{8}Flx#t҂N/Z$ԿҮ΢S|h*W-%IxG8_R?s :.{hO`2bhG*%fgtr  jeE#?gfqii%&30Y)oE>],,].;&!Z"6kHMU"AM r}}mTN[S]D|1nSJߓ7ƙZ*:W-mL}F!|k.nmr1q[-ڽK{tmžAs bNudW9El:Gtr::*3kOXm12ku 2#2+kl]Ǽq. 6ӌL}f}&MrvoC3٢F3uoʅ;'geKӊUn25Ϝ1z4 8.~fXz!5w0o1c}].{Xj-TF3 exSwƁ2(26ljIN윓Ԇ(.I4n4i2e8 )2_幮~wJb2{|p檩Dr2i_oLPʳJWPNuz(?7NrY2^Z3FL]_D0b!tEU'5lCf-^U\n.,•RoD9),4KϟϿ'Jܒūɼ;l sH"UK m3h6/TrБ0L*2CӰs pT$!h CC8Ӡ0ma <<@`BqV2x% 0!cD/QD"JB6 D"/_?QG88OO\1:- XYum#Ӫf*EGEWT2~qU}؟⺶J}'#!-~ ?BvRﺝ!UHI/|1YE_ IV)*GILZAd^,R+|78<"sd.eQ]˹,lf]*Ja#1Pc@79G]4Oi[r0?nZ]zeT\`2MKLZ]1zX.v$;6+Z-kf;]֫͢-k'jo̵#?;_sv%T-]о4;ۥ;f,mFjʴF1ݰϘg777YgKlBj0駪̿w'j$}v߸x&n$QMbPޭVzݘd XUD2eB3#QKכ $e)xꙸZGݶ6Z'CSSIdNiJ,y ;ZjPΓ̤vTiFpSxC&Q.EQ(d^e.(nSe#ur [zn>9eX…0v+c*}^턪yҰ&!FEcܨÀy ~DDNn.fX\ n.N@'a xl pEHGL#.%. 'vC$` d3qr t m`(h_ĎŕF!Cnn i[yXDkpڲҩuRQ_g$ 7{DQ`p4GGFi> R26\Id=W9#ƪ̿TAy.*T:]R6s mROS,#lM?dk_v 869LL`HX}¨Ygn~w=1^-.4q5'ÕYF0 v3O*$t:Huk# ;Mt6eK++NYwetfN caY`Y*qc[]'Vhu/=~a#s)[ޕݜO+ZNS'W1Kz%T@Jՠ-ShCyxW*CE E,@ }K@5Ph?p'+:T;2(vG\ o  w*x' ioax6!vH*vx$#$([F\XVB~(<|젣 c>*7i6 yj {9'5d/!aчB}Dv7Qj2U/rXN77[ T5;ٲX /WIOiޮ'c>ed˜•G9CDn^^'7X8d!I^4+w&&Fii)2;/9WvhMGLl4*-VݧrvƿٟV ٢:enygn}(4Эx+:Wu239/>Pk -sUS_c4[-;dÀ&Q8,3wX@5}XYW?k6 X|YR,դg>stx{:W\/HVK$_.N)Mk5ElWu Xa}Zrd d.y!,,:wr,5}QFZc--3^ u) bgF!}h.R#)sbZٗJץ/JQ%~ʗ@qwJk/pL XCc ߳#in  b#U+PQ%;NKN]K̈}IOn&%"#L#,CձK ePą8Sa*f1o(o»]T͋_"uBui1U<^BRr5BjXrV w1kU#z;ӏzl9ǽ(WuTHʯ%5g|l$ZLVYoQc5'#7e.+ѾoFX!{-`m6a?5x\}vY\}ec[Tki?hgYj0/=f<T] m5To`9d0K(惂+o5~4&thd,g%ȅVUyQfP$t ]yK5R jy8Tj h%\Eie_z9-e Y3_pW۞WT*oo EW,(J_C/O4,ٝN]ψ~#Symh6nkAŘ/+@;&c68/p'G̪BB{CA'p\&~Pl&O@7&(~}*A1A>(:1p4ເOЦ;!cC[DuFEEE#NGD-G RشYD2N^P'񥝻qv?΍cN15ȋ =1,G#4$E:#ir szhF)Q7B<Jްke"c]uE*KYGiFŀ\/(Wuhd`ӝobSId,IuXmQ7NLeyyw~4l4oqVkQ|Ő@EW9l)~X}]ݪ;F`zkn[WKei]gi8Y'L6KXCX\~I:'#٩e=ԉ|t7`fX,1 Nr+'jyuvsaQVOSZwXwC?k׼]v)ZA4δǺOܓS6ԙZ6 =ߺel)֍}5:{տ7nryo7 W>b0ze##سyĺ& L7(W9G$j [ +E|$ m>]Ø%LR{ƽPRU-Ӕ]dӋu_5SSˑv'_WS[r MYD*"k5g%_ܒe䕆/YobɖgOSׄnDF'ńET 2QxT1U\x[YqE;%-(H t`ol"쯈ni@ ГL@Z ,7$ՉlF@BpnA'ļÀz&e7z7jƀNY # &ȏjkL&ޢP(D*n1J9p~[i)epwvW'X7o:*lou5.p6di:FG4ٗV3 mYw[ċI|jm3.n;{fQ*[s^gֿrikL'gfwK pfWKFHʏ6}%AY`<+*X<- b| }] Y^e+.vy |ߺxFy~^nu߱7۵T{6o$ݧYF_WO埵i^sH>fZj\nvmݯrRTؖ3LUE-EzE#Ng2PFRYV(aj -CjlƔXz^oY$F)L)M-kӯڒ}xL ֎!bb) U@d;dP3[ZC(4j?V8V{V'~p=g_|{_z>y% OM{v@9`fi {wCƼԲ<ްFQ1Zqkd_Y7nHݪHoo#vu9ҭ/|dQZTSܓbyo~S\#*u~o VHTyCOGZgvB:NNpvY/ߔ+ffY:4?;yk)gRzZ0V k_ImʟLIҡx.2-Ն)v+t8maOu^s t;5T(>4`Ճ6xPMhuFE} vITOHH#(ރ6$}W 2y<w7C` Rq!6#\=;~_E-=_o͊M& |,5U0UWΪ*!#r6^9obFUls.Wq mip6m$ ɏnxZ׵ZN3˛ƻCw>c.[0Ct:t?fcm =YQkTLsKfSET@R̫RzlN9M:J}J $y`Bz22ŷ||^sx#r|a8HÒlKr.kMEҹH?&EC_앳`Nc$#h`V!Eb`.Z 1 ??hYD7QoA8gx"40 _?et߆q šhB\v)$$B!dltc,H6@q B0gfΙ3yJ R' }$"H!N s2\O!:h%xlz"G~)׬ ^=7JkzÀWX,b[1H AIؘ;aG \̷۠̓`l~ 5@@ xzl6xp)29Y- ,Z7BlAMLp0'|P ~<}AGP47ajd/%qjo&cyyYYYcg&*Wfge\Xh -uFb"kGv^TPSڻ-?X2Ӈɀ&ٳ?PEJtRm9r}'W8HSYRMIuzUD-яVG G5j:<2aK:Pi)d! oHWu 6e+lY־o2nsLfQ}g|e)E5@.YNS>[:c\vs?_(Y4ػU }-W)*?҅2(6r캊%+4-E/_?~eGO:HG#u1L^R{!LeL]"IGbzi<5\WtqsY/J z<:YQЦ"[?Ra'ɰXu؊E0>d>I8b}`RX8z?HRQ1d&GɈ}DF&r'9d6~R)9u'c/xy!CL})0ϙA)UMDnWTxa[4E+*1m{'Ev2F@As&S>t 0Gp'3K +d1 #;B <{8> p6 6=u T&*>V~kkPQUyϷ,2, j B,p˧l=1IFX*TcPl/C[J*tƷX`Yߙ.G"scv$$CRPzHB@/h/wp(ӡw&vEh<5kdR7#KbFá ndT fBl ` PBAYpEL `^ yYy̠knyh:dPLѧj]ZWah>7iϫW2нb yz>N)5K'z :GTj+ %rɭo 8I>Ul2X"7HQƷve=)맸a|X]fDͅ*ggݠmeٻ1Fw2/ÔearZhu:kyN&ͪHKg_cl76atS?65z7j9>٘mt}cyӗ~JGR({gJr;^g4q>a` t#9=J5d;&%K16f2[,Eh9-|+U.bsU2P 2B$S/9a!CnÿyX28"[n0YV ȋT\P*KrxY{Ѝ #EXB먗L%o 0_Al&`ރ'4 h\10]+ _L"OcQ7Rzݘ7DJ4#K ~vuF4(p,r-Fۀ 2Mp>΢JTrw}{3OYޜ[w$._4m2O4TSSw2>תNk w5e{DEi xՌв)\r. Rܼ*g!ayLʟNx ~2w?_#g\WrcɣB̶kr?kkmZmKOKIvj S? s4_ٮ8pT5%շ+M ,VQG^*ުEZ [|_j:ocgêZ7ͫ[{f#ٴ͸XdAJjg SkQ&6RjLJ_!FڣMCS {tz$?ȧ*k-ycʶJ{{ UO5[we^]?*v-Hn nTsYX'm_MC;,fTTc 4T *rzd&}@{΢˱|3`;0.$t5%!7,#CY=Ŋe$Fj]D}|d"9~d(Ԓ&!FMDy%9#:QC]•- ywwwܐA rJ}dMa?P]8kO|B _n/ƝA! H`[c;Hf, z< Ó 4M b ka9з,_jSN%>6>nt%8 p'/HB>+< q|b%,j[Vf G X G,Ցcʶq.:ZG2,Q\]?%dihw3#8A?`( *Ll~pyx7#?<5`kiSGUmvooӵ_UعpȎNr;Gl9v绦Vn^!-Y9՜j8ZbbMі}9ͅyr~+o H0w- qOA,I=1S2WԴWu aWQrzaed+{k'CO5~1IW.Yv,Xc+Tzݙؔ;bQމ\tA%SM7 Fdh.^8jնL}X[]Ida}34O4k٬ ]&[QުH/OIw;.0S?_S&gVTr,Mfd4G '}l FF `=|hA)詡S# bq VC5ч~hrɥ^r!~xHtEK,#cHBML{3""ZH_"xyFE[0 _WIەCUy*AkYdn{x;pf!3pȀ<#z Lx!|^"- maUwD<-E x܉0gDqٻʹiX7^G-!<^ Y%O<^ڍcn,.ZЃXJ{ܕ‘P`B$iAO v%*޴a{n[IԮRQ,Ŗ_*¿%X@Tלd7#BC=þ0$y?x_x={܅6!Vx>0ScR~:MIMW"G,Y1Ck.-g7^2W*,닎T:75Ѯu;+, ꂲxeyw3wR=ak+H(/K%9yB^O0S8e I,'vNV}W}Pu\Zy]b?_Ɋz)8)*ޚfsi)YO\zMY%0! fJs뵣uQM"Ur@tX\MkwA#2 vf X x,P!oWCzl24JQ9| (Ɂ6k^D'kMq{45/"zwoTa2),nx(=VH.';'_bhU_ɚ&b'3QuWG,Pўo&Q350BO%2%6-T+єKAD'&Ch8 # 3+V:ZaodqXө^Kp CyK%FB&bWta>l2^Kqf{h6t!!~)վY><^Sr[6DYmeyQY^ԂAP5t0@t `aw=\-k H0&Sk9k"֯m fW}vh | \D௰ӄ"Xl9C;-؇Ϝ )1؋?/ ]#w{2H'z:h06~FvbyxItQL:i:6j8^'d%/1~&3*^߼u_W0HR^x1S $*HٟK5>e>aV4'GY,IٜCd > `ڮ_w^=_uS@ 6UVn|Ro+ʾ gȧgiLEKQ"K Jn[4mSB^Y /W շ̯˪\ܺi?5g#xgwHKrc`\X#U<KzAcycbdb5&( 2ۅkݫISI|xaq\1+\eR5Y~,7O|ݘ"Mw?omօO;oUԮ u%²5h}.D6qN9}°eO 2GH.q 'QM3ʚkq_4(ƵZ-p7Z7Y_Y8BwY84k,_|Ox?`K7%`cx7_CSqx %f+B7, "sVGE?t5oQ2K ^!h˱pvlzƹAX! 3 T!cr"$ -+Cw7#ˣr"9gWu+=$쀄"9">"=:zKwp؇JdRgH }ix)}>EQ5ȅS80FLFj<˗% V0+EQm_$~[O!Fp(j;SFg؏hoHVȴӁo]{YxAs;|<$YFT-1⯅RLm:yKm{l;C,lҐTu]3i԰(G<~fx]pX!OՎ/Uk{jnu4k:^Cb BK4J[W׼N {5 WQ7gOVmݛWܮ5h̫enMwo~6p^lKW)D{qvBqt_Ccv Vww,+J'p6ǹשXw;lol"FaaUd4!ڛ]BF>E'R_餓tPi|Iaj"QJə ܆Jt"Sę׻_o?נׁ340 o_5>'eHl )E!m̕A~ȁv  &2MC= BnzP觵k ]Z;/,'NEd Bu 3:я}g*ΤR}㤋::Ho7C~$c:7tEwT׺޻~c)!e2;.XA:"5! ;emugΙdfι~=b3u%I!psq8{zPʅꂦ.Y(xI@ކ.W;%ѡqJ}aFvՊ?L?Lo7ubvb5U^k:do05ZLCm7{VDTN4Jnez'keFa"qnK9U1dƷ}J͏s.S 2\,-U=dKMo5G3+~e%M~TJ3wܙLh2K{k'()9AYcg(wUvj:I[ |$S*v6V {RΨ1e\t#'dz3j8 T pl SZJS?2"*xOb4q#(fpMKLR*u8Nr. 5  UTpI T9D);q\olYog_wy=ܹwzA~nއ 87O1WInI39l"#au~`._=_c˅#V71vʕ߼|E~CB|_h;t?[U0﬜WWj]bef[BjW6Vx7U` K<79&&嵶V];YgfXMbՅpGlijAEw稉Z|tF!! +4%+h ʾG[LD'PnT I*CߧexbWI[rf8maP: j@3% `ƀh%|F>KXe4!/ u^,p"{yݵ\<73+< Qx5!'ȾG;lkFc<`'~"\1t3W?hzZ|6VFo$žbՂUNrDa I> C,_< R~ؿ&Sja)*6Q\fƧgwYBC(D}sK%'JDF:p(ao!;Sb-B8w @W0A ʠfpA#G8 8(Vy…:>XD8h"!V'9|Ip_&eÜsR bM84I#/T 6uAu~nn!Ři2֯F>jCJo-_vkCKujcqWU+C oZj.לP!-;1W3n}uչ_Rgt3EWt2?4ӒGU2yjF@h|C6RykDD@yHpjnO5=s(,T(iޤsk :[%{{U7GsD>M:8xT1{Vlxv_:ze-דlYβ+&oɹ!?Vʧc'ovw$;h8'04N#izo!|bΊgsm ~!Gt=D 'ГP/0G+[3x$~ :71GpN g9챜w7;KpYTw'wA8~oT:R5}?)poD눗 >%Ŀ|I$%Ehp`VϺEi6lPh&giQI@v4G`\ )̇Y%C978\A?LhA&4- 0)l >jj'*FL 'H K 3G(Ad{P _pvEȌl(>8;Dv_* |kEDym׊IVzyv_i7s9EU||MJc,x[+jKGg svP? vȶ)U)oᰝcPdKNkl.w}UiUu5Qu/c*ԴĤuDEc.n+e|EfP_zDz5EMtԳ:>iv;}sS}sJ]U`w=Kys<14\UǖלT,i/j R_+N{P}彳wV6xtxX?#$A}F_(,wSTS/Cf 'FTQ];mKK/`O9=wsc<}Q%f N% & qx8Ϗ?WYzsøEB;DB>lra@qP?n \ߊr$]~~;Ew$Ko/e|{9KJD+#8 sAV/4B4i ,c!0Šd?p #ǂ\Jy0 CΤPr`!yY8ڍNf),Q0ރ ʁN!f G [a\! &TB8@GfoO4qcCLOb2@{b:T#ۇw)w>'1?"[&ĝ{'@eB%} w]4Տ?m3+i6%I:5I٨Y#5rܚ_V,an2UqgQJ6e͠5-vY*2Urg$VTmj1Z$&GlQ_3>2vu7STMPҼ՞){jܡPB L!1kL ϓ_>MFK?MpܕR=r٬02~kmlN3UjN)cUqŦw}5׵beuשekF&Z ;u% {'-Z\xlib"PU1ȼ&1 D!0thPp0$!n|mfA.*'S( TCf1,W-9d-ݓFLRy8lS}e31g7߆F *p#x9Thx 69|1wg73ϑ;_ G|j4FB-W0$NBV8B_Z; _}>eNf&9(EqwP@D.%=̊wQrfvBtFPSALa;KR΃zj.y@6C#ݔL&S.D0ԐZO)iA=,gT KU#'|cLl>6@ 4 'BFd2Et#, ZB{".z$3/٣$_bN)uejqC%k.1dK%3$_%ל}ўN:٦gm0 N_t$A`aMek^ 4Κe Ftn^W^is | >gfWȗv`ҙnlKVAt^< F K8vQ}ȅd 8#z.`LU>6oޒI:Vh+kRqd3dA?9]>ߴG}Ww:j֗gz+R,P3zzjbEIjf?Tn\Z[bX[~͔ajN*JȪs%}uSµG""PT>F9}QLZ ZԽB1~5(k΋bZ߮?P[lAQ=/`) 'h8JMaJMP>GES'-8*ߣ.L$\R"F<GЈqpzʹ< ~ =TbB x c2<<4a _!ptBȽʿȏ,c  E^3^..EfDDcA%Y$LȷaKP}PUG'9rXtyt;_:㦤uwxue]TZ.6DٵWV%$PQP)"HCH  Q ׮+UWtmbok/NNNd;o{k\iV@۪Zi/hvO}pCRZwR+鯗_X N&GSRWc >,kW^__S_,WR1AU]4gH hUrg9BO؀ml~Q)++2yuA =U|-h:\.X 'e(xC- /`&Lz%v\=5 4OtJBEM $ NPczdo~'ƛ/$ZBAi"`ÉHrH&?}3D.b a$I~'(\(G_GEKzcŧibRĄj c(3D C=X'J՛#t OapxKsSxF^{ ~i6YcYp&=a*]h82]4 d;t @= =2?G8 EkDa 47!. ,w(MFsDfPOz^x/$$a{3{Dw҇؝iG ½Vrq_{ OZ ` 4`8.bQcEرOxv$f}2pW̨a;G-ܥZmVP;O{A]}tb6Wlxo7*̎NS~8ْ`phm}!  vs{^VU]XtܯD%*ϗ/Ϭ>YR7J,^!߷ 2RU\4'+G~~6%_w䴥5 -PTVUqF?)3fA^@őC uZ7gvI-iܸQoI=ƇeMRrLYJV}Ovɫ wл(`B.[+ QH8i/&a9˘HQ>:Dہ0pDh}ZF.|&/)/~ i GPqV8:F P>#QG\FEv5d+9CFݷ[IJ$Dj* caA_r(l*Utߢ9HV p$C%5.Nx%'4'Ap!˞f ^ -D~0B><[z $1 i .DP;\ 'P,dA5 Vc#^IN'PFؗY\a<^)"tJ+ߕ8]ԏHu1յ}OYuEYM v߮du74Zz<-ۍB_egX3U!5SIˌM-{-[4,?x GۗZm7mm%vF[SHӾm֪d^y wcNQ5 S]Lj=s#.E[e ZgKnRk E#R,!#2cmɛ&amjOѳIFҽiWM%7^T:-kdrrUC;4^]{T{)#qgEiw܂ܓ-W#6"/&$ܞU&hS9){͕Ȋң),}~g F0t/X "_f$~ O09oHGZœ%(JX*ÑrSo`(Ef%,Y8ʯ/hҏ/tp ^F72ow!+֩C rKSeh7hnŰ\ݧ:f 0 0ECScEu-҈Z9vO7n\myfHM!0lcbqoOC*=ؔ=(nAWDCq soVJ~eM󯵵nvyS7Ȫ?4TڜH ?ؼwպ{ =mZʧ5[K5 E(-)%ڊhk e岤E9:eWs'm}#ۡ䱬[^yqObDhmF).\YR)([Ql*GXů'(~\|Eq:"[ A(8܇ax t"+hbxWX+qonna2V!!X E`&@"W^|RF^p/-$ooo6̛K!6~5:*`RXbhI\zDŐ}Hb1G@b&xcӈynq\2HrMR9^V|16 nR=qNc۴XYvǣPM+^';9P3p:|˸juh4_s3"|(]$f0+;YVOn\"x6~p:H4i{ġT#$8\`&C_[xFa 2,64䃊<|$k#Q@PDu\2 + |HD(q#?Q ^)9̢Huڽҽ7@*Nb1\p-vPm_2N)n$;G { D1hu}Dbp`!gV>e8NC?+r(ØVt} =ŭπs&\`<4@[@6;蓠'F+P(up.Rlb>|b娥g^>XJvJT KI\˫%QV&"Z*|Dla@2uʵ[εFPv8s _stXF!|5J ҄R S0,dyyԳozgrOA>$ft?DP賢)« tLXN. 1\K*`rϡ dSś%Dcmlc`6,=;Zh$5,4\NJE# !zIZRs2Dz銤 Z.IVl{Z߉MFjwWMӬ^YP+M=ݑb?EV¼v\9UW!hՉ*zGX}+K/@ ydrSOeŪU?+TZ+]vjf"_-wFn^31{#wEoe"0rB$ZB97pQOV Dvpf<It?8"">{  SY#2WL!RRREPc* cCr$)%8ϗ)F8ZH|`nƿW)C^ F'ٗ?f(ZJ/ !$B&dw |{ 70]hQ sV C&xއ6x ~:0'!KK9t7ܿрPwg!.s&kf+y]䈧dD!^=JӭikU3 )/դ;7I^ᄊd۬3-W,YM9D!>2Ӽ2>R7N/?5<226S?yp[7n\T!E*COS6*hO7nmg7Xooz8l=3S|Q*峕T va[WWCXy逅gdu}!#Umyuc5=Ko\hNZ̈cueg nf'eDVE,5.uO}R4Vnd͊qeɞ y|de2EJ;[@MW8˞VSvo+l/*&\ϛB^> 3`:) ?:'z0qy nlǼR8&2E{KEh`*@&do:qTBv Q'XI W :C}jpP$Eœ7r _MR) kĉ^w<'xyxy[mG> )@(X"+ ~a*NF W^v0~LSg1B= OdLK"ΒL7vsy Wv .q)@"pŜsW3 .x .A{()t_K8-׋J{3'~L,^@;X|d_HssXCoX Ƃ='W}=Cb[Hpju>xspɖ} 5?;0+AJ!N_he&1Bb+3;+9/x.R2+2=QXщJiec{cͥR-qOkPC,lnBm7n֦:j2sjSCP_?d0ujt;ty%F$IV7J4 K7'\AeIAtD9!JVi7eo9`K,X!X^)ADCB6; ruED[EBK5ݼG=r#rdj [ZBV yvRtȃ(.h -b39ًp h0PNDzL(g~yrX˅m'Dgz7=s=[$ sEc_E1T93=6_rպ` ןek|SI7=P@3=k4'$nc*f23=܂ޡjFsF'`?jY??q@'6w=)8+XG.mB հJpLQ'ˤ0K5Grj/aw Bhp]8 ~ Z(+`"Nț;A X ̂ ܆^AA&:_87 Onՠkp3PDs}:څ.>8`#(ketȢ\ ̆>$|:R,,}Z4:ϟfD &. ]d{bmPvp)"2m׭b5 W,sucTŎ9˞U8$Oe|I&A_f&CT}/L#_XXdtTjbUIդRQ|-˺_dQ2*&YlxnTɠJ~[LTA~$̪,WMˍWZqNy,Jk/!I\i8٦T{?J&e)G|hilfIZݻb˪)פut .šX;-)%dm3+1 !!=ēnƑP@p()Z4hw޳?̝{>0}]JM|UmkMzii.Z3|ވ]9acI{[<@q!_|#| oNLӏj\Ðu@'8'P(e!kpwxVi,Yƶ|St|.oQ|/'vE Btx쮸H&/*΀=Τz8ߓS4(E<{(}U٬>go ~x%o+!ݰ9D.XL;h_p<>h!nt)UP=`9ҁlsp i ^ع>!'B'(X;4M`+ 9~\## G+x)wԳ8~!3|+J؆^mhVɸpV!;qOp4u{v#pw/LƷqq#H=%0TH 0 +&UN0$ڃ/Vݳf?:QVnŰM *TT<7#9W[StYX^TU8>:O9n;p]P ULsveՐ_QtұĽsAfiQcvyYFM헪ښmʻUiq 5^hHm mT[LeIn(wƖS12y-G 5)( ֵ:K2ӗJ믝賳W]9 fI2W~sî)Sg\ԜJijθhg-铓.H\l( I"6!>(iEFUyܶ-L-r-3sⷍ}fl$Iz_Fq `ϣi31 >x0Fsq?X2Ϙf7ll)3݃h!ި jAT l3ʜ!!:wW /QI8$ v3oDpOU-ZTz^W]R=U)ܟ7);(=Qr0˗XאI&ҕýzb}i ~?'yd ٠G%=K% {⃬/*[ 洬Bv<`0l: c薐\~??LۨlhMEޤ*|G^Oˉr,z(z`O|֣(Lq4~B(m!D5ρ`b#It#a4 ]s?/SuW_V%"2Hh?w 8 EKEL |-- 08§7 ]F7ëq{M͸UbH63Zގ>?ce('[i 5P~\+wpܡp+*f{ V]NP +\29A71ܳTM >듻jQ'(Q-J9or@W>rP2ةF,lV͒.:wD48/8F ȂB $^a?wgf>\ӱ3X`UR-5󛔧y>Ÿ:qb A/B(z|p>fP-Yt!T ]Ǜ`:(DO`)KpmѧR؍ !k BwA@8fvxY WDYv\1$\3N'\)/S^sr,*f[M%y9eweߕʓR+KJW O2ªF=ʊ'خUzUbvRQYRJ_(^\>RglfXLG /Kk'yYϛퟺUz'{>.909XԥK!-0VWe6pr؛Bm <3(uap!6w  ϒ:|Yϯ^2IJvHgA$|8?,>dzIDwpI DM$RQo[o T"gJ|x26BKy)gɇsR. _Gg&_8.&p $ }ZI*7anB7+Ch:i:-JvEu Q߭mdT"z5Ļ673ea eSz~'8g&?/+iכ.{'\$V`5>LGTr=F_Br NHR`F H2t$pG+6\# BZ?'X+[AsFvSRZ@C*-wvjp&.eQqDz:ochޖ çyʶٗ ]Lͻ-?Z[;ZO[yf-i 3ڢC 7YiK%3ss v-muEa[`fu}JJ+V69> dV ?FÌMmaŹZsuiMM4nW^g?Tp+嚲Ua?fO2]5keZcE`/֝%Ҧƴtq#aKmTqXWsrC %9 eTĪ oݢͷf|L'xi-> B__Hl9iؚ|87h ŃJ\&pw+'lq*jQ{ ZB8+oD265{ @h E?ѱ\&!9,\ex >#y %Pr5trډhҞ$Ox10/ޒ@ H &]9Q_@N~ ?A-%9 ,4FօLfP$*vqk[7 =YkGn$Sݚm{>,~jvJ͓yڡFeuuҴ1Ed9}gߒX4شĚc}f`_귘Y !I?&hMmw93A<`ag9)8^/_=~Q^YYRe3L]~ˬ+jx1A?T\ZQTcvծʁL&(% F4Ļddgŧd䦝}uc;\\X.̌FDrS8_Yd ֣L: vV|<v-6A9'{)XN쾢>N=@ *lFֆ])ݔ'UN7 _ɷ)*Ǩb<<{L>O!FhmM,U|-8S]$?Gu"#WCN@g.sB '/ FKԃwzol ^Ѝ =&#u -d2i܈a'%q0 4MiŝJ\;$kJY2`C&g xԇy e CK2_ԏt)bWd9HZ^z npP ).CA*$RCn tnX%8Y; tRI,dFRͣ+H,p\4וQԱ_P'XV+#t bJވҋ^2sBO9&*Hz:=;7™;~a-7 FY}hu]<&&ɘ<:͢qB=( ?8/x~qyӶVoQ $d:ۏQ\\fCTQ݋Flcu:YoS?,HOӦt7D "#c_vVcP-su$")kɯEwE^0vPQIK#h 2.VdDkNݚ8}@JdrW ߛ efK*򪳪m}ӎČ`Cn`ޕOꝹkœtZbQtp*g"bH0YTqY j瞯x-Td[eDQ5J y'r3]xxx,E'\CGrߑ\w F!LB9ȁ 5p*M "&0`vvFm%T.h쌨EtB"b9(# Y` 9 .?8+y-e0^\<676u# dº h !pg C:8A/2OW&rD 3 <CG$L#ZF{T'4B!t SZ 0.14) $!IdS%=wރ):#$+"%4 B{ⒽF VRCK74|?op_/;g`ɖl=dn)YZ--=cOM-ؒndR,-.AHkzXZkhfpwei=#ս5k\z}žb+gFO4 $O36ZoVgn^Եt$m^s56Y[rm˪'Sc#[cJR)L*ʶ6Wu0*]).~qل񚜣E3O3NJHKIJ` EϘ̉Ř%8(4{!/Cg2 C ߁ $6G`'h/EE/S(R> d#j "V+ ;Q[h=Gp}8Mn~uy4>pw`!{CH z&5wPT[U|D< җ0<Jpo+p?EaP\%;H5.O"x*fgov;Nĸ . /RQB8yYUh<^_[^cFlflI6ʽ `&]3G~5$/HB~_a/ y<\5IR!i=Ġx :Klԃ,#3xՙ\$N ;{c/HOʈ$MvJETڑ9%e%al9tT_Cл(nVKf F2]zp-ֺY7ٔYƺ:߼E2doo>glnc:k^bgcqc./[grNњ$&׮g(hW|Vf׼&JD\xFA|j Lӑt~IEx@·\,dRB4D&WOቕh>m=l˗\ehZp*6/8™w0':.("r_6#QT|.-U#|y+tE"npv- L*dZ3DY,AjE+-`9v7ؓ8ړԙv Ua7p#FȘOts$b:Bh BTդ`R$;ͤAB;ѱtY@ KrR7 rWId,.G7ZY&;å7?9*GX]kKnerWiqop- ̍OKԑ=RMRnnt vgE6, K9ξl^Ňʣg7:ن*[o2X6?n*'m^иKYzU-N(8Qg/э(I]VW!$11H򝨇KEF xmc0碣q` A\wa s`)#2*x3_P ^ KW TM~ϱTWOF//#LP3}1eT2< fJQ5>J9" ,s 2?y%$(>p3| TUt^WeML|ݢtwJ=  vS^;a>4;g{\p8KPGDd"^dL|О'X9~*e"Un-V"kQy3??2$;@-~V;Q}.,&!!6(郉*7o'ѩ_lm鸉D ȿ03*u䅔4/Z+h[iw6OΪ Q.l c;}ļ{.&Q_FSq m=0 Z@"$V9 /it7<}U]'goam^JJy֡츬[^aԃȉo"|C? ̼0AnTA^С4 |S>!PG?Iq*=Q*ҁԎfU{IH 1M&/+i25[!+Z\s%d2!&!0_ ׀o +q>R19tP9A3P,|{#(o\'wsP8Kz T{@VݴESogtIj3&G_5cr)T0!q!L F1MXS_%yb<it4cwG1P>VS@N+N;a9龜M$\w[׵b6<1uS-Dړ 3]  OQ>FWÑvp3܃o;D ?P 01+jRy:1'k'Z1 ` @&*S*I(~_5N9U]x6}>zUOч&Cm~~ΞfMU%u5RDUv ?|e~_UT> EUQ?C0CV[.j7 A5|Г- r Qa2>#tmHoDf'e<+>*#'1æܢ}xf9o'eݽ[dUMK=$ۻVsX7^ 3+^32 {i~YWي!3^>,.gS] s44w 芩祇LvF{]'NPWjh"<|듵#kL}M v7M8bEF9[3M҂={n6ȻUu)h©wG*ռcցKyOsX׵70"tBmHͲ][s#*/oOEmR"®FβVw7tcKNsC|B"D| x$WQ~M2JRԅW|@%u7U;ZOSL埛 6a1x%aPCB_t+H1Ѝk0rőlMz/y%h%E+kX #i%@J8 S6< 4fMhE+싷q7yz(Ni bpT,3^gŐt?"P Qg {:Vt ɻv.j\QnVC1oF@(A7zڈG h'e^.\5k լI|>ᱏ&/;1*ϱSgIxyKMď꛵C4%[&_YlכM~_W9((\N13Veo5F?Jt Կ~UޔFޛlJWMM*3N ,7Nd[B+ە `EuZ̰lYͽ7]9ظ.ä-nK]NA w_}lw%RFobۢ_5#ʭj,JIg}T?i<#mxCZbIZ*5K":Eu lt\.Sq V<\uF>&pGyw2 !2 $BБLFHf)ච!0\H5$' AM?P3*+ATT5w"t^띒?d *GGTѓ_OhO?R)F01_,ٕGIԋӍXW_i1fcgz1%G8]uTxNNaOvBZ@W/ K O+ x±Sb rP+w(o*z(~ȟgJI䔣4[^^ 臭$tdh/D'҇+yͯ1JG 276P|=ְԆVw!a{8(h.`8&a]:;FYOzb{Y|ţË7uɫmZo~'a_Eg7VVN-6DZmi jWZX$ FV]iG})'2%=1I3fHOKtɅ_Ym:.jI`_ow.25%*I9W?pnUtzAW/|A2A5k9 e=_\%#9sWM"HR@DY?8: !+:b7/3T9|m\a*JR8I: 774 pj}S1fӑN螿~þM ,X 9H!M:A~ qgE,l pIx[-vtRڲ؋z%8Sh b&F%] Cpny#I jQ&zsu(xW65}xЍϔ\#-pdyPP,?q$KJ$$m%1%Lp! YYY(RR"fiZ?Jpo7R;Żv<+.О_ƻ=9(N5oa[X=Ls"EІwT?|7.3glTT6*S-Qr٥[nWޣxgtS6UmP|;kVs ܘgU|_ .]Q2frڻeWK6%QOE廛%Y~MF _ܪ,\ur,^--Ti*mlSev@`h_rxVp.q歜qP’!s#2?nr}mmkN68qՇe'&Jcjp{iΕEl p݌g8j{ ҧ6pvE.s}'0|ǎT'.C#]@[H[R8ה:!̏P&Fz}Gځdvާ<6g)qn|8|%5:޳8wI;[ y*: 7SrlC.}yZti9%!0YܨU~ULbDDNa(=؎6u鴎6SO1'NeCaݙT|>zІ=K{qM0SxiI+# vl"ү,@A ` "I,EkO[1ga^>DI+fO>+CjϘyjK6jQinsֽUSigJXX/'E~1_6/&[N֧7ռ+=a)5ߪl\)-֏6%g wz;skOS؊.egK. FWS|壊>~FO=7lp[P*۶cdCFjplfa=;yj&=68$oL_kSMi[ ךOoOOʒEg-;2z]vEF mCiġb(NlH?r bA)0)<4Aoȡlˡ`-]Z;I7_9#:ZHNNxV J!Q5xx tB2x3a⋋u 1b?ϡFc& Z<K ;8e 0bk'n'>1OApx܇~X|ip;4IgJL,8>s!=E̖ cAPF:Ur\1F_rB2EOG>OI,N^[C0OJ2y9a:fxżLV{' B19>9 p;D߇ (yЖ~]Nw`-A o utڕ%dk]OP/ygGQŗdOT#\:.:|a:N h$teYh-9[i[u㥦3ݺYo*Z2zi%?>)k-T1xMe\}D槆\CNi`Ūӕ1esK4[tUS޹MyK o2Rbg7Zn.kWZZ:Se [А"#cðZǟ _ϰrgJbUE~RgM!Y8{ź27.cVV_C>oLr_8ILXMa3 G  t tWz֡*\D"t$?A)6 )*yڥ !ޓX!|j(nV٠BHBX H8+wL [*Å8'oֈXGUG[1sv;q"k'OIIRV5VOs;~xvFk25<]P<p$gK-$Q1IT8v/"J=e-RUzY_$n3b k=lx\U0Dk\ k_fh!U8 Vf8O2aT~̙֪QIq"ld/pQ~KZ>LLNJs_Rꡪes [&s bbc}D :7ՕZdX~¥*6&R^fYhY]]Pe_޿0ViFYXiQ4+o]d}oV=6ZmyV_mZ?Zkf\y-+WGWG9xߴ`ocQ޷"Y($oCZbiӞMWwlco‚ڜмz۬=Niꛚ:-1{JeNݫ^h;JT]2Y)!krWbYr/E1d钐@amg.<|bKI=y\ 98)k\/|Gdą;d37@Ia3 ^>,C[*eY+Y(hJ_{V3K?j%EL t]}|wA"u'E1ww7.;˴_'9W8m)x i::pRASd~ja<ժ_cnHbL\cazϮn\W8CRx*aH2k\vt~.].'0ޡdKLnIme侣LTC MexW(( E ΜM<@{\ H(b@).%~ʏv3>}?X'ӡ#Ad_45$ ##l-COy2߆ O=p} j\!f( a J5$ [3[$,/0e#݌g =7֍ף]ӫ7 yAG@42>yf6-MOM_mUͼU %UIMӚ+ZoZ\c*;W*ok uV,Oƶ^NvuCYcѻ&(VZt1b˚x_5aF{T=ڣM݈zo]o/(&KRoz ݭY YS3Xbt;5 K 5Z:f!ndm=6 ɥM-u,\hI1 ϝ]/?,KIk2YiM0/{-oe&P>}Wl΅X<ok&VAq+nT!_!oxEڑ: |_̇xGy) d nB:$W/5\I>M?BI$LS@|7k *jx< Z'#E+FG_nD!,ih*΃Nb GO@i P/&X wp't#a YyBΰbm2QxOHJ1Q?pTcoG#_~ ' ' ű04+M_=:0|WgXMA=-?EExCÐ9p?ᗣu#JE$>,iihfDn=d̃JJh*LdL^h Hb|}н I XRZݥ*FC*R}:F^#IuHzvCˆ +vftmm7b3s;#ι!PzkMZ@, -ezj\Ms֪"[w$Lul*ZiL #2#rcSU_Mn}&VD[eg+ed/ )E.ks5kƦKRo-H:29}՚ڞƔ%9lJe6 ~zLa(^Ya(LX:ÔǕ{ەj3`#cx08 ގx c;xBg71d&6C6C' n+ˍW]p̌+-F LQf}Np[*<z܌XH Alia?X P q?rC |[Ј_kd a^L%nE[*o\ iDC-D>dPK1 ~P&D4> Op%WP g_gQ>;2~;JKt ڍ8C,U1rnM>lÏBBƿ."TT/t z#rÝ'ޡ2P߅6;͜@r` x8<Nh#K#!HM~4-[wK[X\^Ri057Wl.qX1Y\+uMQk]lX_3%ڔ`67?iiGDŽUȚr YoTΔ*ԕ6@~Pi^Y[MOWRl9*N撓Q{rUQ4}]-[-\stmRF"Sk{IX:}Sއkٕi3KzX okeK:7AV_,`\]N;d\/M*}c" =0:K t/Pw|L ҫC%IY] \K I}Rna`yI7s"x rh!1tC|"#ž$e]#SU`څwXUN}(ڒ+lGqB `+bWtGŻx 5X89 p93hCoMJ #+`JTȢI|C_ <nЍqΣa`IJ=PMA^s[(]FU| ~]p>]sq8{QqKK>aØl V**_!] l#vU!"Ocjzlb&Wʢo8?\֛+ q|:,hZB滣Ȇ>8 G 읳Cu5fS_noG)ְWdnlpI:Atwo'de_3 *нwt8fzQwYx{IA#YkŴ쨦K;}Olcj]R7eu;mOjoY>5Z)dO*WJ_ަnpaT*Rrg/44}{d+_5k89~sܰŔД. ies *ccj͊oM8:2۝S?`/3Oh_0`.&n U" B[AM*'>!X~64A4R:0d;_ y<$#nS . ;%_a~ğw9JaNW |M `|8w;1w;K%G'IW?'èY^çp|B`\OTSIf o]8g^FQF/Zќο! 5 gy7}DOPn(W!7oRS])GNJQD~9,9ò}6.ǀ5XQtgbW.y_IFTRuy3b4ܯ*[ôW&`A+̻~GoQ&hc(G5)CH̬h"myWTA&>|_,Yx1@?YzJXW:R,*"D5Qlҋsr֏ј}N[ejh*5d۾wvjk:s[{Ee8^&Rnsŝd=K(ߦ+JJwM<",2tv#WE/m[`KΞySۯbtC`uyr}e9Kĩ .mc * X 1ib7lf;`1y_f[]A&W,KUuIk4I%)^EǽYXXQT!eDbW8E[aGc/cif|͑or,C\G)=[<|/?x7h~~(m0 '_ I*8hB!0T}?\񐇗W8@22Nx2tzۅS8ڄ{lOwr8e? @]i]P\frWp,$B Ka#S^WUx.'ߩ睊1mlX5\:/-oP p NEpcsQ&?»1O ՠIh n 0߫j9ߢz:ʯЂߣVӹ죸nc&Uj"[p/*w@=&db;}V9T-mRFp]v?pppy%pǨ{$1uww[M3hY_KNIoW|[MQ{v6Ų,y᳼_bD]u9Fn~Y.-ܐpvɅ3>aջߘsԵdJY^^s!י׮@W蹾N.==WXɊ^=nW<]zv$6wY^\^D[O9̜._9ZXTrѳ1z9fP'U|_$3KrIg4s@j`Zb J6?ڃ e"D{ jr&2C[y ,x2N_OQx%Σk{ix1w?#-%EU#jFF'S<H,z ,ߡFYJ:f:/`E0v'*7-%|s(]TEv;3sNg325$.^z!//c>+|&Ws}_?u\̗+E3$Exp)| mJdTٍ4Ny);rTe |NUVA"{bf0KBq+*$g1|jKl"M{Sê >Ukl x\mik 2}o50{YXZ/BMցV%Rk?G9UVme~4L4YǙzepܶr]4aS'镩"8s_UHqwk$.7bg\3Oj:_z)Js^,o8mQ?vkfhNH/١Y˃J-y?CPйdT޵Ux(٪i3e.br1j* Ӟ6j팙%.[zaɔ/j,j /Mi'\$ǓLn <6<)E&7( & !<>'pW*)w"(iz4ьGjR )/Q - ^]Pr#zVq=ڵ8MD{ e% J-Å,-hE)#a|$II6Z!AѴE'|[Jm#XqHn'E0VnJ͍>r*ޝsnnjDX՟ס|0]VMm:Ah.KQ((Tٳ")yWz-.NJDEE$1JN`i?N iOnN} ="ZwCPd?uk#?,`GU`L(/ϕۘxf sf=xlؙLAF^a5n [BZeÆ u6n?]gl|ь+w66p5c-Ss7&WI6W'{}5Z")[չ^ejTe,֣YGqp#{]zP~FI[sG^1Zlmts=#FIP~[n$MZ{:Achsޅ"W^rl)Sh:irJ4팧)N\cbEԉeYI{ ߚ Rle-i8X3/TҿМo*~S,)| M-m|/Pw!&ⶄhngIQ4Ei[{@(܆W?Twa uaz}$mXJ0CojJ {hw A7pQ @J nB_fw:f+@yzMɝ ?Ѧ]L845lS$nNp Oǵ4h 8E`%L-31:H}V8,"JP(BwaS'P. {l!S[L_VQuVR~'88O_\P* LF1FWa1h9@GD]G/V~_|9*.zeFJ~t"}-*t%z,Ō(ܷ;/=_"hhHMt蓴/]2C'H-Nk ̖]sً򕬒u??fE6@qD]WEǧ-3)Øv jܬ>9^YWcRWZcn̓=ܞUNaKm~ONS{NF18ղӚka-j[ma~iQt:s :k˲eaFql-WM|tS,:7jb"Z)[3Cʬ;W2i\(yJvj3[]\QAރMPd,G et&/ȝZZviZ#Ɖ}2}\ /+?* ,&(SH;`Xf|M!(IfGc 8T٪Ͷ3]4~}uS56UX;;eqsHN<}x3O+uXTUYk-\;?9g Pf`znIB1B];QtUs]yf3zz+ su3.Wd4:MBECőM pM*:3BVs/kwַ/KJ@~L$ַj볫VUUV~+ó/c Mgfvy"++#6IzS޸J!0iWܫ^ EL,YUFǰ~\gnR$`^pPطQe^Yr]nӛv~okkLjg:S>y{89nuN{R^=/=G<̭e|7C)|t㟲Y8 uh IC0waԄ cI:BI<\lu O7 Z >l!Eh? {PJK8 '@4/Y•G ;FAp%.Ja=d)8ɨuG3Q1zעxTR' |Gtgfa8~"+| ?@PDh*@h'ʅ(wqr';›@pe_3=1|ʉA Ri3q.L9nF&8n<$ݩ{;M˲+ҭoXidf]o !քDC|%<]{g]߭ +L˔V6?m.|K//e6Nf~@ؐ~m?ϮuFQ}d"GS%I"#IsʆL!{2 ${ېTr9ˊ,p͕*rWmB.Nv>`@И{)C09pz͓Ҏj(kYeJs )քkjW5i^p@z.*yO =G'_0=x{u|[ҪC^>Rl ~XiAg@鎱vtlۜZ pxvUX*q7l Ha_>p\$`/;O0֢mp|a_(/#q %a$pgh܂Si<Rp nxNA! ۡZP#JO9x̽bm7\;0 23)ߊd}o$‡t#.ąC&RANst3FO=WlsO%SW-j&YbbAp skLC-ӪSQfqL1Wf6֦'&?gisLuf鷌Aщ)E)ʤٺʦZE2kD)G3 6IjI;K\q2~Jaq٩qVDb 0zUE{^)U?EP N=䤰VcXeaw^u*e\z̅Cy KsX&/|_GO~(U0D Nbb49#,b*aEM.1Xt'DĞC ,I9iOYzt&SӒGYz%RʜMwd/nD+'$ĚHxMP^""C/lEmJwPK.J#QTiF%5YBb2o(_W.\4EXڔ+<[o,Oe.p;ny}]hޞ'߯ vw_mͣ>ޏ܏xsqO]hȉd0&r,9kh!t;`0W Tȹlk(A;7֠x!҉Ypi-Bned W W G≈GːY&7f71 >MXh,.Ab| Z 8Ã]`4ZZ%I3ax"@5 #z%E)p:ss3X]".2A(7/:P.q\#!z֋щU>` ?;\#F? %D&&:ECg"[T~I%$w8#I4X"Lm WRLdϰ 2.2\5;J}5+ZCSDS'MTC<;]K/^Ov{r<%%.Hkz{iR<`^) jj+ITXMLYuRKPI sc;S]Jn(RFd +y >DgΧ~1ӍQNG4,19ۺG#4;_}rG cU Ql1#3\5i ,{NNPwEON^oKyh؛nbߚtqΘͲ{]))a# l/o`,B-cON9=0Y-=GY>`[xZ` _x'sAgR>ֵaeE:w_X!6O/;=E4ñ :qo/6q[ J\.G𤕗AfLDJ&ع'OH.pB\ bw @7*ѓs@"hCx ~C NJdP‹(?ëeN E^Ÿ}=Qx z@] uu {P#N9ViPOwL*=@ _ $\ +,(CffTQF|"Tu^(59iB b :W<2J%fT/d!&1}lj%`t?tg8Ɗ͍rD(i,͛;# wƞc2Le3f<ݛ&w}H; >[g3i :L3Q.Mv=d~bB ںvs;<^cunж]Y~iޡcaj@ByyGLMO\R[2nf{/0%S;%\MJ:4;jSxl|VUDt/!7HaA"S9}SjV{r;ᆌ ک3*>*/ӴTDiPΪ3.گ)HѕwnjݼeNz06]?V﫝UG6#Ӧ e=LĶ$A3[u@Bi:WrK(4m] ῜88Qhw#Fڀ:x,JzCVݱ@L&u$>QrcKJJlR.؄g TFlU [xî]&Dm\OL|b `GVLz?=0^ !k2B8vsNLmP7< ?b$R?-hۣj^1ރSyI xp F/9` >]l&(DY#<G1➥jL!7ULn=^fh6 g-b|.P!nGr!B$Z0bHL$Roq.` Du; /I!AH+.T#TGr~ȝe=vn0dVp..;[?@:8Ưp +;=cp+l>cesG8#륢yx_*Ofo$J1lsof.) 8B[h_FL`_J"gClp4:xqY?s>ejqGbWf9j藰7a@ArqJWDzJcu/UtI|ҴҼy{L%њbۏbI<ߤhC]6-VU 7jJG7*pZql,j,Q7+4h۴'u'ug/ͽ[vC8-n'u͗vLޫo}wHz<T:0dA)0cfM[w[N1aݘބjC68R+OŮ)|"+|} ?GnR's΋VXf!;%u>e3>52Z<ˠW9nmfx`b%E%8~[T.xe(=#t L%lFAQ M+'qÀr| +hJQ4SO4Bcq2Wg^VX&V%DM"NbF„$DPA8_'?Sq:((-JPqo䚹z.C|8[ t@+?|" 'm?5ZOuͭYMfvB$y,fS]22N$&5.Vf4p2YʥW%T" '\H^Ŷ$9\֓ul |xRnp+w5%kG{Ϙ(u>H@'=P>Ǡ n!nNʼn8@~Uƴ0EII Iw2; vW*}N}浵cIY*TɛߝP^s}UivYRMZ&ؙ1ߒ+ Aڇ7s"\R*XVT蚿J_hWf/:unUzz,Cݩ?TgUX^yط#M8q}F\}"ضæֽfhUݖ]y5AO"'|fNҽ'tCdLȘy'2W?#}7hwu0䏱R~,pŃx8ž Yc.]\8>pᨕU˶:: s}$ FV`)„0A@:ysQ "[uX 'BVd/lBr8[8Dmb߄ /`+>k2^b>};*^wG) !hHr8Պ 蚸ꆸ4턗7-E#>k5ijt5(@5?y;L?yH \Ŗ1\©WZj%;)w3Opk߸a鉜%I+$ 3)#Kȥ2ʖZ#v?gr:5dJr"%'#Dw%r@ saL;ucO9f;[2#W֍_". }\4F؏s^4p,xW֚lal9'@ohxxC !f$#bGpo_`-f!{yD'%&>U¼9MZvo>!#@u`oȝv^(ujVV&*wP~z{GtNjvۉmyU.n4oZT+@6%r諰hOUuq1֩6cnF.c"va&0gZ]KBAc`fTP;vpTl=v7kfg}~g_$aW@.OUY1ڬ14 `d]M;?U^](~f_/6XK7+mO>1A.YHcXHҍ<&H8|NǮ6X D p 0L|UΤ4 v`^/HDtL+\v2$pnQ{5E"Vh&uc$BNN>`OG7У<Q%V؃%Nv;R Sd!N4D+/idX 2/- $8L.v_UGeYYJTGŦ)øconחVunRRU$r8gGeMم ,b܅eA ?C P%X ԪpgMC7L))*,~JġJQ%%/NF fR܊=bTI#BmGcҼ:1kvi4ͩ&-c4V*Ε+[0]1naHqvQuНbIh2]L{p;apʸIIQ YK(nvbIC’جm&ۮj|ۗPrثiJө;;awws \Ռ&5.mSѾQlp$#ԝ>dXe?UKYؖ4?c7{qYAio/ LV" /qoa,W1t_fI8FA͡J+{ۚ؞yٸ I{c#Qnm\4[K !# yKEHOVR ЧP"_$aw?h,i!I),XMӠ%* )$.cH:̄9d48 ?HgbF΂|i:@ Kͅ~Tch%lے$6dԍ%6&#|ݭ{L Z|,1pXQ䍒NiP}<x"}dzZI**9WUP멶+Mݔ!ApE tib!L6pJPQ|.)^~YJs #Qwq! N Ma,dk.W1kTT_1[#͒V]q`,LaIJt=~DN'lvӃ0?F2Q{ۮBoh MN,f6USWQ̯晡W"j僊VTE *j*#m kv|OZsHUJu)U QܺE`gus1GfK|<=H0H+% RS9ŻJ?`uOowv9M'M|f7]jrocS}]G+*+[疋5Ś y9nܶ?>Sf_d^w!WCE$xrƠA!Z| hr?@:ٰuL,͊h,-}0tO8l/4Djsw-Ƿx&oJh &-JNAQ> aRH'?s$7y4=F`6_'H,7p6RC}iY E Hc$a}@WXNzBa!Ld*xGͨ>BA_S ,&"9OB1 i,K|`~[DMxљ1Wz-%9dc rG߲q'|<#M.Knh7&W"-P;й  X^5h0.oKeP9TmR%R{ $ZQ? S,MyKyZ8Y9Qч\y Nb`Ri٢?Z_'TipUJT4~bbXxLdg^FK,.fJH+^e,NIf'WreLۀ-j#UxXaaqq!{"neɎ>mNv}~T %d^/*]VhnYKAD̫D?`Aڬk .S,+ j슽*Z$ 1}GDzBEw*>TUlJݻyCjMƢi-M=yTYI7=3hkǸ]>NVPCuN{5jި_ۘ[!Fd7b#C-?N q=|t[taL&.c顑aC g{}{{Ht>hbe/ i,%z3ҋdB;_O;5>3r˲<[N;A8 @\'.!Bæ i{< [%DѮq$4sFP,q*ϢoH=x*KoDZY"\/3j8=z`F?B *bM.y!n$&d"yrqpD$V4E!AEO⓸(x}gwOr䊇&) G9t_N*0CJ{!~Wn2SDU&#.f@&9+ܨ79`>SrX/r ,R*?AG"IRDqWdG Ft ́7v YE$/-6>Ɍ#Xvm$t]rLp0wsT)Sʇ|M`nwC u@訰[dڛDyPŏFrUZUQq%g.~ Bζl] :EBXZ ^ BUZͭZyj_'!DPqC8&ԣè3친%x"]6:cPt2iغ"@~}by-y !nycr^ʭ;0Ъ?(ePFZ^V (^_ݯ{>Y7rɇҐɅ5 *.KķkKw ڝU#8O{M1i]WegE*_,QNi :rdAT&]*O8/<;-_둹'mN$uBqbb,rƥLpӼ)*4Th\?qʸИQ'Hm!c ~u_ *]x87;Nuͱ_au:2$Jԑ=Bҕl&ufm=Wpt`e˓ER |E[Yz!?jMAvrˡ>'Ꮴk-`XHv2kOdl#AY~4d >Aޣ\mpv;:q}ԥƺ T/3qFlaRt)]mP>%h0VWfMﰾ @Y"y{LD,gqKc !4e=>aXFcmd "k^Y7f]dsI,:63hJv. $dLx,khϸ{bYh샍YT.#!^(s,ݙkIg\N%$v<^S{2^ d*+Hn2)U0k7hkI,낫RX&#}# <%.s c)&S':Q8(曄]JWMB?Ue]9FVWr/^|'J),,ltIꋚ ,i$-#̱n6g(kZiGP)bSLUQ/+| "mE#IQ^E;Jk5bL&~Q2겄jmsyGuO}˨W4Lc邂f]\.%FNueR.ɹ[|r|wZ<1\"V7.oFԄ.i-yy ssk'ZF~{ڽ㵅y49b}cCTC kwhc ]&I$Zvrvl ib~CaAwSb%a[%맹n[^*Dl+s9ĥ+6qxUpw­gӆ>_7$!W+';9E9m;ñv'rXl6be 7HFF@Mv놕OBhcB >@$v Kt` s|~a]ct;ĺ;o6rְ|;sXzh~G&xMH aͭ+myd:i$5ɸcYև22|?q)*'GEYؓD(:E F[k`kq_o,ꈎ3zG(\+ D/xO,Ȧۛ&[%&Zn }+%EwK}5 rLؤY?m?-Ōyi9b;H ?;gZ1,8YOWC2ojWqy;9g+Ko[ѐ`P7GǕ^֤Zyhrd 9WJo3; hٳqCEݘ1mN!+}C Ylfb Uwm&؟rWZpqmgWU6C\:[%9)q6CZ4)Gg<\+>ڭur$ /s|bxM%zݒj4B,|V}".(Kyx+Hт \rzhsX>{t!k%$* 'v<>H?S-H:󤚄.A#xeRK!Lu&a/YJpC*YYcfiHO2r)NQSI0ܖEh >V6u**ǡx'D1/;s`\+a%A?M)qXS% \ʅD8+82>b܎.%ɗe1EH/`fiވb4bg*rW1o!WػX6x`n,Yiێr|,<ڻ$^ȜrW_ul:yK[_60(pm&mSkV=UdZ)L}MzyŲ]e^F}fG_i}NzY;wwmu 37dfnJr'h.jS=?byThg*k$gz[SYk3$:o!%އ|~k}7 #^}pck#ΖWmZ.ng]/g{vV^YehezC0[v8pDZNl;ڽkk9bdԆJQ$I6&d*:Y@v!0l,($yZJtil@U$*h&MFch;1a ^y dw?q!K5`%ؐh:A0C2#a6Gob "k-R#I$̀ uXYBeN-E236Hp$@ ZH@Ԡn[ }T~<'3wns$/9c jH S3d 3<| (#` nKwL4@FNj\j84 H@}p6xHհa D3ž$ n=씌kPZA}ɡKK/ _@Ɏf:C5Ld/SLRĬb/IsHỴݴ.Wӽd9ƺeH"Ov87#Y ;8o.CKܹ`+h`<=NzA"ǃ`$ lΟ;\ p^Af1n$ͲDn Ǚ/0wEϬ{%2Jrۢf6-!*Pf+ ~(t[ɋ .rJJLȽZvXPjX]v0|DŦǥLɆ }89s6Z~`,9ȱ6*o *l*tֿԿ+t:ڒS&EC {N2*|l"0t~з;!j]>8ΖV;\/* iOӞU͞cX*_ TP VyjR)TUy)]8~w.,;<I\ax1wG87Box4_CB|[(~JA&|aLr & q.N)w$ŝ~נ"-PVago:}${t%C;Q چtJO6\ =Y%^a Ia $inPaكG+CVx:P Li6sMJ7vǓxk24KQc /DwA?!.Ds`/J`6w0{b<Z{V"Ei)b+qg[xxgZ%b_p HzF:[dzl4ǨQJ{Kt3 ;3s3lwn0W+f!xεpE\!ch8]O,nB8Sn{'`\ 7i kd F %?-k"W+4T&ث?l>gQkJ4Z&U;m5E߭l2dGqc>67x㌔#Iw&YPfݚUcj{*)]xs>>eaoy1r{j-ۡ~}o۞`}Y>E3b 5y|,QuovxK6dIw)ZZM:N+!0WvMv<<6򶗳gMTܣI9X񯇵kV!/C~Y ^p \Oug8z b*xtJx/#S0lII7~@d@3z|":G򾲕C)Dkh&Vh4v¥dƓQ2Ja _u#Xr#8d?ކ[x/v\c vE05N}H* IJz |n^ zpv%6ິNk?)>AK&H,jWdVV(h4 uh| Pq;=c?7 t ~7+l~pkPHV8W ~IfJ\*i̙&6p!Maט8Nr۸w3R6uv/S9t5as/NdpW/u\ ry(EL8U + J.!_ `xރCq6C$_+\kr?)A t^L !NXM0 QȎz@ݤzR@/o֓fskh+EG8w.g1J-3p]hwe380uPN70[{"Ip ~A$JXҸT`>bHKLSLcIlON"8=̀@ j8"bXv8A G.B57n\  %='&WvlY閠լbt@:B8țwZ[#[WP)z3sYu O$g7Jݬcy+kW ʼWڛ/3ԛv]i<[[d~CQoVO%4Uʬ8\;UW۳wngCɎ7խe~% {>uPmV(+^.*hbGu&HKŸk6MPwѼ(IBwxaLTW[ ziGlOiRΫ)Nj18,y]q_ra8yvMϬ#lҩtt7%Zd_.bZmB;g+yH/rA'#R7o{wyWPZ)2k,PoG˅&?OXB<\GŢ梄%$O^T K{^x0'swhu4#F4Oݠ0]lb3((tG(}\.Ө"1m .!xh HT>4-j (Ns;.Ro#fD+ Hxi{6Kl5%ֲW6#H9] Tx\D[D>Fsl6F_*]v!Kc `2W r/zC<$LmDKzP"zOD?"~ G> 2P' 0 N ]x!kclt-^IK=gZsެ|t㮄ѣboUtQc /e y v+*eON\;@5'nԂ1'R~Bŀ[v-L+hx]yؖ{-qF.]d/cʠa}[#-5-Ƿ1;%^rhռ%s 5lǴV/ <5fTLӮVUw7jD 1 & 9ދ<땁6{\V%+<+FRf& +ITʧ.!%+q RJ[$iwvt? lą'2BL}r[8+ˆ;r 8e݄$ipr:NIXEvQ>R<㠷g D M̋8x AK`|w zH<+ lj΅&_;%Z<_=AwP%B?lOP3)t8속( o3[32#Ul ع u*SVi7.qc/׭?{W_j4]9د\M~X\x0PZZZҩ-XI2sk6mnnxQRzqX񪢑E]E>dBF|DEV0uiJ񒱳lSYPQRZ9X]o.yVðpѰ WܾafI Q[i^;j]ςzWS4m5|fzxDC[*|q., P7's7Leo&=.*1:/^㠶1^2rH54Ӡ4z^zyU6(:ܧ9r1w*#sgGKH?d6Vm;j S=-ӛ[) lSD*%DLX;]:wRX6go"% K;7;r sj\U~Lx*;p1I6cXT";^Yl?q ߁>K;*9?C8{9)OOVnx#hBo+'+Gt\| W!8 UЁ3e *iiQ' D)\*ڍŸ>٢0[~\K!Rgf=gxf4j?$gB>ҭ6lHII8a9p WT(4'Ql"^u ZW}OZ.jwJFl}`ɻؒ.E77S{r!mI1844dyaKqq3;-oպ vduIZRk$d#.CdeC:JS1j/}խѓ4s#օ'ph*SY"{E| DK1`;~B~'Sp A0f*Cgp7["0[tw*n~^ cNyYl搅v@!<; -_#~&6[M[l(B"<\N摮~?ɚdJd'瓁Dopǣ簗w:+aƏ3E>=W,\nxX(3y{3Tk8kån 64\y1`(_RQW_;rq}4c寫~ȿ7@K- )rFKsLJkICTíB]NRleN?*/(hAh1z˝i;77v)1]x3=>Q\c?rfҜ|t[K+TO.b24lPQ`J*;gFwyC+z״E^.yÊ4Ur?E.zcs|+v9z466Fkߖͻ,|jerѪ'&ѶܲWW>Sl:CI]º'L-*5&m2Al\OBd@q{>B^%|"WnR_ ޶7 1De3<%}X!.6Q@r(EfLFK,Ơ/NBf@G10ґx`4 |YI-}Ã|&b Q B!0 dLa.~@ k|ҌLQѦFǨ/k#{BtYދU}oX|k7k}ẁKn>|~O4:~tUݶN-vi]D ZVXX"g`w;aekyA4PKF\9wpr&wvrltZ>YP2U#',]dW<Ƴ8kktA {eٽ8Nb"$PZ($1K7@"抯K2ZEw32'c&9J}6NO0lLϨBX8^"1 \! WA GQ Q n9G\ j 42w)RPzA<#&R".LuBzhZk{j$B<v|@wA'c NRJ&M\>0AZ~:C53WM"\>8.!XRhoeX\n6I`2!HEM*-A@"Rl&M Hlp?QfTz.󆢴i4Q̚n84V壊ĝkۆ6VV*ra^sկjV=XY{]s߆3%k,v,]o*/q-琙v ;e}}'ܧ:$:_d52OOғ\2>!0$ztY1i1Fl|%G=i)2$"&dj},ZN[g3<27{̈́(wS9|=|c5*պmP[d>~=>GzSN,s:3iqgg.]l~X#o59a?~-Me;lӶf9g1;1 EqJLpџnīEnE (T6ֱSw<<#_Iht%KMQXG.+A 3 PugV1p<j`'Dr%PX `+##<;2PZ BQ):|:(WKM Tr>9A"%@N'ב(+aѫ*Kq1LcbzTeH?  {q1\-jw0+>C[`~Jd4OYD6B/k{m#G#p"mϤ'맸 3iCvf4ğP6B_FK'?V Vѿ3= YD3'f6`.i(%{ ړyBw$}EVDBHHc^*\L5R!2Ayr;qMz8E "BIcIh9d9?=h@]2w;p%HP+,ܳ@ASsFv+c_par[5?C[XbwG ̘P6a Q)g-kfajFCX:p:2@?K\^eDZ8;-\õ5 Ei0g'6egKK5R\CUk˗W5Vh]wܖ~/y̳إ|:^;RPbRkitcIȜ3MYXTMỤ6]/H?^6է}\GQ~=k좥]|cXCl鑱tXnXtAi.7Mk7n7d 6C );N sFk:>҇; u*ui~)UN$jB["釨SyDcg:_v.q;8BX".N۝l8ő;p0k=VNZ$ORW?Y܍Ow3j:(RĈ #J"*"IPiZbzQ2D? Pa8 D2Qr56[f@{ N`8p"܈! 8 sgi<zã5Db0_@H/n!aiq7ٸ'֣a%e =d$xN$_3D;D~RXabIjG!U&OK'%.X([ #fp?ZҍZX .,E,)7*sfe*.ýd~K&eXpG7wv]a!x'0Ob؞5'l8VrCqnb'>2Ll @ȳ"[#߯WtQ+BŴw  yLnwhY|Ww)!e`W&ƥjN mBZ.o}1n3|k_6_˦WhԪowےnXP[-)sf.<_}|(oLVmfGr4&,?RִcsuwD6_p\egptҤ26/F-5Ndhy$ʸc8`Xho/dž GO懾 I %@Pgԍwiߴ^3w|z{}_E_V{GӫYS_/$[~>Qk>ƾͱvعb8N[sw.)ϐw<j&W U^4?fYŏJ[>Ej`O0|(ĀH !vHV_x˘ڍLet2uQM炧ZE`d`' ;xk_wKO`ͦ :#~+3#(87*<0}.q(|#W!YR(0,c#(Z  at*8)Sui%qC_xJH܈ LՐ{PR+Q{RrV)WI>Hpt> p(fcf ;@ xWΑ?./풝Qp {ɺ #)*| /c``R ,\.c;Kwsk6 {k/5r|b⎜hU-PQ+Q-Aeb9:NwIpA}ſsGLY|fqivVn'ڟ~n>WTngph߹yff6KVǖ-[b7үj*Cޯ%\5VU'_4n)Ҹ!E"ƌKgq񉓓F$M/Cԯ:SztUĂ%QiZ5Ib40u4x# j@&tq+<@ $&B0oL4}\`5y[Y4P{ĤT"K&K$&Iy&dYLmO`l2S:@2WO\*+i"vH7K[ z3s>p؍'ąAvv, sU!9yN>Bm*NȮø>x*&4 % DAo(g./2l;ؕiN'|~l.R)rZn/r |/nqU։ܯ:A$j5lr_y9e_K rBGs;R깒ʓ6/kVh_|hmWڨ+mmv-چ6쯌-}וZQZf76gQںR՚:$~pek}Jt>ڲv'POּI?4G0Ę OB#3.nD/ SG Fóڈ1׆23C4)b_8d@ЎVk n <}`sMZSnا|ڷB֟ [[Nӥ㕭>OscJjn$8V81_9*}8.CEe6MY~"{yV9G |]9Zv3^p"XE-DyNmg#1w(O-rF\cudS*O]_QilPU9 ,* 3?YO`tyS $n!a"0G @` c|Ph/*OwG 17C?gރx/Cp:Ȥ_);؁^J9Duw$.xIo\QNw GMLd՗ӥ!iṭw&:b 1AQ s S&?p9/aުVe_M(ay mw Д.FkZ)M̊AG TL"*HwZհAʆmZ@~iڑṼܷzj/6<R{bnjSuΟ^rUy< _3sԸ>UobHݒ!s EW1)7ֽ7j _a;kRxRV*"~_lh]kgU={dv*>lt?"*b8!1*ΰ#p b9=^ijy} @O /GSP$e D~p0?a;s3b2Ȗ 4? -xh m== + Fpt2'gi~΢xqxdDf$%5 IxcBR爛4դLkDS# VJI/2zQ:x.C|DC%U:+w^n]yaO,b[a#du4'7b빑@&{έ=P 3OFlG cMV ֌d4UTGd:lگ6Ƿ[Nտko߆F4jUuA5*zj5:8VwTyۆW,kuk/ $̯$! $(E&HMB PEvѵb_ڿ59g&UU#ާ0]zkg{f6.|H]Gk75mS[oj ?FR`܋'z?Cx"3"UPǜ=56F!AT6(ɶ2r-|ױO Xk ܄|P0ݙZ.7a.ڇ`!|` ,C#z l( Q| 4$sz"NALO9x/0PH7Hp*RAC H{ BFTt@C-x,[pSA4ET'8K[2U_4N!)L 7Lr*z"JNHۢDҁ4CBoAHD\~:93t{w/4q$>ײd?i}&[dgi_7,xJOt sp۽PvNG,S;+G(F˿<jxG JgQ}[ܛϤ+2g5< u;f5nK\n?}ҸiuMm3kտ}Pu|V庪!}^7mQVW Wۻn}N$ofCUl+V0!QyiAZpο~s6S~M{'W-oWY{+vhA?\W}^xMB;Gk.kfk8Kf)QS1_"D Xp4\TϨk"GVF=ryķx_L tzz^+%Ue^{Wz˭X@ny͢.can0SiVEQ=:&qw ;WyotdTx܁b;EchFb?6rfġx$Hǎcx|d8f"39 `& ݀+a B1T 6f->Cag@'hk/˦3bLJ8*̇CȀ؄ i ǔF1p4VG$Wj"]O= FJ+gV _ nWanIAxS||H@_(7U¡`@0I8E_ ԉ"XG1Wl#ݼJ(x0Ùeߘhz?~GEF" lDŎwϐ R|w$..sM˞ȷ rR>QqX@\<أA(e7^V*W8 T_Uד,^ҰwSI޴ 6]cR]M/z_Vo?VwzGEAΏz_/Ŷ;߷\r{u~S[uVyW"xXKumfӊKgay ՑuvLnQI!_t=tu%goJ8bVвfq=}k4[q{4O0ƝXmrmؙlnWĝR/qG1]Q#;E yp)YpDl;׏E3+F26]U/FD>&3hYو ,FqcD(QQ"*LE_Y<Wz%DɎ|yc2id [K>Lg6}KHa`tUoU 1ms܄V Ɓ3Z<h NkW ^x0lQpʹTt >q9x w$g 6p%J밞yǴ<& '$D>f!L5|E?赠^Oj4}>A·@(L^7P53QH7޽l\QWW <0z&x.yu>M,>>*-zuՋ ?sC_co6{ɥ鏂?kvܩSQҥ}=f]^utZURPbzQ6\czkbmy^-a5WMe\h1.eZ SW㶜2Y+_HKUVkJwFQX.IVrrm=} fyq욲ړ-N[T) ѥPE " fz&'ұ˺׆2}ݚnYjj]֩qGl}q5({Ѳ`21ae\CܑXvSCjs4~Z6ou$ANȅq4hv[auz.ls\MiT1waG3@KKTB(= ӈ̇NH3Fŷ$n^8%@i^Ez^'ҵ;y0d%Ѩ#w@Vp"589H 2Ȉ&! hv9b+ J T 9ve0'7drD ﮆ{.jf:ZA.ϡ֠Ŭ$'#k+-> ;!йt(+܎f b@O#:qh 1\2`};/{@b&SND y%QQ zF%ҩE<+( * tCt=]<| g143EInS.) BDa ɭ@,!lqqAn?f f(etgϝ WI$#3hPpáҰ}>z!}9k jN'fV=w/--e(s>mޒe.)5[%VgkLeZ2(_?CmU#*}LΦR sjlYjk3;MՏZ\V̴4֗ݍ)6Eݱ5 K93ˁӔbY4xqe)6}-ELŐЉfZ, ݵߋ#t'K%s n4)srNӵZkN2AʍQ[ՙnWVsԿE~ʊr P/9Vz+Z=+do!߷R알F`V"q3zS( }Dx}^HOtxD|rMP' X{B~VǨ5j ށPC, wӕ0> S@ɓ0)v& JIVVA4*v#iz#ӎ2{\:ʇ|pbx*-;>`/^s7$rj,qzeDrW`pYtRA>rEzP6J-1K4cs.gwMKUDzmKyN3~emnMS >;Scs[ qoknα,;^z6hԏzm Gm|[K?ͪ`blzoxPMަS_~Ɩ1adanWRǩ$}H pڼZ?.аfojO r MOscwC4.AIAN~|aփgΘчE\ q%ST} =RzlZP1uxzQ`o؍nCkMY$y΅BkzÚ dG|@N8C@ $n"hw@> -e Y<=%3] _^x6k` /P_d=1wxax@=q|ziq*ϡ?hjQ,P{#  `ɰ Zio t#H >{>Uv6E*BH!;~7Qio:.. Rŷ 'qx3YFn _F w >rD z1V$&iV;J `w`׊N v&H >sex'aH!/LL%cxk]A.!QD[1RLM4*ul6;z^XrƽIqΑMaǸ)~Y1f.v2ϰ5ʶ 3#ڜA=鮝,j41?_G[3HQ^^5a5#cuZ5>(gуR^ VP(dd'Hxx~5a*Z"Ik"AKS(e ܅I t\Am8lCczBC8ϨPȌLV6.:K0\Gb{f >#CNG9\`7Gd (&kQ$ ~<$-Cdx-)|PT;?r(ax`&r[ #TZ |Z {*߃c%=[p$PHY(M6U=t{3%هl$߃{d#cޱoD, > _A7{bJ@p,6k&]zLd>OHޣ\xỸdc|9_ ')SwzF8Ett?i/"_b؟jA*ߋV MR'HgӡbtG9~ < qKI&.xu!#O>QA)3.1+sPB9D٢ϢNC<"ȞS^r$ 7oWDx*>rA\V{(lnfUUa2>yUj"3;Rp;KjtbUWϖԧͯ-ᵕ޷.:lm]W77o.ݘ2VjﵒH[6@d[\m\kVٸSjk_ WM=u-iuvEm ⌹ -4^؜m(?nbm +1|s zQ̦͛J3]]RZp2KC?4tAg_wM]TLQη9gk\Ws 5h[jq-:NofzZs7A TG EA?C& - ?5!&8:1zpUG7GdG/_J3{2=R0n6ݕ5Q,3")wXSR-bTȼL{= aoŽ8ƭ'%>'yޯ&25C/G0 6{d@8Ox%BI4}d]GS4FyX@.UHF# ;YD#x79Mhoq6EI؍i,cV‰pzAC>캆||&G px 4(vP<ĀLý>_k < ؃ Qw:4P:VNxF8(X hd&~B#W;C?8 GP .tEm$)C7f/YўuCQ -ͻo=8~#ڈΛ=]-ߔ9{y?v%=~MʦR&{1OkX}UE|Te՟Ar՗ ʨo1NjxP?A/ wwה~8=(|f5)([V]5U^/pYYI?ZXy%iơ+4 mJlTY}"Qi?U釵(FdEL!6lmD"GQ7FYl0Z Nnd!/e}eJӞ.3 —ş )W?/ANK3aPCn+%DF$⅌*j;; P 5(B<weuZtsOa2x _{( @KZlE:I6ƨb zH*Ը8i\h%V`7XSqAGx12hm :ԅͰ FӴ +POG )~/H h ?S`zL@F8D`3O CA @ ?5H S@ @ 1t0XpT,\YKb;BGѕb\ JKD0-nT<玭5EͧxZ۷= ?q̸\CW9ݜu8C/+|.˯LVӋ5 u=%&[x!NH\P^7=?jW,?6эTj*U]Zi5{n?xxu{MxTWUvw6); Nd/׏mk|Vja\P""} E(n~jr59¢ؒE *N!?Cv)gӚdoEzU?ҼvBc0Szj?fuךS-ߣj;ڛ†Hٯ*%hbRjt*8X:K3הM))T{+ TN(ܐO;F2}C-E˳)) 2PӠasÊ>V6\ÈA9gKnw4Iz\Fz <[Pqӏw=x="z/A8Nfj ϑJ܇8Ex:cGD893 GỢyD6d-q>ē *FXl, w >cylw+l R~FD<e bbAhM=tG!B:NE8 Q _`&Yfs~؅>_k\7t P;L=+Bh a6_>kylS.@ JB$fPHO"~-vzL33(At,>sxU+~g` 664Cnk~,`6]mOMf̤eX@ i]Bi\_c ۳UxPQiXZd}ĸҦRu>#lrq{wCںF]=]tNI0P k_+tC¦DEԫ'*Tʪs+;4tgt4/NkH)]WKn yIJ6f[æJ_4fv&}3>qkxy/R>DΛ^_S.ۊmUE}ڋ?tyʋorZfk]3)΃gHJgDžwc" S6ԭ%.6|ArP撍bF/P eXPV:wԑ{vؗI PҌ vdW슙x9Koy>K .aӁjoq|'#Cx1Eu8oŵl3nCZM~A>+ V܋iG0 =KяO3l/z4m0E*Z׊1ss0LYT!U|p L+<&s1 IMHͧDqxJJh+p޶m qxA^^m-'3p&r3,MPB? Q4hrۈüH~َEye~p SJZݜʊڂ*Z7JuP{]_,*63 )^Teǽ}yH}-w[LtAumq#M ;PԊx>;$h(+0)H_ o;>cFk#g7 t}z.yA-x}0n܌1,.sh|YX ¿[DG~"Ev39>m_B 4#1 JPǏDEgE?֋!5=#D!LANp{av9쳬NP cQ3`F m R6G}><Fi %Sf|F0SAT h) 4G,Q`/k 8ͽd9m"[98{ƭF5Ap@8{|#H_hL >d?+gocJrsb\?C4c[ROۢ3Ts^Xoe2՟ eMEm[7ֵth[aWݘ佛cN\xMTqV?u^֧ Q@밾 ⮴{ 5O*Vꫴw lFG5uPo-Wl7_ڔ>Ee4v*iXro#iKDvzWS]qG׭-|R=-R:!c։G *\Wf-UMR>엲b˂99_6/Oxs1rQˈc7DLGoBz>K߅j._iyEMJ*O>rmp"НaBD$|ư0 [>F~%oq{!Ky,+熯tLTi7.qf٬N`)+6.|ww:>v4 JRčtA XČ縉Yngbo<qT>X'%?`~i*CHyh:IpmdH9hQ"NZntM8g 8D2q(6<0,Cx)sq(DdG+qmNC)y۰5n3+*a/Z?H#K4Kt:q7Z4j ac@=1K3fKDa0UtX,cZvtk*q5FΣ *n!cn{L {xqܸ3{7̻`]Lg.c}t(<ʡ*n{=ݗy= R /t'l 'DOzEZm׶xloyO? ˖MQVi6Zfww~yE\41ldWYA25lᰡ]_X^EzԧPK+ 6O.*yrbhwnHjjox|rYUj5-T6Ύf3{u {R{tx7,z\WR>+˶gaƺE5㍇vMZS9yǩ}?ܫvߑ!kJz9%4mw03绬i3sz&&%jfhO>*(xEɭ͙m &%tƏI IEGU7Jo !d/§# U G]AڀU~=n=;dSCDx-/mlsӺ'xQj'ttZ$c"af9-<#JGX %D #w2h )%S`ZM('cCKQzLEZ8qta[ݱ48U %110 as)stH`/4MȈs8ufQXfq.ſ0pdLǦu ;KTY; ރ!͠0lC=̀V,zwkB .b=Q.PlmRQMutD/j~( ܯ,4p~ϊU/(Ӂ%ʊ5;+:{oݹ\Ύ[A;lw yO!*.p`WyUݶ/m. >}]<꒮>^rW2 Riha hhbcfk񻆖FخVhо۪{\wyH+-;[qlgCޞ5;ʻtݛ?r)aZP=5(7ũƼ䉱bbm6$5?/ۣ9yT֣6Q/P(ZRfv,˿Sq)1iyԕ7rjtynA 2CFHWTi>A<'VzUr2`tOf ~]Bmܱiuns3l*sA4%gz֠{0!Gr ?Wh73C3JCm8 z}gᙤjhZgX{X[V~ƍvAUvxX?m0l$Q7 `F3f)&>|cmQ((lxX'~RlAZX( !S6Υ5C,CTվniacl/*;8=(? Sj-NCպzyd Y'1F엶L1Lh5l6L{spcWjh lc[Y [Gӧ=vײӦV+#ibUQu fE4oݒwD:x>9% ~G]rdb2QѣȖ(OWRFiScc#󢗤Sg ْ/EI/U^%^"MZ&tq-6O癐pƳ.ZNN훾W,rL5ieǧx_uP |W\a1GQ06wDH3];&snߔȳlFl.4^TϮu䐶6F4z5e|\wrY\UP{Bl2lxԯ!k^F.S8zٸP Fį+v̏+L)Q9:n@äzsMY!H$U :Ex9_V U5j|puI5d*kbd)R3䩧L)1u'L$+N9.ߎ>OɟpʔEᴐ^v٦n'x"VC]5O50 D5]``٭EP){ɵ/L` "zl=P38EӕX.`FAec2R6o4]08=No%d^?y ,t1@&'_[b Krkg`k;f+4%<@*>@|ui( =8~bMl Da>i"H&n01KȃD6!A`p:#=>x-lC ]CG@O][~kWVQsh:SB!2kV=w|FtPL1#W 7uhV}hTLUd+drlRF:MV!3K5kTuIDJL!daN~"?3f|\_kҝi; :ro| f𑲮65dcϦP]e\v\ ntqϹ\&DZ뙽gٍll)L60K:=sXMNaKbv:03=WkeÆ` 3@4`Re` 3 +-ft4NLT7ud 2,*g iFMwWq?_K=HBʃ^p)t p2\D8IʐN5lD`X71OB!t6^%r4O=߉eqa@;^p@N%WJZ.9oBhox:ya;vL%sFT@AKO*zXhF gDD%\dܖLJ;JbJHen4(hRUCC=m!3.;].,>%" -.çHS!yPax+ 㠒͌euIW>0wP!=b:3UOQ3VM.<]T/V>[B?V(tA~X g XeiФ0sܨoW6 Qy%KEr&5 [}zY5:[ ׄ)*(Me+ b+NKHNmYBl>T$\_}IxgܬWsL7$ۋK_KRwONo0M !>:$qvyp@^\pM0%|`5{eM?nvx{ZP28\/ѣ7N0=l=?=c+ ƃLjJCJVf~d1DhBIvJ@Id= |炡d/ 5z={3WYV Ix5Qh }xK!)4 "xϐ|'?̏hV~AW0~/#e;"^x=ї7𾔜 +8 w x_-'Nwh݀`h&A&(4 /fq 4/sM)UdRw4EIpjnEolExE{ƚ9n:q!Xuא]Y}d*T%9&³3˸#mg^lieZj8i2dWjŅ[tݡ-Q2DEOavi<7gR?YxstW?)$3O) e~q-6YgO[̮mݖ&TH/mDUkhm~d\e655i(2kW{q ޲"Ev6IY*'Ť yCE53 nuUj}VSV=VWK!IM|[^IZ9uD1U-eE}KW%/.9-EX<ʳx4ݷc4weŐs::[lB`!yM@ g5]@STI.G#YW 67?ϡ'th!|5qX_t2 s㴎7K `d(ryk'nRpNEibyWK|!;{"*x+6ߟᶹErə]b;Q"=DS$~Y^dÏj>+Ԝp"oVͪ#x"y{S(%^7T+:5!%u{} +ͪU}Ҏ]Zӌ!cCRL Ҋo+ks l)S3CnDoMIS<42udЎn H՟ʾ5VZ9zyEFː}heo|(R4^֪2/5oYw-L~ >y開QmiWOaM;w>iiʷV:hniE45rK{pT;m_c`4moZoz^}6SrU&ofFC]%YSO:3C2+ҵ71\R>~'Y}eԣrfٻQΒESF$.<./B+-鏲d"}`\iS,`ӌiE#I'NH:KIP;& tfP2Yx .Ho6B*FƏbF;rsZň3&NsߘT=eL/@N `Ӹzv)cXov.=A}lk`+8C~3Z1Øv"l+}ͽW)Z2/pSPΣ&0*y?h* B,S0!6FvyϡfOU^|qۇ< t~xڅp( ;TJ)=OwQ@ɿ9q?mQbbDJnTlf/Ni⛢++gt~cyi!b~MP>%-pwyyC}D>O#{Qj26sOz r$ GQ @R19$b!h ideŔ ]q=ǚX le:"r#f %hGFs?o15?RN~2lXʙXkypNiT鄯y1Y[ e!F%0dFum(^#?{x.r O^h-$px%| b?<IBMAR"u^:#;r,'B0~pH a?3c`[Zj8.:TU-R5~ج=O ͩq+6?DpZ:uqzuoe3#hH]ܟW(ܞ54JH:dl'U:l7.6ĩ7r#|zK맼rb_[ږqxDݧ/PEcBnI O{]D|iNSl7yŗۊ)_=޺sߎ_sfSB.*7lpxԮڪA+Mš"*:8NLB=ZZ^پv:fϚ76ohaߴϞx}m}{[PS-ZZ.i膨N('M5]Kvpq9Y[{Lk1Un55 YFrdY[hxܱWҕS%EQ E>RQUԳ̚Xxh,.8&vd )iMYYP úc)ya+XsN h;l6p ٬q{u21 &:3nèE+0 Mt !^D.`3!!=f!˄;ɑ%4e|8 vۡ1:<? m@gL30I[F'c:*Ny`ZxT$%}քrs7{*ɯ_[հAXƻ\gcĔt4{6[PGq % )y& ŭ[^<Ovtsϥ4TWV),˭bB幹B%VLS[B?*H6ix)rΤ 9fZp͏rEꪉiod~z^߷u=l>SKL'k Xw[0*h*j"^I6j:^~4Ʋ|8B9|z+c$YAP+)E 9BѨڑ<|]FuPıwd t͑eH_c'K2D?bQs~0//,S|$V^ unyОTyվaԭ|\ITWT+Fmv^'Ck\O`5a UqcߌoNo]0"w|UcM}l16-B}[wxs/Z`sCÐ鵗t ebl3iӚ::OՍ*S [iuUY];az~9CJw30ttw4 k|?^y~?~)P!2nFЪ(k$# 9iBmĸI[s攎0-t(C*Gf}@~Cbf5~3Y.ٻkNg7LbwYZ)j֪j.wV;>{C`qpoͳ%y7ߘ~دy@Ek1;,[H+?#x'| rʽ!)Ƶ }|^ghktʧ?,يʫ[$Uߜ&Ud n*.X*XJļv<^c-שSX *@- +JJk"!|AK JXNIM(Wbw50 '7A!rQVPn! C1h|@­j6*Bj)Gep(S!x 0 @HZA >SMEk0 @ cq$"daB # E @a<JKQ r1"ny ?V+;֏ӦUm)ŕD=ueh7+^{g}kI1K'%FgϽJH ZCYDyt5t5BB)"/0f8J}qXv)%lv$$ 3h 6֏5Nܷʣ mIe_h5(#%e+u*# T5Zo ß+8~eɞ͉*3O)}'daIl0\P6 *Eޣ[83:gM8ucCCe7z:|Eټ5:'(e+ֳ+ )іcqEQR9/x)6N5^erխ56^% ?)k^Ubd=o"OeWP"PT9T X ;U_N'9S$e2(pf7H4-/sgY23d.O+$  %ǒRm\hL0a`'xZ6K:t \xR]H9LDs ApG@Ď@Ӑ;&X wQOXD"<&"!o Rm`;Yn:$hLA^ $DEX_O0%P<ƈç{1wcjo7(DϢS->V?!kЎPmWQ-zn,qM>VniU J۔1a Jd *׫䗴d\J^216mGvgV}椌̔:,$'fHCCDbyޜDŽLT?wmx׆]e)G y '>OYë}]˴7v, JfuI),^\ݞ|3i\ڮ:- ,pPA[^H I !A{`^ J&#HG[k EQPiT^tw‡A< yFB/Іb{)ٗ\|vM@2g)5b6 AZR y#f!uP=#/CRS))B/5ٌ$fccg3䱤"Gx`p)x6ӆ݌|Ƽ\ÇC=+2$3?)ghu%e0EATDe:S3Cݐ"'Ug Lu &sY)6<.<6V$3z1==Mٖ̍V]s#}\nB,okޛ5# Yhau9Q&ݷ. y PMٽ tIldS4S6sْ, M",B';3\k'UOj0{ 9[1N?O]MdjMn[%ISіzh;ng߭nMA:Π]jh]m(=bfyL;UCuYo,W^X^#j:ce)_)7.ʆɯH82H֧*ҭE?ŲjvC||erDց'5 (HV ۋ;&XσC.STx (J!Dˁ(uA HCf$ DGx E#!)}LGsaJ8"CK);d/P7 H}J`4便u|pbf!ȝ؍}y:Pmаءkc^`Vab˰혷%~Wq 1p`~轌C_"XpV%D^p }z= x2\p$ ep2@p8DCXh=Wa'+M~#( ُ\AzC"%2 E)x4lIO Ŝ<żc(n . cBp$\,.?q _, G(-^aL^*QmQu*p)94SEsׁϤ+޾vV`#iq) ݾqM$d0`Jd|cFgWx\@2{վWyoS{>B[ZcDD_E MU|~/C^ &{FFFD/ b;rIЗ!]Il܎T) %}a~?KҹպOϾpn c_#`<( 認NmPkhV.%Sy0Vׄ\t v&Hߘ1v\ wņce8Yc`z-; H۟'5nul mOlįti]ӮY~y61OQEB"Ҷ 9I1 b.n~* i`?B[+00t'04TGŅjYʪ2]ɽq_cj5.oj*NL6Yũ8]H# /nF?֐ g%ɒ%$NT?0?AFބEJM:EIPQFGlM-*^!-HO7 ps>cyr8wwsr_MPskz=.PM 0mxGiK ÊKwʳSFLL͟٫Vz%-DgdK<^qV U4ۚV6Sk'ΞZĽ-iWfH[WsDDɋqՖiU3CΙ3㵡v_WhūMf&ĸQZK'̒uZNϨMv3-[*Rxݾ2h巵jvr%u#orVۓ72?fhqŮn^]ZP̎`y?D;d!N,RU!ne\R`*v6V vWq g.̤o,|,JK3%&g>KDs$R6 9G24骡دd!`%tȿ>+R{s0` ^B6x(RT"X^ #Atr??"`$g@T _`G#[ac <>` %Bk3uMvX ryl:'˳X.3>!ō-Mǿ/e?OƩ5^vї~`uP~06ٖ{'s~̅hW%\+5%KJrW3.PS 3Qo#SϥoqoS?w_k9$OtkfVWHb.jԮዾ=_v]6a-NpVSwe="CRꢵ Te([P+7VIȇk,)ܥ;o;-zsx\]VZgv[z&^C|#$bhbOԥu՜˲2:;/i)k&jmWki*{SmKM>XO*? IL켜cdۭ0N; a| ,'{^IWWzL4eNSs_[T3#oe{D9NLd#}$a;ZT"j| fB p*Ąr@> 3H21F&#!F7/rZN)Db)AzHG&@Q͇݅w(1"l(AQ7ۣ0D|!(a5wi8m7}ⶐkA}DcZ4f5Ms8MQmy;U2G{Һ;DsY{ƫmyS`[|9d@XVLOM֣PWϤ}qĘ_F.ݠS:λtU+oG_Fk仆4ht54ZsrMüQ%iIN %& w o>93&.&(]1=c< pe3(Fև܇憾+ֽ_]V//S4CRwsJwvAʚryc禥M_d*r#'$Jf^=jf3kMb|M!Ct2L5Z3e%ZB2e$^JM)&=fHSEW4 K+rdZ?N_7<5x YIwVI#ާE<ޣ:[tpsE$߬Ƕ.ҾRSFi"tJK-c7W+\yٝw"JhYe)(gMumHKj%)U\8N^Fi ]*_ƛ$*g̫-wў* *kW*'ITN!Thr×P6#V\K$A頜 <33n7Art L~8 OMjB? 1N%Ə 8b[w$b?a8p64`"v2ր Zk^]v1RQ@yMG{RqVWEwёo.t| rNqrܫam&Ԩ7 |z;6NyE},,wpҔt;Sbr1qgQ /ZaJW$'c6-#_6,v=s˩ew _'6wC&7 viOFKy5:wNJE5SpepΡk&Ų_T F嬐߉c6inJ2|lx._ʫS.´[*6˫j7z$UM\Abf)S%v?mEQs >%+D֠W8 TEvQt[lm/μx*hJϟ;'6Ӛjyߜ"nrtW;-hKy˽?cZv`}+_9LSŬ! UIorTFU)8=(ꕸ>y:EM:bZMy}6y7uD;k ~U'ngIpl eTEkSwNNܾ!ƅ+I !$$AJ[Luھ uCuY{}_0oEƂ|檮iy^o`ݖL,wM+/ H7[k K~:ڋks4o-q*+[G-K\ wgqV|J=i11ݘEW{ = ㇪|"Ŝ`ؗ $ 0O l&،;p=;lA|E jy#P|L  A*C#"!`[oO k^z}.M^ evM*uџQ>-Xd:)~e.R?$Ujh;;L 9kcE%3d&|n\ ^=ǰF.9!eƷﲩKA۝J"W& 콍y~t#FZlֺNUL6)EgCֺrT"SlQ̆7%-J ~II]N[yr We(pzdeQ&CNdf*Gj34cx3T/}_VioI/Pt3 SgI7(+e(4Ɲ4jRFͨ<"ZC<_7ɉzpױU@'L>Ĕ۰gd[TJBG fJ)J @ERP0Q{4\%v #C"/+pg1ѾP< 6gȹpv "BGTD,R?A1>ѻodcg{^AW) =rzUD(MSDLG'3#džq"\J:KU-sEa6Z#wGO~(iε>|hԵkpս m2ySdc\jezgڵٗ!>&H9$֠TVW>})-% y]R1sZ]uoA˰Z,ZYezlD.ژQ(-$4=4\7ϵhnP=Wz=@̞{NG3CU]P*/Z-sr;`=n;bu-ۦt4[OqވT@QH=QTċK-tO~\9E,NjW"T$5VtVL}OcM})Mңܭpea,o|\΢<R~ictm±:Els$,Ɖ].z#GqX+8pKQv-*d>hp :d-%?oʈoq1͎,L+IzuXNO" Owxj3ģ"Pw9{Mi%5[H=cUDfw]CVk5?i-MfQeTJۚ!zT-Σ(Z?Ywwh߱^u}w8Uu"f dstc0 XxBüarƻ.:U'ط:ܻ]$הzs15k9^g,XY6m9Wa0[vwjT=y Ҵ(F%'D%[To4 Eq /IQ)ۯ4"bXNI]gTV89ZCBVi r\kM xt1NsP@c 5I^0? qӅZU*ՔToyE?H sx5 0 7ǷwqO^,"Y81IQϰB>l~QC>DG#`2u }'A=#`3BЫ&ׂ  D_X7soKKƽP˽fz^Fﺺn}{>u+dC]:ںRw\[kouj]\!dg*[*ئl,y!D=a7;$=N8+v H_yU2\S^'EvŭIrg&ے9NQYo.PC X+uW_q}Yʂ DYf J^V'2o)eକّ2_{D. +A )clz) i:Ȝ'9 }Rv=tZqlww쓪Kskv7{O5+]$S1Xz5UJʯG(Tճ-Ym~:h/qB.9rvW,0&,9ݷ4Mӕs{3Qܐt]2K՗YdZ:Y{[ݣh±?o.]*yw&[o}|Ϫǩu^{|\-m5E@Ö[)3"IIӣWO^!A%$'{FB0J!9.-'Ķ!Kd= GGF'$n%agQ*wAgxxX+ S5ȍ 0TḞ΀ 'je{ D cBMa+CW& XGO \5Y|3xrWpNDNDGXI؅+"z*3Iy%qRDC+ yA3}{ڐkl}pM2yU )&X]`s笹N[%(>-lLG@89'+59 qX\/c"$M9@X)*=l1{f- JWmzd•0D&Q+2KhLP1ej:lCs~lygڄ^d*@=NMPt!-Ě usʢ.Lp/$bZ &1)52jezmUE\R?z,vSWגk"7"F1ks],P v~Kmaaw>3 >mˬW^' ѰCu97+~]vFsMo2zZsWΨh˄IمK AN25ѽP6觘Ywl0͈h 5߂1 k{\Srg9|]tasŽ=>= BGam-6%C[@c.j[ˌoKRU:@[bzcźnSa#'?3l63^ )J{۸9 %J;]Exu|AT9$ %Qw ,' oVJDZ$!O%|`Ug*9((D*WdǕS5F F[hIIE]PXQ(žds "cȸT~&&2FUJzǑ{cU\ҋ()JZErXB6 ecp܄mœBI1N y%bFo8 Z.B7(qHl^?ҐM0) ̆[HN<"B>? Y N L : _ ·τF@R72 †ҡ 35fRH.,% Adv;- +x'D3d:2Y`.eaEj.VY-_~H.8[,C']>U}UQUY>d/Tny+#|K<)s$ʋSbHBWEHl0b` 20L`Oi8ACg'6яt# 5:d 7s`~hEʡ1 u冭o`S3akfo } T 큟PHpvpN&$b ]P ȘcKp7t31 r 9R5oO+f}DA^5[x^ׇrFתJj*v WI`_Zײ+^Jl9Q(MZ[@_2z5IzTjvx73=-H3EOÇ`3d+jV ^4z4VֲD]с1_I-@zA~HH^7OT^Ƨ;VX賔U! 3"mL +.\ vЀ\AA 'lAB7N'n A ? ?H'r)|lA[*INZFL5&zdep}M`-vxn~HKOڑ$O3tbTl'<= $dI'N+lm幌Tv9z]RS]zmxnsT7zO RTeskF'1U,$mu4v6Uޚeanҿk(4iYNuPI޾63;*N0Sꕹi(N*Ҷ|PoE73wp,2izS,t,LHɎr ))IuY;o?4PcO~q %[3]TYcg{ZkخtȾ3HueOЕں/K=ͮ[jm`?_Ȕ_t\xƨ1wX~n4lW+Fv\iuג<)ڵ 㼡_v* 5xMx+~2MlRSuʛzC֚5$,Ke$\!{n3pt[kb J 89򐼙I饖 sGPڜPK0^D]a.R:hYscRP.0T-OC<'^·} K K7Hk;\ ׃$'HB3Z 718(8&ą;3oq}x=v[4`4LF|>"mFs땽nM۟٦^Ҵ:Ԉܜ)MXFX6W{]NK#c0$9k1RⒽD*F5¾/~iWNsݨ>>:""yTԗK {Oq"]VK;vmn5#fe.G9]u5vG4O~Gm5_Ѵ)*8ڝabI>YgSWJ_+JY0u&is5jlڑ:aedcd?ܞr䙎ee)m-y-uLhV: ˫::6J2S\|-}v+_XC/0c'>XSP*J9?>/rh0t7Ƅ*aT."=J9{7",b)C/en Ә]1~lzFt/DB 8(' UDJw{N ΂؀8?'^&k x:nANAN 0L >2H 4{8g .>x0FX?ӇDo#Բ{$]&V6ٶTxɚuU[;,x{9V󙷼4dMαƌV78Hsβf#p$bXZʮ8Vre./$16| ]U}O/o--V K򟄢L!.$t+|lVON?(qeOґgx_c9%+BFHJ8%>ԗVMEE?aea69pFGtPx)m]҆9"nJR:e>pכ=7iVOUH֯nf`,:/[ɺ&,1QU9ٔfR*\sn\b]THnDԝ^g/ϋWd|CɣL*i4ْVjORՄU#eG#H@2Η{NN5)lIsCQ/!eq^%RirttZhXꝝȇxg[Ҍ5((jVj`[Uת_ U_UWM%&!gnq}2r,V֭14Wˍ{i$um.j/_&35T0Kfӻjp&뿊Q,BQ(sp@ִ1i_H]hڈG|LNZB  YAdcLt 顆&QR`߱(4K'en H'-$Ň? -Ž"M704d"XN`8: qR8 [ H&N8u@&q '@1 R 9uCEP,A&ÿBaHC6CA< 9 [S4~)[.m[mfߐVhfvn,'=xڏ5Z\jy;+_t3-/Ѭ~Sj 0)b{#$+#bJg2UE c0~DcuQƓ1OKrԘ=r?FgEeF*Yk@?@J63u*IM֬ፏ|#$:xr3C0 , 2ߐDGא$Ef ҙ7PȎV.ho9@Lt3K3 K%&O]uO~lۃW\;iorcй̎8fQ Wp 8mSIIw?aҝX3#F 30d;kz.Xj(LLQcWfrej&)=/?͆+?.qS$+Km[jUg ˆT[#rvRL^iU~::U*I^g9feydXo;t  %Z@vC+iV}K;Öݰ=*V tCK ʾ/}?*v/2KXu񣧻EnPZ &LG1E%>,awOԉw4%lE*PF &-?`)C ?&4KH0Z;Nb~ I'EZvC@o &Aۑ$x:D`4p!!$@ h"k΅~a;HP {@\×bd @7`͆AhhBaMV=wnD69x|hkm7oS3 J7IŌQ[Y%)3(ym)I.da^#9= rkWZ'ʦ1g2wɟ"{$9.5\+;Le [N^!@D:83 |&'m%HBuc$zy*ȅJx v!A,r[գ @t9JBQt#|^ ƾ#s8 %Cw.HE?dlA, /H i͐:j T 3dÃqc0ʀH'R!~>}dt)Tg_V$`EuB?)!bm`O(>f|^yat|uPl/y3e78KQҩߩ qLfyA0PܩKp.~'N 9`$;˂h8[Š2`FN4!-kYYk66n,/-c/Te];>~˟\Sj(F1o|QşƎ|okX;\tIT?梜Kٺ^SH-}X5Jg'i iWHa`µe(ѓd}AR簴 YQi6lv>[g8a/"`4 : S.=͞@-"C.ša~O~_5Zv̲hRSk~d]l&56\8/i6*>lĴz- Mݮ;OKN{KU'C n4$Ny\M:I_ Q Lr 8 ,~NH]eER>٬y]C!.нݑl8Ju jGp)2Oݔሷ$GWD^ RA IDCsHGCf>;{D$*Ӏk{Z _΃ <"Q&yVWx` d ġ@F^@Wr(>-`?VJh -q~x"EZK@ukt@KxVš'0PCpGBh'vbw3 +6Q?u?=f }/y$&TښbMH-M\:(+,} ŭ3Ct9$ ~ޠhS)$.X̶OkPQL>/oJlw3}y-q7ο̕l/d`X+Mf%mi.juH'=kj;it]Yyd ҟ4d[GXsgOYݼY18cѬ݅mE徒R/#G6TڞK2c QaQ%03c PUͽ.MWl>a2f$udH [6z-)ESpj5ZFF2J\GߕB ZS221MքMG.^4L?S7j+5ʹq{-|iek_LQ>fh޷2_ojjLʋ kS׷藛>XPP}mL#SgC5g{]jcvrM'R+nJ݊K5[mBYEzJ4wT_fov݋mm+]j5#NTWzjVLi_[䘋 Ih-Չ2MaZNv :@'d ;Tóx8;PK_iBӖ Q3<y ?kAh fÓ@ vmH-v`6,CC8 6ßї0f9[J!ЏHL%'_CBEKI`<R &|q`,\֗?B @^ѡ@I#$rSK 2M4B.#M+ tޘ ,(ӔޛPnuF6M)9P68jmBurfE?(Y+ˊV*td+!TM.CN#%<4,`P䃔]dVEx8.4Xy$3OݲgkMA6|ǸKJKƢ'NOVtQ(35?4v:, U@Ɛ極*\>6ͭ5W[' #?wTV7}JDٿm޹<_+T_:p]!lVHBs-eJRS^)*R yvssCwU~]j49n%͚`c]Hdǎy b!)o(XIFZCJ:!y`8 F~@6BD(ȯ!@P$(CVh =HB#ѕMF5/:6e@6B@߈ap"$/ -C˨ 5a+З{0>c Z6{=+I?hn+ < 'h>ˉB$4ṚrrgX$>'H1E͍(ȘRV\܉Θ]!go"x\M8 #yg3viłOmŬ')+B&Tul?^;vv)wM{V+U#ESM#mh Ѧ-YWՂW|q'C$=G|Kyz.XHG~o%ͽ0߱v17Jqs.uZo75oŕ.O:2;[րU!y#?86k̑ۋ)`HL7IY|!}h9(4뵈m5:Jխ _dC'-VetmZU4W?PH3z@=7+p$a9b?b[,w:bF44#5g5zggw[K]Cwch̋ܖﲮcK e 9|~@~ۡ5hڃ"%IX ~jA"Ac4tt7BjAy9O!\pq< Al!A +tڂtBcZ`y H+z@{$!ˉh'гʄJ}PvIH4#"}h.ëwZg"%k*7e]2Bޤ3&Q.+@1yf8vbt`5d\ "IiZzIZ.;6W?94L$^ %':9(THd&RAxK9;.{xoo$OW4B2Z|Кձ̳M5?6*#}ky^͙YnKeΔcߍ6d.->=>)GΝMXfewwWo~B 13f2W>YpV6qG};T$֟TJ :1M7mr6A۶n3Qe{v_NN?Ff^Ik@p,@MacmSbFp'LDr* h Q6?9Ha2$O\ Lk '?tMtG~">{1A/-CsR?h<vKůEy`K_ uwJ8 \ Ae_7$]$jYVȂa Y];G>ASa{W1't}<,FKkaHh>}6t06F`28DoEOK~ V7,Mn)eeeQY5J7DBd2 ɝHaXhgYmly{զEimuB67N0LSgEّX5XjxNzs IO)>lc+5nrSSUa3> NڢEjd~i5A:AAjivUCΗqۂtXK̎ECds3 ̆V'l(W>B{)۳v*LHm˹YP7gew$h*fXmu)5 Ҋz?eM?YP[m>P/5];,)~d. 6Ԙ60]oPs?{k+K4ͯfk*P:TYU(ﯺ%qKp~X{۲P+ )w bяeIy#S*y̷b0Uj+E!Zm#=m|Z,&YvY:ouC*=&AY5>N "ƽLS KB~ Oq+.eAm47vcaTZc9zNC{\CJG~0Saը!BCcav½q#tX@m/ VII ~^  9Jp 4z .؏-ߦh%^MPBwA2<qHj>щ$/R/QIq%O}!vٹVh2}.*1?6*M5PouƛR)zb驢ޟYSq?&DCAz'<1ϐv(v6̹ ߥd : P4n$ueTTK9<3]G>U/mfL*7y*7=}oxzObe /͵p=r_jkdaVq=GV_ᰔC;ixUΌ<|If^Z7{KC<"v { ҤH}\4卜m946q8RP̆ٯ;M)t\r* DL+#D7y6EktoAUUT~hfGz*̴?H~5 dNmfkcMlCQRM5\̹-nYbL5Ty_Syu 뾚S,+!+ű sMyߍHG1=PqUv+\^ۮ۠--&P^5r#%MRAgVY۔؊QCBČ7A9oU XFh7r} |rfESdaMIF#xބE*21*-&GP48 z@"(㧇80p> "`9@_;{l<) }߁,hCWI׈r8G 0hzߙoBπp p U-Fg# %|OQ37|Mp PG6s/<2?K)C޲Ys 9+]$ \ĞQ`U s]5m# P4<Fy3d+YaŭE_S}Qe+OB_]׾-WTK} yK]妯f_Y#P%#0J#CG?*O|THuv[-ʹRqTj3^Ap)VY 3O.+6z|ɬ{4F Dń9 )eE miܢn.>6&؂kUIҪ0`\_5:6T,L2Cf;`j G hUzH}E. Jlby%N嵲ZٚwT,?2r,_scL-lT5 -2Vh\^`"/l|*ѵцJa6Ҧ+եªwp`˫-Ҥ-jT9p]eukG=7=y 2ϙvD88 );ZڳմxrPt5ʰDnGyHQS::ZFXJ) x*$xYc} cj;ڈģ^ H ~] 1^mA (/9@?@*Pn >nb`Kz A Xu X0Ga}Jh pP9/"qeSԑق?"U&\5w@<c@Lq_s{O3:{HR{~kjW Uh1?D9<J8;ԄoTw2%aoI~'ik3q-B_1.ۭS1V!S!s;o gijﰟst8\W+m9,5QYʸqONU\Xjd&f_*֝wgF)eD/ٕ2:p]ǓnVQhj5hmKocx"L,֨=$ CN?4wc*\7 bd熝 |qs]r}hkk1mG hcgZokŋSM'͏ -? +嫬K\BmU&WHK嗚˭)-/W+7~fcqq =~.CߩS.g >(fV)/)U=Vi^4ᦓfu~oNrDOUdkANAf8|hVSmS8ݡ)kȎO `e1g`5EME_HHVP'jV*N;A͔sr)^_v`qD㉉$`#x~[{Ɂ<@c+ph".[0h— "XMF+g'x0r}WB@&A0 /W@zK >3%xh 8t5Gs }dNdzd,› =5%51A>|>֋AU./Aa$oS>!bRD$o<<8% |(@&bC yĖOUֳ嬅}RF{4a>Q4^ƔK4:-vq܅Ut d 7"o!0K@L;00p0_GJ l TZ ŁDv`G"nL5d<B!>dP΀LGvq0@R` nC @Hx0,2@ Ğas*O7\M 03o1OU&5๡>]9OgFb'M.y8"U^d\ʠ'x"Y]'gx>#?x0Fp;RR5%:c,,X]qBHȏʼ-C(dgd{SO鶺=)º$tf5:o7~s'a!s;8pC w(BڐH/<Omg2ք:Wvav*ZpaË9KyDL@ "ކ2B.!lOȓ^d#"wohPEC@v9l^Ԥ|'e6EӠ0 Bp77z"xꇐx ޢ^]`< 1c[/P8 a|vv ӗ2@}gfR̽͌I(ߨ{6TA!LFl:v9^9cF~rd+v)k/GHR|`LXwFcE#"“$K|g•OaٿXdDP}c=[2ʼnU<wTa CH-},rU}K&#&1R/om-Z|mJ;*Tf)vUt6z5hjԲA4E{ҟCjsXvΝQ9@WO_ܠ\!\D霟sei]̛ oN+"Pf9 0`4`Zf*0m#|k)e/3p jgIf6H9E^"bfI4/VƖMe/T? eҥ'BY}IjTa-VO,䵕U.9 )N5%B7_vT>G/,BgNFAxbˠ+Nf/2ҦU7M1Zo#-="N}RA]rԾVg pi}x6mg[UC^WQ}@ƌ$) ҤIUDaw2z >LJ%$%vyHQDDĮXT1Vwo8/$? l>2b,ra8 aEc"?FSp#`* /q'᳀̅C@0 CQ&90o BN8@,0<I)pDo(G1p9VO  )caij̣Yf2WAcM*5$t)gB[!JmFod hߋk ;RK ߇}:)<SG>xĤ̿S6EӲi_ M$:{Or(?~*zvL^sۺLSϸSx4+} #"8il~Yhκ^Sp\^-~Ԉ>M8%u(5MP?4<@{]@&;>l^[Uj6wOF?ּOzz%7yZϮP{3پ{.kzN5:KlT~5Q@â|*r*n쓰[WrAÐ=cZ"kVea\sC--.Oፑ|=UtruNcQפKR 1Kʯ)ϪBtIH}*+-TJTuͭUl=3/wᛨFM4> 3p{vtRU1MޓKE4=v8歆7,5JcEĥDZO":]V39&3un"+ee,rqR?a1~ L#&!I011nb]K#DN \'4>IA1lb)-ri ?cX ~B| ^eGm"Te;DMh6@ B8`)_)@D@Zo0ZFBG1a_bt ;Jֲ&-dqZ%m# Uؕ;kiSvUmn/_TƠL7Ņm"$NēaMrwihj\!/SE7zy roCDFID3~;+Pfm[Tj$$wIor0I9iz,Kˠ6CJ}>f=Oi-;}_dm"]>>yllg%v-"☂y""#¯%?rvBA.:?@mCdKhW ǔ#WƹRUQάW~@e}AZ=>tc^afnPɞFW g˴N6G*Uv~]0?.D$:'a qkK45uf7Fj+Nv4} 0TT"|E>U5הRhhsfiBeFZJCJޖSՎ:?╸koxvig} UQ$TUU>'s|fIes\[O>P!I?wa}NggI%#um%?яcŮZ&<:`Q1ߝڟ|${ i4P&ޝ2;I:1ɘt"ZzC6&/1( %NLXx*B 53=ۡv'_$9|%jz#O$z:@@1:L0FsB3kƇf~ uUR0|t14f $8~g1 ҇?*1fXJclNͬ +y, zILI1[\lgtCXCdcFuRNē_ cyXcX{zX T "f'UD&x5Ѣ, @Qc<{*V]RGN69Gl8)7<=zZ=ʮԮ`ib$JgV]]غuQG1Nf;nc`!ose ӏ 3^_T)S b ~СW?&VRLIIN9B#9U?SUHRV;t͠R?O0p3fnak%LWODֲPb+kdؐtƍgsQfnPR$r2 eoD9ks)A)/̒LMRCIc}e9V;.3܌x0m /Vh2m]TVM(YI $7l W TgGnIà'B>Nugice e~%v&@dϥ})Gݮ` zLQ*f.qeur7/)&?+  4\GS1d{jR.)#t$vgR#H}dBHz)qSaaTğyy/B?Cq))8|{hQD~v.WT0 x_ 8 )gA! י|M X3 |2H* ~ H SV8,':rɦKi oX!Bƛa+їPʹT i d?,h&c(^?PO\cӃ*jKKR2s۔_/:[ sAJ`KQ驭J6l<  G;tplRrTNYF>)3%jttfvwMii}u_]U uk3jv4I]8@p*vzq$&}"'/Ў(}֙>c m@ŜԒz!mY}&+:|xFLr6EYW7Uߴi`~o6TC◆b͆2Ze!C/+ee,}G-A&PsR1K.;@D4YAҡ WSY`0mٖ:4`箸@U^f}(^o !G=v6"1?8GD_/Z&bT(iW,ܿ(sgs՟OzŪ祅UfŤ2nSReTkfoK+{T(IDV4CFZ"Z u<5HRE'1qO,bA '4' _ÑH3r\xFxNx_C c3 e8"n ր"í `7C`O?G1͘ 0ڎ.&Cp9[,L~Z3;?2>qIcda<Nqqi_ftcaeK+kR5E/KtöݢV$>o'J")*_~oLR^3~1Ѵex<$T]fIo1g{~}yT%B@P1rEy]P?0944'{^sڋjt.E*|htlT($_edoH_N9YNW i:k}.<&Iy|uvrjjU9ZLw^Uinh'8RR?Sd`Z7eSى3H I"$'ǧ%x(%*|^-1bpr@3(Ά` X ΁7$ SP>8e6{\t{-@!*† LN8-p$>z2˘x\!cL]bbfCyCWy圂<^6/#f쥻Y"83.0BWϻY;8HA|hV2Zσʼnػ6.ClfPq1c~߆'G77Ҡ|WŖ sޅQ[#iB"~_G0UݢSybw[|;ClMR MlR$8 #v'}Nq~liܹLÉzCeY{W/-Lou6X|!f2Lr+#8R# I*MjF/mϟ/S i:B1i͡ R.y|upjoT;4j sq/Ǫ*B`T7Tɯ(,R%Dhh%T͇OdbBRZ<,^\h$9i=cQY!lResS3pD E}M,rrUXZie_9WVvG'x}{ahlx̾ݝ9\R(ЙI0m6CEWh;w_Q)eetU=IT^{ɲ!>ai0GK rw;lh:yʡ0òzqz יvAMƅl.,ef5S=7z0PˇQeU߼5e̤X^U阜< e\+o^4*Fˆ4n[v=Q}7}]uq]sųgVտ2gn|^,+fꝷ Cy\N!KZQOhZj<#&T1NȂ5{u^:uY]}Ҥ0\2Fw]NU40;_mpuP,9W ?`٦7γ=YbTCV;ΫVkFl16W.31ʙ@;J Gl~U_S3Ii?lIB6Y0[y{\Ֆ*_.ˀ-pD=AƔHN3FScc}{c䒄 }^_Jșֈf"eL'FGB"^h"= ,# `4?B i`8tËh@x/L c!0_sSSqKWרPpp=Dg!&PD$i1_Ĺ \_̹FZ1/bN_+gWd/Iۜ]FjŲEWqQOIM4Q,m 2SHudqi;PSޑgB̡nTҫ3_S{sOs&nY<0_uBfֳZB6_ohw Fc-ntJcqybVmW\_]p-Y􈄫b1 %`*|,QmƦEGkNtCOS={2|>L}NsFl+TͤlM'׉rծt%ҎJ?}^^qCC&,k`fNҽW5!VϭQ`6>>͒j%{Bsm]uK9 exS`ؐQd+0 JRIZ7r4DMe8m8||==%Y7.U5)kYEbE5ƺepǎ/u# `Jq; ܿ {{5U,[_I)Vu*6/TMi18iqLtW5Vd6-?7m۴g>h o˲Gl?}i %vɤ1W+K<^}=)µqI{Ial'vpl>#g̡b\1s6G'8>3(xt:r SA"@2#J5EN@P"h?SCh$D'/@N6P D?QM(l&u7SBZ#KEE|IA\~ΚE3sKs N&pԩUɇREވ".)%%tf~Ճ}2߲Q{iۓ 'foL3)w BQ2CeNUAfJʫdZ[!@-1Yo~EyFTا§pA%#›e9mkDff5RQ8qNq}bp1:M~x(#zj _iY6?O} ]!H4_nvp%=z~jLUf>1gk3 BuIrUX+_ihUou٦zX=FV8 ٻ jEg5֛dDZ&PeG9W.5f5U8Ͱh)^zm;#f4-ZÄ. Pd^YBlgD*{&K3*ɲ(F65~Ibr^DlfXaġq#6x7<A{ {zeCbx s(Sy'"pRY@/*t{m7u[\TKݶo4i Zwm^ j0Hy&]\!%1-!1eRʏ܏ ՙh&k}335s"pSw7 E}Mm#SUIO#UIRPsT}-m9J b4z>2l&ettBZ8{M%4( $?I諘)&ImEiz"wE^svTΨAٶr97+c~޴5j&bd<"pfl4v&z;ܟTI:I'e[o(}+ p$) Yhm7Kj9m}Nb*oߛ US8n%iB꺪Gɕyf!C'6(v{,s^;ھtK*W82)rb {TD;Q _`ڔ6Ea12N s0Kc1*p7CtCo'xg7k ]H,'bmn9b5Z[Y | +Qb Wξjri"M,J^kI 䜈`OJ)IR >3j>UODH ф; z?jEl:032SXb0SŌǔJ%\bqQRFOLͮEfIe+{bvd67Ie/D[!@ b::e)gDA/f]a?tozL;oƼ@y*aJz,4MMD]#NPJpڐ h.B0F&>e9://6i7%٧T'CQo(IoR ̯tU󪏋p56 6XW]%yU]l䷜liU5\*f;[:&Ym Z fU+.*~;3{&U{j[;<^Qu*hgѾ>=ya S  E01LVAa ުSqT0Q=^{+K&GC^Z.i^\i[w@[OM4Z}'p iD4wee5uk20I:+htyB\dr4\ οTX]5XmsH07M3Zmxx\|yZVcqk!Z·^ogB$ "3~n\j}lB}/V(w^3={|}MG4[(wjF?G 5t/vez{-GPv7{էOwu9X)KXWkזbp ȵ!.`UB2`㍗-;Dns,2zn96䚔ƅ%186\eNnh?kiTUNJUh%9G{nrŵeyOr<)WPsdz ܨUIZ;~|w|m(t-"7vk'QB? 8teeZi[>!&g 4H揚 Szv>Z})p<8X̓*ku%I n"cP?ުb#r԰6($GVR#K}|EvnsLa|tut/Ubk# #INț2VZbFCM -ݢ jc(()T"9f i"n>Y{X~,bay("&bOīTLT= hhV-?.sQ6o͢,QgԭɬT dyc $j%Vߧ,M !OQq NvMRfSW4˘ !t\(:)>B"c[ҎSQaBWY&^M MI EN"dP'IYꌁ!N ܫ3 ɤҌ%ք^jNvܾI[i6}6!5ұuQ_ſg :;uSVNnQVWn,sr`cˬwAɶ|ghӈfF4胹<\l&"\\Yp}le7Cm{rch0 ߮j=a9|EAx|h0Y*0 CZ^cժ#2^ny$ڞ7V*b,3ԾG#̿XWl2f8lqj5ş5_ d(].9P8(zR_ȴUc'U):09m.NS]]ői6~55IX~l= U 0v91낆>j+4 ʕ)t nn&[F^ס^ %:wfG|$w,:~;ETPk\bMɌU>el^ EKAh|k;g˰@[5wYX=!;? j#*?U+Vb+aWɯܥ]'7j@\=c{P%-JJlK7-Dv?d䄫Oh;w]/Ym)AF7יnS#!0b$-e/$V"p-dbX)ͶH&<`eى|좸Q1j='FHҾPGY>8Z7(C"#D G4&}Cؘ%ɩYB>ߕϾ-.%E +7%b_?|3i(ŨS&7ּY,}OE^'EPzXc ^g]U9)9n`ָRxMvR^I rJ#TģIF9f-|ucF+U$ޏ-Z5ךZGyef8\(!k͞SV_si^޼FHEY2RD,U^YVΰWѺ\M[Ov.o;l;>6xn%w}521u{Vg*]n 1u@%σMw7Q>odtrEAi\fl/0)EƳ=K!W_fy]^w`v4C_oPg'gvrR9;LML0Wi{ZnCҭEԌ'^2'y\~g{@K+ppjA>Q={Nl[.Llq/td}7ˢ01rZ]*v8FُzԧٶA5 \hmrsH*9)p^t浌e⭂v?w@[[kn[skڌy #l}L}߶ţ!([7 =rZkBRWJJ LoM!$_6&0 GS袟`UVf/=D)qU~C@rux u7օ %n6+"h\x.(% e-Ne rQO)yAI5a*H '~iǿ>MIf&% nJě9&[I)|10y^ ج 5p8T$mQPSJ緈?q#h}R&Qr)£DNG9;_ҳė5Ӛ:R[:j,4 6o? cl+>A{pK14UREIwymjuBYIc؋ X4{}}b]Jv֧X WHc. kkmVL}m| k:wd<%4|. 7)y{st˿ 7VcoLs7ktu h{!3\םI8W$ejaW̳u/*=i1Q [HXΡ!3 l,b]+ƨ5[lNcU[ Y-UUU;|$Q E MsBG}`*.cވrul톳Z26~ 'b?uۚ#CjCۇ̇f ]M|]2_ 03NMվ2N=h0ףgwkWDZ.SǟKaG_i}S'$z(;oo46|ʆ&l*")Uth(ҝiKP;lޣ[ysK92yN2g>Sws0y\{ [ {5wsȹV]{d݌K74oz}:8Sb2J<6TFG.83Dod]}^!2 ,ʨ`Of7QHMMO fJWN뢆E ̕gTǾD huT'Խ4m.ꁕKB$a),'&OyqG.!u JMƾD~mKwl,3t,}Nz/7'4.rɲADnM].mnOk)Kd0u{UfaFӢ3o6B=K-543Nrş׼i_ASTǜm{ڷ4Z|qw߻tEKюx cKP]MP4-@v4o Jˏm:}~̷DQ0YoPs: P^vAĦ=hlTDop<31!藶 WihUɁUWȯ&swl̰OC[@.w8-YRrD_ު#=YfQjN˜\rWXӑ6x'ԉ'+v>4*krMͷLnvK-"aJ䬨1hE%MEk3%hmųl<#2v$\״S*&Wa‚}E͉{:Vmj/.e*LjJHemVW; cb3L)nq.5#Q__;|YG,[:3>ʚQ~Rn;?R7WIf`8_ V]܁xBNm]6ݣ>.eJzSfb81&^0)"ĭ s.}[nnqq޼ȹJ-\hpHG1d -\JwJj߭=sw33;ʌH˱d'TWRZyT>ԖMjMfI]5g, vx`POk~G?@󯠱|S4U:m[) J71ZCKْG[!qgB J ;nMvo.mhe\&IsrJ4LnR"g$eWL $즢 9eKd3]!ij]D s` 2 \#4}~ɗ4=*2mE>=HKP뷶Cum5-UC٩Uךߡ0kψzҲ\/;"%JfN`9Y:Ngp2tGF(xLiL`=m,4WOH9 {sAG|TyLy_mS4:x G dVd +/"&+baצ̔}Mr?zr2#J[W]UXvg6/{ tתb?J)˒4xAeD?~KĶJonɩjj5>JTӼp:\M D4e(0]-0r1WӉ݄E oFX.˧qkdlp>VK*&hD*7BhƷT+@N彊f9h$>ד_/BJdgV KRFH(,5|8K#agd-5PlJI#R{r>B bO5Tn]"rGhXxWF"PҼUyDI0;rFMRR=w*j |)qS+ Ox7T&=+wT\G=6^xRh+ΒhCwBuh19B]lFo}&UҠOZ%IsRwFdž 8>0ϯwد#X1%eL_LGƉ4ԓ`K+3NhVU Aڅs)%9Xg^t*C^{='=|~iv!hi(-s;zTla{1vqC7 !#f[^(AL$azGT P:-}ޣX=5#c{B<#+>s+S> 5OVq%0aI?R)kZMFKڋ' Η-*iwrӒֺ'jznxxqPa8cl58}G7i~sIs 9$6,5NPlܒ89Gwf7=y\_U:E? (&{fV 72;DCCnluӅlMyX0 UhMGԮD.q[=[׺D&]@\gAC5*@Scf̬-?P8]<~q\m!UwP_GT:֋mVF5ɵE9ȯC;iV^Nb5 uws吉jkd4`\'\*G7?GY"CCMb_ YEn;{ ! gb,zhNP 6Tɇ;bXH UHԢ睊rE~X Gq",mcŖL,=XpԵh\͝r"u!s'嵆=xZgbMdkzu#>vz' 7&TV}Ia}#Jse*E;]7\Tw[Dץ h]C;<ML![zbQg< |1y`Z[40<퇿! dSl&:@Q/ToʏtMe~46 c̠=_Sx+im X1nAH.\>+cKKvfsr,%Gh'-,'d zl'0<=c?kg~;ƖS'p2L MԤ^(z1)"tN`dyazxA@BdӀ6~3|>xmR9nCUTο瘯 MD{cA־}{EcKbc݉`+dM;%.A=g,:E;wzu;Nf5dTβu˞@O.\yd0'{aڎݤ D1YAp{:5{3p]m! IܚBd 񙫒Ok8(rR!QC\?jP{Mx "K3l;Z `*$-cՄAF;&D04h5(lMT̕>r>Ž6Vj.ö;PjTQ>l dAQDMd:IPkX¢goBr/Eb_=p^Άr;KY Kѯ}gH =G*FwDŠ+θlC1D°0v[јcyf6S ?W2PRc(UzN0BOk2U]:txQ݇jH#sûk(HAV%@z|1mbFFHnKqZ:|JʩSiuJ6*M*h9U@=ܥ TޮYl򯙓v6%h~TSTz$]p $x[e ERX,[\e$-;CuvnO䗰)S &ф+2$YHl@;QǠsa t}G?񅻛g_P &J/vyѝ攜63mx)5Oqg ք dt2l#CSBr^ǞdogͧH<;6+?icxBLEpuG%"u[ph5%5 >wܦl6 ׮sk2ȉ=?յn̉J@SNk*pP,,LWUV8U32sO/_?WzFpquKvkΤJiucQBuFh*7N0XA:<:&Bl;\{UYexv$q r I lՕ}4Pk4ΔjUebZ^)/g,J@T1dMNQ/c7:?jۡg*/dw}~%JW&R5j˲wE n70Ifs*qhH<]@TvUIt+[~cRX_Bz/x$TvjI]ZAhcNx>vY!eTUM `hH@̔tۭjRb-Q٢/|DMp J VQVOWNJn&ɤ';VXFF NLx^yjtaGb0~Zn.DU3F8'#7?cu/t%w7sjT[4hVĵ SbB/q XRm >_Tόk>K{_z3e/J2! V%(`ɅYGڬ!zN$,8BKa/cW aFZQ _I:<%gg;0:v%˕=//̱Z:7LZS+e1Z٥: )f"rGxڏJw wwX'Y̴Θ{]o޻V+"7RԎgv}]]Y,.4٫סi G{v*%{xTn:{=sM־'Sj0)o?j,JڜbSKM_,{ 0b#sKSef:.( w#E x zG#ǐ}p ނ  g!4󕵀3WUĀNUptEX;%m¬_֔aNn"EQ$s/v(A\)H^\K:? rʺOmUwK \?c+⍢pj Ij"խYۙ-=*&X3ϴ[[wnk2FY'Vb \vG٭8iҼLyUN8MG@gD$H*;-(/+Dkī7F,1 1 sF:,~7wShr Zy7 ;u2t[ayar]v[n+(͢KlKaDq6V4h9QEojAڹqX4u_C[8 pQ!ԙ4u-ړd12 !gb׹~{z+w ̂p2 7iYbj6coyGk~\9CTn~?BR8AmEPnb -ސtⳜu6o8Ŗ e7/oM _* xM˝~R sYۤTF %_Abt#d\dDUP/RMGIh|E} DS_GA2m{9뫶kQe8QM4⧢U@4=8(“>ِp)nC5BƦ+]Ě+9Y c#w>CRd'`1ycc"#E)ӘVs9U _zm6׸5h66cźwnonchqk'vw3<,Vg7i{>}S;!# /lZ'.Za2^C t=Ҟ“Xľb;0YiiINrlQi{e &pi[Dz 51L@xl~$h5u+LTjV]?\cOzf{ |`^V) .^K~K[s>!'ې=h_$>kkS3U;yIFH@nL 4=7,qj*8k۱xPcD|ᖷyX?Ba*c@YLDDsЦN ]DmnmbK,hnpk63dzzj7FZ.ETw c3oUޡ +-XKJV$Gw߼/ yv1D׽*+!)A5ٮnދnF~З;UڟhR}m[Hh/s>On鬟{Y52<'+he-6>Z5ʔEOBP3--.K*Oa!FU7})f^ks`h6_[u $ HhwɚpBVlyI>UF,㒔otPtE%dNۆYOX/"f i^?CcL79:NhJA+̗- ?V`gu{I?h^]W LW0 RlDֵ?v}\eKL鋁v$pJn,Bcu[@qt@/&LpiuvZg/"\7qIrtx6LpSLS :Q~?Qn9} mެYnAA977L[G9lP\o\ v9~̴P* T3[mjG hg-Px;s̅EKk.0 sǶ r𻌫iE>C}?)<0TAF8&S-4*.!hu](bpE# =IC3T=PY= a춐L, FFYD*Z}9*]gO}#;zvCŖyrfFNHy;$l9#s_\"qt\\ o^ޕsIQ'Ya&J<2*>!65KƊK#'?E 9M!i,7`1_>bBQ -~yfi^W ^COuzݰےZfTFQcjͬL`kߴ _^ ~\v-t)Q/(Y9O^d >+nixW/YtωҼſn*?˕[X\] Mx!3DӬdO^EÝ[GFm[c V.!W|^MVhmrz UScШ$aJ! l)}e1/xi_35:6XPj05of0H:CJ9WX<*ixWJJ]ffeFz{HݲGe ̺>g]"$៕ieW0eҵk " =:j6_gڮIqI7bn|6?^\)$%^I?,,( ʭ`􅆓@ 4]v|iZңEג٢6=iyLj65hur=_@Λ{ZyzhgtyOc;6~yY['{%‹ePͺݻ1𱗷ާRR^t2Lls@@7t,i!'%=s?rN-nE,BH5=ϣy B^UND8{=# Q?C( K0q=0R,@D"7Dqi-٪UcĽ5պvUkg2{(R0bG_ڈ߃rߊte6mYgv:g_vlҨ&nLH^*U{KkSZmڶ}{(~쥚!xWCψT>\ 4 .;/Wth3M S}loX෰I#٫ \{ S, W^\Hn/0%ʜ,K/9 RNڿpmD+!ߔ~՟)V!pOԾVz]m\/MOu`"Mħf)LsHsxe1E'J3OZ ^9$(QZI|r޵ .}e֗n|5g~-}UƪD@Z|WM.-ޒ5t"'2|E΢ԉɏswjKG hYtCr)pͯ7^#60ڰ_18+Exb%lq;;![s2&?!*jDmnIŚ(+^=b&(_wn\$dFk]F ^?yDo'j)lln̥*$؆]@n'), |: N5=7vd5#[ѠK]D5[IUϐu 91(9Wx]NxDx'DzuVLk:PQ^T2Dmj0XƟTz=:-SQGso.FkK鹨В3Tf{6ؔpDͅk30C d5|V^?S=YM2Oq[b 7D3Y >b%8px_)L4(0GyC~ u8NYOkZ#߉>#`&ez 447UgTNN=3F~Bm™El,^nRF\uAEɾ1LQϖBTqRHϥ|O9Uz|#2wW[0 Zl\/X\0:7oBlvf!a(j"cz(YgqX 0PG;D(?73%d{-.MkJC|R) ;Kk= C-ĸ6>ND%EFO#ұ K5ns0qm YeL*fɴJz\R1#I2aZ:ر~vږ-&iаh{/@f2ͩoto4!cSM'e7e7P-Q  %VeAlۢaX1aQ,SE@5?v)&x5yW͜Z{u2̢2AEA5lJx4y4o׎N4G!f2*]_ oaAiT+NGa0T\6C2RZk𿨜Y*A]%<a٘98DS!^ j̕"v!&Qa^%&(J sSXQ?噮,}.r>\hӏK%hOa}?@gDc.K>4Zig8iчi8 VGU3T2Nb+)]PK`&6Gfz2ojhKe<~߃v oJhsUgk :mYoWYQ>_SkT](Fu\sNG`MF!!YV(38seM8â Œ]3 WjQn9sLyμI=g3uބi"xbQ= W8zlRU󪙢jeep$~Wdqtu7T-jꃸ1S6ؤ -2K m=2F"vц^ [t.ǀU'H 6ruM/ۯn%jMٺe‰М?ht_?SR w9%Na/FdzAҹJA@JSB;G5dDl Wrh_S5U*jtưj? aVb;Pd觩 &ˏTב󯘗8ɍ0~ e\MG37ZRn L`6w ujoTQgG{QxŎsc(NqOU]M4 P!;xDTml}l3 ݌Gi {} ֟G2L,g[a>HV ItQ  0(DQ;G鑒dbpQbN#| ?DA}OsOK+aaWBڭad닽M?j٢'#Yglj_5rv6ۨӝ>;>tD#DMjm駋W@ ywضZ 0wyt'Ӹg?U]h'p![f9nBQ +^ĥ5 {#SKN'*QlN\05ݴB|[[Ap[$W-_ swK(lYDA_Ɵ$vM]Cr,Ӽc5{lGI'Q^W:ږ͟'-EThy:-]Qps^ZG657w(nC;55&R>Srl=*1?cn-do8J!nT sWox'%8-bTbM⬫1mJ lGu%p4 y>ʆY'=ʋyN($^i*MPXM'o:/S(ɥ]ws<=>o(׼O[ͤQ+6>U֮ڤ$ _ndz⫘mfoK4 )'Ps:vZdkg+셾¥BS=aSÚ ukwغ 9 U7 &º7~"ސ`N_ /k*_k ^44|ZP2q57[$GrVs%'eM_sK"rɐP3&BϩrxbB{_!R`;9-p7v3@i|_\\fNvnvʶeeZg)_L3*?6zexlǛF_9F@ۈw0Ht۷2ȵ 3mnJvٕⴒ1Vhn`Plƫ]Sz]H 4t ECz7OP Xhj=_l(!iRKjמrUS Rc S9M~xjxcql<'Y}W_|hWe'r/_KTWg1Ɨ~'I;>.;ס Ovު霅m[cP&^K<& M|L:1zan pװjkm} sm7w@>Q؞j^1bKfAKsP.¬}5P1͎%J$ )8zVaϱk<>X8a<d\1 e FG`emQ|^ܲhz))É+[&r~]p`P2P n3wxxhTUvO5aWㆫbHjq+8=SR2v&z,DFR9ѼP5ߒMc: w Z A';Vzu=[Bw'wgoWMQNT|K% rhK _/ey,}н }fVٯZ?IٕLvƭ>ph<[XmrT"~W  [IK+t5CSJ0ޤ/+-mLPYY|9s9mi$ }E|$Ԓ#cmba&-.Ma{٣]bl i F(]~Q[ b]1DEߕ{5D Z>1N垡CK#OQ6/=K$WO)5nj+0{:1l3_*YZh`4$Q'>"n>ҭF"<<3~7v:ϱBTG!G->nr2A"cMNw\_`5)Hwl7D 9 }g# h/Z]zg}aIhʮbcqDnA .N7>&7Jp'A/Q=p]ܖ?X ; .+ kesD8>!ue,o> CW]WLVю4*5\΀gj6-]!Uo>Yn@ÈXq7 C&#z@ #Dbڈ"T.`D YoiNJ)cA6ﺺ6ZT@gM Y:L"%,Z7:0Ы:?KX5MlzMTq[&wGZ 6ڭp"s v&P}'=Ԛܺ[QP rTU~2{hA>T|96THYuk+X,ASp0yB>W!(S,.L]]r.ϒMMWfDUN/c6Z VCyCR { }B<4*' 3?c2ed^N*q)s6[9/_w0_&-2U K yEġBQei:"0G̤%sŷx.dɐ'%%~sB[}ڨ=%> K_\.&RNP\PaXC{rq5Tcܩ `$~H`ɦ1m1/:hh?U{5ho/ö)\eG;G}j45_pĀ3DŽ8#/۹g7^ijX~ 8Hj O"EMn'T  }6ɻK'TP$~NƩDLYN.4-(ǖ>-2)Kӱ}hGZר/˦ e&-`:R|Afa?L>uQ`Grf &j%Y'fk^M>0FږYˠg;ne|]mVްTU1j7Ѯ})3@/Hr*;,빚 OLz ]9CN՗6w$Ti/+#-;빃 ic{5\9A[4>֡;L|U [ў΋9h Pƕ=̧qz[YW]3G i6Bu'?itTH7𮕂4);ne}Op"]^+ؒ*Pm+_GDvx8Rnq5M"7;/{*zPd~Sj"m"7ݧb7Tb*(W˻1y 3oMNI^*j+n UuaV.BǙ+҃wůI&ȸ5Ml|z}{"#@CTf2wujVN77xAIXM昉p,7ClP܌dKu_W4׺{- _P(E9:{~Iq5c0wȧ/ Gjg;~:A3RSxbi>!9h 7˱LKgwnXi)_Y]ukt2"幎<^470r_>>L4+gf},E_OeW}KT鲠}L?VBP$Ȓd@LmDRv]YH ԱYpcsvEl/uhD/_^CYkf`i\3n1lK$CBo-X(>/xjȂE5dR#:&@}# U[B|Ѕ"jS"83+o6J *N4B`D9E$G8MS>~ؽPUۜGM Wr/vTw$1 k#폭':N-4'Y#4sCp!M Ymlv;.e[(]‹kD/qofF\De23GmtL&iD_SBCḀTG,֟t{\؀co})+f?G;hzg}*Q ٌ!z{k](YwSmNE6vjL2uU4Em"r5OrM. ,Z)gFf]ވX=ψI-C;{ s[$+/8ͦ0o7ji6Y``xt%A|&zۍ:jח v_WYt.$g=-*jR#ֲR9ݫ)&7NC෶m5as[P<{̺"6%ZacV&:OX:N#[ڹ`$S t~Vb]tX`} i˃ ! 5ki$&Ƹ{!}LSJ[;( o Wjk)57K+K>=6mRkem$S[DM !:o|k j}5<\__=G? )AػQuװ٪5}4d3I:$p/DocqtF [ڹ߼#-/UL> Sz*W$Wfh-/C?DfWzԚh5ͮuZc6FXt01m>7ʽP9Zߤv܁fuf©EupSos"\YQ9ԝK31EQx4 N|\׽(黩2&O[S(5J $Mv$r.$`H&nMNۑ7DLNjF ~TN- OL $s(I"箛!@*L4a|L@9C65 NRƬiAW z1~'h M1p+k4 TUI `eQWz4v7O(2@Y{O;RqF;zFuqO}w7֤lqάY&{y{z" `v D2֌^sf<܊*rWg#w;Φh6-=-z/1O!klh96_`5#Fk5nC՗kԾooڌEVW3'p#*,l;VNH>>̛qY՗W6k:4 K WX:{WQ~(ʞބBd=7o$ Qm{QAQkT1~^t[=76\dQtH}hQ>iXRf\WBP9[<[ʛ_je"IEIb"wEY>RDYf܊_D=,Z0xާmK[FϪ,i-m!9 `*o228Zwno5Z4.VK7@n8!uD[x66j3}G>3z[=AAOuS# c̷bU!ֽ;Zi4,ᗩl _Ky>YgR䬯?5յ sh~cGVPodS\Q1_Jg2r,ٕ0ӌ#dB+. Wrn0 uP@z, ϑNy= /*KI2FпE:lIs=#i]A!]S: 1X'~20AAH ƻ7wZڟ 6>:DSk+º6v&KRB*1> S]Z#߭ ]#GʼQj({וo%5|_~*> K" 5[ffʛ$w%^e˟WJ1=Z=昗g͐ge4h6FT芟eG u D({LQK#řKk49 kdܪϫ)+]]W骘KTg&69J5zExvAKq8?TiҜk#υ HZ \y'i kNyp 4M 4;^YO |R''Ms"'3'cjXU&ѦU/DpIq)пh6X?v[6S۳Z&J)C/%V"4mij^1=%6+R.72jk5h31 M0ctI$7\Tяz"/ex;)uJG0 -ꉆG&Sx:8RBoHgk`貾Z8&&.A7 ?~B_Nƒ2rX!x-צ`l4u(K5`koO8Ǔu:DJ*(XJcxb@C-rT9VjD @yџ6~ yv3)b?Pӷ)N n O1-Mfmg譙"wGp"RV?\7lG1SI[EEW9/wLk5z32-ܕUe2ZP.m}Wtlb5~<`#M xRvPy®\2j/ca"buGBܾu0Vn dxN 㸥ʚL([? pa4=/ER#]~)8nZg^mc M1^7DF7] N?QsGGdž_ +wo6X3[F|;,@Gpj*S}U_鍬":JUw5:2hVpyiX0OΨ|4kWꑨX.(Vmܜw6Jx%IfY+q;)^WoJ?$ꋪhjkOy0K)>=nLa̬'z*{-{Ι[q2)m+ss_s݋pE 'X]f6G!{rxw?mBu*VO 7vl^=Wl]խ^FP_Q(m6UpͲ#pUQ~Z'kЅŷxjMN-}P@x+~] P!vA|@ܨpf[b]w6bGQ?\3G7Mep4FP9ibg`P^߶x"I,TnUG[I%גJ& eݴҨA}T+qXl<&R5a%=$u q԰ohLRHr6|x[t8X@E.pw9|B h:0"TKc,SUt%mf/N1ˀ=RdxHG7`Xjji 6 |D#+9<yZ;VL ).k{Kc+ytJe"T/;,4GxXkUC`NTE̅fiyTΘs.kH"=;M9#=nT@T|j"3R{9ϭpZ5-ΦD :"+GST0ViQ8ӫ-Z*gNON#rz%Y̼ҘXʯ9f39O20A:5s=͚7+D})2^D_*3ͯ`&Wmh+J}ӛ\Vq ?NV[Y`r`}i;=浯qgVn!9F<3v;ԗ5Juz2MɥuL5,2?Dݼەl9_*[SOnZ'Iuc+_gu γF`;$A H6f WXvX"#)}xWXvE 9S5sqs W%;/E.AaJ.]v!㋢5q@ŞafּR 3RpC;_Ikz(eI =RBB}CzV:[8yMO^Q`i?!fA|3USGz0/u[abd!FM)M-|"vUAKi}QOT#rM:;vg[>c5w^LٟTt*/埠L4Qޅ8mC*]wwtqO _}`F'ړ$b|BOh(zk:GH"5&+'Ca;cŮ wܡHHJ4|Xs,Nnu/a2i;7QfL)̿XNd6S^V PZQ!{ ArFLǻzXD=)uiV?gbϲp/5l6 epX(*)Þ$\~av \R9oVZ&/kzJ]aœ3rY};*z%-G5uLJ' tyqQU3Q/Qdk|Z-mRҺykrltL[ i[!zsT!%`7|#+NS&i3 vpќ8(fK[܇eWU/ܘ"_ɠ>0'0u@ΰfSyvᩯ(+B; _:wl~,H"pq)Cfe$K#WXGƾJ,Ńp;Rz{JS~JȎL ~ɾWŏ^Ayn{` {tn|aфcOFdܝE.RpKk4OZIax UXN\ qVKc>v7N滗7iZ͛>ea_{҅ F6m&\(XW:?'hGo͈$_+9^a~M[q J9gƽK/>Se]o\墏|Ut?. b.0y&NXcJEڡXdd-8{ $;_IH_SCP`> wCa%B' >D#כbt:_ <ФoT2ڔ` :[/14 a%nf%X:Ndt)/yGe;wXf{ ÅE{KTYo.;Pv< UjQ Ƀ rzM!Ǵ,щb rVBM)H9(P R bb5K* *[8;DtdI4F'`v.EvѣF_!'mҀƖ1QxJfՖ.G3ՙh;[MIV\Q,.7ۛfykBDŽNx8NQkT]?Us2|k(qoi pe貔wus^kKn= qR' . Z:6G04eu‡ɍs(y猋 o___ȴkԤ9䭔Ԁ}v3JFKVkle z+Mۛ GY\^٭[]}.]׶uvygGGbBbuծ9-];Pph|nծ>Dt6#ZrD]0> 5#ih8q>vTigQJU,/?67nqLTᵚ3kDe^T:n&IO ˈ?n$\l65#NqR'rl%(X;t 9^ú&![>P46 jIipW_^悟:U ߝn!9Y;I7pW2p9r~Ւz;(l垨&"7wz_@/v:A^UhSnu 8|kaYǙc_̡x^٭݉Bd:BCDv/ 'zf(OIt*_~πO!l}tW5;j/uɆXn/P/lAqODQeɮ`IWmE͓mm(W8vڵ٪ !޾F]> ? {F ݇XI*46Z[SKq)P`.2`C7s3QHE?!d,[VSЇCM(qyh._88Ο@IU K%4Cx7@VJi\Ù!i}dUdyxN=z.v.ulQOӫ|'º:3v3G?Dz;t=[R4sfgdeFwD @yˠ 3)"mlW4آ}/Т-Gs4Yi_+ 1fB2 r;yCrNl`iLSj[i˽MG44 gZ"92=TIѐRf~;?̴]/]m,CoƵԹrWS4(l7+Ǵۚ6sN@QR0_s՟yR[Γ ǮϮ_}+%]@H* Plñ9+*0*+}GCo_8< ~ f ec*(9_5+v斏I5܉.K bwȞv7gܽBs* 4:NPօ֯D\UsK|Q1<( \Zʯ^͎|pۍw<%Qc`opUx:>VδW%ڜRv۬4XNE-uO.5ZqVcӃڔ=:0JcŔ 0sxzѸM"Ŏp%f,#7z`āD,z:ȋl 7 hH] 4vWŃ=t,5gk_bs\p-)6̊ l(x vWͭg#F1":.|ե==yU-OJyn+9}8'b֭jbեpzKUvӣmγ7tvQ,C_{݈ pE֟f,) $M̖CP;x̩P ڭL]hl/Sє"}Id@Lm#ekVph5c o:W̒0aG0\;=9uC%ih}UHMЯV1TlAdern ]E65ѮPnqkڹ6\npz>]H6shCs.40LOe\sG`4MOhaI۟FXMu^1igSVX?~ϾW-Kz%]=Xڐ_?Wn4Ԭ(<,gp#%4J`9}fZDp\Z-tŖ\e3ِd(=* ,0Ӣ 9vΥU{;zmM<_sޔ!=.>o TfupOlDё񺥎ˑеع`}R}i-, B@*)M#bb:RPQL$x%BZ.g oKj:3:X7 X ɀ.;V4e_00|D, s FANݸ8VG^*!?! EbXW.3Qno%=PG~ڃ,~)l_4b"r|inl0^L"y,t~d;9sRf;;|?"~.^/]\A R`؇ KF^EKTuߒ$DbDmWdAD3?FG~8xbɹ6IP"/JFsEyO-k#'R*3p>-Q`8IPwA%ɫhe% xr(H5Ô7?Ro}H%%L-SUZVZ-QG$fK#@s@4 Vtg᳻s}E? ࣠ԫB })a.!o-6mt TOGegр[y5rpH/2,Z1WSO=< -KL+R8g*F1yI^6ԬB+-dcf,/q/͟{pO(S-Ou{wkYJ&l@?E3ѿk\"HcxR?qo`Ԡ(Kp VO]Y@8 *.[6 t%b]cKhԙL3!L'яw% EE57[d'Rpd_LI`?xl(UG̢2ќ~r|x#QLmьo*~,QNэ/٣}(zX< ;oq ]YPWVʗ0l \ ͽ3@4Y_ [N:Bɰ쵢 c/};s Vh ՚:Rɰ'CE8*5kHSVa2ѧ+i̜B\>^wx%$k+sEx9E%Тqrnhy:D(gk>;]#bJ~,d3>z,+yfkSwy H8I;TȖߐc*1LfRt +_͢a!20l4R/IR+X h7o&G<˼||ۢo qS ag3x 2YysiZ[[{2]_UM[-#?(vIn0QSOWF.o+3ļD’p}-08o)G'.֙a = P&ej:{6qT3FQ*Zä,npxQwK@vZ<^D'g(s= a*󅊔tYqa#?SW]WtK}-Fmj~ +dD_qVO!As+91c;"ԏ1j/l z2$'#s%71Uj-ēx@!?JCQbrZʜܹC@nG~0K|ADhiZ:QUrw0NNfU{g%wʯZqOeKbJwHQDhJuC\Slr.([*N\JJ>G!s /1bo# 23v-iPUQ-x6>9Oދ{KpIz~D_NK_lHX 9n&+LW@Gsڶ>2"u}+]$ȥ8藳 JhpHxA;5a}^@9m"uVEv.˓&*Tuk+zƼ%jktvjK+,9Aآ=al~m)[=:WyF0ú8 wT8ĜȩgcߑcX^,3lŒYGxkx/IEHK9|叢T0f8I1P:ha4N~x"b$dM@~^1s砬#EP$5(d^_^,v2"\.Wv2=e&E,]' $H)Zf2 Liz"|YThoR&7yߐK@ E[8ٷ dW.sb2 Grsj69ZREXǸ}\k$ GQO8V(ɦ)!47 @!6r4!!$eTT%HѹW\֞eDŽiCuJk { }c1``͖!r.Fӓ '0yo$Wچ}}7os/iY'՛~ > |w;k4?HcHyYH6\f8~1/-/m] rbΡ6b`;%#B{ ΪDz]b[hݍvrAZ榀t֙j=Org^ :Na2m^#rz!rRT%-S(5ykw_κ6Xfn1BQ[Gm@r$ W-o 1&Sb0]EF$@2T , / EnsEExآ9EPV~F/~]xuEyԋfw'@DmB ds 釐r2 Y"!L^*l·H#vŷ̿B~UNǵJh>Fa xlUZ͒h}$KuU^ Re8Q6O*y-\' S1Jfp@AWayf@881 t9S@{~^5-*ɩY"zse䔕$r6{p3ޔ5qRZ Т+ڲ%v>XhvOuI f߃P-)FP_hv+#)  Uȿ9zy)RHm=G˾I7Hе`9:qԖX)^~!Rs h04m3H7g#ߢP|t#􈒩靪cQE=lDDX1[H(:$)O`D5#v2\*8ªu{+yY \q[ѸӀwu r9NZԖӦVun&8umҝ;xlk!= ӘH{='a3^J  J /%e񲕑r3ٻ} λUxLIrB쫪JS8Ԕ30 YVǬ@3ܚ٨&MQ*lajchS6\-Ë0ꍃ;{TfY@?O _s 6X*#G_`MAz2$.()P2ٺy>?o(cx3b*HӻD݁>YO1al>hm Tqw4OMA]k jER ykKt2VTtAzԀ+Η'f"D*g|d'@ }N,ׇ@U g#X#WIN/fi Hp}+i/s53#'qb NaӶ[wΰX?Eٖh8fGs,j⇁=Z-F3/Œ |h!I? } wfDlzdSh;Õgねa9o,WdiEe֒SjTD[Fb%6,=)Nm2N'VO 5g"a>rm]ߠU:51Mҙ5S]ݡ#b+ğ'$ ](Y  iGc Vi Q< ә-:r8C\7׼3J+ IH[ pHx()Myyc 5MD54]NBNjOd#YR|&uWW(TZ'~qkJԂ/ȇ !eC.+Mұ%gJ'ˣeEꝫFM0]۱I X/63^Im+gT zFմXKseB\ |dѮp3k<3Bj8Ƃ8:fU| J LP3s ya|Vp@PH)Ln)㔞H,/T&-h|AwcP?v€&{_KV}`9Naݱ *bP9pK DŒ$VE7 lπUu{״W鲗\#j ʼn}TBn2MRRˌJE RuABt{w|W|~8:K>g\fz~?(eN{h(Yn}x~DVYu_&4Qv* ׏Qw]lf+~E™GjmHnO9oRTX .Vƺ1˶ j Lm3ٛ^] [CiGv>Wy^p8+y%l)-2ϸ>;]8TT$=i~|>/zl` ίVMY?IΙ%n kL?1NٗM W= q>]xi0܊m)Jn'gW%}a1ʐFCk9!@7 u 'GATn{a3)GYS n$m!qdZd 觋FKV}ld%|Yg]/ oI Z[ـ 1˽Oo ގ6E:j7[dB^ Iҽ%%=ERj7QG|xgu~e7}{t1CI'QEzC8|=_UD4ř_؀=᷇܊5;R?7x_Fn`Cim`yw mu7x^B\@EgQ^4OЫ-s{Or<]Y4=Bd0>gL2. {{`3l@$/On*Oʙlhν`1gyLș|X%=l[>=bgQXؿ{q_z=vs!y م?[|l y}Er ,v>҃6DqmT5>2a0ґf% aW.p<<,n_6UD;s^+imojal?D@K=:>2&92IVh[GǮ?=cյ$ձ/ˢ401ĒZUd)&Y+F#1?IBe֭Ϊ-ݬciɳ PRdg2bH]mnN׆v$4g=(-KWe/ #f9{s|) {qF"QJϬpw$-'k;/)#+1UWxpoC},:m牁Lܳ.̈L)7sW&}"HɎHK5 _?b;7lΝf6-_3l ?>gɢ&Ȍ1{TgtٷaWJCwxlą51]aeb]YGtєu3o`w㙇T7:N'W3RvwL7v;?؍]TRN : '> '79+ U9)XtӶ[hwXb "b9YptࣿeT:1Z;>7f?Y;+JklFkg&t}܏y"Icf6 *v&"5vm>9OSҦKq~^q]e 켬M)ȝ};wk#R{GaƎcKOVSE´W/3m\F'Ro 1Orp,֢ܦ[a5|`&c$VG 1 /G!N=NfЍ [03L}c.d{ʠF3fyxɟjJ:$}(o(~UETw/wJ8%kk '`3o/')^*>9ǹ&jlSiҙ klj>V>9k4`di{?4%M8Ɏ醩._嚕fvdwޘ+_ ̳k#]yfAj#{ѦPl4ýGL\p&ORh 2feL<+mVUbULƑW/>a5F_ě>;VvW#hꑔC3̲fwSg(N.q޻`Ck;#P+(NI ȢSoJ]3"cP`(]KأG^A$޵Lk gV{}C`yGnZ8.q=}j b3Ud6UL7Yo I, iJ YH}+`mo>YW"fV1673,-|vB' 0Ni \ߑZנE(orҚ=Y0:]ck@j,p:zz{WXW,=9Hf ق,tq5Wmrj=uȗl̜k9+s[0؈Pm鍙<> z@fP*;%X)+ְ+B BI2شH6J"9g46z*R15ёHs>Q\F.OKf;NuWsw6%`ݎ )ZS D׺DQ! kc ?ئ[ V}#[^F~nz17*>jvV[KuÍ^EHU}vT#ku ldK$}E&q7}7Q)wGö$dJߴ=S,oBj~bx+<-lvL)ZarUf^ȝ!|FX[75oâ>L\\^r]܏7[͆m,!6L~sm4İ4{xy9 |P,Ew5"=quC!ߪfU Oʻ۷Ohgﳬ89BfwWGkSֽjM>pVeUn/3V5E~dijk}'PHW4gVs#k'm{KYIwhO gx3tSpL|lKE@7#xL#|Kɰv̸Xv*m(CܔUJMˁ;z@h\eo-FOC fO`GF F-"{3ϨJ;ñخ0􎧞L3̹' ViF?霥ip]l:+ol@_~h'^߃덫 fhUwoNӐَ?80}}sAyF|&WD:2j/+I0Wgfj[x^B&iڐ!\,+Ot|m1 ފ**0l+ڑnA " }yyO:#F1p^xUvڝ?=}_ޥSUEs]3QA2ORz4sun&,C5Ԋ+ރS' 0rY)E5qWqF:f'9Ϊd6]ۜ\`Kfg0\dmNZ!(hW)Yp'*<Ƿ=[unMYr_dh$p 𜜳/\r^.q0EF]s{N bzκ_.H'+H?+D.9sz0 EhM ?/)k;]TTȱk'5&+NKͪh5;&_"J3U67Yx,dzkeָK&.du|etnD!է-@-ґI"‚(%WϾg0wܿ~IK:r;f -90a&׊v1Iѵ3}J'T6(JZ+ي=e]L?[b 7#7{GGŽE;i&k ~ފO /zQ"1/џkQGVE߂{D| F}rz# w[)w)PIغf]fvlg7CHRXqw-r7|2>ڗ װn_fz)Vȟ8K]䰤=Pde.`^JsW~vjuƂ!9#rЙ_LQ!{k3녠y^HVBJ Ӯ,3Tn3bP[ mAfg!P6:ZDt) 3y7N&+ z{c &5TKumVk$G$t>vmJec Xϱ:n^IE:7R`ja^,TU(OYaK ϊ9V!gg{5΋9ޚSi 7`y00FsAAniW>*4wJJ91Ìٌ\>03|.Az'RY6I8iaҶB[vS!gL[DyH\r"c.ѩ.qJ]7})6μWp6BZ\1:n`l8B~BI.'Z: Ҍ̴p@wlk ܣ̰4^Hx0+R8ơ9}K$??u(£Bo|2B~)πi 5a}ud jW{mAdzn-?쎲#!( j6*۫>e_uh\ ШO(ӚP(wwQ JD4UaWeUZ!qkN9 mrEqfsF)jTŚfa2T/ 9q;iXYvFAQ wD/C-4'sw` v]IPdv^s\LJ/ES-DI޴ ,U) ! ^`76G/"ˁMr 6^/2^捞&pQ|>h"<-:82+ ζ K[Y ȩTV,+禨J{rͩ:82mZ Mt-r7lTWoWHTҗs:In̍1ntzs};*th$Vu>amنu.IgU*UR4 3TC\( ~>Ʋ2H`ۀ猕_45 uR/M:m3\a`~^ ![ A9\ʰ[Cygﴟuw"Zjx8Q1| Am+q= ةPi35WdٝI3\2#j*2twHi=2&j;j"is5#%?O7O~N Nu N q]l9/A!VBd.v#/|7dmIMx-G 6[NҎzJ~Y]O[M<g~ڴ㓐҃mL-Wa,Zሠ~ZS~0NJ-;񚇦Ϟ!ox~ݐ%SyQ̧ jɯ̿DvsmFBIX!&VU3ezJ=};KquwH-U6:D~s}DJlATpL|}VS/`CSS7bM]󆭺]_]n}[M*&ۏ*ץ9$ q]`b",kl5%MwN)'Lrlт1~NYMyS [ko>dI⩆´'& u6q\ =4HHɟ+N:zɌ{TIBӀ[0PY6-'z`}O}Wz┴ *p q$zv.ed(coֽMQ"0rq~|Yڡlm&pSCo)Iew™ :bH*{PNfrkPg 3i+? "SIYg+u`yk'C&{WF[(Q̒-e4-%>rm#9f 9fQt: _ucL+枦 EalV^h/<% sB:z h(Vem[K EI]eel+~"YGWRqt+/-Z$ER%"~%ݡז uk TLԒ;OQ#1PSy7x5ٺ2T8a黈*fGMgBY3g΃)P;)$:;2FoGbGӻe&gW$fRi 6>" kb2/ N ,9pc^CS(TS%JY`yu)Ӽݻ|gL9 j! 7$ܻfKY6TOr/*~-O<M Z#JY~ ;T&J.DdqC#F}XjUKw|g]UjK\`MVCP#=xP:gR즂k: Uxj/4ޓ P7U/Dj+ĿQ$n:l=TB/?9nc]Ab%U!萺e^Zc/eoxIJ78[_% WׅIFm88.bޢ:D4's~PH C;Zw[ \x Ԯ &;MsCt]l^m# QғZq3H3 j/3Uޑf ]W >˿}dc.]~Co KOYnvn">U[k?[:: Oz&W>2kckfA#p]D E.J҇ӯ`r~M}Y!=.19q'nMB,QIg?ڏ;Q],Ěc1j_mb9{DsS3}쐃葫Ul\V [9hemb޻7xvqfչՋ+Vf+V&NBxu9)$)T#COʧxq}#bfh)Ř^5B-ZD6X쯏9"Pzoٟ2^4oLό0֡~8kX'W9vfmGF[w׻-hO G>;ZdEO3J̲\n +ms OZ\0, ;I)ȿ_`54&Zh{&hu[`xw&^hu+\/ \seh(0f??#M{M--ҠzņuR!yP1{W)oyQ~YAfO 9Y#e-i˘w5E;HmYcdaQ#+Zm?,r/W&ǐ *zVԾS0H6f+GPSX6 'r´@\{d`h6~J%l# m,%M.8>)+m`o0 ځhg3R0xaI'㌀P&ΗA|o*LjJ_|_Q]_nVLx Ҵ̟ސ^ N]mgCҤ16%/2nK>H(hj*:eݱi[@&?GkX 6J$rp<kc){(lWZZuƠ@a!oi݉:PQ_ŒHKYw_@Īn*eP1p֘BSҊ.LLEGYi^z؜(=Ѵ H~"eK\c0u~h%ڪ k>]+iN 6 :BjLS'}v-lxrZ{f9trDQޑy>gs-AV4s*L03q]w \?,r ;҃=?[J-af=ˮ "R~F+] ;3r\ҟLlb9K'*8U;,ށUbὠ_u]*sxX-yG(J:+/ԭE ޓJhi-0-exS`RJBE*%(7 d9 A̪,nU1W{!<3P='x*=}rs3slj|T+V^؋DL[0k]bۓ&zƭ֖o8 {HZ?]^^:7[OZ.`G 5l"!om\RO=/ r4V2tKJ3#]l$Bv'\kB=\t! PC ֲ'(VWgjz2thG-@ | [Bl I%Jc\IQbHYc̆z1aD^x6X:7XCݩXfoΩV Y*jú´͜]C6B'i0R~4&fV@[0H)>C: 8hrGR{ҷһ{-6pvMqY: ܕ0ED%5-z^;kI H%'P}%ٕ$KN N'_0z{`(MZ. f|-_иbuὌqpW=QG Byqnz$МE#B]z3G+EV )/oPf2B*}zzgh uw[/e3^Ig6OD=o.|%3 w2$3ɶav]/̮r.ϮX눟y^8 BcEnՠe "㬯h9>YwCκx=-Yl=ݵ.2YDێf95:`}r Lb+ţw#!f!"KA5zRpεα حz7#Up,c#i_]jvxևb1+Ә0B-Q%+(\r^aԋ9WL;I-b") ٺ `/ D,Ԕڱ#iAď&~[ܸ؎1RTګPCꡔ ZK^ $0XVbO<$KXO$%OH+l 2vC)W% 3qIqNu«v_l丰iZCC^u&ZJ \+ͶOi=HH$$?G/ j>FNC ֧6wh=Zln:YҞD5Ʋ˖e ӹo 6 (!1/9:Vn웛Z4nVMdм%hWۂ+2l&"eL_dh` 1RcQHi.(S|m+ǁ}nA'ø_ߑCp*ޑq7M>>TI #*~D%$O|Q"'cE27XK)M? B,rr일wBGM%# bD%ZJje/Cr@[ɗ=R^AY y`= a&FnW sꜿ=2aE5~h=kL' oTOn!8hjVvO(_wZW)_O17b3uÿ8#yEӚ"Ǡ]id!ě=n]*\VNvQMMqDt-ֿlVJ9 -~T#2u_6;3>g)s .VKEµ"(OJ $7h@1Z2#s<+mT^2r>e޶vq`oFUр"o=sCg-_}=3gM>8u!2nd brS{puS1 Rlaa X$sDt d-up!Lcci/)ҟQv֘umWOee{6)q +3AYtNmqF;6?M KwT7[׌Z'b( CiЬ$3%H E`j Kstp͵@JduV3A?(?x'PЃMVRxɩS_Ξa^D_򫘾oG)O ZO)VhmG}"~M"X.ABeOhFhl3Km+ͥ\;ncf3׮n?<F,)33U[&Ϩە̚Kq ۜO?k !'4W "-vMIş`!TYX8:]F,giܙH\#Ԩ .[!b6GuxTz~GJS7bF'TL $gby' ا$}q9/Gb.$@aWv`W_ Mh/#-a~z{}땧oVUvAgY'rw|{VAṜ噣˺* QkjNUP#ѷ_D5߀tvljS&F2b\Kl*@~$Vӟ9mK r|zO80>zF8QPWb65Mx^p vCQʼM"8;['+m%^c[y{:0k*YިS(2wK`tG|]B]{xO~Qc&/o% S| `hxpoJ$\pߩ7+UǡJLd^e*%wv;1wG.i.XNl`T&˹)W枭 6Wھ@cAw՟G? /ZPy١nv<`Sg5y3;Z32?e'.*-HMR ds#p'7ʜ=-O>%-'? {K7֔Nq$)3jdPה}_.p˾^,˃>r: nskd"""Eo8gI>|O̶#ju2h,"hg/#&V4~~HN1'_o"IN6ySP2zG2՟8A 㰍$27x*Tw7<X5%.l 738ovˈh~xˀruo;E;h q"Q {M s'j>LawY#"V3kLck x6ƖKyLuNnErN2Arf R0e46&;pgHĿc0@_NݤBWo QR*/HF_fqMW2=W&|z#tq3;wɵMD/8A /4nι l4 y@KE훂Ł(grd4se%q# UA{ $ !d?DhVWqEh0JoA ѿPpI2MMkF'MQʸ)otY_NR]\-r+ ~ nf=ij58ܶ~?lWɵ/+ϖ_) )^wܚ[ޕ7Q\޷zܞce*3k?[k,U~|n寵#jU*C*VHm*rW%˺WU׼>Q7~loyv_u7 5F]FX G?":l _n̳}?g Nˊ{?kZ>4z|i p B7Q!\4HB9 $)0I]o[zay1~8*ZUa 5|;N # UCɉ>TsPZ Q( ',W6 ;R >cr*yNc ci#3x<)%Xb]{E+/W5ƺS5o\t`39eӇj7[b[<2h5}ۙswQa-.*^9ۢ5a KL`c 0˸76F8VzRaPRR&JKJDoXƼd}n<ӏ&2I% yrt5/3ҽހc&<:ӡ-,u0vܤpzoܷ &a?)iX Oe}^0gqYTۜUٖ 8;^%??;,˶ryzRTc1k8uf.38KvW2gz|zAZ١lNߐt5dC7= Ky|֕aHn,v9Gi+r HL ?QM/`6eF~b<݃;j0]c ,2Ty`z.(A6l#?zjEg;F_:n2+$dXޏ)l>d_ݣ}԰iD@=BˉHf@Sef*,h*1xI2KI]B@gŶW jzOrEM5/7{"a6 p2T -ߐKy"bU GOj{xX _%pQhmoU>2c-`hؙrFjJ"><&!)_͵w(&)6}G[b SgUAb3/ V*%KL^rť:ښ5okS.nJieٺJ~ٵxmq갺ך7hʶF463mq>ss&fgۇeO;~޶}dʩuFX/(v8NΝi'et#k:;g(ߕqB?h4*N5'uo’dQd_O\=" sx,EX4WѿȾvW`*ه];4Kެd r ouk6ȍl̍iy5do׼K 'n Ͼ VAYfopy&7c0-9nn<=7oqpww !d2&1gI2ԛK%-r*j=]ƙda9Iq!ѕ@;p KgJ<:O aPycBC7x)hVudRԖՈK;Suk2M[BePg R; m{guzeh|suJj{4m_\ÿu6,};\3$') f5/ޡ]zf,)\T965x5c`t;xO† }QU% 񿪽RjWO64\^bUJKGƉkm<ؼIs[+B/{ԼIL2Ik֛+BWR+ mw5-ĆK5]C,Uroپk=-7hg zeGa/|m `+CxNԆK+ ۡvW"3_ru'ۆXnlYΙ0M0\͌jLڍOP0PZml@1Vr[]'"%a͢N~0DL\yJW>Cw*U 'TݤHgp8F^O#{T+i&WE^4no:2yOh߃eUv7U= UFx\5lZҿ*-cզ CT_صW\l [vOZ6[>eGٱĺsE-)H:rק 'h?#򋤡wP.2KCT][,^i| scYTGu Yѥ7V{;% kI-ݓ.^9gakti쭥쩐Wf6eZu)I4i~>pUV$n(=_\kp-vsNv;LJs}ٽG&}ISYV?urIRf]tgUzWG["rJ~T*C#G (D&B$4gDwt#> E@@2AqUYnQ 6QǹZ}|4(@]Od?F?RM\X7 B>R!xʟ*iu^)K4ՊnV凤؋@CHTG]ۧG;H=ަߢ9/&#_9g*d L]ڞ'+eEZ~`,XV͍5E0"7=K&ldt"Gƫ >%gsR#q|_AJr%\O*h'NPYuoJL5md|"aJ?dF#4'n2Qi5Mu+KI?Wu=Y}s]R dq uZݹ@kUw.ӷ魨)iŽ{eD/]_5$0>p#03x.ynOY@pS\/nLjNnpvVF7l<^I'wTN]y$ctfEZ:?˿JWTѳ|I7euit\~V-N{Q7eUaUWrC7Tu 1LRm弤N8ߝS9>QTRd5(Ͳ˸e^bw?h- /yQui.z_OKG60̪fJ=<|iOlQ/ &WA~EIU8X3/de&L/_z>'90SVFze&j Īii¿q%1<)mCYE[-qVkƧia ' Q(|O{8MN{μLuڌ )췰h }=bPNS1o* Eyi`;:H䅊QJ⽏ ˞GzC"dfKϑIJl<}G[{A=*E}L?^n i2 #?B,) '2"/x.VCJ֜3UY`kjSd,_dH'O˟&-)% ǒisoXs Xx9R&0@/t#\NA?lPwD ~UUM ov&d\B⛩R`#* Je`꒵_Y:ÈuLYISIhA%yNƂPUAkkFm,0 jDUup7 T`2g UaY6`k4ݘT)_2t?O?*n6 G ߡ`g~ Փ*+2Wir~_Q1_H7GEQ$qsb=n߂θg-PE~˛ƵSWոgզiOn Lv տ"R!Y<^((/WBMvAhI4h|SY Ƙ~.q.t\D*m|j_E1.PD‘?,۾R̖ .0-`%삼%G]$ꊟQ~Ƚ?6k("jRp|ɒa%!es%(Y9/y7x' kR紋D<\ MȪ}+xҞa]ns#@n泺AAQBptMI^%"! \$=. d y x'AgVh~x:я$K #HvZq >%יR]8L ɰ%H;`MB?{:ҡ)N^NNA5 ґ*= V\^@P5QyOCہdhN-\ɯeTϺK\`1WG2E޷2\]&^%e_{Vsrw|Se(;U6*oPoLIc+l Y`&tIf~L<zgv_5(>Gqk?GԆ֬J+ zُnv׿&d? C˥$E'Eddp-5HKc/ HZ񦢣Rn×5YVt=?W&UVU(*>Nrwt88tKV.O*Mv7(g&,Z7tMZY]e;Y (VHAvey8'蕂k82 *]SSbpGS!W㲦:uglI*Fa.R '#M39:EтbT]m;o :DeeS $sc v &Hv'vqL2:! &i„)~.LFι]4g6$gMi v ސA'&C$WP4j!?/&knψ~DfVZdqLPxNvϢ&8Uee.EhAP>Pgh I$l ]4T)bm/jj:&ҽiL$'d4'q.:ZE):KeRg[3Y i i:񂿃|cL4|cXh3Dm"if\kƭA'Kj Kɣhd \${y^j\+VhcvehvbgVA-t%c\ET58At|0 ŮoNb)󊼇ݗ\ݭC}(+or}t` t$lBlw􋮊[71qrYxF~yN#na.na}YpB R 2ڠSr@ㆹ 7CW5`%w, msjzCNy 闅[N8 gjy:Sob?*T Ԝ0S܍};׌ڍ €p2I\xATxCrF V[4[yP ?FL°+rF[Iw T4&@a~2זs}>./S+X 7'4S9e!:er%^9"??H/)R;HJ9t ,m7(b,8`' ͛6L(\uaV"%P{(` IN @!*z (@x#=駸_e`f"1 pVo &\?/ 5kUf_\nR`JGfTw H0PJ8\y;A+T՚&;BJgg:W2mϛ֖ZUܥ2bDߞnʘs7셹ڼrΓ~^P_`qaHՎVY3It@sJ_B$9&[w\EUM`7Ŏ)B% 5p`V!,-FjMM$:Pk>cZeX3 C&yn_g :T+uw[zoɬ.ik61uJ͒G%#)$?J2jU#EgALꄶGWhAAK ͨ'vӯ*ϟ6- Oqypf"ա!':DѝF7o]mc( ϧmr C'B6N:tݶԋ]I4G[q$$LO'@@#GqL M`~0:|Sk7m&|1:QGb9}y^.@z e@@`vhoWGz,?|Hs1Tnon%6Uvv{g|n35 SaȪP݂\ݔgYJ)B>lbɔ%n]/RK(鼱Ы?λ+򲇦n&WDX7glZ2utRKY#=)Ò)˲4uHW lH`FbJ|7X4'%]*| ʽL! N֛?o%8ha/m _H Tk\ [4u^Ѭ:ه)ڠ8Q%K9zUj- nƹ( ߘf5\zKE VYubreNJukix $1XURj#]+$寓GkAN{8v}"~k!>3e~tx#;e h_V8}ґӘK^Ҿ{jl֯WwU>PkS4?.j~ʀ:h2@\F^>@6>@ZԐpe+[@`C(9YuVH5 oWjEVW)WcMyx &_OˋCoq7 ֆՓ#Mؗ#&d1+cyy1?7fQ#DOo?ӜM8Nꙙ?L9j%7m5w|E>^%߼AYE'0m,j4]55{ۜ>!=ɾ0nW .ۃK3OwT>Bs+ .R?Ohҷ+؝zJ2M?V^/j+& k,*y<QBl7ҘBs򉆐7a^RG/*H"}ݒy"Xۑ]wP=NaQ$\q ;Gv󼝪b` 4gt 5:ψdd3b)$sU,l0B尹8?U+AaӰ?qh/x-<@p1xZx]-LWs͕I1$7U~^<[bz03C_CK|@l@咿bf ]6*욦U9߳6y7D>F_8FB.qĹa}5,KWm떓__ 4 `QEEoo)2$3!0懣CaK/8IYZM#u{dm]"g =4?X >ڮ: Hon,,l(utv}:W˰Ll/֍J:.Ӕ/3gkUm@<]fW#V 8^}#Ns7e1Ȍ 97r E)5#0gӦzg*4|p 넃v&xy$[QMэ^".JW&3q>"(Qx o{=W>޴ٯv#Wngųf)4׈{\]bkhgrwt<y`_wooJh[0ݟm_el~=L ggvBFo?S 5RYi?֎KrWE"CHcfW̙uHLi;`RGH7?)v!)#7@\ץBxSͬ4Y>^EPyR_vQH%{292e%r>>@7 (uB}B!+We@C;cjvf.|Ƙa`z#j I[]}T3RvjO;(֐ոK l5j¶GnEdžPox%2ekLuojWU׫QplٟnƛI6̘H5xE !gk^{%%䏥rZ=S>\4me6 >۰4bcؐ-<-xJ,`4xTDK풯r[?R6n(Y]P >FaUUR=SPڃZCd-6oeR#<6!mGM#Eۀ/?pwB1҅1w ʔ܋Ӣ%[4RP4TP4݋4 a+ěS 1\3.DYTkK_T[D:7^L:~:LCD}6]!h{m;މ/y3 D7/2UAS"WoU[pqs+l;iI-s.u+\Q\]$78sx.3t(^嚊E[jS%ϋ=E+|A4Ly=7x;Z0 >%C``r\fMާE9%=}=˼}݅Fxo :)!AmWKX3㾉|lL=d gEd;:.c+e6v8}e8=Qv(gdz:iÿXr xE?(ƾ II-G~ wo !(T$EBn~^ YL~1b!3T:0Emɞ5x_2.S&(X [CB4meYiB_a/=vgY=0*)8hi}Kg)HNv0xJ K<>Ń|3]S;xou-lY 4O.GJ/t (]T;eOEcQzJCTM:]H]Y EǓA.15OtnInq2drqLKn79$:TUM!u`$ۀ:=}$`w]f5 n`=cU+(hM ǛCHM*3o)ZDGdn+B }Q7 RVWa@ cT  _&dL/3T2ٞO638[jeO4v&~Dó"6shR]pX/zۑ*a{GoI6 N)*;#_BC\WT2^ҮޢaewKŗRT[X<,?:T_$) +m[ݙ w+ya(jM\Kb+~J.[86(uSkg{|y<;?b6/o 8|[ >G9N ݌L 7"Q]x%#|>[gIz3sMJ1pJ{zœ0T7pӸtme@ݷ)=չGU%'*gQ '_جo!TwTK^\ߥ'(3qLa[f{M^ήr_ggeAgErJy;5ZT픳}ԕWM @^sLH| huz^AMf~͌1ڍgFBwtpPc703K a)q1Sb&IYJBmvn(c&`Jnrݴ,(-A=!!' ~qܔx&LA&9K"qX:y-dž)jT:&BU+tO`Os)<א3Y=l[SG+ZD҃E֒#0ehcoxmUw1Om >|.TA|3^/mTid?[ضٖ[K,A 1|_Eg-9D.6pb&Ӻ_D|ЖPT`pp@hL7p$Ȼ~39\DX@ P58!C/n)%#Nbm߰m9´r|yw@dAtT $NoH>{Tje V'볇.V)%a?BM',-IgZWa B`Yδv w{]ij GS J3%oCV>š2[lȝY8zd#k߫ 5KԢv%|M1jX3:9%\.(\ijgRatOv@"މD.DGBFibQj-_/VTݯXykފekWmhK`7~}<]=YsL]^j^ޠد] Z94_Hv"ЗH"x;/J@ⱶMRPLD%@p6QfըNt+&+muov u C .C " aq1d8i}gӰJph/ M2~pm51P֭([-} %弅r>^pJ8WRyaP4dgTbq櫳kUN4طHUb+yKlPwTox\x(𨁟onhRx~62藢`ޕgZQv޾sDž.)|KVԗtEEݞhodC+,Bsv5*RΧеAee̶06_M%lk |ӃUўվh`g1Ag#ЧAf8[N`p-N XC݉֞{$(jWRPނr gD݄NHQidtiVLRp8b'4|ZyC7}Iƒjj Y -&Vю$=w@AWq`DOůRrMw:H" P".Xbp¦7k]ۙjLiOm ~4O- MS|;C~7W7Ysr%;Βa0$)̀1997 !S35x 0ǹg\>dmW~)Ye dc@r2d0 Օ>\B h9ʻԘ+'=?%$oMl)T:z:* ; K_6F8: \Mҟf:?]fgs8)ďw0N00y^ INך-l&]S7k[:8ˌӇMMKFeAD2W-tPܞO iD[%uUG?!:rϳnv$@D3kڱ=D.nΫ[4&c)`iw! 7)[ݲt՘a:/ͻT-;Q@0Ci)cs$pVbb ڮrM <1/tGۖe.(RYWMmQ_[vѕTGUub<`S L-$C#%ݥG.yye:Xƫ2(ѴgUʙ`.I:KGeG܀Rz PI$OBL^"v&nF aƩ]pa-`2}΢KsF_`XjZh1Qjk6* RβNkRY"kqzYfD#^c M!frcsM#m7ܪ׎ +|9כ(875@塅 %JbNIo;Mc=}K CWͯT9bhp O1ZW`lQL?/ߐ5 8Vy2~yk Tkm]Gd,(5BykAOa>vϘ2~o`YiQu Oj:.zLEA%'sht]SI ' r$p3βW!)/0L>T6M^$ @lh c~ax љ֚YjJzuR~'.DHT1 )ݢܢ:@Vh7_c=_7,R*zݤ{Yt0LS6/h5ޟ@2,bT %; TI&^ 5ׁLO&[c(#DkApB]֚wt6;ժ1x+âѾIT>Bۖ}pz0L:Nv \OL@TrEiz k/h]tm:4i!D8u2vm!gg $Lo>'b mNpi7x:ޔ D ˪l1kOJD&*tS{5 4S/Q]FA`%uiMdkn'`#j}Twu$>!@̅3o߼U}Dh4 CKs{B`vYR?xE{9>pWYSc\FK6;ϰpTF:ЏJN\4A8FSyCrJԇTh]50}U#?tnTnZzIXReψNJ;~S>TE B_+0@fY B Ifr0"2=20Bs A;eɲ 5vY"zۑ'b "7 o咏n ]F" Y>! !ToZi!x>z66K`P$2%iO*܄kSΆ祕fsj|WgRfT^'XXOKS]]44 7CVuw+n\D6Wh51jpn1Sѝb\zu-|'=82VF%}I yaW}uqq'Ld }UK=}o;Uv傩' gWdgF]SwTOwdҌIŒKPZ$r$r(>j3e5ϋo{*ˢffLY0({p/t\Д_~0̿792> n-$3l )6ݜ*K^:hzgIg?as}$%I۲*c2ӏL7͍JYQk7U},9B|P*K<\m Q1oQS ҵy=߲q0 V53;Ϳ 8n; hPB3zY4TrA޿uT9?lrt9n5KQsl}R_/WY\b~Dն޿2.F9"IWTzZۆpS,Bo-wNk9#,9ZnǺp;4ᄇ Cҗix/ڟzI#=ќa'sudDDZFȸ"` ]>_lɉ?~E[}u?|`eXVt9:Py~? 5l]zr@9Jd>w9u߱9) )893))&'7ctT)sWT9YEEJ4%u%Gއ+3B3-?;RVfz(ZhvSRpXB/!oCf(o"s_;#,ƨ;™r@X)10%>[hSJ5%c\lb ~tz,wI`o9B,U}age, ^7=V1k0Flwv92D>~nԃ4)/ɢH"02j $jcAW[|n̓ W%N vE IIӅ1h=G$+-%Q\Bf`k`@ ]+qDՀoGWCCӉ "%?̳戲_ʌ@XEn@2[|H-&ɭ>NG =TwFL~͓d-#Duq$rDE< 8y,TO8Ť9"#$EVi#`$Kn4n\kn 1do٨A'dM ϵy4tNſgUxnz;L;"vZFz}m%{Nˠl1h(m!z/4h Qh Il"E0I Gf QLa3Wr#/NcL;KYG gb];fh92ǰOFA˿*ڶjaᰜ7z}s@nKe쫏_d.W#\쯳M]]Urwm&F!f7DݤmWm+.@+i2:m BbTU@=>A5 Q_ρXT]RgGxq&gevc3 v Y| t஬|  S0jtG q򨤙}A'AFU! |36h@c;՘d܏1@Q'Ojc̼i?lu@ǃ9ǒ8mI\|8IUKz5Cl6]޳F.3p9 LgEFT>Dq@t`|M_`eη,zxF/ KBNo֝jJ;DM)JfX720gxSL~L64=3RD)ޟa789d-m m=OLs51{ZjZillLh/:tW,7rm}R%Y旧eEstɺ=[+姼bSGb7dK?8ԝs{<#3 H}?GI8Ow9miQ8WF>()d׺ KsD0!GX]dؓʭ5k-]xфc}@n6j " TJ?(R&@#_D *g]SI-PuUutĚRIVD7t qFA][l^襇6C;ʈ|L _#?+𢡄*V`hPh x2U7N9\EzVqQ6TcWh)&**q~QlyVazp37Z!ѸNXfZd5v1|?uW-]37lKq ל3.04ٞ9Y{ D9Kpٰw伪l)8*Ԅ 7=ur2KUs 'f; O“#σ9]t4/=>cC'/P8ڵTW*.*\4a\CyO\zr|;p`⌒H`pP {ܾ>YH:̈tX eys[a'pY֡y3جr>?N{8ae)SgLN2x7R69$s+3g\#KY領vnYg_ink^\Yh9ήEUQy${Q{ɅRVږ|2z残DyzNbxtr:ΜW3ڱrARwg΍U h^d >??>pk}ՉA%Q}iX&cmm5_KK/\nQUG[ت1%.+ӴTՍlFgcهxt-^uwٖ3u [Tm*^8J #Їf+}lx t bg]T  U:^5? Sl`8lPݝ uo&iIrN[N+i[I{[uWjXdphTQʡ7*v,U/f('i;*Kqi~ K|).*VIeb,{!' E%{=wTzt 3z!r:Rno~Z;Q(umm\'أaNg=7<Dgd醒e1Bswvd_7D 5cn*8Ƃ@'l>UYtѶy\gs m gTp}]'[¿2#v*P{L9+9%Wz*vSM칯 U\.9y2JO.XjS}N9z\wmn @QR+p7I2e1bB]⫿qE)T%qH<2Vr um|nhs1w'z3TGmo0tƪ9(* H$W^HM;M'dg)P8PK&Bw ?T,%T8O 5wE{v+ L}c-ÚF5GqMsX$WEoŒL hi) }?ޫ2LG &%ښ{w(o _-c40%Sg e# m?3U*Y#ABQ]v`򨴗n0 zSJ'l`\;/P,Op3L:E}ƙڳt] Z7l2t}|at5 }'?YtQ>9QI#XKrF~={$?/e8z~"*4刵td>,yez- * 9N {-wl+gD*O'C]Mjc}>zzx=SnŸ–|\h>Nh:_82q%gX{zzkpm5]/-͎{N{·KeU)e`K/z3Ex$ϢHϡ%+Ey|=]pHzc8o%{WB~^ 7fkZPOe@HP-Y2޺p34|ٲw:x~|"G1!,$9>ђx[>y"4^`HlNďg,_¦I솸:˜k.u'|{ ? pMr"0_ oC;,u/Wdk 2y4$DgУQ8)ױW֊uƾNVǎCeeE{ɂ{&ye7DLg!oTkoT:N:Q:3uÊv4R14am}EЂV [j4&T;2+gǞgPFf6s2NUTnf$}6P_kCd:0W3Ado ~.(Uke9rwͭm_!D J'yLvY?`l\,?3so_;ds^y*;} Zڸ\GEӱ4B{pBi~FPv Z7lK9\4Qin*7Į zmp{.P_hehWő[ӒURf1_Q$  DEl* v`!du )*f{=?L!. !BM>ϛ!-&Tl/~ϓog<4΂"]QV۠7dMxn{Y\†4V]=uJ瑩1eI&ݠ[oD/Alwd*k,yK"y&uw?M٥hӞl*|*=Yz:RFCeoJEHX7zG{waĻCRIy?`iv?JeM#HD三a#+$1нj* ~4'}f9l#?lIy] diVkAx'AMu+av_=YnE L5vٍٞ<0"j=` qsMkA?0M37 +N!V!}Y:yGJULUZf |,]l\p*|X]vxp0QCT{twtimWu'iz! ]75bapR~NL2XL"?ڒؾϜ,~:)fa~o>Ɏh Nޥ3dAĒ pdPY>6CփӣInrLc-^P_ r8\F֪^?+/_ksv}Y6 $Nu04%_  Vk ?v*p34_NSے=%}vw:41W@?@Rp,4h*Zo42>;LgY8OdVY^Ce?p(Ԭa&Q|)3M-E S.b"$Cw2Ųp),.Usrjr/ZmܴHz gsnywSWl0'dKcMkE6˜S"4AM^LMvZd}m~`C}455qu)t|1W\E%U>Ked»s;S7!ӡ8<Ν$+9{g0oGl0;%#Mq'5ŞK=dY¡FsWx,rf'%ssVt1mBI?UZZκc`wZ~FX3\c=Po WhJr/kDӗ=7kaWWU)BfcM}èֈQ+hp%pekF1zFGp77]'&tϱ+n"-%Dp0f7-oyjWXr,d::+&t7`5~XSE &Fm_-jSQ3}~VndsnTֆ> -*\Y# D80W04%Zz52T6t/'i-D$nڻ2kׅ?n<0H]J5>SGɢ2v+3j H_؏f S<~ڲE3NKwQ?s`b 7 Pw@k jAzQn4q E^Ti"% :Ȯ懲Xva?~1U܅nCm, V4CB65Pik$̋QȲ;OR?fDg*x*/[Q?B\|uхO\*x%U/_ '5St)w"TL %8VF?gqznQ].Ak7@O`v(0iGCU{b;9'ށE3Ki6d^.^~Xz$|_9?X4; 8Z~f> L--oZZ] !٪IUl ُ S;G/E>gnv=qӘd]B#MY}d[M;[7+Gt^/T[Ӝ6'NpjmɊ?<]ȉX> :egxT|0m6}OsWĺ5|/ 䀫` |ۮs7T'Z .~b,x pϚ֣<jh>>Oh8|Fx6ZitpB"ߔ8xܟ)|>+/bK7%MA(vu6R1AXk6<\W[I|ܙ1D1 O)m{-.% 7H,Y$T1ƫP/OV^x -7eR۸q r7u6ʔ:ybjaeO$ݒ*?.Vt:0(UG^C^>] WͺM=)1.&b~s9M/zeʩ#Fe1Fmnk)Rgὑ%GAQ)ٝNџMy)l}|g܍Ìq3C|M@Kע*",# djۃ2 ?7qk u`țP'Gk_[\}с;բE{3bZk_ɍ!/Y'`dTكm[">8$5=~ ]Vp8tx@ sHy68h<.)(eNe; ^6*Vm^9鯡 tU"H*8, E~!Vy7u/ӨBiT_+6RUšqN"/_s;b'U:Qiʿhl%hJbjU~AեykTb{+)a,2}@;Gw+NyƠ/zBc$0N7+bRv:Y*ǘt2m~B? P#jM?`'ip'bP iDZm?'F2e9,A,A&gFnb% >wn W :1mN8cU`:U>BF]YJwܕרE7]_%嵲)~UD8쬙-|7 乡HImhBtdmnIbwK^/Z}١Soeֆ̕$e>z' e75jZuP^[;9j6gӝU-\ƼJ5[3Kq}5wnwpÃ;m5kfL>I?@jwIg _2$fAIƙT,=eYMՖ NaR+>߸J/"{me UŪw6 X֧smLݺcjbXL5Qפ3`.*f6SK2Oᗳw؋=A=F{{ʊEO!!.` .Zd=@8?4G~FC/MMaP/ǜy{ӓ2ۋ|5a4a7r>dis8?9=8lԴBt &St++(bBP%PI=arHzTvCY"rL:TY,|)*.)Jꎬ|򇲈2JmV.&Q S gpzCOL  w˶ꮴ.jҪwY-w Ʀ{^<-wgܙ⢮J.F{tZYeEU 7t/ǽτcb 3wF`r-zE YCtH.릛i -63K{= kb2}W';|՞3pEpBSMf/ s.Fi sSm]Ce eh-܎(Ab89@*U9Ɛodžڧbq,^;kK;y=Bwtp o zgJ S|?;mK?L=L:q ky26M ҕ}~nY_M(pB\`F1Ov]ޫ-K`ZSyel| ]m.Td:/g AkTŗ^'[ߛq<AOY9Ceˬ>CmOi}d wh ;TEƫh77:r'k*7Rf'yc; eoMec 4ײgzµͱS]S@ݠ!]1T/^01Lc苴2avxTڴ/+ eW Rr0+0SRf*Sv

[*xPʍn\GӢVbbC?63$Λe0xo~S7p,OMft\wWpS[D!՟ؿgxZzwE39Hi2r".0(XhY)ؒ$I;7^cOvgs]KQBhbto5ikD,~ ݫl'jGлx +t?#uM/ LRڣBG23½; 8){o#`(w[~grO8Ίvƫɣz9vF2zNaQF|OƦk)/*$qI:*4*1)T'd*$JVۧUC6R"e SRiz 3ٺ@c^UTB-Y?8``JɪLNx`U y.YvW[TK_F/' r-A]I4/IܐjQOuŠblkSc`%;T5be*FE+d%{ȶƲ}AclK#rK3S)+yNj~v_["_,i|#3f~?=0F+87 \X>4lHpLϠ13>erHiok ˚hșWj_טo۶L gꍂt*CitNDA1!=5sa·rz]E{̨yt%r2+| VU$V׌/ԟ {Qx5ށC6Qc8je5b,9ε(|"^Mk֪W)1,Ghv{ǫ%Hݍ4TɔuOtgC#yM5t0b엦x"˲~U3ߑD M'ېf^>ql#K"dz*D{b5:jiGYqSƧ)>kHgg4#Dn0Mo+ .x^sqD-,M]ŮeDomۜ4/uŶ);ЯȞFAJbC21-kA+$1N\~*RXde wUϺG2> Ӊ8 +V*OUЯ7O`v17ƘZEcJ5J%cS1AJŭqy}_=B/hXo:RT[۴u8*{4U ]PPhIӦ!3Z;Λzyl'}Gey61řSMÍؓuj n Fe )Yyj&@ U`XFu IBOԫߢuX`76ٲ pޘNw~!`/ cg)rq]|~C*"=i%KN7p:tk#Iٱx C;I8)hYd׺#AK-s2NF&JCFh  %)l*>-롨$F/OU~)o/ ,܂g={q䬸 li=a\r$%pl4%J+גUk'~W7rgs䝂+AH0)YjKeʚꌪilE)=*3* ʪʏ,ϩUkBщr*ZS|dWG<%C"Uh[^}u%]C%JA`w(nnΛr?#G;[&^0)}I(ַbOJ m9a6)TiwAEY2s]hj,Lh_:{z}V n#<3l` f"keqt-d_Kob`}*GQ籅j2QXSesXik1ߧcbW~<|U=N3l[죱c6Lgflge̥^[ٳ*]Uվ҇|pr: fM9ÚQ0m4̰rR.Nfg)4>f3N6K"} =cxēZb.>B ːGӳ$xDǢ" څ$w2xs8=AD ߘhְ mu6אum健=Bg`j|8*(UtYtۃxx1tLR JB&I}:(+ I+Tk5,lIJ 4?Tˏ*(P8&#;LKfIAgI5p$/Ba4\+͝ف۔9U|5l73N[d+[z2*qVU8W&TV?.QVfWEJ?(їݬX%*(wxѽRRۯ_~U^{N V4֘荦4 NK-9Ayfo~Xi3#lWΖwW{+& ~NClOH^ kh֕ZK%W=I|*DqXo4lݑfuyqZw>F Boe[o ax5J:3,U1?2} I_mrۺ:icC! :)}aPOlLcٮc#v%!kMin X44]d!J%_Cg_9ۨl;lOz'=e U{gS^Om3FC[?HRV) b%1&úď٫/4 _uq]:=[/UOlJAUfƧ=O<tTyjOJRKR?}tѐn7ڨY/;&ǪMbjtrKT%vVN}! lLG|pi " Puj>fƪ YRU)>ZVTfА''lبA5h``X5Q0K"'ڢ J_n22s5$M1[66M+}Rv @]X y8T'׵V+h4Oh4)drjz)]g#zmYξ5fQ nl~<6kΌ0dZAߧ& : #2\dGʉ6Z:\թq$ƛ[߲#]KvxΟg_κcd44)?ܐE@u:I' ߂ߋyyy@3,EUI^ $  ?xݥ+)u!)d7@X%=YzۑWJL)U RP.OC`ʝӁ㤵LY6-}hVHPVQJe_='WEq}xZ]#BLU3l2u|rmqqC K-4Δ3gy84wT'p"igq:q7g8eDoJI,&*fz-?AI/.llpO .su갈˼<#0IV4CexTۇEXq N(P\Du9.sd%ld7@pw]CB hok>ͧky}sբ?Sk|n4~x*njwx5Ǭo3$lw=I4EEK~]^ hBr\,EV 5]IIys~hˋlw3t4ʭ"9 ۦV^rDnI_Y)ލ{rY}n>O.ZV@sHsߵцi˾r4Ŵ\ad|a<yw]bPi/v$zc$ln~"$&![]ȏ|hlxܕQe6s &Ef¿Sh4MaOֵaZz\'^dW:󃸑 RYz+݂iwvz P!i/;+h DX/s3P$1`#ʮ={4甅vɭyir”QQ(-6J%rɠ'~]K~`R|ܾ,E[ {͔R]4oNfNg-:uvu2`S;+"gg/wM)#6q:a- .6#~z2 gXyS'U]՜V˻HےsͲ6ҐRg0;-v{?'ue чL#QnCP/UCKq[N&ZqZEc}Эd'ӗ\U9˪d: ~%JRq9a3uW2`:|kxm!}pmCd_3"wY qx`kJ߅zd,q6s᠆go,ʐm8 mObxC{ܜ zpe1%9\n1h')t;j:-buefz$SM *RsΨ16TQ0|ҫ)IeѲ:2hMw'bӃu:`h?(^KS.*_pC( hO֭QLSQVB' W CJ r!`SF!_-Zn6M;ZbcKNoi} ~@eпQ~JcbYx=!m g("ڌKs#6:1=[&OMfs?e7ń蚀3^v\Q VU_WuOѥ)VJKHɮJnL##O%%$kRNKzˢ"V~._LiO"xBe)_TZ"qsp3t9T=qIZCle4` ~IeKZٵݟ1PΘ+[Hv+)aaYqys1NU>'zF('D5\L_B9)PP6(iƇ]=<:LTr6r(eƁK,'߼s/$ZGh Z3vqXO5hgLG~"~_`xLbP)45.>7˴K(a,,20"7;\n˺izaX0\Wq)."<^D(2Dėi~ 'ef0~Gȝm}+aumEy|Ri\ќS o*UvU.Ik$k(ie>2m ;?i=G>JϹ欈}K6GMCQa+CAQS)qiCR dft ](}w-^m#<ϗ7 .[- } "ru};*%8-}TߡW p>VW~2"5-Js(~87.t (/[HȓٰKvKxըesq% ŽUTxqH[d:p)۝1{{ YDA--3t"VpY|c:j.r&x`)NM҃ vbYTR;?6d&[2up*дWȕRKP(H`U:r-I+ۦͨݞ@M!(/sdnP}tG> (=E#Vݰ=ޭs_ w1>ޙ];Hc3(fZ<(]>w3+Ō]]mw*6mvɼ1XNe9?穩FRIqXOdRؘL>H>U+T}~HOVImYH+'nt㵱} Yb)6=M!}.)%S4њT ]" Sw oװTd=wSa d%!9y]s^cYެWrb#'Vr΂SGlsL56%O\Mj%eXiF9H5[L.cJ:epT#i|3^r`:+߫خ:4P!^Ll%8I']^w#Xw4nO.)X&?1]4'~{h#dK(,l}4V]21>vH]1Ũŷ)T9F,ZÄmi.@ѳR050)G&j+n:-˶u[q[:'igjy. l,V6uԈ viF3 p\ Owؑ#'ң@#~ "!Aaԧ_6 &icp7 y، ;55:9,M +Vʯʽg2R*+uj:0µmgUX2BG"۸֩TnyK+-^dyj˻ۄOVA^d#1Ѕ%u gr2SzA;<~&05!6œ"fv0OXÍYAٙ3;``b)ͭL*R:CQgn* uJUSg ?Zz?h\ )e*T`JjOz:i6= %mbmഺN u f7C3%Z@6(${>xF ]y~]N;j(ND&?A1zZo j>(4;Zfkī>瑸{ 9ۈin%|\(#;{l;v${yP*rJJ|)nTvi~YUvɴ{ts7YXDzk(,{b/G9I#m>dSfqϠwR+z?Lv$l Q}Vb(#B薶L6@>mQ]N<*#Щj4A2AQs ӎY , e ]mx:z D ~5)TwLj#uCu;.U;J3̴HcWGz TwL:=ȔW m;1Hדϕ ΃a|x_?eO=yBhYNT_dYՉU U Xng9B'q]iΚg9f!E>(AyA>4G\lB44gb)e+,ҚcN)ܷR+S?zʅ9*R_ +c3(.VHO$6lQn.5$ }-|d0 #Q5e䎛k ‚@sW2YLP}R34"A9eMb||v4޿98;;IMs:BzwJ?$ mM7lcJ2 _b+벬ޒִtʱ`3Ol1>EhTI#,d[L}JWPɗ o4G=wnvݷ?s\:l,ee ;Qh3Q[/q5$rUK{Ou2NF?R2\LsCmtQ0/5{@Yhw#jn5C&>2Jh[Y꒺BㄆvMN%&` *D"Kգ$XJZ6%F`s]Nњ/AJJ\M]3]\]D[_>-rb+aAx&A j@4KA-tFj]HՆmE7dO'+ c[?o:)D"*;^_0ߍ `9H#iL"gh i_A> _7M|)XF$? 2;nnbi?'Fɋ F9n0&r>ľP)@_NںfWuEKNci bDqMZ%,%]( ڼVfJAƸCm!TBO~ξ+h-НhK9aeL][ z%lLM # +6U⢀8 vGsD|ei3j[&{rߩj#~-rH2r;I_Ĺ 6T}h+I~R?xj)7 =+S?*_Ԭl բw;-c,ecwb.D8Fӻ''D =drbpA1W\UF܀4TRR+B[|"4*He|i\ j8 5;'Kea7: 6C.CHm|U' !&rOx,RtIv027'#SajRV1Q yeXel]]l1<rw`Lagp%USgaqgHAez#O"F㵉Qx+B6x{O&y޻CSMKYο(-ķYM?VG;t8UnU9BMGtڄ1;P/mN(^٬M5sjm-u55\қqnӍ:d56uxiXam^@[lN㭹vÓ${9Y(2aX#;y鮾kH+sNdgs=R_+KOZT8?ifفzMҝd- #h.9}I%%?dRǜu͝]F#~Cl{yfQ3A~>Ԅ0ކ.iʿ(b)o{0Q( _*֯M<ҜԴzL:]B?Ю&`*EK49@[sI0]/ ُґb|`w SbaТcK˞z^ESPmmEXaBᅴS-_TA-".z'Mu8S]'nm-UJ38p' 1ד-ɬsz$oHRpQ3%RkTc0K<(=\*7 q.(?

]M[`K`t>QO4|Ǒ)c#Z}ܙcc7^[VKHUG}P=/nl~YBCCFI=)v[H*u&:'NoG5E&쎹;󬜻ge###Uv%MZQ2o3q tVt5YkQWFH\'#ZiIn +&I]XgL5Χ(rk,zb=z5LN?ڂ=2WddjωO ޤeQ!hT/ ѻ*{NІץ OΙ:7r]Ub96WOd>9=7f~1*ՈmI/K7Hs3ZEkS!}#'L`K&f3A})5w{SO&a_vhMh<%S҇4]Pbˀ W1=rr\!ܭ$;]&P|i4ᖕGIeEЬ\!h]1fo^p-s3B#PfQj:N;t=YY:h.ao2&A=ҍgX:,)j="NngM Newpx"ʡJVB7ikwV6zittw;Tܶn=3_ME 5Z+}81{$w5c.u/|$9r-D ;Yq;v^b˼ ގӝB|#BEmHgZPBzs\kucݵp<^Hf;4EA2^5fvV4!^2ǣy˗NNS`4D9-Ҕԉ=,;UCU@Zoc,lM )c mD&=چfw΁s[KDQ"JFi8spWT_Zr"ȅ_<K.jH;Cs78g6`? $(H_̚NQYdy\΋fYLpOAs]f}=VeH# FMA>χ@&WA A*:EryNAe [|ytԮOk6g 𿜉: >昈p~ٻQ?*kG bA 1b֣Rv̋2ȕzE9|ĕLb C!ccC;X^gx?O?>7VL,wLz`tY{SJ w%!@+f۬ƢC9:ժkw } R(N| <&u^O>54hRY]nnF6XE#5lqv*m^&IYEdi+S>//E;fhhQ=&6M~!Pgz JUU-|'XMd[xK٩&)ZRI{΃P<=[Ux4<1ĭVTDХd l.1\L1'Ow|4N6c"dȚhZZ^_KG $fJ?L)GI^Z2IB@YXhy+{\{cgDLw أT*C2hcDU]^;E^GEWENN^ߜbD_ -e;Q.Q #b1m'Nbv^Oŗzގ>Y`K/l&;XxJ8.3d# 欏Lt }84(\>xi' ]L@w\^B2yD7wсO+RסY D;)Po*G]ydcISS^4e ջh?QuiO<~EbTM|Tq*7?{ -0hI0,mTѵb|G #a=U=Ug' "yYº>.8c W8 #V_z>zɥ]P шg n棜d6Ŀ1 'RէY;j9uqc&v8 ,-NXm֊d1}{.v|,M6}Vq3v䩒YΤ "di<a`LtswU{ I5QRXV`!”]d.x 4E dV%?]M]b* wDV"tg=-e*K|K~pTGet[IiQ0= |dnf*&[jqN51 sE wqc1fѴ+C>Ƣ.5I=E绠Ny'Y?랻DMMO$f" ^;q "[Xw *e24]bx^[ي*S.Q.dN7NV8@h`)\ɽ$U{Gn|p32̆Ej5a!$!X ܇#NM/h"O2,y(kX2nC;z*V^_e?g%vښB_ff-v!7b<{=q&8v @~^Vnj{b}#T.Ӹ. |m>/v@ 3W1Z_5f˯4_D~\AIzzxq&=< 5Q.+cVQئ3OSyu3E{zm,O3 ^@Qp֗w)p:N 6ڌNu]aAiIrh=7NY \7bJ:0PmRTxCV+E=l!W[MA3Qj\&#MR#%٬ݿ6f|'xdŏq/9&(w}kfWQB}?z#K6; B;ZNs!d s6uOq!L-d4<Ჰ, ʺ \W= AkxxX-keOE{ؕLGc5z8Ǖ.&/r;E XS yNUՉol(oE#A5N9zx Eꂼ*vr?pO|'N9XJ&Շ(ΊQl' ɚ(-͡+hTC!emT H'{H솨RO?Zʸ^Y_u.JtWhGJ80*K@&jN(j4/9mXUw9|U墦.R~Z[O7|OOt\.Ao՚hjǔ }bpA~#7,^{ z*=ϣsE4 'J2h)Ȗ-N=FM{phm; j'$L7M0N)$>׮"sN}'1&b+6frv|(+j㠄AκEhַ[JJUW5>:M5jLVM,˲?B'C{h nIkgj!YX `o/ z0d}XKY+kgtaFԋb՚9Av0wQ Y(hUn)~xK'\h^WtW7tS 䑜e'P䜑DfͰ7-`j8fIFֻg.8!GxuRsѥRz{7vy[eؘ^]H6 ՜- /EXj2ȯR ͎2<:cHFI#{PX}1}ϲT/DŽг_(n9ɿ=%]$[,cΰNzO)}H7[fT#mb= QzQ=^Hd^2a3s˾ͶCYk~0X'W2ZFJ%6@'anyڜϹb*"6*ZaoLoNפ߳˱G`3ٯ߼==5DGFPL7bݞ+bQ"V\'74э=Z+Bhv-c_Fw!ˠQ1ˣwX݆F|\Xn͸-+EiF4ZSS{\ VdHFQlWZߢ t׉8հn?X&(xwTGF0L&Y ʺKkaoGq0jnEzF)pVG?/V;E^8pMc٬>S=dfmg{Yq!J)|Vp&c`Fs8] g-rt-Ŷ 7jYc8݅"OclvQzޔa"s̮ZMuT dkL4wa.Oj?#ZSG\0hX H.(A;ǣey5)ƴZ]`-ױ9l{'?g; ~fI?gh;]ܩ%_pmXLWA'}1쎦;-ZXcaF\A`*9 b8s,]8b.0<ߨlO&W;e& $wlS~OdRCqM sXJ:ެoA/ܩ0;62?*N^s(b峻0TAIcG`OXMH*H+94ݼ.K$~L{!8-]W|p3LiM2nT6w\I |@D#3=˿ u{H)4ߠ0,ph*(hIeDN!|bjd&ÜQ(L\gIf1YSnbSwG3Zk ڢ| IX\LO Y~-+#nP,<Ӄ 9GlqFgE ;0,l|G#ަ &ZH*=-ʮQc[F?W(n. W|k VW}\fu3)4vx 6ٌz#@Ie ["9̴!c k rv&+f&)QhG_ހ~ s{XV/AwdƶXEg*Wl%w;^7<\`p8Sy^A)<)*] Lmoa^,zhcLYw:]窣? '*Vt:yE>XXB|$-rӫ(Ucʜe/nv'X\iL䭝g +wo0 ]궜IehjiVސ'M鋽n%{zjNz_C!ǁ[ۧў*Whϓ7*7l4qʙ N y4iiˣE ʻ8uy"9 Ǻg,4tQX@#ncT|Y/{:_@{a@622@Z Gh3.S YqSDae8CV1E":+Ϡ 8ΰR@xW9 Gf@{PeFڔO2~.x f^k-,\H2t6aoWx%8/u6]+Ƽ/ap:-KlƟ_o2uDV*t >YD+w(b$?&O8A\ٍGrYxrk61s3ADlpcZ%X:l3w9s6vpFͯcDw/&ЍF^oNgDV:oƆۥL0+(=\K S 񷸊^%Ք?<5 ůod&ͅ#ͮOAY_%OpUuJ8?SF(C O*;)̘Pުfʌ*GvbkctZ?̔ϝͫң2cHce(2rb})AOѐn[}.-Sf$DN+24d&xTnDrVz9VI&*>E5U^hNDn8?S=41/ ! `_O6# (ރ4?mnp WЀњDq;S Y؏I*iLhxr}.^qp#7B#Cah>ͫĪ;Pt?bx y^OWUC&Q(LQQv\ F Û"dN~)L:?Q[ͫv3~ X%m%;/ F1ZnPѸEƊp琕v? "?2Zn9} ="MCǂX`m c3Ёx2ݏ.\INH!-y, WJSt;mהnhY!<…^,uEo-VՔGݛԝݕsŷȜhFSsМEUci0@ރ46ʋ~樍~vWnI$}'r#\,aglW6:NĮKZ'e71Z=*g wA^r*}u"#nZJ0Nl+T({YeW Ieu>Z}aI{i0 E #S ?o71X9ȓA}bļbRH)Ok}VGCpyŲ77Xe݋I`H:1U>qzATVi]wKһ>L3d7EG8'Ɠ]F 6F"C!7DU|z3г&A` ՜5@-UvS>]|5Zw9u\o{S]HӵsZedQ8ᝩ{R$^ I2,2/{8t{ÚjmS6c6۶mK6^x7gޓټ!Odž~m">L-y w'3*5=Q,hJv9qX Kgg*F2kyϳ#rJBPPtm-v(ݙz||kzWkVL֙TDg̍7GTTbS]*i0lu^+ȯ}at<^ITx_H޲1;zhqat*+ܔo'"!V6*wc6tD`%$FN ¨OJG@1eD7+34o.p3CpW&RVU<`I6 T>;1mD o&J9LuoZA"*J^K qz͹k;Frh5RYS)WT@~,HħWfT"8:A /=YwJf -^lHβcVgM(Ӿɾ[_s&g:J>g5.ΞUlНv$V MaYBɁ9 ru]mI7R95\|f5N[ί ֚Hi!3f*@?gZ/bYCB r2}_ |B2^h М{hWmf+-"Z9iEdzmք=Z5"Cr,0d6g")T k)Y Ob G ;}w)m|P9EXjO<'Kx\:#EɍˋU9u/F`_ToA=&F[Y>@ab}7^^Jⶴ\,o跮U˞ni_:*"|FެW;U%xmKjʾƓ`-zW`7eti>k]}O^'rv+B_pC;fNħЯJS:g$#$Vf"xl^b):ǯeIJhT%@dvI:)Edy@2 t}hU^,vR~ɧ]Bu>EB~Ej8|p=Ji#l"[P9ERlb7rb*>" dR{[HyS)+_a_mHq^;)=eJ'ԁggt)b8(>5zAyWܝ,X_rHmRby{̘)ҳF?yGƖP/Tj|KV]̷*1IVO庖]!/DwJ( /Uvk)-NTlAפѰU-2>#bithKq0 qn#اa^Xb.:^N S`&!Mߠ,:C9ӁlYE0,% k@`->aJڅ?Q|D^ |vC)_tXz3ԉ `)aX>f 3 }p=.6Is<֖*X$ 69{E!/. bF!dk⢢>C4z,wEJu[9/rgT+܂R[3&m@5' ķqmJcmar5a.u,,m-'%HR6_7 UfP<* Wڝ;(1+65[C \龦ӛ;O;|`:>>VQxW:Q<MBPޗ IK!tBNԴG#}ux>PE~, ;}d=W\G_6{pX%-XgBU9lv0_s؉]mPPz:MjR jBRooG*b׉Rs]ە,%u[ZT-x c|z:T|RyRl 9E>_}>*\ƨ=p:rh(`Ug~s f2 7XI<.7|M g"\h\WZvAj%*֚{r,J{7˒r;_ |'䞤/zU่;= >#?c):93cWxDV$""6y \-# pzt v6oYo4 V%oc=\EfVQԀOl}x'񏍬Dz\! QדC7<싃:ZCO /]Pl2ν2ʯs1=F"gZخXɋ_ ~7"S8YʬifU#]8T9l5GMĆQ_f\^cmXK ɤ͐oE`" Z׹raphmp[԰v ;:i͐+X+&RկF:>hė'Ԟ.2  7;t~I)E;+:r˱VJf!s5X= {_d5= 6upP3T0dEApZG> 70 `9[JO Ay${uUj0懫;'Phֆd':sY뜶C.mzCC3ǘo -?0;=/ ̫3jnvqnH& ߰$߂,o!i[σ;/@)ʼQz|QF񨏳en$y~B:?Y̠;*h3*[N%mXQxӚ14HL S;RIJ>'(ZOe R+'X6G|zy5sJ9MQEPB sc5k``kג*pZMZדV3KI=ٚFZ> g1?뿬I"'HEiBj>w4Fa)EV~~ɚ?("XH+ VRf߃]#zQ'NIµ2oHa4SI,:YSvyoX5فڡ\rIWGS2TG:E9zLvD</t ^Xҹ_ۜd?q+HPX896_N[墜TUJ%#Dl'H 5fsXF-!.k ?<H \@ LNOQyHyQ ,*/X9 *E#&|nVDCx >:_x[xZ|X1Mv#_($^ 'k}r\PGG_~z *G^0ϮYaT&8e 䁯o7]1o6/=HW]jM:z7 OpB?մ[͋N'd6+:(ZMqA?9-OP( )U<^=^6]͉-HK^.%-h4 &{z(˔!_pHߘ+`=I x}U|+o!9"tX+6"HhkwS1rEL [o=QTz˗,MNGuuπi4]6MHcyt/iF[7Ay4tINJ sD BvP.i5zy&Oƹd5фNj"U99X` /%6)Xp/Zx&zr UpFN 2OrGyu&[8=ͷW[P(x3ݬ/SdZHDR\#a>B)uvP0 W&M/-v=<%pR׵]>'1Xy IDAT-R7 ۤ\ J-OM\jiS.pbe'j;ZC?TaslsZ6Ü[R_0IzB,tt!1L6NInJiؓ`(O[:r~*Q#avO*;Tye\1+~e58ÍzVA瓁rN:ХMX|wQN+GxH^wE6t$H7=6vME:I cRN*ިc?ΪbMXkS (EHy;ԅ6 <i )nNx0څ;#Bsr 2J.g/_Q*y ɯ@*Q(t@Y@a3:DgZkKX$̰vW ]J,@ ?pkytr#ja#FuD5 CL9a%lWt1Cb '9M6tNsG1Y”Vy+z2]Ҟ8G&"#5[2 h\j %)RHoP>C{`YS!vI7u]Xu Qр;WTw>4n¶߀JyA_ Y)Z'* %lCqvmd; j"\,m`5-X gwF`<쬔_.U;K*a~^Zm2h M$Q~7ͫgߴb=PWf'[ou:Qx ;b7W9Q2NFJi 'I/p:I#z}UQJBWY֑dbްkjyM#Ռu3fI3WS.eH3| dXXXeqy4ܷ%xyfN__IdR}UIN`)"Y 4-l-m45*PK-,v:]nDp9Nw ~OGqnڑ$FVȴii;6LJDmoway@ѕ8ݻ8o9P}ra*Ójr@ ˢ1ERY.tU& :sw}(b;v B?^׬i7#]_Jsygja˦xd&\'9G9Sa߁+acڴ=ۑY$=Ʈ:'uYZ ܓԝ ӇI+} &{3 c[{7|J )-a 9~W(D"w?䚕vmci4,H샗^ f] rl Ƌ3>[yaE]Y鱩 {2P 4?My+F) pTA I@I̶NlecpiS@{>*sO\C^[e\9K,+){=+?kuX3 `flNub'ףtT }EH\DP"BWD |f5̇otOM`%Ei5ah%_>F>>D"/*DvՏ9)g]ޡ9#R f%h0E7ElFxYIo8yǝ!orzQZ5s?RXZNJ8J} (oWNUO4|fACU;݊֩K ˸ekC`NUjK juNY~yVU} ZžP9ߝiC1dY}y:^|K kTVNf&.^i/BмXk@%i9#2h tpm7+9s4SܻC-\RZ5kz*g\-䚧$9ENx06S`Kp7qIָo/?H*||(z R^O\eE4q^8m왓!'lW6f. `zǫ>x+kͦkbgٝJp$7)Ԡ_-]:iW2pdgyI$ T )[t+35\" _tW.2uW ZW$һی<.=O@:^Gd3rR1wS^Ȗ8mώOjgޑJ+o n '.ŊQl_b ;2(uH օ/HS*93Eg%⣫r~Jd rz"p6n rFecD4̞\usD[4}T"E!CuM3A5EI^n3UXPxK/)nkS>W,^hTZJ!na2i^:V"_Fx3l)iJP F;OD4A4|"hI9Uc|>btW~AV Ekzvtdsz-Sv!o̊r)V.lnY5N^䝟cܪ7D`Kbp[,[DE_P\?c6 }t W蓑t%o:;>F@M+(Dh`Wav ^2cSqxξ#ځ_=."ow̥mQv4. Œ ԖK+edunPmkҷҞp~("gyFGp/r6cS2O29OyZGrзyq oME|eeA]q<.H=tҗۭY޽Q=ìHc=IOqV,BR .AOdǓx ՕH- NM2C8͆%]S>$C#.3vgNg8橙2z?NqUM'{,*mm^n`*p|voY1xARI`]!W /$/r#i*FSPEsA/{8 Æ{two+2>ڝx)r᙮.Ey q?XމgS $vl+7 l=>Jyˇ1RVsp[ץ-<. jipmZɇY1f,ɶb< 0 &m \A7b}HOr@>f}a9Yh"m|A$m:}(2Lj}ntxU*.~){eS}O])”Gjkt Y%= 6[|?1~\7+ۛCFPGZ lQ:^mԣ897^ SPK-|[\vO 5e2^qꈐ4M!1(U'2s*{ZyGK?vfqh(Vl7)K*wmm+.,0 p xoP׮1z=[@驻M_UpAk8Zq!\[VKS]J}9\ `]"c%` HI=9ܦ7hR+in`" 5,mJ,4KċEZqxW Ai(7\]#Nq^Dy54g;a K%aw08`|}b;6HLџOc:BϓJ2оſ?.i3'ΤSHm|9n~*֑ G0gAwXihgف+li I 0^MI<78#*]VoayQ(ո+à18,~՝kH7*Om$Hi/4c4>.U3M-kn>=!ʿdb3B6P`u7'` j彯 ە7Q,"=|u0qoxC9 C'RoN^"t'HǓ=MFy|d$) 񾇼!֠"6Po[8 7;K2w_6u2]l'Y)}cDLBd,gӲA :SR"ȊN21Mur <ªm zFטtT|^U2C>㊱'I9FY^}^ޗqzP+&G(Mi~1xe`8 3oeA_L&^g*np']R$.*.Z m?i _5 O,x`Γ(K5VO8bjfec]Ĝmv'-͎[ުt3LBHC4|)>T;]}`6jv&w(?=- ']f6ڹBJE'FiI#r:?OMXMt'.yhVb4\oWLE/s8ۛy:Zot?T>M>ewtP>PM6Ҭ5`2[& "'Db_Y4d@$:dYmxr{F: f,6:5Vo*&TqU#;+V,F5l+/N[#1f_rğ1h  x'hC,S)➠,g֬/>&7L4] '$rA.F'2>/_r֞E4a;yt8J >2c/g#Q9fScv:{YV&="x?n(`2 *5"*BJ/- 2\tâ%|C|uhՍ6L 3nRdaz "^s<dO>TB705/omޖO'qR$ڔT\IϏ<[FW@V( O8I/}ZQmy: JJcDY UEdOGQ.'yPIeFGFd (ltv wZ$4h}+5^[ ު}L1wM0ڹKmvR͜z..4_FJM{)` 1?I>1N?XiDZf[1fu7(Zc;^WN"KƑ"ø_ەȨw>{G MOrG;?h+&ͭHdȼ=L#PGĽ_R/]C)<"}Dq>˝O\I輻;EEN˫V jݎY'I a< #i{T#PrK\sh WOA#頝qa'H!ef]LUoaRS">d0̜t$J̈+o:U(˘`;o:WbyK@D g 5cNc0 Ted/Yͮ' ]F0!yx,}U>kR"9 ߒ,Bő碂 |`3~1Ǡuk$䚎p7,i%B匁eAl}iQ )at 2QsUyH&ȺB#@NP3'xCVCġ 0eprA 8(Չaf&g3% ?V^D+[Q!O}wr1+$e")9l$\uBw×d')Uu ҉Vrȵs!J"dgCwG o,+Rgh4ռt>ئe#M++<~*7ʼPNg/fpS\ )hZ$Åྼ)9xHlaBd.Pzjo0'vάfߖEعN/͗Z`o+Y=Һkx*k e`<% eyiKwM)nIvQ{??LNVNNL2EVEW_fi#$+ cEu(,-5Gjy;<LMъކ /DNGO!/l/perQUMì\moo $OUڈG=̄B[-Rd|2?έA&[!/b/U6T쇅|o0a]ޡgX$:'Š3nZfX}U`}F4ܚeAo+3KyhqN< vi_!1rގ.YfX_esQj ]l Ù#[$5eM5Mc[o1Yh3ہ^~F x-VbGxWox+ T@@Cu~ܖ@Z*]x/n켟[r/Kp8Nť;ok=[oSx@`cneb<(l]'9Iid cfCe`3[lsM#̼Ü.VM|Uj͑<5֘'X2)V;竴]l2RĠ7E+je xYj-^5rB)ٍ8ZS7/Q65|=M{} M ,k!+$w})!ݫ#A}a{$J y]q: ,g~cD<}oFL?InG8υ:7>: r},}e4 .N%Go<`@%os(."ʰ2'B^hAuYc#Z~PM}q\CnYjj~Wo֨y x.\$ng3vðH˟um5CYSoWp-COFbq>e+Vt&| OFB K)W-<#lGmV˖8&&PiR~fL&ZjX ?Wmhxgp(M{s&<%_p\ @tIV[y"p~L9Wa*[ݫux#J|XT 6\g-*M \*FhQ/QJR`<+},^q@6r:eQۜnoa10Yh,"rqot F|IÚu Ei5Ht!` v0cS d3˻2feK`<Okx6q G]XY= r#%tMBIr%,y9Nf+XMr5xCHDŧES=`1?+/=ً@7 DaSM4c簺[EnD+nvZެY@ }Dj6/'+.Tyg#/] =j6TjB*_)-I{%ɿ7%`9[v"wͪEҼ;sŬ[For۽q)(_}oLwrNRaGfw!mP_JX]qit\ZQtE[c-B$}<,M!fLpiogE啫yhJ5"*k8+WYE3h$b;dE-̥F)3.7O Qδ3<wJ&KNu.T'Ӵ,.~pW%xYGZ&ޟhdG}}ZWP!QF {el#zZT U+{%^#\tPoy.79??zQsMQ;lv#+?g_q~X.4PKjk޲^XM]+.FkEMw@>{zS 2*0Rտ ى.QH=o]Lm-7zSLcL7_uĨ&wcgl;Sj55]=YkF@9؊WqY9ﯳ ?zmGd]8+MM@X]`:DoA]8u]ݎC+Zf ^; 09_ÌG@{S,2T=Cg pVr-K! yMY͠iLA(nF> EL7d%ud]A-j2 < [dLa#8LS'-v-s(S.4:?}@ *je}GgPE%}ɸf=Lvp _g<3/.70QQ6C$]]X^V 26o' >O<(06s(~k&2&lYHw;o3l+psRquԎFȶ[Νe8sq/d^ iSL+p?NHN.M.0b,.-ʒ^ة6P9iCN0 B)`>Fb8Ͼ,y|@),)[Om֨9K'yr+ e_=G'Ӧ;^hͰ/U6$񔔦!ڑ`@sp =KbDBV}R_\NtQyġ,Nn~i4ɔ!phmU}"՜,'NڳorLnV6UurOH4r`^;Z( Ws#i+݈5ؗ41_en}=%3r\ _abX֮6iG<˔V,aX.^c +xZ)n` +C^5kpOr%X+&FgXQxtJa5 +&>+3&;VFB|$ 4>+{;دo\TƏp<9 [/fMq(n] S- cm vD9OSQO%RZyQ3R ^B#I|&od9?(͵dP|(lGqPe*AXԐbf^Zm_2'Ѡba(Y[iTA;krva j909[d{®o9Ūb7-P'/Uu0il4&'"fyeCeb;$AuN+e%GW_g1tB*P=QW:\r/i(F.hnr IwU\/Ύ}y4}=3*;+5dHzt0]qKeJ EMb/mDb sXɬȯWH|vCyM/Le_a smKMFFr?3DDYo#B* U| 14TG.נ0Zy+bO N r&8Z >}8SV\|ɞ[ZOTg^~`y^DcDw4t6b Cp1/K;ǡ.+^:EהJg60pg~g ќ6LD+H_oP-(}޾x }`,>^8vrI<>t&Ppn޳X/mKʳ`&? D~NuPu0fE5<2ѹfˍq WH^lωYXQWoPiJ_ Ig Osz/$ _y޾Bwdr\&]FᓃSs.y#%cvMcaweۦD/z5XOĈ\vi큳 t7z/4=T&Ԑ7@WI#NIMq БTdYgޱVt,X<%vÜ/Z9C.uqاnsvlhkl,Pn/˾VqE 0 m#eߑ2ʠ63]Wa9$h/Deb%,bauAoW2 TNk8 a]9oe 4#pqԇH}cπX6Xo˂,/1 ?Q`2'c0^/e[G]GͦͿ6.DE0[dU\տZ\;bF:*vAvVU(/Ww: gPCԋzXK '2nnVG- vқB_Ѽ}fHC rY''VY34l LzyHP~'ە?kRz$kr{DC:Tt=x0,j;E"KSJ(WBCDEmMWi@:ބٚ4N%qgP Ձ +qa'B`'xZFe. 'Dq< օpL,%j'j2zC"5GDBES5(}BVC뙨(Ih1/C ϼ{hI(m\栤 'YyN8ڕT!| =1J[!O쿇?QH35ҕUG5Cè~r3IډOp.?Ljx=L)Gn)uR|#^ ;xZ)Z(PjȽ~I8NKaDNmD%,v!总 s![# m d:*Q(y@*g@S/]x{3 焿p[]*}I)ur&df{X=+Q{C:w eoӭ޹Y$8 +r "yRjFַX(:(::a|" |' &^_2QVOY*约o 7l" a/a,>Ot Wp7[򢈐`u0@)dVv&Ԓ ?d٭T-X-shT@.x/RLX\z̓MWh,\,N5AUph3H?aYc}&V/Pl[ Q@[Ax[lZ-Q¥Վ=<<X–3߹V'+p~|?hm?Mp!~df/^ 9c{Gw%\ F1"ٓk%\G{nJN,$xIS>@]M3_0~FhTGTU-@Y)|hUW<2䄅~f-"þ]ϿkmC<\a'Q/x5˚tS~oW~DN2V ǭ s MV9y؁Yn~êg ?b3dl ,'B)U7h%@`UyCKFlG?>~λ]*;2OODvQoŖWn,2|&ٯ+ 37Kdxlt>r"w6.Z77AbM*c0ة ~t0Ҟupu&i,fƻ@4gyBxEMJ\y/CQߣmh- I;h6rzpV,`)R^&+yjF>9[*OT}%n Ij~Gۼjp~,̛8MV({9.M8MQ6)\8,ъ;?(^U \h3 }7|3o{|B%+K8-]$Qu#Mݤ2k ;fÒꛆt24, ^FS ph#Mٌ6pz6RBX-]ݝZN'3۳)b0Oie1Jƹ)K`A] 9jxMטg YB#2V=vZvQD!_7ILrD9\N~)_ʀ0-gX1/Єt IjAe#:KY_q*V] +1t XoĘ/@cp*Zw2@%pZ.4pEfTĂ%r,ػSakǨw~ƧDFbF? *#v,Ѝ)I(WL!"DFZ`D.- n /pD#eitë ȉny䬚CEKɭ0n1أ@cQQ&n{G~)@k|i1mtef N9Ky#nŢߎy氹}/Y1HwV 2|.-f5̛1UȞ([_x0 ߑ΢<"dc IPe=_% xGv 8 0 j>$9<rx#LvÊ[5T 4Ba8.";dJl`dg3IN 4OitT*i+ȏj?OI_RYbpG렔rTVcT"獬}vOq(wV)`{(P< tH:~E"/iUsYs? =)}aQABk%8%Z͒f9Tm@=&keh- /y|nv ${OU:\_\W[ڠ%2h'A0`Ep{ 솿AQfp^5Gfy0&t >פ$ni<'kBP| yTA=`PƐ:YK>Wݲæ{Ɔ—bpCfd 8Qք'D1NOdАMY#!Fp0&cI`Ԍ Ʈ:(Gwe& f7σ դi"/ЅKv(Jh២/"2XEb]_?Fq!o1*{H/A|fԦ*>H:Esى {g:eǵA 4 v?B gTS(}ÝDIv͒A.w |on|M>9~90_\ Cia_0sh\{s%ۊ(P rT(E f\Nf#ⅈc@z\M0t@eO^ (`h骪c.Do=EeJ>±S(z!}Zy@_i @J\|O. &0aC|6qt,հ))X}` :f4 Yl7J}Mx#{u7Ir7 ]>m \/h~R</l)P4|EbU8-zLq *LǓJ @*@ZI# ܵkjqͼkէЦNfN <c^@ḫTq =WCHPnxİ:F'qOx=Q@ii];jLV?dUБRky\ QԼ7Y'>%xx.>+Q/c$?lmd +a: w:5{r Ÿ75mgHoݙ#d2[*SOk? 1 H6/dIx񈺕yѿ ^~13OAM+ T\ u!Er(KUd*߭# 2⻦F 5 %L|$oA;&% ֒׃TZ$yv-bXP/4n'vc'~+TL~NJEp\)O+O5a+0>&"h`7l^]A+!O>vJm1_kWtꭍWiiVzÿ`c;P9C)8'Fu)Zkerr8F |_vus{+ɡj$ my7B|}ׇU"dmxF\ Om =l9ǀ<*!O}d ae7pr/uNATN%Hg0'6tQYSOW@_xgW[̚byX:\V潴Jphd'ႻDwXs DaddXo b"$0JA)Y-/rf!?zlY~L:*Xh̏V3S3΀EJ;( {`+Z&18b@+AFÓxLP Gr%~nrMa 8GqޕIV_tOt6 ¿QWh&ʣBJ:LC9~JĂ VA:E3_m~#x ]Z7uj={e-y5AeX 8Y]5S-%/:vx.ׂ=8R{|cDċh s9"q3!=_p~, . 80 NYxvrU1$ep^3cF+%Yq+t\ 1*qAOY2zGzV nr`\=3TK[ u!,h/Y {#i|%%nZTK􏳜NQSYTFZЁ*m#@`rW= uJDMe[c2zr(Mۡ}&k.$[}2NGGғ*v=-=Xve_K>lX8Ĝ{π+^cVX1We+iq _aqH&Zmҫ8<'[.%;!=/_/]FYЙ7\^Hrh1 5 ='{&҈~ӌX%ד㲑؁V^MCT%rgC8F`dz"3F>mZ`eV6Wt'G ^]-rP ge]牳(=ʵҖNyxP 1=Vg5@6v;^3iN3Q<:ƪV39q*me mbqce'8GBicL]C_y?2wP|3TcSBJ,?N&r8LlK$à;/A+sPMXE{=bY{-N&lF>bX zR~A IvCr!(ʉ!n5|65K@ m. EEdb\Ț1ms>Qi=EL{#qPFPDOXbf!H}.ژoyM=r?mә?wN z8<.vLrha$i?M⫉ V*qX -'YJ|4;:?qQ<DPl]$3~t>2Yz*< <]욀]?C0 D+a oB;L#!UW3Yq:GKaI EϞSC]b,MBmv3ܬ-eCr[D](SIJQg3W6S#q\3pN0X38jap!?024zE"v9IiRzCnEKC JuzFş+FM/H﨨la3]]]G[)]2yno٪p:ZN2OpMvP#b?6x +r bSeRte}_am5W)mXc3ʙՋŶߞOqE4wWWg0^I`9xN8^ìD|dbI#Õ`y $j/ـ#^)%XADk<童KwX+rBh= ١._ IDATcG<:}2,LWn&:R?#f8ϷKVRVSv7 {=-FWT6ffyC"i:U" LV Ep;qK|m@Ԗxl{9eL@Ay10`ZtB|u _b* :-n:>\E+h l =c[h(f(,/ L#Q)-zSy )|p>YEɞ1c7FmCUrg:"ˠ Iw~9\2/[Yw/ɧ{5zlhޡ87i0NV QMǒy{x1V3ک3E.䍻x 2Tɜ0|DL̸Z;z`_A":v3wަi[o/R͢Rxd $J.:]x:mYyI5Y:M%XBr99#OX]2F;t"rxGOnIY ^9\Xn0o(Ud C eJ=&}aCeQ2êk=̝Ȥ;J'nc)5g;ޒ3Xl#:4Bx6uӭ Ē }ؤ3%$sus'9mՀ,plK2MYP 2T (!0tzMW6IT[|D48gp'Jr X%UlL|_yp9=2%bSNwWX1*䫸)*ڹ+$NoX7լs@i@>"S"FFir{޾fyy:gp'a&C ~7M6@;(ba(*?28E})O꿔w@ܹg/؛f0nh҇^$^y rGcm̉_h]!H^SqFXE%o"xCN;.P*N˹J8TGVlGlRNf͂3뱬({̤~nJC&߱&)}3Ǯe`gӏ$6u+h!FDBQDOt1-I]:be@:n(-{=\l0d5d<.'8 [`O9^l8YV yI;lMGdmJމQ#[!3IyN:XMŷ9m1<ϫ?6ly ߵ2_s"cWYMy7!J:~oAY->X  2Uksp~jO8E!A6 7tY%|؋fq5#!$nq;t@uJr R fl(; $./9`2m=C^S W]?OC Mavs7&{H}-?dR(V#BnU)RYA66tMc.^(Ru-gI#v5qdr}35NAzCjL'%|9<[NIf\ĦwX]v !&-P,r).|'^DkI|NA1\B2]>^a1ķ#r$$0!{+) Bs^[i s=~n-4B#WisIҲwdq.>HqXi@uY\}@h8t?UQބwd\gG;=KΑ9>/aj, {BugQ8EQ/fd6QC7 e8Fa+/_< "'@30\hqgBaTdsf@gLWk*D/ Ƚ|6v/9ӿŞ[NV!Ru8p)GPMŏx.{ZRf;YyV.ԭLWW)DvH5qHkg'KHDƐ~ %8 w)C%7lj^r)N:FٍS 1+V60vu[eKdD)B]_%_2#\ﮧ>3! b.Ƥ 㾠>6D&ղ@Y5/f1~d&oD3nɞt$'>KSx{7,:n kTj$v] )jnx,:{f5^oSjꈰl6HÍ|fmne'(>ۻ|g-~a(xo1ĉrjׄ!ۍXܡY<uE9."VMՎ8%!bjR>$zVf]Ұ'rLw|rLg%!R *g[UXՌƳ}.P̐FuKwƦ?{/f)Rk[ocޗYӮ&W >vqەFFPD}Ddh;kdPOʡ+T=4WhDHzXav rxLRn_!XDUO{2#_A:b2"uHlC CZ*#3ʐ]n4M4JQF! rCy7޹OPcp*pi=1H3e^T@1xa')%:RsG5k^G9^Q:k7"B\"gLÌhg L=&)YjtH+1|FԲ(wxȚi6rG(eX[bY5Oi״{Ҫ )Ofkiz#Ce|OkqF6VWq?AXn2ߩ=.- ;BT%6-*yP421x+0-j'Q k-. /_6\s:yrj&k/ __e1X-Յ4~q;!6f32J;^ؓݥwzD\[I71&pYa)CLr^LsRTxcd <ߠ=tXC@uM YfQo[E(ɊP6Njf"!YMc8%7'FI:+re%7s5wk/MvX>۸f;_Dη].iI3҉*._J fe,ǒIi|\SXIe7]..xPŒܲ0n%;C> Ije7l䝼T 4L ݜs=99V 䪱B$]ekwqZu0 4Bn59ك3u1JXp(VxHEY\e 41*T! Q, d563*Of/Dd7)S1;&'sF)ia/8*k6A_ lXN {YLpK=r]6 NB<4[QP'h/)ކv "`Sr%kƸswQioCk=*uCL:xשׁ^#:imJ׭;"4Dʯcd/dl- K8RxTrM©7᪸ 2Vr\{eq߇Nr!*>b +e|A扵"/I+p eH= q?yB:+tyZ3#jC~BY-DsQKì (3Cހ%E?a5Y97"9S?d".g>#xJ*r+K Gbh3#.K׸EIw>Yh:Vf\ Q*r-v IX7̒D6'{oHEް4,$? U iFyx~BħxM[ch*U(.% 'u9v}X(ES8Qz~H|HZ:Kȩ;zbIQv婐b'PO8XP*sfqқ6{Y꘠X)"!.6NGKB3Eɿ0-7*zYoꤊyDA "JMR irWd*Ԓ?qڅؿ4 "%g?Sx*9ubxZ"^|ęFss)aMDaO[8ۼ Li7&õtmi%tI3V[e*^BNjQy]ȼr=ɖ`:9&TT^FKbysQН ?7]\XkjfO5FMX L} ALWQ?z3QyΤe$5c*//Y^Jުq3]/}RD;jTh`RҪV̳lC]n,W'M}}XB?Szswг{(~,|_`Z$l#9 jt<{LȒ8&-ʻ*ՌXH,/L,ֻ&+^e0$6QRҙ2h63wb _4o|<+X:f"̙ųb2lh*c(`_jOx@nSq|Cvȵdh'4?wz.,_ld%j2J8I;筒$$4VN3K;Lsۻ=}Aԉ]HF^*؆ַN*+ tO{(X;%M;]أtrHt6T' mcC(I9fEq ܐ'Da?p}y@Xq~[J-Y,?[LhC*hh]Qs{!RK%_< 8T'!#`!W#H)B=5\!MJr$euMc)mb̂3&)r~)$7)McA24e E.@)) FAސ hE& K _Ng{X^QdS]4 4hA7K-Իƥ7߭l#k"/rƿԢ2'͐B%JR< /Qr_nkrK3Ȧl&gNKIYguj3 2I⤓D< {$.LQ!~B5 `gd07)Z-}aufNEMՇJm[4z<,kV9-f-!2?-Vz& t~Cy;75CE[c%ZǙ_pl1f \C`,pH}8M\/aATӍг[RPW v,Vb5|( FGG@9=kLD%"{wrbp?h).Eރd7WV(܆ rޗD'#\猤S-(QߩB`r iX!7{c) /z;j3ye.1-c?N+8X i0GkOn8p(,[|! u_W艧GN^8vIcdF尚U2sj}c=\=; ?Yǒb5 ;t3XS!%]K0XVX J@18X&?8WShm_P,| dJS?e5V6餁,I<ƃ3ys7*#$k;2HoTb(/I |+v.H`=XGX W'fAdHS}+'a ܢt\2$Rꦎ2 3>{N^OY0DԀ9=USA!Co뻔j|h_bo7.O/p{ v2ߑ Ƭ`hPAE IDATzQ6@w$PLcQ|?"$eU3 OG;?fGnJM?H>Ĝko"l qڿNzffEևSC@?v4 =َp5D PfJ ]oyCYH="7b6{Wi}=⡼$.akL-K8!Ʉ鬪?PX'Ox>$Vo @%ng!p \EGXpsA~(!N;YVDʸD΃Pa?5q&.X!RL_0TV1'M2<܇{fс]yD3t dZ, sȕ6f2U9M?z:cm=U*1t3NW׊eX rVEh<쇶$soOA3V{*9B202Uv#ьF+SǍ52UvBKB|=Z^sLOJ+16ǵ+t)M>:X*t(*Ѧ>\BG%g 4M?Q/8-H5j g/u Դ¸W$fz XMx8%*D5**vcWXD*@g$(a! f/3l&#z;(#7- Oc\A] %X16R{e-ͥA{ljXlh Ky^<|XE.&T$ԃr(z]7y0Yg0X0 r+~QVXٰH5MEҵ67l*jeW=(ov^gb|O;nTY+ł1콼IN~kƤW>x#G?w&=Zo(@,SӜkNu2JqQ{VUά"ڀ%.:ɌsE>A3f ?~ ">$~\cu:1STfՍJq(~ce?$w~OjIb^2ЭtӌP)uZA;xjh~XV,G{k}J0A?*X;(>,MbpKT䣜 o^4eh!tgQՐש;kr-v2/kUnpǭc1@Sʙ+r F,ip[T V'2 ՝Lb?Qɻ45`V%;c:γɵb$>I6$-Q)\`q!X!-ߐ ᰗ -odNqSs|NZ˔T"rCGl˲BaigUxj/4rk4_9445л_VgFy?  \fFWߤD@f˛"^v>|g=ɮLQ2B،o&Ya3+od¹ld Evyо|v,LN΢{HYXB. 7W(ge7ˍw^~|r(_bZ%vKGg ?ley]N Kc埴g!".4L5[ ^ofzgH T` t. >N#َrdÞ,-%p(TQ'N7qo;|,]+&a"IN1?*,Ϝ\UjؗX6KN^rq D:>Q> bIV{Hg#a<˂(ɱ.}@wQoe@Ar `?|ģt:~y]D2xzy8ebTsKL6fad_6'ЖR|͹NB q=ZWK90 cNSYvS. p?Dȱ?D9-Xf,]ă ZHCb.D!r2VN{p)dS>Uġ!iMi_fRR'f_ 0d /걆B kn75h~emsܶ{I[k]HAi;UX6`#CwH&e)Bl9rx9`0l) d:_iD 7"Le-àڟ Px.K}mSSAJrQc/IÏ4:%fae USd`(`e8C V(F á, ( xHtYc5;pQ81do)>n]gNOv[k4?Q#ЅXrIVR[\yBJ Jh#:3?D- Aeej4Aתcǥqb?`bd6V[l6f[ZТpMN|(1-ыѭ[FJ ֜7tցb]PU/4i:P|yVUQ9k3&_#JfХ{jލ?R{`,>3z8 gc/0_ שo֚^רZ>hIʑ E(`sygg w5gGmವXrGͣ橞Zk#K9auVC#9X8/|~A`= o}rZ E`ɫӦa7J7bBEewu{zRSH]*cה>S;d>JR Uv\+y@Ckq6pQI}O[VZQDY %=1yES`%7֋&t%/M!6}IӭevWgw kr՚`T,-Tl6IM$Ez7w7!E4LhDۅ ;#~#rv,cuYC|mO/5IG|4 ܤ&" =DY[| 1:+ȥ'Gg`=HM1; ]tIOȣ0gn _L_3ΩFNa{Z)z}9<#2D t[m~.P2x?' L*?b-2Y /M*Jv̵W7@z5=},×雴lgԏ*ϱ)?#Sg~m碱L T@3($8Jn`urOiF;O}US#!oDw+]k<y6Vsh3ZG6A.*!O#:}B:pQX7h6'3yg:)iBGP PVEwt/{s.xL', GSc-j,MrFˢr(qyN"eNMMY|bKT#QkC:+_0*&r%\GrJXLI nyA>a'ڽSAg!R P ű?155'>$uU^t)82Dd,#,/tˢP#$yūP]FN,Ed8&@k46sDl%ImY%g# ;ACAノLlbxEe pfbp( iP7VeTS_"%LL0WxWpZB9r,h6e':N+$/'.8;3O@pw(V).)Nq ZGJqw- HHB.8~3#\JV5VX.}jL$ӭp^G<}c畠|Zy*d`C]MOV%lj]dtkj ;adH>b-¢prdL7Qա=K>Î4\&7S:e8+XWeNmh#|+dqberHG@ؠZDx@A%׳/lG7:dQbq e_"w>^-kAk1\K m+M8Ce-C mZ{xq(iW/ N wc?[wYQH׎j>"W|a>ϱ!f03|Џ>_}l]"j΋憭(ԻEie.lYG!D q}-a h!-2dZ<gm0}3xY, sj}ju0Vޥsz%S1 ⏢x6#Ӷ8]S|OBI`݄5Nk{XVPx$'/Ul>4n0Hؐ+yǴPֈ1ٓXvT5,0 ztvʼn?!Y6 =99s;K85s\^VWUsFkM\1W!o=a-]-yɿasFgG-gy{;s~鏭Rk0P8s?T'hnERn=}mQ>tc3=\D#?{pc]FNF{>3 UT.` +g~Geϱv%nN!zYqH?Szrˈ `LOp}"Vߓ}c\̨+ᅱYiKwXw(+y^ ;Px mB&_q1Ai/?L}US0 ;#x07"FzRl+;^l K;&X:|:SV@pS7`R>4uBWyt:Q,IC^4 ƫg~xK)JH`)̄~S?|(&*, "$ꣽ˝N99,hLW&)}4,_ݲd|DE+lG(ϋ-d2!+Is&5Ib0$:H=#\@!0ۥ9]1rUska{˞H'`&`M^&X[ Hu]VXЯD>la%\q@IM- l `=Tz˧`D̋7p*Eh g:LW513T2b= ð c/ka3Xm֖}h&]moOSFcNp~"A64B3(a5vxM8nZaHz&}aCD䐿dUK}tYSc1+h.BpETuJuegÜ{jڄwΚߓ/rX(Z< VUh%2hxƹfx8 d*rs\:XLk.'hr\΢yUҵ@..0X>F-@z8)n96;frg%1^x[yaLm*TvT!}+a]5aqKi JdԖrg}Rdc2ڞ ;v[8ڧ. `]H΄mf A!4ۍ@33{ɮrWvx(:] ݶg1p}ٴ4s]U(e0LJuqNuFhކz 'b3졸nN^ݖgIfG>vY$龶˟م̝֡1圍ZI/RYN\Tf@d==)2+#9u}`Z`kU[%n'Tn18Vw=򐷚{,2jWy2U5_.S2YDL=("-"9l\c  SG 3*hWQ3%7.v`G*QYY.[:^wi=g8(DuiŽ)qk"KX@}0nرFr󜵲ˑ#&_]1Cx.C7D %}J.#Y'pu?G`zpV R2l|iQǾLrF,s֎Pۂ7Bi]Єr|qp*7~ᗂ˴)\(VKqGQ 1DWk{+z"U\B! VPe8,;J\m=8A rTR'rbCx ܊Vm Y=(VR[Uc3U3V>cReWW*IT[ MML, @N?xU]82X5bɧ;:b8s1/xdQՅN*nh 0Ъaz^y~g2 O2*&@fUrw&@3ual5?ejj7FU D4X-PGe~[MA4n3r]ߜa.y "dK-Mȫ; {WXS\KcyT; n|/avPeZ*/ d IDAT+êlXo&[qy P/U2$` x!'^fL/pu5Ͱm嶕.5]ԓ_PÃ1/'bA0#&[QRiu8tOd$v{݈m`)ή$[i"aVA ֒]o^}HKaϩ 8lZ(mP,l@1?ރI0 N8TT6IK"½P` l >y@PMS(CL^n~P-czEYqJ[ Wqgts$C)Ň<>^uZ6ٜcO4ߠ+d| Ł+w MC+UÙ,ZBsF@i6aq'V$\֙[t, Wį\_D\qq{_'rlQ)Q'gށYٿ|vEVyؾ`͵ctyjq.mLewy%B-zgR=>.oy]!3zgsBeHf,vQ -NFY?g6+Ǚߨwltų/ˁIܶYm!;o<'?,"ؔC az1'O"cD /-p.kiVHFi7nw?,c~9&zz/^#iO2da _e9~B/]e2Ls,r`#x-O7un; "♳=Nw,trVw Se:-kmvUԧ ʋ y8ϔ 7evfIFTegV~UM+tVp"kA{ʖ݁^&c|c1k)} {VZzï47(g}|{yFZw=z:twO=`g;7iSa?3fr\Jc4+fO<[͓ӌ+N".Fi킪 O* / (M ^`cYf qaucʄH*yǪj rd{`HM1ueqdꥢTȲ+Q+i-&)L}ϊ JO]S@QbOڤIZ傉XBa#0 aXLQaTH³_TBͅ*+?K+~jۧQl9nȓ`İCV;v(ʢVܥd2R>,qނax?pa;goe52'T0gl3iX $PuQCuF;f齨?,ck*=L{ͳ1 Y $qg" ޳yXH[Xm]7mNR:S RPZ܃-o.2f2]¡eBξ>4htׁSҋ簉HzK[xG,(B'!>,T/{R4*,Tk*?UfqtzN5e% P8+Q8+KcHG6$ 6]*$M8q]Z;JWT)f>6rMLf[%O7rt)K0;9'tSaln[Gm./̟cV0Zg60ɬ|YUJ7){/$QܑR6Wc@0~Wor tF0ߩ#=Řc?ͮjjb 4.' ł>wV{#I1c!~/Y?x z9d%Xkנ z~Lg=}|xaUyÞ֩J^L˪p՛Vj]߱H^r`1H;3{SV ._-0jP홅1{ܙ_{Yl?0:}?K9\Z^cQ(oVCG FC$)I0CP[GP?+:KM-pk[\%:&n&y1\Q.BVheKC*DzA;HC)feSggNg*s17V-jD& lEBKaW8ރYRש4qt ~Xzu,T|nFOD* 8&uVyB!{UmbvTn6d1LvJlfIG6UN`17scЮtNj&~VcV[U͙^HP$\@1#TUq˶9 P6P$& y>EHF)&8*c׊85gS12=Jce_:E0Zr A^ƫtɫoY:)0(mm16?qxُQ\Ǽ BV 1KFkԦV Mօ՟FuIU5y fZÀwڏdyO'cx}%WF>o i_w\ w)'LUinqS%8V`#DP'd@2%~cW^dfPSXgiV\~L~2i 殕fS5axկ )MvWvX4 Q(n 0Ǧfe>^Ẇ?\g?L Tyo?5e8B/7(@'#E5|NWƲ.\jDv-cfĉ+"ipfΨr^ֿ5gܨiUǙRy1PU)lψ~j)0[RQ,̪0Ob<gƹLw1\lseu5syqmm\eC14 0GvGdo/8@@+H >¿h4KTIhGU;,,Sp1V* j-.V'3՞֛(BN1DE)t\ yMId#:x;jUvO|*,p °MCVTU+cR32hGQm G* C~h/~^&9w~gtv >W9O/(zX갽EMYŽ8V9 r6dߠNYY64MuX[^FT>y>A;6ouRAàz& kvvA/'gjJKwv /M ] P\*">NM1q:x n,tĺiYubv0P5̾&H.X2` WLlN>,'fT4EeYX#` FKW~M̓l8 < B}8^`v]W>Q5K 궽X-&*s?Yi;+.NoVS;|@K5\ˮɫ >< J_M {p[E&V+e89e*E?.W T 6܇xT~:Ⱦ&x\SVg7z.NCCVf! WX~A ,:f

O'3G'V/ب>mb\~ZGoH)j7x/l+ g֤)3Ay>uW#1ˬ9P7>mX5c P덌r*9j♗_n`^_ݠy8 7) `줖PP3_?F+Nq P!e;˞AwY Sp :쀬 4Pa&Y_Z2NRi*J]P` U33]JbKyT9bB 0+ws|"OPi0ކE0 /KOE%u9<+azxOi<`]%GbWeSQ5fӟxJǃƉG!ء4 lֽ`xMfje ,%{3dCT~clp WdnIۚ;_+0 (so\Cf}Ǭ-U xxg꨼Zey}<ݴP7cQ h>EPdzZ?:v7O.pL*b,r%yh , <G( 7P3hd%`pp"]ri1*|jԃAmvD tIhmZngG}ODG"R*mUW)쳴J`/dYenjn|?}6QWVm:EZGFlJ͵)~]wvnIkL6+f?jm*9ڰ IDAT㻣UOva&ͦj #07-קbo:| NTF? G4á|k)t3Lؕs9hE~d6OU$ZG\?] )>>W!ǚkUtˉv ӱ(?kq@gL.2*Hmk>U~\Q%| :YO`}Y,Nէtx!Crv` ,lN(}+ ,)0@?!?"Yw>NYADesU=ֻ-wǬPgs##8Wr36O=p$Ea:Wj\L@%Q mB*SPv Jx*RO^,bd7 t' }1tH4s6cPA& j.ͦip[Ky?Qmv} #xK~ >?0 9woGo 1+x_% iL0 tbMrXVTttpvb#/[uks,:YY{+~zQaZS-M?h QMj#Qj/܇wͮb9\,0y_8pHv >PAq)s:Qj_ia3Dfgĩ=VeZWb!Q^3MXXA Cs`SZ<<9_xnfqa4K؟Q/h9oO%'a1sܫ7V'y"tIG)pwe4)=9fh_mN_|K'5Mz;koj -?eY@fz1+]_u*?rp:8:'67H#;.ȶxvmrhՕ#E U=yJ5g18UMr*d kzkH_Vgifv낭]lŋ2hw,d+lh()[;ZClgeƉQT4t]z5CT ;#Y|`^a x&`?ڗw60,3TN`WB։g6Q a0J՛Ű9DckuT%z^⭣\44ڇC~Kէq8_v' jV|'20aE5}P%nxhm'` l~˽1z8/M,U\ر‘n`8/@_ES]g-<Ԏ#}ꪑ]&*[s;l֪C#| ;%Uuo0ƶ͉ ~l۶mgc 23}osi]Lz*a=Y`^C\VTSC]q;}d5@gW*sFFK;4,9O)D,-#oa9h E?UWtNk8c9:5GkU(:0bcV[.*Z[2I/+0I!= Kge%%NYkX=㊹,iQ]gRwr.(mRa}_Ks ǒp0ѬgxL1JsGZB% ׿$c['Z@Wq+~URFW9PebV֪:|*`\5X6$2/6~ݚZlm83g UOlh=qz$ RvY}AOcZ1>sP36;tzqgN+gL*nQr .gl\ǰS,~ ϸK n(s ߯ "UAk~v5.E5JkhJcBؠ_ !OK)_<7iTsCI? 'y %qmؚhkMk`+x1I?' LNJZ?k8O:3Ƚѷ7_İ ̾bTgPݓz4ig?Zق߃]c*}rN͑)?$H_*]@-LXn]$NFME@Xho&i\kDW/&r oR%CU_:#fx~/zF vZYtDG`3:GB?~KD_.nΓ9(\ğyHAdfX{X+B+<كp.[x(LZ94u2(_TJyp1΋&xA\a"<JtP\b Kh]ce`'Š?DC-;.җa-( Еqpѹ5QD@(A.8͕lpqx%, B5 T#p'~{?t ;c/`8S`Pف0Ex6Đ4OR\ڵ twF`;l1j-;>XT>>p a<dA5TW)!Y6x \*"p%q#|TsQ(GdW,|]r`iTReTv:RFژI5D8ßt^7[FҽD#x&t& zp^B"4Z2-*Kx tx\&cC8(neqvǩB\r4Q2X`8uFjf H71W棊=Tj#YLT7»Ǻ, $]]wע{n$J_+1WjH5 ]XxZ36}nG #읡זM͓rpѻwa(25qRq&-| 'Yr-=8HBo;nH}Zza5<}_#G{ae܅"M6V )iimµ )57H5\T<7][D oðϞf'餷~Ț=vpd(:ۨu3D.2? *͎O\N}2|g>W-71nZu3?04 9S_zBCYtS%AiXdq.b+1[QY.:\}v*+P04z.>~q0*/z[U_[E?\Brr]:w%a__{W NQaa8Y*mz@jA˦ D=Nsp5y.~p3C=نF)i>6_&@Zܴ_@7~ [GB8 pjx(I&7 I lp[Ļ|ox]ˡ#'+Tz=3X@)})\o$Ip*(gDX&QhMZhyq9 'jR!G9+n0UikCp` kq>`3z 6#XXBB@,WpHP)ų+ S<8#kC xF=Z٬t=\bZWfy򁩳&p,ٸ-Nq 'e'ITE.@b2z;M҅x%ڰ{?`;1=t ygWSWM'7&OXB\LR"ENsLөZ_V;Z,eev1ڼ/D\f U>Rgp᫣GEMx?vf3E9 ՑMmZz~Q;">6&&ڷ#Eq MvqXVX[@d2sz*x9j,Z#G- 08(m_V1W~JQEk9.wPW2[{כ_M\V]M28bO].l/UA3X"cWq2UI8QJ7`椊ܞۋج9+t P|?󪋾E?u=NS;q V:(ّI~)};DXv#nxDRd?JX'U] u96 MBj87Ss̏oDQ]K_8̮,kmwX3afOۿsg:ɩI;^P5u%YB<׼yD3a~n;^9D7Y^GWCAg>9<J|CN5Vg=?<N_E _>Ȁcd~~Y~djOW?UFB]iď 2VUAK  sa1q~r|wX*Ov|p~\,%">2BU5N:/ ߆嗰1rT팜<r覘A4)dTG>E|w(b5T7/V&*N.h*FxjOo\*c9Nt%|pbm^aUu~~ x}97PI ?9^O<k3 $7 uOʌ URƺ̻JM܅p7:ht"&c z)b:‹. q/)ݕcq8ea3N*u;f7gl.೰\f,jrPU"+RJH:e`5 aFyU@}rP 0?s6/neB|ƈ|to0|v5w^8q nx8v%3DQ|LYrpk9)LWbRղo;&C.x[F,v-XJa?p2!.!ٌ&j%l-xH+!U$Z9x3e+RUƧ,k]C+'<:Ml9Ug:P *ccƏ NSrb 7-ޘ.DIb]p~Fi 9vJY],ۼF5QuCׂ )fWE s:g'b\gmW)kr$2Amvz!4! @iq9Ǎvpw%Dݔ6:whϩ1\"J4%я(xFJ 9Nf|A_A]}TU}x J.ɿn+>BN匢 \;G*va$^e ~j7 Bs_0<[6w4) EoiHiw%+5liXY\d]2PucKN<]u͚S:= ]ҍ.WOCE_X6Rh/7kS2SDaYPC.{@C \Hqpm߀Ox^/xc`GxtZ~h4k4s qja@*01#ig'2j&gBMUUOz!69/Ff!K?7}\j'pcNrMp}0xxVfL+n_UUK|E;{;b'UQez5v7Ai ʸՂ}s+'4=T'a,Ze$ Y'#v3gl髯+yyqJqVZ^J P Z $U'9yA/Qbe', L_ xbOGo=Ѿ" A>O9 ,j>|z=q{ʰ|̾ReVggsЎ3M|`'sy7Kq7*4Eqh~>W 2"#)xzNh9[[u>.KTCs sWuu4\'|)#jP| pM7z]\ߍ0\pg&zku+ܜ!.a[2nl? ID//,l,• a}NT.ƃ8 Ýř x +'OK: +6( Z*1ɽ.a҄ĺrhMK]qY|jņ,Nu_yur 5>Gcq`1;u_#?hh ?t&C5G/MEL!gtw5cxSuykpSpbERLRR<nk(e'N\G0VX/_<)xs%39CX"XP$yi—ufEr 8 =0.)YkJW`s3Nĺ`a&VtB^]%)W&{(`8XJ2 }1} +T=pG(gbRhS4o!\˥fDx ݝ;L\Zf%0sT;.[:Wv] b Y.@HoUuR7aeD /%hC))|H?LZ 0_kXC:),5ݡ Ef;\ϵu&\8RFQ`).?&lgfNi>Y:{Ӟw<ݕr1Nb+5տ)9x8ܒoԓ|_.p;(-=ݬrhmÎx]Q\p]2RDyN) %3YO'n!,\Ltei/œqO+ Q.Li#eNq*"nS&{TvyT@X<]ǰs5fqW/Z@\h4-ǨY\'r v 1sjR߅#QbG(|lS'ʹ)QIv54-\;D> ]Cm@Yѧy3U>!fۥ) .KS5Ca1/<\rSg}R}1΋VOq.OKilDzH}[`Isr_Ni~qՀV%&oO3w_BdC1k0,]ٿ?*l.*['g QQηOi~ܼIL, y>bo_w1t^{:K;1NbWzSپL'kQ3B N4;\|j*_Uލ27Eê9mdtQ}u1{'cW~̷c8Au ?6/vPG':d̚]Ct\ar8X!>Gr!$ 2>*, ibqhB-~*?p:"}jf=Q?w U?|"A>L]\cU1&7Ѹh=C 8jpyDYݮs17 a\$>A $Cz Bs]㱎X|88ɪ%X͞Pm'\MkTn*w7LPrtEՏ@?ȥwy ߫ܺC0&PqfBN8,pupSMy-M b^q+Q70غ-I__:d.*DD^W6 5C/ OC7XoosюU[^l+9ǎuh=Նx{Oђ2Rs jNjh\vτeRۙf|4z~t'n9qBvP y qJ'7|?9%7Q*.C&y,Sey>$,^:T `[ԧC']?R&ob:rhT{͓=4Ce`$8:Evz%s0^Aw]㈫ ıa?U_/BhSUTc~bG /cўF2ilvdžS(7t:8.~q8|TЇpsBe7ʤP7m IDAT$L~_KUN_"򄧤7qCص8ls>B;8=_+i̬0/cLBQZ4\A_6'Y2-f]*w/{BZN!hP㊼GwpWt G|49NQ'. xBk'S(-UzDCueINYwҖeמdJ/!_{ˏ?_Yes:_:U H!7i ne~'L%@^((F'In9AyD=r])a8fSP=\Ty0J,f-SeUݾIpJE<Bc؅q&NY;&;g+΄vI/zDvAFZ t}Dasͫ!^H቎>A)z"ԛ.T.1X<7=:x*kRO|'p.s6& /\33թ%h9,ݸ^Cᴀ҉r8j0d]'] ^n=g7#`Й$[ܽKZ[n ǽCpMqy?'T\0ΫVs%FSWY);]EãtR)D&ɛF9kג^)[;9?u*tZ}Ds*)rmeh(42^Ǣ\r8>3U[5 >H3 kjۻ2/CAwA Z<]Z=^fnL$a='eo>N+) AKmzHYdTo'jA1"&I5`0Y]T)T7Uf6rn-Akm# ڬ~p+Lw fΙQ㑶jAΔ{ӺrXC/r)p!$3;Ȼȿ$#n~V_->I ɲ*FRHY9h U}8Bhv|!ɛpP$Jheoرr4~մ -NЃc.vDO޳2M>bޓ]Uw0 .#a9,hXV Ӌ~k6bX ÇST'!/*Rx6E`G9=D\688g`OWhs Ч2AUZO.oЅwZwkЏEQ^^%nk=HO|aajTANTbɘ!dn㮝;oE^b'0;aU S3˻v"E?GS5:ژ6 &-a0;OPOI+ՠzF-WZozEj*! aNpCs.60uTeEqF0CP3(38EmP8G=y=Id  8nj'7boly z)ʏ㎜n/.7 U]Z-JG8vR؂6U9G9d@1eC/5V-8b0M7nG4N@6\$[Gݘ{{>1]h cUuGE+&˲>(&+G{X^ݨkr_|TAdɐff46M^yVmup̤24 SU%uλy-9رѱ Sd^nRP}Eڌi].]59Q'prg?:x_!0MÍ[ď).[« Ѓ#Mr-5@<@ p[9*L5U8VP|g|UA@ʍ ^`^\G OV,hTE<%~U,Gd;e;MXSv.g 쁡N%a;H*ɱ0 P׺Dhׂ>xk>nQ?)+"a3|lȁKX JP 7ZDSqp7IX{l92|b}x-Wx,FbLDkz%u:kNP?y[QZ8BeM l&JaQ;[NVmG-W: y?Mv{*hO0qVOu/OUX `NmgRxHc 1meA;@# B?i^_+1@],h~^޲f^<.۝<=7a U<Ñ [D &S5g`O,@'vX襕'uUfc e=Wu3#*"sMsyFbhs4XvܤBxOT-s#:#|V`H}䙔n77br{]\˝DV,TԚI VDkp.e909pvru_U^ EK㲒2P}U\+uy; *`.M͎Z؄G9:C/:c,7f9.st=wY6ҜRKTEHEVJo\W΂sX 2p2`Z^-V84D-Jթ*D Voh61=M'Jת Ye_PgЛ=>k/Ž\eZO)ɾ걜#h()#! f`Xp 6GCBP*SKщaPQ\%Opb &wRfWxE$\P-"^D1Fq)0Pog\DMr@yxDwJ uD. %g4VRaq ba ))!vӲf=[ xWt{$eZ24UVks)?MZM{oܣz ㈊gܐ/S1^^1ʨ K`Uy4)?5\ QѲadzd:ASM7oz/GX@М!2(y_BsWd6s/XK|uNMpu(]RW`/SIRS돷ڙ8+[k,7E ɿa:΄ PV w^5Kք < C>gnD?_56+ƙ:[}<9Pju}}+p , wr,Ge:[;i*UQy癿9'=w\N]3sۊNzFD>N;zVm>EzvaZ 0v}:~fqXwhn?=B(~8!]h R4ڷĜ˽˭K*5__WRf%u˿_Q^W$jGh].GS'|s'}j+SR.EmE>ZTr9]~ZlLٔ*Ʌ z2 AU|53#7٪_ 4&B#ViƇKo kf6}Alo5}kF,tq'}@VTyR 8#ǹJ&=+/ZN jt}gX5[eK?] -Nv8alsz-EIef[خFcDGY5|0&JM Cͪ?]*K=!ut0 m[pMDԮV@]79W<K>aVM/\tDPɐUN?"SYBo$y |v pOc/Sǰ$ת$$NNf|ۃypXy]U:P`~q&b`n2fo^_Ns N[zy=䤓Lϸ|jxZy<_d5E>y&06T)4@^Xxk`9Ol5ƉsH+.360CZ|(/ߠ@A=A U{. Z{fb2atVqe4m}Dȡfb\ilKl~倫Y{H57+u14pΚxRȯW/ne2..ϣܗ+q%k7RV@6cV-"wcn<[8Icy^2.Ĺ odB=ᇨkXF΄|vjc,I&o{aq-F}TkQEWkiz/!8YB_wMZ  geJ[<_/xg[rԲ 2a)] ⓸ ?t^I+Y @ Z y5R=)Δ{|+ِM<%wI!܄PM-?[z-\?Ih*5!5 q!P&`3lzm#U ܩr@SZsŹ#^#s&Odawd8v/rXnVP2R;eUv =ikҐb~a^NE,2mLZ;~>)sU I)k:;K#Ü FWpͪdR(u~F=mCV\pAzm@qVIkL!p&"+ KZdk?{%w')8 ]A % 74$Hwy(lv,#9 \]uEq<~@ggҩ/}nBnj,)g3I' <0 cO`EG#^lîoB#$ NQV_Ȧj) j~i]5|GZo4[jޟ<|y6 12x]A=CŁYsCm🫛c>WK}Bͳu0\q{4*gɾ(O/?6JԿ˾8>^㴇 ⺰({ cUS'qO^oX,ZDs,q9>M`w@:,ٍU;Ӿ#T|#ù]U ṽ% IDATI"IM9.'K@uP5CajoV&IR\S= A[~aN98]jwx2teRXl62*}h?«ݡdPdLU咸,ZT9ΎM/ҐaKiu0.(c\f.*gؕ5r\mFUmX ! q ބ< *ﰋX-p<ãTUؐn;mKh5FCv썓CtM{xh t"vQ__= Ҡ Zp~(Ⱦ D:*,fP>Z KCȋ[Pp:AC⁰s1\Z7 ~Lb*:q~n0+HIPSa\J]Y:i[p?:%-?mqz##N%IDfPBE1ܝw8~ x _4A)@'>>Lc\eS⋱D >m1jؙ]G꬈\F;`.$!*ñ-/)TP#=4}zgo1 nI#w{{ÙUWs8 ƣVW_rZyZ-n<+d8"]JR_i!ql3p#]r"ƿ  f$kED_>(Fp .AlJUgq-*ťaN ~%1i2'|],vb|T9A*PT>A\?Gu / S[uCݝ~WܔE{hlTOa<f4U!_*m6~nӼjeW b*,qMM8FPyZl g7T]$ Z{p]ЎKr޼d!riG፪Xe_Bm>L>,xq.&ykSɹy! R` ZX Kr.XdΔFI8RUWQ` *Tk/77E8roUuX+'rOV@,k4V!yLqŹ,q0;pS|WLҼm CDYN;V-2dV$ŋe_^ب )y3#ekQ> T;΂DI.z`ҐC;iV:$G.} vc [xIM_8|߾$YЗ^s *L9?63rYRR9A?? w9[Z#\k26_,h`o} rjAuVBJ"E؉kxJZ 2#"4$Yon3SnL!Oݯ) i_2zF`7rzI`~m9VUY=Zl>?ךOKR*G'>#F-ۻ`m9ZN~f_}-4ҷh}E.jR-r^MV[aDGqFK?r(cvNO6cVG|iM";6X/H^Ѣ}j/:MW7jb?6U`kNPoyej&( CsUq0]k@)STZKCK:#B&ބX@+ɑ͊x=)m 絮F2lT/T'H'ޗ˨; #; }{J#μigp/[-eDSccr' h\j%07:ZYo2S.O8O 3]b678YSh BSe~X蝝'>2kE !Ebi!j#2ۉ晔U#`>/M q7k:bu㓘~ah-#,iޣ4GfٗsEZ~YĪ(NzcmSr΢; [x#&q3߭j0=Essb-ؚ ~rτR'|kbǸ }st/ R&ϐTdFȯQza(op7wW~Ls r4&#b 0L]a~qֽs( eԣG0.'D>JŚesWW6^fuh!>-#!7_~k,-<^h0 ^G_fV'Fl<^_yee|NWywR?&>^ 6G+WZABdQS Oԗ>FRMs-xC}3{lTpGMHGHHW44nH{oNgAC@#{B |9\|YO9%aO+zQ9~Fi8dV'm",K.b&'K'@"_D"ilfza}˸nFyʓvKg ,|9a'4ero|'ZNo㨚YٰD@s/\Uu`?4Xс!q.,)$ ڧ!;OTeTM4]_ҌaO8>r=5&`:`-0T=?˸x`5D>Rg n@ T9'h7>Vk>3{1#T5OVB'S#ťv[gp<|0G_8+B*pJn]ɛV(n0S=<~'.CM :qZ1EbpX 18\-Hk|j=Vn;T(/>DlPlO*3U*;@H ϡ}B5RgGp{C5JS\V}XIGOS}#\Զi̴pOw$Zx1H7mCviFavsUW;d_\%STg4R@4ڊ 0 QAOIr\j Rt|ٍj0ᘺǏy2`hOpEV3h?tN)8N솗O0nqz_J>~טJ/.\⭜) ݛGRfTFIF6QtZ0k%[a PWha!Qc<U;Opt:$,^KWnZeOyNCcZ/}CMuQ33~XR]㚸KXpu^7cBd\XE{}zVJQY8c6kNʗ op<~/MouKVg3 (ls,h]FR?k-NYZY}R%L"NȋCĉVi@ӵ-\fW ~̳ (gh*#!ZJtpucV?;8ⴾ~U) דjNfϘ6gFy6,hs `闍wN7yVdIx`64ger>{W8-ҝ ?'b-`N7pcCro ^'#X/PJs3K樌s񏼥2 ;Gu0VЃ [.eu t8k9q'22c#5y0j y>#f|G>u3q IM|&FͣD(R#QOF#+`&QpLO&^l.wiշLY aa 3`n K!Лhc"'0wClxs˽S|qޯXD%5^U1ؙ Q{Qʺ\ܴedxp8 oYi:eU_P.;N ~nGNb#QKTӫCةNhN'Z/q,qJ/t[h[(/7觵]L:4j#-Hqn/oBX".{ʯ 1]* @E(N7:σ|U{8ê6\x Й'G}}ˊƌ}'j PrINP_%bnjz'Z=3\FmҴm۶m۶m۶j۶k4N꽔Ce=LЊ^Ay, "U4`5VQ~Z_WTZ oe|*+y繿X;ӊWQ1k9(UEcab2G-wr 㮡ήסe"GW>5u$[Ey]c<ډ_[WbHhȉ[ɶ)}0sYCoW2::p ;nOjS{v5]0M4RIU+3"bc㛕jyyX]*x)ř yzRqV]׹#,[ԩnR=9DLYd6g?__Ƅ)]ӛM\XZf&V4݄cs(̑|LwSw^O6.V4D\{NՆjV[=19cYf|p:@}S$̜ۛ̎zWc-J]S1_.;2V. If>#bx3q m0G |79w0nRڔ#iv٩Bj`Mmgh4l=}ܱ}ИAMq&6-Pr^{͓"V/++ '$%_9Ax??=rx^XV JَgRfN B)yx .HEՆPmN׷?'(zbu ~G%t|40>bWl}bٕ‰^aP[¦,-=[y ^igx3R=0kSdq<RI,1_x?Bo(AU kG'yJrSYҪ>ZzQwƆ>| (TmՙT@b9)o0=lh|+އkfeW6O20 p~k,XSΑga/ĺ1M[h&DVՐ_a,~{3YҊнiE94=t}4 h}\eS)bYʡ\D't!@ 錓|nPV e2+J`rs vAl(GdlTکzbWz^bY:lC6AVХ8hڠk-z(>:c"Q;E ~c嬻kq@}NϬCB;)Лj|"Vi*j+d!k%}8"Fd IDATwz'2F44TH9j}"ۿ-g;2=taV1˰܂T-!tNH+>Ayl b0}D7bX<*HizCxj] [s2JX dlF 7Z1#LwV1AifqVNVX돓ҊSWRVM1z9EQj 'XSa, XQtA:x_!7Z ?q,u1-lѻ)|p./| p}Gb֏CO8C8IqdP0̑?Ft%XQ7wb΢5T0L:v{g0 A!+xZ ֯@.dr- .wGvǰA{@7ho@ D.J3244pOf}A?|mK雒>W09B$lt_\͜F'ܔhhAٹ1Oʐ-2f#x~{Z#i sƄvp$gOQІty_TQ.\Ip3<:*>ڞ!{Tƶz3;ms]a0u" 6Q Z OP9LGC=Yl!`vVT9Nm 6tlEnO{/9[['si [y##??U>~z'K\*aX3[B`mn8afHَ$0'5h.\PG3j/d3G)=tčzg&ŐZ4xk\>X !0o0o1W> 8 j(A?颌o)A NV-'UҗUMHՔd[5.XP<+ v;M1=pbY4QNңBU*QS-csRXѰ\;F 6?>I9VA(Apfل?M! ?B[яO+mlp}ST$rek*XOf|e( d5KG9QBXI?i[+=~y6{0̤ e{3vgiTFkauI]Jd*cKF+/| y_\ٌSE.Jy ɏ%VAmgfDhPYb66n:QW<ݖ}q)5^iGixfC]&g欶n/蕮,ɾbq &U4[w”]l#!VV1O}uZS`ǒUƭVf&='nXQW)lɃ 1xO(;΃CO̟wKӍ;>Ow1,PZ 8>RnL@aQ]YS87&{R\L1 (܄O!=g,k~iy,[wR$S'zk_mYQ}NtZ)M'B,0[^ڪkk>C9]jg?3y&XB{RxWz?0Lap\'J+9FUs#74mYi/Nr [v*E,&"ͤjSKvwz~jz:im/:A?ţiydom8HO>`5}ؗgR4#Fw=uȳ:l+WH뇙LK;=Xewb1 ;J3n~η 4H5CaxƛH tPe@'R܎n0^Q#a:* !GZjbN}Gһe[િ緧GHưYG?׌ȽV,3ߵWGxPwodrn0)zkzfZ,Ͳr Ld9K /Fҙ9_nf&웪fu\֛D/bnl:bCL?f4_6647`z -064Y>lVTMVޫa~CU)?-iŰh1W&s1G>)EVυ:Y{t8g`OR'??̿WmsU]IЍMm8Q ʨOj@8ew lq5b~sFc* y^=F@hczyE3=R܂q)9!4XScTDwp;ǕKlI d/7`n*7qn蹪;|[ty:#؊pʇ=X) 5_@̫Q]ՊS8ЈP^"xO$X nxa8vpJQ_%3[]Z@Ut:Km. #p >žN܍Yatm|q;UVJ"}cW?-ՇzQm,y_gV=U+l`w%ӁhJb 91:e9Q @;tj:I. <;nf5JSePB>lmИMJ^OTw,AYHp>kFx28 5:_"WAJOsxZ$>Ac~. 9ƚo|# 1֐ǴH}j*l1V[TװX뒩 ETK}zʃ0GT{n^b;Cg*y7KpK ӓeQ?FXehe1S% EQ[򧪫a^bk$-C1:C^V?x4m롦/gCȯ*a&T`} 5b&93N-뭽j^뮽$vq!S8϶ZTIqQ"P[A'ui/2px:}ؒPn}lkO`uUٲC^JyfuCp ?gsD"%!Idz}N٭x`GG[WW^і| blƑC" lj3ߣVz'$dn N3of;ηa+).xށBdɑ7%g~tmvoJi,gR֬J7~KV /DŇWQaaXܰM`F3f=⟡$e p +M@&j/xNhU=vJ/Ч}+{Hxɥm?'=W {+lg[r|G.~vE9c]Z189z/wһJG=?2|\XK Ӛ2wsΚ]bͶ}peqb =NqwƍO/0?WGԀUcUB]e9b{z tMsD Odmmucy1pj[/{ðCcP#EvFU,JNn* t-Nܼ_Hg8Jڍ#Y)L%f@ ˻BiǏ0l?{Z[,gDQL?ѧq^X Rv́( &+%dj (L(V007J!7^@#V VDTCKxRc)"U)hhRKWycs72 /2"K-a&Jbe+z"YT@t0ڣS; +q tfb.tGa<ݥw48]8X6g6 *fylQpִzW:) 5L\!fc;vKP%zzd, a\dYNkbgF9^߲\e-Ll=Iڨ ^g6 K =)lTz$ĩ4~xsJ 7aCV d7c*m؂gZ[, gƔ{FS8sf.Zm^~]Z[FWTyZ$v6S?Be.k kpWMu%2JΆvE]耈2+^g?tG% ˛R:}f>!XQ]>O:!x=3*Iqc?xi`AF~b[A̪NQIӜoq\0LJ]3 *VVkFׄ{7cjmbHvMx.L57|N?O._0ʟd3&'eK2ݿ^inY?V$WJi+97寧D =GGj6G:7&I}*ЀSg[L Z)nbj = g2Xo6N_D~Z- 0{OF3 OmTj@>ލYE~wq)xg˦4Kd0Keu=`e<5'8J;{7mHA cE`:;]Sʫںllq foGYEzQaImRv?@g%'ֈ<܈'r:vHpl06PLlJû * AUq$@~jb$LrP a:\.w\}b4M'xX

:se #/7EQ*L4 {ka\"PFTm fܪJkK,d7'+xڮ?XT.jʠ{B6H;{9~t%.OŊa@ SP8)ZBZj]4)yhAVH<7Jl tY?aSl!Za^k)nY5NH0 `MZPWDPgFB1m0Wн NЛlUS=ũKXJv|܍?q^3̡,<ֿEEy5(Uj1r6k .gX" ZvVRRd{ib1 'b>H_H?j]+`{CcCkJ꽺.ba?3ou#i??V>䇰+Vڦ/:@l s0t[7Jʊ`C'.Rt y-$JQԶjF0mR_ _<-N6]M`YnD?z`.S1;V'fe@a:@`|9]*E3h/flG.1x8ik1/VҜo|bIn&qΟ:ޞꚺ(/ j:աjU7r ,[~|ch:y>Nh>^Wh\[&aEO y\FxSX;U,cvǐf!Yë3sd|&c&R1xX&pݔ9 IDAT@ 9͙!2JEJ+mBۯ.l/c܌:BEޚC3oD9f[6:K=?D2Z!><-"b*h}e,e;fwbG1+4.?9Ϻ\X:p [S0g"CKX66j 0:ú T)GwǞP`s ;S`w|IWed[:"ʙA/z8_^SmfGP;ށ1dlk%|XtΪ@O\G"Cp wcX`[t H67#*=Jw]j&!>VrjM{P*4TlRH)Q X)]$۫C8QfM ~CZoi_^N3 a%&"-Iu ,+a;81 z<(HaKCg|K[{u̬(Gia:R@_Y!Y}* C &"= x )j_gpY*Y)0)vyqA55 Q:ϺA&GD9U NYA^A/`Vt)ZGs>X5!)<',nuR__bXU@+렐+Ju)H.&Sb oi^!;+K>sb5[ C^u2+߉9fVtGk?uJYX^R<&f8,]ceifԷ`a7sA&UjrjE5q9za;y- Ǒ"gg8'oa{Q/@6krfdW}=\fM.!x6_SN$$5(Qz(<C-+@IKVB>F"Ιh\(O+&wRd-Ӝ͒6zU0nj.pQ[liݑڙ=#iH.{TNˑPTgükcwi2*HgWn;1ƷUy޶8tR?r؏JR[=Uin)?e z3DvNa|fɴ*Ǭ2(FZo{|Uwϧ5|TU*偷UO~O^[do2H:U<-OYut@iUYBmldv?6$ɦ]*K^FoqrSe| ߫c)yq;>0e{~zVNIKR{P\)>OǛehf>k/d#E3c\H<<;l/ǘijz0wC5o #h獾"Hdok1kj0/- ;?hm f9sK+*H_TJ+h /,́vp=PX[qdu +Y]k / gl>X7INN[4;%tN)L+slx 0%B1N4 | 2kUma'r2/[` Ukn#jPi4iJ 邺bQW1:lkpZCV;Y*w(OykLKD1В ѱ#.Eso!u/8F{ , YMm8']FrxZv t4ˈ %jM!BsBj2Ԅ* <͐ˠ4eN=zN0cN5W;X˜(!;o2c:q:,8ǡi'Ŷ^塁Ћl_:RYĎ|",b9܂j<2|.mD;v]+Yba#eڪQ6Yw qtp.A2Pcj /?FMG!Rd0ge[i4*tg5:kL(nֳTX)7t9ҞQR d9[}s?oރ&xα$ʹSguZWRF;nF؆RtN|iTdi#sU7ۥ,˕@P706 FMqڴ^R:ZUg{xc~AX}ƶxfR:@!R }:LfAgȩ?C8݇GPz+`DntB:lʒUA:XbfW> cN]+NXpUK<#*o v B2j6jO&i8+ q>巖ouc^ñ_Ϫ;/ZSw8&ҳ.t))xR?s_p0ց̻Y`o;AކYA! /Cw<#H(jp vPt_nzˢ,nҫEO!xmnprfqNitGmѾEy+J6y%3,w:""_RhtO~Pt,%i.F&:j;ONcګ _%i;%}:Dl6/꩛@?1yTґW} VH#)"︔=[8X Z)1C1t, nCDk^1%gYE=шѩF_Hƽ✯.ȅ_|HO~KGz.Oɭ:Ɗ 4O%8deЉYjHꝺ'}hbq_⹱WR_6K(cT3h,0ԁX}zނIz81zTNh]J@c݆ (. .P>DBbrU?Uձ0d|i9 wF4@OcO[qֱpḀuPG`/H q>XOg,l l,rڏ7kBQ^_ϐw+mo!ݧYa92mgU)8$NMia`1#/eH-_,Qg5QCYa0_j O)l$V [ZAeE.v[Mu7!m6.{Za1_7~2κPBm,EwÞf1<$oߪ}( ]XG8 Yf \8 UF>Hՙ9V9DBnװx aEf]OU4w: q^ `OpzD+Vgk(I]8(]|O':?USxq|YQנ(Z z,c6/b݅'XIqE~ DGEGEڶW7(р dw M ˬp]`F|S:&BFG (UGG*zōO9R܊${lGyRuRndzu >M܈I=KnKkpO})Ukf5g#3?ՔqKZɔq:/MQ7N'y%'$ [w['žYӟ3ٝYNDښT2,)WV`<ʼnl6[9%tz}Ԟݒ<@xF]O<hv>֤v[mvmͶͶmlcj͙F}'ŵ q4PH蓲f3K?=ρKmǏq5mZeel#Dx!~ǣ)ntx~Q*;"--pz)U>I{C9'0H|H$zzzKGJd`-|*PV'pW)8I Gȧ89~m%Iv_˾kpH ku'ŠЋ5xx%j4| ` ƽQBq B%# eXG2YGs;fHOs=Va!½ *ƈepT[q#NBE,Nc0 sq8 c# ST Vd}HM8+5)ݰӍŴ N_X o6y}/e{Nج9[/r. xN, -xU⍎x=TaW^@ s`)6zt5 ;e+V52hџUGw007qj_A]&5Lt-]\kXV̔Cǚn]W<2Hsp; s;uwC8eŨ?qI!WIu !{wdTl)H-zZEfQsaWQY|s5E ,Vgj|^-TEvwZn=')1R6{{ :P}|\_@-I=%GTFK"mn<I98uA9ާl WM5K+:`^sxʸ>s5\HrV`Wk+L5R3픋) fdN@Yɩk3Fr䰢MpvWYq"92WoL'Ϥ4I)K4(e#z]q fi̛u},v`>Jn4T7MT 8%uN=_2.pI'ӝ-i wj#%QtMIs \"(y%ny\׽kY0󇌆sؓA ( ͤ xpVQpߛlI1މOܙ=WPͩs`JA)OotJ,p6Ndp [U)DeJ8& 0ԕH:3V5lFs>^OFPsL4@cyn8GsK9oh1q}cJvNA~;d{t{K oQ5 6x/k!|PCL$ 0PucT/K+,\.$dtCcoZokg?lmp)!+iYc1OKqV2R6Bw̍!z;Us9HtC(̀L}QS_(?)fި9/\2sƌR|fR^ xi˩3ՔIF>PAa ;PQni^STv%y0mqViKPa 'v]'wU߀D1Ļ,2ur=V݇B[M=x9)SBsaXKz/m!4 (iy|/Sk辘0z3ȉ9ɃCpJx;`#<-}䣱.u pHk٥KM8Oa2 /x{ř0Mm[RZ,LL|dgɲ=|CZJ7Tmhz}d0rJQsz$ԃTQ&J'[$J6?7IYqZkG =tvjqj ľnA5T. #Y@1ctQZd$Y<˫IT⊰8䲎pMzK4?0#aN"5Ma p nQ3<pz+dF:޸ ƟC+y!!LWY"ٴdDwl!`pJp گ.A X :,y8Aa5!Z^(BT3|Dϡ1N@S0jz[YA\Y֏ P`$ j-vtNybY&!úX2 QʏUzd~c#unIllU)+[>GB(rWCg{tU Hί>vuz$MŌXZ0sNcHC(9G3wb=iS}U9Uk_J%(e:NR2Q8u&ݘ Sڸ?ܧ` $I!cSᖬΪ4h,d+eV=i].γ>/8-(eJ~am'4yTvi RMvMo$)ץ-_B.YCIש ƕ*1_ya5>VxptAJ/9SpWy%n.Gq[ޫ:Aal=ѭL FkC" 5OX?]q:KVwy+5n1[t*'xwH{oF*8x& k}3:sRSvUX:+U8W$AYW(? )?R>y~%,3\a̅.*V:h÷ oP@0Δ=8;9?T6ސ aI~. ֺjalXN>ޜ"bCPIMLkcw9FKsG앛kz U<ُbߠHL($Ԗ,=KSZh(0VrBnT0Ρ%Ϩ |532GmlA,Nõ%%09c9C8Kg(!SJ 9䄮NW;{U2(UKswYٸ-֏%xxx 4N b*3ݗ^#9Z~O?O\'ZFdoąj ݃dXGeojUZ&N~Ԑ_*CF,[q^ }Qx.AY1vGN $2pɣ󛖱 a"> SɁ@tX婱ʩDk龌bp sXAyo8:Y |u5:8]uXfO>'~ cAj[t8lpZ, $$Pq¸IU2JMVW+, )N2|d̀(f$/" :Xj9;U7G䆍g\CT s#$o=_w%ۉXw4蠟sJ0J:νG0ۼE"á062 (]S\)ԈS-ŔeӇH}}ZKc5٬h($ OPssLIg$7 8 w3ޕNWwA>}]-t:W)v*L%ve|0O.!*Y\?\U Iéb'i*?Y+,GNMU etףfWc58$i};.L1vN'-]‡qAu>=*JYeӺꧺiU lEufl{&_Nz)⹛"ygSl{e-uIjX̒beŮ wdw!,&aD\iJ6 ^ERmP/q25v0<)Rj$H8#t}#\JLԃ+SkPK8Y@/b$O|{܁ )I)W%ߟ'!C󗫈}QYLi#w\ 43HS+$pH\:9/mt92#Pbo8bo7 COi奺݄/C~gKUȤԪ8BvRwj ;OeN+j2-=Pi=Cvws zJèn0뫧Iau܆pr}FUg:AꭑFS?hz0`5 z`EZ![T `ǐ\mpe¬pʘ]붺Z|+ϜwrGMZHC0FCs$ DkOs3 !la7ɯ+2K*ypZW'z 4#0Jx..{}fbpQMgcB2Jz'0@ 8$VYcy8gN-Taj#K1`ף:d{;˜SrJ2p$P=TG!~Aske`tV83Hy477:mtípLI`c<~gv ڨ!Bd[kX::xrDB.AC&mT|ztj{¾g;>홙8XeLYe[<\P㜙/84(+xW* nS9nv74 b0_Zs$:YgW՝< _ y9Qn&x#'ɁyT )/ $F Σhڮ:2{[%I!05^#0_Z3C2'SGD["y-̴O*c95E )}ql,d(yϻՊ/؃d9Quc-i}W .yd8pc"@z.?qHzH=EOg5 s䅥F%M tz78`4 O f75 ?}ޙ~\%Bc)IUೌ|rXRu@.mv3t, CZq5.x#{0u{ܦ5>I AI` * j*f|ƭ2r>_G32$c ?q&#޻L]BAykv2p?\ AC͘; J j 7<28 ,礢}PoCgLO͝?py; ֙DCikO_g%iG!^#ZkN1:BkDXjYt礯,Ԝ(, LS8ۥN} '\\pO甮 udP UTxSJ9TC48W=Y8)[+ |5?x@F9_`$~pտ]>]*B`[]nx,ϗeӗ@ <|^ROm G;=<0ES'GHFˬT_yQFeSUXݐIͭ af,P=] EX/bJ ziU8bٞĜCLٚAqafhDx~*Sˊ0cMYF!43Y=,M]ܣBq(5*Gqo oA|'^Wt]|bWBVkq3tBIJa!qV U|2J.#O6AmKGtOR9?;/7GUOE uNBWmWNfiÒB=㳥[^/W2iǯ^qQ^ m tgMi{ <p@ɩ69*)x5-y[n:):Ҿ!1?:;><*|WvXmW\6͆ZJg=;%M!/iHY8vB2:[ ޕZKp?n%85(6_*^8.mo夳< yLp xU"?$u^P1y@KHz 1dtb`r"Nt ^rd^k_)tfJ!Yg4卐ڌT J%N띢.`y.b?U\)̀لKFaIpΆAW㱜I _@=K@lت:i*qN~:e: dL ہvm:g7vB0DJr}F`~Fw]"!%*Zg8(3nh. dAPO<k, C7p#=$OLt8%.#y =pT)Ga1>VC|(`Cpl0^5mk([JJהN\~K 7Va}ϠvV ]>*t7SN P g46_t;s [,wK& G¥t/lV zf5k;vyd\TqxuYg Ϥ&/fnY@K0c%PuKb$ZwrIX;J?RBGI\*,!]9Q Rr,iDL*$a!G$#D.460vc$ſ`SyN+dY\HNx tC4|He$Bg&>m9?oZ򞷨 X\ݐ8J~s 6eı,> ?/%d5DiC{2f`fL' (ZFNJHK2RP HjNE'K/h}܊5YBalWqQ ԟ!܎zN(z&$bsvr 'nn.?E6=nX~0UiTPy.KHy?jQL-u=h qFFNaWqz>%Q[Sy*{ ;/crG 1Mv}.o(bҭ 4K??yx/'Bm CאF'}sꂙxUh.Չ*=7bA]~@3r[L+Wބ{q|xj˸%OmCdbhXǡz9 zԄy8KAe ; fk,ArZ0[Oک! Q<<Ƿep_bc|SNS]~%`nk0_uk3I8±;.u~t=?*u$pzbevN{%(p1WwiޔNd-)}Bf>n?9?Umjo0S=,AAz[>àҪNR) B'q:,%0'bf|;(*`fQ-&cKDJ4䅍!C/`(N`P}"g 綧op!=< L{:)vhP!Of gA{*c0,)uUlql p0YxfLm:2J)-OS*)p5]9)7\M1Fg.:o䚽!4K]ܗ\({o{9U}~H IDATjh625trEt"CX)c<$N9?3>G|s% |"Vpc#Vw]hnZcUD&+94xwhH%RY8#Ux L2 סsI#pJ;s 7F<߆' r[ZGA o+dwſ/IJWKݠp3} Dq^/9w81Toz['N\wf RʋvW'CpL2ʬ`jG--KY0 I2JnE%W\;tjr‰8Zr y958^c ;lOv+Rw%N 8a l18DwM)788:x P/,+dqc߹U6TJ0)%9DMIBc)| ۤ"@?he`v0 (؄)H_/-QĢXY-`;igmo`>v`3MvkT>#XJaY-Wh%`Kb?|6+E? : \̎)!m *ba#dդcz-G9;ӕ*}0̓%я)6u]JH ́j.3#Tjq(+Z^fQw QEsY;")4P@N溿RҀsLnKK EQt؍㠤P55[fO[-e!=V K5 Oa~lcIrh1pMº| 78ş6>'q&M)aS?S.f5}+KPa VӃ_ۘAX8)fN}Ĺk ܻ$VS }ܝRܥPݽO;/ QKwPנyzbdsa^K|A *:_z;06wbxJ1VX#];ZG AA >r2FЙ|X9e1;A%o|D,>T_U :C^$a7܆}]'ns I vEn}!7fY #Uqj<'S=̣Kz =!A4ATb:fL{Uԇ\Js)p $A!q;L%f7r::z,z@ J2@ndY ;Q@m}X[a"j1֣+^tabWE ]#YԄHi -H#.Gp]n,7;YOU[)m]·0vm>Ti0=lÙ9GfƸpΣIMq\6?egHЗ]1^1[]:uS1W|3VNz2hJW\6 }®iѹ,[{4uϝVsNW2=Qo znosT&~J?<q/ܺ=X;f58HL% ;^̓=z<,TURuu`Zҥ_#i\Mh[:bPpCO=9'(i`/,S26kAr"GP S!וeUvhk=/ɫ$Պʷ⒘f qu fOG=WZ~}܀@Lp *U(s| r-kUm8钬DŽ,&z&GG5>H~&8 \2W >b^<Q-Hh,#̧[PsB8AT g6\ VYPڥ6zu۪E1\]ݱ  mC̢l.lu(U41 "AdrҤH1p̢gj7R$ށrm9j`gn ;z*mhϨwީg&bAΒ0V|ԗAO1TRD*Vu+gT )dh )\&or0^z}":ȻaFd;}18+nwt+qh 9D][۽߶GjXy ob+|*tL4Gՠ4UӸ:kk9lږeH܃\]0 0܂ EM7 ;TC׶H(V]WEh;Qh`mL7;cGn$0n.)m̡0A8Ƣ4xh!nD#uIݞ=|- c"QV6a]Dɼ = c2}܌ Aɂ8Y;N%q|=t!;;b>Y X.@Iz(P{x)O[ goĝPOR`q{ 艘+4CТ,-r9PԞuǫF!g}1Ĺ>~Xa:WƟkXYT9;{iXegbpa=fV!kPRP4IhǛɎ-as  +k Ɠ%~&!lccl>>d gU'3b3EY\ W]5f3lo2ĝ>@wV H?!#c%Z_TPAP]閴S-ۧ<+6K~8=-OZ2W6k2}|=y J9/!6fL73 y683E9Hnj6E1X+FK95#9uAwLߔƤĦ'x {~h:H5dYnۭ3A/Eu r\߽;hPN;ܔojWOzUuM[ʞVas(Rh:C[ %?g& O-6*U/M{T{Z+3s|F=MFt`5 07p \xôew,rȻjB|WuoRbEC0F4\O/iHZ6\rjhuVo. 9[o l,g`!FX>*ZU6@ yTIJxr ɍxl୴ؘP#(qЂJ̋{PU{* Ƿhh4nt~i?4@U X\\1Tƾc|"UCH-yY 65x .@cyȋ/p;xSX<v@4̶qYFQtUKA G8JA[~w>ae[?Ogq:Vj0 9Dґ\ UEw9WzV7;RЃVZM:6P6:3'N؅Cf?4PuMi(ed&ͥ:FsS]Ym3Su4T{F{p¢*ECA3He"\J*+&1OIU0jsn % XodX = s o40ʐQi8TlxBdς*O`x/=Xb0^;?BsCeɰ `wptHՓ>D 5G a2gxQhz`;7مq <}.NC Tb_ P>K v=w2#n@:6.@K)Fφ^z^fG| RU"Θ(Kw :da%Y3'`WP~k0{V.g[ r|)kEڭ) }^;y'Z )39κۺ`t ݖ#ab/`]]֕Tݟ2%-ow1>.k6EҬCt9́3auh霨YZiu{6*HϞ&稹F7<"7l(WNׇA/URM7{F号~$GƻCtb~ `pϑy)l6.@( .:4p R TV俈 9Wy aЛB)]H^r'4=ݸFHAC:Ku`?M3΍p'Q1NN>`Be *xBS;؉-6O[N!A*9uAɔr^橈EMßUvtT3_-~׶rg,EKKޯ ,u.d0Bޭ-QP.Y|jXUoQ!\.jR a9Ԛ guP۪F)T/qUNqXxR*uA8 B/~`g@6Nwm|,~Kh5&(%+n5O/~%YC$2͡5,?:Q_+B hKu \'8= _(ҿ .? to+̃]ټ՞oW2zx.G"A^*T3ڣq C.4P?irA>8*ZNO*̧KVDb)KRi(F0/hf6!/Ƽ:\4ЩT Ei>u~u/1pQkz30XVp+qY=T'"L!'T+Vup Uq( bN:*PuCEXtA]ߨ%I8sD_}JxTKȣcm06XO!:(8|$~@W(Yu185FRXc]q^xuxSgUy7 mPwx<]m\j.üRTVu,2Cn(3uHe#*`x_[jDpqRXl\QWޒ 2a|xH9Kꤾ.E`4 Vj`Ł)lմFm =יVVm5rzT{߇@e;Uꐤ?wy8H .Yu7fyvz|A]$ $F6]{62> k(O7v%W d~ׇ S =O|]$؞6u{0=8FgGfyY$(=螸)rf eAc2!uvIVٳ;wXaַjX9dZ'"}_`X+im‘R'f깴.dfwpu~rXe_<:$B\rC@ms{1b/g‹x x[GRĻRcS_r V@̃SK$ܣ ݩ%oc;M Fh#<+j*a-͹|xz7(LGWz#uO`q/΂u};CVp8 ( ^Ipy+ j Wţ0"  w\(DU 0 :7^S^+qɫèC^ z*wnAQbI/b9ݺPOlo2΁8 PApy{¿؈V脳p |Baw"Nah]Bf}T`<u#:ON t‹!cq8zGWϸ[rTXNҰDgR^[XA( xcnu)o2 &o>shq&EIXqT p; IDAT1V 3/=*OW8GB%,|dl8`$\#MXS)R w Eqp|f+'oAR(-$\`ȉFhe(ps5kro _wЇzƉlPK[B(ۢ89<r )7l! ں6*A]3],PCOé;c|2GZqn5:&*"rx΃,ew7X[ƛ݇Ԅ{P8$nUvF,;5* =|e\(% ̳VZ |&fRu#hHC9}vmv8#c6_7a==Dd#cG^hMRBw黾s< noFϝ8ȣV9߬GzIWf7;@O,Yt;0UP G{sYB8 43kD4/[?%vf_j=cQj[*_@?GE;H:DZ7TU|G#W/"-KZ<Ǯۡ":s91Ɏ\%J(OZsdMO5_0of u7V^^ n>G v]e'E%=+:n_~t"mBʕ䗺ͯJH:(h7C#?s6FSJiEiV?P{:xEwPޜLUJ?µCޅ2n.qmiDn}zrj*v. Yρ[iE6*@BX`OsgSex`70!S;ְJPz͛Ή EQbEp/沌\"Qh ܪZ85 #xQ2VsvuѸoOOU}ΫJPc1Un9jh]EI΢K0xU<33aOsKд..if̖e/}jajz0TB<#?tWkY{k_Am_ggo<ڕ8U2W]w&1;_Emp&c﬛ >42ߺhoϝ0>s I]'aR}$Iȗok~}#Gݔ"t.$`5ꝾzY3*'gUTMQMF__6FXB,A9y(S@P7d/)>;> F8 GkI1ZD&a+ 1[7R1֨vb]¾M 5ۋ؟Y"ɺνMEXaei Tҙ4¼ӽɱܸ+Sᆵ4n6{?ܶۡ#LЉdCf~iEj~#thX6N(FFta:9'̍mdrw8}3.d!IK_vI.9[^w a)*B1,__!!feV9(D: u[U>scpg쳪x(xP;"b)E*Ę"ݺ-Uu=lj=rxSL/z'eTެ8N\T!|2ڥu]$.ceLa^#XF|&[ԁ,}T@fV!\l\)Mg|X;cU^-#Xh\ԭ1`Ilk?Qkqvg͝j;W. ͉ ކf .!gP]ƙ]7,oPW3PJ2 ^"^Lx@(\Y+ewb?ĵi m:=d})j( ?~+(MI?'CLp} ko?wBv)G7׳TEIO|mUaaL9-cCóؿ)aA/~R猯WF;.8$rjFgڐb(@{ ?fK2jBiuO_]-acާ@ M0z!vg窼E*L_#\Cu6^ UkF5]=\4!/3Rzx&y(hD>r^sA yAEL3;jCMdcpr:pZPZgmc) 2; X(rmm8#voJ+bT,4#6;#cԅv " /.W1;ijB^WV\n4w6WCUya,XLg/Yv+>Ɓ0`V!ܽRkiTA}DˉDMx8LֶQHzEe랊^'pC0h$_8X_ {ΎizD~`FG[dfYEPqAP~`fp^r>B\jpq5P-SL(½Xdr ެWì\YWU|ogCf#';G8bNj"Kmt5JSkG&:JkrCSl4^ *c=߾k:b7NJF>s-P 4߅>X-HPak4EksԴDܮsTFfVy:t)/(#9..\~'`j˱vjp5qWp >3'|Og"9#]X;/V'Mou6n9/j|!Ol4_r)LY3-^-u mC?m-Qgu8hjԦW j.cDC_;314Y 莘'L]dѲ2٭>'2|; .)/g!AKm[ y{t8-KVՐJ+$4H|c\3*(g9c1F=9?#/}lg ~7N Y-}'|*JV#R}%#{-cg9iRdpt ⡛]]J;RS}f} ~>`q7t j;n[o7򉞐zjҏEd4ύDx9o@_)m?`Ja;܇A"#uÌ3beffu+uc4;2ٍEwudtz~&iC| !qI,W,J9Ɂ%BԆU*O5݅*", mFi-s.c=%4J=w F) * knE;Ptmu{ Ge-@V83~sx#xd4V n 8NGX8@4?X.PbWE~m99 @B|#`* FP'm|*&\(j \ $fTJ8Pj/P*/Tí XU8tky l]R1]yk*%zV}o=!I^t]-v"zVIT<-<:^t m qj,Y DW6Bo*+|FE`ނTӹvp<%N=x+u(w[ؑ. nA)h_i1sR0x5w3\~ JSy?浜B;TQ“) "b+C$~LT(`mcHwo [<> BaSCZG c ;C-PڵRU6̒T<t24=$ZhT44Y1wȹnsg,n̑XYp{8E} fP_WJaG׌6:?3k|`*:]X_[(,,hN;xuDBH仾+EP GEFcbϨBǨg.~6:@M͓;iN;Z%{\(pn rH{ZΔA((8E*!bU7244\fwNZg9] (V5 ]'uEw9I2I2Ó1hvKGu!l$!(5;'^q^LoxP7SƺovSQݮ͟Ü>f[;DB89}`n xqs'I.q:<10`6&)J K. 6 k`g!.6'su^m;=֡a܅͸.䬜Kx?bU̵5,y k. wi.g)?SDtj˭-4tX5L (EdO\Mp CE6h-򊱼 z D~s_M knm9%^ )\+g4™#*T0p&<[h聙KNjأ[`2'jA> a/Vhl/IU=P{RuzG,wLӰT'$xcqFCu4xgڸZb˶E'WNЖa> 0~մn+l{_8@c= nW!^e:bUw1^ijM[p";E ?VR5!G@_U0:l#N:9Dw930"T@\emTcQ9y* oDM i3F,?NZ_>tcWab8VL$a#<-<ŦvŖ fžMz _8jnhaWTM6= V0k=ފA" ^3) I[VZ c?Ӄwkp1+M8$zQQe3CU%Y7xq^*z7] myXsͩp¾2c;~>>gHC;"+qQf|2p+v c:nQ euc@ׇ~S-TS==z^2>pBV:/cdN>:^ps-%J\ j tw\7ZxID)iO{ZgD#.D+t[hD ̣l.Р{OMz5&y6Q֛2bMEF߲_W8'CA# w6Z)L2NS~I]/#f1o0D~s]'BK;=5(pۘ,|0 AaLpP\#a8r ;%LܑwOLwLi 4U@%|2Y9NS>Dcl=PTi5fP饍"GʴVp{imqNLyg{گK{ ueb<[iks|%9͠N3] '4Kr%YC62c}j GmYSS(>/4 -V l 7t>R5RHV J-3>^J0dzf~7^\ ;ܼrSW+?䪉ڈ @=<U`;<QPFN_l3RfIy*%h;*~2lpL)pgߑ{j,pD:N.}3҂Bt >JSp,R &@c*>5 Z!gdR3\C}TGVTa+@K_y0̒70.aI e2\opAE gh8y ,I՗P]V}i<V ͉JNy(rs{ԔXn >4+_e X3,N aYN;gq\a6 TQ¤K&[}(TVdvGyjm5$-]܍VהF&r .U8Vƴ:wy GJ@[Ta?I Ekx9*~N7q?%?J5o3?/s\Wԍ=J-(%ƽ;4S~kN+,q7?\" Ku+kY%kY/mݕ=[S8@: 2 -*$Lk55M&$.̌MBÝ^lzoSi/ VR.{/{RpH:>p;F'f ܴ3SilPwWm (h>` )=x_Syu{5'i Z١z=#jioѭeC3y<巾b&70u詠cK@Ľ0iw iRʹn= -#`rq+ h#W|gi_-qZ{;1P>H#jg{YݖwSk1hRKfK3͔\0eq[RKX#xo^(jbe3I]6EM9k^sY)q)`%`"e\vj5\N<콕sK5ױtT.GtX8OUtĮ`@2J8Tξ( lۤ8d|<ݾꇫGْ_iz])9 2>H)dՀB9N+1Bjr5RI dA^~`Q8++,\BM܄f1)7,H㙬 j/14H,SW~ -Ұ?ɔnBGWpT ?0,՚Skա4GN]Yd{+B|N:Jb܋&HǖՐMᵦ<ڴ*(ѕ V7e3Tv 0H/.y\]NZb3'mOej.d]A-)_alP _4ܭBR Ʌ v'p`c8=&f$2 A*^b{Z_M|Gi(DM*V M3K0wRQ`X U=SLXyr:mj ũTYLVj(k;qJ W2;XHToN9qO]v:.=w~8ntAs{; ȖPz)Cp|Cby,麮S$H}T!+awZM4⤐nIYOG N*Z`wM\I q&܆[3 ,lқhXSߜPrS紪7uղ8$[ՔTV1LF9IuArAn)*B )~ހxEh' Ʈdj'ͿV#x۸)T) ̣&BZE/8x1I1: na|(JBE~~X#.o P{)r4Pg;"idf;'I&U j(gqRe1NAa(wଖ2kU[+Pʽ7>e'rb؀7!Aƍ,2iEl6ӄp94oA. J2ZT F3cZ'vY5r +Θ%l;a! E\nB| G]k OS"R'ez`1)rJ[~euϔ'qIⓘfcb@7#.Sg%y$`z2SrUO0-#.KHP.3%Yd$ΰH̴ɢWf[! L ie)bKmy {ud; |AV|1r- C S9Eo\TGe^b?~Bi ̡ SS}ij3,0U1jDtHXrvB+']8\B܁RSJf@?Ey#_bR ]an=q 3'hšL$13(~a^3fdd驽.tgP숃3O~F(eK"ۺ&RBp>.J),0br1 &c_(G%Aj ܣ[ͭe*EDف3|pYJ/}63Bc%T9*Dݼ_C0JV[r-|JJ79C3;K:Rv@-2t*k g3_**'ɉ_?]5DU)`zT_ŚX6YkI jj9F:[i!!윖=z! iOsr,ݰA&؆ qJ9L*ͦ3=0;}w  < ]H+d>8] /Gٝ% /q I⬓badM6 bzǃķpYkPlP1,w[~'8 M3%l<ݵP @%!cxjhvp ITHf5⇴Nx|¹ KXZtLy6Yw@sI Rk՗c<ݙ\*u2:m}V☐,2;ƵWu/5zs5CVhiO;iy TE5UBgW r2RA5Q "@*Mb4P#[,8^γ/JzNjt!zNN_laHيq_VrLLpyWM<;'_ꫩP=;TK+j?~y.ckR={u'Yh[qv Ɏg]B{^zyT0PNUi*aݤ: jeVr!p*><*oN+"sP,|eAا^_ܓ?o!S['7E`ske =aWe 6Q`+q6 ՃwK` 7v?'3/g9QbI׬)^^MV=({綫(فNwg?Xt =V?}7Y~UgєB`d usg(d椔Ҭ\_3XL`>֐kr}nƇ`N1JtT3&\Sw{`l<\HL7ʔ?vSYF`"FKC3FA ܑg_0*뭸 oX= xƌa:9SˬCh/;Q_PVx JsHe(_TXqLRSiok=vTh/D.XiN(Kx!љpf'E%c3hJ?A4$Xuj^8!jI4W1,YvVv44'!% <? Uנ;|S5('I#$+ޔM=pIΓL8FaK,,=xVZ"I&d*{!>8 _7STVPY#Kg +^ͥ s( %C+ m$&%=NG'鍿"a7,{u;]¹0ᚘR&s߶Ә/za:kJ k,;;667e( ʄ*w%`o&J@uL+CZhƫvTao7K4QukS@򲏛H zx&ǘ ?,,=p`v(('dt9%;] MJ!vaԀRjqqEYě=:=$U@/6: 5| @ŶT:@C$% F/dItNCp>dN8DS SBQRE0OHh\э&Ky%O5T;஛:xoǬP8GlhK)5A:8Nd0N8EVx&:m{#gªY6;ktWZZqaqF~<,JDepb*aT{遁3sgfUU ea-΀WCd4QHP p?)yk^M9)/a4WaXRM4F^@c iY ;WOD܆1\DfA.hf2oA(dfMaMٮO_P]j-9hȧ B* ;Š3u Ui(X{N~C*T@%bVf^\Ě!xiq|x c| w9a 9O [-x Q?XIvA*>"u0HFS0zLzJ}b_p:I3^&dUjz;6cއHUѵv濼Tt- ֫deK0.DyHt_Z¥RI߾aUdAdzѥA\u=4Gn4.o7HX4s8+1%u^IUii,p|yMShَ#HU+Hn4XIfF*jT͐TwԆjpsPwüU1|0bV[-&ýKׄBX2٧GH n7C.5]$O4b9(hbKZ )Q2Uu;۳ٷ R1q!]~u# CekPq>$LD@%nH`{kY%wc"]Ȕ3P0t8p^2-SDupy#cXF<(HI(c"T)G/e ͥ |tZ sQTdHii`u<+K2iN1 Ga8\IR\n-aikUk{5,9$Ur0A`Z|Cg) L5` )>=Hw"L=eu_4ס%*7d9mAeR=ꪐƄn`b.L;!9b&P\ǗlW5_"3/j* +Hg էTWߩ.pB6HQAN+Q:#̧IrONa|2Uw)AOq*f1'B 90a K$;σ9 T {,Yt4ajvV^]\e CK*f* d PZh IDATJ W=lkot봢4a+1' H ʃa/jW#.b慳:[f%mNGT;sjXNRieq eJ\U]h4qAji/ӝMv UOボרpF'2E3HCi-NNN9YXAUʩى2H$[X(#0=%) p!kiFLvIi**OyrwSDX FStҁHk'F~)1#~KB jѡdqSة*6ذ 1:gAqjqlr)GX¿ɚZK){in70X6}J[lWslx AG~h*q5]^ӵ㞔jiPqe VP;'#LajUUKeV:g}S9~ Y'pFg`Ox,Hئm8!UAlg1o#D oC;9aV]ؤaaOR,7c*f/A֮<ƏxQ}/OB{53 =Yl|!)irЌ@¿_Uڞx/ei+{Zz4̅<ü5y1drsMHw/#҄9Q3xxLP.)TrbI&#ԧ>k5h8spK=X_xTMFz9V#T $n n,˹+>wuZDh&HչJ B88l\ $tl) p?{6w3LpE{zc4+TK~sJTWBWޓ[Hi 񬑑ND/M. LEX {UHN8]v}fW "al* !/Z ua}W qohb oc雓>4o}:xPOR@pkXˡ=LgK75 5G,/'FII>w0=/QVQwz{GEpצ |?2u@Jr5\+}.n06MwJ]vNTc 7cG 2PKd* `-]x&^RMA S]a%p-0 q jnPiF2F)d-|>8yh$A=k2> ; 7;V"p},w`,ϙ!+7%vX0XH=$ȅ-8r,apħCmr.H%٤R &IjYgzQ0j^T Sc1HU tS5XNCdrIR\_}uI7}W(k3̹t ܊>l69 R۠=XF ŋ _TN G ]@ ),RzI | DCJX!YX V893쇣rg쥣3{8*K1I\prrc3|.s|AxL4f62*Q4:, |4':+"621]/=dI'N7a%mzi KĕR*&ҫMlSg:%5, ̑5ҝ;ƩcE٧SKi%/:$/^NjX)<o᪬1źjUk<_E8CFC0D`:HG`pV:ùϯ#C@C.2i9mCn:t ,t&ajm *R]Ua4 pT[܍'e.(X/A8bAT-=CWwTpk>r O8%K1{f'co=Mn$?t UXEqz//J7;72xझurQy.ez鼞iOY z5eT]VPQ옝^8ted<)85L}mϔN#>k&sl6դna2JrH̥sf!Luw]%I5=%Md( :>{'LIA$ʋ{)`2O1֙o@nLMe2p D YlsΫd.E9'fΟ׵OY4N#L@-og{7MXe;ʚ9gg:g(jSwv}vEVsBT\0f劳T h wh)0X Mc,93VǮ،n.O.rW*TC5O]jűW 3l$<RYZ"/ $X?`9 1ڸ60F$ i/Pma<*,t'+LK\U)TK̂z 9FD$L脿Mi t؍;pXꈭa*K7͐xp ga'C1 ~4E}A8AgOd5`)5|\$5 0QHH+%?>ʔHHM 5NjG1Δʢ^6ѰF!bZqĮ?V5Sj3bF|w  RIh^,"0 ǵ?ߕn7c.U椎:BHw"0@C\@!d=w1xF Rt^'F=lK5x4 uaM@xb=5kLrYs?x3pS1V6 jֶ?Hhӡ H%}5 e/i'{3lAcPdɎ׫Aj9t!c E$#flNZQN{umZD^s$_ 4bF)a'ƍ9騫j&:S`>f:,$+ ^G0Mf"mtK./%YIG%d6 o0c1xeF6ސcl {ćB 4jk|At ^ NKd,<@ޠC(9! Ʉźxzt< hӠ@_y]gPG~8*X{k5]rs.ԁ*Cm1AuC<+u:t2V ;=Ul~EfCf̍7*a|@z 7UŢV~uqo4q5wG@3Ϸ/7sܣfI)aH?环lL$C?uJ=vH/$%"3T )+Qq"n/r@Ћ"w؟ח~>)*|rHb! Igq~6f wd-ktnB&]G[-u߹֩oˮ-x;Vf"n~1jU*Q4i]TE_UE bg/%QVS,)i9 wì?˟)@*A*}ɼ3Ϥz_뿺\R^+XAvmt#T3Y2CaR@m qק%Ng2\7a7Ԃ0QCyCM3B[DG(xcIe ԗ7p'9YĪ+xC6 :xniw_$Th2{3۩i؏9tn]@Vi/d 8KLw'.0xj6t.>g>tTZzoG_}dW38SR_o :K.%0[܁W H4 Ӛ򊃴aMh(/&tFx\+y",>VaCHkx|U ܠTKA~$Ns[F( ;a_^;t~X8Kr5uUrE=Gm,(ѼD6}:w\??85d I;2 ؈]8l( c_(L)%ܕj\wjQK/+$r_R (umZ-u4͒NIyRѪbv hBLu6lTuQSeYݰ.ߒVJVءts'\ ulo¹-Ԙ[#󱃩K0APpݣh)} TX"XX ВcS!7q _P0*WP5=:`,0 OR,% =4HPntiuX)qJrF N =~RK`.H$4MQ'l,­\QH/0NFقA|qsf8<=ż171!ha;$7U)d!<4&9g_4vN&]y/ՠKA4 bflQ*5Gߝ)=X/ܟ6әä`H;9 aXLf[C›2js(pVy&S4l49I)\{ت$VSΊ[o>$IrR9M; L S;"11e\F|<%4cTW+ S/}aYf󙮪MT0nY͑^2蠵uz}e)Gm >o{;PCN8|1nq2qj95! dJ&y:VqW=-@ Ԧro2熹OvP?Z!-Vh7J61k4r xx6Nn;3 Y->kRc;xy gnZ^{SiGqV:LT̀{0Q3}[U2%z[ *WN'1\Q{*9P)˹Y#q)>32p,=ډy rmzeL8؆͂9 8s9L C+$ɿ(^1 @U]烰Kp 48e>49$3B<(;m80l .d)Ν0͡vxG솭e: ?uuNp"KY)VrCڅ|(2}m1Rŕ.`jY2@p!ʼnLc3B3>9\_!X _:'(71TZ^@ =\z5rcEUg7}Esks;x8il%s-r0Um̌#▢ԑhNq!p-7e F! S =H,# 5O˄3&"ؘKӟϘEBf:%CF3åޅP78/e"\s? I4>^H!%[]-õ8SRZ՗`LX1\TD*q7-F#`n!ֺ"?$7Α Q×V0>AJCJPS~LǕxIIOY0fc[{T\YVS<#2h / &T;tX|X=ҟgZ`!t815~8s]%LJ 3rbi^ȗ11!B*Bia8+ `a5_CG pt0>ɭ8۝%]7{$NDsB&p._ %'6)T3H0'CWӃ3j'{K@Ns+r"GSXB dYȵ+ҁbC|,7, 2a6OCGI7wECҮ jBgwe儩no, uGy0h$jB )L3gV+Z㊅ Τ]*W1t4s`fk%+p^m4qY[~g3MRM-fL2u$=U&+\~:JyDŽ!;ݶ=NgTa;y䲃NP`-k|fN vWQfr芈eɒXaCuK"4VW( %%,Π-0{ pFci7ɳJ* ꅴi77 %M8m,SƈCTPsiøƥ`}6yi95rp;:f:p3Y[hL7$)Nr-H+6YsEsI9' ;/ŸLN@8vø6OpNS5.V䒪Xyoz*=SUΏi!2D 8\ I 쏵h])TJ]K/iNkJP/>KQ@t,rSeܤ#R$zpUc"h*_8i ;3SUh : ? YaN̅3 u 3aD&L pM\~X;e;Lj=Kp\X#QXj 7 +XB*\T{Iui $dK('WQ\sdj@A=>Gb( `<n[&P:Op,2 m!0BG.<2a;ǹЌ_M8 w||U.N\?8NR$ncr^Az !V4c$ N E+ 6R$a>dOpJ)S*Q.A<R@v 6Y垜ǻ쒂1wF0|,is4aL6rS- ݩ;h<-L 1G.k+7G [q3)` &DoREa8ʸ 1v%ߩ*GC .S3{+>SBrA?Ax?0(6eUe6C-9 Fb3sjT\5 B>-!h SN/i;$OѰ{;΁ٴPF=aX9,1չnsbe ?~~ 2/lN_~x,r=9%!?Ufџ҉;:0M zP p(C!H@_& bX80Nd%?g\ M$\)I&ŗ.?;"yy"qi%V'#2^LT縓o90H-5׼ ds+Bcw} d.cb)f VZT9:+J(ʋ PB-ݖ&:9|L:Z=OX%YOeM||V:Vq NHK@'(Y=Tq6M?]F=bB,.=.އIN@c.gnRw*& KԷ^I+gI:VStp u>H"w%.|î,%a. V7舐+Q\kZI/z׃q|\}W)L.\+ #% l4D}qPQG7TMoN[.LK1ROQ ~Ƴp B񝕞bfj鱚Yaj[ (ʏ 1;9$s$%+HB~ 9 Ր{tSJF/qE.fY8u<3xZҚ]F3>8ȷ)ye_x~`o3Zwqzd)K9±Pv{ǓCdTlrbI*.Ao>jA? SwI*sHbF7-Qq !?U~疞2M"$ͨ&tNRma7k5O;4Wtw|o;UҼ iA˾#0TMz`$^wh%dVezfKՐJJ(x;S"PC}CyER3*#+`SdV(kT3{5`$Υ9]X{AlKN>ZdKURsx/UL ޑ ?MV|>mEcݡz,]w]?M~cS5I7%s~l(i40< @@`C`|RŤGq<[Dۑ3C\Gѷ'[٭UwoH<7LdV;)8RxtTO<}%L,JPhz+];/Ljn$~6ӁIq/ j~ )J>OdT0a}܉0!҈s{Oe.Wjn'ڹe';Fy?{D L7U[٥iꙟt@:;no@x9ݒN&Gou]6U"I\Bb*DW7b~țPʄ`Zi6ʧCCfSiUMR'8np~B=,EmuRl <ΜhyL64Vk%2ދE7`Œ0hxKq5/*U9^>ͱ3ƣZvQ, h*\ ;;Gl`:) g}ƹJXtgX`Vi8k$3ztYR#=*j@en@Mh4V婹ʨNXOCy0{.5ѝ76&[]su E ^O(+py6Ʀlhȟ(5`]D)h׃GdBQvDvǹ_M Cb%8˙ 7L>7tX<} 'r )ʌWUqucSr.D(')*Ᲊ3AG먳Tf)|wbckps9NmsZ:bEg7 bcMcQY ߤ̓IڙɃadj4pStTIԁgh ߘeZ,|MotՅ;Hhª"džP@J+IPQkcUCiwPW)lwp1ptM:iHxurSApiz:M ɁK8i&9%+d)Gh0p"=lJ x?o*81?=tR,"Ppn`2U? `CըCr=VsuIe;)rx?y"Kx:GKF+aN|. igBWpuUg)o^Kx_dS+,$ 1捿eBv_03q9 e|3f p˛J_Mik :|%j>hasB6qqD +AVswTsωf*2T0Ij)~X'>5h$yM' o{|)C4A㤝{H_T19D3`Kbwf]"t ơ{ī%/p( 460S`w1#Q* ?7pJVI5I hcLA8RKjJZȥFK*|Bu!YL \fNeqB52t9p29&<~`KHn̅(~(k&Ժ2Nr,_$'S2-TЎ<S3NX¥9X@+JLY(#4t $"&,5a^LU!uHa,M4ʨ9' rv~S?Kox pkg6qfRGQc4Ovi oxG: CUOj7LZyu2lyHfWv@5n%Tf){0МCmY&Ln\j;M3g g1^vQ*>y[TfW^DZ_;͑<|.p3vś8`;upeCV0q) J$]pb$=e IQp˼G3cq܀}osc5c,V3CSfΤɋłs:cuː!RX=*$je j/QHuN~8qeyଝw<9Ob a mÒzbZU[m3\Y\.R[]a,47I]o:?&P,,"`KO= y[xq=R~ Nq/YzBҸW /D.}u@U PLsPb]==nb޵jL?I;?aUp/B>>1\|u%zNVm!eUi!x7zY餷;N]2`h/ҚI1NAHfNzet2mEz[c%:9U>'?o=0URpm,.$\$'}'t/QuC :襚wq16_%\4ևr$dLȣZ >VKBHn1Y"n`a}^hG^jx9E`2tQC.!-鸊KRJ۰H-+ {#<3 =+#Id2x{yK8pFnyWrFAHaZ@9A%-^6|S+Ȃy p&pf~: HHX%ŏRH**] n4Пcf^ky.h1 44  >owq%m+u tpH L#a 0A#Xw|ϔi,Q\O{XiC90 ;q$k!Ͱ d)`KChBU^KU(V&U  i`%|8HCq# 0I~ۍY*ٱ)|kX 1D W0=pIyh!!I) i-pmo8 s?肥%Yrߜ`]o1)VDG{iIeQ%^e z=`*HݡC6ăE!uh6TIjIvΎ0\JskZv骆ǩ)~:`aILUGc0;JSN+ Q IDAT$B7owf ﺫL"&9*LUuNPjtU~%!_7yy&3].z[5u9h砤1AsӴVdn^kuR+fNg#[)ќW]qքXo>RJP,w?y\S 朝7*f2?!i4QQ5vG i 605`)-tӿ =tQ%R -F0MΪ]/%{f: 붫w N n:z-6uW:U64}LrKQw#ִיDezO ]4LN}LaWv)exw1uHur\6(juIZ0aj1cMZS  +7ǻ; OQ1]{\܃C6yFxpi&W.kw_ ܆aRO3꫃8;i 4R~ߺjM½tYJ۟2(m/=9lڽ̳ޫȣg=끩TAv?OU5ݪ\7"g9Sxsȱ4>x3av\ gq3Rlf}VHʺKy߹F{=){x]-l:“5++ dY8jPܿHRgq늜+9h']Tb_0*X'4N)jAM, ƉtMsRArn`I:(TMi%bd`^I%kyY.%-qS>X©%ImiUݖ'Jcb*Ǒ/uDQXձ+"5Gq:N6/e8[Ւr_~S5 wt:a&%&7s-R˅/e8:RsLPpͅGR8 .U  /p/cʦ KV GK\e(#S )xOS_a';K6Q$%}RD捊'WNb&R}<ᴚHΊE1, pܤ䶁`ZW0i0Qu^  I$Eg+~>;Wnܔ+{&NutfI ._s٘mV-Rq܎k^oHw/Вޣa-.zXXlsWO禫UQ5ۨVHgW*녚夅6d6᡿({ UkcQ/N[ڬ&l+\F̑>`s {ßbU"Z8Gtky8fZۊ[s$)4ȌlhA|BQj3O XWYR ,ԡQ8(+d+•.?c ;љ)ߓKa+閺)+&ҖH=hCUW)^劗2֊Ojv$?MPT"h\F{"9V>'34ju{_0wQ(3u{봇̠{*/eA SoXg5\E_ԯ!B_,s q1ndƌǧpQ_tb[fYJ \֜ ?R^ʄ%q-'@:g>!p;C2Bc *@TܓvC/mo+"O >R)JB}P,TCZSa$.4zC|%NEl8E2A-d\&?ot6-gyJmXm3sbҊTOTLZR؁^YUeg ,K)ef>R^K۩(7#)<"9 k0BRJW*^!Лًk^yg0 ϘW|juLp;_)Q I%V`(%eZK&s\:oA#u 4.ҋi!P\Jq;gy 먯MeύM%S@~Oe&ZsYSZ2t<688*`Ne܇$8a2/N a*RwZ 9RL'|pel"` {wީWHX@8A4rB%?A W}=Mm۶m۶ll;$Md[ٌ. T_̃RN99t\7bba7T&e}T CJB>v )&ipf|s_1OR^X/՜@c7:x)ګ 2X{),uLFԅY9vx6Iel_WK{Zgԥ1nY<ٝ6Hh[晭;Rk/x breTϕR3e̦݇hp=;BfLu=BQWE:y)˾:_'husn|g-ILõEcMẽ'ETm(w ;v7LfvO@) P~t岺-b.ifLK,$kUv= wo$<7s9r*c $yXE!S^2Re%g񞗹+hm`t? =-'3zi0 s xGOwPFJ>*sʴaB),+8! `R)1-|rAZ+:fϹ t޸'%tYT_ʛ\\rby9ܢx˯4Su۸ox_Cbf\J%J͋ lpR-9w^j1—\0(V+`5QP5sD>c /bQ|6ƘSv׫U-wh0Φv(Il5ٜ1CX $X2Szah !AP*d"=M 8wY'y9bBOYAoRIzsJvI8# gqQ5k& TEt,/s&XΒ@(EG_Z8{ H>)|G Q==O3mEA}3yi.e*L]"U\umxFdm%eI]"LѦjcE.`~GnI)-a/haFJI̅( @2.og\fAF4EN E\i!Mt</U?i |؁/~&r<>n;M3\55*FQ2S̅p(\缃)p &qŠ';|W3 cAcL%sA9+$t)29%c<{uJjMPU m T))2pOy`K6!P^[Mz op4~FQ4W@e)T9Vg `VZaeaَ;-iP~p4*<ǡ}횲zF54IZsVR~ntp0iJ;A]īx{4! ecݷ[j੮Y~{TR=ȫL-}IAiy&T!=`yyBcOIkSUYk%l 0bYLR>LӃ;:nJvϦgT)@UI?lt@I>3u[k M>w'>&n :0gWècb(sI2FaKЫ0Wv= B3eE}փûe ➁c2tv>vKFKYX C`9UvDr+4. snAJ#T>aҍ;_<.)W᭙3\){9i6C:LxSpVd2Xn]ʋɸ,2wS >,B$Յ5d}پDH>Bm7圸ϻ9t5f8`@k\tFrB}zJpF NB~Ə |3Zv(-E! /8ImS2A5u Zӱ"퐆E.j 0 0 Ce0U-(k2 ۩$,U3MM6=T3[twZNCnI\Ϲ)() CpA.ce, %Ѹc+aXP5trȊU-|)vpA]!WT  3z%͡! j$ oo / @J["d8R}0UC^?i1[o riy.A2,ɧA&؛]>VƏI \P;h )opLmeEu.N8)6RY !=̅}X?Aaaҭeq(ũ^*TF{: ϱ9XƆfxcOwX٠<*"X른hj~npTh mI!URt"j$<6TFC$=ROBh`( @O6 <*+8Ş ^uB3W;u:pNZ7s*tOIlh7u ?VMq5ZA?"2Ow39#ԇ'0=xתҜW 91 gWƏKxÑ9'2 "6v sͤ7aDM!<ӼNUoruVÙ)cйf:/FpdžX\Pvc<%R-1chuŷLXxoc&/Wށvh 汼QʮW8rJ<Mׂb#YQ19>́R :r:VZn:%сf<*2 5TB&zxܭ=dAp a%rH'Sx]/Mk:ipP ~dQϱ)Ʋԃd|V{|ڧz3uҕ"!-rPO=\9;RR0T^vp9n7 J. Ir4ҘT VscR:Hsl ]u_Lؓ:MBi0E,(bP<2@|.^2DZnZ]8W@%px6URmwܓ&(7%*zHŇPllvH2{sA .YpZP;pXR P1:)q ~^ o Zc  }d4b2HK }` PF2xM/.gB[X`14]!|vTKb+6,3!ֹٱ'Mjx.?2/=!N9L!;Nu++{$P R)%)h,YxT O}o+]Nw_4"UJ0o/5MSJV9 /j 2'UϭPL ڋ(/QRms`~ʽ<v_f8x9_n_};[ozݐrP8HưOᕬvNv'h{ ǜ[qO⏒w [[ǧ=*3m0ؐ09<3}a">x h*I![!=Hۓ<`p~+7 ٳ(fvS4C>!6l][i?P'7Mj_ c n$a]+ 5Щge!u/sRUX[vb4>2j'3pkEn^M|w9 < IDATv'xwWCdMOJ:\ z]²&7ŒA)aL0HM`^;w8 Qx ->n1JwS ^fdI bֱ7FCՠ^RԳB_VkE]oIByﶒRAcIlͥEP1͆0s*. @sp[z c$3Ƣ4'S5C4\۪AVӅWqxE+J<y\@.i]8:< /[f8K=4i&*'LsawCWځp,n,4Š4:uSgL3 MRI ꤳd?蟴k&wR.v] ~;hSЩù tL!In%+Lo+K,PǥjTI1$IRon=g'85K b9lvC5y* 0l ;iXMҗWƓ)~N<ā'\tFys#U*y^32\?JJ V̗Ŷ je0-7TUW!J7S5v?W!̣zLjRC rw/KeOVmp0h,'W0S[䢛]CoHM_ >v_PUvؓ33I^!<|t5>pގv؝M?wljt8)᫿χyYc=?TR7յ(mvr!m m2I S yb>Ñ? l) .g̠hEЗߐ ɟv~s Žl7Dzkd݊cF ŭqqr`sSQ,n}YoՕ &k ]7sm* f>|䡦QRօ *}!)fg8珻].6Z n>؅C`5 wLZ+p{n>4B1@W`#ਲ਼SIUe mG ry~c-/ǵe'oaҞԇ/$ĺ f0RJ_+wd BORZigywN8j?sxK2+򭵿Bc?kL?97=rxGL~Ìo ZaN|UbjSUS<*7]opjtV:*mA՗R&Ш12gvqj\ ,g?t}H]C'9tf #zsGlM:0ЩT snnH&D@ sO{n4$oeO|1&o 遼8˚BTo;D ž#jTBN_xm&jH1Huv]_rPrza#h54Iaq@455;pTgGhh !3=PNŌT6^G!t]*(J< n|% Xnf_W$DW tlo|A͵:d;DqUȔ*XS;ך;ҶM;ݿ)' '~f}*WOt.R(RiUisa_.#8czx(y?_xW*@N{7֩e\)Mg(r ŤdxoCq5o #Sڴ5:Yo*:UNCJЅ0fgQ 6-~]h}(He .6|M~gԃ"du*O; )sdǾvH W9 : ymiBrSgBx p W#^a܁߃CۥJx/|Ii=pϽ ,\fI ]LA[G.#Gf|EaXR)x0&M'f8݉fbG%b 3'z旋nj ֶ{\,ë䙬I2i`2KwJ+:6ԼDѿX[iT[̣S_idڛ蹮.n KB;yߪxbQBͨjn 8Nr0gr$'ƛ}wM?3?LMy:S%ah `dNj-\ YEaoqUT= bA\֓n].[A\q}Tu&v]U*QCD* (=VMe}F5\IL_(?FnO3],N1 [b== ]wZ2^Q#F Yb'w6@:):*doR?PY0vI+i WL爤i^O^jHVFVmn#i^pQ6:ܜ%=z8SCi*5I7=ePk0BQ*UYLCp&\nG(6=9SFA2 _cA4M1w-. r q!F0lpJ\HS! M/v 3!S81F&d&/&{حDނIK:g4,x/gJd_a5/rgLTLΪv{rZJa/#/V`9y^O0+tV6)e=T4 <jFBYCoz&>q墌\A>;]ޥ׼rJ0LzR. zVs"s)6Z#8LG7)ݣx~%y`FXĩ(N )Оb?%1kC( p  Boh,wU2C+ p4~ RBޙܑN8a'0 yl`UiA%DO(lN려tbXfx%EaTCuB/ _'5-M :?ױR.!Q0[RjanEw:Maa2"t'L=Ժ8ƤT>IGhZnyK)Te9VMpۀ?iuOe8&N :et`NXy{ 7M1؊K%)+ߜ:P~)-p I7` zF%?n\_Rq]<@j%-TZTD2a4?L J639nZKxt㌔zʯs,2 + ?~zo i-3ZJ8Z3%ܮ: ” VVQ͝@ z8଒2 b+:.8JE%RFzl1VRC' x5x.^ Vi ANP3j U3{!ϔznN{*IIU}6dU\JW;Yp{U& wd1o B@YQ8NQmx[-z&`U^~$QZgsaW;1N?.(R|B .刔ety,#=Hwy⾗1hNT"K(΄l>'&ZjgAm EV~FRIC1?hr'WeMH3}cX1;YdTE]%?x.g9AZhe5Y L ^K+w&V17±a1@k,fŧ8LH2ˮ4ֲJ.dUnj: E %͛屺$/TH'(K a?L dSNOFGݿq-pjXp0#dg;E1F>yo,M)vaFT-8 fuOm~,Ht˜CK5%2K|5`.m8@•Z8)6MtXxB;gr桼 D,[|>EyUicx7*>ϐ*<B䧡D~AISn` O("2\K3À*K;gp( |/PcqC#!;sG/WGCV_=~R]0]`''nLa .!w3q`)gsJ¥ W]ldUa똞XpE[Uv]0j^.&N1zAmX_"j$ǹP y0>a Q?lw_.($i77ĊGw7_M9!yGLțo7/:u|Xڛ\b0E {U҃Q٧bK?hZNz0lEƤ– +7SxagBo}&|7czDB/6Oí ]NPQ~]5=!KMKy.ݗ'3H3ɹ;;&*VNC o&$ˏN渹#sݱKμ8ǡ~. S?OzytSQg L2tt2V-0p==….7y7m~;Qu5v35+IBj@IP@=ozw(Y' % eźXS<6ja'Œz=3#zkRI%d01|[Ly -yKk<ƪsVq驥zԘE)n©p޾i{7,+`[gfUW폩t-\`o|SĀԣzX駚?Q_..٭rJ>oUZ]׳ 7+GLo\d <'M;`^v5Q.j΃,N-  _Qmy)Jk ߔ(%`?V]&0 n*U(m%7kJ5h >ޓø#< MOX|`]7]Ԁƪ yxZ%!03=0H`ldn+6 l)t, m2`iыyp81חžeZ>_Xux2e^PG*5`&T`Si`+Օ.r ɣIfT0C`/wƜX2NS,pԐ/3R~MInyz&{*ūd:M :;eh\'-GV1@]h ԗp!=;Jy>'І+@9G_yh-䪬.Tc,7 UqZFZe2 .s&P1GyY}ܐ:RZHI肺-<)]]oO9F~2sc)WHQkXk `KeY\[.*pęgz Qy]DSNS.kGݞlwNn*Ser$?Ǿˉ&D !v? V_rTwV_y=T{>zVumrr2n3747Lƫ'ZocIhP'd&nakL`f QR])a7X9TKj5::Q`:Xiw3㬜T 7J[6+v]bZ gX9tVaDBiK,v<ܰ2S`2Nz{b D']/60?,1 vxL#Jnz lU}<ޛԛژٴ8SLҁz$]v5xs; D<0ἴ05uM@W* x*|y7i5vmjYmٶk&??n#zl?}Q@1cR1Nj~,Mu\!xz?h.zM0@`!V?A+8[ 06bY=NՅFXH^) Sa_h]h\3LE p8CA8RAĘCiI4P<'둺UPح'r}u>0Fb"TAҌC (+ CF!{$ަRQ4Um.V@.2DA8mL<ƫzy.OQQ*><չ|Lg!ܠ6;ÂF0)8?!NiM{ քfkd8O~V1Ș`tZaEU{V9qg*D.Aix+.D9  [ #NxlJAfߡ:$S1y<0#te#-UYbK.1zXKKQV'_0Vf"rxR},^Ǭ6o*je֗ xSWR+kBKiyiM%.kq6P%pO? &atTQ$M18YǪHϥ.VTPsYOI4 Z npo8yA/>fZv`k%5Ԃtv5ZnT63jjkޘ!=8:|V͗R c(̡E#tW|Z/$;qƋKgÛTh)E$8384d[* .|h$>O`nuǾ"t2'1WC>+Z}jxU@{6tK`7<=Ϳ~j'ة#ںOpj2+lҰoX I¾'鏃Z8G0QzH݇XٻN1*Cubآ}}[e]=;P̛|zo쮿S?գ < q;/m\I8#?T{^ 5p't^* RCIul8c#s}YMdN:pLBdnpB% w!fA}L'!Bm5 媖Ec}Et@~+^, 7p/ ̵Y{Ҟ=.8=6fMHHT7juZ6s *fnsPpeTee$jF'1Cla2?H:A*} |^i cTHUW="Tp*)J? p~<䛐J$;SJdQ7q;Ə qc{JIeK C^'T95ف;zɥ=vRg[jucK(vЀ@#tu;RiuQ5KEYmQC# Bƪ6ks@-n$%xֽp&/4z+4٭n*0|!e 0 !h?˶Ce$JqyT==0_OQؒY'^pqwg7E\'fwW]ripf6#ev$at \ցMC|,k+(sF,xl}T6*`  UBHc{hWpm%n*}Jx̖H[;0yoȁY  ޫv؈tYAn:Aq^C'}@qp*t~3~[fC3n4ϝ%t^L8.%s]w*A(=p Ji9$5's,#""F :> W0p]rƕԝg܏#lO5qcL/C,$KUYdHvqpd1)І;h. 77GZǸ8ڼWFE6||OՅJy'x(Y#h$G?:ӱ0+G^ltw#uޚЭBuV1/ESY܃L*?m*9!AFK [deFS sK k`zhhL6j氚I c!A=V /^] F(2QE5Jr;́&nЖF)CԷ5̀ o XnR8|PVBt9L\>xfhg)E;xì]XdKċM$Ag[D h@a&ci [ 㿝Η)[J%>FR :gwXʙ}*S`;]!4(zc-IcϋힰL?Fc;ޝ-xEF2^Pe S%iAJ:Jg楜$so h}?\`U_π"7WV1u*ҞIS;9gfJ}j۫5ꇞ&7_8x'}Z23syePeGڒ[¥dp2򑔿-%ܝU5(&`'dPm?5_R$rƺFŻSvGVck'J^k.i*$-V9 ]>X{H5摼x紑^^jεp>a_4x/et4&{içn|†WIENPrY3`P'5`6A]tNs@oؗ|oFy sFiTD@+ ?bs5˰!&|=UI>,WvMd'ێ.̣z7ϰ">[كgO;/S~;o`̂t]a7&)^p twbv@%{LԍR{0ZSi,y2Ngz&]\\R2{(P!Q'N/dUN+DhQH4܇YTnƶH JF9_<ހ5[¤8&flX@'iq/;!7e4|z2& 7E`y?!-2cDꐂ0RYd.7FAA=XJW5L-@[xS1Ig"4:I1vAPT|U]`SՄoBya9tR|&*c1 iŝq.DI. e!Fp" QWg)1FIF)Ni8\g"?x~U\>\ 3Fx.co/-9V&fHMԂ7&^s2 ]!CRBj@}i 7Y;-#-4Ɲq u("u0恆X qsic6h=Aj|H+)i*qNagecOoj)7T8L?+ya,VO`ބnnaP㹫uL:SҞjVREǝH<K)TVr=[̳Ua 8uZkyh9]p p~D]^hCe5,a Wǻq/^v° ;uI Ђ7Zߊ[I˙R :.&U$x ss;nX9\IA<*DZOOP @)kҮ/S#+! n์RgK`uEf[93r}x tpVuZ1j*])#qGqQ\ q, ebS_,Άn i/PG?s=P`އycYÚH)&eWO>C_a%F/wS&8hGTmn2\zw#,_d"@tv>볎#tg ~` );#,4voWrHc*}+Xeh Y,dH(?^0[3`1I3*zߐBIn>r->P"y l:ߒMx))`2Pz1yOcT!bj }+*=SN[%7#,',UT:8ɇ%a<^n$F^K(_0ޫPL%,ἬڐUf (  Ў.sq鄫Pheor!`[y2@ޯ/qF)<`~*ƲPFk8 GAnt[RM`ݗ89g^I^Q,V &k8KaV9"p~Ca ϒ̕ݒS^g$AO4N/*prw2fbqON!&B/n*7؁A_CA-i9WcTHQW?z]qSd>D(i M̆ v4FHw}ADZ:ҁ/ѫS)s3R9CVFFh:8]LL G30\j ]pMrcWՊ2b {|?>jþ#aΠ)zTuJ}t~.T5]ް.Q)l kOῸ0s@A\2g0wԯU}))%6WWcT% 5Cu=2 OC}#q`M36`оA#. .7J9ۗaI V?U)s 6v(%m~g  IDAT < <wUYst5Qi۩/#7cBr$:}W)`?s ~[i%ny퍴Quhjl$WrG/>:K*8ӘT)>czJ0s-C6@5QLoԗ,8 $\H"6Fa'Ź ` LWSTejP^ZalF`0JpT&JQ K-U,\+p>WKl/_!su5npdž'7:tS)`0;Tx*v*vOq#qcI 3xDP[h( *7 .Nc d&lOxN^o(ͥ[Iu|9 +%l i:;90mҀ+'-;XZ$0=X1f:0^l7S<4T>mp_ꩼڇyqCp-aloOL' 5 ZPiF^"F CJV̥A> Oe2ߢK ͇ FNtxTzΉ͢8HEZX}4c#8~;/`O4U*,q:NvvQWފɫHhOPo"-itPjQ56iAwXFV/$Nan :#TJ?&բ00g?tzxOnb8^6:W $ cڈ-L_G/qn\8d Jus,鴚~.wVP+ԁϸ]Nq#)qPc8slǕPG*n 2&A>4< MGp. wJf}) jcrRxX*&H2  (ܒ㨚Wk~"X|nޘ(NQ|ce-67v*( tIġCPF $a1v0B1*=ÜkCxjp^q3 2b*٤3ǨL*'$vRP:Om1z WT ѧ<"-a6]8?B(O6#!L'TBUR:(vZ]"Ċ i&SBdkK PM$oHxUKt].4ڦlAga⿍VI4u7EyL_,+xWGcXCnSUHNqNtNb6h,%-, P,f Cuz2@ *# @{t¶& )Ʉђ=p _9\]_[o/3WI3/Dd$ahAU,'KrR4uQv+ZHiOօu*懲C#Fufplk+VItY c3ዣAJed^&\ i`,EA~AK6$u$Vbw\jI&$cjm`Kr!ꉛ(A>el̐I6e*طƩ뭼F$Pyb‚ /H )p57K&-"M")0# o!v}gVq 3Srṕ]IUDJ~he1,%R a}6Ig#R>HX BȑFe5U=0jcVjIyo{HR͋'ԋ^9|zmYa15fazWmbyD?ԢDNL0k`CSe ht^'e>9(2*n#s ^Y؅r.i, rR'B 4i0=Ca[7Nw!WTE>mЕ:&"CCC"K ٘p/yf e[s+GZ8IJ~J'܅y2>Y*Sf^dځ?p[q |k0܃}*_vRp9vOnDXQ z R9LcU#SXN  :YfN NrM|2Bu!=9P*aSJ~pcUKXpJ[ޛ|wo%y5jmvg%Wq\{OcCJR&>_>?AOLFÔ9 &dնJq,VG:ozb  䠫4dVgVy"RF+F[b7ov/AwCgfSW_h/hvp\ w됭횭0~ϣp[ |wrCE煡̽tԵY*9U9g`]$^ziTshW/&zګ^s.~.45.*sѩ7gc W;AZjUjqP3ltd~W9W2*V; |.&5/Jlgw)DuQ&P듯s8h瓼r4WNWFj\lNVyFIßu٢F u\bV ,||Q"ou|*DdZNA[6 z ng.5W7,ɿ%? gyd\KWLAh e_>į2,) 3b 2Q@ߑx `4lO3 hLx(~K4~Hc-TUq5-m~U Pq-Irchś!̄ U0;N,!x'ة"tC fˬ#%aUpE`v\*aK?+zn^e0TAad~PW 1cx@eD -g/xduTW7;T"1Q1Ne.%&дV (+%\\Rv,O^u%". .fOc4}%'kFMj[’ ^Q&uX':bAnJpYMTQ K.(ЦD0j3-#aJɨ ]6ɬB3)}TAMaj rZTp:G*r5a|WON I>: [ۛ$<>"wKeaYkFppXKa_2;1N{lJC[;"I>aausiڇ B'agq5=-h;TN|v,(l=0KoeTi T#=S:Bo4W`>՝^(v'2G?;hzt5QF3g2M^ NZM%̎]N-ݒA8_uNT0Vpќ(1n@VKpVMeO {?Op^ߔpOAbsQXAFt]p%s{QEkh* z ʪ f~>/ {pԎnFB ̌!SY!,s2~@C6en*皴f,y#[˯vE֭s&2:rb_,(/(yXqU0$mD̗"GFgQ="0Wch sF~^+ł-6\0Kşג~y /$;(?nB,#تb6{hXn |basjF+_gya~a< 'AiQָBG38| d -яPYIsG;nl.ge$CsGK1#L֟@Wlf <O}?y?fEҏ]jE\zb۪6rD v=6ȎQ>).Ե3& Yl[F0^ /ʆyqs 0^'[: -iyIë8d9EF/tR `60|Nw:/Hv w ҵtSh"2 AJ<\P8Sa<,Ѐ2"V?1SZԒwQA,%,O$uqݥXTG(X&dXTS$=2*Kw'#Gۛ-t6ZXm8 _/tUz/RѲ K!"tYx1si˱p;\pNXy[>."WRȒy7K2ְdvJjJ9tK,^p>%Du2C)3vC`^' \@] FrD0>Ryp-IP`ڄj .{ 5Rm;mݭmS̼=Q Wؐ!zLX5?[5o[K7I"P K̰.QugrN;)Rӹ\ b1Y(m`!k\2DXa]d#qK-b$/2FTu\ƾݸ 61A_ t,w8\/-C".ThkZ'* ċ:T/Cًs ̿cC1d-bE G %eb(6i}2G^ %Я4$]:hO'%80(t`# բۓ.z<]!rM=E5*s&W3㻪Ķ`IiWVN.?ZMM2.S\ Ŕ|ɵyUR(oLи A1e_#)NC{j&xh 8 6;iҺIm̭{4OsvɫF ڊfClum: ",olr{Xy|!ԝ!aY9D87%Ȩr7 n wt4]?a$>fݑ u|Rr+\^jcQL/ %"].v*7==fT ̞R4mJ%[dMWfYXg̜GAQ/tq u2]^W輪0+joQ/N IW _0;Q8|y8cgqD 8 ?^OVpHܲ{ķ=Ez6GOuQ>2j>nSZ悢mni1WA=6m^#VR@`vLה#x͉|(Lg,ÛЕzy :w Qp'aNq _*1Ca80Wx#@G>A*R8B茏`"vpҰB}`՞LTg03:3,0/6d=VY KO dCWԦx/&^ rF*Gd1?5Stj?FnQ4PSS& IDATcu9X&S0p%Lhgrk O3C0WOt=y2C{ #d󽧖|ʺ=pOcg|93݂pU֛ =S4DRPQ (3<'d%d7]Gd;<Sq#ob';6_ՀEpOFUEquy r2uH^I+;?)< *o˹pF)9zsq]I؃ pюiEts#@G  I>0iv?loC]Օ1*ݨ((/|.uWM\Wڰ4[TU[#N|ήeճ6*{JX땷cpr46sF'Ldk f1_>GK1Օ{Mg6`p'^,fm`n8pq\![ڿ׏1wƓbFO4V&%M g Muλt^Xc,c1ZYם>c>M6d7!+]\\pGK U}jB*UZ1̄ |.kn#7`:%f7)i'݅ft6tGIWwc+1LxUf0-漤){VOȤ q ["&C'U"C^$:X)DMo*x|؋fp Uifa66?PY;h?=tEUZ];Y[z%_ \-P+ 2^y~Qvb9",' 8SXQa؟A7=ƺh-3n9VsמAwxF4l>WKUm@C^iԤe!;Pa>O(@]x9_0_:!:XSW D6^UB&p2]W^t_=s8\<lnͺƅxڈ8G?ʉZ+ih(0P-Gdg!9Zp4"mg}x(ʓE (p@  c6^^|qfU 9~ܐs&d6YE6A":[ʦH__+!iKA'QgMxN'GbL|X֙8J^`Sܭ0S)5C.;e\bӛ #|ig9FwKs*|z8ps?5t5SDzbwf0.Lːp%se7])4W6= _\҇^g~+Z#yI\}Dt*#+N.3I%zg lM 0P٨2 :fw/mJ`]EG;<8mftM^cq\l3K\A=pc^毤-YP"}k,8gW3)?c9t $f̆_s4*ʗƎxq')~y^k'yͺmbv ̥%$A'Xk88! `?hB7 u꡾{ U8@B}A}іYWr8e)I4<0ffiċqP%h/Z 10}V,n:=鐞r?awk8c-S]ti|[(vi(un8Aƫ˼rAN2Ţs>nS {*FC>boW'9P芤P9Ҟg_P, dWUn`3u0Y4VQ%` jȅQBmS<t5(&c?ڨd_kB(G܂OhӠ>Lp}&n4vAA jO.}R2]W)\X@-}y TPhk# Cp\#+Пf r]J}ի| &6 0ܸx|5jxLFvNB8 Zg\@܋t)#R*[h-,T92>SpMA&U1li!Take-(@gx`f6j/3,E̤"UǪ). _1") v8+ n#tLVe (3srK0,3D@0.]}!9EUV[2YSփG2q^|] a$}q0W x 0s *b$X+Au:K.)|Q h?bϨ44ATf>(#xR K%$W]@sRʌD=r*[w ܕBtGA08YT~6zjlR:ǩy~P/#(T Ty]v?GqV|)z7T9"8L7+`kd+A;$e{ :vzv`M'\u-OV;8 EU%FGGHX?tsQ%t;j1{:%?{ o=R&j~Maǵ~O}m97/CYVQ.𨴧֎_wq0ԸLG>vu2.H3gy}Q_me3b}qfO; ϜcHߌm;#~a+.U``^n 6g;ꃐ[0U9T2Y;d!^^n':rzkGPWuAI5tCU5'Nj,\I>٨Cdx^ss͕K݆˦uV 8}zwK*"My1BĊVb.3\Zẓtܒ'eX ̆=f4p>H!+ UVN¸ML>XhʸkM0X-2vC#Sʐ #:qXBT3Mr{;c}2[j2 cB΂c !^eE';P?_7v| ~`.QD j>֠4c,ʘķ:Dvm%g( 3HXQ.Ŗ"gz&.\ڞ!Oxtwm]uF@VM 1TA!i=YwutZԅKFqƈaOWbGAsb;*:sf "'C!p~"S꣮H}͵.1 z5)ʮءXY,vن%t+W-qCD}ȴ#fEo \#[lt5s/=2`?\_)a:M [;3D뙨PNA`.F+afLe8eut YgǬa<.nP_ny8CDoE,hn+HFT=<ܫ-'0]۱`Kr]vʟ'emۛ:wXMYc3[mƷ&O\4)R,y 4O_1ތ~W`QrٴvE[,QXtp>pt :,\5?4q }n1O@3,u{5Xq 7aPVMӆsD?;-kڄCDQIdC%FS/̫s8\vyfck@z/5":soʏ]梸|$&he+CB\}<<b8B.M:"ESuHˊ'鍾7mŸNyi9ى_g!ff!P-xVUV[x,̡>xwM8.oo i& qIFe܆'B񓶊u >hQ1*vgd .0Hm:rIN/ZȤwuOqJj,7X_Ww g|ʏa~ }z"}Mu #?BXW= &KOX+zn J ʬJT|3F% U TϹhϗ9iKq>7ڢlz>Vu\G|($p1`8-ҺB{Mq` Q1ʝ|pXp ~"_{\b8jQK̢/#7\PY`%vדdFYWnգu5C Z,U15\a0㡘j} 0nz m᐀DsBpT_*tWĭ ·2HOi)%GoNcdgyQZAOd'2!c`+{qc-yirUr CԌ*ئ\nƷMZp6yb.i}_XUUy|%'Q>yǿb0V$fvd)#|l[f/Nr95ʹ1~=ȍ tjhtNlk&ߴ_[,xiZyaf0Z$҃}ԤԤܛpܙ I_wOlǢiW|:,;9_ 2:rrՔ9-wBp璌7QFgGhJ.`oQUi렚`}FYHk,1B!TJvI]OFq醅 !p W#k=S%w`b̕8aYE;ѝ ܜQIlCfnu +~^[砈c0ĪUtInCue.H)4t$z $P7^ p.a&7ns<߀`%Wdǜ4ET0h؁8Tc9 B7@7L{)#G}h,qmXZ븙mMg`{zr[+2@. g)\k"RHk9W^;| _4+~LDIqցYCM )a44;&|Z꥞nS_Ik7 AWXzojoߐbӾ#fN#0lVbregv;!~ K/C^"ve z&MB} F )~ϵt~6K^0eQ>l~C0U uꠀ?9˱KjAҥecO%b+X٭^iv6r}qC?==vH\^sƸ48du;GNX+\:lgUo&J^Y[V~ƘiƲ.S#)7X[ {#f +~0{Д+z}^3* ޠ!08b3_ZBWL p 8vO/\yķ۫O8ϱp,ֱk,V ZdN@71_:䦰@)ȍ47.4&!US}I@Lx@FxHg̡[rCʣ :,ԋY * #\a:,xM>*IY`Amb5/vD#to%a. `3OPNƟ\{?15^S /7yDNJrQ짍p\[kQV-猸qQEgEEt8c h7P?*`K(M-G)ɻ`3xLSبE9VPC,pD|ntޡ j>+h<`NrǡGWsdlw\Gy(^nGus`ߢx/%t_=?nθioy#fn +NXmt ΕU50JȎ 6PGNl!,ԅd5r]vK _1pCfZ\mcEh;߼O.аK}dǕ]UHR~7Pˎ[W͌b`8|jx+/5q\mZ?gr{{R+\+z_346ďXILȥ>T XG‰ȈE#wU us`j&O`usCꦫ51[*R6IF /t J^d1֎bwN-n%?hgMQ?oBQ]$BN*VzGQY>h[%ZjPZm'3_RF1fHߏqzW(!wR_J cς'REj*)Kr|^Yw-2p~ uxPZ N.bQL +h prp~RJp3m{6F,߃k_/]Z]] OHr[4 Vzh-R*O,G4]8aj/^?~ID*Ǫ;-k뽚rۭ\]Dα#3STMG9^U97c$aU ܜ:6зC,&˱ 7h2H!\jCܽvg|q\]N'ه$z첞cy~èJ'>ʿ^#m|yVT( Ҏ&n0&c+%trt,Vm<p((D7ݠ"Noћ8~#Pgx U)N$(}[BFC)W|#ixޭsvw,dEr~)<`%m|Ydp1jF],&rxȣ!F{z, bG@v !+3x_D,.~Wp\> Ns#()qPgC] *sXd.ϙx?6L b1V;@^yKu `k}A}YlvE|HYMau)c7 )4BĻ1PTQj9E/! @3{Ded ?#q؅wQI plYO؁OX,⓸h" Q[^Ֆw`]ZH`?ZhuN'.2fЄbSu6u*Akl syҼf.2:G.ݢNf 3q¸!ŚB_+%GͲ+sL#fO%azQЗ*@]v~ t.AuX{VVSMJ9sg'RK+ړ&US`/d6WE}6m/哖r^Qn-ssS+5QU1q1 }h")?⭣]36M1>lb0EK~,0Cn}M/qKq{ uNKhԷʳ6ފiC|c쬞8QN Y>|vgfs[6j> 4=,BK76"JdKŴ^¸) BG9CF]@[E]0hx'[8GS)up9XK$D/Ea4:>SeZ\W 䱟JKjv*C]J@/hX#Bv92VhgIZ"9$ar7uwJZ1<֕x% ^J! *x#?~dNxGsԞf25AI 7u1$ƙh#G?6<p?o0?:MF~>.Z(SnL!՚9Ҏl\yʏq\YڪcMTuMh- A;l!֜nr;.Q/sld̅qcyxH+9l&>@r 8s\Zx ja.n^_' aEu"JpNA!Nd\pXs= Eqp:Jk'~p3KXnA9Dex4<̰"/pR)b^ǒAmGA|nq؏5,j8BM8E7 z&6âDQyLomq=7<Uq^U]V߆K#Q4ȍ|4_^M9n0|]B76=frtXV\O=v/wL7gTB3 ܹ.\Rdpr픖/ϊy/3i~PYcLl :ױ!Nwq>|XT'm}c5*?쁹H^u :&XKa{Xf[5OZƗ)Eqpn-64gCOGƔ`sr;\2PYp)խ(Ñ+$͍f`1KE8@51>.›?A`BKL}`57f`-~r07BS3E&r%a֟ي@giVVyHA7R.~ 0Xqkcp8VA`Z#;YXf(.р_W 'WllgAjhh?$L'+:XD1KUQMWy|ĉT_^:4CEI Ki=j3aKPWq4=iaą ]ѐQnK=ȡBw& |OA x @{c~زNFx'zs';VU,p7Ƴ>8Ϳ0/.gBAIl lPԌfD}E 'Pj}wZJL[c.` {ڻ\=vٍ QNnY0|`( Z_%M&t@Qz 6*H]xR5P煖YSꆖk$*ISQFs:oO sbv <9QuQeiRq-Fۊ ZNm(F_p6&#Eg1]Uf/atx|9@40$b V X=Q9)#(=GrQHrLsQA \3,i9SR6xBb?mP.QW(1Z@?>}VZOg]fhʹT\ESӂ%mF=%ei<ZVbf _8qғ͛(e{P\Omg}o RTH)O3ſwіb> pxÔ9LK-S3oܗ;ؙgYOD9 0`0hDM\pFK~b1mZ=QTl|nY'9/Fl}fV+Ҙ9H J]盪!¼| `.w`@ChĊvy Yq;5P#y:/YeK!<Ch+DqMQ_T`@Z#n`-{Ki֡:0_nC^.T\:ف`=?U]2{Ck9WjAW8'QO*|~'PlQCa<*C}qPk'ZPV2PGU /`0F/d؉L om <^( rGNH't!f:J:r>IK W3x f^Π~pAVN^|$ +4c - 8A"VV{i Z-`0J ~s}ݥֱjr^OohwCKY.nR/s3@2izq:u~gM-X{-2آUVgc)O<NNw~-'ޘN^1J1W?5Zl !$(W1oaATQk*CKԣG헵f#W TSB8j#pOj>'j):#a~4[b EkpCUS0.GHg=9{enoBeYY]5,͝b ڵ.2 5åSŃKFb:. E o *s,/ON?$x̩D(#޾ހ􃮻h#1(DL,*M7-z5M TZ9ֳ"K?މ;HhZueu/6a0Rygߌf3z?>2KPwqz>=흇Rn$gQՇ{/&P+b>Q4'>і%bo?-F7`/iDkvVo.[kng g* uX|˧;pt5AbKx S c"ҵ["qB;)T'1YYenj)|! u?5'Z-bdQ7=4쒐7;գh9](`2T1xXf'gX|$WU;b'2K e .2> - CAnsqz!5gx6VU90AtR m_eV@ʯs>.lj?]`?y\Is{="\Z#st~ ȓ2Eq 0nϷa(6mUޡ(lnJZdKS/%J GZ뗴VdC;gf 9Fl"e>Mu  - CoHsq:+n;J$j' /mr)vʾnQ-=icv>խHXJtm6nV3x8)ְW{arмb1b8\_oݯ2"ٲ0\sQr"yy)ju/z+>rOx"1ߥD{^5œ7M֙ n,YXWq6jg NAI>O}Vy3U* {S6@u]-t^Sz0Pkڈwu@4. r ZcUʡ`&dQy3^kv1gpbFZ/!Z+85`N5xuOW棕r1ZB@^xvAf1`0pc>j!omV:([h xʩ5L`h|D(t꩹WpvIe-/I?PׄÏLL,6>&[4zA]c1n NT9 b ĦAi"71>5}ؖ =p]>M_5a~'lXB2 QsFW|9#>mdv5(({҃,P qL`gK m8Yl;x9 4j A nrEDWptipH5bAgQUCqBr Ou[KD׿AXK) u:+a0 oC18'6AxU f W)2;V5/z8?EJZY/onXͬa2}n>5}wgr;umsus.uRhLoZ6@ &@1+QaW4f6Q v0Eeڋpu8 vt2ky8ybTP?|^[ohqZ<Ͳ/Vd?AFcmK(uûS7N8Op6ɛGZ-mܐ[`6];RKeUC2湖x yze[lj\]H{̀OwY‰2Ѳ7ȟz^ޗhE2~ 2  R~:/gVJw߶<_7U]-kAЊx1_IXo+^UD+q u,(BD RA-Dv(#ҽ(uxjp (UP=#= KU` ŧ`+εyB7 ^VƲ/]ʁ,%CTnxJ PFky1H\.O^P4Է[$U3sxzgOSg5z!4cְx pg2j&SDh8>X|<'y,ƐOpGZeQC+4] k9Vjc{'?p>Xz͕*.s &"HU-i'E YA?08]fHVP ݘd$0ja5 ag$F (/5,3TFBNjȡ^>OoaFuwas-G"S./De-nW9R+S^Oe.4[qbU 4rT\PsՐPB/j qi4QW-⒜'eDҺP{~8Px/#Zt_A[=s`QSn2fx!i-5+E\[aT vAl\B;å E`zϝp6g.l-*C'UaNb*7!|_T]Ɠ!Ca'S QJŵZ}E#si,u8ç1{v8|{?2'ztKIުbRz&z~o+8=v[>X22HCTTI!UAm :"[f/A11}"p0 [#zq+aҽ \zo8" @oLLOFMA'ᡧ24,썽M^G,: n+ /^p*/x|T &-9',YF389A ;[ȁ}*ל+2Pm10q4Wq;QB 8o9OV-,a(Za;kչ0*K2e!6ǹP?U"uOC25fPh"WB?$57@~줚`bX4IU)VjZf9!l]iYggF)J} )Z :)]]8QN8|ּ.F<59 Aw?0^ 6sׇXqEa44@qt)QpZLRτW6x2T=N` | i-,XEP3}<%kxPc]X7 jf55,>7Y .֡xZ$[+Z-Dao.gL洹U<=5},Mkm[PH$jg u-2m|ODюԃZ>XD'u[}8㞚_k( _[͞lXv/htlXmSUl;e!l^Xhn(-XV~qtuq2j'-޿ʈapgC(bO WoaGk22ɭ|A0f)-%1BD[+WtOo9u罻N 9<C) 1 0p,oUCy$=$R! hIj(h-ii9ZMrMm moiib 5ڎO}i6R)ݸE ȃ %WpNG] ۴*n~=p j+agoYZ*N숭Fn`#PB(j%D'`i5QED_ 4FRy4@uNK|]u;5EgߧuMjgiM|̅VW {EܩD1,crF}9RU\)O4a|EXj3*O-UW.ˣ3Te^Z:'*}(tWReT+-%PW^‡̩*r~HͱWy_pu*,JT+{h: tfixV^x.~`<rQn,|@-`9PNJ,xz\GOD0j e(3q^a7Wꝧ0)3|=7*r?T  rS' USˁb*/ 6|^. NՂ 趈u@pv7nP*_,„1+?. o2Cjǚd"{Srx^5P SS LI50!pߠ5>EtpVt@^be YK!O}VzƭyZ!s ~P6h `?nGq$>R0nrcn\\uy!5P q>>rNJTcJla#ʊI"1mr+GRƂF!\uh aq_ΞFIJڱQޑOxԗQؾïRngt*Kyiy_nkIqI7_{z,5\M󾒇`260*r J* 5 _$c 3gׄՙ2&_wWj]>ka& lu:eny`C̈́`NS5RþI_;kʦG,!]kolϋ[Ƞ֢$Ga2gN56rCӶ|]h!D3ߡv3HIqki7^%uRuo ®Fj-E뢐hF\;Aa[ktb%nXoc?-ZA)&k~) 'T B,~捚# `9H5?Ëp ZbbvWdPv'eb1l^,K8/a<'TNP;gf paAi0\]%꛸O0 P7NjڪòIu!;=H%VN+zp菉Z+QMS߸ep86tu0L%*-Re9/^'0 <(kLU j/>  v of]ц2hb/lR]oN"œpt'|V)X~ #j8UXǒ^@;,A1+2gbe07RKE1ae~Wp3k)T(W&؈3La,+`Oy k,l#U$8# wc,E2+Yar̐PK:N΀U@\L4>loIAnRN =oO`/9ԑǙ4'&#Ya&DE q98%#r0^On+jl֊U-L}^Y9r6YC\ k:M>{ _9Jj/%ɌOk6]cm?VW-G cy)>tTQzNjU!@qz)8 pcGlM i ~p ` \L@:xRT ^rA!ᱜ_yaTuB:08+x ]HL?c>O8k u ֧*}^)шxEz/k}jY:Um4H,%uRfri˧?2GP3[3YyǛ]&`0nZj%nC[NoJE[c]oYjjxN5 bEP6f&?lg%ZsurRqvGOO|ړ0$5Ce({_-g9|5d aVz˙.eަS'/eOkvX4fj8RK!i2-f10 >:LW>NWlܑ~efGed&X5é׾=>P(E'ֆֲ*ZBq gɠq|qUv裺r5ل?q{zkphKGR /Uw]œgO=ED< _ig9.-Н@ nU0Ou*@gx=N`Mw IWTU0:$kQ#K[wp*p?8a ;3gW(b2T]CyJ9D d P='b~xq'B?20mp:D )6?؄3xE~9CŸP~lf (Ko0s}34u @#jux $i˰6d7Zʱ! Lf!'Ԅ\S~V}/b/Q"j4 0J8O|b`2ܣvPSTtK(]aC|{+Hh RÙ bS >j4 ǜP6*-_PwW͟T ^B Z|a\]\gv"_I8yp2$XU 7UG n&+P}9^i30|FtYYK*7 1C$2c| ])pQJmJ D0/1'22kr'm;۰J[ԣ~kXup]!T[K 7rirBf>9\s5RH44j`]7ʯop}k*NH=>@)!sRuP? Q]g_2XmV!czgC^MI4Pm ׺c V14>9NŒa01HE y\G7™8u`EnqM (K38M o3܋CF5->_]4=GZxmy}^qkY$͑0R2u!VYkJ'dQIO_ -ъ8'a^R0!cO`߮>ISܷwFtG?wp{5,9twfזP ]d*vJRTYkʉk19r~arM^C-|Д>VFqggty-gR@Z-6m=DKeBy7W c-ۭNm r 87=M2:._4˶8K^ЏduѰqm 2_%Lbg$E2Zq2嵌וWKԔCaEj|?|`(ɟ%\J 'cAAjgSTDD-f|WԠt Z%Xv&vSA? _/U5ST'GBu9[\J&Wt~z%<?b$Na,J-p:pO<k\K;}M!EFO-vj+l5xk-|ҡJ\hڋ Y 3z7r-뵚+)r#֎*(ji(nn`^g74n=w ?!ٜ:|0{r TZM]%x}Zo~,rq%**OmP]f#~pja j2N$詏_sGdw^&Gy!砂8`V¹8G5LSMp^1XT} <l $c!]z0=RZ|_i}Ҝ][h7@s a;7kYs9ћ\r;XfSŵy8E+lTo褈er12!D#Ϧoo) Co>F+"|-ɓUV F`]ʒ4vQKaWϨh3Wb+d|9]DcY?攟F+bLk"µVi4M̬+1a_ztȡ(`5ٍ_y4&6 ` rT^\9'd?&4J&~#rMib +%NLp47 a|=uY-ZN *Y9cI0sd [ÀbL57/|JS|ɐZ<_Xŋj/P#vP +=!iA8D% ޥ+{&P'\Ep2PE9 7]> ;`5] g&jh(`?`NG76J5ヨ.ka0=xKc KxJPQTeq lzsܔx c<":'>{8( gr&\$Rj˓aeۼ \kx.-`]W'dr •Yn̗!\mǪtCT9g(+]%OWU!ɳ;Y UK=..#Bij S NQ3ƭB% x0d疘2\]b.ܤF 7a:g0N-p 0@(Z+fcKm@=+"~To޴-90PsΆ;Bx/`u+=}/eż,2APUC S*w$ꯃO0?s3:%sqr"K֍xgxHC@5 wVx -`V+! xv=|&TX;ԀPJ?=3 |XREW#ʙ}u|UKAw >$un|:X[[ %M4C M*z_a&s&kc!k\_Qm*耟4?Z*s(C ˏİ#ĮcP]i y#[b[IO3 ; +Յ `]I#&وa4"LM T.B x3x? \'5Ԏލuh$/f߳|&TS%έWozK{O:Sm}cT]373G1vl 3eeW gu&dk;4?!iނ|&Yaί>Y"CI Ue|'qE]{VWV@+ZRf;މ 262%S񼥏V.g F߻HESN#>,óaܘnC/qnp(A:;tS[^>4 { O(&L}%%[鉆̀W ]=ERNtF?E̓ܒ:6NV6 Wp9PI1w)sԔg ސ͹T  A  LY6g70>4"u>$uzgq ̯|{yJP?I?TNbo?UV`CH6Dh E9z\EfB3r>2YPn(ftWBW+6H4<%_ԃ*p\1 ՏYPІ+i$>Q6 XU%u`V?6::UO\3`5a~sXFUĕXFg 3e6{ZW\'~`vvp]o$' h?o/.&U0ϙ 7%8*3 s.exBeYU-P_ђaf^VYbj}̓1pcj,Y;*Ц鶼_Pz^dO%cY,2..w[vRc%ܟ]_ L}qM># [3܁/=MK;<s?:.~3z&ϩ!.ЁrSL)iho˰r+&_Sy=ue;cQ v䴆ҾV$D > )Wh!vw`|MSNpn!ȿ3qbn0m_ܞ,8W6Αk :k==;@lAET1>aZsl/;p~B^`=͇y,B78LO:Pp:a?F%`ꂷx6!АC4$w)N"@qYUGڪ3Gރ8 [Q;r]EAM2zϡ2T)X }Uņt…)N2UV(aȋ/+2Rb4RZc[M8S, R}5h-*`ϠZehD=6 `yS]DS5r'{!U|8Ǽ"RIj(8_*N{VQG ;r 7Zᢦhf~]u͚"&^+dh<#U6g'vAܚRq(`2wv6/xr!5R\ߪ=~‡E8 )HMkTjL}j-v.dEDd+b*x[ZKaNRSb ~2pxjtX=7~r询*8$Gl[ۗt×lvqq` IDATOPs~ 5_a<36|5AJPnhc/B+-3?‘|8ٸ z|fg넳VVOv^sE+#,o;\ghy/dvv6h.8je5uʌC9՛ayZoύn #aȥ{MyO]8ׄ@Ӧˢ: ލPB|"Ѐ2,0W@huxF:aGVfP%l_&tW-n$뒶<)m}5Nh#iSSdzB$:F>Υp8W9+@W[J}.Da{>Z2#_a'` ^.lgj? i<_&R~NňiM9ZTPe/bxH92TޗeZA-ߨ5 g zT rh$_t]܆.P`yQb!8ߩr;l'<\%!<[s0 a,a+[NipKm0BV 图"yk O4mo ZcQ6< A04sʡ.AnY bp~\ѿBNu2 vcn܌'qC4^YE̍zn)\p4RlHW!Ɨ~'<؜&i2ч#)Q/*,t9E!hN))e+S] XQ' b-l^%A%K3l[-Ȏl` d>@N&*BT=m8p0EcK(I?slZ}n[A1EtFHh,^x:L+DcaNې&pL Q`^WpӰ1kVhw<qWlWB~ŶXܞ` #%Η 豄<~#﹜swKp$7C ʼjQ-S L~;f %6K]> p^]v ='g:h9u~BO<0j.PnUC=tnX[,pOrmqކj9΀WHRWҊ2Edчb;gc G{@qeZL0)~׆_=K@Hv4r5`l$y~VV50s }_Acko}:"h~V([fS9͊js/}l8Kgx/7: cdMQ'jD5.\FYGPqZV}3_ ҾzCqP8!.PggT̋l>qgV6Ox8UO wf ,0E%?.ׅ}R$@i,g,vVϤߛ{e\IO*| ~Q&NК'a7KES7#B9}B1Yhrs, UPN^j5߹,wW _izN8XڧҜ-5!Sfj0o*yDŽ/4,Qݕ#"?.Ӻ|HU觏AI0F=@((Y˹FR j?8tc͵S4wi~,*AUy'| 2+.psnXk)e8`pE`^u"4dܼI=ROdQS+s޳Ws}נqV5ĈBPDPW ?& Qq < TIՠ4nxbud]hӽTkW#^%8yJ6%T`m[ySdX1V~3[ސA#%O7e{%\-%Jn]8K~hy6(Nx'j8HѸ_քp^q%QAGօm0/majuPpV{TiPw؜C ȩC<M#yZOeW$n(Ž"'nVuQeI* i*,fW ;f( ["NޚZ{ty؟Wnq° \5d.m9hj d(ny)zN T kLTRUgE[U0DQ*a`6OLot`>$#6b/~.:BO\m0Bx|(!ajVhaO!dt{ uNI/X8x!%an~9S.ư7ԅr.E|KnEAR{cM]q i0jy~S >C$b5Ye25y xơ<]xZq L***Tqx =+x/4c$Uq&n 8 h T;4 cǮNB,,ܒ A5=3Qh9v֏YUxV:u)ARFFZ̻}G|3s1de|0F1{Cߏwv]j#cNnikz2gNi;Jfa9 %Q9M-c'+zm>N55ǼΘdLevpw69`7Guaki/XW&%u׷>QZאp5GCe l(=P^=6s?}\JwjfQ9D< 3\܃~{C7 6ڹ%J*mMR1>geEZ#ms=rI)%^hf.p^෣irXfA絕xGɵ>/8C@5h\W_~o8 kUϯMW$eB^2wvJW셳pax@Y b"'|ӌkj'?Q)n*,H5YAAǕ-߭m .ٖaynIcS'tIҭ\HTS#b>hG7Wa$ːQ<{T'؉mmaDl,Ga/kAO`Ǫ%ҪauܰMN ( &"CI!s('%(5{YCnD%y0ԁ\KPh T4xzc>ă@B]\8xXAG|+t!?j#&P ŷ^S_i5Zxah8 UQŢ '~]0_:Xg9p&9DUPRxp!foB'{ Z ǪSDvJA#Ɠ CaZAUh숳EY*=GypH&H;UtQ (2n&aCQ \0@5C4ުTI|oÅT7<P HŚ/OͰYճ楸 '5T^N8ccy^Sn"Nrh,3ςeq8y\cNJߚWeyrNius+m,n;gSP-vϱ |[S+ XA.eH[+k7l liަ"إnURI 3e` Q~jvfYu "lm}Ox>WYl<X<4Έ;R 7oiluܵ{L󱻠FcC[ =p G k\H+C_!_nPe{=3KF߅yy(lm93Hm^6][ͥx%aiRF_.'ݟ3-wT U=agH`Iiӿ5f-cZ_VJjl}8Xh*̇*/b嗱$Kȗ`hס-YTV;[p(n@EUWU}kQ8ymّCňE^gB$@-XI LE=̮`å_B9O,,ڨ7\+P}<#`(S$LS@&SU!Bbo/0jAZT ?a-h 4UJhy>~8u vx;mݐU q%v,r!;͇f9fe0=|[ZS=6(IFf~.ZIf?+7rt{=Y٭,V{DE+,ķW9㵯!ߩ)hB/4nЎh\ ȁa2Ɓ%1Ixp.(up΀:Q^jg!~Ca7> l 9_bwwk]X5XAkoVP$Z* 띛>w:OΒz՟gYř}g/dP ?1t!!l?]c}G=iɷV'D߫In;/Ӽ(#;1tBEqxoFwS5 G96PP<1YFx@ڪ~]eZ*T| xp2u9dJ=|T}| ZLߴ(0K,:=w oewFʌ@8,͡.f^\Z. :k@N~-Z59f2h<gzQh ` hD=8˝ .w1<^hJh(qTAįC $\׀C}՛gMliT~ 4И幝|[?Z碜E,Rɽ(OPxn)_vP'>2Nc5x_xX[!FjGvl-9?YSTxe@=<"p|ku )6(! gHVVp$Vüp5՝ӐI8 x BUYTf3GsxEY6hԀ Kh nVE0_\<SKʎsJybeCoG2|e2ORFUcwPQ-j$}-개*bM i9G'&X&fv1x#DjF p_'Q/G;wzIhe6q{(EsK'#mQ4S?ey&#j>բ"{bǹ8t.vV;MEwaW4wowU4YWȠ;Cϴ5>_~9]#5s1Ef:ܤ" қB!+ ;iXT8d|2zIEYO> 8{@=Akk/pKLrX7uݯ)S&z{0JN# 2H<L{)hX4'\D ZNB'P.X(f]1jVLK Ʈ:\#v ؋/i.Bo.ΔX9CV懒b.lc u,+B Gth)w34I찕r X,̻})QkEg#p>(88 P 8Uܶ QjEJ삹 t W!KH.9<,y\2xzA?/ p+8 <>޸ 檴B:6l pL\1մRZd <%?ƾ,zbw5>ZiFytz>;͛)둯\ewETn8lYh^RìaŨhl͓\xJ-mny~6-By6^//cdJCTOKy8Ѷ8s#f걺I݅QfY+/j < +VKdF)Gg3"d==J؟#2%m5]4+ly>QAM@KT zQQJqygH] L4^kNU'ƯEAުŐGHh@!Tթ6St\>@6!B <UB7g4|UCUBbpbUu fgD^?j  uX& _PcO2YVf%UGmVU1xt+0ZPs-a ;c LJ1q `v\"R;%B8K>$Xh5Zu5_HQ=a*zc5@Ǘvjsi p* wUHAH6&8 XNPCQ;d:#`#G\7܀SI"}ОPTu(~̣|Gi/!.j4 3p_:8a.cO|bZ*c9r{ L'þ(*My%guS.I7k1Pz1.)0|!IZ[%YOW}_[r*Xbڣ瞸U'pm5^#Zcs'q w8MtCXsf܂vU.JA m SO)5$@(ckQY.K V}N9H(yA#$j'm*;,ϸ4^cT CXp Ug8`j|XGj+)dXʱf X+}O+_D^0]jl [wՠ1Y{  \  ]xeƦ*?FY9}14 ['3s[Y3Kjs܋0\oyw9ζzjJO7_d՗T)ZCUjgL{9#e-(+/<|9W[}ʏLhq[cuV;l=r-OSmz-:h#IB*')>Xc1!iwh0u:gZ6Q=D>)[7W0 *ꉸ,<8!v¸v.\CYc\UarS+`,’\h9+-~Ja7H%;4.\wq Œ -_2T8&zE<72Yc0Ep$. e5.b,·x 킋FUa ^燼*]\A1K/X͡, c{ p:tn Hbrc\*[>B~畝O. k4\$+<@ֈQO<|1]d _|XP崑iݵrOϭ8P9rf֟0|d5,+x ' `&<jJ-r^8T*H [Zq#bT֔.bo^:o5Rmq*Z6uQӞ~:ޅ!wWeED +U|HMg]mT4^Zj*XkN7k+q-Z4UL/،UB5ȅ0 ?"dZ(x + ϡoeKmGxB^5V}hz/Oxr",&t@Vw!C_>\[qեC3]XFcQisu˶΂[.&ʡ5{q > |$5q OqŪ&r>M7]6l QO +?FFA eWݠ%d]<=<:輌ud.0[NM^׆dZ)Z8PJ`-R3tAml) Q(L ̆뱶 "HzD^e@̂" 7?~ӸNɱb$L5)c[30M"/[\˪*X:hCp'[h ù r"ࣼZCA~.: Fk7O8 ߨlP@ Eo9s ԕ8ʪIxx/fM$4( CnDјEݡ4Yn8p#7 -=p^.PNa,7=_Kສ0vVʍ%|9&E:@hk+ק'0m،Y>s#Wa1v*l}QFWsyB;@+6or!7Bn/3u?2x%|w(<ig* ڡUrEjCUL-wmc8s3l2XX]X\L\R=Y%|A*C̮RfS{k.~;ښǂ:JZo.V'lk->dcz0Hwݼ-Vs${M8jЃc|GPsMC}X7ڥH+ʩ2pJ! jB^GM0q74vP,86EۨNCaj YlG4( ^<ťjZПgCبު D~0֚#}45hմlh9:6=㝳~hk 'tʼ)ϔDϺ'Ȧyy49 #ߙiؖAX%4C~BT:|  (pj]sL-V"rA֛"ͫOu&je gs~\e46r,t^ÛAX{9عk.Gh8X#?~6둮2|"Y{T16Wmg]Mx{[Ɣ$G]>rJy&ih=VuVzET?j-?I|Md[7,ґ+Z^5pfByFDS1I{U0|+} rK$n ?tL/BaUY+vEbGNFI < cQo|AUDiATSPY [lx #aYGy @e!c__.C0fՐߍr|/B7NzJ>^~g < LU#\T5T9!/b)oxPA. W9ȼ `DP (h|ZfK.q4_e 7#F)| x\q2_C]Aa<6b.f-8~l_8k4bZg9y47CLRq Jw\)RW\KPT0[PzrU+ U!.3/&J.\"ުHHWUS1i?4;l0An 2NTj 6 | j[E5܈1.Bnn.ɪ>_&y Od7WCtV+[28AW8 ,:hߒ{ 8j{c.U \H︹:̡71GBiũ8-$n{8;Pa1tn@*werGEX5Fq:Vx prkD.j5YR;$PVM "gq`5Qw_M0 ߹"N߰Youv` I`ig)<oD2l0׌e꓈c/VǠ<]FA<]Qw,’]Q~y؆so5FF8gEbR[vLn/GM[}U IDATjU 2in3VW=ϨmhYLwuM|#?C!Y.\H=2ch0SiUKy8-6Pnꡞa 91SS\kj:ű. <4{DaQո*T]= +nFXreŻ4c͏*FAN&"_>b3HʛC}̹c8ck}٧ej&Xs\5=qdb)ތi>L~Fmj,!QY,G\opfVOlMLt1^򩌿ͮcu>7tz?.+lU]Mz4IbgCRC n#ke}$#VkmXCPŨ߼n؆G)P̂GU=yPF^q(= ZO5|́Ijkc;Zj/R];!o ,#&\l #B1P]xרyA7 )FQT p꽬~卌8,ښTGAswzg0_dk"eiwrBu8xXG$b?;?W>f)hd1X+,Ϊh&[J2{[.k?MuZVX('PrB0?Q70z^7,(-p>`ݠ0BA31V* 0W&sLUU-x'ΦְDSq cP 3)C ꂚsQǑARa\ :w5gp)4AI[puZE&>~0ZY4rCԋhq'7A=i]4^MpG`P#NM ~%w"Xo0x6zj.'0(sQY`7U!n/a/g!HePBgh'??eB?lpkH*# dcȀXi9XP.{.r[mhR|MPLU̇|dnۯ*OcVyJ"ˌ/#?v[!%}3/%]Hޝ*FHgޜ_|̽1[1z(7ך&_XP0"G?/ËGj%ϦgFm"Z[7̢Rc}SΦ_˘l]v/Șʙ2/}ti}h)i}dUY|; Z3%ှTFJ1T$ya8ZT9PRFhOO2rvx8k?<,Wsqlˣ'\}i0*'mk\-E^.OГACB [N#Ao_`14hق]*[,9CwqWRĨ4go\zqgKg=c3ccq[-'t1EekV51\w˺R.]X iӆLe%2Qd0F=D H3Dk؀pUk^itwz| Azxګθk &zbZy(,ZY g7-@CVRP2eΡF&3դ'2'ε\Ц믩/Q\q9T-,0âЊjn0 ꈟd;YjJUniV[u. zl%x@ja>)U] Ya?5JP> _a-RR3YƃJ lP$B(:0'BXCPzOCctCO8WT |SDSu 6p/ءV+W9Jwh}@Ȣ<[x. "8ED/E~ݵ"i?H#f NH:=!9:Ny#qM,R8 C8w>>jJ`WE߬*GjW_(ϟ8R.ꆿT w# NCC6 m(n(@8à1#c' QM\?aU /`0l ]*M7OHEHrPXI8RS >t.h WeO@u#,-\4f%M`_m۔,V' Q9YW/CSK:"S~O)9ݵ|,T>w.4Eu8Ӣբx:pIp _"wX iPgI<"=b=V>bs k \K@37E o7$'q%8xIy~1a5sq1^LatDOj۴6]J?K:zzSM=.#;%Bf+M U-luzRdoˌJ;lXOFG(diն_ET_/AUQ <^2VBv]}[h59^6E?h-uKkqlm\Yז+i =_- [#'mTԃ|nV+Y>Gf?!oZf~CՎx> j4{+gdz53絗yR3,g>^Q jmU+uحٓX[L@j;9;3}x;{%7lz/-²$/Ὸ0I%9a=P JA%f/_@{XNekDo S-i} G褊Ű-lF}! -űr;poG}A*1f;NyR]9!A;ET ?Z}aUSrxnfVIy3薒e08+}}M|}y uEMz¯M@AEGS8(zQuKV dnҖW΅Xm@#yauQP<-h5|{<=xS]R-4V- V'އFx&ZgӟJUQTĺ`z+!rTN܈e!P =q"-dht)'x)X>w.l1VKWSd*zg0 \ qTZ>]Ŀ>Crjbbee%|i;J _Xbߣwrw} x^4 ``a_p 3 {sl]a~NJòX,KQcPO_8 S͍[>ae./Br -l fWߵT/2"yp_H*fݹW%T# ^8Fy?+\A1Ro}?L?̓gri,-#-ɒ$ë0\zirk/i鰶xm64 K?%zS(/8;WlCB?c Bu Ld'Ғe 2&ôT8> XHvXLjRv\QZ4זQ vB"{ -17i )@Gw:.0.ІA/ e_hzNH{Ypd/!YR++MK_>)ײX/YH윇'}*7t!'twy6hi7C >9Tmm\]667lͶiish,w| bxJ&*RRP-=OA%hs"=D6d1ET>s|OW:YB>:+1$qK|l(9t8W8Q\I0n4UZO\]Mt1 Ak1QDyԥ0S_i ন-s…4mq(#u>ޯo#V$Fqs^Bn97QwB5T煢"Ex^`?[#Ɖ0Dљq$rXL/6*R4U)X,E?jx10Z%>c朕S5L[Mp`\%#+Vz{/+pܧ<A/eD/A%Q.G-rQ׿T{O̰_a%]S:a4"_Z#"d3r2F|5BÚoP6dT|Y~,VR1Gq5NSfΐ {/~ވ-9,bmC]#=o_]kog 6T}uv-|~jz-CjK_Cz #"E›\H/Z>Pk ٴq8m(HUQgx>@U+rRk\3HB61xvEUPA|XI'8]EKm!#0psbunb,x.(,h΂z_df ?U,- |YN4U 97&U&-ԷW,dgNg1Xb˸ckoUw*sv K(/u0V_Xa>ABEUt}{&.$g d1`}0ñFzHurk:U=źgQUQ9<()3]2U5{`l_:J (,W8yq`߼lTVP: GS-Chu\0'Ք7Q 3ʨݽ}GC#.ra2 *bl"E ,x#22RHC&~T{J|e|o$6"{tSzN (F2`էh^ &F  >SI4D*UtwnIp[C4D14ۊH4@\ 4jx&%S/j}sC?3iYpN n#VcbuuM;{q%$}Ʀ鏥+}ʚ#U,gAGu'hG7tsh#wi53|^JMǑYD#ݨG<>UDڅ" `؁NF!XM,3ܑ_]qwNܔ5,chY*Rd>gXwWYRڠFj?TҨ*H6?{2*O(2pzUC?jp`EZc:~7JtXQ\6) d5 )lh')?wjJ^ rM>d 8PBX~!;RGqŒh 9)5<p:~ykgvW3F;e{#䁬vFIoT |k1xqߨ/ul׷cs]úznZޥԟ~$}Itߩ$gfw @"2c2!:x'qQ6h>'hgl:坃Vդ28Exaa!4UGEQ&hǧ<:: IDAT6b_zB'Vz6>c(Ο8 h6K|F UO :7sIm'k@Ee~b\q=K֧uGEb-<'[)Mxx8.-a5ݗI|Q^~O}*t3PTCf_DpU?X;߭rxI=8NNfbGF9Eσ7l4!3Κ+cC~I~jQӬ_&Uks5׌]ΗXaGY3UEa;2\&/*3q/KM 5ݨB xfbUTݠbD{4(=8}~p /⍋DQ mت)aL'끦46i4W=,qCu L3aw{?y!{n%:8E^7+;CR $ۓ'$}ǞBcBz.G0qXfkwTtI==>.bK.YӘ)l,sߥW'1;c*|<K~۞9ץNT ]r)ȸ,io`r?FJ^yNWHWwMQ9m?s謘!#;OKkh`/Fh$;CaYmM2"}RTc-񉿁;|() %/IA0[+2zK9-Mb% Nʓ|QwRt uQPMt>(V4f/ң2$oxO8Jy? 7:O96i j沇y:vDeu3=Vq 澺gHMhzMF.HJ$ ?0&[z_չГ/5HԢ*VoxϝSF[0BdpBx%k"P;poԕ/QYvv?9sI!OT.t,϶[z#9P+S5k譿`8 ]!u6命&g7wdsd{ .;zʀSXgn=WCXl~E]/.Y"П*p<;E t Sߣ\ 4+ܥh/76H~ MǨO"zMLEfGO9pna%&rx"bUU]W8[Ai/Pr;:Yz8foh-P= Jv:bD86hG9etS+)j^EkQG?i-6FGUtaM)r&5FrI\!Û9z5G\'0/b-B-ގy(FV";[хb zgN9%dGn( :k\TuZQ!ZwcqY=san[љDέ[b*ڡힾb^dJ4mgRO,Ւ"'0tSMYX7d4NuGnI}eaRnF-_#,q~AXboUȫ=!t(P1 Z+Ek2qO/u_Aweve٢3.[,Ϣfʒ5_نG )T. ^%2:ň&d|so=r8*9MQ6Z`}26V)NA墠{08::?oȝ,%9^ FԹ3t9G6@v[ό<y5zb-Jz ď|ӳ46mL.?u'^g%V.q_~p$YAi41JrYQA))md -bwE5OeA.u!'ζrl.gvQ>bȦꁂapO11{M4򚍱CW C!Omin,p]Snyڹ͸}2'kWIu}//kU6{Bz$gI7;Rt)Pkm=[tuuC_"ڸR4A|\]`gqX'fYB;AHt<ו;VQQ4Ѣ41f Y]m4"EBX "SC\[C—s<6aeAl[&t.J?S{80A.'`qaԉ򨅮 &)z뉸 "ܗ'&c/1A!hc}nY?5tO{pFU+)3XkDvy7nC]я-l؄ q[KR >ă$z4>yGGt)s5>BK< -zT_u_:DP:IG,p mO"!? KRN *N/x})3T"mMKMf[.C9QPW3zh_/%hMZ@ lS8j7/߷~~\ n MQ%MZ$UiSTK.K~,ct¦4ԏt8.jJ݉s}.QEBͧHh ]X7ϪMpW磊Gfl_a8_DYuUĠ9? Kpe=?J[ҤJiyx't3ψiR&$D;*¨&ad>ịEVExXz8$Bm31u Gp'TU%,/[FYFn3kv5v'I~w&_ͳ~VyyюAeBˇJDx"*el#5@61.v Kj#{?}bk{Ѝti#!,6OZj˰fjBh)st 5BHac\ȫcDnrBr] SEy絃ߋTy%ǪHE4|A;;J!EMH V>O i#.j.?g=Q7XDvTaۧx;ޞJiCU$3Dw0U4:kPuϫ9(rUt,>ϱBK/<]DsSD3#EPiuL"J,@GUE!P~q{1v @] ]RIԀC$:8?Q4Z)fUr ȗZ|R~N+ 1Yn-=о|iVuUGF\7(@m@W'(O ]4ؤD/zBUϜh1,i;%a4g4tyPoxĽ8%oTM:+r)zk/DUE8+48Ky[Od}Cj;E!dEy+E ^xxͣb既 7]]A39=8Ǫ8{4s aP93_uI9}Z UB_CDjэVBh"t_xiUk`LD+J\pK(/0jj;PU(R1}QecP6NcU 1ZR<ݎQ|CBZ~\٧ya{ F3- y V|/9RKНi77^+"2unc i'xJd[PEx>=(=b18)Q=I Uw9(x%% (ʉ$WeTeE{Hprɰyo2j0ڛybv L XAyX .[*FO*251;kHTu TA@݁SV4 K 9#r$)¯sr=EEAhnz#U@ ZE7x>ʧ#$z37 )ovJ~0*:zTG˨߼x(4 t30 z އ:4VgS"rOxIBa|%%N+ᣴP6 IDATEIq|{TzP7n E;HѸew<"Jc6@(qڮ[u^/[w|fF{S]ʦ8{22Vʤ֧YZר&a1Ix~&tbև֋!"R,_h0 $L<䲦ҥ2g3e訜X PGUw$\9!κJ)ApaFk(ho"TNVʋjՄH 5qIBBNN=pp&fcF(*ɑtWNFW95ýyq)!Klj3t-e8JzE )&Ȗw$ \{O%CfwZ]RZ7:*O,W9_u^!"G`D '?Iw\uRE!zaȆ]^ u8/gV3:!"=DYY^Ix%fc)&ȐyQw`=NATehzw)^XF=>Z˜u6Bz)ܺ.S/mb:N/10:IYђX#kr({۱"M! xIZT>ұy@*jTz;vSI"(WxGVlOb8uAz )Ȁ23} 0W |Tlb;Cvte#ש1 EPM4Sjiد C39Jˤ)^nO}Ɵc"# z Xꠟl#ϱRL6ʱHN%bhyjL Ov{I$qd\1cWU/O?GbF\b/=cwV=P4n+ Nv$ 5<'Epf~o]xd`H+s^U>Z[!'P#zl|+^zW+(.cЛЙA΅BVhcWXx #sY,ʭMX Wρ)Vek6N. jpt<;.\_6ko1bBU5TCGY:KH5H(AUQ8fYn/HN=t%n&q+NW 3I{5d5;Zg>WWv?&cVUR=vxYSӂEڪ29E\ST,GgW(s\7,Wrwq d>znX#K=|O1ϊhT>-^wGa7y ۴A5CCOH76C࠾2~~'Ƣ D-zMAgiҹU g#tYe9>ߤ@ΔE{x˟ĹL.u"Wv0LYctNPT.R_=E^6qFz5X8OԼ)ў)R(A͏$~\goTS${)c\eOzˮ PI˲GD#-8kF\>2NS>q4Mt*jhU "Uv{(sYdSNh!EQ:YqXH_:`9PXBIg dJjdr"`HASZgd9@]7CD~溎݆sv̓_݇G(˳H:v?8\7 h(V ?} &&q=.;h+db Ƚ08(OA{hPtP7]-j䤂\ ymtbUNP?hGEZEAj&'ml#9's*^!xH_s S[6p N arQo~~t(IX$FPc,R #+ Xͺ4]R种_#yx?J|<u BJT㬜+7ޫ✕Jv CtEZ(4Tyfn"Gc]>c>; /wf+.z]Xu2w4W;}OP1ňCs> *%3swi<܊CqkqV;wwww?>~?62C�L"]/e.鼞hݞ&WȀyͪϋjZbm{l?cT M{y1&d>Xo>ṝ. 0_cv۞fhۍA`ʩY-7=<11W"W1xEiDSRuRT\}XN iXxa6ऻrjvnC %\ï`:~9>*a6,"31TIZ] 9Ie v?&Sp/3ʉJԛn h~d&n4dYOV=yŵC] q2 wwW8ըii)mOҸ-T369_3/QgP}tJ4޷@/{(Lm byߚCB_J2=`z)õ̶oFsc-U9*i g'Ol9:^Nh5xykll"_RG$PSܼ'CYn?:#U\Jq(keNYe=%Vzsgӷ:Zvȷ"Kf@4";xh=QJ7tPB{*&$wXC@Y13%Pҍ0Pݱ ܛS2zqwj bVjՉr377 @:FkwN]Csdf5W|)=xpC([!c.T}- 3?46yz^˂/8Ob/e΀_TK=/ p-ɯwU"m5\Qe;=8KDEJq/9177jh*T^\fF+'b/p3"s?q(l:Ag/[eTO 2Za5̈́cqp@ WYSW/bb;4ĿD>Տ<^%3@E hޖ"v8FYWx\ǩ,愶LmЖn ЧfQ0ҩe}.CG1 C&T8ƫ5xb8jڇ? '^&0P4>71aL?Q' ,T%4Kt7t*\</i\Y0﫶2TYXpkz5U' |R(ʦި$k>|#^"XGM8*hUO(HE_w[E…Hv8KE"_B*ƹLMoݤ,Kkb*phz O&hLDE&fp\8DG퍰 4g7XSmQ;{~XưhD\vosCkzhHc>op!GTv?W'PzV^o)k1ʅ-mE1v/vaFK3![.>ܼ?jM*"/P5?*@+B7 wq$;%jb^6Rv[. q|h/jحM@P2~2GύF@ϮN8*T )UhHL+du}5]4l=j5R,th5(Na8G`1>"(fݵQ+uKU vBY `t =UM.o([c:i-cF^U ݽӥ[ݭZt`y-PC̮㽽W3Yu\*E}\QXcɺ>]xY3,Ś z$jZm"L:*Ahۅ]xSYBk6~10kӪje ,8G)lփC"&mmy3lERu5ME z[[2WUwKp _B8Ybo vULK^N'`5\FLTҢ"Ζ_- p5.&Ox:|\&@Y,L ^aP[q1H"oWpA=U_mQbTީ+'T|ۢ&SFR.kTfl!8(p 8tx0Gp'(!WPBC8lCJ wͱj/6a"MXK2Hq5 B+KALpNH͍+ԦjS|DE)LLdP5d S(j9vBk% 0xT6p}%Tg: EY1,HLm?Bm\L­gv>fMӟ[<,+#ʏcnGNeȚ!kQZ s_`)1=hEar)G~]+HY,G:jNFEEn3 ZMk?*{bb)W~ V lL{l<TWc .)uW0pJ}O=pwWݔM'7u0uPf_Fo!=bXOrX滅YԳ'-_c,kMskBZU&ak:Wv4~3fgKnj9\?yaI5YIJX 9vB;q8Y:m϶yf;Ի+h ]9',nFU\$DzЏF )dR1\J89ZlQ/'GaVQm!QTh= Åt~ȋp^87 - 3Z}~ȓE. /wc/PQ8.jMEmb'U3^:7m*y߁)<C)E瓰 &YNSAOEP9|ey&djb^Ќ^@! .8 TNN8rj:!&tg<` gI' צ/PXUŜ,3D@ބ0tFv\R.Wy^ PFqfN0c88GM S(6XGyvO4f UՑ"`jL9 x.|FI!4r`IQjLs%f|& x VrA Y\(Žq\g\NCm40?N 態ߩ9PWsa3KqIi#u@ȈUǟ`GivHUSE! &Am2GX aT3XR[>Qo-F;?"=QhKGj΃͜^M!"9>Au r|V2*Cd3{I(@05Q-CzZ%XosO8 .Dwhl-!X 촜jRl},x}O3azL s$XU#tVpgA؏C'w/m3$TC&h#i9U$ůUeTN*S4MyL*f֢V}k"oА?`6U]zX,}җsq@jR 蓺N+w.#D*B#GV֜ƻoXX'f kJC:5>`Z/R&zRxr㢚+1*ܱ&!rsZA, ķV>]UvvF#4gsÝܕܭ\3g\Fv!*E<Cj 9T'ߔ`O~_3$6>mj=ҩ!GϞf#)p|l.q2í~muy/?։WMSӓڛch>zf;|e PqttgGziUM ɺ_E1Ӟ~f6bوaϭG Z3,dm@%_~ Upv>m'=jcu\ IDAT]|=-["e" bil@n0Tkvo?y[?xV/̻E,jT+S0xv=UN+xe'Q_Phhh6SԄ*r12*+ |PKx(V[m[a8Z4b''XW/ftlmg)jg ,Ug~ܴ>,I*`&R E،?WGojzXTTE(j~YoE"6U2j꫊i|§6B@=5R6tt b^XM-AP_F)&P*hÖpM96Ty vE0 3CwڪWs *%(‚ߔ)/ˎؙ .CN|x A G]X"rT<(0w禐 MT|an/D#EʣF#n\0BV̧t155@>2Zs٫ ]b8j]Tʣyxy +qg.4\M pVP 0RF)s0-T]h"\6ȃXל#*8D f(<Mtq~.`Jb-.:(|jse.E{1#PI9g YAJD %[yram!|j8egWBcUS z@]J!vJ^ v^rXyU*?m?EN CAAJBp0'AME:7Qwf?M_$~0-Zɦ^,ۄ ^I":`LF!2ɘF_cU7UYi-p&[oBDo_>m~߬tx?D_Z<XZzK~>[l^$qȳfozW2Ac~ʦE5Rl oyJ={pڣ-Ń]~QyoP8Av@3Z&.O7~T(hwm7aX(2hf1h\GSysPn0Z͂uLXo=Ww zhiTؤxjb̶,.Sq6'|hD.Y/6YɞI ^ٖ_{,0̜j 9S!4ٞC7WBW1leE }̜*{jjڔ$/8sgB Ywil+b~F~z%Z 6<,X m9ʶDbسrk7*ql cGW?I<eԟ8*䎰wvus47Է,[靵+#k$mgj~@pI%B#~ARί:CeU "V?ʭR(T)qwPu esjU=Y5E30R/)߂|n y0X#l3XP4jN30t|  b},.1>Z*s Cp.$x/֥:ZkU|OJCM w8A!fCHOj51l-H6AI_?8DU\1TX6檓*3;.!8NEmi1~^ 'ZXRS\Kh8"4{a<+wHA[!d5_^6q\zS->hamMZ6J9oF|vg?+!skSSETLg*joqw [ݼAwB-g+rcҐOԳIr/=/ yR/ڇF#{)'g8kZ8QfNĹ_孧o\*!@TnpPh w[6>؞+f'NbȹXb~Q68EŠ8#F8ZQ#ǍPF~1˱f?)eAkyK&Y@8~CxMIKx*' [~յr˶)hU}?NӾCA ;xyԭP@UP_c޴LP1[,yM_|ٖxWGo`z3X2r&-qb<U )l O`TG;᡼ .shå 3Op^p4Z Hzpȗ` Q;<)pd|> +"t Dr%G˰"UU\+<ܲB)bE# NjV zȣ7x*eԒu F]8S0U =Mv̇EP;cbw8]SY=\C\Kb6bh ?EhdU&Rf&+V hcrAQ4Y(mjg64/z#~Eiq1˵,7_E*\&Lb"֚. 2Wa3k*Mk nԞL%HU6K{\"CH,?­O'֛|uŠ9:΅N+<Ǫ)FqrU: C_́"]T0mk9h¶C N|f6/O_ K>G=@ o jz`W|+~}f+:T|_6iܪiS Z5r];"2#jQ9zkj[~VG|ky+ݍyl̻EFD{~:`x7;sLHnr-)k*[=CYC4obJP&+q;ϱֹ3#&-u~EkLP[PR; S#:nN̍ kuD{s{s[=C=ixʫP_҈qBKh9El!Vƶjcx4&T0??]ԋEd&[Qb<=T3l:m9hm;o4D)|xۿ#}.}lO.@]6ɕߐ]h7"|HȇE!%`{\  Qq[ZD^vh sa:)B],k©X|u'4|v:X #)7xx"$_j'$a# &ae81^PmC͂p8zq%\E/iLKe`EIQ*HP2Xun "`1 \Fh m]0Gh%8dWpVͧJUq{p=Cw~)'0 90Bs\o"9M ؘc8Ibk%<rlR;/br3PȾʦ>J :֓e> QPj0;Ty NaTKC 듵Oj87iw7e+b91(Jk~*5J#F@jxD .m1)T!TCۈQf/kcRrP%|_MQr3lĖG?m} Ce|ZSlH47m* MUS%v)4`%&C ;M4`!Ktb78|YԈl3ުզiN|kl~A@ y j|©^r CR)jDddL6& VȏfG>íu( 'C% l,șx8 Ǎx >{ )V9eu+ 鵂*zbHdUL5O6,'8m7ԑc +ӾBkl~6"7 '?*ʓR[UATmE&/*3Xw\FJ,On¡7Wa*PT_ǰRD,,\s葶j.Pd &;UW5W_O xQմR{'o{mz AQ=W%.ӼZmFpJa{C'0.c4Ԏc Ƒh<:b*7SpZ[DaŨ&86+ o,=8y]Jh֛ •Mj gZOa{2Ӣ.U6A 䄑kHb[1 3H'˩q'p3tIԇGpgApK3?R8,stvyX86'ƣw- ,6KŻ:qNz\zZSclig&fi7]^{61Kxm=YzBZ*E>%Zj*|5#eoJ,QPjekO<]dCȃ-V"ˋ, se`˫o]/W8[3{Nv[CcRڐ$-ʯ<"{l9)[K@_de_[3n)J < .M־D~m-Me}tvq4P#scE>3-';w5RpJU>17*k͇-Pu'%O*4Q±*k,!Q:e4XœxO6'kȾAba"W+lӗB̀o)؎#ף]wLM'F)I^m2Ic.o M|x?'V˰acOah6vśW9{`=p<|m#U":_é}N7\sw E7m+jwix*'%O\\~%--:mb5S]%P$%ft]|3v7v$ˌ6s }7:.zP#k\;$>J|%)3".r?.^.VX%!<ƙW=Î8L4n\ |./S_,a!'DЂ'qj qE;UY8o xFpv@+m65ն/RlȣG'5?67]I&R/r{RVjgE۸rݜ#x_YG=O3q6VK/@''J dmeХm^Uۂ/}p%ԁ:݅t,p?r LfoTX Y0K41 aPgxGXU_>sWx5Uvu6ju(<\Wf2?G^)[,Żp PjT_Dڋ8_9Ė e3/Y*Ƈ"^CV5; 8,8 Xci<&'V.x6xt_:xQ냓 l,X`ϡ'SSӖ/z4^Pcyy؊pv? .ș&$fr)x/} li5dzlhjZ*g@fODBphlwhx#v; u72k8Z,;lKsC ̭㢊`L͓kݸ.!+su bQaEBĊV)e뽐bSfMLDŏ)Pm Zk̯l۶]f۶mv76^ԩ_3z_eK^Hp1L<,qA1wQ9N-bgLF㖣Oxc^ #j" H1,GW1&Z1Z/R,S3m0A>Lq |Du*v*@q5oXC8 wbQ;h rj:dT/* 8 5 AjxΥ4/.ԓReݙkȯ*%<)TAGN`7ag xSr`rib^m)M0.\`r |pia.!߱ɝeaiU@gnMx^XWJ΃`iD(8ҨKXkC=\yF̜Z,{妥pQ]삏\Ө6rSc!L6PNIFshP'zɓjXtG ].=z#GT GX|΁DԿp#G'Q+c+GɉrZ0u&@#){*]dۃq(]DNOε'v~as?\ljZ@p 4(!X\/9NqWb0.̯%dJ8iuE`eRkg'#ffjj9r&P7p_x#FuMggX2|Lˬ)#WV_1=XY~vEMYDmNN3 ݥ2wJm`~?S.F@Akji!k^"!*H55(tШez.W-ku𞶿_'o%.Ogf"Ҝn3&oczyoSl%Z+%Xlt럀3%ڗF JΡ&W*-R4kX1loXi| 'sZY|1pl1I3!M^`$Nl}:gzN:Zr0C > jU[i&r.N⦔ ëO4lb#07$H1`.`Ô:hZ<3H0Pa|¢V*#t8hiCj@xX P+h <&ASxTFA= uPXU@bl*2TADSX4:Q"\P.i K J.lpL}9ZvnhKua,lPK ƜwOZO0 pv|5A&\žb.|Mkr'\EV*uaݙRc-oϠ؟ cxc8y4̅v4 O+HÛ8 :IEPoa&?AV%*-jr(FE,` ]L@9xxU/0&9Ssg3<+fgvgV.gYgerv[ĸs͢Z6a n"Q:=N$B4 Lr2rM#93*w %4I@<;1)s^ێsYe^ y^u,h@/~<%aZ1 LbAK>VIԔ*(lIMuɽqcx e\ۍ0GHc{B5  Eհ5\65QGJ'>RIW-?6v6m|hK+ŦUxM8pxgl&A-JTq2Ff/s8pl6Igއ&֕Ms* 9n-\)Sk7AvSJtTǹlIxeA(4Jy B<"j05P3daF̈-MܐZǁ| πL< 9ni|"  N|M? ua7ߖO|VQ! 7%A>faSnZL.|pn`Wyމ*^=v@9`Wh}๺p`?۹ֶ\YN .J{5|R<-^D۠P!u!2䫪0J'*S=9Ο7ŗ!V=9ǙoS]l~"aOsYTNuf`!3% |AGjB)oOߋfY}XF۸~xOht!)T^z6_SpT A3d7(EgU1PE[ZEII&]r_$vp_g`%-*4V'Qa9۲C!(1MT*P>ۋj*sS]q6 #ДF_p]R8[X(G'](pbWR; +R],?Od,7v.Exax#G=%JrDԖhǑb#Bj ("Qdp϶?*UOG cNiJZZOvmo!.G6㸱]7+˪żg\J̈́ɢQ >@< E.=Rx9UC`%Y9E ש_Όn<%3pp<+a]f7&dQTýxfͩ= c &E2Q~Qi!F Շ_eS) I\2/)g܂ ?/Tg\Op6Sƪc]LdopU)1;4s'ƒ`O{9ꛨ>ޣ9X)LU!X~`"?Ө1d03A!^hIkTR8y!vP ЅOU 5FZ}LWE?͎S1#iG1p9 vmV8/Xwc؏Y8! x cS(znFi"4 HJ-<rS|=B;A[D8m=RIYC{ v-\WTGO#r ?d naljxYm{KoЎ؏#%;j.΁)V/ܷ'ewʁ@L`~\ȵ}/]tiZ7$W>}.wOrf|Q[饣wALTy6HIY%k{O8ӎUM/}ύ%}该?15*6؄3Kfj9rE6#)GwHr w.ހ6؄kp%`?6'`W,o4fQ6;QVϼbe4d6zڑ cEw]eyRcaTJLܦaGrOYTsB[9 ﭛ^ pC4UF٦8 *~TrEUUGjڣT-z 1FRzk>Νэ/t]s*|QAOOjq{6<*)cDQ[Δ;s\.GͮpSXҌL}-wY`%9/<|J]G;s5/lNFO5]>ƏxOEVrJ@.r9~+93Ԫ$@#s"Z\3WtmtY~O|Xi[e{!I9YA8S(zkb4 6Ɛ.&ܡ m^KD"vOfΧ"{^m2ю~ tTE\^,{xu7\G'=N0(rɚI} S-,([]\! ۈifxX#H;7ڠH IDAT},䫯M7:s&+ٙ>gXǭ_RU&`ᔖv) פg?W w}}V?٣؊sfW]*N.Qֲ׾d W 8 s%EYq+Or)YV`lDE0 q,3hSY3qX jP-+iGVW cgFDehu5zCj[ 2ALKD}#^Ȩa _@ L_k{sJf b9٨jD(ҧD9n;41mOc5j_AmzB#D3I@v+ۗB8DMfTz.>Z`Y6_DNW)ټ5~S)xnu&مD' muCh.ҋ%}QC[euaәk*9$,b歜O-b.VSa< +q0?V{@8+ PlBQ2pn3q /p1ԛO@?g_ASaGt_A ֆL,Is*x78g3_Pw=P2OQr@vB88>~_GB fV:ZKQ9ъrs%b,6X[ Y9 oq_*+8oc ulBPwF>ڳ&וez~vTP}eބ_k59 -\<7^Be' " )DjeT̢j H(ǩ3UTM8 }U-81mR@st8*9SQOTEO2f -.&gD[gj?Z ;xh \MX7䳆B]+W8@$ 743}_cN<ԶFS7"E gb͔Y## g@ +}jƣ캪cփEj9_q>oZ6%P?7se&ԥ76ى0k?\r>!u-[Ѫ}ڑAP *k\Ț eG7M\Y O!!C򵑤Q'D9[WU1"LEv (qpfq9ƈS~^+uvA,caZdgPTh ھ/W5*Sy~FVjIZiٽiA-MqxKbJ%H|wJ@an X9h*vz9ʨr[Q؂e ,8 :Xo saMW>>uG_،@[0T:m0V@3 9*pr|O}TܜBwXz]p[^qt%Yy+];&P7C^N 4R TƓxŭ0RMݘ5|kg3{ VHMi~ ͌pC'Uk54+ EUO8ֈO 0\*[ XN'*E x3jANUC*pzqd8K9KDD#.43riK?a-{PZj-1RU?Np^ }*Rjn|v:;]믙+C3+a.e&Z[i`or L {㕳#V b],.e9biur/0w"bhDq(?\I\kk/`]j᭪"7Wp;ZY(A+4CF$noAy1?zZk_N_]Xh#%W]7 69ɏO_wkV#sh䭈m#[qٛHsJgKyW?n|ثOv* n90|_S{dU۲m={^b1h_\o3mg4#@W#W:xoΝzD25кaLq1#\=f+OX814E둡`fSj)'Bɢ?u,?B_WG G>/Ǔ'cK_g&l |9kZ9.^:R9zV1`׵K!Cg.p'v#i8k}02=b>+U0cxGq[srՔZ FKkP+8#0bgUږ*)F#uΆgS94MԆ&9jvoslk^ o)O\G]#yxamazm1Yn/\M*ynN݌2|OTȭG,\\Zf.)4[liUTtV*:yBêCG ;PȠ5PIq*@U"Gf99N()%Q{Oe,v_s-c߲*u/CRp/@b!W\ +pNP F(L1k1TRP@-T(3앰:9x^a7q2~1x+kW|kD -7,pN(qWxL\fb(-`m`>hi=itc~`J.F+ø<lHʴjS5pS Y>UБʪf x-px™$"K`u ذwRΫFXe36Q̞=95TpS)po1VV7js\VsIF.-Z:(lFn=x6>8y2#9U`4fEȯ*zGo0w 63!$B[겵:kN1zy W\!`lv㥼 CV9^{vߔho֝[Սnn6Zam1Fe ܹ»ZY{&ٮMw,iel GD&O },K{pqTQ^> smJoqs? }at]?bytgrM{LE(s%*k &B L=jO|F)v-:;fgKC-̂vi<=??d @FvcޒdwPa\DYk?kc#jtC2!AA>z.k 0:`ӬѲlvVVԏ' #c1|n= .m#qb&"yxsBc c;^{]VY_xdpje@Em 13r.l'?AsBoYr#_xg`%~\B&`6<mh5y)´)G̀q* ߈pWb#"G> , Nj,P>/!p.F~Uoaw jb3=1gPBZ汪Nc=?Uc=5M| 0ڻ0?v@%_2uJbw/d:`t:>C`jmAKuPJ˚z_z8=ӉH|ۯN@ݴxb*q#4o| &8Ľ9n < |[1_l\Ђr5\G+0g Uv-~Gg\˨2Fgq0db5oB~X؋pH=6//Xn/yV^z]o̯g$[`C$s~A;g6Gj!Y4-8 %6<# zpGUuDIQ Mnc3\]9׭5/۶*.?Z;r V-㤋BPXCv膋#)BQ-O9GqZٖ9tΡ"' Cp %G} X\AЍz^! 2rz5ggӦ}2@Iܬ^S < ʡ:vq6m-d 3ڛs|*1`4N,㨖[ ݠ#4  JK1R+I[Q01Mrf(N/⩊ܫ.b]v#%wYq=tR]+hTPm+ i*FyEI|Z=k>Ni ¶i+TMrTtAԤ|.\Cc ?@MنՖ˪>ʉnf Ȯ, ?a* o[THJ߱Z9L{.F@_Lq_LE;E^h ~\ ag1iE _U^<]`B"ɇ-kS۰2\"։#Qu=޹zaUU<Z\Nx㩰C ȋM!B>o޲)6n0`" ЇsiUbƫa/gX0qM͝Us䦢09,O0M?+!Ji.Y4^ 7&L¥Wal\mNL'.vwSQqz(@# EV.KT*DA{yK3_d3iMeO iocEh-y^y>K][ކܕck\co2$$yV_L#rK҄ę>4LYޛ=C_Нm?ҶIn8&GD6X`6g;—ۼ$z #pVN] eM)nbnjGj ǝfOc:an OG ܛ'D;P"꫷`wJ_kJrZb`V1`99LԟZdN[u+sЬeuH=sǔ(_`e1'OX\ޕ0L_ljF.mD8>Sb~jhf2;m4^Sb@ߐ8:c[lEa J.Eɔp,JLG)欒q? qP֪) Zzc-rɽXrOX=1.*K1J\¡"pN$;X cE)OEXZs9}Sܳ58h(,uVwfu{;xw>,')%fNK[(@xS.9wi e(BːpC0*TZpe9+W&'ۂ!0Gt[M$xE49 aP:8Vv &Uø *a#u!SuO`N@cǘe_Aø=tZ;| IDAT:VTUy(:Y?Ո~t : zSD/ sݏҫpm~(~zo!Yp8 9JM<rZS*c 9Xy ,;]> 4d[ƿp3MZ 47b~ L|Ycgk3NZmM(P+DѨ5ͣ("85tA XbS{qq`8 5qVr~TV6ŽpF4T<"&x^b;iCxz9tsĞuSKbKkov/H~ޓ[.F?ݣ'b-EB!n3Ej%NT6u5著Rg( k ^SyULBؗ iݠXDkO؋hH*<?SOsp,خX71+%La_UsA e<蜠/ON2DAs r$NVi~.S@m]/u@<3g69qBݖIqTW 3h%=/UE"y:7,Q!`Kł|uJ6Ԅɉ4ǻ2\V57+yS8 U2F㕣wVv-uڑf8Y8͙ASVzG~h'C>cܓ3apjnW]e}f9dVP^˼[mհj&YBh4lW視;M&wq{﮳;B<6-U (/h 8I65Yhe<*QG H֒_K* P'b+ނԙ@>~L28U8Xu,` 5.C6yh>GJb!UVg70dGmunx'=1h835gJnV#eNqI=D',aWSMԂ' \GxD$1(8+ F4 l ԃԖ$. cu8+kKأ.Hy _vp\k|?p/x&pJPba q _ʏa>y. TGE0Z5)EpyJLF~kLZ|NewPgW#M,0{*lg3VW+NpBxG>-D11K-X D`/X b3-<+ !+`8XN!4y^08!#6x,"@FmV d])v2S p&N2~x Yʹ(X-o8Js={xS/y4bqWJ 1e̕Ib'Z<_y7.Uϻ!ΰ{M;fNocv&JvzN3:.;]h]ȄÝOL'UOTCaw xW-],,2c,]s^DzV Wvg*QFs}Ԋ@L{Bu8p4p Q/e(7.2XETOnom b;,Gg A : (#ڪ*]?%9 03;u& P#{ZeVO#^ڴģ+&}\cWS79mVU%D+oSzgmL&Ȩ1=͹![GٙpϺJs'Qu'x[{d)#b$X+CTӍl2Վ~sҳyBжkx`u1;OcUA{%"0Ӹgi:%N|}\;eGakz^Zx\Ao!n&G8;gRM%rnxA|/3qyG 9O$jCHswvUE{/OԕR1 &qhy8XU4k>鸖2fC51ߊ̸QhdzKc B1KxC t0;M$?*~BN<؁aW1mX2b hTQW~,%C?!{:~$,um.es ^h‰TX]ǵ_b#/pW b"{QdSesO4cQոKwg VyC619NKK ,0J|YVF-sW>2 bxᓃMVIښ @؎3SbSŎ;@G+'~=WtKk*hoiTޗ̪f\/[ ]ˤp2h9zaY̬)RbQh%vd,(*xaBZ#u/tl*1ը-b`tʜ+,sPLr mZ+)5~?SzN'o+'u!$: g z> 9X*{:f?| !H{'pʼn!fc'Fqh|b.#69s1x5rXp!Q!ik1V3ZBj5a\^mļ*eqP4bG+8Ynox܇"\\;gyW;*s 6` q` -{Umy"WTh~ûa5 ?oh@wB3ܑ;6ўa9/x+mC<0Y !PZ},O8Q$ \'0A9Q+ f p6cq N$ x8􇋘c$f9;7`UE`Op Qf8>qT0Fh=d B)'cn Ϩּ6eHV0W|p|!F`mŸ1fmVHȤt8/.|M HXKa>H9IMQbrxA]!]b%Xl'RhQ\S &sz#&x: .WIm9mx+NJ s CN ?*̉xFbwQ xu"|N(PreJ!pSȨER[(} E yBfky]3^<]Ak9#[U7~tLlTUh-1'ž|wSKg)%3wD߅yEKy?MOh?%=wYz7_HW7Xj/e2oLqYmo+>:hݘ9V|%N⋈I"} 5-OrYzW3MvtN`vqA:Htŝ8qhj\F}>l( yBFfVI{?ULv|;&(yF).V?o3QIOkFzH;=hbgVg-Uurq[[} 5®d+'$rqYE fM8"[rvQR/V n*8&oVayMk⪂G`9;Hݒ=V&8g5#y.e3Q 9ϜQTeq#\r#,KZ9R]i߽MĈQrNf?\1 ntu JxϷm0tp<\ AdiNcSSK$ݸrUTuBQ_cznp:Fp[X `,_>'E;PpSi'tS42ε8&B_)RwohZR׸%vu\|Еs8-M,s0 @I~!_kp/Tf+op{("'sFpiE;lߔ`+.s(RW3Tnx4ѠYhj.<\%Cu0q1_܀:X_b.3Jqrji\gb2A%瓼AK3E_B!J8@ X|7!K@QŨO\b3>}xX I8[GPbS/:\PSSॸFU0P.Ea.Hi9-⪼G{膟_JxCE8P3KZQ aa;W ˈ܋;<O4;K˦jŖ}NϪ- U/bu5} N YV[W{蟳 Y&ic$UpZ Q`WkUW)ѩ9R$˓\?'vLT/;pL Pөɐ匧)DFJv]de4A,Oi5q?!XQM Wh+x\M_(gj8<< ;m< Rd`\l}WK8 ݵplb 긖=run}}i+xDK?bu?㣌:`Pj-뾅͵ pRN@ QXxSq5*szL=x%UES$ӇS \t?S7Uiaxt!\T |p_c/݉wZTnIK_(r9M4sM͙HѴ@(% UdI>܄p!EٶzpVsᩧ?Yj ;;a#UY5]Z|RnW0"CbK'hXZO̎?8 qfk$J K9B';BwoR0#VR'ذVYU}jfodcr%GʒƯ萘w!OGUu>i?gL uzʤJ-J:_җikeWWU] `W)`AľZ)*N Uqg}"f4|Y\8b]y?g7TB~yr!tNQ^h9L)b9$:T@sL*?a ް{P jrӸ V_YD`•ܘ%&& a4@Cө ͣg#Nڊ edZз#zx仯:;Tr_U v諬V$OHP!n~=~͡Z{"{(YЏdNZ#v%bCUBNӫySDiXn ^D.'eL" Pm<'tyA&+$ʑܶyN0^`™ MA8SyygK IDATfb!qH6Z)VIQujFy9Hp;roI55t|UL9Gw=1_ԉ֡R!Z]kƵ2 jl6ITfUOکHWk#5IK^kM- bH^V$_ Eb>NLX'fHl[ϧAc-́rG wp6hDE|apw #;`4\tZR=8EEѢ"3TJL\JM(Up QNR%DnI/i6\ YG)7a=8]k{Џ?6M$e;<ZJ|"n|n7A .sAK3aRWkr(,A-XK^81 gyq7Sxȯ Y̙8PPUnUVw]| 4 u"˼ӉSPyɽa <0g1܇$A}|QU0onģMPx[p.9:|7 * /Ǎ~PgK zDgaI=xO9DLW}9Z{KE.Ghĝ1c7OSXu(-`Q~ IO[ `(b&VX|LS1D7pQ[}!t-hLr˸!oި;xA p8+JmZo_WS [_;Z9u}VijhPMGaX F@NS6w@.sRZ͗ϼ=vXbU:Q~ֲ뗵.e;NLMhZh@$-m]f&uV 9f1S' -?فuoU&X>ʣq= g) >ωBpkII{8FSs֩gIщ*&v527Q[T>ZyPyIhJi35YpEW;oarj3<_mi 5)c7"+x|8vQNw~I=݈;|N 4U WvFCe8BYeC哕6+yk!ѡrxeljU_7K!?}oPmbC`*/vhY|aBܷ"vuo_~M*fUsf`5h 4KZ' :>Ue8S錿dO4&Ϡy~[C+]@v>3#JZbL6~i:#x0/ERэ:J7vQyXrsbPYa|9B; V_:֦k^{DP{t7rhKn PϪ'Q[(`6yF%7ޱ휒C#X. 󝚜r>OE]))G zj&ŏ8 7翱pR${ q-WYT4,ݟ(CU!~Ky MpA<Rki3Z NL4(~U8POIB ׈t_PF!è>_b\x^tubpmx[?Le|GS1UT^e4MĉbX91x M" KIj)/Ӓ%v T@J]:Їr=qc+VJS _F}$X8{GuYGe])r&:#Po}/諙3m*Zm([=uZmִ@3S+i۬̃Xd%[\fԈO^`=ךf^VD "dv4⸳ʳHpM8&N~OgQb=b7Ex8$?ş0o%0X5Anrpf߹8VAۢk{~I_yհSW bTӚ\\׹,)dFyտ}Z?rTթ'Lw%$'yg' $j8do ؜c9Lm VjT8[3\}MZVGwZh/d.G^*+Y9 v>k9]h9|`3DJ´[;G[`Pݫ`rfe{^h"Ĺj=59Xou$^p]8^dgabci ؀{k D08h6ť4 d }O:.870>sZ1 =P,[rY,*b^bf ^Z2,VɃ<j2FG0>]PNN 9kb8OlaNq \91/6n+oZܖz7z }Jڂ8[-nq-()@q#za ~PN>ŷV|6F_pcⵐR$ 60R+OHO91vC ?=*IqG>}Jg)P6 @(c10ǝzЙ+uɥZPE%Uͩ8<,WT k瓖.{ЖzC“a2l. #C?%Z@=^pjX YSFn?̈%i"_i[eInϕ&A]t_ l;:`WϤ3Wx&buV}`8ƕu_5 d:Vq""{oQl|Fknؤn+әdUM O/\}*Wt'cs/KߐY6Đ%{ٱ,+Q8gF&NR'v'QRʄxJf!*a}C;~me5L5 .p8ue~{E8-nFR5|-J'_6+ZuaPq=ԵA[0KGmF'ْ .p6Ѱi43p: ʢEjFٜx2`xݏW]Uey'h?Ęh;2X yi=qb6xrXkhWj{2ۍuRu,Q@ݷaӴmm۶vmmv6Z UOv; ̨ o͹FgXz~BseoZr|bfU9l:!Z) ؇]BO.-uQ1b"tR$ Y-ci{A_QEc5}UMau[⫤ "Dz3DX,qx | TH< 2U@Y@ߣxa5lJ*6m6\š)#Vş8 J_opWYI ҿU0GR$eӢly u1Kqμ)OYlf.+5JB IYΏVe[}q=nZպ~Om QFμ`t4&<9h5 =|SEVY KyʡvힾvNop4?i\^ [Dmg '8RNOm4DCcj ! X(&}8ֶNH1RiLW#00d X l[:jK!XC~-' "\\S|cӎrȉLQ"d ~qp޲45ڋ*:P(Qo2&-6RO5" {BSnۼoIsh.zD#e/TmݵAo&0Zs2ؠqW O'T\44ӭ޹T_L?s2 |{ZSɷT2c(UC7k5bH?]KpskO |W7.5JJ輛 9|ȶ!0 x)su-TJ|)? QܢA{!Xi =p/5" /K~h 'f?"EҤ#>N豑bȪOeٖrYa0.z/;!J !_h'VBPcԼxMd6!JQ0&.0V9ܢ,`Y /EIV c rby(zʜĎC0}jJ  /q5F;BAX/2<_Ο2VG'}a>"g9o訌r,o8F5d-qA pSJ8h-F݆1| ~bTVWE+؉6w|c 륵OĝbNiIq;gWa13,Kh$p3X"JJҏMSk/aZNA!{ ^9Yoշ[(+UBmO:?%pzJރl9 J X/8رW?f }ms}7!PU;IA%w2X  i YJ% ,EWesY ~ |T:lR/l}rAnV(pVC2M&VIrW:ma9RHxaØvPi 1̀% ?(Ҕ:{.,|Zb`4Nd;m;`?#>zkȁa?ZЎ^g&By:/ kUdNX#F0ްA<0Zi4C/Y%?QP>x#Ȍ %2h;lQ3 q ^`-2ۧ,0# nxzp "yK(9GXV<+SZ0XQ4@l7%ONaAi!h^R)lmvXmc yO#kH 2h*c|VDO_hoO^ΔR.$*iՕz/.g R8VtԫkԮ `x-Y.ΟZ+?Cnq7n@;ouf^K;pF ƒ)UTSMo(:n>,ea\fW);նj/ҾQ7yB88u,JaUn-|G1 J`> ,2Ց|6'k|#Ӳ&s';7:vDl󵷌TW6MD& |I3$#e;Mi!/ld0</{.9Ki?l_7xV5bx 1Yv,Hkj&_#Wp[h<%X8COV\%6k_5)x_cM_;ˏ}"S׿(XL@0ޒOa7(Vgc!Y=4`}l2v6r;/Sx?ҏS Ws)m#e4&ZqpGj}Mq=Jc3Qn0caul-hgsN%z.z{y V<{ Bhe2]鏵a蟒7/҇3&<̆e8g)bKƙF^ U| /mhTZ&WˆV=g;p.4PS/l2< ')+:ؤl #(I: ;)F6Ò0-9 %,el8X)B6'2Vvx<~Vte.a.zE_E`;(Ca2+*!{ȯ8eou/Lv:e _7݄7V5g YUٓ*娘m™ŬЈZ['/cSβJ:H JGhT;pmfq MX -gB0.V]`8k8vV6GbaxVEyހ RCv m5C/ym|bV[^E| mD,J!oPqZ,Z%CījJ6wVc痾"n$c.gnri]%T)6J}"{'ZK\a4O `Y]h*xBQ^ rԞ|zj(v=(0S`C)gbFcQ IN^7tG(aV]Kr ^'n+ V/0_<|,ܢt(Fe!눨K.@ڋr31nn `v ~Cq4?`~+$M)3M"VE ;ga"/o>ao]cTb]e]xc0\a+YRmل.PGN|ϲL E(/\4Dh ij=Q~p<?4:)dMa[6 @@g "r'*P*od3}#R!,t@ ͼ~r//('m;BHSb}~.ӿa!ʹ_mz` !1jDGOmw9oZzt9i4Wkn82E3J%R:C֚ # <.t+ zzxZ? ?-x7b> *wX %GCbl^ŎI| ئu洂-2tI{q*bt]%EOoGbwKj4;zPuoKC QXwFh3Y$ r|sjv9_ҙ&ybW!CTKO H)T5$[V56ƧpnI3}015A= (h[7ndTjg|lNMOW:Pp-/n WL)qfJ}B[ޤ_𛼱EhD }(͓TWǬI Wl3 Yq9ԀOD{9`$~(oxY\lt1?7HITuvlHh-[wCBY>&} lO?jA{2o]ۡG59 #Ym2P'T;S{Os65ŏC%ggӬ:ԛQ*3y2u(cQ,lCgU7EKSyXl8kE1c [ ,z@+ ZMQ雔Nj(Ͽ0L&GfI;&WD[2axT6`'( }vu;TC|[JP&ghvQJKEO^[Hz M+&f̋%vB0"p*xp+"`&ɞp JC%|h 4.wWA^FQ 'fXn)4 ϩita&v@1pЄ~kew |S 2Tq&lXl5EQZM c(>|drHLoC+X_!H۩0Dan=-T{<\$gH29S}9}Ǔ a,q  nXցOPjTxS!*,D GS!@mm `ʲ0ߨ,) ˁȕ|*Z +1]•ڲS%lf[K݊"dOVQ-rȪ.l0>()؛/|_"qEB {%U UnvJ `XYxg![ ~PǠXB;QAm2KӵXmG#ܧR'}hotJJ'SζA; vw5CAIOo}멬EE?$^M;]?_ٸ!ukjKpr%or;Ա0M+ط="ux\ػ^'.I~V7oJ\ Y13Uݯ(I{{' ~g.sO9¹[[Fl43Uڟkd^l q >iջ]P?^·)TR3ZyS)l!E$Ddx:h%WɽΩGxM0bVّ-kgP{`>mnK#QliU{hս!KNo0Rm%B'fsjvڙcye=nQJyғ||ž23ɲ=U\3h `W|0k[g^+Z=gQ(G* ȸljJӧ%M0#уjp5.3OݮP;WX5Zdz蔒5#"b%~ֳj<-5p{rn sfMa-lF}0Vb1l- |'Ћ~`c?`l(5 e!R X:0w{,r>&#axI9C'/{fA|AxVw ;9ll2/U24 X^W*x/*C̡8qʭNl6Dw!A `q0 xWh+J̴E%f +P !؉0q*nMlRgSG*<-(-ԁ&q0Ftg»y<"`k+=A>H S@S[ x;*(T/)eq ՚ḁ\TRWQ:!,9â4<"#Ͼ\pFa鸖T?֏iJ^.HNoG.Zhekd IDATN*\cA8o_\3GΙjqH7b+"SA{g ~$>!{?sWoor+qv5Vor1PVGDD?"e #{C*?0G$Q q*z'R?6>&klC?VqܙC+a/}%G^\MKߠM ^+X*yN;cũ;l-Gr+Y] A{Q]ǙoӝJrai'Cftٗf n zo\g-hL2Zs5ޞ<*c@au+W GdQ *xQ>{DVK0?[UpˬPD̂Uޗ+M< ZA6H)us^\*Gt`7zЛAs^' &Nxj%7msԣhqD?R(}yMusGBW͞JcWQCR b}"JօfbC)֔b)U^kzɆ[鷿w͔YM6]gխ,F6"fح4*{ܮD&SkPv#qG+˞)Wk>A f$cY.w:_dPԳI-3ޝxxK rjc[!gupCMs>QcPϴ^vU5yֈⱙ.X/Q~V?~cQ&D`5yH:f_`_[l`Kͩ pDmm]A<*$a3gjI<V\>b.Q7Nw-3'r!X :ڟk]G/2)NJpMrxŚ<;B9sz֤N%8:*3.O/l&{ʋ4=/c}JrڋkaVkd624RMNg S-լF+DZ mvT:b7t -}'_KY9OvH ':64G3A +8+a<̃ j_"BQueIP#T)C>^jtf`+NcW ƃV \B m,*yy,@e\; 3#G) Pb" g*@k >s:s`iU5ؖd?%sQ'TôJ& 4:-O+ Aq6e^9%O+#HO\u[A'ZȜBW1X[lu5<dW3SI<>\sܕV=T+]CW@m+鑾 si}re4^5O\Fu-Z6Jpw"ŭSݥS\};wHB dɝ< ;.E4.`4ul"lTh0  0Xa{ eŕ +\*ϩ(#Xӄ[Ha;vNxQ zS8ugi=ij\TB&N@pנ.#2w8.~a`0T,, s ap !' MgSY$! b'(O/W"w( |&;i6Xtv8@i @6Q[v/8Ohbnֆ2l@$bgC!Ll sƊpOT }x G@";Зlώ(b2A}t;֐JK=6 `#nJK>bHdfLXQ y4 i4pT<ƪ*V_Z44IU"玘!_i|Ikvyf3|o|x1Ql3ETn\~QWbgapйC #1NTxcǩʿ͖oRQ휶Q-+o7R`^C *vC=[jLޞu>/kO >8"'ܛ?OXa=yL6'ԑr˱4o"gťV@Q˰X~G. +"FUӮ3&P;7p|m|頑!_m׊9'Im&]>Q4fJ3+3YC^~R:ۤ}ug%+ox_soUCX6΢h i6EFi me(E)vUpZ[(?V~qQ 0 7%N8+Y]Hj.->hᶲJZ!~J%b8aj-std 6Y뚟]W0HL~1;=Wrq|KkD uc$n6@_"ǬQYcBcݽF5sf*#53goVge`}S{Lcx_i d:IͮLgw]uZx_ ]-L}f}sklzIijU&@fhxP({'`O&<ʘ &&geis|([saxYtBK.~xXGCun^󫣼}\r\f˲#-3 ABZf <΋|tU y<45U']dPl%vL~Ĩ*IsF Yv#:, PKDWVrOAxu:cQ$ j#jt:`}(luL~"X_ 'f7AyrA!l0'?GvHۂ/*uma ?Byӕc2׍_v?<+q۵1G\1cqmy 2㜗r,oh!?Ru9"Be~ӧE͙<a]ձA!UuXT0#B?$SwfHgEFԼޒKi;DGZ~9ҾUKҸTFh,Wc3FȫN)EI}w}L#t#]oJYS!&! ӟ,(kcuWm~Db/ { zɊ9wgC kvM~r(^Tl1zNyW>ζb?D+>YoYh/VhmfhgڍoCerɹu!/-~1(iEP@܃l Ua6W."?Y;nm2^ fe|g_(;j(l( ց4OfQs~ N3(Cdžp[&0w:;L)B|W8VG#G knkK __؟fѓYU5Y1D{Ǭe{L#- 8rHe{g++ [f=acE3'FMD7aiVYCXF `UÆg oGONutߛ0#C_DɲX(sm;l~56Ba]Inai{yHeanB(3jUjYCԪm~Q sʥ5g%;5:r}i\vYCԾ8GIbX-?BgB%Cn_5{|(=_o1fusʣ^ve'ҍPR7~,g_fQp 錳? :J+1ELqUPKklNTʧM_w(c *F1MVkA+"7zy'f6S)E.*`CE2z1m6n<񖲓tޚ %,=ȤJHb̃kq/փXA$d@by1j#/ f1N&H#)Kaa!!N0D"\n$aӨ) yXB!rNRe(T3ݺ,|ч!Z*N b,< 6@L:k̋ MGzhJ.1F ".0X1s" _-4b=tn;˱1 7M.5rX}a:TnBޝFt?Xj%~a ̢>gvb pM(nF0WpfuqvC qM&C7FQiԡîEE$ *㠄́*d[%; ?7=Ms:o6Ҥn$A.(CU5N>UG(&]%\ Q{jiǝx1t*4!P}ibYw3Vx+cVhHsr6l߲ɥ2l*޹ {\vS=\**& [>XչYQ-T[Y!ENpLOVT?6 紘c㉴DZeһgBa]1g#8'3w4y}BD +*=&h> +uz*F1s2wml%h1.+!PjhSR7!?uoݟ+-K|e#b\qBoNόȎ͘*Ef <:c~(Er6@:'S:޳<]ҚFK/6uɥ IDATcoZF#N¶G&{47Nr-~QrH!ؔA=\_`\ԿZ rz}sAC#G` 0Fo F/[$dEۡ;]CGb.O5?}kV-U,Ggͻ]s"ڬR:"-BIm#;a$ B!6 !Xg}]X #1}uxKUm6'gW5L-h)s,Z0_cuоId [H+yjXA}=1#϶bWiXc_voOZ ,~2 EOZ ̆#`q2;.`Y.V?0 SM J# ͊wU>P c Ohpq0> 0M'A0Fp?`!俳Hȉ@7E('4zKLv޺7x:MeD]iޅDkY Q [M萴"YԦR9JSzw`5$b?qT,|V5lE0J̽lT !'0F7_B.>BApB–5 [b9Ǟ`E>P{̴Y<֘k#m؊`Pu1ΉbͰwfu=:R ^7,)sk+5o}c-B/aHk좖|6L±ubI"^2tS\9?Pߊƹ¬qM X_;>d[YA(dT*T-%,)qT"\],\ Xu4O[KADg*gĉ3y?8(s{3[ǔޞk%Lnob M0gȗ"#n#ػ^燰a:l T񺻋zKiG~ZWoG3ޯF/Y%e\_.ɯ Gp^h{f}Q+cz}iܕuyx[\ 6swzJ>:;* $hW2e!tY%H9$ֶH\<w[syg3*en1 :oڭjlRJou0Pg~*&MppAfM̖Ψx3ᕢ^[_?_~_ -6k:Pn+%t(\Fnմv̔jiAu#f666` #fqQ͹3<~mZQ`Q<",MN3gH;}wϩI71̤4R',IP./NHe/ p?4-.o[s,pǺl1u@L/R'yVq)hmJR}Ռ+JS],G2k#1R_vy>CTHOթ q8>TrR)+W6MSzzS2 x.rwh7<`y(ܘsu_R|"y>D;kʠԿ3YV U$gtT;E[(WeԔb`plXWUHf 5ZJ 阣nPƲwGg\fe jOrgPrA^#-J{8'mOyei\P}3r~,vJ?jR_5Za5Z֑DZ M|gM9H < 0=~*[ IVI]>Aϧ)oR<OT]RP+RP@ipr=dp`u~sH+/b(^S,q6S~KW#%pv2ffqاpL_K׭3+|Fn4?;T[R̚d\ J\|:&ex9M4X܂T ni5hXC/Cr9VL7EĎ̡0AosZ#5+¢ _:&s=!?^xd= 0 LH6c!MaM/d!v  gb8ȺcՖ L8aX >#"//Ʒ)\2ҭɢ cGXuh]y?Pe;Sřp+qkjS݋Α9FnnO͝ZݗpC ~J4g>S~WqU_uwS{&8Ոe&+1zrΝaa h]8B}jf,1׬/jAW76F4,4ޜ}Xإ@>λEgVg6D\SW+YV?R"}VwS;xcSV٫h{:aeE}R="ch%mbX]MK\JPZɧ].[ ~@ +P}û\߱1X܀$v{ k*yl l$-NWTC%mn,}"C5Qo¯Z.RJU5N$ t7dMOZ`a?#TZ˕bvȖ{̊rBc~UO{GZ|h%(gPHj$/mXϤn4sia8˾Hi;MEexwъFvE1N4+ͤк3.,v T/۷׵rY!߰)nX `+^PD4쌠mv`2Bq8f^ ؔ=.s&Y\b駙[xO-Ϟ Wg:"rgO8QcEA OP>1\H3~e ` e*sDj@Ζ}D ()c.(%^R82n±6;l3R _K˩8=vj_p:H1x@{4 G8DE#l,dtn<%F5Qze3E_ ,8[U'}&́`5=; 7DV`'~>oh@+ LzT|:.kN`q1K S,4tG E{MiV,h":YϬVGA-YF)3fZ,'4X+7:YZ~7;򬶹NP)x7 ab;en05p'X\V~Tt)R3+5lބ!U#-zeA q };lL<CG-4ˠ]0B!["kD~ ?N,7}rRX𔜇i_X״Odꧼg6x[T%{:Xh{WLK]d+xUbo?p}( GR.GC)z5Ǝf[qu8=KJgmϵd;yqvіKǹJ,Y9ZvPޣmz]j< P G[|k7\"VJ[Q{oc&xg3ga-bgCi<杤io?QYia >羘ǻ$뾫oJe3Kb GZ դfbp =mmcp(fi R)p(b;-.koxNo,HS|"vM̥ lJGϖ<^>?/J,|^Zo9ϱxzdZz['3;{ٙ/ǠȿEwvld챁۾ft138ˋOȑl je@=;삵/I1)-.X) ſ<:{RVW+6dsnn6YԁZ0-<$OIp X$9^ c;g}ǡNI'k+L )ybUG2.l>kB C4B&.z+NP唏bL̳bQs9f~Ҫ˥ˡp:&f?gZAhי z^XLTe*QTD,H$#q#"2# ³RzθP}Zhy^1<<05Y~zٔN؛R5N۔~RS=/v TOZ"Qxu.ٿFٓoΰ.*! X%3)^"뢏5V5~bԤp"X]t!kC:V3ma%ʔA=Dڌ_p&Xsܧ98)ؗJTg`;=cb,9E+:}q"؜}( 8BF3gf:!P\Eަ~/oБ~Q. P A?Khgh9i53%em1kݱ()t *J #->J,(aOX)Ona*{61;&upsEXb=ް2 AeomņZXdJY 0Ԅe3L4ue X2B[T2pϲ5ʼn YUޑZ'#g<5 S;u*A<4h( +h%L`RYIܧTvYT,TC9 b6!"~'Ulkn}<ʅETbDԕK򽬌}& M`S"OG#([ds[7#JsrWgs~DӅL뿕^ߨocbwԙ=v3ؓ.3ʇw:g-e5 'g:ٗ;'c r|*F-Oۡ5Nm%*1?Kd-،>{fQPLwE"Ng_0_G՟MDfC@锵W9VS+f*o(`L`!QOBD̜cxyU~ӜS a!7(E-SL Ífn600&ɲ b6Oq8K|xx4-^R(Pdϯ5/(Oc͢x2[$)$K(eou",2b2iWIrY3Nkf̾'<k&8;!Ho鬦zPnN1@k/b.7?Z}>Ŋz*C㩯"i㸯9E{]ϊIyY}#/e3/=⓱ͬo Ckp2Ou[,b(y_tg0W`s|l5g,7Χ%oo IDAT $dIZ3n@rb)P Hp5h(uS]O?Jpx" "C 8@j=$&c͂9tp6@C?8/Bh`61%(W1E_F7<4Y<;F2DLjIۄ#Y@y'n b:F7B;6oT:)qQ ]0ݷށG4j0̉&V `E2 VɰC,D.ކEN$ 3 ]5( mE-S`<<%<Y´3*Auxmjm< >4Ʈ0DF i9Eo'{*EDR, "1j8d46g=.6(^{ s%en8-a"},69j8{FCuY2 X֗Hc 9t/d]¢ -`S Cu:$F]px(GBmp Xga.R0Θ`Mí,ЯPLa/0J\`xVT+"CDS 8/mKm}c#m{߮[};B1Ŗ#em3!rLlQSŤPvɺ|Ed X3|{LD{[;gz`RφIr9*)PQj3 [*_gbWim3Y_| 5/"w!N%+AԐ7޿,}b އb\2{5s Lowto 5dTnn~[3 eYƬz" =z8unTgi^HfC_P5=Ug7lbXͬ_.x[o(OdFS:*iX7'd>NOHnn7[S,}:ebCMm뢼Ҷzf"q]iF[I7Ꭱt0[oĽ8Dc~l&*ա\3n wr.-5I ?g='"(yrtUl+8:y-ײr2YD;ff⯞:)b{8ҝEa6iIܤ2c|`p|C]hÑ3ѱ^6Gw%J;dc 6]ye,zVfL2جj?n 2*7w4ǿ*oQ(&eʏvq@9BԊ8h{lKg';h^gg*a蓱D9#ge,NlZEiW s'lm|1koa }[9b~OtT̛ܕ3z|pZ{A5VPG.Mpk^˫Rǯ0J<x6>BMHd:uf: h0U#rCmh&P52&,3i9@ib(I^8K\h N&g0X GUΖՔXWX|ql1~Ǚkgb,n|B,˃"i h:]U!s Y Lc[yl[5,\2$70R> =aX|/;#k|> r*3 MP_݂?\>PqEhf*aM~AtTZ 7qQl!wR yrxI?h 3I8޾=ch&Ww;a]h9EaM.:}p_+R_;7rDHY.exBIXd?x EYY8Cá8M&/)6k8Ց#5]Q Ru`mdܦNl "ԯ7-.|0rz&__N[; jӘ$Ë3 .~/r+#9MXI{sm5N`Ն_f29U5>iw".>[Ck`Y7VMW_µ6GKs66z-mvܷXa%;~:Yٮ/Í᩹(}0;TCmc`D)VK+JtIUfƈ)2()SJs ̲:$]gtj*ojuQ>N}oiH=K.ݲE\C0u[tI2S4dl +-K5\꒔,/a h쐞=̑V3O3GHEX#VTv~}|$q**G3wJsHoaOGr[[n,Fs]o?˷|r<2Lk=vw;If{2dV-zq=k,{9_>q'8xa4O7Vٷ*\zU14VJ/翎jy%K9upoy_ Q5`iQ,PwX?`=OFGڦsm6ޑ4V[ K2=ׂ؁Q/ib0&g#ٺ++Z_gYs-Ccrnݪΰҵꮺ7v8]dGдSI5녫E8Uǧfsag) n+ΈgU^ǫecфMZm/diޚ)J/3Nk5>ӵ?>9MSUњ=՝5s[O9het@GЄ0+ l32jI $Ru(tĎ8+1/e$ӟP a!Ȃets *,{Bw(ߠȪSNv)e*|2,KaT1Z <Q2Fʤu)<؀ILΪbvÚcO8) @'trd8+7tJLLG#+.#P9N~JA|0gY9gnc%[K[tDVc7ojd`N*)^)  a-VNRN8m^20+6C̴By swq]ї [)cY8_Vjk+wi?^-RKJ;{iJAu2\g:?r{hN70_8:_SyK%Q+:6Č uDw=׻_J/P[m#y˄2A,#y]X6)XkҾLz('3C ̜Ҙ$AגB͔ʿJ\\ Sih9V3EsJ0w>R>'(@ؿt/6]`QӺ%6[]N!ZYH`C-?lOS=\2tEmRV}YVd  (i+ *Zgp^wgNTY~I 8Nq%(`')XjG3<պ~,ITR61Ɯcf|G-Swf1"3W a?B1 4zF  [FBM'}Z\-bY"/QV[tce~~۠,pLpH.|/~pnXHg C6jC7|  x+|4.y2$ɧ{`3E HVEjyl'[8v/c~ (eh{:2 c0ROk8.Q<k)MpzKKQaX3*aN!$u3x>S#|ZHrn+HDW+*q4㣀h+반uI2p3#fqȣT9Q4[p헙(h2偮b4$ݼMa^ a7S&b8|HO*Ų$1ŞL#YRVr"ʃ4zA Ngt5 ʊF"SE-)yS ScmzOwۤ>e ֦106ErQ<#mx6>f~cEzδɽa곗0gcy~NR[ a#~džCbޙ]ͧzIClV7`#~M[~VHiɟf;j{<:F=QzdR'-3;F>.&.l~A.ϿuqQ\[#Ӿ>4cf =k&;Gݪ' ?z#|b# z6ƅ/nⱕjgp= llc|/RrW}*aCw$,ӳȲׅr[LC |?\XtTwS+Cb$ଜEQD_l"V ?X+r:#|JJH0V3\h֤ rY#2eU6a v^nLŋe+g޶6柘|zj/;yiC\዁rƟLaJQyʃsRW{$^AMTSC[|D19*A%畝08IKհ=3F}snqEƨLo >/RJklU0R.'|Jf%DqK$[VSE[₣c2>v ZXЖR=xĬo^1#3G 5/^s١Gդ=۔p{pA6os#E'7jm?q4M09#qŬp F jHQ՜X^dF5G9-3NؒK=@"d>܌XH*m9i6&ɾlE:΢"{z.3m2}U Ueoůeܳ]y&63mnGK<#itt@]AL 1 kw nPHPS5(wPscRvl HΦZ,ƞ0P6lb`{`|ΞcTNL*CA֗NBa7:~Li:P4fPM?p%ȡlh,X\7KkR%86VV!zC ῲհ<N` H x J8a>P^Si^ Sa&qk/ >@0ZHEy?|KUD j'A}cu `pS"e2?2DayÇҭ̄a_LA:^x?~KY? 9 Яb /%8I=5 \@S$T\_`Pa1 IDATAY|rF.p؜L=>YBq8{!,*Ҡ8H"XTi<(b"ot7…a=M;]r s;֋'0|mulV^ڶ{@bUF8p&aE#>DYVy޲h mj eyݴZ4WR:SxGLJňsT]}9[50ϛ[)"PPeY|U1P$v*׵?rz{ϏŃnIӬr>`*lA%h މ:[F̨n``u샸%hJ i#|a@؆dZh`FMƸe ǟ"5"gfӚ#[U,5w?)c5myrhC8ëžԇj9Z"V"#~g}ڋDu{T=[jaǻ2YoXٌh8̖kxMW3D&3㾬s[u̶N:+2w4Kn/Y͹We򍿅HS&riOa~Q)RTluݢ{lڈ G1[멊z=/["Qi-7Q/ޕ| Jg==_@xs@F6 ǧZ'P(XG, mvIKTrDJGؤnQ?\6MTfiYJ#Z;2q|?>3ЅRTU+^?72-VklT%^}![w8f e?_@EOzIHZ3e(foo)Z+-qF.9,Xs rX#OZEo᳁N3:k8.z8vM铒/Ȓ.oo\x3]mf#bQITKM:fg"%!S5*^(n\i ͑C !)Y(_mg/;Edohk㫟Gꍴ'zS۠be!^]p0,ј |O8]450B2-(,j `Pj.80Z l<_6Ņ8ncVAs `5яķ6c .QP 8w($N&vXdMAѲ.S+)? vlN^b߆~dW {s yi!q<!N6Yj Sp<Ď2S5 fpzZ4m#yR ր8WF* #I[#5'x+æ1FZd gCQ[G?q&Z+^NyP~}kB7E CYr:#SG]AWY0+YM P?Vz?9(nm 6ߣ@)9SHԇElRl750y̶*?ZyeVVcYxec%{W5ܩіg"YO?;!4x'm#2B<-';s-_joť)mY@⺠Ծ?ߌKveg#y~_;`\VOHWh m3 gU~2^ݯxuLS2QVAqZFEܹ~zjGkT(h%'|SIai>բ퐨TŎZN̫)tՙfSS±gI[w 닦&۳뤶Њi=TTJV ^bI흲I*Y/QiU 7W[zpMb.c< Ȓz-/Bf6 eK$Z%X o`qь!GNH|뵯ZFE?.l.qZ 1VfQ]&-]yJpRJgV"T_Z-T!߉ɾ;P\r }[oR3WotVznF"Z)},'b9R[,#_̸Pˊ4>ɮm5> )saKq3Eae,±G%d5Rkhh"B <*`(Sq~,̂`!e ݣ!ct%h@o9C,(?=vOw( 5d>(w5N3~r}E/D=َ&L V Q:.ᾢ"U=AU/6pPPNE(+ˬD6166m 3d|5 bG,O 5 A5U[ [)m)vLXg%З^跌ҐH"LJ8v:'x^|'ZX (_)Z}'8>|zfm: Ya׆γl]YwuSv}RCYm.K>%ryF!AțzQjmO {¹S6^}Ƶs6RثbyEǡ0SRGMVS[7Tϗ[ut3χw5e3sYW8c=yi_x wC=xQ >(dԶ]/ab̃j#aGqG6}NiQlZJdyEv)ߧΥ۲<%:tOC#.9~kԑLp?o mݢ6X=}e{:ej=gÚj}vTfnyeji`)!oE 󃬽ZyCN6eGjřW IV2=PE5Ulcr_JyAG9Y_\aG8FY{. 9̡2#7?9pV H&79|;S\h91YK[7j]`#fj r՗Jl-v?u$ ~1?q"ޕn!zE1j)ʰ3X07 rVXzV ~چƎeYToL _j/mFjtǯ:)cGXEvE9jkkG(Cn>ZI^>"n5XՌwpٍfq{k%o}4' ^ބTCcx) ;ˋ+)bYE!8  9 V(T e^ ce&2k!%YO7^v{*3L>xjtvLDxgv5 rU+zD$"3F@2<49_4>zX &9z>GiI>)%q0k#G^h: '|ˋK{XIdxB~\n(`1T6864^=ͣ=)s@ItHZV=,N*4@savb]h,gC\qG X-*q䂃8\Jo#ڃv= ( x/PQ.J'%u-0 \ç=4<+'V<Ov(Yc0K& tZ~Fc ̡t{".x&uA 7sU Ϝ{O%(wA V[wm{m΢Pbk"_ƮqPj]lFQߨཹȪt7FW#-+gt=9<琯[g8>u UX]bJ4lu읕l1^ϊ%OX3r[cMb!9:#uj:LdZVO1tS}Z<`3msB/Cp9Qz*gmȺm??Yʛ];{8%(VYlw`դpZ|\ LM޼1mT :sa.ڒԝ*URCٌde;0Vi֭pF Zhݪfn#X61XqW>*=z%φf>zyg viS;ip:7+WU\%?Y0 T\J ::?k=U[@ݧNpNpKqw(qwww)BTd:܃6_ SS'z-L ٘{\ƎS+$^ oUe2l9$(bϱt\zlSքA:Bݡn rl:5aqts/LR7r'3qaER=,yPD >h/SX<[ϲ/'p(ObKdGd*qNtw mzTpP)7lGh|= KQ*xK{kB̕V j `xg-7z\O]_-[ S1F+A+J<\\?DO٪k ~c79?O kڬ:t3XYT*/6zY(/vGт?k&V7D\fl?ΟFy~RGkb SX!ٖ&bf>WE"~پ{ah6} 7G2:îl:UԎ^vf5?E ÍXZn-soȝP&⯌bzVR"EF~htRDQy IDATj_6<MHkE|rShlC&;Vs; [(b?kΨ"$t:ϸL ׸G|P)u/U*HUC&nDŇq]5|G-- ;ׅ((XbSkW)ACU8zNG r0J R2٘Vhpg?mWYhC-;$tؐώW;[ofjD[mcgo[B犎 #y#G3` ͘[U[ uX!Ҝ/*h%~Ea%sG]i[Znؖ8}!'lۜuj A#P7D7PLl3XO}-b?kdnZDz}XJ).m3 +ZlҞRۺ9KZPšŹUz%Rgs05_kskcydnL_/%+X΀g>T>S!bfdXodB33μ}k߭p-Z(QKaCXAm-e6$^Rm].ǩ dW[6'$pjxoȆ[Y&]؝ByC^8GG.z^ǢE}! /"61L mi5́$$Ld)E'* FT.bkx|;֤l*x _mzK18U(<-\?Aho( BtAuȣހyt^iH!g?)lTv̦ ,ōkXG^q i#u/041T; T,/J)*vg $K )1ۋ/E^L+ 1PJrʄc5Ǹ=8*ɳPUb&)4up)0b"̀T_vTfx fgZ)>kzE!ԕ1pZE5,+;F#/x@$xfc8~* `V0 Ė8 TdpMʪao/]7$3K1{=J9,6w\c: MXc>XFieS : pkQ~ebJk\&*6Ǻ0Ş19_(ìXm㙕1Qp/[:]$\ ,3gfJJdRҿUF2 jp?aYÒ'z*cJ>Fۘš9(B 2[{Ut̀O?z&o$.ŜɒuwZG=e'Qҡ6^SGBa䮴I x_^Wh#/ze=2(Xͬ#F҉qO[p RP*)F 3:=ΊaߪO lOMOpp^EM6<4Yb1BOq0 p C!*נQŽx CG`!iBɅ=ea7beu8Ck#C9|ǕuC?YQ=dNQ=0A,jc/*B6Y[aq0lЎ˚nS8Lǔ"+S*NS)1>SWvCMe7_$ᡒlVu$QLZV?*Ig!T-P`'%qy:P[`idqz-A*\vnpdw9f]`m@dX;L`0Py9.E\+'dP긌핗a 7˵.9ZNR[~uWl# zbpTHIUPR)#+v0fa#\MyE&h2Fy*vٿZ,۶lψtTp<52̬LɌpO>W ,,z\΅qL}KĐY?m;]p^Jï_Or,ca^Y 3Z)۸K>Ǭ+\`Z鍼zWճs*myM5zRԡ&o+5w/ßFݍΤK -S#ޒ>=k#R;:['nW`T~Nj 8)z*ٶiS_v\"lY.d) +UhO*Xm%Rbmc_L7F ̠g=jYh$gҴ}5jhUlY9 48`mPOjU> apxr[ O%R`pco 2Z[d,?Jj^5Z`;k߬d0In½B\r#/muX Nvg=vFh&aaR||sRCuȝLdk3&R Ky3(UN._#S>*xM/1h4|$F l*-;ԞGv!鵪^yjkMfi0%+:!'|X9z4KC'U`IW^Z NWͷD4ZF='E&uŊnF[qJ.GcN7,%xxGzf4L+/, n~U 6 ONi^.f|5A#ƑZ>E-t cq^2A%٨2%pnR=PEs=c6YbNi>nlήm  PX^|Yo”H%(.٠Ɓ^^ʳy8 JY.ll?d5XL!2lҠ.΢996<|pJ@&6w&\D6~/Ϡ'?;b !?ep18p $a8bLXENQ.;:nz#jL 4'cCHxbO%,[^f~LSg4rB)\  &aVEiq62^hHiynpS+ SE5(#kA{+J*7H9swTc+b^JVslzeY<JC),YĖ_)+vN7GlqEϽ>gP#t'֒ 2 x/e;0>8PaUOZMJ{~ Gkkq:`asAvqD+md}zӾ.b`;g_vE2v3E?N[0z C|d0J<;7K[ͺmjYƭSy>.#.{svfKu󈚮e.&ibrmS}WqZOhW[?I!;m(+(TCkɲ!²>lt~Ř;Y[k\eCZ5L01/D_gS<[vԶq4杝QG+e|+@f5Ft7DͻSMV`JEY2!mcA_s-evκ༜I>0O}O]:C2ǵT8U8mEI8V=*#ZguZVU]o8lkeMR3YQnWFmhb~1Lx`1 /$8p[̓&" !| Wzb/op}Ec|O9S摒 >1Z|7ȍeⱆu!Sl.OQ~qZKJc.b-6b;>L}o(|<ƺiZ_xbDrl[glCkEQO.&;aPJSdXmIT|t׵(-g^NYm=nGv@UECgꩌL=t) 4F@5l#QA~2l ӿ$X#D 8h`qlN1@'q?<3&C!ls(.¦tc% 5!:!%mXENEq5{̊jtѴ0.o8:CVTj! P26Rh(¯Qk|/݅.D6*\vE7ʎ`PS:AoQ8^ vQkBLP DA-¹PGcـmn" (&3K)A P4[PJb.n4tU kA+V}$,aƜf)̮:55L ߔν :80*_943iAUG}^!'CX 3fd|;3 |ZY,6aP+, m]W@] D[/ʼPoX le j3P 5{DdKjׇzXEEN)U7x/x#V}6q%B]Rz)ouP#J^ Bp/kc.S~b'f# R&qr p>t,5Q Q'k}l86OF;[ cl9ж0XJ{$c^80*(hW)qM,wcݠeL}tau\v_HW{_XO#Yu-U8~P2͗ 唏{פ}S/&ZF1rCO*KQ vh̀B ka$͇s܄!?PO`6A!exЃP7z Oi5:pp*alhi r,P`5MG1faA{a lt'@k(+(Z^BgEI(G%rb G6 c\GYnKY&N|%&C=~.`{D?)T")J!jL[)+88I]Gq <:f]( f="z3A:r5DX 1~f..@OP2L#f5}$e)LGAqQ" B0Q!rI.Dy `DA7x)a7p[X6؃itlEs<+;Z^rңOލ6f^1;Gy5yDb,K+>SmW]/\{_n%oyn"zjkYpI&Zug_Qb2x Pk'Ő1; ܏>#4=gMο/5rVTp&jfLJ'Q%0WS5/0TBwDĤU29>~NrZ˂/p+3̏}$~}:s;8E cE' ͌p.puTJ,~_zpU}Pk7n<6h< ISa95uf?N`Iʶ!UýĩiyayʖI#u qu=tR:φR bh-[GyYWI:E}_ߙ_V6Z^DF+_x1}"UOЙv#3LZmD1.ϼiHZ]G ,1|7u.tu6ዾA%\OC,smvϙ!tDʹ8dgz uZ+ٵSM5Br)_|Oe`ݹ!eKYF`4啕z kBHhŦprCKȀh0~@8 |\C'?i5dyo֒/dyN`9Vx'6C6l:T&e<`.TA+%|;q4AN;(!02 v w`&}ZgjO8XCa04DUa]X9O1$*]jMG᷼V(>j27dx@eFQy ݠ2ŋc2ƚ) ̵,?#nqkyd4.v^XwUgϴ K,Vaj=ݬIt1ju\!vʹN9""oG8:6v Z`/ʪ|Z\$nϔfZVwY"agEʸ7m"6*jG흩mVZ󺲢-Զ1d=&Q]r{H~L#ƞ~t"D gk)X]-/9 +!#X]\E)-"'*Dc6Hj%ߚgLDz.k?X޴Q8=ZoV8 ~R‹8jm|0?ѻ3w+_׿$p+M6;\9; j'^6&G*Ti|XgJPJ qRxC<`Wu`L[zGGƲwd~ĦxNd.#eSg"p=ARX yiSYUU' S[iˋZTTe4xe̖;\!FkāKb2u6#y0Xٮmui]a쨾N5|qZ<2-]gus qo9O]݋7ݶxKf2ђVy Hb=kpS3n{Բl6EpXeEq铌|֜`r O!X 9ױrQ*(@Óg]*G:8`UP `c(G68 t@j \0ArA;ES%<6A.c~ȄZЇJ6`dvƲil)pg`8_9FMOo6c%e>x q',4%X@eB)^Nc:a\$20 ߱(il8X/o,qI(Nhڌ OC $[d E8+*T`LlCCX9([.CTRaV耋11f#F+xPB8X:V^@W8Cuk4R\ 4aeP_.vzجK%%c%x* /cE1/7Rp/ƫᡉ 2'm@}fҴDĘeNW >o\:y// kZZiI;3Oɮnj@2g.1x)c5s] zGCqX9j=dq[ PuY *].HZ{v쎘 pbQj?!E=׻ɳlv4WPCAD87 6bV\f:(l&/qᧁuϙLO>~VA(n[%"k֔bjbtPe2f>)mzxg%IZoڬ.kĀG,ebex<2.*{stfaiH4J%{~?tZa2eeEh!܃n* 0 Fhl E 6RU9VXkB'i5A(ʆ@OHa! @&Z؀SЎ:1E 5C:CB`@Mg1=T7"C6ũxQwLY ،=чi0ކW̯V[.Z0p@$LxO>A>'ԎΓSH٩5mQL(($Pnh6PE7p*ҠdHL`2U+ Y<.a6`2` `/76]g_>^ݸH]Cr\ŠY_l ¸ְZ/QuX/mrjkxg*46l=oAvvɆ&:}T+lp9"VVx3~X55vke+N.VZi_/|9aR6鼮V$KC#+{Xr6g"Ewp7:ڈO\֬/bNejO2~V_ZI6 a-2]Du_Vʆ~ i8 U*I,*:YG!=hlfbn7Z>=-/CeS~^[dF'jr̘|0P4ݵJ=f"=b{[!!r!E6 $Mc5ӨrB[^`S-٦6 pU MOsSPڦ_>{gM'ZEQ-9{g G8dpOJ_[uaC0L*{keU0k lʀ4Z- hT7Sϳe2 ¼lr<ؼ˖4:x߻(ykP`GpU<~e N8v]Om].bS2/ycv\P@p/|u>¶vT  lWIq ^gzG )QGw6hMlB~R9e:|FzGm .[!U|l¯, U}0Ay l%}!SUj vV`GF82=V TegPADXJ@Q a 9 }Ʌ ϼ< I4V50 bCE j1LJW \;jav*cqU.s$:@g?OΒ{Š3v:f S/= NJ,^*YWU6963\~Mjnاq0*Q\OS|Jk)MҊZ33I6Fj $'{6T"f|g^ mW:y@7 _ d Nmz.p{$b`Khxpe1Cw݊rDD{^Z^JY Ss&27:x௵qXoHy5XqEQ&gEb\JrYHYr @CsË|Up;%cs'55}Vj .Xcnv@}ԫD)FDMnؐ:Ju\zšL=Cg|8,vOQp cvW!UK}moojop3:%ZyB{w6TTLu {*T-;eeukłW6zѬh,fI$kTVaUm62Y_}IC.X拝c(f6c6>kp'F*g}6@5ۨ3LƆLDY8bw vU-2BY32c+^J#ɑѕ2&MG y|h~X\ EV#s܊*#-2xA_| u{:3:l#>).w{OQd5'P{;gi2Uja>hcYC &h3-iSwܾͫ"O7^Fz?C']>%IZn[w-̻E~G2r8FY;Ҙ"ToTzb?v]q/o]n]G^+`wPMt6C- ^EzH17C8yM4ޤ Dfiu_+ps iEUyjJT%\BX`c8QrOs_w < ` =sBnhux-%,(BDkVwu5-E4~:"H3r<?p/t}Bfp"IRdsWڇ_hMY6;=F"ư;J7Ǭ%Y1ƴO@̞ᇾ!p5x ҊV:NVA+hb2 $H>1;Z{e6~秵tXc!-d Lt D_ZT[3Eg"R>vX%^ueM|cm1F[w ވs.T5Y2F,іk߂װ+?Ҧb0ߎ vІ4AWCCe|KfE0S3~2;{#}bi&ZmcVFfaMV]d/ʃ+ȍFEepkP/L{c}CԂFL [ /8;XxD0(͆]?VWVjHMz+ݰR->%A#xsxI%a c){b1.k@v `;8 Y;9CaA'flȍsq FvXy`,aX1UCtEVEFЋQSa64 KOHh3x +PQċ"l6gOx$7\h,yZͰu:h+ {X}e71A<CXn5gSsCaTƟir[SI)i eĵ0:cuX2Y?{F`,BzhB5+|˲*]y2a@M1zijkYjrqP$zO/1q~K|Vڤ?y7B.Vq9\7g/'h\@r]1vH#`e, Q w5¡! 'Z1=P;V *j~Oߤr0O4rkEܱgcdCA#֏odzb[Օ z$ aM{$>GF~/kVбjK?b}=/keoO v:sNH#%gI9UJGS7yӊ|S*W暍>U+0C}RYEk($sKZ*Z`Nejj&ja<dW|TwHMXƶ*?$j؏u“x a夏<ʫIPfX.6c_XJ*;D!@u(Á*̆0y'Z? %TᣚK[ x<'kȯcXݧʇi ; _Xx.JݰZa$5=pD6/b}/pC)5Ez&էb j}Sؒ>HccU!Dwta*B#"j/! _ʸ[8 ~fkVQ/k Mf;Cx9Ol DO &l^wqkՉnK'(Z7&j}S'1cmڝ@Ѻ48{Yjl; uLJ5>J4ՔVV{?!":`6u ʚ^B}$ݘm٧]2;XuTlѝCBeQ-6ڞ['E|~xZoX0#X'[zSISClK=Jcoc 3U6040l*#!pJWkC A-Fv^Ql-Öm0g[1됦O7Z9Nd9m'K ^P]E[[ڨ&`8Tif*{֙Ak w4n ]ґ%U/g1o7"[R`JԇeXV’<5TlG‹y=n2?Di&˫D^(Ѫ_#3;/BYhrjօ{h;|G^M@|0'fm'%cӰl.=vVtjkBS"SU]QY`2ˉ qr1Zk)hqnh_4=*LhWQ Mb)TpVmty [y Xg?AY]Nq'?b?8B-jVhAd\c֋e^}Ϩ,M~9~_d2/$hk'@\71\WI"ͧW}eRrV|5Hu`NVFeƫdKdU6'U)sǼ"̜QO\]cgjdDZI3sۖU\3{3Qѓ?)s7YZ W!>׊P-|%/!/ /_=%vsߛw_lPTOsV\uϜ`Ur.͡r$ .]?C}1PZ;l8{ljt7N"x쨿,UYf/  IDAT >1WR}bzgӝ-H2ͧGH<ZeJ~kd@U p8RHm4+9Z>)/2MւXhNJTrՑeykqIoS|=sj?obXvJR052hk8ٹƊs7y;AN+>6 ż< (097w:;iza Xf-2vEGc-QӜ"bNxњ9NQͶ3j>)B""@&V-k. x(-y0*'_lJI2wXm3ݬgnc~qvGhuz`.zosep5F;m]ZɖHLe#xnkvsxȅ- X[l'>^">U_ЦYSp a옶9-1Hl^Oask>-M5^lmް@-8mZosx: [J(y^+.bR=>^ !7k*a^Mm~*aU\&3z@q-uܓYJvîQz_{?`UkDfw_|m l;NGU c@{5"52z,J39W\㬈sl6K+ߢ@1Ö^ؖ1FwESk$vP<Pk_J Yռy+Q>Xd+ҧu={hSEm%čl\[oAIkRը̨`oi"dݑ8(??fUhr-PtVFt4Ex$9jYHa4KaW?\Vb%6aqqPѯVPɛ߆>xn}!豸 wW\mFIͺR)p0^;1,f[duH6hE\?G?3z}밑-k!MGL RG >]vdۘCZ ulnGs۫,/cJ詻:;= kTV-FK`lhtԛvmol{\g*(+sIܤj4Y}]-*xUU6WȥօK> .akQ_TRw3}Vs":}ɘٲ Es8@uU5RUj*&ZБ%G8.v(?G dB|1Y3.i>jc\)ֲ<[98T6cT8, ΣN/g[5|@[Q =.*mj3ο4PZYWGBb̫\kAz[_y6盫vHY mX /y"mbN7SX H;d&ӏ5ؓc5v |XDiTuŲjVPe5l˺rUtu:L.F#@l48jp5և;`_͇jԎJ|pTPUmPArwڲ-5lP +AcGpeLLEW=6Ϧ_Üj!aC\C&FM0FZ~Ffh'P-f) [=$b"8SӰ?m_+idLb _ZH†fX ml0(t?T2hx +oHu<~aϨti ]SxmÇ| ^NDK@9h> AVAu#Ub*ra"܇xuVݴ-Xjm|?B#)\p=vn@2¬2t.8泺+o7> D+^ 'xGi~=ٿ.k٬el,XL!Fk}G膮}cA;j~N mUw%f}ܘl5wqf :Y="ֲӊ|vtvʢ#W}G9ɷ]k﫵a+S:2SU?1>˵zPG2¿2Ēm ")"k^Mwֈ=WUQ-}(9a)q)f*acPrʴ:`~h'xENñU\*_8^AERzr hSWN*E3KyBlޣ&x[̳7bά|3g6[CxsaF_ן+VQ:hR͒q$sH 3O(M{,x]8,Cͯ]~aMs8j6R-/gƘe {I2vIl+6nJm{*㝤m!>G``<9 k6ڟ͟wf?Pw#<ŵ?+vzbRS#sy1c"J3Z1&$m NS)}4 +`_C HX$``MZO]Xqoinȁ;W`?pZb^Z ^DAjċfqRgCN6n[H"FF P,NQ}F0ASn8{ ( &vVuq@lMC0F3 h"Nܔ0FAk U  ?t a +bԋ `&68M pMc7+cb ++ρXxT:̻R|‹R'4T. ! ;8BO.xl@((Y%0Y`m`!5i$)XVtc$kJw6tSlzymg`;Q, (-d8IE/3KDu+t]v@Im`2o/ACs5EW2HI&=hzX~>T|"E?rW@uV5כ ,&3V9 ߃WիʟRWV:H9Y1ؾq@uq4qd>Ϭa,#C:1><6,K>+oʬUR VIǤW]rb_w5|:W _/}o7A*7xY|3'88EqRb[ Ikc(t4pwq- WJϬF)-Vn= >fv6g~-.9/eFd5>dfH-~"SJ5'˜o5*hIT9a6-LnHҗ^JL.d1O}uc Qcz"=Ϭ.{Y#`ifV4'ϿOehCPKY\h7P$_.n>ܾX颖pGCuDm}2ɭeh+I̠6t87Uf~33G9`XhQ0v#.QS(iNCQ!.PG"O;l,fp.` Z0~jQ&u+C (*f.@v8ǛNL#=|7'UZ5[M E\6u Pu3譨F56 H4 %:MME]0ӈY V"+yV 0z@':Ey dǩ'K,M{x-Ţ$~]hԔ\0N xM*ؖXS0 N+p>܁Pr/'AkG4̆f2`J )f>X ?XaեTRg $0wILy L-eZvhf,.2~p){뮞h 𤚏#lǽ9rzYGM3haZGXXkwFaOJmm$X'6a9-I]q7IfCZ]4C4ov 7J[yBP[_9I^.Op,Q#'هWlFA\j L]I FCzjMek|kceؒHvζ%l#waٶ'|C/V*=;Ev;D]j[KzU斋EN*<()W* пtGY9P*Thҙ7?GgCuN~;i7.[qGMVYmbc6:[z( !uqTQ]g&+M>}\?͑J٬fߘ'C*FgM14NJ) 8Zab0P C 5E?CNgIq cf@8 e+ Vn:R(36t8~lI5 c:XW Yl0|#NS^p@yh y͗dGЋ2НEx/' 9vx^SA( ֳ =s(jg}h `/ -J,N%' v:G.TO eSpv! N/K0d?ml ]"vc\rg//ʙ?IuVO]iC2/̚ n(^5oRqI%X^ʵ]>"%OՀGT̑ylV"흭sfuBrpRK>Z&OIك,̾y聶+q>}~JsOŴi?9v>fasg,}_T:Tg \Utai1T+ǘcH<z,Yy;cqR4mݦ%=ʸϵgOɶ41JӕR:YFyqSv\Qtev6$!O^( eUvH3oi|cR{~.iaZŸ[hCϱ46_.: /ٟ^kz1GGKR?.#1}dfm-oS[%-5JUodaɰȡpMњא*QtlmV̻' Cg_~|n&HyPRbLGwx_#Y¸n LTܠ,G|ToDmovwҬa"p'fX!K<^>R [@Ɩ6Xr|#l5/QS8q5SSM+^p>UjaKtR;[uh3vقB}!%dygrg3 yR}I'9l^`1M*Z~u3uQ };X Vql.?m0入R4Wn2_!.jN(oaM-xb/̳)PPq[q5#YoJY$cj!ձ6iQ]&fkTfYnkt%F"UOp]d7p|oTJ IDATJk/G#veꈋj]6[_%`U ,q%*/1ҟX8QLG > zjj+h9P r`q7>PhfoS'8‡QzWLok[84cy q>U bN؋a070up{ 5E<4fMų7Nn `'Ka)P>v ^Fc*-@T?.6joZGhB %ȉ`5t©0Ja507<. i8+>`ch9S 2 IVaQ8.Y SO\s/nyuA X3)I up̶֛ǡSyO|bx c2,(aQF,OWpg\}a+rCcSy'b}LwTgyh5XT2Mê",>da42 |E \X* 9Mތ7]R xEl2T$ -)"NJ #R<0vC fZ[ e xXB1m#DW,lDk]4m ZZu2Zx*孢dIzdK/yWҞ=pw,)}0Ren3Q"kodv<}UxwOyhkРI+֫E_'e\j'6]f͆4b#aeqke~Us2#V^}ZX/\| R˧Օz``mww2Zjn:n;~ȿXkXsuRd HO-'kOD.aikh-T{ˬlyXT0 <( 實_XCن ]s(&h+l{dHIa}73H Zj۴$򖍕I=Smm>d_c뼬hrا煯?p#`I)^W$V eE*a]_l/xא-]a33֑UWZ?nsq+sJ55kL_(?3?ĎYq,! hN xZ_jQ>3B(Y֟ӭZz3&v*e+c4}cAƝR9R0b1~+i2@Ty{)1R7lh RvK뱒ci=oGz%cJujxSNZЉ7J Xhx˯tKKKZ Z9;t50*yjyaJMev_)*Ja%B(%Z;KCDPg%k$⵬jgl)S'<.b!ItDd٨`(5 %IcO5_+S!ǰ;EW`k{>Vt68e9<(~X-DH,8V,BC 12,܂&#(A NE.GBSli0v.hmxh=1%fUp0̣"LZ 6NT;*/&졖~Ae3'Jci9\8 Q= $)v1:1 _@l uC2Z fAQ l4%,Ȱ^Q*&]巔m| *) qbXK&b$JJ#XOp[Ei4L6Qnua؟R#V! nS( o-^1LR0%8 Rq.X!&fp(#&(i=[+t 964$D3:Ƽ(ť7_i-Lɂ9+)`ڨ ^.J͝*lm*㋑&&+\Zi}6wZ a.1npS&Mvߕ٣bȩre%-V&[Y3oe]RV3J:`8 O`҇sh헕wg0~ԗ{Yl7pw^|TF?%[{kY!J&ug-??w;I.͚Hc J=vQp/h).J}vU9hdZb1Ca3a޳jKY]QB]!Ρztfty ֓J{qK)*wvIQgE_.^?w)Uğ1z[!r;r9؏8:;-YʞIa,%l7\tC#nm`0Y3'P9m3bstO.:-)lKWyeyz#x5E3]$HU)JSwxS]&×`h*WJq0(}9/LZ;遾|d F|h5}yR Oe;] 4L%xffM3h華vg[[q$Xf4-_!;W M**p svOJpw`?/O%UD]`9/[mGAibH+X,XiL]=2~yeged= ,ʚWHoCJ}4U}|B-cMY"'YoxXv0ld[`ІRT`VE.3][4o{1?NK8v5lmnkh[q2j@"Z|-6S-L/:Y_qGsl<9Wx(̚{wK'K+_q]GZ-'wIƂo2|`[8熽z MtE萹fe>5)s1,kMQp-EmӓU;"8;%w*dr$?60Y7zLKo};2.RUQMc0#zJn͠p|9cK4e9\bY,b޷f5hȿb)f7ΆZ7mΆڒtp'h/N ZYK)Z|Gy)ސT\}$uU!,2>G9XA6ṢEqoh7ntC0OdMϺ839M?yL9-Ndx=z>a'#G\e( oBi=EMkY(X,{] Ϫk[jY9Eq4t_?5+=:h3UǺbV.;:s9k4>LRS6:5nU#"egnk3O5tٓ=tHk܉P\!u*#k)YSX;؉ia{NqLPIWbaӨ4^5טc C&Zˏs5N7dNOX^0Ϻhec79Rl;䛩u.h 㾿bq >V_鸊rasgo ԕwkpJS7 U`> mgݵ4 NcyG|Z_rQ5EBq͊~j^i(5h1?)tMt c;,sy9eOyx !7kD*V*1Z1<%l'90Az%VU'+ '2= DI3N==/RV<hm9J|?M)WI}f݅mk"/֒Jy{ S]_ l\k' Jea5+ [aikE <5 q#O4F@*}… *Q$ F 2a>0(6CpYŸpuX 0h~(.,i͇pN:T~b,B b3e )vRv8@E3xG pK ( GS͆(QڱX mKy8:1pZ p04b{X S`=t*a=74o,z'I H n:N 41N0 >G9p@Ԋ„ؖ(=_*Mlք+`s9x/fG;xm!A ̇8D;/4QUMJ* b%*O"ֱW`ec+Sq 3dOX_ of +b1z-t}2݂&S'xA 8Moԯ>uzºD4r$;w+a<}1Fí KGlj_ATG^BsڪiJ [qx<.I;ҽ-ϭ) K,+#NFhc<@BM& 򬭡``!y5i ah07] M/NUFo֜FE1;B'z|8T kw^Xe]!tQ( _庑.bQe N pf=/VU f!ө%mӪ[B3EͬV+_]t$?ޅ*gIzfXMȭ8 }CHB\f6ǘxwfrܒQc:FSG0uL/"IM,jlL뮥gUK*JՅn@NG&[?X#Wv󨫕4y6e#lh 2u3X(㫮=Ojwi"i>:8Mg\]LEY,IFULMp0cJ&%8E;ɱR*k&ihd{ak8%;^^t.[ִRg;'F[a=W_M?fk<TZK\Tj.h_ڼ+>kgxS#CoѪ/咽í0@* }:73JPqT\ah8Pj;|%KuFNQ IutC |N pw}9eq?1-Mm5:"MNPgIhTJ(=2l{Վ1u֚f~jٰM<(xNx( woBNwgPT`9UaT(R by]d.@_$R l.uǯ9; dA4^%PGX.ŎAQq>b™*s'D=KVC}yA?!kke[>%KV+o]rq؀&@Ǡ8Kx%։͔ߋ;c.DL+~( zwMa?-^I1l<놷1 G|t,lX]hi SQѓ`$?EؑR%]dU/tV!c*t ٨j>w[ۮr1WZ69?/A?3XeZ:TO#Si~Bo"uUnE2tWdM ZSӾ>^F{κG'mS?f2 Df3Ӆb>5@_ĕ}>OQW05 ZD}< _)0[6`Y&r{S-BWxW3Zk V g,/ߋ _v>l6xY6t_)ѷ><[ Lug VOl ]TɌ.hv+aU + ,v^%ݿ2ՐCSW_,rH4핑WrU^[`>kpi?__>Oʦ*Z"/_LӔYPY*gUɚ9*}j8ٖ;xkmFv7 _}Z)ݒT )>Y~k{Ti{YV2/>,*b(ln } A6C~dϦE.`Y Lon&kwVL]*qOzqL#Y?1G_(nS;+gYs(>8q ʂepKԤ6'/)&=I̦HJm:b)84ާED`4\%!0v0ob%|h -8 s#N[E hk `{K2w+.> bCYܵ@}:I?^!Ǔ 7;`ͨ4i7 4ĊpP0 C^x{0SL`(PIWX{'BRE% `G% n~AF]4޳2||yVl &J9U ր`8hIA. y3ރxf/NZl̏ :\!BC\ޑ6qR)7\<˂DE"~l=T6 {PW?k1夷 b/zW`!8:1V,/Euaq 0EMv-OOrgf-C@wz?NfYn_a#k05\" e*"%,j%{~ڨ tF=F{P-{!ebMڑ4LZtkTVoLCB1'D勜YTag5ߜ&jPͥd .*!Z;m 5ɒR7[N >F~r^>-!-ۤFE +{BGDr8l`p-RkB~9?+M!Sza5`C799/)E$™84eTK;Uq/B4D̍}-N/PΌ Oa9a cQҁbUGP)QJ8;BQ͸bdl_j)ꐍv:5 ʨmZ&W'9;*V /kjl+;V>OM)0q/\Ԃ2Yn)0ZH't1͠ h G;f ԅbfgx a 2**Fw %%1]/dgzIy¡{1@F YJx^J}Pg`#]MaRgH&}r\&V+ WAX"/gh Up lsƆ>hbIXɋC} $)b'lc<%at# AWVP C+` Lc\f'X̦*X*@n +Xr{l\71ANIEi&XQFN5>?iSQ7D`a=),@a)f':jbaΣyB,fi\QbXuяyև6{1zn~=]5@gKnzZKO/_ sQC~9*|0%zF ֥6YMh uWpNςdac^Vz+[&r}y$1Yn={[jmN<-lmr{cifm5һoxs<ϰ>A: ]NXJpw{BzSE&3+3^J{FE$R6[fMk. Wg;c=y!yke {Igev} 50O̠\?e$iyL(V[g\I/!m֞}#ٓi~O^NPZSR -i&uZj؏G+^[|e,me8 ; ;n,xm̙=VxXK>ĤJ_a{*K[܈C#Bs 4%IJgM^Sꏰ~~;-PێJCbypI`m^JrKox~'rrzK*ENi^j#j^O;ȡI3jIX ۼ->&@ $ɢw7/wu>wLVp*ǖCqlkG̲TAۑGi4p"5BMi$ķ`eªX; +5p 3| nl6pa :0 ¥Up4+K*LDuOm)½&vcOW`"b|U^ʤSE" i$yx'DNS0/Qf1,cxOhGi,q؏0Rzɦ=h\eY9#!c#_X ie.a6t VQx *R'ր BaA,í +xpq>V"=˴M-2lb;q|`)> JXp!#bWBC@yԌoOUU4^MXGV]e{p$.9gl0o*6+vD!/WF(aDAnn.3n;)ga_,!l1)VoL ҘSjPü4?k/a_:Ʋ:ò9Xݱ /OiP÷EiB4 &BՁ f*%]T(l4̾ɔX} BFQKtijx@D >orgS#-ƉVJ~1r*a0Z?)\.1_H{Wnf0>k_oW0Z>ڦ9m$`քn@.S*zRI-ZC}xx9n|r-yߘ?@b)88iT{ ~t鐱֡J=\VB:&E˦G`/K@?f7Ɋm-Ժ!VK)P2j/4 ~-6U6S߾n8Zc8(\ wg÷GLtuTJ"ԥ&RUgRv1Dyh_rk쌳0> =A"wߦ|M.淡05*kJJq7t~P%EQ<2:MbpCT [NjT1_QE b` ڢ#/>8foTQ%_:iq>g__~zoH%"@"ٻ~!h* FhGqEsEʴ1$h[6=hjxQyH'rؔ=V)-.^4s J!,_a)74eqr(CBhm7.&x[x6aGK Z.ޏ|b؃TB_*>Z6씼(ҹ{eI6ݱݹ6G/r%9W ~ v@ٟ"R+-t-!(i*3g8foTXPB%Kl:*-1͸~*N+Wn!ga\a@'.u/@!xC# MkGS/zSm,n(ACK EDu2%M#rY!3 .ۚox]ǝȯ b4ʿkuDj `3oH5鳖Q%iȥ И}Qka#~3~~Jfq%eB ama؏,=in../ֳ![C4>h=dC9g#^?FÌzq3rOP٫DN/1Ok?-hͬ*ofb00 fDi+vA+]Y|ιl~R,_Z(q - v;}1--FhT"d˩ZGW]Ϣ;ړ%m.^׆s߻~]ڜh|>{iR./V[BW^($a?& /a)h2C%KӀR'Y;n^/Ԥd2/XI4jBnQ rb v`YG%R_%Axvzy(?Ŋb*\&S$CS(` -!550^f 6 Pމ| KMR?O3]PkaVY 1 :@7xhI-i<+i.!,e~97BV*܃ **:t?[!2q_ ( ,8,?`+;l;!``Ԛ51p :%a0ϣA`2?i=4{ ]q>xjŇZ܀xVIx73y,{%|@2}DY#5z5^Zo*PIZܻ_**u0wJ>a8fw*gc:B U>\҉ofR+֬ kZnf򵠂ПYw}٧`lܞY;;tKi%3pmoP:1S$[j_/,8 Rv$n3&;.drQ^3΃aЙ?BB;)R忭If^yfAb(Ku0 Qd\ ӓ}}ߵgz]LSQ6\i՟/c@A wLnsÎ# e5_npmB4ZK Ϩ9*PO;}|yڼxFp(Xl=4V5kOG GmFfufhh6<"qۀ IDAT]1CjW ^qynxڐC@T>Y{NͥW!&eM޵݉ruQf2 VHy~f x;X9*3*?ʢ` q mĎRE:D Q#)iXxϳ7#17԰tc}.{ c9L5t, 0ͭq̕tE-c͍oШjƺ# Zi LTR4 ux$ݠ $ZON7CA|*@_q#K0Vh p b \PG\w0MTu!tGaxH!#=;6xr`w( iz(p gsC:̂#x㠞xO!h6H'uPAh ` y󸞭%hKacKClϼc:i < NM-dTEn '# q RͰ~H uK`4FB_Ȓ7a1(&S?($AnX^lE.nPe?vU]8J`//e!S:Ea!dc/,٘yk*D Pڌ9zhY)LGltיff[92e֦'>`E\#V1;Rc5['W)v3zwcBnXF"N^Unj%ֶѦ@2'P&Q۲( G?~_kճJ>멝Qk^?8y:k<>j Wc_lEF/#UǮJ{G˾~5coI1/Գ7kR8u V)zi͓p-uIF&&1<+@{ Sb3gY;Wr],tyhO1 Faflh 0mc] Ũ_QB;>柂~#1XhnW;eBlkgLoh0HR%wvL k?`kdO';m ׋(s}1L]:$;~<@>11Kl9dz"a8Z_H>!u:NHo&$.o]t<`42cVy3<ɬKFܶ|ǂIU|?WK|5/CR h&)l93i_1tl%Wc!Qְ (0NbEKT(lb~-`qhǚ7H2P&@Xs90T>P G_QXjcifvb2hN0;q;C0tl X)\lsXu(-JaP`Ha94̢|PeLOhW|o3 {bK­c EV:3`J7p=A ,L(oX]NT6)/"!^l+|}`ǢFYP8 _aY89_$^- vÝuQmxkg]IZ5wi%9J?髋C33pxC塂aUSz;Y_³K$g/.O?2MupǰuL{橎E,bDx7-%6&@ʧߛk/܊/ַȗm&VzdSz:ꍬR>!ōpz^Hzs6, 7kUD5ϝ?%ac"ifrm=vjAq(u6$Uc?W[ZmQ/iVOYm'~Q ul..\ET6毴\f%:Yo<^oh)16`ks29S^&ʿb_c^kUKnB*h$Eձc J硸O[9mrW #;㇝K{A{~ zO4lOk8c֜G k+(c[(o }tM1&e ~ $uyz^&x ʙQ@04](ZDhNE$ȟZܢOK)gǶ,_`3X*Rܚ+K,-FDod_wfE߅Q3tW3 A}ܔľY>be 4eH!_]F }fWxT7{zG`?'l87,(DؼOIxn!h3Dk V\J0 lB*M$NM9a7f`k9_aB3ۚ--B0טỎh/C|cXh]9x,)lAXoԷ?uF Y_f8)gC1C+f@n>wӬhߡ7l/>ޢhB 7LքmPdMlr&l GF7 cF,*=g`R^/|4\RBӲЫG1?ySΆ=ݕ{f I 0Š`"5fGO[o&6,OxR$v ]ړ]d6;A̯)lzOj;BJk S Q}:SױގVݕڏg8sE(ՐSՖ RSG,ϐQ/%k='"],{ 7Vmms-ST8݀^8 G}p#EcMgTh 4C)J ,oip!lЇ@0'*џٸ `17o/Cf56s'.}֒SMSk-Թ LGUpFװ4\>mfm:g\^[yx,&逹^WbK&^ :XZDE1->oaL[mmU;i"Rsz{EtTCkm2EÆXzZ )}+Kp1 2EIϜoS@TbhU^- Lhz|ZcJƎ퍮o(`\,$?5iHP--Cil\vVW |iv(ú[eq҆f=G|qE}*@n(mGᥠm%cT% [Mu˿U[֞74"kh_U]}]Tlg5D^3,xA@x 7զ&o ZgĵԩkRfH{gjlj'Ssd?~$lm9sќ"hmQa{x%ՑrCyôūUŬm Rrc1rwt8lJ<crʩsoHSn~/4J]`-q΢֣(K?'ȓDkG^ L[1BnG%%2=4#NV[<m(]$Nxg_{|Kg%R*ѡ"KFNޖ阇ū>̋KY}&q?mxL*Jz2.SC_U])kG -l,F ߬2=TU%㓻Qo^=lQȪn*d ,Smhm,ʲ$ڊL Z@cz%O^t2Rk[ClXoa2E}t7̟=Ӛhgf9E?b ?X2̇(Ϫ4wKFg7ri\ͷ3FAry_ SɍW jlFSF OϨ#ݠ5x PũD=^f?jC]xQ$6yvВJF\О]X a O ;vp:68. pBcq -k0hp-0&R , V(y/y#RGщNHS{s,I`60'g_)IR VZ^\̰'L'5#6NPu_o`#3OSw4Fe^1PAW6,_̐οWF 1ĶasSHa'}1uhx'Q8wv,Dzb+,%9? Xs)!cw,%?aeT f1Rw}WG^4c:%s#tvؽ31k'H59:F§YRdYޭTvhzW]!s *-xBݭ@qP Kqw>ݡݝGc]O;~Q66'ک [^w~>Z$NA!̲"gx#ék^SiIQxIVC+ x zrL01 MzFZ!OruWKv[gQJ]o-yj fn"O9shگUُǜn M ^NJ9kZ~BN,g|`9K ~R#!fEtYnk?ێDEgtޙ[g5Uv^Õn8ǂ"\bΆ[YO~#0D=ԁXnuԎi[Zj4V*bw r~{@9eUKYKnBX/h#׼̀z9iWmxJ Cw9;oؘmݼ_5\Kíbi)[a^NA[ 3Bn&4֒i0Eo7~Z'A$:q0"=$08$[;yZ>C+ IDATF%HWe;9?ӊV/L,9S}0mNAn>W9L)ȩF1#S7cUT fwUcjʩU96d`Gz檪jmxa.03h v|-hsc5w?0[x<; #K<*PdT=Ň.CmċԈp.nhxJS9!4@ *rZ}b2NRKʦΩj/S,+18(K;0&0%^ױ%36Gr֏9qNb'™ jc+P@c" u!kBdWbE#!hOqް S&Gu\R^8X/`*|y>H“Nu<걂oWTNm]1X)/W;im*G#p V2>.UJh}1V?7Ql2 BEw`?{)zq `p*iFjَmB-Nn5 Rl`%4&,))/| al)P:C)h+.B< ՞3vqgf/9lȌ𞁏to_+?ScmMy5sqv۟(?#*vO 雖NSq x=e w;r/3ܨ`t0_f[ݷ[W%7eK?X=|";d+wfN@9r9;hʇtEtV3x{}XA܋ auuL!>-'zdCXAl*ޕeoZ)ȕ1_ZV)[DiEiv۹H?zh}㣖t =KGMp/-_)V FoWѓ<Γhf8[}fq RjaMW+=YR;?EyrS/KxFBUO:а((ïQ"*"'ik be)r=MKdAQXjhk, }vO [mLš1ߣZExXRcͰ`EGcBĻ9 wPFJ ȅJaekYXh?Oxw^ ۡqQ =Py ak=PM/T) 9!90W ڨ-Sua^ohSDk}-mGciU}ĩ'SKdiԈ }Ig/$,ɢd(B 0'821: ̻=ڣFް zI{U WeI'S>%0p GUv9}N ݤ,XP(e'XM^ʳBUŨ }V q|yw!ep7mxۀAvIvi ")^c():Ae1p e^hEr@?Y XUC A]ܧv dP[5waZJ@~-gIXh 9p;eB 7Z1`OXw0rA]HSd(%*fc,OfYSl7*! tdgJM l]iDbk}l 5و"]|PkE QM#FLd{>=\Ի?7s.AV@ﮭÄjaWU~w%A(s\"Df=\z:bmf#4DVȏĔ VA՝D9KOt:"GDU~Lwj{׶/5Gl^ NI}"hCl\+/  -_C^]&liD"Ov?Ħ?tLWy/_*1-D=5j}m0K_mcͩ*'['¾SW[(T<Lja2s֟T@.'fPUY.N๵̧cC(ĪxNxbNU\Z;:㄃YܪIu>g6VzC[r^%ngd2+f$k̽u>34p1ͼ<;֞U#,bύfTq?- 2+z'xz /{ڵ^vXּg|oJmVkYS>[K*ЮJ,:l,k|PG ;?uګjmx$Gi1R&k5ۖU?hڂǔc H_YQ߈Xs,7a|_TI<0@:d5'_b50&jmsNHQ^b*Ԭg<}|^><'{gUu4?N1sd0w]>;U۪'k5F5@,O9p+"8VaS;`%@PM$aT wȄPYS=.rt+ TIKe 9*{\aM&HU;.Ł\P }12mvF&cp˸CB$l[ 6~ƪZ[0f ЃzAJ{ v8[IW ]ƽt]}jV`sL  0 nvuR9hSlЇC D~ѠjZ>UT8c2FMo={ʴZn4=]K]lK0i=7;͙& 6Ec= )&6 K;j%8$d2C{c=P`6磡* va#"\eS0\M fcy{mIrzxÿ(c~Jo}Kj*v;dܠ'z D>Qz_l=a$VU]`>B3W4Y2Ì`%fk":~yf%u򆣙#&l{OQ6k[4u|/Y}m(xO呮ֶKOí@!Nef42)YV aXA)bLU5VUPf[P f4[TLQY_^+VMy?6hvSd+\AYwp n*N *4 :gn3ֱ"d63뽬j5l=+89%,;ci%e@sdl2Gʢ]QkD04v0[N8|7ӳ&_e f1ԦǶ'\S+\Q w<Us(;8 &RIj%Q޼+#eU0u/FSm,¥x`("X~5=ksƚ_[2/$-Li ́'Vj1z@[KTo`UyXEG &BDg 40Ԁ XGNS*C5&ЁvT8:R c_)Ak DlAЍeQ:+b+^fc%. é+/JR !\JlUT.$S;jLL؎"i ExT&bu[JN1tDX`3=jq-Ն+cX a^R h2pުPo^P v4 A;5~QOޫAT :crc;v{SguՃUHGj&PE|ЅScʉMo(-j7ՃTBū, k/L=wB҇2>IUpVQͨAA^p< Ca<^au&)lGeL+n-Hb0P,1P\u5l[>qZR7Q/ah{fG|2)V}W\nM}i+=ԛ $@*.U;DSLŽsgWhXU;Jo켫wV\ Wmz:[h8![Ew!y^W|BI3z'h`DzS;!('a57Q@sC2~zV$epz5WtM+7tvnoOs=ԃL+ ڰj(֘o<NR4K!\Y謈/pɬI6s';z֔ק$(mlXv3Y:譠xPwfA5ۨ柔ei/TV/ɂL܈y5p~MpӚjSGdks۟!mQ!X=T QU=Ϭj|`Vi;R xBwX;7j$;q'Fr!(zSl$I=eh$ȣ5v tcalC6}dD1g=RHR[e **BNb6+@:͞ZUFSzv@> h^۱ZYKa6m$쀭`M;1š:=f0eÃxr fw"_FliWˁǾUjn5w"?auu۴LƌVf64̂xE;9\A[B[0~ 8@jyGeΐ<݌]/Wm˲3/۫/Uu7Ũ=D%U/됺!7Kj: ֳOÌީSzc10+㫭.̓Xlt YōQS_~Zo5bZ@];4K0o zapCA8 Ո^`6+^b4L5\J9*W):yɠj3a)> /~e0R-Gx =Ћ5NЙ֑aQ A%i DNlAO!<j3sAp eVC9%,zr7P u>}Cyj;S<&CathF+r?ІRk<lT!K8A>ޘ7hfaICs0b`e!V:- es,/q, sc60&˳d { ̏v%jJ?)Aq>wM7sVM83?^hI-enWrs[p _:o5ʫ9 &(26^*.?zl4PǨZXm5\Y2׋_ګ"gFg7[Z[ikhkFW"Ěp+eE@?pOU2 SPZ F[%#V+8^\v5_ϳ#Z k=eAONʁ;'Ӛ^>=^<f[) 52sX]c{Fp<MSԠ3V#y!;Z8}^ܩ2}SkDZ/Н0$C.a̦'y,Cyd_`wYmom4NХȅi^VDGlc76(,ܧ-n\kŶ{oV~>:kh+).+PL 9-͛ɮOV詥9s86ꭘf0]V C,YކfJ(M3 sb*N޾rӉsm۴j-X '`.ojS+ͫЪ;Hgߣ[xuthO)_90^:ۄTw Cag(jDKj|`1' ;|aח6!NSk_¥xwEM˖,#ՄEboۈ!d7Hޝ'HEq dcJu 5z3&+¬e7k& Ȕs7z: dd`9U**d ׍A= k 4eeͷZm~6,"LD XyM&)Fb#8%QǍ겻-Wv6p)o`\dprDB8hrgoy$cv d gt=ed0u|s*p(k/=C/c%;lc?[4^E܃DIqs/UVdTU-*^I4B#Amp&a^x?A= A| 4S+ (Zl,dBX忸}*›4꣟TR7Th{.wc!?4L0"`0oÖp,):JlBWiUUQbc a( >0>{&Jp=1M7!`vyՐN؀]Vl>݃T|J[0Get 5Ǜ1@u( d(;MAz BU@okFY!v{/!bi v?fpMf0׫tPm&3CDobHN_gw~׊Ogwh|uX33'ay]P( e_d.Rc I(`s+D󨎘.Ry;ֈ'9Goa5[tiJay{U^&/'+52ٚT-}@LFπ?0?ٺW(MxG#ɵ7x^X9GfHoy_u7^}ҟB9OgvKEc2/fS4zYͯPAoI\^~K^P9?! ޢ( D/,I1*lj Q;PY*NP{.uc@8JT{ I# L7TVmʲ^j7ܦf|Oe( <u!6,x`N6tvK/"*t>:6)S?WR('܇`( D(Ra|E,;0JVw|!fcp%>"W𮭜}<+Ph QH+ciۢOŎ4ϩls2]G`1u{G MD0@^&e0fё.@ JdK̖8s֞_# &kin|nU~y]\0JiÞ,H;tY+861 EBn>\3g+v'`HT]L[ZL7dd&?ӲE~)*r*q|򢏷nƽӞ:AšcQ3q~}~=š<gi+6[[!85#Y]AE|4l}]; j~\eZ4906iXCDV;zkHRUOw>=_|T̺ʚk`-D/_~,ϒd]Z Yv&Zm8'I[5VavhC2T\P5%NG`%+ "ʖB\ck;gj6kT*<NJS$*L\`;/@S~cW,lesq$xz&Ok!l'~vNFP|op+k( eq!‰TbhDuʩ]\A(އ0n?֤O9=IOq,\,%Me$”aYȡ`{x6CCp6`+c$a~MĚؓR=i%K5pa2wMWi;JR LLC?%ju)mj-VqAȮZ>?r|Rl̲Q\;lP<R?roj?DffHn՞kEq(jA|!/RyYƚ:Ԉcݢ1.?m4CnG+-0k=|rd/'Y|G7ͳ)Z  a%=*}6^_Iv.ϰ1?]#+w`zal?孍V4㿰1c7Aعٟr|o᧵_ymkTTdkdT>SUhz_)?MezXFHgBc}Tq:+x"z<(VrΪ._(^Kf_7O;vWߴ񁹁檀MFө RM諨zLgс*sG[E[a5L_r 6EЈa4iހ`|/"wz,k1U:^8u@Յ**;^~[Dv!a[.sR^7jsLuVQ=B/4 D5BÖ1d]IQ5tӖS̀]X4TjYki(etA+&TQǘ>[/D爑V]lYl'xz6[a~%uAr+?Γ]/D~Z+5yIf#.XMT󩬩j7suqwZ,mt`z(8T  pCYMZge7x/CO| ڱԋeU,nopE(f hus%vJ x=JBG67> /k]p76z|?[n3&F_@,$6.f8$qKpl)W(83UF9E*rP6Cè?:Z9|aTe4 ?ڧC ]5 XCL!^6l\ZR6fŘ p<x臥ٟ3B8Z PP2v M 4  SW)֫ `9j_/lW⪹\|ْU %(F*L~!DoY5ob)}bE8#Z%0?k*Y5ށy=WwzGQgs@O?+ʾiuc3OJ֗;5[mzN+`Ac1=JȮ&(Yȁll٘ٯF-52 /V<{MǞkc={?{c^?TQ(中}A𜐁C>˶'Q"+Չ]xk[̗;Ef@X_̉l=XJg 'Tcjzz(#وorSXwq3sf;oأSz mGbxnl9˫s w K/g?siXj #6Whe^K;*zZn"X?35֒&+ULV:P FofD s [5 âZ:h~u4r೴65tJ8GS"7Hq A8AZ%;viPACVdV^)UP6P;hߓ,mϻ3yڦULv3ѓb^NjYN9`g9Yy1 rYБj׆{zSk1  -4 R _ yYMM+U 3ʨpB]~1؏wyK;R'{XzI%X\uX4 !>a܅giim˺?g`}+,, d4Wa\^S L\#ڸu*b’(j.S}E"Dw5`xTacLn2z *-ASZܥ;n>@}3T5V@$.6W+t:nKY%ZZS5#Zip}a3/((^Z 7B{-|SEN[;o|>UYf.nXR㴋lCz70/l6q"J_OAg|HX63/l*H! Fyb7u#6(ƆF˂T 8|R|b1>QgN5`9 r:͠9GqWj܂ŔVl6U*62 –pC^WSMp0c|AC mh$ S/p$NP]-+8Vhu(;@n*"a b0fiqPwAM {b L>ml wS4ITpsDoRt bhO{p&5 /j;V/UuMq!/DUFFZ3k=pl RaT vS)<s n &e@1E7le/`yE}^"n91wGWqX]Walk3 6BZQrb!>*<+`?Lŗv`mwc \)-,,9&i;y/;ߔLKT\'Zic3F񼚮|\@@N![@=u%_=2Ib#.krk`դd, C&{4Ҿ6I J#Jt6ljAU Z9)jVnm'ZF.ڧV]3t*1Ʋ@O^|4 ŞCmJRyb:款z |W~UOʄ:I Y]qx*SO[,WeeY7t.x3iDU߈-Eio˺a]*>_jF(̚n2>Pn*5zJ#xoc zU:oQ#:Fv"-⛑CHvSJ]e:da&Eó{+hP$gXK_ WMktJWse/~Wp.JO\ŇbTl9RP+[jK h`'Ɲ`r<D+h_ {zj /0a;p\>Ǯ-ZKC|,A(Eq$ll:OH;1?LЌepUAP uimPf4q%MC+m>mSXvNO8[uh/ʦNC2TUFm =Y6Ւ' Y U8S!1 ~P^,cNdp(P,v]dEmэ}({3 *)ZܐzOYmB)]aPO8hxs`MJ¡9dԟa(e9{;s1nd#|RѸ4'v*쩯}h=pCVYԹ^*F~op3!|5M8?e ׿aVL\|<'0+$ؗ{} c*K>Fe8}e=ڒugXOQ0,IoF f3 6"v^I(OM!p*e_>xW2KQ_g,31hKPo B/(+ d ;f]qPp}O,*7:`q^M0R>q$ IDAT mQR籰~^[!i D6L@vA)9a% R˩0ub+?Lj6fuD#=Eᵌb[OF@5y1rIW?I~7iTKͮrkπi!kjm‚X2 (wTea!dvy,*yjrO}O(ʢ0X=g1e (x[jeX%/zH!q<+`9R|Ѫ.0VQ4`78BPXmxj@:DXyэ3p]g>rVS$gyՌ%Up"grʥm-DQ*nC=̎7Xd&(H\Yf'a'E d\v5FYN\JTm<ӝd} ͟9JLj'*H/i/b[ 5poԡ4$OShbn8DL{eΧʆ Юٿ ?6mp33#m\]@֓J67}A|adT~1Cv]s%1XUiZ<b@ouДz'BW->:cP 5q3/)4ooٟmX3OØoU^1sopҋ,f.Fёkg ,ͷHS\wjmQݽ!"vK5\ӜKVΕK,{<[j*XRFu^[rMmf=ľFDE؍|#U8VOd'\ 8,d p=&\ ggrZSsz;(Nf܍=jߪlИ`4f^YTe؎@YaZ<&l8>_ p5ӂt͘itniT8+iD {~B #sxBS(vɛz!VEBFMa=0x5(N#(5di`P7uX4_A'99+aXW% f;[<}߼| 0 ALB p+]Xah'NU#-m5:2`oay\jPh pV2F"ۣXY4f\>շ}dEqĪwmek;A'(`pZ3KYCnf7̦2kX?mJ+}>g;F+*+n ?q_ZV1\v|@FQk.AΧlyr)? ?PDЩ:U;R :>X9+4j߱ ~`oUSV142Dtx.k/O!tN5PcR^E]=9:;kFMǜ~ѽ[tyqNKuҪze[`c~+I0&82ߩtԌȭܓVwDͬ2ps.ϗLw06娽 =ʴD<:P ^FSAfLM\/wP=<{C#~nq!>YOk u l *jKP4+~5Cڑ3t;]*\ -թB1T$%.mɆ8Ηi4q#Pngq,׽U+C )cܖ K;"Rly}@ÉB, d.qC &A3&ib<-p _ ELzK5i![Z-֛a Tbs 7D0YW|0j3=R PapNBR +@i!lV258Wu!3 ᪥\baQ׬Fw*ARojJOU%5O dMGх QX| ?ǶG&|81 [ {J|  jS*U)R38U ,5.i&\p!2 4Jd Ԃt4f%}ЛQ4y;W,aQ:EktM(dS`Մc8{fQ-*86$^,:w{DgvV!~ N+Kz1usR10ȫufYm6nmҘ%uV )fCv sQDxpqxmC]1a\W(aN'oC&IzcmKD@9yIۮ5'PD?dM-硌aO #0P$}r}O|cW 7c)U:Yž_ VGl3칠xWԎ`xo5sZ{=;#{ʒlD9 6Z*"yYZ<,\h&f4C;ml=7%5wR!;]gYr;k XX7:To6OϞf6"Ǧ3W3 *e~a' [>'lACYgڤ1*_[cH znXcjuO.nh~zR=~5g~ZͤZs7c\c +j:;bŝZM_Y$M<ˎ# SҬGVhlI6NT+KQ$fMXZPOD8bS ;,Jjo0rPyv?V)pK 7 *Au0IwV6":8ϳJ8oj/m8&EltZFg9ёdQܟ{sqo1;o#>Ouĵ_\DyI+`Z`xR,K7~cіʸ#9>6-ó8Ai *U}]3T}bFA П:a0tϨ |I+p$gt҅@^n Yq-I;d?6E%$KLW=b6*AЀ2kS v ˰Vd+Ǿ%lH۰=wcΗ4lW#ZE5%'%,S(-'K4xkhA|FEc -NXYu*EcGxzvҝbӕ,YFvů/Vmm6]{) 7ܧaЍ&,ItRd["5 dkTucӡ3;ͮ Y8c!|E6d9b3K+؈`.#*T6`\Y;8p4}X6~ɂj-x&C<"1/c9X=u"Ej*O`R1XIg0͟C^5N3Ɛ"a% a4RM+6{4~>p| y8F6ٙm M xO}qX.pS$;RcH}P⿘M*ICjko( l@a#<ӡ#|T>&wS_|xX`"pIUِF0ް+gpmDQa4֪ɆOաjׅuD+zaG"^ꖨ3r58Ef5m)qPmEX0DY9׾H ;~U@ԆD%m ] %YeC8sݷbE\5-oZ-"Krg=2Grq)cl/A#mwejEm˲G쏂\5<۞=bT5АaX脿czcih583mXQY@+W+\n5!ހۈILj~"^KtN )koNRzcO>UH'aMj7灧Vڙ`W{V9GA=LIZ5xloPRCV:(h{E1Ur$u[/ɹ %Úz;5TX/={6XeTLɋ)VQgߡ.qKUaJ&QN5/0C| 2ØQ,VgFCVef Y2N*5$w$T}߼ZޡSߡ_g)ލc+Mqg ;Jvװ2wȃ-D~ĖqAZMhXr}n䅺o@4^ÏP`$B,\@'|F G}  byXo(:AfGLP(ED+Mꦦ @6{Ċ0î0$(p7'Q` fĞx~*B6:'O |l1!+S AKj+CWrZ3 ,/Bma݂X̏r74:|?Nl)|+Tfl05' ngG4HgКy4#r\#Uŵj+Vgg/:gF;EF텵\%ZE5q&O2)ۭ6S߀M`; Ft<2rCOvj)_zaC6o^p{ķ,4&?n7Vyv1wx{%yת.~']T19Pw-5`?+&rm~+d2 v5yk ٘n`Ya2QSo0i\̣Y5qf[V zcBs1c]\ٞ䇡db+~c"L5;l=!UvZYMuᇱ1bw,E5O!n0`1.l.J8g;qp0~`3w{OT&4Eei"sG)G+gwkК&'j!і}?0,̶i6:hHzV"4~\Lo7㌏̀pJM.&WPof/F XQqljW.y/.Iɒ~"u>Û4Rh|\e%W*dt7P9>WV(ouJ}^]+%2׾0{/x8Fңev]t&N-)~@3訢=}z Yğ\h$1ٹ]յϖJjn 0]`s5?#& E@T6g@/#^{SUmC\? l;;f ՞rN{0 +|m#[%,ĊH4=klYhvp5Ƌ,8:i3l`K!A#O}""MڭAX ' 3k>3[+d٣`y|CMOm9엕N+OP GƖCl^M[nOw͎Yl: ,f1Y[ka^Me} I,;!ZML~T\el7I=jK+in?rg_:Da|#Z9؛[- n NT+MFhtluvpgv!ⴿn Yci<}5}íahk휽='8-6Cds8CoF+s MX}f'89l5T.!W)1J68,c3 eEl5ӕjC(CYF^̝8O>QX?`kt> &jN|.f^0-,;?NSa >}0FePxGJBojC[Qh܄',*Pg8 lĮ4d 'E,]y4l7Яv%xS[OUAaKx%Cu^m_`̇hjp7?.F&:_/ṗ DZjŴ~1@ YYyO>-?}gxjgq p4\c`/z*?c[U}wUoPG*(=!'|p:IƨKÔя5FLbGxV4`*Vj2^5ۊu4ʪ%CC^];Xap DCi'CϮx]Jue7Y*Pu+C*tw(OkzpUS[`@:~md&R_a)ye*.Yy`y hńQ,)ZZ-|V/Ld!~V4j 7xx|s̸fgxKxkRTFy_aZX"쒬žkoE;l6QEm'uANVy%3vr'hJȁnl,Gh\*(fJ5*C1R%NPHyqdQ i{z_]:[=a7ft4Z<wQ.A@%9EDԙvxLwhUW~U<1ߵMbz.;+Ai2.@+>4Y{6;E8]*[9gx:*7[b󩺶@ey}W);([%e`ce$gQe4^vB -^mKGi45(2M (77py!,Jt]ϗ@@)[ Vɭ kVGLs`%PjJ$뼱(H4/՝Ik7ܵf~X뺪CRV8T'$,i37={6:q8y?Kqmg~5^qGK%O@k_rP+o`_JEW@MqWA"NE'|[ö́A C>¦ 8Z+\3vfq,)iVP \TPY7$Ї:\ɻZJkm:WѲ?(/f8H |A5]9Ua6T>(+9YxC|KB&SHdlIX_bʖsM}vTQ2˺NY]G?p 0I[)_i-Ewq'ry@0))~ ~J K|1b;[@hy]p_@g EsEe>.}}k`O9Z&}sZv;;jXj"Ayi/vBLNC%,A}D@aUWj2dTE9{uFp'l2)6\xO-T҉>U֪~g&0X|<:ߢdo }?|P'8C_ꄇLOI'Mh(-Sɾ#cJ6=Xn(~KR3H^@{d{HG!dEhdMQOV`&E`2^JqbpRӗnGsG@h?f96|Rr]r/j hgA*`KMg#CPV35"1+RU}y;s(:y>u=K`]kC2ɵ5^_eoggJ8}:mYNU>R;5ayjQ^WO=P[ȷ(2Ң <7?&,Fa9XNCYQB63"W p|*cv׳L)0^Pbcw+x2ZOCNTaey/z\T`'6tu+F=KR)es$8#kQ=] `/?9"7p/r&SR%zGe 2]f<\ʤX/mvC/zx oMlRb}x2o2' _ajmmXJb>#m0zh##JPمNǚX"=V۹m/+8V?_0^{P(;y~Z@ϠR8d+→fQ0u^w6ҷ;@Ȱ@p`=* t*[ ȥx"j]mv;ufpfj`y3Qfv(unBan'1 'v]yJ[7\{"r;2"#તԅfvQB.%vIݚ2+36E&`e&ܢK:QO>#7Jke^9U+Py+xQ% . SX$Txt0Q=D XY>OcH\˗%PGRQ̊yw`R.eE:ԣ@BZ~l̺J/Zr6ճ^bKY YQPRYU( Y ̹RK"# NbޡW%i Oc`t؏->Ɛ|jM~NXV>9\[J^[G~Y6S. Ie]>;8)?5-ƾP`:2KJTG;Dz, %}.;B;8kwx|x٘,-?%%>%RrHn)DYmdo}ldzWz+ޒ`g*)PF߉:<~L7 s[Æ2GLxfilMCsdO ap, t|Z*y V d([X=>/E2|L9Ax gDZe-&$ ^r?m c(Mv؈ 4( AׁURYf s Nge˘>b< &،XkٝCq^^|)G GtvҮ47Ѓ(N+}.xYy3'ϵ9!w{7ssзeR !;/DYȱM{`Ȉu.Ta5.P&T^-=Nd2`}@c=E\r|kW'"Wq~!cAwzY?:M %) IDAT߄߄#]E;Q߱TkrG^Onۧך*cEo~vQ2aHiSz/ ſqXo~m/rEp^iE%?kyI" 8v'77^9|la+>e3TQYĊd8/)..+5ޙ`]lŒӌb_LDj |S۠_ @6:B[iZzU)"P^)hB ҲXC'٥i {a #w( q|ϧ$gB,eVCUEEReqBx?{,&c*<+, 5, ^v~Ddz*/#oˠVe_)eoEsk])^bw<_+Ul ljjV^|6gl5k@w'X\ne=^b٘i>Җ]`w`Mj4);`Цp*]L3-jo 2a9j(NG -F%Sr`N$Y0Ok~G#H((X&9]3y9FI{+vmZYq();?d^J7,!?!/'bҌ.魃 .2Exn?ILTT<˼{`,,h:IG1X Ortc`Vg\[pF((\0ڣa3]0#n,mՑe Mc1nTϮ*Nwv:[n!D[4lOƚ'N؈gǤ;n(^l1\j#y>qǗ)wCG'˲PY{ܔaT1;ʨ ފOe ϔHxH}Ii ydXcx2[g@=B|ሆUO{Hͩ(?*!,x{A5֟rxu'`'+|q;G< `{`44a%~Bev?m1ϢsZ-G-Γwј{yc`ܦbͫV?VmfX^ʎJ mY)G`AgkÉJA1\N2 Y#dPxZ@Y1Z/2a;4+_(>̤U.M بэjG(GRv!KMjMP9On>} ׾17t.RU6̵HNob.ǴǾȕy'FCHeaHMdxaoK(ӭ |nc L>4|`hc YWS]ñl[ 2\"Z*OpP*1{=󃫁qf Sބf$W ΄I!OoV~(k?Kqw4xdI=i?DFʭz>-VCza<Fy /]^ۏ#)c\ŧD{Tz?-f=0&0ZGTߥnYAoh(@uEYVt2^QiU6(skj6Z=/?@hC euJ&cWx2xS +tq\U0݌䷖*FjM`aj=q>lNJ ;Jb:w@#ߞɞɇ%Hٜ$y?f)"3;uU5;2fE<#yyM[4ŭg lAp5lM +;a#61xjOEcuwيJ@6YqǛN9y/c99)J1W:,Sz%@L%Z E0J b5Zf7 7(0JDpN0 Pccr 'lM}i_g=5SɠdZ];f~դW g*k ) 6ӥ Ũɱ8h6 `~u^ZGp+r;^푬l`w ڥ'ϑ2"<Q>3|FO+LU3PM;DomgqT1 0mX@9(8)-%˞}ۭ? R7e(,J?G(CJ˱3뵽r'w;-DL`cxs#U4wTmKhl'z^vvdu EEvE?k-ZC>~~̼)Rr~;k_K2 :y]S-SrKXsn/npΉe>0e!4>^OhFul7W.[ >Eg$U|-Aٮү.`Bp]`e5#+])P3KZٓy&{9Cvnv6e-x\>9J) +q/a۽}v[#v}mjUɟV>7wwqˬoi=e"hcPݺqvF>g߆Y"̾ka!ֲY0ƵZO*7Z'UY`|yE\!L u@E,YiC{. xhՆ5-3E=twUmZ;/^M:1۷{5#y~>"GRh&粇wMԤq̨bkV]4|}W[(% f㌒v'{|*ujG>6Kh:[z NlH8/VX`kI{s('qJgVo,>S[*L|~/$Mfb&Q,VĽ6VHۨfV+;hQOl6Jlnyk$5#PfM͔3z=cQ Ynd.rXfUZ̩Q;Nh8gctG{1oc9NVYFbthlOiUj-Dxa5boztHpҊ~\v> "mPr襴|WbV2b- >$͠{%aAhϡy-m4t{ŏ{+R-X,cfN:}yZ/~v>J4GJ ?[YK~MYx}6/rGMei<|X]yCߩ<0 /qA@naF .RJAȶep8Hڲ85߲Wՠ xa3 9) rv` f/`vc)9W[yy#f%Wt Ώcp+o%hQxK휞v5WfxReH{( aeQ:S(Bg}e2_Vzi=YEU\6QJ'/լ _oHpc`(Әտ-y";w(''M 5ve Mj!֏ S[r=9t/k U 6DS}j$ n;4ϛ6+6K9>Ą_Z"LhMƞT4[]ʕ~"ݚ/#%ZSYi S;e*rcXCfG?ʀ|-vjW[u슐אKJ51ޕ>b<ښ$+Fp2q, eQvBv\H234wbPP̅0 sQ'JsEW$݊VxƇd&o V h#xi6hjڃU;iUL8a/;N+%.kG G9T;iƛty)\6x#oֶ[ޱ[b؝}ճCGFP|VFsc%e"yldK`ƟX^@˪)W6"2nuvru{ Q|`mnuU:.K3z}XBE+ M"$Mew`# vSq:`Tty{t3* /uM饎*FAlր_."цOq[4ef;?A P WC!eC%!X&K6L!t_s,#>x-f4]#0^և1rȍ.TKĒ, aCfDrl# GI07n؉-tXN(Z4(!lx2X!/Ab7EeByX67YM Oĝ0A# {`47lXN _zdo:k /7V,SHV>}hWLs<菡8-&oC ?ѷn)K=1W6e&89 ox yF9hg:tz),ƨ1"Yd=RN9<#>`˒U lQ(ZA2*e 9 u2/8Uf1[2zڋgW}6D;*LpԌEc">O/VɧˢeCW/\MP? \c h'?D LZ egeډǰ^v3z{x8pg$|`g%Z7v4F_F|(9).qZq2ιW-SGʧ~v.]NN~ha3Pk*'CJ~]]<*eRذy:ѱ92{K],3 Vɉa'dԇS:`uC<-sF;tafy1<-%wkSju>HH>T/Z!oICC%YnXpxBѰ E6E5fzƸ~q[xF(|4ש~)as8`ɯՙ]q 1vJoϦ)cmZ̙U6O1s}XCd4p 3j >{.ܡv#tb?jt>`oB?C%"=w aYs?e@*f62B4LL1=F7x9TfC]et)ӵ⎜VcjP TT 88/9,Ŀ0NfW!E>i#68>lC=XY) auȺ1ɇ)YOvNX1l35iWai`j̃УF)lON$,6}v'RI sPJd%emؑ8g僦㲣LjdܮÎ4^jh]f9~;c/3s d4 AF7T=JG&dWjv˾pk]LT^;'>,*,ML+fY+v q R,F\HMB;InaJ;]]ޖTľ MBl ke)9hKۃHQwŔvX <0~JvR Ykv,opN OdaGt8!%U^H#bBc9Ca=SOT?DO[(`8SP[):,& YCۃ=ۭ ;kћѩ ]?IuȲYnʼnʹ{ iSUg!mNJ65Ԛ6 :^be\szW*>w3lf[QqFLǮ*N#Q\)LOmMqQm3k\#IDa dž㴱d|q9*rѹ/^m7&QsC+RAN;])䩏{-@=yaKqBl她'tW:TRљ/=-ܤg4`wI`hJFL@6  .s W- ?J\ci(}#p>ǰ|wʷHYWQռNsQGj$>X[ᬿ'_lb26)=[R:Sai윭吙z-X>DYQ(g]&A[)Sq Uӽ*&rf۽pN]: B?kuxCKZ Y;^]䒆Uۛr3kzA+W&z Vv ~?yϲo/^0Ι_Ҟ?U?]n IDATHe_VQIřZ~Yo~q:Kq,kA{vFYw~R6r^TfY[nhIye?a<gE=pV_1˓ugS9-B/oXО` bHȻ1J}=B-.B-sWk/v{vy#K492-?ek3P])]gq^1Kd-Hu2xXW6#{*HdNBC)\bK0'|솏Tm^\ǦPħb l27Ld鬒:+31ێ'([p\YBұq7b gp]谝I<.=@#VCs3c%Ȟ\!.eV;˹QIT@gvͤp_ Cl+F&Ǿ]vk6VP^W[p46YeddWY^h#Gʯc{y;-I/UN6HB`oI+BK#-`j [hl lJ%,7TQ̂FxU2yh9%ߊ`O삋!+"\ MXPB]!jQi.\Y796Y&:`!g{BIrS1i8'2ˉ-h~JMBq8װķb_~R|Fd9\g\P1¦-0"w%wU0lvrt|7exɍ[L*;1t94 bNh EZD =#5\s62+P$ôWSRF++CQݳz W+œo%ZM/Y7J L/7Sv @ j إM?] Ϟc1e~d=~uEH+kѮb 8]ҨMJ,>ۨE"JX)恗2}f+i?)'?TՔ]nc}Bh x%xXWb~ٙ?\CMYn淑KJ৴w#ciReۈ5f7X8^aihZf]ϹՇq&s][۴ٶmomf۶63 ?S}r#T #+Dkg0r,^-jjaJj:-T+{-QiGe Y_f2/4OKVFZNRswc1U_ˤ<^,an>⾧ŏ|JJe'A䰯8R@@,4#-Y6LVY3;Ə6]8drךͽ-j}Ǩ^N5n4FutW;`!] Ѣ< >vO.c-{L<>7Ẹb`8dԩǺf[G m͝4`۔?mnM_sw2X M+w^HSeM2ce6a;1/;EHм^ɻm=7Ԓ VkǤ)IuX:عVM[И2;`$ Z =< Bal`0[E0:H8Gs$KtS5?FG(Dޤ|,ylEa zH7NMOT P'`9vk)(nx;X#9br;i)֥p]vB:l b>ֈn9Lt9Vi'uEQNOGG=N!Y1>2au7ƐMp]s&by\g,4a?̇wt?X /`?S*߰*lR *A2bE0O](#7= Yi¹,s3z*bEY}΅>U#k`ű=xx}v:d'"Xdvw<緗q~e |>+_sM`Gu·R9OS sJsU")]U8v&sb3_ѡ,֩2TkN#,X|pF[OHR |ğ+oS <olO\6O{>45gp я硗 /:SQZl@v(#qm8dgsWLd m3 8Afk^`*Q9vj ӂϩ40Af)ȏL| |Bd+![;.Mc|4<aNSɂV{ +'lzsq4::t @<5h)g4Fjr9$ l &^PZ/T*>q\X^k5Ml__)hQ&)E( ')GT,_:Ў eՅlmt+nxJn/({Note~;7nAgT3,]#V'fDQcQ~ ~>x-;x(U%݇N*6VEvj'5Rsr$Zfq0w'ֿ[oK;{mJa^\. wl`Sk?q 5D5|R$ԕ-B$165YyZDps=YcneydMR enD*Ri~+;z=<E&:ɿ,8f,7F1I&MA5Tap#7OonXKd7/;Cixn (e3)g`Kj"ۨ3b)D]p`ZEFQb)TP2}<́DlOp˺/fI\p!/~.v׿ᙦ{jxKg]Mg9loǹΪ=/5g>gfEfr:T.G`J$cROz z`vWϑ~x, VwojBRF;=lMqVQԀ9vE>>AujJmZd/NgL~' dGeO6\<[nHs,L.dx c;'8׸N9H tH4=N=g%~(CH01ը'#/*<Dz3c^ͩy5A5];(M JAO,+᫘=^M}-2Z/-͉M_v~dR_ݟ|v`7@VrrjÝؔ؃[CɯMaF[LĪM~+̌CB J?~w/}[>S?m"Z8:MmeO mCyD .7oIW}D[-Q;kʁ@T7m3 KX'"ƿH-4]Ԣfnv(7\YLZl Vca]AD+[K\`o-N6dZtbsj GFLij`OXrf?Ip %F}O cV܃  ~a L|'y8?c^P*!^DdCH!>6i d56PdC;K(Ů|$*|KiCM .A]ɸJb5Vwa9_*(3M ,bPeg-TejiP,/*g{,b} O>cwzw1i .WM:KPUStcq1 E,Da1iKD2>276gxwqIFes=qnhJ~ =O; B.xgicheDx-P ׌=dJy#͓){hjJP -c0~[U?tVM֪+DX(E Yп̡ΐ-Ye=KUQf޿-Z~nو;5~;]>>|ռ5wưZ#u'襏\jQ lAޞsv* |<STÍR)iD 52LQ^*jm;JlxeS?ȥ0 \Z V>o7wv hֺ7F{ڸz+[z~ep$;u϶OM7Ժ<νô5aKx][r=1nutc4vDp^6iX=\Iy{߿s+|?|}jxoO/X=D C;)Oqǁ=ig]j:Ϻj_"f]qBed}R7dxͰ^Oi0J(-w.c" *%eA 9\h Ʃ/8XUj\NY?p:@nd'&>PNkBr;h)?#c)vG+>gT6*%(~)z `Id5eLbQ>U>w# <2ݢtcxze n r^Eas\,&XܥtQHduvi Ts4NQNb H{2c"0 |+upl'PbժnuL[ jy\j_#o}u6:]_" l@4I lŽEVAmk1y^R'!/C\!kʬ0Kʿbe ΋xnhC_dPьn #ZGu? ^!XIa, IDATlQ=\U52cG3X/e(QF^iHy]?@k;jw \M|XE*Eϣt]M6듀,Ձ4 4a#(ԞK٩ZN!1F]V p8^ARA"tSE pZXV)c;dӠh4(p+q4@tAyJazC#XBena8Cp  GXSge-El<.PQ([t4%k\O'Qz{< kTQ3 ,.vVXRǸnC#:1v;xwZi:gF)u~-qŬLFcEHX{ zA:{Dp,*|$;1oo[x{X$ΉI6hJ e[DQIab}_ x"دzE"DPgX0[.ts oAɬ=>G˕:,9N6RS;QiH8чz:NY|C]Gu9z:Un4%PIy/!;!#w -^L YS P%G)zմs~N]khzK{EWhsήYF{ 83hB=Ao(ï4[(XǪ@[ Y|#^aPМ?b#AfjK1 -: #{TYN\EkbE =I|VM=F\6TZQjb9k'TJ÷VpgRb#oX'|2;:@+.,:0>bYGRAx+n8v]8&Ռf)KV| wWG ? ~=)TcTt|az\ޕBzOIb%ē1wcS%*݂lN:P k Y8ǮJ1 -_^ b٢),B*З5Mm4]U|.6xKg5JvV[m^mQ= uQw<:/*mlVa0{DfgvSHlP~Yl/.VT J)#o],흭5aq4C†xj\TގWw4O} Ju/I{=V#Yb&D+op]9놺\ި\K mSZW[.aTRf닙M_#v佯# 2>6zGw]l <ӦMO1Xao64.k[t& C"C3Ciz6]+z\ϭad%CX{/LT1]^thd` QDmi}Kz =z"B@es./l4D[Ϝbl4֗rvHܶpaM"]*P"jv>U;NIp,a [96l9U:^l +SPؓv]n/rSiZe3Xa&qD^14L z`_Od^E^9rw(HװvHp/Ÿ k3.+?R5 BJwȊ^#a+܂7"tJɮ,FGW^VmC! &WIzkiϥUrxEP+vz}Cy*+j[ԫX 2)\l,aIߊR.#]c,N ?b3\ݢVO|~5OnMazu@,Ңyvx BjA`H&(Sʟ6-l9k2+iW6\c:?g w6"xSV[{P+8 ?8(tcsrjG0}be_b]T7Z(syy:k#N8S7[m#)e#c>=Ց%mmN5¿x~96G- _a@%isz*xI֑9l`F8]D2.e.Mru2#րg0UP Jex^؂qdbȃEWq́Bf` `a:~(xed2=}BI܆n1=Z~* JM$ʊA/ᴼķvrx1 b%6bcHrr,*7Úb*nJ\܆I0w˸ϋ0y/h\C!=]٫S]_Zf\a,bT$7{X KlRM[0ɺbW< v&gs\`2 յ[WEgl?V,i+H-qs*iڧQG]][ J\x5/(ҝ,6/jl09n$JzțPNd$8z(cūNz:μhXc2j+aeszgwCq5ڏk- p b}ЊUmkrz`6%).>:T.л(6~gYC?Rg)a"U5VO?JYd's'gVY߬u}kAԍoe5x)Ǯdz*l63!L[I7l&>X^cDܻ'S/QYʺ$J>.,20 hʩWD)0*,2[?ߙYѭBFk׍j:Twg`=+>E_죙V{%1SjHYkCaIY\t>t޿/XF+q<$[*I%,*uԆqmx 刎 I^H^Na+DuZV/CtJ/V%a]rGmC-s5+WguDK /}Dve>?*ϳx&LuECI/RCl>$CYNy{P}D%lkȾ<;Y-OjA?2b(UEiVY>B0G7~{āy'\^Q~cG2\T5V[Vmg rOZ֐K?i?-JIW8^<=1Et*t2eVWD.h\x^k5ۤ$?=h8b- 򡹋&#K TK+]LkfkhdU~OKIM)KY\Gr@_ 'Ւ FQC颽]Z~( 7:xOa%5`(]X25 rp6;NP 8?|gei;nFp}[iL*JbJK$:S{B؈/Y.-!9y3QRMt]]'Al˻.^Op[0E})M#Ex'@EONHB#4U4}lh*i ׯ;?|=y?uR=F;SRT gos12FRO;Ky\X\ a:ܖ;C< PǮha{1 OPKlif2T_V*.WkTx˹VE];ϡKr=ΎAym;MNNwT˥2Y8^d>Z2*EQ܅]#Ru9+<\ƾ3'0۫JMo3'`^`Nvԋ;]L G u|x2_+Z0Oq5_f(-xƹ}MOS_lF)@DvC['ҩ%* nVsO%a7&ӾFH}/F{G[:~,׾UEά3_,%k02(||Œꥏjh uɃ~JjJȴ Sd7F9W=@͒0UVrE30SܧѴ}e+Q*r}:P,|>@KaV;,Ws_^5xBQkeqiܔ@RO)M xE%n~mJɨpm6=e!E$~&X U9ޟ;&i.a ;L@"QaȏxOvvEa *PGp3+ߤ] ᩪֲo0mlfZcGvJ^L;p߼ ۢT_UBo 63=ƧO˖ʇ\f\̜i~͟)pڬO[s OEn6ɫ#664;ƚ)AIrUt{LYQB\KY~*x|@[4!*zޚ.M6묅Z.*-jaA:Xe*Kc[^V)̆(U:yߺ aa˶mZ7sqٵxmu[Ҫ_s`1hҿA(/dtDXdu^5XQu7#V o9m(>XZ;h  9u5tQ'xB aZ~'ry;j, Wdj6VY6M]X.!}md&J@O 7`,Q4Ch : V*6 n&V Z_Z"k&i|tU(R^H'a IDATWy4`̧ݼ5k`1g);Q9M =j2؎ފ ցW.sGb z!8hi]5L*]9@6ڂJV,= ~VJԗ*hi2^ij*8͂G(9N@7o][r`=A(^hfHuŽ6{d0jiy -gƚe2԰D&Ha$-Վ):< jB)ăp.Qp:W1bswkJ;4j`]dfrw=ͭhfHހ/pC؁L SyUVԝW#ϱ9^dY x(7)hxWַB7fSenLKiBW43œ.+ VjΜ5J$71_QA!M%|S.aVU,+fgf+ T1?X p27R*AVmLY}98;03es폄AuJ\ VC>V!sPҺfЬi&&AUqe[e$ ]M, U~uAlx5R2 s? Mtd,w@v& Q,M|r cc6TՁ륩8E-=ث`&Zf>vŸ!')0GR/OdkB0C[+/uR 1Bk8B:1x#|b?6 G~+;ȞY]̻G?|E`Zg%NK !ټ_+t|c$D[p}m3GR[zk'S`$)I/LxcJWc2ut,8v/_) XDF8M%_$w1is ^79+gj7p ^(x+^+sИcc-4%7#^lI@l3Q+ޓ-[X( >KM3?pJDJMcv>C x?gA: *3ai!K;򡭁þZ{Au!x X*󑦍BCYu/mhh| Q8 yA(A>Z Ms^'8W`(Hp6xcYl'1~.+…N3h'̗' J?_#οÓbu܂`<1 DT|Ыp4*c^H'9G+Vυ|FG=42$/ Y*A "05*FyT2-;,.vXvDn.&Id- 1 pLL!eBC3B„{Sf oW9w-9u7pN?? >yRMik:7V5|B,5iU9_ M2,4;=1,%8ëRloNQir3)@ିOo=TRz}*c.v9[#wU (jFv_W˄rNTo-@RxdKmr("Z@ J\W4-I?N?C Xmhî'ׅ-޵yʻQ73zoUGI5J{i#0xE9Y>лXGD>, w:Hf*"Zb<{7[$`&޺'yF) 3 fu*.} Ha?ptwSR=tZ%&mB8 QC7kЂAcPu6S| lŷQ n`5okwtc ZhulPiʭ$mCSYEk- GfFՁ^XZXPmB>p:ʟ9̼L8j+B>U4+˅dV_&A[lAd i MA%B?%U^ˀM \p\fo\ 23ʜe4 zOsJJI`51]gBO4hS lq yL[ ^h KKÊjEÿn DF%jd6mt % 䇉,Z??`k t& (72ln!ŵz imˡ&!fG n%l.Nr^ޙx ,WC&q6l2?|t3x3/zj(80^ClmŇ{^7DVSݚ`18v  s< `6X (<AoA_LQF~ቺO<Ȯ:W&ʈ M^KgA"Xu@WRĂ`8?LsQQ2 .)UtZlIW1P\!g@GP>`y{a4 Y/yoo.hiܼ :~DAQ%\38nxoq3QF!L> 2wXXZ8vc_V`*k)N'ŖJ{i؍(ա*e6/ɞ_JߖHEm8hVy(Z{칱^'H˅BT"ilT[[K{4f=0?7h݃j]U̒Ǯ_eΐ';|I V[:]Ly==gF |E쀿Ep.\}7ZU|kpxNМ_ߵ0of}ѿw;YS*vrq(+Ԇ YEы:4JKk<͞ y^AP+WQaf xI7p#^$(Gk=1pFjVfpΪOkQh`R+dDfm |aKo/܉ǏpbF C44)wy?Ick垷86&: P^=s;.j,ޠ~ 2K`^|费/G̻(\@AڇMs5Aԭ?S;yf~dz49@oǺĊQ;f#:,p*XPou6Nn=cS8/R+.gE9ֱ#n!4Q-$(ss9#+2VBx1V_*${{uX Ы7K0{C)/C_h:;r_6e8G@7I.:2ǿkh5=Z$c4&J]% n/=H!c і|f]3K,j*\4FUꁡS9ۃ/l_bh8a;YUƿkhK1Uumv$ Bw}jԦFv?9K烿X}bUޚ`.u 0|;kߵm-E+ n1>vH0DD nPvcoK0]gY|̉å%bY(,4ACI )HϤQzGJsMͧx6γv(J+o.KGah+? na DhGYoOa OG$K qm+!¾(OcŚnpKO_z{. 3 քNЏe:,́;!oFqgwG,֫Iss2_ϔ[u&?H3#'n>a72ǁٮK+Þ3c wCK*b_Wqp(ZH9N(NePZ/-9܊6'N&AL}%"܄kxEYp)㟰W! _0J0UMĈo7ʇPrb*(6K_ <* 3E={SK5{[9#[BP5GzL= hTn,^CkaAv*Es`E~\!ށ*h:^Oӿ~ SQIw5%_[R3##9iTmq@P`dO`U $TD;iZMFi@49.(ɞ)UO︯c3MvHY8x_/MAz^ۈ7_ .-~5fμ n`7Gkg$3*&Gt{Ք=i9֦XpA)"x>`^ ;ƦG|[-݇p7crĀr| [zOCV+' 0G9V) Rz,+/:%o9GJ?NW3&4^z)F#TOZՌAy3Mo/ k- 6)6ך͝\Y!M# 4Q zh+(VZ)ې l):M/ (rKj#w~xFg|\mD~iGCK`$'6WJd}S~=:k2M(D 8 Lؓ-('~h9 $2%̺c/jU rQ^.f4ǑF>HM֏U4 묈yEІ97[ 6}l*_;%8B~gti: ˢR U d !'za{4i ßhbP\i+P=HU)~K8yNH:G=it_n dWےR2j[lTEHa;}Hj@Z @Q#,d0Qc3T>])wmUNήeD SAo0cjGW&ry: ~rռ~f+#S@Y}d f6_?rQ`ߐP 79 jlw0A_ pkNک-/wMj|VoG^X^3a=x>"Zh⊑>bBCQ4p7Jn6NTs0@98 )B8>o&[,k+mO%U9]dn>)^&~`n4l^C/KXyCy&ݑJZ!Mc̦1D#}*HpC7}}km&ʃT~b)<2DMkf}gGa/!d_SyLm61.B ُKnl#K(J`(LRp$BǠjKk$Hx[7 j PyέX%YZuD7zzc7knvZaG ٞ8p΃X_<^yQ~&qJSlpgGyy5 N!8*_-_vO_HMq`^q< (c 7:AnV~IjZ\^-5^m1W%A=d\dw<*IJ(͕!'Hִyxǒ)~k(nP3Pf9XG U"ػ"9G|1V3lg6X5Xf-0>R^Ivlt+;_/ѺqbBZqi4<dHl2S`ţ\#/ҵx8W|F@hc QAkÛM(G 6]tK'Ž<4p.2g,2 ƃC uXLqԕ^79>aqC@wppF;)+||#lERMZow5g`\/P;g&S9dJMB&+ۂX6\EO|Zn /oR8ʇ%\:Q te{| ]k]k f[@>mEX*n0rY"p2ˊ` 䶽F? LVai?xGloC<(4uy˫{ j}/׷peCKX}6 S|;&Yx{E9S,X7g1ᥭm4 %~_ѩfqrelKA$ mx10Bx <Ԧh-v*jg#K* P}ZP%p t3@7o9߷=`[ZP^| i Qt+FY_xJK-]E>6䌼Ojֳkhm^ARKmB#'FȐbm<ܘьX@^-^8h=CK4łoQ&RRx! }fQ^#lMQD<̃0W3o[4ZƧG.x+ԑa.[i[_٣>Ϸ4<ļm6a6;%NH? E+_̐жD.pY@#~GW@Oszo2OxKR( cg O|(#PpKFYm:1>M {'%vyO'Mb=&IhRL)F.9#(Vn_#]ݗ),KOW;[,\a2߇Q.߁StctmZ#ZC L^deRpS렢Wu{C2ٯP_eO7O7Ǩ/*夽T(/h$z2<f#ko(IƇYd;)Vp\J$ߊ"&X~Y`AߛfLɱeьFWCƙ-9V9jW˼nkzS?=ku<~AolE7g.lo>\ں&l A0#f}r;y7-%{U;||£=m;BI6ŕbR,:s[? +`)Q <Fj$0k: T yHk'#8i+'_'. B-apFp< Ѱ,q§\CrPvrKKqp;Q\piqVzXe-A?uϩ;}j@7^0!2u{)WO+c YxR ~%s2H6|6dGxP˫;'rg\Ǖx=N&V;}d#RI AFꋿeцl<Ʌl<~Q0ēd|D}Dt,qvT?bTdyŸ7q$,p/nyaܒ};H}XY:C;Zj?Ϸx:.bňR^G'H< z\3uc:/N_? abx2{9'-{pVKl AM`\oL2TӍg$o7'ze=<{d}ĠyhR݌}BSreBiy5@RF6@ a_#zxW>X.kܔ1lxWXMP}`)2QhkVIO~V=%`c.@NVOh>;R~#K"BBO@@`*ꓵVMvYHf^[Zq^:b=ďڔP Xl(Jk<뿮O2̥OшT'/w*x([J!F~ X,G__6wۃbc=hvմ >!)=UpY~VZ8'*H_Lp$O {`.E s<Źʥ㴈9Ofu)9ɾ_STudAѢ]lʟ˧x+ڂ:$o&%:xPkTt-o4z|H<+f}ad>#/ẎɷP9Բf5z[Y`@~ [54P|›F$،K#yQXTLaQ\<yIkR5yT<Y_B:ErV"AglCCe u, l''%PoO*l^36k}~.42#<0Bv)$XWpPrE3+%Poq5R-NҷkG7AϿKr~wA@EvQbreI9 x ۆܔۻ o /+.^؃kH{>dDvdhdTVƹg9h/nº 7ʙ5p1%ɾY쮺_BԳ6{-CF%*jxvqlw]yS#$|+űaN-( kJ/ETy -6F zrMCE?8IeVB g9ߴ-R1Ydnߝ3ߗ֌8Px:<ϥ!Ǽ+oL!2]Ig?s!vTTv-@ZD~3`4O΅\l-ýJçjW@"y ;ÿ^'ݿ5:GWR>L:e#W JW+#R_J6kiBc&[ 1f[ce^3#?O/еV%],ulKf½R4ΙlL&8FDiX{!F%N_6kjqZUuټ,d>%mB+|U%o6K}o.< =Bn϶Z[aaRl'#0YI ʻ8X2O!}yy7YgH:cȈ~9>&6Ǜv3hE۲m*hj5rx+ȇ$2CjVیXLoK@sN`+=!p_:$Zc>MoGs8&[wbn=ⶍZ1#$܇x!K1$;DN&K#,d-].V i'O4(" {XEZJѺ8;4< FG| |ˡr*#3|sv`^Z(םMF8Q:xSU]u┃8\F(!]Gv{g|KjBM0難((շOmvFF^}s5;:SӭC~Nkm OΌx $`n stwWԍה 'B}JXhwhm<+ DEmeSp ^VUB<|Tz&[`C3VymfS: tX {6R!6x"ڃ`X ?#f,F3ׂR8x|#qI` .]FS)UqaJY2UJNXR͐槐픙7.NQ*+#BI{must֓N`;?<(LwCoLiJ#~ug=F*Ketu#w=؜XsǼc7f/8mem&d{8;_뉕b.;)S0"_w0܂UP֊8/&ғlȪmhE)#GBJѮJsR3>5|{\XDB]mH;~Yy@]WA_[,}c%kKrWhfۍ;)~G$POz5C%C(v=]'*IfE!V֌ WхxT vV7AL B+~-HKc 6 lWIp)Zr9#UFE>զ 5NI€25:2-7cvH;P do&5 ^c\[)Z_+;kG=͍l,89*U.^{k}!gይAS~/G[-Nw+XBu9mR̷UV`v|GV}b6m@F!ֿ7+d XW)4Fctư.~0l 8ijmnͭڶmmj۶A<\sw@_zeb9kW/yNa'Aڷ iJʃPOu9MƑ}X_2ր Z4Y5C]f?e~ud?<u#.R9~ セ,qODAkݹ/X>aKC1Sѥ2'u;!MTeˁBps,;|rV2X4oΓݶh&)ֆm0ax${a: ؔ,;Ahuou\OIưxL %Wzd>GM^h]UݲQ`4#ƢptTavM`+_Kx;짝 8@-@{0BcWt #& l4dwF-fMhm4co!="QhKV @PPCW8Wl.ͳSJ oa_05 K* -Q/w/MւHHxM(Jk9a&pt{`& ˢ*WNVn^Kւ0;Iu&} 1HhKr8풙Gؠ /.l,Vn-Ō*&>@HL!W>F. ]'{ິ0<O3t3Xzcp!^ ·`#_v܋zF8 %(eNBCE W*b*-> /* )EkX+rzAdkO&̶6Dމ,Th-[hG w- ڿFђCj^ hC]Tc7G]|ô [LTkNY#:1f;D9pP^Þ(v 4I(A7m,]GkѥFƦ82_Ӟ(< hX2Ih&XOTZa*0q^s+^hJ+Y"j6$ _Aa;tQM<DɃiԣ7Ǝ=.acgҼV7^* Zg8y/*eG0cP]GN'-x+8L.,Hu؀\7ͺ |T/8se} akMnzx[&+4NZCz_|:1JyJgiy?vQB_+7iw6ϭ%q /OxvӹF)l?L7MXRW@bzW+c KxūIZx dXgR]14|^] ߮ґ͞~dxV6ag<-CRF.7z-zoKSx*O!bl@Lš(j^LXp݌ik~ 6 ~|~y$/Ġ<'8ГP w IDATPP];Mx9|>`)=aȁu[BV=3_n_q"*)j4}<6)$Z0Dі<^_LJMgc.";qBGVIcPC|KUScyɟm'v׳ޠ6IOUr5O8* PCX @ b@1З:8n`$*mZ١@0C ɇQZ"a]umRqy4*hj)4CGO5Rͥ ֚'- M An6zwV#upVU~,]W'*tLnWq"楍+q'Ixu;M1 B3odz[*!ez.zRJg+)!j Yiq%}ta *w V %@o&<#N8WZt!(o-o-/g**)&!c56&f~:޶f)0 e'4I$ (H~Pop{SGh!vBh i#كҼ0SYT~@`_aК 6߱NhJY\ĶH %wI T_+sTu^E5 ;M g}t2nۍ!BtQdy3$@.ok1E6NxqXog!0J́YNw|4f+(rU6|/^+'OD.ƋGxXݥࡑ^HPr8잸K-(F1wA5dhiIհ<]J'PW-G[͋.r(TXv)v _p{S:(4O|vV{s;TF pH sh~W-cǴCPrWRKͣV yHs|p7q+%,: DН6d\mo&iJ#r4m"-Kam}>qdHg/x<ìwmQm![8~ g-@ɺVYؐlC=0Y"qBR0C@6x 셗] ,T]X- ~ c`{K쭵gy >.}cLPi ӥf(L-9ȪBO7טf?<|O~9_`'{R(@GHݏXq/;F&OŬ[`F2 p G#L6/xsX0'M1:z%cp}$⋛v&|\G|ZzG^:oMPϯ.Jp ѸǠ%^~n:nvvOa/ ARǰJlyϊ+/ b,K Xv do]"2/ne&4S˪@X޶efmT=_j(^6Nr54ʨ, -B7nlN{m!z g 3MgACc/(cQoh2XcA[a#ĽR<O7<VOcx${ePC(s~Y ?`;xDM[4]CRi‚@Q(UQ L3oU&#SX=lӌ3~OVMw̫=g>ς#H]n#kL_t bM_j4C& eMc\I8MG]r2_9Bx)t[~oīamO^)F+L6V=R',Ֆ/ n̻Sx/_=t`q3RKm/5|e.x&#($8haޝnxPg5|>#hȋc2i1wl+M5W|^l['_76 @3gVwt nt^?Wq2$Gi'."+Wm>9S=@-|Pv]A7oae0l-{f%h6^-n &?&X ͶSy?T=_Z&z>t͊*ķ"t9ϧ {m6S ؐXG cmh(n4 ScrBI4bk mr&>Ψ 3Pܑ҆>i/z5mHgQKzcϖRy%֞ƛ; `\[OxO'Len|mb3FB<97##.7AdCy ԇ[EQ/8m1 /A} lpD(`*Ӭvx9s1,+|>E|ls{쯟@xpLIx ͌OkoO})v ݜ{ؚ:-h{Ѣ5{Fƃ<@ys?y @ПQ>F揞~PWP'X.eXBZGƋmx)8tƓK[bT?ЃUTjqZxԲ+ΟQP)4IXVyI@_RM.IrW Sn ]Di7D\<5L:gJ0I]"FiaBGЌ~-Qm!;m?~xt\W09nQE8#r{[W"fHZ\w@aW#ZH6Kŋ,'4 mq- ZYFZ6XK+ˆ N[^d&Ȼt d\`a=Ec !֞y? !ؙeyLg\f5FymPk U;;[kJNd#*4 7Y}=%Z=NyŚ|؂1o4iv*A7i !/XoH\morwUՃJ:BfX[{1V*yO c /8[bm:JB `8p(uj"cUJ돽0UM\gOW 3r`c>6[`>LO! I(ϰ7ȇpvd0 Œ -L~\>dVȻ.DU3?CEJoз2z|8 _mlIm+o.`lP:b7he!:KH -1Vb2kY@׀,>s Hm OWXk q%Ou\aY] YTE eu3Zo6V"]^G#}q/"D>ؕ?,Ek{ [= t ׫l%ʑk)^J` or&h-֨(h2qٸ& hQ6V@5jMr1&ZH֔Λir.TZr򶬉%zgp^{oQDnxjBO P^"eVcK4쇐{,M%y̆ f{5w'-PA_L [ފ>M|٪++J@N6goYcR[!MX$.N,l/C y'Y".ɕÁZΏ.Hg `7Ybՠk&|8q5%&|1F$;E,l g|1͒x;,ڑPE-09l ;ۊpD)Z @! g7E-ay~l:sh5߲|! .V)kZPqp ipe?g`Fo={wq1[hO ˤad=>a lDu,rId6Jka> #?Gf9h 8Vy%|] *j*_ut\(!rXNJx%CA68ta MI] Dq'Yv/F`OTM twAwN3Y}dmH %䵅0> dބdi[J4Jbg[~غȦd\,(͐ .kDِ5kBʉ(0ͷ֊JVJx"k!EQJEnx(,Lf$)cP>2C+rUqQAꐧ$~7e2Pfy.+x&-%VuAa8F<9 ["Jހo&?O#@w_): Z OP a8 h*zd]Wp+9^5 Lw-()=.J jbGN|ei%7\yf[仱!!S}˛g ]<'k4CB#Y'_ t ⩖M `ƞלi}'vЊCyxcY;&gxE[}=9˽=Y Olw1G#|H1UkuXO1_bE-UnuvvGYyq3|Vu|]/?mS YX~hW9 6d|SGb/QyOѪ!ɜ9L<$񌜤$K')OaT정|ƥ ?npdؚ*r؝|B>ZvTZl{,-lm b,A#D/J ,t%' VmPW`BmLK#cCkH# 瓄w(v>4NF&B3n\>ٓ~.O:GW^^'zgzl4I!^6NGn>8o] m Ns]'B9[KvCXT.K'sxC0Ɋc=#!QKچ+_NQyߑGH,ˎbgJXZ L|4Pc/y;![DK'pG%%}+ѬP^ve;)8m\0B0G(ńb Os,>45g\KG.7_5c .P?xK):/==Q_؁QI8,pw*OwXvO\pLS,AA)PQ.|0Zv4&KGs]CԇSyުW6Ex\#鵈*~~Ln;o( IDAT1+CNҙb/5U`:Xwh{ ׸(.CBWP lp  !ZBȃp/@݀ LDž R [ƦUPuƞ$Wf焟0nW~f9rZNoMR 4s[o$SZ$Jah;F;kbN4Th1^(>$^I|"wH۔l{TX7mmu+m-VGXlj싢.<5q#x?pfYg&a5:7+05g}}Tn>hkU)tgM[ y">u %5ye5 ޲n ` N>|6kc?Glg=\5R2` ϮAD p_Y:5ZXk <,[so~+d*ȑ\1?GZޔe,/fXqh>")Rscc#VO)Wy IR^;#~s4Պm)ɺQJ[a(⦽?[ܧyyE5gًe~#qpumpT*(%s'9iPDc:ΊvS&:hKp$/8LZ7 $^LF~:*v+Q1#OP 4 u פ qgPAg΁U4-Zf|AY,KbF}O/hI9z~ܱG  Шq4 {+g Gs2;o^ ޤ6־ ["\G/_0.k4{7`+@%y*|EA5ͥlPš(${|Z|AtyHԉP P3 O>6IJyUՈ!R !*8R(WzÒb1?,rS>#/EKpAbxU4>b{Xgy<mMU:GK1|,c0 Rpy@q$b0?ʋe%^S-[HvE.'ހo gY7|\+. 74 =X&XFl֢zH]l4D&HD̙ES0vz+[&?ヤG1o -Oa E{{燏9|&cqހo+t]TpMAc oc Xp ⡅jW'a;IF!J;#x@PJ.4FGwQXxK4J4:+op]mě`񬸸uM#|;^>0,d{QsPVh9nV}y >yHhnl#Жl[{pyT S<yZ*>쪣Fvߗ&'؄x B5 hL\aJwJu(v4(]]ÇK7]3z~+'+-mWt^^&dX^%[;biY԰~je?|>wba$bwfYzztFt$a&LWgb?T])lv.xa(=y~ݯO>ʩ鋅H"b6>rEld/ěh(v}zFJ@*A)񞠫Wmj8.[Kw#@/uw`IOm_j_Y/`:o*崲j@WR*$NDz zhPy=2U1b:N:9o&rj^xkSSL?4/'$WOЗe/'zCy7SʟT juM>y8 l{DK|uv9H ˜k{@7G<5q\T=+k.SYR 1قIgJ 8q:G Qk#q8ţt2BpK/~ݴ.ykj `p8sPkVʩ~)yLM!&5V54>:"B3B_.|B<[7mRߪG--q&C$^Û=p֢е)[lp]TT&tƕy8>lNA4XZ;J騉5 ,mz ec VAe T#6p'Le)=!E`u4'y|hd4u{rS2g^FIZtbm`.G.$ֿʚ sFnl-ʉ ci;<""ocEl:W4rdTNvl4)6{z[Iqa1~ ԊP"Lc,ŬAYrU҇%|DXS0]V|-Ygz+tA_ysvXwa|:<~yaX]x@] /u` `>]7^u| ZiVX]W2L~aaeZJ_FYrQVpQ= D]ec(v k}NZUcP^LN"Z{hdꈲ5pەZa&-46tSڠǚŸ_hZF\]jɡY!tڬs #h= ʾ$fg-:ZܲX6) 7b#Q/cn=k AaX'ug;&_N?B##E2TҬ#[WAɕ(\"pYm)ϴde4:ڊ6ghso<7B@(jczEv]kGhihy0xҘ W*5?,oC'm !f85́Y(FT=]<-;Qۛ/w"anjomc(BljİJ vY03j< 'H -FzXNX!8Ҟ\M+Jn F+5^}ppfH2|S)y-z0t9þ͗DiqZTYGb9cyksIca/o@Pro5rE |NXjm#78Lߎ3>:=n Z!YM?T| (؅C仞sEcUPȠ=/>9A?'VsKk.JP>M{mm=,CԊ&FBx^PH]BPg4X?CT#-yH2!#14?8K܋dy/>BBvڐC0u^|Լɇ{\򷰏 4T<4X|)ߪG3tu0T,Σh8^UDSJwb4]q8VzS_͌0~ =V̂gtYAT# Y ~O2Q |چQH+AFǘӰjd&CgŅf:SCf%-2\ez_&h^,)QXsH^5*jP?[jq8@QK.qEE92ۿ ,4jް'=$6T}'8kqy#ͥjFwua T@Thw{.,0Mk< K@R9%W*M%Rưh,\<. fB[<*ۍL~R-2ߋI1ourW)+,|ɏmi<_ B)<=r25st+²0Ag?Z,\2R!eP^ +GL1O 7-dmJ+% QtAljE25ul=M])eŋi'tgEڛ- W6[lu꭭Dc|`FIhRh~xTyYGnIeYHĜE@.!YC yftBwaYOge JiqM’N`:X'|(>4t>U(!''!UW\Y|R(ї'eh4}?\;"&_fvwOVgcV$H?h 4.ݬ~<:Y\ *e?24Q8|$nS/rsR+%w|,1S2EN|0aݡ{| lU樂?.e"NMFZީowďٴ7\"}z8ʎ"1+}zhU>:"^&^< R\4 DHxVL1,Kpⅳ3'Vonڲ?\#\g#ωAK:|}_ _[(mZwYJ$(G[D@΋l8O(mq8Xu@-`}nrڝVYA éW)+xsUiVfZWlE?ycqQDmY+eӻ=a`uҡbe4Y/53f~:[j3@O=~A =O<"iG@qwԫ>Oܧj uux4ϵ*C/TT~ٙL]rKx~҇Vus-ce/W `r /'9P78 0N:α6xpwR(M C6jȗjQTKRjI+ `µ7 2gh"F7VX^e{W,dRy2n|2+h$4^~ fpK[*9MoB.xOAGu(3׶Yo/h}%0`yTy#^F|7X A8E?&i XWe؜ œSs Rj/ى.Wn jiG-5chiYK9PuҺ繟5MH$h[ RLmÕ(&|h#F!S9Ú$E=|o< 9 30wAWf7|6_bC-@t_7Cwgoso* @ ";ۗ /)Sy\A$K5i汥zõҞ%vavy؞Os|-9W.+}ϒXB6j7\O:6rx'Y ~0{o;#7?@["TRLAWÜaL6F"I-TxՏ^sOpQߠOy;bD% ?1XnBB9Wy@a¿G&EkLyLtt{d. M&5ÃA\lvMQ ſNJ[lӕB_i*RqXLW.[/a"-ETtI{cS8ʋH.D7eN+_ @?y>4{{y7{VW)fo!\ӆ/b]q}<u*YV-b:B޷]혵't/ߊRaQW<_H"B7\AuKf#fue1bJ'q6dDJ% >;_蓲 ?-?$</N,zZfS xzNIx%+tOhx>cͥXCXmj /-S #Ne-,B+%~uGu=0uy]w|1ga1!hk#?|bP{ vdh[ ZN,Hg\E#я[7\O?XOc,ӣfEĻ 򗤫1NKWt4yMSO;J&Ks} oCK}r4Hy%lR,ppgˡp (t!=E'ӑV%O/=#E "lm"c2A [ z6'+D}A2o 'd| a<p h6oYf;Ẍ́3y1ƾ 6փ'a R 3{¿49O##/xk) po|/VFˋ $Wj%7[Zd~Tn{yAzJM`'e=CKl&3F3Q_I/7Es8 (aQ3fZTp{^{As}\͸1b.ŖJwuRm'x[ ^3Q?p|e}-x1*EV9;^8D5=g d oCFZm{ ~#m8NlL>92MvE<sS/ (^ z`"@3sswOnVw` p /fێ%[2.x'4ޤk88Y|~M9`gQrSiX'b} xK T\yIOf@U9*[=}}vV)W;wJsĨ{+=b=UV^J/.#Q7/aV3t=׽wBu\tl"C-ĽY;}}ӭżUgh?BSٰ`?|,Ŝ/>TjۈgbBa01ƷMlV J0 jزH@ai-Zo4QaiΤ )A䘸:M̲=Us[<*ڿڥw Js}>ke=t]fu4X'r%vu>v_eǹ3ڔw"5jo 'IUJ 8]S<x{{K۠nꞔ1kFBr/6$4[@&[z8|7$'* aETs~`aNix%aa-{=5˟Mˀ.^-WϿe{/~h$ƞ¥+"=8KcD\ȥ=%g!f\]u1OQ?hY/p$'/vʽ*e ;ӁR`mA~QzpfjGF,o&./G,4(?La4[Dj d3/cC ^PeD^q4p<㉱Ikʦ>Ɋ "_U)57Za$mF y~?A|TgZ7x:6 ɸ2 {`;fuP:->nX%W9Dׂl,B7u1vǬmGWn>T(RY/EĮsE%T=~yTقw)``b Dx'MM9b=^qձ5j=I;)V6@6O!Km=2̱~9h$̷7kN)|$`htXބ݄WZ= nP,ΰPG 3O,Xx& vTJ&hU0m3F U}L%PP F5O-#/P\\Bg;iW՗[dpͷҖMۦMGSݚ.U<(8,  xqzWx'Q%@xֱ٬'ۋρRs2ZAMRUSw`''lhɯ1YJA[ x;_&[x%p?/WR/Bü,{:OŮR4W)dε+O'Ԍ &DP-9Fxjc@2}K/shlf;pJ4; _VXJUBxI| fM0O{,(ܘfDptD?Y3\3<ۇoj +2| A, GZhU{B-RsX~{K^4h.G֜5RTNo͟|uv8_n*rǟTGbRΡo_ꀘ{iWB鬊od% ޤ%g$ŸA.-q*U$6'@q]l0" ɑ)!P% }8Vf[]3;H/v: ԺV k%k7gQvWoJ0ZjF]oL0"'#8U+AV'Ur5h~eI:79)q LFB0ܝVIێ(#Vt%1VvUn$|Gmԛy B'rxX~+'!Y+oś & Y_tAj i@ VGlLi$H?D>`[cAHEe%qB!Df "in {p(X¡`Dh^;hA~KdvC/ Olϝj)4q]pmstLm4?B%}}C.#^R yE|p!{9TnrY/;op ,[jM\hk9+ƃUwgD `"L{rbu$D[E+S*) nw4[#a&,%6 YjAO靨ߔJ+xRDV!G8XOD:AKp[9T \{=ME -f)K^*VdX|(7_aǦ$>asX ,ĩ0LG@+Z9f{C+]3 4kot4K*.N%N ;N02M aWZs=95;rhx>A9݂ b"q$U>Sv&=O*#%gX to(# `IhSxD0Ugm24pNQQ8ǪUy-ߗ 3Xm Ypb/,x^ʜM_>$3/qL x-z/)zc()*ml6JR *īʶ$g2 ѿ+?<89=JYZx4 -revJ?]gDۈJt =,0Ii*M:=9eK\<7?]!E߂tBq7Ӷ?+}=V83k*Lin|Xes<].j/2lhvȿ9#'m[+٨H b2Rwljmπ_%lޚ)OU\G"flvہ{Ҍfw+E̱Ƣ;J>] L1ױ=~n[NMW4+nKMe+_끜ھR -P5,.^%W m 5/kH'`3~"3^~OGkUҋV}>(]P\-WU?rq+p>vh)G m4聕Gj"{mJ8'26%_q1py@ypH%fդ^1'fDouY |GO+~qU$^z`k/rz^4s4rDi ^L v 16?2+>#zsQIGq?XQh"v[tA!P'<v6g#Ɯ>J}f?RY W~Os I~R#lU, {h~EQy)X<'a[ʃ2;}2O$!k̒ =%k[K;ruc\I7hs&ʑKKԋnQ6sLy8eb[?!꒳0ϵ.`~Cyx?>UhoXMTo.LHoJ}rX촦vs<}m؉4 Ѐz @BﲿT_dKӏǍDt'J\t)a# %`D:I6g}":lϦtAz4B#.Ćn*tz6d0J0ϣRP#H Ҙ p0O~ga  hotBW{U,vkt9Wc@P\a%t|q#!+zJMk <0خ1iF&/$%8oLdiLFLl)'^V,.)ûtY Hɣnx-:czD³5R!\6Њౠ,c4e+&%>zntaXOXp34956r܁x_Yu~+$ ~vI.x[PNڇ6eGMdE?XiU.hjfy'y~ l&֖ G{z~ӶeE%9S#]ԶN=mKk4RL(O󘭬&=b=Gl`ExŶ^DU4"TR躜Pe{a)v? eyPi_ Z9s%bQm5;%m{=|(AnT4y;d߸70#VǾT]8n'P3VᷡEC6ezhNJ_`8pSdc[F@,`TA|'+߂g][p-d䚷: P7X?LȇRJaA |rT 噠XLp2P!)~&|SF~3@nUS%>" h_w[k47k>p0x>I-p ]x.hY X C_e}h.:4QL/'XCO6Z4 D~A7@>~y<YY @~V8lc-b}eޖ7F· zTp ̢5pl 6HzVRܧSzxi1q 7Z%lk$X>W>gKT>H$[|S{p`Ux9?`ރ#*r`-9 3 >S'Wp;ibv"v"ܪyz]H8|##娋/ϳ%wL@O-Eۺ;8Ħ+5/TSFh2i`9؅CMt$-arԔsF, V'ŇBA z( AO@+AllK>(rBh5o϶\2](F%vd KpH/ ?VMp+]P~2 _p m >b|? .&^E2^)(r /054t{'YΞ&}FJ8ͺ p#17h2YiZf*Hv|yY=R8cXR鵴4;=gFp4d ZПƋӾ,EwzS2H/rQ^(zØ}6*K4o}g:G?c1=sh=g&C,@zPYe IDAT?U`ߨl툴_lB_>~02A/PQ䟞{7QPBĿET~ 'RKפgqZ?+~m=2+1 ^.xby'YM eh[SU>Y E>/d1#|[poЊ?,`0mi=_iF%GZ$ف$ϴˡp-C#9xeV,Մ|[ {7/>7+| j{v8ɳUMV'J-#CL?mY56X![ 2~knl8J)(S*2D@ EXgLS.ߙ cQ ,Z( c.t#a$66|  GWK6`Q"m\ގ'ȏ/s`D?FO |f^Y͗b%Jg-IBI#A?@`K4iWe-U]>¼yȇu|#ւm`5d XEw(~/ci]TH81@ xVhn[;NI E>f10: L̇n~̆ 3t5IQcg<]zk.@!?EzjnWi--#r/f!q9l,/ㅤ36E8Hr m JzQ`bgsb`7_4J<ed+QQ !; @'{Tz#60jz!'^*%F<+XOp<p?/Jm퍯])"]QekevEMBw=zX&}Ӡ:52^ֶ }Ĝ(q6ªnl m YZ/a:ZaUu s܄ P1GgʷW=x*jnB2gN? 2\ [ҖV06UEM˱C4K 8^`#h1,ߡ x,E; 쓥o7]mJ5awuUmUKj`!&` 6ׅ娛5婰>lBy"V o<ǡnZ~:K@{ bNgfкѷ9W41W˯cZ؋)lT4ϳpW( =W䋸_K~i*˛'>c>mNZMYb-DŃ[Ug%VT'/[i;&[E hq4F( utNkZ8; hSMddxЂVmG[ݏ)`c£6&LCWC/C[AC>,-ONXS&`)\- s<[ 4>Y5?@#:VFϠ@Yڬ 1 }i1ǺBJwq, [sB~p!BeX"tFKv#oh$g |Đ̲|puGF \5cXOM z o/ J΢mY*k57˹RR3OB1 HFl[ 5kˮ2k~}KsfG:θc p֏)(mixZ?@" F8MВo ۜ}5x1Fc(q*/( ̇;^ Bs4HgXQX=d G2_W]YFˋb,gs2yիi~SJњL"N}Mbyk;:ZIXN?V ah2=!&:g\D?JoYfI#,<=Q95qw?._Imw't=ѪFTfH-R$tlnpNگ %NKiqPF,4EӘ㒒HQNihՄ( 5+QrOmaB~G^[}U ^!"74md)UΤ, cWXKwvw%bggSdYs}2[d*qk-,{jS|S6ey]KFZRBQ,$$RLDi%[U#[t$BQeeXC`X|TvWVV3( x YCܓVQ<-%(7Ј}EȥZ94busKEϐ|aS>*sY&jHKnh P7.`\EȋSe"ڂݲ̔E Di[p]}WÃ|}J+:ƨ[4)7]>g~-|eb6GQu1#=lh$G 2vi 22 7c+;V|,3Fÿ}5Y+q4̄?a ΃[%8*e>/z'+rLpGu£o \BJ7FGCY3M3ي^jbd#JAnW(,~ Y3$U;a#0et罸;(2ZOZuY@XV>.:p2n ѓGΕDzt&;G1]almhu hЇ"fL\,H`>P,k֐B$M8ŔPMql3C7cĶQVEHq[N_*ΛC} pFb "|HhL)KaG`Ŭ NlJ\ e3Dc#yWa8KnokzW шt6}E p a:Li(ݥ ɑjs16H^'(/%NKNWKyx-X^VǬSm.S"4r8 dGcWiKeRJcYoYi3N~IlrlI5\?ԷL%;3Vnl,|)@}qJ"ob!~G 4Ytz1`U4oSF^C.#E"Ydc K+fFJg]7&l]P(>@6f̰y 9v`$kcohXLn 霒z Hzh6o6Ws_l+ߵ>9gJ΁is^ .H!=^VwFB#Gd̦W /Ck|Gu#=My%~ [q2uſ`[3jWwcQFWBT/EzrGsl;u(Kq>=$gBs@F]%~aO 1J[x!Q9]`w#͒kϚyi%s^Vgٜj5rvA-{xMhۧD}TîPp@Ѣ7A)Ce#)lr$_wu( ѵFȹ]("0\ʚ_"-*btMdC9KGoa90STelly*lO`ՙ}KZ1V38 Z2:BED/#QzM^AtUr-nʊ/ B o`*8N2SŹyk'ǀiCnthwE2ǚ1cYʷӢ5WEuHlv9tFO->$p 裴 АLd!$] +܄r*IC"t|zؗQ *A6i_nG&nB;{zB)C+71 b;\er;&Kh.#/J[da>( I ^_&4E*Ur|;(M>A%#s,1' ,f d\=M J-km1|_kh#v|/Id1D*tq*֊,e -4>$yr>vIAtx)lQ(.W+ LuqW+-YoYrqqw(O-喷g+> ( 7Q[Wg^yLރ1rzD\Qb G;r|SCA#9he+eAh4}IL>;TVOMVcZ}wBHeއx ,]Pf5/Ff`}xgI fb;;_i>h &css0nb5zC?Z1|Xםn}/yY؊0 c tx\.E#6 NB;=W6>UBhQ<YV;<'$=ј( w5աU=\9e}d}VǙ2Kd['a[5/2Q%P BJK&}­vtNNkm <_ Q[x|# ?/f.ՑS/_sCG;]QHLE~qlnFo{﨏%AWH:w'i8uPl߄7yEݛfzǼg e47~sûC)_s$= 4W'%^ I,iS9XQ\gH7׶l9кR=?hzN؞>C㺢g8"@=QGS'#vx\6mxf|Y(P-0tU x[l\`'Uzᒽ!ecV?d>z5`QHYs5]'"Q@Y'jIr]QgV+yin  Nd}|43[W AwCII,/uNy Ǎ& u *Mf$jCGG1Q=vt r0}>6ENGk༬((q"ܑk|5爂~۶7Xw&fyQIFXE+c3-< 2$۳ev~Lq;ʝyusC;j!^4ލw$s݊ u ^|XYÈ+bE\ɰ E ?ȗ?(?N4H<ÚkݲdNiE1'h*wMԯNNz~q-(qԿQeR^USJ2EE}y-pFĈp&H=OBMԒ: P(߈Pk)ell !%;3eR?瘧E jitu1sl&-l+Yk&SoڮXwg/Gy:_~繘&* ^:#PV&ڊ;ѹ'kQ9o|]3c9PD#%m b$C=OS=ݕ%h>Wߒ܇^ (?)4#|" } x3uZDmC #ЈnpEgAzbFGKj Q5s IDATa3f;%*"1QPS%DβZf \#o2f[qs/c2'd#W-)b'SjNͭU|2|O:l\I]/qz~P늵zw<Ԇ-<8ZEYJFD{$Baȃ(Q |1nOZ[Bu\݉(+zr?pI:\ M'yW臘Ɛ h`ԁhs<^dp^Y/Wci@8=G29+U 2ˊV`X@2拹'} KdWWp1LvWd*2?*$LU-Pa4 D^&g<"Z@' dV7EQ nF/AR(Lz"'n'! 2jCwT/z$DB{`qhVi3^LU/& 7#D@F{Eoq, (ᮠ6WN28 *'>^R\'L(y32='C|7YBGqY8@Vh4-'W2S]El9-#u< G~:&j®94{c0nup;휝{$zi{31$ՆLk6|=qbINZ]d*k1D%\47$m(jJOJCN\gE9!UOetRDKVx=)VΈDFF,WrH ж&8 g^d >u9oǷz)gxv96˹ &#%k<Eu~Vː߇`B1B 42樉B\Vr@%7[ݹqMe1QޑB`g0~PI+Jp+enBO;5neM"n*꿌4xq5ePVZy:hp^Dxrt΢-h=_re6Ye Yɾ ZSQiiVUX9.oEjq"~@NQv(z4uJ9Fȏh7^[Ug %Wkns]23Nic!# W"$iqp-U#z(Z3d:ֱSWi6> ̈́]iq9|g]e]E,MP_>V,rd P^TM6?YFŬ,x?^Cc_9 !{Zޔl֋) 0Hoҧ ZdQR#)yR&#Vv_ -;(GcpkB<4'۹y=FښxUQ4 7xH3%_XD=8 :Z!߈D`\--|M$2X(i CbARi[lwQ<<3h_Xod-9^yS S? weK3Q#q21\bbQDbQَOG x-qwx:9p=aO\NrW8:Gsj_M\`*4!1z*N,t5}@!2ݧSYFn*.`-a1ۇ 2p-TtDuX}O~a5q=wsv6" Ķw8N[**1(byš< DZI '5!rޙFKVCpGtqeT_䤱2Gar'ǨǍhOd)'!5G@moi) ]M~ʓ*(3#c=? AVVgc(.wd,OEtH.g?鸆7F2Z徫H[ґ^q_m+?@q##zƒqQfuάJxG1_3uժ{etTr~z8*۬owْ$rqI fWu^"]ivMFx/aJVpN/>|+I B^w.h h:̂s>D"*- dt77" dVY^d*ʔNމ֤yCOdý]5K>؛e;c ϤQYxQtUe7TnIwmR[9ihuہ_jf~b{TI%9Ҳ{bkt(r`lr,܅V275iv Y@$7k!7Q4ۗ*@' 89&puZɪdQZ G); ҧiV`ix$\[5|5tҝN7ԂNjG&N@UzU}_s}~8`-Vз<{PO\|_B]; }1rߧp k&zi QV=Z.fwkDgi ^2>Yѝߦ'Bpu=BPH+tdTVRVTG[#>``ޥ #1B'*G@-Ė!Y[V:s/86lpZ$6i5vSſVꟴNK䍼 7 '#dk̮V~{W9U@B5*`[]Av#S% =qы$Qy0F*ZXlr4' F id9s((޳"P/u$iIǸ.$+d(YDF_n".QJXΰơ79QvվnJZ!;,'nWFt//Y @og~yRfOHWxWd! iWj"X!s@,΅CЊ'Sp1< eX%l]\99Rngn)r60T49=K'۰ڨ?.pgz{~uUV#uQTg )TZh-V\oޣ |ʊ?P-|ePvq\"Jbu^[Iv$}ʿ-'ɇl=%wWrԊVp~|bD֫2M}~iS"Olfz=g53m_o[*j: J&HS"YǮ,r";FO2FQ}-'&ٸ8/Ɗ /hPUE :S)E(n/gyesu9$HF;z2U2F&UxI 4yZi$㾆SwadrXyMe+@2bq9s(}QZJƠo0pCTG꟝]=*%DCIB^vMu;%rnzrW.wIM&H ;^_O2Ե%ڋXkF*Q_aҗ9E';9:r)LY!ae Ǥ97[7xǠPè$okTrh1 ~dѪ?,l,:g= IIͅD+Y5HL2?U&dIc/M+9@g➜x-[u#Asz"*& FURDsTkb/v88؂Y9KLƟU8 G>,c G;9 i> ib/ckQ/'*9,A9( `?>Qp]CQ$"Ůg> aHY.j/䜒+tOb8"ޠTgV[ܗ&#M"J& C)<̀p^p<#d_Q責-Wˢ) ..VS6h$^c([DɬeW"{C{\27bUIgtZUEs g4WUཽl V!#/cݐe]w te5 #h;LAwhX-K(@N"¼hLW+w[CQuh*?[hl,0ykyǷC'Xg NB7,T ıG 8R5vv5w8YX&=4ޤL5Kh_|.{M1%VG",@~z&øD{¢'Gh3͍<C&?EW+DL'X G+p2 r|#O/"h[j/ID+Ӳ&ڕˠ4ѧl);Xp[\f Kf} BFI}g5GNҺ Ԭ&SL;K:"GB}4m?cɓp86hg}N.HUCu Ч7#?|Q#C93x-Dhl#z6T|TOt k4X(ZMds( _d'5f.'Z؂Ŋfk"Y`JGc3l5ʙw>؈p柭R IS`%ds:N{ڨ1^FΎ]x3/ƛ駓*H=L6|;K"E[SE.i`9:[;fTPnG硾xRUkzȁVil6'i8?a;BHsrd2#KC^$y(^LPs0̋bOy!o),6E{^Y\DɽUAX ^; Sͪa41;4T]hfI~@\sq\^h r$ 7_ !op݅F*I+8$+.s M~~`D氆rA< $>GQLu.Ԕ+|HE_ x-5s$=dGX#Q,-q'6 mes>,r4Iu -Q {y5i ye2Pr" #aTm;Lg3)MX}|f,j,b4Z[UTM<ǽ޺{h?|x,ɮ#Rat>ꏏAk@URGx.G=C.KԔEm6LhdTof#vFI5a~x18]'*pE4Wq8ײ޼ c5K##95}HI#7mrF.8-+XEeIS&{a;އpۦ񵼾UT*3焆\#j%v^Rn,7:t0}cƔ.BGUYt0?*‰w~\nlJoϑTo]{'; )x-}*B+HVOBd8C<|}(n[55"Ud.DC hqQD|8h"o⢘Dsx!:;Cl 4~}gWDWg>@'4fp̖B`;l<܈s (u;dNY3T;UAGztZv==&kz hIVˎfNjV98rNY.  OzO8f޲˾Z.͕+KG}{hoee~DI =VdFP'9zR6yE-F+<}k]3Y%p+f(W41e >Wšn\B$cIH/SQ^O'1pn:=|1k1f &e'4-Y\'([KG>g#㡫㾾A.9 Fpl;߱GuQX/(0kX"ϭRYuPGi6'S/gCDGl.vy|U: \Ea .f*pSe&8Fm!3>doN ר|B, IDAT?l_qlfMp̕f՝50clKdP61omGBdZaku]}X'<7z|ˋ|fuֲE?jgjxdW@<_7\ǙIMcOdb3OG'j4>C[Tx$^ Q.HEFgJ~%-(_dtHGVW&>*ke2=B6Mgs[IVZ9NA+s9v v>5|Ūlv0Lgf(SCEת1ZEͭ< ڈ|*2P L- ✩V8x]TIفS$׈}nl%Ҳ#jٖEY^ED謶yD]EWȋr:pɢ0u"#'^]˝c#FikE>L/_=Q YaџEm[YE擴ll=/iX-Dxքߨ^׮r!ǡv#} MʒOD& <iثNCAE: G\bDVvm֏&ڣV!˕M) /V,Y;(pTZ[tAS^m]$m:O1R)-y<7r#+,K:exu*ZkYY4Gppg5Цޏ䕵hTQP-R2RQ:c"_9r3g2rL~8n6I8 E}R?kVK?}}#9Jj\DmVGqCC,zwX"gг@ c~1ϳ#jaD5tּvק ̨9 O)mmP<\5YQUC.h+X-e$N˚6$}ӧX}O_rqެ9EѬYCUk@?q6|f;ɖx:ױWgh/Br*\&z}CYԼ|'ً=I^{Q858454K^6OJ7^zL{vMOWzK Q8!U^HY1DH>K#.Wm)8Te7h3BEÏ +[t|7i+@abKh9qKvEӮ.^vm?AU=4lflnlmm7lܰqڼns?h f9\чZ#N5Tr (,G`;cT\5kʎ.Y_3.-ɍgqn+Ɍ3Ί@uֶ`ODM ڄtzߪw3N<+kC y""d_!VUish~3`OU'q4$C_국۩WXf G>=H/0uc8?7/P P.q$p_ЎT]tמjl69VaK\$DڐT;l 1X/JfF |zW6c=-"9t(~3_Z񟜧*7s .A3. & y}`J۩6 Vp*!z|a+NA/@_p,G`.;Ғfj Z&-eo&_H \rh}K_̷Q;csPgYW"i)wDOugbmO/Wen_q!+~wJjPOnE8 GSZ#s$/nMJzQ(}T[#֪#r9K['ĺ$\UM}IXu^%FB,5eOq~UjDO _װgzMY zL^cM[Z#ᓪ`%'r/f\ታW'^g?hSkܱ9wdc d3=rٮ#ᕤN௠yGV󗹂r7mr0[Sr Ât?"9XY6}"a<,<;utuw[)@='%x QS?::nZNտO9 Nqf]Z0i1i;LY/)[p?lΐa= Fo~Jr23êf/#o+53Nz9εPW?HRP׵'ZpAI8X6bTrX{DoMĮπ2 Lxu7r-vgR%A/u-+AN>/U~e?f}l>BwpsrO|"ɩd1WXAJK+ZYC{g\G&xwZfi1.+t=NfAqPTc "0A Oщ6MbX0-!lNoP®a+KF۠$Ɇ0Z:4BP] n10V-RMU:JG2=S$$ yאTɰMy;H&J{D3[W䪊WðVSOdBɿ -P@*V5IyGForJUE x2-}З;Wܣt}lU㱐\ꑛgDx9fCg,c]S%=eAD#Fކjz&XX.44Z t IgM g~64`]PgXu%j؏u|(]QJ,uIJ&iutP-- f(j9:uNmcђ4V_2u`PG;Ƹ˼F:y~9nPAA/\4 0gс0}uQ!ڔ%|VfiZ]VR;#͢Z~FjɟW)Xy_JTEpz,Ca:֩l aպlw_SRQm4%ɖ3$@ʙt>bH^OKׇ|Qޑбv= ^RxPQ,g2{J{-G̖{2lr8f vu3FAP%X 'DPV"&'%FÌ'G2>%-mw,wUWG0Oh݌a1+9B u E2a<+ST%u!8^v1Ԡ>'̆įpP"4S U9vG^|YFva#HwWwT1xb7f:mj?O1jGɦC٢x ̀Q3P .HO8%5B|EO|b Mz۩g\ٯ8 tpnpf%@i'/qwJU-%_Ez|-.4]0W6؇[({e}?6=mNj5Ziebm>eT1lZ1۩ ްx9qEX-:9@ұԋ~%̀jVow]W?V7<^8;duy>O:yu7wS` hs#u$aCD#c/4W+ ~[cu P'#sze} N7qa􄓤cZƲX8"2ToӮ {O[-=yZm%(S β&YQ*Q'IXK!| xTb#kȟj䄫ʅeƶN± 6ˠ+nAq68 ZgwE)#ւnPRjl8'|Yqٴ.z!Scv4&UU+_&U1>)[l ݮ1=gLWxb۱1|bY4YDnˇ\j`ܺ/&Სf_|7 ;?da78ޗx=lN~`M |&i^C sv!`+OYs9t"n/㎱qUk%O-%3.`NpÖR Qe8B^lR>Sn@6udl&iy%PgkU׹YܣfI>r0{!?Btt;?Z2j YX9=T!^;3ӵ5ofxK\K}bENvϬՀoYhqq~odח]~s44b?! 3niŲ)Ц \:YW.-fo+xg,2eg7]/TE1ٍD$E rҧ3^)˗7^*Ff';gFdN'qqMo~Gy>"3D r9:WaoDUyƚ!v36{w) cyԣyb5clB_^3qLAo`V`JC[ꈧś#`+鋘, |7ϚNf|]7C?4LǩO~  ״T#X75So¿sci{a`n+eV;b.Y ΐY6dK ,C! 0IL*< _lSw@iIuW~xjU9JhR2IWH? Z7(cj`aJߪF؁[Haj8>{QipT.O xWdQW5VY>pNZk5ڍcX֐֧"IEV̀]{]hCZk=E?fsJ׊y#9IweȺHcy`'si!ŝW#PїYd7H7/ ֓Fx?Xs¯hW/qyL/"6/ٌVZ_}9Oqgs GY: >) j|ė;{:/U0ffM>$7%Ic fA ~Y^1ΰכ8=jX0rިuf73z %$O] M1b}sxy`"*z}7\Ԓ[eIV륍bDϒ$tBy6@5S墌88Y_.vI*װ=g-'xePHoBZ?3FPjzYTM3Y3Tr o/YpGEݱ}U Q$;c%>iO:C 2VV}_W($eIOҘ/η:ӌ/jo HQWӾu]5y;}+ޯOܧj7`S{ƔQB߇}v KZ\8<}JDƃԒ}y*^^xA4@>ЅZmcqh"y~vql|g=<=قH䍵Bb-! \u/C'zsRNW|~K#>>A,˳+`(lz'<;9>#g=K%z*֎Ɍ}ӒjD>~TAULN^} `FOO^|ϒJHΒS[ſX' L OuO<>YWѨ=Lg*\VPBgwieQ&'v9vƟwl?& $E?$9FGD76F_jVEd@='sX[*:Vywg|/j*cHUoC8L;qpF;o AMX%_{Fv 'v^QUYa5 c^Uܱ[0uO]-{ɍ3li;CG5=.`l5v,dbzmM%[X%Sޓa;hFh^:CHuxr@>A{=xH'P.,V= O5*8G XvIߋQvɸ߲6gcsWLV9G3F? J*ZRB2'X9D dMxP5Xx\#VȝVNqΥǻļr6 eapW+m|"-JӢ92 T௰ pp >x5P60@w$iщ/x3_@26}i@gM}z61x $C@U!9ޔCVr-P֣VX{Fuc2aP*g * chõvYux[gij1N&-Pa B~c=MhQ{GN' ryi^r`Lh IDATv_N>1Gc'lJ\JG;fzv'gt\nŇD߹L_]q <_,._#ECD+bg Gڲ|APGx=F9G5]Yc>g/򂤀]H@.3>$#zO931<ZS 5{:GJMAS8K^Ɔ`rY05@4_s̟3Eo1_h flxKn]NX]3dA9z6l֙eҖxR\czåkQfG*A0a)jplkrY8 .nk:E&Gts܊L+=|iǍV"I uJ mUE3.?w TGnAVrum{|275}}ӗ )*.&j~w5<'V8]\V}MN|s1-ϚZarܒ>'vɻ }$,]$dt$Xn8dOt@n G?CyraܭXY {Ti$Bʬ\)4<~] L>Zꕽq'6aتlP{j\/.<`ϐLTs"Υ\ހcI-JEHwyF5{73.k8eT(9XUl7G<6|BA ؓT[Z.0 R29l4͸WkJrTk*O <a1`NcOOVHCMZ:*ܣ}$@ )rOh"bz5=8M&3fgs31 +Mr 8VBX= 4jmutY.tSI>RgJ@s.4mϓWW'd58dUH/T%L 7_ &vMc S}^WndE'ZpJkCz>\zE|?|h~^o&͎C;QusLWKlw U*zϤYlޗ63,Sac"46ah~hA.Î`_2g{]+`YI`>?r,TfT<||@3uZKN>mK79Z~MOnk5a#HYLP'%HW@-b?@}9iס:[jO"td!T>̮+&߇Jx+ȧ 61D}y{]~[dVŞ&?Z]8( ~'iڧ>x#7'`{+->NZۑ߳׽VC Ř3Ni:ܓ{*LxBNy-! Z hM6fYK=zwtЍЎTDiŚo8Qbd|ȋuRUx)-Gω-r(&K-vG8iIi}~|Jf i2US~]&o91:7h9"۪j5'v?)j܊a0ު2؞bs#G<~G%*EJJ.rb fvvd>-;Ý#lpzZ>P]- |ߕFȷЋV8m:IgU\alY'Vq,b 9ff'-M~$JVahmvdl[vdHndHxL5Umx [ZFo{ڳp]b0Ab2.'25R t$bUk@k9:z'c$kmH!x*=^˚2VF% `*6a.ӧpFGN J/V8'ܵY74 U+V8%փ>ջpx AX%09c]G²z VWQt<RdT%e|=8&UqglDSO}.2v FN?NdB,yDwa=iڙ%ʥ *$O[E5|ǎ3ΩUpyجu&ɸ%HFJFM_3J=u?LER\$f"OpJy_0 ^,`v\Jsiꩴz#ކ/!dQ#|}‹Ӗ~{}]7Bc5#ݣ"L*sWȀz)Zm06wG }'f2eH, ˱j Ɛ]rz2$Rȟx]UaUr 9ncHĘJk6\\L wxQ=o} OnY+l#R_|TP]?eK\8l^l v|/+Ah 5|zǣ+“][__f~2Dqnd (&^yvUSv1}$M[Cb3F tlQx^v/3 q4EMrBu $7.{8~gTl)1T'mdZC-T[(hfaFfiM&Zf{>j;U^EnOO o^&8Fb'uTš2NFf WoE~eL_uBoxiƵP> &+CzEEeY]K}TwjW7T:FQ#ؕjly<:jY]o2#B}j2J%'/d)cx CZGD9ïAXFwozh'tuxu%Ґ!y$Cb4w_hGH:f4%Sd7pLck\Kxz`,udP>7^oƌ1/0g;Y ~~W!^O-I# Q{t7 V|> ^2 ?mݪf:TmT,*-jLgrT*%=MUXQZ}J+z٘e6{B2Q} H.eR)0>jK~A?Bkp6ik#~gi8])Y0 TQvQONTiCҐbS 'W"'H҅sd tZX{ G8tH#Wu*]X$G~ u@{@xI$/h쥪ci=hi„+³Ͷsø5[ g͘!< wK Έa֪ZW6Y<+s", Yu,|YY[qӻػ<4Lڏm2ʳ`2IK{=MR9XVUU?;֩ #5H;{A)r4dH"cl~,3;ֶWuX}l]t'we}C^ykjѮ 9n$Zb<ǣ/Es 79[E>{g*Պ$7YF3$]@2ʐFŪѼ)wY 9;`wq8aH<+&‹߉|נcev'ס3Y֑6hk28Y K~e 2cwGdNcԶ)}'#_CI/yR2OBH Y7=M*b]̪@5^"942r6,Wsrzz䓌#c<ŃNlutهpjhfňI=GHp8/O;lW/PYo*DuY_ZI_ i/l,R"yx=L$(S|zRM/t{iO⬐ޗ_~-agkzȃDY,y;+Oby1Gn2lx\RciUwZ{"ulZ%TLbXmȯpAd%bo 9i.h_o8I[uqބڵXV=ޜVEB3Bepb%$!?1$ګ뤩ڌYT]U$CIR\od?9HT)lBƨT xķ#a؎d*AH:$NZk2Ypkk8NR0퐹TklJBϑ膏#<"Y9F?5#nEѶuu$+ Ey]n:kr&SBpRDzOCd (JʧvVW#E$?tj[U}$Pxl#DZMk'$r/ 6xQ TWp$u0vè jtc}ᖤ I/ϗ&\{=~aDi}hd:䟴h֞&_٭VX~/*o|)kn%!;fI *crg 3 @  :2Ve+N XӬ=MрmWp[u}d(F[$wTz:M}.>"#x7X}/ SBJŞ#,#AmOk^zj֣xEtF*QTa(dM뼽ι%lOnz)O46/jI:]ke7v8jk* U7EFm<<8`M)jI^ ArAcZ6PFՌ4:G+85/)M/JHN|>^slĮLʿ\Bjª,H^@VfCYxV3+ӐpeSj47(92R܏1d]ĉ=!bCq*:i 4b4\IDzQkC7\">#}#b UYmHi۪X,]+])7oY^_$?TQ1JV7ZEBiS&Tf>>kLfbxV'C9:t+3z!`G"EvQ19 O"1+SlrN< DQ$8E]Q  ?9[͐4T,/P=h:G:Nk%֑bkJP"4-"ױ,6mqܮ=ݗ܈jH}5QOq| gfXLsH+ [ P*#-\Z[ggGK?nCĭOu]la{wk=VƓ:[ޢ~"YvN/h}]6.dlϱhoZ!Oʋxyc}ڬ6ٽ K+~ZW@z`Nk }-=&Ő@+zLY&Yps5ۭ:wp'`ldFtQ ;窘:DG+f!H;C-chĘhpKndg 3jw4Yյ{Б}_%HgGeYNbYcrz`u@…hk ]kLBdMX[v';i|P&&C$ t1arD~YZpk7Zl8G:1؜DߊQ; 4yisLS{a=RҴ9&@AJz$`9Cr_`x]RU&i:=.cQ,CY,<޳OZj苜 Hnqg)cBf%ji/6[6fv(-xD:0&}rr&k=gC:,549HwKi1?%[QZY&W(gϬY\`H.0Pmz'c\BF'H 7aiTe1 ŀ'GdGT+c, _qpJՔ}(jt; cwdOpG)WE{w5qRETŹnWTVt;H~ TINe+nOX=EdֆPi4_P5Ա^ CD|t޸toYf 2/A~OAa)sVPݴj]=]3oѷo uQ^*՚t6ej)7hJn՜T#w#jP5Ge%k9Ǻ2B-Oev(̛A;Jfj &IQP^3d)qJ ñ>u[jÕ>JՑnԟ!WM4n s&x %r*/ ެ%]P&%1;mP@/)͂zXv2-cҷ<)35g4A+l hj0]c+X+*sKFN=2`l/>5*(*kωPVpW,"/YArNBg;s)αxBSS"xTlUQ}r'`qYaetX/Cz9jfͮvX+t-syޫ~'Iu]+vB|oSz^6rz.ǂ Drx(ڇT : 27a|V򄿳 MDu܃lR0 GS IMd'Y #Zx[ak`šꊅ| =hi[ڕk7,QQ#BZ@ª@mcUem~&G]"S2 .*b<3Pe\ ? 1YM? ~O2x*.2{̿dqrFbԘTñkVu*@u4D":舫chTd +Ⅸ\*' 5fIbZ\ Z{n߰[p{H:=QHU0?eoeDm'O?n[C댊 x{z Y'n;FY +dCZJz.r OȪܡ]@3yքHcYWdrb9ź%ւRrRLEq~8pM:@+NzN"iS'?(<\Qw7J|:jF_HF夎#A !.`8kcgY`6]m=NA?6}P+Wq*ʋ;ކfZ2:d]6xcQtNt nɺ2#$9ؗ{:Ĕ߬ց '01)JW까^qO9 r_? \TC&S9ǔ># C@%C 82HUN}aG?]Aœ1c#ZXX)lòVH`S$g0ɍ*A)X"і>ZrZ / C5 41uvٮƻN?Մ<8'8 GfU =\8eDviyL('?-;=paeC:^Ld[D/@A̒ M.as!^4Set)>S 0w ?dǃ=\,f=b-F\ A H$+"( */Qi<\)P\$24-:Bv '|> eGN.cPExEU,@gZނxqW\B<փ|./EtSr,lkϕɛD@bF'prp%`kmC}d ^eJUOчL_!uA$فsp^PH+b k~ߖa(gB]]{,dZs2|!UhWy$,"H< 7Ac aK@SHTAx a<EcKpRN&,ts:w=0 *l'ow(!'鬏 u`͆%el"!Fڤ2HZ 3P [9&!e0TX~OLT&dܗcìbg2(ŋ}"Z>/Ǡ?& x\&@o "[Lc7>K]4S!_)ٗLq3na&֢p'f5( r5QTP1mO6~G"ߟ~-'?\E,4Ǹ."MVU$Og@3uqC] T#a ~Zp2X aDYϬXxRd?L[4mWm %U$ -wHD|S,[TakZ FZ;M9"Eb.N)!>|S_%U=X/ehx h3IE<48 n¬ 8kI~\O6q`YC{ (&}qC&REI|%N_-ETEˑ  `Ő?^Oie?5gb Sv2,I7p$l\g'T&j4 cq{kߧ/Ox&~? ɓwN.CWĺg=I)P;X<*zh('4Gg˭P?7EоD3YV@Pgv:C'I>x=M#J G\ 0{3KZ;<촔Wj!r |ώkjo ae?"{DV/u]H˶oC|[OWf 1ӊM E=.`7<k򃴾lsp5Az LnV+eF׸NUB7`VŌyh>QUwC3% yp0:Ơ "Tƣh.Yp ӎ-t2 vx)7~ Qg`Zf&~ #M35ARY92x-Kce`/'e6F(pXEOshBru:~17*AA *`=/ x'p(9ڋr~( =6~>d6Z=sLn+\%cuze,TJqPDjzJ9LfPQS4ZK:1.H~Ûh)`Z}cQ-Y_=:, X=?lo`7bBh()aA8ı)C\xR4cYO `~ ?0X:jZ=rLӤn㝕`AɌPL⩜l$%`10^*'VYܿ\采o 5.[rL+o0 7/zI?*=8Y\#H!u<)&ľ.qf%uj>`՚}TA4%pqAj'$6mU~|6%`]E qɁ9Լ %:NR35fgɶ(MY|qFG|}%!ghr yiE}b{چ?GF9Gˇ!(,wQWLE%qjнWQI :AlH +q*ht9B7^ݳ x Y6$`9MzR&zx_qQ)ʧ 7()јpqVržuX\YGӰ5{Bń #}RF(g h. ;ntvؾbfQD+QC\,P[2Bx5w8FܒuP{@ /n@ot FekrC&J:Y/ֳsz9;-)9|X G)C|Nk &'~ ,!.U"Zxa]$ϣu>T\%+H>6fEȑ=7ǰv{fl-lD|.{e.{v"ULo]Uci\Q1^^:>=f'Q覘L!B, Ulb2i|_rQ>b̂1?e30DW=͆K`^V TKf0 "EdqqE`3QPO>r=@H@*˹>׼c@.;"EKD2c8mo_b>^]]ގ*+?rD+$O+͹@AV*qQȄey$yՓp!b ooO*0rVcV+/jaQ9+ɳ?; `nQ}sV5kjT^lxRp k\T{ ꕫrk,\r kzk7Ex մjR[kqL*+jfo9CΔ E/| +#Q9鐛72|(]?->u TF3XBU|fv4.^a3~e12REJIb=H]5*u&7/ĻFDz_!R\Ynx{MlDV/-e#L) ^q?u[Z^ȥ-oPn)$HFkax~mqGv\Rw8zFa3@|`V`j/Q4NtHƆuWU FVD) ^+hAFP4 Q^G5a1Ae2 Uu^_^N|jS(~U"wH(RD0jL3_8tlQs{\r32_VإEb 叀9Jqi(ewK1ͮ6W77)"IыT=A?~݈U*۴Z(*+M*Ea'|zG4:^7_;=4r7f9%AB',z`7Q\ӎr^G~@D0̳~h󄷮/C0"jDP&( tN:eEO/F?t Z6W wIx"jA`(麬GJx;0DC QWYR⅙-iH]}I%3p\[CR_6n O #S ^/ !}P -e|Ί jkӲ@=:P=g8F;?4R|$`"BJ,bjIΠ |((=[)۰͹_VAKn^n؎ZCrUFxzdhZMyъ%WXW[Z5My W8qT?tqF`!jX]yՐաЬ{S.fޠMq`⼫͋ ,>vA#ׇ3ѩNAY؃z~p({bL\_7!tl`CЅ0wЋm۸,B7@g?:Xt.+v<7aIb%LRMd: M" ]Lr?p ;;㠫U؞34@Ք_4UYn$a9,k_JwY=Q65GҞ2T%`ըJ-bwZ1x\`KCvcQ.5q8W)j[Q ?\kcd_:7+1WP; sf0/. 2S\N`y)Nu. BYH$8ÕRl"Xoo.:t6pM IDAT],lI&jyd6&t\b5Nb.Ԓ`{Q'tZޘ_t0^Kkd6hAuD!oJƈLR@rbiG~}E{6(d>&tu,vxRz]r5cޱ?_8cW=W */I?'ۉ7!bSF]:i9ӿy{[^?iSY0OVr^3ՅNdgY>;HRfq<ߍSg F vOfq:mv1i8nND=ђ#A>59d\P͝]_˻R5AЭ"g><mx7} g6(BMWZ{6L1*-KX֞dwl 7QIA6 S  jJe<5ʩԢ[ `=|Zq!}A>#NćrLo#ɪ)]> h !Z!K./igqNIt6!ZA+ssRL@ WX0 ᠗q+^jv'}ϊ/Y{[]5ڍ ]a(vp@4$?Qy 7`j_VeXwsw /dO02e? V@,yeJ[kfʉf^QN ;Y%\;^ɣ10ϝfq6Ϸ*kˉb74Kk;}I獻Q27=wݒmdQ2 MFC ^J*jxj:d d8d !IbEnEI;F ևsc4Hqd3;oew@@W̙UMQwos-R~on >Ҙ7Gwd4(NYQ9grfmB-v,S' hcҢlV. ZdMv@{{<"'1"UqHAOP2xDyW+MCAŔxTFԎz*"#$tO߬Us0Mv6?}~H]clȕ.#;_`:^FEHkGjX]ٱ:!ګD8')$:]”AȈJKɕvH]PkX ZXRփb3뛽*/~S?k}j.9U=l5]DZWTPX#8hd@|W,DZIEKd%VJ>Z*"%jw vG6 eh]+󐼠<npT453ֱ 8)&TFy7Ы=S |93!{HQL u0ɢx- / l#1p,D<ɗc{%OznRq]oSuϹǹq$>8R?SpzWj_5^Hk1?e?S06],.VWU^BZ|ӾVUaz(e#y}Nk*Vhcur˨,.4XbaFoW V::J|ڨwpH=di$f74j_ꏠio$tatXפ1Xj,>Sp@d&U֡cm/k#yFV3Q g"z} W~Am_RĂ@?,Lr:(4Y-3Cށ'K.ޣlD;Rٰ4d)y6D 3_i"b V̧"7BpyB?s0Y]ξ`ǐưܮU)l++)xw |0P((dвrBT :s H > w7‡q BWu\KZ! Nэe+p*73ph2x b{@/cFRj9srNUq)Fv 2꾍(,&vh0tW N ۫Ÿa#u|"((9LE+8Ǒ8p8;Q^R P%ku(Y YI֣j΋N@ z\W Y{68k\_v ʣ \COyuS< 3 Lү<޼jݐ;x>Y4#٥0ŒBHXEg1|<%%rYP>^/Ɇl .[ z?~WoMҌl0ςR'+}";sywų/DJO[}ܴ6u@~LO)Q;kT_rұYT-iYV2^ r̰2 N˛9!W +R/Sq3ןv썘$agZG(9lDҰYNsal5a5Bz}Pxt=.w3.׵BaڛE#cq]xFV:9g6*_53١B$&81?{َ& 3|,nPG_7c^ţQJRL#MSzXW3Rw02络>{#JP=Y2H7R%wHO8 Md}Y R}Q`<2@wy]:ֆ7Sڻ38^ ٨VT rœX'z=:kB,̸|šZ "H 2-SpOx;0ApJ6&'$[hV.uOӥbmhǟIt /8VSa<*PΞ $t\=^*I~)([&{vQd>K x/+Gێ[MZ $}fStE5U=cբ'0-56i.У\|TVZr-rc\)pPG΃@4?ZTv?Qh)Uz/w݄.(Rfjбk"x[M*nU{kn(ދ[jǃ*"{A91L4?>2kLek;)Vg3]d?n]=g +A;]R9ߩ4@<=Q3SI~TBZt]݄P^Dd tUo |-Yp</'s@@lAxs_O|IY[ր a;1VE`*'(/J~-˘>e;@ݍC\tyAk5hra@lpM)NEМTo"ަ*ޗ{+;:, nB[%dE{7vpN]kPrJ"J=]Vw:KH J>xO`4p ^ِG|%_l}3alnf~{s[֦_;f4f_M5zثVRQJa-R +(jZ}vVN&`5ܮAaefm5şe-=bɯ};6՜[y%2 WJk]ƣ&gE+-@{ N @j :p"Ep_l9?bUE+_1;X]^`=gK 7KUe n\+caMNx(B=NXCK˒z1ʄpŅ?ȓ4.O趑{#>/P4{|-=BhДVz^&͇3{ceZu B2Y=Oe%9eUC, "$lX]`qOa! 77Vv&I!)TqM.ν)ojkV2ãW5g\F}n}iFzm®B-XGVPFϡr ;/Q'NQ:7qrlb]ѳnvaxQ PNnN>Pa+d;4VohTZR_+y(m@xO'Ӿ`<<{+meHӽcrdwpwveN'[r`/ dpb>(^XֲV Syc)k-%Ln!q g0Aަq*Z$ V5v r;8 0 '"`WX&4l ɟbS݂v-J/pc х8QgqHU|a V˜4oY# (; Ekiֳ2h$!'5g=5Rz _pyH9"J2 ܳ6ޓisykEVr@B;zk zJ[ƫoNNg@"B2V 4N`Kv;nm o/Jvtf@o 2[j/Ӈ~p# 2:ʒ$ /1( Vƪdke>=χ@ q*9yJjlW#y77 Q~2q"GW5@Ea!u4@oZ!-ɭ҇Շ8|wV.O+1g^ uapӇZ;h9b+\}/s4cr?p)\F1Lޖp|&trDw !QⲚ*RJ=juQe͈ _a8ZJqQU?<.8doy_e&ӱ%L+2pxDH^xʃxq4k 看ĶmqcvcI&lٸi<[ -"[*p_k#['43JTW:[]s$Ll5LWpεzggX(zB ,u=ſ"SG}3/$WLⷝ7g{vaU>sw{:\#y%y%{,e-fLxA6c Ao\ZMW0LŌ'm 4/7xWBn65eѧ-2C?k۪7;Ih!(%ڕ#z8OP+#/2?wW鍓eD sgyLb^SeMzB^`Y[UW8Qg?WJ%zy{&Ukqd4yO5Z^8e nb;ҏ-%=)9Id8p^d<ǫ~d*<M0 D?kP+E/fS6Dݏ1|+}̩.? ndjex݌61bx|NgGyE)Zr՞#"ZPYI.jc]P_2w1s;:Ո(v<CzCi^ XIS7)I'GZcU|Mzxsl}/xӞ` M:<+HFG`y32Gj< |ŽŢ{|'Z N6V%hA}+2 3<$N!Sk& =J8":ċ*"a+HsMZ?uA;Uri׳ɬf:]#yU-vA,B!J|4sNMrVD @C+}u'C25w)Z+Z3]vs5m\:ASH&\iU TkߓwGD__Ll f3:i<{\jj؈k3Pш5KYuԈ?xn kC7Ac+8ߞh 0ZB摋 :\J@SU!}Feuʓz("xv\ RH;2!2*C>t֔6 zc01\$4]]sW`FSD<)ؔrk!g)OMWq7 ]@@9J*j[ WP z›_yVhw$_ i}"l9h$̔8/AY>оOvƓڧۨ3 7k yNFd8fX cIx%+IЗR|m r*CR>c=U͉}y2´H}: {px~pp#ew)Bi˝D{j&StllĻwJUsH8 `$dC₻`k}:Qj_WuSsҌ֤҈#TOg3 YuFbS/fq&T/;꼓񁧡сdo,FZ;C<\U)&&HM<\.k%Z*(j.󪹕L:hy IDATN>6EcY\QDI-+:c\ڱg!F:#+ NbJqglizi-;TwRW{>E|CBXn×v W?gޔ!V#;E.m6gXQx]+!޲gRboeQjX?BȰ:9EcV :g^nb62JȚx-Dw+Y!ͬ]9 h_Xgem>r` gV>Vn{N[z {@eywZٞ10kZ}j%odq_Gj۟)uS]\uZk/T cQ!ź3ȿt $7!M=dĢ\r8+B|-W[䜠}D1/<; L35:vy_} {[䞦_Ėu|0zB?!$T&!ZK &c'cBZT40=huTՌsywd{x/8|'-`pTS?vyr>^8zDZgbӜQ9а*ac6ޞ_ܜ>3+柮CJo<4^%HUUCV a6 n02%d}%[5ˠ/ɲꈉ TT-_;كBsPY, <=̝Uo\O}\R\YRY&즫!+c=7䘦g-W&p OõVfUs=ѿ)q9EU,I"O~da2{1V%p˛53yf= ]$lY+W 씇zz:᝹0p^4ݤ(}l0ԴPb.qSN.B%˨ưP+u^Jɷr6ۭA)&8NYCҼdF/K793V7t,SR;w&NCM O􆮸 jBT(zI-Y- kUބ<`?\ؙKJ."*Eɡ* 2d^ZIjka&Лs ͬe_youT[zK Z4Tq)a- C"]BXU`]笚J_8ؼIkvwIcdY HQ5j-Hm~+AqPտ/#iA*x%~>'iHϹֳŷ8GvoL5i3]i;DGgDRTEJoac>?rP3:y,4sA$Y 1[C"1+UZtu eż-+/d-C}{ !dw2zRwCzzQPwiPa{<Y* o}-Jg"izi+p^y8nfX7 ϩ'g,r)11ސm"=ME͊y1oSDkI#3b1  (s&bWܮ Z)Z Rtm˙o۹ۄ 'g7  s*j FAvEW- =2@WM-JU^#4ޓC}n- : _0%Zَ`Yk3i2o:-e3io ||nkd&lWjJE6]>s|3*;|e`%ٔŲ: q-Ssj̑Ö́3&_ߡP 5X̓ҞϘp5m (zp\qrrxK/6y5X$o56.(b┰íI+c1K/ӊt=2^,]c#Z5 ,ޚ`k Dօl `h݆#1ĽW:(kRee[SlۜDˋX+B y0C1N=+]N`>^nXx,2ڀ>ǫKPRLJs '2F+KY ˽ 9W69i7vȊ1\g'9/qS,J}(0<|v2Lc4 ?[^ w1RB0-, l@[yٱ\Dui7pi$6\# :jC'Y]3#hʏQ׌lvTU<߰*N:u"79 ̦3NDg-u]'tVs]d3 -3{ىNP!YowtcqO3=!F%GI(Gn&"N}l +@|Y>d9m\gd:QPgamg!"4bc~Cܮ|j*j&%.F<vL aLJ=mH9'u))/fR9l&㲖W 67LrXY Nǻh!w*Z6"Lz2KX+Pi;&aSM6\F\I )ubN2h`QV\D={T+)aj9W7W?B͓`[0^Xv#Ye0Fɋ,q8WkC~72wE9R*&BW2*UCf(YSDNjs0h"'?,bN>"$E4;/ dq&ڧ&߈0VdN p^b9e%2Bu{3"\ maV_岷򊧶#ygR5B4ZHNbZJx,R4/S'nRfVQJ|Wi 3h"5xџTV4ROՐZʢTa 4(I%7\&UHO}7VE!+ŚiB:MIj9"5zJxᆰFI1^cA+eA*d~^sUW$7ꓓ6hpB@i򄆰uI}ʎ=Ѭ:5/CW14?./k zY6Z3b}TTw!둽:-6Ɗ)Ӎ!|CO}6SXȨfitU,o`N ǩv]E9_ nЖ~N:O ig_3d5RSU},&"K m R'gԲ׋) S[<j73VGXG`)%!l橛,&$]cS$ .t\ +Y.qڧ2+2Vf-'A&GF#4U WuⰓ*=µyݞ\U{YU10JFsR.܋59 a[ca?qeŜ07&mPʹt%fגH9eh́Vl1$ev¤`<Ʈ+?#R;̞BZSKxry9*WupZ UNG{x;ӆM0:Z>_@3i(n>;X$}A\8Hg7\|d%z:xqabG*UH:ln=tL%dcP{ƦApV?{ί?dyIwd&S^ f&O+ΟSi>ZG) 'FxO c嘪څM4Fm>(/6kq5j=4SLnumKVMIolK/TPOxT hgA[;N[.e1]sqy sLN 83?e˫yE,2#\dfև!{U'T!do:ǚbeArև0rk50څ;Ǎ#hK +C9Ν~Tyg&,iu$󅢐6t??iP@tJ3 .M'vьRUI/k-VP[*ƖVxo[=z5oAf)g 4U9Y;y$mZXVU寎@\!%wjyM_J-LfW||րy&?@/'c&^V9Tt5K^'pNDc/ OQp!ki "y+KdAMR6os}RFe\÷?8vS Y4ppAv!qx5d]ȒTv\bqPbȣ.ʬo;vYw[ːbh19}^Xs1XHZ֑E[~1j3~uh>zƒ9Q+;Y.l\c9yJ῰KM#ȼrLh_y"YNJ_TŘ屿 v u[VC3^wέ Ej+ҀZ~m4['A$7BVU5Fh,-3{zӨ[`lWY&b4k0hb6zjI61{EZ|8OW̩LV b(MXi>xa"FOqI-&wQP%wDuoPήz]q0֑[r' d&E ״^MjRd}KpuڔxWĮ'x:a F~eM" *};~}yLu,/PuZUVՒ%E#zbY v5QYX߫ūJZA멞=\Cv KD%cyu>mt7fsy (>t̐pՍן!p4bX+!QUjrO/hf_75p)z_UoccFfZH(%O)u=X֞O(/jwFlCt̵hӷV)8:xa6ehSך[,mF]_dT%iuY:ųvAta~_#(8NgO f NжlʤKNJ4>93QF-^ ?OS{$En(/Z wt$StgX~׭"Pc)6񛪕A57CD];UfUK5ϵPƮw2ZoE=RM5^TsUPdQa9ΖAgAI!uSw4 1ze62ҟ, H^88Oe OWbLͨ3ѹڢ䚌lyHjuK9B UNcNhmlve%2˱^]@N ŵÛC⧃WX鉇V#*m$3qr ̷%[,(E`k%עqk=Y-ŕ~SUKWCZjohd b::e_^P_޲PZqX}"dAʑDg7bzj,Y޿z֞"BX C%Re>tvHZBeC/o-@s $z>~ Y$8SӰ܅wE5P#T57 ]EMW-2®pbm3Ϙŵ=bX$bg"cB;9"NZ?4|am_lY2ZLUԊПmDVf--}?ȎnېpY]q$Ǵ4 Sd7KIENDB`libvips-8.15.1/test/test-suite/images/sample.tif000066400000000000000000027367661454007373500216400ustar00rootroot00000000000000II*@ :sǡsn~iUoțq3pnq:4qpFqs'mvxޤtWĞphqčwMuūrg梼wj~~NڞuPp o躊8wu˧5mr_}ɴ |(ȗuksco4^n閆mpCk4r%y=G7rh5qbŜAwo&nwzFqVmŵqT>tbiZSg6p,}xɃ zswFň@y}zm|Ȗy(tv TwĄׁ̌ EUztԩpnFsȈuܟu~ {4#zgsȽQpzl-"uʯvXwvyq@,m.m³o$ ^iR|Wgpjfi!0`ϲgjżv+:v1xs[z➋qp o粆0j{h9f!>ujuʗty vRr6\$>_9mjIpq攂u{yߥkɬ¶tül^j|nBr4Khا\~Eg@fqUoXl@knxhˬcMredɂ7bAn1m{jڨnxf:m8윧pMRz~-vkm #n0q/b jŬllK ta|{ʷsƲVoYmFk?i׮Fjh rf'd_d$x.cgx {Uݨjuegbp"bf7l}oSqr%o KJl/uS:~Pq-eKkGlj cLtm apKȃsdLABtS@w# n9yS|Kulj Are֞.u u߹xw1yʶ1q"!oq3Ȋu֡srgj:mÎsuŎ v3w)w)74xȩvc,~S_{P0s8јtػID||wlJrȿhz?#}9sy~y |TxQ s¼r@ @vYxvV*sFȘryxK̜u~6RTH̅ۨ|Rs֕jFnrp| sFk%nrƧoĐo},o%̓ki滉:l}puHqׂ3ϔMSbkwtfӛyqV[t#mيdUk˖nqkѽ4lp<ápxq0Ì-v!w[ʁPw sƾfo6`ou?䡠plqֈ\s|U]e $ oPm材kؾ\'lup+ftyoDvl}ҁ|oI&`Җh`ϞAlt}|/ SwXwfvʙter\32lA:o:7%tŗ r£>{_KzYǥ#{8zwGl4Û.k-rŖ_yVbOs9woNow5ykvDZvruQo iijmšp qlKx.Ҩ|#'z˙/v|dnԓnlK̙vȚq-qlΜ q vr{Bfjs0qhѝYsw{mo]h"v~:iajg;q;|:w(z}lðr&n ؜·w{}ٟ~mmsCЅ7JzoԋO[%yUoj9TyMϦ|]ħx뾀Gz4}үfuTxhzp׻mlll*%qɘsƝHp|Mp5q}Mo5Nl_rYDpj PiJחqx4f{|ǼJu{{y&Uuižj~\zt[ʮq?rU{ҐVqmƶ{bô΅ƮTDYr̮_Zӈ!]d٥jbPZ)eLps|vQ?}{遘~~U3hx˜p仃n޴oԳŔ(pQnR$pz(l9FzϚ'r{k_ȇvaޢ_kCybï*={1)(,{]jeljfm k>EoݗNndg_՚f͜nFsvm[{,} wſ5u22p%,m4~g:6mv!i{%vx‘k lrqK8okMkhlغxm'jkb9 lRdc!Kaùǘ m)ȱx~~ϞT~lc+djjH} q |`<\fmkr/$tbVr̰aS{^Ց]yv?o6xdƠu(ɲx՟tfmddkp⢢~gr{pd'gȫhط3purPLmZ`nRxrː_o"Jf) cWlS_t{-lˤŏ(q+oy!i򺢛n&slѶΙVnQg w]vjlHŧ5ʝ4oUm;tnW}Vlw[4npzmilּ!Ϛwԗ%aff.7rʮ?ʥw&ȍtLSoiŐdb'^CmmaomKi,kɤӏ|p?kg#y j~&w_5gɚ-{v\d|la}RF"Zjiku9i2{en{8\ tH~e@u=~Rf}Wp. l<]aq`y2j≈oQ7g~LχiXK!tQu9nWoqL0*ie•iartɢHfrnhezPΚ~QVlQOkWpKxo!j)9djq ێmocƠjP/rwT]t(蒧hC_A^ pc[kͤ1dXm:Dn5nhe'usTٟw­lؤ'{΢8wnvg'ioqr)j{ʜ[krnvlō[LOap ar}ӛv;ozVnVJ/gRѣ+z5“YMtPWoJIKqH)ghl9p㢱iK@`nmhw?PnM׎gZY/^/R b\h .dDVhvFqgNz4%Ķᠭw[ЖdsYc(hh%j21gqiȼ,shr 5™zTcڣkb١Adځf{d£hiYvɦPv+o|d=eelncomp{Fl#gܽc`l:ssÏuĹ?ul^m mcLo'q9ꕠm/mJVzs0A9b֪f ?_oڝQrMm/k1|gH,si^ijِj:6dޢJZk]u-8dg8`8gspߤrި!+zl?owQkڹAYzotQDhRdd7lc[gUxzM`bڗgsցo17/LuaTakiէ ;oXQ3kCwM\hot^#b}^1|e!j~vtlqܺHtܱ8m)svnd b]^-d%dȻ: h%l wFuÒ>\|ZTFe~gH5g1fYshsh5vUk0yq_0a墰FkG^eԤ`cMi7lenTo}Kiɢ܆lb@Y4_cm>OwΡNt6fq*,p* k8=sȼxwiCtIpi h>+hn4q?ݙjE6fadspܐnУՁ8_]DzWeaWi"d{7fi{jd"g5i:y!iգ\jTkdlztsF`Ţg\xaT~&]i b骳zδ{GsuŵhF⽓{jWmL}6MXiCݏxwZcKloǝb~A&ʮyTyIy]V#txl-bΪggH,pc"spfoh#ݗOm2*rLk/ iͺ土mH.tðHrR i6ρ^~\(ORdъ^nȖw\Kwdj}f[XczW_1\)!d閊m𿸝qä*|ɼCOmkçoM%rc]xX\X{_uU=j}Z%BphVU[B\\mXmeꤊ`| ShqkԱl|r6hgcG_jvhds0hpoΞtyjӫy6kޣfzOSlE>uM^jS}[ YurKo֭TwŒ3uqar._q^ZpW bH j,Ќinmjo]i^g<u |1RlݨHiò0wsK6/vfsUnmHn.~jcC9 jfT`Z\K_p +wڽ6~}jNJWj]>{a|ejp|@qzuHHig雑gW[je˝~T[f؂_`q].xUӧ~h]tHO]Z.d ם}y2+nnxVϚ:wHW_ߗrf)+n0$bMxjЙj!?gnmiuļÀJ }x"ǝٛxN[q\Qhecj5qțqdPڑf•[mY Cm i>EDd*V_ı8\X{r"`{萼h5"n#ΓR{rs¾ÜzῧM\*ޑlގjФKlωCi7c]No)yCzv:.u*bUvb˭򥼄۽s%5n"#ik= {sÓbr>ng:;b<֔lǬWkɤ)fLe{lvjuirs?m ĵvp,v*o˱Ε6ll `y};T'|^/n1Ðq1Nh`a3Tc{,VqzU n sQn&){$ ҈N|v"kOy~8U؄mPIvRzWzlǼ|Xǧ~եw奟z]žez?2{0l iznr'uqĔkճj޸pŔ"jqemipCl 7haI[|FŚ~+U*gh)܏KnMs&Zjզv`kTbjz_Y7f\9jE\syfos]q_tyC~_~qDnRr'+z-i3À]_{\uNv}N)=`\Irw s8^Fv0F'Ri˗`iɦnbe}km}pr(rdp͵Bn8l_؈bj dY[kjMkѵp~n-mcijѾixўtL֔l]܏ZrWsq|a<{hUimtҡxlru2)wusNRv|Ƙs~ p)߄igǑ:fڛ6i`,keјl21rI<[pxaCeݳp4{<7p|FncʡyקM{#Ξ'q]_xQ>wKtrw[DR+tvGj9Tm7p֋ce s=3|Dyū{&Yj}ODpSeb$7f1pv嗢rn·YqqlĠzGƗjw5dNL#n r젆vřxżewmOzK_ykQQonͣ2kqUxuƘCtͱkqHz]U{)sҦzm8~Ava i ~noEo Go}ْ&m׷07uj{NJ~b "{yw_mhpxguagZ bb~/b̚~bUpX5s즐wĄNrv/mqqDm{m l>gK]e|qpu&+=xKǒ{s]ޚwThdhIMxqo;aU̇0[k]m2ԤT}Bݶ%tZ b ɂfkltÏh{@檃mj~Bo4 փDwz:Bysqb#g4hfK;j]Mj@g@JgSj{?q%vo1k²ǖ i@e]fg&PeioDzgg^{# cԘqQl\_@ff9 j/l@$q`צrvvyNHw[ʁPwO"(a sYk0j@lZLvĴ ve~mǼٙma&sey2jz^qRjy1ĕ/z svnDBrힻuSp9 m̵ޕ:kLkeFcޝ|eAPsSz+sskƓejÉ#\A}NAR$alƚkeU(qrG:qsrP܊Ce[^׋wYbY׮,qƝ>v7w-!{ -uLhqqnܾgt}aEwa rɿ-Nrqi-ol|?l2ogqOb*!jn@Ekk6g!SpTOf|qV(N$X󢪐hQՏXh>k`mb{b4NyHbR6gr'moΰlPjh7nZqocXx!rÚna[ŘkoWq\lwcjՓn}kӴRkXj}D| avěyZͫGC){ 9&s2dKhG7qlkȩFnֻx>T|Twةoj]gk:_f:olԗ&s o; cp(duͪtuǬxtNmڧmkmn#tOo$qh0up¾tTqxt0tfqV\v_}iq_v.|#+sO7_~ZއhjEtqҩ*moxkSJs}Ƿ^T{|s}iޟKe.uccc pz|F"{{~D}'ǐUy+“w6aur֗qn(w`^ ΏYj)giml&l֜@oUpjni0hCh& jƘAf%&h9kAnl_wcF|:E^~an\j*f[ϑlK7qڤuPu@x w/qͣHr7rW4.qejҚrhYh&kyΛutTvZ] q%!sAuLk[&ajFh` ly%~ltl6lYŇl2Ŧn㿝lɗkú٘kimڪq3pfډwV|}YϏ`s٭Gh`ldtf`˟Mbd!MQr˷r8wͱw̟HvMgg]N6ZzhN}l2SgwҜl7 gmtwrƽl@QZ򨬍^Ln`ᝧr7o2gaj.lhi;aalGk4tkŠmmۙ1gg^U~Le*ymF ]ś"2ae3c_vM{XvnW%zpaPferɍ6hӨڋd}d*b{疕ha˛o;%jNcd6]pR(sHsv=W}bj0h+p۸˝e{ûǠ}U^O8vEH8\7h@]^ְo \mʲ֕HqQ{q.R6fR/M]dxoT }bmiCvRaw[X2y%GwZk0"get}aXwL\^f)a|U}x{CL3WVxa{~tq{3ty 2\ډl١ uHVV$#j=[Kf)spkzr*soHj~k}h3Xh6LoἿ4wŠwrN{~!Bz {qPa)Ä0_ޡpuzk-}zcz#pý{ѬT}Yp#HLnRϑ%l2bQDc))dihԕmm!SOtp&k٭Gh-[fSBiA`d|gapohGeҟaZ݆YWi]r"+t\hx5|(gzz1uop✸t>KohZ(YГ&rri s|uƀ#r rYۛ`npjBg+4ili plm*k?-d漇_١s=h:gѥr o4Gn]ijz5oYx#ƣjvesքj'wU3_q~6x1Rb5_tJjS `ſv|mtro4orź1y@i0tO`97bsoÍpqֹjn6oUuлr)f3%eਬvbGgk^c;l(Vp,]i8DFhNhigP‘g E`_vlhnypM=ndhEh)EeXq_QwDNր]Mm trm7k(UkM4kaځaI7ggά+epgXcھ›Mm7 Qp1ćpzl2Br]]x˜Qyjؙo|6ljސm;DnquFma^ÌTSo^lnL7"^:zgТpqg(tot&ænpgxhTɨpUofmȥdTheqJoٟBv/zl(oԤa.`i%-fh|АikkoLK|Ɓ#vw)eX1da죞djgNX*iA oº tǭJx-ydwM; j2k]g_shp:f`ўZ٫osVqȬZtEIo,Ȯq9W|m較+j՘]g8`GioƔ*ilRzk4c*Θ]nwj2et"o5lhþo"yvmҬߑ0iحlRיpglmFfr>f|ɭvMff0a‚dãiԚDkԚkSjԽ]hӾÝkǟqbq?oۏf_fE^_|(oabuYpf.mˆnU7pČj࿙mh۽jkӿnA6lŤzlUyp{sWtGooGr@֣vkxũ(zǁ~zHcuR~l̘a櫂.]ewh`Ctwy{~^8j Vzbf~Yp4d>jGqc=r(ܞvg+א_ZlA_Op(ϗ(h^(3gіgumB_nqA)n% nIĞ q'o30`ZDY wL`kSqsZ(h?דe\jjbkx.qn2)e0h?b1pıxtrnέ=ikbebc|pb棗eoWf-OjJmQxuK7sqLW.hNh-)jʘg9DhvggVdp!zwpsIlajStЀtY+(k+Mss l|^jkƱgQSh29j-xb6΀O^Khcы aー[!Ubqlh}rh1]z]杪jx X|-4XmKlijlnB e¬r,Ȼ(xyuep,iHűq̥Z|v8Ndżmeƒst n Giّg|lnhF朂{Pmqeܗenm浦_wlgaҊb'dܑlӠlaeѠc-\`/~RaZewok=dN'Ta.kOÙqǷt0u󪉐k5у gӚgAb-g]3~\(gftԺolgm0fp~^$΁_$lJf=c9Ջ\]2eOgoҘrhk*+(p*t>©w[l*dۥcfh)>n޹ޜmhdӤŊ^˗|}afmRebw]/!jngdvo0Epwg{k(~l]Ge醓[JweNsıfx}Cѕ,t#p쪸+v&mmB⊻j 'q/m?ngc~ ecߗkk;fxr;`{U\4(k!nTf$o+vs%uvuzJSƱxYlydo-wfB[pH^pK[_g%gq}(qyv"w[ȟr.ƙf Bc i7r lޛAlK)kҾ~Ti2h׽Pjm0{roCmqlf,)g\-،^Ҙepۿt"¯.s,}p=fr¹xƳ"y]j}i@3tkɈp`fZm#v{GwouQwMN{(Kxgftu¥Fu]imo3fᖏ^?j a1xxw v?v ѡixjn9Cd {b_u_#fsd^gPaMnKGa)s]y j_f^Yp޶ߗn询bڭ_2a.hubo7l{q)Ҟp`$tŽoxWp9aa\~|`qu\^僦lxzlHIn?Rg jorZi ɐ&gZxgHjwF|pusUtlkhwiƝ`xxQ\۪:j/ZmhÝlSŘuAGzHxftxhДxkjF3rlhi?͗mѼ-Lwë}~ xPוmlCh @AkΠ{ayWǍk#iwt'cWuwYjw^:6gf kd젉i2vi'GJjs$m~mEwdsxMXp_gr̞uw:l𧖋\ L`նr2xox'yǝu߿2lvwNuXtiqQp޹7x)ʒoksgi|yk† l䝫pR0mdk˓;i苎c"bHjָl"q&hd+kʛqL%`rsrĻoonĞ+p ju};lꨅGe)Mmnҙu({qn5ifthš`kRkEo™ nƛ$kkjffBi=љe\[o[|i&%ZlZmgkͻroFבkQkVGr};I w$u+m! rZhk` ^Y&eұsAyΞx7òtƚ{y99vnߝlrcj^F4WA k>zysͦtDq3oP‘glQgۏwe4wNjwgĚf{^YM،*ifkt0ȝzƘylui8Ɲeorrj[or&YȐcQoPnYmuo根t#x-f3\œ^Yޔ-c!t\gISuJ_zC)oȦmkifj6q>dctfW$u߳wnШr8F4jעk'}VRu5HgA6rv`'b׮bTsN0S'pu~3JrTi9dhhĕlH7t|.ltboѢd ]QtCdovĈ]7m6ŤHr jy2i"nɛncl ueh_rF{塢xpߔ$ke=\ۂZ]{wɼL>wMlm`p%Tw_M邓hm\Y4yfi5u=s>f)lШwMpQHs}C}]~ŷ!Uɼ?碜u~Kwp)-vmRwץ}Xs-i0KlvE{ vmH'dbۦh>q¨NmYr~obKZchNp=vrlһnսv؛u?+lo.<{Gs9}xux直pnojq xK}>r䰘 eŴkvӛUs\ sTIoög>hگjk9lΔhiՔj_&m/$tcviv)w,p)oΗ)vמay½0_o$푉fԚP\`R{^җЃh䗒mnKuferXڌ|oKwzTSh" moK/sưair* eNߖo51qSmRzoӪ 9j]a8)Egn)yoȠ؊m씃x ٗss1p}<c!aRvWþ'Cv`c(BhjmDp{ŪMѡ;±{zsxCj(soaKkNDo``uBhrCvHpdmjWc-gRmƛm/rzruFk}j{/mci4ybyfkKls]y/u nlYqmuWtLa:qVCj@pXx6Ü sj1fh kEl~r­rꚷqÊmԙg"*hsLhɺXcβY{NzR8V[e6krn󴋗m.mf5d-lOѧ Ʋ£Jp$akƥsƿsq:ikɠcb՞pbܒntY5ty sؤ%zPUzYåx:sK{hdq[mƌWPlC?yo3x(wؤFz s &kMXoxZzfm{n󩶎e,3s+gz"`wilĖj~pJ lݷēaMq_]0gEra̹pwymÚkοnqh^iPϖy@N^Hzb|itd|y`Eau9uQۡp/onm/sq_\`[sau/{h'eǤdcbɈarOehCߔG\[‡slĔHxXu]'iBs|l>k$㩘 9nt \NeAّtfn TkAly{AmhMo񟣆dΉ cZVv̭i%4XS jퟵnm^sabRv?s~ؐse ei^Н~o}Ox^n q*Fx"଍ʞw}\a™LWmK+wD^ҜtokعQjYoӶ(gd㺃 kK9lxtʮ;~t_ǚ͂~ wƝxR}诺wS x{UvРrͿ2Nj'1pĜ7{2q"ro/ c&d=ΏnȐPmQ@vmzqelXjuœzompo]%wyisJޡvOsn@#t|p:lLq[Js$ѕ j-?k0(nu-fn޸Qj*jĸWpPqk}m2s-t;t꿴[tcr oyu3tޜn"ڒi'db*mÐrsjmhz_e{;Zޕޅ>Z0_p޴DuƱ7\vts٫ehaNlzw quhϬ⏇_,o][ĈB^*Ґj=vL%pzWe7$z,͐`Ȕex3hlʪѓxr̴ǖse HbiߞȈ f>]aқdzɵnȯaQpx;_rcobh24hhlo̡/gac]~i &xpH-oNʞTvѩ򯳋)u̐Tc%_Ȇ`nI\z`DSy, zj\喌cc-kh/啛bgνmiܢ|o{5I9Svݣ΄|`xCshrlsu3x&t}DuN`mZ*\[|rY—KtA[rYD{ePy[g4|u_pIxO'W{a4_g,aUzaTyW_pRƐoWRjzSb)a3w:Gz_Ʋw,FTXߌsh eT.osy*rP]e mHM݁w]Þ~aǞ eڳvps2t>gwΨyFt{~UΜ}Flpj `oV:5pz7<z陀h#in'yȹ@isƱfZ :qFMy]4" c{EJjrnwmp޻jV7p}mm~çya˽7~+K{+x*­v|trŐRhuwdupU.u{9{nnÁOlcbۛVv+6~%甄l5Lc~fVkАi"5i)"x';qbiw-{h˽r%=qưAp%rvgmeבkkȞlŋQnknJМ kok=l nVo䏨nWm` nؤ{jkRb8d>iBDkEmanɭ*ohpFzqz yt;Fm'_g͗_ aHĕc#s_8wWoA-?d'فS_] xN$k=G|e j̓kclBd6~~e0zWbTdzCeբmG-n󺭟vpПp˸Hexq!o)hꎏ^Α^ _bLpqm-ۛoArnvßHxGxE¥-輆=`Rô@m1ޚ\g[`lbաpȫujs>đ9ƪ>#ߞBv뷫cܷ/m"}}.;طmxӖjFNixc{;<_DN``He^84`(2}"Pejwmuy%)t[wcwrCk5lk$hS,qk!u—q޶=pܙXnṻ|zzkaG'dΏ+mimhqg¤tqrhƟo@֝mP֚ m6spmޡ׊Thji?izi&sſ|up?mWɛieL9k _qȒw9oׄ>ii΍h09k(#Bl NlGhelӪ8Wi=Wd%k}s|W}+_l##kڸϘlEhgshql[v2qxĽ|+|ؿt({m%nc`JmŌpѧ9h s tHCς4ƖmQuw;S]fctBmЛ$n6u$̳v;lkNoTsyc{IEbWBzaCHnKIwa *v`h|rzT^qNٖvY+@xX[7LqHLZovIЖjrQYqT{O|cښOpߖxloP?uL8\~lsl%byg`VqyJ~X͔zbqieYc!gUhxؤyyǦ }qn|^'x@bc5_Ne׊lϥ^m?hm`[jјo]d z_VmLJ|d0KPmVP@eˢNe`!b}:cy_vhaJoܤߌ%pᬨiGl3vQ y`f飓]1sXYKY _qfoʿIqrn>Ɓ sݤ-unuW v&;}tۏҡ&.riEb\h plu[{%qzZzݼ0Ѻr DizvjMy[p1hcT^+feiTzi8hN2W#{OCc&wJxrnnmmJiۼMh8gjiz{cW^`gΏkԱGilXviqhs8Wnׇ c_Y8ctg×qܾݙrZrpCݝ+sNq4n,m,ljd#q1;pсf\DSj`uroŠ6liejp ymàb|_ӛhYoӵԘ~qޜnǾPQmŸ[lđj%eU} j Úo΋k;J f3_t]Ut[)tgXۚ냒gsrw\chkC% r0Nf򞭁\ȀdkOeV!JXϰm:UtY㒺yzifkԧ]lj]gZh5/f<[pvUfe&l˙Rpon@*j8mTMe+bDJj[[ao!o/| w2PjChʤ}pV6"j,|R@zDZZqdǹuM}zoјsй>*u†?x ~ 9u m#j_i]ct.;rwا,].'Ay+;wfzvz,fsUm{vxz̠}V}yTfXm_sbjN͓j{dM\co2i6s3_|{EPRcf*iԐgͭef5FjIIgϦbd?\mj]m,˃Ol^cIFgf4nZnN%r>uIt"WyҒ@yzZVkLd*3oM pJ:d“a86g{rM}?fÄGg!i㛪*`/h_zgc`c%iԑj< :rAuIClǖ/jz|`ʈpڈ/aYcƤe >&j͈SjU#g(k^$zZ z`_u_rYƖy\iReg|0UmVC끙g-Ƌ2sﬤk~IfsgRksk`|\2t{Oes&J{PY(>c57eڴg̽=o~ƚl5YlB˖<_.ېm_F֑giVj0pt0Ih+YY;teЗce|sƮ,yrꎇn粟*l7{l3jovcբdeTm\wFmMÐ0bSA j˳ji㊔] W]hyyNBp]tUg֙lk,ajWe bH:*gie݆`ωaIÓkfLNn_ g9!.gSf?`6GZ8!B^ʼng3`awUgvtVy?^ wAW~f `o!lܻcv'~YhnOem'PxJPtiLmУ}3flzQvwY˞'mBяwGvەq=oޠ?jU(&g^1n#.s ocp/hrǽ|(EހnȔlIPa\b0\}KS̎Me(hh4f\hg|h necg4Kc e.<jJtoimďkϲ<3mkfWl)qߗth_&b#Q9뒻rHĎzh;kTbn_Iq[lv/jferW uW zi`~<`E΄zqj=qqfUd/*[o]l W%ciPȋb0[g&0gäFa;J_zbzi(|z`oIsvKDc TiZzZflʴ5`qk"yiti3h0{|[1Ruc\ tX}`Oϋ\֑۬]3zc̪#ensd<h9bXVU8fT2p!pШk|UrbRA4^Veԑ_[,Mcҙrp̴cm+|nr`j㉊\)h&o*[~NWgug%nENfkm;k= s٠|g(oXhҳoXmѕgfc̐Neݐ g if^We뙇s;AoڭUckbȏ~`5fWd->SQ~DU}}[\}@fǽ-rZÐt~k*jԋ*i!f֢HbF\5w[ˏ;rW񟣆dÙm(okeR__@{[T~=X!yUcdbmuzƿyQԗlL܎a8Pc`b_Ubh/dd\XZ0 n!ޚ5su˒hSi_.xݵKq«͒f^tzɠfz\o_Uxxp0|v|z}Þjux>ezu]QbsjEFquү斦q)fUTxFvMt̷AN0p"sjmn:t`yB|ii_|z֞t쥅vC[|iw8uݟwxKwƜz򰠗kh8)Lˀ%y%|2vSլ\2kژėΜ.2w|'IsaܐzMv؝W9C㭀>뮠=פЍC,1ڕI[p׶dɺ2eȜd Deϝi.}z jБ`l8čt=iZhiop#{%.Yɥz{z뛃pۼk6r yz ҒoaktO~.} Qs]l.jkf t|IlmnBrkEpLpfqnmsɐgg>WQdݳᘾjc܍b`}ɻylDZm 4{zu eHiÝ!{^yMȎ7b񪢒>b,v)v4 Xx[yo<"ث 7r{1i~_u}W=Z(jif$0 `\Qbj)q$Wrk.o~ike'Lzl=xhƢyRtΚ pMlpys®h$?jiFth*i%/p, vm:EkyX&_qXlazkkDĄBjmmBkK}mSOquy¿zyM9wyužPv$o3c/^k$teskudjLy{VB%~JY>>laH ~a5Df3[؝zFȗzS\3vZ{[Vaק l-f%[nTs׹؜yRbe2.}kTUNi$ـX҅[iY]{5UoHgr_LvLN>]j>h}mnq q˔o|nBedÛhcq^2|Tڄ^>fhf$YTa@t&[)vy$7zS1 o8ԑ-g4ᑠd:\y$vLb~|ˢ|Ͱnr6~<=+v󬼑dʞM\zvVw@lon?ZmLuPzGkb-ыmBZj?s@uG}v nVfwdihcwПk7bsAv@̯s癀kKo(SQ⚷TLZ"kdsY>rt]sWyn{r^4 ]U93w8~ZHNn_pf?}j pݥ^kE$#hX䍏dq0awlٰ]Up~h̒g> wWʞ 4zoZmǺ6o sKrٳ㕱jг_hgʗfMǑ[ڌ_Ӎf|skd^Ȥ}dF7iTOp,DmH'n3s1swŞsýzn’;mś'nZƷsrVu9sPuQ .wrz k ]d^cg8iKcH{_D}_eExfMDVun]Öhw|Ti!JWlR됧v?[WyyYg}\E聵]霢\iw.uN{"0sԲJiџ~Pz!M!tH~O$ Z2xN &q4Iz{Z󚖁cd팲f˒+mvq\s| oəiq?iXj cWƂD[1yTy\i}bKz+N8W{mn2%qޡu[cs`$j;nu0u*s6(stEdǥǏ?lݨog,d_X:XVqho֝tYpPsS0yjNƔwL)c|}YDj>$sFQoQw~ؿ }̂TwlθK_ÜmgƢVo"̌ qǚbtuΙu!ZGϦƛ~1Scdp$kțeMB`Ecrcp̰Ms4ПcxEGw#uPrI{v@l5 p?ۍk /J~Zlj8Ғnhc}юM/GaKu-SV΄y柣<z?8u$izĽ~3ʇق;RkfCr Mq/]،u!_Ìy^g/dGgkaҏVg*9nJ7cRO]n9|Ԛޓ0 !;6v5߭ƣ=$Л.4շHGkfV?볁ȴ=Vѭܭv9Taձ9_bI0Ε3wUӆĔlʨ(A)ן*ϯ6֕9ÙəF+%ˀܴvRƜ!l{fՎe녳ou>~0g2r@bb}:dmYPu&'t6 s%ɚtuѣxLqt[ĥlbh1r#hhSi)Ùn;=sßv-vAv"]Gp>.cƫ\f`Zi ZvTǎtWkhyLbKx,YG}I_IechLncZHBclpL~\ p}`{weϕ(z\:|\'d]YNoNtz|}l]_~KnD pMEۀUg \Ǘ~X,ҁ_@g8fCώgۑjS@innm&m?c9f-*g֪RmՄp^?vIҍoJNfuk_㐭|ffzeP߀ac YGdNħlA@:su‰ofh}ᎁeװc٧]N]wL^l"^<`9ۇ[m!fP=z,j̤YrjcoGoc*܁^ѕ@]̜x6d&b>pTtWwkIT*reI-bN.c`HevյdiƱ_a]jݢoȝpƑm/`SB_ N'ky\Et?cq]hzezFqsTprSnQ}GZ a;CfܪYfWf[solhu^oNR il:ğ~~](wßq pyԝlAo9:r:4,rgw޾gasSfŦ܊n],m1d/_cnq2^ІlZ!_Jc,JlcMbKL=vT͞g̛8htҟ+_qއngj΄kdfw֛lܧ[Оͮ ͥ4ؒ :8Җ!ˑȜٕi}ZbM嗈l ɍyjyŎSsi)^ƖxbTs&q֘oIJQkYisce `cea[z;g_,jz͘hxk%krgmoͦJj&mwt滓es br@"l^/jOkΩ.DdmgbWm(jݮ> iȩfgsmaݪ67\KreummxƘs pѯ~wpԭ/kڬgojn nj&j.gUd:lU8l6hR"`LNMVła/ p_p^+lNa_zPaqaKFrQhg˕w9yٺJw?vAn1tnjJrkj֕g@S[df\BaG%HRmK#]eGUoHS>]'}iVLicfnd xnWj֐]’`zvF<Ԁᥔ|M!}{Ġjxl9pkyȚ mV|AxTaql\`/iiu։mWfxdӋXqKVx]]?){e}}h.qIn<{4[.y\ocl[}k^|RrrÚr =n8vK3}3x0Zq|CPsE۟w| Txxg2;~ȟt} sآl{#!qutfk\j˚spv-}-ƾȅ}n0}&u>]aZEr㖃vJqj#׋8mvyȣS|© %x3ohCirvXc/Fn|SgkӅeo #qw!XjRuh5(<^OHCu^wi%}]d΢cwGab aZ bVcȡeWhxmkhT +b쏠jHq8|g! aojnj j;iHmLųvkL}Ǣu"8m/+oRvu1R}iemDo8s8\wv#™tK#xsTa^~Lބccs,ovfFxɦ1|j~ęRqöour0ia{Y;t ^m{9"yr÷zl9 d:{7\nvR>s_eOoΑo0ONv>ܡ=g]zKz`Uz(upkࡔ|w ѿSǢbȹUTX}鑇ℷy+brLLȔ1J޳ቩLV켢{Nw mupj){]S3pCgu2uҢyD2|е{ǀ~ynZlTf>hll41`iŐRh=LkJ@mPU`̽?ҳ񧂶Gr±^Z汚򲬘iǠvtDiޚ^ЙӐ#lTIȵдB$1ӿ3G 9a֌\ߓ~PCTEʙ"ŗf"h>ː6cċ'KW;~ʗWߎc0ԙGG1*eyrה#sX=sVttМo&jХee܄R\#k?jq@w: p|+ok6@jͳ 7p;vEuwn{n#GrI{zqzkꊻb1ˑ4h5dV}iҨl=ݜ{=|ΒfU׆_w~*bu:WPv}}YrbߕqdRr+~[K~&Yypc}m Bb[ns[p탑cСauxvž|]ƨwߧoٺ[wUXwVpTiݩobԗwUz}~oʮt«yvˉK}ȵTye8w6Sv*mPdn|~mPly9l̵Klu=Λh@t|xga `eڈk|X"VxdP])bTgӭijZgɐ]çPgdӊd͉a[[b3/j2i=oipj$VgK4Zgym[vq qE|[zMЀS fyrA iQEzJ=~[p@_aۆbHi>a0\^~[ `tyOZș~^a hpckҲ_pI qԖn}ΌhD^\0Tp\ꇭh|7gucgba4q?kF^i>jmvqC"b:1wT sQy_Y7kXc^e mĚymϨ{^5olxiQhn}pn ?uw״ t!dq׿%Vw m̃:momE~OSx>ḰMb^ObWzVelh~}fTzkżP~vi~<"򣶆Ӷb~}Nu-u=^olq͎ImwmŐ`v[MB]齥3;*mO# s <7Ҷ.zܶBQT׽õͳްaהU"!֗dKDLљF,\p*L{ϡ>y7z葉ki ߓJ+`JK/rЙוF6 } ԒTX k~;$|@ꖲ3'>I6򙐎sPk|yFrzsxڪeDy]vxrRrtbl֌m3`dfYsh4feӍi6lG}vv-xi8Kf◃b] }JZcx@9;bD}f5Кyu~o@a|`#|s̰wct])c͞ljΣgnò~&}'zC_{IHyhyTq>ein,u̬y.BHv&&FyҪxvu/Rcw|ì[wk';j*g|fZlf)ݜuq~Vwx>;|x{h8a!ΒdnEfsŚd`K{ZY`bRjS@/o񲸖nߗm#隡qQ}rڨmr)mJaTeտ0qOn6uLŞvojl/oBmVHu|]ʜ_ߗH}?SqMVsP|\\cY+x\rnPyYև%j̎k°!m˷{q맲fk, fvXvfRzwN^_#kբhlÌ:moiMj$i֣pfj䂴hqq,WoZT3jH*pwHtZsGD;vGC{$KD&o0À<ݧyiO^׈ZTdt\HhԣQb>0\\烳Qjikճ.,h$vŝ&x/\^qeH2x5 \KJl@CqZ1nJ3zAaΈmqY|NtQUx öK}Ի s$V.gFjJ#nč}âip~kbژGwHpNZiN>3nqXq$~cᣅbTo]}$ZQu^q嚹lllh#~adS4uS>e݀|cxh< h8\tзϜ|yŮJyw X§Ygqar[AT~ByEofZ~c njpQ0iBoJM}"z ݘypVuɰlaxәw5=vxMOPkPtr/vAא8,§` m-?5WŮ湸25(3$JX$|] Vd gΠޖCΚ쎼Rْ[SыD=t5{׭dE$旌'1}9󖶊꒶􎭔mΐ%}3ÛiޖBXϓb؎;SSk̐~7[͔!Dʕ!ߘ5z~U`Ȓʗ8щi<}+iu/wPs$~JÑ#{:t^s3fm:xl񟇃apOPk Yugkz1m guc]ۆ_՟c wp˺ėpѾ2PiԶ\gbux`ւ+boϐElhÍjqljOkot)ؑlȣWqŐs>L?Iu8b_s)}T@||\Y|[spgBa`ܝЈeigF̍qkɷ}|pH_n^eyQqepr8yzx]iʆtXt|[%lb|n-Zw%9x#ʨswxZwzCvOwnZ|Ҡuitkݶj!=]y1OXHNWgoӸy3f7Cmh`w^ yE`7{fm֥_w A {Ko\ИvWPhJnPgV}cٍYqM{of|sSVlSIeeIJiMrT`:PaɠNY.qg)Q!tcфh+N4)t?琨i%)m{iò֐go[k|3[zmm#hÊjSebI2-o^Zwd%GmEv\p4Hd4qNf7zW-&hjs"}_!St8dlYiqzxwdqΕJ~]lI`eC>Cg:ȉjtlvU&y΢Ҏ|N`YoWfEut[{n~6o9?[4ūȍ[q$Ĺ ͵+\c6&ǦdlS/<ҖxϕBAkxw1q,xކM:+$j0'˓M ܖrdB-bȕsәR\\OՓVU&wid x]tM$kaƕÔӕD&v>IyjzwVa[pȌa&k؟8mΘ|igAnPbj^ ^vVgĚ\Jh&bje`dtw5|d6g`^Jgj^d_4sb~m$֐kЌkImؤގ4n©ӒkAggqgh+֍Tfpk3k^Ҁe@$~+^ButV*!p^}Ǽ=uq Vqba=^Z \Cݏh֜y]bZ"}ɁYzˤNvƉ{8yϲڔ{i^O44АӒ"y{ϒ%'̙&  Pϗrv7j|URxD̏r,|5iygmwr3>jp7lMgKcf,~h9)^4특_m'iBnkqbpIޑJqGfopbȬ`㦖n`܉b\|SJnZj_kFKN)1p@al֎hN핶wmˑ cӦȍ0WMYjeD0n~*BrP6Ė m|-9`vjkXNR֬F3c kԽV|7ئ{_}Ƙv§t+wȾa|Sjwݘq3EeחFx[Kk B|;yAWПωgۡYc\*V@\5X`9bYue &iFgǟB^:#c;tvfz`fnNgDRym;"rk,e嗙j?ttot|Vx&yl@4y睌vQ74mѮ 9jOAntkfqGauqOxv]{1\tT수q\mz`uhp.h'׏zn,ӌsqG"%e׍{]ܣD%f݂b؂\]eÞl⣭mMxdy2t%nhkpok4jhONWje,w]u+NB{Y+gT|XwWpjAqBvOtK$n,Sw(~o.zܡސj3@l[ћ9xz:t喆^ЀhLiK=h?vSwYx&t*Gl}hR拴kzpm o!ِ|vsmB슀_x|e[L\l/pjslAdėOdK拾or쐴zSjrRNbsQU(jSk|n [F.qOS-Lk5 Ĕa}ѐ>q%atw؄ieA.cdoi\.ggwB7pooA+vޢ%m;|D]5sc}uoKczp`PvYy|cu)/i4Uhmߏgh#w9l$wQ,r`yj퇺ofފVyRMe|@vw.zK||bepy{u`i;|ist͊Qg2kêՌJjWݡϱ߽׽1-Þ3o ẻ̵p_Dݛ $NG< c =;Ց>9)|^toO xLpچwu#uv!UvskCvk/$uKm#}k싂k4—t6OvWo^-}pGuטLvc(zDc݀v刘nɕ<АfHyu&ъg8J,X6jwn^ҢyBsx?mY,kr=Dr+}lHxlxj皖l_p~ɔv/啉s{@dǧёia;>jıErnȕm yln]qpsOٓGoV\cqzfRϏjcj?ixb YYBgAktV}xm1ׂu^ixbXh7bn *e'2Ncʦd#g̗qtʾğ&/J۫aQp|5 {jwmu6mik³7i Ohӻ='sÝ|ȩoy3%suFXv=|3αח=opJS?} G`kꌢdϝUZa}nX̛\$U"YZShՓGn =iwkYX*}2WYbNPg8䌂c`fNi菴p&ڐp>_jZxxj-re=r9js(ޖu'8v^뛚xwpgT^ʩ^fiVh't3͒Ltk3mcWV]oqJiJt}dNO}b#Vz)p𢍗}"9ڴ}fyyhQl_;hޓoiad orlÛkqOť|Q`|zRl0}YmnjtӖ\\x'J^ج1+܉pʡψckԚ5nَٟh{=ӓtݮx}nOspdػvﱠǟ4>a˟[s_ؼD)ŷ߷ɭYÒKWAtRu{m5~vĊ:uzn\vojBq~mu@= ~}~xE{mz p*~})A@ېX@q RxH-~w(wqDvin}sX4~ Qϐˉ(n3ڝh6LӌH9n*݇ҙʖٕ=b4|=Ur#k0i4Lo҈onsVjmsڅlq1As 2}Ks%Nfʤێxi1 nĔpٗrR|o<{f )jamWnsl_kVkڬ|qBv$u]T~ѳrog!ykn.h]luInykMeglYtSR`7jdzǡd}֛m^)j:)^>mOأgƣ<2lcDswީ5~Nw 6ttql`'?d}p<ğdz.|w2_5q'"qmmrªƨ|_t=`F`b-cCb}zX yQ՞R/|}^on|asj8^DnwLXG~c/܈]__Pdk4sڬ3q :`ɴ^[h lmfkݩ$6j4ԕeiᶲk·lǵbZE]\fzli Esgfkk?pʹIr?h؟ZflqG`[:B‧eM vpd̋|9p,ndktflzlPR eb^Pjk^&kXlþQlreDY3Eb]m!4w=<9tm^>t9pu|Tzxy4o ͐tpfz}In!sM|{aӜZa_nl osFxePguUtwOUhK`%}^$jwdkf%ocz鋹eWywzd|=;uƝmfq~g›lUa0nC՝ss  C{5^bwVĖ|s[]/ycQ[n}̓ frTwO[ѣlɻy Ʈ_{9ОpVgx%]Hýśx e钚_V d o;rQ|Īj|ow&ovqؑSk©՗x#+B~rpw~i ۨm 6Uy`hƒzZݛkLho^hv\}Ti m3}Xاt?99&LL9Axvrsl6~ghfurey՗ӹRg%TwŮu@…UʋWV:GIv>ўiBҚrM{m6(ʙő5pVrygv.if ysvq͆yrCz֍]_Ԁ&}(ybz'm5{s~ہgәhrꖕ~f~k{~u{qvpb}dxЎilhlgIRXdCێQr݌w,~͐SƖY6̑Ŕ ] ]XY~JBltb`ibL(l㙨@nkpstBُq/x{{~MCyP npuHxnm%no0[f;ckݲ혊oMEh2e!se]f&fWš s{ߪEUt۲wj-ΚnLjþ]mp:ri b٣Aaa,mY?ӎ$bݜ3uwDmRȓeǢن]p{Oe(]J_dprb,mؾzX§󁏼:t x [-uc՛j@Xb5hTfmge}Y|Q*lC! sеNq`Sj EgpG;}scgv]{QyQtuweBng»oƜo kga^c똓kϸ$goüVm[šowqβhm˂{Ys]ZMo+u r"jAel%)o{rm\#us) cbwM}\݂f. r4LrIhf6_befv=᎑p&g͒vyW Gw_QBVbdju>g ^csYyWl|TQHeǤd6GrboQ+6_dc2[o0|umyo5Ʀ鍮l-Na`+YZpXV[}Z^$[iJc"Mg^fL?O~a4k8 s pg{ǘSHq6d_Z2%M`m˜krQx#|kj7YGB1}RqכAx p) ps`|V+~Ǹvv}ϬUnҜ~W-u#Y9x\z]獂qW5ui%zc8W]C<~Mאzy;^uͶam?pη;z :l1 Wgo.A%'O ־n徛ܻѼLV ݳMPC|kŌY{ᕇ^Pi~s zs~u$t s{\x|bY{Ri~{wx"mʇsmލz~|/~xGY}{7iE~x v}vd{ouIߏ_Žz1Y.`a;ߐO7^z= 71㛘2֙r!WE`j zX9rs5}f!cZ l={qnq=鏝yLA{޻F-y{ϰEyJ}TI{8gqtnBldRhB8h٘iMad\7oq;r~\,w젤e^qHhAɝy=Sǰl+nQkz7-r&]펚yUꏚzV]D]~]Yꅵb:Bi@xaFe¬iqer r]j2eG]n󹈜6riݜxp fuvؒAg_ۚg]ࣘ(j}qil~Ke>gϏnk1ҌjpiX`sqh"Zgt!Z}U^rEgu,JwpQp[ޡHe 'iHe~]WLfm gՊdѡ_oN]^yYN2sSs*OQrwMzFӭۉRdIu`"HlNÞ+k4mQh븷{%hFK\CZ\=cvvZEi?CzTleE(y W@苔[ԳCh;(n6_{, |Vng4cȽSpQT 9Ċ< 6iԔ[tLI?|w)|fu# zut\ o{oPxpȏxpl~uJi]#zhu~v yN~5s~|N~x|Y}|ƓQ|sb};s-}yt8@}t4}2wF;i?ۍkZǐvFy݂"|6_Sڥd-ٙ [fЋwڦs⪋coug"&i$m"toԕ *qЛIq˔!z<҂{=s)u' rގqv9rymל{DNjbcK_s^h-Yd:9js߻OyawMoZ[k7}nAeke{Doxmop/rcl󭛑illWs-uRj_=h\Q#_\QhڼsN)ng4qL.rnsAtUKk-eߖhCkatWϝĆUŞdu^#hbeưh .hؙlژu q}jΘpȌfBE_Zr)jaNb۝쇲bcXƘi4bs=u] o4edş+X~VK`Te$pը(ZtT`t79qJܛo直pEt$9m= i0}f΍?^9YfȚ9qOs蝰p Lbpo;ñu{Ư/px8Ofv}`+ nK$q\i?beI(|Aa$tAzͪ#q ҔvӉLmzYdnaI6v\QM^bv jFge{T\8fդc)b¥@c]xw~ȴ@x7vҲoҳ1n$fh_sbjԝyxEm`flo^iioln,nklmI jbip,n5{uv* qͨt^-jeQxjmߞsڜu p"ڒi)Qi_OÅw~~m( wezh*Xiil_ qmrWnZǖpzpy܏gӬhdyt~R򩸑]<=~V!HWV[HA`ٟ0fᐓhۙinHpĽhkj,ey]PdWqfizmWޙouSsyoǿ2Sq-rrtVnfڷ|zzVtԳϔiJlG{hßP\\xPtIRoD|i"EBF/UuNgoS@`UTs5znP%jY|vrWV]#`pf#R¸7{iuQpQph]02|[3űh4߹=m¸gF^hq2º|C YƢ<zo؂sN%{yozynՓԘ 앗fX5rCumȣ=m8]Tn¦m koPrrۉua掊xG{~~wV/lD$m焀nldw f Ps~{X}|jՓtDp[Llf2]坌\ƫAt??soz!}ˣ|;sQ-7i_[b;nڜzwTzqxĚUg@a4\#cRf2hCi~oovpl˫[hk3jt4\*c˜m/oSqPCoj>f·^x,gϝ{=tf("fCl-tLvȶsnzkXjbMiWUrp܌f>X[,=}SX~YvA1d +k]okGϝchqtP9sèe>gdKhmwޙsoɻL qK|o;nM9n=ޞ p,)kpTסpٽjؒN_+O_ޓnuߜmuko@q>-}nseNЧ$ʖG#YjAy]Qv[1fzBfzpdnHt -zIyx9Ǟp^~ٱ#juؑzILvwnmzuR04u|u)\|P߬:1u~Am周}햨x2y{^NԍYEKmBx&Κy׍^i6|cct`hFvf]f) 괸Nƴ9Ӽ|L]-Ѽ8ƹ|S汳`-=ߎՕ1]=y:P~͖6)%x zpd!qh́;qkjDpnpgm@tit0bYvTe.uiv>jvnjsoto@.trotso=uotnxyՍ|Go'{t\cTs/hȍ:1hĒAz{p#hkDbmnnu2uՔ|,l#|K)!wr=nab’zd}%gRClFYÄ́whґnEnRrAyvHauygrJ뛔2cYW ɺuKxsܞyݳZoQ]` \ȲEl*tƄsQۛao]<,^ۑbjaE/3kqFn7Gk_NTl¢se}KTP_Hi5[l[6oX.ph,HbkFomAm*h Gfƴ2lus Jycuq)f~^C€^̂ _g n`v9[i-ohP}yTy PҞX] Gj^!oSܛhw@aPDx>҅ܗx̭-f6ejxיo}p.뚮lżsl¦en 3iɡm1EnI˛6j:lfhd)ޕ"ieύ+gpfcwjmڨ] _wQmoj^̍Lk~Z7Ik葛ssyU u2wxkpXlZqxqhvnVs ɛ/qP}qsÕuGni6j-Jk lrrƾ%rb؟}wͻEus]mDߜLv=/zolՖ!d˾ jɬs:=tAyqUUsels\7mku虥x]~Udu}r¹ӛwtuZDu3z:uȭz6 ia^sɡ2tSҦp|Þ)xkmMjMz?,Eu'er}[We]گ:yȻW~2Ñc}ħ|ءqۼ5l|qOn{W4|/w}It6ڦ>vrwlǮjwCfei״yTmcr\a^_̞fhNJPp3x0  r[H iR6á|X}g~jr3埒a\ˣǒɾ<")<ڍLGÏ+xޝI%qʔ3n`9iŰљ*x[yﶳtSiNgtzM&tlx2}Ҥ=̲,pƼo•.f8ɩNȰGع(Y~ze:LG̕QzLMŔ2ה%qR{ENT~6pgqkdsj s'h6Sti͏u%h v?h劊ujsis'islj5r k:wqmplr=iesQgZrgshouYmctZp{sUpч1u0n(tr opEsYqp5ris7mkwr1,|sؒbyoi~vԌ3Ne JzE1ioD}ed)jFfk9jj@nۙIo~ouglwˠx ~Vs`id_r+eZ(ggɦylMʆ`ĖS/^"fKYFhؑ=bʎWYjz}ߑv kiL(mrokfj{kŎh睋nfqo_^v'=,y;jQ[6Z)mA\̖xaWV{ x{cpt^SRlg R-ni&֍k.rȟ{a@ w#kucg,mՏ}j7cĪ9\RFk q“olsm3)vpٝpqCGco_mkU n[p}2oV}uȿv3htnnΓdUlg4Diygjb^:>kDZ-u5qoEgUkjs慓g fhQoxu`l.hh=h(-keZ jg:m5wޓ.slzG"x]OqeڨtL_t Ɠlf˛;v]8q}ͽ-{5iwQ*`tI"l#wGxm.un!kkƍiugvfNugiᆓtl rkskwuFk:yqjr lotkosKjJtksl"TtynPtqrEt%rtkͅtnf@qsOtqPqmPrk{rkxGs>G|qvyZr}{Œى|̎Н@=z>G})s6$l  eۅe£=mXz̧Y{R򥀂*{h!k\m{-4{ʖsmykcdXjݙl +t8EvAp+ggޚʂǏJurUqwg`m)فXYʪRZfڴmݬPkc_PU!gFԣ{y̧yͬqZʯmƑLkQwnnƾmuؾ\'l*hiJ$f"eؑ7wX& rDЄma6xp~0u{׽zuv8epPtr*r.CnpA@r9{tNۜq?oJu0ĖxMv^n nȓElt ndX]MeCeikΌbnnwX](wDxP{`ÅgNm\o ŜtМtfNn"jKFlHLjWf濃ms?pSwý}x*v]jޒqŒpZ?ft7shgdUMH^x?Ar.GDvM~b itFhLjdxZɣQsڢLIn0e#LhTSc*c^1`Gfer,웏n\hIkTNm"Zmn!muNrQa*`)RdJZh$^h5Ҕlh:wpb"r1u,ӥtHmYck/m{[jRf^fQpx㠘|fXŽ@hskftQxT= hyzo ZHr{fq~iݒo¶d38H;ݺaqŵ\'D;Oț%ݐl9 nh!tzm!XvJo3€τrr d@qjiYskcstlbtiueuhsmWtntkU?si pe@r{kBrls j8tbjt\sltptm/ulNvl6Bt kcrm>oltlӆcul͌5zr-&}QuȘv|/|ÃJ ;͖×+|坹O匵{,܃sb(nukƅWhllz 2ǿʡU| tҟ哟&~'txnڙ8nmo0xvyLle{gRٕ{{;\q|v[Дdyf}#i>ʃgg p~НrKkGe2@Yalߢ|jt^squmyC wf 8ԯ+3vljb-6c(cgܘCgHY07bǚ}uxt}pt̀Ys׷ęnUouDx yѣxڡs`h̿՛il>tƣoràFmڮMpk(Ó lZ$rnGlW]q_頀`klծop͉c VtTOۍf J(jM8qRF|W;gJp5_vP~vʹ_l6gYnnțl/l*GmQnY1r+5{{ƽyyA~] {htYm+]|yDo?ǟ~Oi.fXln u ɔnJjp y ۊӜ~pc˝t}Tp!`.!fՁni(;xnn}sŸoQbåwfwi؞2kTmGr}ry3rԼ=n, k̓gvfF+bʂ[㠗Z]d&ljC+nP›u}{qWyJӄ^bi\ꈱa c_Dn^4aJ_d)bѤh )m=NtA͔u젨&izUHj-|f/oanii)]I{ZuxOЗqYΚ:~L`|`Ғt,I{0`V ~XvRYcn0e斦{`{bP~Sbs慓g1Xreuu8wݐLhâmdq~`R|`;zO钣t8X,ugZC|az|f[yf=u'_˓h|f +l}d*s&Zw^dƄfϋ6jJhx¾bҟ{sO̖NkhZmP@oɭ8{ƒ~hÞ wW ~ҵ⠂EޥQyFb#qLm^tη$q&9|l)hku|+hڋ: ێ㜾Z)I_վaW0ż¿ jִ88qlϒ̑P^wsꅅ|.~9Mf{ qyi%zm~Ete^uku8matnt]kÊ]vui uh^rhNYslv'nriIJsi`s~oQrpsk.3tgzsj=sm|ukwj$ukDNrhąo@f:pfgAt7f6th#uNpyFuQvRz؃ԓ?Ώߕ6ݧvУ2c zf[xp wfw~htnBFmon Qx"K (oގ0^[plzjquݎvƷEa~¦-JV}X}^ b2 |YoUu[Yeٟ'iX~Eq(WvAjXsÚv+qRj˫kldmAٛCұpd|Ʋ%Tofl_epM n)r]mkW=nFwѤF lm岫f;TjWp[sqNŚw.ؤbx2kt}i/sɺGQq95oW~j|eh/onҬ6f`k r ,q *lgpjEwXdLމAgJ.jxlO%`q=io r_ogslkoI0rw4m͗i(h&glՖ!dFјLo{bɥ(ycߗkjh83mmh0FazZ _ boxos33ov pt-[m򯄔mqZpeQyAXUt~WAbH|ƅ-[βpliH eΛpf"qf[f˙>iRo#||M֠jΩԈ[_d^ϬOdlmlnߕo%nì̓nInÅTvڛpJLȏp@$3WhX(ZsqLnHʖ ~pS Ճ_]2zUKf ̙ r6sADnՖyy\;x^[g1jpdɥ|dZ5}"Wx>V&K})]Փ{}La.gD|;\ǖrxOwR9<d #jɊqחPwjq_zee u]8Kj'r=xǒSzgnˇd^B,a`8^$%vKVCunWqY%-s`8vlyc,~B^aupmp֓}\6tTy)_\|os$l.j}+)l6h+oı~~vgjffՓ l#-mo ?Dq31Jy-ۧV[{q\}l\t{_L~ddxUj[a9rG\qsw#ԚXy\*@@V~| Ryƾ_^\"XM\g#0ڙ:ɠ˗NJ sxj{6wWem`t.e h9ve؇ ebΑkꑸpG{.f -jX?f?KyUɍ*caQqp©?q%p"l/i n5ՙk\eͳeY]fޭ_]PlGzB{0mг_L;]ŷH iC$nwu$vƝlIojuo$tUVy3qTg⭟_WBXBxT5rf.zv~ᄸє$jָNSkomjK zg[f g~nt#~Ÿ~{cyW}Uf6YLasdȎ-C~r>siZ^CzisqŒhєo7R#no]«IY!_>cX>66K#ԏ G߆_[o{p^LwlE\A~znsdp҄rxgutmeVuVetZhԊtnqjIsguftcqKh2-p~lykok8KtjvYue'wlJrImskAsxgɈKqjeVth`thsj-tiʆue;tc%sNepNl텦s{rԄ)swpH,wCrur0wws)}xnZďP̐0͐~wuzuMNesc yejwhsNaw66hqymm~hyEf !unaitHcy{il xxg*@t YAEAjIݕsHjsLӁk뚠vUt}|h'u+YLZdv-iriprZٺyϏgt4,^Ƣcc)MNiЭ4sr9?| fƥ'jܪLoAPh- TB{{I,aoG{*yZ]7j[ [PhL^q)u{tTEu$9s㾭pѹoon\l4VnϽ kq֛spj1Wl*xT]tU&^w?Xm }X;"^ӟ׎mWn}y:lHn\RӖSxKbpokZhfj4@fϯ8eɱŔei9 ^CIZ ߐ<`dөa&9c D i sl_sqnaf%u^n_ؿ1l`[Ik}# pݼ9u5LGpZjl2Qr*yTyNÜrY{nr+@x&,;vǑeЊdKGccw=S>X{nz'|ѝrHgdc {gblqTfsXR^s lv:WqrNΜ,sΜ ^ktYԧ]lwnћY%wO%_–fZҎkkƭݑ]t^ 7pfz}a&k][sq!£{O yR6xr"2^aА[`xk kVnΓdzpH q+b6kjx_[${I` v1Ŗk)Abps~_x8X$HSjȭdy锔ng੻mghdፋT,kbag#Α snj2xW[iunVpæmPˣpĮ4tأ7t6hVrÿmgn³t0uqxLқtlbq׮h—]sբ͢4}jp {5t䚤mr9rMIt;wl{zJy;s)ݚEs)rX**k0ϖtq!t9~_~\<$kr6s̐p-%kٸwȫvf̕0 _p^;c3.%f[gnFsIu蜩w rت!oHqُp`u1a}y+u_r]s 嚔r-*s'}XD>hS_h#MS~c&ގUy1ƛZΫn^wѩp!gdq_¯RjTs>k%bx4iVkۨmtosÕpz"h=gx;TesI[uL̝V_YAnjct|y2[3t- ]зUaPd6u.y5nγm8-mäz҉Cߋ2੎1i>eNߖ2j9e7a)d˿:kC{EO~\i_W`^;wVnH.rxRa;qo"rrK^_h BDq*lå>yr| zv!-uPBcK~VvX Պ[gʢΏ9ki~:?m#-qlBqm?ku9lë'p1+qȎzvUz sGRgʐw`[[enތ?h_]q)- {w{MCXx^dւs&Ҳꡀƃ+ڜwўx񼞛tbRmHMjHiqyhsgy¦x&i{~֚>wn9Slwoix䤽jȤȉbwi 5mkkPСiVk̷e"`^¤JʆsȔ{.o뢲jCJk,Yq,1ligwАn p+KivؚoJ}`ؓ|[Vz<+|yMjzi7ovsJrbޛKslL޵¥U={fPy1s~@ve<_Բ.g&f֥cK{m[Mq$tr*tXPycviv.pƐnLRfJ[%w%HdXNl7uE~\Rq`xje~lUlyVj^4.}̙t=r{; Ͳ% qhWb̯ۺfe8Vc>kr(j{bmB%χdܚyɊg{zuGgw8dZH܃DYѢڄcdۂ_g:m흡Hە`n[ْZhޯ%tpYzI/_t kejmlprgųocg쫅^L͍fef-{Uy+X nٕ8o4nilc-_-t:V5t_X. \pm7zk[~|btFtexHyg?͡V^@q]bxuߺQ{`FzfpY+zwYՎjFŕsqEVj=v٣q2oŵv/Kp¨ aLt@kG}ml:>ɮ߇=sxҔv }՞tnFh~{*$4^Åvq,I}O4<~ c3sYpg a11fijiG͎l6slcuT{ןy kwVn;klo&q]`p?yPtp]jCpp$mefLAf|=qQ|W_|aJnY1bveĶDž}i{5÷ב f~}2cDq&]ϵhxNqg—fmpPmzm¶&z̴,2~EnQlҙg/erؘ=lij8pOɝ}^vXvű3tmDuub}m7m6|mƜhxwh-boA ì KjoӢ0hˢȍ>cqz,g4_l͓cĸ[lօc\c2FrĀy מ8w2[nH~bw2T/fsoޣ_h|fHÓWq1nŠ"dŦvҘ%afsp - ]_sQCUuBJԙ{n\р~`Vj\2({f; {Õ~myFdMyP휹v`ѣ<-n)y>-{relDotǒy[ːj)r`07bhee\__Ev]Y]첾ffNdup\PllRIg{iswmRuo`C]J]GhCIIZOng"noߤghwe3{]ǒpJrI"{V`ՒqIzQX'}:^ux~odVbCnvɲ=s~ik&~[?pHlFKh~۹`kVnfqrݻQ4Ǻ>uxxf;0Y}ZuRӞOz^?měn.r&~tm*u1RZf(OMq\oi@ hfڔK|dbv~[<kmyb}%|â rf%px{OgH4KlbO!ـhm|^ۙ\jYz6h[Ve ׇ$mo|w\DHi[s_yUvѡ}q"ƒ*c[Q¥}.П/4>gevP8ނ.~s$r9l;n"k=oidpUkzmJk4pnlzroqprVlsmijwljosmk3spsk(r-i6pd{7qycpf 9sfrfĆrukO3tkotgڅ-x*d]VtYeтqjڃqDisi…r]ksrmŇqkq8kDsosq̆ x6rnr irk]r}nQuq0okpg n~c{W0m<jNψvy vӎfwD8^Wʇ¥EϣX*^P({Q}pD@ۚ9,{ZH:lYs7NJ֘zŔs쎠g%"hfNYcadʦ̒>ktOqϾբ {w V=qx$n+ÈiCgVٞhGrqjiab(mǒt0>eƈV<`|ϛhH s˻4nZkj$rq vc?ٓ%jٿ4juȝ@qǂ|Ƴ^ڼ<瑷g\xaQdmߒCl3nWu:zB5͏!#72qpfEmh;nm:qwM}֠}ؙsnkVҔvm'8weTfP ǃXmt%erG@qtNbo'tQPwy} qzvoԩChLdI1"rP|ޔyɩ,s5>m\IsŒk١qcMЈ~c-cӀ_Tr0.ss}[PDy&QaLd h _|^6WNgCfvpuO;_DQjiI'`ߛ={'+{/1Nqɚ tÞ'}ơ{Ԕeߤׇ]Q֫Da)Iebhϻtqy^GThcml cc!(U:oIuUT)v}_?zT֒z, mJmލa}_]KdÁ vȓO|s'yrzN0wh}`ľkƙn<`oqėxx6t0ihԡb`~wbmχ^mNokɖp|lil]mEZ~}{UxIkCuGWa*QfĶClmĻt,ó3vTD{4} u|cwƹoMll瓖uQɠ 񸰝V$xg~ɺtam[j_v@`0iT^xfҢ RtS~z͗tvv8ja{`)[ef_s)Xpe}N܎"lKgcћ{3#6cu]ØtǼ=uKjd+[΂%L1ċA^^jٱ.oiꚙvspo`\̄(SEȓkޖ!sN/jؤZ`T(wYd wb{UfvsA5T!BoUWhG{sYny]z|7?ۛr%MQMr [=+awx{֖nvؙ~-]:sQJJxVyx~XmyeufxVÜފVh[Z|a9piS{cYQĐbdڸ+ק r֍Ic*QfoAqq Bj̓n f ~tMΘJS5+ly]Vs\|i%ry,kGd{~d]w\Xls} Y[\e—t&6x超rot|Cpv{` j!uVAdjvp3[/joT6yfٟw"EqvsuznPj_eTk9Uvgۤ Q ,ּ0ߗٔj۫ e,҆h1Ȗ}zols;ov\qEri8pVhu~pjm&Psmu&lskwoj` wfwku p%ssrrtksfpd1meqi|sfYoerk/thLJ\tfce4tfDsi6qThtg^qjph[Pjw_'lcZkh,pkHqd‡qdk"h4llrp++wrxsؗL"Ĩo&hzy+lޝm{!nz ,s4{]%{}ߐx" zͣI౭AꨴSSxz]Hن mMUR#4?41e\h p&0r*|zmnŌ=g"l?iSfp?y D{۠}H?iH_"jĪl*wlK]k>̘i0f_rdkg^siޝ#i㥽pdgh(gwh̵8e8`u?_a^c:nmͲg>eBýmTm `|o@(t$uʺ?}M˗rhd.G@YroX}@4wٟ0pħfs½vulH;a8k:s՚tt{{cxҖ8lӌhzp^CvYš[gQrMs~hf&`cn6jXjeg;yIk&D⇆m.P hLm1F HwU]-fwɓZ|Iɶu{u'yLujq7Cl>q'u}LIHc c%z$5z̼w{q5*w{¥$d[a)hp|it xL{8맴Ԙ\zufEp;3p1nD`l{ vzܼs2$rǻYm!a\TĄYZ>d<ݗr=y㺘vаld@I^[#^$n%qa`ŗifjmmEtŴ9 hxWOeqX}{du).Z=ӖZKI$^rne4kt'xz)}zzԒgԐhzq|c@ev }XvuDqDԙtp`u%ccpz"Zxc9׋b&^fnB|l嘒v\Ҿv{rvlõ,N~`O_}Kea}\wאS{}mggJF7ws\zŌb*ah?ԀWd~mQeLW{r~8=&l5}wܘᄷ4pޙkٻpsuaqKhwd|zk"v 0 v®yucx6vqi0Pf:^Utn'^$pW{hBLϻ]_.e :4,ka~xStmt.v1sojtfl skӂ8ro$okpkapolӃ!s&i te3?t6kTksosqOt,lv isudqMcYsbg.rcatAcۊ8rfC/qlBs"lM.vaiIJsi`1rki[thׅ0perqei@qf6k!\ laylh"1kfo_цov\- l6bNo%jQ0srއ}tqm|p{†Fzqy9c{Xelm(mƛYQibvz` @d|]_z2drrԊbc,k^gԗ]s3IEx X{_m[ڐHjs3֦Vw4Znvh㑾^,YG\~T8&gBYprqj͙menlwn\wzd2,Uy%o.xܤ9B9;lՠ~$tp蛧e+mƼU{Jss'Tfػ[dJl`{rYǰԅ҈v#k}Cain]YF2m皐u8 uq?kujn$lYj`a {J:p6IВЁDo4ԇ^gaܠdlj_jȇa,f{ĩ|3ʨhyjxv=s¿pnqpsKtO^7|qS׬"4ƸxPzҜ}qbl:1snB)tkFr>jqijsdiitkYr>iKqe8l[܋ pbMogkzenA_цp_ņMn^qfrmՉxnߋeztp|{e}}q9~-il$\4t s"u/{g@p{yu݋nωqdghgBbլѓwߛlmjݡZ|kO-}C}pgree Ek$`Ѡ[A"YeڑszpimVbYՌ]&쏞g!!viYkjvciC`l}~ip>h뎿^$]atY)obZ/ioԌBq񦸍LiAߖlj^nCo pЖnΛpn i~Dh:>ka [\pPmsnq\ǜ&uޝu~bM L~qGtJn`nk1c^ryu7f|U;/sxw]N:z7hࢄfl}xzįUўXw50j li`@ldhb֖razcrbmeyU0Ⱑ֕JZEgnKb|,u utoYo/pSplFtltr@ssqp0lk{kg适n`.qu\tEdaTrcO"t h6sDgA;sbqrkcrgCrMgfqdjpbFsf sja.s=n/utpMsUjsh߈gsiՆ\ri-hshqf7pa paKpg6p>lohJrKiՇqf܇sgnwMnUYvnyq'/ut=G{js{Qv&|},hDžCs宅vݦ}r.mgYbp͚߇שL~Ƚ} z}ʵ+uyVy!v㟕w}J vΕskl7;tB5+uz(Uv~hxgtɗ8k]1k *f嘴m]˜Åb3}"luwi=Otx`;y?llΤ/gMdjމm0=pvk{t-isdYZme.t'<}pl*#l:#pRnfk6~mLt/\nI|d(ޝPn ƬrƤst_utűoUKf~SzזfےSc[McCOl$hxSw{pζlemx8n,+ji}gQ5f$7ixn 6qX7㸫թKz*Us1kIeBh Xg+0fcah-{h7~|qYtW}5hoc"~ȳ~ƨ{wVqϼvߙ^y풐iІ[p,cUnnqmzMo9@t?w¢Zq̯IdDg{[-uyO_}qg=rcdrg s kɄsrhpo[cl^]r{bZr(g;syn6solsiLt|gD=s,j :tkvj[Wrgjqd~pborOk8q l`arjbdq fŇsPht-j'tumІUwInMzictik|p튨䍸zԦD}x^,Ea~q(ujn|pWs|7z<ɣ v;̯+lPͽźݦ󅡺ҤɃ|7㛈xdl1hrpqyP`tȌ.Oqʅ^”}u7wmj6ohfp Pgnp{1|!?s䭸#nW?ZRM]},YFԁc {dh`bp Ew_ xsٶchGgҩce)me辸i՟n3s""qmG r=gv!cx€pBa~<M‹ ?(hްjMd=3o]Bfqxnpnn`͛qo(boږ)iN]jgFho,ngգt~#|Kg}Vtmӕ'kg6g"$iWvDf5aܝu&oi]mݬPk.b:g^$ gxooqưwzVncǠĂ]>/^]zUNe LnaZaGh1Bp6G]nvozc`GY@|5P mSzjCVQDeN9m nrMm k}c+U^%qek*W!x~Q`0h{a|yU$=wDܭό+fnq0 ,b]kTWvq7DR#ʼnLzDoc_#`Ȓknqy;OKnY+j[JYniXJiÚքA`;cͣ_etb{¢/ݲ/ضܞ>%r{Wo鍷uQcϘhk|y`_g|{mihn̽y)|jNB>Ÿy%p]q `p׀rch؈l"ƃxwþpj6^7`[|l<{sMq1@Y%v٢LÉ/t4pfOoʼn|akɡVɠcNp }a?שc |`}niL˻ t2lg-q^~3|jrĮoPkSti\nSsSʚ&sxg6Hi ehaŕWhY_kZʚ4lYRlWv1j|ͱCY651uq1jVW `vtiDm5c~k es okq?spgЁMmb<mb tGgЂnpmgƄpeqiǃrJijr6i~ri$upYq^lqh́naqUeqBg\qitmFsc5s)dZs9kք smqqlFrkgqaeŇodrk|pteNkp`Շo[s}fitn uow&n͋xg]t~sy=' ^vYxѪ偻yoq _qbk utw#Ā(kx\*#ׯSaO>X=d О}x@Zhx]`ף]Ʊ|KF۹aŻ~wmw̽˞s[QibeRkŤ?@iߣŎjڎj͞J ]2fAy3xϽ]u"mڟSmv=if F͏OpSh\cUg*d[nkA;yd $i1dⒶi"jҿVqعOcl'遫vs2ŖJf&cdkrp~z(ƕW:+XyǷrs䎐g[qAҊ+Ʒ ?rޯva9tai:cR]+h uRgyo@Vn9|~t>fa菒gēmJϏ}iܛŁaGCkh5p:bMdf/f]o7L:k5+s`~Sv^Wp~Y#kpRHcsW22jƗs&}Rwɽ:w[>mǨpc˙zWyZy`FkvOg]¿v7]i;OUv8w_xe}`(e%b!2\[ˡ%NppũSڠj{ᣮolBX񚺆^P;pUnuX֔s8~gq[ofǂpYq-u~y|bu2piqg6rn|vJPFǎa$iTت9ٌG~+Ť |Lgs~2c(twSM}dnىyffrKri6qӲoh:UdSi|hj飩ukX]ﲵiLxΩ~/2t} ^htJӎ!mL5+s`alM_vRubXqg8Lcdl*e̟}Tc im>֘nfkcfYmZnȤ=nnxi{Ŋz&Ćrϫ_Y8a)ebT]ms ^o,iΛkw;r˳ƕg̓?gegMfզc^kKXyǻˆ^Ļ+nң| eŴLaI(9fҡmYs`]z^wVkMEzh-c矓\ZitzYi"vWXU|+cetǫ@eG%t*d,l`q8a£6JdϔsPxs+r=am,yѤ>0{lThW_|^Rv`"x^f~bg!mV~UBRj.tag"vտǞ3y+pj d\( fcœ=cF)b(R]^;qPes]!hgcaImt|_f|jնz}ǽ]c*ڪ5ҖvΎuka Lse/szBZį~6fk>XqSjodZU2w\-edފ^oJZq|sZukJ̘iX`#|ipNvaXΟhvmShqr%x {wtq٥ą-a(_y<| ZRmnrhX}`U|]}x^[ޝ~ct$j$rwtrYaُ`iܞӋiH,gPj蕎m[Cg|x]]\ saPw&q~vdzRaZ{ełlc#wqÝ\`ؕ <|a!zUٟgCdΏq@Q/hTgeSj _љkX n_bYjj]ch\hik[?nYir:UnvpWžer6xʦ:|ݦ.X@_S~dނzkl2hnmch-hYa؅hk4jۄqnisDi?SidEjf{$kg=\m)hhe+jhz|(kh+pie^hjqf}mpp[$h}ɖqnž뙅fʹkWmR5g!o&~t肙[ܜyRnZa Xfq׃Qƾ4TȀS孹q<}x&ԞǶ.w wb&aj`z1[jFc}¦؁{фQ3ܟ,Itݡ8`ʀ W$;j}1+|OŽbb{;ptpvuxt'q~mprp s JloiTmX}mng*kn n˓*l> 9qzTUz9Ewñ_os`p"a xb}U:~> v4HbՔlYS|^F}`h)DbvK}dT͟kcn?J:f\@uT?vӞxFS8fxVn0t bmлȦ+|ۆ+[seԥ\¬Ʌť~"ƻ2vЯm=c ^̝bo 棑ȂN }ӜNx%D u?qQs;rn xMuI4iΩÌ"b_ n t{"`DqqZLiK9x˼}vپ4z{87jY/c›iFkkՠt䐫j4tku67`]l$ʇ'cC=q5HebWOE\qtx|SfYCtTLWxL̀aIy8[a+vT[[?׏scMrP1$m`lKބcxGÄze5IIoJ hS5̪w8d~Ыiݦ^nt`d̚Ā`_k|]~1fkX pdcs{~ Y{uA@yQg|g<\څ3o0\2pTlQClZ_)ehmhs잆sܪƓh]Ԏf9׋bQwZјm5W)l|VSl^[noaob͗/ndFFoYtp9i3xnINuW^v֭6}3"+ͧ$~2f{â>Wf&~qnjm^ e'RɃha9njӄm'kkEliij8d]}j.cyfbxb:Y{h ]xdtd+|)i=krlukrm܅+sMpqizjsbk}rkpjĄriqEiAoi|pj(oj\q-jAqWiޅn~ką\p lCyrjqeІ%r(hpgs@ĺ6sl\vpjvnFwnܐ|hu ~W֠ +٭P_|ȇxfʈnt~hρPe^m5o>f >ypP|lw|Bk<:xnykpm>gnPlsԦ j?_B8ccysbrYgz^nAz/֊țqƟÐ&vm=o>~f rt0wҘlwM/`"'V,lʪzd{jzosMdyTwegO|W8`"c$i%Spik| ud_aCcVt4SlH^n@ {WT>vb]סjͩdpƥF7mu(h"z=d5Bj5b}WTy sV\)felz\nɑznca|r{nΏ\] sՖ$xxDgp\ch(jǰmխdq@t 'wz\pj!fk~\ib2+g3;b#ĉ$aGl*~"a-(.lD"tId}\«FyQ؈>h; 2utݢZpUzoI~ǽ"lܾ}+tx,lmfoa}Up\wQȽР$x jKXqToEfI0_BUYxBha=jzZoyĆtB6sդxK_w xt@˟xѶΙVn8lQmiL6jV]l}zĴٗo8zb]c*p\zܹ rFj |Ĥ,:$^< v6mDvhjg"qvlߏ~~s6e}TnInbrxs?t|ݓ{кTςE|7eo7o:v͐r}f4d< ~V{texR}RPzj$WLewNp3ԒmCf qU+fN"`{Ѿ-{t|:wD$~ ~xm~cB|[:c,Xr{Akn|aԆd^uQdH^sE ^D@uhpQ n*Qhz][+hiȳj/%#ysόf"|S؆uc k.k۵ᘔpvw#4|ʐذ Cc2u,^bhpm]"l#mHKs^ўuНtzxZvMr( qUQn]dr+SŎkKtEQ*it1hM!mW8hȎהs}`={XFIbxsf_xZ_l0ey.YҤidAr|lǫ˃Fz6xmNiը c nkun6B}]}zVS/q3 q^ ae2pnĬߕpɖggǺߝ1p˾+x)NuӺXspP?mᤉm{/sпxpIp8l ˒5eJ?gl/3gޫˎ^-#Z xTxxniguYX#rJ۞ʅa՚vҘ s9~ilu@UtKxmU'\nhTsıߕpKc͘ ]eŠc7deIgUp) o xļ\ŵ虱ټ̥[ǾI刢Ѧ-t ވ5n {uʨHƋ[ |!zy{Cqno)~ny67[}Ǹ΢A~ зh'~>jxkyBW!4rX+6fn j{*<}dL%z r drf訕oU.{| Kzĝwd֏hǞfiÑv)|ܞ4WtuyH;z}ypabr)zuni>mȯϢ6{ʦ*{ɤ:1C}mXɋb(|cCxc!{:WϔnAMqm\nr!_kpb4,qqo uLhĨm~uTUyUAʅ{qus%bEahZyl_znopk*nirmiovms7n5mkik|edweeXuedcr`%bq~_%`'s_Z_yc\ }hMeـxkfql5tjsib8riSq iqini}$kc DpZd|`neczh eR{fMd*pnsosiaNuf!wmItRoqvh|XՑwb.iaΖE`iEpɗucÞln-Ev;qӼs޴5uw%ڨ&š-{qzk:eܜcw"r}ޠxolוk\xbKq%NWoLX8gL aF(eH)jLxB}Ty\e_sjij~xü4{#iwt}m\Fr՗nGEl񼹛umooih|iÒ<|Eb1ņ&\ՋbilŚq"y* {Ǝ8x=Ggh+5k3Qm’l5g֠pSjdjٓ;w\)@uY؝6V>mn.}} !->wa2 k ZoʛzZ1xvS~~XQjkez4_z6qKr$hP bhEu#B|BwIu˨ QtZsae'U)ns2z[{Ѧ}#Vs?N>܀ lL҇"lA)uмCu|8pcϔkvbyA)"|xlxpxƢ™}M͕niL}جroy_jwWYuatHhxyIedVhlۡ"sey{uնK Iڀ(4hFO!X2ކrdh՟|[ؓ~jH7TmQ-wa˜*vhg4}[vӧxRM:y_yiy禉3q Uv׃tKr5c8|Z_zYeZxppq׊0kjlLidlQh\lfUjKgxub"ast`%aaucbp]?\oR\ZStaaGydezDdR`&i`Dž~oetkiCuh-qeqhKph|$mg8~[oeqddV}nfvrdcxe`}q?k4s4oтfqh܈w=i,sLhdoDhsfar5c qh Om)i|5j=eifs:osy~1v&"o~$U򉁰sC][ƔouuGs*w!jq!ь3jDlFz֞^[u{}iž#|`̪=nuAvrHyuoEnܦ6Z9wew:X{rКÆc˜1`%irplo޼;v2۞wps믆p]p/̊mxʧ*mdwo5gk|ulKecwPHA{׌j;"{gcq]Zm8MapXr^,~a(;i#n)HoDm6w߼ydKu`sӜsq!jda9b]m mq'xPc}}Tw`+hh:(eofљvNj/\${bJ->h7jHhphJDn;ʍ7uڠ~rA\2j՛s+0͐zWRk*CXgJFRn6KR^stŠ&k٪jo_yCyx# p¹j6si| ]~ijn.wwiz"ydTwJ~W&r]nǘ}TYJ|T\TzH[ԘvZTcxŁ֠̽ЀFv џ;t%øsI0rA=fW]׍asMj(roynhJj$d|\ӏ:_'eF\}}YϞ̀Z˥a`C_`hW%er3QpS>sYF+{D`ekLl~CmDn8q7 mTc;VlǧUoq+yv؅vly\8]Ckc}E؊pЍrokbǁcy[fqM jQˈpO|^=Tb/o j{Gqnť'ZpxEI^L2Q]<yZ7kInkLtq_evfãw䯂}}_nzСz_“`M3eu~o[s.qNkH}jӛq{ovurϊj_iid}~:ff|idT|kf6bv aQ`Qs^_6t_]tS`MZta=_uWbpb@w`=dyWfd}d_jcVogshGnbofk}lczlze{n$g}kqf{2mfAtBe`kZ{Plvg;^zliktey lPbyne~nbҀnFafnfm3k~ln{imTyvfexpCo㉍wsځ}HvWzlSzq숱妞FܚO{8y3p~}os#td|lFZevxX#mGǒj%wA>n r`}mMwg'd Boqw9d–.y_*m>:oDt[tYs{tow+ėt!|jAe.^f=eae'*s@(r:bBwެȗt`tokymN:|TVb|WRP>Ԑo&ߚ7}ӷ7nWҕlM/]{и9yݡqבy_qSy`kFrҢm=ۓ)po,lil/ms$&r޾͜tjӉTL} Oţ>`lj|hz-uQqpZTu{VpE?xR£} doe˪K3In~kW^{]| `0?|`uS|]GmwYu8gm8(ms˨'(rXcdvVŎiI͑,rW2clɞy.lYr&|uWOx>vtţ;y8JqŴ|JjZgʹuڭx[}hbyk7"~ĞP|$ڍkn3pCdq tDixHiwt$^g٪_*qyJq|]|Jzc֪2zoTcnfdlKsug֜v)qevyLuiѺLj4=rn̖q`f]kzaxQkmIrڊb3{R٠[ nİRhᯚr䘶c0_Ib,Mg̔zeG[o{{V~yU b jtwjļ{N0#q͖x s}xtvOu;Zv[u YTxC_Uigj?e#xg~)]WcKJ~_oMol]g~]rfӋ%rSv+VquSYfg=rh% e՜Q{cВy2[&r^`xkfQnlK q?^{Ɛq~ûz$Su_omNoU}fT7w}Qx`65jXruGwVnvz `Nrل,r&;do׊[}f&wYɗhkG:oJsSt^NnsDc#m_Íjav+d`t|bbdydd^yeRe|ej|gfEjkjh̀hf:kggzhrf{4h.l{ig {jgyj%e/ueYi[ Pf[Wj_8ahna_kl\Un]Wo`BXqaWfiwcl|isyl@l@rImqqvotzqswwc{Vy(fžMŁNyȤRΝzOvlpfʖhM2'dsSm eLϊ]saumd;wb @oun`Rv$`OzX$ yP\ yGnlAm6M: {bC֑pHoѠ3ejy3Y+mpRnpKfuY{vg zٚ~edz$ogǐvN|eivd|qѠ⵷T;vt mʚlu~Z}ˠD;nak~p|c֍WnV–vZvLcdϼ |J=1tCBm%%eCg:y\~Φ z﷑;INKZ7sw};_]{_j~gral[vrf]A\Bcjyl|'zpgo d+udn mhc|'kYYuGZ{}ĐQ~उy=t֕o|9nxvj3vj|mnzozlsccamZ}U]sS[tWUv^Yv8^ZAw_s`!sj__`vax^s_\zvceYw|dgF|=knxrfJgkz>fczfCdA}kOhc}[id~if}hg2}*igyh\euaI`vbdxMhkey|iVgwe_q_JY3l\X@uhdZre6igZ.fok\chZleO}v{4nlxabxjk{61O&w]{tc{t xkrq:tcjnuHiÑ~q2{_}ƚ ~ざܝKǛn{@;upޓVs|jS}%~ o ɰA2ڢ(ʕ:Vz~1{A}ArZޣxc{BuHve ylBng> Up[dNbF&auL?jH^orRs}],8sǑoho,ߊjo6xr[eiH{u]vcKKpq.h^z|T!sY"{'g$s~`򣵍-i=?p)ۃrbÒbбKm]8{`țxs!іq5!6n릌u&o+fyPmg}V0ᰊwîkhđk>k.xY}Z&+dz qH+pf!Ԇf|fpxe[mǂSӲvv󏈵jC|x Ocn Fz/'Z`؋jsnmlnEsgkTmXsJF^7xCKuP:j\}w|>/fdRYR7[\tqcGtkN}㬭ĝN6|{ȥvk:fyK&m[g/cT\f陸m%ip lڦm0y2|Y}qltnRdB{h?zG8ԓe)šJlƹmq-rOpGD6lٱ$wpv}k%kgjy{ayb- olplԛmi-e{b/l[\|k uة} Gm| `CH}\1hh#mnkzf*2YWdže)/tSCqPӍj?D^-3fWM{*o2̈́t`{҈k)z-Vqn y5zBŐvtim6kZGiɜ܇v+ß!zAhq٨h)m~[g IjOÓwF\NbyG,nqjjh8gg˕NcDjĚ:vm*xx]jvl穰sNu^yX_sj]lo_oahx]aѝbBh˅ljw9[;y^xp[jo,z "[ڬƈ^xhtqP|lRyjl'yiX|Mm/&nPyqh0yb[>{XabraT-bt Z\6v^Ux_-Xw``#s3_afu`q.p6jbnBllpu8b(#Λ]~orܣtyʌwnyg"snޠY@_ĠNa/=1lA|`>fvKR^orRex`W!Wlşi$i_)syXwqf wU}aYuPCxmAf~FqH|C^inߛrMרqɔkd5)2l+E{ ❧q߬i7AaZ@._,~0S_'UT g av#=Ёu}տ4s4ڙOk_4djo{m^rvoӤ؉gv&dbisIiEozXh`>jd$mʁp l< 9h mEiaE)uVҖcdK`a`(uElg~ZsM{OzYl9~gڗ\kęmM f ongwL.qzJ~jZ'|][ŁbdMNvNUAð5!'ׅZϿxBmOZe-_=aҸ m߷soƔ%om2lO"tmGkE`eCrRTmO}zccZEWf jƙh񿜚lnkش/a釳Tgnib`i6i*d tZkx_G pmvp[6o^lf=irxe|$aSP1n`a|mQ(qO}ht!a-vb`"arcܡ;~iP6Gj4vOyX^6dpm(_jæVf ?mgrRGXy7|lDelMɎz0ac4lhyv/ry"ZxrXxTjUkeÄi*MԆxub]~roaWrXVZnVX+uP܊q!Zsn8JVjzp9Ehc܂^#cɔЄdՎxhTzavSH_qlb iz-Ėsyik~_oR~mY_xh\wdRie7kq1z?"v8rՔ|ze%xcʇ?xȫאĨtآOq/s!xy'mx+lӜ}`nʝ|k_τp){jmc{`EdtgYcntY[ItV]SyRc[)y`]vMa_uase^qCXbwsaY$xngg|`mypNpwkxZc Y4|dkW}ka}kg|edN~f`c|mʩCw͖uρU=ߠ##֒yΰ[n5pŧu@gnKbvxfnyeh/uVyM\v Hl'Aivio^ϣ:jf2gmB/}0ЙJ+%k \!cn@``sx<s73krc*vwMXy[?KxZՑsYTt>^knUDhaĪ nFUƺO}xȫs|tg\5{6arOv}ȅƥq S{晡{ݓk!}Te<~`sŅn~jR·[pWsNaB>`rhլƕ@vUx{yWXwD 9{">r1\kc2lsi1"xQjy֥pkdF|0YV`n>l}bkHwx]Q`YgЪrGsCuoqIұlzı~һˍSi~/nnLm]Jn_rMnj{a嘵{/Z)uFsxHcmАqn"`oW!fA.9_UijFdx:_ŠwnQsXڜ`sϷHv/jm{yu+rO-Wyظ\~c,d,-}s~]xu Θj7bɛmx񬽗Hyh!ʅ`^zOڔxP)ƆfEow@lDmiBIgih)\swGCuuX-za iʣhXlaqb,_@)j5&oz[u6Fs%uiq^)y^3S̀}gZ_'tiruQ]/k{b\{@i[ydQ[P}Ej BjqLhx}VݢAl]Š`mc^gxmXX3zZvlywiq|0Fjȋ􋷐>NtݘRrؘxZ@̓>pیzq;qs41wmvzCoT|onb}n/Dsjp rh"eg gZxaf@sIY>\v_b_x$`p^%zhav_x.dKbyDekweexf0f{p8pstonfuLa~[lxwʨ|̓J{awbM{Z~lbw]t޽'gkn=GkwS뛍qGp[vW7e'gmXW^ȁKܝ \^ǝlMUIcohq%so:3qU(6mPZ)eCeTllQs͸q~Un|g;vYNAu"glqyzzFM݉x+[K0D5ElYb}6roL/jet'rqH:yraqzEq}nȞ }am}lznU{.jQNoc}Cdcxv^Sdu=[aw_awyb\f}edzkiBvr|vmnh{:liorFq$t[qK}l!gwf]wcS~k`kPfjldh`(wjLdԁejb nbЈugjx5lns$jۂGvcmLt%ouVsׁtx&|/|owufy]Twdaw>ef1sbdn_W` {qfm_{:eL]cm0\jXjZp`ɢtY5s<wk9sf!F(l_~e^HrP`s^ϕ\o #j2jrTkĬm}uA!hoxVx`|rؙm{a}sؖOntozgn_e؊'jڌtg:䆩_Wsw{J\sfK=Run{!dalY0]hDqe'tIX|]0syYTiJYi`RH^GtWz_~csuRǓpHc'_TuE|-j}EOk=msL#y6Wl[|Y@gz)WtjRfIgC wT|l[^}u[Ǣ숸d ćc(sXLxD^ 9fMpg\Iif՝x`{W~`TT$1i˪ݑsΒkJyV盩|U@d$oT>nr'h~U'k_蚖|e{wtz|)}o|bkj߸dhj] UoԣlH\z\wj\8SpfE{l0wu>q'p%cgmn&e|*h=*xyZWn,Hg{]OwE]gBr67[}rz~3hҠi'XǏxh,vqgg>lHC}˸hxʙt詳u断tefaߕ{\zy0\lygŇ`sewRsEY#x6d|l蘦r@r|@dkT҂q^Ԅu]fsg߆_q2`zu]Hzv_s~u`og~]'[ņRsOt#[Gv]/M|k]NvJYsf͕:lv݊~qcp׎E*q‰<st\t! povzs{${s`~sXq} Sk w䑎&L݅kzҋ9v wlww}jg\[yhȜDy܇?sm~Jq uq3wnWt|jemlQ|&mkz>fxhVu{b`.x^csw@[bFz_^{bQ8Ekcbt$lczlw ls)snRs[onqj׀qg yhZ ygX{'hbiYjEjhjetkeka8l]asbi@sh(rdh3voFZroet\r~6mqyel3s|njzja}gfvc _ jYXUTubb_|iucdk^\l5[UhT^|`#[ije]1yo@xlofY'm!Yɖji{fc~qVԍ8yiP|z8z&i菇w^6^itƜv-.mowxcgox^▩Zr˜U,y0qy/jpx?}ni€ bp?ߙz -xڠȇipHvVgMpa*m؋jڠ j2G_fyTl`*q(oYxW}NrGJ{V 1nKJ]>BSeHhYI\y4W/VjR.}o4{"_:tRq"R[ƅmb wdȚdtFIbV`9y` Riވ?m]VjGxc`kNOSwQmoDli9ł/fɈvclAdXwvٝy̚Ot>%r͋mљel̘=kuĩ{ysEh@xjp ދh!p8i}KjwPnrm#̊4l7A|ɭW$I|FΙ||wx"pr q8o]tW*si}dCs}^pxyhs|jDpavb)m𒲁$pY˧byVxʼn(pD]u]px:]*}YmNGt)h[Nybi;n=/rrq挾oq3X1t2t'xr(qA]sc|~iz1 '|k?FݳHW'~=q/_oU|*mznjxNqhᇥy`ًvptpto9vt`lCthy}j^ql^Tw^dQcY~hlwgij ijЃmlhmxemAdsi>s#has0hrhKqjDžqsmZpsluLe2fsudaTyj hyhThPuxf^l]Twe_lfnc_:Yr]0cWIz\X-m]d茺{u=]sl.jVpKO@~*\jF>nY~nfa1b\vPG*`RK c͛vuƤwb`2oS{y$^߶ v57vpoI\Gm JjcVJÅehMpV~n.TfM+aJĄPeKyqTbwUݞarؓtݭctijAS}VfKwS(M|L\O7dLns^˙Kx3uqmm~lZ \П܇cWpPK5]3fÔr3U1hHUzc[Tt ju'bsVu(LrSWi?y数qU}RdsLB|clӏ!tK~_Bo~bMDs^י]b;Yj lgR#l\RMz^rGwp;Lv\yKP'R9\f)sɯ`N]O֞ѯv¡a`j:̍pgc`؋k#sػ+lTneƕJtp?wz'Ҙ0tW] p~a0qHuv~suLjiSe;d\?i ԜSm?Jg`+c@;n##tfuVKh'ޙMvr0 ng̓~<^ʈPr]wZkTD8uߜoW,IoDVrk{Jf/u^Fneo;o"Hl8Pk{x8hڢ#cfӖ pN\c{%|ۭ!s}q厮qT/u\O|z^(BeLZ+̂Bf={Bw|dR5Xk+xV˷ws8Kk=-e6gufZqAo:N,ibڨnojmBWmwHRɇf?wtTwq"?a&GrlKgKnrTp^ljwmuiGl/Bei1Si׍^iSfGVoV|u VȌf2:j (g"Qm+ArĹqxrkrĬ:o8q񖨊m⏉px}! rԤ$u%jvߖ|Cxj3Uxaun{s>rwlnxh]{[lqJwlleiZzZJďrPq݈x;ۛͱ@ꟁvVkTn^\xc~gڗ%k,WoqqDTqCr-+i |~luUkπdvezSk~Tx-.yܑ҄ـȓ _H¤.'[ݗs8ny{k?esI}j9[u[:!oq^rUݒwX}e9ł/f)b[fl'OqGGv@[电pIxTRj7c׭v1أ̤:} ^!mlB`:PE~VlKlUv\ݶ|p*Ezw;ta$ h䫯zjÄTa/g v{L^_}g*|e.s5Y>y\{gb ^xZqb1icӏlP#YiI|`Z0t*^p2ZyUF3mOߋoܐ5hcY]_z%]kghMv:V_uRY f+bF Yz)L#MUm[$ɈSi\{Lȗ:vl 8a N_2㉓i% oɮ|T(ҏvr{p9$ j7bwIzxtr}:yt{yRwF6!-f.Ia]vIV|o*`T;m^a|FkPeoy i\dv&eb7tRfSdrsdgaCz|gbi`̇lQ_ i^6jib)h^uY>Pz-lI<}\Z邛ǟÒ{:/`}gj!_uğt-mIqJ8tLjl^if+-ojB ylƳۗy~>ćqkrn`24h^ǒr̤odѡ(vZF)`\ܐt5RA6}b]'tklR vx]i\рb!lC"1{iMta wGkJz|qo^"p=~`e_en#n@Ñl{l ֣Ozy4aˀTq_NbOu3Hϋn H*vwMXӛ`f6wg2cZxbXꕈz\;zD]?| aܒ~cΚEkdkҚ]%lFjD.LZrՓqyã&ӆffшzhJ$WDQ!g`K)~`p{vFzJ_Ns ܓnNgwsR(g˛~e&g3Z5?zYO]|o_ʀbfJ/rf"cglJSrR螜=`ʪÑ7eH1ev!T=sSutMoo!oSQ`cEl~cHw\RCl˖l ;b͕vR9|yRwW``nƁ)~SonGhKb2V郐aT{.zҷ7~[OpXl,0r-՛MuӦ}A~}˚voJ}Jh,sWr5mm X|a t3 w5ÁOs1j^2`Nizo&rv'{7HX~c*k7Lfltz!oxbdXVd9ǏnZoWPߧ'B]կp{`8q_3k讅RfZҚ`uVx~XcRIފpR9fztՓmA_o°tt›Μ}m qALp[j`|(cibnȌon$nCm@mψw*[ujT%xe`yod~y)lrqij:xτjps]`}nTw~%cm[O&Tt{kjU|:gWq~jXten(Îp|irpDq yyy"y?|s}}w˅y_w׎Vuu֍}>} Rz}9e{a|]2{텨,|މ#}_הPA⭂"Z߰,]4H]OGʝsnczU\LXOKlqjU8{ wyzoHsjj*1RjBܚr;@s=핀m\L_o}}RԌkIF }:vyCrc$_44wjHV聋ܤYgVƂa’3ut}_mBlI pvl 1eUg_a|ZzAgtjNt_[r.`@m5oYnxKBrSasN7|+z}*QohLnՐ oaFmwbd mq-0m%wlJx^x8hWynhi}kiHq厈|chx}`c֌/oni)i˗rc ~fÐ ~cVhj~^o^mҖs֏!@~%yQx}zH@}}R|p|zz4{oz{{~|rz:b}̙zMl'|އ(9=K痻8ΓՓ{nT!?t.@et^jJ4SGFpQKaqjzxg9{~zCn9w'n:)xmn{jkdVkXXoHveybR^xI^]s[2aOv`Hatc\_{Ugfڂltq`tq@uqAt_p rLnҀMph}jWut`]s]seu`g{ed~@i_z hYwePTv-bXvtegsy h*nAhpj/gkf~nilke~ k`rmdnix fhyff(mbr`TscYq~fSvubsamUf2oTXbbw"h%cg׬wgwp iT]PC~W[3h1ؒlƢyqmF[RGm\>tklOxvWϋ[ǭcƳhudŴřn=Z9{FψdEcDEwii`hQhӎ2fr 'mmpЫa *o|jΠy}o;y7Wsلx|ڎ:ug^l_uJQ܏ vU[Wّb@LimА^[@gy -oo/iv+`܍s9cRk{񩷔JoHyVj1PbaI包mMkOf}QmfVpTepJ|ZZHaMx%eHdK oeoԲ][r+iޔye\UxdF)e:NjBiI2g@/ςa퇄dz}Twe0g+]ۂRȑ|SvTx[~e`=gbwNh(_UVo2kN}#gzi̖\phnfç|pM㜬ޫ崗phy{SQgDsy\1ƌs;r ݐ7pԿ#t~xzLKzAw_~Sbs iҭp&fsx3&]~r~SG}YW5sr„;ZŜ b8|Az|ٵv@sseU8s3kry ٪{?U>t rwÖpCszmo² u0:|ҽQyܱ–Mnˣ=^ʧp ؿyʤc}|_̘nk3+z~'t|qɼp꜖qA%lbԯse3-AiZv^z0uVyy%Ov%~GzR* qhmgSxV_{(!mh@Le[f܀lqkS)ovH9{| uIka.ycHRq{)mlVr;~&УBܝhqgU=ap G:{ j]l^omѐBz˜NJyiwxb|sez~ ׍'?xxrvx|gx{y{>ya{ v{]z56z'~f{|H/ՆXŘŗ륊6+zf1Q,ŧsВP]th;} \g[ILDbKONCim8mHx~Zsvv{l x9luwm:-zkA_k:J jc:wfhՄVeXu[JZv a*b!va5bewYb-d}{7hcluuau u|-qovp|7qkp}SlF_xbSyux^\ s^Ac]vcfvbbwc`s a+[tb[%q]UoN``o`cCxd.m|apaf~ hnb&kckbImbrpe%pj6l?mᆠpl{sod}^lo^jNs]VJa*V`UO'J;bXHK`%dS[{Supj}lmŎtϹPhuu>wqX lY̏blldnv]oJjʐyuZߑ gFjyaX]Nma=uVmШnQmqT~]܃j>۩hr|Aq}b3#c@jgG^S`rzhɱiqk6xХ6(F1M`v3{d5roZwV|cX;Q}{oenÕ`فgo\MgTl|cՋ^ͤ\otKvȿR}ê]u:yFcs]g8vF7wjU~:e >sP%eO{qʤ|s$o0TIp'nv,sĺYu͝{-{ 8zô1q&sm_x*A~$&kݣ脴]{w9\o3iGrN%pFIm/uey#£RvĶoKkkğmg񕘂e~iD٘|wuvDmz5ƜuNwlϥXoÜj׏Tvh[oTqW~modZąxizzNjm8|b o]ʍ;whj9%f Ruѡٚhq>t㱅}l;šxt _hr uˎw$v2w44!n"S̅}ၐ |~n^ő{OUqw)pvyr/z"zS~ˡzi|+x {&syw)z{vkwrs~W؞yJ}m@HP̑󠊏qҰ̵*ْܴ6h7Zؐr,}j}Wd`)HgMKOTTdmo/z~~Zv6Y}nkxkwl~{j%{blylEjvjc[xP\o`v\`cxbSe({[MeU{fpt.xps(u~tpx(m6{pge{j\at^XHsY`~`gudcvjfhLs+^Adr^b7p^Can]b2mZ^Pn5`^qb\wc[v\H\wacJ{fd|_hic,?oFgnRl ggoiYolkZypls.kwfIdm_1UYFNZRGE]DMF`J FT\O"F\MK bMMYy(O~jN~n~Os0F~J h ۓCʍ^Q`ߐJ yCz&wҀ:Vy|~O{~"ry-u{EWh|y_wWyu}yܓ}u+vng9fq'tkww뇼qp}z{Y|sq;]yt ]lˢ|{jԎo/Q]fmKQV=MTWblejz~[ylt}mƛ0}umgyj zjp)rnwUil/fwz]csk[dty abx\aOzf&k€cs5uuuR>uqn}rkkzDnlbw6fZp2\^zq8bisPfesc_erae0pZ_`kY]+mY~anT[_o;^[ ~[vۡ$bnԋk!k)ٗv~prT:pۚU`&Key˜enKk.v Ćm|ǨkLJnaĝEt3K}?||vgS]%[-Ē^`ͧ⎎n񱓘tozyԫ }ǤxN|_~Av|mjӴv yC'qfˠ_sR2vrQh?mzHp$vQj>jɵTӲwxtw,eiă^)WoxYgV};'|dʱw`{ȥiĨ܏p{jbŋ&s5ߔ=lX +eX /k1y=FxNˈZw y xNf=3UxO7{MgD$yǶ~}M`qDnng*v\_]{~Ay]rղOhEjAMkҞo]ktlp~uתt橒wg5e4ns{Ϋހsþ{~֣{v{FSyhg.J}?hSH}a 4yL>{n˳i˳]hkٔh|Ζ1jvjLg{;Rq}LBjf-m@H ^_ ]fUpH©Gv@'n/i.jy͞TiXŽh Fh:q;?uFo|o:nDnЯ jh _4(~?ZvkSbm2Sb9t^:\ַ>To7þ|۶sFi-~` x\MsQYtuVPq>RxmDJ@sDߙctehO閞nio/mpmdk\tw`lJb~r]zgqiyeW[.od4}pJuwLIWyě]hޢ|3jy!9|x*}c #?( ⑫}>dE~ə}9yY薰o~1t{v{v~ۓ3wz{~TyzvyQu`xZ~^z|xNv vEwuXsgkZ1vb/\.} _j]kzk`ijYe9`WYxprSXl}꛾BO퇹f}mMkzaAdqZN\SdPZgHb"j1k,y{1q\n^|bj~{jwDe{j]~"mv{l!tp_mex[^rZ_nzbn\"va\Uygf}qovrHvm)}qlxhdu5a` o0YboaIlmBcZhjt=kfppb[n\Xl(W}YnT_q*Y\rZ6Ris]QSu]Ucv`#^t^`Qt\b t\\yFfc{tie|jix}jj>khxiBnS/S^HCF{VECO\EeF]DE:ZFEWFDWD-D]hB@_JAk_"UE9\\JeS q \O~]iP3r#^t>xsם̘CxD} !0yұktM|`Вuau.[xSedx筙tkEu8jyꢍuNe~Z֥s/`mfq_ʣ{Qź w[p)fP睱r*}ltRirijPlnǬ“sKz& ";%)׃éß?\~Z{ݻ"}x;z79x."mlk~b}WXؙubpևe0hoD.g_tcT}a9ln0i)nrx®ofle}w*czSfvzN{-ͩyhmvyvj|ٞf /sSPɎpܿū0Vvum+uêywjy-ț&tuLr,mߚdKpۮʚ~'x2cuizW^eILv򿢤=ƲBƇNu14hƷyq84v>Mq]bڟ&e)||}ɣcW!Y Ve? !|@ʬ褥}lq'Yx;CzŊ$p,ND{[y{Yp\ߡZN/Ïe>kwoj#e)~Q`x-J!vg̲)uu8~$_Sa1Im}|lj$~nEƌp)-jľ%b?~_\i iD'bűϒ%lػkjF˔mgbg3 [fMK~n}U bқ}ac`r'R8hqguSfF4dhCrUՏgyDgrM$]f@!oQubOkposXTm~졘ky7{hUo$V~)v̎z }m;}Yl_'sht}kr$@syfruʧw'|~_Ɣ鏴)'(Ό>vD}jڙQ$vuiDuo>sċlqrirz neu~1}<}zpuyrub~rӔptsčkptN~hgocPzU_REhYUQuHHunQJd^NBESO)Mh&qt1gh֗8ُ*%Җ!p` NNbz~IUUWqnKPjLT=q$]0]qnpnk{l0kꚹ~gl{wkwueԚRynߚjx0pדJwi`oRgD{_]qZF[;v`']+v6a[Zwebc}xhh΁tq["ys&|"notvAd]ft _ct `OerkcHjmch[ricqc@\mYPYoUZpT"_s&Y^s)]pRtD_/X rY^vs[Adq*[>ajs]bBqVc~bvfCe:zjgvfh2yjk{li vEgpST,_nGqHCWGB7@[DB[WC|C~WE@EBUEET|@BV@hC[EEk^H]B*]NCY*THSaQZc%T\Y]Kysőn9y{fnh^{'`xa}x{k1 pnK1>o}UyJ ۵yn.ፐnOe[r~X`gZ]qGi|u¢7}̠}Fu9՚mw s觕J7u-?o鿑0lAvDpa w2]S{37 }8̹~2G^ĎÁN훸ssBov!|vtAHrtyruǝvRmtwbxB@y.Κtk\7zZSm,}>}Yĺ\v]ux[nit]ɃqȜu{y{pG l$ yhꏞple"l+p{L{ceIyӼ')kq.p܊rb}R,fܸ*H}弌BA*o!fYꅵbS=rǪ4{'aۛd\KbjIcݥ jV9~P|gz}N yTLiݲuOxt]oH@cٕZȝMk tMb("e=2Qk2+XVΊeUtbƮ scYlTeطdbfP`~]Vf5yefmcf]q!}Q"mIKw Tyb a(hCD`y8u ĜB~`܉r\PqL݇-scQ |aAtwTӁeH|^#I_h Qŏ|9eޏ"pOƉ‹kxDkjQ}t eʃrqtwt[}kBuYjW,?1V}̏‚%R~М+{ύ)|htFuggo["igf|iecoÏ^jʄahphTm҈j=n͖jyZxkka7^XWLQ}gUQmMAKa_EI;lkBVGlICB&fH^FgbIMcj5lu! {@Ԛ.@xl{Tx/9r^n/CS}IORt*HHMoHFNtLRtXd brkst`zCoK}mpsThKp7hVvjix#k72vElՏp&i|(fbsWyYu\m^t_^x6fc3{dd/lkssƂEjkrxdIft^bSugac$tc#dobbobaOpaGayjWbWmXmXp\`vbgu`__As$a_`sc hsc;gJt baMv.`uajn\dtYdhwfrg#xgilqyapoyamistihUZh^FJU?>>[EwE7[vBDSDDQ?>Q;g=KR@DUCI[F{HkdFDbFGaKOm M8OqSUsp/j}BzxBzPuD}F:sx(uvZtc;x/͐bwcQ㯧1P5`xQtS ;lVoa|\FMz^W0o#hY{pT޻-~BLWzJ/"r=4mhCs˱-{еԗz滊sicdu;zQIz/R8||BD){~KĈwFFloh# i2zoqr6#xlx=hgV&`NujsLlmJ5gIχgNiLʑpQ;mXMYuW9pr`B'iG}{ůzX|rƋyuȊ}zqÊu|.bu"hgfK/wX"%i(`gfC<]rBmpH*P⭟?c΢XwpuJƀoUnƽNqЛm~]_/>W}-\12dDh+`矏N[uxDOOPʢ+hd%$`Q ]՘ |dEtⶏ׊ٿc98DjFd#jۛk|[ɓ{T` pSR CjPQcuJ jOywcq_[x{{šx˔}i!,z{gsn[vuely}ϔR&p.񐑘DCY\S ~<F6!Òg}3"arĆ0pkvUT&OhdOU ~OC#M@xPVPu`MGlVKN5t=>GKiuTPjOLiY2`kL)Zzgm_xOIjdsekEZvi+vsiXujopS_hfuU;Xhw[\v`at]lcyxber|neh{KbSh {gh$tF\^Xv^b&t]$``vdHcufodrdeoabCm^Z"o]Xq^^Sub|ctcb9tdbPq`!^p_;^sWdh`tcaumc"c|jgX~kgkykKk,{trsrh,vq]gJ\G_0aLMU@BtT?BoU>BMRBBR(?S=R<;Q@4BaWEG YDF6`BcBbBH{b.D:M4lBH)sDKTxAxKv7XSrROlY`vwWin~sI oȍ|@yZ{lv䗀⛞s-x/v*x+~qeᎪi GZc] o8zf|@urn_gafAf`l rj@w ˸||Ět|3~Buݨwȣv9#v1"poʧw:ã{b{iy>ib>^d{%W]n@QmNSG]|mdk:t\VnfpG˗%}[m sg!K[;(GneuëPu2)|z-v s9Dy꡼=jݎmO!x]AzhMcpv*muŕkd2hj0fj?ioӎ a8Z^ZUVrI_IJZS@/oԣʖzP{k6Np;sAj|h)pl jjFiޚt!٢t=vFvf8|[7"^NnǠ>pTfѢ45jδ!p޾hl!lm1vm[gHlum/KOhPqmlv 蛇t쫃*t:nBi/{ZwsNʒ|wNXlu@_AhƇ0zt¦xwrJuFzλs,&hʢ`ݜÆh:qibʅcjc>fqlqmCiro{ig!yeҗ}@N:R>S|=@T?@HS?A\S>4@T;Œ!nL$`ڏdStUvwohmFsƼt)qlqiŸv:jw puΛx~ͣ";=曷~߹A7ROrq{  zTfk Ŵ`mq[i]!4cjdtjɬ_, cߚo7s|bٝwDL[iqoL9a~l}?\^Qk^όq_ $lggkLY\nG7ZlcF0spKrdMnϝwm-iTȜ]lq r%w6ŤHrLl3SjTz Z!q^~!|ݑwbBǃ~ A֌+N3S1 QX^捄@xRя@6тnu|p|hU@]T"P{k@|?.aKqCYKFA^GIyiB5E@iUF+EbFDZDB1]b??,_EGC`CD\_B$DBbNAB8_GG El]/HEbZHmHa#BC9fACi>Af?kEgVA.K2k>0LoFOrJTtIYj ~nyђۂvc~wz \]_hLUqCQ6v&DP}vZDOwBWNpy"BKjxAIq]|UklɖyKkqe9shriݎGpnfnxg߁aaxW$YvZRvq_NXxc_`zbiv_b/w_X(x`jWuP_^!u^Eav_^w`z_t^dtbjVseim`bo_w_Uq^I`-rv_U_p^~Us3b]jWYscSivmghkzjf|hdzjd)oh{ljjwrdrtfUaDd.]'a1NQUGJR<>XQk89:R ;==S<@S9#AR;AT<=U?<%VNCA[DE_!EH'bDItfBeHkVDEMqBtNvDNt0GMsE8L*vDCHrLKmNKcqUHSmgkNN](}rk5nߥGo~ixEv6p񖁄dmDx 76~2r%nۓqħ|nTlIͤ7wZzX#x2B~% @1|`xӦ7vpѡބAz[֦ Bt;uey|- }`>p̶\jjalھDqwtq˕j qatŗt[osz=g}|h^a|c܄ioKW`=mhT~&p{5s*r`wyʱruXrn =tkuzdZrmahx'0}[觱ʹtxr2oԮpmĖmGv2&[r/nkWEga礍M{4ϕx-p@Kx%n |o.ZRwM5w%VHzd\8b{VX8\[mj$"i m,I)qhp qhbhfu]Y[gtFm*J,g*mϭSo/\uovml{ܬ쎉s0&fsFYÉ`mLo9HixILjׯ݌*vD_{sMevi͟ @nז,bwSvڀV֤W> !j[ƋyȤV{|z~zߡsBlfd%{r: |cu"wc/W[S&p*,xs2npW0mtE[Gh>kG$fR=D]BH^=B]A(EbAHEmjAE;nAHp@YJUoBLoAL#q?N rESoJ=YnG\s`ixnpqvx&7w=!kv܇)]7akfK_VoTGUuEQ.vD?PpuFHQuB%Or>BKlPHjM-j+d\jqsjZylvjo1jwlj prȉmo Ccb }V]uW0z=`0P8w_Px_]x=]`xb`uwa ]w3ai\t]_/u ])amsYWcxa!^wFb.dubzhsagr abr``Kq`cEracsca@u*dav!ec|jl~kjdkj|cvfhi%olT|ojxUhek`^OPQ[CaNUjCMUK=C S"9Y;LR:cEEV=?V=;^XD@=+[TFbGc(EMJa @HfCyJh+BKSmKENP)x?jNwDyO[vAKOvEL{ DGKzFMNxESO)uFPtWXnwm~mzuu]uvTu۟+,oz(Eހy2hi זtڝyvݥVxNЧ>~~a/wjxggÑՈ4}9!qYn :t}U;E~lwzβ0NBjƧx{}=ƎLzx8xKZ{2-tsF q0qAdo'@Fn,I)qes_rxyVj`tWQ3ywKk[ms!vڹw٦}mC} qKm͙*r܌s|{Mxy_Kw)2t*s|Dy yIyȮgxddϥ(lje 3?ձ^٦ǹ`Aƌb҅gݜ"vraՁZQgӛ|meHq*oJ~mj7m>kǼٙmoOg[z|#PK]u~iOjcbjL i7M{^ۜk^;4j nygrʹqqӑhhf˨nsdyŸ/|QpvI7_u䚃zQ ƁɌĢ}'yiWllPhVjpWʼnmJׂKcDjUtqƜ?qCsc sġr[m*Ũi-ަLqFy9yWiyYtvZ mkߛla]&epny%Y 5qYUV>nVQtc:惇s\7nƔ܀iF=wZiHsSpM-}pP/:z _ך ikݒ_hfxepJo3]1*o[F{q~ulw_聸㙾 [p ^ޒ ڊ*\jwRYydkZ5qQ~Sy:DckIE4bG,A$]?WCd;"Ff[?Gbfu@G@e?Hc=[E5`:AF$bBHgBvHiCHj=GiM?uHi?@mIa@I`?vH)jrCJJoBIsB.J!v@fLv>Nuy?Ou AMwEQt/GRiGzRgS@/K_JLJ\IHN\ZxdS|Wlӂ_e=mR\pIW_nHXjrEIIDXY@(E\@D3[CF?\mCGG`CHHbCI]cDIfBHjCLpBOv B&OvAKu;@Gy BJ|CMwEOwnBPxuIRmwMNkfvcmqcffdzVlp'c|)t:OrFmNmyZFa%;GpG9xˆz[CzcqbƵGxI cpv`dٯiR^tż_N|ڬހ϶+ 7 F=y~O{}y|飢~dPނZWw}p!up%p)senſFqll@%Wȉ[(q_ ~آ?u[NƢϏ`jg\};ʂ~%E~T맘w<֨R{gtӨNJ2^Ȣ`}UŴM|&؇ɉքzOզF 7!ۙeE.^| YZeZ{fևVhrk”pbr ՜rNVo;:3po_ʠW} H98lODdg|fy}a^rtUkwd̩5%kr5kM"psllYRqt?BDce0C`tǓN yP;R`QfhtmiyW} 7w]d bBhiԏm|rΕm=!6` 9ki~fP j[qdvnsjtG6k fclsZrLde| bNCzg %rX͍r~RǑze\n鞬wgT^2oҏ.y_qqpd mnNY_AfEaYiJ*e_I:ulU1gF[ry!pKuoi5pa vr{S{9~TJ3˒ҙޱ+}0ӌ%E~M~hjkYlTFYWGDaAE=fpFEfpBdCds@FgF?G i>UGj @I k>Ih{@iJBk@*Jl?ImnCJ"pC!JoBFImq=D8mAQJkDLk@CJoBLuvCMywB=Nv:BPv@!Qyw&BPzA]LOyoILEpFEMb F9J]aHGXKDPL1DgNNOe_hd$?jk RZ^qqJWnXJN\rI ZuyE[RYuEPtCbNqALBkIO onK9L5lMdSfs~Cj]b|n[Mfjd^:je cbbac[&{g^Tx_}[y`[sx cX`wzd])yzfbx`A^zc]mxa^x`c;w]a(t^Fb[v f;icxAhezddbx"]_tzaEd w{bMg}rhstqj!ult`xiEj%y>igI}=kg- pA?WfEHhZ/AzD}YBEzZHE=H]CGG!`CGH`DNF\EFIdoEKkD]NtEQ2yFQwDxMu*DM{uFO u3FfO7vuDMwFMuNPsdN6PkVoWdgbVӈ>i0ۡm:tq4]wxQ/v}T&[qIIy@qzĢwv$wthȧSz\flqţCb؄Z eYgauC?~%Ɔy;]yrð}:D5o {Aħz=kxQuyH~x n|uAr clUmI nۿGqʦdyػ"m?/`fǸqy ͩ=}1t]|T`adeʂ]nuĨ5rNtTZb!GMtY~vfuڿ6s^颛w v[ã|C}ϧ"{sɻt$lN^N%zH%fS|yʂXwU/F1čLw)\@Y„l@PʇoRb|^.c_Quœ^wru=ϙk#h;⒭bK~xEŇ`S6dT=8xzSl_7Ae<7n}Х}x Wq">t@ΛuXmFYl@}6|W>7g˸9 )_֡#NTP'JΚ^xf~fHZk/:M|sءu @j9ZBG*^H\y kǿ2Sqeϛ iy#i+̜m̚kVi =bei͙moLՈmLu~@rqȘ3;|x o{ruoM8cьJqQgaG刮kJq[Xkq][UiDZpmqrljqi~5ohqkysoCЃEShÉgd2"ȋ'® NzD[е{Wulod8dD{FGGgMBVG&@SWAD e#PIpi?JpkDPMqEN7sALIuAM{uMB$LsD=NuBLtCK5uCCLr_HOsEMJtDNyJEQiz?Nt>BPu?xNuw@oLOz`AIGv}FKWmDGj`DEva@=VD=N;6wGCDnXO^d~uy1|]?W]qfISp0K[tEJ[LtHMUtHCOsALsA$LoC'M3mFcKm@[XNf%rO_t]i X{c\|w]l]{Ya_xYZ`wXZx{]`zja_xaE[t_h]wcb:w__w.`u_w``{2aeuwB]`va9bOu_dZbjxgbx^uaSz\cx:](buceJslrcnӀ|r v6zl)jx ohxihMxephkq.]lFWMnJMtD=LBsNnTbu|LX];CV]:cn$rEpŦM^[t'X\՞ !W2|hM}}\ka4dWw~vԘpFqI&sZuvYǸzVswq)cХ܋d~P+0k!4F\ʒr`rqwwqөb"~ FrFあf?K[~bJnruY{d1gwXߞw odx&ĉTvXћ\i`dNY vAoCtHӒ@;Y`j缵n=RsqݽL/tahEwƘrbϔqpHϙuOܱmtvǫ_n.P}ow@`eڦQ&c~6MV~<]^#Nh][hYz{oê@hmA4[Ё[v~g\}nW˓G{WؚL` nm56p5o\Ypn+l7׏ieyc?k giFZF@\_Qco赩Ÿs 林uܙ[rJ_c9|U݋s L}nLYoX y^Xo6rk4dΓuda}]{Eq`wxykxl# ^^_KrݮÕ\qzA__ah}i\rW9M^FGgj@D;gCEc?DFwi?J6r>JuB~L)yHCLLuBKKn]BgKSnCMqB2OtDNtDMTuBNwBvNu DLqA9NsBOXvBNx5D5NpxwF!OnwD$MNxA M{@Ny@jNv@Mv?/KvyCM>}|B Ls!DKGiBE`>ABsc9b:xW65O96sNg4c7QJ-Tlty3Q\rrIQ#tL,ZuqJ6^rQHVV}rzG+RYs]AKwwBKurHMXo BLn!J5OlaXHcsaN^#y`k`*x`]4t\TUtZYwW\ ax[jfrx]b:tW>p\ D9E\CAC$a@DAfAEcAE aBbGddABBc'CoC4cxE/Hb"EJgEGLoKS0ucLVuDJcUzsPEPpCOrBSN6r\GP uEOvnEsOyENxGQYwDIXQ6o[^`hsqkvxky>qdV3(UV]wkw(thĘqz۸pѵnٲ)^hy.idjSqҽGvҠ2vƆwnWuuٗkްl^VZpXO%[Bq.J`}r?Ju?Mw@M|yu@L5{D5OyiGPr GPqJDO=r DOuBMNsCN(tCN\uDOsDOs"D@O@t[CNOwB My;CMuALsD_KiBE_{?IA\;59SI56Q344Og76L;Cv=AIsCLpALoFPPrWMSUgl[5`z`Z{cSwaPw)a[4ybkc\y_dy`dzcbxe\`px}aa v^d^v^cavZhv3[eou`bwceayf?\zSf^{dc@_{uc`wZbTb vdIdr@ebo^gDlKzpk^NW/fL)Y \ZH`V^dxc=ZtztgІTjJg*[MUspֻC*}VxMsUͣo=Ai?mƾ2kYc1~=<ŭ ϭ~-ݙ/plܕ_8~9]E?fZxuv]uz$RnlqyA|hxdYqaRpJnDbYhDds['_F_٦$o?r wgPTaVbI`Jf-n. pltǾfl&_EM`0cԧkɻZti{|{|8;|OУvĖ| uG8 SU |ZjJbӊq&1|hzbs)~^LJIqay"oOZl\hJtJzSjz%uq-pn.PmdGmҰ-rq5rhtkrpژmb۰ȏWfoh:j?bUv1Kovfѕrjw3ݡıϸߤw[n.m:ph zb$*Rm`sʶU~5xjsd 1~I`gipfr>j o!v|ŜKz v̙x-pэgҎh\>k$Qw'Tu rnӻ o2oem3rI}kvboV|9lxugs*d5gԌh`ډok$o[Q"xؔnӨA|MuLl}Nz ~MimC(m`w dT?t_P]~_"`{RuQh8GI^BHeCkLoBMtoC7Nw+DbP]yuC|qAL:|CMtzAqMx?M|z>@ P|=NzAM%z@LgxAAOyA.N6tBJ3l?5E_@MB&[I5/:T05eQc69MQH:7M==SLRjJSjloJTPoJXsK\wHYtDRs@Mt BQKBuDMrxENpCMTp#IMM(gbV\v^hQ9fO|nc}Qy`l[y+`$_z3_]}bdz`bz`!ay`~by`,`|s&Y\wV cxYObzldeyaZb}e``}Lb`yA^9_y;c;ata]c2q1bczrzd`jr_^q]K\crRcZre"YgncM[c2`AcTVwbZOcRbYIRjEDS|oD StoE(RkHS nF?SlHShFSs_dGXF^IFJZcR~eq_^lwIBUk?AHc/=C\@Dc)@Gge?FaCJ_=CG(\:CEYBHeDJjCCaKsESO9w FQbзjwқDtBm܍J]Na\1kW|_ol|0nۖmsmq/W%oRwܐcYolƝ>vmbs'k4>q;qr\uE{܍ۇ9ǜ||iIjdmS'o ZpbIߏm|ĿU9Ɏ#~ۂ!0xPiXKxVi~_ڕ?g!q w/zT|oǺ{p5nuߪzu[XxJMu?`LW ym(jZg>j}MTvwKOl0EWKiC1Jk CtKn2CTN6q EPr,?NrQBNvtB/N0y FNz(DMvCMuBCM xBMHwdCEL.sx@Kg<@AG\^@C_>A\7=Tm8AQ@BNh65PFzKbdHS)mIhW@q=Ks[ uL{[w:JYVvOESs?SNtAMtUCM_rBNriH#O*rNTQk^T_t`Y{iaU{E_4U|`]:z^X[|`Z}ab{q`cbgb:nh.tehv\_x|Z ]^zaex^hw`Wb0{p[h\~aapzc\`[w]=`ubjm`cqd] rNb[o`<^latZrc `d\XpTY `TIRRexF\PfF%SiI)ZpZH St`HdRUpFPipGRm}F}R+laFTRhGWhFkYgFVigHN_wgIZeG:UjCLh>C:aI>BS^?FE\tBG_ CFpbDGoPߓo1p1qSxt΢6ȶ<D٨BS} m(nNԕ"vW\,]ȵm/ ua&lbZ>#fZkݗko@ݜj=Loהtͪi2{XĀz\1ymoԟm,g~|d0mo8rqÓ/j?]m񞏊kI}gƚҀ&`n_oXVymUyÙ7cvbv!\?ir=lp^ldtGˋv@AaxkWЌxVᑞ|^Cn^Axb%ڮx~M2b\_pg:It+eJlvRيqMכ^]qtQuݫˑjZzb,όn>'}ٖ4lc쌻uTȈooSaGKdUِqcdvElXяmɗz ڇNԟQULF|@x$\QhIrLmHPr_ayZ_wQR [y@KNp.BKmALr;BKqVE~Mp2FfOr[I#V]tG VvHA3OvdCsO*xFPyCNuCMasCqNsBOu3CPfy5CNxE|M5xtDNv?DO[v_DwPx[BLy@zJQvDOwwBDOvAN^wBANw@Nu=DP{u!C>NujBMow7DOuBNp|CQL'd?FBE/bCE b=D `"AMEZ}BbC]PE??TF9JaJyYVq%JZujO=^v/P^sJWtUGSt@Nu?Kt9DuNr@L-s<@MOtACOlRmQ^jW;XLx_DZza\x[:Z|aY{ aP{a^|cf醔tup$|t[su_Yx a4V } jj|gzq$vV` |[[|^a{|`,fx`fu`zfp`~cn`.]k]Yf_a`eV`sfa[cQ/Q*dEZNc7> MhDHRh9H Si+H6UqQFPuFOuD3p(X}!A#lw'}C~Ȧ{oK7j%eHa8x[FJf_㰆mZߜp­pm:oqܪǏkq0}"_6~`[coƇpStjjџk' k Jm񷭖|iëOPaԙ-ZmIHB@pU/o]\(dN돌zj񗂆oX}dSm9T5m;RsUnrS)bfrh|\uK}[ƒ;|*T}[ZgiuXp խ̞Sw>fXbkcmrYiS?}a zeY^۱oruwkV Y iasZwlY]Qg{b\tSqYjjZ\{+s}\L+֜2YHWJKu2@ރX횀u1s~PO iGLQsOL5Tjs9X]YmLNsdEKl=FtlPD_McsiBoNw DNuOEMr5E NsEOvDPyAN,x0CNwATNRwODNxvCMTqEeNo@MrANyB.OczR?-Jx E2N=wAeMt+BL&x?JxBGM?xCMuACMtk@XMTw@MxBN]v#GQueDOwPCNwBN*vEOVrQBJgCoHGfAEag_C`GdBGc3MQ6nPQ;hmDJeo@M3dtIg[RqnI\@vI\vJ[sJBXAtFRuALMxDtO)wEE9OtCM#w9DNNwuAMn{ILbeU\Ax+c&\{cZI{_X[|bRz"ajOz]aFZS{rbbbMeGFjOiDFWPpiI2VKr9FQtsEQuCwQ qERsC&P!sBO oDdQnBURm?Pe(@NhWKuHWxKZlKm[gH,Y kIaYmH_:lHbmhe>kdjr7kexooX]>P[Jk n9ve9&{vh mnWf^jУ&fɩ|:h{:bp=Q7s[Y ycrlآSl.Qt;{ew mУoElt ˒r'xhj[lrƨx/1|9ytϤoI*lZÎqm젒rG0Ioux{^r=UiI=\H)mdۜ2lR~-]u}bwÓjЧ=c^@d8Yj+n ߄cXgwoȐq inj~klZUmT!lpj_odGeLh q.8{ǨikTOlV^&x@sCHpBkFoBoIn+CKoHwOs$O Sq.I.QiHc[mHG^mH^"sH&^xFIXYuMvY2uiG:R5u?K uAtMsDsOuCNFw]DyLtAJq'LLNnVQep\YB{b8Vo{_Q zaRxaa[x^w[kz]`ttSZpeopr sgaVHx8]^v_w~fZE{\Z-{u^bz_fxb`>hwn_cu^~`s^\_o]`a=f]g[\rePpS+dAFLehAL>nBLi_G=OUhDMfG=SlG WnF3TzoamlߊdK~WzRO{D^I~cju˅9´}Ĺٚu̖n{i֮Rp+~n3mj_ Vph>9tlj(o٦$oHAn[oOkyTjގnkqabŘzy[@uAlCȉN][wOs\ًe[4pjћqo,hzd񷛚mD`ptlμSqɔtdGNUuD}LuFN yDLvDvKlv?EiLsH4Qzs}I\sIF`pnI+^oI]qKo[qJVo HQSs@MwsDNhtODPtG}S0vFO3sBJktAELtHLgmaVU1Zqv=bVZy^Vyw`\u__}xaa^wI[WYvW^[x$Y'^}i^Y|o_Zw&ZbuzU"^~a^xXWyZ/`uzZ`G|}`c-y^+cwXa*w&[]s4^_q8[`mk(]bd?YWG^RrU1_DL`sH?LHtCPsHXV{q0G-Rnoe?KKq9AMpDMiZURn^MgWzZu] aJx_Lfu#`gw/d6fw|_3_Tw\]Zx6]]w\\hYy{mbb$vY3cz^cxbX:\0w9X.dawZkenwWbWy^[Zd"y^b|xZ]_y]^}^_|j].boj\$_2\VQNvQOBMtS@?NfmBOq@pLm?A$Nj COlBcPnGUr:CbQ#nERBp @Pp>MpCOrF'QuDPkrF9QqC@Pp;FQcpGTjpB&QpnCQuCO sDgMn=F#nBFKs DAO`xBOz @ M$yBIN{B NdyaCNxwB3Ov@NveCN!y?DYN~y'C9Ow4EPuGR=tJ\xI]Eu.FXuqIFToIURql|[ zX~2cWZios°.s:nk)z4染|A_y8Gzzd[r즑~dhd>,nTRpµ#rEޟw͡+pJ#i?jnjb&eWt]ҍp^ŋrUm}tDT~x]~\"d1Îg~gfHi`heƫd[֕hiaxJ\ yk8nbf,cf}tYvƜpae4ho2k'yk?:h6De`{ j4?bu BRbS} bRU;c\>larćq[:k?c*i6ku_BMRrAMr'B,Mw:C!NcxB-NuANju~CN v D=Mt(DMv]@/PvCFiUw#IYq/Rta&qL`EqQbsK#[qrIfWBr&APAr{AOLwYDPsH#UPqEQ0qC{OqBANOo?JiPP b^ VY/r^ ^xa-e)tYaw])b4wa^TZdxJaXTv^]Ux`]xabu[`Bw``uE]`wB_jex_Ej{cmcyamz6efw \"Yx\a\+ _]5v(ZYloY]QuMJsIkLKBNO=2Ob>kOmZBNjBNkBNlBNNo4AKMp>WMoDRrXDYQ*u.DTPuF.Ry-BNuDPFt@M7oUAhNqFEPs!DQ~qIDS?sDSvC?PrHRqBpMzqAMuB NvYBMvBMxBNwCO4w!CO mb,zptJimy,mxcMucΓDGב y*M(}/d>|SjeÿNu/dsJŖke_ؤQ^]!f?qdOʋg}Kv⺒w\bw iuH_mxguow^'crtgLZdtws,\|DxЀp v_ g+S]:l&Vvz[Mu\HpR˚kh})fc,"^Nḑi!ls{mMfhՕo.tŋ^z;ޏ}1d]hb"g)kJv=rsUUuDSHrEF6k@JFk ?IrAKt]D_IhqDHo?C.KDtCLtGPsC~NvqCJNsCNNsDmPqvB PGkB^Po@Nv@vLyAL8{tCMNzDMwCJGv/AIzvhBM-uAMvs?Lw-BAN0yCN}BL{DN%zDOyC|N^uCNMpAMtCK{ BH|C'L`zBM#x@2LtBM_s8C/NvXA!M2y]B2NSwBOtxBPtAbN4tCNt D-NtCkOrAGS qLiZCOqDO#suCLuLFEQzJ,Y|?lPuL<&Mn@Ner< MCtA?Q2s[EUsDQuu1F`QGv!HQuD~OwCNwFC}M^Mu ?LnwAM3yAMy EO}BM{FP zF3PxAL/sGQnHRlpGNpw FLKzD$MNxAIMcwBMvAMt?MPuANNulArN'qAPri@Ns@XNr@Mt@K&w@Ot7E.QpKWnP^smK]jo RdaCoK \kI\lFjVbh\AOmS?LtDOvALtBRN.x@,MsFPimLS^`R+S T7a]SVsX&bxY{`wW0_ouaY/]s3_H\qZ[{`4bUv~_YucXte[u4_HZ|caw_cA}gm>oqx`6fs_bKxX]gs/YxUl{WRpRYWAHDO>kG Q>MVC$Q]3@hNmGB\Kn\DNvonB N*rBVLwC'L`zCMnNsS\{LSBCQUEPYhB5NnCoNnRBLqzFNy@.Hy BK6xE"OuBNuDOxFQpx\i_^m%F#TnZ=JpN:JtsI%[7zYd}IRuEPr\EP?uHE%Qy@ZKz]CM%~A M|ALF|D>Q{DnQJx3BYNx6?MyM/zy?%NwABmOs-EQq"JPYJqJZ[oK8ZnzGSjGV?oHVSrPI\UKuIStdHpOir(H]NHs HPbssn tԗt@KtMW^rdvrܗm#HLn5k nz\hI/:{rەgRl Ðp[z ~[eݛdžBc֗րdu˳u0'9Ȯp=ra2ށ_Y[cjӛpsnTjՋowVpA]ď}b남gupmx[pyZhӖ*jM?h|ۈUdDwqsˎÇT1\2߇SՒsׁƘ"Psxy7^i{HM)eC?B`7BBGgAhHp>mHq@I!s@~Jkr6@JoAHjBG*hAIr@KiyBO|@N|AMzbCzMxD NvB&MdwA5Lz?LK.|@M{CBBM y@NzChTiCV7CO{'?Kv?Lv@L w@KwAKu]BMvBzM t?MKs`>aK3xKBN{yEvPItHQqCfN,v?Lz@L9|?ZKy@LvSE1PpHzQkAKQm>;#Ht@MyANzANw@NPwd@Mx7AOt?PmEUkGZlGZnwK`nVG[mGd\uOEToCP]q:?~L0x C!NszyDNcy?MvCPGr@MoH,O9kTL"QcUSab#Tb)bqT_1bU^]MPT[ TZPOPimUUYNO _8W_Vc_Y`id\nWZPk[^:k [ajl ]aur][`jE\_SOnXb`NR?PL=MD=pQ2O;KN9I TES_UHT;WG1PZ]=E NdCNiCDOpF[PuD7Ou"DNvBNv?jNw5DO5w^F]QvCGUvF!ThtAOFm?N nA2P7r?PqMG!UsDOpDO#t1BPt}BOtBUM x&C;NyBMXyALyBNNxSB~NwAMw@qLdw+A!NywA?N x?!NwB-PvCPzq,GSoHXn.HUnHWpEUppG4UrIU2vgISrHQn7H}PVrpFP1vDOsuGUQjrHh]Do`dholb^Se sݡyerth3]ġo@| Okjcw5`ap^ fWm)^Eq_Xpw_Ɖ`mQ&hLamyPAanʵ_sxNqqprqkxkڨ)hLc`kcuJfDlʔh߭iݧUnZjܤߌ%p5ume>އfudr/-kqad j69 i~0\+qo.2x.kؖ-hrnkᘵih\cȚ'j2nn8zo⫡Sl^zufQekߡ _ٓ;vP7nUKEtLI[] VXc2i˔p8p}Gg̠X'cѺx5lQn>zqMn0}[.IiJ> pRP9_FujHxk률Ug4Nc"eŀftbYяumN}e֮5tqr h련Imæg?wҮzŏ4uwkvodP=l ϒD|̠@wVrClbhj2:j+{GGiA}Y'oԬnLqb\tk~,yeoCщi o{Znxaq|Mj 6t{H*|:>tN4c}[[rUwcomn Kn~|XΌ9pQ+ iƝK%}0zExob\QGMb6 AfCEgGC0I/h@vInB@F\ubAGvXBJoo>Ims>RHKk<>F#nAwJuICMz@ M|A&M|CM8{C&MsxwCLvCLgweEhMG{.AK|@L*{^B=NxBMxqAL{BN~AN|z(?Mw>;Mv>Mv=ANu7BYNrBDNis@MsBNhvCPBxAENwuDNMpDNnBNyu@JM|?LU},=;Jx@,Mv^DyOdp(JSei}QSlaEZiH]6fJY\SlG/VhmI>[ohGX^lFU%nERTs@,Ogw\ANOvCOu~BNw@?Ms>NlNbtr?OuDbQvCOwANv?CN6vA-N!x@LSPwqH[oR_`lZ-ahqld9k'hߚ^]gZtGNq+enlI}eVuR_<|gZv^Qy[bMSmV<eMqrNnG.bk&atal*ĆgҔF}!_z@W b]+g'ӛohs,tku]<t~l2$8eju:'lbΓstGvur횚qNFtpE.j\x{_H{{=y\{A~,|mx8>mt &vNOlqosH]tqu-Jar,5kᔉ%__(;m-oV;yQCIyrok3ә+yJS"]p`K[ ceJGThBHg->Ei^BGeBIcDDIYjAE\o}BSGtAWIoq@Ik>qGj=hHro? Kxz@M{BAOt|BLz8FMRzDMD{CMz|A+KRyE.N)zOBL)yAMKy2CMUwD!M vrF|MEy AJw>RLw=Mw>Nv@O~wHAOt2@MoAMu>LYyAM]|TCOJ{BNsC(Op-CoNrSB NFv>AKvz@rM}AUNbyBMew^EPtMJWmL?Kj?Hau@Ky AMxAINw!ANv=CQ(uwDS sb>QmAVg+K`fIWlgO[WmHUNdEScNGUudESchJ@Oyq}BOvCOuBlNw@ MuCWPq'FPNolIO\kKOe+K P\EHREGK >B$@37pCA7F"F A5K@HB_KJ2BMP}CKROM6PK'HDHGM>?PMHPDChC"CYL'PS;HS>BP/23H5F8Nh37K5F7RANVD"P)VFOnP =OdCMpkx0tMgK&c Mq"yΈ,ω~󌾝#I)ˍуώ,i)|8BSWEuaILfDGj? GnC@G^hFL6gDJaCfIcPD}Gh"GHi$BpHgd?AIc~@Igz?K s@4Nz@pOAx@NvBMwuDMwC~M[yBMz'DMBzFgOFw2FpPuBNuUDsNvAF)MwFLxB Lv?.Mx?MyK?_Mx?Mv?M[qf@_M kdEOr@L[ziAnL@K}BMvBMr@L-sH?N[v%>wLy=Kz%BO*ynBOvM[zUQY_xM?Lt =Hz8DNh{AVNvuANv/BOw@OsBPp:BQ-oDWSn%GZ mIYmJ'WktHVxg FV/]I3]YEU_@O#n>tKXuBDNRvGQ xANs=MrBMq?fIn CL'iBK`7A S97AI2L??1@&A2AF&6PBEh:DG8+EML9CO6@BM=/?IH6p?J~6BM2=DZ1;^?7DFL7BWt8CVj3>P3IvB.N wCOv2CLu0DOtAlPRt'CQrB|QqrAQ4tEPGsDNpCOtu [$ji+֜Zy izʛƉׂUTlovJ[u4 HjDIhCGhBIj>AGfEJgEdK\fESLhwBkF_f CE__BOH/^@"J)dcB LinA9NsBOvCOsDzPrAJNsCLv=JuAK[wEM%wDtNsaEPqCO r)CMuBKxBlL*y@Mv;Ku=Kz=J8{g@dMxAN~trCOJmCNilwB=Nv@J|`AJ%|CM2w?JsCNsD\Q9v@Mx<@LwBNuGF{P{sQY`"~zN^~BNlwAQLvLANtBPsBcOsvAN(vDPt-DOrEPr,CPlpERoHyWp9HSkGTdHn^]dG]}YFVDa~CPk}BHNrkFPtEPrBMTs&BN+w;DKt}@L~x=oJtDLh8?JF`:GIR4~EdI"3BE6AH=<.D+Hr<,EI7pBmNs8BEO:@fM6;J7?L.oJ$VJ_leJHuX&VIU)YFRxetJ`zz!intVH^N;qAGnoP@J\v?L?y=C*OxCN'tEsOtCOtDR#uD@R sCQBvDOyBNuBMuBMku-DOw$DNxdCsO*xZDRhw\A,PvLALxK@J_xnDNTxCNIyALMxAqMxBO5xC|Q)uDPuD#QtEmRlpGUjBFNUDO$YERgDXS#ijESbhEoT5mmFUpDQbjGRiGRlAHWs?HUrG WqW^Knd/g_Gz8u]aimMEpa;tqnjź삻қ#mnoxoFko܍hSMjޓ~)[k+K|/gMgXMfl^,&|ggt"qeTwko+op嚁p ptȽTpEjn˜ov!eGu¶yTS>taWmy^mHaai԰֕}k}i1rW8UgmoKviɩUzCrn,(hl߿2rh<«LhfCPh홎qh%iY&Sm@⛃tuj_C `RؖcXPdFt8ђzPqSj3${v}6\jvRRؾsﶞpVo٫Opɺs'uߘFu 6vth}_i2t[vZ~.b\~bNymW*vuQ5tTH|dCf暑&h0ehǭziJk_ٓFz)PnuNNXuuNLb̒pE:k,eX#foui\fBfƓWfrYl[}acTZGrTxJàeoGeٗz^ҡnrڌUm̅zZox}v8ubxYaq)fiheXtW$qt[DzkWtOle&~51Q^\ٚ~:NbcM}z{g`Z_DsLe.?pINmcEHiKDSHgBHgD`Ij>DGJjDGh-E\Jg}D IdCFDa@fFeyC4LmDN(qEOslEOrFOo$E_OoCOrjAhNuuR?SMw=Kv$B!M#vTCNOsCP)qrAO1oBNu@Ly8A{M>yLBzOu@Nv?Lx?Jz?Ky[@MvALtKl>KK,^;IFR>GNR@G`R=!IVm?9O|W%H]cG\^nI\mbrIVg7KWqWc-N[c}BMVsCXKanb>Jtv=M|X=GNw CQtCBPrDPsuFR.sEFTrsCQs~ANtA@MsAL~vAMydBVNaxCNEwCBPvCRu~BQuANwCNzBNVzAC6OyANw@Nxk!ljf]z4aAdIn `]CMŖM}F?w0IŎ-uWs|a:u-9GזyWpV}0L!}ܳ1hmL c8;2sKr%;KvA`uts9upjvexrFe{ _xd G}]_mnIcXER m?H}pT͜Xe}jڋp崴o" j"ڍlZR]͝]Sy.RjDxU셌^—rpq?f:xXE sOTDrGW?{-cPhNejxfSjArj䓧p_lbEGx*VwW'_Ζsx*U2|hTr‘~TkGYgkIY_oI"[ aGYhHJWFnCqNs=H v}@SKuw@FLy>Jxt=3MIz?Ks3CuObq?\J Y<~DQ{A2FM:j@D@T8>U8`={T!7!CO:SBdU:jDW>L\EYi GYk~D.UnlFSmAFOqDMoHRsNTnXwNGPs=)JvN?N{ =^OwAQhuAPrCyQsDRr_DRobC So]CrQq|BaNrBRLrAWKuA0Mz^DNy?}MxuD0SovAC(RuB>PvWBOvL@Nwr@Ox =gH)z ZpWa bucV*DW|NߎvFSnq`$izfp"*&>v-hmsTm3jF)btiuU+xy'yÉucRJmowrĬnf֤ ^ڡf$htuTkc_HtxUYc r<ay$Eu仭>lRfg@G[BlxUhczJkUe}c6N-dXit)"lp؃Zes KYsbTuikjޔlvաwxmntll\oʨh`NMX"y7["zhǔ}cՌuMY=OMmKPrh Ytϯړ;mҰm}kւ@ỏ~{7prrjsq(tJ|)~hr~70|H{AtC`{o8OStjFCHie@SHEox>FjAcGDeCH(gBDIlDI-mDGIyiDIiEJ>k!BdF-iBIjBIXqBQKPvgFxPyyGRxE\PtCN4ttCYOv COsAO=q=KsAgM vV?dLvANx=FMW{3;Jw2@+MtAMwTAL&vCjM!sPDNuC5M?wF(PyDOuwgC4OuCN'tBMWyAK:zBL4uMBNt?MusFB@Nw@Lz`DF6@fE 9AqM7;>rP8^?O*4=?MI6=*P7>KQ~7]NqAP^uBvQvBkP w6@pOpCRsbDBSmuCPrC[PrBRw>Pv4AZOuA0NDvYCMzuoCLWu^BzLsC"Oo BTN^AM U{A_OTyES XMFLVZ]GDUaRJ\&hMY_jm4IRqF2O*tEMsFOwFOyw]GQnwVHWqtZ_cjUie_qr2`zCYx<.v1ou#lWhKiZ53hЬg6fR{lqThzV`!a,jf}vIup"moQ0vgrürS|{pU}pqDopVzyKs o;puҠyoM}"uėkѰH8n/uȩ,{qRsIpu}yz{ӦvѢzqKnDZe.V|W섟_]eXo_VbrTeP4[^{WW|Vl29yä1Nk`_WS+vcGћiYnĭ`l)?=p˚vvK|=t<5FgcOXh&]e4Z`ş^]~b}[wg^tfs}E&|MltJݖjej>ƕn',mZlߣhhhGnzflۺ_w+E{J\on5bap] MbZg\iZUtܷjxVy9dqTt#z}&xDi~chPf:E`v'-q z͵{w@pϊ5jc~b%tczux~9:~Ƙ|}S|~:y&gtQE;RzEGk&EjGiCIlj@EgC HfCH^jCI5oCIjvC|Hc{DnGfDFlBE{iSAIlBmLwkDLy.FPzEQizFiPw`FbOvCOuBOsBPp@XNr@LtU@ZMyu>Lu>Ku}BnNu>N@s?Nr5CqP`tHCO}tBN(u5AkNyBM|wBMw@Ly[AMvCNqENPqEZOuGRvCPcuWDrQt@FOsA>N|xAvK|FCjLrAN'pAjOv>'Ky@?Jy{"@MxF[R$sDOh2D8PpTAqO@wB8QvBtOdsCNsmAZNqaFQqCNr@Ks`ENpnENnCNr/BQ mESFjFW7bsI[-ZJXV.MZ^FKAVhk@L sAMu@J8p?Js?bKAxN?JJuALlAJNk3ENb?HT:A IE:e@E:8AS6=Sm9=9S7:Ra78qT:=U8@S2;AS?C|VFMMUS>,LZg?P{a?vMyAMnw4AWM0xBNx=Lkt>;N(v1JVm}HQ KcWANRBFiS^REUSFZZ\MK^bmJ\g7H UBpDNr#DQNs(BLsFePIt5I6QtHVyvUZ pP`e[gNqndy{e}41|[H{f|"m hwgCݕb@aOe9˜l1ms%jphÎZiǷxlr<"h˸i嚁pzAs؞*s0v:=ry轨r]ns*F(y\huZom#֏iz{o-weuRFkb9f"x[rjgdrӨ|zFduVrtq\d㫯@\Yأ#Jcbb igm0Uvh٥[–zwIiLtOow6U4[lƅ^l,i½7naŽpގhKK^c2jκx2ysǗ;j>fƲiD^rfM`2ځbS"VFf pQ9sŋ}XĄ #*Ş oKl}ooÈ5fgkvIzL} zi󣣎Bf]kXn)pkznڿ s\LGsPFrsY<][ͷBÀ7t%ρi%zrdi)f_όlpDImϨ-]vk{F{4p9tkt{b{t:kz%ib|+}{ ~*zy~|7\g@Hy3F7EtF'GlCEdDEbB#F'eBDIlFqM=rD Mm5HLlgQDSFcCEfAGc1AJLnKAKxBLzEPb{BN(|ALZx:ALtTCHP s?C}QoDoSoBOTo4BNkt?LtLB#QvuBSPud@LuDO3sB]OoCOYqIP|sEIO9sDONv=BMwfBIxBM{BOw@LIq{DMqDMu)DOuCTQ rB(PqBoPausAN"yAKmzEOvBKO$s>BM8w=K y@hM/x@NwBPs1GRkD"PmC:Os>DOsGQlsgEOsE4QqGSmE}Q n$COoDRPynCOoBOnsATQnD(SXjvFYaaIr]XKZTK[a[=J[]iFSs*?M)r-:JpS@Mtt?cLtAXNw;KJr:=KnB#Pe=IU:Rz8V=R:BDT^9BSYFOKcuAMsuBtMsG"w>rYl jڙ2h洟d׵cn]~-ʧ*y$qĜpBnVWopp$:osrWt.jsosWsM}|熸=~Л\}|~x[y?s v S ^}CKo1FOxDAN wOG&QzANZ|yAN{DCR+xFUqHFoWn5EaS'qAOq@MmtY>Ivr>Kv>K w~>GpvDLrCNneCNo+HPqJgP tRE N>wWCKxHLw1C Mv\>Lov<'IPtFOwAoJvAKvCPv DqRtCRuAM:wA LwSDRPw?MubBEOx@NFxAANvxB~P-u?O9pWEnRn{F>QNpCNs'ENukFMunF}NVwEZOuG!RpFnR_m7DPOoE,P.rgD/OAtCVOv\COaoNDRjF[fI],^KT`f8J^dJ6]jqHYnFRm;M>q=N uAN?sAMs3AcMo@NPw>NL0h>JX;VGKC:$@GM1d5I18#N4=nN19lO29Q739S0 6R5&;SQ83EW/=HiC{MZBQ[%f"GTr{ER{?DYN~yvE'OxuCiN_vCOuE]Q8uB"OrJB:O$sA$PFtETrFUpQEeTpE0U%phESTn0DQkDR5o@On>{OpMPsAwNAt B=Ms@LrCPPp}CvPhCO[t?NM~RAORAOS>KQ6BO QVK<]]JK]fTCWOnCLLu'CLrwFPqsGDRr"IJT?xOKQetIQ m_m`aeAd[I[ٝzW» yttϹn޵mNlk meahёjQ dVs%shHgq+s[wHľ2wnlyox즈tyv.xt|& x \@}Ϟtb٘^hwn7tAjcp`vv4r顩gefaj޵0]si-x9>%Ǡ~Bzy:5vQw#smn+ j8g 5qY;o*klq v gz0(w[NpvAr,msls2swǙ{_=z-Ma}?I hBo]ɀ$]זyR uQQx\Gu쁆AtBRo`an wk[nOskәpI7guJ3jBgl֒jHf?iڳnwҶpՓm=yrmV=p뚇p#͆keomo{qp=uu~ՂK-~-)|~zq~EuLvh jkGPMwFhBHfDXKaPCMo=C*Ox)G8Pw)G8PwB)O yb@6OxVFLt?L/v>K){?VM1z?Lavj=wHyuCLJtJ@MvsA{NsCOq F7OsCM$xICKxLEKs&AK3raA?Lv@K&w?aLvBOLsvCKx6@(MzBRwAPs@Mw9A6Kx$E{NXy CKNuBNtANv-A.N6utBO"qUD+RqCQriBOqEdO(ufEM xAJzE(NBN{C*OuC PqDWPrADNEsYH}OSvDOr:C RkHRfcHX_jI]k&X_elbRgtX mySesFTQ>^>QNwj?ePrDRq\EMmBMoRA#MUoALguNsE S]rFUm$FRnBPnCCO-oCQqsCQs;Ln<;[Mn@QdnCUmF YoEQ%rFQvgDRwKFUvkBPvAO{c;CJLw?Lu>AENr]BOt.ERv?C Pt>K qnDNgsAMns(BN)rCUjE?XcpC7Q?S`AO:Q˜u㯖BrSOe_g,e]rh#Kk;Nܓj}+bqjDݗw~L5#n_v!요rrYb_j|\YčluGnLK]qYPYwb\aks>rox5nJc…]7/hi!kfȨn[sѤ~rnFmpۙىojˊm섩oً&3k|}V[~{}\}{c~zi|fpOi{N_INbpARA e ?#C-fC#HcA:Fd]BoD~bzDE1]2DD^bD*Cd9D7CfPBGyhAJkCNr8FMOtDNsIv>tItT=Ks= MvsxK|iAKxGAeJtA Mv@MKz>MwA#Nx>gJRz}@ L|=Kexj=Mx>{Ny@O|5@MM{!@KwbCzMxALpur@Ls@Mu@?Lw_BMsYCNoCqNpr@Mu?Nw@KNvBNivAZMTuBsNtCOo|GcRmmDPmEQhn!FRmFHZm+YkyLȄyetyoOQlds@VNu^SGZmj6v#Q^azCQokBNj5@MK'jg?H$d/=HV)6EP4BL5@3M0:XO1:Q4>RfT 64;VB'Mrfyi$̝@ɗ\ sA#IA\{l<4IUjVD|OvLAENwvDPw)CYP w4@NxCO|s EP)oEPpGPn|DcPxnBO n#EPlCPikd>,PQjFTjEQfDFQ&lBNkFnQpCQrZDR7qC:QnBQDu(A$P3y3@M\|?HuBMtEKQ@oHTmFTo9CPO@uEUO@rD=Pat(BOr3D.QmHT|^FQR>LQ=IU?IGQ@F{SZBDVWJc4HZg'IZmDqQmAOMoCBNu?DO[v6EPysHF7QrBNrH*SDqtNX8nfNRh[Tn x,Ϭzu?scĺ]*ɗzn}^{cu{Jh޴=`p+7nhn1bjf\ofd`/C]衼iۗpw^wpPƠWj˝!jkVv(zr4n7n xj5eneCbcr5)}P|Pp;f5Z"uawd.\rK=Ե7tT\y&V)Ə3eٮOmk!JhϢڊ/c?f~I^ hL剆wgR˨!všbɣc&hhK?pл'm:`hX xY7|pTj>t\|Nf_`xYiVOSpƣm2tSToLmo ~h˰h%ty߭lw\qJr at)qЖ~Ttǐv~<0~|~1|p|T}6|z8uxFIprgbWlJAV8B@ b@GDe(AGd@"GfAEcDJF]D4E\CA`EFe0F JAjCkLq FO"y&BGLyDDM*zCpNvWFRyDuQ{C,PswCPrAmPpB@Q2rrBP'r1COItA(Mv?Jy @Lz?Mv>LtN|qAxP5p/COn@Mws<*K=vN?KLVwAIMcwAL}vTBMuBMuAqNv5AMxALD{@ZKw@NPw?\Nw=YNv< MPw?KNyf@rJvQAgLuBNtA8NqTAN[s>KsAM]sBvN4r>Ms/@MvA+ODxLAENwv(FNtQBULr)BBNDum?zNq?ODpAPq`E]QMqYD.TsGh`ujxM8‡g|t o#Ti{ALU`AN gM[^LxDP#v:9H)m/CbOrl>#MJf#@KOa>JY<KOV0P8U?R40qS;PBq$BQ nC!Qtj?4N)mBO-pMB}NqODQiu;EdUr@#Po@^O{sGRQw:CNlwCMx@Lt_DhPrEQm_FSnCYPs@NsAfOr@LzpB9MYlFP:aLZ"Z KnWYDSO{ZCZPWDQ\D"VpgHXYjFSj%EgPq(B:MuCN]uDOsEPqFRqINRqCKHS^p`L!XnfPZgaSWma'Q5q[ʢÀQX x}dC}]avQcٖ)*d٘kVnbёtm㯽j״啹dphϰĕfh@ e ЗTn񸷜=J|k|yvƷ%6m 'Mq"yr׾juWmrq!,w;p~dž~1ўv(qiu娄|d͒{Ÿjde[VSEp~s3dc挂[kSo+fp_Eo1hmRϑ%lO-WyF_u=fZhriR>n dpkp;@lɩjh"{aew7Xy9 8/Hۮ֋JvT~bnKd|\˱ޗDyɼxRf׍ajWEmsiVbkەnkń cfsX /yGt}ʂo^Ae{Vjlojf\ڛC`ښgdvlґ^m/fĬiixp~v6uwOrߒn,pٷEuߚ{{AgrO>pSrtfvLv4yT򀯅 u~|by!~Jy|uv_fNMcFxCV@VCa">*Ce@Ggo@H}eR@EbB*En\CE\%EF_FF[GKh=CKr5D%Ox>@L;vBMwBN*v;CPuxER}B.PxBPr @OpBPoCPmEPxrCBNuC6Lx?Lw?Ot ;Mpq@OVo]>MjAMn}=Jvn?No?OkA0Ok~@Muq?Ms??Mu@MvCOxAL;s[CkNvrB/Oft`AMuB{M.vBNsB"QfrFBPrUB|PCq=BOqAMr@'L=rB?OetDlQ)tCO{sANr BPPs]? Nrp@Ms?MOt@)NvEbNuwCDN6qA/N[se>Ns>OsAOpuoDdQtPFYZrJJaPw+evA|Ox}l{\naOS_c|)ELj@I.k@L!s@HKs CMrBOnBQiKap:JF[-:GU_4>?NI4<6M6>N(3sOp<>RdDHbe HLfHHhNnDNw?Lx?MDuCP:uDkQ)uCPv4CrP^z@Mu@Nr^A{OrCPrDRsDETvCOw6>3Isc@Ms?Qr>:PMr >qNmAO$j>\Li>ZKp ?(Nfp&=xNj?nNk0>0Mo>:Mr>9Mt>Lv@MwBNtCFOtBN6tBNt CdNuDO[uCQs?C}Qo!CvOTdsMe`G\`>8FpJDLKs;DP5yS@SLu@dNBv|>[Oq%GVlBQqg:Jc<>K`nK36S:ABUX.$:cO]ᄳs_GbQoтpbhqtELQfL[<{3B>Tz GXGXdeSb~2GV3uF|QkE6OwjnCO nLRu[?IL2y?LwCWOrCNnJ@ZMq@Nv}?OmHBWOq`AK%X 8-FT=IUSC,OZGTcGXViVGmXkGTnC;OrBNyDOwzGnQsFQqH3SrFQv FPrwsIU0vMZrX ^fQVU%|wfj$sP}e$q<Ôs69xtwiMrz n҆l{^hD\y;krSujzkаE^|Rl]_ɏ}3d0qڒnyfj $l÷s{A٩xru¦5uJp'nFq 8gIjҶo;y/5{u%yf1ȿ{ t-fDhTa-b d h`iOhT5c[oAˠnjme3Pskߠk]V:b>dTr^bh'sQźz2kWA^[ Zam֊ÖyY{nz|姆ŦN:je@Mm8?Kp?EL%o>9M/l,=!MIk[>L8q <Lu9JKRu=7Mw=iMtB`PqZBNrqB_NsB!NjsB4M"uCLwAFOtuACfOpBOnDsOoEOpBOlmC?PlBOq@_O{raAPsA*QtAQOsClOq~GRrA>O|qfDP1unDOuFQsH'SqBLrAJu}AKt`AMuBOtFRpKYgYmip5tW}$ҙs>omPHYVyD_KqCMJrB~Ot@}L"u|@jNz?vPzBQ+nCRe@tOpd=L^:IY 6@Q5:;M5aMa~l{ZjZ~CO>T;fK>O_wBMEo=C3PwbH7VwQ2]txHRuDRq@/Nf FQ\k=WM*n?dNkBOIkBNsfSDQNlERmEQ"oEFRqCPOqBPpHBQ s>:Os:kOurBOPpwDO rCNqDOpC PpCGQ,v@Nu@-OuOC)OvNALw]CPN yCNq&FPRlCOnuAOu[CTRk,COa@rKU=J"T4;IRANY"GUjchGZgFYhEUjFUnD}PsCRMvBC6OsJUrfHRpGQOs3B/OsgH1SsPD[nT\njCQSV\mnkp[y[älz |+sw@p\z yyPnFh46B[neZsDm6w<s#8k^ֈQݙIeW7AxW~i~epWL6rۛw}C٪wmtğslroŸ^Tﭿ4jduѩL7txjw~X4}F'|v [rLXh̟e零#qrso@t\v˨tMJwwqfvQ ;x]I\53cc?o}Lr0xNboe1nd^nln›GËnT Xe-~, [RpIq&/noڃljʨqjkvxŢsȞlin`isX£h{FOw^{r,w6FבrpyHTTNQE_˜qbq-_}_iiDj=ѓp'XtZnP?kI6iYԙjjkqqݫVoٓ1nlvoXsV7sSvtϒu󦞐c}BSq|Ɂs%{~KAz~[x}x{nlzQMT}wBEe/HEbZ FEm`ADe'BFme@AcG9bCH]qCG\BGdABIfAK)o= LqC_Qu5DO5wEMrxNENuHRuUDOsD>Ou/FNtqC MtAWKs8?Jhs[FPtFRPwS%a}JWscALn?JdCOfNANBl'ANm@\N7l^AwM"m AyLoCLl>(KJk.>K~i?M)uN>jNwL>dMx>Ms\B.PnDSPoEOriFP tBLJtCLu9DNSuCMt?KXq!DYOsDPrD)Quq1EPkqCPPrAQr=NqF?N$sC]OsYE)Op&GQrZC(OtgDNvEOxwjEpPs F}Po/DNr B=MsjBNNtcBPEv=Ns{EkQr`IWmVL]ggYfqtx5ybio\dq>GMk@KfqBNNs BNrBNu?Lz|AQPy\D*UoEU\e@ZP^4ATabv=J\:ER@4;L3}9LO2:4PN;CN7CO\9?P7BS@9DY/Ce [nizL]bGmJS_=AxK`O@Lp@MwsHRpYDNdHS>mBOoAOnkBSPGiXim,qz8~ǪRoHffe=fzc~\Q=Xbooo)gLt^UGyPa_aqܯtb3p|S^ؘ,cxa{rn~!ߗy~~~}x}kazxhwK`v^ZtWEuLBqB>CkaRE>DWCB[BTDdXCsFd`AFaBFHaCD`EHdqCJciEOtANvBNjwBNwDP{u$IREuFVQs"F2PpsEJOtoDNttCoMTrUA Ksm@dKZsEOsBMtCOuBMqA0Jl CKoc@vM]@NhAQNg?Mi9< Kg8@L(k>*Ij<%Ih&Mw>LEsA NOqCNpfDrNrVBMsjC^NtDMu@K6w@Kw@LwO>LnxAmNv@/Ls@KerBNr>N~r*AN sLA$M`qqCvNrEZOsC!OsC1OtuBMwEIj]7oVj[}6I\h;HR=]?HKg~AMt@5NtEPrDOjE}Qk?NncCPnAxO&jALlBPk$FViCQjh>NfH?N\kE>P!oDO0pBNO.zE=Ki,;K|:?mOVv<M\pAMkDOkCOl#G4S'oHnWpFUFs,CPw@|O{BP;|$BMyBJyDMvB2Op]DP8j]HdVZmCQk CQSqg=~LZ6^G}Rc<(NQC"RX5GqZXcFYffITZveGV[b=GUp:aXÒ7n{PuFfҢ8`KWz_vw]NjW(V&Hzs5z|7x{_xĴMwp|w{ vqqK\ޕ~W\ӣm(_vۺtwu}2&ѩ9Qw@.ZfsK_`7ݕv Mv8h޹Kw& }kͣ;vퟋrcsiwf[nnC{k嚥j=El7hjas1iyP Wpslc\HIq=c/z_qzR[Iچ`C`~]Y9t]W.DpNbs~Sn JjА]iȟh;͎kqjw7Å@O~$(̉/Kq}_}I|p]}1y~"x|pm|OL*dAEdaC*F^DFdiCE!gBD"eB8GdC5GeDyG1d@DtIf%CL8mBMsAGLuAMnweDPxIFRQ{v IVtHSGsGQqDOq ANoNAhLoALsgB6MGsCOsD-Pbss=Kt> KsAZKmCLaavCOO^@N{c>MedB}OSfHSfPEAQf?KTb@L_E?J`@KnY=(Kwd>L z3COy@MtBNtcAMqA N\sA N7v|BMHwB Lv=AKzALyBM~y@M|AMWzCNwFXPwANsrCaMv@Mt1BMrICOLpCoOqDOYtFQMxDO{yNC MrHPQo]H4QPmCWPq<N1tM?NsvA6OsHCO:qoEQnITsg8IeUaFoThGSq@&L2pBPNu@Lt6=VHtCM:tpBL sBbMvBwN,w5C#NjrDO"s@ZNt@ONjM@Na>L[q8CP|36J25OP6:U9m=V5?>W<6?Z9fBT"DJZ^EQj#SsdvqT ev`FTfHRMb;@L2mR=TLvAOwxB;O$r8D@PmeDPm@O:oA@PoEZR_n>LmhCQhDSiCPj%?NiAOkCOmBNo1AN{@OMX@NyBKvC;NtBNBr0E QjaERiu?N)k]CPgA~MYz=JU=L&Z@O6ZFVDaG7XdIVd(IAV`GTObJYoEQtAELt/C6Kw}DuLvYFOCvF3P~t~HQt ENpM|Sk=T[aMY_dp=`鍩n!Ǟvt[vxg͈;q}]V{(g:^b^qbt|hRS~L\ |7SdЧߏjOÐqBjRrblZ[ה {WY xX7sKhr~C mմxxxݜnF@dsV%z󿔟^}:vЗjڄ [ed\ՆZm,N`vb?RC}Zh̙2~1I~ʗ|EWXbcHggKZc]0m_C5hnszʿsCirECz u7Oouݶqop>m@gk7^ae&J9fK{/_~Z"hsM|cx_^CqWy+݊orn@s|grNWAkup[ jݐrRu*R2jC|SY}%w˱ppʨBs${rޟvȦ'ЛkctA܎Âט{:,t~)כU}d/z(~`xy0p=tܐGe[qMGXEG^>E[9?F+_@Fd@EfAEAe,A;Fe@Eaf4CHg E(MhE?OpENtBLv CNwCPtnE-Qt ETsFVr9FPqDOr@MpCAoMqAM;s_BMrnCO#uAP:wS@Ns@Mq?>Lj.CM}aWYMsV[CN+ZoIbRbNHQ` @L&Wo?J]U>HZ?|Km?Lw`DNu{@KxAoL?wAhM uBNsANts`ACNht&@L`tBMtUAL0u@wKtvnB&Mty>Ky"?LwAN7x?M+wl>aWp:@la>A\IQ[YMZc$WbhIXVgbFUgGSiHCPrq>Lbx@KwBB Mr_AN%n?Mo;K"pAOqANNnAZOYjFUtfFV dNEFQi?Nhk>2MlAoMmCiOpANv<J(x@Num?jO#vVAPPs*BdPpEdQnrDP.l1DPmoCPoDQoFPpUEMPvCWOxD?O+wEQau^EQ&rEOm'EOiCDOj-CkOjDR6gA(P\:JUDPpYAOBZ/CHQJ^DR_IXbGUbG*ScEQr;ßsAr`8u>6 t@kpj;4k,5idtPxYF|fRv`W셀btTv`_jz/fp{l9MvbIq$~v Aq{,`sxhXec_M$=a,;ff 8jǬUt'R~?bKٛF#wv^2|aFAl J?eXpiuxO#XoOSkqo;yquԝrٽfm]hwm&$s~u|]~3mujpPru9sҠʌpdjoO~x|mzΈ2C~}}:|~ٗv|{h'stbN\Id~QNCdEAT^D%G]q@$F9aAvHdAHYe-AF-eAFe@NFgB*HiVELBiHI}Q5n7CMrAWKuCM@xCNsDQqDUtEXtNE*TIrDbO rBJ_rWAJxpALp@LrAKrs>K$u?MwvAmO"s>Mpb?Lk>K bAM[I@LSV?LRX?ILS@LY?IW.AKXZ=H}U@Jn\?Ki>Ls?gJCveC#JylDIKZ{BLwBiLuB%MVuBNsCQrD-RpMCOpC`Nw@ULzdAMXz>Mv)>Mw=&LJxATM y(BK(vC.MsCNpDPo$BQ nBQ$t@rNy=IxjBMow=NsTFlXtBPPqBMrBLsAK\s:D0OXpAP2m GyWdGYEfERpCO6x?LJv=ZL`s)BO/sDVPsD(Oq$E_OoE*Q^tCN\tEOs9COpsCPrfCQ.mDS#gBLa7?>U06O /15O$0;Q~/<:SF59>Vc8@\=IX JW]JY]RJV\DQg(BPjAPla@dOr/>rKJt CLv@Kq=@Lp;JqqANZuAOotDYPpF RlGWcFT`CPjS@XMoAMtBDLr_BMqBNszANMu=OtqAQ sA?PPnCAOmmBJPkoCPoERqAPpCOoLFQs.COxBNxgC,NuDPzt:E?PSpzI_RpDxNkDN$hRFReI\cJBlS[g> OU@NVAOXZyAM:[bBlP*_GpVb}ES-e[EQf^COiEP*p?Ju>_IktCXNvsoEQsFPwpKG%QqIRnpLJV+h O\fYg_FgS_[{{`UqwHAxaKq]nvskNxllnEmԤؑwXl{Cfa&kݙ[bޕS}XbiJۄ/qa^fێhv umi/Zw||RX"-Ca2thho{`]^%TuHOwXd1aeP;"m*s~ŵ.0XWeqsUzb_M!pmZno,,i*zV k#֋blE>hhkk< mn2n`>pٺ Otuܷp}rtwopgy{mix~4F^~}}1~ZݙU~~xBbo VHoRmJHKHw[DDOZ8BEaAE-dYBOGeBFcBwGQeLAFeNAFfBHhaEMnEpOt`CLwC MyiCLvCMpqDQqmD8RsDOQs DnKbt=IbT<#IQ?9JG[=dKdbBN[lN@L!s%AK uCKFxgCK{DM<|CJrz@B5IqwB'NtB,Pr@NoEOsM>7JuBMyBkNu>MrY@OKu.A2M"wBGL,zZAfKyCkN~y>LsANs`BP^t|@4OuN=MwBNFxC*OuDPwsFUo?OUl?LoBLquF3Np9BRMrA4PkWERg/F TmoaEIQx=*K&xn?{LwBXOtD_QrDJUrEO#r0DOtfE8R\vLCPdv/BN[uAOq-CPoBO lpB#Nf@J] 8>S179M]29M81;2L40=M8@S:FYDRR^J^bgIE\S_K\XdjFRkEQmCAQ%nAObsBnMmpCMRpB6Npi?Mo(AN@tUANpP dGXV _~K^_|C|RR[;2LN9JT?Ma;J]=BP]9C8R`rDSTe{CQgDQh|GbPmBDO|rAqLVsgBOMrODPpG SnHRmGRmhITkM\gjS]iL&XA`nn7oc^ύqEqD-qNuwUrljIRq٘qXp+vϷsSj尢{bg-oެu\g̑wINÅto|OAuVԈeOāS5x5ڑfJ]i2pvăuuƑupyĪ~GBwmᢱ:d!zI=wScxZ][xdaΕ$kےsuۡxxv҈f{dx[\xTh4՟x Bu ƝxsΚkkQem"FmzK\fm̡xyldyc9z g]yXh}h3g7u~` Èj~tin+efPrSO j1Gl;J/jQmaZ懻sXH|XؠodL۞C~yPֳ'pϓyFi HCycKqaMxwn&Jp䥆"v PwiUƴgbf߾\l󼖚rs1_tQ2,zSG*wݶd6rz!t%oxSph08{easZrFH| H)M~~Ă~I~ՀvCzz`LtO?pLdx?Lw]AL=vSAL:tANr'>4NYo=Lki;HYZ=H#R9rEN;HR@JV?JVX JZLaWBqOpm*ALMr?JqAKtsBLw[CpL\xZE|LwBKtB2MqlDOrFOvgFOuDDNM[qARMuBUM xA[Mbw@+MwBxN;yBNu5BOqu@NlyC@N_yR@gOt>PqISSrJUkKEQ1kPCP,n?FOqDOPvBOqtxBOSnTC,PoFRuv?hMEvAMpxAXNwC9P/u FPwqbGaPk(EPo C.ORxA1NTxBOxbA=OfvCrP_sFPqFLOuo CFNzkXA L`4=8Q0Q71L3= M1*;Iw4>"S9>E T@NeDyWcsG\P`(J]_aG]cEUfERhDRmDA[NofDOn-DNVhAxLjLANqUCQtBO{o@OnCSnfDVNfIH\fERkAMsAqNvEPVuCMP=v(BIOt FQ3rD QmGUhjH YAlpDzRmDQRnzCQo8AJOIrA.OwxR@LxA+MvAM xTB0NA{;?KyBNvE PsHR sDOqAL`jAuLbBPg^K]\`TGTTV?MO>KsW:JIb0F^CWiCSUnbBRc?\PfXDQi^O]oIhWpBNLr=Kq|DPqHTGnI.ViKZlnERrJWqrU]n[b:flzd[vaeū,g]9u4gxQr:~hp=@v*tӾkwqUuEwOq󬞓osmK0qdorSN܇*] [~ac*vh@njzups\-vɟt2-x$r.\i}֋d`jEs@s~W~ {IwӢAvIni}piO}h.KUoܸ;wzi|&i|}t}Bak,dqB^|kJꜜz inLqKATqua&s4g02qir_?w[F#tT i IϒxZUwmڜ=[acş#Ix֐n|[sQNJrYl'ZimP>kJ m#J_ja­%dsv#r^9oE{|cEE|mO~f_1usa xrAvTGrjmƪhiichOϘoߗVoOyv}rìPMEt^XlҨfajVo~!inj}q5|)oˀJ~}[_|x uz7gfo6HNf>\D[ZENGBWPDH\TBG^DF]B:DZAD[BFc`KAHf0BKui'C3PsAA"P#wg?Mw.?L}yB^NyB`NuDP9tEKR}sHQ_t%IOsC>NrAM9v >JtvAM-v?Oy<N |3=K{]@KwBMNsBZPDq+@AMGn}?]Ngy:wHV ;1GP>IsN?JOA{LrV9BK,^?uI[5>HV;HkT=!K_?eMiANOpt?Kn}@jL qBLt9DLvD!M vBMTsrEO|p^DNpbCNtUEPNwCNyLBM$yDwNvCNrAMrAQLvB(NzAM9vCNCvCNxBgMyiCENRuANue>Lu7>ENtBKQswDQmqIzSekCOjC.PnwBNnAYOrVDSuADP]oJaUXuCPuALvAMwBP;vAGPjqDPoCN+k@COmANs>JguLAMmwoB8OtCOP2<3P4/?N114AI5BQ53B[>IPjGEZ/flG[_D$YcE]b|DZd=EThDlRoCPPrD\P8mTFDR g-CkOj@N$pERrHBOmVBFP^n\B#Ql]EpWj7GYeHiQkuAMn@K3rBwN5qBOq]AOqBOqCOnq%E&QOjiFRzgCQmDQ#qDPrFPuBXM/v@BMxHALw@iKx?JzAMyBOJuGSsHESrDQp?Lj?LEd?O/_oO akM>^c=;KP*^nuqRg^lAwR[\>`OeC:QnHwSsFQtoB8OtCqO tEPqGRn|IUhJRXnG8TutIWtM[p\;b-ekj`y.k&aeNnoǩːwuʧRxkuƘCt~| rgdLmoxyΛutwgJŒi5xEdlc`yV|`ˬ7tpk^>Spbݴw"_v;sʖ;uɼIs2飿t֯ϖg9H^T'aϖz* wƢt߳睴}W[zŃu-Fmٚ&n(sm̕mqI mMp'z]*릙;tHg,.Yb\Sg3ʜwph×md1 hLq^jvmMvuƣ6jGqhn(T܆BmqTZ$w\4oNL;kqAqśVozx1`H{c,CzcxGtOEZ;\I3XnIU}f6J˄wsX)j>ow|&_GrX́gKkmmbÚm,m2poqnݙ~ćQߚ ږuX i7Ejvꆦlqjtpi~zvHQ0KnB{Ayw}K5so/zPL[DN@s?7NuW@nNvBOvqBNvCOvELQ9u-HqPtdCLs@LbuAMy@Kw@qLdvk>nMw8MyLd=K[e;GV: GiRH>TJVQ9[H Yp=3H^>G]V?7GVy?$GTM>H[k@ Igc?Lh>LkANoZAALrBuKOvsCLwCwMsHEN[pE(Q+tDlPu"DOuuBONwAN{@AMxmBMsCINqDzN:vnEsOyEUONtEOpXGQt`APKBv(B[KtiCENRuDNHwBNrD/UInkCSiBaPjZDOo[C OsnDtPlkCPNpCrR+qER.qCO|sD@OOvTB.LuCNGx?N@vLCRztBPvpB2OpBOqAO_qBOr BNOuCPx]GiT0xHKTssDPpLER3m}ALc=ELW1;NTL2];Q0C9K5B@W99yI'_"BXiD\7`E[d\l?Nn?1Nn&APAr? LpEQmEsThC2Q~mCcPq8GPtD N tCMouAaLsw@(My@OMx?KLwL>N#t@AORp$C~RsCR6q/AfP[o1N a?P|\On_kHU7_fd-?tIN5vCR:-JZ_7qM3VI#^dK^0e|FS^D#Re=CPom?DM^s ?KtBL|uCJOt8COrEP8qHR/lJVoI4WzsLVqNXZFmCL`;eVuxohvajyf%Ce: iccxp*s5rফblmΥ]"^?^+aS̠Xo^k֧{ꗫtLd>|bV4nOfdyL(;LUҬՕunƈvH}IvyLswjs^+iZij?qgOami fA6e9jBv~dcr.9LhºH}Tw'"umWGg]EvXvD*|q^uΦqn`j[wFWg_I~.bHeOqAJޜS!ClYRaRzVtwZ{h֖h^iogV=oO~*fPGvdcoUHpHr_r+oT֕Fn o-ӑirДw/̗ku֥nmꥲhhk}fazmKkvs |~e ~C~~~~|}"x{/WpZz6b`+rGCYW@CaZ-B GVnE3H'VEF]DtD:fBcBleyBEeaAFCdZ?FfAInB-NuBBOu@Ms> LskBNsC}PrBO'wDQ0y*G\Ux(F8RJy@MnxBMy@JwAKixAMu@NLu?eQTyX@1PzBBLNtA+NpC1OslLCRMh>LKcz:{I]:HP[}=bJ>Z>?JV>IXtG^K?(I]b8CNhE}Q nAMn@K2q^BLuCMuENTsLFNNr FKPtDOZukEOt'EzO[uBwN,wBvN,xBNsCB NEn@MInBMqC N+oDNkzBNlB\NoA?MqAL?S,aBVcET]Vh#C:TgcCRiCQnQFV4vC=TvAOskBO`qDZSoyAPmC:P`lFP+oTAN[sAMsALrOAtLsn?NpnCRmCSFn_AOoDOWnANqJAQm)DViDQ0lC5M oF@OsEOvG8RwALIu>Kx5BbOPxA@N5t@pNtU@?Oq@xPv@QPxCgPo ANze>cO^@oP[^CP]F'QSALQO:H7T9IhX7qJ;XAiP[EyS`YC1QcGcRi6EOYkSBfPs9BNuESO9wlDTO^wDN)tDM/rFOoI:V{pTIUq KX?pM[lT_Uhe9njv{p|{jՄlʄPe?ƀcoZu>k[{U^ߘ~}?e|h>O^"FIWL:Q R\՘ kAr"grEdhiᡡl(mۓw)]ΔyYEp3Ȼأ|t9B.sgn@֙jra@L],aDeޞi?kaCmЙmYlò l&I`K'b8ze.mwaArѝpPJt5kcsğKtboGf:GAh %l_n(Ó lVk{؛rqwc~a~,jC2xťrܾ tRylݏlm=*|JL~EXmg:ƏKs⪯{lz{Jhr+TXmQ s]`vc[M^Ҟig@xsɔx=|skŇpV~ugTsedvћxf{ؤ~wmwєkתˑuo_j٠iΓwkQl%gӋ z5h7wG|~N 3聐~}~Ԗ3~~EN sAhQOv?Mv>WJ[t@Kfr@Kl @Lig>MY>J"Z? H \>E^U>TF[_=*F]>F9^{<)D_M?Heo@KDm DgOrslEOrUCL r7B!MtCNsCLrCYKtENGvAM{uGiPfuEUO@rDOiw@ NkvC O4tCMp/BNpAMs5C#Njr)DMImDNnCN)mrBN(nCNsC9OtES sGTo C"P,n;=@MpYANss?J6s=IqbDzOqrA)OJru?OMz?L~CM{ALwBMy@ Nh|@JNzS?'Ny?Kw?Kui@VKuAL~v-COFz?3O|}AO{\B3Ps@Pn@MKi^Pd\@mPgLCQ lyES`vEBKQxV>DLu>LErBSpBRkE=Qto?>K>pm@M^vjBO5v>Jr@KrByOnAPgDTj|DcPxnBM_sAO`rBSlCTgDQck6HPFnDNanCNrvCOs COq,B[NtBPNuBuNsBNtAPtNA`Pw@O+zC8OqALliBOb@P ]@P8YC`PT:JQ:EJ&V;vJ\3yEqZ[?VMW|DQ/]GVfGmVw?+L}u.=Jtd@(Mt:@LSr@Lbt@K[ti?Hr/OTe?'NXV?GI,_~=^F#\>vCf[^>DG]@F_|>RF)_>gFbb?IkJBLcrc@KsAK sCL'sBLrUCMrQBMv@-LwfAL uTM#zKx@(O@?N,ASPtfCQVl>Mb-7GR;EFNA8?P0[9N>_HKTIH4V\*I^"eZC9Ydt=P _=O[F/SdCCaOe@LgA M8iBOkAoOHp@^Nu?Mw1?#Mlv?XPqBQ`oBQoq$AOr^=K7YCPZZFzSbJ>Y|jEG[RnA9NsB3OvC!OsAL|qG?RgtEoQ(rrEPsCQuODNxvGRrP^o}T_9kOXybpN(W(]Yd(k$NwǐDsm&njZtO튶nxDC퍟y€g!iU"Y\imsߒn🕋l];kר;lߣؐpZvcό0Z'guQoIo$stBrߜnS㔷kF=c׈,aڙg |dʚ)i[)qϰh^joZeqg9PM-gD,jKyWGm|vp[mEh #mݠuu, 9{r`tlIAwly1+o>Š0b֌wlGֆƱDoƜt̘kr2k. #uhԃ[ÁȯLw+2uep;ks5*v0~"}ez_h:x÷’"mxkv5v/KbȦ<|xG>lՇck5CsjZl/Yotx 7`w pRmֲ l®RSfken_ zl0ivQ{m:Lw2~U8}|$~䖵| ~Ax} jq!mIhOp/F8DWE0FUDHVRBGGZBH_yBiHaA`HcAHUc%@hF@dA8Heh\C\LlH\TbwEyQxCOuDpP;uXCNuCNvCN:x BMzrB#NweK}tAmL#tkCoMatBMs2E5Mr1E-L6q>Jn=mLk7Ja%;-MV?OU=\KY<I^Cg`%?E9`?GacP>Ji=Jl\C1Ms1CGKu'D0Lv0BKsBLs@qLdvBN wDEROtDOrAFOsANtCN7vCPu9D2OttENsbBMoAMqw?Ls@NsP@mNrAN sCXNvsDNuBMzvCN'tBTOp?Np >LkrA%NrA{NsYBOvDPtCPq=/Mp@NNw>Mx~COyEM4xAHy@aL{=kMxxE>QNix=MOxQd?Okf'B.Pm4AOmnBPSiBbReB#Sk>(NncAGM`pBXOoBO"pBOKqCPpWESqgFR0t\C:NsCJNsHBP`u?OuyAOsBQoB:Rjm3C,S>hDUaB]Q[=?MW:8I0Ty9uKoV7JX:I[S=HLDZ,@N[DRaEKRgDOWlBNsBM8uCcNsDWOoD>QpFRsCEQPsE]Q8uFRsHT3rRL\NoQ_#lS=`dNX7bT0hi4|] gn v.sۡĪiѥHYuԤֈw׮Đc؟@`*=j4BRp߳r!By pqrIsm{{Ûu߾vŗTqZ,rƿښiŌk0rп/w|ޖHqJYjtsGTXth`jcarab"|pSϙ'~E\SqKmfQKwt]|^k\B>m޵4xkmkfg~]lДJ~nb(dkjBo1ؓ&k);`9Va]~^ |yPYczy XiCepɮ͘9v hrǖs,8t}hxxƼd7]kFw;anڍr&-օt yNuRodl4Gt۵.vkpkӃ]vxI*_w7l Ǒ0m:*on 훃oșoyouxnδZm9e?{fʒVr[{yوnx~zT{hfn?7_xi}8~o||;/{}_t x0Z`c̀AJgfCrDiWCEYA"G8^BGIaCGcDHe{BG d!@|Ec7@FfC JjEE PqFQ+vGRJxCOumCOYvCOw D[OwIE=QxCOhwCOuBMsALpu@Lt@L;u$>;Ls.=Jt? Ms2ALrC*MtaALrALoAKQm>K_l>6LjE=KdIV?I]G>F^@F]:B2F_)AEc >Ec;.Hcg=]KgBO{l@K'p A5JyuC,LtvDLvDLuwALw?kNuN$\vY e{EP0vW?iIsCMuBN?pEP*pAiNpANs=K uB7NzAnNyrA#OtA+OXtA'M{tSCLLNw[E+NxDhOu`KwrG"X4\:gEVmz@O[y>N{>8Mz@NzxcCOvmBNu$BP3x>Mw*@O&wq@ PvAANv>-Jw=K{AO|@iNx@@OZwLCQuyHYT.pBL![DGbPY2:WQz3-:U6+IUNBiRaD\HcByYLo;?GMsc@ On>COmAgOpbA[NsAzOt@Q'tiQq'̡.DIͫſяSQ#c~~“j c\it*r1ZrqQlo+snt sw.$sǸ,y+|™zoh?+`ft K~nؒWtH `ȯfCp-Cd7zQuzmK[*[vTrqSgJeO6vtf.}5_딞zU#݇w\xjʳo%mݻ?+fr[`e̩ca&gؕ|<`Q𬯔N͡BSMj G0Zi[Jfox Nt j]tݮzrxɖ2pr nVks^{6iGMdA aN |TY$x#L?^mȱwt/;rٲm h|̓cdLiYܗ5lKoto9e4g0qpa}t/ xbB֖)(Sj~~||~ZyS|ߗtuHyhk}hKSEr8AX\BD6WXCE]rAE$d~A`EdfApDeEFfCBEdTAEkdA GpgCJl@D)NpGQv\C1Ms@KuC|Nnx$D>O=zOCOx4COwD@OOvzAGMFt AMtAMu?L=tmAZNq>Ln>Ls>Lys ALUrBLsAlLrBMnCMl@L^i;J`d:I6a6GdW=CJyU2=F Ul>&E Z=AE7\UBD\~D\F^'?E`T?IdNNZvw@NuyCN*u'FM0uBKu:CHNu@Mu=+Lv&AMzB,N{ BNw?DPxQ_BQ_|g=L}?aL~t@=Myo>[LHv-BNuC}PrB;Nr,AMs@Nu^?NAw;*MfsYBPy=iMUzGuQ!7@Ts.9Py;FUU@R4_/ANY_6AYY_fBkVcgBRkAOo>Kqq?MrBOnGD\Pq(B$Ow"?hLv=NtB@Ps?PsC@%Pzv@PrAPrP>0Mvq)B{Os}BHNr=`Kcr3BnO vMC1PuA,Q4t@QuA8QsB,Pr?Nvs@OwBNrW@nNvBL[x@IqC7OpwPa7J_L3\GKX%4H V:JgSy9JQ;qLS@PQ;EovZ!4/U5_az{PiSE{iDo!vQyPxVuUWlM{(^HjVz\jx`A{TUa:ikgcÝh*bYk~zoDkim Tflߍ7dڊ1lk#_{(~$XєrMrNy~B[Οs7M{sw]wmbYWs]P ym\`r;~ŨK[rpl칄#rBoc٤"]wndfJ)g-`:glt̜cytuߘam*fAP_8/b糘i·o#X#qH ]mnnpZД u |0ezg3jwn}{4~z~~}}Vxw|=qovHcbjGIO dg>,Ej^CF]0C$GF`BFf)BDeCC7F+deB\EbAdGAcBG dBFJ7zAM|0CN{GDNIxD#Nav BM;w=LFv@&Nu@pMt?Mr>pLq?L-u=K$vpBLv?JAs@2Lq?KmGCNjEPde6@Oah;I]6}GqX;IQV=:HfY?>D[BF]@yCM]@D^lA9G`>+G`6<;Ip`kAMcDnPxcLFPGiCMRpCLt FWMrEjMp@`MnBJOsFRwIT6zTFL4sAQJoW@M*v@M z@Lw`BJNv@Nv;Mv>Nsw?Nx@Ox=MrCNpDMr{DMvC)NwAMwANz@M y>ULwYCENawALcsBNwAM{@K_DMOD@N xBOkyAN[Ny@Nz?(Ns|AHOuBOQwCRt"GXn@bP|]75INyPAO;YK@T^C[f=USa.C9WhBRfj@O.k@OmoAwPrANqcAMLWt@UM!wDPQy@}O"tL?uOrAOr@NNrfC'QqBPqJ@Oyq/CPsIEOAs1C*O%rBOrCPqET`r_AJRwqBA,Q}pAOs?KvD(Osz?qNk>RNr?BIwE)KyM ^E;K[8IX:8InR88KQ:LUD&SUF\VXB'R^:FR*lwAMrA1NTxBNOtCAOXpDPpIU qOJV>lJ4W1oF3RqE2RtGpTpKrXykNMZgIR_Sd_daBjWd bve^ǒ_zh Fm(w ͥYW3\ìpusĘ$iPUhWlys׻rBӛoTt@WxtDåqIul=5û|󴋗mh\ϛ|YӞP jܘ{{c]g]H@YtKiJoS Dx Y"DzrZ|-_FvX߂fHUtX03{qÇoݜzxX~%cRSjaguRvIW?^VjҭtߘO~pݡ(6e露fIǓe' { \}CZ&^ngl}r;_{ظ\0&q-rÜw=hkfzCf~ay4ikYxtaw-.|^|E~bќ n荡k`؋kʬxpYz$r%Am &i7^ar_osvYuwRwoBn@pFoUo{qltxw|6~Nh}n/}=| yzTxx_o G`:Ga COdGVLeE^Ri?Krj@JyDM1w#D{MrCMmsBLs@Kqs.CLeqE$Ln6EMoBNEuq>Lbx$AN~{>L{?M{;JLmx>MmwR?Lavu?MuBPQrCNqDDNN {>Mz>L~@M|DO>zDPw#>Oqv?P|w@[Pey?N{@M|yXANvB7OvGSbzEV%x;L^vFRa=ZKN&? MOoJTpLV"rF[PqFFARtWGR,qNIVjH&SbOo]bYbdeeeoc^yfƢ}kNMr;㢩 \^ӾSohDrdxUqɼpFŸsX1s]IusivvwTNvE~~ou(uiȊJԭ-7sImSfg)6fwɉhny^xQ;r=Q}Iya~L}h`{lSb|Y1f}UxhZz{XKscњM~Wϖ8jQQnGyyϓ߀#/:t֢ҍ/mkfiգng@qqk/>f4f^dt~WiXУ>]Yd2kc2};y݇KDƏb́kTZl+ {oXPh)bBry+w˻wo3'pvNxxzT.j-<(w%M`Ԋ:e`g%lt{ߤbu}‹gvr¯v>֎/gerasйByzxWv uVʐtyW^|i}D{zj|V}+}||xGylvsЍ,]Z]fr"KNeB%Ln >Ful@FSh AGefAFbH@>F^@Eg^@D<`>?3D _BGbwCIh4EMqFsQFuDPsdCNqDMItUCKw6DM{EOzlBNxxFBO(x@MlwlAMlv@M)u->Nst>'N?s:I6q@HKs&CL tAPK)r@6Io?GMl@@Kib>LcBM^@L\=3K\d::HV{Dai?cA,^g?E]+>Eu\>G^?H`@PIldEDOdHnU]F-ScC'NoHBJ,uCLXu_BL1sD?Js?Jv?aK4vdCMt@9KoS@Ko=BJBrwB=NvBPw? Nzy?"N{=?ZNz>NvAOpuB}OuODPtD.NuAKlyCNw@MvrA%Nrq?MtsBO4x@LxB NdyAdN.y=@UNd{BN{.BN|?|MQ}>SNV{CP}`@?L{NBpNyFQxDCO6x@P9wh<(Ps3:N$y=M}lAN DOyNF.P=sKSwBFZvMe8tI:W3`=GO5BSLR4DO3CjMC]QzWCWaCS]CRA[BLQ9[@$Pd@BO2iBO jCPf@EQiDQjBOjLj+BQn{A?Tnx@|QmmBPpAOrB@NsAyNgrT?pNKr@OFq'AkNqx@Nv@L-tFPsBN@qBOtANvF NrDMpCjPs?wPhsBP]sEPqjISpCQR~ZVe#a{QyWUG}ZhsJ8|GEefno׸p nvěcn揝U:͠ƃUw.FkQbGxM] |a@+g] iwt0w)wg+~4}ܗ?{=}RN|%Ny{m}suw^hTXh/JQcw@+Ln6>GQk[@Fg:BGZeA0G:bBG(`{@DE`=Mw>LwBRNvuDOt(?nMr?LsEbK,tBI@q^AK[oN?wKnCsKqA.Jm@Lh@Nc?NWBQUV@MTv=IQ9ZEP?G[@FcBGvc?BLGv\>EV?dG^B?HbE?KaHP `hKY:ZHIUZ^%DnNhGOrIPuH{QRs@L|p@IL$u4BjM>xh?1LuEP/vIrSJ@tByM wjAM*tYBOvs@Mlw >Mx@Pw@O:u@wNgt#D'Ot_CMuFNyCNu@Mq>KJqBMGv'ENyCMzCNyNANx>/NkyAOy@NwANwAvOy@M{1AAKzfBMwDPvBWOx@Ppx=;Oyv>*Pz>N4E@M.BOkyfGUmIZzpMi}iavISeA9CO;H,R.DL D;SIVSE[>^HD XZDTUC{S*aDSl@Nk^BOfhC7QiETjCSj>Mm;AN%ppGQJsCPR-rDPoIcSPqHDQpAQ>nA5Pn>Ml?K_J>UKV::KZ8AJ>\;;JY:JU~@wM!Wb:Mx?[L2yd@@MwD(RvDQ6u FPx1GPxGQt9GPRqHQnsKUQiP=_ZhjTa=g3aefip#bXy.faJue p䶑xNӼ@j(*ʤV⼵b,mlus2uIms ϟ*tFxtdoy iolBpupyEU`ɓ>bU?<7EŴ5v@j곁Pl?hv/gs}`̟ɄTĚ`]#qU6\ukY}uV 耳Km'U̓ ~c#i۳nDbȶƃE)()WY}lГouF.^?E.]?]E^?E"_>D_>jGbk?J_E!S^FX\NE;Sma@Oh$FQhmIHQs HPpQDxMp@JqICMu9D>O,xIKWpyPHQs?HVsB%Kv!C>NuDpQlvANlxt@"MD|~BPg}]>NvB7PFrDP^qDgO\vDOvwBOgu@NuBMQuB\Nvr@Iox[@'IxDNx?)NwY@Nx@NyAOyXB%Qeyy@N:zAZO}AM{bBN|AN^}BO|ZAOEy4CNUy!@LzcA}N~*APX}BO7yOGdSoRjT|Yi~ Ϭ^ov;DIS8]FO6)HlPA(QbTrB/UU G^.ZC YZDWan@EQj>NkSBPj(=Mj\CQkCRMlT>Mml@2MSp2@MoBOogBNlCP`mBOnBP+oAOm CpPwp@L"r}@K2sBNr=GKnpBSPp?N m@KNqBZOq@M7qD/PqJEQ m=CPn?iNq=LqlA MsA;O3vAQr>8OoCOoF6RrDTKs3FsUnC5QoCPulBO\;IlU7UH)\:Ki\n:JV9DIT;pJkS:JR;KU,:JY=MY@PqZ^BO}_BCOkBN\vCHOxXANwBNzCRO`yBOOAv?BOx(CNxEOuJmSv?GPqXHRlTKoXiiO$`hR~agZsde4ljY+wesɹgo v0݉eܪr¬eзǞuǙkn֝ovGÓ]vmzdJ,~uu"#i"rOud|U?ϬSҮVO̐-nҺ<n'"mȩZhCeh"jѬؐb+Pٟggd|{SezqkgG^-!6Sq]Pafgﱕs!-rŘ0%#D猕~,/,kKe ngєo"͑mt㏀lIϗrv`pE1S^ew}ßdzqöub ˘{p0qԊaO~%MBcƩx¦]Z؄ߺKTj іfeGpga*kfΠ`NJg؞̉jlO`p`jK^ܜbʌyd%n`(g,RsOX)uSɒ7xZk}&mruqq&>c*(^&q~owp}{z|z~Tz}:z}ꓟu{?iHqLVvJ0OdbVEJ_]AGcBFaEH7a7DgG`BE`;CE`AfE3_*@EYCG[BG`g B|JFrDOXtFYR:pEQq\C:Nsp@K tj@LvvAM}yCMzBKrCMJrBLvALz>Lou=)Jl@aK1k&@Iod@JCsA@Lr>J4r>Ip,?uJ m?Lix@Le@;L]@KZ@ K]<I?ZTtGV-pPj:cYr~b4{@DFsVe^H7DSI4wCKFPQ)UD~VZu?6W,Z2AV^ DWh;=Pl>PlAPkuBtPlB PlYBPmWKQnk;WIk@5Lkf@K^?J]SqHUix-F'Sw~FTpJVfK]eDR_gX(cZfeisa-x]sf鞬t-˒"jeg|Ѳk3Wxk[\pjdn{⯺{˻v{.[Y~d}-{ti#™tVʃTMFȂ{leP[b.-d؃_tN]Wj#pvl˜mc~T*(^uEb_.UázM֤bL}p ̑m`tĹ͆¨֧͉ฏOywq-\̥xHdOi[Жdri̹n96Rs.NeEhq|vהgpk/tM՜vfvakumr*} QM­s-ggl׮'kȔjtTmnֲqfxq{Ut׾ uP%9k:gwbymXсmd]ֆpd~"hPTsaܜ,tV^-tVӜpf5p Q_uVyS}!}}W|ܘ|i{.[(|~x<|!zovQ\MjFRnRHHK_ DEv]AnFJ`=E^9@fG_=@mGZCGX#D#FZBD_hDKGZa)FIdEKBjExPmrcEPRuF;Q9uUF/OJyBL|C MyDONvMDLuDJdqDIk CtKn@?ZL;s=,MCr=Mt=Ky= J(x!=Hyu&?[Js@Kwp?J+p?Ko#?JHm =VI+k<I5bZ@JY&;{FX>JI_d^=Ic'=G~b\>.F$^?E)\T?3F2\?xF5_=9F`=}G~\/BRJm[4?KXBP]FcVbAPgBRi>HViKVhGQaE|OaaJCL&p(CPJJyG{MTzEM%wkALt]B*MoVBMs?LYx@L'zV@Ly@L|t@=My*@NtvJAO)yk?Mby?mNwO?fNwx?M{>M}a?#N}@M]|BzL{>_JuACNuCN:xFyP|CMzuB?MxDO/y~?M:y@N}{AePzF>NevApPsy >LzBM9|{ALz`CM{k>TM#zl=Oz= R;vE/W/uD^vpXHnq~|ۇR>`qOF=MQ>CC9GM#APUDYaBVhfJCRLlCQpeAxOpR@Op?Or>_Ow9IL)qBPup;qMq?Ov>ORtAOuB2OtBOr BIOq?Nr_@M:uFPwIAMuFANvBOrBP_oCRnDTnYDQbkEUUo|@Prq@NpAOpAPNr:AMqENvtDO{qsBPm9CR'o?JPjCQm@wNmCPm#DQmA[Q=l=PbBN-\?MV =K4YA:JV2j㟵&Oŕ}}VJYѠ݇M^sXꀲHn[Umf =ipTR)ZOԧИМm=a ȉaf8ck`Ǜo9W&o }6fd~|gq۰mqW>q4ĉ|żÄW} c LpY4vpvSou~k}8wLҁE5~GU|}4wyot*Qa=xFDwOLlFCIcBCj`?C^>?Er[ >F[?H\XBlJ}VA HY0@iGa#@Ge$D>J#fGyOkC-O2s!DM's>:Mr>LJx=@Kgy=|Jgv=WJ[u@K&s@Jp@}JVn@Jj>HSh>H a>FUt={CU;BY@dIr`pCLa=ODZ4?LD^@FI`8AGb>ER_oCG\@GVBM\GW_JGeW_EQcdFtS&eFUfGS\gDFPb~BMKe@EKn+CVKwsDLwF2O{AL4wCiKxrAJq!>fKvA NVyBvMz?K1}?M{B>NNv:qLx>OOX}H=BO{RxFI\YwYJ]tN;_grTUcwVg0{&BNg=WBKx8bA_F;KLQ@|PFTBtRZfE%WujUDTRwlBPjkCOm>sKnB\Os>"L uAN tA;NnDPuDR2vpCRvrCQLr0ANr{ANr>AHO;p?OFro>MvREP{sG.R{7BNuANsW?YOpBnQnChQdpCPq@wOq?OtBOMvA>Ls?3OuAOtASLr>gPp^BR8oCSklESykBPjAN9l*HPQlCCP6l:OdaAMZ@#MYxFQzzDOwF#QwBLrj@J,p>Kr7?)Lot@L!s@Lqi?&L;K&w>I)w9>H_u??Jr@ JrAHm@NHgN?Hc=F2[;BT:@T?E\E+Llc"GMd BG`M@/Ecf=B c{Nw~?+OiyEPux@Ih}@%KdAM|AMyE9OzA?M{BM{A N$zCN7|SAOy@QYzCQwGU[rXK[FrKKZpJ3VnIV#kMCMvU;nC8J0>I=bMTCR8VES ]F9VgEpRkCaQlAOynAOqCO{rCyOqs|A3LpGQrfDPwsES@rCRnByQdp@NdqF@LpAeNwl'?DO`qx@/PwCPkzCOw>XL.rj>Lo C"P,n.EGSoBQs&ANtg@@MtAOt8?Ns?M\vL?'NtvAOr9EPrb?Oo5BVn^DoSbkCQk}BP\j CfP jCWP"iANh=,Mh<*Jb>8GH_>G\2;I{]:<6Lc:I[Ce(_(E`QM)zךPBO~zƬ|=sϽvSlt{z2kvq腮\Ĉhj \uǜuTgxH|qg$krg$GnZMjr#Zs`\d}_ĢhΧmk ҘnEinܮ,w-tGQp whEښ{uNxj^Aj)yvԖڂ#ge"r*XH}c6mk:z͡IRƟcGzTy֜G~}&~|X2;~~[||p-pN&[`r0EOk2AI$fmB0DaBBOa^AC`?rB``A-D_B3F`Y@?Fb?3HDat@H-bkDM2eSGSkHlU[qDN*sDLuBLpsCOq&DP}vD>Q{COjxKDQrzCAPn@?Ln:?K$s?ZL#v@2Lt?gLs}@+L}t5AmKu%AJtBmJs?Hs?"Iq@I)oo>Ff=(Ga:+DWe4=HS5\?T>EY@F[_@TF]P>GE`>rEubB>C^AFO_?E_?G bUAAIB`D-NeyDRi^EScE$UbG:YeJh_kZHXjD|Q1mT>K*lAWM.oZB#LqhBKtJR"{BOTz KQRtBL s|?JwAcM{AN9~Z@N}=}Mv?3M^sALuDNx-@2Nxx=AOywA@N0zTDN{ @ M$yA,Qw)AO=v=Mz?O.=M|>yNe|>N=|>NxBWOxV@M~T@KM>BNAM|A!Nv|?rL{i@uLx#B OxxANuACOsBQ wBDeQr;H1U@ocKN]pdJcYGpH5VpHWMlVIQ0\8APX.s@nPs=C=Ps{C1Q2qsBOlANp(BOr2ESmDR9lBQm\CRlmCQUk9CPjA'Oif?Jc?H\`@OE`BE_P:D['<4Jb ;I];JY8IzO; K^Mt< J9R`=*J:WN>KWA=N]A5OOi?Mpk?M4qBOrCPtdCTPtERUs7G5S6q GsQ'p1H$SpHV otGUpGWLppIYmJYj$L[kM:[fiR[Gi]ahfe`b$odoe"~Lrm#r$9mUj|-]hޱ}-rpkmWUj j{|^DohH~k_tua kQoǼāBG:~͈ҨCŽ6߸͟Îso4Fim,|C ō9}sȞz)%z|wɳz{r"z=dxȍdeާʎdJ/Y)rk԰ٕpSjXTd"Wȋr^ښX~,x/ }-캰K@|Ep, n朏wm`wosڜmZڕ|Tb d"~$]#~oK| jEMpK8{zOYfvP]oTYJ{d`Oh,v3`hb]a_`dshp|}y zctվ~EC3tm(dy7YގY}mgwe(w[HrW ~l̨S~~NjMzuPi@zqsij}ŖN} }4}}М~~,|C~J|}p7oŅONOSoBL2he@F_B!CZAnA]ABob?Bwa?BC\??BSZBF_D!IajCIcEP0hHqVkJVs(EMw-CKFyBL$vBB MrDN]sHDNNuDOtSD;Qo[BOlANNo@`Mr?Lt!@VLu-@Mw=Ju%BMKwAIrAJbq?Hs>IGr?IFl@IaFa @HaB=Kb]D_OeEEVRcETLfFVhGJZjFNSjDEQGmDhPkCNn@dJsBKwDTMtELoFNpA KivJBLzBM|@M~@aL{PBMv=Jp AKrA`Lev>Lw@NlyAPV|BN4|AGNy@NNwSAOyTATO?2NnBN~mE:QP~O>M |?MK{@N{@N}j>M~A_N|hBN{fA3Nu|AN~+@tMz?Mlxa?TNpBO"p.A~O!sDuQuSGSYrHKa\zpM[Jp&I2WoIdV&lZFQf^D/>>U;IRF{S=YCTdcEYkAQn??7OqyDtRrBQ.o@P&mDRoCObp4EOqGRsERrFLTpDVR_p>N{o@PDnB4P^on?NJq@iOrBHPErAgOpAOqAOo-CPoCPpB6Ns?BLv\AMs@OsL=MsByOrCQ/mB Pk.?L#q?LtFSoDRlBVQo"C`RQpBBQ~mBVPRkc@Lg{=G6`?Dg]AE a>C^?G^?K _7HX9LJW5nIM7IH<*JAO;JU=K3\@bNe ?(Nfp?XMktTBM_t7AMtANvBOv>FrRs|HTqIUoHUn8JVOoQHRoHSo:MXjLXkKFWl2IVj O"]m\UKahh`ahdgs n<`|pvwҝ6r]YmGfqk/HiAiZssn2߈ahi!lƱ hSphՠ>ū=׺Ңd!<}m |Px\ɍqPzhZlrͼp֫]Ьtohom\S~qyRpȭk7r"ڒiezssSxhG2b_tu¯y/cR c񝓉drZ~ˢh}Os6j8ܒnwl/mt/k|~B[C0TcCbupFLtpXȄjI^u[ArV:z]=glJamLoQe}ZcNladӁXafHcmibeVdor@zarԇc"opL{^8H~bJiLw-[nt)?yVu͔3s&4l |Hm]xei}Rr}i~}"|~y|}AR|{}xxf`{M@@_>Cg`>D[_AE>]B FWBQG[B,KjESpK[sMTYjvDN>xv@K+zyAPMyV@KqtEuNr F`Nt`DN*tBOq@pNAn(@Mo>)Mr?Kq@IIpAKtR@pK w\AJ8wuArIsJAH3r B6Ir?5Ho@Jj.AL`/8CZ295X4v:U=CX?DZ<5@W =DV<,GtUT?HYU? FuUcDGX2A$G_M?FG_=F2avA,JbCNoc*GUdkHWZiFVGkGTj9IbRn[E^RlDQk,DPPxo:BL uAPKQw8DMuEwMoD3LqBLwzA{KwC9MrwBLxBLZwBLApiCLl)AwJmCsMu`BJNvEQxCQ~t?ZL0~ALy?rK3v?4L{?Mg@MqAM|@K{|@Mk}AN}>(M|"?MN}f?M|~BxNM{A`Nx>@M{y;L|T,q@dP6r3=+On?YQnoL?PVnE`TEpbB@OnDOmX>Ko>AKsr3DRPqGCPpXBdPqMBjQq>]OFn@OpAPqo?LOpAQKpAOmA)PoAP pCRqAOrAL vA4OunBPtBLO$rZAaMqmCrPmk@OlAOpAOrAP4oCQo-D[QNsC RTqSFgV s?`NiALc@IK`?TE|_I@3F:c{>Db:B^KX?L}gNu'CMHvCBMmv\BqNs@Mqn@H k=Da!7>]0:8X8>X;CU=BGW@GKU @FZ ?E^@bF[xAFVf@G5`x>Gd @JfC8PveEUcEV fBQ>h9C'QidHUnNERmBSQ}mDQrCO'vCN\tAMVoESO qDXMr8D^MwDMvD0MuAcKPwCcNuDMrnOCJkCLsA|M=xAM xA9NyA)N?KQCN@zWB&NuAN|z@M|AHN{BN{?J|x@M#~^BNNAN"~ASNA|BN(|tCMNzzBSN>zBN{S;J{=N{ @MzEGN{@JFymBM|r?yJ}BLv)FQoGQJjIvWlZF=[hHcg]dk9@EAS@F-WCOP^CBSaE Zk AQn=}M]m<Nfm+@;Qo?_PNoqAmPn"D^Ql1DJQh7CPmBPNrGBMqBPq!C}Pr,AOSq A*Pp"APqb@Oq?O6pB\So>;Nqj!@DPo#@,POpRBPpDQXrAOotOp:APq]? NrBP9uC^@AE!\@E_|=WAa>4E f:E^#;'I[w9IsX9wIjS98GPK=4I!Uz;&IY=J]<=Kjc>NnO%p;HSsHSqFR8n9GTlGSlDPlLIUmIWVpgGJpZe3K&]gL]h~L]qiRai[ceGY]\vHrVٝۊg(t@]xxlz#gfjkk6vٷ7qG̑aѤՍbMKacln ]uzzh|tԞt8ebkEnҙv q`yHZjI}7gN^|&cM_Et_B*u]{kH};ebz̔#l]mKzq mQ`hݼ@gqN#tbjP`qhؔ*i48\vSzXJ)hǔ~j(aoƝ㨂xRvoiqoVn3nی1lO}R^nLl`>u`F~,hCSv|cteW~X!}vZebI(glhR„cԓ9wRHsIx^Slnlh=ha}h>z^tuT}]Σm,DlFug~?@Hj? H?b@DZ@B}YZ@wB_9B@%_y;lD_:E;a?FcAJfDR6pGZ7wI\wIHYvEPuDOhvCO(wqC+QyAzN`x@L?x@My?LsU=JAqtAKLtkBKsBAIKr@RKkn @DL>h?He>\GN`/:?Y1a8WH5;Xr<_@ZY9?0US=BU7=BZ>zDO_@E`=?c>NAg?CGg?^Ea`?@Ev`?Gc@dJd#FPeHWcFFU#bC+P^DLPGcHUelE}R^mDPblEO|omKW$vHRpLEpOj~CLNlCMpxGOvHP[wDM{tl@JOtB%MVu@zJ8r@.Ir,CbNvzA4Nx?Lz{@Lo}@L&HC}N7COz9AkNuDPQyCNy CPx0AMzo@L}GCNĀ|BIMˁBM~BOe{"CN'{AM4{A N3{B8M{?rL{LH:Z?Oj`AUfE+YlBSk?2P]k*@UOUm@OEpg= MqD@`NLqDRr@Op,AOSq2B`OVr@DO&uCOIsPAUOqyAOnt@}O"t@O/u>M'r?'PqAATp!Hy]V;HX^c;I ]:GV;IW8<}HWLgb?N?o<M+x=nMxvBN[uBN qCOoyE[RYuFvRtGVT oIOZn.HGYmGTl GR`DeYb]fU_dbfPfa[yU^oĸkt jvd󦫑jzk'k1gͤkרjU oS{yiB|]o^5`~Dcts,|~x/Rx1~H^nS[z$b_Rj|_PIz7_O.la`qee^q%` .dbddehvEcϵ[ c`&Lmzpi󫩑eؤ; fϮ]qJuՐXnHijOlrqgAșYkyP}j~SfpOӖj\zh&Ce@xZ#su]wd;'mwgj\W!}-hڏnݡߏinga;a~b͝#_1d}(aNxScj`w듧o*a]uRCtJ_;nL rVj(sѡl0Zd{blᑆlrte'ub%k=mv|Ds~̆zyCz(~V{~zV~y{ɔxqJtUSbP}K]MhxCCcAFfo@YGafAF_{AE_@ D_u>mBu_>6Fa>(GJa?Fc+A]Ke ERoH[yGYZzFRw-DOw?JvT@Lnv@%O%vBPuAMti?,Ms3CP*sS@Lq?JKpt?Ll>LkP?M4r>RLws>KyR?Jxj>Iwt=Kp6?mLj:@Hcd>EV3<R.3: Vu40;W;@W:?U<>VU@_C`<Cbe=Bc@=JAqf?Ch_=Bi>Di?Db4BIFb>IpbMCNNcGVdFT \FQqX GQaH%ViGTkeDnOg(DNgUH#UtoLGTpClOqBvN4rBNMsAENwuGoPyTZ_}oBNMpv@Kq=bIuAmKw@KuEOx}@L~xPAMzA`MzA^K,zBMyAMy4BMBzCrNyBfOwkAO{>M~">K B M@KJ}DO"zA&NxAlNzBOztBM5{BM{A\Oz@L|CeMp=`Lv|>N{?*Nz~?7OJuCAQoCRfTGXdcC|ScA_P[TAHR7?O7DU:LT\B&S\dC Pd@E;ThBDOl?BNlDP9s? Ou=LvtA6P2xK@=NxANy@NvfBOt'>LrBPr=Nrt@OuYDYa=Ec>G_;Gi]>G[G<JY;IXF?f?[Jh%EQqJ(]QzH@Zz)EQxBN8w"COxSAvN-y>rMvANZuSBNrBO{o@Ol?*M2ksA{Lj@jKk?6LVpH>KIq?jLu>VKzc=5Jwz=JtI?3L#pBOiEOfW>EW-6xgBY@E] >"DF]>E2a@Fe>JcAO)fFX+dF9X^A O]Y\EQPe1I{YFj%HPVqiCP-h:?Mf>%NlI?Nr>MvMu-BFM0wBLxALxz@1M#xBMz@J{hBMzBN~z BM{pA NE}VAN*N>PMt@"MD||BMHwB NTw@JMwBNy]DM#}@L){e@yNbz>@M{b@NF~AO-{)AO:{&A]N{BOtFRmrFS;g$FXd_CrUlbEqRYB=K6R4H^BL_EMlcDNgANmBOnDQLqCPvBO|uhCQCtDOvpANwAOct@Oq8B^QqAPqMr?MxbB,OWsD\P8mCPmyCPjB)QhAPro@NpAuOpCQzoBhPSjFQ kAM@d[C7QeC0Tg>O^E@]KyY=C^>B` AE[=EY>Fa=;Eb= G`;Gj[=I\D?dK `;IG`8Mm>aNqCOk4AN]dCPj;DPGq;FOwnCMHv>FiQqSFQIlFRn^F+T8nJaVfkLVy^GTStXET7bK7]:kN^kP_mJZl"LbhLdgevtZGsCg)iĶٙh`[jujeٮd0fi Fo޳!snt x"9&̠|>ޠ{qCoyqMғJ} *{v]1~alSR}k-rlmFZw0v:mm,E`~W/eW~u%1oq9cX|M[ޢ듀s۳(}Hw iԇwX_wPHyD_hR}VJiQ jsku~d܇|l7o[k^iR)BjHl˒qS}mk}~c{~>rz}{n{wty_TiƈQBJzqkEFey@D_tB`?Db@GgB?IkEQrI+\tJq]vCBPuSB NFv=aKJu=ZL#y?M[|&@Max}@9Ns$@O-nAPk?LQj!ELk?.Jl>pJp>KqG@LUt?Kxx=Jux=JrI?|LWnBDQh?N>b+=BU%477GS5^7U:=U:@GV<B^Z?D[lBnHZ@HW]>G{]b?,Fa?DaAFdA,GaCI;al?KaEaR/fPH[/eDVO_D{QganDQeHYlGWmESnB$PmAwN[pFA8Nt?Mt~BO=t|BvOruBO7yBN9xTFOrtFOpEP/r-JV*vJqWwC:OvaCMfy5BCLzuBoM{=AL|AL"}BMy:CNlwAMy6Nx>Nx6? O}|;~Mi~?M|@JMwAMugAMxeAMzA6KzCN7|?.NFy@A3OzMzKAN{zpAMwEPGs2DjQXlDSuf4EoX~eD&X`CQQ BPNQ'4Y=T|7+@]W?QFaCH`.@VEbCeKiAK1lnBNrpDQqCO{rD|Pq:ItTnpWDOpPCBOtu@aOr@?P&qAQpAuPpLB Pr&DPu`EPsDN9pGOlBPim>Pn1BtQVoBPs@eOxC&PFrIFRmBO{mB~PlAIQh5A&Qdl>PhoAPoAPlgARlBkPjtBOgCP `BR-a&9LY\6fGZ3@I=^=J];9wIZN՚rm˳]hkRln%bm2Yr˂$ D򱣒r6dALJb~fň Ű*=<1@~]9Rq]wuj|7nXSi{"vĊo)dmXpnH_x _rٕVgrhptnmqtfKtTx˸r b~o1x­낽{ qvQ{<} ZrRM{gdž@sʍu 5n咩eړG]a𘊃AgiT']ɚoa.kqx*rN}W{SXp%-/6&~t\j'z^L7mH_6a8ݕ\hdTf̃hn4u͎sߊpm*Iq}WzK`#ߖ~:~g{|z|w{ߖExzAnqKX={G>rCFjg?/Dc9@^Lu@NrA NoS@Ko0@JnA@aLo?WMp>Kq~>Ju?K@w>SK~t=JNr=IKm?$Jd=V8;?@WC=uA"Y@Co\BpFZAzI$V=]GXnz=^MvyBO&tcANu=Ntx>Nx@NwAKNuANwANxCNIyAMx2>kL#xh@Nz @[Mt{?AM{mC$O{ANx+D*Qv?PsBSnBUhZ>Qba BQDZAM3X4>*X4=Di_A[G_BG`BMH3bd>XKn@N%q@>P)qU@PpxAOoBOpCOoqEOWrDXMrC@MnCO"l@Oo BPpCERr/? Ms BMqGDOqCbO?t^?M(p+BPn]CRlmEUpAhPo@O$n>OlMBRj?A Ph@P<[ZAO4X7LOWa8G\a=XE/a=Cb?lEd>B`CFd:@GYf=G_?@2JT[P@zG\w?H\>kJJZ=dJX=JU/=K@SE?EM]>~Lh=%KoSANYptBNrBiNvtFFPtC`NwAM{=LUx@N@uDPsG|Rq9FPiHR^7FRW~DUV`VH^kI+^lN]blM^h\LrZf]^KdndnSaOT |[,‘f\ܘ_mlXe .{l𴑘(oqe.sҷoٷzsm+Gf#\aa]exuC1kpC{3XZ`GP\xAųCmɭ㌃X퍡Т|_v~daqI~HWijveyɄuPƿs)%q oa˝ay'Ýyiuhꦉb >jVtUvjvwx럝}ȅ;GQȽ3sYĺڅ͟{͠ExӈkKqGՆoGKs:Ỹeq|`jpX鏿|a@c._;,bYOmlAvf `oe2l{N;NzF¡ei߫ޘt)olxoxuj~^*QpY"ShƲLq)[eڜoa*lcei}s}&``pŘ6orO}~4P}|u}/F{z@uu^be`*BN{9FsCGkB>R@^L<>^<@ aBE=_BF \?E%[@4FY8AmFV-@GV@F^?9I6eEO2kIVst>FRw>*MvB OTyC#OwCOvCDOv"BM-upCNiuAtMsM@NKri@Jp%@Ko>Kn?L0nB?yKp>Jr>Kr?Mr@FKp>qHk[=FHb5@-SL76=VO,7W<\Q,9=UV:?XD[z@DBa@Da?F^/>"F\=SE\>1E[@zF]wCG]&B$GYAGnX?EZP>H ]@M_@N`BOFa ? Nif7GTmDS=rAOqDaP;tICOXr\BqNsAL v@J8xBKe|AK{B)O yH5UgzcLX{HRv6EOw@ LyARN/yBNdy@@L|AM{4BMzfA3Nu|ANL{BNyxDN?ybE@N:|8ANy0BVOvCNrqCO3tAAPu=AP,v@dNBvW?Kdt,AL/t BNEv!BNwtANywHANmybBP{|?M z|@jNzP@NL|@XN{7ANv7@P{H>vP oCR6hAQf>Od?aKa<8C]>B]@DMGY_DGfa@F{`; G\VBM'i4ANrAP6uB&QpBPBpCPomC Pk=E9RkBOju?Nn?Np?NIoBPpCO:pvCNm HQs)DP7s GSsB`]B{DNdADE_`y@A^>-C]`=IF^>GC^=C ]>E#X/CKYI@K&W4=JS(>LaR5BO\C}Ol>JQpDMtAMu@LsBhOu=L/y@hNt|@@NExg?Mw&AO+zD+RsFTjDQXDR TDEW]ZHa2j#Iz`CjOWbFjM\hBP]Yxg^{cDagJiyT{Xf kϭSoԔj"fuj`mAn!|pqn"&mnnjh\ijYa%Ratosٙovl6]cr0z{&X ū{Įг BnbSWĈVeĎHwxwһGhޱk` dlɽKwkob=ih(tnvJxAx#{EJtЬ#%;V UPό {&}~?|Ó{{s\z^9z@(KvVFb`=>HBc@L(jFRuCPx?Mv5@M,w@NvBN'uA>Nv@Mu}@9Ns`@MsT@K2r@Jo@ULp.AwLqA!Lq?IKp?Kp,?FMo^=~KOm?Il@Gbge@fD]+8?6R~49O6:@S9M?V4;AMY;BYe>F]AEHaZ>uDa>E`>E\?F]4@F_@E#_R?CC^o@5EVZAyFZ-??D\X=>FO]?J^@Nk^>O$[w@Ok\ERlgFYTpCN(sENuB+NpCNrVBIKvBEL|DL|EyMY}CN%zE]PyIRyDGQJvBkNup>fLy >OMxBNxB*Mz(AnM{I?Mmy\@`NzAaN {VANyBBN?zAMzdBZPzA.Owx@MwBNNxArNx@WNx@.MwfD1N>x#BNyvtBNuEPw\ANOvfAOxI\yADV_@EM]}@B_BZDd@ Hb>MH e ADLj2@+MtBPt1B3P7q>kL:s@K?s@>M kKrDOprA7OrBVOriCfOrt?dKfvhBMxMEOguL=Kp,AOSq5@O,mAOmAOym<@Okg:mMf9]N`;Of[9NW28TJvU=|GZ@B]AC_?.Ep_@E [A9EcZ?EO^ FTe=A^9CF>Za?GjV?JV9[JZR;~LPWAPZCP6kQBvMq@nKp2?KrBPr?Nqt[ASP{'B8MsySDIOwGD$Ov2FoPszE&Rpr;GSdlD1PTDPRDTtUG`^DfOelVQchM][fR]tg]u\^Xc_R~rVdhh}sm /lؒi@Vl8oIJ@oŘ^kE=m?nҽV h hORjJm$nżmTޔl(g'헋q{F `s7{{Ыlȕl 3)JȞۧtdZhZorpb}|Ǩjz)egWmXhNgoMzljeΏ#k@sHtٜyxAyXCD^ CE_BF`@E6\@FX?FZ@F_@EF `iAG`:@PG^by=GofDZPmrFRt}@9Ns @Nw)AO:{B}Oy.D;P>v;HT~s?CPsD?Mq+AeMrmALo:@Jp?vJt/ACLv@Lvc? Lt-?Lnr/@LpA!Jn@_G6e=A-Y+5)91S48Th8*;V:?V:AW^:pA\\8=C-_?FAas>E`=Et\7>FX?)GPZC?F[d@E^>`Db?DE~] AsFRYZAGX BjIP[N>RG\KORyALy}FO@{$D>O=ztBO9z!>NyE>wNwy@Nz?LyAWM@z[CgN^|DN{/AL&y?MwANwBMwBLNwANx.BNyDOGyNAmMry?MZ|8AOV{@N]x C:QsFVj,EQFcCQ-fBObM@KZ@FX?8DX^@?7BuaApDeBEf=H+f@Jm@L sA+NpqBOp@WLt?JrBNgoDQpgDPrCPq:FXRr1DjRpBNRRq@OpVBFP^n?Oq<)NMwb;6L_w@pNt-Pc!EOd4@F^>EW>F \[<F ^g>EdEWQ=YFW(FaoCAC$aA@\?CB]CjE^?E(`e=3F_@SH`@IdAIgRBYGC^DHUEHZ%B3K]e EOj-D%Qfp@1Niu7LtLCN(tB Mp?0Kuq>KqBKpBNJoj@KNot@LHq8IIp@I*l?Fa9<\369ZO59A]9>\;+@UW=yASY>WDP_&AG]P@zG\BH^:?gF6]O?GdZB)K\VAHyT@`EV>WE^<D\@F.ZAFVAF9WAEc]@F\;JW7gKZ^.BOhHVqdHVsC8P sl>/MPsiCN9wGMxbFLyELMx8DMu;BOrJPrKSExFQdxz>L v?N8x>MxAOOfv5ANtV@Mw>MDv}BnNuBM$yAoL]zA|MN{>"N|??Oi~AWQ!}^A=OSz5AkNyC/Oay!BMfxDNx?Lw-AOw\@NwALYxC>Nw9D>O,xBfNEZ>B_]A]Fdm?LEFdBF:h_AHhENnQB]MzrAMp&BMNp ALrCAMtBOqCOr7HXTuEQdrCPrDQrzAPr4B1QBu>GOqd>OBr;Mr=NorkD{QrCWPqAOTqBO{l@Nk6BPqTCQrA*Opp>Lob>Nr BPnAOnEOel(DPe?P`AW_CSV@LR?GUC@,EZ@^Dk_>Di<Ei>Gb*>G)]?H\?8G\>E\<E`WU>FU:NG4U=MJ8Y7HUk:rKR">L*S[>L]@Or>N)wt=LtBO%sCNskANys@L|AKz_F}OiuFkRumFSmFpSaCPR~COsOD{RRF&X_IO_nHl^qvK^l(P]d W^dVaU^i]!V{ahU{Gn nCrpOpHjjJܛo1 ig%m]pN17onH؛7o#.r\oqql2yK+g쐇a Ry!ʱXȣǬRӪ#_nudNYu]YM4r>ǒz>WkƲ꒗^eݚkqĢYh>OfPH9eLc_,8dԗNhiiZmȧuɯ}rVϓn%Q*qͲcy12{x)c]tvV8p?XV|~wzʀϕv}MjEukzOXRrA-It=CnA@dk@@_CD`ABD_A?Eq_=RFT`nHeBJjD4I]FiI(TF%IB\uA+Ie@nMiFRsCP;v4@Nx@OxdCD_`e;+D_[?FU|AFSCHVu?~GW@cIC[@ F[e? Cg]@E_5@Be\:@YCKZ:EbVF92K]/?N(kFU5tGXpERpBOt?MxBM'zBLzCrMxBDNRv>Or`L^/|u{,io?pKs:5Ht~?fM|D>,N[wBP9uBMuBL}tDC`NrC#Ow\AM{[@LY=MDAP!>O{{AHOy>+LxC,O.yFB@NwBN7wAN[v?qOu?hNu-BM:vHD=OvDN)tYEOy DwMmI>nIԀAM?O}^ANyjBXPtyESj]FVm^DRYEPaFQ_>F@[ @HD^aKB7Gc@Fd@8HhAbKi EP)oEAQuCOv @LrERP[w:AM\tSBNrBObr^CP\rE#R=r?LRrcEPuBPPr>O8r@PqAQqp>N pAP^pB0PlBPqAQDvXDS0@CWAgD_L=A(jG,a;FE^>-G_>JE7^M>E\@fHYy=G~T>7JR>LeU05#GTAcA!lڠ_r`Spٛyo;~J7w!k fk$Dj#E]|NCQw{HzJ֚$9RGV8]n9zdxxPEǏHK:„hxL<u~~|Z{~B}}ue{|yՀ2x2mm}WL/N'o^A6Ht_?Dp=?e>Ba>D~^kBE^;BaF&\ATG6\@G._@Gvd@qHhRBIbFKXeDH_?HfA]L,kDfPrsCPthCPviCPyu.EQ2sC|Nhp DpMIoDNoIBNfp>L`o@rMmJ@Lg>mMd>M0j@ Mr9?Kqv>Kw?RJp?vHf<@nX36W8Q<+\Z6?Z:@!X>EUA7HX AH,Z6D^JSYAGMZ@E`@EWc?F^Q@PFyY$BEXHBFV@9IW=G=[k>tD^?>Dc/@IE`UDHZEJUQ@KTAK\BaN4gGUXq"H!X4oGSmKDnOpAL/uBMw@CMu*@KrBNu>PwK1[ 3pxߐdlB@Jo=FqH?Ky@MzBMxFMxzFMtwDNbv(DMw,BLz'BM)E QBO{BiOwCOv1DNxFO>zAM|xqCOxB7OvJCQlwDPxPBLwCMsCWNQtCrNyAM~@M @N?ANE~>zNz3@OvAQmTEWbES^QDQoaQGiS a=eH\>PBcJADeBuGUg?Gph0CM l"DPp@EOt*>OEtO;Nt?%O&wDEPvkBNsB(O%s5CqP`t@|NpBNqjCNrBOqFRsCmQoUFgTlB3P+nBOHnDQlcAOGpESw>OnAqRo>EOnAOzm[BGO(j!=[Kwl=NWu?Oq?>PiVF$Vk>4O2j >|OfCV^H[[@MXV>EzWAwBVDD\BCe>Cla?{H^9D^P=7Fa>aF)][=C)^>>DI[99DU>LSp9IxQ7RGU1<HV<5GY>GJaYCMpEMv@IGwALwJ@)MvW@Lz]@BNV!@}Ma~CNMw-DNqFRkF~R!ZCAPTFAZOaRDQQESXI [cN_jpN`iNv]"cS$ae_ Y7[c\XR=wby ʚ^o1}pa̘}3y(7ƵUƵCb²}-¥r(wɉ\vC\OvYqý|]hſ4hp]n ½w"tl^gǧyh*Α?ͫQr~_I)|ZqnŴqbzup̿ZkukOɖj`cbG(aS#ey bt_ vd={gy=gyk.twW}|eVzDgayKkr c$kTrIlBQ&r\vXՔ}RFzR;֔luS}|osӁ \F{9r@(j i@l՟|aSXZnEXƃNd/amXz;of}` ZRfM+t;H jsHqfW}U{}Śz {l{)zZt؁hrcc{qGG7pRBgFw?D*oA;CMcBlD`_C-G_SBE^4AE^AiF\!AFZ[x@-HfT?Hp BIpj FI _CF_RCIqfE MoDhN:vCOvAOuE_P(xGQ.vlDOrDMoB+L7m@DMSoy@M+p?^Lnz?wLl >*Mi?Mn>XJxpAxLs%?UKq?Icoi=EYe;?4_7;o]9=Z8?X4H?VEU[W@E^@E_?Ft[{>-FW&A7FZ@GEZ?F[>'GI]`?AF]"?Dk^@=G\DIV,N%|@N(}@N|%AP|sOuEQuB\OsAKMzsBO|tAO_qDPnDaPRpBdOqCOscD=PmmEfRi D+QkBOmDQZoGORWrOD+PSrAPoALQIo@^Pn.@{OgCPh>9MYj=Oo?,QUmOAROi?MQ#kk>YOei:M_BQWGPY@K Y0@F[ BPDXDND>XCB^$?C_>Ilc`7D`= IF_<G\ >C\OB.F"[L/V?wG0n{]FddIq^UBAnRpO~n{w\B|!x}{^zЁǘyurD'A^[wEC3lA`In@Lpe?KKq>|Jyo?[LXn%=Ll?Mny?HLWo@QMp=uKp/@Jm>Ed:3B#X<D[B H^_l@Fk_BXF_?DZ?EY>sEMY`>*F[%<F[?F]=fE]=cFUb>F`?^G)^? G^?H]jCLK2[FP\ G^R']EjQ`EQ1h HUqiEP6p{DINkoCjMqCfNtsBM;vChMsEgMn_GOoFrSvKA\>zgMr'D^i:BKg5?Gj ?Lt'ANwAMyBM'zCMyBeLwC2M wrCaMvDNyDN{n?Kz@mMsz?LzANw|SBMz`CM{B-N0~BMgCM}BM|CjM~yAPMyE?3Lw@ANz>Moz@M{@yM|t@"MD|=LB|?ON"{EyP|t[C-PhBQ!]AaR WuDS\^B#OWCK9W@FE_ A&DdLC[H eBImg-@Jl"@NWq<(Pp:=Pt>wOuC|Q)u[CPuBtOdsC Qt+E SOqE ShDWQth@OoqCPmpDDPjRF}QnADOqAOsIBROrDCyN5pCNAq`BPo@eO-oAOh>Od@ Qi>OgARk@Rkh@Pi[AgPj=Nhk:M^>NgZjA2K]=XC[@@F]@LE[:A]C+X@B]>B_=$Fe8E_;GG7X>GXF?E\WCEG[WI;F[W+J\=J1k@oLJrDLrBJtALvy@Ly*B\MzpA7MtzA N#yC ODwCOnERfLD?QP\CGOUA OSDQVH9X\HtX]J [b M^ahMh`gS`dVGa1b|f=XX x:oZ.qų,no^vgg˭̓}7̳Z|_ 7Cyüu3q 5q_mƻgNkkno>nlؚn+yϨ"vH+)&ư@J|!suSZtBj9sɻD}oem~^BGc*qO"lӗYRzJLLz(\>ւ]`BXg7r|Hwklu`W4d|X3!NڌnA$mD"dwTt2GgdśNj.imipfrjE;hƽAyK뢆}9jz^Hwl}nX/i$kCƌnAh f{qjN}k/roxqggjxg]zb$؀[oP N;Bc|,{|#{srcpW?U(vEGi>8Feq?EZLFIXiEIa DH!f=EIbBH^CaJ^D1L[IGOeiF-OlDALFlAHgBwI0gCOKfFORkC)OsBfOwiDPyBPv&CQuMmS[6iANT^ B]>CCh[@F[AQF}\!@DA_AGcwCHb?lFn`?GdH>G$`?lG_@G`;BKasHLRbIW;giIUdFPkbEQeGLSn{HWtrnDrPQpC/OXqB@NtCxLwD/MvH,OqH'SiDJxoHbPB~IcF3LdYBJia@ZKj@MmB,Pr> OwIATPyVBQt5CqP`tBSPqNC7Qts@DRpG WOiDSkZBKPxrCPvoCP-h!B9O=oO@Mu:==Lt~ANtjFwP:qtBO"q=MOtg@Oo>MeVOj?AP&l@Db >}F^q>G+V=*GU?"GVF@XFVd=GY<$HY,9D:W8]HWK2k>-MDqCCPxwANzCBP(z5BR#t>O{n??Nj<|Lk=Lp>K#r?Kp?sIcI8q:Kv=2Nz@OixDMwEEbMwCLvIAoJuCZMMxBMvHCMwAfM y@ANUyBB2Ncy#BM|?/K~@QM|AzN`xBP%y?M|@/ND}CP{2?BNV{MTy\@'Mx?Lx?M=z`?L{CN@ M@?M~ANx=N rAQ'f9@Q^APcBQ-b&D{Sa,BNbj=H'dCK~f(FL2h=KlEAMl^AOTrCPy@N7vEQfyAOu0CPrERrCP(pC QAkC6QfpEAXOsAPoCQVkXCoQo=BOq,AMOVtpEQ-uDO0n1BwOo?Pr;*Nl@PiNDk>MEl@OakpA4QYi;NbeuD3a+?B_GV6>GV@HY"AG[)=H[p>pL[7GXB:IZ7IZ=6Jh>K?tBMxALsBMsBOuu>L_vJA=MvAMvlE>PLvBNqCOeERIUAPTS?3MU9CL.TCMR]HJU{YlHHV[IYaJ.]leL^@fzN_feW`H_=]ib`qmMcKgBr붶qmrԋ\f—]ێm ey4|0v{vh/)vB&6v2r+mTk6Tfpbјhͽ虷f;iȹm$ؖkdSj^x̧c\21kUzyȄrC$lOi͗?qI6h͡!fDvѩ\v2vst6my [v\Hp8w ]Xwe{OeTWmމk`Ɨ|RŒxxPnq2F Lj}_WFjlW_ư&q9şm k¿IlQ7oMoӨ6oZ\uPz }'WN+issl:fQdi˃`F|VW2QaevsW}z.vtz iN}uczK;}UxTN`Λ6ckgeNM?lED_AEi\?cB.WB+DYmCIa}HYPiHOukeA Je>I`!@dJ&a@mJkfD8K\kvAFf?EceAGIfCBCK?kAN\rTAqO@wpA OyyB Oe{?Mw ?ZNs@N mLEtHoj=Il;K kB;yL#lJRe?Lbs@K^)AZIXA;H,UAH5\?FZ@LE[@E\;BaF&\CyHWDDK\<#I_?,I_DJhYCF=Oa^BP"_:D"Qb\GSHhyGUjGAShoGQfHRiG#Tkl%IRoFOqeF:PtDOxCM|CLz9IsR?yddlUGxȖz>RY|B9Im@WI!v; J7{;Lx@,Ogw5BMGwCNwrCPNvBL%wqBL'xCMvF8OvDN?y@^Mx.A7L$uBbKnzBLj?M-~=MyAPy@NxANyB1OxA[Ox@4P{@^OzALIvANvr@Ox?uN0{J=L|?M 3@M\||AyN q?=Nan? Rlu:!Nj=vLk=Ltj$>\Nj@Pi@RgO>Pf7RNc7J{YX=/GHVqBG[?D \@F]E:5E^=vEa0?(D_@D=`u?D_>EI]1@I[?uI[;Lx?[MtI@MuAMv?ZMyv?qMw]?}L"vD_OtCNnEObyFQX^AwOS@#NUAK;R+>KP9H_X`"K^`d?J[aIYcJ6[lfPHbjeT`aP}[^hdlds~ h9q.옘rmxSi-}]biْopphҽq8s-z5|#vedn鱢oipivfi}aWC~hmDwlnj߂=u;⽣&x@pe|D_y❁tGj민dlqW4^p8ߓoaƓ4u<@tv{w[~^lB^Ki5їvm4 nn`|R91co[QkKiKerJӨHn&m ]|8ܣuzZkjj#iZbkѼ|phPmo FuM骗xe~tˍ}T+r| BjJ`)fqa])xVg[{XcelmNup hnx)ROy| yM}{˙T`S{'R]AFDk5DAA`d@CP`AC]A(B`@xEbBJcAI#cMlQ>M'r:Jdu>RLsBNpf?K6n@Kk;Kg;LZj:JElIjp@Jd>H^-?G[T@G9[?E\?2D]@D^iAsF_zBgH_DK!]FTP^> N#`BO`EDO\iIR`DkQgaFQ]dNG'Uj IWkNImYzjHlWYhcHWoiGeUalfHPlGGMn2FnM rCsMw?KzDOzIT;{a7i6em0yS{3np3>EbKoE4MvB>Jw?MwAO$wBNjw\AMN_zMAzPz?Nlz@N-zlBNxx\>]LmtAPo$BR=fXE(Tf>O gRAOkAOl@hKjnCKl@sIhn@Ker?7Nu@OvCPqDQpUCQrBOnsAMwqEO|oChOoANpD,PypCJPr@OFpDQnWBMr?LwX?NvAOasmAPBr.BN@r(?nMrL=Np8Nm 9Ml@Nk@OgDQi}?NPMeh@qOne=Oe:Nl_=LT`@rGR@CVLAC\/?\E`:vE~^?Ge^q?D\;>C^>}F_=MElZ?Ii_%:F`=E b=NFN]== Iv[>LZ;Jp[9Ja#MY{@OuAM*uAfMv@8Nu;MuiANzBiNvtDOknEQ4cE}P[BOWdCOXCMYD@PWHYgN_l$KR]EfJ\dJ[iK^&lP]eT4[nfV\huqviEK kƖsLcx ~bIs%`rzm g .l[ptZv yޞ{ʱuy\wX[|up{,m hcex Rx6b qz@oprږx˜h A?5`=LAY>ZBXA(EbAEfB[Gg@E|fe@1F@g?G>eCJb!FLc_D0KcRCAJgCGJgYBgKJlAKpALs)ANurBOxATNhtG@Mn@ONjl=#M"l>uL?l?Lnp >1JBraMo]=Kl<Jae}:I b>$Ld =JDe88Fd./;\6<V1[FjDJ hAG|^?G=\=F\=kE7dr>:Ch?B(e@D`@ Fal?FaBJn`eG~Qc2DSgESfkH|TcVJ{VcESe~FV;j/H+XnH%WmZGVkaGXlGUK[zCXNoxCGOvC-PyA*O2|9> N}{BWPy?LUuBN|yR@M{y>L:x9BNuBNmpCuNpAMxmAL7A3K,pCIM~qAM|A Nez.AQN/zy@N:z>Nw@!Ow@!Ow$?UM]sAlNto@MqBPmDPf,BPh7AO:l?N?o(@KkF'LnPBHmASJn ANsBPOTee?Pe@PdE;MLa}>N.\;HRAEPTDE/Z>!A^ >Cb"?Hja7>TF[]^?{E\e>E]k?G7_=E^=F-`5C;^=F_j=E\BJS_,=HI\65KF[8I`[:J i;tKrK=MM{=Lny"?Mq?MpmBMsEBNs?FNt)ANuWBM+sGDO#m ELQd$EaQ^nDO ZBMX{CMO\CN[nGPvdKRjLSiE"RSaJYhJCZhN]hhMe^gL[ jX_dgwwbGvrHS}xu;rb~lWfƋq^YePjnN[p @r|LwQ~hH3^|AE:~6#npe<}6S 1a@Xr/o/oz{cڂdH*nXt!cˉuhPv]MvfPj go㷭q?+lVbŸc+Pitph8vX+nP{h^QmqIrK_kO|NVɨtk㝈T(._dÇxfIveo/th6`ôTXTTbſzr%qBk|ȞimkY]rȕgx[ |rzEojͥ]YʇtUoP /{e蛦_R6VHttn{І}xyғM} {9Ɩjo$_cr@JvFEUg(CXE]=CU@BEVBFjfCEk>ACmBFmBDjAI4iGMfJZKpMwm>Nnc>Ll?L g>[K_&@K\8BHkZ8?u]4:XR7a?Df6FHmc@D\>CmZ)?+E>_=Ce_>AgA Dd@E_@eF`A(GcC;KodlJEXolgH\pH$[pHW jGUfIZexGXgHmXroHWqHEWpAGvVnHV{iJW{gJT eHuSXjFQoCOrD(Os6FfO(tG2PKswJRIq_NWvQU~EKUQ|ChJ#rCKrCLv{OlrMmFhU@4CWAD[?FbL>aEeMqAMqJCOr>M tCNr@JrIBMlBUOb]DNo_ B_MYBJL[@H\!CG]EI_JLbILDcF MaMJR2d(Mf[gOt]iM>^fVN`gvQf^feMg_:p֥ń`˂Ɋ~m{0h[~b TҌnTOWifr[oF usz)Ny"`tsq ق`;~/Y͗ zR7Ym l`ę`pemPoz$lczXt?sPd?2w=UF~a.AyEΤ|[,Cef;igqŬpR{e9]Ý_rƔkֶ {pÞJuɭƕHlΔm=QsrßP{D_ykp$̈ _8h$ys须 kh9U)mٞypso̾rޱ n,W<>BwM]Ll;p?h5`PX\j^,eQ"iعCn񵉖kb@8f d!~Qexexm:~/atȉӮ[ukttw䇜쁶|ۙP~~ /n *ryxUoe9G}p? C`>B[B*GFZcA FJYBGfBH8oEJqIOqkDuMrlDsNmEhMlFMj>G8L)iILjGM}i!DK2k>KnAMQrD9QOsGTGsPDPs@DLsA[MlqANm@MM lA\NnD^PEoz@L n_KhA<'Jb ?H}Y9AQ6kA`DDp[?A\v;>Z2=@Y@ Ex`AGc[A3EY_AE<_a?zD*_AF*acCJQcGStjJ^"pG?X!l:HTiHVfgIYeJ~[gIZMmGVmIqWiGSiwGS=gG`ScJUbHIT dZFS`mCPqBMRq^AK[o|BNsCNs JOqJH(nEIr`APKBvA@LwjC.MwB@LxC"M_{B\MyBMzFMPzBMuyENdyBMwAPyAN{A:N{C-N-}oALI}CiOyDnQ\tCPvGD}OxCNw@Mmt@Nx<@M+}IAYMtoA?M}AMg{D3Py@C`MzDXLY|CK{BNz-A5Ox=M(uAaNu@K'rBOnDETuil>NJeTFOlDEL$iDJhgBJ+kaCmKnxBKpBMrN@TNsBOtKBNqBuPrBPrDPs>;Nqs8BPow CPu@DOamfFPkDeQoESRnHWn)ESRmXAQnr?Pr|@RvBKQq@Nk?EOn=Ml=Nh8(Od:P)a^=P_u9MRa>N a>*LIW>I'Xe?E!ZCgE[EoE/^J?F]&=[Ea_>D]7CF7]v?:DZ\?EZ`6KzQ>Lx=Ls@MsBNs@NtC=O2s@.KNr)BMlCzQeCN^BL]>oF[uAG_FAFr`ADE_~BCHZFyH_CFu]HM`}NY2f_P\7gP^fLYafL_cmbY_akt-plqY-&q5tUu[eJ{cLeĈUc{hlkI*mp xœCy x٢mɘ.bvTQr}KsyHQ^M/cJmo˜k rۢidhCiRN:lPYD(wWBJymE\^%kN7AnABvϲ)}q܎Mkˢ`׊cQjwyzw̘o~qz{ zޜaz9#t񶉜&w I;g:m&hk#lo~{H%1~~jv|xYޠ!Q޳C`)op!m7kg_Rv^nk$GMromsiߠ /f,C_CʃGgmqxfsyjmuP=~j`ǃcZ<݂D'Nq^u9FR~8Fj?NE_i@CV]AF`C-HfAbHn5BIqEKqH`N.oBFNkMH PpHOqGNmE>NlCMk HiOngENOoXCZOrBsO?uPDQv0ERt DPxtnAzMu@RKZt*@VLoTAMkANmAN>r@L!r?J}l=IYi@>Ji=J\eXA@;Z>w>4X>@W=@V?EG\@G_AE\BE]CE\`bBuE`iFgTiES:hDRNdFR>aDCQ,`XDjQugkFSjGRihhEPaCDQgAOmBMpuBtMsE@N vn=LRv"@hKu=AIsBLxw>tKQ{@hL{AIMsy;AMLzALU},EM{DMxFNP{ALF|@ MxCcONv^COu@BNTy.AQN/zTB0NA{CN|ENyBhNax=@LyAN{BdO_yBtONwKA\Ny*@M~OAM~A;M|A_N|AN{AM}~AKD4M׀AJM}AN {@$Ox?ANst@MCr@KOnCR]hAzQeCQi!DJN~i@HhLMsAPtp@[Oi??NjVJKV=nFZ}AyE3]uAA*[CpE[MAYF[1CI0\iAGUBG*V;-CZ@G%];Ll>JGm>oJq=SKp>M\r?Mt?5Mku@Mu/AFNt=A,N(s(B5Nq@Mj5@*Ne1@L_?I-[>$DN\2AE_CGb6BxElbnBE_A F^DFaF=IcI]PdCNXeR`hJ0afJcbP^_lgj6„t]8/&tƚi\Sj'JzjtQfaA@i:nCFpŮۘuߑlvŸv,ʓrhj[z?SSR]M&dǘp̱Qks s'^kK)cGN?doP3HpXN8k-N{Omo^o}kwe񃼴uGǏqdlaF{+`E+o+Ętl—l~nbr[v6y%q{|}-?кtznrƛx' fK)߲G,3Ju͓hXp͝!q뷍m}i#bʅ`.kؘqWpךSonЏ^j,9Ylf\roĐ{W]jbrv0Ci'5 /yUjdiJS ~-=Hj*AD[BD(\DIwetD3K'lCfJ.tDJuDJp>EK>lELiEMlrGOl~IRl GSRncGSrITsAJOXuGU"v5CXPtCPBx*CDOy:C!Ncx?Kt BL$rAL@qBRMmAAMl?Lm=Lmd@Lj@LshAhLfO>]JFbe==E]5:qR8<Q7:O37On;>"Si:9Ra=?U@B2W=@W<@T>BOUy?C\AE^bCEX7EF%WBE;Y?aB\CI`DEcLbHRcGOW e3FDX7jDSkDRpqERwpEHT}idHrTcHVT^FS^BjRgDSoPFSNoFyRiE5Qj@OlC_OqC!OsC\P-tANv`AMuC$Nv@ Lyt?ZL0~AL}@Mz?}Mcy:AMyDaLyBIxCHJxC5M_{I@ZMdyAMGw?.LuCbN yB6NxKCN2{CN"~E`N|@L{E@M}@NM|?NvBP2w:>iLy@N@N|~BO|C,Pt}AN}AOm@M{@LNDOPtDP}ANx@Mu{AfNgs?N?l/@+Pe?PaBR eF+Rj<|Hj<0Hun/AL|p.FOk<3PCj;QWf/9PDa.9O\>:5NW-@NUC>H$Uj>G[BFl^DD^/CD]?D[=.F[XASGTA4GT>EYX<}D[AIZ->EX<|DX_L_p:?Mw@MxQBMvENtA N*s ANo=BMh|BMNcBM]@kI X|AF]@Dp`ADalBHF#c@KYh8>E]e<>W78QQ9]Tf;A\U^>#BV=@GW=BFV[>CWk>@C^^|BAE_HGXDDTFHEXClFk[ E G)]rBEZtGPbGXfCVdgBUkBD]VrDSbp,GUjHMWZh5GgUe*FUbCTHh?Pl4ERqGFSlERZjESVnDPTrCM:sCMtTBMuB]NuBTNCti@LXy5@oM~?EMC|z@Mx`@NuALO2uBNMyQEL{0F'MyC N1y?kMcyAXMO{EAdLyBMxC1MzBLiyBrN|BN7}@M]|@M|?Ny@NvANut?Mx]?%N{APV|BNzBBbN|?L}AOYA?N1 BM%MBMV~BM|}A LznC)Ny_@M:u?N(nBPiBfPrfCQccEaTiCOn?KMo?KtniEyPnAROl=NpBQtwBP\sBQs@Psz>NtEPuvBMQqDQtA\PpDRpDLSpDQ=oB@RqCZQdoDPl*BNn@vM+q:TLo<=OmJ@jQi>]P h=Pg=}Q3f=Oc< O`=LN[`? MWHH]>_EC^@Cb{>@@_=D$\?FzZu@EsWFAEU@EX>CXADU>CR$P&64?&WK9BWf9Bz_>[Gwp?BIqBCLn@KfAMc:IlW?M|xM@:LWvBJktPCKtAyLrAMp.? LdBN\A>M*V_AmJ9W]AfF]rB"FaAMEa/EGzdBZF`fnCxGZfEHcDIbqDmJV].JOYNC]IbN` cQ#afVag!biev0sbxz6yOoxܫ|zD9w9rP(bQ/fxt}5w6sqzr ToeEqZ[i&WAZތ_ciSjduׯ|J8 fmTJ]N'H{vfM}_s kji~Pkyeހẅ7am3hzVJjYyO*cYky+r:trW qapkZ堘r*iVvFdqQPwI: xEmsDUvktV))聾e(:kQ}pd o5qM'mhء0`^Gi𹠜kd0g_evr }قt|㠨 p%nьyR ~J~BCSʂhq`rGJthA4FiD{DXFED]mDTGi_BHq@ I0xAJJwCLoDPkPAQ&jXEV mGXnIWlJ!XpFIURmHU}npHTzmWI;VlKYrDJP v>Lu->vJxA*LuyZAK@tAKqVCLmBMj.?LlM;wKilN=Jgr?K_>I_f@ Uu=@BW_9=}V5;SS2==U06@XVY<@B[<@ X>EDV^NKsu@bMzsAL'5BLzB3NbxzBSN>zbBMk|BM[zD8OyE N+{CKzrD`Nz>Moz>M|@MzAXNwBJOwAqNvANwt?Mx@NzEQx{DN{LEOi BnNAYL=}AK|C)N|F#O|BMl|CYO@M_vAO~rBNhBaOcRFTLdD;TiHDPoAM`nl@J`nBPNn??NjdNo8@Pm ARNiJA=RfC@Qec@JReP=O\e=NMcBN2a_;I[y>IiZ=_F/W#>pF^U>EdE?|De ?+D_?XEYx@U#:?T4>V'9,AW :B_;Em@HdtCLMct@Lem@FM{m2?ZLVou?L`u]ALsElLsCoKu`?Ir~BMoCPAgDPaBrMZBKh\BHA_"CdG`C.FbE%GfdqEFdh7C+HofCG~dAHH&b@CJ^sDWNYzM$^bP`diQ_bfY\g8a^+hcnr _m#sϭayyot[x,x"G&rV@dJ,y?}JwwBLp6EbPFmGSjG'[jjI[BjHSiJThOISg~HVkHFYjxHeYJlTGWqxBPt>QM)t=cKXw>J]y?Jt?eKtpA}M`n@@Mm>*Ll^=K|i>?JLd?G_]>GY9S@T8m:T<:V2>>TR=?1U8>mAMuF@NwA[OxCPy[?IL2y@Mx2ANwUA~Ox@N|@M~CN{ C%NxBO{LBN{B(NzBN|AMŀUB1L }CnNw BODx@N{@MwENt6BLuwAL&ysC=O>{?bMxYA5NzEP>{/CMyA8M}ALC}LI|CYM]zBUM xmENx&A5LyBMVxAMHuA N*sC>O^hBOaDUThYA;QkBzOoBMFnEMnDNnCB;PnBDRxr'CQpAFSpDQp@Lpn.DP_rCCPpTAOr?P r BSoAQpERs?&N4oBvPpEB'Pys_AOtI@[OHs'>Np"?%Pk?Pf`=Od>Pd+Dg=D\?sDX*@E:X@(FVG>bC W6:V77U195aPc29QH:>2W9!:V!>?W9?V;GAW:B`s_GpD@Kt>LEr?NWqj>:MqL?-MrAqNs BLtAL>vC?NrBMjCCNtfAM{eAK4aBJ\kBH;`4BFcBhDfPEFgBEAGjCHBhCG6eAHcCXMbyGQeK]hN`j9Q_riW`*h[0eh[?pf^J sXg|AwWsi{11sU!\E?fqvsx.w8.tb*pgq} _mTVSL\Ĥc3lf{!dca,Vk堎i=l!b|_ks`AJyfN~Cj&xٛ{x |ͥvH_{c%~ɚƇid}hɗ9 lМivݍiRow׻m{sڨnIߑe]ic-i՞jTY[1]cf8bss3&|عY-''>xD_tbݣZ[ʀ\ tO߂8f8^u+v}u_k{0hVPxϼpE;zEgڞI7dt5pL| {|`M, .<},~D'Di@_'FQc G VfFYhC*PkBxNBs?Lu?3Lv?@sK3uOAtLs%@+Mp>L#m~@Km?Kk?MJg6?Fm^= EV,:AdV#549TC:S9V?f=8UA?P4@r@N>AaP;>6Sf16YP4:%T:'@HW<@lW7?BcYg?DZY>CZ@D>^DGm_C#GZDI[AhE3]*BDL`CG^DDJ_[GP'bdIU(eFY"fEE.WYe0FEW hpCUTjCfVUkFZjxGZ jFTi/GRiH>TiGT1hGYkGWM;zANw/CNMstDNvCAMy@M|@M{@KE{ BRLzCrMxCM}C.MaBLU|^E O{DOyDzN:vCNvCNxANvXBDMqDANfBBO]f?Pl4BRsAO"rAMn?KkoBNo@ PoOCSIp.BXSoAQpOCzPqBNtANweAWOuQBPrBQnpcBRl@LQ|q>aO,rBP@nD1TPmA;Q$q?NsNu;4On =6Plz=Pi;PWf+9hOe=wOc?N9\,>KjY>G)[>DeZBFS] ?Bc@_C\m==BJjn=2E_>XFnWu;.DV=&DWtBV06TQf16S0!6!TP5cDDf>^Fi)@8Im@L:u?Nu?Ms'@}Nt@eNsBOutAM{u|A_MsyBPoAoMe?KIb@eL dP@JcBI\]?E#_CG5i+EGkDbGsjCMG*iCGeCpGa;C IdKDKgEHSkRUbo7KO^nZN_voVdVi-[OhhZo]&4Wsf}ΛOxsBy,L>7s{}܇JedS8tNv{uU-yagox\VwoZĢse+dZ@fɣk^Љ+^daRYo`w~eaq9XwggLFcw_1‚KkHxܫcÆw@vWN|?m#sg^Xzfޞ~o?rc\nяkpLo4k\f̨jŦ|(qSBQ^ӇiFR8NOh *pFpPƷ{Y{K7&iX e])`蘋yMgyWFsSgkK{.UzEVsjiܓh-@yt/D]}4pTmR}ٔyI}Ŝ{ zP~YOaK|}—:umj{I]ePgIJYc?DZZDfH[ D,GbCFjBJ sC"N{tKXu@Mr?Lq?M)p?eLj@Kh>Jh=(Ga:)AA]=@4Cs]AC]+B\D\CE]_BEc\7D#F6\FG\uDHSZGL"^fIQb7LpYOg6K]ZfIsYiwFUjjFdUiHWoiGURiGnSJjkHS"iHVhaGVj1GSlHI{Rbp7E.Qp"DOuuCLxB^L^yBM9|AL}BBFN~D~O>_K.}CFN}@L{q@FMS}?LzEBMy]BYMNzAM~K@MNC`ORC O}BOyV@MwANM_yCOxALw^@7L2xAOy)@M{AM|oA?M} CM}NAKx`DMy{@K|.BM|CN|C`NyAFXO|xODNxvCNtA#P"vf@NAq@POj@O$i@&Pq@gPwBOqt7BN[oAN2oBPp,DQUqE UqCRn+CsQoBN@q7D"PtAOwAOwCP*rERpBQo@YPr@OnuBQqCUo3LR@LTU>YGNZ>|DX\NC!G]A]E)e?Ck=Bk>>Epa~?FNV?#F:V:>DVKvn@^LVu>Ks>LuW?M|x@Lu@1LoAN9lw?L`A5Nc@ M-h=Ic@G8[AvE+^*B-GAf@^G:gCHgE2IhDmsLa^ZpU bk._\bWbTav3{qLt˥{ 𤦕=ub=ls4uUu$w%coԊj}wuh pÓn.ns[ufo^}kR:{mYKr/p̨qtSz 4jp||cэ}m;r_{`o[\R]ތdeo}ydWmAKKu#bYtTG*A!\>W0bŏhw0q}m|(w/āq1@f7.%⑄o zhZ<#vvUw\9rEȞ!7Fw@m]eŎp`@|p1=}=z'uv?yfOO؊w[~Myzy}|~6lR}RBrxm^4SrJ'B>`LCB_>@QZD6FaEGHgDeIWl CAJ"t/BJyEBMwIPsG1QOnHReGP@_:FCO`CL^CJ$ZUAJtU;HS2?:K UBKlT*<MkuMvo;DLn@hKi?H,e;{H&f4?~Y7:CV?C?uVMCJ"i^V,r7qsspXoy=@S-5N:3'BZ>t?]`><]BB`ADDaiElD aGE8E$^CEX EG WJDvFYGDZEZMEmFWFI^kH>OcL"YhOJY%iSIf[lHGJUi[HShGP!hMzANmy2BLyBLyBNu*DNtODPt?NrR@OmBLQ>kC!Rn,CP9uA%Map(BLoCM=pCPDtDQBrpFyRp E[RoC&Qn D"Pp D"PpGSrANfqE7PqtDPnAQP)pAOsYB?Nu7F,QnuERFqCG0T#qANOm_?#Mi?BO.p:Lqy=OnyN [@DMT>HS>F[|>D]Q@Fz^@EbBEhnBBEhc@}E`AUFZU?uE,T?SDqVl;~BgG[gp@Jfq?1J=n{I_aALjl>Mt2?MvuS>Lo!?MOoU/7S360NV<~7M>8iPA_?TBdU1A8CV?@Wa?2AZ]EB6C"dDED1cCDe^CEZDF&XXE H~\CE[DD#V'EEW0EKbISiHWhGSZj&E(SMgsF"Qe5IQiHQlBEQ~pB8PjpCPlAOfANOp{CL[rcAKRyAKH|?IwCNwCPwAN3rYE]Os0EPStCRuL>ENvi@LXy?K\zfA3Nu|2AM{@L{}@M}@M)|lBFN|\AL|,?{I;z"BCM{A^Nz>yANK{=N x'APy_@M{@M|QBNxeDOwbCN[t@RNlA$Pi!ERvgESezDmQifCMjB2KImDNuBOv,F+QOq FQImDQpEQupCOmpDQJpNFRlBN3nCNNrBNrpBQnpB4P^oF'PpoGLPpD:PoD"Q'mbCO|j&B/Oh'AOkJ>Nn>O*m?Phh?Pjg8$Mh`6?N [EgM[*>sDXAFa`>nD_s@Ga@ F`@DobBC$Ebi@D_+BHT@FR>9DT8cHh@Jcn?JfACfOp~@Muq@Ls?Lx?UM"xBTMsBN3o=?LYk?jLsgR@L~g?Kh>G aBxG\aCG`AQFc*BkGdBtGeC/G"eCG-bCHVe@Ik@tOq4E|U@rGVjIYhqVi8v)cn8v_wjkQ\aL~{Bq]|jɯ%•yۻOp_t^ynzrput͸rӸ凉w޸}0yetXs\y.uÐmYgCg|Gh)o,Vf|6^0a-xXllL-uW-|hč"XqfzuudƑeC{/*ՂʤקvmЃ/sXudZ_]|^]}^֒]9`8~ib|(IwNd EjQ/Pؒgk 5qu/=rh/fVfܤU%pA6WIۤ8RY(vڋi3okcj١} {fO}Jޝ׉*af8q­vEvP?6ϑgՈ9{D{Oxfz-}܀遏}d`FklKKr FD`C*F^EFbmCHmEMsDG_OpDFM}rWEMwF O;wUHNpiHNjDhLcCMG_ClM^CMYAEOS"D5QQ@NRQ@L0S:FR6=6I^? Mk@Nu?Mw@Nr>^Lk[?cKfjSIY>UMGX`ekUZwbp]{\{hLJGJ,3XI 3:R:=AET|=AR]AC|T+@B{T@B\RB~CafC%EfDE Fpa1AAXDECWDcFKWCUF4\BDZDKDWB]GJ[GQdHXUdE_UeCRe[EPc GQhE^Q@nLDEPsCOtBOoBO,o?MpB`MuAhLx@iKvALtAMtCO{r"EOmHF OpGPrUDFRos+?NvUAMx:BMKyEATM zAJM{DAL}U@N~nAP{/BOH{WBdM{OEwM{DM3yBM|w@M&{ N]x?FN|>lMgF@M}KAMy @KhwCM{mDLPGckCQ(`fDScvCeScbGU[ioCMe7E|NoCNkvCoOu.ISFqFR7mBPim#AMkC{Pp@"Q oET?m8DsPxnCNq>L`pCQoCQ#lEOkGmPnoB0OnC]P`kMC#PJi@POjAPlc>;Ool=Ng?P_ARb=|O]?=OY^@}L\@F^>@DC]?F]D@F]?D_@Dta~AD`4@C"__CIVAFT?DU\;?N/65{G38J17J39%Ob7<U4G:W&5F;U70Y"?sGgvIi~Ms?Ls)@NuAMsFPoF*Sm@Nj^?LiAMha>Kb@@H`@Dp^B"Gmb:DHfBFeDG9eD$HcCGibCuIh BLo\B3PsD5Q3o-HSdLYO`O`6gWfi]hJbwea#ezsnw{>tP{ +u `sgttѼswyf6x繃"|Pus8vvgŔxcĸwn~z׵ΛU|pskhug@UmŬ?ja'g 0d>dWtK_Wx fzn2^샂j枒l4d:Dvǘ|kQ[WobY笷:G=tcpHyNl9spLeGa֌q@1N|C y=SEu ?lRPclmCse jNq~VZÉS.e\e~738ߛ$>ƫjɄ6Kmi=!VyvX{_WvO!}IΛESYOnnu'wम}ȏVE-|{z;|suބ[~:BtBCah~IHpABa?SD_ A%F@b1AJnDOw=EHNnvHFMNvAE NNyGOvKiR pHPYgnEOaCLZA.IVCJX@HINVWrDOR9@LzPALJT0>JWS=)L`>Lyh@Mo@ NrO>Lmi@Lkh>Gb=j@WR46D47F;9J}==`M<)=S^GTHSQbRWT5Sgi7kwtċHuu[x>2FzzlJIN(33J/5;S7RB@V=C{T%>BUa@sBRACVB9D_B9F!a@FDYCDDVDOEeUCEVAD\AE_CE[bD'HD[FN_`G^UawGUY@dETfERxg%ERchQDQkEQhnH>N%|@M&{WBdM{@BL{CM8{CYMNyALD{/AM}B8Mz`CLwD*MzLACL ~AKy?EOrUDNogD/OAtCNuAB'Nw1AFNx+A!NywA:N{|AMԁE`?EW[AFYTBSFY\AiE`?E_ A27K4o9_T38V3;UM56"X|:_>Y]YBIh?cInk>G5k*@I9h>Ik;Kt7>xNw@?rNYt?5N roAjs9.{ߞ@rċmQ_lND?UqTDsMB(pAuUERQ6>p2xK-.kMCz@~ZJTmB{B|6U1jVa#Ҍ7dt_؎w{KwwGCy9Gᗩ ZϢҏog*w0ٝ:wxQ }iD}E֊ xhxy}Ι#Bq~Vo{W]c܅KJznBABfd(@DGg5BGYiCKn DM"vD^MxG~Ow5GOvsI/RCtKUnOR^`nK[hFOB^AsIX;BKYDNUAJO?IWOOCMM;UA O]YxCoRcxBkPhBO3mACM"n?WLFj@KZef?E\v<>O/56F<;jJ=>O?e@RBl@M\QM3q v>vzN4xV\~n$iM-HU+P6N/BQ\iDQj/G1RjxERPGmFuOqAK4rCMfvCwMweDMVv=ANuA'OxnBOvMBNtBNu@:Mv@ANUy?Mz@@AMyA?MyBLx@N|5AkNyBNyxANz>MyAO*y BNtCfOiCP ar>Pt^;gQgS?RKkD)U;mwCkQmdEoPpDMtBcK_w EO y=N2sA?Q2s?Or>|PpZDW(nC7QnGOuAJkvTBMuCNsSEPtDOsCVN6phDPo*?/Nm<@NKn@Pm=mOEn=OjsV=O)q%BR'gAS3Z@PUAO UG=aG\a>Ec9AGs^_@NEYp@B1[`D^F aF JaUB4G?_@E5^2AaF$WUBHxV=6FU>LFV46:R@1I4)M)15+H4:}J37Q79S29kU59Y90>c+>Cg_@;Hf?BIe>EKf?Kj=iMr?Nwf@NAq?NqBPgk^ER9eC.QaeAoMeBMLeCFAQgCLeAH;e4@GAh?G h?Gf BHLgHCIeTDIIg?Hk#CNMr1A:NvBNyYFOCvFQ~lDITfK[Og+Tnb`JZxd]Yj{fvsu'`o<]A}Ŧh{T{ z twѸx~]dZxF8rY@qt ףvvʓ/y?E|s6vWTxNxmB] b~юsΉy-dK(XɀZZKyVX>#qH^7oExSPZge^q~Ktkx(}:J~֊yv&w[{=Aۘוo{!LUx}]C|Ad?? a]?iDiYAFnCKrCoMy1D5M^zJF>OwHQs3KRnOVo,\cxjZdwIbRe?JY1?PJW@IRZ@CHN@rIP*C8NUERZJDxSja@M d!@Je@ Lj_@9LZnUWA+BYAC0a?MBaA^EaB$E`^BC]F'Ea#FDcBA_CGFf\B H+]PCLd!ERvgFVe E#SeBfR{eDSufDRh]FXRkE}Pk C"P,naCOrAKvAK{BL\yD"Oy*BM}x&ANx@pNwAN,x@Nz?;NzAN{@Mz@MMz@[MszO?LryCNI~l=J;}BO}=Lz?N-zAfNRwjCKuC-LzCwK~CL}YCvM|AMyANx'AIMtz+@tMzBP!{A N3{CCMv{BM3zBOz'AOxy5@*O7~P?M|DBNmx#@NvBP$y=~LGv4CNZsfBMYj2?BNd=Q f9P2i~@UZlBV0nBQq!DYOs6ENtEGOxCNyIANuD?OptiBP=wBPpCPSonBPkuBCM xbBlL v{D)P/t;DP6rE]RqDPpC^OoBQoNmG][9oB8^?F]H>CVI^a< K/kILuG>Lo MMdsӍ^_؏^[W̙$\ i{`~jNoM7`yʕͅC1⫨tʳч{}ū'jux*$o}k!iߟ9m46tX"{]sHW2#hSLiDawCFޟX̨rMy{0Ih9$QvC_vE3{TL wZi֕ob܇ rKe=J`7dBZ67ON?.9MD@QUGW@VMyOi~M{˚Mwß*ÐЎoug֋uV~zҁǝnzp{wlJGS*j2Pn1-:T%;CQZ>YF\~D3H]BQDYA.CF`-AFBeCDgAD e3BE*cBOD`CC`3CEB`vDpET^E2G4[:CIH\6AgLcGUZiEVOd]EURcDT5d?ESc@EQedF0RiDQl0>`Mkn?Ls @AKvx@Jz.CMC{CWP{xGT~A4Oy@Pz?K(zC?MQ}I@N~@Mz-AM}yAWM@zQAL(zBvMz!DM}AL|ANz @Mz<@Pqy{@N@uDL[uzELzCKt}BLH|@ LyNBpNyALMxEAMz@N {?NyAJNy@]LOz|AL{BN2zANHz@P}=M|VANO u-AP)qCQrBP#xFQdxC*Pyq0FTqF+VoEUmkBPm}CNoBJPkoc@ On@NLoBCP*n@%P7lQ@PliFi[zAhF^V?hE1UA G\DeH`@CG^CH.aCG-_#CA[DGs\G=KbDE_^94|4hP 35O0";Q4*;=SS6Y=T1: U5u<\WR9?\;GF dZ>LIlkK=GZk>yJgG?KM1kp?4Oaqu?MvLALx@3LpBNgrEO[ BN[]!=_Le\CL&oBLmcBIg?D]BHA_r@GkdsAGWiCHl^B HAlrCHNrC(JtENv]CPN y$C0N/x@Mp)FP*m+H)SMkSI#XlO_/oRaGn M3_mqek\dnt}~鼻xs6 wįv"GyŞwgVt&whϞzNqmtr_ד o>9s$?ؔЅwlsΜPxjEf܋bOg^Ǡi^-QTŁ}XɌj͔]cp`S40q\މiOE:9o{;ƮC7Ə䀗^p}+̚sUlkƋ4fki,csg9wbEnNRqCA}w@KeV\4VȢTAxSS |OR}M #~P]wUÜI `'{Zq KqGGXlDNsZJzVZ L.X4_HQ0cADKWc@IQdOCBSMpK{\$il(xNJ =wőoWv29vs/z4UƏ|p\qLISp+3M00:Qs9DY=HY]C*JZ>CGXBDc`K@@mdCD7f#CcEwe@CJcAsDa|BE_)CF^BE].CD]C8I+`EPdMEUAiDTWg/EWdgDkSa&ESlcCQ-fE\QYkBNOkANoA/N[sx@LvBQM{S@FN{\@`Nz'FRiDQC~AMzBvMzAM|>L}GAM*|dCuNzy?L~y2CMyDMz!BL0|@VKzAcMz?CLz>APgyAOuSCLYvDL!{BrM| CMxB[Ny>L>yAOyAN{>OP}'NocB QrmAPn@ PmARl@oRi>Q gN@(ScuB=Y`?RK]SAFPZ>JY;D<\?~EZ@F=Y@G\@HJ`AH^BuH;^CF^CB^_xEH]DHbJMqHIg853{S04N/e6@P4:T5;xW6v<9W18!<;W>JE ]>THob=Gj?Ho`>Il(?Lo>MZrE@)O}tAuMrAfM,pCbOYdHPXBM)PoED?R]ZrS\e;H_ vy(Ky%~ʟޏπko]kEˁ΄unlF|AT+5RO2>@vQ(=\J[Lox@MMzAM%zLBLxBMz?K}NuyA(NvDEbNs@dLl> H>h?oFcAoFf@Hi=EsMWoEMqCNvaCZOxDP{u.BLPpCcPq+DOpuFQmE1Qm!CQ%pEPRrGSs;ETrDVqEiVoDRo3COqoAN@t>NrWB+RnP?=PlCoQl@Q$g\@Sa;QG\,?R`@UaA!W_nGV[AJS+?D9X>HDT[[?gF6_?F`,>AG_AG]CHZ DFHC]yFIVNM]{JCOfhfp~[iSNnF@aVz/=2aMo1r6R2n7UA8-Ghk{?Hq@KDp>K?q>Mt?6Nr@mMpA+N9l DOY_FPWBMVBYNdALnAIr.AGwlADcC|Ee.FxHgCGgND JZixBKAqCM| C0N?zDPv DNwv-ENgz1DLOu^EP_pIdXjK_i2K]lQEap1_d0mde2mDv\ytOO4s~ɛzazɫkA{T@lzcBYU9A W;wB2Y9B _*HV*AIVyBIZYCFB]+D0F5^AE<_AE_@E_Z@E]zABZDCDYCE^BeI`CCPeEWiEUfMGS\aHS-cBObBANaCM\*D4M^CNnCPu">NuxABPyAN*wBNrBNNsCBMmvDNyC N1yD*NyY?JzA>N| CP|DP{-D:MrvGOz)CMX~?J|BMi{dCuNz_BN'u?COWuALzCB1M/}AMz}B NU~2B`MeAM}CcNuhBNt?Nx@@NExW?dNt?M s3@Kw"CMzEOt|A!N~@5L{@[Msz?ANst}@9NsBANvEaMqs;AHJl@@E~cA`E_DNG``VBGbAJykC.MqEOvRFPvNDQCsC PoF7PrC{NCqGCO}mCEP+mCPNoFQ"nF"SMnES-n>HX8mwJ\nDQlk@KMoAN?s?DNp!A'Pn=7O;mPBBQiBMSfeBU^p>fTYf:R<[ATAb@R_MFQ]@H/V@D>Y?7EY?FIZAEYq?G\AGHZF6ITUCI[LOPaMRRnig؄}(}uTNR_63L{/0R57U9;cQs9+>.V9@W=!E_j?QFdAcIkmG>Hm?JTm@=Mo,?zMjt?[Ns@lNo[BGO(jDOW\FQ[CoN] CMXdEMco]DJpHBG gCFaCHEd{DGtiqCGpjCMImAKwCMCMZyEPv|CuNxCMuDOtfF QimIXfK^PbM]ucQ_fUbc<`f[`{TZA=udS|Ͷzn]y%vbXyxiNx{&m MqsrhRw k5|lU@~g*Ru("-czVw Zizbށoܔבrmex@V~fF5u0Z~atS1pTU87o?}FtpЗ{'̘Nն0^@ԭ}؅K~xu8rpV^TRІ`P>Saݫp’(fHMDם悏HQSS΂OQ~OSyMUtO\nhJC?m HLj!sLҎyzS*'W*"Xۚb^w]$%nB]ܞ~Ԁӄ$=stu^} I\fy7@eDAraEDxfDJrXENzFO~J$RzSSUsZ]qq2V\Vp Zeyi\jh:|MLTgJEKE|Q=>=Q=BY$;AZ;KB\~;CaC:Cic'9 A^ =.An_ >EcN@JdCZL]CuHWC;:T25RE2b:P5$@O=AOFGJL;e`Tgv|rag xa nD$t]{,:{~{utOvcVQZZ=C~U2!BlU9HY0;#J[=&JV;HU;IVAL [nDK_D+I1_?;F[G>FZ?G[&@Ef\AE\BE]B F_^CJbDQgBRmYFUojKG^Sa FQ_BXOEbDQdGPi_CNIkDNrEP{@NnzIAOwB6P!tBO tBOuAMJyDNy>K xANwB OywA@N0zS>MzBNi|EN|FNCM^O@GLABO|;AMLzBMGv~CN v1C}MLx~ENx,BM4{?hL @hLAM{CN6uBNArA_Nv?BNyrBOxBOw|AEM1xp?;LfyDOY{CBMx|BM|}/?LyCBPu7BOq6:K0X/PO2'5~S9;Qe:=1V7Lk.>Ln?wNsBP_oAA-On?N"gFDP ]ED.PZe>K_AMhpBMMlCJjHCFpbCaF4`EHfoD IBkJBIj-CxIpAKyACLCLzDNFvCNw DNwv-FxQsIVkK*\dXL\_!ST[Z]d_[i&emrh`@gD|<}rםzSxϦvlw% wx(w%,%v~scȡ}dzgiYԖmܖuzbCv^Vvhց}gpqraYum]E#t]vC=vSBbՎ ~McVq\ԃ7wb 7sRn~~+ qbrij]=rhuwm\cGzaGOz@N K+]aQ휖|B|De~8FyIR'V}:QutORotPBkILmH0rJKSwPQWf}"U55\7Kb pm:h ٍȘiU8~C {|'}+ܞ~Ģɛq+txGQt8>g#A A2ezAqFiBLpEPxEOPq^JRQ~XM^fy[,cwWRd w.Z fyP"WrD;J^ACU;`@W8O@]<@^d=A`;@d}rDbY>.E`=E`Q>[BuQIJGN bn]fe_|O Iu"Wmj|OA&s|wzm~j'x-NLUE<3EkT8lGW; J"Y>J"X> IU=+HWw>aKgZ@ND]@LD^RBL#]A5JZAHAZ*C J Y@iFUAxEWiB:F _KBH(b@CMOdEWh?FXjfJXlKIRgsFdRe?FRfFQe/H"Q.gjHOpC@MxB_N #@HN}@IOyAOt\>LuNAPNxO@uHDWOu}AANCv@dNBvAOt@NsD?NsB`PsDQXrDT4nBUQjALnBdN)o@@On=OmWBRfD_U`tC[Uc@ ScW@ Rb=Q`&CNT>_<:NU@KYg?EXAHZBHZAGZAEYA%Iy]AH_^ChK` AJbULJ—BfܢꘙyIp8yqldiZ_"?N7FM2v1>Q1G4PSA:MK*mS=Kl?QNpFAOr@=M^~A;OiCKm>CIhTBbFdBCGJdBHhCHi.i~i`l_j\jNWTs+D=dDB_>B]>@^> Cb?DDXd> EbY>G>a?J_J?8I^]?G[; B4U25N67OH:#>\P=:@QA:AmS_FP> W^WTeՈ#yN2+s$KrT|RFEr zt_]pEDQ:DV9;IXG\7QG?Z3BO`ANW[,DFP1Z?AK*WQ> FU@FWXAD#YBE]XBFd@HfCOe,FLU`HYc#I4VrhE3RR/gFRgGDQBkIKSnHOqC_LNv'AL:~[?Nc{`BSOtvB0OuvvBN9xBtNy4DO {BMyCMyCcNxzCMtgDMzuGc(>HfB?Jo.>KtCPyAMIy`AMJy@Lw\AMOl|DSdGXE]WF ZcB@Sc(A=Qrb@RavA;R^=MX?UIX>DUAyGZD?H^AEu\BF\kBH]4BJ`:K_EMa_kkYGOvZd{MsC~n i Y]>5uM.0.0P36"T44:S2>>V:CSWAHo_>Fg<&Gtk>Jp?>pK[n:vLn@NAqDNoANMnDpR`gGCQ^M{?bN"BMy,CMtE3N.uFkOjuzHQsfJX2p;K^jM\dLQZV>TY6h-ngr/{ޭM}@{|u6s;Otv zz3}alxQeu8s៱cu]l}CXJčP˦4SD&^nF<0V{XXmĈGrpҕpX6n|i{sbblFqs]uvlswS~`1|:|~8zȴIlj ~c{tr "t z_p{Z0qJz#HKHU7Dԕ4x/GWXŗ[sX7w!GYu EPT#Q^ ^mIq5lo _^tLRqIOkGM?h@G a@FZ?/DiWN@ODg\@E^B/Hd`@G a=F_5E^>FZ:AT27cK59J;$>L=@? QBrB~O|LJ[MdF[OevxȜqh~7x|S&rVy̛lYw5[\biDEP;9D>Vn=LHY?H\>F^=E^m=H\n;DIZw>aKgZALNWALUBLU*DLRX@*H[?C]?Bb>=Hi@LJjcB}Na1E%RZES^XCP g0ANjE\QYkDQi(AsOjEQql GP8nuDMrBLyAMI~ABNR}ANwB]NuB6NxCOs{IvR~gHQ|BYM^{=?OKByLDOxJBLz@5L{BrO+yANHzO@;M}? L{EOzYCMXxCWOx?MxALyC MyEN3zj@L{@BM }BM{%DJO{$C0N/xCMuzEN ~EM/|BMAy,BM4{AMz}@M}AOh}?M|GAyM{A MzBbMvvB.LuoBgI'cCG`AFbb=EEbAISd?kHh@Jo?Mw@^Mx@Kz@ JczCLy(BLy@M{]?[Mu|@)M|B@bKPy8A^Nw?PNEy0|!;0iJyQubTJ9I/+L#48 T5< T]4>>V;BfZ<;D_EcBIh DIMjAGkBIdsBKx@Nz?M {'?KxBLwE3Nz8ءh{~ß }ܛx_0pnFG_6pb輮DG̍ÏA xGe]qC>#8w7BȟJFvps;gsJn]fmBm̕t{-*sy 2%0b*U{Fѽ(oV)oxmxdǙwjɓ1vybݓhvb J|)fajʵez{̠}͎e㤠p?ۑo?zAPdn>0vCZʨm3{~weo8*Y)uIztQI0S~sX*b׍mfuxnL~HJό՗Çښ. m㖞zQl->joEXKg8>iW@9Fp`FLpJ$Ox(PQRQU`g,hlo(r~&nmw%YWXuHLkAGLeDIeC@GbBE^@AEc_V@E_@wF^@G_>'GI_:[E^;Ecb=EtdV?C[ ;==S07:YK7:NG;> IJ<>OCtCSL}SR"GvketЏwНX~J}]t3tVfq}V]VYcD9EyP\>WD%Y>E\Z?E\@>Fw]?FZ>>IV;4JWW?M Z?KUDc|?I=fWA,M+d[BPkc(BP;`]AO;\>LjeO9In?MsAwNo>5Ml BNl-FPoCNtBnMy"BLx{ BLjz^B=Nx@LwvCMyC%N{*EO}IqR{CkN~A&M|(BM&z~CM{B@KxBPfwt>M,yb@NF~A>N|BN~zXBNwBNvBOxCnNyBJMrx1ALu@LqwEAMzt@M{>L}@3MB{BBNP|CNO.~LDNyBMuBNy?Kz2AM{f@M7}@M=>WLyAM|xANw CLm6BIb`AEd~@Be?Dod?MFcCG]QBLlN@LbuA[MryQAL|CL&} CsLzAL8{F>Ly@NzxAMJy?pKxAMNw@NVz>Kz=?Nx2?)N(v@2NsgB*OJqfB(O=oAOmBPhF3SbREU]CzVUaCSdBRt`C8RZAO]9E]3@xFZ@6F\$@:DaBE|a!BFM^CG`]DHVlFKU@yQSRPQ^x] gyȘ߭RjE{fyQm?gF4-XK0<5S`8J>+U7@"Wt?E'`+=Cd*CeW?VDWd=DRbe@Ga|?FA_?F[>F\=DG^);A];@aX:7D:Tc3)6OM468H<>H??8P#GdEbQf[RR}po|ߦɭ}Ы+KwԄz,uÂ/h(pZax]QNa&DCT;=B\?D3a?eD\?DZ>GVFO`ANQY?aKT@JwV`AYMXXAN[@K^ @]Jc@K`[@LC^`=Nh@<)N>n@NeABNb8>L}m\>LxsAN s6ANvo$D OMoEdOsCNv&BN"xCMzCNIy=EXQyrAMpx@ZKw@kLzXBM| CNd~@ZL>~ALCL{ENzB Mw\AMsAANvnAN{@M{@[Msz}@VM1yCNyA|MMzKl];C^8?nD`[?FR\?F~aiBHobBG_CG] FfJ5ZI9KSM_NXRGSZK z1fXE~Zv~8n~˄ckm(VG{I6~.I@14SG28 U%94BW;TD[=DOeMDTdc@REQ`@,Fd@D~i}BHo1DKu$E{NXymCNvBMvB`MwGDNIxNC!NSvC~M B]vEWsJ;@PJK8Rjxrbt"y}:#x|{5V$ёёJ|kat;OT|FKm9JGZAABU>DQZ @D\>B\?E\Z>6GI[;H\V;Mb8?Q&b6AOZCGNZ?8L&[C_Q]C+R^DNPzc@RLb@K]s>K']`Mkn@NoF.Q]r=EHNnvCMxREOf{CM6zXB9LAwBiN`wAM:wPAaMw@xM z=K7{>IK{BMx|CTMM~|CuK{G NlzDMwDN[sC:OsBENrz@K{4BMzA#NzAM{pCM4z"?Lw?XMTx?LwBM~yB-Mx#DN uCORw~B]Oy=B.Od{AN}7EP}BMfz/CMyCNyzAL5zAnM|J@L8|JDOA{3E MwAMrALAm=UGd>CmaDBEbAEe-EGweDH*g;ERL+nCP(y>MzAN|A.N1zACAOr{BO}AN{CPxpBOwKBTOxBOyENy|_GvNxGSNuFMGr@J[v>Jt@6Mls2CTN6qB!NpjjDO3cRDOV\DaPiUFSnYE TcB5QkpALn?E`i?AaACaTA&FkBIIcuiBKvEVNZyOCLvCMIv@FNubENtCNtCNrCNNpB^NqEMsDGMKqJPjMpSc\HZ Sj^dRBRf\`~Eܛ.ߘ|̨қ|ͱ6z&yutPt,0m$nmnrb0vۣ,q6vltϫQ~:ٝdxƒn[8yϋ>gЬ4r JPͣ~-}uՕx?ymj–fL a[h佼KЩꀺ@;wHude)m io)0z0Mv9ɞ;q$Ft}­X~0PԐfHCG|WPVyDn9_l9$yAGڦs׵ۤ]+*EVvϚZP%zO{^B }:[d^sxJzcF}nUWёo&ɛ SݔڕцāuCvyLx~ԇ>po~JJi<;[CTE|dTKNnS3Uxtr^lcOi(por{efQ^ _|NTM_F@>R>@p_>Af@CYgADg~@Cg@|DffADhFC>ElCzEi>TE`;E[DU;A\Q69"M567hL;C;/M4>?MC'EO ONFQNza!t u$—{⠢ ~oz `eSrCHnnl>C bDEkW?EBdT?;EU/@RFY0@E)`?-F]?GSX^?N<_?3O^BN`EOn`EPO^BMb<;Ih=|LqI?bNpCPVfEPc=B[Kj ?PLq@Ner_EQu~BLx5CKc{UEN{DOMxEMw C%NxKA\Ny=KwAqMy@MzeAMztB/N0yaDN&zDNzXENzUDJNyD]OxCOz#BM||BMzBDNRvAMx@M|PAMT}T@Mz{AN9yAMxDNk|UDLa{mEMwCrNw@&Ny@M}ANhCM~CL{B*LzB?N zAMywA@N0zB%OyCO9yCNEwBNsB]Ll`AHQd>A^AB\zABe^CEhDsGsjDJq@OJt@Q[u_AOtCO&vBNxCOB|BN{iCOyD QyKAN{zg>MzCjO|jDMx/HMwEMwDOsC@O-l>BQ\i IUfGFSaJDR]gDR[DT^CS'\lDSTN@NdU$=^G` >7@c2?EdBF_BF=ZCE/X3CEo\D:H}^HGI\HNn\S8N ^=jQl[yvhF!~ū`|Œ?ysOgfpSK8h.F2D4\T3:cR6CU<H\W"66DW]9?eGgh>Gn)AKst(?J@tBM:ufAL uALMoBN@fAN*`:CO \ERXDRcFSkDNr=AH{m=C I-iBFb"C IwoA>KCvD~OwDN"xJC MxCNwE"PtH!SuyHRw9DKOs+AMp)D OgsEKu>FMu\JBRoLfSNjU_echfPOpϮCF]x:y_"zް`ye>xMu5Ku4Fo}66j5q(qܚJ3vCvt3rLhmdn*y ]G N׿]CdϬhر7~|8~{ߊusjN{Djo/SqNұ.c˫|vq3Bt|vdԚe]0-\uõom y鿟}im܇B`ZGZs;zJ=x|eGRuD'~SQs NE̱Ry똤ZxoJG鄭pVpxcՅmVYrVIi\WLLLxl@[bvd; ɗA휦^љsЁjPz#Iuސ_~#yih{IIVh@? ]FGdwP>Rm$\[Nugrkރwr$xxmxh:f|?\ZyyON`>@|VF:?d,=Ci@D7E\=.C3W<;t>R9v8@O<7L=f=ZL^?.@?PBIRc\sZ6m1e~yW Ql~Vx~n bz_OJj>Be9v?s_AD\BEW@FVs@FN]@Fa2C5H_uEIY]BIUE>KVAA@R\BRl].CQ`@/M`>K~a@NcDObJFPaB_N(bAMet@Mgh@M kjABOmE;RjHSi@Kmi=eIu?LcxANx.CN{9CKL^y>FfN%xCLXuD9NwBNz?N}m?*My@LJwnC)NyAMy@XLvDNFwbB[MbvC`NyCDN2z+C_NzB;N}dAM<~}@VM1yAENwuAkNxAN}?M>L}=RMyFDQxAlNz2CQM }CMx$EPxCqNx#BM{AQM BYMp}EM{)BlL+zBN2zBKOyAINwdC|Pw>cLuBMzw@Mmt CKkCF_7BD]xBD\BE#fCFj~CHlHE&M1sCR|t CGSszCAPnD>PasDOxBNyBBN?zCNyLDOiwuCOGz@N|\CmP~DMzND!KvCMv1COIt3AP'mCmRc)GhVf]DSXDVSXYCRYC"S_JDR](C RY;^KZ>:E"b?Dg*@E.f@E`A(E4XeCkF W^BOE\CAH6]HI[uJiK _XQQcyq̙v-@yƢSw̑up:kkysbNH7H22QC2c6M9jCYP=$I"U;uFZa>FH^m@kKp|@KKqC*Mv?4L{>LJw%AdNkAOgdDXQfbE4QVFRZFQ*jAKtAKsHRqNFNQmAKoE(Q+t`COtDwNx}BLCxYCENawDPIvGxU.yF#QwFO`xDFOwDJOvELw\FDLt;IPpNT|p[]dFijiq,vց˥~qE{{zkߝzƱz8u}ؾd]x|{>pkCmїzԒ xyϋ\tgUrڔ/&l>_g(ulmu䕥{4 h@zg6Ƚ6؊Rȼۭl~5Ety8vm{.}˪Om<xzf=my΢*qB{ɑ}SIO_-x?3tͺn."AZFHDdNOpXX3{k"p>rxΐPpu=|_df[Xw[RPbBCXL;AfX@FlCIkA{FYgA]E)e4?aChb=Ced?>Gk?Gk=qF"b AG\@bEZ>CW :D=T8 98Q<@:DM">7=LBa?Q2M|L,UpkbmvDuě~_ԋ:s]nW{Gc)VuK.HbX=kBg_>C;_oBD\AC9\@gEW]I?D^^@Ba@[B(^AC0Z?HZ;BK[>;P2]gBjR0^SCS`BN__@K`A|MdOM{_?kL|@BM|,@N+y/BvPu@M:xAnMzBfNCPiBR\FX#XREVU1CiSuSCSJTBR^O>N\`FP`!@eLf`9C`k=FA@f=Ch@EdBMFYoD=H{ZTAE\fDGh\YFYJ^HML^LR$f\yާф|ۮ xƜ]v 3x~nO{EdMH73E72M3OY6:Q7ARp?ItU>FY$@"Gc? H"mVAJ#p@Jr>?KYv?M{>M{@rNMpCQtfHhSX^GQUH1SXyEzPgBQMuAmKwHRw!GdRt_ANqDiQsB?OetE{NizC*MyfCNwACCOw|EPy|EOy/FOyGQyrEOwCALvFMVsyIQquMVPp\\cbjg@]xېtg.\^Ķ~"|^{~ߺ 5}RR{ooGx-֙`}ʘВxljsp_i8u!ʏrw?s˅qvu t]wׂհ£sŸ>VA؃Wy_[rͪ_wεӞ?N܅~VlSq{0Ǜ%׽V{0rJ|՛!uApE"xPҘ7i@6Zcɂ4ecgTČjL#pr^}]rޢaXqwDEGjC#q,E{>KYy9rFLdDE 4e IynzO{Qva*%r_{[y!{i,fv\Jzs_\z'{Pyʋ‚dޑl/+-|sjhm}mDJf6D|`>Ewj@+F\nN@OEj?\De>wCd8?+Ete=SF^h=GjrDV?CU:1@R49M5X6K?-7Q1@?%SEP|X"x vg̠FwvY*}xLjw|z~e{e~\UstF^EZf>CZ>D7XACE(YxAD_@@Ed@Dd>BDcqBD$`(AE0_5?XI.a=MSe-BSc.DUamE Wc4DP^ CNZ{@L`7AuOFfB)Q^g?BdPGiXANlBgOkt@cOKjEQoMG*Uq0GUpCNoBLp?gHr?nJw>L)|>vMz>3Nx=MzDXN}~CN%@Nk~@Nq{N>%M|yS@"Nz9?LLz@Mz@rNy@Nz1APp}NCPL}=?O|>O:{BVOyCNwEOUy^BNY{AM|CN z.?Lpx=Mx~@NvXANwNBpNyBNyBWNpy7BMxAIMsy>sKAy\C@O`yVCNkvD8OwA.N1z@ Nh|@Ly@Jz@8LR{0AMwg@;NvAMs@0Flw>B~cYBHH7gUAaG|jBaIsPB0KwbBRObzBQ|ANzE_OxCOyB$O|BNzy/C^OxC+Ow;ENjsDtNsfCNx`@K{AcMx BNwxKu@XOx>VN{[=XMqCPePH5SuXGQSHUnapHTKjAZMTu@KwxBwN,wB=OAv@Mu@N?txBNtCN|xBeLyAKky?VKxWCGMNyBM~xEPyGS{-HQ|D5NyFOtIvQqbOTnZ[bn jRR:k⪐pѥ{1lzJ } STɡ>LzηѠupçdr=%{%DyzݑՑw󠺟X ;Ǚ_zlx!Yn,ޏtiޛc^y:Q.Ł$X{~A~&p掷k vm|4ɝ!|mbXo#yC<<}GzNsu܍xdP؜uԩ; @n˗pRlS:yG2{f[O{=]>\Y(f @inJg-S9>m2:J~_: e A_iR?׉6jo>agDdK{ dOvqZ`\gk2dzglk)Y'sHzۇ߉zߖ=ڑC64UB}|kn4wHAKc >@_8EJpY\ po-!{{v$ueuff|TZ|HyNbmDDX@AU@D_wAsDfA^DhAQEad@&E^?D!_?Bc@DhAKHjj?bHc?F\mARF%W^@SETBWBEX?D\?-D^E@;B_-BC_NC6F_@`G3c<>Km,;Mo>OHi:CRe"FNTvfFZR%^COUBPvbxAPEhBJQ3iD)RgB P>hBP iA@PohCQ#lEMUpHFVpF}Rp$BLqB@QHLr>TIuu?Mx}=MRy>N|Q?M~BM'CN}BO}@N}=Mz@rNy@Mrz@/ND}bBN~u@M~?.M?KK?M?N}AO>|5BNL{C}M\z}CNzGBwLyB Lw@OMxr;MLx?Nx@+Nx@N#zAN{DNyBQMu CMz@mK }XB$NyC6PtiCfOrt?Nw@Nz>MxA@LZz+@OMy)?N%tB9RuANsB LoAIiBIJ*lCJrp7FMvDNxgE"Qz$BOzRAM{D?OM{ @DM2z@?M|F!P|dBbN z{BNzbBLygDNyaCNyBOzz?\Nw2?)N(vANscCOlCPdzCQ\_ BQDZDcS*\CRE_5@P\E_>~BJ^CF`BpEc#A-Fw]0DxIj[@=G\DGIcDH_HI;]MLl`BHPVvkXbrͻ@U$}!Ķ}F>yD]ts S2N;P02\Q7-@\V9AZ ?OEE\Z@G4\$@3HNg8BJn@ImGBMo@\Mp@kMkr&@MrAXO0mnA}OeGdR%YGQTCJNUcGRp\>Lov@Kx>Jv@OMx@IL2wB OtDQhqCuO>sBcMwAJzED0M<|DNsy?5MVyCsQ{KZrFRކGQGPazIQ_sMaSm:L\geSYQfv_zF}(xR3tޢw;|`#L{X/wyxsdfQMRsG@"@pWHh>LtJ>Nx >Mq?DAQkOC+Q_fRDQ_h@NW CsQdDNSdkBQHiCQfBObBbPdaA!P`5APZfCR[oC8SrcDPhq+B.Mq?XJjt;=&JsBCPs'?,Oq=INz>L@LBN{BN{ANK{'AOxy|CmPx?(Mw"DUO}@L~?KK@5Mz@M@M@M}ANY|ANW{NA}LynC)NyC]MxBKvzAL~wB?FMVy*?My?*NzAN'|AUM|[BMyCNxAyM,}?.KMB_N}?O?xAPw?MxBNzy@Nx=?5Ny@NPxAQuS@NsdAtN4sBNnBNxnJCL&pkCKqEE9OtC ODwHCPD~A!N~ANz{ANw??MwA}M^|FO}BO{D)R~DO~CM|mCO/zcDQ@yBvPvBOpD)QmHeUi3DTcCR_DRUe_2DSY_eCRcgA@Q\=OXj:JL`U>xI`Z=VC^KBE`AE\DGZCHWCIc\@.Gbd>CfBH _BGI6]ILt`BG_ U6PU'u\|˧^ar w_?c^P;q@02O 4=Wn:{Cl]1?EYC>^F\>Gkg?_IXo? Jm@Lqm&@LmB>sIj3?CMm>MzKxE?XLx@MKz=A}MRuDQpgEU~nC6PqBMvBLF{B*Koz"DlMLw@,Ms?ENzXEŤ(BGPD2Qs`FQxIQwLUmRmZCfNRR4sarSM~v&}Z{%pEvBx׺ޞ|C֟{w:t蕢w ˜nwv٫ew$ɚxv[|~rhly:t-Wm7 hYƏKsӘᔪyJ|!({zhxo9w say7vR⛊rW{Pzg{inoTxƕBv,P4|c{V<68kOŎ`w(L4qSp]A~jxbsOUB`@xFY#eC]ƒ7vE8kuC}kC~j]CutgF:hH|ymI]qLtgX݀j#-z`ݗ`~H:x<~΀)]C+~ÆO Κ4kˇ1@Uؔȃ yufmHQKhAkA]DJor]Oayxhvs̃{~]?egf}IMm;?]@AW?0CZ?E"a?Ec@EebBFawCGZA?FV@DW AD}\AXFbA4Gk`AFZ]BF[%ADZJADVgA|D+TA@Q8B9mPIFPW bc iؖm'~Wzrq_6mMqPxUFK:sECgc;B?$\BB_!AnA^]AD`AF]BGXA+FW@qF{^?8G"d@Ifm>LMrUA7Nr#BzMr#CNMrANtBO7y#AM@;LAMz@NvAGOw CNzbDzO}zCrQwAPwfE#P|D)O|BFPyEOx}C OvvC?PrDPm(EUai7GU_B/RVDU^GWGdDSB_CTSIZ=aOkU9L$U?sJ[@&F?`N@E)^@FYB!I[qAH1[AH^@F%d?DcEIaFH YKnL`C.Pa`YUd~rmeXjwl:Վb:Gߓ=v%`vO/7E;1Q2O5>}Z>OF`?|EYM?F\@#J3hJC Ml@BLkk?L:jF[Ka@MaBPbB8QZCPTC&P^'GQi?hNuF;Jy>"L{>Mz6?My#BO4vqERoFWum.EQ2sCKv=C;K~{_EL|NDOMw7DNPr@Lz@Lڊ@NBPEQ׉IRH{9MVnL\bNSS*mpKb?'y S|:bhx0h!~PvմF8~©%~& tvӦ뜾vs9$rCv՜w^!wxPx xlwJPuVFxQ}|p}}#t|Rv\uMzV{byyh!Mo}"ymz_v Wv]zy|&Lϭhﮦ}묙2¢"=~Y4cbq{Mnv+#hLpSTem.S]LeEJxlR%0f6S=lE laKbrH+pdF2~oh4Iy` IO}dHiqM0vMIToD{qx~=Cv02ɝ 0U𨏊 My~~{{~lx;_g(nMNPuFFGpGRlnttJםЙgiC&Ije8=k[ >%?X>Ag^?Eez?7Ff?SD&d BECV?jE_W?}E]YBF`+DGbEADg`A^B\NCDsWCD;UDDUInIVJ_~Ub_yPy;s?)|sKtjl]XktKNs/=Ce!BB?`OAA_ACi^ADZAEvZB(GF\vAEYmAF[@Ga?GeAIi"ArMu4@L_|l>fJ5vANwnSB3PzjBFRc@Q\DSfDVh DAVogCWSiAR3l>Ob?(OJZAN\ANfCPik1DPm}COVo8DsPxnG TmFRj}DPlBBLNtAsL{B4N~$>LoypA OyyANyBNzy4CNUyB NdyB6Ny=@0NVz?OmTAMlAO?Or}RBP}HBN${wCNyD@N*{qBKzC`NyCnNy4DO {BN%{AN{?M|@%No@6N}@Nz@Oz@|O{dAsN {lBNxxAPOQyAMyMx?Mu@MOsDOQs5C?Pu@L%yKAL~AKW}hBMxAOxc?N]yANyBOvw"CQtDAOuCOzYEPz.COx]DnOxPCNwhCOs@NukDQ9dEQWz@NPBPXD\ArI]AG^BGbA}FaDG`}FeIYzKN\SMR`e3TOg8 wkY>z}RHٞ z(^N]Gl/=%23R8k?YAE`?DY^>"GW?J)`@KddCNfn>&L!e;La/@KwP?0Ly>L{C=tMzL@NwmDPnRJuYfmIvUsEKuC*JKyCL{jCM&y5BbOPxAMh{@K@L6FQϊHQ2I&R#|tLWtOb^iWN]RYzkbSQWr6󠰆::~EɀO_zZRd6SurVyWTuLkr@#vU}yƠvuOyRx٦yy$Jyx}ĮL|+;x}bUȦ>|txHuդ]xMz޾}λ(~1)|;tkw˦x;xƧlz,~SȪWU/ֈD%ڴؠisĔeazrp;|FowSt\FMzaT/x[}*fuf3Xӌ>p-EkI:pO3t^MrK|UgM6sZNp WPvAdYyc\`-Th:Γoݨ+vAуƭʢl T,,׌G'nR}yoyyԓ\{3^|szac^|'NLt[ay3`}ƈQ!ǜ^g n؈G$Lzo8=X=j>aV?Ba`A FgB*GgADQc@Ca@D`?aEJ_y>F%\?F^C^@BOWA~B}XHA`DA\dBF\ CEUhg4ETdDRfQA*PeBO!dAOreBOiE=RlC$Ql1CPlDPisGTegHVygEqQZirEO|peAfLsB/MuEAM`viANv@NwAMYz&AKjyBNyBOx?VMFw@gM|>Ny@Nz8@pNxAOww?NxAOzBOxCQwCOvx0CNwCOtANPO9b->ZL_>Ll`l>L_V@Mc@+Pc=aP)_9?=RbFW,iF'U#mBOq'AMur@Mx6>LzN>N{@/OwCPpJ3\s`Sa2wOHQ&wAEqLkwBJ$zB9L_z\@MӀo]ܜbkdaɑm^DavHz˯Z}{rs{ecwݪ`ro_qwJt}ZĆېӊ3ڃDiߖz zV~ϗ}x~}1RN·QusjGe9m q{~'D8n'k4~ILj9#?W MgD+PakEQkID)QklBOGl?MojDQgNFgR fDsOgEPiDOiCBN hBLoiqCJOpANuB?N|AsL|BN{y\BO\xeANyANzzANN|BQzCP2yTCOJ{C7OziERPCNрDO|;ENP:zDQ{0BQ}@OzzDPwD_OvDOyDYO{BLN|B Og|CO|ARN/yB3OvWBNv[D N0wCMs_BMr,A&MzuALpuJBLcrCQMq@KnCL>qRBLqgB6MGsAMtCN%z;A.L|CM~}@K|ANzBQeyHANmyBPvy@}Nys@M{K@LyA N$zAwN=zBOzkAoOyBOwB^NwANMtCQjEQp[B?QQWL]9HY?L4_wBN)a-ANmg?.Oh4@Pd>`PcDSl6BOzm@MCq@bLtu`xddik ~^o }f~ǯٝ}pz:(@y /||1yPuɩt>KryҏpMlxnowu5w6]}{jsm1sˢwry֟xn塈m9rZ~Q ٚs̍Oiۋ|څ萚2awGPy1gDqnZ@nWG:pz\u8z gAA߄oLn#xb z`t7rL#}jHJtbI%tI`7Izf;L{}jPyi:Ryg~X5nt,iNz sҵǜny?s✊v | N~zwT]N W@C` ?D~dI?CFaAF]>CD\=!B0`@Ea@E_@'Frb]AGcBH`CJ_JC"Js_vDIHZGFHmXtGHI`LC _|k1SWrsh;aF w$sccpdOZ`IMD/U? DZ=DZODEZsBeBWD,EZdAC.Y+B\D\jBEC*]BC]BD^A_H[_AIaF|P?gjH$UjERnBOrA]O wJ@Lx @J:z@JuCOM|pDHR8qGZXup(FRkyHnQkEPgWBNe@^OhBOeiSEEPk'COl BO1nBAtNMoSDPmBNgBMfkEPfEQgcF,P^EN_DPOhBNnAAMs?KtTCNs/BN[u@Oa{;>N[}o@NO}BOzsEPzBGMOzMCM7{DNBcM.4CO4tCOCzQ~@P`|D_R|nDOxEiO{xEPOyXFO{DN~^CO!~@JNz.BN8xAN(v?N\uBMt CHLqBKraBLu.C5M"tBLdq@Jm/=F]hAFbFRKniB JoA~JvBLW}AL~BXNAvM ~eANg{AN {AMzANy?L~y@Ll|AM}tCMNzB[NyA:N{>LP|ZBNxBNnxCNyCPnDQaCRt[>O[>N_1@O_?O];iM[=-O=]@fRn11&Nk<=U9=XAFVAIU@L\#?KE[[PhST5cNbU}R|)qҠRz(ʈ'2;e*˅gЉMhv~鱆~yxx;|ϝ{vp4ǚcqHrWrW…p~>heqȊizPNr4Hz:mvH|sxtnEwPy尲u=*o1pƜw,w|V󠦈4vx8aeYlUyrLsN{qSv5o[oeR\mk]!By@h@}snCw{iC~yhIuQ턂w^OzriHoZEoB[Ju cQPhyCi^QJv8fuL$zYfaOO|ak4|t nQoar¡2ƘD9}Åf2O6ȁH߃/nܙ*|O|jyvwyx }A𕺓㡗#zkR8G"P54N37V@A`?Cd@AFfAXFbqBG^?hE\=A^ADaAdDaBVFcCGecDI,`~BJ]}@BJ%_D[I]GEH]zGHcPH,f\t\\(j{}򄫡ӕS|dvWtdWkahQ}_^IDgTH>,Ek\=Dm[aACOZoC9E[EpZCEW[4DFO[MCE[CGF_APHcDMf}G-RUjbHUluCQ;ocCQu@ENu-CMw_DMwC\MUsCMpDP6qETqpF UnUFQ3i9DOb.BNc@BO2iBPjBwOlANmB@NnyEO>pBNymAxLjBNiB@P>gC}OcuDNCa&EcOaCFPcFhQe#DPhANiCNjmB#Nq?N{5>M=JK}GA#L{FAP|zC/OayDO"zD`O)|DEO}dDP:WAoM%G}QFQ{\IT |oF+P:yjHPy8ENxoFOzBM{BXN{/BOH{@\Nz@AMx[@MvALIv?LcrCLMctlBL=tCLqB^Kk]A INj@Fe/EEp[FF[C^Ff@Eq@HyuD)N ~B\M|@L|AnM|CN:}AM4{\AM|c?FL{AM|CN}AMh{BM{B Ng@M|PBMviBoNw4AWM0xK@sMpB[Q keARg>Of?;PeAQ)cM?Oa_=N\=NO?\; N];CKy`k^TBG^C9HbD0H\HhLUMNR TR`5nwp<='t[BN.|U^umύnz`{qFsTRl^P74 O5w6XB8DGa?kH}[?GT@UKZX@IM[:I{W :H&XAMk\cC9OD_UALbBMPc$ALoee>Ll_@4M_rAMrBMq{KoCHR{fExaoIweOyiLvReGv hLd|Nh!œ{}ܸ1|D@vTty/[Şy3Hu:ہћ$Ň,fo\x1DÀ՘}v^|q3~Tva҅OW*Ghd}K>jL4\4PR5D9 Z>*Be7@MFf"BGVc]CG%a,AF_>ID_b=Aby@Da@EcCQHhVDsIh{CI3cCKo`CJ`HEG?adGuKbBIKc$[eOd/qlV(~q-uky`(qKIjLDx^CM@[g=C_V?E[oCDZDE3[AXEYAWE[AFZBFXAFZB.G^3DJbPEQfEIWfJYjESnE'TsF:SvwDTONuEeNsBMoq\A[LrDOtDPrdEQ=mYEPgBNfBN;i@Msi?kMiAOkANOmC$NnDNpA:L5nBM;mACOlsD&QkCMgBfLgCA NdBO_F ScEVSdB8PbQCIO#fUAM`m?Lv>fM}>L~CN~FP0{BDSPyCOxDrOzLEOy}J{1DQOrAM;xEOuBNvAMNw'ARNZr>Npn;N?j@?$Pf >PucBSfaCRO_=OZ>;)OTU>2OV,>XLZO=G^?E_@PF_A D0e@g<\eN(RoEjIq\?)ETOBrKY>)K\Z;HJVC{_z9y{y2|߬Is$ȍe0ʀ@c>zkMzck̂{Meeh2♯tÞ{|ȇUz%ئw wrć|. ve2lkÐzuHuS{]y~oXbj2~kcveWBe]D~wXȑ|kd{ge|_b̂fz-YWkJNz^eH}rlIpHZo]G΄_oMK\oFOo LiLF{cJG~]k#Mm=AgpyxdĀg^~O~a,8选o`œĈ2M猖ל"ΏoR#ӛk!愇f& łA%ru앏SygsbJs?P'58T4<_g8O>dk>D0fAGvbB$GsaAMFb@sDb@Bie@Ff@7HjBoKmpFNnHHP#ktDFMdqC7I[cCcDcDEfIL[idSfە@n߻ t]x~xXmfTMh.?K=1egE@`j@n@\v?!E{Z@EjWBC[AB~\BsF+]LAE^+@E%]BEY.CEWRBH^BOWdGFZ{iI \fHYZkFHXnGcWrYFStDPvYDNuClM/tCM;u FOSxCUOrtVCNm[DP$j?Ni>Nj@Njj8AOMkAZNlwBLnAKpfAwKgsOBMpA8NmANn)E,QnCNk3CDNGk#C%P|iCQfDIRi+GS!koEQ&ixBD[h@Evj@Eh4BEEeCC^CDmF^@Fk;CKu&EOzBN{AnMzAMyB;PRzANO0{%A9Nz+A!NywR?SMwACPxAOzo@}MbxCNyDNHwEOtumBOuE@MRv@Mu3>rNo<=Oh@P;eQ?PbAQ`BRf\q>;PU7N/Y>KY`>I]BhHcBbGd%DE5h?AevCE^uCF}XQDuI7[CH]@FJa^\JHO_nR Sg/ju8qFvjРw;]w'p{~ҝDqX}kx9l^`=T85K=V~8Dc 9)Cef>:Emf@RGfcTAEkdACWefD1G]feAG~i@Jp@K2q~DOYp`GQ$mGRfVCPL!b?F`FoHdIJiONpq`m'wv}N+ wUq,e8NBGoa9:.^BUBIZrBnEVCF|UC|E[VCPC\5ElE)_CFp\@E\?F3^AE?YC HsVC(M]FAS(fH[FiI\fI\kGH{Xq!GTqERUsC=QtC}Ou?nKsCOMtD\OvBOZwC[PrC>Qm?Oi|APk@APj=AlPl=LTn@BN\rPBMv@Lov@&Nq@Ptri?INsy@OFqEQdqoBNoAGO0mAPxl4DP:oEdOs!DNpCNnAMp@$Nsu?Mu?Mv@Mw}BnNuEPsCWNQtBMtDSQt*C]OrCjPw$D5RP|CgO}{DM|DN}lByM;}CM~zC?M }K@Mz[B9OzE>SKvzCO|BOy]AKwCZL:zALI}AM}B8KtBsGn@FmAG\lAGk.AmFfBZF^.AF-\?@ GgB?JpFPuFPwADNwiCN9w/BN[u@M-x@ANUyIANw6>rMw?NxeANtBNrCNtC\L tCL?srBINte> Krt?^LnslABQo@QgAPa@P^AQG].@PT@iPCU>`O\]=Ma=K!^?IYDgI_AvFbA&F}e-AKev@Lz BMzBN9xdCNvEmOvFeQzu FPrwYEOy,DNy5D5NpxB}M=wAMy?DIOyGSP5vGOg`=CI^@Dx[HcG^LKhY6Q_o~.oo;$|ݼ¥>hzc[hV~KAt^;P=\AUCYCEWAoEVDCaEJZBEC\XCkB(XtCEWBF-YBhH[MBwGXCHRVwDVM|_FRf*GUhHYUlG'W\r^F2RtFMRXsERsBQsaDPP`sA8MmrCM:sPD OBuA6OwAEOuADOqAP+pBPoBhP6o8D|Q>pA$NpBNjsB9NvgAMwy@ Nt=NWu{?JNx?NxAOouAOt$BNsAoNpBNsCKDwBK6wCKNrWD,MrAMsIq@yFlBGjl]AEoi@IDd@F^>iFkY?KF_AGGlC]LrGPr DMqCNsCMksALv@Mx?jNw@OKw@Mu AMr;CNrBDNqWGOqECMqPAMrAMs:@Nqj@PlDRfSEQraAQ]A.QYgAPUy@OdX@^Od`>Ld_ ? KcY)@IMUWAzFXADI^@9Fp``AF_qBkF]BF] E4H[DH&[tFJ^JN`L

3Hsg?aIe9;H!_?K`BNdAANlkuATOsB PyFO@tLp]tF*ZhuBdOsu ?Iq@LauA0MwBMxCO*xqC?OPwYDNuFP/uFPNxH'Q'|D*NyDNxCMXxWC8NyEDlPxFQtHQuGPxHPPwK,Xv]T[o]aOmuuwHxkt|ÒqS]b {=Wxsҩvq߷q3`q}1c-o}qnXaj{lڡblCȜw?ÏgSӛvdYlswax.xwftvlv! t'Q.!tKى^5n?s.eJ iVLugPDv_ZFPQ{T7q'ze!HychMz|kM%zY Oi͒v[qm@v<^?qmUJ6hrSP2|of8x]eO睥nzuuo |U=kKGxYc6HRr:\Kyy`[{dla[2~QBphg4wiup}r,؈F󚴇炓qYfݡ)׋5Qx+PWq\v `bO{A;Q76rRP;Db@>Fg?DFwi?DeqAoE_BF6_5CGbDIh'FKpDL[uDNvmBL)Y-E&MUEK)\DH_$FF^]kIF]$K2M9fVyUgpmS&|«o~aSqb7eL]U}IB]eR>]@c^:BC]BjD[%DF[C[EA]sCDj]D/EQ[ CDk[BF\5@FY:NxA>NvYCN5uD4OuBMtAfMq@ KoBmMbvAwN=zCMywEOMyCLzD My ELQvkFMyCMzBMyCMWxLDOiw@NjvC Oy0E9Nz$DMx:CMwBLguBJHo\AGygBFfAEeh?9Ca@Fa=Ffc@vGmdA7Fl@DJ;s*IPbqMDNTmfEPlrA'MqBLu@Lv@NNwW?dNtFA8NtCALbtDNsEOqlEO1nCOp@NqJ?NUq@&Po@ZPl@hO_CP`@O`?O] B!P]?O)^B/PaA/N\>L0T_>JT?^GWzBGW?F{Zm=F\c?F[@kE^B*FTaDG\kGJYZLL`_&EZR[hrotjo:u—P٣k|{Ш0y.0vYqiq_OH@3CB=U*F-F\EOI[%BaHb`N?G3eAfL_x@L[@K[BMbArMjAN3rCPwtQ!Yuoq]zu`_zhzKEN9l?KpALLwBMxBNKzCnNzCNwGQ?xMHQb{HQ~DO{C}M\zCM{/CMy8BPowRFTStG(R&sF^Qu4JGRtOKUpuRyZ.r\bQmz+{ y󐠋7}qm x?l|7^ Sgqԋz]ޓx ٟbᡦ6tDp(e}8eākaj4`5lÓutm9iѡ qI}N|o%sM|;gm.} _rݭ<{]~{vvuٛPpKŁ+Nz^$6 k1W)EfU8JhTF|vicF5%xY‡mHoe[JhhxTHKq]J}rX4fzvQwb;o=Y[:lFWHenS\T}srkֹ=BzWiΈۙ+yu R|{h0J8u`J|uIbYwu1nrQz3u|1p{ >} >-͆śڂڜՍؒާ!1ߣ J.C5F&>{uIgLzrAX9mSl<=V8AauG^2EnIFeBHj1CNJq@D:MVrE@Oj E1N\F&L8VDHYDF^FJE\{I F{X7NIP^ZgKf{|jqԐ&~Zszb]3XHdpJI qACb@*A\BC'\:DE^CEQ`B%E6]BEj[A3D\7@8D.]?|D.[AG\@L_SHR`gG7WIoH=W6raIUDs{HRUvFSnvgFR0tDP6q.BM:m E:On2FfOr2DNsmCOYv{BP{ZANY|cAHO}5AN<[AL}BNyAFNwAfM yC4NryB&OxB P{.AQN/z2BNzAUNbySBOv=CSQvANO0{}CTNq~CM}$DYN{]C\Nz(CNxDOAwANvW@nNv=MxY?N{?POxzAOyQBNxBZNwBtNvAN*w@uMugAMx@M{'AKzDLzFM~{BKjwEBMwGNzBKFyAKwICMueBuMukANy!B3Nt{fB Mz"@KNxJA=Mv5CM9tCHLkAIWcAF)_CG^{?E^?Fc?GdBG_g;@BnDSJrhDNMoNDP\pAOo.?YOn>Ozl>Nj{>L\BOB^=MF^=YN^= O6_H=*Oa=M^ABJNL\}@%LW?J[>FYeDHV?/FV>>F9\?F]IAE6`B~F.c EH]HIBUKKaYBgH;XY`'hKrS} ڃHݢ|xBxǨ(oߤlDqQ+ut]M =5E3^Ra\eEPQ?M5IuP/ys@qKoOAKvCMYxBMAy>C Lz)CLzENB{EO|EO{TDOX{C-N|CL{{CpMw&DP}vE?RuTFQrB^PoG6RrKmPOt~OXs ]`k:t+vr~>s n+ws{ׯٵ[JNi=YkD[t ^u9x"pA i@=hxVtcJ sVsAUmlo4oۓt~בJs_$mVw>`J}*kR=q sȗn4MzEDdUn9q)zIed p;Hw1^9@hdTSDvb RBTiTAqW>NzeMyTh4RmjWvJ;`OD4iT_DZq[?yaSF|sc{Muf\Uيy9 ߽x_ߝ5.ZOV bnOcuLU[mmUKzyLtYz΍ 4E?ƘڄBlSKk`sGfSjFmXqGQXu5GTuuFtT uDKT%tWDRs[CPq@MoCYNipE#OgpDOnKw4BNGyOC}PyRBNz BBN@{@NVz@iM?zALwCNx_DN{}C NvCM|)CM4zhBN{@NzzBGNxBNkwHANmy@(N}AN~?L7||@jNzA=NyBMXy0BMw?N8x AN;zh@Nz?M{?Mz^BLz@kJwBMw EpNymDKUyBLw@B4Nxu@BN\rAAMu>rK2xkAxM yB8Mrx?tLw>Mvb@~MpBM\i-@J_A HXb@FVs<*E_:G:e>@H/Ml$@+Nl@NlBOnAwN[p@Nr@NfsAN@sAAOqCPpTBOGnBpPn?OqiBPgAPeGA$Occ?LY@NY?WO^;#N_`9JG[AM[?GK\=P4=B X=E?`>$EdV@iCIhBDWg"CdG`V@2G^d?NHg?9JnB?MvA(MvB(Moq/DZMfODKL\ECIYMFF(^IH2cGNJmaQM9eT]#VjT ~x,zcufZ~URIGS>RKdKbK4dPAB\CiCZA#C![BME^o@(D__BE^BSEwYCFVAJFVW@FQY@G]?'M}bHWjFRYoFXavHF8UxETNvDU[tD>W1vCRwAOvAwMqrE?OmFmQniCP`n\GP uCNwA[MbwiBoNwnB N"xA0MwRBMxeCN!yAN|B#OzKCNzBL3xaCZOxKA\Ny?@MyH>Kxk=LyCN|EMyALMu@O rC%PqA'MqAkMSuPBuMwpALgw@L v@N>sRAOkCOgANeCK-_(BIYH:]Hcb:IkM?2J^jCNl?oKpALotzAMq>L9q>Mr>M(r@M7q BMqBvN4rEBPZr*BdPpA{O nA}Pm~@Qj.A:RDi@PgAPe?BAP`~BP%bBOXb?M[>M[X75K\=jNdKYaN@fa1MrDcM>|'kHxPh{Js@eJm]Gg*UCDgWHg]|Ks3jKE$tVcq}kГsx"Ov7xТj|ؤ{z'%W|0t6ޑp[~ȩ2{v;ąr+ak˜r"eמ$٢]ԤAD4LIÐ䋂VpCהݮ́ Z2Y~T:=W>sAwT=\C#_7>:DdAEdBDedBfDdBFcCHd@Hf@JUmeEOvE]PyD+NsBRKf\FrKW[F HgVGEZHWF _PMKaRLgGdP]nL|O3zmect`9PI6\OKfRG)I`\=NBxW @DjW9BEWKBCF+X&ArE[AqE\CEY7DCFyVAFV??GY@_I ^@ENbJ Y;h0GFXjGaWqFU vF?URsFTVrFWtCR|t'ASPt=L_oB*O>n$DOmVDOkEOn9DOuC|NnxCcNxIB\MqxC~M[yBLvEODw!C>NuYDNuENt+DNt@Ou BPOwDrOu9D2OttC1OtuBtN zB,N{CNIyUF/OJyOE]Ny\CM}CNAB,N{COK{rC}N}CMV}BN(|ANnyjBxOw@NuJ@Ox?5OyM@|@M;~AM%z?MvAPOeu?MrKCNsCNtALv ?Jw,@K[u\=0J_o>qLiC4NAhoB7LhCKgAK.c:Lfn(?nK qALq @Lr;Lv>L;x@Lv+DNbw)ANu4@:Pq)C4RmB_Q?j,@Pi=PfABSYeC6S*c~AOa>Ma@7Od8AOGe6@Oc9@oNc==:Mah^EXA[LA`ERNgBaL:kErNpEKy=PB|FewLR3rIL$yD?|L z@KyCMzENxG:OvuCLuBMyDNE|DMzsBLzqAlL+{ECMyDOxFJQwIVteITpFPpJCFNjqGVPXt&KSt@MXsL[tdWLc{ou=gb(wcAΓ&jrKJQ6h<fGqPyrJXtQ)r&WXw+cooWymSl{t_atw=n\Os`N`bCБtIJGk#vח/Rn-ygy|3t@e{xr`*zubumlbsaN]vcVH{]moLynYNveNveTEzk$`ǀta^uXrQ9v\QD9p*Lrw_GKi XHK\kpZNi~TDvLhoAG {}l/GviGAscbG6ocbIgdLsknQkN@ҹA]ʗlJPt붶q Wrd1y٢otv *net"`џyBĬl~İʎh ۨw{gU@:Dbܓ˓QÚ {>&"x%{trK L~qL45:W==BNVz=Da@E7jCgFfUE,Ga`DrF:aBCGeA{H;iVAJ#p\CoMpvGPQWwG~OoFKGhvFH]HI\vIJ]KM[QQ!Xa-[shwMvgtd놕~bXjPJiMfJfE#G^c?C{Z@.D[AFXBFEW?Dv[@UD]CEX]3C)F[BG[@@Il_BL+fGRfKX0g&I!XjRHVpGFVs$H%VqI7WqF+VqEAWMrDUq??7OqAOpXF9PpEJOmYALkAL.s)BBNDuSAoMu$BMy CLx7DMuENuCOfsDOpDPrfDOu8CPvCPHvC2NDtDNvzDN{wEP0vDOrCNsC#OwC|Nz C0N?zsCCN>y]CPN yBM#yBMyCMfywDNx^B=NxCyN]|2CM'BrM}ANySBOMwOBuPw"ANjx_ANw<[NLwz@ENy@LyCOxt?Nuw@!Ov.DQwTDPuBNtAM.v@5MUwGAL vALs?lKo?IYmALilRBLjNALi>Nm ?"Oar"@M{l5COhBOoAMsBM{sBMw?MHxwB=NvFPwxC*MtBQq.DSk~CRjBQqiM@cPgA@iPe"?GN3bB@xN"h>Nhl@HOhQAxOOhX>M1h9@LKgZ?ONAf.>0Nf?M>ih?Li5CNh>TJf>@LcZ8IHZ:I[(;YI\/7)D,^]BfGFb\?DX@7F?`AEc1CFBavE H`FI` L!LbO$OcmT|UYˏ{VЏ]80zWD<Ѐlg@)zPRy%,ygGOJS?C3EWF6wWBA=iQ39(N 3^9S7:V8>V9@?Ij[ZE{OOj~B`NocAMqAJwCL4uj@KNxBLzCdMy1D5M^zeBOKnzC~M[yEEOvwFDRt8HV#sITnGPn?EOriGcQUv(I4RxK}UvQ\tc^donlt_)Qe2gS{OiNBvQ6K{\LĀblI]}ZZ䂰cbzd}rqTbvPiuXyco_{sf)|5ocN~hFHQ:\ͩ?ruĝ}7ru`z-o\9yoZ2yoG_voij[xfOxe6JA|l?OylPv;hL*tcWMxhhf^M|q]D4uUWpQAxStM(}}j~JugMurhRlYG;yY |uF}jS?wjFvjDMq~eJl?fHriEmsMPz꺶-aۯ+]PfhFVkWBgU{eI()^ge;[ĩN|Q ϻƶ0nCW@4WThǐ΢WZ፲Oj:ЏtͯD+p>`k{C? X_6T:W<5B5Yz=fFbsAGWiCFgBEbBEFbAkFVeCTHhCuJoGAJ]u>ALwEAvNYqrE5OtrENpBNoBOarDRsCPjsB Nv:BLLwwCMUwCN:x@Osw@P+vAO&xBO1{C:Ox F PvHAP5vaFP+xBO]xADgQt)D QngDPrC$Oy\CN}KCNyCfN,v}C OvvBDPwQCO[wCNvCNvB6NvYCNxDNezD~OyCOhwBOv?BOxiALYxTAL$x"CPyDBNmxDM0wYDNuuDCPu~BO=t~FRuCPqE;P t%?OLs"AyNuu~AMtALasA%Map;IqI@BM,r@;MmB6Np@MDt@'NtAwNo=CPoFAO;u5AkNyCNzA;Ll>?NIp?ePr=Np?Mm1>Nn=MrI>N t6>Mr?2M]t=Llt@Mr?VMlD? Mdq:J(]<K_&=Ki`:G^N> G^BFl^?B)_-AE cBFdCGeFIa@LMZSQVdIa|OxZҌx)t?|0 ɅʛI2tA 5qzeRxGu}TNl>6SV=:L4;Lx4";S:i=T)=AP?GgXCqNhAMlpBLbrCKv@YH wcC$LxfAtKOw?MvA|NrCM.sCZMMxCMz1C MvFA1Mu @Lqx@J{BL{BL7zBL7zDMxCM.tJFRsAG'Ts2I?UqGQ@qGPtLD&NxGR|KTzUb\4tY`mlg^~qIٚIu[Vkou#gv Ok!yTHT"lFU|W䖅Dk-hmЁ'wxkzkbe{lZyu]Kw]uT.ډió@y/{YߖssUzhJWo.Q1toX~lVցIkNw}hGHwbIWp\HpZNDpZFr]MPvIeO|jM&l%OuUpL~Ik$J\zgwIwe;K oZ E=[~Qc%~Nsn@I~[j @1y4gHNrlcHem`aC2t a=ulFŽddy2!-ЏBv No{E|bG8hQvYh_ΕbmttH5G_iD٪ם|ޥRiފƋ֎`/& ɌIcMW!ӑ2lX5c=s7O7L;V;@_=Fg-?GDjAgGkJB`Fh@E3eEAF`eBHjCK_q BL>uCJOtfENDmG)La}GI%UIH+UJJYN?NvdaYXlPnxBzg`7rsAl\IJbLHg[E3C|`A?jB^\AwDz[DE[DD[DEZCF[6CG#_/BE`A-E'a(AGbCM(lITt{I=WqKt\vo,I&X1mJYnLKC[qGSo(HTnGLSYmPG'SjqGRsEPvqjDOpDNr BL$r?,Nsq8B^QqE~Sq$DqQpBNsC?NtCNCvD@$Nx?FN|JyM~AM)BvL|D9NwHF{PuEPQ|w&BOvAPsgDStCPvA&M|ZANM}4BNGy@MtBNtkAOsCQuBOw{ANwCGOvVD|OvD PtWE!QrCO s6COuvCNx,DNymENy\BMJxBM|wEuMuHOuDO[u!F"QuEDPtEyP|tC*Ou^A*Nu(AN@t@ NraCOrBYNn>&Mpm@Mt@MsA)O4v'ANxDPzBO>u&CQuA%P2xBO|?C O~ BNzcBOjyBPvyOC)OvnFPu#EP{tD!Qr|DPq\BIPjp BPNr?Nu?HMyvAMyZ=Nu~?Pmx;JbwArNx==MwKqx?M|=Md{@Ou'CPhj?M)c:JI_>Ja5>xJ]>HZ4@F^oAC^BD`BFkfBGdFIIP^rIK`MOc]Lh/|qnt١ʨ.ۇn /14q|ݴXۡt9|~%|:lNNY)C@M39< M>4Jl{uBoM{BMzC MyEMxCOMvEPuGITut0IcVrGRqGP;t/EqMwFQO}ISzP[t^`inmEhVcіuR̥ {t~XbL[KGn@v=N [rdoΆ6w;xhr{TO{oeG~oGQt Uؑ=gt(sjgcoO|eDMlF8rUdnQ˄iMJ{^Bp`U_GcNCg+OAovUGs[Nr\Ns8]IEz bElLnZI~jFw^`/Bu[_ EwcWG~inFΈu!H}u@!`n;{Fh#Bq`DPhVY>(i W8y\;GIlJx]Ɯ[ѩL lj}VL2`(=pS>jsU|Eyi_G{gKpV]~j!7Qk09˅-ב^UF}qS~jy&ko u2ƌM#8; Ջވ.WF8>]:D.f?Ily?lG7k@hFzhA]G fBLHdedCIjDLp C7MR}hDP{^DQwDlTwIER#zEPb{FQ3}/FR,|DPzDPQyPF/PLuH=QtODPtD~PuANueAJOxY?N{p@N{?My3?Mi|&>GNx?O=w>>L{=K|>LN{P@NL|@Nq{@MJz)AMoxs@M~z1>RM>M|BANOoDMfI[x>IoWe?iHw^AD{`)ATAq_ACaCG4`FI][wIJ\LPuNb/[Jhm\f rUVgN(ŏևwQ €z\oVx[Ή|zLC%O63K118M5,?Q96>RCMhzbBLymDeMxCKxmDMCzDOuwFfSt:JXsFQqfGcQEtGNsdGQ0w}ITxvRT\t]faphgvbatcx:z^b폅xOeCΊh7m(Cku9M~aHw͌CxŒy_ـ,iC(|#aB|eKqY_'X |`zjSO7zaB iVBaKm5LJwi9M~DfpJ3wUAqiJOFZqHE]XIAujQG)st[FQp[SnXJnAUAxaCI }kG{g5E{x)aC\v_E\{agHIgsc^G wdBa]u@G xDK}$fAn?]=Kj[0> p/[:}dJ6x_FA7vξCOJ!ɠWP_r71w5[?u\Bq/[E]u-b8Oht+c>Tu{dk]rPewiag*_FaNt4ifzn~i߆|2|TPבEˈ=uU25SȄƠJ2o{xK__PUC8Q7::T:?/Z<@^0=De?GNkqAH-j@dFg@GfvCLJ%idDILmBCKp!D{MnxBL9kBKcEJ[FF/GYHE[$MK!a(TQ%ek>d8e#i/Pݍ,MPyf/mk>'GI_DD^DDB\sCEV_dCD\.DEPXSCDV C(E Z=BF[ AF@^4AE_+CG_eDvLfE7PoIWr JZoEVnG#XhoIYPm*GUJkRFRtmEQ2k{AN2f)EHPkFIV?w.K?]H}M[zLDxMn:BKo|?M6s@OsCRpDQ[nEOIpvFDPorFQgqDOoMCMs#ALYvCMWx\BMJxCMxDNwCMvB`Mw*B0Oy@NzA2NdzbBEOxBgOyBtN zCOxD\Q9vBNxCN:xjCOxBMYyiEMhx/EGN~xpBNxBO'wCOfvCOwdBcNv DPsBNuDNw1DLOu/C{N_v\C^NvDFN`vDGNyB!N|A^MwC$Nv@LvCOvCNNsCbNqBgN\oCOoPDnQrpCQrCQxBQ ~DQ'~DPyF>TwlFWzER|FXQyECQyFRu{EQ^zEPxHfPCwlEhO\uDPVvWBOvfDOzBN}@TNS~ AN;z A{Nw;A+Nz? MyA6Ow?Lzc>GL"~@N|@OFz}@NxD@NmzBNxCNwr@Moy/AMO?$L/rELhs> I`H=EH`{>I[>YJKXg=H?\@SGb_IAaDr^DFh^uDG[XFHY IhI:[MmHaSGgMU`QaύH,&/"uѦrR!dqFeX}w| |VqSDL5h/Jx2Z7YOx2%<}R6Y@2TUUs+EPPN~r?Owq?OlC:P`lCO#pGD\PqEG[Rn]D6Ok/CmNp@HMks,B[NtBOXs!COssANv`AMJy@FLyAL)zGAM*|@N|?Ny@iP0x@OPy@{M>zBhNaxAKBW>HUWBYG](CEX=DFX?E8G[GsI`]KH]QF1[OI%Wrz]oBvhCu.ʚϰljꩰqspKbTڮ=~A>d{{Tj}n[JP6,K66Q4~:)S 62P=tqGPt6JWrPY^o2V^6qNnjeJmF|U}8vƐ!}K:JIb+{sG-Cdl|dc}w/f/2{%|gn}^Emu)S6vZA/yaB}gAiFjKs[JANnbT7w_)B0}lL`}gHzIaaCjP:w`M4?WK< ZM>]NQAaOGd9QyIePH]@LCdPdEh)SBm"XE q \GwjbJydJ zk4M r3TC {WbsIu8^\:kX9k [*AVp_HBv~QmGzz]:bbgpw뙠q?~j?vYm7i r"u`ob%OZbSNUZM{L[QMNc_]jq)|#yG:~ÏNχ5뉹告Jg!Gq|]{؏d=cq5ItA/L8M4 JV7>C.a.B_E7e8DEgVDFg0CFg"DI#kELMpCM|mEiPhPDTObfCGKbD,H^pD C_GD1cNMme hcǰ&vīVxuw.'sʀcOOV64@;W?aAba:E Fe'CCw^CFZbAEvW?DnY,?dD[s@E^?E_*@F]1DI^H0Qf(HUlGVroHYnEXMkF8ZmEVnE:XpyFVnPGBRndEoPp^EQ&r[H[X3t!Q`tcI Xm_AsOl@COr?;OrAiPCr@NoANep@N%rBVOrtBO"qBNm:AMqk@SNhuwAO uAPgnCRoCQ4u`BSOtv`BSOtvBO&wKCNyByM){AjM?yA4Oy@WNx#C(P@xBO7yALyC}M\zFD_P;{?ENzzAMzBNyBtN zANzAO,zANZ|bBMk|?B>N {ANL{k?LwB"NxuBMuR@M{y@=Nz`@L]{@@L|AMyBNx@\NvA#P"v?N1sCOqCOp ENsDNvTCNIy~BxNM{AN{DOzCNw[EPxDvOJzA LzFPy|DPyANnyXB$NyC,O.yDOtDO}rC`OvkANjx>4MWz@XNz!?MayTAN7x)BbOdt@BTOtAN^NzARx?P|w@@NExV@gM w=ILHw_?}L;r=IIf_jr{Jd8}KlҖ!sq􏖂nmc]ENA^M%G`xQ?HeRJnZwKpx[HfdQAMfRCAs~^Iv'^Iuxdm?vHVzyGzdK?OfR;}YL=;Yg^TBqnR5 wtX{{͞q`_wWvD{wl3`ŋz67~2yc|^H`umxTbk]bLaVXO]WU=``Ya8fSilw&~Un朼3\1Лftʖ}JM{vU6YLoD@O54M68;BY?NE_%CH^JBFa5BFf CeGizDJmEYMuD9NuwBDNxl}AMcAJYDEZ?ECcF`DhMHMie&a0mgy6~Hz/u|eNH@U#6zCa@DaBD`[D0FIVACUA+EZA@E]a>D_?FE`>G{]JBK"aEGRBl)HeXqpGVrFUpo7FT~m9DSYlrBRKmmDTMp$E#Sp[HRs EPGtB"Ps?NoBNjpEOg@N_l>wM[s?Nu@8Nu@M)uATNht~@NtANtAMsAMsN@Lbu;.JwD>,N[w{APnDRFmCCP8t0BVOvBNjwdBNkwBMwCMZyB NdyAOxBO%wC R vCPJwAMWw~BLx@MMzAENu|AN{>BMZzH?hKx=&LJxt?Mx@6Mey @MWyA{Nqz@uM{@fM zBzN_w/C{N_vA_Nv4BNGy @L{IAYMtAM{TBN;yj?jMTxAzOx@=OgwANvAMQsDMlrBNwA5LzBN|=L{{BNzCNxfD!Ox9D>O,xCNwwClMLxIAHMcxQBNxKA\Ny`BNh|-CjOvC]OsBNvB>&Mw@NPw@MDtANwICOyAN8xANlxAEN}1AWK=MBL:AM|@Mz@}NyAPwg>OtrAO>vCcNu2?MtL;Ji;=I]V9HW<.KOZ;J\>N> R#9CR:VEUfBL \_DZP#hC2PlDoOmBMqUFNtBCSN-w @L?Lj|@NvCQ1xG(RHxF2PwA`Nx1BeN=zAMyAON {?MyBNy?KyC`NyD]NxFP w*H3T vHRSwBHRwHR%yHMwKU9tRZoFW7]pYf,hl~lҔqxn]{{sy'u r8kC]kr{r du٘khtS{XBh%M8Pa'M=fQCn]JzkN|&_ucz[xPeEHr&W"Aq}VAw`Exv)`yHjcO=@YgI>gYH >8aVNCbPAazPd@lbPEd0SICshVHxvaJ{coIp0WBfQ>7mVlDnTBlv^X5pA53cV MjOAeQF_?H[BIK[CkPMfpF[WpxGXtGIVsfEQoDRnC,TnDU{qE]StGQRwvDPsDPirA$O1nAcNmj@gMsjP?Mo@#Ot@@|NvoANxDMP*yC.Qv)BbOdthBNtA,NvAfNRwALJw@K)y"CN|y?CNq}DOoQCtO>tAO>v >MwdACNSx CMvDNxB(NxAO$w4@:Pq]D StprDQUqDPt'C9Ow@M]|?oLa}AENt{CNWzCNGxAqNvATNSx!AmNw@OvOAYOwj@$MfzAHN{"COxEsP6xNEOvBNNux?Lz @M.~@M{@My@N{=`Mx\@ N8w>1LvANvBO>uAMx3A"MC{lBFN|)?L{@LzCMfyDNxCNwoCNvBN1yAwN=zANx@M;y>WLySB~Nw@Mt@Mlw?Mv?TNr?6NrANwASN@{BN}}@*N|OAM~@K(CcOuBN|`@JyDvNyD[Q)tCkRsANfrB@LunWBNm>kLd9I8X9}IWM=tK[F8` DF]BcA#^-EE`FH`L3Ka;OLbMGkepW`qֆ `tIrS1B>}ʛ|ݬGx=ːxb6~m[Q5B0G5M3N5m; U';DVE]OZ\BO]gBqOIoCMnBLpC0Ns~CN vXAM|~@N|r?2NzyANzCNcxE1OPuBNv>RLwBBOx4DPy@MHyZAFMAz?iKy C!NszCMZyDOx/FQBzFRz|FR{GQ{ IkQwKUqO[WoT^p0fim|b~ndxcRA]rWaH)qqKg`p=I{f$GxbFttYg?v'^:D]u8`Hnw\GdjTEhQFmeLF&_NCaeNRB4g%S@hU?=q=`E|cPGrixIZ~efGwaE@t-]@CsXC|^o6oGAWћqD\Ć(nhGi/T=VL!=VJ>oYBDpH͔WE^ǔv3_qVqYlMC~gK#ufpvmsEcEU6l/^O]i` Qdq\QUb{WRZSdQ^[]y_wz>Xʓc{\ҧ A렝Y7ql9q}t;HLpJFAZL;7U :d;Z??3DQci?E,fn?~Ee@Fa?$Ga>Ff?(Gil BJzqCNvpBOLvdCO"oQDMdD1J[7EF [#HXIbb[I[KaJLaTX^,yZk9 uѧ }wb{@e%QLW7&=ZW0ACnWXBF(WA&FWBFVApFWBFYAGZAI"\[@H%[>2GU@I[SVCMXhFRhHwU)rEQubFRt:FRnE7UWn4EU{q'FS[tGMR4tFQpEQupDO.nCOmA5O0nB&PoCQQoBbO|o$B O~rB5OtBWOuXCNuC N!w_Ley?AMxCAMyAN{gAMx?KwRAMv[BN\v >JuANxw@ Nyx@Mx&@Max4CwO]x?Lw@L'zrAMvC8OqTAN[sBNO.zGEQS|BPG|%AN|BN}BN|AN{qFP#{DLyALvDPqkBPmBNkBgMg7D=O/gzA_N_=LX9uJY5rHcu9kJOe;VGcV?D^DEZME^E[_8DFcGH|`KpM@cMOe\OfqY o𡮊Ƅf!c/?Bkf*;F¯y:kn_gfy@1raXbSP00LP16U;EcVD NYBN`CNjE\N:mBLoCuMrDM#vJ@K{o@L}?/M{C\P~-BM{,CLw^CxN+v@$NwBqOwFxQvEPCyB!N|NA K{B?M{BLhygDOyDFQzFT|FRzGRRzIT2w)KUq:N;\2qnW}_;ndgg4}~'n<\xt5w,l'q=;swҩ{vlj}wҖ2qJ匕cac= qɞtK'j@}to@\n[HtoZmDGjT"Aau^pEkF-&nEhuGlnhJhFyaEv b2Fve8HziK1yeNnU,IcPCmFY.Fo]DpV` E.{j5JpjiGq.ovI%pH݅n F~c#T$>gWCzvdRG~lG~sIS|WGCtM"vXu;{`DmJ猵qJ$k~j67~wt`icj*^Qh_rQbY:SZPPTKUH[QNTii]e}ysyqPJu;D (q:D閇`ٙ%j}nGLIlAHFLZ@?V<=;ZAFa`&CIaB GCcDsGaMCH`?H`hl@JoB6LrCPO+xE@+OhxAOsALg5DIA[BlF9VF%KK^II*K aJyOnbMY_yt^xnײ{qemrkRJCnT6;B[AHCQ[CdFXBJGV6CHWx@FW@3ET\n?E]?8I2\?FGV>GUYCIETEiKUGvPdG8QnbFSPJt^EOmHwQjEQYgTEQm$GeQ[pJ|PoGrQl}E'Q4nCOnD"PmD1Q&nEStnD-QlBOhANkh?MPo?LFsALw?Jx?LvA6OsDOtCLNv@Lv@MvCMWxE{NizAvLx@Lx?KrBBMrCMx@MKz{?JNxn@Ny?Nz?NxnBOvAOw@NyS@M{@Nzw@ Nyx@\NvAN`x]B2NSw~AMt?nNv8AfOw@?N!yAdN.yBuNvECPrF]QpBJOszAeN?{&@XMR}@M>K~B%NzBMKxCMxNA}Ly.A2M"wA0NDv"ALv@LvBMtmBNu@{OwAUP!v=gLu>K=wDMP*y@L>w*BM}xAM;xAMNwAOw BODx@L'z@Kc|DM{DlN_tKBKtqDBN)vCpRwN@cPv>MyT?M{CP{?,N7wCN{xCMwBMltCOn@%OfCPeA:OdCOdA\NZ?}MFW:KJZ:J_K;Kvd:J[ba;Jgb7nIf9BIg!CGx^DsEZ]DD ]DhG_G&Js]qJMhaMoMg^Rfhn`n3ڤIbBP@4yBϸ`pʴʓ |DhUmQ~PZ=~~vnwo7_;=I07FPJNxBNjwFOstFPtwDN3zBJcz,C Mz|CMx]DnOx EPxFuTx4FnTwFSwIVvJVrNZrZ^nK`ja~o^|g~nr3nꠕvW^Lua{N3RΒ{r%ddnNz*wEd/l3OoU^ArU@#g#G݉pgJsoI!lvE^ gFt[FDs=^gFvb'BpJɄs4UygJYmVBGpZGsa+LueMoNTNpKp]HUqIEvq4Bl AiEh~V|(wErqB&P]蝰q` xK>thJDqni=G;z^nN*~mPjI=EhE{cGAxqzYTCmISHNoXELNQ_zKvO`KQ{]0k n[ȓHvo騿{|cbWF?S6<\={A^BE\CZGXCGWBF7[@oDj_\?C`J@Fk]?FZ A-HZAB4IZLCJ\CKd*CLFjXBTLlCMhEKNbCL#^_AMgFOmHMl3GM mD1OMm_B&O2mCOk&EPlSFSmF%R.noCN4mANo@TM,q@MsAMmw?Mw@OtI@OpC}PrA!Nxvz@1M#x@My,@L&z?B]L^z%AJy|BfMuB+NpaBLrAKwA1NTxAOv>-N[v>NyN;Lx%AMkvkBMtBM#yAM{?MF}@M|@ZNxOAYOwCANjuAMtRAM{x@N {@N}{@NlyuAO4wBOsCEPrJB`O@vAOyM?M%z?M{M?M%zAMGw.A2M"wALhx@Kw@Lv@L.uALs:BdLrYB LrA8L%tA!OvA>Pu@M)u=CKwAMMzU@KxBnMqx@LxAMw%AMkvANwR@Lx9FN|E9N{DMuDM9qCQsOu?Nx@~N{A[OxVAON(rA^Mq@ Lp@Kn5?Ll?NiAOoj:>MiANiB_N(b?LV=LV:FK _lv~˝@auMHꉡs䧩VfnUQK9?_McBGOQhbDPo!BMpAKrALvȚmQ8puzXvZ|CmRR>_pE{jIqEԂJf&=tX?gO@.iR@zuaBoG!x?R}"iEnT=*iQElYeNsH^#N}jaQv;p$P6m;HSnWD&l?jkB!hE+r8Le|eBYz^F?ꎡvWPp\)h}G]mx]Fv l@V`vj[{n[]ziL|jHnMz*z2ZZy&kfԖYj.ni?o-&pޅn,y}R^lrcnXrnikrqu}|B3L3wMJ$u ǓkAv;?dlji)HM&f.FFX>I?SB?(AU%DF\BRF`oBF4dBG"dAHd@HkAKuBnMy2BuMy(A Mv"BMyqCM kDOKZCIQHOTMZi]Whia`\m0P*Q7]1ZV\X}m֙3砿{waR^E/ATw6=Z> CaB/E]CEW[CxF9]BF_AEaAD|b @D^?EU_>eD_=C[]@HFa=Fc[?WHwcS?YFh]B?FY@:DZ?Fc?G=iQD,HjDEIkDLl@K jBL3h@IeCNkBMl BKhoA|Lt@L w@;Mu@MtAQOs4AP pBVQeqCOLuALMx?L6{{AM}?uLyA]L@xA]L@w@MtBNq~AxMs @LnvqAMt@Nq>N~r?=5OnvZ?'Pw@=NwCFNpxCM|AM}?L?LV~A Ox@OnuBO|ujBMyv?CLz< L};L}@!O{CA'Oy(AOwANy@LyBN6w{@N@uj>NNZv@O~w?Nu@NNwAOw@Lta>Jfs?LUun@LatpBL sDMMquBeLw;BNy!AmNwOth@NOfwX@Ny7<L yMBN7wCcNsvBMcpCMo@\Mp?XMktj?MPv@2Nxw?Mv?Mr-AMDgLAM[afLZn=ec!7*8Da-pI3~x7Y%|[LJְ"}ދyk0xNÌw]M˚avsk6]PFqCH7@NP9H]8Kxe{A3O%l'BOqCOt|AjKs[A&L3wUAK)xEBLhyBnMyBFM@yVBMx!CNMuFN^qtDNrBrMw4BzLwBMzwC[Nv1DmM]BE^GD9Fn[EF\ EvF_5CE^BCp]@DAl^?lC`A>Fqf ;DDc@E\AFY@C_@C_BG\CEWCCZCCl^kAjD?bTA2EeA9DduEiIgeD~IzhUAFd(DGa>BxE9` AFe @FOiAIpBLx@(MyAMvB8NtBOrVCPoCOrCM{vDNz?ZK{]@dL|@OMxAeMtBbMq"BMyqA"NrAGNsANKsuAOq@?OqU>%Psr<%OsN@ON#{DRfvUAPrAOsi@xNrBOxH?M{?]N}AN6}@NzkAoOyFALhz]DM#}A_NvA~Os >Ms= Nv;Kv?Mv!@Mt^@Mr?HL;s(=Kt@WMFueAfLsBLguDVLyDKMzBMwA(MvAL}vkBNsKCP^sAsMw@1Ly@}LzA1NTxAN8xr@Mxv@L'z@,MybB[MbvWBM+sANuGA,Nw@4Lx`@ M{H?iMB|AUNbyAWM0wBMzvO@Mu@Nxn@O|>MP}@MM}=1JDz@Mu?Mg>KY<KT=LlZ_8YI\<=K^[>LW?'NUAP|V/CPVDRLaUm?E SCGF6ZDE[vGTGUXI"HG]KI`SG-]q\H]U~apP"Y 3ŮPU͢lLK?yjq'wEv[XzI_MsyEqnO9=pԓr_p3OgM)S#5h?P7Fr]ZLLfz@ZN|FBMxFNt EOqGRq\G!TWq%EP5pBGQsVE;Q]t-F%S|u HTyI(WuL>[sSbxt|_hg}p{phU=wXGk|X,f g,]Jaj`h+u*[|VRwEݬR}kmxؔh{ n`^B{^sv\>|bׁv_lucOPpWL%s[3D]tbDrcIrd'K|poQO}n}Ixf8D}jGAvH PjSu)sң@meqO'q}]ugM>c[[Pa_\QlgXe<|ycB|*Ϩ OTœ!ȧu˝qdlHRpGoNg?"F2^>D\fA`GbsCGbzBSFbXC.GdCHHgBVJn&EVN;vNEOvD PsyB7OrBLr%D K%mCG5`DgEUwBBfVFD`zK7H7cHdI5\OOeUsEn^8nw]sj^`A:X6j;]@.C]DFYCHFVCFY9BEV{CDvX`BzA%\K@BN^C=F2cx>GeD@G4^CGZCD>^BB\#CE?ZUCE>\CCw`DYEbAE[a1BFbBDaUCF bAN wA+ODx6AOvTAP`v?ZMdz\@UM}@M'|?OjyCRtyAP9sAO&u@\NvmBOuSAiNw@NzAN{1@|NzHBPy BN:yAMzSAiNw@eNgt>>L8r*AMv=JySBL6z?Ju@KesA@Ls%?OLsA|LrABKQpAJq@:H%ttCJvBL$vCVOv7BNwmANtBOuBMIxC~Ml{-?JLB{G?3N{>N+z >MJz?L}~3?MG~o@}MbxA%Nv?Kw?2Kw*BM}xCMO|?L~AN|ANxBNx@NzY?JN|a?N|^@P{|o@NyG?Lu@Np@O`b?(MY:J/V`=LN\;+Ku\DUPLaw:?L8}>6K}ALgyDBOOu@YO;pVDQnEE/RnEfQp(FQskGSwpF/SvHTwJY.t LZp3XP`p-\^jmurq)a>ќx:vTge5}`b |Zw=sH}ٳ%[ys{صܟ!x WeO1~{Sv_}ZǃrOdp=M|{hIr\~KpWK|GeO8ydJsZ}LrXE}#d M}AdInGR.G8]NF;^H~?wYF>fN+Bz]E 4hEijFfBdCcCA}^.'owrʁoCQhQB^KgAlU-Faz]iK6yg}J.saGv8gFxUiEsbeAwjfECrVM|~Sbϲƕqӓ(t tyo͛&nkنg9luSMfTgM^wVTWaV^ggdNs{HxzьZ#&|FwvcBёTݕl/otWK`WqoF Of?FeN>DDf"B9GhKBEdBEeAyF^iAGcnMA>Iv}CKc{EMxEMtBDMsBKurAmHmM@mEa>B/X,CD9[FF`_GHaEJ)bPhU\mgQxgtu``yFJ?V7*<[W@6D-_CF]DIZJDZIYCGVCEhWCD\AD\CJc`JQmDKfAF[CFZ DD[BE^AGE`B@CIaE@D`y@!F_AF_5BD)_ABD_@E_=C\i@C\\@E_x@DcT@Dc>cGf=JnANsrAO>v@MwAN8xACOwMCODy%EkOyDNtCpNqBMqKBNqqAMp@OLuq@LYwA3Nxv@1OsNBPpBP6m@=wN s';MyfM{?1P$y@jPSv?Mx9?cLzu?M?{@O|@pOAxA Ox@UNczU@WMA{0CN{wBNy1?Ny>VN{<@N|A2NdzBO7y*@O&w@KO3w@MN'tAFNpAMr@YL y@JycC3Lu@Ls@MvrIBROrAtKo_AHwi>Fj?CFofBI;sCLtC7P w>/Njx AN;zBENbx-BFM0weBgM x?Lyx>M|@gP|?Mz@L{}?L|>Kw COZwAN*whBkOyBNY{*BN{?]N}=Ow{CTR*xCN6u2BLy@,OU{>.Ox"?Ow@Nt@N%q@ePmAQPe1=lM]8BJ__:Ka94J_[:4I\Y>`LZA`OeY>cL#Y?KwYx?4GV@CXCD=`MDDaE1E_pGF f3KHhIOBIaZQHRtsRDnI rr>G9~ޕZrV_briEuio{w99n{yTݞgph p%Ʌc_klCxo|fJ>I4WOD(ObD/PhEyQoCMnn IQppE`P oDNtA=KQxA|M=x?oMuAfNRwIAMu4BgNQv@\L2w]BYMNzBzL{$BMy@@|Nv@OsCPr9EHQrFQ sFR/s[GjVuMIVtJEVnOP]jYO[erUW^k`cRlnoq܀ۤtz(uחȓo݊mvQkڑbtwѧ<ٱŸ=}}tSxץvKkV9|Oϊv;R߆>tVpQm1FpE׀k@pUe?!oQ8~hSG>wUyLnX^VNqY;isWd<-dME_LR?ilR#Ίyna]x:ou|LX>oTJ{RivDLkR>Ej=BkNACgsBEfAF_h>HnAJW{E]MHENzHNvCL(w$CyKvBHbmBEbBqE]5DEY]EQE1\IILaLJbQQ]irUjcYГߋ,oTӒx~?mxdE>S7<[?sD`AjEaB@E\\0DxIj[CF ZCE$[B@F(\B^G{] F,K"ePWSqqJaNjDAzEY DE7WBD4ZCARF`?=Fa@G&a@SGb_@G\@F]CA@E'_@D`>E`E>D_^(AE\"IiAKp^BBMvVBLxALvs=Kt6AM9wA[MbwzCNsDOo{ByN[o@Mo!AMr@cLv?Jx@XLw?Nv@N t)ANs >hMjv8KxY=.NJ|>O~}>N{f@[Oyw@ Nyx@(My@M_}x>MR~vBN|K@Mz?/M{FA(N|oA?M}3CN}E?N/{>VN{CQN,}AK{CDbO:y@aOr@NN's ?DLt>LMpS?Nfp=LDt@LuALuF?Ks@M7qAL n@Ik/AFXg>1Dh>EkAjH|mBVJ pD,Ov=?Nx?NyBfNNkW,7LR\}AnKrBNhv>Ov?kOmq?Nqnp>yM&i?Ol/>P(i==ORf;Kcd*:J_i;J]:H];I|[w>LX>KWI?JY?HuY@KEYEFM`CC_mF%FbEC*hH Hm|KIhXN]{SoM`kCGӀB[zqsQHz~Uç߃/hzY\^񝐄6.mte+yjRVy\|BzLX=I4UA(M^dEd2|sB n*E}iNl}bDڎlKYb|YqZzpNvM9w)Q~|fTFn*]NV_LA:f]M=oYSGx]J.VjKm~F&eՋ ~]Aw}^{iLvaD~mM ^fj-}WNy{ l9tle9wdDx]cJ}xdQIxdDpM D$yfiLpb mP\\cHSTbTSi_Vnfaqn3v{v~̋Ǎd8^ 镻"=Xl pcjq'IRykKU iE|Pm=Gdl>CkM@{BgACfBF@j@HQnAKvCM8{EbMxXF4M(wDLvoDzKtjCH0mAF|cRCmGQ`:FH`/GwI&aYJK2c|Q LceaWrht}vk|~K{bddFBU6:X@C`BDW`~CE\\BGZ@EnXBMF ]BG^IA:G^CGecIJhHsI`CDV@AlUADZ@ZE_?E`@HD_ ?FyZ>IFZF>E^@]Fb?Fe`>;Ekd*@%Ea@C]#AC)bI@BfAFhx@I=g>GhAIuntCJs&DYKu@Js@Ltf@4MGvBNvt?Mq0?NoAN1qAMqCMFtD=Nw@Lqw~?Lv1?#MlvOAVM!vALw@Lw@Mx=iMUzs>N(}?Mxg?MwAoNuyAMw?~L-}>LAoLp}B}Ml|kAxM yB*NwAMz]@ Nh|>HN{R?LNzBM{@Kz BNxAANs@Ms8C@MuAMs@FOs?@Or?Nq@NrA@LrAKoPBzJiBHCgIAFyf?Eg?Gh?F}gA$GkBKr@Nvi@Oz3@MyS>WMkv>N/t>OqNANKt@L]OFn%YO;l>Mev=K\%>KYL.w{BNzo?`LtzCL\xB7Kv@KMv CTOsu@OUslBP3x EP{=gKxDSPvCPtEQKoIVbrJKUqMWcMYS\[KZ_P\5fVVjiXadq(}&J{N0x_H}5[^{-Drw}.ht~)j0wiot|r^z&n\萣hx%Qu_HnlwF;xGb} RVzRUwUךGDx/O6{b]#hw rPzUdϖPq`vm#po%yrk^cP+Ie]Iv:\UH= m]RLG{bJ62fDqӗsvˌ_e}NF\ ?IFb@GtefAHfdAF+c0CEc~BCaB8DzcB^Euh@BFIh@yGdA'GbA-FfBInkELp{DMqBMt,ALqvOAVM!vi@Mt)?N%t@.OsRE~PrDN^sBMnv@yMv@Nw@0NUyTCL.~@'Nx@NsAOs9AkNu2CiOz@M{@K{AOKo{CMzAzN`xAOz?Nzc?Olz\?eNTz@cN/zAMyRBMx#BNyv@fLt BKMtCMyt)ANsAPr=No@NpAMMq@J9oOAtHe9BG|a|AsFcv@E2e@Gf?YGf?FlAKPqCwOMu@{Ox>My>Nu@?PsQhNFhBNe?NL[>J Z;IY>)K\Z=UJqZlYRfsH`v/chb=JRCKBUSGO`HQbgEG:PshHHP#kIPSm?GPqDNCuCNvBMxAKyDMxCM$x1C MvBLvsB4M1wBOwCOvWEQzHT}ANwSAObtLCQudCAQ sFRrH&S6pJWac)L[^LZ&]GNhYa]S\YfPXdrxm}R~nyߡxd{倓Qz ralrOPljj=x>Ay֥Ak~zPtqHMu?KuMwFOc`}RU|Pl~vSڃ M^Uojqg67Ҿ&oҧB٪~=֢=| 㗾Q]ttjkOAbZO'?aL=Cyr.U F_{caCAhuȑgx^ʏ,giIw/]oKq{W:ݒ>l-ti{NwqiFvgK)ygdOwg-Mud4Ftk_B$yDcIxnGO yTuUsHezS_/V Q`WT`dF\Ynb\\shdvt^z9ے'%Ԝj֯Z,ٟٓ!΀zfplGQZmNUjKQgoD JejABcBBfBlD&jRCHkBKrBLyC}M\z$DMxDM@yEZNyEKq@FJiFgLf/HOi]MQaON\-SRm lsqx_҇ІEKKyE|}ovyf%cxnCJOc?,E\@B]BYD]DFo[CGZ@F']@A-Fa@EL_AG_/BFcbDF cFG$_hDQF\@C]l?LF]@F]8@|FB_z?F<`>F?_?FK_K@F`BHaFKaBEI^CE]BB_BC^`[BD_dC'F*bhBF]CFp\B-Ea\CIjCDKFnE@NqyAKu3?Jx|@BLw@L.tI? Mt@@MwDOsDTPr!BHMGsA_LVt@Ny@3O{AMVyTCMxBLxCNwA?N xN?LypA OuBpPncANeq@NNw(B$OwUCO%v9BNvCN zBMWy4BNGywA@N0z?Nxm@`Nw@eNSy@^NxA;NxBM#xAMavAhM uaALrxALr@MPs?Np4=M o,?Mq@Kq0@JngA>JfrBH^AEh^'AE`A)G`9?}G1i1>HmA;LKrAN s>Nu<NNxn?Nqu,?Ns=cNt"AOtuAMQsD?PpuqE$Pr+DNoBNrg>Lr{C#MrBLoCMHo@JfAMg]CcO]RcuJw_wCNb[DL]AM`BjPeS@PgBSg,>)R]>dQ\DRae_BDOCc@LqZ=I3W=`JW=IoUQ=$IX=IwY@I~YAF\ACPF`aD@Gb>DEaFFf`HE/`IJcAOxh5gft_Kǫ.v6ms{ F$VbqӓttNxֳv~Nx؋ͼU{즆v/m>MQHQDIQkHO^D;NpdHP%g4H&QkiHaQmFPtAMwB=LxDLynDLxiEnMKu9D!MtCM{uDMvsENhzEQ{FTR{FQg}?FRzCBPr COp%BPx8@PZyL?'NttDYPpGrXkI;_lfK\+cKS\K+T`KV@djt=o [e{s|Уc{QXz}ǻJDw{fb}ky5NUnH9Oks+DIqBChCBCfhB,F5kC-JmPDNuCM|B]Lo|;CJwQlTb{wWy`VsQ:Rj_ap{+t/jw:kÀd^7pSaSiIP3h#BvG`A[B[ECDZNCE%XBHX-BTI^@FbAF*aCG^mDHs`F7IbFI_GGH a@+D`A)Ga9?F+_]AGt`LAHbb?Fa5?E^AFZCG*\FJCaIFKaF0JaCpF4bbBuE`]CEZEHG[AGZB)H-asBHeBI jPBJ mBKuq@aJvQ?RJy@Lx?Ket@LuA(MsHBMr6B(NssCNxtfAL u@ANEw(A$P3y@KO3wANjuBLuByMtARN5sr?M_x[@Ox>MwA/NEw8?L u>ULtAMsAMQs@LIrOAMCp@Mn?lMoB9LqG@IgmU@HdXAOG[AEF]BF_AF\p>G/ij?I&nALqG@Nr<NdtE?/Ow9AkNuBMku:@NMvAPv@wNRxC_OzDNr-DM]kLCNnV?qLp@LoBMj_E@Pdi?K`C}Nc\=>JX>jMd>Ngi@oM/f CMcBNobCP"hERhmBhRRgA~R^{A|R\`CQkcBOb?lL`W>J)U=JOU>JU=I7V>"JZ?6HyZ@C]\DDbDDaEFH _GG0[~HH?aIIbM|Qg>hbsG]=c9ʲv돷p_}W [goðovqkcZ~Ҷbd}C_xϲ}vyMeebGI TJP`LFN-dpGNuf+I SOj:H{SoE!PuA7Mdx}AJ9xWE:Mx5EMuEMWuDLuD N/vfEM xFNU|JT|rIRZz5ERN'z?$MluCOlBMl+M|?MvAMErDQRnFUufTIR/dDWI:UAFnUAiKTYgphl{6 ,[+{^yrܤx׿ux(!`PdxXBRS;Po je\ofCfQ2ajW^ݒ~!P_}yHxLĘeIRjdʂTDy%HY^ޠޖpfFh/z'E\뱋mb-0"US ̪ۉ n{8iULjRA}-ehGdhJlǑ0pxc{uWP~4h܊z~f >t$PGa^?^GUaV@G_(AE0_VEIcFLfRKOCmBNIj>{DcYA H_@'I`?UJYd,BK6j$@KiCbNkD+NlB;Kof?BIs}=IsX?JhruAJnd@K8o@2Lq@LqrAMsr@qMv@MxANw:?mOVv@P9w@NuAMtmBMsCWNiq@Mjp@Mv?%O&w9AOv`@Ms@iMEtz?Mt@Lt2ALruCOqAGO0m@M_mcALnJAJvl@FQcA\E\AFUb@D bAG{ap?Hg^>JjB'Nm@Ocp>Ms?MMtJCN]uA3Nxv@.Owyl?EOz>(M|FCN|yEMtMCcKn+BK^o@Kp>Lo[AQNiCO6f>M=bAM a@@%MJ_*x |RFݦ \䭋hbɛ5indX3t |s~n×{bgJdEfI"SVHONaaE)NgF&NfHRjGRnr]EOtvCNTvArJv{EM@xQB]MzrDMtCLvDNvEOxEKL{yHPwDFwMuE3M)x?K0s?Mri@pLen @K {#?K*{i@LtJ@ZMq@Nm:DOcGJSQB AL> =N:<AAN&]8WU3Onӡz}~l}|{1|˨z&}hj$YU=LGC`\kTK&p LWsD勵sM.uNPyN_x-L~s5H c̦z|f&{4J+|{a]mw4оz#g$GL&߲ƝsցOgxcJhcI^grz wH3ky˖ÁOgyfe{j-0mOdoK^v\si&Vvg`QMh>THbQdGudNqxXPxZjjbt1|Wpc^kt\PaTQUSXJjt { |;omZePDkhenT[ȞD-ϯ.lsAkm}Cszلjoy`M#\jcEMlAIodEF`}CJF\BHHVCI TAbGUeAG^VBGbBFcQBH eaKERkE\`~qwS&Uhj2HJ];EIw]DK`E%N`AL a5@Kc?J=g@LKhAJPfF1N_g|CKfDMmAELlYJe@M@h?MmBIOqCOmEQjB`N i AKFl?lJ{nHNu?Nv>Muu@NvO@NMwQ?Ky>MxAPvhAoO0u\ANOv ?Lnw>MuCPtAxNPv?LuANv?Nq_BMm9BMq?LIx>Ly?L t2AOoL@YPn>MNo}@LMVeAMgd@M`lARh@Rj>kN_9JT;MYK;LF]fL"p@Kt|AXLs=8Jnn?Lbnq@0MGnj>H>]A+DM>=I/?#>:O0;R;QNHBKf^M͒ʍtq˜Ov{}Od{kѦ}ĿplqyY+9OF?W4OIWx>f{Km_H }5fFGxazFׅnKԋtM pBK?Ž̃{ېm|[HzU)_ΔsTUywg׎vX t}]mQb|*fE~(eEρgJ~jYMp \I>bOoEi>XLJlwjPbwfYj1uw&U_-wf^MeEUOXRTimx腋B3o lcijrh9B"1՜w Xjhu|}ٗ{{؎qmCsI}!URaBfFAP iMB$Ls8B3HsE~JqrGOsFH0P&tE]MLuDMuDFN`vCMXxDAMxFK vHaHrF\HFYXMLp[/QN/]'b^f̅zA˅E}~PqJwycWsGKInDjK~Lh?8M)i3?&M'jk?"NpCSQsCPnqCPTh9AM fE@L=iI?LJi1N&o>M[qwA5NtA1NTx%C+O/z@Mu*@Ms(AN@tAZPSuh?NwY?Nr|;Lz>MxK?_Mx8?-Myx@NvABOcsAOpu@N*x?Ny>(Nyj=LwALxAKv9BM`uBNp~CVNIjADLmK>nKw?2M3{>MtX@;Q|q#@nQ{p>MOo@MIn@Kk(>Hf?Eb?DSe@gH(g'CLk?Jlh|@LdAUNjB@NnCjM!sGCNw0CbQzBO|D@L}u@L{@M-xB*O3uCONr@Mq@N1r?Mhp;ANn?M?hh@NXf>=MeD?Jc@YK_>IKaAM2fAMGgAN&h@MbB%PbERf(ADQd!BQMb@Nf)?jLa@K `^BI_|DL-q>aMDoBcMmBLMm=nIkk%?K,l|=Jk7C\:@O:=ND9{;KS:f;R988NFJUHHNnpbيIu|Fl|!uvMrBrYzj(aw bCJˍwZ[wۋ"2,[5۷t z1zQrB;~wyCn֪jġhsGcU!_斎pu+Βn\CvR'vrX*1zL[xRsxPQjvXS{vhLkUJe;TNjaK<7vP.AeSAoǛGbzvWuf;WaUR]TVSqwk~nZ~rzj1|grtwBukїgĥ(\Ö=E଀G"=U~2݆stu^c`dJ=Sl,DNyEL|FLs{GwPTyPHPuGNt3EM3tDNuDMfx3EMxD|M tCKkQGH[XJ_ExVHDVH DtUNJ8Te>em_#r~Xq<~ouxi^uLDNfpDKpDE[JiCFIeBF1`?D[sA|F\.A8F]mAF^@E+`B.GcMi@NkAMk>kL~m>&MpzAOnn BOho@M3d?ELd=I,c>Fp_ADaAC+bCF;c1@Ea?E`@bICb%AL.h?BMpl@!MqllAMo:@\Ms:@VNu+DDQu?Nu@P{vJ@Ov?NyM.z ?M-y?qLsy@LzAzLvBLu=ALUp5CMzmA-Mr?K xO@NMw9@{Nr3@PqqAARp2ANl@L{?L{AM{?MaxBNu#BNNtB@Ns1B3P7q@ NlANk@NiCLQ5h5AN0gM@Ke@K"c*@Kd@K*hCM)ik@MgU?Ne/CPbDOSd@SeC S?hE;TjVFyWmCS_irE_Rb@M{Z6rxsd7sqL qidqfz̑*kAEo"tf-sH"iӞgfelSBsc ~_S푋|YPuJ[c~mZz\l^wthhNIy'oLj1(uUheGb0qaTeWN[PKj\W~Ctn&~v v[hƊߘٝ̓ɔ}qѤ e%ѧeh{}r]w`siZlc&_fNLPnCwKyDKS~0IM=QINW{~INJvRJdNsbINt"HO:x;FOzC!OvqC3OsBMjE4J\GFWGFtXHLhG]OMI_`Idc1.q薡ynzBsfuOOpDGKzqfBqGWjACcpAC^@BEZ"BFXbByGZAGz[QBF\DGamF8JhG$NpCL(nB\Mj BOlAOmD1Q&nAQlZARo>Ol7@O#jAjOYjA=MmBLpcBM:n.?Ll>{Mnp@DOVm@UNlAOn?zMo<_Kl@Mi@Md]@Mb=KbINy>yNe|@#N{6BMz>Ly"@jMTwXA0MsBM*s0@%Nv?MzO>Kz>PLy@KxAJxBKtBLuAL vz@Mt?Mw>=Lx"ArMu0ANq@Npt@]Nq?GMnZ?Lj?Lkn@MjAN,l@3Mrk_BQNEl @Mm>Nxk=KNl>VMnAmLqBOXscA7NvAMz?pM{r@MoyAMzALxA]L@w D-NtnBMr1BN2pjA!Nj`AMj0ANjoCQ}h@NcAM{eAMdA,Ne@RMgANj@MhS>kMgyAP[fAReFBRX iDVLjGSblG7WlmASxhDTf@fOb;MeBQl7CPn@2Mg=J÷#CmduyA6f+4d|HDIϑl'U\Etz-.bLelWXXR)C#IXAJ^HRCi3GvPrwCPz BN}ANyCHOxA NFwDQvJCOvCINzEMr}1JOYyO'Vx>TVa{SRgzOTRTy4JP)v:FOxF-M(nAdJd%>IdbzDK(eBHaV7P@MZ 6@;ITJ9W9Rf::8U7:UJ57Sp8;7[QC$DQJbO'P+gBhN𗶑n"i_?r }amSgWLhYlNoqRaHyDeCqTQcobR~iMၚoRvN}x{rJt${OO"uP=4oU}f]LvbG@sa,Lwc=bx?`oL֎7vFvqF;w _ޅ"qXZ2|Z͛kVi󡩍iȪ,h d~cJВ:m,nOi>Kia h]oV1yQ2 xE_FEyE?ybK3_"~eS{d~pOuhIPs[yN`zRRy^TCtE_kl[PH[ONcTSoc]{:qfwl~gy):k.K՚ޕ(n+Iuv,uy~kmBw1fhmncrjHYTnLzMuL8N}IK8{=OLvWP#MtO;OYsGNOUsJPv}I0PUxFOuAfOrCN^lHK`yHIxXJMzX-NN^VR\chiitӜkSxz>sgctQMp!FJ~rBFjCEBf C/D`BFZBFWTAFV@#GeY?E[~AD`CHdDJM mCUOpCPNpBgOk.DPkkcDQkAQ2lAQGmBsQ#nSAOmAsOn@LpN?AJp;BMm@Mme?L:o*B3NoDPoBOoAOGpy?ML_/AMrd?Le>J`k?[HWA8GBWGCvG[CG\BFG\_@cFap?D5cwCRIfICcKl@HL(mmA/Lh.AK5i?Ms?Ox>N9yC>Lrz?MN{`AcOc{.AO{@M{RAL7{@KxBMuCJNnA-N)r?@NQx?aN z>Lyu?L{&CL|CIv|AQH[rBL'u@&L3x?Ly>?My?LIx#CMv@Ls@Lq?Kpz?+K5p?#Km+@Jxi}BMhB!Pyk@yOWk\CPTlANdo>@O-rD=0Or~Mti@Ns+ANvAMWz@Mi| @8LS|RCMU}DMt&BKsC Mov?MD)H^RFPSNN|g~`ȕoH~y~zafsjVrhUtfN%}kGzKiCep@Pcn}S|OeDLAmMo}U1jT*Tߗ0xZx{`qQ|;nG5ug]חvu};`;sLUvD o:;mqJylzRDqBMyuFWX4] b֞iψjehT)lX{pT&wWAZ{+G8| [gcjn?:o9 ^_J{oFt/y\F7xO8vW hIiTBewUHq`$ImeEXtI섁mZQm&Y OZkONT[QPf[Sm]c`Ypof5`7pi=q sqvy( )녌xx{*lFjgi`lmrrtkDrf\jsL`Vhw\Su_zRrbPp^ZCNpXUPqVR4s@U+RhtKFPtCNs]C%OoG!NWe~HcKYGJUMOUU!V T\Tm'njb5uFo!SЍU}>uvoT_r:Q{L]n(FJoCGjBCcABsD~`BFf_A G]?7EY=D1Wn@FY@F\BHx`DMePFQqjDQmBKO3kCPjBpQltB$R^l@PkBOl@TNnAOqp!BMpWBLoCDOm>Lh%BLg@J9_BJ!X@G}U7A2FXABF]@E+^@Eb@WFIeAIfBKjt?Knw@Lpm?Ll?lNs=N{>Mq{?MIzBoO |PAMz"BLx{CyMJ}VBL}@XJxtDM:rxEOhOBNl=Mt@Osw@OyT?M{AL{CKv'DJ;t5?FIt@KvAqMy@gNuvANx>ALIv&@pLVu:@LSr@Lqo)CLCoAKmICKRh@ Lc@GN+k@NlCO|m@}No(?Ou)?`QgvO>Pv>N@weAJOxIANwBNypCNzAMyaCNy&CMq4AmKiHAKXbAxMe^KDQvdhAMg5@ Lk@Li6BNe\> L_BNbT@Nba@lNc?Ne^B7ORhWFPg&E%PeAOa@gQ8_rBQ_bCQiBQkDHTkDWoF9XqGSqoERojFUi3HUgAN_AjNa=PK^> HqVDIMWEJ\HCIa[JPT҇Xxv ÆJ&;N馮w-ZFƩ h6yzئ.|wJqF=3uF mS:.f=C2h`Ca͡ĈpН4VƝALrLum]KLTRAGXnFNg]LU^jLZ{oKXwExOGxCMvF&OvCMGuqBNvETNwEqNxMGNOz*LP|OMzQzYSsZdlVsp^rRuoXSxeCVoO4<K=qBKrBFKRHLRS^kZym7yid7nl_i+iSyCqWtQxuHfmCC~smMI{iL!xcM k4M摙|YLJ2^pVTtZK|XnGqFF jL?tgrVW$ybO] z'd; wC`HxgU}jO iDxpK<wuZ0$a~_=nonv/0eQTӍ~qAxnJcs7RӚ܀Y$f°Dnڑm2dA{M݋erEԋtM~}gFJePA+UK?ZcWtD}qJF|)Z5u\tfYdWP[RNVcPaNGSNLTO8P:`hWfxp!n(՚͠é.ӑ:qA|Wn҅zSblz_ffriur\|4 }|zktrdps^cm|dl|\GlpUnfY)qj[|rjkXrv_.RtKMSwE!PuWGOjHTLb.FI]MQV`abgwzoD㉬qSy%+z@yow}hZjqRNL+jCIjCFfEPFaD)H_B8I`?F_?iE^x?EYYg@VFV>RDXBGz_,CJ(cEgPfgERojDtPlk ANBl/AfP[oBIQoCO.oFFONrDO&qDOqBNoCGN_nE/PHmmGVP.nBKKnBKp;BLp@Lp BIOqz?Op?N0s:?eNr@MnAZLjS@JBf?@KK_p>IZD?VHta@G`AFa@EaA*E`MAFZ]>iI-a=OKk?M\p@M5pyAOnt=N\x@Ny\@NAv@=Nw@8LAyBJzAI{ZA$KziAKxCMqWCNjB@Nsm}?$Ns>Mv?eOy?Mw'B,MwEMuB%Lr@JscAMLWtA4MGu@M]uANvBNtA@Ls?.Mq?LlA#Lj@KlALk)C NGl?sLm?sLmpC[Nn@Mok>N"s?POuARwA2PyAjOzB OTyBNnxCO*xCPDtGSrAMiQ?J_@ KY=J[@gNyd>fMg?LiA?KQgBM/c=I,^@LMb @?N>c~@Of/@N6jATMkG#P6g/DO.`BRP_'BR`aD$SkcDQidBQkDSk FKVoHZsK2UoAyHrRGLSyG!Mb]JNdKhlWc:T}59RpW1 !FXbhِ0҂d>ك({xF=n 8(yDmF/)x L2q'~9Ks _˘>kQUsV:WYrGRIWpHMeLSiL9Vm GPs)FtMyEKwFKRtFNtG Ot$FPAxFOwJOyLQ{TXVyiB\vF|hx,rDawco~`Yz(ydp̃npvseab\WNOQC#FU>"?V|;2:=S5!6Nl7:N.4=FNZ3c>K>hDjK?JPCQSH^sRKgZTtjpW\ceiM3{=q&R_z_QB#QwPtMD~VkDtdJ,qn_2L3hJ=uPBpbPrYaT7wJJjBrnjEKgqAmhudLm]cP{wrU&mQS3: bM{A cSIp^Jt]&EOwfKx|kL㉻sM&odHtRa.qd9ޱ:5/({՟5GiUuC4osCpF@y6HlԊ_SuH]{tjxW6rIyaD^N=Q7K;[T-DzoR~eڊ}ui~UwhilKh[s]UO8YRORvOM+QMTaS n[wCmӁ7G੶8ǔ֧~+nˀ~ZgbvhvBmqВazt|cȀ<|vqt}inkim,fh+g\`Mk5t[fms]nu]nNoYpY#QsDIL^tJNql~K5QUgE RI`L5[[nrvi @u uNzՋ|nexF^SarUKM@i.BH|hCGenEHb`iCH\A?I\@F^/@D_\AEZBFVAEHXB8F^C Ib8EN0iE'RmCPlAZNl@tMoBMpdEMpGN.uwDJNuMCNryD8OoDOmFOmGNnAIn_AJ:p@Kr@LtANs[A1Ot>Lv>Mu1?Lq=Jp>Kp>Llc?L2hAKi#@eH#hq"Nv5@NvDA>Ot@WNt@ Mv8AKxA;JxjAKZvBO4uB6NsMBPO|pAOp>MsI>Mu;'MvY?kMxvASLtPC&MKj=Kl=LmlArN'q@7MoALMo?Ko{D PpSAOqHAOtCPVwlBO"zAN{C$OyA#NxAaPvCRm GTgDPOd!@L\ L=g?hKe@uJ_=EJl]ANVb?Nhb>NLe?N*j?K0j]CNeD/Pa5?MaBQ,d>ETaFTgCRhGWS3gFKRHhJ,Y&lGMTeGUdDSdEYSfIX6eAMXKA/KOVy2 Q_#Ǚʼn[ӊ*j3СƲ񦯂ʹRҭZcry:@r5=Fn-SpòpxS'ߡ֒Dʔu}pq;oS!X?\INR(cKPc6LRkF0Mr/EK1zE'KJxZGLtGIOktbJSOuGFPzIPwPPfRuJTT)yik*d{ |i{=or|m{v|hKxjsqr5n jra`VO#UdDMCV?6BY@>?V5v6Pa89O2YILAAQ9LHaO)_qUenT@wKsUuK+ŃWnU~$PlnDq/`Gm\hI;{eFʼnAq/Hl)}]G\$z}M;n(CdA/oL tl[r`GQVK>1gQH@_I*9VE;UFH;YeQ>p+[EsoaIJ!r`HfgCab<~`J5o]UK{zȆާ~ W]ErYvxBRV8vJctiŰ]볡Q>嚶q&py W{RhGaf.WEZoT,G`c]Lw#lSŁlsH]~;q\uk$Yja2P+^TK@e ^5QIhaYge]a0i=clsfpyÅ!zΡkY8}LA#e*fx5~N%}ohF| uFvzl9rik#lf>;of^qk|i~ajA}ajeEhEdkTuU[MoOjXrS_iVhSXTb0HRo^OO]m]uzj/xՎwlk{Hw{d]+vgR(PpFJifATGh@fFeB'H`ALH(]AG]@vF`q?UD%bAE\SBKFgUC@GVEGA^ EIbEdNjDE'RpDQnBNmAMVonCMpEMpDM%sAL=uASLrDMoCLkEMmDfLip~?QIoZB#Lq@L"s@L.u@?N5u@Mu?MwL@0Niv=LRv=Lx->4Mlw@ Ov|? LrA>K)rAUIm$B:GcAF[@2F]? GQ`%<[IdR?ANk=iMrn@Nw AOx?MnyA N$z @M*v|?M6s>pLq@Kqt>Iu@L!sB+NtgAMtBPr5BPo@NXq ?Lyr;Kr>KIqZ?qJl@QK\iBZMHgCLdBWLe?1Ki>TJ;nOmIKepvMmIQ~=]8QQd$E]:sXhoѓ}q^qZVDiVGy&Mw>Mz?Nmz\CPjz@L wAKtMDKnAEGd3AF_^Y@G^E?IYc:Igw:%Ko@Lw?Kx@eNsl@JOnqDGPq(CL=r&ALq?HKn?qIri? Ki-DdNj~GO`gqCL.a*?Ja:|Gc=Hd>K^1AgO\? L]z<2KcIMh?MM]h;K_nBQ_PB-Q>^5>6L[C;OJa@jM`?RMeDR[mSB:Q>lAORe:?QOSaAQf@dP'eCQc@EQeHERLeG\QbFR dOE\ReEAR0fDP_=XIXT@BIVGOeWHQ,^W]{l`j{1}zԃEui{Qjh7NkmzF'˧AԄt} z۰C|Q~kG~~Ovmޥ| ={cHqzi\ʌ t쑷9}W^M}>`RJLf[%RZNE`F=YzD9sY)I;gSUIn-YK q UAGbcG,1e^EV=[%F?xDeUPxeO nK^xU k˗jvTRrU ?~ilSk>wԫ\*l’zILrm`ESh`Lywtg~jszWnptMxs8lb8eWMjjf]LA}:uXb~;tf}uɀ7sEsnqDwfwS`vÀwe(Ǘ+̘y,[3~B-v:xBlqjiookl:OqfMwthcsclqa7o[Yqp`OpjTs)m艭m;hvgf[qhe`qh;si#yFr.Jrqt9qOwPkGOKFjIPlnHMgFGcEGcD0H@`BZF]QA]FK`?QE~c?De{@E_BG\DF_}C^EbBJiCM-rzCNtCMltALsAjMFsBMrBLr AL~tsBM;vzBLtC!Lr(B0JrMAKqCO sCRO?tA>MuZBNxAM]|AMj|CXN`vnBM^s@Nv@^Nx@%Nz@MyALw@Lr@BKnAIi?SFc>E\]>He;HiV: JWt?Mw@Mq@Mjo6@NtO?fNwx>/Njx?%OJuk>Mq Ic`Le>Mm?6MsCC]Ov?}MxuBMUxuB?MxBMyAM{@oM?M?$O??O{?/OvC$P9pB}NjB2NojCOiRBNPjDePj}@xNi?HM$f'A_NbS@Nc?MGc>L`BML`?L#\>L^>M\0@iMP]?LeCPs@^O{s>N i@:Oce;AjP1f@QOcEfP\e$ES$f)FQ(f FPicGRd8IlVkGVlJ@%O[<4JnSAJV`EvOSLS^eo&f{$nvQsuCzxB^D@twΝdž4 Ęqyyn$rSyځΰ%`DjAxxާqFw9%txF |{ uXfof7ga%NKTj!cO=A^NF1^.MFbNGq6WEw^FuYDqTOC>qUFwaxJ}>hHv]Cs[D5|hL1viRpe}Q m*SA@xiUGliSDY*LCXVL1DeRHlrTDeN2;3`hJ>>]pI;`}gU |gL}jGAp2O?xb0|a/`t F뇲jCktxawV8u}r˞I*uߣGq9~[v`FdVI2r?iV\ xbzezl{kG|ujdqg [-k\Pl^Pzpc쌱s"nOx@woUtozze𡧇~?Q{ 똢6Ą9 :ќzʖyqqhijȌhfqedt_Qt^n$t]Ft ^=;xh;pNdmuwh6rf+c+_neGg$ium(|s mv=rsotqJq L%PkG,Ovn4KX0tIgR?rwD%FhE_E.eF;H`GCEG\@F[A?G`A\Ea@C]A^DZDFP_CGJb)DJgENGqHCNuBCMFu3CMnu?LsB,NsBNs;AuLuA|M=x@5MUwAMuHCNu?L{sAMsBMvrAMpxBO yBMyBvMxCMFuD4OuDOeu@&Nu>M|y?L{-ANLtxBL tAL2p0@Jkn@Hd =RF_?SHDf=*H k>{J[s@}NuA}Np}AMp@N tTAqO@w?FNx?ON5v?Mr;JRl>Ltj@*M m@%Lt(?&Jv@Ls=_Km?Kim ?zKnAL!q$?J\pA,Jn@H l@Kj ApKjAzIh@9If|>He=H9e?KeB>KcK[p@Kt/COvAQNwCNzWBdM{lBMJ~g@Mqu@Ns>N|m@fOvW@Ms|BLl CNhdBN?fBO3iAO:k~BkQlZBPmAMi[C6NdIBM_3A^L^?Hb&H]1=J` >5N_BMZC!MbCMn@ChOr=Lcg1@NdAOdBrLM`FOcHFvQ|cFQ!dDP`GQb KmRhG_Rf=>L%XJ:HUeFKZGGNXNUSgBrygIzxFJep}:֕cwn0gz sC"ecǛuqWœvаƛv4dPj“MuwוW^{p8mӳ˘qڬs},z'u̓$zՄtS]vx~)r:Hz;)}~lnmf`c%mRxQiTJLzn]VVotl[)qEksxn-q$znnXpo2resr5ttuԊrtӋ8r=rOql qj0njjg* k]e担jeek/hos~ae]M[NGUJ9HS]F+H6TC7IUkCKVBN1^Pn_gnT/^`EUMWRCgPP L\e-\3d#rdCze 4m,.~>{ jl@^5O)=E]NA{cFSHjWKw bJ}fIxQ_FtAZEnTCs\EUvbD5ucI~mJٌ{]etG]Lhヂj#r bNWaJr@VXJ?cPAh S)?biSCAfd9O> jUnV=qQԀyoOЀlMbmHA@c2:)xW8{ bLo_yd<~ kё|jb wXunHxm*T:@QYeLAbRRfF n\}E%seHHukT}pdU m]Ql3[>T p \u[yidGwwŸxȆ{7其Ktܒזؾ*G)"`Aן|"{zRsp`hkhҐ^kQfΕUqdt~bWu8cstdwgdžCqz1yuK˅mm}zHp3mbm*d{HQuu{"{ -{&7zrtDtwORXk L9TqSPayITu"C+FfCC`CJEH^C!F^,@_E[B#G?_xBE{_CE=^EE]DF_CFafDqIfCJLnBNOt4CNZsCOuBuNvBMsA&LsChM vA>Mwr@Mx?zM0y?My)@Mv@LExf?FjA3Kp*C]Or@+OqAOs@eNgtAcNw@MM{ @DM2z]BMv??Lnu@Mth@mMi!@LIl@0Lm>JlHinr?Gl@Ij@Jg@Hae@Ih_?I{j<Ij=>nMpR9KpLd1?L$nA@LrANuANxBO})CMN AGK}B)N|AwOr|\?eNTzA.OwxBTMqA;IeALaCPObBQ!fBPieCPAlzAOnnO?MclAfM=fHB#Ma`BL b/?Hf <F9e?Ia=I`#@NdQAEM^B$L]ALyfw@Kh>uJcALSd@xKa@PH]@H]_AwII\/F:NcHENc/GjObD L^CLZ=I#U>FI\[ EL=aqJ5MR[I\-_[AqPypa2؃@Wd{u4^ A_Vb>bI*2c_5yU; S::Ȅ@1pƫƐhc4x[u@grpokͫiX-u̠ܓs*wk׆BrnrpnoYonlpqnq,pQrq㊝qpыpqmՍqhnq,eCohKlgjdnligImlojpzvM_ye?cN2| @MyAMw%A%Mey?L5z?Jy2AFMQ|AM{AMVyB OyC~PxAOvs>Mw@NxlDPyDNhtDTNlDMe_B[Ka+? H6_ESc@Ji3>L5l1>Nn?nOzs@rNvB:Nx?M}w?#MW@}Lz)@KuqKof?I:qy>I o=kJo >Jo=In4=aIn=2Im <Gj=Hjc@Jrg@JfJ@Jh?.Ki]<@J|l ?Mut:cLu=YNv>DMGx?tLx ?K v@?Ln?MqjQ@Nm@Np ANsB%P {H[ۄ*HTC"M_{CNyB?OQxyA(Nv?NL|tT@;JlA JbBM^9D2Q_JCPcBOUe"CyNkeBcN9H_?KbALaCK_{AlKb=Hcj@H&ds@Hd?hHIbA@Gk_@QF] DPGa&BkEgBJ`jAJCfC#K`CnJRWn@F-T-;DWBK`EQP_ojRa {yH3\×wu QkY\q3\"XZU)Ԑd&z4󪧒g%pe3NgaY[فrcGq:feahXzon@1o傡zMco}@n:x~q"~}:uGMy聥y3vGvj݁keqrW_vgXekkb|pfnviD(rqEppى sqTqo抣snqnόqj.pe>qeےp%jzoTjMZibseiejjArPpt4o*n{i][b;QNK6LMD'OPRHTSHeV-W%OTTFQRUQVI\SOFaVF_c<\Fgc eocρj٣w9x;~WRp4UApUHsubJB{kOK}i>@}_fFxQ`QGuz^uEZr\5Dwt_Gua&F|{kKt7OK|$U{W B\3c+Ώ˜?_RnR:g}RBe+RBb NTAfODjRHeysNn}Lg~Nց^s]OV{]ւtOydqDlS:fRQAHte[LpoN|.h]I~AjM|pZ{iRubMm]4Mk[[J(jXDD_Q@VtN7@XQC_TKh_MYp#kberjdXxkgh%wr+@F3EԭLf̓JՓ${ѓ֗l*ǘ+ے  })Hyqz%rRrtn)jY\jwbozj:dqlSwp9tnjMyiSPزPǡ~oaki`dhXjqtjg}ip]Y{,zx$tua4_qZ^y]T^|GOv\AAE=mCEdDFbCE_C{Fj] CF]B(D\*C.D\CMF];CE\BE[SDkH}`EKeFPm]COpAbN4tDB/Ouw5EuPZwMCALuBJw0BLw?MvJ"h=Ln@Os?Nx@ANz@ NG~>L?L|?CKs>Jh?gK<`@2L6cd?Ki?QJ n= Io=J&sC@Lr!@?JnB?Jo?Klk]=Je+?+Kwh;>wJ\j<Jk@JCj#BVLjAL~n=:Kv=Lw>,Mx)>Kty@Li{?qLsyYAIMlrCOn@ENl@Mm@hM8rDPxWXEdلOZgExOXzBO yCP vA+Np{BMmn;C+NkBOeANP]BmOw^~>Ma@NPdCBN\bBaMb?&LbD?J`@gI`@+Jb>'I\e>aGe?6Ge4@H-b@6JbA}Jd@H`XBKaARIc@Fc?1F4d>Gbx?F}_>Cg`,CDeeCCiIAFll>HiDKbE0KYaFuER"DbDAVEK`][ST~xv`2TvCWx9ƂTo9^ x`?,^*gJ2hdp1@uwQ€A`VOtcڗVepL׏gV[܃(iv̏yd}|hjw{ j{nlqݕ3zա͙`9HQgmGwyH_h@{_gq}gb@i^ oeKLunYs qrBqFq]p9soqmRCmsenbS2qGepgoiR2ksghnσiwwlpxgipolq{Oa^fRHNJGNKCJOGQSLSYIQPTQLNS"QINoTbWNi]@G+k`Aem\^y_dwYhBm$%']JiRVua^p\U| kIvlbCQlVBAhWJqbNvb~Gw_BzdG,|jLue~MrebVvpg&]SnOcNm`FeXCWPATN@\ZQiIg]Xw`qjyqilrc^h{`EZЎVrh;цxlrqJеꙤ%BHƈj6 Vǒ̘k]m6'zv_|Vsupk\loc9k"ejlgljl#g{zrem|p#oxmAnKwraHake]hY&Tq _3Wfsvc/v ?z{+xq eaep]`unQqXTxD_Mv5@F oBF g-CF:cjDGaDF[DFXoDEaZBiEZBFZ4BlFYAF\vBHaFDJmeDNk-CAO~o@Nr@MvANv BMvBLuMBMIt'AMuA OhwCQvzl?OMz?MyYA5Nz?L*|@M|-AM}yANz@!M3zT@M$yCHOx?DNx4AWM0xw@ NyxANwuD*P>vDNZqPE;Nmn^AIj>Ef@G]^AGX@F]\?IGf?LlA*OXu>O:{1?Ny]=L'{>M}@%Nz?LSu>nLmp=Kd=-K+d=8Kh;.Ji=Ik@>Jlw?K!m@Jm?JTm@Mhj?-L.e>TK i=fJl=InB>aH(o@Jo@_Kr>nJw.B NC|h@L|@9K/|@hL{?@L>x.CUNCsKBNnA2MBjq?{JijDAL|oGch @Hf>He?mIh?/Iem@JbC#Kc@GaC?Fb?\Hb/?G_:@(FcBFgCXGhCHi~CIgFKbGLy] MsN]1IM[O]R\ g^PЉgklNx괗ս9Uխ۷֜bqzC8re]mVMOPfK{LGL)QF5QSOQVU QS.TtIGMJNCIHT^PYnO] Xm\XdijPynl8S㋀w^U]N|L݅s^G+P$jdZus ~LЙ o4iL v<[E|w\BRw_UEoxV%?nUl=v^ET{aiJN1q2R|&T/QkU&C{e"n+Gmk92wn]7k~TLF`n^Oo[vNF]K:XHn5!hR?piӥO3DtmooO{eDykeDys dvHqc RmYM&iPRA@qgYCfyfI9~wn6M}pV}^uf{{wnrm^@qfSM?k_4HbVYGaXIb(VMKa:XRl`e]Bo+fahQZUnYR~hWg|kv{D:$H2f;ח>Q5v){`WpWzw~xysq˔pCjkbsjNeNkehCi1gbj?dNl^d8nKZ͒Vo6Zp_ssmcUenkdf1ijhjd"cGin`zǂnČxGssqrbcq3SWuDMItAJnADIgCGbD{Fx_PDFh\|CEXB8E ZBE\AE{[BGO\?BF^#CHuaDKagDOo2ANdpZAN>r7?)Lot0@/Lvr@L x@LvXA0Ms"BaMrALImf@%Mk?dMv!@xO|G?sN z'@>N"z?)NzANy?L;v>>L8r<LXmL>Km=KoCKj;Hk>pJm]>Ir>:JrA@JrW?IuBL!|Y@K|FDL~6@JFz@LJwAMsAMpALjj?fJYg&A$M}m~BsMqD+L5rEMnoY@Mp]=Kt?K%sBgN\oCO@jqBFNeBfNifAMg>Kf[?=L-eAWNc-FUQdqEOIdwBM_eAKZ\Hf?zIg">Ihw=Jez>Kc?KaB,LHb@I4c@HleBHcBGJeCHJhjCIfDKfBGKyd.GJz`ILqaDP SjJM:_SNwU2^&w(r#\q7|ǰ CźS /bI. v"Ef{}mgt=0bSTSwh `BJ~{M@Wf̆wd k1o ^siNTIi]\NW%}]sylhx}g}dRlknYb/UvcTP_VUUPhXUZTTRW'`TeTeZ2PQTRNZ\XKbdjS`fYME]XCqjVF~aFlNzRZ|QwRЊPydl nmiuBwqW~uWBpR": tXDn;UBi2Q:njSc=rTCz?aIQtJ_uK~h[HmhW_gPBizS(EudJq"Rņxy_Sxc8TwikxqjHpeUlT`Kl bLGkaEM?i!^ZP%fM\_RSh\UYl]WdKXRk[]VV\qftEo=Nwơ>~O܏Ԍe\ kr^BVޗ䝎՗|{|1uvp.o}imh\kgVBkhhfh"cJi]Ci^ykeǁvoKjysl1u|gry?wlq@wJlah\qexiGߔD~*zrmk+oSDZp?CMp?@IjBmIefAbE]^CD[rEGp_CFp^BXE:^CEWa,CE`CUF`AD`CGfc6FmMkE5Qs9DQ%s\BOp B=MsGBL}ut@Lcv>.Lv?L"uA MsBLrwBL4y@GL/}AcM{}AMx@DM!w0AMw@M;y0AMz)AMox@RMvA>MwC1N?yABMh{A8M}'C\M~`D8N}E^O}@Lz$B2Lu8AHkj?De BVEc@FE_@I4f0@Kml0CNwZ@Nz=>Mxg?Mw ?JMyALyjBLw@Ls#>Lr0>fKr= IsS?Js>%Kk@?}JhM?2J^j>J%g>Kca>*Kg?KXi @7Kj,>OIk}?Km=Jp@UKqBnKnqDKq*D M wmC9MyC6Lx@K&wD@Mu ?Lyr@QMp?LkAFMngrAMjAMqBL1rB,Mp@MrM?Lsc@@KNrAL~oAMblAMj@MiEA8Mj?4LEkZ@LVgB/OeCKOjzDNjA M'b@HK\=GZM@JRe=Ifdi?J_e6>ZJfU>Kd>K_(?lK]D@Na@>Gb@Hh@IeBBJfDKVgGMfELd]FaK`,FOKQZXHK]5JNbCmMUM\VfbxElsv4׺˧4*ҌoyW0QiHL`XTُ1pCI Rj|Rdg;p+ʁ ekJXH1W&NIhDh`Foyl%~ur$7nw5k݄qkN~brrt|KpƘɟ#Dcɞ]7oi,qZ!x h8q>ha'ncibreu:bzquc嚟qsbswsd!tgŔrgqhߏoiƋmYoq|lrh`J^OwuUMoURl$`]2eb_j]IRPhWWk_aYjkvcTh3` H^r6gLh`HV;N:zd[M.@*ySB rQWua|_zeMn"U]oIms}Rx[t@ydI0fMN?k`SBFgkOAdL=eN?qkuSA}cFU|dN oUXJ]MGAmY_EyCjOxgNiRGD:jTFm[&I@eDR?fP; xDlmԗIk.&oi⎫g]V}yUpIu|!nKulb&I?nTHQidRUHnE\Jv;hL~IoVQ}lOVwhU{ujpcNodt\KndUOtkURujM}n`Ne|XxPh@\Tl_Via'[mhdchtkqڈ-xjpz~ԇj?T)^{lf_|SV4yyukskpmqykfjekf^kcUk^3kJbd~kWjpl[yt#kM|gtMuAYMTv@MxA+ODxBOMvAhM uB"M1wCLxCLT{DpL}CK2|DN{AGNyANTx@)LXvAEJ%nAFgBCcBVEd@GiAJ9pBMv?QNEx>Mv>Mvz@Mx7BMxBLv?bLr<Kn>Jo9>Hfo?IKp> Kk>Ji0?Ki>KGf&@Lfy@Li?K:k AKpk@Jk?yKm>K\oALgoBLlEVNnCMpBMriBzLqB3Ms@Lr@LrzAMq@Lm_?#Mi5@Mm@MpA1MrAMr@@Mu~@2M9t@8Ko`AKQmF@`Lm=HKFl9AwNh@LMiP?Lhw=Je?>Kc@6LBgF2PIlD@O0fAL_CK%^iB&JYqELC_uAKa@LdH?aKd?CJUe9?Ig@lJe@H^\AINYCK;[5Nz@M~zBMwBDMztALqm9@L!hS?L,fgJoS>JFm="Km>Kj@Mf'@LFd< KWft9G `:EZAK_CbOYdFQ\g3DNcAnLE_DE:O`CL#aALaAMc@Kf?IUj=G[g@IecBPHc`BG[DrKY&AIX?@uJdBLkENi_IOe?EIcfCGbAE [;?ET|AJ{TIWZJ=\]aqskq xV.n݇S Xް`nשƥɈ}5bmSsӆaA^fjMjgPa7|_䊳`ړdwXncQIcoiPv\w`x8jBzM};g~v_yln Zq}Twtmsy؃!y|vklYkb`lkT[|`=g&Mkqmnb)*u.`C&wBgc2t0g%sdJlsa"v`^war?fjsir#kJro/pjEn` ncɊ'ldf\^CWh^eiEZN|`Uw7WRLv?aa{}qpGpf_[otb\}`v̆JEqxi\H`GpJmwnnDQecTsbIqKJzvT#W^ۃ\mwHq[:Fx{jf.t䖏u*|w^o[IUlMYKnt`.wfh.PeQE`oMa?}`qMa=_L;\Kqi}y#BLtDL?q(D/Mn>CM`srBM~x@CLzAK| AIyAWM0w@pNtANsCM,pUCgJjAFW`C1GZ8CH`@Jo?M zC=N{<ISd!ALa@)Nb>Lf.=&Ki=@J{hBKdEMb*BLf A"MskMAfLkACJiBJjBK.lBKlAwLhkCNBfpCLO+hCOj2ALglS?LLo?!LqD)MWrBWLs@Ku@Mq?uLn?MqW>Nt>MuCMvBKs@=L}s;Ib[C6NdCM5jC2MntAHL!jyAJb(BH&`2BWIN`sDL^ABKKX@JicAK}j!G*OSiDfKyaPBG_CHa?HZ?HU}@LTjGX]R:ijl{Ss&*ItHwY\sO.Bt6{CMlgwD}ěj\l Tx+n͐mV]?UX~tyN^yT wfVHczoLm`HyskMex}0`otu`pn[undSpkiXZ`&g"^NXh}_Vd]VLgcAa|\RQVgoXsfdh 5n@c,s>chug̗qeuqahtbv6_xGbɘOtKh)>skݒKsm葞ut4)oikn]錛iUZi\w3g_}ki}bpn`|e5Zy`ZfSos_\Uw)jBfgmc]ceX1`%zϐ5y7vRvTwqBU{k mZx^oVx'Ww[OU~,P[s]JnS[<-zeK\Vr4ҀAWpyjM-q`P&pS}etaI)gQyA^8LqaK3xc?*K'vyC+NqChOoD^PpENn'CISlAeF#hBGeAG gAJm?MwNv>;N(vD@GNq?LhT>J:`p=J1_+@Me@>Kg>JiJ@J?gDFL5dELbDLiAKm+AKj8C|KNj@qJl? Kip@|KpALkC@PdDQ\bD4Od[BKj:vGn>7KqeDMVp&FMq$BL$q|?MnR=K'n>(Lq,?NsO??Ns(A,L~sbAJq@KpK|e=Jc JbH;I_8FV6CV74C]f>qL^etAOofAFL>d@J awB~Mud>Idj=H'dBLfvEN0jFLO]kGP_iCL(`CdJF`"CKbC=M`?JZz@HcBAHhDIe/@D^ BF_2@F3^?vIZY>yJQU>L/TZG/U\ KWbfhtpx~{qW9wb|v~@ sjB5Fi1?ȝ}w@g%#<9}ǧq1ri|"I|F `ĔU{Pktg]ygN[q3T5htaQkrkU[o[LgVZKpngWnnaiMo']$ffV=k\icUVSZ&WTaHb7e{Âaa.gtcYizek^-q-gueB_tLe0/rdpIauc~yIa\rzb:ugrwj\s)mep6nelgi[SgVChX&~g[hyi_Qo^0}fcTx]QkUrLfVO`rTsX;\ Q\ulm܂xgtzWx`vq\nuoYy{pRw[U˕"=YΕ^}R}N!FuHyZ?|qWBj0yaՐyGГQtotTubPM&|[fȁb y_cC`j:R@YILq>Pu>>P8v>UNv?RNhvAGNrH?MFk;XKaUOKe=Jh>aJkh@6J_fC#K0dCJ5g`E.KlDzK/m:ATKgjJAJl?3Ip>Jfs>Jr@K'pBGNiBNbDNaAIf<+Gl?)K+nCLmF{MkEzNk8?pLlB?Mq=KqY>UMrR=2Mp@Loy@Jl>JiB?Ke@L`>J].;J.a'=K:b:pI_q:yH_\9GZ:F$V~7ChW5?D]:I,a[=Jat>I0`%?I]{A0LaCMeBOKcA LdDKMcH@PFe.KZSijE(Oe>IUaEMfVALcBKayCI?f\@^EVfsAE5e@DdCFbB H,_4@H[8>vKU*>LSGQK]1L%Z@aZhh'mrj|&~lݗ)v#QTbkkB-mlFf6Om`"}#ken}fؚvpe.Ҕ,zȥ8f}?ovZ}dp_`rfvV+|ntQ`xh>AqҎkxjbxdR]WNJd^ UObdUfl Ydf-XcbcVWTN _Y|TRZ]^h}߅ydek^ZgZveko=X{vdRn0[{KhU8FZp_HxphVڈ~hލφq;n{t@bkr&i7[uk^`,u gA my=ӮBң !x>rEi&z􈋃Jz~·XƁ[}|Yy,wz)x.|D{gyww.uq9q kotg>imXiZ@lZlI~khlgzndچqdc'ovlmm{}kQwy3}צy+|"ΎvY*q{k}nQ\|hOE6KaCrIdDHy_-EDZMECXDDy[CEE\CE_BD_uCEQ`BF_QCJb|EN]qEpRyx8FRrDNNpA[Ks@L s@eLr@KqBsLMoA)MrFB@NwC3NDs?GPqEOIoDNofE PHoF?QAmHQenZGQpFQpLGQR{pFPjoE)QOrDP!rF3PbplH^PonGQlHSai5GOfBH4h@D'll>^Dbmz>Gj?If?LjaAPqAZPSuh?EMFw@M:xG?Mv>Mu=qMlJlp>Hq ?\Jo@L!iBMfeBJh>pHk?AJ m@^I*mDCLIk%ENj>Ln?LRrB8NtD?sLr>Lo8>Ji@fKf?aJc?=Kxd|ALa@LB_=J}^=IZ(;5HNW:G/Zl7DWZ7BU8ADV5zE[9ZG]7TE[=H]?J\$DN`FOcDL7bCL]b9AK\9KQdHfQh%EWPm>pJi@Kij>JbgdBLgEJiI>XAJTA&LR5GPZ\LWUcbSW`fgo9_x9wk|6|ȮZsyQSF{]UTޙ5|19l͞,{UFRd`룦OX@f.r&j5~`}yrfavneXTx|kL}]U-k;mRqX `QJaYhR ``Rj`dODddZVZ\{PYSL^EcKTM`oW[asiudmvZ^deXWbsbhmnok[ rfe s]aqt`vFdyvf̙xgf)wj`0#tZertf⌝k~ec_7b\xUiY]poYYl#Y{n`_~q0VxcLQjj\&K>XP`B_MG>SQRQo*ihmSd*Xg[Li_#MuraYvayntriziN oDᇵoDx/Q~YjUE|JMzT/vU7q@V߅sPoIi`oKMYnjtхr{Jh@S}<']MA[qOFbSJ{_O>hR/:wcD|hDwKwKy&a<`rU8yeN8}hP+hwgVgȜm8­anð7n3É`o!ysjIPugtWw{=fzpKQuԣ jJ}hZ3^nMydH taeHEt b9Hub#I}yiS}l%(mv~wCsT}sr5}tk@xj]}nM]ڊtTz۰XuvEU}ՄW}=*y}{qxErwqyqrb|Xx-}Bxutlo;r.lŇroi:Zlzf‡6j=comg{3o5i"q]lusB wsIm0ܐGrPϤ~𻴨{ ֢3~iAUkE#%ԆW~0rT2`j)DK|cBDAKeEIR_F F]DFD^tDQF_CFp^B0E_!BD<_BuD_CF`@CSIbEiMm^F2RtGvSqGRSpDN[rgBOMrAKr?gJ*rBvLoBVMpBNtCOs'E5PpbFQnkFpQoFRoFR8nHSIoG8S5pVGRRpHSKo2FGR,nERqEJQqIGPpG Qvn*G}RjEITAhVIP;i/B%Hlj>Dl">Fn;Gj>I!g?Ji'@M7r0@%Nvs?Mw@Nx@rNy=tLzo>Mv>Li=J\X@J\@Iaf?0H>bDAGId@HgAHDi-B)Kg3ALfd>K4m:>'K'p=L}m<Jm<4Hni=In>pKUkAmL+k@Jkl?H8m@I5nB-JpBOJnbBLn@Mr=KK1rAMHu?K6p>WJnn#=He? JEc^?qJ!bp?JbA[Loa!AvL ^;>AIVZ;#FU>H^T:pG;T6DW9DW39,E X7mE.[;F\%<@FZ=G$Z?JY3EHP_FP/bA]LEbpB)Md+@I_%FBMc9HP.jCTN l?Jh@Lh@L`hZBKCiwC8Kyi@HGd?GdY@GfAsG8bA*I[?xI V?IURFD&HZQHGaPX]IWgiT_iNh~fcυu|Rp3_:S^7`QMw\ΠG_JdKoA)ЂQFcvQN4>bJI?>RSOS-q#nowqqgqsfO}n]ItmXx{m{|-n}2qVņrMtN>{YG7~XWPW7wGW䋸wZWi4N>~xgwGf@XpNǘ{o*=|}Vax,cEk1VEbQDhUW1JgSDkT>wcDgnF~Ryx0Lu\&:DfM.oZEwleFL$Ʀ}NpӜ.i6ogr4 pm=qr*sÖpG/pn7s\xlsiw[zHʄlwD#}gH:yfK]p\IkXpMZwiYu]cy1cynulYfjcYViMWgRՀwhߜt~Ѷ#Ćn򖡀5|[^z[z8|wm s6uu.rtnvpaytI~{QԜ|xplOmh{g`vc@Z}f^Fkh+nkvo?RzHhIvexD0~5~[{Ж }iu!\)e7rFMeELeIFK^G Ia]EF"fBFeBE`CHF`CFp^CEZCQGX[BH^DLiOGQrwFRtE;R~s&D%OpSAyKym?Jo@L~tALsBL sBTMsCN8rmEOo"GURpF6Rr-F StFaSr`HRoGQnFQco GSRnERnCpRoFS\pIRnHJSnERkEiRFiFP|hBJhIwk>Ksp@Nz?]Nzr?2Nzy@)Ny>L{@=Mny<LXm>^K`D>LIY?JNa>DIfq>Hj?Im>@\Il@Ji4@KhQ?ILm?Ln[@~N6lL=@LjJl>Id?Imc=H`GaCuKa2@ZI]uꕈj-aFElq`'TtjCUsjRp4hN'zdN frqELt^T};e$xsZ{kLzwi`n`od0`^YPTZ]VR]]'TSN|bPD2lSJg]GP(p3pkmqpqdRfjCh^Iguag2oÆ2p:xhs@r+vizrcs=gJuJgBwezcߓtwtctd֏obg ase^J'j\p\~nV~h`Xg"ZGRdShI IvN?GINrFIvMGTTUkmoLx`tnjzmEPI{eIbwcgNxsqa||hʂ uLY{{wW ujKweUI]i]}Q tR~:fK2~eHEn}udM>mjfLAwd9hx"y\T%lJv`"IoWFgq\F6lWkEZiCTOBgra\IzeHvJzXk7ttNoY=]I`/fSR.u]Ōs=ŬrѝomP]mgo/lPў;j1jѣcw9NSiIv{hLudLg_UnIfTGqw^GzxWfANvlj_l!bE_cTYa%SSnYdUBjd= z,7)+Qޛ)w tⓕ|t-pozQkUjcpmvrԙOyw|uN_vSyKzqfzd;s_Xk[(Qp^Xhzim1orrDzq#{$]ȃ}ݑG({ܝDȨU[6FǡzOv=~"g0yB97bis=IOfKn@MtAtMvBMwAL>vAKpFPVoGQq@EZPsD/QuDCQrFQ%o"GR"l#G'R"kDPkC'Ql3CHQlqFRUmHQkGiRl[E^RlEyTjEVgDNPPe;?tHe;jEXgw=H|k>Hj?Ik?dKsqw?hM0z?sN}?dMy"AM y?FMUxf>$Mu/= L1nD@GK_>IY:2Ga=pIi!>>HkG(h?Hgn?Ie=Jf@Lj@M}kAPkAGQiN@O

7M8]EAN]DLPGcDPnAMQtAtMvBKwBIotC~Kr@Kp@Mn9?MpOHe_p=3H^>Hu`e?Ha@J a?J*]m9_EV;ET=GT9ET6VDV9[G"Y:G+[c? KaBL)b@L^!BK2_AJ3eBJ.i ELK]jBHEf>@_HaD@J^?J*]:}JTQFKQIG#MMPS[6Ja\Oery.s^l[jT˃iޟ9zgyd]rҠ~L#o3$IXv?Hj[#z%Yp;fXWHb\M\tVMkUcYL“pYuFuMZTtXȅ.ub2sZy h=Lwm^q(j%Y_TLMLOO7N[`[aHSk^MrY{NUji_Lm|n`MQӀerSP^lԙx׃wBxantumDzlssAohjh.n*kMv_qȕzjt!}6˖xd҃,qqk]xg^iZ/P,m^V}3rgr$1}$Έ5zo;ld (ߓ{#}`~w˝WН3xrLt{ctGclyrHNbEI`vDxGc[LCF[8B@Fc)A FdiAEnFd@aGriA;Hl@BH2l5?\Ho AM$xoA'Nz D4OzRBMxRAMv@Ms=K kB@IWE>YHUJ=H ak=4IRg$>]G|c??E`?H=`>IaF@KeBNgBPh-CQTjD6Rg_BDOCcASMY@CLWfCkN`oCN4m@_MtANwA'LBx AJvBL1se>DJcm:@Keib>^K}j|=Jk>Jft>I0`>mH7\=Hh^:oGXb)<}Fd;IGa<I@`7DX9DcW,<FW >IGV9E+U:NG4UEH`{BtJ|ehEKhFIDiBD%gBFdX@EJW_>KW=:K%PMELQWPREQQIsoV>INtsD|*l[2k!_Xvg-Qz)jNR}o`zpR[^PTF@HKHIRSVM_QoiW x%htXDjv_QLpk_EqkbggYP"ma`:a v=kSo_zm^s0pssr3rcrقolr\gues`Ps bqXm\#VmHcToe\oc. oeaoc T^T,HDE;6LC6C7FoF-EsLIFK"HHLI)SRMiaNvIftLwkeLVuUaL7ydLJy]c}Lwb'KvxvWhtvŅ!h>rRmuRCxRwNrHȇp5K[TmyF gA|e7KzcS;~b*N~`G`?E^@Gl_BKycBzMfCwOfvB[Pf/A0ODh;CNg'BfLcA~KZ ?IXfBKiaBMjCM9sCMux@Lv?Ju?LqD@xLl"AuK[e%@Je>I|i~<Hd>IS_CL[MMHWd\9Ph [JocDUHsjYMubOw:dNUwd`hJTrNÐ`kхoY w`SjX]wJtK7*vLj sJҁgiEzM_(@qu[IsW)N{_K{Y`8GGxo^GqV?FnV C]hP):^@MBVHC}XH?V1F 8X JC;B[LRmVX=mZJ n^OmucJNsme KoCfJWzNmWEsmh_|}pkZwpoynw"qyl6th\V}qZe:yQ؃v͈xznyq!1y q7mW\䃶hi\/q:fxj}}'o(}qy'mHq_Ɖx$d݇z+i4|kaatW`Xzic8sMeN|oc|eIߝ{ĚuMvtŝvƍp{T{gsVzc0{܃%kMrFpgymvb`owJLQ7m>)AdA?@Hb-BC_AFa`AQG9b!@>EKaUA-DaBDcBC cD%D$aBDUD_HDmF`DJneDoOmBcOr?LFr@hM8r>L~o3>JZq?Kw@K{AIWyCJtuDLspF@Oo%IBQpHbQqE2O3poB7Lh/?[J\AuLZ@LB_BOObBP`CP}_CFPh`fBP,d@N)d?L_BN`}BoN'bAL]NCJZdB.GZ]A E"^ BFd@Fk@*IprjCN'{@N~>EN{c>Lv?QLtI>}Koy>ISdA:J4X>'GUV;>F>[>GYA HZhBHw`AJ.clBKudB Mc@ MblAyMof?BLgAJrdHAJ^o@bJ[;BKcEMOjGOYqD}Mq7DMqn@L1qFYJHGWK}I PPQNYWKP\Y`QtO{MjKQO~N,[ZS h&c]mvtrvt nur}hu?pwgx#ogS~{pUl~o htr8ecgY^Ore`\G}UdYтj$bd{d"_[t^[vb`wjedt d8`d}Y~PUIIND=E]H>G$K7CDJ I?GFn>E]BF{JBB^YLdZK[S7J7\KTMl_PseSPweI~niJ㏠l cu}У0p#k,QčsFthJm?JZwA\C(uWAmREfMvDsXvbVLdQ?Bp7l!Ÿiٿӛ.lo֛p_nmgkplHl(hAgnQrjpl/(p9f)qE r[>zmZIteHRypVzqMGxkH{}m*Mo6Yxk]zney`lNc`vpb[|wjcyu_Kvwrn<חBwT4>k~+~cq[{phLU*l^rughxJnΌ7sgqnN_}jLVtlbLnm"}9o5sh8{;r+sy]׊oQ+i'히{@j|&{{|ۉ9pqt{eFs~jN|։{q`s\rcux]nWOT]8|AFk%C@HbB'AU[CDe\z@DBaAEdBxDaCDebBCa EFaCIEz` CGA_OBI]_xCEMjCDPt@MDt@Ms@Lqx?KpD@JCt? JxcAKRyB%LrALo^DqNnF.Q]rG_ScuFQtfDPOmgALza^K_BNZ~BPUDQVGBM Z{B8Ovc?Lqb>K$`?L%aA_MaaAK]8BsIZAGZ@IE[`@E` @F}gAuIjmDOv@OFzu?Mv@Mvs@#M`r? Mp@KhBPJZ@FU\?DX?GYAoIYAI_@gIb(A1JbAJbAwKYbAKdBwKiw=GdA;KcALU`6?HcBEKBjCMpaENqwDMl?J+G`;F$[`=G#Zz~eBaOR3JH%IQMFP7R MlgNwCkfEK8EJLBHL?%FCCHW;QQ@Z]TFS^QPJQTL^M\\NpfQwgLpQԔtk}d{Oʁd{4x^#ktC^rIz}hIpNV@tY)CqzUEh]OFBjpSA[wb(HH~h\N\x;`K;lTD^ N"?UF>TF>U6G;VXE5:WG1cOi>iR]Fw)_(Nud[M;]]LAx1n6LoVkpun#p) pdBn7AknQqPj65fg%Nojus[ lgnhgauEv`>rbFJ0y"kDUBVt\w[tFVspV9pSwhTln`cZhhWXqgZWybb`€nNo=sm¾>פ߿i#r!^|4dmO~ jZKlbnilc|gR4|(hMro\6\r:Y|1Is]?qW'skv~a׏y`:v2^|=6}e~r~(&oyw_|TjsN5kz$vbts }g/ybuJ_q=gK'Z{hBZGd?@)Y@BZXA`E]C"FawF FLa;FE`C$EuaJDETbCE=bB FaRCHcDJqiEANpCNpcAGM`p@ LpHAIoByIoBJs@BKhuq@L|rBlM;oDNPqE!PuhDLQnwDQuERCo(FQi?@NvfAN6d EQ[ GRTU]FQWBXN]AuLbF_V?YE_@BF_JAF`AHfCLpDtO)w@Ls7A+Lqq?lKo@MoANj@J]AgGU#@[DW?_E]N@G_W@G_^AH`CIb(B(IaVBJ4_BJ#a@DJ,cx@KbALa@1K^=G_ABKisDOpq/DNrDLpkCKfBJikBoJqoDK{mCK[i?Hb=H=Y:FW<~G[;E[HFe =Hqc^?JdL@jHOa>F]yJW9BLR^EZNe'DMjCaL jCLdCVJL_B)F\BACb??DfBL/kFRmEReCM[CJU5mMOMI[U|eQ|8|.l3d5fqٗx}|NquV[Mgyrω&}}ly#lzb kIlL|pW^NT PiG4HNSUQKje^HGl\If3UNr\VLp~qX.|zd,m$aV]Meicg_d\FH|JEcOQ[OzQRNVUPd]X`fYTNN?S[[_y_?bb`a\_yZS h]VPtjXbzs4l{Csnqx=qmEne(g+g?Z6`neW7_p~bx9nawibc8VYf[]m`z`4q1dgEe[YIIJ%;jB\G^@BF MGKxPGKRG\IEDUK6ZIK(7JO/N@iM^LFMPJ_YLNoeOziP x[t'aOh6|ҳ֝y)]aw{CnvyKĂ|n>Ivb+Bt]:Bw^HsZERr\ EzzgVJWonR*Cj^M`yesJlVH<#T0GY;UE>cO<w_Hq[YF@oTFjQFWH->ٕi;Unom"º|pqc l·Θl7PlҺm3ofnixfM:oNӑv#t璸jHidb`wFwb@tdzK{kTpX_%uC[vvOai:w|d}o}Ytqa=O~ld^WiWWWoWSv\Wx`e)VnmH z}WÙ9s>xWhUm[(Jn]t_iG|,ƅhqHbgzdN{lw\Y s$j~ss}wguipbnVɔ}C^8;ry"vqMzTȨV~|Ƅnmx{Ojnyvs^p{Zpq٘vFp{pT:[n>@_W~?@X]AD\8BAD_EfD`DFD_DuE_DFL`CFp`EFTcCcGcwDITgEEMkLFPmBNoYB LrCJq~CKpJBJq>Io@KncB LinREcMuC4NawB PuTBQrE\VoEU`n[CQoyESkG$UaxHrUZEOUK@JZ?Jb>KGfu?cL6fBfNifB?N-e/BVNe=A:Mc>Ga@Ea*AsE]B[GJ]C!HdBICnBvMvA NFw@LKu?Kq@NApANk@gL=d/AfIJX@0EWH@E^@F_?E!_&?AD^CEa@FOaAaL^AK*[@bK}]2?OK\>OJXP?hHW6@HC[vBrK`?E(QZlDC Pp[E_NmmCKlBgJ pDKtyELp6E(MmIAJf@I]Y:FYIbS>G`9>Gu\l;^E+W9;FX8F0X:KFCV8ERk8E,R7xDQG9VFSb;GBV;=HX>;IV?IX@sKZDN{_CEMcSB1Mi@BL9jdBLeBKJ bRA#Ga@Df@&DiRD,Mrn'HQgEO.Z-D7KCRDHQ:fSUYh+ct%la~ݽ>2rB^(jÀQPh8pg)~5[gxbN8~{oe$ Cji5x^)y`I|"iU{fr(ce*^TiNM(N\SKq_In_MncZ߀coURcd>|C;ipZ~^si'N\NNMPQNXVO;b]V i[_VoKflY_WIX#]#^]b&e]fk)nQkccoa-h]^k_Y{erBk|to{trqhWhiZU]bmbyXqju3iuzSizwyjg8YVbW^j afGofh`wZ&XKUMaPByGJ1MOPPLP^SKNRGH'EpJM>D)I:EHX>OLHGSQ'M`sZMPjaN|lbQdsa/cjV+юIgDES_Ԛ^S0v&DxKxK{mGw,`@*x`)EydGD|hHւoJ rN 2lvJ{ h7KxwcIyiZTDaaP>DpUJ@ TJQ>(fROBz>eMy=c!MrXoG~i QAYIN;ebB$mfpnoN0+oԡ(iMj8lQsl[ftjÍ~dy2j~c&qNӑvSsXGlDP`܌#vHu`2DqdLv~h.M}jL;l~P3{mW+udiYn`PgWKshY@=SI@dC\A-E^EF^FGF[G\G]U|H I2UEEGW2E.G`DGHd-FvKegEaNdjFQn CN p/BJr0D'KtXA:Kr@aL}r?BKmB~LlBLrBKzBD`yA0EYa}BxFaAaFfB0IekBLrBOOAvANxY?Lwn?M^w7@bNYsBNziCK]@EjW @DsZ_@TF]n?ES_R?|D\a@B;`u?DgaR>I6a?K^>J _3=H[;HUy?`HT?nFHW?wG]/CMiAOqpCOoCLpkBKsDMvPD,MtUCL rCLmPA(Kd>wI*_=H`Z>EaVE _>OI_<#HR^HX:FU:GXW9FtW8mD\U9EjQs9EO8DP9GUr;J[g:IY7>JXW?JYGALaBMeCeNg@LgSB1MiBKe!@Hc?EHvf`@H>kzBKHnyEYOfosFNdBITB5HLHUMLTI/Rl\ht&o]tY\[{gVL'iy!8cwxhuX!m_~M<`[V&I}a*T FpR_Kfl:`NGvmbjg.iDMuxƄ哧]Xi|Wx{qW X VSiOOLR\WLnh_wk._=sctj[g^Sjre1c*oops.tsOuplPrdfW(ynMgo}8t6m"{r)luuBj(fm ^{[Ktfb {'msᘹoqmapOa~USof}\di`cc\ˉW|S]C@|QR?tBZY(AE6^DH`NFeH0Z[HHiQHH PvGGSE0H\C-F._BF_UDBMifEQoEDBPoB~LpA0Kitx@Lv?FLua@Lo@Km:@Kv?2K|I@J{ ALrwCUOrt D"PpXERCp6GWmHUhHS,j@GTk^HgRaiGPcCaL`?MJ_A@bMdANf@-LiBMl4F:Q(jEMe@4FBdBE5fA(DcqAFd}BJIfIBJUiAEKyn? J+t;?Ky]>MO}?NzEPpDLb,BzGX@gEX>DZS>D^@E_?D<^>DaDwVZ>\D] ?HeAMnBGOsALtu?JsBCMFuBeLuwCLvTCNOsD)Om\A`Lga>pI_GVcM>Hb=GK^>-F'Z>&H7W`8ZF1UN9ETy;FUU_9C~V);FT&J\'?Kd?}Lzi`BNi@Lg}BLgCKLf@IeJ?FIhzAKnD PUrD*Pln;DKbD@ERREGJJEPI}K"T_V|ɂ{fzחuqeQ @x=|>q6>wr8RmIA>b NE(^QnQ]vfўO{µ|Şv*tԅGqSk)TI9q[MnzYbEm_EkZTFmv\!LocaGNtkZs?k.lޯzNȍd'b2[uiNSUTTK\MN[T!R1Kg1aVX|l"]n݈Q}kviR]*i]]lo=fjsppyul{pN`yn6e9{'qh\zrAhvkcVtcIcyqmERrآxfw;pUg\lQy_KT*Wc=>Zr@#C_BED`=DFX$GIHKQ\HH1RGHYGHZpFFWB$F\DBMh3GRoGTHoCnPDo@Lq?'LJu ?K v>QKrr?Jr?Jx,@OKq}@JV|3AL{CNywDOp$EMRoAFeV>l$GTg2IVkFSNnGHRmtHQjbDOeAqL}d?KdBM/ccBLfEdNjGOeYFLbFBGeADeCEc@3EaAHbiAGc_A GgfBHl@Ju?M~E9^>Dbp=DgL=\Ede~?Ha5=9HZ+Jg>0JYl`>IlH>H0e~?H`=G^0;FM^Ija?Kj^>1LikANk4ALhCRLH(HNnKK\`Pj]|Khq[p_wF~Dr2j3OBl@9md~TJPw`MhTEJWhKD/XI{ydG>\mKnH~hJtp`LNnZG|dEnMFsG (yUÐsBUy`JkTKjrWVLjZM>n`MQoaPm`hOw4nZ{c+xO_Wq]wlb~v-n.r|$q__l\O<|Ul`{n}suvƞJSϞ$sz+liqhINuaf}XmCymmxJo}s+zOtsr`0~`x=Dx;:ow6iAxo|5uz]ujvTq_+{a鍣f⊨0c|`U~6l~{Ŋق4XЊi{s`!cln]uHHA\ @r@`B_C.bmCD_DFMZ$GHU>GJ_9JMtqnMN@uGHbCF[AKdFRm+FVo}CQnRBM:o@JqG@LKu@L:u7AKtf?`Jv@KyALDz@M{(B$OwCO sOE QpF5SLm?HL~CPxBSNFkAI`@DVA2FVY@ZE_@D6a>D`=DcA=Cf= Ec=IF^:D>W :DSO;DWT Lq @J+q$?rGiT@Kg=:Ih>BHSmJ=tEf?Hc9fErdJh>CLBl>iLiJAN$iJBL:iWCtLElwC&LiXCKfAJc@@0HenA(HisAHUf6A|GaAnFUGLKrE3M&NDPTcidWN܄Ѩ&~txޞz܆9X;m\<d7~PsY2aZOt;zWAׅ)p\CmwQۡ[1i13gƝfo#֎tk~i>j$V.I^MAcjYHb RHdyVP#vh2X0u_uEހShFk"IujrA~Vt\1>/]NC,J!F-HI]HKNMQ`WS+X^L{?#}k Hz6?q%tomIvusb u6_u0jbrih#maai`]^Vt up1} xp:xjhZNhwma]oe\t ldMvmjt)i@bQvh_rIdZDnxaPpiKa3Rf[m;cunzT{"oq}n]lbOcl`P"xpdQr^ M}jK-~`!~kv fwU_|ZK}^[J|#Y|YZ|w,WmTzaMnVIkiS}Ba3P>[LT>`!N?@DfVQ=Xs+]=HwOe M|bjRq[]@J^NDWVG~=^I?nXVIւ_sVf}uPSjbvw[)q X8xQGW[֎wR]rW;d0QP>xjTFq\JwhU\xm7Zvi(Sx$kQZ}lJ^djND u.K1UyXGlsOxuaOM}n7[LLgTJhY^Mp=btPr{eAS|pX|TZ{>Xun\rKbBzEhʏt'l>t_tcR}m^wdzio/΢Bׇ!׀?bu=:qC7vtr`uk~}uys;=yላzaneWp]K}Tl[zArf\|}zpyoynvwiY}{Uh/jWцti1=faYkkfvE؆Ӊ ÛBݕИvuzLKy[B@{B[@+C[NDE]JEF]FIC\ILiQQcj\|lliH"Mh@!IfD3RaqDVsDE'RpxC"Mm+BJoXBKs@KsAKswAK@s@KpALrBKOw@AOrvnCOuEbP;srGRoo:IRiIRfGXRhrFqQ)hE3RFkE'T^nE;Rk?ALe?Kc]BM(hGALeAL`?K_d>Ia=G}`<E^"?Dk^pADDa@BcADdBADb]BsGQhBIpAKLtEQsFP]lCkJe@0D\IADw]|@CcAE^e>Ea=DcmE?e#>F`8EBW6@R;WET:EU=#H9U?J[J;Gb0@TLmBO|t@ZNu>YMyw=JK t?JqCLuCMyCL|9CL{CN\uB@NsY?Lu<@JBr@H k@Ji=>InK?Ht=FpAIm!`?N=aRHAuhMrcDr@\CsRWPӔtؙ_mdu4d?aDUFRNEO IF\OMaTokGgl(_JyXmD3KpLnÀmm/TŎk)Czs74gk䂡^pdYNqYe[g]\gI]dGmyj:f }[=%+NjoنvET՗fDq {l+yo8isvjpfEuhsbuu2e`tb[5u2d,UuehUqp_Gٍ',qtz+b[l]KFmXvIiRFs]"Fw [FWgyhЌ|\{V╩VٙX }W"y)WqhU~hMnX@G bKP5Az\M;?b}PGDcJPD`5O9`O?i^WHzhUPCzeLlSVG^K]A`X5F?PdPXEwfZLyMm@hYudFo]v2c"we0^~PflD?kUECWiZ~M]hc]Pr_iY|gs_~vWcU}nJ}i,rcUӊwW;~`IuY|>lQuc NJkVKgsT9Ln[]MufTQ}~oYy\`yU%s2R烜m/UK,ycՕۉrɋ{f%|YiUxl\r+\{{cnuxC9L8`Uȡ|@ˁs7Mpkgӊv?{;‡~9uzhUxl\vwpdD}q/%s3uwhx#vfÇo@Prn n:9uzaكÞ֐ 9c6xv~M|N[G@D"Vh@EWDC{E[/E(F^lE[I`JpQq`;b{\JXlj15hkDNAnDQrE#UtEPoCLm)CLCoChMqAKhrAIs @}Jjs@nL>pBMyoaBDOr@OKw/BIOxCwOMuNEP8ryFHQmGRijFRiPDRiETlD{UnCSmwAMHeb@jLpd@$Mgg=Ke<7K"c=nJa=H_?H}_@+G[BF\AC^@Ca@pE&c@&Eb(B4Fd@PFe?AKhEQ nEeRm)DLgyAF_@UD]O@Bfa?DbL<_E`<4ENb=sDd?Ff=Gd9!DMZ6UB T27cDS9ET9ER<_FVL9D[^>JeTANMnN?Mu>LvL>Kr>Jr>qJuAL{lByM;}*BLNzVCOu@Mt@MxA Lu@InP@I!kO?YJzo?JAt@yIrN?TIo>Jq<IDsE>eIrS?Inp9Gmz8dF]=HMpA>KOqAN=]ANZBO_BOaGDObEP=f8DNjjCKi=B HbB H`aAVFdAE cBHw^ FLWnJ8O!RLTW/m5r nwޏznΟNo|LYxx:lxuPuhZzkpd\69vQrk2ĉg+idN,j:vzS{o=5nVRddQs//hnVACQXSH:_|KT2nS7IsbqE3XtM{.nIp^J4pWJTjMnUe,zǕfÄh3au6nMk[Mg]UR=wI|eyl\L̈yre^[t-e{gWّk-{;pm!b|oYud ZYf]fh)a]ImcǪS}2]jit{Ƣŕ[nPxqz$ou]ibsgevufTbkr_Xub'Qzh@V xoUp{;뒹q~z8ZBrr`AjRCoWGqO5mz\VdF2jւaTM5TߘD{Ux2T tO}eGLnVBdQAfT EqN]J}lxVAGgeVCX#M>U%JA6lVIVr\"G/s\ICfdQEWBGA)_|M'CmWIo?\O˗(?ˣ䚊f{ }cwt/ rAVs?_K2q\fET1lfWnh0Zw(qsa瀧|ox,p\xKc̈y`su^[eoSxgNMo[O{iqUpPOnE]QvFhX}rt`1d{acE^?wiU}fiMEqyh8|bHqmTÀj(U‚*k:xgŒkbU~?~Q!hg{z88Qtuzovvqurklo$m]cyj9Äq׈Yo1pjs)4 ؃4Aot*KPe>EX:>DVBF[(EH`EJcLvTrX^=GZN5RmmQ^HQpEZQ o FRpDNOnBLl?KCmAiNp ALUr(A:Kw?UJQy=Jt?LFq@(Nsn@NyFAN{D8NxCuNuDOsEPm$F-RlFSmfERgmCQnnKB~PjW?JMd>Lc-@MfL>~L+e">Lf">oJJd?H`2A$G_BRFX^BE]A-E^@ EM_NA8FFaBFbmEG{d_BsGdJAsK)eCWQXmCQnCOju@uHb?D_N@C_AiE`Lov@Nr?yM]q=JYt8A{M>yAENt{qB*O1{ DOAuB0MrBLvAJQu@ IpA0Jl?]Jl{>uJpD>I-p>Jp>aLr<`Jtk>JNx>J)y;I@w=vKm=xITBKGbUCZHbA%Gb@WE__?IvX@LUcKQdQQZbwT{uyulՀJyjC`qu쐽u֓<{dr7}ns5wspH=qn⋌Cч'm(/c05me>xN㈙gYt c׆uWjtYVsBbN,^NeLbL3R}Bg8Ӌ|~GWُ?O_qPu5cNrbPHfR5Fy7hlI vjIuۊ~t]Xro]{Yra|ԑDxzkT~lKQyAeRjlTODs_Ӡ^ku~̳}򰴅eefZXrf]{fjNc`zqo_S뇜qz&BuթRbL[wr zfmKhqcoirJdda\rFaVu~aPzgOTnzlaL }[@M|/𝨙">t|<]y`|Is^`N{iLۇ)vOd}aLEt\9pUSY|~Y{V-tJz_AhjR?jhSzCl[HtaJucFKtdLdSwDORD;VI=b@Qc=o _HhT:I8YKF gSIs]FHwUbIez/XJS~I%ćӺ%N=WuŁmWF}pXtl5VYqdPrg Zhzto⋮[Uj3agQ~Do9rPZ`u?^u]{iNq[Npi]KR_vqfdR&zdl[xm`sSmgp8Z|An]3evgq[si9KSiLqY%vf^Ɍe}Pb+k7Syei.y'#pcveaŘjttcmE^jxnۆznO*}c&c>ؓЎ~Ϗ(sKd@JM$b?NtaCQeDPeAMed@K0eMBJa!?E_>;D_@E^A F_?BD_,AD_APC]uCDaACH5e?JggBOmD]TjoESSqlYEMg>Cb?VD+a@E_=EmaD=E6drJk=WKs?_NLr? Oq>LvANz(CNzCN{D#NavD|M tAtKAuBJt@I>p}AJZl?(Jk>In=(Ipo>OKfqTLur?J7e5DPN_BNJX)=-K[T.ENM`h&e:\|wwoo7mawqBa͆vaj~n,Ovv?od6dd\-o󟍒~M{M}h:}e4=oE$u"HɈGhePp{nO{jL~odwclc#v]?<ÇV5rc5:hnNls`MudTLaSFK6g4UEp"Sz#rӍwQ#(eHtjr”o|kZzeDG2w_IWNJ8B}nrXPzgQ}0rؑüez-Cfmn=^0W2f.]dochgumbmq_}Vcyp;%߃ݳ[dxတҊ;q|mi4n<[6fp]D]qE`-TvbUyb RB{!fLzl;C'~&`-ۂw=^py\Aq?^oorK;Jz^.vr6_ije_Aj auLKgnFpXDp[IMp*]It`%LudoMtadKjVHWId>_SF9VL;eTEHneVSJaP{Ip]LycHwojIǟ?lҍvpX寨Ήͳ$P@jM[Zހ~dC}TpKr#aD>mYI-w.j\f~pF8x/ykKwckLnmYT|bsRybIcvd'On)YxvdʎƒySu|t‘nsR!yRlr\\~hN|anIy{j`G{-bI*l/ScHv^C~jɒvFy=cn،u!_Uu+aÈozksclUn,VSyze˅Izh(ˁv@QӉLj~A&{vWrYymgxpMeZyx{Ew*y(1Lo8vaEz]+ZkCk{^}t y팴L1]peyBHm`=AvU1AEXBHdNDIjfEaHiBKPJEeMKcQKJfCEg?Ho?MBsA5O pC$NnAuL~p:?KKpAOp@(OpqAcN5sECGNvsBFNwtAMvAM xB`MyBLQy#CLv$NxVA%OzCNyIDNzBjMNzInH|qi>Jvr7>Jr?Iu=IRx=RKgy->Kz<}Juy?JqfBLo@LIq?Mp;Kk= Ng>Njd@dOe>L9d?IbAEaBF`BG]A{H[x8eIxLfMH|q PƃNlPvnX߄BlIxi ~`pxNT:mŸ}Ċdi~h&K-e"TJy]SKsi_+UdYhN/aBQIrsHho NxM㋬g~F~P_k~Fj L)qYQGnZS>~lrE6LB22dgQQn~j^ZY|gGq<9@߳NV&~)n`}lafQ.ZmUcXpo]TZubV;xb(Tv]Nq^Br?QݚٔYA֞ w; d~b̈́tYQ~i쒀z\|U,k؃{lqet){}e=lyVp^OycIq[HEtc_IK}wTdJMq`IOlXGh&VHZM CRE[?9RTGAWLGe`PDk>3GMsApMv6CMMooyC4LmALr@LsAN2qAOqAiOrBjNus2D\NuhCLxBKxDM6yCLxB6L wsANv_?NuABQfs(FUMrEF|RqGQmFOeADKT^Y?Ke`>-M`mE K`3_M?\F_lA9G`AE_2A[E`<0Eb<HTe>Jh?LpB0PvAeOtBCLn$AEH%e=@D]y>%DPZ>ODW0>FmZ9DaZF;EX<4GT6DV9DuVE8*AT8BSP8FsT+;;J_ ?,Mblv>xMqx@Ox?.NFyDMHuA*Lux?M}>Ln~>&LE|>K uz?K s=1Iq*>OIqF?Ioi@Ipp>Hp?Jr@cIt;>GIx>Jxz?Kx>Jv@JDtBJu%AJy>K@xF>Ks?TMxoC>|MYi>9Ncc?LbIBH:+>KGGl`mY>|PxȢԚzpgFcV(K.^PIa TIzxucH75iaf`!;v{{ؒl⹿z%L}qdrVSJF%QHEh^QVj cVSMbHk]`V:q^4djgs-a_nv^?\WEEsWJ>^U`=LB7j&]Y{?sYk= p/G~܇R7N^zDʀxkumv^ZjU]^u>mhjxpskukcyg]ՅpaԚ(uʪ3æt$:obq\dP6QfwPP6ldVsQp]SuaUw;cFV{s^KkzZC{tVN/8k tΕSꕴ*dNoM3pxZ*ah2[_;ӄ]~_atIuƫriO9xWunQ~gLq[xGtM`Im@P{wdGlZDe-WGZxOFzQDAjNAAR&GC^Q`JUgNUKuva=L{fL+ydI Z#4H:Q ©"Uko /;Cː|:xcY&w3j@JoKfN.p,fTRNvQkVyxkPxhkOfv_0krq͏ vAuL{Y=SΓPꗳmڑEs|xi‹z k|\kr|\P}iX+uie'zmEgm_˄apW[wgHyyEcp(sckX^pUuX,|c0Džmo~ljysV_0g}nxYkvi[ri`}wqczڣl֓E0Ӆ[^O[NԝM-ݓVuɣK{36xƝqɏ-mɗ{vGVg v/AHJ4V]BE*TB"D]{B)FiB]G^l+@DKiB`Fj BCgCE.juBJpChMsFGNqzC4Lq BL>u4AKMvkANs@4Nq@pNtYB?NuQDNtaC MvCMwD*NwCLw7AL4x?M%ztA0OzDKRvFSrEQWpFgQnFOgi@Le^<KMeL=VMcC*Rb>I%VcDRP`5@Mb>Ke=H d=lE5b>D_BG_i@`F_ @qE`>mD`>9Fc>Hf@IWim?Ho7AL4xDOzDKrBIf?E$]@6F\a? EB[h>pEFZ=!FX< EU;DR;FSx:E5TA:DBU)7HBWz:IFY 9G'[95FW7*CT57AQ4BOg8FT)@J`dBJrA KFo@InP?Hp>tIq@uIs=#Gv>Ix>0J)un?Jr@5KoCKqyC%LvAL[yr@L xfAL u?Lk>L`@J_?Fe{@4E$i@/F eAF4_AGH[@fK`wGR*g4N[K`Phqe~yczvsMqiQK<6]F7QE\RERICLN?>ODb=1^Q'F hTHt_LycOtA_M-3y|?wUn#ݯ L@B)ψ|ߋݪȍG؎uBp`ȟ6y5t}eeyxob]ureAOrcKu hM|rV*P{bbr씀ӄ=>4R@b'Jې~?7qňvc-saiw`xd|[s^~@ts}o̅zcay'rLuHh&vtc7j\mg̋Mr/m|t:hr6{q`|wmIs(/gIt爸|U҃V\Λ˔9RҝtDlj}Ъ7d7kQ ƭ$hܭ]XAinބ m}YeEm_}uGP`DHU~BCHZCEfHCHxkAGkrC8IkCKG&jUDI#lpDMnwEPr7G RrCNr?K>u<@LwAMtqAlMlqAuMrBQNtC!OsBNu#CMvC4NawBMv@AMvAwN=zrBOy\EPewFFARt5FQrFQq7EPnB OkLb=tK6d>Je> Ge?GEa(BF_BOG_@,F`@~Ea"@wD2d?D7hD@$HkAJo:CMwBDSPyB6LpAZIj>Ean?%Fd\?E]Z>DiX?FW/>E\T<)ES:DMU7BV49BCZ7C^8Ga&:xJc9FI(]j7DT6BtQ.8DhO8EQb>G2UAJ[j?;Kte?LNnNEKnAKSl@Lo#>Jn{@}Il?cH&k>KpKIqBNJmBJqn>Iu/?Ju>It?rJw`>Jx>tIt;>I_qEAKnVD4NEr5CLsBMx@LyBLx<6Hl=\IcPADIvb@Dd@D}f@FWdi@F^AFW'@JZFPdiS] cgmd,[tyGuz틐!seGL:=:F7?zPKJ"fJaEz$S0^JeбңՋ|xR1`SXIPUKZEMIHyoeeEzɡ4ig䙿y$xjx}7uj™vބ9uwePEEK@AЉ+uGꛢʎwbbsU{dC czSwJ'pܓOiQU{h{`=vWxeZهvW|cigVpYkOhTDtxgNHЇt:V:wdXGiUDaS0F\nQxISJ@CQ>F>8^P=>gS|Ep{YHu,^Nr]1MN|۳“u+榚ѭi>x3mݍ_jW}S XՋ1IquZzQ`t=enMBkXGl[XIrSeAL(ynTU &rs: {k+kĜ߆ӛΥؖZ~$qѕ~9hޘ^i;tMXg5g$S^\O |Ag7}!~s'|lDl+mmWfibGpYwȉzo]Ԅzܚ3񞢉\-5GM9`wHo ;R'd\@ܰ*l"Ǫ0Z˩F١ 3C4ޮݗەPPemjs+LQd GHTB8D)VBxE_CGheCIxhbCSI8i$DQIjgDK&mDNOqFRJbBN2aBO|`$@ M]=K \?LX^@Jb>yGc*?DaBqF,_{CF]0AE\l@Fk_@#EbADf@G:kHAIoALvI@ZMdy?LJv@gJ"or?"Gde> EDVd@FT>3EV?FY?EV<DT8BUC7;BW8D`8Gg8Ii;K`j.jH]oIkA5IhAIim>Kt>LE`?*G%[ >JWHPaQ[d`jgovidoΌۓ.C^y)WSkID I;?rSRQL([[\Kn`F9trW!9i̟ʙzԂi~j_M*d[Eݶ9‰l]tq \.nZKgT"Gl]K%odL~wd؎nӦcޗ~ןwfd^ {:ht.x}}ʙ'C|M("ɄKiezj{rV$mxdqJi;,JrGrzdb~-htϬQ狤L}R0~ozvM}cmUP=J@.Ө0{5Ňkx貧xvS`]vhyR,VdnDE>U/BEUCH\\E0JaEyJN6v>MgsAMr DFNRtCNiu:DGPw1AFNx6@yLxBM~x8DNDvBMTsCMuBK(uCLKtUEwO(uEPcvEP!tFPqCDN!lBLg+>J"d@Me E3PeCL(]@'KuV"A L2YBK_u@uHb?\E^QBEZND%G[?BLGv\?0F]%AFatAEc2AFi@1HkoD?Ju:C(O |o?L y*AKpr@Gkd?mEUIAGZSy?LFvV>>D]S>@C2Z<fD]=Ed>Jpl>Kn?Kip|@QLq>?Lv?Lav`A_Dh>Dkj]?EgS?FZ̖;G_TZKq?SKF>ojXZZ[M[#QF`TGc^aJ}~a{jJrwm)]qpiOCz~r3XxqJ=}gDޝ m(9}!#gFj\ɇ}{cxhHaU}Jc;RLR>vUrgc~s΅/_qiِfryL`=~{jxfr䅦rׇzm ĉo3~4̙}j0bWSqh^rn\"phsZh[dQVHvBfcNEs)o~ٰ"V~6ف~{YnVx ibyme1wnkwbohwdf[/LnS񪽔GW{k_O#RCFZIwaMKoTLmVX;IbHPBcSODZ'I!;ZL=\?Oy;(dZO9{d?Ik} NdP}z͛Ӂ)tWiW{hUWS# e)!v7c{_1y<\5}iYF:m~VGgR9EܙDžk?vBÚwqk6x[ I 0R3P_aZuAmhˊV{@3TŅ_on`~Oz_PDbSH id_ISwncMfțy9םA!~ܮ[^~܋4]q|6(n^}hB?p횇wnxǡ )z?k?O3yÔl~ cRpD`,%au4jYi)CloPBu5;~bFS.Di?y?߱V󶦬8@h~xѓFts.wx`_lG\fh:|qӍԮ6>_ˇ})LbjxD?JZ=fEV@I\CKba\EXJfelC8Gg.B6GlDLr]GrP"z[HxQtxEOtB/MsAMt:>2Ms?yOs@lOGr@Mt=BNvJBXNv@(Nw@LxA.LvC%Nxs:C NpCHNwr/CNMsVBL tBNu6EO3uoGP-sEOqpDIN`mBOMg>KBd?MfFDQfjFN_S?JYT>IZ@J^E@Ia(?G'^AFYBQFX#AF[@EaANDdZBDdAE@hAGl@OJqCwO\w@MsBMnB@Gd>!DW@GT >FsV5=}D^=C;](=ZCTQ:CQ7{ES9SGDa9JVq9bKr;oIl=IdeV9B?Y;rFYoIWNOCh=Cj?Ff@fGh^??IZ9L[\DP~_MWcxkp+lVt!Vb-zrf9rT1VE< e^Oꇺt8qkoYoVTNgBWKPEUBLEgUfF>zl>Zs[mdGm!gvV|zsWE{qB5vASw]9LIΕ9x뀆XByEgnzAj~ rwhUCgTL6svup^B<~rzqXv~Nw_izM~iBIvVBu{VlyWpiy߅0qc!W~PvdTNpdSxjaDRtl_hQ&hZLWHcUD6WI4U^L5tPY?D}3d󘘈Wl8mӢ]l뚕N|1qdx+bO1}s\zv±*xϚ\Kzg^EFb_N9mR_?wXEHv[ZMqYI`sn]KI|hK5)pG~i?v:`@qmZ,EmUF^|N@Cw@W%Xbep[~>k!n*Q^`ճыp>͛@1LsضOt1XFgvfi]OeXNgN]lJJnd6G\xiGÇv Vws6 ݡIn+Zza%ٱ|ih \×wu؇]x_iJ g<]1a6tݙ||T} |rm֐ey]VCsdI4c<*N\9[6"Xaj-”nM!Jv.fG.rEɪljfXw~Qwmؔc۠t \}CC;;u9[Cΐ`Ġđrl5 ە~Y8[WuQˆIQ_:iCU;H_>JdBtKhjBI=kCN|qAMQtBLuANuWBOvj>KxALZxhAMqANpBNtrNB3Nis!@Lt@0Mv%CNt^F PbqENpCMnKCMg?ULaY@NcPEQyd?D-N`=H5\>K^?OK_?J` >H9`;@VF ^eBE\BF;^3BE*c?6@eB6Cg.ABh;B F"i=BoJTj@dLo6ANvo@Li?Gb=D[@qGV2=$FTd>Dg[> E]<2D}Vx9DS 6EpT96G3a9FKo:Ip6=yI n>Jk:HOb7FW9ETL:ET2:LDU9*DT8CT4@S02vAQ04 DQ8DVF:_Ez[G'JGY=HU;PEpR[;\CS=EW GXl@2HV>gFa^T@DGhDKkaDnLjiBzLq~B(M{sBcMu@KwB@bKPy|@dJw>Fk@G]e?Df>6Cah?E`iAGd;BGYBJZB"O>aHOW~eOWB`3bY)Ya~j8ozYsgvq6^YQ`'JIN:C|B=ggU[}umf^JWH?TEATF?U`SKvnf_~mhz]jsi+NznC}lPEw`FwsM{c\b"7yf9v~|v_}k.o^wGRFI1dMWN}n\OWdInX%~h'Ak`Z@[N?eHN3:oZ>6}Sff|q ^zeCdkEp{ dfTnQGI;]=M:hSh@0hR=n]U:/~dEfHarWPg|u\H{Hr}emXrX\E lATze՜mmxhs^}oLhT@fN ;dWM:ehOGAfQEAqY%Fwa/Epo]FkWrEE|hDCr]ZBmVC e/TRBwYFH(DFÀ^Ut}o1gBSxyxӗ&Ё:l״0A;qas xzf;vlWlwc Kh@`GlaG3vgK~jޖ\L".hLs#6V$o#ީgnFo/iLk mi3eRu3Ido?R7q_frX|y oeovFY։g(Hۉ6^@:^1b_$JPeL_cl}6ƈ[jEW~ڰwqtNq {g.ʌA}7ށcnBEӉa4ad;0 k25sGLfBP|g}AFNe>(LRb >}LXcH>LaO>J[bV>Ib0?E!aAD^=BF[B Ga?DepBEPkACmCEjB}Ig?@Kl@Mmc@K jr?Gf>Dan?F~[?_FVANFX ?2E}X;CW:DTx8ER7G];KegHV9DU:EV=iFV>FY>(GRXEax>)DdZ?wF:e?FK_dBG^YODK`ESiYI]iLPjW_QRXMPrNg^vl e\bNHERG-rK[FEa4f=K鎞sĢF4ouX XI SDAUBH}:yulPxcftdGjtUBYOLZGo?IK{>JNhBfIiOGLT(MN]m`XYeSNXH"Ef R1IuiXO:֬ߒ||udMdM/C]NKA]OmK pnZFsaK&xe4\zA[]zcNOg;SQ^QSa^w]vEs svVpn3PF:RG2BeR=oWA&nwYe@DoX?x^BC9{Z DScI uTӊ}dFud7M8n YEs3aAuN(}EbQl=^OrYygt frMj~TDLXJ}8]Px%Kscl7_&afݦYxʿIR|LKmBOuDPxkCN0xeBrMyBNdyDNuEOtZB Ow AyN`y@Mz5@MM{@M:x AMv@=Nw@Nt@HO#u@M8wXANwnBOv?NuX?M*w?bNDx->YMyxd@Mx7ANv-EPbvGPrBLo_AKoOAOLrp@$Mp2D QqVA_Pm&@Oix&GOh<Cd=,E_`=.E[?qEY>EVLWl:HcW:JTZ=J[>IX=HXV:EZtH?_?G]Hhr?Gf>EdE?Fa?=GU_>rFa?G;crAG__BH ]DM(dDBk\@!bU&Gq`NJKs\ }K|nxlf$L6cOB2VPL@/kv_PWto8aokBWGmdgKTaE=N>L@=%QHFRPGIuNRD> ZRcALwqVqb_L_%SEqN I>GFN@:I9G:KJ>ZNRK@JdT-LOcUvUgbZ5VsYLAmaPkG$fVrI9}s]KpU!|s7aqXaaK!KZJMPLZOHiZMoz^WMp`MtdMkwZn~WfLiNG#pZV8Pl,`\ia[mc\s`ZRQFq;HP#E0hS.9sZ AnY@r\BV|e1K@}bpLdLmoOЂ0nRjW Hkv\In_GtuiL?T{ed\xG/swmVyoco^nVeTJXN@PCD7V[IE~mXI|mJ\Gi^Fn7bEIccQBd@QnFnZLѰ9IrΓgMe|F^zbO܆PiǖUf\-SM{qOcvOP>cҙEk_^#ӫBm ߞ(:҅oarlTg`oP|kaO*|_jdL|ZDfrܵ~?U}·ڝ> ~֚}0eգ9ut{e}*[ڗwÞJu50{j~|`~ji+C|~VaZy[r3})>9k kS! dӂ^PX]A{(;g\qatLjvjmhptXZSzXe>GX'x[%/a%يj"2$yV )6£XfetpCaGV;BG]@dLlCtNsEOvbDMvALx4BjM>xBNuCNvDNwhBMfx?9K{@4MS} AMx@M+v@NtuANeri@xNrqANu6AM9wL_a=La Db>CxhM@5E[kAEj[A5Hhk>@KmH@LkANjp?\I:g1>1E`=D\~=/E]=D$\$?E\Zp>UEXt?EQV6>EQ>HS;J`c;RK4mD;&KqpVIY{>HX=I]Z?H`@Gq^>FoZE?G%V>HSBpKeVqDK\7DLa@Id>|G#fb:Cc>Ect>D"b?DheTA0Ggc-AG^@G@`3BIcBG(`BH_CNc{DRkJZ&mS`D,NBw@S]R4I]TLSZMoATL29j_IPH>"QQq?HXO S#f3YY~dcSak~aMmn^Na QGiTLIiym:gwl;mrL\+agPVq^)PTQ^RM`'TMg WL vbnN$waoJv3]GDmdREW`Ij@p`Rwq3md{uq;vhOvxXuDVI?M9D7ioP6qY: u]>|eJggP iONdjMfLfQBfTEE1jXwAlS^G(wpXZh҈wXyk`rgcrbV]q^UsWJdBQG?QNKe\OfXGaS>AbQ;VEGH:TWcIFmZbQʴ ۵w tvjiEm㒖saFo_eN_{VWy[>pSpPkrdq>ÑݮPz?u`gtNk#V9{|o@W˂$o\O'wp|U,d:q뷝z˺{޸stƔ_ Z5j杜3d hb5nR҃ %󁧶坥)]ۮ I$ KnGRoR*cԩV dn烵رӈԳjܠE4t|uKJnT{qhEhdk9T].Y%AK[tjfeW2MOc=WMd:LiM?tNkBMc?GY?tDZ@DaG@D=d2A!FFf AFeAI1j>In?/KkBMQg2@IOd>YF^>oF[>}F]>D]@FO_>REw\>)D]Wp>ES{?cIV>Ll``=vLGo5:Jt 4N\-IY =G_a?GZ`i@mG\s@xGg\o@GV9?HR*BI4UbEK\JGTN`E+NIe!@IH|b>]E=a6@EbT?(E@cC@@F eAgGrcsAFZ_QBG`"BI`@G]<=E\CO_EHQuf'O]k+r9h'|Ѕ|T4EugsO2TKG(OxJ(J3UNKmdTpu-gLtgvFyDoLyjOdKVKTS KuCzSNCEb\/Oak `Cgx`ڍs~r^}q[TJOG>nQCW5_M8`m+ZWDg"V Hj]bPoh`m_LRlESB"xs h]s֞Byqmxxs\QT`KEJUQD>j[Iu]iOhHZoF^O8?f1TIrj_M,mbY1ondZ7g]QIK`RIGDUCYg?GEecXTs*mf1~{ylm]xbeRGcNDihUpOcoU[Zr[{_r^FdIhV_VcWN_xSLgXLu`I_}gJ{bH\tZIfN>[tg.Sy 斖zm8.TsbM=hDX-QfrZTc>zU_;u_c8x_;bzbE~fVKԆ:lNpkOX~2cLjQAAeQmBe}R=+fS@jYH9w%dmLw4b(H&vgo^n_0Yop[Or[|QnbNCoI`Jvrq]}yj{lfDOb[T,AVI3LP?L5RFME lB[^R±ˎ <5yÈg,9e"]j-q%Znxw1ٓRqKk}f̆j~oOr6$yh>=Vɡ'M͓.|~t])t_ZU{aw [jv;Tӑ}`VG^flڠ:|[{Էiy~Yp`O[hxrB^p6??m@[nG|vVH۟Y t'/yLpٵ֙mUwv Tw9p͙kp?lGvEe:qVǰc4\8'vK瓬v.eK\Gn<{r㻨ƾpߺKfOS^;sޛރ,c/yHUɆa0wUSOZ& lK9U'Vr,qvJmHY\?VD$`>Ig4C;No-E6PrCiNPtBL%wCMxB\Mqw4CMxCKMxCMwALwK@kL y\@'MxAOMu@L s@KsRAKti@Kwa=$Kzh>yM1{?M zbBLylDLw$BLx,@L&z??MwAOu~BOsA`NsAfMtALvV@LxBBOx&FRtF}RpCOk?6N}ho=Mj'=MnAOpCOi@%I_?fD[[?mD^]"@EbN?Ced@VFAd@Hif>HjL@ZKmBgMg]?HLd=EaD7[?+F][?E[/?/EKX:AVGW>IHZK=JK`=LIn HOo;=H j:8GR_K:GdXIF].@#HHZ@H*\@HWH#W@HV@OWAGgRf&Xdmurl@guCb K)]KXCcR%NbcSLmaPyreRMs+hJ|rTxmRh[KxY;QFwavVJy]kUxiG-}-qPN\v^&tnn]mRNH=MWE;RH]6n^8O=4cQeF e\Lvsmf]zGlXOvSXDlj]J_Rp%ʸk(^Rv1quaLbQEnOUxE{fMsP^H=fERCX`lPK_nSMBrg[6vb{pY`fe\<\Q[|]FHC:x gJQK{3}3cc'f7q`M!eRJeSNNl0XqUr`]]Wzlf[wj-athU^MniWsJoaKDwdF5{ahiE}|h`IzdoMu[H{wlsR~gѧ]Ow֋7r sBsOׄlAwk_L;sW7z`!CH~eFm/KjSn{^8L'qfUEmUlF`O@_ O@B+bQFCpYFLq[ Gvf[r aR p{ZMMs^ Lve~I>hÏPQmq#iVWPlFOvEA;K>9GSIZDo)aS> |𳥜;z8imzhPvIARai^ԋm7lKyWfoPOu1tVYƦ ܟ©}F<}s#Mh[$_*gJJ*}v̑映t`r-{L;K[>{E]>IgBNNo#EOs?FOtDZNnv3DM$wxD N y}BLzBLzBkMMyB6NxALMwA%MexBLv@Kv?VKx?K xi>LKx>L zU>Mx?MvA*Mt1DmMMOo>M[q@FOsBO|n@Jd(?E^=[C\>Cla?QDa>@aEQbA1Fe>GjL@ZKm@KKf%?Gde=Dc=jF_;=.EY(=CW@EZA9F[?EZ?EZ=E\Jw)=PIv>H`v?Jq<H{b;GVO=IV\;$JX= L>^!C[PeESf4B}Qc@'QfAxPdCN^n?NIW:DoW:'E\=HW@JV@IWD@HU)>(FR>/F TAbH`\GvOjjGPknA$H ay?lD]_?Ekb/@GaPCbK_ B3IH_CGYcbBFaB{H\SA^IUDJ7SCOUNHUij\fosqT|XrxauтpjlVB\Ij>mVEMl[LO`ji[Oh][IrikL>{sVtiKj^GaY]ROHME9B^Q;Hq>x\XOy<bOAdj*\JwlTmyagxbLqp\Iud;D{Ǫ f obK lESAErW0GoLWjFdVR;D\OIbHSMqc%PvX[KՀe}lr}ev\ziXSDzB{Nœh][x,b|mM[Er^ZiZSmn]0Ysic]\w$i]{zm\m`3OKqQ^GGvewI:nJ{hWDwOaFxh`L{dLDmKPwt= ] ڜyr󔁅dP~fME(rU6z'apA~PHk\?dKdpCuNpENv;EOwqDMcwbDMvCNyALF|AL|AyM+|BNzCN:xALxAZLy7AL4x?_Ldx?|MSw@NNvAOrv}>Mt?Mu:@PMuBTMvAPMw@My@MzHBKNxCNuuDNqEeNoBbMqBNwDCO{EN@z,CrMvYB?Nu7AMt=LEu=YL:u?NtCMPRrBFYq>EPWg?:EY A:FE]AF_>AE_y=D];*G(`=Kg <K?p;ItJOxi?It<HLd=aIU?JToKc'@MriBsPiBjQh'ANPmiAOfEO`@JX:EVr9EXh>J!Xs@L,V@JV>SH{V<*GCU:FSBI#^CMlzCMLo@,Fd>BXai?Db@^G)`D&K`bA=H`.B8GalCF_DH^CFIWBMbOF#Q+U|K>XjV\,cpR`;cQlE\:\aiU]\RfSTCE[IAjRLjp[`'UpObTnbIsjYJti6NDk_Ffr]Ek fNvm`ԉpuYkqCÃnEuStXrhPVO'MENG,G QJG]RCb4S>QkSFziNacelO2~Dzf};kKwv^=kptٖzgq^eM1gSCfR`EmcaSGWMEb7RhGCm[]Lqw[c2{9=pwcNvfH?fxV 0ow7ZۀrudzVego_\mM\Zr6_*[n]W-sdV;oa;Rq)afJ wwdHuocNj~YgTHp)UBrV=J|eiN~iIhwV֙g5ydȫ'؂Vym7yЛ_|rJYxx\/>F=,8K?8;R~EY,}W`Vch[N|V'wPVs>Mȉ{u\TCysVUuV@;{Ot/WBmԒVy}z'qj< ios9m |c:_ޒdJ]vAF@iE}aFuHVᯪj7n vs^tْo?&w';wkZp֟"vߖz\OsB^04Ydh\q\1r귟r\p͢l35q眚j)yAQōvR!yflwi |rdh~+ufnxU!U}ƂǨȊċ潸͓ǘàHƅIÌI ew]^801np}I`LdYl=GNX=JaA>MoBpLMwCMizCMZyCNudB N7t@MawABM z BM{BNyBN9xAfM yA"MBzALx9AdMu|?M6sB'OqCOsBN\u@Mu@jNv@,Mv@zM/xANJ{u?M?{KAMyB@Nt4DBNmAE[OmDNpfCNwFP|kEKO{BMxA^MwANxa?QMx>;MvR?WNr(CtOVp$BJth+@qF_@D\1@"AW<;LTm99R]9S;5V:?\>{DU`AH bR5D#[=EF[WJq>YJr;KsS=[Mub=fKw>Jv=IhO?JZ@K*UW>KXR?KVe>MOilANDiAOh@ OBjHBNxj2B4Mdb?J]:DEV*9EMWB^?tDbAFcACG'cAAFdj>D`(CF2`gFHcCK\EMhPJSYLVdViWnkRThRO\R]VRQe-WOM#iZS3JeO6Hh?WOuGhS|p=Ky"o$IFn`JeZHc\]RKcnfePzreIx b2nH&}cA@|f'DFs2aElc\pJM0LCQNoL^YYUCbUJdWBmVYBzeLAhLǝm{y_Ct]dJkuc8JwJߑPq݁lodG_*PD[OIH%SEIAYL@\OAzWrh{#u4Xx`ptMe\v\O]|d'n^Vxq]Bxa$Kx^My]ISuY@Ms[WBnvUbCoX$IgRIrPBd@XOXF<>S L@cEPEs]IwdIvb)EnPW8|fS;~$]lfkXuYh`}/c~^ӈ [;]T`ڊocΙsdd+~w`u v SenH$&mC>nD tQgblXsuDtC[r!quް||sVqDs[,oXa朗G\a|[0[ڢQ_h/hHl3jʕgMQFl-w=7I~|FԁG_)2ÊGaz=fFb@EF`>ED ]=CWn>D=W>tD[fAbE]NC6F_AJD@`?B]>1E^$K r4>LKd @kLXK_a:7F W9FV+H4];E@`BF_FHbDZJ$]2MO|PSceX[eXhdYY'`TPOYmPLZUmQ-LNbR|Kr-_vL/jTIU]PzF!seKrJ;pKn]oLa U]Kabw[FOidOGumawjjBvybFu_GhR2:+[M;RLBNKB3cF^Vu}pi`lRaTRdUxG{lXoDxdLt\}-t sx4_ELePwKDYL`F]O?V}vZ~oUR`j_HKULvIP$FgBW)IBSgFy;T^SP_[SUYIJ%ZFDfQJ#ClfOo7^?aOo,TR+slSdQAi\UMH/fwSJSE?REZ=WNJGZZLGm[K}oZoDZCb]K1duSDjT8Mo,Q=Z)Gs0PC=qEu9Q%IzAõvϳv&g5f ݕmqϝێq(.p6i猯}]uRrMIMnI톿qK>P~Q]:nZ~伲US D]v+R8\ʸ;vֶ꘧uݕvs i;<\KOc)ZCkn=gwck`{ݿeD><)kgh{W{>KݲاˌU k=}/w_ur pk!|.g{ln܇sՓr1l._ͨ?tF\t~?JșzmVؙub΢alͬIvoǢi+Ǽ4Cءcْͫ\|⋘҄P6Vf?HP^.=I7k"@jMTwCOyDNw1E3QxEUxwDTtk>L-o:AKsBMtUDPuCpOwbBLykAK\xA9LAxAULuCMp?DNnCZM"r_DMw?:LWw=L t>BMwpBO oDTPrAMavA%MexCCO{z%A9Nz5AkNyWE|Qx>HRqyNAXW|OZ}|EU:BWD=F\0@G `@D]=BLY;C|WD\;@Dy^?C^e@CTau=4BdW=DUf1iLy"=KvM>L~lBqO `=MTz;K\>fMgBOjBPkBP)l2ANl? MiC>K_:I W/:HXG{{c_v:cx\pJa Vq`Pn#\P`xi^R|w}nt_N:lL{cPK kTB_N=si_5JxaJr4SEbaqKDVJFOB[E<:>ZC3]1L@zfOTJkP\TO[z p`|l7QzaeJjRPBk W GdRA]OlDsbSFJbRI]NQA8YH8?8WKHPFnDPcV,Otwj_dQOB7I};8"G;<9J??'< II?5KAE7 KmD?J(DB<-҂Ҭ̕kL1kȹw+ѡz4Nt{cr1p >dJ}Z5n{]·ay;^t"T`vT`hh=sߎ2.@wKl썷}pKּC΁Ⱦxʸ}XΕs*fo fıܕkIRg~˗wfaՙypL6~Að5֪#DrDa/̟05y,P-vQx~Nyx^v0k~>j}tdo_un֛a 7MOrv36~iV-e6 kqCޝ{ISr}jǦG᾿< r()0؞ؐ^Ǖ/V]t>G`f<;In;@ NGyB@ObzC.OQw GT{NbVfSBJOs>HrAjLu)DPw8D.PxHCMwBLv@Lw@=LvA@MsALsUALsTCMv4@7Mzv=^Mt?9NsCNqiEO&tB6NvaBMw BN:yBNzC6Pz"H)U|J_W}KU}HR]{FD-PrvrA#OtdBNkwBFM@yzBSN>zAN\wBNrGTOl@Ie;rBa 7<\g7;Y1 7W49U7= Ti9V@MT^CYd=D^Y:Kh>Jm^?QGo=>HHo[>Kr>~LGu=1Lw?DNr@Oye]?]NV;KZY:?hM"f9BO2jSAPjh@O`k@KOlr@UNj@]O e =L]9GUZFnd@Ie)C~Le$FNjCKhBhK6ew@MG.d$@DeAFaC>I-[GCvG[BGz_E6Iu^LM^qdedӍ1mc~wq_^7TEPL:J#LFMkW3MNnl~]Npc;JynKwk#HI}\oTykWncN ga KkRi)Pa`_8Ng aZ|u9xd[WgOGCNGJeXXOIblaGkcamKhZyGuk_N-bfaZzN9PSFFTRHBSeL%HK@E(Im8:GME=HbhLN'wU]QvOOyrP=ToSToP?R"oNPoNNN'w9]S2uefXujZ{kZq[OJwpg[ sl<~ho$_hvf0{dmW\NBhSQD0omW=HiPG^LrFVkKCUCG3>TA8N[=K>jKV6I2rwgRS yrq li@p2c4ye[gTE[WL^?XOK&^SLLfTFFMgXSvFWNwIsN!EPGOYO>KeVLWaJ<RB6QFX>M D|:OJ@>C ;AE=;@POE>XQJ-;M/H9KI.A?HE<@5{ ZV\IuѬR}v {Փ#tdh xBTn3FSq6NkxaOuZ/wdYƕ9gqs8RٵM.sя׮ʏC”c%IKR;Շ]u֙+uVp məg㙮f$Xq:ƅ/kЩ~PĮS^k#=:D,ݥ­1㤠vTʗk lv~^"{Zh2hRwxbTWqg@L:h2^)qB_,g5!j(75g3g?tB䫃j`ʌ]p:"OVޢa( ޑ=bi~@KIjC>(Ijl@B4NxuB\OwD3PwHT<|_j9lTtщKVQy?qHrBKuDOiwUE4PvADN5t@B4Nxu>Mw>L-wAMvBcMwBMwDMvAZMTu`ANuFBNuBMtCNtdCX^n83F\=WE\8=C3X:RCWA;3EXC>D][/A'FXY?PDhW?E_.=8E[b-Ins?XHm)MlK>M`;hKZ=K aBN{hANi?!OjMAPZm:B)QoAOj4BMcc;G\s>H _F?NF]A=G]`BH`@HGbS?Gbb>WGaAHdsE4LKjDLhCJeAyHd@Ee@Df>BE>_BE[BFf_wEI_^MGN.^daMe\b ةI27ČCjh qxrq^R-S`RIn#`Hzk KviHzmR^~raa|$r$\wEpQ~zavqW6`TCJ^ZRQQWOTKFRMJ`V)TzkWvWucdG9i{T @]KYaS(Q@bRGGjWC!^1O:TH=-NA:MC.>JNFEJCIDK B@FTfK C_SEXOBL0B\@\D_9@FLr`-aepø&};#~zZz'Aj(sJ{_C>|cBxs$S0vP^iz&cOg3d{`h_g\Z|@ōl`Ւt%5@/8K)聾WةK|t~h=z͞q{Ýgmegnsg.ݲTȴϏōɉR^޼Ңqdt҆,2 LȺx5W{PЧ,sͨk̥[88H,ꑍthB|ez_>t=R%kGSU ?)E[@AF[ =DVGUIAFWBFW?-DfYj?aD_Q?LE^=$FZ:DV: EU3HFh?:Jgv=Je\:Gg;~Ghe?JjCMl?LAm<>K{e>K \?K^@7MfA?uL=h?Mi=AlPlDRoNDPjCjMd>I_>I^fATIE]\AHZG+_ BHdDJfEMseC3KeAIH`f\@^EVfQ@Eg/AmFKbpC F[^vCiG`cF5J_.NN[`bR=u4ۥU̗mh#m|bW>x~QtdKXWNDaVFmayJZtLhLjwlP4}^q^Oua~rXW\y_uXgTGGXYK|FXMvDTXHLnFghPƏz~]~1}\_iJsWCWpG\Lm\^N]QJVNL?UMIx[8PF`Q Dm=Z\J}nXZ9z~!qgr[zNL#G>YkPJG{fWWK"fY|M+nb XWs_5Y_pN E^lOEdVGVOENJ*>5CTAiM_OfUwn`f`xbFi#x\VY4xOnNEu^SLrRJjMFb2I@Ht^^S |@jS^}ylYoZP2l9XnTswp딩y\qRvٶ̥bsIz Zm\EocQLmfRZogTNfoTQH^K@FZI@_]L<i[Gswjpd'<`%2<(d tNYza6Gn\Jte*TwaH~iJzk!Ouh|Syu@cIFz\gDq^AbPCOD;Ko@?OHERWKESJ3AU,MEgW4KiVHT,HCEI8?K-ӃAzah|{f xh?Cf*kD*v x a qKoL vUV_}c3 k*l}[ܑazZk[Z}U%n6™ή1U*KKwĥkBpV ~Kq8h>lư]yF[KkޟA\.p|wǗH|0њ˅/XrcDt#LM:աGȨ#wlj׽xʱYy{pR~dxZOFs\ks\uR֍m> Ac1]1|`A,G~m.͋cd|nÁȻdtM{@M}@fNS~$@NO}?Oy@pQ viBCQerBCMk@SI{g=Eg,EA[HT?H^T?+G]UP@LEW\@VCZADa@AE2]>dF W<GSI=/GXQ7?G=Uc?G__AKmfB>J@d9tEpb8D`<#Id?Kh@Lh]?Lf@Lla?sK `q@%Me~>)L'g>Lh ANCjBP]j&FRhDCOcfv@Ke>Hbd@HW]d@GY?"G[>Fv^>Fe]?HWa?IadnBJ$dE6NbFTeAG cgBF]_nD7HaFPK`LO\]_N srT!%lvhPnS򇁀e~a~>`8|hUheXLYCVK^\aNf a)OlqmhwNy?j@U#{k2VBsJePtQiNSzRk3MmWFKhQmHhWLhiZrG_gxUVbfbHvT?nUHp\LiX&Mh\TfeY}NbhYOJ~j Y{An[Bz,m0X͑vGQj\pv\GbSMeMKDa\ Mn6dO^aS:Ga}SHiSfG`%N:IeRLFmS]K^gW)JWKJ}TAtHaRSytLp"w/g_Z|R!{[KLz`xM9nQQFEbzFDjpMLlP?Ki]QLb:OlM-_&LMKm[V;X?nV~Fl~Ln qeKtjI~z>gytablZJb N\C@[WJ=ZJ8-aP;arWI%{miCGqNNwjc2{_0r=[Uwd̈}_mEgqT@z`9qR(l8JJpIlFr]EtWMCK B BLEEJS2KsE|TaKBPFA_OGkU+I]MF J@o}7~2s]lH]pkūu‡Dzr{h姑dfp&u꫷vygzɈbÅtT=_a`۽f뷽.sBpvlt9@ixgyim~Jfrd}TotAi?ujEН){AhSDže!ٍɛQZ65oiq Q~cMu9DV_?1GgBKsv@MLtyj@L{CMyKEMuDLsCLtfBLvDNFwBMxAFMP{B-Mz;A'LBy@BMwKCNsB5OtBGNvCMvBMKxTAL$xTAL$xAKv}C.MuB\OwK@vOz;?N&|@N}&@N@|p@N{@{Ox0?[Pv=N{rAAMl?Ig[>Dgp<@ocL:I=g\478XW"5f8V69U7s;T81<U;VA[ BZ@Dc>GDP_>E%Y=FrV4>FV>GX=+F_a>H"gn=/He7;5F4aO:E^<}Ha< Kds@Mfs>L;h=rKg@ MfnCO@i@TMkh A9MhBMhBNgCvPeBOdBLfg!@Je?1Hl^>EZm>F\C?DHr]7>G^v= IdF1d@?Gad@G`|DIcBFvLzbJqN~`\F[Ocq:nM3~i[H[xL\ZBloU-E3m aLŁ`oZy_L6zfWpedU_]QTX_PXYMl6eGM0v~fMucFOhDX(O9f_\;Mg[ M_NFLoS#Iui,P1~}ŋؖ΂:`dDp$QzqWtiVhTFdYI=VoH"9XWH*3cYH 3aiJ7t;YGo{lg6HyuULOTvN܎rwUu|cњ j9ŖHf9yQt^{~f#vJQNiMGSkIj@IuaF^RHOI#GAPI+ITYMCHkUK'CXOC:TS#E;&] N{A}_kQ6GM$DB~̡5skQWwsE{z\c}bMMtI΢e;iO5 "o֐rZv^;5qػɧR}^wЮuG]kzB}PjIt}Cړu@~MI/j!{Qvf-EՐVf~Jȸԧ}đw[n rj[n.%q+ݙZkMdrbT0SbDVcI5fʧؒ p>Sytuv~|3H~SmX$GӱȚU~y-kR{j('oldgd3]J3ΓqieƊT kk1pxWQșə5y_^l~>oIge1?3GdAKqAM xAM%zTBN;yDO7xC#Ow1CmNxA%MexTCMvC N!vCNy5BLz?K|>Mt|>KMyZALyBMycCMymAMfyAWM@zAB'NwjCNrBNu@SMxAM|x&BN"xx?LpxBA/MxdAKvBMv@Nw?OxD?NyA5O{OCOzv@N+y@P{v@Pr>6NZnt@OM5i?7Jg:=4Df;.@b:>X59VL5:V47:Uy6b9zS|8=Ub:@WF^d;D _FLgk=aKi@NkCP6lCNhDN/iCMhC-Me@|N~b@N`EOcVCNd? JJb;E\;]EXD?4I+[>Ia>K>ef?Nd DQvdUEN)eAIb$>F_KB7Gcm?LEFd@}H^fA,HcDJ,cHM_cXKNIb pKi|^ qetY`nPUGiQC)tEePi_YPmY]YYVp)ez;mc[6g_\PRTGMSUK`i\JnaJ\r`-NnWM8s>i [rlcbZ&a%X}ShQBBylI⍕u}]ߤswvoKiN?<^KD>lZkMzImY2zqebtY*xhPbSGin^Qk_ SrcN-lAUB#ebRC eV3LbUOF`ZMne_Py[RZMZ$OAJUH?REf<,V%KE[jMIr]PfuF^uO7fJGiQ\Stn2mX}dxBGv%n~єhbV|!q܆)qbjNMReaF\MaD\Ejb3Lc>N@` L!=hO=lNU;oPAT lUG|Ba㔂dYeϬ^Ým=E{'n_'qVQkEGv?^E!sZGw\3HiSEUMEQ'MGu[SL`uTMVJ4ENtA9NA8WSQI8WM?PFGADºQLȴѾ+Rcq8Ih3GZoMz(Gehzw}zT^v̛~ß!z*Ghu9}O KÂӽ[9|azARpt7r<ċru(OFG}fᝀvrwXW*ɈTwy͞xw5ORyCP*zB P|AN|?L&zBNwDOAtSEPtBNv>;Lgzh>yM1{V=Kw7>Jw@LxBMxAqMxp?KyAqMxBMtBMw0AMzArNx?BNy?LZz@zL{ CMzLDOxANv?Ocv>Nv(AOxB:P@xA7Ow?A^Ps2AYQ7EZPD]=E]=F,^?~D]]N>1BX>E]=GVeO<9H*i>J5i;I`ArKO\A)Lm_(?~KIfL> L_j?hMkuBOpj9GPfHQiFOkaB Mg=Ld>`MqaxAjM_ByMd@!Kc@I]O>G]V>HIYp<J`? N9eB0QfbGdUjGPiAHaD@F^BJE`AKGcIDLM$gcCOKdDJcINhdlLNPDg%ykɡх qKr6a?Ot\HzczpduYod틷lrYlZ'K=SPH{Q4REIUSJ`iVIp-aNMLyaN*y{,fqB~{yitbE}hF~>gĖt7Yyʑchpo#UD^tMWDmZNu{kR͈ xTXdyVUwh`etgP(sjh\qgSp `J^NV TcKY0<򇉭h}uIV&Deݦ՘wGv>PϿF6O{6}Š}`+ҺU-ـȎK?4' 3œ(r퍁HQZlo>C\@IbjANv|@jNz? Nzy$BOzEAN|AN'|A{NqzBtNyDyN+uDOKsBNs@Njvj?MPv?Mvtc@.N[t?MtBP#vCO$vaBMwALZx]CLfwEBLhyAaN {RByOyDVPyBNezBM{ENz2F3OmwCOuBPlu@PtCBQgv?B>Qv@BOvB9PTtAOn?UMeCLd`CaJ^,?F\^;@4Ui6;mQ29T4rW6;_V7X=3V;BW_?UE~[<}DZ{EYy@oEX='CYv>FY@GWCG W?DMT=F:WyLg@mLay@K_U>KeMhe@L`bO@Ja$AJ=aC&K]AGHX=E^f=I%b@LPeCLQk.GSoaEUMli @E`_BrH5_dAE7^BHcDLfFMe*F Le(IOfeVN#Si9̀qʣfQ yt"` yc3ړ|%O~jxrk3uSWpsXYJ\R4LS*RIL_WFNVQItke^LyflJ.dE*csV}F/`Nkn/LG0p[RЁ_rSLw^ߑqsݔnm}kMMFlaWI(o'ZQz_hRvHS'] slwh~j|5tZxf~NbQx@rd/K{k Q[pULC`P?rj:Yn`i\UPGyViLzEVKlHZ^OFc^OqDgSMakRTMjKGdOHKgNAPqRWQ^MhTKf3T=FfjYH_nSbKNcdP'IM.UJ?`O rqܱ>SuﺘsYxn!Zn2ni$iˇs\`j@N(KnPnNnAXjwfhelŽ|zuVF1̨xu2|9؁ukSZ{fKAgO97k7N6xX?ɉpLI~@Lѧ K_ڍuV|Yl־?boVg-k%uּ x7hwQu~ sz@uo>xC uq\k}e Ĉa}auށgȜhOhg/ty-#t͇H~а|vj}WjZckʲ}dƅBuK|ζ`tܷ)qprcc~dQJRYHp?+F[=A6J=i@LSLkjA^F\6Z;T.7:Q 62yH_TGV?EFU>?Et[&AG]DG7XD!GUi=!D*S;FVM!aBNckCOUg!EQOkEbRpBPt@@HPs@OoVAMg3>I/`X@EJW_AH^@FS^=D`>G#cAKvh~E.PTpE~NpBI3f>@C_D@/EK_@E5`@E8d2FnJgIM=hFULfJO]UDLiq`AO?h2`O}mR sIYa|f>Bɛ.vz!`8|\hJu]Fx>hNÅdz^mzQY҄5teWnwX\{lYkkYqvVhT#sxwq|쌝n~mAVXkM[qH;p bSI3}+jIx_DZkS?m]Gk2coNTNBiUZKBYwLF&b.RFiTFkZUKCqW*QJkP*K~bG#I[tEPgVLN}2V2L'}k_gR~sʐ}iځd?hIor6myzlnjTS`PS_MjNWkDC ]GMEib LEbWOD/cQ>q[Cs4^GlHWb>mZ?FpDMJvENvENx#BKvCNFwA,NvR?:MsHAMOr:AMqAM]sAMv&A5Ly/AL&yCrNyDzO{hDO7}7EP$|DcPmz2CiOzC9PyDO3vCOtBDeQrjCSPrPBmOwANzBMzwKCNt5BNgqk?M;Kwh=Hb:CEy_9Db]d@IW?HFV9@mE]AwE]`hDVz>GU<`G_Q=Gmv< J@u>LEs?)LkW@LhCN|hC8OFbcB=O\CO`ANpg?FP`iKCRnUCcR;tAPuBgPrCOVl`=Jd];H`p?IkaDkgTKFoW GlT]IEnUP!kS_NgNBKOaMMRlMQyRLf{#UiKs|V1|[SFbhPr+NQ~_nqˤlA"P)v"s qbRnwg%SYXEFZGeD`ILAEbM?<`N=i,TAq5[mFwbDwcEwh-I]̀gJ{X{xVzovzhRZM,F)PEtFiODTGS=INGTHBTTIEj=VCQ9iTAS8]O@6VK=7hvWAqscQy kpq|ktoT|Ei8SuaLmTJkVdNviO{in=Lr_HSG=CPfD&>a@RFc7SoB }YXq/w7UvSeq*Qsϲݙwxo׊c8VrH$iEɄwmH}7xA|+mDAg_۬뚭v Z}պޝoԤŽs_ʞcnXzTK{\jzkDt:fHl+^EEeYSVn>B![>C^;gESaLgKm:FJcy:CW;DX?bC]ADE_`XBE]*BDW^5?DgZ#>FLS;qFT19DPd;Hr>KrALlgA%L kA/MjLAMyf{B8OvcCOe@Nh?>PiB:RjmE(SrCrP_snBNrptD|PmAPNlk?Lg"BMe?I^CJ]CLd HPynD}LmC,JCdAE^AsDc ?pAdHA Ef,A;FeBFneEfIfGGsj#JOnS=Wma^a&hXQP`VGEh-TJiw\UʽC.̴vGsJ|&jVpd,T fhiT@Hxg;MdrVDŽvTmxVwދ~d^lz嗛Lt5cY{sYǒۅrIGm1Hw^<u>_,DnWIJcP,H`MuF4JzAL}wCM{6E{M6yFMduBxMr@HO#u@N uAL>vAL4w@KyAMyB:NxDNyFO>zGPzEO3{EOz6DOz5COz]DkO|"DO{@FOxBO7yCMdx;DwMvENluC0OfsBOpBNnkCArLb BK5aQ;Fi[3u9R4c6O7_:P 8=PQ6k=O4n>bO/;BTR>LDY?E_0=]Fa=He>mJi9JE9_9dBTH=EVC?DHr]>EZ@zD\BEP`BF]DiG^>CZ=6ET:aEPO;EbY:Hg\k)hU~h H@h ZAHOs{qjј益j#uoFmL.pPWD^N7nY[Dtc0N|n]|za٘tI:|)miċj|{.iC~q8tuڜpp~)b|yzUiu\@sD\6Cr]J.mWOiRLO^LDGwWJH`ePJmQPIhMIjSfPylftoU`^Qr_IQvuXRks3NNQwdPVvMyRwMNu[N\KDsSQLfspgbY&%xY~ofZ&DFqYPDJ\IO^KN^lML@bnR;K[iNsBRcdQB(s^`FDxf[zEsU@g^PEj\KH]MDYcSRHfYKYg[ M3]|^Qpq9e>x,oYLyv`@CZF1SEDe92PvDHAvSJI}dXMk]Hq?bI-zAlJTHngɐBoq^rZHqhZGLucH{:mrL}mL\upfIl_KIn`5Ict^J_hwC1UtG^{O_bdή[kD_ϑ]*k] uzxcT4oxZ4sGXGg{yldhaۥd(~lrZ~r*Oq1}tq^y0uy v 'qC]pKu Ftߡl Ou4t3,u\?Uz0Uݙ:e]f4xt^i؞{vơ8vBvlxvU|ړ7%ϐ ډTɚHܗםnu$<^f|;JI1hDGlBLr4CNtSBOvw@MvYA MuCMGuC]MUrCMls-AM}yACO{BVOy|CuNxE}N9t%EpNwoDPoDOqBL}tAK5x?K|AMzCpOw0E)P+yrC3OyD`P:zDOyrEOwDOxCCN{(CN|CO{GC[OzEQ{jEPwDPuCQkv DmQ:wCpQuPCOpAMOhIA(Lmb9pFe[*1;S6x9Qz6:Q8q>pR5=DQ3?NW(@G9_=#F_t>H`%?Ib:tE\6@;U;EW=gH^oE5[?E^Y@F[BOH]/?CSZ>hDV<DR;DeD PgD)Ni}AsIc?VD|d%?FeBGdDG`DKb F`Q[igRao9fkrn_\]H@FJ9e?i\WLLsmts;z|e~bnz^@g$SB0]RKnb3L~}f7|fx%hKp kQuuh̗ҕGuveNo\RwekK{{lJxkX1obLziIR1e|^^smJwgLRqq lX-SVgzϨw ݌m霻oЎ~\ YmIRt+\.B r4[C;kUBKd:QI]KLF^NIlS MFpSHjL G8eK*H&vT\R7hQImnV@K^vZ*P~sORv`O XyOVx$NQuLNmLL,taXp0t} }1{Ѵۭ/A}fNNGXU>KZDR^IO8bNJBcQC|UqP`e[WxpE)S!?E1Vg>XFZj=!F[ >JH3]>@Lb;pH^7XDKW:XFZ<>G4^"F\>F\x?@G]>F-[!?D{W<BBU9<7DT;}GU,=JZiLukIPt?M5qy@PXm,DTl3DRZm[BQlDSTNlD)Tl.C?Q%opCPjs>E/QrEdPGlExPegEXO=fuDZLfdBIt^>D Z4@^De^v@2G`ASHa?Ec+?}G(e@HzcoCH^9EXLcInQPjR3aEoBq|utdـuaXzO_N>@^YMJ|g>Y򗞀Pg"[Yh s^Rs\CZM@TKME2l$]KrZrVsaJSvEpYywpcҏ*v"2?4Rzj}snphfraDr֎}hxaKkt6^|G/wtbFsf_I`QH]nRI 3q _L7Ů˟ŀ:v^fB/NcxUsuZXCePkS@#jfSx@Zh6T}C[R Cbd[IBndPxAn_rDpg-JuMx?}ytfcTPPuAUD}\ ~.jI+HߟŘp~yUu|yzɸ]Թ׃{m5y)RwGFzSiBVsdSy6>lQB j]Z0Qm#kawqbxk9NlFXWA?]CO9(gQ9wC_C3u*aɄ!x,|*Atgk?d;0p!f;~[I`y =ugt2u8qDlڌa+_Q}tFYr|>,:w8T|FdTt]jOf[kgvw8r|О7~󛝃ZU#i#ϐ> Qu_`~juuKNa`AUF f=AIs{BXM>xAMwf@4MGvBM8tCNrE}N+rF@Os6GPrvCSPvCQwC#Q.wxBMMvCeMuChM vBCLz{BKP~BLH|BM~yBCNzxCNx]B-ORyAOx=CP'yECP6z3COyBNyDPT{CpOz+DOwEOu-DOwCOvxAOx>!MHyAO{BO{@EMGvC Q3qCP-i=mF]3<U58T195 >gU8@U>DV+?DV=FW=DHY=6I[>K b;9J$a+9GEX8]FX;F\;E2Y;C&X=@D]C@Fa>F`>G[`>EY=CVa?GjV;GV ?JWH@LL4TBMW@ McALq>gJBw*=I5u'>Lr=>OnCRn_DRo5EaS'qE!SnER[kcDQkCPmfEQoFxQnOGHPJjH2OchCIa@Eh\3?CE\xBEv`KAFaHBG$cA[Ge4AEH)gAzHbCJ^UELLqeIPh8P]l ptqܗɉ3gVIW=SE.EtYKK\mkVP%|(g_MrR%KnJsbE?VlN=W-NAgvoaJdrN-nsKkK upTVvlMwmeVmt}ev֙Y~[֕wt/G~c]mW@mLerRpAnUH|ojaP`R(JCUID n^cQTfjpMa鯚>{FiS~buo9Tl}SBVG86\APF|]OHZeNGYO Dp]HkSWuC\uRhvW=Y^qAQFkL?Yno][W|qnyQZZ{RRB|OT([xL NvKHqSL2FnN,EewTWJugP#O\pacq4q{Pâ^~u~iY#EA\iCI9bJBLlR/M(jaTMbcSL}^NFe:RxBiTAkyWBmY`@Or_EjcYH]m]I=oy`GuhLtlP~$hn.QzڬE~{vo`fDtU>c*K=a~@V^dEpsiAIʿNɾ" {«vxxwy6z2pwqp[őp q֞NpkFpxi%mv֞t-s(v<t%w@EI𡸈+ҝϊ%;bܖ W^Ty҂zakv\KNC\BF]4B&LnBNuACOwBOuzCNtCNthEM{slFM"sFNEt1DeOMu~FRuTERNuBNvAMw"ALvBlL:{AlJJnCLqBM&zCN{gDN|>CMhzDLPw-BP{t_DQw;DaPLwfD!OxDOyCNxD OutDXOsrDOuBOz@N~{X?8MyFB;OyDPwANv|D'P rQENci;D5]w2:UF6:T7;V8=V7>4Vu9@X>=D[h>DeWE]s<Ij]>YKYCQN$R?LJONBMWAL+j?K0u<{KwGMp;@~OmpzBPNq}FQSsERpFEnQYjDQgAP=f0CQk"F3R qGkQoHN#iBmH cA/E\t?B\6BxElb@E8dAGf@Gi@rHfCHa=EIKy\HHAOdPMSf,[`k pppjaБB|ǘXlbkT&@UIFMC!IIPH_TshIe^rY܇tvgUy=lJ#c[)DaRf=kIt9InyJnez9PMLwUu`uH_P,Iq.aRďIkE3̹)bƾ8T,?mTʶ~ZljeqX{rf[x:o[aj\M_NwIW%KFtofXcfa:WzoڋlgY~;`k.}`gtN,L+vNIHk0JF`p;NLnpLO^o5LR{[[ÈtjPz#yNofhQI c*LwH`KLeJOMgQJfTMfT3LofoS4EiCU AlXJ?u`D;~[lbM`t_M'uGiVvf\JYxGjCB#yoC)K,b>T{<|V䘰Wc[P:mNwkVjMW`FXnTgDil,U_FlUMmRJu[?LwcN0v]qJKpJp~m)JI~Jn*J!vO7~uW#nl:sԙm%plXj rSf@R} Zq7{e_@(dwU;tlFR[z\ a^ĭĽ̌ɻ'б5z8ȳaǙl(-C\Ä󃿡7are;r%>* nߖ7bwڋ{atMlM~m?YOp^Rv^D8P vWFO%rADL h:HCvY174T7; T7=YV8>W:?V;QADX)?VCm\p>CCYm<^FY>: I];J_H=Jc_AMPA~LS`@zLCfA@HL1p=?LwE=LSwC?mMt<>KpB>OWrDPDs]HRlqFhQj:EQhBR j{@;PCmDQsGSGs:FrN2iCHc@TE']?&C^@OCpc@+Ff?FZi@Hk@tIQhDI?cFNv_JQcN%S3`dm^bqCi_vdsTnxSF]MEL'KCI(ML^\v~rurl/pH:gimfEKj]@!q@L>tI"wMZ{GZ`WShK]MF gT+JoTxUzeܰR^̣ȆϘym}ĥ~1:qxs}mv l\hcSKRII_KR*S~]nuٗZ^{ly2u4['`M;#eKOB]PmC[PEepWXNceTJ$eqT:GmaVJp[ G|kvY>_ykw9rOoS]vhc_ˆyN4&tuUer}x`cwU{TQmYORkLP"oL'Ps\QPQsOLlMGxaBR0ucZEse^SgTSpdRgT^/NK]pLF_OSK-j[RkZMgTBgR?<`ul`E8w_z qcb8~zq[t_p{Jg>H{h7+yJ썅sbל|ƛwL!z]~X-3z}u\toc>Oo`Qi]Xk:TXIw]Gzf+RNJ&~ni|hWow?YrpLmm|H߀Qb~8Cjn:`נjݎ%mߘkoelް~[Жzg;r0YڔgdTޛi'|ކjnu2MoPdFB{D*WBPIeDLnPEOqFQuFPwDLvBJxBI0yBnMbuEPq{EkQrCPt @rN4u?]Nv/ANuC)P@wkANy?wM {ANz1BeN=zD O>zpBNxAO$wAzOttBNr EOqpYEOIpBQNtALwC'MswEEN wD,O,xB1OxBOwCPw~C~OwlDvP~vDO&uENrHBKi;oBW=15R5s9zR7=TG7>nX7=Wm=AW@D[?DnY:$FY:I>_^;J`$Ie+?Gex7ATWa7UCQ6EN7DN]8HEQ:GX9H^=K"s>GNw%?oMv_>]JrBNuBMs{GQ,rHQ3nFzRmETp=ER sEQuqI>UsEFL+fDGh^i@,E_o>&C$c?&C+d@`Fe@#Gg@HqkBIriDLf-GPeLTgNSV[\-SzQqauOv\_M%fLE^]JELaRGTJd\ WTK]Ub6xxwxA%lyth`No`5D/~w_t}\ŽwEUʐNs?L~HxuNmWIjWMWpu[:k{1ƅaΤxÉoЙ"y@CuuztdB^KcZpfehb{Euly A`׋džtqi|VFbNU?SaEPD[NG]QQJf]YJGr`Lr\Jr\F7{cdLS=yfԊ{qpTVkUTȂ2uxq?f9͍U]]B|{\t`nyfgnjQUiJMtRNqIOIj KG;iMHmSNsc]umq tsjmlgKYO0YJE']WMLn`DYo~`fQd}RHm^L?whS@$={khlwQ\(n^l`E'z_0}f<3nLILyb—qh҄UWHg\=zuA|/ju/xo$dy/u o\|vz{+nYOhGlnV*Vswsa x.UDpGEh"E#x\aOGiPÒoϟ(q;jB_znrEzwS4wU<ހe:CbjsoF:v|Zffx[%M|6AĠ\ȑUǮ?spլļ|tœ/t2 &8ۭT44C$;nfcrĤ盟8է͚9hdB/tI~eAyZK7{Xs5؂Y`G9c0͊_%:a$:ah'SoI7oDzr7J!~/Nޝ"\OdsZH˫[~S2{S|ۜWAnx_yaKdKYhZVT>76z=7vQ~FrQma`sȏ Z *Lj˜օ{C[[fE2F$VBG$fCL qRBMt;EOw;FLNxCKy>BK{@KyBNs7E.QpsCPzrANt@BNiu?MSw@MxC OwDOiwAMwA NVyLBM$yCN"yBNyxjBxOwcCOvCCMs5DNCpDaOoCMFtB LwmDeMxGC_NxCTOozDOaxMCOvwANuBNv"BNtAM]sFDMq)@JNj:AX&28S<4_9nQ*7a=R97=W87p=Z>; A\[?Dm\_>UFfX9GY9HJ^4:J`f:^Ht^< H]QKGf>6Jf8EZ8vFT6EQ8DQ9ErQ;H3X9lHn_|;uI `0;HZ;IV:0JS?SKX>BM`DXPdBN{hIBNfp^BZP/v?Mu?K1tA6MUv,DaE=C)f?Ee@?Gad@2H!f@pG:gAH8fUDgNfGR fuKIRfOjT^lZ UOxeI~y[GwkTAMa]T~yo2lXo k\~0xln&y~w]P{~DqX`vWmnK4 zAk )vEP&wCvI|iePMWiVPrf_~pdHTgޞe+괫]v㷝j՜Ót|Vu$F)ƈzx|ut,r?l q$ЕSRM}tcJf Q?_tNASEp;?VJ`D`hY&LswhJNu,bHtYFGwUxEz]K~epXqRoMfMQ=~0ps\לЊ֘b͙˗Օ4΅΋zM{nouYWg~G_IIoANJqRbJoQN{iQLH^gqN;JQre`t肇)Z{pNeUXiJtD`OPKooA^vQsp~_JJ=`NDVH%;]}O=~qŠҋӌ烿IUw7Byw]|fB@w]A=w^Gv^SFUkM~=i.=} oErw\-ny;cPmqgO_|vqn떨v։vxW{_zrv_K>j>@oz`JBpWGW;+GYt;Iw^?< KH`<I8c>LhzEbQlEZQ oCOpBOosc@Ms@Mt AMu@\L2w@IL2wChMsFiOMr:FQoG.U@pgGTrEOplEJc@C^T>C/c@Ee@wFe@rHd?Gd@FbH?FFdb3C\NcZGXS)dIHRdHMnVe}gcgH`}y"[C|b!|m\&|~oeAÃBnvfO }r^nơ{|ӛÑN~6p||_xuǍꆑXm2sNNYplIGUk{NjUM_QN6o%[Rقl8ZlB+{rdeE٘*qMF~{<{j<.w߈͚<zOvvj srJdGg&rr|k9Lv^hSqhRVQH&7RD:cZRHu!dKTv*bEtCVAtR@nM@sQF1vYNs^XXNxvˉMV5ݛS̀qzuc<[hIEvpNHoQdG}tFVPozQgHl2PI6pK]i|s[gk䀒z*{L }]p)Hp-[s{gO{g7Nz?aIwZ FtWNB/oX@s?cHぺnJAw_AnZMhdTNvqCeڏhixt.W;e}Ue?ҋza~LdBuZhBs[GzaNz-)di^j|Yk8lhd|^,qL1mBwl$@$c@>sYBkW3D>oYCz^fDzsX7䑨ѮX" 0ml„zCrfzy2ǹ燺Qߌ7'jM.ΰn?ȍފ}W;R/uY̏'.`|WgjqDsDv}W]vUQŽml}9ɇ_`(_ (_-_Q0bab1XaQ0{_2_:3d/0^q8mTVq^{ ף9ѝ~d:~lz‚(p6k砥t\MnHTiYMkOzjfUkqp\xc܃qz~"ف_qG}AHf%nimGXMUFL.r>ALIvDMJvDLvBLwATNRw@ENuCOtuDN)scCN7r/AMr@MvA8L3vBMvhBMfxDNwTEOt ENqDN\rC OwWBNvCN(sBM*rBvNu9BNuBNvrBJMzfA.LzAeMwz?MwAZMcxC?N ywCNwBNuBNusB[MTt*ALMr AkL p%@jIi|9@]/8DU19R6;S-8DT@F!WK]Z>~K V=JRXY;I`%;JhF9I9i82Ia;9HYC;TH"V:FX8EY;`HO\;H^:ZGW^7ER];VH^`<1HR\>FJf>-KmoCNuqEOsBfN5qA Op}AjOq[@:NrAfMt?LUu=kKtC&NrDNoxEPlEQnF5RpEOkCzI+b?C{_?NDa@EaCFa B'H'b8AGqc_@-ELa?F`@`LaIRbJlVe8JXsjooFl%Rrß">w|/)Ev_}jZH xfn\zAn4~>1yfu].ey0~Gª뜏$qh_xG^GjNpS^JXMGCdQI{dywaPbng2{ܐ)|{ƠG:LG4{׀ron~VOvD]TlNR]PdoiTTq~TLo|SIiQ|FRhQEsX`DOPdQ6E\$P:NlccQo;bWpLzoxs5^d[Eqh4\OsQnj}Uyogy=} rv)ld_wj`6pQ^ׁ nJu]@Js[uO>rsZHlVs?mU5>aXIZ0Se$SIMhWwOvpwo䃉0sCoXSnwZoQ^|xQ{aH2rrVJ@lwcJgoV YG_!њ7hm\NpޚOs&At[ƋgMuAMKmpCnAfDr&YiGMl;VFneYB$rVp:h~^o?}e͞ײ!:h2YsNp ejD`uaruSsM}‹S\80ӉlohĪCݰC^!Ӓ㰼đ rcł>_喉ss{cyD‡`jW6!=b2b- dz.:c2kc2`o+w_U&⊷a?$-od9߁Cam?}ߙ>VڗnR=9נ &ĭz;?qԄ#k(Lt֊:uׇ݅~‹z̓q׊~ׇl|돮}8ҁj:prUGM[~=?If=]K2q@KtCLuCMuBMw$@qNw?NvB(OwCMVwYCVM wAPMwk@LyAKwC*Mv^BBMvDNwE#Ot+FNrFaNs>DM1xANkxEB'Pys#CdPr*BNvANwBtONw BNx@M|yg@N]xd?Mv@UM!wYCNxC OSxPDNu~B(M{sBxMrBMpA$Ll?Ig9$C]41'EXY; F^;Gb>JRb>J)]pAM[?L[z<^IEa:QIrh";Jhd=sK`;H,]I^s8F^8G\D:7G[:/FZ8E[k9FZX=GUW>{I]d"?vJo<@JBrC\MUs BMnBwOjCQnBPr @QMt@)NvN?Mu-BNqE;Q@oBPjEQhnGQdnEOiBG#aA6D_AzF`+AE;aCGaDXIa|BGbyA0EYa0BFH^~BVK)_J}Q@bpMYgXL[Nl&spPmo~èőo މ7uasՀmLfgXF}Rz>h7@|҈{ڎ|szdcsѸYC%'|hm]K~sm`xMlTEh UaFc-QFHvr`]Jѐ}Xny,U؞ɘOmyO`y2gB{+>pgDyq^P06;WCirKy掠&|󡗘pj#֕+S}sa]qqRxdG&N];Gc>JnmXBKsCPLvCLAxAMx?Lv@KNvLCyN;xCLzOCoKIzAHKyW@SKyAKx:CMwCNvENuF]OuFO^u}E,MvwCLyANzAOwuCOxCnNz~AYNyANwAfNRw?7Nv&?uNgv@M]uYB?NuBN(uBN6vD,OtC/NqCbNqCNoAL]k?J gm;Fg]4>>5U42:S5W=U4<Ve56;U69T=UA)W> F [>:E]:G$b>Jd=J{a@Ma@Lq`'K]X:KFCV9ETE<%GZL炞mrhkeXلqsIn#xfeMiS(F(mVG3mIFRhJ)ڞ՜aUUlJӎLŒ؍|s{zeg?sMtZ\~{+w sk{L>h3W@{qPiw8ZrJOu{XjkVYH0iZ5LvfOt\?NhCӃkiFx`l?ApT>yma'Kh8qVvDTye3l'w}%7ǒAqm耞3bI:PoU/Jsb [{C~ɋv|XEΗFƄԒdžct nj|l|tbu=lUg~={i"}|O ]Lu%Pogr=֕`x0h"+rC*v C;'tKX|o:ScIɗ{~bwoFMo\DGKs*aiq]w^B-i!P3Dq^CEpU,FUښak†p*Hs]fp^kSZh@DlGKވ|uaNhnKv\-HwQZDu^HJOmZwMr[JqZt[ڧS~Ó]vyf[)qK|y\6vXuRXfџeQ pá( o«VvD-fݰįq0aեhtzדKr坂i6YxAIl:)dd8c5 e'{l37L%p?Ia:uH$ft7Grd&ŚĘˤˆH%g}~Mêɂ默DlӃ̵6T?ن Qʗ1Ǎ3X$OŔVaz||L[S]:XFZU25;U58U;AUW>7E Xu;FVP:2H_:If5Lb?J]=F\=Ha>KzbJlBMp@M,nANkD)Qp:CPuBPmuCvQrEMSrzFSqGdVkpXG\YpEUrGU3rnFNj2D#HbBHD\}@}D]AFe8B$FhCTG%dzC*GL]D+I1_DFI]bRIL]KPTG\c^[i_esLǁƀR];-IQ7slIMtr dDZ=~_B hX-l~urP;pO|5u|qTY;ti&To]P}rgVs[FlUDq^E{VtRfglϟ5nNN@vԡ18y|yfz{Xm_FhwGpjey x"ej5`D l_"Fz`tRtgeo֋{gu8a7KnVcYwpehu`I}FkJ}Hf$Fv_>pU>:wcE~fEh}f@whiR~ykėؘl|L{BޘւDę~oj6ԒXƋpywds'STL=iLEnJ=tWSyPu cDX{>–,0If"{pT3yHjR7nbKmY`GdTCs*kNOyҋT[| ~h݄˞ܒ|}_tCpAsQ%Hx_@œ`\{6vU|mjAzfG?{&iWLV~;jMD{as>rUj9pWBFx}kNjoXż蛘kСdo8qђoYaqI>cSGDnMxWÄuTVay1cIjz`TFY}kRPz'l^sy{f{UׂpjQPaŃk# vNd1t EiCхjl4=JywmB+SiM/hMWQrqDrAC;gwIɒvLx}T emɣ ųP TԉNJ\ʫ1 ɆD"|Sjfy@X:}~JsЛ2_t{cT+\qWQgFk<||pSΚnNwn77zO i|:Z琱'q+}a?Ʒ߂-Nwn{зz՞fW1ݢ؁褥pyCk@oPaf:;͗G`?}À^PU@[:FUQT=5;Uv3c8V9?Wk=pCV>GlTsHp[=OF0W;FZ?XLc>J2f>}Hf=HHgO$Hd<;Gd>Jh@M!m,?Mq?MqOCNqC:OsA O~sCTQ r|DAR-qFRUspHmX=nGWnECUrFTsENjACG'cBJEl^EAF\AF&d?EhA Fe`DQHa_GKekEK"iHNg5OCT`Fhin6qv4{Ď̎ϭY_ԋڢĮߚr|hʂ~1P|tZxǚ%zBP_xhDvgTypn` / {ulRu`Cts^@)q\Bt~hD{_GÓx~EyKc*Lx񧚊4whҀbhuy2sl[Y}rN&hVQAioaO;vk SaySw?MdaUCah)B+֐Dwgxe5tuozx'|U}|u%k~tdys|gRVn][PmWEucCv[W%Œjx?{,w7rlo5qQVSeOMS{Y|Mk~ceXM|gYc=|kC&?Py4 w^Szy_;l;UC\PK=/\O:WKx{ANw4@TLw@LKxKBM{wBNivDOiwLDOxDPz?B>N {BM{"COxBOvBOuA!OvBNmxBxM xLBjM/v@L:u AM{vANwzA4NxBNxSCSNuCNrB4Njr@MTp =9Kvm?,Mo>dMwog9Cb`R5:cUf6U6I\:=ET";Ke>Jsj8?(Jj?Kj>fLBk;Jf$:gH`YqIh;3Geh9OFh>8Llu?O]#~aPFy7YAYy!bDϭbdH p-q|қs9OGgk}`Wm<%bL%ɂsV”scbaAvdgқY`wM<|`\塦sݜRaqi?UitH=m9w^FcojxMl 6[nh4>tOz{eD>lF!uJKz*Q{WRU[ǪbrB"p11̏ƥ։DևżT _(Ɗx~zϹɣ ɳ cFחv\q5nmr9rܤfY5}RQ܍v!Rkxr8Xxi_d}TΚs@O~k AgxZ鐵xI䬁ơg+=]&Зs樶;?ʙrr|zGMJRy:@TF8FZ^h=LTiAgNnOBMpENsGIOktyEMu(DMwBNxAOxBO4xBOwAMnwAMHxSB~NwMBrNuC OSxDVO~zC!O{BO\}%CLP@}@B"OyC%P wAO=uLBOvjBxOw]B2NSw BNEv@MsBMs CdNu}BXP x#B Oxx6COuvZC(OtBMRsu?oLnr=Mp=LqD@ LsG>zE e+8;:-W47U5;SUw7E=2U7=VW9D?WD>CHWG>`EMV ='G[c>Ik @JmALtm? Lj=JSdmMs>?TM8uA]L%sGBKAs@Mus*@Q0tCUt.ESoERkGR^jpE[Pj3EQqnD"OvkxB Id@?@|aBEekBGcBzH_GD5JM_ZFjJ cHLeI*MYhLTifjZn򈑊.3w3}nn}AVzBvފ}6pÏr焜lҌv~ԇȞ:#:ܡ-ˆT;9!͈߭|h|]ܡ8z=oL4~jl_ye}NhQ<^*Nv1=mX>zf]]H|O\G~`B|Ra;s_HGl[JyYtVHV-tL܌ЏA}:vsÂKҒz i؍< nwM|f@nT;9 khRs?eiOWCwZH!mM҂IlaglYa2j،yX}Wm |Av(ty;qQ+p+`~GtBC@|& k̈́G5coPm`U@^oU^;$kWp@p_CIsX`F?n_Gtp]HpYp9I?-fn(ѧ߼C{,}JwT4nRR>tLj U%}wZ|l}b,]x$e{>:!Gn~aZznXauWzmLBy`^C~eJ~a@+wZ>Ká|Ô<vwK(sQq$}_t@XdGbWgvm k6o`9P{waGgzpLGfmǮ盚98v3{{LnzXXWutx]u:l kpIp؍j?nGJ1sz`FڀpSvw5Wʉ)vOOvy;RCo8^Kl%jƒv!kcݬ?y'J&@W&!OA\[DuҮgN1ښ xnÍg@O~OXjuHÇjL8=nbJe=0\6gh?L~QYُr7T޵ Jȟ𔢉Jꐋ$`ތVt sttiK!IOFW9=yGx[H`>Jl#@DKlCM?jALes?Ja=Jga;AHK_D;F[9D ^==I,c=Ia>IKjE?KAnY?YLu2AL}wNB&KuB-K6t@DNsn?PtMDTeuES.oNDRjE RkFZPiOGQdoEQnCOKf@C`AIFOdCZJeuC!JvaEJ`E JdFLj_H@NkNUcbHge:-yj}~?smde%^`k*j+kkluhj{뎃Xw}yw$}㙅zW+zZbo ڄVxƊA,Xǃ1NP<=\|f DdjQ9kZZF5|feLˈiN~cH0|dJiVFXtO>Zl\G> qa?cYqGS8PEPNKCZZ{RzKwa)وq$swsهgLOzCaMzݣ6 d6ygė*Ef'{TvlUuOhyfeGnBUb

f䀄]˃VvQhlTuxiRtUydtrJ}cMFcbL!z@uOo nbq*~TĆ|t{tlkXw$IyA΍#kwbˋpaj ~em{ֳn퉉il 6}hm;kesfqzqOwmXD|i0Lmu_Uwu2S{uCT{^L9wltNM>ܙmDZak>}ɯ*2ɤ/ᾨd %Z3@9oP>h CLjۈ26%z}H/yם i"vPoRĆinC])xeiKy)[M6B[~-Xch8G6oI{`ՇUn|Q 3mՙΒՑ·DtvljQk`hJ*HNX<}DT;FT_c@JHhAK|kBhLoCM;uBeLwdBL]yBM|wCfPuDRvEAQxnBNyaBM{ CM}BLy{nCL4xECLyCN{C;O {BO{ANO0{BOxCkOuTCOvzA4NxAeMwlDPuqG>TtDQ4t@?LqANtDP0wtDPvBNivBNhvdB N7t*B`MpfA,MlVCsO0rWFRyCL2q;?Z:65:T26;U6;U49QW5:WE;@5V?EW=G6\=EKc=Kg?Ke>IZeKj>NLjB2Nd@L_??K2`=NJuc7J%ckJq-?Lv@rLrx@JvBKsAyNgr)CPisGTlqGTXmFRixFJRSkFDQkF]Qp0FEQrBJhT@Dsa@FbEK gDJg-FK&hEJh{GMmAMiIPZVXPV{(e,z}i\Q.PMYT VksmR]DžߝvАĀj"Kz0rɼ4 ؆>̌ѐ?];p|TFy%h7I,xmo S sXy\pMoW.ut_~J]P<[P5>\Q06Z[Tm>pSO>N&J@=[W{Ll$t딝a~ FexA`"oK9}^Fo[ȩM45^BqՔ}ӜXd'ƀݟߚzzqYz (qozc?zeDy`CnKXqGlBSKeqQRJxYGfeG|^Dov^E|o\?{}jlR4պvȼI<ճβ2ˮ dv`?flrT=s_KۄUpL_zYe sPRlZLxt`Dx1Z`R}D)dZmQ|7eFonlzJ܏|yP(ڎ;kot*QݟEo7~R\Ռ{\䞷m.qސeuVUs{^2r gBRkqr`WŨMyȹͅpٚrc]A3iJwOƑJ~ye^hᢱ:dժ8rpvh-pk|v |_%|ڠVmWCgx^ړw ֥vŠ$Jtqw{C~Ysk`vPeJ ug^0AjGMrQ݇~r)V4w\Ul֭=h \){>S{%Z,2ldﰜ@vй܉美ǩ6V,hPsO觔FJVQ,ɝʛ:^wiє0mwlwjPi0Ep`;6ڀ&X.7[|dU={YCYgPRꄇsp{j{KJpwFV-G􆢐̎s\s?V]QsESVIYCAGO;EUE/Rk=eDQ=HY9=FKf=Lh?Nd4AM9bk>KwcGc%=Ib;QNpDP9sD@O&oBnJ$i1>B@a?CcDIg^E@J7hGKjJOl\fy F\umC/NTONOhy\M׋/zaxedtRPP1GK#uuXjX (Ϝsi~ߚǎvǀ,iЙ:Fwjr†7Ek$rS}ɏ-zoɳsv̵㌱y$:ڙDvmcӐW_*`eτceQ{S⏻tRtjKp]Ck`R8\R8YYT9}VR/>`RbN BrUREmV {޿=p6/g"6yÑD~`ۇ(rPJ~.Y@qz E0~#\Âb]|}#[4! Ρ霚}9m>Kzx3ZZp4I!ymdFH{u)_L{J_J~haE{F^D{`_LEx` F7vaM0pb:ŋt;$v bG3̝K Q[,˂;3zexbOk ndGhp>R vVUϑ}ZxTqTu)`FZsZH֫eՃx#d{tKr˱ٖwfyxԚvux"YHvdsaS-pX;0qW9|YhG WnO tWFkO`6NYh܈imbF\w[>z'b?܉sCD^-|0^^󬾊ft,όWӭB 5H?؊kB@2_2]rxڡ J|W/~I|l^nI_0fM5z[HxUX`J1z1icx0yY{u I}YBwH w8}sKuZUcpEAT^@G?S=AQ:GV-;GpX@J_ BPL~d CMkDMFs5C&Mdv|AEM1x@Lx&CKMyeENx[ENTwDMWwAGLxBnMybDMvDMu"CM%y{AuMz+A!NywCFOw*BM}xCNvDOsEDxPtB}Ox@MIy+A!NywPA]Nu(@wMu8A^NwA*OEyAOvCOWuDOjwC N1y4BzLwAKtA LqBIMboDQhpB)O\jV=@GWH@JCQX>#F]]>J+e:>Lkio=&J;eS?H^?F'V+=zDdSLe{=Lg>Mi?Liu=Ki=Jhk?Kg9>Ihd$@Ke=J\e<Jfg='Igm<}Jr>ILHv.=EKv=Lw=LvA5M_qD=Ok"H0RbkMG6QjgIJSlIVunHDU>nF\QnGQt.DmPu;D OtlBJf5>Be^>pB`CH}eDBuRs q[)vZZ(Z]u ^{Eln|_@䌍WՓRŷ_rLjϼ֠v l\0` AkKU=kuqm]TNQΉqKxh{GDfV;a_%T9]cV=h[TA=TOESK_=i-S$E7zXj>Sռ㤙Ɲ so{>cKx+[>)9i,;uP^t?l{]v}ZyΠ֞4 Lң胅g[o|V,zaBzedJXhE1jC_~fuG|2eeKrbZeJiIRK-wGcz[waߔAz쬅λF:o2hQXJ=pQv_o?ibhwUvRJuAb"MŒm*؁-[ "VKtQx>E;wZ7/d̞ېoq&k?ኗi_mS8{đ}g$~&A0v`5woCx&\铿sHic.-t5nZ uޓuƍgexq)kywk^¯5/޵BlTMe}ЃjcwyYjܐhv転yU;{͗Hw{^t cDOjT9>r\Z?|yeJzhpNx`zWazňsQjFLF}\!VvS96kBD}]"*OZ^WǛ)]0pĒƊMT߉aypas?k%_ǩ؝(ė݆񕞉piȎqz|1n_wPiYyʁ~` qi엜ח=~U5}pl_ Q2a9ID^>;T='<{P8OAS%9HeY;H1\?J_ALdBMk*DN6uCNWz@=Nz@MzAwKyCzM(y|D#Nqx]CLfwCLKu:DCNtD]NtDNvAMx<@Mx0BVOvBfOwCNwC.OAuBObrCPtCOwr@Moy?:LWw?OLv?L1w@EM1y @MWy?Mum@Mt(CNx{AuMzi@LXyy?K w$@Kt(U?tBV C=EVw>XEZ?I?eU>K"j=Jf>rI^9=FZ8BU=IS^??\Nf?Mtg)=AKkD?K pJ>xJDpa= JLl@L$g@ZMet?(LgU>Khu=]Jj=IpJ*L|wd?Lu>TLu?8LIv@LoBcMd\I]RYeHdReHSiGT[nGSnGQngIRsEPTtDGOlCKa"@+D4Y@OD;XCKJaDKf"GPhgSdpp{Ԉfx~y__iwQso{U~IjYWfMKT[LL`NC3}cL}YrX4|j\|}kzzj*joǏpu |H݁o}jttr[HBm_hKl yfsrnu`> F+¥K-]|ąĠ1}ѕgd6oؗ|oکf$PqKVk]EG1_Ry;`)Ts?_5WC`gXETOEVN B&[zO@ncFLR؍0x;ԣ$#*r}ntmՊErAyXxqdu`~|veyp]=|hq|aє|,U:ѫmLQ3sqmL~ jL~niA| iAttCU}x_nXzJ[JHFlVTP#y^a0PϊCydԞ!H˹F϶LI󳮋'o8~~ofxHWoxkHhhnKZs[!BbQ9>`aR:ikU[?oWd;+wV^6@zWb.Cv`bF~&lfM}i(8}fix`yfW|Je>tKcƀZ1_fvhǚleL y;֥O惣io[Ek}atfcs_lwJesKMamvl7lQo0%f󣷒3e$dqpgň xrf֨Ó)~ߧ. Чܭ`Bhޞmyc 6en^h}HBQܦMz4Cm|3rU:gWDhS;vs]@owbGHoMDgz®sҨċ0^ou~mT`{hcJzggcHyeGπ/odI_xutž*)}Ƌ/IbAkKeRB(MkBNt BPDzu@5Oy A"NywAL&y_BMMxCMdxCM#wBDMsE3NqhFOsEN"wBxM x$@M]vAOpu9B{OwBJOw9CPO@uBO tCPuaCO3wA`NxPBMv@M_v@MwAMwBN w@MQuz=LtA Oxi?Nzd>\Nx@Nv&@L`tA NDoAYNh,ESPd}@FaU7:R8; V:1?U8<R9>Qp>AT?DV;EWX=Ic=bKg=jKdG>J_QHZA,Na3AN_c>Kh?Kp?J)rz=lJmu?LgB@7Mg=Jh=JjnKwsBLu,BdLt6AL;uB/Ms*DM.gLHsQdGRg`GTkGUoFRan%HRUlJY6kTdn#cjklkh\rtgݛ}xRujaed4lsh}Rs\Xt^Yv[3Rx`{lB}iʍQy#dtaπkj]Lc!rFb|^K9~aP=iZFv_C4dGHԐ'yUr0zJi%(ZhO}mQ=>rϥٌ`mወg6[oDx8bJrVNC.VaN>\QBncWrDbYaAWRS@5X2Q@_ET> XQ<x-psM眎tPNǟN|Ia{O}ypPqSOsiOjdH{loG|^cfHbMoQT<{Y_`H|Èt)rR3{GfEp\ B6z`>!|g,nZFVHxCfPHqT/Gh}fM, ~#j:5“Y?̵ϯ@a&qҔHƍ҈NڔuRPJl\zJ^u'd$EvbDPiS9[N1a T8fHX'=an\b;ycABO~Lg8D]{dB$s:WCw2`BKHx`i%UnuJj(}if~jj]Z4n6H,puɎ*tt[^h"c{bui͡8}!BF0cEdPjph!|+Zr3sʋa-@z[ iqgH[p[c[|o]tbP…$B9X݅hq`)vTc}od[5hVzن^ݗO}G( Rn.A۝NDyrqdR`PA:jT4pg\e=#|j=J"BvX08wd pPs.Swp[by[|cjuւsF̂մRz9ő2,֊yFBωn苣|I $ և&Uizbuܠ⭂>񡣊ǑXm`/Ʀ03֖S|ml\N?WC:VjC_@WVz??Q9@P=GU?Ir]?SI`AKlcBNh@HNpAA"P#wDR,x&DP}v[AMvd@L=wBNwCkOuPDgNsENsG OtEOv@BOv@'Nt9BNuANw@M9w-BNuBNuBO~uYCVPvCPxCOvA`Nvu?Mv@1NiuBNt)ANuN?4Nu@Osw?NPx=N%vj=EN tt?MqANm/BNEj FPe9B&G?[7D:vSt8h:SD;A@S8S?_S78=]S=vAT ?aE W:FX:HTa:JRe=EKd>1K4bz=BGBZ:CSk=#EU@JmZ>[LY"AjMb?K/kI?Jn>wKm=Kic>DKiW=I;i\>JmJr >CKsh?1LuCLuIDMsCXNvs2FpPu{GSPkI ReG~RgZGrTlGmRpALn:DMlfDPOmGQSoEPiBJbADW\%CDGVFEK`E&PkJXn`LM8iN2;[uTXIwZIi}F9d:6o}bn`h&c2wT̉mhHwU? e~PEk[P_E<[1RGfXMGcl\d@jJ_0=6ZW:VPC<1e%V=MXP8\T3;cr]?rJy_EiQd -out #>I#R{l=Wc|uoJm[>bP7ZbM2FfY9jZY=sb8+yd@%pE~'mI|iSD|e7Hd+}/k݊xȄCqFs_5\ƘړbyѠ5l @ml-)lKxHEpq|W\+^qo9|a#Dc>OfW?pnzlMBQ}=IJbTp/dOX][@tW {o3e6:CLb3=]g }R eI>S;_@8]KV_u[~ !Iº͋ʽکJ&|djWJ=O`vODgw>:{A6pu^WFS^$Xǚ≹~TU:> P_=E.RAJCY@IZCLY$D;N`A.Nkl=C=Ps.GRuuEQCuzB^O v@MwA+ODxAOx$A~MawCfLw GNuFPTsTCHP sANtBNt=tMNrC? Mxpm?Lm @MmCOkMBH_,;:>T]8v:QST;?T9&?WQ6;SW;AUW>FW OG\2;BFU:AU;DWT:bGU@mM&^S@`Ld@(Ki>MKSl?Kl=qJ&ki< Jk>Jo>nJr?Kq/AMnBMpBFMrCNBqzDP)pmG]R#rHRoHREkEHSk(FQUnBNo>I>or?KJmC%Ol#G$SMmGQcmBJi?#Eb@F0EZEHac FNylJ WmzLViNNWihR\mejn4y]ܷݕ'`wW{͐khS}VNuJ y^jk)|R^AyUsPa)AHvxS;7s;Ud=p Ur[Dw=aJYkl(J8H._nmcŒu=b);.1Az=Uj%fʎF~*[weOF\#L8|XcJ4akJZj>qZ Blc={jASrzUƈTl̇_Ϟfzt XYD~箈K}=Gީv}ʲ{hH'{݊tÚVxقfy|U3djjzvwip>}:e jyʙcsFs }jSuOc~+LF`dYc0x^Kew`pjjtt־aƈx㬘[?RlzVMaI`n^rˆB~؉~ywǁ\yrI7eR9g]B)czZ0~咵#Mε騭]'s2MoiIv(YB?bwGdI{boXJmtUlV(3Yw`|C.nҒ5ϑeG~+++n해u#рsex'HAĈ7rFҙw~~1m`jR I^LKlJ`KFlCF?W:^O*z=FMW{{ALzD]NtFPjoBLm"ALj@I}`>RC W5:)=DW;=X:>'X5;W8?AWxKh;UIPk>Hj>GX`$=CEW>:^B(VJ80@_Wg;EgWv?"KiZ?KG]d?Kf>LmDAL|o=Jl(=8KMo> Lp@3LpA1LlBM]hDNixCMzmC"OoERnFRnsHRpEQ~o6GS]pEBQqvBMq?!Lqy@WM^qDpQroGT4ocGRoBvN)oIRrI0M^fMC6FaFO mLV:pOhWlOPY@mYaKqjjwX1}~zeŅGيŮcˑQuŒcc sOrSO|mP{kK"}{e]y鄜jz]gI{f{LtVe;x[Ae\^LGfa{V|u\ccqAyr@fيo-s`IKօ _1|qt鉠o}eHu4hmRjYFzmlN|qa~9r]"{bC'}e*Dpoa[?cX*@aT,;dT@:bWCkmgILjlӶ-+e\߈&yƝsvFCp^Z]𒦇cfrTTmLYF#fUKlyl1`~lVbw9f3`5ُ/r}jkpMy?@MxBNsEaQrn^BNpAMuCO4uDOt&B)NuBTNCtCFOniC|Oo]BNuAM|xAMzw@4Nu>FMkv@K(y@JydBVNaxCPPqvBNvAwN=z @Nw?0M+s@#LorAL?mAL,jrCLdjBIZ[l?EV94Itg;hHh!=Hh9=1HcT=G>YfJKV>9LSe.=Kn=iKnqK>r4AMqBkM0mLCRMhCN@iDNmDPp`FRoTFR8neG#S(oERn9FTpERsBOt/@OtYCQDwLDQ3tHW@rHVLodG-Vpm^hr~PnYuO>GdEPm8MUrPUmBT[o_ixKqtP^zwst zʬn~Lutb;zgRnVtbRIpua4K5hvb8x'ڈyĆycp|`hzK}GkGO o&pX9nn;d>}eDՙ&5yMt驅𪐤@g6߄ę$툵qwkRseIFm]eKzxbfKw \B{wfDqCgDqeBqalFqabGpDY?~ln|K=Wx&: zЗKpUђk=bnޅIlR~g^TO@gY0B7g][?pDZEy]F~hMM|kMĐ}_co [@XqϦ@mť|oҨ!lZ>cZ`vSq__JWzcHUtZ|nr[P{jP\rMbMxz3|{«}"ӄ[57IcυZߨF!.Qո(qFØ)AOv}Ր/pZXk"~o mCmaYr$Iu"w%l w㔇os:bb7nzqx˙r|Gnmhp^Ԋ t.wܿ- jE!w[Icb;^7sðwk]!{hWڎ(ʜHˊe8ƥiR|7eDOwaD|u.Sڕsk̅ecVɫx3bu |k Mm[XC=GuZqP򘘌y{`c kǛz_ztC޿ߥ!)`w2 ԋǩoϾ0ޤɆl}좼p!E{iFɹ 4ԍ-WE$=SӗJv}oj{RZTLL`QSpMBQ-nFLDW; LKx?L xU?K vf@xLpDFOkCzN\n{BMkt*DNuDFOwCNwBNtsCPzrDGQs5C?PuA+ODxOAdOy_AOw?tMwo? Kxz@qJzBUM xCOZvCOZv&BN"xAMNw@NtAMqqAKRlkBKhCL:eGCI[>hCGV:d;BW:I;U9=kT#4;V4>W9`DWI6Uc;EK`IlqG?J5tALtALIp-ALRlAFMMkDNAnD Pmn~EQqmuEPRlFFTlFmUkFWmKEU9sDCR&wB[SwF+ViyERwG;UqIXdlKZgmCVa{vtPXs Bl-rRpaMQ}og;t°㦶Er1.s9&5vE@x~WBt]ZŜc˕4ړ3c8ϛ%hufxhk>Unv2L lY#ȗTrd:s+]>Ptc;t{h BUwhiJ/t^Gt`GwY"?s]/B%xz[_#~>BmCgksb\ȐQn~Œftlq/Skt_It=Z@s)P{_5va`pV`p88e(zYcHJaQF]hPDFYNE0[WOIFZN>UJ2>TI=.gfZ?Cj*^hJj> Lqh?KpBMmCOnBPlqmBOqCWOrBMGvhAgNay@MwJAYL x@KwCLtAKopALhBMnlALrDhNJxCMzfCNxDOt&DPrDQZsCPuoAtNwBO)xCPtmBOu@LxkBLxBMvB OhuB0Ouv-BM:vANu?MsRAMwq>ABLl@SKdkBLhpB1J`?BY<{V77A?W93DUY6=}G]=%I`>lJe;^JsjVJ2fP=/F[GX>@I,W;iK^~{nGˋ+qH؉oMGnIiGew8~\P0oYD[P$Ci\OC,Z,OD@^PI[&P!C\QI@:X0ODyqQcRDwg.DkZV?rlT?quv[@y?`qB%)uCWlmc>tHvڒtƧnYgM?fheݕej_dŕ8dLch[-HY$3bji!uÓ0|2p箌>Ӥ6k텬nĹpǬƌ7ɚ:qҪUR6!tx[jZw×yٺTmwf:iom/hcđfk\ߞt伯vbÐ.pvg틑|tp+fwy yR3Ѣɐ!{`җ}]Apu~̟Uɮ3XJY- nmݗy{SJjB_qQHEg|jȺTcEsɉ\vKaHxW`c n2ySa÷'-}޷ws1#;(:AuYEK@GzÐu˜VFĨ@g~P^[۽h$ؔb' xP\Ra)AFCX;?KW ?4?Q:;nQ9?Z#@QIwh@1Kvp@+KrCCMSq7CNLqCKP.t%DP!s?E&Pp>COqBPsDPs&B)NuALwBMuAK)p=AL?lAMp@LtCM7{CFN|YCNxD PdtYFuQiseEzQtCPwGA,Nw9BNuC'PFqDPs(CNvBNivANtBOtANuAMkuAMs@NqANNn?LkK>Lhli?LhAJa*@QD\;;W:+4EYrMGX|>I\^=3LId<Luf=XJg=OJ%lG?JEq?Js?PLr?6LVp?Lns?cMnliBCNnjBNi1DPh GLSgGzT5i`GStkFREoE!RtDQuFyT?tGcRrD,PTqFQoFcRnH{TntJmUk7LT3gLSf LHUXlLVn|PXYhl9SHXnRW[n_gAkr{hƆ<ɡ46Ԏ?p!xPnޑ𿭱_0~rVyۣzӛEzy{G NΣ?P%Ȅj&r0y߅ta^9{i;Tw9eꥏZ5-ҊLߞwl|ੑV~lswQetb61qob>iXfW=yTmQ᛼Gz$Lqd9il brxȴ~riyM }]KnL?eS?K_UC!d`D`>v[|;"fR ?_pQ*BlZO@VN@C ZOzGuWdPDPLADdXKz9lHVnDq"\;eR7w^aEJjhIoqSv{` i oy'{h@qDgߵKDh_pШGs"sg񢝍eǙ瀥Y╬~TɄW2PƊsIfS. Mf0ĤrLjrɵ15%h͸좴̖ŠxK#PuĎAŅ(Ǯޅ~Fc@J#n ALrBM8tB]KSl=cLgk=wKe@Jj_]>NFZ9 ?EXG8Lj=K.g>+JE`>GY|>F9\Ks5?Ks>Krp=/Kna@ Lnu@BLkEMgC"MdSE}PgyFiRhGSVk+FQ|lD$PoCWNCrEOrGRqGZRqE:PozHRlI$UoG6VqGVoJ%XjoZ3]M.Pu[\E nQNmM`gpFA{u]k|t/z͑rwgXidryIv!2oǘ&md`ޑwJ]|+J𡛈PTH_?5GکQfB{εo[(Nȣt?Ѕ~ƫК:)F`ƲOòR]̇cpt7#nn% tkyhwNmfgӴRk)v]xѰr⁎f#{gL}.R1@gz~~bDfԷ[rBttɻB˭b vkr G"rĀhXz$qhj|k'ݞn. wjXmQL͇}h>7|Z>߂,NΫ-A#҆s_qR+g|MG JgծԚ݆3I)ٰCCXpfnskwJz@:~RDz+tѝڞE+p }gpocf-MOPJ8J98'Q6:PJ;yMEw`=Ku?Lzq?Kow> Kn>Lvj>Kra?lJZjY>R@DY>=h@WJ3fV?J/dB=Iw__<G0[f= G\;[EV=FU=FGKn>fKoMAL?oVC0MkE#MdD;MaEO|dDPgFQIlFuQMnEBQqHF7QrFFQoHTDpGRpqHQniJSjLWnGqV7pEW{pI[mHKZi.LX1n;P\6sOZqSe]|o2So^mBSk_Vd>ldWipv`btef74mpؘM~5ÓP @NY[a|Ȯ,~!,vؘƪІױEQL ~#NJ~EqKG[.&1HmuσylƜv|uxe2fӜ-H ۄ=yyNwdɓ͉c:xm2nwT{LxHۄsCqrdF&ynPs~cCu4d7ndXm<-iCՊ&dT˖.uHskgezլvQ@F|h){A%tk؛S{hxaYoHӀgrC|5fIv5dGuvvc9FmZZ@<[RNjB$P`Fx>TK$C1[{NDeSlGvdoI+r^:jU2V:J -jSO@kS^k M΀_A8vHɞ9q)Vu%Fsfcڮ5ga-oliq˵hpζo[qބ,cٗH|K3I6&6SQ9tQ:=P9>R[;BAWX>Ff@HKuBM}4CCN`} BM{BMGvRDOpFRNo GSqWDPsAO/tJANp DnOlCNmZCNq`DrNtB;MvBZNwcANuANrDNNpHEMp>E9OvD2PxCQuEDLQsETRrERzq.DP_rpCNiuYBMv@M_v@Nv=?Mu?MBu(@ Ns?lLKsoZ>Lg>fK\?9JV:EjUF59>V6:W=?W?A:W<'>V<BW0=Er\s<G`_u=Ia,=eIPd=Je=LJqa.= H[IR]SAxLf^>1Lik"2Ks8?Kpf?jKn>lKp8@LoZBMmbCMWeSENOaFDfN_AMa^CNSjDNvneFQ@sNGUsGfVpNHVoHToHRxkHK;TiKVyiHWjF~YMnI[pMK[$oTN] pYcrxYg^*mY1`kYbm[ffUmfO"|iV6{g|ˈEo{gNj-%| ˏQ>TCץN?gUײ9ǟ͈Vp8\6xЊZ dyY΄jNaq*"Ӏ>PӄRÕeb(ɦt҂q~ɍ0q8]yKnVr`LL:~lgSH{zLLɕ~OwS>}d.rKts:?v\D>w_:vD5܍(jٰsޓhj^YYj*Oª|ꨋ{S:~vȴHtb|CMbmIEjRJgCIe)Cz`DEoCVDYLiATIAWL\B^ Q>cR>bQ':]Py7TDK0\oPu8Vvp`(J!k N~auHeFzFQhnbp޸enf?wBwԥut_g@3`2cZKFŅ M&=YuŌcIm;i:|}Yg5Ջ ńo |=ݩFS fjвu.D(óhCȃm4IpKbvC䛶nOkɴDpҲwEoPceWpC¥JuϨ^w\zoŲ},AXx}mytz,GG 鯥QceP^~2bk`'ꗃl2+vTxxJZϘ>иG>{°{zÉɡţ]rr`Lh?˧o?q hE}|c\DfGy$aM'g޴&¤ Σтιlr&DcZ-c/hDro+6媠P]J E hꚶ9CHւvބuyuuFh{0|zrҒQq*}z~ruqd#WhU9B;LsBMwoDMmCM-rCOtCQrBSQ1qEmRlpFRoE4QqB{M.vGBgMz@ANUyA7OwAOKt@Nsp?QMuH?LHt>:Lp>MOi=]K]^v?JXB]W;>V;BY;rF\n<H_I]/?HU >GpS;MFSw9jEU=H\?Ka=LPf}=&Ljq>JOp?Jus?LKqE@tKCo+?Ksp!?KpAM8nPD,PibFPe?D-N`BOMb@L+jB9NpEQQs6FSqFOVpG%Vo-J*UMnISilKUh:KXRgII^YeGXh6IX%pIJY/rBPL^q_fuq2`WahUa`miaa q_n'tnLrqMP/q\YhodNk~t.t,&wDc4":,@I9Rw򯃅 įG߻Ϫ@5(4PAt! Ώ)O NoSaf=c2?mab]LzeH ˋ9O<eϮzMc}_VkFxqZCC<_{K4ehPr=4}iH9Lp{xCgưlwifzĖ̝Uˍ4oygHyiEyQoד3ir_:%ć av@dR`e._U5ڕ{Wwtvܛe˳z[ޙtޏ;s}ol.vmkm~0oavS$wqRՃmptSK8| w)pKK1B_XBFhAHuC-M ~B4O.BM|D5OrFfRnGCSqEeQtDYOx:BLLwaCM;uC PuBPWxANxA:Kyz@Jv7@Lr?LGqBM9oJCXM oBLpBNrBPrCOQpFROpFYR:pEPs5BxMu BMz@4Ny@kOuAO9s?Msa?L/w\>Lov<KqEZ8@Z5>X8BWJdP=J h=J;lE=sKm}<`Jwi=Ja?J[hJ^>J)e=JiH?JoAJr+B|J;p|AJcn1AKo?*LoBN\mhFQkGQsjuDNf%ENfHCUOlDPlsCOHrETQo_FSnG TnJSmAJSjKTiJUfIWRb9IpVcJCSmKTpmQ^jq/\Ndrbgjakmlnrwׂ}mPei$rP-m|ɲ0`x]u{{ poŮQhc],A^]g }&FɗHߖU؎݀`Fv̀t\9|Iae݃ l#A|օ!:3OEƘx-x~谨nr2oX0oT=eN).`WLJ 7]m[MNM[Yj=ʝ f WSgef{$4]M9T(J2\TJ$8aQ\<^cRI=dS>cT@i7[#GzkY ?p^Z1mJTgQxzuyXP4@%xȾu_בRq r"pƴ[lqK#&pĂpxwphtQ\=}o? $IS[j33UVp";ڰԌ8Ƈ>̌ʈT;jzK5Y~QKbx0؝2{ŶYYsejW}Vz@X료h{>q4usBu?{NJ>Dό-kϒ;-&Ã͂湟)sڷb&kT՜oqW{ G{҄]pҩRSVS˸!,m^ͫqkL[ƈVO@݆"RoOsHH{iC񑩅Ak8?mȅ~sK(Uݔj60S`0fEq@(8^:u۝ٗ%&oѾi%鷹qq8~}cuwhYj pk^_2yr_/Mpe1@llBƒ4uxXA(xB悷zWXsTg?{B\`=?V89S9?:"Tv8:GS89V9 =Z?DcAG:pBKyyB}M~A>MzDOqeGR7khHASl,GP,sDxMw'CKvuD1N.vCQxCS|BP{#BLwABK\rALoAMqzA:MpPBLoNAKQnAM9pEAXOs-B6PEsD(RqC Qr DrO sCiNPtBMv*AMvA9O$t@Op=C=PsC`Ow>~LGu9/Jp =LkALObCIWArFW6;#AZ8?W:CVj=>EV<6AWvY=dG`.>J}h=Jnz=LKYpHk@@JoBJpCLJ~pHBOI9mC:Ll@%MkCOknFQQgk G#QkEN]fDMaFQJlDPrBNMs?B>NozEbQlE RkIRmHQjJRRhJTeITUaKdUd{LSiN~WluT0akq[\hgxl_so 2vY{}XvOxa|yVHq!tp|TƲq]Bᨦ@׭;´BdigKô'cN8xLjHp'vnafs4o|$th+uVk~̾j4ĘgԻkD{/N,I曱wY*/xrHCjrc=nt$nT](d(W{Ʋb޳} ͳޠΙUzu̓`!Z9o{wFTdcJm zoM蠄dʶu~=Щ;~Pxu}@uq.lѩϘmtUIoӅvEfO.XI0[N_8UP=fU0AgV;6jiU@iTCo cN~uA]2Ef{zo9~i[gUgeGЫQ9ŝx_zq0nHn,DiP̜+l!mJ)q훞q㖆s֒iiShwN0itȎ(2Ċ̩l ϲ<ʱŁ"kIBrùw֙~69aHy}ۿ<xpzkb`✽eo )w~'zʦ{Lk ztw0ȗ%zaŰ)NV鰖ljBn{w9"ootR~S":g̭o԰).{ԣя.\ԉĥS~gua}ZDdW[C^YˏhڢF.rՊtLboD嘴cЫaFz⾖t.mdfQm8e1zmJ; $uF܌~Daʑ݈tϜ7؇T*ܣ7K| yzmkmCod^~XotWOCOxVL4TuwY9[wcMJJJpg{]mp\TkHJdj@CU99R9%8kU99V89JX7bD^AVFVh\BXInA Ls3AxNfsC&Qn9FQRfFRgGQ pFNrErLqENrLERxLEUF}C P{BKuC+LoCM{nCAoMqf@NAqBNnALBk'BKNnA]O2v?nNvA PssCQsEPTtEWONs,C NuAL}vBN@sAOSriERtFrSvAOs=Mtp?NMckj@&KbD/JX@3FV);@%Y8=qW%;@+V>BV<>Xl;*@^JFn!?KpJn@dJqAKr.CKqCJAmDhLAhTBM|fA$OeDOhnE;Oi"CKb@J\UDN#hKDCPq;BNs_AyM-oD!PkEQ2kFQlGQKjJOSfkK-WhfJ$Ud/LfVeOzZdUZfS`NpcXqx_y~o:j0|s1 Ai|Ӛ M~pzM(qd~6röHz|yA_`m}ɣ|ɐن5@hwqޟo5ˊ`ԇ~} {I}o+au!p0Cd@t~*gpKFɸRahҭ^rc #96*R } ?tW]և hٲ a_٪LĹqIȥb.D ckyڕ@^Vٖ8RQυ]d,WrFI"yM|ݔn;nkxœ`{Ǧ=wftgw}mnszhċ\Ǔ0mzs0zKfP{*]ID,r_5F2`YBO d]IIs^ Au,\?iEZF{qU숵qE}Idmp:DdQX,(cDp~tw ohyjufƼ7ljp]n5t%Ko w֓q/3g🶆X>_vqcIoխc] ծȎXWeZc{:÷g9h|Hk2iƤlfds{ʛMWɷrEˮxEvƄzȂZm.ʾjXa2|:y!rAwЀ?Ѩ׆V)S\`mDޏNՂsUpnχƉRTd^F(Rlj GE{BUJ߅Li7oM$uSBn'Udy8wqJ/:oŪ@.l桮Kڍ;j1d)j3mQtDOsXCNuAIMcwAfMt@NtFRwAJhZyNKt]Wy1G#X]uCePmj@JeBH\ ?aE WD;@hW8WW?AZJ=T>\:?b<^Gi>dKm>BKl6?TKoM<{Is6=ISo@KfR?Jy`a>I\;4HZ<^G3^*=Ha0;H0f=Jej=KwmO>Jq@/LsBMSryC4Lm+EMMjBMd@7M `DMeCMjA+LyfF@7Kdo?Kxh7DcO1qBOq@CLOoBOkEQkHFQkGRjJ[TwgKVgpKVg=LYf,Vu\`aRc7hn\iqmxu݀UrX{短b:ʋqxܚj昖})-sz xx×r%1pr/pSqMqj}hXѧ[( qk~Rm^v fWUҊ:wX1ה<&Mu2Z\i( P&VĹG6FiSIZ~w&&ooNz+.h: АI7Glss!*V̒wgK+rKyrXbh5qb!jɽܣVqoq%ܢs+͛m#oͤl%ZbOvN-rT}lF va#8z`7gN}/v;xqq~vkTfsQ4x܈IȨF}klmСbR<*l๛̝nY$˜EN e7o8]Ž~}ny7@ůWZcы9+s/ Ukj3_$c!)^iA5tHbv6]z{gN`y潐Ĺw%O}.M{m{bƖzJv UDTC<,:fK}?dPKPF XkNJ`.JK.e FKb`rCHW=BV}9;VA_\;%C;a=pGiALo?Kn ?kJyo<5It]tJUh?1JQc@=J^:?)I[x>jH],?Igb=.IfW;Ln@eLrXBDMqDWOojB}O mEQokGTukH|TBkJUkKViKW$ibLYh][`fs:xsftf|$w\gybGGv |8ܠ2#/4U%7~rsb^F4FiM3m HtݤyEȫ}Ʊw~|voԏozXv]Gt!cM8~zR4J={a:{,tȥ΃'aTxǙqxǸj0%̩&KW΀Ň8۲&5SxrޕuDqrۯ'pVк{Q:Iԩԥ"($Kg u7E5e~\֐2wbVvn)cjſċ[ixtZ{=f?w x؜b1 Ѱ7.̝͊G_V*aX-w͡nsunh쬖eiVo쮂yvq pjy 4v9~qUi k@q^wG&W'Cp18`9 v2JS,=6C{|O`{›p7ɓ3jQ/IVWXT`pƺk|ʕP=ϫ ǪRVvGƢ"n}Ж]&r[+īވ:ڧnoɞXps!kiƜ?uЀ0̫ j?ѧ hԯKyv?:Hk3bτDf6ڛ~|̯J'ηh}f6scԔmz,߉"Ĥ`-*6ɩF8\gZ[zIqebxyE،j/^$=`+.i>}lJ+u\tš)V Dz*}ՙ֋~dqű9EoRGiK7DB[D=VJ#H\^FE`ax@]E!d4BJbBKb?H[f<0Af;><_=zCYP?\EV@DGS:>T>$BW<AZ9@f`=GGj@L|pA|M:p>Jl@<JnJ%gO?ZI1cA0J`?I]>MH^$?H~aU>0Ie!k׮`®_pxVSX={݌FbxK_z>XIwlﲋ}ʣG7ԧצ46ШνOmmm̑-W}pŷ̢Mw/Kyn˘kPDUpV/zu٤Dž킪H!kBزpgFu ujkR4`c0_AӐs8K7ʲA7:ip{emm{%fUȤPϖk0F3K}hdpC`}BސgV% )\$!^4{,bD,qY!Tvθl2zIƋWϑ̊E$w\_Yo]JGNCG9L&HFzaUQgGFDd:@c(?If@L+jN?_K5o?eGlC Ga2IK\}FJW2@HT?IAU?ImV@KWDOa GQ5fExO_mDWMyZBKc]BKvdFO mE`PuRHRnxJUwBFOv"BaMrF RlXJRYinI~YrDOt@M{wBOvxD@PqEPp7DcO1qYEOIpFR=qB{QMtxAPwBOtCoNoDLMhFMdCMh?RMFn@M+nVCNRkEZQ oJqYqQ+Zo5GJPdg>IBZ7=SR9U>R>?AV=@"ZM: ?i_C=F`g!ALgmAMtk}?LeG>Lc[>ELb0@Ka?tI`N?KIaa>G_>yH_$>I`=FJ d!;XIg=VJk?=KAqA'LBx@LyBNz-DNxBBEM"uCjMqEO>oH&SoxGV'n~FTpEB'Pys>?Lr0AKnF#NjEOjDOjDQiHUjcJ UslIVoNKYlNF[=hfgeBI{[2œw @}O}Jϑ!Q#kʊק{ؖuijWnݵh|P|$gz|C̡+})x뫿!ln/EOcEBgY1GaI,x.l  yf=KJ[>(dI~cyK+uUJyVwF_~-iQr`MWzUoxE0 /L; ȩ~x_í~Qq+OyR[z a,_f\oC#T]yY˦$BLKsz0[=כ㫤p^߆򮓗^lʎ`˃iC|jNg:emK|8kTA{b>~YV~t|[oz%ĭ @wCޜI 6Ξ؀Zw2mGeDήȔ]-}C}~Rtpgy-:l yxu>Hlsٕ*u/qK-p60jfq~wgN2yٙ{ca?Bى/EoHɍİ8k4u`'Rud~xm7|eRt{Ztl sͶ՟Ə.Ze˜k/K. g޴ޔbu?}w+db*hxB<ڻКu'n,z0}Ω/FӜ,ԫƁtj{iły5,\xhV okۉ!^wCQAbĵޛ{t?}8l#kʘ}Mۭ%Z>Ê㯟BѭO)}`Xy~lCgh20ZY0H5]%D_No\X;u ɳN` {-:|_ Fy׋L}l?~iHViM~FS?{H5FCTfkyŽϗgly=cEdAIh3AcMo?LzrB/MnLRhA[F["gOQq\3A'IR=rIcT^?JV?>JSW9AK\CDTNbfCM`BL^^UDM%aGOhJRsFQOzHXSxI^U[vG1RvrF=Rt|FV7q.EGSo2D8PpD N t@Lw~@NvDOKtREOsYC>OKo9ESPmkEQlUB|PCqBOt:CO thCMRoDLf&FMpa%DnNhANp~@NoAOlB@NsmCP`mK)Qi0G-I`xAD\;a?U8i@{W>@YY0=0B\/?GhdBLk@9LtgAMa@M]]@PL0^6?Kgb>Id>Ib=nG_=EH&_zKxu?(M{@ZN|/CMyBLqtBLqD/O&oHWSkGWiFT4k EQlBtOjA,MfGzPeFOeDOhvCP+iILSjIiSfk2JVImLLYdkT*_i@f gj߉z1dXh4R{<~Ţ򜡂‡K&Sl߅Hw槯ןQ~qţ~a;UC ʄٸĞ rr}ǎk/}\|tbO){dI†YzdmM t엝8~}o)V{TAyZFz`bXIx|Y;EXkM6nTEzk_~rXH+_F;Wry޻ 0zij a {8~H9fO|Uduu0g=: YřEnqevvלaɟ9c׾Uȳ\L?OGæ:Gh뉅k kGrT"B_MR:@pbF9l/>|+Q͞xȠzG͒3_cY4w'7bwOj8/}`X Wd6`lMΩ'KįkXۋDaʃJ"HhpKzZ1_]{×sr/jr ӗhٸcnͳAmNmNp8p؞yAb{Ȭen=6f3jaĭfCԋy6x\ gfv˞f~ߢ``unm&mLkzٗskͿ pRo2Pjh'Cq4T쁌A]ͦy@~:tStf(҂¬@!N٪|&g칐Ɵy4݄[ѭ|av]JH]şz{ nŠӊWUpC"tIqRh[pvșuڥI%qҡchwc]ѬUԯ>Ї_QGϷbLΫ1ũ2‡qޔwI,_4*[9u?hDJrÃkȹ͡K k\ꈗ˃͑ UBvzb9fiJinOFN@RABD`1x!fx0@Gb-DH c?CNqA N\sDqOp PZob1d(n{TmU~`AHR<HUp>IZe>HY?JYCN]eBMD_ANN`DO3dIT8nV b}P]ۃhHT}AHZTAyHU3wJP\xv{NauFV5pBO?oBbMsAsMwdAN\wCOvCOuuCOpE]QemCPmCP'quCOs_D{OtBMpDMtiENSeC,N j[@NLp>N=o9>N&m >Mm&ALIjCG_DDEZBC'\KX8;Vp=@W>AYz;CG]>GeR@(Kla@qLhAMmb@ Ks]d?I`n:HKc9JHf=Il/=qJs>Lw!?May?JMx>BMw DpMbsBLpDOlH5SiHWpiGWjFTj[EqRi}BPfLEeQeEQdEPfNEFQiHGSkISiJ!WhMXhX_jeioԃx;nŭ碓٢`.$ؤ⵩P~֦N?L[1B"{g|6ddj ؉aƱb©Ōҹڥ̃|ХʳB9ɷ46ĸ{ϊpFbxH[BtWj爝dь́rlt|^HrL[o%tQo%Q4s EPrLXds[]pOOv_y?PEQ=GU@=Ia[; JZ`?dLWDCuN&VGCeNXY`B"Oj_D^POeJVoJZ?d||Y3bTLwWJSU|JTwcO]rXepfR`mE5Qj|BMypB NTw7BNwCOuCN[tCOrAOpAOqB\Pwr CO sDOXuDNPNq>vNp?2Myo=C1KjA1Du\gB0A`WAGBZL2Idz=sIi<@Ih Գt@n^[‹֋wA&ʌը4nR"[α@ ߳R1˛і' o>fB:{YZշyl:kk͘tpqlÜބ-sGn8*v;lT n>0!83ඵmW|g}GUX|E Om2&lx0&}:Vmɗjdpb,r6˛_p=apgYrSq 7q6ks]Mw[lRW~[t^aʭIhݜJxc´vuCzϤOBԕ~,q~HNAbJǓİuNcALSwD% shC%n;>wA鳇c z/dß"˩u/yٱfyz拈S Lj[wCrP}5̏sՎoJ]~5_4.ki?wTX^{߿4}ڢlENsxxiC|y l~v>wՅY&\v.JuJ:dMCE+`MA;S@9OvBFc\DNDoHSweNf]{R]AyiS!W rKL_BE-Q*@HeR?KTV=KbX<'L UAM3SCN5UCN[XE4PbLSj{WsZsV=]E{R*[2zKQhwvMPvoMRlMdV#cJJT/b=CN`ALkAN*w@BOvCHQOt*DOHrCOqA`Ns?ANst=ANuBOYtBPt%DPGuCOqBbNEl=AEO0n@zOs?MOu@N7v@LtxC_KnsAFZ_@CX?>D];=B\o8A~W~:CW<D\>C^_=QFRe=5Jn(>K pJ@Mm?JDiP?Ji@-Lio?Jbd >J}^.?IWI?HW>dH^?<F \?I]r>J%g@(LZnA,Mp@IL2oYBoLpCMfkDOgDQfG,SgZHTkoIU$oGHTpERQqDQ;lxBtlw)wHJT=LT?LiS\DWLUDLn[FP_~XZZdkiHvhqD^h}q/{>WZoOOOrIFMkJEL^?IyV@BJ'ZfAzLh B&Ov8BPowcCQivEiQtTEOrCOsByNPuBzN_w:B Ohv[CPktCPs}COp*C'O nBOoA!Or @M*v@Mzv@rLzCKs.AHb*@9EZ?gD$`_=C`D;#B~\=C\\ >"DF]>Cx_? F)d>0HLk>9ITq@yKr@`Ko2?ZJk~A9LLhBALb?J\AKX?HWe?iHw^j=E\T? JD^?LeA_MjBLk'BL/ixCEMjCMMThDoOd&GRgMGESlvHTjoJVpG'RqsEiQpDPlOCMh1D[M_HRViHR [F%VhTH"ZpIUrSLJWmRYkXG]lJcdorror-cqg[u yldrsOch݊z㨗ϭZޯ[,ã^ʇsUˆ%Yųĉ}ZYf@x{hQt-_MgNNybf!nu(ӬSNVXkJi9n KO eeo?Xbtg˙pʶAoֹ,pR6u1qmshȦx]cxl1K{ĝj~9͢6q*waʟdr}:70vzJȘɯ5I9wD̍Jx~vEk𥑏c➽hܚʈeOzO eViujծ ΠZΧ GNΒoMWݳ³/-Me+ `Ћ#ipIYnIHw&ZPezJk.aywx ΆZ.~0z cU!8'Ć"s| opp@KIW<7T>yELWGO8\IbT`eNfi3RЋG6܆V狾r4uvXIZoGNiHDMbg>HV=HwVx@LeB(O%sA@OuwBiOwD/PwD7OuC OgtSBNtCOucBkOuxDQtEEQqCCO?nnD7OmADOoBO;s_AOwD@$NxPAaMwBLq?H?b>DWt?_D]9@Ds_>B\>A/]^>DG]c@E_AFc AHfpBlJ)l@JpA&Ls=ITo>Jh>BKc+AQJ__CJ[ALZ:=HhZ;BF^L?Jc^@GLme\A$LiABLi.BMecBMeACMMe^DO]b\GR hBFQn]HRlqHSm$E$PlDOmE@PGmrE|OZlGPVhIR[ITMZH2X5f:HXpIVyvM&Xo{P7ZjW]qmfuepwv{vdknh_k)ajl![a~{hS|J}Bˈp6OǮ5֯mǶq.{ֺzc~-|X*#yO5[)@kMzxgPފzg9o^|Oa+|!ZJCmd|{عçیV#rёuCrtmU; fO7qU@@ XimXtk~:ꡤZmioEgDz\,8!oS 5iT7t a?||eCdY@rPޥ`zc1΂;Mt4p8nTefCpkY7;`T:_T#;0n\@urZ?EpZ@l^;@h|ok\ kMŜnTsgv.b)\~f pp#Cs~Wױ8Cys5:? R'a;7wٱnHPӯW粉)RM}ߤ#`}͇to+z++1Ʊ+G.3Bެ.ތfܨƃA4as̈v1H\x.khpƅzm͍Tw }{*]mAÑ,yÿ.Ռ"ίsӺXXAfáˇegklr>mҳblswaw[#vAO@plaqttnv;zŗ7zԪto m${r1 ~FkQ}*5*qwޙsok@݄%,Ȼ(xħsħ|[$}ўwi"_awrXp=xL홛&P򺗛tփшӰ(qB<ΜJCΰ83֯7̺E^.ξ͈Sʑ+ƞNѤ_`񢌎qwPV.wKR3rrcy."ɓHK 6w>+K yUb4KՂ~u{n s`|/~Zy jgpt`NTjD7FBeC7B}g[G?KJ,X@NdCOnrB\NvBNNuCqNueCOBvCO$uBtOdsAOrCPt8EPtFPGrExO2oC OtmBNopBQOetAOwANtAN s@L o@"J)d? FW@E3[BF2\HAlDY @CUZ @EZ(AF^VAEb_AG@c6C Kf'A}Km@L s#>.LqIX]vLXnINZgSq^kcgk~}{%9"sux-w?zYwl"Foo˜W|,K{ߩ܂gPƱȉįֹ#{y'RDr+oHSqUU ALx frN~jpUA}f!mpVSfx療t} ~sKv HqR=cCL<@oSbCf3iS&xb7| c2xaيrTjIym.FlI(nRP3k9Td;zfD[lG*cfW?bV:?ilY>u,a=>u`<v]>|Xxpoϳ_\'n\tC~iWcYhfÞq/pM#v[읲|"zZª9CEŇ~MEd1Xg0^̘@ͪ<9v!rߞ'g]kի尸0¬ʹǵUl%01ǧJ{ ];YJРfɞzq^qωpʝ/qisALrsg8觽ۯ{:;7xl\aqzue\uNV}]Nm_^i;ݔf!q˾:zx¹s2ClRk–m1ߛo.m!ylƻșom gdYi8;tq6}zۙvܔgϫzbl{ɿDUAՉÑyCEu7mEMu5ݢYyv[tTw^W nl.i0(rI}|K ޙqG`ԓѦ2ΨԊ A^'ɅQQJʀ!NjˣYO{[yX(~(./SES#BKZ)FSP`I.Rh0XWofOsZe*cą<}|kC[DxiigKIQahBcL\gG@cL3`@ENfAN2q_BN'u+C+O3tBMsBM`tDOKt9COpsrB=PrF]RXtG`QtFPsD PUrkB;NnBNoBOsBO|uA!OrZAN>r(@L1nBJc?EW@tEY^B_F[AD#Y@ EW@ FvXn@F:]S?oD_@G` A#Ia&@Jh?:Mnj?:Ngo{>K3o?JoAJ n?BJ/i?Ke=K;b;DKJbk@MgI@Lf?L&lf?7MqQ?Mo(BFNcFQWF"RTE9Q+\FRjDPm@D1PkAcMld@LlCMlqFP*l-FqQ?mMHR oHRkIUkxIJX nIZrKXlmO[iV`:kfi\k}+L~| vw'|2Cryqh 8|ݯ\ Y* ۬ħvH\X-qjGe&P=o\M%z]@efE2wsK`[=fԫ9!aєe!mЛn[¼-j]ʛ=iuҜjK%-jv¾fV-c\GgӞk&f~b]шw_T}8`#w>@+{e/%Sf>i]^uip;Xnt])[wxn}aZj^w3SIsZr?Z*GrM^TB7sDJW燁,{РdȆZHȮ~9ͨȊ/ 3[ſw~ %7k|h=+͔,œqLj%kٗ, Ȉ~KykАuތo숐}gr ֆy|ۅ, kymv[MsH!Ht J_Kq=ROAgX2_eJhsrCψS:^a6j"EGS?DS3DJ}YKSe^fwtmq.kF[ɋ`wVbÁOX3pŅ%ksXo[k0CM lBMRg@K&el@Kl_BMqiCfOrtCMyukCoMat-E`OsDPct1F6R'uH UuIRZt2GfQirD/PqCaNnJD)PFpRCaPrr"AMq@LlAI`R?EVAEW@D\i@uE%]AFZw@E-Zt@E\&@Ef\%AGZ?GX"?bI^`AKnfAMbk@LGr?J4t@J8q@*Kn-AK j>KeLys>_Lq BMfGaQZFQVDOl`dEPPkCOmmC Pk/CbOrlBNlDOlQF;Q5lFQnhGQ4q:HjQ[nIR^mWI TnIkXnKX*ldQx\AnY3dm?qmUoDyc̗ˆbe1Q?~uI0jwz-NOxo߲lw۪78ԬHkyǞLb yk{NTndYf@nWKpxd[8xcTs[KufrSHTR,}a߭ߡ xuzo|h`& xQ`w6jUzJyLdׁnOhU|SqsbM쬽{p\cmP-nQ/sU=9f FThCx^Du|\D+x9]E{_Dσc@4n|KtaFyfQ61oU?rrXDs^ErO_XEtdaFzdefI([p"K cHE򷟰Qõ5X|{9ӃxiZlc%|itݕnefB:V:xd+IjٵѤҷƉ~U7ͫ荞6Қk4(dYl&szxiȧ /ȭO҈\ˤa!' ҪV)ǧˈĨ%*$62{zd&u󠃋Zcˎ*wOyzd@xWbu$cAxxh]gvظK(:]r }]f{:_zhJCyfIrS`c`Ůdùǘ me0p^miwak}>ibgdeV2`@a΅fȐ=k)iozX_ߔAzLhl,q\TXKRQq]Ŝlƻsű,psDsv֡ v YwokzNhG1yhL~ r TֈyWn8\Qu `Ws bҰc*FͰ:E~Ycx!|ɇFf.\ǛȃŐROSLMQzfڌg{ū<.@,S}Dh4̓f|x!irlg%(mv l{uxr"q.*&uj~Q=P|J!JSvOJ"dg[5Zk^Er(un}‚dPkTaMAgET@EuULE1J[XNQWFkot$5~ڙσma*1^)ۦӖdei;rSG;TpGQk4CXJbBHfDK nD+NsDOwEnOuEO'tFKQv"IuWyWLZmyIsUvCDPqDPqeCOpDTPqBOr@cNZrKBNqA}M`nABLhAI_I@DWAEXb@D[}?Dh]AjF[AEp]AE]AF{YAG(V@EHU@4IZAYI]oBKHfAL/r5A\L1vAcLs@#Lo-ALRl@AM?k}TsӪmtzÖ,Wɺ2_i=Ǹ߂67ԀNgwߕmn펿g&_wP|k?On^#N+fSKfRVD vjQN)ޙOsߢaz}ÞDBU8Xvm…t2&}jm}Mn{eu$uv|Zxt+{u$p_ KTjHR;flWTCrTa2D(in;jF kN~gKzaPEesU>rT:ycCjua@f(R9ihrR!?wDWEyv_BOu`?s]@w@_UEoTg˕elC}JfaƂn^zdx!d܅e4~bQ,\@ g|G]@ic8lTCBLJvtbNÌhb֟6e`zz h%ss sƮvSdyP]ⶲaYTcn2&fD|ߦ#u^j~\3ww}XXAȩat水ū΅pcdqåX-eyqҕSmQzkkD| cGMqb+¾~p3ƾәrˠBbw^mNKrv&cEylH͑|PZ3{bĬ]jT_tPwQJ$sDBn-#lºi'hRbze_oe)q|wnpm\ˇ~Xfz֕`aGİmSɃ0w짾z ģx؝#uj+{1Tq{eAIt;bcKpP|Xɚ }^bq#NRQ΀hhkݧlxǭJx #uq/ĝí9<$&0y;췀Jݪ ᛪSADpҌ|kx#m1҂h$Ƒ{̞Nv4w{p&nXVԑЗn}z pca.iShvlPil[}_OoR^CXA\FX@nFZN?D[@E\B^E_BD%`@QDo[oAFXAGYP?@G[$>=He]\`Xš_u_MrlܐcǃM~vv&`J*~h{G3m`TpwnJli?AzG=6pNӆmxe(sRqlsE{_?sV'@w\=}gBs_>Fs]J{]F\YgB<|f!=`w _>twPY?/{eLqNyK΀VD}W[ wEzdFo']5vPQ'j+8oF}lHncEu\R)XGh3eStIp7n>JZxFm{fOS+\4i=o|-)lfHY}LAVFVV_iu%x:磈eWw5h\l_bg8~>cuy}YݥX󵤠"է;= ?mbgĎ I0ۇܷY}pэJd u[%m$A@*ZxqYߕmϾϭ[0I"C tϣ fģÎt/rlU(qAYWF tL^G1qKʓ}!WO_r,k>v_&xƵuƑp^?zn꙼l;*kZDdȚ^ }Re~sqyFhuhvO%5aѝ^spf̵e֚j䞨r?1VzQzz^»xɠxmۜs˝čgsS wAd_KGnKp]{S(傐TӐ`6hi )߰d?gϘ ĭnq{hȮwk|~ymiބƧceL00},>i=T"̨ԆlXpxIzfrlw'~Iqnp}NlqNbן6Bzu`o]|}ʚ MR:3&ZV}~v> )xƘ|VQR[B=CaV>BI_-JQ4[tW:]\@quYy7[kv]zqƫޮ9s-TsuՀgP^wFNdbFGU|DCWEF$`bDJce^EOmFPsG2OHwHGS{Sv` _gS^~$E.Rt?PtBjVzCRwqANs@NrANeqA0Nvn@Kqi+@Gb?}C[AFY?HFXY@FR^@Eg`ACaBDc?Cbt@HF>`@@HZ>\GVY <Hy`:Jf=K kdAM^u@oLOz+BL&x@}Lr@Lq?MsAM]tCMsAqLVs?JAsAKrA M"oAMkU@MkE&PkHgRUoEUQpCOsmFPi|HRkJ(ToHQ>nHQk G#QkxGxRjGuTf^IAVjIsWnKX*mM\hj\c_{aԖYmv~B@u:^BtaDmRRHgBsU*lX09_nN80hdLm8X7C,UE3OdOCn&]4Lw[iH|nD7b噫~)g}Hw8Kg"c᷒%g陴r7—qQԚ|뛣zܴfݾn[vAVgNjb8~|[:7hGp+ |ǛÌ5piq+|d/"(h/Nȣ"嬌rНl _nyE$g?х!tXsօ|v'q~$z|~Yw^ro!VImVL7mRozFNx^}NǜA`6o?u.ŃuU&oInvqnYcu,[s]Ycy}hەwr省s2tyIJ="{sr-tr0wPātŀv1zMcv=t/~yfԡ.z3oz}V|iJ<|Fm{O΅`wW N>;UgtwګΈΦczЇVtR,|8upǠ|{QΧrũІ4HʮP[;Mǂ{Ӄj\qRقE6xuva&~8j>{vEoȉpm~v׬}|tÐpE/P>łkլ@Zέ^$‡M|TSZBE-UTF/N_8OVZZY]1\lmou%ѪّɃ~< QVEVP?u|r{rr~:P[Qt=DU*DbEiSFGRXEH`BH>eAKmE+OuFPM{FvR|!O\d\:cWm_ FRtBsQtFXX5|,EUz>MsCANr@>NspAMwo@Kk,A,HeRAE a*AsE]>D\t@HF>`f@Eaa@:Db5ADMf>D5h@G5ejAJ\Zm?HUӹYȼRJy_]U=:Cʯì)YuΡ!h_l?jo?FfJGdkIOy1bInVUFm`TI`cKt?8f SB}qvMbw-Tq|jDta=haU4b Pr7W>F5TG5 aUM;wlHvhTtmUsnGH[yֲ[іʲQP =Rw# zv-|ǷӔtܰhYѹlPLꖬ\sXOsojkltugs#j~3W 0nƅqƞoywࢱmUmDŽjb}opG}{bD2xddN|}{iߖ|yrGG̟ԃeox/\vpD\KbuaTYs]5}RQ}RRuma)덑j[EDo'snOr'pt&pюc;}Xw}lMU{nZjtʖw}%Ko띦gqS yaiwFHv vCs#n(p>rf{)NQklJ}pTey_XY\lKDt‚̎\}з/k7RQʪ~;5vhy\ǂ Rz^ec`ho׌.Pr>ׄNj?σ6Ǹt}?t?u]͎|iRzB~lgKa䟀yтzijxG'ɭh?;¿}ߧũ5GIˉF[g[(_GJSIPZPWXX>Y^7\emhn΄|x$ĀįsՑxspEsg]i,_]qJXQlAMx,B[NtF@MoALqoAJ(l+CHfnAE`IAE6`p@D`@E`9AE`@Eb@Elf@ Gi?Ge?5IYh=zI*U:\n4e0R%WpI3jm;^`0(tb0Fb^V&҉]a'Na4^#7_/6k|p< pu<@zY_.fՑ>} Um@/5}L倂 >=&}ϯӅ_s|cF;/zH]ЌwHz(ǻl"F@Q|ܤ%uە{(_S{Q~e[rkGn#SnUzfzMv7bMiSJbm:a>OJwhYb΀I\ B{]}wxcuib?nAa?7 TK%6cSDxt]O:˓mhKhd{ qN3MvJ\5oRAJϴCϥ܌sƂGt$<"ӘuڮopͭLuL2an{6xߣfx{W]{z`R|W]{d2+knВJw&n#F2fӡֻ͈A ґVv%mj8 ^ZsSdv9` HOtV럫q ?̝˶HXuUC|mnT !xFhj5k:ZJgt\m|pEEj˵izmtyzDutr y p3d|XAqT6r.Zɏ`f @vР-7uSi?n#vTu u!DqEynAOnxm(kƲhge]ėSzN-CunO}|[сܢcƍu ˿?Ȋƀ+vk"vt$ԏGff]n}lY֕/uמ7vaowI#Q9db=ԧɣύw@M0ŷΨs6 !SHkkeVL-PSIJ$SSWL?XSuU_[eLimv7t/qDqm<)|(:CwptAXRdWVVqoN TipEAJ^D>HKV:F{IM^ERH$cEISeDIi6FLnfHP_qoGnQqDHQs(NT9uW]wIKVuCM`rCMGa>~H>YJm]BLlBLq@K3tD4OpVFSanGjWEnES nsBOiA|MdNCMfwEOiEP0hoF6R=gGR5eH6RfGReFBSGaIFWfI WjjKHYflPZvhX6VaSm fW}Ga`sHaJ7%]-`*0o`X,^-\x2`z]1gm`y'ʈd'$}d8vhgG(5uZsT`aIxT ׺솵`拳q ̶ڥ)-PzȌB}hnpBѝC+q̟pu}}gûUT?Om$]k|XٝbҢŏp~&_HQȈزѧJcf~˱Ε6l󡱍c(/WbxM֓tNrD\pD{|EN-rhLdvC~f^]9}b>jE4nGp:K؈:p8MiqCRJ}UlMubMocQ Sw[ nOʎrzVc?gwUlbGtmX~nvMaXxg~Qu'P̓Xɥ~oe%⏿ķJjA=䳔_x9V͛knP[Vu9b`Z4 `Nᷗblrgd~TWvpnCsj Cfm]HpH{Tg v~z t65.߲N_qQޠYX+ w1r pYmrbxS\|tP͓hbu$xuȢ ͂sQĐ*hΊpP#l6n0Ifzk{ɸVlHΖSeu;q8vspnApۖ*h:TXzW=x9`ŋwz;cv*k;$||kߋԻ.b?¾;yA~IuErTlqilɚomjC`kdYt_TNYޞfh֔s*ql=v(͂ȭSȯΆe92Ņfȩ/}yvNsXy?@#Ń>>][Ƙ~~k"姢ƲԯqUo~V~6JTkߎd^:Zt-Y|ژcxijðV9_՜= 8%3ɍ.͙Nwt,frQfS4QwKSjTKdZ3SNN7^\d[!d]pttLvI4wg[gpl| ,xpuVSfTV`oDXl]tIO+eDHXFJ]FVH^)H.G\FOG_EJvcWGN~hGO$nUGNwqJAQsV]*wPZu5ENpBKBrD/MvzD2MxELtDKniCKkBI8hcCFkaCgEZMAFZC>;F]l@E4b'AE`@KE]@8G_f@G@b>`H:`>I8\=[Js^< K'iH3`P2b4ׄ~b/0do.#bk){^a2usY`GuwnS[|u\<~"Yrsjƴv&"0*҇ǷPpFtTTdu-\Qm=[m su{F rM5yŨ]󬆋3z/Eg㝦Sa=}|կͿ[SWχʠRwItwzk5d}Y\~`[G~T>^̩zsl~ MT}\I2AuzZ.5Kh>둲rBaqGpBnH#h)H+y'bUJDmnWMwZٛ0P,uݘmn9oyX9q#rJ~Θ}Z &X[׻«txMn0#<ώ`ͻ͉ZϤK=̟Dy >0*>E}T9Wa7cf"i\v)D4sJEk?,,j"C nJ y]ٗ-]+Moavho9!t' yx rHđ~ʤZ9moʙ'~ʌnFsJ]|g[@puiLNy@WVTnsXOegPuhxñ{ھ1nai]ܜp9snHpa@JT`AMau?Kf=KlR=(Ms?QP6t?N uALvBKz@SKzAK[v@EKs@gLp@L*j@Lf@KguB=MjCN]j E OfdH-QhKhSnGsQqkFOPm5FOhEOh?EP0k]DOjDPjG R~hIRmfISeIUcIVeJV_gLYiN=_hlszusyӜ|`fMnDcf5c1ꊱb1rbJ2rf6e.ՆRh4gd-4~,dC;xgHum\qwg΀+cל%Ps۫sÀK@fQ.|,^*˦p-W-`^țƍaV~_&rL҉HsHh|ӦT!u%uxlw7OƆjqԤ㈪KIފHZ´~G¬~Ǿ{@ɘxƙw~~ڻtI{%dGb}{ɡފzm\u9n+-AtVxY#~JujReVtCk>`k4vv>3rPJIzIjCx`AsjTiCrj_RC\nsZўRQiw^†bƠ亣+O+xr◒zڛw5G_ vO}FmTS[ʁڥʲZċK̎޴M=.Z=)6qsŒjƻ~mWo4gEM[9}L٣ W?g u}Սfz_tKʑ:vRD}g*zCiN݁pDӘqվzf%f:l-oH%WAkʖ(lsweQrnݘ}4|u6̗r˼{Լ`Run8s^x ~=p{…}Ć߼Cs4e-fsUl,}CkN{hoCyF|h]y}ʙUxhq4Knhkjp/w̖9tҋf]Z^Ṷ\dkAp`xP|̖;{ڨ=y-z{I,9 I%N֦#{yp_NimCr "ys߁ս+FJ}hٝp|+Ft^5Ǵ]U,ݢdxma"t~7mYwT;u}u@ǔ x=`a,>F)ܵ͞+4ufN|l\e\QNNSQL^UKh_Ok8npNtwV 4^`ͳXU'*m)i$sZ^u/LRniAGcCEaFAG;^I,Kt[*P;RaLWXYhaNQ_FL}TsH.N%]FO gGPkIQp'JkSsJaRqF.Nej+CHfrCGhBEgEpGnbMEFXZ9CF[AB=F!].CEW4CEM[MBFb``BAG aAF{c~BFQdKCF=`aCcH=`QBHAaAJ`BL.d@vMIl?LrT?FMkui@Ou@Ov,@Lbvt@Jjx@K*ypA Lu AKgsAKp@K=j@LKeB&KbdiDNLdPEO*dGPdJiSflLUmGuPn,FTOigFOeQEOzeFPhF Q]jFQ}kiHRg|J^SOeISfIVf[IVGg|KZX(gQ]h^b my|-w GptŌ}ph }Z#o?D `-^1ևLd3dC1d;҂Zd?jB{'nH]wpe +y'ty=GqM{pv?}2ѕt~xf ` ~XxEǐ^ X TUpJwSܐ]rq{TBֆV`׶wbTQL~M ga Ce hA~{~tšl)Tj2axҥ`}ÉYdznOrb0͆:ڲ.3>,mǏ *|Q\Ԋ憨٠,+et`5h_0Q]$b[!^g_[9jri@apIxE{@&RmÔiYˈ.cc2}u{"{kMpz|ZR`p@B-E_AS@&`ElD_ LLaXY%kYz[nlM"Q!aELeWGLNX`GQjfJ]]qT_wR[@ybM:VuGLirB D`DCcCCdpDcE`=DFXBzF5X_A"EXCE.UCFVACPF-_5CGbBF9c,C>E=dCEUduD GbBF_AF^AJgt@LHq&@MwfASMwD@MuANv@M{wALxALKwBBEM"uAqLVscAKsrBtLtnBKgDpJcE]KaFN(bIR;h3LDZkqJWn#EOpCFNSlWDbO8hpCO.e F Qd HbQg{GQAjGR_hiI}SfJ6UfVIUeJFV fLyXg P\{icM%xm~ۨsh豟p д~=ODw'{A=/vEmw[ưgU^a/ٛcPumR~sOh"Z7d,ugieGzl`?s,XEBmTCE4mOtmvطd Ѥ8vın]5~ԤN:֢آg>ݴ{qأYˣ'bJ~0M:ߙ/,xU{?f3ckMGnqn}Jksn5ϊkq‰?SVD/g|Ǔdt~};|knͤ)`Zɦ`XЪ1IT: ``}cv媝|wK.s%ɾzR`M¢x{v÷ߘXqmqIWyM0 Ʌ5T%{ йȭdy.t|Ɗms}3el{_.mTXxނhȓvw(xȮ|kAg)p۬ĂAZҩό{ǀꈘx_|xjWj`Prqfo.qg!knnSrv|.gU(qȷMΟ~j~X{BwvgfjpIH]ME<@P`FzBoaeJ}JeNSPkKMhFaHaBH_FMwd4LSj_kvxAjrk`eHUYsyIMFkLBRCYaAB=dC'EeBDaB'Eg]r@CZ??hBW:CE/UDFGW.CXEA_BF dCVFbBEc\DFGfDGDbjBGZ@VF\BoKi?CLt?Lz=BMwA-LrBMt2AL}wARLy?KyAIMcwkALtN@@KZt;ALrCrLnDJgD[L2aFQO`JHS4j LT\woHVq}C Ovv0@L"tAk=kLJMtdkw^8~Qo`}DߝΆDێ4leKqoK{ɳs"08בϥ\ܡ'_]>87C+dTAEkdAEc@@Cd??A^'?AxYB,DVDEYVDE_DgFbgCF`DHbGTKAgTKNe{CJW@I]AK|k?Lv?rL{AMwC9MIqCqL3rCLs!CK6v?KT{ @$KzwAKx@ Lx`@MvBMLKqCRL`2g~oxFtGnejowLw]ϴ Ɖ'ܑ%((qdMڒfzgwWyURjK-JGeED\&EF _*EFbEFTc#EPH dEHb@1W>@UB[CWDE^^UEGbDwH aFIcKMfORdE/LW?J[AKk5A\L1vfAM{rBM~xDMs.DMJqBwK,oFALJq@Ly?J|d@J|V@L{0@%NvAMPqRBLiDN5^BEO:U_DQ_*H%SiGPGpe@Jv9?cLz?LIyBM8uCNlDfPkEoOnF[OspTGOl IRgIVeJxVhBM$X{jMYmeo_rӖO؄9."W49ٲ?=H}ȒYx&xƁi|iujsn,?JO˛n}et+` au_kR]אo!y8poyFݬׅ4&HvfY/jDt1^BK)sFaBJ!}gOaanǠp9.ohh칡{0M`f~%.[|V|i}~ݸzcjBo8/oMrŌ̘[WVF̭ {ˬͱcΈӓ2SElQdOaBvQ+mJO|fThJWGv{MfCipAucܖqi\2oP˜(plFw}[I8fBDZkFuPM|tPvxyY tOk,)er}Q uXI^{dBoapSVwf󃿻Т)HЕP̀i{ hÅģ׊†7ȉݞ{CՒx|j~fq~two if-kwz|ȝBi͊):#T#ݎ|̶pR]Itbp~~^ZnFFV$D2DYoEG bDkG.bEJ[bHJ_MNt^LMViVdx7xZ{vTa9?%T=@CTFHXHLGfFcJfGiHue;HGP]JKVDJT@;I XCMjCLt DMz4BMBzC*Mw}DuMrC/Lvn]BMpBcMu0ArLy?Kwyx?Lpxu?iMjtA NOqAxLjA8L>aBNc[DQb?HRkiF_Pn)ALuA NVy"ArMuAKqkB`L7l&CLlDLpMEOr9GaQnHShHVGh6IV_jL\Z~jS@^=kmyuHp)?ַwgheۺ[<E ݞ;b|a~PGu藧R}ɋpkw6myRs8撳Vc;}t};_dw{^˝ˆheHd[RZoE'yzZiK vofsڱrzSi5bQ>bqR9e$N{AsZH`r/X?vaiwʠ5w1Q\^ o fե5c8G\(t{;kl舏ru߄U3lYJvﳙɣDŽ}?Ɓ~\6̎!gx$ IhΨ{~XMt$%sѸHǗiZ`e9 _@x^Hn0Y@nU9esY:itM򒌁Y^h~%6YO&~AZE}le:4jKmz5`{۰\y*khMv%CxX7{;ۿށgKB! -mŊxLPs4QqљBfhg{}Ht6?{A}PctPgPX:OycFE'&jtŘqxm>jzSmM,zWv;E~e^U_डYpP~ ͈8{6|ƐeӉ'J}@ y>q˝l辻oǶjnohro2ar ujMp+oߝyEpl֝k͢ŔlkGDpp}pgrvĦh0 TiÓ}4z!*Dz-CiLZ [_kWryyG\zŶ{Ģ"w1ñco+qӞroǥQyyς[vo:xw$|zYKxҹƛj}Buѥg5I~rAC{"Wd̋nՌ!`_zkJ*yo]}oP6qÛ4n'xv2򭐍AL=l煯mL $ΥمsͨkਉAɇ5Ot-#Vz ttz}n2og4htVtv͘Ii'W3|UmykGqFimLEPOE?UEE&` EEkb-EHbIKbO%QdX\kagv/~$ыℙTs)f!_bJKPADHYA3V7> S5kAR<;D3PK}LSVUbh.PCT nQRgmJH TDEPBGQjBIWCLgCLKsCM@xECLyDLw{F2NrF3On]G+Qmݦƕn j͔qnĬ41|۳H?w{oŐdp*ʒl}tFQ2ffdo_[^n}/HUyEUowG@m7GjO9:sVx>{O lO4$rZBu@k䕀\u_3nb3twƎ҂uO7¨r׽ƾ%ጆ6Duoi,k-swɸxz2\~ð{uAxt!Ĭu֥w3\s TrƜwLўdts!~bz¡}3-p_5 ܻ9RQws/O㉫qgFS}^kxm{wjP/oe2U{zy2nnFs`iY+ k}ƭrʲ;9Ơئ=~KJǧֈ@n$p|r}rm`w(tv?Ylk3!ƲA^ ԯm+[#:럐b|wqYLRHNBUFE-_GJFbEKGkc6JLeRSi_`HnYblgoutrD|c`gPPRMILgN]AH!O=GC[O@DzTO?BW=AU5>kQ6CJQ?EP@QPSto vuCvuz|vWblb*WIINAFPCjJLVDTL0e"DLpODM2uEuMvQHNsIOqKVnUboRJUgAMd@LiD|OqqD#Mo_EuLjDM#h(DM-hiFNhIJP mvJ#TrJTqC~MomALoANl@?Ld?I`?oJe?ANnFQpIK6TonIUkmGXkBKXKjM\&g4]*en|:EuB'uUF?+z˷c`<(q kȞЗ=4Ɯw&렌مѨZʂ+eԲlӊq;0HX11))XWto\a%i¥lGn#pjb|_KDoXHnkJSsjVۆ nHv~jwvkh]sZ>ErS>3mn2WtJueURQ{dBtnry,2sU[t"bm`SH?|~hCq,1y |#uys"xʊ ̱/kƀiϱ'KS\ίG|҉vŽCl#agqJH^DFGaEGebCAHwdI"NfMUvUkb_gqK\>joaR1cdK&PxUGJkM`KdMNE`LN?HM;BDL~=QA}P1>AdU<>U7>6QP8B QAET5YXg ϐslaz{l:MOOA,FM(CIQD9L+]EL0iEDMpnFN!vjKOtM\S"r]Qiat ovyOQ_wj#?8L#aH?^LhJDO=r.E>NpD&MiQENciGFjOiHOgHPneI{V4tHcXvuALoAKn@MUk@M>d?K_wAQM4e:BPkGS|oK{SmnKWlYJ#ZmLZlP_k`3iAp|xZtu4gٛʃn>"\ǚน΢憬p1z,z¨Vۆ߄<:cL˰捘B(v¦(r56qks~uv!kYlL"}tm[{kڙ~d51zU{hzvdhdZTD\KK2J^I5\NJmBZK@)sf[D^{O_\,u|Hgbs9ykQiI\JwcEHxU`@lV5kl9~hvTz~c Axp[K`lS[ z7hS׎{b^DehƌsPh EsFVD>xxYKG~bXvJj'A2NjA}Og AOeBP iDQlwHlU~o,KUmLYmK'XnO[Sn,Tbk^ek&zwHpu=x&{*ɗ|&u*|mɨLM|&}g|‹wY{ K\&k̔GtOtwx8Ƚ +Ko}d~,/u]v̙xh#rIb}kA,ypy;kEۅs }ol^HJc@PJAcP4=zjOI̊|pΐOay? `3%Tlh]B=hX\/Iu:b%Fvf^a@gLQ6El\JTdza֞|=LlD| W/vUR٘܊8p$~xv򘸈toM afD~}m8Ŭ4$ɯOovč;v<^oY}`\J~t'k=qmwT{`vj#M$xˈ||]z^}bX6zSd,tdρ\as[/{ ˺}7tʠi[ W&`ƥqݡ+hlZ :U7ے-qϴ֥cwd c ˝j84 oNxb}bZw_cpVNAoRIbyb7jgpgPG!zv\9qaUy7oT3BmT5E}l7U@e1O1rU6q MPu ycut}h:Oݮ:u&Ywuɻ)}pƴ xwsśt|~&9|u}G@I-u{uƝtog&VbĠl@od痣pCឿzsǕعI`)΁֧ޙp|*kq`rkϰ/X2J?!~upqif亹m3dx}t*=[kuNG+x:Ya^҈DaYc{ hp~C1쑫ju_0Z| [rٖuw?}eky\ditIV~kHL~emXH;uckc'jTy|ʁM׉c̩Z}6ra&_o]èw{Ưȋ\'ܣ+39qH~iohw^l+m}U|ťMR[KNӶ6GwƇl4+8؅NJs{unh\-YcmVSePRXgcVEVh"aHclzy~~K ?Ku)q%rjL^^EVHQWT^GRT#? OEQY=K5O:C4P88;qS;7S Vq52ğzxf!vbtSoA}r6|,ߚ}әu0ƃyKm4`OMZHK:_/MUBtkYFrWtO\岬~ת$w5e%Caxda`pve,nOweLMpMbyRtX끯nbg}mbsVa>r|`)sfWl]iI1{hPLOxbvb~uVa'tޓqwX:k?\waprz!©iENK󪅉¹^ZPHоVw#qN$tV{Ip~Oوћ*g nrPh?}o~mrnkB|sqY;xϓӒ̰Í2[&6ijs{p(^3oiCfeh.db^x\]YVYmibЈ}`^aؑ(T,}2pie^BX"]aW}G&US?+QS>LcR;(ES 6:Q;8O@C?mOAETHLS _:]R}ƒx\znAxsPQP'BCI>@PDFKCGQXJM^rSZrpXuoD~{{zt= wyskXIBKC`;FQgBN\lE!PpFN_omFMmHQmMRco~]H[Ho~nk8s+tWw{ԁ݄҄Pd%h8rFLcDM8h/@LIh@MhDNk GRoL0VToMWUmP+]lqs[m]| j{ubXnqgn t*muuz~vƈq.[ut㞝Ӧ7y}oZkmdhuWs1ꄨs۔\ láq5ܓFq{k^\Ms|]_u]Մ3Tj5vóN>IAƽ4ڀ5{#{|k}]ij=񞚒Xyދa}AsoY[P[ZI1>UcOCfeN6.tUDsnP||_~ypDot1_=kT5cQl;Z[OC8qdN|nO9wbGqj[C}t\ˋWlArMyZw1ltpb Tq`BrBfj Oی1&ĝp \Ջ󮟍.>𧯅c逐~Ҳ؁sSҿ82!NNJӭmevܳLuh~|x3Gy4F6eguCMn@uC]?tUǎq&HˏqKmorٝ\iڊ$k5ϑ'n]i0w]~|j,^:xlր@z̥֢,g"jDŽi)=cy\!0*u_HmUlCWHqYNDhIjiPA}h#Y{i[vbRn1UJikTEk\Epj`Jy}cMzdJ|}pTQKs~~9opx*i߇}*˄'{#g䨢zmݛslҘO۲?ĂCužxןsYҠ`tuFtEu`{6t5gcۭtՖyę x 2;z陆Ns{s]ĵՌFˤyho9̈́єٳş֍}:t_wFjW{vwixspc]*]SYTPyr`̑}ݗș7D&OtnjmdYs_{YGSoS>=PQk>LQ<;ES2n9Q)::ALD+DMDkG VIMWa\U݇t~қɛ•~WzfnPQTACM7>AK EGPCNZR` cCmw$~#}zww|*toRSt3z.vjHN>_8Gc'A:NXhFPk0G-OmGKNmHQnN|Tofbpyrznrxz~I_qPrwLQZeGiN9f?AKdNA7KfELMjBHRnL VnMUnP^stgz|χzp|yfnqyÀR WGhYiol{W=~%w͈*m}0jSxgw7T#5V1bZučoxi\ύsU vs}lb\mpScVyom^׌s󦢝 Κ:s _D_oW{/pۧ{[~?zK@ъvkˉ:qjIl\ZkVwoYMh"QsHj+\;NlUuARzIhP؃}j{Ԅ]wybhA_K5OZLF@][[NkAjp^bC`yrjJyUeHh@؀gAӃ mCZoFGfw ZMf~4a*vB_r]ޓ{fUy𿳦DtϪҫ:vĄvsd kMڕ~RZh}{S,6wqNM-f {]EIl̴t[qAgzАh?so /qsv-3tޱyIb1؇Qz$V{]p(\_P^v[VEy kC{t qVimh8o7AsƹwĶ0v1x? oGrXr_JnJ[Edr]xIozbgRWpWO$wbYuGiрjnbcmqSuz&XTv__mUV \jGzEWG~IڡW~Ws)“*{VΆ(]FpƱh/Ðq{ۺzƨ0wӢ]tiBtt? uhDlz{PyoFTKcķ&}¶zl=SFHRI/K>WKKhNZf]Wχx`?w|unk;klsOPW-ACXP GhHGSVZPcoux^Szr8tyomy,qZolwiFMMZ8GZj@L]6FP!dQF?P jF8P|kIcRmV^8q_{wx6q(4jێ.\o]jHL2]aAJ*aCLgE^N(hH]Sj6KUk[LtXUlK\5lX1kqzԅ}"mvo_uebsuj{>z֍n 똝TB*kIy4y ^h3Ir!#~CbKkC߆m7k4+[ߝpjyvY]o|vp|ht;{\gƙm>Ywץu\ˉ:~MU|@a^xAjrDoGf?4jAsIw>Q6Phwli)]~~R<eixd C8]!ULfEK-mX YtGwZPS}e{~=$dzjdeucyuvw2!sޭOu>&twچc8)(͊𷝟}i{mmKhkxmxZ-LJ>wAy|%}׼wBs3ђn[b4vYzrmOreM{n`Y}]ilʝD~рܖ~uA[p&Mo4_?dyQh.OzcuYNvdևPֲ~oԤ1V mՎma>v}@{v@yQxAwtrfvSsEHZd2yŪx} pxzpv~z`mo!s`-uszmvG}w6li|iGKkU8IENS=_JEUE#P^.FPe0GPTiLdUmahuA(e^ՙlȐJ>6BwonM)NSAIZC^Nd/EPfIThJQXhL|ZgM[cK/`aabJmeeh^\[o_7adNgG~@~hv񎂉Mo-s ̿TڬYuh&|k5``Tk.fd%jeډrcl*\')]h%QY9"'}![8,|p_8;o%Jv`%lIh5ʂU rCs\4G"{6bHoGnYTt׾SvشUs멳Fjҷ0ۼƬtr˗~YRɖy{SMhdrLSzg}2ed-*t t ̘yXTw郁rQ^LC;fUDLwgH`%rHr4tW {lo{wd/zd\sJvKgRt_F ma6Nsq_9u9f}Qڐ9 o.)͊s[kǍUW #g㮝(!MþF؄}˹f*ڿ׌;묿}YJ݇n۵"d.kNY5du_sGfz=~c9Xt_C&r^]ԕK{e7eA~(R=R)Nllj٘bpnIdHs`z_ڒ gÛ\1JͲʗ1wiUwwEN)~?}BTzGsxLIpQIjJ2r}IlExqpoxͳmw]qmVH6gnΚjlHdu%myEm[Dt~~)t~ߵ|p(elh֕Qf zmd9w yѝXidmᝬx#y:w{K|w%uŎst~ H~١PLyoVctG{},~F҇յ:fŶBI]>zJt uŕpNl8ZkuJ] {jiSv[tbP^u-|[e{ӹs˕n\ax&`^Duͯ }*bIq5$i) y8A{~JV$p>ǔoa낗sj fj޸l|x۽͞x-tOApjXz ]dxkQkygq|{_}(By=qus̹&wvɚrw{ɀ(4 ʘuȉ_įL^=چmwbhyc|Ns`~wi.Zrs_xJ׈Vzܶ򄃬n:i|Y]8\GN/IRSBPVH]@gclOtjflYjCebw_bjfnpml}{ؗ cu~sԗ+Yt]?YJW;HHRL*NT[hhpsx{\}|xt -ْ])vSTYh;5D*OJ:fGSg@_MZCN_{GOgwJRln@`hvaCME:2cI`r΋u[dTToCJ|UB0ObFRhEJlUi KYg)MZ=ecRM_bgPZxlPk@q1xIq|pm3b^K[l ^oKk$yq={ԓŽǦZƈ |#zUi@p8/a"鍎d*=}e+mb'(Vcb)Ld!ψf]!2e.)ekB{zc@JnRHCEuWEm%Q9tz҅t3eoi,+|>{w@spp 1wy_Wb왿Nh%hֵft oǪen잽l{-cL)\J@KcRNz!iL`d+hu՜ϘBgyf@od}qܙ/ocv+WybkdS{z{kk|um1Z ~lQƃ+7@n@cƾGa:‹J(Lۨ 15Π;wK!wsz;芛UUǒB#InOG瘸xBКA(ܮ_p{9~ga~ǸT'zHGpAWxRCGo&sTckvXHag*.xʶӑ`ț3QrQ{t}Up~sua4Hw{qx_)$j4w&xcV$lAՓ#w@WylD&VVZxY2sRpH}d?wB5~%ŞCz?2{ǧ0x£s sx֠}(z읶u8^]uRNr?ʑgfPRe펔y`c3mx􎲰 {llvyt%w7(w̦x+;|U\z2ju ׇp&3m}m?•uSPXrxFmTawo+n w =VhevkLtɻ‰Mծ~ʭ}lؤ恆yʲ֕HqH/yml=duX]$lX}bflwvpo5wgeАyY 7sÌWG mn @wa|l8[q݁[)wMzC]v[}2iPyMdseƗu@vsmbsrI3oLiP<{ZzU\qɷO-}ozd;x멑xz+iy"sEѩk/JۈÖ@KN%}e?mu^s kW)|xi჌Zj)᧨ֲφٚdt%`jeMNJIR SBR*[DOjqxHƆ{7wxKn4uu_{)Æ|~}ȓΒ8syg[_SVMEzEOKSN_n[oCx[2-zw;€P\ڏn7de$c=EP ;fFT>JW\CSMWGNaJOj1\Per\w‘lkɝʖUĉKg ]j^{EhJ4V}DP/fnHUkJWidL-YxfPf[3d Yclmwv5~qwt{tw ҂;VgħЅrR{e{.Ld2.b.K?f*Ui1'Tfe) jN&vgkb+i\a*b.Ã]!'xg]"ֆcceb&1c={[?zwXA cE}c[Fub0qduK}O%t]HH{᳎+Ȭ3[wrr)oykܥA;gԚC^xzucNgRNggUWR}{i!Nbwj{oƤOЪقxF1Cw?zHK$_ߊb՘OQ_ah>+lo6*uĞr,bhc%TvR~64ϡD|bhЅxjd'{Nˊ~ƙ65?gl9G}@d>{luC npH}daoj{k<~dvSwYjCg2gק7s"m۾ Ov*•灗"y"n[ˆqa%uKtr?Uf԰̐tbǭPhֲpZΑlfbtY}n{R8JoԎ,{j-Lk|`sNu1ȥ:v?7uIdwڮ'xcVs6plcؓe _QYW>O[.Kb>pu5(D̥e7ch\fw˚{Ⱦycöy:lAsbxcy_|krmM^)yֻJ=rƬO6qbҊjăejsD0a,"ku.\`hTxs(oנn6όsYFg4`h/CoToCvnynF?n/n4hȔb|%Wv?Nql?-]j~jɌ{ x@֦uwɱz+ʄyiƘQԆ@ǨȊ̟&lz[zqiX}Lzmj_锾PVĉϲġ)0*A=3uDjMxUkeqLLUTyp:kt=!hbx{g[ͬӆ IIo#ޭݲb SlOP,h|}asI|U5{mGweSÛdrNj* WVv ]>~gLZg[;we7*xX; XkG#y+Q] N^`Нb^Y>iTpl\Q`bJ`Eo^+n}!çi{` ~bx#%x~uk&w&mБt qIQzb?~mI~FlLkXssfz-oQ~-Nmɺy!`vAwSC~2t"^lpiRxk+qq[s EpݷmJemjhYbEt]Llk"%|de7}s[zeyE;{b6qa`=ɉ MFhv9Wˆe}sEne2pvbbޣ!}pEhXRhTHOZkVK@M3TW'GVgk|~ύb tN~zx։W,ZǶOVg7WsЎTP,1Z2rdU.LFD^LNO.^Nyvy\Z#LB^BFxGWHEiW3NNgr^h`y>|~}6xpv5]EC޸#&’Fl.э`|,G=gf9Re*8f.f=OKmv3q9Z*_aݙ׈أ rЌԙyBȘ:eEG}R gɌUrM|T0jNB,mTESwfRˇuw,΁YVwRrs>Y{B u8iw]=HqUBR~mTdu}ĤnwCl͐?M𔅎L_WySw>kFJ*oT wTҘ|.TǛk)qۡKmdt|PqIwQUaAzvQ}[;rcUuEDo$Ym>cxD;dՊ@o||fPP<4QBs8w'bKp@ٛ 8UaՊ5]mD Nr|Qk0FexIobH0gpD{_\;zy|\v݊c.skzw{Զi9ҘԚןX|2k4gTǢْfx kɠv$|ƙ x1qأjl lbXoil^lr>l^)jDKy^?kmNő{$ase_e!5w°u#_OǽKTX #,̓:ѭmr}߾w:hᡇUR~6_|S2ՠށR˥}ӿ\yVoŰbɣш`;pyPuXm%iPgnnX.}@IƂޛndkTih/le}Gn7ȗt“u߫Uit~fa n|w)@u`5rݙqzs:r3o,gg eDvrƋyl {>"|,izE|੫b{σެQ1nCKƛ0Ǽ,rжnٝڒzAk{Yw^rpY}fhmGRN_CJWZ&FMXJcQW.N]hAlyqzu%jᔂBƐ̖YבՏjoNğa͇я䁩zza_^LCRYW]d*jkZm=Z6.`&ʋTHA^_dJ{M)S|IMU`FpLtXFLT^JOLeRYbfTkcB7CĖ$2_&u_mMPlV?"MeDQfHO`FFWJASMN~ekz|dܒm瀑TBj3}7.cj *i}XyY~ }53œܜ&4!Hƀ{۔#yЀlنSNq5o?} `D~ZhPZ\yOjm?ߍrjECkF}]ALqJhqcw۠qr;ôƔpܢwGF{c3IaT$JqdJs_hN{p\TiJrrZ̋lgfux7gBs%Wa2uI=wKm[[^PznTY^tgTS{SX[kgxwx֢1uSĞ>&p!׏R2qrdUWה5̓gޣ.𷹟*vmccsТqӛVrҧtE qCohp8mk؟ ?i&`jKFwH^=k!HSwNyL[Ϡ{YpͯI>ܤ(p%f?<ʧiːƧ}-Rt fWE8`@J{u3|P:1~%y˱Wg١MpzF1#e;tn1]p'oR6jA&my|.U@}Y5rj.Ђ[YģXKJv\ûqȺvtؒkU#gTr֑ukqV‹Wnl'pb4s⮬u\gtB]tݽUv¤v|ŜKzi{ zǨ{ʪ\~ʩEcH˨̆dsPĠ~k-7W(x^[qIZrN0iRFt`Ɨ.省V|z}zO]]GgDO[4GkO7XM"SV1U?c?fsjuwRӚsmfY9Eק^Ba¦0Z:}GՆmnqj]fkcloYeenemjoާ pȝH2?fjjMKPUDKvT!@HVSBI\T*HBMZbPVFbhg!msYI]ܝ,?ݘ~rlTSZoAL\e2F#R=hIQbHzGfYLGBS ZYi4}ي5b܊Eu4ԋ嚎#SKH,Zf{ߞ̐p斊g|et2݁{hOf=1}:(!s>,?\b4>ţ75}ӋͣU̘ZV?G}Vn$|gsA=HN|:P(FwYeHsd᛽|w㛞zJpNr{sbmK6n#JLvZZ(nAHI`9]u>'qU>?hAR8eQN6Pc2LCdo!THzj`|u|gbx@vdS~6Xz\.rjfւOlOgJ\zte_Oq wAe›Ey|hހrLމF8r^QxO2hҜusnmn|ft͊ofmvv:u\}V#h֕bp{ZsݙRSNMU^tgc(o`tLQZ2j/GlmY"nbEQU@2oݙxGwfGjӬaeGЁ=NԘ,~PwQdoF\:dv=)}KSp^dDZ-B,Ŵr|?1{\;lWCjWAiWIur`DZz!kbueHJ m…S;ĈЃkwVxoEW{oQ^x^xeNlwpV8wxYԕF^EkPVx|Ϧ-vͥs~E\;O`Ҳ.z_n\^:ͫUSͨÇXɅZK|lZXpit硾ykv8zt}n߭?j`ғi)6fNi~aRiJv^@EnGzxaMyO.u\^2kzۡU#+GnpbǮćkZV:}vfn^ޟщ\R\s֦8|éB~F&xǦЏ`ᛂLژ3Ti.s0Ylqhqo&lKt/*˳'\l>vnk/G_wQxmm6|)\v9H5p7“kl;l/k 3sjCk]o0(Zrvtoynzzz*۟=xDExs.v+'u9u ҩynԪLިŧ:]tрNOzdK5ZL7IQFBFea-Q:u lKgʼnY'b|_DVMQ:HMROuPSROIZaAjtxm]Ӊ;;X_tKŅQ p@~ۍ#Ԇ}-A|H\~\y^nIqposKut\{tcks\cCd* mnpaorP\c1HPu^>/HwU@H9SNEL T{RLTk[icYkJvEz קҁy-?uWjna\G$NM`cF:QeJOj^IG UHLDWR_`!i{{vȇs΃Xk,m{L{ˆY†;nz>#hw kvYkqam;U35nKы|fюu48W!胲"ըG ˍ1✟Ρ͎3ÔE (jԬ}(g͐jvMbЅ苍ulz oiԊybS@{fRo\ށi-LZqvL^ &z1Vz ]Cr\4Hl^YA>2kU<D4{|[RVwUIkC|Y3.~\: zcU1Kg>{qE\}usdJn[NsZM;nQFWu`R.pޘƙv!֌?R}`0sK]i:|^z_IKb'(gᬰp xh4cuYt^|]tl:NԂW@{,੨c˥O**vhrqEpwzw{Ρviom1}kyiƚafW|b{kjLxaDpJdyRq|W"f~gnRDP9`h:m8$հGnK/|5+l+؍^`l?g|שxŦU{+xō^瘅{[K}X㢱Zlqdoٰ]Upp_o y0oʰ Q t̟Ԑy%o.Y0h#ey.ƥ~ƭy uSm`Yc?k\Jdٸjznl٘oLqjscv7/,|k}Tyx_w6s.恵qw6rx nX*GMQĉT>ǘ~ZydM&`cR-POGKP.avc ^ uvՑ,5]PH;f\A`EZFEJNeKLSRaTvOdRUZq_nvxpǐίE^ 2E›94ǧΎOsqpڐǃ qߘŏzTvx x_qw@wyj[z,Qzb.*&+_z~Ef'i(m1_imUMeUmYFPb BNKXDLSUlVPm,jBW;Lɨ';0\aif~T}{qbvLP[DL]IKUI3D9OwTENiagK}|qiΗ!Se)tTz=|ı":xU~ch`;PlbT{unUpSts6\~qGg"u |n$rc5݋z"qj uV qߐP)@4؟]|7JseRrm-uYufF~mQ va6qZc{e"QvYe:y'iƄ}lzrMs$fJBj?^LrWVy9ܓw:wt߃tЎx_ gAٚVrpRrq;jVՀoe A|`CMhJxfR&eRD_K.WG-=\L8x]e$Ttϣɛ9ۧO@v1gόufD}҃ȝx roPwʉ褥krdn#pƢwBs<-vNvÙQsgfSLux͊ ¸H}}դ#vӚce?͕nxIgtMzVi@ ~yb=gG;| b JlxR>KuR] @ [w.znבKdl6z]w9ԁutX}lKr#QiKs8\7Mzjp[.|-pahxnYiLkRpX|6d{(n*xWanzaÁ^^Ogqpl̞uӡtcBUtӣNxA1~塁պaФ`ƣRڥJJF JqǜfM5N {+^wѼ"mhëvnoYZ9Au~~x¿+nzDwcMķ/<&sh@wHrp-IakCmiKAx]τrudJb!Nl1vF`:S RGm|¦Džң._삆Wǔk4/iʅ?lkApTZpVXjJexQHXK]?kTDtpQ\Jp}fiY|AJq ^`xQMU]lhtXs>rӾrRjs0Pw +0G"lwh݁|h܍ksVaƙl6Σu.z |[ܙu 9aZBM{RZ{5{Z#6eڊTgYl|Sa`[jbui˃߽רRVJ1Ɋΰ5|/ЉM0xxpt givYVNV*Z3_ÝZSwpMڛ*{xPWfKp{jMi?tgY tҸӃИ:Rۻ|qžpz~Zw軆vrxIu7]Xil_iS)_h32rN/uju; qo_u깈!{E|{1˝?zYǷy=vvhɱhwʴz(~pɾȷ֪gJv|ʝmS{=e}qLhljj+xA~v8|tp"leo hMR4WPcVPXmIn$X}K|j{}~tR, "-n)YɡΌzϸ!fAƠ*WF{ig|tπm}~}>wqA1vxx}pnVyrnx{lq$v|Upmtie(miL[WeAIN^=I/THmONnktp0UӖL۪ͣǐgr۷ZZf>xyVU^R>BPBSAM\C:]L?LAMrjdl[)"|j'v}p:Bo%z쒥eqbNRuhUvt` we~yh~mᜱ¤|]I}zd3I hvDwWUxcc{r{arjfL}q)Yޑ{}Y{.Ӆc`WWMƉea[~s\O]zՖJJ~y~k({LzfrGƓ^ ֵ fÐ0Tߔ|φz\Uv3_-x7(Y}/揪VtHcriחlruZ~`*#\OlĻ-ZzE|F2o~Se/rO~*oO2gM1Y$K>+g SJقr\ݰ[GūÎɢzr͌q+?sěv}eBjwC+ic ~~)Hnnܻ!,wpx q YkOkq+^~Ɏiͥ#,y${`CzZPOиOvPaN}K8vSHalE6KQ3oEycsar]bQ%uc2V܃tcօvRjڏ{)g}gT pZētsz-t#TFWfuIkRߊ~Liq7| |RdufyI8zm=\LwiZ1njJ nE xQNzҞ |˜h/^OyB$_Γ6Б xS1?͏^M :̍ݬ ,nd%pKSqX5n}ts٢xwحu{LQt;c>ß{VfaVͲgp:0+Rj/׋C\YOw?{KV,tLP-tQ3goSF|_ZMvY9.h&{D䎴fNi&[FмEզLzZ7볛ZzqY8KY~ݗtաH_␣o:FVe>vvhI.ل]T$j’h"f:*nUjíinboSޛy$f׀JTĤ:g#b`Cު= }qŪz~t:penI`S]R{RS%VF\WjՕuUw.]w&asm9:hG圝pL_tjؒ hPrȂ%ɺ}y|ŜKzy@yѩuþ2d) %pe|N菤l&+d[s}]u"h\y6v0pŊӏzzFh}.u`]y$jlwg{*w~i|xva( fv~S~y |{Z܌Cؓǻ򑷾'_ CoR'rrv<~tOr}f3r5u]܉vׂQzTIr/{{s|S,~.zyxT6\f0E9N\?IXpF LpSbdUnxavr$x˩5ꕒڠ'}}yxC0I-W??SB==ONNDMCg_Y/rg ʼn^}:غߡo3@~\@7ow_O,j|SOwe\tvzg>5oi⣡q3})ўR{uknczgblzm Gjrq^qD?fR[D(cSH$jyU EdP=tn{aKތmםgl vdLoo8bL9ԕόٚH霻gk}$2{i.ݽOe=yV]GiC}+dFeyZnr=nkW]XKkxP4m!J\fݞB|Hƅdlߧf1~o (!|ruweRQ0o=3}W+Kbzg~x)ufDhZxpV$inWiBlWEE=t7Yj؋7`҇{9]onr`x"YЅim:tD@rsq)w%wĿ+䭢e͜3ҪшQ̭T~|[nwxOhTDuI|c7Nv̺6y^vrǺ6o+n(U`mؗ~n(Tyw==ۧꅝǦ9ɷgJͨ˫mr~T{ľߞrwmxvlMFgEZ=QƎfƉkl#m{fXqg˻jij]J{џ1ˇ,Òl% [waoY[XRP*^3\lYRa|Drm>;͝Yas֛fv?zsa*o_L|V'9]|X"ssܞyG;} x\H~f|kJȈt`L,hK-nrƳzWhz|~jKlԤӂ7T߈!̂"رj%ё97Ŧؾ}zu_\*CsE}4O4{0¿ oɷpHb<"%ց>zÍyߛlbi|bxfay?rV=-pQvsmRxRp:ZNKfŸ$iMcTXnOFrgqsߺ xkLO»ps^Vyzp۽v{1'Ň׿oJ|Tsk0nQ*~4 ҍ| }Ii2sPZwcK~ l^M۟zaNc~6 ϝأᔒzؔz{ԝ_LJi`~SnNzfgnvAnwk*40n{V;$[Tb ToR{~p(_A&hrVF+s{m>SЀ(׀spa`c~Wr%OznMfrYaLmA^uQRA`VJW]5VLNS~NMCULH;weQ8jR$7rXHFl#aXvcŽD|ĜƒFw\tTWZoohh|kvui܋rHn}gB4,cCˬ9٘'el"Fg[E*wcBu`o>|eTA%jBRdu'ϦYlҫ 7f.CvJLcJ0eD}]旸\7b_쯽`Y}1FN{%}sZuBup_Lh6pb '`2["X k Ul+] ǠIW\ǗwkEw7w&%F~X'ZgDhJϓlAϕs7E6oGsT3=v[^5wFu]w+Cj%:7^{Ci!sgj|Tȍ~`z^snm1yazmC\zkb?}HP߽ʨR«PDZhJpuNmԸoTTu&|H⯰{-quLoD~Tj0f׺ 􄣸L|ÿɣ3~"mǦt L;hATճ-òφҬM^~¶Szqp0^O?{H55\yLx޹$l {%v%,sͳDGr͸ulwנ#pSɈ-ʱˆ̡-˅!,1y{ι3 j тUhjn $ v(cpXoPqHsp{vQÎuPWmLbn JW|Fۣu4u[‡y$~I}Aaž)!NGyyXmݰyb+ӻ\{dxC1tUoIw}Qx:`mPuul_tI+mL^~7۫~̩W@Q*8@쮚$o䊚͛km:A}"͡Xݤrp z*nz}wwL,uSӒׂҋo? -Q95!Ptf`䃒'}.flspIYgf4HVj;V\lvstDŽNjʠDr\{+Kt:_;g:bWDQQGiNOS|GDlSRL@hT^H^xatnmeݣe7v17€9ê‰(ߌv1zapelwlexilpoHqȹ@ ˶ب.j:xr])mް.詔lב|CocJPe Z5JgafTeds\ThRJyPI?SIv;ZN 8Vt\9?&bR}Ao*[Ðӆks>~|tT)g qѼtjgq>V}|Zv^?rH9!otd(nAHoiOh|ajxExb9|fc='~+dT> j$J|rXvo+d Uט|/𜴆iorAp^CnK{a?*j=kΏ>悺m|Y09ݔoq1ag[vzwGu}&Ok&pj2on$ڐgj3H輩?wްO\vb>䧲u0@v~O`/;Q4rdLs(yZ8My~[7 eJ0jdG,jyK]6ѕ3Zޟ0f YPZwS瘁tD;p:ݓtM2ȔgʲLĪf/twAX-u Aܭ\O|iKs Cld.{EXx[KtC]zWfPsIg߅ֹ53Ƨ$=\: Tfxźp*+p-v(\{ڤ>~{Zzו a-o0Ha0l^Hc4_k'zOЂƌȈ Tx@4Ur)ʲG"`xʨ/m2}oY~2r$Jjlz_P h'}VDŃ!Iyá|}5t{ n˹Ew&rrknjgHejs gՂbŴ|hX$~M<#h2הߚAu!`ҌExc}iy_͉4u S9e!EuesLϚt(كNnxͤv z|c}A ЮWʟlNǮ.áҵnUzQkZvy*݇y}gwu4xn||9vAopyl vYe~XmiM;r]EuoJqV}  }˲Lj^~ʄϤ[ʞೲ´Ο.֌Yz&iŮfQΩ䊐ڃs3rmz2Cy1.ÎHedɥc֞ꈀߜՈKʝUI0bǂчUydj3iK(\>a'R_ef3gjE|Ry#v+ 4ۅϜqai~yzu` f;cHQ!TNSZL0KUUO@R_ HAYr.pmwZо$|~ZBxJjңn~]mDz5iΊ|j‾rϟ=zeq_kvǸY|ݸQXJ6&хrvY)iX%̴/͊'׉˃WnnDd-Rk>c^VifZoX;TMNjHpEN^HFaR@qk_5Bzx[Č57p@Mz{Pb~k8n~ыVwa0nRP}waAtnZV@kSF8^gpPQ:]I9sgXJBOn?q]\LTcm#vUucob>k4{/Z wſXMpWcŬM}DcSMEsMX{DPyQAwFtPO`ˎlQ|{o~bĿ~߿%f|>͜erhZrgyzJɨ3ehˇʥH5̆Svdcmzc}`E_ytFUm{d|hnJAU~\b~fd}lr#R則r^ўg~hă ŃKyۤqzi|Y:?ˋ@ܭD򪐉č'c;j?uk |.[uכl:-qQ|1@|ioSvg-QRrYr6sbXu{fIduO~}ơA̩9͠ ˚Bj: %Rཚ̿J`0᪴CȮ ٭Š%bޘ ̃Kx@ׅ@%AɤЍ޿'wBǟOjM''Htck3dP_^[b^gf2d,zNxQuLq󃭦y q܇j(BvF,׶2rӾ9xԩUp܌qpRyiHtjW8r:_9C5sRbNs[qCtyD.-Vܤj4ǰ~]4{Lyt?F/o hĨ}?+Cz?|=}?թ}CR}XDo{Ec}AL_vTC\s2Q~fԓwYmH/e qSxWl4BrŸtƃrwН s5)vךu߶tڦ lmlxnOq&W<>v@[匏sO(kd~Ck f7ĖCl^utn֕f$yZoٽUǼňn ̨c;@^Tf-:ݠ}Zf{y@nJ}ecHu]C$xbCr[ N_NO8~3nmek)|d}zãwࡑ}x_l-Βwކ%bA*j`sÐsumUnįr/Ws+g"dhjHjlWFg}zmZ wEe:HpUxV7u}!VղK˷Ge |l-2{°{Uņ?Bս[CMNyŢcjȤ~-f~VJD8MC|Ojʃ!4d{}g7TlbcZiP]W(V[[R>`Y RHxoi6LjnE׺>ӲVDEsMecUMP_UVyaS\R$](KNG^X"SpKAzwi;AqڬQ `#!}DD(Ȓ{ՎRuBBp[J|RȞ`R'{aWu VwIߦ)%êhשݽI!0Vr- Ҝ΍zowl]`Ln`LmXSKeCYOYe]pElhrh`R3 |$5x&DVFwĶد;7!…pjv1^s_)>WkhT?~xiOA nЉXsVxjvjRj{gS}lw\n]:? qc]LvfO0qJ]xT|§ ;dy^AFUDK9 TOC(:WI@ueTEVXgڜRv.tvŽ}w5o ҂j~ok>7K f䗀"4%7xҁrjrpGvhaDrLs|\u&c?pI/yZH7pqWCBN䌹jOwmYȈxcT. FHV)(buIPl~Cyc?"|>^|s[V uý8w) y tؤrpp yb+rVՔ~gQBݐ«i<ƊDMʇUڜhtbOdšcHFpzЧ@|y$ye{RVp}VxpKxx*[wg@WnOG(x[ƀpX xJyͫ ?'dzhѶ;Rġw#c|tD9iwGݎxy]2~aߞJW6v~DeZN06b,$m49Moigm󶴛I}x̓ΌBax~WƽcQYt"P@wu=lnFb}IbDr^C|k'FŚ=U[غĨ%ԗvQmr`puØpXzMϦ Ωv+[v߭,g=㤀!{Qd̍^RŠMu٦y̝qܕelM/i|d鏞z[yJfGeidXF#s9cP~oNbS%oZw'X:}]͌JɯzĽ-~ʢ y tsӓs~U3펦~庛zQ`ny.ɗt┮d}‹|~N-ϊO**¶~hҙ2~6izG{smz8| qB䶝(˳𬩛D{&øi_"A+ь Ƭa" O𨭊ט܆xhJq`+JtcHdhHԅBrYtuaՈYq*l{3{̆ ޸I=S̀H|4ݤw"in6}i}pDKp[B8$gQ>eRE[xkR]{Gyiun`Rec^SHznsOnۅsǁ6ueGj[Kpj]rm;TrrZLj͇0ɅLŇ4@C~~ՉymJ]LF= TH>9TXG#>X_F\#XܠwZIl軭m~5nsrÜaWqҮEгFܡnLH`ſ2x N񽍹`h uA؄prFrHjrGyRm\NbJ3vMW7j+`sMCrJŸV&MZ'w_{]ȇ*Ky BKzLM{I\zO̘uG˛qD'm<ob#rǘyApCz\B[pQ;jˁqfWeoV╝cȒkUҜqP=rËqşw`9{l}V|ٯHyIzsҒl kQ"xEjw=YȖѣ \XΕs^ؗlfԼ% eB[rȁ7ʵgFÆ}wrw6ejbS҈t KRUtWIcxdʜ׆l螿}n5>|Lǻ҇ ;Jvy/нyyw.~i,DUxY~DhNTa{I(ujØm~=j:qrʔU~MͶtĭ&9 {NjŤsraNaŠjw>b{ݽ3m`pbs\_vgf$Qo{kN'vhMFnbOj[ Rsd]kXuU};}xŵˋ u$$~eOt ^nIuR=֕ CWdc}zF䆮xg@%yT~t~vkя<(y蠙ꩿEsφɚvtrHU5aXQPL4RENrMWORhN=HIw)] Kxwk͔&~IVvK݋D#KixrteePI3REG>eZKm?mz+n/^dtڳnŵXƖlh }Txԅki~5o'ksՏz< oߩǜ zӱu^w|E5jrnȱgҰ gƟ+W;5_s<[~.b~x<[ (\Tp`cAk/;pXDnVɘgwo6Q ZNV땳qHfsy4~^Ȝ|]|RnYtj;NQoL_?nZ;^o\Dnq[.Hj#[#L3rh>Yn\k1M3_XA3kO\?s`ImVfLdUTM4lhath{[Yxgmȃ_UQVg˪앐Oe>]B8X@C=2XG?X0>oU!SOУvlp>N|rXyyHw֐dqģYr"u񨖊b̊y}Nx$қrح^͛^v@Idy_.{qܚ&;aD:z?V}8}rEs`b>c^P}7W5Ooue^|^kX|aKSh"gmoq{ yƎx$(0|pܔs}ޝ Tz ֫( =ˬd:`ĎKǗI Hɻj}ͮKqחjEjz,fsƝUʘ{t zp6&dTOxRMy|_Z7z=h̅6mwwɋŃ͇Z̫M*ypTg݆;2ƭ)wX̙3q͓=nŠrjhz_NyF's$@o/s2@K֫1iFqTp4rsCzß ɚ؄8x`=cb?fC2\# d2(y_R{TmWq2WR+dF^᾽~{pkibnli|Kp|(ԆЌ"uǴ̇c5w}^qgմjYxHHyh{>Y{g\TiZMt8i V t\i|-xk~w}w{\k[aRIcRCw_’Bzٝc~W}Ǥb?Ξ4|^~/v o{a?vc/ xk荕wH L<~֙@}>x1|{2}цQ׮G ̅Z"9 8 5SvHukByܛ}\nU,r!ngcRy=k^K/;\pPE&efHZ};jatm)x䙑ή4^E9`fN}I^uRSz`MMzSzFWup;nnKt=p—wjUfkGzrT{^tܷwԇ]2C +$rђ~jGjWapupO7u@zrC9%o쪳$j*WŔ~eD{FiBqr\ CeR: YK2(YK2l=Rm6>rRL.uWW/3]`6߇d> 3gv `#Ym)xkLUHUUp^G셚W5|>E| @q@~dfA#pr]pKrRe LN_vOFs]CirU3ǝ(%o4{gVve_gݩ?hYl poxrƛ.yȧN̦|̞nw东}ݥ+z̝w:"ұѐٰʄލaIvm羼Av4ۏXiXiѼo3twxFuɔmgd[{Ty\g(Gi6mø䷇3чjC׬lj;b҃tɰ7ѩi~B!}ĚsFsOYyod?ނ_<{YMtADsD˝P啺ijs%q:tMA "|&+GXEX†;i9pIinP m1xdy_qb:.ڰFʾfW-wAۘn@k~g<Ě7o姙|uf2cg)GѥZi䥢~v8tyoGҜqz)Û{CBioO|`~i>RytXdM~=rc^P|yn[UljXI#l[$Poe\ҀpQ]ce!kȱ,ɢݥ]Ίţ0N.~D{K}аdE}ʐ|bsRčk{N`{`\rĨNŒ ݋hXY}l--Fy冡Fò>E^6Ky +NjF<{ofaRR_ULxkHΓهkÙ߶Q?/0UµBX7`q~<} uAzhqdPXpIdO{‍o&qڡh}P,}ߛ{;қj} qVMdH:zthvhʖ`ΧiCp1r2myMe3-<5"Duɺ:v˱xοY/ʷ柇~dxntky"m_jjlxdрҍorķGԣm}uؘ݃Ec4Lhh`oY6m?^Q(3_Y}AjqkNxheygIg+R=bQ8afU9eNA@hZNq%r+jÃukcڢKvJmCkoa.w`xu`wtary iĥڊ4rrcx^U~dmOLjFz_7=sR-1aevߜYrb~pMj E*yJw~^jSJt"^=YxgAi([k?EsjVFD!t!S5MvT-tuP*|S2hgI̍pwVo:_(;wa8Ԑ-tCق'W`U,~{FGу\I{F=&lChQ@R_4J-8r4Uh9 { eB~r3?[pl]d5i7bn/\pޚFmi,9mqϜq›$rAw:,}$Ŕw}rlȲߔczי@q_Nȟ8py%K˗&7%῾|To`a\xPfpẟ7tҵWr,qFarCk%aY%v6Q6vFZ|c|~c;#n!\ijh 7͛lfOjͬvzgowIq3ZzesU~eRށ]yNX`rDrDDL\QDSjtQu&rĎs$b?̦9P6=4d˂ڻ;?~as앱jln }om|jxkP|;ȳgvAVR t|pbYj hĞpۤyfr<jĊ a2I̋dƥu95rups{|Œw60jQ>I>Uu?n3uc/mȁ ~  ~МG™}Ǧ{0/i^zGZ;(bOgJttȬڑi=A+銦(v(b\K~[r;͚Ɨ,uwx[xo%Q}KPyTs>hѤƌa:C8íȋz͡l^<~+tap{rbX{pZ|ucĎ"<wmyɜkv8V{r;qzv#lB{jCynޥȣϴɿӴéØUu|tu&~ߺtY6:-"@OwҳqV$ʗ5z-ÿxa'nԯ(nAzKhlf]ޑavOESd{jvw[յ!k1W ,k=>dUB5fLdGkoY%wve~$u`}lpN2pY2C|d6Q:gUTCeWEsdD~)oCk`tt[u`%y" "̭hM;\O /vsm\Ck]6qMK*(q\Nc.BvRf0xS)Cam5xXE.Gx\@3dl:ޙ;}~F_KBRp^S՛҃Rt0GoSR6z^7F16cJ6Lr`\i@xhf:xtal7΀Aee,nAQsq nlPq&qsQeqnīowv0yuLpqښp^vn~{\+:4I]Nҷ'Ҋ݉@f{ڳ3qLdh fM-qEZuq?qBC tDm>hF"]AqvNT}q}U*YwqZ}vZXj` Mhh~q#ȴ(uy>l7m)!xezMlZX10vHq"Cs@ zLͨʑ)j=xŸs8ƹdp̞y=TƳT;ώZFXɶ‹7Y-pgׄk*|i4j9gu'ЅxߋL\ݖFdCƌnƢvڜlT۲*rFTʈ}9؊7_}ɝ~klǟ'ijzs'ޙ_~Epjđ}cl dBozoUg. &0Ѧ>bӍmե̿.*nJ`gE1pS{Nqs|?§?ą}gxBwv!^vBC tӀXi-{kg20s2qޛ}e}X-w2 T9oP1#$]^欫XytyKFUy™qs 피qk쑎\ݏk$񯙅6ģhPs~بՕtjY^Kej˚v[} isBfY;Ji?bFhh!NieaNOrmdM,yhHxvbDu_FwfMKmbJtng`H1U$xn!fAs{z˯=`PoN\dJ)0^2M70r|hFJ;m}(zSʪ{Pt\Ւp[uh9xO|}Qn_u[x#PϦs㈓5ѧ ɛ<n0wC,{Pr`~Aְ0$ʨSygĪwsvޑ|Lrwx=@u}M LooĪr|#s]z\2m@OtN(pUQ.uT;/|&\g1{{bn97x`7yd~5:lp`;yBdMr|B-v.M{K6~}Rep6Hy_S6kOj/dpWBnoMtk;tlZ=_zaOg3dnjթYYq(uENvs0rqv7t嚅h0m{S{6E'oّk}Dk|͍||QO9CȮ l͹/ ,Ďh\ tBvozhEh hp:vͷ# v5wޱpw򦅓os gxhwrS~zg.K!xjP|+qzPirNzy ^hHt۲|~𱚉<߫e?~*y3æ7{zwuu lkQܡav)}!sZLyKHܔwF)v2@~eFZ] hNx'ߝsPkĭmd`sܟzlfchƂpMն0!Yo7b(fbjãڔ&̓6 d`NKĝ,{Ȟ9ur_t xu÷ | ȢBƮڄE\%Xʐ]}-zǤ~utʧr=uc_|+}zv mlmlk.alΟ~u΂C_|H]ݡ|ԍʋ@`$<,0wCʤJաp|vy@{ΔiwaMmrXkȩxOoN<]YĄczMЫƲʡjCƴ͉F2$zI'#})+$n(|ʝ ln M\ר>݊ uЌY¯ދrʤ:WUyjq|5č5|/m\Yq[ Is{ڽBė~󸟜p$ rɾevڴw^n1fg%g[tA*` lߢU>KŌĶjw^ϚUщŠr臐̈kϩwMyѡe{"}{v{ph&]Fyn|+n1jDŽX[VBy0 ;dȋa|E;v*a?\gWI@mja+EohDLhbKzOmQ}nK.zdEybGqnUxEfL}zdUHtK=longBΗ{Qi\z=vϚklf4L.XH%.s`pXw CN(R zw@¹؇pȚ}*U}Y1\vRW8uS+!_.e9cg=z~h9o\C=nCma8eihB4qDEt5N臥qrG{Kd9{oct>rpKY}5ZovD:-uElSdj MȎvSjE:yן=zNu\ jr} s9 p)h/ŒRj;sٛjpz|etVcXu=hNJ\ĥ9= -Ƨ3ھxַ%7O¤k~fmtӝr鼑u7{.z3{%sa lZIt\G_ubLzkJ}HncH"rVM|X1b$h1vH~7{y˺ΚvO7wȿu&Kxsǟt~p2n#Yt8u&uˊdPؗ HwJAwCC\"|rsLlGښfپ{b+?nşNˠ֭nA _6s}`Qf]"z\6lq1ˋdʰCYȽ4/|Çz&"|6ő}~?bꂺ2hf\˂h׀qȍ{yHyrČws$Jno\uJz;s*|pґ;iqmþ qre'vgzDz~uʛ]~؏;o/l}ZLx`׉xў+:&QtAˢեìaۄ}=}usa=v"}f pEz|M3!cLw$p| ! r#uj0Dqiz"1ƄȿmRm տܣi5&t귅|c\pʄ`k37~ͤj_%ץZvЊ􈼱a]{s_xv՝AGm [|hbKMm6|K׿U,t؃$BmK8rov(x"qwSju RwqV:z[R\5|ǧeoźťL#!Oك-e*T׭r5戮p(gԲXYx墪{|{wbxܩǔnؙ*bC{Xj }GަظtōUMA%D1wƢRD:Q iPMn'8LqX86l+Z@k]qAcwjLxq[̂lw[~+cE}aHzaIHv~^4H^Eb>mC#trG|g]Q@m˰ؑ^<]Ʈw匌љtmddIG1WRC0u`Br}DfnI{sa@ފqC݀vL͖p6t wCxt>yͨj<ĉmX&"P̃K]]/sÉyaۅ_|mU>4z,Z~ޥ5Ք zuvK'}q!Rg\~3OXxuNyI9GP!Lڰh)`Y%}qh*}WoT^9mFa&ϋf1w?h4>ui>IfD~`wBvT1Jq"W5{mHvQ7oK|!f[?lEF6vKՎzHSDwdD"oB}_jLk{#_!JjuL~d]?yFzྃsXprrRVoKin(u}rڎ})dAt8^n;턛ƹɍ֨܆:NߌrߕɅx>4nChJmĀ_pu;qRuSy閑u cEoKxb9H|)e_GiFH|jEnXIhoKĎ@sHS~Fˆ[Ɛp5=w2ǚyjx}t՝Grt7x|X)wo̚*vlyϼ-MU)/$ޣ ]toPr1tDUvyUxpٳș}4GY\߽όNeu{+ʒQxD _Ԅd0{Ӫ9mv\xYnJ9oSaل m%R/t-ڝt:R w0zG٢M𩄘rh-aǎwZvjS/k ~m]0\# ̝`}j"Ԝ} ƹ{4Ȟnש-pʴx@x$Ǭ~Ïy~autܕeUv`}ŌLˡ[E]a⦘"t1Od62w^=:{iG&tkfVE`}qQ<}fΗLvR~`φ:jFOa;D~ZCtU?)ybP>ax.9^*l5A{EzRz zzI.<&a4_ZI{lNoPD5WC@2"r^xMn~mÏ~DpuCXEzS[BhCˈd26l=K~`8ϲ߆F A~Ez@rq1S p@)t>uT߃yeCWշPa֯ZGn|v:tZo;IuGߋtp H8yP~N۠~|>AoIr$c+DܤὩ {Vt:ք=Zx.=PeY0c7Tbe3d?t}`jBnLTa1hiaR/zNlFUsmQd%oKjNE?q GpDǂkv8j:"y:^:[Y| _퇱oYUu\piȶy9x̴Ol2qm;bQq?ɜr,^ut&H;v1s h,gr&΀0@s ƶRy$SI):zϒeri&0kpŷ rUqǼrɚnuVtVu%l8TcY|LYzMtHnI݁rOroS@'nKq GcxKG)]woyMz/dw枊sqܝrڽ~,:ҘHy|̎fء,n+&c•D|M헸~EwpxhFՌs^Ek\p@xbPٟlenwfcjJ|,400ǼTpϞmx OفipJ\xhnS~qT9 Č4pvˈ1ku(x3ȶy2ܦwau 7xzë.Ҏȕ֨ aĥpyˠvvsxQMqЪh?:kkwtkœjվ=iIq@{E ho׹ylݚ}GlwSx1X{&o+s pE[lM^Ƀrcevi飐mhyv+vi1uY+[vʣx(pxۗ(oxs|`uɽ('ƯŐêMYĐ?%wd}}XsɋmۊPУ^qxRĤ>vb~ګ&K(5`uilXP'"Eǿڈδ\ʅ ө/Ovd+ f(?cw_Ar RytW*x^mʠސ#pYYRuCmC?\i0BVc9?5|tWC *s3Lssb?8.[arfAgwN<;EȨqˍۅ ݤуȩŒFl4ge<[I/ ng\L3zn.xmqT-FhL8lbR@\y F|Uy2?}^8xw?lu|>humEvhE~.e=*hEeB1h?CvlP){Yo~tG \z.`#rMjYD;tHHTz5>ȀRG𳻑mdĜ{+'vqbut)~5f!v='X{n;:^8݄`X2وfA7 jBzJjSD~Fjb?F rYJ kHSal+L>fr?uo9Gfq>GzXdL?va^t4xZ]f9&oԕtJm#cjߟr8h~^t{TfO k7˞q~ury et"җ#s_R\q]bld<koy5lūϮ0nkY$ ܃1qyc();k\EqDĴtmcsyrXrښu@t6qО{lzwi˙panxy1Zy` %zraLjvX+wTw=PΑzTR6gw,z45w tGnȸ wN84ƃg%sAHV+rOpAKkTtC"yDxIsJgIDeZK4v`pfIk9p骆nvExV˖/҄ {}\j=uZ?qdRc6I%| ̬ɍYȾ@q|uvv̨tʧ#vi~,_C3PS*?Hƭ|/g,xKr#HLnßo usx{zp*jx+k4hk?g jxn2n!4q xZqtshp{=¶Ï*;}Ŧ;ƴԁ)™zпٝp[]ls%yNУ]wĬZ3Քyۯuo^kUpۍr%̚p~`ܤ7_(c†'ֆ5D7$7tq~*p`PhKaH6:πcJ:ƌ\o蟬|k ^#D힠|qV}/qrwfcИAj梎cyIvpeor:5Zicue0q(rUŮofubo+{rLP|=M{*xƶb~v֞@]PiuWFĵN3͇ΚɥJcĤȮ`ZÕNSA#s%AgȌ7vSuM(|fw$sRmW6uWޡYD٥_/rщʯƍoNܔ"csn=LBrd[D*wfI|ooVLj{bbBwد1yV0n\Н}>y>tG~vM$#wN8_zMmm{y5Oͪ}mÄ©37Ůe΍AЊZyRoZ:sbJAn:^tZC৉a]X%hFْfh9n,i?jnj+rFąpyV rѠ|QeHMc<k4|nF|Gmqҏ.n;{S y^HGzeQugA鐎tTIuYvSr\n|iC_nnB5TtqhnxA_twuLilĞqǹSs~uu̗vkmn[.^4ܒev3|î7O;82`G`] Gt-~(eԈ}i*uq=s7|qULoǶtq Qt tuugqjp`mˇzgukibJcÑ}[횶X\oiuD{tTjnl~nטlgZm hl2I^x<ioEsrF>8uYAvDZxsK zXrZ[p>a𓳁kz䑿nwt)v)pxZۈ&*~hoޚ~J^`7ws5Z?ny$pR_g'uF J}VYɠɣn|rxxt`]w ̢awߦwɌ~ 8hU n)PɦkF%<~mxn#eHՑ~lPv^y \xwlJk`Pk޶ejG~lϧxts~2˚0,ߙy`ˡ@±Ύ&ǘݎ\ۉب[ä }s~ys]l@vnڝqYQrfwVGކ_xۑ~K]mvT֊FnG6L@⋪ʱv;SLu9n+Dr;|i^rbxp$rɺЛl泣VlٴLppZruwop:! nMj΍Kej<҅Ziw6fEl<8f:bcΔRnquk?nܻ,fҙi뗋m˒m՞_#lIAZe>t8J|IbyDN wF(xnI~Z dvinwےs9l y]|&xޛwRZTѧga©>Uezi͗{Hfz\E=wLe󙤂YքSaEkbuCt,YljfkNi2$1d:fQ-vC)6Im쟞z 7ʉ22hL2w[]ئzN|[8md1ia\m2qlef6+p\}J~7ҙv#qiry-,ɇ?lkQ^KN1=тo~;u*R]r[[$HO'=5+Or<7duSauL̔q'1.QŪk}7zqv}r^}ɚmܵeU͵RÛi~yy@v|ymXz+`m|ovסȎijpCr7i|{zx2Mx\r~“jyǸߡ2mc˕yЂ-ٍ͒7Ξ&p˺⎗œ_Ơ\7&G+†nog~+Ox9wcpAg5pjܒ{:xvkQl[ѳ|(Ҍ|.7;HT̊rOnYElqfO YB{MqrE?r+Kv"XyJ[R|\CD{w=ݮƢ u᤿g|ף腴IbŒȞІĶ;w#qk fx0cjt[AWY>].\C1DmNAisl[玦i`Պ4Z4?`>nhTxX*>@T̀&{<}S䌗Zos,N:n+E)n?zSɏx>GnwIdjSf~ Ek|ʘ@oХh]ǚXzvXams`ZLxW!oKfqy;f7nRukHem|kp!vq^no%Sucurep=Fq ŭepŻqӾɝwQ7Ώzlz]`ZsWъ^nEѮʋMjKG8 IÚځdwkBn`LT]}UR9mK t>lCwjLkûejr/m*'Ipnjwm׏=ds8[4b*l/o2rtq붞j$p@ţVv0pϜaik n̵NmȌb$zF-pBzPyYȁRBxG/vFt${O+`ktHywQu<:yҽPEcO~]y)l8RXEhC]{q5SƔR{נ x:`A|-~ɲwʀqZ;muyz'ɂ|{sϣz}ܬCF8u|Hꮠ~3lӛ)Z>+Z9Վl#zV3xjnAklLi`d- Wd>v| |zk%9bLU˚@R*&|vIql2SiV!nqlXDgߙl){tPvr^n„,v=D|HτƁʋСWچUeq>~pq&a/{)hR_aLMAG3TB@t]NvÕ2wJ{-Gg}YiTw#x{~GǼӄ22桷z{ԩv|Ҫ`tOsŐqq`צrvHzy*|4|8עtA•Zduo^>#.]Kԏu,H{=DҦʹfz}e¹hY >5e!)ăX}ſzrtrv#MmDe|hʋʅ}Ҝ;ǫ`~]ͮȼډϭ®Lׁ!d|&~:_XyPT;m@ZJ~yeoyTcNjĮ9̏ ɏ[rSTzJCpV{b y,[=8b<oܻMxrllnmE[.k¦en^yzLݣzLyF٠~k~ND<0,͇ ?b6qˌ_c&h4@cpYtNimu?iood/u雯qlimlR`vޥz|UN5Niq.kl-H֑Ȫűqtbbpݖ&hiuuSjhTK|ZM,ȅ}jGרqÉq tx~EEGۅ@}vu=symƟohHvȓ"R>;/,]ږ1 (m}AAH_XbaEZnWߜZ|sYȉ,qMIpƅN_qb̤0}OL̂[ɽc%ڡ{*kn |fjivwdw_j HvɤI:NU_܎lݰ.r#-Oz*`ݨMÅʣn^0Rrl8icHVnTqFhXL_R`?^kGU7fbR4BjYyGbsm^I~bIs\U!G,yme,ދ |i0ydǝ~c5zsRh͊2v}$xj*h[Rl~rb}\m}T ylOzlmC\^%=;tuX:|< q_Sгhy}x0wCwרG=I&,k&.YVINp^_#kkflnCm>:t6DϞ{1k:i5{j{uj)ysnPNpdD䦺Ŏe$& @Ǩzy"7>҃>Rc~/{UuÙiktaׂs]hteDn^~@bQ3[c(S=h,T=)se[?SrR^eGrf Rv3i6>reirxh<ؒk,]AϷe6riįkOdLsgs\U[sYƈHqvduG_aYnH҇2|z\Iic&z!yƭJȨ4x!}|VƤ.cNttэ_]ƍmoARb:c2k55ti9v0;&5v47tP-w:r8Şl+7[$$wT7~mR92}Xa1k9pj@Aw]/~]'yi>/ޝ舁R(v,zM>vX&m plDùpŽvӿpR nnN0sxrpm/ouyn]f`NJq8J}ScCLqeVnw"q"ûSaz[vعۙmүF*lőspsc>r_u:Oǧ 4UVQf}61xg$mJRhJjeSujr]uqƶ)ofo(p#krⱁsW q$Гp/q8viSy 9*{Me |ᣝxuIsEu2E!zkƆ|026zF.up[qNcvuաR\ۘh{F߆^ڡf.(U[y:HqzFrIrg`kYtÁ}Ǫy0r:sfHCs!gI{qZ_Kt2lFf|r֫yN߲,үO57֥|'8kb} dixf9G{km2IuY֐myR_67h!n?Rhe*-}q݆߫eѧaRÎʉm4%PͫH.R͌l4 jߥcw7Gw;mF=Bnb+Pc.Pm:Ñloz<ٙ`p)=k/)m<___5b7vwS,0tT gMp>hd̎!̠߮f2ʾ8񞘓zׅ{e 'kqؠh\[- Ef*xv[(~,gs6@-o>Zo?ы1m8;ThmVB:UkWo;zi7U8qm$Z:lX3HnY;Ei0U{:wpWAzfBASG8x=ӵrcVptʪ]mޝ0owwe˜qkoiνmiktp{hlq`Vly^Ot[ND~oQē49g+;4wsxu _t(oqy;s{X/`q1mZ܀lUq&ҟa:ÎFųq̽߃˚_{83xёsz0rnyɔ^pƱr#[qSrLso~ivᒰkKLn7?@jߍjry6&y/|ȱ{ޝpGzmdrvbwEƆvG t8s9wWÐ~)ľ N᪎{Fzd[]W_jns'k}H\"vU~*dfs[Yyz2SvSqzmԚkl*Мr™yJxxsq#hal뗕oD |z\~ Ls9ڨ;&4"ǰЇg`F"}ĦpuwFjwqc ؉=q0t&~BhϞy-̾=ć|îȿ6xAp̚q]q9,pklo wjPj\vo!uƞTxivʼʞy#ņV񷀣9ɴӊ$K借pet.Lqsv%NzwBJ:tskH i-ltyvt@磃t yħ|d;{Þ~8uanu/z~xȕoxؤBvս8xubؖFtXu4LBw⑭pƜ"rʾɡ`tćzR ͪPZ~xrǕVõ,N~csbvyUe->zMN˂̚~krqx1З.ǯ8KrLy ͺ IԤ}t"^^3yl:nJό~r{cL̵ͤϫpű%kH+·袩ثpJ#i̇~`knpå<nyBJ_L,oWM9iG[Bm'[BgUDrWmmSBvS2T/uCxFkޥ{g?z[df`$mܾ z ˜xtLi5Ɲ?iߜtiKsj{`uTo*a{:fY~~mQ`c`VtUuB!ssʙ}rЖrWnWy dx}jd\r_wӤ$<]̌8b͙̑tó&Ǜw ח s uAQpߦfgLȘ n}#zP|Z#|Ч\>#dV.}Dvu/lУ0*kެ~{]Eå|ȔDŇҮﰹkc\ F"޳jgٰxi vȪc$VELMװ>pUWm~cǒ ͌Ӎ7Gƺ4?wҊzsrחd'_n؟ P &tPUyEZbI!+VM7j6_"Ctc[Frb=Iy[7CH*q:c|gb@;k9Ơ>zšqSQBM-rv}sGkH~p/JUrMŖa hba9e <{ݛr"7eo.zɃfıc:ґRǪ'ӦO:QMqtzdZqUi:̍psGNJe;94h8X1Qh{:cf7Ezo;ZXkJ:-=f6 ~e;4h9z|h?'m[9elRR.4l T}. oVq2kU8rYru omzdqDeyp ο㩈1_ ߵԄ+)lozfkڬr~k<`.g{`q plo;"n~ȏmZp–6rϠ}jlj*Pqw~S4os֙~L@ĩ[WL^Ϧhvk vkt\nlG/s ˦I~]=ɂQ>fU[]𞌈cxX|1\C)nq vyx0ldzeT?ttv"px¿yMڞ{׾vrrm,zƨ9_٫GE٦:̟g~9o/i4Bzh4&_{#q+>dn4i2$C~Oϥ.e}+6S]Să؀ !:2H !žzеv`Uu wȘʺ逺8Oc6Ǹt=؈oε؟ڹ,ݤYnnR~xƘxMPjΥ抃ǔr8Ӻo Mxt4mЕ趽"hN{dAYŪZe2"6vǾ ٫mr*_Yʏ3$bzצs?oALaM/WK2ykiH[tXwgsNhSDlY)}WdzZ~d2q'lRDc?Gzĸ{ИK|Üt-rRucv,3(j#dk]4p3qs8Dj x_}kw_ȇ%:g]jK^>Io0vyW6ftYH•Ȃ-"١ y$j9ѓgo4:֓rC:p)j5Yel3kg 6j<8Zm1Ccxd>BpV3KtQX6LrV4OpXd4PD=ub?AkD`NjBuPoN䮍̃BqpFoe=kx7ٛ„tU={LL]b1g+hl{lCoMuFM)x.y}Ůxu qڗjuk cf+ fKp2ie҆^˕rcl ~r#{wJVx̐ͦkϪNMa1x|ds˨y X({F/vPlmCdqb#@p9}xWCvXɜqb rvw~yxl9n묃zyۜUN z =`_qa?kLy)iɦ8Μ1~#eqd \i qҗsܔ6uJ{[FdIa0#ylzpe2usôvRҢxӾɝwaxgh@bcјvqkֺ-wѶr/j0mߜzٿ#ݽzERi fƲ=~)ڨF:#uQIfǗ}ٯImhÅ4da|@j MǏ4ZdMSw?̘6ilJevH_0ekr]hu}sFj/Qu.ؤbxFK%i«|7O駞jo{,bBGYE/dK.w?]JAKw]ۙ$"nlyIls;p~@_~Aer9n-6nL6q68l:zYgzAiv\(s{di+SwhL(zq:\\yaMpt{[iyQ;T C2iTG7STKFwjM gxojASibǖEk{uL|P˽}~]_rIz"gG7N_tnslg^hjd#$n$A`twnLtkn }w^}۫8Tފܪ¯DynYKr[I|/&\Ik6d/OA4(nMK{T VnBKOR^%%h2~aE/6t9čui>{?2v=ӅtBH8}fFMv6\:oS5^iQ{|h(Vr}{#OĐq=~a;sv[cE@hM1xYsǀW@Wel tlY.mW,pq9|sK,y[ߦ{xv|u3KybvQ[&{bwa8jpN hI@~Z౾rb|wjr#5MrdÑu3+VB JީpqՔL/a w NÛ}9z{_x2p`!TjfƽSrs8ޛt^s~ٙtt}(pREpEXO~wlDn,/<-{Fd?KWɦujQs??r-w{䖱q֖-^C]v`lД:mOwAP|u0{w.qͺ#ffdĥ.pyxߚmʩ._.c;Umz+z=KkZRrbRjНv:`s g8nxõ)<ݺDjQT&Ðh’=zZǟxJtYx;5u/Vv-ޟN}nmOyBexNɊuʒ%yI{DцYŚX+v=Ācfqm o|]YՄp^Q|t(P64O4ă˄M=ј)bx`ǂc학Ȝr)y`pa)bk'xh͖FɵYF͒ z9bQjEOo/)z=`}dp{Z_2mybYC2Z_G9VE5^RB[T?XyUy^\#dйh7$i>nlJ^uÒH9)zH~QZƇ?ib>uO]{zu1rmyhr@gyqe=| c9@~mvU1cOY3\\MmA\N_98oW%44cQ/mPCg{ia/=gvB̃'qY^3e/q`@䁔`.i};O~g7{[-_k1hiB9Ϣc& xvH>tAxXKxǀ3lu\?pip!vUsarw.t+蘤x-N ~_+{ڋlw4j2YXq`MMt`|J]vcasK{jN^e{pདྷ(񧐛$ʤ~nnp+ğl鞹jgpuCrGnќOwVw|pj8i2|8eˌ$x[luTم@yZ_xYٓuMIWزqmuaspsCv¼\6BEO~Tvz}cq'Il>Uy]tcsyԙzϥī +Ӣֈ&{3nSqQJ`{b&Peue-:xjÆ~˰%xaŽph{Nc:MkrWv)}@xX]t&vpuqfwPg ǭ,/ xLeΉna릴rϕ$t7vn6#xK2Pc0f֑N shu.h1wĠ|cƙy5vrRhۚaky:wlm'Uu:lravlwƩ[ա$ծFZř_J#z0[w§txVt9sN%ǫ)Hdyx)ERx^xm[{.Ǡ !ȒǼcs2y֙ v"m'\s\ޒfifWlDtE<~[7{g$zMl5Exa4?ulزƓh<яdìg,sx˳VtưjޟtĢ.|GɭɁ*cÐtɄd{Zh|s-Q%vĚhМe_[bJ8e9yZwM>t<^Oy ~Ћف^qax.dǚoXzy őwm(ueuEZzW6"}}Jkw.fTZp_bLraHOqj^FUvf{L&+}dgjӅ-3ZYυţ阊z\ܑ>k^i@k:hdho`טsܮIm>sY~Ou*mlJzmwLn֗h]}*\^b)c쎠gӖszvҲnr᷑usd̀,a)!xៗhiK+~dC&f!B>vY@QxV`EͅqK~>WS'TVXdl'bqu_t;o؛PDrLNJylF(\d{n}xy{sLo5gqUJKs\zwh|p_zdj N䆮xX@1snmzody.Ny_8xBs3Зhxzk2%'e˝ɇj2l}LzawLq_2=zMć˙z=ޤ%r¸ll(YsiDao쿄rTutM_ w_ \uywMx ǜJy^}ŋs{cZRv0ȄXڙN\7szkt6xxYAk|멲K-np+g_tewr'Œ+~zNǶHu6|s2Cm$"i\]p|) {5.~ޡ}ŵ]-z r#]qll>EjȒ.$_6|=\X,RsŷϞ8}ÚtldǯǛqJwIFuy>EM(ن̣ԉ\Ʀ=ݡz/Łyj۞tKtk:pHq"~^, X}褯zhu)ĉrM}|ɅYcN ,ѯhɡ\p?+k/P|ګ}[ҁY͏߆ȼ^V裥uj蟆r#ؔy~b$kcbɈ<@`d+EuAkŵW OmŅf"YhQ{gΡņǨsŞGh$œrd Yp{$]lwAs|]YxU_jB/vcJa4yY51w@/'Ȯ[q4l?lSv^s2.wnx`$kPe}N^`EYhHibifaҠ^ר,iPooA.scPiS^>t)ߦd|D%K-8DFSeLJ I&Bz"}EX]a٥Ovyu”p8h0،cMY=wF?rJOoUڕC~H3p;E֐ ]͏}Trl>tW]>9yk V:fZ[F\vqpXm\-}XTziH[wb? z\9~pQPi܎u^z Xlw:X6c4.e3hjy۝no̍kV]TlAnf(ExԜVe~)mP3ȬRp{B5D|qzCQrvQL"#b;хqQz dD"x_kJ&{KjΜٕy}֮=🢜} l@nqgexEhꚐqœ2@mݐHz/ev aNXU20d4?jKVie֛4e h i^Zo|=n!xvŔ2}#urǣΌ ťpNͨH9Li&}hsET|T׊dmysoȔjF\Am`˙oju[w`uI{Wx\cCnp|ZC(rk/X!mzOjoOzlTw`KnT엹eaUbZ$`DJlCqָnsSjɽhŻf hݗp:,pyjƔ?i{gdud+{ivs;.tfq hYО!wbsoTzd{0wە>oILmnμMzU墾R;y9elI.xhE=v aEuU!CbzvU.?gG3qg餬=mmqFfTyoUrƲlk" ViJu*Cψ?̬߄פz֒͠mЈwZ3vb G|lLexb~&xPgVt]~~)]Auq1S@x Āxҽ ovjظ:wʶj@KsOyl[%rRFx$^^rER\vR[x Z }EwJmGgfyj2p.ޡ1w+{ezlǫx|ڠxߚKuAas#Q%ŢNj1 iXlqHqIwy]Lfoy(v `tuUs{ͯ>wHit,vau]6+zT\W0r.xrlGq礑xm*}9לaw_1uy%nRnIdZC|f#~W\mpJkI졭xeQh;hlΛ$oğKtlJ.Όƭjӈ̘05 u-䝱mEnlqvYǰeOȳ.o~Dа U_N֚3pɖ=؋ЎĆ8ϥ҇˷wĬw6 E]ޘKw;W:nw?m̩#񢾃{t*wDm  { .vG/UwßwFmV{BDɇ+&ZP󯳎l;*ٺߤv\2{|rrEIvOR_+nSn9sN[Cu>gVwƤװҩO|nQY[CfIes8Lu]DlL5qgXILɄjDTeŌcsĹȝ&PsRuF kUjӭij?kx3/m˜ۊlaًkfYmk{~t H|Bӫ=U? S¶N8:ʟWўF~z{^fLDdi@GyM<9U #q>Kphc>H +^"nhq?}c]{5}ZtTrXAeN#9p+X[>'w=fayԝ r[CkWpAMh}epNЈ uUqMdyz VxҮꀘʫ+vǁ+slӒ`m5dܿ&p~wƤ|Q)v{yXLw1tErp-}̜ۋ0 p[sSKVpNw$V7w eohI+tZGx;胈gp܇pvi_RLrP~rt F[;5EgSy6xžwDmu%Zx4*w{bcl] | K`ФFk&x˟݉f!EEkל^SepwFQwMTovmg!jÙq;={ϨJsI-v{xF@GEJnnuϛlwl}ݦKGoG"gV(FK?`\Z+DTrgč\ʦW׺Pՙw{Ԃ+́p讶 tWdTыFyН+|Dܗsm}㠙}-usv|,׌lvPtz)8` x?7ӧ򾅮ΎI2Vr徚0ʞڶ.}TpMv/BnbL$fMA3pZD eKcFA?fa-Ҍ/^.!u.-rh[uMqQѲGrf%Zq˒Іo=uv"sR=jO7D]G+2gP9q[$< u_:l|T- lS+JnV@.~kOGꆸxac'*A*˔rq$=^e,j9ƌoABmE{dS?WgQM-r[pxk{\}5rc`x0g㊠}g[Zfpyy|xtfs9z׬h}zv~ߛˣypԟ0wuwتיg x9zŔŝ7h͒{bX[g5?s?tۚnocsǙ+pޘ k2 k"ku!l~j"%|k }&eK]݅cԉi VdO9YFґfSʴ;r˄Ȉ w}ldpkɺwBYm~ *ņr!zeeLnO:tZZH=jk{7x#͚nȾ%l>p5r x螵% qrժ2^ȩ ftٟ HatLyaBwg(Չг.'@'iʋ9=y¥3}ȩ/4ͱͶ"xc?ޭPÙGմ圈w^ow'2w t3xtl>wXt5Ls-˻¤5ϊԹ~{ZA|F%u&8sQ}CmM#_(I,oWFs_hQ|?Q^ũEħŒj~ߞӔ}Mo]DC[7G&F\MI)\MD3|zeKhvsXneg \UD[BoĞ2pKr! nב)g cc\:oԀ6hӞ~ɻB;u1@׾<ٟEr|bSjHRlCedpPyt`wOvѸqiݏYJ:V_ 4hLw݌"xJs䆔t}bjP3c8KB1RcpOG8:jT?ktO[>7uZ 6&mT*?oRUR3~dYC%w`]8̀硶̦̅k&r~M1h+j7>prB?sj`Ku[@ \dLO/xafype{SungI{3ho/~(kނq`‹x]yOsq`+s{B{v]}ʆJpȰnwȋ^?}[e<9^o[zUgsvƽAy p&`nJ㘈syOq_ykjkǏ:izf~'gg~j፩~*d!}vZjaOjY_dܜ&Yf;{ȶZ}Ɗz|d{CZj~p j˼usOD 寨ΉTՊ+y/gvDZEfIe|kz5ޝfstm%.foٺOte$hƬn$bu)kr\wVc}ezH\zbG4zGf"KwdIs_HubKCzlcRq2Q֑8ظ:cշ٘=vfSAi\Kn3_xP;\M0oT6qPb1hIkǟ6j_vl w?ȒwK'|QxAr`Zk/qVsņ͢NaW. =קT1A{|"W)Qƾ@w>IvўnxJwvʽOrȷeif8hB5m ΕyӏK{U-zY|:ewy4d/A$pSa3hRA6(g`Ro=sZ?{c-@u\2vwXx>oZ 4&hCӇ8ròF}i~ѩۃwp؉uB#k<׊o_@(th>tY?kN0KqVFqNykI|pW^~+etzSH{KVXէ@&i+qY摥p-bl]Lc4tRqs}RxuuQV}VeIV{ _FtoTĨFpr~Ԫ0~2ʍ |Æuؼ=k˶YeiSڜJbqL Xv vcB$GmK}xcϲrsvFƂ{lΔ]lȨT fkwsd`qXwYv_XiƘun|u n j7Zh$#x˧v<?ŅSY}|wYq" &s~uSˏs*l"؇HgKJv9#3 )u\ܷY}^KB@e)jهɀ'řw{ÈZUy#V/`H/qXLduYƚ}Mxȣ|9|fjTL?XlVAqbLDqZ!@v\];\tROd)q]M9lCO:m uD{qx |ɳ{6zɡzyNB:ƥ$¤KdGتn̟|!x{a|%`G2hA񞽈K[8ds9äsp 4q~sg)8E ;}҈`󅌰wdiI~etWtYߊ|b>?y3NPsFx{^ǃg}Wƌ|vmOǏxWܜO8fĩĐzn?p BkV_iaVrN8mK>tyYl[S|`KRnQ*m|Tyϟq@Tyg_bDe vgRÒgvm,qÿ?{a`TߨlҨ|D uY|kV[p[O}jSfd-wV\t_o_tp˖n׆pϑGzRk`mD%&d[@ӝDvR]o|IG}GۇhmGÝh7cw^׍fPɖ0{];kWf"ފolXsBi}zfؑeXq?dK˫IŸ=w烈\ҁ\X7hI28v[JΈ zhT:! FlυrPq[GBweH˃ v-dl!QolJ bMJy ¶sKJYq z!|@s}:ƓxǘvݧT|.f޻b%oߙ$#بtb)+괫49U馁\P+IMre'C湤cp~qƝWu5vFu13pnϼfrgƩ:ip<>Љ*w tMwkc>7q^,7YvO`lIgL҆VhMޒ /صD!vʓʂđiolzh ?рd7rS,jR3fUpA#k.f:h݋tf9i'+nAYqGWpDMAn{gq]Ⓡ~cfDqڮɓs&nj͚{UrkіdM$ۣ8|7~s=΋ː9aZ]duG[xUolN,Ateꊘr"qoĹh'~ [Kɛ:G:6òzW#;KoxpWu}Tk;Cag9Us7gxš$tĿpFdt 1ˇuƭ|{+ڈ}|ksuÁju[ԉz*cN;4h- {(NBqCHs Q{Y\~aZxi۔jÚ}0j뤫ujkj%euQ|hK,rrZrY~eQKFnPЊl]Eʟ;ҠPu;%NfcZI _ў4hIȞkJlۿ2oPFSu4)} (0Dk`u48ʧ~+//4EwLw `rs`P}kXSx nԮMwi2qlqs7m3lU~lo!x򱪞ZĬ.y}̄PjVtF8t{A{mCzeA-o Y̓lՕzuCEcř'|MNSnOMLzi{XNsʘEm|snLJnm vvjwpii8{nNp)Ho,s.їwbι|c׍0) y#v kqp*=wu2EǪ=.D}հAʖډI gtgQYۅ?iE3jW|O ɸԑĒɁI‡K x_ss>$Qy̭M6}Rv@o2l1kKzBg}~v6&|d/^kXf'~aݔ张VЩ9~uR҄/gچ+e zwySpiEYރ]:n L6{_'NÈτzRő)pJS /x|d_zasDuX_DR}mQKybnTlILkbrFu x$椔}{g|ǐwƢ:uS~qSuwNǵB| ݇Gk||+\EͭՋ͡ĥfhZ nh%4Q\P`nnPbȻs>sWp:0nk$Xk{?q|ɭ;MnV؉ŚOK}r]Svc;r^87v_?y^,>Yy}c?|~b? tP :ݩZO⬒|ǣ%x]oIvi@Ax]4oS/c#R59a6T=򓞈=os刞p׍nnWr`Ltpr]mvYm4S}|eo3pG(pTތqі0_mDUlO=qsdw,~*OIՔ5pwX[\ydSQzO\L3MfтlЇnrmiԗJd?f lBi+hbz|z_z ]ću9XԁpPsUSXJ|_(fݜj~o s&Fgg^ܽWZlRhvzc0{P^̹ υƐ⥓!~ˈtfy[Bt}_<8?{]UǵtҢz%ŻtN=#qc uۀs ӌɉO5z8*6v<~sɕiWwb~|nؒ\p̏xT iD{|cGhsTCm,dvŞ!q/siEbaaDʓe-i`xY]|isPs]߇Vw\nlKJ3pSCKmVYpA\y.]n8g˲liwWuОs,o!!p®;hz#mmhudS'nX nxtaor“j}{qii {mMqǢdslCh`}Loq@tHauHx tUڊi}rv闄Q1ya,_oiLG~)p\@jS)vM{sԓn<{kvlRCllOmApotcz/ =jL+(4v~ƣ{]5#xɒIvI,ynk|1wIƦʀ%/|jҮUѭ&tFܒ|qP}[qpkdx*Ŧ jɚÓ}h0uZN'L1{8‡tr qhB{D0Bac9 u.hDX_ȿf-[]D`K^wx-7s^Bjb/ lOҬ +]A~)x@)ŞZ+4|xKtxSWtnä^xdA{)Vʄ?o\ʽ'q&ȦryǷ|z^}B‚9*WtmWpb`'rXseniR8.Qo^U8xYz=]{,aAxfK3vb3 8ˊpQȩqsˇt}p(*}uz+nzMvC]&78rZQ3[O/TK04|4x$s9jJr鏇rrIs֔]lzTpK}eƒGp 4rʛfxȕŜ)=qfD%lnݡ}t AwǤy6ŕ#|EKAxsHm6kCgh,mf,m5hjdùg&lSkpfaO}]uYl>SoVqd;gxhڮȗt)}iwv H?m DwpoxdDu!BmLv0˝j%rÝă쵊Z76+~gLrHawO'ώnhĺpMo¡oZt* Z{ثC`[]ŗ*ݺzƣ7ef(^hӓx?Mz2fa5o{GlzdVHy\d}p,vv@fq՟>nf]ꆶZƉKX֡(]za Sq[pu_0~y[sJD;wViѳܘ5vy|!{}6}w`BpÓmx\ oG0j um|e;𩋎ѧ0Gތlۤa> ۠{oswgY~o.[$epm֜(vwȝm]knuku8oY?q'k`NހXW7_Õ)|NǓsM|}W_ bs3ux֊Wn|Oxv&|\ƍ25bq\'阁y蝻-uHrdap+oNL#n{nQIpy s g{ ^*ƯqnǻuP\~ xܣ=r@e!e8[z8w~) CS̰xRw6jdؗ#uU^`ȱ%dKˉcv`ālwsrHDx %T"|& xEgԙ_ ؘcƙg.%l0>nxvs_ oć`}~P xɯ=*Ss˾iKv1q{鷰zع2zv;mjU7\6l&FӏrJ/@qNkhΧ~zSY3{.Ux*%v*\c/ty`/x_3{a8{cب~iʷ6pȼmwB5yǕn| @DxuSi斀nٱ˟?Ҕ)ä??©ϋŹm%x#4cofŖkZ˭r=5oVQoA"t)pŻ?bs!y痊 uz.zܙ⏟33wnBZ ndW@fcOd2gO41pyS5A{bDmP~g|^— (0W҄\tvt5V`g:qmZ/[NX0]Pq6z 2yjrIp$orCnDdtaFpuu@u%4}1‚׆H%Q3}Ϝ݂V4}vD~uFԍ[%tk׿Uxrݞ"xn?4N^ۋƹ{#ZƝ𦬇21~{Ìd+N\ɤmHϚ}MɁv7pTrvL/{!f$pWA|´#&}HæwG&Br~(ʈ9d|ȅ]՛yʶ~o/} yy۝uhsҔQܯ{-lèYźۜBu8NoբT_z xnoƧ2zʋƇ*oơ̦&уfށXΡɄڻ svl\_sED[XxH{&PGzy~v=Nu1QB(^tYp/ t`.$woay;qqV7x`:sT1~CcaAyZ.ގ2r@}h|Iu˶ooZvtxjd|ƆA~.e|$[qNb %gcׁŻUu~|+wѿ(}pS㗇k,iCr xn@Bn~ok߾5m%sX1Ș9?lq3u[ܒmwHwI`q$Y@fM 3oN2}Oe1 ` Gh^?+i?nċКtuƝ;qń=|dpV#p77[wu\4dQ: jvX}= >ބ ?za3q⏠o* qun֒x zx |VT}{8́5ĊCm6z $ybąxL{:¦%~?ʜUԲ7ճ3vSnmoSrCrJoYkЎb{D_N`HSc$c|yP?bs!K{`u'lFCkݡktxD'u>jx(0y?܈V)}Z?S܄ȍokⳫpÀwRy\{.Dsm3^֔$yPbxW z`!qU݆mIsyMPfۡc@g0m:ɷ{͙iHak* K .w٪SeúA{ҚtTjn:Bl7x3zDŠA-mFl~]-^LsptzX9qr-P0?iJsYnpQq0ޓuѨ~#-nobXJ|gF9GYpSiΠ^g&rô=w*|2YȾȔ`se$r?[?bݱٝ}|6ѪKtr$uwŷ {į@xnNs{q؝o$qé{o>+;˭YsĨ3+wNr׾kgĥԋjٕ+{  x{ֳȝzԯM{{ r lGDim`cf2Ey1j6x%M|YHq͍.L`I©čºѭz_vAmpG_W~D9zQ [󫰕Y~U+ "(LKqHnM$6qT-vd*5z_iDJu`C5v\"7ruQiRFuB`F5k6-bHxvpy2Ys=ul:xz7dcǮ潲}Wm҉j<yW LW@.jzP4; I{\qgΞ8m4Sjlj7m>k+eudSt잌Sk,ƛ~gلyZv\D;pJT/3T+CU/UOۃbfYØܫ-uESet["$ɕe=~|ҞƘ)z}RVp6w Yv0f(R9m\;"     (S `*`*lllllllllllllllllllllllllllClHFHf?HȅH_8HX H 2 Ȟ Hx libvips-8.15.1/test/test-suite/images/silicongraphics.sgi000066400000000000000000000662641454007373500235230ustar00rootroot00000000000000ll~lclHl-lkkkkkkpkUk:kkjjjjj}jbjGj,jiiiiiioiTi9iihhhhh|hahFh+hggggggngSg8ggfffff{f`fEf*feeeeeemeRe7eedddddzd_dDd)dcccccclcQc6ccbbbbbyb^bCb(b aaaaaakaPa5a``````x`]`B`'` _____s_R_1_^^^^^k^J^)^]]]]]c]B]!]\\\\|\[\:\[[[V[ZZZ~ZQZ$YYYYpYCYXXXXVXWWWrW9WVVVUVUUUkU2TTTTNTSSSjS1RRRRqRDRQQQQQ~QcQHQ-QPPPPPPpPUP:PPOOOOO}ObOGO,ONNNNNNoNTN9NNMMMMM|MaMFM#MLLL KK{K'JJsIIIHH@GG^FFFE|DDnCCCCBBBBBBRB+B AAAAsARA%@@@@]@.????w?V?5?>>>>Z>3>====_=(<<a#a``````f`K`0`_____~_]_<_^^^^^v^U^4^]]]]]n]M],] \\\\\f\E\[[[i[0ZZZZ`Z3ZYYYYRY%XXXXiX0WWWWLWVVVhV/UUU~UEU TTTaT(SSS}SDS RRRRSR&QQQQQQlQQQ6QQPPPPPyP^PCP(P OOOOOOkOPO5ONNNNNNxN]NBN'N MMMMMMjMOM4MLLL<KKKCJJJ%II?HHoGGGFF.EE"DDCCbC BBBBBbB8BAAAA~A]A4A@@@p@?@ ????a?@?>>>>k>@>====p===<<j#jiiiiiifiKi0ihhhhhhshXh=h"hggggggegJg/gffffffrfWf<f!feeeeeedeIe.eddddddqdVd;d dccccc~cccHc-cbbbbbbpbUb:bbaaaaa}abaGa,a``````o`T`9``_____h_G_&_^^^^^`^?^]]]]]y]X]7]\\\\\q\P\'[[[|[C[ ZZZoZBZYYYYaY4YXXX|XCX WWW_W&VVV{VBV UUUXUTTTtT;TSSSWSRRRRbR5RQQQQQuQZQ?Q$Q PPPPPPgPLP1POOOOOOtOYO>O#ONNNNNNfNKN0NMMMMMMsMXM=MLLLcKKK_K JJPIIlHHHGG?FF[EEODDCCCC(BBBBBrBEB"BAAAAhACA@@@@P@????l?K?(>>>>x>M>%====}=N=<<~_q~gAgl~_Q~EAEK~^~C~^k~gCgl~^I~ECEK~]~A~]z~gAgg~]\~EAEeE~\~C~\k~gCglggl~\I~ECEKEEK~[~;~[ogh~g?ggl~[O~EDEEK~[~A~[tgh~gAggl~[U~EFEEK~Z~C~Z~gHgg~Z聢~EHEE~Y~E~Ygh~gIg~Y聢~EME~X~N~ X~gNg~ X聳~ENE~ W~K~ Wh~gKgiggl~ W肽G~EKEHEEK~ W~L~ Wm~gLghgl~ WM~ELEGEK~ U~N㪧~ UԀ~gNglggl~ Uc~ENEKEEK~ U~K~ Uu~gPgg~ UW~EPEE~ T~M~ T~gUg~ T聳~EUE~ T~P~ Tugh~gPg~ TW~EUE~ T~V~ T~gVg~ T~EVE~ T~V~ T~gVg~ T~EVE~ T~Q~ Tgh~gQgl~ T~EVEK~ T~W~ T~gWgl~ T~EWEK~ T~Q~T~gXg~T~EXE~T~X~T~gXgl~T~EXEK~S~W~S~gYg~S聳~EYE~S~Y~Su~gYgz~SW~EYE\~S~W~Sgh~gWgl~S~E[EK~S~\~S~g\g~S~E\E~S~\~S~g\g~S~E\E~S~V~S~g\g~S~E\E~R~W~R~g\g~R~E\E~R~\~Ru~g\gl~RW~E\EK~R~Z~R~gZglg~R~EZEKE~R~Z~Rgh~gZgj~R~E^EI~Q~[~Q~g[gjg~Q聳~E[EHE~Q~[~Qu~g_gj~QW~E_EI~Q~]~Q~g]glg~Q~E]EKE~P~]~P~gag~P~EaE~P~a~Pu~gag~PW~EaE~P~c~P~gcg~P~EcE~P~c~P~gcg~P~EcE~P~]~Pgh~g]g~P~EcE~P~]~P~gcgl~P~EcEK~P~d~P~gdgl~P~EdEK~P~_~P~geg~P~EeE~O~e}O~geg}O聳~EeE}O~b}Ouggh~gbgl}OW~EeEK}O~g}O~ggg}O~EgE}O~a}O~ggg}O~EgE}O~g}O~ggg}O~EgE}O~e}O~ggg}O~EgE}O3xhShx;}O3gJ  @Sg@  J;g}O3E2  +SE+  2;E}O(xhMhx7}Ogh(gJ  @Mg@  J7g}O/E2  +ME+  27E}O,xhGhx4}O,gJ  @Gg@  J4g}O,E2  +GE+  24E}O*x D XhEhX D x2}O*gJ * g7@Eg@7 g* J2g}O*E2  E%+EE+% E 22E}O)h DXhChXD h1|O)g@*g7@Cg@7g*@1g|O)E+E%+CE+%E+1E|O'xDXhAhXDx/|O'gJ *g7@Ag@7g* J/gl|O'E2 E%+AE+%E 2/EK|O&x DXAXD x*{O&gJ*g7Ag7g*J/g{O&E2E%AE%E2/E{Ox :XAX: x.{OghgJ$dg7Ag7gd$J.gl{O%E2CE%AE%EC2.EK{O%DAD/{O%g *ghgAgghg* /g{O%E!EAE!E/E{O Dh?hD/{Ogh g*"g@?g@"g*/g{O%E"E+?E+"E/E{O$S?S.{O$g3#g?g#g3.g{O$E"#E?E#E".E{Oc: X?X :c-{Oghg=$#g7?g7#g$=-g{O#E)#E%?E%#E)-E{O#/ ? /-{O#g d ghg?ggh gd -g{O#EC$E?E$EC-E{O"x%?%x,{O"gJd%g?g%gdJ,g{O"E2C%E?E%EC2,E{N" h=h ,{N"g  ghgh@=g@hgh g ,g{N"E&E+=E+&E,E{N"D&=&D,{Nu"g*&g=g&g*,g{NW"E&E=E&E,E{Nc X=X c&{N"g=gh g7=g7 ghg=&glg{N"E)'E%=E%'E)&EKE{N":#=#:+{N"g $(g=g(g$ +g{N"E(E=E(E+E{N"(=(({N"ge(g=g(ge+g{N"EC(E=E(EC+E{N")=)(zN"g)g=g)g(glggzN"E)E=E)E(EKEEzN")=)+zN"g)g=g)g+glzN"E)E=E)E+EKzN!)=),zN"g)g=g)g,gzN"E)E=E)E,EzN%=%)zN"ggh%g=g%ghg,gzN"E)E=E)E,EzN!XD)XD=DX)DX,zN"g7*)g7*=g*7)g*7,gzN"E%)E%=E%)E%,EzN ~.zN~gkgzN~EkEzN~kzN~gkgzN~EkEzN ~*zN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN3T>(zNg>gg>(gzNE>EE>(EzN@@'zNg@gg@'gzNE@EE@'EzNAA&zNgAggA&gzNEAEEA&EzNCC%zNgCggggC%gzNECEEEEC%EzNDD%zNgDggD%gzNEDEED%EzNEE%zNgEggE%gzNEEEEE%EzNEE%zNgEggE%gzNEEEEE%EzNGG$zNgGggG$gzNEGEEG$EzNFF$zNgF䁮F$gzNEFF$EzNFF$zNgF䁮F$gzNEFF$EzNFF$zNgF䁮F$gzNEFF$EzNFF$zNgF䁮F$gzNEFF$EzNFF$zNgF䁮F$gzNEFF$EzNEE$zNgEE$gzNEEE$EzNDD$zNgDD$gzNEDD$EzNDD#zNgDD#gzNEDD#EzNC&C#zNgC&C#gzNEC&C#EzNB(B#zNgB(B#gzNEB(B#EzNA*A#zNgA*A#gzNEA*A#EzN@,@#zNg@,@#gzNE@,@#EzN?.?#zNg?.?#gzNE?.?#EzN<2<$zNg<2<$gzNE<2<$EzN:6:$zNg:6:$gzNE:6:$EzN7:7%zNg7:7%gzNE7:7%EzN5<5&zNg5<5&gzNE5<5&EzN3@3&zNg3@3&gzNE3@3&EzN1D1&zNg1D1&gzNE1D1&EzN.H.'zNg.H.'gzNE.H.'EzN,J,'zNg,gJg,'gzNE,EJɁE,'EzN 'J')zN g'gJg')gzN E'EJE')EzN!$J$*zN!g$gJg$*gzN!E$EJE$*EzN"!J!+zN"g!gJg!+gzN"E!EJE!+EzN$ J -zN$g gJ g-gzN$E EJ E-EzN&J/zN&ggJg/gzN&EEJE/EzN(J1zN(ggJg1gzN(EEJE1EzNKJTzNKgJTgzNKEJTEzNKJTzNKgJTgzNKEJTEzNKJTzNKgJTgzNKEJTEzNKJTzNKgJTgzNKEJTEzNKJTzNKgJTgzNKEJTEzNKJTzNKgJTgzNKEJTEzNKIUzNKgIUgzNKEIUEzNKIUzNKgIUgzNKEIUEzNLGVzNLgGVgzNLEGVEzNLGVzNLgGVgzNLEGVEzNMEWzNMgEWgzNMEEWEzNMEWzNMgEWgzNMEEWEzNNDWzNNgDWgzNNEDWEzNNDWzNNgDWgzNNEDWEzNNCXzNNgCXgzNNECXEzNOBXzNOgBXgzNOEBXEzNP@YzNPg@YgzNPE@YEzNP@YzNPg@YgzNPE@YEzNQ>ZzNQg>ZgzNQE>ZEzNR<[zNRg<[gzNRE<[EzNS:\zNSg:\gzNSE:\EzNT9\zNTg9\gzNTE9\EzNV5^zNVg5^gzNVE5^EzNY0`zNYg0`gzNYE0`EzN[,bzN[g,bgzN[E,bEzN_'czN_g'cgzN_E'cEzNdfzNdgfgzNdEfEzNqhzNqghgzNqEhEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzN~kzN~gkgzN~EkEzlibvips-8.15.1/test/test-suite/images/small.bmp000066400000000000000000000014661454007373500214370ustar00rootroot00000000000000BM66( ` ` h YgNMHq8֎WW헕{Dk"_hCRf>@dNzG(0CU~xj~uScSa`oSafx[2M2A^aB̌&k4jgtgyc^k.i`X| "5%v v"u!zmTb n3oug'|["ec_f/z6pn,w`fi!o_RELcMtE}q1[IwaSJzRq9q>eE3/unZ9 iVV}_Wm%aBy5&sdWmjuveWo>eAwF|E?h*2nCE3:F4 V#^("IrQUO3libvips-8.15.1/test/test-suite/images/t00740_tr1_segm.hdr000066400000000000000000000005341454007373500227600ustar00rootroot00000000000000\dsr/net/dirac/PET_Da@r? mm KBq/ml>T>T>w6h7B=5r/net/dirac/PET_Data_4/Images/ECAT962/t00000/t00740/t00740_tr1_segm.img::libvips-8.15.1/test/test-suite/images/t00740_tr1_segm.img000066400000000000000000077000001454007373500227610ustar00rootroot00000000000000c 6JXY~l04j[""" -0ov$XEM V ; ( #j9H ?   O H   M cFYIk1 a$,YY   $faE11a p!&**>(%#p!,jvRi{i  t 4 L   t 2~ d C w B  %   I ` j i X H=XCBd6IFC/C :J_=TI]Kw=C S"$%)H,.-W*'A$"yJ,F=|~* . v > d   m C m p R ( 3 , " : ^ b F W9L* !" |,yIo-,{Ny(:rz~`qHSy z3rL %3(Y**,w-$,*Q'$O" ~$(co0& L v m b @ &  ? X  3 b    + %   ^ J/ "7#!<GG;Q(~K>D%OB#ur"'*,Y,B,,*'%'"c /W=} = O ] P U c b 2  Q ' r y o B w j G 0 E F  t!#w!</fb3XIhy/;uh!iq_E8eud10V! $&H''' %$`"<`%E  ]  i i   3 ; = S O !    P o D N v | z W 9 = H 8 $  , . aSsJ w+-+B.s9S-"m6bO4r !G! LPU0   # Y ( [u,{7&n>UJ.: = f m 4T  =  & *7g"\-["_0=4Yk! X L @'zh m { 9 l 6k!(/\AQR'O@; Y  Dac " >  7 }:8 {ht]Zq  e 2 eU2- VaF}W7% WIwiI(U&`!OTh]BMY . ! H z m b<:Rs70~lpP A <  w s &  7 O % 8p(5m7M'LRDPFBjLV R y  ' P * K 3 5htj|.+ bd!% P  ! 0mw    U u T J J ]2n'{9yfW6kzKL@l w"+U hUm3Bb X 9 2 $ (  ^ i  n 7 ; t  |  G Ff2((r<Vdru9l.s  <"Im +,$4IOXtlvhz/d& . { y  f { Z 9 C x   q < .  hCd1Tt4!^M8vJUr},bR~@wbR)[o_5 .emEunW-_M , v M  T F r w M 1 + 1 ` Z = $  u 8z]FD^"K\~*Z)07P_{+v ?_<[= %=~1x(Eac4O  { j   q S aG?U< @K=   ?"*nEAJ{  ] } }QM++p86 _1f7>*I2 a m <kw0 El\?7EY/f0dHwp ) @ [ w q K 6 YU {y; LW% mEO[}2 Nch},R}V"L+er#~j_?HvXUV(5C{  yp1sv3 "6" ! Ur< - f<:%\a"Zp/ T~VwW ,w<%h/1mv}`<1Z;2UH^=KRL#$Q=kH  ekA<1 "$+&*(N*,T--j-+));&$!!R=r  7ARcq;H %[O|?6FA@i",B&3YiEDH=. !jm@  ,{Iu!$':)*+,,)++++v,6-B/ 02468 77Y5M3302-[*&#? K68& nYis; #2`h W|~1Cmy/a !<:txB R i  /C?- $(g,&0:368:L:s:99%8V778P9:<>|?AHA@><|9v63%/},=)l'%$s"! v=x&  r /It|&-A.5narIEUL>qwp n  9LT"&+*/4D8=AXDFGGG%EDC@B AB)CPDlEGHJII\GcEZBL?A;842+0/$._-n,,m++q*?(&$#"!| ci r /6TDYue>\b/mj.,E  ]n2!#$b%'*.27r6:?xDcIcN4RzVZ7]D^d_0^r]\t[/ZXX[XiYqZ[\\]'\\\ZY VDSkPlMKCI&GFEEDDE=EECA?S9K40 +'|"iH J ':vN@D; :AIla v5`%$+i17a<AFiJMPUQSaT&TUWZ]r`cfilpsvxwxKwwyvsuNsr poojoRoPnn_nmmmWljigCeddmdwdgdcd$ddddd b`]zZHWiSPaKGSB#<734/3+i&!=  nsR`*Wb.!d\x1R-F  '&.g5{psrvx{{|^{{zyowutNrr qqppOooooo mljBhhhii ijjnjklwml>khda]ZhWjTPdKFA<<_84J/*p#) k BF p ^J <@ 6u%+J18?FMSYk]~avdghiiiiiik}m npvrsuwy{H{|{{pzyxvuGsrrrrqIppbpypaonlkBjijjklpmmnopool,hdx`][XVS1O!JJEA~=9E4T.9'!P'C% | `]"| JT< k $ k/8$*076VV!j#0'+0K37BGM(RVZ]`d1gj8lsm_n:n-n3mmBlqkjzi?hff`ef)fhcil+nCpsSuwEwxxyy yy xy?z7{|}~ }~*}}l|!zfxwvuu"tCsqp%nmmkjihfdcZbc3ddwddccdnenfUePcu_{[VRMrGAk:47.'!w ] Ls7<,1,,r,++-.2=6_;@fE ISMRWq\_|bdfgijxkHjjai gfedcb2`_^}]]_]^`bdg*ilor$stu_v'vw7wwxhyzz|(|}h}K}u||ezxvtsIqpcnplbjvi ggfeCddcb7a|abd;erfQfgXhikjifd`\W*R;LOFF?81*#qc 47m96!:67 6655y68[UY^kbfik}l,ll l khjhfca`^]c[ZYEXVVU`V WY1[ ]h_beiQlknpqsitvwwxyz|E|}V||{kz7xIv?sqomkzhfNcbMa`z__g_Z__`?`ac*dfMghj"kmnnnmk~hpe4`\BVQ[JC;3+s#> ZVAAA@U??e@BjFK PUaZ_c]gjmoppnlkKi2fcH_\YYmWlUT.RQPON1MJLM?NEPJQT>g> =<;;;<>@RBHCFIN>SW\-`d&hJlpJt vxygz{${zly"vEsDo?kIgb^ZVROLK*II^I;JPKbMgO|R&TWY[]*^`Xc fhj"mporAsu_uusrnlegbZ PF =*?i@CE2G^IOK'LOQXUY_dinyqugwGy?y{ywvs$oh`ZVLCz:<1>'[  ex`iiiQhhRh6ijelmnofpMppxpqnm(i|e`\IW4QKE@L;62/-\,+,!,t,y+** *#*,,-.@0 2;7:5u1.,s*|))****c)(()J*)*++4,.O28?FMsSY`fmrvx9zz{uz2xwsnWf_XGPIB<62/(..c/01{2J3A4X568=9&:>;Z=?CHyNT[bsglp!squAw>wtwu~snh`YRjKDj k?lllmFnVoqFr,rr}rvqo7l"ifaR[hUP\JE@1Q223357;@FLRY_eimpOs't_ultcspke;_IYCSNG7?93>.)k$6jklflmopr&rssrqp'mxiufaO[}TNkHB=9U5s1-*),'K&A%%%&([))(*'e&&''&&c&'+30W7>ELRZaiotsu vw{xxvqxkcR[?RJ A9k2}+(%3%r%')(>)d*y+b,=,-.A.h..04159?_DJQDWe]\b*fimoqrrvpLm[hd_o[W)QKyE@;M6v0*#(jkllmro"pr0rsWrqVnjea[U%MF@:51.*( &#%^$'#z""#%'()!(F'\&&r&&b%$$$(,4":AGNV]f%lp_qtu/w7vupkAb[ RbIA81*y&#$$M%&'(A(()()**0*_*Z+-04:?)DJ~P[VK[`dil9okprHqXolivfc`w\\WR LHC=6/F("hi^jAjkm"noppomif `\UNLFo?>9m3/, )&$###I""O"$& ()*E)6('Q'n'''%%A$',39W?EKS&Zbhm5oAqsvKvv qld]U9M72:,)&%q#H"q"#{###R$%a'*9++*(('())) '&&6(-=39?DJQY7afkomps*vRwvrnGg`WPG?@70<+(c''({)<))) ('-&&w&f&&'E(:+.~3/7t< @rEwJPV\iafwkunr1s5ssrFq*pomjhd#`\VO9GQ@9re;eoefSg+hijjkhifa]W%PI@A9|2t-)&$#"["K#.$%"%L%R&$'*,-,+&))*+,P+s)) (+\/5;@WEJQyX`Qfjm\psmvwwtnpj+c[SK\B:3/+'*J)*i+!+++S*V) ('u'&&&'\)|,$037;./A.:,8+ +L,-. ,+6*f*,06;@EvKQY`4ej@m-psvxxurlf^iVtMD<5C0,F+1*b+f,Z-].--!+*)((?'['&'),M.148=CJCPW\cXhmpsVtiuvfw/wJwwvuls qm@hbH[\TNbbccehfhihiOgcv]dX%QrJA: 3R,(%l$!""0!"l#%&K&o&'* ,/D/.,, ,-..o,**0),i0!5:>CHOV]chgk=o#rXuwmxvtloipaxYPG?72.c,+,-M.s/W/o/,.2-c,O+,)(''/'(9)*,.2-6[prtvw.wrwwvu)splga\)W0baacdf0g*hOhIheb]\ CJQQX^c~gQkot8vsx5vuqleb]UKC!!!"####@$'F*-!--,- -..-+;(''(+k/147=\DKRX]bSglqtvvur[nhRaY^PHAP+])(f''Y'''' &&(b*/49?FfMU]dilprtLt8tdsssrLqpnPlih bb~cdfhhjnihoc_XkQJB:2,&q#"! _ !"\"u""$ &*P,-?-~-a.#./.-M*(G' &]') +8,.P1|7e>EwKQuV[b*gmwpzrrprpnjde_KWP&HC>;u751/-,++v+,+*)v(()))((c')m+/3h8]=3CJcR#Z`fj5ngprrryqq.plonxmlkihcddfhjkpm>ljad_XIPH`?7/)$X"Q O . G !"":"w"$='$*,,,p,,-{..o-+)''&')*+."17>'E@KQVP[ag.leo6q`qDqp4ndjyfaZyRKE@Z<9v62/-2,**+,-Q,++ +|,q,,+y*`)*o, /Y2/6>:>@ FlNV]#c+gFknpq%q oo5nEmlkxjji=heeg i[knoq$p=mgaYQH^?a7,.(#"B!!!!"C"#[###$ %J'*+++++,1, *)R'&N&%&')+-17=EKvQ3V[ag'lnppqapnIjgb]9V@OHB>;d841C-,?*+,.8/g/p.v--./K.-+\)*?+3-/25;AHPW^5bhk[noBocn m8ljihhgg#ff g hknqqru/t4qjd\9S#IA?7}.($ "";#N#$%%(%%%|%>$%'O)8*m**}**))?'&$$#o#J#C$&$&'*.4e:B HNTxY``f3knzppqipUolejea6ZSMGFB(>b;N72.,U*+-9/600/..//.,*T(T'(\*!+#-c/4:#AIQcX!]lc g&k&lulkfjiYgffvfReedeg i[lpstwxvuslf]TJn@8{/*%%$&(")f))*K*V*)X(q(>(*++b+*)('&i$"!! !@!#$^'v*0j6>EL QW_ePkn pspqKpomlBieC_YSM6GCl?;Q61.,-Y.011T/../1/#-++(U%%8%&&X&(L).3;CKRXk^cWh0j&jihgf[eeeddcNbef hkosWuxPw>tfmhg=^TJ@8/*&o&&)r+-../k//M.D,++=+,i,+*)('a%#", x| #&,2:AHOV^9djEmo}opponwmkid`Z,SMID?;151//90#122 0....,*b'f$##K##}$v%).6>FN TQZ`QehihLgfewdd5ccb a-d/dgj,n.qtTw#urke]PSI@L8D/+'(),0024f46967 54U2|1#01F1j0N.m-0+*{('8%}#w! h !%"$'-`3;defyi_mOq2svntqj{dN\RI ?7/+(*,048:1;<=>)>=7-53H10._,+r)'%###5$%(+1978>EYL3S4Y`Jdhjmknkul~mll kkxjifb^MXT/OK]FAx<87466653X1)05/.-'*(%$####$M(;-14=1:865+321@.,***g,-039 >ExKQX];bf&i\j@j\ijkkk)kjjziPhea{\YUQDLGB><:[9864010/.-*(_&l%j$$s#$k%?)<.85=IELVS%Zp`gklkhjihFfedca`e`e'fiKlpNrttrngD`XPVG>80Y-1+/3&8b=ADFJ2LNN6LJ/GFlF\FDLA?~=;:F9875e31M112447E:\?DDKQV[`dgjjkjijkl$lkkkjjihea^[FWSON:I D9@=;9\631|//.,*u(T&%w$o$#F$$).5=DL*S.Za2hkmWlkjFhfed`ba`ddfi*lpqsqm[e_QWO[F>80--1G5Y;!@EvHKjOeR|UTSPNM)MLKXHFDCIA@?u=:97929C:;>ATEJPV Z_bfiljmll:lmnKn$n mm]llkiRf c`]%XwSMMHzC?;841X.-2,Y+>)(Z&%J$A#"!"_#X',4y;CKRZa;h+kmHkkj$hSfUdcbaaac3cdehlGoqspOkd,]VENHF2>>70.9-27k=DIOM4PbU/Y\4\+ZWUUSSSR6OMLJIHGsDB@@@B*CEhGLPUZ6]adhknnnnoap#poobo9onon'lCiagday\W;Q"KYE?:w5;1.-$*('&%$##""\!> kS !%T*2J9BJ QY`gkImkkbihedJcjb_b&a_`c~gk5o$pqnib.[TLE=\7/04--27>EJOOS3X]`a0`3]:ZYfYHYHWUSRQuPPzOkMWK-II[I^JKCM2OoSW-[X^asd[gdk-nop,p~pq~qqzppCp?p=p-plomkZigtdT_LZSMG[@:T4(/x*(]&&%#"!!T! ?G#(08~AIyQZ`hksmkk\igecabab?b\c]a e;imolplg_YgRK*C;5/- -827q>7DK&PRU[=`KdeePb`_3_^]\ZdY*XWXWW]UT!RRnRSTGUW[0^b+dfhzjmpRqqqqr rSqq ppppq8pomljgb]WQJC<50+(& $"!< E #)129AJS[bzi}lml8kjg[dbbab{cZXLZo^mc=gl}mnk2:hC?L5T]dAkmo ml|jdfcaN``bcjUX8\b*2:CjLjU/^dknp nm)j/ev`^]]_aLQoW^dhiBjhkhUc{\ZVQ*JD>d94V226:J?DJOTYk]gadffxgg/gghii hh-hhJiejlmoBprrrspsLrqqsqNqq`qrtuzwxxxx)wzw-vvv7ut{srqpInNjfb@^ZKU*OHB=8T4L0,z(%#!! I#(0(7@yIaRI[Ybimomzlid_\\{\X^f`EKS [!agPijhc]uXKRLF@wIvtsr}qpWnkOgc`],XSMF@;73/*&a$+""a! E!%,3EMW^e+gjgd^YT+N H B;>=:,9h9Z<@aEKQ:V[_aeIg^hi@ii~iFidj-jk"jjkFkmmoprst,tu tTsBqonmmmumnoqnsvxyy xxxOxpx=w3ut&rqpon9khebc@`{\WR KER?;|72,(I%$#"a s s#*212:>C L0U]eqim lwlKh`be\DXNWVX^Z]7?HlRUZbreiMge{_[OUOxIsC?;;l;n>BHNTZ{^be&hik7kgkk@jjk=llZl_ldlmo"pqrrs0rrqpmlk jk*k5kl m{orEuvwwyw1vwTwwvusrPq%ptonljphfdb]PXQgJD@;~5R/*~'%V$:"!&c 8#%)0:BLU]eaiemlYkf`Y2TiRQMRT~1d9C;MW_d h_gf@a.\VPJDA ==Y=_@E KOQ^W]bfgj`km)m{mmYllqlmnnn nuo]prrsLsrqqoim=jhggDhhiqikRmpsouOvcvVvcvwxPxxvtsRrSqq\po4mlk|j+hqd$^WPJpE?@ 9&2,)I&$X"l g =#)1":CLV^oeizmkjgdg\UHOMK(LGM,C5A>IS\blgggab^"WQL FB<>>>BG MTZL`eiFjln0o}ppupIoop(ppppkpvqr rs srlqpo=ljggeddefRgh7il#o)qsu'uuvwyyywutYssrrKq\p0o$o n,lhc\UNI C;4i.)%#! gb!M$+^37= FNX`Eg5jm;kIhJ`XPgIFCUCEE'0;vGwPPYa{hjmjjf]TL3D@S;;<#-s8CNjY`Cg5ijKfXaZ8SMGDAABFPKS/Y_fNjoqrstuv(vvwNwwwwv[uuXttSs7r pp,nlifOcaabc(ce5fFhIkn!prZstuvJwxLxwvuts=r3qqlqiqBpopNonkf7_]YRLKD<]4-)d%:# f #'.6@eIRR[bijmidZMPG?H94X33)4@\KV_)fikhHc\[qTzN/GD@ABF|LKTI[tah1lqBsuvbwrx xxyzzlz6yy(xwwOvtuTsqp9omkhda__`Rabd eEgCjmoqRrstuv+vw!vBus;qCoo-oKocoNnmn|nmi?d^XQKC;h4%-)`%x#f  3!%)18BRK.S]9d iklh*asVLC:3R,+q*%1#{47,%#"3!-p8DQ,[drhlj^f]lUN+FA=R=CKS[ci ouslvw{xyyzzzz~yxSvuctMsrq_onmm:ljZh*edd@e3eggikTmpyrst#ttuu5unuts6qbolkmjkkk2kIkHkkifck]XPIkA:3-)%" M 7 d#y&_,\3;DM]V^Rf]jinkdg^~TG<2'x%x01&Q D  O:'3>ImTs\/cece`2YQGJTD><9X;c>xETLS[Cb5iWnsvlx\xy\yuyxwuMspmkiVhfffggi"ijkQlnnpkr#s5stiuwny yyxxxxxwvts`rpomm,msmnoFoUonnkDh.b}\TKB:c3n,(F" :j %E*3E;DM_U^+diij2c[+NwB7;,![[%6#.69CNW5_bld}`u[!SLLGOA>:;=CJQX_fl3q|tAvuvwHwwTvuJrpljgxdba``Ya9bgdEegifknVpsDtuvjwxyz@yyxxy%xwvuu sr]qXpoto+op)pqPqoqqolyic\TKB:*3:,k'"m : "'?-69>KFOWO_ch g(e^GTHh==2]'Y ( 2)W3=IRe[u_ca]UOIC?;;Lml3ieb_\YVTRSUvY\_ch-lp&s:tuv?wwx xwwKwxgy6yAGSLSZZK`$eHgijjj,ihzh?gea^[lXXUReP"MMNRVZ_e_jnrtv(vwwx)wwhw5wxxy^yywwvvvv_uuuv^www,v^sq l{gaoZRZJ[B+92M+`'"! P#&-4a?D,H/MSSX]`b}bcNc bbaL``^[XUR|OLJGGeGK>NT:Y`f%kortourvwDwww;wwxly]yypxxwwwww"vwSxxxwvIspkYf{_YQ+ICA981+($#%"V%*1t8E?GOBV[`7__TYQ9E;1f&] u/_ g&A0:EO@W[_^Y\XS,MPGlB>==@CGL3PUX[ [}\B\ [ZZvwxyyy6xxxxxxyyzEzozpxvrnid^WuOG?p71}+(%$j$(-4;C]KDR"X\\`^\TK?6 ,Z!Y: |XK|7 3 )3?5IIRX8]8]^ZVPKHF@>v<>`@CQEI1MP\RSTTTT SRRQ]OMJGoD@=;9P9 9Y_dhljnqCrsttuQv0wgxyyyvxxxxyy`yyzdz2ywu3plWfa[HTLD<51,*H'N'(.3,:>A>HYOTZ(\2^\WXSO ED:0'[ GA-5  @ "-8BMET@Z\^\YTONI5Cw?};;q;>c?BDG+IJKKKK2KIH>EPBu? ;8*42070 0C37#=XCKuRYB_idhko/qrstCuvcwyzWzyyZxxy=y]ybySyDyygy vstnuidC_XQIA3:40r,+%)+K-3t8?G]NT*W[\O]YSKH>4'*")h" C&0;VFNIUY\\[kVRnLGpB=;:{?|@B'CODDCC BB+@> ;*74-0-+)()7,0O6=EMT}[`&eiiZmLoqrstv|xyz|zyxxIx8x4wwv]uv"uuMro ie;`[TMF><8^3^1.^.H.n1~4:Z@6GN>SXY[[ZUTgLjAR7./%5 w$+  S)G3>HPUpZ\ \YVPKFA:=:::;;;~;<< 3*h"k5 B=4C $O.S90C~KcRwV[]]ZVPL7HhDA?>l;97l52/,S)'\&{%%$####S$%(a+N0h5GNU1Z7_a`1[XTRoPMJ?FC'@.=:7490Q,@(& $#W#"{"#$f%(0),/[38>DJOTpYH]bfhjlFn#o!pqrrrEpovmlwj[gdba `1^"ZUPJFDA@6=<;=@EJOSVZ^6avb4b_\V NE ;2N), 4 {vZ@;m/()er `"T,7 @}HOU\`b`N]ZAXWV RNJGfDA>M:51-z*V(&%% %&)-+.036]:K>CI]NS7W)[V_+c"f[iukammnoppp)nmljheb`p^][XWRMIFFDCB.@@ACGWL4PUBY9\-_za*ba`\WOF<3J*! G/ >UB ?#.8ZAJ8QAY__ddc`_~^\Z~VRKN4JGuD?:51.v,+#*~)*1+<-04I7 :<@DyIMRV{Y]1`Echehj2klRm6mnnnemljYhfxcM` ][ZUXTPL|IG.F[EkEcDEGJQMRwWj[_ma=bbc1a3_UYRXH>'47+"  U 6>w 4 +C%n/X9CZKTZakdfedc b0`E]Y|U]QYN;JFBX=S9p6r5S4(33!3p46W8<)>ADHKOTW[2]`kbdfhsijkhllmmmlbkOihebv_5\ZY`WjTQLNk5 ,W# E(  dT6 y&1:=<<<=7=?BDG9ILqORVZO]~`1aceefghijjkbklm lkjhgSda^\zZYwWTQOMLfLLMNQ SW}[^7/?'"CB=s ^((B:Dvk#\ re!)191>CGKmOJSXu\_acPdfilinoOoZnoopqPqoumkvji@hggofdcZbbdbbbccdfSh ikYllnkk+jjwjklqllkk=jihfeb`^_\ Y_VS~P KlF@-9`1*i#k 2Jx*OY2N@3E\nU X%i :*&.!4:(=@CGMiSbX8[]_Raehl}n=onnnoo&nkqhecb`^][UR(8+ M?#O)/4V7o9=KBVHNT'WZT\`ddGh,jkkllmMlLj}fcg_\ZxXUSPNxMzLMOMNO#PyR"TWZ]J^__5^^n^_a5bEbaaaUaA`%^z[gX/TQGNlLIGB>'7I/(!lN` t-e  >z%~?B72031- 4W  `d%*.13|7<.BhHQMPSWZM]`axabc-cba]^YUROM'JaG.DsA@?@H@ABCEDH+KvNR$TUGUBU4UUVWKXYYXWW!VUROiKHaECiA?a<72 +7$ ~%8uo*-(/55+$AaT7 u:#',* -W1w6;@EIMcPTVFWFW6WX@YXXVS~P,LItFC@=N:L7v5455H6W68:P=lADHdJLLILLMNOPGONfMmLPK~IGDA~>;96420 -0+**$*R+b+-/O2c59==?A$AwAB BCDOD&C`A@?>=k;9B7420'-+) $P . I`x_t2nOFHe" 3@ 7*R<[ u =!%8(k+/4B8<>??????=:8g5r2/,)&#!.!("&)-T03B555667S777 544 321M/,)'0$ QT : +P8om0[3T35Fh&%":2 M b yF"9$(e,1/2t4;4y444|3I1.,{)&$!4NMcvb@!W$&()L))*x++++*)o((( ' $"#U8c } 9oz@O2 MM4DoL:EUk|yd  ish)XJ rCB #%'B'(:((' %#z!D*@hA , | h  9z] f$ S 0;<!7 z 7 $lM-_ eTJSZevu]  I m r|/,R:xZ .  qG ub=fZP(Ff V_ _9Vponoe]ggRhqgZ^?j) C v},1 { 5+1w54dq 5 ?  ` z F N y8I~?1ll`baO="!  m{vs3M&+cj  P B8+{FaQ\s/ S.k4@bgw#]( jxggZ1! }jjt'I9H|'8mVjKYQp O`[E|virz@!)-Bz{ !=bU1Kku?kR:CSpU3?_~hS0*7*Yo{R$ A8+ P /qK]VR^fp|vikjtN<%/e}wn;bxtQ.  ;<?oU # *D~k9p(' $CpoT8%" )<1!UW%>1$] Rb`8F (\zw}kK/ " )4! ">5,+@D"M 07#Q[FBC-   &+.*-# * ]7R]D$e3(* 4`zQ.  *% 3IG3)!$)*0=27V|$UjvbH& ]/ '"  2L_mzh?,  ` *LYKpkYW[s 4!"!7 ;B/6Aj " { B  & y  3 ! p  R i@X;GeF6_fDf4p S   {d_?** k| {#&((&g%$M"!> QMf&: z c . E (   % U `  L e n s  I }Ni^2k#< ?J!! aIn_^3;]&  " %X(***(%'2&$c"!W s^yAq .  p ] T t  $ 2 < [ 7 ' 5 - * - 7 M S } 0 gX^(cx~a."[uY xZca~#X<dz!$ %b%'()I(&%$/#5!V;Ue4;[, m r n H (   - \  ' g x G   - ( ! P D0zwmH(( (SJ#q g#%'0'c(4('c%$c"! >1m!P F Z X G [ a b Y Q P \ g } % V x m P  } a D 4 - A K' (? i08abfV27o'ilN;9UmW/ !f"j#E###7"! l<.!^ "  &   ( < O N D %   ( : M t ~ K 2 ; a { n P B > 8 /  !XGK  k @pIi$D8w2R9X/_8UDJft3zG X & ) C{}6Y)=b $,! !e - e x M o $\~` E + V<b]`0_F"\dy ]  (`8o W f L J N 3G2?xB01io wfE0  U f, t t 1  Z![j@tUW-^ P[o A cl*h:^  V'l= OQaE8#,{8Ymn5UnT-Cd ^ (HD s l  t|%*z(u+>uYb5 B G C t  - f   R Cfx*k[3 ` *\4Lk\wCZ =    v $ B  O i = 0 Ak&' S   ` v  I x l )7y*q$6wFy2w61e*pv WkE)e ? +  ~  . S u " x/ 2   B 1  ! 4 n A X 8=E|EI k(#~Yq8#7\ Fj{~{zZ __;{ " k , O l X T    + #{BCb6&f[pbS<uh|@tyaqsM uw*GK941'+5WpXxh/wN3 @ D   |  j } b : ) 6 n Z D / I i k6kT6XxYD Q(gVnu}s=]q`Y~1pg _#An`!w~ApYw%AX w   m U aG<dF T/jjejk 3;n` J%.*('_> h n W;zL I,- ):)"gZ:j&8m:L f p =lw#`;p^r'""5WDf | > h 0 6 n kafSRAMc, { : ?e;L~(n0'Dx_C:=b(v^+ I* Li0r d%<otJB> J4hLpPih8Uu6^L \  zP$\9}'u `KiKc'*EMb?%OavY G+7- <1_\qR 3 ,cKK;"& )-e04%6W8s9?99}98766l7 789:;Q;O;E:a9c7531/v-}+* (T&$" a   RZPP@@ "f"zVMhwJEtr g R"{-P1!%l)-U1p5:!=ACEEFED$BA@@{A ABhCKCDvDXD:CSBN@><:8754)2105.-W+)'%$#"!95 2 -<}qA\xi? ch# ,fg63uC"0 ?AHL #($&'*(`*-05#9>yBG]JN3OQBQPONvM@KK.JKbKLM^MMMMeLKJH_FDCKA@?S>V=P\\\n[tZYXdWWyXXY&YsYUY3XXWVUTRsQONoMKJI4HFFEUD-B@>;952/Q+(,$ C B*2$HK8+1Kq]B C$y)-(1L47:;<=>@>CFJ N RUY/\_bdPeffEee1ADFHIJkKM5ORUYM\_c%filn9oop=oo'n#lkkkkkk'jj,iiiShgfeeBdd5cfbaf`^]\[ZYjWVHSQ[MID?:570/+y&!dC 17H@=K?/5E[cBv 8{!(.]4:A/FLJNQ!S TUVWXZ\_zadvgjm5prtKuuuu'tos8qpooo8nngmmmm*m llPkjjiiiiiRhhp83.*%  qT{fFN-DBg>rjP $+2*8@/GMSWZ]` abc)cwd3eg)ijlnpsruwxyyyyx[w utmsQrr/qq"puooosoWongmmlmMmnn{nnnnxn mlkhfca.^I[X/T+NI C=[8Y3/B)#q E ysn s R?* QD 4 pc # )P/g6noqJrt uw(xyrzyyy:xwvuetNssFrrTqppcp7poo+nPmmn1noOopxpq,qwqpqpomkgdbF`,][VRkMGB>9m4L.^("Ka P Lh x IP9 "13wXP +Hxw"(s-4:@wG!N7U\HbhfjmpyrsDs8srrLrs82i,A&a!)u "`I\h+CS' $,N f HlE" %r).4s9?DbJ4PtV]QbgkBnqs5t ttgtssDsVst#tYttu7vw$x^y2yyyyyyMxxx wwww5vhuu'tt;srrqqr)rqrssOssssFs$rr&pomk)hgewca_#\Y)UR6MHB=7M1,P&M | HA 9weVl/.B \FG&QaJ d$j(4,H0@5 :@5EIN|SY^dp*nmIk]ihgfe%cTa7_]T[?WSNMHBU=#71*|$`T[ { "${=9Zcc"&*/!37k;AFtKiO}SW9[_cgNil[moSop|pdpQoo8nnmmmn/opqrtvLwxhxy9yzyyyyyyyz{'{U{s{8{zzyDxvv uytt7srr q p@o{nnm]lVkih}ggggrfte,cc bPa_[\7W7RALHB<5/U)3#Z HB& 9d !"R"#-$i%),x05"9=BGMRIVZ+]`\cZf?h`jklllllikkejihhAhgh?hj%kmvo?q's:tv\w#wxOxxy/yZyFyxz{{|7||||3{{ yxDwvtsrqHonVmkkj81*3#uSD M7$I4q5~66r6689=AA]FcJOOT:Y7^?bofvhkUlll4kjjhOf cqa,_^][ZRY X7WsWVWWXZ\^`cPehkymoqs]tvwxyzTz{| |`{{yz4xw*uEs)qGoDmjh^f ca`M_^^]^5^}^{__aEbdf*ghjOkm;nnnlk=hd`s\ VuPJ B;3+#| @z/e??@Z@@@ACGWKdP9TmX]b/fvilnponlk hfcU_\\Y\WEUOSRhQAP'ONNNqO6PMR)SUWZ]-`McfiloFqtmvx}yz{{{|{Tz4xus,pmkhf#cK`^[rYXzX%WWWXYPZ\^^o`?aczefhk%mnoYooLnmjgMc^ZiTPMEX=e5 ,$nv. k4)xIJKKCKZKLMQUxY]afojtmp=rst4rwpm:jffb]Y!UQENKJ1HGFFfEEEFGIKQMZO\QTX\`/cg@jnqtwfy z\z{j{u{zy vPswpliRf b_\rY}WTfRQPQPPQRT$V.X[s]_aFbdgDjCmo5pTqtqrrqpmk/g0c^X^OG>N5N,u#oq 2+"%ScT0TXTeTYTTVZ]7`d.gkTn\prZt#tspnGjDfgay\VQtM2HEB@?}? >>u>,>2>>@AC{EWGIiKOTX]DaTeimquwyz<{{{Jzxyu.qmyi=d`]YURwPMKJJiIJwKLMP RUXfZi\&]_bjeilnpvqsswsyqoljf;aY/PGI>E59+#1t `:)97\]P]P]2\\]X^ad+filoqst3ut rokgb\UOJIE@=E98}7C7377666785:;=,>@BG KQV[`e~josvyKy{{ {bzxMt~p}kZfQa>\fWSCOZKIFyE8DODYDDHDEFHKNQmSUWY\aeiloqtIuvuurq9mi}b6Z PMG@=4q+#!+ ] b-Pb6bbbbbc?dfhvjEl{npdqbrvr9qomie`[v>>>k>>?W?ACF}HJLOSQU,Y^chl(oArmtUv/vvuhttqqnVh `WO5FW=u4t*"64 2 fggghh%hjWklmopqApponKk.hc_{ZT6MHB=H84'1 .i---m----k,-#-/%/01B248>:E@B_DPFIfM?QWf\bsgl pru\vwwwttrm_g^VNFj=4+# cxhiij.jk1lEmnop qq&pnmkhd`\QWgQL6FAQ<730-+y+*+I+++++I+S+,,-[-~.04!9N@G+MTGZah@o{txy{,{ {ywgrl4d]SUNHA689;<~>AbEJIO!TZ`ejmqsuvuw uTsojc\UNGR>6.("b B 2ikllmKnboqqrvrsrr=pmkh[d;_ZUgOIDf?j:f652.+)(5((N)>**q**,)))*0**)*+/-4;Bk=)84e0-+)''&&'x(*&*+**5)))))@())f,y07e=DKRZbsjpu6vxxyrwup4iarY>PHA9F3=-n*())*+,7,-9-R-~..//014!7;@EKEQV\afimps8strokgwbs^$XRL3E?94n.w(D!!Jik.lxm`njoqnr|rss5rpmiFef`YS'M&GM@:62z.+)(E&|%$%U&e(<* +$++C**)))l('''v)-39@GNV^g>murtwwgxwAupFjFaYQGIAl9P2,)'(()*+ +S+)****++`+-A//26;k@ E[JPV[`eKj+nqs!tVsHr5o^lQhueWaR\VQ%KmF@@:3,o&% hjkklimo pXq:qxr=qpmje`[TJMF@:40m-*('R&%%$%j&(*,H,,R+**+**((D'),2{7>ELDTJQX_JekDpCs!uvww~wovvtromi?d^|WQLe#eghjOklkmJmfnlwidU_GXpQ(I(An:e38-(&p$-##M#$& &J&V&y'), ...(-1--./~/-v+**+-$03'8u9s42?//N/$/0//S.F-],Z+I*X)m((d((*5+U-u/g37&=-CdJQX_ekos:tvwqwwDw@vStrpmSid[^YGTtdevfh0ikkllmvkhc/]VOQG/?81i,.'%##/"#$%%%%~&(+g-e----b.2/R/.,+,*E)*+-/37=DL2S7Yaglptv|x(w8vrVnh~aYQ~IB=852@00F0100//.7,+*`)(((4(()*-t06l<1CWJdQYg`Rg0l1ps:vw wwwwvtsupn%jef`\eDefhVj jkvllm7jgbB\UME>-7g0>+?'#%u#y#"#l$<$$$$h%'*m,`-->- -.U/=/.,7*}))%)*G+,/28M>F3M$T[>ahxmqrQtvvous'pkQev]UN6GuBY=69r5[31t1T100X//.-,8*))C((r(8'(>(`*j-27=DTKSkZbWhm6pl?lnmmAie_[XQI.A)982+'$#"Q"+"L##$D$+$$*%k'*+,@,--./D.-,*))<)j)5)a)*,27?EL4S=ZWagmprrrqtppm7i{c[T#MGB>:f631///....,+E*"))c((('B&&M')f-V16Z;BWI_Q7Yz`uf`j8nq.sGsssXrqupHon6mkaih&g ghjlmntponWieJ^VW1NF>6I/)H%""s!_!h!"#A###$%Z')*+C+,-----_,n+0*4))))q)f)*,17i>ODK+RY`5f*koqbqAqpaomj,d^VfO4IED'@5;730...G.c...T-K+**1*)w('&%&(+D.027=YCKTd[bNfknqrNrqq&on~m`ll)jihghjMlunp pr~qpje^1VaMD<4)-'$"|":!!"e#*#$)$,$S$%')^*E*n**+v++**)Q(())>()))?+1-27>EKR]Y_ekGnLppjponljae_XQKF A=H9a41//.{-..f..m-,(**f*8)('U&E%:%&g(*.y27>FNVb]8bEgko2pqOpBocmldk4jj3i$h(gehikmp0rrutCqlf}^VJLC;2,'$"""#C#$@$$$$%%'W()g)))))),(i'&&&' 'K''t'*,P06F=-CJmPW_^QdUjImoooonm*kpgMbf[ULNHC?A;16r2/W----.<.4-G+*d)))+'&F$#f#P#%d&)Y,1f7Q?dGPWa]&c9gl5n!o6nm6kjhhh_gxfeiiknprsv.uRrllf^VMLC;92m,Y'D%$$%,&F&'Z'''''(3()*$*3))`((u''&%X$$$%E%1%&)+=/5<:BIPMV]cim,ooonnmlxie_HYSMHFCF>951/|-...4-,+))*((4&$#C!!b!k"#*%6'U,B1:BbJRLX_,d,ixkmQl4kxjhgngffedDhik@mpRrt3vurl(fk^qUL B:M1+'&$&'u);*L*++,?,++^+*+$**6)(9'z&%$$0##w#[##$v%(#*G.4 ;?B IOV]ci^llnooonnmmjgc/^YSTMH4CE>9g41/F...--~,Z*)((3'g%$'"h S !#v( -5=FMT[agjkjihg;f/eedcchvhj"lGnqmru?tqjId\T"JAW910+@'&&I(*O,.w/{01222r1T0C/g/0.-q+*)(('%&7%H$$}$$& 'n*K,1j6=DKRY?_eilTnPnonnlmm>kif4b]YSNUI"C>:6Z31q// .,*))(V'&%$"!R V .!G"&,J4N<5DnL*SZ.`fgikuj[ihgXf;eedcbhVhiikLmp?qsro$h(bWZR&H?8/*''{'*-- 0K2h357S9 9o9!7544(3~1/-,++*4)6''&y&'(*-16;BI.OV\b{fjlmmummmmt7.*t'u(),0$36E85:=?@x@q>=,;;A:86\4m3100.-e,H+,",.048o=CJUPsV,\aei-lmnmLmmmmmmCl7ki,gfdad]7Y"TOK)F7A=596W31?i<:97654B2g1;012I47;#?EDJQUW$\a-e2i#knoo4nmnOnnn}mlk?jGhnf!b_D[ VQLGB=952I/j,I*((|'&%%$8##B""!"#( -X5ha+[TLqDq<5.c*(+f-16:a=@FCGK`MMKJI(HH4FD7B@B>='B2FLKQW\`ehdkn.pqaqooopVpopQSTKRQAOOOMKLIG+EDCSA?>>?!?BDuHnLQWm\adYgjnp.r"rrqqqqqq|qpooo%mk=ieqai[V?OIC<61\-k)'P%n$##x#"""!!r !"&,3;aCKS[bRilun>mAm_lGjdh>ff:ejeYe]`5`gbveKhkYl?m^jte^X0QJC;5.+*M-05;@_DqHAMQVYYXGWUUUSQOMLKJsI'G^F=EFnGIK2NRWs\adgiloqsJssssasrrorUr;qqqqpml hd_AYSL^Eq>[8 1-)L&$#""!!!!!!(  !&+;3:C=KT!\LbijlnQmCm_l+igeeeeve\]7_c*fj jkhc\OVPjIpB(;5 .P+t*V-1*6NPRVY^bfi[kloqstuutjsssLs:srrrrrrApo|liPc^YWPIB);?4/x*'%U$"i! !!V!f Bw c!&+t3{;4CLU1]cjgmWnmml5ige]e$defXY\`e"hijgbaZUJOZHA:4.C+*."172``'`_^]([ZXXWVjUUyUlV5VXZT];`dghWkMmynoq-s4tv:vFutt1sssssRrrsassGrqqo9lmgb\82.*(I%"!X! !+  "G&,4hDInNSX^Faddeef|fffesd[c+b$aa agbctdeghhj:lnpqrusstquwvowTwwwFvv uuutt1tt9tJt#sjrq_olhb^&X[R(KFD[=72.+N'\$"3!x!!0  !&p+3;D|MuV^eKlnpYnnWlh2dhb bbcetINT[apfigiBf`YSNLHA;?6$0/'.2S5;4@[EKqPUZ8_Abe:fgoh#hhiniPhgfeee|f`h i[jl>mnoq4rHssQssstBuvwwxEx9ww vv^vuu?ttt]t6ss/qpli:d`[VOHBJ;6m1.)%"! !7  .!%)19=BJS\|cqj~mon\nkg8b`X`H`8acC>IHPIXX_dgi0f}aZUROIOBz9h4/*%#"B"!r :""%,4=ENW_=fjmllXhc_]ZJYXZS\6{>@FPY`dhJfc]XtRdLE>:05548;B+HNrUZm^b*f&hjklllzllmmll=ll;y7966 9p=DJ?PW]bdhklmxnhn}nmmnMngn%mmmnoqqrrMrSrrQqpso9nnTnno7odpI5R\ agg.f`[TNH2Aq<8X77 :>EL%RZ:`dgkm noUp:pcp#oop:pHooNnoopq(qqqq_q=ponmdllm%mn9n{oBpretuGPOY `sgljPljg`XQ>KHDEF'+0:FP1Z`vfggb]fVOOIqB=998y;@GNdU6\bgj|moJpq{rPrrrrrrrqq$pq=qhqnq=ppppIo+mljkdk@kUllmAmnp:rstuuuvKvwvvut.rqJpzooop1pGp:|99Kml jijjek7klpmn_p2r'stucuvAvjvvutVsqoonmmemn6nRnQnnnak fi_WYQJCO;3,(*$`"! {t 6!$)M08~AJRR[lbZhj_lGhvbYPG?:g533L)@4I?JU]ehjfaYR^KDC?R; :9=sBJiQ|X_ekGnqgrttubuv\vwBw"vv*ujtssr7q7p o"nnimljhgh&hijikkf`FULnCZ:93-+*%x0< GFR[dohkBh-cu[ SLgD?;:899tu^uv1vw_wwwvuAtZsrqpko*n0mm-ll1jthggh,iLj jkmo q@s tu uSuuubttOs&qoljijj1jjjpkjjgd%^;XQJwB:4/-)&]$"w!!H"$(-5=F.NVl_dijj"d>\~QlG>_4-4&{$R"!-8FCOYgbg9ki[e\TM\E@;:98R;@HPDX(_ekorsuuvWvwbwx8ww#utsrqpio+nmHll}lKkjhghDhijHk'lmoqstru/u^uuutt/rq nkihiii`iij9iig c^/XQJIB;4.q*&%""!$ %*08@IyQYafk_jViaXLB99.&m&{)148?KU_djYie]VBNWFA ;897d:>FdMV]cjnr sKtuNv vw2w[wwvt{rq}p_oinm l3kkllkjjijkkklmoBqpsetuuuv%v(uutHrpnrkiii5i*iij?jjcj4gd_ YLRJC;N4.*&y$^"!!$',3rnDo_p+p`ppprbt=uvuv=vw vv5tsrqxomHkLijjikGkklkkj(gXa[T]LD/;4. )$"p !9!e$(0O8 HSe[3bdeh_YQJE>:79@;AH6OWX^lejorst43l(u7r( kp)3#=VHYQZv^b|`T\UOIC?;:Z:?zD,K"RYM`f>k]npqr qqq`pn7kMgd"a][YY`YZ[m]abdgjrm oqspst ttmu2v*vvvivwwwwYv+u ss.rqpppq4qrr-rbqkpsmFic]@TLC;4y-'#3! I"#);/8'?GPW_bfd%awXOVCP8.#" `NUB  $(-7BjL)U[`H_^XfSBMcGB=<;/>uAH#N?U+\Ibgilmn5mmll$jg+c>_\lYeW&TSoRTW[Y_$cfjn=prssst tu0uurucuvwxwvuuDuttMss\sasstotMsr@plib\SKCi;94,'#{"s!)#e& ,2:B:IRvY4_Ja\c`\=RH=i3)L .l8}#'1);=@ ELJ-PcW+]3bfeGhhiihg^fdbC^ZW~T|RSONMINPU-Yp^jcRglorsttu uLuuuutuvwx?x)w~vvvvvuu*uDuv vtuu)rplhb6[CSK+C1:3,i'#"!$|(.5H>,?BFK PV-[=^O`atbKaaQ__]7[#XTQN LJ IGHrIMR5W]Nbh loqstCuupuvuuvvwxgxx$wwwwvvdv#v`vw1wGv"trokQf`Y*Q6IyA92,U($$#'_+29@aHO:VaZ^^^XXcPE;1'Z kM] 4[&0:F#OlX\J`D_^}YU+O7IYD?>0=@B-EINySHVYZ:[ZZXYWUSPMJwGjEBC?BwA[B0ChG*KAQ V\bg.knbpr2st?tu?uAuTuvwxkxxxxxxkx%wxx>xxxAvtqmhc]oVNG ?J71,) %y%g&"*/6=9DRLRX[^]f[?SJ?B5g+! 7f< |C  )4a?IS@X^*__\XSMH?B D6G@JNAPQRR"RQ!P MKHEB?={;]:9;1? @BE*GHIIFI3H~GFFD@=:75^3,2S1^2_37); AG=NTZ`dhhko q rstau vwQxyjyyyFxxxxxxyxxw=vgsp}kga\nVO1G?93X0,|+_*7,/5;vB/IHOUX[[\W|PF9@A2AA&@??><9630.,+*+O,a/39@5GNU[0`1e\icm^orEsrtuXvwy&yyy,xxxwwevuutsrol fb#\WQJCW<#62w0./.n/ 26<{BrHOUYMZx\ZKXRI>4+" B(s j!1*5@IQW'\^u_\YSNID:@I=;::?9b9 94999866j55 3>1 ./+P(&%$%&H)|,29 @HBOzVB\afkqnqsetuvwxyy xdww.vvYuCsrtq`ponxkga\WRWLGE?4951w00249=EBI{OVZY\l[\XTL B+7-%-N 9QdnM#-v8 B(KjQXt[^]\WSaNIEAs>66 5X4T20/..p-,*(F&#$~$#p$8$'*t/5=DKRX_dFilm.prtu7v5vwww\vuttgs>qvo`mlfkjqhd`|[V?QNL+FA"<9z7s5/331t/-j+<)7''&&q%$#*"0""# #&\(-3/:OA|HOpU[a{g"kuorstuvAvvxutsrEqHomnjhgfePc(^YSNIENA<9 5z44>7:T?C+GL%Q4Wd[_<^^[6XPHo=3a)  T 0$3K UaO(N2=qFN^SZK]`_[\WTJPMIE\A@=;A8w5360-+ (V&^${#####Y#U$$&'*;,05;BkHNTqZ[_e~in6prsYtu%uttrzqocnlIig"ecb`^ZYSMHDAB>j;86738=AnFbJoNgRWr\e_ `^]XSgJ@6\,$ ?H8;,i[ 8x  *5?HoNV[`aa\YV$SPLGCw?(9*~,e.04x8>CINT Y^d+hlo0q7qsBssrqpFnlkifda`?_2\YT`NI DA><:98:=BGLQZUZ4]aab@_b\VN:C9r/`%d l14k9?B  5 ",7D@HIOU\`b`^7ZYoWTPfKG`C@=|951.+)6'&}&Z&'Z(+.1h36'8X;a>C}HMR.Vn[_d$gkmopqqrq p1nmJkj8h$ePb[`^Z] ZVQLHBDB@?>> >AoDI\MRAVZ^o`Za``r\WO{F0;h1(o<| UJ Ap> jW,$#es\#.8/AqIPX^.cAd#c`_i]q[iXSO9JGC@.;73g0.,+++b,v.1 4/7:h==\=> ?@2B}EH JMOsQTWZ]_acegGhjkmmnno/nn3lkihHeb~_J\[YWTQNMKKKRL LNQU$X[^`[aE`L_][WEQfH->4+#F I&QeoLYt? )(c38>OHOV\cg@jjig4ecjaC^e[TWT!PMQJHjG{FGHdc4a`^[XVGTS0S RTUXe[^s`_h^\[hXVRL,C:2q+$[ Drr.^{`'0Y<[ K.",7AUIOoUZaf"iai:hfff ca`#^]\]]|]^H\ZW(TQiNID<:3+% f_ KF\  ;GkVW6fe N,#3+5-==DHMR}W[_a`bc&d ef_grh6h{hhhhijlwmnnnnmmUm9m!llkiihhvhggghijlm mhmm2llllmmllJkj3hfdcAa`^]\xZY[VSOLID>e7C/(5"m tR,(@H@Nw) 2 S!)2 9?DGL[PUY]_abdgixkmnnoopvqlqqpoNmlkjihfeLd$cjc]c!c8c%cdfMginjkLkk>jjjkCklellol*kDjJhgjeucF`][RXV?SPMI.D?H91*$h\? PU6 QiK~NA8KarVNO s '+.s49=i@D6HMSXWwZv\E^lad7gjlmmnooo nl igved+ba _0]U[fZ5YbYtYpYZ-[\a^R`fb@cddddAd)d>defgIgFgJffdc.`]YV3ROM JH D?:3y,&Q @  3%Nn{RK;;EZS#C9 v#)/37#:!=BbHMRFUX[^behijFkl;lkjgd`^^\-YWTRPPON"NLNgOOsPQT&VY[ \ \\X\F\]$^U_aaaaaD`_]YvUsQ MIGSDB>:u4O."'! V0L5DI@=:;4*=Y ? V20%E*-03x6;Z@F_C'GMKMNNQsS@TpTVVWVUROLIGDZA>^;87v6K6c67J78:U;58T53q0,,`'z"O] MsVzkPT(79&!^ Q C#&)-D1U5:??BEGjHDH7HINIIQH@EC@>E;95630.i,+++,x,.!/147:#;?@A7A@@@+?)>">@=F;9d74Z1/F,)'$"( ~mx > !#B%(s+F-/>0U01#1234q444h43f21]/-6*Q&# Q, j #A$r}WOw=iBS,-@e}$- E 2  <! C#2&)-u/12;3221/-b+(t%#m g7aSz!#N$y$%j%&'(n()(((E('%# GO+   FA9Q#tE-9KbtpZ  wxo| 8 lL!M#.$%l&O&l&%$@!y7 ] B   6>DHsd7|S , / W h}qI)S pRDMR]nnV :& kIggL{-Y " ;4 C U Y=@Pe s E^*^^=SropbXcgP  zgY7# :$~3GI 1  o&Lr  y3=<N7Ykh36 s  8 y A  =Eh9_KnXVZ~|\N@" pmadvp.VxoVF%Z wGJXSdW' zdq$q6xv^XGMoV2! sw &Db[)\t%|Y?gAFpus"Mqf$g' &tt`[Whz@ %,;gx0Yq{gS@]N\$cQ57Kop8$8Opub6 .u~wq}U& !;5 uWS`PlUTMS_mwwrfZO\@T`xvjgW^%aqN+ ! 89 JlO &2:68,+2geR' ~unw\ >A0  1&?dpQ0  -=4!IL+:Q6&d;KK) s-%8+ $?u yyuT3 "".9+ *3,1*K*0l>(/<GF-'e cHIP;     *00+.'!'   3j7F3Z?;?D@* %/Et  ^6   ()3EB0'  (70( 2CD7+,AWy9M[N<|T:69AD9  ":M^soM9  f )Nc,l}RT2wql[nt=D, W#)%%_# }W7 ,  $ f   ^ t  ] jDf@B\b,W*DH]S.Q   r`jD3Z1o3vxK+ /"#$%#x#U#"r!!!!!"#$#!: / < f W    ' ) ' 5 V C W q r y  U  G:T}{v C FI  qgD!mu!$%&%$$$$##p#{#/"#$## !y<. e W L n  0 C L T j |  6 A 0 - 3 ; Q [ @ ^BWdx; ~ ,)^x] xUf"oAN "#|#["#$c$##"X","!R $~D&- ` q = L #  & ^  6 a | ^ *  , 9 * !  >!|u_\xV%+ PL-]r{4 P# $%6$$$$ #"!! s je8Or393 ~ d ) D J H A A E Y p  * : X i t \ 5 f J : 3  pl 4 b}6fKhh`M8;y&dfE14\kpL* "S# "P! .3C G  PZw q k   5 B 1 '  / K \ g { Y ,  $ L v q U H F E <  , 9 L5_ < l,B#f ,L@5L4R: 1tW oA "3$c 5  %zbX#,<L\w N + r w K  & ~ X(U m c  , Uq$Mb3a"G \_|~"T9IfeaV V - a . x Z =-{n9uU] c?, C \  P k L p {ZO AvUU(XShp u  *|I7 P  2 7 ,.XB@F+1|kekhX9''M~ 2@|2XmM&GD ` 7 G X :   p  K uPcYz/CtWT= Q J c  } =   cz0LkC, 9] <-Qso]+ # y  }  I m ( _ Ix*2* T  c { # t   ~  r t {   mG b r$@>xK:Vr Nu#3,9:  6 j  \ e b = , X  - = 3   C *  = u A 5  O p C 3;l= 2M#2 W'@rK|is=r<av }]puL.g < C S  k ] [    % mvP2c-Y{8.2/]Me52}@v F0SYTA15Dn* <KV"BO F Q /  " " s ~ f ? / < r Z 6  ( g V xQ_/Jms5CX)*xaNeU' 5/Yzf1?quz{GF:vG    o V ^p;7rd2`[J1#YOfKFe:zM'EE9e*~J a/(D`Z>C;\BU\#T g r ?rx$aIU;0 ! o41}_#{ H q B s " } P d F  m 6^wo20[Eg3N )Wq>v`,J'@j6^14p,cjFCF t ="SI92u37D* h i '3P&XRM*d atf{Y7Hw-wkONv+l fN~{e/m@|M iuW&]  ! !^!w!!{!!!j! 'nsnU ' T\;#hto4!w5K8z{V)r7  U0t>LPR] !5h X h,$65Xi['\ G: 5X!#&')T*:+$+y+++i+.+ +Q++++++++++`**#)I'&k$Z"3NpH>t \WL D?(#U5VE 9M]I3[boU Z! 87[[  MHq!$(=+.14 6*7L8j88877666666{6S696/66 55P432q14/k-+,(&-#!6_, [: Vj\.dk^Oqv}@@h}OJv p oO=gF!X$w'+/37;+>~@BCXD CCBBAA(A&A;ADA@@d@)@???? >5=m2X358;?DXHLPWSEV2WYmYZYYY@XXYXAXYYZYDXXBWWWWWFVUU$T RQ&OiMJKHFEoD;BA?M<963J0 ,)%X!5Q> 7+7bR63c?608 9[Jw -#(",0C37C9v;K?BfDH_L OSVZ \_?abc8cccccQccchcd,dccbbbbbkaa-`_x^S\ZXxUSyQSONNMK`IuFrCT?k;7S2.e*&#wPT C Fb1w;% 8uP8AH`~&Z?Yn u /Z$).]3j8<@nCFGIJ*KpLO6Q{TdWmZ]`cfnijlblmmmmIllalFlwllllkk^kFkbkksk5jj1ihhg=eca_;]>[ZYXVUR`OKH0CQ=8v3s/,+D':"i^ #&@7F7E~l{|)b2Y^ u [#)/M49?DIALOQTUPVoWnXZT\^`@beLgjloYpr.rrrrr&qqpppzpMpooAnnnoonnnenmllEkigfweMd;ba_][1XURN`I&C,=840+'!C Tf-d}_?G @76]|4`  !'-4:@EL Q#UY\v^`b bcYde5f\gifk3mnprt\ulvEvbvv@vuuttsss\srrUqqqqqqq=qpppppkonnMmmRlPkhf`ca-^\XDSN2HC>950+-%:)7 t \H2 +8E*x 9p!"&,r2J8Y>kDJPV]Z_Cb^ehj jkkkLklmnoqrMs{tuvGvvvvbv@vuu5tt~tYtAtssMrr}rHrqqq*pqqqPqqq}qLqNqIqqpomk/h%ecWaN^[PW RNEID?:50)*f${> Q"3x=A+ $##3Yj.d  G%+1V76s ss+syssst\tuvwjwwwwwwwwwwwwwwNwvv1uuNttWsssssks]sYsKs3s rrrr8q+on lXjig[eVca6^\XU OJE&?:^4.f(""NZ orRt5#3DZ 1JVF4 Qe>@o#&+a0l6u#7N0*>$u3d:B 96Jb !B"4# $Q%')S,04!8oAF JNiSW]0aeh[jkl}l>l(kHjjhfdtbL`_K^7\[TYXWWWXY[2\_a1cfmiCl nprtvwxyz/zz{{&{Bzz{ykxIvtrpnlj6gecsa_^]]\z\c[\t]F_:a^cegikmnoo`omrkhe`\WQGJXC`;4,$ExB (I<>@ A&BCDFHKOSW[`Zdgk6lnhnmljhfc`]ZXVUzSRsQP!O^OiOvPNQ0RTRVxX[]^9adh{6z}ywvsqn`kifgc`^o[YXIWvVVFUVV W5X[]`'b\dg2ilxnPop-poo]mkMgc_ZmTFME>M6-%k{K oL 2BGIJKL]M.NPLRUY\`NdLgkMmppqvpnkifIb^ZVSQPN'L\JIhH'GGG/GWH7I JL\NPSV{Z3^&bRfAimtpsvkxyzz{P{{z xvtuqGn jgc`]ZX(U[STQPPP OPDPR4TGWPZC]_dadgkInpLq/rr$rqpmjfcE]XPH)?U6-$3C Rzrb PRST}UUVX[]`Zceiknofq qpnblEheaQ\WSOOiKHECBAc@}@&?@@/@AC[DG HKN^RXV[`#dXhlmpusvxz\z{$zzyxzuso(kfb\^sZWTVQNM KWJJ)J@JJuJLbNQTWZ+\n_bfj1m7npqTrrrpnkiKe`4XQ.H3?7-%Z zVZaY[\|] ]X]^`bdfhkmfo(pq5qq/oljf a\\VQLHhC@=`;:a:9W98889c:5;=`?U@C9EJ?OTY^chxmPqfux zz{*zzyx-uqmh/b]YdTQRMJH8FERDDxDnDD0DJEGKN5QRSVCX\`eoicl/npirsttspokhaZ+Q%H@07&-$W q9_a@b:bbccdoeghjkmtnoppYp!nYlChe``[UPQK2F6A=T: 7"5444d4333p34x57,89;>?BGMSYD^dfj ntw5yzq{Kzzywtfpxje^_iYT|O`K.FCA0@?%?>>>[>1>?@CsF;I4KNSPTX]bnfZiloqrstttNsr oTlg_`XPH@7.\%R!m d8dfWgogh1hikl`m0mo0p,pppo~n0khhdg`T[ U@O(ID?;N631J0b///@....A.p.002246;a@GgMT2Zz`glrvyz{{I{Gywsnhb[BTNI D~?<29'8$7}78=8t8;8 78:

iELSZb hBnruuvwhvv@ut3qoAjf_Y9QhIzA:<4/>,L)?(8'r(()*,0-{./:0B14E69<@CHNzTZb_/cgkSmxoRoooXo7nmll ji eb\WOH/@E8H1+ nopqr=rsjstIuuvuusr\olhZd ^3WPID)>m940-+O))((()w*+}+++****++.187>FNOV"^elptuvuutgsqwnjf8`%YRJB :3.k+<'&%a%%&'4(()u)**,.147:@ELRXq]bPfilmngn7nnn mAm lsk}hfsb]UVP0HA?:4nopfqqr4rssntHtut2s[q]o~l'hcr^XaQJjC>{9 40Y- *('U'7&&'P()++++a+****w*+.=39AI}QYa\hnrztuvuut%svq}o=k^gb5\UN F6>a8$2/2+*:(( ''''''S&&&'(+-(0r38>5DK)QLW[\~aeNikllmmmm llTkihd`[VOICe=noBop^pqRqqr8sssrMq-nl.h"c^yYRKuDs>#9$4'0E,6)c&%u$y$$1$%'6(**++,+ +**)g(h)z+F0f5=E|MV8]ekprtttt(swqoplhd/_RXRJC&<7?306.[,u+r*o)('&%$#"#I#%Y&*,16=rCJQ8W*\akfhk+kmmzmm ll_ljigdv`T[VxPKG/nnzno_op2p|ppq~qqUonkgc^wXRL1E>n843/,R(&^$#0"t""#{$&W()v*+++++5*U)n(*(*.3;B^JRZbhn:psPsttsqp;mzjg b]WPAIuC=:364210e/9-,=*j([&$l#""#$&)f-2%8C>eE:L"RX^cvgj'kmmmm:ll0kk jh'f@c+_[WS OXmXmmnfno9ogoqo}p*poUmkgc^YRLkEd>'72.*'$"! 6 !"1#%S''(*8+,,+*)(&'>(,507>FOW&_lekoqrtssrqomm~jfZ`[STNHC}?<,:>8F7643s1H.+(&L$S#""#$&*6. 39@}GNUQ[,a1eirkgmfmnKmmlRlkjihAf0c`]ZWllm5mnYnnnnoonkAhd_YT MF?B82`-K)&p$! ^ q!#3%')*,-A-9,+*.('''+ .5?;CrK]S[bhloqDrssrrrq*olid_YSNrI9EtB@>$=<; 97[40- )'j&&$$L#%&), 1 6EFENW^Ve iHm9oqqrrsr]qom?idq^YTOLHFDeCA@?+44h433%10@/. ./;2b5<BnJ QX_dlhkn~oq#qr!rLrr_qoVlihc_#ZWTRsPMKI~FC@(;6Y1=,)' %$$$%&),2q8?JFMU![bglPnjppp\o?nnnm?lEkHjihhFh kqkl'm'nnpnooonlwhFcn\*TLEu>6/)%"!c ^ )U!v "$w&),0P36$8s9z:f:-98765j5I5)7t:[?E:KRY;_ZchpkHn$opq qxqr!qqomtise#`\YWBUGS!PNKHErB=8s3%.*'&d$$$%&m(+90*5pg???? >K=2;;":CjH MSY_cgjmopGpppq,pptnlibe@`]ZXWUhSGQN)KBGD=?:5_/, ('d%%%Z&!&r()* .S39AHP W!^e`k1n|qrsr&qq;ponmelkjiiieijlmdnnpUqqnlpgDa0XQ"IA=92(,&#!!N !* !E!#6$'*.22E6:> A>BDvDDDLCBA@@yB2DtHLQyV[`xdhekmo pvpqppxo~nlyjrfb^YW5URTpS=QOM7JGDj@I;61Q-:)(M&&4%&O&{')L,07j>KF;MT\cjnqsJt,ss5rr1q`pnmlkjjOhPhikulmnpqqo7lgP`XpPHd@)80*%#q!!!!!!!""$w&;)J,K0a49=AEQGmII8IIHGFKEESGILP0TX]mae.hk1mowpqDq}ppso-mkh; 62-*(&&+%$$%&h)*+17@GOW_8fkqsuuHutXtCsrRponm%l6/O*Y%$#n##$9$$$%/%&'*6-T16%;@DIMPRTUW8WXX^YZ]A_acfChknpqrGsttMtns|rp{nkhBb\UNI+DBE@K?P=p4oKmllh'h[ihj~klmp5q[q]n jdZ]dU ME=+5k.)%$#$D$N$%%S%=%X%&'*/-_16:?E"JjNR{UWY[]O^h_{`beugiPjhkmpqsQsttuhuwuts{qnk}gbO[SLGF@=;B98655r432R/,*.'&%$##f# #L# $;%n)/7?H PHX9`gDmq^t~ttstsrqGp_onRmm"hhhijhknl!m#oopFol&h;aZdR*JC:2+'$z##$##$$k$$$%&0'),149b>CCHMdQTWZr]2_uavcSecgjmnyo%p3qs9tuv vtvuvxv0v?umt=qo+kKga[vSKE ?';864~32110/x-`+ ('&%+$##"""#r$S(g-5=F"N_V^^el|pdst?t3s;ssir\ppKonn@nhhijDkkl~no$nfje^WWO@G@P70V)&# ""+""##$#$$\%|&_(+/3c7<,ARFKGORVUYw\_be0gjnprrstuvwjwwww#vvyutroAjgag[?SKD>!: 6a4F1/...Y--+a)'&y%$$;#B"""1!"#&+3k;.CL)TD\cko^sssrrrqppTp/oo6oChhijjkjC}HL/PJT>Xq\W_c3fim`p1rystuwwxux\x5ww@vvutrp?lhd _XQvJ2C4=952[/-,~++*R)A'&%7$0#Y"! o n  #'.6A?GWOX4_g@l.pqrqqYqXpioomoop4pgh=iij\kkmmlAgDaZ8RcJB; 2y+4$!a 7p Y !-!"$%(9*-1)5:D?DaIMRVZ^qaedhknprastv0w7wwwwvvVvuFtQrpnk fb=\FUO H(BP=9E5%2/0-o+**('& $#"! K  Q#&-4=3E{MVU]ekjoEpq3p2pkpRo[nno4odopggchli"tojT  !!"$@%'(*l,.26w:?EIJOThYe]b eWhjlmopqrs s*szsIrqq%pp2oonmkDhe7ac\VZP J+D>9}41./,*b)2'%$#"! + H w"&,X2;C4KS[%bhlnvonn:nlllOmBmnjotWY]A`cfiQlmPlRfalY\QKH@9X0)# eq y !{!"#%U&(4)+?,.15\8=GB`HM.RW5[`0cg/iklno"p prppq;q6ppTonnnHn0mlk4iufdcU^YS_MGyA;m6B2.,6*H)"'p%$#"! , #'&e,3;HC_KS[.bh$ln`on!n?mlkkllm]nLPESSW\ `jdugkllOgaYQI-AT912* #CU,- !L!"u"#$&<'(*A+,.T046:?EMJPUnZ^maehCjlklmnCnvnnoo;oSnnemm(lmllkGigce$a6\VPJCT==73|/,X*G)*'h%$#"X!j ry #X&,36;QCtKS[bhlnJon?nVml{kikell5lm{GKPV\:aTeVjtl2llgb[%SWJB;A2+$m N ^!5""#Z#$%&()D*+,-/25@8=BH{NQSX]!`dgiijl3lllmmTmmnenonm[lllllkgjgfb^XRmKD>84//m,j*+)'8%$h#q"M!` v !#'-]3;CLNTC[Xc hplnQo=n|nqmljj~jjjk?D=JQkX-^Hciklhds\UiLE=34-&!)o !"x#8#$k%4&O'()*+,{-/>136:@BF.LwRbW`\#_cfi-jDkukkkkklxmmnmmZmmmHm.lkjhgEd+`+ZSLF3?94/,f)(&%s$M#"! q !h$'-4;D;LT[cLhmn?oLnnmfkiiWii ii7=DdL(SZ`gdjlif ^WOG?70(e# /- @!!"#$.$%&'()*+,- .J0M148S=CJWPV0[q_cfi2j-kHkhkKjjk=klmn2n2mmnn%mmlck2iNh eaZTMGG@:5r0,)(N&%`$w##""l!!? n!X!$(Y.5FOW^%eilj?g3`WYQIA92E*`%6!N  C !"~#R$$%R&'@()w**+6+,>,.}/2y5;@GNTZ_cg ijukZk8jjj)jfk l.mImnFn.n[n}nnn-m kihf bN\EV/OAHB;6i0,)|'&-%$$##)"!!V!( !"o%d)H/6g>gFOV]e]jUmn onem{k+hledgcbb b(p/8BKtTD[ch\l#jxgax[[SLD<4,&"!v ; !""#$%6%&R'a()* ***+X+,-0t3s8>jE|LSNY^cg:jjkkJkjjj4jkmmnentnno(onmlKjdiUfcT]WPIC"<7~1-U)h'&%%Y$$f## "y!!!o"\"&*>1<8@%HtPX_CfkIn)mnml%heb`J^]\:[!)3^=]GYPXafkjhb]UN6FB>p6.(#"N !!>")#$$%l%&l'C(G)U)*@*9*c**+,b.16972-)['&M&F%%$##C"" !!"y#;&+3:;BJRZahl{nnnl[hc[^ZKV RO#MCKx!=+6@K*Ts]djjjoea#ZZSpK}C<+3,&#!h!i !"W#p$$%%%&e'8'(`((()N*'*,/4:<@GNU[aeijIkFjjjjk!lm!nno/ojooppoon(lk|hf$a[}TvMF@y:S3s.0)'&|&-%V$$H##"j!!!'",#D'Q,.3;CZKS[b0i lnmmjfw_Z|UYOKG.DBx)33=HR>[bijkgcS\VNNbF>6/s(x$!!n !"#.#$A$%%Y%&''f''(\)Q)+.39Z@F:LSZ+`edhAijjjk+knllnnoop pppBpPpm;8&(0$:EOY`gj$khTeU_EYQ6IA9y2"*`%q!!P , ^ !""#A#$3$$%z&!&&'!'(o(*-`2o8 >DK-QX}_cgiqjjkbl%lmnompMppppppppp+oymlj1gb]VpOHA:3.*r(*%%$J$##j"!!'!0!"%)/6>SFNV#]c!hk8ljiem_1VP5IB2;52V.,#d-7rBLW ^gehkQifa2[TLuDR<5>-'V"!    ! !"+"#E#$$v% %&&g&'z'),06!\UNG@d93T.*('%8$#$##B"!!U!"c$',2 9AIQX^chgjkhfaOZhQJvC>;3-Q)% {)4>?\JTh\3dgk*ih0b^#WOaG ?x81/)b$""   ^ !?!"O"##Y#$%%%&&(*/249:q?EKQX^_cfohXijlqmnop-pq2q`qAq)qq9q ponmkhf?ak[TMFz? 82.|)&$$N#$ ##"_"!"$']*i/5=^EzMWTjZ`d&hhifc]"""6"$&*.N3:AB$JQ>W\/aIdUg$g gc_XPF>6^,$W -ef# -G8BMVs^chij f/b\V MF?V70)%^"!?   7 !1!D!""#$$&''+/59H=BHNTZ^b7dgjalmnoopp-pQp&ooooVnmligdaS[UNG@:50,(?%###;"""G!"D#Q&G)W-27>FNuTZs^/bVd\f0e?d`X[$RJqA&8z/%a{ ^ ')&3r>BI:RfZ`Nfhj Q v !"|#y#$&>)-k259>WCIOUFY]a9e4hwk\lnooooodnnznZmm.kifd`]WhQICL=8+3.*'$#O""D!!!!D"n$U(7+05e5,G#  :^ Kl(39>HH|QX`ge i hgc`2ZTNG@9Q2,)p&%" Ee>[ g!/!"m#4%%'+ .15:@FKQUY^bfilmnnnImmllSkig>da]^X=RLFO@z;61-)Y&v$ "!t 5 ; } #"&V+016O=DL{SeZ^Jb\cdcbb ^hZR_J@@80&: ",7BLWT.\nagchhec^xYSIM3F?92N-m)'$" pz9 ` < !P" #%u'*D-05:@FzLQKVH[`cdgjlmMmmmalkjhfc`p\WmQL)FK@;V6^2$-*)&$"! bX% #'{-22|9O@HPV]xacdddbE`\*VRMD;3$*!W _? &j0;xENW]Bcfhfe%ai]XLRLuFf@93=.v+o(%%" -iPR !t"$Y&('*[-916';AFL-QW\a|dh6ikllkjhg+da]YTOJEO@9;6o1-*:'%#|! l2b "%)/5=QE LSY`cfedc`^0XQmG?66-%SQ C < V NR )4`?3HQX`bdhSggVdea]XRkLF@)93/ *($" pJdyyK !!"$M%')-16~;:@EKQW\g`nd^fi ij,igeFc_\HWRMHC?H:51-k*A'R%g#p" d!=#d',B29AI~PW] beZfcdb_[qTvL(B90{'u> $J$ /w"-7B.KuR[Qaf5g|h*fdag]\WRM"G(@: 4L/J+'$!(9m !9"$%O'(+/$3p7<_AQFLRW\4`cfCfgVed a^UZVUQ?LGBj>H:1661-*M'%$#!  !$'&+07>FMTZ_od] cgiggmdb*]eXRMG@:43/*'Y#!!3[Gl !#J$&'),0o4@8=BHzN@T"Y.^a'dddb`]QZUPKFE@! !"B#%(+e0/5F4+# N   7] V;(3=FOW:_DdgghfedaQ]+WRMGAG:4/,5(O%#"!+!6!!9!u!"h"#E#$%'()+. 1y5 9=BHMSyX]`cOcca"^ZVQL\FArCGMMRW\_bbbP_^\IW~RMpGA;62+.+)'&R%]%u%&&x''()+O-/q1~48U=CX953!0/0--`-T-.E..//]/0s1Q233J43579h;?fBFKHPUY^`cXcb_*[VAQ6KmE?940-+>*U)(()9*+3,1-F.W/02k4 6}8;@EBJRO6SW\_b2aY`0\WYS(L_C@:0(" X _} |4&1:CL`T\|affg0fWfrdb]tYKTP8KFB=;87J55@45@56,66778)89:{;6<`=?ADGtKNS/W[_bdVcc_e[`UOIC=73S/F-u++++,{-/02346W7}8:=%?CH$LQ TY\`b bI_~]BXTLDg:1) J N+Ty m})02<*DLHT[aceTdee|da^YVR]N}JFCAm@O>>k==>>?*??@<@ABOBCDEGiI9KN QTaX[_9bdqf8ed`\VQRKmE@:63t2:1<1123l46_89;b<>9?"@gADGKOSVY]n`b\a_[XqRLC:1)8! g d: "XW.J'} !N*4=jE9MT\aUdadeefde\c` \YURO{LJ.HGG0FFFFGVGH H{I!IJ}KKuL4MNPIRuT{W Y]`Kcefh5g%ea]XRM`GC8>e;*8E7g67o79 :&;=z?mA^CDEFH=J)M"PASVY\_b2cBcC`>]^XaSLD:1)!3 mhFQ$sBDj89Mb# ,5=ELTlZ`/b)ccefefd:a^\[YWTRQPOOOOjOiOOOPTPQ~RRRSTKUWYZ\_%adqfhi'ihgc_ZV QM6IIEFB~??>c??@ACEYG^I_KLMNP+R=TW|Y\^`b cb`\$XyRLDW:1I(!t > %96y; <Bu B#-5=1CKS&Z_6bbc1degxgfdb`W^i\[CZ*YXXXXXXHX2X'XhXYFYZNZ[9[]^W_a>bdfhjkJkLkhjheka]YVFRO[LIGF,EFMFHAI}KBM6O_QqS6TVW:XZ1\7^/`"bKce1dc`]XSLD:1(O  ,;_h|K\jl $d-64;WB%I"QXW]B_a{be fgg4fducIb}aa?`n```h`u`5______6__`N`a'abcndVeh#+29?GO1Vs[:^`ce5gxhiiAihhQh*ggghDhih$ggffQf,fVf}fgghhhi2ijjk$kkkkkyjjlhg3db`E^ \YWUTTIU-VWYW[;]&^`bc4cccddffg*ec _[WNSCLDv::/', -*&yapVmU !r>Yu$X WN"*o177=DMKRWZ]_b?dfhkiiiij/j\jjk=kxkVkjjiitiaiKiJiHiGi_i5hh+gggggZgEg8gg$gxghgfeOcba8_^m] [xZZ[v\q^_a bceefcfeudddedc`\IWTP/KECN9/&PE HJyQk+j8/GVsb CJ!-(f/ 4:AtHXO/THX[]d_be~h7ikDkl l/llmPmmmrm4lllLkkjjii"hfdcbaa[```c`abd!dddbdcccFbbCaaabcdefig gh,hXhbgg5f_fe%dau^QZV9QNKHA8D.p%iAh 1k_etoTVs18v+xR; T&,16%5,$1~ <"xf@#W #)a.27=DZIMoOQTCW[^`bcFcddJdedsdddddDcb&`^\YVSPNLKKJJKMPGRUdWY^[L]4_Gabcde3eeeee#dyccEbbca`_][gX5TQ%MIF1@:Z2V*"Y `AWu+5`` Xr& =V!2%)--17q=VBEH"ILO)RUXYZZ[[ZZZ[["ZYX@VTR1OKHEEBA@Q?X?N?!@hB3E5H$K.MPgRU^XZV\]__A__k_5^]]\R[[6ZYXVNSPM7JOGSD@<5._& K Dz=Z\D;L1%r<P h3 u#&+80w6 :>G@dBDGwJjM3OPQ7AvDnG)ILOkQT/UVVWKW6W(VV2UmTSS;QP{N"KHF:CAp>z;-6 0J)#qoI vn -]MoN|UKFWki &h; f:< $)H.G268:-< >@\BTDEF,F~FFYFEuDCB@?<:.7%30-+*1)())_+-/0G3O6a9(;>S@CwEGIJ,JK2KeKKrK/J{IHGF9D?A?_=1;w974[0*P$p`$ ?,o,xnZ^ZWLGLnf}tOH fq]u!&B*L-0I2o35V678::;a;r;::W97531.V+'$I!AQs #&*&,/2m5 7:H<>3?@AeAAAu@?>=M;:/8L6k43V1/,(#  sH-N$p=veulqNWSMELB+|S nZq6#&Q) *Z++,-%-./0 00;/.-I+E)B&# =)M4~d8 !$e'"),/:135Z6P7E7[7d654\21Y/.o-++=)(z%w!r @ Gwi5)uPk{ymH:YDKKWZT?4upS( r a{!f!"B"Q"#!##$_$@$"! J2  K   jh"]$'{)L*+,`,.+*)({''%$## "!Y8 [2+"fz[xwZA/?h7<?Yg[<.|K &  8 U " hz|OZ-fs k ! 2 !3!!8  /P<IL Q ~7( &wEd2"0[}/>?HE7'+ 4Q3q*L 6  $T r O _!# Am 1 (yK s L NnI5M Lt [wW Q+Ujji%<?5!">DxG   ]l ae?IWpn|aQx A q ?  &  N  D2+2l^{ViAN)(2GMHF+89) <6(r\Br]'i?[Qe)! 26$e{5 8iq%3J;t|*7Wd`GQ+C=Y=;;DMJ?'<?2  2jwM] uWU}q/ QjKG[lkK- ByRL#!fl3FvwWKN}sa[MGON8 *CL;(%&:O= SI]& gL?02PP3 .)'A <9)*8QS...%)59KngJBRe`QSM/# 3ct`(AsH:8Vr)$ uJ*7JM8+2/ #ENB.270XoOBKUF,,?3 %[fKD5Gk# uB+KL&-( 15Exn<-GD0"d,J1gKALYQ>1*%*6<1##+)5YrnO6  5gywzjd_FJqZ1  '3" %//)e|lT;7<5+/=;.#F:FhK?DPMB52;GOG0-1<YcN*Gp}{d]Wq wX5 *    #03E,FpnK+#(@ZgbSI?_!,<+ dLCEPVULGOVTC'3:;E?+4>Ocrjet75U7'1  !:2!AIEELXh~~dC87'$1GQWdoiq5<0 oVGILXhmeUOH<//FOKPF(6=I^{ .7e: 0 - +83 "GfseJ<Soo^YN4#$1-7X~0;&kTO\bk{~sXB2%$"-BTVPUR?/0=@Po $|k`V@&  -#  &49. 2^bCLcf_]S</:J>8Gh):*|im|}hL4+*4<DNOG<<=2+-<IbjL<"    (% $#!-66*>jqRKPQRSO?;PdYHBUt+v_J<>CMQOLC5**-)(*;Uu|YE2#  2ri #pY3nk Y4 :b$n !" "#"!k 7K      L   d j D X/QU2`E=]2J   {?[H~`5u:}39"'~ ~  `     % 4 J q |   K X U X x 7  Z~ P2o*Z$}%< DL';B?&$V  %b@{E*`oig,!'AE<NlKhU L ~  . M h 8  , -    + @ t  ` U gFCI.$ UrTm pz`9^%Ov^`|)`@C1n2z6 a !  ( O m v Q   &  ! o   f8#*F{js|#vO&Itt 9!M jV0@)-) q+]Y TB^T 4 d M  I  B b m } u R + y [ -  % T  \  G ,zzK5RPH4bx.k>qvg\Q,wJ OHx%ZE    z  E Lf  M u ~ Z (  $ H f w e E   ) [  3 0  n:CP%I=|.maTU; S qz_a . Z   B M Qh# 5Qk}9 Q | b =   ; R a } P  , ,euS7Q5h 8Q$r]tBtP y k q >   d )b:2nZW+AL 1TKRxkG+3q  C e { U | @ 1{36{iqGVm ` @ uV:& ,  n y "YhY|X=uO07HTSD.'4Vp!:z/IixO/ I8  4 A J o 6 l  Y b1CAl-2vX] :}| " L ' QiOMQtmfzo`S-Tz{nO829P]q 7!6x{Z@TmUpujb  V 2  Q h  O 8Y p  " d %  P >  ; L -r#FC X\N)sDADU? ')2In3hn0! 0%  , K c ! e Y [ 4  I k }- F  # + ; V b @ 4 I veUlx#@?ylcG77+Io 6Nce]Yf5 4|a*  ] : 4 u o \ N S  *  ) - 0x)DqiC?U?D?/}[QK33{,)C*$B-v ( P C  '  ^ m u \ ; 2 I c )  O y Z cjYM9;)( e\b #r DRxjR6$n^K9 Cp_|u(e"xv c=pR z  } e g`Vp+x,=kji5DB,8= vZo^ <mx}dS+rQ0v9 |:isW3zc-{({1P V _ 4v{M06P#*l@o>]{Lqo=# i  $  H D lrr`{QJh]\(j13Q8C<]L3cx4h zmP' &)!dz,.@B^+ f > C w+B.\ { N4$4A6'rA{y f}`\'| ^mycD<gEB[\dUuq^q=1 o ^7;__oF@Dj?#72].fb= h Qrse|&Yj L|@]J^7i1;MNQ}!)0?bf S0 3 Ifq   +!#T%(&x''''!&%$#"!! RAvZvIM C !~%)3'-%=[%AISvq~;%8`X^ohG#u@1^ ` p [ -ljS$ !F"!#J$|&')W+ ,.G/12!3 2210/.-,++6++ +-**)/'&B$"!!B ta@ 6 lDwx2AouCeki68|kQgp`U m "{f\-@ "$X&'()+,0-h.01{24j57R89;*<0=<<};z:9876P5W44J4\4w4I321z00.-p,*)<(&%$I"!Em  tHk~&e\=Pt7NhK k.28JltGU; P Bb'|"!A#?%R'X) *}+-N.02v45t6794:T;n<=>@AUBCEtFGGGMFsEDCBA^@6?9>>>>k=<;:Z908"7.6(5<4320/,*)'^%#!!mkN p ``StO!T_?cU})_ 87AY 0"i%&)-+. 062 3d4679;=?N@ABCDSE:FkGI4JLfNOQS|TTTTSXRTQYPNMTL1KKVKJItHIFElDBA@??O>>P= ;u9"64^2!/-*(8%!o !;.q~z$6 B{Owvzl6Q + !=%),/'1W4(69~;K<=>@rBeDFHrJK L LMMNPQS`U9W0Y[]?^`R``__^][ZeYWW'VVXUTtS5QP-NM8KJII.HHHG EC@e=; 8?5T2t/,)%y o&\ xhs$$jA )GxCd7SES KA"a&+/369<|?B D}F GZHyIKMOQS{TUVWfXXZ.[]l_/`bd?eghijiihRgdfe]cba[``N`_t^]\y[CYXWtV;UFTsSSORQP:NLvJ*G4D6@=G9630+3% d9' qIK CIb9:9 1 4!$)-2O6:>oAEGJLNOQ=RsSU}WBY Z\]Z^D__`b9ceTfh,ijklZmYmnnKmmlwkkjhgfeeewe!ddBccb1ah`_^^]\[YXWVMTROvKH9DQ@=:T6*1{+% B a]g,@=VwU & {!&?*/c38=XAEIM'PS7UWYZ\ \]^`JacdeefghikJlnop pq9qxqrrqq(pp oonTmXlLkbjjaj+iiipiQi hhhkhBgg[fuedQba`_\^\ZVSOL8HuD@<,60*%V W"R O_;:[F9 + ) 3  " & & J  Y "s'^,05:?ICGKOzSVY[^_albc]cddefghniEj jklpmbnopqor-rrrs+s%rrrqq[qpp.ornmm6ll@kkkkkukykkkl3l:l!kjihg edcbta%_\YV[RNJ(FA.;606*% 9" -!a]7&*0BT4 &s,O16};AF&JNRUYh] _bceFfghhhi.ijek+klmmnno0opTqCrGs-stHtttu uttt@ssss`rrHqppohnnkn3mnn nHnno`ooo nn m?lrsu4v:w wfwwx#x3x]xfxDxxx-x`xxxiwwMvv`uutsslrr%qtppojnmlkjjjjjkTklellllkji1gBd `\YTvOIDB>931,&D c Pj)Go<<8:87Y6[679<@EINSX]KaSd-fhk|m:nnoToJoonml9jihggfggh3iklnprthvw wxHxxxxIxmmn?nnqnYmmlvjTgda]YvTaO'IWC=7j0)#>^+\ &|^ -FHFDC?AAABIDGRK&NRhV[-_c fgjkmnoeoVono+o!ngm:k|ihsfeYccbc cdfRh|jmgoqsu vVwwwwww~wqwMw.ww)wAwswwwwwqwvuu trqp`omlkjihgg\gg;g;ghzijlmEnnoo[nnmil igBc`\XS:NHB;d4q-'+!86 hS:wP0P0O3MLLLMbOR UAWZ^bfEhjkmknoppBoonn ljigNecban_^]^S^`(acf+iknXprnt-ubvwSwwwwwewgeba(_^]]]^c_L`abd!egikxlnlokpjpq)pppo+mkigrc_ZUOIB;4-' XK3 _`P`t`X`_`acbce>f>gil mnDno@op poDnmkROLIGF ElDDDEDnDzEGJMQTX\aBeiEloqr"tvw@xNxyQyyyyqxTwtQqJlhc^ZU^QNDLIHH:HHIiJ?KMxORTWY\t_kbehkVmoIpq~rVrgrIqq on@kh|da]oXRvLmE?h81*#}L jlYmnoop6pppp[pq qwqqqvq`pponmdjgg&b^ZWShO{KHFCcA??<>~>0===>@CFfILPU5Z-_chko8rtvxxy,yFy~yxwYuro id_(YT/NJFDBB ABBHBCEFqH{JM4ORUX [Q^bei=kmoPpqr&qqMp?oImakh1eb_YTNIB<4-Z&L{ln2opq{rirsWs3rrrrsrrrkr)q?pYn*kgc^Z1UQLHE A?=8;998^8 7y7P6793;>ADHMSOY"^dhflpitv;xxyXyKypxxbvtq%mgaZ~TN;H6/<'!mnpq6qrstsssssssjsErr plnkh]c^YToOwJwFA>;:76f54s333v3122357:=PAcF(LS#Y_djLns uxxyOyy xSwusok|e^XWPIC+>853345678:4;=>@BE8GuJLPTYn^^bfiRl~npqqqEponmVl/jhfb^SZDTOEMTr[;aBglr+uixxy(xxhwvtrnib[SKD=8 2Y/-,r,,.0?13&4y5708`9;=?BEHLQW!\wa+dhknpq9ppp)onn/ml7jmh8da]X%Q|J[B;!4-np q2rrst2tttu+.29@HPYX`gmriv,wwwvvu.sBqmic \bTaL,D%DJPVr[m`udLhj;klGm{n!nWmmm\m l khfb^YVTNIYoopfpqqqqrrs\s.qqoli"eN_ZT!MMF~@:5o1Y-*F'&%%%[&$'H(*o+^++++**)(')Q+1N7Z?jG.OqW_gumr suuluu]tsqol%gBbY[TLEj?G9`52 0J.n-,++)(=&$$ #r#$F%'*-2c7y=CJ8PVm\`eYhGjkmmn6mmm+mlkj^hfEc!^ZVQQnooppGppppqqqonkhd|`Z[TaMvFA?9j4/,k(&`$C#"#H#$%')R*i+++J++z+r*)('(*_/5EKRFX]cfikUm0mnammklllGkjigetbI_[X2mnZnoWooooopppAn lTieX`ZTMF>8k2.*L']$L" k!!"$]&"')+*F*+++u*y)%'&^'(_-2)9|@HeP]XH`glorfs t!t0t)sErpo$khb\UO0ID@=;9p89765f2/,Q) &$$g##$'%'+.4@9@oGYN[UZ`e9ik.men#nn9mlllqkkjiph ecaK^m]mnYno\ooooppoljfb[V/OjG@=82{-)&#!r <  !#h%I'8)*+--9- +*d('G'z(N,-0[6=>DLT\cimWpYq\rs ss:sqpumxj}e_YQSNNYIFVC3A@?!==<;85r1E-L*V'&%_% $%&),1g6\dbm munno8oAo*ooopp8o'liSdy^WQJkBf:g2,'$! qWrn "$')v+-t//T/.-,\*((9(<*-3Y8@MGPXw_fVjjnoxq qrrsArqomVic]XSOLIGjE(CC)BC@=950K,)'&%L$p$%w').'28?FSMTn[F`f_imokh`b\[TMF>I6i.)$" 3D>`LA! "%t(O+c.q023Y321c/-,p+-.v27?>0E;M@Uo\chlmopqrVrrrWpoZkgb ] XTR.OOMJI)HFDAE=282.}*(&o%t$O$}$&(@+/5K;0BUIPW^dQhln{pSpLonnLn mnlkk8jji5hvglmInoooopapqTp*nk=g-`YQnJ)B:X2+f&"Q q 9XK]!`#N&:)-C036787735w310G0m03y7*=D KSaZaUf"jlopq4qrZrlrqq*njea<]\ZWUKS&PNMKI&E @;Q50, )6&%c###%V&l)N,17>F$MT[b|glQnpqpoonn m2lJkjjiiThl`lmnoop qqqpPnjf^WDO G|@70)%V! oxrL%>4 U"$'+/487;<>w>y>@<; 927U668!;)@FMTT.Z`ej lnopq4qqrqjq nkg8b^[YWV$T#R$PNTKGnC=72-* '%$###$%'*/4<CcK$RsYK`fknqcqqpp9onn$mlkbjjii1kl3mSnoop6qr\rpo je] U1LD=h5E.`'# I !D#%)_-27{;?PACDDDuC,A?=<;h H ( K!J"r$';+if a]ZX6VUTS&QOMaIE@;61,)R'%$$m$%/&(J,096=F)MU)]cj7n1r'stUssrrqposnmlek^jjcipj0km%no$ors`sqCoIjc[:S;JB]:d2H,&&#@!!! !!!!r!!"#&E(-d28>\CBH4KNOP5OML IHGHJNuRVdZ_+c^fil#n8o]pqqQppnmmk)hd`[WU7SRRQ&PN=LNIEA(<72R-*(%$$$E$D%&*2-3:C3JRZbhmrPtGuttisns rPpo^n7m[l8kk2hiojlZmnoqsPsqnijbZfRxJAj9U1H+n%#x!!!""""""#$').4M:@EKuOPRT2U6TGS6Q[O[NAMNPSWZ^bqfhkmKop3qpqqq*pdnmijgch^hY;TUQ&NMLL?KIIHts`rpUonll;khQhjMkm)moqssEpnhkaY#Q=H@78,0J*%#".""#a#$ ###$%'~*[/5Z<BvHIN7RVXZXYY$WUTTUWkZ5\_bei$kmnp#pr rqrqpnmajgb]SWjQMJI1GG?Fll)hRhjk\lmjnrpr r.o|6/)%H#"\"# #$$V$$##$%'&)/:4;BHGNgS=XZ]"]l]|\[[5[2\^M`bdg.ilnpcqqrrs2sXrbq!omkgb\VOKFDBA@R?!><:8b52.+ '%$6#["I!!"Q"$V&6+>1_9AJLRZbiorruuuEt-t2srqonmpllnhBhik l'lmopq mjdT]UTME(<4-p($#I"Q"##$$G$##$$&).4^:AGN'S`X\@_Z`ga@a`a5ac{eog}hj/km~oqrrsWs{stt)s9qonmjgb [T3M9GB@:=<:z9v87642/,)'&%$#S"J!!"!#3$)3/ 7?wGPYXg`gn8quu9tsssrq oomm)lh'hijkl%lnoolChaZRJJB:;2+k'#F"R!"/"n"#T##@##)#$;&:(-29?oELQqW[&^`bQccdegikmmnp*qs]t=thtttttsrp njgma[JSL_F\@=:N8[6H5)4O321/-+(&%b$=#""!"!"#(-5=F)NV^elptDtt^s=s[s4r-pooGnNmmghfiuj=jkXlmn}n:jfa_PX OH"@i70[)I%;!!6 ![!"""""z"#g#%(U-17v=D J+OU[Y]`BbdYefhjm8o p?pqrostuouuuuuu t@spnrjg+a[dSLlE?;75Q21U0H//i.-g+)'&R%C$`#""!"!"#&&+3;DeLT]Rdkpstsrsrqpponnnghi!ij^jk{mEmmLibd]V#MF7>5.v'b#n @ < ! !"!!!"#$'=+m/5); AfG{MRWQ[^aceOfhjmSo5pq\r#rt.u6uuvMv9uubu1tlsvqFokjgb]VNGA'DJPUZz]acefhkAmo{pqrts4tuvvvvvvuu tqolWhc^X+PIB=08?41W/-,+++*n)R( &%2$#B"!!- ! !f!$(0m7@HPYs`hmgqrVrtqiqqpooooppgghijjkGlmBlhc\TBKC<.3+$ b9 > T ` !9!# $'+ 05m;AGNSX\`bdf hjKlnKopq|r`tuvvvvpv[vuu(t#r;pmjfBa[RTlM E@1:7 204-,8+1*)('&$#e"i! w + K  #'.6 >FNWf^fkoqqap_pponnoboppfgMhiHijkXmmXlhc[SKBCd;2++# ? !h"#&r)=-28>DKPV[!_Aaceugikm=nopqstuv5v^vuuuXttrqo;lhd^XLPIC=941o..,y+&*)('e%$I#"!e  L"&-E4.cueMghj7lm\lhc[SK\C~;2+!#-t | !"$1%['9)$,u05:?DIOUNZ ],`bdbfhjl mnDoopqr{rsbs~sLrrrkr?qqpao9lie_iX|QKE?950.(,7+{*)c'&2$#z"P!y  _ "&,>2:BJSZPag1lmnummnm]lm$mnOnoY[R^paLdfhlmlhc\7TuKD<63+$R Bu+  !;!"#%[&(P*,/488=rAF4KQV)Y]_Yad_g,iZjkm noopqqqrqqqFqppoo:mjfajZTNhHFB?;6H1O.,e+*)( &a$#"g!w  !#j&,3 ;BKRZagkmkn5mmmm0llmymn nRDU4Y8]$`dgzklm hdH\ULD<4(,s$ _  !g""#z$&C'x(*-/{26;&>ByGSLR+VZH\_b%eIgijllmnBnop,pppppppooooHmkgc\W)PJC<61.,F+}*)z'&0$#|"! $k !\#'-3a;HC$K#RYaXfk|mmmemmml\lm(m3mmnJeN$S&X@]GaejlmGiQe]V]MF>5-%!|% !R""##%&'(*,.1L48k;4>B~GM+RWVZ]#_cpfi.jklNlmHnnoMopgppp-ooyooeo mkhc]XR.KD=W7a1.,+**!)"'%$#e" d!!$4'-3;CKS0Zafkxlmmmmlkkl#kklrCGMSY_xdil+m`if^WOvG?7/w'n"jYK  !z"1"#;#%&'y(*+-I/|2\57:=B{HN SMWRZ]aemhjkl>lqlm/nnoRp*pppoooodomlhd_YS%LKE+>8"2F.++)('f%$#"^!V - !5!${'-3;CKSYaWfkJlmmnmlkSjkj}jSj;A GOV2\b h>k@m/jOg`MYQ^I{Ac9+1)$H #p e !"."##$&&')*+-^/2B46\8=,BI$O$T%Xr\`dhwjlglllhlm|n:o opaplppoooo4ml>heU_ZrSLE>93 /-,*){('(%%$:#"#!^ ` ` z!"D%(y.4 !`!"# #U#$&&'()W*+",./137'd'("()t*+/Z3;BvIPwU[afwikk}kk2k&kl9m*nnnnnoo|ooMmligc]VPHA;V5'0,.)'A&&&%%1$h#""J!!!#4$Y( ,3:BJRvY`fjmnmPn+m/khOea^\?YWV (X2DG O5V^"cil'mllj_fa \/W72&,#(&%$$)## ""&!c ^ !#J&+188@xHPX _Hd{ikm kkgb\^VPJE4@<9`b'1NX^fiCkigia\TM0Eb=6h.C(^#"a @  ' f !!C!h!"E"#6##$$%&)-39;?aEtL S7Y`%dgh1jkxlmnoTp)pppp}p|7]1j+(%$#i""""B! v  "%r)//35&-5T-R&!b h U&Y0;FQY aejdjie$a ZSL"D=5c.u(?$"!T % / !!!0!"4"#M##$&(+0l49>DK;QXx]`behjhkmmno>ppmpplppo4m4k,ge `[}TN}G@v:3/*'%#""_"!!d 8 !#v&?+/627;G@FMSX\`cfiklmnxo,opAp`ppoCn#ki*ebX]XQKD=Y72i.*f'$#q"Y"!!2 j !%;(.<3`:AZI8PWK] `dXefe&ds`~[FRJA930x&Gm  xA2'X170b+ &$"j!J #|S[   ]!!""#$')-04270EMTZQ_b;de%eQcaY\PULD;2) I% ! zb",{7]BLzUg\ chji#gpb^XRKKD>=5X/')')$W" D9O~ j!(!"I"#%'+-1 4O9 >DJOxTGX]afhkl!mn>nnnmm=kifoc9^ZUOH]A;62.+h'%4#>"h!O !$P)K-4 :wAIQ;X7]aceddxda^FX PG>5,#  ppE &1i<|FP3W_e.ieihcda\WJP{IB;5/+7'%"!Fus|  !6!">"$)%(Y*-05?:@EJOTIYf^!bfhj%klmmjm#kjhfbr^ZU9OIIB<73M/+(%#"&! y n"&+07=EMkT;Z_Ocudec@b7^ZsS JAl90'=] x%!+.6@JS[aghiLfqd`[UOHA;74m/M*(K%6# }<g P ! !"N#i$&,'*K,05;@EJOUzZ_cfhIj]kzll\kih:e=b5]YTQNHB<73n/Q,(&##"x!R Oi/ $'-3 :1AIQWL]aeTeXeb^`\qVN]EV_]cfhg4fXc@_ZU7NHB+;45)/,2(&" k 3 & t !E"#:$%4&%()-17;@vEYJPVK[_c?eSgi6jj5iafdR`\WRM=GrAF)MnTnZ!``cfdc`^XQH@7.g& X@ ?:\g'2=iG]PX=`1dhIh&hSfd_ZTO2IBX;5/+(%"t `m, g!6"W#S$H$&!'*.526:?7DJVPTVZ^abdzf ggeb_[WQKF>@;7%35/+(^& $##! 5g a "%6).4;CJQjX]Yc efdbu^[$TLB91=(j + # .Rj* !+G5@JFRQZ`eghglfcY_rYTO&IDB;5X0#,(%"j TyJ5  l !p"#$%&}'),037;A@EKQdVFZ^ac,dcb^b[VdQbKE@>;?7:3?/,)+&%#"!!  !g"$[&).V3J:+AI4OU_dee:a_|ZUNE;3*!; Ha $.9CLU\c~fihhhfc_0ZgTOIvBw;o40+(C$"%58K + !#!"#$%n&k'U)4+.158O=4,#jR g &| Oyb'q2F?#-|7A$I{RXYv`d9ffgTf;da]XTOJE?]:64U101..c.]/ /0 0X01$12S335 57-8u:C<>z@DGL=PTX\3_W``|]ZUQDKE?9o4z/-++*))*.*,-8.d/H014569;?NCyHMRW#Z^`ba`[X?QJA8/'b  ex[U%/9BKhS[ua eyfRg:fqfdbN^ZUQ3LGC ><.98A66256i6788p89q::;<=R>`?ABDFzI*LOP"SWY[)]`a.a]^[sVIQKF@&95K16/.F.V--.&/60g23576e79;0=v@CG_KP[TX;\l_bc b_]XSKDB8/'' M .O|  dg(1;3CKMTZa5ceedeedb^ZVS7O`KGDB_A"??+>>?X@"@AA|B BCD^EEFGIBJLrMP)RUY[_a'cFc]c4`s]6XESNI*C>!:65f44445:6x79;=(>o?@BDH%KOjSLVZ\`bdbX`>[X4R>KtBg9/'   E< \a<H@ 8 ?)3]aCbkdfhh[ge4c$`_][ZYPXXYYXXXY%YZ_[4\ \]w^^_`abd-efhFiCjIjjihTeb_\Z(W=TU[S^`b_e%fhgkfkdcbbaO``_``k``i`__`.`aLabc6cdZdef#fgUh%hijjjjihge0b`^\ZvWUoSFRQQRR/RS:TcUWYsZ\ ]^"_*`aQbdVf3ffNc`[WR[LJC9/& j @cu&N}]h"M)\ 1!{)207)=ELSX]8_bmdfh^i`iHi+hhOgg|gWghh?hggIfggQghGhiaij`jjjjjjjjjjj}jjXii gfe8cb`^\ZYYSYZ Z[\^!_a!b bc:cbcddfCg gecw_2[VRKC9/3&& \aR!oVf`x]%qHccQ  b(C.4:ACHOUY#\^`cHeghi'igiVi[iij(jkj`j+iiiuiijjMjjjjpihh g^@a@c_cdrdudddeee]^`Aac_d^ddeeef&AMCEHKOQTUFVQVRV9UUQU6UjUVuV}V1UTRMPcMJ[FCW@>3=;;;S<>XADH3K{NQZTWLZ \]^^^^1]\ZXVUTkSRQxOM]JHFDB?;O4-&I[  3~ 1RTA:J)ie O@f#`',S1w59A CFHJL6LMLL0KKKKKKIHFDA>;:75210z00o137c:>hAE*HGK7NQHSU1VUUUU8T)RPNMKJPHFD`=P;u9?4/t("p Y/[IoLwQG?Qe^ J $).25568p:<>?@AyAVA9@@n???>W=;9752"/+)~'M&G%9%o%'E)_,/3t69<:836w5j431}.E)##ZC/  \'/{rbc]\NIMlbr12L    d<>!&]*S,./12D34v545v5555V44$3@10?.+(%"g ?#'=*-0369<=o>????>=w;a9:643 1$/r-,,*))%"D[ l DS~8&W0w<yiv|hoWc^WMQG.D}=%  G,y"%P&K'O'(S():)**u***)('T%#!gV4,(Wvg"%(+.W024 45K5"432>/-+b)d'&%$$#!z ] 'vl>;PgyugA4SEOPYXTA3 s $ +- 8v$qQ b u # h S/!g#&( )q)*-))Q'&C$! 1Bg" dE.%0uaxvY@,<e19>T]U:) Xi  JxlXJv6  E<V3 2\-xf[~g&_2H V 'w0M g5%1Z|1EHJA6+0$ $ %`6XF E  R M s M 9  / H:+.Dv3 +& c=f ~ #fP2pC@la~`O)Odfg/LN@(/- RX~rBEs"$Z`AwqT56@VWir79d O 1  8_8|8ic&ZnHJ'',<EC?/<?0 $:O/^fx7~P} +):Wktc=,/ybmMhMu .E1-O_[HV.HE]B>6:HK< :B1 ' *NdR8S1(R|a}2{jnyXI`+^CL<FNeAjG/vwT{iOHO~ ~kbLBPV< .GL8 $")'$)JV> pBLceyyrbjj4 &Oa74di_F7D\ &gIB8 7PP:*&.;6P9&Gnl4=B1!$8cnJ:?LF84* " %19EUoh 1we@2/Nn ,+(sI, 2FP?*,* 4DC@?RV?!,",lyVABE3@ew~_74\{V<2$:c! tA  #HN#+**7 ClkL94>H@/"##h9];|^LOTC+2?1!;ejQ:#)EizwshaYNF2>iY/ &7$'! .7( (]{ykOA8-'!6F;)/P PS {V><C8)$3DC+!3MstR@;3@\y~oUKLm"uS0 0 ,: 9R=AqzL"-I`f^Y[Rq42?.sN62;:60/6>D; 0H]sqV=BW`fnuwd\q:? Y5  5   )A4'OXLCFZvh=.1)+8ILQfysz:B3 hODDMSSMB932.!?TbqkM6>X_fuv +4$b: /#08/ 1Tkn]LKgw]TL8*)0&0T:D) zf]aeini^J1" (#%4HTZgeP=BTVb|ib[> -%  #)21$>b|zdO\oj[VP?5>I:5Gm->+rqyzupdT?%"48;FOOOX[MBGYduuQ8" *)#!#(%),*%(Di}t\XXQJJJ@?TeWGF_*zm[I:++7GIFILHHQXQLN_u}aQ8  "   >um$'s Lm d z !T! m4z     :   W _ F M.L Z8fG@`7H !  #Ec\shHrHa:Uub;xh3g s{XK7}      # 4 \ s   N X L I h 8  T R%;t/`($@ JQ-BIF*Hv\gTtJ:8LgD=:GSc~]n $ G / b   1 L a x 8  1 0  ! = s   g Z oLFK1  #RqUi q|_/)Mn !9 ybeZ?5jI6#Ofk z { :  ) K e y \ * ! +  v   g6"4Lxjlz) mPQc:!#I"" ][oBiOi? m  $ W  = W ^ o p n Q 2 n { K    M  _  E 0~E.PPD)Xr)zgEt}q^N%|TE !S"$"t!] &5;;vZ qrq v D o A % N l u m j l } } Z #  E k w Z 5    R   4 -  b2CLwA4u;|rVW?> " "!ub6nd F v  \ ~  GT {jC( -3@Tgrx~'  T z T % = Z i N   WmsL(H/\ Ah9h||<4n7md2_U_61 [  w &yL*AjGRxI  "FuEE}M*+o ! J k S 1 m qz+o#6 ttY`#`m'KX]P  ] ] f.mgfUvY\dmiU9))D]&=s2Qfk>>: " 4 B O s  = i @ `.?:m.3]M e aK69 hQEPWwol|aO(;NngE/'7Db0)C}y^DTfM$ppif  W 2   A d  S /Z" x   x  y   f U G*:f^T5[ d6/*DareI$ "?j0 sn4%2)  - Q n % l Y ` .  ; a ! ~, S )  6 < C S V x 1 }  p C 8 @~06T4~= iO73#''"Nk|<HOMNXgO" 8~i2  c 6 6 m ^ N J T  8    TyqX0 SAKL=koyoU6 703B>7N +x / R F  "  \ b l Y ; 3 J  p 8   0 \ z N ;I|*WC@-[nI` "o S-LX<~bK3 -Otik_'_y# - g;kK  |   h gshipn4aOT+.,{ PG1jjykZC% `*Rcz^OFp@*74S S _ 5vzyA} ><@+AI?yba}cq-},q9o% S o T = 0 # P>f*@2pbe B |;A\JTLqUAp9ftmP&790/blY8]B}nF As^;1  h Qgw? \.3 .  T~NQ?es gf&{ZmzcB9c]2F:NT|a)" M TPc$d#@IF-]Xl8&{  9 w5gn@ E^NX5i*<NMOz6=C7HO?,!HD  ; tnX9ye:!/"#####z""t"!!!!!!!- 8>=I=2- I `\@@F%',@Z!,BEPrjv62]kt_5c)'2T{4L O yN_tk8- G !"#~$%'g(*;+,g-C-....A-- ,x,++++,A,K,+,*+('%L#s!uYV.]Vq k};NnAkha-0w ~;,JM 8x @u) "$I%'C()*k+a,-.01X2356 67g78a88y77X66 55P5C545^5554421g/.a,*)v(.' &$#S! ok~N e.vh'dYBNo8OeE o|(DJPd|S*9%xv d v!=#%'(*+K,.T/134V56819j:h;G|?x@mA/ABwCCWCjBBAA0@@K@??@'@,??><;:x957654431x/-B+A)i'%#!Rx? p ? >^RwN"TQ8^W#K~&>1T, * C{";d"%Z'.)S+|-/1345668:g<=>@5AKBzCDyExFHIJLCMjNOXPGPPPPOZNNMM)LLLLwKJIH FEkCBA@??E>=;9k742?ZAC)EFHI%J$KKM NOYPRTEUWXZ=[\\\\l[[1ZoYYXX WWWOVUlT-RQOON2LJIINI:I)HpGQE-C @P=:741.,2($ ,: 7d@?k ?e ex"'+[/i3M69<'?ACEGHI J^L(N/PQnRSTUVX3Y[7\^{`)acd$eef?fxffedcc&beaa0````_$^B]'\ZY|WVhU=TrT SRQPNnLIFC@@DtHqL'ORtCIOT~X\_aceg3hijkYl0llll;kk.jjWj.j)jkvlmo*pqsQtuvw:w~wwwwv|uuNttttu u@u9u"tttRssrorqqqxq,pp oXnymlkk jmj8C1*$ tB_bG4F~DBAz@AC6F9IcMQmUZw^cTfJhijklm_mmmmmmMlvk(jhg|fbeKddeSeghsjlo qrt uv0vwswewv^uutgtssst7ttu>uquuut,sUrqq,phonmlkjhibh~gg[g/gghi:jfklmSnnsnnnmlj*gd@a2]@Y SNHB<|5/6("< OgbQ&POpMLKMNXPSWZ]aefhjlklmnnnnnn^mlkjohgYecb``C_`{`b.ceh1jm o prntuIvww)vuu0tt1ssst5 s*`aeaja``abd3e6f)g hjlbmmnGnXnnnnmlk(hfdUb=`]ZWUSSSpSSTUMVY [^adSgDjnm{prtuuuuvvKvuvvwwLww2vu%smpmjhCeb`s^%\[[IZ[[9[\]^_`sacAe)ghklnopqqqqonm9ki{fPa]XT2NmG@:N3-p'# - _efgkgghhijjjk.klmn3n4n]nmnnznCmTlvjhebD_\ZFW\TkQ*OMM|M3MWM:8 1*$wX> j)klmmno'op-oonno9ooo]o3o=oHoponm kfheWa^O[WTvQNJHG}GYFFFFF5FGQI%L(NQUAYT]bjfjnprtvlwkxDxxy'y|yqyxwStyqblhDcL^ZeVRONLLbL;LLMHMNOQcRTcUXZ \`cyfhk8lnppppoo~n`mjgdb^IYSNSHB<%54-& 6  lmoopsq?qrYr2qpp{pp`pFp'ppopo4n)ki!eaa]KYlUQMJMGDBAAA@???@@_BDGAJ\MQV\#aLej!mqsuwLxixy6yXyyay:wvks$ojbe _MYTOKHRFEPE`EwFFMFG:HHJIKMMNPRUX\`pcfi&kmop@pp0oonFljhafc_[%VQL~FM?80)f"moYpqrstHttDsrrBrqq=;;g::[9989[:=;?IB\EJSOU[aZfjoDruwixy?yyzyy\wv rUn;hFb[xU?OIE0@?=>>?@5@A`B:C D,EQFHlJvLUORBHKOU\cbnglptw xy[yyyyvyw=uyqm-f_XQKE?;87789:;<=^>>?@ACEpHJNRWG[`"dPgkmRopIppep;onmmkigd}`]X{RKD$1L36];YA HOW>]cj*o/tvyybyy|y}xxLvctpUkd]}UxMF?:942t0o113467B889N9:=:<`=@C5FJOTY^cgjm noop*ooodnmlkZifdK`[WTME>70npq$rrst`ttMtIt)tssrqp]nlj`fbr\WfQKFF@<7_4U10/.../ ..m-,t++,--/05:BIQX_af}lgrufx%xyxxwwZu|sokd\TLE=72}/-B-Q-/?0}123^3434 4569;?BpG$LUR-W\aehk)m[n0nno?o?nn>mlkigdJ`[TMG@9oXp2pqras@ssst t0t1srqpo.mifbh]\W1QDKJQV\`*dygjl6m?myn[nnnnYmmFkjhef`[UDO IBoWop~pqzr+rrrsBssrqppo liea\VP~JYD>:(5_1.,*|*L)*B+ ,--(--,,'+h**))*U-m1.7>BF+MU^eQlZptv#w2vwvv9tsoke_WOG@930X- ++ +X+D+<+"**^))('(;(*-038y=DLJQV[s`Id gj6kl8mjnnwn&mmaml*kDiNgbc_ZUxPJJoGoop9pqqjqgq}rFrrqpnlif5at\WPICb=84/,)e'&''')4*+,b,, ++**g)C((+.&4(:\B>IQZGai.nJrtvMv:vvpv(tsbpTm!gbZS0KlC=z7U3g/.L-#,,n+*)('&u%$$%&(R+w.Y28>E'KQWj\aSf hkkm6mnwn*mm4llkjiTfc_[WRno#o`oop!pjpfpqqqpOoliea\6VP]IMBu*+<++"+**)f((=**,27?kFNV^ekLpsuu[v%vvtsq6nid]VO~HxB<85322R10/-+)'&%h%3$%')}+/4n:@G^MSY^d[gjkmn>nnzmmllkjjhAf#c&`>]Y]nnnooGooopqq~qomjdfa\VP]I:A;50,h)0&$!!3 !"_#%&(())*L*b*b)(]'a&~').4M;BJoR`Z)bhVn4qGstGu_n$n'nnnoAoioop?qYqpncl@hCc]XQ0IB]:4s.+_'%"!PL8 " #%)&')0* ++D+N*f) '&'(-718e>FsN@V:^VdkWnqrstttUsrp-l,ga{[$TNJOEB?|>=X=p=e<]:740-8*(Q'e&Q&C&!'9((+.O38?GELjS*Yr_dikYmnoonmmmml:kjihgeUcdmmnpqZr=rVrkqKpJmkid_ZURO8LJWIHHHF!C?;72-)(&%|$$$&(-1Q7EfLT[bgl1n0ppqoqqpp9mkfb ]YVTR0P NNNvMK4H%C?4:%4/+([%%###%H&*n.39+@ G]NVa\cDgl nEpq5poooo)ndmull0kkRjj!mmnnoDpp'p~qrsor>q@mqhaZ"QIA81R* %! ,TQVU& "&)-15Q8:l=183y-)&%e##="#$&)o.3:%AIQ7X\_ekTnqrserrCqqWpo)mm(ll&kkGlmXn9o1ppbqrttrqnmgl_ W4NF'>5.'$! A 5jpS #%(-3 8U,FlN8U]d"jNn:r#sttss0rqpnnmllklAlmnop"pst{trq)l~f^ VMkD<4U-'j#!g!f!Z!!!!;! !t"5$&+06O<A5FsJ MNONML*J.HH ImK|OrS6W[_cfjVlin npo nnn#mUk^iec_\YxVxTSaSJSSROLHDt?:55/z*'W%~#["f!j!!#% (,3C:RBJRZahmkrt2uuuvttysrpNo2nxm]ll;klmnnofpTrtt6qpk e \TL CL;#3- ' $!"6"Q"#,#""","#C%',2 8>DJ~NRTgUUT+RkPOxNOQUXC[_bf8hkm,nvno\oFo*n@mjkiUf7cC_[XTDQOO+O8ON/KIGEB/=9j4j.*&$"! { z x!#&F)/6z>G OAW_f[kq&sv(v-v%uUu;t~rqoo mmlk klsmHn noqsHsbpnicGZRJuA91,-&$"H"##$&$3###7#$ &5(-3i:vAGmMS WY[[[ YgWVUVXT[]`scTf'ikDm_njo-oIooonmkifc`[WR{OLFK7JJ^I`GPE,B,?R;73\.R)&E$&! d p!*#&{,*2;OCxKTa\-djp sFvvDvJujukts[qpAoLmm)ljkklmFmnpqqo!lgR`XIP{HP?70;*%#"""#$"$7##y#U#$&(|-3f:AyH-OTY]_`*`)^]]2\]^^a bdgi`kmoppkpTppponclIjgd`[VLPLIGEDCA?=f;825'1X-)%#! }f 0 "|$)0.8@IeQYah]nr.u.u}u}tttrqonmm ljmjkylllmoppmje^RUNF =5.{)$#!"k"#i####/#0##%(C-3O:AHOUv[y_gbcdcc[c+c ce=g h>ikjl{nooq+qwqqnqqqpoNmkChea"[UPO,J9EC/@?|=<\:87;42/c+(%#""!; 3 ` U!#O('.06>GUOW`2fmqUtttsssLrpgoTnm]ll~j jlkkklDlnogokhb[S3KsC;3y,M'#Z! !""##(""e"#G#d%.',2f9@GkN=TRZ_.cKdfeffjfgijklmlnoq#r rZrrrrrqpgn l)iIfla\U7NHC@=;976s531/-n*( %$^""0!5 !4! "/#Q'-n5=F:NV^elpsttrrr_q,onn9mClliyijjk?k|lmn"mjfm_XPH@8[0)%!  !N!"""6!""#$',18?FM_SZ^cbeg:gh=hik3lnno$opQq3rrrsDsRs`s(s5rpqDnlifa\u:85i3210.-v+)u'}%$#"!!!p!!"#f'Y,46.'# R \! !!!!Z!"M"$>&V+0y7>3DKQXR]dbdfg}hciCjlmnoppvpqrgrsSsst sssromjgb]VOIC>:87+31/.--+*W('%$#""&!!"""#y',4 ;D0LbTT\yczjorrrqqq]proonnnInUnhi"ijDjjkMllkhc\PTLdD<3,%!d k  !- !!#y%@).5: 620<-,,+q*)Q'&%5$0#K"!!!!!""&F+ 2:uBKS[%b7in%qrrq q pp7owo-oGoo^phhihijXjkallkgcI[T9KC;3+$b ~].I  h [ C ~!5!"$w(o-e4-:b@GmMTZ`(cwfg!h{iknmnoppq%qrstotuuKuuutsqp^mjfta[UMG2A;?2g*#}\!x2 9 !`"#'y+2F7>D(JQTW~]a`d2egg%hjlnnopfpqHrHs]ttu"u|uuuuhts'romideX_{XQJD?.:~51.h,+Z**('&=$#""!b! ! !e!$)i158@HPX_gckooooo7ozo'no!op pqeZeg&h1iMjlk^lllgcq\TUKC;2+#NMC `!,!#6$g'y+y16;h@FLRX]:`Radf9hjlKmEnMnopEq'rrsbt?tuuu)ttss$qokhtb\UNHB=T73[/[-P++.*S)K'&x%#"",!` !8!Y$)B18@@XHhPXXG_+fyknpnnmnnnRn=no^op{q{bicKdfh>ijlllgcX[TNKC;3+Q#v !"$%E(+0|49>HCqHNzTY>\^acf?hjklmn5nopqXrs*stVtCtltSt#sssrXpmje_XREKE?9404-,+*)(f&%$[#,"O!p! !T!k$x)&07?GOW}^8exim[mmlmmmmnnop4q9]^`cfh`jl^llgc\:TLJD<3,C$ x9|^3V l!"#>$&3(+0.37;@ZDIOSWZ\]G`cehjklm?mnodppqrsRsYsosAsrrqpn[kgJaZT|N"GAy:5e0.,$+*)(')%$#E"I!`! !!$)1A8I@-H&OWb]di^llll)lmllmnZnoQp=WY\`@cfikll7h4c\UfMET=|4-*%!=] " !g"|#%k&(+/s259=<@jD}IJN5RV4Y\`=cffi\k\l*lmYmnoVp4qqrcrrrJrqr qpnlhXc?\VOIABo;B50A-++$*_)(X&%$J"! _ !"'%*S18@HPFW]dhkll*kl lllmAnnfnoPSW}\`dgk9l4lahd]VNuF>6z.&"3U ~!!"}#%J&f(9*-0_259 ;?CGLQMUY]M`dh4klxmmnnio(ppq.qqqqxqMq/qYppMnGlghgc]BW?PuI^B1:5 /,**h)('&u%>$ "! n " k k!"&O+Z29AIQFX`^6dhkkkkklLl%llm"m$m9mJWMRpW]bf6jtklilhd3]WPIA:~4/K,o*^*){('&n%[$H"! ) O 0!"&,#3:B>J]QY^dhkNkRkk{kl4kkklkkkC)GaLS}Z` d`i4kljif`PYQJ96.($" !H!!!""#$W$%o%&V&'()b*,*/4;C0JaPVA\bgkmmn@mn nMno,oooino ogooon lie_YQJ[B;50,)('g&&&}&E%$x#;"L!!!% "%T*0s8?nGGOhV]bgjkPjkjj*hge caa_^[]|- 3ejj0i&d1_XQIB;f3,R&$E"! !!z!!!!!""#+#|##$#$v$%&&*D.j52fTa[SLKE=7@1N-E)0'#%s%I%.%B$$&#%"$!X! ! !2#'^-41< CKSZaf3jHkdljjixg c=_\AXTQ!NL[ Y(s2(<3FbPX`ddiwjzj>ea[VTfLzET>5.(5$"k! !C!V!C!.! !!q""T"z""#>##$K%!(l,e29b@HOV\@bg jQk!kllmno3oooinnnnnnmcleigb\GTMFZ>82T-) &$$$Q$)#""!A  8 q #(/5=EMU\cgkllpkjhye_[WR%MzHEB#-7ALU_]FbHh6j;k gdG^WOHwA 81w*U&$#"R! A 6 |!!b!!"%"#V#<#$'+17n>BE%LQSZ`e!hik'klmnojpp0poo&no nnmljgjby\UNGF?9y3.(&>$a$.#z#"!!5 w $*(0N70?G.ODWH]dhll)lPjifxb[VQJEM?< 8r3)C3 =]HaQZG_fikhfh`ZwRKvC;4f,'L#" , F /    !![!"W"##$&*05<B9IP_W@^bfvhjkXlmo'opppp+oo\oqoao,mlj!gxb]oVoOuH@:K3}."(&!$!#""!!V [ $)1S8C@#HpPX_eilxll$j,hd_JX0QKgD$=l72.U%).8CMV\dIh0k!igb]EUNG!?7/)$#4!@  J !O!"c##2#$7&*/v4O9? E0LSZ _be!gil moopq3q%ppoooo^ml@i:fha\UNG@u92-(&3$ #O"#!!F! ;  &!&8+39AJ$R)Y_fiakjjhfCa*[SQLaE<5.*%tE!&*24Z?_IRYafjj*iOd`YR0JrC;2+&Y#!r azs  !C!"{"#7#$R&j)Y-2,7;AhGO V[c_b+eKgjlynop$pppppNptp omkhyez`[TN3F?82.-((&4#"!!< A #8(G-5<CLHS[`QfhjiiZfc]oVN F]>N5i-b%!@   %/:[DNVO^di'ij f+bs\4UNSG=?7B/)h%"! fhoXz   d!!"t"##$Q&4(,T/4(81=wCyJ?QV[1^Tadh8jlmnopRpfpnp p/onleifJc^QYRcKDj=?60,v(d& #"m!j! [i3"%+18F?~GHOUVR\aegigYfcP_4XP{G?h6-%4d - *5?J R[Fa^gikge__YRfKC;4,'$@" B* =\  !n"&""#_$%(+.-1i49>EHKQ\VfZp^bfbi1klno_pp"poonmXjgc`C[V?OHA{:5+/,S(%#"@!B 5/}h $(.4q;C JRX^befg]e1d_ZRhJIA"8_/&@{  !%./>:DMV]ehjhfa].VP;HA91, '%^"!rb L  !"R"{"#}%+'+)+.1t5:@mF60w+'$# qvE _!#!""k"$%')a+-16=;AzG'LQW\aei,k7mXnnn%mlljJh1da\]XRLF?b94l0,)&U$"_! 1s!$*.5A;CSKRX]bdpedc`\VO E<3*! Fan #w-8CMU^td+i&iiWecU^YRL_E=q60y,X(&"# !oT/ug > !a!""]#$&%')*.o28=>BH MSTX^bfi3klIll!kjHifd `\W!R_LF@e:t51%-* '4$U"!! ! d !b$#'-O2z9@ GNUS[`d7e,ec'ae]XPH?76}-$.,XpwY '2=H6QZQ`gSiQj6gf"bp^VXJREKDD&=)60,(%]" d<I(0 > !!W!","#j$E$&H'*.A3S8#=BHNU)[6_dLfi|jIjjiHgYe|b[_ZUPKqE@:51e-Y*B' $"! yI( .!#8&*0{61=4DL*SX^bfee[b_ZcTaKB9{0( =oe "#,\7|BKU\?cgUihqgeb-]'WQIK Db=2618-9)%&(" V[ ; !3!"E##$$J%*&,(+0O49{>gD2JPV[`mcMfBg>hfec `\XSNIC?: 51&-)'+$#?!!V *!!$&g*.4;(BIPV[aqdfepc_\iV*NE<3*"V  4D &1;FOW`e:i+iNigfb*]WOQKD=61,)^%" ~L,{h` ! !!"#C##$q%:'l)-1(5m9? E%KQV[^bicdc#a^z[WDRM7GqA=9 40,)&$""! M ^!#&).#29?@~H7OUU7Z_/72. )&#!  !G!!"N#3$5%(%&Y'>)1+u.1\48@?FMT.Y^Gaef}eb_ YpSUJA7/ &>% cR8 *Y$ .|9}CLU\dgj ijhPeaW\W72-*'$r"7!7  ? !!"b"#$&$'( )<+ -/295/8<@F@KbP%UX\^ ^\Z]VMRMfGA;62/,)&$#"L!!y !L"#%(+/308N>E,LSX\adg4f6d_\UbMC:V0( [ ~&gk Wt-'2kDKR WZ\2_ceVf-caJ\WO4+#L1 )k49w #-377@HQX_cfghrggc`E[XSNxHC,>:85g31001E12 2q33457k8:!;==>@BUCEgGJNQTWnZ0\]]hZWSNID>94_0s.,,*+3***U*,O-Q./1y3]68;>C GMJRtV[H^bdSedcVa#\XRJN@c6-\$ {7zk+ PN$.8^APJQY_d^fgghgPea]YmUPWKfFB?=;9{8~78x89:*:;<=?g@BC_DFH!I}JKMxORTW Y\&^^^x[XOSOjJE@\:6{31000//x/02457 8:=#?C FJOTX\`befea']XSnKaB"7.^&G. v9%MH7 Sd}&r/8ADHQIXJ^bOdegggdb/^RoVZ9]^_czehfdb]XRKBb8.&X; Ygf ZbU{ }l&&08@HPXR^=bdffgihgdpa2]mZ8WSPlMKJ"IOHHHIJ_KQL M NP7QRT@UoVWY0Z6[[]^v_`b^cnddc&`.\XUIQMIEB~@???P?>>?P@kB7CEkFHjJ&LOXRVYr\_mbZdg>gqfsbm^Y9TLnC\8.&O` [Ep TTX!I 0<j'0(7?F9NVh\`Sc%dxghgi^geb(_]AZX UzSQQUPQPQeQRSyTUWY Zl[\]^_`ab2bcdeNfDfgpfeb_\YVSPM@JHcGG.GWG FFG8H]x_ `bcndefhgUhhhi:iyiij j$j5iLh ecF`^|\hZ*WTRPOOHOgONNOP$QSaTV6WY[]_aNc e>fhCgfb"^QXTLD79/i&K5 drOoQaS au}K{ l&-4V;BKPSYi\` b"eVgi#hh.fe\d(cb7a`e`$`f`{```a$abd(etfghij3jjkk k jjj}jmjQjHihgbecba5_][YWWVVVVVUVQKuC9q/"%0X s$>>:?gL^\i%xO<'z  #*?0g6=F9MlSqVY[^adfgghFhlhhhi7iiiiiiiijYjjjcj/iih9gff etdddeefWggUg\g#g$gg'fedccbc bbbbcGcdtdddd}dmdded9b_w[VSDNIA8.%e BscH\%q8*M:D- 9 v!(2-3:BIHNRTWqZ#]aadyf;gh"hhhhi,ioiiiiiiisihzghfPdcUa`W_]\\[\ ] ^6_aYbcdPe8fgggggAggWgggg%ff@feeee9eddscPb_H\AX5T}PLF6?n6-C$0 T<mqjISl0Ytx T o E6 r%*/5ACFGGGFdECBzAAIAOAAA<@?1=;;86I31/.o-O--/147T:>ADGK MuOQRCRDR;QZPO"MKJnI)GFEJCA?=;:18151,&7Z ,mpy 6aNyUzOJGYlhTB /sC %+/)24u689:;;m;:9766555m4420.,*D'%$#$"""s#$&),L/u2591<?A6CNDpEEEETDCBA?>V<;O9i754q3:10.J+&' j!(@ fW-?vdd\\QNSvk{ dYbm w&gHi#<'*p,-.//l/E..J-,,$++,**z)(&$" <jzy`># &K),/25P78:f:;d::9s8(6b421//-,j+t*)(&"   j^q(nI9FxzdkWb_XOWL. }0#z xH #$b% $$b##Z""Z" !!!^!  ` < B L K>Ta!$'* ,s./0q1 00".->+F)W'%$#x""! Z*z | N }_Q":YqG:XGRR[[[H3jpo m VCPir,Ed6C x s0l7f R a`r!#t$%q%%($o"!`ajkD  QYVe,yicC.>f4?DXb^D-XU&w[M K QaD>< L [  7 ,36.;6 7fP l%Rx;YW   rRXmBqf*[k6"-Wx4JMOG@77!   9 IL|7Y_ \&/1K M ^#'Wo  8 t  < ^R4:qqM!SU|g ]),Qehj2ORE-%(80>wZm]F>w-&Sb+STJOG=N - O 0 89wkuUSuC]Db=55CJIF5CE5##):cVyH"yv: ol3[P9eJW<)l}?y!L9JfbJ5J :>   nMB7;GK<)BH7$!.# .]v_#7? &DyQ~_D{koormquUCBZs7io CE,guI39r k[E=JN6 4LR="'&%0"$)7[cH xjP!-{oWA:6/+[V)=?.M|xY96I hLB5 >WT; +0 7@0M=%1Nsm2 9p }ohecV8!&1%&N`[MI[>.tkQC5D^ }S2 !9HSB2& 0.1HLJGYZ> UCQ+~vmfcV6 2RyQ%?a_KA%-R xE $MV&52 /; FtuTA9?A.+ Eliwrg`a[G0%$%(,*!"2;Ln}gF<xzpf]P+*VV,(<$#/*78"*b~nQB5"&FE81Lu8{x9{rbUNG5&!-8:.4J`bO?#'QyeVFY  {W3 .  6F(>O7CuxJ /R``bji4SA?%}p`SF<.'#*8>6! Devw_IISKK^w~rho '.a>) 4 !1K; 'IPG@G_zb4""%@KYv(A?-sg`]SKGFECC:'.Vs|nTCGUPUl!,kB"  1-"$6;/ 'Kel`RQloOA8% /->m)AI0nfjsphgd_RA.)E`pppeWNNUNXype[A$   1) ")/64( 8_{{fQ^ogRG>,&3C89W4C1xs}xoaQ?*)@S^da`\VQOTVglO:#  ..))-*/23-%Bi~u[XYRHA<..EZNBKn *nWA2&%$-;JSUWWYZ[YSUbziOD1!& >xk'/<C}":x%Bdt-] >9N]J      1 y   P ]  H K-D_;hE<^5G   (Mnvt{{tA^.99<W(!;AwA?kk 7        # J h  P X K E c 4 V Y+An)a"{ @ IQ0AGL63=hmsmES1  :=  I D l   , A U o ,  6 3  ! ; m  o  ^ vPGH. 'LnWm t"}d,2g !M zxQGr.H +3<ql  i ( 8  B b s T ! ) 3   x   n:"6Hsknv ,o[#}u!?!#>#! yMB*?O2 5jv@ _ } / a  . J V f e a D & } j | J !    J " c  C  1}yE*KL=#Vn zgHx~wbM)4nH  !E""a!f !R[=<; 9      " A Z e ` [ Z h o m P   M s ` 4   S  4 &  _/>Am6-k>yrQe#p#+ ! !!"!ar<(8 A - J 5 P #e&xSA365=HWcov!  Y Z ' D e v G   SnrI$Hu$WJb2{buo?{FW3Nx< ) ,  S oG=HVP.znV!Ep8CL-'n ( M p  N  . j q{*r&2 yV`&V~R!m`5-^  9 \Q l,KVAE  { kpw|uY0<V} 7{y;]rn:  <? + 9 H V {  < h 7 c0;7q.2eH o ! NtP9;wDF Y]bll@+|MQam<*6Qq78TyfGO`N4}wnl  P 2 } 5  e  J *a#& ,    n    k g R Jd{HtwXx/rSO89Sv])  -V4m#7(6*  ) N l ) n ~ W a 2 8 b % ~, ^ 4  5 : A H E m & N k  ~ QAef{DO*'G=%,54 :UiJXXNSak|\&(=}g0  h > 9 n ^ N J R  9    $c|{b9dMS\ZFa:JkyY(f9='HMF[ (u 1 X J  %  Z a k X 9 0 F { k >  0 c N uZk3WFF2TS6l&8aA[]5~U4 Dl|2r^+[{'4']<jJ x   { ` ]nwVOr-ua`17 )|@`N5trh_VNF=6&X&irt]<Y}N26~7Q T _ 6sxn)Wv,1GVA.=\]F8- [a"_>pv p  * H D D ItE]EifOBKcOYQtZEu=h xkQ+ 4A>4 ^b2m ZpGjl;?* ~ N  F./7R A {-16S@"gv&=(}dg&xZiyeA5dZ)B~Ol /{l1im"  L 75e(<((uJY!5Rct < g  = M # QZOJBtz ;=REZ.]-8JFFu2EQ9JBu.K2:.em + j/4n% r!M!"1"!!!!" "u"##x#C"! QONDu_d2{ X >?G& z%:Q.ILKifx3-YiQ+QBNf(3m 6  ~m \ ~ !e".#$&(4)z*++,+,--0,,w, +,2,x,-R-.).%-,+*(:&#!~T{ pl6 IZb+Gbw?g i_03t  x-3S Q [z!#%H&'()*A*++,-.0M1354045156667 66l6%66S667=77776542w0.,*('&%$#Y! .f  HrE[Jk\O :Ps;MaD lx 0ZSG`Y+,#) x } n" $&H(*,-/-051k23456[7-88:;<<=>??p?@AIAAAAAAAAB.BCBFBB_A@?><:9/7644;321Y/`-+)_'%#!d- ' \lk ^@EoBPR6d[yS,%  7 X 9"%'*I,.1;3w51679:9;|<>? ?@A&ABD EG0HIJKLlMYNONO_O\OBOOO7OcOtObO*O7NNLK>>>=c;964c2"/-,*:'8#  q Bd ,p~w#5 E#_z\pV I @!0%K)M,/215 7:)< =?Z@AC)DoEFHHIIJMKKMO{QyS^TUVWXYZ[ZZZZZZZZqZZYXW/USRPMKIHHgHHHDG$DB@#=:74E1 -+^(3$Tn > q;0s@@m'**F{Jf5 y F ?;#H'T+a/U336:<@BDFHJ)KLNOIP{QRSoTTtTUW3Y/[(]^`aabxc+cdDdydHdcccccwc=bbba`_^B\[Y%WNUkT@SSlSURQON@LIFCO?;8#5<2..*(%' E _$Hs7A?cW  k 0#'=*.26S9=ADGJLNPAR%SUVWXXYZ[\-\]^`vbrdNeg4ghUhXhhhhhhyh1gggggjgffffieeRdcba`4^]\\n[ZYXEW2UTQgNJFB?\<49540+& E *}{%5+Cs  "H&*.v2H6 9=ADHgL:ORU`W+YZ\7]J^^x__`FaabcNd*efshiklmn n mmmUmllZkkkkkik:jjrjiiiiGi@i:ihhDgffQee]dcb>`_^]R[FYURUNbJG3C?;611+f&'!p + 4-3 ( = P #(-x159=AMDGJN3RUX[E]i^`abcFc^c6cRcddecfIghijJkm nqoXp"p"ooFnnn;mmNmllllll9kkjjljij jUjjjjjjkjejihgqedcba`&][qX2U QeMIEA<61S, 'U#w S G#) #o#\L6"(>-3:8Appp*ooPonoo$o#o nmm1ll@kkkllhlm)memmmmmfllk j'iKhgfe-cv`^[^WSP8KG|B%<61+,'I"Pdw ;aG !Plu#6(-;3 8=BG"KOkRUWZ \d^aeceBfeghioiiiUihhhiijklumNnnoqr"rsDsrrqqqCqpppep{ppppfoonn mmHmm#m;mmmmmmmZm)mlll`kk5jiiuhgyedjb4_\@XTQ LPGmA;6$1,&k rO7 !@T'(+*6(&%$%N&)-Q2j7=CpHMQVgY\}^U`FaceYfh#iBjkkkkkkqk6k jk!kdl$mn+oopqvras@t$ttttZssGrrrsr,r qrrYrrr=qq*ppooYoonnnnnyn mmDllllllzl@l kkk8jKih3fd;a^mZVrRLF@;l50')#>u i\Jkh/6g5%3y10/0j148:=:BpHM%QVZ^`bdefghiYijzkkkk]k k kjjjkknl`mxnopqrstYu&uuuuStsss,srrrrrs@sgs;rrrqqpphp%ooonmm lMkk0jjjjk$kJkkllkk|jjHigeXb~^uZVQ'KE@:c4D-'M!*k | L|'AeA ?=<-;:3;<6?{CHMRV[_ckfogiijk8N1*$"_ fAcldJIGFhEDEFIMQUY]aehZjqkkkllllrl5kkk)jlihhgg_fffgg~hikmjnpkqrstu{vuuYtgssrrrgr9rrOrsKsttssJrqqApoonm&l8k0j$ihAgggWgghhijklmLmnOnno,nmkGheXb]YT?NHB82i+%K= kQlmjn nmnoypp4oo!oo3oIoSoCo6oSoeoonm>kheb^[XUqRO`LKJJJ&IHHHIK0MdOsRsUY^&bg jmprtqvTwjxPxxxyAyPycxwuGrgnid`[WNSOM-JII6IHHHIJLNdPGQT7VZ,]aMdgikn[oqJqOqponmJjhSeb1^YYTPOI&CU<5.'! 6lJmnoppq|qqqpYp.pCpoopp)ppoanlj@fb^ZW'S9OKIXGFETDD2CgBqBBCD9FUH,K&N_RW]#bfPjTmqsv+wnxxyy(yvyUy-xvt&pkfa4[VQMOHF6CC1BBBBB"C DEGiI_KMYOS2VZ^vae h k8mopqppNonmki=g*d%`\WRKM!F@g91*#lnopqkrs.ssrQqqKqCppppq pponukhd-_ZVJQMKIFErC@?>>n=<;;\;.< <>@zCGL,QW]zbgkp$sovrwyByyyz@yyx<:98877(6S556!6809qvsoicX\FUzO HC)=s966q66667<8$9:Y;j<>+@LBEHLPUZY^cgKkmhoppqpqpp&on%lkheb^zYmTME>?60)mFnopq\rsTssrr`rLr)qq1q%pponkid` ZoTOIvDj?D;8C6433A22W100?///13248%=DK^RYW_ekpu/wnywyzAyz/yykwvdrnhaYRaK2D->S8,4800"/001\12345o6U749 ;M>AhE#INS3X^bgj*m9np0pppqppnnFlkhe?`\|V)OtG@g9n2.mnopwq:rRrs&rrrrrTqq#pp omkgc^YSMH8B=953 10k/////.J-x,,f,I--i/2O7=ELZSZa h$ms uxdxybyy>xxvurSnhDaYyQxIBl*i*+`-K2!7o>EMU\ddVjpt?w2wxx-xcxwv>u qnvhiaYQIzA;N40e,H*)*K*_**+%+++++W,'-0m36:>DSJQCW-\`eh)k>lnDnop9p8ooognm7ki=fb]WQ?JDunno0op9q qqqrFrrrqp\o]m7jfc@^EYRLF@;63/|-w+++*+Q,)----u,++9**`)n)+/3:J@HPDX`LgZmquIvhwgwCww\wutqniwc[SKD)=72.i,+f++C+#***[)))(o()+.149~>E/KQW\Aadhklmoopooopomlji*fbS] WRRLmnGnnoKoptppqr1r82-*H&$"!!$!"^#% &'~'(=(r()C)N('''),Q17+>gEzM9U2\dinqtNtuuutt:rbplhaZT+MGB=976666#5C3T1 .V+)(N'&'I')w+ .28>EzKR$Xh^dhikmo~pfq`qzqSppponn,mQligdamm#mbmn"nJnnoqKqqonjkKgja[UMF>y71- (& #W! v1 !#>$%&'(n)w)))4''A&(*/P4 :A:HPXt` f koGr1ssst%ssqqpmhbl\OV$P:KIFfB?<=<<<;:8B5Q1..+~)M(c'L'?'"(H)1,+/5t:AVGN'TZazfgjlo;p]qqqqQqxqWpoo4nmljNh'em2m&mmmnCn=nsop4qr5qomid]W~OG?71+t'#! c \!#%&~( )Z*+L+k*{)8(1'^(O)-06w!P (0dA6 !#%(0*,l.X/!/.-,M+ ++:-y/4T9P@jGOW^RdiGm nopp~ptpoocli$c^YU4QNJKINGGGGE"C ?a;t61r-)p'%%w$%%.'). 2k89> DKS%Z`fyjmo|qrIrtrr[ryr qhpp_pognmal7mmWmnnnxnoqcrrr o lfG_WqOG|>6Q.)$P!dgU!o$&),/w23F4]320/F.J-r.\/'26=DLTq[bbKg kZm#nnooo>nnnl;83G.B)'C%2$###%<'0+!.4q:A"HJOW^-dhmoKqrsrrrrqqNppp\oon\mum=mmnnnpbqrrhqnYjd;]LTLD;3,(#`!/}xb$J !%(v,\03S68:t:[9754=222G5 8?8ELTZaTf!jlnnn8mn mmDk]hd`\Y VgT+RQPQPOLIrD@6:4/*N')$$"""#%) ,O17 >=EMIU \bgloxrQsQssxssys:rqppppo{nmem$m}mnno+prBsNreq{miNb*ZRJJ A91*&" 2" "y%).3 6:=i?@;?>876,8T;AwG?MTAZE`keikm;mm%lllulj?gdM`]Z4WUUT8TTT)ROLcGyB<60+ 'D$k#",!!~"#&).4;CKS Zaag}lps8tEutttot2surLq"! ! oNP!#|'#+16:?5BnEwF9FDCoAG>=<>AIFKQRV[a4eTiekkllll;lMEI=.4.(%""D!"U"!! [ !"$(-39q>DGKLMeLJsGEWCBD5FKOTY[]b eijlRl%lkkqjjZhfc`]ZXUTwSTTTROmLVGC*=w71+i&#"o d"#(,4a;DuLT]d joNsStv|vvvRvOut&rqq p o\nldl#llmmnprrp~nic[SKC ; 2,'}$"""#3#9"""!!!"#%*/V5<AHLPRDSRQNLJIxJLPTX]`dYg)jkllllkkjyig,dea^[FXTSQQQPO-LIE@;6{0*&#S!  *_ !\%)M0O7@+HPYh`h5mTqtv*vvv[vutrqqoo)nl!kl/lmmsnQpzDKPUWYY0XUSUQPQSVhY]8`cgiklmm`mzmlkjihec``\`XTRIPVOvNMKHEB->:5L0*&8"!]vob`J"B%,o3k<D~MU]elk+peruvvhuvNutrqponn%kkklllmospFpKmk*e_UW OSG=>7)/*G%#"A""#p###a#"#U#X$&+1$8k?X;L73~.*&<#!! !!j$F*O09AJeRZbinqtbtu8tutsqponmmUktk7kkl3lm.noQol i/cS\TxLDELRY=]ac$cbbXb%b-c&d|f/gchjkmoapq'qq{qqHqp1nm-kjhCd_YTDOmKMH@DB><97530),)&$#z"+!z u u! "^$))9/;7?GPCX`@florsrrrFqpomm;;8[64l20.w+)D';%m$W#?"!!!"""#N$)\.7(>GKOtW-_(eko!qr qqq"ponmlkkdkyiaij1jkklmIlkhc\UM{E=53-&"t  !i!! !!#Q$)*.L5a< CIOV[a'd fhgghrijlRmSnndnoopqNqrrsrrqq1on~l\jffb6\UOJtFAr=q953E10y/ -*('M%$##4"s"5".""#%)5.6}>2FNV(]dUjn7qq8qpp4pomm ll'l+lyhiZjjkklmlkig7b[T@KC;3`,%&!Cxp# @ y!@!"$"',3:1A GMTZ`dfh.i_jEkm=noLopoppqhrrsLst+t)ts]rq"omlhCc]WIPJE@Z;63}0/v.@-E+*.('_&%$$#"""#"#$(C-E5"po o2o;nvmm%m0mmSmhPhijck kl/m6lkig(b[LSKTCW;\2+m$[ lEY) 7  ' !J"#'&+}17>kDK QX'^)be_fhqikm'nyo(opop pqr{sst7tu uthsr\qon.j}f7_YRL@F@;6~2/.F-,K+)('R&%$#w"""""{##&+3;5;AGNU [g_cde?gUikumInoopp p9pqr^rstu&u^uu9tssqrpm?i#b\RU0NxHDB.<62%.-r,1+*)}(Y'5&%$2#"""f""/""&*2:B:CJPXV[X_)atdf]i?k}m&mnootopjqqr4s-tttttttUt6s+r2nkd^iW>PJ(C=7/2P.-[,+l*{)s(P'*&%'$?#""[""1!"K"]%*Z2-9AIxQX_xf^jdmWm@lllhm llm:n1nopc[dNegihjfkom lkgb[}TKC<*3,$ ~T* KJ !#-$l&).%2Q7;b@^EKQVZ]`vc&fwix7]2..c-0++D*l)('k&d%o$o#""K!"!""%,)18@HPX1^eil}lQkkkzl3ll&lmnop^`Cb`dfhj'l:lFkgc'[TLD=@4-D%!mAJZV !#~$&)z--048KPUX[^beiklmhnnzo oppqrBrr}rzrhrmrdrrqnk1e;_#X/QK>D>(61-,+W**)_(w'q&}%}$Z#`""!!!Y!" %P*"19AHPX<^eHi-kkkLjjkk{klEman%npZF\^aodNfhkdkk|gcm\nUTMGE>@6.w&"DdvYN !#$&(+.2&5n9<@ExJOzSW[O_FcfilOmrn]nnoSopiqqcqqq[q/q1qJqqNpn jd_3XR7KD=~50,+*I))W('&&%#"!!!Q!^ !!%x*n2/9TA9IEPXZ^pehkik0jj,jk1k"kMlm:mn{oTVrY]uaHdgTjmk5kegd&]qVNGO?70:(n# VAA !#b$^%'*C,/I2 5A8;o?-D IYNSW\ `.dhflmoRo[oopppqq&ppp@pCptppzp mijd_9XRsKfC<4/+*).((y('O&a%$#k"P!!6 !V"&+73:/B J#QY^eGhk>jjj5jkjjkl~lmmNQU#Y^bf ijkhe'^X6PaHAX9~2!*0%!!L5O  !#-#%&(*L,l.1`3k68=CIIOET?Y ]bg#knmpYp`p\ppzqqSqDq%poooopIooglidk_DXRGJC;|3.*)((^(''&%%w$#b"?!n! w "&l+3:BJR}Y_rehkjjj?jk)jjk3kkklG)KOU[W`dhjbkiPfg`KZ RlJC@;4D,7&#"1 f   8 g ~ !"#$L%b&(/)+-/L1z37=aDFJPyUZ`Gefjn)ppppnpq qquq0pwono#oooRnlid_YNRJB;}4#/@+.)(R(''u&&%$#"q!! \ 2 "'C,4<CLSZ`zfjilk#jjjPjjjELfRKW]cimpq q3pppppponn+nHno7nnlie(`Z}SKC<64/+)(/''&&&%%#"!! F !#(0.5=\E0MRT\ag*ik#jejujWjj3iEh giferddU8>PELT=[afMhkjdh`b]XVNF?i8)/)%Z#"4!!p!~!f!}!!!!t!"##d#$@$%|&@'@()i*\-2:9Z@GNITZ`g\ko6opnoppp=p)ooXnlmmn5nnnkl~jea[U8M2EN=61V,*|(-'C&@&%%%$#"m!o  !$ )/7?=GO-V]bh-jHkDj\jmjihfeca_^`]1E7?fGPEX^dgjjic^WPQHnA91s+ &$="W"!{!!!!!!!q!"!"n""##|#$_$%E&D&)-4O;CrJ&PXW]rd|imvnoUo o_opooo>ndmmmn+nmkifbz\VANQF?~8*2-*(&%a%6%B%i%:$]#$! v" %+ 19AWI0Q2X]_di8jkcjUjhihfda_m\YWVf*71R9BKT\b\ejjuid`eYRhJC=;3,'%$"p"!8!'!(!b!}!l!- !7!r!!"G"#,##$ $%:'+ 1'7?aF%LS`Ya fjlvmmnoGop+p0onnWmmn+mm{kifnc]cW OZH@93.+]'&$$z$l$m$ #! 1"&6,3;CKSxZmafW5.(m%;""4!# !! p 8 C v !!_!"1"#"#@#&T)G.4l;BiIPWb^d'hjllmnop$papoonn}nn+ml9jgd/^XGPIBm;.5$/+'%[###{#2"! ^&"'O.5=EMU\ch kll:jj_hea]XT OTJaFC%/68BMZV]b9hjLkCgd^|XP=IA9\1*&#"!g x w O {  Y !-!"~# "##& (-28?#FVMT[aFf%hjkmXnVop3ppp\oooCo$nnKlkmh"d^XQ[J,C;5/+',$#l#="!!Q *#(0F7?GOW^:e0iSll~ljifcT]YS_MYG~A=9O r*`4>SIHRZ`fiki,fa[8SLD<5X-($#! J D S% F !a"F"""#K%{(D,06a;BIQIX^3c?fOiikIm;nopqqqSppDooo4nm0kgd;^XQJCn8>ELTY_)bfiQlmopqqqqppoo:nljUfXb`\W)P^IBx;{5T/+*&$""R!; &?!%&+3j:BJRZ{`fjhlkkigb\sU0NoF>7;/+&!*4?ISZafjjSiecay[*TLE8=5E.(&#! Lz* !"k"#6##%'*Q-d15u:@H O3UhZ^bfNiknoMppqtq@ppOpoKnpliKd`[hUOJHA:t4H.K*>&$"! Hs"T'-5FNUZ`d/g7gfcaW\UUL0C;1(3 u3D(j2={GPX`fjiifd^YQK2C;4.L*P&$Y! 0 b !z"/"k"w"#]$ %%'G),0R5:AFM S^Y/^cgbj lm]ngmm8kBifdI`J[V:PJD?=9k4j/, (&$f"! f V"%<*.52;CzKQX]bejg-ed`]WO@Ep<3*! t0V 5",7AKTS\bhiKjVhMfb]WjQJC(;4/+U(n%" + !  !b!"B"a""#[$$%'1*7-27=PBHOUC[M`dgj}kJl6kfj_geb_x[VLPuJD?(: 50,)&$"! N !"%)X.3:A4HOU[`defcb]{XQ!H>5-#m E'Ql }F&C0;ENX_.ehjiiTfCb\WQUJC0;5)/,?(U%H!M m19  !d!!"0"""#/#:$$'c*:.358=CJQ)W\beKhIijhgdla]YTO~IwC>5940-9)&$`"!! y *XT ?! #)%p)O-*28!?FMT~Y_,bfGfebn_ZBTKAB 8%/&k`n 69 fI *O5"?sHRZ^b,fjjjh}faz\W)QzJCR94[0\,(%$k#'""""#O#k#$%&v'V(()+s-%/G136:>vCINRSW\]m^W[YJTaOJC=7`2.j+(' % #"" !!h "<#&(E+/38]=CJxQV\ _dzfhfd_[TLB8/&,( U8/ychq-%0:DZMUN]chRikk=khea^?YT,MF@;62/P+)(`''&&&' 'T((*.+*,2-A./1b3%568:=AFK7OTXY\]][X?S>NHBt<>6E1-+[('J%$$@####'#$B&)(!+-15d:>DKQPV[j_cfghda\VNEq:1C( a`C-^T +N)h3=FNX0_deh{jk*lfkjEfcn^ZTNHpB`=852G0 .-T,,e,+,g,-N.j/0124I57G9:;=;>ADIM QUPX\\]3ZoWcR`MH A;61. ,*)('|'&&&&'(+ -047;o@;EKR?W\^_cfi3hfbW^XVQH&> 3*5"" {,2 (v"[+5>G`PX_`dghkkkifb_ZUPKJpE>@=:7544454&4w45R689: :<=a>@ABCE7GJaMQ!TkX[]^^[XSOJdD?L952|1//.6--2-4-:--.02548;?B|G:LRXe\`.bf]YGR%J?5,|#U~ztj)eo#-7@ HQY`5eHgfijllVk gqd_[WtRwM}HE-A?~=Gq?ABBJC/D E?FH%ImJ*JKMORUlX[0]`.``c]Z\UQtLGLB+=9665>44>33m334X457S9f8hhgcl_YSK{A7-%)R6 W>#Gz0 %.7@eHFQX|_Hcfgkj"kpljg}c`s]Y[UGPMIGjEJDMC6C%CNDDEFHWIJKLMNP,QRQRS4TVSXZ\_Aa3c5c\c `U]NXUPKGqC @O>0=<<<;;A;v;<=<=?_AD8GFJMQV)Z^acfghfc^ZDSL9B8.&4% )Yn PXZ |&P/8?HOX@^gc e6hil>lzkhfb_\Y UxQOdM:LKK:K#K1KLMNPRSDTXU3VWX;Y,YZ1Z[\^`acvdfHf!eb`\)XUQM.IGkENGU\`jcehjl&k iVfkd3a_;\fY;VTSRRRSXSTVWYZU[\o][^+__`J``ajb3cHdEeRfgmhfh'geab_]!ZSW$TQ.O?MLL`LK~KJJJKAKMNLPRV Y[^acmeQghhfMc]YSMBD9/&~M QB@bEIf c Nk*&f.5Y0YIYZz[\^Z`abcdeg6gfg"d0`s[#WQKC9/&)( AXd:\aBkl)`Dk'P I#*07>GAOUZ9\`bf{hjjjihgg ffg)gh*hGhehinj jk kQkkl9lQlkFjoiiLi'hhhhiijk;9W7F6,44568 :=W@tCFJ M OR*TV*WWWVUTR~QOO>NNMMLCJ@GDB?a=95/(!7: Y}@ n@_^D?R+xJE * }3\ _%x*/36/8:=>@ABBBA@??C?%?>>=<;c97520S. , +)* *F+-0!258<:e853,.)#M   aXdn 9hRtRzPKH`wl,E }l!}#(y,+/:02Y3g467"777@6|5w44033 210/-|+)~'I%#!K UX!#%'*-04 79;>?j@ABA@@C?B>X=Q<\;A:87O54x3+2#0/.,"(h#K? V!@ee\[RU`s$&i,F!  b$l++ 3$J&().* *+P++++Z**a))>(d'&%M#~!Q1hec@Q!)$Z'*-/26356e6654321+*U)'%$z"!!6 *.9 M n U8=KG2awN@_CKN\cfR< }&6" QiNr Bads!  o g ,io a F !i j3~Fo ZcGrH"rohF2Ch/:AXeeL4 ^i6X7 h I y X M t"`,,{U   $Jsdf % 8X\c$zWs:"-Vs5LQSJE=?*%&a=~"*) iwS7)EC(e7$  e g { l gQ!R>4ePs^^)-Qaad6UZM5,/B= 3erJ)h:T\)y0yS s| 7}aF |$,~xf"mkk]pCY:];89EIHG4FL@/$-2' 2XN'hSIDDSq~reL0%KkW)6xFVl:e8kB<$ZrSY;: mPH;<GK@ &EQE+--$.2&SfJ 1s}@ J%Jj_L$uyx{vy}^E8C[o`a9IHFb|p)>*l{=0]hJIw #rcI>JP84LXH)#5/&!#".KP23! U "yz|rU9/6F? IiU-",Nv{oQFT  mOE96T[B 54,<)C4%<ZSE<(;goZPVhkI+;O> >jr`V]yj&)sk[VFOfW7 9QWA4)/3)@D?9HM:CI2K+)sg^_kiH'*2!/-)>e=6`\SR9<^  |G  /QR%759I$?nkH65FP7&=IC+3ReTsnc_ebI1/7730,! ,>=Edp? -lwh_a`B>c  X+ .<(  %4& @? #]zq]CA@(2M\XF-<k!Vd>$ul[PQO<,+5AD;*#@P`~vW6@usgbVe  [5 0 !# 3:>I,=n`>! /Kbqod_aBE?vfTJHH;25@MJ5 (Sp}t]OF68Liuupx!+gC-1$.@0+GI<6?Ysy\9')+7ANYfx .H@3td[YWUNKNQQC(9`y}sbSNNBF]$tJ& '  ,# -3-*I_bVLOh{rYKDBC>=8In7OY>tilutmhcbZK5/Nfpkic]YUSGOmqiaI*  +'!#%&-.(6\wvaLVgdVIBAFLOCD[>O;xp{zqe\M7$*C[hjba``]UOKZxmM7"   .1. "**#%)0.!Aj~qRIJIG>99EZeYMPm "/# |saSF7-&-8J[bc_afkhXNRjcJ@,"("# 8so')BP  Rg0'!\!|!5v'+H>6  3     % r L T E ~ N-NgFl@9 O)G   *Stut|IU vP t!@!z \ ) b$           = y U  I R F K p = c`)Cn*Rrz: JR2ELO7!2>(/\ U!")#[##d"Y!!) O4w=5$N = 2 : X I M |   * 4 L k p  1 ,   9 s  " v  gzO@B)#MjOfp{\'1TvQ/ #`s?idR U I4indI8Et  w R  : q  8 \ y ~ k E ) .  | . ! l1'{F wdlv *  "m\&{p>MC r!! 9I0 $TEj`D* i *  $   C ^    = P X N R >  } j  | Q #     U $ g  < "pzpF*FD;&Xm!ziDxy_N,+q ++Nel7 8//P6 v } \   ) ; E T Y N G ] j [ 2  F s | [ 9    . d   3 $ Z%~-z?q6-o2xkNc'3KV E ^g 1 . u "[/nR1'0DDETedn  ] W * $ Y r } C   GjsE%Jw#V7](jVpi8H#p;'sFL(J d . 8 > k ;U$ {= )[=>P'9  = i F s ( d p)j#5qtUX&U}]-nDH`1@\3 z p 0Ea!)!%#1 5.uswnT*0Ch *yr8[mtG&HS 4 G T ^   5 e , d491n)/eN  5 [j>.8U { zYgGma;Jrkle6 &Ae/2MnR^nZ1{ymj E . r / } f  G +_% } %   } o   T N 9KZtL=U]!s^^o~[+Dh-~}'-F28& $ A [ ! a | \ h 8  > j + 1 S '  ) + / 8 9 f # O o & - } {C9Q eT N27h4QUHLF5#Ig} IRVOMXl3k9>3Ey]'  b G 9 o f Z X `  2   #- oz~~_ czt}}of<gL:Z '%pJ$sq}A 2:!F\Ui !k % R J !  )  X c o ^ @ 6 K h :   5 h O %mo%RMP9G-uYW-y *2 uK Oxx*yp3l>DJ1gG  s  z a a}hta`(+o[_. AD  >h0j&+(h"npkYf^=,t <M S [ 1pua/_:<WiN6;TU?y9Bb_L|#*w9\E2!0T,M 0 h p t *4h7 [cP|ot2i-UWmOUIhZ8pKf |nR).86. Va<|(kSncyLV,~7  @  t+( m c[xaC e=VMwV X.} ^l{fC6b]&L'_w2EfnCZ  DHY`6qE@ Jr'5Ec] 9 n  ; 9 VV 0e%t;)V0].:NKLy#0=+8=?fR J"_ ! s k6o\F~{j/;XT.; !'!v" "#$%1%%%~$" H\A z  &?t<a$6&IOKig{83^Rb{pBISf(??u h g qJy w } b x!!"#$%&'(x))**+0+++,,-m.V/A/000/.=,!*'m$"Q4iu/<^k x BLk3M!ha37v }7<X N2x "$&(())*U**++,p-V.@./0|1?12m23Z34S55566\6789z::::9q84614*1/P,*o(&%$z#!vQxv{X S HC>8' Qz8G\? js *RXXhl@F1#sd{ i wn!$/&) +-/01233345X5671789w9:Z:;m;<}==>>?@{@ALAB_C$CDDEfE$DCqB@>;9754 3271/5-*(&%#)!7& Z N0pNU.>W<^UsE_w-_ P'#&G(+.14'68j::<<=[=>?@E@A6ABCDNEEFGuHHIIJKxLMN"NOOPwQ,QQR/QPOOMKaIFDA?>Y==8<; 926401/5,*<'$!CWl ou?26G My= bd+D %<)q-(0v3s6:= ?,A5BCDFFGHHIxIJJ;JKMNO4PTQlRSTrUHVVWXYDYZZ[n\\\\\K[~YX$USQN[KI{H"GeGMGFDB@a=:741., )&"=9 2F2j)KI % HsKZh1lk H0"')+`/37;2>BTElH'JKMgNOPQR5RS]ST9TeTUXVX(YZ[\]^l_)_`F`abab+bhbcOdde;eqee[dc|b4`Z^}\7YWrUSRR?QPOMKIGC@= 96U30-_)5$ 5g frI"Aw]h_"} B#M&*f.s26:w>oBMF`v^]O\;[cZdY,WVZU,SQOL6HDA==:74t0,'T">s 8  (15 # { & ? += ]"&*G-159=AE^IMQTWY[]+^_m``P``a=abQbcccdTeEfghij j,jMjPjtjjnjIj-j/j=jqjjk?kvkkkkkk^kIjjihgfee3d\c`b`_]\[QY8WSPMIF'B?0;7f2-($ $g 32<+ g}9_ j$)-1593= @DHK~OSPWCZ]G_abcdxddd79N4)/ *|&#! 8)P!G"3%*/4o8<@DHLOCREUmX\_bdfWgohhi$hh:gg}gghhijdjkl.lmn6ndnUmmmOmMmpmjmbmWm{mn-nnnnnWmm*llmlvllllmmmmmllkkjiGh]gifIeHcbI`]ZWTSPmLIRD?:84/+%e xVn'&y%s$+#8"Z"#&S(,05:y?/CkG)K7NRTU%WZ)\_bdfgiBjjjjgiiKhhhhiVjkklclmonno7oYo7nnGnnn9nTntnnoo{ppSppEoo\nn)mmmYmPmFm@m+mmmmllll|lkjji!h`gqfgdca_-\YHVRO JE@ :?5=0 *D# b eaS( /11/.X-;,j--037!;n@uE_INNRUY[]_adfhi]jkHlQlmllgkkrk2jkk4klm~n9non80)"( 0 ,KiG`FEACBvABCEHLPgTX\|`zcgeghhijkllhlllmllxl kkrkjjkkjl>mInoprq*qrrkGkklIlllmmMm1mHlRjh9ebU^YvT>N:HB-;4R,&6 $C VkviQ?P|OMqLLLMORLUX\$_bf(hCijUjkklPllllYl"kk!jpii/hggUgfgEghikRlmo op|pqqqqq"ppqqTqqqqr0rs#s{s~sxs rr4qqpmonmll kLjihhmh7ggggghi{jrk5klmNmn_onn0lWjgd`\DVQKE>70*$Gj r_+[2ZsY WVV^WWY[^{`chfQhk@lomstCttuuDuv v:uu^tWscqpbn|ljhvfcb`_^W]\\] ]{]^P^_acegik|mPnopqLq poGmkBheWaW\QWROLF?92,&( :s # kh*hgfffgfgeh5hijklmn7nn n mmmm=m6luk5hfdUbz`^\EYWVIV UUUVW[XZv\^a"cf'hknoqVr(sstuv@vvw"wwxww utQr olj.gddxa^\SZIY WVVo_o=onnnnnnml'jgd`] YV RNKHGhFGEDD/CTC#C!D&ECG7HKNSW\taeNiZlpsmv w_xxyCyPyybyKxTw_tr'mi0c^YTTOK9H)EDXBBFApA@@AsBDAF[HKNRPVuZ_bf hkmopqAppooan lBigdaX\X;RMnG'@92K+/$Uwlmnno.p pqmqpsooooo0oo onnnmkheEaU\XT[PLH EBB@?p>==<><<=>?AYDCGLQWv\b fk@osCvcwy[yz)z+zdz%yxwtqlgPa%[@UfOhJ"DAE>\=4;;U::I9:G:<~=?BOEHL'P,TYS]aewi knpq`qqpppCo$mclj"gd]`[WIQjK^D.<5-'I l@mNmnFnopppp)oooooRoAonnLmlWjgd`][VRMoHD@>3;:88@7l6696667v9:B=,@EK{QW]chmruwyzzzzzzKxwtqllf[_XRwKF@;8765555 45F67]8F:<@?hB=EIhMReWA\`dh/kmp pq`qqppnnlki!fb^YTMF?=71*!l}mn+nnopq$pp{p&pAp]pooo5nm`lJjgc_[UPdKF5A7=P975322D11+00?/0K01259>D{KxRTY _ne=kpstwCyhyz}zYzzPzxwteqkoe[]VOHH%A;s6211/////0002!2458;r?BFK1PQUZ` d'h&kn opppppp*onnm>khea]VWSPI:A:3lmnrno

EMT\(djpwsvwxxPxx=wvurojd\UMEC>72.V,>***+ **+++++,C-/259=WB\GNtvKwcw9ww93/+)h&%c$I${$%&(9()#)B)>)|)))V(c(a(+.4b:AVHPBXD_fkps]u|uvvHutsqol g[`YRKoE>955371252!11j0P/"-+*n)L)()*-./38?>EtKROX1]bgkGmnp$pqjqqqqqqTp_onlifb_QlKlllmmImnfo@pqwqq.q6oYlgybO[UiNAF?68$2-{*%&%"!!%!"#F$%&''_'(V(((['F&' )e+06!=4D(KS[qbhn?qettuuu DKyRY``wejmp%qCrsDsustKtttdt8ssrqgon4mmmmmmnopqr,rDpunje]ZV;N:E=5/6)%v"G!DH 9 w!#%&(*r,,,+*)))`)+. 3 8r?G4OV]di0mnYo]nnnnxmmkGhb]pX9SPLJ8GYEEdEEDdB?U;61,)-'[%%@$$%!'%).S39n?FNUv] cCilwoprs[sst6ttttwt%ts{rq]p=mmmmmmnoHpqqqomhPb*YRcJ7A9_1+&# !6#)%'a),K.d/=//+.^-7,;+*+,05=ADnL;T[bfkAlmm\m6llkkigbo]YTR OMKKJKJHFwB\>982-}(&h$i$#9#g#Y$&+/T5s;BJoR=Z(`grkoEprssstKtu tttatotOssrpnmmam:m_mAmoGpqqAqnqke_VOF>w6/J*%" g;A # %[(s+.134P4+3210/`/2/P27H>kE3LSZ_a$ejUkmll8kkjkjhhea]YwUSQ(PpO\NO@O NL I`D@7:l4.0(%#Y"""$" #{%(,2]8Z?GOW^ejoq#st[ttrtuu7utt;t9t3ss\rn]mmTmmJm3modpqppWmAib\SKC;48-/($4"q!3! 5~v  "%)s-a1468~89C876^4533259@FMTZ!`cei]k lOkkDjoii+hg da/]xYV"TRRRRSeSRvOLGB<:5m/ (%7"{! !#C&)/J5 poCkgN`DYEQ(I3AK9+2^+'$."""!B y !C#m&~+/48/;=>???=s;99/;?EK;QV[aRe^iLjlkYjii_hgf.c`]tZ*VTSgSSTjTTpSPMHC`<5/o)%"!Di z!$'B,G19yAaJRdZ-b1hkn%qjtuvvuvvv~vu%t8ssrrjrn%m+llTll}m1nppo-nje]VuNcFK>r6~0**&##B"""Q!!F { { !"$j'-B2i7}i,h\gjfe:c-`5]JZ_WDU\TTLTU@UTSPMHCH<5/f($! # U!#(-55= ENlV_ elpputSuw)wwPww%vutcssDrrqqhmll(kkklnCoeomlkhb['SKC;4.5(%##O##)"""%!!O!T!]"W"%)/p5:@DHJMGMMKI/GGI?LPTY]/`dgPjkCkk$jiohgxfeNcs`^U[XVUTTTTSSQNJF1A:4.($! w]!s%y)18AJ R}["binlruvvwHw w;vutBslrqqpmrlbkk}kkl,mnnljf`qXQVIrAC91,k'2$# #*##E#I#""X""." ##&*1P7}=D*I&MPMSTzTRP~ON^P*RVZ]adgmilllkkFjYieh-ged b`%][/XVUUTmSROKHC>9B3."(w$!j 6$FBI"&-f4=wENWU_(flaqtvJvwvwvusrr(qpBom*l-kk`kkekm^nmkni&d^-VVO GC?70 *%#"[""""""w"(""g"N#$#'+2:8?F>KPTJX&YZXVUUVX\G_0bdg[jmlnWnynLm`llBkoj&hg2ed[b`^+[:XVURSR\OLHD@m<7:2K-($! k/()#"@%D+c20:C+KTj\gdnjcoruduvBuv\^_^)\[[q\^acegjlnppoonn$mvl8jigfec`]/Z,WU\S!PMJ-EB>951G-(%"! [E? " $g)0h8A IRZ4byhnqtuHuuumusrponn.mlxkkak(kBk*kulllXi;f`VZRJB:3+'P#0! !*!M!!!!F !!!"k#;&+29A$HJNU,Z%_KabbaF``aceghjGknoppppyp5oo0n.lkRjhgeb^[RXTQNKWGUC?8;74&0L,)(&$O#/" ! !G!E"$)/8D@&HPXagmqstftstHsrponmmPm lk`kjkjk(l7l0kigdp^\WOH@870)%d!  D !!`!Q g !7!2"!# &+29A~HOsVc[adf|f.fef+gNhjkl lmop1pq7qkq6qpp>onmblEjigd`\XhTPLHD6?;85^2f/-,I)r'g%$v#f""!!"@"%#y$)/<7h?+GzOW_f7lps sdsrs+rqonmlllqkTjjjjjjkkjg c0\VCNQF>68.'# PH S a  . !"&+m29A@GNoU[audgigh}hijl8menn?nynop8pqqVqWqZqppioo nlkiffbM]XT O|JFaAH<8520.+)w'&H%G$C#"""_""#$).|6>l95J20N.,+)j(#&%$$,#d#"#"#$>(-'5&tDDJUP|UY\`cgtj lmnooopp;pBpwqqqr r r rOrrrgrCp"mfh bF[MTNqHA: 4/`-\+z*)('&&%K$u#""`!!!D!!$)29uAIQ2X_fPj&lll k2klMlkklmZn"ob[cdKeghikkk gb[TLE5=5B-&"]J)ZaDXV &!y"$&*V-t1U5`:8?DhIOSW[_tcafilmnpo)ocoooppppppppoppqQqpnkf0`yYSMFp?8 2M-,^*)((%'S&%%!$0#I"x!!!e !8!j$*22W9AIQYC_filkmjij8jjjhjkl3ln ^Q_ba(cleg|hkktkgGc\&UJM|F >6v/'#E 5Y8[d78\!O"G#%(+.4159>CDH`M|R]W[Q_cgjm7nbo_osooooppp$oooAoYopDpom=id*^WQKED+<5/+*)5('';&%%_$#"!!!)! T !D%+*2:EBBJbR Y_eiAk@jeihhiziQiKijk6km"XZS\`cCegjck@k\gd]pVOG@28<0)[$!y k5 !L" #a%'.(+j._25?8pMp7ooonnnnosonkh\b\VPmI|A:C2u-a)) ''k&&Q%%0$#""!T!  !q%+3;9C%KURZw`k7&/*)%$""q!!!!!!! !d""_"#!#$f%c&(I)+o,0p5v@F.NrU]RbgijJhh gg]g,ffeeeZeMe=CoIQW^3bgjm kid^WP*H/@z90+ &$#5""Z"`"?"/"'"!!]!""="i"#8#$%d&'q(),168>FL~RY<_fkopqq^qxq6qp~oonmvmFm|mmpm1jhb^WPHA92-)(&m%$$y$1$##! j[ i#6)P/87@GP"Wx^chj'jShhgff dcbb%``g`q6J"N"P"'!!!!!!""e"#$ $%&#&)[,3 9@G~NT[chmnp;p]pppppoKn\mmOmVmm-ljgc"^kWQIdA:3.*e(_&Z%$v$###b"!I 2.[' #*19AIQY+`{ePijjhh6d/@(%""A!7! !&! ] ) ( / s !4!"###~#\#$&J(-T18>|EMTP[afiltmnopepppDoo nnWnEmlj[gcW^GWPIB;4/*(U%$#k""~!!B K(B%"i').6D>FNV]|djhklkihgdh`]=Y~U\QUMXJHQ (2/;E=O#W`^ciklipfU`(YQJB:92l+^'8##! n 2XUd 5 !"[#@###$&(t,k05J; BqIQ9X^cgDjlEnnpp}ppp[oo_nnmm jgc$]WPIBn;4/*'%C$""! /`t*5I$")~1V8A!InQPY_meillFkihfbn]Y/T_O IDA>l",6q@`JS[ah k mjh7b\UME=y5.7),%Z$"!A \ {  {!M"%#(####%z'+T.U27>EMU[(`dhk@mnpDpqqwq%pgooIon?m[jgb]WPJ B<5_0*'$#""! 1s' %+c3Y:CKSg[agTjmll+jh~d`bZcUO8HB<84:%'1B;6EOGW^:ejiGlBjiod_XQJ#B\:2,(?&"#"]! O[- 3!)"#####%('*A,04:A]HPOV\{`ehlmopnq[q_q*pboo nmlifag\UOI7BB;4/*v'J$#"! CY[|"1'-5u=E%MUC\b"gjlkkdhfa\hUOEHA:33/:*C"+5@JSZbg_kgk$jfb\VGNG3?7R0+($#F!f z!"9#)##$$$&;(*-1i6QW\aei\kmo p?ppp&onnm9khgd_UZ SN G@:[3.)&$u#"J!D ?'h $)/7?4G[OW^ch|jl9jjhgdf^lXPRIAr91s*B%{ k&b0#:DNWV?^diFj^jgeI`9ZSLE?=$5/h+6'Z%("!q  "8###$$6$%t&(\+0.*38=>EL*R4W\\a1ejhHklnFnolo.onmhk{i\eva?[VaPpJDD=71v,(k&$-#]! /h#'->3E:BkJ|RYY_dhj*jhhd`XQIA9`0(!V  *>4W>HQZ``g)ik`i_gc_;XRTJC;]3.k)&#![YS !"#P###$o$%&V(f*/239?F3LnRGXG]Nbe{hjmmnnnrmJlDigb^XMRMG@:L4.+'%$-#!! ZO!H%y* 06>EMU[aewi iig"ear[SjKB:71P' {' J$l-8CBLU$\8cgjjifc$]WPIA: 3.*h&s#!wJ(x3 y!"#$#U#I##$E$$&n(c,@0-5~:@FM(S~Y^TbBf8hkElLmAllk ifcf^YSNTHB9<4*/A+(5&#"!L % "K#'+17]>>ELT=ZG`Ydgh'gdb8]nXvPG=55,#T$fSj <%./b:7D?MCV^@eoikklig&b]VyOG?93.)&" m -!:"""##6#[#5"""?"#q%'+/4?8>[DNJQ4V\_bd"e1d,c=`j]hXTnNI;Cn>9[4]0%,)*&2$M"! / *!"7$'/+0H6}GQTYfafjkm!kjmfab2\7VOG@M9}40.+&#!  !"###B#{####3""#U% &),1"5):S?FLnR/W[_C`a`_w\(XSoNeHB=,8N4r0R,)'S$#*!![   !#%x(,16D5IO}SXgZ+[jYXTOJ(Dj>{8u3/-]*U(%$y#$""3"!!- !"$&*8-2A6O$E<$2/( y {?y~- T!+6@J[T\d$hlmroMnmjfa]WPIRBCMHyMRVhX Y VUPL9FU@h:40Q,*'%$D#o""D!!!_!a!#$'*.27i41*!D )Wk9 CA%01:kDMU^dikfmn8nlie}b!]X*QuJPD>;8<53L21100000000011y2(234M5@678;|>_BjFJOSKWXLXVT?OKaE?:c40-i+v)'~&)%$$$0$#$H%';)_,0549n>GC@@RBFI~MKQNTWXXVSSOK E@];51.-E+k*])^((5''''(),[/26;?DJPBV[`ncUfhjigb]VZNvDX9/0%E ?KMwy10 k"K+5>GRPzXe`.ehj\lmntliebK]Y,SNJFDB=@??h?I?l?)>>? ?q???@ @AABkC#CDEGJIBLNQUXXZ[M[2XV$RN I3DK?z:64&2100/i..X.-../1 36:>yBFKzQ,W \`ucehiigc]X]P F<91(4:I I3up l 3$ -6?HUP]Y@_ebgjl!n_nmj>fb^ZVRNL7IHGSFFFFFFFG[GHH+HFHHIJ0JKuL5M NPRITzVY[^&^]^[YU1QVLH2C?-< 9877&6a55!445]568k;@>%AEIN8S7X]bdgiKk!jPhd.`3)!Q !vmE"Gx;4 J%.7?sGOW^bfBhk%ln!lifb` ]Z VSQWPNNN"N!NNTNzNONOP=P{PPPQmRRS;STUW+XZ\z^`kbb(a_z]+YV.R%NJFCbAQ@?>>=<<<=6=>@fCEIBLPUFY^xbe;gij.j[gd_,ZS~K@@5+"CU R0ki UWj &&\/L7>dFdNiW ]behfjmnxmjhQexcBa ^~[YXVVVVVV1VaVW[WXfXXY,YGY~YZkZ[\?]A^4_a`b cdf"eeGc`]ZWHSPM$JHHG#FEE6DDDDDEFcGJMVPTgXA\_cehoikijahtd`8ZU&LB7k,# ,"vNIxx fp&.Y5UWJY\^`bdJeghihyfau]DXSLD+9|.%]Z \Vy*\HWS"~[f y$<*1R7>G]O[V$Zp^Hadgjkl kjjjEii hKgghIhehfhHhWhi$iniij j/j=jnjGiihh.gg fffgNhhhhhOggedcb`_/^]6\[ZYYjYTZZ[]Q_`bdcdOeeggfuc+_%YUPjJB9^/%D J:UY6`h lKl2 v{!(.#4";~CKRWWlZ]a0e+h]kkl^kk}k%jjkk~klkkkkkkkkjk:kk3jj;i-higff efeJe9efgh}i iiiii,hmgfedccGbaa0``aZabxcT5,$,u Q!RMdey3)T?- ,"J&,+2:zB GLtOkRV[4_Mbd$eJeN7?/Y'@ { % 0NwUn@ )7{) ] aeI#)/6*;?BFI$LORT?U6U)UyUrURTTTvTTTT'S:QxOMKIFCA9><;:::;=@C|F{IqLdODR UWY[\j\]]t]O\BZYWW"VV`VFUUTBRpODKH(E A>a9A2+7#5q m\Uh3@kj0n{oTX. jr#)o/58;>@CEGI{IJlJCIIMHHGGHGG&EDnB@>bA{DyGkJM]OQ&RcRSRR@QOMLLKKKKKJ:HBEB@^=;8;47.') ?f>r! ~u0[`\JDV1x:o0p@5 B "p(<-`14B68:1<=>????->r=<<}<:864s1-k(`"D  s NSD\oF|iyOuUOKfo tn]?ni b &f!z&*V-.0/0124 4544M321130U/Z-,*)J'e%D"  #:N& #%(i+1-036]89;;<<=<<;B:98A7w6v5>321O0c/ -*'I"L,W w8=}#K3gb~^\T\k|)p%H * . V e"$"%&Q&'r(5()*) )((X'&%$#!g{Z::h{'NE!$'*],.W/0112D10/P.,+*)h(''4&$"7,  FciK=b|v\dU^^dgsdA r} ] R{38GL] g ! , 6   spB<"a$%&'((.'T&1$"! n.[RL/ 0;9m zN@bBKOakq\B [=  1|M>? L u beyQ%l  8`)4pY |05i5'y{'oO7En2;B\klR6 cr1gky   - H v . t | 0 xKGv3DY ] : A*T= FLDn p 2wn1[h(}c*|C-4Yw7MSXTQGD*/X[%y5fCp{;^UafR!*c48 w !  L?+:Ah~Tzg&f0$1Tfhg9W^TA<?K?  OtvH;*&UW` "qcLcdVT } \Qq,`ljmRaB`E c=99GOON9LSH<276,"(6EcV,2d/LpucDA<* &JjO b .@N[g`@s8;!"Z~XR{?E$ !qPF;=HK?,IUN7% 13 %9H*0\rYgeCwI\GE3rQBEGMMOO^w(675tn5&XkVMp++sbJ@IJ27QaT0%:1%66''4U]==JI))mPDFKI;!&_sU2=&GqyzhUQT{ #)oTG8">agH!64,;:I3,IdT9, *\ |h]`hmfWK@2+,1,/?Xq{pbhzg+)phUPLYb _<$E[]C3(..5FHJIWS/BI2L,{mb`fiaO?2% "&  -7GYo{= /Z{ZNL=DZP$ "8XW(634D*JuwZI?BC0#)<OM+:AbJ xm_XZ[TF7//7@A7,&.7PtmC'apd\\[DDb  `3% 7B+ (5&AG/ '_kK>8'/M]P7$6YS[2&{n[QMNKC61;IPG2! 4JgiO8=o~pd`Zk  ^:! 7'!"7<!HU5;rd;'@W`YOLEj>=C- n\RMNOMB=GRQB((JlkH?D89Lhurp|!-hC-7  # /A- 5SSB7@bY3)1.1:HQ[nzmr&GG:|l`\VV\`WLKH>1 "8[x~_EDOEF[|}(wL) .    + ,-$7Vih\YbzoOFHDA<=9Hp1O[A#}omqmkqqgTD8+'&4Ldstwo`TSXJMh sokS2  0+  $'+*%!AdyvgXcmaNFFBAEH;=V{CVC)z~vcJ4+'2=M\eihjg`WRRMYwiK:*!   13/ $*+$&+0/!(EhzqXPMFB>>:=LUG=C` ,<.u\F66:GRY]]`chhe]QNSibH<*"%" >-q,)ky+e];)?/i!$2%$"G [  e &     * n } G V I ]A^ nDg99L'wD  1g*qm4f xDxEJI  !"#$$o$ $%%"  k w  7        D v Q I \ Y [ z  M  ng':h'Jpx4 HX#:Ta`A)7Uah</q W!!"$%&g&X%g% $+#K!k 0 d ( { d X x    . ? \ n  ' ,    - I   * |  f qF8=%v|PnRjo,]5  `~KV}-/ li !!! 0] > a e (  ; |  * N  b =  $ / (  f,vE|lpz#)-0Q)d1D,b*s&6^   2 e S E b L .   ! ? d  0 ? Y ] T . p e Y 3 !  !  * b  \ 8 oznB,IF=(Yq&k=y~eXL/okWDK.# TBS!< + > : &      . @ G E I N V T M 1   H k ~ j G   $ % = p   +   Z'.{w9l=4r0x`bnIm-L*srxs^ \   pcV=<0.0:BQax O d 6  6 c y } A   IenC#Kv']Du<zbppz[P$n,-}    ! ;  i B,GSQ 7^&:rV6)  X  = l F p " f r|*p&2s}ba4RU=P8NI~OY  :  = bx8g-26 rQh??ngv2Z}O5aa 6 H S [ } z z  . ` . c0:5q,.}`8#U~P7 ] s|W5 zR%   CXn,0P`ewj:zh`  = - s . } e  I ,c&#  +  "  C C yW\ o 3VwGpqEX2X${,-2D&$  2 L |  ` z Y f 9  D n 2 2 Z 2 ( E E @ D = Q  ^ | M ^ yU&_$^UwO fRe=Mv56gicVH-A]>Zb\ez5m94.eK [ I A y n ^ Y b 1   3foxtTduh NPYKi!x~6x!fbM]f ) T E  (  Z e q ` B 9 R _ :   B i T y:)Q]nNHE =G2~e$yP+ gLk z}fa`P3 ;de&MQNyL5^B  m   f cQc(zfUSn4)Q+G{eYV5 mS4 s 4M J [ 2pv lRjQV`Q|6MD){N_ndUw %"3$v?)E5@e n;hJiV?q0G:b?I?TT6n@o wlQ)5>?^ZGM?pRtDNHo'c8\#~c q ^ R M&}!Sy M VHI[Id^tZ_'z `plH9dh'I1@@PZ<D  e qwpy`Kct:r*9k6 b s */U;w_qiTqC8U/d6EYWU|3NDJ9+"kzS DO# A > Cp(?\,?!t9Pg!""#$%,%$#"R !5xAh q Ff('6ad6$BFPqn=)<`Ttf8DAup};=6j ] h 6q= !!g!K s V p!*"#$$%x%%%&&{&'`'(r()*+,-./u050A0./-+)&$!((k0)| RKQ0\k2M lb28v  x5 _Zs +y$ !$n&([)*+++>+S+C+'+a+,-./A//////0 0g012V335!6`7v8L9+9:S:L:097530.C+q(&+#"L LD!4B ~ THMvPEo9OdDnz1u~j?G9L>Z M mW" $'~*u-}/12445X56!6v67D789L9:::99^9:9c9:o;.<= >%?Z@B C+CDDE)DDCTA?=;8j53i1r/.S,*(&R$Q"!x 17 i  L9}D+8D MM3gc}8t*b}H { >C7# &Z),,8/U258:<\=Q>x???@h@AAsABJBC{D DDDDD}DDEFoGnHIKLiMO_PQdRR#RBQPOmMK9HEB?=E;v: 976a4k2/-+)'%#!{^_}t W +-)A KynV\ c ~!G%)-047:>RACEFGHIJ{JKK$KLKKL.LMNzOOOOOPpQORSTUKVZWYZk[\]3];]T\[ZRXVSPMOJAGeED(CrBA@6>2<69742p/-+z)'&$Y / J!v 91I~V2*&N{_Z(qXk b DB^"'u+034b88<?CKFIL8NPQRSTUUUUVVCVW,XY'ZZ[U[[[\+\]K]^_C_`bcEdke0effof!edc=a(_\ZY[VZSQONMLQJIMGECA,>u;8631t/+'#!4 ;:VH2&K%W| I"&4*9.317c;W?gCRGVJNHPSUWY6Z[]\j]']^ ^1^@^b^_0_`abcJcccccdd2dfdde efg}hShijij(jFjSii%gfdbs`][YX]VUDSRTQLPNLJKGYDBA->e;9793/*&\"i9-V ^5.ovNCBt F  B ~ ( J!%)f-8165:">BFJNSVAY([>]_:`abc cd[de,e^eefRfgmh#higiiiii?i2iNi[ilijiij5jkl"lilllmm3m#mlqkjiagf"dc4a`D^\[tZwYXWUiRPNMLJ_GE$B_?[;161c,k'#] y(S7=$6 (:^rrdM" $)%-048<@EHLP\TX\^`b1deRfnfgg gOghhjhiijjjkkFkkkk'jjLj4jljjjk=kllmSmmmqm llllllll8kjiihCgRfSdc]a``_T^J]+[{YWcTROxLIF-BG=J72.)$lh )Zp  " aR[ $'H+p/4$8;?CH@L>OS/VY]a0degYhfijyjjjjyjjkk]kl=lmlmmmmmmm;lkkk|klDlm mfmntoI@gCG~KOSVY]`_bce_ghijk}llm$mmmmmmmmmmmmn~o*ooooosooo~o*nnCnJnop:ppqqtrrorrqppCookonnnnnnHn*nn mmmll9kkk*jjrjDj*j1j0j,jhjiageb_[W|R LFn@:3,T%pZsb )/2<UrML%IGcFEGFFHJNPQU~Y\T_be?fh=ij[kmlJlmm.mYmnmmmmmmm_m-mmlmmnTo5opooooooornnlnoQp.pq8qJ7%/) "^ VTsVUPSPOO&OP^R&T5W!Y\_begiUjEkklilm7m#mBm"llVkkok'jjj:iiMihhi#ijklmemmmnIno onn`nopq{qqrr-rrsrr;qnpp,oongmm%lkkKjihgg?feeWdde=f0fghiklm'mnhn$mlJjge_a]XSMHA:3-R' ' 0`^\ZZYxYZN[]m_ad fhjklmmmmmmmmm&l2jiihyggf)e%dfcccd dfg[hijgk klmnoGoHo>op|qrnrs!sUsst0tLss qq po)nlkjxi;hfed}c3b?aa'``<_``b$ceEfhj`kmnoop=onljh d`\VQKE>713*$g^  UedcEb-aa(acabceKfh8@1*$4?:28 lgl;kkvkR:U&X\aeYiloqysXTeP[MHJBHJFqEcD(CBC$CEG`JLvORV[._dc/f,i/k}monpq[q|ppnmkiec`_[VKQKD=70$)!"Z1m mmmxmEm`mnnDnmmn"n,nmnnCnbnMmmrlNjh]ea^qZW%SOLJBHFEDD)C?BBCDFHKOSHW\afjHmps*uvx.xyy(yjyWycxwurGmidL_YTO1JGADB9@]?O>=y<==?mATD&FJ*MhQTUZ^0aeNhAkFmyopquqpoo\nl&igeybV]YOSNG@92,%`lmGmmnmKmn nsnnNnn%nXn?n n.nVnnnamlkieb?^YUQLHECAL?w>Q=,<;;;<=?AEHMRXf]c.h?lQpRsuwlxyayyz:zz y"xuHr)mBhEbB\PV!OJ.D@=<;A9S8X7656r7"9:=@DyGKPTY]Yae;:/8X7D6P655567[91; >BVGMS4YX_9dinvqu6w xyzBzIzzmzly`xGu\r3m gaZSLF@< 7532111$124X58y;:>B)FINhRW\aehhl`nqqqq(ppvon^mlkigc'_;YTdMF?823+lmGmmmnnno,o@o:odoooGoonnAlkigHc_[%VlQ@LFA=97Z43j10080///0]02y4+7;{AFM`TZa'fl2pPtDvxyz7z)zhz?zCyAx/uCr*lg4`XQvJ C`<730..6-y-i-%-.0&1f3b58<@CH!LQWR\afj***+,M.1W6*;*AHPTW^ek;psvwxxuxxxwwv9sqlf_$WOG@94/->+N+2*+ *++,,,~--/H1I47;?ELK=QX.]c!g5kn[p\pppSpEpoo_o~o~obnLmjh+du`[6l2/,*_)y(()K***+'++ **++(,.26=?CKKRZagmquAvwwvwtvvutrpAkfz_bXMPHA:50.,,,U,f,9,,, +++,-0C26f:J?ELRX^cohknop{p]pppp:pBpJpbonmk[hea] XS lmmmmlmnnopq4qqrqq#p"liWd _wYSLE?x9m40i-_*(-&d&%&l'a(x)-)j)))))))R*+\.28>FWMU]pd?joBsu{wvvviv ttqokf_Y;QJC <62/././---->,,3+v**]**,.615:p@FMT!Z`eimo?ppqyqqqqqrqqOonljgd_[lom3mamllm=mnp"pqbq*qpokf`[NTMF?9x3/, )&%.###$%'''(((Y()8)S)(b()U,H/]4:]AHPXw_fkps~uuv>uu_tRs^quol7gau[SLF?J:E5v3;1111140]/T-,f+6*4*)*+.K156-;iBHOeV+\Pbwg(kn9p\qr!rrrss$sss5r q.on;khebTlHllllXl7lmjnppqfqqlpmhc]VOG@h93d.!*'%#l"F`N%U]d(jsn7qnrJs,rrrurqpRmj<;:,:Z::z:852Z.,1)(''')*.28>ELSZ`fjnopRr2sstTttuvVv>u{u tUsrKpnllmm lll lVm$noppooclha[TL'D;4.)%#"!K ~ & !# $W%[&_'()*D*D)f(T'm&'>(+..4:XAIBQDYQ`:gk=npqpqpppomje;_YTXOKGCi@?t?m?f>>;x8p4G/,U)w(-&&%&'+>.4j9@GNVK] chm oqrt tttuvvvWv"uu|tsrpmcmlmNmll,lDm)nop p"nmhie]W4OaG.?740*&#y"C }t !"$W%'(*k+,T,~+*)))1):+V-28 ?/FpN]VY]fdXhlno)nonnn`n+l=id_ZURNmKHzFsE7DDcCA>K:50,s('&%%n$%j&(+05;BJ QY#`[fknqrt%tttuvMvuv&vuuuitsarommmSmlllmnoojomk)fa`YRJBq:2-^'$v!!2 &?'o!"2#%.')3+7--.f--),/+Q**-+",m05wAP=272,(G&$A$#\#$#&F(,1G7>EMU]Hcjn*qrtuu)tuv v#uuuuuuctsnmmGllkl m!nlo=nmk5hcd]V2NG>7k0+&$&"5! *j'k !# $&),(.01D1510X//:-..p26=DfKSLZa ejDkll\l;kk_jjbhfc[_[eWiTRQPPONMKBHkC?39b3-X(%&#"""f"$s&P* -3:[BKJERcZWaDhbm?q_s u!uuupuuuueutu u5tt/snmmelll l$mJno+n'mif9`gZ[RKC;4.Q*(%#""N!e 4  !X"$K'*-K0\2j4!45"4442P11s48?ELSY`_e iok.lPkk}jjViigeb_\%XVULUYU.UTSROL!FA{;42-'$"! !"$''*06>FOiW_fllq5s`uv3vzuuuu~uttPtstt5ssnn millll"mJn^nmlh.c]WVOH@92,)A%$\#F# "B!! !Y!"$(+/x3158W9:;E;:987:>DJ:PEV1[a eijkkGk jPihh+fdbT_](ZEXWWXX.X-VU#QMH BA;s4.Q($T!!4   !T"%|(H-}3I;ICeLT|\?d^jpruv?vv`v5uutttBssss'rrnmm=lldkkmnnRljfOaoZT LE=50*'%*$V##q""N!!!+!(!,!!#%)-2E6:;=S?,ARB(BA@>>A$DVIvN[SXw\aOdh7ijj9iihbgfeca_][wZY>YZZCZWXVRWN7HqBa;4.`'$!G Y "%.)/[7;?=HPXa9hn:qtuvvv]uujtt s[s!sr]qqnmllCkkNktlmimzkOidY_X QRIB&:31-(&w$j##o#N"""!!b!i!^""n$t'+x05Z:x>B~DGI&JI,GFF[HKWOSW[_mcehijniiUhgg fse]ca`T^][ZZZZfZ*XU`PLFF@:73-'$ !O 9n!J"' +3u;(CLfT]fdkosuvvbvFuu^tssrrWqqpnmlkk}jjl-llj'gbj\UNGd?8$0+'%H###%# """6!!!!"G"%'(- 2<8=BGJ6MOPP3NMMORUY3\_behj/jjiiPhhg!fDe!cbiaj`d^]\\[ZZ8WTZO1J[D>82-4'#! XIz !$(/7H@HfPYainr~tMvv5v4uuTtsrqqpponmlkkjtjklMli>fU`[/SM+E=6U/*%$]""""~"i"A!!!!!"*"%Y(~-3t9?E=JNNR9T~V>VU9TsTVVXS[^ia cehjllljjj$ihg{f6edcbaF_^]{\oZYTV@RpMGBK<61[,'$.! 0; 0 #&-4=?EiMV^fl-q!sRuuuu/ut}sUr qGpoo?onmslkjjAjmklkhez_YRKDP<#4-L($#"c"q")"" !!R !!g!3!"_%-(.;4E;%AGM_QVYg[z[s[Z|Z\^9`cdfhk9mnNnmlxlkkGj^igfeeeca`3^]1ZXUKQ*KF@;*50,w'$"n!| Y "%+2e:BK`T\?djpru)uuttt=rqponnennm l@k;jjj7kTkk hd^YQJC:3!+'g#"!!!!!!S R e !I!$(S.74l;B9HNTMY\__s_~_O_a,ce:fgi;jlnoonn mmWmldkWjihLh.g|ecca_]XZ^WSOID??940,x(&#"!! !F95E1.:+)N'%$##F"n!!!!`"#(.6*=FFNVX^Xdjnqqqq=qqpoonnmmkk1jyihhQh]i#hgdZ`ZTM,E> 5.&"xyv U !{"s%)A/$4;BIQ!W^b[f@h9jkl{mnooSnnknnI@PX_1eikl7l]klmll%lymmOmvmi6i 6.'#m 7}4N6CJ B!"$T'6*.274.$+*/('&%% $P#g"!!x! . !t%g*2:AJQY_evhjjj4ii_ij60,+)(x';&d%$$_#"!!e!%  !%+3:BJRZS_ehiihghhhcF6NVW]bgi6ihg-ff:f#eetefvfggJ@NTY^Xbeirkglk0hc^HW OG@80+&m$"{!!l!!!!!N !!s!!"!"#4$B%l'H)+-16)70K+( &%[$##"r"!!? i&ah /#-)b/8?GyOW_chiih+geff\eeYee e]eCef[BhGNT~Zr_dhkmsl`je`YRJB;2,'%C""D!!!!!!!F!!.!u!!!">"#$k%'5)]+%.R17~=E'KQX]dhmoqmqEqqPppKonmmxmjmmmXmjgb[]HVOG@81,('O%$#""M!!! 2t 5#*a129hA-I(QY `~eHijj_hgg6f\eedkcbb}aaa:b@GO-V4\ag7jAmgm$l9gc\UM$E/=Z4.M(%""!W!!!!!!p!8!2!I!8!>!I!"7"#w$M%S'(h*-28m?F7LS:Y`)ejmop2pppp/onnmmhmnmm ljLgb]VOHN@:3-)'%$#c""!!F z.gS &$'+\2:BJSYZbfjk7jhh gHed]ca`4^]t\\2994AI1QX^dhullm li5e_X'OG?700)&"! !T!a!7! !?!"#A#$%&) */3:@GmN%T[agG@OBW^^(ei!l^l:kihg5da^.ZW+SjOMKx"*49=GPX`djglzmkti cU]0UMZE<4-C(`$>" S +  `Zp @ !"#$$8$t$&Q'*$,16=DLSZ4`ei!kNmnoouooLonnSmm~lki:fa{[TNHG@93X.I)&$u#Y"G! f^'&$)19A;I{QdYC_f2illxlj1ifc ^ZVWQALIGDA}]$.|80B+LUb]ci#kml4jreO_XPHU?800>*%#! CP !"#$/$V$Q$_%5&.(t*.297@BH.OV`] bfimnooooognn5mumkjh9eG`"ZlSM~G%@I93_.s)&$?#;"*!s RSj; %+3;CKsS[[ag82-)7&\$#;"!,l5r"(^.P6=eEcMUj\bIhjmllbj-gci^+WQKPC<6y2-9$X-7BLxU\ch4l&lMl*heM_MXQIB92,(%I#! D *. !"##$a$p$<$L$%'),17a>FM:TY_dhjmmnQnHnEmlkjhfb_YTLN=HB<61J,(_%## ! f3!E$*084?GPW^chk[ml0l ixfo`ZoRLD<&4J-(,#Iz()2<{FP9W_dikzlmigb]ZVOTG?8a1A,Z(%#! :7+7sm !"#r#$ $;$0$($$%k'*.~3{:6@GNTZ_d}gjFkQl{lllmkjFhfc*^ZULOIDf>944.*'$#L"!T QzUmVm #'.:4<;COKWSLZ `di~k9lOjj9fb[TLcD x!b"o#=########%'D+-/q5~;BMHOuU[`dgikIklckjhfc_[V\bfjJkkoichGd0^VNE=+4:*"` o%/]9DMaV\d/hlkkhea_Z)S)L DC<5/<+'$" ]/{  Q !h"C####u#j#e#L#b#$$%Y(,S16=$CmJ PV\`dg+i}j6jj hfH5," b ,g(3=GPX3`fSk>lNm@jhd,_WXRMJBZ:3/A*'#!WU !-!"S# #u##g#%"""")"#&e)t.328>SDKRX`]7adg[h-hgfMc4`J\WRmM GMA<462c-*W'%%>#m"^! I[98!"&A*,/5b<&C2JR:X^bgijigdPaZRI @6-)$ ) a= z",|6AfJR[bhkhmclk#gc]X8Q=IA:q4/,'$!  P !"i"#M####R""b"9!"S"%2'+/5&:"@ FkMSX]ad!ded*b_[W+R~MGAjGQYbhlpm%njlk@gc]KWPI$A;i6c1O-\)%&c$#0"!!"#t$$$J$$%$5$V$"#""5"5"s#%#'*~.27=9CIOUYc\]^n\ZVR-L[F@;6G1.8*(&@$"! (  !$!&*/ 4:O@GNU[A``cgiZjhf\aI] VUND;1(ds, kH I"X-M7B8LT^ek#lnnWmk gbz]WQ#IB<62.[+((&W$$#R#$ $$$$w$\$$$O##J#*#P$Q%+' ) ,L/{48>DJPU(XYZYVR=MnG[AP;51-~*()&n$#h" !o x e 7 !"$4'X*/4:@GN95K2.,H*!) ''|'r''''q'0'2']'u's':';'p(9(*N+..04I8Z=CHNzRVWXVTeOKE9?k940,*(G&% #""k"!!!" #5$a&(,06X;AGMTZ` ctgGiBGM8QHTUVTRfMIGC>\9%40_,*(&%g$`#S""K"O"*"#%'*.27n=BjHGNT[@`Kdg-jklUig a\xTLA7-$ C J c$/9CBFJOURUVW6U:RNJE@<4730.i,*|('&M%$% %1&( *-;049>D INNU Z`/cgimkkjfcK])VMDG9/'Q( ,N mi2(2q?DACbFJ MQdT;VW:WUS_OLGC?1:74e2I06.,+* )B()){+F-30\3p7;@EJP+U[`dgkjkm kGhc_XQF?3*!i 7u|m Q`N#,5g=FYNsWH]c0eik:nnnOkihe@b^ZVShPNM-KJJ IIIkI5I?IrIJJIIIJtK KLMNROQ.SkUXZ\c]]]m[Z W+ThQ MIFsCA.?y=<8:d87J667779<&?pBFJ{NSXv]ha|e)gj7kblkii)d_`_ZBSJ@u5x+#D0 SEA~ 1s#I? V,$,5G>3>?ADG8J5MQuUZ+^dbHdgvhjk"jgdL^ZqSKA7-$2# :th :M( $$s,4<;CFKSZ*_jbfJil|mmkjgfd@b_]\ ZYYXX{XyXlXXY;YYZYYYZZ[s\V]]_`ac:defReedRb`_\ZWUWSQOOM}KIHYFF+EFzGcIKNQUvY8]`cfbgj jljh$cs_iYTLC*8$-%( @,sg:L"y VE$o+29!@HPvWl[_bfilPlQkihgfeUcb`` _z_E^^^^_'__`B`{`|`e`M`B``a{abc7ddefghggfedzcbF`^\ZXVTS1QTONMWLMNPRUXj[_b df6ghkij iyf(b;\XRLlCM9.%M| @0E.e9]& l "r")/5=HEwMTY];aHdiklldl/ktjj>iHh:g>ffJf4eeeeefTfg&g~ggg}gTg9gAgWgQgJgLgdgkgh6hi8iWiii.hhh}hggedobt`^\ZXW&UXTT>UIVaXnZn\_~adgfghjiijche`\gWRsKCg9.%/ ][SdJYK 2c[ $!C',29AIPU;Y6\a/e0hijjjjj_iiaihi*i6ihhhi2iiiiiiHhhzhgff5exddcdcdePefug.ghiNjjLjPiuhfeZca`4^^\[5ZZr[o\f^_abc/defjgg5gg]fVb^YTOoIA8.%tI\ G4|QbW8g|] &{BS u #(.5=ELQUNY]bezhyijjjj_j/jIjkFklkkk[k9k,kjj/ihhOyFeR 3IwO D %*1l9HAGLP'SW[`Qc2eCeeeeffgthRhhhh?gg`fedceb`_^]\Z|XXW[WWXY[P]h_bjdff1gDh\hiTi0hh1gfee%ddVd0d6d&dd ccccccNaf_[)WRaNyID=[4+#t (T(tH\^{64K$tn s Dsu!&,4e<BbGKQNR{W[D^`aaaabbcdSdddd6cba`_n]r[^YWUTQONML'LfLMNQ SWZ'\_uafcndfngBgh h7ggff]eednccbb=aaha_]ZVcRNSJ1F]@:1)&!yq xhFLy6?YQ$Z@= fHwa"([/r6=|AETGKOTVXYY>YY1YZ&ZZ[[s[U[!YXVSTQOCLJHEbC@?>??.@sAD&FJNQcTW7Z\P^`a~bbbbxa`_^]\\0[[S[ ZY VxS?O K,G|D@<{5.`&je( nz<uSn=+BR }w#G*;17<#>ADHKNpOPlPWPPPPPP~PQ Q(P[OCM8K9HFWC@> :8S54333458;?CdG1JMQ2SVXZeZ[[i[ZYXW VJUUTTS>QLOKHUDA>;o60)"{Oi hbERc,:in#c~G9E@ S_Pn%^+15%89<>ACnDE4EEEE>DD9D>DrDD,CnA@A><9s630.,+*)J)6)*+<-048u+%F   R^_ < bWJDY4uD^mu D 2/9`%$).0Z24 57i89:;0;;8:999<98Z754i2Z0c.+(%#2 qnOm #5&)-1447:=O?ACCuCCCCPBBBFAAb@s?x=;97G53K0.m*J%lO&U & m3(Oi)^SxNn[TSsvz]r5/s; I z#u&)\*V+m,&-0.A/a0-0000&/..*-+*P(&$" h`! 53Db`# &H)[,.19356{7'78,8~888M87@6j531/.X-+*8'}$Vm s  2~!;*g`a_Wbs~)QqddQ/i i FM8 `!!"n"#$l%"%v%%k%>$#"!@]nQcZ)  T l [ 1 % N#%')+p,u--.N.(.-s,+*n) '&j%P$1#9!{x(\By z IiK 5UtZcS\\eitc@ xeb^[Q o J 0Z4d*p7f+ * : G~" 6R!"$$J$y##"! mN_~Wo6 v j &,}BH3a~N=]>JTjv{cJ:2 $e Tn`cLJE[ |  N{% T=Ap: -E\{K( 7k&wI6 `l'WH3L=+xs xS8Fn-=Lm~~_DnZnG|y6x* # '  # *pO.^ I 0 ^,: 0 . M)]_9Q,\#I.6^}6NXb^YLM5Ej{RWw(Jp#p<!8gR?cOyP4gTz`m5&6[kjh;W\TB9:KD ,"*bW &CZ\@6%]NnmoBjF)o mCZ0hb}nZn@\?gB;=KOLL :LXP@045(/35H\{b@&m<Uig\OW\O2 $Sz?pSJQkj4R>}EH5!?a{^Y@E$ vSF:=HLC1UdY;&**'"CQ=+Hde>(j}T Ev)>6=2i^T:"+#/a-6O @nye]Vw)& v_E=IO:?ZhX4$5- /$ >G@=>OL(<H"#U(.%~{bWK, .^{h@9VF"e_LRY #mRG:%?bjP*"624K%J_I(,?UG $E: -[$y_YXG>JTE45CDPtdKBEYsv`1.w_I@Tc  `=*JafL!5! <@% %LZQG>KL-JT=E-ifeRBCG:06CBDV_M;=Spl;6dlTF7E`  V(  -@^\)2+EU8 *\|oK=>FF* =UU52z5VEojfT@51+-8@808C@D_yz`;3isf[UCLm  f9 (%"#;E+ %/#,PQ8<i|q`JB9 2Vi\>&4XFQ0)w[PND=7:BKQK8-5JQZsy]A)Dr{eYVp  ^9" ;,""  4B( /P\C'(Fo`< -Mel`SOKq36>+lP@?>CGMY^[M72Fdtv~tZ=.0/<Ofstfs*lB'=#   +E6 ?[_QCD[w{[6%))3CRZ_lukr BF?xeUQSXXSQK?5(/Kl{y{nT>:DDOb~y|"wM' 3!  ) -3.#'@bumXNVpqTE@<>?C?Jk1QbK*zqpneS>."#%6TltlkfXNOVR[s slgP1  /' '/1-'(Ovw`PZhbQD=9>IPGF[{AYI-}zsfR8)%2>Ofqoc_\RKHNQa{lL6"  +*%  (  $&+064$!8\{oRIIGC:43>S`UIOi';2{qeWD<?MWamoi^[YSMCDPj_F:%(.("E01#anR 04f7 G #%'R%"YYr$ n  k (     8 | z D O = kB^!oGl53I#r?  2k0wc~ I j;A{S \"/#%%%s%&&e&3# 3( ) @       5 \ G > O S e  W  v$c&:a I hw1 AT";VcbE7&g8!= jOVPS@!X#n% &'"' &1%%-$-! M t 8 s Y R x   & 7 Q s b      2 K  0  f pB24uvGfMgr'bC L^$Y *I! ""0!! ^K^fB d o  a (  C  < a c 4   0 -  a& uAqbm) +2H;T#j:'0y:.`> 7 . 1 c W D \ J /    A d ! D Y n i b : j [ s g @ &  $  , d  ] 3 }ozk <&CB@0\o*q/rzmg\UyU~5zYUI #H - L  ?       0 G ] g i e p j S * 7 ] q d P 5    / 0 F t   *   Q |,wwCy?7y+xqW{^yP<{]O W V   gduV;5.45BYr|} E u ^ =   ; c w y < Ibi?&N|+cFv@l|GbT2fy`n w f w v X 9  v O~ EPJ!">c"1ia=' !`  B q > o  f sr"j!;whvae >W6.T` ] ~ $  C _ 5774jT~ucG A^~ \e!Mw_Bjf  6 G W b { v  2 _ , b+99v/2ddzh w  f <0$_}5s k_n~V)6J]r?df{q :{qed ; + q * { d  T 5h' v )   b  >=H > Z 1X[5<-a y_=  k\Z%#)+5HZp~ mf(&-<!  , J x  a s T e 5  D p 6 : \ 9 - F H I T O [  l  : d 9 7P5 L3e!6~]h+;i +`y^8L^L5Lt%Mdfmx%k51$XA w X A : o d [ ^ l , " #   , s#@tqJ_^gaMR)`%-n(n"bOYb ' M =  #  W _ o d J C \ G '  > n [ DCG*Hc9> 6C~0bQUa.okLf%yV@$Ije`9VMT{I1WA s  m lz _L}q0#*~(2[%=o E]WnufY"s5mU2~p -}L G ~ \ 7u{},[,fbaGh( qbWrwu.% }G0'Z4r(8>F>*kv(ec}ho;r3G=Z:B6KS4k6dplY4 '71 miPn;OMf9dFBGDDV!8|x]-s x C t G O < K 30 N+iTA4eYq\`$| _p{S<ha7O= MV ! k ) r 3 #woQQpIR/g## a % J eA#fn|nUsE:O8m<Ojd[(KAbL@9x~d)QU  _ X;XW 'ZYW5l=ckq  ! Mu#O7f   < K(2$X^3 78Lkl> 8ElMyuP_'"]wL% l ` ^-> 5 ! !:!""#$=$%~%%%%&&j&'e'~'t'~'(|)F)*f*+'+,B,u++6)( %#N   e;Q0 o 5jh4Re0F_W.7eJ+t$  H ?"$' (b)***+A+,2,-./Q/0"0?0K0 //b/i/0s01%1A12234o45)5h66b655P32/-_*(r&;$!"@ M!X# : y;aV~X=tk<Pa@zdtl|LG@)Jd 6 X L"%-&)-+.?0l2-334}556h7>889:;::::b99P99 9:l;$;;<=m>o?c@:@@@AIAtAk@?>P "gi"&`),/q14^69Z;8<=>?F?@A[B9CCDE-EEEE{EMDDDnDEpFQGCGHINJWKLMN@N|N`NNNQM9L4JEH E:Bo?=;:t91754 1/.,+*R(&$!dlOX]=  j!*& E *[xWGJp ctz %Z)-1=47:=s@B$D.EG H I/J JKPLLMN0NO,OOP/P_P{PfP'P&PfQ(RRST8TUWX/Y[ZZZZGZZyZ"XWUSPMJHEFDCBAp@>k<:8453V1.,}*()%u"X. 9:%7jL 8::__qH!4H + 4 !&+048-)`%!`B & ^o=+/Y o ^ fT}#(1-H27iCjGKOSWZ\]_c`abcd]eDCISMQU)Yc]`ybscdefgngh:hiijjkRl$m4n!noo nnn6mllFkkkklOlm mnnno>oeoUo)ooHoopop_onmlkjihgf`edc.bLa:_^z\ZXURPMIJGlC>9e3/E*% D&  w&' *$&'k&$"  j!$'+0(48]Z4WSOJ Db>{9C3-'r  !LZ <B>=:8#6=44}46*7;>C>G_KvOSW[_adBf{hjl~mxnWnop#pwpZp5oooAnnnmnnoVopApOpqpnp~p:oo nxnano,opq/qr~sssssrXqq5qq qQquqq~q\qAqpppzp;pppoosnmlakwjii'hh gjf!dbl`2\YUTmOI C=81*# 1 +PI G{DBQ@d>>>@UB EI4M|QHU Y\`caeg4i:jlmnfnoojop%pBppooyonzmmgmCmTmno-oopp!pNp1oomoo oUp pqkrrsspsss,rvqqpppppppppppdooo"nnn5mmpllkNjjXiiiiiiGhg^eb`\WRMXGB'< 5{.(="Ig] p_FuSQO L\JyHI HJLP+SWZ^mbNehjIkl{moop,p`pVpkpsp{pkpZp/pooHnmm/lxlPlsm)mnnooFolooocnnno@p=q qrrsmsss:rqppQooopp(pApWpXprpDoo:nmmallbkk=jjwjQj2jGjLjjkskllbkjhfwc@_[WQLpFv@d93,I%= ? [YW[TSYRR)R&SUX[^adh%jlmn]nop_ppppZp oonn-mmclkjii hFh6hpiNj5k kklAlmYmmmmnnp!qEr+rsGssss7?0* #S?Q 9cb_]\[[[]2_acfLhk#mo0pcpqq%qhqxqlqqpjovn6m)lVkk j!hgkfdcbccGd4ef%fghijklmmn+o2pqrst tttss1qpoIn=mll]kjj(iPhgfzecb~aaf``k_` `acdegwijklmnenn,m_kj1gena]cX5SNhHB;C4;-R& 8~ Idh.feedcFbbbce-ghjZlKnopmq:qsqqqbqppp+nm2k/ihhgKfdgb`_ ]\[[\\]^`&ac]eJgGi jl&m^noq1rstuuuuu9tkrqmonElk~jh~fe9cb`^\[4ZYCYXXXY$Y[]U_ad fohjkmGnnnnmljiSfob^uZVQWKaE >7i0)#k \l2k|jii>hhhijklmoPpkq0qr#r`rvrqq(qp]oembjhpf~dca^\Z\XWMVUUUIUVX$Y[^Oa cf}ik-m+npkqsMtkuyvvvvvPLUH,DA?>=<;;6;;=.>N@;AE HMfRJW]bgkXoruvxfxyiy]yfxxw9uspkff`[U-O7IDA=e;?998966667[9a;a>sAEIN"RW\`QdhhlnpqsrrqponlkjEh1daP\WQK;C<5.("SkklkkklIlllmZmnno'oop,o{n~l}jge`\WRMHDq@n=:8655445z6 7*8)9;>BLGgLRXj^1chmqptvxy3yyyyxwvv0s\pYkfe`YSyLF@ 9O52u0:-,+y+N+!+w+,3,-S./036;@GN*U[b"hmruoxxyuxxwwv]uIrpkf`FYR6JD.=8\3C0=-,+++,-,-.0f148D940-j+,('&]&q&'(,()()*6*+.+,-/e3N7=D0KS9u41.n-++++++++, -o/B25:j>DmJQXg^Rcgl;npq0q5pppp=ooop8ooAmakhfb/]Y[TmLn[nnJmmmnro%opmppqq}pmj.d_Y*RKD>73.+(&%!$k#${%M&\&']'(.()j)))*+.28>FRMU]dkp^tvWwwvutsrYp_n`kgb\UN`GD@L:52/<-,T,6++++G***U+,.1>5N98>DKS Y_duislopqq4qqqqJq:q}r*rXqpoimyk}he3a]m-nn2mmlm1mnorppMp>qpoMk]g$a[T0ME>f8&2P.X*x(*%$#Z## #$%&J&&';'((((I((+m.R39u@H:P(X _glqt2v"uuut4rqpnkiN85t1/.z.'--/,+**U)**,>.1w49?xFeMQTZ`&eimoq>qwr-rrrrrstsrqpOnlig(dQm*mmm`lldlm>n0oCop opbowmhc\V>NG?82:,)&s$#"O!!"7#&$#$%r%%&q'C'('&&o&'*.4';WBoJjRzZ^bphnqt$tNtss:r97B543220 -+Z)((\'(q(+- 15;BHOVg\bhkoprrssstuuvueu tisrq]on]mxmmm5lll,lmnoQo=n"mkgau[XSKC;5.8)%#"! { j! !"#$%~&-&'((((>'V&i%K%&*8-39AsIQ?Y`gkooppepUoooInmlie`[VQM'H9C?C<4987,5 2Y/++)''&''(p)-H16ELTd[ybgloqr=sLssQsstvtttt}tttNssmmmAllQkklBm[nmml'jfaZ.SdKC;4A.d(%("x!  H !"$%7&()K*p*+^+ *|)((\()+0N5U;"7`3 .Y*'j& % %$%!%'*z/E4;:AINQX`vflor4rsssqrsssssst*tttOt*mmdllwlkGk@lmmmAmk&id3^WMP_H@9^2,'~$""B!\ R  ; !"-#>$l&')+M,H---5- ,a++^*+Z,05FPNEVH^Kdkors%tTtQssrrrrr5rGrs\svs_sonmcllUkkBk;lmmllj{gb\#TMFE>{7V0Y+m&$#4""(!! !!!"#%'*",I-./U//C/.-N-S-16p=DhKS(Y`0dhjlkkqjj i[hh6gf!da+^[YXWV*SPTM+IREr@;6`0+'W$#/#"a""$>%).4p:BKSl[bj_nrs`tttVs_rrlqqq%qqr3rRrZrnGmillAkkLkFllm_lleif;`YRKD9<5/#*&%9$##"q!!!a!r!!!"#&.(+.02w3X4?4s44T223'6;AGNUZ`id{h]j kNjjj%izhh gKfeEca_#][[ZYoWTPL4GB=#7=14,'1$""L!!!"$)'+/1/7Y?KGrPX`gm,qjrtttsrr6qq(pgppZpppqnRmQllkk1k-klllkhd]WP4HA:73-J)=&%+$M$'#""h"!!!""#$'m*.14V68R9:;G:999l<@lFKQlV[t`(cghiiizhh gAffeVd9c!a`^]][]u\[LWTNIDR>\8 1,!&#!! z!a"/$(-3;yCL{U\e:k prtVttsrqq%poo-oEooo~on2m'lkkkujjklClQk'jgc&\UgN F?L71+'%%$$##f""b!!!!""B#%)H,1(5@8;><@ABBAsA ADoGL]PUY]aWdfh hhhfggfXee~dcc bJaL`f__/_S^]_YUOJD>8)1{+&#!~!3 h G #?%*0=7@HQqY|ahdnpsstLs]rqqpeo^nnnn~nknnml6kvk jmjnk0kkj;if`aZ+S|L!D=?50 *&$[$:##{#*""F!!!!!"J$5&*/+48<@CFH:IIyHHcHKNtRVXZ]^`?c~egh`hgggLfee?dd>ccLbb[aaK```^[OVPJD>{81S+&# f\ !#(U-H4/8 1t+&#!s !"%k)(/7?HP^Y`glqrt:ssryqq#onomm@llhl8mlkjiidijTjjZh\fb]VSOG?8P1+&$9"""@"#!!| X V o !T#' ,2r9?GDJOTWZZZZ[]_bbdCefhYjBkllRkkZk,k jjMiihhhhngf4e-dcAaP^ZuUOIC=71p,?'%"" !% g g K!"!$n'-4|=&EKMV ]e]joqsssrrr7qpCnnmllldmplikcj:i{hiijig^ea+[TMF =6N/ )%&#!!!!!!6 * 1 ^ !s$3'-X3q:p@G+MS#X[_`+`abcevghJhij9kZlNlllllllldl"kknk*k?jihfge[d av^OYST+NH;BV<7 0,7(!&##&"'! m !#%+$1:"B3JRZbhUmpXrrrr+r*qpovnnAmm%llkjihhDhcii&hfc_YRiKpC;4,'#x! v ! ! y 2 J !T"$(V.3:AVGNTZ~^caceefh,ijgk k&k'k@klclmm:m`mmn nn/nmmmvlkj5hfd`\W'QKXEo?:r5u/+(B&$#""9!p! "#)/'7?GP ) g ! !"%)M/ 4;JAHOVp\`dfhikJlNm:msmm(l{l l#llm-m_mnKnoGonooooloJnxmkif}c_nZTNHB=8d3.+A(M&%X$m#_"!!1 !0"r',5==EjMUi]_cinlo5opopvpp&o_o.onnCmk#jGieh[gffggXfc`[-*'&%H$h#l"!!G  !&+3;CKS[agkmnPnnoHoo:nnnnnen=jjiNhaggfggUfc`Z;T*LE>a6>.'#0'FCsz ! "# %)-28@=DKRYs^YbeUhbjm#nowoeoo&nnDnMnnnnomoppq.q\qdqquq3onli.e`[ViP.IC=84l0,)'&v%1$k#""!l 3 !K%#*^2o9B#J8QY`8fRilmUmmnunnn1nnnnnvjmiiUhh2(9AIQ\Y3_eillllmmmmmCmnVnZn6n2j%iii(hhhiMiAheb\UN_G^?70)1$ :4$  !#x%)R,1`5;AH\ONUDZZ^b)eiGkmnoo6oop pop pqq)q$qHq~qqr9qqomie`\EVQJC=8I40-*(&&%$\#""!!%! !!!%7*@29_A\I\QX^eh^kkkklllDllmmmmhhhjhhhij#jRigc^WPPI5A92Q*%! 97 f !"e$ &)-16<B=HO$TY@]aeikmbnnocooooopKpppppqq^qqqnlBgc>]XS,LF;?09s41.l+)^'&O%$$#""g!!a! s!2!%+13:OB2J:QY~_fe-h&jtjzj~jj}jjjuk;l8llm eZefghiiljkjh*e(_rYSQJB;3+&"    V ^ !"$&*-^16<2BRHNTEY^ bf|j/lfnFnoopooopp2pFpIpCp_pqqq4pmje`ZU_O7H^A;940T.+O)Z'\&'% $##7"[!!1! f!B"Y&,H43;eC%K5RZ]_esgiiri4hhihhijkSklB_alcQePfh0ijkki[fa,[9SLhD<5?-i'#S!c/[gji  !"U#%'{*7.626<&B:H[NjT@Yg^bgHjsmhnp%pSpqp.p,p&p ooooopApq"polhc]WQKC7*/&)G$f"K z] g !'!" "#%s'*-26a;AHNTZh_FdVh_lhnpqLqvqq qpphpoolo}op2ponyjf`ZTmNF? 70,-('%$#""'!!6 A!#(o.x6^=E@M}U,\afhiqhJgfffeffhhiBjFRV9Z]^bjegjlmlVjsem` XQ6I-A691T+%#9 / 2 S \ F U !!J!!"#2$&'(+N.2)6<@BI#OUZ`ne)jmupqr%qqqqq p`oobogooonm|ie@^XRBKD(<75.U*\'l&$#""$!D \ &#0 #s)+/V72>FLNVI]bgi9ihUgfftfe\e4efgghKOOUZ_wcfjlnmlhgb[USKC;3k,&#!;  / ; k a ^ !&!Z!" "h#a$y&{(+|.2)6[;`digl%nnvmime]VNF>5.(A$!    E U O . % J !!!"#%&)t+.2h7=DK;QW]ch[loMqOqrqqyppgp ooooon9lhc\VP!IA93D,)3&&$#"o!v CI $T*19AeIeQY0`ejjjhhNgfedccOcLc'cqc:A*HFOV]qbgknwnnjg `AYPHv@]70c)k%L!  & !    6 K u !{"D"#%B'i)=+.p28H?8EL|S Y/_dilopsqjq\qFpppJp;p%ooomnlhci\]VOHH0@93G,)9&&.$#"H!> u (Pe|c $+2;CK$SrZb`g$k6kk3iPhgfe#cba`___29AjIQYA_ceKi m/n;nkuhDb[WRKB:12+/&"}!\4,  H !["*"#$&S'*+/3:@UG,MTKZ`ieilnmpppppep?pHp'oo=omlgb[U-NMGe@93l-()`&&1$#s"! C'3Z!H%-K4GO!WN^Feim ll|jj hf%b`g]ZWW%TIR?P1"*4M=GPX`ejzln2lj e_X PHw?8 0*n%## XH%75 V < !t"7##$3$%&(*F,|05`EM>SZ`+eyhlxno^ofooao4nmll`jhOc^4WBPJ+D>%7[1i+(&H%D#"~!v ivy4:lwX!&,4x;CKS[^a`gkmm|mzkjgd^ZjUtOJD@<Gi)R2= GQY_fj8m+lnkgd=^"WP Hs@8Y1+($9"& ??V4/$>J F!!"u#:#$B$l$_$%&'+.3g9>@}GNUj[Xa9eikmnzo)nnmlkjhe`[T@NGB5FNV]bhekOmwmmkTieaZUOHB<72c$-7BLU\chWlGllivfa[TME=y6/}+ &$!p Ton-?` k!1!"#G#$-$U$1$#$%(l*/w4~;4AIOV@\yaTfikln nmm lHjifcE]WQiKgE@#:4/*(M%$#p"!G Cw#'-C3P:B IR6Yd_doi\kmelljhZcb]VPFIMAx93-(aRQ(2 yFNU\nbZfj4klkwjh9d^X-PJIAV80)$O U%p",U6AK1S[ah:k m=lkvh(dm^cXQ6IA93]-)%#R!$ p @ !!_!"r"#P####P"""$S%) ,16= CZIPVe\(`{dg0ijk3j:i_fd`[UOID?94/+(&-$y#"! qzd!#).44;,BwJVRY_Odgkklj>iKeaMYRIA900' 6 8&p0':E N:V]dillljagb]UVwOH@82k-)C&7#C! 7  !`!!!"K"#.#@# """~"i"."$&).2W7=CJvPV[`cfghgfc`\?W8QJE&?:51D,)&#$#{"! K2Lc #'-z39@rGOV]hb-fiIkukjgeaX[SYKLBN9e0'rJ j A )4%>HQY1a_fklml7jfa[~U}NCF4>]7K2,)K%v#:!V Z !}!"!"5"H"""""b!!!!ED|JQnV\f`cded~cV`>]X(RLFz@;61-)&$#s"@!s i3Q "&+2!83?FKMU6[ae_izjkjJheb\ULD:1 ' .v 4#J-m8BlKS\cBiCkmll(ier_ZwSLD=71-)o&s#"!!!"""#""##""{!!a!7!!y!#%U(+0G49?]EL5R0X \_`a`_[\XS_MGA^EsLSZ_ehk1k~k!hGfa]UV7NpD;2( B4A 8Y &1;?4+"G W {? P"-8CMU_0ejl nXn mjgb^RXRKD>~9`52/9,B*Z(''&&&d%%@$$$$$S##H###$F%&)I+/I3H8>DK5PT_UW!UpSO`JD2>8\2.+o)W'%$#"!Z l b ![#$(O+06CIN*RmSU+SYQkLH+B:SK[jc5gklnn4mFj&gb_KZTNzHDY@>R;-86 4y210W/;.-U,,,,,,--=-y-.S./01p36:N>CIM!PRTS]Q~OqKFy@;62v/n,+8)f(&%$$ #""#s$d&y(j+/E4/9->D7JPiV]AbfhOklm'jgbP]hUMCe9\/&c=c $RVzV 7"-8 AK~S\lbegilnmmlifCc_[VdPKH,EB@m><::9w8 65V4{3444"4%4P455d56G67p8A8:F<;?CGL&OZRrShTRKPXLsHZC>:64A10.,+:*('&+%%'_(+.N2#6b;@FK2PV\aeHhailkjfcW]aWkNE;Q1(=H IS#r 3 (8&/0P:cCLUJ\ctg9jkmmm=jhda]yXTOLIGEsCB @?>N<;;H;_;x;;;;<0<==>>?6?@B+DHKO(QT5TU.SzQNCJFxBx>;9'643,10J.->+*T*%*m,u.v149=BGLR-W]ub)f5hukkljhlc[_XyQGa=S3")! i]Nk ,-<(2[;)C\LT \.afhjlKmlqjgeb ^[W"SPNLK%IHgGNF\ED;CCCD#DCCCDDEEF@FGfHIKNQvTZVmXUXXW(UROKHEB@B=<+:9754#21P1a14609}<@EINbSDX]|bXehikk:jqgcr]XQH_>4Q+:" 8 >Rl]E+ K7 *-2:BJT1[adh ilmmkri f0caW^Z[=X7USRQ"PNMLL>KKKL8LOL(KKKL LMkMNO_PQSUWZ/[]]\[iYWTTQXNXKIG DCSA@2><; 98q895;=ADIHHLQPUZ_Zc0fhk*kl3j$gyb^XzRI"?4+d#j qn ;p<u  g LC"0*32$9I@IR:Y^bldhPjmlk hOfe%cza\^\gZ{YAX WUTTSS6S`$cg5k4mmkji=h_gIeca`_u^]i\f[[ ZZ[6[[[[[[-[[+[\ \]Y^d_v`bMcdefhf4*"vkG6 dA A.~W2Yd, \C A H $+1: BKQVZ_|chjl ll+kkkijii2hhmhgg%ffgQgh_hhhh/gg*ffFeeeeef!ffg]hhhhhvhUhbhPh.gfed8bQ`v^\ZXWVWWY[^&`bdfghiiigcB]9WQLF=3)!Au ]eLZ:II(ylLm- R "(/?6?FMRWG[+_cfhziiwiiiiIiii#iIiKi&hhi*ijjj#ii%hTgfedccLbb'aaabc]d}eifKg4hi!ij~jnjPiYh5fdcVa`^I]6\h\]_`b'cdefffg{fgd`"ZT}OdIC;2d( ZA D-uFSH'S^_uA S 7 7%+2:BIOSW[_c!fg,hggggh7hibij>j4jjj5j@E[J&NPTX]"_aaaaab`bcde9eemenedcba`0^]b[ZX?VUoTS)RKRCR?S[TVY5[^/`pbdefghhch{hggNffDeddtdcccWcbbb(aa`]YTANJ$D?]7.%q i#^p#f=N}}[u,!R/n+3TY &arV#7)1z9@ EGKVNSVY[Q\1\\N\]]^_]``]``I_^i][XVTRP5MKJ\HGFtFaFUGI>KNQUXZ]`bceffg+gXgg fpeodcbaa#`__ ^]Y[X9TwOKFFiB;4,T#u vkyZm]6sGq+;fqC e Za%,4X:>pA}CGLJNQ%RSSSSSTiUUVZVVVhTSrQAE[HL0ORVX[h]<^_aataa<`f^]\}[XZ~YY*XW\VRSQLI DA=)8M1m)!k'K <{fB[;!, 0 9 '.498r:=@'C9EH/I_J\J|JJJJKKcKLKJIGECN@=:7420/B---I.0-3?6]:2=AEI'LOSUPWDXBYsYYY9X;VUTSS$RQPnNRLIEBc?<8\2,%]83 _/g)GY{4?ja)CHOM Y>.a").i14[579;=>?t????v?;?.?o??>><;8630-+(&%a###6$d%(+/3:6:>5ADGJKLMMMML7K-JnIIRHH FDBE?<:I762./'!R.3 f>z ;6_TzWO^,+As Z"A&*o,C-.0&12345%5u5S5"444D3220/.-*+(%" 9'?U?!B$(x, /26W93<> ?@AB BB_BAc@@??>[=&;;964<2;0.,'"?#} x}.FR[SIpJmf_ZtpeC f o z "$%D%&'{()*Y++Q+~+$**)&'&%#!@SUd!$'*-K/13/455p6Q7:77765421@/K-=+x*5('%O!w c ? P!d 3xZZtvcc\bm{*o^G(HQ  f$u5xk{ s\Wu # U5? Y wE!$%&!')Q*+,,,,+)(_&%P#"!r 8}OER QM!X0yHuoPYLZ_bamaBbdg  * A.q7TJ@ Z l +dN !"N"""C!f_u*H]m 1 2}>O"+}I~L8Y:KWfkp`L ;E)P(Tl    w N G a * 9 K n/OSgUI xoIL/Iv >a %k_qS7@g1BRisrZE|F Z%)p3?=![AuRC=^iL5-A 0 izu. k C ;  R n @Q MY7T5~LxA,3Vr:T_bXRJN: UCf!n%6%[zW)HWT B>"J  )W<z|qK- RXsUk5$1Saaa<[dX?7:LF$.Bj}M"!y|\D3%L=Tys3Ss@Itk%*BzdjxL\:nF88FIFG"AUXH8.36/%1 %:IMLh_&P6a#)}3EOO[iywcG(&Bmy~Izjp}"lYFG+Fmuw3JK)yP=4<CE?8QVM7$349"H`?2VdEib(Oq688# vjd`XK=, 5'#9q:-R7oidh.*+"kT@=EF6 :OaW3)<)):' MK508UX0W`-@g$2- uhbYD/( ?hkQ<eY"]j[fq1%!kRB1 #;bmQ((3( =K .QZC*8O_I :L6-\ #'zjdaPGQYH7<JKQi}u`MDNgvsNfgYYp,   _8)JdjR+0#<;#*EQOOKSI%-OR; N )'}lih[PTUD7>MNKQQB68I`rrM% ,Um\UHUq#  R% $ +Adg778@S> !OtsTA667()>SVA-&I~ JE zifhaWPI;6CNF6.* &AavqbD2e{rje`INt ^5,& ">M2):5,S[C4g{eF:6' !3Oa\J;G\9N50nZTVQMHGJQ^\F.'14Ddyw]F1Dqpf^u Y7": , " CP/ 5\hH$&Jza=%%$.CWa_[YMh09C.hVKKIKLP[ch]?+2N`nfA144BWjlq}t'-e=& =" :T< "HdaK>FduU6/613=NYdxnm#EF:qeYX\cfb^UM@)#6UdiwqU:6EJVi}"-vI!4  ((=9),GbmfWU^pudKEF?<?HJZ~5OY@%ury~mU<-+#*@VZTZ[MCIWYbwod\H-  -&  +67/)'#2RqufX]d[NKJ@=CNJPj!AQ@) {dF1-:>FV`]UY[RKLVZhfF2   ')' *%/23366,,>[xu[OKGHIH@=IUOLXq*7,p\E=DTYZ_b_\ad_VMPZqdE6"%&!  L0|2-}+KBYB(p  ? {"%'&$QD%_8  q      M v 8 A s 1 iLh&mAd<6Gm~<   ;c*~vPjt!?,)!-"#%%%U$%&O&}$! F <     0 K r S / E O ^  Z " od!=cKbx1 @Z*>PY`J52s ]R4 JG "K$%B&'&%%$$2"z (  l U K n  / L k p      2 P  , | _ qH97wxEdKft3q>wZ*c{v\=- p!5" "0! seU  5 U  0 r , [  K  o 9 "  g/t:uiq, % % n,kTO1- EO?v _  . > e F 1 N 8    : ]  ; b v U # e J [ t  a B . ) 1 & 6 g  X  : ~lsb8"AA=,\s+o6v{rcCC1Y= h1`q IA 8  H )    B e | n A  " H _ Y G .   * ; 9 H q    5   Oz%ml7l@7u3} n}A1]d% _ b  kQpH+)%4Fb|j * ^ O 1   : \ n ~ } ?  C\a;#Q~.gUzDxXY@k E O + q Z K  k <p G67-MkxHV5&7m  7 g C v  a lq&t'>wqbh@_Wj`9 ` C  N 1 ez095/ i2~lim[E02BhUK:iY<tg / B N X } } 4 ] ) d+69y46fp` =   ;U"P 9kR\d~{U>>F^uo/dk~s$;|sb_ > * t ! w b K -i, } /  $  } Y d ? l ES=i }lK!lS[qQ)!;Riv{@H!y"-8  . N x  e ~ k P g 5  E r : = b A 6 P R S \ Z x 0 i M | < )  ma9WFs,;W\%=|<-IOE0/'#6g,P]jxd.![Mz W F F { n d f p 0  ( ) - < :x|>x Zf$Z,! rG% ;d%o-_GQc # F :    Z c v m O E b B -   7 n h %CeUd']h}bf`_)keOoUeE5-/&&,Hg ! gGZ!$M'S5{  l   w s1ou8 9/!@pu\Nt)%6ig4su|-zPS `QB"uw*xN G e <~  >n%kntmz*N1q)tvf`" T7,<OT=t<9T@P~Bq)-"\IL7LQ=h?p vu\38E@|} [a5T{T] WpXJ>'3 SvT< l%  Vu7y2VO#'Xmy}`^ #s bvzTBoh DaDADi F s V  E&3u]nwv=epH-w 7 w f  =~#g lsl,cpIBN'_7Qjf` 7WLi\H1psbHo(xE   /<'RD}\CPMhSLr]LMU  , !~#!2Yg81=InpG>MrZ}X%j*&[u3^ q}F / !P!"#_$$%F%%%%&&&&&&G%%%%w% $$ #$2$$$%$$>#1"4 GU y 6UL3}Xkh1M}gc8A #hM!BH y !#%W&'(^()d**+,-./1/r/////D//S/00$0//////Y..)-.".../..Y-p,+E)'%#!NRnN > g Ii#TljY 3wl7M`A| :u}o}MQCO3g G!7#%')+-/60123034568C9e:s:;):::/99S88899:2:s:;;M;;;$:|9999999998976i5132$0S.j,)'E%=#"! FA7kU  N!gTLZAE/il 0#% `( "$ 'u*-a/2+468:;Y->?A BYCDEEFEEE"DDdCCDZE.EFDFGCGHCHHHHGgGFGFFFPEDCBA;?>K<;:80631i/}-,>*(&$X!gJ  1J< *Z{/pe5) [" "J&+1/25N8';'=@#AC[DkEFHIJ JLMMNOePPFPPPPuPOP!OOP_Q4QRwS STTUUTUUTTyT!T'T6TSSR2Q-ON1LyJIGFE\CBw@>oM@?<c7O[W |wORt#',16-9=@CGIKM NVObPQS\TUVWYZr[v\N\]7]a]|]Y];]\\\]t]^r^_?_```a````aa``z_^][YWUTRhPOpMLoJI%GKDB?<97q42|/*&!b 05` $ ](l ~ G r_ l$)R.f38=AE4HpL)OXR@TUVWXY[!\j]^_`bJB.VaP4 f Yy$!&*/a4o9?DI]M&QTxXZ]^I_x`#`abicndefghjjkm%n/nnnnmmrllWlkll>llm>mmnNnnnnnnooaoooon(mAljihf]dc(a`%_^.]+[YWTPMJwGDA=18{3\.*&'!) ))"5"+t2 $W(-2a6;5@]EJOSSW7[^AaAcdeRf ffg-g~h hijakRlqmo'p-pqq-ppIonn]mmmmn)no1op;ppqq0pppEpp?ppppppo~nnKmlkjih6feddbam__]+Z_WTQNKiGC>940C+' !5e j? g9 &651+)&z$-"\ d!"~%.'+/49B=BGQLvQWUY]`d\fi j*k]klVlXlLl)llKlmmunop q?qr{rnrmrqqpLoo4o5o^opq8qrs4ssssssryrr%rSrrrr`rqqkq5pp}ooongmlkkihg6ejc(a ^[XURNJ-EO?:50+T%!P _na/45642//-++>+#,.037;@yDIRMRdVZ^PaSdgtj klmnno0nn}nmmmmmmnwoQppppqppp`oogooYopqprMs'stSttttss#rwr r r2rdrgr4qqqpq1qpphppoooo0nmmlkjahgafdb`Z]Z8WBSOJEf?:5p/)m" 'UVB@c={:866579<?~CGL0PTYC]`cfjhkmoOpppqqqq2pp'ooEnnnbnonoop ppq qiqxqoq)pppnpqRr1s stu@uuuuut>sNrr0rHrvrrrryrHrqqqrqppppppp#onmlkjj.iXh{fdb(_\{YXTPJSE?93,&3 a ?p~I,dhM-JGDB@@@TACFJPNmR/VZB^(adg2i*kmopqqr=rSrrr.qupp=onn[mmxmZmnnoLopEpppppppqurrstuZuv uuutcsgrVqq-qMqqqqqq{qGppoocnnun6mmmmDllvkkjjjjj9jikhfdb6_\|XSNI4C>71,*$l wbWUQOMK?KJLzN{QUX\-_cgikm_nprsTstUtWtht6tss&raqponn6mlllmZmnooMooooop"pXpqrttuuvuuFtxsrq]poppWpppppppWonnm-lykkWjjjbjajjjjjkkrkkkjigf cq`\XgS4N%HmB<\5.(", "_E_S\Z6WVTmT>T UWZ]`ncPfNilAn4ou uuvvbvuttYsrqpznmki0gfeNddwdexfIfghsiVjKknlmnoqHrttuuvu[tsr^poMmllYkkkk,jihgfdc\a`` _A^^3^X^`3ac0dfPgiujklm(m[lldk?j6h5f3b^YUPKMD>_71"*# >>jpiEgfedddeg|iijlBnoqrsVstbtu8uauuutsqpon_ljTgePc4aO`^]]I]^&_O`bacFe fhjlnp'qst{u_v8v_vxuu(srpo5mljihhfeqcbO`^\[YXaWW W VW WY[i]`.bdg$ifklkmmmmm"lwjigFd _\XnSNH-A;<4-& M\ "mllRkkPjjjklnooqFrusNstVtuJuuuuuts^qpoGml4jLgda_\[YXIW`VqVWXZ8\`^zacfijknap5rsxtuvvvvQutKsqmomljBh_fwdb`^\qZWUDS.QP9ONO(O PQSRUX[^bdhjAlFmVninoMonmm4ki eb_[VQK]E2>^7q0.(!" $m~mgmCmllkldlmnDoopqrnrsCstotttttusrom jfhYf%c|`R]Z WaUTRQPOOPRTVVY\`cg8jimforsuWvJw4wXw|vv;usrjpnljg\dja^\ YTVSPN0KJHH#G{GH I]JMlOS+VZt^JaehkBlnzo0ppoo!nmkifd"au]Y?SNGs@92*#ncPm7mxmmmmvmmnoopq^r rzrsstJtt\tNssh===>@!BLDFJONSX^LcVh)l:psvUwxxyxx0w9vKtrp,m"hd^YT|O*JMEA>G<987H656<6V79l71+T%klPlm'mllm mnnopLppqrrJqkpWnTlifb^YUPLH=DZA<>;:977y67*7~89;=@CHMSY_jdinr{uwy3y_yxxwlvdtsp\m[hc^XmRLGHA=G964q3t2#11L113)4~7?:.>RBmG=KQ(V\@afjUmGpUrssts9rqpp-oqnOmSk,hd`[pUNGAF:5/vl#mmn mmmmnOnopQpqq=qrqpn:kSheaK\~WR{941/.--X---./24z8Z9rm=nFnonnnnoMopq*q{qqrZqpmkg*cz^ZFTOXIDU?;e842%/-,,5++{+Q+,-B.0q147WQ)J}D8=830-,+++u++,V,.0B3p6;@EaJPWJ]Zc4gl=o*r1stt/ssrrVqppIonsl>jfb]XS MHCno1ooooho[o~ppqZqqrUrQrquokgc^NXS+MFA0;7B3/0G-(+(('k'''(()`*v+-;.c03i8ELT/[cpipFt wyx@xwvutKrq!nlhe<_YRKE >941.;,+N+-***b*-)*m*,|.q25:?`EcKRYZ_ReiVmpvs stssssrrrpr"qqomkheb6^[,Wo op>poSnnnopiqqUqBqq}q#nlje6_YMRKD>/72.#+"(/&g$]#i"# #$%5%%&'r(Q)))*+/S39 ?sG;NV_fCmZqv$wfxOw_vuotrZpnlifa[TMG3@;862.- ++2**k)))")?)=*M+.J1C5: ?ELSrY`?eLjNmq@rsst[ttt ssssSrqomXkhsec`RoooonmmmnopHpepponkdg4`ZSLE>Y8/2:.*;(%$##""#$#$%,%H%%&'d'('( (+a.x49AIQ!YjahnKsYuWvvLvtsrpnmOjhdl_QXRKbD?951/c-,,+r*))(()q* ,.@25:@FtMSZZ`einCprsOtitu6utttttMsqp-nol[j-hfoooo%nFmwm=mln9o+oonon lnhc4\GUNFk?72;,)n&O$#"j!!""#$R$$$%O&&&&%%%'v).4a;C&KdS[d*jlpFru ttssqpoDn;ljgEb\0V$OI_C=9F42#07/~.[-(+*?((m((^(f)+.#1(5:f@rFMTlZa fk>nqzrtFuuuuuvv4uu tGsqpPnmknoGo'nmmlmmnonmm^kic^W[P.Hx@92.)N&$E#I" !!^!" "#$$u$%%&<&&&%%I$%'~+07>FNW_tf/lorirsr`qpp6o^nml~i`e-_HYTQNI?C>964t3m1/-+t)Y(C'''(F)!+w-15;`A GNU\Rbhl6oqstuuuuuv:vuotts>rponnnnnFmllalmn^ngmlkiEe_YRJC;M4.1)%#"(! !T!"#o$!$%4%&@&'$'C&&%d$`$&)-43:eBIRIZahl}opHq%ppp"oo:on8mkg`b]jXSO ID?=;`8752/,)( ''A&'D')*.-16;BWI#PuW^Uejnq"s`t0uTuucu ubuuuou*ttessr;qnnyn2mml8kljmLmmmXkjXfb\"UNoF?71]+_'$$"!!V !~"Z#($$%&]&''(/''i&%&&*-Q28M?GOMW^eim0DLJS[!behmpsstutt%t0tjtit:tssss6rrnGnmm-lkklllmXllxjhds_XQJxB;/3.,(%p"! U - S !"#z$z%j&<&'(0(((9'&&'%),05=%DLU(\ycegktln9n4n*mmllxl-l'jugc]_\wYVSOBJ EA=>D;7w3/+5([&g&6%&%&d')Q+m/3:vAHPXU` fWlp9sstttssdsZs=s"rrss`sCss)nmmllkHkklll>kigJbY\UOG@81,'%""_!!' M 1 !`!"#$%&'(j)F))z((Z(d(*,05)I)*)))})j*,05gFOWa^flp|rssszr1qp+oonnnoOoXopm lkk\kLjjknl1lkk_hwd4][VOHA:d4 -)&%$$$#x""j!!!!!" #$&')+-/e12 2{22k35N9$=,BH7NATlY_:bfwh@ij,jVii hLgglgfSedecaa`@`^L[7UPKE?9Z3+,(q$#"^"N!!!"#%Y( -r3';C0KTU\d inprrrqEonnrnRmm:mammn9nlkk2jjjdjak"kl k jgc[ULNF?8p2N, (%%z$$$#""e!!!!!"#&'*S,/2t47U89::4;w=R@DXHM[R;WB[`3cCf%ghhi hvgg"ffdfee>dd3cc bb`^,XSuMG@:$3,($ "!Z!K !L!#&+0{88@?IQeY'a[glo}qrqpo1nmmllAlEllm%mlckYjj_jEiijkTk~j[ifaZNSLWD=60*'Y%$$]$.##f""D!!!j!!#$'h),0)369=?@j@AcBDGJNRnVFZO^adfgihgggvffexeddddddddZdb`T[UNH`A:4- '#! :  0 "`$Q(-5q=]F1NVk^eYk[niqDqqp5nmmlkkAkknklllSkFjjiiOikj=jjihee`eXRCJCq<&4/)Y&Y$J$=###8""H!!|!p!#!i!#Y%Z(+/3N72;0>BEFGH]IKNQUWZ^9a`dfhhhhhgg9free2de6eeeekeeGe?cV`[V9OcHB9;Y4-(#! 5XL )!#C';+2:CdKS\binm pq qpWommZmlkjjkkl(lYkQjiii i4j jjiKhOd_cWQ6IB":3`-(K%###S#""V!!A! ! !]#F%)N-(15:X?CqGJLMNP\R|UTX.Z]?_tbdgxi?j]jiihhh)guffef.fg+gfff4fda\WEPyJCBGCL-OqQSATV_X[S]`acoedgfijkkkZjjjgjihhah)h{iidhh gffdd.as\hW PdJC<6/*&;$!!4 j @ !$S'-4=yEMU]Gdinlpqqponnn]mVlCkkkl8llgk_jihhShni6iigf:a\]UNUF?!70)*%#"z""v"["!!7 !! !7!#&l*/5>:\?EKAPTWY[e]&_aceRfugThikklwlglmlJl5llkkhkjkkkk-jich;g4dag\'VOIC\<60i+'R%2#"H!] f :  "%k+61:VBWJRZCaglo!ppSonoon=m9lllm.mlCk4jBi0hpgghjhhfd_ZhSLoE0=^5.d)-$"!!!!!!!C!!noo]nmmmmn2nljihgffg[ggec0^ XHPJSC';V3,Q'="! !!!+!?!H!,!>!""%"#z%(-2d8U=D>K QW\a cfthmlllmm m4m[mmnKnnnn}nooso nslki3fb^~XRLIF"@\:5]0,(&$#""!< G = "3' ,5T=6E}MU_]_cilnnnncnononSnnBngno8kjihgffbfggdbx]+WKOI\B?:s2+]&K"  _ ` !!!"8"o#-#&b)I-28:=D+K$RX]b[eCh4j0lmnnnnxmmmmmmmmnPnnnnno-opoynljgd`4[UOI\CZ=83/=+(&$#""5!m u X !&+3;CL'S[bQhknInZn]mnonnn n^nnoUl@k2j%hgfftfggdb?\VOIB :I2+%!   < C W q !N!"E##&K)4-2 7i89851.+)'&l%N$#""0!!X!8 !+!%e*2g9AIQ}YZ_fVjlmm,lm3mm(lm,mn nGnj#iiiZi%hhi|ij7hPf'a [aSM[F3>6/);$4"  x !r!"$'j*-1~6};AHOTYa]aei*kmOnooopHpPpopp:pooboJoxop_oo,lyipd`[{VPJDd>841.Y+)Y'&F%t$#""9!!!I!> !k":&H+3r:BfJhR!Y_f+ikkkkkl'kkl lmm\mggghehhhjjkiQgeb\UkNGu?8 0)$"FH S !H!u"4#U%p'L*G-t1673@/~-A*(&%$##U"!!H!!! ! !"'&,4;CLKNRZ}`Lf.i&k(jjj=j`jj*jjkklUlbbdTeg*ghjJk?kjGhd(^W^PIAw91n*%U" vWa  c !U!w!"$7%d'*I.G27,82 .e+=)'\%$Q#v""&!!3    H P !Q# (-5(5.f'$) aX # 8 _ !0!L!!"#6$s& (+J.27^q #b)"/M7>7ENU] b0g4hihTggcfffefggKghiMfQjV-[P_cfjalfnmm#if_NXDOHY@70d)R%!0&:p ( !=!"-#$8&Y(w+.2737{0+'O&:%$#"r!- $Z@1(x>!5%z,3;rCJRZ&afijbjh{hgf`dcbaaB```4_;%BKRZ`f1immnmlid^VrNF>V6I.e(#U `'6Vp |!!"#$&(*,/3#8t>DK Q?WU\aei}knBoFpppUpvppqRppSmhqa+ZiS(L@EB=6/+D'&%q$#"!\ JiN'.|"&.j5=EYMU \ c?gjjjihgfcb`Y^c\[!Z%Y=+3!~+5g?J-Se[agjmm5mj:g,a\UNF>60+V&# a y!!""#<#$'$;$t$%&)+0y5YSLSD4K84.*($'%$#"!24` $w(.5AcHpQYr`ejXkm=kjg5c^ XQJXB:4/+2&$!  = !!n!"Q"######'#+#\$&*-28_>E?KRVX+]aehdjkrl8kcjhe`[ SLFQ@D;:6!1-()'&{%$#3"0 wQ<! #(P--3:0AIPkW]sbfBjklkk%heD_:XQIB9}1*9$Q -X$ -7BXLkT\bRhjllQl#ifb&]~W-PHA,:;4/*' #" z J & !!|!!!"""#\#q#n#'"""#$'*v.39?F"LSY]bae~hijihse!b\VOqH~BG<73C/m+A(~&j%$#"! F3t"&x,1k8>FTN#UJ\`ehgmd^XNFD<3D) 9k ` &#-8OBL"T \bhcjmCmmSkChd4`HQYafjlmmmjRgcQ_ZyT_MlFA5;7 2.j+)P''&&&&&%%$$V##G""""#$&U([+r.A2+6@;AGN-RV=WXV'T3OJLC=71v-{)'%|$r#b"!!& e Y  v "y#&)v.%3h:1@GNU%[aehklmjheb \ULuC:0'O h. !,}7,AKTB]ci*k"mmn`ljfc_ZT=MGFA=8Y40.z,e+***l))d('&&/%%a%D%%W%&'s(*-$/O2{5:?EKOST2TRP4K5E?483"-*U'B%$w##"!!ae6iCkbmmliyfb]^>WSOE;2( *m W>5G| "%5/:zDMWH^e%hRkWl2mm3li"fcP_Z]TXN HgC?/8@3-.Z+m('&&%B$##J##%""#2$&),05f;YR H?59,#k ~IS w!V+5?.HQ*Y_dgDj!k|m#lkiQghd_a \ZWQMJGERCA@@>=<@;:9B8X77889:;<~=|>?@A{BEcHuLOR'TSSJPNJFcA<9%53271=/.-s,[+ *)N)G(*+.15:}?DINT Z_cfDhj6kkjJfc']XQI?6-$  z v"$f.7@IgRY`kd(giSl&memlDjgeb;^Y|U?QNLJsI8HHGFE{DBA@@+??^?@A$B-CHD0EFHGDGHMIJM+ORTV U_TRuPaMIE}A>{;:876i532v0/...0 15k8=}B.G)KPdUZ`dgAhjk8kuiFfa^XJQIp@~7.;&gY d;\hh IL&^/8m@IYQX^Lbehjllki`gevb_`[XHUIS^QPOONNML{K9JIKHHNGGHHIJKLMNOP&PQSUXYpZ=YeXVTR OKH~ECA@?>=`<:8767 78g:0=AEIN8RJV[`=dgiLijihGdV`[oVPHV?76f.&I ^:U d'|/8@GPW]ajdgqjlmXkjh^fdb_J\ZYXVWW^VUTSRQPPP+P/P5PQkRvSlTUWWXiXYZ\g^%__{^|][YWzTQO=MJIHuGFE7CB2@n?Q>>>@SB-EHMQUQY]b#ehjkkmk;hod_k[U|OGb>V4,z%D j;#5lx{ }'W/M6[=F9N`U[_aehk\kk i1hfedMbX`_W^^^F]\[[Z6YfXX$WWWXTXYYZ['\^]}^W^_|`&`acKcd7cQbf`_ \ZXmV"T9RkQ?PYONMKJ"HGFGGHYJM%PSWj[O_Ibfh%j jkvj-h/c^XTMFK=3+# =G`Ec& p&{-$4;CLTY\`dhSjl=k_jiiYhh g f(eeefdcc.bwaa/``!__``p``a_bcdde8eff~ggh\hvgfdcka`!^\[Z$Y,XmWVUSR9PONNNP+QTWiZ^yadfhikkkikPh?d]XRME<2y)Q"d0+ m,g jg4>NZ<  6'/$+!1i8AdIPUzYi\aehijGiiiiiie?d]ccbMao`__<^j]c\ ZYVWVUUUWXnZ]0` celg&ghyhihgb=\UPJD;1(k R 1! xzP*TV X"h(.[5>FM~RV>Z_7dgAijjjujkk,k4klkkkkk1jjjk'k"kkDkAkjeiihhggftee~eefgRgggg|ghhnhh\2i)01C8hrT30[- C %+>2):sBfHMQUZ_QcheqffgAghhhiaj jjkkjkEkkkSk3jjhgfMe cba`^_q^^z^_`b,c,d2eQfh i2j&jdjj(ii,hygnfLe cbbfbbcd@eefg fffedxb^ XRLLF@?81/% v[Z*:SRuMOdM  Bd" '.N6=DDIMR VF[^acdJdeevffgi#j;jkjjjjzii_hdgGedbF`^]P[ZEYWWWY'Z\^m`tbdfhj;jkk|kk5jjUii0hh'ggggggIfff|eecb[^[UPVJcE> 6,#I )*%wb34fB\AW+p<>\ g8#)1 8?9CGK-OmSWZy\]f]^H^_a3bd)eeeje)dlcba`^^\ZXVTRQ=OwN(LLLNOR6TW8Y\_Sace f)fgWghhhGhNhPhgggffecbaae`_]YUP_K9FA;3+3"u jz4g6j@Mtz Wq,O1s*W qX&$+3e9>AE HRLUP!SUW WTWXY[h]^e_^_\_K^m]\/ZXV[SPNIKIGhE{CmA@f@&@/ACFI&LKORVRYX\G^f`HacdRexf2ggB8>1( 3;X9 :@J,FdY<vGu.9ipK2saX i  7'..[48M;=?CGJLMaNNOPRpSTTTT?SRPN5KHEB?=\:86y43A2246r9P;?/BFkJ;MQ=SVxXgZ\K]^___^^\[ZXWNV TS.P`LGCy?<9 4z-%+0 =-2|[Ee~:(A&^/ lEi!(-1358@;>AtBDDEFGH0HIWIDI\IHGFzD\B%?'<8530<-+_)''z'W(*-0<37o;?CGZJsMcORSUVBWVVUU#T^SR|QNM3JHSD@<96@3>.(! j.jr:Vv/<ia -SK1YO ) rQ#+(*,.00O25+7+89;D<+= =g=[<<;8y5t20F-)J#q 7?5DD}uTJ\(0:cP){ pP: #'$&')+&,.O/1G22229100j/.-@+)A&#!O0aW,"&q*5-1+368:< =Z>>?e????:>= ;805{207-+).&l"UT3L 4 5io@9Z8cd\Wun`o;;:*n Rt   !#B$&()()5('&%$#w! 7 nB=9c ^ 8 t6eW"& (*,.x/1`2y345@595B4d3s1r/,V)'&K$# 4y &~l "qlOP~|dcZaly(~@i3T zg5M0gXb3s_A1 B lxqY G W)m!c#t%(&')B)*X))(d'*%E#"!Mw 7{z i #ev6{dssXaN[_a^j`Bh4D-p V%z., n EKj@8u CG<hK5s!8% MU"PbEf;-qx4vuK:Z7JYhlrbL(UPpXk^R M j [  V3NwWMLh t M1~Jc  id%!Cb0jyThO7Aj)?Uoww^FvHjP,l|Tkj{/ze\I8)DuXh {  1 S @ 5 $ %   ^ d RbCJC<BGt@-4Xv2P`dYSKN: XkHl!Pth#XD!/^ -.o\Wh X<bbC&[li$gwVa. /Qa`a7XcU;39JF#!,/AsMgt>JWLHA?5$nPOOj04i[q 7Yr'~  md.gzVg9emB^9/3CFBE>UWE7.023%)7DU`u`wcm $Guug``W_uqQ/k]{c ^tI4Do@WV1pJ:4=EEA:SXQ:"3:,AWD-AVR2EX!=b8.&u^OOSH:31#*@qw1zjH;Lhusz +-3)mWECKK="<ObY2-F05* CMD@?OP5 =gk<N1,1'mP>EO>&3Nmb7Jmc8I}ngt32.  mUF6 %9anQ)'4;*<Q,(SgS6=Sib4 $M^E5l- )&xpgRL`un[RU\k~z[2 PsvNBhbf:8, ]8 #"+NhjO0%0 CG.0Q\VQMZ\H+:YY;_<< zwq_Vbpj]XZ^`aS7(LrvW( :qeW\Tb|"0   R' ,'%1Gca8 23 J[B.YvnQCDRX?(+?RQ7OIJ" |zui__cc`^XPD7( 1KZ`O)+]kVXdTY|!!&a7 '!&"$=I6$5. 1TW@$ @lzjVWV>*(9P[R<!(B:R5*xkb^WWYbqxvdP>2/%(:MTLC5=mvjlhY8#8 (  )' >J.3S_I14T~t\G522=ISWSIIGo 8::!rcTONV^j~{bJ>?KPT]YG2*02?Sl}{22Y6% <  "#8P=&F`cUHKepTC?=ADHKQYa[j"<:2}vf_costzs_E109KTUWM:.4EKVhy$0p?  3! !((;;/%'2IgukXS^u|eTJFGDB<BUks|.FVF2 }{mY?.'0=HLG@938J^agxy~ rdWC) )$   -8:4/-%3X|zh\etui[NFGJLDCOgy7J@0vbO=;@MVXUK?97@KY_l`C2  !&&  -! #/47687))ChzbZ]cd[OGIQWOJMc}  .(sdYRT\egaZPFBDKINZssK2 !!  M-u00"?YzI /-[G!$5&%"bE> | p       W  w ; C p & z nOj)m@d9A Jk~=   !!?d,xuG`Z!fY7$  !F"#$$$Z#$Z$$" &gO L ?    0 O { R " 5 B U  ^ " t ]!Ag(Uay5 B[*ANT]J09e]ec_)p!U "q$9%Q&h&S%$$#8"] ?h # ~ Y J ; Z  ; Z t u    ; X ! 2   X vL;9EhOe y0n;sn ZK t !t"! ]eIJk c J F  & p ; d P  y A   k2~0|ulx4  % $ r1oK!~"!jrKD`r.~V>U5 "|L  P D . I '   % M  F f t \ * b L a t  c G 4 + 1 & 9 n  T  A rqX3!BB=,ay.u6{}rfHL)$he>#{TAdEW_9zJ0 ^ K    H l | | w G   9 P P C - ! " & 3 2 G u    8 +  ~ M"'fl5kA>}3y oU7YS'4MDRX/\"] | d  yAZ/3Nmq  P F -   < _ o y z L  BR^9X}-gOs;p|bF]K_%Dt 2 % ; g ~ V @ #@"% ,Pu"%C[B44l * Y | K  [ eo$l"Htm|^b:U@EFX] s z p q _ z0?3#*`eSS_UF9=Hh\Z 0a{XA"um 0 ? Q | |  A f  z ]'5762bid 4X}V$  ~ 'X"K ,@ `q6@D_ztXGGI^| x"|af{{.5maPT  A 4 v  n ^ M 1t3 y +  )  |  ? ! y ,hSotg mF%l@%0D^meJ34IXjC:-#-   9 T ! ^ q ^ C ^ 2  F { G ; ` = 7 R M G S V o ( i u  k d : X+]R5+*tMM6T"//&  $+,Cg!Oex#`'XH \ B ? s j i r ~ 4  " & $ 6:-NtvXaeCnDDJwhA$&++-0AXy0y+ OAT  i  : +    T ^ v p T H c A ,   9 g d 6'"yh&MLkG{oP grz`y6cJ5.&+/BV  vkRF!)KtK2{  k   x s~'ce/ b1']wb-ygIp/q*?"L:o_OPLTTvP6S0OiPD1$|r!vN K o B 6n!~qz7-'[9ajY-kEQ,~&I})Nur[%fJVLcc7_x7o|l;8AAqrVP,Xll#nxrSYX&2jzC( G $  ZwI]zz{|R@*d4,bXfPvn mZGqpAS7OT$})oc G f *  wi0a-  e;6q-Rm8r'\ % g . [o~9n,O;@Z4 Xmjf;ZW]Z@!lxjNoU G   =o_l xXE?@9ts  , 8c&d%:*Q/xwxA!4AgjM=Pq\Mm-V)W R9B %ii |!!"""#4#$B$%&e'*'()*<*-*)(('>&O%G$q##o#E#Q#B#*#.""! 4~s#  &fLW,(F Jk\]8J  ] 5$^hXB  ~F ":#%J&v'('(L()*d+[,f-X././(/V/i//0i0123C3333a22;1}0/{.--a--,,,,,k++&*%)'&$" O} w =stm`tfa0FX9/ =}wyzBC@  n -Pua#%()+-/012@23935 6078: :;#;F::}:"9:N:;L<====>!> ==<<;:*9[888[8 777p76|55>4320/,*N(&$#"!s @ w 5SW]L"+!u (EHbV6{c  )x %(,/x2@468:;<==>J?3@rACDE~F*F&F+EEfEE EvEFGHIJJJJJJISHwGFFFEEEDzDCBAA@?:>W=#(n-T26q:>\BTEIKyMNP*PQRS}TUWLXZ[m\`]]0]]]]Y]I]r]^ ^_x```a aCa\aaea``:```__S^^5]Y\ZYWVTSYQPOMKJ+HPECN@l=;8640T+&"2g Taw "6_ 5 jCn!:%d).49 =AEIeM~PSUW-XYYZ[f\W]^`$abdefggggwg ffjff f8ffgGgoggh$hhhhZhhh7h}hhohXgg>f'e cb=`_ ]Z[ZXW5V!TSQO=L4I FCS@>|;_72-)$  g 4rV; *T  E)D/i"'>+@/4:&?DI8MQ3TX[]_`G`aabcTd6ehfgiajlmnoBoono n|mmOllalHllmm+mqmn[no%o$nnnnnnnnnnn>mqlkjihiged!ba1`6_E^>\Z{WTQOL/IF?B>%9`4,/*Z&3! |3 pMN.!l%>).=26;V@}EJOlSW+[^`ackeefkfffg%gh.ijk2ldmompqqqqwqpioo+nnSnJnnoMoppqqqqqppHp&p;pHpJpJpoo2nnmmDllkgjYigff%eCcbL`*^ [Y?VVSaOLHDp?:040k,#'r"V~ & ?{77.2+)'$"!C ""#l&(,05{9>UBG}LQVY]`djfi8jgkklllYlkkkkldlmnoq r rrrrr[qqCpp:p)pLpqQqr_rsust\t\t/ss rrCr>r@rBr5qqq/ppip>p4poooonXmm9lzk?ih0fzdpb`]fYVRNJoE`?:6 1U,V&!NE D8 /:7520L.m,,k,U-/ 148=AEINMRW?[2^ae%gjXkmXn no9ocnn[mm*llllmKmnokp0ppq*q-q$ppprp?pvpqrcsst$ttu)ttss*rr:r3r4r5rqquppupooooopp2p$p&oo(nmkj?hgeda1^ ZTWSOO8JSEF@;F6z1,<&|  Vk&93Q\C}A7><;\9N77X758:=@sDIM{QU|Y]a"dg il-nopqSqr:r7qq0p`onnHmmmKmkmn nop)pqq0qKqKqWq{qqrsPttu|uvAvMv]uuGt[strrrrrrrpr+qq3pp^p;pp$pFppqqqqaqpConmwlvkjige9b_8[XT~OJE@<60*i$f  TEo3WdN'KHECAAAC)DH KvOSW[r^bPegil1n6p.qZrJrss>sis r}qponmm)llYlMl5lmIn9o op:pppqDqrrsIt!tuvDvvvv]utsrqqqqqr qqq5ppoo nnFnmmnn_nnnDmmfll~lGkkjZhfdVa_-\XTObJLEA;5-.(i"E O $XV.SP NLLLTMOS?VZ?]ajdgjgl(mo\qFrttuu4uouFutQsrq}pTonm1ll kkllmn`noVoopp}qqr7stu!uvxvvvMutsrqppzppqq>q%q ppOoo(nwmmlsl kkxkllilllllm&m?mLlkjige@b`]*YTLP$KgFd@/92+%9ra .WsL`Y^[;XW"UUUWCY`\_6be-h!km8noqr;stuuv5v2vutss qpo-ml9k j[iimi>ijWk@klmmmndoopqprstuvOvLvEuut rqpBoUnnnnonnvmmnllkihgg(f]f ffgghgi"ijkl9llllkjihtfecJ`c\VXT.OJiD8=,6/)e# Vgeca`|_b_g_j`begil8npr's sttBu'v!vwKw^wwkvutssqpmkih9gIfff2efUfghijklUm:nKo|pqstOuv/vvvcutslrpnmllYlZll~lkhjoihzgfPdcZaa-`p`_`T`akbce[fhjk4lRlmlllkjj=hgc`\Y5TUNGA:$3s,% SjihugYfeefgbi klmoqs$stXtuWvvvwKwCw@vou5srcq/pnGl(ifdba```*`z`bcQdfhNik_mnp~rsuvJvwgw&vutsqqp(n:lk/jyjii$hfe6ca`_].[wYYXqXXYZB[]k_b>dfhjklllllllkjhUeb_[VPJC=O6/U(%!$K i+mmYllBlkklm2noq rstuFuhuuvxvw)w1w{w+vus/q otmlig da7_][[ZZZ)Z\]_bAdfi2kmp?r-t!uvwowww`vWuBsr(pZnnljilhJg3ed6bi`A^[YWUSQPP1PQ1RlSzUYWgZT]r`cfvi3klilmnnnnn[mlhjgeb:^YESMF@81@)"z mmmmmmXmn op&qIrLs2tCtu'u!umuvv@vZvvusq:nligeb=_+\MYWVU0TPSSQSTUWZi].`Ac(fi!l nqksuuw wxVxwvutisqLomlkKig!eb`4]ZXBUS.PNLJIzHI7IKgLO QMTX\_cLfi[klmnoop!ooznZmjif.cp_?ZTO/HB:2+$whEmmn0ndnnnoTpDqrssttutuMuuuuu0trpmujVgd%a0^ZWU&RQ7ONN MMN+NPRUX\n_cIfj mwpjsRuEwwx~xGx"wTv}u#sr!pSmkXhmeb_\`rdhjlnoqqqqqhponlvj1hFeaf\AWlQmK9C\YUROMKJ;HHGGGI JLMPSW[x_Xc fjncqtvwxx{xkwwutrpnCk`gd`]XTQMfJH9FHDB@ >===?@yC;EIN RW\Sa2eNikn`pqrsPsrqqon}lk3hfa]XS;LEi=601)$ xl2lmkmn(n^noopq_rms*szsysst5sskrMqyomj!f[a]Y8TQ MWJGED BAA#@AuBCeDFMHJN>RV[4_~chblptvx5yAyxx8wvNu3s`qnkggcc_2ZUPL)GDlA?=;9878 79:;<<;:R: ::;=>?AMD0GLPUZe_sdinrvbxyyyxxwvau8seqnkig/c"^QYWSN0HCz?<: 754;3r2323<447#9=B=GtL\QW]{cgkknqws%tu=u9t]ssr)qpnmkJhe+aj\VDOI_CH=71lmnookoopEpq>qrlrrrrrrOpnkiGea]XRM-HUC@ <:o7634322\2|3u4R568:"= @aE"IO]TZ~`Qfkpu"w~yyyxwvCus2qinkUfb]XQKE?;S76410Q..[-.:.C./|1c37};A EKQX!^zci$lpruuv=uzutXsrqponljgb]WR)LFA<mnokop%p\ppqqqr?rRrVr$r_qpmk gXc_=ZUFOJ D{?;n8L5G330/m.-o,,,-.a/02v369>)BHNT[Uah[ms95F20/-]+++W+o+Y+,-/ 2T6;?EdKEQX~^diZmpsu#v#uuttsrqqp3o"ljfb^Y{TOK$FSnpoqp,pppppq9qqqqqqqpnk3gb^SXSVMHG A=;7H3+0]-+)(( (''(+))*,-t.03B794]0-2*(\&%%:%>%%%&n':'()*+O,.26941.,**:)))((~))o+^-15w:?FLSZz`rfj5nqt'uuuguuut/ss;rqpn8khf>cd`T].YoRp6ppp oooppEp[p-opooJnnnooSoZo nnn"li|e|_YS+L9E =71-)'%$^#""##$V$m$S$u$%~&&&&&'m*#-0396ABIQvZajotvx/wOvut1rqocmkNhe`fZ/TMwF@;3720"-,+,*Q)J((('(),.y2k6N;t@FMjTZ`#einLps.tu.uuuuZuuLut}sqp'nmCkigoJooo[nn3nn n5n~npmm2mSl;jofapZTMWE>7x1,](%$""W!!""#8####$+$%.%|%\$$$n&\(.14A7520+-*(Y's&'L''n')w+X.16`;qBHP)Wj^dinxqskt2uWuuNtu uIu0ttSsssMrr,qnmmm'lkkl lzllkiheG`ZtTeMZF>7S1P+c'$("!!!7! !!c!"}# ##$%%z%&%%%5$u%%)-4:[BIRA[b[iElop-ppppoo!no(nnljVfXb^[NVQ}KEc@B<9#52/+('t&&&&'()k,.{27P=DlKSZagm3ppssu&uGtt:t&t%%&''('''(]*,17!>ENVl]dShCklemYll|kkjk kjkk,ifca^\XTCNHC?;62B.?*F'&%%%%&;&(T)q,0s6=0DLT\ccjfnreshtttrsZrr[r?r)qqBqoqqqqlkkhk7kjjZjkkkFk?i!f`^ZS^LE>#7O0+'#%#|#E""!!!. !:!J!"$##$%&'())/))N)d+ ,1n6=DLT[b.f)ijkkhk jgTffnf?f~gAhhhhjh$grfedb^rXaR?KFD>1730*&#"!;!\!!!!"#&+0G7?HPX`g!lo@qqqzonhmUmm lZkklcllmkjjjkjjklXlkl id7\UNGQ@ 82$+'%D%-$$$M###""$!!""$&&(E+. 1O47;=q? ?@_AC4FIJM?PTY3]`bdezfff2feebef6g#ghshshhQh#gDfd`a['TMF?81+&j"w! f "R$A(-5D=?F$NoV?^e4kMneq>q[q2on lllxkjjk7keklkk?k)k$k;jk klllkhc[UMFY>7L0*G&$B$N####p#""O"!!"#V$'*K-1A58<@CeEkFZG]HJghKi:iii*ihhefJc^XDQJ'C<5q.V($3" 8`]2 !%e)F07@HPX`g!kospXpon>mllkjj'j]j|k+kl(kkklk@jjklwlkkg)aYS KD-<4.r(5%##\#"""e" !!!!!"#%)n-e2>6;^@EJNNQ"RT!UWZ\q^`=acegiiiiuihhh\hgghijjjiihh]f6cx^.X|QmJC=;6/*%#!!. n 2 !8$ 'C-4=EMU] d`iYmo[pWo?nllllkjjjkwl!l^kkkMjjujk?kl[D IOUSeVXZ\^ac-def{ghj jk9kkjjjjwj[jj3jkbl0lll1kNjihfc^`XQJDB=71 +'>$""2!M H  M m"%)+1:qBzJRZag"l=n*onmllmlTkojk k0klllkkjwiijejkDihd^WNPIBB:2,w&}#" ""O"e"M"@"/"L"""#,#%'+035:@OFhLRxW[V]`db5dfhliAij7jk&kl0l]lWllllll~lVl^lmmmmFl$kBih:eCb\VOIIC <751+,n(%##"!q ^ %!#(/Z7?GP W|_Aejlnmml-lll{kknkklmzllKkjj iAiiij?hgcR]UO{HA"9~1+H%k"!H!!!!!" "w"#f#}#$&(-17BJQY`:fjMlllklm!ll>l]lmmnSlkkIjj)i^iijj_i gcY]VjP/IoB:k2n+%" 8  !,!"(""$b&F),1&5,:t@5GN(TZ$^(b/ebikmnoyooopmpppppGoon\mm?lll^kmhea^+Z-V@QLGB=k9630,*t'&8$$#"[!!1  !%*2:LB$IQrYF_fKilmlRlkl:ll|l lKlmmxn!iibi@iDiNhhirjjiOh.d^WsQ5JeC#;{3w,&#! L e R !S!"<"g#f$'*N.16Y;gAHO)UY^aehkmEnno+odopGp~p^pJoofnmmOlllkjOfb^YUcPKFk@;74Q1/,f)(&($## "7!!)! ! !& +3;IBJR7Y` f;5.("$_! :lo " !!!"1"$j%((*.2J7u=CIOUCY^b{filno:ouoopqpp1oonnmfmllk8huc]_W QL[F@9w3X.`+)(&%;#"!! w n2R "'-6=IDLT&[a fijj3j+jj_jjpjak kl l(l[\_@b dflgviCjlkBjjZgccC\VNG@ 709)L%!e FPm 9 !^!!!"&#<$%'+8.O27=CIOUZ^cegWkm5o#opp pppooannmumXmm jgca2ZSMHA;;3p-[('X%%S$"!! -V:z3 m"(=.6=E:M@T\akfhj/iiiij iijkakkl%SVZ#^Mbdfi7/*&/%U$N#"!! RwyN un{ c#(/l7b>FN$U\b$g ij iYiui|iisiiij:j[jijLP2TZO_LcSei#jlxl/lBif`ZRKC;3,8'"k   X~  p n !"#*$`&(+.3U7=@BHNmSY^cgkLm^oopq7qJppSooHnonnCkf_*WPhICpNppqp oIkof)^TWO|H0A 9t2,($%I$$ ## "*!9 Kk4K.\ :$6)107?GNmVB]cgjjjijih4fdXb`_`]\[+3q172,=(%%8$h$#@"[!~ %lr 6"'-5EgKR*W]MafilSm9nn+nnnlkfv`YbR JvB.:G6c&0Q:^ENW^[dhk)klHkj&g?d^YiR\JB;s5.*$%"g ; K !!w!"T"#s####$'$x%&*0-39@FM2SYG_!c{gziklll;kohze|_YREJC<72/]+\('&n%b$#"! A*/@@ ")&R+02 8?FNU[aeik!l!krkj hcG]VPYIB ;40C+)_!*T4>HR$l$(##" Q"!$z(-4b:B%I]PcW]Zbfxj(klkjhgc^5UME<53B)! e <!>*"4?WI3RX`e iyk:mBm5*+"=M V (xb#i-w8BKS[agtj/lmml]jCf4b]XfRKEa?H940{,^)'Q&$##g#A""J"Y"##""h"7"E"D""#$'K*=.159?E-KqQUY|Z[Z^XTiOHA;$4/*'%=$"""=!!g TP"6$(,28?FMTZ`dhjmml[iheTa[pSJjAm7.5%   ?~&@0;EN%W>^feUi*l\mneml8heaT]WQK\Ew@G;262.m+K)d'.%%$$##k#k#}#r#*""U"!!!"#v%p'+-15J:a@GFLQnUUVuWVTPJC=60K+'g%""]!!r! p >aS d!$',18?>F M SZs_dgklmm khfb^VGND.:1A'Kd Uj ),3>)GQY a f.jIkmtmIljTgc`\/WQPKFB?>9S5?1/B,*)y(()''&&@%%%!$$:###$%-&(+j-14;8>FDbJ}NRSTS!QjLG@:3-)&$N""y!!!3 ! !s#B%N),2"7>E`L2SYA_Qcgilm5mykifc:^XOQF=3*_ q C !,(6@JSu\ch1j,llmlj fd`\WRmMIHE @<852v0c.-,++2*u)(''':'&z&b&'(B)+C-n/G14Y8b=+BHMPQR`PPNRID=7%1%+'$#""a!!~! !!J!H!h!m"Q#R%(-B18>cEJKRoYI^d/gxjlJn6mmjgct_YQH?5,!#8a~ _;9.}.X $.9YCNLVU]Fcfijl}l8k.hfcaI]wXSOKH%D@=x:L8 543^2y10/.M-C,,,,T,c,-.0Q13468;?DIMQQQOMmHD=725-*'&%%_$$I###$#$&$&'+ .v38?GEKRNX2^jc+gGillmlxjfc^YQI}?6. $_ "1{'1;EEO!WC_cgiktl1lvkiwg1ec _[SWSOfL*HE^B?=a;:c9+8654u3C22^22q23Y4y56879v:6;G83/-"+*u))(w(''u'H']'/'(*,05:@{FLR|X^ cpgjkhmjmmCjgc_ZSQJ`Ao8 /&A M8@P ~L 1*R3=cFOW]bechYikzkwjiEhRfdax]YV,S$PMJGED,BA??>=<;i::2:E:8:;f<=>@AABEC"E---./2048=IBHMMS#XS]bzfhjk@l@kHieb]YQRzJAs8/'S{lI v3a ]",(5>xFOWH]aeAg+iklkk8ihfdr`]hZ WTiQOjMsLJIbGFE\DfCYBAAABBD E)FQGHHIaIKMPFS!UVhUUKS9QgNZJFB?C<@:9)877v7 655444579<@EAJ}OYTNY^wcsfiwjSkkXjh|e~`]9WR*J/A8V/'VS {OK Q($s-g5=cEMU[T_bXehkFl"ljjwihofc_\ZXsVUSRQPDNMLKKJZIIIJaKLMO PPQ.QRTxV{XZ5[&Z~YWVSpPmLIFDSBAA#@@Y??K>\===7=U>|?B?DHLQ;UnY^bfhj2ijWhfb^YU[ODHS?7_/ ': &Z -%4BK ?n$,a4;CLTAZ[^adikmAllkk|jMhfca_^p][ZYXWVUU;T0StRRaQQRGSiT|UW XXYuZZ[]U__`_^\[KXV=SYPNBLJIII/HH_GFFEEEFHJ|LPhSW\` dRgTijYkjiDf1bX]XS MF7>5P-;%Dq f!;5!fa+ #*19DAJCQWF[^cgzjklXkkk1jigfOedc2bga{`_^]\[ZZTZ YYsYZc[7\U]y^l_$_``aHb;cwd3dcca`^[YWSUqSRQQQlQPOO:NN"N3N7OPRTVY]K`d6gNhj iige `p[qUPJC;33+G$%m &kN*A^ "(f/r7"?HPUY^LbgYjzllll3lclUkkjLii/hhgGf}edd)c^bbeffffffeuddDcbba]``x`[`S`L`8__^\]]]h]^t_`bdf>ghhh;hHfEc^1XqQLaFb?7/&W ;/uXw!GP 2] 4 q$*b1:LBJ(OTX]3beAgh5hiaj.jkMkl+lm5mVm?lllIl7l&kkkTjjiifhh=gfedd)cccdodefffgHghDhhh8hggggggg&fqeeMeFeHeeftggh+hmhhZhgwf@be]VPJD=5,$*fHE 4SV$7E{/TgJ6B ,w"'.7?;FFK0OSEW\_acacdefqg=hi j%jkskqkVkk,k%jjniihMg>f)dcb_`_^9]4\$[\\]_<`bFce;fh iikiijj:jjjjoiiiXi^i`iJi$hh]ggfeeedb_ZTMHMBB;3*"dH {WIn$OOeDCZ-U 7!$;+3;/AG,JNR5VuY\^``abocdfh iSijiii3hgfedca_^4\~ZY1WV5TTT}UVX[4]`BbdfhsiTj*jjkHkl`llm mm#lllkih3fedd b[`\WQLE@91( fV17f5T?M |C ZH '/.6H^<l: 4#-$' R5D"=XT3v=}o(+[c,R4:  D$+}036)7:b=ADCEEFG%GHIJKLMFM'LKJPHbFDDA?(<:&75s3$1y//V/602d5G8A;>B E~HKNQSULWZ#\L^M^_e^][ZXVToRPNKH~DB@7>??@@@A@Q?}=#%p'+()+-p/,012333334%4^44E321/-+D(&7#!p=lm #Y&),03M69s<*>]@BsDFGH6HHGFED:Bx?=96Z3X0.,)&P!$ '%1:7trQCS`ooR$ DFAsv !#$&'()P)w))9)(((!'&%$*"T av& x:"!%(+,-0Z2Y4[6+8%9;<=y=C=< ; 9630-*('+%Q#l4 " =P\d:6V0ZeVOvfxh9. (jU$R( \;x 6  " jI# w"$&(*j,j.X0k1222]0/->*'$"!: ; EGVdifIK~d]P^qr$E%+7Xp ^HhKrm=JOL ! wtbG S C 8 !#%'''6&$# c}W@ ) ng18e ^s3u]nt[fNUTZ^gZ? e}3y\`  V ` # <  q W p:h.X06S f rtHZ' =H4Nldw9'fq4o}}rI:_;ISdln[L!*WS4k 38;/-1a 60e&;k yD 1qtuG{<*.esQ~bI3?i1BSoztXH(  x4`7GdY9JT  4X{yvj]UND7) *Hyo B  R GL .@ O<~Gn:&/Tq~}6O\e_UIPC!Z^grt=RdUq=k0/ H[3J `5/#q_v7Mnv&%z$cyZ^((M]]^8U^VB89ML'$#.0=jv@KD{V>CLn35$i:%7Fcz5Le5aJ'@peUiDenI^6*/BHFH#AUYJ9/5;: '))6?LSdSny/_oXVUiZ7+21* kRri8w~[-&GsL[Z7qK<6ALNH #?VYN8&#:= .?P92JK0/jzW!Jo sovy}{u}vN)1hjCI)9_w{"936-p_LITVC&?Q`U30F3 3*@A54:HH1:nyN$^)=5:-vsztju~vff^@%(>@&qs=%;lmi}&=4/ qWK< (=_hN+'2>3:Q/(HVI6;La[, 7ds]0"Z<F5:0vhina]qz{zqikhZ=Bml; 9{e^h%>5* [9 !#-KciT2&7-CG.'BQTPJVW="'IfjP-@{!JJ*,)sdhsliyydQ6BmxiG03GliXYVk48  Q()%$.Cei=  <>GVA!MpmQEBFH8,1CW[I3!8b ?B  n`gwyyrJ#CZeX?8R}|kb^aTb7-  d:$$ =M8 1@1 1RV?8hyjUNK>66CVb^PAJ[5L40hXZhknuh= APKD:0=`mee # \=( 1& '')@F+5T^C*0S|pUC=DHOU[^abig;=C, kZV^ahq~W5(04?QUC,#/@Zq}r  ,0W6' 9  !$":K9'E][MEOhfKAFINOQT^mzt} <<1shafo}|a?*'48;CA1'-E\sy)+i:   5"  )#+88/&&0F^jg[X`r{nXKHIMMMIQf|)BN:#}x{s_M:0/2+$"&'3Hbt|cYS?$ )#    '05972.'2Rqxj]cmlc[UPPSVQS_u9I9#xbXVQMIB6.*05@L^q fC,  "!,!  -227;=9,,?_{xbXZ_de`YUY^ZZ_s+4(rhgkkdXJ?<=CHLJSjrO<%  Q$r..z9`\i_9Jb"oLf D N 2XL i i ) ) _ M N | , { nIg$nImJENq:  $$A[toJyiEcF_!R !!!0 !% \  W B 0    ; \ d  . 8 > U  S s#!n0Kn)] `{6 B\-@OUZD.)t\=OG;!["U#J""[!7 4 U  Q C $ [ 9 5 c # 7 I n q      3 O  1  c ZH@ }CiSi|3p;p P.e+,RiI7nW~/ Z  M  , m ( \ K  :   |Br"qmkr6 %!x_#gPqseAx&eq( P g m 2   , H n ) X { m ) u X _ r } l G '  &  / g  ` ) P  jiS0!BC?.^v0x4v}ygQ, G s]]6M D  M!Qi? d - y M ( 8 9 -   1 G i ~ A   4 ? 7 5 *   & & < m     K 2  T%(iq;rGC+zqWg)p2=$m [ S  P fN d [ t zzcGrG4;@Lo&{ ) O < (  0 T i z V  >Ob<(Qy,jFg2wevCb?v vX T - %  c "  o  d V )x}I?b8Zx<6\fB*2e # X ~  S N _m!r+:lfvX^ ,TvS.q<5D  ^ *<nk0FF^.YXPRVN*6oud9d_;pj  0 ? S  ; _ }  u W#19z1*]j8 e , , Lo   9 s U0  s< J;Ly1*5YopiP, 3azvpBLh{3AxgSW    > 2 m  k ]  F 3n1 x -  %  g  <  F ,?3Wy!8~N2`FI^WA'$CoF8h59-  6 Q   L _ Q 8 U ,  F u ? 3 ^ ? 5 M N K O L t 0 S J $ k q t #(hsg>?9aw$;;$y6H :F #8?Rr$Tjy}e5&mf6 N ~ 9 = v k b c p /   , , B jB-p- d QCRg[D( 2KTRSa*o X'Yc!   ]  + "    W b v k M C c < +   7 l e $"U_1,;f9 UdTVL9ZE#yA jH9EJQLTd#u X;]7-@qP3x  m   y n}/hWN 8>q~#P$~h"B|'h0w(s 1]r^`\7A:$Mykba.v_wO K j :{  3dk]ne.)~lq!. }I?a;|Hfmqq,Zy-KlU[>v(}q$slHZ\,Ka*ztx|], 3?@{sC:<s0B-YckKy@bkvh/>^  > R 'Om)amgijsP5 OAsY@eih~T@ns CIl2QA)}lk M  J(.YitVOnf\ N 9 : k # hoNu!qzwS! l$r?,@[<Zumb:[Zc Mk9KRS e>U / X!uPgN7*G'^\ o :z;K5l q . 68R '.ghn3-;gq<:Fj`YfK =c  yfuY/ 8 !T!"L"#4#$%&'(d)B*A+ ,,],?+Z*~)z('&%$x#a"}"!!!X $Busp2< j|{Y.imF|@:HTz_;=|N2b^ kV 0 `c ^!#"$%&'^'(~))*+,-|.U./0/l/0112K23455554[3v210/.6,++u+%+**C)((G'&%$"![J'5zJ 6HITaxM\JT-BSA$y;}? { %5 O$&)e+"-.0|12%2V23n495e689D:+;;S;L;:;);V;<<=>{?w?@ ??>j==<7:98'76s6 55t44!3h22}2E10/O-+)'&?$#"x!U3 O  bZP$zz;3#D[ + 'uS!&3*O.13628:+;?@BFCDEFkF~FRFEF5FuFGxHFI:JQKL(LwLKK#JJIlHFFE^D'CgBB[A@?>== <<(;:q9b76,472Y0z.,+()2'$|!6jO " `;WA]h ,^P9w=C @#(r,1L5 8;?"ACE/FQFGGHlIJLMeNOPkPPPPPQ&QRRS_THUWVWBWWfW'VVV?UTSRlQXPP OjNMjL JI,HGBFEDDHCSBC@?= :86%31D.,*&'#+s w*)~~>124^R x  @!%).3o7<?CGVJMOP PQvQRSUVbWY;rEc$1VD b   /='w!%A(,05:w>BFJNR&U0VXHXYZ Zv[5\L]_`nacOde}f\fffffEeeeLe*e&etefCfsffg@gh h3ggAff-ffeedddc,a`i_D^K]"[YXWVUTSR~PVN%K"GD^AH>< 85*0z+'J#! 2. |)F- "'R+/3p7<\AMFJNqR~VY\_`#aababb-bceGf~giDjlm%n*nnn4mmJllkRjjjjk0kiklSlmmn*mmkllfl@lKl9lk4j$hggfedcebHaU`^_^^ ] [@YeVSPDMIGC@8;621.*'@#VeX 2}x$"i 3_G!%)._274;? CfGLPTX\d_rbvdOefrggfffg ghijlmPnopfpppoonqmm!llllmcmnAnomop&pGoo\nnmmmmml5k:jvjjiihhggGffeNdc.a_]jZWTQN"JFBN=9i5Z1.6*b% %p  \.\#-)#-9+L(&$"H""#%)(,]05.:>CGKKeOSW[r_Ebegjk8l]lllulkkDksklm3mnop]pqhqsqRppp9oo2nnnnoRop`pqxqrerrr2qppCppp4p&onnmdm5mImmmmmmmhm@llEk:j,hzfdab>_\Y3UQ|MIwE9@<840+&R!4hz j$=".)864?1~/f--V-e/O1;482KFA;W5.(`"j i I X]ZX?U+RON-N@NUYl]uanehkmo+prqs tMu_uuuuu`utBsursqnpoonn3mmim llm8mnnFnnoSopqrrRs7ttuvvKvtv'uut%sqq$ppqqqqqfpppkp9poo~ooop pjpq8qNqApp~p%p oonmkjhlPlmmn&n}nnnnoOo\nn'mljjhgec`;]/Y"UOIBiggHfff.feffzghjAkmQo prtCuvwwxKwwvu{sr\pnmkkjjjniihfe-dba`__N_l__`;`ac dpfghhjlsmnnnnnnnnqmlkAi]ftc_[VP IAB<+56.U'!R `o4nnmmblm0mnpVqrtuvwwwwxKxxxxx1wv(trq o^mkiged{cJbbaa[a9a!abdDeh%jBlnqsPuvwxy y[xx{wRv.trpnm,kej#iChtgWeca_^\UZY'XW9W:W=WXYZ\e^`0b?dgoilEmnnoxopNp~ppOpnmk[iRf5c^LXRLF;?81y*#fLo_onnnnnoopqrstuv~vvw:wvwwww+vutrptnkigMeb`^]\\ [t[4ZZ[G\n]_adgojYm,or_t~vwyysyyy,xwusr p.nkihf7da^\cYWUSQPOsOAOOPgQS&U VYH[_ bei+kXmEnVop;qqsqqwqMpwoml"ig`c_=YTNHB(;H4,&?Woroloopop=pqrstu;uvv5vNvvw9vvutsq(nukhec`F][ZXCW#V'UUTTUV7WY[F]a2dgk#mps[uwxysyyyoxwv4trpnkifc`]Z0WT5QOMKJIOHHgHIJdKN PRUY]b'f,i=lmopr%rsrrqqep(nlkDhd`-[VQKRD=[6/ (J"nnoo_ooopKq qrstNtttu uruuwtsrSpmk/gda ]nZ@WDU3SKRPONNMN(NOPR'SoUXc\_cg/jbmpt vSxLyyyytxwvu1s+qCnkh-ea]YUQNLIHAFWDCCBBBBCDGITLOSXO]'aeilMnprss <a:6+310///`//002;4*7;@EKQX9^dHimVpsuqvavv`v%uttsqponqlZjegcT^?Y"SNgIgCno.op,pspppq qSqoq[qpppp;oBljLfnbt]zXiSNI>D?;|86l5@3311;001 12485`679<*@ELRX ]cj`E-KRjY$_g>mswzz=zmy/x+vu+s3q[nSk f.a?ZTsMkFu@!95"0|-*)(((\(X(5(U(D)*,/49_?DKRY`ejnprPtvww;vvvuutossIrqpnEYLT/[cjquyyz xxvuJsqo*l3gc \VOHA;61.+*_)!((u(L''''(x*,14:3?bELhSsZ^`Gejnqtuvcv4vvzutt[ssrqpnkthfGc`]nop p+ooooooonymmmBljfa]VPbI2B;51.,* 'b&$$E#$$$A$1$)$$$%'%&''$($)S-1{8a?8GIO>W~`go$sx%y"yxxvucsr"om ie_YSLE$>g9 30-g+))E(()''j''1'U(*m-1 5:I@F>M"T Zp`zeajmn%qsu(uRvv/uuMtttytssr pnlkigdnoioooogoXoaoUoDnnmMmPlkHgc^ XRJC<$50,H(&$#"""#9#####$ $%%Z%n%#%&/)>,3:NBJS3[ckq{vqxyVxowvSu!sr omjgc%^nXUQK,Dn>9531s/7- +*)((V'''()+.2{6E;T@FMZSZI_e^in)psstuuJtttjttpts qpo:mlYji\noBoooEo+o)oEoCo9nmllkie`ZJTME>60+;(%#"P!!`!!""""""###$##V#d#C%(.5x=F8NW`*ho,twxwwRutsr'pqnlj+fZbS\W/PJID=9342-/.R,+?)((('(V(*+.26:@FMT:Z`ejn#pr0sttttet:tttss4r@qjpto_nKmEnwnoonnno(oCoHnmlblBjhb]bVvOHv@92-{(&##,"!!o!!!"*"R"S"b""##$##R#/"$h&,x2:BK&S\Ye:lrBtvvOutsrqpoml"hes`[V0PJ~D>9z6;3t1/{-u+C)(r('('((),M.26O;~@GNmUB[agbkko prs,stsstt`tpt srr@qponnn_nnnngnpnoo)npmekksiEe_YRsKEC:7L52?/,*(''w''q'()+g.16L;VAHPWS]dXimoqrssssstAttftsvsrqpp.mmmmmmmnQnnnm6kzjgc<\VDO G@N92,n($]#%"."D!!!@!9!:63W/c,%('X&-&<&&W&H&'})S*.x2|8?LGNVx^djmpqsZss}srs=stss,srrUqql`l.l[llllm_mn&m|m kid_WQIB1:4 .(%#'""@"-!![ !#!b!";"#X#$%F&&&'!'-'(U*-2)7?FNV]dhlUlmJlUkjjJj@jk+kkkhf,b`]OYTdNTGBt=9=50,)D'7%%e%5%%&&'(+/05 ;`C.JRZagkoqArs8s$rr8rQrs6rrbr`rSqqVpkkkll`l.l%lmmmQmjhUc ]:UOG@79/2j-N(%V#z#n"""V!!!H!F!}!z!""#g$*$%&'(s()1))t*,1:6O=tDyLSZafijkjiZhggh,i-jkCkjhGeca ^lYSLFAl<7G2-)w'%$$V$$$%Q&R&)$+1M72?FNV]dinTp?r@r~rzqqLqDqrNrqqqqAppkkk+kkkklgm7mm8mjg~a[TOMcF2>712,l'%$$$.##p#""a"!" !!"I##$%'J()+N,E,-*,-/38?ESL%SY~_d2ghiahgg/f|ffgijkk4j0h#fdnb^xYRKEF?I93.z)&$o##[##z#$$%d'B)m.W3;CIK~SZbXglodqqqq#pwp5pqpp5p>pXpook/jjk#kkNkBl lmm m jpf`YRKDX<6&/+4'/%$$$:###i""}"Q"Z""B"#$C%s&(*,.0Z1d112w47<AGMSAX^b}efggfeeCedegVhjlklkjihfc*^DWP1IBa<5!/@)&*#j"">"{"U"}"#U#%2&+08@9HPXa`Ifclnq|qqpooGooo]nnnnnnvkjjk kok(kklm[llje^XFQ IB; 4]-)&8%;$L$d$.$###""f""s"#$%')+.Q0357l88d9;X>BAFKZP\UZd_=bxe4fffvfeee/eg8hj)kl*ll"kj6iOfaZSKD>60Z)%""!O!!_!n!u!".#%L).6N>FNV^eTknqqqponnnn3mmmmmmk,jjk k]kkklm9llid]FVOgH/@92f+'$$n#######F""""#z$p%'0)0+.25V8;t=J> >@>ADGK~O%S7Ww[_beeeeeae dde)f~hik9l%lllkkoh{d]VNG\@81*&"C!A N J [ T "Z#',`4;DM U]dkwoNrVr\rsqonzn5n6m`lllllm0kxjkk1kckkklmllitd:\KUN\G?70*&>####O#`#}##v#7""""$%c'})D+.26m:B>GA5C_D{EG5HKTMQSW'Z^adf]ftfeeeyeee-f2gigjkllllkkhe^WOHAW:3@,&"!g - C  : e!"s%*l19BKSF[c"jnr@rXrq"on4mmll6llllm_kk5kAkPkbkjkllmlvli6c[TMF@>6/(%*"# """"##""""#$|&!(+&.m16B:?(CFIRJLMOQT,VX[(]`d+frgggdffKeeele;eg4ijkl-klkkjhe_6XPIB{;Z4-D'#w!   !O$M(K/7@@:HPYT`hmqoqrpommml?kkl#lTlmkkrklkTk?jjkqlC6P/~($"z""""""""""# #m%&),049f>hC_HaKNPHRSVX8Z~\^_adfhiiiNhh$ggAg fgh ikkl5kkbjjLgdr^=WPII=Bh;5U.B($#!!x   #&-X4=EMVj^f8kopLpon"llPlgkkMkmllxmZDIOTxX[W^>`cdfg}h=hiVj.kXlMllm%mllnl)kkkklm\mmlkihea[UMG@:5q/E*&% ##"7!} =!9#)048AIUQYbagjlFmnml`kjkOjjk/l-lmo l?kkk jiijrk?kkQkgbZSLE= 4-&#y!"&!"#"G"##$$$%)%'q)-505m:[@cFLSRX]D`dfi:jlAlmmllmnannnnnnnnXmmtmnmn\n_mlijhrfzc_Y RKEB?:;5\/+l'%$E#"n! jh :"A'.I6? G_OWW_ejl|mmkjjkjjk=lXmn$opl]lkk;jiijEk kkjgMaZSLE=4-&#K!H!!!!"D"#N#$$%<%'\)-#05?:$@JFMhTY^bufChkmdnoo[onnzoop(p(popooo\nxmmmnmqlVigdb^`Z/TpNCGB)=N84g/+(&$_#y"F!R UZ!u&-,5=FN9U^d&ikmElkjjk,jjkhlm?nEollpl kjjij_kkk jg.aZSLEF=14-&#I!9!!!!!"A"#$>$$%L&),049~?FLSY_bfilnoppfp.oop pqqqppppionmm-llkifc`i]cYU-OIC>:63[/+e(&+$z#"Z!^ P!R %,4:7_4 1-[*!'E%$#6""!? Jb %+4a<DKS[ag~jlkk jMjkLk jklmTn%o9kkjjtjii|j/kkjjgb[DUNF>6B/,($2!!!9!X !!"0"#%##$&),049?TELScY ]:adhjm9630.1+0(&Z$#"!! BVQ!*%+4H;CKSZ`fiskpk jjjk6kjklm`nohhmhxhhhhijkZjjgcY\CV(OG?7A0($!!\ j !!")"""#%%'*n.1x6:@GNETFX]a2e#h&klmmn nQnop;pbpcooonkm~lkkNih-dp`%ZUQLH B=74E1;/H,*(|&$#"!! f# M!&,4jXk jjhd ]CW?PH@840)%z!  P   4 !&!"8""z"#&( +.2O6~<%BrIEMU \_afijj iij=jjxjk^lQllm3[^\M^)`ce|fhj.kjk0i+f` ZRKPCi:3>+' "  # x !&!!!|!v!"#%()+s.}27=D JOTrY?]b*ei)klmnop$pppVpKooCnTmllEibe_*XNPJD>81f+(&%%$#"!   M"(/N7\>F-N4U\bg ijBiiij2jvjBjRkklCIMRW\q`dgYj"kmGn1opq pppoonmm i~d]VrNH9B(;5-)%%Z$$##"F!_ ^\uw #*08_?GOV]bgki jiiiiiiijjjjk%MtP6TY3^SbUe h6.)*#!U}3^x G p ; & U!!#$&(+/C38B=]BLGMLBQ@V[R_cCfiYkmnoppq qpoonmid\UMFf@ 82*&f###k#s#"D! -aD1)!}$+e19@HAP1W}^cgiRjipiiiichhiiiiiE\I-N-T^Z_cgmikklk$ie$_WQ IVA 80*% "A+  !q"#%'B),0#37<@EeJPU>Z^ bEehk msnop8pq#qppoon*idQ\BTBLLEg>7c0)%#`##:#;""!e DAG.E +"&-4;BJNRY`,dhij iViixih:g^ffgfff=MB3HOOV][afikl'lkjfaZQSKC;M3$,&>"w6Am0Q !S"Z#>$%'*#,/263:?DYIOTYz^&bfil@n+op"pqAqwqq8onGic[pSmKgD#=D5q.(%o#H#e##""!!~ _)5Iq Q $D(/6>,ErLT`[afi[iiii5hh5fee!ddd ccY5P;CBlJvRZ!_egkllkkkh,c]VO6G<>6/($ ?#v) !s"e#6$@%J&(*,/U15r9_>CIOaTY]bzf?j;lnoppq6pqotm~h\bbZ6RWJQB;3-(g%###X#>""^!! Ex (N !%*2^9V@H&OSV],cg0iiihhh>fe!cb%a `+_^]N-T4eD.IOU Z_cqh k'mnop*ppqo+lg;a#YQFI0A"92e,(%###E#)""P!!5 Wz_ GXx "'6,4[;\BJQ+X^dgjiihhgfca8_]![uYXV&u.87F@ISDZaeikll)lDj}DAJ OUFZ_dhjkmno oop mke^VO$G>81+,w(%$"##d#9""S!!* <\nL!$))\/>6=DL.S-Zb`ehEiiwilhhVfda ]ZWyTQOM(H1;E8OaW_pd'ikll;ljhd`aZFTLD<5|/*"&/"A Tr  !!"s##}#$s%I&1''@(Y)-2)8*=DJP VR[aeikmnooBo$liDc\TLD<60/+'& $$N###)"" !5 )O@  r"&+19X@AGVNU\rafhj&iihheb^pZLUQNJ=G?DQ#,6?J=ST[a1fiukklUk&ifc]XeQJ)B;[5R/L*%# (,^ E !T!"# #w##$,$%T%u&7' )-]28$>ID;JxPW ]Xb/fiQlm8nUmlif"_Y/Q'HA+94.+ '&.$$$C##q"" ! = "%v)/6=DK2QX=]bf ijl]kfjfb[U8MME6=62 --*N'&%%4$##"! !#(1-.3:dAsHOV\b eijjiiagea \UVP ICj=73/"*4>_HcQY4`*dVhbjkkkkj&hd`VZUJNfGv@94>.p*%#k!=  M p !C!")"######k#G#+##%|'v+\/49?EKRX_]aeg`igfb^W P0H@93/+?(&&0%j%$\##:"!` Ad !#',s209/?FN$T[`eEgjOjjiVhf6c]dWPIB;w4.* % \$-7BPLT\Ca)f4hk)klkjrg(d&_ZTNF@93s.])D%"! !'!@!e!" "######D#"##5$v%) ,q1/5;@FMjSwYE]acedIb^MY7QJCt;50,('6%%R$$$#p"! h "^&"*n07)>cE\LeSZ=``dyhuj.kkaji hd`YSKRC;3,]%l  0z'p0;IENV\bfjkMllli{gc/_}Z(TIMUF?94#.*\&|$j"e!!!!!!"+"#A#|#n#n#]#S#D# #"#:$I%u(*.27q<{BkHNTY;]_a`8^YTMKF->71,)&%I$###{#@"! u u ^"%*:/k6AHQX6_[dThjm5m`mkifc_=Z7SMF[@:;4.*<'@$V#""!!!!"."##"""""""#c$@&Q(+.317=>CMIOTY\4]\BZUPIUB9;3.a)'#$z#h""""s"(!} P m"%~(.4;BIPWy^bgfilmmkijIge_YHPH?6-$' | @",7/AJRlZq`~fHiql`mmlkphfdb^YSLFA:5k0,>(&$##Y#<"""#d###y#"""""#N$%'*u,0a49U?"ELQSVXZXWIRMFr?k8W1.+'t%T#".!~!!!!; w  # %u).4.:AHOJV;\+aei\k(mllijEhea[tT4KB9/&:X  @Pq$/,:&DLUW\ucgkln,mmji*fc^dXRMGA< 6=1r-*a'&%j% $$Z$>$H$N$2###+""""u"#_$&$(]*A-=0\5G:AWGMaRUdW$UUSOIB;4-($"!: k } U +   " %!="%(-29@GNU[`ehklmlkiDghc_^VNEhy5>,"r< F<-} #*M4>HwQ ZEafiklEm5lkih\eb=]~XSOqJEo@];w7420N/%.>---, +1**I)))(()()*+,-/15: ?E}JOQSQOK*F?F81+&#B"}!!_  !!"S"#U$O%x(!*/p4#:&@(FM3SZ4_dhk%lnmligd `SYRIj@7<-$s Rj-D, ;#,7R@IS[ZbehikWkkjSigeta^YUQ]LHC@6<:8b655T44\3%1000F0///x0 02234f57/:L>CHLuPRTR,PSKG@:V47-)&&%$$2###$$$%&u'=(*.616<B GMSzY$_cg}illm?kifjc_ZRJA08Y/v&/ dE0 (%./9IBlLTZ\beg.igjkk>ji|hZfc_[WSP1LHEBB@a>=U<;;98x7j66e6I66&686789:J:;D"IOT$Y^cgik+lll5ifb_ZSKBk910a'o  e|&C #'09BKgT[9``beg=izjkj>ihSgdaX]xZ VSlPhMsK HGEEDCBA@x?i>====>>?@AyB!BCBCEHLSORUVWVUTP_LRGB =I8w5G210004///[/1/0h13f58BD*FIZM@Q?UY]Ha6dOg[hiiigWd`\WSMG=?&7/ 'v + o  )5>l_f z n'{/77\?HPDVMZH^brg.jQl3llVll*kj5h$f>dc2b`_z^u]\[Z[XWWV(UuTTTUQVPWXlY"YZ[[]4^`|abcca`W][ WTR#O3M8KK]KK/KJIILIIJ>KLOQUX}\K`*csfhiiijhgzd_ZVPKD<4,%p /}5'`SUL : Z&-5>;FuNSXa\Qa}eiRjklkkkkjihgg8fiedcc=b\a*_^^ ]F\\[[\ \]^__``b`acdAeef fdca_\ZXVYTSSSSSxS#RR'QR=RSTVX[k^Hakdg:i.iyihh eb]XRNHB:F21*z#M f14s'cm k 1 $+3_;DwKR>V[`%e%hjkAklllm%lllEkkk jVihhgfIeddkcccRc}cdrdde e%ee4efrg,ghQh[hFgfePcb`_)]\\3\!\\+\>\ [ZZZZ[\^Y`bwdgFijkj;ih7fubb]tWQsKF^?8/{'!  N'NgZU>s5 >#8)Y09AIENSW]@aegthhijbk]llAl3lulllDkk)jjiihggg]gfffflf/eeVddccd deeffFf#feemdd$cbbbGbbbbcbbaaOa?a_b bcdfhYiyjHii6gfdca[fUjj5iiQhhih gfedcbaaQ```abJccdmemfkgAghh6hihiifijjfj=iihhhii1i}ijdjj|jhgec_ZSSQLFe@:Q2*"xHO 6[)4?#Ue=G d#*3<C'GLOnSX \^i_`@a7bJc_deghThiOihh(gggfceddCcbaa_^k\ZYPX'XX0Y*Z"[\^`bdeg.ghijkk$klLlllqlkkkk^jjXiihfecb_\EVPWIPCk=7P0!( `O Ci)HFh:EUsv&>< sz_ (08$>aC?F;ILQNTWY?Z[q\w]_pa8bde0ederdddcba`_^]\[hZ>A DHuL0NPQRSU|WRYZ\[\a\\s[ZYXWkUTmRQP.NMKEIAFEZDDD(EG ILO6RUX[/]v_*`b cdefhAiIj?jejdihg eccZa[_a][YVRsLG7A|<7Z1*"O .g)S0ApuKg$IlO#M-; O&e,15Y7B9<:8c67 7 8:=q@?@ABC:CDEFFFgFDCvAw?=`;S96742q0-g+***4*B+-03o6:h>AoD]GQIL^NQSdUWZ[C\D[[YmWV*TRPNwKHC?:{6S2/*p$E_B p8fi\;Q/wZDk7 #&()+T-0o24x6)7$88U889>9::6:E9865Y3I1@.,*_'%B" 3* "k%Y(+z/436t9u<?  q  tG3&z;! "r###!y;<? S6g ay6xdtx_eLXYYZniB'mu ]<!j Q  0 0 |3y k V*Bf ? KVvN &9A ) m8d)>Gy6Qt> 2qCpxO=^6IZfkynS$9WGcxktCBPa &qynWJH+*P*!(n 1 g } , s QRgx{0 .!,csV hO6?i(?Xr{iP% %j[a P)N&}0 ,Tc]B2$  +1# HvDV X : /^~&jeS-rFJ'i4qu? r?*/Qq0M_e\YSWE % JhiBG>=6g' "$3Ly2@,$M.rhU>>)1:\)LYCX'bsZc0 *K^a^7U^T?7<QQ.! #)>\gK zX7_QW~+@2%^:/Xal 2R@63 {ziHntN)c@65AHIG&BT[O=07??%-) *)'->_a-'<9p{hg~YA'>:)#"eghMKuTNlF]Y6rRH<?LRG$?]eX;'%<B*=) "7>&5YcH\f0Yw wxhaj}dH/7[~hvD6V},//$ tgPGU[C 'F\fV36M>-?3)*)3C^_: '\P,d );6:0zrsf_`o}ubOCBIC+Ql;(J <;2 wXQF!+CahO0/<K? >R0 +DA9M`dQ/#DkrP U'BH8>9#yg_QNN^ykI" 2]kT.Bwrt)HD5 _@& $1NcjW7#4E4HL/8MV^]\TG<19WkdE)3w*PP144#yh_UWYhlE2\iU1!.Em~tvkw 38  R+%%(2Eei>0FA(PZ9!OtybPJYfXECMWWM<*V AG'(({jaY^fwh75JUH* ?qzrv."! e9 "(!!<M:%8@2 4NG+=oqZZ`TF@FOX[UCFY4J77+zdTIO[oW-@ND9,'P{xv  `@* 4**-(!'<B+,@E/"3\pZNIMKKILT^dnp6;F7{cQBGTl}kM866CZ`J+#,Ff~w  #79Z:,! > ""))!";L>&%:MJBDVso\UWTRNNOZk{y@G>maRVfmQ>367<ED."9Kb}(.g9  7%  .+&1?C>2+/@R`cabiz~nga[WTTLO`w~.MW="{xmo~jYKA92&#:Wgv{e]W> $! &-26>?6* *FgrbgruqmeYQTYRQ[q!DR<%||k__^[TG8.*/08DWfzhC,    "+!!00,4:8.1V|~cWZaimgWLQ[WW]q5>,~omrtodUFABILLHN`~~ZB' '  Jzfd{%rZ7y1LnbU5% w o +     & h T V 0 qKj)nOuIGKn|7   #&=IV?nD}Dj}RsDTJM%Uk8! O  K \ A      , X n  , : F [ Y ) z&k7Qo,\c"|2 @[* 7DIH0%yH "ZrXGV5 [n J  # 4 , Z M C c  ; R l x      ! 6 Q ( 6  h `JB#EiPc-e3_(zlvO84 8$ c  1 ( >   ;  1 Y G   D $ ) F!$x$rpgq:" nB!:#a$9s-@~ mKv ] * _ D   D v  ) K e e ) k S ^ k } q P /   4 m ! k 1 V okS2#CB?._y4v1t{oaP"i" h SX% q~.85 & [ U k v L    & D W e L  " 0 2 0 &    ! " = o     O 9  ~ Q'*gr<sIC(scUC 7q0N#q e  o ed   R ?S--?Ue}, ! J < # , M a s W   =K_9%S|+d=[%j\wy)Ls@   P  I  \wxzqI/4%S?J``;&2g  T P  J ]gj#? i^lRWXie |M" ) $ U )" =6bD_*g[X^VE+$-X%vw Cwd<{k  % ; W ~  ; \ v q P-2|1!X_8  =\<! f J @ 4\ 6f:<)&,=RV\'Rt413Nel`C% Fy"wBJn<7i[M[    ? 3 j  f X  D .m1 q '  !  k  _ + , }  ) W 1g a+]EEnp5 `*Q+*EVO:# /SJ; r(5=$7  ) ? U  G [ O 4 N &  @ r B , Y 9 / F > 9 H R u 3 $ &  Z14u?A=Nr7O{DB%# !  $8D\x,Zl|iB7&tg< J w 2 3 l e a f w .   + 1 "o;IW5k'a+sMENze? =]a^m.s M/fy&W %    R a v l R H b 8    0 ` l +T{{LG6$?ASY$oz_4Me;Gip`)^-fHHVjc`m & \/qlW +</4 h|M5x l  s iu/tSXE#8Z8^j 7 pt (V)5bo/#J4|jcSM6+7idui.n] {J L m @uy@+?'2afg6B RVD^fbJEV hF3oJj,&u8Fm7c_[H_N[P}!p.skK\[%J]ul ug4 +96rqi->gl3q{pqa~zu! rs j > B n ! C  RO2 P:v#Q=i h  c~T8ci =[;`cP  8 >  : s D,h";pA__\ , " [ %    ztjq$W p*s53U2[xmZ~+UQ ^PB#MQ J B~F){XL q! !!!!) +5O04>)16_ n J V t )m e$+fil 'y &|5cm;9>]NRj2!Kf.S  $$&Jt !g"L#$ %&,'H(Q)Y*)*+r,%,,,,,+u*)((&%$K"!! TbSrg%U13l ( l?ai;x5.=Lu\;@"owA(j*E2 \q?NGR!F"$R%&x''(!()*r+,./$01 123?34]445z56655y4453210/@-,D+3*t*)(( '$&x%%]$z#L! ScFu  #ZH[-GAH1E5%wqz{E-t L V ey!$'),~.c0@18122v3-4 5>6f79?:;<6<==X==>>4>e>?7?????>>>=K<;{:(87"6 5G44P3211B0003/l.,+)'&i% #"!j. z PaYKM w|r|!7k\8@crI>IM E#u'+.2/58:;k?r@ACODEFG GdGGH4HIIVIJVJKkKKKKKJIIZHWGE~CBAA:@{?}>9<;;^::i98765U320(.i,*) &$Q!24[ heYh C[~] !8f:V S[yt3!%*x.26c9=@CE'<":$753E0.v,H)&z"iT) 1C ?C>_2ML+_G S Gb7!$(d,05i9=AEOIBL;NPQQjQRSU-VuWXY[ [\J\`\{\\\]\]]^.^^_k_``````__v^]\[[[ZZXW&U[SRQnPSNMLKKXJvIdGECA=>z;863n0-%($q Y*. F A *:y"(I3  * ;  %|Z"&^),0O4#8_<@DHoLP0SVXXYZZ[\^_U`sabzcdIdddddydldddXd(ddKdde%eSe}effGfgfeddNccceba`_]\[ZXWeUU TQSS QPNLJGC@=;78440@+'$"#.= .  $ !$!8TYoo  $(,04'7;?CHL PSWZ]_N`abb:bc`duefghijkAkkk:jjDiiii9hhhi#iij$jwjkckkkk+jj'iiiihgfeedacbda_^^]}\\![GYX-US OLImFCX?;7q34/g,(%k!5 0 R/#$[" 18!]$ '+0%4a8`<#?CGKtORVZb]`bdegghggZg]ghijk2klQm!mmm`llkkYk#jjjtjrjk8kl lylm/mmmmml`kkkkkkYjiiZhhhyhgdffezddxccEb3a_<]ZZXTQNJFC7?>;87^30U,(>#f[! X{j*D3*/#-+G)'^%%%'q(+.27@;@*DGHjLcP}T%WlZy]aRdfhj.klUmm-ll|lZlm_n!nno'oLooocnmm?lllllHlIlzmmn5no o_ooppoo@nn[nZnynnnfmmymllllllljl^l;l kkRjihlgdb_\YqUR@NK5GhCY?N;D73i.)k$a 2b:8-:9[642101*24Y7G:?CfGKOT.W[^a'cfi(kolmnoqop8oo`nnnoSopoooooAnnmLllllm3mMmnnop3ppq/q1qNq:qppooWokooooohnnnxnNnRnXnnooooooonmlkigeBb*^[XXQUTRRNJF*Be>x:M5R0*^%  O0HY;G/EiB?=?BFSKO|SW[_behj'lncp2qqrrs!s rrbqqppqqMq[qpp5oo|onmmmmneooyppqrss ssssssqiqrrIr:r qqyqPq$qqq"qqFqr:rrs's rrrUqqjpioWmkikgQeHca[^ZW/S+OK E?9j2,&mM w$g][XUSRRRT;UX[_ccfjJlo?prstuvvvvWv%uut"sKreqfpooooo{o-nnenPnhnanUn3nBnhnopqYrEsYt_uPuv_vgvevuutsr7qq^qqr@rrrxrCr-r&rrrr'rrrCrsshsssssssirr poqmlvk ihWfyc`\YUXPJD:=6/(!t X Fe c=`^t][\\1]_ad/gjloqsstuvw^wwwvvYuttosHrOqPpon!mmTmBmllllm m0mTmxmn=nopqjrbstuv#vvvruutsrqppkpmppqpppTpoooooloJoDoAoop[qqqrrgrrrr/qDp`ognmlkji g,d=a`]}YT~NGA :93(,%yQ 1ukj8hEfeee;elfhGjwlanypruvMw wHwxyCyyyCxxw)uts[rFq!onWmlDkkgk:kCk'k?kwklFlmfn/nopqrsu v%w wgwww3veuts]qpoono3ooonmm*llkkBkjjkkvklm}norpTqOrrs's'rqqUppypootsfqpAon mmjmClkjigfeedcc bbc cdefh)ikUm npoqcrrqq|qUqDq8qqpp'nm2jhea [#UN3G@92]+"$- t ppXoovoso5owoq&ristv wix}yFyyzz|zzzOzyBxgvuksrFpomljh@feeddhcdduefhjWljntphrLsuvxeyUzz3z_yyUx8w/ut-rzponlls[qqoml7jhfec.a`_^^]^^`1acf)hknWprtvxiyzzzzz y xvuHsrptnljifdPa^\NYWVT.S QQQRSUWY[f]`d9gjxln.opaqJqrrs.sCss2rpomSkg/b]$WQKE(>O7{0*%A ppppqq6qr8s$ttuvw`wwxxlxxxhwvuos}qknljDhfd"bp`^]>[ZYXX WXXZ\P^adh[knvps6uOwy>zzz{ zzWy{xw\ut@rpnoki=fc`,\YdV*SQDOMLf(<@Y?l>U=Qmk hd`\X`TMP K!nnno%o\op pSpzppp}p4pooo*nHkiBe$`[VQtLH;C@S=U;::t987655e4445}6S78:>CGHOU[afgmhrvvxzz{ztyzxwMusqnkhfa[U.NgGA;^61/?,+***H*+9,.,-/26<@AGMnSZy`fkor]u;vwwwwFwv>ussr@qBomkshebr^[WSmn6nnno6ovooooSnnznEmmlk]h#d_ZTNI^C?:759423L22K100/K.. --.B.0P035;ozrEtvvvwIwvMu;tssrqonoljhfdPamnnonoo3oBonnmLllkkkhjem`v[U&N{Gi@z:~40,*Y(f''!&&&&}&n&&%%_%9%)%x%&o&W').230:kAIQZ)biptxxyxx8w/vGtsfpn\jBf`RZXS"KD@=72E.+)( 'b&&&&&D&a&{')-f16*:@G&N(U<[afknrutMuuvvv/uXttu=ucu`ttNsttsrqponmLkjonodoooppDpcp$oo3n@m/m kie:`YSL'D|=50M*'$#""/!!!!!"&""""W"##/#+"##'*1#8 @HQZbjpotvxwwvutBrq:om-jfbD\vVsOHB[<7?20I-,P*)(('u'Q''')+/W27W;AHNU[af~kRnqZrst?ttetsttjtOss0rnqponmno0ooopCppppoommtkhcm]VOHg@92-v(&3$#""3!!!!!!!!!"/""#"#"##`%(.5=FE0MV|^flruvvvauYtsorgq pn;lGhe4`[TNHA<^7S4%14/r-}+*8)'''Q''(*,/|3i79>FNV:^ellorTrorqqoppp=p4onlifb:]YSMGA<852/,*X'&&&#%&N&'(+-2"6=hDKRY`f k5n$pqrrrrsstHtutKsssrQqLphlm"mn nnoopQpooMml-hFWMUi\bhl~oprrmrjr+rdrst(tsssUrqpl|llmimmn!nooonljfT`YgR`JB;4v.)L&!##\"#"""!!!!"L""#5##$L$%x%&M&'(x*-r28[?GZO,W]dhlummIl)kJjj8jjklml@kijfcG`<\TX>RLF+@m;7&3H/+(-&'$$G$$$$%b&'*.4 :CAIQjY_f>jnCoqqrqqrrsnsbrs rrBqfpl;l&lmlmIm0mDnno*nn`lPid~^W#OHM@v9N2X-/(%e###A#`#J#""s"Q"m""##|#$q$%&>' '(c())*,166=fDYKS$Y`eJiWj[jihggghuik klkiifdRa ]YSKE?:r50,(w& ###8###$%%'*05=EDMQU6\4cWhYlnpqMqq.q qQr"rrrMrcr>qpp=l(kllmllvlrm>nnmmkhb\U(MF8>n7p0+'$#v##s####T#"""#6#$$%U&"'8(Y)*,,-j-:./Q3?7>FDlKQW^)bfhdi%h"gbffAfgLhj\km2m lMjh'eQb^YQJDV>082-) &)##4"""##f$@$&(-2:bBJ:R3Y~afkn?A5CFJLMQU~Y]ade@eeeeefmgehjl>no$poo}mliek^UVNG@82 +&p""N!"!!!!!#N$(E,4;DLU&]dkos s~srqppipoonnnYnmml8kkkjjk>lll4lSi/d\AUNDF>6/($"-"!!"6"#"#g##o#>#d#$%&(3*-704Q8.<'?`B&CE`FGILzORmUZX\_be`f5ffeff0fgVhj kmcngonnmxliel^}WEO'G@9?2+W&z""!M!!!w!P!!"#' +<2:8C;KT\dktoslst7rqp7ooo)nnhnn;n'nUmlll"kjjkJlll0l4}8=!ADGIKLN"OR=TVY[^adfgHgHffFf@f(fufgijlfmznmmll9ie^CW6O;G@9w2+&"!!C!!c!E!!@!S"C"%)08AJRh[bjo}sBstrpoxnnnJmmnnnCnnmLll}lk;kkljmll}ic[UME=5.'#!!!!""N"# #k###$& 'F),/38MOQS TzVX9ZX[]Q_823+'M##"`"" !!! !B!#V&-[4=ENAV^flnpqPqpTnmlllWl#!q!!""a"#{$$%%L%&N')R,M/p459?6E|KRWN\f`cfhXijk kckikXkl_m{no?ooooToC5.'#!"!"6"h"#x$&$%:%%&\')',*/A48?)EL>RXx]bfhk:lymmn?n mmnpopmpq/q qpppwonmm)lkjOgebu_c[VwPJ|DW>95!0,W(&$#"! _ H"(/j8*@NHPX`fuk`ln mkjlj0jjujk}lmnpEnPmm|llbkklXm+mmmmTid\V_O G'>6M/"'$8!"_"-"""#d$$%8%&&B'u(,/38>EKRX^KbrfilSmnoodoOooopqtqr=rr qqqp nmrlOkaigda]Z.UQ KE@J;g7l3`/+(%$t#<"!z zt:`"'.71?G*OTV^dikZlkjiij*jjzkSlmnp%mSlllkkCkml#lmm4m7j e]WOG?72/($"0"o"8""""#$%$%%i%&( *-2;6<9B+HOU[>_bcfik{lm{nn5n:no@pLqBqrErqqHqpyoimljiog dE`t\XjT[OJE@\;7|4H0-*{'%H#"! 0#Q"](1.7@>FNVT^/chjikk'jIigixjjjjkHlmbnmokkpk;jjjijklrmllieZ^WPTH@K70)g%B"U"I!"Z"."/"m"#v#$Q$$%' ),049?RELRX\a=dgiklmommn noqqrGr qpponm=kigdaO\XBSxNJOER@V;D71315.l+)6&$#"o! %QC +"(n/ 7`>FNU]c2hikj{ii,iaiijHk)lfm6n%oKhhMhUhRhhiRjfkclkl+ie^XdQIVA#81y*$%"\!!J!!!!"@"##z##${%(*.,16\;,A%GMSX]Y`dglklm mpn=oipqrqqnpp`onm#kigb^Y_T8O J1E]@;-6u30B.],*'&9$}#="!P U-  #5)/7?mFNVs^cbhijj]ii~ij=jjTk/l^mmneKeeJefdfgi"j=kjkhiOe_YQJA9~2*&"B!M { !!T!""z"#,##d$)&&( +@.V26~6z.(#!  I 4 ! !Z!\! !"v$M&<)+/]3@8j=CInNnS#W_[`d$gikzmnPp?qrs@ss=s#rdqomhc{\T}LE?83L-D)'&&&&%%&$ "! }2VB"0%,3!:AIaQtX`#dijUk>jkNkqk`k jjxk0kl kkOQUTiX7\`cfhsj jkjifd_#WtPH@8h0T*F$! ) = U L   !Q"$i&(+/3l8=wBGLQ%V&Z_c3fikim5o`prIrsSsFsdrr]p$mh5b9Z;R0J>C<5/)&$%'%4%%x$$J#H"4!: nfM} #]'t._5EM.T[bg4j~jk@jk5k=jifhnhhAhhSgg?DIPOSU\-aeTgijlkjk+gc6[UME=52.Z'# k-0Ku  "#$&( *,/o26:?LDDIaNT X]aehkn+p.qr r/rqqnke_VNF>70>*& $#E#####]""=!u Di !"&>+J29@H"OQV]dihSkkkjijjihff?f feyddo7=/CJvQY#^cfijkkpkhe^XQJIA+81*&)" C B!"*# $K%q'(*,/q259>kCAHNSqX]aeyirlGnp&q?qHqppamj c\TLD<5.)=%d$Z#;#L###+#"""!6 Z<# "H#'-Q4;C>J~QX_e~hk.jjijih-f dXcb)ah`O_C^W/6s=EMVK\beiajl kljfa,[TMEM<5w.5)$R!V W!"##$%'(*=, -0S38T=BHONSX]b?fjmPnpDpOppoal)h7aqZRLJPBE92+'$#"""x""m"8"! ~Q K "|$k)=/+6>E0LSZ`^fQiOk jVjisihfd%a_^ \ZYNW(0I8A IRZY`dhjl kldjhc_:XREJdBH:3I-(o%#! vWN! !0" "#$W$%')(Z)*R,.x27+71-'$! @JN . !"+"##$$!$>$%$%}&"(+0x5;AHNU[3`Ae_hklm{kj;e`kXQI}A(91,'%$ ##W#:"""x"!  q"$(,3\:AHOjV[`dh0iihi h$F###5"""3!w yi #&+07>F.MTZk_ cfli:iihhgea\VQnKE?9520.#R+5?ISNZC`ehjlIlGlk*ioeb]]-WPIB P = !:!"U"#.####l#""m""$0%(,2!7+= CIPV3\R`df/gec^?XPI~A:/3-)&6% $5$]$##2""n!!) :j "i&;*;0 6)=ODqKSYA_bfhwjVjTihbh fc']X@QKDkJQJW\K`buca_kYSL?D=6R0z*'%$i####m#""&!x C o!$)(.4;BJ$QGX^{cfijkejigg-dj``YSLQE=5.R'! t(2d=GPmXp^dgk l,m}m ljwh;da[V)OPHBC;6T0s+'%^#*"~!"!!""u##q##k#J#"""Q"E"J##%(^,=/4:(@KFLSIX#\^`8][CUrOxH@92-\(e%##t"#"""";! Fw|H 2!1$K'-k3e:AHOV]bgdixkkkjiTge~a\sUN#Fc>{6G-&zf <s!+&5@JS@Y`e~ikmmmlejgd`[U}O3HB<61M,L)&$#^""Y"$!"%""#"""["&"!!!"#-$&),165;AHMNTY([ \Z+WdQKDf=C6g/l*[%$"["D""."<"!!!f 6!l# '$+28@lGN|U\Ebfjlmm*l{jifd(_XPyH@7/.&sF !; w#.)8C&LWS[aSfilslmmki|gsc`ZU(O+ID7>083?/R+)S'%$$=###o####C""q"I""@"U"#%&)<+/(38>E KPVGX^YWXTNI+B :4-*(Q$1"!M!^!D!!!!Z } !!$M&+07?FiMkSZ`f>ilzm?n+m>l igdaE[SJB:;1-(e tF &M0;qE=MV8] chkklUmmmSkpigd@_ZU?P@KE?:S51F.F+G)v'&%%$$$m$R##y"""C"V"d"#W$w%'),0`5;MAH:MS9U~W TQLFh?[8@1t*%")!  \ m !!3!x!}"#'#*t0 6'=DL1S;Y`)e+ilnbnnmIkhfb^VNEH<3*>!F !8x (j270*3%"7!Z !!!$!u""#F#x#$s&H(S,A0<6%G5@,n#Ri`,y4c ( U*n4x>YGOX_sdgjmkvllljgi!fd`,\@WSO+JEA= 976t310g/.-,,h++_***%** *W*+5+-.0_3 7g;A}G(LQ5SaTR[OIDt=60)%"l!!!f!4!)!!f" #;$&$%&'*s-C16GPX%^bfhBjk\kjj1hg#dyag]yYURNIEA>;97655<4U322<111|1}11223346{8DJiPKV"[a.e{iCkMmnNnm jgH+PeX^behikkkjsihfc`X\YCURNAJmG"CA?>C=<5;E:r988<888^8{889h9:;:<>-A6DHM,PTV#WTR5MWHB=7v1.=+a*)))O)()\* +I,G-/1n37KFOV\`cffi`jkkkAjj,h5eb_;\_YbV(ROLyJ1HFE D CB\Ac@??l?x?@"@g@A"ABC4DUEHJNR>U[XiYiZ WUQiMBH:C >9@63[2111s1Q1 191235,69H;?DkINS"W[`ddgi|kkll@kFifb^YS"KB90'  zApi@ 4#,c4=FNV[f_bfil l{llxll2jhIeb`l]ZWU RPNMQLKJ8IIHqGlFFGHGGHAHIyJWJLMOQHT8WMY\O\]W[pYAUuQMsHD@X=k::-9999999'9V:V;W=>A@CGL`Q5UxYe]aOeDgijKk'jj4gd`\WRlJB9{0(r  xh {#++3U45-&C 2w1\! ,C!(1.:~CKQWZ[aehi=jkklmOmmmkjjhgfJdcba`_w^]]][]\]6]H]p]^t_!_`S`awbtceIfpglg|gfmdbg` ]ZXVUSST TTTTFT(TFTUVWY3Z];_begui%iIi#gg.db]SXYRN*HB;!35+o$w_* %.n6? ZY'u/8B/J5PUZ_QddgjKjklcmqnAnnnmmlkjihgg$fHeeddddHdccd dHd^dPd d+defghhhhVgged?b`_b]\\\\d] ]a]M\\\\]^{_K`bdfGh=ijdjihfd`\UPvJE?8&0(j!q z@aNv. \ }h%-6?GM2RHVf[`df gcghj+kzlIlllll.kjjiihh=ggIffffdeeNdddcsbau``abcdeFefA;4-%?` dY i{Hr 3P~Y72  R#+o4 `-aKbcdefyfg0gXgggh\iMjGjjjiii|iijjjGj9j7iigfd'a\WZPJ_D>8R0)D! Xg"-;x!BX(X' p!(19(@&DHKPT6X1Z\]l^`ajbcdeleeeKdcc'bbbBaa``_\^r]\8ZX}VHTSTTTV W2XZ]_)`bvcdefghfiBjkllll>kkkYjjihgsfdcja`]jYeSGM F|@;4-%}  3Uu$GI`74JdOkbYi l%-4;?BOE]HLP'S&TV~WXZ,[] ^_```e_h^]]\,[gZYXlWxVeUUSR PMLXKVKLMZNsPSV X[V]_|agcdf9g[h}jkmmn4mmllBkigeca_^\HYTO^HB=n8C2*"3 ;<@bJ"+[0I/=]26H*% B2!(/5^8~:d<:87 43223458I;U?BrEHnKMPSUVX[U]`=abb2a`F_]C[bXVXSQZNKGB=`8M3/*$C ' ~ &=:NJeCm#1bYn, I @ j#C')++. 14;689:;<=>?@I@@@?>G<:86420.,*(' & &C&p')#+.2`58;>AD`FI,K#MCP RU-VOWVeUTSR&PN_LIGFC@BEGdIzJfJJJUIIAH"FDpA>N:63/k,(%4 j :]5b\rl0Bv'WT"HSl ( e5l2B #%&(()))) ) ((''%$"!EtKR!$'*9-/23579 :<=s>>'>f>0>"=;96 25.e*(%#k Vum Q>1@6mqD5G8mW MK WNN4 Yj_:b d WyQ>!$/&q(()*,.013 3d33y371/,)&" qwc W lcB@d7Y_OGlc"' o llk. c B 2;2kQ3  |$ q F   2!$ &/') )k)((1&]$6!NSN 8,r(tXllUQc^QYiw!9<.*}7kXw#; - V  }nZhkIY/!p~m  < O0UI*m~@+u% )dc+rV b{?hsu_hO]_]ZlhG 7Vi!/>HZI\Q&e U =qS N: ] ; xts PN$fFUf&*fyBytJ:^=Rcnoyo]/,*&UWxRtOw: Z" R2E> ko~X0 i  >X:n6  ;%\lTcL3=g0G_xj\= #`WE|o6 0!6V$<eyt8u6/w>5h+kr@n<)/Qp2N`haZT`W),1JmpDIzg_Y n;OVU\o(U 42/;Sj%n+8Ss@V XoZ f0(J^bb6S]S?6<TY9 1. (&-LcgE*H\y+e2 8RheXT]rsmtCs9 ~ E`iK+ mB32BKMN*GYZJ80:FJ3#:3 !*/4=\^%H>%^c?0=LUL:-,A@ 7Kio WgqBPQ7|UF>FRTJ0J__Q;+.KR" 2C'/>#-TZD!6k`=dlcamwF(D}%xE2R($*& vhVQZZC 0J\gZ8$B]M 3?, 0-$0DXYE,0fN ,i *A@C4 nigmnuYOdf`o>.K~ 5/*|_SC! /GhoT48KXI?P)5DB=IYh_6%Msza/ L,GTIOD'j]X^^fww{c0 JurJ# Mtu)B8+ _?$#1Qio\A1?L;EB$ 3IUZYdcO:0>You\1)s0X]AC=&}cQMX^k}oS- HbbJ44Hrvjy 66P*$ !.GinH6LI"BJ2Eosa[]giYF?Jdp^<#O GR33. {]IEVdwzF2FUO91Fmls6#!^7$!=NA(",@I9 +ED/6kxgedZNACYliV<<L6SCC4y\GCUdv_- $=B930(5Zvp! Z:' 4 $ -52*(/CH,)CK4"2[x`RRXQKPY\\]db<FRB* {bPKYgxtD(,7K\U4 4Uwv ).Y9) >  (21'&AQ= 9OKACUqv[VZSPTZX[ixt~$EJA$|gZQ\n];0<HPTE$7Ro%%d9 8% (4.'5CA3$!)=P]_]_kk`\TT\bWQ`w.IR<* pi`h}w[FCIE<3+4Yo{e`\@  *%  $*-6<>8-$+Hgzxkam}|rmeWQ\g[PUj}$ETC1z{xtqreWSQE932)-;WlgC-  "# *5*&1438:5,#8Yyu^Y`gmsm[OYf^SRd| :G9)~rw}tcXOA;=B<9;NetR@& )  "]]Hu"mn^ ?^~a yIx@ B <   a   Q \ . xPp7&z$WEGHes1  "(EHF(>VprDh'*e)*8  e ` m a " V  ' K a M '    ) P w   3 ? H \  [ , :&uBNi,a h)~. 3P% 9GG@!jAqy2-&p N S A  Q    + 2 1 a T L n  9 \ v #     * 3 J _ = R  w`G@% GiM_}$W#t0?=X-L/ n Z   u V 9  " 1 8 ; ,  F   B : d N  |   b 0 < I#&{ nqdk5  ^)m#pzJ "  8 s `  v u    b =   C n % I ^ ^ % T > Q b t x r w n S 5 " #  <  ) s 6 X vpW6)HD=,_}7r1}ybKSff% }n3 R { e , f %  ( Z x ^ ?    5 H S h | | D          9 u      L 8  `64mw<s%PH"{mQ0 p\ f  w @ O W B e B ) !   =T6 /J^t"  > (  3 X f p ~ T   >I\7#W{*d:a,o]rr o;3[}  :  q G " uEM@}8)MwEPmgC.%?t  V L @ Ry[c:]XoZ]N\]j f \ UOPCB * U   ! K r GIU 6EdDm3kjYL@5+Z "rq$CnjC " : W { r  9 Y r  k K '}.T^, | / Jo ! ) o Y ${(|\M6-=SdghXX+fs)(6WbVE, Ac qtuANvhGlZJY  ; 8 n f W 6 'o7 j -  )  u ]  o  > D J I3.5c+g -biBh1X',EF/)Mi}E2H#GK#(:  ( > W  F W I 0 K  }  8 k ?  M > : P L F L K h % x ;   { nZb xRd ? [ vR ).(#  !'4;TxPq{WL+0yoB L z o ) $ a ^ X Z l ! " ) ) o)"Z z>fe |^5 ^KN~r;">Vk7{%L:s|^ #   } G ] t i Q G ` > +   D p k $TtVRc8)s\<U_Y G<{LcV?g?`t;Isihoin}kb MhYU (-=j~S9s b  u h!de{'ul38Q$U\8/>A?vVm+UL{1Bc8D`ex [%sY~? I p Dpt +y%r4? >w# FV$\}'=BJjB#K]5gFT1=4?JG;(C+@h2v (+odBSZ!COl`n{a- -BJ*t]]6"PiDd~6 # !z& U " " + N | o Y %HAt&%\a>$S=i`\xK+X~2F0ca bmbl P b vcg$)Furjx V $ L w oWn2brMn0=3 Ew,ZwhRu Lb*mPH+^ cn@4<27K 2; %!.""# #`#;#2""K!D %( G  3h20  u 5 i 1E<% \af1x #y&O_6 13O<{0?/D"E lUPl; !"#$%'2([)*b++,u-"-..---T,,*)Y'%$i#! !52s xRf?Z.qE+7?`M7>w)3a, 5!,d  ly L!#$0%0%&'I'()*,-o./{0p1M26234%4x45t6 667'77.6654218/q-,}+**!) (W'&&;%$#"!mJrd: { A} H?^;E:F!+!"~4hz8;Ba4 G :  E!$,')V+-/80!0112N34+5E68@9:;9;<<<=K=x==>|?I?@O@@ACAJA?@i?\=;:687G54332I11?00//!-,-*-(O&y$#!c_ ] 1 XneaSx\ewtw%  @7 4#'g+@.u1479W:;L;;=?d@ACDEEF%FvFGGH@HtHIJKL.LLMmMMMLJyHGEDBAX@>=<<;\::987_542#0+.+)'%$!MD  ~ <KoL +>_c_[  m ,!%*Y.26c9=@CmDEEF4FGfHzIgJmKLMNOMOtOPPQoRRvRS^TPUkV\VWyWXCXXXtWV^TSlRPON*LKvJ HGdFKE8D\CBA@?=<'97n42-/-,*P'%!mDPO ! p+IDG8Om 0|IY K-vb # %(,159=AEIL[NOPPQ`R RT!UVWX%YBZZZZ[[\\\\]]^_w`$``abbbb&`_^]\\[YXW5UT\SQPZO MLaKIHpGDB@=[:8;541/F+()$' [<2E z ExL" 8x  _ kgH#&T)7+.91549=ADHMPTJVyX\YYZEZ[\]^k_.``abxbc cbc7cocuc@bbccd]eenef|g-gh!ggfeMddd_ccDbRaP`_ ]\[YnWUTHRQPOMWKHFAC@>t< 9730+(%"LFkw: ~u%(o,"%P:"%)-?036Y9?<@DHLPTX[^`DabccJcd5eefggh/hisiiiLhhhhvggdg*g7ghVhicijklYllkk0jjjjjjiiSh{gff dc`a`^][ZY}XVTAQOMJmGEB-?2;73s/,d)3%!k=(f `$'%# ?P #*&q)-!048;>AE HL6OSW5[^raceg/hi iWiAiKijAjk5kLk|kl4lolskkbjjjiiighhhinijkklYmmmmmPllalPllmmBmll\l kk6jihgfhe9d ca`_+]\ Z[X-USP=MJ(FC?;84}0-($Y " I zjb@)J$2R0-*2(Q&''*--04&84<[@gD$GJNFQUX8[g^be\gj1kmnno4o0nno(oopooooofnn=mllllpkkxkkk0klbmmvmno=oooo?nnno oppypppFp+ooo^nn>mmKlkk!j1i9hg ed`b`^X[XURsOzLHyDc@W<>8f4P/+6&""xv =&%=;e8*5&3;122582;?CH#LOSVY\_zbdgril]mo2opqqqqqZqWqqrqqqIppp%onn mm~mmImllmSmnoJopppqppp6ooop7pqTqqrqqqqzq2ppp~ppsp#oonQmqlkjiJh!fedka^[YkVSP3LGC?;72-u(W#0,/ O (HcJS/IFC@W>X<=2>@CJGK/OT W[^bdgBi-kTm]oq;rs@stttttEssssssss8rrRqq\pp\oo|ojooxoxo~opDpqr9rrs"s3s!rrMqqNq1qQqrs-st t+tt$t"tsssssssssZrr-qppSoznml%ige*c`^[WSpOQKBGC\>p82,&!<oEX 7udg`#T%QN^KVIHHI?KMQUY]a0dg~j;l$mo"prttuLuJunu[uRutsssMsss6s5srrqqiq;qppppppq)q]qr`sstZtttttssLrqqqr{sstOtttttttwt?t ssstt sssArrrIqqponPlji)grec`]9YfUaR NIC=7?1*$r XtS~;^\2YVkTSTTVX[_bcfiloqrWstvw0wwwwBvv\uutDssrrnr[rrrqr$qqCqpppppppq2qdqqros#stu_uuuuu"tksrr3qrrs6stuu-u"uDu\uhuTu3utttttttttttztMtqxppVppp ooPoo)oQoooop4pq'q}qr rstpuKuv:v*vutts.r_qqr#ssttuttIssssYrrq{pFn2l+iJfb]WBPICq<5L-& ^ GoenUm l"kk[kl-mlnpvx'xyYyzaz{/zzyyQx!vusrqhpDnmlekjjjjjjk3kl[m'n?o\pqrstuWvwwx`xxxEwvunsrqrpXoonoo#o#nwmxkjqigffeeXeefkfghjFkmcoprssssssst sssgrqp,mkhe_yYRLF[?}8U14*$*srq|ppZpHppeqrstAubvxyEzztz{1{| | {|{zy+wvtWrqp4nm k^ihggpg0ggghhiklnsp0qshtuvwxy_yyzyzxwvbtsrVqDpeonnnmklkJigfe#ca _^U]]5]p]^_a1bd4ehjJlnprrssMst6ttttu"tsqpmmkEfa[JUOI/BE;=4h-'"Qr7qqqnqsq_qrqsxtIu0v/w;xWy#yyzez{zzyxwzvt=rWplnm kihfQdcUbRaaaabkc(df:h]jloCqTs,tvwYxyz~zzzyxw^vtsrqlonBlkiWgd~a^[YjWVUKTzTTqUeVXZ>\]`=beikmnpDq*r;rsstVtttt4rq|oZmj,f`[VxPJDl=7e1+'!rrrrqrrrstuAuvwxlxyy>yyyyxxw_ut romkOig'eTca`H^]g\L[[%[$[![\^`Ibe[h_kbnp_r93pqCqnqqqrbrsttuuuluuYuYuGuftt6rlpmjgsdSa+]ZWUbSR]QONMLvKKVKKLMOQESW:[p_cgkjnquBwy{yzhyyxxvut`spmieat]6X}SkNiIWEBA8?g>^=\=<<=?@BE~ILPU|Z9^bfj1mtoqrst6tttt*sqvpopnkifc`\+WaR{M5H;C=6op)p_ppqqrrrs=ssss`sRs rqp|mk2gc_\HXUQNLKJ0IGFEDD;CDnDEFHILP*TY_^2bgNkot%wyiz zzyxxvut>rplhc^xYT1NyHB>;R976555668D9a;}=AEYINSX]bg6kanIqrtAtutunuu4tNrr q pnlj+gda]YtTPKFnno1o\ooprpq\qrrGr@rqqqpnlifa]/XTPLIFDCBA@?x>p=q=<==>?AzBEIIN~SYP^ci*mrvjyWz2zzxz1yGxYwut/rokfa[VOIC^<894>2S0@/n...h./11359=BGMqRX^diDm prtuvVv^vvWutsrr-q-omlifc`A\aXTOmmnn+ndno*op pppppppoonkhd`M[>V-QcLIDA?:=<B0GM7SxYx_Ye8jptxgyzzzzVynxw'vtbrolfaO[ TNGD@:50.K++**!**+>,O,.,/3 6;@FL]RVX_e>inYpstv-vwvvuttssrqpnplOj)g}da^[WlZllmmBmmnfnooonnn=nlkxh0d_ZvTOID@4c3f2l100s0H001313[4D6:b@ELSY`fmrw9xz\zzy7xnwFvctsplg7aZT)LE3>*7*2 -{+(c'I&D&R&U&'(4(a)+*),/49?EqKRY`ufkCnqsuvTwww'vuutss5qpnmjhfd}a^klYlllm6mmnn[nLnmmlljhd`JZ{TNSH'B=F925200>//._-,,l++}+K+o+j+,b-.%0q38>hEJL#S[bPiotwy+yKyxxCwTvuHtqJmhc\VINF?8v3H.,)'&8&%&[&&&'"')+/4U:??EVKRZ!`Yf5jMn,psNtuv0vvmuu#ttsrqp nlk7ixgecxklslllm&m{mmnmmlllklhf`[U7NGA;g51-+*H))Q((k''''3&&&&''}(V(*t-257`>pEMU]elar3u9xxyZxx~wvuet qundie_XQIB9:5?0b-*_(&& %%%%%%%&(W+/49?wELTZaQf&jmqs tuGvvuu&ttssvrqnpGnmlwkDihl|mmnmmmnEnunnnnCmnm71,(&%$##f#5"""""w"n"p""#^###$&K*<.M4;DJLU]e l ptvx|x!wvutspnkShAc_zYS&L'E3?9j5E1".r+*b)(D'N&%%%v%&('*7..16{;EA]GNU\)aejnqr[stttYssussssrtqpp'oOnLm3m&mn[no`opEppqKq pto:nmLje`gY'QJBL;U4i/4*'g%I$$ ##m#8"""L",!!""~"#I###$z%(,o2a8@HQ&YaghmruvvvpubtsorCpvnlieb\WOQJE?:5N2/-Q+|*"('W&8%%%%&(+.26<6BIPV\ag7k4nprqrsssars>sssVrrXqq$pbonnnmmnLoop)pq0qr.qqRoomjd^VO!G#?n81,'%$O$W###0""y"!!!!!"""f""""#$'*05=E(MbU]djvpru*uttsrqpo`mykhe5`e[VPJD?#95240-+)'&-%u%%B$%&(+..16<%C JQ)W]chplo(q;qrsrr\rsHsssqrrr#qwpolmmno>oppqr6qqnooYlhb\ TJLHDb<6/++&%R$E$$;###+""{"K"E","?"{""""##:$%'{).3:A|IIQ:X`Afko4qqqqRpp[oo+nmljYgcb_.ZAUPhJD?:S63303-*(&Q%$Q$u$8$%:&(O+-16=yDDKRY,_eMjjmUopqrqqqrxssNs4rrr6qpolIlm9nnoGopqfr qqHonkSf`Y8Q@IAG:4-)h%$$ $h$<###%""""""#<#l#Z#?#H##$W%&(,/0*6C<DKS@Z`g$jmbmmm^llvlll@l?lWkiMebF]ZUmPqJDo>96(2/,7)v&$###^##$%'~)6,1=7>TEMUT[agk;n:oQpqpppqrOrrrbrhr+qpolllmnPnnopq@ppnm(i d(\UME>71x+'$$b#$0$###I###>#_###$D${$}$$%%W%&'(+L.<3p8?GN[U[aehiGiiIhhCghJhijjjgda]ZVPJDg>:"52.)*'g%A##6"#D#I#$/%&)-M3V9A/HPfX^wdi lnApphpyp!p/pqsrqqqqnppoekkl@lmmmnoppApnkfaZRJBX:3.)2&(####$$ #####$?$$%5%~%%& &''(a)%)M*,1"595@0p,a(E%##""""#+$"$')/R5 &'9'()+,,,-/?3 7)'83,.Z)&$#{"#."##N$$m&H(u-=2r9AiIQX`?ejm5op2pp ooplppoooonunlMkkl*lxlklmnnnl*hb\TM)E <5.)%>#B!"7"S"#L###r##$$m$%T%&h'(')A*,.i/001m3&6:>CLHMRW[_0abc2cJccdeggziwk)lmqmlSkhgcc^WPqI,B<6 0+'$$.#####|##%f'$+0X7? GlOW'^djmpmqquppFopfpp1o^o&nnHmmlllkll6kkpl9mUn#mmkQg`ZRK C :3,(#": !Z!"("""""#?#$@$%Z%&()+-0346 679=.@CGzKP#TVXy[^`rb,bcDcpcdfkh{jSkmnaon_m{kdjfb7[VT1L}Ex>8@2X,'(7%$$$$z$D$###%8&*/k6=FlNV^e kUnqr}rr qKpppponnmmmYmwlrl9llkIkklmqmmBjif^XSPH@81*y%""!  !"-""""##$F$%&')v+.&1747:;<>.@7BEYH+KNrQUY[^d_aeb3bcpde4fhjl5mnooo&mlifed^WvOoHA$: 3,(o%$f#$`$=$###$&).75V^WOHA93,'$E## ####l##$%}(-4;DiLU#]e)lptetuQtrq|pponnvntnmno,nmm'lkkklmum m id\UNHFm>O6.'# a P !!"L"###t$0%{&z(**&,/26:?-BEGIYJLNPR=SUX*Z]_abcicddSde\f1gijlmn`mmlWkhd]VNGq@M9A2+'#n""]## #"#'#8$($'+2:CKcS\dSl&ptu4ut^rq_pp=o;nzn2nXnnQnonnamm_llFlm\nmmj!d\UNeFp>85.'q#b E !E!"`"#:#]#$&<'}),7/26;N@DH%7w1*&Y""K!""""k""#b#&\)08@IEQZ}b_joost=ts~rpuoo_nmmn:nHnopp\5.'C#/ ^ !!" "##l#$"$&(*-15:M?gDIMQSV7WY[\]^g_p`bdfughilioiJhhhhizjjllll"k1igd_YRJdC GOXZ`[hmrZs-srqounnmm~mn*n|onnk{fV^\WoOG?6/0'# !!m""##r##$r% &(3+.Q27qon&mm}llmAnno}ppoonnnnnkoooloulf^WPG?|6/x'#!'!_ !o!"t###$7$h$%|&(z+.38y>EDoJQV\[k^b4d\fhij(jjk$kln6o=op7p1p:ooo-nmmmqm`lki`gca!\X6QK!DW>83/[*V&#""6";!!N < Z 0")$*1k:BOJS[sci*monpon[llel|l+l\lmnoppooGnnn0n@noMpoolg_XPH@070/($!!!!"C"#]#$C$$%V%'(z+}.38j>sDKzRW]5a!dgFj km/mn&nFnOnopqr r1rrqqqonn-mmkifPc"_Z\ WRLFs@k:62].*F&$<#")!!2 RT.!##)08@I0QY}aufkmon:m*kkskkvklmnvo~poonnnjnEKRX^DbLf1hkmLnoTop ppyqgryslmTn6oAplmmlmPmm.m3mnko4oop mThadZRJBN92f*&W#""l"##V#$$k$%%%&(*-27D84C0-,U++)('3%#"!u [ !Z$_*v19@~HPWa^cjgijjjoj jUjjjkml^lmCmaabcdce8fWh"ijkalkid^CV^NFi=6 .y)#! D !2!" ""5"Q"""c"f"#%|(Q+3/638=wCwIeNSX6\I_cfikmnoq rstPt4tvtXt4sArKp)n:jcf_XQhJD?:)40-+***z)(']%$&"! iRCYi!% +o2:AeHPX2_"\#k'O,Z3:BPIPX`^ehkll kwkkk>j9icii?ii)hhxCGLcQWQ\S`8dfi/j]kklWj:f`YRUJBr:O3+&"r v- Y!"$&(*- /;2<59=BGLRSW\afei9lnpqxrUrGrqXpl;g`YQmIA:?3,(&$$x#$E$^$y$$K$#z"!!  V!!4"$>(.d6"=MDL2SOZ`fill kkkYkOjci hgg~gbffe 6/%)$" # !# $%')D+,.148 607)&8###B#Z#E#;#1#""k! "_ "% *?0T88?FNiUY\eag#ikk]kjCjpj"hg edcc!a`_4:AHOV\ae!hj(kxklkibdP_kXRJiBb:3)-~(%"w! rM% !#$S%h&'()+L,/ 26:@OEKLQ0V\va"ei%ljnoop?nlgbZoRJC,;3`,'$v"""\"F"" !!!!O L {"%+19AWHP9V]bg`ikjj@iii,gefca`8^\[Y->4=<CKSZa`bd-hj kkllFjfb\VOG@82,(%d#! v#r # "#6$J%%&'w(4))i*-*1*5<:d?WDJPV\a+ei kbmnnlje_WEOG?8}0*%#"Y"q" !!!!o!:! H { "!#'-4lzi^f`[U?ME>71-,v'%,"i! H! "##$$%A%&&x&]',(y+/@408>]DJRPW\a_ehkl|mXkhGbJ\T8LD<5X-($#V"*"G"!!!o!< <xs x!%m)07?oFMU Z`GcgHhiDhhvggf?c`C\YRUQNJG'19BLzT\Japfilln!n mkid`vZhSqKiC=6R0+'$>"; (- b!!"#$&$W$_$P$~$$$%'*/3A8s=CJQWW\aeLhijh2e^XtPIA(9@2+'$Z#e"u""""+!!o! | ?H "3$P(-529HSQOY_ei l)mAnnomkgd_1XQIBP;g5/*&:#n!% ov>G ]!!"#####s#8# """$&*F-27j=oDK!QW]RaBeZfgea[ TLE9=60*&##X"#"""?!!a! |s4!#&,?2M9AfHP2Vw\`dfhhh[gMgfda@]aXSMGB bEWL R8XC\`bmc`]fVP$HA92-(%##,"#:#)""1!!H n3%!#'`+a187?GdNwU[?`d%gchihhBffEdtb]nXRLFG?9&2-(m^q(1<(FgPFX_dil^noponldjKfIa[lTMG$@:4.u)%$"%! !Q!""#0##""0!!9!'!,""$' *.3F9@FLS6W\^+_\XQK8C?EMIT Z_dg;ijj06=DKSYR_cgik6jjhgepc_[DTNcG?7x/D' Y' 9;#-A7BL6U[bgkmohop)o;nkJhd/_YYbSMGA:4/~+(&$##""R"^"""""$!!s!M!!!&!"Y#~$k&(,18m>E7KP@UVWTmPlIB;4/W)&V#" !B!!"0"Q"!!4 Y J !"o$'0+0U6=DKR X^wd gjklkk i gdbG]aWPIA8/'Me %/:fDoMU.]bhsGzO[W^5cfj'km4m;mkjifcs_[LW@RNID&?;V8 4210..-9,,9++z+>+ +(+]+, ,-.{036_:?DeI~MCPQcQ~N*JvD>8|2m-)&$$$F$c$l$$$%%&\'(*-0v38>aDKvQWp\uafilnioFpVo~n#khjd;`$Y}QHq?L5,$zY os@u "+5G> F(NV.\aQeggj-kOl=kkjig{d`]2YOUlQ"LHC@;<:8n7N675443l322233;334[467~:<@DHM>PiS`SSPMGBW<7S3$/&-+m+*^*)))*(*b*+c,.?1 37;@FEL\RW@\G`e0h|k0l~nInoOmkgd_ZRJl@70.$t u #"a+4XXTP{L*HTDB!?>d=$<;;0:w:999:S::;+;<=I>@CF_IMPQSUUUROJF@< 8x53V11[0a//////0f02:4&7:?CHN?SXz\aJdhjlHlnGnqn$kida$[\TKB8/B& Twdt x[;"*2;aCLSZ1^/bMeGhjlBl2llplj?gdPat^n[SWTPpMJtHFED^CCSBBAwAhAB$BBCCDECFuHgJnM$PSVX!YYYVTOKG$B?<;O:9k8j7788 8788Y:<?BG(KPlU%Ym]{`dgijkUkQkk?ifc^ZWSL;B90' &5[Rm u!E)o1O9CNKSY']a[f il6lmmQmmNlig)dGa^[XUzRPOMLKK~JJDIIFIKIJJJKKtLMRNPrR5TUVX[y]%^^][ZXU#QaMuIGDfBAAQ@@1@*@X@6@??@MBD4GK)O\\[ZZ>YY$XXYYYZ[t\^$_`acdDefgg\_SadgiNiihh5fedb_^ZVKQMFb>6;.Z& WT$UXyQl) fB;&.7@HNTxX^gbfhsij]klmfmMlkjihg`f"e dcHba``7__L^^^^__`GaKb9ccdGefgNh-hhhDgeca_]\1ZZ@YZYYZZ2Z0YYYYZ\7^6_acHegxhihgedb_[EVQ]MRHB;{3+$R ~$fy!7 $%f- 5>FM'QW[`d!g"hijlmmmmm6ll kMjii,hh/gffWeeeEdddededeeGeEee.efagMhhhihhigjf)dcbb@bbb(bb!bbbb\aaVaIb)cUdfghNi6jajVigecBaY]YFShN3ID>80@(" #>V@ f"O} H#{*3;C^HMQV[{_bdpefjgi2j$jjk k jjjBiiiDhhnggDffaeedCccbaa`__`jaNbvckdFe;effff3ffff;fjffgEghXhYgffXf&fg{h`iiDiipi,gf c]a]ZUOID?:X3,%l7z }[ bt>f t@cY U]! '08?E`IDMQV[;^j_aPbTce+fghi!ijiiwihhhPgg1ffeVdXT'MGA<72)+$b|i !Zv $=B_7/NcWtX* +!(086:U=@cCHAKNPNQZQSTVFX7ZB[]]6]6\p[ZYX@W UTeRQsONLK=IrG^FE EFIK'MP*RU WrY\^_a?bdJegikDlWmFm0lkk9j i!gLeb(_\ZXTOIC<=83.t' bS #-bC%U0L3J%f6+>3< Fv$+N036-8T;? BDFPFGeHJL&NFPQRSRXQP=NLK)IGF"DCRA@>=g;:_9s:;=O?LAD'FI KwNPRTVXZ]_xad+egXgwg"edc-a_z\YyVT(QNaIC=73/*%^n Ov-K{4jlLgI1>Y$|p U?% ),.0258:<==?.@BD)EFGGGFbDB@><:87M542@0.}-D,K,-0,2947L95X6789:; ;;:8%6F41/-,*.(H&J$c"D!  !{#%(7*-e/258;c=@CKEHKNQsS;TTSRoQPOMKuGDG?;h61-:)_%!W &[guX/Az(sp75l|wR 24 < n- "#%'o) *\+,-{-.`./..M,+l)y'%~#!pg"S$'*.036^8;h=@mBEbG HHHqGG8FFD"A~=83/$+'t# bGI D J)4vXWtl1@q"UT+Obh 4 L]X !"######c"! yS=}^S`+!$'Y),R.02468:/;   %XvWBVP ! !o\ ~"$&'(5'o&%$!y= M1{^OotXP}c\OVfx$8Z4F?+.  cK7j Q Y ` |iZ&h1mo5o> Ib  u=QA +sP"cO gIltwagSadb`sqS/ ]l%%%Vz`va\:z ' yM-*D k W %%5_$tgO % 70I[2lV{uL<[=Q`knyse8/(5_c'2Vnlx0ZL.hN =)Vp~[(oJ]t]:mO x ] \,pI3G//)[i\fJ2=c.@Vnwxg]@ '.#!kd;foVVJIi oPO^x'Zz::QeSEMjpV$gj7v>&,Po||8P^d^YVg`0/5% "Su{S?h.= <Bu9,P79NSU]bma=FBA0?Yu'yWrZ p5(L`cbB[aXF>E`gF)&"0,1TpvR!Hvkp}1#~TEOopYF26;gT=C" C_lU6xI64FPQP2IVZO>5?KO954 )03<Hfc%<V@sgeqgK?4Qsn)#l~8GM;%\J@IVYM*@X^T=++GR)2I0 5C,2RT; /p-Rw*+ xssTSlBu}MSIs  #{kVQ\^D +F\mcA*D_S*1C4583;HYW:/ri8r $@FK;' }jk~sotnc2n~M2U**)&${^VH! .Ho|dA@O_Q ?U/?URFP[aR&(^n. J&>OKTK3tb]iv|hG) EUE,#D#@<1 ^B),Qnu_A0EWA!MK, <OVWT]]H76Owc4'q,T`JKA* wi_cn{|X +53-.<Mo//  N, (Bcf?"AVM#,NT5DhhUT[hmbW[jlH$NFZC>0 {sdajze)"BE8=w,$Z5!9H:%%3CG71JE->m|redf_YU\oyr\?;I-UOO;$ qn]W^rr@IS; T ~S4$ 7% -65,$%8A))AK<1BfsZOS__\^`^\[b_|4J[L6xji\X_qrM,!.R`DCr{  ,5"\6# ;  '54%7K; 7NOIJXrr[Zddbdd\[gxu&LRJ,vqijkxeJ754>PO. 2[  i> .  +:0#0AB7)#)<Q]]WYfnhighno^Uay3NT<)zx{l\QI<454!4Lk |hfcF$  #&',,*1:?;0'-Mnzi\gxwoomd`jp`SWl}+LVB3tqyvorlbXK7,081*(8OshF/    "$4?2!'-028;7/"(AfxZRY_gpqdYbl`TSey)CK:.|moyxruqdTB,'4FF=.5N}sVF*(0  )(dX  =n{X- ZN {Ds@0 C s 3     \   J T  / wTq8%|'ZAGL!ms0  4=SO|?.X?'8i8 _ _ k b , b   , K Y A    ) M t  / ? L ^  e 2 5$qDMn2kr%}1 @b7@SUG c,\g-)b9BK @ O E  c &    - / & a R M q  B ` y !     " / M b @ N  wZB:! EdIYv2T!s**,?Psl W Z R    u W > '    , 6 < .  <   G  B i K  w    ` 2 < ='*zp_f}*(&^)%$pGd   { c g  s v    X /  ! E q * L ` [ & L 6 L ] p { x t e Q < ( % A ~ - v 4 S  "{b<)GE@/ay2r> hKQrXBqu } ; c , T    2 l i H !  7 I S h } G          " @ u      T =  f?AsxD|&RN2sS}*vy3$   E ` b h B  ` 4       u3~Q3 6Pas{  ? -   4 U i { } S  LW[3&Xx'fHh3vbrm  nuRC [  7  t P . tF9?=&Hp@OgW7+#Bz " \ C  O `X \4|qj{cdHRQZ d  &`k z 6  ) W { J=Y!<Hf@[3lkYMD<% -U|go Dsb>"  # ; [ z o  A a   z U&x(eb$  o P B :  X z<UL=-FJQblo_]*Uq($2T`WK4 ;_k|~KU{jNnWH[    C C } u Z ; *q4  { ; # 1 # t [ q !  x u <F 9c$` 4re?k1C 'BD0 'Gbx>0 I*OM #5 " = [  S h Z ? U  x 3 g 8 } a P G W V R S L i & o ; # ? t :Eaa:](uV  !"#*1LpGh|}*`N$#i`2 P {  V S O R c    * ) ( g*/U U|!vRsZUwl16To7}(XAsw #i  0 (   w D Z q e L B Z S E 3  " Q  k MsM=< hH&Jd+]`9tT)_wUp] aLHxkhqr{~ipLi^^&6P {Y8r f   x n #bh}}yxk2:V+NSD6Y* wH#9=C`&Hs%Kh>IdiwM'#}kw8 D i ;lu""7#$f)N 0fd8)D;L /7.BE;NY?  + 2/JLA-6HG6>(;o8y %wSL6OW.YbiR_oR-R^a=_I4  ?T4}S">=Ag.P#X> l O (AiW ' a/=v,,gpB _ X[|Tqs@$T;4_dM.S}F ] 5 = ?  Wr(KqI1U1veQf_ B ! Pl^}3#^t$L}CQ5H F})VpbOu3gw;z 9G*D`y' ; &xz9zE ]!"e#'##$$J##"Y!#x-d!)qPT ;  +z0>Vh@.8|!R^y2%-Lk?>5@ W K R" !V"P#W$%'3()*+,-e-.H.....,+*(m&$#H! ^>oCfW>x ^&@S!oD9V0\F+5dUZ)bmuq0F WIAo!"^#$&&'(Z()*+,-./01234k5 5677T77848765?3y1/.,*)(('_&&e%%N$Q#@! 4Ck L j>w* vT|\K *#xxhK JAS/ / 7 ^x A#%'*,+-k.v/u0911234W5<6u789+9:-:;f<1<=>->?@U@AAAB.B(A@?=<+:`875~4X3]22&111O10i/.B,*z(&$" lLuu~  .0c|_^ 4.o^c~x{ e!U #&*[-^03U6 799:_;;<=>?|@PApBoC C{CDADEFGHSIJ%K$KL~M)MNLNZN:M8LJgHFE7CA@?{>==-+)'n%#! + r:>d8#,G7}Lx2t R'A7!&+*.2"58<^?jB*C~DXDEEFHI IJhJKLgLM MLMNaO]P|QRS]TzUVzW,WXY,YPYSXWV'TS%QP@NMLiKuJTIAHHGnFEDD BA@1>p<:(742=/-,R*(%"d9OUu =Z_{;2+1\| > &obA j@X!#~%(-16 9=hA$DHKNNOOPQRSTUV VhWWWX?XvXY8YZ[\c\]^_`Kaabbc ba`_^z]p\[ZYYXVUTSRfQ$ONLvK IzGECa@=;"86420Z-)H%;!=M,kj S U(,<Lu=o 2MW fCL!w$'*w,.159f=AEuHLP{T V]XBXYqYZ[\]^^_)_R_`?``aa/aVab7bbc cudde\ffghhah#gffe]ddd1cccnbb aJ`=_+]\Z-X*VATS%QP'NBKIgFDA??<:8 41 -)$%"5'  x lk )W2BN $^'+V.247z: =IAESIMQUFY\0_-`bc.ccd*defgg&gfg7gggggggghh hhEhiijGjkl4llllkk jjjjk*k}kkxjjii gfpdb`_]r\ZXVTRUOMdJHSEC@<|840_,P($ D~ 8{&?# XB/J"&*.26F96;N?DHLPES~WZ%\__adgjmnopqr_rrrTqqqr-r-qqoppHooOnnjnnnnHnsnnnoDoop/paplppXpooZo6oo[oplqHr6s sssssssVsrrrXrqq p(o2nlkj|i gf%dUa_\ZWTPLG;B>:6W1V,E'#t\ ,DEB? ;98!9:Z=AiFssr~qqgpp#oTn7mkjhgdIa-])Y0UQ`M!HCB=%72-\'!W 6 @"ZWTQPVO:PPSVZ^bfniZl~nq rRsntCuvwnw~wYvvuott,s{rrMrqqr8r`rSrqqqqqqrrVrrrssFsttuuuttSssr[qqIqqSqrstuuv?vuuurupuUu>u8u4uuu2uLu?tttitssrsrqqoppoml jfc_\eXISNFHB{=7{1b*$19 A b`][8Z.YbZ&Z]_behkn!prttuvwxnxxGwvutsrrqcpoozo]ojoootoeoopRpq&qrrrs2szsttu)uuurttdsrqq"ppNppqrks>st%t%ssrrKr/qqqrqqqr?rrss's'ss8s=s rrrpr8T2),&!ppqp ooppqrsIt,u:v\wxUxy;yzbzzzIyMx^vujsqpInmlzjhfd[ba``___H`a0cseh-jloPqusctuvwxy-yxwvutsrqqp4o;nlkfigdsae^.[UXW#UTT8TTUW8Y5Z\^`!bve7hjlnopqrs1s|sst#ssqpVnuljfbj^=Y4TN0GA;60d*% qqqqqrrsjt8tuovawDwxAxixxy0yExwv}u s#q+omkhihgbed a_^-\[ZmYXYZ]+_rb/dgjmoqs]tvewxxxww+vIuptsrqpo"m&kUhf.b_K[WTQPNBMZLLLgMINPRTVhX[R^beKhj)l?mopqr=rrsrrqponlDj fcU_ZUP`JoD?W94-qrqxqqqr0rsUstjtuvuvvvvXvfvutis!qnl_ige;cha`d_V^5\ZYW|VTSGR4Q;QRUfWZk]D`dZgkmpr?tvrxxnxxwvv u2tdsIrFpnki#ebG^YUuQMJI!G>FAE]EWUVqU"SjQONMYKJIJ\KtMP2SOVrZi^cgjnqt.v`x\xy6xxwIvuusrpRmjfbB]YTO IF%CAe?>====>o@-ADFDI;LQPFTyX]`dgjm"o0p4q4qqqr qpoo0n]mpkig'da]]YTP2KF@op7ppqPqrNrssAsbst ssrrq3omkqheSa]ZJWqTRPOOONMjKIH8FEDUC|BCIDSFHLDOTX^4c0glosvxyzy[xxwjvut]spdmci d_ZU&OkIC?< :H8W7666]679H:<>ADI8MRnW'[`KdPhakan&oqCqrprrrrWqtppo\nlj\hoeb^[W3SqNInno-op6pqGqrr.rGrrrFqiqp nl~j@gc_[*VROLK+IHH^GFEC6A|@?=<;W9t5%200/6/H/,/01246z9B6GMT^Z`fLkrqu1xz${!zzayyx5w|vtqnidb]W`PDI-B};6m1.,#+>*\*}*m++,-./25:]?.DJGPV [bgkvn$prs6stktutt0snsrkqpnljgeb`]Yk;kl-lmn1noo4oxoooonml ieb]SX[RMHC@z=Q;:;;*::=87654301001x3h47:@xFMT[vbh)nswyzzzmyy\xx=w us(ojeo^W^OG@b9B3.+('i&S&t&' '(b()\)+.p27=nBI3OVX]Nc'hwkoprsctZtuuu&tmt&ssqpomHk2iNg\ec7`Gj{kklammn nQnlnnnnYmllej`YQIsA:5/,)7'%%%&>&&&&&(H*-17^_DKRY_dgkFmoqArspsssts4spsqsrpon|mlkjukplGmmn~ooKoXoAo~o|o&nrnym8kgaZSL^D=61-+(&&&;&M&:& %%%%%%%J%$%.%X%%'<(,07>GXOW`gmr vwxxxwwjv6trpmjfGa[+T]LE?84i/,)(v'&%%5$$o$*$$&(6,/49?FLMhTZ`Yd\hknNoqrsFs;rrs-ss}rqpoonzmlklmn~oDop&pWp_ppp9ocofmkf`YiRJpB;4/*g'&S&~&%%%x%$$$$b$H$N$H$a$$$%W%r&'+..5A;DKT\Vcwj[nsmuVvvvv utsrpumkgc^X7QzJDC=83m/,*('&r%$$V$$S$,%6&)-515;/AHOLU\`ehlWnjpuqfr^rsr'qrsssRrrqpWooannllmnop4pzpqqqjqp on)kce_WPTH@:=3@.);'+%&?%%%O$$$7#####$$$/$7$~$%&)-29@HPX_flpsOu0u"u?ttkss&rqoDmjUfa\_VCPIC+=D7i3/E,*)'@%$##{##O#$'B)-1,6;BxIPWm\bEfIjKlop qPqq5pqrsrr_qpppToo0klmmEn\oNoppq$qqxq#pom;ic]jUMF5>81-('%&)&&T&%%r%$$$$$$$$$r$M$$%&)A,1 6=DLASZaflnpq#qqIqo[nykhdc_ZU7OWI[CX= 830-}+R)';%4##,#,"#;#%\'5*T-16=CD3KRX^clh!kmnp/p{p8opqr]rrrqLpppqooOkl6mnoowopfqqxq9ponkga!ZRJC-;5/+G'&%&K&2& %%x%<%(%%5%F%]%%%($$|$$%|&9(H*Z.i29$?FMT[``ehkklEl9lIlZllmmmlxjffb^FJMT[)`peiVlAmlnoUo*nopqqqqppppeoobkllmnnnopkppp^nmie ]W O3G'?8z2,)"&4%%/%%%%y%T%K%k%%%&&&b&X&%%v%%&'6(* -0q5;B%HNTY^yad3e/f9ffg@ghj>k:lOkjgea=]YqUePICb=941-*'%g##H"# "#N#%g&)-4&:B:IQ X ]chkZlnXnnn}nopqpp&pooo_nl7llm[nn3nSo(oplp onDlagbsZSKC<15/*&$$$Y$%%8%:%;%`%%&&p&''*&&&&''(})|*+.p3 7=CbHMRWLZ]_aabc^dzfgi3jkuk}igda^1[2VPICW=84n0,(&W$L##C#f##9#p$|%'*06>pFMU[]bfjl mn]nxn5ntopp{p2ooRo=nnnAll5lzmmmmno`ooom~je_X`zacCefhjkwl k,jge.b_[VOHB<72.*D'w%($$$K$ $$=$%3'6)/B4nnlipcd]?UqME=v67/*%@#!!!"# #c###$9$$%z& &''(9)*\,-//0<137]:>B%EtHLIOSOVmX[E]'^`bdgikl+m0llk i#feda3\UNGzA ;51,,!(&J%%I%%L%$%%S%&&(. 3`:BZJsR5Yeafkmp plppoopCpoo nnn mmll/l(lHllWlqmNn)&&C%&A&%%%%f&(-2:AIQY}agmorr^rqq!pppp1oInnnPnnmllrlbll5lGmmnn nk8f_YQFIfAE91*%! [  !W!!"""z# #$T%%'G(*,/3:658:);=@BExGvI-JLNQShUrWiY[^/`cvfhjglAmPnQnynmljifb\"U;MF@94-)&&B%&P&=&%%%y&(^,19$@IRQYyahnqt9tatsrqqqZp~oo9o#nnnn|mmUm*m2llmnSnnjnfkKf_X0PiH~@J70)&$ h ] !y!!" "h#$ $%&(*-047;E>@BD FHKLMNOQsSrU|W XZ9\Y^a8cfghj/kmnnnm4lLji:f b[TMmFP?9 3E,(%%/$%T%f%l%I%_%,&['+07?H71+'$^##$N$$$$$%&*/?6>-FOVW`ho#rvv>vuosryqqRpVooYoodoppVoojo%onno!opyoolkg8_0X0PVH.?7 /'#g l ~!!!")"#%%')-y049 =BOF;IL/NxP7R]SUtUUUVWWYZ[\]_dac&eNg(hikl m(m7lkajgf$b^DWQIBX;55/)%"""\##t####$%)%-b4;DLU_^GO|X8`h mq8r rqponnnn=nnFoopqq;pppppWpfpqfrqqn9iaZR!IA!8Y0($C   s!!u!!!"*"#b$%(<+_0d5[;uAH/NSY\`[be7fggggghriWjBjk kl7mnnoKo>nnnnmTkthd`]OXSMIF?94/+'j$O!! e = ( #B&-"4nopqZq|qqrrSrrqponlohd^YISNEIBD>9v5 1B.,)'!$"!{ gVU\!$+22#:kBIRYaWfojkllJkjjk2k kKlm7n*oNpll1lwlmUmn!nopYpMqnkc]\UoMrE<5*-M( #"!")"3"h""""###$%I'*/.28>)DcJPV[&_[b>e0gCibjlImDn/o p:q=rrcrrrssas$rq4pYnhl[h c)\V2OJAE)?;52/-a+q)'%#"X! ]A-]! $+=26:qBIQY)`eijkk`jjFjcjjjklmnoii;iijk$klmnnon7"/R)$\", !"!N!!!!!""i"F"#$&*P-2794E0j,++ +G**E)(8&$#.! d !&-$4aZ]aIeijkykk4kHkkkk|llmmKm`}`aNbd)e;f[gikj|kllPk6faZ*S JB:2,&~#3 !o!!!`!K!p!!=!!"#%(&+/U3j7V<A3FKPzTXu\a(eim%opqsu'vv2vvvvAus^pkfE^WOGA(:5f0-*z*(****$)(' %1#"% -!k"&.P5=ELQTQ[ab#fPjk kkWkkll#kkl7lllmU[\]` bSd eguij9jlVlCkhc\rUME=5/>($!!$ !W!`!H! !! !>"#&>)k,k/37;@EJNSW\afrjmo_pstuv/vvbvuurPnibZRKC=$6T1G,*c(()")))L('&$#n"=! NJ  $(0H7?|FN,V\c}gcjklkkl>lVlkkvkljlMl$lMVEXZ]]U`abdfhjjl lFlgiye^XrPH@81*&&"P!L ` e r G *  u!"$'Z),/@2y66:?DHM:RW]ebg`jmorstuduuutspklue^VNG?9B2R-q);'''( (s((R('4&$#p"m!V Y .!!%*2v9AHP@X ^dhklLl{klWlllkxkDkl*kkkORyUY]aDcfhRijkl:ljgGa[;SL7D<4-($"I !  # " "(#&[(*,/M2 59>KB>71o+'M$$$P$$$$$$$#Q"\!{  w "$$(.6>EM8TX[a[fillkkekl(kqj7iWhhhhgfNAFLQW] adgi(j*k;klkid`OYSKACo;4|.)%#\"!! bS4 !#0$&(,)l*+-/3B6n:? DJePV[a e/i~lhopqpp^n&kf`YmQIB8;%3-(%L#f##T#t#d#H#+"""T! \ 6"T$*o08?GwOV\b*g-ikhk>kjk-k'jhkg1fHedcqa`:e@GMT(Z_ccf4hijk l5kjfb\VO[G@82,u(%?#"[! [N !##$%'(()*+.W059=>DJCIOU[W`dhkm-llihe_YQI#A`93?,h'$!#""J"!!!X A_vq $'.a55=!DKSPY_cgijj#j iiigIdUa_&\YWT$QN*2;sCKT Z`jdgiZjk+l9l[lqjyh co_XR FOV]bfhjkllmYl#jUfsb]sWPcINBd;50a,C(Q%##! y+c h!!"#$$4$4$m$$%%'*M.n2^7j4$d.M7A\JSZ_e:hAklmm6nmlei?fga\UOH Al;Y510$+;'$s" &> > !"&"#0#G# """""$k&>)-16;BIPVc\_c6cc_[ SLE=,6/*&%#"E"T";"{""^!! 0C 4 *!q$d'- 3(:B+I~PW]Haegijihh=g7eb^Y.SNYHCd=94'1(:DMV\DbpfYj8kmJmxnnomk]ie `ZTMGAb;!5/+'o$"y!f H  7 !!{!"}""""C!!!!"$?&)-1Z65z @"S$E(,H29?@HJO?V1[aYdh3isjjCicgfe!b^=Y[S LF|@!:%4&/)o!*R4f>HQTX_dnigkmnoKooimkhe _Z1SMGjA#;4/*'I$="!}!$ !!!"9"8"B"!!Y !"q$H&)<,l17>EL4RfV}Z[X[WRKt7-0*$| 1#-7mA/JS/[`fjcmmolop6o mjh:c^XSEM^GA;E5/+(&4$u#""z!!"2"""O":"!!!^!O![""$%'l*.4;BHO S5WmX#X}TtOwG@92-<(%("m!!6!!""!!!. `  3 S!!m#$(z,B28?QFQM?T@ZG`4dOh5jkkkj*hec_ZTME>5.-'v  wP&0?:(D`MV@\dhlCmoyp&ppVo~m6k>gc^XS+MH,A;50,c)'&e%$9#"q"H"z"\"!!!u![!?!]!s!"#$ %',1^8n?4EzKOTTTPKDO=Q6/*&2#!!5 !!!"!!! m |! !h"n#U%(/,18$>F;MScZ_dhklImm lmjShve.b\VNG~?@6l-%k\ U )2DJNRMRRNIBs;5;.)%#n!!l!Q!"+"b""b!!!V!"##%S&*-n28c?KF5LSUX^cgjplmnFmLl9igfcW_ XdQ?H@8 .& `J !*4>HQY`ei\lnMpCpponljtfb]YUP9JDz>962]/-+)($&%%2$$$z$#$X%-%&c',(()+6.28>D\IMEPPPLG@:3-'(v$5"T !\!!""!!""#$&(=*.28?@C]G(JNZQSUaTT@PLFAUP+ rgM~$.6>G:NV\adhjmmnmmmplkKhf b`\Y^U^QKMwIFCA@??>>/>8>#>?@AMABeCCoDDE*G%ILORUVX;WVSOJFA=2:7)5444444445 5n568B:=AEJPU.Y^2bfiTkl[lnnmkRhd@`wZeSJ*@6R,# 8 /m~N zP$,4@BE{IeMR'VZ^aeh'jjk jkyjilf'c^?YRK!A8-.%naIf q1o 6-"*2(:OC`KS6X}]X`ehkFkllmmlki1feb`]YW1TsRPOO%NNNfN NIOPlmJmmmIlkjbhgOecba@`a_t^^=]]]]^~__`abc\d!deeffgXghh;gfe,c^`^b[Y\WUUTUUoUVUUUU?U^UVWY[v]`bte)gZioiihgf9da^'YUQ6L_E=5O-y&1($ Tv9u0| I$,4S|7~/'!O@1 o9_K5Gn-ZC 'O&.6>9CHL@QW:[^`ca#bdff5ghyhijgjjjjjjjj%ihhg)f#dcba`_I^:]G])]J^^_`b&czde_efff(fQffg9gh~i0iiiikhhggghhDhYhh4gfDdma_\YTO;IFD`?l:&3,n%4 sy qa4_T~^{ mx#P+03:9?BGLRVFYy[\]_ac'd|fgXhfhhhhhhhQggf#dc|a`c^]#[WYOWVUUhV[W&XZ{\^`bce"ffghiHijklumAmvmyll\kkkkdjjEi1hf_db`]ZVdQYKjE@a;v5/D(!,aE< B$*)n, s9=? w L q'.49T=]A+EJNQSTV)WYMZ\^g_`a```___^,]?[Z^XW'USQOMKK.JKLNPSV.XZ\^_aqbcefgh{ijkekkkDjjj.ih?fdbi_][YV9R"LF@<7;1+$f/8+ Nz2A:Z.=\Tr05IJ PApH")/407;%>CFIKMHNFOlPRTVbWXXXyWW)VDUiTHS,QPNbLK_IGEDB>AA9BUChEGJMWPRTVXZ\^X_a=bdfVhi=j]jjiiShfdca_\_YWTQLGA<73w.9' R< $oRQ(B">a:2 %S*.1V3u6:B=@BCFDDFFGIJKLfLL"KzJEI%GFECSA@%>=:;98f665578#:0AD.FHKGMOQSUWzYj[]`#acdd(c b7`}^[XUS,P~N+JFZ@;Y6u2.*$+j n8 q1X%0_gH] D(8Bxuv B E $(F)+..1W4y789:5;?<_=l>O?5?@@@?>=?;9754;20/-(+))L)*+2-P/2K47:(C'q&$#! \bRo 8"%(+.{1*358::\<>@BCDD6CC_BzA?k=934/+'.# +x w|0vQRps8Gk KE-Nzm%r#[ E|3GSOE7 '.a l o1R"?$'l)+-/D02r4 5w7788877%42-)$ !Q>J Ums7+LDxn7)6yu9uUnaZH ! E 8G[V7V:bp7 g)'!bt D % ^9cv 2!#m$&(n*H,>-|.o.L.U-&+)&"-,0C q,J+oX^PPoEi}XE6NiUr rpu_3 *  U  K >w Zy)J^ eW@=f "$ $$\#"x 2|? V DEaVey VF"ty&_]zb]KIU|u#0 0oDP?RQtY~:4h@Edc ` AxO}: u%  z4%`9]HlPn|~adQabYUlrV5el)iDxh|9w'4G vxcPG)/Cp  <C{  D7Qwq25BU0nW|Q;X=Q^eftsj? 22 =`k@Bq%of0bB:5c 9`tJ/e{4LvCq5\jO|pN}!E/+$[m_ kS7;`.@Rgpqd`I(4."o09e]lt'tI&DeiLRdc(*>XBvh,OgQ bk>zI33Pm}z7LV\XSRfc5 2<."$Xn Gqz(G.T <\x }RAG]fhjkypP+"8\(&_*1tRn\&yC-1Obhe@VYN?8A]dD./'22>hR&8o|~ [P\|x]?!<d9) =YhS7WD>KTVU5KSSE61=JN6;='+5@O\rf&A?DjjxsYE0 0[_YCw 2CJ:% fTINWXM/ARUK:+.KS&5P; :P?,@WU>5pc'u "$ xrf[iA8jd! q]V[X@ 'AWia@*F`S':N>@HADJXW=#/mW)X*;G>:+lo}~i5f^Ho'&%+'fXF"'Fnza?@P`RI_5)L^VFN[cU)%Yf)[?SWCA6!xfestH1V\N>9\!=8,"fH- &LisbF5FTA'TM++HX[[XcbK4-Bjb9 9EilKC6 ykafqi/5I?-/F]*,S/ ;bkG 9QN$ 0LP9(Qqo]\bljTBE\xvW3;g ZhI@0|sa^h{j:;FG2 2w $"^6 4H<$)=G8!1GI:"!DqvihfWJEPhy{jOK[:[OK7 tp_[e{lE$>H9)P  Z9& 6(1-#&<D/)FWE4Bet]QQYVTW^digjl4COA.yomccmoK2-$,GQ6Ex )-^<, 8 '0-#!<O@$=ZZONZssZTZYZ]bdkv%DHD+xrknraH>B?@KG& $9Z #rE!) +6/(6DE9'".I^he^_lj\ZY`inhfr1GR=%wu|}weYWWJ<61&APe {og]G- !   $'%*.7=C@1'%8Xu|j^iyzphbZ[eng`dw&BQA+vsx{qqi`]UB1-1,.4ETp  _E7   .=4 $144>B;1(1JjvZRZclpj]V^hc^\k 6B7$|rt}|vwocXJ4(,:>?:BU~qN=)'*# #23e $J*LUp9@=%[OFzA)6 Q r +     _  N U ~ 3 rPr8%|/c@HG!po0  AC]Tp<gj c,2 ?  f \ m i - a   $ = O <    "  ) Q z   6 H U e  a 2 8/~NSj2jy)0 Up>"N[YM'f3<  de B c P  n 4      ) % ! ^ W I e * R q      ( C \ ? M  "V:4 HeH_y8Z)ymoM  a  V * (  n \ D 8 6 = @ > A 3  : C - T r  G { m  ] 6 > }5%y3sag,.)d-Jy ) { m # |     Q -   I   8 P ] Y % O 3 F \ v } w c I 3 $ ' = } 4 | 3 M  }o B0LIG7cz8tA ~eMMfRnf71N ,  n 6 F t - Y   2 j ~ e >   ? I O h P   + * $     & $ ? w  "    ! R ;  j@J~K,YR8mT{"p0[\] ? ( $ 1 I i s u E c < !       o/P-  (?Ubt% " H 3   5 W k ~ X   Ued:/Xx+lLe,n`uk S Fo # t . & G 9  l G . c-7={,+Q}GMlL) ,J{ % e K  X l^d!.x}rz^_FJQZ f 0 ^ N d J k c v = , 6 S z SDc(5A\5Q-c^SRSN2#+S{  lk$NtU+#  * E e t k  > ]  $ \ %-z(pb! { t Q Y ~ E 3  H 2 ? @  QfC4(ENVbfgUQBg&&1Qaa^I%4W}d+j:KsmUu\Nb  > ; y . a  A .v;  } 7 $ 6 # t ` z : o 3y_ P  k ^7|rC\!p34>80&/Nl88zF0XQ$$0   7 X  T o d G W  {  4 f 7 ~ e R K ] U J K J p 1 o = 5   8 .&b b|d8.p2J6F   (';dA_quy3gT(#e]- L |   Y T J I Y  & # & - d'4x |yz!0r@jMHm[- *Oaj{(q% `O{ f  ? 6   { I ] p a D : Z ` W G & " M ~ l %P wR0LA4jIo(gC_.dgV YRy9g:-7RWaua| h?hdq2U2fDz k   z g *keC&Y3DwVdcA+F=Kj1>8.P9xwL*L d8In{Fz!{v = E j 9pr-0,#7(5u*_>2CT-P0GRVK<2?!Tb  L sFX RM 9ROP?x}-4n>6| F?.KO2aejV^lO:`nmC {Cv6CmoG}<'J3>FF { f 0 9] , 6 b j R P1i?~nLnZg cSns@$S &# KY|JUsT]E{#   +  P Y J j yv2E0ArNO i ' oswuMf'D|;M?(US0TqbMp GzE2D:RI-|  M & v V/_\  +!D!""#R#0""!!H Ysq9m g " .- >R/!CB/\g0)-GGO.(V  8x]O\&*V\^ "$m&/')^*+,---.--,+*)(>&% #V! z} PraH* .F]B( L|x>OGo>fN05g.kf,j:4T7q q x }L/ !"#$%O%%&G&'(*+-0.0E134B556w677b7J76R5x4031/.$,_*)~('&&-%%&$$#" K(4* t  h^i- #gV"5'tyU_`*?v  _JC "%&(*s+,-.@./0O01@123|4L5E6^78:;Mp?Z?@u@A/AKAI@?>=R;:68w6513211O007//// .-e,*?(j&j$i" \\V K c>wBX@"|imy pCMk C mkrx~K!D% (Y+--}0'246^7789 9:;X;>?n@]ABD,EGHUIpJKkLL~M MXMgLKJIH6FDCA@>=<;;S::~:99o876`420.O,)'%$%"B )}}1Kzq E~i @'Nm?"+FYZf<` bj!%c)2-:0469AA8BQBC C^CDEF|FG0GPGH"HI3JKYLNOQ%RSTUVW*WXdeefbg ggggLffesdd/cc4bbUaaD`__ ^5][ZYqXVU*SRPMJHEBY?=;96R2/?+L'$% g8L 6 d;ZH12:-#( ,0b469;>AE=ILPrTUW[k^`b0cccccEcCcvcdd3dccKcPcdQeefffgEghIhiiYiijSjkl2lullOkkk#jjjjjqjNjii~i+hh g4f^eEd+baJ_^S\ZXVBSPMK`HFoCAR>;:6}2Q. *%!E7 H&#7 o@ G $@)-2p7J;[>ADjG'JMWPSWdZ^b@e8gi jjjjj iiiiiLhh4gggh2hiiyijjUjkkhkklljlmNmmmmm\mllllm8mkmzmkmmmbmUm.mllqkkrj{i>gfQdc$a(_/\ZX*USPNKIBFqB>L95N1,(C#Es S 7~tQ#6 /~,g)[&Q$#x$&)-27DA9=:9$79?:>1AFL2QdV Y]4`cNf hVjlnp@rstu"u(usuLtt%s]rr[r:rqqqppooooop1pNpbpyppqqbqqqrrrqqq2ppppqQrrsysttBt`tftgtwttuOuvQvv8vuLtfs(rpon^mlk|jhg(ecZ`\XzSOJF4AY<61-(^#k) aSONKHED)C2DaEHLPUZ7^`adgikmpnpHqsTtFuu(u:ttt sQrqqq5q$qqppppbpUppqnn%mmmn5nQnnop(pqUqrss`s=rrrrrsBsVs/srrr2qqApp/pp_pq{r>rsAsEsDsrrvrHr\r{rsWssssssssss.rrrrr\r`r71,L'I!Mnn_mmmmnno:opqrtujvaw!x!yyzQzlyyIx/wuOsuqonhljhfecbbabZc-dfBh%jl:nprstotuuruv>v^v utt^srqpoo&nnn_nmlkkigecb_ada.`aaMb'c*deg$hj#kmpnopq?qr|rsBssttt+sHqon7kiJexaF\WWSMHB<6c1+]& p#ooop(pgpqFqrrs)tu vvwwxyiy^yxw!ut rpn*lkidgneTcVa`"^]]];]_ `bdg-ilopr-rstOuFuvTv"uuHtt-srrqpp0onmlkigfZdFa^\tZYYXaX\X^YYZ\^_a bdghjkm nVXY[~]`c'e[gZhjl"mnopkpqHqqqpo}mlkMi$fcO_\X{SNI_C>83,qqr3rsstttttuQuvuuuuu|uHtsrp}nNki(fd5b)`M^]Z[Z1XWUTMRQfPPkQS UsWyZ=]ga dgjNl1nLptu1u@utu]uuuttsrqp0nPkhe[b=_}\ZXWsV&TSjQP^NMdKJVIIMJKNGPLSLVZ_FcAfilortvivwVvvv)utt$rqomj\fb_<[[WlS^NKIH F+DuCBFAAABHCEGIL$NR@ADzGeKNiR*V Z^aehkm;nopqqqq^ppJoonlkWigea^5ZjVRN oop.pqrsshsQs.ss7s(rqqWpAnljgdJ`6[WSPMLJXIuHGF{DBA%?l>82.+2)]''g'1'(I))*+,/C3c7m;76646666=5h433B2^1/../901o36<AHOV]dqkpux%zz%z]yyyyRxmwu+rn>ic\UME>T8w2.*n(%&'%%&+&i&&'J'E(b)-16(;AG MU [aeilPnplqrstitt`tLtssr!p~nljiehfe k9klmCmnbnon)mmmmmmulli}f'`[UOuHBz<73h0Q//4/000///K/-.-,+++,-4/316;C.J?QYs`hbndsvy=yzyyyyMxFwBu rnkBe}_W NF?19 3.*_'%%$$$$$$$y%&(,05;AHyOV]bmfimo pqsRt(ttttQtkts?qpnGlkcjgizh3klBlmymn1n mm"m8msmhmm9lpkhd^XRCKD=71.D+|+'*+=+K+W+`+j+~+++**^)))*r*,\.@27>EMU]$dkVqmtwx}y@y y2xx_w4vtrolRg{aZPRJBdK]UMFF?u83c-*'&%%$$^#####%Q'O+3/4:9.?ZEMFNVi^neNlpztjuvvovrvuttrqWonjfa_Y&QJC<60,)('a&%$$,####$%)<,1"5f;AHEOVy\o`e;hzkmopqrqqrs/sFrbq9onmmamlllmjn/nnnmmmn-n"mnljfHaHZAS*KDA={6p0+)'t''Z'-&&&l&H&&&&&(&7&<&/%&&'0('+\/"5|<CKSn[:bimrLsutttGt0ss+r+qfp"oKlhb\UOHiA;44/,**)(&%{$N##J#T"#V$+&)R-Z16/;BJtQX]beil4nyospypppqrrPrrq*onnJmmmOllm^n"nnynmnndnnnnl:id_8XPIMB#;4/+!)'(,''''B'&&&&&&&&&X%& &"'=(/+.`4 9AMHuOV]sd0imo_ppbppppppVp:ooem9j'd_NYS3M:G@:(40r.5,*('%P$*#Y#2""#C$&*!-16=ELS_Y^bgj{m no1oqoeoxp]qRqqponnMmmmhm%mmWnnnWmmnVnnnnmk^hAb\UN F{?f9M2.,*(''''''b'G'K'I'U'g't''q'&~& && &'*,1v6=/CJQ`W^bgQiUjjk=kzklQlmmmnsmjfaC[VQLxF?942/o-+7)&%##f"""#$')-/18?GtNT[_eAhklnnUnjnonpiq2qpdoLnnNmmmmUmmBmnon mmnwnnnmmif_YRTJC<6+/+(}'&''%'D'(''1'i'''((8(''A'':'c(5(*,0^4:>?FL QW3[_ac|ddef`g7hi0jklkjfb^YUQLXE?:Q63b0-+)(R&X$$#y#w#*#$%&*U.\4;CyJQX ]cgk lKmnnQn|o0oppponyn0mmmpmlmm3mnWmmmnnnnmlRh\d]uVO/GV?83-)&&?%&&D&&&&'6'W'~'(&(((N( ((()*,->/3.8$#####$%(/+18?GKNjUQ[mbfjl mmnTnoopoponnNnmmMmMmMlmmn)mmgnnonnmkbfaZSLD<5g/*,''$$$Z$% %Z%x%%&6&S&&'t'(s())*+-Z./025o9=AEmHLORU8WeY-[\^`_b5dFfhjkAkliugc`]ZVQxJDg? :o62C.[*t'%%@$$$$$%%'*0&6:=EYLSZyafk7lnno\oroppppnnnn mmUmmlllmXmm^mmnonnmjTd_AXPH@9q2,'P$##2###$$1$K$$% %T%&Z&'(s)+ ,/02_3r4"58v<?-BDGRJLO'QCSUUtWZ-\v^aa:50,)6&&I%&%%%&%'c).4<_CKRYag?lmop!ppp|pvppp@o:nncmmmll|lmCmmLm+nooMnnli[c"],UNF>6/c*%%#)!!" """###=##$=$%X& 'Z(*-E035789;>QAmCEGtI'K%M+NPRnTzVY~\._adh%jlmmlkiug=db_}['TMGAUU?AD4FHsIlJRK$L?MNPKQSvUXk[w^b:e`hklmxn83.*e'&&&&&&&&4'b)-2:vAJ;R.Yb=hnqEsst(srrqqqpOooo%ooQnmmnnZnn7o5ppTofoXlh`Z(R~JBn:F2+Q&;"  : i !Q!!!""N"##%(&)+/g3T7;?=BJDdFvHCJLUMNNrNO%OPQRTVCX[_ibeiklmGnmljiygeb^XyQJDh>8N2-%)z&%%%&&5&%&9%'(X,19@I!QDYGahor7ttuftsrrMrq`pppp ppWo nnooCo o-ppq p'plh `sYQIA9>1*%!" FF  j !![!!"#$D%'*.'279<@DHJQLN:PQ%QQQQ*QQQRSU`VYL\ __behjlHlmmul|j}ig e]a]WyPICL=061`+(%?$$o% %_%%%%&'+017?4GPXSa)hro>ruuvqutsCrrNqq(qqApqqipoopp4pppqqppmh`ZRCJA9?1)$ =:  ] !"R#$]&B(,0t5|:@E>IXM5ORASUQUVkVUTTUUCVVXdY[^`cfei jlLlmm3kiJgNdb^ZHSM(F6?93.)T&#k#"#$$~$$$%&u).q5=@ENVo_Ofmquugv*utt^sr]rqlq$qAqqqrPpppppppqrrDqSq&mi aCZfRJDA9,1)$\ uG| 8 !"#&(-2;8=CINRUsXNY[Y[[[PZYYYYZZ\ ]R_%ac`eh j[km.m~n84#0m,j(%H" "7  ("'.w5>pFqNV^fko?opoo&nbnFnn7nYop+pqro+noo1ocouopOpqppn ib\ATLL%C;B3+&"I    z !"$',t18_>E&KR6.)#!  !    8 !"M$s'+^/5::0?F)LRW\C_bdgj3l mmnopcq1qrPrrrsRsllWllBl!lmnXo+pff*fefgh=i j[kllnmWkfaZ RnIA92$,%& "   4 / !"$(_,0f4Z9>%CINSW4Z]beiRkmnpqrstgttu"uSttsqrzokke|^{V}O2HB PEMGUs\d h\klllkllpllhl:lmnnocccdefgi jxknkm>lkgc/\TLjD<4}.W'# # < 5    F !#z&x)-1579>D INN&R1UY^1bg/jcm)npUqsktuquvv,vTuu7sVqmlhaZxRKWD>h82.+n*E)))((N'%#" .wY!' /-7?ZFNVA]hdMhAkakl"kklllll^lmmnUnahaWabdHe=fchijk5lll\hd^.WJOF>70)%4!l z t _ 6   &!!"_$'*-1T49>CHMEQBUxZw_ei+lo q rwtvvvw_wAw4vHuspJket]V=NbG@:.4/n,B))R)#))v(('&$6"!"(^08{@GO*WF^;dh8k$kkkUkl%llllqlmmnn]^T_a`bdHegij9jl=llj:f`_YQIA:%3[,)'%"!Z q i '      !#&#(+v.W1;59|>xC3GKPIUy[0`ejfmjp$qtWuww4wwvu_t)pm!f`XQIBU<-50,A*(x(((((e('8%$?"!i F} H$*2:BmIPX_evhk!klk}kklElllfl>lmPmUmLmYZ\^a=cWe*g/hijkl[m9kqhb\vTLD=6.|(#" ! y /    u!0"$'])+. 149=]AEJPVC\vbgKknqsuAvuvvvLutr;n.ib[SL$D=71-)&''''(#($''&%$c#! ^n A!&,5)llpkfQalZYSGK~C<5.(%x#"!!y , {!"a#%')q*,,-0V36:>C^IVOfU[o`eimoqrPs!rkqnkf9`YQpIA;#4_/)&$a$e$K$$$$$$~$ #Y"Y!l z9!$*1)9_@HKOVV]bgyiZjjjjvklll7kSjjjjihgH&LOPUY^{befhNi7ijtllCkgc]FVOOH@9m3,(%r$#2"!!* & !("Y#%m'%()*+-n/C2 48=>BHGNETY_0chzknnoppo[lh[b7[THLiD=6/+4&$r##I#5#U#:#"""v"!j ."k%,L36;^BJ3Q{W^cgiGj~j7iikkkihhgfe][9?F8LRX]acfKghiAkkldjVgc^GWQIB;5%0+m(&W$#f"c!S N H * !"$8%_&?&'((()+/ 27=;@F_L\RX}^5bfi^kkhjfb6ZSKQC;V3.-(m%8""V6/*^%i#6!!!!!!{! k386d!#@',4};CJQXv]cYfiLiiiQi7iihfb_\4XU#Q3MfI)L09@HPW&\`cfghj|khlhkjyg6d4_EYSLlE?'9o3/f+O(%$""L!R v J  : W !x"H####$$$$%S'6)-5049%>E]LSXX^@aEdid7c_CZ/RcJB:R36,Q'#"{!h!!!!!!X aJ= [!t#&Y+Z1M9@xGOUc[`ze5gijiihhKhf4cN^ZyUQ]LHC?1 (1:{BKS+Y]bergi1jk}llligEc ^sXAQKXD>83.+%'%i##! W  w !">""""""""$1%(+N/27=DKRX [_ _ ^ZUNF>6/)z%"!! !h!!!! 9M1!`"%)E/5=ELS Y^bfhjjQihh:g[fqc|_ZTO3IDO>94!*3""+"6##%'*-27G>DKoQUY[YYUQuJKC*;k3-g'$"=! !A!w!!!D ~" 5!G#%).4;C6JQW]bAehikjkiggefc\_ZASMG@:4/*gP#,60?HQ1W^!bgiklnVnogn5lifb&\VQK$EC?{9s4(/+r(& $2#0!! !!`!!"&"!!!a!J!@!"B#t$&(,1M7>E[KPBT1TTQ|MbFt?}70}*%#!v!* ! ![!!r! S' !S"%(-3%:KAIPCV|\abeh>jkVkjibgMfcq`.ZTM~FA>70*%F<&S/9@BKS Zh_ePhkm(nopyonlbjf a~[VnPKF @$:40,*6(&$#""["5"j"}""""""I" """#$#%&*w.5;B HLPQQN=JXC<5.)_$#!8! !F!t!!~!K!% v 3  m !"S$/&A*#.3: A?H_ONV*[aweEhjlxllXjhfMd%`<[TN2FX>J6<.g'!2>) )02<(ENV\cgkmopgqqXpnmie`[VQLFA;16Y1.+*-( &\$#""""""""""""#R##$%(,S2\8?/EIM;MMJG2@:e3,($"! !G!t!!!b!$ x !"#% '*m/24%:AAHPO!Uq[afikmnEmmjhebw]3WH+PX&_dilrnoqRqqhonl id`4[WRRMH>B=85 1/-`+~)k'&&%&?&6&$&&&+&I&P&&'l'((*.C39?EILLL0I9E?93,(A$# !!!!""5"G")!!!"`#d$& ')- 062;B[HO0UgZ`e.iqqrq p]nll8hd`\XTOJ&D?;7531/-g+**]*****v***+)+}++, ,A.F15:@XE~HJJJsGD7>82)+'$"!!!!"""<"A"E")"#$w%')+.27"=CJIPU[{`jeil8moQopoumkhe`ZSK#B9\0T&-$ 0  x]&/9C1KTH[!bfjl~npqppoLmkRheda]Z{V:QxLTGCC?R<:826W43:2@1122:21112&2x2222347;?gCH7JLKKHEi@:A4(.9*&%d$)$2$5$$$$$%"&'(*,.149>DJPVG[$`RdhkUmn|oonNki`e^a[}TKCX:O1L(|F jLe ;&'1t:DLTJ\9bfilnpdpq3pLomki fBb`"\XTO1JFC@><;:A9999>9t9{9Z9(99.9f999Y9w9;<@5CGK?MKNN MlJGNB6<7:1-*)j(D(N(L((((()^*|+-/U14-7;a@nELQWP\G`eBhl moeopjo/mmifbN]VAN DL;22&( ko 7N i(1:CJS8Y`dhjmdnooonjmkivfd9ad^|ZVR;NsKsHNF CBAArAA(A:AkAAAgA+AA0A?ACA A A1BhDFIMP1QS,R[QNKGB?=E8c410///////00y1}24[68;C?BGMYRX"\`dmhfkm;noVoXo6ljDebN\WNE;2*!3 AZ5} { /(419_AiIQX^FcfSjlnoWonnmljhkec`]YVSS8PMKpJ"HHHHHHII"IHHHHHH{HHIJM\ORU$VgWWVrURPKGCJ>;876666666757l8A9:;FNUO[2_ecg9jlnmymHmmmul[jh~fdb_]ZZWUSNQPuPPPwPPtP_PTPcP~PPP{PZP+P8P*PR,TCVqXZ[m\[(Z>WUiQN!J>>>>??(?H?A?@BDGJNNRuW[_NbeWh}jl#l`llYlkTi d`}[VO4G`=4^+G"9 VA %0,4;CKRXN]sabfi+klrmm#mmmHkji"geca_][ZKXXBX XZXtXsXGXXX7XvXXXXXXYnZh[]~^`Q`a6`E_?]ZWT^PMKHG}F}FqFkFFGFFFGoHJLORsUY]a5d4g+iCklelkkjj!gyc^Z(TONVF=4+#[M g? |u8W#Z)08C@7H/NTY6^fbfhj@jkl[ll}kjihgfe"cbma]`4__&_6_A_@_^^n^p^__^____``abcmd[ddd ca6_F\YW T5QONMMN NNNN`N3NNP#R0TV|Y[^adfinjkkojihSfd|`s\VwQ\JD;3+F#+ %D.ow]. j{&,4=DEQLUQV[Q`dghijklxllll kk;jihhOggZgfffUfeeVe/eFef fdffffg8ghhWhhhgg*eda_]VZYW1VDUUV VmVVuV$VUVWY[5]^a?cfhjrll#kjIhfe*a^7XT/NPHZA 9<0)."^ B DnB V ]oc#)1:CBHCMQW\a(ceafgthijk-k1kokkkQjjjjjjdiii)hh4ggqgygggggg_g1g9gSggggggAfed}c a\_^b]\w\\e\]]<]*\\\]n^8_k`pabd.egijk/jhf}db^Z>UnOJD=5. &_ qR[fMiTr B&.x6>DIONSY6]h`b?cdf3#+X3G:94 ,$2hI R |&o 'm*?t }#m*05[9Z=AFKMOPYQSiU&VXY[B[\\\1[[XZZ^YNXVU3SRQvP NPL`JIHqGH~IFK LOtR"TWY\]_`abJbcdfg8gh5hbhiNii1hgWecap^\MYWTPKD>9530 )! i  L5.^*#OZ[O p%+_03T7:?VC EGfHIKL{NOQ7R]S|SSRRQP(NMiKJXI GFEjCA@g>>^=>{?[A_CSFI L*OQSV X)Y[[\]_avcEdefgggfecc `][LXsUROK E?:]5R0+%a- /|=bLM,=%Yq!Y1v+{ 0 !_&*z-X/376:K<>Q??@AC$DEG"GHGhFEnD9BA?_=<^;;:(87h543R22s3$457:=j@oC%EGJLfN?OQRYSUXkZ\^_``|`)^\Z(WTR O6L[HuD'>94y0`,^'"Cv 7 z>W g(R&1`lDT4 .*9ux*P M $O&H(+-024_5f5678t9d:;c1@CE FHoJMORTVWCWWhVU>SQ6NLI_EA<72.*'G"yR il"jU?LCWp:qP"[s`X11 R ^ !"$'D)Q*+n,4,-%-.B./0002/.,W*( &$$i"!a.l"W%'*-/2U579;=?BdEGIJK5KKJIH\FfDA>:Z50o+(D%["Y P 24fiH%>f(nd1+{gdX_bt :W8!,!"x"##J#|#$ $#"!w'xG F#o"%/'*-D/1~3_5U79<=>?O?@@.?W>w;uktuwoi sgT VC{qt?<;/J4H $ Y-Q)|!n#%')*,^./012345i55 4:1/#+<' "]a G,BoI/ID{m:+6r0xN6? ]d 5 y } Y , l R d5sqr SW  ?,{ z"m$&|(<)m*+=+*w)!&a#j,Wq _5?~mm cfZTi@h}VC3SsM'm.N d  D p 5 tWA|\X;~0 6 T x>=dP e!!}!f lv| @Wqb:f"mL1|~'VUy`YEIXxj4;g|`ka@s3^SvDeF?T\`R_~/7;|~  Y y~*2i > 2 y {')V5/pS ,{Vetz]bR_\WSedG3"s;u#[Zp%Ur9Z~VPak[FPjs!J  J  |  {  r vI]n*'<Y&6{g{{O9X<P]fgpj`762Mv~MP"v&;yREAoIWF#3XzfH ox6uTcGCDR#M,-)b{r1hQ58^.AUmvtb]F,:8(5}A=mgu~.n? -W`JJjj(Ouv+mAjR3kuN-xG22Nkyu;Q\c^TNdc0/:1#8f~2It-O9O3[  W.-Ngx}{{K nx,FiM1/(0z+`vh9{E.4RcfbE\[SC6:Yd@'(3GACmf|;fji{Y:Bmu`= Czw>HcnYD,![JERXXW4HOTJ6+9IK1>B(#AFHUfw47CFk]kngV+ DTnYM?OTB2%&#k]QU\]T'9RYL5',GQ,A]B.KZH6KbaE3{l)v ! z}_PkL9zfax"$++% +,"zeY^]H%@VdY;)C]U/ BSB"%FPMPTc_:4vU S.61;6!|sysxB'h}hMHl42-  %6.eWH%)Bep]@>J]SI_= *QkdRZc`J 'X]" P7NN:DB)tecn}d+'PW@+0_}&D>/.#dD+(IdseE0DWC%RU9,Obde_`ZD52Gl_6.u8deDFB)|g_i~tI5KD/%5S|03 &R-":cnG!@WR) .UaD,Wzyc[]in]MOc{z^66XP_DE=%m_jsH =OVC (c ,/_7 4K<"-@G;%9WT>&*P}udeh[NISfuylSLS0TLSE+ gXdoH- !=D:/! C[:& 4  (.,%$<H26O[MBRspZQQVSPQV\cgmi.AWN9xwxdZenE/02=MI+ ;i   +.a>,  6 "02&">SD*,D\_YYd{s_Y][[^ccguFPK.}|mgnfI?IORTF$ (9Uv "nA  '  +=6-:IJ?3/5H_mlccnqgdaepvnhq.JT>'yzq`_c]QE8&$4OZg} wnbG(    %)-/9AEA92+9[}qbixysoi]Ydpjcfv'GS@,~|||{ma`]QB85.07IVo  gL=& "$ *;1#.47=?=8-4Pu_SY`jqlZMTba^_m&>F6%|}|ym_VN?549:92:PywS?+)+" !99h FEI}{O/N9QX&L~E(7 P h #  "     V  V S  4 lKo2}2iIG }K$ru* GKdRn5Sjnl?v2"7L k ` n g * b   # = M 8    ! # 5 T *  = K S c  _ - 0*zSVp1ku$|/ YtD(S_YI!`()`u T p  Z # l 4     ' "  | K C @ k  < ^ x '  $     6 V 7 G  *]B6!JiM_y <Q!t`P_< c # a 5 2 '  q \ B 6 6 A F D D 1  z +  M  > b C u   X @ C : %x4{jg24"0`*|uKt - v - y  )   | K # & W  C b s [ $ X 6 B Z y y ` > $  !  < w  9 | 5 L m B1OMI6^v8yHbJL|WDFB/  p C ]  6 ^    * h ` :  * D T ^ o  R   - . )       < o        " Z 6 \7Iv|J)ZU>oOvf' Z    5 [  S  e ? % !     f#tM77H[n+~ F 0   / N e ~ U Wgd;*Lw-lNi,hXla| Y  W ~ g  F H 1 r I / ]&)-l*=YxTTk{=  Bx . o H  ] rgf+ysza\=?BJ X ) +   & Z D J c a MQ &9>Z4Gw\hdbcZ<-9a~'rr)Os{F  ) N t { m  6 V | % \")/s%u] m c U N t T  : 9 S P < .q|2<M\rxqUQ9V$[utqY2"BYrh1\)<j`MkTNh   3 . r ( x Z  D +n1 } : , A ( l ~ T h - j +ze"Y ) |"`'qwNS_"H_WOA15Mkx{8;u?,YS) &1   / P z  W t f H W   / ` 5 % g X W h X D B B d ! _ 1 /  ! 5 sLT (q70n1O:5  %*(=b?Vgjsym~?tb3&gd/ I & ) \ L A G \  ,  ! ! Q. bjl@MJ |LwKGm}a: #:CGJYwif[}c  ? 8    J S a V @ > _ l a S 6 3 X i ;lG$< FCo_+M~Xu<TlUIcyQ gpN0)!,3OrZm^ '^b|&)W+`={ l   ~ k"` ^w-v0;`;!J6CBczQw#f[SOr Q4HY*H{My{ x&H D a 4vw(9881<"*g_A?OT6D>Ry#LXZxr  {t%ciOc3t?;+AaNO=mb2mI4N|VI.IF?ou,~dbkQ!Kju{U)k` T%4cz]U<Nx4Z! N 9 G  W l A8K3]MSQxf[V!{wVmm JgyH*Y06P<kBP  @3p!|'  M R 4 k " $ W <Io= } ! rR N . g c85F6 %7h1T u0yE? P\%NuiQvQYn!,0AJ1kj>9 j w < L~{*.z !"E"! v/yG3[6|;~ L 3 - l`8Q$32_ )*D+"GK?jn| 11O :qH0g%.|  U?Y$z n "%'(*f+,-_--,+*)(\'%$l#! BUNq( dePFoyGVzWy]6+rtCG'ep  :0m< p8 !"#$x$%f%& &'%(7)u+M-B/M1224D5Z67776g542109.-j+*)(('O&%%V$$G## "6!\ 1w[Dh  FJ7ki4;E2 po$1{\N : mmt G"$<%I&'7()++,-,-./0e01i12l234X57`98:@@AQ@@R?><;:W87~543221O0//h/....I--, *h(&%&#r! WCM* F9IWb>+tqep4"yH h U $/Ghx"!I$(+*-2.0 1:2425X6%6789:;<A?AOCYE>FHJKL\M LLLKJHGFqE CA@?>=<;;:_99h9+988886531/{-C+ (&$" ` ` [/(i!Rsx* ?Nq!g#& )P-036S8:2;=k>?@AABCDEFnFFFFFGoHIKGMqOzQ^S4TV;W WWWJV3U[T^SdR6PON*MLKOJiItHrGFEEDDCCCCBB&@><:7#4A1/D-I+)X&#[ '=l)h 9N Ei} / n  =4"$'])+.$1#48<{?ADFHIKKL&LM%NOP1Q -*Q1i +F  Ubq"&*C-0q25 7A:=aA(DHK MPRTUVBVnVWW}X:YYZZZZZ[[}\U]+^q_ajbd8ehf$fg%gmg3ff,eeXdd*cUbaaZa```__1^^s]]Y\\[rZYXWVUfSQNLAI+EB@=;~9 6s3(/u+(w%L!5   p<= X7#J(5,15_9 ;>7@zCF:IMFPTWcZ?]O_V`aaaaaaab:bc-cqcVc bbcMcde>f9gThijkl lvlllLkkvk:kjj3iihh^hGhEh&gggngTg>gfffCeeCdcbaj`>^\Z1WTQNxKzHF1CAg>v:63 /8+'h"o 8!K@ &2#P k#v'-:2j7jk):99;4=DAHEgJP#UVZ(]`c2ehikmXo(q+rstTttuttrqppHooo nn'mmpmPmxmmnnOnnonopqpqUqrrrqqqzqHqppppqqqr8rBrCrtrrsHstYtuvwwwpw0v0usr?pon8ml!kihgf#ca^DZTPKE@d:50+'+" n gwNKHEDDEGK NSxXV\ad+ghklmo(prsqt&ttttvt;srqpoo-nnbn*mmmMmWmn noo^ooop&p\ppq6qqrrqqqqqq*ppqCqr2rrrrs sGsdsstu uvYvw-wvvAuWt/sArfqopooOnnmmkjhf b^AYTP2KE@/:51U,'{"S^ FJXUSAPOODPRTX\8`Rd%gjbln|pqr%st8uuuuuttskrqpooDnn4nnmmmmnwo(op-pppppprpcppqVqqqqqqqqaqppqQqrBrrrrs sasst:tuvv'vw[wwwvw vuu.tssrrFqqqqponljg"c_ ZUPK\E@;61Z+&!n r`@^ [YY+XZZ\_jbehkmoq%rXs(t'tuuvuu%tnsrqponmm%lAkkkkkklnmGnCoop7prpppjp:ppMpq!qgqjqXq4qdeS8[2,'|"pqppxppqq>qiqqr rsJt*tutuvwSwwwIv4uNsr9p1n4lCjhfdb _f\[.YxXWWXPZ [^akdfhk?lnnoMpq+r8s(sssss|sr_qpp7o|nmlQjhgZed_ba&_.]\j\%[\u\]q^ _`ac+dfhcjkln ocpeqLqrrsrsrlqKo}mlAjhneXao^ZPVR(MGBA;6b1+rrrs*sstt&t+tt3tytu[uuv vvwvxutms3qYo?ljhUfFd'a_p\ZWVTPSJR#RARTVY\_beNh9jZklmo paqrs@sssssSrqqp:o'nlkj]gecvaU_V]b[pY*WVUU6TTTUU}VWY[]_adPfhjElm|noqqqrrr_qponRm{kifSc`]YUP JE@?:4rrrsstdttttttuu1uuuuXu8tsrgpnlaifdFa_{]/ZXsUSQPNVMDLL3LNPSVY]+`ocfhjlknoqlrstttMt"ssCrqipfnmokhne8b>_Y\lYWBURPNNM_M3LLLMO)Q@SCUWZC]`be4gikmo'ppq'qqqqBpto[nmkiigEdb_[VR7M5HwCv=qrXsstXtu$u/ttttttt:tsssjrpoljgc`][ XtV(SQO_M;K=IGFEEFzHuJyMPuTW[u_vcfChkmptrPttuuuuVutesr9pnlifb^[9WTPN KHG%FUEE[DEEEGIDK}N*PSVVyY]Q`cfiBk_mwnppqvqrFr0qqppnm kei{ge[b-]YU!PLaGp8pqrs|t:totgssstsss2rrbr qpoomjgzdA`\YV>SQOMK'I FDC1A`@V?Z?@+BCFIMlQ@UZL^cfjymqsuvwwww0vvuJsr;omjf'aq\XgSOK[GDA?E>h===j==>v?wACFIL$OvS^WJ[M_Nbfbi$kmopqrrrrrrpqpon*lykhf bX^ZWiSNnopqrssss<:98893;EADHQLQeV4[ _cgtjm?opqrbs)sttssbrqpo841(/.s...//0v2%369)<@EJP:UZ`PdhknpqrLs0stttt!srqpo*m"jhuecoa?^[lmn1opqqqqppppAonnmQkhea]6XMSZNIFB\@ ><;^986J43l2 1///1m257 :b>CIPOV\bhns6wkyh{{,{bzzzMyxwMtr(migc\rTMF@3:40+)(0(T(H(()*+H,r.149>]CIkOlU[af2ilnpqrstu~uttssArpnlj[hFfgdc`kwlcmnoppp^ooooo+nn!ml#jfbb]XSMHnC,?,;}977(543?2<1e0//?.e.4.Y/X0+1258=C1IPNW ]dTjp0uwyz'zzTz_zyxwuFrnjd]V NF?|93.*L'%%%& &7&&'w( )+X.27E+LT#[biorvTwxxy(xxOwusqnlg)aZ5R|JqB<850+(&M%$$$$f$9$H$4$%C'j*-.38|>DKrRuY_4d,gkSmpPqsrtBttSt sssarVpznlk{jiih'kollmgmmmllZlhlll^llYkthEd_YRR\KtDs=f7U1/-^*Q)(((t(Z(f(()%)g))))))i)s)*,&/3{9@!GOWy_Oelptvxx xOwwYv,trqEnlhc\UWM^E>72r,)w&%%$$Q######%G'i+q/F4b9h?FNMU[x`dhknperFsssJsrsNs8rhpnmrl=kjjxillGlmYmmm6ll@lblllymlnkg9c1]VOH}A|:O4n.+~)(((+((((6(C(Q(r(((q((|(.(()*-N07 =aE!LT\qcNjnrtv>v7vauutsr3po!mj)e_WXQIC;5/+('&&<%d$$:$#$'#$&)_,1 5i;!AOHPKW\a5ei lvnpqiqqqqr'r_qpcnml|kkekjlllmPmmflllvlmmlmljfDa[#TjLE>72,*(>(G'''''''''''''''&&'(p+w/5;9BJ.QY`rgxleprt-tt>sssrqqonlhRb1[TN GK@Q93 .*)(c'&%$$###!#r$F&)b-Z06G<CpK2RqX]bfRjRloopXp.oopqQqonmill/kkkQmllmGmmBllmmwmmmnlj3e_YQJ~C]<50,*((((((S(*( (((((( '''^'i'q(),/5;gBcI7P:WC]dsiOmo^ppppq!q1pprpBooOm idd^XRKE?`83G/%-J+p*S('M%$##"##_%&*.-17D>F$MT]Y_Fch]kamno6onnopkpwonymNllAkkkmnllm"mgmllm]mn-nn1nbldidc^VOG@:3/ *)()))(((((((((((]('(0(w)*-05;"AGN\TZaejkmlm0mVmn?n\nKnn|nm>je`ZUPoJD>8@31:.-E+I)a'P%$|## ""#z$x&(-/2(9d@HOU[`feilmwnLnJnDngo0opo~nmollllkmolllm8llxlmn nJnnKmk9ga[TNLE =71d-9)((&(~((((s((((()")R)h)=)E)y*W+5,.j1"48bivlmlngn{nno~pp[oommClltlWlgmYll\lm ll=lmn7nXnn7mSie_6XQLIA:4.+ (D''Z''( (((:(q(m(p(()Z))*K*,_-0 247[;?DI>N;RVxZ^a bcdd~ef'gXh/hijlGl/kmh?d_[X&TOIC+=953"/,)'%$#### $Q$'+29AIvPsWL]tdji4lmnnooVopQppdonxmmYlllml=l!l}llhl(lmn_nPnml-gc.\_UMF>7M1+(&&~&/&&&&'';'e'L'N'(()*A+,/%14R69fgi!j`kl?lifbq^[LXRTN~GA=85k1{-*(!&%<$x$[#$$$% '}*18W@bGO3VS\dcimnoop>puppqWqpIo+nimm?m mWlkkl+ll'llnnn8nmBke`YrRDJkB;Q3.h)&$%0%'%%%%%&&@&&&1&a''(*X,.148_;i>GAD7GKORTVvXZ[_\\]^t_adegikllmk@hekb%^\;XSM'FA<08-3/+)&&%e%`%%$%V%' *0e6>F~NUm\sd_jnTopq qqqqqqpoonmmmlkkl@llVlQm_nnnonljd2^xWOG?819+&%#$$%$$$$$$%%%C%p&6&(*.105 9= @CFJ)MQETeVIWXwYZ[[[[\]_iadXfhjl]mmmlvjgda(^[VP{JC>w950,)'M&%%%%%%%x'7)/6=EMTT\Kd|joCprvrrrrr/rHrqdpkooRnnnlll:lmllno:onoli)b\yTM?E4=C6.)%#"w"#;#$$$4$;$A$[$p$%%&)L,0428=BNF9IMNPTZVYhZZZZ[3[[[n[S[\^a,d]giHkmnUntnmvkiRfca]Y]SwM2F@;6K1-6*"'&& &.&&(&&%%'4).4ifca]RYS"LF|@N:5x1,j)V&%%4%i%s%%%%&(-3;cC!K~S[wd*jps u tuOtssrrr qmqpppqnmn8nwnnnopqUppymia[$StK~C4:3+&"! !!$!z!!""X"w"#,#$j%'h*.4R9@ F-KPsT{X\A_(`eaa`_X^^]v] \\\^4`cfhjl0mmnmlbiyfcb`w\rWQKE6>9C3/+ (%$$O$$%@%]%%[&(0,2+:AJURZcjpsuuv7utssrraqqqqqrSoo o8oPo|oMoyp[q'qppmiob,[SKC[;3+&"^!"   < G j !!" "#~%&*/5';DAHMSWR[_abccwba`0_^^U]]]_!`cf&hHjRkmmnZm{khve>aT]YTN_GA;850,(%##/"#7#$%$d$$%'+e08Z@ HPYai$oruvuvuYtasTrrr]rr$r|rrslpppooooptqqsppmibw[T$LC;3+&F! S  $] x!r" #%*.5<BIPOTYc^72-*&#!!; !""#8##$%).6|>FNW1` gin\qtturtsrrrrWrBrs"ststpp8p)oooCo=opApoomDi~b\TLD,;4",9&!8H+iZB+<N! "$(-4; AH`N=TX^aUdef'feddrcc btbb2bFc6d}feh*ikln.nHnm jfbY]VXSMGY@:X4^/+'$!T y!9!""G#e$V(,4r;D}LT]dl.p(s,sYss/rSqqqqqr%rst)tpp@pooCnnnoRoo+o$liMc\U$M*D<54,&!|vJ!!#z',3~:#@GMSX^adf ghgggzg+ffFeeeefjgijkmmnnnlliud_ZxUZOICD<61-L)%&" vj  ""&*2G9BeJtR{[byinHqxqr/qppp*pp|pq^rms/ttooQo nnFmmmn3nnYn~l^i\cp]UMEz=5`-'"SpgWo.!="&+o186Q.s(s"VI1P!t!"&L*06=1CJ5PaU[`gdmfi!jTkklkl0l^lSl5l lPlmno#o{oXonmie[_YOS.MF@:5V1 -*i'%S"!(p7 H#]'/s7 ?wG2NW^fdknnnonommFN%VZ]ej7mmnBmlllmllmopq/rIkjjjjj@jAjk_llum]ljjf`YQwI-A901E*$& {fSB^+ ")%?(-2/7>DJPV[~`cjgiklmmnfnoo3oFo_oopMppp/omkfb`Y,R[KEO?w9j4/,*)t'&j$#=! O "k'!.6_>FMU]diVllmhllQl lQllql~m4n}o~pqiiihhhhi!jjkhllk faZS.JB; 3:,%!l~9l^oO .!$'+/4:t@FLRzW>[_cgEjFkmAmno"opQpppqqJqDq\pomic]UUNH%A<#6Q1-+* )s(W'%$O"! zq:@!"f'_/76>FhMU]duhllmll^l lllllmjnotpdqeh-gfgNgSgug gghijGkkwkgc;\ULD<5!.v'%"ox u!'#&]*-26&82.+T*)((V'[&\%#"Z >wW"''`/l7,?@FMU]d"hTkklYkkl-lm:mm!mnopXqAf e~eef@effghijjkh&d]WLO-G?)70)$_ bc~E, #/%(+/38>/CIXNkS-W]"bfjXm6noprst1ttxttt/sqoTjad]^UN*G@:V4/k,)e((W(g''0&{%^$" D"(]08a@VGNV]dWh$k%kkkklQlmsmqmn9o%op9pccd deJe)e?fg`h@ijHjkhe_YQIA:3V+&X! V=|#]Z{] "$'* -U05.:?DJNT Y_LdiVm4oRq.r^tSuvav?vkv(vtt@qcmga.YC8[1-n)O'&'_'''N&&X%$x#! yd\!E&,)4}< CJQYo_e_h+jjjjkcl8lm.mMmn nnoo\^_acVdzeNfghijkljhc^WPBHW@92#,D&#!! S j!Y#$&(*,/27;l@JDIOV;\bgkoqtuvvvu_t]qok2e^VNG&@l94Y.K*<&&'%&&&&&O&%u$#p"E!: :3k7 "'.6h=E(LlScZ`f%hjjjjk|lolm m2mynnnnvnWY\^ace2fgiijkSlkjbeaqZTLpD=6[0L*R&$ #1!!O d    !#$&(M)+u-/366:>CIUOV+\6b fkMn{qsXttts1qnkf1`!X_PIA;5b0m*'% $$%v%%%%+%$##"!- L!$L)0c8@GANUw\b+fijjjjklyllpllm*mAllXl RlUnX\$_bdfghijvkllkgd^ WPIPB :4y.)&w% #\"r!!*  < M S !# ${&#')!*:+,/P158=BHO"Uy[`fRjYn[prrrq,ovkgaZRJC\<86`0}+'$x"#E#z#$#####R"!!% l}N  r"%+2:BYIPW^ucGgi8jjjijpkmlNl[7O1,4(C$,"b!m" "<"q"f",!!!!! M1 L!<$b(.5=E.LLSY`Ddghiijpj4jj(kkk=jWj1jih|geacDJO-TxYW^eadfghij8klmlknidg_YSXLKEo>72a-*'%$#!!p !!"#$&''(M()p*!, .<26;J@FLRYL^dVhkmnVljeaYR6IAc92-(P%! r ! H C<+& "/%*U1@8r@nGNV7\>behijsjjjjk4jdhhJgpf?dPb._]%&%&c&'''(*N-15:x@ ELRX^c@gikVih$c]V3NnE=6D/W*%#G!! ] m = RHN ""$(t-~4;CKQX^cfij3jjjijwjhfVdb`w]ZvWbTr4L;C J.PW]a{cfhhiklmmlkheaw\{V3P)IC*=7%2. +'%#"!!P !!'!"v#I$$v$$%%a%5%&)+0E4U9>E+LSY^cfhLELNShY^oacbR`[CUME=5.($!!) h R > D &N^z !#3&)N.5\"b eiUjkkkiihgd`[QVQ5KE?:5~_#k,5>GOWY\aegi@jkmmxmxlBkgi8fb^XXTNHBFWMT Z` eChZkkllk1iigqeG`[UOIiB7DKRWX'^KcVh/k0nooo*njlNjOgd ^Y&QeJA8/'6 .MT_n )t$,,6?I&QXu_+chkn op!p=pToosmkhe%a-]Y_TOBIjC=9C5,2x/-+J)()''(`((((((((i(c(()K*,/50;ACGJMMMJsGAc;Q4.)%#"!!!!!!!!"4"W#.$]&a(-*-!049?`EL1RLX]bfjm1oyopqo mjhc_cYR'IA9K/'+  a%.8oB@KvSZ`\f;imnbopepp`p^oanksheb ^wZUPJD?;N8M5t3k1/1-S,,X,--G-E-=-e------..138 ==BGJMMrMJFA;5D/2*&$""W!"!"""\"#$& '*,V/~26;+@FMSXl]bfjmopqpnlhes`ZxRKB"90'>X <gp '0019CK[S`Y`eikn o pp*pionmjgeeb\_|[WQLG,B?y<:8j65 4'34(4w444445585:5G5-56y8{:|>BoGKcMOOOLID>y8^2.E*>(!&+%%B%k%C%N%B%&(X)+-=/2b6 9>BGMSX]ub#eilnoq,polie`Z4SJJBN9g0(1S ^] sF'1:cCPKS/[afUiOlZmopqpmpnm=jhfc`]AXSyN{IFCqAP?2=IOITY^bfjmnpypqpnjfar[T\LB9n0' G Z (R09BbJ:7h563.222$112 34g6579:=A@FDVH9LQ@UZ_cflilQn;opUpopnOk\fEa[ULmCL90<'?G rKy^ U'09AIIQYf_ dg7kmsopp/oOnnmkyigecI`\?XURP]MLKXKKKVKtKKKKKKKLL=LgMMOcPRUX6Z[\\"[6XVRTNWJEBt?<::9{99;9c9:;=t>@SB DGLP4TX\`d gjqln-oo*p!onkTga\UMD!:?0u'0QA; > _!*"~ |'/N7Q?cGNOVh\g`e#hgkmmn_mmmmilkkihDfmd1as^\9YWUaSRaRQR\RyRRwRRS S7SYSuSSTUzVXY\^.``a`_][SX TQ!M}JGGDCB9AAAIAqABsC\DFGILOSSW@[&^adgnj`l>mmmmMml3ieb`ZTM$Dz:0'( L|(} ;%d-64k#)18@HOyULY^bfhiijklel4kjihgfeQdba``________``aXaboc cdefghiviiiNhzfdb`"]ZX{USQQ,PPPPWPPQ^RTV|XRZ\_b$d^f_hjJkllVkj"iqgea`]WQJB9r0L'8: +W+bc]6 t&[-A5%=EzLgQV[`6cfghijkl>l$l kk?jii(hsgg^gfftfgfnfXf0eeefg"gh8hi?ijrjkllbl`lbkkTj"hfeca_\[;YXXXX'WWXXZo[]_`bdjfOh iklmllAjigfb_YTNH@7.&6Q( kA?S ] coh#(*"1:AGLQ"Vv[_BacqdQeghni?iijiiiZihii*i!hhhhh|hgg>gJg~gggghh&hdhiiZijiivii9hgfedc]b`__7^^^j^"]^b_`Gakbcdefgijxkk?j hfe!b_ZVP=K3D=5^,$K % J7Z BcW +&k.6g=CH LQ}VZ^_a bc{dfsgph-hXhhhhiiijjZjDj$ihhg_fff#eddddccdd}deeaefgZghAhhvhihgff[feeee:ee*evf&fghBhi>ijNjjj7i0g?ec9`\X$RJMGjA:2*"; /@;8*=h| Z#F*2g9>BlFGKMP T{WXYgZv[]_E`vaaabHbc.cdeeeeNdwcba`_^]n\H[6ZZZZZZ[\]_Y`bd efgh0hwhSh>h$h1h6hggggh hhiFiHiLhhgfe>cpa_[\lXSNHC;=7/' [Y ?neaX+ZR@)$n r>&--38<#@93,e$P3 u` jn $)t#,!< uGm"(.]2$5t8y<@DAFFGGIKjM?NP6QRT6TU\UnUUUUT[SNQPONnLKUIHLG[FmFEF FbGItLNQdT;W'Z0\_qab?bc&cocd dccd.defff"fdcac^[YWURNIPCq=9I4/)K!\o % k jwv$"Z" R\_Pex "'+._1g4g8:<=Q>B?C@B C~E FHJmKLSL7L0K{JItH6FED]C$A@!>=]<;;n;;f;=[?*ADGJMQ6T)W/Y_p]ZWTROLHgCR=8o30+]%4Q 3 {J ;i6 ?(4 [s#V b0 X"%'),H/1~34[55679:j?A.ACA+@?=<#:98765232M150///o/0V136f9<-?BEHK-MOYP\QRSTV;WkXYZgZsZ\Y>XV SQ;NKI"EAl<;62<.`*&!* F])Jq6^s"U_CO5";/=a^6y = 1!#R%L'Q)D*+,O,-.0V235x656553[1/-,&*s('%$F#"""L"#a% &),/258<?pB/DYEGoIJLGMO5PaPQZQPONLKH|EB)>u940/, (%6!6a >K(r_N^8 Kf>rU )_qa!_/ .^ d !"w#-#$V%T&')*++}+)'%#! >Si<Fw!$&)-0X369:<>K@ACNDJEE-EcE+EDTCBE@>0;-62O-)%" )/ P2A6_&ig-+ieMIua($ njf+B2SV&QX:5a1pUds*IyYi"%)m,\.0y2Q35^678939::e::R98G63#/@*%"5% E"9IPu=k"6\B:9n_tmbDC$$Eh A S C08^FM Q j ) H t CD -"% &( )+*D+#,,-.e/m0#00Z/-+'#vA Z"oO&X74H7oc8&0|s4hJ6.u[RZ7  M  2t \@  u)2 "6#q$q%&&w%$"[z9 P 2Q.HQdg)cYwC`vvXE5VxV& ]8RK7veZ$bju' t#.)EA I30AYJ* ^-m$Np\H0f\zqb[IL\v =9cpS@PVc,)  2:nwi#A``;TaSL~ G*rRy h " -gY jT 3]qvsZ\xQ`^WSjlM#<'or(Nd+#&j w]q7d{aKxnaej{ia[<7RA| n h   UzPIZiS$C4u_rH6S>Sagfqnb996 Ggi; s#sP~NPfMs%JliT93@Pahl{t`aM Fj*ZN va*J0ky9kR47[0DXnvsa\F)2+!%iz3<ey4v=6eqmkz6AzFB*wFvNyAyfFQ:6Mhwt6LXa^TM^\1*2'(T|z7 W!%FiSQ@opWM[nu^Jexa-'OghKX8;I+_tlC#L54Maid>SUPC:<T[= !"*82;jx$;r"UO_lWRhlnp\C43+?mQz7W`K;'_KAKW^Z3HPUM<2<IN95:&27=Oe>Qb^ztxod^Q>#1rm[S6KUG:-+%p`PS_dX!0@V]S>04PZ47UA"<L</KfaBBn7ucag+vuu "+;@=5<;4~f[bcK&BZh]?,E`\7>UG% ?IJT]kd@%&P_0^(0+50}|{wY\zrXQy.21%.=5aVI$ &EgoY<:H`YLfA (Pnn`irqb@6Sv; Q1LL7>=&vot~|B#GO?03]75% *[?( ,KcpcD/G\E$TS2(QhmnhljZPPcpH)/m.afEE=#plt}{j4 6J=($;Wxw$,'+M+ %;frJ%CVL ,NT5 +Y{yc^eu{jWUfg>8PJ`GF9tjrg1/HW]H(lzr$*>+^8  6N=!!0@C37OK7$,U~sy}qbY`tx]QP)QLSD+ ~ldnz_I(2LOA5&E{ %  Z:( 3 %*,)!"7C24LYNGZ}upquoiimpsrsj)>TN=wshgrqRDIHM]Y7 8m!&[8* 8"26(!9MA)%<U[Z_ltoqmmptrsz}BLK2~wprx~`PSaeacU0+:V{  !tD -  /@8+5AD;+"'<Vimhfn|qkglxxot+CN<' ~{|peeqzs`SF1-9R\j xiP3  # $+016<CB6*!0Syuclvhdo|wnlu&@N?+x}wlmjlsqdQF@77:IVodNC*"  %6.%134?E@6(/KsdYdsn^dqqmjq|':E7%}ywtvtni_QEBCA>39LvnI7(&$  @<qN IDv|bMf;B]!(J~G"2 I t 0    S   b h > iJq5$} :h?O ~H%tt2  HQi [x9P[_PRp:%T P q g k ] # d !  7 Q Z ?   #   D '  E S Z f  Z + 51KUk6gx'3 WyM0XfbO#b %t p u  Y ! d -    ( 8 7 -  d Z J f  8 _ v *  + -     3 S 6 J $ #V63#KgJ]|JQ!uG]f/aA   6 y E 6 '  i L . % & 4 = ? B 4 % ?  7  8 Z t W   Y = A |0 "z2|ih4>-*7d0i[ - 4 y , r t  +  [ 0  I  ? O W x b / W = Q i y ^ 9   "  8 x - t + E ~kC2QNG3_y8yP jQU\D# | 2 S l H i +  : `    c q N $  + A B @ U s S    2 0 (     8 p  $     I 4  ^:IyI}([WEuU|!fc <   J )   < r Z  ] < #    y5Y+ *AQUc8 * J 1   - N a y | W  YjjB.Uu/qXk0p_qd{| ^ @ - ; & 3  V i J t ? zJFH/D}enzw8)Iw , y N ^ pkm$.w}edBCDJ Y  m a j [  o J T p WHy?=PqKb2gWHJMJ2!8`.|?Ytt:   . P n o g  4 W $ _#*-y&" g v e p @ 6 K 3 J a Y V8{  *Favzpm4Oe+27NafdO/3`v>zG4ijHhSH\ . , u s W A "v: B 8 O 5 r U e ) q m,o;6?8}PXtEyHN+"%-572*#%(:RoOKvC.XR% %  0 Q z  Y s b D U   * ^ : # v g k } h L H G d  ] + (  +k5b @xg'Z5&hL%#)+-48S|CYhkuzgsAva0&`X& L & 2 b O B I ^ " :  ( - * X2A;f_mMj>~stN"C_uby}gV|re  ? ;   P X f [ D A e ~ y h G ? a | -J OI>q}O]ZHR{gIwL#n43He   Q\X&[ev |(Y)hA~  o  i /mitRlJWNJO'3*"6@BVt*MhT2Q KeB~>K>}8~x  u(M F l >}z9QMKAP7 5t&jNA=0s8K )=;KI]Uc*4psvFr_ASj)e_Dgj&%F/PCS|FC7WOGpu1mctZ(_e< y)h3/hn7J SS\5, "F s Q C L $ ;+QR  3Ypc0uQ1T J~]nnNoN/]2HH0ZTpPh0(~vs R  k|K0. ! Qlk1)KV:JA'\]*U|oUv+ph-/9\Yut @ 3 *e{= !Zz#$ + 5peI*8b Y P  n M OGdHuTm=O4IUDrw)<9Q-0OrF#S({c|  9 {*-$e WfO/ &.:N "#~$&5'D(A()*`++** )('&%z$*"!0@Kt0%S7f[ Mwyln\Y"[u_hB7}8yT$ sc # G"no[p!#E$%r&S&'r'( (?(g()p*l+a,-/0<1)223O34q44f3|2}1/.-0+*(r&%$e#""c!!5  soPT $~1qq<DN=${}1 EV+ rd q"$%i%&&(|*+-a./0123G34#4G4M4k45Y6679:-;;<="=>X>>=<;@987X54.2j0/*--E,,=+++++++f*^)-'%$:"!LV Y U =xUZjF2{znwiW;o, K A 8n!>$P'*-%./h002#35S68>9:;==>>?)?>>>?@3ARBCE2FZGvH@HIxJJJJIHG_F"DCsA@><:C8766F55m5P56K676u53200 -+)'&$!XeX VC5m 'Y&w> C4Lo!$8&)P,c03g6f839:m;m<=?P@gABDjEFH)HIyI|I]HH{HpHIJLMxOPQSSTsTU}UUTTRQPOsMLaJkHQFnDCBA@@"?@@ABSB@A@?!<:742`0&.^,*(I%B"<c S "S'pO#%Iiy * 0 T  Ce"%) ,A.148G<?YB CEFGHIJKLN2OQ;F86420-)&s#A HY <,%A<^>r,n w Ii#4'I*.158 :=AKDH@K+MOQRST,TU;UVXAYZ[\o\].]']\\]$]_i`bAcdef(fffveeee`ddicc'bb2a`_^/\[ZZ;YXX,WWWWWWWDVBUQSQOlLIFDAg?5=>; 85B1-*?&"=>H s Bv9;  T[f#Y(_-E269:&=g@CFJAMPTPW4Z \^$_)__`G``abcrd7dde eddddeBfgThijkljllllGkkjjj>iitihhhhg(edcccbb&aaab_bbbb `_^k\ZcWU+RfOLJYHEC@=840E,='#  * i&#a _kXk^#'-f27=4A|EVH^KNQUXZ]`ce|g5gh@h3huhhhhiViiiiIihhhhhiQjIk6l)mmnXnonndmm6lll~l)kkkkkkqjihhLh ggggghij8jjjhgfrdb`|^$[YW3TR6OMKOHD@M;t7 2. )#nX P \C%_A0,)&Q%5$&(-B17=>BHULPfSLVY\_padEfigkmJnnoEo@oYo nn9n%n4n%mm{llulkkkXkfklm/nnopkpqYqCpp0oooGonnnnnnnnommQlllllm7mnopqQqhqKpkonGljhfec`^\ZtXVBSPzLGB=83.f(#n{  v):730/w.13D7;AvG7LRUYz\&_Gad}fvh_j+l]n3opxqq=qqq~pp ouo.onnfmm_llTkkk4k@kl*lmqnVoTpKpqqqq%pppvp0ooooppFpMpooo\oWo]ooopeq9r$s stDttsrcq$o}ml9jhgheduba3_4][ZWSCNtID+?8:4.)%N!jCDsA @k?ElA>F:99G;j=AEKQQV[_bodgiklnqoqrsmssssssQrxqppp7oo.nn mgllKl kklAlm1mnopqrarrrrxrWrqqq_qRqqrrXrgrgrUrHrPrcrrss{tCuuvww`w!vutsJqpovnYmQlmkjihfdLb*^Z*TOJoEd@:C4/+&"p yOPKHEDzCEGK'NSX]b8eXh]joln!oWp5qqrstt&sssssrHqZpooSnnGmmAll=kkkkkl`lm/mnPo8p%q qrsrrrrurIqqq{q\qqrZrrsss(s>sSszsstSuuvavw-wow@w vIu[t2s4rRqlpooronn3m:ljWhf=b^)YsTSOJE@?:a51,'"F' 2 "KY$US#PYOUNPnQTW\`dhk6moq3rrstu/uu`uttIsserqppoYnmmPllplkkk~kklYllm%mjmnoNp)qqqqqqqYqppppqNqr_rrs+sqsst*tftuSvvwUwxxAxwwivv u\tssFrrVrqqqyponljfb^YTPJEQ@ ;y61,'w"  I`^([YXXXYqZC\\^b,ehkn/pcqrsgt8tuquuxttssUrqponmlkojiiiAi!i i]ijmkkllfllmmn]o*p pppwpmpLp"oooZo5oqopopqpoonnnnnnunmmllkOjXi%hCgghhhi2ifijakSlVmwnokpBpqrvsDstftu,uKuGtt3rpnaljzhAdaD\XTP-KE?: 4/.*t%qqnq&pppppppq qryst[tu#uuv/uusrqphnxlitgNeb_\YVTSGS!RSmT4V WZ]?`be5gfhjnkmn]opqrrrrrqppoo?nnmm3l5k'ihgfUdba2___]___`Kab ckdf-gidkln'oyprrstNttttsrppo"mukifb_P[WSNI C>694u/s+sisss{sasBs"ssrrs/stztu5uUuuutsrq`on9khec-`r]oZ#VSPNM7M LMGN4PdRUX[_#b&dghjnl"mo^pqqrkrrr0qpp6oonxmlhk7ihf#dYb`^\ZY/XeWWWIWqWXiY[m]^`ceogiknoq4r7sftttttsrqpGoOmk?heTbC_n[WNR LGB>b9gssasssssss]s rsRst&tCtetfttIsr8po-mkifcv_\ZVSPBMUJfHG7G FG^HpJM PjlnpDqsstFtttWsrqpomk3hfpdDa5]XTKOK~GIBrs/sst$tTt=tss1rs"sls]s's%ss rTq=oRmkRi7fd `]YMVSOLIFDBR@@@ABE6GJMQUY]a+dZgjloprOrssss^sr;qdp1o5<{;);3;<=]?ADGKP*TYR]pasehlopqstuuuu???@BE%HKNRV"ZL^bfjQloq@s ttu u|uuuEttsqpanlkxisfc`\YVRp+pqrfrsdsTsrhqqqqqppOoo%mokrhfe]a^PZWSGNKGE.B@K=:8(6i55$4579i;>AEJKOTZ#_ cvgkp.s5uvxxx1wwav~usrkomie`'[uv:5311j0H/6.-K,,,t,q,/,,',,-R-0 27w<^BI2PcW^f[l?qtwxyyyyyVxvtJqm`iic]*U#LD=60,(&.##j# #|#$$B$%(&(,A05F:V@GN1Ul[aeiloqsstu9uGttMss9r4pnlk ibh8490e.--,,^+++f+++++\+V+b+#+V+~-(/3&7p=CKeRZmbhcnor'uvx'x]xxx)vu~spm id^W%O@G?082.w*"'%:$y#$#$$'$g$`%K&y)],x15s;1AMHlOV\afnimp"r rstFtmsssrrpomkSihgg/fOmmnn&mmlllkllllxmllifaTQqXM]bfknpoqerssXrrr2r;qpo mIkjaihh.gn?n-nmmll:kknklTlllkm-ll)he*_XQRJ!C;5/,")a)((())")7)I)])))t)C)=)((I'()-073=wELT\cpj8nrt)uuv7uutsrprmkgc\NULME>72}-)'&3%V%/$$|$B$7$$@$\%'*-27w=DKSY ^bgk#noqqr qqqqqKq#pcnmNkjji_hhwnnn;mmylkkgkllllmmKlh!c]HVsNGb@^93/-f*g(D(d(B(((((((((((((z'''W(V)I,0~6FMWSZ_dDh#kmoppppFopQpkonm)kjjbiiiYo;nnMnmlkklUlmmmnom_kgb=[UT'LfE>h7_1,*()3)E)))S)))())).),)")+)&(()*r+/;3.8>E$KRY~_ej2moVppq+q}qr r"qqypeoli\cz]tVyOI@BP;50J,[*(( &%%$a### #O#%u' *.39g@GOU[<`eail5nso0p pooooponmRlk'jjajEj)otnn=mmlkklmmmnlnInmje`gY6QIB<'5\0r+*8()b)))))d)b)])r))))**D*2*+,.n15g:?fE,KDQW]5bfjAkllmrmno_ppZpppnkfa%ZTNHxA:5D0.,^+)i'&%t$Z#"""]#7$&)e.{3;HBJKQtW]bgk mnroyoouoBoponmlkkwkkk o'nRmmmXlSklmmmnxn mkhc>]VJNF?9o3.*)())K)))O)T)r)s))**V*+I,,y-t.0259T=AFL(QV[@_begJh`hiMjklImxnmo`opoqmxhd ^$/#6""@""$&+C0Z7?FN]U[aXg$jmnoppopqpponmll{lllnmm^m2lkkgklmmnRmmif`ZSKUC:6\2%.+C)&&%!$$_$=#$$'U*1U8@-GOW?^4ekXoqCrrsAss*s&sPrrppooo o1ll&l"lEl~llm+n>nmnlPidG^WPiH|@92>,(&!$$% %%&"&X&y&&&&&'(*-148=WAEIuMGPSVSYZ[[[[\\\]_&a_cfj lopq&J%k%>$$$$$' *0-6>FnNDU]ekprsst@sssssvrqpppppPll%lSlmlm-ngokonnl~i)c ]UME>7/*&#$#$$T$%?%%&&3&G&C&&'(+/38%]%x%&&I'(,05h:c?E{JOTX[^<_W`a `_]\\I\b\<\]t_b8eilXnopppnlheVaM]YT)NnHB=S83/+)&%|$$o$<$i$u$$&[(v-3;CsKS[Ycjpscuu|uuLtt tssrYqqqqrTnWmn1nmno opqqppmic3\TLDp9`50,(& #""%"S"e"###$&+0o8`@9HPXaho\ruuuvtt2sts?s^]^A^v_adGgiklmmmek+hBc_-ZIUPKE@6;6'1-*7&{#!! !.!"/""$%%s).6>RFNV_gmqyt#t-tt sSrrrrrrst tugpp1p oooyopMppoomjzd^nVkNXE=5.&(U" uRp^`cu!K"&*1 7 =CIOU:Z^zac_dddcbaa``aa?bacfh^jalEmmm+ldifa\>VQLFAQ;7"2.*'$\" }j !!!#*$I(0- 4/4;UAGNSYw]acefbfeebdd*ccccdf#gik+llmlkWgc]XSMHB*<73/w,(%" s1 [ "# &+]3:CJRZbNimppqpwooopQpipqrstupzooo nnQn5nXnnngnxljYe_^WOGB>7/>)!#rHV u!2$f(-29?JELQW\a)cfghhdhgcgg fffgRhfikNl8mlmllj.e`ZTO"ITC=8w30-6*j'k$"9 U{%QW!F"%z*'19sAIPPX`.gknnoEnnmn(nno_pLqrsuooAnnn7mmmmmmnlje`0XbPHM?8 0)#U3pEE #',06=6CJ[PV\adfgi_jjj^iiiigiEii{j6kMlWlmrmm?k|id ^WQKE}?9d40S-*(&^$3! D O !L$)-08`@GOW^kejDmim{mmllglmJmomopqs t,nn.mmmFlllvlmm9mlk,faWYRIA91*$ 5n)m"$[ #*&*.4w:AMGN>TZ_vcpg|ikikkkkk$kjjk*klbm6mn mlm&jgb(\@UUNHBCu6/'"?9~ u"B$'U+W/6C?N93.+)d((q('U&B%C$#"! %At!%*[29AKHNVU]+cgjjk@jjkhkllmnpqqrihah5hggAfg,h+i jk~kliXf_YQIqA'9X2_*%K f|P>O(P I!$G&P)-3/9?EKQfW)]dbg~jSlmnoqrrrs0sOsgrZq\nikXe_WOfH@A;50,)''''f&&%F$I#(! v. "!&,4;CIPsW^sd|gjjk*jkklDlmhno4p_q:qrag,ffggfrff}ghikPklejIga\HTLD>CI)OUG[oafGjmJoqGs[tuvvu/trZp;kfI^WOGa@94R.*'Z&%p%& &%%$#"! ] 5 "$* 0I8M?FMTB[aafHh~jjjjjkllm*mnopKpip`?a;boceeefhiGjklmljfxb&[T:KD<5j/|)&J#3! 2I "C#%b&(+)-05R9?;DDJP9V]bgkEnqstv-v+v)tspnhb^ZcRJC-<601+(:%G$$X%%K%B$$k$#""4!{ X 9 % !3#e%+19ACIP*Vr\)af jmqrt@tRtsrqnjAd]`UUMdE>~8c2G-(%#x#F#6#$$##y#S#""!z! } i h!O!$O'[-G3;CJQXX_d h"ik3kLk4jkyll3lDlmDmn'mmhmTWZm]`ubdf]gijjl&mnnnjgbb\PTM>E>8G1-(&\$"!!= ]   !w"#%9&P'^(L)+A-048=BIOQUn[[`eimp rHrrq(ozkLf_XPlH7@9_3-)<$"!L!!"x""""m"{"Y!!a   3!W"% (/5=DLSZ%`eBhik5k4kjkl'lllrlmSml~k|jMQXUY+\`c!e]fhjklno#oljfe`WYQR^KD=61e,v)h&m$# "E!a h R K !"#$%&o'-((*,/27}<AG}MSYA^chknopLnalgb[{TKCE;4/)K%{!  z ! !)!$!%!#!J!1 0l @!#&+18@GNVJ\bfsijCk$kjjk]kkkkGkQkjhg0eFNKOTY^>advfDhj6klnlolon_lhdc]WP]IB;50J,p(&$#G"! !"#f$9$%&&''(*-[1y5:@ FL7RgX^$cgk}lmkid_-WQOjF>w70,+%"eYq\ "$(-4<CKQY+_dgjWjkFk jjkkkk%jAj iwhfdbo`C> CIOU|[?_cl@moonmjg6a\UJNHaA;d5;0,Q)&%#c"!!8 !-!"h#4#$|$%B%%&:&Z')e,0G49?9DKNQW^bghj$hf(`[GSDK7B:q3u,(L#!F[ ")$'G+1|8@G}NUG\a_fpikk>kxkjjkjihg etcw`]ZW5GSPyW^bfhjklmwnSnYnlkheao\WNRLTF ?950`-)'%3#"""X""#T#$###Y#*## "#G$G&):-05;BJXPVY[Z4XSNG ?70*!$"d o>e_!+"$'c+06w=ODKQX^dcgAjnkll[kjjYithbeb?]Y{TO_IC>9 y%r.7A JSZ_dgOj$klmMn'n=nll)j:hdc`b[aVQKE?:q5A1R-*(&1$$#[#b#z#$u$$$$4##{#a""#@$&N).+0R5vPV\afi_klzm4lkjRih fb]WRLF@694_.?'0:DMV\bRei[kNlmnenn{mmMljgdB_[VQKF@":[51^.O+(&%$N$#$$%*%s%Q$$K##""~"@"#m%X',+4/6}=DaJNQtPP*LYHA?:\3.+&"!Ci <tj D!#X%'+k/34;+BnIP0VZ[ateikmmmlkjifc^SYRwLE=60*A$X!|*-3=GHPW^-b`gilamfnnonnSmoljJgwcb_[2VQLF@;63j0-*)('%&G%&y&&'\'''&&j%%x%%F%4&_'+!/G5<&BHLoODNNjJF@I92+':#[! P  t !&""$&),05z;B}IP]VV\`eilmo nn\lk@hfc6^XRnK6C;9,6.32-112x3_4h556h67>766|666 79=BGKkMOINkMJGBX<61E,)>'V%s$###A#[#_#$i%&(*\,.25}:1>DJJbPV\?a}eiloprurKr omie`ZSKB:t1( 7 4 !)2;DK]RYS` dhjlmno{ooo*mkiEg8db_[VR3MIrEB@=;:.99P: :<<=(=>??>>>>&>.?A^DHYLOQkRQQ;NKFAfda]YiUPMsJ'GDCQAAA?ABCDhDEF FFFFuF2FWF}GI2KNQTUVUU+ROK;FA='9:53+1 0..y-.".=/<02x467:@<@CHM+RFW\aSeQilo pJqr~ser4pGlh bo\ULCh:E1<( jr  (08@H>PW^.bif:hkmoDokonnlkj(i0geb_4[kWTQsNL*JIIITIJhKVLLMKMN/NpNNNNOCPaQSV7XwZ[\V[XZ`WTQM"HDA:=;Q9=8>766)6^679:<)=?|ADKGK6OSX] aGO"W\adhkn^oKonnmmVlkjiVgHda^[XVfSQPPPQ(QRS:STUV.VVVWWWXZ[]y_`a-a`f_B\ZGVSPLmIEC>R=>>o?@B`CE5GILOJRVZ^bSei_l6npppqppolqhb]VVN(D~:1&'[ Bt?1/} >pd%,41<.DkLSY]bhf#j/lYmm3m lmmlkjih eca:^\Z$X]VVVW{XXYZZ[\]]]^^i^_A``b3cdeeedca_x\Z'W$SPMKDI?HFF2EEF8G'H)IJLNQ(SoV9Yj\_behqkxmoo%o_nnmGjf>a[JU=MBDt:1(Zk f{zo l? g t"*1h9{B4J"Q$VZ[_e hkhklklmRmmMlkjihfPdb`_w^]]^ ^_``abcdeefggh3hij+jkjjihfdb`^3[wXUS;Q"ONN M|MMNZOBPR=T,VKXZ]_b2dzfi>k|mno nbn]mhlli[e`ZT LC:j0'e ==KvpM * '+.6h>ZEL2QV\S`e'ghhiKjkl5lkCjjiUhNg/f dd"cDbbbcud5de4efgh]iij9jk?kllAlvllllzkjihofeachaH^\KZX#VUUJTTThUUWYZ\^`YaceQfhsjlm1llk@jhfb]WQJB9P0 'od 0^}tAsPSF# X qe#*2b:pAHrMSnXN]a:cdfIgi[jk}k}kk6kjj(ihhhhhihphhiAiijjmjk^klYlm5m|mmmmn(n5nmml|kkj2hg?eMcBaf_^]]\T\([\]_`mactdefghjk)lallnk*j:h|fc_ZGU]O*H@7.% _. :*vsZ{Y8 ;  'a.6A=zC|HM}RWs[]` a`cRe fghhhjhhxhKhh)hi2ioiaiRi@i]iai7hh|h=h*hEhTh[hUhCh%h*hIhiiiij j[jjjj'iah'fedccbxaaabRcdDeTfJg7gh9hi ijQjjyirh:fLdbb_uZVP;K7D=5),$r wrQS=U?`Mqun |7#9*I29?CHLRVY[w]^^`b'c|dMe&ef f8fBfgRh;hi*iPi ihhBgwfeedd%cbb"ava@a5ab+bcidAeTfh,i\jljjjujii$hhGggggghYhijjjjjjjnihgUeica_q[VQ$LFA/:C2)l!al '"!6, CgQL #&-4v9r=A_F,JOXRBT`UiVX}Z[h\]R^^__`ZaIb bcbbbCa`_^U]j\[Z^XWV~V UVNVWXZ"[^``cef^gogh]hhhhqhfh`hjhihhi$iiiiwihdgfdb`C]\1YV8Q'KEAD<67.&3~ t*kM?JHz9|cQ $!(.37:?CGK&LMNOQ5RTURVlW~XcYdZZZ[M[k[cZZ XWVMU\TcS>QON9LKKLLeMNPSCVY\_b d eJfg]gghhhggghRhili|i_hdgSeca^\.YW TwPKE@;7;1*# .e xW[hGmx qvt$)-D0d3Y7;?ACDCD-EF^GIkJL~MOOOOOPOO@NrM4KJIIH FDCA|@@>@ABBCgEHLGOS_VY.[]k_;`,``a/aMa]azabbcdxd_db`^[XURP}MPID?:B61-<', N 5 eam #upT! 3I'cCm XTB(#!&)],{/3689:e:;e<=?AeC5EFFvF EEeDCBAy@>==D<>:9376@55)56 7]8;!>&BEI}LORBT;V(_:c)N _ G  #D%,'*-/001/12457s9:;;;d:u98G65w32r10/.m,+**)*1*+-9/26o:=v@C7EGIJKLLMNP#QS=TUUMTGS4QNKIVF|C?;=6>1O-.)&# V/<<~e,Q^ ANAU+SVh J_~w+\ R~@!#%&'t'(F)&**+-k.0N01 0]/.,|*(&%$#N! EM. #$&)-n0469;=?L@mACBCCEFHEItJJJIHG&ECB@M!%8(l+A.%0s24$5v6{78:d;<=>>>>f=<;8E5h13,n'# zT c\P=2 }E-yXfb!%Y6#/v ^ T~w68>S@S5zW K   ^ l X c$n #&(g)+(+,-./013344O4 2u0- )R$ 0>  "A AVDp#0uXF<D\wrU_[]  $  ,xxb>O o Z  ;ed2a % ! EW+ k!^!"L"#$%'()***J(<%!2 `fOsLL2E2f^8$/~r7" r`P-| H2|f 1 S Q t_ k0-g*x(b 2 * x!o ^J  +er$a]wC]qoS=,RwL/,[, =57FcIUR9ajeBt[F`zV3kn)%&K  " 9 #-{(.j2]X! 5 vY+tfZA7i^vmaWBJ^rNAx |q& =E(k^rrg&jxC&2C| Q@,% 3 q 2 8 2 lo]g vaR7ZoumPUrT`\XWooK;J!9C ThRaT6Ep( eC9'7]mdVTVfnBy<JkS(` 0G22@`~p@*J}9M[bcqm^2%@2Tw{N )v4mh!Oi|]C5'4S{}ztfF"LG| ={pm2=Y1 8w<rX55Z'<Rgmk[S; "&!)oDFislw(d38_x^XT^dv)]B<]{XEnJ^F@Vp~w8Q^bYMGYX.-1% " 3`IW,RsX\ 4UzeHKSacaii]D/<ZqSccdO_(b|wM) V>?XhleHabYF8:S^E /,!1BMFKu09[(iex[HZtvooqxzU%)OaRF1!aLFQXZX4KTZP=1:HSB":>0#.CIO]pK K^jxo{n_bkd`b{7t]+ETJ?0*"r^PT\]U';T]S=+.P_8 5RC%+H]M?\vmI7|s 9 i_psdga5z(;A<2650{cY]\H)BWf\<*Jjb8 @]U1'LWYemvhC&@g$4c&33'-*~m{]isdf &-2)):4`RB",BbnX>CVk_$YvP3[y|nsur`6'DzG#`I^W995wruqxU "Q`L5<j}y--%,!\<" )GamaI;QaK"-^_>"2YszzonhREHbxQ33u<lpKG=#pjnkpA 2HE6.?bsx# $+  O( "8^jK&-GXN# 0U_C 3bnccmsh]\ki<3NLdMM>&oiqqsw}n1 ;QWC.o}z (:,`8  .F>**5BE:("?YWD07_pnqib\cvcUX*QNSC,gcpv~zY2%1IOE6&Mx # Y9&+  (46-#%?QA**=TcZTejbdmmkkov}|*<ME7{{hfu~kfadngC Ix&Z5% 0 '77&9SI1%-C[eeen~kfnqtttsv~>GJ4soxxhfnqmiV1+BdtB  '  2A5%0@E=1+-@\qqijuxmlow~~tln{,CRB+~shjegsyr]J9&&3N_t |qeM0   !#2218AGE<2'4[|mp{}zuoijs{vnlu#;I:%nhtx|qZH>579HXucJ;#   !2- %,5<AHJF=-4Um]^gtytg_fqsrpw 19*kXPNJE7;P|jI6$&& @<l J#H@r|^He@B_)(LC( C } ?  & +   U   _ i A rQw?)=lALO'sq~.   DJ`T v<MZaUOx<+] N  u g g Y # m )  < ] l S .    & M  !  B P W a  ^ 1 6:OIk3jx&5 XyI,T`\N'g%v | u ` % ] )     % 8 : 1  m ` U x ( G c t "  , 2 "   # @ [ C J & )Q82 GcCS}LW%xFXg.eE   8 N : *   S 3    + 0 6 )  @   _  = U p x @  (   ` A A x1'+{ua`6A.-7h3fX 3 9 | 1 g e   '   W 0  8 f  4 I Y z Y $ O 8 P i g G .  " " E   . p % @ zg=+IGA.Ws7yQ dP!X^D  }  1 [  o G j 1  < h    j i J (  " 2 8 C \ y Q   - - %      ! C w # .   G +  gDL uyF|'`` ImX"h^ : {  Q /   ; u Y  a ? $ G iG"18AJa5 + N 6    1 L f u Q   Xee;+Qs1s[f,qexh \ ? * 8 $ 7  T o Y  t ?  ]&|F\M":k _qD&&4W 4 z I  [ jhc-uae DEIQ _  o ` i [  z T X o YKd$1AlQeHzxmgdV07a&tD_}{>'  + N n m a  A d % | X!#v %f# } f r E <  J 6 R m a \&?}(D^y}fj;V~60?g~~xY, >jz <yG.kpYpOCY * ; " p Q 5 u5% F ; Q 6 t [ d $ n v-mA@J@KAd:b;iR8=Tq~sbG-$&<Vmy{vPQyF<hV%  - V  [ q _ @ P  t # \ 9 "  p s k M L N k # a (    %l;_Nk'4 Oq(48*( ,T}0\nmyWf.ZX% S  ! T G A K a  ?   ' 0 + [.@8rk|NniY/dVc pM$<GTs$v"suZ{h )u  9 5   | F T f \ G D f | e @ 4 R | | *QR ]Q| ab[TLyi5iwC[3#6NpQY`##emvn/h'f@x g  r  4n#bvP]D N?PM+ q#+zY:" NMtI>+Q_Jof yWWsX#je9;o0AB w.6K}-l`, "{0uVD7S=nZ9LS3|v*toxJpO/] 4BB'aVyNh$Yp<h_= 5 p v n  g  1 l iJ<}bO  g pd9@Qh_*UFSg`nT!RZ"]x\7{fy35,V%)( U + R f D6bt8^VH"^]1!AQu Y 5 z J D ]e }`0g ! X&N>G8bj~(D@W ;5L zF!L^ntr  _\!  f!'!"#U#$W$$%(%%&*& %%z%$$#4"@!||wZu-m. L?+pe\hy.ah KkU82zHFYC G sEgU; "$}&'9()v*q*+B+A+L+w+,G,-T-..d.../ /]///[..g--=,o+v*'('x&<%3$"#K"!!5 ~J1 p'sz y 9 GNC|3|^c104&|" gB X#~ # ?ma !#|%e&&4&Y'(*,.a/19245?6}7%777u7V7R7z778.8Z888899h9999P88:76543&10R/6.-9,y,+u+,+ +***?)U(8&$#!o \]fv:  j2ec8+caziz](406 ] j HVf">%(#+L-/;/0R0244 579U:={;:o87665/44455-5^442g0.Q,*(&m$#!x4N r `sM $PE^p Z0"P%9'*-03689:;<=?l@BnDEG{I!JKMMIM.LLKKL>LMNJNOPEPPQ>QQQQQQ;PP]ONMJKIHF~DCBEA/??!>>>?p???>n<:8=53%0.-C,/*)@&$!I5 #eBEkw &^ / {#9&j)-0 3 6E9=?BrDEFGHIJKM{O$PRTjVW=XSXXYWW\WfWXnYCZG[?\\]F]]l]f]P]U]6\\\'[[hZZJY(WVTrRQiP&NMLIK7J`J-J JCJJJtIkH=F1DA?<~976U5*31.+r( $!K xkm4j:j2 I O PaB"'C+4.2O58;?KBFI3KNOQSST TdUV WXZ\"]{^_````h`9``abcdefjfff#ee)dddccmbbbbb.ba``{_$]\[vZYXWbVVUUTTTTSTS'R9PO LJHHEuB@?z>+E951,'"y (Z &&v#) aC #'-?2[7=$AEILTOS$VY\9^`cee[g!ghghhjhi,ijjk3kkkkkwk*jjkkl?m mn~o/oloonimll9kk;jjjkknkvk1jxiihhggMffnfbfg gVggjg f ecb9`w^\ZXVUS%PO LWIME@;72O-)$: 8sE0-)*2'M&^%')-27begijlmo+oppq`quqxqpp0ooooomonnmsll`lIl@lm=n+o)p?qZrrrreqppNooioo1oaopWppppp?p oooofoYotopRpqeqqqq>pCoBmlkj hg>edba9_\YVRqMHIC?:v51#,($ }Dq FyBXF^B?=< ;=v?NBFKQ#V[_c{ehjln!opqrs#sSsstLtKtssrr&qqjqpponn0mqllyltlqlmwnwoprrst tsgrrqq5ppqqr'rs's=s6srrrrrrrs stttu7u(ttAsjrSqhppo\nMmdlzkjPigSec`]XSNJ(EAx<73M/ *&^!ZA dHP.MJ`GFF^GISLfOTIY1^"bf,iYknmopSq*rWs8stt*tt>tdt{t-srr+qppp;oonnmhll;kkkklnlmnp(q_rfssstss rWqqhq qq qrrs\sss[sNsJsAs=s%s=sxst{tuSu~uuuu+tsrrq[pooLnmm7l jhgKdac\XTPLGC>a9516,S'" h eaYW+TRQQ[RSjUX\`eiknpKqrs~ttuxuuiu3tuttt)srqpoo-nhmmEll:kkkk_klkukl2lmnp q"rLrs2rr/qkppzppp%pqBrrrsrrs'sLssstfuuvGvvwwwvvEutt+% 2 * %UaS_9]e[[Z[a[]c_bei(lInpqrsWstftu tt[t+tssmrqq"p$o mlykejtiiioi5i=iiiijjQjkklNmCnKobpq9qqNppoo2nnnoop4pqqpqq?qwqqrTrspt(tu\uuuuuouKttssArqqRppppopLoongm/jh5da^[WSNJwEA.;5/)# hgedd?cccdf9hjlo^qKrs{sstWttt8ssrrrXqponmUkjJhg eeeYeefcfgh5hiWij+jk8lmn0oVppppNooKnnqn'mnnYno5oxoyo]onoopp%pnpqrr(rsstSt_tXt8t;tG#lkk2jjFiiiHijkmCnpr^sissssss\rqq.pp{onmo[oopppqqpppqqrrrsEsrqpnljifd\`\XT`OxJBD =7e1 +H% pppY>U>?ATCEHL&P8TsX\M_xbehk moopqrssLsrrSqpo}mkihfc`]ZWT5Q N@LVJIHUGrFFmFsGHJMPSVY]a`e[ijloqSsXtuv/vnv=vbvumtosrqpn|lkhea]jY:URMpbpqrPrrrmrqq~qqrqq ppo\mki\fd-am^q[XTTPLI^FDC@>U;:889$:<>*@BF3JuNSyW[s_RbfimoOqorst2ttot^ssqp$mkheLaj]ZVDR0MIF8CBA-??G>>>@+A=C{FILPuTX8\aKfj mor8subv vpvGvvRutt^svr_ponljheKa^\[XU?oXopqrrJqqq(qqJqqqp:onmkifRc<_\\XUQMIEB?=^:8E54223\4689;987e6656w68I9h;>GB EJ NKSX]`bgknqTstuvEv*vvvov7uttsrponmk^hfc@a^\1n{oopqTqqDpppq q^qKpponmKjgc`"\WSP LGC@;=;964510q/\//013E47x:$>LBHrMSyX]c@hlpsu=vwlxx x wMv{tsTpnUjzfUa[VIPK)E?:6}3v2000/v/0]1247 :>MCGMRvX5^;S9375/20.-- -,-p-/&0?2`4r86qpponmlkihff%emEmn[noKobo0nno|p p@ppoomkgb\WE`LSZ`vf imprIrshssAsr|qq pp.onmlYkihggfFmmnDnnnnGmnno_oozooZo1mjTe8_YSILF@:510"..p-,++x+)+"+***Y* ))V)q)+;-05;"ARHPXe`#flpt.uw*wcwwXvusqolOi.d+^WgOH@*9Z2.c*'%3$g#$ $>$$%7%'(+.38?WEM'TKZ`ej:mpqXrdrarreqq5ppoodnmCljishgg7fnnn;nJn&mmm;mfnnoo ooWo%li`c]VjOHA;40U,+++7***W*9*-*7*J*3)))@((&''^(R)Y,0D6F<71[-F*N)))))))))))))c)R)(((S'()^,j/5;BJeRJZEaOh6lq rtuuu(tsrqomjfb][TLD=[6%0+''%-$c###$$$$$$&b(Q,/4:%@GNV\aeilXnoppppooo)onLmkjiihthgoonnvnmhmlmncoFoopp;oqkgp`zYTQZIB;h50.+;()) )))))))))){)a)))c);()*-16X_fkpqs}st^t5tsmrqpnm]ie_TXPuH|@9 2,(%O$A#`#####^#)#?#%$%L(/+#/4U:A,HPV\aSf iUln8oooo|nnnnnlkjiihhth:pEoonn%m[m m+nnop?pNppnjle^mVNG@93-*))})*/*?* )))))))**+$+u+,--g.15:?ESK>QX_0ej9noqqmr r?rr{rr/qppm+ic]FUSME>;7}0+'%$$$$$##""##%'+/5q;CJQXG]~bfjmnoNooennnnnWm?ljjiiXiIi7poo7nn"m=lm>n8o opDp4pomEhck[TOLGD>F7a2,*z()a)*)**))))y))*-*[*+,-./W02h5{9 =AFvKQW]cgk6lmnZnodopq:qrqqomHgaZRKD<50+()'['"&&.%{$##"h"e">#m$(+706]=EM!T6Z_ddi8l1noooo-noo%nmlkjjjkjmjmpoonrmmlm.n'no$oo@oljree_XoPHAr;540#+)(_() )))M)4)4)))`)*K*+- .0>1357: =lAZDHM,RhW\Xa dUgEhijk;kln-omp{qqrq_oje5^WPIB;|5s0!-j+*N))(H'H&>% $ #5""`"#&7(-g2:2AIQW~]bhlIo!opp~pWppBpLpoKn"mlalhAEGKNSTWpZ^O`cdefghjrl7nopqs ruqkmPhia[UO/Hc@:]41.*,*)(T'J&$$#""#$&p*/\6>FMT[ah5lppqqqqqqqponmmmmnmhonnVmmqll9lmnmn lkvgdS^XMPHA93.5*'&%&U&'0'~'''''(W)c*++.i14269<@CMFIL\ORXUXZ\^e_aIbdeDfhk mSo3pqsrrnj4c^LX3RBKD>F840.,/*p('&%$$a###$%)H-4y;CKvRZ`hmqr+sjs`ssJsRs2sr{qPpo|oQnnno)nammm7lfl&lmmm6m8kieBaZTL?Do=50!*(#%%$%<%& &&'5'b'O'|')),/-3)6:=AqEHLOQSV/XdZA[^\m])]^_ace=gjcm=oqrss;rolfG`ZTNHNA;620-+)('u&%%3$$\$ $%(+29AIaPX_gm8qsttttttpt|srqpppOp"pnnCnmmllmnCn4mEmk;hc^WPIA692-J(y&I$H$"#$$%o%&P&&&':'(),`/48=ArEIMQTW3XZ[\]]a]x]^^`Cadfim(orEs2ssrolga[SU}OIC=84\1.,*w)'&%%K$$$N$$'n*1|8A@XGOWM^flqsouu0uuVu(tutsryqqqfqLqTnnjn_nEn3mmno;ommsk-gb\U}N.FD>k7>/*&R$#K##$$$%%&&m&&'''}()-176;@EJOmS}WZ]6]_A__^^<]]]=]^`&beZhloyr rsrrholgb\jVPK9E?:X52/-Q+ )i'&z%m$$w$b$$${&)0#6>FNyV?]f^lrsuuvuuu!uUu7tJs6rrryr|roo/oFoDoKoo%opkpnnEkha\TMUEd={6H.)%g$"#+#6#$$%-%%%&%&&(U)-)1p7;sttt8st:tu:uvYrqqqqq}q}qqq4onl~ic]UtME=6r.)F$9" V ` ^ !@!|!!""R#%(t,516ahnLq1sst5ssarsbssstau9uvwVrr.rqqqq,qq1pp@nn]l3i?c]V:NF>7?/)$7!.4"Iv  % g !#& )i._3?9?EBKQPVmZ^`bc6ca`____0``aceegikl#l8ji\fEb]X,RLFA6+FNjV<^elgor r3rrsqqr8rrsstuvdw]rrarqq1pprpMoo5nmki^d^]VOzG?70.* $A!@ \_C[lV !$w',$06k<^BINTY]`cNd+dccbVaaabc1d8egDi+jkkkih)d``@ZwTNGH5B=1840,*5'%]#!DjdL /!#( -M59z5*1.$+3(&$" t!#'9,e4 ;DKRZahl nnoXonnopNpspqrsturAqq=ppEoo nzmmqlm2ljme`YcRFJSB[:2,%P!rRr  "%C).,2~8?uFL[RX]aegghhphggbgghhkhijJkTkljj0gd_ZTMGgA$;6>26., )'%$" Bzr{|I!"\&>+I2:BIPX_fjm>mVmmlm;m^mnnoapZqrstqppponn;mm;llllJkg b\[>TBLCDU;8307-+))'%$5"c ?Rk#fb! "K&+(2:pBXIUP W^eiol(lCllUl6lglmmnropqrsppNoo[nmm,llBkkll0khc\V(N!F<>C6C/'",j[ "{%N',2r9@GpNT+Zo_dgj j?jzjDjjkfkl_lllSllrl-jnhd`TZOTGMGKAA;)671j.\+*O('&,$"! GrH!/"s&O+b2:}B-HOW&]dhVk k:kkgknklXmmQmopcqfr=soo'nnmnlnkkjjjkkkhe%^XJPMHp@a8o1%)H#Lx616 SuD!#O%V).58 3/>,*)('&%!#"!z <~w !#^',4e;CGIP\W^^dhjjkHk$kQklammTmopRq4qrnmm6lkjii(iKiEijkJki/fM`iZERGJSB:.2*$ J5haC7NOr!#+&+O18?FzLS+Y(_dOhNjkllmopppqppolnJkpgXggggffffg]heikl\kjfb[TLD=D5d.(% ! eI`[L!"#%(,17~=(C+I OU[af-jmHoqbs~tvuutOs_pnhb/ZRJUB<\50Z+ (%a$$G$$$${##8"!!C q + x !"%n(Z-4[<,CsJ`QW1^/cpgiPkkIk82 -( %]#&""#e###t""~" !!I !("_#:&)X/X5=DKRY`dhjkkkzkk6kkl lIlmnVnen*nc^ _a:bd+deefgi0jkmngnkhcW]VPOG^?81,(&#a! "o|l "#G$;%'),Q0i49>DwJPW5\bMfk#n>qWrt@ssqpllhQacYQmIcB:4.)%]#!_!!""g"r"Y"!!!e!3 !H"#&*x07p?FWM\TZafijkl kkFkxkkkkl+lmllGl+X_Z] _ac ce'fsgiIjl^nopHnUl gb#[XTzLEg>B617,>)$%#! p  \!m"K#,$% %')G,J/498>.CJ PIVM\.a?f^j661*&z"8 ya A !!)!K!S!e!T!. !<"#'e+2A8@GNVK\cgj$jl5l=kkhkkkkkklkkTjqiPTW[]`sb3cegbi*jlnp7q@on/ie_Y~RFK/D<61-%(&%#o"   !"Q"#$^%&&(+O/27B!:3-'# %r O ] * C K !#_% (-4;8BIQX_^odMgjvk2lKlNkkykkkyjjj0ihgfdI^MRVvZG]`ubdgijlopqq$pli+c^+WXPIB<51&,\(%#!  c!!"i"#H#$7$%0&J't*--Q16J;AFM S Y^Ncg8jklkjhc^,V_NFb>_750)*$!P`RI?f !"$<&h*/6=E LUSTZ`Aehvjklll;kkkk=j#ighRge3cOa6_Q@FDKQ V Z^adafik!lopkqqTpmkMfa[UOHB^;6j1-!)(&{#"^! !w"6"##g##$[$%9%'S)-g15:w@EKR&W]aeghkeklll9kkkih f|dbb_&\RYbV8">EoLR4X[]axdYgRidkpmnp*qqq(o-mzie`b[CUlOuHB?;61v,)&f$W"!![!""##l#####$C$F%+&k)1, 014>9]>DK5QX<\abdca`ZUM1Er=6p0M*%!HUn.^3Sf5R!%(*+06>DKRX_^ch ikl5llMkkJkjhcecI`<\XU&QMMu/6>FiMTZ`JcgDikkmnopq)qonkhd_ZfUMOfIB<=7 2+.}*'%J$#"###$$|$$V$$$b$n$%[&(,5/r38=D:K*RV[Z\^E\ZUP"H\@92->'$ SR5|6aT!6"%n'+Q/R53;{BIOOVn\4beinjlkllkkoj}igeXa^7Z!UPLGxB&/7@iHQEXG^cgixkm]nompppooRmkLgc_ZUOIB<743.+e(&#$a##$ $&$g$%$$_$##$ #$%g')-1 6B]975%1.+)Z''X&''_'''H&&%%>$$.#$$u&T(,\18_?@DJ LxNMMHI:D1=6@0*q&#F!N1" !a#$'*~.}2p8>TE}L^RXz]tbfjlngnenmmk7ig8c^YRpKD=<6!/^)#<B#(+5g?/HQX_uchikBmnop1pppoo+nmykhfKb_wZV+PuJE ?;4740.,^+W****+**\));(('p&&&'),1k7>-CHJM LqLHeC<60;*'$L" ufqVt F !".#A$v&(,!/y4'8>ELSX^bgPjmnpooCmlgigc_ XRCJCl;3,% kc%2.8OBLT;[v`leiyln oopQp$ooownmkitfc`=\VW9QLFDAr=964Q1/.../&/;... --L,z+***'*+z.28W>ECeGIKK=JG}B93.+(&$## """"""#$&(b*,/p27;;AG7MaSY_Xchlofq rrrqrolid`ZYRJ}B:21L)!W8@ & E!%)W2B6FJKMbNONNRKGA<72/,+6))''&&b&S&+&~&')}+-/25T9>BHN^T2Z _^dhmorKs]ttvt0qokAgKa[SKB91&' # 6a!*b3n9642\0Q/. --(- ,-J-/O13U57!9U<@EJ[OTY^cdh'koJqAs$sttTsfp4lgb[TKB90(9u~Q K$e Nr!*2;0C JQYe_Zdgxj~l@nHoMpp p oo n0mPlNkjohea~]fYV.RPN9LKvJJ{JJJJwJ#JJIIIIIeIJLTN`QSV4XXYX)WU1QMVHD@>;u976_5T4494 345g78:<$>/@D'H LQiVZ_cag]knq_rtttuSt2rbnj c]UMYC: 0'W=`  <!3)19AA HPW]bfhkm\nooFnnnRmmll:k heb_z\YWZTSR{RGQQQQQQhQYQ`QMQUQmQQRSuUVX[6]^^_8^7]n[X7TDPLItFCB@>==<?@BCEHRKOySW[_}bfjmoq}qs ss=qn>idB]VMDM:n0($- B  u'4/7^?JGOW\adhk5mnqnnnnnngnfmmlj=geUb`^o\ZjYAY XXXXXfX]XXY&Y`YZ"Z[^\C]^`;ac5dpddcb`^[kXvUKQNLJJTHPFEE D3DD DEG/HyJ KMP>SW4Z^adxg!j\m.oqqqrhqpmxic^PVND:1'' quB@P ]v!&=-5g=kELMVSY]bWeijl0lFlmmmnmmlkj$hfe,czay_^^\^6^c^L^$]]^R__r_`G`abbcEd5e egghihhg8eda_\YVTRPNMHLKKKLOLNCOQ\SU2W}Zh]`cegilmnpoppEooymkSfb4[UMwDo:v0(KS p/n}xq9 t q#+2:BJ^QSV[l_4cfiqj[jk>lBmQn0ncngmm7lNkjjYiNh,fedded d7d2d+ccdZe)efgfhOiFjFkTlllmcmn$nmlljihfZca7^^[YWV>TTS4RRSrT UWXZ\^acf hikXlnooo#o mliFe_ZT8LC:0T'l, $=`rW 9/"1(/7!>F2LUQUZ^bdffhik&klMkkkrk!jiiMhhkgggXgFgKgTggggh$hijklmnxnnoo!oUoBnnRmmljkJjh0fcay_]\[oZYYYHYZ\ ]_0`bcerg%hijlHm$mmrlkjhf+ai\VQJZBI8/'1 8We8nAJyA k z%+2:BHILQUZk^`b ce6g9hj"jk kkCkjjVj%j8h0(Q b ,6'Em~? b D&,2[698BEGRIJLNP~QRS STTTU UUTTTSRQPO2ML:KIHGG;FGHKMORU X-[ ]_mab)cQcdddddde>efXfgLgZg~ffFdb_]ZKXULRsN-I*Cw>y95 /k(!E,/ `xPV u` ( !Z%(+`.[2u6:p<>?ABD;EzFqGHHIIIZI:HHHxHIGGFF DCB_A?>=<<;<=?ADGPJMQSVX6Y[H\ \\]]] ]O]^`_@````_^\ YgV?S~PNKGBr<73/+G%9>W R i $xlQ$Kd`G u " 5!$b'M*.91r4*57H859I:$:;<=>?Y?p>>A=~<<6;:9876X5322$1&001{2469<@CFIKN1OQRSzSST$TU:VWX&XYXXVURPM0JGD@e;`61f-|*E&2 0 %+ a ,*?2 l*\Hm : %9Q 7"&)B+-.r/0//0y1U2345F44;321 0/-,+`*('&&P%%O%8&-'J)[+Q. 04I7:=G?mACEQFcGGGH'HIpJ|KLMMMLKJIGEB@J<83.*'H$r!L` M+Li.qZ HX7CAY<%J'>KboA uIG0 "$Y%e%o%%%&'()*))(?&%$D"!>]BqYXx!$y'+ -03579:<%<=>?@AB(BzB'AA@?>= ;88-40,'#  |O)lH@R(2zS-lP%[pUr} Ia6, OxWLEMHAZiI>3."%a'*i,.0,12t34]5<56O6h6c65555E420-)$ B]: <U-~M*wZjh01eV7qW  5 R [ @"%VL> o < y [  t{~ "d$& 'U(()M)**Z**++r+++*'$ 2r . ,\1MDw,6vZMA$Co^p]@?(6.;  : 4 0 (  2 e +Z4>Ec@ , QJ+  !{"1"F"Z!*FY CVFH~QN8L8i]4%5x?|oXA x/[F>&/n/Et[np#=J  S) 5 )kE %v:J 00`y cs ^\xE_olM<1Z~R+ d@7% [iG %((D=P]XXE$n ]   vt [ % + oztVW>1f]qf~ZUGPdx;:f]{Bdc[Qn*[tL>4\3K>A461Uu4Rv*{ ZP1|YntmPQlM^`\ZstN&9(q|C ]x}+G-`cGEXYcwuSEF^h=rBZwMU-9ZC+9B|b rD/L{6N_feusc51* Cj~c:=4]rY13smPJVV^li@Rk-_+,Bd >K`4  =xC{_>=_%<Ukqo_YC !#vbVfZ9[rH Aa}rbcemltZ1 *8]lz,_~WAoO&lRK_v|3L]f_SJ\\0'- -cX!%f :gYx9)5b[HQ\ijekgX: 'Gfw|-_^=B^&_|yP.bJI`osmAY`\M=;T_B**#4GFS3AP'wutPCXstd]VarTq.PaTH2 gTKU^a^2JV_U?1=OV@ =C-%CNYrRODc  rm|kSNRFIX+a%?PH<*!sbSU_d[,@Y`S=2:Zb5:\D0RkeZpxW&8rM5   }_KUdSHOv~&o 4<5(*+-~cW^`K)F]i]A3Oi_5 FYH&+Uinsr{rM-"?yT;m7IL:3$wai|tw-+fsXR{*1(#54]RF#.Jgn[CCQg\ShB8gosyxf>,BrL#!*f VqnK?0zrqtyw|BOomR6-S/2*,$Y=' 1K`rkN8N`G-ZY<$&Dm~tunWD?QpyV9?N^O:|qnror~S%/ThX;.>Vuw  ' H& #6dxS%)DUM%4WcK.,IuujhnmWC>RspIC_c{_U>!tnrsuvwxr5 (I`jS (lto0#]1  0NA%"/=B8(">XZL=DiurqcWLTkj]_<c[ZE,vdbnv~z_:-AalbT?Lx ^:#&  &,,% :L:#"7Sf_Wgofhpmiip{{ 8EQF9" xuuf^aq{lmmvoF/37T})Z8+.%22"8PD+*Fdnmmu}e_ghkmrw+BEG7# ~|upoxk^aowx}oL0+@Pj q? *1=3&2AC;.,5Nmtryk\Z[fqyww~0>J?/taYQXjwtbRB//<VcssmeL,     )"*.18?DA70+>f~ntwoh`bnywss~'8D:)odimvyfYRKMNYczaE6#  !6/&4:;CE@9/:[l`fp{xjagstrov#/8-}{|~xlkooiYVcmL8$$(  @?o@&LEu`IiG DRpGE * = z 9 & . "  V  W b ; {^I49dANN$njw+ KLeNl6UadXW6D6  z k q e + e   ; U c K "   % 4 7 ) . S w  9 I U e  i > @9FCj4pu}q$ hN0X`XH `)rx i Z W # _ &   , ; 7 .  q k `  0 O q ~  " )   ' / K g P W $O83  HdDTs)RSmIXl/gK  z 1 z : "   ~ [ ? !   # - 3 = 3 ! D  ( m  G _ o ~ s < |     q : @ z5 ,}+wwgb2P3,4]&l]  A ; l + s v  "   V 1   B p * F Q U s T  N 5 K b |  | m S < . 2 / N   , n ) F g:+KIC.U n3t]#bJI^J)   ; q ! e 7 W  . q *   - l i H !  9 M L I ] { J   # !     ! - . K + -    K / kFK qwBuUUUrTvm$g A # a 8  / g ~ < Y D -  HsM($<MZYc|1 ' F .   + B \ s t U   W`b;,Po/w.al2ufta d A . > + B M e K W  n:uQ[X+1b[g |Q21.Hm / q M  X gck%.vfi 99AQ e  w h o b  ^ 2 / G e BUs3:PuPf@tppfH0&>_l{5Ss~M"57  ! @ d j b  A ` ! z T!o  dw s  q v L H  Y L k  h APm# ;Ys{mj1Mr5<KnkG*&?ef+Y%<s'`lD4M 1 : }  q M . h(~B M = T : k v L o 1 n 1_.#&dQ Nb5j=bL>OioYIB:@Mas{zvo@BXLgN   / Z  W j X > S  u # [ 5 {{ u u o O I E ^  \ 4 .  ! 'Sc1d^# K   Fs14@<<- 'Dn$] SxY"Y\' S . b R L S e ! W #  $ * ! `)<#CP,2*{tNaZc[5 %;Rk;<hMua&q  + *  y E Q f ^ D = a r G 8 T } u ~T _,('sk&E:|ugLj/\k6vX@$ (EbkHdn40<^Vft8dz]3l X } e  Y$pVea:);S/<4N4M  ZxbXYQ>C_\9jEPZdqn0zh, f? 6 i 5wv_hJB<J2 "p2jOHE,b :agD+de~tj%`7W=25x>4Us-'G?s;r N=&RdQme'~hZxXc6g<{8/kjD-C( ~Cmc^r5nY S|^ !]#% ':()*++,,-?--..".6.X.....|.3---~-n-b-@-,,.++**)( &%s$M#D"!!$ iFkqMq< 2 K 0<jSZ'%) pGcLL^' 1 ^1D $ &()*,c.13"45r6(67w8U9@9::::r:'9999p9!888+777777776^55_4321@/.-p,++r****l*Q)('(%p#p!6B n iYR%qMOm^m2Vi 11~ m'KK!O#'*-02I35k7:<>c?@ABsCoDfEaEF~FjF0EE*DDDDDD}DbD;DDD DBDkDD0CBBAAm@[?=F;98765444B4L44O321.,*(&$#"~! ~ WiC>EkF  }G8"$'}),/268;-= >@CE9GAHJHKXLkM\NrOZP@PPPPpOOOxOOP7PPPPPPPPPPPTOONNV>3>O>a>>=fAD:FIJLNkP,QSUV1WSXQYxZp[_[\:\)\[[[\0\]X]^&^]]w] \\\h\#[ZZTYYYnXWVTsRQnP/NML7K II\HHH3GcFE-CA?=;Z9?7G65]43r1 .z*'#!B YeWia3a ,[ 0 2@B#%'*.B148<;>ADGJTMORqTVVXYSZ\+]^_`pavbccEcdTdddde>efWgg{ggg:fteddlccabaabaaa``6_]\[ZYXrW:VTT S7RvQPONMLEJHGDBA?>=i;9V52-*Y&"=g) r %` j$[(-1x59}<@_CGqJN0PSVX[o^ _``abcdeflg=hhijojkklllQlmmnBnonnmlkjj iGhgg)fggpggGfedd>c}ba`__2^]]<\[ZYXtW#UTR]P}NLKCIHFC@=84O0 +'"Mge KdB$!u:!%Z).3Y7NRLUXoZ] _Rad4f=g*gghhi;ij2jk:klSlmZmn.ngnsnkn~noop pq qqp]o|nOmFl^kjiiiTij6jjjOiiihhgqffffeeeledtcbak`^]?[Z5XWTUTR)OMKGC?b:6K2 -)% ?, '9kB".+)c'&&w(+T/4E9S>BGKORVFY]_bcegikmmmmnBn|npn]nnoo2osoopp/p1p oop0pyqqrs^sss]rqXp7o5nQmlllvlmn@nnnn~nCmmm*llvlIlBl5l&l,kkjihgfge1cbaK_^9\WZXUuRNJFAS<840+'t# :}c } }|H 9642>114 6:>CHhLQwURX[_%bdfhlikJln$o opIppq ppfoooooo~oyoeoDo'onnno oep/q!rCstt'tt@srqp~oonGn mno4pppq>q+qppnp oozoCo3oo+o\ooo@nmmlkjhgfe"ca_][[X4TPLJGC?;7w3.+,']#& STDA?=[<:51-}(#}G9 UNrKJH7GGIKOdRW[^b.ehj_lnsopqrszsssttDt`tsrqq phoon{nmmHmllmmUmn@noprDstuuutsrqqpDpopWqr)s:ttttttRtsssslsMsNs^ssstsrrq^ppDonmlkk,jhfdbs_[X5TPPM]IxE@ttsrqpp8ooZo2op^qtrsst,tktttotTtMtUt\tdt\thttuu:ufu+ttsUrrq|poo nin mlkji glmnoprrxrr'qcp]oonhn)mnKnopmqssst,tJt ss'srrr*qppeonmKkjiVhhThNhh4hZhiLij|jk;klDmCnVojpqqq=poo>nmmjlmm!mnPoop1ppqq2qwqr!rXrtrrssJsasUsrrr~rKr qppDooopJpppp1onmki~ge bN_ZVQLG*A:V3,&P F2kk+jjkjjjkltmnoq=rsssssssFrqqkq3pp,o8nkmml.kigf?eddddddefghijjklmnopqIqQq5pp*o|nmmWmllm=mnnxnoo o oo2o;o)onnnoo-o nnno3oooooouopHqqqr6rqq:po0m}ktjheb?^Z#UPKD=7&0*h$ooppCp_p$ooop2pqMr$stuttttessPreqpphonzmkjihfeba_____` `~ac\e;fh#i5j#kElxmnopqqrqqqpRonncmmmmmmnnmmmNll6kjj^iii{iiiijkY(Y#XY$XYoZ:\#^O`cDeNg3hjxkmnnpq-r'rsss rrqXpp-oonn"mmRmlkjjhgxedcb{aaEaTa]abcdf2giEjlfmopqs1sttuttsrqpoqnbljggGd]`y\WHQKmEr?{9E3.YrUrrsxssnsrrrs*stuuuuuXuRu t~srqxpmomkiefd2a_]'ZX5USRRRDR\RHS(TLVYF\o_qb2dfijln+oprrsGstss,rrqtpp*omnmm*lukjigfdc%a$_:][ZYYYcZ[\^l`pbWdfickmoqs3t0uRuvuuu%tsrqponkifc_kZU OJDH>9gqqr7rrrrxrCrOrerstntuttqtYss qpoTml jUgdaG^:[nXVSsQ3NMKKKXKrKLMP}S>>?R?@ADFJNSW[ _bfimoYqZrqst3ttOt%sprqapnkhf cW`]YVRYO2L4IGEDCB<:9%8z889(9{:;Z=@[DHM+QV[|`dhlsoFqs;tufuuutsrQpnykhd`]\YWUP}LH-DA?r=< ;!:f::B;"AEIpMRXWQ\vafjnqsuEvwwDvvvuvuSt;s rrqqDpronm;kifdRa^mnno~op*poppqYrrErqqpom>jgd`]XTPKJFC@%={;9754v34334457: =AFKQBV\arf7knrsuvwFwvvu2sr-olhd`\&W-R LGC/>;97A5`43334580:>FBFKQoW\bSg%knr suv@vvLv.uuu&t rrCqqZppo)mlfji$gpepc]lmFnnoUoooopqr0rIrqqpoGlJieb=]YTOJEA=;9864c20//A/N.../Z/137/:?E7KmQsW]cimr%t|vwux)wwwvXtsqnie`[UOIsCc>b96V20.-- -Y-X.1/&1?396:V?DJPWA]c!hlgp$rRtu_uuuzuutsrlqqq8pp5oln{mRlEk(jhgllmn'no#ojovopqr/r1rqqpnjgc_CZeUPJE@=97l420/a--3,,,+++,-S.149>DKQX_fhkpsvUw=xwxwfvu^t@qnjfa\nUNGA;63:/_,*X)y()^)w*+*,z-038=CIPW8]Vcfhlogr:sttttt%srqqppp onmlkjjiShllClmImn#nnop&q2qqqq.q9omMie8`k[|UPKD?:7430/#-w,q++***))?)9()*],.3*7=D1KS2Zb2h2nquHvwx xPwvuOtq~njj%fa\TMF>830A,R)'/&I%&4&]&'x()W+x-2_69}5N3&0/.,++>***q*D))Q((( (#([)+L.28>FMU]djoFsYu0wwdww'vOtsp}mhiSeaM[TME>T822/;+;(&=%k$%E%l%&6&'6(*u.175rHsrs7rr pp@ooo4nmkl#kj5ii`ihl`lFlqlNlOllm mnp'ppq;ppn#jd_Y3RLE}??8s3/.- ,N+Y**B*))))p)(('&&&E''*C-3a9SAHQ!Y@`|gmqsv6vwMvusr|olhea[TM6Eu=7;1}-)U&$$#$$%$n$%%%')-16FMU]djxonqst4tttYs@rmpnkie`YRJC;5 /)&O#h""P"""""""#S$&)-16=ODNKS0Y_dhknp qfq~qpp o_o@nn+lk(ihhhMhbhko9nmm6llslm?nZopqFqWqpok(f)^WeOH%AX:@4o.w+T)W))*0*5)))g)@)E)S)_)N)5)2)4))!)A*@+-06;AhGNV] d:inoqr5rssrrHqipNnYmie^X1PVHA93- ($#"#=#C#M# ""a"~"#$'1)-28 >F4MTgZ`eVilnppq(pp oZo?nnWm kqjihhhhp o-nMmvmlslmPnxop9ppq'omhcf[TL-D>F7k2 ,*(d() )))S) ((()()m))***+g+-\.1X49W=CNI&OV\cfhlmoroppqpqOq[q@p_pmj)c]~UNMF?P81&+'&$$$$$9#""|"G"#$&<)-28@HCOV\bXfk mopGppp2ooxo@nml jiini7ieiponmmlXlumn$no5ooXoljme7_WP4HlA':4/+('k''(d(e(3(( ( (W()J)*\+4,P-=.v/13t6_9=AFKQW\beijllmnnoopqqr p?mgaZSyLD=690+)''l'&&/%Q$N###1"#$'{**/A4kk#k;qonmllllmnn n^mljga[SLDO=70,(&%&&R&' '')'F'L'( ()*,#-/W125j7:>$AE`IN3S>X\9`beog hijklmo&pqrGsCr pke^WPjI`Br:4/T,*)Y(z( 'a&%$$##I##%',H1e8@/H*OV]cimeprqUrrrtqqqqpon5mkmBmmmqonmll kl_m mWmmljgQc^WPH1@9-3X-)&X%$$m$%[%&&g&&''()+ -/y136r9$82i/,#*))(R'&%%$$3$7$L%'*/]6o=EMoT\"bfimq/rUssssslsUsnrqpDoono-ooq onmm3lBklym ll8l jhd`ZT,LSDp<50*'k$i#z"#)#v$$%1%&&L&'[(){+f-1$36:-=AaDHxKO[RUX[*\]^n_Q`jac3dg(iOknps"stsr0nib[T}MG@;5-1P.,+N*)('&%%$$$[%K%)4-V4A;6CKK%RZaa'humqrttu tttttsbrq`qJqpppp o5nlmmlmHmmLl1kjgcj^X|QIB :3~.(&!#""J"##$7$%W%&&'A()+.259=BF IMQ^TWZf\%]]]]]^r_`zbdgJjn pstausrEnij!c}\fTNHA<62/{. ,+*q).'&&%$$$#$%.(+29pAITQX_gjlqJrtuuYu utukuZtOs rrrcrRr9qp?oonmmnPnmlskig$b>]NVOG?81,V'r%"""E"##$1$%<%%&'1(),048=AFKROjSWhZ\^_` _"^$]5\\\^"_abehmp`sAttsrsnjd=]BUNIC'>8q4c1/g-,+_)(+&%%/$`$#$$G&*H07??_GPOWW&^dfJlprttu^u1ttuutssossvspscq;pp$ooanno_oknml6jg/b\VNG(?s8Y1,+'$""""##$7$%%7%r&&(/),0P5C9>CI'N RdWZ]_CaDaam_^3\[\\\]_bfk2nqrQsqqmic4\xU3NHB>841/.:- +V)}'&+$$#:""#.#h%(.5(=TEcMU\djorstAtttgt^u#uut#st/t?tUteqvpppZp%oop3po4mhlqjga\UN^F>70+&$`"""u""#<#$N$$$%l%'h(,&/59: ?xDJNOZSX\ ^`bbKbaa_k]I[ZZZ[9[]`Md^hl`oGpponkga[,T"MHB> 9R52:0&.`,+ (&%d##"1!!"4"r$'\,3;LCqKS[Ec^inqVsnst`t[tt!uuuittuAu|uuqqNqpppSppgp'o8mulzj-gPb9\VNG8?81g+&$+"d"p!!""b"#M###$8$%'P*w.!348=eBHAM]QVZ=]t_.aca`^\["Z9Z`Zi['[]7_c3gIjm^mnUlkhe^XsQKRF@<|841H/-,+)'%$ "!! !W!#&<+1t9AJRYahmpRrrsssstuuju uQuvSvvrqqoq?q ppXptpomYl_j+gwb]`VuOrG@F9*1,)&#!!!'!!!`!""P"j"s"#$;%({+05^:@9EK'OTX\H^]`a`]^+\][&ZYZZ[\]_c8fjlxllkifYbz\pUOHC>:Q6 2/-d+u)'%#"!Q ' )  !#%2*4/7?H,P+W_fkl[oWqr4ss8s$sOtXuPuWu(uvWvwowrHqqqrq*ppoo{n{ll#j5gc8^CWqPIA:J2,&#}!8! d S ? ! !A!_!W!!"#&p)t-27+7 20-*+8)c'%$!"Q!4ft $ "$)G.6>NFNuU^djnpq rr:r>r}stttu uvwIwrurqqq`poonmlkjPh?c_XTQJ!B;k3-'1#   ' ` !!"$'+/4:!@7FKQ&UZz]`ab`__6^_f_`m`b]dOfik?lYkkai+fb%]VoOHB=`730 -+E)'&5$V" r&5nI!#()-}57\DNJPUAZM]ac]d+c]bb`bqbcDcd/eDfhjklBk"jh,eN`ZZS_LE?:51-+*(&%8#]!V g!#e',4<^DrKSZaegkLmnopoop6q6r(rUrrst(u vwrErqqqVptoXnmllkjiea[ TLE> 6M/a(%# ot  A !b#%(y+0}6!kklmQmmmm0l|kvhfb~]WzQBJD9>d84=/,*r)c(%&%o#"2  \>h ]"$(.I5=DKRYU_te9h]jk;l lBlplmnnoCpKqrstpppGoomlXk`jj^jJjjjhRek_Z$RK0C:3V+I%!FpC!#0' +29@G6M~SY`dUghijklmnooonnmfkhe`["T[MG<@;152.+)('&%j$"! Go /!+#~%*m/7\>ELRZ#`ebh*jkjkkl'lmRn!n`noqGr0rsp=ooanml]jiiiiSjjjhfa\zU-MER=25x-H'8"*[wtXr[F,M~N!X$)C/6=DK9QX^c{gikhlMmmnp$q_r=rCr]qqEoumTiQec_Y(QJD*=8T3H/,/*$(v''&n%u$O#."2!L x"y !$L&+1x8@G"MS[`ehj9jkskklVm mmnlopqrZs1nnymmtljihhhh)hijkkih(c_bXxQ$H@80*O$!{r.o&FF.!3$^( .4R;{BQHOU\.afeiOkm@noqrsst5ss!pn_id^VO&GA":x5F0W-!)(/&&&4%%=$V#m"! +Q!R"o%'(-Q3V:BIOU\b/fhjk+kkllZlmmn o)pkqqrXm7m#ll,2Q9D?FM"SNY_e#iln^pq!rtUu^u`uttsqdni%cl[T$L4D=7 1- *0'V&4%O%_%U%5$$ #H"s! V   {!#%)6.5:$$;#$$1$/##="!!S ` ;  v "q#&*07Q?F>M+TZ-`eiFjwl lRl\kkllhlllmno6oipeggmh)h@gg$fgmghik~mDmmkohcq]dUcME=6/s*6%p" A# c"!@"_$S&[*.39'?WE+K4QW^cgkmoqst?t srNq;nj2c\T?L8D=460+/&$""X"$""#""a!!! ^ !A"$K',29}A,HlO\Vk\c-ggjkYllllll,lElelNlmnnMnno5` ac7def8fAfgch"iNjlnoomlg!aZCRJC1;4t.)*%"!}Rr~n H!j"n$%(N+L/4:D?EsKQW];bFf ilPnp]qqq~onjfj_OXOG@p9;3 ,(/$"U !8!!!!!]!- !!#V%) -4;CJdQ^X^dh|kCkmm(ll5l0lSl.kkklkllllZ\^abc(dee efh&ijlnp&qjpfojf&_)X8PjHAH9_2,($" |w032 !L"$#]$h&H(2+/49?EHKYQ{W\{`e"hPkm}oLoRoAmWkgb[eSKCmGllDl[ll4kkk|kkk5jjRVTYn\_b cdfch ikOlopr1qpmaioc,\UN_F>71S,(%:"O W}b t !P!"#$%(v+r/4P9>D:IOUY^bNfWhknkkihEc^WbP H@-82,s&a"d-3Z !!&! !"N$&+07>FNMT[afi\klQmHmGllWlwlpkjj?ihhfedKLOTX\p_b(dMfh ikmSo]qrrrol]faEZ_SL{D=B6*0+'$T"0 2%S z! !c!" "#'#$& '+=.38T=zBH>MSX\a°hBhfd`[MSLuD<5/&)$ f TQ f V !"%(H-S29@HGOV]bgiklmmm9llltk~ihg6eca`(^C&HNSX]\`cehj lmotprrrpAmi*d]^4X]QJC_<5630,(H%}"! t j N !>!"3"t""#h$ $l%W&B(+D/M3+7<4A7FbKQV [4^bcdLbQ`\*VOH_@9H2,'"`^d*qc >   !~# $v'*095=#DKYRYC_dhj{lvmmmmTllkj geWb_\ZWU:AH1O U([+_~cMehnjrlcmouprKrrpnkOgRa\VP^IBh;51P,)J%#",!!>!!"<"""##;##$$&T'*.25:o?DTIOUcY]d^|_\]j[WQJCl<25/+)w%_!^H!Ir!+"H$M&)-h3F9s@GNU\ bDf]ikAlmimm{m0lkljhlea^0Z5V#RXNK2: AIPW]Wb#ehRjulmoTpIqrrpoGlviRd`VZUOI-B<72/ +#(~&$###c###$.$A$*$0$c$%J&!&(*.148=COIkOT WY ZXVYQLgEK>c71+&# qCTgZt "$7&(,1e7>HE~LaRY_^eh}kYlFmmmmlkjh`\WRMID@)2(:CLTrZ`duhFjln>o_pq8qqpomksgd_lZUOIC>1840-f*A(P&%%%$%%H%_%0$$$$%f%&L'c)+.16<B}HMR$S_T|RPLRG@#9Z2,({$w"0\)#:_37 w!$&(+0&5W<=C/JLPW]xbgjlmOn#mmllBjidfb"\WQKE@;&6"k*3#A,6?IR Y_dhWkmoJopq q.ppDoOntljzgEd(`>\sWRLG)B4=:641@/d--,,,,,X+*)((V'&&:&\&(*.3:*@EJL1MLJF$A:_3-(%#! n[e5(#%  "#;%'*,04:@GN}TZ_e8i9lnookobnfmVkzj0gHc]X PIB:=3 ,6&!%& .8BsKzT"Z`eil-n[op6pppp\ooWn6ljbgdyao]Y?TNIoD@=;08d6G4,3>2322210.-,+*))<(*h,50[5:AEJlLMKJFMAi:4/#*='h$#"T!} @ & 1 !z"#%'>)+/2O6;AGN.TRY_udhl$opppNon>lj#gc^WQDImAj9*0)"o <'1;UDN@U\agj~mjnop>}>>f=<;::"976O444,5H6g9fFOU\afilmo4opJpTppqEponjmBkj=;}9O764210(/i./0L2469;>dAEZINRW\`diClpormt%tyu(tcsppmid^pWjNE/@NBEILQU(Yl]aehlprsuu!ut;rnkxf*`YRQ GC=4|*! y/ r"N*b2:BIQzW]aeh?klnoop]pqpppponljmgepcA`^}\q[|Z[ZZuYXX8WW VnUUSTTTV;WY[]_a6bbbaD_]>ZWU R8OCLJHFE CSA?>>c?B@4BCEGJxM5z,o" 5 \{) (1&8@fHgOV[`cgj;lncoppqqqqq$po_mkj h\fcdbaa!a@aHa`[_}^^^0]]]6\]]^`$ac+dfg?hihhTfec|a_]["XTUSKQcOVM`KSIGzFFFGIKM/O`R-U XH[^adxgi}lnVpqrrrqpm2id`YR~I?6,$a9 H H" ] Km '.6I=E7LRXm\p`cgjllnnopZpp#oo)nlkjXigfIe_dddddRcc$bbcbbbc-ce f6g^hWi7jJk(ll/kjihRg5-c$F- Byy~O x $,13;:mB+I3OTY\aSehg7!/(q"lo ^{gWsc/ 1  &-O4:c?FCeG KPZTzWIY[P]@^`bbc.cdeddd_defmgg@ff_Sa/bWc}ddoddddddeDeffefffffxfdedb`][Y+WtTPJD>:25j/)"dV ^ UC5BA*!Z] ! e Oc$(+.`1i5 9=@wACaDFHKEM.NOPQEQQQQPPO~NMcKJZHGyF@E DBB AtABDEGIL]NQvTgWY[I]^4_C_`~`aa:a}ab8bcAcdEd3cbb `Z^Q[yXUSQNJE*>94/*$T f R{ ~bS !{^sJ ;"%='m)-15D7v9:;w=??bAdBD EvFQFFF+E4D~CCFBrAR?>=;<;98776779:<>A#CFGIWLANPRT[UVWX7XXY@YZ=Z[\i]\\&ZvXVSPN KuIeFC|>83.*&G!nj h ")M`||L-H]JBSx +S$ "%}(+.t0124d57X8:;;<<;A+CEGIK4LaMNbOOPkQpRSrTzTUT-RPNLFIG'DA? ;772,-f(%-! Ga  rTI(+66d[=o q  :Jb #&()!*e+i,_-m.012 271/0.V,+w)(+&%2#"!!$ I  x!6"$<&9(*R,/Z2G57_9I;`=%>@ ABCwDbEFHUIGJ#JIHuFDB@><:Z7 3F.*&# p+3  <$*Z =J8R@$;#>O\\ `3< Y0' !"M"#$^%h&&&9%$A"!;SRwsDdf "%(d*,/J1]3F468 9`:<==>d>?'>>0=;:86522.*&t"W> CA.k/.G]8 ,2AZ'iH,aweQu|r+( Z , 8B4<a? PV ~   { \Q "Z$&)*,./x0123C3@3222r11/.-*'z#wHJ9 f@ifEu]S,>]j`<.ygR7""DC U Nt1 <X= m 2h Sm? 1 +< "#$%&Y&'<'[''''}' %$v" AWb u ~0<Jiz's-@] O?%7q_rcM|%V@o3-ID P U  O :7n+w#hB _)W5$R(h3 ~7bv?p 3B2k`2%6x7 t]T7~bf7qX(BVr[OAa3_JsO $ Rj[5 Op,G 5 /+[*&vc=?p?ZroL:/ZR!o46^>M^n%kQo*6#!tLu]A1   z & s j  +  cfdRa>S kX%im"d\mVQALaw3 8l)3q6aw"9 8_lH7.Xp j_e_EoHBQf$*o\$g~Efry_]qGXYUTptP!1#tI-l3 l.[lhwpvz`=0;ODHk,zVT7 J|K1d-$TPN<5:X+ 6kSv|~yP:S.HZ`atwh7-# KwcFM&Y[^DsB}v|qrsXB=3 0Yp4}Lk6*d$/J<H/$;k|q5~jKHj 9ThnqfcI " 3ad/{R [7 #Pisfiyd7 *X9DgG{^=q\Vi1L]cZOLfe/ */";mb7;s (YHf0+?nv^\i~}b8)Db}[cUY3dvmBbKMgy|sC\_XF57[jE /-";ROTM$Ob {mubP[vu^PN_mWy @]dM=&bPLZdfb4KT\S=0DXY9#@A)+NY^ob+#XWX xt]OK@FRy1 m2IP>1 tfZ]eh_+=YcV@9A[[+ <[B9\qgYm~a0!I_ +y r\[`NEIn%9%32(! qbedP)E\h_G:ThW+EXG)0Xjovy[:2PT.[8LL64,{cdqio(6m|e` +64$& bUH',Cbm_HISaSRhD7f}rL:Inp=WWtnHB<)rr~|wy||{x|wv:MmiO73\>A. Z>( )E_rjO7FT@0]^A)(Ck|}xfVMWpoL/-qJ[QD* zwwuxV# *Vo`A4E`* P- 5btO! 9NM( 9^jS5.Grump~mTIUqe91N`x\XF* {uz|m4 !Ffwd46xy'i>!  .L@$(8A8($A[]O>En~q_MOc{z_TZ;`Y`Q:}~iepywX7.=YheYD$'R    cB+ #  ).+"8H8""7Qd_\synmocZZdmv{ 5CWUL3 wnvqbbp}xfdjxiC*+3Sz()V7,  )  ",,5MC/&1Jdkkq}smpidejkq} &DOSB0w{|vu~k^[gu}~kJ2+@Us "j8 #&5-$1AE@::@Qhxztqx}rlgiqvnhm/CPD4{jcY[gruiVB16Eas yk`U>#  ",%*-8?B?<:3Aerw{qc_iuohhu*@MB3~odjltm[PKQS^jV9+#8."09=???>3;\ugkuwcW^lmjis +=F9*y{~trqjkljYU`vJ, " 94fA&RFqycRi= HPoDP,& < ~ <   ' -   P   N S 9 .nL8=byAVKbbs) IMaHp4V^gZ_y6,- x  n - b   0 Q b J #  ! + . ( 3 R z  8 K Y n ' u C >2>Jt>kny x+ ^K(JSO? ]-rr Y Z V *  Z %    ' : 9 2 p k g . N l    ' ! & 3 < X z X ] # }T;9'  ?[;KyvHIkIOc,aK  y . s < *   _ >    + 3 6 @ 9 * I  4 t  F ` { q < z i     ) 4 5 |6-&qn\T1G*&Y&q^  @ > g , { {   X 4    $ L w % C W ` y } T ! J ' 6 N p z a I ? F ? X  h 1 P  b3&EB?+Mg1vYz[GM`N0  @ l  f 4 M } $ u 4   8 t m V :   0 G L N ` y Q   % + - ( % ( . 9 6 L }  *   X ;  qNKhsDz ZZPgTys-l A ' ] 7  / a v 8 Z J 8 /  K {V0%$8K]`j s  G 9    + 8 I ^ m x `   !WS\5+Lt2z*Yd(lbwd k 8 + @ 0 @  N a H Y |>~t\_b47bOJmbGIMi / u T  W bZ `.z_a=<EW n  u l v h  U + $ 9 Y =] 56OxW oB{wn^E7/Ed ddT\0 J< ! 8 T n f  E h  m E o_{ w z ~ P I  ^ N n n 09xb2$>Vjmo^^,Sq9FTr}]?+*CgP.`0J~~ReB)< , C  d A ) a&5 E 5 J , i v N s 6 s 9^# [*fLa/c:eH@[ukNEIDGQamt||mox!BUAcN %  2 X ) Y f P 3 G  i  R 0 |z ~ j h u Z = < ? ]  ^ 6 2   (Zl*^p1R$Cr3 .AIK7   E2t R{O [_3  d w   N D ? H `  H    $ ! c1I2KV2{iwUWSb %d/ 2LlY8Y,ybD_T6    o 9 J _ X C A f p ? ) D q q X&e.71w_ u/1kMduT~lBvE& ChuZvC4.EK[ z.a eN.h U  n$b$$\vmF6He<)+dZV  ]*sUMTX<$#A]I|YRfQFbb_;q@ b z4 0 z d 4}BS=/"/+r7tO?:(g =hqN4x Go|Id/S1 /\5Z(5U<d r[O6ZYq^oWMnRwvL j:% :0jlKBdIr sipA! 2FHC1/:Pvdhsm]j.[@[:dzP1kZr<dvI-^'FF8KCw8]F z ( q g"  V = Y ] m  0 ^ } C  a c - u} F;z |Pq$>x$#Mx.j|S>C}zKwnV{?|HY&0Ax}kc, 0 brTv"4P.}%Imyrb9NQRz- 3 Z m n pgcz os pL+x&:{R^s>>X(t%^6\.y+  KR^{L0 5 Z ! !Z!"a"###""""^"+!!!E E3UX_Wy : D # E ) ^aYjMrQ1VF.(ozg^S E k ?=* !"%-'M))*b**+l,,,--%-B-p------,,T, +++E****/)) (L'&& %+$#"3!!S! YC?:@< ,  (;Q;D ow@N<s'K . u Ffn: "%r'X(*+.X0345 55678~9K9::3:999~9288:77.666E655555C443H211/.-,,6+++|+*})(',%#! Cgw\n9 "18i=<[PgQntho^ ,c"|%)=,/>1$247A9;?@7@AfBDCQDlE8EEEEEIE DDDOCCCSC*CBBBBBBBKAA @5?>=`@CE|=x<;;: 87l5320^.-a,P++*)z&# bvs R[JJKAa| I "c%S(,.14Y7K:q=@CrF*HzJLNPRZSTUmVVWXYZ[z[[\#\h\] ]F]]]]K]*\\M[[][#ZZZfYYDXX=';98<654430-)%"hpT .h d"q{ 1Wc/L\0 t$ 'a*}-04`7:=@CFILfO!RTFV WRXY[K\p]K]^^__`abcdde-efFfg gYgUg>ffee d"cfbbmbaaJ``/``_^]\[ZZ.Y`X}WUSQPHNMLmKcJ7HGFE:CA@>=p<:8*4J0B,(%8!j   huV- ,bP!&*--15<8<2?C)FJM4PRUTXBZ]_`aQb,cd de5ePehefvghijk[llmrmnsnnnnn\nm^lSkjimhhdggffffffqedd:cc+bba _^`\[Z:62.*&i!38R[ |F&$E" "$(l,`048<@@CG J~MQTWY\F^acfg,ggh}iiiiihi6ibijkHl%m mno!op2pppqq'q q puornml8kkjj/iiijEjj^jiihhjh(ggQfeedMc}ba`f_-]\[ZWXWV(TRQWO!LIeEA=9Q5(1,($!ptp oLVM61(.y,+!+-+]-k/3V7O;@CGK_NQUY\_;awc;e]gikm/mnnnnnnn(mmAlllmJmn\oop=pq@qrrTrs2sst2srqfp?o\nnmmXlmmnInoonnnCnmmmOllIkkhjjuiihfedcba`1^]0[YW;TPMID@:;730 ,)~&# MQ ia)<:986669;1>BgFJNuRUX/[>^adfh-i{kLmnopmpqqq8pp|oonbmm:mmLmsmn&noopppqr@sstuttrqpooonnnopvqsFssrrtqq|pp8oo nmml?k j:hgd}a^\YrVSOKIG+B<6/)g"w ~`m_{_R_M_`abpdf,hjZkmpo#quuvvMvvvgv uuuWttlssJr|qpVnml{kk&kjk^]^_L`bdgikln%odpr!stuuuuuutssrDqq pp@oo71,rrbrs9scsgsKsAsWsRstgutvwVwwxwwNv\utsrqomkj_hfdb_][Z-Y,WWWXY[^`cfZhklnmp,qsbtuuvPv?vKuutt1smrqqXpoo)n`mqlkOjhVfdb`_.]\X[[j\4]!^`bdfi_l nprSsrtuvvvvuu tss qqCp0nljgd_[U7O|IYB<70qr,rrss$sss sstQuLvvvvw vutsrqon kifdWb&_]ZXeVNTS/R(PPPRSfUWZ^;adgjiknMpcrhstutuvv=uuut_srqponwm0kjig0eRc>a5_\ZXVU)TbSTxUXZ`]_@BF`J8OSX]:affjnq|tuQvwwwJwvus>qo)lfheb^[XTpPvLIGECA@.>>o=>?BEJNRW$\5afkanqsv&wuxxxPwwwJvutss,rrwqq8p nljh'eb`_#nop@ppqqppq@qrrrrsrqomcj[gjc`e\XXSO]KH.EB@><:9]77655679`;H>BxGLRW[\b(g&l#os)tvwx5wwvupsqokgd_[WSOK&GOCA]?=I;@98z878g9\;>BFKPV'\ afk!o$qtvixxUxTwww6vvtssDsrr>qponmlki+fdnnop(pappppq-qrorrr3rqpmkHgdE`)\,WRMI,EsA?d<:8H6X43/10//m/5/0l2377:@E>K4QWK]cinr#tvwxx.wvusrCogl'gc^ZUOKF A=;8k6|4K211Q01247C; >D;IOV\TbPg8los uw8wx*wwHvvutsrrrr;qq"p|onmlikimHnnolopp)p"pQpqr-r>r!qqpo%khd`[WRMGC-?<}:'753?10/--,++6++-$.1|49>7D#J,QX>_ejorvwSx]xwvutrzolZgc^YiSMH6B=9631v/-,,y,(,-/158h=TBgHOU[avfkMorMuv%wvvuuu-trr4qqqbppNonn,mll0kxlm6mnwnooSoPopIqqqqbppozmBiQea\`W"R1LFAe<964y2"0E.[-,+**))i((i(g(:(),>.3 7%952'/- *)s(v((V) )+-/27;AHIOU[afkoLrtOuuuuYu6tsrqq:pppJonnJmmzmFmll$lm.m{mnnBn9n|oYpEpppp onkJfbh]#WQLtF@;=64p10G.j-++**G)))(( ''H'}')h+.u17B=(DLT\cinLsuwwwvuUs*q+njea\WEQJaC<7l2/,*(c'R&&&'<')0*B,V.2Q6[;AH%NT[ja;fk.o>qstu tttBs|rnq|pppQonnmZlll}ll}kl lZlllm2mmknfoup op$oo+lid\_OY>SLF@:.5&1D/-,z+@*))x)/)((y(''-&&1%%&'K),17d?8G+OW_&frlqtw`wwv\u$rpmrieCa[VjOHA:5$0,)r'%$${$$%%&m'((*\-06;;AGNU\b]gOlo rsEtHt3tnt s{rqpppBonmll,lllSlwlll ll-lMl}ljlmnooponnlh]bm\UOHiA<5t0-,+^**<)))Y)(((E''l'&&I%%w%&(*X/H4OLV<] bhkogqPrsQsssYrqpppbonmilikk}kxkklll>lkklllmnooponkpgR`Z*RKD=81-**)))))K)(((x(''7&&v%%$%%&(-2:BAIR:ZEbiohruuvttrhpn8kgdg_ZSLE>^71- (O%#"z" "a"["_"C"l"#}$=&$(,+/4:A{HPWc]chloq_rrrrrOqlppfp2onUlkjjjjk3mmelldl,klllmnopponhjae^WPHB;(5e/H+))))))I(((((i(*''l'&&y&B%&A&l(D*\.3:AIQYjadgmps_srssrqmpznmjPgc_XRJCq<50O*'$#"""["S"Q" !!"B"$%X(#+/4;MBOIQXI^cilXo_pqqr:qq*pZp7po{nPlk~j{jAj3jjnn!m?ll(kkklmknToAop7nmPhc\U0M7E?,8>2,)'(F(X(((?('''( ''''r'Y'3'*&'\')+0 4;'AIbPX__ektnTpppp@oooJnmlNjg{c]W@OHAo:B4-)Z%$/##C#;#2""D!!!"^"$&*.5);CKRZ_eimfo5ppqqgppoooMn9lkgjnj;j)jjonmllEkkklYlmon;n{nmckTfia6YRFJUB%!$##-""N""#%(&+]07&>FNnU\ bmgkn.ppoqJqZq prpWp.oo mlvkkkckkpownmlXkkrkkl0l{mm2mxki7c^aVOG?9*2-,("& $l$$%4%C%Q%%&&b&'d'(U))*+H+,m-d/159?$DKIQW'\w`xdgi%ij{jkll8mGn'nnomIke`%XQJkCz<50h+[('0'&&_%%$8##""#!#&,(-3:B8J!QX_tdjLmrophqqqqSqQq>q(poPnmgmAm m mqZpnmlkkkkkkl6ll j gNa[T*L]Dv= 6/*g%$5"# #!##$F$%2%x%&i'7'(*.+-.".01q36T:> CH9MRW@[R^UacefghjkmnZogopnlh4b[,T LFS@9:3.+")((.''&X%u$$2##{##%'+08?DG*NV]Gc3iImopr rqrrnrrrrUqKp#oooo+nnqpohnDmwll?l;lTkkkkGk*he_YQJB7:4i-g(t$H"!!!"~"#m$ $%%&N'G()p+D-x/m12458[;.?C$GL6PlTWZ\_`ac df|hjm"opqqpwoje_]VOgHB<6d0-;**))\('&%%;$$'##$&.*.5lroprZrsSsGspstsrqqKq4pppSr8q*ponNmm*m.m%lkkk"jhne ^XhPHA,93,'#"!!!"V"#G#$o$%&N'd(Q*,T/.14<6[8t:=o@DIMPTWY.[\P]^e^_aZcf`i_lnqqrEpokafd_WPWIC=8(2q.,,\+*)('&%%2$b$#$l%4(,3:BJ{R-Y`egAkoNpr:rs^slsstptsrrXrZr+qqrXquponnRnnmm*l$kk-jh1d]WeOG@C82+'#"!"?"4""#g#$?$%{&8'(*-1247:}="?BFJNRaUWYZ[p[\\d\A\]`cgXk.n!pqKr(qplgR` XQJD>94T0..*-g,+y*('K&!%@$9####'+18v@xHnP`X0_ fCknpAqrxss?sUstjtt?sSs&sDs)rrrqbpoomnnnnmlqlkLjh+dV]W OAG@82v+v&##T""""#7###$K%%'(}+ .'259=@*COFJNRUYZ[[[[j[r[[ [k\^aaJe=iDl\noypeoenjf,_$X-Q JeD>:(51//.E-b,*J('+%$#""D"#%)o/6{>FNV]ej"n*oq7qrcrrrstt4ssssssqq;pp,ooHoo"nmlokjjgc]VkNG"?82+&##_""""##d#o##$c$&J'*.2L6:>B1EIMQUXd[S\{\\[9Z}Z9ZFYZZU\c_cgj?lm=nml]hdi]VPIDK>:d520/.-,V*h(&%i$6""T!" "#$'.-4cP\V!NGF?81*%""!"!!""L"G"9"."v"#$'+/38=;AFJ^NSWIZb]^^]a\z[[\\#\]^`cg:ikqkFk3ifgd_|XRIKE@;7f3,0.^-`,=+ )x'%$#5"Y!|!3 !G!y#&j+19~AIQX`uf&kmDo]ppqaqr sZtttu uvvnvqq,pppioonnymPkk`jj$gnc]VOFH@9;2M*%""e!!!!!!!!!!!"#&5)/-16v;U@XE-INS9W[D^``~_^^^_1_g_`bcfimkIl}kk/hfbB]AVOIC>840.?,-+ )('6%$"!! X !T#&!+c08@HPW_.djlnopwpq qs t1t[t2tufuvmvqqcq-qpoonn$lkkTjjIgc]W}P#HA92*%""Y!!!n!~!w!r!o!h!@!K!C""%'+/49?]DIO SX\`gbbbaaeabObccedf_hk&lmmkjhKe`[T MFz@W;K62.n,]*)~(6&%o#"n!F 5Fil 8 # %*0T8?HAOV^Xd(iXknGnop9pq:rssst tuvCvqqqZq@ponn(mltkpk.jjhd^XQJXB;3+&R""=!:!sEt uuqqyq:q pUo-mmlxkZjjjji!faF[TDKPW\Dadg2ghPhijkllzlllm:lkhfWb]WQlJD1>J8`3/,,b)('&~%#" MDx k#&+k1<8@HOVx]c&giklrmmYmn=oYpSppqlrstxuWqyqvq&pp nm_lwkjjjO1. !#&,119cAHOV(]5bg ikkl=lylmxnoooprsttq)q)ppho}n0lkk*jiij[jigce^WZP(G?7.(V" D,%88&(Y "%*z1a7>ELRX_dgiAjkkln%opq,ppoo5mdk4gBcZ]X Q5JAC=72/9+)(' & %#"{!4 H{9% !$'-M2:JAI:P,Ve]IbqfhjkOkl lomnnoobpUqrs~tMqppgonml'k#jziwi&ij?kj(hd`\YxRZIA91*$$-!*/  #sMN b#'.5{m n^oqxrs3rrrqdo!lvgc\V&NG[@950#-*(q&&%%f$#"!h ST]!"]%R(.3;B[IPV]bfhjk;kkl3lmnjnnoq,r!rsooo]nnlkjj,i-x*(&%%<$$w#"!! M!K"%)/R5RF;MlTzZa3ehikIklkkllmmmfnsopq:r k)kllolPl kxjjgiitijklPl@iggb\$T?LD<5J-(@#[ ro JT P!J#%*07#>DKNQ9W~];c!gbk lnRoQqrsttrqnkep^VjNyF>8<1^,l'%###6#k###""W!!  t"d$B(X,3:@AIP(W`]scgVij[klWlBkk}kkl/l4lmnovppgThijkkk|kRjjSj9jkulmmkjeY_XUQIA<91+%"5tVV !#%f)L-4O:AGMjSYc_d:hbjlnpqrs7sBqpm-iFb[`RJC9;5.w)%#""!"a"###"x"!!0 | _ t #%%).5<~CK3R\Y_ehjklIllmkkSkUkMk{klln no!oaCcePgLhj[kk|kTk,kAklxmnoFmljhFc\wUMF2>6/)%"` KzB ?j; !#@$'+16=BH8NSY^c ehjmnppppo0miet^SVNF?o8 1+'X#v! !7!""!!!!T! !!$&+08>FM]T{[afiWk,knlllkkbkOkjjk9kllmm[^Xacflhjgkgkkll{mTnop{oynjf`qYRfKCr;33-&($t"1UpL |!["$&h)-2|8K=BHiMSX]`d719+($3!]x e !!x"]#9$&0(+/38/:51]-+(]&%$r#####}##$I$%&(M)+-037V:?;CIKNSUWHXdY3WUPMKD4=^60+&H#P L_[gE7 !!#?%b'4*C-~28&? ELShYh_diH^R"ZaUejflo^p]q7qJqqqcpwonRmjgd0`\cX=ShNHD @:<96a3u0.y,+*)((([(S''(#(()*+n,/2n6;A.GKP Q;ROMiHCR<6$0$*&#"!# KBrt># i!"%]( +.u2~6=CJQ7W\aHfj@m*mnnZn}mm8kkifbk]WPQ8JC=7j2F-N$.<7AL*U]FbhOkfnoqq qmqCpp*onn@lkh#eJa^ZUPKGD A =:75210.--2,,,++++++,-/.15:n?EJN9OqP\NKFA;4.)&$ # !!( ^ ? W !q#%("+9/2}7'>>?ACFJO"RUVDVTRNJ(D?;>734X1n/r-,F**8))`())'*%+- /25q8;@iEJPV\R`e*hl|o&qrwsrlrEqomjfeb [TL C:1S([kk *#R+c4>BGxOV]@bfiklmnMnnozp/qq6pp onqm9jh]ea^[oXUSPNLbJIzHHGG=GG@GhG,FFZFaFtG}HJMPTCVYCYYX VRbNkIE@=P:753240/... .".l/1)36I9y<?LBGL{R W]cbFfj mp>rsst9s}s qYofkhc^ V;:8;76/55+5I57h9 ;=@CyFJzOSX]bfjmprgsttbt,t sqo|lhd^WOF={4/*!VkA tjqo "*U3==L<<=c?,@CEXH9JN:QV*Z_cgwjmprtBtutt7rpm|jSed`|Y4Q$G>5+" . `!N)2:0AHOU[_tc eoh;jJl mUnopq-qeq(q:pp@nm~kj(hfdc=ba%`__^M]]]]^.^M^^^b^_E``ac!deg]hniiijgf^ca)^?[XVuTQeNLhJUH;FEEDKDEmG+HJLORNUhX\/_cg;jBm oq]rsssrqnlUhGd_Y+QHe>6-Q##*  '07>FKMSX]'`*cfi{kkm nJopqqqqKppomlkjdi(gff,f eee ddcde=eff+fCfg@h!hijikllmmmlkuigeca_a\YWTgR(ONELLZKL3MNPR'TWrZ\_bue\hjlo)pr*rrrHrpknWjgBb^VXQ.HC?*5-8% 6 TI`w @ &[-4;BNI_O,T.W[_Hc ehkjl7moMopoo6nmllkvjj=iFhhEhvhhhh0hhxi:jjWjgjjkl'lllm mn:no0oFnnHm]l~k5jh)f cC`q]ZXVRRORSU]VY[x^`abwdfhjlVmo|pNpp(on~mhjgvb^YTN0F=5E,%} Mtgq bC M!#{*n07o>E JOQSxW([_c eh%il+mnnrn4mtll\kkkBk jjjjkkSkBk)k,kl_m0mmn;nopop?pooppzpq`qqqqdq3pyon6lmig(dOa_2\[dYYYYZ~\T^`9bdfhijl0mCnoppion mkhd`1ZVEPKFC<3+$> [$7pO|A !&&,39b?DILQ%UZ]`beJg-iiiiji0hhhhhhiXiijj/j&jjjLjkkQkklRlmmmmmmn(noWoppq qaqponMlDj%ge[cQae`-^^^^_acAe fh0ijrkll%lm]nJnnm=kiQgudS`[NV PsKF?8w1**#N4d J22'zXO  "V'-4%:?BFK%P#TX[^*`bXceeIeeeeffgOh.iiiiiiJi(ihhhhihmhiEiiiiij-jklm.mnoppqpIonlji!gf3eCd>ccdeg#hijkHklilmLmmmlkfig1dMa_\WsQDKFJA;4 ,&w > } eD/" "(.4%8o< ?DiIINQT;UX*Z[]*^#^_>_`waKb=cIdpe%ee\ddBccKba``7_______``abdef2gi'jkpl&l kk jKi\hygffBeeefghijjWjfjjjjjihfdAzCJDaF HJ?LSNOQWRT=UUV\VVVKU=TGRQP/NM KJIIqHH7GGHeIK==F<<=8>@BbDGIJ*M6P:RUZVX0XY YoYZVZ[5[\>]^]_`aaa,_^]:[fXUROLIE@I:(4c/)*%  mi  J,RxYS "uQ4kxw : EzR!#'Q*.0^134n648:4@ABBA@?>=<;P987I6 5/4y33@22K224%57994..* %!T * |q*FqoL/CO<qjy Rb+eR!$'r)&*+-W/13?578M8(76l53q10/ -,)*)).((;'''V'(7)*-.1u469;>,?@AABBDEFmGIKMP:QlRPOMJHoF-CAq>m;962A-N($!} %   \[E? $29]t-ir5 X@94!"#%&(_*X+-[--,+1)3'c%#": qW._+ "f$2&q(+{-023:4D45C568T9;N=?"ACEFFECpA?<;D9>73/*&d" 15 = _ AJ5N >-&$[ A ]"8 B!F!"!x A>Dk@?R2@Glv;m-!#%z&(#()*+-/~1m3e5f792:;:98A6m421Q.+'#5Kg `5Jk@}1<V#dA&QdO@~eX 1l H ZRaB+x i H P ? Q(E6* !"$Z& ')+*,-./1/A.s-,h+L)h'p$? uYx K Km$vyNP#0~SfZ4&hVaVH3*@  [ o  `  ! P*&q|zZo1 l[?q&c !#1#$s##"% ;:Y  `wq\Bt -r-<{VK?);eqhp 5$@S8,5?r{MB99 #d$7W 9 : Q<k"CR   bK=p:H7m]3$5z<&x} {jMIIr6 fC0Mwgf-c#5 rTz& m 9#B7yh;9n?[pjM:.XU%A/ `!Ns2l(-Po%+Rx(A^p/] l1V{F~ <[ n^(ih[W{h|WO?I`| *I2" @f6Thdbm+GeV$EUfpQ9*1\>ORtoJ02%E8vd"(lLfvc_qDSUOPszO.:_   v2FkL_~jqtoyW@60 ,h0 bpt457D PCG NOe4?pa ^CZ)BUYYrwb* )$$es& AkIu nuEZYsivkL5" BwV]9q6.o(@LHYA1 Eq~w?rRKl2NaflbY; $%%-3Rg"!x"Dx8TB3bybWYR]q kA* H-,P|g L_@n[Tf*DV]VQPc]( 16*'0:W]9I++,G)j94K~{[NZbwwV0"Btj^J\6f{rG#iRRi|w=SYTF=A^eA 97$$5OghkN5c`!ltrTGUf}ndlqTi I]fTD-r^Wbkmi0EOVN<2AQS8+HJ7)=^lr{f<;k_Q nivvgdd2[8GRG6  zj]_fg_(;RYN:/5SX% @_M-.Ilq^qrJ<[kp# sku'B} #6:*l^`]L'CYg\?.LdR$IaV<,Cfomt}kM?UW W9QQ83(~q9xrad/45$'#eVG( -Hhq[@CQ]M [uV)'Gh{}R8Irj.ZYxrK@5  tqxurtx}}tts%FswT0.]#C?/ !dF- *F^lcJ6BN;9hiM::KjpXN\uf;/tM_P<xqoqlp[ NkgL7>[+2V1/[mL 3HJ)Egp_F;Nwr\OXrxZ22PecY@ ~kelnxK8_te9!6r%$e?  )F=$%7C;-)5Pgk]FGmxhTP_u{r\V]?g`bO7s_]hnyg;(.HZ]WE(+T   `B/ " %-*!$=NE78JdrbWl~qsxjZRXaoy:IZUK3{osyl`bow|e`^gvt[:&+6V} "$\</%'  )( <TO>6A\uumqupunf_^^iz*BIM>-wv{uqpykeoxzwc@*(BXt  b5 !   -*(7HOKCBOex{|rolnomb_i+8D:.usuY?*/Dew tb[S7     %0<EOPIBARqyvlgjnfbfx (9E;.}x|||znSC>ISdqV6%  /'  2;@MSPG>Gbvms|n``hfgiw+:C7'{xw~|ydWV[b[[gqH-)&  0-`w>.OAmz^Hd@UQ  k8Q/+ < | :  ' - "   R   M S : / wH2 0]IX"IazZm( >CY>m>"Q[bUSyD0/ | x ~ j + ^   . N [ C   " , 0 ( 2 R v   = Q ^ t 6 C A/|ELt=z dw&{, WvC"FQL9h(p X W I  ` '    " 6 : 2 p i e - M l |   '  $ 5 D c T \  z [C:%' ;Y;LzvBGqCSe'jZ ~ + m 4 ! a B &  , 7 = ? 2 (  M  * l  E ` { y A w f   y / ? C:"pm^S/@#$Z,n\ L M  `  { |  ] 4   K u & E Z d ~ U } D # 5 P u j R D E : R  ( o ; W  )~Z6&FEA,Ok5vQxWASnY/ |  < v * s ? T  e )   : w q W =   3 J R U d x  H   . 5 : 7 5 4 4 9 3 J ~  $ $  ! d ?  mLGisD{$__I|eMy&|/k A ) j H # ; d x ; E 4 + -   H {[0#=N]dqr  E 8 #      & 2 C Z l ~ d   "TLV1)Mo1&T`&k\og f : , A 3 G * Z _ ? U H\bZ4!=gMJgdQUSf  c W  T [}Q]'pz^aALYg x  v k q `   V / ) ; Q +J @6KvZ oGtofI41Keag#T~a< E9  2 \ v j ( H ] ~  i Ds [%  w K I   M I x $9 ES7#7NelkX^1Qu9EbeB* 0@\{T9m5FxQ[4$C   7 ; x a A + m4+ < / G - b { ^  9 q Wk(O] R]/_;eL>Uy|ePDEHQU]lvxqahs!B O>V>/   > k # V a J 0 H  h  S 8 y v d c r Z = 5 7 b - x B 2  "j:8YVQ,Jt1  09:C7='oBiH el;  `  u   P E < C ] " @   ( !w<I.DNC '}c)]Wjb0"/Jf|&n7P }uU@i` 1v     l 8 L ` V B A i } b 0  9 i h *m2"i1(!j%L~s wR`rX|_5wG,:^xd+D31C@W>Va{M/f R o/}9#du[ia&7V_ W'z[[elYC8H^4oe!<bZN=QYmHw,<_z3 . { f 58F3&0#GHmA49,bi+w tpjzJm2cMFXr}qO1(L{u^%!7'T&dT<h PlW f[JmQdyme=rx b1}@}bIGF9jYPHIn/;;HwjYQJRcyj7a!sG,] )L.S*\ e$dVy>e|K-c)- ~4l7ou 8`o;\e z : - l  2) | U | Q d f { ! + 2  L Z spo6"VZ &U7n a>qlB<AP~rW)a9OsH  j z 6NV\t3*d!CA;O2 n6[sV } T6WX9j:J%{\,o!5wL^w<;UpL"YYif n Q3}?( B v ] H )  ^ !J!!!!!!k! /^|k*d6UBJJ  o [ * ?SDg~JWtGjH+L@,$gq,Vk5^Ts '] 8 t}Ad,!##%(T)*++;+8+f++++, ,N,},,,,S,++"**!)(((P($''D&%%G$$##s"!!( ^J%Cw|  } ^q2N3B   jE9#wk]  x Rn #.%j'),L/1{3456:67 78'8888888a877)66A55r44l33333B2110d// .T-\,|++h+\+Z+*p)('%$>"; !V[B+N! %y",8nA?_Xp Bs(-tO# +x"$'r),/6147:K<>@ A AB2BCjCDsDDDGD#CCCC]CBBBrB5AAM@@@@@g?>>=c<;:98j7R66T65t43210/[-+)(%&%e$<#"!} DSp E<-c2yeI i r))P  4v+!J#&(+P.0Z247:=@BEOG4I2JKL^y ( w  C!#&)^, .147:<2>bADGNJ%LNdPrR>T&U{VWWXKYYZTZZ[1[\\t\\\\\\\i[ZZ4YYYYLXWWVVgUUSRZQP&OuNMcKIH5FE{D)BA@>?)><;957<5k43D2)0-*&" } i%}9v}./\6EI"%(,/"2 47; >ZAUDF.H+JsMbPuSHUNVXY[M\]^^_h``abc4cd|e:efmfffffsfFedcbbaaaP`__O__ ^^f]\`[sZZIYXVU)S8QoONLK8J"I@HsGF@DB@>=;:0741 - )Z&B#, _ _ @ S p=  + LQcQ-"K%|(,/3'6:= @&CG9JMPRT@VY\B^v_`abdeeeff]gghijklXm?mnnnnn{nDn!mlk\j,i`hhhKgff[f9fVfaf eidccnc1bb `_~]\[YX&VUwTSRQ~ONLJ"HhFDBM?;730?,(% jX ^ e!o*('"%%P%)&(*-$0'3(6:[>ADGK8NRuUWY[^`YbdyefgighiixiiaiIi\ijkl{mmnFoopzpqqqq$q0qOppnmlldlkjj,iijj2jii3hh~hbh(gffRAEIYLOS_VZ]`9ace[gBhjwktldlm3m>mNm*mllJkklXlmnoTppqrrrssDstttLsrqkpoonnqmmmnVnnnnnsn6nmm|llNkk9jj.izhgfeedca`h^][YWLTQcNFJGC >:7340-*'% !]q \@>=a<;;=e?ACFIMPxSVY]J`cfghjsklmnnooooonnmllNllilmWmnoopwqqrrs stuLuKtssrqtqpp ooppqaqr/rqqqlqpyoonmmmim.llkkAjiihfed{c a_],Z4WvTsQNIEBM?Y;P7>3. (# dUT[SfRRRT(UlWYY'[u]`beAgjMlopqrstuu$tuu$u;ttDsErpqypqoTn m1llllm@mnopwqBqrtsstuvvvv@utssdrrrrrsstuvvvvQuu9tssroqquq&q*qPq}qqKq ppDooGnmlljigf5dWb`^S[WTRDOLIEA=R8_37-(C"? b^]]R\]2]^_p`bMd(f hiknp>rMstuvwswwwwwwhw&vluttsrwqEpnmmGmIm8mmnNnopSpq^qrqPppoto"no)opqzrrrrrrcrqqq,ppq"q|qrrXrs@stYttbtssssssgrrrqtpboJmkih\f=c_[VR2LoFU?880)H"llm7mmn'n@ndno!opWq[rtRuv^w wx^xxxxAwwwwvguu3tss qpopnmElllllm mnDnoopTpqrstxu uuuItOsErq"pUoknn0n2nxo+opHpppp>poobo nnQnnJnooQoppqrstKtttu!ulu{upu tt`srrNq,onlkTifoc^ZsU,OHA:37,0%*MoopMpqq4q-qAq{qr%rsuvwswxyyyynxxqxwwFvuu,tsrqp~nmYkjjiiiijjlBmvnopfqZrXsbtWuJuvvvuusrrq%peooToBoop1pDp oo|onwmm lIkk2kk*kl lmIn6oVprBstu!uv)vvw@w2wvvuou tOs'qponal"i~eb=]XR>KD=^6.(K"ppqkqr#r9r6rPrrs$stvPwxGxyMyyyyQxxw^vutsrqpokml#j/hKfyeDd@cc[cwcdehjkmoEprsjtuvwzwwwvvukjmhfdc]bIa``ac dfhjm\or+suvvwx8xxnww vv ultslrJqpo?m=i<;;j;@9'7/644I4568; ?"C{INTpZ)_e,inqtvx_xyTy(y(yy xwvvgv uutsrrOqpoLmlkmEmno1oop ppGpqqqrqrPqp^mkgrc_ZfUyPKFB?]=:9-7.58341/.--,F,J,L-.15:A?lELRZ$`glqytUwxxxxwwu&sokfb|]JWQLaGC(?<9@64310/Q../0258<[AFLRX^diLm[qLsvwxx"x5wxww0vEuu2tssrKqqpeonnnblSlmn nennoo1opppppponjgc_(YTOaID?<86v4M20/w-,+**)(((u)F* ,/038>E8LTZ[c.inrSuwRxxyx!wLu)ro0kGfTa\.VGOIDD>:7 451-/ ,+**Y**+-/z25:l?pEKQX4^&dhmzpsu+vwwPww>wvuutyssPrqqBppcp,op)pkklKllm!mLmUmn#noNoooonkgd_cZpTOI_Cq>^96p3c1/.q-,,G+S**))'((2''}'()+s/539 ?6FNV^edkYot'vXxzxyxw trOnjea![UO8HB<730-+))(''(E(*X+.+048>D=JQWd]chvlfpr>t{ucvuv/vuutyssMrqq3pxpooouopljjjk k83'/3-++*4)))):(((F''X'&&%% %z%(*05=EN'V^Ef lqtwx9xwMvrtOqn@jeae[UNG@:=4/,,(d&G$$2#####$t%&Y'y*-16t$p$b&L(-3E:BK2S[djptw wiwvvt9r@okgc^PXQJlCChloqrsst:tsrrfqponomlllmPnlEkajiiibi\ilj jklmnnxmjf`bYRKEL>Q71M-%*7))M)f)(((w(`(;(''6&&C%%V$$$$&).39:xAIR Yb$hnqttugttHsqomj`g3bb]6VOHaAH:4b/2)&#"!!!!!l!Q!O!" #W$(+ /5"<CJR1X_SdNixloqr-rzs!s rqqq"p[o,mlkkkl7lm{lGk%jZiiqi]ixjjklmsnn7mnie6^SWXOHBQ;+4.g*(&($'('''c'v''''g'&&@%%|%2$%*% &)-29@HPYW_fknqqrRqqqponlTj&fa[TvMF?/8M2m,v(%#"""v"\!!! !Z"$8&V*u.5T<CKS1Z-_eimro#ppqqqqpp;onm#kk/kjkTknmclk jiiijLjkLl;lnmElgc[TM F?8B2,(&k&l&#&N&%%&.&s&&&&&&&&W&>&&q&(8*j.3: @HPOV]]cbh jmZmnmn;npnnnnmslKi eW_SYQJC<60N+'&G$$$e$6##"Q!!4!\!r"$'a*06>FN6U[bfk?moTopqqpp_oonmplMkkkXkkpnQlkjjiij'jOjkl?mlje`Y9QJC kjjOj1jhjRjk;kl_ki(d9^W.OG@:2,'J$"""""##z$$x$%Q%&I&'~((()))+-161<-BfHNSX\`cvefhhj-kmnnnnmje_XKQ3JNC=7 1,*E(c(']&&L%$#""" "L"${&+%087j>FN'U6\xb^h.kn'nppq,qDqgqEqIponnQn7mmem!rp^nmNlkkRk,k6jjkSklGjhsc ]YUNFK?8X0+%#!!!!!"8"#k#$%%&T'6(M)p*k+#+,S,.40b49->DJ2ONSW[\^x`[bcJdfhj2lunoop7nlh2b[SLF$@494Z/ ,*)((P'&%$##t"""I#%)(-4<CKRZ`g'jmnppqlqqqr%qpoooonn&rq.onUmlllclBkkQ70&*s%#!"!!!"&"#(#$k$%&')G*,-./^/148=.BGLQTXGZ].^^__`Maxc}ehknppPpo+mi%c\yUMGAF;'6 0-++$*m))(&%$$;#b#"s#[$P(,n3e:\BPJ QY\_fjmnppqbqqr rorYqppppKooWs-qp\o+nummmwm3lPkklFljga[T LvD=6/i)%Q#"^"s"!!"4"c"#Z$$%&(*o,y.01G27247<`AF JORUdX/Y[\9\]N^A`cg3jmopDponQj"e]VeO HMB<72/y-X,,^+*)(X'%$##A"o"#o&*1g89@NH:PW^ejmnopIq qpqqrbrr qWqNqpqCpp^rqprobnn(mmmWlNkkklIjDg5aZSFKDN= 6K.)`%;$ """y"N"7"S"L""#$ %3&(*-/i1P2357:?RCHMQ]TVzXYZ[o[\\_bf jmo,otp"nmid]7VNHBs<8$3X0..(--,*)0'&`%4$#S"r"# %)0!6>GO#W]eim8n5oeopdppq(qrWrqqqqqq^rrqcpFoWnnmmplkjjjk@ie_YdQJC;5 -q(B$#"""a"'" "!""="#%$Q%(O*-)/23569SljfaZVS2L:E@;87&30/.--:, *{)'&J%%$#["y""%S(.5c=yEMU\dhlmnnokoopRqCrr)rrs,ssstq"pEornn;mllKkwj/i598!BH>MSGX\_`bbecSdddeNfhkanSopocnsk}hab\UMkF)?:@40-=+s))(''L&=%"$#0"T!!Z!R!!",$(.5(=E?MxU>[bgklm/mpmn8no4pqqqr7sstgtpp%ooMnnml(k&ii.i=iihTe`[TMF!>k6.($e#E""!!!q! s D  !@#%+( *-049Y>CIzOETZ^b;cddf ggghhjloBp?pcnmSjf`YR&JrCY<7i1.f+J)('&%$#"!!   !a$Y(.5=EpMUz[bgwjklm mgmmnoq q2qqrs?ttpZpooGnmlkjihi iwj hfb]4VAODGM?e7/($9"!P!^!5!8 h V  K!#&2(Q+y/48>DSJQPjV7\I`djefg=hrij4jjkln op1omkhc]VO1G@:4/,[)(']&%$o#=",!2 6<%  #'.5D=ZEMU\cgjkulzllmm?moKpwppq-r0rstpDpoo*nimlkjiChhiTji&gc1^WPH@8u/)q$;"J u ]  +E. Z!#%(,2z7>DJlPV]caeg$hQhj k7lllmdmnoognkiie`QYRKD9=7/2J-*({'&r%$#g"+!% AU*  $J(}/N5>FIN^U\Oc:gjk1l'lKlllmqnop,p,pqrstp`p?oo:n_mlkjXhhghi8jich4d&_XQIA9b0)$A!L1+!"&K*17(=D-JQ~W^cZghdijHklmnynoo.oohnm7jfb\UNG@^:54/+)M'H&f%d$#^"& H` ,!S$)806>FNV\Icg`jSjkkll%p$#"! ara% "%*V17?|GiOVf\|cg0ijjkwkkllKm n]ozoop^qrr3sspppoknmlkjiKhhijjIif|b\VNF->5z.4'V#PBh~pce i#( .5=6DDK2RWX_dhj@klmnppppppp/n1kggc \VNG@?83.I+ '&%${##;"N!> 9u? "&+18z@-GOV\cfiik0kkkl>ln5o7oVoZpq)qrs|ooozonnmUlbk;ii@iWj%kkjgd_XQ9IA9}2*%! 469ez{ #'.*429AIIPW]cgIij kVklkl2lmnnnopq>qrno5nnnpn9mlkjciijk}kki3fa{[T|MWE~=f5-(E#!M=nKW ]! #'--23w:B8ITPBV]&bHfil m=n/nopqpqDpolid^WyPHN@f9V2u-(&i$G##)#2#A#/""!c D)*!i#(i-b4H;=CJRYs_?e h#j.juklNlBkklmGmn n5nopq=rkllmXmmmm:l@kjbjEjklPlYjehVc^XQRIA:A2@, &# WQtHw !#&, 18?iF\MSYk^cfjklmbnhoCpp6pWomjsg"a{[ESKDV<6 /l*&U$H"""Q""#!""c!!E `w "%+*//~6=EM8Tt[a{fiok*kGl^llokkl#lmm$mdnoop9qhijklmmmlkk!jkzlslm0kif a[aU"MFo>6/)&F" Mfw !#&Z*/6x71+&#W =Qd !0!!""@"1!!!w!+"U#'+18?yFN[U\XbgjkllmKm)lakkjkk=jjkk5kikll8TyX\a1dhk2lmmm|mimn nnnpmkid`qZU]NGl?82-*& #\ B  ? e!!#I$'u)-R1W6;AEJVNSSW[i^a3ceghuhMeqb]mXPIBW:4-).$6!)s , !u"9"""\""*"+#%*/.4;NBIQ/X^dhjkolellll kCk9k8g2.Z)&" mCF Q !!"$L&`((*-16;e?CH>LQTX[^ahdereybo_Z7TMF>720*&!E$?lhI C!G"X""""k"#,%V',1v7>EM"T)[N`fGik2klVlllkk3k-jj#hh5g^f*dd c:bDJQ6W]ch kplnEnnno%o[oooFmlnifb^YySLE>94D/*&$o"*!h !!;!!"#%')(+<.c26D: =AEJN#QUYf\`ab%_\+VQJC;4--(X$ [ """""#$'*/5/;BIQW^Nc EL"RY_&dgk llllll!kYjjige!ag^#ZJV QMJ9FH+w4=wFPY`g/jn|oqYqTq_q qpponmWl^jheOa]YXiRMHCV>:;62/-+L)(O&&&%Y%$$%4%&')/*,/1d47;#742Y0.t,+j**)}(((t())*+-.0?36:y? DbJNSU%URfOJE?W8}1+\'u$$c#H"~!n < 7 !J"$&)-~1n6;B=I.P9V\@aeikmmmmum`lkjihg&c_YTVNSHAmMl%igda]Y[U QMJtGzD-A*>B87U6*5-4433w3u344446y8'&%%5$$Y$ #$F$&'8)p,/397GQY^`eCilDnLnoUo0nnn8nRnoIoobnmtl/igd1`\rXU'QOKHEC*@?=<;;G::r:9999y99;!<@CHbMyQVWXaVsTPM GB ''v'S((*,]/ 159=BINTZ_drgknop8p{ooonFljh3fbK]W,PTH ?71.'r  B_#,-5P>HPX^IcgDjVkm msmmmn#noypp%p o6nmkhhebU^[XUS#PmMgJH]FEGDWCEBB-BAAAZA@AAsABDXGJ NRVbY[#[ZXSTQM$HC >o;8531/.----- ./c1369!<@DJOUZ`dDhTkKnp]qqZqLppJo9mkiTeb]XPH@!7".o&/1  @6$8,^5p?H"PV]|af/hzjklm7mn0nopappp}pQonljge6b_]8ZX?US%PNMKJIIgILI0I4IIHI*I~JLNtPT5WZ]^z^]Q[XV*R.MIDA><975433G22346G8:=@CG4L Q=V\`eWhloqrshrrkqpoUmjgca^XR.IA87.%=x c #+4=F'M@TOY_begijklmnop popepponljig5eb`^\ZXVTSRRQQ PPQ*Q>QRQ:QQS.TVX[Z^ `8b3bbao`][CWSOL4IgFDVA?=I;::9::<[>R@BDGoJNS W\a6e0i(lBocqZsJsssrRpomck$g|c^TXQuJmB9Y0&k1  U~'"Z*Z34;C}JQWx\A`cqf'hj*kmmo opq qLqq peornlkfihfAd~ba`?^]h\ZYYoYpYbYzY{YYYZe[]_`bdfglggf3db`{]ZNVTQOLzIG]DCvB>AADABWD-FHZJ)LjNR_UY^bHf$iQloqstptstksOrNpYnekihdR_YR6JB:1'~ JbV<2 =X!(1 8@'FMoSXc\ _gaegik*lmoCp&ppppGonmlkjZhgfweedcbaa````````abce.fgiOjjkrkkjji@g`eca`^L[YWTCQsNLJIISHI?J KMOQpSVEYS\D_cfPiEknoqrs\rrpoIlzifb]XAPIdA;91( 8 @u,  &l.G5h<C%I{OTCX&[2_behBj/kmoNpq q pXooAnmll2kpjiieiDiVi0hhOggh'hohhh`hMhhijLjklLm8n nnonamlzk~j hlfCd9a^[XV5SQPPNOPQfS0TW Y2[]`}beyh$jrlqnoq:rTrlrqpnkgdu`-\5VOG@8.0)  _N`b D<2$c*1n8>YDIN.QUZ ^eadnf[hk-mnnnmm(ll k|kjjj[j"j(jwjkjjk"kllVlNl kllCHBKO'QVSUjWX1Y;Z Z[\]_)`DaiabaaaNaD``W_T^<]H\\:[[SZZ=YZ&Z[\^W_abfcehfghkhhhhggUfee/e,eaf9g&hhi,i~iii`i(hhgfdb#^\X&SNG@;6 0+T% ~k$o jEiV( uK ! n!'L+/37?@BiDmFHJ6LMOOPtPfPNOOONMLnK#IHGFtEdDhC@B{AAB9CbDFkHyKMP3RUlWY[\]^ ^^^^^_``abbnbzbb9a`_J] ZWTRO~KGA=<;:98a7667859N;U=@WC EHKNaPRSU%UV`VVWWrXKY'Z>[{\s]E]W]t\[YKVSPMKHEA;502+I&w!Rd  af~c(kaCZnC;OauROV xlAx#&)+,-].0a2Y479;A<6<;:9B8[76654 3#2X10//--G,,-./%13%58];=@pCE6G:HpIIJyJJKhLM`NPSR*STTTSQsNKHHECA5>]:5h/*G&"Deo 9*e`F R~[P #6=!R1">I Xsuj p"g#$&&')x+-01f2d10/ -,o+")('&%%-$##N""/!"9"#|$&^(M*-Z0 25179;~<=>)>??`@;9Q62.\)-$v iL+ aTUtr 1 2Qn*\&Sz` zc#/Mj|!1"$&h'''%$%"i 1t] fQLy0 w"%K'),%-/012523k3568;e=|?j@ @V?X><:8e6>31.+'J" R6 fK(:<P 813A(d}6  = L V[ ->#yq=N`v(. G"#%(&:&'()++-/,1V24U4433p2 0.f,O)|&u"xU+ G ~AQuj%,uO1nC%N_W@rxx%4"^% "H+9 4  " P#  8K 8 c v\#jf }!#%F&'();))J)D(d'T% "J' (!i 2m:mK%sR!oV2un``%?[Ugw 0 ~ 8 M_ SCw?*"=' X NaTg.WZ%`k$u( c w pMetx"Ck%0kPO7#6z. ]]cyV]%h4 *;) x=| - g [+h >X/WgY_<)\wR8)8v93>ztZ9#ZTl~Z D`qzEF0[LYa(z D c w ; g\nXLu$b~-0`/KeaXA2\R:\(RfEXl<1Qw.%Gd!8w`Eu|),Eo'&Y[NI{udz`T?Jbv3 f=4rV(y"kL6RueK:) s|&P#a%5|v~F29Ty4":uK_qa^rHUSMMlpC%3Z\_4Zg~E  :uWRdamtTHF6&+l9W saWs&nZ)d^xI%!Sq~aBY)ATVUnrY!-$>}g@Za'u}G\ C~zkm`exfO?)QRzTw_.Vix0V)PF&-PJuRHh2O`cjbV4 (08BG^d$!l%4P{3RG7AOn|rb[MPWx[A;$#+WFpGZ%]lHkVO`y*FZ[OKL^V#2;8>HNa\8@x>:.A!lOUccV_eu]@:FAMnioFS  %Hp|V,aHIbsws>W\P=3:V_> ;=4>QeogeD'Uk (~sWPbwspwwD}'UfkYQ?%hTO\cdf0EOSI91<IN7.LSKCPdkmt~^34jfQtr|{vuq1t#DNWND1 vdWY`c`&9PXQ>--KU'Cc[B>Nj{m\okGAitp&%%~|<B(,?D8#hX\]O)@Td]=(FbQ%NniK2A`jlsyfPJb_XDRR=7( z/,yxj6:>/'!^RF(+>`mW;@P[K)je0&Ab}w|{YCOrj+`exrNE7wywnqz~~z}},6iyeF@c&GE7&\A* #C_j\D4BN<!GxxV;5Ee}zyeW\ue92WcV?zuttop{e%FfeRFPi6=  O,5ZdD7MN.*TuzbC5Is||~_Q\u{]34\ fh_Crlomnp{\% Dhxg<(E9(+_9  *A7# ,=HB87D^pn[CFniSP_t|t^[jAjhkR4wa_imsxp@+2OabU@%.`}'!  [<)$  #--($,FZTEFSfpaYo}yiZPU_p}>QbWH) uxzk^`nxh[U`ux^8-W#'Y8) (  ,.%'D_]MFL`rrmr}zsja^^k},FKL8!|y{urrzuknw}pJ-&=Vx!^/     !1.+<PZXROTbs~xzyuutpdbl+:D7& mT:9Ii| |f[N1    '/>LWXTMDNmz~qjkngdh| *;C4$ z|{t{u`RINTdq ]<) ' !0>HTXWO@C^uin}p_]eeil|1<>,|~{vubY\`bVVcyO3 # .-]|C4PAivU=\>YXq>R0. : ~ =   * .   Q  N U : 0 xB.2aMf(G^bt)  >AWEsE&&P[^SEtM8. o i q a % \  * L ] G $  # - . # * J v   G X d w ; @ >-JY|H n} w* Tr<ALLA r!,u ` _ P d *  6 : 3 v p j * K o   # - # $ 1 @ c L T  z hKD/ +   >_BR|x6S"x*JPb!zi] # } , u ? /  u W 9 , ' / 3 7 = 5 +  M  ( f  I k x A m `    m , C L8hmcV3: c3rc Q R  c     \ 6    % K u * M ` f V # z <  7 S v j P @ ? 1 I $ s E e  %zX0%IJH1Nd1uNs[JZtX3  x 9 y 0 { H ]  X    5 r k S 8   5 N P N b | O   4 ? E @ = 8 3 3 ) @ v  #   ) h S  mMLdwMZ] Dt`[,0j ;  # j K % ) D m H G 6 + -  I W/#!8Ocemq  = 0        " 4 M [ s  v   RMY53Ij+zJS!pjt i | . # 8 ' ? . a h G j ( \v ^__, ApGE]~WKSVfz  g  f  J Z|V g%*qzo[hKRcu  n d h U    ^ 7 4 G X .N F+IuV pHwocI7,?^^i'OrU0B+  7 ] y ( L e }  i ?$te- % p D E  u @ ? w -AKK. .FVY^SX*SzHYmgC)3Vt[Ba/Gv { =R:,H   > E   ` > 2 j1 | / ! = + m k  : g at/\)eV]%\:fLF`}|ePEFDJR_msskZbn%FxK0J@ :  - G c  O ^ J , @  n & W 8 w g V U h X D B F r < I 2    ~`8>.qr:+f"9Dk0  -<?@*8k|r{6jLpsO Q x m  ! [ O @ B ` $ 5   ) 6 /DL,4BC/$k0W[t",\0!&(:Pfw%p0> rgSFmo &0u     u E V a Q > A h } y [ %  7 q x 8{='a&o -WqzazuNVb!\pGrI3 =]|y`2: !y7Cc!3@` b{O7r a   f GJ!sTlcOki(ERw 4x n<}hlqq]KEVk1jc=cHy;'`mz[<8b}B < f 3z.732_Ui;()Le)|%x wrlvL}A xc>)&;R[Q7!&Htt{[&v1s,(rr\wkHiQdiYqT _mZT87~4i/{\;0'=)  .e>U$   jGuK4%` +8@k7-sbY@bzK+Y "VuWuvx%EFV  X h f G < Q V T o  " ; J V L @  n 7  By|SBim!A!JY3 egD6I |FynPp?]^^:hBUTc sjh&s'*s^ d=CI l }Yr b=X1Y4N"s8e .s!Zp  <7Jy:o:Csp2. (  #1=Q3 a-J"x  N C -5Wj RM`vptp   k N  q qAQTeStHthr=cB7^XB/fsVmo@{rFr] & E ' "$%&&&&&&' 'x'()I)*4*Q*b*;*#)))0((.''\''&&&%x$$9##0"" !z t 2-8Q$6M)4; z " h 4voQ1F" ibNqh"vZn ! 'kCy"#%'),"./01`112?23134F45N55555o544r4*33J222a2e2O2 1s00/i..&-x,++N++ ++*v)('&:$"l Mw\J  .+ 6D TUr`otd M9i jF|7ky #%;'b)|+-02478:p;mD>?u?@y@A=AdAAdA(@@@@@m???B?7?U?Z?/>==0<;; :19766[555Q432291$/-,*(T&%9#"n!P ]8 8 ftM(_-%yM | )"!- 6 ) XD$"%'*.,/#12469x<>|@kB@CE$F0GGH%HIPIJ^JKNKLhLMi=Y<;:9h76\43F1/-+*o)q(~&$!Ye [KBBDb Ebv7 < i ( t `~z #&),/368;<>V@CZF HJLMOP{QRJRSbTTUdUV|W5XXYZSZZZZZ[ZZYPXXiXZXcXGWW;VVCUUTSRnQLPkOOMLxJIPHFED'BAU@">=m;9T7 53|206.G+Y'$ X= o 3M]>b en!$-'*.d148/;?4B=DFH6JLORSUVWdXYZ[[Z[\]3]^_z`~abcddedddddAcdb\aa````.__^^^^^]\[[=ZZcYXVoTS)QPN`LKJIHG^EC@>fhDijkSkkkkkkfk jjojljklmpnoprrspssssstsrqppQpooxon~nNnonoonnnn}nnn^mm1lldlkzjihhgWfedca_][HXVSOLtHEnA=:^630C-!*h'$!\Z!D &3GF3D|CAr@|??@*ACEaGKNR+U[X\`Ccfohyijklmrnno o$onn'mmJll7kklOlmnYo3pqr rs;scsst8tttts rZqqzqCpp~ppp\pqqqqqqqqq6pqoonnhnmm1llxlkkIjiChfecaD^\XURP LIELA>;86)30,Y(5#M Yz QPNMdLxKKL1MNPSOVWYN\p__bfielLnopqr(rrrssUs&rqq&proo$n8mmmn=noUppqrstt7ttusuvYvEuuttss}s2rrnr r3rst_uutuuuuutlsxr~qq5ppplpVpapbpTp\ponmlkjhfdea^\ZJWT`PM!IG*DA>[;62-~(R#.} 8P ZYXWVVNVwVWXZ\^aQcfiClig+db`^7[GWRMIH4B=7,1h+t%6llllllllmllmmnp2rsuvvxxy`ydyCxxxxxxawwvhutt/sbrjqqBqNqtqqqqr7rrrrrrsntttu ttesrqpoonn:nnopqwrlsssss1rr|r-rqqrrrsturv0vvvvTuuuHttRssrrqqpnVltjehfd`\WnRM,GA;5i.(&"3knvnnnnnnnlnnoiopr;tulvcwIwxy|yyZyxxxsx*ww6vvuStss r+qpcpp.p_pppqqrrrrsst+tuAuuuu_tsrkq.pnn.mm{mn1nopIpq!q pphp ooKonnooppqrstuvFvvlvvvmvuu3ttRtssqppnmljgc_ ZUPJEx?G81+&5 p(p]ppqppppq(qqstvponmlk%ihh ggqgh83;qVqr8rrrqrmrs-scstuwx;xyjz.zzzzyLxx wTv?usr:poOml5ji gfe,dldedOdefhdjnlnpXqstu"uvwwwxwwYvutt)surrqq/qppoonn$lkqigfGe+dcc{cdfMhvjWl>nprPtOv vwwxxy#xxxxVwwQvKusserdpnkhfb_ZUO$I!Cg=q?qrPrrrrssnst.uvwwxxyyyyx]wJv`u;tr}pnljhfecya`)^]\\\]^`Tbd{giln"p!qs^tuvxwKwwww`vuutdsrqq%paoonCmClZkKjHhgBeMc4ay`._a^]]^6_bdg]iwknzq2sumvwWx[yyyyyUy xx(wYv)ttPs~r.p7n\l6j8ge}a]SWRMsH\pq4qrgrrrssust)tuvw wwxzxsx)w!v"tsNqomkPhecza+_Q]\Z=XW#V=UWUZU{VWYv[M]`d=gYj9moqsuvwx'xxx wvvOuutsrqfpnmplji"gfdjb`^\[%YXWW V|WY4\7_)bPdgjnMqtvw'xyyLzz[zz5yyny=xwvUuut$rqZonRlk*h]d_[W*RoppqqqqrrWrrsEstu ucuv9vv4ut'rpnlifc`]xZXVU5SQPdNNMYMrMNOQARUX\`dOh&knqtBvwx\xxxEwvuts|rpCnCkige=b`^^[YWUSR$PP7O)NNZOqPSW3Z^BaeriSm`psucwDxcyzzzlz8yyyoxwvvs+rq`omyj^ge.bmnjo3op pSpvpppq_qrorrs\ssrkq"nl&heUa]Z#UQN===>?ZABEIMRW\afujoreuvwxyyxxwJv&t0r>o6kgc_[WSPXLIFD>==Y=>.?BEIMROW9\afkMnrttwCx~yzz/zz:zDz*yyxKww@vjuLt1srxqJo`lji3gmmnoLopp0pKpfppq]qqqrnrfr+po lie`\XiT O)JGDBW@>=:;<977!6M6-567V9*:=AEF7K(PV\Sag!lkpt_vxy[yyyIx3w8u);:d865'32t1000M01Y34k76:M?CIOV5\bhmrYu@xyzyyxxvtplkgb \|VPKEF{A>8:8,5$3100//0147::=B{GMSY_dimqt vtw}x`xoxxxxxwwrvvsuttsrqpooMoklrm0mnJnnnnoo{op4psp\ponl=ieaw\,WQL/FAs=9a724310u/.-5,,++J+z+-4.C0317< B,HOV]hdUjosZvxmz z.zay_xzvMt6pdlfga[TNH.B=95n20.+,++**+,.1(446;%?F/LiRY^d-hmapstvVvvvwcwwzvvv,uuotss~srRqqJqJqujkxlllmSmjmKmImn)nnoko[o_n)lifa]WDQKE@q;7*31/.-|,++:**l*))A)5)M* *,/-15;rAI*PzW_kel[pu(wmyzztyJxCusokRe`eZdT'MF@:6 2/,+,))(=('()u+(,/31N49#>DK;QW]{bgkoFq=s>tttu\uuuuJttttsZrrlqqq]qqij>jkkakkkik^klslmcnnnl|jg ce^(XRULE?s: 41.-+**=))k)+(((s(''z'='V'2((+/4:BJRZbMintw yzWzyVx/72.+) 'h&%%)%!%%o%'(")+d.l27=C|IPYV\bgk?mpKqrrs}st:t>tstssrr:qqxqiqiqr)iiiijLjnjUj j jvk?klkmXmxmbkriJe`ZTNMGAA:5d0.#+*)))m)R)&((((](''W&&&&S&(+T06I>1F NW^flruxyoyxuw~u$rnjEd_YSLEl>8&3.X+>'%$_$#####$%+&a';),w1L693b.*&$7#K"S" !!!q!m!l!!"#&*8/T4y;%BIQW]bgjminop7q qsqqaqqqbpoynnn"nnPnkjjEj5jjj"iijjzk9l mn2n mjyg!aD[SLE>u70,})(M'u''&&''.'M'V'2'&&o%%k%$$$%'`+0U7W>IFMU1] cjmpqrr6r9qkpnlifbT]aWPICj=Z7S2,(%$`#""]"/!!! G !#-%).94;ZC4JR6Y^d/gk~m nnoprppppponmm mlmmAm kjjjjj8j&jkjkklmmali/eb_ XQJ3CC;5%.y*c'D&%%%W%8%O%&&J&&&&&f&%%f%%@%%&~(,"07p>'ELSfZh`DfilmwnqnnnnnmUkgiea[UNHTB;6>0L+(4&$$$##{""/!p q!#C&*9/6B>EM_TZ`e[ikmno"op p#p]pRpGonmvlllllnlkk#k"jj0jj;j%jnk5kllkg5b\IUMF@8m1+_'$$###y##$Y$%%Z%%& &$&%%%d%%'(,g07J=DKRQNWn\aeYhUijkjlPlmtmsmlkikjieb`YRK}Dq=l5/6) %#\#"h"V""D"#=##$F$%7%&&E&I&@&@&&(8)-28g>EKK/PEUY^adjegVh{ik(lLlmm[mfkehc]VP4ICK=;61f,)( '&&7%$#"!![ !F#Y%d)/>6=EM T[6afj!lm7noNppippq&ponnsncn mmKp^nmllkkokDk#j{j+jk?kjhdZ_CXQ#IB;3-P'T$W"5"!g!E!!P!"U"#-#$*$%&9&&''K'')/*.3j9@EKBOT-W[^Y`iac`e-g:i9k!lymnGnm4kLfaYS&LNE?93.?+A)(''&%$#"!!'! "Y#',4-;VC)JRY_f7ilmCnodp>pq&qTqqpoouolonn/q9onmmyllzlXlk;jkkl&jhd@^WPI/B:3+,&$""!Q! !!T!"E"#7#$%&'i((o()M)e*,05<B0GLJOTWKZj\M]^`AbegjlonNno^mlJgb[TMF@:N5/,?))((-'&%$#""!!P"^#j'E+3:1B!IQkY%_fFj1m mnoprpqVqr1r:qppXpdp,ooXqpo_nn-mmNm5lkkklkljjidA^WxPQHA:}2,L&#" " !W! !Y!"Q"#$&B's(e)V**+0+Z,.38>CHLOSXUXZ Z[]I_c fjltnoonmid]{VOCHaB0;61-+T**F))('%$#""!"#&*18@HPX_SfGjmnSouopqqfqrcrr q3q q%qppBqponn-mmPm'lkjkkljhd-^WPiHA:y2,=&$"J"K!!= !!>!"#$&P'(*"++,-(.115:@yFAJNQ"TV5XlYZz[H\_&bafAjlnoonmie]VOHB<7l1.,`,++/*i)N(A'%$##F"# #g&v*P1 7@H%P@XA_f:jmnoopzpqqGrrzrqhq^qqqpq qpo^nmmm=llkjijjkih ci^7VOHsA3:2 +&F#"="6!x! !!4"&#%'t(*c+,-.i0307FO?WD^'eojm|n.o o oyoop!qqqqsqr8rrrponmllkvjihgghhihfbF]zVOH[A91+8%#"$"#!w! K q%!1#k%k'e)>*,--/3]6< AHNZSVX[\}]^__`Jb)dgkQmoopnClhfc+[TCLF4@:51.M,K++v+*B)-(,'9&J%$$Z##$&)0E6>FNV]dislmnZnGnnnoTpVq/D0JQUZ\?^_a!ab bycdfilnpFoomkfaLYR!JC>U8e3/,**'))(T'o&%%$###$##&y)0G6>FNV]sdhlAlmmvmmmnoopppq.qryss~p6onmll>kjihpgghi|ih"d\_Y&RkJC;Z2,`&$"X"f!!x Y UG 7"($6&p(2*+.16:@9FYLSlX]_abddde2efhkDmopoo?lj{eG_TW{OH@Ay;51s-%*)((('|&%%6$##z"""9"#%)f/6@>XFNV]jd[hklOlllmm mnop*p*pqr1rspYoon6mJ83/+7)f''&& %C$##5"":!!\!!"0%&(/p6>[FO#W"]d{hkllldlxlltln%oWooppqrsvpzpomnnmHlvkjihJghijbjjgc]VKN7F`>=5s.9'$}"!!L! 5  4N!C"$&X(+./J3s8>,D^JQ@X]btdfghijjGjkTl_modoomlbi&e_XPI9B';q6%0-)(2&&g%$##"_!!|!( _  !v$(|/?6>\FO.W5]dhkkll8l;l4klVmnnnotpaq*r-s+pp^onmElXkrjJi*ggwghj>jk0he^WOG?6/Q(n$!!m bJ p!#$'7*X/>4: ?F]LSZv_dfhiAjrkCkll{lmn o.o-nlj fa[XTLE>>834.O+>(t':&%$#"!!- | D} !e$)/6? GkOW^dhkkll^lalFkl:m]nnnnopqrpponmUlQkVjhgg'gPhj!jki.f%_YQaIA820)G%&! }z!q "#%)@/4;XAHuOPV](bg1i-jkl%lmmnn5n`ncnn+m j'gb]VOH@:K4?/+)M'&%%$z#v"c!O qN Y!%s)07@HGPXX>^ehk}kllol}l^l lGm`nqntn;noxp$q qpponm}lykxjDigg:g]hj-k kifa<[-S1KC2:s2+%&r"t!!2176~w !A!$(h.4<BIPW^d$hjokl'mmnBn|nnvnnJnAlkPgd_SYR1JC;50`,)O'y%% $N#"! JAz "u&+29AIQYT_rehkakl}llllSlmnnonnno0op|qAqpp omlkjibggqghjdkLkigb\UME`<4-$'#P!xM  !$S(.5:7Z2,)&%$o##|""! !q'd "'{,x3:BJR{Z&`ehk'k{lplllllmnnwn nToovppppionmml(kjhhh,iYjkl?jhd%^WyPjH|@?8P0]*%l" 1N D!@!$(!.S4<~CJQX_zdi*kllmmnnnnonnhmkhc_>XQIA:3.*'r%$%#P#*""!!" d'!B#(.5-FNV]qbgiklkllllOl2lmLmm~m!mn@noozmmmmmmfllAkSjiitjmklm1kjgc]VW-OH@$714*',#! &&CZ  Q | !"{$'-29@GNQTZ`dgjkllm|mnwnznwmkhKd^XQ7IA:!3-(($"!S!t!t!"@"P""!!  $7'-3d:BSJIR Y ` di'jl llllykkkl{llkl'lm\mnn|jkkllmZm'lkjjbj?klbmbmll:if'`jZSLZD DKQW] aeUhjhklommDmnmkj fa[bTLE=6A0?*9&?"! ` !L!""!!B j 6 y"&&2*h06>dFMU\ bgjkllm8m1lkkykkkk]k7kllmImefhDjk`lmmlakkek?klmnNmm?khCc.^WfPI[A^92-(&#G! +  7 } !"v$&*.4:AGXM:S X(]`dg iZjxk|klll\igb]W PHe@92-F'$`!# . !B!!!w!`!3 M ` D"$K)-4l; BJVQYK_^ei"llmgmBmm^lkkiknk1jjOj)jzkkykk_fbdwgXiklmPlllil>lmqn8nnn l_j/eaH[1UUNBF>7C1r,2(%X#I!V   Q !"$&*-B17=BHMRW\`DcNf:gij^kkyjgd_YRKD<_5/*:%."K9g t !!R!!!!l !*!S#&+1I81?%FNwU\bzgjm m1mmmmflkkckVjjDiiijj1j:jEW[_3c[fjll,mHm)mlmqm^m|nnnnpnrm%krgd^YS"L%D=61-,(&/#}"3 !6!8!C!8!"$l&N)+/W3r8=BGLfQNUZT]aPcfDgiihe4a\VNG@k82E,G'#a Hn. |!!!"Q"R"!"@"%)/_5 < C%JRBY_dikmCmm}mmmrllkMkjjAi]hh#gggpgfPnUY_Bdhkdm;m|n;nrn|ninnonnmlifb)]WQJC<8611,)7%#!!8 ! !!%!!"A#%u'),/38D=AmEJODT X3\_8bdggg!c_(YRKDw=-5/-)%!rm<$2  """""V#K$(;,h28|?|FN1U\.bfjlimXlm3m llckjjjKihh2g1fceedcbHMSZC`Ff8ilmnoboooooo>onMmjkBGLQUZ^b9cb^YSLF>70M*%#!6f<) A!Q"#"#6#&N)$.3;9@%G:NU\ag0j llllIl,kkijj$ii$hfcca_]^[HYjWHT7o?G`PX3`fokOmp#q)r qqqqdqpoo>mlj_gc_ZTNID ?<; 62/,*)p'&%g$$$v$%&')+-?0@36:l?CI N3SW[_``=[WPJD=62.)%$"Z!| WjHoE G!3":"$c%),2"7>7DKS-Y`#di1k[m(mll(kktjjihhXfd<`]ZWOT-QFNIJ.7,@J/Se\cilp[qrrrrqr,qq! "]#%(A,N06a<+BIPW]cgOklmmhll%kkDjiihgedb\^ZUQYM$I9EiA&/U9=C.LV^ej n]par8rsrrUrqq'psonn4lkifyb_.ZV,QMLIbEeA>; 85531/2-m,++**X*n*,M-0&247<@EJPUiYp]^j]Y%TNIBB<5.*('&%$#""7!!` !;"M#C%&*- 16;AHORU\)aFf@i_lbmsnKmm>l^kkNjii3hf~c_8YTO]ID@;6'1<F;PYwaflnqDqrnrqq\pp7onnnmRkifdA`\XTkPsLHEB?v<: 75B3{110N//../1K3B469>&8 2.r++*)'&%$###8#u#$&(+A.2`6;AHNTZ`?dhk_mnGnnmjlkkOjniMhgd`[UOmHBc:HQZU`fjPmo pPp_ppDooo*nnnnmlNjAE.INSNX8[_`O`\xYSNI>CU=85C21A/.|- +*:),(/''(q(*"+/2+59b=B}HUNuTZH_cgAjmnoo*nkmll)k%jh`g5dan\VOtHB@93z-_(,""#C,G6@)IRZ3a6ej'lUnWnooooio,ooUoooNnmklGjIhea^/ZWSQDNKHECHA??#>Q==.<<=>@OACD~FIMQVAZ^ab,b ^[W4RMHC?;97k54L21 /k.3-",,-.'/2V59<@&DsI1NTZ8_=1;98%6N5433457:H=@CGEKnOU Zd_cbfj7loYpyqApponmlajUh^eIbY]X+PIA8//(!ML8 |kT%-6C?cGOVJ\a eHgj7kmmnno\op=;:::<=?QAEGJNQRoV[X`d.gjmoqrArqqp|omlSig-c._XRJB{9b/'ERV  )$,_4=/EAL)RXP]aCdfiEjlAm mnloopp5pvp5onm~kj.hxfdzba_L][[1Y6WeV@U=TTT TCULVgWY*Z\]_acegi4j|j_ihf\ca]ZWTTIQONLRJHbFjDChBVBbBCEG&INLNQUX\`dhk$mop qrrrqq DRJP{UYj]2`'c\egijjlYnohp`pppBonmlkjihggEffedcccjccdreefghijklmo#opkp4onmljCh(f3dgba_C]B[ZYfWDUXSpRRQSQqQRSU]WSY\_3acfi!kmohpsqr'r:q^poQmjhda]OXXQeJ,B :2)!( XU!u? 7 B$W+29[@)FHLBPU3X\` c]egil$noon`mmlbkk#jjWjojj|j4iijjkkllrlm[mnmnno7opqqqqqponmlpk?jhfdb`^B\GZfYhXXXYZ\^acfeig:hjlcnoHpqQqqqonl|ieb^[VPH|@81})!KwJ M~i Ym]  "(t.5;ABFqKNRW[^^adfilOmn%mmOllfkkhjjjjujxjjk7kwkkl?lmrmn)nn"n*n]n`n mmmn0noropApbpppioonn lkLi`gec\ay_^^)^L^m__`Tbceghj@kHldmUnGnoponmnkOiRfb]|YUHQ"KE9=6/(!m *jMc; s+bd$*h0(6W;AE>IuMRWH[^aId,gikkjjsjKj8jjj&jk kkll/e"3S O8e!-&A+06:>BGLQ)TX^[Q^acdxddddeerefghi*i;iFi9H4P/*$[tCw YC"rfiJ7  w~#'+D/(38=^AACEGIJKLvMHN&OP@QsRSTUoUUUU{TSQOMKJ(HGxEDC]CD;F GIKsMPSVY[I]_`bcde)edeOePeuef/f>f eeeeteLdcba'^\YWsTPKE?f9Y3.)l#cOX T --1ks5z q R /"@%\(-916I9:;=<>?@ABDE9FNG%GHhI IrIIIHHF{DB|@>=.;987@7L79:<>ADGK>N"PS U}WY[v\]]]]^E^_ _<_$_6_2_@^^~]G[YWHTiQNLI E?z93.p)$D;  L+10Phj&p  6h ":%*]-0123v4N5a689:83*-)$ k   ROcgA]xM@HFNnt > ,9s#&-')!)U)*_+h,.001233B22a2!111H0/a-,U*)(o')%$x#`#a#%&#'),m/Y258;>6@BE>FGHHHI#IJ[KTLLM MMMLKXIFCA?`=:7b2g-6(5$1 q:R ^2K.T\U -EO I  C 73n![(| s!"$&j'))) (C'&&%<$O#!G9!t$M'*-0P247 9%:;< <=+=>@,ABChCCMBAN?=;9w75}3(/+&H"t.! -Cdw 59_w#Y%%H z dN{ nJV0mPWwiR^ B"%&'!)D+&-.r/0+0124057\8~8876542v1 /^-+:($1R 1 " 8 sT&8<P @86D4 I+af{' f 7jt2y8^[4 B $ .i~( M \!"$3%$&<'r(*+,-%,,,/+*)(]'$"v<jk S U N{n.,xR/k>*TbZDuy{'^t#t    9 K > aB4MdzQg Q G5Tv X!7!!!!!!!W - 9 >W(4}k5hU"%uZ"lR;$uqfg|'d)~Quu[+xWH\h7` *Y$ D a[f?y&)p / > XAFu+?t-3lQ P5+7~%c<91ziyVPm<^EXkRF: oTdz   x   + u K"Ic4 : Jj<sWio*] G0_xMD2=y?920;O8} BB}g <]g(W0<J b<Up\; )s/r 05i8Qf`bJ7aX&?Z*!$Qshh)v5;d/R>!Sreqt#ydJstoG` +Ez1,_^POzjbV?Jc{ 6 ^B$:g1t=+0Y~@(Qo9:c8{eq0U$ -s*f&K67^>(=yRf|jg~DROGGiqJ$2Jf Z):n%f-$#@v|[PSfhzykO955$8"I&=TV4 :oI8 elV0(SxmLe*BRQNem\),&2vv'AYO!pL%)Npbd[e~eH1!2bN /^<ebq:W%XO+3UP\Os8R__b[X= !067<Eeg&&sEfYykOLUqwls~lg`ehymRFLIVe >zlAiQ#^oLu_Sb.J\]QIIa_*4A<<BLg_<F~5MIcF_Ycsepz~iYD?F^o1pBP ,KuX/hNLbu{s=V]TB7=]gC :?58H`sqqH*Oh8mdwv\JBMVkW5aosaU?%nXP[cfe/FPTI92DTT8-NVG:Mirub72`s"gy`UUKNUwK {'IT_UG0 xfWXae_'9MRJ;27QU&FhY:<TqtespJ>\26 n]hzphkbQ%,BH:"hY_aP&=P_Y>.I`O%Sj_H8HeoosweK=Vt)5qFSK/'v_exptK?rf5:?/(!`VK))?_jW=?MYK,e}a6/Hgt{sK8N}F&q`uh?3)~nlyz7DxlIBg+LG7&_C- %A[j_F2?L: DptZE@Olo]Wf|R1FUZI3{{wxxg25^zu[INd~:B#  Q. 4]kH5KN2*Pr}kPCT{iZbuNLf jdW:xoqqtw||b0#EmM0D|wy9,,b:   0H=%*<JE;6B]swgOLnvb\kyqs?e_bM0 lfnt|~n@/Bi|nS36cy*$Z<)! %/.'#.H[SDFVnyhZjvq|{j^bo 3CWRF) zzllxrZSO]znF*,8` #*X7' $ !--&)F`]LENf|{suzz~ujfiy #:BF5!}yra^kwcC:Od}X/   "0/.?RZWQPYk~~|z{zwmny !-81% {nmflp\Xe x_YS3   '1?KUWSNHSq~{uw{usv ".7-~i\diwykd_dhtd>%  ' !2<COVWQCE]segtnnwx{|*25%{{}iamyn_[bjnb`nyU@# '  1.aB 8S@guV?\>]Vp:O.3 > H   / 1 !   M   S W 5 ,rB+@l[k$zGefv. z KJ\EoD')PX]NJ{P;2 q l s c ( ]  4 P ` K *   # , / " ( G ~ { ? M X m 3 E =:T]R k}f _|ACPPCw&0  u _ ^ L  i -     - ? ? 7  z r , J k y  " (   * 7 Y | M N /rUN8( AdFPwj9X)2JR` yg[ ! | + q : (   o T < 2 . 6 = D J A 5  Z % , i  D c } s : q `    e 7 T  Y':ipjT+A c2ra  T S  b     #   c <    ' J r ) M c k X " { @  / L s { ` E 6 8 . H  + | S l  "xW2'QSL-Ka+kXnWFRqY1  x = 8 { F ]   Z   = | z d G #  7 R Z [ j  Q  & 1 8 4 1 . , 0 ) A w  ) 2  5 t Q  eFIe}SPUQp[],2k : } " l M # # = h } @ @ / $ (     TZ/! 6I[bok  ,       * F ] ~ v   SO[<;K]$y*RPsq} j w * ! 3 ! : % X ` @ [ W| gsh41_QDRjC:HQbt ! u  k  O \}Zr.#cvWj"LRex h _ a M  ] 3 / @ R (ED:W_uZvm^>) 7Q}gdCai: D+  B k  = Y y  e >(o c% "  j > @  n @ G 0FLO. -AVaj_d1TV`oc="-Ig~R9zD?zHY>/P  . $  A 8 w  \ > 8 m-lu+ .  8 % l k  > f ap- Z#_][*nI#saXk|dK;::BFO\fgd_mt > sK;WG O ! 0 F _  O a O 1 C  u  ) Z 6 ri k U Q c Q > @ J z F S <  ! }a95&if-"b*C"OH/DQLF, 4`aXfKxT T O w  2 m [ I G ^  E   - < 1FO.2?F*%|<ut 2:a4 "-?Ueuw}X(4mqlUz~53 'o     |  Q a l W : 6 ^ u p /  5 r { 9t8$Yn1Ymr[ V\m.b{NtK3 &GahLnC"#L\x$7O/[b]Ay e x U LP!oNeaPmb AC} P14C@2m0wtrmXIFYmTzB FCr8> $x<+ \L ? p 0rmEI%29$lhp;')Fdyd nQ@VL}nNM"_6"&24&;p*sE wh@%AAix_VtOh |Z{TvcV7?9c+~Zv# IAk:eM8C>N=;h2ugd]$Bfi3I%3&VyTtsw"IOba 2 s S 2  d < A > Y }  # < [ t p J  u K LK]<h8cVy1^]1GP6;U#~;cR5['IZV\Gy%  DGP] ; _8  {B$]{~ynId7Z{ z   8wPwwm!*Ztg+|\dW6z.l&'=q: }I4e?'-) * # b([(NSe Q- wEc cL'5 B  "mlg8_<oEIqhN>r`ksi7zq`$A1 j n ,%B!{##$$I$##""""# #$ $f$$$$%$$$$Q$##$$$$ ###E"""a"!!0 9`U '?/ . q>#EK.b,^U1E)D)13,[nmNfHfOp ^ ~JD| "#%'R)$+ ,-./....../I//090<0:0////w/T/$..../;/o//E...7--s,,U++D+*+2+++_*|)(&p$F" ;dn 1 ~ 8 dyAqVanevhsgl^Vw!M h TVt1!Q#%()+-0!2T4957<89.999::':^::;);n;;;;;m;\;^;j;z;j;#:;;a;<::n9887*66.66(6544L3"1/-+8(&<$"M a/ e Y`*gmNszS % Y C 7V"%Y'*s-?/13-47 9;>&?A#BC>DDDE!E6EkEEEF8FFG+GgGGGHHTHHHDGGH@HHI0I.IHHHxH+GvFEDCBBzBA@??>"=;p97]42S/-+(&%H$" n"9 ZK>DI Cb| - j C#;&),/368;6<>w@C#EH&J K>L~MtNOgPPOAUDEGtI;KNQRT2UVW X XYYY+YTYYZ?Z[y\g]R^^_ _U_o____@^]]]]^^5^@^^^@^^^^(]\\\2[[ZYWV|TSQOLJHG-EFB@#=V:865(20,,)[&d$!& q N.+SE&A$["!, %$-M "-$&),0j47:>4AEIIL N~P2QT VY0[Q\]^j_L_``````a ab6cde3fOg gh h9h*h=h)hgffAEH{LNOSU:WXZr\w^`bc dde>eeeeee&deeLefghjk/kl}lllllll+kjjRj;jFjij`j:iij>jjjjjjj|jjjjj$iRhgfe3ceaX_e]\cZXVTVROMKkHF/C@<964.1R.*&#  |i ;: 87l6m5O5(5Q679;>BAFIOLPSW_Zm\^p_abd'eg h9hij'jjxjljiiIii]ij}k_lmnopUppppqq'q6ppSoo-ononnn]nmno>oooooop-pBpCooonnfmm3ljigfecbw`^\ZXVT6QsNPKbHWE2A>;8581.C+H(q%"( lDU 2J\$FfDCBA@@@AC EGILPTSHVVY].`obdweZfYgh hijklclmm:mlllkkbk:kklmnro^pp}p`p\poonJmmnnSnozp>q qrsKssst6ttuHu6ttt8ssss%rrrsDttuv(vyvvvv`uuts)rsqqq+pp3onnnWmmlQkQjdi9h1fwdMa_\ZCWTQNK3H*E*B>;G7N3D.)%f!k~b p 1ZZYiXWWgW^WbX)YZ\^`bYdgikmRn=oipppppq#qrIrzr}r>r5qqtpooPooIogoppq?qrsEssstttu`uzuqu'tttntss,rssotHuuvw.wwww]vutssrrqqqqssrrrstUu9vvwx"xqx'ww v/uEtxssscs3s:s?sttgtt3ss\rr\qqpnmkjAhgec`]/ZZWTQIMHD?;6k1,'"8@kdvhhhhhhhh@h:hiDijVkTlnpq`r8s sttt|ssttu%uiuWuGuu tt9slrqqQq*qqWq|qqrr\rr|rWrVrsstDttttttKsrr qqUq1qqrsot\ubvvvvouuett(sssswsstMuuv"uuu5ttMsssrqponmm.kjgeb~`o]ZVS2NJEATnoopqlrrstbu:uvgvwwRwww3vVu}ttsrqqpppppp6oonwmm"l[kkkllmnopqrtuv vww+wJwMwqwvwLww!w%w?vutwsxrrpnlinfsc`]6XTOJIC=q0qCqr+rnrkrYryrrs}t7uJvewgx&xyz{!zzsyyQxxwJvutsrqpFnmlkjj iiCi}ijkln.oupqst uuvhvw4wwwwvv#ugtt[srqqppp[onnmdll%kMjBilhhhijkmcnp!q^rt uxvwRwwxxxyy yyyxx vuttsr4omkDiCfdI`]X7S3MrGqqrBrrssssSsttuvwdxxyz:zkyynxxwutsr=pomOkih?fedcjbLaabbd]egMijlnpr0stuv}w*wxx wvv\-]_QaTctf hkjn;pstv2wxxYxxx/wSvuuMtvslqp2nqlkj'hgf7dbFa(`?_^]\\n\]^`qbBdfi`kmpr)t8uw wyyz{({o{T{Lzzzy1x>wwvtrq&onmCk7heb5^YopOq.qr6rrrrrs6stbtu#uvLvvvuu(srom=jhnfcd`^\ZXWrVcUSRRRS`T>UWSY[_bYfimRprugvxRxy~yLxxwSvutsaq>nlAige;b_\YXwvPN2M3KKGJuJKLMOTPS\VY\`cgXjmqskuwfyyz{{5{*{V{N{ zz0yxwvtsrqpoOm&k3hfmnop2ppppppqqzqrrerscssrqoxlieb-^[DXTgQCN}LJI#GFE"DC9BBC>DEGBILIPFTxY^chVlKp]skvQxyzGzyyvx{wusplhd`\[WSFO KTHFbDCJBlAABCCDFbGJ,LP0SW[_cgknr-tvxySyz:zPzzzzzdyy8xTwuthserqpunm0kj0lmnoppqpwppp_pcppq.qYqr-rrrsqpnliQea\XTPLIFDBA?>K<;:::::;=?ADVHMRXl^7chmq~u5wryzhzzhz-yExvt~plgb]XSeMIDA?W=;:]9 999;J<>$?AD)GKOoSX]=af{jnqtvxHyyyz z6zzzvyyLx~wvv2ttscrqpKo+nIml9m-n4oooppoop*pippq#qqqcpnl_iea8\ W8RMIEB?=;[98i7T654433p3467:g7;75321S0/r.--- -_-/03 5O9O=CJMQX_ekOptzwyzzzyxvtjp_ke`YS1LE?96K31e/R.,,@,~-/102Z4C6:9;?CI-NoT Y^d3hmp"stuvWvvw2www#vv5uttsHrr]qq&ppMp^jwkJl0mmmnmmn+nnooopomnlXj`fb]\WQKXE@;;742 0@.-,,++1**f)**j+k,7-/36^DdJ]PV\|b6fjloUpWq+qbqrNrrrrrrreqqq_qGq>qpq@hiAijk-k{knkHkLkl4l|lmn@nKlk@hd_ZTM{F?:41(-+))3(((((z(`(Y(F(!''''N'(*!,17?GsOW_Xflrv!xy!yxbwxu%rnj^d^XNQJQC8C2-*s' %D##D"""q"l"m"##$%'+/5;yB_IYPMW=]bfUikm]mn\no0ooop+ppp=oooppppbii[ijjjjjjk'&&&&&&&&&&a%%%,%G%&R'+0v7a>;FMU]dk&orYs@tctsr>pmjfxb/\VPSIC=72-)'R%$ #""j"H" "&""W"G#7$T'j*0-5j"iij jjjejwjk%klVm n8nKmk6hcz]VOHA<:33#.E*"(x&&m%%%%%&&,&.&P&H& %%<$$x$$E%?&^)-4:VAHPXo_Xej mo"ppq po7m-k:gd_ZUTNGAq;51 ,G)&5$##0"""J"!!R !*!z#&*/6>EMT[a]fil0mmmnKnnnno0o?nn1mmmmmnkjcjj[jjjjjyjjkml$lnmmSjRg7a[TM%E>@7C0^+'&%%$$;$($4$$%'%R%n%%%%]$$$`$$g%Y&`)-*28?OELSZ`4dsh9jllmmmlki~gb^XRLPF?94/o+('&n$$~####"m!!! ",#',"29AIQ/X^dh;klmmnannnno%o8nn!mmUmmum{ml kjjjjj4j8jyjzjklLmQll0heN_@XQ.82.S*%'&-%$$$0#"!  !$(.52=(EMT[jaf[jlGmmn4nnnooMoxo&nqmmmmzmemRm:l"kkk0k/jjKj>jdj/jJjklkk&gc])VO G@|81*' $ #?"!!!!"]""#B#$E$%%$$$%%9&A'>*-28=kBBFL"Q'V1ZA]`cXeh(ik>kl^kkiOfa[TN8GAk;50+)6'>&%%I$$#)",!F  !#&,q2d:AIQX_dikmmnano oBoopFpoqnnnnYn5nnmrll kkKjjjjljRjkl]kjfbx[TM E>`6C/F(%"b! V !b!")"}"#$w%%C%G%4%J%%&'*.Q3m8a='APE5IMRUX[_^jadgikLlm mdkieE_XQJD%>72-'*''_&h%%$e#q"t! , E F"b$*/7g? G0O8V]cikmmnoo~opBpqqpmooxooUo5o onmllskkXkCk@jjpjklzkjfb/ZSL1D=m5@.:'$!!Y j  7 ! !!"#j$h%<%%& &=&&'(+/49>&AE&HLP,SUWZ^qbQei2k8m1mn%lkUgaZnSMLE@?83{-*n(,'&&b%$$ #&"L! ";$F)5.6/=ENU]\cUi7lKnnotop'p{pq;qqqJppPp[pDp;pponzmelkksk]kQjjLjklukjfaZSSKD"<4m-h&#V! z  i !?"#8$%&#&&'1''(*1-u1S62:>BDGKN&PRU4W[`Hdhk+mYmnmplhco[TMfFf@94j.+(((''d&%%$*#K"!!!*"$$(-5*U%]caim&ooppqqHqqr[rzqq2pppppqQonmimpDp|qq qWqqqrWrrq_q qpq pqvpnlkjj4iii hiAjBkfjjKf[a~Z"S0KD 84/D,***/))''&S%$$## #$E'+29AJRGZRah/ldobop,p pgpppqwqqqWq:q`q{qrpoynl*jiihhLgjgghiiiDez`YSJKDZ<4Z-z'7$!!t qvT6*T "$6%&'(*,i/3 8=CIMQ RTV[WY4Z[2\j^bRfjj}m?oaobomlgiaZ"RKD+>L8)3y.,w**h))('&&@%%$X##B#$'!+ 18~@HPX_fkn-nxnno=ooopqvqq?qUqqrgrpgoJml-jii>hhAg]ggbhbiiideajZSLpE =\5 .'$"! $C \ L"8#%&()6+`-15;&AFGN#RVrX:ZJ[x\]n]^_Pa`d!gkYmoo9olje`XPPI-BK<61-+v))g((l'&&%~$$##"#P#&*w1*7?GOW^ieilm$mmmnEnTnopqpqCqr6rsep?oHnl\jiihhvgg`ghjjJifsbQ[UMaE>K5.(w%"" \N'{X ?"#%&(2),;/ 3e7=CJQVZ]__aaaab3ceilQnMonnOki${"!Z L  !#T$1&[)I.28>E%KRZ_dghivjkPkkkl6lmsnnn2kiea ZSKDp=782^-*(k'~&p%$##"G!!V!+! h !%E)07@"HZPOX^ke(hkgkHkkkl llmnoPo_opqqrkponmyl kjqi~hgg;geh~jjkhfga%[tSLD7q0H+<&{$ !! J 2  ~d !G"^"%)j/5=CJQX`'ejkllmn7nnnann nn lkahd_iYRJqB;50H,)g'&F%$$#" ({6 "T&+3:BJ7QY_eik+k kkllSlclmno6o1opOppq=pp+oCn4ml)kFj?iBh gghijujhgicZ^WQ$IA:2->( %"I!? ; )   " p!!T"U"%)07?(F#M TL[:bgkmnmnyno+onnn)mmkiea[UjME>a7B1,)'%%$$##<"S!M Ix<,!#j(*-h4;CKSZ`lf2i/kjklldllm@nRoCosogop|ppppoo)nRmglkjihhhhj jjiChd`ZNT;LEi=6r0*'e#"R } " ; # 3 I !P!"#6&G*Q18?FMT[bgklmmn9nknnn1mmmmjhcG^WQ I@Ah:H3e.s)'=$$3##a#"!! . C"%*0=7>FNV0]bg1ikjkl4ljllmHnFoo@o7opRpRpCppp oJnmllkj?ihhigj`jkii f?b])WPIA:q4-)%#! J Y R !!!"#B&L*B18?GMU[bgkuln n nLnHnnn7mmml$i8f(`[OTLD=#6?/z*&^$Z""v";"b"Y"! z  $'-M3!:B-J+R!X_{chijPkSkkllll8lmnnnoBooooo)nnnJmm4l^kjiiei`jjkkjjPheO`Z[bTNPG?z82*-|(&6#"?! ! !+!!"#6&)06>4E0KRY)_dhjl[lmlmmmmmmlPjgIc]WPHA9^2,D'#", !+!E!!!!V &5pw "%&`*06>FPN,U\7b[f>jkLkkhklkkpkl lm\mimrnnnnynmsmmmmmsllkWjujjjkzllWkkigcs_XSKDp=6"0+(%D#p!! !! !!!A!_"U#%)8/5!l!x!W!`!/!B!K"=#%(-369?F1LR~X]9aNcfVhjkBlklVlljIhc!]VOHS@92Z,}&# v|d W l /P "%+x07>FNU]bgjlm1m[lllkkIk+kZkGk(jk kll&ll3eig-hj\klmllekkkklmm[m2mclkheS`N[UO"G@y:"4A/+k(Q%0#")!!!!!!"~#m&(-_17] [ c | ] !+$G(9.4;CJRY`ejllnmmmmillkQkk#jjfj,jPjkkjj_ addgQiklm8lllllm@mmmmm]ljgc_Z2TiMF?94/,;(v&!##:"""o"r"9"#&(,0b49f>sCHMQUY/\k_:bhdg&hGiiiebv\VQNH@93",'#5 j&Y t!!Z!`!`!,"4#`'(+2p8@GrOV]chlmnqmmmm\lkkjjjiwiii&i*i hh*X\`:dDgjlZmmmmmmmn)n;n0n]n(nljfc^YSLF?: 40+(%$A# ""U"P" "#/%:'+.V25|9>)BGRKUOySCVZC]ad-fhwhngc_YgRKD=60w*&n"h ]? [L` r!C!!";"O#%*9/c6n=DMKS2Z`fjdmnUnmmm|ml@kUjjLjiBhoggg~gBgfEeqPUZ_dvhk\mcmnnonoo$o(oo4oo*n-lifb^XRLE?:75]0f,)*'%/$]#}#<""#;$&),e/v25Q9=AEJNHR=V Z%]ad0g0gFf\a]tVPIB;4.)&V#!t|(.Y !k"2"#u$3&)6.=3:AvHOV]c1hkn3njnxmm\ll:k`jiihgfedccbWa _}HO*US[avgjmnopEppppppppYpmonl~j!ffb]X"QKE@ :510-*['&%0$##n#V$]%'* ,.1-4(8;@NDIyMQV[_}bleed_ZT*MF@9r2Z,'%|#" 1 n2 m!?"7"$f%),27>ELSZ`ejPlnn}nGm_llQk}jiiChgfodbaT_^P\ZX@GWNV>]chlnmpxq7qqqqqqqqq[ponlheaI\zVQ1KFmABGnKP)U'Y^addc>^EYrSLF=?9G2[-(&%*$e#6" "IT F!!##$Z&)-16:963Y10/'-+*a)[)Q)8)*,;-~/}147;86f420/|/.//90(1247:>BGKOTmX]`dcb ]iYSTNI2CT=7l3/.- +*(;&u%E$R##{##$%d'* -16;A#G MyTY_cgjelmnn,mllkSjWiPhgf4b_;ZXUPL GuC>9%D.8 AKMT\d@i1np`rrsos1srrrrDqqApuon0ljheWa]`Y?U/Q>M}IF Bd?<;871544Y4[4;45E68;:=AKEIFMQ*UZ^addGb^8ZUQKF4@;s7432+0.-+?)((['''|(Z)S,/37x=Q;:87c5320/w..i.a..083:6}:>CHRMSYI^bfill6moo5oLnnm l7k ihfd[a+[VOI2BW;5/*%WL'j0:~DLU\cglmoopqq`qdqKqqqpp?onn8ljgda)]ZWqTQ}NKI9FE9CC0B~BgBRBCD6EHJmMfPdSVJYW\`zdXfhgf^b_\NXTiPn{op_p'ooFnmljiig)eRa]W%PIeA92,G% 0M([1w:VBKSrZ_dgj}kmknioeopp&pwpppYp&oo^ngmNk3heb`#]eZXhUSNPNALKJIIIJWJKM>OQTWZh\^adgikj'hecf`Z]GYVhROYLJPHG3ECA?>L=3<<<,F*LvRWk\0_c&eh2iklmnzooDoop0p8p:okn>lk4ihf:dba_^\OZYXXXYY\Zu[]_bYdfh)ikJlngoofnmkjyhfd]a_U\ZXWUT RP&N+LKKKYKLFMNPSSVwY] `QcgRjmXo/qqrrrqq4onLkif;b]XQJBf: 1!'_ @  $.+r35:ARGM RWA[^b4dgikl}mnFo)opvpqppnmlkjiShg f:e6dba^`t`N`@``abduf0hikPlmnoqqhqpp.onlk i-gReycb`_ ]l[YWVTSSSDSSTUWZ\_tb&dgjm6o_pr rs rrqpnlikfb^|XbQIBa: 1P(uk ME  ~"!k(2/ 5;A*FL$QUY\j`5cIegijlmnoaooopnmm9lkjj iWhhhAgdfeeef'f\fghijlm mn|oQp!qq{qqmq0ponml/jihgf_dca`I^\[ZZtZ Z'Z Z[]_acegj l[n/opq|qqpp#nmj=g;c``[VOH@l80(| mn E>_pH 6 9#z* /5|;Q@FKcOSX!\4`beJg;ikm~nno"onnn3mmMllKkk[k,k>k]k0jjjjkFkll~mmnnno#oUop5pqfqqrqqpp3oennmqlkjriBgfe!cbaa\```axb|deg h^ik*lno/pepqXpp,nmki-eNau\Y SMF{>6/k' iCre= D%K*/5Z;(@nDI MR"VZ]`=cehAikkkPk,k"jjjTj7j1jiij9jtjjk5khkllxllm mmlllzlllm8mnqnowoooooxoRonn^mm lBk;jhgffeidddefghijklbm"mnooCoRnmlAj)hLe/a\X^SOInC;4-f&m H !auk }  $*&/5:>C>GM QUX[^adjfyg&ggggghh]hi!i\ixiijjjk!kFkkkkkkkykjjiij jkAllmnMno>oop6pppvoonmlkjihhFh_hikj5k klAlm5mpmnn:nmlMiheLba^YTSOJD>8>1#*$2  /f+TP  z%*/428`9x3~-N'2!{M: v Y#D5w $)u-26j:?CG993-(" CazL!3 S liE#(+/a37;>A_CFI%KfLNQOXPoQRT6==>Y?@BxDGILOR6UX[^<_abccc1bdaa@``[__``j```'^][YVT|QMHCm=u82-(" +S5%+[W% X!N$(,3.12j4579;q<>v?@A7ABBC8CDD,CCA@>=0;H9s7542112724T68v:=L?CFJbNQDT3VTXY[$[2[Z`YYXX/WXXXYX[WUSQ NLIF'B)<7R1-4(# = LO<1v*tAi]M r w#&(_)*,". /135L677\767@7x78G88@76543 19/s-+)(-'y&'j')d+-/2t5)8[ rM:/b^  7GjL !#W$&(*,]---%,,~,,,,,++)('P%$0"a JX !#%(+4.259<;:8%4/*%"A>& X;MXeT%Mj2+}@zZ  5][i' "###""*!!u! 5l"x-s H#&*t-03P5$78198999::;Y;<;;::87,5462T0K,(#X` ,T=#| 16 c(1^BFp twA5B\j k , Y IO(dh"%')E+",g-.-./P0901|1h14004/.-,+*m(<%}!om! *I- jR.9K A HWxk*MG y U o"o6f n B   &5Zz;`z3t zI!."#$d$%&&-%%%?%.$$#"!$JsC Wg!f4o+'oG-i90`qol~m3h|8  u  J + N1{7}[ l 6_XFd^]  =F t x ) :F+2Q|X!"qP!oOE1 | (XfG6FLx5,D(c!P:H2L? z U}.qqAL g b C 3d0ye0Fs/2fJ!U45E!K 75& 9(Cf,dA0,^+'8sY+ % V f c { P % ;}0n FSf5lD1_wJA2@zNH1Mv6WOJv.t%[x xK??PK]w'F~IcLOVWBmBg#k#IPq@\ka_H6bX1HO#>ILZWht @3Ts 5?4B-# 1WXOo3!>8 5ny6c`q_V>H`}!Ba=-=q s>?2AoC?_++xU'}sb3a?O~2b)X;.YG1EcoljCSPEChuL4D#Qe ))FT h"\+.!3O~qG23KQi t\A" %gd#`N.4kF< Z]Y91_|!jFb)DURMgr`*#B:8zq(Wyh'dQ*29[{UAE>NoyW:!%@[xzQYh7`_v@WMJ/:\V \Nt :Vcaf`[?$9EB=>Dbj28'?\Mu_]`shXN\p~lap~dF86FPf{ Kve?p[ &dwS%iZg1NabULMdc0FQG@BKhrVaHI?[Cjejyq{aA2#-Af9p<J 'Jx_3 lSNcw~tA[`WE9?_lMDH<;HawvxnJey#6}S0)9_l +Zmvg\E) kWOXada1GQUM=6EUX? 8X]L=Mhpv}OCjy$_{dL<)/;h b {!ETbZM6#zkZZbf^&7MUP@45NU, Qo`@<Nhzqg{}SC`//i[[`RNS{$ uXx|%0GL>($## p^ceR%;Pa\A0JaT. UndJ7EdszsTE\v(4v"JQF*#t^W]T^|cFs_s7AF5/- `WM+(=]jZBER_R ,ee:3NqVCTH(tetc80& o_`_wSP~oJ<\&LN?,!ZA- %B\j`G5EUG,Fsw^F@Prxg\f~}V8#IYWI2 |wxwD,)IpfQQa3A(*" Q.  6\hE"@Y]>$/Rt}hJ<P}hV]x~YRl!jeZ:~srv_5(Gu^>N|v 3*!7)i= 1I>'$2FRK>8C]rufOPxw`Xc|yz9`^dM,z}hD;Ntb<;dz$%\:$ +32,(0HYREEUm}ph|x~jZ[k)>UQC {|~eRSYneC8:]!*,S1!! !/2,/I`_PFLby{xtfaey5>B.{aTQcvy\O[i c4   #797EU_]TMQbu}xxwuln{)3(zg`W]nwihu |i`V<    %19CKX[ULCNnyqsytsx+0!gTVXfxytsxybB/  ( (7=BOXWO@Ea~lnz}kjux|~(1.hY]eqzzsmpztksZ>$" 74bz C1SGlqWD_:Xj#q8}O19 H O   ! 0 1   E   V [ 6 ,nG0Gz\epCljz/ v HLa@sA $Xb`LJu\9G7 o m z p 7 o &  * M b R 2   # % ( %   9 r v  = M Z n 4 | A <<gdNzj\ Z}I'KSN?p 1!   e b N  m 3     $ 5 8 3  } x  / L i y t  ! )   * 8 Z x R T ' BxXK1  JkKTzeCQ"x&POX|dM  8 q 9 )   s Z < - * 5 = A E : +  V #  8 p  C ` z i 1 u j    p E c  Y!1k{pT,B%}_0{l E O  g   + 1   ] >    1 T x ( G \ c y } z O  u ? " 6 P r | c H 2 0 * K   8 X g uT8-UVQ3J^-iUiOCTkT>  s ; r ) d y  R     N w W 6   3 I M O _ v G  & 2 8 4 4 1 ( & ! ? w . 6    & 9 v K t V=HiY NTNsX\'}4s ; y y  ] ;  . Q { { ; = &  + &    Xc8&"6ESWby n  *       . L f  m w  RTcBAIXu$WVmnw q l  ,  7 * f l F R \}do r> #S VJOf>7IPaw 2  ` L ]fy5#_zVd#GFXq  _ X Y D   q ? 4 D Y /9 M/DlOs[zlX6%?mik!>^d3D3  ) T  2 M n  j G%0m`} $ y D 9  e : ? k Lk"+_X<.DYjiaKJW_jw^4 9Uiq{Y3r:3uN]C<d  8 *  3 ) k _ B @ o)hv& 3 $ < " h  b  < `^D-*_Z !ei3V.v`\rfJ6.'-5BOVVVUjy$< |XI`O2S  % 9 R y F [ L 5 L  x  + ^ 3 kb l ^ ^ j P 6 7 C q ; H 7   $ |sW"C  ^_*n-B(Qp.  ->PRN38bW[q\h43yG B  6 n [ K J ]  >   ( 6 $y?P;00/SI&k"odn!1?(b5 $6KYk}} X)x~f;&g  $   W d p Z 8 / W o ~ =  3 l z 6l8.W  }{>A^"d_Q*|L}\&sI0:QpgIi9"*]l =K[ WjlO  p   x U  HF0f>KO?<_F-$/P&(@|paF87Me^@7LKV.6+[V E r ,jfDX>%6:fdM3' 58ap,HSy$R-9 uN#iA-(./$ 3w/wD~UJj@{w]i~EAgSq_{O qud;>J X8wS0ugU%@c}uuoI-qzINF5%[ q;|R Zi*Eff, A74 PSNdy\4e ^  w!Lu & n ! C Z r s o O * p E zh(e_CV;kh\s#u8A( G b+;cO1XKk_ L4] -#.Qdk l 4 26H   %  x khX,OMY^cfol_>r> `e Z ) 6 PV"I;3M%$k@J=%D:v3o4s<E\z+r n [ p :%GyCi2f@%e$@UE\A, A } VUBN{Wk>VET{uYBmR`^2%zf 2EWt !p!!o  X !"#$"$R$$w$a$)####$ $!$######O"""7!!!% :KA~] 0qA/j+$@;Y:@A:,Xd>SDE]  >4?_ !"#%'i)6*+,,`,++****+X+,-l.(........X.=.[./ /A/Q/;;;;;<;;;':~988 7;66W6544H31/-+7(%#> ICm}S p 8`ao9}cpq | U'Pt Z < t-[!$J'),Q/1e34568(:<=?&@ A ABHBZB)AArAeAdAABGC DEEFrFGGbGGGnG!G*GGHVHHHI%IwIIHHEG<;X97'41/, )&p$"y!9 tm,3)K !Sz_5#U'*.t147:<>?ABQCEGI4JKLM5MMMM]MMLM;MkN'O0PQRS}STJTTTTJSSTTUTTU.UeUV6VVVWUTTS RPP)O'MLjKIH&F^DxB$?=3:741.,+ )'%# s</x/)"  9&y/v+PT)!$G'8*>-1y5D8<;?BE"FHJLKMJNPRSDTUV~W WWWWVVVVWIWXY[[\]|^&^c^^_^^.]]b]]^0^a^^__`8``\` _c^^3]\\$[YXVoTRPNLJnHDF!C@=;86G420.,7)'%$" ! e m# N@)5&$#F"k!!!#$|&(+[.1L4r7;?QC5FJfMORPSTVWYuZ\]3^I__``]`K`__``^aabd eIfTfg1g4gZgcggHff effXffg g6gh9hihhh+gg]fff!ecdrca`4^\ZqX$VTR&OM JGD{B@=;97T420.Z,F)g%!.Wt Aa?aH{310.j-,,,.!/g1n3U58;>BErIMPqSUWY'[/]^{_`ac cde3eeeeee}ef*fghixjkcl l,l,kkklkkajjjkAkkkllmmm{mmm[lllUlkkk.jii&h$geccpaB_c][YWOTROMK`IFDdB5@1>;9I640- )%%}"UWp8u { _d 0>E<:h87777d89<>@CFIYL[OSW9Z7\^g_aKbdVeWfg%h.i8ijvjjkjjjkkkl6mmnopiqqpqfqAqpqq(q pooopLpppqqnrrrrrrMrqqqZqppo\nn@mlSji gfdc%a3^\ZXVTxR OM0K5I:GD^A>;S73/,^(%W!^f0 v_qHPF6DC"BZAABCXDFHK6MPzRUY\h_acdf'ghhi8ijklzlmGmammmmmmnoOppqrrs[ssssuswssss5rrwrrs'sGs^ssstXtuYugudutttUssxrqqpoovnmlkjihgfdQba0_][Y[VTS3QjO LYHEB1>; 7Z3/+'#  pwMRQONMTLLM*NfOQSUX&Zd\_b/egIhj7k9lSlmRmlmmnonpp@pppwpppypippqkrrscstuMuv9vBv4vvv6vdvSuu{u8uFuruuuuv2vwrwx3xRxwwwHvvu.t+s4rfqqEpp$oonnUmmUlck_jBiihUgeHc`_]m\ZWT0PM4IF#B^>J:761-) $!MV S[ZOYWWBVVW2X"Y,Z\^s`acehijkklmnop p oop]pq}qrr&r&r3r&qqqr#rjrsVstetuvIvvvvvvwwvv^v$v"v8v^vevavFvqvwxxkxxxxCx w~vutsrr qepppQp-p?phpnpHooLnn=mlkRigf[edb`]ZW'SPPLHD@p<`8I3/+'$O udccGbcaa:aa9aAabcdf'g>hj6kmnopNqTrrrtr2qrrrsnssssssss`s&s-sWst/ttufvvvvvvvvw:wXw@wvvvvvvvBv@vxvwfwx#xSxxxx*wvutss>rrkrr$rNrsvstss_rrrCqpotn*m l,kjipg dpa]ZW~SOK@G8C4>:6z2O.+)$ $Viuhh@ggggghhioijkllmo p2pqr rs\ssAsrssstbtttttttjtsssttxtu uLuv&v[vKv+vvvSvvvvvvvsv>uuu>uu uMuuvPvwwYwwHvv5uttssss rrrs*stuWuulutt[tsrqqpXooo nIljh eAb<_\Y4U$QmMIEA=]9J40?+-% -mmnm3m6mbmomkmAmUmnUnnopqzrIrs5st"tttttotwttuvuu tt ss:sss'sstxuLvvvvv~v;uuzttjssFrrrr4qomkig/ebT^[X2TPLHD@=;6@0*%No0nno)onoqo\oFouopvpqqrsvtt|tumuv uuuuuuuuvCvtvtvjv@v)uuu!ttu uMuquuvvpvvvvmvkvsvvvvvvviv!uutt ssssstWtuu uttstrr[qqq[qqrHrsLstuvCvvzv\v uusutt9ssss|rr0polkjhjfcv`V]MYVnRO JF{A;m5E/\ppqpqqaqkq\qkqr.rsstKuuv vw'wx xwwwwwow(ww!wTwhw;vvv'uu`u%uuuu/uQuuvOvvww)wAwSwhwnwkw]wXwMwKw$vv~v uuLuttttu6uquuuEtssr%q`pp@opp^q qrs;stuovv@vwvcvDvuuu|uWuJu=u'ttsrponmlFj`geb_H\YUQ KE?9:ppqDqr!r;rErwrs]st|uuvzvwdx&xyeyxyXxxxxSwwUvvvv\uut's]rrKr qqqqr/rstgu$uv~wwxwwxx)x xxxwwwxw(vvvvSvuuuuuuStsrqwp2omm3lllmnxopqrhs+stuxuvvvv*vOvovv~vsvGvRutsMr/qHpon7ligOe#b`K\Y_TkO2HBrSr\rs]ssttMtu2uvzw$wx;xy yztzzzPyyyPxx wHvv/utsrqq!po5nrmmllwm n otpqs0tauvwBwwxx#x#x#xx#x wwzw vvvrv4uuuouUutt+s?qpopn lk-jihhijlmogpqrsu2vvvw wSwx:xxxxXxjxwNv!u t(ssqp.nQlTjig6dfam\X_RLrs)stptu,uMu|uv:vwwxxhxyytzzpzyyyxxzwvutpsbrqqpniljihgfeYddegijlnpqrgsuDvvw8wwxxx3xwwFvvhvuuVtt>ssreqpnm2kj%hg?ed^cbbcdfhjlnEoqUst}uv]wwxvy6yzz+yyyyx#wv(utsrpo5mlkUifb_7Z3Trsqtgu0uv(vPvxvwwxxzxxxyJyyyxxhwvutVrpornlwjhof?doba`_^#]]^`bdgil)nq sPtvXw9xx|xxxxxw|vvv#uu t"s)qpozn:ljj0gepca`_&]\\Y\p]^`beTgjl np;r&suTvwxyz{{n{V{c{(zzBybxmww3vpuBsr]q^ppomkhea]*qrstuYuuvv/vvw@wbwFw3w|wxwwvutswqom)jhfdb`m^\IZYXWVUUWDX[]_beehl o0qt3uwxVyy7yry7xx?wwKvv u#sqomkinfc`h]\[YWVeUjT2TTQUVXZ]?_behh jm8oqtuwCxyz{G{r{{{{(zyy9xwvuxtsr)q`pnVkif}bpqrstuuu$u9uuvvuuv vrvv utgsWqomdjgeb`][=XVTRQPONfMNOQ SVUfX1[(^bfjmq0suwdxyAyzyybyxqwvusbpmk*he a]YVSjPOVMLKKLMzNPzR:TWkZ^ae hDkniqHsuw}yyz{2{{{{{{#zyy[xtw/utss r pnljgop_qrss|syswsysstt+t ttqttssHqpGmkNhdac^[X'US)PNLJIHGF{FFGwHK&M+PSW[G_dShVlForuw?x{yzXzzAz ycxwuurokhd`![WRNKHG EDBBCTDEGI9KNQUMY]a{e[hloruw x*yVyzozz{{T{"zyyvxwxvtss)r-pomlj3neoOppqxrrpr\rEr&r0rRrnr~rirvrs)sr q9oembj@`BDGK"OjSY*^(bgkosvwyzZzzyzcyy.whuNqmhd~_ZUOOJFCA?<;:!::<(=n?"@BEjp0onmHjzg?b^XSYNHD@>.;Y96j432W1r0/d..01a358e;2?hDIOV\Yb/hlqtwyNzzdzyxvMspnid^7WQVJC=8531b/F-,l,@,-/X1-2469=bAFvKPV}\a.fSjjnIpsuvvvvvwnwwwvuuAt|srqppo:n~n"mkklmymnjnMmmmammmnlno4nnmkkhd^YSMHBG=:7420r/--,,\+d**+,.U/254r8=mn.mmikiea$[ UoO(HBD<73}1.,+*3))v)2((m(8(Q()C**,.-1f4:@HaOW^Hdkotw5yyzxxuMr.m2hBb[UNF?:82/6+)u'E&H%Q%W%c&&'(*>+-037@371.*) '_&&%%%&&#&J&p&&&R&&&&&(*/4;C2K!RZ\ahnqvtu?vuWtrptlGhNc)^WQeJwCa=7G2.A*'%$x$&###m#s#i#$%& (F*.3B9]?tF4MS|Y^dgjlm5mnn[nnnno*oooMnn`nVnnwnnhhhizj.jjjjVj5jqjklmCmVkjgc]jW+OHA393.*(''%%%$%(%$%9%3%=%h%%%%A% $%O%g&({,~07>EM0T\Zbhloqrar/rKpokhd`XZU$NHA<)7d2d.c*c'%$###P#9####$ %'*s.:39@GNUC[ `e8ijlmmmnn1n mnBnnnnmmmmn(niAhhiJjjtjjjmj?jujkmm|mqkjZfaZT L~D=a5/*(%%$ ###$ $+$&$$$S$v$w$@#####$&&)-`3T9\@GO-V]Tcgkm%noonmk\iVf b]XRoL7F@l;N513,)c&%G$##I#2"""]"\"X#/#&G)A.4;*BTIPW|^2c2gjl+lm"mmmmmim@mtmmmmSlmmommn=j iviJijSjjjjjjk?l4mTmmkieI_XQIB :3&-(&5$.#""""#2#b#k#q#####T#%# #T#h$q%(x+16=ICJ}Q[W]b2fThjk}lllkNjThe|aE\W*Q*JD?o94p/6+n'&9$$_####]""q"!"w"p$#&Q+07> EM>TE[a#fbiDklm9mmdmmnmHmhmmmmQlm mmmnFjjij jjjjjjjk=l$m'mCm>k#hc^VYOGe?j70h+ &I$D""G!!!""Y"""#-#h#|#I"""##)$ $':* .39?EKQeWc\R`cfh6j jkkkj0heb\VOIC=823-)v'A%|% $$O##}""!!!"#',G29AnIPsX^Dd(gk l*llm,mem`mOmymn n mm+m]mnn;nkk"jjjjjjjjjk.kllljhb\aTM(Ed=P5.F)$"!P!! !`!!"."##o###V###s#$v%'P).3Y8=BGLR\WK[_Xbdgiakkll ki0fae[zT4M|F@:4/*(&+%%$$ #""!j!F !|"& )076>'EM>T[af4j@kmlmZmmmnnennnWmnnnno8m%lDkkhkdkjk,kbkjkfl"llljugEaZRK C9;3+&"!t u  !T!"+"#d#######$%N'{*#.y37<>@UDI:NRVZH]`dUgOj$kmwmml6jUew_XPIB<6H0+(&z&1%Z$$(#{"!!, 7 !#'\-\3;+BJR`YX`>eikm9mmmn&nWnoooo nno+oPoonemalkkkjk(kqkjkhl-mllj7f_Y QI|A9a1*+%H! IX W !1!"#[$$T$N$"$2$$%N&'(+/4q9 <@hDMHWLuPGSW ZL]aeijkmn$nmKkg&aYRHJC=:61i+(&&Z%%$Z#"" !i! t #$&+19}AHPX%_edilgmmnJnnoobopIp]oo2o,ooopAonhmUlHkjjjk$jjk0l mllie^WOG?70(y# yL5  {!2"6#?$$w$$$%% %&),05e9=)@CG2JNyQTW[t` dhkmnBo$mlhZbZSdKDE=71,-(&&%%y$$#9"!! ! "%F*0d8?{GOWD^djmQonoXozoop!p^pppQoopoop0pupYnml9k%jiijPiijk{llliweQ^(W!O GT?q7/(# ig( !# #$i$$%&%%'(_+R.27<?[AE1HL[ORUW[H_dikmmnmwlEgb[ZyRKAC=S61,G)L'8&&t&%i$##<""=!!!v#%1*5/7 >xFNV^sdjmoooop$pRpfppq proooopDppoqml$jitiiiwi"iijlll0i$d]VNG4?R6/~(# ` :!l"#$C$%%&W&()- 05h:t>ADG JyNQ?SVXI[_di.kmnnm}l>gb?ZMRJC=61,)'''+&&%%$c##<""J"5!#$)X.5=5E]MU]tcj=moooop*pmpyppq pooop ptppoqmkjQhhkh[hhUhThikPkkhe^LWOH?@c80)E$!l E  &6ht !;"#$Y$%o&'')+/39*>C F%H\KmNR TWXZs])`eCiflmnnlkifaY3QxIBEnLOQViY2\X^K`9`a ``acfiklllig@a[T$LrD>8M2S.M*)n('&&%%$t###@""c!"#"%*29?AcI^Q X_-f&jlMkkkkllm;nRoEoso`opepqrpDnmAkLih;ggKg>ffgh2ijtjhfa\.TME=60.)%" { "V#$%&'*b,05*;l^mn"nsoopGpqp nmljuih:gxfeeeghijiieaoZTHLD<5\/)%"! j .h0)  !|"#"%I(,-17=D_KwRZz`f%iklmn:nRmmFll|lYlkjge`[TNF?w9k30,*)('%$#"! D 8 0 ; !&+B3:`B^JPQYS_pfiZkjjijjxjk l!mUmnRnop pq@G{NU]chkIm~nooLocnnmUlllpk)iNebh]UWPIB-;5z0o-U*"(f&&% $+#! xgSv!+"'a,4;CKS ZT`fGiOjiiij)jjk3lCmcmnWnoop$ppon lkjFi5h[gffEfXgPh}ilj i|iOfc^1XQJ$Bl;4.a)%#!! m X f ! !!"#S%)r/r5[71~,(3%w"! !!!"#r&4)/6R=DKS:ZQaglWn.oop9pponmm7lkifa\VIOH@92.)'}%e$$##:"! ) #&, 19R@HPWo^bgijijj[jmjjklmnnbnoZoioToxoonGmlk6ii hqgg#g.ghiiiihea]6WPIA;4/*'a$ "l!&! !O!"#A&)/6>ELTZbTglnhpop9ppoon!mlkheh_ZRKfClYlilmRmnOnqnnnmvkhe_ZQSM,F@:4/+5(&%.$C##""d#2$ &)e-28&=CIHNTYT]`Nbdghjkbkjj gcn]fW;OHA:4L-($!~+p o !$!#&*/6=DL'SSZ`hf imAnso*nngmmllkkkk%jjrjmj`jihh3[_fbfiklmllmm/mwmnwnoAoooo=n8kjhc_XRLqFX@p:4/b+('%$##"s# #%(u,05:?D?IO:TX`[t^[`cehwijihzd`Z;SLF?_8y2a,a($!+_@A  y!L!"#&)/*4<(CJTQXP_ dSil{o4ooo nnOmlkkUkEkAjiii]i$hh@g%eT X]bfj(klmm}mmnIno=op[ppq0pomk3gb]~WQL>F@`:50-*(V&%+$M#w#$%'+z/337`;@)EKJOT;WZ]`cmfihi_hJgc^XQK2D>7]1,8(%T#!! 8 !l"#%=&*.o4W:lAHOwVb\bgLkn4p?pOp4oMnn>mflqkjjjpihNgjfedcbH`TLRX_ dhk,m$mnuno5oopkq/qrrrrreqp(njMfa\W QL9Fa@:51.+)z'7%$$$& 'r*N-148&DEJQX^UcQhIknpq&pponnlkk"jhih\f=c\`^J[Y0VS\O:BKESZafjlo ppqeqr{sat?uu2u.tt^s@qolXhe`\WRMHxC>;'7O4d1y/--J,-.H/147:=AEJeNRVY]` c[e>fed`\[UP.J}D?9*40{.s,+*7(=&*$###o#$t%&)/+/38=CIOVn\kb fcjm!opXq&ppxonmlkkjCifg+d=`N\Y1UQN^JUE1^9BKS[afj m4npLpqrjsZt2uuCu7ttysrpn[kkheGa]lY TTOK2FC?;87544(45F6t79<?AEHLPTX ["^ba0dQf gfyd`\WfR{MlH@CF> :643e2 /-+i)(((9()Q*,i/:2x6;%@DJDOU?[+`pe[hlAn'op]pppAoUnmlak4jiXgd`[W2RzMI$D@ :'0:FCLU?\bfk mkopqrRsKttu2u)tttshqp^n4l`ig'cj_v[VRNJFCC?=;;@:;R;@3BDGKNR&UY%\w_begchgXea^YGTP/KG6B?c<:9j753.0/I.--N-.X0&15l9V>)BGKPUZ`3dhk5mo;pbpppp onYmLljjh[f6b]OWTQKF @;960g'1O:CL~T [c`eil!moiprqrst t4ssssVrcqIonmkDhBd`\Y9URpNJGiECBBB}BCXCDFGJLORUX\ _[beuhXiji4gd9`\XTPLI F"CB@\>X<;A::;?;>NAEIM3PToXM\Z`dThjm`npqrqqqpojn9lqjhgf}b^XeRJlB;3-w'4!L (1H9AJ-QW\adhj?lnOppqqrcrrr/qq}qrqpo5mJjhgda_V\YVTQPPpPPQEQRTSGTVX[]`b_dfhj[lNmDmmkiufdaw^\)YyVTQPRNLJnGExCBwBOABCFTI2LPRSVY]T`dJgnjzlnpUqrrrr9qspoGmk0heb^XQJlBC91*M$#~ @ (/7@#GNT5Y^Hbehkm`nppqqrqqqqrr8qTomkigfe b`^\ZXXX.XXtXYRZ,[] ^`c(eVg`i`klmo2opionmk"hfdbw`]{[3YTWUSQhNLzJIIIJLNQ6TMWAZ#\_bOegjmnpqsUsssJrrq%oQmIj5gdcX_FYSRJB:0(d } ' &`-5,hDJOTYs]`cfiRkvlmnowp@qqrDr"qp^onmlLjihhgg fgfeeffpfg,ghijkmnwopqrrs[srqponTmkjiPhfeca_][ZZXYYZ[4]^`bdfhik7lnoqrds,ssps2r0qLo`m;ifb^xXqQJBy:1L(G 0KV  m E&,3 8>}DjINRVZ^adfhjkmnnoptppKonn=mlkjjQj/j:j]j/iiij%jSjNjRjxjk5kloCH\LPUY]`cegj6l_mnnonnnGmmEll5kkklOlllmmSmymmqmmmamLm:m0m6m(mPmn&noupppppppppppponmljrhg4fe dd5de fEgijjkYllmno@oppq_ppeomki/eTar\XSMM\E>a6r.'wwb l}z,[Z  U p#6(-282=AEJOQSWTZS\`cfgiYijYjwjjjjiiiiRiHiSij$jkkmkkl!llkkykjj(i~ihhiQj'jklm"mnPnoppkpptpjoomlnkihggfofgh)iSjnk6klNlmtmnNnoonmQljh"daR\X9SDNHB^:3,%J  Zt^C 2 E9"',26;U?DI~MQzTW[^accde|efMfffffg!g[gwghhi i~ijjAj!jiihrggfeTdddefghijklnooppqbq:ponmlkjFivhiijek5klBlqllmm8mmmlki=gdb]YSNID>B7z0T)#R QL'\([G V^3"',I059V=BbFoIMP;SVY[}\w\]^E^_"_r_`a,aab>bccmccccObb?a`__]]\k\l\~]6^_%`a?bd%egdhjdkln3nnn]mlkjinhh)hvhiRijj^jrjjmj*iiihg da_\`XjS:NHC>9$2,&v Dpp z Q2G#lb 3d!Y&;*.26:>BEHKNPRhS TTUVEVWXY[[\\]Z]y]]][[YXWVnU$SRQQRRSTUWXX[]F_adfRhVjhklllkjihh*gggh h)hNhvhzhh2gg fuec``]ZWjSNH>C,>&9 3z-'!11 S*SoC0,WPZ )!p $(%+o/I3N7_:=q?BD(EFHHIJKLMO>PRTSTTmTXTTSJIHFDB@><:9-77789@:{;=A?GB"DH>KsNRVQZ\^_`5___m^]] \\)\\P\\\\@[YWxUMRPjM]J E@i:50,( "8ld% 8 Q{l}4i)kRC\ 3}< $(*,a-#.0/y124E5}6789:;=)>E?E???t>=[;:8=6(42 /.',,o,1,-J.g/_1,3668}9h4.*&",6b ENk-}2v5P|82P2 k @V _["##$0%O&(*],-R./a0:012\3&3434 321r/.(,,*,(%#"y"!"""#$&[(h+[.C15#8=A"E>GJ!JKQKG>???!>>z>+>Q>?g?@&??+=;976 420+&"d$ V0Lx UeR1R}B&uc:d9x L ~ Sb!9$@sZ@v:T4G#6; $#i&*c-012M223r34"4_4515_5)54k32,0/X-,&*X'o#  Mp)YB*x3 Ez8/gg v70W4:1 > m |D|H$C45,+P  s E S N 8Ym\(<M"\$t&&'m'()**+B+**4))@('&%$"{Xg3WF i (( $M+lK&7LI"aVtF-g0 J'(g5y ~ ,  V q { L ($?^E % 7 6 @5@ D  3'f$k:v*&kE(j87`{c~wR :Xq lbnJnD 3{r HR)2=7 : ~F=t;ky|    C }9PV$)uT"tURC5u@}A896OvV06Mt/     _ z27Ap-Do)0jJ%[AM[*&E!!jmwq^72[pN   wF,`pb:  KOgTsEXd$u2J%b?)YqEA/=~ \(M%$`::d( DBr  g?BZ|#Jnun]GZO>/[wO@gU#MSvA[g^Z?,\T6I?.19?PUm249Wv/fG7ILH'a@0#BVyH/C@1?@y;kfq^Q8Ec~"(F]4',2oQ,UO ,f;Ip)'a$wR]!d4]7Cg'};h5Y5GD2IgsrnFTPILr~Y?H!H_ $\s*|=ZT9:Kv~_6%*IYv |i? q!<bS9/Y=4gEkO/'XwhJd,DTTSmxm<*B60ot7&[{9zl810PyqJ7>?VxkV5 #RgFnOWUvAb99'2RQ]Sw 8RbehadO 1@A96:[|9.u2=[ZjNNUoaQK]t}qabpqF+-GQatAk>}j "^xT%}h^m3L^e^SPjl;BQJ@<B`yNS]QMmZa[bwq|jVE*)?k ;~DIDq]3 iONeuwoE[`^QDEcpR!DMD@EXmnwdFh8O 4iNA9BFas !Ldo`V@% fPKW[ZY5JRXRB:J[_G4XcQ;F`jvsHAq3$rkOBE;=?d! f :N_XJ1ucX\_]Y)8LTOB;@Y]3Mq`<6Ie||usMCf8< |VCL_XRPr&u L.HN>%"$$ reeaR%>Sd_H9RgZ3Vl_D3Cg|rYOg9 DzBG=! cKNb_gl ?{dw ->F530 gWI- -Feo_HJVeY#-bz_71OwfSbb1*4u^lZ-"w`\kqe P{WGbCK<0$]>' +G_ohO;JYG*DnrZEAVxodljH*GRTC*lemP7/InjWXg*;( +% O)  6`pO&&?UW;$.NnxfKCW}gXcZMaig[9 zmep^6+Kt];Ly,&5)d9  4MC,'2BMI=6>VmqfTWx{gcp{u3ZX`K)}u}lE<S|kA<f| X5  ,54-'-EWN?>Nhztm}{lm|0JK>t]Y\smNDBa "%R0   &22))D\YI>CZu}}uoq.9<(hYUdu`S^h e6   &542?PYWLFJ]w|{}rp{%,!o_[TZj}{lgq }kaW>"   #/8@GTYRI?Lq}{}y{')`QX\hx|zz|zbC0  *"):=?MWXO@Efqwwy %,(zb[gpz~vqwzpw |W<$ 65j }B4QElmO=aDZs/ h5xF,B M Q   % 7 4    C  a h 7 0mD7M}Kfi=ljx3 u FLc?sE$&Xc\EG_=N2  m e v t A z -  3 M ^ N .   ' $ + +   7 q x #  E J Q i / y @ K?hg|Kon_ \K*OYT@r.   l [ K  x ;   " 0 < 8 2  v  / F g } v   , )   + 4 P n P ` - CqJ@,NqQX}iHR${#KPV|iU % E y 8 "  n \ E 6 / 4 9 ? J B /  [ % , j  = ` w m 7 x q    w  I f  O+}o|qR.E* ~\.uf  P X  _   - 0  Z =    # 1 P w $ I [ ^ u { x M  y B & = W w d B ) ( " H   = U c  |y[;2ZYQ2J_.lUlN<OgQ8  f ; ~ 4 c ~   T    $ W h ?   3 L M H V n ~ H    & 5 9 9 1 & $  >  5 ;   ' 5 o J k N7Ll[QYOpZW'z1o 9 w v v  e F # 0 X z 6 y 9 &   ! !    Wa6%/@PQYo/~        4 V n n p XXgFBIQw$[R uqy n j  "  7 3 u  U K _!z eqi5LbbWuY71BJ^w 1 _ R igz6Uz[nFJXl  V J P E    z = / ? Q '<X6PqJmZyiS1 3bq6=UZ-HF  * X w ) D d  s I(3r aw $ p A ;  d ; B v Lt%'YU;+>N\hil[RI`n}[3+F_kyk4l0'u&*OZD@i  1  ,  _  g J A $x8lu+ 2 & C + _ z c ? QkS6*WO+uk/b2 q`_v}_B1-%&+8DMQUVn3;|v|oZbR! 8L  " 5 J p  A _ W < L  } 4 a : n` o b e u X 8 3 = p > G 8   " kt\2KVTe;N/Jt9/BTSJ,  'H^pDRwbo=:{nA ; % 4 q c J A Y  @    ' 6 $v<N6,; eP.}{1?&_-  2I]s U$ p4!` 3 2  % [ o u X : 6 \ m B  5 n } 8k6+T uzL6LojJ@Dm[&vH*7UyxXDnE9;_lHMST{x_  t   { T  JL/b4?QIQva}#]&8r&-,F}sk`A+'@Xniode^<5u '| yj V H t 1kfTfH0#FI%hkM2$' Pw<_aZ~E{i')yzaE)nD.#)1+5~"G[<aXy3mlWak28jUn]wN }zlE(CI LDgD /G562j%\L$bCRpIxye!Fb;`k0Ffn2E!:5$MP4`yZX+!>K B%qE|+ S  > d h J  O `x*'(L gmn~s(h*!Pg7BoZ8]MngM6d.&cV,x"  b k  7 F f : T -   7,U::@Si}|oQ9 B[ 1 d n  yQd:\O/44H=x "2|<q<DVh7x y}vbfs`/ $g.7-7 P dB?@k$~7WUVyu\BiOauD\@ r GTn,+ E(%.2 g!c"(##$M$X$C#####$$>$6$$$'$I$F$ ##X""~"!! /JpRqk 0 t %%jHX=[@DD@3 WjM_<5(d-@ )CjSV5 !#%')}*++E**s)((F'(A()*+,z,-.)....P.-.!./ /R/c/O/X/r////.--X,,B++{+M+V+*)'n% " 6HGTP ? ; _=A?>~np 0Y2_D   ),!#%'t(w)N*|,J.]024e55665554(3u23.345y6]7789D9::N:099::;;_;;;<C?@AAAmA?@?>=>>a?_@YAyBiC[DE|FZFG(GFFFGGqGHHTHHIIJIHGFEDEBA@@&??'><:98641.+&'%J#-! 5M"nI_P^ %y,=.F)Pw"&q*I-1%4p79{;<=>@ACEGIK L5LMAM.ML6K/J;IoIIK"L\MNP QRSSTITSSJS6S~STTaTTU^V!VWVVHUHTlSHRPO;MLKJIlGECA?= :63f0. ,M*)\'%#q!sPb2;0 RG} 06f #!$4'**,-1F58"<':\86420Y.X+("$: V OlIC?s5 20/*.)--*-j./136v9]ZA*D"GRJ MPTXXk[^_9`Ca%bd,e+efghjBklUmmmllllmImnPno7opfppppzpmphppkoono0oYoop2pnpq qrrrrr\rqq!pronmmba`%^T\6Z3XYVUS5PN"JGD*@J< 730,U(N$> 8i[y . OS+PO(MbLwKKLJMNPRUlWY\^adgiGjkl|lmmn+noopqvr.rrrrrrrs s`sttZtu1uuuvvvvv1v(uu_uttu5uauuuvqwwwwww/vuusrqppoonmmmnmnm\mll kSj|ihgeca`_^]I[-XU|RRNJFB>`:]6l2k.J)%"=O Q[YX=VUUEUUVWYv[Y]m_(`bdgiklnJFB>;872-c("#%m6ll%klkkkkklmmnVoOpPqKr)rstDttttwttuuJuuvE83D-(nnon3n>n`nuuuvv4vQvsvvww8w"vvvvvvvvvvvnv0uuu]u ttttuujuulu tt@ss^rrrar;r3r\rvrrsskstu+uuuubu4ttt"ssrrhr&qq onl;jih:fEda/^W[)XTQMIDU>83pp5p%pRpp^p(pppq]qq+q\qqkqJqTqqrRPNMM6MNNOPRMSUX[_ebehknqsv.wy/z z{_{{| {{{ zeyyxfwdvSu|ttMsrq.pn/l pqrstLtttuGuvvyvvvvw7w-v^usro=loi+eb_j\qYOVT)R.PN-LYJIHGGKG>?ACAEMHRKcOT Y ^bgwktoyrxuTw xytyyyyexwtq5mhd_Z:TOJGDB3@R> <;?@BD,FJcNjRW3[i_dhlpps&uwxyzzzz{zzeyxxOwrv[u>t=sxrqponmno6p~qxqrUrsrrsKssssst't7srqoWl{h7d_UZV*QMIF}CA?`=;:9877%78M9;=@CH LQWM\b%fkosVuwxyy^yxx2uslo8je`ZTNWH CS?X=:965J4&45C68 9r:<>BiF>JO,SX]bgRko2rPt[vwyy-y2xyJyWxx,wvv:uIt>s9riqponn2mlmopppqqFqqr@rLr4r=r\rrr!pojliIdP_Z/TOJF'A>;97[5403P2U10S//02 4.619";@$DJPeV\bUglq!t6w7xyyyxwu;rDmuh{b]\VOH7A>;7V42r1.-,,-/0]13f5x7; >CSGLQWH\b;gXkMoqtwv&wwwwrwwwvvQutt1s4r6qipoo8npmmk\lkmno ozoopp{pppqq^qqhpomjSfW`[lUOID>?;G875S3p1Q/..m-,,++,c-2.0h2518=(C I!OV\bhWmquwyGyeyxwptnqDl5f`uZ:S_L=E$=8530 -V+*()1(U((*++H,.80,258>{941.-q+**E*))>((() )d*M+@-.15;XAHPW]djLo svMxxyBxvspsk/e^XvQ^JB;Y5p/,)(&&O%$%2%w&C&()*,.148=BI O_U[af.jn2psssscssssqrr1qqpp=oo&nn}n mn>iijkl^lmm4mVmnnnMo op?ooQm[k>fa[TMF@B940:-f*)((7'''''''''((w)*-/5:;BuIQXb_ ek7psv5vwOv@uQroje_1YRSKHD<=(7X1.S*(&%$$%%Q%x%&R'G(*)+.16;AHZOU[a@ejmpxqMqqyqqrqq>pppyponnnYnInnnh~hijkJkkl$lQllmmanloFonnlid_?XQIB-;t40;+);'&_%%%%%%%&&4&1%%%&&(+/5###$N$%&)q+04;AHOV&\jag#jn5oZp op p&pmpVoo*o'oLo&nnFmmmmnnhhivj:jk[kkll4lolmn*noQnfmkdh*bR\\TM^E=7Q0,(&%$$?$g$x$$$$$%$$$$%%W&(,1/7>:ELTn\bUhfloVpfqqQpnlieea\OVPJD>95g1.-*(P&e%$$$####$>$&(>+/5<CZJxQFW]chKlCmonnno%'*0l6s=E0LtSY`ej`lTmmmmmn mmmm^mmymllmdmnnjij jkIkkkl"lkllmnnmlohc\VKNF>60]*b&#"!!!!"?"k"b"K"j"""k"!!!"^"#$'*0y5aZ|SoKC?;:3E-4'{$!!n !1!!!!" "1"="!!V!E!!"#u%(-28?9ELgij jjjiWgKeFa^>YSfLFAC;61-|)r'K%%Z$$$>##""c""w#%).6= DLS>Z`fil1lll`lllol;lHllllllmn novkkjkkBkk kekkck2kll:mknnljf`^XQBI,@80*%v" \ : !,!|!!"D"""" !!!""#P%N',C06l;AnFLRfW\`5cegkhkij+jZi4h=eb^XQQSJD|>9W3.*)'%%$$$#""[""H!#$G(-,3o:$AIPtX^}dhGklYllVlxllxlmllm6r.V(#u!GEr + !>!!"m"#)#""$!"7"D"#$&*.38F= AFLQKV7Z=^3a1dfBhj=kpk#kigb\\UeNQGl@;45/*'%%$$b##1"i!!!!4!"%)0{7>F\MU\@bg jlllBlfllllmKmmm~m*mgnnoHpmll2kk5jjjk4jjjkm2mnhl_ic]UME= 5,'7"h g~ f !p!"t"###H""""#Y#%4'U+.36; ?CHMlQUZ]adh j4kllejidb^W\P HA;5S0*'%%$$]#""&!!8!8 !M!$n'.C4mkhda[bSjBpG&KOSW6[!_|cgj'kklklj e`X`QIBf;5a0$*'%%%$##"J!!D! "%@*08@0HPWX^d^ilrmmmn&no+ovopp$o{nntnno}opoYmlji/hi(iiiijl5lmikgaGZRJB:|2*%!` xS % !"#$#^#o#$$%6%&(x+ .269lFeN\U]bcNi@l6nmnn\ooppppoonoo7opBq/on1l,jphhhiWi)ii[j3kl,ljgma6ZS KC;\3+&"9 "R , H !"#3##$$%}&)'T(U*.26:=@zCGaKPTSVrYJ\}`6b.)$ !|V  `!"#2$$$%=%'(~*,05 :@DEGJKM%P-SVY5Z\_YbEe^hjkkdk?hf `ZSzLD=852-* (b&&P%%9$R#^""!!!A!% !"&,3;mClK0RZ`jg jllm m9mnooRpppoopNpqrDIXMxPBSUX[s]^#_tamcfikl kjhd^XQiIB;6g0,)`("&&/%% $>#k""&!!!s!U !"\&X+u3D:BJQYZ_faj!l_llJljm0n nhnop=poopqqrpoYmk~ih gsg-g@ff~fogh3iihgHc"^vWQJ@Bs:2,&# b_ 2!""6#:$$f%0&Y(*.q16<#BIONSVY[^`bbcJdfhkllBjifb\VTNGJ@O94g.+}('&g%%$q#""@!!!!r!h !"&+3;CJRYa_fikkFk^k{lCm/mmnoooxopopqrpomkoihglgff.($!t )fiCqp /!"""#f$&U)^,=0S4R9@;GbNvTkY]Z`be&fg~gghiklm ljzhe"`ZT LE*>\72-*(k'i&%5$[#""!f! !!P!R!h!!"&,,3;CK*R:Y}_eiPk)jjjkylmlm7nFo)oQoCop^pqrp1nm{kihggRgf1ee[eghhhrgda[V@OG?71s+&"!7l2 v!!"$)&w*U-27=DLSY_Obfgjk;kkkl)llmmlig5b^WPIBa;51j,*P( &%$#"!! _ J b !& "%#'-t5O83[/+)x'&u% $"! # ; P "%#(.6q=EM%S[`ftij^iihijQk6kklmnmno8opuqqopnml6jiihgff6ef,fghUhgec^ZSPL+De<6@/*&#!y j d   c ! !`""e$',2!8>EMT\bhjmYnSop8ppXp oyonn8ljfc6]WPI0B:5z0[-)(&~%$|#u"[!a Mc c "%C*08h?GNU\ag iBj-iBi!i^jjk!klmnn[noppq#onHmklJk$j"ichh(gf[efGfghggf'dN`&[UVNF?z82E-:(&%"u! !3!Y""c$(-3:AIPXK``fknppq~qrqq%p7oon{lgie\aZTCLE>"7O25-h*'&%H$#"!! EhW g!#&,2:hBIPWm^bgifiihi/ijujkClHmKmn no6oop\nmm7a0+'\%X##%""F!!Q o +!#',;29E@HPVWd\bf7ijdjNi;iiqijjkDlUm8mmnninmnRnrmmpm8llikjj&ihh-gh+hiRi[ii$hhec^LYqSLIES>9%3'.8)e&C#N"!$! V C |!"$(L.5K=5DL5SZbUhlnppq pqppoovnrmwjLf`?YQIB~;4-)$#d"!!r!6 BruL <"%*/6=qE2M5Tx[0`%eVh[k kYkiijj jTjklmNmmmn mmmlmm!mMmlkk jiimi)irjjjj@jlj,ih,ea]WQOJ:C=7D1,M(_$"!! _ -!_" $(D.5=DLYSZcagKkmozopUpDp_poo$nmlhdm]fV'NFV?71`*&"! Q .  i "J #'m-2:A{I^QvXy^cih8jlllkjkjjk[l&lm_mmummmm+mj"k%klmmll kzjjjjkqklklkkjhea\*V9OLHB<)6`0t+'v%"#l""!T ~ c y!"g%-(.4OEMU\4bPfmjlnVmm`llXlBkkllmm?mLm:m\mOm ll=gDi jwllmtmllAkkkllm m?m*mamemlk9h e`AZT1MGAH;94/*'%p$#k"!!=!"1"%)A/&5%G@92-'$ vDb !$(-4g; BJQQY|_eni1mnonnxmmm4ll/lmlm$m%m;m@mXm'llkbdgMikllllllllm]mn8n\nnonjm`jh&c^XS$M G@:4/{+('%$#V""D##&*/5:54@/,H*)'&-$]#"#N#&Z)/5\;B]HOU[`Id,fghLiejOkhklWk7if=b]:WQJD=m7F1:,y'$"# v#!J"#%(,{2e8z?FAM&TGZa`fZk7mppq,pip(onmllzlll|l kkkMjihvgUiZp_ cgDjFkllmmYmmn^oopq=qr qqon*jg3bB]aWRrLFm@Y:L51>.Z+?)&%$r$$'c*0O594t0,*v(&7#" b !K"$&(+.38?E(KmQWe]chxl)oq0rsrHrC4/8?;97779UY]Z_bdXefghjjkWjehe;a]YV(RINnJhFCAL?&=:O7j42S0////0R1K3a5r8;@+DIDMQUZ:^bfjMmwoTq qrTr7rq_po]mlkji7f>>@BFIMQ9U'YR\` b&d8egh+ijkklykbifhcI_\oY,UROsLIGECA%>C;w9U706x6 7<8 :)<@$CH/LPTzX[_lc!ftilUnp9q|qrQr"qq"pDnmokkiygDcC_YT}NHC=t72 S(v1:CKRY^cgMjlnp5qsvtuvvvvquutsrrQpoClJie#a]Z8V?QNJ/GFEEGILORUY1\`bdf2gLhikClmm{mmlkWhfc`S]ZXoUSNPNMJHpEC@>>"=>?ADHcLOSW0Zw]`cfidln pq8r)rKrr9qponl:j/hfRc^XRLE?{993,-'(1:cBJR.XA^ befil]nGprMt!u.vvv4uuutt4ts:r6omuj$g c`m\YDUQO{M\M*M NPuS!UpWZd]!`2bemghliRjKkElmnno/nJmjhfdcb_`p^~\fZLXLV`TR~PMHJHnFIEE0FbGPILPT&W\Z]`jbegj#ln,oqrqsrsrriqHomyk?hfc^XRvK[D<5/("! (19@H'NU Z_.c fiQlEnqrst]tttt`tQTX"Z]K`bdfhjl2moq!rs@ss\sJrrXpnkhe3b]ZWPIB<:@2+|%^x k '/$6V=DKQCW[`ud gjmp(rrsssssttntktCs(qomki;fdlbQ_^\T[[Z\5]:^` agbdNfgiXjl mnnopqrrrOqqpBo\nml{kihfdb`^E[YW6ULTTVgWZ(\_)aCc3egi&jWkmnOoqr_sst#ssrrOpZmif?a]_WqPIAM90_(!  %,29@HF@LKQV[t_cgnjim#nppq.quqrzs/s|srqpNo mkk~imgedlcPb(aaAab_c|dYe:fgh(iUjnklmnopqrfrs]s]sHrrr6qqpQo2n#lkjhkfRda_q]\E\\8]^`b@cexghjklHmVnsompnqrsxs~sprr]q+p mTjeca[UOG?7/Z&^o *E vxUl!'.5;OAwG>M4RvWb[`$cgj(lLm_nyoLpfqirors{s"rqGpIoml"jihpggtgag gCghLhiPijjkklqm,nnopqrs:sssssssjs rrqppnmkjh5fee%cccdeSfSgKhnijlmmnSo)ppqirzs,ssrqq'oTmgie`[mTN?Fm>6t-%z z`A tI#)0!5;AG;LgPUZ7^befhjkm|noppponmmlk j&iHhhi@iBidij'jjk kk#kIkkl l[lm s 1p$*0M61;AjFwKP4UAYo]+_bdfhk%lqmmn6nmmillmkkZjjZjTjjk2kkl>l]lslOlkkkkXkjjjktllmkmno4op?pqrqsssss-rqp~omm l"kkjjkWklmGmnDnoaopXpq=qqqYpnmkrheaM\/WPIA:-2X*#qu= a;hNc] iZ %+0j5;@DIN!RCUaX1Z]`nc;efgGhBhi3i)ihhhh ggVgsghhiiYiviiiKhhhgwfeddde)efgnheijklnhopqr:rrgr9qjpaomm lkgjjjkcl llmmnnrnnnoJo2nml#igda-\{XRM F<>7"/(!.+ pKQfA7 t /%*i/59>BGJN.QTWZV]_Z`bbcd>ddeee ddudGd*dldegeefeee?ddca`K_G^^^_g`a(bndeughjln]opqqr qponmlkk=kRkl%lllllmm,mm5mm#lWk#hg7dza]LXSiNI%C ;4,%M 7+$_PtA *k 1%;*_/3^7:>BvEHKNQTVXHY>Z[[[\ \z\\\\\b\\\b\]^]]]Z].\\[[jZ)XVUTTTUgUW;XZ\'^%`Xbeg;i_jlmfnMngncmlkjWii2ilij#jGj,jiiiiRhhvgg,ec`^[BW{RMH_C=70)~" D7Q}q;" ]EJ$F(,/N26:=@CF3I#KMOHPQ+QRARRSSLSSSrS\S|STT0TSSaRReQUONLFJIIIJ4JL)MOQjSVTYX\I_adWfhcj:kkk>jihhgghh%hgggTgBff!dcbB`v][XzUuQMLGEB=82+%:u 4 w_1 H(4 e 4"]%'+J/B258W:KF=<<=(=?@]BSDFIZLP8SVY\_dbcddgdc'bb$aaaaa]a0a!```_]<[ZXVbSPMID@;572-J'7!xD J^;^9e,M\  4f (#'~+-/1d35E7K9 :;;_;;;;w;;<`<=n=>6>6>=}=<>;e9856#42\00a/0p013C5B79<@DJH+KOeRUY&[\\\c[ZZ>YYIYYY&YFYYiYUX"VySQ8NxL1IyFBd=8P3/,'x!#n 6|e1{?r,6 ju #%'8(A)+-.0%01F1@100d0t01m2)23e333$221#/-+)'&6%$%C%n&q')+=-048~6:6?1E,)%""[  [%zjK$l,w0S|;  O1# ; H!#$x%&&'&&D%%}%&$&'((S(6(5'&%#!v^ #*&)-15w9*t.  & V*j$%{I>*0G <J $!'+%.U14/68Z99w9?8778 89_9:99[8N7'5g310-+:']#Z D"J|?KlJT:sO9r?'n f <<b+: FrYFQ F h .]"%'*, -<-s---.../8/..;-,+*)m']%I"G3@Y\v #cN|s Bo '8 T/B9i:x}\0 +    ) r = ' g 8 / "  Lj^ Qyf ">"#d#$q$%?%!$$F##["""X!t T@ : > Ql,`H 3R":L'_kn?f:(#?WP< l>S<M(9M \(S \y(dg&D(Wj?=+:e0M(+qD96;9| y$TivjaguhDyN2[dQZ5f2TS<) \bFZb[T9&SX8?(&DNS^IR;P5\-wP'g$R*&amc=VhAT.)MPN{no_R9C^)+DO{%-*>|%I|HK $Gj ;a))|\2|Uy%gJRQ,h$N_ &7N>S{ smJ[WKKua@J$@c" kok.oocn\% -?du`F- UPM(JeAJZ8U8%-`.jJc%ASPNowC.I<)d@*` +}u \`d[,$(GsZ@+,.E\sE' #M 0^ jaVg0),YaWOr,JWZfjoV(:C</+-QD<~6>U[{yydB97Qo_I=Nitk\@04HNZf8%zN{[^1 }]Qe-I^_SOUrsA!FRF606Y~XYQMIoeq`\m{Y?4'2LrDsOW5jd;mHF`osoJch^LAIivX$DLA7:Nip|gFi0JC. ];%3Fq+%=Pca]G+pPIWYWZ7LVZRFCTceK 7ZaI1=\l{yLEs/$xbH9%,<o !z# k ';U[R8#|bUY\[Y$6KVULGJ`a7 QoY4.Ef|{UJh6 C ! vYDCK>>Iv  u8  DUG+%%*k^`_R%:ObbN@VgY3 RdX>1Ejx]Nb;M7YVF&pSKSIWz  v&>s_v 6F= 6:bUK0(<[kaMMT_S"*ZqY63Qy`HVm<4F4v}f4%p_b`{y/)cV@];E= 6. Y>+  %DbvpU>JXJ0<biXFCUu}g[gvU=_kYC%tgewX:-HtqTN[&3"/(I& $@lzX.-F]`B%&BcsfN@P{~fT^md|1yiX2sgc^fti8";d`6=o'&;,Z1 :SH0*5GSN?27OitlVSyva^q@c^bG{twuN>MtuH<]~ # R0  .52+&.FVL;9Llxn{umt$8PJ4 q``cwcSMh #Y2 )33**BWSC7>Zx~{|vvw172{aRPbuj\cl r>   ,984=HOMB>F\szv|zw  kYRFK^xtdalof_G)  &2;@CLOJD<Jmxv dPPLYo~yy}~ iG/  !,#+<@@IPROAFc~nr~r{ !%m[^an}{~|wV?# !$ @As~ D2L?gjM<`DYq2j6zI*K O R ' 7 5   E  j k < .lM;#RNac;lm|: } FQl ByJ%!Q`]ED|_AW2  q k x t H 5  9 U c O 1  " " # "  " C { ,  @ I R g . { K HFmeH pkg W|M1W`W?u(  r ] O  ~ ?    ! / > ; 1  v  - I e w v   / 0   $ * I k \ ] 5 HqM=${QsQV{nDJy"HIY~iT % ? | = &   h V A 5 + - 2 : E > .  X )  - h  > \ x e . } w  &  " } T d P&w}j rQ/9% 'z[1ma N Z  b   * .  [ ;     * J n  ? W c {  { O  { E ' 9 S v _ ; ! $ ' T    F Y h  {~sS?4]^V5K`1eKrL=UfI2 i 5 z 1 c {   U   ( ^ k E   # < E K ^ w O   ( 9 < : 0 ! ! " K " @ E )  * >  P l J4IpdU]K|aX(s'i 6 v s n  d @  0 T 6 } < )  % !     V`3'5EJWn1{        & 8 V s i j PXfFFMSv `^)xqu  h i    = / m w T L Sz_r r< Bxji[xY5-?Jb C O E ^fv4!WzerDJ]r  W M N >   z C 2 > U 09U6LoKlZweM*2`!y;@VX&WM  8 f s & = [  m K(1u  _y% ! | s A 7 ] 7 C s Qp'-\ZC2)MZbnomYSN]gswP' 2Lcqm9]"+:+ScQOu  7 & (  Y c M G %;n} x 1 1 R 6 \ | j  4 ZiJ51\Q-yj/]/ ra]rzZ:'%!'.8AIOWYq8Gqts^n`08K  ! 4 H j : V N : Q  ~  0 e ? m^ f h v b 7 - : p B A -   ( vyg6I'\[e7K)Gr4.DUSO2  )NikG[~s~C6tl? 2 " 5 n ^ M L c  { .     & 6 (x8E/ '>b^"0"6@!Q0G]v O, ~6!Z  , 6 "  %  ` r | d F = _ j X . D u | 7n3!Orr  V>M$qjMK)PvRc6?]vR=fUF>j~  MT\'N~b ~ % # [   GM%g9>VQQpc$c&,@{,/0% Dzn^Q=2*=V+zr#vml@.s #vh_ X M =tmMhVE7SLo`yQ=0 +Pr{5X]U>yg%$rt[A,\D895*1{ D>)Dilz'ifLZ^$XQ o|\[bX7 OA  KJ`:w0c/bL}s:d4 *S}%L*:3E(GS&Mm2Ntv7D/C<JX/awTOr"B b1[  9  O | N * d ;<ya4|@vu2h!Xq:Qx^9[W.Q7l)%'/`V,c   Q L   ) R * ? &-R{kPF-tD \ J yY_aM@*q8TA'1;X0@pB3p9m4g f T}vksm>8=pWL^$?LC.$,GRK`_$Qi2 o L~@+ @JQS{u\Hu\wu k7Q 3  ;y. [, | !!"#]#####h#[##$+$W$X$A$C$Z$$$$E##l""j!!@  +qH^57Uk0jKbBEFA6 fpB*2:{ x K ]Q7 F!#g%')*+6+q**)((9'(0()*+t,,-H-.@.R.R.$--.0./9//////0///.l--$,+++,**C)(&m$+!Q%D Z {]lY] YJEs^2.WqI7Y [n 6W `'!"$&'(*,.,02456'6z6 5543R223T475 567@8&89::F:?::!:;;;<<<7]?@ASAAA=@\?F>N===>?@ABDE@FJFGMGSG4G(GqGHYHHHHICIIJII GFED BAs@f?q>=<;:8e53\0 ,)R&#! ,ra)d s*t80 &B1bdR+r"%)-(0Q368]9;p<>?AmCEGIK5LmLM\M#LKJI~HHI,JiKM NFOQ$R{STTTYTSST=TuTTTUUkVVVVVPUIT^SQPANMvL!JIH,FDC@A>;8`51/0,*)'&n$#!d rJTf; W}"U+_"$'*t-1#48x;?AACDF1GIUKLNPYR SUmVVWgWVUTySSSbTUlVXFYZ\1]F^/^i^^4]]T]5]\]s]]]]^d__`s``]__ ^][ZYWV TRQO*MrKyIVFD AO>;9"643 10l.-D+*('%%"GKN`t $ IH?-ZR ,Q)&$#""#/$m%'),A/2g5q8<"?CGKM*NOQoSUUVX.Y[\^p_``a``_@^_]]^Y_`gabcdefffffUeeVe(ePeweeeff~g7hhhhhjggAfxehdYca`_R]\=ZjXVTRfP MmJHEeB@><;{:8{65%3q1`/i,)i%y!8  HBBtb631/p.k-_--/0024 69=I@&C(FmJ&NNQTVsWXZ\^<_d`|abdmefgggg"feeeef{g<3:7=4V0,(/$>   vjA-,@=;N9&877I79::M<3>aAoDGJMJPT^Xn[^_ `a'bdffghjkEl~m.mmmqmllolPlmmnTnop$ppppBp%pp ooannno ogooopFpq~r r0r8qqppJounmllkkjbith}gEfdcaa`/^A\TZLXRVPT2R:P_NMLJG|DA? ;k7k2.~*G&O"xD[/ XIFDBgAj@{@AyBCEHK)N%PS.UX\?_b"cdefh'itj7jklmnop pUp2pooooppfpqvqrrsXsmsXsrrrrrUqqqqr r1rYr~rsOstGt`t`ssrrHq[pNo>nDmmllqlkkjrii(hUgnf#dc(a`^F\MZMXWFUT8QO KIEB=9d40-)% !ef 8S>PNfLCKEJ~KKM MORTWY[]`cfOhijSkMl0mEnnnopqfrrrrrrror[rhrqrsst8tuZuvHvhvRvuuuuuFtt|t_tpttttu2uvvvvvGuu/ttsorMq0p+onnnsnVnEnKnLntuv-vw9wZwCvvvvvgv$uukuAuGuxuuu}uuv>vvvvvOutsrqppoo6nnno)o|opp-p;p oobon]mZkjhegedb`^[IXUQMIEA=951-*&D"/}*ba,_^8]]g]^A^_Z`lace)fgixklmnopq#qrrtrsszstptttttFt;t>tsstXtuv,vwfwxGx>ww~w)vvvvv8uuuuuuuuuuvWvvvvnuuctsrqq&ppLopppqqrirs6s5s(rrrqpopmlkjihecd`]ZWSP KH94/*lllkkkkkll*llmnopqqrLsGttst}ttuwuuuuuuvuuuxu4u utuuu_uvvZvvvwvvvZvuuuuuuuuv$v7v uuvuGuFuUuhuruIutt7ssrr)qqqqhqdqpqqqrrs$stmttttt~tsrrhqqippvoo mlak.ihhfkd9ay^[XUpqmr^sot{u uuuu]uQuttGsssss[rqpponmWkihDfQd`a^ZbV(QKrUr@r/qqqrr@r\r>r^rstqu u=ubuvw)w)vv_vuuutes{rqponmllkkkl(lsm6n+ojpqrstluuv)vvww:wlwwwxx>xjx^x-wwwdwFwvvGutssr_qponbmdlfkk|kkl]lmnoqDrtrrqponMmdl@khfc _ZVstt8t+tt5t[tmtptOtwtuvHvvw wwx+wwHvyuu tCs3rpoVmljLhgXfePddjd,def6giIjlnjoqXrstuwuvvw=wwwwwxwwvvvuu)tsrqqonkmWlMk&ih^gedddeDf/g)hjYlNnCp3r-suuvjvwjwwwww:w0w!w vutt"srqpoofnnl{jh+ea]uuvuv"v>vvvvvvivwwxxAxsxyyCy%xqwvutpsqfonlig|eCc3a`_]]|]]^_S`bdfi4kXmlo\qqs$tuvw wwwwwwxwwvvJuttsrvpo/m9k!i gXedoca`+^]]^m^`4ascreh;jmGoqstvvwxyy3y7yyyyxwvuu:tsrrqq\ppnmkjhe tu@uv}vw,wWwhwiwpwx:xxxy*yayyy#x*w-<<]<=>?@CEITMQRUAYP]af9jmpnsIuewxyzzzzzyxwvvu3tBscrqq.ploo#n7o|pxqrsFsstBtu;uv vuuuuu|t+spnjgb|]YXTPKGDCA>=;4: 8878S89:<>B%EINEAE:ITM:QVZ_d`hkovr*tvwxnxxyFy'xwavuutOskrqqpQoo+nnno!p\qXqr\rrs6stZttrtHt'ttbsr1pnUk]fb]SXRMI D4@8BlFLzRHX^dssrBqXpooYnnnInlmnopdpqqMqrWrs rssssErpoGl'hc^XRLGNBq=96131Z0 ..M-S,,,,-.&/1R416;?cE,K?RX^ejoruwky y>yx_wGtpjeu^XQKDv=u83b0.p-+\*C)() *4+(,-/147;C>C}HSMSYI^cJhkor>txu-uuuuuwt{sxrr qqp+oYnnnnIn*nk km"n%noXoop:pqqqqrCrrhqonjofe`[FTNAGA,?+n**))p)?)^)S))*m+`-/37=CKRYYV`4ekosvx$xlxwvgso0i?c^\UNG@93//,*(&&%H%T%&M&'(*,*.037H<A G)MRSY^dOhmSp:rst2t t{tt>sbr[qyq"pp>ojnn&nnMnFnTnijklmnnVnoop"p8pUpqrqqKoBmhdb^BX8QOJC9<72/,V*)L)((({(1((!('''')u*. 17*=3DLSZaGgloq)svvwvutqn hSb\GVOiHaAg:@40-k*(&%%%1%@%%%&W'b(r*&+.105}:AG~N0TZ`ejnOq-rrrs%s;s$rqppppoBnrnn(nnno'i;ijklxlm m\mnCnnnopq ppgnLkfa[HTMEQ>:72-+(A'"&9&d&&&&&&&&U%%%&s'K),17z>F[NU\cirnqtDtu8t,sXpflg|bI\PVPJIB;61/+)'>%%"%0%$$$U$?$%0&@&(*/#4:AHOVV\bhl_opqTq@qqqqpp;p/p>ooMnn6ngno-okoiijzkWll@lBllm0mdmymnop:ooum#j(d_(WPH@92.i*'%$$e$%%`%d%V%|%%%{% $$%`%').X3a:vApI$PX*_eknqr rr&qnlgwc^Y StMAF@q;N630--* (&&m%%% $$:$0$;$$&A'v+&/6=WDKRY_fj_mnoop"pNppzpoooooNnn^noToopZiijdk"kkkkl>l3l2lKlmnoUnnrkhKb\ TxLD!K  = !Z!!!!""&!!!$ !K!["6"%(.e4.;4BIP V]_bgfhjjkejihfVca^YT=NwHC>:650,)]'&&*%%N$$N##k#7##%~(].(4*;BJ#Q^X_>d}hjlCl2lIllOllllmmjmmDm?moopkq(llkkl*kkWkfkkjkRlemnonmidp\UM+D~;3J,&6" 7 o ! !!!";"W"~"I!!5!!>!H!"Y$'c,y18=CIOVy[`|c!efh@hhhg7ed}a^~YSCLGAk\jjk*lgmnonmic[TEKB: 1Y*$!J] M!!" "G""""",!!P!t!Z!!#&;*/x49>CIOTY\`b>dfgh8hggec]X/QOJD>92-)Y'%e%3$$2##'""H"'""?#%*07{>F)MT[afiXkkkkklElllmmmmhm,mno oponYm/lul!kkRjjjjsj[jl;mnonmEhvb[SKB'9m0*$!U(V L!!"6"}"#$#o#N""G"'"R"-"u"$1&*/+37<7@EKcPuTX[l^kadUg h}iiVige`[BTM-FH?93+.)D&%$$R##D"!!!b!!>"g#(Y-p4;CK-RbY_eehk>kl4klPlmLmmmnknnmmnvnoWpo6mllkjj%jjTiijkmwnvon`lgbtC/HMQTX'[_c fhj9j>jigc]V#NG@:F3.w){&%$$K##"Y!!" Z!D"O&'*18@H7OW4]{cgQjklXl,lmGmntnno.oRnnmn[n~noonbmkkiini^iiHi_jkplmnml1g:aYRI@8u/)r#!6C w !G!"I"#8#9# "#N##$V${&(e,c048-;l? CHMQTWZ^bfhj@j2jihcF]V"NG@:<3.)'Z%|%,$$"#K"^! x Z !1$w(/_6=EMT[aafOjCkllwmmno oDo4ooo-nen"n^nnnopnmljihhiEii,iklm~nmXkf`XQGH@Q8/)V#!8#/  y !!I!""""# #$B$%3%'T)-26 8;>C@HvMiQ3SVZ^2b]fKhj0j/jihDc{]V.NG{@p:33.*'%%y$$l#u"f! d '  #"&~-3;C0JRY`ejkllmGnnoooop ocnn4n`noooqoPmljiZhhhhhiejklnlk'f.`XQzI?@800)$4![R$ # !,!"Q"""##$%/&A')`,o05=9;>>A>E_JPORU:WZ^bfvhjGj)ji6gebx\UMFP?k9s3.d* '&"%%&$#"{!! F"%w+2:B)IQX`:euj%kmlmvn-o$oooioooPnnInnopp3q\omljhh]h2hhEhYhik?lPmglEje`YQIAc90*|$!zLr { !!W!""# ##h#$%'e(+/J4882x-)'&G%%F$#"!! Ew!$+19AvIEL)RWoZ^`UcefVfgi jlZnBnnlk,g bt[TLE$>7)1,)'k&%K$##"!S ? 2 #&e,3H;BJ\QX`6/;)$" D{8Ks/ + !R"%(,N15<$BJ%QW]k`d)fhjk6klfmmnooo|mje`rYmR[JC<95{0+)5&%$#""!!, p o !1!N#'./49h@5GOOW_Ae}jm oopqrrrrkrrJrp}njf_wXPHA 93.*G&%n##F"W! !n*p  B!"&+29AnHP>W]doh jjjhhhi$isiYijklmPn noZpq%mjm/m1mllkXjjLiMhOgzgMggggh:hgec^YRKD=71/,'O$"6!r Q D ( V m!(!m#&,37:BIQqY#a\grltnip/pq^qrxrrSqr4r#rpmi c\UjMXEm>61+y(%#""F! 9D)%t , "Y$(s-5@<)CKRMY_~e~hkjihhbhhii ijvklwm mnOnoGp)mHm\mmmml1kk/jGiZhh?hbhhhShhhg?ea}]VPIBX;5>/*&x#3! "  %!!c#'c-4\JABo;D3.B(%#l"!!A +9:Q  #%|*c07>}EMwT[a)fiYkWjihh>hhhhijklmmnneno>lmgnnnnm8llDkjiiijiiiiihgd`dZTMG>@93-)}%Q#@!!@ z ' !!$m(.5Z=cELT^[cMhmJnpnpppqpppfppgp.mje;^VOrG@/9'1,@'!$"a! gg[_ !$'-O3F:AIPW^Sc:h3j~lkbjki;hi8iiidjCk\llmmumn3nJn8n{lmnoooSnxnmll@kukk9k}k8jjjk$j{izfc^YHRL2E>8d1,'$""-!   *!^"%(/6a>FaNU\d!iKmYnopptpmpYpoopoogo*li$b\T$LEZ=6/*%#m!k  {\V! "&r*A0(6o=E0LTZ`e_ikm3lUkkj`j!j@iij)kllmmnMngn`nnjlnoppoFnnpmmllullllhl?l/l}lkHhfb<]gWQJD2=71_+(Z%$#+"H!2 ""%)0v7=?CGNVT] d7hlmnnogooo5nnnnmmsjf`+YRJC<5/*%#F!? x32k "%^).4X:BJIPW]cgkmnxmlkkkjjkklmamn/nunZn0mmNikvmyopVpooto nnmmmn$n mmmfmmmkiLeaW[UOICn<6z0L,(('a%$R"!!i"v#C&*1,7?GFNV]-dhzklmmnInnnnGmmElkgc]+VOHB;4.) $" ( 7!$',2 8?FNT[V`fimnownymmB<6D1-+)<'%p$#"#$d'+2H8@GVNV\c0gIjkfl0l@lmsmmmlkjNhemaU[cUO HBU;5/A*_%#! Uk #%X),2O7>EZLTS+Y3_chkoopmm!l=kllm m`mnmm9lkLj_cgkmmnnnnnnnno6op.pYp^pMpppOnmjgc%^eYTNHB<62&/M,|*g'%$=$% (,39f@G?NUB[aehijjkaklllalGk^j~hfc_ZiU*OBIoCc=G7Y1!,5'%[# !w~ !#&O)>-2^8P>DDKRXm]cg,kn;pqqp/oo>nmllXlm,mOmJmm}mkjig.Xp]bhgGj[lm*mmnOnno0oplq%qqrrFrqpoljVfRb]XSNHB<74~1-.+)'('(}+/5;BHNUe[LadghiijUjk^kWkJjwigf6c<_[4VQLL#FA;50,)&$y!  "C#&([+/n4e9?EkKzQW]Eafj2mpqqqpponnmllmll.kk$j h;fsc`QoW]cmgzjl m:mndoo|optqNrNs%sst+ssrqo5lieaL]YXTANHCT>: 6h30.,,-J0U39{?YEKFPVG[e`cfghohiqj+jjjiigAeb_[WSNID?:e51y-*&'J$i#$"("#%'*v-V1x5;@FLQWI\aejloqprrcrVqqIpzoon_mpmm llGkj(hfdag]YHOV]bg@iklmnop9pqst+uuxuuRu t*spnlhe(a]YTO_J!E@=:075_34 47q:?DJsOT&X]/a~djfghhijkhkokcj}igf&c`]ZVR8NIE/@<8<4*/,)('()+-04'8=eBHM]R,V[`e4hl9npqrrrrqpoonOmullkjPhfLc`]YTTO?GOWt]cgfikmnopqurysuv=vwvv^u~tqrqnl@i'f,b^ZOUPLGCn@R=(;9:;J>+A#EJ OSW[_lbeighiYijkwl.l?lIkij_hfdbO_~\Y'URRNJGcCc>:v62/.-./137 :@ E*JWOnSX*\`dhkon4oqr,rrrrFqpoZn4m}lljnh3db@^ZUQ!KF75>FOV$\aoeh=k&mnopr$stvRwwjwvv u%srWpnlbjfcq_k[pW,RNJwG8CBk@ABEvHeLSP*T-X[_begqi:j#jknlOmmmmlkihJfQdxb:_]ZNWlTQ|NpJFWA=:8656y7&9H;,>BHLQUY],`dhgkm%oQpqr2rrrr,qmp'nm|lkjgSd_[W^RgLGA9;D+4=GFJN9U[`dhxkmo1prsu vwhwww\vutsrWq+omkAhfdaT]YUQNK%IeGHILOaRV"Yb\_c ehiRjkEllmno8onmlkigfDdb`^\ZbWU QMItEB?>=y>>@BFKP TXk\5_TbNeh/jmLnpqrirs rrrHqhonylkjKhd1`ZUPJ Cv=60G"j*e3lst tttkt)ttssssqpnXl;igekcb`^]^"^`bidTfg}hjFklmnoaoppapq[qrrqqpppKooFnnn5mlkpigeyb_U\YWVUTUVX[w^~a#cWeg5hj,k&l m8np qUrsosssssr(pFmj,fvc#^FXQyJ`B:2+% G 3xo (+/6=D4JEOU8Z^behlRnpqrrs3sEsssssrqonulji2ggf ee e\eg hVijklQlmnqo'opq0qrOrsYsttJt?t1ssssHrrr&qpon\ljh/eUbu`E^J]]0^_`ce$ghj$kFCH\LQrUY]^`begiGk!lmnoo n@mlkjj6iij jkLkl2lmn&n=nJn#nmmmimllIl=lRlmmmmnSnozppqqzr rsVsssKrrq/pnmllFkkklFlm0mnno;ooppTppq~qqjpmmnbno5oop[ppppq3qqp0nDljgd`V[9VOHA392Q*#^ `GtHQ9 I +"',16;e?D[H{LPS)UYC\a_Da=cde#eeeeCdee4eeeelef[fg5g1fgg#gff\edcna`__<^__o`oa{cdfhdjOlLmopqWq}qqgppo3nCmRll kllmmxmmn1nno nnnnnm5ki(fc`_[gWQKE=6F/>(!GU  N|>MX; ^ 3D>!-&+10#48A_DG>IJL7LM MM>MMNGFNDC6AA@$@*@nACOEGJVLPSOVZ@]_aIcCdef:fkfee|eef+f2ee~e0dddckbba[_^;\YW TCPKEu@;60*#\10mb  q^#S x1i0O"&)-1%358i:=r?@u@A/A"AH<;98654.3>3L346V8:=,?C FJ|N[QTVYq[n]F^^^}^Y^'^3^Y^{^i^2]]]\[[+YWUSxQNKHC>95K0+%}/" > {P"N2_&)~ =Y^"&x)b+E-eBF:ILjORTNU_VDV$UUgUUUUU!UTTT$RQOMFJHFD@<72.*& +|h =}n\)p0TC3U_g h !!#`$p&')Y*+n+,+++*++y,,u,,p,,++m*)X'%$", | "%1'+.26:>AD@FHJJJJZII*II6IIIIIFHG=EC;@>=;840,(%!=r~ a 6>KAEe k)y8_~<2 $ S q246T_=p !S!!! d 5 F e (d[>+AY $:(L,B/3\6=9F;{=>?G?>>=>U>?d??v?%><;99n75442/,Z()$!MV e >w |Z5ByCulYG E N )qih3-(B4G5q9 A i 9  Hl5"%)+./123T3@333o4145M5k4321$/|-,+k)'$] 36\ <@pL>?aCG >mn\7Z.ltL k ) 24U4x ~ o y 7  b  eg q -BE "(#%&'(}))s*%*+**o)k(a'%$#" T2E" XTQo;e/Y-SCp6y/|[;| A T T ]S'O'?}4X H ; 2 eR K !\!X!@ .Tt  cN!2_A1J(7L1a9{z.V =#D~kLeP{x#g1In^Lk=ZnR n I] m51? S =m|vKP.<%&oF%g3Mw sK5,g(EUQBa]BTnH'-C^_UVVJDJ]ZAi S   5M i b ^;  IlvrsS[ hL nPlM fT({%~:+5:++E0wPO,  QNL#^DS0j&'VCWq%dJN@Ze4? GNGp`L}aQGNLe"Cz$][S}-zHU;2S1i#~.p'q,C$TsI7"0~h8R!(5_%SH>F7k&Xx  ~rtlHg1LfH_Ju1P S:2&^aFWgbV8#S]%I1J70KbYO9K<E&Fl)U:"P)Y)d|Ont,:%~Q&UG|np]N4Aa-6V#T84,L1C uB\%Mh(Kt&1( q> V,oWg{:Z-HS/NAWv toDRNEJvc LS(Ag-#ote:twdeu|L :Qr%xY2[F T4PeIDa6V=+0c-iNi%>NLNnwF8RB,lH7e-|z\XYuU-,4RwcA"'HdqE%B3mifL`+(.YZ|VPu-HV[egmY#0AG?208_M?:;V\nnpiH?>Vr pT?Mpt]9(1KU]^xM3UtZ],x[Ob~,DUYSPTopB (MVI84=`Y]]PInfzuyzjerzw}gK9"*GsRuWa9kg<gEA[nupCWZTICJenR$!IOB9=Pjp}kMi7Q C0eF18Af9}$CWhd`J, kKCS[]]4HPRLDCQ\`K ;Z`L8B^o|QEo7&sjUE/07d {(n ';W^S6 x_RY_a]'7GORMFG_d<"Ol\=7Ll}TGc?A "gWUVE@Cmx7CUE&")k`ccV !6LdfP?Vk_;!Pf_F8JosYJ_>L0QNE(p\W\QYt x&>zd 6H>9<cWM2"<bsdLMXf[,)[u^:6Rw^JXl?7=}*lra4 ~mcgg~|- ^^B[AKA"!<1X>, "FexoWDQ_R7>fl[JHWuxg^i{Z7Pa[?yyojkz`=(=kz\R_%7%!/)xF%!?kyZ22J`bD')FfvkUIXiW`jXn(tnW+phfq|j?*=]d9>qw! 6(R- 9PG0-9IRM@49Pkvo[Yzze_o}8a^^@}mk{rNAOq{N?`|"  {K+ *251),EWL;;Okxp}wjo3IC2}t_\_teYTn W0 (7:-(BZTB:D]xvsv*0/fUM[nj]eo   q<2B<3?NQLFGL_zyy{xydWJMXlwfajpf\E' #/58AINMLJ?Iozz iTQNYfuzwzzeF2   /$!.:@CINSQ@Aaqqu{!|hZ\alsy}~yV<% # DCvB?ZHloQ?_AYj,d2O1H O V $ , > 5 " ) n I h p ? #uS:#L|Oed7gl|= FTp @{O./]haHJ{V7M+  y q } w F 4    ; S _ M 2    # #  I _ H M  ;  > N [ d / ~ M GOha}G sf#h T}O4X`V?|%3$   j ] L  ~ A   # 2 @ = 2  u 4 M M  = L  N - 7 +   # O v d Y / @nM@(SrOXpGR&(NJ`"s\Q * 9 w = (  r ^ G 9 0 2 4 9 D ? 2  [ ) & c  & C - 4 " ! m l  / (  0 F [  S+||c pW3=)"&~a3wf U `  W   , -  [ 9     * J k  ! L s _ * y 9 ! = O m u V > * / 5 _  '  ? V n  |rS<9^ZV:Og8aO rPDSoY; v 7 @ S l  ^ '   + ^ p H   + = O e y V   8 < / / / % & ( Q , Q U 2    % 8 { W r T7FnaTTP|^_*5t A x r  k H  & F t y 2 q 8 - $ ) %      Z!Z, (7AYx 2w "    " % ' / 8 R s  w z MQhCMM\!y f]&vs} v q   %  8 ( c k G L Zfv c.4jmdY[01Rh ;  c B Zgx? &afrJTg{ ! _ V V B   i 7 , : K #=^5MpMp[{jO$  Cs*6G^UlO  8 _ ~ + J e  e C%.y _}- 3 M A  b 4 ? | L[!TKT<*JYenjhVOMcsU#-F_ti?L9C/[mYPn , !   . ! a  [ O ; &?hs x 4 8 Y 9 a t  M fo8')O^3xk/a2 vb_uz[:! /7?FNU^`u3P~ s\m^()A  1 @ O t  ? V J 1 H  ~  7 k G n[ g o b 4 / C z K T D   ) zh@;%XQ&n5H'Kz>  "8HQIC)   G,r`e~ hl0!jmL >  $ 2 r i Y U m  . /   - < ,J[>,0FEB6+;=N (:Oc{O,@t+.c  # (  $ ] v m M A a i m 7 C p  9wE9c!~60CewhO%OwOi<=_[1LcL>u ;?N*Ro{_  t * + } U    I\:vO\]Ril@q8{4.;w#103.' Ks_RC@;Kb<HI2_s.`5uQR L HwoQpWC3KD"u%T;4>e}p"!ms!k}gQ9& hNBB?805p|P-9.fP`vfrasp*3X?k|`kia7_n""%p*[h{Yi A`4e47<,SN:R3IO(g]4Lyk-Wx5DR^UXkkdk=HWP;)m/0bM X 3 v \ / Arw~MtRT2kZw6j'Lh;UtT-Q&p'89k  s>s&* 0 >   ! M Q [ l ( + t S BD> 4GK6$ ;E  S W dH\#n dIL|"C=v) $.Phe-s+q-'x8"<ph c Osf.*Ih(BhnNsnfSHR`ZTYm}CU}g4_ k " _VZ.+AS;RprfYlhD|L8 :R N g4 ~ C!" ! | \!!"#$#7#-"""""##8#5#$#)#@#[#w###^""q!!J &!>] &AF*>@>jt9<*VB=38;'oj:AF_KjW.X>  ? >&N!V#$' )+u--H-.,++P*Y)e((F(k()*8*+o+,-(-----o-{--..R.S.8.=.S.i.{...+-,,O++%**0)k(1' %k#!sXo  & 2d^|qv+;sud s@t FzW S >u9k! "$&(+-+/l14\6I78087$6[5n433'33H345K5678Z99s99999:#:p::::::;;2::t9}876544310/.S,;)&#z WvI+RD06> Z hm0"Ql,qE 7 :  <knc4"%9( *,.8/136Y8:=?oA,BCC B$Ai@t?w>===>{?6@7A"B8CwDEF:FFFFFFFFFFGG]GGH/GGwFYEFCBA1@>=<.;:9"752/,)'8$" 2K A > )'K'9* AKgIbF0"T #u&)},0F3f679 :;H8T530.9+*3('&%&#V!Tr8nBV # &!1!#&E(+.148Q<?AMBCEH:KM\OPR%T7VWXX W!V\UfTmSSSKSTV WwXY[d\u]U]r]g\\\[[v[*[ZZ[2[\R]]^^]f\[ZYXWUT RTPOPMKIFCA?=\;8v6E4r3&10.,*(&$# qm2 zX|8-*(%$#$ $%&S(3)+.71)479<@jD+HJLMO>QCSVuXUYZ\*]_a adaV`o_^^$]]^8^_a bccdeBeeeFddccbbmbMb'bYbcIddefTff&eedVcbb`_U^\[YWUJRPGN L IGIDBT@B>=;98 53f1 .-*'$ l= Y 69Tx8x5A20/.../12466b8;>A~D2G^KNRITV'W9XZ]^`Aa!b.c]dfgFggVfeeKe eTefFfghiEiij$jiii:hggXfffkfkfZffghqiHj5jkjjiinhhhgRffe\dcea_,\ZXVTR|P>N%L6JlHFEC)A%><1975P2/, (.$!hA> ~ Q"CB?H<:989 9::@;3<>@CrFUHKNQUY0\]_/`:acMdf?gCghijklmll$kkykl7lmemn}o,ooooo>nn_mm5llkkIk&kkk&kklmun0novoooPnnon mmQllfl0kkjigfd\ba`^:\fZyXVTRPNLJ9GDBD?=|:}62/Z+(K$| 8Y@2^ ) w+mKHyF DCFBBBCDF5HJlLO$Q6SVZ,]`GbycefgDhMiWj:kkl{m'mnoVouo(nnHnknogopqqrrryrrr]qqzppVonn7mmmmmnVno|ppqBqqq}q)pp@ooqon}n#mmn mm,l!kjiVhgfedcby`^\ZXVTcQOTLJGDA>:t63 /9+&""XJ & TROMMLLMMNwOQTtuvLvvmvuqttsrr*qqqpq9qlqqrNrs-ssssxsrr qqKpppGp)pGpfpppzpppqq ppponmlj]hfeEcb`=][vXVS OLH3D@;73/+'#TbaK_^^^ ^q^n^^_y`bc d"eoghjl0msnopq!qrrss`sssssrs:z6!2-)}% fgedd ccd9dccddenf,gtDtt tttuvvuuu>tttt`ssbrrrhr2qqxqppNpoooop*pqzrGs9t7u"vvvvvv3uu#tzsssDsrqqp|oomkigec_\YGUQMWHBoMo nnnZn@nmmlllmsnno$oprs^tt>ssstsss1srrrGqq:pp7pp p1plppqtrrsstt{ttttuuLuuuuv?vwea]tuuOuMutttt6sstguukuvvwNwxwwutsrq_on@lkigeZ==>>?@TB+DHXKP SW\`Idh>knps1uOvwxxyymxwvuttCsrqqqppAooOnmqr4sstuuu~uuvHvvvvv{vvvufthrVoli$eHa]wY TPM IFCA>y<:98889:iTAEIMRX1]c_hCmpt#vKxu<:97g67889M9;Y=|@D?H,KP%TYb^GbfyimortPuv_w/wxww3v u)trss?r$q$pp\ooo?nnMp3pqrs.stNttu5uuuwu>u uu~ts|rLolhd`\W_R_MI.EB$?G<9753221123>5.76:=BeFLHR Xk^dimr*uwxyyzGyIx*u0qm%hlb\VIOICa>:86T4310,//0123D469=@DHMRXQ]Iaeiillpr1t tuvvvv4u#tAs}srbq>p5oooWo5onnnopWqqrirssDsttssstst\sr3pmjieaJ\MW-QL%G$B|>;85310/%.Z--j---/1:4&6;/?oE(KHRX^diorv wypyz1xwtFpke_OXQJDx=942g0.-f,u+M*+ +,-.}/147,:> BGILRX<]:afjmphrsttuuuQthsrr=qpounnnonnnmRmnoplq%qqqrvrrrrs$sss3qnolmhc>^cXRLFsA<8520,.v,,4+@**$))~))z*\+U-/37}=cCK%R_YS`)ekp t@vtxxybxvsoic[TMF?*833%.,s*-))''|&&''(4()*,.037;@FM,SCX]cgl%oqrst4uu>u8tsrrdqpoznnnoOofool_lmnohppzppq-qiq;q0qrUrrrpnjf`[oU2NGA;6360 .;,C+>*c*))5(((W(''')f*-126

FV]=dj/oruuvOtsplg7alZrSLCD>7]2.+)'&^%%%%%%_%C%+%&M'|(')+015X:%52/-<*)F(B''W&&`%%B$$$$%&#)Z-4;CSJrQ?X=^e;imnp5pqrHs(ssssrr,q{ppqNrrrsmumm mmmmmmcml{lkl\m\nUonnxkh&a[jSKC?:3~,('#"!L!]!s"&"#L#v#_#s###~#*""""#$^'+X18s@wHTP?X5_#f7jnopp omkhe`;[UOI C>96 2o/,L*7((='}'&&5%$$$$t%/%i(+2|96@H,O7VS\chil[moRopRpqxqrqqqqpp,pLpqrVrsnnmmmmm2llkkhkbl9monoXnnkg`YQI2@x70~) $! ry - !""G":"V"l""u" !!~!!{"/"%6(b.:4^;C@JRX`4eqikmgm1mIlkhea^{YSMIGA<841'-C*('&&&%%$$$#$$'*i07W?FcMT[YbRgUkm?nootoppwppppSp oodop?qFqrsBonnGnnmlll>kuk5kulnoJpFoolh<`YQDH?6/( # N !u!"""9"N"p"N!!v!>!^!S!"%$A&,618z>E!KQX^bemghiini`gffcaU]GX@QK7E?W:62-*P'&%%% $$##Z#_#k$$&9)F/P5=dDLSaZa&fYjlnnonoBooooookoAnoopq5qrponnPn mhllEkkjk[lnoppypim*haYQ H? 6.'"~&z !"""r"o"""""!!_!n!D!!#6%*L/:5 :O?E5JQVi[&^9a5c ef=ggg\edta\V&OIB=73-*8'(%$$$##0""m"h"q""$'A,3;BJ&QX_eOj8l|ninnninnoPowovoSoUoFnnoXp7pqerqPpnnKmml`kkzjjk5lnoqppym2haYQH?5.'"HN !"""###6#"")" "&!"!#%*9.38mlkkWkj6j>jlnfopp>plh`AXP%GA>P5S-&"~ !"M"""##-#""u"""""$&J*Q.26k9=BFKORVYN]9adghhhfcp]WW'OHA;5_/2*'8%$$J##B"!!"  :!c"'k-5%9=AEJjN)QSWU[`4dgi%i+ige_XQ5IC ZAFJfMPSlV[@`#dgj6jtk/hf` YQJ%C<*6R/+(f'w&R%%s$#"!! \ g"'/w6>FN|Vq]ldilmBmmmnoGoooAooonnQnoDpFq!rpom9kjiiUiEhiijl|mnnmjf{_RXPOG">y5.'# PY ! !s!""""l"#$&x'*.3j8;_=V>@CG JN%QSW[``e h+jk0ki)f_YQJB;6/+(w'&&8%%$"!!4 | t"a&.5>EMU\dHilmnGnnonoooo4ojonnnn4noTpqrp0nlktj;ii5i hhiEMU\dRi6mmnn@noooogooEoinnnbnoprq]onl_k&jiiihhhik0lFm,lm(jh#bJ\UTEKC(:3N+&"3 Pr. - !"!!!!"$X&(+/5:@DGIKMPiRU#WHY;\_d+hbkmQm lif*_XPI A:4.*('w&&@%% $#"!Q g = "'?.5=EMU\d2ilmnZnnpnoRoso/no%oao nnodp9qrpomlMk;jFiiei-hhihiVj]kZl'l!l{jhc^yVNF=6%.) #!KQdb G !/!*!"%'I*.38?*EJNQ'SUWZ[]]^`dgk9mCnmmjf_X OG@9d3-*'' &9%%D$#"!!" < #(+/6>FVNU\dOilmOmmymn9nnnnYnonnoopr+suonmlQkbjj%iiYhh7hhijsk.kKkji0d`lY+QvH@d81+3%"FlS !#T&H)-1<6=8D1K@PUX[]_ac(d.e1fikn*oxp\nmie8^VNF?z8F2,)'#&%%7$#""!7 !e!$)(07?MFNjV-]$dpilm!mm mOmnn%mmn nnno[p=q>rsonmlkk1=}| H "$0'+Y0/5;nB(ItPV\l_bdfh}ijklmo"pq#qoomhc\UTLE=61&+(&T%$$#k"!!-  ` !!#" "&*29@HO|W!]diQllm l}llm/m,llmmnJnoVpJqTrsofnmm lQkkmjj;ih9gghi8iijiixfc]4VAMF >770*+%! #RDD< i "u$)L-358?FNSV \bdehjln !#"$N(.$570+w&$""&!D 6nZ^  !"%6*4/7Z>PELS[japg8jlal kqjWj jEj&iiij|klmnopxq^rynnvnn~nTn-mmlkjtiiiiiQhhiAihgxc:^tWQsJD=Z6/)&z#|"i!% )  J g!!X#&,2:UATHP_W_f"komp pqrms7ssshsssrqqn}jc] TLD=6#.)%M#p!!0 g f/AX ! !#&,C259@rGNU]bgjLl+kjiiiiiji2ijjklmno[ppqnno+orovo]nnmlkkjjjii/i$i}j$ihea2[OUNHA:4 -);%f#!!H [  T u!B!$-'. 4? ? (!P"B%#(.h4;BIPW^chjl k_jzieiAiyi!hhijklmnogopRpno'opzppp,oo4n3m)lblkkjjijjj;ifc^YnSJMvG@992t-W(&1#"!Z _ !"T%=)(/6>EMT[c\hlnpNpqYquqqdq1ppppookg _XQ6IB;:r3_,'<#I! 14:U6  "H#'L+S1x7>ELSZ?`elikHlmkjiiiiJi i%j k$lpmwn;oooop4nopqqrq}q#pkon}mmllkjj,jHjjjNh%ea]dWRLOE>71,V)&$$"! !%!1"Z#&Q*18@GOQV]e"imnppTpppphpoooHoRn[mie;^WZOHA\92+&"!< +(]* # %-)Q-4x:BHOV\bgjl1llkBjijDjMiiSijklmnohoooomKnpDqrirr/qqp\onnmmlkkkk}kkBigdh`[W?QsKVD=7d1-*!(%$"""j#$( ,3:BIIQX_RfDjmnkoMoiop"poonnSmmlkhZc]`WPI#A:3,'#!YF> "k%*',18?CF@MSZ*_egil{momllBkk7kj1ijk lmnnowooo nkn#oqrs+rr>qqpxoo nn}mll;llgllTjifd_[V0PJ.Cu=62'.+(&$$1#$%).95><CK RlZ`rfjm}mn\nTnnonn^mmXllk|jGfb]W4PtIB;4-(o$="B y/!#'?*056ErLSZag jWllmem;7J0G+&$[! UvM' "|%'+/5y;BrIBOV&[a%ejf9p52/y,+)*b+*.3z:;@GNpT[ag(jl>lNllOlOlIlPl2lkjjihgecb^8YSNXG@93>.)S&="  -!h#%(,T15;AHoNTZ_dhlnpppo|nmmljjjklHlmn*n)ml)j4h5\}aejUm&owpppq9qqqqqr$r9r#qqqqrpomlgifb^ZBU}P+JEK@2<75 2 0//0H37>hDKtQWJ]sbgj!lllGkkkk{kDkjii:hhgfecT_[VQKE>83\.?*n&Y$"C""$&S(+/W3T8\=TBHNTY_cdgjnpp?qqEqp.orntm]lYkIjk'kkklkki8g|daU[aDfjsmo(p2poqLqrKrfrrsstssssRrqp nlj]fc}_?[V?Q9LFBL=:76N45629[=C I4OUIZ4_ocgjFkkkkqkWkFk4jjjiohhHgg*ed`]YU`PJ^D4>b93/#*(&'\'* +.15:P?DJ:OTY^cBfjmepqVr,qqppnmlkkJkikk-jcjigdb9^vZMTZa,ej[lnmop`qRqrYrsTttuGuRu[ttssqp~nlj)g5ci_[aVR@M_HD%@=<;<=@{CINTY^ b_eikj_i(gTfdaw]YUGPE;M TY[aCfil}mokpqr-rstu~vJvvvBuuFtis9rCpomhjgdN`t\XcSO=JnFCBB C)DHGKJlO TY(]aenhjlcmm|mTllllllokk/jiiihLgoedaM^ZVQLGB-=97p556y8n9<@FE IOSW[_Ac;fj l}npuqr&rrNrJqpoKmlkkDji#gda^[VFQL'F;CKSZ`bdvgil\nopqrsu+vFvw vvxuut,s]rJqNomjgdma)]sYU_PMUJBILHrIK NQU+Yg]aeShjm nnnnn\n>n1n-nmmOllkkjjihkg?eDci`Y\XaSNJ0F7B4?=>%>r@IADHLQ_UY\`=cbfil]n8p0qLr4rarrrqpo/ml_k~jOhfIc^[WVRLGKA;1:C&KrRvY^c ei)kmo@pr;suHvwBwwmw&vuu,tsrqp#mknhreb}_T[WT9QPO?PQTW[%^bf1ikmo ovoooo^oeoio`o$nndmmAllSkkmkjihgwe b9^KZcV9RNyJH6F>FKFfHILP4TX\X_b&dgj;lsntoqvr^rrs/srrpo@mlkiLg'cW_"YUIOICm= 60n(09UAHPEV[O_cf,iCkmoqsuPv4vvvvuu:tt.srq|omk=hf"c`]ZWVVW)XDZ]`=cfikn2opppppVp@pVpgpWp ooHnn`nmmVm lllgkjhfcB`\Y3URbPN*""|r &D2#h)).4r9>CHMRVZ^behj6kln)o@pqerrrq{ponm\kjiiiiij/jklmnojopSpqXqqr7rwrrs sssss1s9sxststuuttttt3sSqpYnm0kjiiqijjkKkl[lmannnnlnWnwno2opqmqqqponlieb] XQ@JGB91t(!Y!_S R hu$<)q.38=}BGLQcUjY]aBcf*gikmnp%pqpponmlqkyjjjkIkklvmAnKoFopIppq&qJq3ppppjpnpopqp]pdppqqvrrs]sttgtuu`utsrqphopnvmmmmnXnnoonooooyoXoVoNoppppp$o+nxlk%gd_[UOH3@80' J4f L>*d$(-s26<*ATFJ>NRVZ3]$_mad=fi#jklmmSllQkkjiiBi1i idijjk7l lmmn9nfnnn0mOlskjjiwi4hhiijjkm)n-o0pVqursattssZrqqp(oAnn5nmnn@nooqoolo{o{oao:oooHonmljidfd_[VQKE8=6T.&6W _R} 6 7`S"{&+}05:?/CGL"P SVYU\_be1fh hiUiiyhhaggggggh;hi+ijjjk3khkkbjihwfeHcbaaJaLajbAbdqf(h>jkmoqBrJsIssstsrQqpoo_nnninnoHoooooooo+o!nnmlyjrhfzd`\WSZZYYYYyY&X'WUbSQPdONNNOPRUX\^bdg~ivkelgmNm[mjllPkjjj@jfjjkakkkkkkk jj ihfda^,ZVR8M7HqC=71+s%K  xa;VX %~'"H&,),0427;>IAE1H/JKMBNOJP,PQQsR S SSRQQ PONMM$LLLL6KeJpIGFIEKDD CCEFHBJN[QaTuWZ]`cdef]ffff ee@BiCDEFBFFGgHqI3IHH+FF ECB}AQ@@H@?>=940,0&!/r < uN|2a1{k6 x0 <  )_>S:!$&()*,;-///005001 000=/.-,+**)l('3%$*"` D` #%) ,(/37 ;?BEHJLNO*OOOQNNNNNNOONN9M"<9:a9+7Q40,K't# S fa\ u$ r a/!Ma:\\x # i  u .l*)q[<   0!%)_-/246|78`8V8 7778F89P9?8765\32p1-# kN  : 9I$W?}K*4},sHb6[  DA-O*d}&=zO_H@WUcnsvfL=k+  ,M} [ H  q j .^^  3f^V hA oMhVs_ ,(( tVznd4a7m,b)*IH40+"axhexlt0;c$ CC_Wo%kM IC`i4# JEF>9tnTuVKVgVSvVlF3t\SvC=7P@3o(LRx *C#Z{S+')s?T!)(C{BeX3&q !b pcY-UoPx#a~k6I^ T1 '_b@PliI*Qb7S3P6*Vdir[k MY *D`'M(JL!wWn#B.+MHIuapSE/Af0BX&e4=+JBZTb$2Crs6 %W{,/"|I ^:~hSr B[ 'AZ@Lw }w=NNINzbNV.^t.,_4cUMdx["9Pr$x^2 V  N|T8'\eDN`@gQA@g-sXp8MNPqvD5SH >wR7c.woGSYv`3!27Sx# ~]@4VuJ) ?5rphVi 7;.Ac^|XRw $DW]ggmY'/EKA668[L>vaH[m|imsyWLG[qcM38V{zb<'.GQY\wc4[u)huW.qSH^|#=S[WRSnrI%N[O?9<^ZSsSEl] wsxqmz~pmhN:$+GpZs[h!Jxb9`>>[ntm=RXXPGJeq[1 GRLEFVmxdCfAI-y_G03@i5|&!NeuldJ+ dHFZ_^^+<FRTLFR_fT$ 7ZgVAHbtzPHuH$*lr_RH0,7h |*s5KedT3 p[T^cb_ )EW\RII`gC NodG>On_UqZ5 '"rXJQZH>Do|@,PZB)~jcfdW6RjjTBXlb?!TniP>Lo}eViO 9o0VTK.~bMO\PUr })Aj+CTD8>g]Q3$AesgPPZf[+/c~iC:S|hPUyn:*0r!hte7%q]Ydbu2]aGaHVM*?6 ^D0 )Lh{rZEP]O5BjteQJZypahvQ0IW]G&{tpa\dzaA*<k}`Wd+B2 11xJ(*Foz\53H]_D*+Gj}sZKW}sagfXkkn`9{h^Wcxh<';\lCGw-* !3* {O0>RJ509GQPE9<Rlzu_Zyibn3ZZaH!zjfotPANr{REdrB) /881(-H]UC=Kktthkx.GE3 }p__bvbURp$S) -98+'@Z[L=A\}wsp})31hTM[mk]fu   k9 2=709JUVLFMc|vo{"j_\OMVi{yf`l ke`E# *17?GRVQJBPtz~w{ z\OSOUbs|vvy mF-    #.&,;BGOUVREKjwxru #&t\S[^epy}~| \B# &IDy 6<YCdoP=`DWh+l<M(9 ? ] )  / = 6 & 0  + ! ] g C .zN5GuPge3 `tF R_vIsG),T]cHEzQ5M/  z m o ` , i   B a p \ @    $ &  I D O 9 < O _ q 6 S CG_c}Hx^*o _W9\e[C r"1  q c [ ( s 7     2 F G >  | : W O  > p )  O  . 8 , " % / U ~  a V ) 7sO@( NrR[ xLMt!JG]#w_V ( = H 3  l T A ; 4 5 5 : E C :  b 2   7 q % . G > ? 1  h m  1 '  , { @ Y  V4|oU| p[7F.'*|X(q]  U a  d "       m H , #   . R o  O ~ i ( j 1  = T v ~ ^ F 4 9 8 \  &  8 Z n  xgE51[[X<Um:bZ(vQCKlX1 v 2 D R l   a !   C } n V 6    # ; X u O  ( D J < : 9 2 3 . O * L N )  ( = ~ Y  { V7?hgRO`c` 3m @ x q  n N A t } 8 { C 6 ' %     g*W('+5B_&o , )   . 0 * * 3 Q s y   DLfBTXg"s6qb-~ys r u  %  ;  [ l N X Lz"o{ d0 ;pd`^e>>[q =  c 5 Nxf{D5oq|?E[v  _ W X F   m = 0 = R .L<0Ref}nS& 'Op}4G`]*(nG  3 W z ~  9 Q d W :  1bp 0 I =  g 5 = } HY!OV+ &3>IOXU_4hkt{T!"E]kta?]) F?)RdODd / $   / & _ H A 5 /Alu$ > A b C Z t b  H l s8*.\&`ZLiE"kdwfC&,>MQOOTRh~4YrYfW$C 6 H W   4 E 8 ; t  < s L p^ v } i ; 0 ; h 6 Q >   mG=.dp0 \"::O$0?KTNE+ K=[]z ed&mnQ @ z t ! ) n m c ` x  ; . <   % ) ~JX5 32KDHGAII%V& !6AJYne /:f0/$)c     _ } z Z K c m t = R t #uF6W~3-D#difq@v[ i<(?Xx_?a#]?6ey1CS+?UiT  } 8 7 } X  ,   /Q,rRcaTmn:Ts_3E\_Z=%H ~eSDHPfub^ (b-tXaa=s>wQ [ WzuhaG4PH^m|G20E g~h% <rP,)  <\?$f;eWUVK8) MxaJ+/"~UCLsfyn:"B2bvny)e?Fe r/HTrcMZM[}\FR]v%9TK1Z i|e`emSF03=q kp6,Yq]#f~8D<jn_  Fo[`X]*2;=3/;m r E 9 v D J*J  U @ M  3O<0o>Z4"~TaJ})v3ZB_yT+OX9MK TN  $ 7 k6poD!Uf7g  jD*F_5Zhj6J|w'zan.[2|1v>(2}q/z2Hb . " krMwn%=p6T`c2oFp # 5G]F)IC! Iwzs}}8P$y @ bokbm !"/"_"!!!t!J!!K!""#""""""""~""""w"`"A"""0"g"""# #Q#_#O""3!* *+63 7Y6~~)2|Ws++@L2?ru_d&"S\.F%h ?G!#f%l'*+,--.,,,--0-;-r-.Y..Q.--W-2----1-;-F-]-`-P-(,,,-/-]-------U,++)(&%(# 'zks P  7}G|FX-9q{hBwBhR4r J .B>!$#&b(*-1/2 46S7777778#888"8*889888[898T889!9a999999~9A9+9=9z9999:998765^320/*-L+)O&# mqs~x?_ $FYsZ. 45;w   _1~ ! :A!!#&)+,.0358):DECEF F=;G976420(-*(&w$A"  5g h zu!BEY YB$K_W wW+ #x&7(+.14M57q9(;>K@CMEGkIKWLLM:MJMMMMM,M,MNkNOJOOPJPQnQR4RMRZR8R(QQQ;PQQ5QR)RS S_SSvSR POGMKIGTE+CBA?=;]864^2R0.+*f)*(&%># v4[5&} jQE B;U6t W"[${&),i.14|7;=?ABkDLFIL MO|Q STUVJVVVVVVgV:VW;X8XYwYZ4Z[[n[}[[K[ZZlZYY?XY)YsZZ[u\%\]D]^]U\[ZYMWUS6PNLKHFDZBM@><:8r6g43E20.,$)'M%j#!aiv &3V)*I&$/!!Q !["F$F&S(*,/147: <@C~G IKLLbMPRU2WXMYZ\^A_H_p__<^^^^^_S`+a/bbc cIcccccabbbaa1``e`#`a`abTc/ddeef.ee)d2cmb:`_]3[WYWUS=PNLK-I1FDBz@>=l;97c42`a2b]cdeeeyddldcdCdepfDggh\hhhhhSggg fheeIddded6d}defg]h'hij@jjBiiShhugfedcb3`K][YWV$TMRVP_NxLJI4GFE?B@{=;E8642v0-t*z'$!=>,V 'F>;a866l5679;=?BDGzILCNRUX[y] ^X_h`bdEetfmg&hhjjkckHkjtiiijKjkl]mmnnon]n:mmZllCkjjii=hhhi,ijkBklmBmnsnnn\n mmmm'llkjijgecba@_^W\[YnWUSQYNLUIFD%Aq?=:8S5A2G.+&"T v^sHfE1BA@@5ABJD@EGILNePRTWZ]`FbIc{defghijnk#kl]mmmmmm+llmmn0no~p ppqGq#pp_oo-nmll,kkSkkpponmXkihfMdc(a^\iZ9XUUSO&JEA|=8q3/*&"*a5_^]]]^_9`2ab+ccdefh&ikRlmnppqrrKrursNssssos4rrrrZr*qqqr=rst\tuuvutsrqppnnmwmtmmn8nqnnoRoooooppppsthttttVtPsserMqonAlljiJg@e@c)am_7\Yk940|,($ eddMcccdgdeOefgfghaijlFm~noprrsesst&ttu&uuttVsssshs2rrrspt tuuvxvvutsrqponnmmmnGnnno o7oIoQoBo-o&o5oYokooppApcpppqqqXqrstquu&uBu/uIu%tt7sor\qEpAonmlj~hg4e\c`\XTT5PJLHD?b;7=3o/+'k"iii=ii iiDiaiiiijKjl!mHntodp[qrstjtuu|uv;vxvvvv-uufuttt1ssttusvvwwkwVwvBuOt srq1pdomnnKnanoobo|ooo|oaoDo!nnnoo*o_oopp3pRpfpip|ppq?r stUu`v vvw vvvvuEtUserrqSp7omlYjigd`]YVS*NJYFB;>:61,l kkk|kak7kkkjkjkCl m8n%oopr2sGttqtu!uuvv@vvvv'uufutt(sssttuWuv{vw:w+vvKutsrrQqpppp6ppq4q5q,pppp\p"ooooooopp#ooooooop(pqstLumvxwwwwwRw vcuttsarqponmmMkifc`^m[XUTOPxLIvEA<7n)nmmmmHllllulYl-lm_nxo.opqrstFtjttuuFufuuv vuu^ttttsssst=tu5uv!vsvvvvguutwtssjrrr:rkrsXsssps)rrrEqq{qppppppprpooZonnoEopgqSrstv9w%wx6xkx:xww0vuuGttsrr!q^ppnlj_gf=d6a^YZWTQ MHBooopo4nn`n mmmm}mnnopQpqrsttKt(t tssssssssosryqqeqq/qBqqr%rs-statucuuunutuuutt{t_tuuuuu|u tthsslrrBqq-ppppoo4nnmmLmm_mnopqs.tuvwxwwwww?vvXuuZttlss9rqpo\mkjighdb__a\YVnQLqbqqq2pp%oooo@oDolppqqrs_t&tttt@ssrsrrLrqqqqpp oHnn\nanUnno$opqrstuu7u?u9uluuvuuuv>vvvvvguuutssNrqq*ppppjonmm$lRkkakklmop`qsPtv=w(wwx wxx www2vvKuu~ttJs`rtqIonmlljhfDdba_1[$Vkrrsrr4qqqOqDq!qNqrHrsttuZuv-uutts=rqqploonbmlljii3hhhhi)ik2lnpqAr;rst1tuv%vtvvwwDwwwwGvv)utt,sgrqpMo9n\mmm^lkjdiBh4gffgghjlEn"oqsvtuvCvvw-wpwwwwvvZvutsrqHpo-ndmmFlbk!iphfHdpa?]Bst6trtwvltxrvp9n:kifc`{][YWVSPNMLLL4LHLFM~OQTXt\'`UdhlpCsuxyz.z{C{j{{"zoxw{udsupmyiie`]ZW$TQO(LKJJkJJIJ(JK_MbOSFVZ^Hapdgnj_lnp qrstfu:uvdvvuu ss.rqqRpp3ooJnn'mmkrsCstu%uvvQvw/wxfxxxyymyxwvBtroljVgd~`]2YVTR5OL]IGmFEEEDDEGJMQUZT_%d imiqtwGxz+z{W{`{zz5xwvt*qnj;eR`$[ VROMJGEqD/BBBBBC3CE;GPJNRVZ^gaehk4lnpqfrostqu6uuuu%t5ss%rqq@pp=ooennnQmq^rrstuCuvvavwGwwwRw/wwwvut r okheba^YUR OLJRGDBc@z??>>>> =>@CFJNiSOX^Fchmquw9y4yzz{%zjyxw=tqnqj e[_YTNK GEBz@>=P<;;N@CTFK/O[SW[`$cgijkmTnpKqrsttttssRrrJqppXoooLonnnDppqrstu$uuv`vvvvv!vvqvv_u@txrp l]hda \X~SNKGEDB@L=v;89j887766u79Dm;97?5U322[21\101257;?ODJQXg^dio'rv\x'zz{ :&75:3b16/.3-- ,, ++4+,.0J37A=CGJQX_fehkyptRvyyzwy-wsogi~c]>V=NF@E951//,+l*>)))***+,4-w.1737;A0FlLQW!\x`dgjlopqr[s6stss+rsGr`qoMkf|az[UOI^C?<894=2&0.-+***3*))((}()+-06s)T((`(=(2("''v&&g&&'C)~+06Z=E,)(4&&V&&9&-&%&&%&"&'(+ -27>EkLSY_dJi lboq>rs~tsu7vRvveuvutfsurqq}qrzrsGsn/noop8pcp=pXp,oonmn noGo.ojnBlid]VNF?7]11+'o$w##z$$v$%B%n%%%%%6$$4$/#%&).4;CKTV] dkp'stutcroCkme`ZQSLE6>925B1., *('N&&&p&A& %%%Z%]&&(f*o.3:A~HPSW]xbgknprrs|t&u>uuttRssr\qq~qrsCstCooop"pPp1oooenmmlmrn\nnnmkg2b6ZSSJB:2,'#$!!!!v"Q"###$$)$T$H$##J#C##$'+h17?GPX`glWpqs2r4qmjea\ VYOHB<852A/ ,l)(S';&&&Q&%%d%$%K%'(,i07>EEMdTr[WafjnBoqLqrrms@ssrrr"qqJppqEr=rsYspppp|pUooUo nmll)l\m/nEnno mXk5f`XPG?76/M)$ !o !"""|"""##"""c"]""# %(.G3;@BJRZPagel/nponl%i^ega]@XSLFP@\;741 -*(x&&i%%%V% $$?$$N$q%&*B.[4;CuKRhY_ej+noqqq>q;qrqqsqppp]oopqrBrsjrKqq'ppMonnomllNklrmnooomkde_WOyFx=5-(B# { !e!"""%"9"""x"-""&!"i"$'K,>1=7>UEzLSSZ`/e6gjpjkibgdb[_ [W'QKD?:62/*(.&%b$$$8##{#>##g#$%v(n, 2^9@HP.W^4dikmoqpppeppppXpoooogoop qqr/rsrqpp?oUnmmel_kklmoMpSp.phn>kye_mWNyEF<*4,,<&! " !w!"1"'""""f""I!!!!!!#%*A.4<9@F(LZRXp]c`}ce4ftfedcxaN_J[@VZOIC>F9z4{0+\(%p$###'""a"!"4"T##z%(.5l=EMeUF\DcZhnm=oFppUpooooooQo=oxooqoiopqkqrtlsCrqpon*mmkkkln%oppppn?k,d^VSMD;_3]+~&Y! h !"L""z"p"i"""]"""J""B"<#& *-27O<`AFLQV;Y]_ac/dde!cb_'ZTNeGA;6514+(m%r$`#e#=""~!!s!,!F!?!!#%+U1:2BJ&R?Yafkn\poo~oooEoLo9o oozoooopqLqruLsrkqonmmlkk5kclnoqppYpxmj`c]WTLlCL:2(*o%!` #  !")"d"J"M"P"k"l".""K""""$<&f*-15Q9F=bBG9LP#S|WZc]`ceMff1ec_sY@RKE)>8i2,)%$###"!!! > l '!#3(4.Y6>FNV^TdUj lnnnnGnSnnnnno,ooowop_pqr:utripon;mVll k%jklEmnpoom iFbu[SKB!91Q)%5!O P^ !)!!!!!""!!"k##,##%(+/]259!"!N!!!!!"b##|$7$&)-t14#68;t?0CHKNREV:Z_wcfi=ikjgd^WPHA;5.*k'5&^%f%+$$#!! l B $*U29AJR Z/`gk%mnnQmmmn nmmn#nnnnoOopqumsqpnml.khjjij1k_lmonnkg`Z0QIl@70k)$ gz X !!.!=AEILLOS6W$[`@dgj6jljhe]_XdPxIB ;+5C.*'&&%%m$#"!!I  $)19fAIQY`gknno nnvnanQn!mmmnDng@BDG ILORUY^bKfilllif_|XQILA:5#.*('&&&%$#"":!!N !/!g$*29{AIQZ5aJhlp ppp[p=ooonenn nVnAnQnuo:p;qssq`on%lkkgjjj5jj4kl3mNnFn8nvlXic^-VmNSE=5-(#x!6  z !!!_"#%}(l+S/5:?wBEGILNnPS4UX\`dJhkmmmjbf_XPIA:r4.k*(''Y'Y'&Q%a$H#L"!!!!!%*2:BKJwRZaim@pqqyppp\ooUnn,nn_nRnnoprjsrTpornllkkYkjjIj>jklmmn4ljoez`vY"QiH@i80+%g"TcDVo b !g"n$&*.3&8?DHLOSQSUWY[]`dEgkmoonk'f_XPH@93-*%''''&%%$ #5"""!"Y#('4,4n;CKS[bimuppqSppp$oonTmmn#n:nnpq@rtqpU]cjmppq9ppYoounmmsmPmmno*pGqsNtq/po mm:llhl kjj'ij jk~l+lm4lkhOd^6WkO60*'%$###&""!!z!"""$',2:oAIPW_ek3mp+ponnnFmmlKkklmCnEo.pWqst}pooJnmmm/lljjiijjjk'llAlljphb]yVZOxH @9L1,G'#$]! gj  !H!#&o+t0{6iue`zZ SLE>(60M*',$" a !"$/'$,2\9c@GNfU]xci6l:np qrt tuvvvvyuu3s pjdd[SdJB;3M-U'$"l" !J! m e q !H"V"%)T/6n>#ELLgSZafk2ln^mm/lkkkjjUj|jklmnpqr sVppMooooo*nnPmlrkxjjjjjjkOklkjofc]xWQ]JCR;5.*'$"!s | !%!`")"$(*.4-;BkIPW_qeEjZlooqqrst!tPtu,uKtt5qoi.bZ QIAj91+&a#!w!" h L ' : & D e !s"#'e+2f9'@GNU\(bg!jl+mZlkjjjjiij$jklmop pqrqppppxp6ooCn|m\lQkkqkek`jjkkll&kfhe`[UOQH @92-)v&#"i! !W!~"["%)9/6$=DKSYaKfkUmjoeppqvr7rrrspsss.rpmg}`XPH@S80*%B" n jog B!!#%q).p5f<9C|JoQX^dgjkllk$jiiidi,i;ijlm1nEobpGq qrPq q8qCqq{qApp2ognOmDll:lkkLjkkl|ldkigc_pYSLE>72=-)&P$}"",!"+"8#;#'+(18@ G3N%UR[bgkm=no}p;pqq;qTq]qqqq[qBokf_XPH@81 +%~" C(\  "#B%(Z-2u9x@>G4NT_Z``ehkl3ll1kRj_jj ini/i_jVkQlmnopq qVqq@qrr}rr_qq'pKo1n!mKlllpkkjkl;lvlljifkc)^ XRKRDA="61+-)7&$#"# #$C%<(-/4"; BIQX.^xdiAlmnoWppLppmpQp9pTpgppom{jid^WPHA 91+%" %^rcZ "$'+*0m6F=ZDJQwW]b}g.ilGlm-lskjjjYiiJijklnoppq&qq.oqqrrrr=qpoon;mmmGlukkklsllkkhfa]WPJECs=+72.<+~('L%%%&(+0b7Q>ELSZ`fjmmnnooop$ooomoMo1oHnnFkid^X,QJ9B;3-'$! J n "K$'u+W/O4;BHNUWZ`ydhkNm{mnmHlkktkjij k/lmnD?x:r631/D.C-(.-/[3`8>DKR=X_d;i)kmn%n]nnKnnnn{mm l\kkdji fc^YTXN&G@n92-{)&'#!m  "3$'8*.38?6EL5R^W]Vaf,iFlndooonnsmlkjjRjklnm'n!no*nnbmkei>knpsqqqqqrqqqquqpoooooo!nmDlGjg6b^Z UfPeK'F@<9]7^5 323_4Y8;sBHNT!Ye^:c~gkmo,o$o!nn;mmmlkkjgjiihgda]YTOaIB<62-E*U''&(9)-n05o:@FLRW]a?ehkmpqqq@ppKonmlkZkkRklkkkoji%gzdaWG\afjmoIpq.r4rssttt'sss rrrqq*oo*mkhea^`ZVvQMHECA@y?@xAnDHNPSX]afTimnp ooo nn=mmIlkjjBij j/ihfdl`]YTO1IdCF<72/,,, -/_3 6;AGMS=X]Haeqi)knRoqtrrbqqqpfoanlkk|kkkjj hgBdb^\ZNU!Z`ecilnoq/r3ssttOttttLt&sssQr~qPpo@mk{heWb@^[MWERNJHFFYEGHJKOSX]beilCnp!q@q#ppooJnnjmlkk.jkkIkji$gwdbx_[ZVGPJD?1:>7r44^356:K>CI8OT^X]ame[htkmopr$rrrSrqponam"l"kkujigf'ca+]YU/PvFMT{[Y`f}jm n}pgqrssttu*uuuuxu>u tsrrq#p>n|lDiMfc`] YTQNLyL#KMBNR#UY]bfPimopqrrrDqlppVooknmll2kl$lwllVkWj>hnfdba\WRL/G"Bk?<<;+uuuuuu6tss@rqpnlij-gea^iZW.TRfQQS(TX+[a_bfimoqmrsTsssdrqqIpp_oo&n+m{m1mtmmmm3lkXjhfvbr]XSOtK7HUEDyC[DmEIPMCRUWS[_jbMehik*m&op-qwr3rrsrrqqonSll jig?d,_\WrRLGDAj;e2:COKPRAYg^cfjldnpBqstuuWvvIvvjv>uuKtt2ssMriqo&m[k.ifdc`]t[XX:WYp[&^%a'dzgjvmp(rrstntktt'ss$rr qq+ppo!nnDnnnnnnWmmlFjgac_b[PWSPNLKvLOMQTYO]x`cf.hk)m2nopr rs7s1sFsrrq#on*lkj h$d~`eZUP.JC=60H(19GA,H\OU[_cfilnpWr.sZtotuzuuruttnt.ssrqpfnm k1hfdtb+``^{]]^`=bejhRjm^oqstyuttt>ssLrrQqqqptooRo)oqopp2p ooonmxjh0daa^ZX UTS6>UELRW\c` dgjmAoq.rstfttt_t>t0tAt8t-srqp|nm1k;iUgfCe4ccWcd-ecg{ikmoqsuuvJv5vu|tts rlqqq5pp4oopwqqr,rKrqrPr]qpoligd-a8^\\ [[]O_bHdfhj3kYlmsnCopqr2rs-ssFsrqpnnlj)h?d`ZTvME>6Y.'!C`&&-&4(;XAH]MR_Vx[_BcNfliek|mopq=qqrr}ssmss;rqpoZml#jcih-ggffgqhujkmFnp%qs7t[tuuv uu&t2s$rMqqqRqpppqrr[sAsttJt,t7ss0qomrIrss>rqqpnmljj.jiiijhk:lwmnopSqprss0st5tunmlRk+jrj[j:jijojkrl\mEmnYnoEop9pdppq[qrrrrqrhrdr7rqr/rsDt&tu$u"uVuquuXtsrq onmWll:l=l>l|llmZmn[nn9mmmnno0op:p#ooIonmjgc`H[WDPJ8B,:,1)i! Tf $,t>"w',16*:?hDIsMQUpY\_b/d:fyhklnootogBEIMrPSW2Z^QahcQdefghKh$ggDg!g!ffffrfffff5eeeded2c%a`A^]}\WZZAYZlZ\][_6a c^eh`jl:noNp{qqqr qq5ppOpoogonnooQoqoWnnnmm]m;ll|k3ipgeEc `]DYTP%JE?92+$Hv } C & <)p"&+@/]36_9=AwEHzKOS|W Y[z\^2_@`&`B`__` `__T^^^^^~]\\\\;[dZRXW5USR)PPOHNO/OQpSUhWZ^1a]d$f9h\ik}lmnnPnmmVmlllldlslllllll(krjj5ii-hec?`-]ZW}SIOJE,?:k4.("j/ v # |Ft~  }#'+.[159=|ADHULOQS TUVW(W2WWHWWWW VEUUyU=TSRR~R+QQPNMK|IHfFEE"EF}HKIL~ORhVY\_1acfgi%ijjjxj3jijj*j\jjjjjjj)iahfggfWdb_w\tXUQMHD`?z:G4/)$k>i 'aC'i v!#$'#*.2r69|<@BEGrIIJK:KNK(KRKKKKhJIIUHH\GFEE_DDKCVA@?Y>=;;=:;o?ADZGKNQTtWcY\^`abbc$bbccxcdPdpdgdHdsdudZcban`_^~\ YaURNJF:A=844.)t$gu W@kg i y .#='<+C.147&9<>?@@0@???@J@^@3?? >j=<;:99,8765|421u0o/O../I0D2#368;?IBF,I+LKO!QT@VX YZZnZ}Z[@[\\\\\a\\\\![:YYWtUoROLHDX?h:\51-(#,t MQf/t]cI7f n V{AG!$'*;,.c0o234444M4%4%414:46433h211//.)-},+j)(R&%6$""V""#%'k),4/a26E9<:e61,($X  F8 T v  @r|kW*-w'uE(sLe$)'`!5GzaK-0 x3`7K&c|waB"h,W; C`Z/u1(]a>gDs`s_ 0?;fs"79fIpI4%4On}yxfF.262[|v3A4Ux?b[\[cVr!(kOI>Zc5"J6C/{IjIzUGSkget Z!lNvl7FK$EbX:Q2g`,(u<V*5#GdA|gLNJK{ zo}}c/dadCuQC\;|(h9&`hGXzqA*$]hA^:ZN $ _}ymLi_ U  Hp &>2|^>" '=T&c g{sz'K19RDBm[qG@5Hk4Ja/ rH>#VLJxYt1=\m1  2j:C7~nP(L:4 t6&p/C`1A\>Boyy.FOKN|dQ\6h6( {n\:rrjtvKCYx$/ |eS78zt2y8+A\@W'jKgI>Ca}+v_w7TUSrwE6VN"IT6^)~`baxQ* 6>Z "( lI4*Cl|H&-U 1 alfbuC?,Bf[ yYTw )Pbdkhm[,0JND<@HkNE\Ogt.qpvoUROd}jL>-7Tuq`alhlt -k /^}  -jsY0lMEZvz<Xc_YYprM'S_SFCKl\\n[Kqf{qxys|tnqjl}`PJ=CYxb~P^(Jva;_9:Zkoh2JWYSNRip\5 #LWQLPaweF`CM3&wU7")7[@t)Qanf`I*eEE\a_b#:HRPKIT^fU%:]k]JPhz}VInO*/qzcNB.2@o Di7F`cV5 nVR`dab0EPUPII`eA !OrjOESrfVkcC  #{aQS^UXf"> G )O^H"#xgbc_U8QijVEXjaA#UrpXDQq~bN_U!J~2XVI(iRP[S_ A Fv )?QE19dXL0(GkylTQYg^1 /eqLBVv\FPzpC8<y#iud4 {v_V[Xmt1(^`LfFRI&:2 X@, -Ok~tYBM\Q9Ep|lZQZt{h]h~^;OVX<}utuiabseD5N{d_n.F6   /-q@" )Ep|[1-D[aF,0Nq{cPXtdkq^ligQ'wkeajwY>Or~QT324*vG'  AVK3-7GTQF=CXqz`Vvmfr1XVW<|xjgr]HPs[Ih ""pB(  "1982,2J]WHCPozkxzxlo,B>/ zyk^]Xdl[Qh  Q+   +67-,D\^PCGa~}zvw !)*yeZZhuznry  e4  ,973>MYZRMTg{|y sb[T^p{{ je_B "'08?GTZWPHSr~ |`MMO^p~  lG/ &3,*9?DQZ]WJMfuv}wy  "q[LPWeptrpr{~ |ZB&KIy 48T@\nN8\BYr5  G~G%+ 6 _ *  3 A 4 %  B ` A S g F 6K.>nYec/_uL  R`|GpD'(T^TC@xV:WM  y h k ] " V   A ] l [ @  $ & '  U  _J : ; R g z B L ::\aIzU-s ]U:^cVB m( z v  f ' h ,    * 8 I I A  }  ? X I '  H _ . 9 2 ) - < d ` O  7vUC'! PtS] zHQpC>]!zi] 9 N R B 3  f S = 3 - 4 = H S M A  j 4  3 r ( , H  h m a  ) ] g  5 -  . y < \ \3}pUv`:H0(+\)n\ U d  } , z    p J - $   , R s V q / ` !  ? Z | k S ; : 8 \   8 a s  veC63__Y;W s?f`/}VGNlX2  q 2  7 Z u " 5 _    1 l s Y 5    & D f P 5 U Z I H D 4 - ) K  > >    ' D Y } U38ff![Wbe_{2k 8 z v p  m M ) 4 V L H '     d+yR$$'3Ehi  4 5 "  2 4 , $ ' . I i  y  } >HbDV`k-|/p^)|wn m i  #  @  @ { U i / sD}%n~T$Fz ][\oNVs~ 0  b 2 HubJ:r#o~;>Qm  V O U G    w E E ^ u D:}8 6Of~jzlP ,Uiz4Ibc4 'f8  J y   ; M a V < "6 ! in . v @ 7 g 7 ; r Lk -nu, :OYP]4ans~V &F`q{~_Gk8E1?J3/[ 6 ,  1 ! Z F @ ; ,Lqt% < @ c F [ q [  A ]} U5-"NAlh4kJ'sfrlI)"6DOTTRSK^t5`_IUD#J  - E ^ / = /  9  t  ; t Q ub q x k : / 8 c . { E 3  w pM`(/}nEAY-'+BSRA8& GF[XpX_( uxP 7 r o  1 u o d b x $ = 0 > !  % % s@N+(3EfO^Y?LD[//CNU`n.|34s{oV:!1X     b   ^ O m y x > Q w k>.K}7WP]8{f9Pt;sLmC&7MbzgMt8Q*}HUq-E_-7M~`J  | > B  c  -   %oG!a<a}s'nSY*h3HEVYL,s8jWLS^u]j<pY{9Im<m5rV _ b_|\=(JHLcn4;kHZF7 .[kBV) zlWNQRD. DrpeB+ lO3B{oyg::{+\t2a@}8] p/H!RJ&0S%$i<&8W`u&G<c'Hqgjr}i:VQgvMlm1#OlU& l?KCt|h ,InJD+_23@N8, }>J B j } Y 7  R ! h V k 'w yU$\A\p-Hv!j,RG g[0U_9W88< [ E * OhQX+ R ZY1S\ tF6RW' G4h09y\r'N'u/tG2$>z.|==Y(v{e IWi`9 o .?\W/`M=ISm7p$=N xQEO;s M{~{-;E qrT a 9L*6j !K!!!!"@"#8#p#z#X#O#U#d#z#######M""v"!!!!!!""X"""""!% 7+" - f ~"s#,<%wG`x-ER=N z$ <3cs>>(y  %^> #s%'L(*+F, ,--d-.[./J/B/..d.:..-. .#.6.L.2---H,,,L,;,f,,,--d---3,++5)(&$" 0Yp)}V* |   8Pf BX(0vzEv]`J ' q _# X"B$z'Z*-g/1;24567{78i89K99999)88889199:":W:H:$99w988v8n889 9C9g99~9P87654820/- +8)&$b" .wqa z " qj 8FFI  ( & 3G>ZD!"%&(9)k*,.25'79;<=?@BBBCCCDD CCCCD%DEEFFWFFF]EEE8DDDE"EqEFFEFpF,EDCBuA?>=T;^976c420.,+>)(&l%#"!m, x_ ,mS%$=^}H d#!q#%'),5._0o124 5g79?AMC_EYGpIKM NiOQhS%TzUyUVVhWWXsXYYs<_:T865H3'0-*('&/$" }   # e3)& #D l " ${&)j+-05258]:w;853T0.,*(&O#!\L)D 3Au470{-++1*+w,/P1368G:=@QBEGJMPUQSXT[UW=XYZ[]^x_`ab\ccmcycgcycdef~fgHgugghggg1ff+eeFddccbbc^ddeVfPg,ghimiiiiLhhbgfedcb8`^\[aZQY1WUSRPQNdLSIG>DzA?5<:7531/7,a)x  J l>:896-55!67:@CEHUJMOR~UX[N\^_`kab_bcKcdefg\h%hi$i?i7iiQ9_4a/W*&S"z ja_^^2^0^0^_`bcodf/g.h6ikln1opqrvs'sussss[srrrBqq"ppqqNq6q2qUqrstJt|ttdt!sgrqspYomlknjjajvjjjkFkl(lmqmn ntnoBop0pqqUqqr.rorrs sostotu&u/tttt~t*srqkp)nmm kjRhZfudc;aF_[/VQLHEC>940,'$: +eddcdd&d.ddefbgFh hijkm[noq]rstttu u7u>tttit"srrPqqqrqqr rstuSuouu*tsrqpoon$mkkKjkkkckkllvlmMmvmmn,no/op)ppq q-qIqSqSqkqqr~sQtssss2s-sttcttvt?ssss4rrxr6qqrrBrVqq]pxonn mm{mnopr-sjtvwwx,x:www~wEvvvuuttss3rrpoXmkjui gWda^{[YUQM*pqqQq)poooo#o,o o_opFpqrDst8uXv.vOvAuuu4ttt'ssArrWqppoQnnnnoGopUqrsttuAuuu[u3uVu{uou5tttu:uuvuuyuttt4ss]rrkr"r.r]rxrqnpUo>n?mLllulmdnoq*rxsu(vDwKwwwwwXwPw?wvv^uuu2ttt#s_rqLonmml!jrh5eca?^[W qr@rrVqq:ppppqNqr{sstLuv5w*www~vvauuZtts)rNqQpNo-mlkkjqj0iijjkm4npqXr2rsmstouuuuuuv+vtvvvvvMuugttssErqpptp]rsAssprrrJrr@rvs stpuuv/vx'yyy@xx>wvv'uNtes2rpnm?kihLfedd ccdeg_ijlmoJprsltuvwHwwxxCxxxxxBwvv;utsr^ponmlkjvigfzeRdd"d^degeirkemAopiqrstmtttuusuuuuucucutsrqpooTnnnJm0kjihfdBrsssss`sGs)s^st_uuvRvwtxGy]zzkyyxwvutsqpJn?l!ige}c=aL_g^1]\\]U^_aXcneNgYisknKps%uvwxy*yyz+zdzz|zy8xfwAv-tsq nljhfe2cSa`_]]b\]]]^`;bdg(iZk:m np?q^r%rcrsstUttttuttsrqppKoo4nnmllkijiugsAstGtctOOOP6QRRtTWZ_]aeimqBtvxy{{|I|l||){zywus,pSlhda]ZWTRjPZOmNNNHNqNsOtPSLUX[^adgxikm ngo]pqsr@rs[st?txttqsrrr+qq pp8oo+nnanmlr5rst!ttu!uluvnwwwwwx|yyyDxwvtrpnl iafb_[Y VISPN)LJIIII!I%JKMiOSWa[`ekjKnruxcy{:{|_|k||{zdyvtZpm>hc_ZVRPMJHGFFFG7GUH8IbKMPSWlZ^]adgikm nopqrarsnst:t@ss(rrr&qq&pp`poooZo nq qrst%tuu`uv3vvvvvw7wwwywut3qoAlXifc!_F[HWTQQNLIMG-E@D5C:BB=B-B BCF/HLIOTY__dinrvx/zz{{|{~zy$wFt plh2b]DWR{NPJmGDC$AA@U???@=@A}BDhFC=(<;:::~;Z@DwH$MNRY*_LdjnsWv2xy{A{|{rzxAsD%GKPUAY]aldgmjlmo plq!qqrcrrr)qqq@ppsp.ppp"p1p#pp noq rrsst6t]tttGssttuut`t'rphliPeCaR\X>SoNJeFC@Q=;e9765504m4:44579e<@=EKQR X^djo`s,vxz{{{yvsCnFi}c]VOICe>:q75(322^11123%4P57H8;=}A4ENJjOTYR]|aehkmKnp-pqqr1rkrrrqqSppp4ooop4pfpjp[pumnpq-qrrsssLs$rrrrsGsss1sqgnjfb]SXRMWGC`?G10//.\.-.O.0G148 =uC`JQXo_Kebkp'tw;yzR{@z xtpajcd]W OH8Ax;62R/-I,$+**+&+W+,-/,1246:>DJKOUXZ4_/cmgjmhnpqdr rFrss5rrrqq[pppbppqRqdq_qm^niopq_qqrrrqqppp}q8r rrr:r#p7m]hd^Y&SMGAE7MT\djq'twxywupkd^SVO$GE?B82.*(X%$###$X$%<%&') *O, -04:@GmMTZ`Mf j:n p/r`sptvtujuv"vuttntsUrr^rrssssnnopq9qUqq=q:qppo;npn}oNopZppomCid^LW9PHAA:3/+&)('''''(((0(''N&''(*.29@HPY avhoYsWvwgxvtojd&]VO*Gt?9=3q/+){&%}$E$#$\$%%e%&'m(J)*-g06D<(C8IPW^dTimp1rsu utuvvvvuKttess.rrs>:52.+a'%##;""""""##l#$&8*.5&9S50,(%#""&"G""!!!"A"M#N$&'f+l28@HPY`7g#koqrBqq4pYppoofono)ooopyqHqr4rutssr%ponn0CINSX-[)^`uaab^aa_]YMTrNBHeB=72. )x&y#""P"n"<"!!!f!z!b""%,(.5Y=EMVX]eindp qkppLoio onnn9n=no=ohop^q7qrirvutusSr,ponmlykkklmno!onOlh(b[RI@p7/)#  v !n5m9kjjikkmn nRnmlgybKZ\RQI<@47/)$!#J! 3 !!x"."#W$ &3)-*047:=BFKNQU>X\`ScegfEebr^uWQfJ9C=e71+(_%u$###r""7!x  [ 1",$*19fA:IfQYag#l#nooNnn mmmm_llmnino;opqir;rwvtprqLonmPl,jiiLjkl+mmamlk1faMYRQ?f7`/r)# <p 5 B " ) 3 % , 0 !!"p#$'?*.258I:=/@DI LlOSW[` d_fhhheua[8TfLE?82,)&&%e$$x$#"!  0!#)08~@IHjPX`fkmoronmmtm\m9mllm6n,no#opq_r[sGwIusrptnmlkk8ihhfi:j8kalLlm kjf`XPH?h7/)$!2%IX  !""$u&)B- 158::=)>@CoFRILPSW\i`ehkpk`kAgd]VNG^@\94-)'&%%%%*$K#L""!!!"$*<09@I'QYyaglnpvp onnnn/mmllmno)opMq>rFstusr'pkomlkjih[h%hijkklFkcjOfDaZRrIA:P2,&#B H c !l"-#%_(*.38Wnnnmlm\mo op$pqsttutsqonmlljihhisjGkkklBkjgnc?\-TL_D_<5=.({$!d  A !5!!!"$&* -2E7Xi\Q`Id[hkntn4mjCf_X"P3HD@93-)'h'H&'/'!&%%$F##,#-"$7&,Z2;BK So[FcYinpqqqMp~poo+nmmnpoppqcrsunw tr}q)onnmlkjiij$jkgkklsl=li(e_*X?OH-@82(+.&"!Q ) / \ !!k!e"M#&)Q-B1i6rrqimXhQ`Y>QH@82,e(&v&l&&O&H%%b$$/$ #$W$&8)`/6{>F/MU]BdjOnp>qqqpppoo n5nn}oppqs tgvwrqWphoqnnun.mm kkjjkkkkljlmBkiad^$VOH@i81.+?%#x!P ${ !"!"$'E+/4:B@G^MTjY\]`Jbce7fgikmoKprstsrnLh`Y@PH@y82#+(%v%@$$$$$$##i##$$'G*18@HOvW^"epjdngoqppooohnndmm}moopq{rtuww qppoHnnnn7mmDl1k7jjjk-k.kSklfm6l$jde`YSKDW<4.Y(%o"!F !""%/(-28>EiLOS"Z)_dog ixjl!mWnpqs@t(tuLuvtsoLiaY(PH?71w*'5$$7###{#\"""#6#~$% ( ,D3\:qBTIPXI^ej`mnpoonnncmmllm|nogpIqArnstv`qppobnnnTnmsl[kJjjjjjjkHklljfb\VOHA9E2,(%T#!/ U % !d"c#%)/5P;BKIPV^chEjlnoHp`qrtcuFuuv uv:usoQiz`XOG\?P7C0*&G##:"""b"]"""E"#;$~%k(-5<&CK-R*Yr_fjm2mnnmm/llllHkl7ln0op q r#s3tMuq0pp oo5nnnmlkjjjjjijwjkllAkhe_ZTMDE>7 0x+'%"!Y B !!"#&*1G7>EL`SdZ*alfk_mboQpqqs0tAu#uvv3vavv6tsnh`DX OVF>6/(%&"h"-!{!!!!!!"j"$;%).6a=E(LnSLZ`vfPilElmvmlZkkCkVkkjklvmnopqrsuqppJp oooQo'nmylKkvk jjjujjjkclPlglBjggb^/X%QJC^6m/($!! !!?!!!""#A%'+108?GN=T[ayfivkkllkOjoj5jYjj%jWk3lKmnopqrst|q@ppppp^ooo*nlkkpkjjkjJjk:l3lmkiea\QVOHA_:44x/@+(%#""G""$%0(-5 <$CJQXi^ei`lmnoIopLq!qrr)rs sst&rq\lg)_4WONF>69/Q(s$!q : !(!Q!"B#f$2&{).3;aBnIyPdV]rbg4ilkVklkjiiiiiikl`mnoqrrsesq$q0q'qRqLqppMonmslskkmk2jjUjekllmLlmk?hd_ZTMF?94/0 +)-&`%$ $R$+%&+40_7>FtMT Z`YfCilmln`no(opBpppq)qwqr0rqokf_fXrPkH6?70*%"p! !@!"#%l&),2Z8f?FoMSYu_d3h=jkll^kjjijiijkYlmopq,qrrrq%q|qqqqqppomllkkPjj(jjkplJmll[jgc_Y7SOLF?940,)'&& %'v)5-3:AI"PYV]#b@gjm"mtnn_no^oppppp^pqqYpnjf8_YYQIA92+'u#"@ !%!#|%'|)n,06=DJPV\VbeifjlXlllkIjj6j.iij,kwlmooq qrCrqopq$qrqqhqpTonmllfl kAjjOjk>llllk8if#bb]/X"RQL`FL@:62/M-=+***+-27>EuL|SpY_d0ikmmnGn^noVoooo_oKonooonmGifL`ZSLEG=6/*&$""X!"r#%'*-z16,opqr\8UOdH7@93.J)''$r#"#%o(]*.'1W6;sBHNTkYf^c!gjmmnnnmmlDkjjij|klxmcnonpDplpoo j'ln{pWq?qqqqaqCppIooAnnmOllclllmemmll;j+gd`\;WSMH?Cf@<;-88 7 8o:g>CI`NTZI_dhfl&n oooinnno onnmwmm mll koiEfbo^0XRL E >j823g.+(@'#&G'),/i36;AHNKSY]b?f1j'lnohpoo|nn m.l7k_jojLjklIlmnonn^mkeikndpqeqr'r'r{rr1qq_pp5oLnemmmnn0nm_lkbifc`&\XkSNJFCB%@7?w>v?AXEJO{TY_^4bgjgmo8pp{p>oonnn>mml4kkkkkkiTgXc`A[CVOICl=83u/,`+E*},*. 1c4;83C[HNiSY&]basdh3jmowqqqqDpp[onmzlekmk.kckkkckRjj1hgdUaW]afjzn/pWrrststtttQsrrqDpp?pBp4onngmlji&fd6a!]YV$RONgLLLN/OS7V[?_cg+ilnpqrrr_qq p~oo=ncmvljkklXlllpkhjthyfxc_ZUPKE@=9879S:>!AaEJOU.Z^vaeFgjlopsqr+rNqqqpPo?nlkkkkk3jiVgf}cai]Z8NUh[JaejmpSqgrstttttvss4rqqqpqWpp.oon`m%kigda^[/XAU_SRWRRT~VgY\`2dgkmoq*rsht$tsrrZqqoponmm5mmmmmmlkvv]vvvXu\txsrrq8pgoUnno0oppqssttuttt?sssYsrrrrzqpoumkih"fdcbbc%dfi^kmoqIsdu vkvwhwVwowvuut(sZrqqp+oopppq+qBqoqkqqp8nkh\esb_y\YXVvVWZ+\_beTgiknlmnopqr-rkrHrXrqqp0nml-k^igdO`'ZUOIC\<60n(/8B@(GO%U[`dygjmoSpr+rsMsIsWs0srrrrrrrroqjpJnmkfjhggf+fGfh1ikmo{q2rtouvwJwwaw2vv uctss"rmqqpQpppqqqr7rrrrTqp/nxl igzdb`^]E]^ `adfgikl:m mnopqrr2r r(qqpomlajijgd=_bZ>SMG@N9r2,T%%.5=VEL RW\`dgjmo-pZqmqrrrrr r6rqrssrrqEonllkjj:ii 6/B'!:_$+3 :OA GMRFV[^beqh1jklmmnwnofopqMqrrqqonmqls rq)ppoo'o5opqrstuuKuuuCt:sq}on4lkuj)ivhi ij_jkkl3lm-mUmn/oopqXqqq[qq6po0m[jhecA^YRKD<-4T,%1"y)/6'.BG)JMQ^TWzY\l^aSK %*j.27;3>AEhHKNQTVWQZk]`bdlf gghThh}hhZh7ggYfffffXfeeeweefe0d{cbsah`U_.^-]#\\I\]]^t_aUcehjkmJnopq#ppppoooyopojoZo7o nnnn.mmlllm-mVmll?jidgneb_[%VR-MH B:;r4-x%[`[ hE 7d\#_'+V/p3769<@/CWFrILPrTKWZ\^`=abccd dd/ccjbbVbaaia``__<^^Y]]\>ZYKWUTTRR QzQRTU#WYh\_begiklmn`nunnnOn(n5njnnnnnnnSmm7lkkkLk>kkejiheda{^ZVQMXHgCC=T7M0*J#oL f G=10~R 1= $q( +a.14`7W:t=A;DHLXORTdVXYwZZ[H[][[[FZZYYXX+WVUURTTRQPZNM1K?IuGFF1FGxI6JMOScW&Z^<`bddf#gMhEhii?AwCFJXN(QUXo[\^`]abycdcdd6devfXg7hhphhgff&e4d0cKbba`]ZXcUYR"MIwD@;61,'*"", E*P?f LK{ 'u!l$S'+/g258;>n@BCDEZEFFkFFF$EDCBAA%@-?=<<;!:876n543$223E4,57{9JAUD9FHJLNPeQR!RSZTUVWWWW@WVVbUTSRQ O-LJFC?:51-)%. ^! P {9&7YbKd" < t Q ?L/!$ %'),1-../?/ /...|.o.7-- ,a+V*N)'&q%@$"!s!  "%T(`+.2H5K8:o<>A C DF:FGmHTIlJKaKKKK_KeKYK,JJ HGECA>;8_3/*&#aK b >r7OF}M#fy .K  ~h1 d!#O#$F$!$ ##"":""!!! hGg9+6C',  L #W&),.1u36U8x:;<==>W??v??@@%@@@@?E=  h  }y/>Q=0N< 0 b r 9 ! ST6 "$'e),&.+001S22=223334V45 5~5543240/D.3,6)%!N8e6 W6QcIz*i sE *FH*_1 4B I A c $)NTL=aL !  yA|8 ~ ,?nk!#>$%&}&z&&'(x)W)*p*z**-)('&&+$#!U_ ( <g *u.w%RDu -0kaG zhO' + g L Y-KR*f^psR/+ 1 z X si~ a;- ; @MO  v ;# =MX*)R<6(C lltKBAc]|jDiS,/8Y? Mb0 "NwKVH1 HY Q%VyT;6zj(^! Z0JB6*rSsm.>V'cOV3D2l}~rq~ w[  S '> ; D - (.!y6]B%rF",1J:mJA(D[|I.q X%WuC<1U=oJ`J6Hl~jvcw(lY  0!YS+2w#k?'nF`<4o/?!F|cu>w.w&O*nH@txJWp7'#9kiNJ#W`:fExcoT-/MM2)o|%<%`RxWIZot^KHD/ IFN`u}4 vn0#5}t__x$,mNWGPS,*+Z,=HskH{U{WGFUT^x)c R9RPS0XV" >cZ7Z8k[(3"j4[2F- Z#`Ay\EI@#Zsmtd qa0lrcZyA *o='^eJYxoE,!Zg;Y<i[)d,~hB^ZO9e%6%yeTB/'.R.]_bv)E@GMDxAlXqQG4Gj3C_0{YH'_UFlJl*8[i0 #Dt;A1 nR/I+*~9@9p$Db=IW@Ll t|{s=RTMP{b JW5nD6qOz+pujp~yP""Kb/9&jT78rq3t<)+O]HS'oHhOACg},sXl=VVSrwC2UP( O]>c%qz\YZtW4)<Ea #&." sJ..GmvH) "L3kbc^u?@1Cb[zWNp)Oackjp['3PWMEGNpPG\K_j&{cfky]USg~ pG2!1Sxn_^hipq 3 ){S 2hlT.jPEWu|#C]e]WXpsI%UcWKHPrd`lU@f]pkq|uwigbjgRF;DWrttTa,Osb>c><Wjof<V_]RJNgoY.KWQNTf~nHb=D* ~]=!$3ZFs -VelbdU4 mJFX\ZZ$;HRQLIT^eQ =`l`PVmVJqJ#(jkYJ1/<kKq"=J^`[B"pVOZ][\*BQXSKI_d= *WvoWKWxfYl^< |h\`hZVaFR,M[J(taZ\[S7OgiTBVg[:+Zyy`KYy}dN\Q@t.SQF)r_]cV]{= Lw ,ARE 0:~\OD* ,CdsgPNT]T-3kzUL`~\BHpm>04t%kud5 ylaaYjp( WhQhFSJ':7R7$.Oj|qV>ESM;!"HtsaW^w~iZbzyX4HRW<~ttxqllycA/Gupgq-C4  -+r= /IpzX.)?X`G.1Os~dPXrahlVd^eQ'uhefrZ=Lp`a313(xH%   ?TG/*4ERRJAG^w|c[{yhdl*UXZ?zshix^GMocVs&% rD(  -341*1Lc_QNZuvvx~vggx1HD6}}z{x~l^\VafXSo T,   $16-,FadYOSg~wqq $/4" iZXgswks  f3   '874@Q\_\YYe|xt~ "|lcX]n{y lbY=  "(19DOX]`]OSs|}iVRO[m}|kH1  !1( ,;FOW]dcRPjsr{uv#"{dSRT`mtrmow~ \A' !LK31S=YiO>]<Qv;-WI% A a %  5 @ : "    V &  c c M GzF1GtQke*RjN  GZxMp<MUYBErPFbZ - i d S  a &  & O n l F   # - * * ) " 0 N 3 E W h E N C7X`R~Q+s VT:`h]F b$  w 8  b 1   - ? R S O ) |  ? Y u | '  C F 4 5 A F a Z U & 6oMC1 'KlJWwKOi A=Z(}^P ( H \ Q A *  _ G / ( + 7 < A O O E  g ) 6 v # P p a $  5 G 2 $  " u D ] Q9|kQuj7E.+2\&mX  J ]  = q v  (    Z /    & M v # J g u Y  o = ! > d w M 5 8 4 W  6 Y p  'r_>.-XYW?^yCgX(^MOcQ- q 0 w 7 _ } 4 ! B s &  c l H &   < L [ u O   < X l f Z E 3 / ( J  4 8  ( > `  _71yXx^&_Zbn ft/f 5 y | u  f J # + P `  ] <     " cwO'%4HSf %r  : 8 0 ! $ , * $   * I c   6@\<Udq/z6vj8k j  h   *  : - k x W  ~ C b."snZ*GyspkyXVfmv .  g  * BocL @v|%63C` ~  { U R Z J  W \ u VQk#:Xp$`ziN%  ;huBSln>Y3 ! N y ' F W g L 11"(rj  $ o 5 ,  j 3 1 h Lr/C9R^jesJs\atR>^ruwwcTt:?/;I52[  1 (   > , a 8 , - 'Kx}& : D o V  ] l Q  8 c qN:=6 1\%[h@uW5iS`}nM.! ,05>ECEFc}Dq.)YCUG%H 5 Q i + 7 )  , z h  : x S wd w   J : ; ] " k 9 *  }a<H@)0.CY2.'/:B>34* *^U}HMdYc+"suP 4 w k h , s q k j  " 5 ' 8 "  ' h9J$-36br=* {hO+$<9+W. #,;LUcF ")jspY40)[ l Z | d U p { q A \ x {a8+@ |t~Nvi~FQ|\R}^j6 h=;V`owc:K,wCSs&:T83|:iE*c o 9 <  k *  & d4{]>hucurb2As!<QTlpd9`0lXOWXgnA;\Ot1?  aCp#dz= a _}niSFlc=I^(HZ*/c<Z<HxF}nj]V[XG*?uo]/ t_@8FtfxoA*lTi}1lrYliM' 6{(f]4(|^zlH5#M +t0c(hL+ $.2k)eB^yQg:BXE vDI4^if4=W1M6d # #bi*Gm  E &"j M  B f K  r !4Wm9ow~z`W4`l!l3as4Isi;_ch{'b_'EiTVW O u @U 2 C  , # z  .bmxb&nE T?#BaRYV&^$/zm7/> [YN)<*D?0Z <O} P7aK W gN_0A6nvibn4s?SLd@*0/0'*DZnBu@V t tPA"d+ j5eBM6 Bf}[s,UJ [)H&utb  !R!!!s! p R b T !f""##""6!!!c!g!y!!!!"3"c"Q"H! \hg`^' & 4 O X #3"g N*]P 08K%OBP>b'/`Yu=<q 0 ^ VNUkD9 b"a#%&')*)+',I- ---,,X++x+L+++++,d--w-o-9,,k,0++,,S,g,,--F-+-,+*)(7&$#1!BOkD Yp D . Xax::Qf79]x -%K   x-tj 7 "%$'*(,4-/C023q467n8988837s66U555566789*9,988[8.78848~8899X9z9188754 20/-O+*(h&%3#s! w^QOQ\ L < oq;_ 8SPZ/ > ! 3   c(^ - +!#%&()>+-P/2{46I79:@9AC DFHoJ0KLMNMMwM LLLM!MJMNLOP PQPPPOOiOi=`@uBwD[FGI JhKM$NPrRSwTUV;VVWVW W@W{WX X\XY YYYYjXX4WW[WWgWXYFYZ[\"\+\`[[YqWVSQOzML'JIHGFED<:8642#/+)&$" 5i 6@t$eN)>%r"_!#&),q.1e368;= ?pADtFmH I J @BEGjJ-LOZQ*RSUaVX-YyZ[\^0_O`;a2@C8EHFJLOSRU WZ[]g^`a)b bcdoegfYg+ghiibioi|iij+jkhklEllllll?kkj\iihuggwg fffg|htiDjkklmmmmmmymllJlllkkPj^i]h:gRfIe cb(`X^\VZ2WU@RuOLIwF^CJ@?4=<89740,'" (F B@>i==/>n@-CEHK*M|OQSUXI[]_ac,df%g8gh)hshijjkkiklIlllmmTmn7nooBo|oroMnnnZmll*kYjii|i?hhhi ijuk:klmjnno o\oooco'nnnoDoopoo8nnmml5k%jhg>enca[^\DYVTQMKWItHEG+EHB?;O62.-'"'t x h 1^ROCLJIHH^IKeN0PS~V5XuZ`[]_cadeghj;klmvmmmmn"njnnnooYooop7p^pqqqqr%rqq@ppLonmlkjjjqjKjOj6jrjkl^m'mnoop8pqq/qIqPqTqqr{sst t&t*ssOrqqpponm^kjgecd`^\YV|TSgRPNJFzA<72F,j&!Y^z ` VTSRWR'R SETW Y}\^}`qac+df9hijkmno3opHp7ppooppWppqqq^qrbrrsrrqq~ponmlknjjVjWjDjSjEjnjkDklmLmnsoop6pqqFqnqqr.rssyst:tttss]rrEqqjpon-ljiGgxeca_o]\[Z{XmTP[KIFA<60+&"qQbS^@\\[/[,[7\7]Q_7aFcpekfhijfkmJnioTpq qrs"spsgspsIsrrr;qqDpqq/qxqqqr:51-)%"hgg=gffffgshij}kklnoVpBpqrs^stTtu:uuuuupu:tss)rtr qqqqrrstuZuuuu t/s{rqponmm lllllllvlpllllm(mnyoIppq q)q[q\qFqpppq\qrswtt}tttHt3sssBrr\qqvq)poo n>mm8lkif}bD^uZW_SvNInD@yqrs6ststttt|t3ssdrr~r qqJpooUnnnUnljgNd4a^[WSJOJGCW?F;6mmmmmjlkkklLlmmfn$o+ppqrys?sssstIttttttttsrrqq?qqrrrstiu9vvvvvQuu!ttKssurr4qqqqrr#qqqEqppppppppq\qrirrrXqqLpp0pppq1rrsZttuRuuuiuttEsssKrrr qq>qqpppnlj0geca]JYUR$N|JFLAoooooKnnmn nOnoopfqFqrstJttttttttctvuuAttsrr3q^p[oynClkixh_gjgtghik ltmnopqrr2r!r r4rs*ssssstbttt sJrCqNpooLnmlWji3gfe1bstTttusssuslst;tuvovwDwxyz-zgzyyyyDxxvusromkiFfdbbh`~_^^^__acegikmp*r`tcuwkxay6yyzzzzzzzqyycxwvupt*sqpnmkWihQfdc.a`aaQbceg|irk9ln9oVplpq?qHqoqrYrsHszssttutosrqppSoon.mkjii1h.fnstttttOtLtWtuCuvw[wwxyfz5zzz.yydyxqwv trp$m[jhMeb`][`Z;YiYeXY:Y[] _Uaicfimprtw$xzz{[{|#|Q|m|"{{*zyy wutrNp[nRkiNfd@b3`)^\[ZZ[!\u]_b.dgOikm\noppq=qrrs&sstAtu[uu,tys{rr$qpp4opnmllBlkjSs`t(ttttsttu-uvuwwwwxy>yyyyxww|vu`sqqnkhec`]-ZWUqTmSSSS-STUWZ#]A`dQh&ko1ru&wlykzx{|||||D{{&zyxvtqo7lbifpc#_\ZCWVsTT>SqSSUVLXZ^ a(dronkkgc`3\FXUBRP#NMLmKL3LMNQSsVZ^bbeRh\jmnopKq qr[rst"tu&uuu2t`ssrrrfqqpp@ooooSnqrws!sst;ttuNuvsvvvvwGwxww1vPutsqpmifb!^2ZWNSPyMXK>?Z@-B@D[GKXP:U[S`ejosLvxyz{{{z5xvwtqmi2c^YTPK'GGCA?>|<< ;i;<>C?BACFfJNSX|\`dgjlon8olpqrs.sst`tt8srrxr!qqJpppppppp'opqlrr\rrs sjt tltVtttUtusuu$tsrqBoliea\W8R~MIEBs?=;::98}7789?;<@CzHNTNZ _e[j|os,vxbz+z{Wzy[vtqmjh]c ]WdQLGB>;O9765}434y5_78H:;?BxGCLeQV[C_cgjlnvp'q:rossst"t3ssLrr qqwpppppqq0ppnopq2qtqqqrrrrrOrSrst tBssrqomjfSaF\+VQKFB>\;o87(54332*11f12f35J8U;@FTMS:Yu_ekp9twyayzyx*tqm hlb\dUOOIfC>952u0/.f-S,,Y,./1r3~5q8;@FL.QV\`ehkn(pBqxrstt%tttqssrar qqsq6q2qqr/rWrqnolp'pppppq$qqqEppqr9rsrrqZpmjfb\DVlPQJID?m;L7a5210e//!..#----./2}59:!?FMSZahCmruxyzxvrni(c]6V}OqHdB5pppo(nno4op5ppomkngbl[ThLUDd=60+'%D$$%u%&D&&&'&&&J&X&n'(,1G8W?FO'W`Pgnrv-vdw-u0rmhb&[T-LfD<6r0-)=&$h#I"U"N"%"u"#[$$%&}'o)*-1S7$=4D_KPRDY@_ejoqtuuuuuuuFtis~rrrrwrFrsHttttqqrrErq5popoppRonnn nozopWooMmje`%XPHL@81^,&$G"M""#$'$$$%2%]%Z%/$% %"&J'**o.5?;CCK>S\ cPjo/rsYt`rpkgba;[6T#LE0=7M1.*(R%$#t#"""#*#$9$%H%&'*Q-828O?FMU>\$c*hmpsDt uttttt%s_rqqqqyq0q^rrsssusYsDs%s'rqppppo,n)mmnvoAopQooSljdO^UM[D<4,'" ; O!.!"+"s"#(#####$ $%s(+17p>F|NV]ehjnoqXpn6iea_YSLE>c8/2~.+b)O&%X##9"d"!!"K"##d#$$%<'B)z.T3;XBbIQX`fluorsgtHtsssXrr;qppppp8pVq qrrrttt1ss?rpppdonmmMmdn3oopQoolicq\SK@Bc92X*%^ '> Z !/!"1"v""#:#$O$&)/4\;AI#P6V^ckgil kjgcv^Z%TOHA;51-+N(r&o$#"V!!!!"S"##Y#$%'<+08%?FNbV]djnqrysNrrr!qq`pp%ooo|oo[opAqR1I.@470*(Y#9G.6  ! !S!!"I"#7#p%M',1w7\=QCIPV[`kbef1f'ca]ZVQKEr?79C40\-C)'H%#"n!!l!!""`""#)#($3%%(-4;CKJS6[bi{m{pqrLqqlppRooKnnNn?nmnnnopqqr&wxvutsrlq0ponmZlnlllmnJnotnnlhaa[Z!QH!??6/n'"={  p !!!"##%2(,05:@2EnJPKTY[^`aaya _0]ZWVIP`JnD=83/+a(_%$#"\!"7"E"l"""""#q#'+g2{9XAQIQ!Y`h lYopqTppToo nn!mm3m8mn&n6nopqrArxwvRu:trqSponlkkl@mmn6nn}nukg`AXOF>45.&"&i Q !`"U# %q(,1 5N9S=_AEJNRUwX[^` aya`^ZUOHB`>5.'C"K|FmcK !w"$F'*/3<6:I=C@aCGKNQUTX\` bcdHa^YT4MF?94n.+,'&s$$ #w#b#6""x!!!Z !i!q$#'.5>EMVE]ejgn*noo?nnm|mllXkklYm2mno pGqVr:ry5wvfusr:ponQldjjjQjkeklMm lmjWfW^WNFb>76/'u"R?2 X i!b#J%8(,p058];=?GBEpILO$RV[_ceg+e7b]gXXQJC,8f2 -)'&%N$$[$#""!_!( !0!#|'.57=EMV]ejn~o"oo]nmm^mlll!l#lmnwo0p)qUrdsvt~x{wutSsqp|o$mk}ji ibijfjjkkl8if_XP?Ho@982F*%!!  3&\]mm "$#&).27;0=?ABCEgH5JNRFV[`MeVhgkigb]WP.HA:C3.*(j&Z%%$$$\#"",!!!!$ '.5>>F3NBV^RfGkRo%opoo2nBmmTmllClNmnIoopr-sStuwvuEtrqponljiijMjjjkklyjga7Z~RZJCX;4-V'#"!Z!F 0 & E !Y"$&E)-g16;?BfDEFGUH{JMPT^X]>afilkid_XRJhB;4/*(v&D%%F%b%U%$x##L##"#7# %)20.7G?GOX_gWl/opyqCponn1mmmm)llmjnopqstZuw'w*utsrrq2p&nlkjjk kkfk`klRlkShb\uT~ME>X7X/*%#"""!!!!!!!!"W#*%(5,a05;E@6DGJfKXKL LN*PS?VZ_%c}hSknXml!g"bZSLD7<50*(o&;%%%%%%F$$:$#$b$X&*18AHPYB`hDlpq'qq>p}oqnn\mmlmmocp_qkrsu^vx}v;u,t:sErrqpowmlkkll\l)llmmljjNd_WlPDHAn:>2|,'%h##"""Z"j"x""""#o$'*/4:}@pEK'NQS$SSSUVY![_cOgk?mp>o`n'i`d+\UWMREE=6 0>*( %%%p%%%%D$$r$|$p%K%(,3:BJRtZahm.pq1qq_poonnRnmfmnYopqrtcuwHxu60l*'%-%$%%(%$$o$/$t$%&* .5!!"1"#$'o*05<BI@OVX\aflh_iijkln_p qrsbtsu uusoPia^YxPHZ@(70*T&##T"#""""##$&~(I,19|@HOV]ci'ln|noronnmmmmm`mnopqrstvw%r*qqHqppppoonm'll}llJlelmnnvnKkhc1]WP=HA:3.")'k$#&!"!""$`%)?-43+97@FMGSZ`ue?ikelmmnp0qrstztuuvzutp7jbZ}QI&@81*&#v""5"r"b""|"#$$')?.3;sBJPQX_ dciIkmmnmmllsllllm]nfopqrstuevFqqpppppppoEyLhSY_cgjelmnoBop1pq&qjqqrWs stsrnjdy^kVO F>260 +'w%$##$]%&')+/4;4AHOT[B`ehkHklMl4lEkkhjjkDkkolNmnopq^rrrrr{ooooooo!nnn mPllkkkkklJlmnynnmrkgd_*ZUNH{B5=8y541/@,,,/2{7w;}8&6 33G36g9k>CBHNTZ_dh!kUlncno$o=opp;p4p3pRp~pqr7rrqn\ktfb[UxN3F?r83/0,)('(*?,.149?EsKQTV[C`dhk+lm mmmelll;kkkhkl_mnVnoopnpmpFonmnnooooGo nnn$9\41_.,+,.1X3P6U9?DJPiUsZ&^Xc%gjl~nn`nnnVmmpmlzl ksklKmbmn]ooxoooMnWmiSkGlnfo=ooooooo>nnnnDmm/llmKmnnamml jsge:a^YTPKHFVDBBuBqDGL|PUbY^+bfjmGo:oppppooooppoopApq+ppnli|fCa\VPwJcD@7;K732x124w7&8<?EJOUYc]aDeilmoDopooinnjmm lZkklPm-mmn"n]npmmkj{eCh&jvln[oopHppq qpppp&ownmmmmn/nFmmlkjhe.bC^ZaVIRiOMPL)JJJLORSTWP[_c,fjmZobpqerrqq pypooooo2ootppppoGmkxAEKAPUgY]a%dSgjmwnp?pqppioodnmllllm+m?mmMm1lkjhf^ubiei8kmo/pXpqr>rrtrrNqq8pIoonnnnnnJnmYlktjgeCb^[HWUS=RFQ6?`@yBDH#LWQwVGZx^QaPdIfilPneopqqTqr qqqAponnmgmm0ll jiKgeb_\'XNkTqY_nchknp$qrsosttsserqqppppIp ooJnnmm5kige^c `_ ]4\\#]O^a(ceKgwilo~qs t6tu2uwuuuWtt\tssVrriqqqqrr!rqqpVonmljg b^Z:UROpMLLMORUkY?]D`cegicjln[opqvqrqqqZponn+mmlkj.geob_~[WS!NE L2RYn_diBmo7q`rpsstwt|ttrsjtItttsss)rrrmrErVrrrqpnmlFkj7i)hhijmoqrtbuvwxy4y1yxxfwwvutt=srrEqqlqrqrs4sstXtttt/rqnljgefc a___a#bdfhijklym_nHo7ppq>qqqqqsponmljkjChVd`ZZUOIC<6o0&.\6>HEM[T%Z_d*g.jqlnpZqrwrrrrr\r:rrrrlrsYsrqp0nmlqkjjqj2kl'noqsTtv/wxxyyxxHwvvnuttsirr qyppqqrPssttu-uu7tsrq omk3hg edvd#d/e6f(gqhijklmm-mnop[qqlqqqqvqp o%ml:jilg(d=_NZ;SMF@F92,W%($a,d4;CmJQWt\`5dOgjlnopq1qnqaqkqtqpqqr^sstsrqyp&nnmqlllLlmoqrdstv wwxyy yxx1wTvu{tRsArfqppqoppUq"rs%t tuvUvvvZu|tsqon lDjihhwhi{ijfkklJlmNmnvo1ppq[qqqqqvq onljhfc_YSL^E'=6i/n(B!b#(*1B8?FLQVZ^db dgik?l"lmImnCno-opqr9rrrKq;p:o>n\mmKm4mmn]opqrwsstuvvvvwvv`vuZtys5qpoonSmmnnoopr2sdt\usv!vvvuts0qpXnmlkkEk=kl0l?l9lzlmmUmnnoKppq5q@qHqqpon&lBig-d%a{]+XQ"JpB;!3,X%K ':-4;AGWKPTY$\_bXdfhijqq:poo%nnmmn\oopqrr@rrsAsjsls8srrrur q9p;o5nfmm"llm'mnpHqrstukvvvu,t rqpooYnnxn2nCnnnnAn;n:mmmnpoopqqfq9qpponlifyco_[VPbHAS9b1)h"rrQ  JEhc#)0R6];@8DIMQyUWZ]R_aDcdf_gik^lnnnnnnfnmll~lZlFllmnOnonnnntn mmlskkckjjNihh9ggbgfghciTjln'olp`qrhsKssrrq pvpoooQoIoHoToeoSo#nnnTmmWmnnnoLpp@p3oo3ntmljgdl`A\XSWM)F>7:/v'~ ]M  {$*0:49y=BKFJBM[PSVpX[Z]_adQfnhrikkykkkkkkZjjj}jjkkbkkk^kjjiahgf`dcb|aw`_^^\^\^A^_abdfi jlsn#onpqCk<}4-%&+ L 1 %O*.P2%6:>mADGJMPjSUWZ]&_a8bcd~deFeff ee}e ddvdgdddBccc boaa`j_$][YxWmUSReQPQ5QjRSUX'Z]`cehRj$klmmnn nn%n0nNnnnnnnmnGmml)knkAkiklllEkji%gfd `]uYTOJE7?A81*#z l.n Y1 #&*.269J<'?(B!E/HJM!P RUWYZ\1]"^,^_`,`___6^L]\\\,[xZYXX,WVUTYR4P MKhInGdFJEhEF GIKNR1UY]1`ce4gihjjkkBkkllElllllllUkjii6ii ikiiigfcb _\X[T,OgJE@:c4@-'j!EK GX}  [#'*-03N69;>q@CFzI]KMO=PR:STUVnVViUTvSRRNQPONzMLKvKJIHFE@C>A*?:=:<;;a;=&>ADHxLPTUWZ])_accde>efIfgggh!h5hOggjfedcccccca_][XUQM HD ?:5#/:)#$ Q"v28  W w1"_%!'*)-B0i3,58:=@EBD8EG?HJ)K}L#LLUKJI+GFEnDBA??%>>^=<;Q986653212Q24#58x;e?)BFJMQ4T%WYG[5\p]^_`aDabc ccdcyba`_^^;]]f]:\[YVTQO3KUFA=9,4/\)$B1 'i5V8M3{@ krv "%(+J-/2>478:C;x<>0?l@@y@$?>=< :9r865322^1130X/ -,+F*[)d(() )~*,^.148%;>AEHH{KNP4QSU9VWXYKZ?[[\ [[EZYXSVUzTT%SRPN3KPI-FCs?K:6W2m.U)$ *0po`XiYc* SJk #F%1',)+/-.0M1234#4h43210/.J,+.)(!&&%%r$#"!U ,S #Z&)Q,/269hh;S733/3+>'v#NK gZL@48t w m | 8 "T$,%''())$(( '9&%$#"!r[aP^[k,0W!a$'~*-0369,;w=?AC$DeE2F*FFFF\EEDDBA@?># MKr  W]AjTH9r8 NL 'M$d9Mdb r , d O8+/u[' \`d"6$'?)+[--.h.^.../2////t.-U+*z)3''%k#pi cJ/ ]|H ,IM(UNq=}a $  W  ! t  x^@i~K*b/  u A a!"?"v"r"#h$$%%%$5#,! ":%> g sIK*ZC<9qB"4}RBm%E_A=*m>W44!Zu/!<  4 v _^aP]F?s   U'9yV+4T3D 3Ntpz?|dmXFV&7,iv*`PCJN<$&N0?s ; S ` =7xSQ%|K a+`F9:}u.^'_3XL7v/o<`Z=:\d>6]f a%izrcP?:<HGa}PI ) ( " @ 8    y t ] |!Pq{k/gv=eP ){G':R>jEC$9U|}@)`>=bpqm\."y9Ru/m0p(z;t lF !`^8:mA4xOX +3Z-QAc}rJo[Q5`,W,c@*Q[&3vV,p,uF~c8)W{d%ZjJgM${c bM$B4LV#*KTcQ,k\hv}twpR1 $'<Pr ([wz J-cV76Dll]b./kTWEMV+ P+Y:KHYV}90ldch\^t&;{W1Qy1.PBjn+cW ;^<i\2&<i2T,>/.Gr IkJ<A<+<n wx}8s[Q?+2.q"j>&^f LZ{nR<1el6U7`Y0'7tOaZU9j/jVH6$l@Mba.>0=K"GwBkXqPH7Ff2B_0sSI;xdV qG[5Z}F*L{ 4=)i9 Q ;@?z+0I[5CVCPqr|wq3IKBCq_ M[7eE?*6 Mnglaj{^-#H` .7')|qQ+ >{q7 qD8Lk sUV#gHiPEIl5sUk@XTNk|q@.SO&JdHs%&`}h WSSp\8(8Ff "&:6x\H&.FjmD% "B-)wrr_m>@/Ce`zUIk:]khkfkW#*JRHBFJk]S f@Hc%uXYcz]VZr#)!zZG,.Kq}]DI]^ad #z[*bkX4hPBPmu(HckaYXorIP]PCAHjpgt D/]X d^m}w xxlleVJ1.Divx Uh*(Gl|}_Ad?:Seld3N[[QKPiq\1ISICGYtwMi= 2!cB,--GpK1+R_iaaR8qKEX\[\";JSPKJS\dR ;^iZGMf|[Py>bjUH422U@&{ 8BZaZ@' vXOZ[XZ2GQVQFC[b;&UwoSFStk]nL 9~aQT`WRRr5 O $I\K)$uaYVRK6MegP=Rg\; 'XusWBSwhR_C 9n'TZN,q\\eY[m:I+<PI$6<}ZI<%&AdrdLLVaV- ,cnHC^cJRwe4%)jqt?*rjkbml+!YuayFPI*>5 P3 .MfukR<DPJ7Cpzj[Wc~k]cuuS0FV\A {}sijyZ?0Gpto|)?/  +,o:-DisS*#7R]C)/Op{gV`mX]{o[dfeQ*~slbfs{L7Ln{W_~)(+$wF$ "?RG1'.>LJ@:AVn~|gazc[f4_^bG#~trxyO<Lt`W{ sB' !2:8/&+BWTHAMmz}n`cs(=UQ?nWQIY~g_^{   T,  +89.,C]`UGH_}~zsqq+6:(jUN\fyofs   f5   -<;9DS`bZSTf~y~~w$#rb[NRcztmz jfaC  %/9BLY`_YNWy|v|~ eSSPYjy|}|z}pL3"  /*$5=DR\a^RVq|qs.,! h[^ahopjfly  aJ.KJ! 00L7ViL9\@Xw=+OL ' J ^ #  : E = "    W '  g i I CwM7JxPeb)M}^wG K\xFi;ITQ@D|Z@a W ( n f Q  g . # M p i D   # , ) - 0 ( 4 S  2  B S e D L GC]\zGxOv-w$ WS7[dZBb   n . f 7 #  & + 6 N V R ) {  A Z x z $  F H 6 3 = E c ` V ( 8mK@, % EcAP zISk @<^%yaQ 2 M a O < # _ D . , 1 = C D I C >  f % 5 z & R p e )  9 N 9 &  * z B [  V!9}kP{qj;F/*2a(oZ  O d 1 s q  $ /   Y +    * R { $ K i w Z  q < ! > c u L 2 7 7 ^    8 X p  #t_>.+UXU=_Ik\-eROjX. v 4 < ] v 2  ; o +   c n L %    ? Q ` { P   8 X l c U ? * ( & N % ? B #  # : ~ X  `:3{[xZ-hddsjw/h 4 x z q  n R 0 ; Z Z W 6     a|W-'4FSh *v 6 7 /  " * &    . N k  }   :>W9Ogs73wi8o g h   &  > E  i  { > Y'poZ.Hzww jvTUhmt 0 k / >kZ~F?u'x%64C_ z  z V U Z H   ! a ^ o OLk$4Mk]oR$9g!yARjg4[5 # P | ( B Q i K 2 +#$qg | ! l 2 )  j : ? y Ro/E{ !?Ydi_oHkXayS<Zlrwz`Rh2 ;7HT;7^ . )  7 % ` ; - . Q$  7 B n U  _ n R  7 d } UCE60^'bqHmP2iTbqM.#!-27;><BIiDp+$[J^J!G  , L j  2 : &  / w f  4 s X  l q y K > A d ( p : *  } tcCYE~+#~JO()%/=E@43( 4cV|NVj_e.t~S ; f d  , r m g i . 4 % 6 #  . & g6G%+-Afyp)tiX9&;6'`2 '5AMTdD .p}y]}1!.$\ d R t h ] z r @ V | x\1%=}MlSq<I}c\\_/pA%CYeus^1N5 Ray!0M/6|3e?#Z _ 0 <  m )   \2sP6csn@Z,5w(>NMbg`8 d6n]RX\np82RV|7I ]<v ^xs4 Q c~icK>e_5JZ#  < hJH.+A5 e3 whbWQRNC- PnY+ {bC:BqhwkJ2lKfo9hnVkiD"=/^{d1 ^iAUGau.l#[k(u@{_QG=6~Y`HgJ d@CV< nP!N7bmi7?^-}L-U  7?ynUN 8 xfj @ !  Y Q[ O j*i=`fb5bm->}vGdcg{FlVf5x \  ~ X   ^ d%kY @   \#^^[&R#/x`w6?D T TR5K7JO> \ DS,Qiv   W\y(\QIBK v 7h *EkU@v38 J H /zGu3C e.`nou"f/X6QiKaB 8 S| !!!!v! b 0 / & M x !a!"5"&!!o! !!Y!{!!""R"P"O!!TQ^C6| e P  DtAMJHEK92Mv,z,BP{p-K , BO P"l$P%'E()+,',----,k++`+ ***+1+,5,,,f+++m+O+x+,,/,\,,-"-- ,v+*)(|'c%$g" BPeNf  0Jq)=Xc>3^p& 1U Ko@9v _  "nL^e"$'*6,:./1b2457]8$888g766a555556`7#78^8a8>777U7@7w78%8\8899?9 8765d421f/.,+Z)(>&$"!AeKqzZ" L @ rv0H$NWfx k Q v e . _ JR4 !#'$%&$'*1- /2U46a839;=?}@BQBCnCBAAJA@AAAqABCDNDDDD CCoC]CDD|DEEvEEEEaD_C A/?z=<:976y5]4f3=10.B,b*('f%$#!?4/ E/[I|eIFUl4&?K " $ %'C(*x,-.j/ /13%5r8:}<>@BDFH}JmKM6MN,MMvLLLLMXMN8NOfP>PQ$PPaOO NNNOjP PQ QRRoRMRGQdP%N/L`JlH{FDC-A@?>=;:\8}6420/O-+)&# iQ>J T>J Aih. "v$&(+-U/`17347 89:q:<=?ACEGmIfK`MOOPRTU;VFVWVVVVW=WX#XY$YYZ_ZZYY>XTW|WVW+WX^YYZ[+[[\[ZYWUT RIPiNM$KJJHGFgDC!A?<:87N5X2/,b)k'%## lSzs 7<cp`)%" .w!#&a)*+-0k25h79<>@CUDFFGHJpLkN$OQSeUnW[Y!Z{[\]^U^_/_r___`Y`alabpbccc.cbb a$`!_/^^M^^_`a]b=bccdRdcbmam`:_ ]\x[5YXWVUT-RQWOMxKbI*FDB@>;8Y5.2S0-+)'N%W#!qz+ X3c/,*):(f)v*-025>7:23;p86420.,*;'"|f}K kw\X=9H64>3y2357:R=?ADFICKNKQ5TNVYHZ\.]>^}_`abd(efhmijkkMkFkgkkkkkklllm?mmmmmm9llPkjiihKggagzghviijZjkvkl\lllMlkkkll?ljlOl)kzjigh]ged>&=t>e?BWDGRIL>NPRTWZe]$_Ma;bde1f94.)9#[%n VTSRiR#QRSUXZ] _$`b/ce_g_i&jkqlmno5ooppMppq1qoqqr-rHrcrrrrrrrdr`rrrrr^qq:poomllkNkjjjjjkZkljmmn>noppfppppqq4qqr+rs#sss|s rrqqqpDovnljhfe,c[a$_]([[>ZXvU$Q[LHC>83E-(#12R]\[[ZZ[W\]_acecfgicjlmnop~qFqr=rrrs'sCs;s7s&ss rrrrrsss rrs sMsssrrNqxponmlkjjjjjjkkiklIlmhnno~p+ppq?qJqMq@q=qQqiqqrQrs9sss[rrrrxrqponmFljih%fe!dcbaJ^p>oonooppqqrrs s0srrEqqqq]qpppqqqr8qqpon lkigdaT^G[XVZSkrHrrrjqpppqrrstu{v9vwKwx)xwwv[uu&tssr q,pXonm^l#kjiiiijLkEllnoqrsttu!u1uiuuuuu>u)uGuvv=vHv"vuuuuuuuuuuuuytsrq&onmm}lzl%llm$mnobppqzqr.qqqnqsqqqqqqqrssGrr6q#pnmnkji!fd[b`5^\Zst9t;ss rhrBrcsstPu$uvw@wxhyyZySxxnww`vvusrqpJomkjHhgffFeeeghgjCkmoqarstuPv vw#wawxwtwwx)x`xsxPx5xwwwwJvvzv2uuu tasJrpoCml@jiihijzklmnyoUpSqqqqXqqqgqrr#r?rdrstEtzss2rqonm?l%jig3edcc-atuuttssds{ttu0uvwwwxxygyyyIyxx&wjvu_t)rq+ogmki|gedkba```ac+dfhjloprtuvwxy2y[yyz*zTzcz/yyyWxxwvuttsFrpnm-kj/hgdfdrccdfghjbkmIIsrqqpqpLp(pQppps]ssttsst;tuvVvww|xxypyyFy x=h<<<=N>c?RARCdG KPFU7ZQ_hd,hlqt vwy0yyyyRx{vurCo&jtev_ZZUEPL FB? =;~:98767R9C;=V?4BExJ^OUXZi^bfjPmNp=r0stv*vwbwvww=vutssZrr*qq7qJq|qrqqqqrr5r/rqrrsct)t}tuAuvwVwwcw@vDu(rpmiid`L[UPK]FB`??<;89(76c656.67p8/9;?)CHsMSMX^chmquvxy.yxwtrrnjrd^XRQLGjB=9532K1002../Z1u368+;>[C\IOoU&Z#_cKgk|o,qstvMvwwwwgvvutBsswrr^rrJrrs(rrq5qgqqqqmqCqPqrsLszsttuv&vvHvtsqn}jMe`9ZUO1IC?T:8N643&10001+1p224 5r8;A+F]LRX_djo=suxJxyBwv?roje_4XQJD?<:52.,+:**q*U))*h,x.1]36{9h>&CJPVH[`tein=q=suvw(wwwwzwvPuNtksss:rrssst&sskpqq2q^qMpppqBrrrrsstuuuELVRX^ chmqtuevwwwwwNvv0ut&sss:sssqt#tttt%q8qCqKqdq;ppFphq qrr qrdsst8ttatrqq mj d*]VOHB;51,-O+**~)))S)))**U*+,O.15:AHkOV^eyk}qtvw$wuso:jd^zVO3Gr?93/*d'\$#"# #(##$W%&(Y*,b.049@GNyTZa ]!*!""h"##h###$$Z%'Z*.5;BJhRZayhlLp(qNrqFok)f`TYRJC#;x5.*'>%j#""`"D!!!"!"#%#$Y$%W%(#+?1+7}?;FzMU\dj6o$qgsttt>ss'rr qLpp-pppOppUqYrfrrrNss3rr0qppipQpap!oo6o o%op1pq1ppnlog/a9XPG>7.(" V  o !!x!" "2"b"#\$%(,W17a>hEMiT[YafljlnnHm'i?eI_Z.SLE>`71-v)'z%W$Z#e""G!!!"("#5#$$$&).i4W<C/JRTYagm5or>rsGrrqq5ppoooo9oo^opqrbrAr%tt sCrqqpsp2oognmmmn<4,& d5"p  u !!"#&F)W.p3~9@GNTZ_d9fiiifgcW^ZU#OHA&:4/+)>&%5##f""!""P"#F##$R$B%'s,19@ GOTV_ ekpnlqqnrqq5pgoo%nn5mmnnnnpqor"r8rQutsrrqpVoobnsmzll[lalm5mn(nn8l:idW^!UM>D<4H,&. (1n  !"%',1v7!jC,GLQiUYX]_iab5b`_o[VPbJCg<61-)'%$##.""##>#Q#]#^##>$#%!(-4;C{K*R[ah^lnoepoo nmMll/kk|kl lm)moEpqrs;wbv'ts{r~AEIMQU}Yb]a/dZde5b)^}XjRLD=7F2W-j*d'&%6$$##u#!"!!!!?!"i%)18a@HPFXj_fkn`nonnEmXll*kkkYk`km mn~oqsrstwutwsqponmrkj{iyiTiVijjwk`klkic]UN[F>7.)$ " d MZl7 E!#&&)U,148R;3=|?BjErI4LQ UY"]aHdf2g6dae[zVOxHPA:&4/=+('.%%$W$##U"!!!!M!"I%d)08?@HPaX_g knoZooFnmm llll"l3ln noprrstuvutgs"rqp nmkj}itiEi8iij jklAjiLdj^VOH@g81+%#|!!K M`G !#^&)(,D047:=D?@BDH!KPTLX].ae-g.ig/dY^YURKDt=S7G1^-W)'%%)$v$;##""P!"!"o"%*1T8ATICQ Y<`qglqsponRlkKjCjijjjXk%klkj?e`YLRhJC|<4Y.4(%##-"F!!Y!'!!#! ! !M!#&)z,0z48jjjjjklZmlPkugb[UWMF?Q71d+|(O%%K$I##_#,"""""="#c%(d,^04v9=sADyG*HXHIRJLXOSV[C_c^g}ilgkxid_IX"QIB&;Y4/H*='%G$$f$$w$N###}##$%)[-5_CsHKRNfOOOP`R.TaW[+^bfajl7n^ml2gWbZS+KWC<5Z/*&'0$$$1$r$h$M$ ##$`$&X'+y0b7?ZGzO:V^Odjniqq1qponnnnnn9no~qr!s:tnuvx8ytsss.rr:qqqLponmm{m&m(m mNmn}o!nnkhNb?\XU3NF?8V1-W)(&%%7$$$y$1$m$%'+;/4M9n>DINRXUW*WW|WYQ[/^"adPgfjmnponid\UKMEE\=670*&$=########$%l')G-}2:UAIQsXq_ek7nGppqpYonnnnnnnoqar|stuvx4ysJrrRqqqqq~qp]onnSmmmn/no(oo{opm1j4d_UXQJRB;50*,1*2'&N%$$D$U$&$%'*.39E?E K"PUYd]^__`aJbe[gjHl^moq rqpl f^WDOG?:7F0*Z&####O#O#^#6#g#$&4(+?/5=8DLSZpaf+kmooooLnnnnlnnnnoqtrstuvwxr qqqq?qFqmqqqepp5opnngnXn?nznoLooonkfa[ZTMFi?l8T3.+(&$$y#$*$%5&)-D28>|DKFQWA\`d]f(gGgMghikmoqpqorertsyrnci#aYYPH@8z1*&##."""###e#%j'*E- 2=8H@GOKV\bgkQmAnnnn3msmm&mmn7nLnp qrstudv0wwqppppq'qbqqgqpCotnnKn.nn(nrno`omonblmh/c]X)QJC=72/+)L&&%*%c%<&(},o0~6WIPnV\daehijkkl3lmo"pqrrssttlspk c[\RJB:?3*+'$)#"# #$#o#~$$&(,1/53;CnJRY^d`hklnmmm@l|ll##$%')-18>FNT[~`ei klm\mll~kkXkl;lmmnoqrstuuuv]ooopppqqBqpoo/nn7n%mmn nrnoooPnykhd_ZbUO3I9C>u:<52/z-++**,<.3-7=CJQKW^bgjamlnoooop,ppqIqrstuuuIqmcf*_)W O)F>o6/*@&L%F$-$|$%!%w&'*,1 5<BJZQ`W]bg/illmlllhkkZkl,lslmnp)qrstytu;uXuoo<`99%8:=BiFKQKV\afjVm noVopSp\pbp9pp ppUpqrstttWqnid^qXPIVBF;62v0P.$-,-k.@026V:/?EK:Q!V|[`dsgjaklmmxmmmum-mmmfmSmnsopqrYrs+srr5qnqnno*o{oojoyooooonnnn~n mmmmnn@n[mljhfc7_\WS$NJGDBu@?x?AfDjIM,QV[`egilnopapyppVpEpooodop&qr=sPt[tAtqokNg a\UO HxB;=9N64L3e2`34 68BFK>PUZ4]adgjlm nnoo onnnnnn"mmnFo4op,pppp^onnjlm n@o oop+pMpppp{pptpoEnnmmmmmVllgkj~hgJe&c`S]YVTnRQ]OOCNPkRVZM]adhekopr r rjr*qpp\pooooopqrsstsqnlh d_(YTOKGD[A)?>?@C=EHKPUuY]`dfijlmnogoooooo[nnimmnBnoYobooMnn lkjgiklmJnopFppq`qqqqqq6pOoznn=mmm{mllNkk'jigsfcag^\'ZbXXGWjWUWXZZA]u`cfi'knsqrwsdsIss2rqppYooooopSq/r@s1stsrrpnkvh4d_[~WgScNKGFEFGbIeKMQVZi^)acf`h8jkm n)oZopSpBp]pRpUpovnn+nno o'nnmmkj'h7fadgbj-l_nWoupq qr(rrs rreqypoo4nnkn mmllIkkjEi gf)d=b.`&^]]N]]^_M`cehkm.o0prsttt]tt0ssr6quppwp^ppqqrswst9ssMqpn]kheua^Z UQNMLM$MO`PSW%[)^adfch,iujkm4n\o}pphpappppLoonnnKnnnlm_lpjiXg%db_[_c filn}p!qrrsHstsszrqpp9oo@nn$mm(ll{kkUjXiOgfzecbaab2cddfghikm3ofq-rstu4uu_uWu tt!ss%rrarLrwryrs'st5tkttCss)rnq omRkgd`\tYV4TSTT9UW2Y]&`cf1hi jjklmmnop+ptpwppppoo?nnnnmkj9ge`b@_[_XRW[`dhkWmoWpqrskssss0rqq?ppRoo*nn mmmlkjiEgfeedlde fhbjfkmhnpxrGsuBuv~vtvvv8v uuXtttltssssttatttuttt srrpnkhe~b_\\[iZ ZZ[\\_Bbe giDj}jktklVmmnopp^pnppppBonnknmlkkhf b_ZVR5MI:O"TZk_ndvh8kmoq.rsRsst ss7rrBqqcpp:ooUoo nngmluk;j#i?hLgg7ggikmoqbrsuvwCwxwwwOwvvVuuJttqt@tt+t+tPttu$uZu}uiuSuttt6s qoBlj'ge6baY___`b%dVfhjklllullmmnTooppXp{ppppoPnwmmVlk#hea]XSNhI,D>DKcQW]ub%filtn6p6qgrlrstuvw&xxxxx\wwwvutt@ssds+s6s0sjst:tuDuuuuuuvusrpnljhfe cccdegviFjl,lm(m+mLmzmnno^oppnpppCooEnRm)lzkXj$gkd4_[UPHJzD?9o3:AHOqV [aehk moqGrssqss~ssZs rqqq]qqr4rNqpo{nmmll,lQl{mo*qMsMuvwxxyyyyy xcwvvQuttGssrs$sssXst;tuDuuvbvvvIuttrqgomkjhg|gPg3ghjkAlCm.mmnnnn@no;op$pMpppponmpkk$igc_ZTNcHA; 4.)0q7>EpL2R7XO]aZdhjmNnpqqr'rHrrrkrqqOq0qrrsrqpoo#n~n1mmnopPrsu vwxxy\yoyyxwvuutrssrr/qqqr*rsOstu2uvfvvvvuEtsrwpo m9kjeihiDi71*$&$-P4^;VB1HO2TY]aae^hkmopvpqqqqwq#pqqrFrsscrqppoNonoo:p q8rtu/vbw;wx=xxyxxx$wevCu$srqppyppppqAr2s*t6u9vwwvwwdwvGutsjqp/nml(k`k`kllPllmqnninnnnoop-pppq>q pon>l igReGa]WQJC'CGLdPtT4W*Zk\^`abde]fhj0kglmmQm/m?mllUllllSlmJmmmml?kukjjFihggff8epdbc:baa1aac,dfhjlnopqr%rWqqdpp@oozo/nnnoo,oo nnnn`nmnnZno'oSoKnnn&mljgd_[~VQKD\<5b-&vH 7 z"(.23?8 5%s#(-!115:>A2DG[IKNPQTVKXrZm[]^__`aaaasa``o```u__Y^]]\\[=YW~TRPNLJI(GGFGHK MIPnSW1Z^bFe7gijk]kl9llllllmG@xBDFHKHMOQNRTUUVWvXXKXTWWvVVVVkUU0TJSvRRRQxOMKHIFDBH?=;;/:<=H?B;EIcMRVzZ^Facefhhij j~jjk kklkkjj i&hhgg4g fedb`_c]>ZWS(NUID?82m+%To =.#,  '#v'7*-0 2X4\68:<>A)C5DF$G2HaI[JXJKKKKKjJJJ)II_HGFF(EEELDBr@d><:86P4M2M1142^3~58G;?aCH0LPTpWZJ\^|`Jabcsd7dee\efsffoeedc*bpaa`J__ ][YWVUkROKtGlB>u9V3-'"Q'V :t+PIl hwuA2!$m&o(?*-/B1?3M5<7B8:y;<=w>u?/?@ @S@E@2??P>>=6XZ[p\`] ]^c_s`#`{__i^\]X\M[gZYXXVTR PMKYH DO?<73f.4(#  <,&Q'P }{ Y #d "$'(*l,,-/K0i1V12344H4x4s44\4 3P210/.--{-,+*j('&%$f# ! {  !#%g(*.l259=r@CFEHKbMsO7PBQJRRSU:UVEUU2TMSaR[QyPONM7K9IFDBi?<8[4q0- (#D e 3Vd^,g(zVOm , Q". !H"S#%&&&'(P((((((((9'&%$g#G"g!! iYRIIEc$M"& )-1+4_7$:;9703/,)d& "$-Q U{CH=B'>E  Z F 7KgIs;9#+Pt 0 , 5   p&6\"|%(+.1c4t69:h;<=>X?C???/>>>==,<7:86431..+(p%"nW~N  ]3p!O)/djSN W ,\:KE=`^6N? G uZTpY4 /0 #&*,|./01e12Q33334332260/#-+)(O%#j{ u ~}SiRe[GG G%i f ^ }  e u x Q  Q S  f W!zJB b v,  "$%U%&'&[&'(y))Z))q) (6'L%$Z"! N_9~ YI;|0`R8LO,WL6'2u5UhNo:RSI{jI -?  Z pQJT30l@ t SuWLC:wE(>V@b ?OL.5>5W#X Du}_<("# "KOuK$Z n 'd2'nG,]1; 8 k )q_:6W8LEc zqwKTpf/l18J @F>PjhT1 Tmm A     _ Tev>-z34~u)V%8#vHbO/X3_M~o(X:jObw+p*lyS4  (ta `?"=}R;.At\6`E!o:$F^FtN>+etPKi87zX13D~"ls7XVN2a!3TZ,`cg# "ae<@$rG;QX~" J5W<UuI whY6TBY@-0'8[d<%Po'@_GNr,vCw<_$~R#v[-giP8.T[$0ju1j1>} |lpx|obYXP[p'  .`{Iq"xonOM`4niZm35s\$dRY^)$M0`EljhG +~scY]\m@X1*+kwl UHr#m%YL;X8f]2(@'o7R!@,0Vz`fBB5(6dytt`Uz9A6.m`=$al IZ~tO9,ck6R2^M-!~ErMhbM6h"|qfQ1 b2<GP/?69I#I{OmZ{UL7Gh3?Z& hRK8uYxRs5DcvC (R+7+ oG"H  2D6c2Kd7?P>Numwsq?SSJKwc KT+]ID,D#\2xzkmxS#-Yl,>1+mM0KZ# 'H39xsSb1pBeP@@d2jKc$F\ZUsyF2TK! EfIm0.oxWPLgT41GL_|%.;0gI) 9PquS5 B4uqiv 6;0?\ayRDi8\mlqms^$ 0MRF=@FkTGjERc"hJO\|ub_Zev%&!hM4<Z}~kL9=QV[Wo+^)]o\7 lUESr}%HckbYXtxKO[L<9CjpizM5`Y ZUe{|{   |wlroXF15Kn}z|Xm, $Efu{cDfB<Tgne6Q\\QIMiu`0AMB9<StYtJ<)sP78>_U+)O\bZ`U8nJBRWVV$<KVTNJT^fS5YcP;Dby^T}L!fxbN525\F'v5AUZYD( sWLUXYZ 3KX^VID[c<$SsgH>NnhZnY4"n_\\LEDf/Q$GWJ- &u]TWYQ#<RkmU@Ui^;%WqmS@PtiSbM 7j!OVN-ygacVYl|5Ot ';LB1;wSH@& *AduiRQXaU(-alID_hNUyn=++hj~n:! ypngvx2&anSlBND"84}H0-MhyoU>FRG2>hwkZSarci}yW/?xP[<~|ysqz_>-Eqoem 9,,+m7  .EkuS)%;QW?&&Bjw]MZvdhjQ[ bhQ&vpmt{qF.?a|VY!!4+zH$  !?SE,&.:CC;/3Nm{vedmgm|/]^\=stvQBNpcXw  sC%  $034- ;SK::Nl|kix%:LC6zc\Xkmeb}  R)'6;+$?[ZJCK_y}wu(/6)lYOYh~qjxh3  .B<5BU\ZYXVazw{ %%|j]MMWl}mhy qi_C! %+17COVX^`UZ|| n[VPXhy}xz mK5"   2($1=FNT^d[^{||$ n`bdmx|wz_D)II 9 9P9YdG5V7Er8 (\S'5 B ^ -   $ = C > '   V * ! | r G @jN= GyDZa*O}as=  O`{NwI&!GSR:>rLBZU 6 y q _ ) n '   < a r _ E    ' ( ' & $ 8 W N  C P a ~ 9 K M=^\uB xPt(v% YV8[d[En#  z    > v ;    + A H C  ~ ; Z t ~ 1  G I 7 2 8 8 T w c ` ' :fB6"  BdDO~ |IT sLAY sU@  > Z Q H 5  e P ? 9 0 . 0 7 ? ; 5  f 1   < w ) Q l k +  : R = ( /  I Z E0ylT| rj>H3-4m8wb = K A    v N ,    , S v $ H h { e & V 3 C b j = # . 6 d   @ M a r_>.(SVR;_~Gp^3pa0fx` 3  n 0 q ) Y y +  D  > %  0 q v ] <    < O a  b !  3 T j ` N 3  & U * @ ? !   % 4 s S \64}YtV*ihcqs0<r ? x q  \ 9  # J [ k H ,   ^!]0(6HRg@ 3 4 *       7 Z v  u   <EY8Idr5~-t_1x x t   '  2 # e w Y  P . \.|bv k: K|,~mrIAPWgx : ` 3 Ivaz@?u{,)FHWp  V O V G  W V o c Z|;"=kRsemO$ :m :BTmg+X?  * V v  A Z p X < .#-& - m 4 ,  g 5 4 f Av2>zA! &8HQJT+]gl{}M FcwiRV7=#MZC?d  %  2 , h E 3 3 #M > D k S j h  C ]\Q:6)"FrBrl1\;qcpkG+" ,5>BEGUhCo,q{oYgV#'<  * D ]  3 A 0  1 y g  4 u W u q | t E < E q : I ;   { qQ#66@I2 1}C'?PSGB0,0>dWjF[}kq4#fgC 6 ~ k d  ) k e c k 0 , ' < #  & 9 : xFV2$.x#Zgv>8$ t1:FAZ* (;GTa|3h(l  $^ c N j | c X z w A \ 8oA3?tyhlEfiNiY[q>j~B e40Mew{^t L7-Ue),;&=>k@!\ a ( 4  p ,  ! %4xA }W6`jT^|bKC-k:?GA>-IqdX]ha,]KOI3w)e{s9 P _jaC1WWMYm5?7gk1c)SzP=Q|*VA)rAg\KB=:5()w$I }KEUmKbazA 8u$Php8jkS 6V ~"3e Mr]*RYs> 2duG!1wuvvpU4"`Ym#foE)R\E mV,S=mun"Ee|Lm=)Z!^{c# [6*J["  T F -vC,%+BT} 1 [ | N !jqBVY4E{B\\hc@ur74y{PjWd%=Q}`=|!  R n d  '726, 2GJ)9 % K_%X-#~ jVi/ CQ SY~I2M;KiM N^W-]nh k 3  1W='+m~#j3ce~vc^~X-4;U4z r E  9 U%m?'%m,=n,ankmJa4F4Qq1q z 6 ,q!|>~` T!P"r#=###### ""!!8 *k qi; = lH5 <Eaff5(C49XkD  1 I   62 *!"#$&;'(*=+`,-./;//8/ ..8-,,\+++H+**^*'*)*<*e***w*[*L*D*_*9))(B''y'o':&p%d#"!2}Y b76`l<8an$ 7 'P+ * Y?sxv!J#&F(*+,-/,02456789j9999e9 88A77U76666W6*66656c666h6?6'66557413 2 111!0Z/`.+-9,*)(&$M!>~cT  /bPKvs!FOc^L G : T z & spRd"!$R&"'(*,/_245678:;=?@@AqB6BCoCDCCCCCCgC*CBBBBBmBGBOBwBBBBBBBlBzBAw@A>=<<_;:9877G65R30.Q+)X'j%$"!5S<#L/ T',K |UGv]DOdr@)2_1_ !=#O%&(+--/12468[:='>@hAeB\CECG1I JxKLPLMuNDNOMOmOOPPOOO[O'ONNuNMMMNNANUN]NcN|NNNN)MKJzIHGFsDCBB#A@s><:'75-20.-J+*'%c"k\e ;z  <^A-E#[!#W%P'),N.025T79;\<>r@LBdDyFoHZIKKLiM{NPDQSfTmU9UVVWX\XYGYZZZZUYYiYXXQWWVV]V_VVVWW0WcWWWWW#V:U/TSRQONMLL3K0IGFCA?l=:875y31.+)&$"j 1Fk=d Q 3j!hX-") %#! !C"$k&(*,/314M69z<6>ACEGtI>KMOPRT_UWzXYZ[\]^W^^__`(`apabsbc@c>c bb%aaW``_j^^^u^^^^^^_&_f_}__'^]]];\[[Z3YXX-W UTGRP`N'KIoG3DBA3?R=Q:741/j-&+(&"$"1 eu@ i62/->,**+ ,.0.24]69H;>[AD$GTJ?LNPRTVXaY[P\^`:abcd9de\eeeeeeffsfg?gghFh:hgg\ffee?ddccvcgcOcLcJcMcGcGcUc`cocSc bbbbbbbbbNaa `)^]>[GY;W U S PNLJHFPC@=:8 531/-q+(%"][ 8}@p<97/64446T79<>@CEHKO8RUXGZ(\(]`ac$d.e[fh%ijk^l"lllllllfl&l ll8lylm'mimmmmm1ll(kjj*ii!hhhghjhkhhhSh8h"hh,h-hgggh hiij*jnjj]ihgfqdcaw_][aYNWTR,OLIcF&C@>p<:86i3^0=,5'#SZ _ Xd4HEsC@@ >>>@!ACEHwJLNQTX[^h`bQdLf gi ijklmnoCop)pdppwppspJoooLoo0oRooopp=pTpoonxmm,lkkkjjjjjjjjjjjjjpj.j)j:jkCllmnynonmlljih f|db`^N[Y&VdS{PqMKJHfFECA>=:62.H)$#  jGQ1NqLK JOIAIIJ3KMPSRTVX[^VadmfchMikm?no{p,pqWrrss~ssssssssOrrZrqqqqqqrrrqqpToo nummum ll^l8lRlrllllmmHm[m>llllmmn[o'pq2rrrrOqqpBonmlCjigdbn_]ZWUiSQPO/MIFA=9)4.)a$:.$ WUTSRR"QQRlSUXZJ[]_Madugijzlmnpqqr^rsDsstt-t3t1tsssss3rrZr%rrrr rrrqqq p^onnImm_lllQl!kll93.B(#|!]\\[[/ZZYZ[\^`Pac dgikknmn2opqrsDst`tttttttwt6ssssis'rrrIr8r7rUrvrrxrNr=qqqpOoynnmm.lllOl4ll@lolm#mmnHno:oNo nnnVn=n7nrnoopqnqrBr(qqqqqMq ppeonmlok.ihg4edbb]at`]YU=QMnmm@llelkkkkjigeb`<\Y#TaOJ|E@<"84Zjjk0k5jihhhh%hhhhjklmYn#nopxppp{ppqTqqqzqNq:qppookoo,oaop6pqqrUrslsssnsmsgsosDrrsr qqqYq3ppp=ooozooop>pq.qqqqqqqVppsooop7pupppq%qr3rnrdqqqppQoonUmmLm4m!mCmlmmmnm!kjah!fMc`\XTOjJFB?l llllkjYjjWjjjkslmnolp*pqiqqq:pppppp[pooooOnnAmmn.no0op5pqurFrszsst t%t't9tsssBsrrrrrrrfrUrCrVrmrss^sstssssr[qqpQoopp8pspppq;qr2rmr:qqxq)ppZoon|nnnnVnnnnnnlkizgoeebc^ZVS-OLQI6mnnnmllZlPllmFmxno)pSqqr+rrrrqq[ppp{pohnnwn1mmllWll$lmmnnop{qrsostXtttttt|t*ssssttssssst7tqtu1uuvv$uuutsrqpooqo`oMorooppxqqrr-rqqqYqppIootofokop@ppp[pfonmhljvifdCa]ZXUSDopZpp+oVnn4nLno oZopWq@r2rsVst$tMt ss-rqqypp%o'nNmll\kjiiiijjtjklvmo-pqrsRstGtuu7u(tttuuu"utttuuQuuvvYvvvvv-uu_ts:qpo3nFmzm6lmmJmn}oIppqrrQrIr=rrqqqzq1qqqPqrTrPqqpon`mkj@hfd>a_^5\[,qr8rZqq pap3p^pqqFqr;rstKtu@usuuButvsrrgqp}o=n2m>lFkDj%ihggJg|gvghhikKlnopqrstuvv}vvvwww.w-w%w w'w@wcw|wwtwTwvvv6uutIs_rpoZmlkkNjkXklmnopqr^rssrrrrrrrrrsttsbrrqon^lkjxhgQedccobsEsssTrqqrrlrrs#st&tuXuvRv}vv\v1uut+sirTq on*lkOihEfefdvccccddeg7hjlmlnp8qsu9vcw`wx[xxxy yxxxxxxxPwwv!ubtsrqpOo mlwk8ihgggZghj5km\opdqrjsIsssssssssttVuuuttcsSrJpon3lkjPi2hggggptu^uVttss~sttJttuUuv$vwNwwww{wHvvu t>rqomkihfdTb``___?__`adbdYfIhikn+prtvx xyzyz-zSzrzKzyyy`ycy1xxvutKrqp nvljhg~fweIdcccdPe`g^i`kmoqrttu:u0u-u$uIuzuuuuvwwPvutsrq?onmlckjjkckl!uvvuttltWt|tubuv6vvwYx xxxxxOwwZvuts q^oljge#b`^ \GZZdYZ6Zi[[\^c`rbjdgyj`mKprtvwxyvzz]zzmmAmgmnknvMvzvYuuvutu3uv_vwgwxxyRyzyyy3xxwTv1usIqUU2U_UnUVPWoX[ ])_bfiilpruvqwxyyzyyQxxgx"x%wvusp*mujgeQb_\ZSXGWMVEVUVaVWX[v^apdhJkemprtuvvvwxxVxvxxyydyyHxgwutsrqpooowopmpqHuuuuu$ttuuvw4wxxyyzdzz/yyzxww3utrEolhda^LZWrT;R+PrOObOtOZOOPRSTVYl\M_cgkynqsuwxkxy2xxxww#vutqokCgd2`]ZAWDTQONM]MLMMOPxSUY,\`dhPknqsuDvAwrx3xyyWywyyz'yxwvdu]tsrqqppqEqr/rPuuuduttttuvvwJwxLxykz5zzz[z1yxwvu|sqmieaa]sYU3QgMKJIHHHHIJKMORUY^bg$knq;tvwxLxxxwwkv}utRrmnkfsb"]YVR&NKgIG/F=DD~D!DDFEGJVLPTYi^ bgjnqUsutw'x&yysyzzJzUzzEyx1vuuBtsrr5rrrrs5s/ttttdt(sttStuvwHwxUxyzzyyxx!vusqmjeW`[WcRNIFZDeBB#AAAIAABD4FOGJMRW@\maf.jnqtyvwxxxww/uteqo*je`[jVQMI\EBd@K>=<=;(:999:0:;<>?BEJOU[c`f)jo2ruwExxxwvtroEkfA`ZRTUNI`D@2<9/75f443334 57T:M<@DJ\P/V]\8agfjnqtv^wxzyMyzz/zvzAyxwvvuut`ssis{ssss|sssksCs(rrs(stuuv.vwx9x^xuxwvussq{n?je`[UMOyID?=;m86B4z33R3y344l5Q6;78;>ChH~NU[laofl/pctevxxxwCusNpl7gav[T*MuGbAb<841f/---4-z-z-.A/147V;>DPJ>PW:\bg.kosuvwxy yyyyyQxjwJvPuuutossstt!ssosYsrrrr,r#rQssttuuvww+wMvvuLtqo&k,fa`[UFNHB:<74%1/. ---O-~..n/1/1W2f47ZDVKtR]X^d ipmqt%vNw9xNxy:yFydyxwvuu;utt'ssvstt2ss_rrr6qqq"q qOrrs|sstufuuvuu`trpmhOcZ\VOHB;b61,.h++)))e))*g*+I+-.0Q27ELSZr`fjorxuv(w^wx7x$xww#vNu*tqrdsAsstNtsrNq6njc]QU|ME=7/0+='G&$$$%/%n%&&Q&s&&'E')Y+T/4Q; AIQmYLaMgmq2t,t|tsOqn7jc\TLOC;4-)v%u#"!!"("# #y#$^%%&')r+(.3[9@HXOuVJ]rcimnprOstttst2ss;rqqkq1qCq:q#ppqgrrdr#qqpboo6nn{noop*pSpLp{q$qr`rrrrq;pIlhaoZeRIA92+D&#""}!!"-"# #j#$$9$X$i$%,&(],:0t6=EMU]dknrwsDt(rqmigb[SKqC0:3,(E$#Z"!!"X""#$#l#$ $}%1%&'+A.5+;CJRYr_fsjnpLqr/rr|r(qq,ppUpop'pFpHoopq^qqnq/qOpzoonn?nGnoWoomo&oop:ppq qq oo kg_X6OG?N70($F!% ( z !"!q!""b"""#L#%&\)-n3:AIQTX_)ejn oq9p[olbhb2\TME7=D6 .*&$#t#H"#####@#n##$$%%&),2>8y@0G{NVC\chlnp]pqppiooXonnno!olooSo_p"qqiqOq4qponngmmn6nnn"mmzmnhnnoo oAnDmj3e]]VME@=4-&P"AF J v ! !!!3!!"#&)/5=GDKRX_chOjllljfa\kUNGO?8p1,'&5$n##u#k#&##*#b#t##$p$%&(%*{/5O o!#9%)-2:6:x71.*.()&K%$$$$###d""v"i""#$(-14<2DL8Sh[a^gujmmmRlkk&jjpjkDklm n-noqIrtDu5vsr?poAnm*llTkjiihi iijFkkll!l&i;d]W O7Gw?7K0I)v%""!+ _ [ ` b!a#T%>(j+0e48;=?ADHKtO R]VZ^ib6c2c`P\IUOIA;40/+)['&%"$$C###b""L"<""#%(-l4?AnCAFI9MPxTfX]Iacepb_fYS^LE>8.2-*'&s%$$###F""6",""$%>)+.5=F MU=]ceiulonon-mLlll,lzmmPmnp^qWrksuHvwxsr5q"oo8`1-1(&C$A##n##i#G"""#$u&m(U,29AJ QY`fPkn{ppponmmmmnlno,pUqs"tWuwxSyyzs qq*pMoooto5nmm6ll9l l4l0lm3mnnnmje`nYSKDv=61-+m('&T%%$$:$(#$%(x+W/38=BnG=JMLMLLAKM.NR@U>Y]a:ehmk(j|i'd^W*OH}A':d3p. (&)###l###~#/#O#$&(+/5>nn&mm8mm)m:mnLnooonCl8gc \V}OrHLAt:5V0.+)'V&%%$$$&&'+b.38>6CHMQSTSS!RShTWZ4]`dlhjm=lkfaTYROJC;4f.(%##r#,####Q#$<&'*-28@&GOW]!c\gl moohoQn~mllmnnnoprpstvw6x>y:zWqCpbpoooooooknnYmmmmnVnopp#paom`ioeD_`YRLE~>9W41A-+('&N%%i&&(+I/39>DJOU XN['[\[cZ[m\b^`c^ehBjlo nmhc[TLE=6/)&$ ##c##$#$%'*F.1u6E+KQV\5_bctccQbcce0fhjXkmnppFokQfy_WOG@8F1+i'$$.#$'$9$$%y&),04:A*HPWZ]bGfil:lmmllk7jkCl@lmnwoqrtu v vw:wx{o2nnno+opp|ppnoo^nn_nSnJnooop!p|onkhc^YQSMGBk=]9Z5$1.-+?**{+-0m49e>EKQW\ae,h0iiihh{hijlm1n@onpbqqq.miibd[WSAK~C;59.*^&%%%%&&P')n,049? EMhTZ`dhjllllakkTj|jAjklemOn/otqrtuvvvvwnn?nlno;op>pppp6oonnnonno^oop\oo`mjif5b*]RXS:MHKCQ?0:74K250&//X02K59r>D^JQDWe](afilmnmmKllmYmnIopq qsIsYsDp;lve_$W:OG?81n,(']&&&'(%)+/3G8@=8CJ^QXi]c7fik?lljlLkk'jiij k$klmoOprtu uvLv_v^vnnznnonop6pppp-ooNonnnooWoopoo{mkh.d`\X>SGNOIEA>_:86x55748<?DIOV[aeiSlnop?onn9nnBn8noZpqrtUttqnhb[9TLWDB<51,+ )p))++.0V4)7=B[HO Ub[`adgjhknlRlkkWjjiij%k*klmo\qrt tuuuuuoRnnoooop=pXpWpooo[oSo1o,oIowoooooQnljig=c`\XrSOiKrGDQ@>F;;::<>UAEZJTOYTZ`ehknp&pqq#pmooPoyosopfqfrksuuus#p>je^WP0HRA<:r51q/---/50I2599A=KBHNT!Y_"c(gi!k$kl%kkkjjiijgk]klnoqYrt7tuuuuuoo5o"oJoooopp.poooooooooooo'nmltj`h_ec&_\WSP$LIoF CA@@cB]D@GKYP TY_"ch/kmnpRpqOppGoooLoppqrusuuus^plzga[XT?M F@y<6864 4356=8;x?yC{HMShX]b+eghjkkl7kkkvkEk$jjkYllmKnspqrt tuNu6tt spoosoooooop2pNpEp7pYptphpvAEIuN:SNXl]YaHeg~ijll5lklBl(lkkkllflmmnp/qrst!ttussroodoWooooop1ppppq qq pppl#lmnoop!ppOpwppp+oo nnEm-khfbJ^#YWTPXLqqppJoooooGnmm#l>kPjfiShhsi ikmoqsOtuvwexx=xwvvuvuu:ttJssst(trttu#uv vqvvvvvv^vXuu srpooml2ji[hhhviijklQlm9m1mllmmnoppfpsppppZonnwmm k5hda^\WTQLGBA0G2M6SKX^LbofhkCm6opqqcqrr0r)r,qqqcppptpppptonn mElukkjk|lmroq%s8.28,-+2=9?F?LRW2[P_|bf2hjlqn nop ppppprphpqqrWrrKqpponnnoovpqsZtv3wxy6y.yp+q^r}sQt tCt_t#6.' 8:m i @ "',287$;@E3IMQ8SVXZ\0]_"`lacejgmijkDkkCFIL]NmPR{TZVWY[]`Kbsdef2ffBfEf eeteddodqddddpcba(_^]U[YWUTUSQONLLLULMvO5QTFW[^adgjklm=mmNm,m lm,mzmn9noopp/oo>nemmmmEllllAkk#j>igeBaP]PX-SJM]G'@91*$# f 2M!&*/37;m>/@BDFHJkL@N=PXRU[WZ@[\l\b\\]\\\;[[=[,[B[;ZZYXWUTIRPNPKI-FDC8@?<>==>[? AC?FJO/SSWF[d^b6dhftgmh\hhi4ijjkaklGlmnmm:l kj?iihh gff dcbK`^![$VRMHYB:<5K.' x ,&a T #(&,025768:<>@BDG}J4LO?PQRRRSRRRoQQPPPPUONMLDK IHECA5>=w<5:86420/ ,*)A((b)&),#.2S6j;(?CHRL'ORUWYZ\u]^`aUb\cLd eeedca`_h^c]Q\ZXVU3S5QGNKGDh@m68J9k9:[::::::]998v77m6543021/.z,+-){'&%#E! q  |!-#.%T(,049=;ADHKMPOQ~SYTVbWY4Z[\]]]\[FYXVUTSbQNOLKIFCn?;85710,&!-&c pza7] O * ,.Yh "$X&)+y-.5.|/ /J/l/V/_/>/..#-l,++N*N)'&f%K$""!_tNeb\Y3_"&_)-f1>58;>A?CEGIKL|N OePQRORERQ ONDLKJIH'ECA\?=;7~30-*x&w!M #dPjq4ma<&>P "  M#q!"#w$$"$-####]#!"""*!O s(v-9n:}Y!j%(,U/25a8%:|<>@BCDEFqFFFEDCB|Ag@}><:h8v642v/%+a(C%k"lT QC U V_4RJC*.u2'_ba p FhAg&#|U @ )8Je  s NRUL B |0K !Z$u'*\-#/1357&89o:":^:::::9y8c765W31j/6-,*'A# 3%D m hhL15boD ^PVaO D  zIwA B h & ?"J R |"%'a)&*+,-w../5///t.-,t+)'&G$# chUR  OWql;gPncL%T2S%}@+#S!&rae  - 4 - p]w7]dO_"j&5 [ \cH z!!"T# #$%X%%)$q#! {:[AS- U > +p#e(a#0R^`(eTk%jx~[EhITGaEvO! x9\yK|% T } CQ\V.@;<wU4E]@FIv|{RbU)*q#JTL0   %0{zh^ e l t O _$FrI  oWu"9Z77V6Y$If&zlqy!EVSTX/l1~-UebL@86/,Kr"d.~iC?Z4;GaGz)X+A"yNaJ4 `7U3wto+W1YxFv>&kwl]N>3"wJG^Kq3!'h(hH"sn72?k] 4TKq?)2MeGxS~3~7WI\'6_>CMw*U+O^OI;0m>*g2^)[!(f5dHouo>!*l_@?!*~Q?T[t.QTsQ]~odCuhXCS4zgMGG`{_5'=e}&06aWH!d A}}JLc"Z!y`/jrXw E5lr1.~gt4g0A t}iYXZq 388FVj?[2ilbcxKzqXn9:wh%gSdf2+N0fi8P)PZ"92Ia<bf~I$O . {pcM  c-D~C4@?AyO*PNp]{YR=Lk1@X!jUSB&nKqPx9EeoB%%%@d.8(}T)&4[}884h'1Fg!A<TAMtnyts?WYNN{fPX- iII3FY5tudepf<0<`s'3%%}^;H\0%zH?M|qJ_1sGgNACc}.lOk#H_\Ur|I3UKQmT|*(hxWOKehG>OXo #(86#mT6)!5MurN5'C#*xr ny<;*;\a{UIp8[ljmisa(,II<;IX}hYg=Kg(kNR\xniiz&*% fQ:A]^C=HKRPfu&~a Uuc< rWHXw~%E`jcXVsyLNWF9=Mv~o}"I1^Y VP\ }{pryfU?=KgwmRh-&@dyiJkD?Znuj7Q[^VLMht^/BLB8<UuSgN;!zoR=?FdM "'1R\ebfW8pKEY`a_,BNYWNIU`fP.SaP=HfzZGnLauaR=:=`;%{3>V^ZA% tXNY_`^&9NY\TKI^a:GmgMFVu^NcW4sb`dXQNi$BATG(%u^V[\P&?UkkVDVg]<QopYFSt|_L_N 5dJRJ- yfci`dsz6 Dq$5F<-6xUMG* -GhtiSPVaX+'^oLCZdPWxl;'"Z _wl=*voqoy7&[sYnBJ?3-~J7)/NgyqV>EQG0:jzmZSbpafz{X/;qFZ@!ytr}]<.Gkncm$9(+(n8,DlwV*#6MS6#Fn{bR`p_e~pW]\~dQ+|uqx~nA'7]kKP{$!0'|H#   >SF-%,9C=3+6Qm|xfd}kfk{*W[^C'wr~wP?Hl{YTtsE'  ! "/44-#$8KH=<Ll{ier";PKA!~f\Wjk^_   M(  )56*&;TXOFLd|us+4>1q^QWd{rdl}  d1  +973>N[`^\^m{~ *,"oaTTZiwzkfo og]C#   $%/8@IV_caYay %r^YXbmx~ywz| mM7!    /*&5<BNYacZ_|~z+*&nadlw~{{~cJ0  FE|6 =V@^jK5R/:c. /eX/0 H Z %  9 A < %    \ 4 * x v 9 4hOB"KxAV ]$K~`v@  Sa|FwJ'%Q]V=@jB4W ^ C x r b % i )  < Z n _ @    & ' + . & 2 R H   B G U q : } D TCZ]p>pO}(q ^V7Y^S=n+ { p % G q 8     / A E E % z  4 S w .  > 9 #  , 5 U t d j / 6e?3 FgFX xIV'yVIb'mK7 w ) | V U M 8 t c I 7 - / , 0 > @ 8  j + ' e ! V z ~ > ) 9 #  1  L X  B $reN} qn<Q9-3v@j 4 > K    x R '    ! D k . X t q 3 H , E b e < " * 1 c * '  9 J \  |fW;--WXXCeLni;wi7np!= q ) f  k D j 7 & Q O 3 ' _ a 7   , L X b ~ h  ' D Y U H 1    P 5 G H )  $ 0 l M } Y0,y[|]/icdkv7L| J { v  O /   5 n g  x X ; *   VT)+>SZk<        : c  q  6A^=Rdr3z)mO!~{  { !  - " $  P b G U 3 f9epc.'\'}{SmQ58NT`r F _ 0 HsdJ:rp*'HJVo  ^ V _ L x U \ x j bG!>jOr]~mS.<s1C:MH UL  9 ] v  > ] s X >(;%*( > s < 9  g )  Q ~ x )d+CQ&/BPLW*Ybm}W(Ce|w BR 1F 8]iQDb  %  + - i E @ A 6W+ 8 < d M  i k  X d Jy?.2,1W >d^*_=oetgG1,%,8GOSV^a|DV or sxe,+=  ' < Q z  0 ? .  , }  t  D ] v o s i ; 6 E t @ X K !  ) !} pJw&2Pa#G3E-CQWJ="(?[1~`>^(}{<,id> 1 w c Y  - u q j j 0 4 , = ! ( C E 'ThF(2g DcVP;#o/4<9V+ 5O^jyaq"  "Y k [ { ~ a V v x > U FzRHW|}HPg8}\nRYr @jm8f>"@b|vW;bG=Biv&.;!7CoJ0h q 9 ;  h 3   &7uL6a=d[;Hyv` fc%`;AKD=&C }jiw Mo)jadcK+t(c}@ ` \y{O(AHEo=! ?*]Tkb9b ^HV[5(tB~X@'!#.62$   )]' Ay=;aQ\xFZZo?.mNm {0z^F;z,!"5*kv5U{H3'>KoG' 3NirdO7Y6#r-tj@!NZKzN'QTtmdEzYL6`G7V<YE{X:#$(Ah  ( 1 %   Sox: c Vdk~^:pxEHysKg#D,GEjxe?4S\k  p x^VOVWf  _   U izUNj:gJa*>H TdO*E6F^;uJg%XXOW$^R l  . Q )!/8Q.Gl&)Xmo*U kv4 Kt" rf&5a/hxuu.qqcT/aM/2Tm%b'p    ?|Q !d"Q# #-#N#""o!!i w ^!AcnN *S1Y `@'M <v0<^`` 0I8I/keRGE.1 d V J+Uw E!Q"$7%').*,:-.3..n.@--P,,*++,**w*4)))))))))j)H)0)1)E)U)K)2)) )i)*N*,)(V&$" @ =( M g ~FH{o%Wc?=x PCQ ] h E<) #!#%'"(V()*X+x-0.024s67(8?8888H77y766c606555555555n58444j4T4O4?433x3Z3q34,4%321/-+m(%"0 :>|o rn`1 $Z[0NKX | e  ^$mmR g#p%')+S-z/12344z5V68m:\?r@AyBIBBBBdB6B"BAAABBB"B.B'BAAAAA?@@~@A@-@$@ ??~?>>j>b>}>O=<<:9t7T51.}*'%/"! 9' ^ & tx{fX}Z8?Whvgx:%- n"%(+D.0e2D4u69 :<=>_>?I@NACEGwIJ@KdL*M MMMMMMNNMMMMMMMMM\MBMLLL?LKLL L4L=L KKXKJJJ-IVHFEDFBV@U=p:(63D0-,2*)>'%#!o%w  \+WKg'# pF  !D#"%')+.1s4\739;=@iBDFiGHI.IJWK`LN[OQrRSTU~ViWWuWWWX!X7XWWWfWOW1WVV_VUUUUFTTTU U?UUUUUUUHU(TSR5QONdeGeeeeeef feeeeeueDe ddKccebbb/aaQ````aaCalaaab7bbbbbBa}`K_l]\.YW@TRzP|NLJI GDB?<:7531/-+)j&"t[v SCp?==:9766S679;<>@C&EHLORUWZM\_acdwef{g|h/hhi`iijjjkLkkkkkkkkkkll9l8l4lkkkWjj?ihh@ggRffReeeHeYeeefef)fg_h hi:ibiWhhgfdb`^\ZYW/URPyNK]HJE>Bn@=>E<:8630,(x#< CK-GECBA@5?@OAAC$DFHJMOSVrY\^`c7eTg5hj"k:l8lmwmnn n-nAn3nIno o=o.o$nnnncnfn_nno1o|oooeo6nnpmml0kMjjii=hhph1hh%hchhhhyhphiXijklZlmmlmlkOj(hg"evcb5`^\UYWjTR"OTLsJHFECA>`;27%3.*)+$6s  ^RP NVLLJIIIJMO.QzSGU>WyZT]t`cregixkm+noupqrVrrrrrrrmr*rr>rerCqqqsq'pppppq0qqqqqtq-ppMonmml@kk`kjjjjjkhkkkkEkkkllmnop;qq'qp1oxnymlmkoj6ig>e:b`^S\YWTRQ\PO;M)IF(A=83[-(w#[ tXV TSSDRQIPQaRTVYZ\~^adCfhjltmokp~qWrsstVtQtat.sss/rrlr7r+rqqTqpppppppqqWqqtqTppp!oo"numllkkjkZkkkl l}mmmmbllwlHllmCmncoopq?qVppEoo nnmqlk|ihfHdba_0]d[ZiYXW-SPBKGB=8%2-($ ^g\[ZZ@YXXW|XYD[X]6_`bYdggikmopqrs&sttuuuruOtttss9rr0qqq9pptp79510,eLeMeae|edcbc)cde[eghjylmcnYopq$qDqbqqr]rrrrqqq@poo nlnmnmn nKnoIop;poppqGqrKrrr{r.qq9poonmXlllmWmmn+noYopoouo"oo!onnOn!nooFnnGmmm)lllmmmHlljphfdb`#\Y>UQMIEBhiiii?hGgghmiiij6k lSmnopYq#qkqq(ppppppSooofoSo6nnmdm-mmn_nooppq>qqr$rrs`stBttqtNsssgsrrqq+qBqyqqqrrerssDs rr-qqeppgoo+nno'oroooopzpqCq*pppoo0nnunmmmmmnn*mm;ljigf*dMa_\ Y URKNKjkYkkkSjqij8kkll?lm/n'oopqUqqqqFppRp=p/ooWnnBn mmm]llNlVlmDmn3no\ppqr6rsstssthttttt`t>tsss3rrrs]st t)t_ttu%uFu tt(srrqponjn.mnnntst tttts/qponmylgkjiihhThkkklElpuvv,vuufu`u}uv"vfvvvvw=wx wwwVvvCutsrqon_lsjchBfLdb~`__$^~^_`9asc'dfhVj^lnqXsau?v\whwx-xvvHvv%vmv5utrpmn-kifkcaF^][/ZBY}YYZ[c\^^`cfi(lnqs3tuvUvwwywxx$xx xYxxxwutsrqpp+opppKpq>qvvvvpvtvvwwzx xyy^yyzOzzzzzSyy;xLwvju>sNq-nakhebM^[YW#UiTSSSTeU5VX(ZL\_hb6eVhknq s5touuvzvvvZuu]utut[sCqnkhebS_&[Y;VTSQQQQARKSQTVmX[;^behknq'<<5?@BDGK/OTZ _3chltor,touvvv\u1tps qnkg+br\WR=LGC$?<:9[88889;=>A`DGKQV2[o`qdiflpSrtuwxyzz{{Y{zy_xvvev u5twssttxtttu/tttuPuvvRvwxJxxy;yyyymxxwvtrp lh3c^sYYSNVHCl?>;9765D44568W9d;72-[*B'j&O% %%9&&'(w*"+.1T5f9}>DK9QW]c:hlzoqt:uvwxfxxxtx wutttvsscrrrsvsssYr_qqFq>qqpqqrqrsIssttuAuIuukumtosdpmhcc\1U`NF@ 83r.h+)L(''O&'('d'()P)*+.j05:ABGOUV^ej^ordtu usar#o*l f`XPH@92-d(Z%#1"!"@"#$-$%&'*,M/3m8>!DKRhY^dimprt uauvvwvvPutsssosrqqqrrrrtq$pDooooopTpq9qxqr-rs_sst@t>t\sprolst\tttUtsrror?r=rqqpqqqqqponhn$nVnKno/opp0p\pq9qr rUrrrr"qjnUjdK]VNDF7>47/*f&;$#<#!"#\#$'$$%$%a%d%&F()-18O?G OlW_@exkos@t tsnrolf`XFOGW>7Z/*f%#!"""#d$$$$%%^&J'#)Q+/4e:AIjPW>^'chlnp q3qr=rpr~r2qqqQqqq(q@q p^op(pppponmmsmmpmn\no nnnoGoop(p|pqpsolhbS[SL C;4-($A#%!!!p!""~"#+#z##$F$&'i*.4;QC@K3RZd`gEkoqrr$qoelg8aoYQIA891,'%#)#"#i#$F$$$$$%&Q(+*-28?LFN&T\agfjmnoopxpppYpoooop1pp}ooop|ppponmm lllmWmmm lllm@mimnnZnnnLk1g`3YmQkIA~91*8%"S! !!Y!!")"Y"v"#$$'+07>F1MTZafkGmooomkg6b7[SKCh;3-(&###i"#P#{#$$A$>$C$J$%\&(,06^NUF>7"0+2(%$ #)#I#0#b#####$\$&m'+!.5.;C$JQY_JeiKl6lmmmmmm_mmm7mmnno*ooop)qqr%rqpnm"l3kekk jihhgghjhiijkkki2e`^WP Hc@h70)l%T"W!!0!@!9!f!t!y!~!{!e!n!!" "#%/',17=BH M$RW\_cdg6hhfd;^XQ IB:.3-)&X$###n######k#$%g&j)w-.3Z9AEHPEW^ dhklkmlllllOll-ldlmOmnooppqrsMsqpanm!kkjjoihgfffgDghhjk"kJkiNe_YXQ@IA9q2*+&#"!!!~!!!!!\!2!F!w!"K#'#&(-!17+;?CHLQVYt\_bdgEfd_ZSjL~E=96^/+'&#$$Q#######-#@#|$%s(M+2!8o@ GOV]vdXhl lmgmmllglkl+l{mmn@oVpUpq'qsttuqpZnlkjjjHihgvffDf;ffghijkkifc`+Z R`JB:3H,&'$5#%!!!! i M !"#.$D&)-2=6:#=@ CGLOPTSVY^aeufe|`\U,NG?82-Y)'%/$$8$$#####"#$&$'R*07/>FNVM\dhlhmmm6mll=kklLlmomnoqqrCs&t;uNv1vqpnmlkykWk2jihggJg"gghCi"j$k0kvljCg~a\TM/E3=5.)%$:"i! k F L !"$G%(,:0h48;h=h?B`EIMmPSW [=_[ceaea]VPIB;4/?*j'%$$#####{""#$.$'+1/7o?FG?OHV]dim0mnnmm~lltlzmmn?_AcDGyJN Q TX]b!deb_'XS L[E>71,7)&$##y#)#0#:#-"""$$'+18@HPLX^ejn8nooWo.nmmUm^mnknoVpqLrstuvwxyq=onmm7m2mxmmlZkHjPii;i4iiPijkllkxid`@AB^CE9i540-*('B&j%f%p%x'(,u/4w9A>CHMJOQQQEP[OPQT#VY]`dgjGihdN_WPINA:^2-"'%"# "##$1$C%A&),1/5<*BJuRJYx`7e#jlopoo]lj3e`[XUOID3>:q52-.-*)(((*-X1a5@:J?EhK0PTW@YXY\Y XHWWXwZ9\)^acfikkFjf.aGZ%SL$D=5/*'!$$$c%%_&&( )-Y05:@GrNV\pbrfjlnno$nmlkktklmn3noq[sKtv2wIxxyzLnmmbm.mn/noooo\nmm-mm7mnnnohpppn+kgc^YT$NIxDe?;7M31/.-,-A/2p6;=@FvLwRhWC\^````+_q_7_M`jacefhjlllhed]fWOH#@9 2,)&&N%&I&'(*-L1B5&:C?ZEL9S"Y_dh'krlnn nmslkjjmjl'lmnNoqS X][adfggBf|ee!def'gHhJijlEmmmjgGa6[ET'ME>b82.o+=*Q)G)*+,/2e6:?EK7QW^bgilCmmmmmAlkjiij[kl^m9no^q'stuvwDwwx_nSmmmnpoopqq]pp8oZnnVn=`<^:::=6?CHPMShY^bg8illzlkjiiLi^iOijkln(oop"mje_XRIKGC=7v309/-..0I147<@PEJQW;\b,eik|m2mcmllxkjj/i?i-ik klmoprtuvvww&wson`nTnoonopq)q_ppVoo nnnnnnno0ohonmkci eb_D[X/TQaMJGFD@CFAAB&DKFJjNgSqX]bfjolnno1n.lkkjjjkmnioqUqr"pmRhZc]fWOPIC=:065u44b468:;#>%BNFiKPV\^a)ehkilmmmfllkxjjiIiIikklmoprtu}vRvyvvjvooEoo4ooop{qq9pp[oohoQoJoKo!nnnoo:A_DHLQV\*aaeRhjlmnAmm-lHkkjniiSifikklmo3qrtu|vGvNv(uupp(oopoop\pq*ppp op pp oooXoolp#qq!q)pRommmmmnUo^pgqs:st%rspm!idi_Y3SiN{IFCB@~@@BjDbGJNRGV[`^dhjlmrmn(mm'lhkk~k jjijkklWmn oqhs tuLuuuttqpppppMp/pqqrqmqppppppp"ooo^onmmkj5hrfeQca_]q[pYXWVUTETUX=Zk]J`cdfjGmoqwqrqqpondmumAm3mnoprswttZsqo4l0gc"^YTP|MvJHGFFH:JQMPTW[`d8hjhlMlmmmmm5llhl=lkkl9lm8mzn npOqs tUuuurttZt,q}qppqppqqrrArqqqqqqmpphooonqmlkj hffedgbaP_^]\w\[*ZZZ\*^m`lbegjm(oq]r|rorqqUpXoNnYmcmlmn^opr sKstUsspnjgBc2_[QWTRP8N*M|LNhPUSXUX[_bfsikYllmPmkmmmmmmmmmnRnnno?opqrsttfts[rraqqqmqqqqqrFrsAs>sss4s;rrwqqpYonnmlEk7ihug2f-eHdicOb=a``aGa``asbdfhjQln,pqrs/rrqqonn m_m?mImnopr s3sttt\rqnLkhxe3b _"\ZWU~TjSUCVYe[)]=_behk#lFmmmBm[mmn$n{nnooaopJpptp@p@pq:qr0rs%s.rqppypp~pqXqrrr9rs@ssssttss(raqponmlkkjhgffeydd c'bc|de5eefOgiVk lmo-pqrsRs_rrqponnmmmno?pq.rhstsupuut\s"q#o0ljPgeca^\H[Z[\^Z_]`begiklhllmm@mn noAoop%p~qqmqqHpppq'q6q+qdq)po^mlkmoopqrKrgrrskst3t0tjtztotsrr q-p3o mlkkBj]iZhNgfff:eddeEfghinjjlnn opqrs'stss4rr-q*onn mmnDo-opqs%tfu_vcvvuu-srvpo4m~kig|e:c b ab bfbcadTegli2jl lllllm_nnoppEpq qrrqqgq#q0q-ppNpo3nljh"fh"jZlnoqpq&qqrs'sysst tssWrrikxmn9o0p'qrt(tuHu;udu(tsss rdqq1ppq)qrsIttuvwwww|wvv5uu tsrJpanm+kkji2h8gghiijkal%l{llQl lBlnoooppq%qqqqnq0ppp nlkhde@aP]bYVY]`dTgPjFlmnOopqKqrRrrrrlr qqrponumlllTkkjhjii|i1hhhijlnCoq*r)sPtQudvvuvQv*uutVssprrrcr~rrst'tu,uvEvw#wZwAw+vvvFvuuotzs qRpnmlkAjihi!ij-jk2klXlll@kl5mn5o2opp:pqq|qqSppoon4l^i[fb^YTP]LNOTY<]aehjjkmnopqaqqqqqqqoponnmmmmDllkkk`k#jjjkllmoqxstMuuv,vw@wwrw%vsuutt/ssRrrrsistptu uuvvww vvvvvvv;uTt5rqponlwkNjWjOjkFkkl lXllllhll\m,nfobppsppq6q|q^q p^oonblLiea]*WQL-GBDJEOTY7]ardtfshjltmnouppSppqppaonnunHnsnnnDmmmsmPm#lllmn3oxprt6uvwowwxwwvvu5tts`rrqqqr\rs#swstuTuvmvvvvvvvv6uVtsrqzon[llknkllllmm9m`m\m1lllmnopMppq'qqponnlkBh7d_ZU3NHfB<7 9?EKPPbUY]`cf hjxlAm\nwoooplpnp"oonnooooooWoDo4o'nnoopHqhrtuvx/xy*xxxxw'v6u/t71+/4:@nEJO[SWZ[^*aud/fhjklmnHnnnOnn n0nospp

BG K*OSW[^ace}gh%iij7jklmn.nnxnVmmmQllmmn;o,pBF'IGKMOQKRTVXYZ9\@]_V_`2____J_^^^_`P````q_^\ZXVTDQNLmJJHOFDCvB.B>BDbEHcKNR~VsZ<]acfRgi}jjjjjjkDkl8lmnoopoonmll"kjj'iiBhh g}fFdbr_[X(SwNISC_<6/)+"u(= r ? }#"&.*c/.37;">@B$CEGBIKLNQRTUV`V?V7UUUUYU=U]UVaVV|UUTTUS9QfOMJHEHBR?c<:<87643X3457~:+<@DI`MREVZ ]~_bc@d@de%effgHh'ijkol^mlkjishfgfedUcrbac_^][WTPLH/C~=81,&5`5 T rY$  i0$(,0:3468e:';=?ACEGIJKKKKKKkK/KKKPKKKpJJ"IGEDA?<:C7w42/\-*)=''(@*'+.159>CHMPTWhZ[] ]^_`abce f^hiihh fhdcb@`_\]\NZXVUjSPPM.IEjA=8 2r,':! G lt[ .H ^|]/"B%()+Y,.0R13579;q= >-?5????t?G?*?.?G?`?y?G>>M=<;_9754 1/-|+@)&$"{! |!#%(,05c:>BEILOPQ#RSUVVXhY[\,]}^`aba`^\\ZYEWUSQOMKhIG^Dy@=[951,'s"=  .FP 9 LFij "$&y(/)+e-k/c162]3]3333333344 3|2110.-4+)(!&A$Y"b ja<7e#&+/o37\:>aAsDLFTH;IKtM0OPRASU.VXYCY|XTW3U\SQON5L,IG7DB@>;841.=*&?!{ KMQza<aZ*q|_ P JTh@+L "b$B&"'g(a((((((())G)M('&%$#u! zBK&[&?YCO $(:+.2k5z8M:u<>T@(ACEG0HJ(KMMMLKIH(FODC3@>S;9_7k5f30(-)&# >. l%* NIfm?+XK  v  faLdZ"q8SIDEIJ)[ D G V  s"&!)=,+.02579X;=<=?U@jAABA>@g>=;:U8E520.,*('K$:!:h Y P%PEG>C<,L eq ap?gt' wM  mGj K!$&|(*,.01234556@55321,/|-<*(A&$"q7?7 V 6iX@/ KDN6S9v</u 8 W c * @ !s Mz ) Wj "$h%&t&'()*+>**f)'%#!pLdx6< t c,6 a^D5uLa*qj( RnE' }(q 5}Qrj[MA3ItG O Sw+!_ !T m z7 ^ uc_4Z9_3 ~BGbvpzU9'YW/j6&"]7qaRLDCEHO@1tvV E am[% s:z=6x$8q]L`(rWCz"jekOYa%[kA} $4.' < bz7 v s= * 9 "qm^w?m,9X4b'_y0vjj%?<o| nfO3XW.VxyZ9*&Dc5^bVOy9,<68Ih %Z 3E 7^bDt Q7gRlkx7)` :fBzDBoJ2*)"~Y:mJ~_x}ds+mYW/n!jh ;_Hn?&.OhZf*w|ZW{H{< i7,3p%? ]@YpeS6( }CPIk$H;*~R>] s+ |>ZrQ`{> q]S)U2mZ[Uje>"G}.BQ[zDA(~VZ t2}T!{g,u 'h s 62mx<4cw -i#.{zdWYQf<EMrpSN62{rs cv36vi"j_$jm*"U 9xbs|%k|))|pZYhdj.A+_Lt$ ?D6j/pO2 V7jh0)F*:@H&B1Cks`o8-"*K rdjOU}NQO2|6tB,bgHW{R>5o O`1NK!1.Om;\#gT4[(1~r`8*8s3.pAIR;O\2XNqY~^XFUv?N]&gLU@)OmT{?I]pC,21In4:, f;0@f B+R 8;Uo!FJaJRxmtxsGacXWnRX+kS$I9P1_<neWbopI<Ilz2?.$ycI Gj=#g,#GviHo=wSqUIKe3lOe$Lhd^N9ZM NoR}% @+m}{KKLirSJY_t/2;0mO83'3JsuVB',>{!xu|EG6Iin|YNq7bss}m26QJ73AKoh_qBJe gPXb|wqq **% cJ;Ja}pSEKQ][kk'o 0gzmIt\Qb#HgqiceY#SWB48Ent|#O/YNUR]wtq{~oaNJQhzexQl6/JnmO$nGGdwzo;Wbd[QUsk:CJ>6=TtYpS#AwqXCFNkA~7X`f`eX9oII_c^[0FR^_WP[fnY"2R]M;C`x`QvQ! ZyfYEBFh5q$9DY`_G(  mSN^`[\(;Udh^QLagAHg`G<JkiWfZ %pzffmaZXr':&K^P0!$|p^Y[ZS-G_uu^I[l`<HgjQ>MqfP\R'VJRK0%igofiy8 <l'=PF"/8wTLE+ $6Mo~s\Y]bS&UzkIB[hPRso9!U \tj>1"vpur> SkQeDPH%40 ~I6)$6Ws{bILSH1 0`rhWO]~q`dzwS+:qD[H+}su`E3Bc{f_h%=/ +*n9 %7Oua8/>UY8;d|t[IUq`f|lV_Z{dW4 |zswtB+?_fGMy'&4, yI' ""'CUM6,/=G@2(1Ji{ye`}kej}|'SY`I*y{T=JpuQLl  mA& #%"184(#8KG=:Kozjdl7QOA mcXefVUt  L% !  ,41&$8NSLBGc{sjs-9>/yfZ]cvo_gu  d/   !-7639DQXUSXiwlt!-)" }qla^cox~~lbk smeE  ")$%/9=BMW[[U`}}rp%(o`b`gr}~xwv  xR6$  &42%&7<?IT]`Za}xw~}|y/1)nbhnx{~~v}fN.C>y @ A]B[_D3O)0t[%0g h>3 L W !  3 < 7  d  8 ,  r f = ;mJ< Jx:U Z&QmB Sbw JL$"NXX26[+*L Z C n + n .  3 T i Z =     " " 8 Z  O   ? J Y x ; J R@[\o>pU$l _Z7W`[G!w.j~ i # O  v @ "  % 9 ? ? ~ t ) J j 6  < ; & % 1 7 T z ^ f 1 6b</ DkQ_ w#Pe8!Y<KqN9  q ( w T V M 6  | k P > 7 8 0 , 7 : 2  k / ! [  J s  ? ) < %  )  N T =~tmU{ ym?T:+2~Fg ) . L      v Q *   7 \ ! P y x 9 L " 2 T g < & 0 3 ^ " !   : B Y  y l]<,)Za`Ee}Eqh7wl:m{g; g  O  X 2 Z *  J ` G ! ! 5 d } ^ 4   B Z o p % + I a \ M 4 " " O . A E )   ( g M o G'/yXi%ccfn DJ H  p m  E   ) b c  } d L ;    P nD 2Oc|% +g          1 Y u m  x <E\D Qdl/w2m[.% o     , I [ ? V 5 n;]dX#9d.~]Os[?@S[fr @ U : N|g$G<qv38ZZf{ % | O K T D l L W u h jU 8`DnWu^@2P|:y-=RR"[A  9 a r  4 Q q \ D6H"(. 6 y 9 +  _ $  > d a Q8mA%#+06@>G[]dqqA/OnZFY'BG2\kUMl  &  e F B U =T/ 7 > j R | ~ " U X?o0#.+7f8%Ljd1X5k]j}vS1",?KS[bgnp+Zxi vf4-7  & ; L m : I 3  1   E ^ x q x t K M c ` c O $   kkLv(7Tv2@`7~F.@IK=2!=<jF^v~A,`\9 . l a ; z m h n 1 5 + @ #  4 R Y 7UfG)i9cVRG<) K 25,m= 0L^iv~*q(rU   |  f { } a W t v 9 S QtIDRny<<pW/|~ nz6gd)|N7QlhLo)P96fx$)3>KuP;~  8 7  f  1  % 8ZRAS*XX7@nnV &9{,6EEB*r6v <J9aP]"B* s<nW m `zvW.M`90}~A .&YQad=d L!4mH$`J2$ 6z,Y#W[es@Z_ty7&H.\ 9{[J (J.w&dgYGzG.xltPV_R?/0:<9.+7KY^iU/X,RSO~#9lj%"7t`u<5c]a-}P%RGln_JHg,"ZA)is\ U$p9zC`myrQuO4&.8,/5x]_hep}J1~}^KvoCcq7<3E\]9 c[c + X   wsdk7 * k w p y H  6 q !s"VbgtPIrB`CT:`Y-yC'<(?#tlMG-dcODg 'kuJ \ j  5 Z^j%i&y V^!V= u/~tW"B&uB}yn I+H.#z1m(P 2  $,^2;[%S " a!)!!!!!!4 N s?'_qGTl3 %@_ ~ ! F9$@#Z""z<W[8Bu j7V5J:({ Y z Va|pkg y!#%d'()*+,3,,[,/+++E+ ****[*6*)))V('&%%d%]%X%%%&1'!(s)n* )n(&%R#4!~PK  +< vdgWc$) vJ.Si4 o o6 "J#%2&I'$''(L()*,.s0F13$4G4566E646'6 55666(6.6:6/6%555,4o3I100<0000700+0l1;2w3m33k21[0&.S,o)'# Db O ` ZV;E=2&LLW( Z Q-  iz #&(|*[,./1512|223@346679;5<=q>S>?@@i@@AAEAyAAB-BSB|BtBaBAA=@d?=<;;;<;;;<={>#>H=<;:9Q753N0",)&c#! hW s u<dal<x[1@_qr"( s ! -IkA7r"J%(+n.d025789q;,>@AuCDFGSHIIHJJKLLqLM3MgMyMMMMN MMMKMLvKJUHGGGGHFH\HHIBJe;k8R51/,Z*i('u& $J"F Ac,'# k KZ4T%"}uPKv"%(+X.)1(479;>@CEF2G)GGH1HI0IJL+MNPQIRYSpTZUJUVwVW6WmWzWQW6WWW VVVZUUU T?S5R QaQQQRKRSSrSTUHU SRUPORMLJHFDA1>`;864n210.h,7)'s%:#!!K z S9? s=/+(%#! U w!#%E'*6-{0t36:==@BE1GJ9MO5QQRS#SST>TUoVEWX*YCZj[\]s^^_$_o______y_]_L_7_#^^^ ]]:\[ZZEZ ZTZZ[K[\*\]x]]\\3[ZXWV/TRP\MJHETB@>=M;:&8530Q-+)y'$v!pu8 , =`95k2`/-+v)([(K(*C+./25O8;?EBFUI7KNPS?UX8Y[S[\],]]^^g^_@_`apbncmddddedddeddddddddWdc|bb^aa`e`___``_`a aZab8bkb\bhb4aaV`_^n\[XV7SQNLJHGEOC?A&>;86'42 /-?*(N%#B;4j  ?Bq>;9H7g43:112 358|:=r@ACGwKrO}RUfWiY\?^`bd=eaefffffg gMgmghhijAjk3kJkjjjjjjk kk;k@k:jjjPihh,gnff?eewe9e3e#eNeef#f7fXffg ghhhhh+gfeca_p]B[XVTRPNNLIhFGC"@]>+<+:075M2/-)%!% :"JQFD]B=@>H<; ;.;=@ BE:50+&"u W}UgSRQPNMMNPSkVSXvZ]`ddgxjkmTnnopqqr*s#st#sssKrr+qkppdpPpNp`pCp2pLptpp}pspkpdpppqq,q[qmqvq1pp;onmm7lwlkkl/lmmynnontmm^ll*l l"lm>nopqqdqq p[oHnbmjlsk^j\igecb/`G^o\[,YXEW@USPMkI9E&@Z;=6 1-,($ fF\[%Z@YXWVUV2WY[?]_ad[ggjXlnp6qrNrs@st?tuAu\tttsYrtqppNpooo}ooop.pOprppppq*qDqQqwqqqLppioo1nmmhm9m$mwmnVnoJp papboon.memlmamnuoWpnqrWs rrqppognnm0ljihJfedcbaa _^u[XYSOKF1A;7#2.*H&\"wt_^^9]]j\[[A[\^,_aMbdgEil"moqr-rrrs,sttt ssCrqppoqnnnHn"nnRno"ooppEpgpppq qq9qFqWq*ppaooGnn7mmmnnhno?opnpppoXnmm_m0mxmn3nopqrrrr&qhpooPnnEmlkkj0ii"hhrrUqqpYonnQmmmmmnno op+ppppqq>q`qpqqqqqqp{oonnmmmn6nnoXppXpOonnEmm{mYmmnnopqrss@rrTqpp)ooXnnCmm$llmlglkl=kkk!ji}gbc`{\YHUfPL.GC?;730ddddd6cpbbccdeeghjlGmnpjqVqqqqr rhrwr:r qqFppupopnn1mmmnn~noptq qfqkqqq~qqr!r8rWr|rrrr>qqp9o}nnnInRndnno2ooooGnn"mmmmmn nopUqqr"rsrHrqnppo~onn9mm:lllllllqlBlnkjwge!a_x\XTPM3IF B>0:fYffffee{efBfg|gh5i9jlmqnopqqqcqFqKq|qqq;qpppdpSpo}nn`nInMnnoOopqHqrr r9rZrrrssGsstsssppNooooppKpppponnnVn4nEnmJmXmmmkRi8fdb`A\YVYSHPL:H|EhhGhhhWggghi`iijjk9ljmynopqqqqsq5qqqpppXpmpVrNt)uuv vzvw:wewUw+w1wYwww utsrrPqpppqq{rr_ru:uuMuvvw#wxUyyzfzzz{<{m{Lzzz4yZx8wmvpuKsr!omJj fc~_\5XVFSxQPOOPLPQS UWeZ]`d$gRjm`pYrkttuvww5w6vvuutGroli ewa]Z&V^SDPZNmLKJ@J2J~LMOQTHW<[_cfimorAsu uvJvwx5xxxxyUy2xwSvttsrrDqrrSrsUsstttuuvAvwqxxyz/zhzzzzzzezByxwivuFsq]o lhda \XHT%P{MKIHGGfG"GH`IJLNQU+Y]adhlor/su]vUwPwwwvuts$qmdivd`k[WiSNJGECCNBOBYBDEH,J0MP;TjX]-aOehlotqs{t[ukvPwixKyyeyzznz6yxXvutt~ssrrrsissst1t#tuuvdwwx.yyz/zLzzzzzkyyywvhucsqnkgd_vZVPKGEB)@`>>@=>?ABCEI7LQSUZ_ddhlp4r\tv)wwwwHvutoroHjf2`[rV)PKFB><::]9: :<=@lBEIN5RW\k`ehlor$sQtuvx"y#yzlz{+zz_ywvIuu5t[srssUstPtZt;ssttugvvwwxaxy9yByyyyyXxxwvtsqnkgkb^[Y!SNHC?<9856k6 5689q:_<=AJDINQSY)^dcimbpZsuwawww vtspm0gb\;Vh8[2%-)'&7&%&`')()+-15;h@FLR9X]chElxnqrmtPuwxy}yyyixwvuu(tt,+))(%'?'b'()))*,.15U9@PFN$U]1dLio]ruvHvutriphlf_JWDNF?82,($#""##$%&(),0P5~:@F1LDRX_1dmiWlto.prtv=w;x2xex{wwvvutttt*ss r'qqr qqqpxooop5pUpqqqqrrrsssstAtdttsqokg`iYRKDQ<6w0K,)](:&&T%&V&'6'|''(u)*,15t;BJVRxZwb-hJnbruGuvutrvplf^VMEE=6m0x*l&#g"""#S$$%&&'*`-"1}5;P@FM`TZ`]ei}lnq*rt0uuv6vGIOXA`ngmquvZw%vu`sql|gB_WWMEM=t5/J),%"w!!{"h"#$%%*%&#(!*b./16;B(HOV\bxfjplo6prrstssdrr_qqqqquqpJoooooop o7nnSnunnoyoooWo/oJoopppBpwpppnmigdd]UNFB>60)&"""!8!q!""###$S$%#&j'+)/25yEVL4S"Y` e ilniopoom2jLdB]U/M0E<5.j)%#T""c"=""#M#B#N#P$t%(+0I4:ANHPV]bb\gNj0lmqnInsnnnn6mmmmn noo{oMo"op*ppqMs qpRon'mm*ll2k iihhhhi.ijfkDkl_kjgbZsSvKCS;J3j-0&# F !?!""# #y##$%'}*05;AGMSYz^LbehIiklmloj{e_VOOGF>7~06+%&Q$7"""x""# """#$'N).B28?RFNSUh\Iafilm5mmn-nmm;lllmmn`o8opp&pqbqrnrsrMpo1nmTllGkjjhgggyggh#hijkJl$kkIgb[mTLD<4.w($Q!!T !!3!!" "v##|$$p%s&f) ,A106=;@E1INSiW[^racIf7hvjjid_WPH@9[2,'%R#l#S"## #7#3#/"#O$ &v(-@17>jEMT\ agj?lmnDnn=@BEtGJM9ORU9Xh\=`#dUf)grdn`OYFSKD=I5/* &$I###I#5#U###]#$&T(-"17>&EMU]\bohk:mnsonnnimmmnnoppqrstYu*vvwx7sr*poo nnnmlkvjfihhh^hiijk.l!l*l~ie^XNPH@82J+O" } # ? ' s !"$0%(+04j8'*|.27<@DFHaHlHMGG(GI;LDORVZ_ctffcd_VYRKD<5.)]$"s !9!X""#"#$'+x066R KwE>:252/-|*)(]((*+/328=C7HLPRSxRQOMMJMORIUX\`d goggUc ^tW|PIEA:2,'z$""#$ $%&2')W-_18=DAJRY`NfillmmGmOllgkkTklnAo~pbpqrtuvxyyzw{q]p\ooop8pppp o/nQmllm mnnoplqiqr3pnbjfa \VVQ KDEAG=96x31/L---/7148>=DJ OSWY ZiYXVTSSITVYP[^madghhnd`ZTM2E>J71_+(&&w&a'()*,V.v27=CNIyOVl]wcGhkKmllrkkk jCii"ijlnIoUoprwtLuvwxygyzIpoooXop\qqqoqpQonnCn*nQ&LYH>D:@=X:75333\46:?*DJPV\ZV^_a`|_][ZdYZ[]\^`c ehIi5infc^IXQJCx<61~.[++5*, -'./148=[CXHNT[afyk!lmlkjjHihhg}h=ikmbnoZpjr.tuvwxSxyympooocopqrr+rIrqmpp&oovomooppxpqwqrqolif4b^ZVPRSNK@HDB?O=;;z:AEKtQV[_c4dfxf'edPba#`H``abocekgZijjhfbG]\VPJ C>g9963?223,46568;t?D;INTZT_eimSnSnlkjihgg&fgnhklmnoqsu+vwwwx xHpoooxp pqrrrrqqpptpgppypppqZq~qqpmkjhueb_[wX5U7R-O;LIXFECaBBIC[DH:L QDV[`d5gikmkvkrj9hg(f ee7ecefh(iklm(kjf.a\V]P}JEv@=:99l:o;m=>@&BFJPTZ2_dpi_looooBmIkjRihff"efkgjkvlmnprtuu[vSvw ww$pp oop'pqxrErrrqqKqqqqqppqqKqXqponl5ige'bU_o\ZiXURPMML&JJmIJKNrQVh[2_dOgjln7ntnml5jihhhhYijlImnoin+liXe`c[]V PKGDBKAAABD]EfGbIMQPUZ~_Fdh,lLnppomkjNhgfeehf2gijklnbp_rQstuvvGv#v/q3pZooppfpqrrqqpqIqEqiqqq~qRqJqUqgqVqZpon{lk1igecoai_][YWJTS'QQQQRaTW[`dXhSk0mo9ppq)pJnm[lBkjjklmnDopq7polhd#_qZxU}QoMKzIH$GHIjJLN1PT7W[`3dhko4prql0npr8rs rrbqup8nmm llm6n7o+pSqrrrZrpAmjkfc_\ZfXVUwTTU;VtWY[^a8dthk=noqr r\qYp nBlkjiihhi4j;kzl"lmoHpristu{uuttqqg(edYbb3abc/d'degik2m"nopppproooXoQo$nnnnozoppp*pq8qrOrs`ss>rqqLoUop3pqfqrBrspttttu[uuuGtts`r\qFonmllkihhSgh.hhhhijkkll#lmfn,ooprssstsssrEq5p1ooo-oJoppqrxslt+tutt5s[r)qonmm0l{k[ihzgg)gjgggghikYln nooooouoppYpdpFp,p[pqlqqyqCq!qFq{qzq_qqMponxml9mnsoNpoqSrrs0statttu8uSuTttss2r2q*onXm l0kjihhgghthhiik;lmn0n`noipPqWr6rsttutytRsss(r[qNp8oo-oopqFrrstuvrvnv+ugtt s>rzqqFpp^oRmlkkrkEjjPiiijkzl`m[nnnnntnoZpppppqFqrerqrqqqqqpEonmljhfhjalmoCpq{rFrsnssssssssprrxqpon]ml6kjihhAghhii!iQijlpmno?opprsstHtztttt ss]rqpp8opEpqrsZtTuYvmwww>vvurttsPrrlrqDp;on+mllVkjjIj;j6jk klm#mm~m?mDmno|oppp_pqqqqqqeqXponlk)if8c<`Z^ bf hk7mo%ptqrrrsrrrrrrmrqq(pon2ll kjihhqhhEhi4ifijk"lnGopqq|r>s8tFuuvupuuMttttss.rr&rrr}sstuCvvwwwwvv@uuBtt7ssrrqCpionmlkk%jjjBjTjk kl.lWl9kl)mn7oooopEpqqqqqqqapHnlOjcgd`\XUZq^bebgjlnoJpCpqqqEq]qcqDq/pppqpo(nllHkk*jziiYiiYij jjjk*l m:np`qrzrst[uOvvxv\v7uu?ttUss{s.ss=srstjtuduvQvw/wEwAvvtuuu.tttUssr8qppnmlkk%jjjgjOjjkukkkk>klmno oUoppqFqcq>pqpp\nlOhfb[^YTOuKLQV[(_.bfJikqln noxopp>p^p]pkp^p]poon m#ll]kkjjjkkbkllmlmnoqhrttuvvwFwwyw/vuudtttsslsst+tuu9u`uvvfvvvjv%uuuuuru)ttsZrr pownlkkktkbjjjjk9kVk8k jk/lMmnnoFop.pq,q,pplppoYlieUa\WOQAKVE@G8LQ]UY^1adfhjk{l]m6mn3nnno8o$nnsmmlllllPl&lLlm=mmnno?pq4r^stuvwAwwwwwBvuttYssr[qq{qmqr'rrrs?stxuubuuuuuuuuuutt?srqvonmm%llllklkkkkkkjkkrlsmnzno@op pQppFonnml2hd__ZTNeGA;V5uuvvuuuVtt@s4qpoo5nnnnnNmmJmlll\kkklmn}no)ooooooHnOllxjhdU_zYS0LhE =6o0-)16<@EYJ"NxRUY%[^aqceVg h8iOj jktklkkll_lmqmmn ndnoMoopDpqrsturvvw.wtw!vuu srq%onmm>lek|kjjjkl,mnoWpqrsst^tuu^u\uTu ttCsrqq@ppYp?pkpppoannn^nm\llDlpm nnunnnnnnAlkii`h1eb]IWPIB:3i+%W&+05:&>CbGKO]RV\Y\_ acYdf3ghijNjkFklmNmngnno oEooop8pqrsztHuumuuuuitsrqpnm"kTihfsezdddefh.ikmoqr3srt5ttutttttsrrGqq~qqqJqrqqppvpoonPmmYG[]_waXbdefghijkll?l}llll}llm@mnopqqQqqCpp nmlkaih2fXdDb%`-^,\[[[\^`JbfegjlnpcqyrRr~rrrr7qqsqppppppqqrr qqIpp^oo*ngmmVmZmnnmm1ll?kinfc`!],XSLF9>6//' 0Vmq#'+058TX)[^a/cfgi"jfkkukklXllm,mnnoRoppppKonnmlkk j~j-ii"hfeBca*^2Z VQ6LYF@92+$L( Z 7 eC#C'y+048=<,;w:::<>pA[DAGKOSW6Z^1ac e;fxgtghi>iijcjkl@BD\EGI7JKLLLLLLLJKKpK]KL]MM]MwM%M LpKJDH/EGB?<96S30/$-z,+,&,.0s36:>CGqKPBT*WZV\^``abc(cd]e5efghiiihhgRfedc>a`_]7[YZW%TIQcMJcFALbMa8`N_][ZGXEV0SQOLIqF0B?-:6G0+&D!. ;=  AbY `pm M z&! "`$&(*.,-/ 0234o55?5555Q444=4L4455 5544\3280.I,=)'u$"~ OI?"&*/48]<@CuEHOIK'L.MOHPRGSU~W XZ[\\)[Z/XWVVTS]QhOGLJHmFbC@=<:"63/*%!Qs+ ZUl   0W "l#$&'w(w)A)}))))I(((K(v()Q)X)((t(J''8%$_"W iQG!d{aX!%)-15N8:=#>?ABDFFHIKMOQRSjRQPeOMLmJIRFDbA?=;k8p51r.+(`$C7[ c #s^=fNIAdT \ { #Gr#^i z4!YoVr m \ ` _ 4 &_#W&**-8/1394579v;6= >@BDFFGGFF DCwB*AB?>;86420[-.)&$T!Uy! Y "g5Pmp cDX'V C o Xixb|w r SlIr\| x al!R#%');*,.02|4_6 79:{;$;;::9876420'.,*8'$!oOt W 4RGPJ=t &RN1(# D $ t p U +   w # 7 6 a  {  3 *\v\M N j(ni "$&(2)+,Q-`./O///.. ,+)'%$"l h!1d G J "[!)5(|UJF ]}IW2-df%DMo*jiEZ`vf[is l-,RYJ ]!"#$$$#"!l k*=7 Z J?0 b`D@{Af?o^ `/DJ _]K990++( <2%2| : $@40d$UO v HIv}LL&S<e-QT<<6o/FIRe& mYeF4+qo\UL74J]ye }* /  |GcjF*n"6q^[p8kSHBDr J Cr~8L`U '825,/IseEz}2_A w/ zSYuFj$+L.[) f;yv0"s5{i1A;BOt&oKpyxjXB1& d c,ZB";<uN`hiNDZu +\"<2SeB{o6'f^aVb#Jn(P,u-aUsU;+(! t3A%kb.`[}j=}CdN ,N4<B_ PW$z os^oy*K2OEP 'x@6pHVicW>+ T..pQ~>a;k;=\JE |h=>#/W6Zj#!-W~YcG_ykH]~hX\[sqK*.Al Mfl0q3E=#NR{&tJrb*{&g )y4r{::(9f"=zk][TeGZrN / YeWGgzwer14tl%kf-pq6!51pY"xuO_x -|{mkrjl}"7!a!&L}(7xn8zT7`Ars2*G+BMR,1!?w{gr0*3Lrik|b)*gU}EC*=~K&]h M]P=4t|UmAUN3/tRj:yN2\&+]NX*={M ?@KRa<X~JjVzZUEZ}=Uh.mGJ;!e oTJOeh>(03Lm01 ~];+(>PvC*"W 07Fm0OK_P\sfqtqD_d]]mZ^0kx8E*E;R5e`T`plI>Hi|+6+*tW7>zoF/ k-%>iZ<^:Oq[MKk}4oOi#LjjdM>]O NeT))R7l}RRSlqSJ[c{&+:4pR2(#8Ms]@&.?z)nl rFJ<Kgf\Kr8dxy~k7 9QK:6CNqsn( SYr-w\^d{xuv%&lS;DcdX[UTNar/o   5g~kBxdS^GhvpkiZ$+Y^J=?Im6%Z4[M_Va!ythnyoXP]vg|Kf2 4LnqNtOJczt4Tdh_Z]qwf? MUIBFUlzayW%@z  pTBFJfHy;Y_hfk[7 uOLbjhd'CU^[WUZ`l^*9WaTBCXmk_W'$\m^MLMk4o(:B\gbD!nSO^b^^'@RZc_PHbmG Ec`J;Cd}lue$0v uu{snj~; $MbP)xl[VWTN3HZtwY@Vl`:DeiM5Djy^cU# )WJRH,$rqxps=;s$7OI" '0tSIA*);PtmOPZ`P'Uyd>8RvsUVuk6U[ti</"wrvsE(*WiOb?JE&.(|I6*&8[vu_KMQH4 1`k\NLXuwfj|{W1AvB|WF-~z|gE3Ee~iaj'=-  %%m9!"6Qve@4@V\:>_qn]LW{iowciUt^U6}{Q0:V|dHP~-* /%vG'  &ASN;25CNG808Kcuwc^ngk~&NS\H+xu]FLlxUNn    i>$  $ ,88/(,ATQE=Hi|ta[c{3KJ>}}lbYhp`\w  {F    ,64(%<TWL@C]}ypju)4:-n`bi{pbhu d/  !/72-6EOSNLQfw|*)$vmmpyvd]d{  ti_C#  &"&,4;BMTUSKWz~ut!%vedfpxwtww  yU:#     !0.")8>BMVZYNTqwrutvv-.'l^bky~|{dN3 @@~# A ?Y=_cF4R-*jR *ak?< Y  N   , 3 1 !    e  @ 2  l f > 5nR<Bt<Q ^+Ti~B JXr E|L$!JV^15^JR ; m / { >    = [ e O /   ! % ( # 4 U  E  6 F Z t < L KA_Zk5iU&m \T6[d]G" y([s i {  I    J -    ( = E A  w o  E k  7  5 8 ( # , 6 X w h ^ + 9dB3} EiL]xMk@LAHnM7 e " w P L C /  } g Q F ? ? 8 4 7 6 4  m -  E G t N  % < *  1  H O F voS{ wr>L3)3 ~EuZ + # F   #    P $  / M z # R { E D  3 Q g @ $ * 2 b    : { > Z  x pdB-+X]ZAdFn_-tc1gye1 i " U  C  O "  C b L !  : s t G  % F ] p q  ' J _ V I 3   O ' > @ #    ` E l D&7\`%]Ybx%HGx L ~ m l  I   Z U  v a N ?       Dd> 8Rf$. #b         - O l y e  w AL_F Rfm+q6of@3     + : U < w G ( n:W^G;f /z[IqX=BX^fu 5 Q : Q~i%N @t~87^cm} Y I Q D f D O m ] gU.>jQfNtaRB#4N{5s'8MK^? 4 ` ~ n  3 Q o ^ F1C'*~. 1 s A <  b )  B ` MI/x kC#9=HTYZN[2QMUkhD)JrPBS#=L(VgSRs      e J E  H 5X, ~ 3 ? q \  |  $ O V._. %#.e>(V{yFeG(zbNXpz^D/"/BIQcrusnz}'Zwyak[214 ! 9 N o  @ P :  4  E ` u n v \ Y h d d H   ( !ilR i-Ew9Hf LP'%(6>:' <AmKdfvC.][6 3 r e  > v n p - 6 & 9 $ 7 P X @PW8 *qw6]LHA>+ |G $R8Sbpz'q* k U    | f  d W q s B ] L{A0f t|C6Xi?+y xy!FqgDi4 2RyiHg+Q8.jw$%4BV|T:x ~ ; =  f )  1 >_`9i9S^EIiUS 7W+:FDQPD ^+*HwRCjFZ'C' vEzW l f}xN8;ktH:&G*"/P;U_0LpJQ+$ mN%6s4\'#%wM]mnEYYu=2Q:g;xr_- Sj0-!9TQu7sA >m#[}([h|wpL(=aRGUVqGf_^+~%A{z  =qfvB>hm^+~M$U@YZ^%IwM}4W[+fGTOi)He7Z  P{*& :De3XT?x,uSaegn}G4"RHvk@dpd J$QkDbP^ @t}iUL N  h 9 l 5  ] >  *3DS>BfI aB\@ne+uK(<(?| }LQ ;D?).?4*Di3 N E t 9 " * q  xE-^S"d,=n; / +^gN} Z M O fsb?svZ*Q3Jx&"V _p !Tbv B:w&3K ' X *`ezro6TK|! ( 0) 8(d:37T^>GZJ=G#<0 r Wb{-404~O Q!"#k$$%Z&&'e'(3()O)*^***`*#*)).(''0&#$$+###N##$%&( ))) (>&}$" Sat8 [Za]p)) 9bt.|P   "=#^$%&k&''A'}'()*,--.0.//01<12^3#445666565532104/:..Z...=./0123e22c1/.,)g&# k"H=_3S 4 Z %cY`I'.PQ\*[ s1 a 7; {#&&(f*,-/J01T1112'2m3 345678+8i89N:1;;<=>?@AB(B?B^BEBcBAa@%>=<+;3::c::::;";<=j==&>?AABCCpCDEGHIJK KLMNNN)MNMLKJbIGFFbFdF*FKFG6GHIsIIHGFE CBp@l>J;i8Z51/,G*(@&%#,!? | 7Ce>/%"&|4_(3 #q&V)\,/258%:=z@}BDEFfFGGMGHHxIIJKL{MBMNOCP:QWReSQT+TUV!VW WDW4W&VVVaUTSxRfQZPPtPPrPQ'QRSPT0TeTAS QPBOMLuJHFDA?>;86+320v.,*(B%#r!Hb l aw=/4+($!q s1!<#W%(m+(-04Y8;N> @CEILLNP'PQ}QR\RSSST;853H1.,*'%Y#2  L *t BQ>;\8521\0040x2.369ADGJGLPPTX[&]W^`ubhdfhijXj`jjjjjjjjjklMlmmmmmmrmGm5m7m`mmmmmmmcmlkjji^ihhhhahhh"hXhqheh3h&h@hioj[k_l"lllkkIihfdb;`][YWW TR;OLIFDvBA ?T=-:75`20.*&B! 8 %SP2MK$HFEjDbDEqGJ(MPSmUX\_be/fhigjlRmo(oplpLpRp+p oo{o!nnnoXopp\p}pppkpGpppp1pQpnppppNp%oo9nqmlkkkqkk|kxkjkykkkkk_k jk)klmnopMpppzonmktihf2dBb_][wY VTQFNM&KJmHFYCS@|<9T40(+6&"O s<r YW UNQSVYf\^a/dfi(jl4mmnopvqr_rrsrer"qq]pp oyoPoZoooop?ppppppppppppppppHoo:n|mlllWlllmmDmmnmmVllUlElNlmnopqqrqyponm7ljiQged#b;`7^D\QZ;XhVUTSQANrKGC?:50,(4$ ^]U\/ZYfWW@VWPXZ \+^acbeh(jklBn!o[pvpq qLqrst(tRsss}s rPqrppoooooop/ppq qqppqqqqq q'qq ppaoon}mmmymmn;nnooooon^mmfm.mn"o&p)qBr_s$sssrqpoonlkjhgedOba`k_s^]\[YVRO JF A;72.*'$J!6aa`[_o^w]m\\]8^ _abdfhjl?mop7qqppqcrEs.sssxscsrqqp9ooMonnno!oop^ppppnpqpppppppppphoo5nnmmmnnEno oopooBnmmmRmmnopqrst t,srqqp]onmlkjiih-goffedd1b:_[XCT0P4KFA=e952/I,(ddod&cbbaahbbd$e fEgik`lmnpqqqLppqzris;ssswshs*rrEqwpoo7nnnnno]ppppp|pMpJprppppq'qFqeq4ppEonn8mmmmtmmncnobooNnnvnmm{mmnqo8pOqdrhspttwt;ssrcqppcooanmmxmllflkkkjigdMa]_ZV3QLHpDA=:963IfNfIf$ee+dRccdyeAf=fgijlmnnp&pq+pppqjrVssnssos{sisfrr2q)p,oo)o-ooolmDn%noop p)pwpppWooRo/o]oooolo9ooo:o[okooHnmlih}fdb_]g[PY)VSPkll"kk=jjk;lDlmmLmnmoJopyqnrIrsrrrrs stt?tWtttu2uFtsrrqqkqNpppq]qrrrrrKr r rzzsz-yxwvv u[aflosvnxyHyyNxw uro]ic\UOSHCd=x842u00@/002257952O/X.,-+-t.K./02<369#=AGN!U[aglqttvw8x xx3wut?plfI_WPIC)=T72d.1,I***H*+T,W,.1S5:@GM%SX^PcwhlioqrdsEtv\wy yzz6yyy/x7w5vvGutss.rs#srrn nco>pAqAqrhs sissrsstUtttetlt^t`srq,olid_YSLF?83/,*G)5(\(())*T*,8-z/15:/@G1NV8]Td^jos v+wwvv#trnjQc[uSKC<604+'&!$%U%v&6&'(W),0g4;AGwMSY_eaimkoYpqswuvwxxxxpxTww6v~v)uuqtsrrrrxrHr n nDnopqQqrVrrfrrr?rssrrrsrrpvo l+hc{]W9PIoB;d4/+)I&&B%&.&y&''N'()Q+,05;BOJVReZ@ah6nlr.uvVwv u9s.qn iNaYPH@9f33,("$@# "S##$d%>&1&')-&16v>uuu|uttt{tUsrr&qqqqcqAnLnfnopXpq\qrqq1ppq qWqKq)q(q8q~qOponvkvgb\TMF0>t7q0+'6%#""|##{#$($r$%|%'@(,n07;>5FOOW`fmruvwNv8uesQqmi)a~YPH@81d*& "! D!!"h#R$:$%&)-m28->qDPJQ6W^,c*gjtlmo+pmqrssssRsrrrrrrrqpppp`pBDKXR6Y/^d~gj4jklrm)mn3nUnJmmmOm[mmnBnoFnnlno2oppttsMrqqq[qon`lkIjjjiiijtk&kltlli7{0*%#T!!!S!!!!" "#%*f/6}hi:ijkkliifR_YQJ A92+l&"! !m!"h#$8%J&()*3+/X39[>CH`L\PTYo\_4`kacJeg{iiQhd_XRFJCh;4.)&'##h"#0##2#M##U$7%K) -4j:mAGOV^\cgjkllm@m mllllkklkm@mnkopqqrst^uuvCuotZs8rtr3rqpNnlkEjfii9hhhi}j%jkl;ljg:`[SKC;4-v($t"!J! !a!"4"$S%'),/O3N8>=C G(JMyPSW7Y[>\1]u_Kad fghd`ZZTWMdFN>7g1+ '$##%#l#\##$P$+$%).94:A;GO Vz]6chBklmmmmmmhlllnlm6nnfopVqrSrstuvwUv/uatksfrrrrqsonlkjjiXi.i1ijFkll]ljgb \UWME=6/*&$ "!{!!^!s""$Q%(+\.2 6<AFILN`PRTVjW]XAY[^,`degeb{\JVOIA:34,(s$#i"Y""##$:$5%&*).5t;gAHOW\^3eidlmnnnnnnnCmmnnoooFopr.rstuvwxuutYss4spssrq.o_mlkk@j}jv~wxyuttUsszst9t@sTqpDnmllKkkUkKklDlmn/nlj/eF`ZTM'E>72. +'&Q$$q$$$&(,0>49(>@DJINKPRRRvRRRRS7TVAX[i^PadNgfes`k[TTHMF >'6/i*"% " !R!s"\#$$&L(O,2s9?FMU\wbhl}ooKpp p/pp oooopqpqpq2rs:ttv wRxyzuPtt.ss}stTtksrRpogn~mm0lllmmnho`opnllgc^XR JDD=9$4s1"-+)`('((3*,^0w4s9Z>#CwIzNRTV;UUtT~SSsSTVYV[^adHgg+fub&]VP H@92R,'%(#8##$%W&'E)c+068=;CJEQZXb_e8jmo|oUooooAnnnunobpQpqqqTr?stuvwyyzu tkssds]stWtsrponn#mmjmmmnnopq1qpFnPjgKb]WePJD?;;731.i-+++-0l49,>eCIxOTIXRYZYXVU"TMSUAVY[^acfgug_c_YbSSL(D=V6;0+r(&&&'(*4+:-0'4:bAG3MT[Pbg8l9nhooonnUmm\mlm/nOopppq;rVsuv2wjxyz{kttss s/stWttsq|p>ornnnMnZngnopqrKrqpAm/jhfSa\VQDLGC?5;a8}5321136; ?SDJ OUZ]^_^m]8[HY%WWXYS[k\^a5cfhhlebn]WQHJZCa<7y2W/-q-|-x./112_47R;@FLTRFX^diUmo onvmmXllkSjjkJlnmoqoppqsuv@wxxyz>{ tkssssGstu[ttrquppooooopqrssrqo=liea/\UWrRNJFB?<;88{7996444z568S9<>CGLQWC].bhDkoHoon-mClckjiiriikmno$osp-qsxtvw,xyyzfsss:rs?ttuutsrqqVq!ppp{pqCrrsLsrqonk@AD?GKOSX\b.gknqpp,n4lkjihhhQiCjlmn\noqrt$u%v9w wxhy surrrrstuuuQts1rr-rqqqGqaqrassgsrqp*nlj#fc`V]ZXUQNLJAHSGFGIMPUY^LbfSik kkjitgfdd}cd def1h j@klkjgd`[dVQQ@MHFDDDEFH^IL3ORVcZW^NbglkoqqErrpnUlkwj.i9hgglhmj&l m mrmnp*qs9t$u&uvwwrrkr(qrnst uu4tssrr`rXr0r qqrrs$sNsErhqaonlkhec\aA_b]i[XUSBQgOONNP4S6UYq]afiGldmnn%mlk0ihh8gff{fghjrlhmnmlj;gc_z[VRO_MKKKLMOgPS(UY\2_cVg@kqnqssrpnlksjiggg:h8ikllmIn'oqZrsntcu uuvYrrqqkqr=rst+srryrPrQr}rrzrZrcrsstsxsLrlqkpnml^jhgedJca_]dZXWQVUV(W!Yz[v^{beilo>pXqpponl9kjiijiyjgkUlnopooljgMc_m[yXrUTERRRSTVWY\^a|dzgkUnqlstLtsq*nlk+ihggfgitk7llflmoiq#rds0t#tu uuarLqqWqqDqrrs)rrZrrrQrrrrrs6svss~s'rGqWp)omlkjihgg6fReWca_^Q]\]l^7` acfjm3oqrMrr'qqoomllKkkklmWnpiqrMqq$olmjg"cv`][ZYGXXYZ[k\^`bdg:j.m/pqst&tOrqnlkjVihagghj8kllmrnwoqrstdttttr=qqCpqq1qr5rrr1rrMrs)snsssssssjrrq-p*on$mbllklkkskBjjjhfeedeefgiknaprtEttssrqoncmmm m/nnpqrssOs;rpn&kVhhedb_al`W___`(a!bQcdfVgilXnqresssrq'o0mlzkujiiqi`jPklmmnopr5sSt tu0u0ttqqq*qq@qgqrZrrrrs'stt=t>tAt)t/ssrrq+pVotnamlllllllmmtmdlkqjj5jjkoltm5n^oqsktuv*vutis`rponnn n(ooqr}statjtsrpnl|jiDggf!edddefCg'ghOiTjlnpYqxrrrrponmmUll(kllmno`oppqrsttttDssqqOq6qeqqrIrsessttatu+u\uEu6tttsSr8qonn0m2lkll'lmDmmn@o)oooKnn|nop_qAqr~sytuvCwwvuu7t5sr q(ppoopq2r3sIt=uu\uttrq.onmm likjjiiij=jtj8jMjlmRnopqqrq}ppooodo"nnnopmpq%q>qr rxrstsssxrqqnop?pqrrsBststu u6uuuuuyutsrqbonmllkvkkk?klm5m[mnop*pIppp[qLrZs[tttuuv^vw*wvv@utsrr$qqqqrrsTt?uuv uu:t`sFrMqwppoo)nsmllkl&lkkjk$l lmnoap&pzppip.ppPpppplpq qrrDrWrNrurr\rr#qqEpnmIlwlqn2o:pnqKrrspttu-umuquuuuZu(ttsrpo!mll'kNjjdjjkopEppqq>qr9rrssssrr q0ponklljPh4fgj8lmo)pq{ros stitttttyt@tssr@qap5nmll7knjjjjk%klyllm>noQpqqqqqrstuvTvvw&wzwwswDvv6u\tEs_rrrs^stOuuvwxww3v=uqtssrr\qqMpgo}nn`nmlkk jjjk=klMlm2mamwmnnop p5pXpqyrrZrrrrrrpomkifc`^2bwf hk2lnpbqrWsLstHtsssys6rrqpp2oDn>m.l(k`jjEiijjrjjkk-kCklmnXno odp.pqhq|qqqqqlomJifc7^YTPKRDWb[~_abfMi4km&npq;qqqqqzqvq?ppdoo5nnmmWlllllm8mim{mwmmn(npq*rtstvvwx!xbx'wwqwvv[uujttt\t;tYttttuu7uuuuuZttgt&t t sss|srqponpmnlkkAjjljOjXjjjjjjkVl=mImndno&oppppppppmj{eb.]oXRL&FAGM:QV(Y^KaegAik.mn!nnooYoooo8nnlnmm^m(m mmm/m{mn+nKnCnFnanozppqYrsuvCw wwwwivv:uutissr>quppppq>q^qqr%rs;sttssstt8t>tt)ssrqpIo9n~mmglll"kkkkkkrkOk6klhmQmn(nnoopoo nUn>mTlhd_UZTNHA;6L=zCGLPUY]`ucGeh*ik=klm mmnnmmmmkmlm m{mmn2nno+oAoKoZop7q qrstv3vwwwpvutsrqponmmZlm#mkmn[nogppqrirs2s?s_sttmtttttnsrqppooUnnn mm3mlll2kkklmvmn nZnoBojoSnzm}l/kigc^X(RJKD=\60m*:27r)po6mkj{igffeef8g)gi!jZkm(ntopq[qrrs"st't]ttqtswrrYqqVqppp`oo=nnwn1mm-llWllmzmmmmn2mm_kj1hfd`[xUNHA92o+%O',1i5::>CVGKOJRVvY\^u`bfcdefhhijwjk.klm5mn nn!nnn.nOnoopppq_qrqq6pofn!l|ji)g@e-ca/_']]]a]_`Obcf7hjlnopqPqrsCstt'sssUsrrEr rr8rqqYppyp oonBmmTmbmmmmNmqqqqqqYq poo9nymmfm'lll#k{kjjZifc`]&ZU~PMIuB;23,%8flB#&'+I/4(7;?CGJMPS.U0W9Y.[H]Z_a7bccd[e"fffffpeeee+e-eff`fffffedb`^\ZXVTRPNLKXJIJKLN1PSsVZ^WadLfh ijklmnhnoofoppRppqTqqrrd@CDEH&JtLNPmQvRS~TwTU.TTTS}SRRRS4SPS2SRRxQ^OMTJGEB ?N<:'8654312P12=246w9i ==p<<BEHKNP[QSSTUW?XZ@[]a^_`a``z_^]:[Z*X)UROMHJH7E)A>:62,'", [xVm;U u :}WH o"R$e&(*,-/0#0122S2#116000o0s0b0$//\/#..H-$+)'%#!W;3S1{c  i$O(-$1O5C8u;> @BDEGGHJOKMKOQRT[UVVVpV5U/TRYPO LIGD7A?<@962/s+'!"?GP :~t p 64e!z"#k$p%B&&k&&6%%)$$$$$$$`##8""!,x O+1  x L wN;#2'*-03B579:;<=?@wBbDFHJK;KL5LKJIH%FDKA>;9b630{-R*'$L f#, vo ND0[H5  Z&c E s Sl,$8#+~`(s" O  Q|H H  w^. }#o&5(p*,.Y/01235H7-9R;_=+>N?_?@u@o@W?}>=;O86(3e1'.+(%" vzO  0,T\ <P$=l=N  N .f3)X(WK: E ;nt^bVFI ~ a L6!"$^%&')'*,;./1E2S3j4!4505s431/-P+(&# Z 0 On(gvoC4|NK 6p!} 3 j 2z k k  "  t b[_ ( Q[<+= MG21S} !#0$%&(&))*=*)(&$"!<[(C  rh#8XNO]oSCpAtZBN8V0~{L[6aU[/oooB _  /PXCP* &LgLG 5  }U:ut=?}KmBa} j=pz P0nn6/.AKORG-0-Pph < l |   5 H q~5o.Z]B[ W 'R=/;TK ]$NTdPOILCj)G=~]r{lT=4*+2hY '(]N o T a 3  }hT(qLR1>B6uSQf.c`%4=dE 1piu+Ek Z+@7- K;0P)5$&:cdBubh/OY!o=g98Y;O]x9|r",2%i<SDb{@B`}y`L8$ 8$G:C+K/q]p&KZWb|=h1.PdSy:1j`bev,Mv8[1)-`MlO1 NuY1JC|3V]0b1#Jg]?T.3>[US<} nnedny.W:}PKZ  Q$6tNdn\SA/b<&._ ew>n$F/*:UI~gNS,4T7W n" )EfOjB]l] CR}lZ\_z}U..Eu*9K,1s6^"p-Us#S#wd*q ,g 67]wGB44d!Dxl_]P]~HRY1O @U?crczobl46te#na0rrF$5ng)VgB~ldg^bv +?#]&Mtlxq!w<yT1`=md*)K,BK]558tpm2.&6*[ megx}R!%3n,Cvm69-?|I'\fPX~uJ<8v{ Rg@ZQ"%xFf9 p|J4`#{J6F 2R,d?08NUa8U}Qz]uSRD[~@Xj9qGC5"cpZFNhjC,16Qp /4 iK;2=AbRAD('<s7WGcPXwtx|pz=Y_\_p&%_h=sz8@/G="^9onclxnMDKi|9B.(v]B"?owF+ (r#2^A-dEPmVLNi8uVeHehfM@cW!R\M-%TBowYWTkqWLZd}+(61pS5-+=KimQ26J "{XXrBE:KhlbRp7awy|}e.=VQ=7DOqsx!"ZPe$rWX^xyrv&lR:Dcidjjldu%z_  5hyjF~eUb GguqkjX" 1\aO@AKn</`-SK_XbspgprgVVfu jD\$4PpmLtLJew{r3Saga[_wlC)PWMGKZp|dvb2G ~\DDJjT f<\cibhZ5rKKbd\[#=M[\WSZbiZ, =YbWGJ\np`}]+$Zu`IFKoN"l%9DZa`F"oRO][SU 6N[aYJBV_?$Gb`M@Fb~isd ,s yuuhce @K#J]O,!}o]URNI,EZssYASf[; AbhP8Ccyw^gW$ /ZGQN5*{vykm}GIl!7NF! &3tQF>&&8OsrWV]aS- RveA8MosZZxrA,%\ ^xrI9' }~u}F#(ZgGU@LG' +){G5)#5Yts\ILSM92an`OHRqzhjz`8EyE_M2~tS:Gkmbe%;/  $%m9" 4MouZ71BZ`?"CdunYGTydf|xbhVv`V8{^BLd}XZ(( 1'wI) !(BSL:4:JSJ;3<Oets_\mch})RU\H,z}gOVveWr  " k<$%%4=>802CSQG?Ifzvfdk"7LJ>~rlakrgavK!*7:/+>SXPDE[xyumu)4;-mbhotkw h5  *8739ERXSNQbz}ry+)!|uiglzqiuxmbG&  %(29<@LUWSJUu{ut"&xhfcju~yzuR9#  ! '60"!.<>>ITYXNTmvs{zz{./'tfgju}{~dH+ <=x< DV=fc?(I)(kT! ~YjC> T c /     4 > 7 !   _ 3 ' _ e N =}H3=o7Sc3 Shz> LYt@{S/%H[g5%UDF 6 } >  =     ? a s d J #     " * $ 2 V  / > Q b y B G F;[]l8d`$i ^V:^dY@%[t g r  y D   G %    $ : D F )  ! B h '  @ E 3 , 3 > a ] Y ( 1^:- {KmLZzMa9'Q@E hM7 k & z N D 7 " y e N ? 4 1 ( & - 0 ,  G   ( [  F r v < v w 3 K 6 # & x  C F 9rwuU|qqGO7(.xE{c  } <       e A +    9 V  O t t 7 q , + U p I - - , T    6 y 8 V rxlH/.Y[W?eKud2j]/ij9 j  B A  I   6 g V 2 1 K | r L )   E [ k d  / M ` V M : $   ?  5 ; "   ^ J f C,Ca`&`_an|IN S  f ^  >   W G l \ L @ "        `wJ6Scu [ * , #   ' #    @ ` t c u KQbFMgo.t/ob84     ' ? V > j 7  j7cw g/$Lb[\lMRipsw 3 G B Yh!FDy~37aix + _ J J 7 c B F [ t Ka`6aL q nU>$+Alcr1H]Y( _/ 7 `  w h  - T u i M1A'"){6 9 M C  U   5 U G> *lr\;GBCDEHFS2zwty`7 $FlzMK^0CAIeZXt    w # o  W N  K :U3 > D n Q  z 2 V Zy}2`+%x bE6_|r:\>%v|iB$'(/6BQ[b`MTe4m# lQbZ1//   0 @ g  H [ E & <    E c ~ p w t H I ` d r Q % 6 )m\M!u(t1p7Fh6~F*FZ`bP?QZzJWx \k7(VN, 8 z j  4 v q m s 7 6 ( :  ' G Q G]_B%j u1ao2338,v:Mpj]+l4%16BRex;#&z c _   | c ~ g ] x s ; O G M6o%s_;,Ob5+ma8;r<j7 BgzZ{=J%e}$0>y Ne`E~  9 8  l  +   .[tFtDEI>Jqh\cR5.f 2:HQa[KZ /Jwv&9dWv2PD|TQ j dqT8.W_67>\?/ 1ZOep ZP#_+mQ@8*5_,j> b<\be<RP_q=;_Chy@kP#iu',@:  ~V|TtEoRCi"+i%>uL,Z]U3 2HQR@1s5ob :qd{NP{wh'~[2^Ljj`=j g('E.A?8VOIA%\7hr80;d|=)Kg% T>bmnun@D!3`H{{SrAy?~/:{(0-l"8Efbhc2 9 t  G ' B # y  l 5 q815z(!1^J"!e2C Q.t1vL+G8Iotl)V*_0-3IVYJLRb;x % 3 I .  } s7'5=h=2 QdN,e^~\?7w Q ..m [R3b<Bvxt8F Y)_j g / _ k"0wQeq.OR,E{?~95<L[F. % (  aK*[#Ay&(E%<!*:JR9L* =Dmq0P/  r p]Rg#0k?(34 D!C"##$?$d$h$###$ $o$%&&''@&&k%%P%9%6%t%%&m'9(=(){) ('h&/$t" :D^   &LCeJU_ x" PPb0{ B  FRR !C"#%K&&&k&3&%&'?(V)K*1+ +,-K-.#.B.$-..T//0Q11223)221I000g00l0012y33p32|1m0{/--,'*7'%y# 8 1]aB u 4kqA,Z^6-UR[!O [btRK+C+y rJ$!$&({)+-%./011a1F111212y3_445t687789'999::t;6;<=>I??d??'>e=<<<<<<<=V>>v>v=<;:987642/-*4'Z$"7 $:`AvI vk'<g%, H}]0Hn|x<h @ G *W"&a),1.03&5 78k9:`;P;<7<4<%a? ?@ABDEEFeFFFGGH3HIJ7JK)KWJJIAHHHIHHINJJK3KJHGFEDCB6@>=?;8530- *m(&$!Q'Q b D $ #me`nJs)  ;#\&*.{1469S;>}@BCDsEFFG?GPGFG=GUGH\I=JKLJMOPUQyRRRRRUR@RqRSSSTLTqTxTSTRRjRRSSS4STUUUTSQPoNMLkJIIGFJLORUHWXBXYZb[W\\~\j\[[[\]_ `tabd8deeeeFdd<964 1/j,*' $c"# XMQ _ 3km@<9z6421I0//01469|;>BA0E)INQTV\X[j]`?abvbcacddeZe<9741/,*'%!U 8 R\IFC2@><;:u:|:h;iVinipi?hhhphhinjNk!kkkk=jibhDfed5a_ \ZWU]SPNKKHFGCA.><:R752/,c(y$e )=! ROMAJI'G6FE.EYE]FHmK+MPRUpX\__bewg@i/jl6mXno>oopooooodnnooopqqqr(rSr/qqq;pp>oo#nnDmmmZmll kk'kk'kukkl l l-l1lkkajjjjkQlBmsno3ooonnIlk6ig,eb`^\hZAXUSePNPKIzGEvC @=M962.")U$ UP Z YfWLUnSQP]ONOO:PRUTWHY\^aYdfhjlcmnoapqqrUrbrwrSr9qqq[q pqqNqvqrrrs'sPs$rroqqIpoo(nn?mmmlmEm ll2kkkklFlm m@mmmmDllXkk|k6klWmnopqIqqIponmkj?hfe c5a__][YWUDSQqOMKH-DA?=183/*&g":@0_^9\[Z|YgXXqXY,Z~\^`bFdrfhjQl0moap]qq95 0,)G& ";bb7a`__P_^_>_`acWdfhuik#l7mo p;pppqKrrst4tOtttst*sssisrrrvrrsjst tIt'ssGrqqp`oo.nnOmmmSmlll7lll~lmnDno9oTobonn0mll`lmnNoUpqrt tttnsrqqp9oNnYm@l!jihgfe8ccb+ae_]YV]RN}ID?;W74Z1E-*(/feeeYddbd-dde-ffg|hjNklm9mo+pRq q$qqqrsmtttuuMuquUu>ttcssJrrrrsUsst3ssrr4qxppoonnn5mmm`m llkkkl>lmnCnno'nnnWmm@llmn+o;p}qrstuXu;tssJrr qppSonn mRlkjj$ii)hgeb_\_XTzOJFFB?ys rr*qmpp&ooooppzpqqEq,qppMoo3nnnnnnImmsmllkkj|jqjkEklmnop8ppqqq;q#pppq#qqqqpp:ooooooBomlqjShfd3ax^\NZVXWUSPlnll|lkbjjkllmm;mnoopDq qrsYsszsstpu uuuuvaw wwwwvvIuu ttssmsisxsss\rrq>ppBp2ppLpq(qr6rzrcrTrqq.pp,oooooMnn8mmDllkjjjk>k}l lmninooHoppzppppqjrrkroqqqppppppJp4o}nQlkXihKfjdYbua_][Ynnnemm-llmnnnno^oppq@qrs9ssssttu%uuuvOvwQwwUwvuu9tssos>ss=sst7tsrrFqqquqFqgqr@rswssssCsrr*qqMqq pp{oooDmlkvj>hgYee d6ca`pypwpLoo"nooppppq%qaqqr rssussssttu uauuvavw@wxwEw vyuutUssXs=s'snstPttqsscsrrrrrs=strtu*uutttt1ss7rrKqq1phonnmwlllFkkkk;k^klmJmn npnopq+qqr1rwssjsscs-rrsrRrrrr\rqponmlkjrihhgg/f2qqqqEppqqrrrrssss;ssst t-t)t"ttMtuuRuuvvVvhv~v9uu%tLssrrarr$r8rssssss_systt=tettuauvVvvnvrv_vPvuuztt sGrbqnpgoknsmTllkkkDjjj8jXjklm9mn?oopqr.rrrs^sssssssfsssssNrr qpnmlkkQjjjYiidsesSs4rrrsstttuu4utuubuouZuWuFu&u tuu1uxuuv uuuu~u%tsrqqppq:qrrrsfsstt~tuQuuv.vtvw`wwwwww|wgwYvvcuutsreq onm]lMkk#jjjjihhi(jjklmpnzopqrrsLstst t:tItjtkt:t$tetttt=ssr6q4p nnmOlllllil5ssssnspst>>c>?i@AYBDuGkJOSX^c@h~lqtwxzez{c{ zyxvCs\nj6d^Y S@NaIFrCBAB(BCDF"GyILPTX\`}dh~l.nqDrstKtuvwxyzIzzzzyxwvvluttEtttCt;t5tTmmopqs>ttu)u]u`uwuvOvvSuuuuutrqp;ofmzjfb \W~RLQFA~=:8w7 667S79 9;y?BEQINoS=W\gaEej+mipnrst?tuvwy!zzz{F{/{0zyxvwwkvuutttttbtolmonprnospXqfrds:ssscrZppomnnemmAm.mn=nnn=nll:hdq]QVtNF>7]0)%I!!i !"I"#k#$$y$%&*1. 4;8CL/T]gdkptuwWvvtssokd]U8LD;~4,'#,!z S !"#$m&'(m-829?FLqRY_8dtg|jkl8lmn?o*ppqqppqqNqrr|rs rrqr qqkq\pq8qrs@stt9sr;poVnmml=kkllm:m~m?mZlMkegc[ThL9D(6.)g$6! > !!%"[#'x,3:AHOPVy\bf}ijkl l~lmUmnEnbn5mmmn5no%op`pppKpppqq^u;u1u tttt|t3s qYoYmlkjjiiij|kkkl}kjfaZSJB; 3-'/#!!8!"!"v#&#$%^&#&'(T+2.4:AHbO U[b'fjlTnEnoo;o(m jeL_WP=H?70\*%y" r !(!)""%*18?FMU>[b=fdijkl+llmmCH]LPKTeX0\,^`abdegibiQhe^a/ZTTLEB=660V*'G$e##n####$$|&*18?;FMTG[ bfjkm m2mmmmRmmlllIl!lmmnoBpZqVqrBrst=tuVx wvuuttt%rq(o'mkl"jj6i:hhhiajkkltkjgScL\UME>71+($$#s$$)%&&p(*-c/36&:r?wDIDLORTU8WZ\R]a]^`ad/fghYeb\VOHA393x-R)|&%$V$$$%!%%(e,O29F@VG MU[bgkQlmn nVnmmmm_llllm{nFnopqrsstuv,vx9wvuu tttsXqon lkjiihi iNijklEkjg;c]LVNGo@b9q3-)&y%2$$}$]%o&),/62I6:>DcIxMP]RSUVXRYYxYZv\]`ucyegf6c^TYRIKD2<5/I*&%$$$X$%-&G&)#-&3:8A_H1OVN]chlmoQokooSo nnn|nmmmnTnoAoprrstpupvjwCxwwgvuu!u:ucu0trpo'mlkjj`ijjMXR!VW]XX WVU}TTUVXvZO]`Hc;fCfea\VOyH @9`27,'%/#$g$%&(*-x18?ELSZ`gDk~op9q}qvqzqpp^pNp[p2p+p`ppq qqhrsstu~vwxyww4vuuuv7v&uGt)rqKp@ornnOmmmmnnoohnjm'j;gib^ XRL&FwAk:p7j43N112}59->BGMR~X<\%_J__][YaVUTUVX{ZE\_befgda`[WUdNwGA#:5a/-b+,-/13H5(8<+:899<@5DIRN#S:X/]f`ccceaW_K\Z"XW`WX[Y[Q]_beghfd,_YSMGA=8534579;=@DINRS;X \bfkmoplpp oTnjmm4llmmnopppqqrtu$v6wIx_yz{w]w!vv}v}wwwwxvutsssVrrrRr[rrs\sbsHrqqonDkvhTdY`v\XUQGM{IgF8CB%@4@@nC?FqJOSXE\a[dYfffdb`w]\B[[[4\:]^`c^fjhdihgb^tXSlN)HD}?=d;<=@ADFILPTX\`egiFlnp}pppKo9n1ml4kk?kaklxmnoopGpr stuvx yAz?{>vvtv\v.viwwxMxwWvslsssscreqton]lidf/c_]ZAWCTPMKIGGcGnILJP5SW[_cfiihilgfdba___7_`adbegik1ji{fb-]&XSORKjGFEq,on=lNj-gefc"a^\Z)W9TR+PNNY[^behhk+mqn>nnml,j~hg}fejeet`tlt_tgtttt?spr1q onsm0kjji6hNggfedmb`_<]]\{]]_aDcfhkmopvpp|p6o*mljj,i!hhijlmnoocnlj6gda*^[YYZY:Z\n^`kb3dDfXhPik3l|n5oqrssJrqVoml:jiiYhhhik*lom$mLm]mnopq/qr;rssr}rlrrsfst4tttsNrrs9sttAthtu"uXu@trsrTqEp8on#m?llQlkkCk jjhgqfdd[cdCdfsQsrq oonymmmlm&no'ppppq qsqrqrrrrqqopEpq_rryrrrrrr~rsLstVttuueu!t{s1qpoo>nn|n@nnopq>qqrs srrrs"stuvvrvwswwxwwvvu6tKs\rfqqppqhqrstuv;vzuts,rq;pRooOo'nnnnnooXoFnninoop*pqrmrrgqppk8=DBGgKPTX\"^acfhiijklAlm@mmnnnnmmmmmmnJnnnn1mmllmmnto^pqs(tFttt-sCqp npm kjihhfhhjhijNjklmnop:ppqqYqr?rs ssssrqqpQoo"nymmllZlil|lljlVl^lmWmn,ninop%p(oo8nymYljhRc^YSMF?92,2t7<<@DIQMaQDTuWZ3]X_ac1df g"ghifj jwjkjjjk-kkkkl,l\lDlkk0jjk4klKlmnopppon:ligedUbat`(___`a@bIce2fhjklmnoopWqqrs3sWsks+rrrq_ppsoo>nzmmmrm`mDllllmmOmZmumnOnn&mckjqhg)dD`ZUhO IB;4h-'!',u05c9=BFILOS~VYZ](^`ac'd9eafLg70)"!%)-159=6@tCG\JMORTVX{Z[]^|_`a^ab(bcbcdndddId cccccd dFddddddcBai_S\Z3WUDRP:MKJHI^JJLNQSVY]`Vc emfhijlmGn,nooppxppppppppoooao*nn5mmllYkkPjjjiipgeb8_\DY*TqNHA|:4 -r& Oz"S%)-114x7;?mnjnno&ooooooooVnnJmlldkjihzgg fRe{c_[XsTPK#E>7H0)#rh   "&)U,037:NOQ RASJTUTUUUUUUTTTU UTTSSqRQOMyJGDB@>q@CG@JNfQoT'VhX[]_ac=dfgbhUi$ij>jkfkltlmm#mllkkkj%iIh fdc(a`_]ZWRNJF+@X:V3-2& [K U O U sc!$(O+/%24W68:7AEHKNQTWZ#\-^"_aSbcdefPg+hiijBjLjmj-ii0h[ged a_r]-[=YWUQMIE9@;{5W/h)B">4 Dq   6x!$'* , -/13578:6;<>8?{@,@@@@@@{@4?????>==!;:9630-e*e'%&" @B20 )"$',*f-1y5f9E<@%CpFJM+PRLTaVWY[:\j]]^1_N`abcHcMccrc=b]ap_^E[YBVSSQOMQJ[FdB>1:E50h*%a e XSty%  : /PD6!`"$&(*,]-.0F13 4<45X5Z5d5O5W5O554444_33a2t10Y/0-b+l(%" 9Ov=a#'+'/(269Ay h[;{F9C @!#$G%&()/)*5*5*4** * **)))>(('=&f%/#"F xs: m ="&r),v/Q257:3<>?ACEGRHIKjMNrOUPPPPPfPON?LJNG2DA>s<9x630,($ C| eX?ZiY x'y : B A]QbUe^'s`s?ayd5Rm & o(;  <  H2ut" $'k*@,.02w4T6g8|:}<1=?$@B]CDEaEEEEDCA?;96:3j0-*(+%2"ETas B:F ,Z % " g +(T" "Uw{o? > 7OZM7  !{2h"I$R&')+-/1524568399:M:::986U30.[+(%# ^t;X R/v,.VR 83C]f s  , # W 8 h F . S   k`U&eKVSbidJ" S  IU!# $&j'()*,M-s./////.-7*(&o$!?Ui `CUum @-sMGI(d=/}Rg9Kb-0XO=;PguKREUnK|S }jv^b !n"#$%f%^%!#" [d ([$Xkl*wqQEv;`2#Zd&T61m2fpd8Pk^XzMi @z  j BPF =H}!o T  ap'Clm23m Pn;sW]/0? [v__AhYV8S*,6MY]kb?  3k%<  9 O D  +L ]*~] W R{%`$`!/$d\!] xB[wvX"Hm`'&8BA a>:@/!-X6f(j6dithJ?n/ecXA_3EL6x>E_/m _':4bV1{w'NeyY"-$!0n|3jOjsm2Lg!nu>O>& EtK~Cc<1V<>Rt =7<1!"i#DW` Z 7XpngM0  +26|X:-g^gdi[Mcfr"=j (!}ObS @6mY SWm%Ju.W9: <gGu\>%s@-Iu;`l7V77O%*Nrr.G[5;6XX\@lapy)N3WS^. Q($>wNajWH1lSLO<24Qq'Ha3Ju=RN~m\[27X.T|2#"$*OtTbTf|maSawc`^y ];A^ 4GU) CkE+{` x"V!v_!l 5o<<pG:10b"H (ugbXk1UYeBIZ?%kvK]fvffg53neiY4roK.(62p , M] Kxjfkeiz#CT4s*l/`{sfj$s5wV| ;b<gh%'L-HNc:;Beqn/(@ 0^c[^rzh1*.` =Qva*1/<|G(^iPU~sG<<x ]sJ`Y%&De;zU=i# [DNa ">wG(;K Rd9T|Oz\}qKLCY}I!au@yTL:"ekSHSnh>+7>Wv,,gQGPQm  cQ$U 8w5R@hRT{!zz~rz1MWTYu*(goBz>T/A;$Sz/nneo}mOFPm}-7& zm]<+,Q~pN? 7/@Q7$iIKePMSh}Bv[i@^baTGfW#UaY&SFhs[\\tpUL[bz&&-# tWFF@JXw^I2=S2pPNu?A6Mml#^Qm 3]tw~|n5=RL:5AQtuw,_Pi%w^bnuop sXJZtk]ZW]Zq &oX 2ipeEt[M[u@_pojhX 2Z_M>?MrB1_,THb]m xqq|m^\bryo7Q 0Jl|~cFpFC_pun+IX`]Y\vg;,SZPHK]vap_,A  nTQXtbl7TZb]_N.tIH`b\] ;JWWTR^fiU) =ZdVFKaro]z\*'^oWRVwX+s 3>W`[>oOK[WNP "8LU\YPK\`?$Gb^JAKe~ktf&1u rlmGR !K`O(yjYRLD>)@Tnr\FVg\= DbgQ=Fdzw^fX(/XLTN4*zzQ!Os3LF "1sOA7 2JoqWU\cW3"TwhF<OpqXXtq@(![aypF9+K/4amO]9FB#'(|G3'1Urt^JLTO=6dqdRJTsygfu]6FM_M4lM;Mqtin 8-  k61Mqy^:1AZaB"&Fgxq\JWvafxep_{bX:X9Da]a&(-#tE%  *FXQ=6<MWN=5>Rixvb_jah/UV^L0 gKPrk^y !$lB) #(7@A<69IUPGBOl}rbbj!5MNB }sagrjM(  ,9;42DXYOFK`|yuny)7=+uknnz~u~ j6   *886?JTWTSTd}v ,'}okq~toz  tkdI%")3;@DMTXWLUw}tv%(qplp{}| wO2 (6/!%2>??IS[[ORnts{xwx-1*znru}xv~ aG&   7a|pN& JouZB*1MZTQB&>j{[BBWcsyncUMJOPYfu~wiZMB@@HR[^blrpjklihip{}rjd^YSS[a[RTTI?=EQVO>/''(  "\~P! P|n=6Vd\>$=sxO03Jr~xvm_OFDMR_s|maZUSNLKOW^aabgqxxpkdYRLSdtvnjgeb][\^YV]`[M<4:HRO=("" .]T7i_00PdiR/(>Z}lE,0>`eQOVPMPZgqsorndSA72;J]ipy}oZKIJT]hu{~tcURYZ^irwri]RPS\cdbVE708NYM/  [b# 3ye)0^|tW, &Yf*AlzfTC?BJGIWj{~zj_N9("9Tp|\C6(-6MezlYOIR_nxwthWMQ[\Z\ZUI2*:MN9 OR9{].(Os~rK!:cwnK,8on\ONNYhxsk_PA40/436<GR`mv|~nW:%!6VumWH@KZobRKDIXek[6.CF9 2{R3\#<juEClk4?P++0Kayz_@ )BVetz|th]XU\hwx_?$FluW>9<Vzv^I8:FWe^B")=C- ezO5\.+Gsf>4YqiO,=nzKVwU6 4Nhqe[OE<859>IT^iloiaP8''3Pt^8'*Ii~oN-7TfX5#-& GgD6f#&Z|O%<j~m>\e Oc.BthI50-///00.+(,3G`xmQ7$:eT%2bg95bpY&'! _8({_(MgE-$4L]`I=n\/Cwl5 8Wr~p`O<1-29=;6674/(&%1C\vyO% 7k\, (Nptb7 5PL6 3qLGza+)Gcs]/=}s*Y@XwM/,:HY_\TVYXQI<,!,Jq` Tn*N~p.#R_<  TG@w\/"HcdS.JxzR<4E}o> !7FVqwcE#Bwc8;<n{R@K66S Cw_'&JedBW}t:OH` *_Im$5@<@EDLby~kM)UGo22h1G-{Y*gw]3%Ha_D6F5S{~C-1A ;=b~}bH.!#+AOT\TC&JW}%SsY' 7Vc .\qT(.IZU9 3+ [Tc eCm|.n_7 (H[`Y^YH)XL&O\s&2hg-% b_,'eze>$4QYG+ !)#\P mzxUy3d~`[K!{ssu)=WVIth=Ra6 ,<Vl?.6Q]C# 3sin<~qr k{M 7DISWVPHJTfi~.V^`-O[$E}q'.3UVc)Kkc<6G< pf{0bQffg{<u{l-g3'_^8_~nZE0 ^0E{9nGuC9I Oo_/2( }BC>ugMV/32Rv0 a|p-TgueuR5{iN{IG?=}M1D4?$76QDtNUo.\ki[5+c&YSm   %    ]  / G ] 3 yrv]t-yM$v ~T**CH2  6#+t 2 >  h  _hTA2* #c!;Io[ ! vCAWQ0sXi^/zut5#&  # <V[R*+qv7^;\L OPg93/P ) 3 eGl'3Vx a]di\T3] Md/ # z & }Ca7 $!!!"x"##/""v!!q!Q!x""##@#:#A#@#K#P#:#>#F#$U%G&D'''( '&%$5"` ui}gM& G T g%XgT,Q vp| D^'N ph a!#j$M%*%c%e%/%%f%&'(z)*+b+,,,,,,m,,-,-\.&.///4/@8ABDDEEFEEEEFG*GGGGGGGGGZG*<;97582|/,*j(.&2$2"J  @QgIU!7"?d?| #' *.t1467: <>@ABCDEFF'EEF;FG5GHJeL+MOmPQRYRRR!QQQQPQQQQgQKQEQFQJQ4Q2Q/QR RSTTTTcSTR'PrNLK8IH_G/F DB@>f;853+0.- *(&#!Q^Cy`  M ws, ($; _2kI T"%g'*.159ZA$C^EH;9753|1.]+)S'H$" $d6r2d.+8(&%$f$*$ $%')y+.*03 6;9=AaDmGMILNQWS.TV/W^X@YBZZ[B[#ZZYZZ[\^d_ac?d[eHeeee\dcchcbbbobaaWa+aa`````aaabMbbbbbzbaV`_w^U][ZUXVTR(O}LIG&DBv@r>nBOF3J MPPSUXZ\^D_`abJbckcd cc&bcHcdeghVijkl+lDl|lRlk~jjTiivihh?ggpg?g!gfffffffgg5gXgggggggg f}edcobL`^\ZkWUR~OMK~IrGhDB,?0<97x41.+)"'#%"^o( MXCJGC}@D=;:9s9Z9:;x=@#BDGeJtN QTWZA]>_bIceLf@g}hThii`iwiihhhiijvk"klmnOnononnnWmmFllSkknjjj:jiiiiiiiiiiiiiiiniiitiij j.iihh;ged;bp`>^[YWYU2S"Q7O LIGDKA?(<9641/-)%!!X T*PMJHFuE`DVDQDE0FIyKN-P{S@VyY\_aadfhjklmXnUnoIo7o@o"o nnQnnnnogop=pqUqrr qqqqWpp>oo$nn6mm[mlllll]lRl^llllllOlkkkkkkl1lmnmn8n mll,jigfVdub`^\ZXVTCQNL<{:7^3/*&"sHlD a [4XV SQOON*N8N OFPSnUfWY\_bdSf4hKj/l'mnsnopqQqqqqqqqrq8qq*q]qtqqr#rrsihvfeXcb`U^\dZ?WUWRPNLFIGDhA>,:5;0,(Z$s w_a_]\ZYOXXX:XWY}[ ]#^`be6gRijl.mocpqDqrrs\st t:tsssstssssttQtttu%utttsfrqq,pdooncmmNmllllllm2mn[nonnnnzn]n"mmmnnopqrvs s rr_qpoon&lkjYhgXed bZ`j^=\$ZvXVTRJOrLICE!@7;y62.*&"edKba`__h^_$_i`iacdfegijkm`npRqMqr)rrsttjttttttu@ujuYu5uuuKuuuuuuuLttsUrqq p@onnmflllhlTl3l,llGlm{n2no&o9o;oo&onnnpnnopqnrLssttbt srrqzpp o)mlk`jhg[edZba`a_Q][YVS1OnJFAj=/9d5r1-*(ihNgeffepe1de eYf#fgijlm/mnpqrsJssstAtu%upuuuuvvww8vvvvvvvvvvluuYtsrr"q`poosnn5mmlll_lkkklHmmnynoDooooooovopopvqNrGsstuuuujttZssorrOqkpeo0n ll k j ih5ggllllmomnqnooOooop ooo|op;qrrsttuucusuttKssrsrxqponn,mllPkkrkkjThUf/c(`j\XTpP~M IFC?da^\@ZXUS%PmmXm lll;lFlm"m7mHmmnop4pqrt9s6r,qpBoouo6ouopqqZqrrSrrrrNqqqKq&pppMoo/nnEnmmmomjmhmn nopWqqoqr+rrs9sFs!rrrrrrrqqKq q qq8qVqFq`poml_jifdb|`_][YnnnJmmmmn|o oooTopq{qr;s7tquov)vwPwkw8w0w%w vvvwwEwqwxxHxSxwwrw>wvvvRuutssrqkppprpq qr$rqrrss&s/rrr8qqq,ppZoo8nnmmpmKm lllm mn3nowopypqRqrrArVr;r'rr#r"rqqqfqBq_qqr#qqqrpo6mlk4igf>ed*ca`Tpp%oooovopq0q7qq`qrZrrs>stuv/vwZwhw+w(w%wvw w)w,w=wewwxwww$vvvvdvJvOvuu t@syrrxr%rqr#rs7sst+tWttttnt2ss(r{qq9pp ocnmm~mImDmllil:l-lmmnkooppqqjqqqqqqqqqqqqqrssXs6s(rrqonmplYjihh~gg8fPqqqHqqq.qrs+s?s%swsttAt^tu uvvnwwWwSwwvvvvvvvvvvvv[uutttttuutt7ss\s*s8s9s^sxstTtuHuuuv v/v9v uuttsrqq-phonmmllllckkok0kklmnXoop=pq5qtqqqqzqYqdqwqqrHrrrsrttttdssSrdq/onmljkjjjAiiis3rrr^rrsvt]uu:u/uuvvv.vivvvw wwwwMw"wvvvvvcuuuuuXtss2rrs"smsssssushssstthtuuvGvww\wvwwwwww8vutxs_r`qhpoocnm#llgl'kkTjj}jjklmno)opq0qqr'rqqqqrBrs'sustu$uuuttsrq onmmWlllylhlFss8rrs7st~uwvhCh2hGh^hhijfkmlWm=n0oopdq"qr!rCr;rHrs4stu[uv|vwwwvvgutrsqpoouo nnnorr{rorsIt/ucvwvxxyHyzLzzzzzyyy$xuwwHvvuut=sqpKnljhfpd}baazXz{zGzyyyBxwvtrn[jfc+_\vYWVUV|VW~XYPZ\^`ceAgqikmzop'qPqr r0rys2tuCvfwIwxYy yPy[xwvuu-t!sUrrrrrrro'oop9qstmuvXwwx5xyyyyxy)xxx=wRvu tRsrrpFn*k4he5a]kY7U:Q@NQKJNII IJ[KNqQTY7^byfkWo[sSv xsyz{{n{[{RTCVYp\;^adgjjVlnp?qrrss@stuwwxxyyyyy@xIwviuttYsssssst nmnoprfstuQuv4vw#wxJx1wwwvwmvvtsrrIq`p_n7khd`\8WlRN.IFCBbA?AACAHEOINSY?^dwjnruxHyz{x| {{zywvrn|hc]WRMvIaEBA%ABCECDFHIZLQUY/]^afimor]stuu\uv|wxyAyzzLzkzztyxwww vvuuvucuBuSullmnpOqrssCsss_sstttt!tJttt7sruqrpzpnmfj;fa]WxQKF @;8O5(4)3424{5g67:"=AFKQW]ciQnrsuwyzV{:{*{yxv,sojdq^ WQ}LFB8=;o9:j;4?BzFJOwT?X]bg`knqgrtAtu%uhvw x xypyyyzUzCyxxbxwwEvvuuuuulplm_np qDqrrr\qqrErrrrKrs sNsrqpooUnl@hydv^Y$RLCJP?W]d}josv\xyPzAzyxwGttqlg5_XQJE?-:53123}5 57K8|;n?LDIO T6Y_'dIiBloqrs{st"tuvwxOxxxy[yy0xxUx%xwwvcvvuuumm mopuqr8rr|qqppq,q7pppqzqqqqpYoromkg&b\UNG@94B.+l((i(G))F)*M+-0 328=CIQIX`Igwlr,uwxTy8xxwNvrojdT\ZT}LEh?384=/=,++,./,0148>DIOU>[U`fbjmKnp{q2qqrZs7trRrs'rqpsooooo no&opspppapo=nm,je`Y{RbDK6QuX]chk}lnoDoop'pqrst thtuufuuuuvv0uu%uu=uttoopqrsosssqpSoyonnLmmmnSoooooonlj+d_2WOG@I9J1,G&$|"##`$"$d$$$%3&)-209@HQYahqorv0wxEwwv_tqn-hPaYQDH?8I1+&#"!!I!6"?#$&)$--39@GNUs[bfjVkmnnananoRp3qqr%rjrrsRssstttt}stt\tWtRtmqqrxs1st{t}t{s|qp(o nwmm;llGlUlmn6nnnnrn5ki$c]~UME=6/f)$"!l!"L"#A#W#E#e#E$&*B.56/C)$! z !u"R%(.5B##$H$%& &&()-2@8>ELeSZ5`)ehlm`noip%oo/lje` XbPH@e81*+&*#R!! !I!r""A$+&+19G@HOV]chjmmymmmnno@oooopp2p\pppqrEr qr&rsbst9wwvvauuhtsr\pXndm lJkYjiiij jkSklmrmam0jgb]\hTMaE>V71,X(&L$%C%%&'()*,.3,8>,CI7NSY}^4be g6hiijkmkji d`;YZRJB;43.O(%#L""#K#g#$*&(>-(29@HaOV^(chk%m\mnYn:n5nInooRogooopprst0tu0yxpwvuutSsZqoml]kjjiXi$i ijjkllmlm_m.jgbv\UGNF?d82V-)q'&"&N%&( *+-N.14g8> CHLPTY\`&ac!c`cdnegi hhd`Z~TsM7E>L7 1Q+(%$$@$$%K%').b3:AxHPW ^)chkmkmnnWnBn0n_nnnno o?otop)p_pqrrrsNt>u uv;y:xwyvjustt sqomlkkjj3ii`iIij4jklmwmZmjgb]}VOHA;y5)0,)'''#( ),.036}:>DINaQ~TsVY\H^j_=__m_c`@ad fHg g{da\GVPIA:4.+'g&%O%%&']), 05,8 3i.,$)('(*[-^/26 :%>CIO5SbUWXZw[~\'[[[L[<\O]`.bdfpe b]XRDKD=g60,D(&J%-%%'(7*-273=DKRX_Wd[i8lno{p)ooomoFo"nnnoo;oopJpqr ssgstkuvwxIyxwvuttQsr\po!mml4kkjj|jjkGklbmllUj#gc_ZT>MH B<8;30A-.+*L*,R/v259=BHeNSWYJZZ[x[!ZcYhXXXZ[k]`c`eehd9_[7TNGr@ 9-2.)\'U%&'(*-0o49@G.N TZ`ve6ilopcqppp3ooo7o ookoopMppqjrfs]sttuvxyyxxvuuAttsqp5on4mvllglkkklllmlm lgjchfdaj\xW(QlL-GDB8=841K/h-X-.248mmmmmnnDnmmAkvifc_ZUQ-LHD?H;/7Q522369e=xAFLRuX]`)`a`_;]|ZX>VzUUUVWYY\&_}befgAdc`ZTMF?95J0d.,Q-V.E0379=BXGMSYD^:c8g-k&mopq>ppoo'nnBnNno)opJpqq?qrst9tuevwyC>G}LRaX ^ ad}dca^[XiVETU%UTVX[}^bGegahfc^Y7RKE?;64s2347:>6A$DHMRW\`e-hkmopEpp?onmmpmm.mn\o4ppqqMqrstuAv w=xz{ryyxxwcwvvjutsrrPqqqxq;pppqqEq7q pPon=ljheb^2ZWT`PLGD0A?p?G?BEHIfMnRLWg\vae)gffMca/]ZXSVVVWYN\_bcehihIfb*]WQLGCe?,<;2<)=d@rCFILP9TFXe\`dgj*lnBooonnll kk7k|klno*opqpqhrtstyuBv'w^xzC{yyyx{wwwwvv5u;tRssos[srrrorwrrrJqqp\ZXXXjYgZr\_Qbeh^jDiheRa~\2VRMJFDBCEbHKO9QT|WZ^7aldgBikmno{o(nml\k)j7iiiijQkln:o"op pqsstuw xz&{yyxxKwwxxwvuu ttJt>sssmsJsOsCsrqqp nmlDjhfdHb[`k^[XTQOM*LwL4MORVY]afhjjtigect`^o\\y[\z]-_a/cgi;kjjWgdZ_[/WSaPMaKJbKMPFStVY[J]`cBehj km4noognmlsjihhhhvijqkmCn(nnopqrstuwCxz!x0x8xwwwxx1ww$v?uuttttNtssssUrqponmlekih fegd-ca)^^[XFV+SRRXS_TdVYZ\`rdgj"l5lVl8jifdYb:``__C_acyehjfkkkifb^[uX?US_RGQ_RTrWZ]`acegikIlmnio?oQo%nlkYihggrgg_h injlMm%mzmnHo.pPq4rrsuOvxvvvvvww1wJvv4ubtttxt|tQtsssssHrdqtpbomnmlkjihhgnfec`^~\ZYXYeY[]h`Ec]filnnSnumElj8hf(ddbbce;fhklmmmrki+ebZ_^\ZXXkWYZ]`c/e*fh$ijkmFn8noCooo*mlkihuggg gthi[jl lmm2mnQoIppqhr9sKtjuuOukunuuuvvutt&sssssssst4tsrqpoo,nmllDkkk[k;kXjipg`efcba(`Q`g`abdgiln~ppBpWolnm/kqihhgAg_giRjl mop oon{lifca`r_k_s_(`7adfhj}kvljm mndoFopLpAppp omnlkih~gggigh0i]jklllm,mnobopqqrssssttCtttts;rrWrrs(s>sSssthtst srq0ppoo(nnmmn n&nqn2ml1jiFhgfggTh%hj!kmoqGr\rGrq6ponlkkTjk7klmnpnqrvrrrqom[jhsfeePemeeg!i jlmNmn`nnoRpppppppnmljii4i8hiijklmmmmno7opMpqqzqrr;rgrxrss9s+srqqWqMqr?rrssysttt;sr%qdpppop6ooop!pipqq ppMoRnRmmmgmnno3opqs5t-tttXs|rrponnmmnToHp"qwwIv{uutDszrrqqqr_rstquSvWwww`vu)t&sOrqqp]oo\oo+oOoooo^nooopRpqqbqlq}qpHoonnnnnnoApqqryrrrorerirrr0qpp8olmnropZppqpppxpq3qrr2rirsZssrqpooooopprpq]qrqqwq}qqqqYqrLstvvwxx'xxxxeww9vuu,tdss.rrsss]st?tuvwIwwUvutt s0rUqppooEo:obooodnnpnno4oopPppppp ooxoop p(pypqrsSssss\s rrqqon;lki^kmnoprppppppq qXqqqr`rsrrqp)oo-osQsVsrrrrBqqUppeoo1nmmcmllLl7lmmmn)nVnnoHop/ppqr@s!st"t+tqtltsriolhe3`[[U?OrIDFyLGQU{Y]`9S<^BOGZLPTXD[^2`be#fhhjQklm$mmnn%n|npmm3lm5m\mnn[nn6mll!k~k!k6kk{l7m}nopppZoJn4lZjSh edbb `` _\_M_j`-`abdxf7hRjxlDmnop\qqqr:rrr[qqqLq ppGoo1nn{nln]nXnKn)mmmnn6nunnop5pppp%onnkhc^Y!SMF?82-L17VQBAFIKNbQhTVWY[]_,`|abce)eeeLe8ef9fgwggZfffhfee~ehee.ef[g$g-fe^ca_]0Z>WSQONMAL)KJJLca~] WPJD:=6/(!c"&w*.26F9@ClEHJ(LMOaQS ThUUU=UV^W WWWV?UUUUUUUlURUUVU)SQ;NLIFD.A?=T<";:98889;4=l?BF IMQ$T}WTZ!\^a*cMe3g;hjbkflim"mnnonnoo@B>CEGIIJJJKL'LLeKKJJBIIIJIIJDJnJIH EkB?=4:7532h1110000>1G2X4L6?9;?TB|EHKNQTfWY\W^a"c dXefghiRiijSjk/k&jjiMhgfercb`h^][YVSNO'KHC=7|0*$~` i"? -0"h%&'*-/.1O3F5L7(8:<>8?)?w@@AJABAA@C???U?(?*?O?O?T???>y=:c741.+)X&%t$y$;##O"#1#$%'*,/2595<@$CFJMHPrSRVAXZ\^i_aybcud$eeffffffe6daca`][YdW^US1PLIDAq=>8/2 ,& j&  "#" X K U~Zk }"$&(x*[,5-/1234D45m66666t54444k4344(4-4;4n4R463(1/|-*+'H$I!9$:m{6L!#&* -1'48d;?.B_EHJKMlOQSUWXZ)[T\]^^^^k^]5\=ZY%VT`QO5LJHEAR=96K1,'*!D d t&- { W]e "$&W'())*G*+L++*D){)?)\)F)')((() (('&b$&!p4i1b<  [M ;#'E*.>1v47:=E?B>DFI%KLNPXQSTUUUUU/T/SLQOMKJcGfEB@<96"2/ +A&!u 3h> QPoyE w R CdA=Z3< G D{tX;i].%-CQ<} 2 V  [$f*"%'*-B/14A68;:=^?BA%BDFH>IWJ6J\JJIIHHFvDA><97}41.+($!, o//sk l ih9Ru: 8!oN } % e_xq\]6Hm X  ,ah"6$n&(+-x/14689;=,>e=;9S6q31n/,L)2& #!1G TO#kgKKn8M O  0  O 7 \ $ \ 3 Q K  ;JHMps6Np^:I= g +4F[gs #%B'h)g+m-+.0012344g4D4Z320.5+)'H$!MXIaW C- ^Y1)l|tKA_X\LpSTsLQqKHrm=VH.16`#LYE9e w   F!"$8%'%(D()p)g)e(b'$# !66U #8EUu&2v*J/yeEI${ FR|4(M1>U2DZvDu}py  K=~ =u`#@`M ^ c[}*["2(rTQWHJ2J6u QaPTU,5JC5t`SK  vDm !9xL8xDO![>rOzeP+TI87rgO 'mWI# #%(q]N7 ] X  _ ( f  y qu%cE3i)`.`%!vke0)QM pj=9Zb^B=76-)-3/-0>Slzm3Nvdar2&?A%8:?92#BoM\Uc1Ih{'J8D0%7MpO 0y} #Nqhkm9=5f  ZZJ!j+<T<6^:mhzO_*_/:&V8#aLh!aPAq ^b\BsQ8T<R6!_6Q?IgR#-qkVh_SL%*Kx)/3," l6<X|7ITB*SA5ozq\?#52eD=MuF?Nc.Q&tzD! 3Np#a.LI#bk.!W [ &~ OC>- KW.--(G-FwI[YrFo][fdhteD51CPm" n2R8wX<"iOO) @ 9?kD&0Um5#=,Iotmru}la_[dt>S2gwBm- [Z5H+,?G1qeH*#0oc ,g8~wuy~zvpcbmXlIzxVf( ob*:&'$_3ST^/:+z[ pDw1Qxkd[ZYbj{W) D4I_<?Qeu0H# 7 <S2nO]H  u}s/{R!hi60Zwkloi> Af&0^$s]0'~}3>5" AM/mu:nJ6 `iDL SzS4 *Jm{`F(?pY=Jbx/!+hp@(0!$<0-ei;bu'"2/HZ) 2SnkJ47C^vhM2("=iZ:, e.eh Vm&'(<) JeQ!9xd%?<-%0M*/=Uk~uaTGM^x|fG62EUrdA-*A~0bk FolG'  2?%@KE2#%5VzO"*mlqG;-24Fb}ufk~gLLajE/,(4;]'1K.ZlV,'%  -J3 4NQ@*%3TtsO=EuptX0&!4JezrnhsrV@277Lkw6X $Si`M1"  + ;9$)BJB65H`batWAYDI]C6?ES_r}~sb][_agj{PJh8?[dT<@C2 $  &<;" -M[I4;Q]fr|qVG_L BmJA?OVh{gXSOUZlR\u:!2LXSG983 +&  /A0B`V;5BYmplteKQ{b"1usZTadmv}rnfaXZaxOIo<",IPJB;>=1+D* $ 9B2 F\ZK>E\r|aIUe24e|wty{~vuyxGD}m?+3DUPEGID6"!3. ' &CI1 %OldJ>JkhRUu{D(/`u: %PR0)<W\RGCQXH.0:, +).BK@$4\mfQCMh{ygW]sY<D]iB-AgeI@LX_XNNQTL5#$0;6 !16*-QbG%#>atkQ>Ehyw|wfXbvVG[}{}~W46SbQZkwmYLKV[N8(&4>6" "4'  .4/%&BWN8.6JcsoXK_~jam`V`~gTQfjSUfnkaTRTVO>13=B;)!%  -;4)-9DIC<8Fhxddq}yijxp^dtzxtsgpv_U\hodURW\ZM>47GPD,   &-/03>GID9<Wrvkgio}|wvpc`osghjwuqsvvqgafi_N?87>JI5#'    2879=FJDAHWcjnmimx{te``qrc`dowzzuopxnov{s[C;@EHE9'#)*#!"  (/38=CFFFFN]mz|slr{uu}~siadlxrmov~~wuy{okowzueRGIQTOF9-&%(*'  */*$"&0:@BCIOMPZj{ulo{st}xmjqx}zpg`fp{uu|~}o_YbryrbSNTZ]ZPG?:62.*#   5[thC Dhs]B( 7PZQI9$"?h}`IET]n}tj^PIEKPYbmy}k^SGA>CJTZ`ltslihegmu~vpic]SQ[bZNMLB::DPTL;1-,*!  "X|uGFp{h<9[f[9 DrsN47IjwrqhYG>;DN\jv|rkd]XUUSTWZZ[^gvulaUPLUetxsqnlic^_`[VY[UI:5<IQNB1+(" .]L+\}|V,+OgmS-?bgC.6Hiy^KKSOLNXdmrnlcYNC@>GRboy|hQA@DR]gquxpaTQX[bmuysi\PLNVZYWM>40:LUM5  [^'l^$1^z].Qb( M{xbP=8>JILZm}|kZG2&(2F]ttQ4'#-E]skXOKTbowspcOBEONJMMJ@0*7GJ: IO,lT&%NtvQ(9^qoR18roUEFFQ]mqh\K;0+'))2@Ralw}tcO5"2UuoZLFQ^qzZIC9=M\bR3,BI<,q~N)vQ5fvJ#!Gmf7 >T(!=UosV64I_v~oc]Z`fo{xdF)Jq{]FBE]rZE22@S_W@$,BG1exN3Q$$CriB$'@asfG&!Er~T$OynP4 1Oi||rdVJ?;;?@DIS_irmdP7&+7Rxb;*.Jeu}iE"/J_U2 "+' QmI8_TT(!Hvl7ch#V_(DyoWC;4412783)&?]wjQ: #<jR# +VxuZ+)YjR&# e;'xY>{eD)1PehL 9pb1!Qh3 4PmubSJB@?ADEA=??8-/E`y~Q$>q`- Dfl[04PM9 5 iF1g}[$ =]ue58z}7]9LnE'  !;P]ijg``_YL=/%#&0Km_^s, Fyl**ZhFOD 1dpU+ Fad[;HqsT%AH ;wn> +H_npP. >xe=z/4ftMDP= 5U >kvS#(NkiI' X{j0Y]rx%T:q#.:ANY_eqvT.\Mr '}a /I5uU%`hH##IdaD(9G4^}{B.6|3 7dscQC74/4>JTRH93* P_~zQoV*%A-OW %Uh@ %GZT5.=*jSiMn/hr&ihK2 $4@SaogT/ ^']%9Ygv$2hm9"6 `\'#av\) M\K-1=!`i(5Am5`mX:&FRb_aC %&y^7 Sh= /=Xj6A]I %8# !&OmcjZyM,  %-.-+)06Rz$6| Xf%Hzn(MVe- Ad]336nW=xPx2kR`?okd0h4)?HWx (U{WF Tu/h>n?AT->]Q#g7vv0%6  6m5!GzMw}f9 myz !DRHC;6xNAU GM5 u9!D:<>pvE"^ "Fj)j  S j u AR A 0 m> "- \~T1"%,!  ONH;LhE( r r Y `  , 3p~uSEOv^.aini >$Mp9ucL c"Ls]gP x/I c DHFy;BygoF0~-aO=nU H  ; {Tn!Mg qlhbKttg-$qK q + $uGhS8 ![!"7"L"]!!d 2 > P M . ( N !!;!""#$%%R%%%x$$ "!.h.)[ H P dFs_O)O#~c8^# Q$"% 8fscR1 !"l##$$%8&'( ))*+Y+,,Y,0++_++++k+,,,,,\,,,--4-z. ./w/////\.-,+j)(r'%$"W  eG~tBO v $XF]]U#B X KXrW(yv? H 0 !"7$&$($)*+~,=,-.:./o001q2`3Z4^5`6367w88,87788y899&999b999999:a; ;;;;f::G9`8}7=54X3'21/.;,N*F'%#P!C. F%=  W^"mr ? <u a)#&$(;)*,.023456I7789:*:;p@AwBCDETEEE:EE#E\EEEZEEE7EEEEjEEFhG1GH7HGGHFE{DPB@>=hpf*b&=# GLlF."&*.0`2r4 57:;=I>-? ?@ABC|D3DEeFPGwIJLEMOWPQbR3RLRQwQPPPPXOOgO,OIz:731/b.../002:3679;>YAyE HdKNQTVXZW[\]^^t^_Q_``Y`aubmcegWhjkhl3llmllZkkOkjj@ii2hh9h ggg1ff5eeef4feffggMgcggcff4edcbTa+_^])[YXUSQaOMMgKIGEhB?==:r741.+)1'%"l7 nHE.A><:y99C9:U;alkkEjii#h&fed6baF_][YWU8ROqLoIG;DA><497t4X0,#'#\nz&w ZXHUSRQOOnOOOQ&RTOUWYq[]_aAbe1gikslm`noup^pppooAoo5oNoopppqr=rs]sttQt~t]t6ssarrrqapooPnnenmmqmlllmm\mmn!nPnenvn`nFn mmmmnn-nxnnn$mmlmkjihgfWdb`_]ZXU)R~PWN=KHFFCAd>m:691-)]%|!rs-bG``^`\u['ZYYPYZW[]^` ac_e8fghj,kmo:ppq"rrsdsgs8rr!qqr5rrsscstWuu~uuuvvuuNttsrrFqmpxonn+mmmNlllllmnnooeoopooooPoCotoppxqqqrrqppLooInmlkijgf dSb`L][YXVSQ NULI%Ez@<373/+'$ !0tfe+cbaa```s`abdeifgi}jklfm:nMopqqrrs:sttsscrrsQst\tttu/uv_vvvvvvFuu't^srr,qVp`oVnFmzlllCl$kkkllm=mnoTopDpppppptpzpq"q[qr;rstt@ssqrrerqppnmkuihgAecbJ`_^m\ZWUROfJFiA=:N6k2/,)]jmixhggXgffggi ijlmVnop!pqcrmsgst%ttItuutuusu&ttu!uvmvvvvvw]wwwwwTvvuut$sCr[q|ponmll0kkkkJk?kFkl@mmnop'pqeqrr4r&rrr?rssystuYuvcv^v!uuBttt'sqr.po8mlkjihgffsecca[_9\PY;U*PL.HDDA%=964kkjj!iiiiijzkllno@pQqqr>sdt~u?uwuuuuv6vdvtvKuuv vwTwx wwwwwxwwwQvvWutt,sCr_qpoo(nrmmlllulel9l7lGlm-mnoGopq,qr;r}rrrrrs0st tuuv!vvvvvBuuu"tsrBponmmoll:kkjjbiigqe|b`'\XTQ MJGD@A?>mlllzllqlWl-lhlmn noqqrsothuvwewlwwmw^wSwcwewDwvvw#wxWxxxxxxxxpxwvvGuutsrr"qXppoonnmmmnnIngnnoop ppq9qtqrrUrzrrrrssast(tuv+vwwOw{wcwKvvvqhr+rt uhvwx>xSx{xXx$wwwwxwAwwwSwxxPxrxfxaxIx;xwwvv!uUtwsrqq3ppBooofo>oo"oKopplpqqPqqrrOrTr=r qqqqqqqqr rGr^rsxtQuuluuvvDvkvJvuu8tts2r[qpppRp$ooooioHn[mji#fda_=\ZXVTyRSnmnnNnnnnnoohopKq&r(rstvYwx?xxy xxx-wwwwZw3w:wKwwwx wwwwwwUvvFutt&sErVqfpp0ooooiosooppkpq3qqrr8rorrrlr1qqq_qppppppppq!qrhrs>sksst`tttthtssdrrPqq:ppppppppp+o7mljJhfdba>_^p\[>nn}nnoJosoopp)pupq~r$rsrtBumvwxxxxxux-wwww]w2wvvvvwvvvVv%v(v"uuuttassr1qeppwpMpoopp=ppqq`qqr2rWr[ror\r6qqqSqppbp ooooopo'nooxpp^pppqrrrsrrrPr&qqqppppq q@q>qqIqpfo mljigfse+d5cObkabofo/opopDppq.qzqqrTrsOst/tuvwtwxZxxx8wwwwkw_wGw vvvvvzv urtttttvt2tsssSrqqKqpppppqqCqqr;rrs@sessesHrrsqq|q!ppgoo|oEo?oPonymmTmpmnZnnnoGopqZqqqqqiqZqEqppppqFqr8rfr`rrr)q onmlAkihhPgggp#op2pq:qrrrs3s|ttttuPuvw wwwxxCx:wwww[wAwEw$vvLv uuu`tssrrrrrrwrkrmrrrrrrrsjt tuuv*vwmww%vutZrq5ponMmm>m3mmqqqrsstauJvvwDwx|xyy,yyyyayFy,xxxcxww&vvvUutsrqqp!nmllYlllllUlmQnYnoup"q&r\stupv.vwwx5xxxxHxmxxNwvut?s qpo2mlkkskPk#j{iiijjk^klPlmo"ppqEqr'rrrrrsRstu`vvwxxxxGwvuwsrAqoo[nnonjnoYqnq?qr"s0tRuyvkw$wxyvwQx'xy(xx;w6vhutusrrrirqrrs7oTo1opqqsu-vlwRxfy9yzX{%{{{0zzzEyyMxxww$vput~sZqom,j/fc`r]7ZWVITT?SU"VWX[G^ae_hlpswxzt{{||D{{{zzznyxw:urol2h~d`];Z!XV TSSdS-TVZY6[^i`cfilnpqrssrs{sst]u,vvw@wxQxy:98889:$;=AXDoHMURX^]d=isnzr5uxzz{j{X{@ztyx^w sp;jd^WQKLE@`<9889:|<]>$AFKPV[O`fMk orttuvjvsv2vBvw/wxBx{xxyy/xxJwwww;vuuvuuvppq|rFsHt9tu{u}u.ttttttsssssssFsrrqp_mJjTe`TYS-LFT@;732K1T1123;469 DKRKYaglrhuxky+z%yyxx"v"t`p_kd]FUM0E>82-*8)(*=+9-/T3S8\?@ELS@Y`wfko qr(sUsss-s sHstKttttuauuuvvvwvvuuuuuurrssttuPuyuuAtgsbrr|rqq9ppq$qBqHq2qqZqPq`p nwjf`ZPRK/Cnm5i:d^NWOG@n82,v(%6$H#z##$$$%(+*/4;BKSq[HbhnrIuwxxxwvwtr3mhK`=XQOF>60)%I"!!E")"$%).64=EMIT\DbiKmVpYpqqqqeqq5qr"rrrrrs3skssttuGuttu_uuuuauhupuuu_ttsrqEpqoodnn@mmnnn*n nnnoml$h:c]2VOGq@82,(%$#$$$e$j%M&l)$+0k5Z60-)O%D"h"e""#G$%)W-5<(D2KS[#ahlopqqqq5pqqjqrnrrrprrss&sCst_ttttuguvvXvvv5uustt)srqCoonmmNllVl1lYlrlllmvmmlk@gyc\V*NG@M9.37-)?&>%r$S$N$M$%&%'b*,,16=DLKAR_Y_ej;mmpdqsYstsIrpoPk>e^&VNF1>G603)o%"""##%)&)u-4;xCfKRZ)`gko>pq&q,q/pppqAqrWrrrsrrrrss_tttttuv0vvwwvdutt s&rfqeonmm\ll(kkTk6kdkkkl8lmYmljkwl)llZkhd^WPzI%A:T3-Y)D%%s%&&=&')y-)1^7>5ELSZ`fjmnpp>p\ppp p_pq=qqqqrr_rrsDttu!u[uvwx;xww+vtsrqpon=mlBkkQjjjjkkMkllym>mml{k>h d_ZUwOIC=73/.X,?+,,./25:4>CINSVeY\_b6dLeeenewefh'iijDgd/^XTQJCq:pKoJmllkk$jjjjkkCkklZmmSmel>khVe0`\WSMGB7CIOTOX```abd f!gQhdfc]XR"KD=60+'M& %`&'),[05;BJICP"Vy\afjlmojop"oootokoopp6p^pq(qr#rs&t'u&uv%vwyyzwwutsrqponmllhkkkAkmLml$kOi}gddaau^ ZVRMsHC(>;Q76579=AG6M SYA]w`aib*a=`=^u\[&Z+ZjZ\]1_*acf ed`\pV$P'ISB;T40J+*){+-00e38}=LCHNT~Y^c g$il*mkoopCpooyoNoioop&pipqEqrr=rstuiuvwy[z{xwwvut&sdrqpp oFnn(mmmmmmmmmmmmlkjmhfEca^[uWS3N\IE!A><<;=R?CFLQWK]`ccdbZ`^[YXYYTZ\^D`cVeff'c1_YT)MF@:6J10L/237u; ?D#INSW\^`dYgilm7notooo|onno6oop9pq$qxqqrMs3tGtuvgwy!z{yCxwvuu7tssrBqzpp-ooZooo&o7onnnnnnKmulkaihf+db:_\XT?OKH8DC2BCEaI7LQ}V[`d#ffesc`]ZXW2WbWXZ_\_bWe8fpgaeRb]qXRLlFA(=R9779;?nCTGKPT_cHf hjSlm n|o1oo_nnn3nAnhno op+pqqTqeqrstusvWwy2z|-yy xnwvvEuutcsrr)qq'pppppppXp(ooolon4m[lji,gfdb`l\Y6U7QNKJHJ0KOORbV[Z_cf)h g@fxxkwwww,vuu7t}ssses!rrrrrBqqpooanmlkjRiZhh8gmfwdoa^\WZY&ZE\^adg5hhh ec_I[XTReONNQESWZ]`bdfhhijkUkl]lm+mll!kFjj1jEj9jklmmndnno$pqrrgsctruwsy zxxxxUxxwww&vuu%ttFtssssus(rqqpJonn2mlkjiiiei!hgecaaY_]\&ZZZ\]C_boehtj"kjigec3`Q]\)[Z[T\j^acfhj5j ih eb_\YWUUVUXZZ]~`cWeg\i ijjkk~kkll7l@kkjjiwi"iEiDijOkClHmmmmnnp'qr stauwsywwwwwZwmwfw3vvuXtt]tsssssos&rzqppobnn mlkk jjnjojqjihgecbnaA`__`=`b~dgjRkm_mlxjifdb~``P_[_`ce6giklll}ki8fca%^u\[F[v[]_be*g_ifjkkkkkllllkkkekjiifi,i_iqijkol]lmQmNm8mn;oPppqrtGuw vvvvvvvvvuUtt#ssss{sbs|s|s]rr qp_oonnmllkkkllwlklkjhgg f5eeeefh1jtln;oco$nmLljhfee dldegiMk%m9nooonmQkhf>dbb1bc dkfhKjUkmun nTmmllllllflIlkkKjjj iiiijJjklmmMm/mm4mnoyp8pqstu_u.uiu^uTuEugu^u*tss?rrrrrrs&sZss&r~qppuooo@nn mmJm`mammnmmll]kkk>kAktkkkln)opqqbponmljiioiij[klnop7qrnrsrrqolji!hh&hhi:jllmnooonnQmmmmXm-mlll9kkk4jjkk,kl lmnn8nmnn{oAop\pqrhs&tst$ttttsssreqqqr rOrhrrsLssprqqSppplpDpoonnnno$oVooo\o?oNoopCpqUqRqIqrAs4stTssZrXqponpmlllmmnoq0rsttusu&tWrpo@nmmtmm+mRno$opqBq;poo0nnnpnPn@n2n mmym5lllGl:llltlm=mno"oXoq q qppp2poooooooop/pq5qrst{tuuAuuv4vDuu t s6rVq`pyonnoogpbqrrstuv+vvvt}sqq poonnoopFpqq pwooXo@nnnooonnnrn4mmmmmn5noipppppppqAqgqqqqqqpNqqHqqqqHppDoooopcpqOqrhrsspsr@qqpqVqvqqqZqpppppVpp0ppq%qr[sIttuvwQwxx.xhx9wwvPu]tssrr9qqYq>qqrts9t-uuvw3wwwYv u't6sVrqq p=ooppqpq pp;ooOoMnnno.oLoLoMo9oonooo#o7oppqkqrMrbrfrNrVrXrSr-r qqXpp[mcnozp-pVppDooWnnnoXopTpqNrrsBs;rrMqqqqqqq}qGq"qqppEoop"p^pqqrsu:vGw(wxaxyxxwv2uKt]srr?qqrrrs_ttuxv+wwx0x wvutsrqppooSoopEpnp(oonnnnnnnooo3oJoTomoooppXpqTqrsswsssFsrrHqq pnmlrjlmnoOooo.nnZnSngno9op/pqr`rsrrYqqqqqqqqOq!pppooXo oRopTpqqrdsuvCwAwxxy>xxMw1vYutsrr4qqrrs[ttuvwxzxy;xxdwevkuCt#srq&p)ooeoop!p ooHnnnnunbnooo&oLooopIppq qur rs%st ttttsrr ponlQjhehjlmm+nn2n.mmmnneno]opiqYr8rrrrr:rr rqqq5pppphpoSnn"n5noIopxqVrsu;v=vwBwmwwvutts{rqq pFpIpqrjsmtuvwxxyxxwutsrqqp oo~oooooHo nnnnznno(oj jj j]jkllmInnoqr s sss~srr3qqq8pp|pooooosonnnoo^ohojoop#pqqqr@rstbtuYuGuKu u-tJrolhd`f[VrQKcEF/KPTX[^`gb*d5/a)#&T+059=@D FIL9NPRwSUWgY=Z[\]_;`bbc"cUcdSe#ef)fe\dcbbEaa-`u`6`eaaaam_^\ 7j0*$3!%*:-15(8;T=@7BDFGGIxKuMrOPoQS TVXTYoYZ*Z[W\A])]a]6\X[ZZYY XWWWX^XXuWUTQOPLmIECA?i>=<;O:g:z:~;tg@D$GLAP5SW[3^I`MbcBdfYgiBjkylfmBnQo3p pJp=oooo}nn0m#l3k`jjih-g_fgffe9cU`^a[jXSMFf?9|2,&] 0LF4"&e),/2|479:@B%CEYFHQJ?LeN$OyPPQQRSTSS R*QAPP'OO_NNbNNOSNMtKHF(C@=:87.6(54o33 3338346p8r;?VC[FJWN QiTWY&Z\_7aceg+hik\lmmnmnnmmBlrk]jjithgf7dccbWaa`=^*[zXUdRNI B;4.(!@: | pF>"$'y)+-/12468B9:<>v@BUCDELEFGzHIH|HgGFEDD}DCC[CCKCCCA?X<9734z1/E-<,\+++:***+ +,@-/2f58;>AE6HgK'MORbU#X Z]%_`bedTegghhRhhhh6gvf^e_d:c.a`0^B\?ZYZXVSPLJFB=R7]0*x$d pR  "pY "V$.%')<*,-/r125 68k9f:d;+;561k+%vF  9B+ s : f}.7w d!#$&F(*+-M.S/e0?1@12b2511 0s//.]---n-m---,+)'$" oZEs$ #&*"-1g47:=@CF*HJLNQSTV^WXYZ,ZZzYX>VUSQOOLIGME{C@=:Z63/+o&c!fLu wKC3D =U ~ QbH2 " #$4% %&q&&&+%_$$H##1""[""!"Y"""! 9u0de F ? 1 \ e @+<  D#' *\-a0"258;=?ACEGJ,KMNPPQQQPNMXKIGDA?2<:8P52;/3+(R$F Ag 6AQLfzN`N 7 }{cWw@)7Sr~wpO> = X 5"\ B a0aD!#& (~*-/2E4D6 79x@AABDXE7F.EE%ClB2@><8964&1/z-*'%!c  `-{.)_47j!  @81c,<wm8) <V6q M-;X"/$&(*,.1<3W46f789::::87530.,")t&$%!r_` uxfZxvB-RqZ/%_|` - `   S ~ T x i3']@k 00ff & bp "$&(t)+,1-}.o/e/m/8-,*(&`$"aMn  |PpVJ ~(lu-q-[D:KIGm\>f;WujhI?Hy';N^2ntg~Y cKMT%8[* z!# $@$\$ " "D=mo; P #<}Dq&;y%FG0 1mr0 [O Yc#]!*+%)<T^g{m ^ { 8r1$U d M E  .x!UTz-$sOH}Z 4M`GV!`v9:"6/]crhX3yhq[M*u:{ h So-%+ t  >OqdjS4!K T<hDr Q,O"Gz[,{eS+#%*,-)%$!E}0RysU3@ V  H  ! GJVRtC>|4e*{X*[*:x;4dHj \Vpq\HI:2/6>FIG>FgX J+&^T:{ CMYl'lr. ?:7>u&@ xdmda)GXl K:R>6FW|T -wt%"``;Qi#(bs|I'TCB d4*H"5;g?{t\Z'^ }-9]C,oXz5v_,ows@$8$~XBi3F6"  l@VPTdK#ohHNTZR,{,T !$ L0RPMx7$ YRLfqvV@#8;lG LRzF2?_;/ zD;Xyh=*XE/ [_0mB}~M8;J[-6@2O$.nOUS#xSpc`jims]@85ENj% s (D xc= mKE'86<lO44[f x1,Q oxmpyp`\Zgw=R/tZOt/ de0D#'?I9ueS++( hT h;~xwwyyyyvieoP~[rcw&9%tn-> &c5VTn,A &tS|bLx4&Uxh_UTYfkxc1 H >;\DG[$gv8L) 1 BU1mRoM lt.vF,oi<=dsccltQ"H^#Pv^0*}185%FO0nw<!sP9y^\3PY}V7#)0NvfH/,'AmZ@ >a6,0ktD#,'&@5 2jj:]w*.)7M- &<]ugK35Hh}v[8($AfbD5'l.tr ao+ +,@.TmV) ;xh)48%-P/!6CYow`SNYexjN>5DXylL7#/A|+kp!QumH '"!5A0NWQ>-.<\PeirJ?159Lf}rr~eLNaxS<85@@[#)M-]qX)&"/L2 =WZF0*8XxuJ3<qg v\5*%9Ng{uokwy[D5:>Tn,a" $WofP1 #"0 !>9"+HND65IacdxxL9W5LbF9BGT^pvd[UXYbk_ByH##B_k^FFE3 + )>< 4S]I3;R_iszgOFaHGnLCBRYiqaYQV[oWSyC$$3MWSK>;2*(  2F3 !JfY=5B[pphlvdMT|g+8yu^Yejs{||umcelK@|h9",GNH>6>@1%@( >G5 &Ma\H:D^r}{wx^HSf5:l{x{xz}IAzi;+8JXSGHJK@'1. & +HM4,VpcF;Jl{y|aJMnyF.9j{@$&PW0*Bci\NIWaU<%0=/ '%5JPC)">cqeOBOj}wu`S\v[CNepH1@cjI>J\haSRUXR>+'.:8-6*!6XfM/.GhylP@Igxzujamx]M]}d?<R|cPTesm\OKUZM9*(2:3" 1"  15/).GZS?4;RkvmXN_y}oivgYcl[VgnVT`hhaWVXYRA59CF=-#( " 1;7.0:HNE<=Nk~vd`jw}v{nnzsbix{ymepxd\`hk_SSZbaTD9=P[M3""   *3767DOKB;C[psiabiz}xqgdquhjn|~usuwrh_]dibRB:9AOO: "% )=@<AHKJGGKUahheclx~wgbdt|mimxyoo}rdfpxr[D:>DHF:&""  &"157@HHFHLJN\lsqjhp|{vlfil{{voot}ywz}phiszvfUJKRTPH</&%'&!  +-&#%(1?IGCKTQPZitwungk|zvx~yrqw~}vmacp{ttz{||}~td^dqzvfVSZ_`\TLE?:60+#  1Wna<:`n^F.'B]g[L7 !>b|rV?;KTfwpg]OFCIOYcmx|hYL?;8AN\fmz}soldafq{}tleb^RLWaYLLMB:=GOOI;.&'(  Rul>>gsfA!Cgsf? ItlJ24FfypjkbUF=9CN^o{yqi_WPLGHJQV]ep~sdQGDPcrvoiddbXPSXSOW^YMB=?FOM=)"  *TyB %TsrO*0Xt{^5 !@b~y[6#-?^{x[EDPMLQ[dinli`TI?<=FR`mv|lZKJO\foxytfVMKSX_hnupdTKJKQY[WL?6/5HRH.  U}T!c~S5cj7 $UT>kj[N:3:JKPar}zveR;$(@YqaD3&+4KcwwaOHGS`mxwrcRGGMLJJGD<*"0BE4  MzG+iK&Sz_4!CesoP.1igM;;>KVe{rj^J7,*%&'0=O_lux{~q[A,5Oj|kXLCKZotWE=6=MZ`P.&<B3 6w~J )vJ3hV/+Uzf6 @V*5MhpS4$;Sh}}iWNIQYhzsR2>fz]B:=UshP<-2DXdX= &:=&  m|L -~J5lrL14OquN%$ElqH@inQ4 /Lg{ul`QC7439<EQ`pz~t\A+*Ip_8''A^qxc@ 1IYN,   WsI+|V =nW0"-WE dV Cf.Gv}`F50+-/38:72-2;RprN.1_U& ,XwrW)&RaK mBkS.gwcG/';\u|`. <sY*E}d4 .OnsaSJ?<<?@?:5551,'*.>TnsF 9n](?ena6.IG5?`D.[nS)'FiuI>~8 [}7 B}oF) ,DXbje[OKJFA?<50+2;Su[ XiE~w4$Sb@ K? 0^aC"&LjqjL%'PtuT$ ;|F5nqA-H\kkZC)Csd9w);o}Q?K76L<hnA)SptY9$ <mn3QEjjM:t++8<FMPXj~yfN0M Ko/_+E2wK(cjFNkgQ3#,EY^@\xo2& )5<c|r`J910&%2EOUdieSH1Ia}y VpR&=) ZN#XlE Ac_>"*E]NkSj <\#hs+lrS5AcwzmC ])c))FWw-7gk7- 'fVYqV$ 2NP5(GQA_b#|,q1o5dl[D"Doc.(.sjD Qf;5<Er^( !:6>O7\]}  6[VaWR* ZkXg0Wp%5[Sd, )OQ+ *9cJKv4fHV;mkc.l< -L]lY#:q4qubN[s5vM|K>P%$GA +u(_a#+\# )W0Ut]9k$+=zIz?~OLEP6H{'9(  G0HtDA,_zM$,Mix &9Lb{vS3u#x!| wO}O^B&' XAu  1 C A 2   (  a Y .* u r 4@HPgwn@ , ] <uq ?>~R=qAP-gDMyi_q;OCf  <Gov6[Dr~odq&7WC?  @ nnPlMrRHykjjZR( ;v,B6F` v  $ N{ @1Jw c!'!!!!!K l&Fmy  x  0 E l E PW<u~ H R a5aaR1[}; ,^ U t V=Wq !"}#:#$%&'()*+;+++++t+***++Q+}++++,%,++4***~*z*k*]*L*;*A*))O('&%Q$ "!= q qH@ | ` qBH.\~z0,~ E vJKSAlT -8$#+ T"%&(D)9*8+%,C-N.5./0n1G2H3U4c5q6?67U78877788\888888988d77M7666f6&555?44{33$2<1[0X/e.:-+u)'%y#d!v( % g BY , / K}X D :YKtz!#%q'*7,/02"3%4F5x68*969:;X<<=u>@0ABCD~EJEEEEDEEE5E3E DDDDDDDCC"BBBBBwB8AAs@@.?'> <;:w9q8W7=54 1/-|+@)$'%3#_!c(H(s  7^ & BKxfH{/ /"&N)+v-s/2Q47<9P:<0=a>@.AC,D7DEFlGI#JL|N-OPQcR.RaR`QQaPPPgPOONNNNNTMMmM!MMMEMuMMMPM#LKJI0GFDCYB,A?>:&$"QzJKYb V"r%(,/25t7:=I?ACElFH!IK?LNBO/OPQS;U1W#XZ\]"]^&^]]$\[[[>ZZXYY;XXXX4WWVVVWWbWWWXWWnVcU2SQP?NM7KJwHG3EZC!@>_;976v420.,*);'&$g!E;   l{y1D-*(C&$##"#$!%!%&y''(s)*O+.,1Q4C7o:=@CFJHJLNgOQ#RFSUVWX\YY[Q\^`byddeef"eepdd$cc:bb|aaa``s`__;^^]]]]^V^_"_x_``_^]}\'ZXW[UTkRQ=O}MtK]IFDBA6?=<&:754323/,)&$y"W ,Vi T<95361m/}..)./z012]334+5 68:M=H?BFUIMORWTIVQWYZ[\m]y^_`^aacdvfgi\jkl}mm/mbm6llmkkskj}iiKhh ggffeWddxdddeZefPfg>g~ggtgf*e>cba0_^C\[hYXUVTvR\PXN}LKIeGECA|?=Q:8=5[2m/-'*(T%.!s: ~4QGDA!>s<::<9:;F<=>?S?@NASBDFI$KaN;QU*X ZC\N]_a%b|c6cddeIefg2h#i&jWklmnoSop(pPpppsp!ooenn3mxllkijjaiiMhhhSh|hiijjyjk;kkkk{kFjj>i|hgfeKdba`_f]\ZbXWBUSQP'N\LTJ=GEuB@h=:8;5330&,)%m! , RiOL?IHFiEEFKGHmIKKLLMOjQZRTVYg\_bce@fh3iajmjjjk@kl&lm]nnop{q;qrVrsscsssss>srr1qfpoonfmm5ll%kkkl#lolmgmn[nno(oYoJo#nnn mm;lkjihh gedcbqa_w][ZFXVTRrOMaK&HFC@\=|:{63)/+ &"I/\ ZWUSRRPPxP1PQS3TUVVWYZk[\^_bdfh6i,jpklmnmnnnnoNopkpq^qr,rs=ssstt;t9t"sss*rrqq&pHotnn1mllkl-llOlm&mn=no}op:pppppp?pooooKnn7m{ll"kujjiZhgfedca`3^] ZXwVTR OLJ8G.DU@=c9=5/0,(=# :b`_^h\[[ [Z[\^5_a aabcdef@ghWiklmn*o opq8qqqqqrs)stt[tuuuuuuu_u@tttssrr3qspyonmmxll[kkklm mnocpQqqqrNrfrrsrSr(rrqqqqqq]ppgoo\o nnmlkGih\g=fdb`^] [qYWZTQ~NKH-D ?;^72.~*&# YgedLcvv uStsrqpoonlmm lflkkkfkEk7kklmgn1nopqrs[ttxtuutttuuAu\u~uvvRvsvuv>v uuu=tsqrEqpoann?mmllkkk|jhzffca_=\X*TQMJGLD@ooooCoooopWqr rs}tu[uv&vw/xxxxxxxxxwxGxwwwgwzwxx6x2xwwwwww`vuu#t>snrqponnCmmglllvlllm mMmnvo4op}qqrJrs_sttQtttttttuLuuvbvwwGw{wsw`wvvZutsrqqpp-ooo!nnnnYlk0hgWeAb_|\bYjVT'QPNUKPo|oHoop5pVpcpspq;qrsXtVu;uv?wx y yyyyywyUy#xxx_xwwwwwwwwpw5vvvvv_utss r=qbpZotnnVnnmmm[mmncno-op]qqrTrrs"stsssLs/s&ss+sQsksOsAsWst3tuLuuvvfvvvev(uutfsrr qYppzp;poooofoKnnmk@ih"f6ca{_&]$[3YVTHoopppqqq1qlqr1rstuYuvwxyz zfz9zyyyfyxxxx1wwwwbwqcqr@rsSst tFttutttYss\rr`qq%ppp^p[pUpPpAp'pPoomlkkihGfdcvb`^],o^omop]ppqq5qkqrrstItuv5wExKyy_yyyVy xxxzx8xwww9vvvOv uu0tt7tt)tssjrrreqq!pIoonnnn[nbn}nokppppqYqrVrrs rrrrr%qpphooroEoMo'o)oIooplpqCqqr3rurrrrrtttttZsrrr*qppDoonnn`mmDmmCmnn~no oLop*pspppppppppq5qqrrs%sssssrqp)o0n|mll*kkkkcoUopopApq4qqrGrsttuRuv:vwrwxxxwwww_wMwIwVwzwawvxvuhtsrqpRooonnnnno oEooop(pq qrryrslstptuuuv>v@v+utssirr:qtpooDnnnn4mm&mm0mnnunnoBop&pkpq q6qOq{qqqross[stItutuuuutsLqpwonn%mjm"mmsmoPoZoopqqr rsstuv?vw8wxx$x>x+x wwwwOw8wHw^wkw+vvuttsqpon@mmmmm6mm:mnPno6opEqqrsttu.uuv$vGvvwPw^wPvuutLsrqponn_nFnNmmm$mmmXmn9n_nnoppbpq8qqr,rorrst2tu.uvEvwXww#vutrqIp6o?nmmmn-no!ooHop pqrrrstuvw3wxGxxxx~xTxwww[www%wEw?vvsuu"tRsrtq onmNlmllukklIm!mnsnopqrtu uvsvwNw~wwwxxRx;xw[v|uZtrsorAqonmmm]mum?mmm%m2m]mmmnn`no(oppq'qrr{rsTstu|vvw,wxuxx;wvusr9qponnnoJponooEopqrKs/t.uLvzwrx;xyeyyy&xxxbwwwqw0ww=wHwvv$udtsrqlonlkkkk2jjjklmnoJpNqrtduvwx,xvxxxxxxxxxmwvu`t7rq@onlkjjfjGiijVjkekll\llmimnZnoUopqTqrBrs1stuv:vw?x xxx~x/w7vt~rqpppoopqq#onoo*opqrstv$wVxQyHyzzzQyyyOxxPwwww~www=vv#uVtns-rpnlkijj-j iiijkqlnocprsuvwyyz"z*z:zyyymyYyOyxxw,utcrpnljigffveefTgbhGiij.jkljm1mninopUqqrrarstYuJvvwwxxxx@wPvOu srqqqZqaqtqroo[o|op/q+rxsrttuvwxzz{%zzz>zyy6xxExwwwww,v_utssqpnkihJg]f]fefjgh?inklnprtvCxyVz{{~{f{\{zz-yyyyyYxwvtxr&olj;ge_ca`__`abdpefh-ikPln nopAqqrarrs=?^@CFKOUZ_dWimq,tuLvw!wx/x wwwxxpxxxxxxxwwwBvv_uttttttttttu7uuv@v_v1uuudutuoutttwtNt;t@tYtktpttYsqplhc^yXSwN~IUE3A>=s=>;?|@lAC5EHM`QV[`ejpswLxz{z{&zzzyxwu?rfm9g{`rYS;LF@gEMOT\Vbinqs:ttu"utt;ttt?ttttttttuu*uauuuXtttthssuuuuuZutttfsor0qHppoo\o#nnnnnoHopgpp omRjf,a!ZWSL3E>U7c2-.*((()*,T-049? ELSZahmru7wx}yyyxxv"tpl@d]TLBD,<^5.*&L%q$d%&q)-v39AIjQeYa`zglprlsttytOtssussttStktHttt@tItittujuu9ttttnssuuu6ttAssBs#rqpYonnn5mmpm8lllllm>nnnnFmkid`Y[RKYD;=n6G0+(&u&%&'i)*-17S=>DYKNRsY`7flpsuqvjwwwvv0tasoBjc[RJB:43-0(%t%$n%&c)Z,28@sHPW_fUkeoqpssKsssss=s'sQsstXt{tct.t*t;t2tCtetu>uyu.tttttft uuhtssrBqqWponamull4kktkHjjjjjkil[m mXllYjth@c_XR"JC=5/*(%V$#$%&(x,/5;CDJNOTXi\r_cQeghhgg|ghijkkWhe`_3Y;R-KDD0<6/+(''l)+#.28>ELSZG_ei'l9m\nnoaopouoioloopq qwqqr/rrsOst tuv/vNvw&wwx3tsrqpCon6mm#lekkjjIj,j9jnjjjhjhjkklKll)kjicfd#`M\sWRM@G+AX?SOMHCd?<;x:;<>hAIFK:PVJZe]_aubbb)aS`^^0^#_+`acejgfd`_ZTMF?}82\.A*a)*(- /K3_7=CIOU[_dOgmjkTlmJnnNnkn,mmmnKnnoOopDpqr5rsKt|uvXvwvxMyFzzuut srqpbooVnn5mmllTl5lFlVlAkkkkl)l{l{lkkljih/ec`]uYThOaJPFC6B@AB$D{GTLQ8V[^abccUb`^\[ZZt[\^`c#eMeSdaQ]VPKIRB ;q51-,-.0x397CIN+RW[_wbehjk*lnm@n"nnnnmmmn!nyno7op`qqqrEsbtu_uvwyKz{ww,v{utt sfrr.::;.>BBGKPUrYT]?`Rc9ehgijklmnrno nnmzmGmmmn7noKppq1qRqrt/tuvwy,z{xwwdvuuIttssrr qupppSp5p"ooo+nnbn@n#mmqlll*kkk jikhBfcX`\YWVUUV8WY\x_befgfeca`^ZWTTSU"VlX[^beggfeia&]WRMIBFfCkC]DGJOT(X|\w_bdfhl0lzllm_mmYlkkKjjj~jilihik lmmmlkiheb`]\k[T\]F_adgjlFlm kjAgec(`^^]^_aceh6jklm#ll=kllullllmllkjiiiijjk;klmn"ngnoqqrsu)vFwFxv"vuuuuuuu%ttAsss6rrur=r)r qqQpp%ooo,nnrnmZllmmm`mn?n{nknDnn$n6n:n mmRllmnoroonmlk/iNgdbaaabdfshkFmohophonljhf{ePdef6gnhjl?mtnnnmm9llllllmm!lllhkxjjHjyjjk.kl?lmn nKnopqvrPsltuvYwutttttmtpt]t2ssdsrrrrNrrr5rRrUr qqpppupooCnmmmmmnn_noo;owop4ppqppp0p]pqqqppnmlji+ggfgXhijl{npr"rsSrrqo_mkkjk(kklmnoup0p0onn!mmommrmmmmmmmllkkl lFllmJmnOnno`ppqrCs5t#tu[v)s[ssps`s=s*srroqqqqqqqqr=rrrrIqqqqqDppjoonnnjnkn]nnoppqNrrs%st0tsssttss#rQqLponnm@lkfkkl-mQncoqyrttuuutsWrpp^ooopoiopppqMq-ponnn;n7n9n`n~nnnnnmmOmmDmKm{mnnrnoUoopKpqqrjs.st`tu"qyrrrqqqxq-ppnpBpKppqq@qr!rssrrrkrgrsrTrqppooRonnnnoppqrsOtuuvv vv v&uutsrrq;pionnmnnopqs tuuvw wv4ultzsrr;qpppqnNnmmmOmemn.nopp pqrst4tttttttsrrq(pkoovnn#nnompq[rSsltuvwxx}xxxSwvyutss6r{rqqrErstMu6v&vwxexyTyKyQxx"vuts3r+qJpp^p9p3p:pooo&nnnmnnnno}opXpppppqqeqqqr=rs5ssssrtqpo}nkite+hjfklZllm mmm2mun nop9qr3sJt1tu%u?uMu0uQutsrqpp+oo n7mmZmnpopiqdrpstuvvwwwvutssrrqTpp8p>pqbr.sGtuuvwyxTxy,y xxMw\vtsrqq ppJp:p2poopo>o nnXn nn nunoop"ppqqBqhqqrTr~rrrssVssvrq~pKnm.jheWb `Gdgaijkl1llm&m{mnroCp>qqs t*uuv,vCv?uuutsrqqpAonn!mm$m_mnopqrt(uuvv=uuu,t2srqlq pppp3p%pLqqrstuv-vwiwwwwOviu@t_srqqppphpHpoobokiifAb^ZBX]agdvfh i=jXkklpmmnopqrstuLuuuulu?ttsrq8pooHnmmulmmDmnopqrsptttsrqppnmllzlllllmlilmonSo2ppqTrDsNtfuudutss#rqq?pppppzpYp!ooozonnnn|nnoFopqqqrArs3stt8t sssss9qolif"b^Z:UOPgVYZ^`ceghjk5l)m n`opqrsttuduVu;ttrss%rMqmpp5.072B5EHK&MNPOQRSTUVWYYZ\>]j^J^_8_`/`a,a*``._^^c]]8\\ \\K\]\[YWTR%NJFCnA>=81+F$."/'2+/3w6:r=&?AOCDjEFGTH4I@JuKLMO/PR1SxTSUUVgWWWWVUUTTpSSGRRRSFSxRQ\OLIGC??ABBCEgGHIJKLsMNNBNM!L'KHJJJIHHIIGIXH/FCA(> :74,1:.-k,+g**)(q'(3(*,/3Z7\-^`7bdghjjkjklQlMlkihguf}edcHa`_l^c][YVSQbNHJE@S:(4.(r"K A >!$>&))*,F-`./i001235'6Y79;K<>??@^A1ABBBA@??`? >>0==i===<:85*1.+(=%#""!!!a v  n "`#&)-15:7=AACFI&KMP RtTWWZ3\_a@bcjd^deeezdgc\b&a`_"]\(Z3XbVUS5Q7N|KkH%EB>94/)$q } 9)X !"#$4$%&')?*r+-/1i24\5_6T67776544?33622e2E2y22~1O/,)&##=IJSmHCk6-!%)-15)8;L>0@CuFHK$MQTVXZ Z\#\]]]\[ZYXeWVT2QOMuKIQFCl@<:'62-(#-J  9 kcUW'!4"$&()*+,$,,,G+`*))I(( ''_'_'''&%o# {BS S b ^  !  e X!#&*L-[036^8;J=@BEHK/LNUOWPQtR#R#R%QPONMLKuIGDB@>';3741r.+'t"j)k X6%wB = 2 {J-{Yy !!o *zkP= bCY?=@ A<' X#Q&)a, .^0358:=?ArCD9EFMG G,GPFEDD+CVB@>"6p $  *;$:h'hV l k R q H  ? - y : 8 6 *   IOi * }9: ) `"%2'a)p*,.,-.d/$///w/"..--Z,;*(&$" :4 + f[[ y@3_iW;k/eS0;;XU*gBPI\!N f!  }dgj !" "#A#$W$$t$j$#"! EYOp8 i(!>zWsi5cUU,VZopPz![ 8m%@gwjUTi{yEY | 4/onc?Z#(Y B   \;xl;q 2lL}kEO:&/1gY,\Q$s9.BSZX[hwv}fSNzR . K |."xy VLBbil'uiEI9cqU[dq4{p#cLXO~fD* /CE<( _]vj&RMi{LLf%qdC_' #H1w ? I6dC~&VuL(-R{a!:*uV9, &3BEAAAEB3'&0#=|3}" ouceNI=Q@^4\{iPS/9 B6l7# w%fd. oOC?D?@L[bedl~k/T,^0u _{< G>liT$|4n&p:xiwf-LW_@8Z84M_c %,}~{  chn1J~!?BCf+-8*y>7O~ 55_?d]&Zq#3 `;!i*dFMa^X5z4!qWuBU8 f9`UTa@ _`DGV]C }08j # LFUs*@Q\LD:H6.cxj*@18f@R*XD%}&M6 4#x H$$I^x  m8 "SJ(i~#xfv|5uWE0 F U(;K'=W#"ZUYOu Tlbcolnyf=*"7Hj'l~t &)c2pQ4049iQ>; `e}h6&S hx{|yiaV[fDD{Yt1! lk)<:D4ti V6'"eL]8~|vx~}ynktY lc*4F~x"4@!^2UWv8> %jMycOs5.[ugbYXZfoc9 J?VvVOc%vFP) / >Q,qSzS mvr0yG+ol@>h}reelwR(MV R#xZ+5?<6  AI 4nu<*~N9r\[3W\zZA+-9Z~hL1*'FrS?Jt9#/o|P -5#%</2fg;et,!'8Q4*;ZsnR?ESntX8(9_W=7,p('Su Wn0&'**<+Uo[1F{l,06&.R01AYl|yh^V^kjJ80@QqrH-.AyA wq KnjK  .) 2@ 5T`\I::A[T^noD8.7;LhuwcFEY}_H>/24T%.J*XkU- %*.'"+J5@^aM93<XxwJ/3gg xX3)$8PlvmepeM>>8Hc"?i%#Wj_L3'% !)) ( :;&)JQF;:J_bcvsA+M8PbE5>H[gyvfb\]^deul# X_3+EbnZ=@F6 !&&  %@B"8YbO7:N]iqu~_D=^JIqNCCU_qqfb[]`qZUO,(4LWSF686 20   5M8'SnaA3=Zspcgr|_KU~f, 8v{aZflw{zywomsI 6qp=%AHC:28;2 -J0 BG1*Rg`F4Cbtxup|pYERi:#=k||{}yI=vyL8>M[TFFHG<&!::  $ ,FF--Zs`@:Nnrnr}{]HQvM5<iw>'*TlKCYuxhVLXaS9"0@8 '$!7INC,&Cgo`MDOhy~ysuaVc}^ENf}oC,>brULWishVQSWQ<($.?@(  -6-$';]kT54KhviO?Gex}xngrw^Pb}z{g<4IuaOTesp^LCLTJ6&#0>=."1$ -3/).H\WE9>SkvnYM\u}}to|g\f}|o[P^xoZYfprl`YVVQ?12=D@4$(, +62+-8IRJ??Onyc[bn|yuvvrbhuy~}mdm{hbisyqgfilgYG88IUK5& $("  )4:78HTQE=C[qtg[Ybu|qgdqymlny~tptxtnhgmneSA74<JL:$!)," !"/DE@GOQLFDIT`fb]^ky~vhdeuxllr{zqknxnaepwnW?25<CC8('+)!   &%468DNMHIKJN^kmgacm~|}|tmhkpwqmqx{tu|{rlo|}jXLHLOND6,()+*%')#!#$-@MKDLTRR]jolhd`gx~z{wporw|{vpilvyroty}~|yzuigpwc^aa^[SF<8960+$ 0QaQ/ 6^lZC-"/HambR<(#$=fiM:5BL^v~tkfaUKGKMVcpy|{iXK@><EP^gmx{wnifbdir~|oli`VKIQZXQRRJDDJSSI6%    Nk\- 7brd>)Mp{pK& #Jqe<%+;Wkx{hba^WI?:@HXl{yoid^WPLIKNTX]eoyjZKHHWm}|pnlf\PIHLKMW^]RF>AINF3  2W{o3!OmpQ,4\w~a9%Df{b>$&8Xq}zuhSEEPSUX]bfihh`SD756CRbmu~~mYJILYfovsodTLOXWXclofZL@>DP[_^RC816FL>"   !^~L _yS#4ch6 "U\% >huaPE9:DRW\iu|xsdT>% #>Yr_B2"(5OfvpYJE?FTckhfZI>AMRRTPJ>+#0>=) W}E _zD$Nv`7!#CfwqQ07gy^B0//?Qf{um^I7,*''%+4EWfpuz~oX;$3Pk~}zjVF?GQavzhL;86@SafS0$58, =Lf|B .`Y5#6]p=B~H$9WumR4$:Oas|vdWRMT_okG'Bk|^F>;KgxtZD4)3H]i\@ 06% &uR#k> .eoM59VxyV0)LvqD8\ylO3 1Mg{wiaZK>665:ALU_nx~vmW8!+Jp]36ShrbD($9P^O, a}R&pB5h}W1$1ZH (ka >wa1 JwyW<--)*-37:;8119PmgD(.Y|L!Qvwc8 .XdK xLg=&_r`G1)<^zk9Fzc1AsP7YttaRG:46<>=:76653,+-<NgoC2hS?n{m@ 1IC)  K dy3&UgO'(Df{V&J;Rp&@ykD) )?R^gc\RNMMID=5.%(2Mp\Z] H<%OX2  U7 TY<%JekgO,,Ry|Y&F<"bsA,EWg{r]B'Avi3hGzY8C- CK'U`7$OklP5&$=jo9 aMi[PC :3=<BIJSfzjK/U Ff =j&?-!O MU5 Hd_H-%6SfiJ#e<t9Bf}wfT>1-0&&6N^fomgVK3N`u u&_z])6*`T?S. ;[V61Vte/'ra`x'CSr2mbD'/Sl{}k?h2k.|>Ip =Cso0 +8uc" DS8 ,HG0%L`R'hm;0y-pGwl]I%Lu}d2*( dw[W`0  OS"=\<3/8QA !be ;T>EeX+ " #"]iVb.Fz ^3BsN["  9/G:"0&|]H`W;:%ito7N 9\kvb'8lD}lTYyxKhY/A,K4 #- OUW'S(?q/Ri}zqtqjFD|w/=s+W/]_P\!4 IQ$XB`"t [n)E 8e6Kkb(7nUT--,w."aqHZfJUk}E#7 , ' ) S !  ~         / H Q F /  # @ i i # L py9LSo]~Nj/yR;{ 8K#\AK}|ie=Ub Q |HOM)U'57G^i,5 $  Z  ; r8:`f=xi/-bvy+XK.ie XD a ^  +l '3%+?+TAv28`rc?:M]  /c,A v`S* DJEF = 9eRr 4!a"i#d$L%B&5'9( ()4))* *)))S)J)***+++7+J+i+**))k)=)4)Y)c)g)c)i)))Z('&%k$$"!| G1B~,  F,j|7 2 I/ ijl +5J@!#%&(W)+e,-./_001234`556.666667788L8V878P8S8S7786j555z55k5@54444 3#261%02/7.C-+*o('%!]I,. S6 a^$ q,?  < @Sn !$#&)5+=-$.0246j89 9:m;<=>u?@ABCD=(;:{9e8^7J6,4391Y/v-U+.(&$"87 r .?kq!-B:brgKM;:;(5"'$u&I'*,u.1Y3z5g7h9z;=?AC]D`E*EFGI%JL[MNOPQQRPPPOOOOONN0MMM=LxKKEKNKKL\LLLLL8KJ HxFE&CBAT@,>=;:N8B6319.,*(o&<#! h1B T ' *fd B!C{D}x /"%(+-02:4749;=?B'DtFI'KpM5NOPQRTUWyY ZV[h[\\\\=[[:ZZZZYY2XX@WW'V8UhTTU UV/VVWWWrWUTRQ/OMLK(IHlFEB@> ;916420.},n*)&'&8$$!}=' ? XfId{,:(%#a"U!z!""#$%K%&'#'()L*,.1369;=@RBDFHJMO3Q|SUW;XYZ[\^\_ajbcdYddddcc|cbbbbaa$`__L^]\[[\'\]X]^b^____<^r][Z7XVU|T RPO]MWK%HF\DA?W=V;9754,216/~-,*'%l#  f X)7N30.-,O,-D.N/70213223+34h5-68P:LfN`PRTVpXRZ/\+]_`b#c*d1e=f`ghj kkl8lhllllkk;jjjj7ihhgafedd$cccdXde}ffgKggggf4e]d"ba>_^>\[oZXdVfT QOMJHFDBA2?|=< :{8a5310-+\(}%!_% t x _fB}><988=89x:;~<=>?6??@ACnDFHKqNcQ;SUUWXZ\^]_aIbd,efghijksl9lmnmoooppzppp$ooo-nnymmAllkk jSihhohh3htiijCjkWkll=lkkajjIi{hOgedcabda_u]s[YWU`S5Q8OJMLJHFE%C+A)>;96}30G,(%I! I J-MIGlE7DDEE EFGHJ:KFKKLgM^NP3QoS TWXZ\^f_`b`degh.iNj]klmnop=pqnmlkjihgXedcaz_][YXdWUT5R9PBN+LVJG^D8Ah>G:7.3T/3+)&"Z#[hVSQOOOPQ8R-($!+` ]n[ZZ[2\$\]^`3abbbcFdde;efcgiBjkl8lmnlo;opWpqrrbqqp o]nnxnmNlJji>gg=fedb`_H]\YwVSOLbHD@?;73/+'$"f!d6c=bcUcdewf]ghj+jkjkckkkl!lmznboolop:pqcqrr,r\rs!stuBuv:vpvvvvv{vuuttsjrrq}ppzooVnn)mml_kktknkuklWm)n o2puqrs*sstto:7 3[06-akjjAjVk?llmnaopqrGryrmrrrrzrrs7sssst tottttktfttuvvwvvvw0wQwfw,vvNuutksrqqp-oknn\mm{mllHkkckk#kBklAmmopIqrstttmtu u=uHuPuDu7u2u2uOuuuusttotsssrqposnnnnVmlckjjriEgbdna^\XTPhLI*EB;>;78LnVmmn2o8ppqfrs*t tuuau{uuuuuv+vDv=vAvHv[vhvvvav;uuuyuuvDv{vsvEv7vGvnvvvWv umtts_rqponnCmmmqm,llllHlkllVlm\n nosprqrss#stt}tttttttuu8u{uvv#v uuru ttsrqpp$pooomnn;mmmkig>dbt_\vXU9R"O$L%HEBpbpApqrst.tuIvvw!w[wwx!xBxxxyCyyy^yNyrQqpp oIndmmlmimimsmOm.m.mFmHmgmmnloop*pqqr+rrsCswsstt ssstJtu&uvvvvvvvvVuuRtsrrqqqquq(ppypp6on$l.ih&fcY`*]KZXKURPMp/pcq%rsstPtu!uuvTvwwgwwxy[yzrVrYrlrsast,tXtuvvwJwwMw"vvvvvv~vnvvhv'uu tUsrqq pFpop(pLpRp=ooovoPoLoLoMo/o*oBoopQphpkppq+qrrerssCs9srrirqpp$onnnm|ml[l"l:lmnuoop0pq{qrWrTr:qqqqnqvqqrrIr^rrsVshs=sZs rqpvo?nUmmllkkkkNnknoUopbppqqq>qrs3s_sustueuuuu3tttttu u5uuuvttussr)ponnn[nnnnnnnnoo[ooopRpqrr-r/rWrrsist4tttttsmrr|qq pkoo1nn+mllJl-lmln+nnoYopfpq3q?q=q,q4qNqUqqr/rs!sRsst`ttttttLsrqoonmJllhllol@kkkxkl]m5mnoq+rtuvyww1wTw^w{wwxJxxxxxw/vVuw)w;w.vvbuu sr omjbgda^[ XX%WXFXXY=ZK\_Wbfifloru>wyzUz{zzzzzAz0yyxw;tMqlngb]pXySOLJUHJKCNVQiUY^sbg#korIt)uvuw&wSwwwywnwwxPxy'yXyqyEy9xxwDvvvuettZtvtttu*v\v5v*v=vvwbwxgxxy*yFyyyMxxxCww~wVwMw'wvvv{uuKtruoliVfb_4[WRSQPPLPPQRUX\`dgh#koruwy/yz5z#z2yyy\y@xxwuP*UX[`se|jnr`tevDvwbwXwwww?wwwmwx2xxxxxx:wvvvkvutttPvvevXvuvwwUwwwwwwwYwSw7vvvJvuuuuuuuu]u tttrupslice#a'] XTOL^II7HI IJ?K_N4QV;Z_c[glMpCsvxxyty^ymy0xxxbwwcu{s:nic]iWPJD?;|98h:3sss9rpntjCe`\DWxRMHDB'AA2AACD:G>JPTY^cirn%ruuwxgy'y y&xxxUxw(vtPql_f_iXcQQJ{D+=S8*3l10524j9Q=CJoQY#_fkpzru1uuuueu&ttttuLuvDv|vvRv1uuuduMuXu}uItsssssrvuuuv vvvMv uIt4sjrrVrqqq ppqqpqr:rZr^r!r(qq6o l|gc6]XfRMoH$Bj>;;:a:;#72V-,R*,.38s>EMUN\cinqtt|ttUtss~slsrstRtuluuuuku-ttttu0u!tsssssruquEJQ)W^=djjosuw$xMxyyxxwSutrn,gp`vXOG@99f1,(I'Z&$(*8/3:hA`I}QYca-g4lprscssKsrrrrsstftu;uZu(tttotXtatu utsssss%rttMsssks'rrriq?onmm7lll[kkFk_llm4nn}nnYnn2mkidN_QY S@LFR?9v40/---/16%;AGNU\cNhn'qtcuvwMwwwvv!tsplxeZ^,UME=7/*&&B%').329@H|PwX2_eknqr5rrPrqqr r9rsytBtu-uQutttXt>tAtuu0tt7DLFSZafl[orsuuvEv7v:uts=r|osk9d\T}L9DG<6.)&&%(<*/>3:A+HPX6_eZjnpqqqbq;qq0qqrs^t8tu>ufu)tttNt.tt\tu!ttftdt{tht"ssrqq4poo;nnqmFkjj0ii6i&i h_gghi3jjkkkl2lkj!gc^Y S{MF(?L83.,Y*))w+x-28K?[F.MFTgZa1fjmpCqr%r|rrrrr@q"pmj&cj\TLE.=7|0g+(;(E(f+>-27d=D=KqRY`ejmopppkpRpFpgpq=qrstftttttOtt st8r1-Z))*P-b049@/FvMRTr[aXejlnnoboHo6o0oNoppqrsJsssssssst&tueuuguuv vusrqpo/nJmm:lkjii1hhhhggngYghTiijkNklkllkxifc ^2YSMGyA|<86V4a4496,8y=n:nDnnoIppqqrNrhrrrs=st tuvv0vvw@wZwesPrNqLpMonnmmyll1kAj^iiGi#ihhthgh:hiIijkakllm9lTkAhea]XSM>GC3><:::<>CHNTY^wae#ghiJigg2ffVffghijifM`[KTNzGA:4k0-5-z./149f>DJQ$W\\aeimkcllm:m2mCmGmDmXmfmn\ooppppqquqrssuvvwwxxxyt8sMriqpooTnnimllkejjjlj1iiKii0ilijk-klSlmPmm&ljheb=]XSNbJECAAA:C!EoINTBY^,bJdfggfedbbbibc>dEegmi h-fKar\VRPPIC!= 63>00z1k58L=.B]HjNSSY^8bei9klWlwllmmm lllmhnnnno ojopq=r rstv9w wx@xyyzMu=tdsrrqCpp-oo(numllHkkkAjjciiijvjk}llm:mnmmlhkBhf1b=^YbTP_LlJGGtFHKO`SX]ae7fhRgfdb9`T^^^_Y_ace-gDg,f_b^SXJRLEE@:5634M59=B#GSM RW\`dSfikl/lYllm!m=mEm#llm mmn#nZno@ppqrjsftv7w,wxyiz9z{_vxuutAsrrRqqKppAo{nmmvlll#kkjjk"k|llmmmnWnWnMmlkiebL^'YV RuP4MMoLNPTPX<\`cfghgeegb;_4] [v[T[![\x^!`scefg dH`[oV8P~JE@o=q:;D<@DINSX]/aedeg1hjlllmLmmmnmm|mGm]mmnnFno.opqrHs4tuvwxy^zFz{wwvluutss`rrrq_poonnnnno nnnnnnn_mlkkkjk/kel&m"nlopqrt u^vKvwxyzzww_w!vvvvvvCuu{ttsrq p,ovnnmmllllmBmmmmmn$nPn{ninImmSllk~k jjjujijjkmnnn8lkhePa)\YKV]UhTgUsVY]aQehkhkkbih~fec?a_^_acXeXgikmnoo^onnonnnonbnynSmm,l+kJjjjvjjklmnoq rm}mmmmmmmmmmmmmm_mllllllUlkl6m nno0ocndm>jgd;`s]gZYXY[^ a7ei&lnWnnmlkijhlfMddLeeg{hjHkmcnoooyonnonnwnn4nmilkkYkMk>k~kl3lmnopr!svtuv]w]x7xyXyuuSuu u%uMuauZuttXtswrqq:ppoonn@n)n;nwnnnn2mmmmxmSmFmJm}mn n;njnnoBo_oPnn}n]noxp.pjponlj8g5caZ_^g]^_b;dhblnpqbqq2pp#omlk jkjklsm)nnopppporooo&nn}n3n!n@n\nVmmHllSlflllmHmno^pAq.r=sbtiu;uvwxXxy"t-t ssstt t sss%rrr7qq>pppYpooooopooo8nnRmmmem?m,mzmnznopopqqxqqqcppqOqqqqp'nxlj?gecc>bcdfqhk~nq9sststsrqpoopoop=pqq:qqq ppoooooko&nnnnoo nnfmmmn?nnnoappqOrrsttuuvPvwRwhwrrrrrrrrrr@qqqqqMq'qqpppppqqRq|qIppRoo,nnUmmmmnioCopqrus>stttt*sstssrrpo)mGkMih gg:ghjknwqs,tuav5vyvvmuuFttEsss0rrrrr>r=rqppFpoooofooocoooodo no5opp:pspqZqrys+stUttu>uv8v_v5v'qquqkqq{qhqGq@q&pppppppq-q[qqr rrrZrrrr?qppMooDnnn^noopqrstu]v5vvvvuv%v uu^tsrFpoPmlknjjkklnprt2uvLw5wwww\vvuu@t~ss@srrkrqqqdppjp9ppooooopipp|p4ooppwpq4qxqrVrsyt,tttttu2u4ttLsoKp p"p[pEpoooofoIoqoppEpqqqrrs/sLsssssrr,qgpp oooo(opq~rstuvwxxxxzxwwfvutsr,ppopnnnwnoGp5qirt!u7vTw1xxxxxx^wvutssLrrsqqqq~qpp`pAp ooooopBpq pppppq'qqrrerssttuLumu5u$tttsrqlamnTnnnnnnnknmno*oppqHqrsJst@thtttttQsrrq0ppoogoXopqwrstuvwxxxxxWx)wvutsor>qXpp`pp'pUpq;qrstuvw|x6xxxxxwHvtsrr#qqEppppppApoooozooop=pq4qFqOq@q-qMqrrDrhrsst8tuFu=ttt'srqomoiklmmnnnnnnncooprq/qrstu uuuuuuutAsmrwqtpp+oo^o:oGpqrestuvwxxxxx"wwyvuytsrr/qqGpqqRrrs`tPuXv?wxxy;ySyy;xwvujsrqqSppptp`pEp/pooooGo$o/okoqopRqq~qqqqqrirrrssOstLtu&tt8ssrSpnlidgik^kllmAmzmmn.nopqr}sztku_vvvvvcv7uut%s9r=q.p_oosnnnoQp5qrstuvw%wwavvXvutsrqqpq pp-ooopq%rst4uHv;w:wxfxzxxIwvu|t:rqpppopppWp7poooooDnnno:oVopYqqqr4rHr]rs'sssssst7tt\srdqupnli}ea_cfhikDklm mfmn>o pqBr@s;tYugvsw!wwww'vv(u`tXs[r[qNp}oomonno.oqrs)tCu.vvvvvu8tsrqpp:op pp%ooopNpqarrst^u3uvvw vvXuUtmsVrqp~p}pypp}pTp%ppooo#nnno!oTopqGqrdrrs sktttttttttt"rpo3ljgc^YW\`dceNgThijkk&kljmJnkopqs%tTu}v8vvvv0uutHsPr[qopoo/nnn~nYnoopqrs\t7ttts]r8qUp-nmm-jg6c_+ZTO OpUFY]`bdfBgChiiYj.k(lemopLqs#txuGvvuuSttsdrqpoo~onnnqn[nnoAopQqqrrrqpomljjhg f eZefeeewe+eddde8f fhbj kmoDpqaqqq?poo[o(ogoopTppp`p[p(ooNnnnnoopFpqrHrrs^stu*uujuMtttsplmliTeaS\WQzKDzEK"P TgWlZ]_4`bcOdaenfhi\jlhmoopYq qBqbq pp onn mwlllMlkkkkkkkl&lmPmmmJkjrhg:eVc`^v\[[{[ ZZ8YYYYhYZ([]$_b&dgilm`nunnnmmrmVmnnocopooooo#nnKnnnVno\opqqaqrrs1s}ssxs'rgrpnkg;b[]XS"LF@9I:@FNKNROUWYk[T\^_3`pacdfShijkklBlDl%kkAjjBii_ihhhnh%gggjg1gg(g}ghh^geca_]>ZOWJT[RxQPPONN`N N(NNOQTWZZ^Cadgiok kkkkkkl lmno-ooooonninmmmnnhnozop p-pqqeqxqq poo?nl}id`pZUOIbB;58.I/5;D@ CGJMcO`QlRTUUuVWXZu\,]_~`ayabc7csc?cbbb}b1aaa-``c`_^^k^^&^V^_>^^[ZWUnROpLHFEdED\CBBPAAABD6FIMQ}UY]8`ce$f gg^ggghjklmmnn~nn^mmVlll|l&ll#lwlllllllllkih8fd+`[7VRPJD>670*$,%*0?58<@C%EKG_HJDKcLnMsNOQSKTUVWtX~YOYYYYZCZyZnYY{XXHWWPVUTTqTqTTUBTSQOMKI EB?;=;:99"87J666\7q8;>C%GLQ@UdYp\T_`bbc@cd|egi6jrk;l0lmWmjmpmll=kkDjjCj,jLjQj,iiihihgfdc9`^[gVQKF?9W2,_% %*C-1479;=">~?@zAaBVCE%FHIIJKM MN_NNO]OPONNM=LLKrJbIlHHHIICHGQEMCA@9>;`8532]10/.. -3,,-h.e148e@AjBCLCDDE[EEbDCBB"A@?>=====<;j9$7H5w31/-b+'))((M'&&%0$$-$%r'*.27<.@gDGK7MOQS?TVYB[^+`Zbcdeefff:eSdcbaa2`l_^]\h[oZ"XVTFQkOLHD?m94y/("50 H O0!#%&'(c)B**+-,./0124L577899:=::b99 8'766q543222x2m2y1/-+)'%#! #?&9 w5!%#(,048;?4AD5FQHqJLORJUWY[\]^[_!_)^]]\B[`ZPYKXVUmTRQ+OuMKHrEC2@?<8s3.W)$  J`  ro4n!"#$%&(`)+,-../D//V.--,+0*9)(0''E'$''&-$" _K+>tT)SR)Z $(,0u369O;>@iBEHKnN)PRRwSUGUVVVhUUT(S)QPOeMLJdHFDB?<974z0,Q'#<  Q T;+5&QjwTe] "##$$%1$$1#4"f!~ \Ru = oM* o3 "&F),K.13W57:=_@*BDGHJ#JKKtKZJJLIoHsG-FDCA9?z=;96319., )%s![}I =8/Yc / P pf'L 2z fWtb  0 wKs3 o]"6$&(*-=<;:8X6b420.<+C(:%#V Ke/, 'R%L de* } u q ~, ` 9  ! Q v I 90VxB&,q  _qn:!,#S%(*m,.12445l5554k3320/'-|+*B(s&S# N!$  vjzpyQN  z9]XW=,!N u:]' O Fy1*+e"S$X&a'()))))))J((?',%#"!E q * ~v8D|p5,Yj)!dhI*"N'6upurx"5X7[-sXej D SJVe~*Q%TY7IW>e  T"4x Uw]4Lf?*SReOH/: QL3RfuoeI%#@2b4ub  _Ylds1& 0 m 1 EEe) p|dY.p <x, f{!A1TN5J14:-nT!?`kdgov~dSOGPR}#&5 V j d f ? H 7  xw=vWS/R}}ouqR]>}0ul[ Td>&5+"*7GQTKF5+pcjEDu & <Ug|0Q: 7w}~F6fHx>{dK [vg#9# lbC+$/5<@BGKPSSPMMDV">Hc]<Rw H|-*enVN`6Y|eNX9@</m=$~  MUcHA531;K^jt~|>cFNnanA GGxjW$t*f%l;*q}j)JYd8FfQR16u3l  kdcul4KJ208Pm/5I@};4Nsv55^Kl]#Ux!0nH,,^Ay&pmhP#Q8 Vw<Q r-f7ja V\4z e]BFOa:6)W   ['EXy2HHVI<> B/.m|h(=,<iAZ)]?pN63-{ P, ;Ut  u?&WO1v{"{`u';\I+vD [/HR%DZSZ_N3 elYUbekwmC-$6@^ /} q )*-c8 uX1#59n\@2ado[: #]+swruu~|ldX[f~JL|Sr=.!pp$9 ;D6xo_1cKru_ @upry{|~rluYqX"z;N"{$,:[/X]|49 j?pgQv:  5c~l^XPSZire; I9SnLTn(xHL'/ 8N,xT $~Oiyj(vH 9|uJ"$JmocX]h{Z/ %U[&S r\:<C=6 BM<uxB-E:nUY2T#daH46:TtlO3,'EsY4Kp?$7uT .7"C4 <nnB cl*w#4J4.?]vsU<;Fb{|_<(2X`F;$]$Nv Ys6 &( # 0B0!_ze7Evf(*w1&*X8&8G`s{fYOWg}qO;/<KkwT=)3?s Btv$MqnR' 0,6D& ?`ldL;9@Z~NXk{PB8AEVrsviHCSwnUJAGCY1'Q0\nY3(-.-&&! ,I6 !GdeN80:WusF+/bh y^:2.B[w}rgooXGECUk%6j((Yj_N9/+!&+$ 89&,JRF73E\`aso='E8OeK<FSfo{xga^b`dh{hQ^0,JdlW<BK<$!*  (AC& :YaK15LZdlp}y[@7VKMxUKM_fswjfcgeq`UR,)9U^VH:>=! 03 :P> ,Uo^<0<Vlh\al{xYESj2)Eibnrz}~z{{T 2tzC!'FROD:@C;( /M7!FN;.Td[C3@\mqniv{hQASmA-Iu~}R5qP7<M^YLKLLB+'AA!.KN40Xn]?8Ji}lhlusXGRvS=BlJ$ I}qK=QpvhVLXbT:"5HB" #!!:NRD-(Cck^JALdtyuq}ucYfhMTlz|{S3:[y]NSdqhWSV[U>)$1FJ2   )2)")>]iR64HdreL<Da~x|qm|eXj~w|mE?MthX]jto_MFQ[Q=*&3CE7#3'  ,2/*0HZTB6;PgskVIWpz{uulclsYRdzrZ\lsqi^YW[WB10<EE:*(-# /:6-/9HNE<<Ml~t]V]iw~wuy{whn|~o`e}yf\bq{rcaejh\J62BRK8)#&)# !"'4=?=>KTOD:@Xmm_UT]osjgt}oljtvqquwtkejmfVF:38GN?) #+-#"%%"&:LMHMRSND@EPY]ZXYf}vifgvvqt|~ur|tjjpvoZB68=CF?/##*.+#  %"!+8;>IQQJHHGLXbfc]^hz}voknp{yunot}{y{xpmq|zhVJFILKE:0**--(  #'$"#&0BNLFJQPPYciie`\cv{x|yssv{}yqggowmjorvxyzzz|qb_j|r^X[[YVND;8850-'  1O]N. 2XfXD0#-Heun`G-$%@ggJ62AK]vwka^\SKFGEM\ny}~}n_QC?>HT`fkuyulhe__dmuvqigd^TGDRaaXURJDDIQPB-  #Oj[/ :aocA$+Mr{Z9#+Pv_4.K`nt_WXXUJ@:>BPfz{qljhd]TKGIORV\fu~vl^PKITfrrihe`VHBFPSU[^]UH>?CC8&  8Z{m2'SmnP-;a{iD'1Kgz_:"%5Uo|{wiQ?<GLQX]bcb_b_UF735DUgty~n[MKLXdowtpcQDBIJP]gi_SH@DMX^]\SE813>B6  (c|J awP";jk<.\V!Cnm\L;7<IOWgsztkZM<& 8TpkO>,.9QfszgM92/;N_fb`YLFLVTOPOK@-$,8:, [}F #d~F#Pz^5$-RwwR1"6dt\D433@N`qyzpk\G2" &',4CTes{qY9"2Oj{wo[F:9DLXnvjSFA8=QbhT0 .7- >L iH+]U.7hHH|x: 5Qm}~iQ3:Rdu}re\SV]jyw_>#EmmQ>:5A\qsaP?.1G`m^?*2#(uR"i> *_qO25R{i=)LxnB:_{dE* +B[rxg^WOH?;8;AMYerx|tkV8 &AayvW.3UpqL''?UaN% c~S$k;0`zyX6(1Y\#'d^Jc+HqzW9%$&/147;=>=AI\ud? AkuH'[m96^fHxLg|9#]mZF5.?^ypI.0Tc1>lT&+Pouj`UJ<53;DIF?<952.//:Kc|k>&^}ONw~mA1B8 Jfz4%UhM#-HfxS)*eBLa-jb6 .BUctvn_WRIB=6))Fn\ RZ P?@J) "U6QX; "MgjfO+ =l\%@8/fo@ /BSen^G* CvV ,|x/H|_ .<+AI%QZ3GkmO5'#?|>RPsI4 s13CBB@>Ic}w_@ O=d 1@p$A1!~R NT1 :]bI) 2Le}m2&c~>ts(<WlzdK4-2;2.;Q`iwyp[R<HXm, i[#7+ aV <U,3LQ<(OkeG9gcf2K`x5r`># 1Unyxj=Q(`!q4J?Ipd# +" <v`":K4'60&!H^O$3kn4AQu9ooPHA'$Pwe.#% | a SX)  TT 6O1 ( 5OE?d\J{lmO {D)4:31'(_Z9Y+Fwp9EO|IV" ;0C2 '* G`6tGvLC/=NOJU,`{"p5 4l FuMN "c{ Ysc!8 0P6 JnCCS:k#6Q >x #5Skw`TG=h'wy? '{ZdbbBY\[]&PV'}j$=t/: U  '9%['=bJ#gK> {X,y8r yn=^G,"fKp1 u[_Pni  2 \ (0^0^ !#%L&'(()g)**B*]*2)))*=*++3***y*W*)g((/('(:(l(()%)))V('&~%e$%"!: Z D ^G %oF<  QZb( F ? %mg "$C%')*m+-4.0P1234@456B67=7A767#788V8M777]7'655344M4+4K4_4r4w4n44[33210/ .O-+)'%`#' <KZ : F 0 xVJ*sg  hl0CQ]z S q R :KV]'4!$&(*,.024U568N9;=@>?@ABCDE.E DDFD6DdDDD8CC.BB~B AM@???@ @c@@@@@I?>J<;:\9S8v7Q532/-p*(%#z! s!1a I  1c&so #`+ 6V!K%!$(&),/1355T79I?A:BpCEGIaJLxMNOPQQQPP!OOOsO#N~MLLqLKJJAIIIJKKKLLgLKYIHdFE?CBA@%>J<:8v53f0-+ ('+%O#!Cn U j & QK!<$Q1iw!$%'S)b,.14Y69W;>@C$EH)JKMNROQT"V,WYQZW[V\\]L]l\\["ZZSZ6YY%X!W>VUUSTSS1S4SsT3TUV=VW^WeWUTSQPNM6KxIxGECk@>;7521/i-+*('q&%#!i:@> A17Z+(%&"s!_ !!d";##$%&e&'B''(*<,-/02508 :=5?ADhFIsLNQSETVWYZ\^`abcd/dwdeddUcbb;baaa`_#^M]]\)[rZZZ[\S]]^_z_`%_^]\z[YXV.TR)PNKHEB?=Q;w98s653w251]0g/*- *'%~#4 k+w (R62/,++C+,-./01233363568M9;s=?.ADGI?KMP~SUXZ\^_ajbce?fh:ijkk3kklltllkkKjiiiiGhgff*ee dTccbc cdTe efggNgh?ggffAe7d3b`^\ZYVTQNKHFDCJA@ >e=<;98520j-+K(:$ za;F cA=:8_77)789:;=">,??j?X?@cAC;DFGIKNFPRTdVX[6]|_aceLfhiUjfk_l!lmnJnoo'oDokoppoo'n|mmmKll\kjjYiii2hhuhphi!ij3jk;klWllll-kkxjih;f^dcNa`^ [XVSQeO`MLJI5GFEDB@>b;9 63t/, (Y$!0~ey S xzLIFPCCkC.D$DFGH/IJKKKL3MBNOQR{T[VdXZ\M]_uaScPe7fhjklnJoipqor rCrrrrrrrrss2s"rr^qq`ppp)onn$mmMm*llllm?mnQnoPop?pqq!q6q%q3qpp!omlWjihf~dbt`<^\1ZJXWUTSRQEONLVJG}DA>;7 3 .+' "j)BVwSPNNNOP}QRSU7VKVWWSWXZZ[\^`bcldeghik%l3m@nNoqpqrstZttttSt$sssssrsesCsrrMqqjppoo[nmm~m-m:mGmmnnoIppq,qqrQrrrrs ssrr qp,o mlkRih}fed-ba1_^]\\C[%YWVETFROIL|IEA=951-z)O$!EA_\[YZ!Z[\S]N^}_aEb7bbc2cd^deBeg hwijAjklmnoSppq3rrsu uvvvvvv uuttjtsssArrrBqq&pzooQnnmRlllm>mn7noplqkrErsJsst;tyttuu$u#ttsss{rrponmll2kUj2hgffeeYd~c0ap`^y\Z=WuSPLHD@<=84/+(&%L"ecbb bcdeDf2g|hjjk5kQkll:7#30-k;ii{ijklmnoq!r rrs sLs`sDs&s6szstssksZsstt ssst!tuvvhvzvvvvvvu|ttIssrhqqp~oo;nnmm'lllkpkkkl4lmnLopqTrrsOst;8myllmnopq{rKsut}u7uuvv.v,vv*vhvvvvOuuuuuuu)ttuuuvvuuuuuuu?ttVssrtqpp:o|nn+mm\m9mmllkkklm%mnoopqr~ssjsttUtrtat9t2tOtttttuuuuu.tssnsrwqppoooppooGnnXmylcjHgeb`\YQV ROLIGFKCoroBoprOsNttuVv?wwwx-xpxxxyNyyzyyTxxxx\ww{vvzvJvbvvv6uuPttttttetsrrqCpoonzn mmmmmmmmcmmmWn-noptpqr rs(sEsss s4sYs[sGs/s?sqst ttuWuvZvvvguu>tt'srrHqq_quqrqqqNqpp nljhfdRa^\1YVTQCNoBompFq^rsYstQtuTuvJvw wkwx xyzzAzaz+yyy]y(xxyx ww1vvvv,uttbsssUsasxsis:rrq=ppocnnnnnnnnnnnnu{uyttQt-t!ssUr[qippp[oooInn^mm,mn9no/ozooooyopppq1qr-rsMsssssrJqqq{qCq>qSqqlm?mhmmmnnnn&no?op4pHpqq[qqqqqq:qq'qrrs1sTs@rrrrq>pqUqrtsssssIswBwxxxlxExQxxyMyzzrzqzYyxwvuRtsr-qqrst ttuvvsvvvwkwxxyCyKyVy xxvuufut`ssttttuPuvqvuuvvw wxxty yzIz{zzZyrxxww_vvvLv4vIvvvvvvv&utspnlGigebdKcfccdegil2ntprtvwyyz"zyyyyyyyyyyixvtq?njg+d a^\Z[aZ\]7_tad?fikmprnstu4u|uvMvvvvwwxUxyLyqy|y(xxPw=v!uu%tussstttuuvvkvvw\wxAxy(yz4zz{3{zyyy+xxwwwwnwzwww`w[w vutrpmjgdWaw^]U[[\ ]{^a4cfi|lpoIqsuwuxzy0y)y5yyyxxxxxwvgsplBh-c_[X U_RQQfSTWZ^Oae0hkosqttuuuv v!vuuvEvwxxxyxxxw%vuuuthsshsPsssstivvvw/wxxtxyVyyzAzjzzz+yyAxxIwwwwwswywzwYw$w3vv]tsZpmj>fb^[]X2VuTTTVsWZ]?`dTgkIn)qs>uvxx#xLx*x9x*xwwwJw#ut4plgb]Y/TPKMII>HJM9QTX]#afj*nqt$uuuv uuuuJu:uvvvwAwxGx]xx wvvuettxts_s s sWsrs&vuvvnvwwCwwwwwwx www6vvZuufuPusujuduruuyuluumts#qmj>fa]XUQlOyMMpMOQSW[(_1cOgOjnuqCtuw wRwwjwlwIwvvv/utNrEni6cJ]XSYNIjEBQAA(C~F$JNSdX^ cEhmpstuuunuttt5ttHtuovvw$wIwwvvEuu ttyt strrrrrru0u*uFuuv v v[v}v>uuubu7utt}sstrrrsss9sVsssstssfqInjfa] :o99,;>CHMS{Y_ePk5oQrstttwsssNrrrst#tuuv2vvuuu&ttztft)s|rrrqqTq!stttZttet6tnthss rrBqqq~q.poooop p[ppqqVqrqqpoGlhhd^YvTNJEC/@@@CcE{I3MFRjWL\agkostvwwxw9w(vvv?uttmr!oUic\UNH4B|<774#3258>BC(I#OpV.\bi;mq=r]ssMs&rr9qqqqrFrsttuEuBGMVRX_9djmnUr'tDv4vwjwSw]wvuu[t7spmga_YQJnC-<51 -,+.28> DKURY`tgXl oq'rgr6rqq*ppppq3qrst1tttt|tet@tst+t/srrrqqprKr7rr qqLppponmmUllljl"khjjjkkl\lm-mdmnrnnpn#lie*`ZfTMG9A<58e43369c>YC_IOVY](c.hlpsuuvvvviuu$tms'rVol;f*_XP]HA:h3,.Z*))),07784+/..O1A4?9?ELSZ`fjoq}stuuuugutKs~r qnYjd^VO=Gx?9O2-X))()-1:7=~D;KR6Yx_fOjn oOpjp:p7oooZo4o^op qrsst ttsssssstjd^WP:HA;40,,-Q1p5;AH NU[avgjmnoo`o[onnnnoopqrs#ssssssssttytgt"t?t0ss*rq4ppo7n:mlOlkk>jYii"hhhhh%glggpghi_jjjkl2lllpjhxdP`PZTMGBm<843257= BMHNU[G`eiHlopqaqqq_pppponlPi6c^WQIJcC~=7_300H15C9|?{ENKQW]bgjm`n.nnn{nZnBn7n$nHnlnopqrJrrrrs6s}sst^tuuuBuLutt5qq'pronmRllOl8kjjii`igiiZhgg|ghhidj$jkZllmBm3m?kj fc^-XRMXHC@.<;:vD?IOU}Z_dShjm,mn"mmmmmmmmnnopppqQqxqrrssjstuuv"vvvvMvrpqq+pBo2n mQmm lkkjjNjUj_ji]hhEhvhiJijk:klmNmmnmki$fSa]WRNJ3G CBACF?JOTY^sbfTik`mmYm~llFkk0kk"kl?lflkjhRd'`ZUOI@C><9(9u:t>BH]MSX]4aei#klmmFlllmmllllm^n:noYoop+pqrts stvvwAwx5x_x0xss1rqpooDoonmm!ll>l)lkjj;iijjkklRm mn[nno n`mkirea\\X4TgPMJIHJiLQEUZE^bfiIkl@lkjihhggghzijGjih^e a\XRLGCB@>6>?CGMgRW\`ldgjSklmm lllllllcll lmnnndnno]p8q0r7rsu'v{wox xyIyyyuttsUrqqpppoo!ntnmmm lRkk(k%kKkl3lm`nnoJoooo0nmwkhdd`x\YUSP(NMO~QUY]b1eijl~l9kri|gf4e ddddefh'i)hhtfcg_ZUP:KGECDEIMSX.\adWgjklm`mZm6lllmmlll7l:lmimnQnnokp`qmr~s4tuuvwxyzzz{7vtuuktt6ssrrrhqq$pdooo nwmmlllHl]lm>mn]noopAp%p ooWn5ljfc2_\YWU SRT:VY\`d$fikl1kHifdbavaCaaabdgf{ww5vvHuu5tttat0ss rBqq6poo=nmmmmnRnojopqpppppCponki>f#c*`^x\ZYY;ZX[^a`d0fhjkpkjAgduaD_ ]X]+]]^5_ad;fhhihgUd`]wYWTSRRTXe[`dgkjxlbneomm-lllLl klll>lalm1mndnonnnohp>pqq?pomk;gda_^]^>_ad4gknpq}r:rYrrrkqpppqr2r|rss|stWt>ssrlqqqippDooWo@o:onmmmymn)nnoSppqrsttuvv|wQxx~xy-sJsOsWsstt t!sss1rrMqppgpooKo(oKoeoopp!ooo!nmmmmllLl/lillm?mn^oop`pq pppqdqqqqp7nljgZe8cnbbbcDe6gdjrmpzrSrsstntnt.ss+ssysssst t-t=tft6ssrrGrqq\pp+oooootnnnoLop7pqqrcs0stPtuu{uuvuvw'w!wpqrr(rqrrrsrrrPrqq;pp~pdp!pp1pppqUqqqcqpp#onnyn*mmmlmnnnopKq3rrsissssssss1rKq\onljhvffUef7fhejXmorstmu`uvjv{vjv%uuvvuu!utttbtVt%srrrrrLqqeppppppVooop]pq`qr6rstt$tu u3uiuuu]uZuuuuupppqQqqqqrqqqq^q pppppqNqr#r`rrrrGqqrppopoooro]oopjpqrRs@ttuvvgvOv;uuu+tsrjpoNml0k iiEhi+iklo(q]s!tuevwwwwwwwwFvvYuu"tttOssss%rrrrrPrqqBqq\qqxqpppqqrrbrs[stuuuuuiu)tttt s*rno]op[ppppqqppqpppqDqkqrGrs]ssssss/rr4qqbq2qppqqdr rsEttuvwkwxQxGx1ww]vutsLqpso3n&mlllOlmn9oq>rtu:v4wIwxxxxxxwwMvruu ttNsslsFs$rrPrWrwrRrqqqSq[qr!r qquqkqvqrr}rs'st*tu=uuuuhu$ttxsrq"okm mnocooppFpcpyppqq(qjqrrs/st_tttttptss rr!qqqqwqqrs?stuxvew5wxExxrxIwwUv{untrqponnunnnnnopr,sAtKunvkwbwxpxxxjww%vAuZtt ss2rrrrYqqqqqqeq,qpq+qr0r0qqqrr4r|rssJst"tuuuuxttssKqp!mkhjlKmnnno ooopp]pq'qqrQrsIstu uuv uuumttVss:rrGqqqqqrshtSu%uvwxexxxyxwcvvusrqq'poonnoo.opfqRrWstuvwxHxxxxxwpvtuZtOsprrrr8qqqqmq;q0qSqfq3ppppqqr=rOr$r6rbr}rs sfsstthtuu{uyuDtt*s&romjFg?bfVhjlmmn:no]opVpqorrs+st_uuv8vovvRvuttMssrqqqqRqq-qHqrstdu>v&vwrwwzvvutfsrOqp+oo-nnqn mm~mnSnoq rHstuvwEwwww_vvusrrqqcqRq0q pppppppprpIpOpXpqfqr&rr6rvrsstt:tSttuu#uBttPs(r;pnkhdd` ] aodgikOl7mYn:oopWpqrgsstTtuvCvww1vviuu1tssBrrqqNq-qVqdqr[s8t tuvYvvvutsorUqonGm'lllmmWmUm^mnnokpIqDr7sstuuvjvPvuxtt rqq?qpppp|prstuRuuuatt=ss:rrqq ppapOprppppqVqr}s/st ssxrCqoYml jhffnf fgWhhYhahhhhij7kklmo.pqrs sfs3rrOqnpp8p,pppoooooooooo\oDoaopq[qqrrqrstkuumuuuuu6trq*nckh8dO_YSMKQcV6Z^,a_c}eg!hijokklmnopqrsttntsrrrDqqapppKpoooooooopcpqponAljhfdb`__X_`````j`l`a'abceo=o3oDobogo?onnnnnnnenlnoop?qqqrrdrstu4uuuuutsqnnjg3b]zW2PJC:AFLQTX}[ ]_)`abcdefgiU4TTZSSSTUVtWZi]1`~cfijlFmmmmbm$m m&mTmnn4n"mmmmmm_m/lmmnn(nopKpppqUrrssYs5srr`pokh%c_MYTM0Fo?X8C6oK=`<|^@'ABDmEFGoHJDL>^;97q6O55w43211,012t46:?#DHM%Q=TXZ\^)_U`Bapbd_efgrhhdhhhhmhohZh#ggggh'h1ggKffZfedcbha_]uZEV9PL1F@:O3-7& fQg %z)-h0-246$78r9:n;:<;=?ACE.FkGHH]HnH GG}GGHGGGFF}F]EE?D_CCVC*CBB@><:864F2/.D-6,,Q+*)(h''X'(Y*7,v0O4M9=AFIM^P7RTkVWY[]_M`abcSccccdccvbb`b#b,b aa`@_H^|]\[Z'XVbTQNFJ D@9:5#.("qY"$$')M*+V,-.a/)0 13l57z8:9;;IB#EPH JVLNQTVqXbZY[]]^b^_ _;_S^^R]|\\![[AZYyXDVUTSxQOMKIFiB{>+94/O)u#hi  sH9 !"n#'#$&')+-E./k0l01W1J131)1W122+2611000/I.g-,,q,"+*)'G%A#7!8rHEYq#f#'F+.26P9%<:{8K531B.*&o"d*  P71 A N M  ? 2 V7?6v'73`I#i _k=2BObg < 6*o!>$'*,/147g9<=?A/BCDZ=&;976420.,*(%"A)%g FahkZj 5_BXdAF\xl r | ^q("b7 zfjt!$g'),p.1 3 568g9I99:39876i5%32l0.,+A)q'p%Q#3!gf$TJKf R B &'q3{$uiO   i > f q f a 2 7ubqq:Z[z_xfPt}r es"P$o&(*,S-./:/T// .3,+*)'&*$t"!O^HV 5A %6A gfUd:NX]fojF+ d08]  ]*v$Aw [!"#m$ $)$Y##j"_!{ -a! V 2 sm5t/ov #ZO-Cqs0L-0goD:8/f%x[JPCGX #?_zRqX1h } lqa]J@IdD%S4D V  3 i ,ed0ti&4a>*E13fvPns-kiIBLZ9[ovnyiG[\mc L 9n<7j 0 O EeLb23`RD#z% 1t0W9eSLA7m9+Qn}|{|U/ cb ` & f G &Ul<LuY_ weu` gG+w >\]`?37A9,%)1BWcaW[T:Fz`KtmL?ob%L_P9x3puB:qX*0hi:Iyl #7$paA*&-9CJMQ\eeen|y3F:4z($Fo/M.% ?g} g`w+PukFa?L)xS>xD_dH?1/-8EXiy".&^kQbzbvg0+#\Z~Jh \+t /%$vrYEry$PZ[EF)<?xka\k{i-03\`v ,A[FKV@m*%9f|j@3`R aOR2;! e>)<oW1,;pkBD+q,;b+Qu<Kj" % n?pi}GtH(wlg:?JU7=5\}yI L<c)?QK4CA <4B)t-6(6>jD"b)Pv;w'U21$u U2$CWrN*+YD& xjf~.#!!N/"dO& o DW2GVA^'"[ng J3fwgajin{nF1)9B]~+ ~~&mB'%tV):8q_G+]ho]<W2y}snsu~ph^coOO qVy D:%%tv3AF={qe6 _Mknx^Gvigju|ytz\ \Zs;N *2+8 !Z-\_~1, tAmfJr8 ;kxgZVQU[hskF G<D^FZp.,uHF$)4F& uW$zItw-tE"9wqK%!.X}nbVYawzW2*,Wd+o<og> B8 /- =F:rxC /|A1p]T*J"`cI9?F^}x];-*Jr]08j@0Dz~S'2 >3;noD"__r%)6y-.Dd~qW@?IavnQ?*7YS=7!YNs ez< -,-A2$czc:@pU +w0,O3%:Kcz}i]RYf{|YA9GOh}X>-:Cq:pv&X~zZ, 2. 6E( GbgbM93;UvtNbl oG=4>H]wwylI@Qvr_YPRQh(Z 9h|h?0/.,!!-L7*KcfR9-7Sit~oG.5hf x[:44JazylrqXJLFSk&+r/(]pgXA5.!$)$ <:$2LVL:2CZUQfy~i=*F-LiRFOXgq|kf^\[_]lj!Kf7,D_kX@GOA(%0 +A?&:ZcI,2IRXblyv]F:VBKxYQQaixwkiceftcJT2-;T^YNBGE&.4":M="*TmY5*8Naa[bn^HXe.&Elepuz}}{}c&1im;'HUSJBKQI3 ,J6 "DN>!2WcV>/7Ocmjfw~iQCWe<-Mx~~Z#6nyJ4;M_ZMMQUO9%*CE#.MS98\lZ;.<]xueekspVGPs{Q@ItE#EzqL>SrwhTHUbYC-';MI-"  %%#<QTF1,C_gYB7Eaqwusxf[fdMWp}S5>]wYIOaogVQT\ZH4/8KO9  -7-#)?]hQ40C_m_G:Fd~sn|x_Ujz{yQHX~iTT^ig[KEQ]WF61<II:"$1$  -1-)0I[UC6:NdmdPGXs}~}qpjeqv_Ud{t]\glkf^YWZVE78BJH=- *-   +53.3?MRI>=KetiVR\jw|ztr}vpv{ntl\avuc]es{qcbhmiZG65FUN:,&),& !#&2;@@AMTNC9=ReeYRT^p~vnkvokitxsvywoe`glfVD85>NSC-#&-/$  &++'"(:LNIMONH@<?JTYXX[i~~wjhjzuqs}~|qa^fnjWA47ALPG6('-/+! $'#"-;@CMROHDDADP]a_\_iy~~vplpu{unosz~yy}{rklu{wgWJDGMPK@60/0/)    "%##(-8IRNFJNIGP\dec`Z`t}wuy{xz{}}xqjkptortvwuuuqqzyla`jzta[]YUSOG?==93/)!  8T`N/ /S^P@0$.IgyreL4*(?gbG5/<EXq{pd^ZUOFCBLZl|pcXHA@IQ[gp{~ypifbcdhopj`^\XPCAN^_WTNB:=GQPB.  -Ztc6 >al^<#!,Lr~^>) 5Wx\.+FYgy~wida\WPJ@?CRew}ssuqjf`UNLOLOYizxl]OIEM\ge\YWVPB9=INQY[TH>:>CE;(  ?ax<1YnlM)>d}nK.%9Toy_<!!3Tkv{tqfSFDKJNYbda`^_[TJ=:@Q_m{{gRHLQ^ku}zueO>8>@GQZ_ZNA9>FR\]WJ=516DH<#  .jU$gtK9lqC7eS@lzhXK>;=FHPdtxneWH8'*E]tcJ>17CZqjJ0('6FU__]UHBGQSQOKG?/)4BC4  bS,mFGt_7%/U}X27cqX?012@Rev{zpnbJ1!$(1;J]ny|mY>* &;Yp~scJ70-8DUkqfPC>8=O^dS2#8@8 DZ+rM'T|}T-6fSH}p63PqoZ> 8Qfxvkc\]bmx~xeF& IopZB/,,>Ylo^O?.0D[j^B 5>-*vY*oA#VwykN35UrI-3Ntj;8[ukM/ )>Wn}qh`VLC?<?AJSap{sX:$ +C\o}vhK(0QmsP*%>YjY/ )%  ^zS+o='TomP3*4\e0 6m]Ja2EibH6203358:852:F_jD% =dzkB%Xq><juV" rK ,tB &ZfS=-*@`zwO39_a19juK )Mm{mb[SNGDDHOQMDA<4,$&*:Pjl< RxvKMw~l?=M@+ FvE1\jK"AdwS*)hF JT:l]0  6Nbo~xh`WK>4-#!,HoOCUL{: FS6#`A&XY5;[ecL+">lf+ :{z8)bi> :Rcq~eO8!I~G&uw0Bw^7I9  DN!PZ,/U^I0#$D~IGFk E5 d$.AFNRQWkwdN8%],d {4;w0N< "\MV4(FJ:#(Gfzg5 -b~y=l }17Pd|xjWC88>76CT^cmpm`ZE"CHi+id+@0 efE[5"?<$!BefBGhc^ Jt?|eJ2" 0Pix{qH(= Bm.C:Lwl*/7wh.AQ: &$%HXT1 I{p22O7jcF:3  %U~n3ovwz [*\`2 OU'=U8=SCNn{}Puae[r4.AIOG?) -hTl DAs p/& Y% BzJ|f0j'Rv#Zea(A PqW A[L IXpL_hw&0h 5CQRK<6*Y|FmZl`a@QLI[3%hq@!#ti$`%BhRG)b 7IbbW8F**m1:H86 G#|x3{_!<N*PJ  i     M I /  & * P $ n m "  K t8 RBNp UX7t&jssC7TviOFZ`E{:{yS _ ]^1yV7Y <zY:sfDz5m ]I#ggwe ghk=Atr{<t)du(98^  gldH/ZI Ch_#G,cVpa1(t~c>Vy]MByO" I "bV|?vhT8z|kn9)AL / -4CBXo "$t%&'Y'(?()_)))6(((()(((v(d(z(((((()%)K)N)@)();)-((('Y&%$#k!pB E4E8 e|'p0 eo  m MgG|@ !#s%&( )w*,Y-/n012}3)3456d66m6-6"636S6O6555S5F5C5444445 444B4 33O22711!0~0.-~+=(&F# OMW NA*'c^ d]@BE{l T D r #q~e!#%'* ,'.U0@23m46$797:<>?@ABuCDJDGDCC,BBBqAAa@@@U@=@??@@*@_@@@@'??m>=<<;>::9&7530.+(7%" :nl^( Q I4@NI < J]\ 2"&)+-0J2579;=?@dACVE3G7IJKM*N/OPzQPP(O1NtMMOLKK/JtIII}IKwKdKvKJIlHQG#FE.DCB]@s><9630-R*(H&$" H/L5 O Ytgi_}\M "#x$')-00A358;:=@XC EGIJLLMOQTUWXYZs[\5\[[YYXCWW V4ULToSS^S&RRRRSXSTU4UUVhVyVSUTSRQ{POsNLJGDA>;K742S0.-i+)'&{%i$"P6 A c  Q9_*x%"+@o} !#)$%&z&''(*)+Z,-/%0358;i>@CTF HKNoPRTUWHXZ\^v_aDabbcccc4bRa9`K__^]]+\h[[l[1ZZZyZZ[\0\]T]^_#_~_J_ ^P]\[ZaXVTR3OLmIvFSB?=;/983643 1R0.-c+9(%#!_Li G 5J0b,('p&W&'(4)O*,.0A1F2 2f23|46>768C9;W=?iADG2ILO^R$TWZQ\^S_a6bceFfghiij5jwkkZkKjihggff7ee!dd?cccc\c"c-cUcdAdeHefg)ggggg`ffdcLa>_R\ZWUQNKHFuDC#A@ ><=:9m8 630.o, )'^$2 ~nZ P t@t;74L2223 4+5H78:<=p>>?/@*AWBCpDFHIKMP%RUWZ5\^afce~fhbipjk:klJlmmZmymmnjnnnmMldkjjjJiiiSi,i hhhhhhhi>ijjkkl lWllll{l=kXj;hfdc`^s[YV9SQAO*MLJHG-ED!B@>=>>?A#BE3GBHIJbKKMMNOQ1RTVYWY[^`=bzdfoh,jkmnppq_quqqRq7q"qqq!qMqqqqpoonn mmm^m*mlllll~lllmDmn8no3opApqqOqqqq2poWnlfjhg eb`^2\ZX{WUT5RQ)OMLJ9GEB@=:63 .+('"?(U+PMYJIIqJ=JKLNPRTJUUVWXY6YZ\:]_8`8aFbdf&gi\jkm!nvoqArTsNsssisrr8qqqqqqqqq.pp)onnn8mmm\m"llllllm4mn;noppqdgcbb`_I]\eZXVfS`P_LHDy@>;7I2..*G&$&!da`^__P`3`abdfghijkZkll_lmHmnn7n;njnoopOpq2qrrstuuruMu%tt%srrXqqqYq+qpppFoonKmmllJlkkkCkMkwkl=lmNnopqqrsssstt sssssssxs+rqqppoonGm@lkjAii hgfedcpb`_\PYVRNJuFA=v95d1/E,jhggzhhij jl.moppqrSrss sessttssstsss|sMs&s1sLst9tu+uIucu,ttqss?rr.qq`pppfponnMmllmlkkklk0kjkkmllm!mnopqrsnstmttthtBtsssssst&tsswrrkqqVponmmHlllqkk!jriivhgCdbG_ \XTPLNH7D@= :N7m$l>l l-lmn}oopqrs|t6tu[uuvvyvvvvv{vLvuuuctttbtatttttttKtss rr"qqgqpp.ooonn>mmlldl1lkkkkkllmCmnoop~qQrrsstHt=t%sssSs=sn-mmm0lll]kigeb_\Y7UQNYK2HE]Bo5oo|pqqrsstsuEuvDvwuwxExyyyyyyyyayxxUww;vvhv6v uuYttdsssrr>qqqMppgooo$nnnuctss2rrqqqqqqMqpppqqVqxqnq3qpppooInnnozp1q.r-rssssshrr*qeppooogoaosopcq,qrstuvwwXvuu tt!ss+rr'qrr'r)rqqr qq`p4o/nm=l'ji:gfecb)noAppqr"rzrrs$s]st)ttuOuvwxx"x:x(xxxwwwwwwwrw v^uutPsrrcr rrrr:rZrkr}rrs sWsssJrrr*qq>ppoqo9o(opPqCrAs sssssrr=q@p,oWnnnRnanoovp4pqrsu6v-wwvvuxtttt2ssassss5s.rrrrrqpp onn&m1lfkjihnnopopqqrrqrrRrrs?st$tuuuuuuuju\ulupuuv?vlvFvuu%tssrcrqqr rlrsost'tltuujuuwuttKssqrrqpppq qrdsHstVtItJssrr>q9po,nfmmzmmmnnoip&q qstCuPv7vqvxvuu@u,u>u9uttt\t^tttFssttssrVrqqqppCoobnmno/opDppq"q ppqqqqqrgrs`ssssPsrrss+st"ttttttxss-rqqqqqqr~s@ttuujuvvPvwvTvuuuqutdssBrrrs'stZu uuuuAtt;srqpp o`nn9n nnoop^q qrstueuuuuuuuvv,v uuuuuuu\u4u#u;utsssYs rr~rDr qq~mnQnoIopp6pEpooopkpkp_ppqZqqqqqqqqzqqrs/stt t;tssroqq4ppq qjr3sstu uluvvavvvvvvv^uuYttotetuuvXw!wwwQvv&uotsrqqCppWoooop5pq*qrrstpu,uuvv#vMvvw5wdwvwTw+www vvvjvw vwFwx&xyszttEssrrrrrs sss#s%sZst*tuuv=vwkwwwkwRwpwxxy$yzzzzgyxwvutssrss+sstPtttttuu!u[uuv vwvwRwwwxAxvxxyxxxxxPwwwmw1vvuuuvv0v>vGver1rDr8r!r#r\rrrordrrs.sZsPsSsrrSr?r-qqmq'q2qCqr:rsxstuuuuuu%tt+sssscs4ss rrrs7st2tu.uvwvwwwwrw^w}wxxgxyzfz{ zzy;xpwxvfuetissssttltu*uSu`uQuYujuvuuuuvIvw3wcw{wxxTxyy\y_y4yOy/xxwwUw'vv?uuvJvvwwBwnssssgsvst"t&t ttKttttttswrrrlqq{q$q)q:qr$rs]stuuuuuu tmsssrr$qqqqqr.rsrt9tuvwfxxwwwZw3w.w]wkwx?xyz*zqzywxpwvnuwvvvvuuv/vwwawwtttttu:uuuuvvIvcvvvu9tzssXrrfqqqqrrzsst+tuMuuuu>tssCrqppopVp1pPp_pqSr7s#t"tuw wxyxhxRwwwrwKw\w]wx3xyyz6yxwtv$ts4qp_oNn9mmnoopqr\rst-tuuRuuuvZvww1wTwxxyOyyyyyyJx~wwvv_vPuu[unuv}ww{wx?uuuuuvmvww$wywwx xYx:wvvuvttesss[sOsRsst.tuuwuuutssqpopnmllllmLnopIqrt"u8vwxDxUxgx&wwwtwywzwx0xy7y>yxx7wvtqn'khewb`^^_+abdgilkmp qs.ttu\uuvIvyvvvvwwxQxyRy|yy?yx2vutttssqsttuuv$vv;vvwjxxy/yz(zzz{{zyyy4xx+xxwwwwwMw%w?wFw1vutvrpnljgekdc8crcdUe(fh0j@lnpxqsuDvwSwwwfwDw^wwowVwpwjwvus4pSlthda]Z!WUUVxY)[^zaWdgjn&ptrvstu:uuv uuuuuuv~wwxCxxxxdwv_u tLssSrrlrmrss\stBuuvTvwaxxyhyzzzz{<{KzzKyyxxxxxxkx+xwww[wwyw3v&us#qnyl iRfFc|`_`^Q^^_`kbcfNhkmo_qs{u;vvvvvvvvvvv{vu^splhc_-ZVROM'M^N{QTX\_d*hHlYoHqstpuuuuuTutttrtuauvwvGutswqLo l0ivfdb_][ZeZZ[\x^8`6behk&m`or.t%uuuvvvv vuuuutr>n@id5_YUPKHEEG"KNRW[`eyjSmpr,st>tttt9sss5s,spttuFvvw vwvutss}srqqnqGqdq7q0qgsst&ttu@uv`vvvvmv8vSvZv)uttsos6sOssbs/s#sWsstttsDqom>j/g6c`2\Z XWUWWXY[]`cgiloqsuvv-vXv/vvuuuu"tsplrgM`ZTO J#DA ==?:CGLQV\b8gko_prs&sssdrrir$qqrrsattuvv1vXuuOttssvs7rrqYq pppGpEryrrss;sLs|ttLt.ss rrrrrq.pEooop$pp ppwqqrrrqpnn/kheb*^[[WVbTUU&VdWxY\&_ubfiPlYopqtuGvdvvvvvDv%uu{ttr"oke^WPJEM?c;779t>bBHMS]Y_ej!mooqoooVoopaqrrstetttttssssjrqqq%pyooqjqdqE>8=40&028C=zCIPV\c)gkmmoop}pGpoo+nnno opyq{rqs5st-t{trtSt sssssSrr/qqppq+pppo{nntnnn?mYlll lLll4k?jWjjsjkkl!l!lomFnEoo/o$mljhYeAa]YUQOALL_KM NPSX \1`zdhRknprtuAv$v4vuAtssqpnkEfE`ZSLE+??95;12P4\9?ETK8Q@Wj]+c.gvjlunXooooconnonbnnofp,q5r4ssttVtathtGtttKt]ssIrrzqqpqq/poon,mmmmlkkkkl3kk j&ijBjkbkl llGm mnnnmlVj:hReb^ZVSFPNMMLN3NQPT7XU\D`KdNgjm#oqsJstttwssXrrpom1jfa(ZTNHCt>#; 78:@ DJgOU@Z_dhdkRlnnonnnn_nHnVnnoip$q rrsstt;trttttu9uttQss[rr*qqjponmm mmllkQkkkkkjiieij:jk@k}kklmnJnSnOmblQj~hfc`\YV*SQPPAPQjSV9Z]aDdgjloPq rs&sslrr;rqq2p oljCfa\VQ[KG`B@f=>@EIOT X]af5iRklmn9njn0nn mnn.nno2opqrors5svst9ttu6uvLv]vvuuKttrrQqqpYo3nm~m[mnmlkkklEll]kpjkij&jzkkVkkl9mmnnnnWml;jifda ^[4Y%W5VsUV?VX[^]adgj*lTmopqrrqppvpKp,poEnljrfc^CYUPALEH|FDMEFKWOdTX] aduh+jlm9n n!nmmmmmnn_nznokpDqqrrKrrstotuvgw$wwwww|vvqtsjrxqLpnn3mmmm9llclmmqm"lHkMjjkkkl lFlmno^opoonml jMge`b`<^S\v[Z[q[]_c fhkgmnoTp[pqFqpoononnnn7mlj^grd@`?\nXjT PmM-KIJ@KOSX)\v`Qcfikm@mn,nmmwmFmTmtmmnn nAnopSpq q*q[qrstu`vwx_xySyyyxuvtsrqpooooannin'n^nnnmml[l?l^lmmYmnnopcpq>q@q5p}onDljheeca`_L^_@_acfil%nXokpNpMphponn-mm'lllqlllYkTj\h@ebp_@[WTQPNOqPTX/\6`cfikmn0nbnn|n'mmvmvmmmmmmneo0opPpppqsrXsqt1uv^wxy:zzszzzmvvussssjs)rrQr?rCr%qqApootss:rr qppjpq'qpqqqqrr2rXr qponmfkihf]eUdWd cdeKfhjlno6o2o+mkhfdczcbc6cUd-epg1hj#kQk6jigfieccbb&bdfrhjlnppqqqqVppmooHnnnintnnn2n4nopdqq}qrCrstuu}vswxgyyz{x{|_yxx2wwwXw;wvvvuuuyu&ttDsrrEq]pppqqQqlqjqcqsqqrqqApZonm}l&jiTh'ggg?gEghik\lnTooo(nljgd*b`G__x`)`bcfThjlflzlEkZjjiXhh(gghi+kln5opqr}rrrr qppFonnnqnvnnnPmmn4o"opq+qr'rstuuRv"wwxfy0yz{{y[xxxpx_xax_xGxwwJvv uttGsxrrq$pp;pWp{pppppq$qmqqqpUonnlkkjBjij jn1nmmlm7nnoppqSrPsrtLttuvwwxpy0yzKzxxQxxxx:xBx4wwyvv#uZtss'rQqppoo4o;oRoooooppMpppgoohnn mCllkkkkllqm&n?odpRq2qJqfpEnlFif)b_]\[\]_baei kmnToo o,nnnPmmrm&mnoopqqrus[t?tttssryqponngnmmmEll7lmmAmnooprqrst'tmuuv^vwxcxydywwkwKwVwwwwwjvv3uttsrqqpDonnsnn n9nonnnnnnoCo_o8nnmmm^llvlZl2lTllmmAmnopqMq`qpzo.lifhb_]O\,Z[E\@_ae9hknop6pqpqpooro:opfqQqrwsdt]uOuuuKtss r^qYp@o6nn"mmm+lell&lmn6no

vwwOwwwwgvvyvMv?vuuuuttttpssr`qqqrqqdppqqr-rs.stctuuuutsshsrrrGqqmnoop p`ppqq(qq?qVq>q'q)qeqrrssnsssxs rqq~qppgp4ppop pCpq2qrstuvwvw`w/vv#uxtsrRqon5m#lJkkUkjk kplmo^prs2t=unvUw wjwxxQxww-vuuu]u"ttttRtt>tbt0srrxr(rMrrrr^qqrr|rs=sttuuuuu5tssarrxqpoojrklmnyooqopBppq qKqhq~qqrRrslst?tVtrt9ss^rrMqqq*ppppppqr"rstuvpwIwwwwv7uutosNrponmmSm6m mm"mwmnopqrstuvw1wwwwwSvuu-ttssssssKs=ssss rr1rrrssfs]s rrrsBsst!tvtu8uuuutuss rIqp'nljfi)jl0m%nno=opLpq9qqrKrrsastvtu>uPuYuttKssrrEqqqbq^q"q0qrr)rstuv~w=xx6xJwvuutrqpp%obnnwnSnn7nbnovpOq;rKsFt:u>vvwRwwwwwXvutss]rrrrr|rZrSrrsrrr1rr0rsksssssstBtttu(uxuuuuutksyrqpn{lHi9f`d)fhjXklmno^p pq qr>rssttuusuuu.tt_ss(rr:qqNqpppqqrsvtbu:vvw2wvuts[rHq=onmm}mllllXlWlm-mnoprs t9uuvHvvvvDvutsxrrqqqqpq&qq"q~qr r qqqqrls8stst tQtuuZuuuv'v2v"uuQt~sr3qoOmhjogWcC_Z^b5eggik0lmnop~q qrssstvuuvuvv uu=tt*ssrrqq"q pq0qjqrsvt\u3v vqvvfutlrq"onAlkoj]j jjk-kkklJlmnYoopqr|s`t9tuNunu~u:u&tsriqqpppVp6ooopGppqqppq1rrssttNtuIuvOvvvw0wvvuvtDrqoZliea\WQVZ^adfhqik4l:mmnolp2pqr&rstUtttsrr|rqq%poooeocoopQpq3qrssss.r2p_nlcjfhfvdcc"ccdeff8fzfgGghwi.ijkmZnoq%qrrs rqpp3ooRonnnninonooVooooopqrssbst=tuv6vvvvvv9u*tr&p&mhjgic^lYJSJM~HNZSW[^`cGdfkghui9jDkllmnopqrss1rqq1ppopoo ntmmmnnKnnno?CHMaQTWZ[]=^W_Q`CapbdPeg:hjkrlmmmFlkk,jjjkii0hhhhhihhhifjjihfdLa_n\ZHWUWS]RBQ;PPkP>OOOOOP6PRT VY%\]_begjkZlm m,llCkkkklkkkkkkll%l lRlnoppq`qqrsBsssssr qomifub-^LCFJMP\QSTUVXY[|]`_&`bdfIg(gg(fVe]dddd]ccbbbbbbbjb#bBbbbbQ`^[YQV|SPMK-IGFF(EtDDACCJC;CCDFHKNRzV]Z3]`ceh hiikiHi,iTij$jjjwjbjwjjjjjjkk~lKmDnAoooopHpqMq9qp3o@mljgc%^ZU}OIB;4-).U307;?GBDF"GHnIvJLMOQSUWY[\]Y\\'[.ZZqZlZ>YXXnX^XcXXXX>WXXOXyWWXUSPN3KZHnEBx@>= <;::9<8777T8#9';;=!@CJG`KOSW'Z]0_azbbc`cdefofg}ghh hgh&h_hqhh}hijTjkjjjkkJjjThgleid ac]XT5O0J+Dj>71Y*#~#e(&,0`469O:<<=?@qB>D/F_HqJLNPQRvRQaPpOOOONN>MMMMMMMM*MTMMM#LXJ{HhECh@>;;86~43y2h10/.-,,W+,-/1l48 <~@EeIM1PSVYZ[\^C_aVbcdejeeeef/fafHeeefffff+eoedddca^\qZWSyNIuDS>83)-& m7"^%)+./0113/4t618:<(>9@_B;D-E2EE}DD$CCCCKCGBB8AAAZAuAAA]@AAMA@@,>RAEH1KuNP2QSUWY[]7^_g___`I```x__(^_&_}_^]\[[PZYXKUSvPNKlGHB=83.-}(2"4 aL) ("$ $%V& '.(n*(+-0234\658/9D:99E887777766}6I676K6555H565H5m442D04-+)l'<%N#\" xh )!*lq"&*r.v2=59<<@C/EHJmLO QQSUWWX,XJ;9-63l/+&"5I NxJE ; ?>0n1l3hQhS!$"$"""".!!!!!!_!.!! +Z] ? u  z JlEq ~ 1"H%),02}4749<>g@'ABbC*CDDIDDbD)CBAAAA?>?8h J ;~* + j  P |(B}]XCg E ` x%!Q#%()+,-.h./ /s/e/.?-y,,A+*)F'&$"!:g * +O%w}Z<HWI.rJ1H_ifnD<D+0DP!&|QFj y I1/  !"#$M$%/%%i$$5#""X!y S n~  & sZ2ADsqIc WZOlW C`=)]. "*)  9NPIb 0 _<,@}I@*jV )  R-__]6PQBd zA)nN-MV :0KF'>VQ3 /`=]kppVL?Zflqe`  `#pvEC  } tE+VH68#P:-#%{P`$( 2&3*g4|{=nhz5c4Ef}xvaI|.qAk^y]=fgq(iTC6 w&/n*fk[FJy"){E $CXhznM(4 |cz<V^Y1u9&uW!{d("|fn6qv6O\I~aRGE?=8;CSgqodb\QA2!(UNz^i2houdsA(V?(G{nTB{d.v5xqvC Iqo.G9&xcH8*+/9?FOYahnv<WZ4#7z[{Q|:BYw~yp< \trY)hOE'XCyC%q0'fJ>20)/@Wdr,DN'_xN`6TG*7-q|xT$w!Z2{@&4fwnG 3ttIc\JH$3Kne\cr{/A=eo7DQ!by1x=BN6^."AnaB<gX[C M2@(h9~&L{h1:HW R0vVh 4[$|G.Dl$$qCzn ~DsI,#xnEKSU'J! $Ad~~PI Hj&3G5== #>x{(f% :+<AlF)[&Kv=w'V22 l cB%%/IVmY6":W=()%uy8(M5-eG/iNX3KG<^&PlbC7fsjlbdtxS=6FPi'2>EW]( //$}Y4@A "u%d=/csiU=];ymktwsndeoQP/cK< "w}&: DMA{% k9rbil+|UR{mio}xqzb-eR cv:I$7*8  "]2_f v1'&9ghJh6Et{i]ZTV[gm|m@JEG[Iev.%mzJC% 6H&xW jAsl!i95wnM,*9dn`SU[p_-Go@!L&H;y5).BH Az}E)w;)pZJE%bfN>GTodF7+Ah^ ;7sD+@qsL- !F4 HywI(f^q,!+u/1B_{qZIMUizmP?0@^]B6OFuf_p3 )&  6D1 .j~c4Bm{S +w+/ Q4$6HeoeXZf{{ZD;HQjcE3>DrApt TysQ$/+ 9E)"G`cU=.04HjzlG_bnD7/>Kc}rsrOFVybWZRTUn @'h7eze;)()*!!0L;-Oe`F4/5JapxhD/4bbrS438Pf|zkogQKRLUk30z2 #XkbS<.&"'" ;>.:VXH<:FTQQct{j<'G~/MbPHT[gonh__cjfni!;_1#7ScP7AK: #/$AE)>WZF//>IT]evuW;5W=Mu[UUcjzwie\]cug' GX60:PZVI<DD$ +5%8Q<(K_Q2!(@YYS^lvpRCU\*'Enity~zusjkul5"ExS/6U^YMCINH4*J: 'NR;!0P`V8#-J\cffrtcPEXc>/Ks{wx_*>uW=>Ob\MJMRL8#&@F  -=VV>%"9^pX5*<Yrrffjsr[MWw|R?EoI'BuiG:JfmbNAMZUA)!4GF,  *'*?ORD.(CadS?8F_qwur~wf]gcJSmU8A^~`QVdpiZSSYWE2)0CI4 *1*#'9U_G,,B[fZF<He{zoiwu\TlvPGWzhhr|yjZS\c[H6/7BD7$5&   -20-3JZR@5;L^f_MFWp|}rq~hetzcXe{{edotrkb^\^ZG88AHF<- ,1 # 1==8=GQTK@=G]lbQNYjzzx|suyowvim~wf]coul^[`fdXF43EUO;.(+.)  "$ (3=CDDMQLB8;N_`VNP\p~~}{toy|ono{{}}vlglpk\J>7>OUD+"%-/% %**% $6GKFFGGD>;?HSYWTXfz~vzzqkpohkxsqxzhQB@EMQI4" (,)  (*%#,:ADJLIDBB?CO]a`^ajz}||{|try~xmkq|{}xrrz{l[NGHLNK@3*(*+'   '*)(,3>JOKDGKFDM[dhhfag|}xw}vrv|~{tsx{uvvy|~~{wv|n`]es}zkYSTQOMJD>;84/-( 6T`L- 0SYH8,".MlzpdO5**Ad|~eG20@JYq}vld[PHCDDM\o}tg[ME@GQ`hp~rlib`dikhc]YVSM?;IZZPOK:02?KMD1"" !-Ztc7>bm[7*Jr}Z:(0Tw}[22Qak{xkjibVKC?CHVgwyvsokgbXQPSSX`n}p_NEBIT\]XTQQM>6<ILNWYO?428AG?.Aby? 5ZmlN(;a{tP0';Tmz]8#3Rmz~tqgTFHPNMS[acdb`\VOFDHTbp}|iUIKQ`nx|veO=36:CJPWUI<7=CMY[TC5.*3EL?% 1jV)jqK4hwO)$=jW@hyfWK<9?JJN]lsngXH9*% )6Lcx_E9,3B[smK/$#1=JUXWOFADKOOMFA9)%5EE3   eQ 0oDDn~^=/5V}X5#3`iTC545APcx}nh[F1# "*7DSdqz~{n]C/#'*<[sq^E2,'1>PfmfRD=7=LX^N-)=C:!  GW-sJ*TwwP-!<gOGwm2$6QnmT7 5Ph|sg_VW_nzrR3 Jm{~iS=*(*<ViobRA01?SaY> %;C3 )xZ,q? "WtrcI18^vM-2R{e:Dcv|hP6 *@XlyxoeWJA=78>JS`r{b@&",AXhtm_D#-Ok~pO*6SeX2 !-. ZzW,r@"QnhG*%3_n:*:nWP[/=flTD>7555435604A\|lG( 9\px_: Sm; 4crW!)+nJ )tE%WfT9$":[xU4:bg/:j{J0Les}xk_WSTPOPSTROG?841(',>Slk; JnpGMtyf9:NF3,ArG4]iL 8\voR-!`FEa CxV- &>Vkv~yl`TLE:2+)#)4PtK?R Ls/"K[> .^D&YX2 0O\YE-*Aie) 5qz4+e]0 'BYkxydM6"K}@$ou49lxO:K: %DNNY(#GO=&*QQIIj?1 h+AMWZZ^jzq[E3#!]|}en4-h-I9 UGQ/<?* $Mof5&^~t5t|78Tfx}{o\I=5626>LXblnpg_H)?=iu"Vw\)@6`` @W176?ijB ?|gaW-I8rkQ:'5Tm{U3 8+ n/Dy ,=pm09. 2sf+ @R<   =[]:Kzn43gDhkK<5' +X}s7ioayL!]f7(& MU'AZ@ +ML+ WtwVgb\e9  1AJLSL<(_Mf3w2ciCMHg Ua*&! A*H\K  Dq[E~`XKKZkj3rK']&9<B5%U) 'S!S}_(YEm+XTM.C% OqY G^F?YqAQ@A}xA9s#-,*" b&Qh[ofeFE;1pK!6 r(jrDCD ,i.-}FB r-arkadlz!}/Mcj GJM*#r3m4`&_l+>(2m#P$ &  a " #  O  y q m , 5  y $ U / q_ZLiRnD[O7'nv!J6Oo`A)9rU5d&se"Db l i!|yHGk-4j!&DhJ: ] , Y J 3/ OTaI:lSR @r)ca/N  ^ 3 Qd)"k0vzHgp-z>&{Y0{?T  }}<?t1. wW7xpq5;z" ' 0 GE % v"7#$%&&'z'(('''~'x'|''''n'y''((3(f(()%)N)>)(((5'',&&%$$ "!TA3[ d h~mlC![e3T gmq b7 [g{ . o$O3N!"e#%'T(*`+-O.01123X34444444444{4j4o4444455,56594433k2110\//e..-,*y(V%" #_u a W$l2# l% #u-? K k A "$&(u*D+-t/F124457!8:<3=>?@ABLB]B3AAQ@@@l@??????@@<@@AA,@@@ ?d>a=?;:9988F7642/-$*'9$s!"'WF| w U"1>tsu \  K 7)Iug2hu !%( *-6/g1e357z9:<>K?ANCDFHJKLMNONN*M3LiKKJuIII.III9IPIIJzKKmKKKKK#J3IGFDCC@BAA?e=;0852/,\)'a%$/" 0WB; y z$vc}o?7:RH#2gx !"%i(\+/%247i9ABDF}HRJKMO~QSUWNXY.YZ:7,4110.-P+)'%$["n 38_`F l'x)%!!l o2- 1"#$& &''p(") )*+z-.1B47 9<$:7530-*(L%" m &/T?7:f63*101 1A2M3<469,;<2=!=>?u@=@A:BCkEkG IK2MPRU\WZ\1^q`cbceqg hji1ijXjkuklj;9(6h30.#+1(%!0>m* J!IEAQ><<<<=>@CE^G-HCI?J K1L*LM;852/+(^$n $GiRNK[HGG`HHPITJoLbNQ RSTUVWX6XYZ&[]^_@`budeg4hijkm1nvopqqq|q#ppgpUpYpppppp]onn&mNllTlBll$lKllllllllllmSmnoGop@ppq4qqqqqq'pno;nlkji1gedYba`_^T\ZX9USTQ%NLIFCq@=~:E62.*j&W"eD'`[X2USSaSATT]U_VX[]^_`abc~cddevfQgghLiDjckSl,mmno;pqr%sssssIrrqbq ppppqq ppEonmmllclll!lQlelzllllllmmnrodp4pqr9rsMsssssssurqpp6oqnmlqkPjAi?h@g9fOecay_J] [Y4WYTQNKHpE9Ai=^840s,g)&+# a_G]\\]]^D_:`bdsfg[h=ipjck"kkl)lmmHmdmwmnnno oXoppqKrrsdsss[rr+q~pppp+p)pp%pJpIp/oo n$m/likkk=kkk=kNkpkkkkll@lmIn0oEp0qqrst tntmtYt*t$ttssbrr9qpp,ofnmlkk j@iNhFfeGcb`_j][+X UAR:OTKGCi?#;77d4>1O.+gfeDdef5gghikzlno$opqrrWrs#syssks!rrrrr7qqqqrrs:ssss{s"rqq.pp7ooooooonnnmBllkkvkVkjjjkk'k^kkkkklHm.nBopqrstuukuRukjjwifh]gifedaj^\YVgRNOJ$FMB?<96jRi}igijuk>llm~nopqrxs1stgtuuv vAvuuusuttcssIrrrrsOssstsCrrkqq1pp0oooooooYonqmm'llHl!l"kkkkkll]lllllmmnopqssttuttttttttuCuuput(sjrqqpFoonmmKllOkk2jjriigEebca!^[}WT PMNJzGDBllslmno`p/pqrzsgttuZvvvwrwxyy=y xxxvxwvv2uttttttStss'rqqDpp3ooogoEo1o*onnnntn#mmmmmmqmfmmnn^nnnnnnnoappqrqs=stGtZt.t,t9tAt[tjtu!uvcvvnutss@rqqp0o_nnFnmmmKmnnjn_n5nmmmmmTl=kaj hfdWb`^)\5ZWmn nopqFqrbrsxttu+uv9vw-xxyyyyyyyyyayxx\xFx*wwpvvu|tss$roqqwq1pppppq,q}qrArirUqqqqUqppoooppxpq?qqqqqpq0ppppppqqqq-qqrFrs,stuvwvvu!tJss=rqqpoo-o@oOoWonoaooo3nmmkji gf|e*camn[oopq5qr rjrs\st}tuOuv`wLx xnxjxxxxxxxxXxxGxZx>x www[vvwuuyutuuSuuvdvvvvuuhttasssrNqpppqqrersFstuvw.w#w0wvvvvuvVvuu~u-uuwvvvvOvuurrrrrrrrxrgrmrrsrrs]stssssqslsvsvs>s#s7st"tu/uuuv)vCvLv)uuuuvvjvvvvvvvvcvnvvvvvwwXwdwBw!w$wgwx*xyyz zyz\yy xIwsvv7uu&ttDttHtuu3uYuuv2vw/wwwxx)xUxoxwxixexUx9xxwwwxxExxxyyxxxAx"x wwwaw.w ssssssssssstt-tttwtttpt)ssssss_sCsTst(tu9uuv+vvwvvvvvvvvvEvuu^u u u1uIutuuv+vvwvvvwewx2xy.yz3zzyz y"xJwwvv3uu.ttttgtuHuvvv=vuvw/wwwwwxxcxxxxxxxxxxxyy2yxxy,y9yxxbxAxt4tyttuTuvvJv{vpv5vv-vvwwwavv9uuVuKuxu|usuouau5u2uuutt'rqon'kiDfdc]aaa\b)bdwfphkm oXqdstvvavvv\vv uuuuu-tsrbol1gc`p]ZcWV7U(V#WZ"\Z_ae hkemoJq,rgsvssssrzrqq]q[qr.rsot?tu}uuntsrqqOpppoop=p8pp8ss*sEstOtuuvuuu~ujuQuttHsrrnrLrOrrrss!sFst9ttt$sr5pomHjge'ba_)^|^_ _acfiml nqcsu(v|vw_w?w"vvvuvsrr qqfq/pp p-pwpDoorrrtrrss:ssssrrrrQr qpp_oppp{pq1q\qrrs`stsrqpVnZlZif]c`<^&[ZZe[o\A^m`dYgijmpstv;wwwwwww+vv ubtRs\qolbhc_[kW%SPNNMNPSVqY]CaehSjlnopq0qhq ppooonoopSpqrst:tjtnsssr}r'rqq8ppppoorrr+rrqqrr-qq pppp^pBooHnnznno[opappqir#rs]ss1rq6p n#li&ebZ_2\ZFY*XxYdZ\<^bOehloaqs5uvYwDwwwwwTvuusrpnjkgcZ_i[sW'SP)NMNPSVmY]Ca dgj~l mop'ppppp1oooop p|qqrst-tftxt4tss|sRsasGrr2rHrXqq(psErr$qqjppppp5oyonnnnn_mmHmmvmnfooopIpqrrs^rr:pon lieb)^\4YX>WPWXZZP\`Mcg"jmp!qsu.vTvwwwvv=uKtYrqo|mJj/fc_[W~SPOeNbOQSTXVZ%]ae:hjbkmrnop@ppppopSpPpTp}ppqvrCsstkttttttttttFssssjrqssPrqqCpppponnrnOn#nmmm6lllm\n novop#pqrTrs5rr ponqljg&c`^[uZ+YYjYlZ\`0c9filopr{su!uvvviuutZsr/pnlj g6c`]YVSRQRT}WDY\` cfiAkVlmnop,ppppppppqqbqr{s9stitttu uSu}uvv&uuuuuytstsrqpooqoLo5nmmmpmJm9m5llqkkl+lmAnno3opLq qr;rrqponmSk'heb`V]\[[[e\q^`cfilKnaoqs4tu*uuuxttAss qpfn`lRigXdb"_S[YVVUbVnWZj\_^behjlrmmnknoopp p$pKppppqqPqr+rsjstt:tuuvvwwywwlwwwpvuu$trqpdpooaonnoo^oyoAnn}n;nXnoop pfpqqr&rsft t'ss@rqq onRlBjh,ffetdddve)f h&julnp$qqGqqr6rqqwqGqppdpkp*on[mkj hsgeGb`_W^^;^_bceh[jlmnoroooyopq&qrBrrrr-qzppSonnmm]m`m4llllmdn,nofopMqqrsrt tuvwQxay`zIzzxx@x xx=xtxxx-wvvVuuu.ttFss5rrr6qqqqLppppqqTqDppGoo3nnImmHmm]mn3no3opqrr~rJrEq>ommjgdbX_^]^_bPdhkTnpeqqrjrmrjqqq6ppoop pqq\qrlsssssgrr qmponmmUllll;kkklWmmnLnoWp)qr rs>ttulv,w?xEy$yoywwgwmwwxQxsxxww\vuu-ttss$rr%qqq]qpppooloeonoopooHnnunmm+llm/mnn^noMppqrqr q"omWjgdVao^][\r]``cfjmopr,rxrrmrgr qqppqQqqr1rsRstXtt%srrqWpeoYnPmmlll5kklkzllmqmnanopqr:rsXttu9vMw[x2xxxv uuv>vw-wTwavvFuitt s]rrKqqpq#qpppxpAooVnnyninSnmnnnn5mmm]mllalilmPmnn>no"opppqpeoUmjgdha^][t[\_bCehknjoqNqrYrdrrrArrrsrrss0st8ttuttsOrr,qIpCoInnmmm>ll\lblmn3noop`q7qrerssstuvwAwywttVttuvv6vSuuKtqssr`qqHpppgpjp}pgp$oonn#mmmIm@mUmXmllll\l'kkklxmmmnnMnoooooo8n.ligdaN^][|[\_*adgjmonpqPrr^rrrs6stZttttuumuuu~tt`ssnrr q povnnnrnmkmm&mndooppqKrrrrss:sTstuvMv|vrrrshstttttrzrMr qpoo(nnnndnUnGnSnhnnnnnoJp+pqrs"ssmslsrqqpnmkjhg3edrczcce\fhjxlNn oqRrvsgt tuvwDwwww$vviuuuu0ttjtssssssErrrrr5qppMp+ppqBqrSrs$susqsPrrr?qqr'rcrnqqOlmnoVpppqvqqqqqqq}qpqqr rssFsrr$q[poooAo:ooo1ogooopLp[pq qrstuuuuQu?ttsr)ponElkjji)hghhMi-j#kglzmo pqs stu}v;wwwwwmvvXuuQtttisssst t sssstt ssrYqqqqrrars3sksssUrrxrqqqqq1pohj|klmnoOopvppq.qgqqqqrrs sqss{s$rsqqp|pooooop%pFp|pqXqr rs?ttuuv uuzttrqponmblkkk#jjjk%klsmUnnoq:r]sSt>tuv%vw w"vvVuutt2sss{s#s s:sssst t>ttuttLssSs srs s;ssssssarr?qqXpponljdghjkmmno}ppqqrrQrmrrs4stt^t ssrrqpqpppOpUppqq\qrKrst tueuvvvv uwtsrqppo0nImlll*lllRlm^n"oopwqcr`sMttuzuv)vvvvuutt ss?rrrjrBrjrssLsst4tu uuuuju ttntPt4t?tPtvtttt)srr>qpp-oamkhfB^a%cf+hiklRmMn@oopqSqqr rKrsCssssTrrYrqq&pppGp@pbppqHqrrstTtuEu_uufutrqvpUornmllVkkYjj}j iij5jklwmnsokpkqjrmsStAtuDusuvuu tNsrrpqqq#ppqIqrrQrssttumuuuufuCu(u&u-uBuQu_uuvu$tVsrvq\pomkiZfb^W:[^Badfh;ikAlmnopqqqrrgrsksssrrDrqqq*pppyppq&qqrcsstu utu;utXsrpDn^lkjVihh|hchiiOieihikijjk~lOm nop7qirstluu@uuu(t2sfrqq/pp(ooop pipqXqr2rs_ttuLuu|uuuvvAvmvvvvutsrApnm2jhcd`[W%N1RVTZ(]D`Qbdf1gijbklmn2nLnoopZpppnoooooso#nnnrnjnnoiop)pq9qrarr@qpvoljhecb=a9`__`ab}c cVWX|YYoYZZYZ[/\]L_fff~fDf/fvfff-f fff/f1fSffgMggghgWfdb^y[2WTQO3MQKfJJJ_JJK"KuKL1LM#MNPS"UX[^bReihjlLlmmmllLkkk^jjjijjkTkklAlmoopqCqqrFrsIssls>rqpo`lj1fVb^rZV PJD>?7/49x=AEHKqMNOQ6RTUXVWXZ&[]^W^___q_M______}_}_z_Y_S_u_` `;`l`'_^][YU(QMJKGHDXBQ@??Y>? ???#?H?r?@&@ACDGJ}MQLUIYT]+acfDgiiiiiiiiiLiiiOi}iij)jk9llmnmooZoopbppppnmkjEgVc_ZUQLcF@m:,3,%*[.26:d=9?AqBCE)FGIJMKM NPJQSVT>U&UkUgU8UvUUUUUxU`U8TTTUUTUrUUTxS$R,PM]IEBX>;9?7m544X444m4;434*4[557a9J<>AEIN(RKVgY\^`b bc6ddeSeeff:fufffg7gtgh:hi[ijjjjjKjWjNihg'ec6a0]YTPK(FL@;q5r/l)J##("+/]246>7e839:<=9>@AC0EFHIIVJkJJJJK*K@K5K9KJJxJIIJJZJeJII>GFDwA>:7c4)1/3-++***b*))I((()* +-~0j36:?CGKOeRUWY[A\W]_3`uaabZbcDcjcdd_dsdadJdUdde dddccc+ba`^r\yYWTOJEE@x;550+*$ a{d!$'W)+?,6,-/K0V1q24+57V9!:>?>? ?D?Y?Z?q?P?>====>>>==;:8R52A/",F)l'@%;#"!!!!f! >r !Z"%(U+/38 <@CuFIHLQNQRTVkXAY[S\0\\]Y]^;^]]@]]]8]\}[}ZYY>XWVTRP|MKGC>:57/*% t kk6V  !D"7#g$l%&(>)+-r/0123j3333334333S22"122"211X0/.v,F)& " GP?d=<' $((+/37u:=AGDRFHK3MIOQdS/T!TTUV@VV&UTTTnTuTS4QPONMMKqIZFDBL??U?@y@A@@:??>>=<;9|8)75420.<,k*1'x$ )?9 +o}9jY | 1LLNEre9`C- {F[t{ ): 0 &l V#K%(*,/023445565544J3321/.T-+*)'>%a#[!]. r}K3mM3]/jC<Q   $ d d x k  p * q  -[6)"h? R Oa!P#%')**+1+y++~**;))4('&W$~#(! U(zb  oWqY& a\5 )8A2=]pszdavA] `t66{j  ) v !!",!!O $yi1k a-Xe2+]vMQqcD^qJ<NgyIk]VPgt/QK*1ZE{~  snm<gmi ` 7 ?u%S \:FA`8F.b@4:7+Txoa My 0R^^mzmS7TtT  T dL|! 8 v 3 c DN>K;] J0*{]=RXE<*-'1y'!R.?Icsrema?X F:JvO PC]' OH4,p]Fv,'n(Uk"[w ?Ra,=b?1=ASneUAz:3O#[;g\C)}} }_&l4.{fjA2u :o \"uZU[NB?FLWhqmbc`QBBA*"FkNjj*XSiUPv@[I3Wq"bB|d, ;oi* Ovo9R?0zmM6,249>CGO[glt >WpY5<}$ ~BZ>b#zcoIq#tya.gJJ 1$N?tA'x"@6bIA3-%+6K\o~9NP+ x!urCj[ 6HD}|Z-*[0~?%,pyWFwlJZY?;B$el_T[fz #A >9ed4LGPd"o"+E0c()Dw_C =iW dOT/6%f116du<:H^F0rMu!*X,Sv9L y) .tCwiKzK)yrl0;WQ'M*3Lle-.Y Pu3HJ4%>C54G(&o,B3HFmF'[.X?r Q *8!r oR98>SaxgF0 ?c6((|v6}'Z7 `O 7rUZ4FM&Nh*KnV<2$pzwmo{xVC=KTj$.7E]N 92lS;GF s#`F7my _O;UBtovzvqhkvS T.UtRG#np.G JM>~wkFwd]c|Y%[xllswqzo7(nWXiBW  +0/D&]-__z;-'7Z[Mk9#Qxh\YRTZfm{yMFEAP?ey**oyEG/) 9G""yM mDquS$6qmL/5Jwj\NPXod6 >sh:{>}B 6~w3+1CF Fxt? .z:-cV6D [eSHRa{|kN@5Hi\5*r;.:lrN1!$F0 HspG .h] k"!q++Ab}s[LP\p{^K<KhgJ9JDlg\n6 $)  8@*-ew^4 Ho|X *t&&E+#<Og}pf\amdNCMVncH4:>i<dnPogK$). 6=" D\^R=58:JoqI#aYa@=8DNdxytTJVv_PPJMNe=~[ /\pW, $%#  .G2+Nd]C559Kfv{fA,1_QwvR88;Pi|nrnTKQKUk2#xm(Sg]I1(& ! 99';YXE;<FTTUcmr`2Dm'T`QIS\kvzujfipltm&5`,5SeT:?F9# - &@B% DZYF21@MY^aqpO55Zy:Pt[WZkt}rma^asi*E_7*4O[XL?B?" (2# :R:.PbT7&,G`\R_nulTIVzV''Fqp~}|zvjekj4 ?qV33KWYODIMD. 'F6    (PR9"5TeZ;&4S_begpobRCQ`=.Iu}zb.";pZB@KZXNLMRL5"?F 0>VT='%<cu[70D\opfceppTCRy{M9DsU1&FtmK=Lej]KBN[U@'0EG0#% +',@NQE0,JijVE@J`szuo|s`Zi\GWs[=C]}aQR`lcRMOXWD.%-@H7 #  )0+%)9U_H/3Lck`L@Kjzyphsq^YrrNFSxwfemvseSJS^[J4(1?C7 ,$ -32.3JZSA:ARcjaMEXt}|qm}~hgy|f\hz|gdmrrkaZX\[M>7:CF=-"'  ' 2>=7<FRUMC@Jam_LKYiu{xpn~yrvwnypt{kdhptnc`bfe[L>;EOL>0&'(  &%'3=AACNVQF<?TeaSLQ]ovz}|}wuspoy}|skilmh\K?;ALOB/$#)+  %%$ #4DFCHMNJA>FRZ[XWZh}zw~z}yv}shgqy|mltxqaM><BKMC3&#'*(  !$ *7;>GNNHCCCJV_b`\_jy}|{}zysnpy}ypmv|veVKCDKNH<3.++*% "&%&).7FNMFGIFHQ\ceb_\ct~xw|uqu{|tu}}~ob`epzyiVPRONPND;;<81,% 5N\O08T]N9'+C]qn`H1*)@gcF43DO]mx|wung\MDCJLTaqwj[I?=IUbip~~xrjfehmmeYURLF=<EOROPLA73;MUJ4'! +PeX4"Edj]=#DdrpU6!.No~[0!5Sgp||vnpqj[I?=FLXix{wsqmg^RLMUW[`l~zgUI@ES^[QNLLIA<=DJPZ[VF4,5DI@1 >^{o><cvrR06]ygI1(9Rk|t]>%%4Smzvm^J@EPPNPWahjed^WOHHKVes|}|x}yjWJJQbt|hO<7<;=CJOMF=33<KVXWK9,+7GLA) /fV"8tX+9etH(*Bk~T$EhydN;*)2BGLZhtso_O>-&"-:Ph|`F8.9Kf~oN7.'-6AJLOI:17DHINMG<.,9FF5a|I7tN&)Oq{^8'3Y~yR.;feSE:617DZsodVD5*'"&*6DVfq}}{~{mYB4-47E^r{qbK3%(3Faj^F<;6<N\`O1(;A7 CL(nL 0\~qJ(1`GH{e,*6KhpQ15NezraTJMUfx}nV>*#Ffv|iO3 5Ukm[OC55DVaW?" "7?1)pO-sE/a~ycC,6XpH).Nxj: Jht}uo^M8  ,E]oyyrh]N>3+/4CQaoynP5!"(>XjseU: +H`tkN,#9Sf[8 ++ UnJ.xK 3b|sM)/_g5(:maTnG?jmWIEA=5-)+,//7@X{|R+ >^koU-Cnwe97eu]($% d: oE 0dt`?$4VtqG*3]b09gG3H_n{{ynaWRRPPUY]XL<2/,,)*+:Sti8 >bwdABmvh= 8PJ4) 7 d>1apV' 2WpfCX:Ch%JzQ. $<Vmxr^QIDA=6*%$2B_I1vQH~t0KX8/PA&_d? 1PZR96b`#3ux2 TW- %@Xkx|qaQ=$0V~Cdh';nzO6E3$6P!Vh;,PU<GMEQc"c/ALUXY_p|l_L4 &Y|rX_%0i(A/  qLCT8(HH- @du\, Ttu?{r9 B_p}~ym[KA?>0(->M[lrnb_R<<0bd" UuZ'9-SzL4P.&DC$3\\44qZkW6?9rkS@0! ,So~kK7m/?k/:nj,6) 0hT @XD$7/1PM( Csi,5qNjvVD9+ 'Z{4ptQizS#`h6&!LJHhR8$$DB WqagRIgC*<LWUP>)"gSp-j%[[+<Fm\d(" B ?ZL! "!GjKX`kYXIhwGyT/#&Bq%>TQG)i57Q3Tm;_ 8iM_N0D# 2aL  D\84ZrL]H3dmB,`%#|7z4QJdfU5CA9rL$4 ~ Sj@ 9A } /,?C3_m.+OspO>;;8"$Egw|]8}7nvQki}A7H2+y:( nf`.  O]"= ~ FVunq R   J G ?  U  b  4 L 3  u ,E!jIsHp Qa`F @aBmdzxR-2fE'U|<d.3 l   k cW6@8L:.ez9@M! #  D-9XP9tSQ 0jb 7$7$~  :  g_,n<7g=}L'SsMPRKK\V- >E81$tcZD-!NowB  [:u L!d"#N$$Z$$$$$$$~$q$o$t$[$e$$%&6&&&''\'''Z&&2%%!$$d$##5"y!  HZ% Z {1g9jr@d tWSMhDLX4 ^ "g:X>!#%')#*A+k,o-.z/N/0j0131d11q1k1g1p1z1a1m1223*3333333362v1`0a/..(--X,,h, +{*)'L$"NmI{  YB&c}0 i Nk%86 <  Y  v^yj "x$%')**,/1324m568"9:<<=>>>>>I===p=E<<==>>? ?;?f?|????a>=k43]1/w,*/'%0" z7] !Z  -w|z- , o a dS_><0;^#!g$'v)+-l/H1F35468:<>@AiBDwF\=%;863k0-+9('%'#C!2^n9 N &x3/ZqK ^ber:6k-s s!#R%(+/14&68::a<>@BJD&F&HBJCLMOkQRTuUV9VVVV&UTSRRQQPPQ#QRlRSLSST>TU!UTT%SRQQPO(NM8LLKwJ]IFDA>;853N1^/-,)( &7$" "<"  i_x *i*&# o$!k"$%%&'()*+-&.1437$9<{>@C1EuGIKMNPRTVXHY[A\]^^_^^]]1\:[9ZdYYaXXXYYZ[[v[\\\]!]\\N[[[Z[ZlYXXWMVUT)QOLJGDD4A8>Ndeeeee)dddhdQdOdcbbJaa`^\ZXUSP!MJGED?@BAABDFHJM.OR"THV8XOZU\k^'_`bdSf)glhQhhiAij2jzjjjjj iUhfgtffVfH;852/,)&# f8 6,JLFuC/?>Q=!=?=-==>w?AkBD)E*FPGIJKLMOeQjS%TVX[']6^`zbceNfgijkmUmnUn%n nnHnnnnnnn m{lkk=jjjjjk\l lmXmlmfmGmImqmmmmmmmnnannnnnynn3mlBji/gfdHb_]k[aYXWDUSQNNKIqGDaAb>:741V-*U&"anS!OLJHGHGHEHsIYJLwMOPSQSU0VFWXYZZ\k]_`bNdevfghijklmnop@papKooofoop p poooXnnmMll\lAlkklPlmLmmmmpmMmYmmn+nuno!opppq8qFq]qrqqq`pZo:mlkjdhge-c~b#`_^\ZX^US7Q NL;I2FB?;630.j+fCdccWc[cscccdefh i j+k{ln/o[pqrSrrrrrrrrrXrrr-rs^ssssJrrrq{ppooooooooovonbmm4lll&kkpk`kykkkkkkklMmNnFompqrt"uvw?wjwwwwwwwvw,vutssr&qNpzonmm*lkk(j=iHhzggRf=db$_\jYVmRN&IFB>;9;6hggggh(hzhhikjak klmnoprsOt1tttttt[t)ssxsrrrsJstss>rrwrqqp[oo{oooooooo=nnwn mmmmZlll\l\lzl}ljlOl2kll~mnnUovpqrtufvMvww6w,w7w.wvvvvRutsrqqp-o;n]mmll7kkkDk kjih.f#c~aa^[_WySPLIzFD)Awjjjkellllm3mnoop3pqrstvvw`wEwEwvvvYuuBtt;t%t\ttttAszrrrqqWppouo8o3o^oRoJo[o{oooooooooCnn\n8n7nNnHn(nmmm{mn(nogp(q$r)sPtuv2vLvpvuvvvvvvvv?utsrqqp)oIngmmSm:m-mZmxmmnnm7kih(fc`]]9Z VT8QOkLkllm(mn_nnooup pypqlr rs[tuvwwwxwwwwuw vv*uuv v vuttsrrrMqq pooooooppZpqq_qqqqqq;pp;pp p"pp ooooEo"o-o'oYop!pqrstqpppipipZpXpapUp,oooojoGo(oAoNopqtr&rrsstst9ttuOuuuuztsrqpp#oFnmmmn(nojop#pq pp oWnXmjljhfeGcb`nnowp'pqq7qCqkqrVrs\sttuvxxxxxyyyxxxxxxxxxBwwkvuu(tt&ssQrrrvrrs8sttbttttJt*tssrrq\pppzp`pnppppcpFpooo]o%nno?opq"qqrKrs4stHtuLuuuut!sr&qjpp%onnnooppq-qr#rCqqRppoDnLmkjihgoppqoqrArMrNrmrs?st2tWtu>v@wzx]xxxxxxxxxexbxxxxxxxVwwvFuu2ttt:sst tctuNuvvTvhv:vuuu~uItts=rrqqqmquqqq{q8pppkpooxonno1op pq qrrs>stu1uuuutsrr9qq:ppOp%ppqLrrrs3stt ss&rrrqEpooCnmpqCqrlrssss'sistJtttufvawcxxCxxxwwww~wVwawwwwxx ww{vv0uuwu3u tttuPuvcvwwOw_wRw!wvvvvmuuQttssjsMs1s2sAs6srrXqqq?pppBoooopIpqKqrwrst/tuuvttttuv{wTwwwwwwwFwvvvvw'w?wIw}wwhvvvuuuSu9u#uauvMvwwwxxxwwwwwtwTwvuunuttttttttt6ss6rr_qqxqpppq qTqrPrskstu$uvDvvvvCuuIttlt/tsssttu@uuuuvw vvsv7uuututttvPvLv[vvvvvvvvvvvww7wgwwwwwywlwgwkwawiwwwxwwwwwwx#xPxxxx.wvuu$tyss>rrrrsTsst;ttuduv@vwwNwnwwwwwJwvwww w5w`wwxFxxMxx}xyxxx7xwwwwVw vuuuvvlvvvvw wWw{w{wUw[wx1x,wwwww{w]wvvKvvvuuuvvYvvww4wIw`wwwwwwwtwUwvvvvvvw wMwwxxxx7xvxxyyByy{ykxxwv'uStssJrrrs=stDttuCuuvOvvw,wbwwwwwwwwwxx3xpxxxyKyyHxxy-yKy+xx|xVxJx(xwwwvcvRvwvww[wwwx>xxxxxxxxxwwwew.wvv?uuulu5utuu/uvvwwswx0xxxxOxwwJvvvrvTv_v[v|vwwWwwwwwxx`xxyyWyyyy1xswdvsuttsDrrrs^ttu uzuv vPvww/w;wUwfwcwywx x x x9xxyvvvvwvvvvvvyvw0w}wx2xyKyzzzzzzzDy8wvvmvTuutuu#u|uvfvu;u$uUuvywYx*xyyz9zuzz{zz_yy xxww_w v}utt1srrur#r)r'rrrsUstItu(uttttRtBtEtsttuAuvMvwx=xyAyyyyyyyyyyyXxx&wFvAu&t#s\rr-qrrrs'ttu\v v|vvvvvvvvvLv6vUvwwuwx6xyhzzLzuzKzLyy`x9vu@tt{ss1rs s4st0tu$ttuuv|wxxiyyzdz{I{w{|-|{bzzAyy,xxx*wvuttsPrrUr4rr>rrrs sNssss:ssrs sMsttu4uvwAxxyz+zzzzzzzzzyz-yxwvu^trqppop8pjqqrstxu\uvvvvvwv}vvvjv6vv vHvww:wxxy8y{yyyxxww9ufsrrqqlq q7qzrrsSsttu-uvwxyz?z{v{||||{{izzIyyyay xewvuutEss&rrrrrrrrrlrqqqxq_qqrs*stuvwJx+yz z{zzz{{zzzzppSoooppqJqrtuJv8wx/y4z1z{zzzzzzzztyyKwvtrp[n^lkj+iviijkmInp(qrt/tuXuyuvGvfv4vuuEtuu2u uumuvQvww@wJvv9ts1qp~po}onnnop8pqOu@uJuvrwxyzqz{[{|{{{{{\zz!yyxxx|xOwwvv-uu tssTrr}r6qqq0poo4nmmmmnEooqHrt%u^v|wxyzMzzzzozlzWz4yyyx?vu)rpnkigfeefg0hLjkmomqrstntuQuuuuJtt/ssssssttuYuv=vhuustArqpoo#nn9nnRooop_uYu^uvfwuxdy*yzMznzHz]zOz0yy@xwwUvvvuv}vrvCvuu,tttsssfrr~r qpp3oTnDm l-kOkjk1klmo\q#rtvwxyz4zzzvz6zyyy[yxtssrqppdpGooBoNoooov uzuttttuttAss9rrqqnpp&ooyoop!pqRqqr:rsttTt%ssDrqpo?mkigf?ede.eHfPgiknoprhtu^vxxxy[y{yyxjwbvuGsqovltisfXc;`]\OZZ[-\^aQdfiknCoppqpqqqOpppoopopqrrsdt6u uuuujttsjrr]rRrSqqyqqqqqvuu-ttdtsssTrqqfqpp oon]mmnn2nolp0ppqrsttttPssQrqonLl5jhfcevddrd:ef hj;lnprsuvwwxyyxZwvutZrpnkif%c@`^=\[6[7[a]^a[dfihkmo%p pjpq7q\q3q pppypqqrFrsQt tuv&vvgv.uuRttrt5tOtotsst"t ssw)vTuxttstrrrNqppNponnn%msllmm>mno_opOq0r@swvut~surhqqpoonnKmmmDllFkk{kklGmmnoAp,q5r0rst5t#sss[sr!q:oml8jihh-gdggghj6kmhnp!qlrtu uv7v[vIuu`tt!sqpo|op{qqr(rsstStuuu!uOuvVvwqqqqqrNr_rqqqgponlkMih,feVdQcccyd efhi|jklmnnnmmmmmmnOnop~qqdqrrxrs,s/ss st,uuvwy yz{f||||wvu|t]sUrKqqppUpooppApUp,ooo&oooiopepq9qrsut4tuGuzuFuttsss+r3q4pGonn&mmllmDmnoocoooowo&nnno_ooo_oooouo nlkNjigffTf4ef!fhi*j.kklm.mmm}mamXmgmnmmnWo opqqmqqr(rrrrrsstuv|wxyz{|w}4}r}wvuutBslrrwrKrqqqrrJrwrirBqqqTq@qsqqrrIrs st5ttuttt?ss}rrqdpp\poo8nnnnno2olotoon8ml kjjk(kkl'lmnooo~nmlkjjJii[hhiEjjk`klOlmPmmsmnmemdmymmmnUnopSppqq3qqrKrHr5rBrsstlu(v w'xXydzT{_|1}}E}]xwqvvu|ttst&t ssssst1tctbtNsss2rrsssrrs sttgt}tt;sssKrrMqqDq ppppppppmpXpBpAoondlji>hff}fgYghj%lmopppooann7mmllkkl1lslllm?m|mmgm`mbmcmom}mmmn8noYooop psq qqqqrOs stuvwxy{||}-}?xYwww-vvkv&uuuufu(u u u'u;u.utt_sss}s`sFsrrrrs;ssss3rrr1qqDppypvppq0qpqqqqqqZqDpomkimge0c(bYb cceDgHilnpqqqXqpp/oonn*mmmmmmmmnnmmmmmmgmIm lm)mmn(n/n?nwoopbpppqrKs:stuvxyzO{B|)|\|Uxx{xKxwwwwwZwvvBuuuuuu|u8tt|t&sss_s rrqrrkrrrrOrqqLppjpoop4pq3qrrkrrrrrUqQpmk5hBeFb_^]__bdgk*npqrr9rqq#pp>oo`o nnnnnnnnnnXn(mmmZmllTll lDlrll~llm]n*no#oHopKqrrstuvxy^zb{J{j{QxdxAx8x7xDxVxJx5wwrvv/uuq qr3stuvv^vov+v1vuubutss`s rrrr,qqKqpppp7oo8o*oopq0pppq>rrHr po;mnmoopCppq q4qXqBqpppPppp6pqJqrqq]ponmmommmmBmmnZnoeop pApqgr0rssssssPrqq:pXo]n'lkj5hgff1f@fOghiojl[mojpqrss:t-u8vew0www~wvv.uu/tt`ssssssssssttss,rr8qqqqqqqq]qs"s@ssssstDttuttt5ss}s2rrrrrer qqkqpp&oo{o`onm]jhe*ghjNklm.mnoQopippq(qpq+qr-rrrAqppQonnWmmmmnZnop0pqrysstBtu3uu|utQsrr(qupooGnnmYlkkjjjkCklm^n+o-pXq}ros2ttu~v.wwww+vvujttSss?rrrrs,sUsst?tu4uvvuuuDtt|t>tsss~s rr qppoXnnKmlTjBfcQ]`befhijkmnnopCppppq:qrr#qq,pnoosnnAmmmmmn{oopqQrrsstQt>t{=c<<====>>V>?E?@=@ACxFHLOYRVZ!]`cegyh:hii^irii`hh6hhhhhhShiHjGklmjn:noyppqq po2ml4j#hVe^a],XTFPK3E?9P2, "'8+T/.268;z=|?AaC-DFFGH:HI?IJKLMN7NOPQRiR>QPDO=NwMMM9LLL?LBKKpIH+E|B?<:-75321242~23&3#33 3$3{34\46!7:?<@ CDFJNRxUYH[^ _`abcd5d4dcccccbcTccdVe%f$gghDhiiRiiihAfdc%`^[W{RsMIMD?:4.(u"N $v'+-0r2e4D578:F;;'?(@CAjBmCPD(EF>G5H3HGaEDCBBAAV@@H@E??x=;9:6{31.,+9)((O(w(((((H( '((((*D+.1>48;?CGK'NQXSVX#Y[\]^p^^_$_+_"__ _%_%_w``asaaaaabaa_][YtVTQtMGC0>94/h)#N&L #M%')-*j+-O./X0 01123457789:;<<;:l9766B55h44,433p10-Y*(%$"2 Z!gk% !r$&)-0487;?BjE5GJWLO8QfRTUVVWlWWWWWWWX XXXXdWWxWVV#UASQO1M/JHEXA<73c.)% Z z 8!p"#$*$%]&7' ()X*+,-./0|1l1^0/Y.",+**)((''v'%$!b Q8|hY)t!|$(+/H26F9Z@AhBCCDSDDDzDCCDD.DC|BA@@ ?>=H;N9653#0-|)%"56v  \dEB% l ) dL$. U z, \B"=SF*%#`x 5 e"Q%(+.1)3/57678g9R9:999r9E9092988N7g635,4:32u0.,*('$!S"3p &Z)]$\  y0   7 ]  z'd;7Ksd~  M!3#&[(T*@+,-.//H/ .....t.9.-R,M+))(5'%d#b!:F3 2 `dV<k ; !e4Xrsb[S.Xa|/"v|  Q_ ]!"$$w$${$~$c$-####M"H! 5j_hd V :?WJ5$eSzc@A\JB!m]h@!P}qMy1}FK ?V 4 / w,~tk>!(oyHZ E zB8@^NeJ v\>[kxjRo2\>%8C) Dz#$ k  9M`  7n,R)FT<F/hiQlatgqN:oCW\gntz^0tuwQ X  h  : s ) Y a x RB:~G:7$M ^B4hMk'^hv+Vf@ .e*%X})@K`klbi[;PaMFwDYue #3Tl;pd-gklT??/5t?p[![\uKl4%rJ3;F^qjN8! c?|k=$V%RY%|9{-.u?g;8yYXA+ :fF"g,E2w_SRHDFPWapxxpphVD>>34?_8|m6y(D[@tCw!V5l_"LTsa<mO0[bm7#n}+CR:)lZ=/,7<AGMRYbiim{DYeL=4CU^4_kUdLenm:a=CN:B3yY@7/~ZGC6.',6J\ny;QT,A(ujwJ1ETWzz_5 Z}F7W/'%mc#Qq])^QAH&F=qhXLR[o(A 40\d '_S Be4n !;5v55TcQLrM wY$a&*e :@>i|BABXR!< lUw#-U(X:R$)2sCg[a^9n`-<ag'd@"#&;Oh~g41eIj.QPA->C  76L) h,;@NKqFO6fMmC %70wuR:;=NYohH3<]2," {1!*[6 !`O 4i(d&d3>J/ Ys/5vgW/z5(s tofjvvVG?LWox20PiB>0 rZ= PM)qWLDw$R7;` MvlgqzuiahsT U6Hj^O#ln3J HJA{meN* kMM!^5lvohlt}vv|C #g\N]Oe*}w*.G$ ,`0]TxC<&#K_Ql>#0Zvh\WRTYem{zS&AzJJN9p(+p{GG4!EP)"pxDnKad K 6urT79KvgVHKQfd7!9jo?z>E9}z; /4 %GG ?mj5/|B4TP2 >'cmWLWcz{v{pQ>3Ff_%0-x=+9hmL 1"#A. @ie>1ha o&n-5GcyzbPQZku}zaN;FcbI<EQdm Sye. " 8?)%]lT4 &KwY$.o}*H2*@Ofpd[_fv~dODLQgzZC28<cDZr# Fd^D! %+   9=?STRG<<DYytNVN}cEB<GSjwvuVKUqbLGAHI_=w\*SgN&&(% $.E* *FWYJ:6?Wmw|jA(.ZU tyU<=C[q{}}xkosZKKGTh2$ti+ !ObYE-((!"816MRH<:J[XTerr\3$?tr-VbVTbju|vomkmjup'>^+!;WcS;>C9% +  ,<6;V\I37JRXafnfK6/Lx=Ryedfrxsohgdnr, Mc9+9V_VJ=@=$%1&   9G4*QiY:0;ObaY[ajfK<Kt[,*M{x|yxpmjzq97n]95L\`RAEIA-)E9 " )HM<#;^k^G7@Wglg`jn^L@Rd?4S~~}j6&8j`GCKZ\VPKPL4$>C#/8RV?(,HjxeG=Kf{uechpnXKVx}RBMy]8,HrzWCNeg\OIRZUC(/ED,#&  -+"'=OPD79ToteRJUkvxspzte]heQ]w\@E^kZWblaQPTZUB/$+AL: '.5* %8Q[K9=SlvjUJSjvzyngt{d]vrLBPuuhjrxugSJUa[F0&-<E>(#2*!12-+2FURF?FWhofUMZpxy{|~rn}lk~~eXdyyefrwtmbYW^_O=6:BE?1!#)   *!09959BOUNFDNcodSOYfsxupq{qtzupplbgs|ug``dd^RA:EPM>0%""  ('"-7>?AMVTLDFXhdWNOXix{u{|~~yqlt|}zsmllh^PD;=HM@,"!%'   %%"-@ECIPTSMJNW\\WTT`sxw~zv|uliou{}~}tswzrcPB?AEF>.! &*(  "17<GOQOMLLPYab_Z[cq}|~zxuqqx~}zsqy}vfXNGGJKE:1+***%   #)4BLMHKOLMU^eeb^Y_q|srytqw{uu{|ob`fq|yiVORQQQND<;<80*#!<S\K/ 6OUG:-!';UgeX@*%*GsnN95BJVfqtpqmg\OE@DJVbpvj]K@<FQ_kt}wpjfegkkf^\ZTLA>HQLCFG<1+2BLK<,"#$!  %3Xl\6%D_dU8"(A_mlR3.Szl=%+:R`fopibfhbTF>9@JZiu~uuvrkhbUKJPPU`q{gVKCHS^^VSQNI?9;A>?JRM=*"):GE5!  CcsABfunO- =_su]?(,FczxgI.*9XlsujcWE<BMMLQX^aedaYSNEDKZfoz~}vxsaOGMTexzhP>7;<AIPVRI=435=JPOB0%"/EOC(  4iY$=y}V+?jg:.UxwR(BhylZH:,,5EJP_lrmj]K9*&"-=TguuXB:09Mi~jK4,'1<ITVWN?44;ADGD?6(&8GF2  %iQ!=zM#&Mu|W.(Nq{oM/&+JqlS=0/*2?TlyzmeVA0()%&+8DSfryxyyvw~tl^G5/67CYluk_K6)"+8Lel_E40-6EPTE),;>7#LV 3tN)SxwM%)XzD)^u:#-@[ukO/%:Qfy~k\QEEL]o}vY@,!A^nylV:$ 5VkjTA2(-:HQI4%6?5 -tS 4vG+ZwvgJ//Kqc;&OxB E`lqidVE1 *F`qxwsiZH:2**-:GZoqQ3 5Rkyn^? .I\h\C(+E\W< 04!UmI0yI 2^voM/'0TS ![k"TdA?fkXNI@92.*)&'%/>\yN'=bu{`7Cej\7*[q`/.1 f<(wE 0anX8 :Xmva7#LvnB$Arr85NbjtttmaVQRRTZ]]TJ=3,&% $+@Zxg2HlnI3bqb21PO9 1 <qF4amN3\sb:NC Xc@ynH* (A[r||p^OE>;63..-8IeB9W:veM\: . WE'`e>/TaT0 %T{wNF?NW('B[o{wl\K9(  5XI%ua6bj@8F5 ! :PUi=)R^D,it2KYY!j$ #2BKV[]anz~whXG9,)].}b v)w_(D6 ~W FW;?H3/PdP]b rq5AatzpaQC;6,(*7FVdkron]G%2z$|WIE`yFh}^9<Vr7vFj55B.'Mxc*  :R'wpju jZK\w'Vj1utw p7&Cc 8 ^>:Y=&< r euK  VZ]`F O-Ea"l ,6>5* -AX^[<UvN+6O|G8&k_m(+V!% *o*r`.+;zYFMX.JNgL  K r W J  c 1    0 E e  9 ? E # ^O Z 63z!n`eZ'-lp%r[pyXGSvAM/z>sY 2  =<F?$cX "f5iXW y @ m )loPLy5]SP*:y6, OVaw+pb4dQ :fyp4 EfcG<GOJ=~1_%%> ?  .KAn\GP;UB'y Cx~@>=N 2 O d/(  !j!"!!!!!p!I!0! !2!E!w!!"E""""""""@!!g!  i 7 bF$9AN w $"m7B-kuBb % &m~2L)j { i - x_"Y!#%'6(3)R*7++,-@--.....--..%.]../D/w////`/0..I-,,2++,***O*,*0))k(Z'J%$+"? EGR2}Q =2|D/s~,@ 5W\I0 B NFc6 # %X'*r,/302j3m45679.: ::;;:::K:9999::r:;;I;P;f;O;5::j9887W655P44=433;2T1{00.-+(&$#! Q|~R: mL<U(ieoH E %  E?%*HXG "r#%"&(W*z,.1L36G8:<> ??@BCqDF0GGGGG>="<_;X:N874206.H,+)!&$o"% PrAxNf -PnE]+.&5_,sUxG9!D"j#%!')A+K,./k1)3+57:_^@CIEHJrLOQwSgUVjWY,Zf[9\ \Z\V[[&ZVYXWVVAUUUUVhWWXX)XPXVXnXaX?WWW}WwWWWWWNWVUTSRQhOMKIMGEC @><:8642@/-&*z'$f!R#nSu t3A.+O'%$($#$%&D')+o,-./0246(7>8:7<->A@2ABCEXGkILVNQSYUXAZ],^`Va!b%bcdd|ddeccHbza`_^^,]]]]^_S```aaa-a```e`3``C`t```a``9_P^]\[ YcWMU8SQNLJGEDCB@l=:742 .+(%x"=3 w "I=952o0/ /+//041Y246889:W@6ABDPF/H IKLNO'PoR@5ACMDTE`FHJbL%MO PRTzVWYZ;[6\E]_:a bdjfgjkmhn nTnmmmmn nnmmkll k3j]iihhhhijk~lSlmlllllml'kkkl.lm)mn n@nfnEnBmm>lji^hfeWca_y]+[WZ#Y WUNR^NKHEC?<5863g0-*'$ A6}QM*IGEDoDDxE ErFHJLMOAPR2SUW1XZI[]{^_abcde7fghGixjlm\noppppoooooop oonnLmll*kkJjjk&klmnlno-oo nnnnnno op!pq4qqr!r:ryrGqpon`mKlOkdj1hge2cba`^\LYURP@MJGDA? <96{3"/a+'# YVtSQTP0OZOO[OPeQSUWXZ\1]_R`b]ce8fwgkhFijBkCklelmJmnohpgqer(rssJrrqq0ppppq q6q(q ppoLn{mmllll%lmnoppwp~pppppq q(qr5sstu=uuv vivsv_uts:r.qZponml_k9jwihg7e9bo_\ZoXOV ShP}MKHEBn>:62.+(v%"_][YY)XXXXYZ\^U_a.bdneghikVl3lm6mnnoNooop'pqqqrsUsssssrqppvpp*p=pyppppmpoDnumlllkkklElmno}ooppJppq(q`qrrstuvuvww-w{www9v_u#ts:rqq3phonnm`lk(igeycXaz_^j\ZWUSXPMJEA>-:f7 31.edWc5b>aaaaab;cHd\efhLik9lKmanp_qqr?r*r@r]rrrrer.rAr~s"stutttt2srr&qWppwppppppprooWnn mmll]l>lmuvv0vuuuu-tt6sst8tuVuuu3utt0srrqippppphpppqq!q"qqqqppypop puqqqqqqhqwqqqqqrKrstu`uuvv>vqvvvvkvuurtt$srrrqppo2ntnmmmmmnnUmmKkjhfgc1`"]ZEWTROmm)mmn(nLnuuv uuuzu8ttQss rgqqKppppq.qqrWrrrss'rrzrqqrErsSsvsPrrrrrTqqhppqHqrss_ssssst6t]t_tXtHt^tLtssrr2qqrppo0nznvv^vuu~uttjt|ttu u{uv"v?vuuuuuutlssbsSs\ssssosWstsgs%rqq7pmoo(nn mmn$nooop9pqYr)sssst sssRrr|qq7pppqWr>ssst7tuIuRtt!ssriqqRppxonrrJrssHs]sDs6s0ssIst-t`tuQv&vwx x6xzxxqx7x wwwwxxxx wwwwvvJvuu{utttuCuuv vqvvvvvvvvhuuJttht\tbt{tzt]t7ttssrr?qppXooynn:mn*no8op7ppqrswtt]tWtttt6ssmrrnr rrrstbttu7uvvUvu@ttMssVs rrrqxs_sxstt:tAttssstKttu uvw*wwxxTxTx=xwwwwwwwwwwww?vvpvGv$uujtttuMuvv:vXvvvvvvwwvvvuu)u uuu tttttt7srr=qppdoo9nnZnnoTopLpqqrst:tttuu,u ttttsssst*tuv'v?v7vLvwRwvkuuu4tttttTstatct~ttuttttttuPuXuv$vwHwwxx,x(xwwwwxwwwwwowww>vv~vOvDv-uu}u,uu!ubuuuuv vDvvvvw"w.w/vvv6uuuuuuuuuuu5tksrr#qoppnooo`oop p`pq qvrrstKtttuXuuuuu^uy}xx-wwwvyv-v)vuvvuu ttuuvwxkxyzzkz{ {/{0zyy*xxewwwfwvvuut,sirrrrrstw@wxxFxoxyyzMz{@{Q{ zzz ywvvqv$uMtt)tssstt)ttWtmtuvx xy9yzszz{r{{{zz%yexxxwww vuuUtsrrhrAr rBrsCstuv1vav uu}uttuu2uvvwjx"xyxyzHzzzzzzzzzzzztuvvuuuxu8u-uCuuvwAx#xyz`{,||||||r|k|W|0{{{{Izyxwv>tsrr2rrdrsstuvpw9wwxxMxcxfx5xww\wvvvvvvw`xxxyxxiwvuvsqppooonnznnnnoosuuvvxyWzu{i{|||}}Q}'|{{zZyyByxxx wvvu tsVrrxrXrrstSuuuv uuuuuuv.vwJxxyzP{'{||}|||||f|6{{{{ zy-wvqts9qppFopIp`pqrsuv vw7wwxxCx4xwwtwvvuuuuv*vw?wwwwevlutJr~poonVmmYm$m&mqmmn/vv^vwaxy{{|j||||||E{zyxxQwwwww,vv3uptss r}rCr%r}rsstll5kkllll\w7vvw"xy yzvzzDyynyxwvutssZs\s^ssssszs4rrrrFrr'rrsVstssWrrsqq6pppqKr.stv wVxwyzSz{{Z{R{4zzzzFyyoxwv_uspmjhgf}efEftghk)moqirstuwuvFv\vCuuOtssPrrrs.s|t tuZvvBv?uzts^rpo]n|mmll{lkllllwtvvivw!wxz)z8z yyxwvuszqngkihZfd1cbcjceFfiulnnpKq}rstrtuuu tt5ssrrrrrsDsttuvsttBt5ssx vuttss,rrxqq#pppGornmm'lllmmnsofp pqrtsQsttuBuv vmvvvtsrapoiml|kAjjkjlJmopr svtuvwcxxZxxtuxvvwwew\w7ww7wpwlwx8xxxy3yyyiywDutsWrnqppWooPnnnnmmBllkk]k~klKmnnopqrsYt tlttuQuvvuttrqp-nm$kkejk>klmnp"qxrsu uvRvvvvvvXuhtHrpoljhg=eeee"e{eyffhikglmn4nannoo1oPoTo,o,o_ophqqrsQstuuuv3v8v/vFvww?wxyJyyz)zzzzdvucsrqpooHnnZn#n5nPn)mm3ll"kkkklDlmnopqrsZtt~tuuouvvuu tIsqpnm\lkzjk klum'n o p.qUrUsBst]tuQuuuutsrEpnljhgDeeeyeefcg;hijklllm1m]mmmmmmn>nopqOrrsZst`ttu uu!uhuvwvwxyz;z{#{| | {v|usrqpoo=nnnnnonntnmmum-m"mmnnozp@q qrst>tu"uluuvLv:uuJtsrq-on-ll1kmkdklUlm8mnoCop;ppqfrFs ssszsss qpnlk i)gff:f7ffgghjjkkkkkkkkl l(l2lmmnopqHrrs'sssssttutuv6w x:yaz'z{f{|||v%tsrmqpooco9o o=oppUpUp@pooovo?ooHoppq qrGsstZtubuv v2vvvhuuZtsrbqonbmzl|lkkkl lcllllmmCmnppqqrqqponlHjiQh%ggh%hhBhijQjk&kkjjjjjjjjk(klmnop`q0qr\rss;s5s8sasttuAuvxyWzBz{|x}+}l}vEu5t*s?rqq9ppppq\qr!r?rVrKrVr6qqqRqFqRqqqrrsst:tuMuuvvVvovSuuttOsYrTq6p/o8n'mWllZkkkkujjiqiIiijzklmnop&p-ppon3lkjjJj2jcj4j%jWjk$k[kqkEkjjjHj-j.jjjj_jklamNn*noptqqrrqrrrsqttuvwyyz{|w}8}}}vuutvssPrrrrrsspssttt9tssosrrrrzrirOrrsttuumuuuuuuou6ttwssPrqponn mnllGkjigfedeegh"ik_mno|pqkq;po-nDmmm llll[l,l llkkkBjjjAj,j0jiiijjykklpm/mnoappqsqqrCrst}u;v8wxxyz{|}T}}wWvv]uuuBttttntpttttttttttxtssds"rrr[rrr^rsstotttttttGtsssds4rr~qqpQonnpmlki/fdcahaabcehjlnpqqqpoo"nnnnnmmmEmllgl kkKkjjjjjVj)iij&jkkl3lmnjokp8ppqgr#rstvusvwy y{{|||xwww]w;wvvvWvuuuNuuttttttt'ssXsrr/qqqrYrsXst t%tsssts,rrrrrrrrqr#qqpionmGkheb`}^]J\^r_bpe h+k#mpq/qqoppDoo{oooonnnDmmm4lldl kkkkUjjj[iiiiijLjkKklmno*o~ppqrsHtMuvwxz5{{{{x#wwwwwwww/vv8uu/ttnt,ttttsss1rroqqzpppq>qrBrss!rrrrKr qqq{qvqqqrrqqpp{o3mk heba^\[ ZV[]J`8cf`il^np%q pp/oonno3oooSoPoCo"nnnAmmam lllHkkkNjj`iiiijjFjk!klmn6no$opqxr5s'tHuvwxyzezVz2xx x-xjxxxxUwwOvuutRssWs5ss1sZsYs!rrHqq8ppooopbpqqqqqqZq/q pppppqqUqqqqTpp}oHmjh?d`]QZXWzXZZ]`deh kmopoobnnQnkno2oooooooolo!nn$mmWlllIkkkZjjQjj(j(j?j;jxjklmhmn.nopCpqrks]tjuWvJwxbxxxww wBwwxwww3vuutHsarr,rrr=rrrr qq4poo7nnnooppeppzpqpbp\p`pcppp}ppppppppvponmrjhHd`],YXwWWY\_cdgj#lnJo_o8nnqn9npnobopQppppppbooUnnBmmfmlllBkkQk"k4k;kDkk3kwl-mmnPno,oprqqrrstCuv2vwdwvuuv vuvwvvv?utt-sOrVqqqqqnqrr.qqppo;nnmmmn4nno(o9oKoWogoooppLpppppTp oogo7nAljhd`]YXWWYE\P_b]fi_lEmooonno opSq$qrrr5r8rTr"qq peoo%nnnn.mmSllIllllkkklmznAnnoppqqmqrOrsetuuv!uu-sst)ttu1uttt+srr5q`ppSpepqqrr9qqppo#nXmmSm1m'mtmn%n{nnoo9ohoppMppqqppypoolo#n0mjheb;^\&ZYZ[^`1c)filnoeop p p.pq[rCs.ssssstsserrqrpppFpoon]mmmmm[lllmn+no*olopEppqqTqr r^rsttss,rrvrs&ssssps$rr]qqEppoop)pqrrNrqqp2o5n_mmFmlmm`mnRnooFogoopSppqQq}qq>qppponmkj$gd}a_]\]r^/`+b dgjmnopqqFqrss_tRu7uuuwu}uouMttt)srrrIr-qqppTooo\onn(mmn;nooaooppp$p>phppqqrss8rDqLpgppqbqqqqqqqaq#pp[poppnq(qrgrrjrqaponn(mmem$mOmn9noLop+pbppqQqqr)r>r;rqqq~pponmKkig$dbaaabce>gsilnotpqurrzs1t#u3vvvvvvevuu`utt#ss~sss|s=rrLqqq^qpoozoAo\otoooooooMo:oHoCoZolopppopnn\no3opVpp|ppppppppqpJpq qrss=rryqpp o'nrmmmImumnoopq,qqr?rs sSsssis0s rrr(qponm@kihff@efTfghj`lmo.pTqbrrswtdusvw\xx xwwvv/uuzutt>t:txttttQtsssrs rxqqepppp}ppxp7oonnOn6nmmnnnnJl^jujAkEl mmnKnonno^opMppppqqrss+sxss"rqqpIo^nmmmAmomno!opqrvrsRsttKt`tss4rriqqVponmlkj+i8hwhuhii~j.jlmAnopqr[sstuvwxIx=xwpvvCuu}u tt%sttyttttttu tttssArrNqqqqqqp=o[nn mm=lll>l]kjXgdeghjVkml:lmmnIo"op|q qbqqrs>st$t7ssr!q|ponnmmHmjmnxo'pq(r6s*sttuTu`uRtt9sbrqpp7oCnbmm5lhkwjlii0ibijkklumknvopqrsJttuvwxTxxex w^vv'uu(tt'ssttttu>uuuv2v.uuuPtt]ssis*rrrq(p onUmmlYkjjNhfb_/^p`bdf{ghiVj&ksUrrq:poon?mwmlllmwn3o5p2q+r"rsstssOrTq\pnmkjiihhnhgg*fffgih_iijklmo^pqrrsetSu@vw$wwwSvvBuu%tssVrrssNsstMtuufuv!vEvFvvuuRttt^t'ssrponmlkqj7hfd&`\-WVY\^`bde-fVgizkl`mnoppqrSrrrBqpponn$mlllvltlmmnopquqrrrqpomkigfdctbbzbccd"de#efghOhiQjjl(mo pLqjrstuvw4w+vvuttt"surrQrrrJrrsbst5tuuvvivvvvvnvuuuu tmsLqpoounKljhfgADGIKMOR'TxVtXKYZ[\]-]^"^R^']]]]^^V^U^]]]]]^_^^^^N]\ZXVTQNK HFEDCCIBC^CDEWFIG0H@IJK`KLWMUNPSlV_Y [^aEd*fghUiVjajkk jjjkjjjkOkl1llm#mnopSpqrw?6?@aABEmH K$MQT(WbZ]`ac;d;e*efofgbgggh h`hhi:ij jklmcmno.ooooonm@B(CDDE EFFFGG(GKGrG}GH\HISIBIHHWH"H$HEHYH,HGIFpDC@A><_97 4K2$0J/<---.-../k001,123W34579<?ADHKUNQTVXZF[]$^_`aaabLbbbcc}cde5efg"ggh=h*hg~fed[b}`^[XUQ_MFHD >82+%Bn"$')+-/W13C5"67Y8n939:):; ;X;;<<@<=6=>B>;>== <A93.%'!"7o!y#2$&#()++,-././#//0E0011~223 322d11E0000^0/).8,+H)J'!$",}99 ]PN #U%(+.147:x=?CACEH JKMpNPkQgQQRRXRRRNRR!R}RSLSSSSnSREQPNjL7J8GFC*?;}73].)$HE8W *jCy(b 0!!"U"#q#$Y$%%y%&1&'\''''<&&4%%7$$$#0" | 25sB*UUv& 2 "%H(+ -0358!:<>@BD}FPGVGGH.HmHH7GGQGG>GGH HHGGTF~ED?Ba@>Nu*?Q,8q{lQCL w& '  05 j R C   _ } S"`%'*r-/13579W;<<<==9=.<<=;;_;W;~;;;;;Q::09^7632Q0.}+(%B!C>4" I,8d"s9+ , Z F   cCD*afvx Pf]n<1 N hT!$)&S(r*[,i.%/01122211(00//0 0///).. -+V)'&:$z"Qw #n$v_ |<6  F  i p )  C2CJH ?mHV\9 " f2QY^ 5"#%n&~'S'{''''K&&*%%?%G%]%$$l$#"! #%P  P^Dtjvpo@XH{k(rrK, p'r])eq>X ;  h%e4T(H#/IBA YR0W  !4XP/#UI ]o4:+-B<0?J;*+9UO&fO\d}-]jnQ> t/l4s @%A a gVy$Fw7  T }t5 3HY Xzw$g\}!p'6& |j$ ( x < 0Gt0 D>`lZL5[XC2?ncL7&jr2`?QRZ`elvLcE Jv%M'8+ <%;NiJqZ( e Fs$YH_IV+!cDzX} \2!Vy +CL]cd^cT7yAr^f]KVVoV:NZ'dw`TBG6=w']N _^m5h<QG fA<EasqN1 :|/*_ ,fKyL\LNwoz;G~CoC= ^O9 SMu{*@Q9!sbUVTWUZft{{}xtiZJ<70:Ls Qiekn3udr;$nIy"[Co JW*jO}Y",O ; W+?UB(jZHC:=FOMJQ\adekt ?U`C)BS5zn2Mo`Qj:_ts@f6@IE[Fk  SS):'hNA73$"/IYht 5HO,>S;)*GoWSO~qT%vR{D:Y1!r`d)W~f.XD,3] PwbUBBNj #K@*IB}F;Eo=g>:p19NxZRPwJ{sb,g+(%]0"S#)PpK E CSB 2r!(W1O=P t},8 }Oj]gkC/|/8W W)gD,.)5Iexh7*ZCk4WiD1mu9.D;P1!e& 6DSTyMS0qX)vQ~,+y{\>8:MWlaD3=Z+$/ N8,/^<$dP-h+i*h16F-d~85{lOp,7 qodhu{WA9HRh|""|?cD;0 wa5 VQ/pR@B3U;4X &[pgeq{tj\]iWR7Qv"eQho#(?MMG~obA++VT%y`)>qrnjoyvlm|vA *nm%\tiw#sp("80b5_Rq<@.&K[IrG&(4]vj`ZQPUafq|S'C}K EL? ,,ktF@- ER.#ntAfHefC.kvV9=R}}gVDDLcxj>%=k_1f-E<}w:45 'KM@lh7'sB:[R'3Zo\S]gywnpxjOA2@_\"0%~I0=iiI"2!)I5Ahf?)ef*"x ( a".Ba~fSQVguz_G7CYgN@ Kax~Tza'   >C+%[lV0Hu^+5t't?.(@VqrdWZewuaSCENiy]H234\Fa|+ Ca\>  #- %;;;RUN?59BXytN""YOvaECDR\nqrnUNSjgRJFKDQs4 m`$LaJ$ #" $,2C)#BTQ>/0=VnzlH27_VqxXEJM_wy~}ypgns^OMLXd5ot5"N_WD-(' (#932II:04FZ\[kx{i?-Fzq)Rkc^fq~{pjmknn{7Br?3H`kX?AG=( , .@<!?TT@.4HSZbgrnS<4Or8Nnhm{vnhjgq{6KqI9F`f\NBEB'!0( >N84UeU9/;Pb_W]foiK<OxT'(J}zspo~q:1da?=SdgVBFLD0#A9  ' ,MM9%$<Zg^I<G_mpokuvaMDW]=4T}|xk8(:kiPMXgi_VNRO8! 8? %4 :ON:&'@dwhOIYsutuxr[PZxxREP{b<-JwcPZqwn_SY^XE+.AA*"%  !4.!*;JMD33NlsgWQ]rzwh`i~eR`|_@AWzkZZepj]XX]XC.#,@K9!('36-$'8R^K58OhrgSJSm{~xldqxfazzRCKlq_^hspcUOXa\I/",>G>($3, '461,0FWO@:CVgogVO^u|z|}{mkzrriZct{hdmvypd`bgdUB66BJC1 #) *!$3<828BKMHDERhtiXV`luxtop}tnt}mn~rkpzulipun]KBFNOE3#   &&#/7<@DMQPJDGZjfXQU^lz{uy~}zz|xqlt|ytrpopj[KBBGHA2# #   "#-?FGJMPQKGMVZZXWZdvvrw{zznlsx}{zyjjqtofWHABFC9-$ %%  )3;CHLLLLOT]cfd_^erwux}~{}}tmnw~~}vomv|vi^VMJMLC70-(%'$  "/;CFFLQRT\dkkg_Y^o~voms}~vtyvu{}y|yxy|~qdbht~p_Z\ZWVQD;;>7.*$ &@TZG, 6MRE8,$:Sa[K5!!*ItrT>9EJTblqnlgd\NDBHJQ]lztj^NC=DPajq}tlecciqsj`aaYMB?CHE@BB:0(-?NL=1*'()& (9]l\9! ,F^bT:%")B`mhK+-SzpG16CW`cjjbZ[]XN@99CITcp{|ysoljhgbWMILOV_m{gUKEL[fcYXWSJ?86868BII=)(;IH<* "# Bb{m> GgsmO/">^pqW5%@_xveI21A[mqoc\SC;@LNNQV_db\XSLGBDGR_m{}tsl\MEJP_r}tcOA<AAEOWYQG;/,.8BHKB1# ,AMF./d~yR#>uyU->g}]. JoyrQ)"Hj}qcRC:.0;LSXenuofTB2# !.:LaumS@7,4G`t{zgM80,5CPVSRJ:./7:<BC?4%"1AE7!  $gU("G}N$%LswQ'BdpeE,&-MypT>.,)2>QhtwkdUB1'% #%1BS`hptxwtrwzypgW@0+21;PftpfQ;.)2<KafX>.)#+=LSE)';C>& L`+DP &PvtI &S{n:*`D"%-?Uj}~xaH-$7L_t|seYODBFVk{}mS?- =`vs[>*'&7SdaJ8)!0CNG5(=H<" ,nzP:zD'UtucB%&EmsQ+ LN F`iog^O>. -E\kr{}|sj]QE:3*((4E[mynL+8YqrdF"'?Q_T; &@WT: (9:% Nb= ,pB+WqnM+#J{? Ul)La>$HjvfUG@<:61,(""$1?Y|oAChyh=8\dV1#Ri\0 57$Z.*xE,]mY: 2Rju]+ ;lk@&'Lzq39QgowsmbVMIMOSVX[WN@4,#!%+=Vua0RwrJ+Yi_3,MQ?#3"/xP 6bqT$/Xrd==}~B dn8umD"&A[ow}r_OC;841,++7HcLGV/kg#OcD.YL)`hE-R^P+ChhEJHP\0)D\lu~rgYK:)  0QxU -yW 3dnA=O<  8USg@&Q]AYt_!LnV%r,#5ELW\Z[gv~}~xqeYJ<.  S6q rt *xZ 1M; _N]@ >L4 )L[@]o$#{o9 'C_q~xo_M?87.*+5BQ`jrpm\H'BPvW_ ?dT,)OB ]gNfB 1;(-SP%"u}7|#5.@upZF2 #EdyNT A z8=F%fs@-QB +jZ%JaM,(+F7W`3S` 2jqWG?3( @pu;#}TfT<_tC:2 EDHeQ5$ %?0!NH2 WiJFOj< )9IU^]^N79sN8I(7cG0U bm.0&BVsb9(&%*?VhfQ;Ve@qC1(Dd%AMZXWC*g[Wn:i|+o3Uph/mCi5@R'5 U~B( 6Kzq-wskO 3Q~Co  ["db^y$aw3z +HL79 Z=:T)la $ ^)F-p1l2PX*GD!+/9?G>3 ShD&'[/EFV,]&%@x!np?!!/Jtl8ett~ITQNM$ z y G   9 _ { m * Ri5 J$hom`^&4Uy@qyoQR8*&ao).PS < E N >a k ] _F  f X B 1R(qtNo6s$"rp 2{^O/'ME E bVa_|7DES]R40:I` + ? f RfLks]\D?:/1!FYS bn-\ x L K'?X1'lei.l J z o P 6 . ( Q !L!" "<"\"@"-!!! aiQH7f:WtWcF{ qQo&vsE^ )(Jq52tp3C z Q ! {C!t#0$%&|'D(2))*+]+,f,,,,,,,--p-.".s...|.h.--,C+g*))6((y(1''U&&%=$(#! g{RQ$[ XpffD<|=l ?Ec nH > B   Z)Z5}":$'*=,.Z/012p3456789"919C9888M888A889(9t999999m88D7y6554i332W10//-.M-,{+F)(y'%%$#"m  x'T/ e l  RD~Mzq 62 , . j 2Rd7t!""#&#%-'D)f+.o1368j: ;x?AfBCDE=EEEE DCC]BB`B,BVBBC CgCCDD4D7CCCBAA9@??><;:99(876543810c/-,*'%=" wBd% F dqf|7dX{v-XW.!#f$&')N*,,--.0:257:@LLM$MkMMN,NJN"MMM&LLcLKKJBIHFEDD.CjBkA(?>==;:986420R-+_)?'%$"MB+o % {_* Eg($!DgZ6 D"#$%'')'+X-+.013|5V678U89:5;><@CYEHJMOQS7TCUGV#WLX?YYHYY`YXX WdVUTTT:TTT[TTUSUUVAVgVVdV;UUU`UgPgwgg}ggcg)ffDeddcZbbbbbc>cdee{eeeyece&ddscccd(dde\eee?edcba`U^]A[ZXUSlQXOMKIMF9B?7;852+/-,*W'%#r!9_ G}C#?&;866678)9;>M@BSC|DFIKPM^O2QSUWY"Z-Z[@[\ \]_a9c1eg&ikmtnCnnlmnopcpq q@qqqqqqrssYt=u uvwwxxSx_wvutszrrqfpoo2nimlkj/hec`^]"[YWUSQNKGD4@Yd~ba|``4`1_`,`abd eHfh ihjkmo*pqrrscssstsssysttuvCvvvuuitt~sssrrrssrr9qpooKnn:mmm5mvmnopqq5qbqqrOrrrsstuvow2wxrxyyyyHxwvutssLrr9qpoo2n=mRkjXhfeudd ca`]\tot_sss=s rr|r+qqrmsSt1tuwuv]vwQwyww)vvNutsrr:qqpoo'nQmm#lll{l%l#lzm mmlk~jhfdPa^[YVUSQnn n$nUnnnnnTnmmmmnQnqnoq;rstuGvvvvvXuuuQuu0upuv v1vzvvtv uuttWssrrrIrprrs?sesYsNszstt0t sst!tubuvuuxu tt smrqqpqqr[rsWsstQtu u)ttt4ss6rrqcppQooTnmmblllm5mimnKnop&onmlk;iZgPeb`^]oop*ppqIqPq1pplpooop ppqrstuvew0wwwkw1vvvKv:vWvmvvvvvvRuuu5tttIss]rrrs*sysssssstt*tssst}u-uuvuuhttsrqppNop*plpqqMqqrOrrrrrrer.qqq6ppGoouon\mmemmnro"opq)rFrrrq?p o>nlk0ihwgHfdp,ppq`qrr'rqqvq2qq&qqIqvr st8u uvw2wxxwwwOwww wvvvvviv-uuqu9utttpt=ssssst,tMt,sssrs|swsOrrrrsstMttttttjssrqp>ooYo&osTs=r]rs sXsst9tptptQt*t(t>t*t[tuuv^vw1wxxWx8xwwwcwnwvwVw vvuuu\ttsss0rrrrsxxjx;wwwwwZwvvbuuRtssds rrvr3r rrr>rgr|r]rTrxrsXstWtuu1uUutt#ssOssHsst/tCtit^tRssPrzqppnpooYnnno2oopcpq*qr!rrs,ssttttssssstu:uvvwwwwwbvvmvDvuuuuv vFssstthtuuluuuuuuv4vw*w@wAwwxKxxxxzx+x wwwqw vvuttsOrr_r.qqqqqtqpqqqTq;qYqrks+stu6uuuuVttlt/sttettttttxss+rAqdppooOo nnnno6oopNpq0qrbrs9st@tu&uzuuuuuv?vw4wxGxxsxNxxxx+wwwvw^w>w:wFwcwsssttwtucuv9vvww>wowx)xlxLxx$x`xxxxxGwwwwvwgw>wvvUuuuuuvgwwxxJx0x(wvutssrrqqqqrssstQuuvOvvw-wWwxQxy\yyz0zz{o{{{|{{{-zhyyxx_ww vvTv uuuutlt.tBtctuvwIwxyQyyz{{:zzSyy3xxxxwvv8u\tt s3rbqq&p_ooooopFpppq#qSqiqqrBrs/stumvHwXxxxxx`x ww|wWw>wwxnxy yEyEyVxxgwvuuru ttktQttuvvvwwxxsxxxxhx|xyxyyzz|z{i{|"|{{{{z xww{w(v^utttTt.tttuttu+uvwxGxyz#zhz{%{{{zzeyy2xxawwvv ut]srqqKppoooppPpqq3q.qaqqqrrs>stuvwjxyyUzzJzzzjz"yyyyyyzyyyyyyxnwwnw4wvvvw$wxxxxxy?yyygyEyxx}xxyy2y[yz9z{H{v{w{${zyxwVvuyu!tRsrrr;r"r rr(uuuvAwwxyvyz{{C{S{|{{&zyySxxrxwvv.u2tUsurwqpploooppcpq\qqqr,rmrqrrstDu uvwxyz{{|X|F|2{{{{b{I{U{a{J{zzzrzyyxhx!xxIx3x6x_xy$yzz:z&yz zyyyUxxxDx8xdxhxxyyz>zzzzz^yxwutKss-rfqqppyppppvvw wxby@zz{:{{| {|D|>{{zoyy$xxMxwwvGuTtksurlqppgooppqqr`rs'sKssst%tu'uvcw6xxyz{||}9} ||||h|*|||{{y{zzyxx*wtw,w4wwwwxNxy,yyyysy|y~yVyxxoxwwwwywwxxy,yyyyybxwv1tRrqqdpp$oo7o%o^ozoowwxxyz{n|:|}}}!}}||H{czyy$xx@wwvv?uPtTsHr=qkppKop pUqqrsrttltu4uuv vcvwmxxyz/z{|}I}}}y}Q}||||\|e|Q|{~zz/y~xww;vv@vBvvvvw]wx]xyyxyy,y$xxx^x!wwwwvvvvwXwxPxzxxxMwevltrq;p%oonnmmnnNnnxxkxy3z0{{|}?}s}D}5|||f{zyxxwwGw vv ujtsrqq@ppVppOpqrtsmtAtuGuv.vvwwZwx4xywzz{1{|}}} ||||B| {{{{{Nzyxxvuu3t{t=t*t`t]ttuv-vwiwwxxXxxxxpx$xwwCvv8uuuvJvwwKwwwpvusr-pocnnEmmAlm mzmmn4y xyyz{~|O}(}s}j|||V{{=zgyOx)w0v^uuuuuttsIrqqAppgp;ppopqrstuuuvvvw-w\wwxjyyzSz{r|||||||N{{{x{K{){zzryxwvu&srr:rqrArUrsRt4uuvvwPwwx2xrxkx;wwwvvJuuTuu@uuv;vmvvvutsAqonmmSmlPklllm m\y8xxyyz{:{|{{'zzPyxxvutsssshs=rrpqqnq!pppppqqhr,sttu8uuvv2v=v6v*vavwnxxymzz{*{{{{{t{&zzzzKzyyPxwvNtsqwpoooopEqqst1u uv'vvw-wPwwqwwvutsMrfqqqqqqqrqpppqqqGqqrist tuuuuuuuGtttkt|tuxv;wwxy%yz9zzzzhz\z.yyy7xx\wuvXtrpon2m\mJm6mn_opr1s~teu)uuvv.v v&vuuuau5ttt(ttNtu1uuvHvvvvu,srrq9ooCnnn!mmnunno xxw^www>wwww[vv?uuUt{srq{ppWpopbppqpppq2qnqqrJrs.sttuYvvvvv&uutesrr;qr rrsJt7uGv&vxxyMysyyyyyixxxwvuOsNq'o5mlkkkl8ln>oq%rqsKttjttt}tEtsssssxsXsIs*sfstu'uvvvww0vutsrqqZq,q6pppqXqqqxwjvyuuwu9uAuou\tt%sssRrqq poqo#oJoKoopTpXpapqAqrrsst1tuvwoxwwvv#u&t rqpopp/qr$sxtuvwxxy`yyy"xxwxwywutrpanWlkjjyjJjkln1opqrrsrrr;qqqqqqqrr*rs^tHtusvvw,wmww?vuu0tsssssssttttwvuzttssFss rr{r r rqqYppAo{nnnno oqoop*pqYqrs"st?tuvwx=xxx;wBvyuUtrqooo ooqrpstvCw>xxhy y=yxxux5ww2vutKr[p8n0llk`jYjijIjklnooppqppp\pp p#p\pupppq9qrstuuvWww`wwywvv=v uuuv1v*vCvwXwwww.utus,rBqgqppp-op pGpAoooFnn&mmnnRno9o}opq|r?rstvtusvooUo4nnoogooouo%nn5mmmnAno o[opqrks?ttu;uvTwwxxxTwvuts~r ponnFn%nopqrt'u:v1vwwwwwwwvv2ts[qGo#mBkjiiWi4iij&kklvlmmnmmmmmnncnnno.opqrst$tu_uv[vvvmvJvpvvw"wxuxy yzLzzzutVrqgp?o'nnmmmn1noo9oPonngnnnnXnnoNopqrys^tuXt&rqFonmmTm*mnPolEllm'mimnVop qPrhsAstuuuuuuuuvsvw-xxyqyz{S{|{ugtrqNp3o$nnn mn8noIoppMp0p ooo]oHo]ojoop pqrrEs!stuIuvwwwww|vuusrdpoxn[m+llFllmun noYopqqrsgtttuttskr:p^nGlFjihh|hiiDijtk6kkkkkkhk-kjjkkkllmPn7o`pqrs stgtu utttu:uv(vwxyzz{|{||usrq@p2o)nn#n9nWnopApqsqqqqqq8pppppjppqkrrszt-uuvwwwwwqvv!u`t1rq-onsml.kokIk"kfkl.lTlzlmImnoqqr:rssrUqpnlkihhhimiijuk kZkUkokFjjjiiiijj&jzjklno]pzqjr"rst4tdtttXt9thtuvvwxyzg{p|\}$}X}auhtbsUrBqXplooxoopbpqrgrsmsssssrrLqqiq ppqJqrorstuvivwwwwvv!utsZqpo>mlkkjjjjj0iiMi}ijklmnopq:qCqqonlkxjjyjzjjjkSkkkkkdk jjiiiicikii~ijjklmnopqres+ssssttuLuvwxyz[{~|}S}}vuItsrrqqq#qJqr@rs~tttu$uttbss?rqqWq!pqq}r:rstuxvKvwwvv=uuu'tfsr\qEpnmlkk#jjjigffBefghiklnGop|qqpo{nOmmll}lulllllllSlkkLjjajiiiiipijiijnk>lmmnopqrrs"sFst-tuvRwxyzk{|}}}w vvuttKssHsrss&sest3tttuttt sLrvqq&pppq#qrsXtLuuvvuuStttQss|rrHqpoo n*mbllkj|hfecbc%cef#gilnKoq[qqjpgonnln?n@nenTn4n5nmmm1llXkkk9jjjjjRj$ij j*jk0klmnopq|rr`rsstQtuvx,y y{*|E}!}D}Nxwwwevvzuucttxt*sssssttQttttEssr?q|pppeppqr>st tuVuEutissos)rrr>qqqq:ppoenmlkjZhZec^a__`7abdgij8mopq[q}pp)oo9o4oToo~ogoooTnnnmmllql%kkkek'jjjfjLjjkDkllmLnao}p^q qfqr$rs[stuw5xyz^{|_|x|~xxx~xgx%ww`vvugtssmssrrssLsssQrqq p|pGopp8pqPrs st2ssrr`rqqqq>q qq*q.qpzoonrmYl8jEhe9b6_]]]_`tbehknAp>pqpoooQoo5ojooopZppp1oo\nn6mmum llRlkkkWk"kkk.kskl,lmnopTpqqqrrstvvwy z={ {{xxxyyy xxw7vbuutvssrrJrmm6ll\l kkkktkakikgkkklmonao:opPpq>qr&r{st u(uvx"y/yyywwwxDx{xxTwwvEu^trsrrRqqqr8rssrsqpoo:nnnZnHnenop}ppplpop=ppq-q!qpq ppp2onnumlzjKgdA`e]4ZYXZ[^aeiloHpppoo'oo-o7oppqgqqqqq2ponn-m|lllUllkkkll lllalmno]opspqkqrrErsztkuuwwxxcxMv]vMvwwhwww0vhutss9r^qq+qq0qrerrr?q^p8o:nn$mmbmmmn;noooDooop-pqqq q qppponnmljh2d`]"ZYXYZ]`dilkooppcp:oooopTpqr\rrrrrwqppoIn{mmdmllllllllllm@n nop pq9qqqrrjsstMtvvwcw/wtLtItuuuuuttWssrqq>pppqvrtrrs(st'tttlssXrrTqqDpp>pEptqqrrrYqpoonn`mmm2mnmnoboooo6o8opOpqLq]qqqqqqzq$pploo0m}k\h=da__6^}__acgQknpIq2r?rss&sXsstWtu^uuuuuu1tts1rFqfppoo%nnnzn}nnnnnnonop5pqqMq-ppapp3ppq5qrsZssrqpojn&m0llk_jihfdw`]\_eb=deg]hik klmwn`o

t&t=tvtuAuuvGvvvv!uuu=tssr8pnmlmki*g/d6a;\XRMM>Q)SV[X>ZM\]_*`acd>efgwh hijkkjii+hgg$fDeUddeeTfg ghi i:hhgfe)c2`^\ZYxWW V4V%V,VWXY]Za[\]^_l_`ea&b)ce fhRikmnp3qaqrqr.rmrr|rarUrgrrs ssssrrss~st9tu-uuuuugutsrq)o\m[kih eJb^ZU`PICC8GpJCLNPRTVJWYDZ\%]_0`Waabcdd5cc9bb2aa2`__=_!__`ahb7bbba`_^I\IYW=TR3P;NMWLcKKKLSM&NWOcPQSLTUVW"W{X,Y8Z\^`cegDiklmnn7nnoo&oOoopApq3q{qvqmq;ppqqrrzs#stwtu tttKsrqomkig"dp`]VXSqM,G@t98yJ?ABDtF GIAJKLM*NNNN[NIN$MMMMGLLmL_LLLM{MNbNML+JHGDBH?<:z876'5R44n4g5 567{8@9.:P;~<=>;>?ACME{HJMtPPSPVY8[\^S_D`/abcde efghiiiiMhhhiBieijikkkl7kksj]ihfmd5bE_\Y$UQLF@9_2+%&#r'$),-/u1'2457*8:';<>S?U@+@ABB?BB1B.BAAA^@@@@@@AA^AAd@?>a<:8\631/-w,+Y** ***+,-/-./b0=112z23587\9i;>yATD0G+JQM OQ@RT;U}VX_Y[R\]^`Pabbb5bWb*aaaaabbcccclccb8`_^\8ZX*URNK7FBk<6\/)"a!'"$U%')G*q+~,.m/0283>4456"6c6\6666p6?555\5>5/44455V5 4b310N.,<)'%#`"!r b  - Q !"w"#]#$}%%&>&',()m+-03J619;>A^CEGKHJiLNOQRT}UWcXoYOYYYYY2YY6Y=YlYZ ZSZ@Z6Y|XVUoSQOMKNHD@<8/2S,D%Su[a "#~$%&'()t*I*+%+2+d+{++p+D***_*:*))))))^('U&<$#K!T'\^]Yu$M'I 8!\#z&(+N-0V25D7k9/:<>S@.BCEG2HJKKLMMNQNMM_MMMzMMMN'NbNIN/MbLbJIG7ECA?X<18v51-w( "M/ < AzQM - ' Q"f0+i<6 a  L 5MR1U%;~!$&v(+,.02468W:.;={>@(A!B4BBB^AAAAAAB'BWBBkBUA@>=;3986;30-*B&" AyXRlW s  % TB_{}Kd9]I " ie^     " 4 9  \ >_\6@ $"B$[&?()+-2/023<4566661555k5z5|5556-665e4l21/].,*( %j"c> uW_ +  6 T    & / W j = &   U g  SxA=fj9mz - DM v"#%_&')M*K++,+ **))s)U)X)))))))B(*&r$#a"; bDm s &BzK.Njr @kzqo nm[TKl<#Cr#dK I *1Wj%@ d m <  'rM{G*G| i > *bUY3L4R9*hiBT VD0zA3eIyG >pd6lH`yU 1O& =  5> Q{#2bD`   nA$0@bsEYcG1p1d)z'[Sw  5  cZ> j  , " & LuuoB!{&j)`!MN."^(qwz_  v?v4+@87mBKHcAMPw( j6Z,Uz\ Z:VXL4!GdG/aw'0[}6FEPY[]ptf;yN$H"iaJ}KLYq!F l!=iRoTW&+k _W mF*!Nv/BEWa_T]P/|@ vht7{KTy^`ygHlYWM~C>M*3cN `e,zz-oAZOW;AF]voR<" K/@0c?oTUUuwCR@} HKiU5W(Sn3FX>t_[c[W_msx|{r\G@B7<Mv1fw}]~Y(q0\A[B|Y*DZ+sQ`'*N";]+6EP6!mbJ>>IMPSUW[bfacp5JV;$<t,#%+w0Jo]Ln5]yyHg<< DCbOf\ ` 1% eRK;/#%-BVho~+@G%F['JJ+DvXOSt[$qW}=Bb6#vYwwZQo 6Z<$0hV ~aK8;E^xRI&A:oG7ApBf5:~;I[y\M\P}ra,h":+ W+ `0 +Kk{K"H>LJ2t!(R+REZo|(3 +ZuaotJ 7 +2T W%sM0,&3C\of5 -X5[(\oJ7rx8,H@T1 f)/;L\S(T3y_(q[x(-xvT612DOgbH5;Y#$5L4/7d="cR'n _% j3BH,k87uKj+ :ufe^euyWC<JRe{)$z=n=E4#xe2PP4rT>>5W@0V!'^|f_aozreWYd}ZR:Kn*r[ io'':PT Lp[<+4\Y(t`)Exujifkvxmhq}t? &kt ,Wlt 'tn'$54h< bUo:@3)IXErG)-9^th_[SRU^dnz|U)?yP EF9*-ksFB, JW2(szH kHck: /lwX:;Mu}gUDBFYomC+<i`4Y# D9{t976  $PRHsn;-uFA]T!+YqZOYcvsikqjO>1@]Z& (G19dfF!2"0N;Hmf= )bm2+z'Z *Aa~|eRQUcq|r[F2:R}cMB#(OhuQv_' BG0 -anT0Cq^-5r#$p<,*DWplaVYdvwbPBFKcz^I577[K`3B]Y= - &<=BUTM?23<Ts~oJ VPo`IKHS`v|qttYNSllWRMPHSq3mb *L]G##%! &1  4F* (CQN=,,:UozmI38aTmy^KOTh~vzzyrfi}w_TVR[e7"ru;,R_UC/,,#-   &=41EE9/2G_ddt~mE5Oq)Spkgpz}~{|qikmrqz?ItC:QgnY@CJB-2$  1B=&#?UVB/6LYbjmvqYD=Ws7Twpsyrlmkt:KqJ=Lek_PCGF,$4/ "AR@&#7YkY:0;Qed[^frpUDSxR)-R{ytu<*\a>>VfiYFHME2 &C< #(0OS@)$=]i^J>Icsxslx}lWIW\;5W~|r=*8hkSQ\lmc[SVP8 !:B#)6":RR9"$@dviQL\zwv{|aOWwqLBQ~iB2NzlU`x~teZ_d]H*,AC- "$ "3/$ *@PN@13MjqfUO_w|zfYc}bSdeDCX|q^[ivo`[\`[F0$*@M=!#)"06,$,?V\J68MeobNGTlzqeasxii~VFKjo^]epqgWNXb]I0$,>HC,&5/  "23.-4FSM@:BVhneWR`u||~{thizuygXbs{fcnvxrhbagfVC78AHD5#%-)#07525=GMHDGUkwn^[cox{wrq|{pjq~hfwtjnzvomsvp`NCGONB3&  &$!,6=>?HOMGBGZjh\SU_o|{sv{|zvv{yoel~xy||ysopqrk]MCAGI>."  #!0BGDHKMLEBHSYZVTXewzqnt~~|ytx}rlot{zv{tgelrpfWHABDB8+ ! !.49BHKIHIJQ\dfb^_gs~{roruyyyy}yw}}smlrz~}xrkjsywl`VNLOND7/+(&$ #-;FHGLQQT]gmkf`[_n|yofdjsywssy}wvyzttstuw{qdbgstd\\\[[TG<;=8/(  ?WZE+#=PRC5+!(;P^XH1*KuhL;;HJO[fljid^VMHFJMRXboy|zyke]M@7;CSds~zslilmeZTQNI>8<C@=GJ8& ,?MOA/"#)& .ThZ7"#1KbeX>)%.F`jcG',Tzh?-6EVXTX\YTVVPHAAEMSY^cklgacecaee[OHGDKYnzj]OOZfdYQJHF>65602COI4!!3EH8"  2Ple<DesnS4#$>_qnP-"=\tscG/-@]oohYRL?9=FHKU_fe_TIA;:6:BP\hxupdO@=IO\nwZB8;<?CFJHA70.,2BMK=0' (@OD* !OhiK$;lxX2;b}X$GjrkL)#Gkp`PB;12:HPXisugWA- +;N_ou\E87-2B`}sM1&"+2<DGIC:205;?A?C?.$3EF5"  RvnJ((LzT-!,OtyT$ Bdn`@(%/OwrV;)'#-<RgqtkeVA--=M\eklopnklkhbc]I7/6<Nh{ugQ;+"-AY`U=-'%-7AOI.'9A>) ;ouQ(!MS'.V|wN& !Q~k6,bF#!4Oh{yu_G,"4GYjszuk\PG=;<IZn|bK8"#2Rm|{cB%0M_\F4'#)4BC4"7G>" )ahAA~>,Uuxb?$(CgtN# L}KAXbhb_Q='  4HXchopogaWJ=3-&% '3Lh|bE/($5Sn}oZ8"<O]S>" <WV<%8:" KW00u<.XnnO&J|u<Sm*L{dE")PpxpeWJA=8520.) 7[c3 6\nuX-8]eZ7#Tna3 25  O!tG.dt^@&-SquU% 3fiC+(Iwo56TltxjUE>9=AHOTXTMC;1"'D_|FIonF/`ob3.PR?!1 fU 7h}d21Yzp?:x|C #dm6ruK!4PgtzraUI:/%&,89BRr`CU7qeMbC . DO)_lQ' /Q_T/Cea>RSHa7 8RftucM8+&&,Ju\ )}T 8fmB ?S=" (|T !PdC(NY?Ss[Rq V%$ s0'6?JQV[fpwx~xjTA667,,Gu*u[ zv,wc5Q<  kPP^D!CL3(KZ?cn#*{w@6OahqstmbSG=4.&&+58>HYp|}kX># SDnWa ;h_3&MA EvO *YjI$CG-2[W'$x8y)*OxcM?1-VyS!bAk.6I%lv;&NAWHVlQ$=>' 0I< UZ1]`BwyO7/& #]|"{oJgY7aq><194Gr]$<8 *C0O?6ctMAV|N-I]bXYN> P/8N&/m'W7)4Rbn05**=opH 47/$=akpU{;`tNeO6;N|@SZOM>.~utBHr 7yfp8p;c7AU' :+qyQ/'6. !5Gp-pp^N 2b2h SQB{9*pPAR81ZI;W,Ksa.!)& Z(E>6F`bJH[-,LdlzkYeduK3}y@Rd#'Q(6(H zTsbD%%) '}Aom;vkL-G  n M   S IFlZ]k; 7} remj*8*bW/&)0"Y]6&&fm!h#48 y _  7u7 I 6^F=B <  7dR3XQt*a(,hg,@diU2*(Sa=emc9  b .U^4yw4 I1 ,IfID$^( e H & | a RiV}PO9( rr)b4.1 a vO\>uc$.\ Y n ^ > > !a!"q""""h"2!_ P1 b.Xjs * +pS Zj;X516)E = 8 cTI\owc X"#B#$%Q&@'2(()r*8+*+,,,,,,-2-.>.....I.-K,4*\(d&b$#J!!g> 0 6+Y-kW F \iVT52}@  {dW@L (  cGO #D&0(+k-.5./z0`123456789988s8'888f89F9p9S9G99#876 4>2O0/=-,+*=))*?*++1+_+*)('}&Y%.$("!1;p C5qCL ~J;  P$!4_ !!g"1#G%J'm*,/^2<47489:;b@C DFFGHJcKLMNLNOlOOO9NMLKKIKK/KKKKKLYLnL2KIHDG F E DBBAAAAABBOBPB AK@b? =p<:86R3t0-*'$=!D}B~ |f0-)%#$ +  !"$w&')p+,.1P3658N:WZ\m]^W^_5_`4`n```a@aOaC``+_H^h]\\([[[\\9\]]M]S\[ZYYJXX7WWX!XYZHZZZZZXWVITSzR P3NKIGFcDhB>;8:52 .+\(%^" G I:.;f740W-+ *J)*+c,-/1O3 4618#::8"544^5:5768:?ADFHKMpPRU]WXYZZzZ[9\ ]^`PbTdIfuhjlmn\n3nmmDmlm mNmmmmmmFll&kOjSimhhXh#hghi9ijWjjjQiiiti hhhijklmn,nn>mljiFhfed4bo`^]W\3ZYaVSOL!HEB?<97]5/20_-h*'F#{XKSPZLIpECI@@?t@&@B"CEwGHJLOKQSUXZ]_aIb3c5cd6d{de8efh&ikkm)np1q7qzqqwq+ppjpApp;ppq qpppeoodnzm_lNk`kjkksllmmnn(nmmmmmnnopqr~sssrq^onmWldkyjeigfdeVduccb_`S]Z?VS~PMK,HnEC @><>9,642.*&a"R*Z4W>T*QNLKKKLDMOPRSVXZ\^2`$be8gvhj8jklplmm5msmn~oZpqsttutttt:ssJrrrssdsssMrrzqqpnmllJl0lmBno oppqCqLqVq>qq q8qrstuvwOx$x'wvxusrHqWponnm9lkkCjig+d2a][:XVTfQOLJHHEA>:51P-\)'($a_P\ZXW8VqUVVWXY[\^`bdegfikmPn%oop;ppppqqKqrstu0uuuuuuUu tt-ssksgsst)ssrrqqonmlllmCmnopzq,qqqqqqqqrstuvwxxyy x vuotrrqpp0oo8nn@mlkiiQgdbY`_][YVWdU9ROLHEA<9520ghxg ewcba``c``aabgcRdfhFi`jukmoqJr[rsHssttsssttulv'vww6w vvvvmvMvuuNttuu;u9ttMss:rr9qbpJoMnynSnbnoqppqMqrrFrkrrrrsHt3u=v`wZx xyz0zTzIyxwov$tss$rfqqqq pp onn%lkjhVgffdcal_Z]tZWTPLLQHRDAa><'l>kjii'htggghgmggUgh*i^jsklDmInprs'st@tttttVt#sst>tuv/vvvvvvvmv\v[v:uuuUuOunuuguttssssYrqq/pqqpqrrerrrrrrrrrsLttuvwqx&xyy%yxfwvutsrqppbooVnn/mmuuvoppqrbs8stzttttMss#rrsestxuumuuuu[tss)rJqhppoonnnnoNoop>pqOqryrrssesstttt)tuUv"vwUwx!xwwwwpvvmvPvRvwvnvzvvwHrVrssdst tuuvv`vvw wJwwwwwxxexvxix$wwwwTvutsrrq2pIoSnn mnnqnntnOn>nLnno-opqgrfsmt@uuKuu1tt-ssst=tuCuvvcv8uutBs9r>qLpTonnrnn1nZno-oopfpq\rrs[stt{uuv vLvtvvw5wxqxy#yyyyDy'xxxwwDww vvvqvvrrsJsosttu`vvwFwwxVxyxxx+x"x9x'www4vvvv[utsrqpp o*n+m}llm2mmmmnnHnnohpqqst%tuuuu?tt.ssst]tuv9vwvv}utsJrqoon1mmnnmoop^pqr3rstu$uuvuw/wxoxxy)y^yz6zzz{2{Y{zz3yyy+xwwwKvvPuuuszssst/tu[vvwx2xxy[yyyyxMwww^vv@uu6ttttTsrqpoo/nrmllllmDmmn2nno\opqfrssotguv=vvvvuu tttuuv?vwgwwwvuttsGr+qpJogoooppqrs0stuvYvwawwx;xyyz'zZzz{{n{{{{{{zz7yy_yxrwwvuuUtttitUtotttulv6vwxyy y[yzzozyy!x1ww+vuutXss^sVsPsr\qppoYnnmCllAlPl`lmmmntnopGqFr_stuvw}x"x?xNwww&vvvvwwwxPxxxcwvutts(rqqqrTrstuhvvwixxyyByMyByhyzuzz{{3{w{||-| {{{{zyy xxxw,vuutessosu|uuuv9vwx.xyyzzzzzyxww+vuu,tVsrrr{rrBqqpJoo0nnwwxGxyKy|yyzz/yyyy+yyyDyQyfy{yzDz{{,{={zzyxwvxv-v,utt3ssrqqqwwx0xxyz#z{I{{{{{{zyxwvvGuu.tfssrrr_qq2pToo"nnnfmmmmnnoopFpqrstuwwxyz{||7{{{5zzzjz7z,z?zHz2zyyVxxwxvvovJvRvuvCvwx!xxyxy2y[y^y+xxxpxPx=xDx=xMxUxy,yzzAz{zjzUyywvZu'ttt#srrTrqqJppxxyKyzDz{v|'|}|||||p| {Rz(y wvvAuu7ttss:rrrtrqPp~ooopoHo-onnoIop$pqrTsstuvwxyayz{O{|7|4{{x{!zzzizPz`z}zzTz!yyx]ww vov vvuuuv`vwxx>x[xhxxyxxxvxWx;x wwwwnwxxyy,yyyxxvussrrrqNpppp>ooytyyz-z{a||}2}u}C} ||R{zyxaw;v5uttnssrrjr3qqq&pp+pppp5pOppqqXqrsvt*tuvEvwxySyz?z{"{e{K{zz`zyyyyyyyyyrxx/w]vuuqu7u utttu.uvFvvw5wuwx4xxxvx?xrfrxrrs5sssprqqpIpoppHpqjrrsot)tJts=rqqq=pp~pBpRpppppYoonmgk;heb`^^l^t`adRgVjnprsSssvsr~rqqqqqrr7r&qqqqqpp(oo=nnwnmmnmbmmmmnn_nopqrrSrsfst{u uvwxx9y z.{{{{y xxxxxbwvutt sBrr@r+rr0rrrsbssrrqpBooopp[pq]rrs2sArr+qqaq(q pppppqppproonmSjhda^1[[)Z\D^addhlor^sBsss4rr.rqqrr-rrrrrr@qqBppo~nnnLmmmmmnn mmmn^o4p,qq{qrXrs|sttuuvw_x1yLz)zzzxLx(xAx|xxxwTvOuotss+rrSr r+rjrs|sssArdqHpOoooooopxqqrJrxr:qqoqeqnqqqqbqCqSqPq#ppnoonmkhHd`]gZYY*Z\5_cuglohr5s3tssKrrNrqqr rkrss,rrriqqpYonn`mmmmmmn nLnnnen1n;noKp$pqaqrLrsSstt~uuvwGxQyyyyWwvw9wxx?wwCvKuttsZrrGqqr:rsgsssFrmq=poto9oao2o#o.oppqdqqqpqqIqqqqqqqpq2ppp!oo"nkhd`]FZYXZ[o^bCfkBnqrssswrrrCqrrhrsUsssssrsqpoonrmmmmmn/nnoonnoop{q'qqrssosst$tujuvwxexxxrttu9uvgvvv4ukttCss5rr3qqr%rs[sssZrqpeoouooooxoppqzqqqdq,q6qsqqqqqqqqqTq!ppp oljfqbu_K\\@[z\g]f`&c7gVkoNrst t#t/sssDssBst!tntttttstrqpoonSn mn n?no oioooop4pqWqr/rrsAs]sOs;sist}turvUvwSvvors stZuuuuDtt ssMrrYqqqqrss!ssswrrq#ppppppppqqrMrrrqq}qqrrrr)r^rrrrtr4r>qpnkhda__^I__b?e$im1pqrstu-ujuBu&u tuuuuvv7v~vhvuJtsrqp}onnDnn8nknoUopYpppq>qrrRrrssrrr8r6r{ssLstu(uott0ptqqrstAtMt"ssXsrrrQqqqrrsistDtssrkrqr>rcrtrZr\rrssssCrrrrrrrurrssUs_sUssrqomPj=gdbb;ab?be5gkoqstuv1vvvvvw wIwwwwwwv!uytsrRq(p2o7nn~nnoQop|qq{qqrJrrrrsrrr qppppqq'qRqr(r ponopqrsssssJs.s+s=s?srrrs4stu3uuu>tt sssssssst5ttutttYtStatFtssst.tgt~tt:t&snrpnQkhfeke+deufhj~mprtupvpw wwxZxxxxy yxxx8wvuusrqpooUo*o|op pq]qrerrs8sVsHss3srr q>pgoo3o)o\oBo!ooo/nlkk3lmo{pqrr9r6rbrrs,sDsEs=sxstuPuv=v#uu9ttBtssss[s9scstjtuZuuuVuFu ttrrrdrUrArqq'p_nljh3feeefgUik'mprt5uuvwOwx:xlxxxxxxxWwwAvnutsrqqrriqponnmmmnllak6ifdCgRik?m1nopq3qrrs sssttPtueuvKvvvPuu*tt)ssshrrrst1tuvvbvPvKuusrqpp=oo?onnnYmlkLikgXeeeeefg~i&kmp.rTstuvhw%wwxxNxrxxxx6xwwAvrutt sKrr q`q*qAqqresst_tuuttt'sscrr5q4po nm{m;ll4jige/aX]` c2eFgi`jklmn]o op$pq qIqrrssXsss_rr qcppBoooOo:onp4qqrs snsDs%r5po,mlkj$hgg@fffffffdcsbnab{bde fhKjlo#pqrsft#ttu-uuvvvvvIvHuuXtt2ss3rrIqqqr@rsstituHuuu`ttDss>rqponcm\ll k%igebp^ZUX[^[acdfekfughiuj`kil\mEmnOno.opqpq,q5qRqLq5qqqpppq0qrrsbttmtttt srrZqpoYmkjphg1db(^.YTO>I5C^CGJMOQRT1UUVVWmXxYZ[\]^}_C`3`F_^]b\\[[[EZZ[b\s]^^^]X[ZXVSPwMJHGvFF0FCFGHJ;KMN4OUPR_SUV.VWXbYuZ\=]_ ``acdfgvhZiijUk klmy<;_;:\:w:;<>?x@AuBICxDFpGHIJKbLN3OQSYU VXqZ\r^'_K`TaabxcdeftfgPghiTiii~i{ij;jkZklPlmmllvkkVjji%gWeTb`>]MZpVRMG @v:z4j.._25T79N:< ==>>]>?@ ABD6E^FrGHJJ&IHuGFEEEE2DDODE[FlFFEDBA?=3:a75'21//c../10-1024 5r6P78+9:<=6>>?j@|BCEGIKsMOR,T/UVWTWXZ\@]^_`|abd,dddddePeffMfffffOeddcba_][XhUQMI9CA<5/*#$/'*u,./v0h1g12G2r23945n689;:I;<===VXhZ [\<\_\\=\\].]b]a]W]"]\\[Z YXHW]VTTRP>MJ>GCC+>82r, &[!:/!:"b#$r%x&&;&@&t''):*+-#.4/x01110/}..!.(.--8,,- ---,+*$)'r%h" Y/-=*9E_ ?!o"2"#`$'$%&U&'6'(*Y, .024 589;<=>x?]@C)EGiHJLwNsP@BD2FGGUFFGBGHHUH'GGHG!FEDCeBE~kg  c 1A  w y2)h!RL!#$i%&')z+l-/i1#2468<::;:;Y::;J;<&FzO   Mj<'b+k- }  @D2 J^2  B , .  7 +  > yPo-q)a!"$&4')B+,./l/\../E//0'///;/,.._-g,|+n*Z)d('&8#!~uV :(h n l  UaeZ"URq,*1w <0W/gxod Q ?Ys@(/3 !#S####$#p#####i""""o! }j [q@t4& lA,zNzsV:S0G@DTfzkN3p&\*jI: C 6 N an.qK,IphdEw  0 6;UkQC%~jNPPI7ivMd|K2RR-#'hA#Fs  - :icwGtc|f0I > - W 7 bXO 2Dw(6V-:mLavO Dd I`d?&`&u~FHti4 S a < m J )i's5E 1Ds[ITm/<*48!ik*h fZcfwo*tDMc4ed<Q}Q-2/l5.Y"NpX ]9KG"B#7aa:Wt11Wt-<9FNMISSM+a>9yAv=`,7B bg7k\-mT'UV 7 vG&Jn,?BU]YJG8!t; rxb[TS:Tow|A k~(cl|B4XE Zm_w *|}0zE`VW=BI^swW<&?BS?u CqlIVsKT*FD%~mId)Zp%%9IT4ye\a^akx}ui]QD>7AOs>=:MeD@ {]{%r&;[.p[i,0E  9c 24=I3naNIIQVXWUVYXY]fmy~,CK0!I {.gr.Mw^Gy6h,u p@rJB7)hRZ_n -iVK=2#"+?JWez2<S g)2CO"6oMca|V"w0Vz33S.0,`wwH; l/b:.3!r&(XtZG45AYk{ J ^8XQ~ a8Bl<c RZIHOxWIQxYpP\/3&#a)i<!-Ol|xHY >QT4o|#]DbN[t ~y+8&Yveki@ ;&*EXtK/.)6H_k{b5*Z6T]d<0jr.=7P9!k,2=M]X1\5ta-v"Z j"1{rS502CI[}[A16P}%+ ?G'#2dB !bS#qZpARQ.lG6V n2Bm_]SYkwS;2@I]s6< L9I= -yd & LH8x'bCABS51Y% /es]W[lxzkaPOYrd%\<Dg(t`.*mo)"9LLNr e?.3KG)l\*Iw~pgihlt}qc_jsyK $dj-I]u".un*': 2a7j\u;=9@WCqL16@avk`ZTTTXYbpvO)@vR D@3 2<twL D/ ER47Q&nHjg: }2pbECNp~hUFCANayi:<inDZ"= JB66$$QU V~vF 6zG?cS("\u^QXbv}ohjkslR>*7X`/&x;1@moM/" 2S?#SuoH2ij0 *}'W!-B`~|fVUWcp}~p\J5:NxcNC$%Egc}Rva+ CI3 9jv[6$GpZ+8u &sB2.F[voeWXbts]L@CG\~dO=><\RWz0C_\E#!-  %>A&(L\XN>239LkxkJ"#USmhOOM[j|no{pTGKdxr`YVZU`{@me (L`M-*32+/:5H00JVP<--7NdqykJ57\U j}aNQYo}twwyn_auzf\]Y`k@&rx>,TbZJ898$*6)   )A9#!9MK=26G[[[m|oE2Lm'Qphfqz}z~tnptxsxDBsC8Ngr^DIRJ45)  :KE,+I][D17LW_gmzv[C=Yr7"XztuwqmonwBHuM=JckbREMO7):6 -M[F+*AaoY90>Sfd]envoUHYS/6W}|yxuG .]nGBVfhXEFLK> 0LF#   &9WXC/-Fci[F=Icsxxu}}kXN^^C=Z~|}H/7cqWPYhjbYQTQ>+ 'AI)  0!#>TT>*-GerbKFYv|z{x`R[wtQFR{oI6KqjRZpunbX]b]K1$1CF1 "!   -.&$,@PQE66Mej]MJZs{xf\ezcUelMK^~tb^jvm^[]`ZG3(/COA&%+ 19/%+>W_L67I_h[HCQj~w}qdaqzml^NRruefoyzo\PZe]H0&/AMH2!,94"45.,4IXQA9@Rdg_SQ`tzwxy}|wodhywzl\eu}feqzzsha`ggT?5:EMI:((/ $ %27539DMOGBFTgpi]]foutpnpvytmks~|nguseet~qgekpm^H<DQSH8)"!  %.7>BEMPJC@GVcbZUW`mvyxtsstuuw|xqfi{zvvy{unllni]L>;DKD3& !#  1CJHJKIFBBELTXUTYdt~}qimy||uxshfnqu{|zvmknsqhYJ@>@@;/$!#&% #18=FJHDEHGLXbd`]^cn|ylimsx{zxx~vt{zmfhry}wmhkqush\QIGIIC92/,*'"   #)4BJHDJPOP[gmje^WZl{}rhbbju{vnnt|zusv~xuvrqu{~p`[`mxwk[TSSTTPE=>A=3*!  8OTC-*CVWH<2%(:Q]VG1(FodJ;9EKR]dgc`[XSIBAFGKQ[fotv|}wlg^M=25?Rcq~|umfeknfXROIC:67;::CD4"#:LM>0&%((# #FZN1#3Mei\C/+0C[e^B$'IkzZ6(2@QYZ``ZSSTQLDAELOQTX_b`^`cefkh]NEDCLXhyweTFHVddXPIEC=853-/>IF5  5FH;' %A]X3Fiwu[>.0GcpkN,#<WkiZB--@\kli^UI915AEJQX`_XL@9676:@M[hy}qkaQE@EIUgztW@7<=@CDEA<5.+*0:AB9,#%;JD-  AZ]E!?sd@'/Ko}V% !IhnfJ+ ,NpnaQ@2$%.?HP^eh\N;(!-9J[k|~r`L>7+.=ZytP4*%-4:>=?<4-/32125:8(*<A6#  Df`@#%J~`;/9[{P AbiY9 *KuqT:*)#*7Lbnqe^N;),<KXahkpplggikih\G4*06G`t~ujS<+!);R[Q:-' #+7GF-#8BA,/afDG^1 8^{LLxa, TzC &8Qi}|v^E, +>Rcltqk_VNA<;I^ty_H4%Dcy}eB%/L^[F5)"-=B5!%:KB% T\7;yE 4\{}iE# <c|oIFyyL ;Ueld\L9& 3HV]^glkb]TJ@93)$);Uo}cD&3Wvw_9;O]R;7RQ9&;<#?K'*l{? 4]tuW2!Dwu;Rm1 Gub<#Ji|nkeXJ@<8664/&-A`c.Bl{|Y+9^cU/KbX.25 Cg~@7kydH0'8VkoS#2a}`<()Kur= 6RirzsgS>32;@FNTYWUK@1!!0H^yB PrqF2_j\/)LRB.WG Aum;$Ae}j86rn4\n(:wtI"1Let}zm]J90*-3:8?OqaEV9od%SkM) 7D5pb6CgnY,Ee^7 QSI]4 8Qftp^M=4.(0R}i1U 1_kD CYE   oM+b{[$>gqO[y^Yw]i) 2@LRW[blwzzocUJCA<,#7Ir 7s[wr !n[7VB  ]tHWmW+ 2YcF$L^Aci!/|q;2K_fjhkh_PD:/+)--26CTh~hVA-W>r[\9dZ1+QE:hBQkR" 4QZA*TU'tu*{,1Vyn\G9+<hZ g> q3?O$iwC)QDG8 LgT)6LK8 2H: W],_fAyrG* Btu{qPkP. ZrD?2 &=jZ*6SJ* !;K3&SD? f~]IPsK0HWZS]W>/U#23[ABq'S2 ' D\q65'.`c@8ST0 ;B-B\opb@guKfU; lkEDs T 6 / ( i ^ Z ] ` M <^7Z| 3t%'Dr*s Cpfgc-<  GE!'6- J &]zN$_*y  @ X 8  U8kXdrua w H|]!} fsqwx qn 1vL\9?9/2vRh  } @zq6/wkM @q~a># m t 7 { # R j f \fbQ/"\Q5^Jtq~G R(@ Y _ADWCC 'v  ! ! !?!!"O"}""W"&!y d5zzK& ~G  } 7<q8_Nb1JRYTl,I \#({ 3 v lf]h!#P$$%&a'9(()l*#++,,-#---I--.[...R.$-,+*7(M&W$m"!A\:-+ 'D s n"^6xC _jE& m Y 5k1x^"%~(@+-./@0%1 23>4T5@6678s8888i877838|888w8p8 7653240p.-]+*(d'}&''-''(&())O((X'G&g%]$Z# !?XP d mz@ Y:dl: a? M Hp !#%(+p.S11368::<=9>?A+BBCD\DDDqCBB5AADA,A(A9AA A4AHAM@@ >=6433222334%45C5#4321~0!.-2+)'%#!hx= ? Q|X(Mllrva 2 ' | >h+ "~$y&B'))* *n+b,/1y4T79???a@@A)@@?c>y=.;:8|65H3r1c.,)'|$y!sY^ g J\cZiA%"MP.wl{9!%')+-0B2d4'45~567-8;=@JBEfGJdM)ObQ%R0SZTJU\V0VWQWWXBXuX~WWUTSS4RR?RQQQRGRRRuQPOxNN0MWLlKiJJKK0KSKZKL!LLLKJIHG\ECA@|>=<:8g5S2d/-+(p$!oY  # )N3"0e-2)&3#: yh4AW "#$&)d,/2N4k69U<*>R?@A AiAC DGI~L)NQSVPY>[}]:]^_8_``z``a aoaaa`<_^]1\b[[R[ ZZ[[\V\\[ZYY"XWVUUUVW*WWXXYYIXXVUTSWQOMKJhHFDL@=963)/,/(&u$""ww.KD mI;85i1.,N+3*.))[))+2,Y-.0<2c5q8;=@BEHAJKoKLMMNPR4TRVX[P]`dc&ef~fg%g gfgg[ggh(hZhpgg;f1eCdmcc b{b1aab^c6dddccb!aaD`x_^Y^^Z_`abAbc.cncbb#`_^]?[YWVTSbQOLI"ETA>|;<8;52\/-+)'N$"w 2GD@=6:8765y54`45D6790:8< >ADGILSODRTV7WX3XYzYZ[]_\ahcregjlRmnnnnHmmmn n0ninnonn&m9lak|jiihh)h\hikkl&kkj>iii"hTgCfgLhikllmCm_mDlVk>ihgfe'cya`a_.^*\[%XnUJQrMJUG?DqAS>t;97y5O20 -*&"RqOLTROLJYGE.CA>;9'52--)v%"*@\ZoWTR P NMtLL*LzMNaOGPRT V0XZ]$_naceghj;kkl;lxlmmnoqr6s0stuuZu%tttCtst)tctu u?u>tsrqpoHn&mlllmMnpqqqqq`qbqaq'pppqortucv}w:x.xaxMw4utGs rq6phoonmmqmlMkjh:elbc_W\ZXVTSQOLJlGyDA=<84F0 ,p)w&dab`^\ZYXXWWXXYZ\]_C`bdfhjEklmooplppppqdr rst0ttu%uouuyudu'tttnttuAuuuttrqpoVn=m3llflmnp-q qqqqVq^qnqFq=q4qrt?uvwxfyMyyxwv)tsrrqKpp;ooonmlVjkh>ecbQa_][5Y%VTQO'KGC?n;85'2hkjizh8feedcc4c-c cdcdefghjcl)mop4qrrsost+tssstxuuvv6v6v!v>vavmvcvgvLv uuuv3vwvvvYuutHs}rqpoo2noopqRqr qqq}qqrrCrsYt}uwWxsyqzz{{zSysxvutzsrr4qq}qpp2onmlkPiihh fdc `^\YVbRNJG6C@>LoZo>nn?mll`kkljjj3j-jk1kl8lmSnp+qXr2sstVttu uttbtBtntuuv5v5v*v v v v vv uuuuuvvPvkvLv&uuuOttss1rr3qqrOrs%s"rrtqqqqrrCrsFtWuvwxxy}yyxx^w_vYu+srqq:ppLoo.nnSnmmmllGlllLki{gqeca^[X TQNLSIrsQsxssns-rr^qqZpp"opppppqrttuov&vvvvvvkuuxuTuvuv0vcvvv^vuuuuyu\u$ttttuJuuv vAvhvvvv{v,uufuu@u,ttvssFrrqqr4rr r[s=tHuXvvwBwwwwwdvvOuuuuuuuuuuKtttet8sssrrsVst9tuuyuv&vIvqvbv1uuuv3vwCwwwzwvSutss?rurqrp\onnmmmlmBnnopYpqrrrqpnmlwjhfdcYa`z^t$uuvvvvvMuutissssssstuvwYwxaxxxxx6wwvvtvIvuuu]uttUsssPsrr(qqqrVrs7sstt4tYtdtztqt>t&t.tu&uvwWwwww@vvOutsrqqr rdrrSqqEq6qqrr qqmq+qpp3oann2mm_llm no,pYq]rrsCt+tGsrAqoonlkjZihhYgsZtcuMuv,vIv uu}ttNsssssst[u5uvwmwxixxxxx.wwvvv9uuftt}t ss5rrrLqqwq-pqqNqrrhrr{rzrdrErr qqqqr6rstuv%vhvvw1wvvusrr6qqqUpoomo=oppppppqqppo\nn@mmVm-mKnop0qPr rrssssr8ponnVmll8lll-l rstuuv uuuu6ttstmtXt^tIttuvAvwx xrxwxxxUwwwwvvdvuut|ssFrrrDqqq7pppppq/qqqqqqqrqEq%ppppqrHs>t/tufuv vavvwvutsrrFqpoonnanoaop/pUppqaqqpp/oanngmmNm=mnoqqrgrs.s^s;r?ponnn3nmn?noors3t;tu*ufuhuuputtstst_ttttu?uvJvwwx2xxwww'vvCuudu tt,srrKqqqqEpppSpGpHpipuppq q3q?qvqqqqqqqqq/qrrs?t tuu4uuv8vsvvauutvss+rGq=p5o$nnooop.pbpq+qrr*qq p@oo.nWmmn)nopqr;r`rrrr+ponnnFnNnBnoVp*pqssttu uu;u0tttitztrttupuv%vwJwxKxgx www-vvuttKsssrpqqJqpppjpooo[oPotoop pfppq6qqqqqquqDqGqr+rst2ttuzvvvwrHrmrQqqq}qr^s+stuluuuuutssrQqqppppq2sJstVtttttu#u3unopqrsstttttdt-ttbtuv vw[wwwwuwvutssrqq'pppsttktttttuGuuvv*vTv^vtvAuuQuRudu!tt^tsssmrr)q ponHmwlkjjij jRjjcj?jGjkq7p;oo?o'nnnnonnnoo*op>qMr]sVttuvBvwvvvvw wwx$xy7y?xxx=wwvttsKrMqdpp)otGttu uu u7uuvevvww vvvuDtt'ssArr)qqqqq\poonHmllk9j0ii[iij'j%jGjkNl lmnopqstIuuuuuJttptGtsttuXuv:v_vlvuutJs?r+q2pJookogoSouoopqpq!qCqxrrstufuvvwXx"xxxxxxxuxxxyyyyyyxxSwvutsrqppAou5uuuuuvv\vw^wwwwwwvtss2rqppSpoopoojnnmdll2kk jini.ioiiijVjklkmnoq r_stuvwwwww;vvvwv^vlvvvvvvzv,utsrr5qq/pppqNqrWs sssstqu%uvwwbwxyzz-z;zyyyzyz zbzzz%yxxxzwvmutsrqppvpvww3wLw^wwx7xyy3xxxMwyv5tsrr$q5pyooo^odoo^nn:mllol kk>jliiwiijjojkll>m>noq'rsuvw)wxy@yyny)xx_xwwwwwlwlwZw0vvv.utt3ss[s9ss ssstuAuugu1uSuvgvwpwwwxyyyz zzz#zutsrqqwwxVxxxy yMyz@zzz yyxvu?tsr+qGpp oooooynnm6lukkk;jji\i iBiujjkEkln9oq7rsu0vJw%x xyz6zzAyyzy xxWxwwwwww%vvvuktt~tYtnt^tnttuguvvvNuuvRvw3wywwwxcyyyyyz"zwzz{{5{\{:{z|yjxxbxuxwQvvZutss r]xxyeyz$zEzhz{-{{{{zyxnvutus]rqqjppppppUonmllkkkjjwwqw>vwwKwwwwgvv`uuQtt2sst%t9tLtRtytu%usu`tttstuUuvv.vXvww]www~wxxyylz zgzzyxwpvIuuuku#ttttEss#ryyzt{{{|;|}P}}}`|{z)xvu^t9srdqqqJqPqqqqXpoonzn.nmmsm llm,mnAnopqstNuev@w)wxGxsxxxhxww,vvRuuuvvvw&vvuu}ttVssXs1s/s\sqs|stsssttsssttuqq;pppqCqr7rst0tmtptss2rqpppooooooooppoop ppqr>rst't_ssNrZqqppooooopwqWqrFryyyyyyyyyydx{wvkuNtZsrrqKpppOooo(n2m7llPllolmnpAqrtPuzvuvwUw=w viutts r5qq#pqq8qpppppnpppppqqrqqqq"puooopLpqrks&stCtess{rqponnOmmmvmammmnn9n/nVnorppqrsust5sso nnn9mlkkyklEmynp,qsrtBuwwxtxwviuPtrqpQoxnnno&op[ppqQqrrzsssstAt_tzt$srqpLo$nn0nrnoHop^ppq%poongmmallllzllmbmmnnWnnoyp8pqrset;tutttDt#t%tt"tStwt?t?tupuv"vuAt6sCrxqqvq3q ppp_p/pppp oozonnn`nmm9lokkllnEoq5rsuivwx~xxw%utQrqOonmmm"moppqUqrrs4sttuLuCuOttZs>qpo.nqmn n,noo~oooonmmmJllllllm,mnn5nhnooppq^r.sstuuQu5utuuNuruuv6v"v7vwgwwwtsrqqtpppppfp3pppp6pQpfp@oooPonnnmll;kl_m#noqCrt uvwxJxMwRv_tsrphnmll$l&l7lmnn$nooop[pqrst*tttttjsrqtp=ocnnnooeooooo5n{mm0llllnlvlslm;mnnFn}noJopXpqres@ttucuuuuuvTvwwywxxHxyzzytsrqq@ppcp=pMp9pBp[ppq;qsq_q-ppp:oo~nn$m?ll%lwm n@oDpqsmtv"wiwwvuts5qpnmblkkkllm&mnnnnFnopqrxrsEst5t0ssorqppDppp-pDpAp2ooon=mQllUl kkkkl"lmXmmn5noKopqqrsjtCu(uuuuvLvw]wxcxyyzM{{|0| {uqt_snrr&qqeqBqRqGq^q~qr?rrrrr{r4qqlponmllIlWlmn3oNpr&stuvKv8u]tsrqppnmmolllgllm=mmmlgkl1lmpneogpprsssttt{ts+rrOr)r&r qqqKpp(o)n mJlllVkkklDlm\mmn0no`ppqqrsntKu:uvvv;vw7wx{yyzrz{x|M|}o}@|uttsMrryrLr)r2r(rFrirsPst8t?t-ssrrqpUnmllll lmdngoq-rsutwtt~ss.rjqp~o~nn&mmmm{mmnn^nlkjj_j@jkmmnprDstuuuuu.ttt9ssszsBrrYqponn7mmmKm mm|mnHnjnnoKop}pq]qrstuuhuv-v2v|wwx>xyzh{${|U}1}~S~}v}uuttGssssRsrrs&sttmtt~t6t ss qptnmll%ll"lmJn?opqrs8s7rrHqq/proo!nnnnno&oCoro[ocnmk$imhxghhjklnqs9tvFvwvvvv-uu~u;tttass-rQq}pplp-poo5ooPo~ooooopjpqqqqrsotKu;uv vvwwwuxxy\z)z{||}~}}^w}vvv,uuuettessbrrs-sst t*ttssRr8pommXlllmemnopqrrdr+qq1pp;oo2nnooqop4pppponUliigf ddeJfhj&lortvwWwwww\wvvlv3uuwutssCrrwrGrqq:ppppprpBp4pkpqqq=qr8rstuguuvSvwGwxHyyz{.{|}6}}}}xVwwww}w[vv5u@tOsrrwr^rrssRs~sssZr^poDn2mmommnnoFp`q^rrr9qqqEpppDpoop#pqqbqqqqpomkzh~ecbaa\axc!dgPjrnq^sv5wDx3x-x#wwnw%vvvguuu_tt\sss_s rr qqLqpppSp>phppppq qrVs0ttu9uvvvw6wx_yyz^z{|U||| y&xxxxxxEwevtsrrVqrr*rrsSsssrq/oncnmmmnndo,pNqSqqrqqqqqqqqqqrPrrrr[rqomjfc`V]]`\^{`9cgkpsBvwtxxxx:wwwuw,vvvSvuttbsssrhqq+pppp@pppIpppppqmcm4mJmhn$oJp~q@qqrrsst0tttttttttFtrttu[uuuutsqwnejfd`bay`abethmq't&vwxxy'y yyyxyy0ymyVyxEwgvCuPtrq o]n'm%mlmnnopqst-tuvuuvv%vutssst tttottts>qoq,rAstuuuGtnss:rrrmr.r rwsttu9uugu ttsstt^tttu(uv0vwvvvruuuvu4tttttuauvuuu t*qokhvfadd7cdeegknretw wxybyyzzyyyzzpovnmmmnFnoYp.qBrIsPt{u9uuuQtttts4rq@ppqq*poo\n loidfhhAjlnoq"qqqqyq|qqqqqrrstuueu`usuRu$ttctsssstBtuvXwwJwPvvtsrpoFn mm^mmn88N83y-.2)47 809:;;);\;V;<;:;;5>z>>>>>^==E<<?8@ADAA@c><963e0 -+V*})**+,.r0?2D4457869;H<=>?1?@ @ANB)CDDEFBFFGHtIhJL/NP8RU|WY~Zg[f[\]]z]^d^_`7`aOab0bFa`_^^ ]\[jY-VT QOILID?O9Z3--("#'f)+,-./3/P/h/V/Z/c/F/y/01v22222322l11900001283'4D45U44220.H+j(Q%J#! e !"$&G(M*J+-+.//0123A33445156789:2::;S<-=>m?AD)FIVKvMTNyOPKPQRPS STZTUV VpVVVVUSS R|R!QSP!NKI0FDCA>?:4r.(#($3 !"k##E#B##=#s#i#$6% %&;&&&&'&&o%%:%$%%a%&'^(@()&(('&%" #KoRirX "#A$%& &'z'((7(n()|*U+h,w-Z.1..../0d13k58 :=A?tABD DEFrGmHWI"IJKKKL\L:KKIHGGlGFBE#C)A><9Z63|/-)$; h:gOc1sI,Uth}Rh m =0}O4r f|xL cxoW !""#d##i#F#C#$&-'),:.1*3\5}6789u:w;v?Y?@H@@g@?@>:=,+ $/T0~Nu[0g:+K W n Q 3 r 7 !"=kJz5CT4BA2n`Vfy|wY@=W~I3]|EUY7\ ku~>}1x2JGe/[!0G;_A:Frd-V `o>(Tlk_<!dt4.h sTHQVeve8xGcL9Y}lkn&QPVHfFjYU@F?+{m%8bznA ;~3&Nn$20>FD:8.#rJ(.oN 'OCWi!_%%s `1j_ (w0c?2y*_N }!~L&Gi!15IRO=5! h5,VDl BPR|Q?$Rqx;#|=sy zA4YL Y#*nw8}q'kE^[!`@AF\oz]A*"V07'e8(uV. BX+ JG+&s[!^0Qe(=NY8r_TYZbku|yk\NA<4>Nw3L<,"{I7-tr,2]w2tfo//? /Q;28@'cVHILU[^^[^^YTPTXfl8ZnS<G_ XT(\{\Q0h"mo@uIJC0eF[Y#t#iWM?4%"):BKVj )<( \ c \S%?pRjls`${/Zy1/N*0+pj!I w -T:!u/ 5bnS?*)3IYj|W)^1KE,}Wccm,\c9U^~bEOvYg V*=TqG(.8VpxoqvuN- (\7CM?8't+kPVUfw('5*]wfwl5x5 A Q{S63,5DWaou[3 &Fp/JMj3 fl&%)PB/r47;M`^6a=c%l^h2|rQ3-.>AQqrO8+@])A  K(-fI$gX!pZ tGZZAM8Q`(IyfZYOSeoM5-:@Sk6= )nL#$XMob# LH>- lKPCT8/O!3emWPUfp{qbWFCMg{b%UT Lp2|e/$ej+4 MNWv#mE6 3MF#b}V+!Jwvhbdaep|~lZT\bsT Yj*>Wt}2wo.$4 7e;m^ 'zEJ<7Q6uS:<Casf^ZOKNUUZew]3 <lQQ?58=svL "E0MY9:V.tX*rh.y $dhKFNlzeS>79J\qh?%4^iC t/IHx<<:  + /[`,!^S#>V FhS-S|}fVY^p{nb`bmz~lVE5@]~Z& +;3?klI #3$ =_O+1bY+:qs7(z)U"8YzjUQS`kv~|yywm^PAI]`G9:\YoMub- IR<CviB(+Pzf17v%"o>/+D\zqdVW^o{yjWKBGNdbM995V[W{1A__G# $1  %?B'*QebXF9<DZ{vP%%[RgmSQSdq|omyiOFKbxu^TQXR^z] &{x.4UgT3-0,%0=8J16R^WB33>VmymH29bW f~`OU\p~sut|uh[`tn_\XaiU4zK&2Xd]O><8"*8-   1G='*BTP@6:L_^\n||gC5N}o)Hlfeq~xz~vy}||zytyIFuH9I`lYBJUN7 !9/ %>KE/#2N_\H8AV^cmt{s[GAYo8M{vy~vstosI$$TzWIQfkcSGPT;!(;;  /KXG11Fdq]B>M`noikpyuZJY}X02R}{}zwvpwO-=myTRfssbONRQC#,GE) ( =Z^M:6Lgm`PIQev}ztnZQ`]>6Tz}zwE09fu\U_mmcZSVSB/#(>F+ 1&+F]^I35KfsfPHVrxx|~wcWZplI=FolE0DjhQXnsk\QV]YJ3'4DE1 ! '*%#,AQSH:9NfmcQJYr}~|yteY]p{aQ]xmNK\||idq~vga`c_L9-2DN=""' (1(%8R\K68KcnaMGTi{|tvy~zj]Xg}li^OSrxv|ociqjV=06DLE-%4/ 13-)0FUO@:BTdh`TP\nutssvvrj__ltvq_drnnw~~ypifkhWD:<FLH8$%- &(7>:5;FNNIEFQdohZW_irsnklsvpf^bpzy}}xox{k`bp|xkcagjdUA8?MPF8*#" (4;?DIORPLFHYgf[UV^jtvsmlmopllq}zrhjxzutwzyrjilnh[K><GOH7*$$& #3CLMNMQRLHMV[\ZXZbpz|thagt{}{y}|rq}~pfcgjotwuv~snpuvoaRHFIKF9,&'('  '2=DIJLLJIJOY`da]]cmy|tifjmrturt{vpsvzoiipvyzxyz{yvqmmpsqi_UKHIJG?81.,)$ %('%'/;EIIHKNMOW`ggc]Y^mz|rh_[akroiho|{ulkoz{y{yx{~}vh\[alsqgZSPMLKHB<<=91)! 4HOA+3IYbYI7*/@R\R<%".Hm~dK=;GKSaih[QIFFDBACDJQZcggfkmibecVG=@IYgswvsjc`cfeaYOFB>1)-521?E7$#7JOD6,,10*! :KB*.JafdS<05I_eY< -Ni}tZ=08CRZ^hjaRIGEEEFHKMQWZ\YRMOV[anrj[QMJOXgu~{o]MCGQ]aZM@;:3../&%8HH7!.BH>+%'(% 4LJ,CfxwaLA>LfsjI$9VicS>16G]ihg^XK6'#.6CR[_YRG=6.*$(/@Oay}wl[MEGFMZj|kR<03:BC>=80)&&"#.8>8-! 7IE1! 2JN<!BsqO<EZt~T >^g`E( 1Ur}{h\M=,(6EYbbRC1! );MaxnXI=+'.Gd|oL.!"/68842.*('(%%*198()<A7' 3RM2#JyeD;Lp}Q =Y^P4 !+KwnR:*($+4CT^aYTF2%1?LU\alsusuwxsqcI0 $9Un~wiP;,"2FOH5)#'4DC,!3>?-KP4AxX3%@nO !OuzU%%U|D"".BYjwrhQ;% $4CO\cif`XUTMJLYj|~_B*CggD"%BUTA4)"$&-:=2 5F@'FI' 6u{D"&?jyL&$@gzf:EuyR$7Retm_C(2HXcdgbZPHC;89<865?Ne~wX84Yx}a37KWL:! 3NP< %;A, >A!e{A?mm@#$Hzm,Lf5=kh7(OkodUA1&''.7>?;644CVsW(BsX" 6TVL.Gb\7=D/ 8Ut: 1jrZ@3>ZoqP'Zz{[8'.QtxI(Jiu}rhVC70338@IQTXUPG=606CYjE*Xsd9 )Wg_5$JTH#(7#>wo:1foE,2Mno:/ml5av7.npD -G`p}~}tk_SJ@=AGACNlhFI6ng(NiP' op8 3mjD+6Zz}d2 <[T.PRKyyW2,BUfytbN?95$*Dmg*tQ 7dpIB[L Yn?1jk:!0]b&UpQ S}SN"-1468ANas}xjZONK=+#9k 9pWli*vc8\O!J_5XmY0!Kv~^(*O\<dj)-z]#.DYelhdWH8*##)4=HS_lyrY=!Y 6k]^>f\6-[T %Q,LfI@ftY'7\X%"{|2v/LSr^H5%$@^sOd=f0ESdwG0^R 8%DfV(EejZ;"#CXC OW(lm!%ad@*:ht((tmSkL0 [wI#VF%,c\1EooQ:1?Q`EA2D "ei^)oC!4>EX_ZA" "LpgHO~< }Dax@#P= LW:0XhL()?YV2!0cw{sBLQ2nXDL]~/>XbbH'4uc,/oyal2i/W-Ni;@ AQ1(FO@ 5Y_3/Ab}3{q&`3 P;s Rb,U;/~< }0TB;TCPk= yrPB1KTB''YmGH78FUi')y3T; !>-f-PBdF`@.xo/CL >@_4}r 6:&.MR?"(Jmb"#w.Tay0eOA(/WYQdht C U  ,M nou1K 'oe 5vwodbDa6 xJ  5@* 0SQ!U+3r9M,{! ;  'C<6_yKJ8s 6v]14t'+F0wnwz z{-Wcp242F) J&K[pO9 w o :maI R zq? w9  z t e c >  1 H . U  <3#ohaN1&YkCcw-aGTt3M 1 tKkNs/, !"#,#######w"! Z wMFiI2P@m 5 ,gh&!U@1|L>x61}.-="$06 h F r p Q u H  D-"$4%y&'=( ()Q)*+V,;-+. ./-/G/////X.-,*)(o'%$"N 'hx/IRSc:xX<4  K? N :C l KjLvP!|$'*-r/1?23n4~5c68678T99:T:::f:R:+: 99n876Q5C4W3|21m0.-^,h+*)('&&&{&&'( ())-((''m&O%)#"] #+ i $tESWNL}  ZyyX2B>l ( @ Y>Mv5;e6!k#&),0368;L=>@AjBCD1DEeEFF:EEDDoCCeBB1A\@??+>_==|=CCC`BA@??I>>>?H?@~AUAA@@)>=2;N976S4F2/j,*'R$ - ; h Xs!g( ?Le[%! $&),/01262s235H7:=@PBEHJKMNAQ$SWUTVWXY%Y?YoY|YYYY0XWW4VvUTSRQXPsOOOOOOJNMMMMbM LqKKbK?KK+KKKLLMPMMjLKJI3GAEfCwA?=;8E41._*'a#{ %Fg~-h 5 o[,*I'{$U!n@kBe $'*-14$7:;@CYF%I(KNjQSVY\^e_`avaaabb b bbaa?``_a^]\[ZZcZZQZZZZYXXXhXWVVkVEVVWvWXJXYYYYYXkW USsQmOHMIK3I7FC@O<85r2.Y+'%$ "! e \$oQ  r9630-+m)((!';&&?&=&.&&o'),03W6B99X[C]`c.eufggggggghhhhggxfffeidccKbbqbc)cdRdd8cbb a``F_I^^_`a|bQbcWcdd!ccbC`_W]e[wYeWcUfSQwO$KHRDm@=:742;0O/).,+7)'$!p]'EC_@[=:764432242A22I2C359H<'?&BEHHKNPQRVSSTvUVY;[^Z`c6egjkmnJnnnxnAn&n&n1n>n;n%nmmmLllekjj#iiiXijllmzm?lkkZjj!i]hOgghj k]lmBmmmmlkjih[fdc*at_^~\[X*TPM8JGDMA9>>n>v>,>e>@-B\E_GJxMgPSVXZg[\;]]^<_` acfhIj9lmlnpq0qrqqqqrq}qqqq~qcq+ppp'onnmll.kl2lnJopq~qwq;pp'oo!nmmnmnoq+r{sKsssrqponmyl5jih\gFf\e+ca_[X#U RVOM0JH:51e- (fAdb`?][ZLXWVV}UUUUVQWXZs\^`Xbdf?giDjdk kl'l_lmmo'phqxrrPrgrs.stFttt[tst$tstuuttctsXrqpnoRn;mmmmnoq;r6rs's5rrrlr+rrr}sHtuw6x[yyyz yaxyw#utts`rrqippIoo6nljhfrdca_][ZYBWTRNLHE.@<}874$n[ml9jhgQedcbbQaabaGaabc0d>eg hj*kulmnoopjppppqrst%t,t ssttgtuu"utttu5ubunurr6qlp}onnmn n%nompqs+t\tu?tu tSs$qLonlkjihgg>f-dtFu}v1vvMv ugtssr\rr*r?rrs"tufv|w]x@xyAybyy{y9xx(wwvuu tzssKrqpp;oooonndnno>ooooyoso{oooko$nnnoopqr6rs/stuvCvvhutfss[s7srr.qoq,qor*rs rrcr(qqqpZokndmm_mmmnRo(p$q=rdrsrrqqon lkwjj1ii5hhhhs'tpu2uuDu ttsNr^qqvqqrrHrt uYvkw5xxoxxyxxx(wwrw)vuttKsrqpp$oyo!nnn$mm&mm+memmmfmXmtmn)nknwnSn/n8nJnopqbqrArsXtEu[v=w vvvuu ttAsrqpppqrYrrr;r"qqqXponmlllllm"mn~opp#oofnnfmgljjiiwiiaij(jkrstbttQtss)rqqpq2qIqrrstuvw:wjwwwwWvvavuuutkss rnqppo`nnnvnJmllOkkkkkkkllmn?nnnnnoXppquqqrSrstuv~vvvuuuHtjsUrAq=pq2qr}rrr\rNr/rqqp nmllDkkk@k8k@klmm@lll kkhjiihhhhiijkirwstt7ss{rrqq ppbppqr/s8tUuivjvwfw]w`wvv9uttt>ss&rrqqCpp,onnenmn2n%mlykk%jjjjjjklmmn,n>nQnhnnopbpqkkjj8iiijk3kkbkjjjjAii.hhhhi*ikksst6tNssjrrCqppIp-ppqTrs)t7u+v vvvvv+utss@rqqptu umuuu$tts>raqqiiii:hiDik%lnp&qs1tvnwYwww!vwv uuuu7ttttttqssruqqqlq%pooozoooocnnznopqrhrspstttt\tssrzqopp:p6pqTqqqqr@sFssrrqApIo#mm lruv(vuvvvvvw wwwxvduasrgqooHnqmmllmFmwmmmml'k7jiij)j@iiiiij$jjjjwj]jkXln;oqOr}suLvxxx}x wEvvVuuttt@t6tFtCtssrrrqponwwkjjjjCj9i]hhifijek kklDlmnboqrstNu0v4wxxxwwvouuutt6ttt-t8t#ssOrrrxrrr@q]ppSp]ptp>onnnRopqrsit tuuvuuuQutttu#uvvwvv3vvwQw#veuunutXsargqwxxy;yyyzz{L{n{ yxPvtrqq/pq}qqwwwlw^w"vv"uuFtsrqppooAnn,mmmmxlk[ji:hhhijln}pSqs ttOtrsrqponn mVllllm|n?nnnunqnwnnnVnSn!mmDmJmQllzlstas8qoljhfddcdsemghj klmnsnnxnIn1n-no=opappppppppoaoodopvppqqq3ppo*nnoo]oeoopqrsVssstXttttuujuvvuuuvvvw3wxyeyz zz~zzzXytssrfrqqq~qGpppapJpzppp$ooOo1nnfmGkjIhhDghhPidjl>noqsqrbqHomykjhKfeweef)gni j]klmnnnpmtll)kldm)nDoopqrstu>utHsst"tRtDtsss_rqpp=p$p-p_p5pCpq^rIs+st'ttu]uvvv:vovwwiwpwa_`aBdglq#tw~xyzx6x~xy"y'xxxxy;yyyfxwvuZsrmpoIn.m?mmn o!opHqrsGttuvv7uuDttttrsscs;sRstutt sqqolipilrmoqprqqqppDoopDp_ppqrsthtVt>ssTrr2qppppqIrst#u;vvvwvfutqo lHjaihhhiujl-mnnmejhfenedeegim6pzs uNvmPl{kjj.iijRknlnSopqqr@qpnIk>ghc`^^_]p]^ _bdqfghgedd'd*dUeefhkmoqrTrrs4srr4rrirs8stt?ssErIqDp nmlkkklrmnoyppqrspt&tsrqq/ppKonn=mmnXnnn1lj*fc^;YZw^`bc>defIfnfg!g|ghQhiajjkdkjj]iQh-feeccEbbcBdfdh]jTklflFlkjngPc^Z:VT\SRtRSUWZ^2`bjccd de2efgghikalmnnZnNn|nVmmGm+mmno^opooo/nmlkjjdjkmn[oKppqrsswsr)ponnImllk/jjjjj"hf7cy_AZUlP9OSUWY(Z[\{\]N]^&^r^_V_`aOaa``^]\K[)ZBY7XWWXzZ1\^3`UabYab `_D[WRMJ\GFEF-FrHvKNR4U`X Z \]|^`aGbbbccud deeNeeeeedddeeffggh&hhhh]ggMfg ghjZkmmno~p8p_puonglkjihhfedddcb"`L\YhTOJKDEyIKMOPQRBRsS SSSTTU@UVVVVUMTRQ`P1OENGMLLMNPS*U]VW_VVUlSOKFA=;::9!99;>OBEIL1NPRTVWXYYYYZZ[[k[[[[[s["[[[\]A]^_`abbbbccdf&gi+jkllmmhmkj`hgeedba`#^^ ] [YWSNIDf>8:A>N@BmC@DEFFFtFFFFGkH#HIIIIHSG'EDCQB_At@??@+ACEGI"IIIH#FWB>:5>1.-,-[-/1588;>@BDAEGdIJWK>KKKLbMMNOOBOOOUO#O'OOPuPQRTUWXY(YZ[\^"_aFbdredf0f]ff\ed2bp`^]\\ZYWkUTSFQNKG1B=F8/2- /*3 5D67|899::Z::::;W< <===<;:9^76544333z568:<<<<;g962-v(%"! !@!#S%y(, /L2A468+9;K<>#>??5?S?@dAABcBCWCCCCCDDDEFHJLNOPHQSTV2WY[]N^^^^^$]0[UYMWIUTSRQONLdJIGC@V;61K,;&!J$')+E+,-. .>../)/u//01t2110/.-<+*])J(]''G'q')h+,./000/.*'#"Xt!% '*:,U-/f0223f3e3[3]34"45\6 67R7777778E8i9Q:<>@RACDgEGIOKM!OQnRSxSSSRQOMKIIHhGFADjBA5?=;8W40'+&!5 Bl !t"""##$$?$%:%&V&%$#"i!,/P "!#$$%%+$"Z BcpB4O o"q#%:&0'H'(=(!'''(r) )*+,>,y,y,0,,+,>,u-m.02n4'57R8:o<=>W@hBE5G==[<;D9x76>4g2/,)K$ .x }|;/i"5Mi:AmMattI H 3 m C KPdg~=( !a!"!!r!,!!!!}!"#%g&(*>+-&.0247-9;=>6>>c>$= ;975a332j10{.-f+)'Y%P"{9 A * fL +m@  . q  . Xd^W 0 >1[j <;d((a|/5 j~!V#%,'){+.$0`2G3 33Y310.,*).(j'&%$x"  ,t 8 XGZmF!/m     2R="7@ / N Y > 8_ d { ~  $ _ f.|E^S\ #(%P''((d(-'.&*$"!Pew  qCte_^;Ar]TE4f_F}\f4]MM]* T("w'/)SN% [ eQCQqG+ !#,!/A^uz\Z _:cyxdP02}`&"O> 7FeJEze| }  :gxJ^`]}hl !ftjke RM8z~~G- 1Ejn07ca1mg {o)UGLA.iu? mS)!Db !->CB3+a1 ']~={hpN8&a^T1hs~F=ZOKx .|!A[S5VVeKIDPaxlP9%O+6(jSL*q"Ym*: SR/&eL$n<LY !AOW6pSFPV`gmu|wfTE:81;Jr #=1&)5Z_ q]&~#>$Ck{: ns$#=-IN;@G/|WNBFLU[[XTWZVPLOVei2N]A+M}/"*DLYxa\ >s#oyI~G?G2"pKZI 2}-wbTM@2"#2;EObz 4Zq+9&o!N '^4tt~i46Z.5T07&dto%M6N8 l2$7d}iO<*).@ObqT*i9YS@5AuFK&mzMbi d= LsW u.`4HO zO-1?a{torsyqI('a :K[O-rZh]aer&1}- %[t\H<+9 PX=<8=?HQcy]6 >g3L_|9!ak vE?~=>=;Oad5Q:x6u"ce+xxX@9278JioN4$ 7S4S %=m[C1te/ s$c,PXG=_(=QVDsaXLO_whF-)2Jb9I4x.|LD/}p 3%TRI4 gAONY:,{C:ggPKN[cn}j]RA>E\q_&] _ 3Y!p\/)kr6(B QS _|(kB; DOC[xW5*+LtjaZZUXcqz}{hWPY_oO!Zz70Fnw ,qo3(<";j?r` sAMI 0K,utV><?Z}n_TNFDFLLR^p}Y0?n_%V3 /@uyT&I8S^> >T$mW +yk%tPhH@Ilx_I3-,<Ndy~d;!3atM(u% 1RH )C@( 3^b1 &aO;{[ KqS,AofX\apvh\ZZdo{ygTF3;Wd27{*)@ptP*9* @bU5&7iV*6iw90&&Z2^sZPO[cmv~|zyvm^QCJ[aNE!DdMj Dn`- !  *Q\J(J{fB*(Hwk7$<{*r9#!A\{|gXX\iwueRF=BG]~fQBF@^aKs)8X[I' -9! 0KP30Tb\VH75A]~V((bT _aGIM_qtoxx`F<@Wkq`[X][ja"nh" $F]P5494, "=G# >R8:PZVF41=YuuK3@nV ^~cQVbysqs|tgX\o~h^`[blb 9vyA'IWTJ=?='!5D7   2I?*$.BPOC8:LadfziJBYp/Dvmqxsx|{~wuwzrtY QlB5DXaO<EQM8 %@9 +CNE0$/GYZF6@Xckyu`RMcq=Gz~|uprqwU20[qMAH[^WJCOU?&"/EG'  !)8QYF/,>[jW=<Ncsxsqr{zdT\wZ2-Bu~~yyz{xwyv~Y8GtrKH\fcRBEOSI,6SR7% ".((D]_N93Hbg[NJThz~v}q`T]ybC1Fn{yN8CpvZR[jgZPKOOB2%)AK1 1) 0I_`J45JbncQKXswtvzwdVWjvO;Co~pK6JrpUZntl[NQXSD/%/>@. !'*%#+>MNC77I_haRLZp|}yt{}sdX[g||]LZvtUQblenyqaZX[VC1)1CK=$$* '/$.FPC22C\iaPJUi{{stwzvk^RZwugez}gX[x{w{ubV[b\I2(3FPH3",:6"  ..&!':IF;5;L_gbXS]msrrqqppk[Vbxxx~~vdgssrz}ui_[_]L:/4CNJ8'(0"   (5:724=GKF@@Lbpk^Z^goqmfeounbZ]gz{prt{|~xpw~pfhu{mb]`b]O;18FNH8&!!"+3;??@GLJE>CUfiaYX^irtohhklkhffoy~~}vphlz~yxz|yqhccc^RD76?IH<.$%("   %5DHEGIKJEDIS]`_[\coxype_dovwoikwvmm{~yw{}rf_^djry}}}~qjjkiaUG?=AC@:3,*,-%  #""+7=@HLLJHIINYbea]]akvyrgdgkomjfkxuoqu~|}zsjefmu{}{||}{yupnqrk`VMC@AC?875/)(&  '*''+09FNNJMQOPXafec^Y\ivyqg_\`hnkhku}ulihoy|{xwy|~|~ujabhqytfTMKGDDB939>7+$ 4IPC2&%5K]f^P?12CV\M6  +EkgN><HQZcc\PE?=?::@ILOV]bcb`bfikrqdTKNT`ipxzxqmh`\]bgg`UMGA;/&%*,/89/!4LNA;778:4%6GA+*@V``Q>5;Pioa?.JcwqZ>16@P]djcVG??>@=>DMQTY\\WNIIS_m}xg\WQSV_jszxtfTG@GVccXLA<:4.)%*59. ->DA82031" -DC*!DcstbPFETlwmK# 6Qa]RC9>L^hingZC('1=IR\\WKA7-& ';QiyfSE@:AOcv{yfO<49<@B@=6-& !#&-.# 3CG=."#'#)@D6!#FtxZIQhP 5T[U@++@ay|mhZ@# !/=OY_WL9& 3Jc~~bL:!#@^vmL1&#,4970+'#"(+ &01' '6CB4" *GE-(P|iJBSwU! ;X[J,+Q~kO;32% #4JXZOI=."&2>KWcr}{t_?#0OlznT;("0BI?-'$'9<.5GL:# @F/H~Y5%>lZ((V|Y$Qt=)-6I]mlaG0  (4@IQV[\\[_b]Z[fvuS6 ?hhB $@QK6-%-64'#>SM6>A! 8y~E%*AjV.'@evb5 :m|S&;[msaP7 9TdlfdZM@998<ELLKLTasoN.7`~_0/BRI3 +LT=2GN769 c}DDpwM.*Gs^<m? Dr])&SvtbM3"%4CNUURONVbvNJ{T0RUG#DaY3 +HL4,O}q; 1j~o\G>IcsoK#QmoT8,4TuS#Fbn}|xfP=21.29FS\ccc^ULEFKZex{A0^vc4&MWL$"CMK20:#5pk:0d}i?*6X|x>8qc+"co< $flL.-F]n|qeYOIDB9;Edg OC*[rREk`3'im: :qmF-<er9 =[O#TS9apI#&;L_xr`N=/%>fi,uJ'UfH Djg5 TlA =utD)9jv4LgFN%hA $')&$&$1IhrcSC1# 1h4hPngnl%Gwn4 !CZ5 'cw`6$O}p;-O[< Vt0.{J+PmtvfXF4&*8GXfrz~hQ6\1mXU:jc7Izr0J'QmO<bs_5!Cd],ou4r34zFp}cL4# "5H_z~fCiAg4GNodrA N|h-DhZ,Gdh\D47T_C BGn|5wWW5 !"-?[wv,-nnUp>rgQjI <fN*c_4MwsTBCXjqI 4P2pd} jm]A&2QtcJ5',2H^nNQ~3& qs1RuR /U<MY=9aoO,4UyvK"1g )9%}r{zyv|%QjH'Zn-/nuXq/U 9Pa#D {DV63RYE ?oW8K\{w)*R*+:+n+U+^+,-./G/y///h.z-Y+v)x'^%r#"{!t dua*QRKJ  X4\) %3@qh  {rvxCK | |XNR!$1'+/]2k456I7D78888899:8:{:\:Y99{8d7'5S3Y1n/.-{,,+++n+?+5+ *))(&''&&&&@&'(\)<))) (U'=&9%$'"!*zH n2rxFr < s G%F G :P;e i "e%(,/*26:~=?ABDbEPF?FmFHEEEEEERDDpCBA@&>Yx\ @ S8DzJ^/^u\q  YK#' G ~%w` "%&&&&g&(*-)0j3x69i<@EHKNMOAPQRRRZQQPPP^OOCNMLK7IGECBBAAAAABBqBBBA@?? >t>u>u>?@ABPBB A\?><;:9c752j/>+(@$q B : k  mF!EK/ d & 9:9! $$&*j-?/01`1U1J23n6 8;>AMCFJO RUaWY7Z[Y[[ZZYY5Y XXWWVUT'RPNM0L KKpKKKKKrKLCLLL=KK"JJJKK}KLMNCNMMQLJHGfEDB@=:B62B.[*u&W!|de' ,*M'S$  /F 1>$+#'**m-047::;;;<>tAID2GOILOR4V=ZF]_abccd5cc bFaaQa```d`%_^]\EZYEX+WWW:W1WmWWW VVVWVViUUUVcWWXXYOZJZ[.ZYXW-ULStQP N4LTIKEAA<841,(%W#"#""":!O ]xJo I 9k794@0-+))r''%%$p$L$,$5#$%i({+/_259GYIKNQThVYj\_`ccf1ghi#igi1i$hhCggfffffffUee`d{cbaaHaaLab$bbCa``d`/__F^t^]^_`abcCcde eJdcba0_k][Z'XdVT%QLHDI@w<9!52G0i/e///o.-k,K*@'$!MusKFMD$A =:7643211X000j0?/0(147;>@AzDHK-MLOOPQ QLRSSVYI\P_a|cfYiXkmnookoRnnnznmmllllll{lkWjiiNhhigjck|lXm llkjYihh(gffwghjklmnnnnMmvlkjsigsedvca_\XTPwLI*EB?<;;;;;9b853h/+'*"R>PTM]J(GDBA-@>==c=J<<H@CsFILORtUVXYZMZZ[\^aLcfvhjpl!n7oq@qrmnp!qKr4rqpoon/mPl1kkm nxp;qrstt:ssrqCpoonmlOkWjNirgebR^ZWhT=Q)N|KtI^GGdGxGeFDCJ@>:61- '"^\zYVSQ=OtMLaK JIIIIHHI|JwLNQATVY{[]_awbcccdUefhjln6oWp@qrsst?t sss@s+s(s>sNsJs4s s rreqpro_nenmnoqls/tyuvudut4srqqpopLqsQuvwxxyxowvnutt@srr qZppnm@jgda^\bZ%WUSSRRQPNPKI{FB<729,feca2^\oZXWVpUUTTwT{TrTU_VXCZ\^`bdQeghiiiij@ktlnwop+ppqras s`sssssrrrss:sXs]sBsMsrqponnmnno?pqrsssrrrrqq.pqqsVtv{wxyyzyxwvvGuuBtss6rr q"on&lHj7hAfndcaj_^J]\[ZYWT{RVOEKFB<7onmRkihfdcbaa3``````azbdZegGh|ijlmnroonnnopqr|rqrSrLrs$sstssshs$rrrrrrrs%scss$rqppBooopppq*qppppq$qqrsu\vx[yzFz{{DzzLyzxx4wwvgutts^rqponn mPl~kkj+hg}ffe1cb _]G[5XtUJPLtGhBss|rrAponmglckejiiiiiimi#ijkklmin'nopWq1qqqqppqrs2s\rrrdrmrrrrrrr9rqqqppppqr!rrrqqKp|ookonnnnnnno6opBqqrsudvwxyizz>zsz6yyGxxBwvutsrr"qppvp$p:pypppppHonljig1eb`^[X}TPLvwwwwvuttsrrqqqqqeppqqrsgst&t{ttu>u7tt[ss;s4stGttssPrr3rqqqq&ppppp8oo[obopppq0qppoo-nnnJn;n*nPnno4oopp@pqijk5kl\moWqjsKtvHwwuwewwwvutqs,rrstEtJss-rrr5qppon&ljihhDgRfeefffffMeeeWd]c aaba0a_a a@acne u{vEv3utts0r.q;p4ooppqvr"sttu`uuuuu%tvsfruqwpomlkk#k jjtihhghIhgfe'd`dGd0d0cccde f!fg/ghVhhiimj jk|lVm>nprtGuvwNwpww vvv4u>srr%r,rs rr`qqiq-poo^nml9jihgffehe_e\efgff[fffglhjm4or suvw|wiw!vrvuutssst ttttMsrqqqjponm$lEl lJl?kjjcjkmko*pqBqr'rrrCponjlk\jIiieijklmOnnooooVoVnmlAjii6v?v.vovvvvxvivwww]ut"rSpo3n*m{lekk{klmm lblkrrrrrr_r^rssstssr+qqHqqop_nGkjNiii4hbffgiQkn4oq r?st/ttJswrrerJrrsyt uv>w>x#xWxwwwxxx wwwvEuatw>wExxyz'zo{{}T}|zxFusrqppo0oPp&qs1t!tttwsAqom|kjno opqAqqr*r$r.qqipnomllmm)lkLihggggKfse4eegjQlnoq2rrssr|qqqr|sstuv\vwVwFvvSuuuuuuvuuu tx xjy|z{|F|}~~c~{xvsr=ppeopdqsu+vJwEwqwvvAu)ss$rs*s/srrrs&s1rrrYrErqqpXoppDpNonmmmnnmpllmn}oFooooEondmlkihhiWiihgqfmf:fYeeZdsdxeg0ilen"opdq1qqqqqpqqrrs]stmttttcssssstt)tgtytBssxy'z={q|n|}-}~~u{xv-trqppgpqs{tuTuuvuuuttu(vvvvvvvv^utss#rpon;mtm$m0mlkMj`jLjk@k8jiijykLl l`l/lkk:jihgfffhg-hhphg>fsfjffhee3e&egKikmbn'olnprrrrrr;qgp8o"nn.nnnoonnoo4oio~oop8pq q&q pq q1qqrgrssGrr/qp*oo?o6nvvv^vLv uttsCrqponmm'lwkhjjDj9jihxg9feefgNhj.l)n oqrpsrqqp nxlej8hgff"eeefgi,k?lklZkYkjjjmiii%injWk^kkkkkihh$gh5hj(k8ln0oqqqqqrqpp8ooopq$qpppq q?q3qqqXqrr qqqqr3rs9sttst2srzqq ppouu8ttatsrr$qWponmmlJkjihhhh[gfpe)dddPefhzj}lnprsnsrpnakiJf{d*aa `oa5aceFgjklXm(llllgkkfkjk klgll\lnlkzjxi_hhHhicjk_ltmopApppqNqrqq&ppqBrrrr@r!rGrrrrrrsAsssus7s!s4st"tuXuv/vuvt}ssrriqu+thsslsmlkXjj2iihifeGdd d;enfhJj7ltnprs#s=qKnkifca0^]]w^`bdfikmhm^m0l/k?jaiizijklmnop_qVqq{pppqqqqrhrsrrhrrRrsrrcrr-rstu/u7usuvww)vvwwWwwwww*wwwxxyhzzzzz>yyy:xwu,tRssZsZsWsHsrrhqqxqppoon mBllkjhgeeWe ef:ghjlnkp=ppolj;h;fQca__I_{aPc+eSfhjln.mmkj0irw"y{|}.}/}}}}}}}}}}i|{z9y)wv;ts6rqr#rst>tuuvqwwwwwwwwx0xxyygz{|]}~n~dW:~F}+yy|yyyzfz"ypwusrAqq5qa`^_R_bfk~pBt(wzyD{{|{|} }>}V}p}~~s~w~}|zxuvtrpoan2noq(rrstv8wfxfxxxxwwuwwx&xx#xyz{|}.}}`}{zv(w wrx*xyxwusqpjpooop0pq#qhq`qfqpp o$nnoprsstuvrvw:wvvvwywwwwxyz{{{g{lzzwtokyh3e.cb/bbehmqqtwxzZz{z{{| || |3|}}S}|{oyx vjtrpQnmlmnpuqcr,st^uwCxzxyxlwwvvvvvvwxyGza{0{U{zzbxwBtUuv vwPwwvsqonnn0nMnoHp5qqqrrr'qq8pprsQtuvwUxxyAyxxx:wvwuvwy yyyxwusprr@rstOtts#qMo6mlmlmmtn\opq_qnq~qJq@ppOoopqst tuvwxxxGwrvTutsr#piowooprssttuYtqnkitgQf]e~eegimpsvw>x0xbxxxx5wwx3xyByyy"x3vuQsrp1n%lklmop|pqstruvw wvhiuiiiikl5mJn&nTnnmmlXjthgghhijLjjk6jjqibh&feef5hfjm@nopqirRrrr=qConmlllkk]jj0ij$jjtjgeLaD]}XSRVXZ\_^^___```aa9abbbGaM_=]H[XW TSRxRR~SUSUWZ]_}`T__*]\Z V2QLHyEEZDEF`HK)O+S^WUZ] _aAcd-e|eeeddde,e\eVeOddmcBao_^^^_p``apabcDcObaa`N`bdg.iklmnWonnmlCji(h>gg,fedd ccba`]ZVQLGHsLYNPR_T TU*U"UVDVVVWWXXXVTRP^N#LIH<;]:E:19:]:<>ALD4EFFNFDCm@<8 3?/,,,+,- .1+48<@^CTF5HeJLDN@O7OONfMMmMMN-NoN/MLKLII HHISIdIJLPNKOPPPQSR(TV@Y>\s_\bcQdFd!ddcb`^\[Z$YYoXWUTRQpPMKG'B=9u4/w15J79[:9;<6>?[??$=;9p64~28/.,,,--w/ 1368W9[88763/+I&#] ^ - "g$(+/369f@B CCwBB AW@@AAuAAA@?>o==e=:=f=3=>@BDUEGEFRGHK{NXQUX[7\D]\\[rYW~U&S4QPPPpOrML;JHG EIB?;861-T(#&)+-e. /B/0p0112*2223t34'3A1/-0*( %#0! t!!}"$'o*+,,,++'(%& ,}!w%R) ,B/F1s3567Q7665F44455565e4\3,2V1111X124y6>789:{<=@DHLNQRARR%QPoNyKI^GFEEEnD|BAL?=;963/+9&"N!8!##$%7%&C' '''(N(s(w'K%#+ %8CFvu2\I !!~ P)Q@ J#!KQ"X%5'?)E*z+,,0+b*v)((()*l*+0*|)o('&}&%%&&(Q)+q,-.0{2~59=ADG}H2HGG?ECQ@=<::p::9764201.3+m(#t.(}FOK  L u M Mdc4 U ;I Vw !"""! t K ! q|==B;; i!"#%S't*.269p<<=<;:'75Y20//~//.-R+*'%#  T w!HD~(-$ y jEdd  D30( ^  )n Kc _P#c.N.Og1P p[eQ2~#h'1+.012u10/,*`'&$$$$$-"!D?<g Y u ,+: {  [ > ^(-`a V Q e inQ5wF{ `I8cI 4 ! ' d u \ X d } z ;    #e&' ''&$# yAQ 3~]$'frhe>Mn&otAsf_3WO%QE(mA.: 9W&@%zB ( r ( Y(3Q(ta U VZj3)Z{[C6K E@ yey'@b|d U=`tJ'0{tkUGL QD t N D 6 }+g;V\VHz >+BO[*GFYBFFSbtiT@*%V!0$k lg0 3Zs5FTN0,cJ4>SK $:HT4 qXKRTY]`bflpvtqeTE<9-2@k  4%-H.U@OS&#F.Ltt9ynu!} A- 2?S@EE'^RDBBGKJD@CKNOPSW_[q&IZ;"DKD.Z>w9gdf'Cz+otEJ@Y>4CWE7 #pXF>4*(2@Pe{,Z"t1G6INzS;~{q98Ww%2P-?)fp3X#+I; c-&<gkYE7%!':FXlZ.l6RQI"w!+e<H 3vGfs [4EkYy<jEI M wQ23<YqriachsyiG++b <Kjo $|hGrd\gy2:!{)yUrU|VK* *NZ<707=IM[yuY/5_*Hf:W-fheGDHHK>Qah8L9F/k[*u {X=63:5@_qK1" =V|9 $c%@ 2dYK:}m;.v,j3#Y _ECo7AP[>re^KFQht}}lI*'0Ji9J?znlFH .s$:. YUM;l>V#\ ^9,|D6coUIGRU]m{~|ub\XE<@Wk]"_s)NeS2(js9(D NM^+n?AORDMxU2)*Jprd[WNLS_dfpo_PP]cnN Z;C2Gej ,qp6$9!6b:ub #pDSW,I"mqS<:<UszfTG@538BCK\r~X0=mj6c-/<quQ$F9N[? CSeZ4g!uOfH?DbnT?)#"2D]vjB&6awO#!7v"ND 'BB#/[b1 )eP 1u]QT.>ljUSZn{j[PNLVct~rcSF4<Vj6Iv(CprP ,=/>aT5)<kY'2l}A8,+T+W~kTPQ]fnsv|{yvpdUI<DUzeSI&)V oN` Ite1 !(% /WbO1)QlC)(L|wA+H({p:$:Y}yjZW\jrz~scO@6=D[|~fUFHDf l Hk";^`K(0>( 9SX>):Zhc[K::Gf_00iP\kHCI`oqnw}w`E:=Ulq]WV_]kibb!HbU7361);I' ?R< %?T]ZJ86C`T:JxY \]NXbvvvruyxiZ[kzdXXValu-<sv;BUVL=?=&2E< ,D<)%0CQOD:>QfjmrVPcq,9ttprtruzppoqlso:6coC1;LWI;EQN: %B> ,EOE1%0FWWE9F_jqzeYRek=#=v~vqtos}c@@isN?DUWPGCQV?%,CG* $#'3DY]H1.@ZgS=AXlzzuzxaS]wb6*Ax|wywxyy~_?LzoIDWbaPAGTXK+0MO6( &0.3LaaP=9LcdYRS[l|o`XbucA/Ej~yzuuySBMxz^V\gdYMHPUH6(*AL4 #  -($5L`aN:<NakeXQ[w|yzwj^XayrL9=f}qM=W`cuwlZLLRRI5)4CE4$! %+)',<JMD99G\ih\Tav~uvwri[W`uaLUryXSgsfoyo^WVVRD6.2DL<#$) )1&)@L@0.@]pkZT\o~|qlmsul_PVsyfcy~n^^z}xwyxn[OW`XF4.6EMD,&61 ++#"6FE:28Lbli^XbqvsolkmplYOYqvu}xyyz|ygjuzyzqfZU[[G3.9FMI9%)1!  "284.3=GJD>?Mcqnb^ckrsmdaltk[OQ\s}qpoux{|uouxquqe___[M5)5JQI;,%%% $/7<<=?EHGC?EXild^\`hopiadjkida_i|wyz{z~~|tmhmy}sf```\RE52APM<.%$&  #'((-9CFCBCFIGHPZbdc`\^gopia^epyyphhuuher}}~}yvz~ujdaemw|}~rgbba\RG@=AIJ@1)'&$ $%&.8>BGIJJIKMS\dhga]_gptnebfknlhcfttkkoy~xsrtw{~~yrjedju~|zusof[RJA==@B@:3/,($ &&',3>INMJMRRU[cjljd]^juwod[V[dlhcfs~skijrz{tqrsvz{wusrqu|}|rmpw}wfSJHB><<87:<92+#libvips-8.15.1/test/test-suite/images/targa.tga000066400000000000000000000251711454007373500214210ustar00rootroot00000000000000 EgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgEgɮEgEgEgEgɮEgEgEgEgɮEgEgEgEgɮEgEgEgEgɮEgEgEgEgɮEgEgEgEgɮEgEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEgɮEgEg°ɮ°EgEgðɮɮðEgEgðɮɮðEgEgİɮɮİEgEgŰɮɮŰEgEgŰɮɮŰEgEgŰɮɮŰEgEgŰɮɮŰEgEgŰɮɮŰEgEgưEgEgưEgEgİEgEgİEgEgİEgEgİEgEgðEgEgðEgEg°EgEg°EgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgEg%7X*DEg%7X*DEg*D%7XEg*D%7XEgEgEgEgEgEhEgEgEgEhEgEgEgEgEgEgEgEgEgEgEgEgEgEgEgKlEgEgEgEgEgKlEgEgCeEgEgEgCeEgEgEgEg $:EgEgEgEgEgEgEg$: EgEgEgEg)=cEgEhEg%7XEg%7XEgEhEg)=cEgKlEgWuEg*DEgEgEg*DEgEg EgEhEgEh+@hEg+@hEhEgEhEg EgEg2JxCdEgEgEgCd2JxEgEg /CdEgEhEgEgEgEgEgEgEgEhEgCd/ EgEgEhEg)=c$:EgEgEg%7XEg%7XEgEgEg$:)=cEgEg"3SEgEgEgEgEgEgEg"3SEgEgEhEg*DEgEgEg+@hEg+@hEgEgEg*DEgEg *DEgEhEgEgEgEhEg*D EgEgEhEg2Jx $:CdEg%7XEg%7XEgCd$: 2JxEgKlEg2Jx *DEg%7XEg%7XEg*D 2JxEgEgEgEg2Jx *DEg%7X+@hEg+@h%7XEg*D 2JxEgKlEg+@h *DEg%7X+@hEg+@h%7XEg*D +@hEgEg2Jx *DEg%7X+@hEg+@h%7XEg*D 2JxEgEg2Jx  +@hEg+@h  2JxEgEgEhEg2Jx  +@hEg+@h  2JxEgEg2Jx  +@hEg+@h  2JxEgEgEgEgEgEgEgEgEgEgEgEgEgWuEgEhEgEgKlEgEgEgEgEgEgEgEgKlEgEgEgEgKlEgEhEgEgEgEgEgEgWuEgEgEgEgEgEgEgEgKlEgWuEgEgEgEgIjEgEgHjEgEgEhEgEgIjEgEgKlEgEgWuEgEgKlEgEgEgEgEgEgEgEgEgEgEgEgEgEgEhEgEgKlWuEgEg\zEgEgEgEgEgEgKlEgEgEgEgEgEgKlEgEhEgEgKlEgEgEgEgWuEgEhEgEgEgEgEgEgWuEgEgEgEgՂEgcEgEgKlEgKlMmEgEgGhEgKlGhEgEgHiEgKlEgEgӂEgEhEgEgEgEgEgEgEgEgՂEgUtEgEhEgEgՂEgKlOoEgEhEgEgEgEgĂEgKlIkEgEgKlEgKl\zEgEgeEgIkEgEgKlQqEgEgEgEgKlWuEgEgEgEg\zQqEgEgpEgQqEgEgEgEgEgEgEgEg\zQqEgSsEgEgKlWuEg`}EgEgQqEgJkEgEg΃EgMnEgEg΁EgKlQqEgSsEgEgEgEg\zEgEgKlQqEgEgKlEgEgEg\zEgEgKlEgEgKlEgKl\zEgEg\z\zEgEgKlQqEgEg\z\zEgEgKlEgEgKlQqEgEgKl\zEgEg\zQqEgEgKlQqEgEg\zQqEg\z\zEgKlQqEg\z\zEg\z\zEgEg\zEg\zEgEgEgEg\zEgEgEgEg\zEgEgEg\zEgHiEgWu\zEg\zTRUEVISION-XFILE.libvips-8.15.1/test/test-suite/images/trans-x.gif000066400000000000000000000021311454007373500217000ustar00rootroot00000000000000GIF89addf3̙f3f3ffffff3f3333f333f3f3̙f3̙̙̙̙f̙3̙ffffff3f3333f333f3̙f3̙̙f3̙f3ff̙ffff3f33̙33f333̙f3ffffff3ffff̙fff3fffffff3ffffffffffff3fff3f3f3f3ff33f3ffffff3f3333f333333̙3f3333333f3333f3f3f3ff3f33f33333333f333333333f333f3̙f3f3ffffff3f3333f333f3!Made with GIMP! ,dd@H*\ȰÇ#JHŋ3jȱǏ ^I$’!S>,ʗY li͖ iִɳϟ@ JѣH*]ʔΑ"q6tΩzQ\sjju԰hӪ]˶۷pʝKݻ ['Q\,^fGݫ8|Gflk`rOϠCMӨS^ͺװc˞Mm%s^ZL0辣ǚN.gϡ_m}%<gͧ.v ߞOϿ@;libvips-8.15.1/test/test-suite/images/trans-x.png000066400000000000000000000006641454007373500217300ustar00rootroot00000000000000PNG  IHDRddpT pHYs{RkfIDATxn0EGeBB4 笺(Dn? yǵN;{z+3YV!ȴ ͣk,sQT%ܠ21:nKQ*E $U2FR;^vlvQU~W6]~ZHzG?_Ƒmtdƶ V1 zGu Y{n[֛=S51چ!-#VrqalݔT 2SR1!nU-GR*A͔TjCM r[Lɬ {j-Kכg.=[7x^)R1@0IENDB`libvips-8.15.1/test/test-suite/images/truncated.gif000066400000000000000000001171141454007373500223050ustar00rootroot00000000000000GIF89a? 파000```!,? x0J Mͻ`(dih Xp,tmx|Kl*Ȥr9ШtJZ (šz^k]A;r{VoMAx[~sB t`z1M EAD = r$b #H$ h:v X@ 83j2hV-Y;E n\ɲ7G8?tɳ'O-eƀɓ9Qɴ)D!RD7!MZlӯ`j`* _"x],aʵ)|ܿsA5{9 nǐA*)H 3繒ՌQUװƱڀZqEVt;Wf㘘μ 7v\ZjrYknէr(w1Q-6wʞoA} YP>`(asޠ΀ ݃wD8ᇱ=tB!fr U6bI)8zwDK֨9S$? 9F`ixar@N%`dp ]N݌謕_igFHrT"h址]gutJ W`3|c{J$c44!G ,^\CNQYiFhJh8 A5TYv5(0E;Z&I%#!Zl$x>rQWPq8`F4aY@ PitgT ƞFBډ-dj*hR 7 A"P_OPkMMKHjZA:g?@_씙4f_OآCIG ɘ9PBLtjj#3 =h4 'ܚ6X8*ށ'"5UzLWp6rbOEh غoH\J Q\A? LlĐr4l7JoVf1(\ZWW-P{\?W.՝E`bwD.[*0#Ņa5hyOSoke-@4'Q(8SـMxKl$ln\\U.qQa0s%= Bqjxk@ U17@/sT{Ce!le|ámM&Fo<]Vq<ǏAkV Q ^͇e[{ Ze؊sLe\sE uc=B(|bbbFhMt{ yD:bW0-~:l\@ 1i"?7U>;xY.,y4HayW-*Z5>H:E$\" `G4qg*(^h8з%9H~jyFgQSI尉>3FP64]& KPx1d\@uP)Sy- 8-@5sI.He9ǁmu*-pmנ+2 X1[&{Ͷ@lj7k"5pT.HIf6wpxm1΍L3e盨>mC=σxLD:J1p}i:7mq )Gn`PeWY&fh`M}oQ .x1{PoW 7Q( '}jkYp}Lz ~@cF -8WCD?~nㄞp5^0n#\`|P4e>`~1vYlGd}Ā`-. Oh>W/((l 4X|f7[vl{(8 uYb(x(Rh ̢Tgza^9޵w8#(+C$m4H nUz6Qr[27*̈U:G`6oWA\XQf+ ,f<=ЌYt^QsUj HsPD9``؉xa0xxp,@$Ya吪f2/0ȄPLU>y< QT8}8TYbh ISAlЍ< Fp0 X}`@& XQSb2@ 8~c!F '^vxM1fMpC^4@A |:ЗIw?gc:M aGj|̦gH sr[0.əٖnCv   VjF.)~P k< Å\M2׸ O ydy`/ZFjU?dr+bkjXFjq޶P)'y9wj#I cK9d^-1=H/D)kiVAqdДiiR1 J*TK ¢3٘v>Y1OTmie멇 peR6@CZv2Iv]dʠ,i@KV9'8`1b:U^jb1X.ܺފw05թ0s}^zWw-T2QQ!ѯTZLDj~n[qm&!Q HBCkpS 7aԥȱd{54t(r& i1{%9$Ck2(gx(GW\Moι01@.2Lzua:1࠳~0ZvgFϊGH Nk j!ȑKJj*~k9[cDG[A^ ]qI\w H 1 ]zy83 ePĸEjN9'!Xg3v250y+]+Bg1 ոlQ{Md7pIwL `;J K[ 0(15 52 ,\$1[`-Y FJbN!R _+ oV{!#K&4ogXQWj7fE7+pʥz"JvP+|&G`QL,VPM dzXGSδ1yX^6|VUb1*!Za"uLF%Ŏp6ХJǟ=PKDPL F5 ,2W$YAqǀWld._"d 2d͞f0_% QkE|x2uŔ* 5cRd|TCUyUBĤ]І\=\t{g Z ,| 7 -zK  MrЫԪ˸\/k3-2(Ӑ3ќy+H1, )}3 ь[NcVpt\ʒ[Y&+##PQ1伦漡+ҡsu02&M 1fl~4`@}\C^_񒁐nfvS+T(K`P -04ْJU7MhDui6lq5ϒx MV&Lf[Pݶ,Yd yA$( \ G=O<+\s6sFvpKO3ʁH>GCuŎ̑2efLİPz8e5ocX(qML4 -ҦuU:_" s\zM!Ǒpf!svpn ~ Zn/2й9Nd32V/ ke7TA(D1 VT|`dKh- ^+ɷ)=J |zL@ٚ䳽PgY$A9"FE^. `Ce[ \B[f,[k8 - 2pH@G`sW10i c:& -Vz9G vH-)Εr2-%VW'S0i[FfJ;@-Op_`gِ vo 3^N˜29!A2`鐹Az6SA>QNξ5"$z渊 h\m une6pQ܎rNWӾ4d!8E&ټBBDʶ (h/jAP8 `(F! !Pi:9[ qV:=Խ'T5Ev85e`@P& 6Viye(**;I  uś[@z{!D  u"h-+cZ@<cm $.}6V(ō.faZXU96 Ni l}w"|uΜ1B}o}fby:cq8 ˰Q?{;S7#:ඪ.Ԁ.@lsB5SZggo5#v(_CT⃁ojk?;#4 <p"\F4ok^h\6C=A&x"y y6=E(Pաr ,V.:§Z4fb"}+T gC=T4h(A݀ Xk}"v(bE$q •M("UH}X3AG"6/s# 7TKqhCN\_F _pt!$;"]LR5(sC.!KT #0G[!$E`EO~M/n Hj79\6%,U AiECnꑛ#Tx(|`#.htL q\0d (1eK<ZPNsx K08`=,āl',0[I)̟J|b@/h)zJ0,v )?<%*DwO H`~BuC@Ȑ 2B"zLAH焏, "a&0PUPD2,P`f6{(BeolA5'dqV#19!P, Mc8K+F0vj(-U~LF tmpڦ"7VI}PAXQؾ&,`E<=9$rv`0]Gc5o\){h|Ԗxo Kpw%s @wȉ.OsɎ@Ƅ͘\-)MSnPidu)Oٔٙr @C"C(GI30Br$xb4]oqv+7t4MKT4=-"I+vh5[L&2RA%2r.ISɜ#u`)'qDUOgKwKG&oPRY)FX$ g"ycY0}e ĘO@Xm'eB ZyOrdȣj ɉ_uW TWI4P(W8 R iV1v>!ZPJ"5AU2zFW&tҞ5:t (1;vF$q+R`wb spKSґZ:TdD*7Qr4!5o8:1o) |i7#BGq"$j]1)rO[׋srA`e`BAj TT8oyE5aDrcKR3>da$l sɩsvM6 4߈ iF* :,n^ᮇjO(7')I[m3Dtk:Rr+dnQWMqt[%C_~䩏"Gp;KƲ0,Iy859Қ%DQ(sC‌4";i (+[ BI|Yv"8O7/2@m;XI&YEi/"yhPI&& u>e&sՐ8\O'27-e:*asz$&ajȅb:Wé06gaé$ˊA"`Lٌ5Tb9ɼ\v ǻ!!;/Ua-"@Ǯ{GLqۘc " $˅95"":HB9V ʱ YڈϯQ*-G<.0/!ԗTAҰ& Ռ %3.|e ĔNL jƁ—2AC`pxesşXy'Ev7I v4  Xx);?ٯˇ&* UU&@WW>t60T,6-1i5@|*‡4U2QٽT|=!4 <5xzacH팳a< p0x[] 5hݶ10*}RVq""$sT]nI*23c&E"gu B?kם݄@@i,n2rd.~͂E] CmgNڥ H ϡ&x.,#ЮQ!vTM~y$jxՐ"fB<_t%8gD" ~] +;V *XK#1D⮢:䙚qۈ &F::Qfm">lbuFhQq$/D-?.^nN>PH+$|-' ՝nh-|4/' O{PCS =ZaUBvb;%,>u>>x_; sv&z`r 0%*i Š1g `P7tՌP 1IU8TpzK*E.F%AwɮFxS35aUHc+!DhA$.U W@x0"@Tbɻ7@!1qGyk$P' ~R>_Οwв6pjΜ\FJeE`"">pւ*j Xw;' pk&kc1f:]6 nҋB %k/ sK'@`iA߀'0u0I0IV}]sE]A8APhvկGx r1@ZAPZ ¶1+Z]N H Zf;%HAC.H`\b.c"2=: JH(HnjwT np W vjX`]uwK^yOSq4JB') 5/1BMb;]~FWOL+\Vh))`P!h>1cTHt9qD%8NmT$"j/$HJZ3ʞat@&GX >]TJO0³'ĥYF9ڱ"166 #BpZ\ ȸ˜AQъΜQ_f5ѥ4G!JE@W~Қ7\J!BGf_@m6GY+3V7h QY=VZ!oi};Ĭ jy G&$M?|񀓁? aC ueF08 BqX0XYgxxEd2pȱր!G s&( Sȃ#0ib3]S"A\y)S@EbX"tb2a aO"gGa S vACq04DGj ]zH2Q9wYXGfj6kuݱ4KbHj><(vRx*RZ):\+NJ ðjoXMFfE"p4 B>1wx3>K޶FZLV ޞ{J˒!RXSzbyV\+ fםULkE_O/!Tfo-Pl|M@7v DYSeSDϘ953x1EM>c2(GA yZʡ"UUEQ"XFeW{K^GAt-Cj QT;wOD zz ,X[}`jj ~݌ sb*)|l̩ 0(@mLIWG֓iv{E FCCu!ϑ2oھQZK.N؀y/"B+4dQ Q YZunB䗩dObch;DM| m؁ G4aƠEucP{%Rk?Ee@kA:ZSA lO$ 8qK?B%1Z(~\ YXW->eϻD\^:3ރ@^!\̊җ?byz8"^fʐd 媢fi  +uE)x;Q8pi#+SSPV vcj 1L.+vy-:@Qřtm("$q΄PC/k! s:C+ >&ⲩf[肞or$, : =\XV #~x'֒qrQ#T\(C,WwA2`56zς\IcY9|"{OZqtDL2*!X6FU\#C hJ}|.bgV=g"h{$b礟3(K gBxJ\f9L$V4(Rkj-wsv@\"R35| fZ2/V9` E[ZK͕ID`vf]NG=_ Y2$4U9Q?h&E5'(0`d'Ga S0(eoN|`~v *MX!@T?maTQ{FV);9Ony߲S9`EZڥf"7Y^YÏ \KPf^'OA5k!q ʍ ^'r)LȬ{YB\Dph8 %'qWiVdBh٠x Bfd=ђ F-3KFxwvCVH.(p *߽BȋV>0b0 y@ FtZoG+@5@ϑ3UU@xq9LWAa$;0}VUo1Fr9Uہx1XnD\cEH=:$x$}^r711>ɣ3 YhԌqȈh5h4Xےvx)w  f۟{ȉH/kt<'t*4@;*|o!e6,]4i|m{ 8!ĭV9/]F{a(|vV25=cEq0n4@2N6WMtx5ay1 ) "u_*$gogg3ץ3J&=5$w .!.^E/h~ZEY4fT; 25R%¡$]gj@#'X,Ug44G_w M"rzB+u ' dA@I0Q":JU2|||61rbv2f<A7@IX^$cJhtAb  zB [BJaĉeKOLg$2^kHpst >%wÐ-'3R$mģ\P1ca,pA< 3HrN7$@6Z)6!M5i`e"j /hIiS3X\~VËewnx@\WT5z+ {G'YØ% p-|^ ]F1c=Z7+(EEpM3| 57"7IBd5\ׇ rieL O8Q9 @Q69Q~qhowKh1= bo#pDA > hpaO01Ֆ6V5V1AhT^3 )_s#!V#1YUV%h@]# 4# \\ P9 1)c)398Be1D }K[00 1Ew9 ǙGsDyU0^A i ?( z[dD}4n5")IWěPЄ:sOpW_``<]UjYV0.Ĉ :(mI@ "3#9Z#ɴRDZךuZI~!`B D[_cA0#p$Xoe?0s*i;``"DY~ZQ/`.zV[xvʠu2 y(m1hD=ZWg! ?_o5@a>XQz`+08DX*#(.*HMig@8|lѢS%^f ՜;Pm@d4عL hSDmy$&s ]}Bef#PQT,*|0IV}8Ǫ|Fuj/iZ; :ifLuIԫ#[NR ԟ~e/qZ,3TsEcK7Ǫ)Xtb-TfzR 1vZĮk$VF Z$jGZ9AXﷇYfࣸwEb"ѹ9Y"a.1o_*Cqw5f)/s V z.6Ԩ4ZI19c#-Sn{+ˉJc{m:s&WVV5[2d0:$a,3K+:!uЕaH>+^Bx h}~8)K~KQzG $@'xڷ=j;+)cz0;®< 7A+DzVTǍ*ksq9+ۥ!V׵SLkק_#qGUi HY5Aj|Zn^Bq@c`Ͱu K1ut!{s\0'P;I7!O65hf'ȳ`]濨-UL~M! , [MG'&k>3P?AA@0R\O Пi3p]L+ ֡v=q^xO2|,BlSp!bcaT]x}fc Bŝ3_p;;%lW7qc) {i862ֱR !)\$92xvc#=N" -> Y_'GB|jmpR"uup$h3+-0׏*Αۃ _Jwy|@Z W~U5*j R)?JYS]f |+~,Tc" hLJ'Y3Uk-Z2B+MTj0+;Ͼr+2Q+y-g3=pK<|VГU& &tXۜQ@ʹ_} gI&"ɀ#ZFyXxl@5>Ɨ2$ pbREɢ@]1lb*/t'3iUZ|Ґ,_T|d>y^usR]:(jI  $u$ \ 'qSR8Rn~`cPGkXMB.u JN'K'Жl ACR nv4" 7o3}Qޭ`5'VMpF(0ZGQa>Z:&e̔=c?E0Ž5'uknKW筤eңPiW {6끒Ԉĵ2Z/6Ȫ%zyhutq S54L+ d WJxCv{.3;@^:= % ,޻`cdc'>i}fm }1WzmOڴ<.wͺ"Pfy魝2kE"00$y̖pZ ! *8`BC4cHr^~>XmZw@1G4bkg#_ns ?QA.=,!+E{ `0ʶFQ8 +SvĢ#)"Ar Q%PWA`Kt"H?r9p`ʕ!Nݎ$Pvx`q2Ui"y ))::U%"QWYuE 5҃Q00by@WyS9 @c|M aB>B0|N_81[:̎3֎LHj@#C +ih̰hoCasJt9W_ڻ ;¥DG$De~zClxVEB%EfrB^B3q6D.mdfE yLdeBhCr<<e7$ASx/"#8AE" "H "$\17ڡ h=$E pK oӨB#Cbxq%;Hx:6,8uF򆓱YÑTGv I}RKDQ$<\J$7%G 5V +,,)(yNet͌$cr]a--JO ;^X,c#g6뚏f;pi 0FZkr0Ad`YkTMC¸hYdqj%Ë @ 0N#9ɝ~|঩쀥8b11Y[ٟlh@%C}@+bNs!X[jb Zʼnpz`O Q>\c86ACr e-gOζݱf{⢮ = q@qҦʪrqP7Gre\@o)TW.P=yj $<&}RD&8b`ű,+N|o.B ^ u|3vSB<:`v-Rj@Go"@JLp;u1wqY;%Ék|'%ȍ | V'E"ʄо(}y>V~$LRA8ҊVv$AsɌa0ֈYqxfV (q2ڇx^rYϢU#`.pWx][#0Ew}`sS ~Is{@gebxgG ,o-rcX6ZC|mw[,Q8\rD4 րge'3Lj-A1QpI fon@ }5A`$C@hpT \fMhs6XMMV&`W%J[oP xj$ Z(ffqhbV{9hj'TvC~ig"- }j<^5vaagU 1xbt%lxbBOL#r{rUIV_j&(2ju)TkEMgPAN0 WSWXg~CCxg'0G_N!&uG"U"Q(c)?B6g x"z&In i ^y=3N79CyHg !P90;ԞICsOSpwY n;S Y=I ȝ#b0TM3=ur~2ݓ )" ӉknC k0 r Т*h "{ĠٕIH0StDM[X6zs5iy`-,KoMRzS6l'M(Bp8T@qE5E#)jp^ |R ;%O=6ti sUspd rzBP Av:Hr/"^Vxrd0 !1= i(;es]bӨ.j$>9r  >d9gQ0qGqJl_$7=ju ɤ;(a[p q͘ιkas`Q)cJ8Z5s*BA(K*=gcJIf At$*" 3& { z2Nx&Q:6bz @5k79 u@1EUQ 7POw%3$m1QFwR#27h!)CpCu^ 'EaU1B%9Ra6x(-#:R녒4a3ztKU:渜+n"gk` J$N٤E*vL P -7Hи `#^[f%2*j{;P){5Pz 9{zK#+ spr=8{<"Yq+,AO |Z!Y(mՑఢ45 kP80 <I`Ct [Nbcu2)l ,<©H1 GzXP3eIS3M Ipĸv^PӸ@T3ۣBu?۷ =ac ԛ#0_m"II7]A~##]-!we<2YIđ,HB:"E#ˌXlc-n~BͦZXÂuIB-#Ƕ]1iEȟfwX'y- - `>w= Fqލ7Y4֏c}P#i-n#&=Λ<#jS]eݯwUԂj-X7'*[L-E '7e){]\JQ1,N!q8C ))905OXۊBm˭=$M002[XJa'b^0 s] "dBh177pm ~b-śN;ZyHI%TV3dCy{L֪-&^+_W.q~QAZ/6:9YPp[yEՖg蓒Lx j"L =Fn S<?;6}'nr1-W:ܘk[KL>BNRWYC:e6Ъz*ō:oQ^sa._t𹘚sŻj }fmjCH)\!c^~|=h;Zr9f涝۴CTtQRϾqZ!_G$ҋy}1"@{ 6\2EPRkgt XkGO}]=`yukyhDw,YQntu ی)6݂ <Pfap0 0PTQ8[6'oSLvGLH|v$֙ͩVǍ`\UP6E<)"LS+ $z8&mXr=Uo:8!<P^.&%`m JpiJ!#$%3!V ; 9 N%F`@T]3%m% N"#_r =򩤺%tH*ba=pbϏP qdˌ "g fFk M d L|QOމ!Aga0*\ʴӥ w(U,ad zC&Clʌ4a:~pA+]2yÕWO+^i(Ӕ1[ A];|R)2g%@S]D󣩂eqU Jؒ2v?>`QrT4qUn0(,c҆^dg Pְ͗>EX.~2HI|s[:QT_Yx5#AцD9МdufHVPs&3}(-ÃJR:hv xCPhr$q͇0I8\El#a[T`%dTD<%e1Hy@-CSbdxEH{pd.jr$x if8qhH<CՐ$"sI`Sf5zC)9` #aju*qz)5$5ʗ ll( 5Z'8i-")--ְ'o"U 2׮r;9q102$lEv[Sn$ 5ZCj! k﫲µf3+@1f H;Ri`{Z;Ϻ!3!DO fdmk!:YD kXĥ22{R #iѐav ju\'U>:`FfI˫ȢP.zLƻNq8 ڋ~i(c3@x~F]t(a"ˣ? ;Ձ֙aa!}6r䓩Nxr}F \Á ~ZV {5-Hw(kmqGļkNrJQc*aJBH:6A Tz66KB e@0Hh ȴ+LwBirO33]Kl`<8A) K0DӼ#8qK Q8r4 ӰEp?dBTkdSJV'!z36 d$&0R Piu3 _LS߉n W.-Y> x_ %ILL2fL4 pzIFx^Gg& Q^"F4)+-;KmlIPpsK1nPsi>L0ͨF7gBs;(hlJU*K% gwv4UzΔVG*_h-BlөMu):G&uxה:gURb9P4w@fW:YZv(HAX80alcVz3',NMfG3%RK8uElQŠh}*%͒&6$Ur9V^ݨV#>6 h]Ң)EXjtum^-y[i"UFZ]z|֡G+;;\!eQջVLOSO&M.hCVgA(N12w0gL8u@L"HN&;PL*[Xβ.{`L2hN3sP`Ûl `;5 @pFّzL@-mW,4 >o<6 oEw 8Btxj?_8N7z쒇Wwx3][ٶQq/Wx&P)0xN΢CI}?GI.#i,0Q$tV9Tra$cj2 `'wyZ{|qwpyӹ#I92) 2s=p_r =6َ1HXkb0Y#`yPzR-Ay@>(% 9 (Ub UƙN8ni#:C@X2=Q%.hp+*`{q*lJ訊$ӞTyT|x4p>4yt,EԂq~W:7:)Tպj6OR"U +yjYuE t Y QG|q JAً-+fQ( 1㪲{%< L65 Fߺ#" D۪7tNr l֡,б{Ҭ⪝S[A;j)99[+k9 9М(KtʈlJa3f. QksQW% r=Kj(qJbG[&;ŵ Ŋcq Āz6ojU p 6ʼgb@ԯ{Gs>5J; (5j 56nC:,pLf!B'ڛAԐ#n7ž/YG` Vo;W# <6+{3;D©7!f=/@2Fq,ԍ 9=# VU vAǒljb}  vgtQc ZUB 6=00\Ѵ94+ϷPiq]I;+c ` ُd4R ف<= kt8R C 09Pd#}[IUj1):@lyf f8͂ݽ/CQ6m{7MMKϭV l֪*G65HֽBl8F uIC6m;3ݼB'݈.7A4_ِ.Z|P!= Z]&8~WIW AUC!1~}sb<>^sLs@& Ûd2D&Q@VsC#x<~o8嗒ײ|淥*P# - C<#pxN#kfeIDn\;L^ X-(*Vb}"藾4GDOW+=rh{0oNIl};Z2-ҢȠ>fn0Ϣ먾}Ѳ{J&f:N$^Ϯ^ >,O`JyS)YcĒ!Q RпKAszᴚ={ﲺ@;^pLuϤ& }>fގ$/>{,]獲;k26Yn~Aot |=y\,Q_0N:!}vW rb{xGʡjDU킪\ A.zpDa{&gZ*%$O pF^\j,gB*/PBBH>]fX~R4_E89,vؘ(Sp|qmc(%2 1]a R9Ei:21 r)) ~ rAZ?تW\w%$ KMHPj ǒfFPAxA@ٖ̦ dH! QBC(vZ6edOf7$P0T'69R06 I 8ExIa*'#@X+q¥ّh* qˑYXЪPmKgC{A`i|b0Lܚr&2iAb EA'XgŽWȣP`2 èd .򂣋CyDek HnՄUGj͡rGj\5}=.`6%:$}7+cpA)$v:P-R +W= ]`0][w?E&\:E iS,a .hN6LЧ`xl)4tϸ,&S`t4Bl!YW"W9 fC+ -s2`\vaQq}'9XoaF'AHmqɅ U ls+pxtX:D|g͇CHjrIQ9yShc|ظw5(Cy!ඏ3XGT3D4*z lщP@fS':ňUҋ lNZ_rWzb2j`5`&0'Cj`'<,3l~Zڠ*h=ש8b7@,`b`.{cxAY'Sf9mnj{ңo}BG*TX&5ҕq4DJ-'pA3د%XTW@3 vɕ-]:B3订e{8v[y[1dz5. ˬZ?TW)Jl /iC~dgéh6LDN 9b 0"{K Eops'7;s4YDK5ٛytzJ<t@[ѷ\APr"P÷S^P&Ba6}.c=2,B'1P52F|ۃ  VV [:g6*fA@3*4}2Npm XH!Ig+ tjdxTъXdya >C]oD !=^fhATA˸E~I?0(4;dԐPT I/q,IJ|"HMpNRZfev'Q}& ^(*B#\ ٴ>(QdH扠7=6tV$(NvbFEu o"d; cLŃD` Jd`F2?@Mz!(STcdTyhQ܈ʦ+SJ6a)'ѐتJg|)QPZKe@iZH  (5,7!Mfڳ*Cx fnʂuPľcP iYA fK4ڃ <0w (),ǣT@/ ^ W;X$%b`= ,Th8HO7 #îدObZa=mN@\HVO'Tk ̠:Nˌ1q e_mTNvI#1C6o)8A@Wr\)Y'yV(EiTݒC <A#?aygҪ4$579w[ h=.D3Ci'$OGa ӳK3;d*qr ے&:jBҙԹVay C-3 Y^j c$=.-$]+PW!R2͐z%p e NA NT qd4#P^X퀋pق Z #Hlg q+ wGw>= Z22^.('Mk,FZaxnn_ }+YC,?@mn$kJ'b4*ڥwm/手zw*֜2]vj"[z챿% ymA (KV *o&*G4hwG}!:{Y?νnTrzDF%0{+{">6E]jom"Rv#' =PSdXq GhfׂeVpl=LT}3)Ɛp'G#c[q{2|r@jMA"Q5E5 THwD 48x[a3fq1(ps@.6 6$3LCo LGlq*F2:Cx]Q[YTxtEWEDN]bI%F2pDy_IV8fQ@qwx)89cnMQ[Mx Q+xN%lųj%6etEQ!!~S{5~&A`$Ue3䎤KsX%*ZI\H0Q:'q` @T.<7^@ra")ԓ>~a'kq'T]N5G[:`u q? c ƠB&&Fo*p_/H@EXWDI@ sY?Dl!(G!ZHh]y"s~iJ`qNi;tt !?)@XwjJ)fn'?In ;GP11sHP4} iatÞ: 1INVYcY?$~6H2`3bp@Uvə陷$V s[D-Jh`-6Y;g&{ףd8A d,xy~Wq&i7a7R(PR]hC 7.p7Z9 ;(f/hj/!pq`}2NSDsӟRFH`j"Z dک[`%zcX4%"u"r`6AkwYz@ 9ҲyTz()scConh?$2L%GUjN0VgcS]l e ('!0 $X$g1z`үPAJ֟n ;ʙA XEY= [HHKQ쀡_!l@]* 'В,0$h\Tw(ewf$!~{6zVhCu 6PV,BVG;KkP2!6q"z: '",P(+HYQɶ]_odq;[FR/%wkoDt0 ahaC$&)/+IB` 0)0 b RM +pԴZAQtc G>w!&'KJ6fuHH1*Iw>ܘűu cDYނR%V HW3+Ѥ-`3VP45KڛcLAd )Yj!o^L}sK7Z nGWRd7s&J*D,< 6t~I g'HI> `!0{,1ѰLrr<#D3is ThHKL-{RԶpZ$H`pth^M l*}  >WvļAIK6t"cz*`'p=[ ^<4ZԀv@vPL}OZ5B4dPqg@S[A&g/8T/r5kk3,Cm =EG#PjͶ<64^v&H $E֗C1 9RWCS@xV Qp~+ d*#:#h j;Da+)׮:4%Wʝ,C vd*ڹwdt12IAb- Xn|y%Gݖ8tGS@跟2h|9L{"R },)aF[b0ذzY 7\ Hp>=,:sAhĽ@6sc$xR3EjR%v࿖Ps(BcyK 2B7- 7[޳64#^wSu} "T 1?Bjc%ȋbz c$@RU~լŊZKOUPDQ rFa t'V[.4jgS[V(#-~B3J:E'-nW?zfna2" 4ґN/m/ҭn=0t<&)h2æF卽cGݠNKs4RtQaYkN&AQ Aq4txqwѭmkDGu'؟{Is:;EۋvW2RYw0&ImVj!Frg#0+9첹wm7jKYs`S Fb XReR1cT͇p]gw%G@ m;8&",u/  fg^-} #js,}̄F⡮^Km~Hh[Ew22Hyaݑ.@  "Hd [!@M14ekxb۸?e6cH6@V%cbI$!;h!UXR|!p㊐%6dt $1Wӥ D7:)±7MI$Nh?U u0JA7rxDBhV&$Cu`뺈yFuAY';~儦 ~Uʂ.^rզng*ᢱ8Zו(4p&|HS4!4\@uR[,A:7[ "HKhuLb:'XQ]It15X4Uy) Mb݀qk57-"(?p‡Jx[Hg! _-H:^ib`[i(qdu_QE -HKN5X z hy#5iG<0V&v)=AO@Jf U$֚ Q'\)l S/3rPV 4 G1*ic]X+ӌn*h_KV5"V?-GUuIL *0Pjt%!:Ǚܰ s' 5*,zz]R4rkrC.lGxp~:eCwpf/ 2RU:S2 !r 7,3JXVZJҼxd?:XmIZ4[ ~q?Oa#XO[8rGa:y;JWb.ns:M1/#v`jܦ|]R:VZ5?<_Vn=V_ԑ8WFNpm/ Qs.~Yi6F/l[ /C ![NUXY X`a.,Slmj% 䵆LDQaG f\JޡS\Wl@]br# (!` /7& Etج[A/v4x\ RŠ9 K01PV^V,hBI"+HƚyRG<LEm,~z< xK۲6AA5WRs.V"'C$qe #2+\ds*OJr1<C4P.C;^lC340<Ù 5@h ': wC,"!.>fԞ9 ΥQBH&T(+.3ZOП~$ha֬)O+゚4PҶ -v,*NyT} H98LV*D~ N51,\ {* eWGaT^zQ7גy6U@DG38ހ,i8&Gt%jJ0>U Œ@hPa*@=A AYED|nDNX(\D_ru1Kث!:I0.Y9uNf6^*+L5Uiy /MIUN‹E)u0Q?6'?GflF+֕2 ܧcΚv fHP + 4XT~ gCD*y\rʨXSL@;@aF<$?<:I5A"hC6=9& D$AE޸fxQ 2kvKy=z7 %m NȚL9S"@lt3WߚcA9$j^Z3N0m!qĢqh>CC~Xf4ݕKXs\j2fͤkZ$\OT\? |"x{Ň&V=z^U% <|NIM̻^El~PJ_'m ,{%߰PΜji2dIx,(\1y1WƽzgA}'{i*PF^.o" 1$y2nP`_C|Tl w߬Cw5jUr5&Vw%v[pu6E"{JP,P K)wyD aK>PM+sa]8LQH5p9ǀq!ȳg,0G>v5/{(Ech2"LT ynf 2q 5ՃΒ{[psE tgWD vVLJ'Gwg'5a {Xv,$ P}TnEh' L F` cpd}q(T% 9ubN8?rK6Mt9`2CZ0z5 %&0U8myScNhMtdf'FwYLj88'rWNdT M*:9̐9]ERa!*CFHFDr90Й)qo'qUԴD  śҘ33sɜ LxUeFI O[] TWN 4b0+@y#iډB fΑQFٖA4ܩVٞHɕh7j1{jP(, x%P0_oF)HҸ*'{ii3[x 9Ā"7$`|0#!ӑzjƠsZB FuYvzn kE?/a19YSSdSʒJ;_1G:"7 E،a_":6٩pUPZ"u&uԔZX(MX >sڧ Qn"!]a< F-Z?1ѲZ@00`rdkV.CJdJ^f1 Yۅ1`K‚LV !=g ۴/{1Q 22 XU~,2*jGC;5L׳j6-?ad{Y ;&~a/|GǸW jĸ)e_Qd_{J&Mqa&9ftl",k:+fN-!/ i;IɹP:,]"{W{%0qԒh0z7˛ b*wc [n{Ԫ%]-)Admg03K;p ;_zTG 2{# xF57 <2$jś[AIdnmE;pi0ʿVDī$ytC9XnE"rl\, f@jtJ':3[+Ifq,1 <&$f׾,`'ܵTe\۴6EMpl<\Fr&ʅM-Z@w{Cu¦sS@!^axÐVXQ_aLJs\%FPrmI +V"#"J0*Pf< 3 `]i"gܒbμ3SÉq_ ^+L [ڱ,cs-`:ӬdP,}L И3H"B {|LV5e+hmu Qi7.;)>g{Z;Q{C)2Moq7\zqВ:`` {\k(H)^P GLӞZȞv33Ef ԞY:Sn=3 9]cض*4TԘCWNۄ5r!nQIp-Y ,=6IZ c#h¬Ǣ](O N'ّ@Q֯0om#AST˟\Y8:smm7p[0u+ y'veHfpV6 T 1xL!z'Iq) 1Y`Vv-5]"aQj_㈻j+P#+,1PũH47<'~xfra5O.?C;:)DKS$ j >ډ ,yZ}偡8A!/[-<`[3[PHY 8crϗ7^3^E~z\t1rT/ GM~v΁J 9~57S=RfE<՞ވ.RM~N(nWEb>Mvi~| ˳R\[s8@ڕH\EPd~' Fc gV|{|Xa_"_ g\t(M^1 59WUg+1,zoBjP[ [,jD1Wp<’'t5ݼo扦ʶ 7!ěX*tĢL,=ѩ#"]ܮ Mp{4! 7s=_Jt)2GXhTTPv x42h D))3 *`@`Z 3 ,l4pI|@6;̒]m}U]$B|```Ξ+؝" 0OTێ20 lIŀ+H?$:&:`+Z@D(c=Bv˗"V*[|PlyаEȑ4 ԓ[Д/)SW4iX  6',H>%)sLU*=Kl? قBL{U}#0&HTaaeޤ[Ђ/^$qiYd=4PkNgM|80l|gJ+T(M ̐$Ȫ|.:j vQK/ʰf=.ey㺠K}|Uv@r%4 z$C9D=:|,`BcLLJw`v7=aYbcQ *q-Z#+ra [%nS*pY3TbkEVZYK^:eV@ @]TROg?Rp/B@e 1q%'ĩRy.o4Z~HJJ$y Io~ZĔ0+z3mr;^ u|$墰iլ3OAL撙ndln@RHuHRN|RP\ǰmP(YR2OBSè|SׁErKر-#!_ libvips-8.15.1/test/test-suite/images/truncated.jpg000066400000000000000000000234201454007373500223140ustar00rootroot00000000000000JFIFExifII*V^(ifߓߓ02100100"0http://ns.adobe.com/xap/1.0/sample xmp stringDICC_PROFILE4mntrRGB XYZ acspAPPL- desc|cprtx(wtptbkptrTRCgTRCbTRCrXYZgXYZ bXYZ desc"Artifex Software A98 ICC Profile "Artifex Software A98 ICC Profile textCopyright Artifex Software 2018XYZ QXYZ curv3curv3curv3XYZ OXYZ 4,XYZ &1/C    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222"" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?oM0kT10So vȞ9*)]3TJ\Y. MRUNqU笠U)MC7jM[q["U<5^(;Ckm-p<ޚi'u'!<k#IJ&up*M$C`{IX.lO:9rrFq< ڎT]؃{\`Rs-Ӏ9nneR"8VLw8V+XBۥY VѨ(.; [N=*ʴEդ_J%ܾdIA:Sb)=Tv# ,|5mD+ {Q}#C|FJ9,hZD/vCmbd3w 4ijCTy7QsD _7 d҅.bo<.(%VઞbY#1NE6PZw< Q.IlF!vďP[L%rjy,sPLQ_q[d'>h=OCBZjrͰhݏ̌) +]M%;ZDp 2̤Z"e(mO46y^,|z8xCH.# Ҿvs \b1Ԡ'aҩ3mM?a/h))*jhn$|i䎕cvEֹSfІT!"Ah" RCpc2g7<kԵ,ד}8vF$K${vi5PHdVfkk(1zҋ ;YyqҕȵI+zPv AgWy J-̔mXdfIM[W}4Z%PVP"#a̞`0@< nB |Қ ҹIbdi\i#)<9ڬ*Y$<c ENq⊛1܇Pp:BqYn5oQz^m[#?f+klQT 涋%0HvonG'z}3RWnF9wMTE6^UZvJ0a]M(n9ڳK/0c]J @BJpy_ʨJ]4~['ԚH&jKʺY;F{һ]JmG$d&CgڕOzZB$ Y@;)֘ =j=;E% MrI]\=lMPqi (Ŋq$e7dRG}+GA;T4jQF:M> U=jR!Îz/UG(ZZoI]VèF$EV9 K4F3b)uJ;I[|0zP"ccS&D]z5z-©Fj؟Rhyg1$0{ԹT dp) IwmqUe=H'\<ڬ4Ⴂ]VH< )kqIEq~ eY8/(qҴV H52ƅ7'>^L^dQ;m 1 T鍜dݎGJT 3ݩw!*w E i!9åK"$?3z) qUCƖp!ދ61Dq!ڍSYIC&FؚݤS $Fu;o6Ynm v݉WO 6㓐qԑ&s0Ctm1|40 w֩+dR5i& p(nV8 E@ tM %*89Q{1O;pGcQEm%쒋nT-$qڑ8ÇepZhyF4{lc͸YUܭ]-rcZ$FiUgnYd+sUq\51SysR퍕%q.0=*b';Z,G gɺ.q*9kg6sKmdbۯ 42yY Fb:ԓ pNj8UxT,wHqo#E6і̖ZV =j4ݻwF$h= m-+KF+R"0'Y0 2;R`$B_zسdA(u8s3ZPN >)M =RDE~~ޕu.^M%LUKMFIBT쑀y%ė6ě۰ *doy*~SC3FBcA99#.Ӂ!9 ==3[nxvw5<3g< WyI$1ĪenToˇe2KVdvU]`r+YH+$]Mimw*;{˩.L쁞ZMtn!؁ e²Fb9 ]}c/j>U- +!v ckxV/Z `8ú$C/aMy2Fԥ+K`&C`>cUqZG6tG&9^jj,v2+po}KBŀsp^j1)H0/*gRp}mܥd,7PGvl'O- (w4p6&plzrɧDvxjQPfy񜓌RȫUg <4]̯8$}(m{ũn)Ȝ危܅#bc86ddE~wzQԧw1{Dsзj b/= KsB.2Am4jTcNhzj-..dRF; 4%,9̾cNX+q[]IK9d[>c֬<gm.˺؍Lv1ޘ)s fNr)b\LuFE>kI^5R}1ړLEB޴F#tTKFu'ڹwr\Š SuV^*#R I0(c[%,J~N 9"*Lfp}*P%GAU 4T_ wO iJJJ=D.88KNT1[Φw,`O֣攓hMN(z =\B7+A=魀*|:1nS|dz"ji4 -䍁1mAgd옅 9Ls!Q]]`L-+:);CsjɕKQޭn'n b9);XvGbbS{=O#H6x=SIYm jq-p+/펂HLy#5{ 楴\G$cb^MqZ*[?6U.c "45EXZP.Œy%c8tO09SGfqZùYeu!Kl o"}FC s*· j(HOkcO:WfIGʮ2"Yy.- gbHfO{2#@rGCn<6^WG}~s-˜*(ԖF'5j05ږOAM17iHsQ֛1ONM(k'ES9ϵ$D'Ҝ1h4t)S9[-@Z( Zy.u&Jm#>ԈH>: ֹ+C^((/Z4{QE0^ ' sPs֢Z!2S:ӧb'vzқtQ# kR77akzߒc qVmϻz Տ1_z^vLu3b@u$(#aG4 NN{U9e4;McXi+SO]6cGޑ%ߐE>; "-yoPha\A|JH$w5L@V<}k$Pv\ܯG88U)ryQŌc9Y]ew0t+@VD0Mt*o=əeߴJ59 WIrweP;TNz`$֞[EjC*68Ri'&L&;m .IH*SRGr@Y2VaҬ7cBEJU ɶPWj棫"R6Wcq EcT1&}EMLa+T(P"u0擾(-?E w23DU"ZŲ T7Ճw2.Z̉}5K&ߔifDU^@wȂ<)~nRՆF (vE)Hgh@>ů.O\P8vz`ɯn qj#2u&$x;\sRԉc]®Ir\9،ǰPX"ipmIX泫VF78x N*xkU\=SU31ly5PՒlibvips-8.15.1/test/test-suite/images/world.jp2000066400000000000000000001747261454007373500214050ustar00rootroot00000000000000 jP ftypjp2 jp2 -jp2hihdr colrjp2cOQ/  R \ "H$WWWadKakadu-3.2 !|?//їU~wUz0I2'D0i*٦UI0'8HJA 0Ԧp` HRN&KKq>W؈<ʇyt@ {D"SkpV?1ׄ:g(FL9>TybIH#Fu2py%j'zrE˅o/$aИI V؍'PuW D2D;<HTg4ADXEaUFduٶPpD70Ŝ AD(*T' aT(ڨAС(G!0$ta5:WP\*J",6| ѝ-vokN#bn.Otf:JxǷMDihy 3Ż˘nĪzZ}4v06񷁆dxmK&)+BMNN*PAt\%nMÇʺiHljח@rX@n Lb%w @'&f``ˈEzP4]dlS߃ TbL\."3\j >e$%:X:gEYOW;0GW]B7f-DGIA'r‹WlDո 70IfY.ٗ(@5ap%RpF^Bs>֮7jE[d MgҳZzG=]}Qn,ۺô%?#T0<_aU_$P` nc֋7{ }̩Geg6KyXP^= EC56 B8T#P}zls_`$dn ǖA$!3dj#Mw3Йq[W 王ZrpA g*4fǹ|0cB5Aa`QΠ_Xk3w2H!4 =9"YhT#nJZDst7Y/Hm_ȡ]Zmy RXDH!&_bh]4A((%C>8Q- oÈfZv\(|֝:0sk$20v32,;7pAJwhe\LMǔۃ&S3d6PaL *x}R(6 ;]!L޽]BRe[Ff)F}_KKJm@J>D oƷktPH_pVH L=?@SW= R<ՂCqzIk^8,]#Ѭ]ia#bFh~3؃7obg0Oc# ]p/MAz #4.4;(X9Y =&I؀vefc}А.? h RME[Hwb4C@?w v aQ'T ,yLۀqTվCY -8"bs{3PSh9^@U7^|ԫ`g R2G&Ms^ݎTޖ&ǰ ǂ'`¢0ќmr>ЯX[A[ :؅O_V{DGvey`󴺺KB~cILg&5mzA$ 9蟩4B_̼Yi h*uZñ{b-/[#51l$.)BKJ>N'kg┌ >4u)4o0{5Ko9TMLd_%č?М<4ziFQ-)"ey|S<܂9(OͶR\a7ۦwQ)zUZ_DhG0}QAQ8x  (;oV0 eh A]YF w6tVv V >B7p\5lje}xgvYӪ$0vfe:b'%X!&ȾDzz3ƄA`ٻ*Hf tdՌ[v.+٨fO$,ARöL:}gUio{MY^3Oɥ}}5lMB;z]>a"n^ Y&rsxw 5%1\J4n\LmX`'_ r;<}8g&R0=H %Wu0U*t-~op'[2]ѥo F,8GR~f44=,%g}WJx4XqpM JaB=rʖ|)وC8MϭS}O7*"<Լ~)X2skPJ5V~;.Jί+R#Nv! S2K͇[g9.Z]_oJb`_XXl=xO l'\=C2gp2326h`qvpR{>6c-~ȟ"y+3`n*nc{@if*DVQ a_Mk.v]b3@8C`'(FLð: jkDiokԞtA&YG.bE5-*UU(]0JT?=Dɾ֙~.3L :fcnt .[a=ħ:6!VafXh(=jeܱ@ҍ(B]$Q|:ÆdE y]8{`F z̫#e5Fq-?5=8&H=Spm+%9AWِ1K(\%U ,#i fy>H]V"k!p tB+{)tڷǜHwH%"L^i"1|Y00)@R,zpz}#@XԦ13H"q:`WJ1`Q nHG_$ؼ*jR\$q.~jÈ;: LCY25{Úsolɩ>:hA_$wwTcWz"MLg:&: G+p(&& }2$+$&(jB^Gsk5 1ת3s'd](¡[ܕ h.1lpܦ.0yZ:֟WkX@u[Ra{*_<{dV8 = :dƊrK 1&崻2S_QsVEY^ިjdch8kܨ.[?|:0H cƄɥbL<]Lk6{Qjd91Z؉bjB3(qw d) ́Ԁkqr+\nh7Zíoe[(M8)ZꗂC)W+TБAﵽ\)%YXWx^hQ%>LVo5G[r:@K25Rf 9ߢ%n.R-XҢ ^U5e}.OԽs~ p@IU j5m`C>A և S7e6Ql88$'l:)پ| w^؆B2dC^0+FK{`+%qd`&[;TR-ԔԗN{lTr&X7X$QQ2#eǵhD};&4ڢߴnfX"2`r|J'_`p8@%@hd;U7Lt&2)6 e`xc,‹՗̂$H^7~pU}Pf lF'jˠV S)(q:{SQ\|;70Q@hۅj^JbOD UU!]MM EqY1UmuU!0z@DezV/>|NJ%ŚI8 w-H 2<%F.o!5;ŁYN.q.E1t%փV  ~es,aəf2bp]8}Lř[p[tp]:)n"]Tcc GcdtC뤇մH".[y&1V5& )=e<` FSp2h&!wDG OEB&> xc"!?~:wzѳʔK0Ja_|ӭނj Js/I 3_}Z[8,PNa8g_dhN4>Z?xHeP y5QS$nU[wT (" \c|DS63s8 V)[#/ E5odT}{3 gז!@ݝ9˻LGK y)@.n೾bꅎGaft]c⇷QRP""7ePVKο O0t2;ZQTkq}Ddo=L`4`&(-3*_"S3OO;,i9m Hd,~C7~ՇAxhM9R(P 6Xe_o= FĊW;BHb}WQXa Zkz|NQk߾ѻ $մ$`S !oKL,f,<%RQjldkzL⢹Rd@?͜E+ 0J6$0j 0/_e>Ѽi*atcs+>z1k4H'}x_Q/6l\€B%hFB6#v-zERaӖ)!z˓a^'(9EA(N@}iݯ(xϪ1+Ny($QMUG"+7C/W@#;NyG:Y9,*יoL4<2P -؜=iez$/T\tЧmY38 pm6_#gcA)ʫ5o$zN˗1w r҃i2t )"N=>( ZQ}s3V+L#Z4KqЪ3_jxWUKЖ.|\pao"ؗ`@V_H?8- }E md~q $ Yӻ;MTzn.FDN-I)l%/E\Ek歗+ C^(CilYR3H^wOd[4rl?-5c^{wyD(gvP\ aK>Z01uY ^W}ID$mODׁ{y-bxX Rth]uE*&GbXj*z-Ze i1&))vײX2ǖdv{1w%FaK#ӌ\UH;@ AL`OHh.!P ?m5vDeǴrVHȮPO>pgF.$ߵбA4&XEFuv֜.Qbd i#THU]SYl a\{ u.liC9ku! H0$c\(Rə-=AȔ YV,"TZ9o%QY> p+oHfu/}g5G x:Zbuy^-;(ե,e2nb+lvvW9P qF.T rLXHhm$}PהJQzd?Y.kHpX ʢ$_4k`;Kеivt+9g\OIœeaЌ78bn3<Ƃ?^rm*.hi|)$ d̈J{sޢʹΓ}1B*W R5HZ._+4 QۚuӚO+@ܔq}1:b&l68a7[+"$C9Nt 5K^.~"K3>&ěQmVC!6] tVGTDS=Yϙu桴u/! $WRd!cd) ŷK/Rlo=`>C8BTZ7x氛Os|E5]v1/_?݌Z߰`uLEY.(-S._XVQr[PJ>nVQPũ@%(fo787?' ƉB"F=p@oEaϜePOq^-Xf/cn"i%qq ja jL&/m$`0K|NaҼNWL w4IxJQi.b:Vhp^>p'x:{-,ݗsS^|Gw58x0W}hRGjΣP#T[F8 +ڽ3dKۙ,VjhCbŕR=eʸo+|>n>9ԼyUԯSoLE )LeFV w&{F L59MP2!Di2fJ޶1d)gїCFfW=d% hn>)Z A/HR|r-ur'3e#vc=8!m67|٭%^b)Ok:C^&2w)W⺵1Բ?2{5^_=U>KL%-_gPSq !6[]I狤N><"4JkD.b*GZ_OE8Fkd&ˠ*v֐mklbo5Du0fto[ mzC?!'uO~wb1H$=+PTR"?L"!&"4̯2 ?Nfr ,NN؎Qeۢ˵UՉ^ml戙jTT{-V YԀ`` 8c&ŽQi7e]lvqZ-MY^XE; vht7'׎66B)M+}b+:`n̜ ?}~EU%qƛE$+Q \>O"a}B;I̦0S8 *.aԶ&dp8}VIff¥٧AYwT:G s+ }gc!msNԟ8buDJ0Z@F_DtGyо!]0> #έaOÂS/kFSJ)ɦL"b)ɪԪDrU%ؼk:lbϲ0uu,=T {4cWo<Rɒ.6vߤWN6Xh~pEbcs[c__™L`v f ijԶ&dpB9k'zͅKH#2QR:<³ܱ.\]C8$:z!/6>V_.l+x%)l׆".!ws~'n1\o;D-_zg_p!hV'y9_ම |"YLS]˖Yg,UQʮ&JxYk_wC F Aݯ4g2r@hnSqzN+*f1b5œbwf#~[@@M$H,ˑhf,=֓/+SV3}h'6%K _A7[8R)Ba^3مQ;' n8O5謁*Q-2=)G~5lx8#Q$tTy~ UF*,sk$%M(+nѥzhM*v]f܈Ї]zh6v򦿴u,T+Vu 0 X/8A7e)f IR%x=­hlhXޘOfIr3tИ/61S(dr\߁<Ќ~fds,dcfVyF@ =(e~ $ƃCOadWې#r[ ՑUфcX"ܽJ(ii?V yXmk@D0~XB݌mB2 Ϣ_ =3R8~^tk}-Ay&t;bc?j,;W1 K_7|DĎry.KqcTk Λ >s{iaD>(  ։\.k:4H=/v1VZge qd>],d96-!^҆Tѭ{`d)gW,=&Z!»6 l["z\ [,T4ERu"{{qf(QQawo`h/*?(Ӡ  #EgVoqm_Uϰv!wyrAN3Ml4'6w#"@rإcYAi`a=Q;hhЎL ,~ys T? fNՔ\/*,FA($ 7K xtHg)pӚ@{Z!RT҂ eY;lA [6" &1ERbQ<#%yתjs+ɃzbϐPabS.teF~VՊs~ut0R!], ̗^ j]5[K QXI*2]&i{`M,rێڋ2\n,7Tf%'*O 06O \30X9 GU[4=dr#~B a81U3G4!>4cGi&T!09:-d{})kRHH&b.>`*D=œ TN"4 z:8ĺ4P[%fRxX/ *֪ha9n[$\fqI F2013P4SKd^ZX|LRPE ̀B#dPz*aI خZ9٘˩0et{vrf|?勈+":9ᶱ 2~eDnV(`JxɱQ5K x({Ve11z _օ$ _I_+Pܰ/>j"``$X?yZr`0HT~wQ 秤xT3m= kJ1?&=[3(3wÛh:~xW?dQOn-G9'5kۛ^ꊩ@i#ŕ:IJ~c[^YmhbWRKW7,57~ ˰3a9bomtP )t<ƍ8Sq\Bk-KHڶ'@F֗{4v":0ߤ8)och8>l꘱'0cW1| Ȳ ;1dI8bS%gG):oz#DU%!0$!LdaʹPA{= !M A1vZ!6eSz6oAEOpE6_hԝȾvzzȽb;akXKs ѸM%;ExVacKgry *9ΘV 0jUt?e%\/=QR s؁.3p SwCNA{´D%#PyzQR 68VEuN",Ja\v+T\nRKrSROjΟ =&L?&.)[؇{zYP }^ŏHރjLeo` ZMU8cͰv4+(6jPZ+{w]ܷrO؃OɼJua ;҃Qa5Mʒ^;]9j˯(ggg=ݒ]E rp2KL&TNoo={*8sFªQ)V|iQ F{FhԿ +ٓ]dYsT@| M*bķiŒoI茎dkIS ճ3ltLjMQ6] i\ AR  KN0_0q%PEaNIP, LIѭ@]7D/kk,wO-RV)r _~kQ wXի -1[Ɩ= F#s4 eE;QfIP\_(ҫRM~BL%FA#e=jDM)b[WpkӰ2OBA$^#'+.QHML ݉dHNJ5%>Zw榏t|'QTקaK=]jh,mKNF0s<*d>T1v#0ԋO&XJΉ6sE 9Lm/n 'I\ށ{k!9iȡhpsUf렏$ ya_2LN~ci\a!)PhPHl1j1O &#)zw`f3X.OZ";TdT.H(LOirbc_P'a rݰ ڸJrnS,!BQF !C d(U@ntDD]>;Tn 3c}(ܜT2/g(Fq(q9TRgfHtNg‹tHr3,eҽ1 s]ӹ?a?!pt@n K8c1}#lc \niXqmy(m:g]Tvf&JtH=1 J`_7*a,ĕ QR`xtFe*/ws`nDĽ$-܀%ne@W ͕ 0k7/UMnUĽy8mEl l"xPD] fw#Bz)>.G϶C];hEyCϭy 35TF1 {Zwͫ:ھJ~nȄ?[ 5‚ocbְK F m[>) TOc,%1?g8!PYibjޯPC뉔 됴l*4 :ڗpԑ6ɿcΊG7`0O]J Cq3Bf/C Iؕr+V`0`6cXQ~UG$xTa!F'_^ڴ yrUGYڤI ~[ =УǸ]3`wFS>=Jr30)wM=yxG\{1\{-|\{0"\{1\{2\Wɘpk;w _y|>..~/IߋIێsG|>-z~.䦀ER)j : ϳ#Ӊt`gd1^,ɧiŰTҬft#@ϓ5pgT_냀WV#aڭI(^Z:FƻHOEiUTTbI> _&Q(!6t2㹍H\\zb#wȖa}zjkKH1Uָ`O^pӅ C s!cQs5a</ n\,Vڅ>[ |F6|`3PkXSǥsmܣ矹N.{&ȭh֎3[b`UG2!Yn*Q^o"YJ6Fi&%D7')#[Iȑzyƒx{s ;h8s755vC_ {aUaSz߶{:22Q1`v W}UEG;&#gK $֤狯9qsT~X [L%˼6 ?ӑ[k IZu#>;LA8/: ]¦z "ӑ?D-C%j;to"b{Vȏ/`Zc[/$_#%蔏88r77=#Pdz%")|VO%[Ā@ Я4n^/eS|"8@< ܳW٩KPƀXoOH X#LN4 7INzbkE=Xk$-(P#\WƱ݉"nƚ7`tguan#dȭ+!`^(zհԶ35SEg*ѳle4Z r()oԱ?I{ 5-I_%iHeR~O,?pVD4[-Uo0W|pt0xzi>XؒlpR:t۵1>.JwyGo^{j>oxcO=kܣx^5TXa_eԗc15Hm/vB{g|BxTIᶵ.md-cÐ3{c-BHAm3di$IDjc.rj/LgA5>ichZfoakܲAKǐ>(qw8~cA2xsLǺY MYq(`Ȍ:' &ݼXfْ>ZBp+XvWNNp̉$9O}AvyצAOI_܊80Ƒ9e!#T#v+(t Z)s#?}rwۿǺ}=M5Vu$\zCԱed5L~q!cBeh%a,D\]ز7uk\aE-{o{TR*#bx5%‡Rf1MG]j^́Dre B!c op\+Ke)#Lxh]:$MչlSkT.-Lcj_sscjׅ*X̨x:4G:sJ}ߣkjwZ%Hm^QلPOnY|ΥNpaZFAs U K?pC`@={P/\<( *Tb"YZ [ce5)[?=Ȅp- f136Y2Y"D=C_Vx9V/X }ӍXMN &i.kjS*aHYy@deRT_BDŽSwh=.4b=n0H|{ly:2bM*- `T0ҟۿ5B)07bBevhяKh{䁏zq "N9j.sNDP 9T(f /a"IP[H1EhGpt@tH"o{D{ yҰ kKcWh6vCbU D:Xw>U#R gh NYcWH(^*[|>͆~Vq[~}UW[ !<[2]s;U4;&ܔ}=U&wl\tMn m)+ Ԇ䉸\A&u09JCFJk· /5=, nŧ%&4̐FBȹ"s<5,hxNXfԎqY)!3aTddJ3ߗ\Z]94*upξl2>#RעxfV8bުCL:0Rů/9\ g tscO EK2ǽfbw V*ŗ?X>l?dT5b` Fm^'ڋ*Ak`9QsxD Z<t s Wz,t O"]2QgE?߲S{7F-A2J%_4Gg</G+r`0 X#`{U;Y X ߼^#ջ!I[]hbrި)9d Æd=0xoSٱ5Ȗ 9]Y`À: l5WeGܦo ȵ$XGuh`}boѤ!X7; yIi?@[֛zk3nմ/u2 A Sd%"4bէ߄u#SkхMq2 kt_ʜoMbvb|5LI"ܬDd" C x-3D@͹Lrqvi$v7u0c>1J$iP 3t\(\R޾ER7bJ3~q9Ip>"gl؆ is!m9&Ts40R T2苯t$kOdo'tLTt;$4Cot/,Ɯd۹Nt>T6ѼI8rgae 6DQ]Qv4_udzkf20 0A=q~"Nҁrͬ12E jԍfyl3Ǥ?f!/UFSw>?h( .mNNX/O~co!;]ALƿXȽ|#gT){i"KBs !^7n̞d|1ZXThkV>GhU}Cx8FVY$ovS_OWUpA[ڮb%{l!c~ cH |O:5F>5~\C&KBYA ds,ǍP`/?H@ͬF<( PuJI۟P*qEm:D:$RIf|hzs<<0. cY 1E/TXkLT`}Ok*VyP'& ,(W/Ht*P A̬iBJ\<@HK}tm9;Z#ƛޢMWaTZņfcGV[`"_wt+F`Y0*'!dRUPTN5hvQOS ʪ+N ݠ.F|bhB6\5 },^c({fɋ :S'TGk@|%:Kjӡ&S{*~}%A.@Pi#;SJeJ0)J'%}U @-6+azD"g;ps+6j%a gsd@~9?Zaخ_u$35*OoV>pvvD+G¦϶r,(,vKdt6RcK/K5:Z&i͕-o&f)]$ڴѽ3-#;eBC&,%{bsN`Y DŽod6_J =HhlcEVEu RV[ n܂izǢ58O/dNHhcFAx?}2JxO.s?!=Q$lCih2(㊝?VG"sc DN+I KϺ[ԫ.|tb$8Bk`Gk1s:P+Z,D?5ބ٭ (]MK(g_ŎNR,J Ĉ"+;9BO:N%|xZxi@DeTkWr}܁ok ܀ɷ; 8`@vyRӌrEǒ|ݟ)Qu@|Qssn"aK-싱]|Գ3x졔Ӎ8J!3MB>1[R ^ 6leD X8l=X<zc6V켸:%4=hpL陜9xYkwH 94PY`X?*Vs#=^+IvPහT`n/P'u!ڎ4n}1 qB%6 5֛y(̅[S ^` 3y"% _?;ȟ-()`Jn33v__bMF+ pG%{p 6K9w2Y?P@?f@ki+B?K@JIwV(K/ʚ .OC*^|"^sruϺ"]HpܔѷfsXOew')GINmgJEAb&F+~J&RūTqF!FN4ݷBN:e6<7mJw_,fkS,ѵ=b^ݛ &Id+[n RP+[t'|,1\t{^>֟0iO,ܽ@?VB?DPY_L}6~ZD) #%\Ӣ/ E;1.&{\Un`|cvo90(MTlWS7ŭI$5Im_t 5#q&&w|'\<`4hýzjlӐ!:>V^yF^ݒ_V~ev<ϻ2AU' j◵֏`RV)׽)fGmߧ Pw`tAX{h[یaQhI;bvXCS_OL :?)s@J&TZA:fMT=jo&XMyI2Ƹfw/b[%r` OMA+BxP;7Ƌ鐄k#lSl$!x~~"|a]\T[]"\ a*-^&/ҤE3wWы q[mNEu{q[jPed %$<@ dt^5>L]W;]'o&&\?4l-͸9&u#dLlaM>;!ALo 9]Wm>Eb{#gXJQRJLH$n.]z\v=Z LAl;`im|W-ޢB/1D5|~,z3Io 9'slM\dN׻N 3eT^ 'zdWY5Ez ٪<i#pɮ3YJ: 3qH @V1[Mnpֈv~ZGY'#7gFe`(m04;;Qs͎IKjcrH"j<'6j>ĜOFg@5.!2Túa%WH̳!O=p)z[fU'-?i4hfеQ̜+~E?m:b֐xH !Dy"N0JL\v}O;p!dX#|z{ 6`  S_S_* o(L3LBxDgTTyT5%ƕ @)aSau}fq˼|F=3~WdQڿ9HFqխ\\IjkS7mLU{)758Y(|kOADrTt؜h~^#q6%gtP] OG8v.s:p!Ix.&,bDy]R:.%̶蕰SZ"srg .“Pȱ/&Ru7D䤻 Cwe8 ЀH0<ڍwcN;,|Ĝܱ0?{a=&jbG) ,Ǽu ogIJm0ÿ@9!9 h}Z̶υYFⓄkwcFnZ`<ٲUM[9,/N_| PmDCH:(nZGSN„9'~گ:bssi`#Sb ʐ@}=J;[ ([`B߱@^3Cd\<y w;"M+`5}˦R„;uTt^ %y8H/`YSVQ1ɥ(Yqkc -{˻T, Z/Lҧ?@EޜԸ τyzΠܩ-_ Ap]`=ܹө[`ɒɠDS_o Ʋ@2tC~<W\!}>^ˬrN3P]>__y{N0MT|GOA!d819uUC3᳇;]8w `0k;8Y]26 -~|7kUGΑ4fejZj67&bwEι5ŹƛT'ٙ@$-^OG@MU̕'t88A|R=fwjOHKDI{gs˨F_Ҥ|da2EnhOJϪ+*AnWaF@ ,;ǐ Ti;I=GPp皘4(1vi.5t mr`Dp4x|ZJz1@(fQ:%x'tT{jAgxőW/ wzoYvˤAѐm\̹9_ZE5Ysp0TSIBD^AQkm޶ @Nd=,;ЧJK( 5u9p702E ӼfՂfDUtmlL1},綩%nxRkPy!]~ou~_TAȆ:NKr|R+Bych lgzOfQUH^ḯ>5*:&..B|pŔ3M6XHНՄ?cɶ1;z{c6dj+۟?Z[l9ď,SUs>r?|S*+04̢pHQU~oj>-۲,sv%kaZU ޙ]'hvlkJ:SrfP!x~'dms^xD|P[~j \2CBdk52{V60b9e &̉z|O׶n"cU\03)`: Œ}1Wa.uft:M#/yo 奐}q`ŊlD}]CB툮>>$LJˊ5w? a×XNHP<3m̂] e:<yfS hZc8>kDxGɬϬpFW|m;G5JQ'̏&[]7xҵѹQ vIq]h#Ca=sRH::Se.)}A%Miq#:F|aDͻiy^r"==KzΜ &)k4G &#@~6+6hg:{ȠSbTe'F@X#ۇm=yt}b3^?Fa?PL4(-p*C u q= *7yEWu(GlSeY1fhǖ?2g3()p1ip^uf];JDR`%DS N`!;JnRQV+lxj 45P"Y~#MUVʞt pT]IcHNZ *^+Z! ޽K$HbE{k[H]~$af~R93?a9>2gI<|WLJݾM\vh ^;m!sx 8 5ZMaE]N)9H߭ Q e[t!N0l4 Ww'4cPY;U`]x2L¿OMvZӌ(.}!T`E ex[cãkMyuL~0;+_kf}5OFұ ZQA: ơ ҴTN3K !wh]JNEݨ{$<\*A2b39G^]"_0nHgs|aH%"qlJ{RN /=$lj.n 8c:cyG\ ,J! ;u~v㹼^>0&/.pל* Tx*okI&"* @"/CƁWj/ʿ133@|;\+f cujK2$1%q\Ջ`ԓAz3u k&]$aʀ&;G SڛD(tلo`t n5ٯ+iR]K9hD{ C38 e /;Nq.e;X#!H7gw:D paW#[6] eF>]&X^OUVdF# Bx P/cӁ AL <Ug36~ۈr'r6.|uSH3f-ߦӗ2I,48g€S j.peû8˜#{f/tgpI .ޫ g|;0J/m_!R, 7 I>Yk˺jR$a39PsB-5i*7d;#ڗ~gvy݉NZAPd暋x5c7༹:"m#B.*0T+Nl1¡*aiH!~Ч4y_ kuWڥٍq {g!*ںҹ2@dZU֖ۮ9[n t9RpM"Dhe,Vјx"o1uDyRJUK7I޼떽jThܿ gl m( 6'ڠ(\ ~ZϘE'/~Kb!?boߋ_&i+u]4Ek4(. YRY  7aq\$+['{JVXd)K=BBkc0E̸'3 f$l~83n ;~#*"4Ku_e|$L]aDNjAǶH=?atM}^opw#^:2*K>. 'KcCjb: f*;e|˟Lugn4ji1z:bW ǒ۞QT-0}.Vµ^<>uح;Ya'B_. JlԎB D VbS5{[6>J[Q,7C8¡'?{SqqTQ_Ӷ~ə[i\LK}@b"LYŶ}-5]xk-E쉋<'C8"T;~s3\>WL^Hl,D2ϱ"RƃA?Ĵ~1Nΰ?1B7/nkۜ.qStZ'FF[xŠA yUpC^3|ٌi!fj13{xƼ_2^A>Q1+ND IH'c_=%i \3\ KyLJoRٜ4rgېC>% Bˊ>~S6&i$@xo7Ni)$q qqQ:\Ds!r'=1ܖYn~bg 'NMq=BsDS"ONVns|BN8®dC:C Xb o4͞_E#U%fmdœŜ7tݧyBg\sfs'1} L~ 8=geci}lBPKJW^FG?sNOAC50̑Xc, }Z ~SVrђ Rh01zsޖlx_cAck8\- mѺ:G G9=Ryա;Z6S# XJsl}W1pj#~Ha\sq}wX[mHLm*ྚ{T hlڐe&͒)F‣{"ە%Y]L08YjNlXW>Yt1A$u ~U(q6D+& rI0cQo;|e75P(onڔS +<+|/EF_WJ!>2v};Ik2IEt>`ʪ nGmI*jb$>ޝ$MNd2̺:'xuEvNS]/pe0RJ|^}0:ʃJAk3d0kRv'+Qڙ&PEy(g<Qfw$%s Nc6vLVS!jŸ9Sf}Z=i|gY0AԗJ㘛e]1K*ܞy y1e[h񄱧t3&yD<6'4nj @3n}`É+OCIdӐ&>)9p|w9]V6^+Zug _ٮ7V'Yo_IIwm晵-8mHA&SmOdMGcp5ܞ̻R)e(dD*fA oGO&\[ttt~zA|kJͦisWT1!HI> c}C6aؽSզ t.uaf稃+"aVCB\k8c¤e*l / [Fn תYr|prɧ!Fԕk=g02Ͽ*ff%BD╏#BefF |Wj}ZROSGFRg LbQƇ{م g#'E~iglҘ8BkR!Rlkr':y udnA  ;CʏL%40yBQ=Z%:} |UL&ޒc֌4>?QWϿG(ZL /eT+X;{uF3 dz1-",mGɴ 9[CPAGIg[6Σ*}E @o$"v. (twx!M{M]:Ӵ^~!#\d]Ct=Dd VfJ9OjOeDFWuSGZbub-OȪlӧ]PtQ>WȓUUjECyOUE7PzGeEJ' ʭSd=Y#EBOIN*?f"،tZ~"=BjS+&vE׌1v}KyY6PXNgNagtq{>ТCQ䗮'E:-: !xIqp"\%:dxNrL li뜀U tC2!*Y>KiFNqw刽Md62uAO7MvK D6b4}464#)>8c0 #g4?[Q:qb/'qo(M\X 6 䴓'@6ye=}&rXrGc}%]o LJbҗT{of &*C\_͚  PTMmZ/Syif?p4?LpAqu}OUX@\P,x=uY|m-_QaLТ뤛AN#R׌,!,!UFx(lH#D3 10#~tB敜!RGLNX6~5Zv6P9a Zf?@Hnrp]#.gI2>E?҈&YK{* ًڕXY#=_XGܙ|D}PZcekWγ΂UMٿbd(`=bp/OPk!WNL3I{҂o?"P*ﶹHIg)zĺD}1 r9:gG]e̸.{+$8KIi8 zqJS~,&Lƪ$rtnz2Pڽ 7)tc8Hrԙh@aryr}BzQ.Vmmm;vf]%3~eg }j3R+֗FN,犞eq{Sr4y.+<;M7Vl6-?LJ<~Pr-cu0#>DWD"bxR$c~rJ~:L'*) @#qh<.c5w1 Jw{-P.YHJ_!3/Q|liRV"&U <S98ߦq.0y37KD \Ý\;%[ª<8 :1+hħi"9G|CbmYQ)jnhL"em+۷mƷF}jjyiﶊbmg W+qV{r*)FHM=qWfsq+pgQc%ˠ-m|wK󺇾ޚ7fW6|wQf׍ K - [2ks>SzZj;vF^t cNjCU!*c5EpOtvub xִԡ'|7mɤW,vP.wx!YtFY˱j:(K5//| w 5+OgcnniwİQx.Oz:Q\3yWeZ Oc MTHLΜk#7B0-%lQ]^xL?>!+VjG[]]@D{o_;XEo~,'{6Ъ" +8N  urX!xk&djma@gQl5z.vPI+ κ;:Ȍ+lPlv[,HdO&u8,Ź!H+lSjn-;wD@Al@YmU!>T CZ$L,y>q]A jEs* }y=#s:Z CVAv@j1gf|t/0x DPp}\3dn \H!XRDDK"[M >>_pꇸBmu!f>fxf<@)Ni=2y8v EXМ08;K'ЁuzC51Wj鰭sw?,pDM%>x[qo՜VʙZʂUq;6mH\aR q ;Y6tWk.ջJ9\գMzq4uy(ÂR+W@ةE{ZGNxeڭ|ҟzѡnr,V-EE4/=s.L݋M8%mJbB| CG24;q*3ܚB/%.-Do)VSi\hQm0-X-澫7pgN3N 0Dfo.W*mH9"1wQսWD\2+56 8DXus9[lqBKB3|Z%c@S$~Tl^/8Xd+;io#kި/MFjs 2 (mix3&óh ~D73*pÈ떱Dx=N)NV)ERLW?-˫2uvߛ:xu, 1p1aY&ܓKT lJ4ɴ\ ů+`ROJ L1Eٿ%('H$  pPs KFNͫE_UVs,BW]YN1G@a0.Xc:IԸaQ?=r5{>/jM[LL}E6%{hCwhQLXFUx=nC+{cCSY,%@dE7k;>8ELX?죮a|ߚyON9jrɚbq7)8hA)8(THO8(Wȴq@'uWpWjަr߿OLy6\/A2x# 4y)%$cƙ3nP > A(o ONL Yu@ݟ1BC_ÊbfR鼌ӽ~&èHI *~f׮1'}`)?I׶N_'yGRqKu%$ I7vKh9aS.;GH8/\)D w|kECi:2ꭉCX,ٚ"PKԜ:|@P*7$t1 I| W$gCM¯;;)o-7[ )_1B{7ؕ.<|'8i?.GV]>'C,sx0#Iv@>HyJg&ZJ^5-͎NOa+P*-y= }f\ ^/SNؗqbu|[7/ O7,1=@M"UV{Ӛ0M.7,Z`moAħ5ygirJLVܓD.ĘGDM߫vKИ8Y߮Y>crB=DɼfB͉ KϼذtBLG VE:ب`'׊R^I|tCNXu\1OW&2ADM^|V5D% FrCy'oA| 59J4 Q@ۻNLXGi+17ϑB{**d+d/H05d]Hoqa 2Ϥ7O"bfug4Y3fYܶZXx89QT }H4y랂F>'Y֐Y4M ׷UYNdU,":#XU sj~ uL%t0]`d+-rWٸؠ{_y`j7&aeuݲܡک.t0'*J\;> aJËZ (I(_{$ YӺŏ#h}J*}\spt̸$aVZߎ%B5.ra4uTKmB(NUMȫT9iyM0D]NG "Fۉ-AX3&|D? ڑYESu0uh|38G-D_8p(E:(f('&X"B8K0-t0Od@˸ 5̇`^SnY-YIO;&+&UkNUIc@IXGIҐ_X"uz z^؛8hl/<ӁEՁ=8DXӰog-/mc%#"Ӈ̄ZSQQ? qTeD`$x%y뙁֭ⲗ!6)ڈ-R3uIjaRSFE5#DM bo $ T j[0Lf&dj2Sf=a<X,S~=dPmpru;l܏*(_%9GFyh^9lO 2Ev֐LfotbvZPJs(~E<Ըz. oԭ +A qO*E 6W*RD&թn4kF'A~QJrݵH*x}ccذ*-C@,\|cIs%9ޠǷiҥH)C_&Uh'a2_)6e\,ʗQg`sr ǂovWWcaf sbq9S}8\gS%FE~RJ.]հTmFp$V Aюe6f}R9UeN\43q@ȀM}J: <32q~؆8W&(m@ ӳ,VΊ`0uK}.2pfNA@H@ݔҨ {_Ǚ\׽ȧ#bKE?Q +U_z@REWqӫ#n=]4I C$@VjAPtfe  d˻mup`/`<t AcF=1o X ۅ^8g: Uԋy3KLoTá? BykB`&2η!@Sr"%B?d{n~ =Щ|BȈ !́eA%ɿ)ۆ9*Bp_E&bU?i͜8V:k\q2N&6w%P2xi c0UH {?W:Lc*ei;d>! R1.?rsZ"+l@:asx_M|e '+A>D(J^_$)ߦ'V(+C{uXKG1о!z,t aʸkqw:ٰl[ ĸ\XJ^Dcmߎ4(}m@FӦbzS6j"i|ksP5XQ]<|vsx䑦EG;}bW?*[^#͊,Ir2},GY!`e10[suW*ۑS!OMXE7Y~y 3 Fs; 4)d0=!!Ҏ뺮xA0? Vې2EZ 0[@BN/xhͧ?KE}BBEByGXb{L3Гґ=Tq2|~soitJ90n\B`2pu*yn[tmǫ1g պDݙ5}Y%z|=lb7!mtZ߽e]r  xWWSr(0ჴ,F|&7pe!1< '%>(I ) 'PL7vr K`16RQ4麴!aY T{+mKެTlːA+6=rۣZ&Y~DV׼}"D}d﵃ APs rH׋A%bju[tj:PUPnF5| %Ҷv%6NtR@FBN̙"QkdŰgSDiAg2?.x՜[q EM硾+CJ'e]b-/*H?vbl%9?729غ\gAW\l Lo} oDOδTibvyD ez &|l!yԖpEgL٥ȫb>ԂjBh4$. ./99>^ƪ9$reM KWLSlDAYLK8HHyB_Sɥޅ& iuVV:V#fEt-$9ߵVDy҉AGX:h驲-Ϟy(z?葻0xѻF;م3|~T;t=ʔc~‘}hJoMø̮NpY!W-3q1+tMCwzQJP<8kaY֛I3I-91JEfas'i1-Oy ?,^Q:$kotkuɄ*YY͸_A<9UѱOni%K4~Rq [}`i`EYAЧGr=%Av(ZW +-vA|mpo([Qc,dTaXh7{؞1ǺVYZ_W΀__g[A޽#]B<6("ʯ_$Ủ3`qFÉ)R2br[WfD:ӕ ,^6!I#*g ;l Z&@5k̨i#.ܹ x^TQ.^h`R -ND{S% ol+u̽T٠i&L7SRo]3z}j.okWSSěa]؍ƘLT5μn쀋PUi2┑ASPmnnL_5\G. S,A`S ;PSQbgFI O]*i psVצlkeJQj(z\](|GpfDT-iUO['SSC:I6,5Sn9 ZV0ʇVAQB3>'8&Ŝ( 4K\(~4GHPC*n]xJ`]7\zz%λY/R7!#.t:޽(퍞|STgo@y80*R닻R\d׈ **t0ppX,Ax ޠk%k$CGMΰBQǜBBQ b.\0%uc05J( 9Om_ Hء h2҆F=Ne1j_wܯ)jB =N7PW"\,/%hIx*BF۳$xӓZ%(~@$V 4,11OJ$pQbf%M-{R:=ȵZuÚ G+p V;#)qNgPXMUJ:X?ߔڏw{eVеO0e^Shϊ wA9ĥrNhڞX7S;LPCI@&(8#WnqJVOVD4՗1vw70(?&zH=cui~+؀;!T{Ev5HJ$NR-QqT',)m >\]l͊a3^PG*GWN?1k/pU=zIJSH_xl|}*7R@bP\^wA$@[ i!=ƂZ:49P𙬈^-LǾYAYwkbdD&||_r90,cr/We20;D7F Z|6#hލq:5G_DE.Ӡ\qd|BMۦ7znVZF22g583e.)kX,Fa#i 8 K9@mz2C3Y qu7+ًYe?2Ke(7pu93k s tzFLJ)WޗLP40㵻<Ԡ#[Y{j#d vqtjP زQag np>w;&J"͈&@hfy MCzgB aYz(tԌs\cgjMR:w4 n'& e}EF}ھwU~| v)-͠4-+{QRʟѢUu_Ƨ>%w~zsmxNX@j~kS5\Oy[<@QzEDtAC:D--IVFu~c7Yr6@{Lটړ V޺6H7`d2lxTH+㉏b<|樞b完e2.5}/O+˸{ x@0OM}E111 %_{٢T>ѤPNtR"$`1O^ˤ7ziU}:ߺqKz?hc$L57 S, /ɍZk7~0L2*d@eq m+#Q˰ }~Tz|&f{VK R@@4/`l ݑ+/a\_wv-;R' 2Ph]KWˊi.5ywM:/ C~Vю#d=ཥ}3`i]%ݶey37ԕDeWDL\D_I Zcu4hQ08q>ظ%^ +ҸWEyZЕ[ױC$ر?VJ4x +1]R ׯf#ްw@yAcnaD e{RaS~2>.ijQDDc&0ȯּǭSJq{ɾ23ghkǕe-=Ix5P@;{qo+n8BWqYq7귈yI[r8LdM<-aWLY7ujubN:g,œڃ^$leJcsnΡdJ$Uaؤ4 ΂RGF1^;`eJD.aHw~?4Yj[0&z%nd-ިiny̿*4zy6Ag o$e_=QO[D(.þpGmdz׎!EfQ_MMGj. GE s0U. Zn/: P,uU9M3T-E#&qw Z.Oy hB'2w?{VpT*QOP_IcRjgbG#Xy)|U!Z(8~TYFنD9d+$[{Q}xԴ 0 vHS~㵃)d$K:t] [ 64D.*'gy-f)8`}q[e,|vB?Yg ݌]i'h'"2My]*)}AiJn=EpzTiĆJH6]-&vYr*TG80~W$xAvD žw & aJ~/:}Vޣat2oȐL}XM|ɹBiDR#Y2fRXQj6U}R#:Sasv|i9As NO 2]O1Kr6UWphͫJ7Jgl w6A'89~7W7Gdwi쑄SvVܵ|y牭]v䞹mB_~KG՟h.YgAvfo}% <wlC㚞9WhDm9e ,}.ȃЫ9YRA8hFJyFOXaqz&ɑ={KA:`haL[t~'qXu1ܥxc [-LdzRUh0m̏aErHS|_ݗ1NTsjfGʪ;a.[Ny +IrvpHUw'|_7zQS4<0&Jl,CBm@۽K.z%pCDL!EZWnI|R-E%R~FVUĶ[4[) vI0EWج9!ǥ3̨#2R$d!4:~GA9b4-&)I{X#o3~4 ێM -U_b;׿Z 42 ,;'d-,B XH(/v:j8-9g:!n O3Q;v_$5nb1R-|_a2z T`juX0 ٯz Κ C|^+hT"MgO{*V:[H61aFdw0X^9Yq!Aa|`CS?掋8{pڄ~/Q6<6YhxjVIK[bGċM`*]5#\%HՂ>.Rxy@U,k]bF*UZY+ԣ0G> +Cʲ`SC`ql>c47䟔Όpf{w0'Nśn I%U qp]hr! oi=+2_.P >XZYM{˃L -FMtU ;@ eИnbmNp. ̐p#(*wfLi ҷck1&07RnT5a,uc7C2f4~7a J<o)Q;h"P1jjûHuo;%1VyPb`evb[ݐ-oprPQS+CnM]E SeDtէ N99yڈGZv-2aw%'1-b=3`tmm35 o8uʫزg(0Tw~oD GKb+xӞ2PtYGw:n;u1Fx9qw}tҚp)شN3xQ^nxΕqUiM#k&лpl9?C_m=ʡ-g^f +gnb(pބZ)u[ZY|W`b&n(o:&YzFU֣5HW¨OdTݴYgr}pܖswXIIm"=RA꽔Vdi`ZPsf:+ i l`{hPKۺ[㓱:XUYן: ֦5 ZcΈJX]`~YT&:f'ů>bI`Z(@Eᤏ9 @ ;su(W.-6C+Y<ŭтC|x |!n뉒A"|=6,M[AkQlKzp}uRHM܅)Dorz 82c"Q-b؈TSLZY^{} Χ$NXbJdJeݎl߅ij}Zsu')"%Ӡ;1ݕ"l:BUE{]MbĤ-̺+W~Ht09?0풧tm!kz.Bv5p.FT+⪅^p %xQM2K'B.+ n~ʦz˯ vqsj (0S^-\mֵW>Iߩ~opt?NHרhHJoTrې]ơo_1a!/eT+~zvXaeX`0+[gb)Lo}S`6>uznz ]Ȭ~MmBͲVWL2^*`LO<ާ+y{Ax4I9 mYyq2֥ r:/=# ~@lM>f*5\mM!沸W3`Ҙ0d@:?ؖ7,^ 7b֡X>(h뼖d{"(h7AtΖҘa¹YpBiDv%ksCSP *狩SFG]:x6RGa-UL%΀’g%D3͞߶_L,iw>ЈNB,=Kbbd%75TJ[wN-S*})t?@'Ik&&Vh!gG,U%.N5v-lda0{`BAepdPM*EL+14[l1zsKS+Zݙށ_Bp,ۚ9nggxsԧOsP& }E[ԻS/-`Fх`_'B,jcZWEo;/OzeiAbUsl o%) A$#8.3tttɡI<\ٿ~o3"B^ D/$$d|#"讂p?$p!N~' y։1:/``=Q$Kq"-fdT1 sW$u2"|Td w+4 GIG QGjj d |,6AQ)I#?!1)  bɲof>WrVt>mK 8ʄs=3̳0p .ɘgz f`yTT# bΈ! *>a, jˁThؼ\@PGỹOtPY>ɤȔ^lKwE*7Ulo L0cahFqfy2aME3C?[_WeA+7Ip˰,N3 }kϗXC$f"8U4 }~pe ۋ \Z !N8Ć!D *pKYzYMggB u\cSF7M[3 $y˹We$oԴ#fdM,|m :mcZ+<C"cʖI V!v5n@ t7 Ӥ*߯E0tb܎M=qܰ^8 $:qjg\cseKρ 6qwfrYhm:ye|n=Jd-1*BU|b.hm#2>ȈQ{gb Lann;lnAjTL1sѭjpb}?)[liXT X쎢K{PE٧&X3UؤB@`%u0GClLOMBtM`-J7+婹a1|J@r[u3)0| f /M}|Den)㲿[</>.E ԇH)T_4zrs׎ WW@z,,\" ~OEkRIT~)s^*\u~6RC F$Ý<'td~Eމj B[Bx(Xn5yZ;X;{¼1B"l@Ws{h0.[ !4{ɛ߹+w mZ;F_5)H4 e˜ p׋+ƮoG.Ǚz P|x(/gt -#V;EfCoK~014k ĝQ =1)k愈HpW:</ iSU,Ptb ]&E0qSl>.5 M8sKYUU/HoBEY$%)@u.4/0pTY fzPq, l}{KۖN ey(QX &(𭦥70el:Ew'b(oj ӪLw8o Rb?>-?rK_cc{7} }!Ju(pܒmy<,vr*'dɨc?-=@7>ɛ-)\ki'~XvMKgcxYTٌ*X!`QQX;UBς?݋V0DUԋE4#8o:X%SN$8&Ü91'4EXܵc%T,VHNHB⹯pV do5;ʻS= +A^W` *?Te8Wd}q.puՇ (=mm|Eq׹_4tcX6e tJ)H,}eވ2X$M]+o6a4b |1. m$mUİqωwQJ9n5d |ޖU/ xoV[ {;_:Srڄ}#3ް9ߧyEd4ܫ&Pwy5.UA30 9n`"f}/R (s\nXX,z؄q:]҂ >5s юƟeX8M(cBg.Y}%f-F(5嫃xKwz0keNc;YV ;]k KBR,we$0PuYj\DT%Qv`Yp;|`& +yMbi*I}|ބL/SC6+G2kQ4 H&>N8(8<7K|NhAd/,fR++5ex;Q/;GG5sVziU܅tGi_BܩNLl`]")j P`e uתX&_Ѩ3 U,MwXcg ӭAcIגI~JD% ck'k2$< (\MAD:-+ObnC""M(/`A*uX%Q<"isPZ˺ll;OQuH^Oh۫|lre.r%0u\9#sn7Z# ,. ـ|tϋ4=s.4gѫܡaO?=@NVkLO"!?X>z')P1JԶfag⼭:/KA! 3oق2TTKLQ鋉~3[ FGoH(-d]k]n]yMx}v-8kXWi  ć*zFy_;恙gv<4j/.P&`7|* }*2NX%*b߯ :)IMw5=GYxzv֎CLN:bn ޑSf DGDӅ}K ZhRѽ]S7'zh>c]ilވ}'*.gzh:&U8vu>Nu!ľAD)]?;0Ȏhi <6,2l?WUw"G\=욆oaBDzpTlvt܈PR9@קBNv\dE*tOx ExUn1uq|t4e{?}v[4J/5)h|͒)0bK`<@ frASBZ@:7i{5̸;@W q;/ZſjG벿>_sZ6|tN(/yz$;j .+ekY'l >Kt^%鎢WFɬ,3t7BtrvTo/ߢ`Յc![L;u1eR Rڊ’ĪR|6* swc }rDMmp߸؃#zhwհiILV'0/(}$'y+@^z6E[bPmqYXJdd%}&@dܳ m ]Ŀk-hoo;!.p:ď@俎6RLAQf`jBn0Y&@']?DD{I. ҽs>=O42eUA=mi{l&Ho4i6G^"V`>/pR ̘Rȼ'>!c ^̶/mmR23٢5eOe4 >va_~qõ`ݖR~`ZG [4*iw}W(4O`>|bq tg-ZZ.!\^KaeNw9odѹt;ۂB|(c rZ+R{J "os7[K&:$IDþ!BZ(<UeWir\낼xl>9lȝԐ'7gT#tF҃W}t/4W$ˆv;<'3V606aD3 plhUDie30rTR?> (GODlr9Km) ǭ | cX1WnA$+KsT w)w6BO Ƣ uÅpE-o-=esPը}u;k_J :9$B$@kI25gF $cj|x/Wh_tp(7 #0!z `!0C>wvƦ  8~)~3= uk.=H=3eM+UQ_(:\~3QK/z_/zGnO{~U~x@~l0bUΩΗ]~7ݫӹskqo*q7Xx|=/D 2+P1hMs{qcS0DOΧmʤ'TW, չ^f%nnJn웵"bӺy;m;_w>llr.'w`_PMJ˻$$))Y~1ѤiqСKjIEj>MvM.^^+ש:fy<}bWVMkUC&6ઐZ;/Oe_ J,"K y`+X}I43 wtGb;~{ 동y7@Aܑ6?2֑96mݒ%YWkij3/C9BlbeTP`϶m>D,fnlQ$ 2.Zc0>EB6 >l;#Ë#X:-B4,A3D G&Y2哗:]'_Vn44\ӝ\.bnX,&qHƟd[Np'TMrhP>q|>ϛ'j8]ZDDX+)%!jf`4# 8]=#:+} w ѝBbrFG %k<%"mp[f Q;Hh۳yTӹfq"<.dwlj#tZAZw$]6v dSBRWh 2M0b3 τ6n:6r\ڷ+:UK0ќ,h3snU9X'%G8,p\$kߎBp08p$ Jg0эL_,6גCUj dpdL3 BzoP?HJ~0Mʊeۧޖ4! { ƌ2dXzoةNuyI J"@k,P <^,{0u~zތa7"A5d 6ȼ= ^0x$T_H#Y&oc,'ğ @`#Q_Q()~D_d{ȫLF7&KzfҨjͦY"`Hۛ"lHnJ([VB9Od:~W dƦdٟfy->uPY+`gapL9 ]0ӈ΁xOɦ۽j-( AUQTbWsnU_Arدӧ^`l%dHlHUAޱIWA:敽ɓ^۷nݥ R T!ٍ,G)ol?Nq(c7;$@m_K-!bHHKmURNORle=ּ\w(?tqiunky_vI vXn/6 KCLiHhG?fZF [&Qz G]F uS5腛q;68&{"MgOE?(Xǣ/QoB& >} \ȧ4!V}lSŖ& 5U.b#g/4kA(;ע8Z 56H. K?CZitu}7@!<eTbII}`br9%eaF14૟ ́kAҪ{:D~޼.tv x@$$aYB*'g Nsɀ c9~OĖA5oϻFf&uvOFɫC3ÈNX&Ys6#}SOIH}Z&v6NCp6+}Bexh> k(qb=ЕK$8Y% %R x5:Bc$)=*$9e;v1RNGrHea=&p垍㗜:ݰ4hk.TLMΔsȄTJ6<7! fF8p N95qb\nlJFҮm)3 @ᶻBKjA:tg0?'>\bQ"Wgs#zS,kOղx:D|:T vPcA=TU:Ʈdf`G݅J38ϲxƚCE& 8kjۿ{74i2eC3! 8xaU̽#ZAËbN&K`3j0N$+ 0gbmg1כLҿd *)S[1gĠM `H_m>?}`=ełKEET%5/X9nL+4\<8|B skD}?xaN[m0cA%rF*aluHH \ rXCv|17v ySpA܉g멻3Q2G7Lv,F]ΒK3E'&S[n,J>AO&t丰Q!y{:ȴ^%K=s@ӘτμpȡOt7z4z~b 5VN$:Q !3X'YWSsnTkV|{Q' %e _>#z,r2c }i7u gx_-Ѐlibvips-8.15.1/test/test-suite/test_arithmetic.py000066400000000000000000000574461454007373500221350ustar00rootroot00000000000000# vim: set fileencoding=utf-8 : import math import pytest import pyvips from helpers import unsigned_formats, float_formats, noncomplex_formats, \ all_formats, run_fn, run_image2, run_const, run_cmp, run_cmp2, \ assert_almost_equal_objects class TestArithmetic: def run_arith(self, fn, fmt=all_formats): [run_image2('%s image %s %s %s' % (fn.__name__, x, y, z), x.cast(y), x.cast(z), fn) for x in self.all_images for y in fmt for z in fmt] def run_arith_const(self, fn, fmt=all_formats): [run_const('%s scalar %s %s' % (fn.__name__, x, y), fn, x.cast(y), 2) for x in self.all_images for y in fmt] [run_const('%s vector %s' % (fn.__name__, y), fn, self.colour.cast(y), [1, 2, 3]) for y in fmt] # run a function on an image, # 50,50 and 10,10 should have different values on the test image def run_imageunary(self, message, im, fn): run_cmp(message, im, 50, 50, lambda x: run_fn(fn, x)) run_cmp(message, im, 10, 10, lambda x: run_fn(fn, x)) def run_unary(self, images, fn, fmt=all_formats): [self.run_imageunary(fn.__name__ + ' image', x.cast(y), fn) for x in images for y in fmt] # run a function on a pair of images # 50,50 and 10,10 should have different values on the test image # don't loop over band elements def run_imagebinary(self, message, left, right, fn): run_cmp2(message, left, right, 50, 50, fn) run_cmp2(message, left, right, 10, 10, fn) def run_binary(self, images, fn, fmt=all_formats): [self.run_imagebinary(f'{fn.__name__ } {y} {x}', x.cast(y), x.cast(z), fn) for x in images for y in fmt for z in fmt] def versiontuple(version_string): return tuple(map(int, (version_string.split('.')))) @classmethod def setup_class(cls): im = pyvips.Image.mask_ideal(100, 100, 0.5, reject=True, optical=True) cls.colour = im * [1, 2, 3] + [2, 3, 4] cls.mono = cls.colour.extract_band(1) cls.all_images = [cls.mono, cls.colour] @classmethod def teardown_class(cls): cls.colour = None cls.mono = None cls.all_images = None # test all operator overloads we define def test_add(self): def add(x, y): return x + y self.run_arith_const(add) self.run_arith(add) def test_sub(self): def sub(x, y): return x - y self.run_arith_const(sub) self.run_arith(sub) def test_mul(self): def mul(x, y): return x * y self.run_arith_const(mul) self.run_arith(mul) def test_div(self): def div(x, y): return x / y # (const / image) needs (image ** -1), which won't work for complex self.run_arith_const(div, fmt=noncomplex_formats) self.run_arith(div) def test_floordiv(self): def my_floordiv(x, y): return x // y # (const // image) needs (image ** -1), which won't work for complex self.run_arith_const(my_floordiv, fmt=noncomplex_formats) self.run_arith(my_floordiv, fmt=noncomplex_formats) def test_pow(self): def my_pow(x, y): return x ** y # (image ** x) won't work for complex images ... just test non-complex self.run_arith_const(my_pow, fmt=noncomplex_formats) self.run_arith(my_pow, fmt=noncomplex_formats) def test_and(self): def my_and(x, y): # python doesn't allow bools on float if isinstance(x, float): x = int(x) if isinstance(y, float): y = int(y) return x & y self.run_arith_const(my_and, fmt=noncomplex_formats) self.run_arith(my_and, fmt=noncomplex_formats) def test_or(self): def my_or(x, y): # python doesn't allow bools on float if isinstance(x, float): x = int(x) if isinstance(y, float): y = int(y) return x | y self.run_arith_const(my_or, fmt=noncomplex_formats) self.run_arith(my_or, fmt=noncomplex_formats) def test_xor(self): def my_xor(x, y): # python doesn't allow bools on float if isinstance(x, float): x = int(x) if isinstance(y, float): y = int(y) return x ^ y self.run_arith_const(my_xor, fmt=noncomplex_formats) self.run_arith(my_xor, fmt=noncomplex_formats) def test_more(self): def more(x, y): if isinstance(x, pyvips.Image) or isinstance(y, pyvips.Image): return x > y else: if x > y: return 255 else: return 0 self.run_arith_const(more) self.run_arith(more) def test_moreeq(self): def moreeq(x, y): if isinstance(x, pyvips.Image) or isinstance(y, pyvips.Image): return x >= y else: if x >= y: return 255 else: return 0 self.run_arith_const(moreeq) self.run_arith(moreeq) def test_less(self): def less(x, y): if isinstance(x, pyvips.Image) or isinstance(y, pyvips.Image): return x < y else: if x < y: return 255 else: return 0 self.run_arith_const(less) self.run_arith(less) def test_lesseq(self): def lesseq(x, y): if isinstance(x, pyvips.Image) or isinstance(y, pyvips.Image): return x <= y else: if x <= y: return 255 else: return 0 self.run_arith_const(lesseq) self.run_arith(lesseq) def test_equal(self): def equal(x, y): if isinstance(x, pyvips.Image) or isinstance(y, pyvips.Image): return x == y else: if x == y: return 255 else: return 0 self.run_arith_const(equal) self.run_arith(equal) def test_noteq(self): def noteq(x, y): if isinstance(x, pyvips.Image) or isinstance(y, pyvips.Image): return x != y else: if x != y: return 255 else: return 0 self.run_arith_const(noteq) self.run_arith(noteq) # comparisons against out of range values should always fail, and # comparisons to fractional values should always fail x = pyvips.Image.grey(256, 256, uchar=True) assert (x == 1000).max() == 0 assert (x == 12).max() == 255 assert (x == 12.5).max() == 0 def test_abs(self): def my_abs(x): return abs(x) im = -self.colour self.run_unary([im], my_abs) def test_lshift(self): def my_lshift(x): # python doesn't allow float << int if isinstance(x, float): x = int(x) return x << 2 # we don't support constant << image, treat as a unary self.run_unary(self.all_images, my_lshift, fmt=noncomplex_formats) def test_rshift(self): def my_rshift(x): # python doesn't allow float >> int if isinstance(x, float): x = int(x) return x >> 2 # we don't support constant >> image, treat as a unary self.run_unary(self.all_images, my_rshift, fmt=noncomplex_formats) def test_mod(self): def my_mod(x): return x % 2 # we don't support constant % image, treat as a unary self.run_unary(self.all_images, my_mod, fmt=noncomplex_formats) def test_pos(self): def my_pos(x): return +x self.run_unary(self.all_images, my_pos) def test_neg(self): def my_neg(x): return -x self.run_unary(self.all_images, my_neg) def test_invert(self): def my_invert(x): if isinstance(x, float): x = int(x) return ~x & 0xff # ~image is trimmed to image max so it's hard to test for all formats # just test uchar self.run_unary(self.all_images, my_invert, fmt=[pyvips.BandFormat.UCHAR]) # test the rest of VipsArithmetic def test_avg(self): im = pyvips.Image.black(50, 100) test = im.insert(im + 100, 50, 0, expand=True) for fmt in all_formats: assert pytest.approx(test.cast(fmt).avg()) == 50 def test_deviate(self): im = pyvips.Image.black(50, 100) test = im.insert(im + 100, 50, 0, expand=True) for fmt in noncomplex_formats: assert pytest.approx(test.cast(fmt).deviate(), abs=0.01) == 50 def test_polar(self): im = pyvips.Image.black(100, 100) + 100 im = im.complexform(im) im = im.polar() assert pytest.approx(im.real().avg()) == 100 * 2 ** 0.5 assert pytest.approx(im.imag().avg()) == 45 def test_rect(self): im = pyvips.Image.black(100, 100) im = (im + 100 * 2 ** 0.5).complexform(im + 45) im = im.rect() assert pytest.approx(im.real().avg()) == 100 assert pytest.approx(im.imag().avg()) == 100 def test_conjugate(self): im = pyvips.Image.black(100, 100) + 100 im = im.complexform(im) im = im.conj() assert pytest.approx(im.real().avg()) == 100 assert pytest.approx(im.imag().avg()) == -100 def test_histfind(self): im = pyvips.Image.black(50, 100) test = im.insert(im + 10, 50, 0, expand=True) for fmt in all_formats: hist = test.cast(fmt).hist_find() assert_almost_equal_objects(hist(0, 0), [5000]) assert_almost_equal_objects(hist(10, 0), [5000]) assert_almost_equal_objects(hist(5, 0), [0]) test = test * [1, 2, 3] for fmt in all_formats: hist = test.cast(fmt).hist_find(band=0) assert_almost_equal_objects(hist(0, 0), [5000]) assert_almost_equal_objects(hist(10, 0), [5000]) assert_almost_equal_objects(hist(5, 0), [0]) hist = test.cast(fmt).hist_find(band=1) assert_almost_equal_objects(hist(0, 0), [5000]) assert_almost_equal_objects(hist(20, 0), [5000]) assert_almost_equal_objects(hist(5, 0), [0]) def test_histfind_indexed(self): im = pyvips.Image.black(50, 100) test = im.insert(im + 10, 50, 0, expand=True) index = test // 10 for x in noncomplex_formats: for y in [pyvips.BandFormat.UCHAR, pyvips.BandFormat.USHORT]: a = test.cast(x) b = index.cast(y) hist = a.hist_find_indexed(b) assert_almost_equal_objects(hist(0, 0), [0]) assert_almost_equal_objects(hist(1, 0), [50000]) def test_histfind_ndim(self): im = pyvips.Image.black(100, 100) + [1, 2, 3] for fmt in noncomplex_formats: hist = im.cast(fmt).hist_find_ndim() assert_almost_equal_objects(hist(0, 0)[0], 10000) assert_almost_equal_objects(hist(5, 5)[5], 0) hist = im.cast(fmt).hist_find_ndim(bins=1) assert_almost_equal_objects(hist(0, 0)[0], 10000) assert hist.width == 1 assert hist.height == 1 assert hist.bands == 1 def test_hough_circle(self): test = pyvips.Image.black(100, 100).draw_circle(100, 50, 50, 40) for fmt in all_formats: im = test.cast(fmt) hough = im.hough_circle(min_radius=35, max_radius=45) v, x, y = hough.maxpos() vec = hough(x, y) r = vec.index(v) + 35 assert pytest.approx(x) == 50 assert pytest.approx(y) == 50 assert pytest.approx(r) == 40 def test_hough_line(self): # hough_line changed the way it codes parameter space in 8.7 ... don't # test earlier versions test = pyvips.Image.black(100, 100).draw_line(100, 10, 90, 90, 10) for fmt in all_formats: im = test.cast(fmt) hough = im.hough_line() v, x, y = hough.maxpos() angle = 180.0 * x // hough.width distance = test.height * y // hough.height assert pytest.approx(angle) == 45 assert pytest.approx(distance) == 70 def test_sin(self): def my_sin(x): if isinstance(x, pyvips.Image): return x.sin() else: return math.sin(math.radians(x)) self.run_unary(self.all_images, my_sin, fmt=noncomplex_formats) def test_cos(self): def my_cos(x): if isinstance(x, pyvips.Image): return x.cos() else: return math.cos(math.radians(x)) self.run_unary(self.all_images, my_cos, fmt=noncomplex_formats) def test_tan(self): def my_tan(x): if isinstance(x, pyvips.Image): return x.tan() else: return math.tan(math.radians(x)) self.run_unary(self.all_images, my_tan, fmt=noncomplex_formats) def test_asin(self): def my_asin(x): if isinstance(x, pyvips.Image): return x.asin() else: return math.degrees(math.asin(x)) im = (pyvips.Image.black(100, 100) + [1, 2, 3]) / 3.0 self.run_unary([im], my_asin, fmt=noncomplex_formats) def test_acos(self): def my_acos(x): if isinstance(x, pyvips.Image): return x.acos() else: return math.degrees(math.acos(x)) im = (pyvips.Image.black(100, 100) + [1, 2, 3]) / 3.0 self.run_unary([im], my_acos, fmt=noncomplex_formats) def test_atan(self): def my_atan(x): if isinstance(x, pyvips.Image): return x.atan() else: return math.degrees(math.atan(x)) im = (pyvips.Image.black(100, 100) + [1, 2, 3]) / 3.0 self.run_unary([im], my_atan, fmt=noncomplex_formats) # this requires pyvips 2.1.16 for sinh @pytest.mark.skipif(versiontuple(pyvips.__version__) < versiontuple('2.1.16'), reason='your pyvips is too old') def test_sinh(self): def my_sinh(x): if isinstance(x, pyvips.Image): return x.sinh() else: return math.sinh(x) self.run_unary(self.all_images, my_sinh, fmt=noncomplex_formats) # this requires pyvips 2.1.16 for cosh @pytest.mark.skipif(versiontuple(pyvips.__version__) < versiontuple('2.1.16'), reason='your pyvips is too old') def test_cosh(self): def my_cosh(x): if isinstance(x, pyvips.Image): return x.cosh() else: return math.cosh(x) self.run_unary(self.all_images, my_cosh, fmt=noncomplex_formats) # this requires pyvips 2.1.16 for tanh @pytest.mark.skipif(versiontuple(pyvips.__version__) < versiontuple('2.1.16'), reason='your pyvips is too old') def test_tanh(self): def my_tanh(x): if isinstance(x, pyvips.Image): return x.tanh() else: return math.tanh(x) self.run_unary(self.all_images, my_tanh, fmt=noncomplex_formats) # this requires pyvips 2.1.16 for asinh @pytest.mark.skipif(versiontuple(pyvips.__version__) < versiontuple('2.1.16'), reason='your pyvips is too old') def test_asinh(self): def my_asinh(x): if isinstance(x, pyvips.Image): return x.asinh() else: return math.asinh(x) im = (pyvips.Image.black(100, 100) + [4, 5, 6]) / 3.0 self.run_unary([im], my_asinh, fmt=noncomplex_formats) # this requires pyvips 2.1.16 for acosh @pytest.mark.skipif(versiontuple(pyvips.__version__) < versiontuple('2.1.16'), reason='your pyvips is too old') def test_acosh(self): def my_acosh(x): if isinstance(x, pyvips.Image): return x.acosh() else: return math.acosh(x) im = (pyvips.Image.black(100, 100) + [4, 5, 6]) / 3.0 self.run_unary([im], my_acosh, fmt=noncomplex_formats) # this requires pyvips 2.1.16 for atanh @pytest.mark.skipif(versiontuple(pyvips.__version__) < versiontuple('2.1.16'), reason='your pyvips is too old') def test_atanh(self): def my_atanh(x): if isinstance(x, pyvips.Image): return x.atanh() else: return math.atanh(x) im = (pyvips.Image.black(100, 100) + [0, 1, 2]) / 3.0 self.run_unary([im], my_atanh, fmt=noncomplex_formats) # this requires pyvips 2.1.16 for atan2 @pytest.mark.skipif(versiontuple(pyvips.__version__) < versiontuple('2.1.16'), reason='your pyvips is too old') def test_atan2(self): def my_atan2(x, y): if isinstance(x, pyvips.Image): return x.atan2(y) else: return math.degrees(math.atan2(x[0], y[0])) im = (pyvips.Image.black(100, 100) + [1, 2, 3]) / 3.0 self.run_binary(im, my_atan2, fmt=noncomplex_formats) def test_log(self): def my_log(x): if isinstance(x, pyvips.Image): return x.log() else: return math.log(x) self.run_unary(self.all_images, my_log, fmt=noncomplex_formats) def test_log10(self): def my_log10(x): if isinstance(x, pyvips.Image): return x.log10() else: return math.log10(x) self.run_unary(self.all_images, my_log10, fmt=noncomplex_formats) def test_exp(self): def my_exp(x): if isinstance(x, pyvips.Image): return x.exp() else: return math.exp(x) self.run_unary(self.all_images, my_exp, fmt=noncomplex_formats) def test_exp10(self): def my_exp10(x): if isinstance(x, pyvips.Image): return x.exp10() else: return math.pow(10, x) self.run_unary(self.all_images, my_exp10, fmt=noncomplex_formats) def test_floor(self): def my_floor(x): if isinstance(x, pyvips.Image): return x.floor() else: return math.floor(x) self.run_unary(self.all_images, my_floor) def test_ceil(self): def my_ceil(x): if isinstance(x, pyvips.Image): return x.ceil() else: return math.ceil(x) self.run_unary(self.all_images, my_ceil) def test_rint(self): def my_rint(x): if isinstance(x, pyvips.Image): return x.rint() else: return round(x) self.run_unary(self.all_images, my_rint) def test_sign(self): def my_sign(x): if isinstance(x, pyvips.Image): return x.sign() else: if x > 0: return 1 elif x < 0: return -1 else: return 0 self.run_unary(self.all_images, my_sign) def test_max(self): test = pyvips.Image.black(100, 100).draw_rect(100, 40, 50, 1, 1) for fmt in all_formats: v = test.cast(fmt).max() assert pytest.approx(v) == 100 v, x, y = test.cast(fmt).maxpos() assert pytest.approx(v) == 100 assert pytest.approx(x) == 40 assert pytest.approx(y) == 50 def test_min(self): test = (pyvips.Image.black(100, 100) + 100).draw_rect(0, 40, 50, 1, 1) for fmt in all_formats: v = test.cast(fmt).min() assert pytest.approx(v) == 0 v, x, y = test.cast(fmt).minpos() assert pytest.approx(v) == 0 assert pytest.approx(x) == 40 assert pytest.approx(y) == 50 def test_measure(self): im = pyvips.Image.black(50, 50) test = im.insert(im + 10, 50, 0, expand=True) for x in noncomplex_formats: a = test.cast(x) matrix = a.measure(2, 1) [p1] = matrix(0, 0) [p2] = matrix(0, 1) assert pytest.approx(p1) == 0 assert pytest.approx(p2) == 10 def test_find_trim(self): if pyvips.type_find("VipsOperation", "find_trim") != 0: im = pyvips.Image.black(50, 60) + 100 test = im.embed(10, 20, 200, 300, extend="white") for x in unsigned_formats + float_formats: a = test.cast(x) left, top, width, height = a.find_trim() assert left == 10 assert top == 20 assert width == 50 assert height == 60 test_rgb = test.bandjoin([test, test]) left, top, width, height = test_rgb.find_trim(line_art=True, background=[255, 255, 255]) assert left == 10 assert top == 20 assert width == 50 assert height == 60 def test_profile(self): test = pyvips.Image.black(100, 100).draw_rect(100, 40, 50, 1, 1) for fmt in noncomplex_formats: columns, rows = test.cast(fmt).profile() v, x, y = columns.minpos() assert pytest.approx(v) == 50 assert pytest.approx(x) == 40 assert pytest.approx(y) == 0 v, x, y = rows.minpos() assert pytest.approx(v) == 40 assert pytest.approx(x) == 0 assert pytest.approx(y) == 50 def test_project(self): im = pyvips.Image.black(50, 50) test = im.insert(im + 10, 50, 0, expand=True) for fmt in noncomplex_formats: columns, rows = test.cast(fmt).project() assert_almost_equal_objects(columns(10, 0), [0]) assert_almost_equal_objects(columns(70, 0), [50 * 10]) assert_almost_equal_objects(rows(0, 10), [50 * 10]) def test_stats(self): im = pyvips.Image.black(50, 50) test = im.insert(im + 10, 50, 0, expand=True) for x in noncomplex_formats: a = test.cast(x) matrix = a.stats() assert_almost_equal_objects(matrix(0, 0), [a.min()]) assert_almost_equal_objects(matrix(1, 0), [a.max()]) assert_almost_equal_objects(matrix(2, 0), [50 * 50 * 10]) assert_almost_equal_objects(matrix(3, 0), [50 * 50 * 100]) assert_almost_equal_objects(matrix(4, 0), [a.avg()]) assert_almost_equal_objects(matrix(5, 0), [a.deviate()]) assert_almost_equal_objects(matrix(0, 1), [a.min()]) assert_almost_equal_objects(matrix(1, 1), [a.max()]) assert_almost_equal_objects(matrix(2, 1), [50 * 50 * 10]) assert_almost_equal_objects(matrix(3, 1), [50 * 50 * 100]) assert_almost_equal_objects(matrix(4, 1), [a.avg()]) assert_almost_equal_objects(matrix(5, 1), [a.deviate()]) def test_sum(self): for fmt in all_formats: im = pyvips.Image.black(50, 50) im2 = [(im + x).cast(fmt) for x in range(0, 100, 10)] im3 = pyvips.Image.sum(im2) assert pytest.approx(im3.max()) == sum(range(0, 100, 10)) if __name__ == '__main__': pytest.main() libvips-8.15.1/test/test-suite/test_colour.py000066400000000000000000000155031454007373500212730ustar00rootroot00000000000000# vim: set fileencoding=utf-8 : import pytest import pyvips from helpers import JPEG_FILE, SRGB_FILE, colour_colourspaces, \ mono_colourspaces, assert_almost_equal_objects, skip_if_no class TestColour: def test_colourspace(self): # mid-grey in Lab ... put 42 in the extra band, it should be copied # unmodified test = pyvips.Image.black(100, 100) + [50, 0, 0, 42] test = test.copy(interpretation=pyvips.Interpretation.LAB) # a long series should come in a circle im = test for col in colour_colourspaces + [pyvips.Interpretation.LAB]: im = im.colourspace(col) assert im.interpretation == col for i in range(0, 4): min_l = im.extract_band(i).min() max_h = im.extract_band(i).max() assert pytest.approx(min_l) == max_h pixel = im(10, 10) if col == pyvips.Interpretation.SCRGB: assert pytest.approx(pixel[3], 0.0001) == 42.0 / 255.0 else: assert pytest.approx(pixel[3], 0.01) == 42 # alpha won't be equal for RGB16, but it should be preserved if we go # there and back im = im.colourspace(pyvips.Interpretation.RGB16) im = im.colourspace(pyvips.Interpretation.LAB) before = test(10, 10) after = im(10, 10) assert_almost_equal_objects(before, after, threshold=0.1) # go between every pair of colour spaces for start in colour_colourspaces: for end in colour_colourspaces: im = test.colourspace(start) im2 = im.colourspace(end) im3 = im2.colourspace(pyvips.Interpretation.LAB) before = test(10, 10) after = im3(10, 10) assert_almost_equal_objects(before, after, threshold=0.1) # test Lab->XYZ on mid-grey # checked against http://www.brucelindbloom.com im = test.colourspace(pyvips.Interpretation.XYZ) after = im(10, 10) assert_almost_equal_objects(after, [17.5064, 18.4187, 20.0547, 42]) # grey->colour->grey should be equal for mono_fmt in mono_colourspaces: test_grey = test.colourspace(mono_fmt) im = test_grey for col in colour_colourspaces + [mono_fmt]: im = im.colourspace(col) assert im.interpretation == col [before, alpha_before] = test_grey(10, 10) [after, alpha_after] = im(10, 10) assert abs(alpha_after - alpha_before) < 1 if mono_fmt == pyvips.Interpretation.GREY16: # GREY16 can wind up rather different due to rounding assert abs(after - before) < 30 else: # but 8-bit we should hit exactly assert abs(after - before) < 1 # we should be able to go from cmyk to any 3-band space and back again, # approximately cmyk = test.colourspace(pyvips.Interpretation.CMYK) for end in colour_colourspaces: im = cmyk.colourspace(end) im2 = im.colourspace(pyvips.Interpretation.CMYK) before = cmyk(10, 10) after = im2(10, 10) assert_almost_equal_objects(before, after, threshold=10) # test results from Bruce Lindbloom's calculator: # http://www.brucelindbloom.com def test_dE00(self): # put 42 in the extra band, it should be copied unmodified reference = pyvips.Image.black(100, 100) + [50, 10, 20, 42] reference = reference.copy(interpretation=pyvips.Interpretation.LAB) sample = pyvips.Image.black(100, 100) + [40, -20, 10] sample = sample.copy(interpretation=pyvips.Interpretation.LAB) difference = reference.dE00(sample) result, alpha = difference(10, 10) assert pytest.approx(result, 0.001) == 30.238 assert pytest.approx(alpha, 0.001) == 42.0 def test_dE76(self): # put 42 in the extra band, it should be copied unmodified reference = pyvips.Image.black(100, 100) + [50, 10, 20, 42] reference = reference.copy(interpretation=pyvips.Interpretation.LAB) sample = pyvips.Image.black(100, 100) + [40, -20, 10] sample = sample.copy(interpretation=pyvips.Interpretation.LAB) difference = reference.dE76(sample) result, alpha = difference(10, 10) assert pytest.approx(result, 0.001) == 33.166 assert pytest.approx(alpha, 0.001) == 42.0 # the vips CMC calculation is based on distance in a colorspace # derived from the CMC formula, so it won't match exactly ... # see vips_LCh2CMC() for details def test_dECMC(self): reference = pyvips.Image.black(100, 100) + [50, 10, 20, 42] reference = reference.copy(interpretation=pyvips.Interpretation.LAB) sample = pyvips.Image.black(100, 100) + [55, 11, 23] sample = sample.copy(interpretation=pyvips.Interpretation.LAB) difference = reference.dECMC(sample) result, alpha = difference(10, 10) assert abs(result - 4.97) < 0.5 assert pytest.approx(alpha, 0.001) == 42.0 @skip_if_no("icc_import") def test_icc(self): test = pyvips.Image.new_from_file(JPEG_FILE) im = test.icc_import().icc_export() assert im.dE76(test).max() < 6 im = test.icc_import() im2 = im.icc_export(depth=16) assert im2.format == pyvips.BandFormat.USHORT im3 = im2.icc_import() assert (im - im3).abs().max() < 3 im = test.icc_import(intent=pyvips.Intent.ABSOLUTE) im2 = im.icc_export(intent=pyvips.Intent.ABSOLUTE) assert im2.dE76(test).max() < 6 im = test.icc_import() im2 = im.icc_export(output_profile=SRGB_FILE) im3 = im.colourspace(pyvips.Interpretation.SRGB) assert im2.dE76(im3).max() < 6 before_profile = test.get("icc-profile-data") im = test.icc_transform(SRGB_FILE) after_profile = im.get("icc-profile-data") im2 = test.icc_import() im3 = im2.colourspace(pyvips.Interpretation.SRGB) assert im.dE76(im3).max() < 6 assert len(before_profile) != len(after_profile) im = test.icc_import(input_profile=SRGB_FILE) im2 = test.icc_import() assert 6 < im.dE76(im2).max() im = test.icc_import(pcs=pyvips.PCS.XYZ) assert im.interpretation == pyvips.Interpretation.XYZ im = test.icc_import() assert im.interpretation == pyvips.Interpretation.LAB # even without lcms, we should have a working approximation def test_cmyk(self): test = pyvips.Image.new_from_file(JPEG_FILE) im = test.colourspace("cmyk").colourspace("srgb") before = test(150, 210) after = im(150, 210) assert_almost_equal_objects(before, after, threshold=10) if __name__ == '__main__': pytest.main() libvips-8.15.1/test/test-suite/test_connection.py000066400000000000000000000106451454007373500221310ustar00rootroot00000000000000# vim: set fileencoding=utf-8 : import sys import os import shutil import tempfile import pytest import pyvips from helpers import \ JPEG_FILE, PNG_FILE, TIF_FILE, \ temp_filename, assert_almost_equal_objects, have, skip_if_no class TestConnection: tempdir = None @classmethod def setup_class(cls): cls.tempdir = tempfile.mkdtemp() cls.colour = pyvips.Image.jpegload(JPEG_FILE) cls.mono = cls.colour.extract_band(1).copy() # we remove the ICC profile: the RGB one will no longer be appropriate cls.mono.remove("icc-profile-data") cls.rad = cls.colour.float2rad().copy() cls.rad.remove("icc-profile-data") cls.cmyk = cls.colour.bandjoin(cls.mono) cls.cmyk = cls.cmyk.copy(interpretation=pyvips.Interpretation.CMYK) cls.cmyk.remove("icc-profile-data") @classmethod def teardown_class(cls): shutil.rmtree(cls.tempdir, ignore_errors=True) cls.colour = None cls.mono = None cls.rad = None cls.cmyk = None def test_source_new_from_file(self): x = pyvips.Source.new_from_file(JPEG_FILE) assert x.filename() == JPEG_FILE @skip_if_no("jpegload_source") def test_image_new_from_source_file(self): x = pyvips.Source.new_from_file(JPEG_FILE) y = pyvips.Image.new_from_source(x, "") assert y.width == 290 assert y.height == 442 def test_target_new_to_file(self): filename = temp_filename(self.tempdir, ".jpg") x = pyvips.Target.new_to_file(filename) assert x.filename() == filename @skip_if_no("jpegload_source") def test_image_write_to_target_file(self): filename = temp_filename(self.tempdir, ".jpg") x = pyvips.Target.new_to_file(filename) self.colour.write_to_target(x, ".jpg") with open(filename, 'rb') as f: data = f.read() data2 = self.colour.write_to_buffer(".jpg") assert data == data2 def test_source_new_memory(self): data = self.colour.write_to_buffer(".jpg") x = pyvips.Source.new_from_memory(data) assert x.filename() == None @skip_if_no("jpegload_source") def test_image_new_from_source_memory(self): data = self.colour.write_to_buffer(".jpg") x = pyvips.Source.new_from_memory(data) y = pyvips.Image.new_from_source(x, "") assert y.width == 290 assert y.height == 442 def test_target_new_memory(self): x = pyvips.Target.new_to_memory() assert x.filename() == None @skip_if_no("jpegload_source") def test_image_write_to_target_memory(self): x = pyvips.Target.new_to_memory() self.colour.write_to_target(x, ".jpg") y = self.colour.write_to_buffer(".jpg") assert x.get("blob") == y @skip_if_no("matrixload_source") @skip_if_no("matrixsave_target") def test_connection_matrix(self): x = pyvips.Target.new_to_memory() self.mono.matrixsave_target(x) y = pyvips.Source.new_from_memory(x.get("blob")) im = pyvips.Image.matrixload_source(y) assert (im - self.mono).abs().max() == 0 @skip_if_no("csvload_source") @skip_if_no("csvsave_target") def test_connection_csv(self): x = pyvips.Target.new_to_memory() self.mono.csvsave_target(x) y = pyvips.Source.new_from_memory(x.get("blob")) im = pyvips.Image.csvload_source(y) assert (im - self.mono).abs().max() == 0 @skip_if_no("ppmload_source") @skip_if_no("ppmsave_target") def test_connection_ppm(self): x = pyvips.Target.new_to_memory() self.mono.ppmsave_target(x) y = pyvips.Source.new_from_memory(x.get("blob")) im = pyvips.Image.ppmload_source(y) assert (im - self.mono).abs().max() == 0 @skip_if_no("tiffload_source") @skip_if_no("tiffsave_target") def test_connection_tiff(self): x = pyvips.Target.new_to_memory() self.mono.tiffsave_target(x) y = pyvips.Source.new_from_memory(x.get("blob")) im = pyvips.Image.tiffload_source(y) assert (im - self.mono).abs().max() == 0 @skip_if_no("dzsave_target") def test_connection_dz(self): x = pyvips.Target.new_to_memory() self.mono.dzsave_target(x) data = x.get("blob") # it'll be a zip, we could extract stuff and look for tiles assert len(data) > 1000 if __name__ == '__main__': pytest.main() libvips-8.15.1/test/test-suite/test_conversion.py000066400000000000000000000745371454007373500221710ustar00rootroot00000000000000# vim: set fileencoding=utf-8 : import filecmp from functools import reduce import os import pytest import tempfile import shutil import pyvips from helpers import IMAGES, JPEG_FILE, RGBA_FILE, unsigned_formats, \ signed_formats, float_formats, int_formats, \ noncomplex_formats, all_formats, max_value, \ sizeof_format, rot45_angles, rot45_angle_bonds, \ rot_angles, rot_angle_bonds, run_cmp, run_cmp2, \ assert_almost_equal_objects, temp_filename class TestConversion: tempdir = None # run a function on an image, # 50,50 and 10,10 should have different values on the test image # don't loop over band elements def run_image_pixels(self, message, im, fn): run_cmp(message, im, 50, 50, fn) run_cmp(message, im, 10, 10, fn) # run a function on a pair of images # 50,50 and 10,10 should have different values on the test image # don't loop over band elements def run_image_pixels2(self, message, left, right, fn): run_cmp2(message, left, right, 50, 50, fn) run_cmp2(message, left, right, 10, 10, fn) def run_unary(self, images, fn, fmt=all_formats): [self.run_image_pixels(fn.__name__ + (' %s' % y), x.cast(y), fn) for x in images for y in fmt] def run_binary(self, images, fn, fmt=all_formats): [self.run_image_pixels2(fn.__name__ + (' %s %s' % (y, z)), x.cast(y), x.cast(z), fn) for x in images for y in fmt for z in fmt] @classmethod def setup_class(cls): cls.tempdir = tempfile.mkdtemp() im = pyvips.Image.mask_ideal(100, 100, 0.5, reject=True, optical=True) cls.colour = (im * [1, 2, 3] + [2, 3, 4]).copy(interpretation="srgb") cls.mono = cls.colour[1].copy(interpretation="b-w") cls.all_images = [cls.mono, cls.colour] cls.image = pyvips.Image.jpegload(JPEG_FILE) @classmethod def teardown_class(cls): shutil.rmtree(cls.tempdir, ignore_errors=True) cls.colour = None cls.mono = None cls.image = None cls.all_images = None def test_cast(self): # casting negative pixels to an unsigned format should clip to zero for signed in signed_formats: im = (pyvips.Image.black(1, 1) - 10).cast(signed) for unsigned in unsigned_formats: im2 = im.cast(unsigned) assert im2.avg() == 0 # casting very positive pixels to a signed format should clip to max im = (pyvips.Image.black(1, 1) + max_value["uint"]).cast("uint") assert im.avg() == max_value["uint"] im2 = im.cast("int") assert im2.avg() == max_value["int"] im = (pyvips.Image.black(1, 1) + max_value["ushort"]).cast("ushort") im2 = im.cast("short") assert im2.avg() == max_value["short"] im = (pyvips.Image.black(1, 1) + max_value["uchar"]).cast("uchar") im2 = im.cast("char") assert im2.avg() == max_value["char"] def test_band_and(self): def band_and(x): if isinstance(x, pyvips.Image): return x.bandand() else: return [reduce(lambda a, b: int(a) & int(b), x)] self.run_unary(self.all_images, band_and, fmt=int_formats) def test_band_or(self): def band_or(x): if isinstance(x, pyvips.Image): return x.bandor() else: return [reduce(lambda a, b: int(a) | int(b), x)] self.run_unary(self.all_images, band_or, fmt=int_formats) def test_band_eor(self): def band_eor(x): if isinstance(x, pyvips.Image): return x.bandeor() else: return [reduce(lambda a, b: int(a) ^ int(b), x)] self.run_unary(self.all_images, band_eor, fmt=int_formats) def test_bandjoin(self): def bandjoin(x, y): if isinstance(x, pyvips.Image) and isinstance(y, pyvips.Image): return x.bandjoin(y) else: return x + y self.run_binary(self.all_images, bandjoin) def test_bandjoin_const(self): x = self.colour.bandjoin(1) assert x.bands == 4 assert x[3].avg() == 1 x = self.colour.bandjoin([1, 2]) assert x.bands == 5 assert x[3].avg() == 1 assert x[4].avg() == 2 def test_bandmean(self): def bandmean(x): if isinstance(x, pyvips.Image): return x.bandmean() else: return [sum(x) // len(x)] self.run_unary(self.all_images, bandmean, fmt=noncomplex_formats) def test_bandrank(self): def median(x, y): joined = [[a, b] for a, b in zip(x, y)] # .sort() isn't a function, so we have to run this as a separate # pass [z.sort() for z in joined] return [z[len(z) // 2] for z in joined] def bandrank(x, y): if isinstance(x, pyvips.Image) and isinstance(y, pyvips.Image): return x.bandrank([y]) else: return median(x, y) self.run_binary(self.all_images, bandrank, fmt=noncomplex_formats) # we can mix images and constants, and set the index arg a = self.mono.bandrank([2], index=0) b = (self.mono < 2).ifthenelse(self.mono, 2) assert (a - b).abs().min() == 0 def test_cache(self): def cache(x): if isinstance(x, pyvips.Image): return x.cache() else: return x self.run_unary(self.all_images, cache) def test_copy(self): x = self.colour.copy(interpretation=pyvips.Interpretation.LAB) assert x.interpretation == pyvips.Interpretation.LAB x = self.colour.copy(xres=42) assert x.xres == 42 x = self.colour.copy(yres=42) assert x.yres == 42 x = self.colour.copy(xoffset=42) assert x.xoffset == 42 x = self.colour.copy(yoffset=42) assert x.yoffset == 42 x = self.colour.copy(coding=pyvips.Coding.NONE) assert x.coding == pyvips.Coding.NONE def test_bandfold(self): x = self.mono.bandfold() assert x.width == 1 assert x.bands == self.mono.width y = x.bandunfold() assert y.width == self.mono.width assert y.bands == 1 assert x.avg() == y.avg() x = self.mono.bandfold(factor=2) assert x.width == self.mono.width / 2 assert x.bands == 2 y = x.bandunfold(factor=2) assert y.width == self.mono.width assert y.bands == 1 assert x.avg() == y.avg() def test_byteswap(self): x = self.mono.cast("ushort") y = x.byteswap().byteswap() assert x.width == y.width assert x.height == y.height assert x.bands == y.bands assert x.avg() == y.avg() def test_embed(self): for fmt in all_formats: test = self.colour.cast(fmt) im = test.embed(20, 20, self.colour.width + 40, self.colour.height + 40) pixel = im(10, 10) assert_almost_equal_objects(pixel, [0, 0, 0]) pixel = im(30, 30) assert_almost_equal_objects(pixel, [2, 3, 4]) pixel = im(im.width - 10, im.height - 10) assert_almost_equal_objects(pixel, [0, 0, 0]) im = test.embed(20, 20, self.colour.width + 40, self.colour.height + 40, extend=pyvips.Extend.COPY) pixel = im(10, 10) assert_almost_equal_objects(pixel, [2, 3, 4]) pixel = im(im.width - 10, im.height - 10) assert_almost_equal_objects(pixel, [2, 3, 4]) im = test.embed(20, 20, self.colour.width + 40, self.colour.height + 40, extend=pyvips.Extend.BACKGROUND, background=[7, 8, 9]) pixel = im(10, 10) assert_almost_equal_objects(pixel, [7, 8, 9]) pixel = im(im.width - 10, im.height - 10) assert_almost_equal_objects(pixel, [7, 8, 9]) im = test.embed(20, 20, self.colour.width + 40, self.colour.height + 40, extend=pyvips.Extend.WHITE) pixel = im(10, 10) # uses 255 in all bytes of ints, 255.0 for float pixel = [int(x) & 0xff for x in pixel] assert_almost_equal_objects(pixel, [255, 255, 255]) pixel = im(im.width - 10, im.height - 10) pixel = [int(x) & 0xff for x in pixel] assert_almost_equal_objects(pixel, [255, 255, 255]) @pytest.mark.skipif(pyvips.type_find("VipsOperation", "gravity") == 0, reason="no gravity in this vips, skipping test") def test_gravity(self): im = pyvips.Image.black(1, 1) + 255 positions = [ ['centre', 1, 1], ['north', 1, 0], ['south', 1, 2], ['east', 2, 1], ['west', 0, 1], ['north-east', 2, 0], ['south-east', 2, 2], ['south-west', 0, 2], ['north-west', 0, 0] ] for direction, x, y in positions: im2 = im.gravity(direction, 3, 3) assert_almost_equal_objects(im2(x, y), [255]) assert_almost_equal_objects(im2.avg(), 255.0 / 9.0) def test_extract(self): for fmt in all_formats: test = self.colour.cast(fmt) pixel = test(30, 30) assert_almost_equal_objects(pixel, [2, 3, 4]) sub = test.extract_area(25, 25, 10, 10) pixel = sub(5, 5) assert_almost_equal_objects(pixel, [2, 3, 4]) sub = test.extract_band(1, n=2) pixel = sub(30, 30) assert_almost_equal_objects(pixel, [3, 4]) def test_slice(self): test = self.colour bands = [x.avg() for x in test] x = test[0].avg() assert x == bands[0] x = test[-1].avg() assert_almost_equal_objects(x, bands[2]) x = [i.avg() for i in test[1:3]] assert_almost_equal_objects(x, bands[1:3]) x = [i.avg() for i in test[1:-1]] assert_almost_equal_objects(x, bands[1:-1]) x = [i.avg() for i in test[:2]] assert_almost_equal_objects(x, bands[:2]) x = [i.avg() for i in test[1:]] assert_almost_equal_objects(x, bands[1:]) x = [i.avg() for i in test[-1]] assert_almost_equal_objects(x, bands[-1]) def test_crop(self): for fmt in all_formats: test = self.colour.cast(fmt) pixel = test(30, 30) assert_almost_equal_objects(pixel, [2, 3, 4]) sub = test.crop(25, 25, 10, 10) pixel = sub(5, 5) assert_almost_equal_objects(pixel, [2, 3, 4]) @pytest.mark.skipif(pyvips.type_find("VipsOperation", "smartcrop") == 0, reason="no smartcrop, skipping test") def test_smartcrop(self): test = self.image.smartcrop(100, 100) assert test.width == 100 assert test.height == 100 @pytest.mark.skipif(pyvips.type_find("VipsOperation", "smartcrop") == 0, reason="no smartcrop, skipping test") def test_smartcrop_attention(self): test, opts = self.image.smartcrop( 100, 100, interesting=pyvips.enums.Interesting.ATTENTION, attention_x=True, attention_y=True) assert test.width == 100 assert test.height == 100 assert opts["attention_x"] == 199 assert opts["attention_y"] == 234 def test_smartcrop_rgba(self): rgba = pyvips.Image.new_from_file(RGBA_FILE) test, opts = rgba.smartcrop( 80, 60, attention_x=True, attention_y=True) assert test.width == 80 assert test.height == 60 assert opts["attention_x"] == 20 assert opts["attention_y"] == 124 def test_smartcrop_rgba_premultiplied(self): rgba = pyvips.Image.new_from_file(RGBA_FILE) test, opts = rgba.premultiply().smartcrop( 80, 60, premultiplied=True, attention_x=True, attention_y=True) assert test.width == 80 assert test.height == 60 assert opts["attention_x"] == 20 assert opts["attention_y"] == 124 def test_falsecolour(self): for fmt in all_formats: test = self.colour.cast(fmt) im = test.falsecolour() assert im.width == test.width assert im.height == test.height assert im.bands == 3 pixel = im(30, 30) assert_almost_equal_objects(pixel, [20, 0, 41]) def test_flatten(self): for fmt in unsigned_formats + [pyvips.BandFormat.SHORT, pyvips.BandFormat.INT] + float_formats: mx = 255 alpha = mx / 2.0 nalpha = mx - alpha test = self.colour.bandjoin(alpha).cast(fmt) pixel = test(30, 30) predict = [int(x) * alpha / mx for x in pixel[:-1]] im = test.flatten() assert im.bands == 3 pixel = im(30, 30) for x, y in zip(pixel, predict): # we use float arithetic for int and uint, so the rounding # differs ... don't require huge accuracy assert abs(x - y) < 2 im = test.flatten(background=[100, 100, 100]) pixel = test(30, 30) predict = [int(x) * alpha / mx + (100 * nalpha) / mx for x in pixel[:-1]] assert im.bands == 3 pixel = im(30, 30) for x, y in zip(pixel, predict): assert abs(x - y) < 2 # if the image has max_alpha less than the numeric range of the # format, we can get out of range values ... check they are clipped # correctly rgba = pyvips.Image.new_from_file(RGBA_FILE) im = rgba * 256 im = im.cast("ushort") im = im.flatten() im2 = rgba * 256 im2 = im2.flatten() im2 = im2.cast("ushort") assert(abs(im - im2).max() == 0) def test_premultiply(self): for fmt in unsigned_formats + [pyvips.BandFormat.SHORT, pyvips.BandFormat.INT] + float_formats: mx = 255 alpha = mx / 2.0 test = self.colour.bandjoin(alpha).cast(fmt) pixel = test(30, 30) predict = [int(x) * alpha / mx for x in pixel[:-1]] + [alpha] im = test.premultiply() assert im.bands == test.bands pixel = im(30, 30) for x, y in zip(pixel, predict): # we use float arithetic for int and uint, so the rounding # differs ... don't require huge accuracy assert abs(x - y) < 2 @pytest.mark.skipif(pyvips.type_find("VipsConversion", "composite") == 0, reason="no composite support, skipping test") def test_composite(self): # 50% transparent image overlay = self.colour.bandjoin(128) base = self.colour + 100 comp = base.composite(overlay, "over") assert_almost_equal_objects(comp(0, 0), [51.8, 52.8, 53.8, 255], threshold=0.1) def test_unpremultiply(self): for fmt in unsigned_formats + [pyvips.BandFormat.SHORT, pyvips.BandFormat.INT] + float_formats: mx = 255 alpha = mx / 2.0 test = self.colour.bandjoin(alpha).cast(fmt) pixel = test(30, 30) predict = [int(x) / (alpha / mx) for x in pixel[:-1]] + [alpha] im = test.unpremultiply() assert im.bands == test.bands pixel = im(30, 30) for x, y in zip(pixel, predict): # we use float arithetic for int and uint, so the rounding # differs ... don't require huge accuracy assert abs(x - y) < 2 def test_flip(self): for fmt in all_formats: test = self.colour.cast(fmt) result = test.fliphor() result = result.flipver() result = result.fliphor() result = result.flipver() diff = (test - result).abs().max() assert diff == 0 def test_gamma(self): exponent = 2.4 for fmt in noncomplex_formats: mx = max_value[fmt] test = (self.colour + mx / 2.0).cast(fmt) norm = mx ** exponent / mx result = test.gamma() before = test(30, 30) after = result(30, 30) predict = [x ** exponent / norm for x in before] for a, b in zip(after, predict): # ie. less than 1% error, rounding on 7-bit images # means this is all we can expect assert abs(a - b) < mx / 100.0 exponent = 1.2 for fmt in noncomplex_formats: mx = max_value[fmt] test = (self.colour + mx / 2.0).cast(fmt) norm = mx ** exponent / mx result = test.gamma(exponent=1.0 / 1.2) before = test(30, 30) after = result(30, 30) predict = [x ** exponent / norm for x in before] for a, b in zip(after, predict): # ie. less than 1% error, rounding on 7-bit images # means this is all we can expect assert abs(a - b) < mx / 100.0 def test_grid(self): test = self.colour.replicate(1, 12) assert test.width == self.colour.width assert test.height == self.colour.height * 12 for fmt in all_formats: im = test.cast(fmt) result = im.grid(test.width, 3, 4) assert result.width == self.colour.width * 3 assert result.height == self.colour.height * 4 before = im(10, 10) after = result(10 + test.width * 2, 10 + test.width * 2) assert_almost_equal_objects(before, after) before = im(50, 50) after = result(50 + test.width * 2, 50 + test.width * 2) assert_almost_equal_objects(before, after) def test_ifthenelse(self): test = self.mono > 3 for x in all_formats: for y in all_formats: t = (self.colour + 10).cast(x) e = self.colour.cast(y) r = test.ifthenelse(t, e) assert r.width == self.colour.width assert r.height == self.colour.height assert r.bands == self.colour.bands predict = e(10, 10) result = r(10, 10) assert_almost_equal_objects(result, predict) predict = t(50, 50) result = r(50, 50) assert_almost_equal_objects(result, predict) test = self.colour > 3 for x in all_formats: for y in all_formats: t = (self.mono + 10).cast(x) e = self.mono.cast(y) r = test.ifthenelse(t, e) assert r.width == self.colour.width assert r.height == self.colour.height assert r.bands == self.colour.bands cp = test(10, 10) tp = t(10, 10) * 3 ep = e(10, 10) * 3 predict = [te if ce != 0 else ee for ce, te, ee in zip(cp, tp, ep)] result = r(10, 10) assert_almost_equal_objects(result, predict) cp = test(50, 50) tp = t(50, 50) * 3 ep = e(50, 50) * 3 predict = [te if ce != 0 else ee for ce, te, ee in zip(cp, tp, ep)] result = r(50, 50) assert_almost_equal_objects(result, predict) test = self.colour > 3 for x in all_formats: for y in all_formats: t = (self.mono + 10).cast(x) e = self.mono.cast(y) r = test.ifthenelse(t, e, blend=True) assert r.width == self.colour.width assert r.height == self.colour.height assert r.bands == self.colour.bands result = r(10, 10) assert_almost_equal_objects(result, [3, 3, 13]) test = self.mono > 3 r = test.ifthenelse([1, 2, 3], self.colour) assert r.width == self.colour.width assert r.height == self.colour.height assert r.bands == self.colour.bands assert r.format == self.colour.format assert r.interpretation == self.colour.interpretation result = r(10, 10) assert_almost_equal_objects(result, [2, 3, 4]) result = r(50, 50) assert_almost_equal_objects(result, [1, 2, 3]) test = self.mono r = test.ifthenelse([1, 2, 3], self.colour, blend=True) assert r.width == self.colour.width assert r.height == self.colour.height assert r.bands == self.colour.bands assert r.format == self.colour.format assert r.interpretation == self.colour.interpretation result = r(10, 10) assert_almost_equal_objects(result, [2, 3, 4], threshold=0.1) result = r(50, 50) assert_almost_equal_objects(result, [3.0, 4.9, 6.9], threshold=0.1) def test_switch(self): x = pyvips.Image.grey(256, 256, uchar=True) # slice into two at 128, we should get 50% of pixels in each half index = pyvips.Image.switch([x < 128, x >= 128]) assert index.avg() == 0.5 # slice into four index = pyvips.Image.switch([ x < 64, x >= 64 and x < 128, x >= 128 and x < 192, x >= 192 ]) assert index.avg() == 1.5 # no match should return n + 1 index = pyvips.Image.switch([x == 1000, x == 2000]) assert index.avg() == 2 def test_insert(self): for x in all_formats: for y in all_formats: main = self.mono.cast(x) sub = self.colour.cast(y) r = main.insert(sub, 10, 10) assert r.width == main.width assert r.height == main.height assert r.bands == sub.bands a = r(10, 10) b = sub(0, 0) assert_almost_equal_objects(a, b) a = r(0, 0) b = main(0, 0) * 3 assert_almost_equal_objects(a, b) for x in all_formats: for y in all_formats: main = self.mono.cast(x) sub = self.colour.cast(y) r = main.insert(sub, 10, 10, expand=True, background=100) assert r.width == main.width + 10 assert r.height == main.height + 10 assert r.bands == sub.bands a = r(r.width - 5, 5) assert_almost_equal_objects(a, [100, 100, 100]) def test_arrayjoin(self): max_width = 0 max_height = 0 max_bands = 0 for image in self.all_images: if image.width > max_width: max_width = image.width if image.height > max_height: max_height = image.height if image.bands > max_bands: max_bands = image.bands im = pyvips.Image.arrayjoin(self.all_images) assert im.width == max_width * len(self.all_images) assert im.height == max_height assert im.bands == max_bands im = pyvips.Image.arrayjoin(self.all_images, across=1) assert im.width == max_width assert im.height == max_height * len(self.all_images) assert im.bands == max_bands im = pyvips.Image.arrayjoin(self.all_images, shim=10) assert im.width == max_width * len(self.all_images) + 10 * (len(self.all_images) - 1) # noqa: E501 assert im.height == max_height assert im.bands == max_bands def test_msb(self): for fmt in unsigned_formats: mx = max_value[fmt] size = sizeof_format[fmt] test = (self.colour + mx / 8.0).cast(fmt) im = test.msb() before = test(10, 10) predict = [int(x) >> ((size - 1) * 8) for x in before] result = im(10, 10) assert_almost_equal_objects(result, predict) before = test(50, 50) predict = [int(x) >> ((size - 1) * 8) for x in before] result = im(50, 50) assert_almost_equal_objects(result, predict) for fmt in signed_formats: mx = max_value[fmt] size = sizeof_format[fmt] test = (self.colour + mx / 8.0).cast(fmt) im = test.msb() before = test(10, 10) predict = [128 + (int(x) >> ((size - 1) * 8)) for x in before] result = im(10, 10) assert_almost_equal_objects(result, predict) before = test(50, 50) predict = [128 + (int(x) >> ((size - 1) * 8)) for x in before] result = im(50, 50) assert_almost_equal_objects(result, predict) for fmt in unsigned_formats: mx = max_value[fmt] size = sizeof_format[fmt] test = (self.colour + mx / 8.0).cast(fmt) im = test.msb(band=1) before = [test(10, 10)[1]] predict = [int(x) >> ((size - 1) * 8) for x in before] result = im(10, 10) assert_almost_equal_objects(result, predict) before = [test(50, 50)[1]] predict = [int(x) >> ((size - 1) * 8) for x in before] result = im(50, 50) assert_almost_equal_objects(result, predict) def test_recomb(self): array = [[0.2, 0.5, 0.3]] def recomb(x): if isinstance(x, pyvips.Image): return x.recomb(array) else: sum = 0 for i, c in zip(array[0], x): sum += i * c return [sum] self.run_unary([self.colour], recomb, fmt=noncomplex_formats) def test_replicate(self): for fmt in all_formats: im = self.colour.cast(fmt) test = im.replicate(10, 10) assert test.width == self.colour.width * 10 assert test.height == self.colour.height * 10 before = im(10, 10) after = test(10 + im.width * 2, 10 + im.width * 2) assert_almost_equal_objects(before, after) before = im(50, 50) after = test(50 + im.width * 2, 50 + im.width * 2) assert_almost_equal_objects(before, after) def test_rot45(self): # test has a quarter-circle in the bottom right test = self.colour.crop(0, 0, 51, 51) for fmt in all_formats: im = test.cast(fmt) im2 = im.rot45() before = im(50, 50) after = im2(25, 50) assert_almost_equal_objects(before, after) for a, b in zip(rot45_angles, rot45_angle_bonds): im2 = im.rot45(angle=a) after = im2.rot45(angle=b) diff = (after - im).abs().max() assert diff == 0 def test_rot(self): # test has a quarter-circle in the bottom right test = self.colour.crop(0, 0, 51, 51) for fmt in all_formats: im = test.cast(fmt) im2 = im.rot(pyvips.Angle.D90) before = im(50, 50) after = im2(0, 50) assert_almost_equal_objects(before, after) for a, b in zip(rot_angles, rot_angle_bonds): im2 = im.rot(a) after = im2.rot(b) diff = (after - im).abs().max() assert diff == 0 def test_autorot(self): rotation_images = os.path.join(IMAGES, 'rotation') files = os.listdir(rotation_images) files.sort() meta = { 0: {'w': 290, 'h': 442}, 1: {'w': 308, 'h': 410}, 2: {'w': 308, 'h': 410}, 3: {'w': 308, 'h': 410}, 4: {'w': 308, 'h': 410}, 5: {'w': 231, 'h': 308}, 6: {'w': 231, 'h': 308}, 7: {'w': 231, 'h': 308}, 8: {'w': 231, 'h': 308}, } i = 0 for f in files: if '.autorot.' not in f and not f.startswith('.'): source_filename = os.path.join(rotation_images, f) actual_filename = temp_filename(self.tempdir, '.jpg') pyvips.Image.new_from_file(source_filename).autorot().write_to_file(actual_filename) actual = pyvips.Image.new_from_file(actual_filename) assert actual.width == meta[i]['w'] assert actual.height == meta[i]['h'] assert actual.get('orientation') if actual.get_typeof('orientation') else None is None i = i + 1 def test_scaleimage(self): for fmt in noncomplex_formats: test = self.colour.cast(fmt) im = test.scaleimage() assert im.max() == 255 assert im.min() == 0 im = test.scaleimage(log=True) assert im.max() == 255 def test_subsample(self): for fmt in all_formats: test = self.colour.cast(fmt) im = test.subsample(3, 3) assert im.width == test.width // 3 assert im.height == test.height // 3 before = test(60, 60) after = im(20, 20) assert_almost_equal_objects(before, after) def test_zoom(self): for fmt in all_formats: test = self.colour.cast(fmt) im = test.zoom(3, 3) assert im.width == test.width * 3 assert im.height == test.height * 3 before = test(50, 50) after = im(150, 150) assert_almost_equal_objects(before, after) def test_wrap(self): for fmt in all_formats: test = self.colour.cast(fmt) im = test.wrap() assert im.width == test.width assert im.height == test.height before = test(0, 0) after = im(50, 50) assert_almost_equal_objects(before, after) before = test(50, 50) after = im(0, 0) assert_almost_equal_objects(before, after) if __name__ == '__main__': pytest.main() libvips-8.15.1/test/test-suite/test_convolution.py000066400000000000000000000204231454007373500223440ustar00rootroot00000000000000# vim: set fileencoding=utf-8 : import operator import pytest from functools import reduce import pyvips from helpers import noncomplex_formats, run_fn2, run_fn, \ assert_almost_equal_objects, assert_less_threshold # point convolution def conv(image, mask, x_position, y_position): s = 0.0 for x in range(0, mask.width): for y in range(0, mask.height): m = mask(x, y) i = image(x + x_position, y + y_position) p = run_fn2(operator.mul, m, i) s = run_fn2(operator.add, s, p) return run_fn2(operator.truediv, s, mask.scale) def compass(image, mask, x_position, y_position, n_rot, fn): acc = [] for i in range(0, n_rot): result = conv(image, mask, x_position, y_position) result = run_fn(abs, result) acc.append(result) mask = mask.rot45() return reduce(lambda a, b: run_fn2(fn, a, b), acc) class TestConvolution: @classmethod def setup_class(cls): im = pyvips.Image.mask_ideal(100, 100, 0.5, reject=True, optical=True) cls.colour = im * [1, 2, 3] + [2, 3, 4] cls.colour = cls.colour.copy(interpretation=pyvips.Interpretation.SRGB) cls.mono = cls.colour.extract_band(1) cls.mono = cls.mono.copy(interpretation=pyvips.Interpretation.B_W) cls.all_images = [cls.mono, cls.colour] cls.sharp = pyvips.Image.new_from_array([[-1, -1, -1], [-1, 16, -1], [-1, -1, -1]], scale=8) cls.blur = pyvips.Image.new_from_array([[1, 1, 1], [1, 1, 1], [1, 1, 1]], scale=9) cls.line = pyvips.Image.new_from_array([[1, 1, 1], [-2, -2, -2], [1, 1, 1]]) cls.sobel = pyvips.Image.new_from_array([[1, 2, 1], [0, 0, 0], [-1, -2, -1]]) cls.all_masks = [cls.sharp, cls.blur, cls.line, cls.sobel] @classmethod def teardown_class(cls): cls.colour = None cls.mono = None cls.all_images = None cls.sharp = None cls.blur = None cls.line = None cls.sobel = None cls.all_masks = None def test_conv(self): for im in self.all_images: for msk in self.all_masks: for prec in [pyvips.Precision.INTEGER, pyvips.Precision.FLOAT]: convolved = im.conv(msk, precision=prec) result = convolved(25, 50) true = conv(im, msk, 24, 49) assert_almost_equal_objects(result, true) result = convolved(50, 50) true = conv(im, msk, 49, 49) assert_almost_equal_objects(result, true) # don't test conva, it's still not done def dont_est_conva(self): for im in self.all_images: for msk in self.all_masks: print("msk:") msk.matrixprint() print("im.bands = %s" % im.bands) convolved = im.conv(msk, precision=pyvips.Precision.APPROXIMATE) result = convolved(25, 50) true = conv(im, msk, 24, 49) print("result = %s, true = %s" % (result, true)) assert_less_threshold(result, true, 5) result = convolved(50, 50) true = conv(im, msk, 49, 49) print("result = %s, true = %s" % (result, true)) assert_less_threshold(result, true, 5) def test_compass(self): for im in self.all_images: for msk in self.all_masks: for prec in [pyvips.Precision.INTEGER, pyvips.Precision.FLOAT]: for times in range(1, 4): convolved = im.compass(msk, times=times, angle=pyvips.Angle45.D45, combine=pyvips.Combine.MAX, precision=prec) result = convolved(25, 50) true = compass(im, msk, 24, 49, times, max) assert_almost_equal_objects(result, true) for im in self.all_images: for msk in self.all_masks: for prec in [pyvips.Precision.INTEGER, pyvips.Precision.FLOAT]: for times in range(1, 4): convolved = im.compass(msk, times=times, angle=pyvips.Angle45.D45, combine=pyvips.Combine.SUM, precision=prec) result = convolved(25, 50) true = compass(im, msk, 24, 49, times, operator.add) assert_almost_equal_objects(result, true) def test_convsep(self): for im in self.all_images: for prec in [pyvips.Precision.INTEGER, pyvips.Precision.FLOAT]: gmask = pyvips.Image.gaussmat(2, 0.1, precision=prec) gmask_sep = pyvips.Image.gaussmat(2, 0.1, separable=True, precision=prec) assert gmask.width == gmask.height assert gmask_sep.width == gmask.width assert gmask_sep.height == 1 a = im.conv(gmask, precision=prec) b = im.convsep(gmask_sep, precision=prec) a_point = a(25, 50) b_point = b(25, 50) assert_almost_equal_objects(a_point, b_point, threshold=0.1) def test_fastcor(self): for im in self.all_images: for fmt in noncomplex_formats: small = im.crop(20, 45, 10, 10).cast(fmt) cor = im.fastcor(small) v, x, y = cor.minpos() assert v == 0 assert x == 25 assert y == 50 def test_spcor(self): for im in self.all_images: for fmt in noncomplex_formats: small = im.crop(20, 45, 10, 10).cast(fmt) cor = im.spcor(small) v, x, y = cor.maxpos() assert v == 1.0 assert x == 25 assert y == 50 def test_gaussblur(self): for im in self.all_images: for prec in [pyvips.Precision.INTEGER, pyvips.Precision.FLOAT]: for i in range(5, 10): sigma = i / 5.0 gmask = pyvips.Image.gaussmat(sigma, 0.2, precision=prec) a = im.conv(gmask, precision=prec) b = im.gaussblur(sigma, min_ampl=0.2, precision=prec) a_point = a(25, 50) b_point = b(25, 50) assert_almost_equal_objects(a_point, b_point, threshold=0.1) def test_sharpen(self): for im in self.all_images: for fmt in noncomplex_formats: # old vipses used "radius", check that that still works sharp = im.sharpen(radius=5) for sigma in [0.5, 1, 1.5, 2]: im = im.cast(fmt) sharp = im.sharpen(sigma=sigma) # hard to test much more than this assert im.width == sharp.width assert im.height == sharp.height # if m1 and m2 are zero, sharpen should do nothing sharp = im.sharpen(sigma=sigma, m1=0, m2=0) sharp = sharp.colourspace(im.interpretation) # print("testing sig = %g" % sigma) # print("testing fmt = %s" % fmt) # print("max diff = %g" % (im - sharp).abs().max()) assert (im - sharp).abs().max() == 0 if __name__ == '__main__': pytest.main() libvips-8.15.1/test/test-suite/test_create.py000066400000000000000000000364571454007373500212460ustar00rootroot00000000000000# vim: set fileencoding=utf-8 : import pytest import pyvips from helpers import assert_almost_equal_objects class TestCreate: def test_black(self): im = pyvips.Image.black(100, 100) assert im.width == 100 assert im.height == 100 assert im.format == pyvips.BandFormat.UCHAR assert im.bands == 1 for i in range(0, 100): pixel = im(i, i) assert len(pixel) == 1 assert pixel[0] == 0 im = pyvips.Image.black(100, 100, bands=3) assert im.width == 100 assert im.height == 100 assert im.format == pyvips.BandFormat.UCHAR assert im.bands == 3 for i in range(0, 100): pixel = im(i, i) assert len(pixel) == 3 assert_almost_equal_objects(pixel, [0, 0, 0]) def test_buildlut(self): M = pyvips.Image.new_from_array([[0, 0], [255, 100]]) lut = M.buildlut() assert lut.width == 256 assert lut.height == 1 assert lut.bands == 1 p = lut(0, 0) assert p[0] == 0.0 p = lut(255, 0) assert p[0] == 100.0 p = lut(10, 0) assert p[0] == 100 * 10.0 / 255.0 M = pyvips.Image.new_from_array([[0, 0, 100], [255, 100, 0], [128, 10, 90]]) lut = M.buildlut() assert lut.width == 256 assert lut.height == 1 assert lut.bands == 2 p = lut(0, 0) assert_almost_equal_objects(p, [0.0, 100.0]) p = lut(64, 0) assert_almost_equal_objects(p, [5.0, 95.0]) def test_eye(self): im = pyvips.Image.eye(100, 90) assert im.width == 100 assert im.height == 90 assert im.bands == 1 assert im.format == pyvips.BandFormat.FLOAT assert im.max() == 1.0 assert im.min() == -1.0 im = pyvips.Image.eye(100, 90, uchar=True) assert im.width == 100 assert im.height == 90 assert im.bands == 1 assert im.format == pyvips.BandFormat.UCHAR assert im.max() == 255.0 assert im.min() == 0.0 @pytest.mark.skipif(pyvips.type_find("VipsOperation", "fwfft") == 0, reason="no FFTW, skipping test") def test_fractsurf(self): im = pyvips.Image.fractsurf(100, 90, 2.5) assert im.width == 100 assert im.height == 90 assert im.bands == 1 assert im.format == pyvips.BandFormat.FLOAT def test_gaussmat(self): im = pyvips.Image.gaussmat(1, 0.1) assert im.width == 5 assert im.height == 5 assert im.bands == 1 assert im.format == pyvips.BandFormat.DOUBLE assert im.max() == 20 total = im.avg() * im.width * im.height scale = im.get("scale") assert total == scale p = im(im.width / 2, im.height / 2) assert p[0] == 20.0 im = pyvips.Image.gaussmat(1, 0.1, separable=True, precision="float") assert im.width == 5 assert im.height == 1 assert im.bands == 1 assert im.format == pyvips.BandFormat.DOUBLE assert im.max() == 1.0 total = im.avg() * im.width * im.height scale = im.get("scale") assert total == scale p = im(im.width / 2, im.height / 2) assert p[0] == 1.0 def test_gaussnoise(self): im = pyvips.Image.gaussnoise(100, 90) assert im.width == 100 assert im.height == 90 assert im.bands == 1 assert im.format == pyvips.BandFormat.FLOAT im = pyvips.Image.gaussnoise(100, 90, sigma=10, mean=100) assert im.width == 100 assert im.height == 90 assert im.bands == 1 assert im.format == pyvips.BandFormat.FLOAT sigma = im.deviate() mean = im.avg() assert sigma == pytest.approx(10, abs=0.4) assert mean == pytest.approx(100, abs=0.4) def test_grey(self): im = pyvips.Image.grey(100, 90) assert im.width == 100 assert im.height == 90 assert im.bands == 1 assert im.format == pyvips.BandFormat.FLOAT p = im(0, 0) assert p[0] == 0.0 p = im(99, 0) assert p[0] == 1.0 p = im(0, 89) assert p[0] == 0.0 p = im(99, 89) assert p[0] == 1.0 im = pyvips.Image.grey(100, 90, uchar=True) assert im.width == 100 assert im.height == 90 assert im.bands == 1 assert im.format == pyvips.BandFormat.UCHAR p = im(0, 0) assert p[0] == 0 p = im(99, 0) assert p[0] == 255 p = im(0, 89) assert p[0] == 0 p = im(99, 89) assert p[0] == 255 def test_identity(self): im = pyvips.Image.identity() assert im.width == 256 assert im.height == 1 assert im.bands == 1 assert im.format == pyvips.BandFormat.UCHAR p = im(0, 0) assert p[0] == 0.0 p = im(255, 0) assert p[0] == 255.0 p = im(128, 0) assert p[0] == 128.0 im = pyvips.Image.identity(ushort=True) assert im.width == 65536 assert im.height == 1 assert im.bands == 1 assert im.format == pyvips.BandFormat.USHORT p = im(0, 0) assert p[0] == 0 p = im(99, 0) assert p[0] == 99 p = im(65535, 0) assert p[0] == 65535 def test_invertlut(self): lut = pyvips.Image.new_from_array([[0.1, 0.2, 0.3, 0.1], [0.2, 0.4, 0.4, 0.2], [0.7, 0.5, 0.6, 0.3]]) im = lut.invertlut() assert im.width == 256 assert im.height == 1 assert im.bands == 3 assert im.format == pyvips.BandFormat.DOUBLE p = im(0, 0) assert_almost_equal_objects(p, [0, 0, 0]) p = im(255, 0) assert_almost_equal_objects(p, [1, 1, 1]) p = im(0.2 * 255, 0) assert p[0] == pytest.approx(0.1, abs=0.1) p = im(0.3 * 255, 0) assert p[1] == pytest.approx(0.1, abs=0.1) p = im(0.1 * 255, 0) assert p[2] == pytest.approx(0.1, abs=0.1) def test_matrixinvert(self): # 4x4 matrix to check if PLU decomposition works mat = pyvips.Image.new_from_array([[4, 0, 0, 0], [0, 0, 2, 0], [0, 1, 2, 0], [1, 0, 0, 1]]) im = mat.matrixinvert() assert im.width == 4 assert im.height == 4 assert im.bands == 1 assert im.format == pyvips.BandFormat.DOUBLE p = im(0, 0) assert p[0] == 0.25 p = im(3, 3) assert p[0] == 1.0 def test_logmat(self): im = pyvips.Image.logmat(1, 0.1) assert im.width == 7 assert im.height == 7 assert im.bands == 1 assert im.format == pyvips.BandFormat.DOUBLE assert im.max() == 20 total = im.avg() * im.width * im.height scale = im.get("scale") assert total == scale p = im(im.width / 2, im.height / 2) assert p[0] == 20.0 im = pyvips.Image.logmat(1, 0.1, separable=True, precision="float") assert im.width == 7 assert im.height == 1 assert im.bands == 1 assert im.format == pyvips.BandFormat.DOUBLE assert im.max() == 1.0 total = im.avg() * im.width * im.height scale = im.get("scale") assert total == scale p = im(im.width / 2, im.height / 2) assert p[0] == 1.0 def test_mask_butterworth_band(self): im = pyvips.Image.mask_butterworth_band(128, 128, 2, 0.5, 0.5, 0.7, 0.1) assert im.width == 128 assert im.height == 128 assert im.bands == 1 assert im.format == pyvips.BandFormat.FLOAT assert im.max() == pytest.approx(1, abs=0.01) p = im(32, 32) assert p[0] == 1.0 im = pyvips.Image.mask_butterworth_band(128, 128, 2, 0.5, 0.5, 0.7, 0.1, uchar=True, optical=True) assert im.width == 128 assert im.height == 128 assert im.bands == 1 assert im.format == pyvips.BandFormat.UCHAR assert im.max() == 255 p = im(32, 32) assert p[0] == 255.0 p = im(64, 64) assert p[0] == 255.0 im = pyvips.Image.mask_butterworth_band(128, 128, 2, 0.5, 0.5, 0.7, 0.1, uchar=True, optical=True, nodc=True) assert im.width == 128 assert im.height == 128 assert im.bands == 1 assert im.format == pyvips.BandFormat.UCHAR assert im.max() == 255 p = im(32, 32) assert p[0] == 255.0 p = im(64, 64) assert p[0] != 255 def test_mask_butterworth(self): im = pyvips.Image.mask_butterworth(128, 128, 2, 0.7, 0.1, nodc=True) assert im.width == 128 assert im.height == 128 assert im.bands == 1 assert im.format == pyvips.BandFormat.FLOAT assert im.min() == pytest.approx(0, abs=0.01) p = im(0, 0) assert p[0] == 0.0 v, x, y = im.maxpos() assert x == 64 assert y == 64 im = pyvips.Image.mask_butterworth(128, 128, 2, 0.7, 0.1, optical=True, uchar=True) assert im.width == 128 assert im.height == 128 assert im.bands == 1 assert im.format == pyvips.BandFormat.UCHAR assert im.min() == pytest.approx(0, abs=0.01) p = im(64, 64) assert p[0] == 255 def test_mask_butterworth_ring(self): im = pyvips.Image.mask_butterworth_ring(128, 128, 2, 0.7, 0.1, 0.5, nodc=True) assert im.width == 128 assert im.height == 128 assert im.bands == 1 assert im.format == pyvips.BandFormat.FLOAT p = im(45, 0) assert p[0] == pytest.approx(1.0, abs=0.0001) v, x, y = im.minpos() assert x == 64 assert y == 64 def test_mask_fractal(self): im = pyvips.Image.mask_fractal(128, 128, 2.3) assert im.width == 128 assert im.height == 128 assert im.bands == 1 assert im.format == pyvips.BandFormat.FLOAT def test_mask_gaussian_band(self): im = pyvips.Image.mask_gaussian_band(128, 128, 0.5, 0.5, 0.7, 0.1) assert im.width == 128 assert im.height == 128 assert im.bands == 1 assert im.format == pyvips.BandFormat.FLOAT assert im.max() == pytest.approx(1, abs=0.01) p = im(32, 32) assert p[0] == 1.0 def test_mask_gaussian(self): im = pyvips.Image.mask_gaussian(128, 128, 0.7, 0.1, nodc=True) assert im.width == 128 assert im.height == 128 assert im.bands == 1 assert im.format == pyvips.BandFormat.FLOAT assert im.min() == pytest.approx(0, abs=0.01) p = im(0, 0) assert p[0] == 0.0 def test_mask_gaussian_ring(self): im = pyvips.Image.mask_gaussian_ring(128, 128, 0.7, 0.1, 0.5, nodc=True) assert im.width == 128 assert im.height == 128 assert im.bands == 1 assert im.format == pyvips.BandFormat.FLOAT p = im(45, 0) assert p[0] == pytest.approx(1.0, abs=0.001) def test_mask_ideal_band(self): im = pyvips.Image.mask_ideal_band(128, 128, 0.5, 0.5, 0.7) assert im.width == 128 assert im.height == 128 assert im.bands == 1 assert im.format == pyvips.BandFormat.FLOAT assert im.max() == pytest.approx(1, abs=0.01) p = im(32, 32) assert p[0] == 1.0 def test_mask_ideal(self): im = pyvips.Image.mask_ideal(128, 128, 0.7, nodc=True) assert im.width == 128 assert im.height == 128 assert im.bands == 1 assert im.format == pyvips.BandFormat.FLOAT assert im.min() == pytest.approx(0, abs=0.01) p = im(0, 0) assert p[0] == 0.0 def test_mask_gaussian_ring_2(self): im = pyvips.Image.mask_ideal_ring(128, 128, 0.7, 0.5, nodc=True) assert im.width == 128 assert im.height == 128 assert im.bands == 1 assert im.format == pyvips.BandFormat.FLOAT p = im(45, 0) assert p[0] == pytest.approx(1, abs=0.001) def test_sines(self): im = pyvips.Image.sines(128, 128) assert im.width == 128 assert im.height == 128 assert im.bands == 1 assert im.format == pyvips.BandFormat.FLOAT @pytest.mark.skipif(pyvips.type_find("VipsOperation", "text") == 0, reason="no text, skipping test") def test_text(self): im = pyvips.Image.text("Hello, world!", dpi=300) assert im.width > 10 assert im.height > 10 assert im.bands == 1 assert im.format == pyvips.BandFormat.UCHAR assert im.max() > 240 assert im.min() == 0 # test autofit im = pyvips.Image.text("Hello, world!", width=500, height=500) # quite a large threshold, since we need to work with a huge range of # text rendering systems assert abs(im.width - 500) < 50 # test wrap im1 = pyvips.Image.text("helloworld", width=100, dpi=500) im2 = pyvips.Image.text("helloworld", width=100, dpi=500, wrap="char") assert im1.width > im2.width def test_tonelut(self): im = pyvips.Image.tonelut() assert im.bands == 1 assert im.format == pyvips.BandFormat.USHORT assert im.width == 32768 assert im.height == 1 assert im.hist_ismonotonic() def test_xyz(self): im = pyvips.Image.xyz(128, 128) assert im.bands == 2 assert im.format == pyvips.BandFormat.UINT assert im.width == 128 assert im.height == 128 p = im(45, 35) assert_almost_equal_objects(p, [45, 35]) def test_zone(self): im = pyvips.Image.zone(128, 128) assert im.width == 128 assert im.height == 128 assert im.bands == 1 assert im.format == pyvips.BandFormat.FLOAT @pytest.mark.skipif(pyvips.type_find("VipsOperation", "worley") == 0, reason="no worley, skipping test") def test_worley(self): im = pyvips.Image.worley(512, 512) assert im.width == 512 assert im.height == 512 assert im.bands == 1 assert im.format == pyvips.BandFormat.FLOAT @pytest.mark.skipif(pyvips.type_find("VipsOperation", "perlin") == 0, reason="no perlin, skipping test") def test_perlin(self): im = pyvips.Image.perlin(512, 512) assert im.width == 512 assert im.height == 512 assert im.bands == 1 assert im.format == pyvips.BandFormat.FLOAT if __name__ == '__main__': pytest.main() libvips-8.15.1/test/test-suite/test_draw.py000066400000000000000000000052761454007373500207330ustar00rootroot00000000000000# vim: set fileencoding=utf-8 : import pytest import pyvips class TestDraw: def test_draw_circle(self): im = pyvips.Image.black(100, 100) im = im.draw_circle(100, 50, 50, 25) pixel = im(25, 50) assert len(pixel) == 1 assert pixel[0] == 100 pixel = im(26, 50) assert len(pixel) == 1 assert pixel[0] == 0 im = pyvips.Image.black(100, 100) im = im.draw_circle(100, 50, 50, 25, fill=True) pixel = im(25, 50) assert len(pixel) == 1 assert pixel[0] == 100 pixel = im(26, 50) assert pixel[0] == 100 pixel = im(24, 50) assert pixel[0] == 0 def test_draw_flood(self): im = pyvips.Image.black(100, 100) im = im.draw_circle(100, 50, 50, 25) im = im.draw_flood(100, 50, 50) im2 = pyvips.Image.black(100, 100) im2 = im2.draw_circle(100, 50, 50, 25, fill=True) diff = (im - im2).abs().max() assert diff == 0 def test_draw_image(self): im = pyvips.Image.black(51, 51) im = im.draw_circle(100, 25, 25, 25, fill=True) im2 = pyvips.Image.black(100, 100) im2 = im2.draw_image(im, 25, 25) im3 = pyvips.Image.black(100, 100) im3 = im3.draw_circle(100, 50, 50, 25, fill=True) diff = (im2 - im3).abs().max() assert diff == 0 def test_draw_line(self): im = pyvips.Image.black(100, 100) im = im.draw_line(100, 0, 0, 100, 0) pixel = im(0, 0) assert len(pixel) == 1 assert pixel[0] == 100 pixel = im(0, 1) assert len(pixel) == 1 assert pixel[0] == 0 def test_draw_mask(self): mask = pyvips.Image.black(51, 51) mask = mask.draw_circle(128, 25, 25, 25, fill=True) im = pyvips.Image.black(100, 100) im = im.draw_mask(200, mask, 25, 25) im2 = pyvips.Image.black(100, 100) im2 = im2.draw_circle(100, 50, 50, 25, fill=True) diff = (im - im2).abs().max() assert diff == 0 def test_draw_rect(self): im = pyvips.Image.black(100, 100) im = im.draw_rect(100, 25, 25, 50, 50, fill=True) im2 = pyvips.Image.black(100, 100) for y in range(25, 75): im2 = im2.draw_line(100, 25, y, 74, y) diff = (im - im2).abs().max() assert diff == 0 def test_draw_smudge(self): im = pyvips.Image.black(100, 100) im = im.draw_circle(100, 50, 50, 25, fill=True) im2 = im.draw_smudge(10, 10, 50, 50) im3 = im.crop(10, 10, 50, 50) im4 = im2.draw_image(im3, 10, 10) diff = (im4 - im).abs().max() assert diff == 0 if __name__ == '__main__': pytest.main() libvips-8.15.1/test/test-suite/test_foreign.py000066400000000000000000001753601454007373500214310ustar00rootroot00000000000000# vim: set fileencoding=utf-8 : import sys import os import shutil import tempfile import pytest import pyvips from helpers import \ IMAGES, JPEG_FILE, SRGB_FILE, MATLAB_FILE, PNG_FILE, TIF_FILE, OME_FILE, \ ANALYZE_FILE, GIF_FILE, WEBP_FILE, EXR_FILE, FITS_FILE, OPENSLIDE_FILE, \ PDF_FILE, SVG_FILE, SVGZ_FILE, SVG_GZ_FILE, GIF_ANIM_FILE, DICOM_FILE, \ BMP_FILE, NIFTI_FILE, ICO_FILE, CUR_FILE, TGA_FILE, SGI_FILE, AVIF_FILE, \ AVIF_FILE_HUGE, TRUNCATED_FILE, \ GIF_ANIM_EXPECTED_PNG_FILE, GIF_ANIM_DISPOSE_BACKGROUND_FILE, \ GIF_ANIM_DISPOSE_BACKGROUND_EXPECTED_PNG_FILE, \ GIF_ANIM_DISPOSE_PREVIOUS_FILE, \ GIF_ANIM_DISPOSE_PREVIOUS_EXPECTED_PNG_FILE, \ temp_filename, assert_almost_equal_objects, have, skip_if_no, \ TIF1_FILE, TIF2_FILE, TIF4_FILE, WEBP_LOOKS_LIKE_SVG_FILE, \ WEBP_ANIMATED_FILE, JP2K_FILE, RGBA_FILE class TestForeign: tempdir = None @classmethod def setup_class(cls): cls.tempdir = tempfile.mkdtemp() cls.colour = pyvips.Image.jpegload(JPEG_FILE) cls.rgba = pyvips.Image.new_from_file(RGBA_FILE) cls.mono = cls.colour.extract_band(1).copy() # we remove the ICC profile: the RGB one will no longer be appropriate cls.mono.remove("icc-profile-data") cls.rad = cls.colour.float2rad().copy() cls.rad.remove("icc-profile-data") cls.cmyk = cls.colour.bandjoin(cls.mono) cls.cmyk = cls.cmyk.copy(interpretation=pyvips.Interpretation.CMYK) cls.cmyk.remove("icc-profile-data") im = pyvips.Image.new_from_file(GIF_FILE) cls.onebit = im[1] > 128 @classmethod def teardown_class(cls): shutil.rmtree(cls.tempdir, ignore_errors=True) cls.colour = None cls.rgba = None cls.mono = None cls.rad = None cls.cmyk = None cls.onebit = None # we have test files for formats which have a clear standard def file_loader(self, loader, test_file, validate): im = pyvips.Operation.call(loader, test_file) validate(im) im = pyvips.Image.new_from_file(test_file) validate(im) def buffer_loader(self, loader, test_file, validate): with open(test_file, 'rb') as f: buf = f.read() im = pyvips.Operation.call(loader, buf) validate(im) im = pyvips.Image.new_from_buffer(buf, "") validate(im) def save_load(self, format, im): x = pyvips.Image.new_temp_file(format) im.write(x) assert im.width == x.width assert im.height == x.height assert im.bands == x.bands max_diff = (im - x).abs().max() assert max_diff == 0 def save_load_file(self, format, options, im, max_diff=0): # yuk! # but we can't set format parameters for pyvips.Image.new_temp_file() filename = temp_filename(self.tempdir, format) im.write_to_file(filename + options) x = pyvips.Image.new_from_file(filename) assert im.width == x.width assert im.height == x.height assert im.bands == x.bands assert (im - x).abs().max() <= max_diff x = None def save_load_buffer(self, saver, loader, im, max_diff=0, **kwargs): buf = pyvips.Operation.call(saver, im, **kwargs) x = pyvips.Operation.call(loader, buf) assert im.width == x.width assert im.height == x.height assert im.bands == x.bands assert (im - x).abs().max() <= max_diff def save_buffer_tempfile(self, saver, suf, im, max_diff=0): filename = temp_filename(self.tempdir, suf) buf = pyvips.Operation.call(saver, im) f = open(filename, 'wb') f.write(buf) f.close() x = pyvips.Image.new_from_file(filename) assert im.width == x.width assert im.height == x.height assert im.bands == x.bands assert (im - x).abs().max() <= max_diff def test_vips(self): self.save_load_file(".v", "", self.colour) # check we can save and restore metadata filename = temp_filename(self.tempdir, ".v") self.colour.write_to_file(filename) x = pyvips.Image.new_from_file(filename) before_exif = self.colour.get("exif-data") after_exif = x.get("exif-data") assert len(before_exif) == len(after_exif) for i in range(len(before_exif)): assert before_exif[i] == after_exif[i] # https://github.com/libvips/libvips/issues/1847 filename = temp_filename(self.tempdir, ".v") x = pyvips.Image.black(16, 16) + 128 x.write_to_file(filename) x = pyvips.Image.new_from_file(filename) assert x.width == 16 assert x.height == 16 assert x.bands == 1 assert x.avg() == 128 x = None @skip_if_no("jpegload") def test_jpeg(self): def jpeg_valid(im): a = im(10, 10) # different versions of libjpeg decode have slightly different # rounding assert_almost_equal_objects(a, [141, 127, 90], threshold=3) profile = im.get("icc-profile-data") assert len(profile) == 564 assert im.width == 290 assert im.height == 442 assert im.bands == 3 self.file_loader("jpegload", JPEG_FILE, jpeg_valid) self.save_load("%s.jpg", self.mono) self.save_load("%s.jpg", self.colour) self.buffer_loader("jpegload_buffer", JPEG_FILE, jpeg_valid) self.save_load_buffer("jpegsave_buffer", "jpegload_buffer", self.colour, 80) # see if we have exif parsing: our test image has this field x = pyvips.Image.new_from_file(JPEG_FILE) if x.get_typeof("exif-ifd0-Orientation") != 0: # we need a copy of the image to set the new metadata on # otherwise we get caching problems # can set, save and load new orientation x = pyvips.Image.new_from_file(JPEG_FILE) x = x.copy() x.set("orientation", 2) filename = temp_filename(self.tempdir, '.jpg') x.write_to_file(filename) x = pyvips.Image.new_from_file(filename) y = x.get("orientation") assert y == 2 # can remove orientation, save, load again, orientation # has reset x = x.copy() x.remove("orientation") filename = temp_filename(self.tempdir, '.jpg') x.write_to_file(filename) x = pyvips.Image.new_from_file(filename) y = x.get("orientation") assert y == 1 # autorotate load works x = pyvips.Image.new_from_file(JPEG_FILE) x = x.copy() x.set("orientation", 6) filename = temp_filename(self.tempdir, '.jpg') x.write_to_file(filename) x1 = pyvips.Image.new_from_file(filename) x2 = pyvips.Image.new_from_file(filename, autorotate=True) assert x1.width == x2.height assert x1.height == x2.width # sets incorrect orientation, save, load again, orientation # has reset to 1 x = x.copy() x.set("orientation", 256) filename = temp_filename(self.tempdir, '.jpg') x.write_to_file(filename) x = pyvips.Image.new_from_file(filename) y = x.get("orientation") assert y == 1 # can set, save and reload ASCII string fields x = pyvips.Image.new_from_file(JPEG_FILE) x = x.copy() x.set_type(pyvips.GValue.gstr_type, "exif-ifd0-ImageDescription", "hello world") filename = temp_filename(self.tempdir, '.jpg') x.write_to_file(filename) x = pyvips.Image.new_from_file(filename) y = x.get("exif-ifd0-ImageDescription") # can't use == since the string will have an extra " (xx, yy, zz)" # format area at the end assert y.startswith("hello world") # can set, save and reload UTF16 string fields ... pyvips is # utf8, but it will be coded as utf16 and back for the XP* fields x = pyvips.Image.new_from_file(JPEG_FILE) x = x.copy() x.set_type(pyvips.GValue.gstr_type, "exif-ifd0-XPComment", u"йцук") filename = temp_filename(self.tempdir, '.jpg') x.write_to_file(filename) x = pyvips.Image.new_from_file(filename) y = x.get("exif-ifd0-XPComment") # can't use == since the string will have an extra " (xx, yy, zz)" # format area at the end assert y.startswith(u"йцук") # can set/save/load UserComment, a tag which has the # encoding in the first 8 bytes ... though libexif only supports # ASCII for this x = pyvips.Image.new_from_file(JPEG_FILE) x = x.copy() x.set_type(pyvips.GValue.gstr_type, "exif-ifd2-UserComment", "hello world") filename = temp_filename(self.tempdir, '.jpg') x.write_to_file(filename) x = pyvips.Image.new_from_file(filename) y = x.get("exif-ifd2-UserComment") # can't use == since the string will have an extra " (xx, yy, zz)" # format area at the end assert y.startswith("hello world") @skip_if_no("jpegsave") def test_jpegsave(self): im = pyvips.Image.new_from_file(JPEG_FILE) q10 = im.jpegsave_buffer(Q=10) q10_subsample_auto = im.jpegsave_buffer(Q=10, subsample_mode="auto") q10_subsample_on = im.jpegsave_buffer(Q=10, subsample_mode="on") q10_subsample_off = im.jpegsave_buffer(Q=10, subsample_mode="off") q90 = im.jpegsave_buffer(Q=90) q90_subsample_auto = im.jpegsave_buffer(Q=90, subsample_mode="auto") q90_subsample_on = im.jpegsave_buffer(Q=90, subsample_mode="on") q90_subsample_off = im.jpegsave_buffer(Q=90, subsample_mode="off") # higher Q should mean a bigger buffer assert len(q90) > len(q10) assert len(q10_subsample_auto) == len(q10) assert len(q10_subsample_on) == len(q10_subsample_auto) assert len(q10_subsample_off) > len(q10) assert len(q90_subsample_auto) == len(q90) assert len(q90_subsample_on) < len(q90) assert len(q90_subsample_off) == len(q90_subsample_auto) # A non-zero restart_interval should result in a bigger file. # Otherwise, smaller restart intervals will have more restart markers # and therefore be larger r0 = im.jpegsave_buffer(restart_interval=0) r10 = im.jpegsave_buffer(restart_interval=10) r2 = im.jpegsave_buffer(restart_interval=2) assert len(r10) > len(r0) assert len(r2) > len(r10) # we should be able to reload jpegs with extra MCU markers im0 = pyvips.Image.jpegload_buffer(r0) im10 = pyvips.Image.jpegload_buffer(r10) assert im0.avg() == im10.avg() @skip_if_no("jpegsave") def test_jpegsave_exif(self): def exif_valid(im): assert im.get("exif-ifd2-UserComment").find("Undefined, 21 components, 21 bytes") != -1 assert im.get("exif-ifd0-Software").find("ASCII, 14 components, 14 bytes") != -1 assert im.get("exif-ifd0-XPComment").find("Byte, 28 components, 28 bytes") != -1 def exif_removed(im): assert im.get_typeof("exif-ifd2-UserComment") == 0 assert im.get_typeof("exif-ifd0-Software") == 0 assert im.get_typeof("exif-ifd0-XPComment") == 0 # first make sure we have exif support im = pyvips.Image.new_from_file(JPEG_FILE) if im.get_typeof("exif-ifd0-Orientation") != 0: x = im.copy() x.set_type(pyvips.GValue.gstr_type, "exif-ifd2-UserComment", "hello ( there") # tag_is_encoding x.set_type(pyvips.GValue.gstr_type, "exif-ifd0-Software", "hello ( there") # tag_is_ascii x.set_type(pyvips.GValue.gstr_type, "exif-ifd0-XPComment", "hello ( there") # tag_is_utf16 buf = x.jpegsave_buffer() y = pyvips.Image.new_from_buffer(buf, "") exif_valid(y) # Reproduce https://github.com/libvips/libvips/issues/2388 buf = y.jpegsave_buffer() z = pyvips.Image.new_from_buffer(buf, "") exif_valid(z) # Try whether we can remove EXIF, just to be sure z = z.copy() z.remove("exif-ifd2-UserComment") z.remove("exif-ifd0-Software") z.remove("exif-ifd0-XPComment") buf = z.jpegsave_buffer() im = pyvips.Image.new_from_buffer(buf, "") exif_removed(im) @skip_if_no("jpegsave") @pytest.mark.xfail(raises=pyvips.error.Error, reason="requires libexif >= 0.6.22") def test_jpegsave_exif_2_3_ascii(self): def exif_valid(exif_tags, im): for exif_tag in exif_tags: assert im.get(exif_tag).find("ASCII, 14 components, 14 bytes") != -1 # first make sure we have exif support im = pyvips.Image.new_from_file(JPEG_FILE) if im.get_typeof("exif-ifd0-Orientation") != 0: x = im.copy() exif_tags = [ "exif-ifd2-CameraOwnerName", "exif-ifd2-BodySerialNumber", "exif-ifd2-LensMake", "exif-ifd2-LensModel", "exif-ifd2-LensSerialNumber", ] for exif_tag in exif_tags: x.set_type(pyvips.GValue.gstr_type, exif_tag, "hello ( there") buf = x.jpegsave_buffer() y = pyvips.Image.new_from_buffer(buf, "") exif_valid(exif_tags, y) @skip_if_no("jpegsave") @pytest.mark.xfail(raises=pyvips.error.Error, reason="requires libexif >= 0.6.23") def test_jpegsave_exif_2_3_ascii_2(self): def exif_valid(exif_tags, im): for exif_tag in exif_tags: assert im.get(exif_tag).find("ASCII, 14 components, 14 bytes") != -1 # first make sure we have exif support im = pyvips.Image.new_from_file(JPEG_FILE) if im.get_typeof("exif-ifd0-Orientation") != 0: x = im.copy() exif_tags = [ "exif-ifd2-OffsetTime", "exif-ifd2-OffsetTimeOriginal", "exif-ifd2-OffsetTimeDigitized", "exif-ifd3-GPSLatitudeRef", "exif-ifd3-GPSLongitudeRef", "exif-ifd3-GPSSatellites", "exif-ifd3-GPSStatus", "exif-ifd3-GPSMeasureMode", "exif-ifd3-GPSSpeedRef", "exif-ifd3-GPSTrackRef", "exif-ifd3-GPSImgDirectionRef", "exif-ifd3-GPSMapDatum", "exif-ifd3-GPSDestLatitudeRef", "exif-ifd3-GPSDestLongitudeRef", "exif-ifd3-GPSDestBearingRef", "exif-ifd3-GPSDestDistanceRef", "exif-ifd3-GPSDateStamp", ] for exif_tag in exif_tags: x.set_type(pyvips.GValue.gstr_type, exif_tag, "hello ( there") buf = x.jpegsave_buffer() y = pyvips.Image.new_from_buffer(buf, "") exif_valid(exif_tags, y) @skip_if_no("jpegload") def test_truncated(self): # This should open (there's enough there for the header) im = pyvips.Image.new_from_file(TRUNCATED_FILE) # but this should fail with a warning, and knock TRUNCATED_FILE out of # the cache x = im.avg() # now we should open again, but it won't come from cache, it'll reload im = pyvips.Image.new_from_file(TRUNCATED_FILE) # and this should fail with a warning once more x = im.avg() @skip_if_no("pngload") def test_png(self): def png_valid(im): a = im(10, 10) assert_almost_equal_objects(a, [38671.0, 33914.0, 26762.0]) assert im.width == 290 assert im.height == 442 assert im.bands == 3 assert im.get("bits-per-sample") == 16 self.file_loader("pngload", PNG_FILE, png_valid) self.buffer_loader("pngload_buffer", PNG_FILE, png_valid) self.save_load_buffer("pngsave_buffer", "pngload_buffer", self.colour) self.save_load("%s.png", self.mono) self.save_load("%s.png", self.colour) self.save_load_file(".png", "[interlace]", self.colour) self.save_load_file(".png", "[interlace]", self.mono) # size of a regular mono PNG len_mono = len(self.mono.write_to_buffer(".png")) # 4-bit should be smaller len_mono4 = len(self.mono.write_to_buffer(".png", bitdepth=4)) assert( len_mono4 < len_mono ) len_mono2 = len(self.mono.write_to_buffer(".png", bitdepth=2)) assert( len_mono2 < len_mono4 ) len_mono1 = len(self.mono.write_to_buffer(".png", bitdepth=1)) assert( len_mono1 < len_mono2 ) # take a 1-bit image to png and back onebit = self.mono > 128 data = onebit.write_to_buffer(".png", bitdepth=1) after = pyvips.Image.new_from_buffer(data, "") assert( (onebit - after).abs().max() == 0 ) assert after.get("bits-per-sample") == 1 # we can't test palette save since we can't be sure libimagequant is # available and there's no easy test for its presence # see if we have exif parsing: our test jpg image has this field x = pyvips.Image.new_from_file(JPEG_FILE) if x.get_typeof("exif-ifd0-Orientation") != 0: # we need a copy of the image to set the new metadata on # otherwise we get caching problems # can set, save and load new orientation x = pyvips.Image.new_from_file(JPEG_FILE) x = x.copy() x.set("orientation", 2) filename = temp_filename(self.tempdir, '.png') x.write_to_file(filename) x = pyvips.Image.new_from_file(filename) y = x.get("orientation") assert y == 2 # Add EXIF to new PNG im1 = pyvips.Image.black(8, 8) im1.set_type(pyvips.GValue.gstr_type, "exif-ifd0-ImageDescription", "test description") im2 = pyvips.Image.new_from_buffer( im1.write_to_buffer(".png"), "") assert im2.get("exif-ifd0-ImageDescription").startswith("test description") @skip_if_no("tiffload") def test_tiff(self): def tiff_valid(im): a = im(10, 10) assert_almost_equal_objects(a, [38671.0, 33914.0, 26762.0]) assert im.width == 290 assert im.height == 442 assert im.bands == 3 assert im.get("bits-per-sample") == 16 self.file_loader("tiffload", TIF_FILE, tiff_valid) self.buffer_loader("tiffload_buffer", TIF_FILE, tiff_valid) def tiff1_valid(im): a = im(127, 0) assert_almost_equal_objects(a, [0.0]) a = im(128, 0) assert_almost_equal_objects(a, [255.0]) assert im.width == 256 assert im.height == 4 assert im.bands == 1 assert im.get("bits-per-sample") == 1 self.file_loader("tiffload", TIF1_FILE, tiff1_valid) def tiff2_valid(im): a = im(127, 0) assert_almost_equal_objects(a, [85.0]) a = im(128, 0) assert_almost_equal_objects(a, [170.0]) assert im.width == 256 assert im.height == 4 assert im.bands == 1 assert im.get("bits-per-sample") == 2 self.file_loader("tiffload", TIF2_FILE, tiff2_valid) def tiff4_valid(im): a = im(127, 0) assert_almost_equal_objects(a, [119.0]) a = im(128, 0) assert_almost_equal_objects(a, [136.0]) assert im.width == 256 assert im.height == 4 assert im.bands == 1 assert im.get("bits-per-sample") == 4 self.file_loader("tiffload", TIF4_FILE, tiff4_valid) self.save_load_buffer("tiffsave_buffer", "tiffload_buffer", self.colour) self.save_load("%s.tif", self.mono) self.save_load("%s.tif", self.colour) self.save_load("%s.tif", self.cmyk) self.save_load("%s.tif", self.rgba) self.save_load("%s.tif", self.onebit) self.save_load_file(".tif", "[bitdepth=1]", self.onebit) self.save_load_file(".tif", "[miniswhite]", self.onebit) self.save_load_file(".tif", "[bitdepth=1,miniswhite]", self.onebit) self.save_load_file(".tif", f"[profile={SRGB_FILE}]", self.colour) self.save_load_file(".tif", "[tile]", self.colour) self.save_load_file(".tif", "[tile,pyramid]", self.colour) self.save_load_file(".tif", "[tile,pyramid,subifd]", self.colour) self.save_load_file(".tif", "[tile,pyramid,compression=jpeg]", self.colour, 80) self.save_load_file(".tif", "[tile,pyramid,subifd,compression=jpeg]", self.colour, 80) self.save_load_file(".tif", "[bigtiff]", self.colour) self.save_load_file(".tif", "[compression=jpeg]", self.colour, 80) self.save_load_file(".tif", "[tile,tile-width=256]", self.colour, 10) im = pyvips.Image.new_from_file(TIF2_FILE) self.save_load_file(".tif", "[bitdepth=2]", im) im = pyvips.Image.new_from_file(TIF4_FILE) self.save_load_file(".tif", "[bitdepth=4]", im) filename = temp_filename(self.tempdir, '.tif') self.colour.write_to_file(filename, pyramid=True, compression="jpeg") x = pyvips.Image.new_from_file(filename, page=2) assert x.width == 72 assert abs(x.avg() - 117.3) < 1 filename = temp_filename(self.tempdir, '.tif') self.colour.write_to_file(filename, pyramid=True, subifd=True, compression="jpeg") x = pyvips.Image.new_from_file(filename, subifd=1) assert x.width == 72 assert abs(x.avg() - 117.3) < 1 filename = temp_filename(self.tempdir, '.tif') x = pyvips.Image.new_from_file(TIF_FILE) x = x.copy() x.set("orientation", 2) x.write_to_file(filename) x = pyvips.Image.new_from_file(filename) y = x.get("orientation") assert y == 2 filename = temp_filename(self.tempdir, '.tif') x = pyvips.Image.new_from_file(TIF_FILE) x = x.copy() x.set("orientation", 2) x.write_to_file(filename) x = pyvips.Image.new_from_file(filename) y = x.get("orientation") assert y == 2 x = x.copy() x.remove("orientation") filename = temp_filename(self.tempdir, '.tif') x.write_to_file(filename) x = pyvips.Image.new_from_file(filename) y = x.get("orientation") assert y == 1 filename = temp_filename(self.tempdir, '.tif') x = pyvips.Image.new_from_file(TIF_FILE) x = x.copy() x.set("orientation", 6) x.write_to_file(filename) x1 = pyvips.Image.new_from_file(filename) x2 = pyvips.Image.new_from_file(filename, autorotate=True) assert x1.width == x2.height assert x1.height == x2.width filename = temp_filename(self.tempdir, '.tif') x = pyvips.Image.new_from_file(TIF_FILE) x = x.copy() x.write_to_file(filename, xres=100, yres=200, resunit="cm") x1 = pyvips.Image.new_from_file(filename) assert x1.get("resolution-unit") == "cm" assert x1.xres == 100 assert x1.yres == 200 filename = temp_filename(self.tempdir, '.tif') x = pyvips.Image.new_from_file(TIF_FILE) x = x.copy() x.write_to_file(filename, xres=100, yres=200, resunit="inch") x1 = pyvips.Image.new_from_file(filename) assert x1.get("resolution-unit") == "in" assert x1.xres == 100 assert x1.yres == 200 # OME support in 8.5 x = pyvips.Image.new_from_file(OME_FILE) assert x.width == 439 assert x.height == 167 page_height = x.height x = pyvips.Image.new_from_file(OME_FILE, n=-1) assert x.width == 439 assert x.height == page_height * 15 x = pyvips.Image.new_from_file(OME_FILE, page=1, n=-1) assert x.width == 439 assert x.height == page_height * 14 x = pyvips.Image.new_from_file(OME_FILE, page=1, n=2) assert x.width == 439 assert x.height == page_height * 2 x = pyvips.Image.new_from_file(OME_FILE, n=-1) assert x(0, 166)[0] == 96 assert x(0, 167)[0] == 0 assert x(0, 168)[0] == 1 filename = temp_filename(self.tempdir, '.tif') x.write_to_file(filename) x = pyvips.Image.new_from_file(filename, n=-1) assert x.width == 439 assert x.height == page_height * 15 assert x(0, 166)[0] == 96 assert x(0, 167)[0] == 0 assert x(0, 168)[0] == 1 # pyr save to buffer added in 8.6 x = pyvips.Image.new_from_file(TIF_FILE) buf = x.tiffsave_buffer(tile=True, pyramid=True) filename = temp_filename(self.tempdir, '.tif') x.tiffsave(filename, tile=True, pyramid=True) with open(filename, 'rb') as f: buf2 = f.read() assert len(buf) == len(buf2) filename = temp_filename(self.tempdir, '.tif') self.rgba.write_to_file(filename, premultiply=True) a = pyvips.Image.new_from_file(filename) b = self.rgba.premultiply().cast("uchar").unpremultiply().cast("uchar") assert (a == b).min() == 255 a = pyvips.Image.new_from_buffer(buf, "", page=2) b = pyvips.Image.new_from_buffer(buf2, "", page=2) assert a.width == b.width assert a.height == b.height assert (a == b).min() == 255 # just 0/255 in each band, shrink with mode and all pixels should be 0 # or 255 in layer 1 x = pyvips.Image.new_from_file(TIF_FILE) > 128 for shrink in ["mode", "median", "max", "min"]: buf = x.tiffsave_buffer(pyramid=True, region_shrink=shrink) y = pyvips.Image.new_from_buffer(buf, "", page=1) z = y.hist_find(band=0) assert z(0, 0)[0] + z(255, 0)[0] == y.width * y.height @skip_if_no("jp2kload") @skip_if_no("tiffload") def test_tiffjp2k(self): self.save_load_file(".tif", "[tile,compression=jp2k]", self.colour, 80) self.save_load_file(".tif", "[tile,pyramid,compression=jp2k]", self.colour, 80) self.save_load_file(".tif", "[tile,pyramid,subifd,compression=jp2k]", self.colour, 80) @skip_if_no("magickload") def test_magickload(self): def bmp_valid(im): a = im(100, 100) assert_almost_equal_objects(a, [227, 216, 201]) assert im.width == 1419 assert im.height == 1001 assert im.get("bits-per-sample") == 8 self.file_loader("magickload", BMP_FILE, bmp_valid) self.buffer_loader("magickload_buffer", BMP_FILE, bmp_valid) # we should have rgb or rgba for svg files ... different versions of # IM handle this differently. GM even gives 1 band. im = pyvips.Image.magickload(SVG_FILE) assert im.bands == 3 or im.bands == 4 or im.bands == 1 # density should change size of generated svg im = pyvips.Image.magickload(SVG_FILE, density='100') width = im.width height = im.height im = pyvips.Image.magickload(SVG_FILE, density='200') # This seems to fail on travis, no idea why, some problem in their IM # perhaps # assert im.width == width * 2 # assert im.height == height * 2 im = pyvips.Image.magickload(GIF_ANIM_FILE) width = im.width height = im.height im = pyvips.Image.magickload(GIF_ANIM_FILE, n=-1) assert im.width == width assert im.height == height * 5 # page/n let you pick a range of pages # 'n' param added in 8.5 if pyvips.at_least_libvips(8, 5): im = pyvips.Image.magickload(GIF_ANIM_FILE) width = im.width height = im.height im = pyvips.Image.magickload(GIF_ANIM_FILE, page=1, n=2) assert im.width == width assert im.height == height * 2 page_height = im.get("page-height") assert page_height == height # should work for dicom im = pyvips.Image.magickload(DICOM_FILE) assert im.width == 128 assert im.height == 128 # some IMs are 3 bands, some are 1, can't really test # assert im.bands == 1 # libvips has its own sniffer for ICO, test that with open(ICO_FILE, 'rb') as f: buf = f.read() im = pyvips.Image.new_from_buffer(buf, "") assert im.width == 16 assert im.height == 16 # libvips has its own sniffer for CUR, test that with open(CUR_FILE, 'rb') as f: buf = f.read() im = pyvips.Image.new_from_buffer(buf, "") assert im.width == 32 assert im.height == 32 # libvips has its own sniffer for TGA, test that with open(TGA_FILE, 'rb') as f: buf = f.read() im = pyvips.Image.new_from_buffer(buf, "") assert im.width == 433 assert im.height == 433 # Test SGI/RGB files to sanity check that sniffers # aren't too broad with open(SGI_FILE, 'rb') as f: buf = f.read() im = pyvips.Image.new_from_buffer(buf, "") assert im.width == 433 assert im.height == 433 # load should see metadata like eg. icc profiles im = pyvips.Image.magickload(JPEG_FILE) assert len(im.get("icc-profile-data")) == 564 # added in 8.7 @skip_if_no("magicksave") def test_magicksave(self): # save to a file and load again ... we can't use save_load_file since # we want to make sure we use magickload/save # don't use BMP - GraphicsMagick always adds an alpha # don't use TIF - IM7 will save as 16-bit filename = temp_filename(self.tempdir, ".jpg") self.colour.magicksave(filename) x = pyvips.Image.magickload(filename) assert self.colour.width == x.width assert self.colour.height == x.height assert self.colour.bands == x.bands max_diff = (self.colour - x).abs().max() assert max_diff < 60 assert len(x.get("icc-profile-data")) == 564 self.save_load_buffer("magicksave_buffer", "magickload_buffer", self.colour, 60, format="JPG") # try an animation if have("gifload"): x1 = pyvips.Image.new_from_file(GIF_ANIM_FILE, n=-1) w1 = x1.magicksave_buffer(format="GIF") x2 = pyvips.Image.new_from_buffer(w1, "", n=-1) assert x1.get("delay") == x2.get("delay") assert x1.get("page-height") == x2.get("page-height") # magicks vary in how they handle this ... just pray we are close assert abs(x1.get("gif-loop") - x2.get("gif-loop")) < 5 @skip_if_no("webpload") def test_webp(self): def webp_valid(im): a = im(10, 10) # different webp versions use different rounding systems leading # to small variations assert_almost_equal_objects(a, [71, 166, 236], threshold=2) assert im.width == 550 assert im.height == 368 assert im.bands == 3 self.file_loader("webpload", WEBP_FILE, webp_valid) self.buffer_loader("webpload_buffer", WEBP_FILE, webp_valid) self.save_load_buffer("webpsave_buffer", "webpload_buffer", self.colour, 60) self.save_load("%s.webp", self.colour) # test lossless mode im = pyvips.Image.new_from_file(WEBP_FILE) buf = im.webpsave_buffer(lossless=True) im2 = pyvips.Image.new_from_buffer(buf, "") assert abs(im.avg() - im2.avg()) < 1 # higher Q should mean a bigger buffer b1 = im.webpsave_buffer(Q=10) b2 = im.webpsave_buffer(Q=90) assert len(b2) > len(b1) # try saving an image with an ICC profile and reading it back ... if we # can do it, our webp supports metadata load/save buf = self.colour.webpsave_buffer() im = pyvips.Image.new_from_buffer(buf, "") if im.get_typeof("icc-profile-data") != 0: # verify that the profile comes back unharmed p1 = self.colour.get("icc-profile-data") p2 = im.get("icc-profile-data") assert p1 == p2 # add tests for exif, xmp, ipct # the exif test will need us to be able to walk the header, # we can't just check exif-data # we can test that exif changes change the output of webpsave # first make sure we have exif support z = pyvips.Image.new_from_file(JPEG_FILE) if z.get_typeof("exif-ifd0-Orientation") != 0: x = self.colour.copy() x.set("orientation", 6) buf = x.webpsave_buffer() y = pyvips.Image.new_from_buffer(buf, "") assert y.get("orientation") == 6 # try converting an animated gif to webp if have("gifload"): x1 = pyvips.Image.new_from_file(GIF_ANIM_FILE, n=-1) w1 = x1.webpsave_buffer(Q=10) # our test gif has delay 0 for the first frame set in error, # when converting to WebP this should result in a 100ms delay. expected_delay = [100 if d <= 10 else d for d in x1.get("delay")] x2 = pyvips.Image.new_from_buffer(w1, "", n=-1) assert x1.width == x2.width assert x1.height == x2.height assert expected_delay == x2.get("delay") assert x1.get("page-height") == x2.get("page-height") assert x1.get("gif-loop") == x2.get("gif-loop") # WebP image that happens to contain the string "' im = pyvips.Image.new_from_buffer(svg, "") # recognize dimensions for SVGs without width/height svg = b'' im = pyvips.Image.new_from_buffer(svg, "") assert im.width == 100 assert im.height == 100 svg = b'' im = pyvips.Image.new_from_buffer(svg, "") assert im.width == 100 assert im.height == 100 # width and height of 0.5 is valid svg = b'' im = pyvips.Image.new_from_buffer(svg, "") assert im.width == 1 assert im.height == 1 def test_csv(self): self.save_load("%s.csv", self.mono) def test_matrix(self): self.save_load("%s.mat", self.mono) @skip_if_no("ppmload") def test_ppm(self): self.save_load("%s.ppm", self.mono) self.save_load("%s.ppm", self.colour) self.save_load_file("%s.ppm", "[ascii]", self.mono, 0) self.save_load_file("%s.ppm", "[ascii]", self.colour, 0) self.save_load_file("%s.ppm", "[ascii,bitdepth=1]", self.onebit, 0) rgb16 = self.colour.colourspace("rgb16") grey16 = self.mono.colourspace("rgb16") self.save_load("%s.ppm", grey16) self.save_load("%s.ppm", rgb16) self.save_load_file("%s.ppm", "[ascii]", grey16, 0) self.save_load_file("%s.ppm", "[ascii]", rgb16, 0) @skip_if_no("radload") def test_rad(self): self.save_load("%s.hdr", self.colour) self.save_buffer_tempfile("radsave_buffer", ".hdr", self.rad, max_diff=0) @skip_if_no("dzsave") def test_dzsave(self): # dzsave is hard to test, there are so many options # test each option separately and hope they all function together # correctly # default deepzoom layout ... we must use png here, since we want to # test the overlap for equality filename = temp_filename(self.tempdir, '') self.colour.dzsave(filename, suffix=".png") # test horizontal overlap ... expect 256 step, overlap 1 x = pyvips.Image.new_from_file(filename + "_files/9/0_0.png") assert x.width == 255 y = pyvips.Image.new_from_file(filename + "_files/9/1_0.png") assert y.width == 37 # the right two columns of x should equal the left two columns of y left = x.crop(x.width - 2, 0, 2, x.height) right = y.crop(0, 0, 2, y.height) assert (left - right).abs().max() == 0 # test vertical overlap assert x.height == 255 y = pyvips.Image.new_from_file(filename + "_files/9/0_1.png") assert y.height == 189 # the bottom two rows of x should equal the top two rows of y top = x.crop(0, x.height - 2, x.width, 2) bottom = y.crop(0, 0, y.width, 2) assert (top - bottom).abs().max() == 0 # there should be a bottom layer x = pyvips.Image.new_from_file(filename + "_files/0/0_0.png") assert x.width == 1 assert x.height == 1 # 9 should be the final layer assert not os.path.isdir(filename + "_files/10") # default google layout filename = temp_filename(self.tempdir, '') self.colour.dzsave(filename, layout="google") # test bottom-right tile ... default is 256x256 tiles, overlap 0 x = pyvips.Image.new_from_file(filename + "/1/1/1.jpg") assert x.width == 256 assert x.height == 256 assert not os.path.exists(filename + "/1/1/2.jpg") assert not os.path.exists(filename + "/2") x = pyvips.Image.new_from_file(filename + "/blank.png") assert x.width == 256 assert x.height == 256 # google layout with overlap ... verify that we clip correctly # overlap 1, 510x510 pixels, 256 pixel tiles, should be exactly 2x2 # tiles, though in fact the bottom and right edges will be white filename = temp_filename(self.tempdir, '') self.colour \ .replicate(2, 2) \ .crop(0, 0, 510, 510) \ .dzsave(filename, layout="google", overlap=1, depth="one") x = pyvips.Image.new_from_file(filename + "/0/1/1.jpg") assert x.width == 256 assert x.height == 256 assert not os.path.exists(filename + "/0/2/2.jpg") # with 511x511, it'll fit exactly into 2x2 -- we we actually generate # 3x3, since we output the overlaps filename = temp_filename(self.tempdir, '') self.colour \ .replicate(2, 2) \ .crop(0, 0, 511, 511) \ .dzsave(filename, layout="google", overlap=1, depth="one") x = pyvips.Image.new_from_file(filename + "/0/2/2.jpg") assert x.width == 256 assert x.height == 256 assert not os.path.exists(filename + "/0/3/3.jpg") # default zoomify layout filename = temp_filename(self.tempdir, '') self.colour.dzsave(filename, layout="zoomify") # 256x256 tiles, no overlap assert os.path.exists(filename + "/ImageProperties.xml") x = pyvips.Image.new_from_file(filename + "/TileGroup0/1-0-0.jpg") assert x.width == 256 assert x.height == 256 # test zip output filename = temp_filename(self.tempdir, '.zip') self.colour.dzsave(filename) assert os.path.exists(filename) assert not os.path.exists(filename + "_files") assert not os.path.exists(filename + ".dzi") # test compressed zip output filename2 = temp_filename(self.tempdir, '.zip') self.colour.dzsave(filename2, compression=-1) assert os.path.exists(filename2) with open(filename, 'rb') as f: buf1 = f.read() with open(filename2, 'rb') as f: buf2 = f.read() # compressed output should produce smaller file size assert len(buf2) < len(buf1) # check whether the *.dzi file is Deflate-compressed assert buf1.find(b'http://schemas.microsoft.com/deepzoom/2008') != -1 assert buf2.find(b'http://schemas.microsoft.com/deepzoom/2008') == -1 # test suffix filename = temp_filename(self.tempdir, '') self.colour.dzsave(filename, suffix=".png") x = pyvips.Image.new_from_file(filename + "_files/9/0_0.png") assert x.width == 255 # test overlap filename = temp_filename(self.tempdir, '') self.colour.dzsave(filename, overlap=200) y = pyvips.Image.new_from_file(filename + "_files/9/1_1.jpeg") assert y.width == 236 # test tile-size filename = temp_filename(self.tempdir, '') self.colour.dzsave(filename, tile_size=512) y = pyvips.Image.new_from_file(filename + "_files/9/0_0.jpeg") assert y.width == 290 assert y.height == 442 # test save to memory buffer filename = temp_filename(self.tempdir, '.zip') base = os.path.basename(filename) root, ext = os.path.splitext(base) self.colour.dzsave(filename) with open(filename, 'rb') as f: buf1 = f.read() buf2 = self.colour.dzsave_buffer(basename=root) assert len(buf1) == len(buf2) # we can't test the bytes are exactly equal -- the timestamp in # vips-properties.xml will be different # added in 8.7 buf = self.colour.dzsave_buffer(region_shrink="mean") buf = self.colour.dzsave_buffer(region_shrink="mode") buf = self.colour.dzsave_buffer(region_shrink="median") # test keep=pyvips.ForeignKeep.ICC ... icc profiles should be # passed down filename = temp_filename(self.tempdir, '') self.colour.dzsave(filename, keep=1 << 3) # pyvips.ForeignKeep.ICC - https://github.com/libvips/pyvips/pull/429 y = pyvips.Image.new_from_file(filename + "_files/0/0_0.jpeg") assert y.get_typeof("icc-profile-data") != 0 @skip_if_no("heifload") def test_heifload(self): def heif_valid(im): a = im(10, 10) # different versions of libheif decode have slightly different # rounding assert_almost_equal_objects(a, [197.0, 181.0, 158.0], threshold=2) assert im.width == 3024 assert im.height == 4032 assert im.bands == 3 self.file_loader("heifload", AVIF_FILE, heif_valid) self.buffer_loader("heifload_buffer", AVIF_FILE, heif_valid) with pytest.raises(Exception) as e_info: im = pyvips.Image.heifload(AVIF_FILE_HUGE) assert im.avg() == 0.0 im = pyvips.Image.heifload(AVIF_FILE_HUGE, unlimited=True) assert im.avg() == 0.0 @skip_if_no("heifsave") @pytest.mark.skipif(sys.platform == "darwin", reason="fails with latest libheif/aom from Homebrew") def test_avifsave(self): # TODO: Reduce the threshold once https://github.com/strukturag/libheif/issues/533 is resolved. self.save_load_buffer("heifsave_buffer", "heifload_buffer", self.colour, 80, compression="av1", lossless=True) self.save_load("%s.avif", self.colour) @skip_if_no("heifsave") @pytest.mark.skipif(sys.platform == "darwin", reason="fails with latest libheif/aom from Homebrew") @pytest.mark.skip() def test_avifsave_lossless(self): # this takes FOREVER im = pyvips.Image.new_from_file(AVIF_FILE) buf = im.heifsave_buffer(lossless=True, compression="av1") im2 = pyvips.Image.new_from_buffer(buf, "") # not in fact quite lossless assert abs(im.avg() - im2.avg()) < 3 @skip_if_no("heifsave") @pytest.mark.skipif(sys.platform == "darwin", reason="fails with latest libheif/aom from Homebrew") def test_avifsave_Q(self): # higher Q should mean a bigger buffer, needs libheif >= v1.8.0, # see: https://github.com/libvips/libvips/issues/1757 b1 = self.mono.heifsave_buffer(Q=10, compression="av1") b2 = self.mono.heifsave_buffer(Q=90, compression="av1") assert len(b2) > len(b1) @skip_if_no("heifsave") @pytest.mark.skipif(sys.platform == "darwin", reason="fails with latest libheif/aom from Homebrew") def test_avifsave_chroma(self): # Chroma subsampling should produce smaller file size for same Q b1 = self.colour.heifsave_buffer(compression="av1", subsample_mode="on") b2 = self.colour.heifsave_buffer(compression="av1", subsample_mode="off") assert len(b2) > len(b1) @skip_if_no("heifsave") @pytest.mark.skipif(sys.platform == "darwin", reason="fails with latest libheif/aom from Homebrew") def test_avifsave_icc(self): # try saving an image with an ICC profile and reading it back # not all libheif have profile support, so put it in an if buf = self.colour.heifsave_buffer(Q=10, compression="av1") im = pyvips.Image.new_from_buffer(buf, "") p1 = self.colour.get("icc-profile-data") if im.get_typeof("icc-profile-data") != 0: p2 = im.get("icc-profile-data") assert p1 == p2 # add tests for xmp, ipct # the exif test will need us to be able to walk the header, # we can't just check exif-data @skip_if_no("heifsave") @pytest.mark.skipif(sys.platform == "darwin", reason="fails with latest libheif/aom from Homebrew") def test_avifsave_exif(self): # first make sure we have exif support x = pyvips.Image.new_from_file(JPEG_FILE) if x.get_typeof("exif-ifd0-Orientation") != 0: x = x.copy() x.set_type(pyvips.GValue.gstr_type, "exif-ifd0-XPComment", "banana") buf = x.heifsave_buffer(Q=10, compression="av1") y = pyvips.Image.new_from_buffer(buf, "") assert y.get("exif-ifd0-XPComment").startswith("banana") @skip_if_no("heifsave") @pytest.mark.skipif(sys.platform == "darwin", reason="fails with latest libheif/aom from Homebrew") def test_heicsave_16_to_12(self): rgb16 = self.colour.colourspace("rgb16") data = rgb16.heifsave_buffer(lossless=True) im = pyvips.Image.heifload_buffer(data) assert(im.width == rgb16.width) assert(im.format == rgb16.format) assert(im.interpretation == rgb16.interpretation) assert(im.get("bits-per-sample") == 12) # good grief, some kind of lossless assert((im - rgb16).abs().max() < 4500) @skip_if_no("heifsave") @pytest.mark.skipif(sys.platform == "darwin", reason="fails with latest libheif/aom from Homebrew") def test_heicsave_16_to_8(self): rgb16 = self.colour.colourspace("rgb16") data = rgb16.heifsave_buffer(lossless=True, bitdepth=8) im = pyvips.Image.heifload_buffer(data) assert(im.width == rgb16.width) assert(im.format == "uchar") assert(im.interpretation == "srgb") assert(im.get("bits-per-sample") == 8) # good grief, some kind of lossless assert((im - rgb16 / 256).abs().max() < 80) @skip_if_no("heifsave") @pytest.mark.skipif(sys.platform == "darwin", reason="fails with latest libheif/aom from Homebrew") def test_heicsave_8_to_16(self): data = self.colour.heifsave_buffer(lossless=True, bitdepth=12) im = pyvips.Image.heifload_buffer(data) assert(im.width == self.colour.width) assert(im.format == "ushort") assert(im.interpretation == "rgb16") assert(im.get("bits-per-sample") == 12) # good grief, some kind of lossless assert((im - self.colour * 256).abs().max() < 4500) @skip_if_no("jp2kload") def test_jp2kload(self): def jp2k_valid(im): a = im(402, 73) assert_almost_equal_objects(a, [141, 144, 73], threshold=2) assert im.width == 800 assert im.height == 400 assert im.bands == 3 assert im.get("bits-per-sample") == 8 self.file_loader("jp2kload", JP2K_FILE, jp2k_valid) self.buffer_loader("jp2kload_buffer", JP2K_FILE, jp2k_valid) @skip_if_no("jp2ksave") def test_jp2ksave(self): self.save_load_buffer("jp2ksave_buffer", "jp2kload_buffer", self.colour, 80) buf = self.colour.jp2ksave_buffer(lossless=True) im2 = pyvips.Image.new_from_buffer(buf, "") assert (self.colour == im2).min() == 255 # higher Q should mean a bigger buffer b1 = self.mono.jp2ksave_buffer(Q=10) b2 = self.mono.jp2ksave_buffer(Q=90) assert len(b2) > len(b1) # disabling chroma subsample should mean a bigger buffer b1 = self.colour.jp2ksave_buffer(subsample_mode="on") b2 = self.colour.jp2ksave_buffer(subsample_mode="off") assert len(b2) > len(b1) # enabling lossless should mean a bigger buffer b1 = self.colour.jp2ksave_buffer(lossless=False) b2 = self.colour.jp2ksave_buffer(lossless=True) assert len(b2) > len(b1) # 16-bit colour load and save im = self.colour.colourspace("rgb16") buf = im.jp2ksave_buffer(lossless=True) im2 = pyvips.Image.new_from_buffer(buf, "") assert (im == im2).min() == 255 assert im2.get("bits-per-sample") == 16 # openjpeg 32-bit load and save doesn't seem to work, comment out # im = self.colour.colourspace("rgb16").cast("uint") << 14 # buf = im.jp2ksave_buffer(lossless=True) # im2 = pyvips.Image.new_from_buffer(buf, "") # assert (im == im2).min() == 255 @skip_if_no("jxlsave") def test_jxlsave(self): # save and load with an icc profile self.save_load_buffer("jxlsave_buffer", "jxlload_buffer", self.colour, 130) # with no icc profile no_profile = self.colour.copy() no_profile.remove("icc-profile-data") self.save_load_buffer("jxlsave_buffer", "jxlload_buffer", no_profile, 120) # scrgb mode scrgb = self.colour.colourspace("scrgb") self.save_load_buffer("jxlsave_buffer", "jxlload_buffer", scrgb, 120) # scrgb mode, no profile scrgb_no_profile = scrgb.copy() scrgb_no_profile.remove("icc-profile-data") self.save_load_buffer("jxlsave_buffer", "jxlload_buffer", scrgb_no_profile, 120) # 16-bit mode rgb16 = self.colour.colourspace("rgb16").copy() # remove the ICC profile: the RGB one will no longer be appropriate rgb16.remove("icc-profile-data") self.save_load_buffer("jxlsave_buffer", "jxlload_buffer", rgb16, 12000) # repeat for lossless mode self.save_load_buffer("jxlsave_buffer", "jxlload_buffer", self.colour, 0, lossless=True) self.save_load_buffer("jxlsave_buffer", "jxlload_buffer", no_profile, 0, lossless=True) self.save_load_buffer("jxlsave_buffer", "jxlload_buffer", scrgb, 0, lossless=True) self.save_load_buffer("jxlsave_buffer", "jxlload_buffer", scrgb_no_profile, 0, lossless=True) # lossy should be much smaller than lossless lossy = self.colour.jxlsave_buffer() lossless = self.colour.jxlsave_buffer(lossless=True) assert len(lossy) < len(lossless) / 5 @skip_if_no("gifsave") def test_gifsave(self): # Animated GIF round trip x1 = pyvips.Image.new_from_file(GIF_ANIM_FILE, n=-1) b1 = x1.gifsave_buffer() x2 = pyvips.Image.new_from_buffer(b1, "", n=-1) assert x1.width == x2.width assert x1.height == x2.height assert x1.get("n-pages") == x2.get("n-pages") assert x1.get("delay") == x2.get("delay") assert x1.get("page-height") == x2.get("page-height") # FIXME ... this requires cgif0.3 or later for fixed loop support # assert x1.get("loop") == x2.get("loop") # Interlaced write x1 = pyvips.Image.new_from_file(GIF_FILE, n=-1) b1 = x1.gifsave_buffer(interlace=False) b2 = x1.gifsave_buffer(interlace=True) # Interlaced GIFs are usually larger in file size # FIXME ... cgif v0.3 or later required for interlaced write. # If interlaced write is not supported b2 and b1 are expected to be # of the same file size. assert len(b2) >= len(b1) # Reducing dither will typically reduce file size (and quality) little_dither = self.colour.gifsave_buffer(dither=0.1, effort=1) large_dither = self.colour.gifsave_buffer(dither=0.9, effort=1) assert len(little_dither) < len(large_dither) # Reducing effort will typically increase file size (and reduce quality) # quantizr does not yet implement effort, so use >= little_effort = self.colour.gifsave_buffer(effort=1) large_effort = self.colour.gifsave_buffer(effort=10) assert len(little_effort) >= len(large_effort) # Reducing bitdepth will typically reduce file size (and reduce quality) bitdepth8 = self.colour.gifsave_buffer(bitdepth=8,effort=1) bitdepth7 = self.colour.gifsave_buffer(bitdepth=7,effort=1) assert len(bitdepth8) > len(bitdepth7) if have("webpload"): # Animated WebP to GIF x1 = pyvips.Image.new_from_file(WEBP_ANIMATED_FILE, n=-1) b1 = x1.gifsave_buffer() x2 = pyvips.Image.new_from_buffer(b1, "", n=-1) assert x1.width == x2.width assert x1.height == x2.height assert x1.get("n-pages") == x2.get("n-pages") assert x1.get("delay") == x2.get("delay") assert x1.get("page-height") == x2.get("page-height") assert x1.get("loop") == x2.get("loop") def test_fail_on(self): # csvload should spot trunc correctly target = pyvips.Target.new_to_memory() self.mono.write_to_target(target, ".csv") buf = target.get("blob") source = pyvips.Source.new_from_memory(buf) im = pyvips.Image.csvload_source(source) assert im.avg() > 0 # truncation should be OK by default buf_trunc = buf[:-100] source = pyvips.Source.new_from_memory(buf_trunc) im = pyvips.Image.csvload_source(source) assert im.avg() > 0 # set trunc should make it fail with pytest.raises(Exception) as e_info: im = pyvips.Image.csvload_source(source, fail_on="truncated") # this will now force parsing of the whole file, which should # trigger an error im.avg() > 0 # warn should fail too, since trunc implies warn with pytest.raises(Exception) as e_info: im = pyvips.Image.csvload_source(source, fail_on="warning") im.avg() > 0 if __name__ == '__main__': pytest.main() libvips-8.15.1/test/test-suite/test_histogram.py000066400000000000000000000064661454007373500217750ustar00rootroot00000000000000# vim: set fileencoding=utf-8 : import pytest import pyvips from helpers import JPEG_FILE class TestHistogram: def test_hist_cum(self): im = pyvips.Image.identity() sum = im.avg() * 256 cum = im.hist_cum() p = cum(255, 0) assert p[0] == sum def test_hist_equal(self): im = pyvips.Image.new_from_file(JPEG_FILE) im2 = im.hist_equal() assert im.width == im2.width assert im.height == im2.height assert im.avg() < im2.avg() assert im.deviate() < im2.deviate() def test_hist_ismonotonic(self): im = pyvips.Image.identity() assert im.hist_ismonotonic() def test_hist_local(self): im = pyvips.Image.new_from_file(JPEG_FILE) im2 = im.hist_local(10, 10) assert im.width == im2.width assert im.height == im2.height assert im.avg() < im2.avg() assert im.deviate() < im2.deviate() if pyvips.at_least_libvips(8, 5): im3 = im.hist_local(10, 10, max_slope=3) assert im.width == im3.width assert im.height == im3.height assert im3.deviate() < im2.deviate() def test_hist_match(self): im = pyvips.Image.identity() im2 = pyvips.Image.identity() matched = im.hist_match(im2) assert (im - matched).abs().max() == 0.0 def test_hist_norm(self): im = pyvips.Image.identity() im2 = im.hist_norm() assert (im - im2).abs().max() == 0.0 def test_hist_plot(self): im = pyvips.Image.identity() im2 = im.hist_plot() assert im2.width == 256 assert im2.height == 256 assert im2.format == pyvips.BandFormat.UCHAR assert im2.bands == 1 def test_hist_map(self): im = pyvips.Image.identity() im2 = im.maplut(im) assert (im - im2).abs().max() == 0.0 def test_percent(self): im = pyvips.Image.new_from_file(JPEG_FILE).extract_band(1) pc = im.percent(90) msk = im <= pc n_set = (msk.avg() * msk.width * msk.height) / 255.0 pc_set = 100 * n_set / (msk.width * msk.height) assert pytest.approx(pc_set, 0.5) == 90 def test_hist_entropy(self): im = pyvips.Image.new_from_file(JPEG_FILE).extract_band(1) ent = im.hist_find().hist_entropy() assert pytest.approx(ent, 0.01) == 6.67 def test_stdif(self): im = pyvips.Image.new_from_file(JPEG_FILE) im2 = im.stdif(10, 10) assert im.width == im2.width assert im.height == im2.height # new mean should be closer to target mean assert abs(im.avg() - 128) > abs(im2.avg() - 128) def test_case(self): # slice into two at 128, we should get 50% of pixels in each half x = pyvips.Image.grey(256, 256, uchar=True) index = pyvips.Image.switch([x < 128, x >= 128]) y = index.case([10, 20]) assert y.avg() == 15 # slice into four index = pyvips.Image.switch([ x < 64, x >= 64 and x < 128, x >= 128 and x < 192, x >= 192 ]) assert index.case([10, 20, 30, 40]).avg() == 25 # values over N should use the last value assert index.case([10, 20, 30]).avg() == 22.5 if __name__ == '__main__': pytest.main() libvips-8.15.1/test/test-suite/test_iofuncs.py000066400000000000000000000047551454007373500214450ustar00rootroot00000000000000# vim: set fileencoding=utf-8 : import pytest import pyvips import tempfile from helpers import temp_filename class TestIofuncs: tempdir = None @classmethod def setup_class(cls): cls.tempdir = tempfile.mkdtemp() def test_new_from_image(self): im = pyvips.Image.mask_ideal(100, 100, 0.5, reject=True, optical=True) im2 = im.new_from_image(12) assert im2.width == im.width assert im2.height == im.height assert im2.interpretation == im.interpretation assert im2.format == im.format assert im2.xres == im.xres assert im2.yres == im.yres assert im2.xoffset == im.xoffset assert im2.yoffset == im.yoffset assert im2.bands == 1 assert im2.avg() == 12 im2 = im.new_from_image([1, 2, 3]) assert im2.bands == 3 assert im2.avg() == 2 def test_new_from_memory(self): s = bytearray(200) im = pyvips.Image.new_from_memory(s, 20, 10, 1, 'uchar') assert im.width == 20 assert im.height == 10 assert im.format == 'uchar' assert im.bands == 1 assert im.avg() == 0 im += 10 assert im.avg() == 10 def test_get_fields(self): im = pyvips.Image.black(10, 10) fields = im.get_fields() # we might add more fields later assert len(fields) > 10 assert fields[0] == 'width' def test_write_to_memory(self): s = bytearray(200) im = pyvips.Image.new_from_memory(s, 20, 10, 1, 'uchar') t = im.write_to_memory() assert s == t def test_revalidate(self): filename = temp_filename(self.tempdir, '.v') im1 = pyvips.Image.black(10, 10) im1.write_to_file(filename) load1 = pyvips.Image.new_from_file(filename); assert load1.width == im1.width im2 = pyvips.Image.black(20, 20) im2.write_to_file(filename) # this will use the old, cached load load2 = pyvips.Image.new_from_file(filename); assert load2.width == im1.width # load again with "revalidate" and we should see the new image load2 = pyvips.Image.new_from_file(filename, revalidate=True); assert load2.width == im2.width # load once more without revalidate and we should see the cached # new image load2 = pyvips.Image.new_from_file(filename) assert load2.width == im2.width if __name__ == '__main__': pytest.main() libvips-8.15.1/test/test-suite/test_morphology.py000066400000000000000000000032421454007373500221640ustar00rootroot00000000000000# vim: set fileencoding=utf-8 : import pytest import pyvips class TestMorphology: def test_countlines(self): im = pyvips.Image.black(100, 100) im = im.draw_line(255, 0, 50, 100, 50) n_lines = im.countlines(pyvips.Direction.HORIZONTAL) assert n_lines == 1 def test_labelregions(self): im = pyvips.Image.black(100, 100) im = im.draw_circle(255, 50, 50, 25, fill=True) mask, opts = im.labelregions(segments=True) assert opts['segments'] == 3 assert mask.max() == 2 def test_erode(self): im = pyvips.Image.black(100, 100) im = im.draw_circle(255, 50, 50, 25, fill=True) im2 = im.erode([[128, 255, 128], [255, 255, 255], [128, 255, 128]]) assert im.width == im2.width assert im.height == im2.height assert im.bands == im2.bands assert im.avg() > im2.avg() def test_dilate(self): im = pyvips.Image.black(100, 100) im = im.draw_circle(255, 50, 50, 25, fill=True) im2 = im.dilate([[128, 255, 128], [255, 255, 255], [128, 255, 128]]) assert im.width == im2.width assert im.height == im2.height assert im.bands == im2.bands assert im2.avg() > im.avg() def test_rank(self): im = pyvips.Image.black(100, 100) im = im.draw_circle(255, 50, 50, 25, fill=True) im2 = im.rank(3, 3, 8) assert im.width == im2.width assert im.height == im2.height assert im.bands == im2.bands assert im2.avg() > im.avg() if __name__ == '__main__': pytest.main() libvips-8.15.1/test/test-suite/test_mosaicing.py000066400000000000000000000103631454007373500217400ustar00rootroot00000000000000# vim: set fileencoding=utf-8 : import pytest import pyvips from helpers import MOSAIC_FILES, MOSAIC_MARKS, MOSAIC_VERTICAL_MARKS class TestMosaicing: def test_lrmerge(self): left = pyvips.Image.new_from_file(MOSAIC_FILES[0]) right = pyvips.Image.new_from_file(MOSAIC_FILES[1]) join = left.merge(right, 'horizontal', 10 - left.width, 0) assert join.width == left.width + right.width - 10 assert join.height == max(left.height, right.height) assert join.bands == 1 def test_tbmerge(self): top = pyvips.Image.new_from_file(MOSAIC_FILES[0]) bottom = pyvips.Image.new_from_file(MOSAIC_FILES[2]) join = top.merge(bottom, 'vertical', 0, 10 - top.height) assert join.width == max(top.width, bottom.width) assert join.height == top.height + bottom.height - 10 assert join.bands == 1 def test_lrmosaic(self): left = pyvips.Image.new_from_file(MOSAIC_FILES[0]) right = pyvips.Image.new_from_file(MOSAIC_FILES[1]) join = left.mosaic(right, 'horizontal', left.width - 30, 0, 30, 0) assert join.width == 1014 assert join.height == 379 assert join.bands == 1 def test_tbmosaic(self): top = pyvips.Image.new_from_file(MOSAIC_FILES[0]) bottom = pyvips.Image.new_from_file(MOSAIC_FILES[2]) join = top.mosaic(bottom, 'vertical', 0, top.height - 30, 0, 30) assert join.width == 542 assert join.height == 688 assert join.bands == 1 def test_mosaic(self): # ported from https://github.com/libvips/nip2/tree/master/share/nip2/data/examples/1_point_mosaic mosaiced_image = None for i in range(0, len(MOSAIC_FILES), 2): files = MOSAIC_FILES[i:i + 2] marks = MOSAIC_MARKS[i:i + 2] im = pyvips.Image.new_from_file(files[0]) sec_im = pyvips.Image.new_from_file(files[1]) horizontal_part = im.mosaic(sec_im, pyvips.Direction.HORIZONTAL, marks[0][0], marks[0][1], marks[1][0], marks[1][1]) if mosaiced_image is None: mosaiced_image = horizontal_part else: vertical_marks = MOSAIC_VERTICAL_MARKS[i - 2:i] mosaiced_image = mosaiced_image.mosaic(horizontal_part, pyvips.Direction.VERTICAL, vertical_marks[1][0], vertical_marks[1][1], vertical_marks[0][0], vertical_marks[0][1]) # Uncomment to see output file #mosaiced_image.write_to_file('after.jpg') # hard to test much more than this assert mosaiced_image.width == 1005 assert mosaiced_image.height == 1295 assert mosaiced_image.interpretation == pyvips.Interpretation.B_W assert mosaiced_image.bands == 1 def test_globalbalance(self): mosaiced_image = None for i in range(0, len(MOSAIC_FILES), 2): files = MOSAIC_FILES[i:i + 2] marks = MOSAIC_MARKS[i:i + 2] im = pyvips.Image.new_from_file(files[0]) sec_im = pyvips.Image.new_from_file(files[1]) horizontal_part = im.mosaic(sec_im, pyvips.Direction.HORIZONTAL, marks[0][0], marks[0][1], marks[1][0], marks[1][1]) if mosaiced_image is None: mosaiced_image = horizontal_part else: vertical_marks = MOSAIC_VERTICAL_MARKS[i - 2:i] mosaiced_image = mosaiced_image.mosaic(horizontal_part, pyvips.Direction.VERTICAL, vertical_marks[1][0], vertical_marks[1][1], vertical_marks[0][0], vertical_marks[0][1]) mosaiced_image = mosaiced_image.globalbalance() # Uncomment to see output file #mosaiced_image.write_to_file('after.jpg') # hard to test much more than this assert mosaiced_image.width == 1005 assert mosaiced_image.height == 1295 assert mosaiced_image.interpretation == pyvips.Interpretation.B_W assert mosaiced_image.format == pyvips.BandFormat.FLOAT assert mosaiced_image.bands == 1 if __name__ == '__main__': pytest.main() libvips-8.15.1/test/test-suite/test_resample.py000066400000000000000000000250661454007373500216050ustar00rootroot00000000000000# vim: set fileencoding=utf-8 : import pytest import pyvips from helpers import JPEG_FILE, JPEG_FILE_XYB, OME_FILE, HEIC_FILE, TIF_FILE, \ all_formats, have, RGBA_FILE, RGBA_CORRECT_FILE, AVIF_FILE # Run a function expecting a complex image on a two-band image def run_cmplx(fn, image): if image.format == pyvips.BandFormat.FLOAT: new_format = pyvips.BandFormat.COMPLEX elif image.format == pyvips.BandFormat.DOUBLE: new_format = pyvips.BandFormat.DPCOMPLEX else: raise pyvips.Error("run_cmplx: not float or double") # tag as complex, run, revert tagging cmplx = image.copy(bands=1, format=new_format) cmplx_result = fn(cmplx) return cmplx_result.copy(bands=2, format=image.format) def to_polar(image): """Transform image coordinates to polar. The image is transformed so that it is wrapped around a point in the centre. Vertical straight lines become circles or segments of circles, horizontal straight lines become radial spokes. """ # xy image, zero in the centre, scaled to fit image to a circle xy = pyvips.Image.xyz(image.width, image.height) xy -= [image.width / 2.0, image.height / 2.0] scale = min(image.width, image.height) / float(image.width) xy *= 2.0 / scale # to polar, scale vertical axis to 360 degrees index = run_cmplx(lambda x: x.polar(), xy) index *= [1, image.height / 360.0] return image.mapim(index) def to_rectangular(image): """Transform image coordinates to rectangular. The image is transformed so that it is unwrapped from a point in the centre. Circles or segments of circles become vertical straight lines, radial lines become horizontal lines. """ # xy image, vertical scaled to 360 degrees xy = pyvips.Image.xyz(image.width, image.height) xy *= [1, 360.0 / image.height] # to rect, scale to image rect index = run_cmplx(lambda x: x.rect(), xy) scale = min(image.width, image.height) / float(image.width) index *= scale / 2.0 index += [image.width / 2.0, image.height / 2.0] return image.mapim(index) class TestResample: def test_affine(self): im = pyvips.Image.new_from_file(JPEG_FILE) # vsqbs is non-interpolatory, don't test this way for name in ["nearest", "bicubic", "bilinear", "nohalo", "lbb"]: x = im interpolate = pyvips.Interpolate.new(name) for i in range(4): x = x.affine([0, 1, 1, 0], interpolate=interpolate) assert (x - im).abs().max() == 0 def test_reduce(self): im = pyvips.Image.new_from_file(JPEG_FILE) # cast down to 0-127, the smallest range, so we aren't messed up by # clipping im = im.cast(pyvips.BandFormat.CHAR) for fac in [1, 1.1, 1.5, 1.999]: for fmt in all_formats: for kernel in ["nearest", "linear", "cubic", "lanczos2", "lanczos3"]: x = im.cast(fmt) r = x.reduce(fac, fac, kernel=kernel) d = abs(r.avg() - im.avg()) assert d < 2 # try constant images ... should not change the constant for const in [0, 1, 2, 254, 255]: im = (pyvips.Image.black(10, 10) + const).cast("uchar") for kernel in ["nearest", "linear", "cubic", "lanczos2", "lanczos3"]: # print "testing kernel =", kernel # print "testing const =", const shr = im.reduce(2, 2, kernel=kernel) d = abs(shr.avg() - im.avg()) assert d == 0 def test_resize(self): im = pyvips.Image.new_from_file(JPEG_FILE) im2 = im.resize(0.25) # in py3, round() does not round to nearest in the obvious way, so we # have to do it by hand assert im2.width == int(im.width / 4.0 + 0.5) assert im2.height == int(im.height / 4.0 + 0.5) # test geometry rounding corner case im = pyvips.Image.black(100, 1) x = im.resize(0.5) assert x.width == 50 assert x.height == 1 # test whether we use double-precision calculations in reduce{h,v} im = pyvips.Image.black(1600, 1000) x = im.resize(10.0 / im.width) assert x.width == 10 assert x.height == 6 # test round-up option of shrink im = pyvips.Image.black(2049 - 2, 2047 - 2, bands=3) im = im.embed(1, 1, 2049, 2047, extend=pyvips.Extend.BACKGROUND, background=[255, 0, 0]) for scale in [8, 9.4, 16]: x = im.resize(1 / scale, vscale=1 / scale) for point in ([(round(x.width / 2), 0), (x.width - 1, round(x.height / 2)), (round(x.width / 2), x.height - 1), (0, round(x.height / 2))]): y = x(*point)[0] assert y != 0 def test_shrink(self): im = pyvips.Image.new_from_file(JPEG_FILE) im2 = im.shrink(4, 4) # in py3, round() does not round to nearest in the obvious way, so we # have to do it by hand assert im2.width == int(im.width / 4.0 + 0.5) assert im2.height == int(im.height / 4.0 + 0.5) assert abs(im.avg() - im2.avg()) < 1 im2 = im.shrink(2.5, 2.5) assert im2.width == int(im.width / 2.5 + 0.5) assert im2.height == int(im.height / 2.5 + 0.5) assert abs(im.avg() - im2.avg()) < 1 @pytest.mark.skipif(not pyvips.at_least_libvips(8, 5), reason="requires libvips >= 8.5") def test_thumbnail(self): im = pyvips.Image.thumbnail(JPEG_FILE, 100) assert im.height == 100 assert im.bands == 3 assert im.bands == 3 # the average shouldn't move too much im_orig = pyvips.Image.new_from_file(JPEG_FILE) assert abs(im_orig.avg() - im.avg()) < 1 # make sure we always get the right width for height in range(440, 1, -13): im = pyvips.Image.thumbnail(JPEG_FILE, height) assert im.height == height # should fit one of width or height im = pyvips.Image.thumbnail(JPEG_FILE, 100, height=300) assert im.width == 100 assert im.height != 300 im = pyvips.Image.thumbnail(JPEG_FILE, 300, height=100) assert im.width != 300 assert im.height == 100 # with @crop, should fit both width and height im = pyvips.Image.thumbnail(JPEG_FILE, 100, height=300, crop=True) assert im.width == 100 assert im.height == 300 im1 = pyvips.Image.thumbnail(JPEG_FILE, 100) with open(JPEG_FILE, 'rb') as f: buf = f.read() im2 = pyvips.Image.thumbnail_buffer(buf, 100) assert abs(im1.avg() - im2.avg()) < 1 # should be able to thumbnail many-page tiff im = pyvips.Image.thumbnail(OME_FILE, 100) assert im.width == 100 assert im.height == 38 # should be able to thumbnail individual pages from many-page tiff im1 = pyvips.Image.thumbnail(OME_FILE + "[page=0]", 100) assert im1.width == 100 assert im1.height == 38 im2 = pyvips.Image.thumbnail(OME_FILE + "[page=1]", 100) assert im2.width == 100 assert im2.height == 38 assert (im1 - im2).abs().max() != 0 # should be able to thumbnail entire many-page tiff as a toilet-roll # image im = pyvips.Image.thumbnail(OME_FILE + "[n=-1]", 100) assert im.width == 100 assert im.height == 570 # should be able to thumbnail a single-page tiff in a buffer im1 = pyvips.Image.thumbnail(TIF_FILE, 100) with open(TIF_FILE, 'rb') as f: buf = f.read() im2 = pyvips.Image.thumbnail_buffer(buf, 100) assert abs(im1.avg() - im2.avg()) < 1 # linear shrink should work on rgba images im1 = pyvips.Image.thumbnail(RGBA_FILE, 64, linear=True) im2 = pyvips.Image.new_from_file(RGBA_CORRECT_FILE) assert abs(im1.flatten(background=255).avg() - im2.avg()) < 1 if have("heifload"): # this image is orientation 6 ... thumbnail should flip it im = pyvips.Image.new_from_file(AVIF_FILE) thumb = pyvips.Image.thumbnail(AVIF_FILE, 100) # thumb should be portrait assert thumb.width < thumb.height assert thumb.height == 100 @pytest.mark.skipif(not pyvips.at_least_libvips(8, 5), reason="requires libvips >= 8.5") def test_thumbnail_icc(self): im = pyvips.Image.thumbnail(JPEG_FILE_XYB, 442, export_profile="srgb", intent="perceptual") assert im.width == 290 assert im.height == 442 assert im.bands == 3 # the colour distance should not deviate too much # (i.e. the embedded profile should not be ignored) im_orig = pyvips.Image.new_from_file(JPEG_FILE) assert im_orig.de00(im).max() < 11 def test_similarity(self): im = pyvips.Image.new_from_file(JPEG_FILE) im2 = im.similarity(angle=90) im3 = im.affine([0, -1, 1, 0]) # rounding in calculating the affine transform from the angle stops # this being exactly true assert (im2 - im3).abs().max() < 50 def test_similarity_scale(self): im = pyvips.Image.new_from_file(JPEG_FILE) im2 = im.similarity(scale=2) im3 = im.affine([2, 0, 0, 2]) assert (im2 - im3).abs().max() == 0 # added in 8.7 def test_rotate(self): if have("rotate"): im = pyvips.Image.new_from_file(JPEG_FILE) im2 = im.rotate(90) im3 = im.affine([0, -1, 1, 0]) # rounding in calculating the affine transform from the angle stops # this being exactly true assert (im2 - im3).abs().max() < 50 def test_mapim(self): im = pyvips.Image.new_from_file(JPEG_FILE) p = to_polar(im) r = to_rectangular(p) # the left edge (which is squashed to the origin) will be badly # distorted, but the rest should not be too bad a = r.crop(50, 0, im.width - 50, im.height).gaussblur(2) b = im.crop(50, 0, im.width - 50, im.height).gaussblur(2) assert (a - b).abs().max() < 50 # this was a bug at one point, strangely, if executed with debug # enabled mp = pyvips.Image.xyz(im.width, im.height) interp = pyvips.Interpolate.new('bicubic') assert im.mapim(mp, interpolate=interp).avg() == im.avg() if __name__ == '__main__': pytest.main() libvips-8.15.1/test/test_cli.sh000077500000000000000000000036611454007373500164200ustar00rootroot00000000000000#!/bin/sh # this test is also in test_resample.py (though much smaller and neater) ... # keep this test to exercise the cli interface # set -x . ./variables.sh test_rotate() { im=$1 inter=$2 printf "testing $inter ... " # 90 degree clockwise rotate trn="0 1 1 0" $vips affine $im $tmp/t1.v "$trn" --interpolate $inter $vips affine $tmp/t1.v $tmp/t2.v "$trn" --interpolate $inter $vips affine $tmp/t2.v $tmp/t1.v "$trn" --interpolate $inter $vips affine $tmp/t1.v $tmp/t2.v "$trn" --interpolate $inter test_difference $im $tmp/t2.v 1 echo "ok" } # vsqbs is non-interpolatory, don't test this way echo "testing with $(basename $image)" for i in nearest bicubic bilinear nohalo lbb; do test_rotate $image $i done test_size() { to_test=$1 correct_width=$2 correct_height=$3 width=$($vipsheader -f width $to_test) height=$($vipsheader -f height $to_test) if [ $width -ne $correct_width ]; then echo width is $width, not $correct_width exit 1 fi if [ $height -ne $correct_height ]; then echo height is $height, not $correct_height exit 1 fi } test_thumbnail() { geo=$1 correct_width=$2 correct_height=$3 printf "testing thumbnail -s $geo ... " $vipsthumbnail $image -s "$geo" -o $tmp/t1.jpg test_size $tmp/t1.jpg $correct_width $correct_height echo "ok" } test_thumbnail 100 66 100 test_thumbnail 100x100 66 100 test_thumbnail x100 66 100 test_thumbnail "100x100<" 290 442 test_thumbnail "2000<" 1312 2000 test_thumbnail "100x100>" 66 100 test_thumbnail "2000>" 290 442 # test thumbnail to and from pipes echo -n "testing thumbnail of stdin / stdout ... " $vipsthumbnail stdin -s 100 -o $tmp/t1.jpg < $image test_size $tmp/t1.jpg 66 100 cat $image | $vipsthumbnail stdin -s 100 -o $tmp/t1.jpg test_size $tmp/t1.jpg 66 100 cat $image | $vipsthumbnail stdin -s 100 -o .jpg > $tmp/t1.jpg test_size $tmp/t1.jpg 66 100 cat $image | $vipsthumbnail stdin -s 100 -o .jpg | cat > $tmp/t1.jpg echo ok test_size $tmp/t1.jpg 66 100 libvips-8.15.1/test/test_connections.c000066400000000000000000000064771454007373500200100ustar00rootroot00000000000000/* Test stream*u. */ #include #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #include #include typedef struct _MyInput { const char *filename; unsigned char *contents; size_t length; size_t read_position; } MyInput; typedef struct _MyOutput { const char *filename; int fd; } MyOutput; static gint64 read_cb(VipsSourceCustom *source_custom, void *buffer, gint64 length, MyInput *my_input) { gint64 bytes_read = VIPS_MIN(length, my_input->length - my_input->read_position); /* printf("read_cb: buffer = 0x%p, length = %zd\n", buffer, length); */ memcpy(buffer, my_input->contents + my_input->read_position, bytes_read); my_input->read_position += bytes_read; return bytes_read; } static gint64 seek_cb(VipsSourceCustom *source_custom, gint64 offset, int whence, MyInput *my_input) { gint64 new_pos; /* printf("seek_cb: offset = %zd, whence = %d\n", offset, whence); */ switch (whence) { case SEEK_SET: new_pos = offset; break; case SEEK_CUR: new_pos = my_input->read_position + offset; break; case SEEK_END: new_pos = my_input->length + offset; break; default: vips_error("demo", "%s", "bad 'whence'"); return -1; } my_input->read_position = VIPS_CLIP(0, new_pos, my_input->length); return my_input->read_position; } static gint64 write_cb(VipsTargetCustom *target_custom, const void *data, gint64 length, MyOutput *my_output) { gint64 bytes_written; /* printf("write_cb: data = 0x%p, length = %zd\n", data, length); */ bytes_written = write(my_output->fd, data, length); return bytes_written; } static void finish_cb(VipsTargetCustom *target_custom, MyOutput *my_output) { /* printf("finish_cb:\n"); */ close(my_output->fd); my_output->fd = -1; } int main(int argc, char **argv) { MyInput my_input; MyOutput my_output; VipsSourceCustom *source_custom; VipsTargetCustom *target_custom; VipsImage *image; if (VIPS_INIT(argv[0])) return -1; if (argc != 3) vips_error_exit("usage: %s in-file out-file.png", argv[0]); my_input.filename = argv[1]; my_input.contents = NULL; my_input.length = 0; my_input.read_position = 0; if (!g_file_get_contents(my_input.filename, (char **) &my_input.contents, &my_input.length, NULL)) vips_error_exit("unable to load from %s", my_input.filename); source_custom = vips_source_custom_new(); g_signal_connect(source_custom, "seek", G_CALLBACK(seek_cb), &my_input); g_signal_connect(source_custom, "read", G_CALLBACK(read_cb), &my_input); if (!(image = vips_image_new_from_source( VIPS_SOURCE(source_custom), "", "access", VIPS_ACCESS_SEQUENTIAL, NULL))) vips_error_exit(NULL); my_output.filename = argv[2]; my_output.fd = -1; if ((my_output.fd = vips__open(my_output.filename, O_WRONLY | O_CREAT | O_TRUNC, 0644)) == -1) vips_error_exit("unable to save to %s", my_output.filename); target_custom = vips_target_custom_new(); g_signal_connect(target_custom, "write", G_CALLBACK(write_cb), &my_output); g_signal_connect(target_custom, "finish", G_CALLBACK(finish_cb), &my_output); if (vips_image_write_to_target(image, ".png", VIPS_TARGET(target_custom), NULL)) vips_error_exit(NULL); VIPS_UNREF(image); VIPS_UNREF(source_custom); VIPS_UNREF(target_custom); g_free(my_input.contents); return 0; } libvips-8.15.1/test/test_connections.sh000077500000000000000000000003741454007373500201710ustar00rootroot00000000000000#!/bin/sh # test load and save via custom connection # set -x set -e . ./variables.sh if test_supported jpegload_source; then ./test_connections $image $tmp/x.png # test max difference < 10 test_difference $image $tmp/x.png 10 else exit 77 fi libvips-8.15.1/test/test_descriptors.c000066400000000000000000000074051454007373500200170ustar00rootroot00000000000000/* Read an image and check that file handles are being closed on minimise. * * This will only work on linux: we signal success and do nothing if * /proc/self/fd does not exist. */ #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #define _GNU_SOURCE #include #include /** * get_open_files: * * Get a list of open files for this process. * * Returns (transfer full) (nullable): a new #GSList, or %NULL */ static GSList * get_open_files() { #ifdef G_OS_WIN32 /* realpath() and /proc/self/fd is not available on Windows. */ return NULL; #else GSList *list = NULL; GDir *dir; const char *name; if (!(dir = g_dir_open("/proc/self/fd", 0, NULL))) return NULL; while ((name = g_dir_read_name(dir))) { char *fullname = g_build_filename("/proc/self/fd", name, NULL); list = g_slist_prepend(list, realpath(fullname, NULL)); g_free(fullname); } g_dir_close(dir); return list; #endif } /** * fd_check: * @stage: the originating stage for the error message * @fds: a #GSList of file descriptors to check against * * Check for a leak by comparing the currently open files for this * process with the file descriptors in @fds. If there's a leak, * print an error message and return %FALSE. * * See also: get_open_files(). * * Returns: %TRUE if there are no leaks; %FALSE otherwise */ static gboolean fd_check(const char *stage, GSList *fds) { GSList *unique_list = NULL, *list, *iter; list = get_open_files(); for (iter = list; iter; iter = iter->next) if (!g_slist_find_custom(fds, iter->data, (GCompareFunc) g_strcmp0)) unique_list = g_slist_prepend(unique_list, iter->data); if (unique_list == NULL) { g_slist_free_full(list, g_free); return TRUE; } fprintf(stderr, "%s: file descriptors not closed after %s:\n", vips_get_prgname(), stage); for (iter = unique_list; iter; iter = iter->next) fprintf(stderr, "%s\n", (char *) iter->data); g_slist_free(unique_list); g_slist_free_full(list, g_free); return FALSE; } int main(int argc, char **argv) { VipsSource *source; VipsImage *image, *x; GSList *list; double average; if (VIPS_INIT(argv[0])) vips_error_exit("unable to start"); if (argc != 2) vips_error_exit("usage: %s test-image", argv[0]); list = get_open_files(); if (list == NULL) /* Probably not *nix, skip test with return code 77. */ return 77; /* This is usually a list of 4 files. stdout / stdin / stderr plus one * more made for us by glib, I think, doing what I don't know. */ /* Opening an image should read the header, then close the fd. */ printf("** rand open ..\n"); if (!(source = vips_source_new_from_file(argv[1]))) goto error; if (!(image = vips_image_new_from_source(source, "", "access", VIPS_ACCESS_RANDOM, NULL))) goto error; if (!fd_check("header read", list)) goto error; /* We should be able to read a chunk near the top, then have the fd * closed again. */ printf("** crop1, avg ..\n"); if (vips_crop(image, &x, 0, 0, image->Xsize, 10, NULL) || vips_avg(x, &average, NULL)) goto error; g_object_unref(x); if (!fd_check("first read", list)) goto error; /* We should be able to read again, a little further down, and have * the input restarted and closed again. */ printf("** crop2, avg ..\n"); if (vips_crop(image, &x, 0, 20, image->Xsize, 10, NULL) || vips_avg(x, &average, NULL)) goto error; g_object_unref(x); if (!fd_check("second read", list)) goto error; /* Clean up, and we should still just have three open. */ printf("** unref ..\n"); g_object_unref(image); g_object_unref(source); printf("** shutdown ..\n"); vips_shutdown(); if (!fd_check("shutdown", list)) goto error; g_slist_free_full(list, g_free); return 0; error: g_slist_free_full(list, g_free); return 1; } libvips-8.15.1/test/test_descriptors.sh000077500000000000000000000011341454007373500202030ustar00rootroot00000000000000#!/bin/sh # test the various restartable loaders # gif, webp and ppm use streams, but they mmap the input, so you can't close() the # fd on minimise # set -x set -e . ./variables.sh if test_supported jpegload_source; then ./test_descriptors $image fi if test_supported pngload_source; then ./test_descriptors $test_images/sample.png fi if test_supported tiffload_source; then ./test_descriptors $test_images/sample.tif fi if test_supported radload_source; then ./test_descriptors $test_images/sample.hdr fi if test_supported svgload_source; then ./test_descriptors $test_images/logo.svg fi libvips-8.15.1/test/test_formats.sh000077500000000000000000000114721454007373500173230ustar00rootroot00000000000000#!/bin/sh # this has now been mostly superseded by test_foreign.py ... keep this around # as a test of the command-line interface # set -x set -e . ./variables.sh # poppler / pdfload reference image poppler=$test_images/blankpage.pdf poppler_ref=$test_images/blankpage.pdf.png # giflib / gifload reference image giflib=$test_images/trans-x.gif giflib_ref=$test_images/trans-x.png # the matlab image and reference image matlab=$test_images/sample.mat matlab_ref=$test_images/sample.png # make a mono image $vips extract_band $image $tmp/mono.v 1 mono=$tmp/mono.v # make a radiance image $vips float2rad $image $tmp/rad.v rad=$tmp/rad.v # make a cmyk image $vips bandjoin "$image $tmp/mono.v" $tmp/t1.v $vips copy $tmp/t1.v $tmp/cmyk.v --interpretation cmyk cmyk=$tmp/cmyk.v # save to t1.format, load as back.v save_load() { in=$1 format=$2 mode=$3 if ! $vips copy $in $tmp/t1.$format$mode ; then echo "write to $out failed" exit 1 fi if ! $vips copy $tmp/t1.$format $tmp/back.v ; then echo "read from $tmp/t1.format failed" echo " (was written by $vips copy $in $tmp/t1.$format$mode)" exit 1 fi } # save to the named file in tmp, convert back to vips again, subtract, look # for max difference less than a threshold test_format() { in=$1 format=$2 threshold=$3 mode=$4 printf "testing $(basename $in) $format$mode ... " save_load $in $format $mode test_difference $in $tmp/back.v $threshold echo "ok" } # as above, but hdr format # this is a coded format, so we need to rad2float before we can test for # differences test_rad() { in=$1 printf "testing $(basename $in) hdr ... " save_load $in hdr $vips rad2float $in $tmp/before.v $vips rad2float $tmp/back.v $tmp/after.v test_difference $tmp/before.v $tmp/after.v 0 echo "ok" } # as above, but raw format # we can't use suffix stuff to pick the load/save test_raw() { in=$1 printf "testing $(basename $in) raw ... " $vips copy $in $tmp/before.v width=$($vipsheader -f width $tmp/before.v) height=$($vipsheader -f height $tmp/before.v) bands=$($vipsheader -f bands $tmp/before.v) $vips rawsave $tmp/before.v $tmp/raw $vips rawload $tmp/raw $tmp/after.v $width $height $bands test_difference $tmp/before.v $tmp/after.v 0 echo "ok" } # a format for which we only have a load (eg. matlab) # pass in a reference file as well and compare to that test_loader() { ref=$1 in=$2 format=$3 thresh=$4 printf "testing $(basename $in) $format ... " $vips copy $ref $tmp/before.v $vips copy $in $tmp/after.v test_difference $tmp/before.v $tmp/after.v $thresh echo "ok" } # a format for which we only have a saver (eg. dzsave) # just run the operation and check exit status test_saver() { oper=$1 in=$2 suffix=$3 printf "testing $oper $(basename $in) $suffix ... " rm -rf $tmp/savertest* cmd="$vips $oper $in $tmp/savertest$suffix" if ! $cmd ; then echo "error executing:" echo " $cmd" exit 1 fi echo "ok" } test_format $image v 0 if test_supported tiffload; then test_format $image tif 0 test_format $image tif 90 [compression=jpeg] test_format $image tif 0 [compression=deflate] test_format $image tif 0 [compression=packbits] test_format $image tif 90 [compression=jpeg,tile] test_format $image tif 90 [compression=jpeg,tile,pyramid] fi if test_supported pngload; then test_format $image png 0 test_format $image png 0 [compression=9,interlace=1] test_format $image png 90 [palette,colours=256,Q=100,dither=0,interlace=1] fi if test_supported jpegload; then test_format $image jpg 90 fi if test_supported webpload; then test_format $image webp 90 fi test_format $image ppm 0 test_format $image pfm 0 if test_supported fitsload; then test_format $image fits 0 fi # csv can only do mono test_format $mono csv 0 # cmyk jpg is a special path if test_supported jpegload; then test_format $cmyk jpg 90 fi if test_supported tiffload; then test_format $cmyk tif 0 test_format $cmyk tif 90 [compression=jpeg] test_format $cmyk tif 90 [compression=jpeg,tile] test_format $cmyk tif 90 [compression=jpeg,tile,pyramid] fi test_rad $rad test_raw $mono test_raw $image if test_supported pdfload; then test_loader $poppler_ref $poppler pdfload 0 fi # don't test SVG --- the output varies too much between librsvg versions if test_supported gifload; then test_loader $giflib_ref $giflib gifload 0 fi if test_supported matload; then test_loader $matlab_ref $matlab matlab 0 # test blocked and untrusted printf "testing VIPS_BLOCK_UNTRUSTED with matio ... " export VIPS_BLOCK_UNTRUSTED=1 if $vips matload $matlab $tmp/block.png; then echo "failed to block matload" exit 1 fi echo "ok" unset VIPS_BLOCK_UNTRUSTED fi if test_supported dzsave; then test_saver dzsave $image .zip test_saver copy $image .dz test_saver copy $image .dz[container=zip] fi if test_supported jp2kload; then test_format $image jp2 20 test_format $image jp2 0 [lossless] fi libvips-8.15.1/test/test_keep.sh000077500000000000000000000060221454007373500165670ustar00rootroot00000000000000#!/bin/sh # Prepare: # 0. Check test-suite/images/sample.jpg includes XMP and ICC profile # 1. Read image with XMP and ICC profile # 2. Save it with no options to keep_all.{jpg,png,webp,avif} # 3. Save it with --keep=none to keep_none.{jpg,png,webp,avif} # 4. Save it with --keep=icc to keep_icc.{jpg,png,webp,avif} # 5. Save it with --keep=none --profile=profile.icc to keep_custom_icc.{jpg,png,webp,avif} # # Tests: # Assert "keep_all.jpg" keep XMP and ICC # Assert "keep_none.jpg" strip XMP and ICC # Assert "keep_icc.jpg" keep original ICC profile # Assert "keep_custom_icc.jpg" keep custom ICC profile # set -x set -e . ./variables.sh srgb="$top_srcdir/libvips/colour/profiles/sRGB.icm" keep_all="$tmp/keep_all" keep_none="$tmp/keep_none" keep_icc="$tmp/keep_icc" keep_custom_icc="$tmp/keep_custom_icc" iccp_base64() { $vipsheader -f "icc-profile-data" "$1" } same_icc() { [ "$(iccp_base64 $1)" = "$(iccp_base64 $2)" ] && echo 1 || echo 0 } # returns 0 if xmp-data is missing ch_xmp() { $vipsheader -f "xmp-data" $1 > /dev/null 2>&1 && echo 1 || echo 0 } # returns 0 if icc-profile-data is missing ch_iccp() { $vipsheader -f "icc-profile-data" $1 > /dev/null 2>&1 && echo 1 || echo 0 } # Check original image contains XMP and ICC [ $(ch_xmp "$image") -eq 0 ] && exit 1 [ $(ch_iccp "$image") -eq 0 ] && exit 2 echo "$tmp" for saver in jpegsave webpsave pngsave tiffsave heifsave; do if ! test_supported $saver; then continue; fi f=${saver%"save"} # Prefer AVIF over HEIC if [ "$f" = "heif" ]; then f="avif"; fi # Create test images for format # echo "----- keep all" $vips $saver "$image" "$keep_all.$f" # echo "----- keep none" $vips $saver "$image" "$keep_none.$f" --keep=none # echo "----- keep icc" $vips $saver "$image" "$keep_icc.$f" --keep=icc # echo "----- custom ICC profile" $vips $saver "$image" "$keep_custom_icc.$f" --keep=none --profile=$srgb echo -n "Check keep_all.$f keep XMP: " [ $(ch_xmp "$keep_all.$f") -eq 0 ] && echo "FAIL" && exit 2 || echo "OK" echo -n "Check keep_all.$f keep ICC: " [ $(ch_iccp "$keep_all.$f") -eq 0 ] && echo "FAIL" && exit 3 || echo "OK" echo -n "Check keep_all.$f keep original ICC: " [ $(same_icc "$keep_all.$f" "$image") -eq 0 ] && echo "FAIL" && exit 4 || echo "OK" echo -n "Check keep_none.$f strip XMP: " [ $(ch_xmp "$keep_none.$f") -ne 0 ] && echo "FAIL" && exit 5 || echo "OK" echo -n "Check keep_none.$f strip ICC: " [ $(ch_iccp "$keep_none.$f") -ne 0 ] && echo "FAIL" && exit 6 || echo "OK" echo -n "Check keep_icc.$f strip XMP: " [ $(ch_xmp "$keep_icc.$f") -ne 0 ] && echo "FAIL" && exit 7 || echo "OK" echo -n "Check keep_icc.$f keep ICC: " [ $(ch_iccp "$keep_icc.$f") -eq 0 ] && echo "FAIL" && exit 8 || echo "OK" echo -n "Check keep_icc.$f keep original ICC: " [ $(same_icc "$keep_icc.$f" "$image") -eq 0 ] && echo "FAIL" && exit 9 || echo "OK" echo -n "Check keep_custom_icc.$f differ from original ICC: " [ $(same_icc "$keep_custom_icc.$f" "$image") -eq 1 ] && echo "FAIL" && exit 10 || echo "OK" done exit 0 libvips-8.15.1/test/test_seq.sh000077500000000000000000000021761454007373500164410ustar00rootroot00000000000000#!/bin/sh # set -x . ./variables.sh # make a large PNG, roughly the size of Chicago.png printf "building huge test PNG image ... " $vips replicate $image $tmp/huge.png 30 5 echo "ok" huge=$tmp/huge.png printf "testing vipsthumbnail ... " rm -f $tmp/x.png $vipsthumbnail $huge -o $tmp/x.png if ! $vipsheader $tmp/x.png > /dev/null 2>&1 ; then echo "vipsthumbnail failed in basic mode" exit 1 fi echo "ok" if [ ! -d $tmp/readonly ] ; then mkdir $tmp/readonly chmod ugo-wx $tmp/readonly fi export TMPDIR=$tmp/readonly printf "testing vipsthumbnail does not make temps ... " rm -f $tmp/x.png $vipsthumbnail $huge -o $tmp/x.png if ! $vipsheader $tmp/x.png > /dev/null 2>&1 ; then echo "vipsthumbnail made a temp" exit 1 fi echo "ok" printf "testing shrink does not make temps ... " rm -f $tmp/x.png $vips shrink $huge $tmp/x.png 230 230 if ! $vipsheader $tmp/x.png > /dev/null 2>&1 ; then echo "shrink made a temp" exit 1 fi echo "ok" printf "testing reduce does not make temps ... " rm -f $tmp/x.png $vips reduce $huge $tmp/x.png 3 3 if ! $vipsheader $tmp/x.png > /dev/null 2>&1 ; then echo "reduce made a temp" exit 1 fi echo "ok" libvips-8.15.1/test/test_stall.sh000077500000000000000000000004141454007373500167610ustar00rootroot00000000000000#!/bin/sh # set -x set -e . ./variables.sh if test_supported tiffload; then VIPS_STALL=1 $vips copy $image $tmp/x.tif cat > $tmp/mask.con < 0" | bc) -eq 1 ]; then break fi done if [ $(echo "$max > 0" | bc) -eq 1 ]; then break fi done if [ $(echo "$max > 0" | bc) -eq 1 ]; then echo error, max == $max exit 1 else echo all benchmark threading tests passed fi # setting VIPS_MAX_THREADS low should force a small thread limit echo -n "checking threadset size limit ... " VIPS_MAX_THREADS=5 VIPS_CONCURRENCY=3 $vips copy $image x.v || exit_code=$? if [ $exit_code -ne 0 ]; then echo FAILED exit 1 fi echo ok libvips-8.15.1/test/test_thumbnail.sh000077500000000000000000000032411454007373500176260ustar00rootroot00000000000000#!/bin/sh # resize a 1000x1000 image to every size in [100,1000], check for black # see https://github.com/libvips/libvips/issues/131 # set -x . ./variables.sh # make a 1000x1000 mono test image ... add a bit so the image should not # contain any zeros, helps to spot missing tiles and bad pixels echo building test image ... $vips extract_band $image $tmp/t1.v 1 $vips linear $tmp/t1.v $tmp/t2.v 1 20 --uchar $vips replicate $tmp/t2.v $tmp/t1.v 4 4 $vips crop $tmp/t1.v $tmp/t2.v 10 10 1000 1000 # is a difference beyond a threshold? return 0 (meaning all ok) or 1 (meaning # error, or outside threshold) break_threshold() { diff=$1 threshold=$2 return $(echo "$diff > $threshold" | bc -l) } # run the test with VIPS_STALL enabled to stress the seq system export VIPS_STALL=1 size=1000 while [ $size -gt 99 ]; do printf "testing size to $size ... " $vipsthumbnail $tmp/t2.v -o $tmp/t1.v --size $size if [ $($vipsheader -f width $tmp/t1.v) -ne $size ]; then echo $tmp/t1.v failed -- bad size echo output width is $($vipsheader -f width $tmp/t1.v) exit fi if [ $($vipsheader -f height $tmp/t1.v) -ne $size ]; then echo $tmp/t1.v failed -- bad size echo output height is $($vipsheader -f width $tmp/t1.v) exit fi $vips project $tmp/t1.v $tmp/cols.v $tmp/rows.v min=$($vips min $tmp/cols.v) if break_threshold $min 0; then echo $tmp/t1.v failed -- has a black column exit fi min=$($vips min $tmp/rows.v) if break_threshold $min 0; then echo $tmp/t1.v failed -- has a black row exit fi min=$($vips min $tmp/t1.v) if break_threshold $min 0; then echo $tmp/t1.v failed -- has black pixels exit fi echo ok size=$(($size-1)) done libvips-8.15.1/test/test_timeout_webpsave.c000066400000000000000000000016171454007373500210370ustar00rootroot00000000000000#include #define TIMEOUT_SECONDS 2 static void eval_callback(VipsImage *image, VipsProgress *progress, gboolean *is_killed) { if (progress->run >= TIMEOUT_SECONDS) { *is_killed = TRUE; vips_image_set_kill(image, TRUE); } } int main(int argc, char **argv) { VipsImage *im; void *buf; size_t len; gboolean is_killed = FALSE; if (VIPS_INIT(argv[0])) vips_error_exit(NULL); if (!vips_type_find("VipsOperation", "webpsave")) /* webpsave not available, skip test with return code 77. */ return 77; if (vips_black(&im, 16383, 16383, NULL)) vips_error_exit(NULL); vips_image_set_progress(im, TRUE); g_signal_connect(im, "eval", G_CALLBACK(eval_callback), &is_killed); buf = NULL; if (vips_webpsave_buffer(im, &buf, &len, NULL)) printf("error return from vips_webpsave_buffer()\n"); g_object_unref(im); if (buf) g_free(buf); g_assert(is_killed); return 0; } libvips-8.15.1/test/variables.sh.in000066400000000000000000000025231454007373500171600ustar00rootroot00000000000000top_srcdir=@abs_top_srcdir@ top_builddir=@abs_top_builddir@ PYTHON=@PYTHON@ # we need a different tmp for each script since make can run tests in parallel tmp=$top_builddir/test/tmp-$$ test_images=$top_srcdir/test/test-suite/images image=$test_images/sample.jpg mkdir -p $tmp vips=$top_builddir/tools/vips vipsthumbnail=$top_builddir/tools/vipsthumbnail vipsheader=$top_builddir/tools/vipsheader # we need bc to use '.' for a decimal separator export LC_NUMERIC=C # raspbian sets this too, annoyingly unset LC_ALL # test for file format supported test_supported() { format=$1 if $vips $format > /dev/null 2>&1; then result=0 else echo "support for $format not configured, skipping test" result=1 fi return $result } # is a difference beyond a threshold? return 0 (meaning all ok) or 1 (meaning # error, or outside threshold) # # use bc since bash does not support fp math break_threshold() { diff=$1 threshold=$2 if ! command -v bc >/dev/null; then exit 77 fi return $(echo "$diff <= $threshold" | bc -l) } # subtract, look for max difference less than a threshold test_difference() { before=$1 after=$2 threshold=$3 $vips subtract $before $after $tmp/difference.v $vips abs $tmp/difference.v $tmp/abs.v dif=$($vips max $tmp/abs.v) if break_threshold $dif $threshold; then echo "save / load difference is $dif" exit 1 fi } libvips-8.15.1/tools/000077500000000000000000000000001454007373500144265ustar00rootroot00000000000000libvips-8.15.1/tools/meson.build000066400000000000000000000005311454007373500165670ustar00rootroot00000000000000tools = [ 'vips', 'vipsedit', 'vipsthumbnail', 'vipsheader' ] foreach tool : tools executable(tool, tool + '.c', dependencies: libvips_dep, install: true ) endforeach install_data( 'vipsprofile', install_dir: get_option('prefix') / get_option('bindir'), install_mode: 'rwxr-xr-x', ) libvips-8.15.1/tools/vips.c000066400000000000000000000517421454007373500155640ustar00rootroot00000000000000/* VIPS universal main program. * * J. Cupitt, 8/4/93. * 12/5/06 * - use GOption. g_*_prgname() * 16/7/06 * - hmm, was broken for function name as argv1 case * 11/7/06 * - add "all" option to -l * 14/7/06 * - ignore "--" arguments. * 2/9/06 * - do less init ... im_init_world() does more now * 18/8/06 * - use IM_EXEEXT * 16/10/06 * - add --version * 17/10/06 * - add --swig * - cleanups * - remove --swig again, sigh * - add throw() decls to C++ to help SWIG * 14/1/07 * - add --list packages * 26/2/07 * - add input *VEC arg types to C++ binding * 17/8/08 * - add --list formats * 29/11/08 * - add --list interpolators * 9/2/09 * - and now we just have --list packages/classes/package-name * 13/11/09 * - drop _f postfixes, drop many postfixes * 24/6/10 * - less chatty error messages * - oops, don't rename "copy_set" as "copy_" * 6/2/12 * - long arg names in decls to help SWIG * - don't wrap im_remainderconst_vec() * 31/12/12 * - parse options in two passes (thanks Haida) * 26/11/17 * - remove throw() decls, they are now deprecated everywhere * 18/6/20 kleisauke * - avoid using vips7 symbols * - remove deprecated vips7 C++ generator * 5/8/21 kleisauke * - add --targets * 1/11/22 * - add "-c" flag */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ /* #define DEBUG #define DEBUG_FATAL */ /* Need to disable these sometimes. #undef DEBUG_FATAL */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #define VIPS_DISABLE_DEPRECATION_WARNINGS #include #include #include #if ENABLE_DEPRECATED #include #endif static char *main_option_plugin = NULL; static gboolean main_option_targets; static gboolean main_option_version; static void * list_class(GType type, void *user_data) { VipsObjectClass *class = VIPS_OBJECT_CLASS(g_type_class_ref(type)); int depth = vips_type_depth(type); int i; if (class->deprecated) return NULL; if (VIPS_IS_OPERATION_CLASS(class) && (VIPS_OPERATION_CLASS(class)->flags & VIPS_OPERATION_DEPRECATED)) return NULL; for (i = 0; i < depth * 2; i++) printf(" "); vips_object_print_summary_class( VIPS_OBJECT_CLASS(g_type_class_ref(type))); return NULL; } static void * test_class_name(GType type, void *data) { const char *name = (const char *) data; VipsObjectClass *class; /* Test the classname too. */ if ((class = VIPS_OBJECT_CLASS(g_type_class_ref(type))) && strcmp(class->nickname, name) == 0) return class; if (strcmp(G_OBJECT_CLASS_NAME(class), name) == 0) return class; return NULL; } static gboolean parse_main_option_list(const gchar *option_name, const gchar *value, gpointer data, GError **error) { VipsObjectClass *class; if (value && (class = (VipsObjectClass *) vips_type_map_all( g_type_from_name("VipsObject"), test_class_name, (void *) value))) { vips_type_map_all(G_TYPE_FROM_CLASS(class), list_class, NULL); } else if (value) { vips_error(g_get_prgname(), _("'%s' is not the name of a vips class"), value); vips_error_g(error); return FALSE; } else { vips_type_map_all(g_type_from_name("VipsOperation"), list_class, NULL); } exit(0); } static void * list_operation(GType type, void *user_data) { VipsObjectClass *class = VIPS_OBJECT_CLASS(g_type_class_ref(type)); if (G_TYPE_IS_ABSTRACT(type)) return NULL; if (class->deprecated) return NULL; if (VIPS_OPERATION_CLASS(class)->flags & VIPS_OPERATION_DEPRECATED) return NULL; /* Complete on class names as well as nicknames -- "crop", for * example, is a class name. */ printf("%s\n", class->nickname); printf("%s\n", G_OBJECT_CLASS_NAME(class)); return NULL; } static void * list_operation_arg(VipsObjectClass *object_class, GParamSpec *pspec, VipsArgumentClass *argument_class, void *_data1, void *_data2) { GType type = G_PARAM_SPEC_VALUE_TYPE(pspec); if (!(argument_class->flags & VIPS_ARGUMENT_CONSTRUCT) || (argument_class->flags & VIPS_ARGUMENT_DEPRECATED)) return NULL; /* We don't try to complete options, though maybe we should. */ if (!(argument_class->flags & VIPS_ARGUMENT_REQUIRED)) return NULL; /* These are the pspecs that vips uses that have interesting values. */ if (G_IS_PARAM_SPEC_ENUM(pspec)) { GTypeClass *class = g_type_class_ref(type); GEnumClass *genum; int i; /* Should be impossible, no need to warn. */ if (!class) return NULL; genum = G_ENUM_CLASS(class); printf("word:"); /* -1 since we always have a "last" member. */ for (i = 0; i < genum->n_values - 1; i++) { if (i > 0) printf("|"); printf("%s", genum->values[i].value_nick); } printf("\n"); } else if (G_IS_PARAM_SPEC_BOOLEAN(pspec)) printf("word:true|false\n"); else if (G_IS_PARAM_SPEC_DOUBLE(pspec)) { GParamSpecDouble *pspec_double = (GParamSpecDouble *) pspec; printf("word:%g\n", pspec_double->default_value); } else if (G_IS_PARAM_SPEC_INT(pspec)) { GParamSpecInt *pspec_int = (GParamSpecInt *) pspec; printf("word:%d\n", pspec_int->default_value); } else if (G_IS_PARAM_SPEC_OBJECT(pspec)) /* Eg. an image input or output. */ printf("file\n"); else /* We can offer no useful suggestion for eg. array_int etc. */ printf("none\n"); return NULL; } static gboolean parse_main_option_completion(const gchar *option_name, const gchar *value, gpointer data, GError **error) { VipsObjectClass *class; if (value && (class = (VipsObjectClass *) vips_type_map_all( g_type_from_name("VipsOperation"), test_class_name, (void *) value))) vips_argument_class_map(class, (VipsArgumentClassMapFn) list_operation_arg, NULL, NULL); else if (value) { vips_error(g_get_prgname(), _("'%s' is not the name of a vips operation"), value); vips_error_g(error); return FALSE; } else { vips_type_map_all(g_type_from_name("VipsOperation"), list_operation, NULL); } exit(0); } static GOptionEntry main_option[] = { { "targets", 't', 0, G_OPTION_ARG_NONE, &main_option_targets, N_("print vector targets"), NULL }, { "list", 'l', G_OPTION_FLAG_OPTIONAL_ARG, G_OPTION_ARG_CALLBACK, (GOptionArgFunc) parse_main_option_list, N_("list objects"), N_("BASE-NAME") }, { "plugin", 'p', 0, G_OPTION_ARG_FILENAME, &main_option_plugin, N_("load PLUGIN"), N_("PLUGIN") }, { "version", 'v', 0, G_OPTION_ARG_NONE, &main_option_version, N_("print version"), NULL }, { "completion", 'c', G_OPTION_FLAG_OPTIONAL_ARG, G_OPTION_ARG_CALLBACK, (GOptionArgFunc) parse_main_option_completion, N_("print completions"), N_("BASE-NAME") }, { NULL } }; #if ENABLE_DEPRECATED typedef void *(*map_name_fn)(im_function *); /* Loop over a package. */ static void * map_package(im_package *pack, map_name_fn fn) { int i; void *result; for (i = 0; i < pack->nfuncs; i++) if ((result = fn(pack->table[i]))) return result; return NULL; } /* Apply a function to a vips operation, or map over a package of operations. */ static void * map_name(const char *name, map_name_fn fn) { im_package *pack; im_function *func; if (!name || strcmp(name, "all") == 0) /* Do all packages. */ im_map_packages((VSListMap2Fn) map_package, fn); else if ((pack = im_find_package(name))) /* Do one package. */ map_package(pack, fn); else if ((func = im_find_function(name))) /* Do a single function. */ fn(func); else { vips_error("map_name", _("no package or function \"%s\""), name); return fn; } return NULL; } static void * list_package(im_package *pack) { printf("%-20s - %d operations\n", pack->name, pack->nfuncs); return NULL; } static void * list_function(im_function *func) { printf("%-20s - %s\n", func->name, _(func->desc)); return NULL; } #endif static int print_list(int argc, char **argv) { #if ENABLE_DEPRECATED if (!argv[0] || strcmp(argv[0], "packages") == 0) im_map_packages((VSListMap2Fn) list_package, NULL); else if (strcmp(argv[0], "classes") == 0) #else if (!argv[0] || strcmp(argv[0], "classes") == 0) #endif vips_type_map_all(g_type_from_name("VipsObject"), list_class, NULL); else if (g_type_from_name(argv[0]) && g_type_is_a(g_type_from_name(argv[0]), VIPS_TYPE_OBJECT)) { vips_type_map_all(g_type_from_name(argv[0]), list_class, NULL); } else { #if ENABLE_DEPRECATED if (map_name(argv[0], list_function)) vips_error_exit("unknown package \"%s\"", argv[0]); #else vips_error_exit("unknown operation \"%s\"", argv[0]); #endif } return 0; } #if ENABLE_DEPRECATED /* Print "ln -s" lines for this package. */ static void * print_links_package(im_package *pack) { int i; for (i = 0; i < pack->nfuncs; i++) printf("rm -f %s" IM_EXEEXT "; " "ln -s vips" IM_EXEEXT " %s" IM_EXEEXT "\n", pack->table[i]->name, pack->table[i]->name); return NULL; } /* Print "ln -s" lines for this package. */ static int print_links(int argc, char **argv) { im_map_packages((VSListMap2Fn) print_links_package, NULL); return 0; } /* Does a function have any printing output? */ static int has_print(im_function *fn) { int i; for (i = 0; i < fn->argc; i++) if (fn->argv[i].print) return -1; return 0; } #endif static int isvips(const char *name) { /* If we're running uninstalled we get the lt- prefix. */ if (vips_isprefix("lt-", name)) name += 3; return vips_isprefix("vips", name); } #if ENABLE_DEPRECATED /* Print a usage string from an im_function descriptor. */ static void usage(im_function *fn) { int i; im_package *pack = im_package_of_function(fn->name); /* Don't print the prgname if we're being run as a symlink. */ fprintf(stderr, "usage: "); if (isvips(g_get_prgname())) fprintf(stderr, "%s ", g_get_prgname()); fprintf(stderr, "%s ", fn->name); /* Print args requiring command-line input. */ for (i = 0; i < fn->argc; i++) if (fn->argv[i].desc->flags & IM_TYPE_ARG) fprintf(stderr, "%s ", fn->argv[i].name); /* Print types of command line args. */ fprintf(stderr, "\nwhere:\n"); for (i = 0; i < fn->argc; i++) if (fn->argv[i].desc->flags & IM_TYPE_ARG) fprintf(stderr, "\t%s is of type \"%s\"\n", fn->argv[i].name, fn->argv[i].desc->type); /* Print output print args. */ if (has_print(fn)) { fprintf(stderr, "prints:\n"); for (i = 0; i < fn->argc; i++) if (fn->argv[i].print) fprintf(stderr, "\t%s of type \"%s\"\n", fn->argv[i].name, fn->argv[i].desc->type); } /* Print description of this function, and package it comes from. */ fprintf(stderr, "%s", _(fn->desc)); if (pack) fprintf(stderr, ", from package \"%s\"", pack->name); fprintf(stderr, "\n"); /* Print any flags this function has. */ fprintf(stderr, "flags: "); if (fn->flags & IM_FN_PIO) fprintf(stderr, "(PIO function) "); else fprintf(stderr, "(WIO function) "); if (fn->flags & IM_FN_TRANSFORM) fprintf(stderr, "(coordinate transformer) "); else fprintf(stderr, "(no coordinate transformation) "); if (fn->flags & IM_FN_PTOP) fprintf(stderr, "(point-to-point operation) "); else fprintf(stderr, "(area operation) "); if (fn->flags & IM_FN_NOCACHE) fprintf(stderr, "(nocache operation) "); else fprintf(stderr, "(result can be cached) "); fprintf(stderr, "\n"); } #endif static int print_help(int argc, char **argv) { return 0; } /* All our built-in actions. */ typedef int (*Action)(int argc, char **argv); typedef struct _ActionEntry { char *name; char *description; GOptionEntry *group; Action action; } ActionEntry; static GOptionEntry empty_options[] = { { NULL } }; static ActionEntry actions[] = { #if ENABLE_DEPRECATED { "list", N_("list classes|packages|all|package-name|operation-name"), #else { "list", N_("list classes|all|operation-name"), #endif &empty_options[0], print_list }, #if ENABLE_DEPRECATED { "links", N_("generate links for vips/bin"), &empty_options[0], print_links }, #endif { "help", N_("list possible actions"), &empty_options[0], print_help }, }; static void parse_options(GOptionContext *context, int *argc, char **argv) { char txt[1024]; VipsBuf buf = VIPS_BUF_STATIC(txt); GError *error = NULL; int i, j; #ifdef DEBUG printf("parse_options:\n"); for (i = 0; i < *argc; i++) printf("%d) %s\n", i, argv[i]); #endif /*DEBUG*/ vips_buf_appendf(&buf, "%7s - %s\n", "OPER", _("execute vips operation OPER")); g_option_context_set_summary(context, vips_buf_all(&buf)); #ifdef G_OS_WIN32 if (!g_option_context_parse_strv(context, &argv, &error)) #else /*!G_OS_WIN32*/ if (!g_option_context_parse(context, argc, &argv, &error)) #endif /*G_OS_WIN32*/ { if (error) { fprintf(stderr, "%s\n", error->message); g_error_free(error); } vips_error_exit(NULL); } /* On Windows, argc will not have been updated by * g_option_context_parse_strv(). */ for (*argc = 0; argv[*argc]; (*argc)++) ; /* Remove any "--" argument. If one of our arguments is a negative * number, the user will need to have added the "--" flag to stop * GOption parsing. But "--" is still passed down to us and we need to * ignore it. */ for (i = 1; i < *argc; i++) if (strcmp(argv[i], "--") == 0) { for (j = i; j < *argc; j++) argv[j] = argv[j + 1]; *argc -= 1; } } static GOptionGroup * add_operation_group(GOptionContext *context, VipsOperation *user_data) { GOptionGroup *group; group = g_option_group_new("operation", _("Operation"), _("Operation help"), user_data, NULL); g_option_group_set_translation_domain(group, GETTEXT_PACKAGE); g_option_context_add_group(context, group); return group; } static void print_vector_targets(const char *msg, gint64 targets) { gint64 x; printf("%s", msg); if (targets == 0) printf(" none"); /* For each bit: */ for (x = targets; x != 0; x = x & (x - 1)) /* Extract value of least-significant bit. */ printf(" %s", vips_vector_target_name(x & (~x + 1))); printf("\n"); } /* VIPS universal main program. */ int main(int argc, char **argv) { char *action; GOptionContext *context; GOptionGroup *main_group; GOptionGroup *group; VipsOperation *operation; #if ENABLE_DEPRECATED im_function *fn; #endif int i, j; gboolean handled; GError *error = NULL; if (VIPS_INIT(argv[0])) vips_error_exit(NULL); #ifdef ENABLE_NLS textdomain(GETTEXT_PACKAGE); #endif /* ENABLE_NLS */ setlocale(LC_ALL, ""); { char *basename; basename = g_path_get_basename(argv[0]); g_set_prgname(basename); g_free(basename); } /* On Windows, argv is ascii-only .. use this to get a utf-8 version of * the args. */ #ifdef G_OS_WIN32 argv = g_win32_get_command_line(); #endif /*G_OS_WIN32*/ #ifdef DEBUG_FATAL /* Set masks for debugging ... stop on any problem. */ g_log_set_always_fatal( G_LOG_FLAG_RECURSION | G_LOG_FLAG_FATAL | G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING); #endif /*!DEBUG_FATAL*/ context = g_option_context_new(_("[ACTION] [OPTIONS] [PARAMETERS] - " "VIPS driver program")); /* Add and parse the outermost options: the ones this program uses. * For example, we need * to be able to spot that in the case of "--plugin ./poop.plg" we * must remove two args. */ main_group = g_option_group_new(NULL, NULL, NULL, NULL, NULL); g_option_group_add_entries(main_group, main_option); vips_add_option_entries(main_group); g_option_group_set_translation_domain(main_group, GETTEXT_PACKAGE); g_option_context_set_main_group(context, main_group); /* We add more options later, for example as options to vips8 * operations. Ignore any unknown options in this first parse. */ g_option_context_set_ignore_unknown_options(context, TRUE); /* "vips" with no arguments does "vips --help". */ if (argc == 1) { char *help; help = g_option_context_get_help(context, TRUE, NULL); printf("%s", help); g_free(help); exit(0); } /* Also disable help output: we want to be able to display full help * in a second pass after all options have been created. */ g_option_context_set_help_enabled(context, FALSE); #ifdef G_OS_WIN32 if (!g_option_context_parse_strv(context, &argv, &error)) #else /*!G_OS_WIN32*/ if (!g_option_context_parse(context, &argc, &argv, &error)) #endif /*G_OS_WIN32*/ { if (error) { fprintf(stderr, "%s\n", error->message); g_error_free(error); } vips_error_exit(NULL); } /* On Windows, argc will not have been updated by * g_option_context_parse_strv(). */ for (argc = 0; argv[argc]; argc++) ; if (main_option_plugin) { #if ENABLE_MODULES #if ENABLE_DEPRECATED if (!im_load_plugin(main_option_plugin)) vips_error_exit(NULL); #else /*!ENABLE_DEPRECATED*/ GModule *module; module = g_module_open(main_option_plugin, G_MODULE_BIND_LAZY); if (!module) { vips_error_exit(_("unable to load \"%s\" -- %s"), main_option_plugin, g_module_error()); } #endif /*ENABLE_DEPRECATED*/ #else /*!ENABLE_MODULES*/ g_warning("%s", _("plugin load disabled: " "libvips built without modules support")); #endif /*ENABLE_MODULES*/ } if (main_option_targets) { #ifndef HAVE_ORC print_vector_targets("builtin targets: ", vips_vector_get_builtin_targets()); #endif print_vector_targets("supported targets:", vips_vector_get_supported_targets()); } if (main_option_version) printf("vips-%s\n", vips_version_string()); /* Re-enable help and unknown option detection ready for the second * option parse. */ g_option_context_set_ignore_unknown_options(context, FALSE); g_option_context_set_help_enabled(context, TRUE); /* Try to find our action. */ handled = FALSE; action = NULL; /* Should we try to run the thing we are named as? */ if (!isvips(g_get_prgname())) action = argv[0]; if (!action) { /* Look for the first non-option argument, if any, and make * that our action. The parse above will have removed most of * them, but --help (for example) could still remain. */ for (i = 1; i < argc; i++) if (argv[i][0] != '-') { action = argv[i]; /* Remove the action from argv. */ for (j = i; j < argc; j++) argv[j] = argv[j + 1]; argc -= 1; break; } } /* Could be one of our built-in actions. */ if (action) for (i = 0; i < VIPS_NUMBER(actions); i++) if (strcmp(action, actions[i].name) == 0) { group = add_operation_group(context, NULL); g_option_group_add_entries(group, actions[i].group); parse_options(context, &argc, argv); if (actions[i].action(argc - 1, argv + 1)) vips_error_exit("%s", action); handled = TRUE; break; } #if ENABLE_DEPRECATED /* Could be a vips7 im_function. We need to test for vips7 first, * since we don't want to use the vips7 compat wrappers in vips8 * unless we have to. They don't support all args types. */ if (action && !handled && (fn = im_find_function(action))) { if (im_run_command(action, argc - 1, argv + 1)) { if (argc == 1) usage(fn); else vips_error_exit(NULL); } handled = TRUE; } /* im_find_function() set an error msg. */ if (action && !handled) vips_error_clear(); #endif /* Could be a vips8 VipsOperation. */ if (action && !handled && (operation = vips_operation_new(action))) { group = add_operation_group(context, operation); vips_call_options(group, operation); parse_options(context, &argc, argv); if (vips_call_argv(operation, argc - 1, argv + 1)) { if (argc == 1) vips_operation_class_print_usage( VIPS_OPERATION_GET_CLASS(operation)); vips_object_unref_outputs(VIPS_OBJECT(operation)); g_object_unref(operation); if (argc == 1) /* We don't exit with an error for something * like "vips fitsload" failing, we use it to * decide if an optional component has been * configured. If we've been built without * fits support, fitsload will fail to find * the operation and we'll error with "unknown * action" below. */ exit(0); else vips_error_exit(NULL); } vips_object_unref_outputs(VIPS_OBJECT(operation)); g_object_unref(operation); handled = TRUE; } /* vips_operation_new() sets an error msg for unknown operation. */ if (action && !handled) vips_error_clear(); if (action && !handled) { vips_error_exit(_("unknown action \"%s\""), action); } /* Still not handled? We may not have called parse_options(), so * --help args may not have been processed. */ if (!handled) parse_options(context, &argc, argv); g_option_context_free(context); #ifdef G_OS_WIN32 g_strfreev(argv); #endif /*G_OS_WIN32*/ vips_shutdown(); return 0; } libvips-8.15.1/tools/vipsedit.c000066400000000000000000000175121454007373500164270ustar00rootroot00000000000000/* modify vips file header! - useful for setting resolution, coding... * very dangerous! * * no way of setting non-used codes in variables like newxres * so need flags to show new parameter has been set.. boring * Copyright K.Martinez 30/6/93 * * 29/7/93 JC * - format added * - ==0 added to strcmp! * 17/11/94 JC * - new header fields added * 21/10/04 * - more header updates * 22/8/05 * - less-stupid-ified * 20/9/05 * - rewritten with glib option parser, ready for xml options to go in * 18/6/20 kleisauke * - avoid using vips7 symbols */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #ifdef HAVE_UNISTD_H #include #endif /*HAVE_UNISTD_H*/ #include #include #include #include /* We have to represent all header fields as char * so we can spot unset args * safely. */ static char *xsize = NULL; static char *ysize = NULL; static char *bands = NULL; static char *format = NULL; static char *interpretation = NULL; static char *coding = NULL; static char *xres = NULL; static char *yres = NULL; static char *xoffset = NULL; static char *yoffset = NULL; static char *endian = NULL; static gboolean setext = FALSE; static gboolean version = FALSE; static GOptionEntry entries[] = { { "endian", 'n', 0, G_OPTION_ARG_STRING, &endian, N_("tag file as big or little-endian"), NULL }, { "width", 'w', 0, G_OPTION_ARG_STRING, &xsize, N_("set width to N pixels"), "N" }, { "height", 'h', 0, G_OPTION_ARG_STRING, &ysize, N_("set height to N pixels"), "N" }, { "bands", 'b', 0, G_OPTION_ARG_STRING, &bands, N_("set Bands to N"), "N" }, { "format", 'f', 0, G_OPTION_ARG_STRING, &format, N_("set BandFmt to F (eg. uchar, float)"), "F" }, { "interpretation", 'i', 0, G_OPTION_ARG_STRING, &interpretation, N_("set interpretation to I (eg. xyz)"), "I" }, { "coding", 'c', 0, G_OPTION_ARG_STRING, &coding, N_("set Coding to C (eg. labq)"), "C" }, { "xres", 'X', 0, G_OPTION_ARG_STRING, &xres, N_("set Xres to R pixels/mm"), "R" }, { "yres", 'Y', 0, G_OPTION_ARG_STRING, &yres, N_("set Yres to R pixels/mm"), "R" }, { "xoffset", 'u', 0, G_OPTION_ARG_STRING, &xoffset, N_("set Xoffset to N pixels"), "N" }, { "yoffset", 'v', 0, G_OPTION_ARG_STRING, &yoffset, N_("set Yoffset to N pixels"), "N" }, { "setext", 'e', 0, G_OPTION_ARG_NONE, &setext, N_("replace extension block with stdin"), NULL }, { "xsize", 'x', 0, G_OPTION_ARG_STRING, &xsize, N_("set Xsize to N (deprecated, use width)"), "N" }, { "ysize", 'y', 0, G_OPTION_ARG_STRING, &ysize, N_("set Ysize to N (deprecated, use height)"), "N" }, { "type", 't', 0, G_OPTION_ARG_STRING, &interpretation, N_("set Type to T (deprecated, use interpretation)"), "T" }, { "version", 'v', 0, G_OPTION_ARG_NONE, &version, N_("print version"), NULL }, { NULL } }; static void parse_pint(char *arg, int *out) { /* Might as well set an upper limit. */ *out = atoi(arg); if (*out <= 0 || *out > 1000000) vips_error_exit(_("'%s' is not a positive integer"), arg); } int main(int argc, char **argv) { GOptionContext *context; GOptionGroup *main_group; GError *error = NULL; VipsImage *im; unsigned char header[VIPS_SIZEOF_HEADER]; if (VIPS_INIT(argv[0])) vips_error_exit("%s", _("unable to start VIPS")); #ifdef ENABLE_NLS textdomain(GETTEXT_PACKAGE); #endif /* ENABLE_NLS */ setlocale(LC_ALL, ""); { char *basename; basename = g_path_get_basename(argv[0]); g_set_prgname(basename); g_free(basename); } /* On Windows, argv is ascii-only .. use this to get a utf-8 version of * the args. */ #ifdef G_OS_WIN32 argv = g_win32_get_command_line(); #endif /*G_OS_WIN32*/ context = g_option_context_new( _("vipsedit - edit vips file header")); main_group = g_option_group_new(NULL, NULL, NULL, NULL, NULL); g_option_group_add_entries(main_group, entries); vips_add_option_entries(main_group); g_option_group_set_translation_domain(main_group, GETTEXT_PACKAGE); g_option_context_set_main_group(context, main_group); #ifdef G_OS_WIN32 if (!g_option_context_parse_strv(context, &argv, &error)) #else /*!G_OS_WIN32*/ if (!g_option_context_parse(context, &argc, &argv, &error)) #endif /*G_OS_WIN32*/ { vips_g_error(&error); exit(-1); } /* On Windows, argc will not have been updated by * g_option_context_parse_strv(). */ for (argc = 0; argv[argc]; argc++) ; if (version) printf("vips-%s\n", vips_version_string()); if (argc != 2) { fprintf(stderr, _("usage: %s [OPTION...] vips-file\n"), g_get_prgname()); exit(-1); } if (!(im = vips_image_new_from_file(argv[1], NULL))) vips_error_exit(_("could not open image %s"), argv[1]); vips__seek(im->fd, 0, SEEK_SET); if (read(im->fd, header, VIPS_SIZEOF_HEADER) != VIPS_SIZEOF_HEADER || vips__read_header_bytes(im, header)) vips_error_exit(_("could not read VIPS header for %s"), im->filename); if (endian) { if (strcmp(endian, "little") == 0) im->magic = VIPS_MAGIC_INTEL; else if (strcmp(endian, "big") == 0) im->magic = VIPS_MAGIC_SPARC; else vips_error_exit( _("bad endian-ness %s, should be 'big' or 'little'"), endian); } if (xsize) parse_pint(xsize, &im->Xsize); if (ysize) parse_pint(ysize, &im->Ysize); if (bands) parse_pint(bands, &im->Bands); if (format) { int f; if ((f = vips_enum_from_nick(argv[0], VIPS_TYPE_BAND_FORMAT, format)) < 0) vips_error_exit(_("bad format %s"), format); im->BandFmt = f; /* We don't use this, but make sure it's set in case any * old binaries are expecting it. */ im->Bbits = vips_format_sizeof(f) << 3; } if (interpretation) { int i; if ((i = vips_enum_from_nick(argv[0], VIPS_TYPE_INTERPRETATION, interpretation)) < 0) vips_error_exit(_("bad interpretation %s"), interpretation); im->Type = i; } if (coding) { int c; if ((c = vips_enum_from_nick(argv[0], VIPS_TYPE_CODING, coding)) < 0) vips_error_exit(_("bad coding %s"), coding); im->Coding = c; } if (xres) im->Xres = atof(xres); if (yres) im->Yres = atof(yres); if (xoffset) im->Xoffset = atoi(xoffset); if (yoffset) im->Yoffset = atoi(yoffset); if (vips__seek(im->fd, 0, SEEK_SET) == (off_t) -1) vips_error_exit(_("could not seek on %s"), im->filename); if (vips__write_header_bytes(im, header) || vips__write(im->fd, header, VIPS_SIZEOF_HEADER)) vips_error_exit(_("could not write to %s"), im->filename); if (setext) { char *xml; size_t size; if (!(xml = vips__file_read(stdin, "stdin", &size))) vips_error_exit("%s", _("could not get ext data")); /* Strip trailing whitespace ... we can get stray \n at the * end, eg. "echo | vipsedit --setext fred.v". */ while (size > 0 && isspace(xml[size - 1])) size -= 1; if (vips__write_extension_block(im, xml, size)) vips_error_exit("%s", _("could not set extension")); g_free(xml); } g_object_unref(im); g_option_context_free(context); #ifdef G_OS_WIN32 g_strfreev(argv); #endif /*G_OS_WIN32*/ vips_shutdown(); return 0; } libvips-8.15.1/tools/vipsheader.c000066400000000000000000000144201454007373500167250ustar00rootroot00000000000000/* @(#) Command; reads the header of a Vasari picture file. * @(#) Usage: header vasari_file * @(#) * * Copyright: Birkbeck College, History of Art Dept, London, VASARI project. * * Author: Nicos Dessipris * Written on: 17/01/1990 * Modified on : 17/04/1990, 2/6/93 K.Martinez * 16/6/93 JC * - now calls im_mmapin instead of bizarre bogosity * 1/6/95 JC * - extra field argument for testing particular bits of the header * 29/10/98 JC * - now uses im_open() * 24/5/01 JC * - uses im_tiff2vips_header() etc., for speed * 7/5/03 JC * - uses im_open_header() * 1/8/05 * - uses new header API, for great smallness * 4/8/05 * - back to plain im_open() now that's lazy enough for us * 9/9/05 * - display meta fields in save format, if possible * 20/9/05 * - new field name "getext" reads extension block * 24/8/06 * - use GOption, loop over args * 4/1/07 * - use im_history_get() * 29/2/08 * - don't stop on error * 23/7/09 * - ... but do return an error code if anything failed * 6/11/09 * - added im_history_get(), im_getexp(), im_printdesc() as wrapped * functions, so "header" is now obsolete * 27/2/13 * - convert to vips8 API * 29/6/20 * - allow "stdin" as a filename */ /* This file is part of VIPS. VIPS is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser 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 */ /* These files are distributed with VIPS - http://www.vips.ecs.soton.ac.uk */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include static char *main_option_field = NULL; static gboolean main_option_all = FALSE; static gboolean version = FALSE; static GOptionEntry main_option[] = { { "all", 'a', 0, G_OPTION_ARG_NONE, &main_option_all, N_("show all fields"), NULL }, { "field", 'f', 0, G_OPTION_ARG_STRING, &main_option_field, N_("print value of FIELD (\"getext\" reads extension block, " "\"Hist\" reads image history)"), "FIELD" }, { "version", 'v', 0, G_OPTION_ARG_NONE, &version, N_("print version"), NULL }, { NULL } }; /* A non-fatal error. Print the vips error buffer and continue. */ static void print_error(void) { fprintf(stderr, "%s: %s", g_get_prgname(), vips_error_buffer()); vips_error_clear(); } static void * print_field_fn(VipsImage *image, const char *field, GValue *value, void *a) { gboolean *many = (gboolean *) a; char str[256]; VipsBuf buf = VIPS_BUF_STATIC(str); if (*many && image->filename) printf("%s: ", image->filename); printf("%s: ", field); vips_buf_appendgv(&buf, value); printf("%s\n", vips_buf_all(&buf)); return NULL; } /* Print header, or parts of header. */ static int print_header(VipsImage *image, gboolean many) { if (!main_option_field) { if (image->filename) printf("%s: ", image->filename); vips_object_print_summary(VIPS_OBJECT(image)); if (main_option_all) (void) vips_image_map(image, print_field_fn, &many); } else if (strcmp(main_option_field, "getext") == 0) { if (vips__has_extension_block(image)) { void *buf; int size; if (!(buf = vips__read_extension_block(image, &size))) return -1; printf("%s", (char *) buf); g_free(buf); } } else if (strcmp(main_option_field, "Hist") == 0) printf("%s", vips_image_get_history(image)); else { char *str; if (vips_image_get_as_string(image, main_option_field, &str)) return -1; printf("%s\n", str); g_free(str); } return 0; } int main(int argc, char *argv[]) { GOptionContext *context; GOptionGroup *main_group; GError *error = NULL; int i; int result; if (VIPS_INIT(argv[0])) vips_error_exit("unable to start VIPS"); #ifdef ENABLE_NLS textdomain(GETTEXT_PACKAGE); #endif /* ENABLE_NLS */ setlocale(LC_ALL, ""); { char *basename; basename = g_path_get_basename(argv[0]); g_set_prgname(basename); g_free(basename); } /* On Windows, argv is ascii-only .. use this to get a utf-8 version of * the args. */ #ifdef G_OS_WIN32 argv = g_win32_get_command_line(); #endif /*G_OS_WIN32*/ context = g_option_context_new(_("- print image header")); main_group = g_option_group_new(NULL, NULL, NULL, NULL, NULL); g_option_group_add_entries(main_group, main_option); vips_add_option_entries(main_group); g_option_group_set_translation_domain(main_group, GETTEXT_PACKAGE); g_option_context_set_main_group(context, main_group); #ifdef G_OS_WIN32 if (!g_option_context_parse_strv(context, &argv, &error)) #else /*!G_OS_WIN32*/ if (!g_option_context_parse(context, &argc, &argv, &error)) #endif /*G_OS_WIN32*/ { if (error) { fprintf(stderr, "%s\n", error->message); g_error_free(error); } vips_error_exit("try \"%s --help\"", g_get_prgname()); } g_option_context_free(context); if (version) printf("vips-%s\n", vips_version_string()); result = 0; for (i = 1; argv[i]; i++) { VipsImage *image; char filename[VIPS_PATH_MAX]; char option_string[VIPS_PATH_MAX]; vips__filename_split8(argv[i], filename, option_string); if (strcmp(filename, "stdin") == 0) { VipsSource *source; if (!(source = vips_source_new_from_descriptor(0))) return -1; if (!(image = vips_image_new_from_source(source, option_string, NULL))) { VIPS_UNREF(source); return -1; } VIPS_UNREF(source); } else { if (!(image = vips_image_new_from_file(argv[i], NULL))) { print_error(); result = 1; } } if (image && print_header(image, argv[2] != NULL)) { print_error(); result = 1; } if (image) g_object_unref(image); } /* We don't free this on error exit, sadly. */ #ifdef G_OS_WIN32 g_strfreev(argv); #endif /*G_OS_WIN32*/ vips_shutdown(); return result; } libvips-8.15.1/tools/vipsprofile000066400000000000000000000323241454007373500167170ustar00rootroot00000000000000#!/usr/bin/python3 import re import cairo from io import open class ReadFile: def __init__(self, filename): self.filename = filename def __enter__(self): self.f = open(self.filename, 'r', encoding='utf-8') self.lineno = 0 self.getnext(); return self def __exit__(self, type, value, traceback): self.f.close() def __bool__(self): return self.line != "" __nonzero__ = __bool__ def getnext(self): self.lineno += 1 self.line = self.f.readline() def read_times(rf): times = [] while True: match = re.match('[+-]?[0-9]+ ', rf.line) if not match: break times += [int(x) for x in re.split(' ', rf.line.rstrip())] rf.getnext() return times[::-1] class Thread: thread_number = 0 def __init__(self, thread_name): # no one cares about the thread address match = re.match(r'(.*) \(0x.*?\) (.*)', thread_name) if match: thread_name = match.group(1) + " " + match.group(2) self.thread_name = thread_name self.thread_number = Thread.thread_number self.all_events = [] self.workwait_events = [] self.memory_events = [] self.other_events = [] Thread.thread_number += 1 all_events = [] class Event: def __init__(self, thread, gate_location, gate_name, start, stop): self.thread = thread self.gate_location = gate_location self.gate_name = gate_name self.work = False self.wait = False self.memory = False if gate_location == "memory": self.memory = True elif re.match('.*work.*', gate_name): self.work = True elif re.match('.*wait.*', gate_name): self.wait = True if self.memory: self.start = start self.stop = start self.size = stop else: self.start = start self.stop = stop thread.all_events.append(self) all_events.append(self) if self.wait or self.work: thread.workwait_events.append(self) elif self.memory: thread.memory_events.append(self) else: thread.other_events.append(self) input_filename = 'vips-profile.txt' thread_id = 0 threads = [] n_events = 0 print('reading from', input_filename) with ReadFile(input_filename) as rf: while rf: if rf.line.rstrip() == "": rf.getnext() continue if rf.line[0] == "#": rf.getnext() continue match = re.match('thread: (.*)', rf.line) if not match: print('parse error line %d, expected "thread"' % rf.lineno) thread_name = match.group(1) + " " + str(thread_id) thread_id += 1 thread = Thread(thread_name) threads.append(thread) rf.getnext() while True: match = re.match('^gate: (.*?)(: (.*))?$', rf.line) if not match: break gate_location = match.group(1) gate_name = match.group(3) rf.getnext() match = re.match('start:', rf.line) if not match: continue rf.getnext() start = read_times(rf) match = re.match('stop:', rf.line) if not match: continue rf.getnext() stop = read_times(rf) if len(start) != len(stop): print('start and stop length mismatch') for a, b in zip(start, stop): Event(thread, gate_location, gate_name, a, b) n_events += 1 for thread in threads: thread.all_events.sort(key=lambda x: x.start) thread.workwait_events.sort(key=lambda x: x.start) thread.memory_events.sort(key=lambda x: x.start) thread.other_events.sort(key=lambda x: x.start) all_events.sort(key=lambda x: x.start) print(f'loaded {n_events} events') # move time axis to secs of computation ticks_per_sec = 1000000.0 first_time = all_events[0].start last_time = 0 for event in all_events: if event.start < first_time: first_time = event.start if event.stop > last_time: last_time = event.stop for event in all_events: event.start = (event.start - first_time) / ticks_per_sec event.stop = (event.stop - first_time) / ticks_per_sec last_time = (last_time - first_time) / ticks_per_sec first_time = 0 print(f'total time = {last_time}') # calculate some simple stats for thread in threads: thread.start = last_time thread.stop = 0 thread.wait = 0 thread.work = 0 thread.mem = 0 thread.peak_mem = 0 for event in thread.all_events: if event.start < thread.start: thread.start = event.start if event.stop > thread.stop: thread.stop = event.stop if event.wait: thread.wait += event.stop - event.start if event.work: thread.work += event.stop - event.start if event.memory: thread.mem += event.size if thread.mem > thread.peak_mem: thread.peak_mem = thread.mem thread.alive = thread.stop - thread.start # hide very short-lived threads thread.hide = thread.alive < 0.01 print('name alive wait% work% unkn% mem peakm') for thread in threads: if thread.hide: continue wait_percent = 100 * thread.wait / thread.alive work_percent = 100 * thread.work / thread.alive unkn_percent = 100 - 100 * (thread.work + thread.wait) / thread.alive print((f'{thread.thread_name:>13}\t{thread.alive:6.2f}\t' f'{wait_percent:>4.1f}\t{work_percent:>4.1f}\t{unkn_percent:>4.1f}\t' f'{thread.mem / (1024 * 1024):>4.1f}\t' f'{thread.peak_mem / (1024 * 1024):>4.1f}')) mem = 0 peak_mem = 0 for event in all_events: if event.memory: mem += event.size if mem > peak_mem: peak_mem = mem print(f'peak memory = {peak_mem / (1024 * 1024):.1f} MB') if mem != 0: print(f'leak! final memory = {mem / (1024 * 1024):.1f} MB') # does a list of events contain an overlap? # assume the list of events has been sorted by start time def events_overlap(events): for i in range(0, len(events) - 1): # we can't just test for stop1 > start2 since one (or both) events # might have duration zero event1 = events[i] event2 = events[i + 1] overlap_start = max(event1.start, event2.start) overlap_stop = min(event1.stop, event2.stop) if overlap_stop - overlap_start > 0: return True return False # do the events on two gates overlap? def gates_overlap(events, gate_name1, gate_name2): merged = [] for event in events: if event.gate_name == gate_name1 or event.gate_name == gate_name2: merged.append(event) merged.sort(key=lambda x: x.start) return events_overlap(merged) # show top 10 waits wait = {} for thread in threads: for event in thread.all_events: if event.wait: name = f'{event.gate_location}::{event.gate_name}' if name not in wait: wait[name] = 0 wait[name] += event.stop - event.start print('name wait') for [name, time] in sorted(wait.items(), reverse=True, key=lambda x: x[1])[:10]: print(f'{name:>35}\t{time:.2f}') # allocate a y position for each gate total_y = 0 for thread in threads: if thread.hide: continue thread.total_y = total_y gate_positions = {} # first pass .. move work and wait events to y == 0 if events_overlap(thread.workwait_events): print('gate overlap on thread', thread.thread_name) for i in range(0, len(thread.workwait_events) - 1): event1 = thread.workwait_events[i] event2 = thread.workwait_events[i + 1] overlap_start = max(event1.start, event2.start) overlap_stop = min(event1.stop, event2.stop) if overlap_stop - overlap_start > 0: print('overlap:') print('event', event1.gate_location, event1.gate_name, end=' ') print('starts at', event1.start, 'stops at', event1.stop) print('event', event2.gate_location, event2.gate_name, end=' ') print('starts at', event2.start, 'stops at', event2.stop) for event in thread.workwait_events: gate_positions[event.gate_name] = 0 event.y = 0 event.total_y = total_y for event in thread.memory_events: gate_positions[event.gate_name] = 0 event.y = 0 event.total_y = total_y # second pass: move all other events to non-overlapping ys y = 1 for event in thread.other_events: if not event.gate_name in gate_positions: # look at all the ys we've allocated previously and see if we can # add this gate to one of them for gate_y in range(1, y): found_overlap = False for gate_name in gate_positions: if gate_positions[gate_name] != gate_y: continue if gates_overlap(thread.other_events, event.gate_name, gate_name): found_overlap = True break if not found_overlap: gate_positions[event.gate_name] = gate_y break # failure? add a new y if not event.gate_name in gate_positions: gate_positions[event.gate_name] = y y += 1 event.y = gate_positions[event.gate_name] # third pass: flip the order of the ys to get the lowest-level ones at the # top, next to the wait/work line for event in thread.other_events: event.y = y - event.y event.total_y = total_y + event.y total_y += y PIXELS_PER_SECOND = 1000 PIXELS_PER_GATE = 20 LEFT_BORDER = 130 BAR_HEIGHT = 5 MEM_HEIGHT = 100 WIDTH = int(LEFT_BORDER + last_time * PIXELS_PER_SECOND) + 20 HEIGHT = int(total_y * PIXELS_PER_GATE) + MEM_HEIGHT + 30 output_filename = "vips-profile.svg" print('writing to', output_filename) surface = cairo.SVGSurface(output_filename, WIDTH, HEIGHT) ctx = cairo.Context(surface) ctx.select_font_face('Sans') ctx.set_font_size(15) ctx.rectangle(0, 0, WIDTH, HEIGHT) ctx.set_source_rgba(0.0, 0.0, 0.3, 1.0) ctx.fill() def draw_event(ctx, event): left = event.start * PIXELS_PER_SECOND + LEFT_BORDER top = event.total_y * PIXELS_PER_GATE + BAR_HEIGHT // 2 width = (event.stop - event.start) * PIXELS_PER_SECOND height = BAR_HEIGHT if event.memory: width = 1 height /= 2 top += BAR_HEIGHT ctx.rectangle(left, top, width, height) if event.wait: ctx.set_source_rgb(0.9, 0.1, 0.1) elif event.work: ctx.set_source_rgb(0.1, 0.9, 0.1) elif event.memory: ctx.set_source_rgb(1.0, 1.0, 1.0) else: ctx.set_source_rgb(0.1, 0.1, 0.9) ctx.fill() if not event.wait and not event.work and not event.memory: xbearing, ybearing, twidth, theight, xadvance, yadvance = \ ctx.text_extents(event.gate_name) ctx.move_to(left + width // 2 - twidth // 2, top + 3 * BAR_HEIGHT) ctx.set_source_rgb(1.00, 0.83, 0.00) ctx.show_text(event.gate_name) for thread in threads: if thread.hide: continue ctx.rectangle(0, thread.total_y * PIXELS_PER_GATE, WIDTH, 1) ctx.set_source_rgb(1.00, 1.00, 1.00) ctx.fill() xbearing, ybearing, twidth, theight, xadvance, yadvance = \ ctx.text_extents(thread.thread_name) ctx.move_to(0, theight + thread.total_y * PIXELS_PER_GATE + BAR_HEIGHT // 2) ctx.set_source_rgb(1.00, 1.00, 1.00) ctx.show_text(thread.thread_name) for event in thread.all_events: draw_event(ctx, event) memory_y = total_y * PIXELS_PER_GATE label = "memory" xbearing, ybearing, twidth, theight, xadvance, yadvance = \ ctx.text_extents(label) ctx.move_to(0, memory_y + theight + 8) ctx.set_source_rgb(1.00, 1.00, 1.00) ctx.show_text(label) mem = 0 ctx.move_to(LEFT_BORDER, memory_y + MEM_HEIGHT) for event in all_events: if event.memory: mem += event.size left = LEFT_BORDER + event.start * PIXELS_PER_SECOND top = memory_y + MEM_HEIGHT - (MEM_HEIGHT * mem / peak_mem) ctx.line_to(left, top) ctx.set_line_width(1) ctx.set_source_rgb(1.00, 1.00, 1.00) ctx.stroke() axis_y = total_y * PIXELS_PER_GATE + MEM_HEIGHT ctx.rectangle(LEFT_BORDER, axis_y, last_time * PIXELS_PER_SECOND, 1) ctx.set_source_rgb(1.00, 1.00, 1.00) ctx.fill() label = "time" xbearing, ybearing, twidth, theight, xadvance, yadvance = \ ctx.text_extents(label) ctx.move_to(0, axis_y + theight + 8) ctx.set_source_rgb(1.00, 1.00, 1.00) ctx.show_text(label) for t in range(0, int(last_time * PIXELS_PER_SECOND), PIXELS_PER_SECOND // 10): left = t + LEFT_BORDER top = axis_y ctx.rectangle(left, top, 1, 5) ctx.set_source_rgb(1.00, 1.00, 1.00) ctx.fill() label = str(t / PIXELS_PER_SECOND) xbearing, ybearing, twidth, theight, xadvance, yadvance = \ ctx.text_extents(label) ctx.move_to(left - twidth // 2, top + theight + 8) ctx.set_source_rgb(1.00, 1.00, 1.00) ctx.show_text(label) surface.finish() libvips-8.15.1/tools/vipsthumbnail.c000066400000000000000000000343751454007373500174730ustar00rootroot00000000000000/* VIPS thumbnailer * * 11/1/09 * * 13/1/09 * - decode labq and rad images * - colour management * - better handling of tiny images * 25/1/10 * - added "--delete" * 6/2/10 * - added "--interpolator" * - added "--nosharpen" * - better 'open' logic, test lazy flag now * 13/5/10 * - oops hehe residual sharpen test was reversed * - and the mask coefficients were messed up * 26/5/10 * - delete failed if there was a profile * 4/7/10 * - oops sharpening was turning off for integer shrinks, thanks Nicolas * 30/7/10 * - use new "rd" mode rather than our own open via disc * 8/2/12 * - use :seq mode for png images * - shrink to a scanline cache to ensure we request pixels sequentially * from the input * 13/6/12 * - update the sequential stuff to the general method * 21/6/12 * - remove "--nodelete" option, have a --delete option instead, off by * default * - much more gentle extra sharpening * 13/11/12 * - allow absolute paths in -o (thanks fuho) * 3/5/13 * - add optional sharpening mask from file * 10/7/13 * - rewrite for vips8 * - handle embedded jpeg thumbnails * 12/11/13 * - add --linear option * 18/12/13 * - add --crop option * 5/3/14 * - copy main image metadata to embedded thumbnails, thanks ottob * 6/3/14 * - add --rotate flag * 7/3/14 * - remove the embedded thumbnail reader, embedded thumbnails are too * unlike the main image wrt. rotation / colour / etc. * 30/6/14 * - fix interlaced thumbnail output, thanks lovell * 3/8/14 * - box shrink less, use interpolator more, if window_size is large * enough * - default to bicubic if available * - add an anti-alias filter between shrink and affine * - support CMYK * - use SEQ_UNBUF for a memory saving * 12/9/14 * - try with embedded profile first, if that fails retry with fallback * profile * 13/1/15 * - exit with an error code if one or more conversions failed * 20/1/15 * - rename -o as -f, keep -o as a hidden flag * 9/5/15 * - use vips_resize() instead of our own code * - premultiply alpha * 30/7/15 * - warn if you autorot and there's no exif support * 9/2/16 * - add PDF --size support * - add SVG --size support * 28/2/16 * - add webp --shrink support * 29/2/16 * - deprecate sharpen and interpolate * 6/5/16 * - restore BandFmt after unpremultiply * 23/5/16 * - no need to guess max-alpha now premultiply does this for us * 1/8/16 * - use scRGB as the working space in linear mode * 15/8/16 * - can now remove 0.1 rounding adjustment * 2/11/16 * - use vips_thumbnail(), most code moved there * 6/1/17 * - fancy geometry strings * - support VipSize restrictions * 4/5/17 * - add ! geo modifier * 30/8/17 * - add --intent * 23/10/17 * - --size Nx didn't work, argh ... thanks jrochkind * 3/2/20 * - add --no-rotate * - add --import-profile / --export-profile names * - back to -o for output * 29/2/20 * - deprecate --delete * 2/10/20 * - support "stdin" as a magic input filename for thumbnail_source * - support ".suffix" as a magic output format for stdout write */ #ifdef HAVE_CONFIG_H #include #endif /*HAVE_CONFIG_H*/ #include #include #include #include #include #include #include #include #include /* Default settings. We change the default to bicubic in main() if * this vips has been compiled with bicubic support. */ static char *thumbnail_size = "128"; static int thumbnail_width = 128; static int thumbnail_height = 128; static VipsSize size_restriction = VIPS_SIZE_BOTH; static char *output_format = "tn_%s.jpg"; static char *export_profile = NULL; static char *import_profile = NULL; static gboolean linear_processing = FALSE; static gboolean crop_image = FALSE; static gboolean no_rotate_image = FALSE; static char *smartcrop_image = NULL; static char *thumbnail_intent = NULL; static gboolean version = FALSE; /* Deprecated and unused. */ static gboolean delete_profile = FALSE; static gboolean nosharpen = FALSE; static gboolean nodelete_profile = FALSE; static gboolean verbose = FALSE; static char *convolution_mask = NULL; static char *interpolator = NULL; static gboolean rotate_image = FALSE; static GOptionEntry options[] = { { "size", 's', 0, G_OPTION_ARG_STRING, &thumbnail_size, N_("shrink to SIZE or to WIDTHxHEIGHT"), N_("SIZE") }, { "output", 'o', 0, G_OPTION_ARG_STRING, &output_format, N_("output to FORMAT"), N_("FORMAT") }, { "export-profile", 'e', 0, G_OPTION_ARG_FILENAME, &export_profile, N_("export with PROFILE"), N_("PROFILE") }, { "import-profile", 'i', 0, G_OPTION_ARG_FILENAME, &import_profile, N_("import untagged images with PROFILE"), N_("PROFILE") }, { "linear", 'a', 0, G_OPTION_ARG_NONE, &linear_processing, N_("process in linear space"), NULL }, { "smartcrop", 'm', 0, G_OPTION_ARG_STRING, &smartcrop_image, N_("shrink and crop to fill SIZE using STRATEGY"), N_("STRATEGY") }, { "intent", 'n', 0, G_OPTION_ARG_STRING, &thumbnail_intent, N_("ICC transform with INTENT"), N_("INTENT") }, { "delete", 'd', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &delete_profile, N_("(deprecated, does nothing)"), NULL }, { "no-rotate", 0, 0, G_OPTION_ARG_NONE, &no_rotate_image, N_("don't auto-rotate"), NULL }, { "version", 'v', 0, G_OPTION_ARG_NONE, &version, N_("print version"), NULL }, { "format", 'f', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &output_format, N_("set output format string to FORMAT"), N_("FORMAT") }, { "eprofile", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_FILENAME, &export_profile, N_("export with PROFILE"), N_("PROFILE") }, { "iprofile", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_FILENAME, &import_profile, N_("import untagged images with PROFILE"), N_("PROFILE") }, { "rotate", 't', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &rotate_image, N_("(deprecated, does nothing)"), NULL }, { "crop", 'c', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &crop_image, N_("(deprecated, crop exactly to SIZE)"), NULL }, { "verbose", 'v', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &verbose, N_("(deprecated, does nothing)"), NULL }, { "nodelete", 'l', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &nodelete_profile, N_("(deprecated, does nothing)"), NULL }, { "nosharpen", 'n', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &nosharpen, N_("(deprecated, does nothing)"), NULL }, { "interpolator", 'p', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &interpolator, N_("(deprecated, does nothing)"), NULL }, { "sharpen", 'r', G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_STRING, &convolution_mask, N_("(deprecated, does nothing)"), NULL }, { NULL } }; /* Given (eg.) "/poop/somefile.png", write @im to the thumbnail name, * (eg.) "/poop/tn_somefile.jpg". * * If */ static int thumbnail_write_file(VipsObject *process, VipsImage *im, const char *filename) { char *file; char *p; char buf[FILENAME_MAX]; char *output_name; file = g_path_get_basename(filename); /* Remove the suffix from the file portion. */ if ((p = strrchr(file, '.'))) *p = '\0'; /* Don't use vips_snprintf(), we only want to optionally substitute a * single %s. */ vips_strncpy(buf, output_format, FILENAME_MAX); vips__substitute(buf, FILENAME_MAX, file); /* output_format can be an absolute path, in which case we discard the * path from the incoming file. */ if (g_path_is_absolute(output_format)) output_name = g_strdup(buf); else { char *dir; dir = g_path_get_dirname(filename); output_name = g_build_filename(dir, buf, NULL); g_free(dir); } g_info("thumbnailing %s as %s", filename, output_name); g_free(file); if (vips_image_write_to_file(im, output_name, NULL)) { g_free(output_name); return -1; } g_free(output_name); return 0; } static int thumbnail_process(VipsObject *process, const char *name) { VipsInteresting interesting; VipsImage *image; VipsIntent intent; char filename[VIPS_PATH_MAX]; char option_string[VIPS_PATH_MAX]; interesting = VIPS_INTERESTING_NONE; if (crop_image) interesting = VIPS_INTERESTING_CENTRE; if (smartcrop_image) { int n; if ((n = vips_enum_from_nick("vipsthumbnail", VIPS_TYPE_INTERESTING, smartcrop_image)) < 0) return -1; interesting = n; } intent = VIPS_INTENT_RELATIVE; if (thumbnail_intent) { int n; if ((n = vips_enum_from_nick("vipsthumbnail", VIPS_TYPE_INTENT, thumbnail_intent)) < 0) return -1; intent = n; } vips__filename_split8(name, filename, option_string); if (strcmp(filename, "stdin") == 0) { VipsSource *source; if (!(source = vips_source_new_from_descriptor(0))) return -1; if (vips_thumbnail_source(source, &image, thumbnail_width, "option-string", option_string, "height", thumbnail_height, "size", size_restriction, "no-rotate", no_rotate_image, "crop", interesting, "linear", linear_processing, "import-profile", import_profile, "export-profile", export_profile, "intent", intent, NULL)) { VIPS_UNREF(source); return -1; } VIPS_UNREF(source); } else { if (vips_thumbnail(name, &image, thumbnail_width, "height", thumbnail_height, "size", size_restriction, "no-rotate", no_rotate_image, "crop", interesting, "linear", linear_processing, "import-profile", import_profile, "export-profile", export_profile, "intent", intent, NULL)) return -1; } /* If the output format is something like ".jpg", we write to stdout * instead. * * (but allow "./%s.jpg" as a output format) */ if (vips_isprefix(".", output_format) && !vips_isprefix("./", output_format)) { VipsTarget *target; if (!(target = vips_target_new_to_descriptor(1))) return -1; if (vips_image_write_to_target(image, output_format, target, NULL)) { VIPS_UNREF(image); VIPS_UNREF(target); return -1; } VIPS_UNREF(target); } else { if (thumbnail_write_file(process, image, name)) { VIPS_UNREF(image); return -1; } } VIPS_UNREF(image); return 0; } /* Parse a geometry string and set thumbnail_width and thumbnail_height. */ static int thumbnail_parse_geometry(const char *geometry) { /* Geometry strings have a regex like: * * ^(\\d+)? (x)? (\\d+)? ([<>])?$ * * Sadly GRegex is 2.14 and later, and we need to work with 2.6. */ const char *p; gboolean had_x; /* w or h missing means replace with a huuuge value to prevent * reduction or enlargement in that axis. */ thumbnail_width = VIPS_MAX_COORD; thumbnail_height = VIPS_MAX_COORD; p = geometry; /* Get the width. */ while (isspace(*p)) p++; if (isdigit(*p)) { thumbnail_width = atoi(p); while (isdigit(*p)) p++; } /* Get the optional 'x'. */ while (isspace(*p)) p++; had_x = FALSE; if (*p == 'x') { p += 1; had_x = TRUE; } while (isspace(*p)) p++; /* Get the height. */ if (isdigit(*p)) { thumbnail_height = atoi(p); while (isdigit(*p)) p++; } /* Get the final <>! */ while (isspace(*p)) p++; if (*p == '<') size_restriction = VIPS_SIZE_UP; else if (*p == '>') size_restriction = VIPS_SIZE_DOWN; else if (*p == '!') size_restriction = VIPS_SIZE_FORCE; else if (*p != '\0' || (thumbnail_width == VIPS_MAX_COORD && thumbnail_height == VIPS_MAX_COORD)) { vips_error("thumbnail", "%s", _("bad geometry spec")); return -1; } /* If there was no 'x' we have just width. vipsthumbnail history means * this is a square bounding box. */ if (!had_x) thumbnail_height = thumbnail_width; /* If force is set and one of width or height isn't set, copy from the * one that is. */ if (size_restriction == VIPS_SIZE_FORCE) { if (thumbnail_width == VIPS_MAX_COORD) thumbnail_width = thumbnail_height; if (thumbnail_height == VIPS_MAX_COORD) thumbnail_height = thumbnail_width; } /* If --crop is set or force is set, both width and height must be * specified, since we'll need a complete bounding box to fill. */ if (crop_image || smartcrop_image || size_restriction == VIPS_SIZE_FORCE) if (thumbnail_width == VIPS_MAX_COORD || thumbnail_height == VIPS_MAX_COORD) { vips_error("thumbnail", "both width and height must be given if " "crop is enabled"); return -1; } return 0; } int main(int argc, char **argv) { GOptionContext *context; GOptionGroup *main_group; GError *error = NULL; int i; int result; if (VIPS_INIT(argv[0])) vips_error_exit("unable to start VIPS"); #ifdef ENABLE_NLS textdomain(GETTEXT_PACKAGE); #endif /* ENABLE_NLS */ setlocale(LC_ALL, ""); { char *basename; basename = g_path_get_basename(argv[0]); g_set_prgname(basename); g_free(basename); } /* On Windows, argv is ascii-only .. use this to get a utf-8 version of * the args. */ #ifdef G_OS_WIN32 argv = g_win32_get_command_line(); #endif /*G_OS_WIN32*/ context = g_option_context_new(_("- thumbnail generator")); main_group = g_option_group_new(NULL, NULL, NULL, NULL, NULL); g_option_group_add_entries(main_group, options); vips_add_option_entries(main_group); g_option_group_set_translation_domain(main_group, GETTEXT_PACKAGE); g_option_context_set_main_group(context, main_group); #ifdef G_OS_WIN32 if (!g_option_context_parse_strv(context, &argv, &error)) #else /*!G_OS_WIN32*/ if (!g_option_context_parse(context, &argc, &argv, &error)) #endif /*G_OS_WIN32*/ { if (error) { fprintf(stderr, "%s\n", error->message); g_error_free(error); } vips_error_exit("try \"%s --help\"", g_get_prgname()); } g_option_context_free(context); if (version) printf("vips-%s\n", vips_version_string()); if (thumbnail_size && thumbnail_parse_geometry(thumbnail_size)) vips_error_exit(NULL); #ifndef HAVE_EXIF if (rotate_image) g_warning("%s", _("auto-rotate disabled: " "libvips built without exif support")); #endif /*!HAVE_EXIF*/ result = 0; for (i = 1; argv[i]; i++) { /* Hang resources for processing this thumbnail off @process. */ VipsObject *process = VIPS_OBJECT(vips_image_new()); if (thumbnail_process(process, argv[i])) { fprintf(stderr, "%s: unable to thumbnail %s\n", argv[0], argv[i]); fprintf(stderr, "%s", vips_error_buffer()); vips_error_clear(); /* We had a conversion failure: return an error code * when we finally exit. */ result = -1; } g_object_unref(process); } /* We don't free this on error exit, sadly. */ #ifdef G_OS_WIN32 g_strfreev(argv); #endif /*G_OS_WIN32*/ vips_shutdown(); return result; }

ACF}ILPV[G`CdhloDr1suouDurq"lgQ_XQIAA8#/&@:< ^Pfhijjklmnoppq?q!oo2m(jfcd^YTNHB>*952/-- ,,,,,w,V,,,g- -w..P/15:AH~OsV\cjHquy5zE{{${"yGwIrmf_X.PJuDF?E96D2212q333334568:9}0)"U wfik7lm2mnopqrrMPFD?k:4P0--:-.(./////013 457:3=AFKQ>V\afjn:qsuuttqnid^YSkL%C;45-9'  j{kmAmnopqr9rrsr'pn^lh/c^YSMVF@;B6-2/",*W)'(#()*+d+++?***{*9))W)*'-N1U7>FELTP\udWl`qvx5yylywv,qle]~U=M3E>82/,,m,U-O....e.-.9./s0Y1248L;@EJTOU[afj*nqpt tvtsqmCiXd`v[:U2MF?82+%OL9kAlmno=pqrKrssrqolid_YCSMF@T:5X0-++)'&&P'')+ ,,,o++I***G)(((c*.4::HAHPY'aRiou$w>y1y yyxvr2m/e^ZV8NIF?>92/n,,H,(- ----,h+++,,,./268:>DI~OU\afkosPtutspnjHgHc$^RWQJD>]7h0(q"ijkm8mnopqgq{r3r/qomj5fv`[TEN G@:40,*)(Z' &&`'U(}*8, -@---,Y,,++;*)X(*-428?EF7NV^!fmruxMxyxwso h'aaYRCJCa=62/W.-._...C-9,-+Q***z**+,/F2 6(:>CIP%V]bhmqsuuu9sZqfnliUe`sZTOIB;3-'ik3lmhn*olpTppqbqUpnkgcE\VcODHB;5/,z)[(''&d&c&')*,.C..R-,--5-1,z+))*,1V6=+DJ'PX^eCjosJv%vw(vts!qolhd9^ZTN*F?82hik9lVmMnoWoopbp-o"l(ie_XQJC=_6|1,D)'b&&d&&u&'(F)+j-n...G--n-.f.u-,*)+D,05 ;AH9OW~_fmqYudw=ygyPy"v6rmNgaZ*RKqD>!9O420I//7/".-,q+&))R((((()+:.049 >DJR Y^`Qf>l`ptvwpwvuts5qncjeb ]W\PILC%=cg;h_ikElmnnnooEmjbgbq\yTMFq?B824-i) '!%z%%&G&C&&(0)+-l.d.---./c/R./,+R*+,/3g8>ELT\ScVj9o.svHxy#ywStokd]V_NGA;630//P/o/0.-,z+_*)))G)*(()y+h-9038=DKSZahUm}rWtwLwxxwvusplier`_Z SWMHfOgDhjgkmCmnKnHonUlheb_YWQsJ"C;5/+c'%$%L%&/&&!&m')A+&,----.}///.<,+*+,R.1x6K;.AHPX_ fEkq&t7w:x ywuqmgaQYR2KD>9 520/0 0//S.-,,+b**)))~*r+F-/48\>E(LT+[BbphTnqtvnxx9x?wawuspn+juf:`[UQAefgikhllmmnFm>kUgc[]fVwN`G@82- )&5%$b%%%%%%'(*,-T--.S/1050V/.V,++F++-{/A36=CK3RYa^gmquXvxxwwspke_]VNH&B<8k310001 002//+. ,,+**)f){)p*,/p28>}EM?T\ncin6rmtwAx"xwxwdvKtr.o%kgtb^[ZvefgikHlDlmAmZml4jeaFZSKDD=o6'0r+U(%$$f%%%%%k%~&(j*~,,-o-./0n0T/.[- ,A+++,r-A/28A>8ELTi\ binIrtvvvt>rQmhK`YfR:KF-@z;63111111+100/.(-(,^+w*))@()),%.38?F}NU\dinsqttvYwRwwKvv1trpn jgc`ff~giuk@l(lXm%m$mk hc^WPH{A:A3 -)&$$($#$%q%%Y%9%F&c(2*B+,m-.-/0000.-,,P,+++D,.39`@GO V^ ejkpdsu'tusro jcm\#TNHCP>9@5u2212112!10/n.C-/,(+)('''Y)+/E39@bGOW^e#jncr|tv9v:vvCutsqomkhff\fgikllmmmLjgbc\UUME=770<+j'H%###$%5%Y%!%%4&J')*+,a-O./r0!//.--B,,n++]*+-L27Q>bDL#SZbhnBqsrrqqKnjd}]V^OJE@;7i32k1111211:/.-i,P+0)('+&&'*(,/5P:BIEQ Y `fEjoMrtutuXttsrPpornkj=hfffh j1lLmvmonmjgIah[S K!C;4O-);%~$2""#A$&$$$$$& '))*E+(,9-c.!..g.>---g-7,++G*J+;,1r6M4DkKQR>Y`ek5np+ppFo]o ljJeS`/YSMHQC? ;64 11001#10/.H,+*)S'& $##$.&,( ,06Lo0oQnndljfLa\5VuPJEA<85N20/0%0?0/.--+*)(~&$#`"!!# $L'`*0K6p>GOW^ dinwpqpponlkkjxiiRffhTjm+o4prr|pkf_X OF>A5}.)8&$T$$ $%!%e%%%\%/%j%&i&'q'(S(t(|([(A(<(?(u()%)z**+-K/2b6;FAGNSY_djlnno n]ndm8ktgd0_LZqTOiJ D@<8c4g10Y0//F.-:+*L)c('K%#" O !!#&s+19BNJSYaf[lnonnmlWjj\jhh#gffh(j"lnphrrppgje^VME <4-(g&s$n$$%&g&&&&&~&&&&'w'('''E'''''4''()+-137&$"!/#, "'-F5=FqNV]Yc$i~lnllljimi hgg,fffggi4kmoWqqnhd\UL Cn;b2,(&$%V&%'([())*(*.***I****))i(((T( '''( )R*-n0!37 ;@FLRPX0]cgjlnno3nnmlji fb^ZpUdP=KFAT<8842e0G.-H+)(i'J&h%O#"b P!<%+Q3;D&&%#"^!$ 1{ U$u)2:BJR?Y_g5klkkjihhEh'g^ffeTdeg i_kmo)mjd_3X,PH?8X0C+ '@&%'&(+L,.^013>4d5555*5543 10}/3.8-`,+++-x/38 =B GMkS+X]Bb eil3nopKooooon4llj~hf7c_\W5R}M1GB/=941.,)(&&%$#"!! 0 f $*2Y:CBJRWY`S7&/]*'['&(u*-V/H13O579;`;;;c;;:97e54210/]/,/U14v9=CAHNTZs_cgjRm&oq)qqpppppotnmlkihea]sXSOMkGTAABBoBo<:9.765'55M7:?PCIOT[`_e)hWk[mWoq.rs\sr6qqqqCpp#o~nnlkifb^pXRKE?94/,((&$$;##["""U"2!!}!!"%*2:C)KPSZacimnmkmAlOji|hhAggg`|`Jacf]ijNkide2^1XRK C<&5.u*(C)J)h+O-1:369=]AD FH3II0JIIFGcExCJAX?> <;::=e@!DIDNTIY_dhkWmoZqirtt8t3ssgs rrqqq*ppYonlkg~cS]$VOHB;54/+'%##C"""X"F"^"X!!!!!%O*p2:CKTS8[aiomoOmmlkijhRggfgg]]_behikhac\W9PIB;e5.?*()*S,m/ 259.%71G,(f& ##="M!!!!"!!' !-!b$*2f:=BKnS[bGimon3n lki;gggFgh[Z[^$aIdgi"j9g@b[kUOHA:4-*(*+ -J04$7;?DI^M{QQSUVdWWrWU9S:PNMK\JHzHGIKOSgW\afjlmHnoqstuuuu~ttIsssssHs srrrqo"ke`XQJeB;v4p/0*1'^$#"a!!@!]!!!}! z!!^%*62:nC*KT2\_c#jnp9nnmwk}ikhgghviLVXd[_c}g(h\i|faaZ[TNH4A3:E4]-*)Q++.81,59>IBGMQyUXSZ[]\\ZYVTRQGP4NNNPRUX\ae|ilo\pkqZr@v93-*)+,/j27/;@F KHPUZ%]_a'bbfb&`^\ZXWV8UuUV.WY\N^b+fimVoqrs~t=uvwwwvuu ttt_sssst>ttusqmJhb\UNF>871H-)&#" !/! !0!%w*3:CLU6]dkoqKoonykigmgughjLPU[f`e=fhBe`XS MRF@X94."+t*C,b-04\90>CHNPSX]h`ccRdfeedcHaS_m]\D[[t\M]^`;bdg9j`mRoq:rstuHvMwwwwwVvuu!ttPssssttstu srwnjen`iYRJC<5b0k+($" !! !!%L*U2:RC3L T])d!ko2q"oonjgeefgThFKQXy^ncegd_XgRM/F@w94i.,*-.2}6 :@EKhPV[`cf"ghiiAh}gjed:caaacdeg#hjlFn_pAqrst^tu.v vwvwwwvuuJtttVsssstEtu,tMs olOgwcA]VO9G@f9M3.*&u#m! z !! } !6$)i1<8AJS,[bjin7pyolomuif&dd>d?eg @{F+LT[uadtgd`MY.SNGAe:5F/-+.034L8#=?BHN6SY>]bdgi=j]jqjjihgxfff8fghjkmn/7"@ HQGZaBhlo5nMnBkgac#```Uac9@GPXe_cfcd{`ZTOHBb;60d.,/*161:]?EKQV\C`dgik@lllllIkQjqiijjkl~mnopqGBOX_gPk2nmCmid`]2\\H]_3;$CJLU] anedsa[V{PoJDC<7:1x/#-0S3%8HFOXX#_ofjIm7l5kjgKa[XFWgVW Xq.6 >HQZ_ddKb\WQKxD>8Q20,.1W4:\?oELSBY\^bfZiakm-nnmn*nnnnmkmmmn@no_op\pqZqqrppUoop?p1pEplq rsXtu"utttttqtssrrrrrar;qponn~khc#\TLEP>81+&$""%!!k #'5.5>G+O[X _XfQilkdid^WSCQOP9Qg)k1;-ExO$X^jddKc^jYRLFQ?Y9x31>/2R5DKuRZ`eyilRnno0p:pppqpppooojooopp)pppposnn[n9nJnoovopqrstItvt8t;tss^rqqptppopApq`qqXqp-nrijc1[SLE>|6A/P)Y&O#"!! !r"%y)<088A$IJQY`gilbie]UN3GD2???!^*4?J T\.cdfb]`V OHA;531{4j8@)FMU0\OcLh9lnp{pqqr&rVrqr=rqqppSp/poooqooonmmllmAmn+noHp^qst!t}ttptQss]rqpoonnYnnQnopop>o+mi9c\U}NG@70*'8$s#""3!q"5#&*2 9BJRqZargikh{cGZ1QI_B=76,5J'175x359AHP[W^fkoLprrsrs@sssrrqquqpoo]nmmWm!mAm|m>l^kEjgj\jkl.lmnprPstu6ttt sErGqmpioGnlxkk+klcm m>mmml.hd^AXpQJgB:4&-)&%## "$@%).6O>FNV^%ciij&d]RH?6X/K(b%#O +k6A)LV_kch`fcM[^TME}?:86&36$9AHPXm_tu*uu>u8ttEsCrHpo8mlk@jkNkllelmllif-_YRKD5^*"\2$/":EOYX_Kefd]WOJH1B;x746h94@FNV]dinpr+qrvrrrQrBqpnmkjjliiii[j!kLl7lllmimn-n/mmnplmmemm!jg`ZS?KD<FNW6^\eYhkid[*PD:!0O%_r +-!3+5@KT[bcc^;XYPJ!D0=9579-?iEM-T[bhZmp qq,qqqq'ponhlj|hgbff{fftg hZj klmn2oopCpoxo@oqOrt?uuBuuuuEtsOr]qBonm1lQkl lmzmn%n|nn3kgaZSjKC;G3,'#"!!!$(t/7@HPY-_f1hHjfaV]K?5?+e  J u tmQ&1H;F-PX_ac$^YRLZF|?;7g79t?"DKSZpaufloqOpqppp[omligUeFcKb{abc?dfihjl,mnopq_qJppq!rt uQvv vHv8v@uusrqp\ommlmjnnoo)oo~olha[qSKC:3*+&"! H!3!^$)19BKR[Madfgi>d+]!Q}F;C0y& l% !,*6R@sK Sh[b^a_[UO~ICa>99o:5?ChIPX^dj]mooooo*nmkDheb`^\[\]`/bePgj-lpn'opqqqAq'qstvuv/vGv}v~vvhuu trqupAo*nnopppppq=ppvmhaZRJA92G*%"!Z C!"U&,C4wAGN UM\PbEh1kndnnmmlkiSfbF_\bYWV0VWZ^LbCehknDpqryr)qq,qrsttuuPuv5vwvv u0t&s)rsqqqqr r6rmr|sr.qmhyaBZ$QI`@81M)$!s!7 4!#^(}.7C>FOV^aeVcb0ZQlE{; 0& ky* E!*4?I[RXB]^^ZV[PJE?=;>=@rETJQ&W^cgEjEjkDjmjhgepb]Z W0TORPhPkQ TmXP]AaeiloqUrlr qnppqrlssttuvwUwwvvFuu&ttqt!sssssssrp0kf_dWOGS?K70($!!!##O%+2<:GAIQX^`c"`y\TJ?4+   %c/!9DKN5U(\^o`F]ZcTOeIC?=>(?2BFL\RX^bef$ff+edb`y]LY/U+QNM1K3K7KNRJW\ayf~jnprrrGqqrArssmstuvwcww{wVw vvuunttttu t}sqo(j3d]aUMxE=5u.'$}!">" $(/R5=?DL}TZ(__a3]:WMD 9.%k W 0 W)46>IwQYY]`_^XT*N[H7C??#>A>CPGLlRW[p^?^__)^][YFVRNKH~GEtEEHKPU[`ejmp@qqqkqrrsesttuv|w?wwx www2vwuuTu=u^uGusrolpg(asYRJB;Q3h-<'$"#$Z(U,3:A'HP.W2[C_^^&XQG>=3>)2- #465R I:$.9DNV[a:aa]vYS MGB@5>?@oCNFxJOSVWXX WViTR6OvL HoE.B@p>?j?BEJMOTZ`NeiWlno6opqr[rs%st2uv/w(wxQxxx[wwWvvvvvusqmic]VO7Gv?8L0+&%#!$&+07>;ESM^TY\i_]\[SKk@6-D#R hcu2a K(3?IRRY_ac~`](WLQL3FuB?? >@cADkH KN^ObP OONM,J}GDnA3>H;<9q78S9'<>CNGM%SY^bfik4lnpqcrrsKtu'v^whxGxxx|x,wwsw2wvvMu;t/qnj5em_"<==>F@&BE>FGOFFF>E`C"@=9632 0V01C46;/?vEK7QW\adgj9mo0pqrstuwZxNxyxxxux)wwQvuuXsrvo@kfE`ZTN F?892-+ '''+d/61<BIPVZ^ ]]XQG7=3*?#>>c==B;963N0\-,(***-7/48$=CJQJW \P`XdngknMpqs.t&uwvxxxxx@www&vju3trqonjaf`r[U?OI0B#;5M1>-,B*G+,1b6=b _ZV3Q#LFAX= 98'6(43210/.-y,,+8)(&$###%'T*-28+?FMSY^c:h3l or stuv vvv|uuDt\sqpmkigeib^(YNSNIHC>|941F/./1?5 9>mCIsPUZW\u^]]XRjH=3m*%! .K$)A 7B(2=bGOW\}abb^~ZNTPKFG@< 8531g/l-o+*#('?&/%g%$$ #C"""?"x#%7(*/T4M:AIOU[afkoXqstfucuvuusrq\omkahfBd b_P\*W[QKFA=29l5>2001037;@E(JPvV[ ^<^_^[ULAe72-$49 RV-/Hpc !}*5b@ I6QqW]`b`]XUMQ{LGB>:W742/,b*(X&V$#O""# #d#$$$%K&(,*-6135};nAHNTZ`ej3nprsttu+tlsyqp_n}lj)g]doa_]}ZW"R(LFA=:l8532I35:C>[BGKQ0VZ[J]_P^U^[\VNHD:0~' OQ'&<5z7 a#/-C8B]KmRY]bZba]\ZVMRNID@<98'6558F;@DIvMRX \'_g_`{^]VX:QkG)=/3)!px $}s]'_1BM ! c%n/t9CK^RW^IaYb`^oZXUR_MI+D@=951.+* ('&&'E)>+3-/14 6O8_;>BCFL|QV[`7dhlnq qrrrlqpo mkiwfc`N][XU-Q%LZGfCx@R><5+""# aAD:jA&oWc &a0; DdLRY^c3dc`^\'YV@R5MoHD@T@hAD FVIKNP|RTWfZ\_adeg~i;k@lnko5op?pp^onmxkChebD^[YVT Q'NyKJ@HIHIJLOGRVZ]l^`_D_][VPH? 5-&&b Mjq]nT'o, P X)4[>HO8VN\*c gkjjgf ca]YUQNfK5IFFEGHVJ[LNPRVTVXZ\_aLcseg hLijklTmnojp!pspppXo,n lifca^p\0ZWU?RP4NMsMMNOQTW[i]_-^][ZX TN)FV<4-%` MvJBs|A 9(]C 2 W!k+69@IqQW1^ndhjxmndlkHigHdb^}ZW`T+RP OOYPRTUWY\^_aceBfhj klSllmmJmnop$ppqppozntljhkf8db `7^N\:YWU\SRRSTnUXV[<]___q]s[YvWRLD ;2q+'$S O6jv?BS2B ?a",7=AISOV\\Rcgh;kkkeimhQfec`^#[YXXeXZYwZ\^R`LbEdefhXijkl}m7mn(n4mmzmUm{nnoWoopBp$oo$n^m&kj^igfdcla_i]F[&YXKXWXZ[]^^\ZX:VoSSOI_A`8/)#!  Pg8-V2PJOd @##-7"@H6OT[a+fi jj,ihgg&f 5-C&S C r`!9FmaLAq Bn#_,_5>aEKPUXZ_bdKddudode|fWfg2g1g)gAghjkm.nxoodoLo}oooSnmlknjHiBhggSg gyhi"j"k3lem"m~m]m`mWmlmemZllSkfjih1fAdGb|`_^]\[Y9VTR%OKG6@91*6$pf e}y+ !HRJY8| kD"u*3;AFJOMSX\M_I`abXcehj!klmm\mnop?ppJonn~mm$kjxhfeVcc:bpbIb bczdf)giijgjSjpjjk_kkkkQk:jigec{ax_G\ZaWU)RPNK:GrA;4X-<& }W) /Y 6\IbTJb|j@ Wc!(0L6<8?BFJ}O@SWYvZ\_bBehej k9kyllBllljihfedb`^\[YYYQXXXYZ\$]_O`abbb&bccde>eeeeVdbv`J]VZW\SPMUJHFEA!<55.("oE # &2nZ \SBIYna.E2 yu% +[158N:>9BoG:LP7SlVSX\8_jbdfg_hfhiOhgelcYa'_H]j[mY!VT)QP(NN3MN N2NOQ^STVrWYWWX7YZ.[]T^__`4_^\EYqUQMJ,GDZB3@O=:50 )#( #7j+6nl%AD;@CC807C ? zFt &*~.;0359>iCfGKNQTWKYp[[\]^_Q^][XVCT QOkLIGZDCNAAA!AnABUCDF*GIxJfJK*KMNPRT#UEUcUTSQMIExA><3:38-52}.)$  9x-u/z{0aQt-,%7E?) *; ="%(+C.16L;7?DHKMOQQRS3SSRPLN*KIuGDB?'<: 8q766J6678x9;s=">?@@A,BD*F%H*IJJJIHEB>;%85\20y-u*&4"\G ]"vipAx`DM|4G@# 6F " ; "$w'*$.927<*?BCEE0EEF6EECDA?\=];-86~31/=-,X++,,G--/802O345D56Y78:<1=0==== ;9p631.,#)W&!"e<- 8VJxlx+wN>@c#++'! 6~M r -2"&*/A36~8W9:>::{:98642{0k..+)q&$"!B ~ $ !"$t&'k(`))*8+L,.//01111Q0.,)'$!Eg  l/!q[r7g=^/&8b~!," g 7% N d#F&*,c.j/#///p.M,*(&$o"7-9V4(H-E!&"$ %& &[&&q&$" 2` Y ;!3eIxR)x`,K'U1/>ZljZ  p w)5!l"M#(#/#X"!j~Rc X W PDGI<:(1V Q ea4NWfJk|^aQp{]C?BRddR;2oRt 7 z>6_ #1JG X8a  i 1fYnN RD`~[MMsviaSNY]J x]'L_ C ) 0 F z q % , #l'=+`!31 E ; p|I6rua@4IgqSG<! ! {+mNuLC[:rR?tC05Wr}|%aVM^q%Q5K:FtP0 nx,g23mk vBpW32Nzf^]cO BRT3%(LhNHIfx>#& *hm/]ns`I;0P}<CwSJ55@`wjpiF&+)/GB"*jxqplj]fS#  '" u | tYEHCGKXozw`K98+oWQPp+_ojrqP'  )16TB4HWPB) B:`P9p_SPB>RMJ34;<FYfwsuN0#:49C5 ,JV@1>v,20}qiX: 7XaK308Ee zsypW3 %.;. #7AQK5W ~jWA@Vga> $0R bG@B2    %%)+/)% (3??9,#>l'{fY`dW8 2Ii ^9!   %!+77-% #,%&1@RWK;4BTy+5?5#pbaaWD. $?^yjJ;& j (Tm3x61oUJS2!O@T")%}(.(R'z$B!yT?h f   ( _ N c ` #rGlFDYZ'fE]Qa&\5 E   q`lH<kABlKNRO^ , & !["Q# ##G$&&%$!L/ _   & ( , = X > S u {  V  J hk|%~B MK  vv?; _!|!!t !f!"#$Y$l$B$$$#a"]{M ( J p f G D r  5 H P ^ v n  / E = > A F W _ J  bP9K8@  0)ZpSuw Sh+ uF,r!8!!E 8 S "f.} XeK Z p $  T  , G g x j I  $ ? : 6  ? 9az\ z - }NO-+{?!#n#k"! XLIP*R=T ` i   E 8 * > b q   : L ^ ^ a I l Q C :  vF|wQg:cD^]UCw4?~#^^:+2VvMDB> Z!H! HpH-' :    $    5 O i x  r F    ; j ` M G I F  - 4 MsFJ2  > x6G*V0QE1@(N6)[,h]K'!nE8 P 6  <{tDX,9HUm<  r h -   w N* -_  ; )]gC]=kCV[y|#gIu"VD\d g  } w EX3'b}^<iBDW<#"5 x > 1 I Q e  [ | SH@vRN RQhn ` . }$,?uKV & - S p W8NPC<& t^`po_F8:Z}+m]c}\2R4 P D r U   r  Y sO\Kv0EqRM;  Gl X  Q u`@ l&*jK?5D]|UxqX#  o   T l ! R :k%-, R c w " a   ( 2   x Q7_ bCyy}L#7U}0 '$" !j-.$E< 1 h  g h ] :  M t , @ .  = "   A t ; & 3 x y ~Oc1rRxG0o*)dxq\; +[2s_Xx%X3h K = H x d X ]  !  # m rX$y +OAxBR Mn33u8J`cQGT~v;PW@\  S U +   c q y ^ = 2 A w ` 4   ` S rOe<TzXfr21lu*rrR|sV> U ?f?.ioqv@DI%tDz q  o T [f33la.HhS>xxqC-Uj\=C;s{{aM*V W 9YbH)F7WCcg'D U i >uw!ZIF:  /CEm>ig$x#@s<l r m Z ?   # - 3 G T [ F 0 h Kn'B}KJ[z>n0R:eo7jzd7I!}8l4~P1%vr wK|i1 6a_u@< 9z^w}qzI$u * sW,nN,UYT)_%gvdx`GX~' fpWTzyg!hB}tb /p + 2dV}  D | !!i!!!!`!S!=! NL'= w s $ Z_X\[.h!=:}|T)wF6R+h&FPT^#- aZ _525L/*.@K1:b 5 25t|n[!^#S%K&()*+~+,,,%,c,,,`,-++++s+K+;**z)b(+&-$*!%3[B| G< Xdpq.tV>aY@IUqsC#9aekN[   DPu `PvcCT "$'o*',/T135u67i77777z777p766i6555555I4e3q1/-+A(u%"Y`z [|?rQ'xh{q0iqo13zM>^tYm x h} ^!m#%'*m-)03@6F9,;u=?(@AAAABAAAABAAo@@@+??????]>=<1:8w6d31^.+)*&$" u8 ,3+ 'M&CIn/OrU g}' /^d<,g E 1 "6%'i)*,A-/26Q9<@ BEzGBHIJK"KKKKKKLhLLLFKKBJJJJJJrJ;IyHGElCkAu?H=:86-31.,P)':$"\'A. t ml \^k;FS1dM{}~T`` :: $'T*g-032~48579t;?BEHKNPRUTTUVqW)WWWX XbYYYYXXWWWWWWWgVUbSwQO6LJ\GECA@^>`<9 52/C+(%3!x 'BC\H9N|.D& Bz.V,  co!$(|,0469<>J@+B)D5FHyK]N]PSUrWY[]b^s_z`:a2ab*bCb{bcddcc bb^b|bbbbba`^\Z)W|TR-PN/LKJwHEB?;A72.+4'w# N ?*t0"KQ/3:XxBQe0 J+6#0'P+f/4;8<@_C*F4HK LOPRTWBY[]_b.dgf grh9iij{kkQkRkwkl3lwlzlkkjk k1kkl.ldkkiZgeyc `w^ [YXeW8UT{ROKH940X,:(#TR +u1+9bOE+"Ohpq:0,@1j $)|-2[6;@E HLNQTVXZO[]'^`ub\cegikmmn=nnoFoooooooooonnfn}nooppzpTp onljhg0emca`d^]^[UYwVSO;JE?:S51W-9(##a ck -(G:5\|2>pt g ^5$).38=BGLQVTXg[D^h`bcefghiljl#mno pqr}rrrrmrrrrzrQrDrYrpryrAqqfqq1qWqr2rss1sCrrqponmlkjj2hfdXbm`]YUPKiE@;72S-' bB5 j%. 5DCo 5D$*/~49>CzHMRV[^Zadyg*hj+jk{llm@n>o_pHq(r>s"stt)ssPrrrrrrrrrrrrkrqqqrrTrrssrrr{rqqbqpooEmkigec`^+Z0VPKFA<72E,& G k;m%" 870@ct9 X #c)/4:b?jD9I{NSX\\`dngjlnopqqqqrFrsYsttu?uuuu]ttOt$tcDJP*TW[_+begi2jl*i-#1T5:?D.J PUZN^ `cf=hj2k^klm m2lll6kkPjihhhQhij?kmyoxkxxy&ysyyzyyyJxwwuts qp(nGl igedcVbab3bdffi k llmmKllojhd`[lVQ1KBDK=5/K)"0"  T(+,-.0.135h8d<@E2INTTY^dadfwhyijjjjjaihgffeJdCc a``w``aEbdfhjmAodqys tu`vvwAwxxyDypyyyyyyJxxY'^>bfhk2kllll)k;jeigecb4`_^T\[WZXXkXXY[w]L_b dgbj&loNqs^tvwpxxynyzHzJzZz8z/yy]xwvuxwuVs3olTgc|_k[XVSOL+IFDCB?AA5BDHL|PUY ](ahfjm_o0pqrr{rp'njhc_(XRJC<4v,# wGuZ|\^^_`bac:efugikm_nopponliea\WSNK#G1C@?=='x@BEHPLYPV5[1_dhm&ptwlyzV{zzMxwOtqmiFd^Z4URmOL#HEC(A5?6=<;e:;=kA7EINRpVZ`dhknpqrts-rqqhom.ifX`ZSMfF>,5^,}$Jf;C L`-b5cd{eefhhijkm nnooppRpnUlciea\WQLH_D@=e:~98776Z54454e4679;j=@FDdINTPY_2dOin"rvNy(z{zz_xwsp[kxfC`ZZUGPILFHFE#A?=<.:9&7656\7:>BMFuJNRW\aei0kn=oqrrQqom?jfa[;UNG?6>-% G [Eegh~ijijkmPnko opqbqqbqyposlj*f1bN]WqQPKwFsA=964I32911`0//F../0=1D2358/GMTZ.`fkqkuxxz{Izzxvrni b\&U{OJ EA=:E8Y66a543]2o1z125~8;?0CAFKOTZ$_ cg[jmXp"qsLs rpo-kgbh]mW.PH@6.-&\G Lmg ijkl9mFnmop{qq\r8rrSqPpoWmCif^a]WPQ=KE@';u74[2/..Y.I---,,+,,-I.'.02=6):A]GNUg[biotcxry{Bzz\xJv2r mgt`YxR1KEA<#853\2I2k2G21[0/0'024_69rq95 1.,+"***+!+,+'**~*'***!*y*+,0U4;4AIb8490F-+6)(()1*!*+y+++t**v*8)))**{-?06="DKS[cktq6vcxqz;yy`wQugqPlfL_XPgI7B.<7/30/..//=/?/..b./-/0B0247;.?CHMTZ_dimypArsEsrqo#lhe`~ZS_L"DS<4,%h)KklnXoopXqrsstttsr,o5lhc]X%QK D$=8s3/`,*m(d'''(y)+,,,,B+c**N))(((k*-928@HP>X`i$otuHwz%yywvd8L3/1,Y)(''4'*(,).*,5-U.)--e,y+++`*))#(w)+06;=DM5Uq]elsvsyVyz0xwsoid]hVPIB<853110=//.r--,w,>,,#,,-.04_7<4@FLSZe`}fcjo[qt%twtsrp^nkhgb] VZPHAI9k1k+V%jAl*noprLsittKuduu/rpylSh@bn\0TNG?f83/_+d)F'';&w&'(W)+,.7..-- ,,,+*v)F(D)Y*/ 3:AIQYbPiopEtWwxzy):163p0//..n--,,r++g+$*))o)\*+.1Q5:A]HPSW^eqjposvwix4wwutrwoxk gb\VZOJYEhjkmopqr@rssormnke_dWPqHA2: 2-)'& %%%%%&.'(*,^-m..@./r0L00=/-,+x++-0z5i:[@GO;V^2ek4p\suvwvu;r/okMf`ZS LMF^@;7"300/r///n/.Y-,,,$+4*f)*5*,.B15<BJQyX_f#lVptKuwwwvvtrjnkgzb]WS:NhikmoDpRpqr rr'pli b[SL#D<5/6*'"%$%A%Q%%E%g%'0(*,J-Z../0111S0)/-,,,h-/~3b7S=ACeJR9YaKgvm;ptuVvvv srSnjdc]VPJD>841z00(000001/1.--,+)))W*W++-16v<-CJRZ-ahm2qt)vwww*w>vjurfolshd_[X:hikmmpoop.qqrpnjf_+WOH@9-2,) %%#$%3%_%}%@%[%'(*, -..0 1 1210//.,--'-.1W4N9?6FqMU0\ciin r suuuvtsfplf`hYSSM)G,A;?62111122G10/y..,+*d)~() )*-16=ED)KSZb|hamptJuvvkvv;ugseqUnkhda_hik%m,noopq&q1o7m6hcR[T0LD\=B5/*,'`$$$%M%%%c%t%&(*[+,-.0A1h2Y2l2I100&/P.---5.05;BHPrX_f k>orsst sZsmqwnhb[kU OAID=840212Z23 33^2100H/:-,t*)H('&')J-!1+7m=EMT\cikmKqsuuv7uut#r}pHndlDig}ehi>jlnzoMopppmkf`XQIAK:H2-(&$}$|$%q%%%m%v%&()*+[,v-/D0f1G1q11400X/.. -~,-/4E9H7Y0_+'1%i#$ $f%%%c%M%%%U&4'f()()*,b-.//0J0u00y0*/`.N-w,X-F/38&>DKSZaWflntpOpQppwpomhd]WQL6GQA<742223-333A251@/.n,*(&%$x$$')|.K3O:&@HQ'Y`!ekOorostztts,qpo'nlm&l9kg)gikJmXn^npLpdokhb\SKC;4.e*?&[$#$$_$%)%$$$%&'a'(:)I*+,~--|. ./W///%.c.-/1.5: @F'LSZ3`fjmQoBorooonlhd|_ YYSiMHC?: 6322N222y210 .-c+)'& $##}#d%&*.5\;CKT[ah7lprss1s?rVpo,nOmll kffhzjlnnppoPk gya2YQHI;FmNV]djo#qXrr$rLqton@mxm(lPkkffRgil$mnvppjnje_ZWO8G?C60i*'%H$$|%"%q%%%%2$$%A%]%&&'t((L(()*U+%+,-)-./14O7;Y@EKRPVx[a]ejVlnPnnnn~onPlilfb^YTGNIE@jnll%kkjjteeg hk7lmp(omhd9]kULD<4|.;(&$$$%~%%&/&%%|%%%a%a%&}&&&' 'k(#()*3+", -/1Q37:;>CxHN$SCX|]bfjlomn1nn|nnFljjh`eib@]Y6SNID@S; 7$4020/n.,+@)('&$Z"!A ky!R#R(D-5=FkNV^ek|npYozonmFkjjiiiddfgjklo0nlfbG[jSJB;2,'&.$c$$%&e&':''''''k'D'(I(4''_'M'|((o) )|*+.%0b3~6:>CVH}MRW$\0`ei;l/mcn|no&o2oenmkjhfNb^ZUOJuEV?:641>//-L+*T('&%#"$ w !& +3;{DLT\cFj5monnml3jiiihhd?ce2fhjl n4mk e>`^YyQI$@9g11+~'%$S$%Y&'1'()G)* *V*C))**`)(''u'T''(}()+m.`1a5z9>SC;HNS,W[`diknnoqoRooooRngm7lkigd!_[UaP JFC> 9/51/2,+7)|(.&%$#V! * )$S)19lBJS[*ai6mo mmm kniihhthYhtbbcegijml iEcJ^OWPG?8L0K*&%$%3%'O(/)+*j+,-.^.u.R.0...,+-*I)))))*,038=C,HNTY^ aei#ljnupvqq pppppmonnmljhqd`[UOvHBf<8C30,*('&N%p$f#W" !2 >> V$:)T1k95AJRZaiImUoNnnmkOihhh;h6h^aambd9ffhikjgoa1\UpNE>07 /@*)&& %%&`'(*B+-/1.2K2223320/8-,++A+F*,@.2?6s<:AH~OUk[`pdgjmUoqrrrqqqqqq0ppp9on li|e`[5TMF@;:40,*'&&$$Y##"I!!; k  = $O)X19IBJS[aimonSn/mkAihhlgh hI__abe0gijiFe_LZSLzD<6.)&&`%&0'()+-0Y35/6789=:]:w975320//Y.016Q:@FMT[aIeilnp qrst(srrrrrrrdr>qqpolie_YlRKzD>472Y-}*`'4%##z#""U!!!!( R !R$)24:BKwS[bj`ndp\?]@A@>E7K|RiYg_eimJnpqsOt/tttt)sssst tssssrp^miGdu]WP;HA:e4c.+J'%#""r"v"+!"!!!6 !H!%*,2l:=u;:9:<:@DIOV!\bhOknoq=rOstuNuuttttttuu"tuttVrpl~h&b\5U5MFb>8-23.)&$Y#I"_"?!!!!!!' !6!%+*<2y:JC!LT\ckopo]o&mkih5hghWiXY\_'beg{hfkb[*UOHA_:'3,(&'q'A(_),. 1/48=AEHJLNO/OLJyGEWCA@?@AE"HNCSY`ek n?pqrcsttuv#uuuQttuuvv*v.vv[vGv8tsspl:fa:ZgS/KECQS#PMKxIGFfEFGJN RW\bh8lorrsqsuvvvv`uttuZv#vrviv^vXvvvutr=o9jXe_0XoPHAz:l4.*&$""J!t!J!V!!> r!!%V*d2:eCPLNT]Sd)koqdpp nluj1hhhijPSOW3[`rdflhe7`uY6SNGP@92,s)'F(c(*+/2O6;@5EJOSVX[[B[+Y)VSQOMKKLMPtSHWy[`rf jnps2tBu ugvRwwwwBvuukuvVvkvMvLvhvvwvvt qmic]VN[F? 8y1,(9%#" ! ^!!%W*b2:\CFLCIOSW[%]D_S__^.\:YWXUiS R QSXTWVX\v_dhloqstuv+vw^wwwwvXuuvuuuuvv+vvavtsolgKaZSKD(= 50#*'p$" y u!!%:*!2&9BKT\ck npo~on(kmhgAgughjDI4NU[adDfd\_XDRMF?82,)z')6*,/P3k7u/uzuuunuBuu;uvNvcuvtrpCldhb\UNhF>71l,'$"*!k !^!{! !F!$)K08_A IQZwahlnmcm>kgecaaabds78=E!MU]aec` XSMG6@d9B30-*H(s*:+/3^8^=CZHNTY^adfhOhj)jUihgfeeeffgi=jlnopqrSs?ssSs stmu uruuuftu#uuu/ttttu~uuttxs qnkfaZSKC<5V0.*&#~"x!!!!!>!l!$(07@RHPY\`gkJmlEki"d`]]] ^Z`1f8@IRZ_dGcx`Z#TNH-Aa: 3-+&)J+>-I15;GAG.LRUXE]aQcfh1iiijk?kjhiii%i(ibijTjkmnWozpnpqgqr`rrNqr^X6P?H@N9^3-t)%=#"""E"8!!"%3) 0?7@HPY1`Jg;jslk>jKfa}\cXWV`WOX+3^DKNQFV\E`dTf_hijjkkl kkkckgkl3lm3mnFo ppqqqqqrqqq}qrirswss%rshsssDssrsspssszss'rqiplib\?SKD6=47#0G+"&$#(""w"{!""%)08`A)I/PY`xg iljbhd ^BXYSQOPQ2'l/9XCMBV\ccb]4XQ&JD"<6c09-+x-068;>AHdO>UZ`cfh]jjk]kqkkllkkklzlmn nooplqqr#rqqqqqqtqqrBrrrEqr=rrnrqqqyqjqr8rfrjrrr}qpnk$eN^VMNGn@z:2-(.%##<""!"#K&+2N:BJRYZaggxiki}faZwSNHK$GGYG"+5@YJT[bcd_ZRLqE>71l.,.2H8> DKSY^cfidj=kEkll>lel}lllm mcmnXno,op-pqq9qmqoqSq2q7qSq_qqq|qrrorrprqqqqHpp@oouoropSpqppq?quppnlg%`XQJC<51.)|&$b##""("$(,s3;D-L Su[b!gitk=hd]VO.HDW?>>CD(\2=UGRZb%d*eha8\eTNG?9U3 0K-0F3:@tG]NU\afik!kll,lmm*m(m;m`mmnnhnnnoPoptppp|p7p%pRpppq#qmqrss;rrrqqppo@nn&nn4nonOnYnoWooion-lMgiaZSM7F0>7 0*'%$#]# "N#g$)F.5=^EMU])chAiYjg6bzZIRQJRB=L754u%;/:EmPYadfcq^W-PIA;,41/`15M)l&{%z##"$&+1R99A)IxQfXu`6e9i|i>i DLUSqZaWfjlnQnnnnno5nn-mHllllll4kkl:mn@ooPnnn_nyno/oppqrsst3sssgrqpponrmXl k@jk k6kllallk.gc]XEQ[J,B; 4.)&%t#W""%/'- 3R;CKSZbFfjdiKhCaYOE;1) j'V1x DfL1SPYa f:jl`nn[nnnnnnzmxljiiii-ihiJj#kmnnnonooEoZopCq8r^sct't]ttUtXssAr'q0onmNlk[jkk"kwll~ll;khd^EX@QIBf:4 -)K%$""v"s%=(6.h5j>FMV(]d&gjhf2^UJA76,s#f$<.8DRNXl^e%f1e`ZR\KCD=9677'8{=DL S`Z:aHfcjlnEn\nnonn|mljhg=fWfQff8ffgjlmno>oooooopUqOrisdttVtttt1srrqpnoml\kjjjkl%lllBli0e3^XQCIB+:L3j,(B$#)!k!!$(j/{72@#H OXC_)ehjgd[CQFpqrsyt-ttu u%tt sr:q3onmAlWkkkldlm7mllie^X}Q IQA<92 + &"! U!!2$)09AIQtY`dfohie`^VLA7u-"  %/:E+OWg_b"da]VzP\J#CX>T998lklmLmmnzn,nk f_XXPH@d8)1)%.!^ p $* 2:CKS?[ayfghHR9X~_a!a^MZTOrICe?@;h@EKFQ#VeZ!]_^`__\[^XTPoKHED)BCDHMTXZ`9einm npSpnpQpp8pqrcs4t,uFqMU[E_`ya]dWMC8.%, LCS }:(34>.HQqY^abbla=\[WQK;E@G=;<=AE%JYOQS)VWY[XXUT0Q^N;JEiA>==>M?SBGMPSY_d-hkmnwooGopqrks@t%uvvwwwxwwNv5tsrrrrrq_p mjd^VOF>70*%U#f!#C$(-4;sBJRX\`C_r^Y#QGQ=o3( 5 Ka,, C#g-8DMV\bcdI`3\UOIgC>;;r:;=847P689p=.ADGMSIYn^cbfiklemnMo}pqrtshtmulvww;wxxxAwvustssss9rpnk=gka[^SL D<4. )|%#"o$',29?FO)U[^`^y\ TK@7-O", y UR,(,36>I RYP`ecNeb_Y}SMFA=!;a9::=3@aD"GbIJBIIGFB?<8T5Q2l1\0s137;@F$LRWw\`icfBh^ikmoQpqrtuvHw"wx$x]ww'vu7t|ss@rqpnbkgob\VOH-@82,)|%%8$'+H175=DKSYN]^_\DWNEa:0'g \O&M k "-8DNhV)^4bfecm]XOQK#D>:8>7679+;>@AAaA=?>< 951/,+*+-n1 49>DJPzV'Z^ae gjjlnpqrtMuvwx7x+x$wwv)ubtwsruqp.nkh+c^WQK(C<50O+)&&' +:/64*! b*I '2=HkQ*Y_+dee5`c[UOI]Bw=N9[755576A8 9:S99=8$7^53g0P-*s(S'&'(+.38=CIOUCZ<^4b1ei:lnp;qs;tuww{ww@vvNutsr2pomkifLbS\WQL0E? 82/+*)*,16J`_\ VQZKE@ 94/-+p++b-1N7 2Xe<L %>/~:TDN}U]a{eca\jX;RM%F@l;753K10/6.X-s,1*))(}'&3$#"I!"_"$&*Z-284>ESKRRW]aafjn(pgrnsNtKttttyssfrBpnl`igecc2`a]xYpU$OJEg@;,62}/(.-#.0*48A=ClIsPUZ~]___ZTaI?4+c"Q 0A|3M %V(>2=H PX]c!dAd_\VQLpF@:7k41.,*)D'&|%$.##-""!!C!!f!#*$'*/4{:AdHGOU0[-`Leimpr.rssssSrqpomjKgmda_]ZVRMHC`>:620k.H./26:?-DJoPkVZ^*^`__]VNB8n.%} @C 6PgD !*5v@DIR%X^ada_ZVPQLGVA<8520 -*('-%k$""?!"O"#"#n$$&'*-B1Z5;AtGNhTZ_ei;:753102}49Y=hBFEK$PVU[4]_"^l_\(g <Cx@:Fd T#+-N8SBL)SZ:^cdb^[VSNrI7C>:7P490-I*i(h&Z$#U"!"#8$%'(M)+.l047+BWFLQCV[`|e"hl9nbpsq4rqqonmel"ig)c` \Y}VoS:O{KYG5C1@7=<::99;>mB)FJNS5W\>^` ^^n[XQIT>5a,a#fW c)jn8,WE2kEL &1<ENT8[<_d|e"da*^[XUPKGCt?G;741/--4,i,-N.025 7:t=:?BDHKOTKX]+a'e hk9mLoOp%pppnn1lkixfb_ [VWTQ/M|IzEB@?>G={==?DA!DHMQUZ1]P`0``^]HXRI@j6-~%Dw# r+`%*ia0 \j'2=F|MTZQ`d7fjdcW`f^[XTPLGD:@=:)755t5 56%7k8:yGOU\bghhfdbg`5]#YU`QLIEB~@==:<=>n?A?C5EKHKNPS2UXZ]!_bdnfdhCiklnRo.p p)poanmljgc`\MXUROLJHGFFGH@I0KZMQUY];_`f__]\BWrQH?b6 -&_*  [nW,s) { *5^?HOVm\bfii`hsedlb[`1\Y&UQ[N\KNI"FEEoFiGIQJLNQ#SVY[K]_aceg2hijklmno{pOppoonmki&eb6^[YsVTwQOMLL LSLMNPSkVZ]-_^^A\[[XUNF=R4,% jx;q~C='X4  "+6A4IPV]cEhk/lQjiJg9eca1]ZtW6TQOONOPRTVVIXTZ]7_aceghjkclDm mcmmnKnopyqq5qpp,ocnljgeb`9^"[YWUSRRRRRT)UkWZ9\___v]\ZXESMD;2+$ ]-iy<?P. &#t-J7AHOUl[afJiiigfedb`][tYXWWRX8Y4Z\y^g`ibdfhEijk`l*lmEmmmmTmAmhn nopCphpnpoopnmlKjehfe'cxa_][YXWWWXY[:\]^ \[XVSPJ BA80n)J#r IhK (Y4EE7fM /$-_7&@HGNUSZ._dgiihggfff)ecba=``M`ackdfhjl:mwnoWooobnnamm/lkkxkXklmnoEoppUp;p#oomlkjUhgfdMbn`_]^W^!^^O^m^0]\[YeW^TFQpLwF>6P-&!H T"3|9M|fI/ #,n5>E2JlOTuZ^bdddrddeffffTeeffgijklmngoonmlk(ihgKfoeve3eefhnijlmmnnSnRnfnmrltkjiihVfdcan`+_]^]\jZXVUTnROLGA,: 2>*$ < =V&H SSi@ ""c*36; A FNJOkT,YH]_a1bBcdjf"gijjjk!kkMklqmm~mmmmm2lYjhfdbaA`-_^_`>accefhDijkkkl=lHl-kkjoj i4h f*d6b`^^\Z!WhTR4ON"K4GB,<4-'E!>  zKM>fN~aZVkr @" rui ($/6R;?CGEKPUX#Z[]|_jad{fh7hhi ii7ihggfFedc{aZ_$\ZXVUTTU/VX.Z*[]_`bbcPcd===>=?@_B=DEGIvJKLMNP6QlRRpR,R:QMP MJFC@>-<:752 .6)i$} xmdju1~VJj/1-<FA,($iGSa hT= #'E*E,/^27;@MCGRILMiNNOOPWOOMIK~I^GEmB?<:7l5322,23 4w579l;H=0>?@ABDAEaFjFG$FFEDIA>;9T7520^-7)%" 7yJ x4u^e>rV<Hu!#<KF)%  } #U%'*.37s;>gAB BBBBBB}A@J><;e9a74k1/,*)F('(;(*3+-=.02i3556789:?:c::#98753i1./`-+)&"9Y] a8\K}px)yK6:`&.2,+!drT" KU #&*.25677777P6n5@3z1/.R,Q* 'u$"} C7 t7x!"$M&'r()*x+D,;---.----8,\*)+'!%J" /Mb 2 pZr4e:_*0]|}%2% mO|8 ? H"%(*,,-L,,f+0)'%$"e }S|bi$iN)3 !k"4"#"# ""- s>zW P *  Q4fCq\#?T+%4ScaV !D" @P }*4J: J >y/ 9 k K -d 7_G&s& jN( )iI[Z`EjrUv~zVKk_@9<KZZK I`;i IS\"gp  )"@Y. H D - j1g|O  #onTEHq{j`OHQUD |gE4&Od0w { Y + h > ' Q  *4UBfvj3q?O$r->yxb>.AdkMA8""5y#yIW#g|jcvV6*(7?KRe55%/,^'2JKA[7N;AlxK-   qO>uso0|=d>@2?[p\?uWUTB UOkPJHdv=" "3Y`_N@;3Q|8DM0:29Ebvi\B'/#1v}smkl_gT%   '%i8)=CLQ\unL;'/hlhqpM$ *6L64Nb`YE"aD^Cx^O;".2.'6=N`itntM,  &!5/ 29+ #:]mVG].+s`M3!'51# (6Gkyt{rW2  ' * ,9-  2>ME0c}nbZNFJF4 1VfMGI7  "$#'+/( /0 *561'"#(M} {mZQE0 'Ei ]8    !"%/2+$"/6) ':PYSIGVh#"q_OB4*$)&0VxgF7!  j *^u9 )}l:RIi,]!Y"N%(o((%9"%-  (   " Y } N f  W qHV3C5`,#`;E    vj"sSFn1pPd5r/n3KM+>!Z""#Y$&5&&-%," |PcL     ' , 3 E ] 7  P m r {  Z  j<wYpUi$&~@ KK $+!W] I{QrL!"#$[$V$%$#" y*S S   q K ; B v  < R Y i n / @ 4 2 7 C Z h  L  SoUXE  /(ZqSrwSr1\:pY OP7i( ^ t  . c   # 8 N i w n M  $ : 0 (  / l cCrW4`x[m/  VX<9%v!!w!P V =gf$ #J@2KJ  . !  4 c u  + E S ` _ g P % { } _ J @ " . ( Q @<+UPg}7aC\ZQ?t3B%ec@19fSEd5O|q C    < Y r | x A  - ^ w Y E = 9 ; - 7 # 3 |}8g}d  B  t3G) _ 8TD-B)TC U[ B4}( = & - t #yhP'yN3 ;O_s3  j  \ +    g 7=  9 (`kB]Aj:V\}~+B 3@{.? C  t y { CpM&Y\J 1]=K~eR+=>f )  G 3 ' 2 U O h  X ~ P=AoMO#QPlf \agti 0  N t ;0 OYB4*)0/ klffnpgPA?Yu_^UpZ; ^H )  ,  s  V uQ_Kw2FsZO> r ~VT  S}P4Oi vuqWH<GYx  GxyTo9m 4 2   q  }  S m * \ Ap&/& O  g } %  8 hr!N{dcSnVXj^^T*,I`w1{1xb;tK 1 g  b g [ :  H q . D )  : $  $ D } E (  D 9'Xk3z:d4/`DCnhQiqQ$Jw 0b@!ZG\1g H 9 C y h W S _ "   * bgkw(I-\< ;G'Z465.(8YW[8E]  Y \ /    f n r Z > 8 F y \ 4  3 n V xJ[%KTm}8'_j+ma7{E0/MbWk)x| L$Id~@PmwHQG+xI    q T Yi64rg"?Wiz~C,<c :[d^m6_JBt-n1R 8ZgJ!$k:VH]n/G W f =wx\O2D,5C*M ?UVr\kb"mPm 6 #  X (     . A E > #  % Kw $v]`rz%+Q-aw8]q|b9;>p2vI?W/qMy~cG ^ SkPoyZ@& _)'# E 6OqE!I?fJ,gwe{hCS + coYWx{*s%kE|pMr Y3x'^g\  o,@6<=NK 1 W shHaN4 _&YG65NZ:`:G,Z8v-DOU`- k]a CV;&+6L\d ;,VY "$V&({*6+5,#,g,,v,H+++<**n* ))))))<(d'&s%" MbG q/H`;+L@e#U &IQZuuD)@eZe~O c-"T7Er  4 '']!D#$'4)+.03L5 67Q8 8'8D77766&5544S4D4j44|4)3x32 0.,*#'j$""Q^2d Y5-fDq5mdxo,]ki+0dM^6/{i C `:%> "b$1%')+.=03=57:7<4>C?AAB@BaB|B7AAA%@@?e>>>>>>>:==M@BDGHK.MDO$PRmTUWlYZ\^'_`abLbbcc cbbah`aa[ab0ba`n_^(\Z%WdTRPCNMLKI8F}C@<]8G4$0,-(X$| JTN } YII 6w(Q9!4Hr_FaM 'u %$([+/48xCGL2P6SlVYK\>^abdeghi?jklmnoppDp,pp$pOpppqqq3qcqqqZpppqqrXrrrrrrTqjpCnmll9kUjLhgecba ^[.W"QLtFAE<572-( "FH! YB*. :'?o"Q 2 *;RG:$*0E5:?DI`MR@UY{\b_fadQf"gijXk7klmnop~qCqr(r(rqq3pppqq$qq.qgqr rqqq[qvqr7rrs ss=s4srqqppXpGooUmlgjqhfe-by_[KWQLG B=K8c3=-(p"O `Jc=?8J^$A m "(/ 5V;@oE[JOTsXm\6_Ab{egik@llmnoppqqr[rs/sstIt:ss[rr\rrr.rdrrrrs3ssss[s9sMsst:txtttttt sdrrrrrrrqFpnmykigNc`\tWRMH^CP>6943-'"" q 2N:B<J J C J Z"'-4:r@_EyJaNT9X\_bdgTi[kllmnKnolop+ppq?qvqrks!st&t$ssos/rss7ssst;tttuuttuubuuuuuutsrqqMqpqqpppYoonlwjhyf^cm`I\WRNHDU?=93-&!@R N:"6CY&Hp|J"\'V,2V8?LEK2OTaX]adfh|jkmmnnhnnnno"oUoop pZqr.satvtuttttttuuuDuuv!vevvvvvw#wUw^wUwvv.utsrgq`pp6ooovo^oloo}opnn'lkigda]iYTOJkE>>80*o$[ +|-?^O.!#'-e2g7=CJOTXW\$_cf>h2ij;kkllkkkk6jjQjAj=jjkel2moq[rsttu ubukukuuvv7vwvwwpwxxwx xxwwvvdutsbqpknmlRkjj4iij8jklm:llkji!gda].XT O_IC+;4.8(!"J 3!Dp t!""#A#% %'*_.28f=C3INTYL]Q`AcfThj"k7kukkkk8jjihgfee`e e`efh0jIlnqrst`u9uuuuvavvw@wwx'xxxxxxxx wvutZrqEomkigfjeFddOddfgiklmmmm,lk0i*eb(]YXSMF?v811+2$%FJ g+Z*,a-@-.1.013I5:(>FCRHzMShX>\`FczeghijjHiihgfeddba3_^e]]s]^p`ad7fildnpuqsFt)tuuv^vwswxIx|xxxxxx`wwRvPu\sropsnflige3b`_]]]-]]_adhgEiklmn>nnm$jhkd`[VPkAAEaICNSEX]la,dg i]jikZk*jji]h)fdc'a`M^]\YXVVQUVkW(YZ]`dgYjlnqrt3uvEw:xxy/y\yoyEyHy xww_vjuPsrMpknlisfca^X[YWVVVWyXXZx\`Hcg=D;::+9I939V:<>AEIMQV[`eniqm`pt5vy&z zzHyxwufs$oQk e`[VRN;JGJDB@=<@;;:;=8@=CH%LOPTY[^cgjmotqxr[s+rKq nnlFhe^`(ZSMG ?X6.(&/C Eeace&efvgBhjUl mnoqBrs sPrrp9n$jg3b]X=S$NIF%Be?<;m:J98*654333468<:>@DIOTZX_dimr>uxyzz8yx}wCtqmhb\_VQNLgGZC@<><<;:87o6a6H667: <@DHLQV [5`#d$gjmxo\qTqqp2nl0ieaE[ZVOH@7/' ^ \!fIhj jkklOmoKpqr#sxtu%ttsUrojlhod5^YS&MHC?<9~6543210/..W.V/V01369=#AGNTZ``ejpjtpxypzz4yx7vsp+jd^ W|QDK7E@Z3BFK PUhZ_dzhKlnq5qr:ppmkagc^YRK/B:3'+B#- Hjalnnoipqsstu%v/vvVtsqInfie`QZpSMF@<730I.,,L+,,+,++c**x*u*R*+b,.71z5o;BEIPW_!elrvxzHyxvu@qmg`Y>QJC>844*0/,. .-. .D.x.../Y0302375V7;<>CH$MSQYA_+d1hlGoqrryrEpoSl{ieNa>[CT|LeD=5,$C% gjlncoOoq7rst841T0...M.o...../*/c/01D258=*AF.KRX^d-hXloiqrjrr(qomuifa\)TN3F?07 .w&k2m;npprMstwuuvwvrusOqlh|b{\V NGY@W:51)-L+((E'(^)*:+Q,9-1-X-,+G**))1)8(*-K28@H,PmX`hntwyyySwyvrnhb[TMFu@J:52w1//E...w.g.%----U-.,--0)26s9>DJQX_*dXimpr[sssrqOnlJhLc]PWHP5IA 8n0'"jlnoq rstu7vZvw"utqnjd^?WPHA:50-*)4'''()+5,-...-,I++.*))(P)+\0;5=-DLU4]?elQrvEy5ygyxfwVtDpk;e_ZYRhKE>95421 //D..~.!--O,,v,+f+B+7,.M149 =CJQX^dimps stt;s}qeolzhc^lX QJPBK::27,K&iln+oqrttuPvwLw;uvtplgaYRK/C,<5}0,*<''/&`&'d(*+-6.g/O/.|-{,,,+L)('()-29@I$Q8Ygai ot%wxyxwuqlh>b\VP2IB=9B632G0/..s.-- ,_++;*i)))*l,/`3i7s=8CWJRY_ejnr;suuut$rpymie^_Z-SaKD99EM_Uc]el9pu,vxSwwu;rnje`[TNHGA<9.53=0// /...-L,,+Q*))1)8*,/38=>CKRY_fDk.oru1uvquetrpmje*`ZT(M:F;@;`hjlnprs st1uv ujrplkf]^WP2H @K82,)&&#%.%I%0%&(#)+Z-!.R//*/?/:///S.,,+V**+*d--0|6>;C J2RZ a~hnrtvvvu=sup/m&hd^XR5KEq?;F6310//0$0/.--,{+*N)E()5* ,/3d7=DLqSZbgmmqtv#wavv9tsqSnjfa\;VOJEhjtlmnp:qr+rsPttspLmhfb=ZQSKaC);45.)'j%_%'$$$%o&!')2+,-.///0d1&1<0/.-^,++-0N55:@GKNV]e[jor>t}tutsqbo2kgb\U5NHaBM=B8 41U0p08141110/..<-n+*)?)#)6*,03r8>FcMUR\c2inrtvvvuPts'qmjfqa\WS Ni#jlZnupqqWr rsrqmjd^UN7F>B60+'%-#$3$'$}$%%'*(*,-./01222m1X0b/S.--.b037=CJRyZaglorstttirqnke|_oXxQKE\?95b1002?33^3W2p1S0/j.,+,)x((#) ),i.38@ G|OvWQ^rejpsv vvuuts|pnUjg}c_4[Xi|jl9n8opap|qQqreq.omkDgTaYQJB:`3-[)%$o#$6$G$$%%'(*,-3.S/f012322!10/..J//25; @GNVp]dEjDmqKrssts3rpLmDgaZT^N9GA;6211l234F4321M0/j-+)('((*)+o/c3:AtInQJX`]fslGpsuTv/uuut!rom&jgdKaz^ijskmo6oopq q[omhd^]}VMF&>60c*'$##$f$$$%E%&(*S+,y-.0j1233,22`10//0/1.038=GD6K!RZ`g|koq_rrsrrq2nirc\xVOID)=8x32134l555F4~32+0.,*y(''.&'i("+F.5';CtK*S[ahUlq|suWu1uu*ts%qpoOmki7g8ei ijln_nnp!ppqn%kfaZCRJC ;4 .b)'@$$T$G$%%&%8%%&(4)*g+!,9-/ 0B1Q12$22#11D0//.02L7L<[CIPW^ejunp&q^q1EyM\U\ci01^1111 0_0/(0Q2{7U<B`HOiVU\chlnopppq9on id^XRM;GB@=+743l4;4555b54$3A1/--*(&& %$${&(+-2#97@!HPVXQ_elosFtFuttrsrp|onmllgvgijlm5mvoo^nkyhkb\-TL}D<5/&*'%$$%4%%%%%%&E&''()*~+,-a.*//01%1Y1G1$1h1^3!5:s?DJQW_]Zch,lmo,opp)p0p|o m0iAec`9ZU)OJID@:7t5&444443210f.,B)'&B%Y$_$)#$&*-.5,;CKT\&bin rQstt4t's8qpo nmpllofghFjklolnnmifj`PYgQ#IB:3G,)a&G%$%m%%&%%%%%&*&&' '))*s+@,B-^.u/n00012!3446}9a=BH'MS5X]cwgkm8nnovohonli-eav\WR.LGlB=:)7544s332_1p0u.-)+ (&%?$2#2""I##'A*07H?DGSOX7_flq9sUt}ssrqo_nnmllyef;gZhjklKnTnplhjdh^VNG?70+,(L%%n%;%&&!&9&&%%%%%& &O&'(2(z()*+,-.0 13j57:>aC GM$R(V[`3e0ilfmoo'oxoHonlifc[_[>VP{K$FMAs=97*54 210/.q,+V)|'%$0#""!!_!"%.(-3;CL&T\d\jorsrrqpnzBGYLYQHUY^cbgfjmznuo|oooonm jhvec_Z~TONID@;8'53.15/.-,+])(1&$#J"2!N! t "%-*G08&?HpQ:530P.-y,+q*('T%$k"!!' ( ( !#a(-5=eFNWd_f,mOprJpqpn\ljkRjiiicbceJg.hjLllYjd_XQvIAE91+&%$$%C&b&'*''(((9(0''L'(S(''9'W'(?()*0,.37A<-@F?KQW[_Bb^fej'moqvqqqSq|qGponNmlkkyjsgd_ZkTNQHwB!h2il(ki+c]^WPbH@Z80*&{%[$$%O&'0'([))*****+c++*)))))*b*,/49T?DJQ+W%]aWdgljmpfqsCs@rr3r.rqponnwnmkive` YSMYF@-:5`0.&+*)#( '&D%S$M# "4!!A v  }!?%<*v2:XC(L8T]fdKloqp5p=o@mikaj$ihhi``ac&eDgwi3kjhb ]VVOF?&7/)%%#$f%6&'1'(*+.,*---.H/|0/..-C,~++/***- 0c6A;BnIOV]#cUgjlo-qrsttts'rrrrqNpppponmieb_YRDK"D=7h1.=+")'&l%t$$v##"V!! ~ !$)239BKT]dkoqpp nm jiihFhSh^_`kbdUfhjif`[[TME=6.z)%I$#$M%*&'H(B)+-s/401235d654218/.--r- /d29>FMTO[agknp qrstu`uTtsssssrs'rrrrrpmgidco]WPHAo:40,$)'@%$k$##}""q"7"!! !F!%;*W2:PC!L$T][dRlpqppnljiAhh h72F-*'%$(##S#V""""k!! !!%s*2:vCKLQU ]{d^l oqoonlj^hhfgh-hZ[a]S_beg`irgd]kX(QJB;>4A,'$G$;#$h%'?(O*,?/j258:=0>AbBLBJ@L>B;9G755V469?xE"L3SdZaflooRqIqris#t9tu-tttttttu]uuuv&utr[ocjte_OY(R$JC<:6p1R-)'Y% $*#p#T""""z"!!!" %*2:C^LiU]dKkoqPoonljhhhh1hiXgYg[^aeEghfc\LVPIA:E3k+'$$<#$%')c+.i2-69=@\C3E\HIIFDA?<::t9;>(CLHOAV \c}hmp.qqrYrstu tttt_tuuvvvww wew vtaqmiyc^!W[P/HA$:5 0+(%$}#n#:""w"m"d!!!!"<%*2:C\LjU!]d?koqHop%o$mjiici+ijTvVLYv]0adfhfb[VLOHA'92+'$:$$%%V&)F+X.Q15:S>BF IcKNO|OMaKHEZC0@@S?ACGLRX^din.pZrrArrs{t[uuttUttuPvMvw,wkwvwww)u|spZlgc\UNnG@994.*'%?##"O"!!!!h !"&%*2:'BKT]ckJo!pop;oTmTk(iiijkP RW [`C{HKO^QTUUSQ8<1,(-%#"!!g!-!7@VHPYX`igkMmlljgdc/cMc:dfH6=ElNU]saedaIZT?MF?8 1+`( %&'g*-27=UBHNTtY]%`bdeff|ecbJa__?^_`qb=dtgLilEnloqPrrrrhqrPssisst$t+tguuuuuvv2vnvvvv utro:kfF`YQIA9u2-(s%J""Q!!!!!/!~!$(/6?GOX;_Zfyjl_kck#he-a_o_?^`3a08_AJXR[!_ddKa[U7N?Gn@X82,2(&z'(,0t5;GA=FLiRW\_bd`f fgh gfeedSdddefWgj lEnopqhqrRrDqq9q\qrqrrs ssXt2ttttqtu uouuu[ttsrpmid] UMEE=61,+4'b$a#""g"!!Y!" % (/7&?GOX_ei!kjQif5a]sZWY^X1Y-Z+3dE4JPYV][R_b;df=gh!ii}iiKhhh`hfhiijokwlnhoq$qrQrBrcr/qqEqqNqqqqqqrsZs`ss sHsstDtStEt tssqokg`YQlm4mnBnopBpqrCrrrrrr}rYr7r=rqmpp'p pNpp`ooro]op/pqpppq6qpp4m_j9d@]nUyNG@92,(%##V"o"4!o"=#`'g+3:CHKRrZ`fhYj:gdG]VPIEAK@ ?\&18<FQZbHefb]UNG?82@.+<,].58:AHO^U[)`}cfghiij7jjkHkkl)l4lUlm1m}mnop$pqqXqrrtrrrrrsrr;q\pppp{oo/n[nnhoooonootooeo lidt^MWPJJC8;4T.`)/&$u#""!f"$4(-4975#[.8COQXase!hd`WQ>IB;4Y0,-0K6GdOLVp^]chij e`FW-NFu> 7t0-+ +]5@LsV<_d4hBebZhSLD=62./W17>E>LRY_Wdgjk?kkkl*l{lqlkkbkbk7kEkkklllm{nppppphpq(q`qqrrrrr&r rrqpoo nnnnVmplllmn mml7G1!+K'%;$8"[!!$&c+1C99AAIQX`Ve9iki=iYdJ]SJA8@0)N%"(m2=InS]chGg!dA\VO G@}9m501239^?GMT$[`f%ikl.llllmTm+llk9jAiiii*iuiNiikKmnopooopupq%qr$rssrrrrr^qpoonnpmlkkkl~m.mjml,jfb\VOlG@M82M,(^%A$" !!$'S,3I;CKSZb\fjDiIhwb_ZOFo<2w)!u%D/#9EPJZ`fg e_YQJCCV<7X224G:@(GNaT[|afji\klllmlm#lkigfdddpddeifMh(jVlnfoGooop@pqqrQssxssUs1ss4rr\qJpKoknn-mJlkkkl&lmbmlXkZgc]MWOH3@82O+'$r#7!]!!% (M.5>)F'NV`]Fd(g}jphfc_+VKA7-=$'*"+6=ALWZ^keffa4[SLE>9V44_5:`@;GNUt\:agj llOm#mImKllkjhVeyb``(` ``abeFh)kmnoop2pwppq~r4rsZssishsassZrqpoon]mhlkkJk[llmgmlhkhd]WvOHq@81+=' #P" u!!%*).0H7@HP[X_fhljgd`\RG=3Z(B '2 =IHUS;[be-fb]V"OHAP;655:&?2FMxTT[`f+iHkqklal\lSkjiLgea^:[JZTZ0[s[]._ bOeilnoopppqqur#rsWsssttDssUrBqcpoo-n,m0lkllmmmllRid]rVO?Gn?i7G0f)%!  !%*2s:ZBJR["augh@ie`WNB8.#. q #-8CO'W_cUf]c_XRkKDB>P876R:>9E KRY_dhkkklkkj~i fdOa ]5YuUT5SUW"Y\_ch knooptppqAqrsut3tuuOuUu{u)tsrqponmllmBmn_njnmmiwd]VCNeF(=5.(B$/  !&O,#4Z3)v  8?)93>J/St\`Hdca[BUOGA;97y:!^Y!RKE?;=8: ;g?DjJQW\`deefmeeicb^ZVQMIGFHKORSYH^chkn6nojoop pqrstuvTvwrwvw1v]utsrqq2ppopdppppolm[h;bZSJA91+%B"  !$*1:1AICQX_becaZaQF<2(<y Q)M3?TIS0Y`bd`S\vV/PIJC>R:::x=]@GEfKQVuZ3]_T`__]\TXTPKTGnCA@BDcHMTZ/_ei/lm n n6#.^9DqNV@^&adb_YTiNG+A<;=9;n<@EE.KPJSWIXZ3YYWVRNJ,E/A=;:<>HB`GMT0Za/ei\jlmWn%nopXq3r/s8tKulvQw7w~wtw vvvIuitKs$r"qqqr q`pmj9d&]VMEw=<5-(e#" !"&D+*29A*HOWW\i`aa].WcM|C9/G% q_v v(3>IRSZ_d"cbK] XLRK~E?<:a:t9<?jD}I-LOPRRRWPqNKPGC>:7%5579&<@FM&TZ_dVfiYjlmnopqrstuvZvvvvvv0u srZq]q qq pon$jf`cYR2JlB~:3,O'##("%#%t*8/7x>REqMSZ`]a_^XQ|F=3 )  :1X #.9JDNeW]Dc^dd`\IUOIaB>':Z97A89=]AxEVHOIKKK_KwIGD@<85 1z0W02S4J8;A\GhN+TZM_b#e2gGik3lno)p2q_rstuPuv3v]vvutswr\qqPq2ppmkgb\iUNVF?e71*x&$$*#%(.u4<BIQW]O_Aal_\>T|K@6-2#!U TSO (3>ITRY`ceb_YSMF@;9#6X557:>*ABCCD/B@=)96;20,++-/37noq*rvs{ttuuuv&uusr~qXpoo1mlig bT]TVPIB;4w.)v'3%^&<&j)-4#:ZATHNOV,[_<_`\X NEO:0'w p1a} ( b#-9D#NlV.^;bfeca]XnQKDX=9 532=2469:<<71/,('&}( )u-29@FNTZ^a`K_ZSH>4*!  f"l5'2d=}H*PY^dee,`\)UOI4A;64e211 13545n5C5B4Z3i1W.+)'%$$M%&),1+5;@FLQV[_c=fibkm^opwqst!ttttlsrqcocljhfd;a^MZMU6PRJE?94:.+)K)S)(+.39g@ FWLSY]_`aE_;\UM.B8%.$ RIv% y!+p6]AeK/ThZadf|cO_YTN:F?9;510..-.B.v.W. -0,g+)'%#"ELRY4^Sc_gjlnop_pjpqooImljgd`3\XUgRWOfLI4E@<952/.h,-/37FHQ>Wj^XadNbZ_ZVR!LG)Ai<8520^-+F)N'&$""0!!!"8"t# #s$&[)9+04]:?FZLS0YK^UcRfjplwnXoooonmlj fc` [WSPkM.J/GTD?;8m63200s02G5,:2?&DINN5TY]_a:` _\QWNE:Q0(@ kG@@+ R!+7AKIR|Y^cdvc_$[W-S1NIKD?;[8 5R2/,G*%(!&$### #T$G%6&')+-0,370<*AkGMSY^c^fjhlenCnoo&nm^lTjYh!da{]QXT[P=LIEB?W;r8H5433;23R4]7;APFbKPU[/_ aab8_^ZXQG(=3)!Y ?O>xqALdg  _$o.9CL6SYd_cdbc_[XUAQ`LGC@ =F: 63}0.r,+)((j(g)*-.03I68y;J>BBTFKQ3Vc[j_cg,j[lGn"noInn!lkigdaK]XTOL HQEA>;9f777K779';>CBHgMQV[*_ab``L\Y,QH>O4, #Ig _#eh3+ZM 8]P &_"%0;EN7Tr[`HdedaR^[mXU1QLHwDAt>C:74200.../0357:=@9BE@H|KP+TxX\`d)fikmnGnnXmlkigdaa \XSVNJG C@>GOU\afhh,ed a_] ZVCRO KHECB@?>?O?r@gAsCnEgHDKNQTVSXrZ\_Daceg7hjbkmjnNo nnmm kQiJfb^ZOV,R0NKIGFEE:DEF[HILNRV[%_a bmaa;^]WQHx?5-6% ~`t\! b hfS *5i?HyOU[%aeh_gfdcJa_]+ZVSNPaM{K=HGFGmGIBJLNQ*T+W6Y[^_axbdf2gh{iWj2kDltmnomoloOnqml6j_gkdV`]&YVT QON}ML:KK!KLNDOQTX[^``_]\YxUOF<4%,[% ^U x8n{?-Q "+6@HOUQ\ahfhihgqedcMa^[XUSQQPTOPNPRbSUXZ]o`&bdFfg2hVi1j9jkkllFlmnopTpJpo>nmDkiEfc`^n[YWVU-T-RRIQRLSTVwX[i]`M``_3][XSMD;~2M*$ t \](as9 6J#v #[,6@GMSX_c|fg_g0eeZddcoa_\ZYXWWX[XZ5[]_b'dfhijk kckpkkkk}k*k&kal9mLn[o1o_ofnnmlkiXgHe^ca`^X\[[ZXWW:WXY]Z\E]^_ ]\DYWT}PJDBa90k)";% ]GhO/\.?;'W< #,6>FLJQ\WP\adffff[fffedc5a``K`abScegilmnooMnnlkkj izhhhijlmOnnno.nnmmkji7gfKdcla`]^]];]X]^o^^^]q\HZ5XCUR LF>6{.>& 6 )}IZc<} -# +i4e<{C@HLQW[_abbcidhefgfee5ddefgLhjl mn@nnZml0jhofsdcb#aa"acbd.f gi3jkllmam6mlbkj|iJgfeZcb`q_;^?]]]B\ZXVuTRPeLzGAF: 2I+#$5 R 7YZXl7{~  8w!h)o195>CGLQVZ]_,`ace?fghhhhhi2ijklUm!m=m B6FKO5R3TVXZ\^J_}``aEaata`#_i^\ZsWT{QMJHIED(BC]DGFHJMJOR TVWVXY0 ? A`c#(-0=259>=B[FJ(LPNMOQiRT5U.VWWWWWUTRQNjKGDrA+>;9F767U83:8<>6@uBEG+I%JKLNNOOOONM]KIsFC@><;#975U1-)$BNn Clfm}?YKl373@E=&%1 c!%(+4-1C5[9>6ADF\H=IIJ4JK~L LLLAJIGEC8@I<96]3Z1.-q,p--/1358+:y<>?A_BXCyD)DDDCC/A@=; 86q43a1/,)%p!H ^U+[fCoV;Gv%)ALD%c^TM O W""$e&)w--1W5l9-;=>}???=?]???B>2=4;z97'4|1w.~+)&$#"#}$l&D')+-/1356\7%88888]765S31/.,+V* '%O!l& & ~wMdir*mB14Y.7:2, RQW @ |Jf"7%w),/y23j4}444w4Z3210J.,*''|$!D v$1!#%'c()*+,,m,T,<++)('P%$*" GgQP U R lc4^9\)+Wxz .=/i2c G@S:B #&'))*n* )('%$"!%myZQ{2-J t!!1!T! FI4 L  ;!]S!<\1'2N``S ($ &nJ<3  2j2P??5+}^  - 2 X_rt  r Ff5]Wm }!#&COO#?gPmmc?<i `?67GWYJ.jh0B(V 'lGR7 c v%[   R dto(G~I36hsaXIDPUE pXTRz e?P  i ) $ # q /]kLl>^Z r!DX8JSmCLh1r}h>'5TjLB9 # 4tfo*CuINW}mP7  %Ae~c)4RR@H/}J59bzM0   /0~Xdf!UkH9HHWmuYD"gOUaYB%8 EfMF@X~r= "(#/D;2)(5:Y; }`8)>CMTnta[D, 2M9 "q}vnkkjUXx|M$   !E+M,'BR^^iT?2 "c}kge~nJ$  + :I0 -NmrhO,8t<H%`O@  +% *.2Iciwql~zP/  % " 5+ 49-2Oo|mbqs^O7#  */=gz|t[4 '3 +2# 1>) !8?<(/sxmbXL@8/%  1)L iQE@1   ('!'-,$"(GD.%2-  '&5V}nWC1!   )>_ [;'   &.3.%,, ';?- 1M]\RJWu v]D1#"44"3QodB4%  s 1fO42N  8qYs5!$'d'&$ !~!`  # & _   U f  O e>N)0OTg gq/%`7C   o0zfc7WgS%{|L!,"f""$2%I%%%$!ILh!   ) 4 J e I  N g i s  J  z|>$O{#&#~8 TU .3)  _+`i&{niPLq^ "#$)#$*$#"|!jLo 5  q G 9 = n  3 K X n {  & 4 ( ( / 6 J ]  YeW`I<   '&\sSsv _}:#6%v  7i  e #  Y  % @ \ z  \   '   uXVtRm,YTDIJ|3M2%]##*cP< `    + Y q  / N _ m k q Z / z n M ; 6  (   =>0k:a \v2^Fa[O;o/A}$_^B/1u~B:e"H/D,hcKG4 c 2 ^ L  : \ y } K    . Z | y f K 3 ' # *  / <My/ 9 x3F-\ 7SB1G4PV kz,G3U<IeYu3  ,   ev`BuH*1G]u4  ^ o O "   i e}_ ~ y  2 XpA`?h!G$cdw8dZ5j> e t 0 W M Q !uL0ZW~I=l=>qx^F 3!S } l; ' & G d  M o ~R@?vZ_,VDk`7xC=o8{Ga R L w 1:q;TH?70)" ]gZ_mhYF@C_#*gZDtdN,OH 5  (  t K vP`Nw0A~eRw/ z L zdA 2xM Df{csfRNFQd4_`zDvC  l 4  p $  O s * \ >o''. ^ h i 2 /  , - !Is#Krdw \`A5DEUxM .E_z){^`f,a/s , g  Z b \ <  F o * : A   C /  * @ s 4 h + b 7 j ' %![S+@e++jX,TXL^_G;Xw>gK1qF=$_{ @ = A y i V O X  *   =dVg%Gj~{*L# /p|KKz $?g|j3m&?X  S T )  (  e m r Z < 4 B u b =  < o N l;|,pFam)NSgS}`RJXe'w ?zf]djz}. .P}E kw[oFVF-W    q Q VwA:wY K[^tm|iG'#,-Z[|.V6dp[9Fk)VkR1=/RN^i)K V d ?mp\?!}sY/C CUDo%( z ,-._       @ h M ,  >Be0"Y\o8.,T$Tl2bst`; @)=hVZ5Vuq>h<zt4=Y|_7(    6 Z9e}UZd2 O Q , )2ObyV*YU{Z^yg{lDO 0^urTHnz-r_-yD^P0N0L U  bOO?#* !0!!!!T 5Dj]l.H )#h`TI,PTQ1b<I.bF4BSSV.6H{,OK"JvV"3K E d<Nk!0#&O(*+--]--(,,'+**e))(('''Y&%%I$Q#L! k, . l4SvT =Ci&O#FQey~B&7]whU FUL*QFUt  l4r  !u"#,$k&_(d*-x0!25789 9(98887N655+4w33222x2G110//3-,D*+(%#!ya}?19L I*/zb9g_t) O#wk37Z6F~?9y V  Z3H!$A&R(C)*+- .0\2u469&;o=?ABtC`CCBB{AA1@?>>=h<<<@BJDEGIK$L,M*MlMM#LLlLK~JIIHvHGGG8FEE2DCBAd?>L<;K9Q741).)+U(&%#k ( <"6vwq1NfJcP| jGI( +z!C $'+/82[5h7:}<>@+AC+DF GI+JLNbP^RTVWY&YYYYqYXX4WjVUUGU TTTES}RoQPOML(J9HGEDB@W=:7k30-)%"pqe  ~K8.NJ4? "x>  f!$(y,J0947n:=@C.EH>JrKMYNBO+PPRGSUwW8YM[]_abcdccccgc.baa`c` _` `__]][ZXVxT>R@PONMKJGUDQ@dCGKO/R$U6X[ ]`bdfhghij6jkpllm#msmmmnpoopUpppq.qqqqq/pppq;qqqqqqqppnn.m}llji8gecaK^ZVXPKF%@;7K2-(Z"ox f5  -A lg[%,*06:;\@ZDIMQUHX]Z]_bFd:fBgiOjNkBllmno oooooolo7oPoppYpppq;qrFr_r.qqoqmqrrcrrrrsrrxqq`qppponmki]g4eb ^ZaV&Q6LFA=8@3^.i))#W, -.Ok$ 14/8I;KPYj+ ; *$()/m5;q@FKDOTX>[^aKcheg*hikl-mmnjoopPpq=qqr@r*qqUpppq qQqqrrs9sssssQsZsst)trttuuttosssXswsssrrpoml iifc_[WOR+M!H C><94h.(" l|2Jo#m05/9 A 1 (  8 * cm`>$).4s:y@UEJOTX\_[acfghijjRjkvklVlmImn'noUp2q qrr qqqqqrDrs sqtttuu"ttttu(uouuvv'uuZtssrrXr?r;rqqqeponol`j5geub_[WbRMHD?:w4S-'"Gh%+ $7_";*4J\@a$@(-3I9A?tEaJOTY]adheghj]kkik'jjjjj|jjkQk}l ln/oq&rVrsrrrssYsttWtu:uv/vkvvvxvrvvwwBwwwwvutsrrGqqvqpppppPonmkjrhfc`\XSOJE?9623+% A8 K/3MnFM&e %).38>CINSoWg[_cpeghTCWHNuSW[_beh,iRjBjHjjZihhfedba```5`a bdgjm3owprrsttGt`tuuv,vwZwx xAxBx3xxxwwwvvduFtrlpoBm}kihggffgpursUt*u.vvwxrxyxxxxCwvutsrzpoSm jge'b`b^G[ZiY,Y@YtZ[]_gb!e%hDk=mTo,opppo[nkZhd;` ZmTMF?;8$0(i ) |HwCvCD&D-DkDEGSILPT{Xy\`qcehijpjjihfe b`(][TY`WqUfSPNRLKXK JKkLN-PT8X1\o`:cfimoqsuCvwwxay/yzyyVy-xwvutrFpnkifc`l]IZXVSReQ5QRSU\WZ]`Vcgjmo'pqqq pnliGe`\*UOwH A@92*"7/W =NqOOWOrOPQPRU:W[^Waemh?jklm@mlkigda^t[XU`S(PNwKIGNEDDnDDDFI LPUY]aeimp?rtvawxyyzyyWxwv\u rpDmjfc`]:YV>S.PFNKJDIIzJLN QSW[?_Dcwgdk@mpXqmrrsr*qnMkglc^SXuQZJCJ;3+i#X '  WqXMXXYEYZ\g^`rbehTkln4no>onljgda,]1YU6QOLJ GEqC~A_?>>>>4>F?AEIKMQV;Z_dXhzltortvxytyz>yykxmwyusq mi`eYaK]LYURFNKHFD"BABB}DbFCI]LPTWX^\`e/hl)n(ppr#r&rpnnkOhwd._YKSLEb=5-n%m, Z_a abbc/dWeg[hjAoDHLQ#UKY^~bg6jMm.npqrreqxolif#`[vTNG?7/' S3t ^df2ggh[i"j7kvlmn|pqrssCrr pPnGjgc^%XSNJ6FtB@!=;:87854322h2:3s47:;>AF|KQiW'\bLgkos6uxyz yyxKvspkf`[UOJEB.?=;976T5h56278;=AEKIkM@QkUZ__c~gXj0moqqqpo#lj,f;a[VpOH@81M)#J pijklmonSoZpquqr~stuEttsr]omhd_YTNaIgD^@m<:576d53210/..F../136:>DJNPV]bh0lqCtfwaxyyyxvPrni8cF\uUOI3C>P:7B543!11 0012357;>ZB/EIMRW\aeilXoSprvr,qonkgb]XQJIB:3b,$"  j^l0mnoEp=qArQs!stu8uvu2trqmj6ef`wZTbNDHuC>h:7)5+372<1?0//Q..9-- ,,-!.B/h148=DJQvX^TdioVs"vxJyyny]wuqmga!YRKEM?:6=21?//s..}.[./0134Y6v8;>BxFJwONTZ+_(cgk{npqqpomk/gIc^wY6RKD=e5.K&`1PL $kmobpjqr#s'ttuCuvw7w utrxokgUa[UFNH7B)=98,41a/.(--6-8---$-,,++.*+<+-t/G3@7>DKS&Z/aTgmrv*wymxxvtpl@e_W{OHA;662/f.<-,,,,-J-./ /0135O7;C>BG>LRsXR^ c gk npr)qqplo l3iMd`[ U5NLG@ 8O0B(  kmopq`rstbtuv3w#wGwuVspm!gc\V&O H A;7y20-V,7+-+F+c+,v,---,,+M***Y+d,p/3d9m?G+NVU^!ekpuCwXy"xx^vNtqpl9e_~XPIBl<~63*0*/------a--..B.[./0}2@5E8<?EJSPwV\b%f[jmpZq)rqq&o7mifam\VPIrB":1)"%ln9oqBr&s|tu?uvpwwwWvtrnjcd\^WPJHA;62.@,"*))F**+,-...-,o+U*m)))M),/4:B`J6RZbwio;tw yfy)ywu/qBlf`YR|KcD=74/1/.--F-,,,,,,[+++:+,.1F48i=HBIHOUV%\{agjnp{rcrs5rpmk^gc^YYRKC;B3/+q%kdmoqr stuVuvw0w~vurp?kwf[_Y"QJB;6O1@.4+3)(()(*P+],-./0/.f-c,^+~*))(*,16>F9NW^flruxyHyxvarnhch]VOHB(+'-1i5:{@]GvNUe[agTkoqstsrdpnli5e`%ZTLE>82ikmoqrstNtv*vv~ttrnjc]OUME=7c1%-5)w'&Z&a&['O(=)+&,./0}0V0/]/'..,+]*%) )*-18>yF5MU^ e=l@puKvxwvsplkhxc^XRL8E@;85(20////..a-m,~+{*)((3')E*-05b:Q@GNU\#bgmp'rstsqon}khdh_ZBT6MGBSZ]ai"nAru wvvtnrnkggTc']WQJD?;7G4|100{01Q160/.e-,,*+)(o'h'(h*,04:@H_OV^dEj_nZqs@tossqopnlThe `d[gUPgKFhjXlOnppq^qrsVttzspmhbZScKhB;&3.s):&$d$7#$v$%&( )+-b./0 01j2i221u0D/---j/E1O5:AGGOWv^fSkpsuEunuts/pvn jfa[TNKH\B>9)522!23 333Z20/i.C,+J)(>'')3*j-p05;BJQY_` fkprsssDqqTpn'k&hRd`\UWSOhjal/nPopq3r rssqnCkeV^V=NF=6b/u*&:$#""##$$%'`)<+:,.0/P091A2T34432100/015O9 ?E-LTX[ciYnqt.tuu t^rzpmjeO_ZXjQKE@:7 333045z55q4021 /.,<*e('&''),J16=ADLT\ciAnTpsassrrr?qvp+mkheb_'\Xi4julnop@plqgr rqokgaZRBJB:73,)%#k"a"# #$$%'(*,G-q./02-345t54322;122598$=CGJR YaBgbm@pstNuAttsGrZolg|aZT3N5H+B<8U4335E6.6z654=2_0.-+)'&&&()-29@HBPBW_f0knr"ssQr|rrq*ofmkYiEfdQa_i*j-kmooopqjqomi|d^VNF>60*'$.# "{#/#W#$,$%&(r*.+c,X-u.0 13i4555534y33R3m24U6;A+HROW&^eEkorsttBt/s\rpnaiDcY\>UOJD>|954Z4/567;7654720e.A,)(<&&}%&^'*.n5;DKS\ bi.lpr9srvrrjqpoWmleki:gf%higjlnnnp,ppnl9g_b+ZSKC<.49.N)^'$v##y$$2$r$%w%&(2)*M*+-0.o/13Y45)55a544+43V46;@GNV ]jcjbnqrss5s"rvr/pdnAid]KW Q4KF@;7R5t45677~765 3|17/,*d('-&%%& (,298@^GOX_Zf jwnqrrmrrrNqfp/nmmkjighikmmmohpomAjek_WPH@9e1,t(&q$$A$>$$%!%|&&f'( ()@)*m+,.r0*1345555c5(5 4?5H7m9756^67 73665y31/r-!*('V&%%%;'()/25`7$/+1'^&8$$%%x%%&&}&'9'(f(j()`*+,.S0)23n45"556(668#:?VCIOVf\bh0koUpqqqqZpoDmTie`h['UP2KEAH?BGM&RXx^bhknp q2qq'pp6nlifa]WRZLGC`>;]8h755544'301/-+)'&j%$$x#$&h*/-5(%%%&&&&9&`&&&&'''+'Q'(T()-)+c-/182o3468:&'''''m'(*+-k.y0W26y9>BFKPVZ^brgk npqrrrmrXqpo mkjBh(fbY]WR&LSFA,)*)(^'%$##"""d"%s("-s37;BK0S[ci6o+rsrs(rwqo?n-mllGlbbcdfh3ikkj#e`YRaJ+B;~3m-1'%$<$%&''7''(:(r(((''(M(''v'(Q)p*n+,.16:P?iDJOUZ_VcfLjxmprAs^sWsmssrgq`onmMlkOifb]'WVQK'ES>9C4 0.--(,(+*)('&%$#""!!!#%*0/8?HhQ^YagndqsBrarqp`n}mGlkkyk[aabdegi'k}k:iVd_pXQ`I4A:y2a,D'0%v#$%n&'0''(w)))*f**N**+**)))m)*,+3+.:1l6;}AeGWMT2Z_dgj"mp0rhsatltwt:sssNrqXpLo{o-ntmjgb]\VWP(IBTDLKS Zb6gmopqqrs?st#t)t ttWtu4uWuvvvvvvEts orkfN`YRLE >83..+(&%A$$/$###>#""V!!j"'"&]+Y3g;CLU}]dkoq[p p4o.mUkKiiiQijWY[~^&a=dxfhgd]hX QkJB3:3+&#"!"#%&j'(+.26.8;=@cAyB@>8I;AG#NUg\dirnpr4rrfrssnsssstTuuvHw#wx$wwvwuqojAe^X~QJC=7o22.w*'%$###H"""" !!a"+"&z+e3V:CLUM]d3kwo.popo!mTkaj$jijkSUY\`QdfThgNc\WPoIAA92+G&J""":#.$Q&)'t)H+,.f2`6:>AyCFGHFEBH?=;Y::=@EKQdW^ehjdnpr(r!r[r[rrs8sksbsttuvwxxxxqw_v3sqmigc^=WQjklIMS+X^c!ehgLcs\V:OhH @L82*&A#=#t#"$%(*-05:?DpHyLORSTRQNKIAFaEsEHhKOhSX^cpi'm9pJqarsBsss~s4ss;sqt tuvAvw5wxWxxnwvutr_okgb+\UNG0?92-)7&y#"!D _ e H [ !]%)1`8AJzR[ahlnmn*m3k3i>hPhijWkCHO'U\ae!hgcX[UOG?8p1*&R#C#u#K%&),M/3n8D=CIMeQTXY?Z(XVSQlOPLKKNT\VY]gaZeHiloqrssslssrrrrst0tukuvvwvwwgvvv@utwrp m-hd{^qWPbHAt93-)%#K!s!+ $ !:$(07@BHPX_fjnlkkigd}c cpcvdf|6=EN\VH]b*ffc|\VOMH@82g+'$6$0$a&)M-05n9?DElKPU&Yc\L_B`aab`"^\[YYFY!Z\X_.beGhkn|plr+rsfs/rrKr=r^r.r2rxsstWu*uvv9vvvvvvutsqolChb\U[MF=70,&$!!!)! . !*$x(u/6?GOW^ei*kjjjjgd|a]__|_"`hb$08hA4JSM[`eed ]WP7HA93V,(%4%%(+j/38=C+ISO.TWX)\^abdcc9aa`e_u_%_`%alcehekmtoqrXrs&rrrqqrqqrrsrstuDuVu)upuvvuuCtt-sreqDnkf}`YR/J%A:3.(%c""!!H & !D$(/7(?GORW^e,hMjiPhhe@a5]FZYX}YYZ+3q=GCPY_)eed^XQIBq:4-)& %&*-2Y737 1J*&##!!U  !Z$)0 7@ GOaW^{dgihHfb]Y3USQRS.&?/9'CMW_]dmef`[3SKDNTOLII!I!Z*5 @JU \jcfgc]UHNFj>J780,('):.E28O>4DdJ'OUZK^{`cgdfgxhhh=hMh]hhijjkm6nopwq9rRsDt tCtSt"t ttsswrr%qqqr9rarDrqqrr>rprOqqmq]q?q:p(o+kgaYQJDV=\6/D)%$+"e!  ";&+p2:CJR(Zl`f-gi|fcx]VP J1FA@8?&1G9V75#-8COUXaeigc[qTLDi<51:+*+16=sCJPdV[`cefg/h?hiRihhXh^hhiejjklmo]pqr_rstst'tUtttttts@rrrrrrqRppq q~qbpooBo&oFonnn?khbE\_UOIEA:f2,'%#p"! <";$)/c7=?GGOV^d=hiOje`TWhOEG>714.+0*5@ KU_edihe^PWOG@>94.^-:-38V?LEpKRW]aeg h3hbi6ij ihgg/gmoqrQrrrs!sst[tftAss7rrs0sUsrqq'ppppeonnin'nInnn_limd_Y~SCLDm<53/1)&W#" !a$'-4=(ENMiU\vcgkji0c[rPGj=3*"2#-8XD6OJY`ghhb\UMlE>7821S05f:AH MTTZ_cfh,ijj}jMjuiqge ba__`aacMe8gjmpq~rjrmrrs"stt-tssrrssHsrqqSppppofnnEmn"nnnzlYjBea5ZTLE=5/)&"! K !%)0Y7@VHwPSX_AehkHiWg,_WLB9 .P% 0O& K)u4&?KjVF]ehi#dP_VOH-@R:L4z215:B HQNTZ`djgeheijLjiigeb_p\ZZ[\y]H_#azdhwkoprMrkrrrs:sssVrrbr6rbrssrqq^qppp9oznmmnBnnnlkgSb[U MF>j6/)%""!' "&+82:CNKjS[b#gikhe;\SH>4\)Bn Ip%/;FQYbEehKe`XQJB<64P259@GFdLSX^cffh^hhgfdLa^DZxWlTTgTVWZK]BaYeimoqrrrrrs srrcrrr`rsTsFrrIqqqqwqpIoAnno:oognm kgb[TMcE=6 /P($!D a "'y-5(=5EMU^d hij~faX|NC9/x$i : X *6AMV^c@gf b[4TMqE? 853w58M>(CJPVi\a7defffec`]2YBU*QNMMP&R4UYe]bg3knpqCrrbrrss#srrrsWst$tss1rr}rErqq3ppp:pppon lhGb[hTLD=5$.'# w!"(c.7?GP=W`VeiiRikd^KTJD?X4*< Ke -&0<GQAZa_eed]WPIB;8567*;@+FCKQW\]`*azbb=baU_[[WSNKHQG2FIiLPzTZ_Dd"ilanopqhqrRrss2sTsstYtuuttAsss+rrrfr qqqqppqnvl)gaPYR|JB:3*-&#. B :!$m*1:SB/J RnYaei gzfR`=XN3DR9/2%BL N6f 2!U+"6NAL:U[ce e_[T6MF?:666f9PH98679u=xAFKOSFUCVVVUT\PLGCX@*=*st tuuuu4u u utttnss1rrrq[p,lhb\KTLD<6/)$" !"%()18@HIO`Wo]c/dea]sTKv@6--" A]T R *p5@K&SD[`d\b`WZUOcH4A<9D666=8;@EHLNOPPDNMjJEFA=69668579>yCJQxX=^cgj lmn[o7ppqqrnsYtNuuuuuKuVuhu]utss/rrrvr)ptnjf%_XQ,I:Au:3-(J$"!"#x'j,55ADFYHEHHGuEB?;7U3100~249=fCJ2Q7W]Qb!e!hil'mnopqWr@s ttuu&utuu tssr/qfppp\omjfaTZT LE=71k+D'[$7##$&t+a19@H;OVm\`Wcb+`YRG[=o3n)   T 5i}*%s)q4?JSZ2ac*c`2\VPIB=&8E52Z11(36:=y? @AeA@>;8{41`.,++-0s48>2D?JQW;\d`cfhjlmooq qrsttYtttttsrGqwpoonWlifa\2UuNG@:f3.)[&$t$$&)/60>E;LITY_/`c`]rU=L@6-@#C S #.9DNV/^adbbP_ZlUNSGU@:620./t1p4789:a;:6852/,*(x('*0,149>DK PV!ZR^Ja_dgeikWmnAop|qrWs swtt6tBsrqponmkigvc`>[U|NHB)8E3=0|-4,],t.Y/1r2233-2W0-*(;&$$$a&3(c,$/4 8>~DWJBPTY]-a4K*q! $M YZ t# -h8CLU\bdee a)]aWjR KqC<638/`-~++,,--.--v,7*l(%$"""h#%( */839>DJP=UQY^Lb&eh1jlno-pqpr;rvrrwqpo[mekphfc `C]YUQLGB[=d83|/?+A)j'(),/51:AMGMU Zt_`Da_7\UMBB8.D$r sBlwKdI~&1=GNPX_cfd8a+[uW#Q>IB0;51K.+*)(((((7( 'w&%*#" v 0!"$=&|*3. 3/8X>`DJPU[1_cfikmnopCppqpoml'imfcT`\Y5UR9NKJSEAV8P^I.A;q6o30c.+_)((T't&%%0$#"! +  !#b%(M+05R;.AQGMSYQ^bei>kwmEmnnnnnmljDgd1`\YAURN{JG_C?;730-,N*+[+.`17@EVKQW\aRdhzjlllmsmdm]llkki7fb^ZVRNJGC@0<95h2[/{-,L,3+-/38l>^CIlOTPZ2^9abab`]ZUMA7.O$ +5@BJP YQ(d3>GQW_jcTfd@b ]YUAOIC?<;85R2/.-*)F'l%#"!"#!"F"#$&:'*b-31b5;@FLRW\a8dh!j&kl llylSkrjhfb_GZVRN>JEBR>;8520/../0@26,;A@hEJOU8Y^'`'a`x`M\WNiD90(ad H%qO=s*2 X_!i+6AuKGRZ_eeea^TYUQKFB? ;B741.,*(&%h$h$w$b%8&H')_+$,/G15X9=CHNS+Xs]aqdhikoklkk*jiVgada]4XTTOK"FB)>^:753 1)0001359/=VBGLR)W\+_\aaa_^"XlPF<<2@)i!o\ >U=x q?Hx` HF$G.w9~DLTZ`cf(dJa]hZ^WS_O#JFB?KKLMOSQSVZ"]`aa]`i]u[VRHKB9Z0(! @t8tU Kj  bo#-+7F@HNSZ_ad}fgff?ed_ca_\PYiVTSRTQRSUVXZ]8_acetfhhitij>j{jk kl}mnoupoonmkig|* 4*#,5 =ACIpN4SY^LaVcmcccdjddd]cbbaavbbdegyidk$lmnnnamlkMj"ihgtfg@ghj1klmnWnxnnmlkjiLgfePd+ba`^]]7]b]^^^^G\ZX UROJ$Cu:1)f"IA F  CR}t =0 "`*Z2:&@[DIMS5W[]^_*` adbd*eePeHe defeghiijkm2mmlkiigeca`F_z^_d_ac;e@ghjk kl lJlkk1jai,gfedmba(_|^U]}]"\\?[~YWUKRP MIE>6.+& S =d1\~[XmJP[  o'/w6o;@SDH~M RUY&Z\p]_ad'efgLggh^hiYijkkkjhfdba_7\ZXmWvVWXZ\_QacefhKhiiiii*hFgjfjedb`_]k\ ZY=WUUERPN;KHE5?91*J#U5bt ",1l[re^]|~%> ;$+16z9=#@E INrQTUWY\{^`abbclccc]c`cOcxba{_ \YVT&QrOPLLKLNPyRUbWY\#]_X`?aa_aaax``d__]\`Z WUSQqO LJ GFID\BT>j93[,& h/ Q ./+d!sls~^ZNZi{f1E3u; D_ u&E+/3.6 9=BgFJ|MOPRVTVXYZ[\]L]M\\1[uZYWTQNKHECgA@?@BIDFIL NmPRTUWWXYYsYIY$XXVURGO|LIGKDB@>=V:72-F'#!KD( 3 9kdy7~tEIBJKF3&+F \z/0!%),p/15c9=AEmGJK]LMNOQ QQQEPONMLK:HBE]B4?<967443468:#<>AHCEGI9JKLMN'NNMbLK@*ADBC0CCfC7BOAv?=w:75B31w/.e,*''L#iK - ` OE];lR8Dv'.K[V8 G]  ,jcz!#S%)B-f15V7}9969m9<9_9X9-88W77531(.,)'7$" T !4"V$7%(*!,B.k0g2[35]6[7y7877A6A5:3n1\.,*)~(>&$"kc 8,EoT^n>+/V7AE=9.# ] !%)A+-./!...-,,+*(&$Y!);jU1 %")$&')*+!++++X*)( &q$"! H =Cv?v{vv3S)T!)Vwx;K:!Kk`l  ; m"#$$$$k#"h!9L`% w /:y;H  WKB =  , 9$YZ}KV7GM'$2ObbW85  " ,DaL_}VJd LS? 7 !=[0ZB Z [/4$b7CD/b Y;78GY]O'% :r Q- ^ ? +&_ Jb@z\nN+4Jl S $ 6X ^-K[?ZucYGCRYF &unkUJgF/b/ TOY{=mQu+7m~s^X^~eLG>%.D\RKLQ/dq>m {}wiUGKJ9&KdD d #}lPLRpuN6 2- 9it& +SxX<hOS]VB"*c"!Cz|^Ya^ksB  5/*<?.J>#2H}?#zD8+21BZi^O=,J[Q/ 4cvil}|rR)   #H>vVi&yaORR^iaI7+ 5Yu{w~lJ&  " 8^_83f~rO*<'24eP< %(( $1568DUtvy yK)'%%<G>/ 6eyu pZI4$  %,#9>F[z" |u}y`6  !  & 6E6"#6BG6@qf^VH:3*  1:,$8BZ bIBE9"  ##$ 0TXI,%7:-'Dc ~z|xgO>.  #&"9Ke Z4  " $1/!$ <V`I'  &8LY]TYt pWA0" +0' #7Sm|pI5   w 0kL+q(+ !!$'2'u&$!|5z1  &  1 n  P Y A  [8Y H"^M+ J    v4zXPGb;m8L5t.I [ ")""$%%% $!KSD     , K r P > W [ g I  `%A*wB_J}u4 TU 4<,~ xbQOi /" #$ ####"n!oW U  x G 8 = o / E S m !  !   " & ; W  - La2g }.*ZrUrrb8o*n) /:l%1Mvzc*C , 5 w # ! V  ( G h d %   J`Z8wuJq,bYB.G;*^nSG!<'QeX p     # V m  - Q k g 6 s }  X : 1 5  & > % u  uL~-b?\^R;r25y)hhL;=rWJtiu+{&$zr&lpSeW ~ F i P  3 T w L   = ` q d S 7    - * F P g D  \ = `.?] %F<{9R>[Ox4|DM]:T X< - 5 9 ~ uZ:nF. 4EYv% F q Y ;  ; F @ ) z T Q  < 2 - 0Vj :d7a*L/kl1<<:(P;k/X1 %  b I D [8UWH&N}>*]f?')]  b e    1 J s kL7D{`i7]  Qjc) HBXN4Is V , K vj.o-@?D=2-&`d\\c`U?9En'0kC&W{]6  K-k :  l s  3 e  K RZO r#DoV5  h \  nv>Jj~\ds{\CAFdfkm\ycj A  ~ A y & d ;p)- b  s q $ T &  u X <  #7Ga {<iQ,fcB9F>GntH  4Qi|V<%,i+$D] ( X   d f n 9  D t $ {: F !  A / ! 8 Q ~ ; +   f  q[$sX#z#rV  6/V)QPAX`G(Gby%Gjxvs3F(/s6; L @ G x f ] ] ]  , & ) a{qqsBbn;U%6vL0ZOr"K#ab  N S / , # h m w c ? / > t c =   I | [ vNt::FITZ!ZZ]N }lPIIZcy ^7tjnt~v.9mW +WuvdkN*W    l P YwGEeGt|{ydFy O\ GbMgW avskks|~pkLX ?kN C?_hhk.N [ c <jpeK-YGNXCe!JTJy(/v0*)ESX g P @ ? N d N M  ` :  m > u` [bsBf Bq-0[wA`xv_7=,Io!hL #QjIRy >b hVkA  S5Zc?=RD t VO&Gdl)=`(o}yQW9  aukL@f9*]9~ Zma <T? q k<,` F/lk5YGyLbI f =mcmP,}:KFvIR;!hK5<IJQ{/;P(3WX#GdU ,*:J[R nA3, "h$&(*++=+j+**Y))L('&&G%%C$$z$ ###8""!~ A_, ! re}{1y@X8U %KYgy}F5Y{q$_+#/63)w)iw Y  !"J"g"#^$G%'),E.1z3}5;66666r55U443R2u100C///W/.....'-W+*E(*%#!ClH8L D&7a1x^ [c 7S"vk2<ya?N e]3 +ezL #&(*+,v--.01357:+?@UAA%A*@@@??>p=<;; :v: 99]98999/88B6531/K,)&# !.>/ {.kQB&Ha&8XDa}Vnz /4b|oI[i9R } AN!'%7),/R135m6789;<\=?;@BzDRFOGIaJ(KKDKgKJJQIIXHGFFEE$DDICCCCCCFBA@?1=;9<62.+^(<%v"h " ;)J P>NrRbRx h5=K KJd $s(E,N0b47:[=&?%A B?CjDAE!FFHI=JLNPRTUWWWWWW$VV&UfTzSRR?QQQ)PP_POOGNML'JIHPFDB/?.;G7O3B/,([$!$W. # d,foH3X Q731z)  !%*(,t0u4P7;>BLE/H%JVL`M}NNOROP PQSUoWZ \N^Z_a#ab(bbaa{``&_=^N]]=]\\\Y[[uZZ6YWUT`RQPuOAMFKGC?s;$625. *:&"\o QPw?4:s?C^uXV 3 %8 $(,3/38<?CFJ=MPSUWXYsYYYZR[>\S]_paBcB9|41E-*<% Si[ I mKc_+KB:,m]) @W T%+05:C>CGKqNQTWZ]`bdf8gkhhi5iijCjklClm'mnno\ppVp\pBplpq q=qppooop%pgppq3qSq^ppGobnmm/lji(gqeb_\XT4OID?;74-/*% yJ ,>+mWL`DYf : p%8*068;Q@ADIqMQTXZc\_m:h51,+% 5, (P@ fs- (+3b p #\R$)/5;x@EKOTTW[d]`bdegEhHij}kUklJlmnLnoHoppq"qMqpppq-qr%rOrors=sstssxsBsCsst,ttuu&u8tttsssssrqon2kifd `]ZV8QMIcE4@<&60*>$. Pl1g'+2 \ ] ) h& P$)/4:@hEJOSTrX\o^aRce1fgghhhii~iijfkklmWn0o'pNqqqqoqfqrrsZsstDtuu-uFuttttuupuvv)uuu`tssms/ss rr^rqon$lGjgevcU`^T[ WSOwJFA<%5.(m"em +YSd"80C~Cy2  g%).39?EpJO`T9X]aceYghibiii^CINSW[h_CHN+S&WJ[9^bZeFgi iijihgMedbz`_0]\\\`]/^`Lbeiknzp4qrsSsst tuuyuvw*wxxTx6xwwwwwwmw"vvuLtrqConmll kvjjjcjkkwkklkl2lkjqheb^ZU0OpHmAD:3-&( ` <;m1d00;//Y/;0?1937;?DIMRVZ]acfWgii ihdgfzdb`^\ZXWNUUUqVWZ_]1`d6gyjloDpqr|rsWttuiv vwtxxUxxNxwwHvvVuu,tYsnrpnm?kzihFffe^e7dde.efgi'jNkLklmmAlkigda%\^WQUJC=?6]/T( >i TBe<;::Q:!9:;>B FJOSW\Q_bdghjjRjWiLhgfe+b`^[YW TRPPO5ONP'QTGW'Z^bfJiHl.n;p>qrs{tujv3vwxxxxx{xwMv{uatFsrpocmxkmi%fdba~__^u^__`b-cte,g"i/klmno*nnmljgRc-_YT!MsF?u8j0(! 7 9_'fd8_}FF[EE,DDEFIMLtPTqXe\`Vceh)iajkkDjFiPghelb`']PZWUGRPMKhIHH}HlIJM8OSkWS[_c2filoqKrtuvwyx8xxxxxLwvItrpnljhfYca^\]ZdXWRVVVWYNZ\^`beJgikm nn4nn+ml]jg`d*_[PUOmHIA:#2O*}"`:t ^$Q\QNPPSP"OPQT=WZ^aeEh5jkmhmnnmljheb^[WXTROL>IcGDCBBB"B CCEH=KOTX]aee`iYlortUuw wxyyUyxwwuKsWpmjhe<<6/'!;E6 abbbbbc|dPeghk;mopqqrq^p8mk.gc^ZUUQMOIjFB@K=<$:.87g66C668'9<@HDHNSTX^Vc:hkoruvxxyuy7ywv rokAfa]X@SHO"K_HFYDBA ?a>>?@BDGaJ LORyU]X\^`cbf'hkm_np0poml.iGf;aI[UNOBHcA91a*"" < `if%gRgh]h{hiIijklnpdqrarror;pnkhzd$_wZ)TP/KGC@=o;e986g4322222;3S4{69=AbFxKQW]@bglGos/uJwdxWy[y=ySwurmhcd]XRqLGCY@>Y=;}:a9889:<>\@BEwHJMPTAX9\*_cfj&lunopJoRnlXjgfbL\xW+PJaB;4,%KV +iklm!mXmnDnoloprsdt@t=tesrppmie`[aUzOJEB=:76D432Q1 //.j.x.f/ /1W346:?*DKQvW^cimFqtHvxyQy1y`wuq,lfH`&YSLF@;86;533112%3~468L:<>{@CF\IjLPUY^bgj0mco:pqpolnRkh;cS^Y>SLE>6/r(!T k&lnno opOpq?qrPstuZttsyqnklfa\UOID?<8E53}2a1_0//%.]---y-5-?-)./149B>NDKRYl_ejosLvwyAyyw6u phksd^%WOI?B[<7z4N10`/.--.@/124'568:=E?ByE4HM+RXW\aeilYo?pyq:p_onkhdn_[UNG@92*#q xlnsopqqrssWstIuvfvuusq2lhcb]VP4IC^>K9^520..}..---|-R-+,,+z**+3-*/,3v8">EM T[bhnrv7wyxxqv8soib[T>LE>\83O0W-,++u**+Y,u-/00124J6b8;p=AE{JPPVF\aeiTmAoqZqcqpoljfbo]xXQwKC<54i,%|<Mlnp-q$qrsst%tuAvQvwuur/nid^{WPIC=<8X31D.-x,{,,-_-....k-,+*t*)*,/3:@tH6OW_filq\uwlyxx?usanib\ TMKF$>930.d-,_++)+ +?+,-h-.Q.//02577:>EC0HkNTZ`"d{i1lzo_pqqq`omjngc_-YdSLE>6i/'k!hmo0prrstu&u;uvhw-w@w1ut pql9f`IYQQJbC<62/-H+e+ *+,G-G.=.///w.C,+*-)\(Z()+/450;eCtKT\ckp uwTy{y-xvt oYj_c]VOWH)@:5(1/@.1,,+R+*+3+{++++S+*+N,=.j0c36;@FMT;Zv_e?iem[oqrgs.rWq)nli`ea\UNGp?8R0*9$lnpqrttuCuWvvw"vv8tqm%ha=ZS4KeC<7?1.++ )*?*+,./`0I100u/,-,+g*W(((s*,2N8?GPY `hWn svykyywuq(lfa&ZTbMF_@:26U212/*.,,{,, ,+++/*)(((*1+.R1059?FM SY_dim p@qsMsrpo%l|iea[VO>HWAF:3-kmoq`r[stuu4v3vwvugroic\mUM!D=61-$*(((p)E*+,.d0 1110/.-,+K)(')?*/4ELSZB` ej_nqs`ssrq\o>mTj.fa\VPJCM=7jlnpCqYrst tSuv&v*tspFXMU^Nemquwx^ww"tr1nPjfb5\VP9IDB?;S7h42m11612521~0 .-+*)9'&&&)6+R/@3C9'?WFNUN\bhlprHsrrFponFl]iOf9b7^.YTP.Kik;mnopqyrrsss2pnjd\UGMDs:8.5r44y5~6r654&2=05.-K+)'&&r'),5/T4:ANHP_X^ejCnprrr-ppAo+mkri&f+c=_[XTOiklnNokp"pq8qrruqlnKkf`FWPVH'?]70s+&$-":"h"#w$%&')+-.0&1124d55(4 3100#/1o3)72;gAH$OW_gm;rtuvvvtrpm=jd_>XRL\FB>U;T8?7X7M89:L975+20.,*(k&%&4&(+7/4<%C}KS[;bhmForkrrXq0ppAoTmlih eb_\ijjlPmnobopq3qpokhb\SLD;W4-)%1#?!":"d#2#$%')+,./C0X1x24V5b55T4322Z239427;:@UF@MU]edkFps uUuvvu]sqo3lsgb[QUOJqFJA>q:99h:<DhKSW[/ci[o r4tuvquuwtrpnmidd]WnR6MIEVA=;;M<=>5=;9d6z31/I-*;(&Q%%0&&*.5D<DCLTTY\c%i[mpqrqqqq?ponvmljiUgh@i9j|kmmsmo op nl g~b[TLD= 4.)L&##"##?#$P%%&(()*|+=,;-.0L2535(55555S59557X:?VDKRZEahmqPtPu uu7tslrhp^njyeE^XSOLKH6DT?=~>G=;:75#20M-+!('&%&%&)`,3 9zAjI(QYN`Vfk[oqrrJrMqqq}poon:lkjgEhiAjklTlnIo&oElje`-XQIA:2+,'%##|#F#$$%"%&e'$(A)B)**,F-l.024Q5T6/6|6667Q78;M@pELRY`fluorsttStrqonCjf(`EZUQNsJFBG?8==>X>g=;:U8353h1.+)''&&0&(&*06>F,NVN]dinqIs rsrrrqppponmmfRfhijkTkmnnkic]V+OGV?@701+2'%$D$<$$$$%m%&''(f))%)l*0+g,M-/S1I3456h7N889_9;>CHsNlTfZafknqrss_sqpnmXjFfyam\sWSP LHDO@>[===r'((w(()*+J,h.0=2H35:6F79:1;tAFKaPV][ahf=S<;98C6`4^2504.+)''&,& %w&(&,19Q@cH7P"W_f.I,+*)(b'K&.%Z$$@#$$'+17X?!FNWh_fkpr[s/rbrrqqoo'nmmlbbctdfghklkje!`ZRJC|:511.-,f+*)((J'&%$$#"# #%u(J-3;CoKT|\diioqrqr@qpnnmll?kbabcekghkkiQd(_XQIB{;E3,'%$\$%}&}&' '(()$))))())s)2(((()*%+z,s/L3%8=CeISOVI\4aehkn[qsstttssZrqpgoTn{mml%ifa\@UOI_B<+6 1.#,k**((''+&&8%O$[##8"k"J"#&+l1H9A@IGR$Zbhnsprq quqomllxkk|kTaeaabdfhSjjhc(^sWPHAM:1+&%j#$%3&U&'7'(X)&)***b**|**s)))p) )2)4*Y+D.3&9?jELSZ`fjXmnxprstvuhu~tsssrqq"pkpoZnlje_YKSLD=72 -+L)(#&&$%%%%l$##>""!!["$m)O/7>G*PX`g2mp9qipNpp+nlkkejjj`(_`bdf:h jj ga]VOnG?80p*%$#f#$%&l&'y(e)*+,O,,-H--~,,>+****+/x4I;AA|HjOV^"n#(G-5=FNWf_floypoooWmkjjjUjj^^_a c[egjiAf`[{TME>\7.);$$"#t$5%Y%&G&()+;,-._.000//A.0-,*+'+,s074<"BJQYafloxqNqir`ssstetztKtt`ttt>t4tssrpnjfv`VZ+RKD)<60,)B'E% $#^####"""P!!!"#'E,4<5-(&$-#"#%#%%~&&(*,.0U1245n5432:0/u.!./)27=D&KS[ubhampqzqTrrssEs\sbsstEtttuu5u1ttrwpmiJc^ WOHAi:4/+(%$d#B#D#P#g#"w",!!u!B !"&,$4#;D3MUe]wcjmoXnKnn lojiiijkXYZ\j^adfiihd^XQJB;X4Z,o'#m#"0"#$%f&X'}),./135u79?:[:98>64201Z2 59?FMU]|dinpqqqqrrLrjrrs!st\tuvDvvv1utVrolxgbk[UMF_?s83).*&$|"""""*!!k!O !"&+3;CLKT\bimnmn"mljaiij&kkUW(Y]/`dfilgdZ]iWPIA:n3+&#%""4"#%$&!')U,/M258Y:ww6vutquok f`ZSjLLE8>,82F-(%#i""-!!X [ z V!o"e&R+]3&:CKS[ahlonm!mmknii'iijkQNSW[`*dsfigd1\WP'HA%92+6&T##"f#;$ %')5+^.26:i=m@|BEFG}EC@><::7;>B#GM3T[7ahlpSqRrrr`rmrqq2qqjqr;rtuuvwVxwwvMurqQnJje_YR9KC= 61+,'N$?#.!!t  !%*2q9BYJSZa>h0kmylll_ji4hi1ijlKO,T Yq^cfuihdR\VOH@9i2+,&x#<#,"#$&(+R. 16b;%?dBFgIKM#ML&IFDB!??@DCGLRXD^djnwqIqrrsrqqLpqqVr4sttu|v7vwwwvNu8srpLmi&d$]W|PI{BQ;P5.*&H$"! g~|`a X!9%)19#AJR*Z`gojlkkk:ihggggiAjEJ0P V\beiVgdE\VOH"@{827*&V#""#$'D)-0K49?)CGKNQRSR1OLIHEEFIMQV\brglp&rrssdsNrqq;p|p}pqrstu#uvwww}vbutsrplga\UNG6?91,(n&%#V! ` }P ) $)R08J@I$QY_fjkjkjgfeYffYgi>DvKFO-W^bgfdG]TW,OH:@92j+u'#u#%#%&)-'15;9A>GMLPUXXU[N\]\ZWUTStSSVIX\`e"im,prt)tQt}ss%rDqpp+opAq9rsttuv3vwvv:utt rqo&lIgc^WPIJA93E-*b%#I!{!8 Jb  $n(/7%?GOW.]dgihh&fc`2^^^_a2D9BKPS\afBf;d^9X0PnI A93%,Q($,##&+(5+/49t>E K#PTX[^_a`S^\RZZY`YZ[]a@dhIlo qs2tgtrtssDrfqqpXp p,pqrstuquvBvvvuRtLs}rxqomjUfa[TMYE=w60,'~$K"8! cN $(/7e?GNW ]dfhgxfc_\OMJuIJV!\*74?{JTB[beHgb]UCMF=6/+@&p%&*>-38>DAIOTY]`Kb cdege@ddWd d]defh%ikym~oRpqs:t?u&u^u_uuttfsrr*qqqrssstt^tvttPss@rRqrqpp nFlhc\kUMvFv?902+'7$ #A!! 5 7 P"&+35:CdKRcZ`fgThf6b\~V;PJGBAo@%0L;+F PY;aVdgd`XUQ-I-@9'2 -X(&'`+/5;@AhGBLRfW,[^abde+eePddKddxdefh(ikvmompqrstuuQu2uJu>u-tt=srrrs1s|sssshsZsssrqpp]pon8lhc\UNH2A:4 ,( $#"K! f e #K(.5=EMU%]\cghQiUfatYRKE@$:87!,66BM|V_dhfct[nTLsC<4/*((-N17=CJOUOY^D`c ceeeeMdfccd;defgiek5mNoFpqrstHtuu&uju{u~u#ttsHss3sssssArrs\ss!r qpMpoonmid]uVPDJCo<4-(%N$H"" 3!$*L07?HbPkW_eiMiFie`:WoOZG^?9Y2/-6(h2=IfSm\bph]he^ZWOGp?~72},~**4.u39?^EJKuQ3V[,_acdFeNeed{ba}`ababce&fhjmroqrs|sttfttuutt!srrs,sssstsrrsKsOrqpp/pppnmj!e0^RX=QKNDH<5\.)_%$"" l #_&y,n2:BK*SQZub)fj`iiud}]T+K_B92+s'$I|Y$.w9EOPZ4`higaZRJB:4.,+/4K;@@FLRXT\`c*e eefeed@b_^^^_`bYcf0hknprpssssttvttt}tsvrrsssss.rrrsrrqpp6ooopo1n$jye_zYSJLE1=u67.*&1$"! e !0$(,.5l=EMV>];dyhCkAihb[PG=4+#]V *25 @KV]f,hshb]LU MUEm=g7+0.,0 4e;1@FiLfRW\`bide*eddcb_]ZYYcZ[]_Wbe8hlnq r1ss/sTsbstt ss`rrkrarrs!srrrHr rqqUppooopoKn1jf`[97/*&Y$w"?!g  !%*08iAI PY0_fhikHhfu_ZVLBg8.u%jo _%0<3GR[ dgiKd_nW-OG?9)20K-0a4:?EKQV[^a)cdvdcb`/]RZVUSTV-XZ]aueiloqirrs0ss6s5srr$qqBq\qr&rrrvr,r qrqq[ppooop:odn1jgbU\UNF?f890+.&$I!  "N&+3j;WDLS\:bhjkh0d\SS:H>4)< k P9(!,7LBN5W8`eh_e@`YR&JB|;512/803&8=~C!HNSW[]`8aa`L^[XUFQOEMpN,OcRqTX\af*jmoqr2rrrr~r7qqpp{pq9qrWrrlr)rrr7rqq$p{p/plpponkhcE]_UNGh?80+@&Q#!7 !T"'-6>&FNV'^dijjf.a+WNC9>/.$m{#g  R?'x2X>IS\]-bgf-b[tUME>|7401<2q6;$@EK PoTXWZZ\]H^\ZmVSDOKIsG GRH]KO#SX]cgckn,pYqrrJrrWrqqppq7qr$rrrrfrKr6r qqqvq4q.qqq|pVovlid=]V.O G?8F0+%#U X!#)/8@HQXafwjii^c]SpI>4=*o s"? d!"-08DHNX^eWed"]X1PIBE;622+148W6/*h%Y" ?"w%+C2|;oC\K&SmZbfih fu_XFMC9J.$ "lc(3$>IT[1bdd_[9TXMFD>94V21U248=AFIMcOQQRuQ"OIKGCu?=;Z;d;>B,GN!T[s`fiTlBmo2oprpwp{pfpTpq/rrsYssss=rrrrrrrrs rrqvpmZiTb[TLqD<5.)$" !R #r&-5}>NFMsU\cfi*ficb[~RG=3)I {p<"-9DPNV^b]d_a ]WdQJB<74X11248<-?BFiHJKPKJbHEB.>':u8L6n669vIR][C_cb2_Z<;b964$0.,->.026;@FM+S8X#\_cf7hjlSmnoqrrstYttttssurqpoonnn/mGjgcY^XLQJ7BHRoX_ab_:[VPOIaB;6L2.,+ ,-012356736:420.,@*c((),=.2d6:@;F)KQ"UY]adUfiSk;mnpzqs-stmttt(ss rponnGmRll!jiXf"b]YRLKEr>82-)&$%$'p*F0&6>FM)TZ`bd]bH_WNC'9/p%Zl UR i)"-_8CXMQT\``ba^YTNG@:519.S+*5*=+-=./01g0/.,Q*('o%%&I(+.165:?EFJcO2SvW[_behojloprrssss_rqepnVlk:ihOg eb_X[VQKE?:4/,+I'&%&'+Y/s5<`CKQX]{a4avb_;ZQG<2)y to w[<'p2x=HPVX]bbb ]qYSMFo?%930W,)''(W)*Q*+k+W+)('%$s#M#K#%1&),049>CHMRWK[_clfikn_pqrss\snsqrq~on+l%jgec+a^[XET\OxJE7?:5 0D+}(&g&v&H(q*/4;BIPW](`bYa"`[UlJ@6*,?#S  Qt[zD !,+7AAK SZ#`bc`]XPSbLE>940l-)(@'(((8(,(( '&%~$""-"?"J#R$J&(,0849N>~CI5NSX]1ae1hk]moqqrr;qpinljhDebP_'\(YVTPLH,C?:51-)($&((,/5;kAHaNV![` ab_e]V{N`C9z/%% +l_ %0;EOV@^&bHenca\XSAL~E!>9H4M0,v)'&&V& %g$$$$`#"! !F!#P%(+/:3P8b=CsIfOKUZ"_$c@gxjmbnpQpq pooml iqfc`\,XuU)R2OfL}IEnAQ=E9!40,*U( '')+05Q;8520.,+2+f+-0 4M8>DJXOU5[_ b;bnc,`N\UDLA7.M$ i$W]u6R i'2==FOV^cg7f)de`,]XThNHCw?;741h.,s*('%M$B###$$%_&$'l(*-"048= BwGMS.XG]7a)eCgjOklkkjigdQ`\XTOaJFYB?=6:{7521 0.../14 7s#:7n41/G-]+)('''X'(*+,.0H258gijKjj`ih eb`^ZVnQLHCR?<'9642[1H00012473;?7DHsM.RcWD\3_aQa ay_f]WOD:1B([ 6 zB %U[1 $#-8C]L TYZaehGfdr`^0[AWRNIEB>><86w4310w/*..^//12469;|>aADkGL P TX7[_behijljjEigeb__"[ VRCM~HD@\=:86]4456679Z<?;CNG?KXOS$X*\H_`s`}^]ZW OAE:1)~!$l aF:[2`uv0-%0;F7O U\bgkhh[eb`]tZ!VYQMIF:C^@%=;:<8766056K7 8:<2>kACFIKNQTW[>^Fa(cfXhKjjk-jigeb_?[(VR[MI.DA5><<:9(89A9;Y)@JCFJNHRVZ^abN`_g\ZVOE;1)! -c7mk1;yf) #(3>{HO@V[cb eh=feTb`^\Y@UTQ2MJGEsC$A@2?>>>?%?ABDG ILO(Q~SUWZ\k^ac4e%gWijkl/kk+i@gc`\XT9OKHE[BA@A??@A=BhCiESGJMQTSW[y^{aa`]b[!WpSMYE":1)+!H0{K_N*0ANh "!@*5@gHPUp\4afh,hfmdc a`]=Y|URsORMJI_GG;FG1GUGHIKeMORU=WY[];^`anbdyegOhj|klmzmljhPda]YVRNKIHGFFFGkHI1JHL>NfQ~TXN[^abc_ax_+ZWRGLCT90(:!L1>  @_h|=1h.Q G=f^",6@bH#MSY+_cffFeccbad^[XUSQPO_NNO#OPQRTbVQXSZ\^`bc&cdej5K,%Y$z _"cK0n!O ?(r#x+4\[ZZ-YYZZ|[]+^```,][RX8UQLD;2k*M#N 2`&YC v: C!)2(9?ECJOTY]__`;`a7abcdAdddddef[guhjk~lmmnKnmlmjiBgfqeme'deLefhgik kkkmjji6hRgifeeddcba`_^^R^X^____r][XV-ROyIzB=9/'!  *%yCZ}>- ' !'X.5;@9DHN6SW6Y{[&[\^n`bd|elf-ffgwhhijllmllJjigteb`$^{]\\P\]_2`bdefggMg0g&ffff+eewedcba"_^|]g\\R[[YWU7ROMJEv>5-%DY' apL/Zq[^xVVW k9#*1w6;>CGLQATVXyY\+^ace}f~ggghkhiqijjjihfqdCah^i[uXVTTWTTUWY\G^Y_a6abc$ccdd/dGBFIKMOQSUkVX Y,YZ/ZZYBX|VTQsNpKG|DDA%?!=4<<=>@CEGIKuLNOP=Q5R/SSTsU1UzUUSQSNKDH3ElB@><;9J61- ')!hD$ )Bx eD{~IOINPSD00~G^ Kq! %()*-16:y>!AcCZEF;7431.00|1u2h4?678:<>I?ABBDEPFGHIJaJJIH/EZBV?;97Z5431n.S*%!6' ` T;tRt2Jj;~|XOq574HUP7) &F 1+X|!#&*B.258;f<=>?=?@}AAAB AM@s>y?&???b>>)zk) z H\ew{)C + qq$6rrn  n !Gl<`:= Y #S7KO4h'~U63;N[YM*) nX\  = m @ % 2 | S&_M=MhU=DP_ s [ : W Z &VqRj~gG^q^XNNWXF!+ -!grDezg]"^lp?-vm0R7GVU$g:y*[zxlhgmTI:00%WmS.&L.lwiPFRegac`WNVO,3\J{$ kfQTd{R4!63jTUTg"KA,Rya:Z# K*2Akum[ZcftuD  %?<NN,'RmyC67OZliR0!  1MJ./Yzd_l|s} ~S, ( 4VJ)>>Ju[SdkxmR7$!6Uq~||  kN,& , EhmG$ImyrX4?~*jQ8 "*1<CNA!*CF??IWp|#tI, *  #%!4HXN0  (GitpW?#0=?6.')# &)DEG[z%* {yz]2 %  !CSH2 &574=:$ AjXF?<BNPE+  !.%&<?R~_MHI;!% 9\cQ3(**-33'"/2Bd{qhd^YXN:  $ )BNa T2"  $%"&.)&(@]cM4 -G\^WR_v yqldYI6'3B=%   /E[nqE-  z 5wZ1n*'Wd <"!z$'S''A%#! F L2)l8 d  & j   N Y C U5P32:@BxRWS+E    !G}afcP"oS}  -/ ""g"#%%%\$T"z! |1q` ?    = f Q B Z \ d C  iAt6NUNyw7 PR 8B: kEW%?FbO '"#g#####"! #|233 ` K V h / C X ~   "    % ? W  W  8a|*&WqTojcD#Fj?S epJ ng}&i)D> 1@ J     < j _      N h ]`H"1tsFq| ogR L]r$ + A b :|$G@>v 0 l f a % S q g 3 l { v S 8 . 0   . q #\e O  {D}']A^\P;q18s-ns\MM.Y{q-W<>g0 A  D + + 5 ,  1 U z L   B e u e P 1    "   # T Pi   e 5 f.? Y2N>}8[Lc^HrT<Z R70C4a< 4 _  A qm8rG/Jl$ I t [ ;  & w [    J 1 * %Si>_7b(H4sp;JA}7N9`   _ F B !}O2 %j"L5+^fI5)=~ D .  ~ W   =  F m nL=9 {cpAf%Xu`qc+UNv m 5 < 8 WUe&5-) . ygTKB9" 1a %_E'TpP4Og `  b 3 p  F |R\Op)7zcB TW$   F b_pq O( 1mjR84;\hfhNb|` A * F ~ , ^ @m""+ d   | }  A   q Z Q @ 8;Z@a/hNVa,{^``r_2:Xo~V9{%w @;"EV + T  ^ ` d H L t ' 5 D   A 7 . B V D !  " } 1  |k4jj;_W\(+k b! *Omukyj< +H_rAbpsr"VH\^1E H K K o ^ V X  -  , 2 [|t~&j~[dbA&ApW%OyM%A^m`  R M #  / " i n v _ < / @ v e ;   W c ~Et1DgTeq+ C@ C&vZ6' .4Oj[g!mVMUZ_\`ls7lS +]}pnN/|V  q T XoGNjCt|x}Ukm|2!HAZ}b^G829@GJHBFdur>rL:j_%D>f lkl.W W b 8ij hM&[O]hPk#@KR[bA ^%Atj_ilY F @ / +   o ` H / $   %  a_SPij ^ Bs01XvDsysW,2& Ty#fF *[rKZ "D)m c A 2-*1%If{/p1 g l-.N}EWW&q~sPU:dxcHAbG<g:{ Z~.~,{L{k 4 Jqx8Qbnn7P<AX>p R{LA : {emr`G3CKw@L> kF6?GLV{-<Q-C_ U  RnW'MJVD do;X7F('elA "$]%')'((((o(G''&&V%$$f##o#""# #""! p>S 7 ( {\Hc5P CWhx{L7Xvs-a*">D;":6mS a vxk k"&"#~#$.$%'g) +1-+.02$3?34+4)433j22g110^/..g.---.4.t.u.p--%+*I(5&#![$Tsz fK[cn,im4Ty'}k.:u a<Gowr Y x;"%(*d+,-.9/ 0<139568:;<=}=>B>E>&==|=<<;q:99'8~8#7778=88888!6532/-*!'$!*+p< %Hx^Q/Ob&4PDdXox ,<i}T%Rr@P @$*u"'!*.{13z56b7I8J9_:;=X>@lAC4DPEFGcGHkHHH=H"GGG.FEEDFCC0BBBCC6C>CaC#BA@?e=;96|3'/t+(%#\  1RG`V>MoNcTv & eEM3 .Nh!%* .42j69v<>@EABCDEFGHJOKMnNPiQSSTU U8UUTTTS~RQQ$PpP OOOOOO]O*NMLtK=IHFE'B?;73/,(N$ ) 4 <h(oE4X M>6)3)8T%  RXYEYZ:Z[]f_V`bqd eufghi&i`i?iKihhZgg/fveeSe.e*eqeeeeedba9_^ \[ YWUSOKGpB}=U8G3/}+'$D Bwe Ak9_j cF5I] n H.f!@&'*.2c6G:>CJG-JMQTX1Z] ^^_e_`?`a.abceUghSiPjdkLl@lmmmmmmymUmll1kkjjjk#kklEl0lkdji95T1.*&{!^T jxe2OA7IjJt|^c 7) %+E0R48=AAF*JKN%QdTWZ]`bdTeFffhg ghWhijzkmmnoEopgpqFqhqbqAqPqdqpqNqpp1ooqooppvpqCqiqq5poo"n8mfl0jhfdCa^[WSNID@R 70}*{$ V +X Hr**@)%'&&&'t*-"16;@EJOTcXt\W_ceghIhhihlgedLba_^ \[[:Z[\_?aeThknTprt;uuvvv3vvw.wwx!xJxxxAwwnwvvvpv8uu7tsrVpo{n:m'lFkx9xwovvMuttasrqrp/nlk>ishffe>ddddetfLg@ghi)ijgjjjOigfc`)[WsQKUDg=70 (  u "8Z@?p>D<<;&;tuv,vw1wwwx3xwvv utrqpomIkjiBgdba?__R^^_8``b.crdf"gihik#kl`l:l!k,j=C<@D GL-PU]Z}_dPh@lnqscuvwwxwx wUvtrolhda.]kYV_S(OLJ3HGFFGHKiMPyRU&VXZ]`gbe$fhjklam)lki>g_c_Z!TQMqF?s7/(h! cDcccbb?bIbd-eeghilznp\qpqrpr#qpo'liIeW`u[VRjNJG4CA0><:9U77*6W6y68$9gkoqusu/vwM<:3865e32222/3X4d69L=GA=FwKR W]~bg~kor,t*vvwxxMwkvspl)gAa\VPKFB?V=e;]:q9r99:e@XBDG[IYKlMPSWQZ^b!eNhjmnoonljghcJ]X[RKDV<5.a'  ikCllqlLlBl[lm!monipqsskssWrpnk g[bB\VQ$L)GKC5>;865e4L21G// .J.>././B026<9>DK7QX(^achlpscuvx x%xwvspLje^tXQKAEv?;\75332m23C4698F:<>B@BDFILPTY]]b fi<nppqonlWiFd`ZTNHGg@ 81*#. X >jlmwn nn_nno"olpZqsst]tCtisRro-l9gc]BW!PJE@= 9764+211H0DKRY_ejoruwx`x]xwvsoic\UvNGA;J620..W-.l.0Z135J68:]<'>K@nC*EI{MRW\a`eBi*lo"pqppnliGe`\XVPICz<}5-&v lnJokp%p_pq/qDqiqr{su8uuxuKsqsmidU^XQJJD^?M:V63V1X/..}.m.--L,,,+V*))*,0.I27>EM~T\chnrvw^xxmx`vurnh~aZRcJC=Y62$.,i***o*+P,m-/"0`1235F7R9BFpKQV\aTeimpqrruqtpymkCgQc^YSMF?709)!mso(p[q&q~r,rrrrsu'vvuurro^jge_Y QJD/=9A42/S.--->-.8.s...--5,#*)),()+4/3?9@HPXq`VfmquwyxxvurnhHaYR JC<516-E+*x*k* *8*f++,-.8./W013j6#8y;??D.IvOU[`e-imSpZqrrHr%pnkzhd`[V_PIXA:G2+0$n^pqgrQrstMtIt;tuvwwZvtqm g aTZlS KD=730.6,F++j,,./E0000 .-g+*=) ''(j+.5B;DL`T]sdkpuwyyyfwvsFohibZS#KcC<50,+()))})))*:*+++ +++-/Q1V478.1neoq1r=st9tttuvw*vv.spje]V.NWF4>73.P,*))*e*,a-02G3433K2 1E0.,*;(')+[0P5=sE(MV2^@felsvyz?zyxurulg`ZRK!C<61.,s++^++++++Q**)K(D'&'N'), 044P:@G!N$U [agkoqzsst"rqp-nlfieaV[UOHxBr93510/01 12s2p20/-,Q*('l%%&:(+1/3:@H2OW^Ud(impr7strr;qponljqg co^ZUUPl{mcnWoypnq3qqr7s%sCrpnje ]#UMD=5i/*T'k$$$\%U%'')+.1244]455531/-,,,.27=DL8TQ\dpkpuPvx~xfxwurBnid^W\PkILC8=954m3|4R567+7R65G31I/6-#+)'&&%|'(,b/5_;PBJxR@Y`cf}jnqrrrpppLonljYgd|`]#YFklmnopRpqqrr2qpnkf`X4PH[?70+&$"""$ $%&(*-0t2Y345666=5'31/>-z-&,/16;BOI%Q&Yaibnsuwwxwvsq=lha[XTMHB>:8789U:;;;9q7+4,1g.,L*'x%$%[&;)'+06Q=EMU]chmpHrrr,qppponmjkifda#k?l ln%ooNojp*pq*p*nk~hcb\SKC;[4-)~%D#i!"S"#$.%2& '*,/p1Q23556635Q310K...n0N2S6:A,GObW_gSlrtvwcxWwvtrnjd^XJRLGC?=c<<=+>??>00 126s:B@KFqNU]ekYpsvwVxKww u#spm2ga[UQLHDA?@.@aAAAA?<9p52 /,)'%%f%&h'+`/7>?FNV^NdjnNqrsr!rr/r+qqpplownlkiijtklmlln@nomk(fbZ[T|LLDGc^XTPLHEC&BBBMBpB Af?=:7*3O00-*(&&F%&^&*-4;nCKtSM[IbhmqCrsrrrsrrqqpon{mKghpi-j,k kRkmUn'nkid_XJQI@91+g&$""^";"#H#$%&' (|**+-.x/1 2 2222223T35a69=IBHOiVr]Lchnq-t+u1v$utsEr(pmie`\[UVS'OL/IFGDCCkC&BA?>_;8+4Q14.+)''&$&m&F(+18o@H@P)XP_fkprt'sssssssrrqpeoygDghVi5j jXjlmmjh;c]XUNF>S6.)%$M"""#}#$%<%&'@(>)1)*E+T,-./0h112!23t4579R<@F-KQX9^Rdh{lorPsbtgss5qponlifNa]Y>UfRNKHF?D1CBAAu@5>e<:7h31.,*(\'&&&)'*(/5=EMhU]djortpt?tJttRtdss,srqpofg5ghiZij`lxmjmifa<[SLLD2;46,([$#"#X#f#$X$%&&'!'(d();*C+,-_.0./01235749<?CIJNT@Z_bdHgknQprsrqp9o*mlIig6c_[WT@PN JGDBA@?,=\;963t0.,W*u('&&%'(-3;BJRZbi:oMrWtttt0ttssrrqpoffgh9hiWj&lWm5lie_YbQJ>B:2+'$f$###$;$%X%&-&''e'(+()*+,8--./0236J8;?CHMXRW]aehl3n`pqrurq)onmrlMjihMe;b&^_ZgVnROLHuDAk?&=< :r86411/V-+)(t'z&t&%^&c',1q9&@dHWPJX:`gdmqntDtitdstts0r!qqponffgghghil ll;hdd^WOH}@813*b&$#$$$$$$%%&&S&&&''M'()r**+,-m./p1?369=BGL1Q~V[`cgjmlo pq0rqpo~nIm"lLk igmea]Y4UPLHC?R;976o531f/+-f,*)<''&%$%p&H*>/%6=EMxU^eGlDp?ssts's}szr~q>pponmfefQfgh]ifklNkgc]VNGK?7y0[)&$<$n$w%%%%%&'&&'>'a'&' '((()*S+K,-E.,0\397x;Y@EJPCU[*_cfj^mohpnqlqr>rqrpnmll2k]igd`[WQMGB!<8Q5u210/.,E*)('&&%1$#$E$(A,3:BJdR[bincrGss"r,rrwq`ookonFmm eqeejefghk%kjfb\UMF6>6x/)Y&$a$$%%%&I&'=''''r''@'''(()8**,<-1/38W_gl~pr rJq5qqppBnnmm ll#dddqdf ghujk+j3ea[}TLE<=5s.(&a$f$%%&,&i&'X'(d(((~((g(((n(j(()|* +c,n/X3"8=CJFPW]cbfj?l]opqr"rs srwr qDp(o&nnYnlk}h}e=`ZTMGq@:J4#/,F*)){(}'&&&V%%$#U"!!!$'L-4 jopqWp(prp>nm}lllkkccjcdFefhAjjie(`ZzSKD#<45-(%$2$%%&W&'+'(x)))))(){))b((((f((*+%.3+9?rFMT3[?afjKm]npqr=rRssQs r_rqq$ppCoonTm5jwgbl\VOvHAF:3/*('2&%%2$$$$$#""r!!/! "%A+(19AJ R[c7hn@opxo,o_oml/knkRkkk bbNbcefhjji d$_Y"R:JIB;'2,a'(%X#$2$%%&a&'()x*b*+ *+v++V**H))F(()*.3:@GOV^1ciuloQp1qwqr!r$rs rr{rprqrKrrqq6onlkid_YRKDF=U6k1+) &%$}###7###"K!!M S" $?)08q@=HQ`YagvmoonLnnnlk"jqjj|jkaia%abdf-gjih b^)WPHA91H+&*$#<#$2% %f%&Y'<(2)X*+,4,-1-e-?,,+a*U)(){*/ 45;]AITQeYA`fdknpqqr;rTrGrrrssZs|svs[ssdrqpnXkg]b\UNGH@82-)&%\#q"v!!"J"}"(!! B D!v#W(.7#>GPPX4`8fkn nmlmmkj5iij!jkJ^^` acegEii1g az\UNF?V8/)%E$"#[#$$%=%&(*)+}- .`/D0X010k/.-F,*+,1R6(FO+W-^djm,n lllijii-ij#kk[K[]`be'fihhf2`.ZTLE =6.y($t#"o"#O$$M$%z&(q*,.029345(432=0a.-K. /48w>EfM"Uj]Hdinprqr$rr)rLrcrs5stUtu@8AA@g?3<:O8Q6;68=AFLS[Cb)hm5pqss%s%rrbr?r1rrst4tuvivwwuwvts]pn6jfa~[TMPE>r822-(o$! >{ "#&]+3;CLS[aaohkVlkokk!ihh`iPik>lK5NTYn^cufoj4iaf&^XQJ-Bz:3+&#a# "#_#$%'),0448;?XB;BFxKQX*^ekHo"qrssssZrr]qrrrsPttuluvTvw=w)vu0sqomj9e`YRKwD=j7=1+''#"3 -H  !%++3:C+K]SZ`gjlhk.kAjhggGh7hjkE0IPV\bxej>ifd^XQHIB:_3E+&"""h#n#%9&)+y/347DWK[RZ`diiLf_pY6QJ%B]:3b+&"""C#$5%'*-16;@DILOPRQYOMJHFGIMEQ!VF[a.fk^pruu^uuAtss'rqwqqirdsst?tuvRw#w>vuusrpnkbg]a[U!NaGj@:2-&(&9#R!  !%*19BJQ~YU_f]ik5jih7ecc cde/f8U>FOQWP^crhhf_YQJ\B:3+'##""O#$&),0<49?qDI\N[QTUW/VUR~PRNM^MO_SV[c`:e6jnqtuuv=utss3rqqq2r rs:ttuvvvw@w4vcutsqpmjued`GYSL}E>n60n+a(k$"!t!< y  !%*m19VAIPX_,ehmj3i hfca _`~`IaZb29IAKKT \Bagh6g`ZRKCC;4G,'#""$i%R'*.27=BH!LRUXYxZZ]YVU?TPSRTU^X[_ch6lsortuuv!uttsbrqq>q6qrPsstuguvwJwuvv tsrYq-nlfh"c]WPIBG:r3.k*&y#"M! Dp "&V+2?9BHIQY_beBgioh,g:df`]V[r[>ZJZ\3+3=*GKPY_fyggwa[SL&Dm;71-U(K%/#("!G um "K&+2:BJwQY_eTgBhgfbX]YWUT%T@U&.8CM.V]egh c0]UIMF-=6L.)$##%'*$. 3b8=bCHMRW[<^^__ ^]]U\\\^ _Tad>g\jVmoqt?uzv^v4uuzu\tt?s1r qdqqr rstluGvww{wuvvu trqp.nkhc^7W OHA;:4/)&Y##9!  . "'-4T<DwLSF[lanf^gi5gVd`ZUQOLKK )3>IT[cfhd_WJPH?706+%$M#&(+/5:@TEKYPUY]%_`O``1__^_3_a9bdgilnpr]stuuuu[ubu2tsrr:qqrEs st&tuv9viv}vutsrGq`p5olj/e`,XQJC=7B1~+c'u$#"]!p a!!#) .e5=FMU]ScghTigUc]WQLIDCCB%X/:EPY3aephfTbYRJB&: 2c,'R%X$'(,1Y7f$["! !$*0h8 @HmPlW_e i"i:j gb[SMFB<:>8!:+6qAMV}_dBi+gd{\UMD<4/)&%5')b-28>DgINSX\m^``:_^~]1\m\\]_:`c5ehkn=pr`ssttttu utt:srrEr$rsDsvs|sst t-tttJsDrDJ NSX7\y^`_?^\ZY>XMXYv[L]_beil(oqs_st%t3t>t@tttnss!rqqrjssBs$s,sHsmsttsqr`qqpooeml%hb[U^OHA:3-$(%$#'"P $'.@4=EMbU\dqhkj:id^\TKCg:3,(%{W+$n.h9tE0OY`vgi#haC[#RJB::3-7)'&(d*.3:8>DJNSX\|^_^][YVURUVX3Z\_cfjhn2prssssoskst&tssrrqrrrsrrrrrsrr\qq)pproon%lhcS\vVwPITB::40-t)%$"" !%@)Q0<7t?H PX_filVj@hb[aPG>K4,$ oJ *^59@KVA]ehchb]BTM#E<6/t+(r(*2.27=@BHBM+RV#Z\^\[YpVSQgPQ=SUX[_cgknqqrrrrrs/s=rrtrqqr&rrrwrarKr7r%r0rqppppAoon&lwhNcy\VPIA:4-d(%$K"x! !O"j&+22:GBJR[9ahMjl4iEf_W2LvB9.&x: h &04 ){ xO A06!,D7~BNW`udh_eBaYR+JwBO;4>/+X*G*-)0]5$9q>RCHM$PTVWVUR!OKH-FEHJtNR^V[`eimohq9qqq]q:ppp\oookopqrrqqqqqqvppDooooo?m]kPg>c\V}O&HA 93,(Q$#!!/ "G$)?/-7?H PW` ejjjf>`WN;CL9/$t] & ar'2>2ISO]#bgfGc[U6ME>72- +]*,1.3=7;@EIM3PR9SRJPM8IFmopWpppppQoooXoQopqiqqqquq?qqpp{p,p#pBpp,omskgcA\UNGG*@:82n+'$O"!3! "$*u1%9BJ2RJYbg5kiiVc]>RI>U3)> f"7 _]#T-8D|NX_eedQ]XSQ IA:4/-%*+- 038a70*' #"!!M!#l&?,371.+]*+!.048<@CFG{HGtFB>:7 5a35;6:?E^KRYh_dCgjlmnnno o no.op_q-qr^r\r!qq5ppppqqLqKqCpsomk\fa+YRvJCtR@ABAt@}=:'6220/12A59h?ELRX^bfYhgjlkplm)mn-n~nopqrGrrrr qqZq:q2qpppOonn;kic]V_ONH @93-(%""!"#&S*2:pBJwQY_e>fgc^ULA7-# R#\ SZ(3?)J R[`cbE`Z9U1N_F?/8y3/ ,n)p)I*3-[0"3,68O:;< ;:E8(5g2.-+-%.149>DK`QW\acfhjlmcn2nopqrs'sssQrrHqqq pvooenn\m-l.i]f`qZsS$LD=7k1,G'W$"f"\"#s$O(m.-6>)EMT\rameef`ZqPE;1' ^|^[ X#i-9LDhMV\|ab$ae\XRLK|D=7|2e.*)(f*Z,q/1'245554l21.+*\)4*T+/$15l9>CIP UGZ]adugyikm>noprsstssrrqqonmlkki\gdV`ZU(N[G{@:+4.*&5$""#~#%m'M,c2;-BIQX-^b!eid@b\sTI?5C+E"! ]&52|V('3a>HRY_ab_N\V,PHI5A;X51,)''B(_*,J-v./0//-,.*z('b&6&(H+H-1L4V8=EC HNVS`W[_>behjlnppqRr~s#ssssLrqpenmJkjikgec0_G[UHOIBzSyMAF8?p95v0,(&%%%%%%x%%%X$s#"""9"#$&L(+.!2u6DJ_PVB\j_bda^a]>XP"F;2(" ]62 z)4?TI PY@^d;eda`W]{YT%MGbA9;73"/+)''%$o##d#^#p#>""!!" "##$&T(`+/I48>DsJPV\5`ePhPkkmllDjiNfdaJ]Z!V1RaNKHDA5>:74/1-+J)))+t,/39?FKPV[{_aKb_]XtQG>3*e! 7jz,Y (#.(90CLZT[{bf(gdb ]Z U%OcHB=8561-+<)'&$##""""""#f#$y% &(z+.38'=CgIvOUg[ _d7g"ijtkcjjh f b_\XFTOKH%DAP=:85G209.5+**q+,/163;/AcG8LRWq\`Abba^ZRJ0?V5`+"J v#_hk ,>F'2[vCzHN RX \<`5alb _^BYgSJn@6Q,$vA =Q  lY!  E +5@WIQY` fXhhBdbV^[WRLGoB>;J752L0H.-P+*)))*=*+,.T/1z3x6R9+<@EYIN_SW\N`$dfXhUhiehgeBb^[2VRNJEEA>;8g532$111124+7 :>+BFnJOTY^]`baa"][TXLAW7<-$` [K!)Y[ /$.8BKtSYaLeHgfda^_Z\XTOJUFB?y<975432w1q101P2 3q46G7:<<>A`DGKO>RVZ^Zadghi3ihgec_a[WSOKwGGCB|FJOMQUZu^Daaa^]XT3KB7[. %Q &Ea3du&10;zE{N1T\+a\fh heRcr`^m[W3RN%J6FDA5?=;:9888F89-:;=?Bm<;::m;]<3=>@C@FJNtQUX\`bca`\`YSLBH7-%~kW 4 xs2?e& .gn(3(=G3NRUZW`dg~fekba^_\]!YUQ~MKaHFD~CAAAIAkA+AZABD/F-HMJMWOQTVX+Z4\I^k`bdgEhjtjkrjigea[]YURSNtK GEClBAAABCDF0H`JNXQUWZ^2accob^N[WRK0B 7r-%< pbKyChJ*5@Il l!S*56?HOTGZ`AeghYXgWWWWWWXXZY>Z>\^*`cddedc<`a]YUsNGH=3*"x2 9Tk~*iI g L "s*3D;%AFLcQW\`ab{aaaaa`_^^]^9^_`fa.b%cadeghiijwjjeihhg)ffgyhijk!l&llkjhz+  ('0L7=CxH\MSLX\_1__`!`bccccdBdefefghijkzl"lZllulFkcjPhfepccGbcocdf1gij#kKkYjiqhMgEfmeed{cc3bbaa+`t`_``taaaa_]>YWOSP IB38/8&[u< [o/ xGY}@%o ;l%-39>BG^MRVfX}YZ3[0\^a bcde|foggghiJij(j5ii#hg ebcaJ_][XZZ=Z[v\^*_acSeef3ee@ddddLcc`bbb aG`;_2^X]]>]\\3ZXVVSQNJF>k5,$G ^*0gDq~^]rQKHww h ")/59T=AFKOS/TV4WY\*^`bdCefPfffgg+ffHecb `S^[Y.VTRRQRSPTVjXUZ6\]_B` ``@`S``aa(a ```_^]O[ZY!WVTOR8P9MLIF@:82**"6TV &\gN4gT{eha]t" y -O%j+@/3K6:?1CHdKaMNPjRmTW:Y[]^>^^n^v^,]]\ZuXVT~ROMJyHFFvF6G%HIK9MNPRkSTU1UVVWOWX{XXY[YXWUrSdQzOTMJHFEACB >:j4-p& 6  s0ykse`RVbs3 ' L u o%)-0F37x@2ACEGHIJKLN OUPNQ"QiQQyPNLIGVDBd@\>=;972-'!Y O/e7p?wvRVLNOTH6"o}3;S [ ` 6$:'8),s/483;>@5ABDAEG`HIwIJ2IIgGFKCA?<974Z1/.e--.\/0Z13468:k;=)>a?A7BD_ExFkFFF!EB@n=;997&54391.*&7!*$ge iLg? gBt|VKo?A<MWT=/ &>\ G "%)(c,/3x68Q9:;<= =l=w==|=";:X85315.,')'=%$##F#$%&()+s-b/D02f35@68r9:;;;:x9 6420/0-,L*(s%"3~ m/#MgDgK8K{/47RbZ:#;t5 n!K$c'+#./1D12 111<1 00u/j.),D*a(H&L$J"* 11)L !#P%&(0)*,c-./e///^.[-+i)(_'-%$" g, .$P) bk*m8$2b/DIQKA1, ndR""G$Q&&'m';&&W%%$P#! H{krn;R(14N [!"#^###"" c: P@L . g\)iA~E_6O-^yzw&HRG/%$.#xW 4|E R7OHOOg> v P , # &  K K I '/[Kz1$7n{ h aL5H[lLV"zD!$6R^ZS!9=+jQ- (i wb; g N+{;yB >l7p ] ZmP7"?RBy%8&|T99;IXZL+. t =z!'>m ) } p)1om$9[]="")B /  5 i**x+n]wftfOnvd]MHW]F'.  t35PiU;-XS-~WmAO{\;b eJlvgbjoTNB24 +VgU55h ;SWJQO9 -EC- ~oYQRtN_XfmpX2xc^LOZxX;!#87  |t?^J'@\|lfZ@ rO>9_*; 9bkaNQ__l {F! $=:NP#$4+#1 n|W~cPSThrpp[A0(" ! ,GJ4$$NylVM[sxpU( (  9]T0  74Fppmx}c`[;  +Lkxuwupnr} oQ) ,4PtuL#7SrweH,@{,A-s_YM( 6LW`YO7 .B>46DQgt|+$vM0 0  **3+$'=TaT;2Ke}un}-2'wd\R9$$8MXRG5& #1GA=Rt+,}vX1  * ' .MVG6*.:??B;, ;rtlh^UKKW^Y? $/)$1C>It{ hQJH4  *# EbdU<0/0353-*.75@Y"~{xpcY]]Q9  .CIX|^;&  ))"# (&%* &IagS;%#6PaaVNYs  vh^]\SF948<7(  "0ASez|sK8$  ~ 0x]0,+Su?YRc;#%&&{$#"!!dCL g  _   S b G  _9sopWW T+D  {E{\aik>dI.|( !) !#C$B$6#"W!n 9/%y+F Q {  1 Z Q B [ a i  ; #'n!IQ0RRt h, ML7D=  :J gM`  * +!!"T" !!" ".!!. ;Ho/eS o T \ [ % @ T   $    # > ?  yiJ X~(#SjMjc_I!*@IR=D No>r$j/r;;~}wH %  ] ' u   B m } V     j,Kc9o4{zEn}! pfPD]CsMP  &o^OQ:':$c+==5 > O | ` j . Z s Z -  p y X <   %  P 0 E 7  }I}&[>[[R>t24u%ejTHH({ ~>>E}k11T  j  N  7 &   4 _ ~ ~ P  $ E ` x q X 4 $  i @y<7+ T  l = c.@ [ (F:|5[NcY8<ArO sinjI  W 2 w 8 tm<yJ1So+ E z l F  G   M# k   O 8 . *Vd:[2_-D=zw>?udZmj-l L x M  q ( xL,  )x,Fy0@\hL4 4 ; = 4 ? > N q oG5; u]oAb)^xr.g[Rk 6 +^  23zbXUA-$1[$_\/eW4' N   w [ v  ; t  H wL[M n#:t[C o '+p ; ; n -r}?|N3,SnkJ45<Y||qY-=bl!cu{ @ * C w - e >m&* a    $  ? ) z m  l VHe~8u"[8BY!mb`uj7 8Qcsb< |4 ;FjB + [  f c h C # J w ( : D   > 7 5 R i G .   s  nyGtwH aaKbK3Nerp|kD<ZvDk|sjh\3Py`;U^: Q E M ~ j ` _ ^  1  2 2 o wy&)ia\m~rLz0SZ"7m %Nz[ +s%i  O N '  % # f g s a = . ? x e .  N \ }Vt3Fr LYm73CB#T-xY@ADVa})}T`MLRG;7?AYVJf"5BR`yv U(tK    m R V_=L$t)Vpp}e`n|>WG+@x?bO/  `0yl51\ zq2U V _ 4fgt _9`KR\@q 4FIU+je'<e>2g q Q 3 0 $ Z  F h3^9$ewU=l!23AC?hIn |uW*( U/tT(Uk@m)/ hchF2f n%}'JB<Pug- (4AN_a+*z_8,e}[\7hzbD<]}75bB d.BAzd b $Y!E75j( p^Q)i9s [ 9  IUt+c/J}MS:\Ay5>FIQx,2?;[Z "MhT Dlc^* S '('? "*#$%&'#''(!'''P&%%C$|#""G!!!!!!! - Y.1^~VE\ AM [~qzG3Yv}d)c* %9<48(XS  IBy(!u"g#r$Y%2&@'m)*,.s/1$122363P3g3#22210//.<-,,,t,,-+-j-6,+*)O'%#!B,e6 ZkTrz$Uo%P"Zne.8u`CX {  N~##S%(h)+<,<-~.013468T9:;<-<<==1=9<<<;::958T7666}677C777F6w54p3(1M/d,*'%9" 9uG _ =mv66Q>YuR mu$PyxQ$6v|B/ P *P#'+.13+4f568"9;= >@[BCPDE+EFFcFG(GfG~GHGFFdEEDHCuBBAAAB B>BoBEAA'@e?L>E<;`9D641B.*'$"?$P U ;FJjMcPuvr+!p91 1 5L!&-*.3,69;=?N@yAC#DFDGHJTKMmNOPQCRRSyST8TT SS\RR Q4PZONNNNOONNwMLKpJHGSFDSB@=:O62.+'z$5 ;U 1 SP_V'{AmM>:8H=!'O5n .} $Y(i,16D:R>_A{DXFUHJK6L$MuNOPQRThV3WY=Zq[g\]z^q^_l___P^^]]K\[ZZNZ(Z_Z[ZZYY WVTPRQ)ONYLKIIFQB>o95S1-~*''-$/ { lpAc=A  9m ,jx& E%U"&Z*T.378;x6 e 0h$k(,049>iC G*KNRUXZ\]^g^_i`%`abd4egyhijkkltmm:mgm8lllKlkk5jj$iijqk2kklkkjihg;ed b3`q^\ZRWT\PLG~B>C:`641Z-)$!;\ j(F;= 2aW#O.  =<9$).c26;E@EIMQkUXu\?_>acdeeefWggheiMjkmnnoMop2pqq q2q pppppvpooNo oIoppq4qqqq3ponmlkAigec `z]NZ V1RDNIEA>;8-4P/Y* ${D vB19/$>&x \ U r< %*/48=AOEJORVCY*\Q_,b7dZffgnggghmiAijkultmnop8pqqmqr(rRrdrUrMrWrrrrOqqqyqrrrssFsVsssErrbqqUponljh!ezb_\YVSLOLuHEA>Z95"/U)*"-<\. :A}y+#%%3C u H {l!!N&*0J5:?CHLhPTX[^s`cZeJg>h`iRiiiimiaijRjkl\mnpq8qrrsEst/tztttttu utttdt=tntuCuuuuuumutt4ssNrqpo6mjge;b`][YVvSSPLGHD!?93,%eT 6e -3LK(D<E}#X', 16N;@EIMQUYm\^`bdf+fgghggggfgghBiejlWn$oqhrksEstStucuuuuuvv6vPv1uuu`u}uvvUvKv-uuu8tssCrqq9ponmkigCdba\`^]Q[XUQM>I!C>7/("cW# [X_"<"9)$8m $)f-26<AFKOSWU[V^}abdVefgh>h"hgg5ffedddefhjlnprstuv;vwwUw~wvwpwqwwwww*vv|vvvvvvvvQuu#t?srqqpo'n\mlldjiEgf5eQddcb>`]ZVRMHEA:2b+|%U. !x+:^#$B#""!!""%'e+`racfGhknOphrysu[vvvw9wXwmwtwwwwx wwhvvvsvHv&v uuu>tt6sOr,q1p-omlkjjii hSgfffPf9f@eec+a ]ZURPJDK<5/N)F#= * 1CaKx-.?-,++H+,v.159>QBG2L-QUY]p`Mcqeghi9hhhhgfMe"cba;_^T]\[[\\^`d g'j9m#oqs|uuvuvv*vFv|vwwewwwwwvvvJuuutss/r*ponClkjikhggLgg0g:gbgghhohhhgfdaM],Y@SNIGp@p9Z2,%J s*_8u88X7656]69I<@4CHLRPUkY]`cfhkijjrj5i+hMfe caV_]\ZXrVVaUVvWWY\ _Tbei#knprs~tt tSttu'uv v{vw7/0' o {+6^_`_^]]]_D`begj lNn*oqjrNrqp'mk[hc_+ZVROLIFyCA8?><=<==4>?BFTJOTY_dh knqrmstubuvpvwvvu8spmiea]YV ROLAIGF[FEFGJzLOrQSUZW=Y\V^a;c8dfhAijkjSidglec_Z8TNHA:=2b*# w gD eUffff/e\deefh[j1lHn1oqqsCs{s=q8o khd_ZUQMVIFC@>;:8u766679;>CoHMS{Y9^chKkoprstuvLvw)vvtrnjf aG\`WRNfJG/DB\A??r?*@?AD%FIKMOQSVY\_bdgik6lmm kk,i#fb]XRLE=56-%R B++hEij[jjiiiijk8lnpqrrsIrqnkgc_QZKUPGKGC@>n;97u54+3%2&223358Y@BEDGIKMPSwVZ6]a0dlgjlmnnpnElkhrd_ZTNGX?850)"y~  klmnmm[llm-mRn$oqrrs[szsr pClhd%_ZfTOJpF Ay>; 96421b/.. --.g./159?EL~S4Y_dim1p{rttjutvwwwZwtqlLf`;YSDLF@A.CEEGJMZPTY0]aehlnp%pq%pFomkfb]XDQJB;4,%E lmnoho8onnnnoqrVssOssrphmiod_@YTzNI8D?;86=421w0.--#,,L+++s,'-0M39?mFMT[agZkorptvw8wx)ww^tqke^WPhIgC<73S1B/>..T./g02B4$579=;*=?JADUFJZN6SW\ae]i3lopqqqpYnkhjc_ZSLF>703("VsmoNpoqqqppppqrtttut"ro"kfZ`Z`TRNJGBh=,9^53:1L0[/..-E,,++&*))'(@(p(+^.539a@HXPW^oefjosuvwx xcwwtApjd\UTM E>73.-+X+)*+?+,./02F3~46v8:=@kCG}L~QW]!afj mprsssrpp@mj:fbF].VPsI\B/:2+v#np9qOqqr0r)qqqrstuuPV]bwhlJprtu&utsqolieU`ZUGNcG%?X7a0)p=qrsqstt:sst=uuuutsAok-d^WGOHJAE;52.-,:,+,-K.}01411E0/R.J-+*]((Z(+/\5<5DBLRT]TdkpuBw}yzzgy5xRuRqlf^W%O=G`@83., *D*D**d**++W++i+5**i*z*,-f027+;AHOV]chhxmpstuuLtrqlo;mifaT\VPFIA:4`ptqrsEspst5sstuWuu9usEqlOf_XQI.A;$60.++d*+G+,-/z13I4 3c210/.,*p)?(+-39U@HPYua=hnusvywz"zyy!v9rmh'a$YR1JvC;50@-+J+*+g+,,T,Y,P++S*})(((J(*,15 :A/HPW_^ddGjUnxr!suruuRtrqmp mkQgd_Y~RKEs?oqqrBrqrs(rrsttsspmbgaYRRJB<-51-U+F)))*+G,{-/24N5,44,3h3621{/,+)+-27>qEWMKUd]XePkquxdy{zzywtVojdl]V;NG?940.--A../0/0A04/a.o-+*5(''(#)w,05Q:AIPXW^ejoqwstvtsrqpogmk:hd`zZTOIPopWpqeqr rBr%r;s+ssbqpmib\=T>L-DU<60-+)(*'G(({)*L+-/24555535b431.,*+-1+5^;AIQYbi oswWxzGyywuqm`gzaDYRKTC=g7F300/013+4W44331/-+)l'%%&/(+//4r;B6JQR@Yaflo+rPset8srqqSponZlj9gbW]kXTSFnocophpqqq)qRr!r&quo4mid]VNFo>7t2,)&&%&'("(*,/ 24#55646?6615420O.,,g--04M:?G!NV_kfmquwyVy^yxfvs%ojHd]VO`GA;744(346,79998530.D+})&%% &(P,//6?*?#<:6W340%,)&%8#$%(+1I7Z?jGOXK_Iejcnprrr qpqpppvotn3khebrlmnnooooopJo,mjg a[SL%DE;4.*&$#E#R#o$a%&&(z*-0z24567Z87642L0J.h.\.1c48=oCJR[binsQu}wx$yxuwu;sojd~^AWQKFBt>=<=?@BBB@Z=\9(5j1.*'%$J$$'/)j.\3;CL@T\c@hbmzp%rrrNqEqqDq^qOqMpon7lig?kl(lmNmmmnoo&m|kgc]VNF?(601*'$I# " "q"#$N%W&'),/k134637 8775*3$1V///2-4G8jo{rurrqqqr@rrrrEq7oml/j j|jkl*lRlmn+n&liea`YRJB;2,'%a""6!"E"#V$%%'(+s-/124X5P6\6c643910121359=DEJR$Ya5hlqtvw?wwBv\ts=pmid^7XSOL~HFDDEFFFeECAN=b9C40-P)'%%$%&K).x5=tENU]dUjnrDs/srrrs:ssssrqonh~hi=ijjkAlmTmHjhnci]VO9G>7/)}$#;!m![!S" "~#1#$%&(1**+-/A0223B4M44332p22357;u?ELS+Za?glparu$uvutsqomie`[sVSP?M!JHaG`GGGGWFDEA>P:E51.G*(&&e%q%%(o,93?:kBJRZahmqs]tDssst=ttttt-s,qpg}gh)hiijl7llj)gwb\ T=LDC]IWOQU\bcgko+q#sJtttrq(on+l^iof@a]%XTQO2LJ-HSGFFEDBo@8<9P5O1.d+F)N'&& &%'*07?GOW_fl-qs ttCtHt/tttt_tnt s qpfgghFi i~j=lllitfe`Z)RJB92>*&U""!O!""#2#$s$%w&&'()+,_-./e/001;23#5)69=3AFLR[XZ^rcwh kmoqrvs4rvqo;v8-41D.s+)('D&/%%&(.4=DLwT\_dqjprtt|tt;tttstsrqpffgh0iijolfmlie_YPIwA81U*'&#"""6""#B#$$%L%&0&'I'()*+,-.F./0 1]358X< @AEJPgV7[a$eFi!kxmnpqUrq]p&nWm(kjifc_[{WpSQNIKGDBC@?>UeCZI9NT~Z<_'cg%jln6nop,ppko`mlMk0jwiahetbL^YUQN`JFB#>;:~87n6 4L22/-+*('&%w$#$%*0+7?MGKOHWP_fmFpsssssas~rqqqRpzoneefyg5hJi:j]lylllhd^OW\O;G@070R)&1###$$$%N%&W&&'(&&'?'(D()@**+,J-W.0<3!7;@F/L{RXp^/bfielnjooopppGo~nlkfjjeigd`\~WSNLID?}:74210/.i,*)w(P'}&%$$"#$(-5n}meQe6efghj#lUllShd^WNG~?7b0')&g$$T$%Z%u%&"&''U''''A'(6(5(8()=)*|+1,k-E/3"8@'( ((((,()((());)*4+,/k3D8>(DVJQX^dhlmp qq\qq`qqbpp6oWn3mClllljh~dR`,ZU,OIB<6,0-/*E)]((m'&&%t%4$$/#J""!!=!$)0$7?RG;OzX?`gylpBq-qSpCpponSmmmDmldvd*dewfhQil-lkg~cG\UMF>M5.(%#$g$%&"&}''(K()[))<()R))4((y((r((*%+H.3R9?FXM{T[agkznsoqqwq{q,qqq|ppzponnn?mkiea\@VPIC;5/+($&%%r$$(##_##""!u! 3 Z b#!&-W4081-[)J'?%e$#Z"!!"'"U!! J"$%%+`2:BeJSP[Kc:hmo#onBnrnLm=lkkkllcb[b`cWdfmh3ilkjUeE`yYRJB;02,&$"#s#$%%a%&'()x)*****))`((B''(*/40;YAISQZY'`f:knppq\q\qCq!qAqqr rsrrrrr q\o[mGie`[UjOTHA:4/*]'%O$"V!^ !- ,6b9!B#)0b8@HQ{Yna\fl:mnkmmHmljjjkJkl_`a~cQegixkkid^WPHA2918*%#"S"#*#$$c$& ':()*+?+,r,,++@*))-(*$, 05EWMUC\dQizn~prqqq:q qq qsrrstzu)uvuutFrolJgc<^ XRKD=_71R-c)&#!An[K v!i#(/.7?/G-OmW ^d5il#lkkkjiijlk*l@m:WY[_ bf3hkk hca\KU*ME>`6.(#"!e!!"p"#T$,%(*,.0r1344210.T-,.f16R;XAHP[X7_mfkk2oqirr^rqkq qqqqrstruv[wvwvtrIoJk&g\b^OXRHKC<61-~)%}"m /Jf> !#(.7>FNV0]cTi=klkekkjziijjk5l[mrRTX\a;enh+kkha [(SLD=5-}'#Y"\!J!!"M"#$'),/v14<684887*5p3g1k0/\139>EdL7S[%ahmpr sLs rrqq\q=qr rstuvwEwTwvvsqPmjg/c^gXQJ(B<<61- '#! 2YQl 0 x" #(K."6N=EMU5\b}hklkrkkjiijklmLOTY_1d:gskyjg`ZS6KC<(4,' ""5!Y!""#,$&>) ,b/3,58:=V==;9K64324k7l=gBIPW^dknrrsssrrBqqTqwqrstuauvvw6vvtr#omej~gc2^+WnPIJBlEKcRZ`fk4pruucuutNs\rrqppqrsHstuv3vvvDtsrq\ojmie`AZySMOF@"92-(&^#"/!% w _ n !#9',40>=p?CItOW?^pdj%mqt uvvButsrrCq=pqqrQrstujuvwvuusrq2oliCd%^XRIKD=6j0j+(%M#g"! c !#'z,4p6G.))$"!#$%'?*.391>CHFM6PCRRQPMZIGEF@FiI&LeR3X_WejnqVtuUvavGvAuuAtsrqqWqDqrFstuuvwxx w9vu|tfrqio"lie_rYRKD=R7/1-(&$#j! E } !q#O(:-5`=KEMT\ b+gifk ihte(a,]|ZZXXY'.8BM9W!^RehiZd_TWOH=?70$*%#-"$J$&(w,0R5;d@F JORUU S2O_KIHSI ILgOU[;aglPoqt=uVv4v uuWu2tts.r2qqrrsEttuvwwwvv`uotWrqUoHmKj fa\UNF@ :4H/*y':$$"d!U *!#)*.6>FNU]chik"i]g-b]YNUSQFPQ!)4>IT1\0dBgiifMaTXRJ;A91,&##%%')-2C8=BHLQwTWW#TPMgKJNKQLO R Wb]ccimqrVstuuunuuttssFrr~rrsttunv vvvvuu srFqoVmkhQc^WPI,B=61y+(X%$# ! >!$*908@"HP~W_eijLkmi%e`GZU P1MIHHn9%0:EPYybfigcb[0TyLD ;3-'$#%&Z(*.3l9Y>CHM?QTWW!TPwLKIKKNRWS]:cimpqsEstxtttXtztttYtss2s!sUsstttututttrqxpio mkHhd:^WPJKD@>s72,c(&% #w"y!;! "%+1:B7JRZ+b@gTk jkwh]d]VYOIEAB?>n!,6AM6V_dihea]aVNF[=5/)%$ %&)=+Q/K4J:`?DINHRUHWW1TP1LbJJHJ+K,N`QW \c#impqss3ssssst+tHtsss#ssLssssssst 86p4Q(|2=IZSS\bii.f_YgQvI@82 +'N$%&)y+n/44:?oD|IMRTaVUSSNJHrFGHL"OU6[a4fko2q.rrrrrrrsXs|sQsrrrrsasWsss+s/sGsssBreqpp8on ki2dZ^WQ[K+D>r7s1u+(&$#"!J!@!$(c/5>BFiNW4^{fjlkjFeV^UM2E<6[0B-W*d%/:EP0Z`hMiha[SKCC;4B-(%&&)+/"39>DI#M+Q`SUTkRRNDJ6GSEEFJNnSY_eJimp7rr"r\rqqr rsssrrrssDsrrrrvrsrrr3qq/ponnkhc^W1Q)JD@=v6n0+p(l%$#6"z!!c"%)083@HPY`gjmjhb[0QH$?e6.'$? S!+N6$ALsV^fkhi7cm^(VJNFW>6/+?'=&&)r+ .27=1B4FJNPRQOLHH}EvBC+D.HKQ>V\bfknBpq)qqfppqqr(rMrNr3r0rWrrrrorKr-qqqqqDppponsmkih%b\V^PAIB;4/u*}'%3$""!!#'R+3<:CKS_[bik l[ie^V`KB9/' T 'V2=HS&[BdGgid`JXQ_I`A 92n-) '&)*-16R;Y@/DzGKMONMIF]Ci@@dA1EHN^SY_nd15:-=@ChDFEDwAZ>L;88I83;5>DIJPV\bGfj}lnonnnnntnnnpnLnknoop7m0n+b'(%;#)"g!W!!#& +2T:C KSZ@b:fjzihb*[/PF?AM@?<964M33t58>VDJQrW}]b/fiSklm[mxmmn&n6n)nUnorp$pqqqppUoooioRoKoNo nmluie6_WYqR@JCf< 5y.)%$l"v!!!!$t't-4=EM(UI\8cnfi|gd]UK@6,{#m; E&P )4K?JT[bde`\UO|H@19K33/*b(W'7(*Q-/26+8:;1<;:8{520//C138=DK[RX^c61,)'f'(*,/[1456\66J54i2/T,,T,=.h0k4o8>DKsRW]aegiij*DGJPW\`cf{h?j>klmn2nopnqJqrmrsrRqq8ppRX^bdcOaZRH=3)  9=Av4(3>:HkR-Y`uc*daM^_XSKDM=61,)%$$&2&'e(((((t(?'''&?%%(&'*-j037Y^cdEc_u[UOHvA:50+z'$##a##$$6$W$$~$L##m#"T"e"$&V(+'.71r6:@FCKP^TYo]ae>hmjnl3m@nop]p]poomn kjFh(eb_\@XTNPK4E@;a62.)&$1##&/(+W.39L@+FMSY]_a`_ZTI?5+W" V^iq 4  +6rAdJT Zua?ceb_OZU.NG@:6]1,(&P$$$Z$7##$"$o$d##6"""%"\#\$J& '*-k16;AaGL[QAVz[F` cgPimk4lm]nnnmlDjh)fBc`]WYUQMgI;D@;Y63/7,(v&%%&),:0Z4:@GM.RX\__`U][VTLA7.o$ G ]$/;)EO5V^cfeWcH^VZ~UNGAZ;6b1-$)&%$$:#E""##^#@""!~!`!u""r#w$&(,05;AGM7S)X^b%f7hj_jkl%lk j(hZfQca6^)ZVRNJFxBZ>M:6,2Z/+)8&&%')T,05;B_HMMTY6^Y`a__B[`VNBD:0w'I d  )4?IQZD_efea^Z,U\OIHB=830S,*X(c'F%$##$$"##@"""#@#$D$&(m+/94<9?EKQWp]aJegiijjBigffda^[XT8P#LeHDA=t:63u0M-*)s(()a+.2-7=hCIOPT?Z#^EaaaR^$[VtOE<,2-(  L Gh(j 2X#X.9_D MU\d g}hec^[VaPJiD6>:&62/,*('}&G%%$$_$%###$y$%g%'Q(+/&38>DJyPVU[`Pdfhhi%hgeOc*`-](YVR8NIEBy>;863B0.},+R**+->0^38>{E K PV&Z`GbdZbM`\vXlPH,={3*p!j Kf$ZlIg'2=~G>PW%_dhgweaq^[eWgQKEA6=:.7-31W/-,++')((=(+((F()!)*+E,.b1B448=,BGLRWA\u`dyfxgghcgfd9a^;ZVSVOiK5GC?<:/75321007/0^02q47;o@FLgQV-[t_ac4ccJ_]*WQH>4+R# M  l` %!6+6A.JRIZ`ghheMb_\XSMHD@>:85u32r10.--X---./p0s1e2479=GApFBJO&SX]Oadfgggg#ec\`]YUR N(IEA>;976O44%34/4569;?CHMRX \raGceKca]YRJ/?5,#3t gxb%+cg 9 }$.9CKTZbaehgfda_]BYUP-KH/E|B}?=R;:[987_65Z45\5678:;=g?ADHwLP"SW[_|begjhhWhgfdao]ZWSOKH D%A0>=;t:99:9;4;=k>ARD==4<<=4>>@]ACEHJLORUX\[g^yada\YWRJ@6,[#{ B~u38tc? p(2=F'M(SX_^cjf8ee ca_^[8WTKQ NLhJIGFFlEEEAEVEtF9GHJILtNPRTWYn[w]t_ad8f1h,iRj;jGjiifd `]kYVS0OLIH FF_F!FGIH8HIJLNQISVY4\_bGddLb^[WR-J#@5,W$c` vKozJ&<U ` )3=ELQXx^cf grf:eKcc a_\YUVfSRMPONvMMMMMNNOQ7RU WY[\^`ac,dfgijvkcl#l>ll k%hfb_@[XURPHMLLXLMiN[O5PPQRTVSX[]`XbtdeZedb`6[WQJ)@95,# d/:Q{ow0 +xD,l {o!>)3uCIYNU[_e`aa}bbcFcecbjaa~aKaab`bceddeflgBhhij8jPjAihguff:efhfghik3klk@jh8fddc`baa-```a_aaaaaab]c ddeydb_f\aXUQuLJD=;1Y(!e' gh7-`<% B9% -4:@`EKQiW[[*]^_@_`bcKdJee~ef^fgWgh:hij&jkk0kykqkxjihedb]a`aBabcecghuiiihgfff_f2feeee}e?ddyd(ccdd-dIcyb`].YxV}RO HA8/3&NwK s0A|J^zE 3r"{)17;@EoK:P9TVX XeYAZ\_Zaobd:deff`fggmgggg?ffNedob`b][9Y-XTWWX(YMZ\^`b.ccccccd$ddddd%crbba:`__e^^][)YVSMPMID=5s,$\ o1-kH u__tNCCO 1 &6,2c7 ;,?DIMuPQSTUX[j^`ac2cyccccc}c ba`_^\ZX#URvP>O_NOOkPR4TSVyXqZ/[Q\g\]t]^y_H`.`aaza7`\_^]\Q[-YX VTQOMVK%GDl>817)"{{0 PwjR7jX}dea^m}|~w*?G ig"(.148Ob 4.^r<$uBwu~OYVQKUQ? I&)E m }X"% ')S,u0E47I9;=?>@BGCDEREEEuDCB@->h<:8630-++ *T**,-&.02b35w78:2;=?xACeEErE]CB@><.9754l32I0-)$ q m }Z?hAx~YMpAJJSVVE8   : 7t2,v[!$~'+8.1.35D77899N9P9y9%876 4J20/=-C*(K%|#B!^   Q!E"D#%a'(*D,-/y15357 89:986420.-_+*)B'*$!EDYK fl>" + QmIkO<N{4>DX`Z?( 1Y: }b}D"&<)`+-r..k.--\-,,,Q+Q*!('&%$W" qP U!#%R&(*I+- .--c+*k('O&$#" =G.f [ CD-gt7q=*8d/IRSF@5.0 9^ "E#6###:""!: _ <s(>M/jm>FB`$ !!! E7?J 1 ol#hId>T2axwt"GUE($). /; x zt$L}; i - N*/~  d _1ka8E _ mwmt}_uLX(I&(:U_YS#?;#fl0+ ' KzeU R 7 gG\tjoguqF8  S  | } ( {$H\{tLF)<.Y;9<JVUG,) [3?tc'Z=cF#cJ7==.< q Q gJ#I"2<ckWKp|eZMIRR=(1" m Hk2)siLBsk*,;`f@^! HY)#bwqWN[g rYK899  *\iG3o/<E:& 7LI'uJ6Dn \Nbyt.qd@9Hr `; )<;#  Mn`;!990&-<f~kF+/9&bHFXOa-B. @rwWGHH`~N"  &B@ GO0 1B?<)7hzVfHC?X~ysXBGO@/34" )NQ9* Kyyma]ahl[]yZ,  ) 3^cH! $#99J  g]UftneC''3+#+/'6/'$0Uw{q{~thhksS, - & $=!R`20?M_cZH+;{2I5rkZ4+3>R^_OD('+KNGOZ[ikl/'tL0  2 1%2;1#%AbujK+%..-*1@Ywsi} 48-pfX=--?KWebQ4  .,KKJb04y[3  / %* 7UZI;6CRPINMB.6p# ynf[WY`ijkX4&7,-B@My 'm[QK9"    0) #&$""JddWC>A@?CD@;88/8U)|yxupng^I(  %,EOa[<+ ..%!%& "/3"(H`hWD2*-,28CU_WLFWs&~umcXJ8,-.% /H`vpG4" # 0w\'8)C].-D "##t#{"!NIx1/) S    V  Y `  U `I  1_D r^O,|y?   HZTk*<6,V/y  sxS !;!4!- A UUV G     3 W Z  J f k t  > e;IXP9qSYQz n2 OO8C9 2=DP{ !"i!! Hy~6[&Kg r  - L d } "  . # ! %  @ G  %S@B0>e|_"QhKk gb@a ) L vnvA;\5%{b B  H !  l / N i x O      5  _X rG^.}yN oz! j`?!M   8HIP]VS8o^X e e e  l " H d m z O # u y E / h F[H :  }E~-Y:XYM8n.0x`gPIJ&nm{ZrfjWsZV]]   m ; d / ' V v p J    % H h c 3   1 # ? /x,%Wz f " o ; j1BS#HA~2_OaKf}-d;GV *S| # w  t r 9 1p7S4Ri{/ J ~ V  } N 7Yo    O 6 - )U]3W|.]/JEvq5"9 diaPCYP f o Y lkvF% ^Bp6?apBB X _ 6 .  :  J p jA10wezC_ *i p [ 1&X1V] m! H/2K77ILF739Y'j` @w`,~ D   c K l  6 k K wGTIl"A{ZS 4 + y  x ~apwZ?4L7[UPLb{{`KC?Qm)D9f<iu ? $  F v & ` 8p!2( c - f 1 a % v ]  k bHi[ JhXt3sfSS_lnZ9   .FRb}hU @<M*X6 * ^  j c h 8  D s $ @ H   : , % F c > 5  A oL H}a/p |N*Ttw_U< 7c1Y~iOObXx5OqN[Q 4 M 8 E y f [ W Q .  4 5 1+ Mz ObQOWSB@&/d`0?  '_\ %+3se  Q Q )   _ b o ] 6 & < y [ # H  f #yY*NT`lr7?lf6&U# %Ob}?q0aL?0$9mRI|91I`gzlv ~W0uF x   r X ZaBQ&|Dcrovxe#p]z.'il$t2udG+sW#~3u8 -X z u7M U Y /efkXI[=>OH -KY'dtcw-JZ -       F X nQK(r hS1mI5f'<4CC@gGe }iK"& R=Z"H`Ec/%0zw F f V DaxLM28u`   6XT AWv !veB d~{yV^3cpzbF?bx0=ySi P@rZ  (zw\aozZ 3vjMp\/  N 3~D{{=dEx?~I<];j2>MRZ*4D1Z`%PcM2H> V C ; \#K !}"$I%}&'t(6())) ('&%$#q"!!l!-!5!J! kpL9 a `1w%IbiX=O #AHOngw;2[yi)Q" (:95+TNj  FD_D?* !"#%d&(*d,-/A01237334K4/43]21B0.-,,/+++,>,F,'+~*)(' %#!(ima Gsu;*Zr2FZe^+/nfQi@-P d _NQ"$c&')4*E+-7.024z6K79=:H;G;<=4==>===C<;T: 8766(5556D6\6D554&3F2 0/-6*(&$"=X  FTU 2_ af#>Y}:OiLgyHvb<.S X/A#c f4*K#\'2*-|/q1D2p346\8b:^<`>c@ABCDECEFG(GGH2HH"GG8F2ECBB AVAAA5AwAtA1@y?>> =<:9*775\30-*'$"A|\  sl<D&IR(\qNaLqp hD># t3e"&*.2y5s83:;=>I?A]C_E@GHJLKM$NZOJP,Q R(S(T T}TTTTTRQPONN.N NNRNNYMLKJVIGFE7CBP@><96D2H.+#'$!M mSW1Q3<!)%(TG YT!%)-2]6:9=@/BDnFDGHJ6KMjNP;QS TVWXZ[6\]^_|__` __]\[ZZ$YYYZKZZSYXaW&UTRPOhMLKJ(HEBi=95h1_. +(S%"Z4|d  l0%:$97:q1pXhj = K]#'{+l/4]9)=AEHK7MOQRT"U)VlWXZ2[]'^`fabcefhghwhi=i%ihh g&f5eDdPcckcd.de[eFdcba`E^] [QYWVUSQ3N?J EA4<841.+($ I\O `&eZXX9&Ff ny  ;:n K% )o-15:?_CGKqNrQTW1XZ[\y]6^_3`=acdfUghijCjklmRm}mmhm=llrkk%jkiiHiij(jkkkkskj&iHgfdc-aG_]\#YWzTPL]HC?{;852/h+&"K# m P3;6-L@l="I WVz %*!.3i7<@EJNR&UXb[]`5abcCcdse5f=gIhiklomin+noorppqqqppppdpoo!nnfndnoprqq`qqqlpponm^l jjhfdb`\YVRNKG9C@2= 961f,f&!M X:00, "6 7Mza -   !h%*0*5 9=BBFKkOSWIY\_Dacade{ffstMtttttttuuttht8t3tuuuuuu|uttgss2rgqpooJnnlkLi-g!e.cYa`_^([Y6URbNaJEb?81*$kR %\!@7KE0"&B#;'+/37f g-hlhihhh0hggff^ffghj kmoq'rswtmuuvv^v^v;uuuv.vNv8uumu'uu^uuv uuubu&tt)sUrwq|ponnm|lkjni gfhedducbs`][/WySNIC[<4-'!x$ Df$$$###}$%~'*-16D:.>vvvxv uuFu2uLuRu7utt^sslrqponml{kZjiiihhgffsfMf=f-e}dba^ZV?R LeF>81x+4%kG_ /" Kt./..--./148x99x88^8M9I:"bc@deef^g6ghhhhgfqdb_;[VQ,KgD>81*#3yD *x^#@[DADDDCwC;DDFIMePTwXY\_beh^kln8nnnynlkhf5ca_][YWV*UgTUUWYk[^zadgjmdoqfsst@t?t[ttu\uvv+uuuuutJsprpomjhIecqaD_]h[[KZ[\|]^_aBbce!fghiEii|ihh4fBdK`]XT N!H"A;Z4|,%@h, HARdNOLO$NNMNNPyRV X\7_beh jlnopGoonpmRkhte@bL_\ZXUS,Q[ONN(NOPRTnVZy^aehl5nqstEttuumuv9vgvqvuuEts_rp.nKkieb_\YW4UwSS\S*TUUWYd[\^?_aRc=dfggh0hi iih(g#db:^qZVPJD>d7D/(o!m2 gBXYYYpXXX-XZ[^`cfik7loKprirzrTqp2nKl,heka^&[WTQO=LJIHZGGH I\JxLOiSPW[[`ndhl?oqstVuuJuvvvvvNvuTtrq/nkheaR]ZVaS,OMKKKrLNQSqUWY[)\_$awcefegIhni@jj#jhgd3a^(YT&NHNA:_2+W$,q TY`/aZaam``__abId0f"hPjylWmoNq7r^srIqonkUhFdO`H\=XU&QNXK7HF5DwBA@@@ABE GuK~OUZ-_?d)hTlor!sJt|u uv6vvwvvYuotwrNoljhd`q\WT PLIIG$E.DDF GJILObQSUEVY=[^s`bdNf>gijkskj3hHfdOa7\_WrQfKD=6K.' z Hfhhhgg=ffghigjlnRopqs s{s`qpn kgd1_[hWSOoKH>E.B@z><;:n::;;=?CHUNSY_cilp>@#AD8FI:KNOQSVY\_2adgikYm3mmlkj0hKd`9ZUOdHA791)"=^W +k(j kbkl"kkjjujklm_np=qrrs=rqo~mYjfbx^SYUeQMIeEB?=;9765445z579?@C`\5VOPGL?`7^/(Q 3 7n omp$popooo=o7ooprVsIstQssIpnYjIfEa\\VW!R!MwHD@=:8?6 4?2#0[.-,,G+++,n-Q0y49@GANmU\c hm6qKsvw)xKxxxZxv3tojd?]VwOLH~A<+630/j./%/1246p82: <>@7BE=GK NSX]bQf/jloqr>r&rrq^oljRfc>^$XmQIB:2+#rAompqqq~qgq/pppq1rbsttu\tqsol#g-bA\VPKbFA=:P75 31I/.0,+**!)(('(K(+.49AIPX_flq'tvwxy yBxx usnib[SLE=8[3/,++#+,-L.0]13,4679<#?ADHlMiRX^HcgjnprstniYbZRJC<71.++=*++'+,./ /012l368;>&A_F%KhQX]cg>knqsBtut:trqlo8mj|fab[UNGS?f7=/("!q@rvssds8s[sCrrursstPtuu:troPid^WPJ@D->%953k1!/.7-B,e,++++*w)('&&&z'(-18?HPLXa hnrvxyyyxwus@niVaZRZJTB;50C-8**%)** *V*+,,,-2-F. /}1369>CJVQ.W^2cdhlpsttuctsr4q%nlqhc]XQIAT92$+]qrs_sssss(rsBstuttsroNk2d^XQ2JyC>'8410G..$-4,,[,,-2-?,,+.*W))('(G(+/5}8<1.W+y+;++,!,_,,,,N++/*')N(()i+-15;B8IQX_ekos tWuuuztsrqom]ifYaL[{ThMlG@qqrurrrrrrassxsqqnkf_`Y\RJCr=L7R3.,+%+&+++,K,-.///p..i.--_,+L*)+w-27>EqMEU>]dk-qtfwxz)yyowYuzqmFf`,XgPIQA;V40--X-2.I//0v00/.-,*((,'(*5-06;CrK2SZaglprttu4t~srr9poljfb\VPyJpZq-qrrFrrrDrrrron}kkga*ZS%K]C<7D1.S*)[(X()-)*+},-//0e0G00////H.D,+*h+J,05);AIQeY~ahnrvx.yyyxFvshoicJ[T)LD>7D3//q/O013P44432C0$.$+)'&<&e&)V+05= DMU\\ci;naq st tt srreqqHonkh\cY^|YTo&opqNqrqqqrtqptm_kBg`b[TM2E&=7K2-*(' &r'#'(e)**+s,.N/Q0 0s001500i/6-,~+!+,X/39?VFN+V]^elqu vxyyxwtqlFf_;WPpHB";b7>33\34698 9:]:n8630.K+_(&%%Q'(,17?G|OWz_Kefk8nqrssZrqqqqoppAnukhd=`Z\sn(oopqTqqfqqrqnkh)c}]V}OYG?R8<2.+)'%J$$%p&&'(*[,-.00112b2 1a0.-V++,)/2U7==;<=?XA&BCB@v=n951%-L*1&%?#$2$t')/5>F2NW)^fejEnprrrqq}qr r&r_qpnlj'gk7llnJo@oopGaOW^_Le{k3n{qrsCrrqrs"stssrqpnh hiajl?lm5nqnnkhobe\1T[LD<@4,'-#."% !#!l!"#v$'%F&()*,k-/g0Z131K1#00]0m0|1U2&4B6m:S>_D/JOQSXa^di m7orstssHqq o;mike|`[OVROLJqHLGzG8GGG8F@CA>=K84#/,)8'O%%$$J%%).-[4b;CLS\bi8mDqRrsstsXsbsttttt@s-qpgggh8ik9llmnAnkga>ZRMJ|B[92+*T%!!c q !l!"^"#$@%3&|'()+^,.;//00//0~1L24K69=BIGMTWZ`2e[hlwnq0rLsr[qpomkhea\X>T-QCNvLcIHQGFFnEDbA?s;73/,)'&%$%6%f(+S18Y@HPwX_fkpirt*FcNV^elp^s~ssrsKstrrqqppouddefhjnkmmmeif_hXIOH@;70)&q#$F$s%I%%&N&')'H''''(`))r)*+O,,,-.@0o3c7;@}EKQW#\adfikSlvlm_mnAn"mlkjj^ii\gPd`#[VQMDHC>9531o0G/E.;,*('&%$$.#]"!"g#'%,@4;CKT\cjo$rss r"rmrqpppoo7ndd,df$hikUmhmm5ie_WOG?7z0l)&$c$%*& &v&'Y'(((A((((()))*+*+d+,N-A-038=sBHO;U[zaHe6h_il(mSmmn2nWnvn)mllk?kjjhfxa]~WRLGB;6R1W.p++ *^))'&%%$##N""!!]!%/)1n8AIQ7Yavi mqr?r;q1qqpooo_nn}n0d.cduegiikmRmm2iue^WO,GX?z6/)K&P$ $%"&4&''(M(()-)b)D)=)*4* )*/**+9+,-0u4E9>DKVR9Y_ehklnuo!oooDoooonnnmvlll3kj"gc3^Y+SM{GA:5/,3)<(5'Z'&I%j$###`""+!!H u #'/+6N>FNWa_)flpSq&q4ppaponnKn=mmmd,cdZemgeiQk&mmm]ixe\^qWBNF>6E/1(%#$% &<&'c(%()=))*:***v**k**&*u*J*U*f+,0&4:@GNUU\bhlnoPpTpxppp5pppoIoo nnnimm-k"hdM_ZTTN0GA:4f.*'Y%$$b##"c"""!! R"Y%,3<3D(LeU \ejso#p.pMooPo^nm{mm mm4mUc_cce#g55.%'%##$R%{&&'(T()j* *g*s*j*+**G*F*T)))*,T0D5;AHP'W^djmp>p}qpppppppppPppzpmonloiea\/VPJD=560,(&$#"!! !! 45pQ!$+:2:BJSi[]cwhmo.oennNnKmbl_kl lPlm(bKb:cQdgi@kDmnm hpc\U0LD<3,&$;"^##$%$%&'l(%()~)*6*M****H*1*))`)4*,J05!#*09ZAAIsQYag}lnn_mm72-*m'u%"!f ?  gIXgZ!f#)0o8@HQ&X`f:ktm#mlHllvk}jjEjklmW\9]_adgj'm6mk_e`wYQIpA90*$["1  !!""#T$k%&'()*b+?+++L+ ****@,j/38?F#MUC\chmp[qqqZppppqqyr?s stu1uuNtsq;mie;`[W&Q2JCI<&6+0,)=&#A!*~LNy!$))0 8_@GP.W_qdjXlDlkkkjiijkYlzmkW[X[^bfbilldjldg^W{PG@ 8B/(#]!\  !"q#%H&()*+,-e-,,s+**+5-16;BmIPX_!ejoPq8rr5qpplpvpq qhrrsu(vvv|vJtsFp=lhd`\[VP?HA;.5=0,e($" R G  "}$)/8?G|OV^~diklkhkkjiij]k0lRmPRTXH\qaeGhEl kic>]V NF^>6.@'"s %i >!%" #%')+l,-/./// .(-++~+.2z8>8DKSZahDlpqsJrrhqzpppq6qrAstu`vNvvvut.qnkChGdaP\1V0NG@:580+&#`!2 1   i!!U"$)/b7s>FNV]wc9iklkukkjiiejXk,lTmjLOTY]^cg6kkk_i>b\UbME=6 -'N" On {!"$'*O,.0B1F22210\.,,},/4O:A GNV]djnqrsss+rPqqRqq9qrSsstuv,vv6uDsqogljge4`[PTWMF@1:N4/)%#"P! $  F !k!#$)l/7>FNoU]bhklkl)kjRi hijklFJDOV\b\f'jjhbL\}TM D<5W- &!pe  "2#&j),/13455542r0---16=DK9RfY`fm ps:stotsrrqppqBrrsPttuuvuRtrpanmjhd_YRKE2>83%,(%$#"!^ v !!#+$)/6>FNfUs\bhklllRkih}hQi`jkl7?DGJRY`;dijkhb\U$MzE>=.5-b'U!  !d#N%Q(z,/25 7 788864;1/g/0m49@GNV&]dinqt tCttesrr[qppqqrarsteuLuv1ut}rqionlk gEb\VyOIsC <6/*'@%#"!!! !!~#$)/s7P?0GVNU]jc`ikll l!khffgighi8>OEN Vd]chihb]U]ME=y5-'"c gP K H! ""$l&*g.~2v57::;;J:853T111397=DMK8RY`]gl prttutt s6rrq>pqErrorstupuvfvuatrqpnmcj f`YZTMGy@:3O-)'%;#""o!! !S!."%*,/7?GOCV]cikClkkjOge4dxe4e?ef18N@uIR[agi8ic^3VcOG>6.)#l!1 !!" #7%(l,50w4x79<<=<<96424<64;X@GNU\ci[mqs5ttztttsPrrGqqaqrkrs^tXuQuvGvvvKu!t rqpnkhb]W^QjKD]=6v0,x)&%##*!!" ! "%"*0X8%@;HPV^dri^k lkkheNb@```J`aS+2.;*ENX1^fPhid_{WPkH@;8>0Y*h$l! !"#$\' )-2O6W9;=>?b>=O:754_6@8>CJQY`ekoKrsttttKssjrrFqq[qr~rstuvwwwwuusrq"olie`oZTNtG@94/\,D(&V$#"*! ` k"^%+*08@IPPW_ejik lkjsg3c _J]\h[ [ [t%-,6y@K:U&\dhj3f>afYURhJBM:/2K,+%"!""$%~(L+D/53{7P:m???=;86`5J7:@F;MT[ bglorsttssssQrrmqqqrsLttuvw4wwvutsrq%oljOfHb3\W;PI~B;61-)'+%/$%"l!M h X"|%+19BJRgY`a_fjk}lkOi4d_[9WVSS0S'2:;w8~76c9!s>srrrsNstuuuvevwvvutqsrapopm`k;gd+^YhRKD>9@3/*'%$"! a"&0,3 ;CqLT[c1hbkkmkgbZ\W5ROLyKOJ$'.9DOXafk(i+eN]0VNFV=6 /($"$ $X%'C*-A1=5"8i;q=%>>??6=:8 669=JCFHOgV\ci8moqrrrrrrrsFssshstst(ttu+uuuu!ttsrqp)o)mkhe_ZS#LQE?:74/*(%$#^"a!"! #'Q.548J1*#%#g$\$&'*-15d8J;<==>>!<97636c9=CIOV] cimoqvqqqqqrrss_ss}sst=tttttttWt9ss%r$q7p*ohmlife`ZSMF@:4.*U(%$#"!Q!7!*$K(g/6P>FO;W^fjmoll6hcc[ZSLF@;9,6(p3>@IT^:dkkhaV[?SjK3B:3,'$L$$&'*O-l14^69U:;;ib]!UHMND<5B-)% $$&'),03567J8h9~9: 9^8>64R348B<(AGNT[afkWmp`pq)ppipwpqmrrrs sNst t;t3sssusesMs4rqqpp9oml\hd^XQKEU>81,('%($G#2"!c!"&+_2:BJR[ahkm(jhc%[QI7@80*&v" ",7C5N1X`Nhiic^VOGb?7y0'+P&%N$&`'Q)A+.Q024567(7`654323U6:?E8KR@X_ d>i knppp7ooopxq qrrIrssyssssbsrrrtqq.p}p;oom%kXg{b\VP>IC%< 5/+(&5$p#""b!"#(e-M4$&&(*p,.0224+444D32112=47=RBIyOV=\afjmo4pGoonnnoOop1ppqrJrs/s-s rrr6qqIpooOnnPlzjRe`ZRTNbG@93-*N&%:##5"T"=!#a% )/46>GVOVK^dijkgbZQF=i4C*,!407 uJ %>/; F%Q"YbehseaZTME=61I+(p%& &O')H+-./012v229100=0}0259?EKRXd]cgkm=nnnn@mmpmn n2noopqrcrrr-qqqYpoonmmkic^XRTLE=61<+(%n$!""""N"z$&+19AIQXr`Kerii.hc^iUKA 7Z.$n !{+6ALU^tbg4ecj]WQ7IA:y4.*'J&O%'S(;)+i-.:./0V00v/..J..0V2 6:A#GWMT8Y_chRjmm{nmm^llm$m,m~nnopqqqqqappooNnnTmmYk$h b]MVPJ@B;4n.)&##"!!"I"%(-4<82.7)'n& &'`(*+,-.1.r...-$,L,B,c-/266;AHNTZu_@d0ghjk8lllllllm0mnoo2opqFqjqppqpoonn`mljfa[U}NG@;92,'%""M!W!j!w"#&*P07@3GOOW]#cefgeMb\SH? 5'+9"6 7 ^#:,7nBLpU[bdea^;XRR,JC<51 +(o&&'&v'()*+,c,,,,r+**<*+1,".16;AHRNUaZ`ndPgipk]kl9kllZl`llmn\o.p2ppppgp7pooo4nmWlheA_ZSML)D=,6/*&##"! !h#V$(j,3;DCKfR[Z _def}b_VMBa8v/%m P`4,Sm'i1_wZ PF;2)su @m d!+6`AKS-[`edc[^yZSLUD=7z1\,'%$%&+&'4'(Q((r(('''^&''r)]+~.26;EADG`MT#Y^begijjGklNlmm`mnvo4p2ppp'pooo)nm.kidg %/:ENW/]=c?dd`]WQ*IBW;5\0Q*']%%<%/%%%&s&&&%%&/&N%%%'K)D,f/26 :@F3LfR@W\5`cf_hj0klmmnno]p9ppooofnnlkihegb^Z SMF@293.)n&:#"!*!5!#%(,29AIePGW]bcde:b4_]X!OD:j0V&' Db0)^4/?%I2RYavdfca#[V2OG@/93-)u%$V#$@$7$Z$$$$$O$9$t$$$$d%&)++.1~5k9?ME KPUZ^`ad5gi jklmZn3nopBp?ovnml^jigea^ZTNHB<6,0h+'$"! !"%'+07?FN3T[`kdXdfd`\^SJ>4w*  R <!A. 35#_-8CMU^bf_eMc^ZT8MDE>82p-(%#####$$&$########$\&`(y+^-1?49>DtJAOTX\_c*ehzik3kmmnnnml~jhfdb`E\Y TNIC>872-*#&~$v"g"+" #%(+06> E3LSX_ b6dc"bK]JWRMCs8.{%b a } t'l2c=HnQ6ZQ`5eff}b@^XRKC<61,!(0$#"#""""##"""""!"#F$&(, /3~84> DIOsSXb\8`cg hj'jllmWllajicgKe+b`e]ZVRM~HYC>%9Z4,/+b(n%`#"# #&&(G,*026H= DKOQXj]b{cdb _YQF !D!u"y#%'+/5;BGMSFXk]aejg hhiiUhfdb _\Z VS3OLE3KQV\`d=dcp_\VMNDS9/&gj ;iy9j ?$.:DM5U\Bcfh!db ]ZZUPkJ@DK?<:7B3}0.-q++*,)))l)_)5((Y(,(O(U(()+2.016p;oAFL#QWr\adf-gghfe"a^ZWDSOKGD~A><9364-1/-,Q+++j-,.149?yFLUR!W\bdyecaa\XGP/F;1(r; >1P_ij%5=(53=FOV^cg-fd`]ZnVQKFJA>;@86X43V211H00'00*0/////00247c;?DINSX]adfoggh6fe)a]YUQMJ-FoCj@>hg eaY]^XTPLIaEB@L><;x:876616Z6O7C8`:=?AE;J9NSX]!ad.eca] YQIV>4o+ "0 'I_ %\c _ R$.o8BJRX_cfdc=`^^\YUpQMIGED*BsAp@@@j??y?&>>>?%?-?{?@ACqEHH-KNORVPZ]adxgh:iliVizgf bj^ZV.RNKH9ECZB@?>>=\=1=,==>@UC EIMmQiU%X]y`d)dQc`]AWR/I|?5+#b 7`$_m`2^v I&U0N:D=LRY^ceecbI`t^\*YU^QO5MKJSIZHHEGGG}GCFFFFFGnHILC/I$O U X[\z]_^\`(bId/efgghhijTjjk kUkkkkkHjiRgf.dObl`w_6^&^?^r_a bdf,gggffgf7fNfg@ghUhi\isiXhgff eMddFcbaM^[WTQ`MGA8:/5'  8FCNxo9WK P 0k!(/r49B=BHsMQSUYVWY\^m`fabcddee ee(e^eeee{dcb`D][kXVUSSTUjVY;[v]_`aaab/bcd`dexeeeadcca`__]\aZWTZQpNdKHC>?0@BDFI KLN O=P>Q3RYSUVHWXX?WWUTRPNKITFDBA ?;q701.*$  5 /FA:}#luc[ILXse'6s !*D6!2%%(f*-1 48<>q@XACOE*GBIGK^LyM,LLJJ IH%FECB6@%>;964R2112@35f79;>?ACVDF=GIKMJNOONNLfJHa<:9r64/w*$r\ yQa90F~kvOTLKKQH9 + t&"&#%(,J0K36r795:?;=6>@&@@@?>=<;Y98684 1/B,*b(&%%%'/(*,.02468:Xr@BXD D{DCPB=@T>D;9_725,321 /M, (/#d# ow8|R\HlBHFRWTA4rA ru\f #'*-e/x0124 4444f332 1$/.T,*(&$M!TO!m#%')+-/1357Y8887531/.',+/)(5%#F L=   [zWwX;Es6@EX_W;$2&- n 8+suv"%i')()O**))&(''G&}%$q#4! K#4Nx@!#%')L*+,,,9*)( &%=$,#! +&X S\f*fx<vC-3Y}2KRN?91*+bB   )}s?V-   O X o 6  I^GZ  yRaG8; ' vLaOkGgFZ'2[rvv#HS=%+6-|ga4 ) * )uS#FyA o o*1<8h N  '(FI\*Y I  ~BnxlRgIZ.S24>S^\X$?7 74f& dE p P  dSae]>#PmJz  M xo; z  XjWYod?<s:.aFB=CQUJ.*#"Y~RVF2/d62.1=x 8PD) Ng\?"s-I$DLngQDg n`H=HO;&4)s4V`2H:!EK7>46U&'y'_g63m|rTDLYnPC67>  $al40upNCB`   tWEVu5/g?27[v[9'><!  *-FM..|[U][[_e^giM>42,&&Y;1BB^8S?T}YGE>Pn  I '>8  *]W/>aaH7(QTl|olZXf}kYOJKHC>4)?OE<1"/XmcchjXXq  W' " LjgWBCH@1#"'"jFd8~lip|iM8,04::53%/2(.73<]~sdac}zW+(  ! @. -a[3)?Se[9&y(>K-fC))>Vfgm^C% ">YYOS_gyeby/*}W9% 0 /&7GA77KirQ?8/02<ISVTFRz:7. p\E83B[ovh[A# $;YXVj (-b; 1 $-#BbgTA<OjupiYH8(%#6Sv +~l`X[]fx~wY;&%'9OP^ue]WC)  0' "'%" /[vsbNNX``VH@>>@88<Tw'zxytpvtgM0 !):P]o`B1    ,+$ )- >_swfVIHH902AT]YH/1NzpnkaRC7/(  !2@SjqL8$!'& " 4xW l r`7:> :TT\ %!#"#!#A"T!4a2Nh  :    X Y ] P $<+ 3+fJxk M'sz9 x # ~JzLAoH]%\5sT  V9Pk .yT  E     7 Y X C a m p o Ewpz|Q`] iPm p9 QS"9C>{y3}^& !"a! ,@A5n2E[I #  Q x " < N f x   , %  )  HolZf`tm~ MjOh~i lG|Yy{~ h mzopDYWGL ]   q  - O m t I     1,&^q)2~N qy# o_93I>Ym+}L\-(O*ZIo\p n +   F ' I f r z P ! u  4 ' !Ir4p_ X ) D&T6X[N6m.2|%djSKJ$i/bA/m " c G K\  . ~  u jy 5 a ~ p H    B i y n H Y 1& w&%| y  2 t 7 b+:T'NH:iVbHd:epg/k % pT 6 ~ = ) \ w z z 6 J5zPF#  %Idw- R o Y  w h 'YR   ( X 0 ) 'TyY0T/b:SV%zs4V!Zt '}XnZ G {  : ,~{u~\A->ik6Al>5lo*0 I 5 S : =  E G s o=|+2}nH] -k # 2rr;9z w ) 7rQ %,1=HsN(nhA=AQZWF<@^*rU >n`= l X x  1 e  F j=PFo'?XS  } ' 48 * D l  sz[5`f^_zSDR 5DbzlUGEXnw&{;$X O=|w A  v  : } e \ :p$7- p  1 7 b j F 0 VWz_'wn)[B}7.I[_N<(%2BN`w^R.I4U@ 3 U }  ` Y [ 2  B r ' > Z +  < . , O l B V '  - ` i k_S"QS mA8 2==<(,Ww,YyrV>EhtP+heLXQT O 6 : n _ V U S 8  7 6 3B&n@KUxXQZbWBXJW}wI;  %_8+5y`  K G    W ] k Z 8 * > w a &  I  g "+uE??Ymb[[Z9";/Hs[RmQ>1' 7iqG ZE 9bl|xvqE$fA  t   w ^ bhQe-}OmqZNz\bu u%gkS<fo6VBF7$n*[:~weG ~zPV@rx tq+D Q X /kk W ]U! # >T*jdY j 1 5 {   < pR9Ne^N X-tZV!/6%R~D<hz9ZvjL!5+\:S )Ijf)? p(^3W lB#xr_EMq< I v bp#Yn9@v=*%tO T#~ ar{aICc/Ic_~s|\w-*)H 7 wAZOzs =~(`a{zyo8 + z il|.g)l`'t<)C2f,?LVa:?F'/]x 2(;h+[ # M HG Hxp "$-%'3(?)&)*#*C*j))'&j%#"" !!S!*! @SW [ uaX r Li~+J79Klan>;cx>_&  /;a #$6_M p!#$&*')+-i/023k41455r5u5~4321/.\-,,],,,++**8)'&%#c!;O 8 5HL?@G\aX",mTFk1 X yRY!$%'()*q,6-/1357;8:;[=>>?H?P?s>>3<;M987666L6A6T6E65_43210.-?+(&$" p_S-: P 'eM+UBGBV7Op2MjIl| M`-&d0?#  c_ n!$(>*-l/0123579;=?jABCC_D>E0F"G@H!HIIeIIIIGFhDCCBeB AAAAA?@q?>=<;:9N7S5]20{-+(&#!83  N l ?GH0AE[=fX y8#{n a-!%(,0 3F579;<<=?@CDFHeIKSLMNPQbRT'UUV VGVVVTSXQPPO}OQO,OO'NNLKJ[IGFE|D!B{@><963_/,*7'%1"" g  ^[):3?:?IT*@N: ` V"%),P0#4083;p>C@:731.U+(%!! U%W#,u7 D(Du$E CX{$(X,3/3p7K;|?C[FdI6K_MOQRT;UMVWY7Zv[]!^_a-b]ceEfhhiIiijGjihgfvee deeref)eedhcXa`p^]D[YWVHTS!PNcJFB?;8852.+M'"r% =~UL\<45Ro#E ~3!%*^.26y:F>^BkFfIMAPRUWmY9Z\]]^_`acNdf;]8 41---(;"jD  9B7RDFm,c U"'+0N48=A9EbIMxQT4WZF\^`b;cdaeefHg(hi:jbk|lmXmn'noxp?pppppqq0q:pproopoeop!pqdqr*rIr qqQponm keipgecau_]?ZWTQMIEB>[:62),&!AX dw^; -?>Bebc L fc#p(-26;C?FCNGJKOS=VGY6[^a:cedf fghhhi}jDk&l!mmno oIo|opq0qqqqsqkqr rGr2qqq*q2qmrrs4ssssss;rqqonmJkjAhOf$d5b9`][YVSBOwK;G#C(?;61*%C ],> %A',8?   !  : C p 0Un#(;-2^7=@AF=INQUYG\C^`cegghjiijk kQkkklqlmnro$op[ppqkrrssZsKs"ssLsssssps(s3sot tuCuuuutuXu tsrqponmlZji*ghecb`>^6[KX1TJPJL(HD@]:5.)# V\ ^E+6<{zj <y$j).27=8BGLPSWvZ]_acme6fghi i7ij0jjjjjkklUm'n"o$opq!qrsttqtstYt9t\tttvt !;K]1Jr!$%.)q.x3?8A=3BoHM`RUY\`c"e#fg9hiijiiiij%jDj=j*j#j joklGmynp qqrstuZuvuuu|u{uumu#ttZsssttatu>uOuttUssKrNq%onmllglkkj_ihqgfwewdb`^[XUR;MIC>71+%A q Nn$=$h$E###$&(+/49=BGLQVIZI]o`cfhi i iviiii$hhggg~gOg$fffghjl6mopqrtuvvdvvv@uuuuuNttDssFssIsessssJrr$qqponBlkIj3iRhhhshhhhhUhggGfeecb`_\VYzUQMHB$;5n/a)&": l ZM3#Y.H.w.G---/0;25:W>CH2LQV[A^breh jklllClkmjihhgAf}ee#dd6cccefhjlnp8qrstuuv4v&uuuuuuputgssVss rrrrFqppo}njmhljhgeeAeCee`efDfgh7hhh~hgff&ed'bC`\YUmQpLF"?V932+$l P5g99C9 88h89:=y@}DHM!QUZc^abe hj;lWm[nNn-mml ji0gfedAba`s_v^^l^^`GacehCjlnp$qrstu2ulu~uouuuuu,tsshrrr2qqonlji,gecb`_^_#_y`5`ac6dfgggggig$ff:e!ca^[XTCO;HC<64/(' [ E.v)?[DCD~D5CCCDEH"JNR~VzZ^b~ehjmo+prppp8oml#igedb}`^\[HYYcXYAY[\^`cfiRkmoq;stDuduuuvv*v)uuxtt"sTrqqpo)m~kthfCcaz_Y][XWWXY[>\r]_acemfgh1h9hwhqhtggf"d`a_\4X"RvLF@|91*"| `V]oNO&NNNDNNOQT"WWZ_]aldgjlvnTp[qLqqEqonl8if~caJ_]ZXEVTqRRVQR`RTU"W&Yc\_cxf}i*lnqsujvvvvvvv=uutSsEr;pon0ljGgd)`]ZX$UiSMPP.PQRTVXZ\_a9c>defgh hwhhhtgedea^Z;UOJCu<4,%NUu5 p hYKYYY|Y'XY*Y[]J_b0dgj~lnIpEqssUsPr3q]ormAifb_\YWTQOMKK]JKSKLMOQUY`]a~ehlEoru vvvwwvvv u;tssGrptnljRg5c_\XeTQN{LIHHJEKNPXRUcWZQ\_ a1c@dfmghi?jZjjihge,a]XShMF?<7*.'^ DJ lW?z`aaaa^``aZbceghikmo3pgqrsrrrYpo/lgiRe]ar]YVSAP5MJH=FE DjCD D*EEGJMQV[_d h:lpswEwRvvtutszr$omjgc_[VROKHUEC6BnB3CEGOIL}ODQT]VY4[^g`c&e fhRj$kFlkkjuiIfd_[CUiOIFA92 *"#I r>eghhihhEhh;hijl7moppqrsssrEq%nlhe<`\XiThPMIFDcB @a>=<<<=>@oBmFJ-O]TQYk^mcLh}lps3u^v?wBw}wwfwvuFsqol(h=dn_ZUPLHEB@<=<<> ?7AYCFSI6L$NQJSVY\_be[gj,l mn:nn'mkjWg+c[^YXSHLD<4,$$B v2k2lBllll(kklMlmmnpqGr sswssDr4on kgc_[VRNjJG=DIAr?4<; 9 766678m: ;?BHM"RX]chmptuwIwxZxwvvtrnjf/a\LVPKXFB?<;88'79I:]<5=@jCFHKxMPSW;Z^b e)hnjmknpp&onn4li7d`[UNG?M6.&r Wnop)p`pooo`oopq%rgsNstttrqmk(gac@^Z UPLHEA><0975v3S2131H1L12*3m48;AF?LfRY _ek%o2s)uswxfy'xxww'trnjMd_"XRL+E@;85492X123c46`8:C@DHMSX^icYgkPoKqssttst rrpnkhc\VNF+=5-%|;?qrsWsshs\srrCr\rst;tttsGqlhSb]{WQKFHA=6:7420.-,q+**J))f((c((c(*w,'0D4< CKRZbiAoswoxyyWyCx>whuAsnj\c]UbMFu?P930;,+p*7*X*]*+O, ,..00247:,=A1F KhQX]cKglIorstttsrpyo l-hc4]hV9OVG?7/v("rstt^t7t7ss:rsst t=ttsqnidP^XQKDE`?;)7%42f0/-,N+***x* )) (_''''()=,|07b>FFNV_Mfmrvxyoy yxw3usnjd]eUMFl?9+3G/,*)))*)*?*+^+, ,&-.J026B9>gCJ/QW^?cimLqAs8tuuu%t`rrp miCd^4XCQ8IA92+rNsIst-ttssrrs|ss1s,r9qPn9jpd^XQKD?9521/q.-g,++y++++}+*m)))O)4(((+#.L4:BJS2[c jp=uvxxy x'w^uOs]okep_ WjOHd@:40-,,++O+=+R+>+9+a+u+\+ *z*k*,-0s3K7838.m+Y(8&%&L&n''(u)p*+,-. ../..I-++*)?)*X-17=EqM0U^!eolpKtLv"wxQxxwAtrn|ic\FTMF,?`:65;425J68@9:3:8D630k-*(&&B& ')-2,8@ HPPsX#_eknrstssWrrQrqlpSomkgc_\9lmOno+op opppomifb\UOeH@92.*_'%$'#$$G%%&')*,5-d.=/3///.-r,*)U)B),/4:=AQHQYathmDqt0vwRx?wwutqplf`?XQK)D@;:89;_=L??h?@<:62/7+(&@%-$K%u&r)-3:BKMS[b2hlpqsrsWrqqqqqJ^F A?>2>?ACCB?<8X420>,V)[&\$#$$'*0x6>FOAWt^ejnprrrqqqqqqqpHnakig~i`j&k l|mnnnnomj0e+`ZkSLFE$=5/e*;'$h"!a! !S"3"$2%')w+,./0400S/.`-9,`+x++-/37>'DMU \ic]hmpt u>v9uuttErQpkyf``!Z!TOKGlECCJCEGF@EEEB?H:51]- )&%###%'-2:BKS:Zb\glo3qrerWqqrqqrrvrYrpnmkhhiklElmnn7n1khcH]WOH8@91+&$"! c !"#%'|)(*,a-/9/00b/.---I. .02T5:@VGNU\bglp%sSttu.t}ts!rq)o|kga\UW@FLS>Y>^dcgknqPrIrqq*onmljHgcO^YUeR>OgM@JHG)FFcED3A>;623."+!((&%$$$%N(++i18l@HPeX_fkor6ssssst"t0sssnrQpp%fKfbg7hjKk.km>mmJjfz_YPHA81}* %"l"%!!" "D"^""#v#$&'m()+w,../0/2...~/14 58c;$?cCIOU\Z_%cfjm=oqqponmlkig=c@^YUwROcMSJHEDD&CRA?H<9`5^1;-*($&$$X#$$(&h(.t4=LE M Ud\d irnqttt sttHt#sssrqqpf=f?g"hj`kyl8mnmj@f_XPHA81*}&###f#$$>$p$$%3%&+&( )*R+,-.A./...0258;>C2HMS&X=\`dJgAjMlnopooDn!m_lgkig}c_ZUQNLHEC@?><:852[.+)u'H%$j#"# "$&+1: AIR)YaxgmmpssssKsssjrsrrqpLeefh:j ktldn nBmj%fm_XPNH@81*'?$$$%%%&A&&&'''()*+,-././ ./#/148.:>kBSGQLQW*[t_6be_h jl2mnoNonmlkkcjhkeaz\WRNKQGD@"=:87&5o31/<,[)'&D%>$ #L""m"#A$x(.6>FOV^ejlors@sYrss-rr,rqqOp~oeeGf-gik9lXn)n1m|ie_YX+OG@W81U*'%_%%&&'/''((2(y() )*m+v,.,-.J./>/(/03h6:>;BJFL(QWR\__bdgjKQW]boeAghk4ln=noo(o5nnnvmllkjh^e]`h[2U0O~J D?:[51..m,+*R)(i&%c$d##L""+!!f !3!%)18A"IQ YR`h0lpqaqpqqcpp"ooooOoe demfhjl nmlhdT]V)ME=5.)H'%&%&?'a'(n))))*$***+,,,-p.$.a..0159?CILOYU\bgkiklncop0pBppp1ooo}on8mlki,f$a5\UPJDv? 904/8,)`(Q'z'%$##""O!!V / #()/6>FNW^f{kopbpoppeoonnnnne/deufhjl6njn5lhc\UFLD<4-(7&R$%B%'1'()k**M*k*+-+1+a,$,,,-I----/w1}5:k@NEKRWY~`fUkmAo&opqDqtqEq{q\pppp&po}omlMipfaa\VPlJ#D*>q8W3-*j'V&% $#""!!R!9 d r"l&t-4=DLUH]e!jqnoono"omnnmn n;nndsd$efJhgjlTnntlgb[T:KCk;\2,&%-#$#$&&'()F)***++I+,,,n,-C--3-7/1W6:AFLT[AbkglPnipHpqqqqqqqqppqq\qpomejRgAb^XLRZLF%@a:O4/+('&T$$0#"!, +z`eI!%,3mnntcsc\dnehj]laonlgaZS+JB7:1*%$"v"#$%g&$'#(() )*R**+{+++,/,,_,,/16;B)GNaU\chmQo@pqqqqqqqqqrrrrr`poPl;i4d`kZTNHB<71i- (&$#"! U  n3! !%I,U3j;CKT3[d iEmn.n.mmTmll klRlmn$``bcd-fiknnRle`YKQH@8/~(#"!!|!"#X$%%&'l(T))**+K+a+K+++,F,/28 =`CIPWF^%diRmoKpppqqZqqqqrs@st]_b'e(hZjn&mk dx^WZOG>6-'"I! !0!"#$%&'()m*O****+6++,0#39{>E>KtR'YQ_fjSnWoqppppq82.|*(J%#!!X R 5 % E & "&-4sqrs#sthtuu`tsxqonolkdhfa\V{PLIC)=7M2N,(%$#."_!!_ f #~'/6>:FOW9^Xf3k,nno;n9mljXhzghhiCi8=DLoTm[a)g`hgb\TMlE#<4,&k S !]"$&) *,1-.////f.[--/27=[DwKRZ`cfjnpqrrrCqppppqMqrs7stuhuuu]t.rq"pnmuk'hd`EZRT?MG@:5+/*'&#$[#m""+!\ N #p'/T6E>G+OW^fko,o)onml"i;ffffafgP1]7D?GPX_ehhpcR^JVO\G7>6.(" s- "$&&(6*O,-_/0400008/9//<14:@ FMU2\mbyh\ko!pCqqr7qqYpppqqrrsztGujv2vv9uusrSq7onlj_fb]9W[PJWD=71`,)8'{%~$u#"! ! j#T'/P6D>GSPX'_(g)l oRoonm^jgcbkbeaab7*(09C+LV\dghd_X Q I@80*g$!. i 5 "#%'|)+-_.0O1i2"110//0i3f6rGKPXJ_SglldosoonzliCJcQqX_ejmpq~r]r4r+qqbqpqqq|r rstuvwHwvutarq}p[o8m{khe`[UOIB;e5;0,D)'%$n#q!  5 #'s/ 6 >qGBPXP_hglcoUnosmk;fa\YWUU(T&0;aFAPY/b*fj3gscf[TMEE<4.c'@#p!w"d"6#$%')+-/;0S12332101L2/59?|E KR~Y`fkn1pqGr#rrqqKq q5qqr rzsG{P9X_gloPno lic^XT8?3i-*:'h&N$#"! #(@/6?XGPX_glGnmnk*f_YqS^MIEDB8*i5@8KUR_Ke=kj=go_YRRJ+A92+ &;##[#3$U%&(y*,./01273*3r3 2,11|26:@FVLSY`fkknp pRppqppppqr rhrsWt$tuuuuu$tYsrpqFpomljhgd/_YRKD>9 3-)';&h% $<#!"? !$z(075?HPqX_gknpmmild \ TMGA= :8+'27=GHS]^cjjhb\`TLDt}8C2,):&&#%$=#I"!U!"&%*1$8A@HPY7`(gk,mkkfl`W*O8G?94"1Y.j%?/q:pFP[ubikj+c^WOVF>7+/d* %H##T$%&O')+-1./0|01[1j1S0/0 149>DJQqX^d0iqlo6oppApooopqLqr&rsstJttttttdsrqp^onmk.hc^W1PJC=7+1}+(&e%$$&#H"!"D#H':+2v9B$JQZ`gjljicT[R9IAs81+'$g>",7C!NX`5gij.d`XQIjA!9i1,f'$#r$c$%'0(*,--x.M/;/////q../26'%$##z"""$v&E*/7>FNKU6]bghif8bEZ&Q?F=4*"L7m SV&1247W0,'%$"### "#4#%( ,2j:AI}PWN^cggEgOb]pTLJ@7..$$< l#|-8CNaV_>c\gOfc]XQJB;5/,*&r$#$%W&j'()***+ **>))***,.27T=hCJ PVt\;`ehklmmill`lelm mumnopqrsrrrqapKo4n#mlgkgtb\xVxPJ C<'57.*l&x$#""D"|"~#y$i').5IrRpZ_deEdC_[[PU?NG8?9o3.&)&z$$$%&'(q() ))G)8(( '((*,;/368>RDK)Q1W&\0a:dh`jEllyll4a*! Y ; %f/9{DaMV\ybde?au^7XRKD2=61@+(%($$%{%&[''i'z'Q'w't'$&&5&g&(y),/4 8?)EgKR-W]naehZjkrkkkl2lKllmZn nppqbqLq>pp:ojnmljh>c^X_RL'E.=60*'+#"!!!6!"$&*@.50]H]QXu_beB81-9(/%$*$$U$R$C$A$K$3#####$-$U%%'),/438>DJQ6W\aegBi[jgklflmm6mmnop3pbooon-lk)ig+d)`\4WPJD=71x,'$"v! !!S"$|'*~/6;>=ELT?Z4`_cdb`ZSI?*4*"7 (K? w6'1HPY_e5f6fb^YNSyLE?V9Y41.*Q&$##q"!!!|!H!?!P!!!!]! !"% '<*`-p16v:k63 /,+((%#"""$&)-17=ESL R-X^ bd&db_YQ F;1'ZZ  5{S x",7B{KT[Eb\e:fdab\zWRKE*?D:.40+)&&$$#-""""""L!!s!% !*!#x%S(h+R/41:#@kFLRW[s`cfh9iijjWigebt_~[XITDP\LuHD@<852q/,*'&($$$&5'*-2Q7j>DKQWP]aadcxc^ZRI>T4$* ] (7EMmC+&:1TkE:KQW\acdb`[ULA6,$ |f  [*5@3IQY_yded`^=ZVQKEA=F85A1.,+c)('=&&e&z&,%w$##G##%&&)+/q38>DJP5UZ+^b|egohhhgOeYa^[Z9VhRMhHC?hHfsd`\WS?NID@<98640200D.-,, ,+,-/1<4?7t<^AGMJRgW\ace b`\EWOF ;0'  LT[da"Ch(2=^<;:9888"77t7767U889=; \)XU`QNLJQH}FEPD'CoBBA0@@????@ACEYGILPMTW[^Na(dOfijk jjHh*eav]YJU5QNMZIFLCA@d?>`==><=d=?&@9ACLEH~L"OShVZ]`ccb_\VPHR>4)*#&" 8n#arQ"Oj /]$k-7AZIyOVG[M`cd`cCbai`_\YVT1QPcNMsLK.JJIzHHQGGGGHJLMOR TWhZq]^_bldfhj[kkkk(i%fb_D[bWTPMJcHSFEDDDD+DOEEGHLJKN"PSVZ]K`c*dRdb`\X&QWIA>4|*"(FzH_&kZA  $.r8F@GMRY\^:bbcbb>aae_]6ZXW+UTS?R/QQhQ/PPvOOOOPQSUWY\^f`bdf~giVjwkllltl;jheEb^[nX^U?RPNMgMLL~LQLLMN9O:PRQSxUuWY\^uaCcd{c~a^E[_VaQ!H?4s*#v j`]~xn..>qu K$.u7?F:KrQX"^wb%dldUV8VWXtYZ\`^.`Abvce}ed$a4^ZeVPH>4E*"+0PA[lq^t[}`"# $.!6=CxI7O#Vs\]`bpcQcddeWdcbao`__g^^^_6___R_ ^^_{`[acKdfh i~jkl`lmmYmmn'nnnmljkheca^]\[[H[[\c\\] ]3]^]^L__z`Qacddd4a^ZWS{NGA>3*"KJ bq's6pCFed J$7-'58;AG)NT[o_abbcd?efg.g ff@eee:e]efQfgfffg g{hQi)jjkl7l|llll^l4lHlolmqmnpn+mljwhfevd%cbccaddde.eddd>d'd,dodeeeeYc/`]!YURLBEu<@2})0!7 &d,{br&a}E ^+ J x#i+3 9N>wD&J QV[3]&^_`b@de|foffffgDghii^iivilioiijj$j;iihhDgffeeefghijSjii1h'g4fff1fTfghChhhh(gffIee:ddd+cb4_\XTQMIA90p' j& x$6,}'O4a}?o _!/(/5;<@kFxLUR1V0YMZ\]{_yacefgVgghliiviijjx6F-&>  %O#<|?Fmh,0/P RM%,2 6;a@$EJObRSTV:X[[ ]_`abbc-ctcwcycwcccccvbbS`_d]"ZXV`USST UIVX[ ] ^_`aamabcdze(efTff5edcbb`_^[XURNKHD@=92I*#v P ;t $VVJX2 R "J(d-}15:P>DHKALN2OQTgWYZ[]]p]]7\\$[[[UZZYY'WVSQINLK*IJJFKMVORT7V8WXY$YZ[]^_`!`aTa`_^]`\#Z=X5UbR\OLIFiC?:S4`-k& D8 4htd :l]naSJ_wf)w < $)?,/37L;?B?DEF}HsJM#OWPRS>SSR>F>@ACF.H/IK(L)LMNP2QRTGUVWWlW UTRQ/NLHEC7A><84X.V(")%+P  ~6zms]UEFRpbwn6^ o L'#l&x(+/V36|9Z;D=>@BACEyGIHaI@IHGuFEDCBAl@Q><:J753]201&1s2469;!<>Y?@B CEZG5IJLMNNEMLJfHEB@F=;x9Z7v41,'":y B2T6$vC~fkLOGFEK?,p# @ a"W$T&*--03146689\:<=!=N=D<;:987r6 420.+)E'%$$%&_'), .#0124f679<>9@ABCpBA?=;p9 6421t/-i)%! hU _Rr2oNRAaAD@OVO8. WH w D {-q!9$p'*",)-5.B./01A1K18003/d.-_,I*)'%#Q b'q "$&G')+V-g/135677w65p31/-,*('&$!# \  XtTuR7Dn8;=WcV3"408 Y ^ W} |";#%/%&D&`&m& %% $$#P"_!x _^TL1?Z6*/Tl5$6!#l%]'()*+3+K*i)`'&s%#"!`g*, h+Q2 fw>yE-4\6EELF8$"4D  "  j k\?`<)FA2Lbk}s0 D { y  g1_.q>3[ Z ~ z<{CAbFeE])1Zrvw*CE9$= \+[ S MLo}l u  !10];YF  WWh\N 7x jdNg DW-S119LYZW $54" &EF(E<$T d e  g 1_Y@!/a<H`  4 ~ 0  =iap)9[f];=x7.^CA:?NSF+-! S}{E'7Vhd1s{`b05v .HGemL$cF$QaXI@h  |i_H<HM7+2" ah Pt +G^u1S {}|a;n%]vINQ>KUiJ@475 #)S`G.Xxsyn@'-PdrYJSe~D5P49`s}R4 '8=( (""-1%>{ys`VSEOti; 4944#yJ3@Df '<-YwWC<UnzG   #BB  )\Z2!K_U;PJkygaML^{lI38LTSPD7)*&EO>-#5Zy|tdRZtX-  ( )! HieO3/:GI3 *6.qXp=$}oYXdzjD**>JNMED;2-,(0Da{o]` zU/ #  &/.I+*]tL+)702JdqcE+4>FR7yu|zfA'%;N^hhogX3 *IXZZ_kp`z'(~Y8#  ( "7+ CH:4:Kc}~bCEN>07HSYaaMV ?=0zl[@35Kdv{ncM8 !&*JXao,+a>$  ( &-% $G`j[D9Lee]gfM0$*(9[$-yj]ONTf|hI) '0("-DQg #$vaabH(  '! !&-/)1VsuaIKWVT\\K<@I>;Fc{  ,~uoopu~|qX;$ !!/H_ygD.   &'# )*$(.53$4Wpr`RHACGLFG\kaM<DZ"~}zrgXH=>:%  $3NojJ=%!(    /t[j_J) C4B`@!~""#("J!.Q@ 3    [ \ e L *>Xx>5xQ P&v|;    "#zHQCsM@ij9Q;{iz e<'  >   % ' # 1 V V  > ] o u t Kt=XFSjx? OR 188x|)aHHGs i Rhmt}Z    Q x % D U f  t   * '  + !6zRNsJy LgLh mkDvPwcLLfhHI)y_ ] 3   o  / J e q E    ,t`E}H,|yDn~y o]5>^[ob4k" o ym@usS<W [   ? { ) J a j { L  t  9 ' c1bJW v  ?}#W;VSK9n,4}-fjVQL$izS!4` i O IW  * }   Vz  6 e  m F  # E e  } v N y 8? _ ; / 2 h2@O +RL=hW[HxWUdD'S ! L 8 ` { ~ : S /}SF! "Lhw4  L } p ` ' ( < Y  ^ : q + & "SvZ 6Y1i4SQpe2^RWx_`.#%I4 I 0 "|pqjR>P'fm6>m=Fgz6F 0 * { Y  9   3 Y ; j l>33 wq>R$g} ~ * ;w5o H lN6@DQ[]"fg?9:K[]I89W} #od9mh(: r z w u + d ? f;MEu-@xSQ  ] >:O{ / @{biN(Quxqt`7J3@Zpy~oVC>Ph&A R#?+u G v  = g  U 8t-7+ t  | 1 = '  z Z Ci!~ QuA{^-o*(=KNA6)-?IWlgR~=5s C._a  = X {  ^ V Y 2  B s + > ` -  / ! ! A [ } 8 V *  K t df!]4&\}>)&X@ 0;5-!Ls)[_<<_x+TLT<FZ1i J 7 < q b Y U R  >  , 0 4@$y*=3F~|aUXiiTquo<3y  Tr,.xa  I E    Y ` p a ; * @ } b $ C x c %|&|K!J6pOfvKCMGz /"T@L kJ820 3cm; X;LsqyoP'kB s  } f jfPc+|Kpw_UpV_{YUezSk yA\s  !`hA xhU ~%wBeburkj&~H L _ 4oqyO_^*+"AI+Dy{? f ) t Y  K z^NclVqPkv!/ "+Uu11[m1~_qkL0(O8Q!1 Opo(;n#=,2\^5%3 )  L DkxgO Xa_ D _ #u4&B_`Z'HgH Rzq^r{`GCgy$Cfbwp|]{:N Z 1 wjR `Aj}^]5!eL6  _ 7 Mnqej<e%o?6 O,a*BOXd@??#~ ] #9';alni V " :L<+Z*.0 "$& 'Y(n())))f('~&/$#""!!i!B!% $is$A.z i<~&z*>&=,ln$I :@LpfsC#>gxB `+3B5 }]` bZ0bs N!"E#v%&(*,.02v3w4E4~444453S10/(--7,,N,,,3,+*)('&($#;!k}w 2  W%\D9Wg`*3s XHj'|7 |HI)!$&E''(T()*+-q.02a4579j;<=~>.>R>>>>=J;:s977566c636>6e6W65`43w21j0e.-B+,)'%b#": t]g #.nJG4G 7Mn4OjK p9}k2*j&ONvP\ H D& #&*c-2/1/2F23346p79^:=<<:9}753K1@/(,*(&$"U$*F x " iSBE ({>QU7fYu| Sh x~j Gg #^&*t.;157: ;<=>0?@CACD\EFH IPJLMOQS T"TU URUUUIT RQXP\OOyO^OGOCOWONwMKLJI@H FEDtBA(?@=;Q852/-+D(%j!;w +yR]':4 H ,EUH~ k'#g&*-15945Wn*d ] $q(,04r7;}?CGKNQQ SVY$Z\]C]^J_ _`aIb/cZdefgij\klullmm"mmm[lkk4jjjk0kl+llllfkjii8gfNdb`X^'\j[6ZXVeSPMJ FMB=96C27-(k"%Y_ : 4<;\RMl(k0w z R`pP %*D.3$7>;6>BFJNRUXJ[]`;bqce!efOfgehhibj"jklm0mnoYp:ppppmpippppoooLo~op^pqr$rlrr~r"q;p_o#ml_jhfdca`E^q\{YWTQ LHC?;x7M2',5& ("o u{^4  0Fy|" g: %*/49=AEsI-MPTVY\]_PadAegfhViLijrjkllmEmnVno5o\oppqbqqqq=q,q~qqqq^qpq!q{rrs>sst8tss*rqpo9mlpji'gfdobab_^T\YTU]Q2LH7C@;6]0*%G k/ (*J# /7C Iu$)/4:f?DHL=P(SW\Z7\^acMegi ikklmnn}no=oop_pqqQqCqHqr*rs!s@srrs4ssssVs rs,syttu(uuvuuu tkstrsqIp-o mlkjiIgfeId7bv`c]YUsQKLI D@ :4/ )$ gM ,6BJwSY3 %$)j.395?0DJ3NeR`UYt\{_!`b:cue*fh3iijjklm1mnnZnno^opkq qnqqqzqrsGstt ssttttttEsssstttuhuuutss>r,qonmllgl kjihgxfeEcai_[XTQMI'D?:4+.Z),#(G9 d A $<UTx+Ow"%).~358=CIOWTKX\_)bdf~fgh-iij]jxjjk klWlmhmnnanopqrorrrs^t$tupuuuu|uv*N,0I429=BGM{S$W\D_cehijtj'j4j'j;>CH LRW2\+`8dfikmnn(mumlokjj;ii/hh4ggFgKggghijl:moRqr4rrstRuuv>vivkvhvw vvnuttAssRsrrrr#qlpGo3mlkxihTfee=edef$fgh^hiiiiPhgfedb`]ZVRMwGA:4O- %br -/`:u9::::;_<=?BEI0MSQUZ{^behk:mqnuo]o%nmlkj]ihg8ftedcbbabNccdf gijmnopkqLrFs\tTu:uv v4vvvvQutt#swrrKqq)pon+l?jbhfe#cAa_^^_Z_ab cfdfghiUiWi2hh"ggfeb`f\YUPJD>T70[(!+ v8MqE5EEEFFGHJLPS*VZ^bdehkmoepqq[pon.lujeh_fecbaL_^]O\\]^_`bUUVWXYlZ\^_adfhk mpRrtuvwwwwvv0u0t4 Hb/c)ccccddoe;eg%hvj/lmnoq+rrr/qpKnkhjdE`q\YVoSPDMLJIHGGGH%HI}IKLPS:VZl^aej4mq sHuwvwx xwFvuts!qoClhea]YVUQ&M,J GE6CBBUCE^GJLO QTVYP\^amd)fhjul_m{nhn2mlki6fb]6WQoJCI;#3G+#y|* R#hijIjjjjk(kklmnp qqqrrrqpn\lhRdJ_[WTPLIG#ECBA8@K?@.@AAC1DH KJOeSQW\+`ej\n{qqtyv;wx7xgww,vus1q^nSjfb^8Y\TLO[K!GDA@?~=]<E<;999Y9:;<==@CGL PU[ta!fgkfoCs?uwxtxxAwvusqGmiod__ZUOaIE@>;:8,7w728i9;=b?BEGJM>P/SIW[(_Tc5f|il[npZqqrqRp4omWjDeas\"VOH(?7'.& E 4nopWpq$qkqqqqrMsHtEttttEsr,p>mI;:<8w64323&34A4f5M69p[964&31k002<357%9,;>oA`DlG$J M(Q*UZ_|cgjnp4rQrs;rr~q,okth3c_sYNRJLA9R0)(!~2O ppqRqrr|rrrrstuUuuguUtOs$pmif8a]5X'SNeIFBH?.;9F65_32?0///J/}//0h1o36V:q>DK&R&Y_fkaqtxyyy?y xw2trmHhaX[TTMhF?941Y.-,x,d,-/%02Q458T:=@CFUJDNTWY^cEGLTL[bioswxyy4y wwtrmg`YRuJC5-%_Aqrssstrtt}t]tuuuutt^rLokefa\_VQKiE@6231T/R-k,U+c**t*-))))x)Q)*>+,/3P9@GOW^_.f2mmrivx82.+D*(((W(x(()*)w)))*,.048i=CJLQ3W^Kci8m,prmsstsrpon'kgc\W P{IeA92,'qr}s-st*tttt[tu ut8sqplh{b]VPIC>9M5270\.-,%+)))**[*k*Z*,* ***+)))Q*,2@8@GP`X`hntCvxtx#x.wv3t qmic^$W?PHA8:41*-,Z*** ))))))s)(f(_(*f,/D27h830-,++*B))))p*,******+%+**))+0v5=EMMU^fqlruxxxzw}vtirn>jae_Y4RKJC=*73./.8,,d+++M+**)t('J&&&(*-S16'831.l+7'&$$$N$$%}&A'_(})*+j,O,-s-I,+*)o''($+j/S5'X$a"!!!"S"#$&m')@*+--.7-,+y*5)'g'&)q,28@#GPTY`hmtqsunuvvuzsqnkWf`"XQKD\?;`98089::::8g51.2+(?&%$$&l'+_/6f=gEMU]9cvinqrsslrq|qCq%pooml6ifdUb jkrlm.n nfnxooIonJkgnc^)X!Q JC;4.+E'L$"T!9 1 9 : !n"$ %')@*,d-.v..Z-f+*)((&'* ,17 >$E[MV]eTjo3qustudu"tsrpMmihdC]VPcIEA@>=<==>>f=;8r4/,>('%/$$Z%v&!),39}AIQY[`g!kpqsWs4rqvq?q5pp+onmkigeioijklm:m]n/nqnlje `oZ>SL7El>6/*'$V"m  }!#%')e+Z,./L//I.a-,+s**r*S,.27O>DLT\cIhmgp rsttL; 6S1-d)'%|$$'$$')/5=EnMUZ\rdinopyrs rqqbqcq@pponmljiqhahiljklDlm~mmkhc(]VOHkAY:o2,'%{"! k"  "N$&4()+-/4/00//n.w---.3.09269:ALGNU\ch lolr9s0ss9rrqpVoalqhb\VoPLIEFDbCB>BRBB*A?<7s2."*e(@&%O$$$&c(-2:UAIQX`glaor.ss?r^r'r r qqUponmCkkgghqijkaklmmj}gKa\[VSLzD=6.)C$#d!v ([ o!I"$&(*\,r.5/01#00/R/"/0_1z2&359>.DVJAPV\bglnqrsrIqponmkhRb\VQNJHFIDCwCQCkCBf?=83/+-(&%%%$$%'+0b7K>}FN$U]djnqsgt6ssxsBs[s-rqqp4nmmgRgeh iNjk+klmmjPf`Z8RfJCZ;4-6($E#.!!! !"$%')Z+-.0B01e10J/0 1S24H5V7@9=BJHMSX^ cxgknUpqrqpon|mlifa[UP,LIGEUCB!AAA@>;73W.+F)'&%% $%&*s.54;UCrJRZb#hlqAsitttt\ttbsrqq*onn!gggi'jkDkm*mmjf`YQJ Bo:3,,'$#"""""_"}"#$B%&(*6+-/\0111^00302s4(6+79<4@wE JOTY^RcgjmVp qTrqKpoml~kthe`ZTuNKHFMCA@S????<:62.+ (&& $$o#$%(+1i7@ GOqW_Uf@k.p]s!u=uPuvuuuu\tskrr pooFffgi*jkldmnXn*jg^`YQJ9B:3,(S%6$$v$$$$$% %&#'*(4)+(,./01Q1110136 8k:#`ZTNmIFNDAE?,=@A&DIKNOS W1Z{]a4dhNkWmdopqtq7ponmljAgvbh\VOJbEB?<:"877\6531W.+('%$##!"r""$&+!08@~HPX`NflpysvstLstttrrqr q6ploeefhjlmnon}jg#`YrQ!IjA93Y,)t&&&'''((_(t()D**+n,.J/x0h12J232359=:7h513210/.+)'W%$$4#R""%"5" #J$`(-5=.EJMaU9]*cjnqrorrqspp$oeefh6jGkm5oonMjsf~_XP'H\@82c,\)n'"']'((()g)))*n++q,--./0123*33`47<;y?cCGFKPhU\`deghiDkn]pFFAo<84{1/M.:-,b+*):'x%$##z"")!!!>!"w&*29AIQY`hlpEq qjqqraqppppMp oeefh jkm4onmiei^W*NF?160*(&w&'+(+())**#*F*+W+,Y-//001C2A233%47:5U1c-{*('&%$j#4"9!!P! `"&-4=/E0M3Un\d]iKmgn@nrmnZnnn!n4no'op.ddfgWi[kmNonlg^b=ZS?JBR:T1+4&$g""#@$@$%&'k'([))*'*+,- -f.3//a0026b;@FKRY_fk:np^qrscst:tPttgt(sssMrqpn^kgc^Y/S"MG\A=78C3/|,>)N'&\%y$"!!Z hZ "2&- 4-mnTVZ]aehl~kha$ZRJB@91("gy707- Y!"#%&&'()?)z)q))* +-g175>D0JlPW1^ ci7l`opqmqqqvqwqrs snsysst"tmtsspnkhea]yXSLF^@:y40,l)s&B$b""!! ~ 8 7  #E' .4=E=M|U]digmhnnHmImcmLlckklmmnfNfPU@Y^cg kEGKRNX_Jdilnopqqpppqsrrrrrs&sKsnrrpMnbki{fdT`\WnQyJDc>i8l3j.*'>%#V"!  R { #,'$.;5=fEN(Vw]elj_n_ooCn:n(ml|kklKlmmGKP(U[a)eijg`ZER5J6A9;12(t"VZ4~ #g "$%x&(2)L*$*`***))+-28f?FTM SY`leqjlnoi&gaX[xSyKC4:2*##-  S!#%K&()*+c++++*+)-Y/4:@AHGNU[af+j2l1nnoooqo no6oZopqHqqrrfrrrsqoJmNkjiafck]XQ;JDV=82@-(&.$0#"a!! U  2 "'E.5>`G'OXr_glpvpq oo=mkjijWjFjwj7GPYY`hmqfq{qpomjhhhhBhVh0>5=F5O W!]Mdvg gc^VROF>6~.4'!a=!@"$7%')'*,B-v.)..--K-.V154`9?ELiS%Y_edhDklmHQ)Y`i%n4qqrpolHheddccc(.7AJSZbfhd_WQI@80*E#!.O "$%'w)'*+-.//b/.-./n26;AGNrUS\,afilKmmmn#n mmmmnRo&pq?rSsHtPtuYu#u trqonmkid3^XQK;D>e7\1e+(&& $##<"!H Jv"'H.6>HQ@Ya iIn_qqrponjjfeb``\^^^")2GPYg`hmqpq>o4ligb^o[eYWVV*$.8CMVO_adVhfcX\ UNXFU>6>/(m$J!!!H!"$k&')+,_-.011<0//.01G48>*CIPW^diykmnhonnmmmmnnjo4p q4rstu,uuu@t rqonOm-k2i.e`2YTMG@93.X+C('?%$#"! "' .5>GPX`$hDm!pJopCmj:dx^YUSSP7ONgz!x+y5@K'T<]cPhge!^1XtQI5@902V*%""s!"Z"$&"')+,p-./01N00:/015m9@>CJDPW^dikmn,nnnmm~momnq8rtsttuuVtsrq#onKmk/i_e`ZTNHAh:4/k,('o%%$&#E" !5  D Z#'/ 6Z? GPqX_gl;o2n^nkg`>YTLOKpGpED(h2=HjR[b5h|hf`F[SL,C<;53-S'##"6"#e$&P(7)+,-./0181 0z/02+69?mDJQW^dXil nn1nnnTmm\mFminnoapq rLsstPtuEu5tss&qpqnmkjfYa[UO,HXA;%50E,)#'&%|$#"! !&$(/7?HPX_g^knUmImTid.\OUMNH{C><:_& 0:EOY`ghgb ]YVtO!F??70%*d%{#"#M#r$%')9*|+,-./00///1[599/>CIP/V]Cbh6k8mmnnOn mmlm`mtmnoPp prs(st^tutt7sr}po2nl[jfb[UpNGA5; 50%,#('Y&%$$$#2"r!B!"&*18AVIQY`lgZjmJkk=f`GWOHAO;53m1O#-8CBMW_1fhhc_YR IB:2,'&$"#m#X$G%',()+ ,--.~.//.r/ 0_47=tBHOU\:ag2jrm0mnnnSmmmnno*opqbr:rsttttt2srqojnjljfb7[UMG,A ;5/+(g'O&!%%$\#k"!"$P(-3;CeK_S[aPgjGlXjkicf\RJ\B:35,)'jJ!|*5p@KCU]egie a[TLD=5/)T%#A#Q##$&('g()*y+,4,,-->,-r.v15D:?ELCRY_6dh#kplnXnxnhmmn!nanop8pqnr rs?stitt{ssqpnml1j'ea(ZoSLlF@L::4.*''%%j$$H#e#"$H&n+)/6>F_NU3\bhgiJjhe{^VLD,;2+-$R!  2(t2=HS#Zc,fif c\VO`Gs?8F2$+Q&#q""#s$%#&F'U(()*f***+*+,/42l7DKXQWl]aaehklm~mlllm{nnoopqrs;sssorvqpvo mBkig{b]VOIC?=7Q1,4)-&&+%$$ ##z$"%(+085=DLVSYm_cff$fa\SJ@7u.$w! ="-7BPLUe]b(ffeA`[TMF1>8a1d+&$"#-# #$7$%W%%&7&}&}&-&&='=(*8,X0F4:u@|GMYS+X]bmeipk@llllmmlmn\noZp0q+r rs\s2rqponAlki9fvat[UNH[Bp<5/*(N%%6$9##v##$&P)->28@H O;VO[adVf5drc~^jWN D:14(.Ir~ 1  6)h3=HQY_deea]WQJzCM<^5/)&R###!#U#$$R$h$p$y$$$$X$M%(&/(:)-05;iAH NSY ^;bHfJhk kllmOmmnbno8opqsqrxr@qponjm>kjmgd`^YlSMF@:_3.<)'0$$#I#J"#d#%'+/6':4+&"`-7 m %Q.9MDM~V[be*fqcM`YZUNG@O93-(%>$R#M#H""##"""# """#Y$J&,'*[- 1f6&/HQ,W_`cedRbL]fY%SLZD>(71f,o( &$S#""i""!!!~!|!!!"6"$~%(!*7-1w6"ELTZ`cf6dQb]XKOpE:1V(:w Ki= rx#-8-BL.S\ `ete`dS_\WPQ(IB<5506*'%$'""!@ q  ; !!!"#%'L*G-O16_<)AHONUZ_dfikRlmnfnnnoo[oooonlkigd/a\XSXNEHBcFNT[`ef]fNb^SVNYC9#/%6g` <, !+5@QISY`d+fdbs^eZdTUMFz@&:q4I/)&$;# !f hJkv 6 !x"$'*?-F1a5;5A)GNAT"Y^3b|ehjlfmmn ninCnml-jJh=eeb_d[XKTQ LGfB=84]/,=(!%<"! ! "$9'R).4<5CK?R5XG_Rcg:fYep`h[URH=3$)lt RT1 p$.9DMT\aeUeda#^>Y!SGLgF1@N:b4.*j&$"! 8~W ! ! "$'*.-16;B@HNTKY]a0dgjk9l\lllbkj hfcF_\TXUDQN~JEA<840-*)&e$1"x"!=!"$&*-3h9AHOV([adfdb\VTLuBV7u-?$U L4u,NK A{4(Y3>/HJPY#^dfbgdXb>]YRL^E@:48.)&$N#! I:: # !$t&*9-i16:Y63_0,)'Q$#C!!!"$N'/)-28j?G+MSZx_hd;efIc ` Cg 4"2,M7rAKSZaeZgf)d`]uX R7KE@t:5?/+(O&$#""!!!e!A!-  / !t#%(+0@4:@GMMPRX\a[dhijjej+h|fc`\XTGPJLbHRDT@<841/},*(}&%r$#$Q$&(+.q28">ELRX.^addDc_[gS+I>4e*!T -E\p %k0|;ENV+^icgggca#\XQKE@;51f-:*('^%$##;"""K! I !A#+%(*.3`9&?!ElKePVm[;`+cg;hii,hfco_[WRN8IEE@<851/,+N)(''&j&y&'(*,0,38>ELQX'\ace ba[\*V*LyB7-+$Z t8 g])f41>HOP,X^dfgUdb_\RWFQKFBG=~941_.-b+*2('&&}&$%$##i$:%-'(+z.15;lAFLmQV[`\cg6hihgdap\XT&OTJKEK@;8&42s/-++$*e*I***r*+5+-/#1~3{6:@FaLUQV\`Ycnc3b_[\VNkC9/&:$D}br|s "Q,7AJ]RYaXe|hfe,b(`\WR]MHHD=@K;8n5m310S.-++**G)U((\)"*$+-/15U9>C1HMRhWg[`dgrhihg^d`^[RVQ}L>FA=85_20.-a,f,o,l,-.f/00_13Y57:Z>eBHgMvR~W\daPcodjb"`\%WOFd;m1g([| eSZk9!+9%//9C4KRZ`eeeeca_\X;SNJG~C@=};f98f65932211F001Y2\457m9@.:@754Y22112W3;4506L78:=c;::99 889s:l;=U?@BEyI#M Q>U X\`Jd9g?j,k,kjhheta~\>WHR#LH3Cp?<[:b876667579A:;=I>@3BFDGKNROUY]VacdbV`[|WPH8=3*"$ K T\#+|ELu " )>3R>]===>?s@BrDELFH4J_LORUX Z^`cocXbB^m[\VP_G>S4*#;M b/_i#LLqj m; *4=pE^KS:Y`_bdyccbaa`_\lYVTS\QPO4MLLaKK&JgJ IJhKJ4&*"=<*SG`&has P!S*4l.3*"py wr&anj(;~$0 AoM!*3<BHOV2\`-bbc:cdddcb>`_^]L\)[g[1ZZZpZYZZ\]3^`&acezgFhj/kHlkmen~o>oopoUnljgd{aA^,[wXVTSSS]ST:TVWyYZ[]J^q_`bccdevfecw`H]kYPUOG=3I)!iq2SDZj n|XjP%sA N6!.*A3N:@FLT Y^m`-aMaibceexe.dcOba``~`k`Z`l`l`n`F`x`abcdfgShijkllm1mnXnnnnnimMkig;db/` ^\ZZhZZyZ[\u]l^p_`abxccddeffedar^YVRwMFY=2)&!\ Un$t1jz;5Dd; <V v)2 91?SDKnQX]\_V_`acefgNgvffkf efJffgYgggh hzhi'iij:jjjjjjkkKkkl3llmfMc`\YTQKOD;p1(\ iW<&z^o#_w9AZQM l :(07" ? \V0(y J)&B  +Hs&-38=5BHNYR TUWOYR[^acvdevfBfghghxhi1iRiiiihug:ed2bx`^][['ZZ[6\E]v_ `b\cde*eiefJfggghChi=iiRhhQgfffedcau_[XATyQ"M=IqC=X5?,%G)fYu9w5?iaY#^ L$*q/37BEGIuK8MPKSU;WFXfYcYZZZYYkYXXZWV1TRVP)MKuINGEDDETFHJMPORSUVWXZ#[=\)\]F]|]]j])\\[iZY WV9D3&,%R|U 68fb-d[ifXN_rgh z!%(+.|2(68:O=J?h@B CF;HKLMNiNNNN!MoLL-KJIKGEC~AM?=:989"9;q=&?aACEGIJJKkLMOFPqQ?RRSRRRPO@MKIGeDB$?=;83-X&!&^ :;xs *|vms_YHCJmd^@ YZ"h$x&*-1468b9;`=2?@BBDDcDDCfBUA@?=;97420-,+, ,.L/204y68:<|=?d@BDFRG{HI%IIIeH#FwD B@> <:=876d30,4'!q  \ qf)k- q?zflIPIA;FA*  ag[" %u) ,./1X2X3456889}9E8775420.)+w(&.$!   s!#u%'*,C.1013z5[79;<>>>>|>*~$Z DgAdF_+ 3[prs*EG9! e!M~9 R  4Il p ) v{|8.  = @ fG-eLG[ P bK{DLs[Nk >R-S33;NYXW)88& 5(q'y7?OeH:? K  z / d_9 {(6Ech[;B|/'`GC<@NSG37% Eig;"7h9)f7AawhSKHT]nvAj:  831d& SmdRKs   maH;HN724  $ -CfsW@-+73+Y>un{RvE\9VY@KXhH@6!64"  ':iuS EV^lyxbE58IHUy|kqoL,%:Mc~yZ(U62Sm |P4(7@0 %+*);GD. /jpk`^eogmzhG0-3(!76yzcn&5; PaM>QqzD  "BD)WY:!6T_SE0!c9cN~y{jhyuoS?ALHDQR8")\hK/$Nzt\`  Y,  - GlpaF?CED:1386.7I^- qq}|vpO41@DIW[N84&.QL.-Orvda~{V0%  ,63"*eX3&00:L_qo]I1N177xsjI/+=J[ovr_R:2>,"59<CQ^wp]p+, Z7"+  &>,1@;02NsqPIMD>>HTcrveh,&kc\G;;M`qyeG4$ ""6>*$>DL`} &*jE%  *$ .2"A_aNBF^vxlojYC1-+Ag#~k_\UVZfvpJ$ 2B4$+@H]|hc`L1 '  %,/' ,YrocV]hg__]TKIKCFWt |tssvvv|{wb>!%" (6-"*@QjkJ3 $$!*.*&"! :]rxlcXOJFHIQajeYP\s |vqdL:<A6'!!-)&+@ZtlPD*%(   ,uejY>*~-9YI-UtE/z!""#5"a!Eg @ /       ! ] ^ e M /?O9AaG6U(z?   $!zJ P=oK2x&_'wr !H 'W-  >  ! , , % 1 R Y  L g t { ~ fzitvQ@k&0u(Qk~D IN /;>%z&x" wFi QupU  .  " Z  0 O _ o u  ! / )  2  eWZ w T uaDLM*y  PmPfqdO|ZG)Xi} epult ka e 1   t < Y r u E         ` O " _=",Hoxv"{e< Hil/v ?Q'7tp5_4~LH/$L Y   ? | , N f n v I  { l # G  M K & M u " \ t F  9|!U:XUH1e#z,v9mq^YS*p:U!ck[g #>9 V ~ Zo  4 b |  b 8   D i | t s V N f .     B ' , f3?O{$NJ7fX^N3<&sGQ'  u U n X { { n ' ;-mB:&Pm}/  V k ` 1  & C t v o } A & & &Ww^2X7k<Gmd5cay9H.Gb! _ r H Dyqj\Qf7 UX)"DlDDrD"-Jw - c  E p : q rD0=jg>Q$f| { ) BgO 4 x x # > G }:M3<@UfcYm\:9=O_bPAB]m_Bss8 Se  A R r . ` @ g9OFv0FuWM j PH@N ) ! t CnYv~[Hiolr]39 &6Slw|nWD>Nc}|,XI}Hbil  # Y ! u 8 ~ b  W 3l$6 l  { 6 ; .  X I Y-ceoPq;m-@IB8)!-<DRfjW?W >( * M e  c  X ^ /  < l ' < N  !  F b < \ .  3 ] =EilDN~$2CtU  %Mq,]gJYpA^ X : ; m ] U U V 6 ~  1 4 :F)Z#AT0dQRhoY$o> 5{ !3p:! #k  K G !  W ] l ^ = . C | f '  I } f (*[9+`YAS[,.X\2&&TiJ{T7-- 2dm: #q"~xs  uQ'iE s   ~ f jaNc7Jz vw<\FRc3# e|Wa[785:X!a5 t`)&SB3!vjm&E K ] 5sv\bo;$3I90I_n"saTlz6n I w 8 o b U  m A C]nzetU6_mM-;:`|53`r3XlkP& #Z5]/C<Sjm Y  .? % e # 7~& Rz Z i +|<7 +OPGju }opL S|"v{VmzbGAes(D`bxp!3.y 6 m$?@lVbF^{|ktX. *kF# b U ZyYR1>u/`r2|H: Q1e>LS]#-70a1@51Z ) U fe$f 37FE/ ="q$&s'(d(((('I&$#"!!U!I!C!C!> (I_Mq] u>u:)*"^N1T$@HTvdkA&?fhod0 o?'*$,DR2+O = z[E^l !#*$&(x*,.1!2334"33}210s/-,,+++,,<,+*)('Z&$#!YMZ  {;uZ?goa&2|lTp"T >h&H"Y$&Y'(*(()a**+,.0.135U7I94;4<====r=7<};:G876h55j5556(655$4W3H2Z1J0K.-C+<)$'3%$," J R(=aeGM@St8UpIv (Tv@.kApx |+' $0'+-0 1Y23%34F55679:g;<=?R@BDF,GAGGGGG-FEOCBAA@@@AA^AMA@X?>v=<;:9g753M1[/j-Q+6)C'D%]" 1`"< i VE:@ 6}AMY<`[:Mt(+_)K 1 c #'*.2b58':~;=>i?A?@AB8BCDEFGI[K1MpOQSSTT8TTOSRQ8ONN|N&N?NbNNNmMLKJJHGFEfDBp@>=[;W86*31.,<)&0"Jx ;U'>9KxENYc&F ~ })  $'+.\26: =l@\BwDFHjIJKSL"LM MWMNzO#P:QNSU"WZ8\4]^K__L___8^\[ZZxZ>ZlZZ[ZZXWpUSROPO6MLJIgHdFDA>;863e0',(z#p7x iPP#N%.zA (RCTs-~V"g DfK#&'W+M.2=59=AYE#HNK9MP RT UPV`VWWX=XYYZ[\^/`b,dffg/gh2hthhhIgPf9eDddqd\de'eeeerdsc8ao_^\RZXVTSRQPM|JGDAG=:6_2-(#%fK `cP]?54W8H~ [ '\q!%*(.i2{6,9=?A&DHKOQTW49 =1@DHLP S1VYB\1^acdfBgXh>hi iWij*jkCkllpm mnop]pptppppp~ooRnnsnno\ppqCqrqqwpao\mlji g#ecaaa`^][YVSDNJE7@<%7{1+%u b[B-  +Dy r 5  +0 !&+06%;?CG{K@OERV X[ ]h`Obe fh i.jkllmgmnnrnno o o oPopq6qqqqqqrr qq pp;pcpqqrrrstsjs(rHqmp8omlPji,Efr!+%*./K4'9?lEHJOsSWh[e^xa4bd*e#fzghijjkylmnopXppq>qoqqqqqqrrsLst9tutu uuuu/t}ssfsVsIsls{sst=t~t?srqpoin>m l'kTjjjjj$ihhgZecha]YU~QbMHD?.93.8)G$[e s}s8 "5K SIo!y#&*/n38>CIOnTX]I`d{fhiijjkk'kjk:klmnsoQopupqrrrrsgssVsCst-tu_uv vGvwwIw5vuutlt-sssst t9tctsrqpFomlkkjjkkUknkbkjj+i/geecS`],YVR\NIDw>83S-'!  =1~ux !Mr***h))q)")**,. 15?9=BGM2RW\F_dg'jk]lGl(l_l8l kjjx?>>>5>>??AC3FIMQdUzY]adhCjm~noooo0nzm3kjFigfsecbaaabceHfhjlen^opqrFstu vvww>wwwvvutsKrrr qVponlk hfeca_^^_G`aObceIIIPIHIJKMPSVZQ]amdglilnpQpq2ppnmJkBiEgbed@bh`^]t\?\\&]7^I_acleZgjlEmnp/qs=tv8w wwx&x"wvvusrr/qzpoOnKlk hfcj`^\oZY)XXjY[\^w`.acfhijk4k&k?kk&jj.hfd_b^ZUP IC=)5.&S} RSjS7S-SRS`SUJCj;x3r,%H,  9bcVcddUddd|deaefh#ik.lmn~op5ppRommk~he[a^+ZWTRxP]MKJ#IGGGHKHIJLNQUVY7\`CcgkoYrtvgw,x(x>xw7vfu(trgpnk'gdQ`\XPTPRLIG!EqCBBD/EHCJMPSV_Y7\+_(b:dgi|k]lnZoFpoodmljTgob^Y SLE=6p/L' u< oh^i@ijRjjjjkAkslln oopTpq$qpomkhNd`\XUUQNKIGDE9CZB"@@4?@I@ABDFJMQUZ^?bgkoruJvwxxw8v|u+trol~hd`\WRNIF3CA?b=X<AXCFIMP%S/V.Yn\`dfiknoqnqrq pWnliGe`\UOmG@901E)h! 8kllm/mmmmn n!nopq*qgqqqpomqjgHc_[KWSObKH[ECA+?=0;:@9x89B9:;=?BEJRNSRX ]-bglptsuwxxEwjvu\t)qo$kfb ]XSuMHCGMRX^djOnsuwxaxwwQutro j?eK_Z6TNsHJA<8W532e00E0=12469<>?lBF HL(OSXH\aseTil o;q8rsrqq>omj|g]c^Y;975310/c.../(/0C1258o06#.@'Yopq6qr$rrrs&stEu&uutts)q#m]id__YpSN\HC?6;75`3F1/.`,,+W+6+0+q+r++,-02961:@G/NU]dBj@p@twxkyx!wmutr;nic]*VOHbAW94 .+)U(w'V'x'(*+-U/:0257:=AE4INTZE_dmilWoqrrPrGqupom j^h^eYa\VOrH(@C8_0("~Up=pqrLrssJscst3tuquju%t smqOnie}_YSMGB?=~852o0j.-,+*))**Q*r*P*G*`+ +-.`15L;gAIrQ X`gKn rtvuwxw{vut!qniwd?]WMP7HA:>4L.+)'&&&'()*,!-".A/`1L3v69=AFLRY(^dhlWnqq[qq ponkjhf7a]$VPaI>A:u2,J&$pq]r/rsSstttHtutuuLts4roDZKQXi^cihqknppppp.o mvlkKifb])WQqJC<5/opqrssssstttsrpnkIga@[U NGdA$< 63/r-V+;*1)>('''(E())* **/*~****G+-3,8@HQ Ya"hnss|uTvuuFsrpmie`[OTN)F?[9 3_/,{*)5((O(d(N(](((W'']'(*, /27=CJnQYX ]cgkmoopmp(ovn+m\l3k8hea'\WuQK6Dv>93oVp;q"qrWrssssss~qpn ksgb[\(VOWH;A;72P/+*J(('O&&V&H&'()Q)**i*+J+_+*})*+06=EMVZ^Kflrtcv+uuAsrpmj$fb?]WQKJ!B211)1Y111a0.,*R'&$h$3$-%'O*-318?G9NU\SbglnapqqppnnImlVj|hfct_[XoUolclm`n%no5o?oEoonm>ig2b^6X!RfKD=72-*x&$#"p!!!"#?$R%v&(/){*+,,,=+)('O';'O*~.x5]qnmXjfg1a\0UMG@~;754R45*666053q0-*(f&*%Z$%&)+0-5*<BJQX_ejvmpkq-rqpoo#nmlXkMi}g&d(a(^\}kl/lmnAnnnnnmkgd_Z-SMG?82.&)&#! O @!B"R#%@&(*+,--0,f*)(N&&(%(!+Y17?G`OX`g:koRpqqrxr3qpomk:f}a;Z^SLFA*<:889u:e;"::7z4`0u,)'+%$$%H';(,107>oFMU\Sbqhlpqrsr*qYpoonmm2kj9hed0bk3kl3m-mnUnQnnnmjf6b2\VvOIBB;Q4.*&$N! h$ "J$'%'*,./70/.-=,*)3(n')O+06#=`DLUD\ch{lnupKpqqqpponje_0XR6KFBj@(>==>? >=:7s2.+I(&m$$$&u'*.Z4q:B+IQEX_Nf&jnprhrmqppZp,onnlkihfejajk]ltmemmn[nCn%ki/d3_oYRIKD>60O+'$\"M Zf0] "$&)X+.b02#3.22N1 /.-i,+,.2K6=uD:50,)',%W%$%&_(+1<7>qEMU\cimorkrruqOq pp~oomlkj$i7hiijyklmDmVnmmk/h(b];V9OG@:~3,-T(&#\! } S!#&Z(+.14G57a77s6543321237:A G(NU[jafjQlo%opp7p opIoom id^XaRNKIIlGgFyEEqEEDfC|@<722-)'&%%Z& &('*9/4A;_BJJQX`flD=IOU[acejloopeooonnbmkhc^0XROJLoKIbHcGGFFEB:>9C3.*(&&=%&)&'r)-A18m?XG-NU^djn`r;stssshsArqpYo4nlkk'hEhOijykllmnmjgTaZvRJCo<5.h)y%$M""S!! !".#!$'),/37r:<>?@??W>>\=<==@ACYH*LR;W\b5fjmop^ppconn:lkiNfa[UPALJ1I5GFEEElDCAA>93.*('&{%%%&(G+/x5<=D&KS#[Vbuhm$qsuJtuttt%s qpoamll8gghjklmnwnn|kQgaHZ^R#JgB;"4Y-C(%1$T#M#E"""""#$&(+X.159= ?UABC`BBBB9A@@A1CFJNSX]~bPf\jDlopqqpoInrlkchke^`]ZeT N/JGFEDCCbCnC BX?=83.+)'+&}%%H$%&),28@HSP Xg_fkpsuuuuuuct[rqpo7nmeggh8iklmocoolEhb[$RKCl;t4-{)1%%A$$$$$p$$%&f(),M/26:=@hCDjE%DEUEpE^EDTDEiHJNRV[%_mcgwk mpQqrryuu8uuptsrq&onnffhikm:nBpEppm.ib[SjKC;4-)&&I%&A&)&,&D&&'T()*-F/37z;U>ADmFGGYH9HIeIIIIJMPT2WZ^aaeixlnq>rhstsCrqpnm&jfa[TNHDB@?5=5;;N::_86309,)'&I%$u##2##%'z,1:AIQYnag:mvqstRttkuutFrrq>po!nffhikmunpq?pmqib[SjKC;4.(*d'c'&'F'@'P'''(u)-*+-0R37~;">ADsFaGHJGKM MNOQTW[j^D`c_fCiloqArstYt5ts qonk>hc]VOIDB ?+=:B8E7 6543'0-*(6&%$$#_"""$9%K)u.7>FNVm^KdkqoKrOrs rsss.qqBpoo*nffgikmhnpqXqmQijb[\RK.C;?4Z-*|'''~(+(H(m())&)*'+r,c.d147;Z>ADG.IJLO3Q RTKVaX\m`!cPegEi k9nprsuu]uuQu8tDspnki=d^WDOIuC@C<:=64c22;10/-+X(&%$$t#""l"p""#_',K4];DKS[bimpqYqqEr.rr$q ppPoo]o$ffgik}mn|ppp[l\h.a7YQIA92,)'&&''(@() )/){*+U,>.)047:=h@wCFEGJLORU WkZj^b f+i6k_lmoqsu4uvvviuu{tsnq1okids^WP.IC?R;r8}41//R.-,+U)L'W%%$O#""L!!!x""H%*2:7BgJ@QZahZlopIpaopqqp0oooooggh+ik[m nppok}g_XPH5@g71 + (S%& & &'K'(_())f*+%+-/258G;E>"@BE-GKPORZUX\a5ej]m\opqrtuvvwPw"v~uxu tBsEq%nk`hLc^IWtPsICP>}:562/-,++*F('X%$##k""$!z!! !!!0$e)$1 8@HPX_giko>opobnopp@ooopp&paffgi$jln\ppioj3e\^VN%F>05.(&d$%$0$8%%_%&'`'(()*,.0t247v9;>&@nCGfKOSWm[af2jmp[qrsu#uvovvvuttXsrqo khd_8YRL9E@;8F30-,O*)('&j$##4""7!p ` ]  #(0\7@eHaP3X^_gkno nnHoooooCoppvpff7glhjxlqnp]on=hc\ITLC;3#,a&$k"F"L"I##O#$%_%&F'(()+x-j/3173`57H9|;?CHMGQV[`fYk0n9prGstpuyvvvsvv+uttssCqp,mhjfsa\(VROI|C>:Y51.,k*E) ''$%$#i""! Dz #?'/7N?GOW_fkngnnUmn[onninoiopq5cdLeg[ijkmooKm>guaZKRuIA90* $"w q o V !+!"P##$.%&&')'*,%-/1m257ID4ImNT!Y`hej(loBpr#rsstnttttttt0ssrrq\olid`%ZUO3ID?>941R-+A)8'&,$#""! 9 , a i#w( /7?kGuOuW^fcjn#nCnmJmn'mm'mrnao#op]^aAcfilnnkVd^nVfNME=c5j,& ! p}>s , !"#%&7'T(D)')*+,.17Fj2lnZopqrr8rsssssFrrrrqrVqxpn:klgQc^ZTOeIC=840[-C*}(&u$## "N!!D ; #(G/7%?lGOW_4fk-nnnmmn"mblmmnogp-YF[^a)dhUjn%mBjkcV\TLpC;c3i*$>qO H!:"2#a$%''())*V*-*0J5<BINU([EafjakmnopOpppqJqrRrOqq|q/qqqpton/khea]Y'T3NGGA<672.+m)"&%##*"O!!* s a ' #(?/7?VGOX,_wgkoo5on(nHn@mKllmn:noRnTX\a@ehllOib\ITKC:2)#om>7" !"$%R&'(T()r)*X*-B0V6<+CEIOV[b_fjYklmn|nnnnoXopVppWpoonoHo6nnzm kJhfEcX`}\LWQKaD?9405,-)&%7##5"?! -  #( /6?=GPX_glcopponnmVlglhm5mn2nKN_S,X4]bfkBkPi6bE[SKZB:.2))w#D9n! 6!T"x#$%'(()B))**-#045;CIPBV\pbfijlDlmmmwmm mmnMnnnn)mmmmmlkKi.gec_[eUNGA< 61;,)&%3##."%!e  S `#['/|6?&GP{X`[hIm5pqq9p+oomllrm3mmmnbBJFiL2RRX^ci6j-ib\TiLjC;d3X*$#hS!!"^#$%'.(D) )|*"**i*+U-06v<2C,IPW8\bfwicjXkl'lllakklGlmmn8n(mmmn n,n/mOkj0i+gf!b^ WQ3JQC=72R-q*/&%:##L"L!! F  7 9#8'/^6?GPYN`hmqqrppRo mkkekkll9>ENLS[`g&ihc@]UkME8<4,M% 9ca " #Z$%'()*W*+9++w+,a.27S'/K6S>GPY`i,n[rr,rqpnlQjij]jjjg1T7 >FO7W#]dgidU_FW7OG?I72.("k= "#C$%'(Q)+$+, ,o,,--03$8_=xCJQ|X>]cfiJijjkwkfjjhjek klmnoo5oppBpponyml8jifb\V}OrHA;F5/+j'w%$J$ #A""T!! h O V#Y'/66,>GPY~`i&nQqqr}q;om"igfmfueee)W/8NASJS_Zbfi'eR`XQIA91x*$}!7' "9#h$&'^()+S,-R-X-e-U--.039> DLJQY^dgj!jkPkYkkCjjLj(jkTlwmnooppq)pppQo(mlkjgd>^dX[QUJC=|7{1,*'&@$$##I""`!X  R T#O'/6>GPY`in4qqWrpnk%gRdYbbJa``#*%3?.--n-._04,9>DKDRXY_ehkOklzlUl9kkjjdjkHlemnopoqqoqqqpopmlkjgd_GPY<`xhmppOpo+ligcb_]=\Z1YY:$.~8vBLU_5di\g|d&\VO"G4>70J($]!x!y !$!#$&k')*@+Y,-./(..z.+./'14:`?VEsKRZD`filJlmKm%llkIjj{jkml~mnppqqrrcr(qon-mkjhe_ZCSMbG@:M3.*m(&& %$o#"!  8 (#'@.5>IG;P*X_glooepmjWd_[ZWUS4RQd !6+/52?JSo]kcih,e^XQIA92+%"h! !h!#g$&m'(*2+M,-./)/)..//25Q:?{EKRY`pfj"llmmmglkkjkWklmnppqrLrrrqvpZnml6jhGSOX]_g[knnPnkg`[!VQNJIG'1W!%/X9DNYf`ghegpa]OVOG?8d0^*Y%-#=!"$" #$I%' ($)b*z+n,.--..0-.W.14]9=CIPfV]Bchtklmmmmllkl#lmncoZpWq?rrsassrrFq omlbjgb]WAPIBh{dax[RUMOEe=5/(%"E"!","#$%&'()*C*+:+++,E.'0w48>|DdK QW^UcRgjRlmnmmmn"no)op`pqEqrKrsssrr posmlwjgib]oV|OfH[A&F*/6>WFNU\b2gjijhe_$WqME}=5.'O# H7(T2|=pH/RZbf1hf cL]LWPH*@ 821+&M"!!!""#$\%%&'((Q()D)*!*j+.26;A1GMT4Z_dgk@lmmmmnCnoWopNpqqr]rsssOrUq]onlkGhea[TeMDF@;[50+(')&&*%$$###&(p-`29AIPV^bg gheWaZQG?6-Y% tn%/:E/OW`!d;gfd_Z'S%KCd;5d.+($8"!C!!!"x##f#$%N%%&&n&'(I)+/28 =]C_IhO|UZ`dh'jlhlmOmomnXnouoppqLr!rs?rrqMp.nmk ieb]WPJC>-913v.*(d&&%%;$$j#$y%\(>+0K6=E7)1-))o'&)%%$$4$2$%Q&*F-3'9wA,HOVD[E`cSec}b]WN"EA;2) kL p #)j3g=HQZ._oe=ffc_YStKD;= 60))&#3"!v!H! !*!3!L!H!o!"B"0"9"#u$~& ')W,05V; @jEKQ/V[`dRgiklmnoo$ooop:pqqxqqupoJmkjAge`\`V|P~JPD?9s4R/+L(&}$$s###$$|&|(,06=EPLRYY]bc=ca'_Y$QG>5,# 2  m%9.9CMVQ\Mcegxdb#\W_P,HA6:F47-($#d!! V % +  !"$%&(,F0G5:@eFKQW] aDeTgjkmpn3o oboooppypq%pp nm d1)o  !F"r#Q$&(+0Z4:?ELR?XH]3aehCjJlhmno2opoSo\o~op p%oxnlkchfNb\^@XSsMHB=72B-)'n$#x"_"R"""$%),817?PFNUZ`Ycdca\qW)NE,:1) ]\ H h5#Q-7BaLHT0\zaf,f[ea^YRKAD:=71o+'$#|! g5kl  !g"#%( +/~49o?UEyL RX^8bkfri kmo,oooooooon}mUk+i#eb]Y4SN HMB=8E3o.+ '%d#"!E!Y! !"E$]&y*c.:4];oCKQY ^Hcvdeb`YRI>4+#yg ^  Yh'1';F_O>X]cefca\WPIC<7 0+'%#P" TC|)4lB  " $%(+/49?$ELhRYM^ZcfjlWnoHooeoLnnn;mkj$g=da`w\mWRMoGBm="8d3/+(%#!!S !#%(o,18?GNUD\F`e e*ea]NUMC8/%W |^) U!(*5x@fJ;SoZ%andg`edg`^\rVrOHB<6p0+?'$# !j#=t%^ 4!#&(~+/|4X9]?F!LSuY^^brfilmnnenBmmkjhfb^^ZoV-QkLG}A<73z/b,%(&h#" P " q"$'q*t/5q=DLRX_cfbed#_`ZcQH>=B3) Sp 16  $Q.9CMU]af7f\f(b`J[ZUNHB<70+'%#!d` "t$'*-165;fAsGNFSYy^bfj%kmll^k)jhFfc`O\WSkO9JFVAn<7)2/q,>)'$"! !K"O$'$*.4Y:BIP*V\aduecva\UKB7U-I$= Ow(R> '2=GP X^eg%hAed+`[UPO(HB=6e0+3'$#5!8@}f;6gy "$'e)-17=CIOU\Z_d(hJj:kkjhgHdbV^ZV QLHD-?:51^-+(&$#T!!U !b!#9$'*z.3Y9@HNT_Z_dCeVebK_XPF;1o'q C) Ji!O+364@IRYaIe=hg f?b_ZwTN`HC<71&,)I'm%P#"x!! _ !yk ?!:#$'z)-06/;BaHTMSY^cg\iGjihfd^a]YUlPmKG B>095w0-z*p(&%$$!#v##$%(*-20"4:#@G2MbSJXb^%addc_P[HS_J.?4+u!N rjUa1o \#.9CM$T]bg}h"he b^ZZT[NHB=73.,u*2(' %$$##L""! u 1!!#%( *-?05;fAG`LRW]affhOihSgda]YITOJ]E@);i7]3\/,7)'E&g%%%^%j%Z&&(*p,.2A5;RAGGMhRXE\acdbaH\=VMEC)8.K%` e " }k'o2#*.)q((+'.%% $%&(*_,.1~49b>DjINT Y^Bbufhnigf\b_TZVaQfL1FA<(740.|+)(I(#(>))d)*G+U,/1$359?=}C#HNKS$WZ\o_bbbz_>\V]OE:0'^ON 1]y|S~ gP l*5?HiPW_dgg fca8]YTOtJF8B>;9<754:21-//.-)++*+,.n0236O9 =bB"GyLHPUZB_1c4g@higf:bi^tYKT]NITC>9q532/.Z,V+K*+ +,-./1257Q:0<@EJOTTX\`bcza\_[WOG<2)!O 0_@J Un+ R#-8-AkIPY_]deeceb[`]]ZUPLIFDA?>5<;:C876544 34s5c68]:;|=@*CHLQUY%];aeGhjAEEInMQUY\]x`Cbb\a-][UOG=3*# vOW~ ]S &k%0:BIRY `xd6fdcb a^[WT.PNLIH8FEFD#CA@p?2>3= <@)ADqG JMQUXz\(_Gbcd$at^ZVPG=4+#".$^%{FOx$ '1l:fBCIPX^jbcOc>aa`_]@Z]WTTSQyPCNMLKJIHGJEEdEEF@GoHyIJLN]Q4TqX[]adgcilmBmkiea\XSTNvJ'EB@#>===g=>9?R@B]CEFHVJLORUXRZ]X`bdca]ZiU.OGu> 3+#qk /WcEKwY :"(;1:BJIPW^Sacvbbb}ba`^\RZoYXSWFVWU|TSSQPwNNMtMNBOKP0QeR~T#UXl[&]`abegkikmn2nolkgc_[VWROK)HyEDDD@DFDEFHyJvL9MO=PRUHWZi\^aQcXef3eb_ZVZOG=3*" Fno|>}T$klR "(|1:A$H$NV1[_`aabQbcOba^_^^^]t\[[_ZYXyVUU U&U^V9VX YZ\p^`bd{fgikklmn7nkmIliifc_\ XwU1QOfM!L1KqKKLM^NPRxT&UVXzZ6\]_aDfJQWf\;^V_`=acefgpg]gggKg\gHgffeOd{cc bbbc'cd]eVfegyhpi(ijTkklhlmfmmmmlrkhfdNb` ]\4ZZ YZ,Z[\^!_l`abcdFdeefg_febk_ZWRMF<2(!Fr ~A1 /yew4gv='=a : N-o'/5gfd4a2]YUHQKD;1!'d6pdyYe WyB:#X>  %-R39>ICJ OT?VXJYe[?]`cf g;h\hitijCjjjjjUjihggCfaejd=ba``___`C`abcdecee{e5ddd~d:d3dVdegffffffffffMeeddbbn_\ XLTSQ9MHcA8/]&g?" P!x D}*- Gn#z*0|5e9? DqINQ0RTdVWY9\`HceUfjg_gh@hhii2i"ihgfedDb`x^@\ZXWoWVVWJXY[]j^`Xa]bKccdeXefgBghhThgfflf eeGdcybh`w^W[+WSPLIjD=5L,%E O$x*q9=bdZ =z!Z',0t4*8 =AFTI*JLFNeQUNX\]_ _`_`3`i`z`````_^\LZdWU@RPN%LKKK&KiLNgPRTWXZ|[]r^_`abcbbbb+ax`__c^^][Y/V_SWOLIGCD>8|1:)"I8 gOtvRER/![3 h#o'*-1>5n:B>mACyEdGJMQSUxVTWLWWWWWwW\VV{UoThRPMK%HqECAA1@5@Z@BQD"FHKVMOQSrUEVXVY{Z[g[[\ [[Z1YuXtWUT QcNKIFGC@=Z8N2, %kb# !h_%a]h`SK`wf!  ow"s$&)-2!6=9:;=#?AVCFWHoIKKL KKK_KJmIHGECAE> < :6k2,?&Z (n ;/f{'yw$pw\WJHOma"7 ? n|"D%)-03;5f68:N;=)>?@@AMA@@&?>8<:8`5m2n/,+)b(''(G)+.$0s2468;=?1AOC.EF`GsGHGGEDA?=;O927l54Y1/*% Mio v ,g-v<jAwekKQLHAF<& p,r q *HV[!%(+-X./c031233f45m666Z6q55532g0-*'e$|!>Ce9"$.&~(*,/1j36D8r:;==<=m<;9753m1/.g-j,*i'O#%d T7)a+iHzuH7XBIHSUM7+ /[ E"r b"$%q&&f''()t*1***r*('%#4 Yo-ORBOKXX"($&)p, .20E1X2F210/-+*(G&%$," Q$l 3 Ad [qQkK2?i9@D]fX7# ^AK ' Z DTf dXlK{ Y; 1fDRb "U$)%&'+&&%$x# ! 7 9+z  eM&jx<zD.6^2FJPI<*%pP6Y  CU(uy)T? s ZG.%   z\>HpU' :j;WMqIiH^)-Vlnk$AH=&!=z?"8 } F # 6 @ F }/>#\K=<z  o m#nzdF< "\wfUn DX2T.*1EPOK (<:% .Mp:x97!v4YL  9 1 : > ^"p(Ug^CI5/fHB=DQSE"42$Zw2|'(zdEX!c{U@<.*'8Iu#yE *hftt.e@Es~_QPyqfRHTV=18& $QW*u022MwCjpzreUQM:2FVG+ BG\YsmY\]"UziM@M\gJA5%?=!#$-PpmK (& 1HP[tucNGO]XYqwvwtrxsZ='+<`y/:c907Zq qF)/?A. /@FBIIG2   YmpjpzkSCCF:+.#%@ZJaaIF@UsuA  (FH$ &5ouQ0#=ZS6#p=W9xmiVIKSOILH6 ?enXF2<hzqnlY__3   $0!% YjHDG=. (15")O IS!zsnVDCLMLNLG;1;TN700&.Il~{f`a} [6% '/5  7uX3 !)6JdnaQFh142yslUDBNV]bcf_R9%'59(/HKGIXia]t*+ [:% ,"7, 0><8A_tO?:.+)6Jbt|u{%"|j`ZKEGVhtyn`J5!-55@A-!3NOP]w} *.kF' .# '0' =al`TRh}ndT?-#?g#weYURW]h{mL*  167EL>2<NNXt!"{hc`K1  -$  #&//#'Xz~o[amog^QC;9=7?Uw& wopu|~~u\;"!!#*/+)2:2.:PZjjJ6! ))$.,$)..%7c~mbYUSLFAER\VONayjXC7:@;1,'"+*-:Qg|iMB-!%   (ofW{T ;'[V$ !!!!y  n       % Y  e l P 9B.'PqG8S(}B   !v?U9]:=|\nK8-@L&T &vC  _  ( - 2 C [ n   W l p k o P]M]mjMBp2,o%OtC GO+76}f6 K5_Q}Is4R:@y$ c 0 m  + D T n , , 4 $    E48 W 2 [ ]@GL*| "RkKbmgL'JoYif+Ml+jSc<DJRS   : t  % L o x M     `    b?('yCgpowiD:A Cxn!$v1&R4( ' p & I s  ; ` s  t r T $ u t 0 2 . : _ p : e H  5}!V;VQC-d$z*r8ilZRK)tzQtJ4?/{!=)v? o ) @ N S "o 1 Y q ~ w I !    O x i ] ; 4 S %     = % ) n<GM| (RN0cRRR" 'c/O.2`Y + e p [ 8  ~ B & wH9"H^l <  f a N  = n  p u B % ( (Yx[ .[7o9D`Ss=GC7  r 6 e {  p [ cG4>Tny~6 ZU"#7VXEz:+Hr + g  I r 5 l m;y)4ik4Fk ~ ) #RAX:  ' 2pl-W|^TcO?KFFTYB2?bu2c"Kh_'Mi ! H \ w / a A n<J@r)>sPY  Z _2 7 5I3r8}'<QN-7]hclhO<CZ`o'6}tA2gQclq  U ) }  ? m  T 2m&, q  . Q 6 / D  o^ 5 3 gtJ8f 0IE-#  .(+Gn$}`6` @' % H d  e } Z d 0  ; j # {4 O     ? Y C ] 6   Q "nE[|JEx-JX" ";f0LijSCVk Hc! V 7 1 f [ Q N M  3 w * 8 <E0WRP]#vsiRP\W2xT'$c$#&f*E$m  I F !  $ Q ^ p ` < + A } c ' B u a 0t&`E2H_782-KeK )\FntsOzaF& )Wh, ['x! yZ0tN  o  } f m^I[9<{wu=+rC7=vtCAyf>vK' v0^]wLN{={rr*> H \ 3nv|\Yf*.@9 +/ n+w;Qc ) ? f 1 > > H u hv#*)Z":y{;[mU5?8Y>2]r3QhaF"Q4a0K?~b<_61grG 9wn . M Y n.-lk Aum3S!GKxt{UU )z|XkybD<ihDr^ ZQr[ ! I j E 9 > UZ0~%^+{u4{chS" l =  5 6 SKH0Br Sq6SA^:f,ETW]"+/ s$n p 3, w4@V a * u;4L8'E*[!#%'-'(~(P(5'&%$#"Y!{ re:; & pF@"4\(EN Pkar>$9dimuZ(}N"%@M/*C? 8 " V'L#  !!"$%x'&(*,m.P0F13333y3 2G1j0;.-,s+*****B)](p'D&!$#"!m /"> y US@46!t_GfgU$,r\mB} Vl!#%}&s'v(1()*W++,./02o35868w:?;<=[==3<<;D: 87V54413333v2100/.K-},+*)h'&a$#u" O9&3 u5'ylq U\@Xz>N_? m Gc^7i B$A  r0!$+'f*-n/N01o2R3'4556789;'?@KACE2FG?GGoGfFFDECB`@??>>>s>=_<;:99J88)765420.,*(&$"> 6>Q#F>Z`Dh^7\`m , HYm ^s|! $'+.S2!5j8D9;B<=A>u?@ABC3CDEVF%G GHJjLsNPR}SnT(T/TvTSRgQON=>;,86B30.l+)%! L g N'a%E4  A{6Npy Ih eZ7"'>+W.2 59}=Q@DBDEnFH#IK,L;M1MMN NTNOPqQ;RT]VY.[a]N^T_5_e___]\[_Z$YAXtXWWW8V;U+SRDPOjNAML2KrJJEIlHG E!B8?+;853 /,e(!#`2%z vNS#G"0z;$C|:4k R 7 i$j(-,159=4ADH8JMbNPQSUBVWXXY"YFYZ>Z[\]_ma}cegghhihh9gf dcc"bzbDb@b@baq`_^H\[|Z?YWVUTSS-R%PNrKHDAt=961-P()"i@? tDt^LZ6+2S0"b, N'?z#'+/38%72-( "BB   +2 :Y{hT/KF+[ E%Iq#(-206:>C.GKORUX[]`(abd eg h1hiciijKjkQklKlm)mnopqqqpq ppoo9nnmmmmlmmnn!n*mm4l]kjjigfoecbb5a`r^\ZWSO%JcEn@<=72A,(& d  wD3 *> w A E :#(v-}28P=BAEmIMQUX[]V_{bd3efghikTlXlmammn$ntnnoo9oopqWqr?r8r*rrArJrqq,ppOp oooopp poo[nn,mllAkcjbirhgfeedba_C\XXSNJE\A S#$/$5###H##%<&*.276;@F1L5RWk[_bf5hdj jjjjkHkak&jjjk@l=mGnYoBopqqjqr\rskssssttuuv>vuvw6wwwUvvruuputtwtWtetNssRrqqp on)ml\kkl&llm mlllWkei~ge+b_?[WSOaJE?94.v(#p_ K=l-....D. .w./1p48=5AEbJ+OUZ^bMfhknlmTllll-kzjii/i&iijjklim1nopqLriszt tItOtu uvqvww2wPwxx/www$vvuu\u ttqtstrqponem*l jj iViJi`ijwkkkllljih fdzbK_ [WSOJ5D>82-& 1J ; -B~%O8888889(97:k<?pCG8JNSoXf](a[ethln:pppponmlZjihhgWgfg`ghiklncpqs7t'ttuupuvvw/wNwkwx x7x wwRvv)uuu^ttusrqpornlk ihXgfg g-ghisjfk_lmm:lkjj>igecD_\kXCT/NIGB=.70)"W l?4YuG;jB BBBBCCCDF|ILPS;VZ^beiil"npq*qppo/ml+jwhgfdcUb}aabcdegjln p%qrs\sthuuvQvvw+wwwwwovvAuu-ttksrqpnm^kigfdc)bb"bbcdfgshjklrlilIkkkjihezb_\\5WRMGdA?;4^-:&l 0a u[L1LMMIMtMNN6ODPSUX[^b'e;h jm`o{qBqr2qq onkigfdRbc`^]\\\]^`be0gjlnp}qrstuvw wpwwwxwwvv+uLtssPrTq&osmkig0db`y^]].\]^`atcdfhjllm7m?mmmmelkiIfdP`\WIQKE?B70w)t#; $ l>-TUUV!VoVVWAX3Y[]M_b dg i k1lo&plq5ppo_nkifdRb(`.^U\%Z5XiWdVfVdVWXlZ[^0`cfiNkmtohq/stvvwwx5xOxhxwvvtsrqeonkigfca ^)[Y3WVEVUVX7ZG\!^7`Fb|dgijkllmQmnnnmm!kWifc_lZUOImB;;4-8& |P 1\]^-^_<__`:aacFdxfh jkln^oq q|qipom jgda^\nZ;X?USRQ-P;P0PAQQSTW)Y] `mcfi\lnq s)uv9wAwx@xbxx)wvuts7q]omjgda^k[8X UJRaPOO NOQUSV&X[E]`UbecgikFlnoRpppponljgc?^YASPME>7p0*"D b3c.cdeesef9fgfh9ijWkm n nopqq"pomkhea^c[ WU{S'Q.NLKBJ[IrILI6IJ KBLOcRUdX\`cfj#mfprtvv vwx"xbwwvut&r[omjg1cS_[XTQVNKIGGG{HuILJNQTuW/Y\[_adgi~krmrnp\qqqq oenkchdZ`ZUZOHzA{:3,%U\H0 g+h3hijajk(kkl?lm}nso^pp~pq.q%qomjgd_`\XUBQNL~JH/F?DCnBLAAxABCQDGJQMQYUlYc]iameKi?lprtv0wowxww.vu.sRq mjg1cF^ZdVQMJHE CAAH@ABEGdJaMZPaS-UX[_buehk^moqmmn<;::m::b<;G;:;No@C>F IKNQxT~W[_fc'filo$qrsfrqpIolieb]aXSM`F?s70(!K kalVmEn&noqop1pypqDr*rs.rrrsqp8nyk3gb^]YUPL5HOD[A}?%=x;H9T76@44a3404S5}69i;>B'FoJPUZZ`GeAjJnZrctwwxwyvutr6ojxf2a[UPJ{Do?;z96P4343458:0T0/0@0D12458;?CIOvU[agZl3qt"vwx;wvuxtqnie _VYYRLFP?:?52/.-.J.k/0357Z9m;>MACFIuM@Q}V[`ei2mor'rrqqJonakiofdC`\WHQJCR;o3+$m)nnopq3qrrsIttuut7sr|pmi|dd^XRMtGC>:;6s4+2^1U/.R-,,/,Z,,,,-x/0t248g6s/)un[o%ppqr=rs!stuFuuGtsqnkfGa+ZSLFb@;'620/$,7*))A(H''(7))***I* *O*+'+, .]1,6DaKRR8X^cUhkno oojo}nmll)kJj g7dF_ZTNgmCr9t"uttmrqolhe`+[TMF>83L/,j*k(''a'''('''-&'')+/.2|7rEM SZq_eoi7lnoromoVn{mll(k igeqb?^ZVQNMldlmmnOnoo-o-oonlCj#fmbN\W0PIB<6N1 -T)k&$\#!!!!D!!"#%N&(O)*+, ,+6*3)''(!+/6=FNNV_"elUorsltsPrqbom(k gd_iYRjKD?;k7644333321.?+d(&$# ##/$&*I-39@H/OhVp\bgckmoop$oVnzmkllkiogecH`%\YVkkl2lmnn%nCn:nn:mjgwc'^SX%RbKD=61,){&#!  !:"n#%\'(*+--,+b**('^'!')-i3:yBJR[dbmi+m/pqrr{rqpomjh%cH]VOhI%C@ opApp"o6nmllkjirgfca[_8]hkkklmCmmmmn/mUkhe`ZT2N"G@82A-R(%" [&a "(#%')+-.#--+*%(&&B%'*n05=EMVq]eimoApq qqq_pionl(gb\U`OYIF@B@w>l> >P>?^>;73~/C+(&Z%5$&$%F')-2q9?GNWUr\bhl=ofpAqJpon{mmlkjihgexd)c,kVkUkltmMmmnnnFmkhdf^XcQ3JDG<5/*~&#!(.G!"$&)r+.5/00A/.=-+)(( )_+/4;BJS Zaffjlnop}pppponkg=a ZU#PLkHFDeCCoCCA?x;)61-c*M'T%$$%"&(E+/5;C8JQY1_fFjnpqqPpo)nnJmlkjihg_f|ejjk)lmm{mnnnljgb\VUfMGS@9+2?+'#" EVr R!$&(+t.302|3332~10{.-,-2-1w5;B`IQX_jd6hk2mnop pypq\qCq8nk=e_Z8URENLJIHHtGECI>94d/G+((&%%%&Y'),28?G6/*&#X" ^P B!#u%(I+&.\1468A89887065 3346:0?EuL RY2_Kch3jm>nLo[ooopppnkf`[WTYQPNLKK JGEF@;6H0,s('E%%%&m&(+l0|5=6D}L.SZb>h>mdorirrtq:pp=onmlkjiiCiiiijllm"nCnncl5jDe`XGPHA; 3-(%$"!!  !}#,%.(*-1w58:<=>==<<*;4999g;>yCtH+MSYy_cgjflmooHobo$oPoomDje`p[ VTRQP@ON2M+L&IGAB=8/2G-)(&n&@&&&(e*2.3`:rAIPX`+florssrrfqqlpoQmmlKk)jjHhhhj)klom no#olj}eh_cWROG@f9x2,D'&$""4!!!$!!/"0"$&),0K4L8G;>@ABB]BQAAE@s?9>>@CGKPU[ `$dMhCjmAnfooonndmxljgcV]XXSQOORN7MILKJHFBc=82.D*j(&&&0&&')C,17>FMUt]dknrt tt#ssBrrQaNLLsKJJFI{HGKEFA=83I.*) 'K&%%%&'*.T4o;#CFJRZbi mr8tuuttQt=srSponm`l~lffgi~kHltmoppn(kf=_W|OG?8!0+V&$#l##t###$$$%'M)',D/38#p;562<.*('&r%a%$%w&.(+1C7?GOoW_fikpsAu(utt`ttrqSpNoknm+lffgifkPln pqqolzf`TWP5HC?8M0+'.%$b$$$%%u%&@&(*,0C48=`AEHK?LMNNONNQNeNPSUXW[M^b~==:8i40-** (I&&$$j#$l$&(.4ATZTU5UVX[]_ad)gj:lo/prrsssrqon6kFh+b\UO4IEmB@><;q:M9_8c641.+('i&0%$##}##%4&+19AIQYaugmpssssessrqponmmfgh5ikAln pqqnkk0e^+UNkF>I6/+o'&%&e&d&&'P'S'(H)*-v0487;?DIHLP?S UX[!]V_Zabcf:i!kclmnprtbuvvvvv$utsq=okh%b\U.MGAQ=:74311)00.,*q(f&%%.$##"""O#)#'-e5=MEMU]d~knrrkrzqr`rqpptpDoo&ngghijkmDopOo~kf_X~PcIA81+5'%$$^$%%X%&g&z&'S(),/$36$9=BFJNsQTW[9^Hacfilo4pqrsu|vwgwwwwv$utsq[nkgNa\+U MF@.;751/.N--z-,#*('%%($## "N!!!h""&>+S3m;)CKS[bimqRqqqqqqZppdpp*oogghijkloMo}n.i1dC]UMxF>{5.(%#""##1#$$$%T%'(((*7,0F3629=B)FPJMQTXx\ _tbei3lo8qDrestv vwxwuww\vuu t5s]q]okVgbz]OVOHB/=$852$/-,, +*)l'&l%8$u##8"E!~ !L!%)19BJOROZahm;pq$qp\pqKppppzplpopgghijklnnlgb%ZRJC5;3,&3#!8! !^!k!"G"#7#$A%Z&6'*,/Y2B5k9]=uAEIMRVKZ`^%aedhloSX%\I`dgk$mp1qs tulvfwvvvXvuu,tvsr\q=nl'gc]WQ\JD?(:63V/-+*)(''%$m#j"!! c ) K#s(/7[?HPAX_g9kop%p=ocooo9nnopp{q e2eghXikclnmkxe4_.W3OF>7f.(#" Nz Q !"#w$&')s+-04%8=BaGLQVq[$_fcg/jalopr!s$tquOuv v#uunttZss?rsqpDn+jnfa\VyP IC?(::6E2T/,+P)('%$P#V"y!! k ; U#e'/6?OGOX _FfkSo oonoo4nnmnLoBopLpa[bKdGf7hUjwknimk!d^eVBNE=6,-'!  @x7  !`"l#w$&'n(*f, .1Z5~9?E5JP'UZ0^cgfik{mopqrsVst9ttuts>rrqqYq1pnkhd[`%ZU NIC>.95 1.~,W*g)';%$j#""!J C < #(//6?4GqOW_+fkBo oonnnmmMmno$opk]^a3cfiIk#mm4jc]ULLDbG,OyW^fk=o oonnnmlmnnooUX"[_ic#fillijEc]tU/LDKa840&-*)' %$w#""!; 9 2  #($/6>GOW_ fko`opoonmXlqlmZmnnN Q5UZ_Scfk9kick]JTLD<4z,% PY{t: !r"2"#$&6'R(T)e*W*+-04R9?-EKQZW2\2a7dgi jkQlemm\mbmmmn nBn mkll!llcllak8igeb_YT5MF@:61-*)!'%$^#"!   #(/w6q>G"OW_(fkopGpooknmJl8l5lmmlnDHNbT\Z]_ciCjic^$UMER=65-E&!$E !"f#;#$&'2($(* *+2,-i038>GDJPV\ ad]g9hj jkll*kllSl{lmFmollJkklullkjthg=da\VPI]B<728.c+)#&%m$?#"!!   #(/6y>GMOX)_cgMlfp2pq p onlkMk kkokl*<@G@NSUx[`gHiid_RW7.(h"<n5[ c!N"B#6$!$%'"(V)#)*++,-0d38j=hCIPGV[`dfgi6ijkjjjkkl lmBllulXlm m=m@likLihfd(_!YRKEO>93P/ +=(&|%$ #""!r! F #(L/6s>GZPXQ_glp|pqapjonAljAijiij39@tHqPW]e'hoiea=YlRIA91+"$!M !4"!#$% %&(<)}*A*+~,-,^- -0b3L8 GPQX_glpcp}q&poligffeee+I19BKTZcgYj(fc[TLD<4-&"_ "#$%$&(&')]*+u+,+,z,-$-/27[;AGNnU_[V`dUgRhriijjj7iijjklmmmnJnooon&e'[(,)*-+K,\,,,,-I-/165:n@%ELTZ`dhrik\kkknjjij j}kzlmn>noLopppolnlkj%hc^RWmPJ@D>371,>)'&&%%$~##,"m6m/($!!: !!##$%&'v(()D)*~**+r,.:15d;CA(GN TS[`f:iWkl llllm mnDo opA94.+*(@'-%%%9$$9#n"m"!"$) -58y2g/#,]b!+e5@KU]ehjvgd^XPI#A9O2i*%"!A ? !!"#$C%%&'H'(h) )])* +0,A/028!=D{JPW-\bfjk*l1lrmmnHnopdqqOq[qaqr7rrrGqOpro2n3lVjfa[0UN F?9)3.#*'&%%%>$$,#"""$''+08f@PHPWH^5c'hik hf`XXOG?70)&W" |)3>ILS[cgjhf`[oSLC<*5.-;'^"!- d k !"C"#_$L% %%&g''(<()^*:,0)5j:AFLRX_cgikWklmnoxp3pq8quqqrrarrjqponfm2k!i;eH`YS\LDD><8"34-)'&z%%%]$$$#"#2$&).3;CKSoYf_cghdi6fFb[SJA9O0=(!} @&m0;FFPYaQeii=gb]VOGG?8|0*J$"1 s H v !C!x!"~#4##$3$%p&H&'(?*-27=:BsGMSZ<_wdfijqlm4n]oopHppq%qMqqr%qpon_lk!hfXb])VvOHA;6`1,](&&4%%t%$###C$a%)q,17?GOpVd[ad"fffb^SV9MD<;l2)! 1#-8C?MV^chizhd^`mYRJC ;46-'#x!  K X !M!"2"L"#<$9$%&(~+R0 4:#>DIOU[o`Qcfikm!noVpp~pqqqq0qEqfpp nnljifoc_IYSLWE?:^50+O(%%$$$M$#y##%( ,/5P;CKRY4]bVd[fdc_YPH>5q,"  / * 4.>IR[`dfph^ieb\V`NGE?82++ &v#"1 p S !!"_#]$%&(-,16;?E2K Q,V[_cyfilmnopcpppp~pppZpfonljhfSc9`[UMNzHBX<8%3.)&%$##l#$#>"#$'*e.3M9@H_OV\_cpd@db`[PTpJB39/&% U l%/L9DNeW]dgQi]fd_uZRKD=6q/ )%##c! k j * !"#z$&x)-t2$6i;U@wFDLZR%W[`QcgjIlmoSopppVooooomkifd1`V\QVPJ)DF?95N0L,&(&%##N"u"@""R"*#b%=(,\1t6=ELLT:Y_xb^dd^d*`]WOEg u9 %( f)N3l>UHQX`bdh+g:ea]^WPQHA;I4.B(&#"! -Y3kLl w!{"#/$]&)-1u6C;&@FLROW9\` d;gjjal4noooookoqo,nmlig-c`I[VQKE??;:6C1-8)&h$y"!!4!@! !!#&9*.4P:BBIQX:]Zb]d=ecb^ZQI9?U6.$$C<G V,#R-!7BLxTS\afgSgcX`HZTM~F@9534- (%$"9 `e? ( !{"s$Y&P)b,g05":@XF_LJQW\fafe:hk mfnooooooSnmkifc_[BVPK$E~@6;6624.M*'$#!K  5 !a$',07B>FNET\`eef/cua\HV LC}90(]J H  Fr/k&0;FNW]rceg db]YRLEp?,9I2-)L&$}" xjFXsI 1!$"$^&(,Y015W:t@:EKQW]2aehkm6noo0nmmlkhiea]Y8T^OID?:6*21.@+9(c&8#! g "S%)(.4 ;8BJRX$^cfHeeJa^XkPF=~4 +>#: &t h f)4?ItRqY`dug^f8e#aP]XRKBEG?g82-I)q&O$}" -Z/x'c "K$H&(, 05:I?|EHKRQfWv\aDdhgjlmJm{lPkhitgdG`\95Q0-*~(C&$-! wI0!W#h'd+G1:7?GBNU[VaegeFd2` [TPKA7v._%B8 GF/$$ #7-8BL6S[aeffcaZ\WQ]KE?9{3-)'8$U"= ,g'].q @!#%Z'*o.216;6@F-L!R!W\`egjjji@geJb_ZUPKFB}=9M4~0n,*;(&|$# !d ^ !$9&+/54*"Ui +Yn<f |)4~>GPW_dwgffoca-\WtQKnE?93.*(E%~#"M!! !!0!'!*!!"b#%'),d/@3O7:5r1-*'&J%%,%;%%%%&')7*-+/*2{6&;AHNjSY%]bad,e#b`[VGMD{:0'U1 V2|7' )M%/:ClKTy[|bjedge~db`p\VPL GB=9520/k.-t,,-N-v-+,y++ +.+,-/20S2@4g7;|?D7HMRX\adg,ffeUa^7Y!TN(H A;7.2/,*(''(B)* *+Z+,.*00143669=CzI/NSW\`>cbbF^[UNEb;2Y)c!>dx m7ZiFS]( 2??a>v==4=== <;;M;C;<=4=>l?AtDAGJMQkUBYv]aegih|gb^YSUM0FAv<8L43c11P0113/467T89:<`>P@BEJ=NqRV0Y]`_bbA`]5ZUpOF=z3+ #W,O { oTSo8- A#,6o?$FOSV^mbeQddccQaa^ZW SPN;KIHkGGFF?EEEEDCCD9DEaEF)G4HKMPSVZH]ae;876667N889;`=>@A7BCF#HMKUNRlUX\]_@bcca,^YVO{G=4+/"=< W!*s??_E< P7$..7?GGN#V\accc;cc5b`_\YWU4SAQPPOOOtOKONmMMLnLKLoLM>MMNOR-TWaY\}_HbLehOkllk?iZeaaH\6WYRsMvI)DB%?>=>>>?A~C)DFH*I@JwKN*PSnVJY[}]`bdca]DYT{NF=3+##s  "?K? :K6? D%T.7?_FvNU]a%ccdxdkddpc`^h\yZZ"YdY XXXXXWVUTTTTTUGUkVEW}Y[]_adfghkmmmlVjg'c_(ZVRNK$HF7EJDEE5F/GGI JLNP@QRTVX[]S_b ceeecbB_YUqNF=3*" 9 YUQsvQ cnz! <%.7->~ELTZ_abbd de4d]cat`o`,``L`!``[``_^]R\2[[J[i[Y[[\]_vabceAfhWj1kmmDmslUk0hfb_<[XWU=R OMLKLRLMNPRTyV)WXZ[]^s_acDeVffhdEa]XYSN0E^h^S^L]]p\G[XVSPMJHFEDE0E F GnILKOQT(V=X Z\^ _e`g`````_z^]]\[ZXWTuQNKHFPBy>7x0L(!D$ k[mB imO?J7&  7&"n&N)j,0/48AC EfGIKM>MNNO+NNMLKIGEXB@6><:851D+}% 2? Tpy on_e^WFEOoc} 2C $'+H.13\46899:<=> >q>>$=<< :86P30m-=*K'r%d#Y"o!" "M#%;'*b-I024739(  ;+ E-|a#' )+u,-k../02233]3+2P10 .f+(%"<|f!$O&)B+.]1,4'68:8;U;e;:98 631/. ,+*)1&7"  # k@+$j*"lMpxN<\CGERXS>0 .jg 4I!g "#W##$p%4&&'c'm'o&&q%)#!&x*M\l\!@#&),n./00Q0./-,*D(b&%D$"! vD V  +^oQcH1>i7=@Yf^@+ w0v`D : ,jY\v'h+qrw#  $ V k  9C h"$N$%%,$#"!i f( CA6&pw5m7"-X|/BDHB9-,~2t*:R C #4/6JGI F iF9B)t A $m ? u( N ]<E RzNpKY"*Vlnn#?C4%-m#;:z:N p  [ i d   D=*.YE+ C Ytc :GeV(ra~K_:S.,5JSPN ):9& 3w:5G}5ttboAnl ! < [ b4n>w!*NccJN"51 ^B><DOOB %:=2 _}c (#|\\!MkM a&mW>44;0-3Tw34S A9a&].?nnUOPyxe\KCNP8 $;F5  ,QL z;&\r&8m?27]z #vM13GH1" 1EF;CJO@K}t^PHHKHG-/FbR"X^DB:PtvD ,FD .0!4opG)&GgbA' Z-R<{oaXTVXVO?, AnycR<@o}yrb_aNTy\1 %0 +]xcJMTJ6!!./)>@Q$zlWIBGRYUID:- @[X@73$+Lr~ua_^zyY6  )   (/-@u~^?,(#7P`_TH9W*02veN?6AWkoef]I/-/.:>.#0DCBK_nfdx74Z9( 0 &;. +679E\uyZK@+")=FPcoej*+#whZNJEPliZF- "4:9BC3*7LLO`|}*5k@  .)/7.4Xg_MG_{xp\;#'!.S~"1"we[]fejaB& (268DLE>EQQ[y wg_XC)   *   !%)0.# RxjRZnupk[?/7E83Ei.%umv~yxW9%'4:71-2:99@NYkfH7    %"  **#%&& 3d}c\\\[YQ?:NbXGDXqsZH@8:@CA7+$%-06<KbzxT@-""   -pjb gAIC1Dxs=% !Q"M"`"2 hZd ( f      " V   g j I $P 7EeD7 W+|E    yAW>jI7zji%8%( `!4  +D^LG  U   # * = U } y  S c d g H - UX',m#Rx#B CL4>; y=T[(% t%1^0#<- 86C>,   f &  n  " : M k 3 , 0   m + # e c "  R ^CFF#~"!VnLbtoR+U Q0^Va]tY>H}5W~LV #   > w  M s s H   f m Q  P   c<!!}= dp{$ nHBfb7AK( !V Icbts7` R  " M x  3 ] t w s T $ v m  e  5  , a E  ,vR9RLA-a!z.u9nr_WQ,u?V?!m X^BD !m> r m V  R ^ W :c & K g { N #    F m { j ` =  2 | z ; ; & j;EK|&OI.gXTOdAs:Kx ; f n N ' w H 1 %  !s@2 =Qe ;  Z | _ N "  ' X w { n i w @  # #TqT,X6l4JeVq7\HIpg5 L - | Z _B,7Tsnl$ ZR 5UZJ|{H 7c 4 j B n / e i4q&=|eg=Ig o - ByMda Z b s X S  tq )Y||P\^F7KPRRH4.9Zt8o'Ffc4Nu  ) H X s 4 f < k;G=t/?pQV  A B b fEt'6GswsG/2&WqoiU>5:P_v14~P<i Sdjl  O 0   ? o  U 4g"/ m  & y < * A _ 0 jqWL2`nNr)r!FQ=# &'/Gj.]5_:$ " B ^  ` v W e 1  = j $ 8 J     + K _ < M   V 9B_vM\y.Rm>  @j(Ghn]MVvm   B}] T 7 - d [ T S U  - {  * 0 48XLGg;1F\FGQK&|kR2&i'!<t&E%q  C A !  '  S ^ o a @ 1 H ` #  O y [ $piS>@G!-<#o=h9Q-l|aBymZD( (X^!e,py  a0xT t  l s^Pg14eB)G4Ge1xyD0lr[3tM) u*f&lSZvw5|} rs-H K _ 5v{ YEW+6L'@"Jo' \vON;MD 4  - F &  h *Xaro ^ufnHR\K6=1R|<*Vt8WliM# Z0T3QNyr~TOCLug+< ? = f  Jl,C yyKJDS# xYQ} 1~Zo}fICnw3Ae`y5r`Y%D  =k=s99Jew!qJ3 o  I y Y ' 0fEOD/?lwSr=^GdBm*EV[a&1<dn ',@Yh(u # $ z M Jp-mmN-!p#L%&'((t(O''&%"#"! { _ |^~J q&v # V;5~2Z=M Smbr=(=h\fyh=uI  *F8If d`yoA  !6" "$O%'L(*,\./12w3/33t321G07/..,+***d*5)('&%f#"!ung u EC3(3#kY<[gW&.x zUfn4O %^Y!#u%(&'()*+-.L/1+235T68;9:L?M@pAC9DFGGGGuFFDCBA?>>==x<<<;v:|9w8s7655>432l0/-Z+*(}&$"{%%- ^ ! 5B1bHRjQ`YUj#9Iw j QA"&$'5*,/234857B8:<>T?ABBCDEdF7G(H IMJLNeP@R-SvT|TTT0SRkQWONgLKJJvJIaHgGiF*DCBLAU@d??F>=<;U975t3L0.,F)&"U)" | M{j|t*8 Jt.^frlq. D7`] %4)H,n/148;= >?AcCUEGIJL7LM~MN*NOwPQS.TWY[(]<^_``U__/^][ZRXWVVSUU.T'S QP4NMKJIIHHG^FEtCA{>CWEGI2JLbNPSTVWRXX{XY0YZ\],^`Abceg:hZiZiii h]gPfpeWdba``c`__^[]C[ZcXWV}UlT^SvRQQLPOMKHoEB8>:763+.)$o 3c^"P A*1UeNHjE~R.   $ (U-!26:>AEJHpq+qTq}qXq.pp6oo(nmmlSkkokck`knkk@jjiihgfed3cba{``_][.X+TP`LGCI>:%4.(#N( l #> : w $ j g ~  %D*/409}>CuGLYP^TWZ\p^`@accdue@fTghijkhlllmvn no;opQpqKqrrPrQrRr3r$qqq?ppp+onngmmmmmmmLlllil;kk:jSiehbgpfeedDc a_]kYUQGLH!C>93-(#V KZ~/(9RhxF %G*]/4/9?VDINRpVZ^I`bcegfghphhijklmnIoooppQpq3qrrwrss}sttt3t=t]tUt(ssshsrrqvppppppp;oooo[nnemmll'kk3jji2hge1b$_[VRMHC>83-X( # H >j; '8="G&3+&/49>DXIOTSW[2_0bJdf:g.ghigiiiQiWijklmn9ooop-pqqrUrs$snst/tuuKuuvvvuuuYutsszsrrrrrqlppRoo|nmm:llllllWl kk(j)hfda^rZ;VQMBHC>%892C,'" qn ` C 2M''n&%\$M#m#$H&e(~,F05:9? CIUOToYI]`dgikdkkklWlUkkjUj9jlk3klmdn!o opqqrstLtuuLuuvivww6wawwwwwww7vvRuuuCuCu+tt&s]rqq'pgoxnUmallollmmm/m(mAllFjigefb'^ZVRgN%HC3<71B+%z X@\8l111/..-./13D7;+?DHM^R}W\`0ckfilqmn~n)n/mmlkjDi@hhhiijEk7lMmnp#qrt>u#uv-vzvwwewwwwxxPxxxxxox"wwnw'vvsvDuuftsrfqponNlkjjRj3jjkkkllllkyj9igda^gZoVR\MyGA;50)"m  - =" U<<-;S:;9N8979;>AEIMQV\[_]bfpiDlmnpqFqqppo)mlj]hgfffkfg707("L  lSOOOSNN:MNVNPRUXW[)^a-dQgiWk8m}oApqvr"qqpoAmZksiZgqejc `^]]5]]^`4bgdgjblo`q)rtu+uv{vw.wWwrwywwwwx wwwEwvv=u_t\rq!o"lkidhfeadcTbbc>cdHdegMhjlmmnno[oPoann\lkbhf}b_ YTNIB;3@,%Y @bWQWWWWWWWX2Y[s]_qad!fhjl(mtop ppopuonljhnf4db _]IZXXWXWWXY[]`cfieknoqstuvw+wwwx#xUx^xix"wwveujtsqjoljgSdb`_4]\\B[\;]^__:`Qacfe_gikman9ooyooooMnlkh/ega?\W7R>LAE>(60))#g= P bQ^__`2`<`.`acbce*f\giklmnoppponmFkohf-cr`^\pZ)W`USR9QQQRSBTVY\`,cMf=i;knps"tuvwmwx>x~xxxxxki!f`c'`](ZCWUPSP`N4LaKKK+KKwKMNQTXa[_bfilojqsuvwKxx|xxxxxUwKvsqnkgc_[3X UeSnQON8MMXMNPpRTUXiZ]a d+g&ikmuo.pOqnqrdqq6onol4iea\X RKD>w70,(!f4 gij5k kkl=lmmmnro*op?pjpWpprp|ommk%he>a^4ZWT Q NiL8IGEDD,D CCCEWGJ3MEPT3W[_cgk+nqs2uHvwx*xxxxwvbtqnjfb]8XTPNLVJ1HGxG FlFGdHJwLNQyTOWZ^iae$hDjmSopqssFrqpo_mjgc_Z{U'NHAw:2=*9"X ikNl|mwmnwnoKooopKpq7q-q%pppomkgdy`|\XTQe==c<<= >_@CEIKLgPTX]Naf-impsuw'wxExxwKvurokgb\\W|RJLI@FBDBA@@r?@F@B!CaEWGHJLPlSW Z^GbeshknoqrrqqWpo m jgOd.`[VQ(JpC;3+$ Yu Ekm*nxop5pqEqqqqrVrrrfr;qqPp&o%litd`[WoSNJFB@*><]:8776766678;>FADzHILQW=\afk5nrtvwx/wwvvUtCqmNi8c^SXQLEA> ;98s653222222E2357:=6@E6KQ2W]chslqitHvwoxwwuv{usplDgb[TNG@;75e3:22o3 3a4:53679:6#.%tmnpqqrs(sst5tytuttsrqnLkgFb([V.PKE@<75 32H0/..D.T......0 1359y=D^KR1X_1ejp`svwUwwRvutrojfV`YHQIB;61%.++]++,-/02 34628f;x>eADwHKQ%V\{aweeilorpqqpp onpm0kjhfa]7VP"G?7S.(!Cn_oqpqkrrsJsttuuu`tss4qho=kgb\V

M\ۑds%XjbK5&B{ >g>[%,l3w];uѷc` erDo]%7O6kTWg~B|Sȼ ݷB#)Wk#Y5TA*3dg^M lLL 9fku6}3L>=*#-fHm/~x&X ~9.'#glibʭ/YWTiCK5r3!rޘw&f_IsokhfcY'L<1Pj[r60XjT[wM/}O\0j`$R$(m7[(̅l"6QR?q:8I"5˱+a{mbr.&;XMGǫWN( T ef;z"uOG2.AȢd  Q کҾ^Uհf|LOmh?Zij62h*SS嗔ar']dۡ#keOՕ.WVF TIlYdC v_ *!Af5`RCD3"xJ&0=I&,M#oSM"ո/.4۰$*qi;'0Y:mpmmc0iTcz'7"t}I?`9ȯ' bsgQB?8o&C _x~; Q9J*Ygʘtc51k P/4cڮ"GM青8 B 01Wd&~̙55Hƈcz h6wW)J 0&l zI5xIRߤJA_VG@'y~;4w&Ȏ8P~ů 6N/ 6m4kul$7YklLmi{-^o$4V/~`7ڏZYB av _Egx"J=°$]mw7 9bf̻nmG" TS:{D4@n8f낽>Ry4ѣ{l8Cv=o%S6ϒ%埖\.(2Y1zܷL/6lُ,dqO3lcr3EvsRhQy#yw@j^B}Q`W%X}V%kn L XVI&B4 NJn8Cs9@ 6QVNQdSh \ U=T445t f2 sԘ`_'S P6q ;;8e*_L ͬuQN3q\v>W`TwQ0>O);J@KdQ Yx59BO˰Xr;J<&=Kx73L!YDatbL났fKs: I\b)gsK9/;L+&|{[ `=.OXGM'C2cpJLC=gjwmӉ]ԤNy *}S74"9޿);2TօU9|Ǽ{MS<ɎW1]$m7q=ԕ9KsfH29s;doiUyM|wQOBf!Ze$]AEQy֔Twĩ/mEm~*?xm#[n|Lp׵S#O~%A^ҾG|űp[Wc\G1'T}:7+d=>Ӿ.zoٛXbݝg=&Z㽥mw:3P[}3*oczWmX+,.py R)J86჉B|/[A)x{ u&( Y, RLI*|:Y@/.W vr=l$&|E%_k\0X sܢ¸Cu̮ >@w]80`KRS>}@wQ*FnfR\zx5#W؏ُ8>Н=nz&9փir r2-r <&/vQudwd{Q%6JWVeޢgٚ@ ~ٻ^Wfg4.O8t4}s@vTmO(:.шkrٚ]Iܲ1hgcOG 6d[b[y^o/XJ6v8_8ji-$TM0E]Mp\!fu'_L knmGfR?6U^n OmLպXddgOP;[]grUfd*0RZ*7`!*e*^op05ptgruw[ޘSarr HglfCspit? {ё}*/*i*-ah4?zfr*oZYkBt'H{}s4͆ӚZah}T'j+j#zz 9eYm3m!Vb챳D%y5 u;BC&q jrVPui{u<:Rn*S/\!וΩ lVw8q#Ԉc<2tsr&^gN6iyRLJCg2ېׂj?pE ڒuu&"tBh =5Ӱ9p 6`̳<-l w|#1^kO1`B"mNjX4ijҨe ?WЬ=(-WXX$nAyI9yZ>I"lq}]_f B%B'#+$ϙ3/+)k`@:1#0<W5H^Yvpkϖ xC%{o٧ F ʧ>dJvy͞kIPHSVE{Q{L+G`ƶF<;8W);|W(;'C pv!`ژkoLX74[niB ~Ek{5K?z'ey?5^!x M5//;QX>*ve{bG!HT$EHW qrj_qn y0ivC <j W~V{Pf_" GAvP[\ Mѽ҅((p|9eCts~463> Eyu u0h!eligޏ@Eg閭6#8W-W<[̫ܹrLT yBr u={Gss'XM+zB;eO> 68C\af/XyEl sĩ| 0^c\z9 =[M}")FE?`/ PP#x ."ŵs 'uB[>9BP&l5Hi ?徳8@!X+R=W졿3l!A,ax$ʿϼ-`k?!pq,P]~lBKAYע}Kί(3//ُ2TY! c}g}R6%)7AǍ2EW-$oLnijnE_o%ƌhI|_!h[ʞNWCO|o |wwE$ͮA5un%F .h;b3߸"kӕħ0]KͰ(2γl}@rbyْqR=A_dh;:Gۍ:C etgq(R@HYyefv7$!$iq(]Z"%]R3ynqul>wl왎ğLoX{b!ӆI!xr}k=)@z1ٕyߒkW  x(WWg;n |">r=4WUQ $ =wr0(2;K95CMPS }–vFaʈ=J +J588c5J?'+K ӊzͪ(2+±E}f4^,ga'۟;7Y6 {:Mwer:7"N;eOh H(GV($IaV7z7LJ zy3Z{$1ǨS&hc+ǧ6;L4%ɵ LU?DN!.Ç92ۚ1?x R*90=j*'Imš?C"LᅷjtՇ%e1* mJw!dK 9 V0.bzߺ K WON=dW`L۸Eq0œ徺^a^.5Z,+hPrBu3\AХ{ylIe[.M@̄*6h{/g e gs3hG̴c?'qr p,r'~$N$9?z:;\οm}>J_caCξ*8.1۶;""ź?PG{\{oC ~7н6è\)$ N+Q+>RׂHj#GxVm'4`'h$3qڤ ij*җ]3tWG&R4H(t{%Sh"aÆ!o Z>KC]cLo  ޠzݧ/] ŦߡAx>8<м@-cFpKJ烈p쨆IU$ p })])-2gz9!$ {Gщe}k;V&c]^9h}1ưR;OB @jSTu h_{4>uM|ƞ,Ǫ{Quc'FTY4slTMo<ض,wQ4J P/pVp'R[j}:.'K]EޛE%15|i?>B)@شKь)G zw3Λ bS⻍+@{Z[sK\5; U29Rz'n2.`*j{!jC-E]4 $6H}`bkcOp﹏%'i:hefsD)?Dlrq͵̵.;UY{Gg./KWJVvR$X]H68-Ü#8CajfG=F_gdq>j3zSF"MHݔG; Z!VkP>> .Kz\=oxVSr\j@/*p[QF[.l'J(-vfl,lW[&4GryQR jf0J:MF[f}vZGB z<:t BZ-FPn4.T C=gZ6 Sh ?TT=D* x=9xw``P+4nZBjmrο2"N#S=GdUM 6z>MmM3O>s`^BX,tn߀mԋoclo l7үyvYdf ~W#F{;o pND*h30;PctT؃O8DD]B9Bpϣ9Gnd"%SZWtCoUGw/߷[d␸ێl gs\MH"z<Pnbj?l7$-)2ݚTI˥l؅b:5Vi9|/s %?vX.eP넊p&UThw* xn]Jy<^}^; ZM)\\$<u GUϬQoBpߥ&J5 cPOjk8Wӌ24oq*ڨ`2l[p#Reb3G],R2}Xa7o` \նj߁ 65&.AohUډBĹ σRw33sQaJ;u,Ng 5&N=w6'"pց3%WMu>f͘y2qFAf~&%׌6\?t^\[h,/œtd-Dο=8;<8lgsP%Qrߠ+/x˟4yt =hN `fz[!n5Y]fp* jDžvn^cYSI E_sklw lPOL%=s(g!>*DSmcx =Z!0;L?6AҖ9~Cg @^KOBh 4EY/܉g1jȏ>Zj1F+#7 ӾDPI]DH8ޭLn=ݓ6"1˝.׻[{z{to[65ݲ:v@JH`N 8J@/03;hOg73FVZN^Ac}kq)Q4eSҷ!7Rf0BU%ZBg9]mh,H[ZzhZ2x ϩpppqݑ8 >5AgP?ʠh3}ZĈ}jfNPkė.sMZMЋXk}{}:ũj}\5]A@)|]/[Fg}1JG=Bo74?x;JE[QSt\Q"t՘dCTy.CgpI$K[b/حd]nt~h鶦q9^b˘DNUs=k5y3"36e9]əs(wլ!fPnmK~#ZpA r\c p?$tn80amOO~V_o4Z!iq):"m>=3IW{~n+Kxqp]q 4`?OR)zfaB\|%<"#J-S3rvbJlIɑCRV$c@=me͔)3ϻ9#n4}39FZngG4C]m0v6otF%XTԢi796qu\!!f~yWmJ!$l$&}]SGg;'ki :Ca~'mf:ݜBfyu~ h+ՕN0uowy|UORo~v1{^墅R1Fq70[b?Fz]Mp>$r2l"8>#9m:Ň;^r{!clj-SӁ#c#E(v&n3]]N&1;\xH$+{5MAжY=F).XtfhZS;]>[S^5QO+޳v$.HRxWįMB3th?f2"M~vcr0ezy ed[Cj/as)$J~-_哸zW BE?EOOU<<>"] $R LxDߠv'&L)-*><{jN\_2s Σ3ڸ+]35fq9]?'~71uL\3wܖ`l[Rɽ*ȹY%!F^N+j(nKJzgFoWY˄Gbc{"wR{ܡ39o3slɓ ځ; #PK3-Bߛ/!>φu|=Hs(T eP?Cc1sͲPGnT6VS)̎Wgj7KL5z;}r~ؖg}ld /'8)ݑ;QϔHm<{ed,6PYRi|^ƊY^H7o=z`W U)һ*ByWjO:R{vbjFRZkJ=PC偕fGR^c1|툅va8v<##,{N7*!Up(GqK]^54x=jc衛G9]keR al[@R%!~6 2_Ձ`Z[zwQl&ڀh5B~=YqQRG[a=Kw|L*f} i~MPBɖ3KqK>\$ 2Nmq#|[DLx`q0%SKc7;zM>!h6mKTJ dsosV^2=S?#lH'TNO|Ou8mM(>f]\9Z?o/$F4ao=,[vFV޸E H#*n3{qh@:n1=I**O$=C 7$ ZBU"Sg"v; zZm|?rq([Aw^țT]6_xlhhׂThDk:_ȓH; —.VɕBuopfZhsFi+Q7:f+]J}uܳ;}ɼ`HK^ōiIdѪiXXHqTK"UBClQk C0:WjuA"Q9삿7ߛ JM{-;a~t[ _,T $Sz ,rfT_rIHP*,|+ s>gA𲵨^n/,Q˭Ֆ>P 4@GBN3]_FSUsjlOo%$OvrH5su< ;!>@P6QO)7ɛWQzkp"%"ZcTc161Xa7C5AO4n= DP$PQ ȫRZjf^Y>((\*T/]ZL~{FLJC|*l<]ǰDdBlĝfҧdP:RG{N`Qͬ/yYѦ };VT[ƼHG[c)_+B ǫ0Wh$C. 7.' B(KV~֕gojmo^F'=޻/tF4.U\"*.KGSG\g;h{3o;9uBCaLTUkmw!exgۆ@(ZxIH lmvvٍAR@(h)N[K!;̏9f㾯~T+3:uSjիPl&9Di-%:/q ɢ-# \6 :P]ԆDhk=4SFIn|s)π+4 } ,osz&ĺ+a`XX#bk#϶t"$(# 5t 7}b3<^%BNԟnʊEㆺ{~|ϟ$$==ir^ٮOI=%9ojJY-C\9ˬ;u?l|˰ klLFf3[%,Av ٤?s\6lPӇ0S-&O1{fe3t3zM` O B[>uWʨ̘,UZ-pO+._~ұE\QDSkw;PԨK*j.l'|U82BG1Qxyp8 ^*J !@XbT'ti9prf { o_ZslA 4TG.A+Dp7]b3y:ؕ⤶a?StO9--G @"GoE\998rc׼PF 5JDF{zGwб`8{QiOu;AÚrG>{YI|hi˼RjV ㍉umbDJ&F1Yk5Yzݴ<ܑd/R`{;bםq7b  ÕX=JBKN{-C;VVjmg%Iád)YFLKSHcRE~dӘ>&u:v"I8f{JBU/`,L!Z$Jv71ncj>b~bb|xĖqf*ԏ*7ts{4-I?e”arXJ}9[sw7ۑ_BEY>L{<gg{L"l 5`/FpL!-sF3|c:z0l=_r9^ Z4!Y6&YK_ \̧j#KFvy3:;׌[2_v_~Y ~M2Jϧ%tsf@:3g߸Ǹ m0%OvEцЛc ˒w+_P֡\fw #Jz}3- [vDݥf-Nӵ\_6AG :f[=Jh# .K t!;:'+c24@\"P񕢋IJG46GO@GMB)X5=Ǘx{&z{7~)W3}[(L.% ;E(]%sg,o; ;EDwzZD|V@Зhݠ.B"J^IuCa &&S٢VH_;p*jM}Kd0CWp%LgLu@ wPL㥚rNa6<)5[1pWI?&o;.pw|3<ļ[Lj TOgɬuhG4,Wԩԥjwgg0EH <ԏo78-xUV\_& (܇)U\Gel)ֺ>AM Uqsۮ.+uٗ7zY݇{~s9j[7Zp<.tdJ'w~rx25 w'JzIm5? z]C^:O<'*\lM+=X'<RxitL~I^{I 'f<IFQڛ{bLV˺޸ =@;Wz^wӆo^v!s֌!i?%MA|SJTϪvjZә= 8$юh]j&R'bY`L@wHnZ1]/c-qE| ^S/fHn㥥`?[T:[21dATԊ􍾏~?Y QLwq[]a8GxCQqüƋN*Wed6y'ʉZ]]nPG_ZV[.afðqYȗ"dfT.xUHLz@PKp.h U e4":+' .o&d_4e(Cbef xnc-N`齔`I*x F t a38 n;$Fy'.磄gKޱ%0 UbLETP7FVC1(VKo=ʺcEI~௨N5#I}5VL%T&qҗ(ߞo67qt7lX|dZh`h6}wwK #lG쇸R{h+ؿW;Mi=lh:mŒJ?E2#"6` xi|uA0U@8 p4 xY E(LTN)L-T,L?5՛)HJ5`wfRC۪G3rw5trvHTcO$c-I mJSO7{@nô~WR7>zL4hӫAqº!{X"ooEpe ΰ+Zz#=;\E:k' [ 9XnI8qB*) Dl9>`>mUuzo,$ =R#EmH q+dNְA?JZhdpVk".Bq *..i |BcV'~F{_VgF;"Uغzp^W4YNbTj#]Qh>C).+;}Zrrkœ%iKohfP:A]CM <"A^:(w lGn fu㉝@4 '[A B B ņBmq yAji3%N8 ÏepRp ,a5 fHr"(yZWJ -ʒHff8uIV*_¤rsu+q9SCǑAm#Z`RaL2Uړxz| 0w\@@ udxYz\;X\ ]:nemc5M7-l'y$3Jgo=Qh/f6Nz:;zPIƫoѺO7h u'bU+KG( D΁~m@G`0EO`vbތP _ӀQy 7 @-8N{DilVzk9 D  OHWRq9We^'qzqZTތaI.TLZpuMƈ]f{ }[G ܿS_Nz^"qZ_%F^'awb #;,D'mik`8Zgel9`o/oV\uvƫqI&$,EYzI ]W+g-T .8B\/9,p[F@,ttOS/YCˎHlo{g.GUn!)8HFeD:~)8•(Dz76:ISZQ\)BERƒģl 'p\,Ǣ mPR?D{i?xkD*'QKӬ78h`s0Bol&wI-jo3_[kϪLXt?1~0߲Av83- p-hKV3|UJ)W`r|>h_(܋,uDkK&H9TI6je5u uu[L]}nG(-MqìYv*t s_S%E0۲ýBh'j8Q?%SˡUhK' >gVڕ4CjtD} MfѬ $ ߍe P#芶 y MX0l{rFֶk(TT^Oj|ƨ;3P)j[!̮I!ZgaXZ-zմxf 8'#oƽnhgh<ҐJ|HNhe'^DkIT%Og5 4efNꝚߢ]}iߥF\%C "o0jSOvJ\C+imm0ϬG?eé#gFBlWJoc\-u:(zW|ReE“V=dPƨφFp؟ɵS|T$-"?.+[ɥeґ`61{U`!sX +B\EFjo>C]OS '2ݫ.&l{'mky 3Pܝ7GȊh2F5(R*aq˪Rԅѝ2Tax3Y+I *zEI)a@ؿDGv{g|m*cRqkz8{*pGc]$6 tXj$}MF,._yOä0Ur%<^~tU.?y7p[]ݹO>-1?cn{uwєmnI8]b3u{ym^RvΗ;<~@B̺Z29@;;smHmH "x GWl 8A}+pstmSj&z`:l8XWGFjI_2Yp~ZҼetj"]gRL?@2z?y UIcg7΍ M ?sg6D9y:kl8f=q]25MfB5gS 9YrD߿ ~yBO:7{ufER~Wt7GiՎ{nqI~Nfs֙$Rnlʎ$*{⛄NqtZH?gLP{f̴f> 28291)MHI&ao1-ŀEz~,]c1e ..d#tO)ϧ UC?}I&5Ho2Rd02_^bttQմ`+;I'pB ~G_>pc&x+g>CqHrQ7MOM_a'"GK$~t- 8D~bUY{盡g+[!d[ZϻG1:W& @r zc6v3ԀpߒCS6P]K @Jہ A j7x '\37TxݸB_X0.3+Xv^RnJ\gfͳ>W>fR=d91Z!n FԯMdFmxp } (Mȟ8 G)<,8BEfG[T-fHcT7y-z#SR 5AfpE>kVewzB̚U=w Njͮ]hԍvjrBG5{7Vc۔B*fJn#y?%$e&Kaߙ!SZ?|YiVvv')]OțB={EDKs-L† :Z+W2G#6g oiySj#3 ܳ?>\34[bl+,q2zN :Q{|wX T!y$%/j0"Ŀxp>vxe1Hud>:V9Z5Ƕ4#D݈8 )aqTp]̢+ .X"ir6ynexۇš8/Hlwd7뾳#g9gvv#8)X! Ń[ }4\<9yBhm)c;JΦ^ѡyymryp2Ѫ:{o:7  |I%M&)Sz2aZ| [: %oֆiM[|}n+W+K]Z[8P^*詴|kdL H2^%a }hc8=xϻ@ca:7I7?QMO;B[gЇ=nʕ~h =6-Jʑ<#*ŧb~C1b3ZnH8 L(+-3VH /; .LŻdͧѵboFbwXJq#2pd#-PndID@HHZb8Ql y G h4ӧ"q88D^1G~!`6n.q8G h-G:)i"W+)^{2N5H|VWPZ___0i;i*85hkT(4a97Zmb@V }~ pXW ďW#M~[yp=FK Akap頚$a.p4pwGפv4_T,, ָqsEwP|=pT-ŷWj*zYz%xLpC+W<3{U;@/3&e.gEɼٹrg^OH8]_*,(4(i=8B//dx2|-=3sLla)?!P,.fXoMnpZƝ&hg;u]xK֨PVv/4*EdRuyMRd83tY̴sw[M35ub3[t[ϼ3Jb1|#t6#?~ h&oAZÙNgf3;܏_i<X .rq}m1"Ύ5"S}&f]l߄'%Ocm76qAR.s_ƀ9B'iWi)kӣVͻr?8;x"#믜#eN8V06m_Դ22S L<C 1ab[/Z&|W KIt\5]Hn{\c6/4\LMjOPKH[)Q tg5avKq|nί~ԟKtү7jy%%k-zqiIiiC7j55ÙygeIgOh(LQJރaXW|p@[ q[ް]3XM0@z!|A^,IY8l;[,ZAAh Bh+lrk{< <(|17]#r+y)ը8 s=t>;rz_l.6J{@R87ɰ؆j?$܃n6xL)*[|$2 ߆sv> ;"_.ťb+-Te~>?K\&AZXZznY}'JE-vN1a¬XjIܿ\Kwr:ܧݼ/I)5Ɖ76T(q֚݀R@s 48ײz/:Kwnl<ͣO9\ V!a.\YT^(O~oP5 a>B(s߀ lCw)/T<aP u=a sŽ{ : )q/qG8JFJX;WO0V|Ed}EP1ψ]*`S]=-M(=#"?OOW` C9vo+twSay-ij̀,؏,n4=0mzۮ?`0<6_uG}͵ J_'$%k S2k?dO'BE0H8Ǝߜ w]ыln0K]Tz17՚@xz* O ,pb{==(؆lp㹚 f#=couk-FO|]E5E** uHvzl^1; -x|$E߅dK[ K5gdΏ A N*}THֲYX_kWLu -]fvlUٞ4x%pNj6s~u d80^SsT2sE=ԿN껙3O+gJ=?֝]_D˴82<,as2S)u?w&;c$UHY =.]Jĕ۠\X~yY+r٢8qjlk{3uڞ &k ͅ?%\Dž!Clko㴻[.,@w@{C/1ӄy~w|'۔{ɽaQp;q>xxJ&' Fa74qWvZ ~ 6Xځx) eܖM/d5N%B!=VbV)$Y{#|d9N _& AbQZCtվ$vՕ-䨈+B`es 8AJrA^h gpwvulFsO dcgBam zhG'd9i304l7m5^Դ.^<1m6&^i$՞ƯU42[2Qu&XF`\&'anή38 B8[p0F'4c2uaq;\35RЋh>qU #4/$NNܢSZQ(4;Oq(u/KgK}Hے|>4eăH>_$_ Z2vKn(/g#t1c5^c~đ_vE\Sq'Τ#i|sQ)^ۖR<pySTS 0t-B2Ԍ#R{C{a^sqcf>>dfA5쬑8=feBr _ԿFZj b5T6VGFWGo"êZ };;2gu e5,t_ mí JS{zy|EJ:ћTqF8QW&V8t=b3c(*s4o4 u%48_=-Fd3u|nlXͬs,_ũÐv/2!nݲ#]N]?AA]">{}jU|`t/B(5Bm>68&9RZ}O]6uִ7g M]u KmG]W;,#kiGq{={ڙ^( ֗FOlebzG5~Vٵ4Tt(CtE erxGL1$<ƬigmW]SU^eC|B[FIػ7[4}5λzA``cb>bH6 ˵7UTy;bfF7n bǫ\2|/H-_7她sbMW)v)s3ĩpw4W;iAhЃCֳ&ƹś2ӨsTKo{.)&yR#鳐"]U(?P֚{{O:㿝Sq/_mKoCOR|R&$ܻӥ8`U[YﵺzPw୦k\3g} Zj~3Gt:b-4'_쿍uߒ64[խxEo-}YB.G b:#׀Rh>_BQ _ް__L3Hʝb Pq A?g6\Q%!`&8y($5ړ?t{)G3%7U#hinx;Ks[-_QJmbvb*Bj#{|_#po ,b5Ufd-dY&f^\{ Ul7[xµ%k9s[bޭҲ=)|M^ upICz;w !$ݙu8q!h`Aw'xЏ9gFϺH ߊz[L*ynӝ: DxEѳ8Np$oSH.ҙ 5 062"L|/QP Lf$b)y3ĉ.>s+rЉG )}8^,E_\8U'M+/ 8Q%݅X&'_.HJPK:q fq^А_Eq;^n#gg~S%Oj.2Glg Ӝ % dg[%d(} ##%jY E.~{::bLM M hb2W|>գC07/gsVL%}9θ!nͫ0*VsP=8Ɣ"%;SbTZ$o)t#px=5dq $l,^gԧ=TN tn~].u7iΩUt#4'IqaA_L}qD- pG-3#3*fAb¼g{%R*cQnb~MN)ªX ;I"\E&5x$gS8=Z3F5M9-5_=vC0_G9ƷTm%}k*GbF4ޑd7ٕ(w5lM/ u'*-mx ҥwvey2}pqdgv ړuߐeBezY8t;d_ݓ=)E=7q~Kuikdܒ}k>l EWCj˞Ǝmrd5߂)'Q"hCqD#r' EBlf ;Q`݌y `MPOD ّE%ҩYvu$_>Ewk @>BS O>즫3Ǖ=t_{4*!-.Az+Jhx/ʼntOk B?l,X`&4GlSj.y W/8dF(r#wGDЄH`2r!ޗCAH4wۋGd4i] ֞,0?YǙM4`7\Zo<`tM9[? vHy³>Z^"x:o-?ZΏLGx1/a\?F2S94w@6̙āA ήϠ)p&&A/ΞT')IHI8p8)5u2 SLKIV;;+k4"&Z0bz4ٲss?fM^)ZPQ4yyȊEV=YAVʝ(/;Bj>K.;dTO yI]+0ٌ#,)#>LwL=5["=ov \ یl7ЇG{2AoFn }g^ѻA6bg Jx%' \$|>r{nW TB ?p8GE \#=qHQ:qcr -]4/qYSZ8v{^ܢ-m^$[D>L =1*'?6]h;@5. zmҤb8M)<8pL/:1\n> btA# VP |ۄ ]kjVM!b?045MC8L&Y*WD~H`*H~,1\1̊`xW|9=NOGqo. {\]F+ ] 2^}~njcgkj+5z_yHlkjc`cnl6pdxF&]5UA6+;]a>tQ1 6#KP u+e*<W;h2ܪ5hרTTU:uT]QPtk L G~xXexf5[#KI9;!f^εe_N 3Ƥ c6qS'&/\u,Rna7ikMG|ǺXu֪ SjY/ WLYTc3Fmvfگiu(|2NR]TVS }BqY|']A]Jj+PmRV')!Qq&eҵկsBq}qeG[OFk̓l%P6>[{NK;}ev윴Q/Fxk>!J_ʝn'7S pZJK̠3Wl cIV|+}nd^4"aM\KM.G8MQ|*7 oeHuyݏ&q|,[\syG ;ݱͳ2=3Z^ zL's׳ KY4ˆEud;wbג ly)5X(E/O[TմS%LL{WF'[{g o'F-3m9XXa%h5S[ء@b2t4uM]c'oD4 ;\zz"<SȞT_GFfr59M~!GG"#[ؼ`po`)݈,&`IxD1A[ǿdwM8 t.cxX$vp &O80_F-3",5Yjќ'w9?A(z\\ pͩP;Fh`3@¤;j$>Mc6oU, pp{aa̅F]˹ұו>yv8/8myiq~ 5;OjSy}ȯo8=Q\El_Ô =TеlShFd2MmUa8C=WB !U%őZNR{٪SAWfih UZ.xԶٕrNY,{e9` *&`,rLMK 8ߊ ĶeӛϪOOpJmjSv)1%R)>.E75-<ۉjD'ظM*Уpj77"O˱kttOveQ#$7+kG|W~ c󃵍m騋>¬xeǒ@]'h'!cҼUBJ/-*9[qcɩdGK9PP$ʬW\fۑ2Öth+]=*nrۙ%]k{7U>ZͨՔD1Pto{l|݆z1VΑc8Ґw.,HɘN!7T 5 M?!L$~6bBg VC^M>VW+L r,* X#tOAoa4Q*OQ+vnu>*p6D0rnh n%\ F`B< ȯ;Wޱ~*1_" #BFp L,sCLEi]e/:d{m`uHO3+]Lņcʼ40e s}UOUgy tVsZ8hwT'U.eKX6pKVv団q.p՘iflg7٧kmMFm7rѰݐn+Fw+:'X MսoqZ=HR@N* h2mL`ԙg*c X =06;Q_k9ue}A4~䕁- }otYKřv膟~ mHo$-$"luSOJ?\80=Q M[J` lʎIUH8z ?-r!\SGBLn:.f ЍknW:>IH̡* Fn R%:BL"b/G[% VF`dh%Un~0 wd%k|["ɇQC.K`Vpg`C巉~A|'nk+TeAe2IS#bnfM\>O`w o|||Yfyj*v9~Z[X[II<_QJMGeUwmm_p,,cx#^^OI~A=:O'\ͅ0PHL[E;yf;ok|Ol/llpK雩3Eb>C99xx})LAڣ֪ƩZ;6DOcJ">".;6JQ+1U/=>RMWu_LSɘ9'lFT,yoꡥm㇎sǙO_8@me9>Ts`-Uj# L1jA_FMkF_swC<8Ne7؅\v\S9TkH8r"3;8z{`JR5v<ź[1g8fǩ wpA(o b0>7HXH'>'Jb[zYLcYLEА/A]/OjЂo& P&Ms9q^Bfr~zmε(;  eTUUc 8J݀}ιK( &19&:(O^k{3T %*(s٬(|VP$߁B-?Ll6ʶd#o6(:(Ʌ7ihM8d h wkwl֙>$ҘLSԫ4[/*&ظ^V$'I)D^{QWn=|4WVu1Joyy/u{95sRL8X٣lm!'W/7 MDC)4$#WQyV4&]U-$*rr6|v,B0+qcf1݄6X =L!&69T^d鱓UkZܽ[ɧSۋ&*~ 6&A4#S3[|K:{Z0̆Ry-#!9pSsGL+v1 ?YT.ZImuNĽ=hO?!01=>3[ 9Y>.m&AaY}>f]?n/#f D3 f C^ɣD 8cIz'Mkc0I|&z: j[^;YjoAPSX~z2fw}+A<[ yh i|%׌˥-%NTP*$ |n'لPm@fna,~>]G/H8 ) .R]:9;;GZ=P[m)Z@3BV\WxTXM;_1|W4"U,T"MX>\1XW`X] x%MD#mtAޚ2M?Caq%qmroh { L7l5CO}yNx/zv=0tYxu㤎nq$Bo_b4"XOjP;toEzwʔč Ww0yT A^lAkƧD=#QMO{. a:8I?-={=itQ 6zO,ŻBs31qe?1dy?zy!6 837C碋 <@+SGk.4 !tx-R]X{mJ-?hi43]K4u4T0|rr_ 2TW/X0&Oh]jGdMFk2}sMLxmb:gfobӍU(6TWENX;ݭM4?88A#?[>Z 5-BP[?-kRGva^axTrp0B£;G<EF kHn&~JդL4۷)>JOiyվ>wȔ;1} YI+cVRȍM<n!{A'J[.̓f_67n ّ+qE9Ip L5@a(Cݑt!TOyokg ,~S5.8pcNu*[XҤMENegG_֜{ȘwD/Q>[p ʨ/ߎuQ3MߧvQS\#ZK\|?B.A aV$:PA~,'!U-b0WE9ڙGGi^D4`IlE8. syY "C!U<Z %'i* <) OSl. >>ýIe$~C% mIK q3፰Z ^zv" 3I3 ]Hl_?WEBj*.$3X-{.KiL_r| ?K2mr>Ӆ^oDjVg%(]mďR1gއ'aO7J^\~+DZyB5H9AQjPU'3/5$9ix&,3o573.M"O6")%xC.Xj997(WcP_~4U-UeKHL9VV6fu(]ON <>u ă1 |]Ldds٨F"rk:5}dfy$61aIwElT֮3UKzn@ow%M=\:snv~uq?6[J3 ewII$r}bx' `>[E&9[R1vMcekPb!/.>s,-m]_x> ϭGAeKSKEo/Ɂg.icFEN|/wyb RWa2݄'o`i=.bS0BN>6Eg Gjhޑp*34%L^l/6ѵ.Jqq O(Y7yKn-GD'z v G ;QXGsQH yUk+ό~b ޟڲ&\I}Ɂ5{Q( 9}@#N:dYQƷu)UDωMl岭2we˰&7.&IܞR f0ͨMʏYAl%h &B^tq+e ;((1e1m/NZ<;'׺"H%aD6{PuTuYAENמz~</O,y~L,(~qcTxpv-[XRG\S6s.wd.[!p'BTZDCak-w!)n/*ÜU?Hj%5Z|[u\,[ +.fiGf5ޜIM|70^}b[E 1C*Kģb)*74fxi p_|2GAgi<0#YKn(P"Tvبbk)$*2<+ȭEsY hN ވjq<8^T [XՕlJ=[bn,<5'錧O3I]'SDg oT(}-b0Bt6\w"X'of-JʰU;Fvwum.[jyU2U CTY&\۝gMMiiiAf*մUI$]fn:+Vɤ9ǣ6_NI&o~..+> sBzܸFJ\ƫUnswvl@!v3Zi!}du#œтsFjO/q18I7EK $$zFqT:y3tw䧒.y.|~,K=ˢk'o;_^y,8.urTK o}lKd)<ۄ5Bp% >A\v8h vԶXj`kfL5ܳTbD0ށFtK/ZA? 鹘 ֻ@ f\l畻/ qw;OfqpW^_iƟʰhO-}f4/i:v_˯e/ ~bRf~ax zzz^>;R;5L3W*@Yt&nkKŸϕ݈m }sux @UXF&4ZD>1_vW]x'4 a'NΦv|tlLT T%=ȳzh 1u];# O9RKxq ꉮ@Z@\Ni\th&&~2irޅ ^LmҸǘ_ٯƛǸ[`?F&D@ `";OtD3] jmk9,-tcuNɲlrdTԾȿt}y?0Y5qf⎔V˞%ӭCzfnu8-A',d',Cp C DGw/8k?lڣqދD˾Yh/D:}qw@g|+Yo)H Ķ`Lyf "3wox)PL3 ;#j̞SYR+KA"p#\4$E{oyURU=;s#\^ /Q($JK,=1{\x xV7 F~7b2 uLs5Ӂq]N!b_>@{0yEESy\%yI %éT~%=j9FNC}:p@{/~Q[6neu멕R$e%^MJX|UҎxMªi~~|}wk{lڜ^KE'5S5Qˑ v 7ן W E`6|Cm ‘x,3AdQAWj=:ð@ߒ Q*_&a:8G+sʹ{eraXw拸b-#eX9&{#e9KkI #7[xلE'`#\!@'3MI\86[ꎪ9*V\=LM$TG dpW[G7x^Z]6|0L񺺰KV* #N",sVPq%ݞ'mAŪʑSU0}|wxQ&i74mt,3a?,#㬖`V_qm2G3zB4|x:bsc aSI3:%,^#w⒄ cDW%\IXKft~%r'?泽=O@^ýY[$&4ǐ=5:IZԅ&d42(&ocDnAGG6+qUZuecȞO뱕׽[|oYf֧~_bؽEqK8}vPFPk3+钠 b44*o:NYmwZAJ_[|$Z^P4a4(*B<_tO4U*9QV?W;d"A̬Ai:u'rS}i5Z& xUl& 7Ivڛ'ɍv5 [!OsHOW_cq\0UԃbG|!Yvc 5vM% _l+/$p#Ɵ! \_ꄴstאՂ[C9RM t8z8K_7B(z?O3h}gDF/:E`Ko{5ۙ Qh.[2}M"(7Q95_5Q57 P*"'au#ܶ`u@gg옝x) w!r>~FOb(~NH=sL&§kݳ{Ў^V*@.~Rک$_PYrŒ'#$P^K͉ҥKvbN3PZ7nI^x?bbn5r'q YGoq@_j!Ig6Z1-d˯6yVVC偻 p;#~µ8:>a2 Y5b;d5)SbBAuluW$ "I;V+U LB2Vɖ EZ 5.CZ&I r2FQ>((T%pQ(gɭ:Z],BTA EkLs2iT"6| nH_%.{{G.?p}[+kTrj|j{i!tipY#AK !cB? jTqqoBzo{zyERk.ҍz;M;qq7mce}(ϔPi+7BoΓ}m>"ϒ]8i뤿WRqgI_>Qi5DmMЪT'~ZH%TNmrfOlJItB~A.I#ګ Շ SAPoERq x9pT'vtIvel.a#]XvR+= 9&@\a^HTJ~`v@ 8D`l=+3;/Kxf4[Kw!ף0ڜzV[8Ϸ凳ߠ휬@ =֡ۥk[uz,^ CO`xG^ZwuAu,;lK튃p~:c-u-YEL#9htǟbs'!+<$v`IΨgzN ab܀.[ WUl]{^ g2ċ垎zh i_ ~{?-ygtȯf1|Vl$"ߖ㒊O-`R<.H*X\p)e:^\bU>%%Ip'nQH9]ڥM< vN JhP`BO`6J'ȋRz ߉-dC;'q%hSv6 i3~FzfZ )_C.x#AtOr.Ueh$xC4>P'Ct}؉aʋ8 5eP +-4N/8>pZ)[&:1G n [c"|cC 3(L726x A\>m?_oM1T/9~D{ m!v"]+@7v,Ju 6؃1z9v#:x9쵴6ݤC>PKC[7 ݉sa3oemsE w|hD4 /X㒱_,\0 kJ4"Xc_1X12  fź2ۈKY_bNu{޸\gSkg{'!lm|ܨJ)OON_#"Z:~b匁:u9gN0V|$OH~%+I\e8\q>ᝄ1B>(+^ihrɦ@<[F*bx[ܮNVU:OKS-פ;zjϴv*<Ŭ$$NZSddHh{^Znڴ݉}TXrsF JuY ׂ{b1h5F?P?/Yݭ't*KX'|[r5õQiL9FY/=Ӟco76L-Я0v]O/s{h &PAѝXv-@aT)UI-Z2{~#Ut;=TOya_Iƿ!u8FC9׃?-tW##uuIR,slGct$+ ~~ҟ[?xR.%EJwv-ft,c Nd*xPMkTҚAUaOڿuT^I0 fWuUpiTYM]uWdA U'[zա&JxZ^x!&Fq>cØ6!̑{*U@,0l,%&PB*U0ѥ!fq[CeF wt&}ElO*d~Dn`#+]tLo†cW_t,fsT=|P pWBA6~g4xc;2%0i9eh~j1u4̳&;,I>aޏG=j:3d6*HmCy1Hx)C8YI,es_2HBճ1xt`8=BH/Hw櫅 f&TO:e dwis:'sEϋ.>DM Q@? bVlY]@6vչR%}kG}&lEII}+t;|ohoni% KoYzx_Rf.%y2%W&FQ\.MLS!}: !n,[2rb9qީ&j xwx1o?`}qnqqyx*Oba.S@i[a=i9=t`xWd2Ć$/ZʌVh id!LcWT0L<? s{\[(<] ӕ,-2SrL ;%.2@ޥ.+]tKD;?7&5DE(^p yi~asi#?f_jTKH'Dt\1cgs7azN+ p+];v"<I3Kl6YHHkQ tOclz=\PHs@U0#b|`~6,\Xz+VPGm; ڀ6Z5qq-tCq6Rn;=BY @&$<߈?& ZJEw?WX@ڑ!2+dzwjTwi{;SL]ަ}p3:8fzl :xv|=#5!F!1bꛈJi~K/<蹅pwa3N;NC6x&ɽ)aCMi~ж H9B K žC۷}c^=b'q+SWM[.i g/14/f^FVKd"rO`?tBAx}|u=pc5 .{~~4!A=}w؟pKun\vmt=!-crIGf}5|nȾ"Gm.y+?6 -7 ~l@߰S<.׫vLsF5~-{;¯Gء@ Tpy. ZCV.pU=u_p-jfjKRo5OZLowӿS>Hm'  wMvN3=ħ1¿r#uLyoik9~~obZd5t-,τnOzpgs* ƹ1ć&zv_3B_9 _ A#LW6 CMe TU b|[,j<$CmRLBQ 4p7^D8>яVR? y*x{"Ȯ`$=͏^"C~]ה sy99G*!'S[dHM$~QK* g֤jSOERs a}^_}hƣz4x+cLb1yK*/c+{/omEKg/+(O,^]8o,ږ2=s0$&OXGa]!'j[pCn܅cuFrm%?eo6.(s9C/~V!s@8OqLȳaC##*~zsKN?y)_=_!R[b<˨"[J$.pMJ*Ks'h"Zf, tK%I3|CT6r Nr4DVEmc1<P_M%r{^τ3e<K}߸;9xO t`Ppv@yW:sWyYjx Q0V_u:nL&Qn^K WpMU!^!J;jgi 1q&-e5mJSsNr$K,t̎~m45MLˬLt.A!C3_1p}d~ 3RP'yg/u#j /r;CC5D}yYºAoh fXwCE F ǝq1ٽ,.-ׂŽH(Ƿ~1ï\*n h|{ށeüpN]NSdr9k,W*ե /q%{tغ4vӿF߽bfieM+y \<{)C[Ǿ2g1kP9@HA{wT <F]=FM ߎzZ{Z:`P:naD?!ґLuA|(TgS,4GϹ[:{vYEGfK+H~,e!'rOW:Ҟh퉧R{eN-R:0vB7TW ͟)]-̀/3qTp{- utWšlvΎJIZ\C@q(VKp h3;{A}1InQt)Y^i EYI'|uo BuຮAbsmw+h |S* :jëxQ7*M1tWbƵKxgtƵ͖{Ï`KfBNΐk)8(x9?/؅1][ Wc)= *TY-޺ӽH=;Cw M'~ɞ~ja?$ e IN:&׫ۼ9cL ?f8jX\r-ӿ&ln4ߕ_4#୙\Ne )[3;'Fz|L߂ŵ0i^ڐ#L!CH˚u9ݙiƬى^)11AZUg욑/ay}y &Hlմf-) =Fa:ox9FN`ELӘD[$o D!16P?Cn-kϽK2Zv~܍zǖ8jS<[rjX׍x@.?v,ş=Ė5aՙMX_B"[w6F([?YK z.E(B\X V qyf z*9 :o9= jI (dXH%{w?~AbiĦ ⬟ V-ԉb5kL,:"([əz%b2y۾So.Cv$>>AUD@{FΩyHCSˈTN-?_olk:n4O|~@CITkĿ j$]}jbuO&d0@B2L3a`zpsd:6"ggp-,OJ(typ*sۦ`c HZv:!J:LP XW 5=9h.к6蔽o^_o)#*T/J|]nUʃCY;ҤP[."KX&< O*k8NF;Ƽ+[8v`*4e6+`Q:>u91T[r1:j,2Q,$؝~Ք<#snԜrS2 j6'4UީUw穹LvtKz+e}J@UpxOޖ=aWi-nrR)L6}b7d5yNE=C zZfy4GX[== Gܷ9'.[`n@Z< An㤋~GOb uOR"y@7ѽsaks u,~pxP8ė)e Zˍθ =:syZ NC!CePg3Va_`S>t5޹p,nĘM+0F73zޗ)!V.n.NL\]G݃ Nڠ MfC#މƘ?O&spܜag(ܠM=ZZN&-us.r/D$1 -CY[ƒ<|yAax.F>:,ox˔ʂTUM) TI#Q+Zr2/{Vh_SUHkK!̜}&)Iyv&d ''uT\Duz5Q6K3BԺJWzy[*%mp lx݃Х5r9qN~&DeN2IlW%(Frsג[,/U:_~vrøLoF\W!fq_a -?%#1Yr~vRD"ajXJ^CF#2(Dzyomoga,PC^gXRXg*T(؂33=~ M%vpl!̃yE#f_JN HĈ1D[= xBMr'?ȶ'"­v`(@G< 4< ͱNy68{ t$# F :,0z<81ۙcF+Jvf AG,A\pse JDP/Э0 C$H 1W 3R&ZtZvi>ڛoK5{h}Z@O ),wKALۄO-@nkݎݱ~|.];+b} 3)]֒NG^`d0v3zF%Յ+a oacB_i>Jg4N쐿 鿑%_!tKd91E [pB#qT\9GMc1OVzjQL?:X`a<3Py(ૐЯm\tHԉ9@4^E-Ы.Ŵɰ7qt ogp% .Wq?E\npG|gIT@!z<8[嫲ӔkBrSYM iC;2#|TӻG(̀;0/?^ZT`|LY&&H;* 7'* JOny.E(XW$n(fla[D[ |4=|)SLr9OS̽($3ج5֥IG\xA-VO.窀"!|4ڝQ sna)2Qohf1c2 i*VxˑI}dgǬRg9+Yfe9g%ό*e.Zi*4CFYxF|ڠP4+iz(ހ3WhjJt#KC~ -߼6W΍bَ.;@'aK n2o ƫX-YM2<Rz44s=͡ \:z CZcSFPD6A/mg$h|ZcCu1?&4mb4u~q }Ce:7 "Crh'{_{oqT /|e@(yFy@!ꣷY^yZt-|+>mgT^./$?pQkQ`vG pP:Cow;hm<;j' %XBa{}̙7g_2̕Qj]ilu8W\۰_ 񊹱͙ׄ)/7DC ]y7}l'NҴeq_r~ߕioyCg)U*fg.Npvm@#pKjeNl)S#t9]H\n2^ߊS{^9|ӱWvNB:uNB]ZWnz*!? PDÞ|]]7̘I4nN5VZ:%%bC=H%8Gs{t[l͡ s3҄8#^*&ɬ$Yh+bEs.$(;]BJ{*3? y_XOOIy邅YZS]}63T\}5Ʃ|;&j'||ô^סQ^ 'jšց>^+|RMO 5&ы+kck)˲\zź )zTnK}P9]stu==MtֻIfeY I5-9ݓ8hȭ%RB,ep'-P~ɿ(]}EK!_&*):]~^kI!KCvٛt1=AlZ,GӰ|1ӆx "qfDBi}j|h&fǷ{ 913 GqS 2kДo{!R& rumϼdVY}f 9sw,`n~a6vir>l_)Zh4|᣸x"t H/ ,~%l(^Mu6Z8}VrV$MEғLr.}.g[il1VB87Lf3wٳ-&u4~ÂxS=| 9Jl2,MnNw%^٤Ҥ694)?)wkt.p\RmckߖHidZf~/eeyP9 etTgq-Bq+"h)DFXf ! Dq Bq{P5Y޻{>޹ ',*koD}<-qA@o/"X/t.3@G<% @n>}N'/ $Oc{Wz\?]ޣ)n?P݊K&5vHa1DYdžj3繎;c:P\@MӻEJ;٢lR=%Bޭ}?Swa :ZmCӫd>^D?R>Gr#ޅNѯm,-t!kGu E嘀«ZEڦ$g5q}O-̪eGFSRjלSkux=,gIa+3{&)7)0us栜zY %od U'tz[ ep ʝXp`ѵel{XxtMiý-oTk:ӎAZ'3kرOl%^B{{K',1O#'0H,[8Pc'\@#-?"b^{^ܶ,a# 򓇥q8hfhi_g/r z,<ʬLf W^q|$JgE.lXL,NgE@:![JNB(㄃3Tx=$11yMb\ga4)%Y0AnnѵNo5mErurm]h%w]d:FP wk|x] mN8"35qTŃ&#T/"#ϡ;Yct؄m5/0I0m7i560KwGUb/qRd%A|T|UXnb:_hsΰYi[ {2'|&Mn哄.E`?񩬉h#]~a'wj&Lc% p%ӋDR 5&݉(.ER6&vouP[p& A%zPmdv`uS/ j:] ;Rv[k_6zUe3G~u/7͆Έ|NA0Lk9^#V:S΄SC}aOL_2{Y3@t$n̎G)t9c2 =&ȱ$3ꀜ;MV 'U,^oc{-T"/\U^#oX@si}>4zۇB)3{f ,puVb*փlaW4 B* ^Cwa@v9zmʎHWfN_$490 0J2{/UEQkn ωNJ͏'kbzSEFmY]K:yC^'](_ ?1%bA;qgL > 0ǿv ,Ϭ_'m Fq#׉IN,ΦkbcYMRs4ԧE{9H+O N%r6Jn.fv%NZ]ȮE4kAvv2n.Ɩ(Z-gdٖ:`'p?Ag|dTሂcEM&eVT)YR0Yet#\p6Gwsp)L Tx,~\bs?cbpK%cL MiX]gDI{#VC>( B#O0B?MXu1F8\{]?9+zKgGWvM1<<ծ\C9%&RCO 8gR˙J~Q }:1qHq0$U؀W#faى98 >D΢`/lCXXr̴U܀&<&,fHi9=JgjЍlMXli)%.5e8sٖVhJu>Nb 'n،Y^XA`aM`5Sbcb Ό&{?!]Cx}" ߌjXO.-(uEWjUω*FG$٘c,CH/c`7$ gE`Xux*`4``H??7&W`v v%wuP{{oz8۹ <6ݬ1֪U|'6X+D !EuH~#ߥ&.Y.'r|{6Ն7~TɖNo 7~Jd#Hl6ق,fs՜ 7,:Er6?QTD; Ez L#m b/B_#o_Y;3Ȗ|a%z!QN̴G>{5hs|ofWF~TCK~DLf .6'a} oFB\$?`>WAAAsѬn)+X5Eȧp#z4WqgR?Zs܀0#id(nHzj/JY]Ij Rs'!ٙ$ ³[.͒,5jEJX U<οED2 mGIDW߁#P ?曉㕄 =L@ȓ""YX~n`#P֪lj7b:Goʈff ;T`欄ֶJ }`ad7Sj8Σn7u RbN}P1_9~@WݸADa+E.n5oߑ3\ {D'R=ARש%|E"&ZNK%d y rKW{Gd4I: 3原7+kK>OJҜ`+؟S[d3ϑ*.5n.XSzuJ蔉F([0.koL|*v)b{ub"?|?zgŒ\^_AB gĂ7=ЦcSڦxEKZi|%c .gd%uG3ψ.X9އ^ņ(#$ >cNd,6po3! -u?)a+?r][+[[iYh* P>'c t 97x_[Fni3%zlԾ~&w1KĶMDB%yzj v'3E؏8=!5(/xawE(}')M)[Bu2Pi NT{zT'P,LdKo']Ƴ'L8UEkaƟuAh$Rg>p:;CW ԗ>@ g1#6uE{׸,9I'<6H[%o \g.n^R@7 B8DK[Ih2 tM Fžzu6ry?v!k|#fGT>P*qit쏱tA ( G:[#`# gxBQч h0X3ݍ#W 'b cLK={N_""Q`5pǨjrx|I$bY3z3&PR8 jAvg(_9Js>-uI.7\,)5/ϑz*;(/(sR1={1P0:=i^CgYw~QvY߰9ls\i݌Hr1^fJ"j5NbJxl ڏ+tv:1_,ڦ hS`C ,9L]b챻Zhdth/]].澞*9-g:(fxK:.MJ}ʧ38y\@~$tmثbQĬķI>0p_"}R]Zr8P &r<,oa| `k)rG-h_RusWJ9F;yم%I/rB$?O.S&8mX1ޯaMV2TE>OOx9҈HK;Bv1qػYw$f[́jkE™8G|ئ1c̷!ǢsX[bԩe]urXKF/-,=,_K_@` t$dx6ev6@r9 mY^\fv L脠8U(z]M]\|8? _ |17T)-0wI!Ln[-,yW2Tco!ߥzޖ9Rp:}q4-gyiܚ5IZ܂yKs'ޤ 2F'/J2jG$fN ӕ?]ҧ+>1E e'{wdE#(|6:\E}!"ˎ㧊+T9i_I(P3r5ӪFuY:,4RvbmPos$21if N"oDvWC& +h1%۠%gDF~,5a]H%Տx >ߍg,jtp/ >OB@ ?9uqfc۾R65i3DflM/+̷gPRo @rø!+.~1If[)ł_yLFpGUivFE.6+4WK1;cd=eϢTz%esEU^LgFIN`RCK+iYr$OAC $e YcyASLA&| er`2%_ EK&5JMxs3_-+!s5t.C8RR'O$6MbW׋!5PXDȲ.~\@YI_*qNCY=Ra}@ g%Yair:'O_~SOS(oᗰkAeA:Sb|;r4 ; V xbHP o@ƞf C` F?"m2st7/`IӇ_rJa8\tIMsx ]Du^9r6 rq;q唭4AG g.9 sOx`>: ;Iㆋ%t,N5U鼭ɢK={:ެṻW֐#iMReGS'+ɃimGvtu&98;mI&KrK&{S}LrgSR?ʩ5 rUh>!uӂ{Veԋ<er;aDggk1{C:Y!K utGqww !x!zcRkD 4Ui7"c^a _ڵͲˋO/itEe=o.jSrȚئv !b+ v$vV+&Q6q fv˄q^IQuRoIQa?r&*'ht>?c/@ HL9v8*eq5^N'=ȰNoZķ+bk%8+X[_mZG][pĨk9 . iTGV~ȧ6Z)S";K1Lv=kiCuz"Jͤݢ"R >H{*[#\rSmlgl'>B[Uhs G-PNj_̠ :OllM!Rx]/#lcۓ>Ų'n~ZxF =-H!ډot$J|rnAp~iևc讱 iPB#K Eh79+s۾Gl2j␗PX$8N!n\C{!Ubˑ|8#~@aW|.t Cwfg15|xP-TމӅRZW)Ǖ8Onb< NcsgWCfPFޜ*э7[lfQr~,~03*/8Zol2DIcRzkE!>nj. ]lS*e~lNX%<_coLQ' 4H}~.f˺4$vq-#Zȯwfnl=I8k} 9Zٓ/7-K7.[伕ʻ>e h *1h.6 CP*,U 5YLb-R}aێk+NX^ր~!g/U~&u 60D}uL)q~ʹyR<[j◳0u={IZIi=z펭v2)W/TR< q%<#@G|GVh\.\Ey,T5`&J\4#ZC%p0,T XPQC TLuē0lUf,m5UjTйtQ,%(]tQ/'z! %v8Yzrk-HiخW/H[|QO@ۡ_xGvsVS{k;x\.!$?IgC6}68w@F7X#.(p2 iD ƈ\ဤ;8t@?p\C.wph6f ;K&0PeG9VHG>/>O)Bd|9+[O(_2kdtybyXwC1!i`7gz,>9<9mZb4S?zyʒw$ܛȾ]{^|*n:N8:s@yb8IcSnpJiIk7Z{U cc҃ǎu2 m[9fɼq:Db&Y\&ֳ13TZa2!Kz /Ļ8x+R(9[7&OJ-bMB4uԏD"qMWp /5Y.ƨNez-0EG"T(ð"e:NFf!y.ar+zgsWSv*Qz䉒jzC]$ Njm.Z/@bK|; QTTVW寠8Zj%s-; k8p%y>",7K#0U,ȢXJT'G崜%g^M׺*(8pKtR<)Jj=V.oow^dֲZSGT:S m Œ7Z$ !'gVߌšӉyf᫽#벻e_%cb͉ZIl?SoXbُ.0b'c1|r|J}h&ڊKAD4-\6b-q'sC Պb&{^ z@ob;'=ЉX^ bo0 CT1d|@sp.~G]s>e0D>&JصBkǁ|Jd& m@sN`Cw{b}OYjv" ̴yðґ1} 1xt2_zԪ޶;Od^ʸ%C($rE7JsԖyg8;:dQ-اڏУL{X?.Zc8Z|ꭙ7enNuX=#akqA^I~R2`@Wl)9{/ \ 0RfxJtTU_iZn;&$ԭZ^`oI// 6VW5dLS*Kݠ*p'UF#xwzh%4YQ[d`&emBj-"SigN=*u@l巉դ#,Q2J| v0|t&ͨZya1'l0"n}p}ts'%>9p BG:lɨt*Ėґt.ɏp|!b ޜ^KALTwb3hb<6¦at SYhf Ymaigaxp@;3N R{ad"a-l6B ZAD0uO+HG7's,󙎧s](@+;a킸(ۖ (eؤ~[nwVb{?7u>1s^1;/=ѕ \Y^%#.ajD=&zo'.椺-|2ٹ=ҽ¹v>V%M6+ȴGݓI6j.vZ%ˢ3&_~~'P+o6(w_L˰=֦>دrOmNz1Iq69)cyrEAe{W/PZ*fAioHcH RW+6ৰe8&5TaٍuŦ'h1{=B,w>c23s)@P %4r& 4 '+cP{3T1I"@ uaX#Ӷ>խ> ƚLWNxN(ei,7?pZTXVYKPU\5V U,/ȥ@NF;'_ěW,(EyNPb 678Ѐfƃ-5sf3t:={xi{m)98(MxyK#l6Qpq98Z:m ^$I .ڨ΂[c+\6ՄO?B:] (xNƋ&4^Jll.A#Ceqd5$ZN`Ix?֚A) π2l<f`Fan%{Q-R$>V"ds v z'좦XU?i[\Jc$n,"'U0:SVwVZyjZ yg3'+y(~J8)uصCf jyʬ1iY 7emL}fxO]ǟέ5sS;E.IDd=G%sus&g6H_½Yqh[~oƴҝ(AjOt7)yMt )z0;$L:A/f1TۭUW7 {B1~36g%O?-dآӋY=uJ+JB8ΥW|O%Sr=Sa!q7$ 9?d}OQP%E!I}dPaD_d*'Ci:Y ,Qۀw9OIӏ_]nlhc>S)%H |#X"T:=DѤZUnowEuG뻍 rO"UZ+uQwe4'+u|KJ΀@*M:rL+a?[5Ymi,.JLIZz]@@qbVBKEX/XVa֎$]{][V ;1S=BՄCh2Nr/:$0 >+:Jt?rmZ1G#rz>Şak h)xJ!kgO v"yBBT5w$iM={p9dZO^l~Gw'.!xKt"+"Ow1pWFQjGR]zCǦ͛A]nܠ|^~r|+\?sWs}Î>-S'fk]r;iOu jLa֪lk?g[22'pu\ܐ{4?ꓮLX6) n2dv=%V*aOQ!:SqbbeEJw.WdXzy+ezO 2d2Z'NC:|}^#AXюEurCqɶdC<CXg r!E/ht(WnʷGIճO署-F[s}1QɵN5PS+0on|59EUguTt9R:RHPl!wl]6M9)J+#_#Psmk*Y/h7lH!K8(j/9C)`T(x{QV/4quT-R4MǯR(#ty2O9-]+W Lr rAB}Dd ZT*VB-mLZg?&g݆\>hv}R L,"~3N1?؃GAC rB$ތ4c˱urwhL&:#8@bLq1ȑ<D;eF|lK̆΍~]_upYL )2kb˜)ii{#ݼӚ4(7Nehq3|HwumQim/ j&Jɬ`Wn O?sR@`Y5ҵY~,͖N=R_=N*jl@J3B[=Q*kDJ,=SkTyfg1N~ŋ|D1{e,&C <4oJ`  3M5x4xT>q`K4YH_h)LNjH>Q)Xl32]1_׺Zhz+<Z ʵa>4N"^L"Crl9 31X1,+>UjtkkT ;QqH墍71 z;91Kl8%׺z̛[?&xP Ջgn]d.al3rJX~bQy\50:/ؕ?*nz Aet2b)D,an1dK0CcI=~KQur>s÷piBoP0 χ..IgnoҢv`Z\#(-fJ?Me쭌kWۨz?Y-Gv)?>ǩdW/ 6A)POÀ_=ܒD)KÔJzR'Qh[Nn}H= od6%IO`T+]|+ Q_+[J!X5C}`,T>2/ waU n x卹 t-~VŘ $M[! fx;І勮[x aLu{}3'*j'p?;B9"2Z`,+a*thy,Lo9׼p!Dh'ےDQ+_T[3FaF!9 pI,Iܞ9FSߣ̭_?s exSE}@qha0PB=FoDi\6uZw(C6p00={Np/jTbZT;ӏ~TlKgIQj$AJ˫eųWⳢ"3$jfiE|6OܣqQh>ZQq|gGbTՌ S'C7an%H {1׆IۧSqz.C=#?ggMnO{p3%$?\|=$4wr/Lilr2 ]H!t*4573Y.fa32RVQGA#ϔ '%?II2>q0A`x\<%AFE)7)>:IYjCC UP'l4OˆCAybQ]ʴ_x xVKj^ϨQP ơrhzVR$?JHv(^ (UdiXה k@,d38 `.nT)uEM«e˲S.(/9"Hǿ/rW~32S 9-~>wgG=%}k+[~wo|ʢ w`[[V;dܻz9&a(wq-6*O-{.;:$J‰E҃>_Qc\| 5Ɔ>+h|^oZ?>|Qeu!fD-:8hz_ޝe6wRSab=jv&Q.oZL3dŰ&(mm-Z D+-:jߪj&-QRvR8'$IMW1ʭ=IAxN;_e;.vU G:5%m/q/UJ3V$Qu*VҪBP1ſ0Oږ 5 i;]QwNm2兽]Ý=ɃRR^Is6Xn:9o뽷 @yqcw|o| u ە95u{ |X*_uwxhJXWXٚ/L1q`bO tN. Bƀ&Wtx|zX. >+7W77]o %^MpK,{ޣy4+FktZE!A\U%ɥVt Lm_+$d|  *-Jퟻs7kGRi8KM *b'3BOWQ}ytQ.3Èx96 oDRs 1, I7I I,OPN- %$j~ii:Bmb$Kk+DrŭLhzCh`XLNdAKA)trFƕ\gobT~Ʉ.Qd(x@~Ti5 WI@dQ, TjuY$*3IϢAN@r ~W(9TM b|ڢ}r;iAejzftE4O(K?ʍ;_<(_ `zҭ}QU];S6Y #;A2 tZ:ɒ5U9ƾdA x?&5| M':4%uwg6柵 3uϰ6NYS,Lgny\yso> O\ZJgXHc,::ݷ‡x/&iG)ƪZG7$&β sLZz9⟖7o]]X:PW`Kspޘ;\ڮz>= h CM$,Շ&ZmuQ1GwWU@_5tj= MJ.3y,B.UK--Z=jZjeuղŠ+ۭ޹JXw鼚ZjJɝX#4c嘜۩ڊ4z"1Kj>[r6f&fDi^[3Ü, 'k '?zQ쬺b0n.\OՑ>B-ͺk:rt K)HN&nGZ$/a[qj0#Go$I6Í)LIfjS{ȓzD= T|"^ r,@}k>Q r,N3^Ӥ$#~ Vp|ZvCOzL2OU1RHL*d)13&K׆7PTx'qүQ-*|f]+D ?xRTT[T'eU/-W3PQ$ JN}\[J9֨Ⅻ,U*9"!^|o]jWF`et8*|dᅪVyS)nyysG_$8nWܮKB1U-OKe 4/\2|EOVs,E @cuJd 8g9':9@&Ev{C[;|4o)8kas;z(fDۈZ^kҍ{ DR+`v_ʶwaeWj63A^hVKqK-~?t^MŞ)3H8MීC Au' hhV,9Lܴt[e+|Wwo}̺k.WZc4OC~^ji1_wcL7JFNT8B51(IRC*u4֡!ٻ|<^qn,E? t1"fq3A\J=#x3&?YC2R7Hw!R_q[L\mDǮts᭥8O3Cng]gjF+ddrBaVQB&_{tpbݲ:m a=>NJBe#`: <#:?,- $p&+>**p?Fp{|H,B,|݂'|<' wcne>oxgf%Ds/geZFO7_0mjm/3"?x`۳@i %IUW|/{Ykӕu}U_+{F5Ny6 h>ai^A_5>7a:b/S%Vje36 b E FKpFi>@+|*);p1;9naq)-vs,sLy jnRIm$!;SމG1'&)P+~K ood;}9JSӇ[лreXݣ4!o="+gU*ZKk:V& mfIpnď$!V3_H}L  ^p7H*(R%x§wu-4AX-Wf:PTXN'ngn] l/e:C=ԇCS%;vqXge۩XLWVbJ|SJd#c{+ſٮ's?b!gxr>?OeZ}_Q&Q#mXjij2d!Dz7JNKj`0CG]|>2kvH-v K &Nz~3(K}d\ Oi~YcdXئRMlzpޟKתÁ{l| yHH53~,ۿgmM?χ[>䟬|Q~n@Z{z[Oy俵8lUm5UŦeتrD|Qo4F\sZAZvGEB}ޚWo ~r5F1ck ;Q Ƃ 'VI]TK[&1+R$,:|-zZ/ GvSzE>%$=[rld/sxjMkn)0#4 cT_O^:;k,fJzf>RXME7+Olz68[A5/ǏnkK@&otk#YlBNX4CeL/a^X;w˙Jt=|UQG74x;5E&)\gi}I!Q2hKk)act7B^ҵnS^hT5O::יs{.Ջ-bJP(}tPƫk7ڀ 'J vF I&im*B'č4 W$$ĭEEe"S%ǥ"E|D" > z8G9OEHe ҭ|<آXOcV$;$,z+",%;r{T VF$#Eҝ2HtvoYOY).nZKWt$Kf/H W ̲7|EK'[;[np[s)CK }'lW = h?jcI7>!$|r{" Q92 U<-5.FoR]oh7`0Va5kL(QK9Gfu ~R$C:Kٗg+ !1^7eB{:.Fgerjm@VfcyySme3 M͡sjJLJ!ʘg$չ)^ؐ88!Mr[g}%'OCyXX/ɂfA5=sU1j m"ՎkZgܲ?>7GvydS*c1L,`VNoyESr iTQM^e&@ !j6Rkx"1޴Dq u#.@,Fơ3-?MfB7MFz$CI"mX'"@wS[ 3kzt_pC1 <쁢 {]DMS?1 HdF! } .M, S$抓$O8/>@"V|?HhA"@s>s/?@o6v *\VFT#mX,QXd9;zv9'a8<g<8v{#8}w%\~LSۅ[6Hi.ZaMq4eJ5HԋF;,Y$j?sCvDB,}tNbr/G%+"Ɲ3[C`Q?l ۣGI8UH#5)m{9]#;M΂H/|3BP<6@‹Q*ݦG*g9;CmQgFoFڟXXZ{ZGyb>byl>=b&B 񕒪}?OA]WM  1~yX GJUn"Ft#,s%Bl7`h/lx̜F0 fq2olfEmp9)e7 H>QZ?Aa3,Fji$ӀKWQHlGQAP%)ƿ =t[KC _U)r@f翔<gJ+V_=qDn?%׉@ddp8QrCF2^z\HO],+7-1J ypI!sOs&T'.T߀cHX\uTmRMV }խ,vYLyI~=Xœ茪\DP,e+H"^?+#]Xp&zd"] .5LeNMƪ6"w:KP=u (i oMpk #m}-IFCAgkH.Hg3%0_uy/ 򾷥0kXugt]_6L&k< ?:9xZ Bf;{W`5D!TP86-=]4=r^ J\AoHtT7xeSlَlοPPJ$s#y5mЏ(q%blC6&Q KQaike/'A (zyDޮK.9| {SqZ\w +PM-{sroIۤmaC7\E|}c)ys{gO: ;-`҈ sB#?q{ݏDW$n^o8LVsb_"!CbΞih^m8E%^Wڎf71CU nN2YTk= ن"}Yl}YB{ua }1p?E7E\|gSE}H2DƓ@Drpשi[O#ՍDcP LDmyl5To]Cصޑa’k*uu2ZlHT:\8tϴr ^ƍpʣ7/wA= -yz)P FDha81!~#iyePyT(95>,sm!mioz VG*Fks?9.j#Mz)իpU7RsǺ&{>RP嚲%Ņ+#E Ł+J?yQyRWZ%Yno;XKS(ʌYLm.Lo\^ms?hW1joc?c*3S|5?̑W/\׾J͈ɉ$ٺmc\Ŏ-rWm* .Trhxp[py|aTMxMSl?pmeʶ= G z/a-z#5ʨ(;QzCeËlV;ٹQx^g8a#&9f]zζcs3N IlwszGUDf7 h3׾|Q6QM@3]Ð}7 |]~J=[VmGt"Rkc)հo %&Ek_rzיR<ܲ$)󜻓 OLk.Y]ZUbK".)-۷]g~ {tyl흥HCcz 948`RE_{OL͎' 2; ĚTޫf K%IrPyT/kXItDg9,:; VfzY zr8-"\k,M[s=atWOPſZN`~'T1 <CnIבd-bAˈ4*g6rϨ @9Jz)+jDs6j$$}Sߌ jQ \\MNaζ4T9HWUer,xx;E}Mr撾0zA#75́.ko_. DcJV#^uH$jkʾʓp+諏({+F\V:1t|upo9\&vؽ1ʼ-}%zƴw䬪o|ߤn)}ӛfl,+ԒvPF*J`:ubfʵ?6$5Ⱦ;gM3+*>QA]tItL|QAua;MEC CpamQ|$1m=9:./7o/ O OC[[jg.shԤ*[qxA**iیto5gI/Lo˿gDg8{37u#P`FL(.XUE7) >c ' /s=0϶%P.Xd 9&^X/F\74~ϡC\*ߍlBzǑx)f5E!"dn_(: jVW'dx]*g=י 6~ OCe3l4IqjP3"UJBE:/?Xf[v2q96.GwCma/eqq1~%Ymb-6P܂AY^lg~ EIGAb7+O\#ñ\g_$}9K#iq<'Pk?ѧ)?iR`6pKaTmޮo@'>TtG%s:LvBU}#b'xEܢYذRlhXۦ eZ-^{F.׫lT.>4h!`RI\kQ9^ˬHqk,$ӘF/ΩdS@[Ѯ/Li?~Tu$?͑3cNϺ=0yQ ل)s2NfHKfK"SӇgg&U%/%J1iEuƱI-T^P`9Y*˻OVpbIu( Kx3}ue[zPkEYA0$\\RpPW+s`+HIiiF~IU_Ѫ|IpkJnFV)~3FDeDl̞ahK3.KJ3Ks{sX [%S齗w.oBS\vұyVKe`IPY ,KRJGv )w+ی"tPMI \uB3=9:aGciVѱu:u41Uӈ;) /5*g{o|MԀGP/ QOW9Wlt 'O0^[`.Șt"vZb}Sœ.<']m3mWkNyb4wkMv/M \KOgͿ.3|Dv 4${]vL&pcyt >k'qDyip0ӭg!f|c]1@;@Cq#j`5 8ywF=BCv10~t!?5 Ho8gnfn(0uPk&ZY?ÐaN*F{ZN2TrT `Q ]0}=v8weL9T+񧫵.".ĕ J;/="dI>Jeqsש&o.OMj`M'B+8:(owC3G?KɜĕV\+XJf3|ϔ9|tlR7W2ݚ%gM,%F s8n^}.:_U䷼p\X&gEO=a٘vfWSRwE$=J}yPs4j HgzV~(AΎkش}1\<`]Byfe>@MljxxC^[Z#sO%ox1sD tۈ.*$t ƕ7QDyC>7hn:p?KAݐ|43+3BKElr5LW|9&"C]"  ?scd{qP$< .dѫt>Σ"#93 tykm"q!ST/2@i _\5y§cXQ)/ t> Rٴ *0Uy?'KjnitI\vJm3rEa!8{TԵ_YYUr/eP7ͷ ]tu e7eث3]tccͦSYӺmx 4\}CӍ02z#0|epG|Ʉ^?XYC[,v>C6:%DZϙ|ҋ -]||bxNw\cz3sv`9C̦{q?B1~z%K-cz4NU2z9 ;>[btrUl]7WHCګk Ƃ}t=XhtL " 7>$0 L6-0} tZ1 W(̙p33l' Փw1751)u7`z~k5 uk[qWF"<\?x&e+C \I{|mZKcəi a:,# lC$iqM:jʧasVx(ݑ<XA=.*?ΦFMzBeYUBatPOwzBB% #֕'C@;#X5Vz JO}2dnԅ$e59}ECN[Ei<*~D#/y(A}ox?=lr6le ߂BEF3To[$U8黇CE(iWy/|\!#]5m4-@޹yNy_<{}M=Â+9Lu W=D/WGkc+]Nҋ u50O2rϚUgd,\G'<sf=cO˿ngvy8s9POf+$^.(ݽ~Q%ӛKWf7)c?'=Ѓk, py6IL:HmSh;ݛE7#'pu޹&Sao OTGț^je;ߺ&>6VOut5SɔZbae7 .h>*fψia`u.zIML 9/8W㯩Ϋ5kKJ k8Lj6qƱYD*@Ꮶ"n&9򃹳c&<+(WM,/,Q䊿=p?]hv*H~RNҵ<*wQ+~ϛ=[5ゔZJVRŬ1#4Kʑ&gNA_vWְ/d}%^KF'O%KS֧8IV I/ofAzM%t9;(iG%=,o J~w&IݴRuAtwv9se]/~h+';g$Ke뫮(8p y yiIimm`->`8F*u,h? DliVʐh#U1O+To)U /=PCh'uw#Gkz.{K$Ɲd9*x_\<v% #z b~Na/]E6@>ؔg]0Ryx71uYWwj\zbuQZ~BϘ͘Ż`Ñ s}EtS_\V_em $J]=]|u ]%՞c7߲Y a2#1|z7WXpC|xR~gѧDǩlہ{a^|,F2 nBT-}"Q Hl=:Th j2ؠ\U}t!!ظC:[^zrr|EyyJPS5j?rnז7P7:й07x/3 oHc;ƴ~$mcSKhZehffb#MmwM/L5m&f޶}3ŞLsUoڲm,mzR<`%Ր (fA= gCVeoN}wdo#-8Sue񖅖75Ieqf+oo ?ӛn^^"+MVͿczF$^rDgBn:zw+*a*8Sɿb#:NW_Ѭ}ô2G|+!W3d3? k~kFENnrG{d\ZfqZ/&b`}ޟde @Ej4&ׇxPHGlInC xh L m-._3-=b⬲V9PV , IV:ƪޠ<(׎W~L+$]RPwΰȔRzEUΡ(G`fNk`v嗂HO[}ZM{'FaUiSRL3u[EJRGM:"v'JMz;S_i=D{XW`7}CcR;k?ǸjWykyY[_rp:2EzEHcm#kݽh&,.htU?*n[EѵNy3/ݗC)]D(WBԹ RLyvc9;jpKf%O'uMe/:awY`L15 F:<øưVTzG]/agH)MA!a$;y^noDz~QArt)ubCTN"&gCK-d:[w[Gt2u'RmZi @o `,P*r,6 --+C,T»:jn֡A5?< 705   U\XJ M,:Q3!/9+Qy3lDf+=8H`I'ȵHɟ4&{tHLLK,r<+4]׵:;7ǚvvtV94t3q3;^5oY g{lzf/WQԀ`.5Nv+Xj?$5%QuGZިΉsO+Yֺ;;g ^k4m8a&>;7?>%j-k+ .Mt3;59 wg  $ "#Hk+.x+OS9шM\ş?7_ֆ.Iݰq, 􎏪nOD+00G|=Qvyu.sl\;D#GZ|`WWQJ[~5'3BeND?IbRtԪľw5W[kնvOgxWza`oogʜmOpB! 6zC[C[G896nT |!*D~v,Gc W 1G3XGwyIB4+Ne-5 0ѱ(,U4N~^9R=Ő܅SZNpEtv7A:/k ZK6e.B3}'lLH^adja}NiieXe2JzE;V69g P?,qk}z晲MK& 6u}dq,9"y .)e5OKQ$(:s[8 6ՓU^SnLQE &Ko+BH4'r,;q-qKOq>ssb`?!ŗ%&/ #[q $`풷7]+)i.T:hu uJ]=2ҊѼ) ۓ']у1b29p?h&cBᤇyhi*=\Typւ)RAK5/5/j.T{p K<*i?+ohɤ]⢣XtZr%naʑb"3BFUTQ*)WU̟Vls^?] _ 5E<a1k33E3D L~1֙WP/C:fXUJPm d^FWb?uI>ISjF"x γ! ɟPPcto?4= bȑhE[.>,191&&~v2Juy X^ 6,W{>b%:,͎N. %Ul$h2ETIjRvUeGe V "bse=ZUsiڭ,h:YpV5|i\ۢzR>FKb< Y3'ceRZu]ۢC3-M~B(b*-c vw(W\Jc\0X.!SoPuŌ:a)o)>ۭ\#4ZHzs?wy! ,5ךOt5tXTz4@kxyA$"Z?ʛğ?Ŋw<`p#gI,w$ k_-=cdV3hUU |96{j IBl%܁SjIk idcI>8)1 /3=ll7َg?G.F~ m :$CV_?dϹ%I@Síh|H|C<~>-2/9azܪ[gOH >4"WL,8u_zPU2r&+=[p"%b.+W}0Bn>:WCُOrVsܷ.UQ_S3oU&mТk ]?`z܂/OvN?#PP({eCoo)11C{X1tzAQ=X.,f cĶa񍮎[TInYM:W]65۾g- UnһYᗇgzcbglw&=Qa],;΍M `zt}Å$&XVe G2)LkBT jf-.0lc2RS Yq_W*,ؓU&Ξ5C0h /I:piH{i] 7sͳ o IZuPԡ<+&\BO[gnWߠv[7dBkIP,_&! {m/iam`~a7ۍ'_ic#Wy6sGez?:F3R?9A.)*Ad IZy[(q߳&0­o5qB@Fl_`PW$-O U/."r (5H.!?d2p,'0s(Up> m􃑡nDơ5[ -QB.ZT&!w]7e:O50EG{[LrԹdKlb 55_"h4RԈ6W7YL~LLBc,d4ȴiS5+ d$ m7L'@&ѵj]oҝ35ި3[ou0zc&8;y+V D- \t %N;$~3u<X1Gjo 1vϐ=蔟w [{x)Aot?B NcV%ǘkH>^ëx~bc *{ƈ2_6]MEOJ8U!*Z % "sBf~Ag;x[ݕ;e)D G)W ;rQ6;ӈ&am<5k ;1g1+4CD?N Pisqᦑiih|ܪ!d>L{TSaU0cʾh3GhCC VזVG(m%鸬7as:<(nܘ $x_rMV?=4y$jzQޢ~NPr8dccs.4iҔʿJni*4ա `pl&~U1^.: $xL6ⷖ/f,POrl'IRGk:K{2a{0n;wRvN3Yn. 77/`X،xy":8ظ6p2йJUAUړf8YQ-5=qKN j˧Z\} d+̣i-cV.w6{&#^6#n!$=Fų j}ޱQћĨxdUbQy[=&7U#uDZء}tU uوV XToU7|F  KL v6Rd;x!r63iVL/Hh܎Wd/H j]ύ}{zGĬQlk/Up'x]duݫjWXc](t6s(l^i<3mbA3MEx NTKuOԿFI\|ICOiRQRݒ5Ӻ_t99xWH)5q3fYH) : g _Owys bcaec 0v0:3E.Wϴit+)h虌^]FFPf,'u6ԫJJTazM&anm||r=M1U$DlN%V׼2)њT &:3ȿ3()_iqCp3D[)KJG 8u\(]zTr5^{njzAS{8g*CZ <qڸS3 zcvl*WtmsFxeg0$c!nͷP-+֡V^< بomeˎU\ 0`TՑΠ,Ɔ}s/IjMNuUJ<6`nSdwYaN&F[KPI}S.j2,~qHDGag\"(.Ngھ=Ps"!Ǯv<0_%g[!?i˼jC!bVnhkd~ܒB/cG``f8;v:~5:<$urC0$Lrm0$ 3;ŲrIQi;iہ8.U{ 4TYL|R9vZtouk EmwFII.0ftss4-P;hV1P^tjUG] AwoA|H]ʊnA"L#k,`3 +@2T<ړ!cE[xvOQcܱ C}g){ho2'-!;21pt3w{ 'MhyYt^ʽ|Ϫg9sy=GD:Ƕq6Op^ \%1dZb|@麀}$Ub^(?ߡyM4Qϩt75JCME]s᪮$JjJcN{qÌ5F,#]>&f g[C CtXwky .IsUcGYYd/sӋga<4x ŀ6`Y}vp ҙG *>vLP{Ol+0J.kϑ#=P\\ݎC!ur`@s.r`nM} ;H\S=_Nt9,^iIzsdƲg7c;1ImWW>Ajh(X<&?>@ہ$88tSeC'{@V9 xy탭~<FS] ;]pG#AhL#/*X-$+(WO f OV`Gw"BA,X,,ɕ%=$eguqRX)إx%>4Mj,].} 6˔6ywJK)TΕ N*ee]esruѡۣv>hT] gJ2HC-ղsҡj?7#8ڃ+ɷßmb_f~;F/iUmL=X&^\7/(T]rM nn@@Vg֏ֵs2"y%g$ ]D[ؘ.^0,+l|N &y 3 :URju7TZHrT)M[;zX+ea#j, Ka&sbfz:\Eۑ1.]"a?ZnOk 9̧'ֆ;w:TRթk%=hRdYD'D04 fpHrn&C$`v&q\%hYTKA#G"{9S r>473~D#GK'$ ,7O >`>. 8L )a_&moP<Y"K!S,^*( G* ] mDK% TibV-p9xW$۔9LEWUNP(x&#i˟*3!ʠGiU.P({vC޴ Ead(| LW\3k+şEKE[į˔QUn30PoѤد%G"ȡsy^|IIE]B Qˌn¨BX?v \fZ/D6r`Xy[^XVxג[h" NqNdFU `{%0Qwd1W5l3[* I\ `:*NHbbD1ۓd,O:8۟C-[KMH>TRx!cZ/ZYY< M2O%\2&WResnC]r^Ttdw+%B ᓡ40U⢠&r`!~߽/ٿú"չ/p e8h9MxepcI>X/.ʜȞ$0Vtyzv~9AU^/-^B*Ɂ7de/(*]KzOJrҏ,ڴoJk6=+} Ṏ7ڳxUyRuQʃGjE猜K(y_oGg$É @=ua .^dXg |I̤c 𼶽Tt4>atPY 9#3h.E@bdtTֻxA)ht(;'E%[?|tȁB? #o4Sn5w5BG~5aSCZh6h8n׾Ͳ]B ;)rO!Lt.&3ŅP&cpbJWDR4؆XSo1EuHp8Ҡ5udU-lBW չrخ`ZL' H_t:Lů{1Yd0HܓF6_4bRӵ%+Q[@Ly[XNU g$)$_ZziG}hTB@4XTtW4J6H7+Z_u[m>6̍UΖN"fV[CttdzH `m5h4 j2_RlԾtE w0LPAP[o2s9R(\4Iff ^~Zy=&閠,zr亦iapԼ @.'+$B?!o WevN6uT\wU>ФԤYZaYQt?vؑjeqHJf7[1]S_O[G'+KV&KfMd[ўyzU>/djzebFJFš0&^ LXjήl&ªN^ ֞).6zNYW{:B d6/Fm)`85ܾf)}NL ȁxY,p=}%sZz֒U)eq\*&"0_!W˪Fsb͟E뢻#h8wv /]VSw\:[;d}y#q,7$&}J\v*\aVFU^etDP&XB  &@|ܯU&P[N.WźQEuCܦB@*);"B#,6,l&GX9OӨ{EG?K岿mP2>[`a~bmVztl O7)dpQg3h9WIk}" vzyHG\I% TmKzU8S#$3`\Y67Y@nFG0 lOJX,wt$3ɇv$݁&[Ǚbژ|/eJ(,\`^^$ʣrr{pVv2]y2V}%) &\+SShH:"LiTOמ F>LqWQY !U>%p?VG;w;R& 0E{1(s(-8%[7!P7\Ċg'%SԕcBྕ-02oq9g݆:w鷒Ʃ@&y5~)=_²egoH[.|]\2i\2i+*#;-I??r=Qyمa'؆ÔUxM]ekW7SZ*]VAFYǃqO|DL\T9v;*cczzRph-cU1G,hY"'ɻW--KlK MɑUܢ O7pUE?9d > Ui&zP[(:^UeeC#M`ZBW04 oЪޅI5Pe oڽ]Jq~9林*erye[s55mY[KJ;m!+xQU;ڍ~+jEex\DPi*ë099d| f^_Yzy>\CW[]mAanaIdhTk11U,"kPT:RXEKFp\NfzjO\+WiBZ ?pf$W/Dhxu<^npDdgK*s.^2=[ݡ,WU<ׯ6~# /wrym|p,g)ovksԆoKsB ,pykߍƲXkVWu]Ͻdžd0Ŕ`1|%BA`e0r Hʾ]LBIeg7"v|#SAcJx 1k -dsQݹY=zxgcF؞ܵsқ(hz4Ut꠬et lf rSXJaJ寽G ٕ9w趔 ֣.s48k o`u4-9{ WY.XF;;Tq[]xqt n[6ôOw_,sMxՅC"".uQt a~/fb7#me6|<5Nhn1rL]p9W]fYf F fmAK妵tKͰ=cU~ס,M~Cy3 HrNU""~)8Ot -{hW!N!3}4ɜ,(ݱ߲AOIj?BFr|ؑCR9ΟK-㭐}:yߊ]vKRGaS<r阩Ȓj X73ͻu2P jI CVaȳ Yґ6h/Ky ~ Pل΍. ^5ۻnvC$d#NqTDGgi۵jn^Yx$*ui«±VnCXj-kNFx'!GEj:!|G&,=]}݇dzEYɫd,e ɮ) :,?/]8N_|G< e>d bocUeI2gsZKzty6a轨~?xn~C#::%_jHPsT.# 1sE%ʌdᬛ"!Oji{Cp@WH3!z.sOizw42Yf ܹ~y .քEmFűE[DONiȬ966qk%aSѸ*H*ns<8>:_L\dvб*; +9L2x o(-Pb{3 _m[#Hs69^+;͖WP-bHWE}HݖKj &Wgx>v>vA[ϰ8?,z~79eZ~6Qc !q2 y$obae?d{nŬLu7;QP'|N:TU0_E͂b:|NcPd ZuV׏MnK ]@HՐ':A1F9ƵdA/Hn%G`a>.c QΒ3UUf ":5CcMc~$΃dIEhc} a橘zк!U%0?[MUg\T~)34NӦ&3;uSuԱY;R=]pE5v編po,z˵;OJ==b(=&"HkI_b;|I &}3T҅HgVM)J%oPqŒ.Nۚ6?$UZFܡ .ht֓f sec'R3NM4!c9ݒ(4F*]n,[vɕ#_rͿCAuK4ILppݲwk4_?u0fo|,_?Vya9,/Tmo_hM {#xu':`pi~qXHbt`Er372k,S~4|xno&yrI WejB\ 4'֠݊܇]79ڽPW\\Av'f׽\ w+uP9TZf^BrHukuvm.zrָi^ssTz(w~HC/9S Ϥ4 4U IKKFI΋߉GKW wxbE0G Hj&E4t"2ד̴vA'rՁAyc٥)̈́*Db9]Ppx މQ4;DbuVcn[n,~R. t>:sF{ )jm/$[=V~B2WV3Ke63w?"$i .LoT^(cלԂPU"g{,!4IgVQ+Y1A$C7]#ʶUJ*Vo.> ?d~ S^f52bq\G! cSY1ܥ@Vؠ6ޤ7Mڸx]>Ca[}lp>RNBNY{4MRn^{PzFvZ' v&UxY5ёcBӗM!;bf"1S3nԵ]_x,qooCiFOmuE6xUhX: ?ub/\t*k4Qq4-*$$lW"D&Rr0q }`6P=Od0iiWiAKmKKԮIYˌ 6;Xe)[\-X8Cw 5޳\Emm}`>R?9n{&FWmIb>ϳ)d U!`dJK@ }\*DwW3M[. rLLgCG"Pd(o(ݏkRIɫTLt8QCGp+_D?b``LPS"Mrlom:ߨc|alͰ6M 6[FX[tp3Ujk tuuQuG~zF7K8FBP;U(~-Rm DOGf@q@s6Y,նڬ0v f5,O԰mg-"v*yH(Pѕ{Jv&i"ƾs=m"vfZ/`'PO Mf1бllu#LoΉ-ݚIΉNŪb^>Ao͒<كvu~g@II$CBJV%ʳvyZO}ތuu79k޴ڄOoc4MK ~cM1<M,9,X~*+[.yyBU)WDʑٯ/Pi #D.y~6k=ϕH,Mf5luug!dޗvzyga"=F+j?#NuB!x"9pxkb=3M͛}:si%tI%7!A1\xї@|8-W7wVoetO.]&Y'S6~1˛\`RNJ<$^#w嚟F^%OtEsw@&*TsIt'l7&ѻ=h(+|L#"o91+x0u=-nȑ)q5˾~ϗ2m#ߗ5M(kKMkۜu2 E*;;&JO*h=ϵV2QU,:oyNzGuP1j9>p~i9ք^"_boᯒEET A\Zܗ2[[P,,h{ PVU_iOysKٛgp)v1ԯ`#ՙZ@p-qb5b[Cbq1 ۍJG8nz`tm ,zWcs3~E1v$ȁ=w׃6i2a="73'ٷ}IxPϗG_ǒvi5GBm!a?#v}L{iÞmquq+GȟP3o9Ѓ7D+M^:f1Őxge`^5eb&<ט'r#qf#h.53ƿ^vÞwᙓj%7br9*)܂ey7K5rꏹvfg9sfǹ:BV0fqky.Rl&n!()#1;(s[c Cilmd+}j:/˸wO9%,5\b#yH8WR:*pƴ"#&mGmAJͨ׋%m]=x`\opFw[UtDN9=N\+`7eU$ Lّ!ewf4jicy d씫6I8LmԦMYӃwe7kJo*t%vTRp/=vݤwVͫ>ڈB-mIxsY?紝ӊ3ֲ%zBOVy4l[$JGϒSI&y$#1OH:(0].ϒ'i7c 6(`7чKT6fn|hJ.#&WǵNNў9,ɽ {= }U\!u,+"x{ 똼#IxQQ~w, bw~Qj<·N9n9\2>X`J=ߖK+.RgD6+>bRKP- B)B? =ByIw U{3V}WSog%UO䤥_T(̎:#RM[&}I|%9\-x瘨%թʦf^HiMݫK>RO- b| ɍ S>/}^jWYQI@>e0'Y.ZPo}W֪/3whJ3Q"!W\.+$QZP(W0}NOP,JOHem&5ŁD\]]*~T<oԨM ۦ?(H4f( {ɹx<3+s&|ηΏqb@)߽(|[ ɌwE`*&Ϸ,ԧ8 ,dܡƲ$*5mЍ~BH}wGԛԋ3b܀u'X:@I{Ⱦ0"H|41DlaZAou|IəgI/#y_P(]D0-$=$*ZEQ:GmEρ_\s@;;B gu!xW*O+1~O|S8ه|9)ӖiP:0M]򧔧M1jH ro H5yT͂ҩ)]S8Idt%WkJ"~&nŅsÓS$J)bRzGgQ5U*EF SGIpWUxzle)0Kg$Ȧ-+𙞕/ִwLeR BylrtnRaoIAA|5']5DU֚E;duyU7n- =}Du:BQܦaSQ[CL TW\4~ nϑ ]P#3S '`7-4ذ&P4Zhx#ON={ NyX%"+o98͡{_#H+\R ~I\DO|ͳڻ >HYվgGS6+aHr{8\uCY{k4bowܔy-赭[ @@zgŵKВ2YY?_8| T!(@ )-$]E |ZL6- ȯH<1K#GS6ox |3 V 2Oʱ 4-!B=Qg4 E\NµO-~s`o8MeS 5\Kut 6 uWjFw+IroF^t2>O3?BWR4O'?1[YB^Τs鎴ǎfvQ=e|Lf/4v@CGA+88dm7Fq7BM84FtR00WXp(}QY0ѡ<ťt@L΍V m#>sǂ;=t=eaF/7&7 Xru6n;g0:}5Bm \ނ)x=q8&ydL20L/5-һW|["/[εCv~fʪU`lOOz{$+]v4: IZ k_>?%I~ @ԋt4#%&& wC +GNZ$9C ɯG~mP??g-)V8K.FgDZZgȱ\^e0nn/s$}/4_t˼a,g2ÙTf {)ce!7q6!W{X}<ñ5f^=ܛ6-TOt68Q!ʌ3ΪÌԭc52[Cwؐ#׎ꙉ؋h2*-RdXT RmhjON'((v?N'g5B+Զr&:A;ox,w *yFމ.L 5!sRƴ O3'F J-y]/jdi^-;g4Ϩ"t{J^W;9eL^ҟ}3FW7ɖ%x;=.[p\m2 s}CVcAeQU'!D$?[*"`CZmtvfaB)d3Wpw~$w\l-ۆvĨ^BG˙ TS=&;h3】RKռp˼}O&u+\dg&ueecN!B61y,`z[ *{ނ_fb*0_GDyR{?4ȹl[kuW"ºE,c_jfjy)cNfz1B, )V"s;ٔ=+b:q;Ú<9&Jș48S)thqWB'i$(FN7*mv X+Լ4 q="[HFu?~]ύ?yװ=m+E4PW.-~(:j:tTM@c?'Ad7KE#k9eu(,G(+YYJd^U_ s^aQR O!-|ǭUw~5|` : Ţl.o`+2Hq4kwvBG;^x[..H^b-t&xZkv]=_OGuWmI=x; Z뚪몇#Z, \$s1,["E0Oȯ_ɌeOa]U2< 9 \Ȣ!xkθcm$0ł&Z ǢaX㖥Ao!if,8lyVqnoO6c65*{\[[퉹qTG\SSujPQ 2<苽C;`+}4q#O $F ~0w1F51\4#'KVyy)do~`<դ;Z.ق泖Lx)=g-X$j8;c_`b/3CGqӽJ_m'|`Rդ>ڸffvEZ3W#پ_զ˺+&(<Sh~Hl2ƨ@ejzmj CY_usl byX u2PǧOi^"Q~4q \WJAYd- K] [.S5i&؉ݤOW޵7Vv*O{^h $~=̨J=~l'~x\䍰D40y*\ʪR3D<7g3m&o͛QS=E:IK|x3xcUXv ކ j,[Q_sxfƊB;pB q$M*ONȄKGbOG-Gn=;y~)^o;l7s3XV: -, gׂ͇AW7 S끓9&s8D_u%սf=lpNn!%WH0{[T<#l+VF e|SWq6\7 {$MH%nMnzzv؆; 2F1^`0\~=s~9y\;r.f-*YHLf^ >C۩Caa gK.6a&:ΰsk"RQ(]ˮx2]ߑC! |;mFC{u7KFQ7+;m8I-?:12s;==6"Ǵh}c ŪPv1{ū>Gs'6=Tcz;3c6Ґ6>k_?*6$SEso m}y1w&l`o{3\o]]_;ށ.j2Mc F$6f yAv!1aX'}oj63=?)TUuVùs.Wm޸ӘlD'7Yb dǀeMMk|N2CK: .7 n3)gc0NŕSƊo>xw~<ޠ7[@ 6|:L֟ꕺKv_*8G19 z% [{ ]2I'}},>RVJ36K%{2KeJe-󙝳:9rlV(exh,|v+7\/!J<GR_gճ>p-%jef&'|N*ڙ?z&|0 \ZU6ܧdخ䨦B)PeWF|Z MR7Ԇں>Kčf点Vvj[ҒO_V..UexFɂ20|'l _7W*O,M ݧt|1{IGiD͜ z{ 9doM24*5@Y/܆ܶM;,f޶yH!|vU(9EC[8^ %o~|na^eU@"۪RRLĪk ].=+L4* <(3 xx1f"Tcw߯EVbdB2߃u4p+dRٞ\g}@7ʾ&f2ہo f!_1*|r4O$_m %+7Ϭ>-RHHuQjhg3BύL {5'Q.Y!(JAK ղuM|޾ 94mM !=S4;mzH&( &!{UzZOZQNNޒxG2 6$rq_S %uk6!c3BjSd$1d勠䴓Ɉ$d%ӨsْъCDKӒK=,= #)_T\s3,sEWk̢K쁡)I p%XQ $c:'H%i.?__LYx0Yőg} սh_7"o*6͓/k[^vqiǦ_ۣɴFQCI+^^X~98yZgYUxW]8|_,0#TYUdYV4glteʚ \E/Rsw(9 Wy`~ܮ6fڇBSm#uHf I5uxd:-3w1tǜT 0'2~9&cCөDm'ڄyGهc=yq]9S9m($:(O9bGƖ1tL| J({|FOiVlPOR> jxRr[ 2r4#/r&u,heӺuQ?ָ+T. ~Yҿ<̙#d0ӯXvA`[T\6DV5W&U-jM>Iupo),d[3K#WMOK W ĎgHPle<2hVzÇSn!_~_ihf99N~!vn-^GH 0߶Q%Oay ~wNh;iڕѥJE[TuZ|)iO鮌2TͰ׊efSN*(WG&asÄ# {ݚK |_yZy-t}R^/VxR\ ]$6;ů:pR*2B>?Ƌltc[xĔ3]#V 5 sFGg?D O!^(11BF@ξ P[غvfU\ Rzd1 3#a7$\/z2W>BJ1db_pbk!Q>wOW0=B#gg#{=:*zl"^jWcSdYs*^zYCK3lV\"r J䕙5ӹS>fȉN"]&,53DQէrfa1-ՕLi=gajk(ST{'Եaʛg]o*Yu}(I_ijg|e$TX E&k5c~S0ۻÿ7?}iBdP1ͱћ>_m{)-mWsmC"G=~j"f+8 `Rz`3pZPD@HPgibfk;g iub_{&qLfy۳w >=l.==/#on&avZļSy/kavcOx!>4/%va/_fnwo&Pjod`.lX|LQ9#8g9.#6@{Pj_۶TI9VerhB|HEʊFln(E0ަl SIIr}^fW~|ۘ;8=/."DRE88\m<oCygFf#4p`<ۏ:LRԩXwi}ǚE 7 9R4AҲ z ZmGvep]*5a S*V8{r.ތGqI '`K@Zql\z09'-FI'_? uƏWzxB,^irG-%gQ@ZH -.!k^'8I-<@o;Tꙕm? {M flK>x{-,yeӗ za[ruNB|2<uwed^*9/í!#+'2 1ISuaMQBi+OX3QCm6|Pver4Z;e<#SQA{tƩ* ~>+wpp( C3~m6ת4+ Yl=Z08 t!KBNQP9pӖkam ]][ e|Wqؐ:J]T4$OwMS2`Àxq":|?M U'3%H/Hb B0Kl\eR.R?F*FeFf^u٤{zƸIuAy/'yj )=B*W&^tB:˗RկwޕƽC(fT:(Xc쬣+2\&EtcG!p >0":ܬY0_?qj@T8RY$TbDJ7A45u{^$) 6X&~b,k1{o&7ðO v$[< /0d0Nr!٦_xd:0Y($c\cHvDOg_/cFI#f3i+׈'z{KyR-YDU!x|Ζr ۝R*YRΒ$Js;T4K哄u"Low:J[<#V 5Vֈ}bfG{1MW ;<w>ٗ+";}y=I.f24:5!7YR>w\.YSzl@el9QSlszDx?BtfG.8Wq3֯Lrue~zEpqa'uǍaǝNz ~%ϑ 4mOJ4m ףhJG*e`Y3;L6cT8oR, hQq#F0/*=|W.MUG$ E'zZGt eY80ʒcPcK9 T2KnOT;Ֆ는ȗ]'-zA#)gEK[`OptuGCMΞh 'Œl. XB{VP+n\-f+>?W|̜uzN\Q>Ȕ)Ožv٨JD){GZ(J{G8(80JR]%tG| xed7& #;n:=l9? цFpkg-BN[7Ivppa侞yu2GBBmtAZNy~sXnv/-]52 2nߒ'dU{v;fۛb |r>W=?އȃ4.@L~:kl@,tF"_&5w4LX,)^٬Yi9^3÷\& 鰕Qy-U}d(lgs|b2er}H2\ cks+uqLP˧qx*^-ޗjU'Ow?.'>p8ſkx}#+ra) 9r_8HélPB,׎n7QI'⪇!XobAxW~Wja% 25;ۗ+8޳gxѹE sK17k''H~t+VNh`yO\NiRPAsV('-|-N=7tGtA1&N<02ygy1Xmi͞7BȢHPIP+h>]0gžT;, W{"809)vߚknHޥ@I]>,pr) yxꮖ9g'S*O W4ItƷЛ<]5H-qWAU+iJvb.B}, XlPSͩQ tA2Fbtw < ns"_ 71x8ĵu?ڊkZCHPpCdMچ%Gj%߳U *+a%"v9$z0$7#tbO.O'$Y.GjJUЧ[9Xٯ /T2^Xk$:A\ãލbp|kgdBZhtc ۣ5H-@_#5mq%̾7@}˙+C<ה.~ȿs=|Ge| wACՏ @rS_\-ג_$<3{t$DSs,a9G?EЛ*(t ډr8x jd\P`]lj?z-aXkEY~NYqwνVw4ӼX?RyD;QrVw"pQg [(lw?bD, Y:fulؘCѫ =&r''~|b&:bc1^LWƒ<5GN~ S޻O%jJ~myb^ze?9͋&U+ 2o/'?WK(|5Dl:I pw뉰#9iXcauEiȜfP6q!$c#VC=d:rb.`:~xrX:ř:F~ ;L#]5Sb㉽1Kp9P߻;fG Yy l _/ufW{7zOֱ>r%^Lq,`5"NJl]nXn-avbE\FJ8s$4e*W|}9Z&.;Df#F.@>$>NI6ZW[#]K;0(y%&x:&92; h%JIk#.Qt*|23֞i$Tgʉ ^`6:!`@9"C kfґzdz!ٜJ\$%hv|/vuEXJ1lkz#d1 [/9KXr|:j z.89n K(1} D"{ Vk;{g2Gv~=&lGyt WGXlg;؝!nd FdwXZA:ÉB }M䭞f0B׀c{a^5 vimqF1 "sdoresi\<`4 )I홝7hQWs?6p9=MlCl'R{(u:OBFbc8JyzM] K=Kn##o34{NK^p[Z C87NE!}BT"-!7ރH%^_ 5yXYefNrڇyxLN$>9h MH_;; B~$Ƒ{MbRN?l8kP +?r84ǽH]2q!&pŷI G@{հ,w!`m ?ӖXXQcؙF'JFg}P5X\k)&01vl6Fgl8gM.`?6ᔱYbu@>0alțzhqgg6+|&'Z Qa/m{㢃s.liÛG?+85ru;[&\n+wx2Og/":WA:,(*Y_V@ZMw;!n6s͗;{)%꓎jj^j_V0# 06e*5?%$O}C_-.cmCZhG+T3R3N{.8LM@ĴpėZxw&OFMN Mbtg6N׿Nڣ +d6l  1{DWv=):$@# # כſ`=.&4 N50LDlT^Cm&],HL0a#bꪳQ$lRUe^S2K%1r]B'>Jcߑ/`ݣY)ݘ Q2OC3lk E0;\_-dԉh)a#.2I Pô4(T#Wc 9 'nYµҹb <$#l@M&2l5ۮ$ֹ# ڥڷ:!{BB1P^ B_ JOWeR~cG7)_K<[i/ȱx:<Y~ʶ>hBېd ד7PnM~6}50\Gg*is_+lEMY"_:vPg& ەm>n`hXmY +1%d'Q|]D%=vW|C2.QMBJs}`j谮_#u EC _ݣ>LLUxUժĜ%;<0>#稭cM~N?zU0mYC>jQb+f++qSBQVV-,Ґ=i@>pîD?KY#ykEM M^yZMn5;r6&3ABC"ȓJ!Sb9Rj6veqwIjcWqm)TB`4U;Bpm$S[OF|=nl/Qx_XuͦR)v% PXŞ!߰ H?69s1Rmd3#G4my<_4I^i%]Nc?Z?'pԥppY.a,'bCd@0n騽ԚnU\r]uX*܆$.PS'C4pO&\$UOx`j%;9gby%p I;s{K"L)`ϽAdAs]+J>;g%הhSΛr\Flsn[ß$y'J4*UJko_\&腝yi;c_(?ݞ_.RWmCߤ>Ͼs=Tgک?hgHW\=|YPmeݚĈ rQ]pHa zNT%ǧhiMsӮzho%o3{SƱm+ uI&i&Mzr$Griڤb+PdHa:g /0a~nU?b&%>5+:濪]ec8r&p')8*gx`]{iUͰ1P'PCdm5Nϝrcmllýё %kl3MCZHVZF•X-izɮ H\fPwR-{$z}W5TxΟ B:bfkkPO+ӛR9^kuuhpSAYXv,# {_9۳blýqiHj-gSȀf~x-lN7CP?6$mwm!l;blymqkiO*c9csdS&%Ϧnދ"}3ߏK 4:/&ލ)0ΜMJK$\ȃ/7d)AR^T?QzY{S~dmv&J}U%btwz G0_5;vgnZ uM ל*G3?;Z$XsoށqdG Z_ 4Anήk IBI|8al4eV#-mXIc< InD R$ǵ::3ىt5 5 6Wە#T [1`XU6D+?VY]PATw~(l1öͺBc\D,Awu#uk ~fװSo1r@N8)w_ 67znEz!EwEq :{:rl?bzVK t-%R}s@l,{ߥjkۀG`i8) a߇FJ Zh@͘7::ndzt&Ccw:'2[?W'}ε|lr.n͖fŊ' B,>6 K*VsosyzW.+_:YĺX@` K''66^)~)u*A岊R(ȚB~./Jf񽒁{3]OoF 3L)Oè䟒ߓ5,-%;G4:b\i,Ee~+R>Xu#NMާ9rcIff宧JצM^IzQʣkG߆WDV/Ye|]r׵(4Y]Չǒ|e+I>>h CO#ٲf9Q&ߐ_CQn`7}Kl|`PE{`@pzKd;{VSϗVHx]ٱ_V1?4!^ں7F/u2'Èi1ʴ eǤuSj=n1 *b.h& b:wLZՏK;&|XvkIҁ1VZ F/_(-lϛ&5b |Vnb6ɫ)BV骉~JӗY[kbU|BڷYad]m04pI fk;yzd5Qx?9bSh߁l L'a-AbW8R/ѮTt6mΈ@0,@k9uUo*n1XYx`o,` v e^DROJ9S鸒"ɼ)#ٹ-:|w(?9zH N6>\7J@=։NARvlBFÍWrHҞ/IYGsv>raW45yӠ{K~\ěTֺ}kuS|ġf55l&t}eH{K hVη_1&QhYū;@1`{l6_$I~)WP !L"2\Nsĕa|J34v]#D<2J2 |0|fCϛ42U+T*F;a$6%wqtR\dX%pFjGۣpؾ:Jzr2ng}#ъPmmeVjHN&8La{~XbF;Ll# uGwsEST`e륅JBQV\6= OUW5k XE sdaDw>(jtb,~;N@8D)fruYsrbT+jo+s~rlgL]:=pC? ]Q9z5t[rM\ hHIcBeڥ'H=X[k VIo ТZ8ᬼiRU}Dkg SpEo8Xd8x1oj0DlޣP"8s@pj oH>;Tl~>j^A^ch%_Gk1nnap$Ԇ"&F~G7gzos˙Ch+&f.Srb򠨽[^l0.}mDuC {D/FZl-;-"kюDQgePBrѴVwP2bg.ڧTdy Gܷ0'`I8Gp[bۙ l+[xY꼌Tڑ>6?>[Rd*PEL++g~K;Ȃq =(W@@gP;3tr't,/>翜TkU2uIPLt]6b@27ưʐӂRɽnԳ2wo <vn#qd\:³z,-8ʨ]ʻf .) Qϡ*gtL_e- ?T"r`4vA|:\cUm?V?>r.k"c";mApm,6zTQRnFGIdUf]ab_xtr}:0b &hBe9ki&9[k-arlAu3vg@2]m5"D9 nY kM#d|nG0jKeb|%I\p8C( +0e8 >ۍ,60+F"ǑFxq~K^`Bd1'wfKƗ0&KC?FObNް*Ino}i/6?R3󖥖}Dqv덋a QGtNPl,xU̲,-g^U<(W:Ax~``p=٣o>Z~򎣇_SakF p[_6?S s&DǢC™VjNovkeXAhf.˲g>̼{L+/\ܖ[ *ynR}Hm-&j%M%/dԛY,n[ &UX,:*cYtbi,VeΥ!~vWuecݧi]M[R":oHNWRaj[81p"3p:VT[|OzW:~{ 9^J/>~ԑUjUp<Ἢ^Ny4lZ|)צjhv7z\۪XU~"SGg,+}n5qocfhN~l x!0M^5&j*@ @ ^6[9 }~ Zy|U-qJ7|ow|םvXǢ7y+y|Y./_(,9Pv]w ּͽ~(>s4m[n+fk7N yJ ('νe7DK0PCZf#BIIkn,:]=: (NqQf ~ {n7gGʍoOSX| Sש6Z7sV֛q:2Dƒ/>_ژ%b]cWDr~QVzFk&FVcc4E)(eenvn,{XN~^Wٱ|I>+rBFT$i3# IfCUh8x}JOn2OB<?v뾪pZ#/ԋ+wJ-[ wϾ:j/-G?!ױю*-e+ĶbkcCzH-q mKΧ}=)I c TE>cC*;{6]PR_%Jvt"4+ 4Y+~5()b+^taHXY0ՖoOpSa͐L-zT|ojnOR%** sJ,LXi-6;'|%yqH؜ o]b٬/ӶeF;:T]炋3ymZ+V6.S+0%p.{Ʈ4k1ӑZAꭑ?0ꗽ7"p2{d$QS1#*ʃSVՅ7;d$|xu 8f(-Au '[:wKM^C/v@ d!ߘ!oF=FJZ:H2,XD㸧)5RQ'gbUCm]F$H uK~vwA{Z:?O!ҸmhmM,2oY'IDoȀXβ<--TL%S[~xG[O8΁^ְ:PUغg26<8Xe!sP12'T nysqZ:9ΓlbQ--H1޽Ww?So,#\T'*CVeZQCO5NjRL3Oߣљ`j-o-[&6B7Hgpm RcTvn}ԾNW-(ftnHi79-_gm $Ozf=o*")|g @~CQ!z%=IVb8Vr_!?Fu2-+EӂgO ,;[ko#C`X,n]J8WO;xݛ{8g'ڗ+6hiWHh]oɇ%&ǞNrXeaL' K?)$&}/rǐ rdg%99&€6=3} 'Q$g-n]> vkjBh +YcE߈w-9Zח8LqL5+;1@&ll-n8SyU]_bs{݊F-nn^q`lM~sF D\6T2;*T\%vpqg؎Ro"oMM6^6$21磀3i9wtWliQr H~GMNG93tcIa.?W75ڕ ht!`?o<@~؎m t砗 [`ہ|n"n‡mX>˟Z8/.f: !ezN|9< 1(:-#Z/Z>m.k|&vV %?O7{h&0o֟ߣ }lNDo~>Kb$W5tѳUտA6=\6ŕ+*S+yY[l &y=;ggrH{pR_DPcxl3ס v㕌 D|G.vN`nj!z(=O`#u;z:x61@Wd4W04:JM@ʺ5&EY͙Co{a܆HwV w۽B*eo1kePwaw&L z:S9E4^xP9+҆Le~wcj6&# !_ >ri)홃yI[?{gOEJF5J1[ڴe4{oR;g=xt/REiM^˃D.\%\J?$wԽؤ9iXSXUcզH}.4XrSъԨƗ :ްvi5X>Uzgl ZG֚Ȋ#k-r+ FS}ߝ_8HE쓸RA~7C|{W> O*ڐqgͷ;5Y3_6|@6SG'bYj2lĆ YwYfv>0. iJ䋡J.2U<k 1X#}ٛ1y!sk  xErEP`n'G?Y~7%#=e*6T5?j8)`` ށ^YpfU]$t^;[~؄^){dwdsz#HW4(8..tݵ zf*UN,LrxDkm3%8Jl#YL0b3KZDF|A/IcL rz>;t\_mxxbSweۊw{×an검OWcQz\?/m~Wj[`oד+Ԃ c:@#1/?Tк&c%:*o㠚)**OOfF ު&BL@NU},Z3ÝOrR_\bam{R4/-)fJ?K9'OK c]yJKM:^+nfP_x%ȍJ3+[Ұy/5gkgʬb{CObI R*Z%窸ˤ)w6ֽd}gx^kFvFO,h)9)~" x&t1r>^qt"ЎJ_/&Jjß+ϔo-]-SC{1fY𑺥?}MBݫT\M>s5T~\P2M͑WY̑"gb,iD~'en;2S:?Rm4.Daf!! 1pAp{DG@`S>AN2?߻y'sw!qF5V6?S {Oek:ͿJpՔPw15#{Y>VQ&8^xJuD@k0ҢЋ:a;KzSֈ`ӃuƣCKfW899T n]k j;S\37zj.)?Rm&qya\s #Y.?ӽ ~qy|]xC;;[ l"^tB23@B;ڽ+OSqԠ2TMS-LRQe*\"M O'~Ǣ–I"P#|ٮ' b~9mFVn-#0o_Llnvj5NX?E&H.PZnќ&9'+$J9Bmi'S٫ 3랔`IhzCc(jdjVř*QߚZiIC!bm'K)fiѼ`7-.KòIjH=\/Ɋ6 dSl;VYo֡ zot$s,ʍvI 䗜!Nk 5<; (9LYx ي @7dZg:K9lū>;M[,Qgf?ѓwT;\Tv& kXzp8B={ S)D3$c5 L?d8w$>GXdTVW& Zfv]wKq2|Zp\=ap8sݦ8 X']f{' (8TC5UL,kk#1Le^Aj"Elt>RDYOV431 )tBYA5QNck@roo{-NWtEݷG٢P7$xnAZxh`m2'cQ':cXk·G^767N5<3ka,vN읲~ a=;%Jp?ҷ9y%ّz7}v]zcp%3%{`vl# XbkcQ,ZɯI RV*۞QƉlMqqRZǤoSp  s6ԉcK|ھ1#l9( "sF(Zt)ǔ3U͕j7ŞtbTZl_mMM0u뻵$,U.%lqb?cdKGg {8M3MD3^!Z(,ybQh\p|5lb P|>9(P܋E hmty}boh *ܠ=!7wYlIZU;̀:h~;-9ʁӆֺ?"b dsXl檿5 u(k P\B]wX [ ByBLY%U ρ0xœv] 8eێiG#ǡ")ŷ$.QD7YhtMl?Jx%d-(ZWtr\V~GҘR~Φ\u#OӰ-8x@8VuZ]vbcx=X׷E啪Ț@e*y{3r uֽ- G͇eIIvMQ9U*%3=įW{p 4ե}M__> T QE{0.<-7s¹Ygωz: w‚˲KI;kmx"s  XrH'A'}@e/_drߒf,mzVYT֮ R>]}e4?3^/˻+pfe^xɶշwH(o?B/Jo|a?sY[wJ!UG9H=wз?xV_yk>;9kl_{zecVBYQ,d8n [`N#Ո  8~Мle _c3 G3X.7ٛT,3KLr%ZVv<]{'WbXn8.72QQ ]o= ҦLJK`ߓ@Ąb6F' Nۮ>ַs)ѶrMh|#ZFyM|I"Lv6N`, yD;0ծN71?1WkT=j-4053\3umg9'k1f0ʹ̝;cBG&NZ?kBN@,i, {Bt|r3+W j 2,os}]C?G ͚w"䓰Fq PH VїKXYi2FT,yH90h~’n}g`19Y ,v 8rӌ0x Ɣ i64ҽ϶4'l\.; ;"fb3/k7hVs9 Ǩu%([j~QԬB8 t9eph==mXh61kt4yj"#-zUSNfCmnғGO3d6g?GVq4V-wQr^`\!{ɽ̾ SXEBlzZA>kʫzsޜ'”J܋_^P= ?Ht%uMٔ"6}uuaE{Y})'!?34> 4Rh0#u-upuRkp+[ٞ^<@aX3?Umg"?>=-,}N_]Kr?eZ`sLVk|ff`@Qh26 we&8Pzn;v;+2PWX*:@6Hu o p#:] fy^PS$+Zq|zhXŨS.ULhXM[3 c)6P5 Vn)T~7uo|@H+qtѬioXř%CEY?v!hjפO8;oS;n"am ~S1_ Hw3Ka/Pu͞gl=h)8hoWg\#=ױdž)p՚tu[?d LKk@{Eg~oN[ +A91|q3 T)%=uc-M:$XS()$ hm{ }j;V\S8wm ƤDhBakۆvwxZ & MF}BQcq^vԨjf6pًwfGW71mqILN+rG/gǥ븲awºȾ~*;CcƂ/׬sn1T)C(m2WSu w=ψixc":o+V/]C44K퇊_1Y^=bL7Ci_mZJiYpIw'SclŒ~̉\N*: 5 U!Ƙơ-J4͡%PŜ%TgS{ iḗ2? HK;4㏴'$|Օr w{>:쉼=AX-2h+~ @Gg~)IOnhPIJݭ0_4N~40bBd7iVKY} 9 ȁjۀSzQL~Z gPb3*VVS94<Ean_BL q=;gMS}}^xfީGxmݴ~fSG2Xo$hr'Yt># '}(xdd<229FQX|wfG'7KZf;Q_ŲI=VBF{ʘH/.b[G.@V]U~4f:N)$=!T|6I/%4/ kri]cq#^ůaks恠۽=2lԚ%LSvdx҉?:CI1oկShm8ְQ]=%&ѹnS+UŅӅE*iYhm_ UUl JUo/wR3z>mJ͚s;]Fi4(o6iw~6}IQwaP7/W)NUE~w$<2,yܮ(ތlX'Y\-183U2,ҩy.aC pqi C?>M~9Km,%+m:/{ Fs2[ aq 7 D] Ef˛ᷡLs C-bL<&;[Ph¾<$p.vVù.g[b_gVi8y;bU~: { D$==g ?F|h?X|]%gWsuO6Li{EV;b;HQɂ[k45WwL2i/#JOj6!8Rr^mW>mfnPZJAlG}w=='OAٚWŧy {"YMZ[/K9 K%zy: {oXC`Hu  rV ń2I9_2sVB3ɕ44lN5Ls10~gzyzWû8ֺ }[K2k7$ nڑ#YU;-=D[o+ eYpgS׋*UR&g8**p6/ =%밚7}iSjSm㬏Q#cJzw;r}IOgYfSK8G BJO5h!4i)S!"@hgM@ E:K4̜ioPZhvxgRYYhx,gyI<$'b:e7p,X2)2V^;2~fTOu5真l  IA+x6_a+"v03G^˝cQYgjQ#O=sѱ/kjLW[TI5>w.wh >;ڻE^< :%ǝ@^o\4GO:ʵz0yеG8FA O  ts@)j +Ml!Пmbnrm {~~UTX%Tl˕ڊ^`1Z+t2yuM;Kh6A@ӣZ)+/=͡^cr *]M{maYc/s{YWV<%7 ]=\*ayCMcZqLIN{R#VBYv Y69Y&[];Jei:fy"5?6 T.̞[ZpA0{gMf/ )ɦw%O¼yYH[ R77OBW*,C>j<;QIZWE*s;Q+ڃ QZ"ߛ316삊3Zk@CiKe }tϳJF[cXiQhwsL XG'MNW/843EOok;+y29)zH ;BT({@ xʥېf#Bv$js֒܉u;5<3õ2+hULw7GΖ߉eEѭ0fv&8F}+a/B01DG!C|?smaX>bI[uΜӼ,"{ntF;R GAs+tw8㲂qvk|C9r[lYt/nrc$.\?B*nh;8]/=([tM{!*\*cKEIRm.5|?GFkdbfA0]XY7濐ȶmަ5{VL$\-8`顝W5r:*TJD_7`59?Y#3:uTa #Z3 )`F a:l:b'1|ʌb-Iވ=t?kc"M{B]U-iiS/q?w* '&aܝ[+/ 59tJ.)R&malUvZC&~56k [KPО8ѓ$3Uє@ *cDZM$`ngg3XcgOXBqE3jZVLJ3Ndftn+\jl5}*݉x+,JkVq*XUo_1*y^V}9,B)&G0ƢÆO&%wcv)64ec.ĽqYZ3"U>X* zy^zk7CIKa5`g9{LD^7__ij{WsDGkMQ;ݶ_LpuL\*pE]l"lu>;(QGp01q`Y̫LFA@rʢpϱg2rI7fPnлrD<V'"t}Kn HUݢtLspr… m f"".];} *X5ij^/7+g)_ҧf)p,Nj=Bi |A%gtAv?s *=3Ҫ3S2HdgR1y}#ߢX^4H>Sux"yNGy*TkUTrk g@k.a՟jn+W3hrĻ93im'RA^xgRnOIoP/9l]*x=͞M?2(I:9>/56Rr~`u7JCp/g-ѹ}VjYE*,xcӰXB(@LRDek.<es](KYd+x']<9 ezn͖YO"?MVhxH3K9㠝Sj"`7>e1cQ~R?${{pW Eqv[qܘ_mg<=oo{z7D~MI[)|ČJdM|p1 jANOrx*A5Ͼpw*8+8W( ^oz"x[цHD/&3.jWmeMZ092K/}X8 <_/r\YFz@\@qȳ ѭ+z6f.?[@ Ik;V 5 zId31Ӹs;yaX7wc & ⹇9ܯ|<`{Nil_ή^\ V󻰶SOi't#F/OcM7F5pI?L`3*٥ʳnMfG 卧f;}!ЯH'@^|!nN͞OnAopϪ5gjTmZ_5Pj|u%5uZ,pծ?YN+ٞEm?zn|RGch՝pDajxѝ3'lO-}v ^%6ea~f2-RFarxn'?3=uXdJ!{n/F|bw}6e($>,g17x| 4;24! EP!0@VDcقbc/ճƹ}=׹:H LDFueZ+]MH^+%b qzC޹ci@˼p@/w9~ts4}tK,Tﲼp\Oڴ@ J~ fuv=tVXX W^hR| 4!'ѽY $r&vR2s>/YÙnf-~=_X"j !*WTTI oae22gQ\v^: h+2Y ?c$4ҖPVLyH^Z$:T*?T`(ƈcegY !'>y8|ܾlg)w [GO /_@} p婓bPpDnEy6qxjK'˘Wvɮ2iGGsG_YT'vahfR,[+Hn왪LUX(ۛ mMK_)0)D#+lLcn66U|7rEW`;TBM,nſye7dL fوA~Wb-CZd %)33Љxc}?(>(Hu4 ӭ=d>9.|*u6Zh/;vzP 0}δ]gcڛIuʓ`<_Q))k"0gWs$;} TwӾ= [B?3Kdٮr˘ڍR20C/k=>sHWuݵɽQn9PV[ DA\5 WeLid6yAaim&L |<}k©bɶ?U 2dՔQ[1@{2GFp RdGf&K7H zv9=Hs;3Rfݝ!?1v??CyHIzJE͢l$Qe8X(ydl!it4;շɥL/p?m>--iѱ,Sq&_g3F3e h H (_c5S~c>z޳/,.SPbn2P} o8b0^<h]i^Wyb8 k_DHbK<3'*PRO+uQ'lIщ ɽ,K˃0?ۤv*"5Ti2JDv:*+A|7gKn0%w+9ss)R~ 5NBOm7,4sU0@SuƱeoEᗐ꟝L<.|dOc\=aivJ? Y ~О0(wkbiApGbԩBL 9%Ͱ4nT Ji{hfx߭ɒ։%0|=}gbGTe:T WvcY>,7-` uuF֨_ ,ďKM W, bo 9緦r[afs4qS=VFTh&,?l{mvDF=#xƄ.5GvCl{w1vc$E:{сHzJV,7r_ ąf=Q gXSZW]s8d읰 =;BTVEU[Mօֽ'>?Οy{!P7PRŒ{?'ag$OPǿKLf\b caIXoyC܉a/ jkZ8K½&Vif&5i2)Lf 3{=;#xxh88 Rё/V7nƪ)ݏ$h$:ǵҽ >#>4[;|=;$JsG[ D1ވܱ낳*xXz* pm?#MjӅH~쀆6By2 UxqKs[}+|_ҒzhAVJ))6l|O_z[s|n]Vܱt* }Μ9N92UbŤrbFrq.3}*;?sK(L*/H"\Ga?@TltI 3dFdl֯ym QH/0bSxҒli!_yy7ĎMm]󫁎6X[;[bަR?V{qG,8@ ::mlכ;4:5]JA `r`q߂L,W/R %Od;+ǻ3 4c6 N?uO 6_>*768g'HI`ە ,^(!l|I:ح _8Y(x^Wkw>f9"}6Sjcb;[`Xjz `f52V6;E03{f6gҖ0f, ̏fr?tgJ2y386a8fc q 3PaYhjEvV[Ng0c{͎adM(x3]WlݡFzM3s3&e{-k+pIWl4n_2kAlqQnt Wbq.Rtf+iRؙ/њkJId#93$hckbhpne!9׮ 0H1 ^捾e3II5aו {  ;36{r/3i"^`Xfx>Vi fG$qxx_3SҢ!~j,!ح}نl+ @C5qYe_Ys|,W'beKF< QWj/>ES]IqR/WOb<cۚf}gJWiJ$8||P?YI"^)g<i"\+&3~/ulz%/ziEq2vZ_r:gG"T~QTRUl=aǜL^{:Q:Lucw-3u ' png8qL=sE&1]{:3U~ƽJK'D 6x"O_Fż3^YmZgv"/ f ea;ηLRo[N)t:weXb ƱL.k7UQ~,;xK2?J;R0@OVF拥DEAykh/W UPe(`,JϪK `\H olumjZsuXS:0;`.Q)\(9.8e3nB/t!D@] ;t&K≴Az]-a[47;b3fBgQI]NLG/#[v` '_=Od)Dwklp}j Ra}hVKu.XIVVs ֽEp]rN7W _CXY,Ŋvf3Xz!aW#~!O,/XlwSD)^*} $%K<}g菮.o1Py>uյzK۲tZGtIhprJkV߉֔<)Es^NκȲO\3t<mY!ϲviDOs:XسStqzɪ>21~F»5FN:% 4B i ʉ&C4{Ntd?0JwOLsYgVOP~-L3"D@*Mz8t/ ىq=ҥ/{ 4sIBsJwâ!y#5!)~W$qA{j|@.>P:Un+V_۶!>BT]pH\:IüP 1DFr1ќ$"?@>&2R1$yvqa,}gxm:K@]5&׺ wf9KWTw ZkE 9c}I&j5\}Ȇt.[6ϽYFY)֧Dq㔷˶̴;mK97fa|#ge>H[y'Xy鷍Igꀚ4<#LV) ;Xt~' 5m5SIvPenLe}̧nZ!~VIiA Sog(} +%cw"lk_(lxY͜d5_ 8mG[8o`vH >r-l&-T:iuy_o[`G廪ez۳ķbL ZlI`xblnٺt|e~Fh|9\P:ռW@[$If%6>^ȶLQJqE1֩ S7_ІNfAQə )#IE ˰hC׉PCqbMID"x3)e xzV G!7axJ5ނ7BQe\Cm%$W1L N0G>. SP+xZvw  @cZ+@rL!T4P[ `%] xW ֙ $h5Xnҝg+KC|yU XR$X?9`Tz\T-Ԥ*9VU $&La|cqur91m ʏN@lzuh0biZcr8b>ڕG(j ;* *BO-݀$C/p:mHFɦkrbo(PHVk$Isp;bG7V21"ܜW8@k ]i\ ]S}-9sXG휵>\5 _d;itI7;SNW'XH57"~]u%ɑ!5Hȏɏ qRd(3^-i766Y|ȓ yzE3\Af. s1ZJLL=VhYN y_|A~>VT 7]gɚI|&(Lm1jꭲIXQ&$<`}%IC#H{ueSpRtEA |]Q)堁ʥ^f8#Uܱ4V79""5M3֟dK(+IΛi#%d5SBkKUIhcȔK\]<3򉈀?$+'nlP.S@~M˦yD>BuŏAwF 2R}cɟHCVmW 8-  8x )] Wхƃ w蟀װS?Y[ԛ. 'M_ϛ U&a=h=:dДd*]f,%kEG5wspxxu|>q02ËO\70Mp GqPEDiҙp:BcvtNQW>kN6CeuxR† ;jG#q:Z8|Nb9dj>GHǩjsMkZ//(MErJ mѾkN,h{'ԎzgVm).WfpkAA'~G8]]5k|! ft>:}ڗy?w4Xũ8"MوukWfNgg{ %Q0[<+[8題i{5/*@1t7wkA#gSXL&idkret@]-=N u(Y& D*QOYrҴeL>9myrgֽ]:\N;W&vtݦ^YkFx!j++M$os^>!UyZ&NQa'fOI2b mܦï̈ny+m9bqU7‰ $-H1.]enn٨sl/əpULWV.!Oг:Y٪ЉHnn_" Xpއo1{4Ǹ{JHY9#+C|Ӹ1tC%Wk(X/"x'?bͺcp<ҩxsC-C EK`6]u3}dսYgu$tn+&f꤄*EzWe;%-b~`1ϑ׼ " BmB3[kW!:Tcide]2Et;._uM3't++noj Y+~y8Y3Nasrrp?8+esI|{$yxh ^P2G츝Ā-;u!Neqt0᭼BAuMB6z!cQ:U |ukW4/Txu iRS~ds T-/"4-m,9 qcۙZjNƜKȝ?8ޘ1%H^41༐~I!ߝ=ļ:wlۉfl=g0uA 9(}/-~oFH"T|uOJHhsBhWc̪$h 9|52~i*i=Lhow}.[RSuM7fg`X5ŜTs~uTeaQڊְ;D+ nAyfabBKÖqM],p>v;!/:\b=AUհNgXR7qk@.)#49*&Mh,+4Yl+n EY{(V584홠H$&⪞R["'.۴4% X!/4Q[>5r嬻ԖA)H>FS"-!}g'{l/أ+X$:/ ?gEy"SCmy9j*w/=*&եIMeFp[9Ԓ&>s_1]6[ީ8kDs=g%ǪWlYy*^(/)8׈BQ `y6voY-fza++L3|AuA G݃_g=iqpbz6emFr19 Uy:o_#Z7;D`+@WQ_B3"1Ս D}u$|Zi*K{5=g8z#\D E!O,ްOSlQm[g/,0c=Z|WAKo.&XH }]tׇjM%9[PwM_ AJC ƍД"z,29L,=w喾?پ}5TZ6~DM 'Xb%n]d)8 _.ȖhZ JΡ'|l ]ejհ %Ԣ`x1) ͡%ѪTeBRe?[%`0ۏطw|D~U:~.J-NDJ\[y!.(GdܵZHnbSxU>l7|tiTٻraYo'BMD`4~[q8>J͖\Iz &rQfs35q0%}._+LePdMH{WrX69GqFUedn#ͦ,y:2P'ǤLQhcihQ]$0)k`%{q46yY7sz9w`*$w!ݬI &{;}3fkYoX.(_Wu?\[9  wqpp)RO%m6m_{Hn`A 6 >{<ߩ!eh^zl# zڮMMk%rSڿ㓂#bTIObБ:T{rM }gz/cqJa@;HpCO'}-㹦<y_0}ҙZÕaDYUt LPCW\eD]Y-P|tFFԭ518;MLAj'YX3XQۀEۣYN旖op>7aͶ=-~Ww@Hw57s |&:ZVVY.N<壙9ܫ2ь@~3PoXHp&`¾ֻܷ H c>10ViF$ nqUj(/uf{ eHp*D\^m_VoIXG3\J #!11&#R賦CEg} UAK;R/E;h3{u C6בITu7rb3jt#}>sr~*E~wt wGf>tp씺a?ױe ^ɢՕg(7[[͡pՔnCC9T /DM9dn+ ]#? fgk@(}N@Ȣg%ܾN;u7*^j'V>op!ik~5VprO Q,.sОon-~VfV^Z$wC ܋1[Mہ5 'Zw;$*~=+M#JIk]`8zsbcu7cĎ%ާzRhxnUZRqWb d@ٗe|于)Xta-Ł yEY#;)k6kHrYQ+,|՗鲼 Tfp3ǑnSf=Dم%H;C@G t ѭdhIFeLSPX5cw͍?"wOChv`ݐ]RPvD[ Pժ3{m bˍ9K3: ^tBy'|Ar|M3FL uT*Kwj2비:,fhfl!¸Sa0wW|y'c =Wә8s•fDʌ/f`_eib" #xi1OF@wtYҁ\5A>3~bA5$S8>~r]D"cAUWsCFx US;'99C5 X:0,%{MQAOGzĖF8[@1#edN>uhcɭQEOm*mDl^aD 'E? WBrPEsV|9hh RO\&;\gls35o]%4Qy ߱դ'hMd*cF?Z-oBY >JLe^,BK8g``t *\s0$F+9p8x[,\WHbTd]|C̑^^7qy7+Ѫڰqo]oG"̝cp~%?$ 9z&'~!)h0,I:\Ly ''-j7ħ s:Zc ;cfODJHVh_Osı28ce{HPa{ZTxs&@ \ -N=%M[j\ivø")*'WGW=ñ> KE}dnLa ECqVMte{X10zݶ= ;V[guIZ4Ϛ@XʞڵZOU1q7OǪSև~vTTMmw+YfekƟWh>i4[]H%5?kXkJ5qmxX'86vN}e8&pmY5-q@)s?/N|^1ȞYT]i9. {k;% ŖƊ8#L%)`_8 76Jc0w(Xd*Ae&2>,ݝ{p>1T$rތ1}Y>Tē{,Z>1 `cQ!Ig$y5,7̔PQޫUi8'd+wʺbױۍ`èt5}5ju(ο܏-1MaWNi[WLc wW$vD5cl`-_zr|v;M?ݗʧ PsBi һsKLГZyRE#TQNi_)_)ʹXq8 ii':Z0USfNNmn6f={6{t%-5*wZE'$Zl ;6JB/!-\ 7 3>!b@{[AKj4 7t5jмy.|]h!^:X.[gB]VSyNɩ,}fxIoҩMW(~]QYqH=[y%]2yK^!-xN;o}8^N*";\c<` ÚLL)^,p?sBh J)SM_I {n:"͏\ X%2C43ȷU<]#æb ikh`5;j$8؜iZaj,P<%<w677[l Ӽ`ytNsdUInX)=Gy _$MO+ڹR/0 a^' fp:uu2l(/,, @|O(_$氙#Xg )kB/GD!HY/\%׈~ (|o DޕMU ]c$Odp"b<'Џv9e+g>Nh=Nf_*\1 > ,ȆAyٱiNLNƯG6'}/'֕6NMN+c7ĊOWXz54O/^UAu ߁A9Hl`{͒a$ZH:P?^[eR@q9hNT=juLʛ N2n0h&l9b3܌^ZF^?naC+p$Z7XVve2Wn*QUہӠ!ʓʽVWZCD \l/t bΘv =&q1Nw@w%UJN ᑲ2kK5]͕%G-hFY.rBd&OQ>jyd\`W eWGfnz늿zOg@M#hZիѼެz!/j|q8 Pz+hƠ5 Գs햝Fg{(lIt__:>M|[#Qxn宥Wgǟ.Ѷ>"+AKy7?N0bweO{ygU%9;bwވztb.,VF"@Fbe&Vޞ}*hB JG&@tqrwFi5-Bk ݤ }MzLoNosVG ! c|)k#%JwZxij5*aܣ7Y4B_,7vrC!vZ &=Ti\dXXFLTZZTfڋ?mts^CGT0N),Va=o?miDg+)hkGս՗e/kT yÝ-]yv晱2v{] mj㏻ ] In-A9ܲ IQ@u)[Z^!uǝS-WO`.z~&V}="`lAaYNQÔ-Y[nCmsdtx/6Kϵع@MMlBmڥ J]ĕneI[DҘe<zB_Иw鳚XYd0{+N  /Z,26(~lKºOn P9Lhzw3Ng]YO('<8G*"pԞk8*bݔS (fj<`-e47;͍Q]] 䬬X{;w!qIz*kk"p>)dͯ&۝&oWn]Qz3-˫"$&Qʏ@QabJ >vv G}[A& H}\5ɪ"ǘdXeoDj:20B 8m`}YmRq\^RTӕ&W(BslQ lU,~T~⁂*IBQ];پTC(b5эmln=O@yXv~̇s;ƧF>STf@Ӵ PzĎKN>:>[! )5 0Gc;s00􃆃D=hjd:*YFۄn^T;A"~&<2MjV=Srl4ɴPRk0Tz@)dV*+eM 67!bD HyY7#-\ gΙ^+9&a&SU_;f额qFzJEL h@3ԹU 1/. >-ŌwOD? ovo=eǢLjW Ro+tX`y4>Y:)nmnEFrBO"u)wꤷ6eBeV SkE~'`PDžT~jWDD{NØ+xKomUo"KiD&3hR,!f̧p)Fo~¿ b 96 iXLr 4e'4Vc}{؜FRϘ'kz;VmwVc. _UunP-,6)j3',FS k7=XBMQ}(= ht{5X_Ise[tYȢ,L80wXiQgfbusY+c؟x٥˔v1rʂo\sAVT~Rk}Pl7-Yb Xu=P̘ypjP ^g^UA$KXRTNFG!zMZHwKԵTTpEcAzrEp1T_ ]oKΊ_L$2_%~,嚅Me~Jq$$ kU3;"FΖDTOoҢJm_UUUWm}eՠڿmNK^cR2`dmtu _L{pz,<^Lζ]0C27% ?nz~$X7(#FdB yώ'ΕL0kR+ORyqqSRV_!D'Q["vW긋y=oZ{z_Fuyqi`+PG5g( -d12GHRZH |[R7˽]ș]((5mg٨`jnoDPL*N>*T%2Q7즽>h4``9CJ[6 wK 2,EOQS}E.XuoRӉn3>(m JvzOsjqȟXE8їH򤩁MYt~Xt^ur3tK(!Ʃҫ+XXK@YnN䙥9ZyxMdùR;_]>JOR(S1#nŭƙF^Tߓ\*)&7gtizN1H~libvips-8.15.1/test/test-suite/images/sample.png000066400000000000000000024511421454007373500216200ustar00rootroot00000000000000PNG  IHDR"sy pHYs.#.#x?v,zTXtXML:com.adobe.xmp+N-IU-P(.)K<ZP[2 IDATx`VkWU f˾6Vnٶx!n5R\J}Ua(Zc\DŌ*a `nj ||(L[zm,%z:tVTиꞅZ[ކ>{ <8eNWU|G9 ߺ b*q9oqpt_Z7Wt=\gLޟuSYNGdL3F7 ؇`cvzvY L@BxAvyTFͿ'M;o8ig ״fzgcy763x̛ +^S) jZ[`h΃}JX@G>: R žjE] GD -hs5TP Y`6HMyJ7k{{> G}1Y]v9 yxIZڕ;1yʧ7#Y|l܅ArixخNrVTsOFeIhBai5(AmLKT6?圆|A "`Qx^JFň@2&Rp6n+kdoo/qXf 0.8 I*ζ5;k֪ J@G p7pwd?CN>Ǻmne*7&[ a; SefxUQi#Lq FrVMd-( |&]bNc*&ˬv&PlEnH%nPNUX/8\V&c{Lmj\KH-//j j;ᰍLPyRQM7U\( pJ_Vi*4wײ+%1+=),ߦ9 NE9`O5fcx `&Ӗ/"MȡwȢ\}r#r ą8`xT[x)ѻh ~w ݊tYs(s*d-Sr͸ lXOt߂LwPTE~ KEe8M2x7ZAAa^'q0݇D}Th*3a6w]^|G|p&T ?ZagLx& m%{-[|r .5]L.Z̭~J=GU Lí)Bwܘ\MZl)3ktGaHTin`Ȇ* `/R@}xDV3L!jXA6U$V|m;z7 k4@b]W?М"Q6n<:w 5ҢUZ@@iyE9`Fh2?b&hxB5 E)?/ 4U9-_s!b=p^nS:(=_葮 T&M`x9/'bx sVvhzdԪLHbSBYJdI%p8BUBټRC]ԂP<:V[^{yp!i>:љ{Mei X>ɵh k:EwTF$^Q7D! Q5_DB UH3 ΊzN V#gZV|f(Q`DW!/@2C VWQUSʎ #\~BRLJ6U[Z ʀ~ A]0CQו^ʬ>O^{ɢ\)b[/;c*&TnP GW@y]0 tTA-U@8KdG;0|E.t]M=Pk8^\mcEPSC_+Rx^* V l F鮯rcQv8@;8!ode؟qJ-Н7d$hBܕ_d(IPdG<8i%)kʔen2JdUƖg_s9 ! ^IKrv ene&aftEoW&`,[)`LtUlWcEXіUU5>>G|x1r"yvݜXK\I5w Q( MUCDZp \nBj(؂jj>w>9!\zdg~[fJb?<{ly*̹KGricpU~e3Lܽ<{- +S'ZuV- pE 1X}:;׃.𒤹ÝvJ仾+^+'tfM4F {#~>]U,;L4^_X=RK}/"TzȇJ ,Dɝh=7EtƖףRr'W4V$x\2FQG.4'3MuPLQFx,YkArN;h@?.(LgGNւӂl*O*Uq A@p&l`18B-ar*r\6*dnj?#>y*T֒sI7 Ft۵zqMCMSj īg+ >RN7z>VvGWls1.}|hn{)U=e-;8NV85Ea(JVeeԁb9X*h1YY p |kqFPu);-h jM<=5fS{CR1+f}8U4'CHW< ބT^L$lXU34\&NEp-N{yQ2p ʂ!)YYx# -$ 쌎`e5Om[-\)˒d-XVD>Lg:@FHZOGTjN}Uy$qNثVcv ie<Z6} JJ=ӎQ*($g-#Vt0Shbzݴu;Ȃ/\'luE6 Wf;U-u!&p=ow v3Aˤmt8b7:&:qp>jk_'Dn wroIwsFd0f]EGh2W t P:3k#%a3~1N>qeD y{G%[H l qnS3yQ~, SLRAIx{2 0G30q_k?L8?Nr0'ʮj^zXvQ!7T;^ũF~J6{1*;="Z&<`}&wlcq~5Y V =[|Sۻh&._b؀?춘H7϶C,S|fd(_ /⸬HmYameaCx2崶CT ez+#xX*TtY|;'Ixɞ|$ @XJȖ 'MQLjy0JU1odxn#^n&]QO cŜh}O'<4])ĢF|lgԁSSh-ZUV6X8K.% N =gA~ev9WuIozfSĖ]gaDk6bK?qnȑX\,>S]eg5^o]dSbT/$_%{ӟMbMm_n c`̫-vdyH!b0&:eW~F"1^şB;w1 e8zNHցݠ*1zEXDHl5qΦ`soAL5糣|#1'Z*Xc˸ZXr ǻ۹wz kIu*h6)#rOI9\"[GєX;yRt( ^pdkcί*/7]r vo;i%{@B`<pUґ^%u2Ӊ2v+Ey3>H(:OUO ^R(UQE /:j*:PZZ6=FEkz*w"nIG 2B~7RԪ6[a܁i@Jݰg:`[RkIS#U$̬V-gOUVs4Sc@D@]-K1bcނkP7vV'(aFfMh̞5w=DWjҁO6ח>ˏ!J ).H8`x  U*d}.Q4(/]CkA}μ IDATwla[" {c6ޚar}~yo2Zr `6Kn-HZ`U tcx']&Jz5a1Q,/y36͹ȼqNmqz*" b2T$8/ֳ79Y>l պ :y4@X^kx+oH~f#=f _Ūl|PQL@:\ֿC.Ӆvv?hom'4 5KZN;$kM4_/R^G ]ULFX5!TGXNnvv֊R?Iߪ69yK0YwZ/_."b+;|XaC7{c0fxoy[D_u紓w甈"l}=ZDsW;}yahN` Ⴘz ɿGIl%Db\Nji3R5]$Fl&/ o \;h_GeN7mQW6~<|m50g$m?+F?/,h Ճ7}R&eI2cmp\>Dk>xU5 V6 |6-𵴾l+}־g>aUs;&oL4"qm.J EtQgY eg-S >8U3NpJ: `#=,VJf@?Kf?(OfǷgo+~?!o~[oN^I[Rs P=Tm%Q0'SXXFHۈ I9S=OkqK'?mv nu!gݍ{$ܣZa̦ex~Eq20Z~;xײUx-l;o s·6tg0qTa_yp |Ճ[_-I2 u;-)o+\r(5=T5-pmEC˄e5s֚ﳶ˱S^*4tS?d$^MK[H%gڔeTX' o'_L`&+J-V5.cQq܈x|đM1|@IU4LN]>Y#YUz#3 r)ʚ* ڽ`sk 82fr:7kşVz*{09px 'V%tWSmnվcq^N3n J<ľ/cp2QrWK}w`PONb19cnZ.By?0h۲& ~/nd|̓v:Den ˠ"(]G@n!k53ϑ?z-> %jD?2~KΩw#dTF}rCgȢ?\ ;yRk^)P]& H놷lH~Y᩠-_.m;>m$ O|Y]P' _Ϻ.*+rBe5=yBZsи"`5 Ξ:A9~>Jp]﹭jv$=mST('vDԐߌSm@uW\hl4U #Ȣ8.bxh!z=t5T7 evj_8ˠ3ky[Zř0HS:IHVTgU'ڡ*ʝj5@~ %CKe%S<֖'3bV ¿TIWDma[+AxZ}E[Nnx5P)MjJ>/:3iuPgpX)7Pmgy`{{ xi ၞcݞ5r4sap!# h$7ymhveBfZg0ݵ=C+nvrU6#j"3EҎïp6J3m/)i)]S3WXXN'K$mU7cU2I§\ ԕcxY/"K`9`.޾hxs(Q D4Y$'7vJP7S$5Ye3 8k\-qZ>A69PXb>Ug.v1 U6~kh-a2)'Ҹzfiq0EcW*j Lgtzryp5wcYB5Dq~T]ʵ5pwqވr8YIS(0g$Q=HC ?AIG ɪˆp,̣Vრ!7EhQEoz+l喡KŠۛE]d2/ʀŠ6' jګh`]fI ].z`u{G;䮞YC}wOX:t =RB5Zӊbx+5W}G,=~#gj8Vd h]vf,֪":֑*Zb7}ހPq[sQE׵>x @9QN!~:e&gaZ /oXZ\!3E&#k\R~SĨ-..)}✫{q3sٌa1ü皩"$/v+8HD$nB`Zri7)=IBpO-3Dk@q|Tv!X?Gile=`&+7ZjTͯ a,ܤȩ%kܱU pEGg6=7Da]ĕn}b]5F(t&O+6`.w'.2(bIjVb1xN899Tv@sp\xʀt-C-=IK6JN|ỵjo(7>s'x^ * x|\_dV -DW,kiTs 2 2OMB54g Դ|hěKe:,ί2Imlr-5&g O Cʇ'[-tVuZ ƀ>x>v3n!oDI"فWhw7j>!>F` $5_iZG!NϬQs=qK p5h `NċAO17dP`'RFhbxb~Z0vD絪fCZw 떿cZNPXԓ)qŽ uU3٧nw]M ~GHI"hT^X^q8uInPQy֐7V^XXV <5F\ j.s1Jrkj`ej=Ew)#,a%vQUU4~8d*FE\xxAuI@qYɚnȇNj _ CU 4N"As8R)T즥0E++nC"BƊ06&}{NWjKwkTku6"#IwwOL3i;%|t8?t0" e[Uoz_z:EF{B%լ 'N|* ^S587J<3e)qzn: ^n &;d?G[h!J%V= 6W2]>+F#{W e2zgJi?BiMʋ9GZy`qқ"9_d*bHŗLZ&X&ESi&lcE (?vZBAC7k#[f_%v&ZCkʽkF$l%ǙC(!%O=J1\Ɨk+֮ϻO CSr YګE6`sH҃jwfo[笞>8#1= EB=|nKa=pOX~ XjgU64KI#t,a9[mA]O}*"r/}DY<d]ُJwDžr8yv@#XyZ#_|= W-`UMjӞ8?mP=D?+D1\DV -ᣌUi >?\ktjlU!ué#w]YS!BRc\EQu8l) h뱘.Ǩ@(cE^m4 `|evQ탻r)-Bk(SyN퀫DOpZީ٨=]kodEӑV2 IDATM!A3b|cajuu4#!jdFa74ffCDOv|YQ,$M?FO6•V7߫_TŝTy5vi(E//JbH2d{C)Pw-&Gkyd%b Z k494ΦVث.:Cnʒ/|M sPU@Unt.;Ej'GJ ℨz j16vIԖ 5GOT'FLrא_t)Ic7Z54BpkZm]kK*Kf۝ rZO9VL*bl ).5x5 R:A[;+V#k+jUUɰHP A0 ?Qnzt/P*Σ~8mWQ&(?vCUUh4M*Nבj.y/ 3` mDxLmAU E Ul^.sd1|CPFeȞb[*KtZaÞ{J.[,oHjaJYm^q$}ᤈ5s_3>93eAd?ٹ6CsyQY |aj@M,vDjRɵF&|n46(VJ53ŻS)ޤR9_ VI(,+6ro15-⁖+}M k8N@a=oDsJQPпڅڊ*5 -e3BaF63ňJĨvƬ<p^7 \& 4OyBe/!/>FSKKfsz >!C~UOAq O2*ND;T!kh~Ԫ[}&D6A k:XD]L ᮲*"joWJ2$; {GPWSGE8͘M_g߿a1ID/k4)a 4 c5Dt2 Yn]RK;غU3TY.CqdƨCh0 SK"UTDQoUxt]mo['3:ZJLK}\E\'*Vݼa8Nʬtd )ʉ&dUs,6Ve ꀚhIZK?;:&dL>YY'γ`t ,Fq*Za!YKA?d ]dóۍ'7A@[vX}mO]&kWb|l%g`Z$~l7;⒜vAUTRڋg<->jGe#yO x&\خޡh&JtaNpB͡, BwϏ)]Ru-|! ߃٩Y*vO^.7#jh(5egP[4-y{4TP 9*Eg"oN2㸱t42hCwEΠl/\dLJٿ~ |SSr:u pmvK2 /X'OGra=( ə*4ce]!^\r:)&ғEE1@N2eYݏi'o4T7ŌzO\-D>@/a_G˻q;%{C59a%K[exC΢j4#zp ɶ>6,ޝtVX2P:$w*Y]fmF!)[Ύxm&c0L Sת\WH+⡡tډ꩖t%}҆Xje&hmx٘xtxFU p< mWm7;7v_>x C)l/i1|[CSqb{@K]t>7U:2ju ǮjlN-,Imw"gɢ۹!W"]=—Y<9Q5bO[rӿ>z9T<6n'py_o.AJKxGFߡ]ә?b˩ɒ`N;=ܵjٻ:t] YwTP[Z*)F_AYQ&:dv9|gX4Fdɩ8Ï^n\qiIf~P9ŧ312oP/UKev 禴EE]$SfOKif[ K#kQd]+-_GՍC } 6 [lF+WP:v['b/,`Y zG׮$V N\ HMk%[3Y7_XT.v _ tMM+T-QrpJ ѺxNŘ]1zUF5=ٚlqӊwVK !O-J#t>jeiO_\b W?I5RGܫ^EaNxW 5 VWEl!$j6Vk={qW(@_2 +tMKѶncoX*Jjw.;l%9Z84: B-BSXftCYNm$; w!)le4+a{akNs;۫\3C<\\bRciqc؄F٘u?V?5X`%t q.#!0' j;Z/OLʱr7ێ^ O5\X;3ՠ& ÕuTTN_`{cI=4ӵIUSE?br!Z(>Ǹcl~ͤyNFЫh\$"!HGeدhS$#3YMq "QY+d;9`􏧐ހ$B޻aT$.xwE& (VOF}Ž ݃ yb]Y4`' we \ZmCAX|^ğF܇jyH QVP \ʋ8ד&L<o:)Fo+]UҚD6*&(ywboq;q\B1?:Q\ ){k8hmYV~fuuE7).{/>ؖg8˜o<{o( jEqN!Ax, Aeyr ҩZ[Ɂdv? Fl;=I t:؞l7Kl٭T RI61γA KճٛϹ|^;&ªlk|<殡Uїoa҇Ѵ Qj&Jx3<)t`1quR-)][ 8!UB0&-3W ՜hL(*4Y.Rׅ<™߇3̛)ۼC"A:hѝ>jlN4br[aO˞WޕiW׌yz=ojQ֧"vZCBŭ)Ճ`P`z4v [>wg+%{ʖV@VLvRGsf;!vʦhj.Sbe@jS#CP OP0KQDmЖ#gOLM:r&X ['E#(lwa) +6|AKobJQz| @HM7IV'_#F/bISjԄHU唶i 1Aa࢒*Ka9UdUAho^[ʙ̢c IDATomRvc>M1Z?K: Cnk$Q2oULc.lv $yFhՕ3*/gv,A*v.j Jn@.Am {*'B]uupcXhMCqL;)? !+ӫ9kHRTgݷ_Om6O?zwObt]G|g{cJ5fAgki>Z3 Rwg킸L@kFccTnSr'kc%Kiߝo9)T)r+5#y?߬T^>+/go\#hcijɁg\ H{^2؞dWwdfrĸR+Xܙg?aTeX փd#حr4JN"O $6"~)lDTVgOpXG{u xX LS4!.G9HN3ҏYfMr6;ꌺȕBwY/ u7Ђ,Yn%e\ h=E wicz=D8ƚc=i!0= N=iVxa")2F ΢jjX/ȳ(6ɇZ]LB#<8d]Oͽ]|$Rx%$Vz9Ge迤H Pb/cG~[]!'SY:SFPOX\}|)ӓ&L}e}4OV_w#-yYFZvz(B V4yz*pg5N@~9{x]tH C1N hr[}oEy8cVF{z/r~^i-y]c'm h֐~~G4%K8# ztTZzq~p| !2i!:j(,&zڵ}p+;`E/I64XLVc2m'$i js#'D+^Xx7>넾fO?SvTf xSD.3'hK6u$,g 1 MHsګ4ԠF(I)XjRtzuy`w.RXaW|ZXboz֑i߂;>بN^jl3\ڎt07/MlB`ԫH;٭!R^7֩V3ބB%\<Ͳ,7 e!<WTK:k*$w(G$OFPU%WMwә7h%F=c'!R mE[@{*FmVegg(a0mrX)f;wBo%_~ &ӗ-Jd:IBjZy?B{.\ O8W3'yh\iwJۮCD&dΆ.c*3\|JjYHCdfBv. vʷnp ds*2*"濎=|xBNw]\/›Eɹ൥}Y;%qI4>&d VJMsb6RAo tuQV*ȅt% KHs&Dj'v6_hVxy3ϸ5F+ZFS .\s e(rF)XH,_SQQW܃R9n7ւ D;pK*/}6ޙ m\o}aRA;6F/\؍ȇORCO[K0&>0I3&/i\5~4S|^I"2 YH]E1U.Uq{%//0^,c#;yAOaNvep-ud]k":~;汔Lw:hJWc:t"6@?[ ! 9*ETjg Jlr 2|Kj~-QXDin]|P9~{'Gxh7Yv򦹓ZA"\O<qrWsf:\Dj[M%Wb`[>rΒ|l{+#E6+Uf* W 㣠܁6~zO@i9Sj+?܋L\HIU^9@|7XiN87 닖uDhT[%"ExkɞxO"D?.%,ݤi1c=?%Boaj&0'l#أ/CˊZpT[<I]D7~Yearb=ed!c:ި75~E9v, Nuul;괎ǙP7U/֒9̓a{A~Yb+F[魟(D<0Dֶ|j1Y!5q=A^qjsh:2jljL>gˊh8lMn@{km[.AKVBr! /hmp҃tڋvj]Zj˳sDDXN= ! +x2Ag9‹;x. =?YlJ JCeDya.*mNK+c w&_"cETA]R'T+mP@a* |l;ÇPeZn~I&.hLV!mx7=/b'tSyUG('j Micy"gvHMH}꧝ji9*X Ich-3QqEt}'YYV"QZ*8d!wA'\S1 '~aj;նjVj۶m6Rfh13_)Tϋ‡ (X'ڠ¼jJm0VMe]WoUyCshGx8K@':/G VV!;ʫV.݄`(ɬ*T&e.uOJ"+%pBi\2GdIZ[!>lئVUX tkKbJCw@qWGb6qU56ESK `EIu@@&MA ,m)O<;I=9`M)y+:87En$URe `wK?dg'Z, ;HuKkO *-^ᯣ݁h_v{?>RO fmp#O{]juo ^Td6ǎԮ̪lΫ~ "(׬|nXf8*n[:BQ wٔXY䵿9f@m+a_՘O= 4#wZuTqZe3e*$WNV=ւgE%15*!KG_N-GAG l(7!ܩwpCkb Hd흙e. i{q~}>S\cҩuah8M`Ղ[TX@sԜgQh#j|RǪ 8mĉ8x=Be!P&j-(X.XlArtnyQE:8lQ+SfvdwO|Q7Jڑ\WUcF(kxq5imDk5D'5Rn '{]DeDO=bBEABM璳JSIkc*Y#3,~g+̑`>z'._?q֗giwC|wRH'" ;X9d6ItvZo70 h[G|T&nKRkHj퇹ӻ[+An` (Cp6K]FO - eyE_/rZEʂpZg&‡ڳzp__yK^ƀ*#*@nNJs6-vek`C: 5Z~dˉ+c]Y%Q_Jdx,HI OcC9h (֠yz!-x&r;Fj%39Gh a[ힾN{/OqoFU\kb>G-p#ytW[5 _zipW}ݬ^d3|NXgVh~{ݿu!8JGשJe)18*J 9׋NauCLsgb:MI2 CP6rX!_+8䌵8EMKЛd!UT=V׾tZ &^8akTdIK)􏝋MCTEt s RP7``^0fe_?uqwYRm!(fUujChqA|ocn9`^7bCz+8'8j)ŝ|8cEW~fAWQ󵫁{ mBzEO73uUcCUw .6%WN4^@s&2suR[Srl&x.XDPӞ}x ]p-*Џ9" ۃ9.@ހBU^UMdSi!bUwJ9RE*3Jא7~ʁ/dWGj1*Zn0ѫvAW)z3R03O,H9va'1f!g6T6/ȫO#νx#r=&N5"M|6Ozz^M(NUa{x lGd^*~c4 'h8}kc=A- Ì27 ϲ9=JL]>_⼉|$W*=P3;jNR2F+qtIT7h }.aUC/x~paa'x60noPUEyx ݱhPDF#,NYq]a%fG$^ַ/B?}vfp^4-ޭYɨx 眫JzU m^YNM93L~9I`+6tq Ypj ':ZQ48v8]WF7UsLrZWv?Gr]PO'12췬SŹ.;bGclƪ*jFh8I {uN9@6ԁ7O<ߪ#<+vxA?0I {9"} Z933Ìtţ渚J$5`uEX^bh**3/WL^Tc#wAu<t:V־hމ>x3X1b7Z I2{poboM22IZ6P߬}9p5Ahf,SV8+kGiQn?%uvO0^n\^}T{k;j s ]2 ^AԮQc35ĕ'E/ى,*X"ĉ !?hU%4HhkqY#G|U,qvzPhשȜdZdʄbev^#&eMlF=IEihiz^}hJ Zڿ.18c眂tܩ(S]}OSӷf'(ڝ,<9@?7X]=o¯$I sxғ}U5l"=j< :!ܞNuh-mi7OЎZq~LP:Ɨ`Br1Wtt'Ūtt=ߞ?Z0*!/@Dmno3nj)WX$y%,ś" ΃6-鏃bx7P2`e(uIf B]3+Cw-Ma2Ϋ: GuH:=Fup#B̕Zwz7b0& }cXrOW#1=yD*:n˖7l$P>X`xP`Y_/﷽o}l? Wb`+KZ-@#'ePm߈h/Kgw >/䵞 w3;gخ0NpyRƩs*\>rl\{T Ct wUtmIUFVkF>6h UwuAW+\ͧnU"+\Ȕ>3(MvM߬=6U$dZ`Ukf^FNOKqvy%Y -\]s6$I{mK8p򌧝F^_4JN>@Lzhx'AZ!.M==VP &B!*<1sHr$Z^d -8?dPnunR pMu> 'j;L DKlrE2bIx, *h*"8E[UR|m.N$i`X6ryUBMPAzPN_trATR58C]&a,jp{Bz]t& Â;܆7s)*w}sLqrYmlHïolfp֊ `JRRw= q s7liKiSp䙨~9f*gh!I@@FP}I>%UٷkSBuD<N7`l΋%*6j>5xܬٝ?N$;gǪ9hWAT 8ΈvF:v=bj | PeAՖv@?o~֗ݍKhkYP+}A_%y0pTQ1n*5QMx zL_u^kbM#$ ZE -quyDZ-;Ac ւ^~FP^v>ٌFHCWڙ`6\O\)稖+f8Dp 5\f;:FP50rXkJ$ϫ@>M[h1TT-DpC/An +g畦T0Q䤍*σ*iDړ"=:?Vӷ<3pS;z`USSQNE<=E!艶A[{Q}GkԩvȋX 䒧!)D?,ʲŽI_ (hZW,IO2GRxYMVU.Kiѵi
oog8ncvrԯ#zҫ\TA{ )ẗ7s-2 r@_ ~u@#fUA5Ooe~<5C4XA{d8$h ȅ"Ԓr2︔^0\B?ZS$tWڜdzr0w&N7%ɭNk=+.b,ޢIbRL 'G'NlJIMh\t((Ѓ 6(w"3XG5Pp_ =ͯҊ(V2>+{kxHgsVI^5v2?d D$&08̖_Fa{rKo'_ zlr1:TFm#X;t<~M"#6\OGkV3w?eE>)+ &k.4_X7"kRE厣*Nʆ,iR wwse1%< ^Cm "v0ajVP ˞甇J!ep8JC =ǺkX?8;|ӣSW[-|I:zbNGh<BC0+n3b 6ڊ`cy>XEe \Qml8G'Dof¼;F5oj C~jK*7x ?OCgu m0A3R6_#_VU:*vaA4bUʛjْ* HZ%^B][O&ُQ lr<7"pmn jS43YӞW@l)v.MQJG\:,-Y(l`!'º`٦m12f$+~Cx %GcYr86PJu갽{U](n!45dGPb)+z{mC#i+fp½ȧp vq()'犳&И9`D}Sf|5LDt :R;p;AC: N~cT.ϓfUOLKG.t>ly^eFu6Vʤ@vWe4eE?{R`^ \o{{4=؅#O fvzⓞ~0Hj,zxUB-q72@S3 XԂT ́mqYP 8E& 0mqĀ(-б Bڥ/ٹ hOPxXTk`v|2 ~ _͖XMp(u&]v‘@ZĚp-{O`?pBY[I;G%p;m `t oKAe/Nl4~b3@ٵRc'=K_v5M6VV'ՕQ"'zNn#FHv.($wryEߤ1&Dj<5hi m%܉;|}5D-IRh]N[fסIEj;}*RN TAxhpz"znüA0.mcʾlQ=> .-m7%:kp;EC eCPKl#AsU E`o]bu [Z4 Z`u/c~[=vv״Iv1/6Ipқ7ExX3Fϱv`q"qpg=c|z3#EoV!{o# f= dB nz3zq'7Mi6$p,]iHyU  Tߋ'X %+v{^'^,sE[y}'vbo7\p!)2벶4,b<| gÓ G]Q>YRG"`D I vVoDbS%7ijJF^҂dB\dI0s ](sfwo3;!=wZ9R0>r54?MR#nJo`K˓+;:bCyjXShV㼪+>[v9ƴ.i-T~s*KѰ>'kݟ?J{PvۉsŚ_!Z 3ž nE)QwNW\S4<fԟڟ6< kp>M$/RF9hP*erOxSݡUw6 K횰|_ l1*܏β6/}:܍/{)>e*?3Qde_pIXc'' /ߒ[]/@&y>T Mwy XvTE U&Rqr"#/  - =4Wt0Wlq j_`dsDWQeb/}]9_.C- [xT QQ"D{[2PC-h+K+%&mXw>ɳm6|6; a*J &B=e*(8%Wz9#?Öj<(l`zGFThyqd z ʃr@n;pVü!D+ t=h_rHA=1y߹,f^M"N>X Ǭc8PҖ:Z1o9A3[l*H/|n)t6=Zf,jKKnn m&r+? "7.~"zcS6Kԥ*|7IvNjʼU/? OOz m-Pֲ,ZMZF6CJvVƼ״\ .0w[]ďxI m9"^]TS߷7U-5!\?#䐌'rlhaT\Y :oz߹F7pz8$rb=,^M,l Mr*FZ],E0/(C sŊx}-a!!q&u:.OQe=EˣhPd7>;+kLC9Ū3V0-PZޭ2(+8yR-Swd/ IQY*FJmqŹ !@b= Q2žr*r XkbVkHCaAgC?Of */Gjk8Ks^k.ʥ QpAk泧:"qAs>e2A6MI-OX.3m 9٩4Exz M) ^stC5&>FjZ6g}OxQ3B}Ls.xnkǭH6ٝ_CnWU֪Y]oUI7YM1㴃\{ G?7:=QYJ;j-5ǙSzc"oY9@ FpT 7Қ^f^OI'4ǯ8XfyxW:GFz-wh?b˩\f_m2 |,̟V9VpX؜NKk0_.wpz=yB\fILz@..}!P)]FD/xSa[2Qb'E2t1]x<jUwhPM W6}Zɽ4 *;yWװ7r-r$" *7NdE`| IDATS'$8d@LY _HG-8s1 y]:.*+g-*,' "^؛/#+M"OiMЋq;@Lߝ9^&"t ͑[J?au8F'zGpIygE)Z"5껮jzC~QZ}^>)M>I p$x-^\ϥ7#p=<ݸ $E*zz/Nn=h/,̚_j TgJC쵕hq$tEqٵOak5N|({;kH k$@XDhOjb*_ cN}"b* 3؟ğF8kiP%r-B}Ukh2St;/z)ol$A"+oSɟUfcgwn6s'E`wr؟v+-[߅BI=־;G8wzGM'rF:te^Hר)B>&o &X? KGN]#g[q(;;.g=p>(lp{W1W)#D5Aאٮ 9Pi'zYPk+-lKv  xWzeX[$&.rx.g TG`95˜z">pPSցk_0$kO$ Q 8 P,NH:*mnk *p:yh9AM.9s,p2C`,e4#) [2؇_T^ftu]X xA}o`%X$+d/t  eTK{6g<)V_pXr9((N6+| 8;W~$ H\#PGbOp9KPyV%kUx;I gkcTSPPAKq O7\_ G]%oDuD+@nN4V~m>~XXN.Fp?4-&] '0QTAY\3CMV_hODnƹCNtP }]Q>g)}R7j8dwNZ5AWE jJJ& ,^ZTS߭=m 7.!1$͕ٝ&Z(c], a"M/llC5] IjG$5ru6ybU?؏P=+c~he N I,hVVs^kJNH^ xSK&Nh=Pcsqu}VȨ>+NPg]t2TV&܀ :**SZݰ?/j:Ѳ2w2sh;Z3VaF&/MKn`vB'P=6n <(+xP/.KZ3!!>8?&h|U$jZ-|gPX82C_T {k`_A1ӻrjl x*]8ȶm۶{M1dۓmtm[7LhEVieIVDvd;<-$PdU4"繫7Qq6ON=`o]I$KA'LyITxF 1H̤Oy%߫5 !ʝ=عlhfl쏨dwU&)/hבЊ|jHxӝ)|2T ; [KR܍UW=m76Wl%5JI ? Nё|1'|=QwvWAnژ5:uEuZfoDP~Mr$Vkv":Z&7%4.B4VkMdVvq8 Da|TN܍Gk DiDi+ >t,)'6%PEka pk[GYmF[r_kDeUګd~Xd]BY|bX*;g'lh7ljzslOX7Ljx+Yަk`Ƃ ,wG/~⏕JN]UdtATZU\t\GuPAuIVZIv, h `9k1P *{P^ J!1O,jz i!sj %Z)b!3\-ɂ(Y-V cDA啿E".J!ٛ Gg"9UP;<C0^JfB$ƃ(Jϑ *mi9?.eQV_b9U\Cᑒ꽚ɒh&Eڐ2,D+w(oF[d|i9-9\kdC~4q%m~<_;&kTkEPx1{,Ul:c)VɮkqIi7$Nۆjt:_ӔrIWk͒~($S?Ǵ6֎Wfډ׫*% /ĪO x ۡʋwxצs2Cƻښi(Sh4q*x=cRƏZv2./i7^E\f|"xIeU.*#݁PEds 7i]C*%GQ5cwe1;AN=ajwwk42:YwAj, ߑt:,2jV,=e(= 5J.vo hkhӇzY OlOĊWwgT XX[G_l!j9H}#H24#wCK6RiXq]}4ca-RKC"qo73ki+lZ(fmL.qBޘfdS=>>JzZ\L3YPf8BMw眐:(U4b<62)`(wS*xK 2iCIFSGd:# p&| jj"|0 f;z7yߺFI'=V P_MՃ#0d^d#x~H9^aM~BJc !O R;NG ȍ/wPvYmѫF5Yv?γJu3Pĥ&:xs^Էn[^i#m *yPgt {#*,αNCuc ObP MV@w8vfPL>PjYgM37 Tr{h(ȀGrvuy7,\A 7r&jN٣wyXv;(*}7r!Sw {-Z?֡;K#-$PnXC>؀qaW_8|''"1hcHS^[.NF)GF(l?/ $}LJ>o5~^mf<$;Q#VgNѳj *;# wk6Po)y+ju8* _hxZkO,F2S\W4VΖQrdTЛ꽵89myĦj"Grе[=A_-"*:aN˫jnt/5r<-w| OGRS5?eX|RCpZ6q;7J Qn3W[r%AmӬ} A"voe)VZ["AvMcuQߋߙ7B-V~%L7JaqNC[b4yLVSUϰat\[-D=[ChVwWx =A'o=2*)|Nu?B~eS[xYZdAEC[4Y(suY͔ŔO'u\RKYsTgSqbJVj̾)We'2 =^~f?B=3C/^ľ!Ex;UL.PdvAUQ]:cਗ਼yH>/.^ 5>~ŻoGDw˚j;J孝P+?ڢ^\@iJWPeC[1yV'R~yT=/3GJj,Ҟ.wFK@GiZBV9ʋ܅Z27PI}dE nG,eJ%d4 2KmB5/wE4z8R78\gwfbzRVNqJ ZJ6x!諼-Y|xlSέETWPhɿL>@h6YY&*ohlDԄop3! IqyD7í CwD\ J:koN{3.EXWCvB<$*?oC) "mlZ͓Peߚf)XqWXCk' 2~أk dn"ܯ4-8D P;HTkTS{$Ig,/M, w#Skl9Cu2]I?eX`+np&Z`jfts'>zCe/EbNwsZE;X/ͺ<̂D(sC>?j,H?UFu#S13[|l}^ɞ=) CnTև"{WW0S)Ci-i\=LH 7e^\:xwGG>7? ˼#N''8-8 !<ݗ^ߪ/#'`:Zb1KpҮ*osHoVҼ5>j3x8_6`D.gFx`:?"/d:YyPPo 48^G=@ (;ȍV5۹iPM-䛨ҊmhF'O;e>~DSyW9+˓1p묔l Equ{(:.XD7 q&>OuT8}،nQp\~.&7EfGZG>0HUU$^Yjy"Ri5VSDGv,TTUDd' {q!ڃe`ez,"Gdܪ,j6@AG+#A7kߨKDD׊vg ^ǚkϛ]ؔBVyET3I}t0P\G絼BvV^08rz6ʰOM&s2TGr܅QICx2Gh`nFHMjt@aAvhj+41j7rٙ dUyH)ElFMpR(gJjE)cD\6Q"=R{)T:A҅l%:l.K8EAEL.,l a$,^DF 'g=$o88td_)NkhUmʏ3<>)mμ&Zʰ_8i יWNgLji!^ QY/SdHkK2 %) IDATB4BH֘." )fFoh&1ReM;ytU%S3ΓvKO\![Ys ' t/M_VU%:Ii[G:v o1"h2_%<_.>D#euQDaZI /'xCX"QnJ~;Zi--M[MEGn!qcVD VHT U@sy,(]/]"c2G%Zbkw~LVduWRBVhH̭PhYΊL/LJdYߚD%@7O^PRH<4$+tů\x_Z_h'h=Bi*Z!J E|aH]zI1?`Ed}o/c-C-Xg*/d=JeqczvjIoQ} oxghx`|֯Ch$b"9W&i Pm5_9i9 @@'4oВv+gNmZ2|!CBig ^Jm&4%\hЈDWrBD*6,tOUmTVJK:<%A L~htC;کcs|./<ΧԒ#"?,᱁4,c,6U[`w1_I[pp*ݩޫ _q5e(22¦LIjo?j9 砧2}mGr`8}F R% g \TFBs<NAY}-1|9-3ܑ>A 0GEQFu#=e]'N zO<+o"[NsES9(V Y&rX=9ve2(VSl#B%*8uzᨉ-?rpeZhܤ6R%,\+QY!ދ Cv$ezG_dvӜNC ^xSS>%/XGw |T7::p'dsTv %S/)2gk4rB#kC=8L/P- Ng =o-VUX-#pDg.1T<*AmT٨[QUF $f{XCN b<(V -Pfg)V&iR )G ^^)zGxf!-a `Yh=)baJV^8?nꭥE-Z2EevY(' 6qYݐp?6Е)yr@)yVoHҐ4sV=Ɨ]\5W?tGՋ ~K ekvX.xD[E)W#a Ӝni`XEA-]rF>5xR|ky֎o:e}Um9m!k~hM5o#fQ]K|=iWw]69)r5yqfx5ǞZ&aL;V|['ц#y *i=Եsv G{H1DHpy/kR?ʵϼV]24 fUvUՍ-&ծV}$G "t>(6+?/IՐcS/>C٠-Wep)ݝGݩQ팭=ژViiO*P&:\dS]=TN{J.|vkc8C/M+8\5RO NLnmGe=^:=ÍL; G0EBS{ :{V9_t>cLaܟ$>HpLL'oMHO'78eS5a%;gOmuogJP%E:JG=ZokGe5E w[W"xgqd 7$dev\߬fPEqE53%w$jJta (Z9D!:aY&5DC!>Ei+9qZOHVL\J2̀:Q뫂3jSXJ˄9F32Œ|hzB;r$i%4O+,Fk!\4ʏ0d #ڍ#6tʆaIf4f6ohS{GKݪ:wTy kpubثqc`#n$h?^dj;9]jX{!j):SN-?5MudQK*ހf{U1H3'ȏ۪J'Pzl("C;vvis`NjgʮJ@ΕW95VyBCk#UlG)O1r+>bqR{5 ;HNЎn rG&هw%&r:5BCݵĭV`)˦k]m.A:WPW$݅g^N ]1O&Nc-oB3jꯛ-cܟL߈߉'ؐHR Ĩzs+27 {5K 4G‚kq{DceqV=M%>3 #M d8ynz{}]# t^LoKo oc8y'C2y(zlbƑd#*Z\SX`6Ι!iB`KG}I9oVoj}g,WEFl.fg7*⻰>uF;lQfQfnhUcXsQNkQ`S5P5G{|>yj3ъo`9eYWfH,)C\ u:^d]aY O7aF ~[/<5+8]Ul&ZnZV=K^6E4CeHS&ʋjrOz% kZ|vhw}4L)oz_BK\KYw%H ,qeAMx0 zVP TRv:niAS43A*TyXT=zV벘amab<QsG}Pe ?Uz5ӺdVQ6XleLݝiluGlF8~2s(ݜXlXLěV2p>\#3Dgh g=vnE5K'DZ5lhGf}@m;UMŎ 'j]M f=z?BuAb2D\zg yy^4~'C}=FU$CR..oЌNk=;=LW%dz>FF8WC;^c1T@QLev.>Bú,rV5<7!g̛ՉBd=[s oF\Oos:%bBo# Iw#RO詈N( v!/z `,dmNld~Gm*KcS,$8[j CjuDox&o(EUUa۠ G:픱xF >ǓQvvw <89Cω^+:uKdT[܎xB$|$(UZm#,k{Ţ6ӬM*YJ၌7I4;%>w7Um 5b}ܗhi}{JG,nhM4m O*:.=#VEʉ2#W2Yp\Fsg5O$8tW2k|{}-<{rlx{SZo4? WxrBCg\fd̮/֚@F׀7tZlBQsY tOȧRrLwDPct>at7Yj3bT/>:"NWݍ*^b+:?$u">GB(j2IfNy"pEL3&}Ծ4cy_!H#I67Μ^ 9z8_gpAA/y3`ӧ-Atw~[̊kLpR<;Rȕ'KVaD:s:<0*?W/.J #c] S۝'!qZ>CPZZ(k<<\{j]<{\5sn/mVM̐UO%ȣ|K(~Mamqq#hN֠(|eFY[{e",%jhxk W! sj dEdgc5G֪,ó7GATeqzLBQjM=R^4VjOKI?$85MS{zp5>7_+( CPQtrB]YkGN/ʫ6&6xl\h_@Fv shYB6:Z}8&iy"zZy'2NEy-L/cUVa̪h\ =GE74 ǜ>KQBlULmj{B,OQWS}\}PUܓϗs8Lq>͇O F I“,ہb8(o9,Nx9~^E?uʼnRiX=닒a &KVI.ov$Ȏ J:r Mm*|3ӚgAĐ㢄ZdO¥lՈ7~ґ9goKSIQchOCF4|bhP:Hf)p%QYKTF\ϣK{zBo.@_R^jfI*Z;BO\!Fh8 h#ZI"co>=gd> Yʢ D!љGoҸ]-i)r,G<6,S?ƣpC:@CI|" G.qWE9ta*JerZμ.Y*7\TuA5v JŵPvò 8QfmwMǹ#^5o"_1R {Y X+%S*BjX퉤 jd.Ʋ b)4D|C,#*\h,M2Vx l9a]Yvl[`ß|*$+ڍF3ӪhVsL]9Q(n2Lb9 <'lA&q'SO7$݋RLۭvwTqeTv7t^B=qltCUZmxW5妚O3W bs$_ >4(o\?pq]4 3Jɲs F.j/Z ZWKP2G) џ=-V.猝^wc o1mM?9LCuk"Mtޕ W+)a}\=,Ir?`?jhd8?ⅼ:MN0ʠ|{ B/TZfjo 4c2EÕ-tzA,l[6Z;BfϢ:-R}#/#%Z*yN(k<N" 緹ժlGv^V8oBĮ͎<3e¾ETF[=kZ;l/nOnsQ0tՖ(E>+Z][oqF%"/( " }#mxRV7凌4TdžF[8 T,d-:b!^K4YMF]%MLOX{^zJK9̩z%t.1-_<  VNϋZcwoX^H,0T1P8QZAN62rK&t9W-BkyZf,uT@p%J\|,U±䅸,wxAr\ӤC`ӂ@Ek'3H9_;="!w8XDςwnUVaAsx\hTJy*➰u]ch EuI0d:>|F.hP =[MpHQc8cb?%5yԘBpSh- = v t3R++lw4ċ@@,XGi>޴ :t2DE(,G$ ,$kE r /W hBPN|w*h2Qqvr^lOK$!ԏ/Ŀ[/OU'.(ϱ סHVe`ˬ':kܵ|JVz*1J y5Tvܼdu&ZDu;c"J3j-WiuVK^ef1@E%,JFf"@umS)j,v(SW /nV4WŽg.Z^$3VVaEZGN9'SHn$&XM#x YUQ< k|@Cq>r'?ˢbdY} ^J՜*"g,. k+$2Qcu}Ej^.E84~=૜CΓuT)8e:N# HitCBMe/"7 ub|3Cq$z?Ӆ6zHn$'rA (򊪶Ճ?E6Կev/flg̿4*ۘ))~3R2F:yIPI1lj"\!ukʰ :l7)$ywQ5Bh!>RM AyNp)'Kxˡҭ!M!xnf#k9-B:h'\%\FcceI!U΁Ax<\Js2 $U^ieoAnZMqH?%]䮤ߤkn ZEe/+ cէatVGZA7_ q{7D9R~8Dv1dn,+51ɾe޷]Hh)5Ja؂&;2U#!rD}ipF.e{\9HR])JO M #&h8JcMcWxx~zhE}n`#??oF%ewK=)Cb~)%D[kw :nkO1䈹YՃ8h) vb !mpV<w11_~ѡ`3-,˘ُa&e"Y!; ZW_=x7=E CfWf ?tW Q5f*fqsΙ8g# %0ejホy*FԆXKqv$Ajh 7:>N<,ru'G f'K<0N18?&"Hq_X$*~MyUNbAQ*܋IQmQo( ncgBCv@hD@Hfx<8X>+c&WrƦZ%{$~C{&jqƱ?g,UC 0UrpU,`i}5TsRf *{;حZ%JddyuF/%*!R^f{losGI!,܃-:->~;X#HiEZ|;#NqŹzZ^%$BL?c8 GI:{̖L\5twg=ԚmWqC% Dg:ttI,Qht2S'QZ|JK]Nft2=*y)JI:\r(W(2D M2FyN?:zBW-2( ]X!k> ʦSldz"G#U =W?0S{ʈh\O4%7<Ƚj]pq!Qa@jDirh!63tFf9S aSx Pc.u ]MGi?fD&b=P6=hP>}[G+Z;B{h.:xMIIRreRGi7:芚G[Q{\_r:Đ\涐Ǩ߄2\Խ_th_毮PӔj3hAu˞G2NYpU+O .&]%Q<Ӆ݊UΑukh>Mɀd,[(Cvu+YS+o`]wskW+i5Q4]݁߼DF>vxz;Nu V cEM|%,- KD&q$9f$7 w2JEIk5?G@ȟ<(c?4=R (=v3e_Y+>m4CD{PZQ脺q]'4Gs>l97el86.P.*jyTU~)<>2Wd_*MjZOd5,Jk+r@wmxUWwS-+M{BYHv44Y4~l? 7D=^WƩ.G%an&́Yi[/&1D ^܇@ %Vx W{qOQޭ-V9FyyQnvWw# (á\䃧rqtc35fSh,~ɻ5b\XaaDZ)Mh~CEeeyV+^a$+ȧI4WԔ/`T4/"XOhqSʿpa+F/K}8h'z>-ްsYfIwvg[k3y7OO5N}7 Q&)vbfjZ.uVQmR;CVXumPdl5nCeˍds',s(w9LiZ6陭&\ exC'-qD~;RR=1Տv/DwB2eiYj]QjqWP~%|}>^C IDAT~nV 8dw{ *!p @-E[ԹxQ2ZI%JH!tlGi+sh CM*g@cg!Y:#gujXE ו~t Lz=Wk9ޭ<8.x}ff̃eYYX"y:#p>j5"ޡ(lyy%Bf5R5r\롙Br#NY7&,["ɍM-Fd[ٚ[Jȋβ<M '6zVg2rʦl"U͡26Em~Xf%B p$"]-j%ޡLwf?N>YB:]iꅼT}` ZF$͑a 'XdYq~(X?.Ʋ(4&ko\9,ճNYX`  Wz^7+ h%Lv*zZu3)T" Z(q((Moѵ*g=)uO;vT4RtPT=Se#(Ȃ5rh^9z uv͉A]>lqC[Ll5Yj=J PPұh0B`hf"4 6H?ʢ355YL %E-hKut+>A9;vYJ0Y'P+j:o m ~N+5C ̕#P3؞LlK~G;Ÿa `'UkkAת &8ytۭSz\htVSj%-us㺤1C]qQ>9!  >zr,JSu\CCIP:|:$<O_F(t%̌Kn+͔tvZlx!k\]uͻ >`{Ea8Miוt2ڧ3ǡk UlQ;( (_ rGX)X$'A*& "pz\(!g8Sɶ}" $|aܴsƅ'WP:FW+=Ll>J.WQ%œi>); C=?G"N>פ7I~v'.~۹>hxC<[0iʭ_Wʩկz)m؊ϰ ݎ:sP {G-=lYVb.Vr",U}Rb4CnON?3KʓocZ ke>#rshIi\PUT#l=d >Ej( g@kxGkъ/.c hz:lh7䎞/)\9yO̐MOǢ0CRH4qb";e!kx$<ˋ="vp^j6NIg3l@'O߱-V;35wz wٸR5EZpT΂;uU禈 b ,PnzPSü" c:>*ANES`Ur9 )>pJK=Aއ'dGD;x%ڨ; a) 4GJW3|Ǵ0푝D"-A #D¨Xʫ[?!mBz}ݭhu"hh/'Zv1ۼot~xDº1>lQ.BB0L唬Tq2Xf{%wQy3>L -x#y?W!o[u )Hm!=gLrrxa0II(*X".(=C ~3I|@!\EkpuxFkf_{i!LFyFޙv[&P_e%fq9C 0¿hqȳ.Prۀ9` ,+3 c u >[ / (gE}u5O%J  ]iV7.ChG;v_RVu%VTfqFŮ#?T9Ӗ,hm58w#j(F꾯 +Jܸ݀&}E+8ϡ#ʰN6Uq?D 6U܀wkpj}DkQ 2!t[0 2S-U6R,dXqkӌ{QS})|/rY3ܝo]8V6j;) ;Đ2*yavq:G?/Flw88zZ4.-#y( x pb"mEy&ဨ{] &d,["rvsqx>*W)<,: 7PJ*}{\LL"&8-01l,DB"rZ1$qEYTwv̤h0@"'֟E12JGpQ<¿"nnp&qݙڱpLfOcBQ11˪j>9DY}U@t=P>+e>Ù̽cQM<;z{Ж۵$|?>(B(V,t1Mt'~RIʱ4"BU7 Y*,OcU#x" )T׼\Z'>#TF̢1]ǒ6Y P~֥^$h"ܵ3쌯 .! ar(%:\&?&7P[ZJq?0Mgp)x"zX}e$QRU=I <;$]T2[z|;sܧK0yԯF߮-peUO\CVP2̀0XnQ#HEz+yy C#F|y(Oe{m]D@C(5Tn)64f Qϕ=4Exq-vKGRSB2H,*b kI.hI,bGV9GrT3=̼jf"cX;Ͷ F Mxo43ݻ{GmfBxdv -_]"O_VHRk\qb(J9K؋۸/M[v{7Q8l`{/īiP ws$2#QߣQZ !usU 1l~5Lk6 w֘~ %O  {f-켓^fC'h`>/n[ݩ174TCbhM߼d+i"|iȬt'ʊ86CP"J"xn'tȏ4$y978e Q*HP.~6l$ó$^Xw}v|&u]I?oZ/OR]Y=1߅jEh:mE9*$fI!V@a2YF+qJ:rC0 ,%k\ņYC3^\_ռlĞ tf4@HMKW.A ,,{yFEZVwk\DUܰ:aytF驔sjU^ _dWh^!a,#:HKnxn(Z.";."&tETQacmdXT(̐ex 7+\b>rq%~]QS#cM0: L)hqZ1&Gi-IY^q.4 ?C?_d%r_"̪qf:wC!Se-2?Q8m<x,)hb "4tfϺNaFTqymk.&0"A'5Wz|8:}Ap#Jy y.a'Nˠ";I#]DPUl}h'}[ 0#轜6<ģ.! Q3{E TP-㸆ջ,#E (rdh ti=s9íoc񬚼;Vt;18Pexo\lft -?xEyr/72^dT ]&IzWi9o8{CKlh8췽Noo0kSʠ}w)$9iG/bS9@XwkA2d)@{-Ug/Q_X/Q-|,J%jʔہR!H1|O?ȷxŨ-=psIҌv}.Mqm-[7e­m-۸76l-,nm ^sv _gfY+J:9w%~Mv37 e pH8A!0Вu]SCqOXTw e \nOoCV{Ɗu%sQjL)7Q w0 x(<ϊۭt7H?Aq+J]|VZp_`Pflj\ʲhcgufw ǣɾtXV ^EqW$ip38(r0'?Zo [ ;]WTc_:&{ȷ%G+&Z8Q݁:BOinWwH1{3F3f pJ& OZ.pF*SڮGkyh<ͽX -jYKŤz ߂[}C[Af͢,Iv j_F _v-+%PO|[gXFgfzWX?&x|+C xOHcd|#l ɰZ,S$(#Y0S!A<:8o54dɌob,P;0`=x7Z[j:>p.X`8h(߂bG+؋$CY8$5$&[S T6OJhÖQ QE@equw%xe#Y̖_2BQ&n(q  IDATb?Zs6P7S/M Oc9ꕵh#30}c?ǬB# sڰ('h ū@9q]+ ?hMW{\G-s+An;RއWaK+mx7щWafXfc]RGx!QDԙ,XnMh!LrED9' wA?F{! x#?~]{A_D6z/0Ufp_(&xó-*g. {p o ΍>M3*`:xI $j FE  p W'`U@@G CD| 7d1ܓ@j`.<ˣҨ &pb/aY)j&% òpx,77v#']&sb;h.3 q*[3ʴ{t ҙ$+x`e̪x@KN']DRIkepspX9_Mt&.3FMjT ?)9~8ž RJVcrJΤ{hs!!IXD9 Wҕo0Tg6k3X1sU5>WLGq!R)$-rY5I'}5qZ!CNV O_.*۳w1% ,.ƉbR%L<*qQWt! ߭ΰ J˰R(JLRxa|e.߁xR q\J΋#ExsGuc 6NtEq[t#V `xŊ3Ya dm c4>o6:FXr8Ƈid &N$m/| t;7we~34|`5E3xK@_Ӎ d\hފ=Rs4s̀&6U#djV$$J{"k Yhm={Zi)0d^K%\vϪhg*umOwE SCWz#Rqѿ&kv<aGIYROouR^s&Z"cdި^wOOXKI=QE9IUJvU͋ ;GNwY< ͜ wv'`MьOkz36`*- /HjM3b-}<'mޱPAB* {{kv\O>&G;zΆz_rM~ RΫKf}?9Y(SI'Y;=8ҁ.cM{YZKI=̝6% b5CCQhG~b;xx4h:g߰'Zb_{ai<ԷH@-7Y`G2рkރbmDi1BbϛeH[6(N[{> ,$ߧ uqe 3Z+ +jM%R[_ aơab1 c! o6E@]oIpqԞfvxkϣ|ǸKo!Cxi =YW.IJw +<+l!Z$bR^y98W\2[OIMq005174hVS;fô|"Q) ]h.R\%D m ngS$/9_NspIMw@גLly%, +L7*3rKԏ i-Ǻى&}V׶5xؚY%o]|PEWzl{jb3sI?H!Uڏ)VWT趈,&l=thr])EYn&GpE;XVMpYSZLq+ ]6R7o칉ؙ[U#pɬ? |o6;ǁhV@w@bHC! [Џ`*ï| OO6 Y`ၟ`7Xc}؉M`I1^0.0|ip8ʛx0!ւ2(mnتN%jAl d7?.p,j C ڇ(^DQWX?e? &ɗƤ n$~:y5gUXDIvAMip-C?!"=Q*7"AZFJUHSŝWnRqZG#< gmr tR|1$-w2ǡ")jR$i1o!>tvQuvoVLox7#'KNJÝi7x >I!_]dLE]Hy\u~m =JgUQc5mG;;ag2R<?(bŢ" :kЃ4vyla tYnWz!-"r؝&/OCrk\ gV}Ǻui|"͔j݌]1R]:wAU:R+ɣ71`䢙(!a8#ǗwrB( ^I+)onHck/uwҦ .8D땍)lI?Y,;" w -@Dix |-VlzZ>URw9lǍZ.d Ywaۋ`Q"̐UTJ<,aETUT:h-;%(Y҄1;x }-R͂vOJHޡcb9z=}06EFite3:fl3 y т L(3@kASO\ɳ*|C l@]Oj9 CQ6$cr#mhאrԓoQTVilYtB } Ƃ grIkz!EX1|`q˸QA>%(r7|zoy~[Um;޹$aeQ`iv#}Ƈ칾RƽR9r iIN Ӎ 1WZ6C07f 1֥'Pt98*<~>'|vW/$U6i5 EC=]4i (X2ձۖr0X譞ȳ@wPb5Ĩ {Pp'h[8XWs(0:kk|;k^4PTWۅS{T]"#{;g45Nf_'Pcq7Uef3'D [AG8j%nLte/OLZPk mY1vu<w[e` eSf E~%ߪn5,l"FM_ͬ9uib]>D/\fD㛭&F:;kN0s<|:$š2TWB0"ɶǥA peV4-jk.QӾHX?Tv<:Ek\@wF:EGٽ s㢧dHY %3˧>_>E@aL$+Ge^:/jzt|.CXI~gkyǺ}ϣW$-Q |U./l| _*`6Ky/g"i\DO)׹l]?47[='y">]4Vj)Ka5x~#MgہhiȾim݅"2P]D(G]!cNfN߱voQi;/@E8SV{:DFʊ ʴiۈNkpJ9epXd]Ɉh ziV^y!hȏ"Mk2w{YT:5@c@u.Uv*V*d >Y9aKXL(@GZ2J\WN4FK+/̛`Fi*ϡ=a yK _&0Ap ?}D. vHKQ6n,%s6T}B*J80 nY; 皵u 'k,-eh_ bf E CZy"qI##+C-:Xsq!WE| ( Z7@+bDy{P`D,طV`8؀ΑY؄XJ];acWrVI'ƻy{b%,wfIk[ i Q٪V}JkWHRCsXJ꒪bo~2yȰ1>f1P3=,/"'*բsBq^2k~@?do#,`(`3XS._N*М}i?I dL/⭙W+s#=u4"0XM$A-hڠ,9D=VUX ]hHkI5I= %ߕ'ՖdTjyJg9=ˉ>J̾v;sJ@B~a>>Tga0#*Xz_>'Vd++! ? 4"8_2x"ox EPLN#Y9uFoY7fSPL*I' {c `Ln%jb <̙5"pj@k-r]?{VR_$B`GNJ lPI@%Q_` >ԛFAXXWyfg+,Ɠi.r2*cjHZ}^Q $ B Sa*Ss1Z: Z#b B7 .&,ͶF}XGr I%Nz -?pؘCpQDv_9 0Y"33`_E(by -"pzCptV+:]oD(%NMv3PaX#x2*l[0n-ڣ\vujLj{t;a+OPnm6 x{:JE*XTnfR$8 6* >?򀯲@qĀ!g{-&!&|(  h3[Nٝ"k#wW[;HoOY ~:WXA׼Ɵ,֋KGy[ARXN ¯;|kb O鰣)<m+-ʊl?ʰLa^'1(J_H&MQV;˧}tTT$ib-I).ku#4M3J_Wlg('R(]=Ba+BN9+E v8tQh "-c}|ĝx_$# .軹y:/t+lk!x5_,69]z=*-M!d7 cw:rJOp5H'`ɵ*:mҀHa]<]HLj!cC!$^?߰r9Gw!3Q](OT GntgTIƯSV,GOX3Y{% 6tApͥQcE YP# ރ\V?BEK0G!8@}pj(1(MuUXm[2.\48 Z.F`4g]#Q UoXO×k>.E`2$hO}4Zj;J)0M%`<5Pd {sD~F}Ug&#S'}h%^p}稧[nX&xB̵98k\2p aWڳ->VFD} Y_1vK>"$-!~k.ÇA0}:2ʫ(i/N1lkkoZWE/LSjv7=3FZIh/ȗ6r$Iyp{VH#I,Hk*tC@K@ pQBN'TKO4$5b|$S++nEv: _ڨp*]fOfVoA aGM\Jk Y 8vDg8 |mѿ-zV[S܁znG 9N*7h\|p ,x3ꮃ3X]t{xpM2 -\ ^A2h4JJtҗQ_^1l9R⥥Cy#bi*=LPgec G8uf\ƛ/-ZY^GPU+ԙrw'5@Q|0xFv(f~Fw</@Ŝau \ӪYp (DB7.;Ūi4j ÏԳ!Os upu][+ G ʿEa#Džs R:ɯlφ9G,FV#v*j!h9#f;{X+IܾHpT POMb^NwɓSX&C> &mD3ހEOx@|doʄ!BRGRBNm>r)_ )w@UѺfv;B(?B_f k^SD5yX=Pli{VR)GΎ8VyBly.(h\v'vdSX;6e} S sH@-_NhqxCN,rȂo..o_(%ͺW[9^7R6;I9ZAh&(=ԍدF7D08ʻ9\7W]<Ȯo6s9,t Ũ_/ =Ii@N5d讠/vmgc#+תc'F'Gc y. r},/b;jߠ$dY# S[ka/7 @yH&* ð«seAY=.x'ѯp#:nNpLBzjC5|EAIyj (ÕjA (G rb;~ۍh-0Z&CGp+,@g1,p=r5x=H& k$΃SVkhc-cJ^l-퍝`,[yEq/@ͳx'veÎ`u{+$6G$/c<@lfLk-}؂~<&W} YY#~ph&`ˠ,9*@:eh=|Z)Q gx +H9Z^ `CH(mXAݔce?G h5tʋpK@5t  `Cε; (5RLab!9`vzOK$Td<&˔⃸@ٯj)vO!xY/x31~ϝ r 泿cnDJ^H2_.>|nNv\ĩ9,~B|S/(o``JC+]j-8 ~D~cv8ٲhmh]1I&JYb ܯ¥N9LvDV(0^cs\7lum%~}&㬲 SO%-􊥬Xdqy"W\%#:Ga5 幤@,mC{#KDfG^ibKM;ʃ`noF'f~}Տ9VNvnbΎkXm2-cv pr[y>Ts7omUp^[]ul{j)i5GFg)4rVL8Eyr^ ci>khB Y#U^\}vKje`zo'blm7멋`W,;7 ;""&Ȅ]GV_&`l5cµUY IDAToT)GQe)^#4/9&r ,ME`nF8?fyy:w6-|i0%H)\{::hGZ{^ez~md#ϼ8+` ?WvP8P,ZOz(]p%b]*d.ډX<@zKApRS2V5d':ڱ7&CmqZAƼEu+S?hfUo\)boBo$=4ZIdg8{^ܚ̅&{4ES|t@Y#R+j~]G֍_?.sم0mEYnl#NDUٯ"o?̮|X' uUg(kQ|5;eBv^R+ pc-Nʙ1KE,F򩨁iVJiT0Ceߠ9, %P~?`&k|"!rm 0C#<@orMPE*"҇U`!)ȱr`PGȩ2Â>T\ @gLbE8/:~JLX<<]DkQu}2)$F >K=0:HCv8nd紶(/h2[FK?s{ZuLL+㩡e%Q1laR;x:M(HYFNTon/ }8 &nU#w|q$;ĴqyFppTeÓgeE CU:n-sAC;!6dEKV$ףqih6>v \fN$fd3H9<=MoX8|\ߑTTs4/,5%-VHx8^r#;aotQ]١H;'{;d讽.h-w=c^Ѕ<]"+&_YJ5zdR(<\PV^QFPO<$o=t|͡[V+AIMOCao_=2V{ 2$bASeO90 QZJeob9u j4 ja6'e=i4NCe |GP>ܟJ 59 }ݙFL1+ZuVANo?Zp>Ctnɇ, :KM9APKnZj>?3촋u2PŕXƿ,oiޮ'|T,#廇2oKPG M 3p(4 Lل ~2'lΏy-= Y7C\xfy;F [0=0#nY&NJPS(zC8gouжt]bͬY_W?q8h=/vrāE!/j@MXv= =l K Tߩn>7+N~ڝ9^*@ >9T./r4&sA`N_/cUrŻ*yF FiI_]n8ـGjvR<г&.k~仑U)[/x1H;PÇ5 .+{"I 6[8oJQ<% p;ڼb~]F|[W/Dnsvw#V!nwVoc4φVB܍+%wҟ,>s*Q=ήc yʮVCyt$l  W*ig5-z}?~QQN+j89< YmL!1 .9H-W؏p1mC|.z :K8_Ջ Eկ@÷X梹vfP/cat[+gb('@ЧrR1Rl( g,h}A D>Bn ʏt2y]m5p(QT@%VA0 TWe.d;C tҀ\,**S+X Iɏ`x#<޶AN|!/f`nev)8OM))yëz͜aY_̦F]eGΊfMԃ`*ޮ5Tj&rmNTd rJ7ƅh#*{"M51f^?"KV3efb f6 0|kA,$W˥,?|8 c1ADզZ{@rFU*#; k奓m2;[˜ ֮VM !t((U+RG?I(2QDܤ*2DbeҦt$$NeUb6J<0 _W |2pwz̖wqNԋtkJ0w^OK&A^[GQIb;o> (lZQ-?8'N6\r-`;2*2}պYqD]pt+𪬛ZjFvxpT߫,iwA'֮>MGx0ھem:Țc`GѠ Neo\D1.20FI!j5'1q|/Y ܎+GTBg0){N'O  YG0ITׂM` çY&?C$myUxAI@9RZTu|suVE3%G{aa+yV`-Te]uݛ5փ-xCT/~2\Km8ʆ߈ jCf o8`n3d5nwHur-_)} {3_8RfI;jA1Tnfd,d-V̭_`7f  no8E>w9sψ@69j8abuE||i]Uȟ86Rt}'1ЋttfK^Ï?_,TN:(hm;|EdE4=CeH2w}|v1О% uW:&<;9AK/c7 Z 9sъ/;x\>%#$zʳ[|Le)1} Koz4 CAKX "aT ¿^*)l$tâ nR5D] TTɣ J0 6ƻA'P[Bh'-ہ[vKԧ8jfNP]`GWʢ?pct tg's4.zW` '[b%Қ/M}?e Vae[r5,/ :oYPD~U;p\Qޱi68Cυa*|멵%ܕǭ5̢YO~noOsyǩmTqѪb3("֒9K.e->V+qOwQ#A([8H EB\^I-8HӳU)ủ1#9GNRh)'Aa䵮  Oa~\ Ʋl=^Igjq6r=?ެՎii[C,ŵU}o96aW{NK U…&>p|(%ڲ >))vaYtDp4o3WA]/Uɴ,}JW|}\͔ !6nOWm7zJ=^@Kd @3:8 -}@Nk3"ǁ] K3Aa,2<;)DXv%fVEクo>1O3*l57NEP9孞[*w!GٖN8.n}CBC@@9˸kG6wfiJR +}t=uDJ wgGQ ]~_oc۠!VQ1 =P t6ʶF""W5QuA7Xiࡠ-Vw;f`%P'5{PT f^ P4^x ^^5B>A x}۸& F@%~T wPgO= '4Aʊс6KfīGYoadAx]>|@)6m7.ʩ5YkQBmXJ׀~(ޝ>C"GE&ވJ098n^ﲫyK'dtL˜xo1=?# \h*j%w ?˦o/~υ,fPTx>?ea'DW_e%կ1kfu"KGY=f?H|zjiwG =DKT]+e+ERRu6`/'3?۷ۧ`r+uRU$V$Ţ{5~x2Ge{eICh;i##Ŵ)#Y=QSvEOٚc'd^|yg!M} ByFuGp\CuFl8KQM8T O{@QXQv)UUlxKExjgcS|+S(vEuG@Cd5qf9`1XM9_#a%h_A‹pjVgOR-mHKq{1/C15Lep 4d59 tea#{5pS@?\W>_p4_(o(Jy Dn_F4e6590[Tc&T5bb2-F'*8l*h$[,XZ'Vw~VZUkHKMǪw9\Ky cno cX\**H 4 4ڿ SOeælf7D2;O}27UH)[6םb~wơ#5|QMטK!ށJe"|vmPW+];ocX&Mz:(fQ]K }Q3έ8#6xq>Bs]n!>l4<a%7r|RcHXv4/68jo1rYփ.I|)$v7z?NY'2"2x+M.9'L}Uai*~;PMc|PUdZX{]xQj5Y?K2 'eQ9VNic=MP"O0V{ ]LuSZQ%W{VhϚ)Z\+%fȐgc>MVuu92YNKb _r0L`\)O>ڐCL cZ]qG}exQ!nQ觽kX+K¶d `HWwC$wxCV[(k& }jsd}"*Q$~ae ՖD6foӮcF+#zp4֙Q 9R_/h=^ٞG86p+KhoRuv`>ZΖIz [~} &>auoɸ4k@IπqNS6s湬G]CW]kwux2<_SrlfoZT6(\EyS xy Е$Z'(鰗hEGzxL\ݱM@$'+s:O;q(]%Y7,./J^@#G@E!Pe tF@yb5Ǻ.rV'K hn:.dT-dWESޅxר]QE,N'^L|EQycFjڋ!3Ζ,NgOE3FҐ2]laoؿ$|SNeq-pnaHN:zDzY>?43,c> =E9~2=^_FU14GO\{|*n/7".´-uQ˄jEڧ]wxDx[@M;']gH3e;tSP$]f%X^}ĺrX>{d7SY4e϶ ӖlD"ʃhH#܀jIr08+))C~5\>VPe8Nqd܆g*ec `ʅp L_{&9񠔕n1}{`KPޒݮN9¯lףeBPs#U=s :{F줳̈́Ԫh??>gVGcaPl3*u9=s+`Caev>xXmN_I3lu%ytNYN>F9T$1r}?Kg}; x.z199rgKBTrTn9X^}:%͔I`4C;wfջh!1$\WԝN\mEG$ Uު1X:Er&,[;3>t+"*"0/|bR<7c7!P.9D*շ3=KRFvUqDq8F q|w Dt^eS IDATWSj4s]`,©h{QUCÝd;'5!mEg)I)|' 4BYFXg].~;n2j-|maqTAJY+cV^V[e呲4E%n Ϲ$MigY ΁[.k^x\ib)O'J:Xv1Qx66`TE/^D& ͆+ޖODCw(QT%)~tP^'d) P n#{fo:/;m؊z/R5Sx=1^݂bhƏi`Es8&jęNs^pW67 VF+b[orBQG$7[omF7cX}CT}R=ir]MgوT/b{Db_"[ܙpʷ)-z$Ͳ13|tӦ)s1ZTrگ8$[8,πhުPḩ86>||eą ~jdS;m637ӓF*wG.&g#KGk/RsGq,H^cg5az[; =w,j-]6Z+.@s 'JGs`YUh$g4ZOikԵ{\=NW}=Lqo) VOB%s4i'YU;NYYRQac0Wa+1Hz:=*eUq6N1F5Ɓk,c8OoJb.vdult]/X rZC[XӮw"'ypOY}WnW+>`\4'F_8N;ܧ=kE9pp?WeL֓#iߐ.h,:|d Hnu| 'AC %DTH{r@a}i & hZ*!*hkT f[.c;C9Q5DT>ۧM>W%d8ʣ xݗRhbx/'/w7(/{^2atqnќc 4=)x(f+GiLdO#~yK>AnW3$EId<ʫj OõlF6>D LD_AZE𴠣DCGË A'@tCy8~)3(cdze+v$%I1j&:D+26X|Tkyg0x(^D?|QENEׂA?/0ё -ЂsZ`$W>Pց稹zQG}*\ሴ8 r`,)obRoT\ud&HQr&.Sc{٤@-Ӵ(P9̪'XMHZ&6w,X9v;#\ew]F/}\awv]]w7^TR[,E#yg)e5 $h~^N= A"$t6ǮOZ&Tm'C:=w}Lo y`3.t7ՓHbu$4W8&iEɁZȹrW->revp!Ejc6Xs8MW9ȚY| G LEZu)'[43To]/J0^G(Y so4uIja5j7`H%q˴zC-ltVVT#F6?a2ʲy/7oj 4䦺^5ȒKn7fxw:jugYG>*`U{4ǺhnOw'VZox/?Gt|)cpx{(G+lxd+IeCiN࿠/=(?YO|╂d%F7 k*m2\Ge+. '78mV~VPc\&0u|@xAϼ l Sh~4wwg8gdѮ~ &E9?܆q":T_W@8P2\ґޫ:m#VtSYq5?[ \G+1RNkzk0ZJgLfV &/q A F#)l4H *`{!Z;iμ%g-XM騕vLSBjoU)_|lU'l*^zױ䍕s"ts rr4%zWl6O۱2Gm'g٣`;% {z=Wf6%a 5_#N06UPmݵ#14zDJ OL{;($EiAA뒈|X*$Sx%U'A[N.(2 vxR\Sr܅3у1,/[+py܄s/10 q;$â lL/yNR0yQȞF Y)&TzAe'>F X5|639@ABX6CLoq/@B K l)?#<#:Λv'5JqwX{{υS/K I|aaSL*Ocló9'к9׉tPr>obLVdz@/,+r2Bz!7g`0&^2K*{wOLfyV5)RQl`E^йZSu+D@1i *p579 ~`Y `p\?㽳!_Wa9cۺg3X= kϑ^vQ,r_PY">w(ODCOAN{2\$Eύ2`GxH&7@= %mWouOc3:I aOF]ōczGqvM9M?@QWڃQT?gkTd`苑7|Ii~,e7B6D`3b16Xu ƒ_ }A%QKQZMZjy$I!S9}wZ2su AHZxY*o5&Eg6L]wm증AcKPkOhi(+"C26FA_Imum?rKPWQۓI5JD8ň{`/9G3sFdIr+#||H#xx63 XC4qދTȟ4:iI]dj6#;$f4/CDVZS*LuV>L`}>@%LEhn5#J8sy.c=|\J#< <~^J );AvBd85ޟO"=Y-Jn1}K(nnⰋCv6S>kqq:G} )cu< Gc,CQJva *2CZD-qBpWf 1lODoyIO|>tcӀ7b3h$p_2պp-yvw%A[Բh1(!XȘY~p7wQn%9@A3}0l,8#> RfZ.@\B8}9+Y濠ԻvPєcUghr}z>v7ZLz#}<9d ^Q Z%׳FZ<X&3~O/2>$MƃY(Z,sRp\~q[3@w~o;\Z O7vxp_f57/+缭%擋p8,a簺ij;j_>d-P1Ԅf2jR8Lƕ]KA5ƛg19( *AHKEO@8YlHOf4͋lF2[OV*O M6FZ&k@Muw$yrdk56\(9 T LWV:V2x6Uk+뉫8# TJwM/a5g~( #H;-{!ͬL, c'xV?H+Tx ? ʒN~>NڝͲ5r /1:"&)OiZ{q;oh+璞Kyܣ]ܯXkYol0+UisWwSl;y>11ݦ>W* FsA^^j!RwV5Qshٌ˹y24PB#QсJp]N6S׺;;YڸۦLK$鯃,Vyxb5o{x{?l`s\_|C!N.:.7}.n|/ߠxgZ ECI ]FzWY{Q#d5lw3ZOB=9WG !Ew~<j:%Vq . GRul pMj p*'itp|Ȉ)#Ft𿉁 j&n3_!3[νeX#ÔYhB]#H?愎VLsI|J&,*hZcw@[Yˉc!pf0-<š ?eIp>mKi}@&:Q|H(]L^FD۩%ˆ  "Ild)0V{wi2-| w~ȇ(K8킇Egp JA^n5ç#T4E6Ih?j ~mL$(N+];􎻽ZߍkNm x$|S\sTjM,+U\=h7p}#!o?`j[+V`~Np:i" CQܹksf]`J!b3!#;$V Fnʃ,W8lSF{cq_p/NOI)mEХo*8-A]73o.Q%n?X# K~_ ZQPK\I>uueEǜ(/ϻ!}&9&zM'΅YJ,ɑ_9O,:nۀ&`=0/.;n>s6tZ{G\R[YY9ΏQ_b -xVae,S{B"Paƞ?|o\R'8 jvQ33a 6'ґ<7Ms^g` gĄۧ;}߼36pc eOpH'xGE_X<8ۇ;M3@?}.v]OHrz```ЂˬTCU;^[>d9 4NHچPg2{=Ⱦy:T<%r6 E.|ݒ$0;&* Ǔ:^ia~!O"fjSoWKݏ+FYKa }NE >Y Srg͹-` p.atSKJN;@Yga~'nsORy}tו(%T8҅4qz4ݽruk8$eG(7u a-<  Ga \}+3 ʕ菄N~LH:;YuX9٥;͜}CQhT8x]\|sJEȴ" y&) h.hLch,H}12lFp#|A h&>Im-ז"cR#PKurN '3arpvt,A7?QpBT* 4!d.9M,f9B`(*-tb}0c[, jqu/Eq{Dd_Y=IGA ~ڪUTPW

pArš(`o C;f*-6ZA]RFy(pLHH`X , "HޏQ)ȧ3]L? sAP-pI#ͨ@)JPC+<8m:0APX%G8@`U TeԆӘK֓y` -;Hfn(RS q P#X ha5(YcQ@bRz|@K8BT3;jl b(l5y{#4,+I2Z$iDH!'T$Q؉޷?!"A2DH!d.qQK9M zn,BV@ P>E@60"Yb=Ke1θhKQӢ`i)]%Nj9LCH(H M <M4PhsPRLg#FPs#1`IU ETVdLpBTaUd+ "Fj@֒]`;`T+QLQPFmcOXy0- 3׃(;M` 5H`ʬWؾH, pPEVJ 䑅5#sXԈe1~oQtC:40ᆺȎ$ۭ"8HDخ;ɩHyzIZy\E \By҈ aS܀:#ɛJA—Y.'3ɩzHH)p '`Hة C ÔCa N 20,pX`!`Dp]Ń9UL?h؅P0+E@WиJVL>[Ċ 90hDocΊHjF'j|/Q6ƪDp# 20ĨٮDOꏦʍH ȁPM&(:OЗd9 H0/ H*RYY9xH8Pϓ)t8˲L̀jRlH؇ւh| p#<3Kr !Dh +:IPsr< YBGM(Se3#{Q!E0yN@Ҡ `}Чlىbmа5jKM$AH +*U=s@ 1bV``Ҁ8Q]PQ']!,ha3=>8X:J3-R o+1-Ew6Ij m |#h|:A 8yhҊ 0`+8B =% gߝ b2Y -XYIMh-%@" :Ƀɉz4=:DELNxEޫ:4a條7\S # $pV肍Haaa@P?0,8Og S-4ؘ6]KA` ƴ}X;dh=z=,]i,(eZQL;sH̼!XxWB>, *Rx(VC>a#2iˀT0tX4c2E8>  רE4+yIވ.Q>z:MČk(K(Є(Hl$(f^6*3&r";!$0JXX% ,x53Ye'C * *ڑڠ2 S jn@D[Їz)؈[}!b61ЍF,Q;5>˃0  BZ8 H練xT.Z<(Ò0:gpSM^SoH6EK55fuΈHb D{ƀ3!P(@J/REfnϛ%{[ĉL&΢cHs.֐< 80K#:7sFܯxo JpdjnֺgPVȆ,s-X!5eNԭM"ȸЇ!"['y+yN:pd(P;=*xh?xT0X0G鹂XQ H<aPy2yֈP*0b߈z9QP4ZeCrH_H ^X`BxT\4˝:^^8>e-GT27vK }xQe7s  " BۢD 1xGaÎdž=h@ ,=6q A/U+яet8+(A,G0\>hɡ#f*ٲf+ⱵUԉa VYP"s `-C]6`K:(`M,uA{jmBDVyW# !y(`9D9IEre ^ Eϧ TȂ<+a^Z/s 3_M<B-wA3`P@Bۑ@4WL].mPEo}tB9Az1A1H!ۉ6G{F3pI%ZCB A$A@uVI'"eA("dD*4W]tSF;i@A(Q-`+4Ԕ(AEFSbB[dHIcdBRZdB1DjA֐+?$w@pXb}TXʅY8VlPiR5dM mZARֆAQPƸrNG`DCS0'#)5F@ttRLG^#Bމ0M7:W9<p߉9ޛ7Yr\PbrI  tpMzՁ):tF!Ю =[R%% @TQA5lG)jWJ DoG`[ }?A>0ةLGx T A'SAeOGfJd][h0z馟,W5$$[ăZriM3$p`!e~@ JmtvO"-q=`5#lv=+ _A K},` @0B S ؉t;9bę܄ɏƂL܄0H=Z@a l%ԣہ-Ɔje9*H rĘ ;2780`"-hH숐FChb y)BG"9`;X$ѪT2geQ8=6$F A!ة#&( -xO|P@ AedK38Y/(mmJƐSWQ1jAhh!$d% 1(Y&$( 6@Ȭ{&Ă< D2o3ħvE䬟 Ndȇ }|Գ~(hL'\{IáP֋Lq40&[Ճ d xKk^rF=ީ0lӰG<S`aՙ*րԤUhdW E* R<+X`" ICAdD9lIɄY`A)ړc6D O  ( YR#.Sj Q@/el`. ܶʆ $p ڐԮ!72k#? B11pK 8 X[#Hlja489·V3e׬%HZt sY|lHĪPD$d>DJ0D , Apu] 5ǕJ-lBSPCGW*: PyٛD!QDB(exVIZ4P'H P] mUT$ eZŰTW &L͑E$M7`l@ӀdK@a Poj7s9!d*@a}O@EQ~P ^[G0~-CЄyD<p5`~A!Ā@_xC<!oBţD@B.,_\l4HӜEhl6$&Clu(> `Y@"Wh @0l#zDX5@MY B۵D$A7(Sc0d4D P/C<-@'BMA8F9(26T=<8B<0/p̃ D`C#8C}XZbϰZ}NE!BD@lH!fL&Eh1 3 - n\A (LFTZ_0 QAnE%BDODVdAVCR]XV$CS`a RE6%.G܋[H$.z8*BDi"؍ sCDQ-5^QDGAU 67Z!_coB yg]# W>C;zv76m6A B,:-Ub\G-@5OGCKfwJ\ej< ik/Pohm-zU`m=G< > :#m6`!~14t]eA8tD#AB8Bl<F8P%K^GpHy,],05ϴA ,xIt0 댁RxNI(&,iSk,+FKl'l fnYPp.pYcҌAWNx!D/(yw҄DȰ.GL CH;Tn\׆\Ap[TSS*q(DksDr]D!˂kqŬd|åsxd/AЃN$4ETxD+#Aa)BΠ٣ZzxxHN]EPm+{0C`Gp+fE,E8YscF*-9Y`vi!t 5 wXҍ"87 4lC!l^BreY@+E`Q"p1~bFaQ. L';blL&Vkʪ8AƉ)'{Ưʚ(՗QZPDg*㍅B\XhsԱ恚E. |!5Ȩ@8aԂh":d1( )"2 xZ)j" k5i`c)&CA<0_(gk8,Bt`)7k*BS"+7' m߶b!BSK8ÈpLY1^cZ |sџ܊HsvۅWMP V7\ހ.]rJʰ& M-(B~pmdYUJ>p/&QI(&dYSSTU!g :(#322HUB Zpm"-> H9Zi rq m!!Ռ HТPR1M)P“&P`pBxl"d-є4 rIVPN'ZYlA@yA!(Da@D1D!BgH3 LzC"3f4#Rqe"_Bwt1޳(T3L7GPXa"LN-\;cSN[YAXuFPp)bPhH>K\zZ6 Raʠ&"UJuR5D6|R5ȐH0"@QMd ڋĸ%"tȯب7PŌi4=&Ep,N45a !PFB$.eX1= 5o" \_.X6Q3 !,hDt9sᆡ4ڠNO t2ى8Ԅ&1xnjW5ZN^*2 GC2F`{&ъl#LJ)CF"FP'eHdD:j<2É ̤5cD}H*$PLT qDy cD4@p8Ш)vj)ܸ"M,tZdHIa#,hZYnQxJ>!Ϡ|Tds X`S &M8HJP僵@&1R ͗\%TdhW`;Ж"R"t1_`q9.DXEd!TeԒeOXH83mBv¦5, 4ЁKh%7ᶁʊT顐+j. ;3 *5"-I?`lPkEѰkXC)ȉ(E%"d30zAZѧ`yE8LF^EtľBD5`9* R[H?6q@.bS!y^l @YN5 9ȁZ+)on)BfUzp>jY|*'*t+(ڭtTb Oh(j["^2ul;3hh4 qmp`م:L\S2 &6+t+OSԢs+).߽)" L.QH\qQm%U"*fHP l&tl!+ * iX@fjH`">EfH"rͧ"&BFizD6Nz:'hd,o0x)Bd(f jUbNA D]$BHEnD% *zhLoy,D.6r:¤! (Bk"ab'n!2Ik RA +0&:n"&m⊺*¥k! `A.b"b&BdD`X c %#2`2*b{k10^ ^o^giD!Eh9T}ha*f1Jd4-!jFԢi$MeJf@$/"瘂"b f@*qxB .C7 "GΦ..a)<6(6<(҃ Tm` CQ<1#^;$8@"\ARB6 B" = VU@Hzil6"~M *@6W#2k"n1 [%#m!D7a("+b/#Ԣ9OKb&Fk"F ;dRPaA>"@pbE>>t +1*Bɲ >)E,#@,0Ef ^fv pvH0"iRABv-dN /p!̫7Xഀi*( arijP2?tb>kA,QBA&Ơnp"$!{I\؊P$4+AEa B%LhhGƉAK%Ƣ`6%[(B7+/ZxS!9˥5^9y+J7Þi܋;y :Ԣ"< 2?Q .l)cr" 4 4U!+b |N"j>R.R儁UJ$E RRyV~OJ+,d VHK6)I(! %$ l!r$6# pb" Ad"rd"?`PaK>6AL"JhxF &b8@-&d 6i#\5?IcFf$&m{ Rjf+HE5'5L5va83Us5w0 .*Br3LKme~pbJc=)u>Ps0" L?* WGeC*L }Ku"rNbWF,2ng0xj!wEHyufEC1#ScF@s>pT19.x>DtBch! *b*RrTá<?"j`` t*?o)tKFHL h9t\WR wa/d;sR`L7>&j(vd@6Koo!ADA7Auz"m!B6뚖1Fc \ʥqW0duV!">VsKRfB^"*WM>V"܈3015M&#I#č882-x^*C"&j%eC"GhA]HR#@i(BBhm *t5gTHWj6Y02et#rF޷V>a"0f R+p`\6A c!PpaA@KLG h?* $[( ("kf" V S;K"$HN"?C*04/~)mܤ!b &@N" va2`S1k3 *p 8 }x7$e0 5"B6tU t*.e:Vj+"MO0"y{vhjƮ%~dxfDD(}f&ĵ vp*tCex+ `2٤$F%a0%0eqBo R t£zRkB!*F(w#sv#LN V$ZV۞>qB"|cO`Hr⎜"!A@ !b["Såٰ L<2b[pM#2"!{zV6B ,俿b^V `€FNOj+5X/`A 1u3;2) /VTc +>IM**"vCi:Y-nW5RS\[nzȉ(H6u]qEAij%Ur #tU,Fn0 >80f+0\眏@RVPh?, =S=*LdҁLY "MJ"P vhŐ"^l 2,IGJ`G!EB7M K PP^|"Fu"L\"YԠA}\9"^u"z3 F".8!jEëբ%VR 0vu<\fz'4Qh@zV)EIl;K0Fd X5zG >VFf9DiJf.22rKH"}yCr;1 6^8d2R ijRksBk!=*#-<+e9[?U@9Wvx$ro߉&dAX7$$lad*B!jHJ$,n⺮+6K }2YsZaZ՝iaUxV+ڠ~v%/E" d!gӞMa8B ).D M { FٴaI-On60Lk)PjEh *^Ha3o3|mԵ_ ΀$P B"BBf,]#U `0XR38qb ,Ylmh$$S UH@KorbC@ ;@#R6Q6xD(A0B3%B}ղp\xA:}6 k`rׯ h^|ɦ@/,ЕP@Q@P 4@p@d@ͷN u3,ݨe "+E@3`)6 AHdS# C i,DADI v(P BF5奀i$!2P$ IF"q uq&i\JQx@;9s”}-& 4[ťt cR  Y2Uuj9 TGc4FZP Yj]tHT\hA(BaRl XtC)PVM"!@Rs `&lPl)6%Q?F@ ,&l{/DMR@icЁU|YAI{\"d1m4(u%Ў@0}!2 c*<(@L@|u3/ٱcKdt w]E(pQb5> u3` <= 0і x#<\C\ıK eO RF'FJn;17!:Up Gy" bLPZkb]B OxKc!`~*D0C   g66 SM8# @)"N~P t\!\D#n$H5SejD 9VGDjcUtuw!7{'r 5:~fQ4 -ҲcD/X-ck\ LR XhMTD+o{%i C !#ghX:#|&&%GS=`!)ГB&:D1]Hj ʊBx\3\N&P*RҽU rƯ E|$3qq?Bj .|6H3v4 @FT i:ڸ GBV@6;B K -.:NMAˤ0tBLF6ba)@Oo I4Wcri`Z5Gs]~#6BG1@Gf}GTc `fSdfjcP<'   bI#Jc@wQAQ E9UxrW)URN'3"FRyqK1z91yG|bqdžq7x1!@AhWtx?ksG˸O6I>!p (/؟({Z')pK c ѣLDAd*T*'Ϡ* ʘ,* U8bZu@^ѳFAE) l2hUpzb3,'$ gaH A >z!v|EЬ x$GzB9S>& 6&1>m8s!t"X"yj)$E ƨJ"b*~$bbvHZbq ('eg$Z(P/ %"c-1GF!F rJ:YAy**(0lxdk'<t`:*Csc66.Co-( B9Pp,=j:# MZQpA(/ !I:u@*!1g}&Vw?+'!@eJc#@DNE-{jPae47oG}ocGʀpBa ~QS˞q~Qz҃l@.) < 'pU$ 0\B;2fB {;)3hz3p0`Ra0l@xѳU%^2 'x D~AD1Sho0T+-gP3Qb|--nb&ĎQD1V4EFB޻+'%LW6aAmocv4FA^ ቛza<?1A'PK(JiıX|w'a) G` $Y1hGiA^1 gj%M47yGS2SI+q7"P,Dz +F̯d/G Q˗KQ!OxkQ/A8P$[l!ĮD,@aux=Wx-`kqU0C)4/7s&;fRa쨜{j$~=Yjt{pV1a@`Ht ICcIB/ȱ̙mwv7JSk AZVqѽ/EEހ+ٜ׷!!w=vKRSU6'; Pp&q});'&j ܆3nTPЯ%$f1R) m%EO"&u[lT!+l! Q{kP\I.}F%!Uw ep*dр, !!6,ދjo|vAu;l"D) sٻQzLQ@'(!/!8v 'DJ!N۞1:kcݩ>`XrMlDDUѷȐk0͛UXH&0P*9dլ+UĒQܥc< DTB`hO},`m :*cm` @X0AGճnªA֍]2 0 { CsMMen Ow*-e3 A>ςR, ֨ Ҧ(>]Aʓ3،Z -ד~>"f@V4bdQ" |1 "'L8PKAKk6@m)K?d\#) s EnHh5c `4y X `)@z,K('M)U)\ F++YĈFF bf@ r2 C!P&&d2i@" &r_` f,5xp3W|77`=ě#@O0vQ9E*:TqiI mhꑏ4D=Ol֯ztx-@(T>$@\W-9_MІDD' bg;-R$b, n4B,hTb (?$=isRDŽe@=3~{ @ |"Ɠ_"9pF Ʉf2VC׹)O&cBBlF"_+@BE&moV3v"n{&ĞC=[>VR}̐MIz“`3n/LaT`2ZpGQ 4*-69:(^ P!>h2!g砘;H`9H6А8$a 9ȟ~8j-OY|`UنRH8 M;`XKSÜSXȅ5Ep69#׹ E(3h-\R(60 _ Hو2jr- m" X*78h* [, -LyII6iAڨS+}ĸyFqF+88yS:h : >c؄M  < ]` H"PхQ B2#BHT+PRp@L;r14 Y؄S~0p :6*' 34;~3EQ?[?ÿIihޠ#p+h/p!}\鴒0 Xȓ5L3 X ųA:o |XT\مU6=Ќخ3YPk3R464 H3T q4"a'Vd:Z0A6hKѐ +ƀASˠptۄ=hyMŊ!IIA~<y,8A"R$Tg#8&¼4#3 ( KA~Ѥ88K'AsʭLrI()|8jCD9њlC$;x+R/ܒ6M 0 )@O< 1 h"67Ъܠˍ ãBw+T( B MD8: :ΒP~4 ѥ0Ֆ c㉿1H+~(Y[ K('1:X`- DP~"dck|qM 3PH}(# VSK M80 39S3ZcѐhI?R |(BP?QWKK؇*uneRl%0E\f؍M-? xCU!, D(a 0F 1c8٧¨=8cpt} zI(nPp K1U;26MZ 8sD+xhc>8:U&Ɵ0I3銌xY(:K;O2skmY~Q ?J3TmIPz"$„ܤ4daɂw8͹* 2p| J܀ҭ /xQ*a0^52H X9 (>3.3x؇`">Xpl0C & f`ٖEYX*̮Ȃ9t, (QD=K51T1ޅ}ڄx ]C;BYih܀ Wy虥<(܋M1ڶ:BOx*Kń`+į4ځɍ| K21 '\ 5puPX^)@Pb8#q dќwC =/:5N( R Bzdዄ[YV]1X`Әlo޶,*XGa oEY gWh9\/{(kƟ , zh)@]Ƈƍ4S 1͒S !tیxN!c A3Ŕ12AY* 2 |3aÞ(GE; =Bͷ,iBXNVeTL3(X(3m0"T(0 i0e':0;K8jEZBSíi@mH ti(3+ ikN{H9Lˁ*PZ#|-)av)y 05Û7y]-@cwnǘ %63 YR-]yXR` R0-mg:PzJB6h ^X;pTݵΠ(Hv P騶Ei[(͋hhEe* u L(WfءP#ȉ1}\U H)]?:#8֩qJ GɈw"=R.a))qh}J?]cΫy-ti3<>Hw)C(5`F%ExŁ;oN g6>V"]u+- DRh"jBgRzQRCm5 HD4H.K #y/Y0(kDa`װ`8M6qI6iܸKu {%ˁЪ0Pn؄ KvH : )!]gI'!)B(o/:!L,\1O(wH@q}MׄP<.`.$Hx Bb"t C* &bDD hqF/` CEY 1_Jw4 Q FM7DUd$PDB$!(F4pYDCEDYѸq%7 @;o Ug7a>]& }a ae.6lJ#JB}E0kZ۳aal@}& 'FRfmxpuNJ/t K02 B$((t ,1,BdP)ɒBx)h "9 YV"C3(( $t7H%,M 6EQ sCs(FTGU ȩB ņQq!wrIER"en u(CU9|*d$98 ;CQ9IFδ<~<P<3QG{ &TybJBBrRT BiE&:"ĘtDQzY-+mɄa %TD!d4< "Q"v&T,(Wh, BG-q챯p"M j010a.dJG Zq%D&L0uHB.RE*WBTQfE>_!dE l)EU:%/UHApJ$H `@G(pC;6 pIM,0fc{Bq2|{F: !\0pKza|AEA~*'"I*#F5D?8[3&epTPy0>|.@@CC h!"kC؆6x4hl<Tz`b\"r94G8Hmd(p7ALȗ<72Q!#Þ Vxqz3taS0>#PyrG(!A9!d5v 1G}AReu$XC!@lZ CDz$ mF3HalY Q C*ZhJBP*̃._IĠgXE@bGSC@7Qvx&Hui" nyE䪯ĪQ#bHT`HD 5@$C%# L-?Bro 9wc6,i-zXcqG[?&A@h_bJU-!)ʍšaXCyяO!IJr`K-1ĈLGLBΆ6pHtoZ>$!HP#rIPcfQ8P{%LH.*ТnDla%(/Z+FJLknI#hz  =UPaXM&([3!P U 61Ba,c E*dDp3F [r">c WDZ$"칧3!h%5fIqȴU\FqF禴䙬f^DF@\o02äye-sNF.@B3:^-.4o<=3Yl F}l6XBH`uvqH?d[mQ~mn'LyINjeu(r:';QN;ĚԺ hA=aX@sUߌC("dxOaݎ8a:PNR Fp\q 3P< ,ղK>JuĬqK 6@$`!$ v cR4lRsܜэ.YnDƾ;&ρ~)&$luq|v%OCڄ yFEN@A9T%2  mQIB@'d7(u=p"Q#8~t/R9W+ha@w$1f~rR9FdEbl goB75Y![b3<%v1CCxF\ CP@xCB@\D?0\DD$D C]$TDCeC!A$WCWtCLX6Y([И@BEM aIDDH xV]QC sPk&RWuuXuKd $qD~_%]c=EiF@fXHLx`eZ\L 1]$$3<\.ނ<e$D/ГVCd &)MN (B?H] /VI2D&B$jśfD<4dsԨTAB#CHk@Puz tKDhF\ă"T&O0ʔx$H_A2D2B)@я0dt˱dLe>K"![`dB,ZĶV:J^&Z=C0 `HՙԆBdD|M>s(p Gq Fi G0DS-|EwDP "m'ߋ< tb9—zQD,X–!6@A ARSOxǽ. nDn CUI(@k81HlVEKEdݔvrm t[t3ę5lU9КDs_D F~L FGU{D*<赇^&D`$B97pA (=C^ C$&bQ Q qBLdƠ/ejsEܒLxLC(GS94dO9@5Tk\`P'"?r.0IlQERXFkA93qß`B@T.Ch`.C U+Bȁ\W8KEʘFzol$ M`` xcB w_(dMDjŰY$lBFq4~r*NX˜D܉ixĞ=LkH PL7%KUA^y< BxBϦ{/wTb),Ft/B <肁G5LP Y!siM[uFl&85DAY2hU*Y_,-?&  tu̚DxFm0)U+:A;ʫ2 NɱET$DAuaDccB NMeQjBD{zCQ6mCvr2f$h(#U\ QqOoo%r@T& qKK/`ȉf!8IFD*Ą-b$/sT{,44B0&ـ MS5I{t<$ȈHěII-\*,Ղjdn1H U9uŞ/91Fđ5ԴAbD"uǻJ`hBУEe{T {EҤ" 3mX8(SMET\EʔcgyJNrQqY["X&AcD LBf(<^P>i3/v\4]Uۤޥ/o&ATqE>3hJӂFN Cz[*C):)F/B/bb@FcDbFeXf`Kb ЅG,xIIX%IB7a1ao`hyJ (3Y]TB$ZУIƀ;EP%nei='?EU܆FZ2ƳQ@.89(k9HJl'J9A/b ' DE.y^VG]vEˁ("i9hH&BBfhJʲp :S1Mh4qcà`M8EhS=ف) =>jfC.Q=fbB*Sh=a(ꇪ0L*br'Zn1X u>L mjHs83X@N9hn7{|d46a C\"Hc FPXX:pb RC1o G`QRl *% m,GP5g@!x KFpĘHqx=6!dk`Bi@ðkP@O! gƐV65*O2>HA y'O±#Qz(Y5O-y !0k  g ߊ 2\! du"}'G0erjPZ0TR;1 Y1D';1! v,w)ʉ"':L\G2`*@zq ButH(y#K#E9,DKb@.3zaUԥ.=m v$=I:;k>&a I ^o(ֲ!R,[hB8 h4ЀD #"ʁ&B@Nakc+*TGK>~S&&Qւ(bL' ծ98b/14,!i'0\K~1|E1B'(`4'A_VCA"^ @96(b P9;qLK$b-ւaNT:d;Br~Bpn vpDEڠA*D`a@ cVrϚ1M7.$`4=Z*ְ~Bp dBoo~8JTH_ Jb4fa *@ n`|`qiu4A,2ER~q-lAOlЫ'"*e`ܢz( D(3^TL^E bb4,cX8 IO 7*8~B2N`–'z'G8@ zGk:":H򤒶b<`VnU-#O0Yyv#?7R!jt((Fq DtdQp WNf aβe^ w>֤P([0BUJD^"E"*FBHc+ЀE'f* r C NzC.sF50#~1wƭ*pHpWջ&E1b-˾ûUz1"BN Zjx[ ~B']fN"]P$22FcO t[t2'k\uD,;h-J8p)*ny&o o}o,/)!i,zn'肹xB܎nxZxtC (x"|'AI 8fq`+yb )ӎ)$a%, ekd PˊPWSo'LRx| '6T+Sx*` af"mpcdD" VB1>9fM*R\c(Lq.7xX"z49|1 vCv G5#*R3 &*cOw߮8KVL%pB,a\'x%< Kg G"x]faya7"$!xx1z ! vK 6d8 AxTq8T)d(c=vLhX>/OIeu.@t+qD4% *cX  -E4&"2#"hrzTNV,KVi6syb„#F;ŝI(^ NE P74]$EM(dof"!iۢlclX(b,Fq'*B1ڮb|B,Xn DhU##Bv b rD/[   AB.n ]$ _nnJz7q`F7,aOt@1:7'%l#\bϯQd0eR|"ybB}Be2|˖[) RUs M9= UC~RLX` #@|ЧSduB_2Sd4 |puc<*IKiU|OhFp$2ZUEBff?BXZxr$b(AB ( `@p 1B %O^EADEI @ .+)Q\'ZTx1؂@©0OI> ) %Q< By"082l#ƛC̫N[BTN'I x#7f$h)f2P̬$h{ @C2 #5`k$TkF%u ZL.q@tHyV'MCdvCay((DYڠPfNc\aM49)5TH }5HM~N*Z!4$0 5*6A`6[&hbB߫ |'6y,V2 K&|/ "B,6'NCZƺ.K"3(@F0g72,AVP``QT JLE@K2dЋ@]1&N<{LB`{*'HJJ 1R:з"h } `QP,W0, ,K !M ,3] d!% eET$l (8AP7P&4E7SxFg6!RT٨JЫtj]Zh4 SQG]")(- - _&@Yn">^ lm L{G{E8IQu/0@(0%D A $X7 5V- 6 *17z,D0} '"Ab$@͔S"QPI20HQBE J4d% Ll.wZJU8\g%МJImk,Tw7Q;Ї8X2b'TgX, :i+i*O8Ug>@Zi9:A(|S ތU`.TT !3^PLnO~] @yGQ9_N/xw= Y'V4ϼrV(3'X2PO9(c!Zh(J؎,! da!Ϩ3AU7F&2N1B?3(ŢՂHV,,c%]J;pL+'G HG1}-$88a"؄&*s&4A=tP 7 >E$@< ̧D`2=Af!Ԡt MAJǓe 9oZ8Fal 32h}`5 ',EBP.! $ꣽR(>A\#ˊ'!$&Ԯ;J/]l!"Y1QdRAq %" 6 S8$f} 6@m%pmAoH0ȉPK OhMh$QhˀџGĄ8 y^z'|m ZۄW=b@GB0H+bM r /M )E  ͂& b8a |}؅CRiܤVF !kd3Ȃ` $5J LO P:+\ՂɭCG|=-aOOGSB&31$ Nf)P?$8QlF<J G=4Yt#F  r`YAu1"V(JJR Qkի^N4lo' Ę4d Y2Ɓ#Q` Ӗd-i@M ,qVEF geR2e?dTJ)ͦsi#K*0hQD/dLBS`(L* W#K lCQT^lWO:hېF_8C M%+67@H'=Џ74H AdʄP# b&f& GzϞ$%p@ ޣ琬,\d@+W0;Bf*<pMܾ򬸼X d=O8-0U RPq LX Wn~ }pWTC2it eʠBR$u=P d1|c`W+rvmaYeXmg؇|]!0K"٦Uo(߫תΓyYÇ4E7=N`Ȃ+:$B>x1 cL'JXtK Y/вv bCFH+hB&D+ꂜ X-NL GQ=m]x!  h'B1"F>#^uY3XPhxQj`P%`ѢF3XhxQ;Q#]RW_\'S:`%%e R,aqSU5`l@%wwJ"( ,]$~"!?PV(m􂂑a C0  'LEH/PD2rdׁkC; [F1+ kmƳJ1hH5_4psT=6oЊP0P-ãx 6^~sQW  {qbfGLCHi}7w1ߵX Q%i2uRWlD'rr(ZۃÄuP` 5@1@@ ?ss UY1iX9i>,y4@P& i!]a 3 D)X0 7RB!RI &/h@}___IKn/?'C=&Yi-YcupT @>z!<k~9P*Bp_#PlA9ZYm(Gq4>d!)(9 'e:IU0%qv0)c \ %Z1`b GvhgZ9=fCSDȴPkcbg)8Zp*s Oa (Q2Ii `<8!* @9@ XbrC} L Q )(YsaʱKǾTˠS9Z8&@v52Q~ 31P\KL r0#3t#P(yo`VP{0"!ὤ۪0b:bL3s| O6vU0;(ؑpm! ?0P%a (آe.{`&u/ų(000Pe|XV,g6E0p_m@g"6N2 qP)*q  f*dta>X_' iA ;>qsuAa 9qtrA`GtAqJ'.tflCK V1I Te%" P -kPª ͓v0Α^w*7`12 0Jr3D4F %%t }(/'2>c(k-Ea }- %< a6x+ f˗Ӳ5q1WX$>pz!e E Po[eP+0A;P٤J qjEF>P*3Br(urdP i%_+]xx}}!Q ETB%V TB[a'+vau==RQtPT"# 4 4>S,W T5]~~1aPWI 3Fp d3YU@3p I+q;?tj(-%خS/KQ >_/t!H`/ .-vp Rvps0` cM=t\dQS!+bzW)A lAH`ɧR{ | Lr' "0Ab Ah=l4휸c֐&[7GfY.}"Ag qق-5\*l` T7\,Y? PiT̩U",5~.b\1"!uo6g @kuIP%AB%3 #| MN+m}]yNl[b=QaEՂ-2˻瞡- u%>~e9!gP={ s( HSa0o+8>Q> IC b⧢9(0J6Nb63\h}JQ-dh=A}1ȥ# Dh ,D-^D-La#őm)4l\J`ZEWp B]Ӡ3a  J1Tc }hxg*@ FM3jBBo^D(' jpY3 8,B|;+x)"Br-R5ȡ&0X:&u|M).;և=x}Fh+mUkllOk+" A  i^*`/ѢةLjt@ ChH" e0}P}@ .6BL(O|E;h}b"6,:b X%.:bf%' $ k|چKr )rC`h !9`zez8{dj+Ǖ>"ĠF"҃4H3x@˳;:*(D,CV2!X Hlj1KЂ~8&Z6"; n~8`nk)ܮ- pcbɠ#G9(~A Yc Cd HWJ:`A"๎`(4:X+?Џ|H&X&l0@QDQ DIB5(Dh$<<X?D f:Dz3Vz*rL@TNrf"_ ZPZ"k-NHw8ҢjaȡF1۶ n ⶍg/2- >O`سiP\qoKω`LL҃93>ꀇK ~$:B6!'+M΁4ʁ1zȡ>xKȤH,f]vL.;kRF]}`ރWpE#bɖg  %Ix0a@XCfR "P ub ɇApɤ ,Dv0(2\M$C2HagB "I uR-v"xA+qbDK/N(PM Q3Ata6 #H"$K)5hBG!$kR#_Dn\dX+LM1?II,-!Wӝ\el 02g"3S(3"8Np5K 9,c0EHK|/Xl@1f"[Q"_8dZ&."N9U%VLA|YBu~ IA^#@  !MhP`B[Wo)iF 'b5(w3Cyd!Ҟ$Bá}(pBrzD@3"XiO/‰c'COk+ KR;!v=S+ Aapy6`l 2D!*sׅ?&lMFDmZʑDa0 lZIX 9]&IJ?hmP7 "dU&2KȢHDiJ)qUԌy.ay" Yv0%ɷU0..]W/Z7`GG9;,(v8 >.B8y0T tD tEA cu 3B֑8AQpTxF4H3 $$06P1lxDBs 2&qfqib,u6RIZi:9.ې=D)a[e~D&ZmhCSB愄!rGYC*r,̃tW83}!'6d1v V߭PϿaI,BO4S^?A5PUpiuBy4߆:6E!iXə IʅWBJH]W$t^jWa sZrm 80Nɸ;BVAġ Gc 'xa"GD?3"0?Em["hы:B}aTŰ\6 E(p;X+'ˆЍ`4K;(W~*6h+ ;˲:*KXh ;3 A ((45)X9,p4; HEH1P1 F@1ґ> AdAx96#@!R@+`q89M,(I6(򆬠7:R0H<990|HȄ  LăX| xTD"-m؆# Œt,HE;[.6ʂ%Y=oiX(ʊDBҠR/3):IVCT뫈0PVȁٛ9,x<00PR0Ǩ0 nx02P؛p" ;F:C/J :z6q@ ҔB< #ك 4իMM$9MZ -3قI `mĘ-03ݩ 70L h90ɩSY W0B yKx+PĀyPMH_؋ qHE*k󠄵M輎Z"#(9:PV#~e„Q_WʈcيxFHݦcgS]EˆA#8kEZ睈qƟ t腟"%Z`@8H;T#ksǀ~  q1's6);ӳ ]#؈#.y|C:9:8)| а9bo|OXΥ`Oo, P9лXjĈI/|8֯00\ЃR[i^ v <B|Jʰ4i剰=3AuXq_4vr/(ي D" PBY{2pļ$fQ1SChSJ+zt#-vn]!%< |MX1Q9Mp[J0a@UݒJb$\õ<1b`ǃV,0WB)ň> 9 cՉ:HVh9<Њ! ' X\T%K0 AoH612_.UܻЇmhz@4eHeB3HD8p!PvhÄ(=eHKf)jp3Їt* 9(:0h6vY}45BӉ Fgdm1d{ ЬJa74:LFc4c* ֧vѭ>OT(90}F= 3i HHMlZ(aI:p͊BQ%:6XI ղǶ[\ x:$/"%% [ ZgXԹMW\o؄5"6P[. ^x")(AaM51wkl+=M_59YX+c۽ 0(6-u Ӊ0mLY+rLE?,/@9A`%/"8 W@2[}M[0$S2*/ی &k@(. 讈B+18 rolx |N6C K*H3 L`d@w4,XD*^pU|X.+[<6cn؄Fic*PJ 5*y8XUah뉨x@ 0sZ_00ykfpY40ZEj9ʼL21S@s +>rhT@*X[%9x K8`hr[?K0l?yyuPydKH6Z` 6? Ҭ,9@B6ˆJ1@H@YzpcHk3|,\Od+yz}-U2db1'x/GM5qσE-__1;PPj ޔ{ f1H'?R 4$KjZDˏ;`fYp&$0Q !I iԗ3 >5^}e>PAjԕ+A}h*E])h`l9[jCɗ\JX3-9n&x G( .'Z+9s|3(%9LxSYo> @>kX(.R EK-e &Km!"CEA4W@BGaX&GԈMAcY[-%! <vQ8WD֡GTQDaP^ &@1?T>EQģGa8Q"ĊG:BB((@CV5\QA` ~@;XM0w*(ELf@hP--hAH@<"TdA"R23WUTPDm}TG!Hc@_58,YALVoL-L.bFYifgEZruUGeLG@h[PLWn9%^ KkoO RՈa#NhACrG[Bth-ٰT5)؂A?oPtqS&P~IG)>X$4d16K2G)S8X:"CAyG’͏RF3XkP7yR@ Qe F%ڸGEuN*VVт5.<c$j>j8Ry ,LU ] vmpZF&Gבºֆ1{# eQ+eGv{e֓EU0 d \A0`HƂ xd! @d8 W_lR R! - I?P:!:z;'0GP(TD[GEAr *H-SV ]h#ΘÀU!:1hҢK^|Z)H24y: 0RU%鼇a\,`K7 x8J|2H 7* /J B-*@?J7TwG 8F $h@B-˒%Z{0RWzA,e2jS`~G~!HaHAR$ D87D^:#BAq $cq+]BׄI, RtM:1Q|0D$[՜ $BIdUUKWbE2Ld ẅ́`I+{c߾ХD~΄/ 4/ ZgÀ鬏lC#G4 \.( YœsXr LmA2DaA fRO) F z ',]Xmu"j4#bbc[jRQ 0Z; "6&B" 0(쒾a41\#zSG+Fr,%LÄ )8>I-:V`<:T, ( bsAA KM#!R *?)TNKvWNZȜ(&rCDΖAg-+zUk?BPnQf6,;7ݒJ@0G.82 @vXit@spd:YCO;PD8AdPG  KAL L d@Si#e54L A$}գbAU3(PZ<LeZy, D @oGx)=<^YV<f\ֱxdx6 IZb/Y 0KOE-C[pٿo@A[1|=QA[(r&ѣ-Sdp^Ae 9IBI@4D5XAG xAGhGtxQʴ 7hM|(LR~=F E9-Y3Q ]B+_ RAX KP&Ё,FEΐ 8S( HpZA`AA|D\%Hd_"u}> PNQd"`>pf/ ṯ<` ·B$yH5~Dh]xW]i4Z@bd Q$EЕNvQ39%|%'|CF9x F kӸӤ@fI?EF|BZM<`Id;$PH@a)G\ZGDNf穅5(PK (-aQG-h2GQJ`"dbG+D*EQu BC 4ΡRUGa@o@h 7Ku[Zy AL$U)bYNAb¾@0"Do==* )i@ي8O`Dc6iKxѯfdt01AG$% Vhdp&gP Lb5(]\qyN$Վr1GFSq Ht@O-Z p|XWm*B51>S$A*yĶD@N(LSM̤Z OH ,&>O~DlAEE+]*@?nE 5AD #) JP4<(!8"!ODKTtw]yZ< <(F-&1e.xvZ~WA 42\`T6Pbkc0 waНƼ~%(ȂЎ^B CFs<\1HGx˾L?vk1-ا dK 18sg.BoALB |ӁD.K\ AetVMGh iސfTG T@M qjAP-IEX8GA\p%ߢ  ZdqKTAИ,dȬjJRPȢAl)@3٣P)WYRaz9πWLf*ЎAHKn\x @8Fhie}zId՘0~$,ϣz\'@TϾVEGFx)@!sԋW},о顗 `- DNOTʹA7c0R%әbk7Jr[WWc$\A<KKȹ@<Ёy88 ] \J}J<$p"Dq}#t FX܉‘zޟbAA-~TcpAh0F?3@؎IfsD)AAmF?&L,X 4A' )FJob`VlD=idDo\gKlEi\79A\@~d4>:<Ԗ ̘N}'1މTBG2TW8+xCPpA.ct^G wy# /MF $KDǮn<Ap+P*VE&ȈKGGh\ *e%pAxBA9Pc7?QDÇ@ү}TIKh{.mB)բD#R E_ҙV3HBt3 $/N )ijA<xjmcd7Gė\AbЁQ0?Bi\K{' _;GE,ZG!<Ŕ0RCHA CD10;g{ıFwZ<|`8^!lʐ% bFAĖk~E4>zA0-%W9VkqQV[] QIj],XB yA4UoICw~X AyK$3dDB8X7cG؀!mNy_~yRð/` D7eo}ޔw4 HH1l0\3TFyYKd7CGp@OK]^F5{1@ ` |;HAPI$t+6lG[Ap@/A9 vuGdBy04D 7iaG@ LzAPi 46,@sF&@u0A HqAm8 i` \*$,ƔiaYg&vӓHMUJ *,fh )fB@^*RdҚ`ZD{3<`OA#tզ p & M`@L, sNcdևL%`lŬ@f[d`Y,3'̜5xH H#̥! EYs[Fooϐ,$O rc <<L1 xivN\j"j)rs;h7Ԏb)5"ZM ia'Yr 0`.K&)Z2ǧ c: 5"EG&Fb (J*d*&b O:HP*Й:h.zI/&7B&RA+7\=HDd0f@rFm*:1L0KM0&ۢ'=r#=b6dS qK|uUɥJ;2"# ٘\zĸ .HƝ :IR>UYZcg1B FL.B^_3ifdzmPEBh1,@T iMJ,R ti7Fqo3隒!YKS'gl""8$Kp`T+JP $Ǐ)E7A*wS$1 P L`tqT7Q*A1ʨNwra /3BLA=%X.I+ ʌ$$ZV1Ԡ& Qh6=!Kg8DND!xab8 5,D^ƈ.|5IQ z-0}I "[,m)mWx|8bZ wg=m]Q6$,1 ;Hf CNj`IE6HH 6zKGMOӪJ2ҏz.1kAVDaqHda `HlYI[cm 9p tNOr0Y,hh=|O|2ЉA*)eʘLABLեxw%ʰReZd3HȆu/ Z+CV^ gb'|#W}䉷YcL4FODIwt`SX 3bl,.\b}; {y!SN` y(s~h p@SLbpT& EzrVh,&i(L6 @G@( A\:\=QLdu Xi "t֬LL@(0 6?hcjqfz6D5x*jz"([E/D8=SQցYh2wDiO U.jR VNxuW mc2.ֳ3$|1V0ph+2#u׺3nq*}^u;_)5ZIsDlkf 3u/ˎ*\"~AfF{$ P4W%a*aCf5өLjĥ(Hcҳԣ&Ic7bUS|oHd.Y*0DDA~YFH PX$ ,'`l|h˳( |tN&I'(E1 T"i,Sim6pWjC"LP8Uzܢc;g`7~sL$>qL]q|(\mcenG G_g)J(r >A 08*gndpY,RE Ĥyч Ƥf3ǎc ("oTȐ(" \TnW-lP~F_G"TA8b@(P8 Ѐ۰m& t' &ʠ@g(4t ڣ=D!H!E*vl J-I&`@$&G-Z- "Jlwcr7h(4a ©b R0 ~j6h,6Mkn&""7m6Pp&zb#>a4 ⧸cgc#:'"A `JF/obB! (׈Bpq Ϯ8٥v 1"c_Fzd I4, *G65aa(< "l"b"a&)&8'noPn)vA BMkn)wp-""Ԣc⢘)/yb%757DʉP"x2}+&!I55r'7#7CzgEv !b" J!&p H8, h\@tAãhB@q,&!z F&/8ohzk#i&2FzⰞLDH|gB4(Ic7,!` +hH4ĝb&. !bB2("p)4 h#ercAO,) QPS4 BH&R-X ,".@JlNA 0džR%0I$b2@p_R`ܦJj'kv p_|2)IKe)LJ\ L9Lj!,₢'Bl. N!b ״~R)~`p2"rˢ#XgB;f 8a~Lrġ/:8ohۺ}N(L M!~'Ltv)'18+&E{x2n#9@C,Q& . :kMQG&0ES'D˵lJf.8RUbD@-V,b lhXrW@J+ 7ĺL7m~+`jIrc(k8Bs9kQbm.V  'd,3bGg"Pkrc blHBJ #:'S0&~d"" !04gBh8$0"2edC!d!.Glj87E]%L+!nv`HaK4GAR` 4m~XH8І$&⌊g$O,T'0TB掴` ,ft8 N+! 1`@#@`|p,N .f{"'2CRo!D!'>d2eb-Bd~ =DD]F9޶]6R`,j#,!ў ",iU&T"`V›%q&Cg:c#`6&0 R J خ'< p!-op&^ֆ-VjhA=8 hH$J,flhaq&&g6^D~Y%U)%q M "*-AqF%(*ttu,w&@@%@F(dZ _Y#56.B,-d@Kw@bCb&aS&ԯƁT&\pFCpEpJa/8P]UN{B% y#*_5:6f!AVp4Obd̂7bnv~+~\"p(!!X$ v6Hv1Oh(ص¡(`RKQĢxkX E!$cСj+$"$Raml(Rbq%(5vcڴU'&׻5]T\Iu&w*6fH x87&H_w&c8 1ddiub*~-HC ~c"l 'ᚉr8F:"*I{bLS+=x:&ǐ 7_N,Aw "8(霮;&@ކ 6`4e (p,XXg *882&q& UxepPO ۈV.ǙhզG tO)QD $8RwYMUa! 6V q$َcJ(eB|,&‚M/ g0bJs|*E@KAfy<ܼ(~eqc!E ,1bȥ  z"98①R&]Ϡܖ\#kp1xnd%Qc7=of!#`h (ZA&7eB,;Sd@ '` ΠAqb QE9$ JO)-e"e"A(P,!Bk* !z8-WxE.lZՖ'07y6_n)6@( 9}I&"Z+: ~#fAq @-s#"rPa!|9& (tO)a d:"EhLR$L  @ʰ8 Y P[X-NF :+e!vQEU&p"j6DDž?'H=Q\[x>ji0Bj * n 2t-#J ckGZ !|L >jЮ4Y @zBs)dEsYlasIP6R>/EH Dۭ!F!9ngi9]9A(U_GW^a'BQ$)ȵ]FT VU1(5\j&0$4t]NP0I$,$%,46Q -%#4J9 #ki $S('LJN a`BHBtqOxy:YBdI QZ&E刱JO I+Bٴ(QTm} hZ 0P&5UWA vU)(4 MB@9U8l%d^lCi`GlR&lD%ZtRFL֍6 P<6} .s0m65! /իh.@w2|#<т 3_ϸ"3! M2}!P@V I5Gש (WaʜS) XFXs\vY07H$u@'0]@UGfPd<洀@> Tbku>P tku@) K#0P 0e,$2R(tE|yuD;-Zw^-РBE9 S2 POWKAOH2#BK9 %]IV~| x BP8UM R ٪ Uhb,).x %V c(@ xU\6B0n8!Yl(RyP\ @ Zv}96e.b|2<a/c ܆X'V$3T{4Q)2F5n"`NQ*'qYIEu#uG0E6!rx CIc  q?[(iI X(l IILQS::0Ll([* A]F\cRZHj'BCU5 |-pC)rs8,!nH?%?$}69\s*Ҩ_*@Bx @XThU(`k-js9Q9钩Ц6yAuIu)"Xb"A 8qk#ʱ5ܠL-; /dTE.cP!TE2ϭqUe`@[B)M,-DB@7 rI:Z6,# vz;B Q$jh%⒖.D R{ Yb U"%ˌ'[$е XK@dwN%B%"i\i6!؄1Z˴XBY698s`NGpd@U0t}K *b}L9p^ Rd;I8̚k7a_,%<&ѫMh*@6@eh U-*3jb_Hֵ >1hi;f W +BeLJ01 ՟8֜Hy%I-dmf9 mս8Jo%F.J \Fp[#A+`%%*"X s qIdjCw>Y5T |xW9xdp-ޚ&FB" ,*FR<;r, L_sMb`nMReh.gH x UzƑ"L-YઅP/9trKEr(JВ"\<%AP7m dơ.r^y⼖r:^$BHUf0"lwr.G5YRA(h>P^"&[G Dc_p* k!E:8E二 D-Oy%D R@1a$4hm"o!aH [w30I.M` M lr^`-!@]7]&Q\p \n ok M]B]  +QN$[0% cSN_$ >YE A *\PYTp $Yo\RqJgu B[sSN e rnH#fGgd $?}"0W2lg=3Q!4GQ`hR).gHs5)POtH ccb?0-j$r۰ ca*F4@!1%@VeĘbKaB/ѱ"u C0[6aI"0' ݑ Cx54CqA92kV8 "{r!`! rP>C34F Os )DP"6U^9 $] o JQp M:]@n'^4L 69\WW@ J.( 9@m[, Po 3xWs9!LDLB[4:1 'n!+$`?WY"!rNUEVg2_))}7rQoA0qtM Pj`Q-Err@mYm_R1@5Z- -Pdn>v(/ Pp+Xxk ސ!6gAJ),F?K+a]G WSY [  TpTp` bp [ 9iإq'K1 iJZ%k Ӛ4O=q h9E(@ѐdOh!Ytca!R' ^ٷ@rlц -P&?j YqzK`-g07LhN@L,GmEj v(j9ѠBf4@DxaPHC"5 3Nۍ CcK+nh1{qh3 >Png0D$YpY(O)KK @&i? SCf^WlĖLrX6cLLK %&5 a=p.(ȠzoC݂=7   1(   u 7$b !MNP4N1$WuVhuO!eQPbt`0|Ջ!Ds{0,n(mp>PGBxQ4/bCam  A,v| |ШYQD1QT,/:8k.$61፟n hh!R!R򻱭Y{W/0@"~uHIy}U.GIh7 ^m@Y979ʦ6a[ 1lƱ9 apy{^$[ W =pytuHr s裺n .Ā b  /P`n1 !%T~GC|GKS!} "hfTVq3 Hҹw<ú bt2|H5]XDT9| XA !4YD`QD}@28a*oy3 `Fh׋$A#fyQGA €hش)"VP"x@ `%g("|^t !L AeA`A Ztɢ 8 `oHF 烧  - ĉBLѻ'"ve-[ UPv \<T`tiY".q] & ;ү&bROĬTN Ae<3EXz0Q%!( lK`` x,1b9m DƈE栤! :1 =|@2)4S>JYHDAJՇE'`AnR5D$A^%Od -3.i" SQJ% 8 Zq 4D8*p0+)_AA$/*AB/9CH,ʁy  4bHlIRDpE9~Olg "@5p7x ;d;qaBmx2I @F/^5.H1!rd!hgA,pDdqX\Ar0 Ri \:C^t$!{IJk`>$7RztE`F,O9e1C]8'B&BN8d 8H1F*"q( eRԅ+U} A c).ʄU ßq :G*£ψB+oԡ)FRwM$ *Vڑ2ՓA9 ‚AQHĢWDIx'7HB6Ƃ!70/l5eX(C h#P0Ȃ4~: RG+`\1 @hO< A\7=d*z`(r1:L KAN1 0SyOB` ')ds@6p QHN'j9`{`9$"Y{*App%3a 6'x >@K+}hA6-\%HpȶEKjG RM)1AL*R@5U@8 RL C֔A5SSeB!!HQ-:?ajDAp iA;LCw[u1BS WT,gX"ZB,%h(ȉ |%P DbA濈=%AP B J)({.tA=l` *A,< KL `,!tMpD!k4EY40EKؑi&x505И!9€Y^m0DYDhU[`p _7q7XqHhc_=Kx8oNuTx0c$vPaF1`&H%*Ј0ɿ%1.ZTB 82ч9nz"(䆣MMg nH-51 2$\PiKN[먂X3:{ÃPK@LFA:2lLh1EHd LH]T = `\9Va8 :hqA(*قG鐎S^pĆ@9" KKb~H (09u[0hˣ6}p Y2+&,uXE8?=3*GP1C*):FnT;b|OOvd8LxGUS.D A3Wg V$ YEde(M#K$%o1ւeЄ:)|1$q3CK&xZyh.Di10?g>BS σu8hgZ`@!HU`&٢yOXQ ܂\0SpPO 18mrpi >(~<8rȃن|%nSX&/0X>6Z[XЁ$03EYŴ*W_118<n=3M p9#;? FI?X]K̖B$d2LB 5P u$\˭LUvOIu>1H]p!\5fguLe3v8LH' [b0=[p6hEE^)*2Nn?ٱHy߃]9gHF#!`A$@m ި.ZCjXe h.8R ̚%@9 @]8-,` P. $َUX7n0%B!/W;K|@ I.1`y"AK j! J0[`z9` B+C~l]J$Wcp(@8H8"T020PZu>q&SCE%DpF(C% l(luKE}.uUN>(3_8g  ,AԈ*x@\`1 tynB5vue kd.+AY=B !#lZp Eq P-  ,rp3p #DbIy킲a`J#%b|%SHܒQ-8_9@AHœ 9p^Oȶ }(-&I*H6zq9F25c& KO eT20J "wμ,p,gกP9(p=a-iR| %0$@#-mzX|MMD(˗8uĒqkz(pv88W6Iav pC$ @}̅@3u`A/9TA}5jW ~pnGhYEAjq&Qt =Ɩ uҨ&@>kP8Y$70@\ nUxNYT<`ыZAyU_&1[Jԋ7Po4>7<Ci]Bh\HJdXd> 45&=k%U7u!wnVp8kACG-@ }" Ѵ C0Isߒdp!g$OCr -x+\ad8XAW BP{pjVx/APc<\5AqA5Mŀ&;} _Vu8p]H'bCo8C Qp9!ZdEp\qn>(@5? դ`50Doz8Dl/`Gl M%^[OFv q[ړRl2}6 >CjFiM&dEBx~`poHH ,ᴞDrac."*p̀ 6yMv=ɟgFt 6 H6,C@c>r0&RZB8Ҩ|̠ IZ)^} @\@H撀o %B:*). ] csKO"PA ~\69FHDrD+ fd Q0K,7 v 'Z%"[eEBԏP` b CH@×Hf4-r06̆*C}p,4Ǭ҇pc ؒ(1mlb{p( ش658GW pK;AF"L4 Hd@;(:ԋ0kh9 4׋\ tH;ϑu(H4x ;v{H| vMxPG/`\l΁l! LI#5`#@R,|!10bTOˈ`ED(n ]x `hS@49m @ o` V`rQ߰7OOK" x) vx Ŷ!l^^2?-в)\4|`@:Є򑏎8q`G>\; }8Q440&#PHs1T|M87Te;! s 9A `,ejָ|hG,F a@>-6(H_ہLyk$nYB>_ IH?^88Vܙq9nDoxfDPnKum<<5}@!osMp45ny2T U|#(VqrL(P(5B}5'0Xj.RCT= "AC(#.pR⸁VQ3AB4xz#ᝀ :5_9[^ *?<QPZU`սX}G_?S9@#B -8H5(;#0D`y C"7 qXd@C@X( ͅ@0eG2MvG΅ HC!(@ID HD2̡D@,2(LӢh3>2̅d@&+ D3AEDPeNm*b |6-3@JF%p6$,ٓL DY& 3VDp"=CCȁ\CApAO1a2<P +TP"4NfPf` FDH~OK;@!C;ŝ?ZUXK1U@ 1@-H|#կȅMh[3EHx=M;C )zENXN1h(!;  j*BIxJA*!<#PF8 p4G@av|CMN`nB@7a& LG@Rv|\L ~~ġ >D !iG~R5 %Zk4tbF@>AuDPFAx̠4LJ*}mtM|}fF!#&!Lk(H۰~b،1 >dbpC @vki堘A*eI"2H/b"*X-,ADvp6lq'XCŽˌsI^!Z 0~PI\uC4@<*E p&@>Cv)H|jF CZ`ĂUCD*(C,tA/F<(hw>DѾ2ilP(EN)CrP5CN-OxB 1;02c@q K 斛C10O;NYтa M*xa|GC__FNGtM?$ uD\PqFQm䈋1@2fpHvNBdfuv,DkFE Ctɒ(cv@FDlul̅{^IDqeD/"ZCMFnt &0|,}0T'Nw6C$Ã$?DB DjcG39:h O'`@xäĜAPj3g@"CQcik8WmPIRk 0@7zhjFda?D?@TAmm5,v@7P*6 FL:d֌ 0$+Ni/2¢, (Di6ℾP0Qx0 f)1Ži7؊W҄Y5)P`E`I)1޽JD耓sVD(t8H Jlm@: T pF x=, 찓D@8TK[g@\V ї Ex|fD%]|HJK@ȁ(\"k@5$57>1ȞӢ~,A㬢3ܭ<:n>mP\CuAkάY[?ĤkG˔kB]cDp|i~T(N@¯:>HdCf0`+-DdYhC" #t'Hj <YEJT2ÐC+ځd Ü|01bM-&.3h$S 2'(rEv5 @,]F0#$=J/> H\Ā36=5m8|ݦi0v` -?ڼPI@b@t%W~+Su!_l |>>5!x_v)p}1jQ]0"]D7$)F^+5z Y.↛r§6,/?2+[l((`+WbSN 5x(j$hP+:$!@s?"@H#y0bN-ɏN.=ّ} D=0@wOUÃ%@o(ApCE(_U-a  ֮p] P7 ;vAL9`C UHJB@^0 D"tF,p!`-aqE.C9X"酃3fA+qgY#Njd)KiLH6|dOL"C"Gr!3&@*ٍdt2zpsH'j@ jH)hP\$N c=f 2f6,jEa4!%\p %gh+rD#IZ7L$ 0}gɢZȅ#+(,xOWr 2, . ox].R =Ĝ.r$<% PbE@uta 0n1CXO -$"a쀎jyc 3 `n-%2Vy@%F#,ȆoHԡ=-[ \\,G1 }G>|߉HxQ$&7}h6 I%/xPq%U|A@2BJKC)X>ZdۆA zqEH?N@0"$$9dh g^FInd!8@"XLoh"+JRQE |z|hLy~ kygt_!GadP $@1 s󤧃@zs.x}(z"]$"XAK!$: PR( p/ ,ΕY#F/ % I0JH(NR0%b利~=CG"ҋ$$vpX^G|{%L)Z?߁dJy Oby*V<&яo'0D8S`‱`l@C\oJu@>zd-wiepJtPP m/#C/rѯ$ B$%9 U> Qܣ il$!uFU\] (D9fj|VD! ga+ c|"@G>iV`PΪ'p0G& 4(Y  >>Q p VwGXAL횶 $ 4P "Kz @XЯ+R``8."s>R+2 /B1 1@>@ 3@"""0ΑL#2LZ2B  j6+W22!8j# ix+nKAOBLzLJ`yD2͚dF$$M>L<+R/V+`ļAq_'qJoA.2)#Nt"k$w AMC@(ltʂ`.c˜w@XTdp J<؆:c<:H`XV"gR. S? `~ޠ $>#?za"0ء,)>b4H'Ͱ@r G!x<"dbbaV$W@˜F"zg@Zf@켢6x1$s!#ܒv&#C1 3i61+c2++c2j#4)4 (#v!$v@[2~#, n9ji^+>*<+B""HHwBB &w.b"ɴF^)6 ^"B!&n d@"'CBA``1A0d "rhaSl(v+:?f#HO AB9XaSftjaV :!bt@HcMr/#@I $>u͌O #PW@aX.T"%{~F(Ma( !+>a@s  B,Bn:G&/J@bBh2"nAjZ#< ..*DɌBʀ?"HI"+ds3 ` |A|S4#X` *!.B6uS @?B5$e "0Q0NE!L@@1S&e"Rƕ> vX1$C+` 43 # #=/b$~DR?"܄gM!.md6/"kt:dǎG@ dG#`a@nAQD`EIގS:h|("$H`[B"+*N' dDGҵv06/E@ !8A:f<&A !>BaMi@!D/όdH Pt~.ta"m;l{g,A JR 42(  zG>v@hr!:(.B%a$ Ў#dPL/2"s"@GPAJ2 (L~(H(%ȃx_G.Br@8) r#y?L.S`S-"ct{32!CdHƹ>ȷ1ICL~E#T2yu~g`@skApn3/kG ZgCB n!B\$nR. 5+ƒ>BJ`Ib_`!-`+n ɠHA H$~Dg*rg"%JF|ojr,&z*qDzcy$jCkx vJ;H%{:jv&;HJF Pt!"xD`Rf R< Я @1D`jo"k@(Pf ` T%XyÕ%HN<Xg:Qժ|" $摸 (#g9B3S@y&A?a $<"b32}.~-430e#b\p63`n#T"J?VʹƕCCO:C#wvyx2L)G-˃+BD^pV-AȢ(N'ȃ-v $"=$`JyሿfG J nxvN&BqBA븣6DOBNxD X"BI$ 2G<푿Z%,:m>aY@ `௿<ġ.!O|ϰ.G"zG*Lp s!%[@:R>iGa{)]Sf˜"ȀG2X #&j6J /3#A/"D(L5}%.}"x ?26XI$HA4C8B?įahbd=4nql"]?*~ߊC``p? 8`Z-&W1$%^*"@XJJNgg)ݲGtP/@HlHcJHvW|1Dʺm̄q꼣h!ij[b&;#X OJE,S'.a~`LH,r~<(`JV" l(P >ȣN@afl[sur#",XTYaVof>»`lZknL?Ls v8w>BG>#z " 3 2/!2YU s~0$| f ) Q!4/(svF "\7$8\£#?"=(xfB!p8z?l[`/"a"ʮvr\>䋼_QA.!",!+8!*ʢ+?PlG%I*_h2$8X PRDa;$h$ g[Z؄F2diN3aBe ``pU`EBnn a)B S(ԗL#B ˇ+Iޱw[,H\CETq/9F@$p-as`(hN`By WpB]"T$B9 Z܄$BhB( Iy*$& BjRd YG7ܕfED AҲd ʖE.L!WXĂ.t)d0( \"ۖPFB9Db\H6QbAMBRƕB>ƱEl AB`+& ?]G 70T_oCHPj8ZBT%yZDȐ, !ЙNY A>llL4Y I oI 1P|@!0eC.-pH"aDs.7s0B/NQŨZ1?ňhO S"t^JZ”2uQq,a #a@B|tjIc,@b@t!~у7 DBm $Ry7tQ%I%$xjȪ (ԄP&paWZ ձPPaaB0$JVBPYH@Bx@/B<_Ei*0* d8d.q0@ YbH6bfjP(2i i)E@Ut>RRrе$<#@.8H8"1HP JQ!PHS8IU7AjEYj@`-P(AZAl!T>ݴD !x2 \Co?NQ[&p/'aJ8̋Sb$&#!BFa8BRKb[{aBB=b0R@qz0,kԽfx HLȽPojHB"7(H8~ b$jV[m!(qJ*85'Z}ZnZANHQ"2W!xSkw !ћXNB!/6!"=HcfP(pqd6B:ƉElܭ5x0p#0hB6Q ;P b MB"$ '$p\GJ4* iH*(Shk!>ee"N!uQB ޕtjB,!88E-` _Т`F>⼄%q葕q0mktwFx;W '!$E6l܀`ej<wP X%ذ̳:"Qe6Ydfzܰy]xfgOg@A!Їbp;}HhV'EvC%>`M$%?uK0-"dWѼDKF]h 1Bx-ia./Z Đ B`v/Pua%D a DC `%,PtZ Y1aE0@Z\$n0.[lZ ?1P404A p Ł1pسP\'L`J?SP"uEA/Jk <N8sb_~ .PJϐaO!bdR@ Π}pMcv`&@;GF4bFb@B   g^w zq @&:`P"WNej0#^235Fq /!qB4$UfwC1w&B&&BTiq|}ǂ|C1.,bQ SB@ Cwwf3yـF xWQYSRr}rcQP !a !Fր2(CF# CZ]FhcD02+32K 5] k/Q3!b5Q* d5c1 )*J _P8<@I!77u_B)0t /\@!=%90" _b nh#s0#F$?<<P A5`/NB I_! f5 vpkC81 `$씬4R 7 z5 <Kpbp  b  [ 0V߀1q sFlvs ob?42uBC8X `Kzq7 M &F-n%0#qe;gr Gj/ :)I!(P#!}dC*Ze$ aA/sa,$T A:;z~=e?qqbU!T+ɶj A CA-XХ kfq _k HWW=F+dz X a@EaO(arbP?sAQZ*Xx AfT!q2{QFZ*2noa00.2Q kpSELW4Hqx` I`(9=Ik pAR$7 ` NJ_ zPu7 7\t_A;0M8Q4`ep B# c 0QϹ'-r l % )vz< 1_ Qj8P0 ;x@2# fg ):%9f`:/75 8CA})0 lS ṛw\Pr\˵"$UĢlliF!aWyk fpP| ֓ RmA_41 , t )o @Z)Y`B,Z [ְZyK:5e1tٌLSwzpHLs&uI_]do9H fD R pRtaPh/pGk_pc~I$ p ;!/"!*]i!4EvuPbrp"9Ұ: "P2-F"Q&YPy"@ $.``İM U' 3=xAVB-h##0QW'%B( s۲ pqDL`eV@aW5] ~ g}+ɶ TNe  C@RJ qC2RI(Ww@`K@;eq{b a lE{8^P[fɂp!1EcYDqm{ B0}#P){ͩ\S[(gAKΫ4 9f 5JR "6aK`K`p7 RA K K H>o֭op)F +" Q./2bnR:$x ptX_C%S7; x ^PL y皒}2e%"`#(I=@qG CGzy"B };aЫe7 C}Q { ~f1-VA$V gB ˥[O,0` ѓ Iqgz7qQX Ӏ.SAQ V0a ZnAZGf ?1nq&߻[jV:p `ސf<)\Aٛ]0R0f ph_z>/7u6

[m̝SQZץ(n91mH#G\0\n{La.NoTζLR=DIK4WAvg'^:L"gst䣢 2o2Ixu̹\Y@N>;E>Νǩl=V"/v%_x>hB[{̩3~./#NgQ4ISu"KDsKۡŕͨ@1:Gc[ߩsB&;B^`V1؋$hw0]4v6S5e) 2vl׼9U2?$-)Ȋq LBC=@3rEO[Is**ODX31=bL1>]UvTa'9Z~P>"]qDe JY+NZfqRLQnD9ɿypvƩQ)葪/,9d:fb/>]3zPi@;Uq(>>=i*⤎7iKH.PP%iӑ!l{u32}ޔ5%^a)N2WS<ˍx8=.D̻z+s#Cq >UM2&g*͸YS[`'6 ⁂=`1$ฑA =d/PEV16ծ#g t3+IÉ19oXYʴLBJ Rv5Ֆ= H} -l#lYⶐ@ޙ1Z1*ȏkP*vR@7Yp|~&eG`/2T42T]f-0UKl2uV-t8?P* 0?5PIR1JZv]8iDB2YnϏ>xha-z˥]zC|ݡ*An U6OwhM6ST5@S)%8ҵ=d" t7PX/aL|}%|]74p,әO!]K|ĥ$k+q!l,UtRD '}낤 >~7;5p ؽ">K0̃&1hHQ1ae̖OQEFʺw8AFr~ݱ%0Rؚ6!RwO qˬbyMf:j23/Ҥ44Hkң!$c{I>=rӊú6bG^Vb:=/L#XsK  1߄J:UʼnG$D'DfKv+KWFwhJJVb[bQ!lTm}uG+W,PrɷAC!LHE/+0u e}䆕N|$瘜zsoe >D{_f7ZU&%Pq︃5K݋os&iajF} Ĥ)PJ*?a>?JbC=)[w䔣.BD>f= k;]zg1Gs'ea1HtXQD\Ab\F L-̴'H?)U /b}zv<36!$h2y€!KZLy^AhLJ̸ϧ$hosOxNx NVkU5C#U?Fyꝰur9>E; (څzLʙc:tyz-&N7&:qn'.S&X]`5[$FÇr E m2ϧ!pڒ|Bo{/;EG"&2II# o!ĴLbB4Qv.z xUWc!2$< |v OˇCa;U;Zp0w?Z+bڢ D2^I :#Tn}gwn}GҨ856VٲwqĿ"򢛗"h]z-D^&gSehJ}p0+͞a ~4RB-"tW[^hbDVj,<7¡%Nw WVA\~Ӊ2&l]9 c'owE|*-Q?=_LP˭jg\n%7"m֨d;*^Z}WũFΘsa|oǽS2[-ZP>@p*oqÔU2[\>Z}` QSQQ.~B^CzE$PTR hO4eg)=G05bu1T+@MHI"0}0ria6]<9iT+dbd8u(3ƚaP?F뽟,ć.?UaeSJQԸԽ\^l PU CQk-)PP$2:!l!{o\8H=$L"A5Ye͈ R&=0K%Lp1 1G7މ(\玣 h~akׇOhHZ^$k]k[E7U ։gB46[ +!sw·[[4J`̨ak!5GL<3y#*u?B4ڀ>6ys DFǷn_\[n%SgPA`=NCd6F+LBPޤKmR9ɲa&GQW">BТɉ0&/'6sN=|_M_BA@}Ap [ٔ6B+.n%/89%ʼn4|EXqp#5mVn3  \{ap}}@׷8(tޭ6yOy ˎ_3^h)HaA$Ʋ fO2'%PeM՗Awu'clkxFrQuȭr1ʜ[4iLߏM U_)]mUVt_ u ۂl@x՗ij 1 $+6hn񦯙CwP"q}{J &nۯPo7{=_KQffbQJ4!:b  <( '[Y M_Io2o zk,8W|m(CX9TԤ)WNp6^>o#zt!<e7;Bpl=3fٳ.-wCUgn5Sf(u 8YO\ekPXWȁ]@_@~_ uhU֨-m: Ēg .*HyD.úlk;I?.Z&v!O]ZthN\>stream HWn~} 5L~I[8!@W[EweHk;ٍٙ  4!ixnJϭ99ڒ gbFs!9`SJwd*R)&o!n\{G&;Nb2mOÖs_a^MymOUʹݑJ (iuN*WO3IM-g]ٶX|%{XED]RvDAx ?P? oz)^٢ސP&Y#x:I<#-OtN Ñ9:ZɪvTL:QUA3/pR JYas lO׉hwvXͣU"O (iz*4ɑYJ!۹spR;5зmלV~NܸhTTn@s@G UeJ5XE-2\,peJRK({\a wsrow(&w%C]`B$UbM1-N4OdU@+ ϯI p#"-G%DxJK`1?[z 7TKpJ= `vl7.4"0:֠ߐl edT3|f`Oo,T͋v}y5~zW/^X}/kwqYwae\_-/~?GM~W@igj]UaL/c!z³"h˟ ۏ4zh>1'oórRwW7F9s$Z#40j)㸗o"{Ak*fCZ eOP1xG ¸PL3Y,tx Q3PKu24E`|ce$خJ7U{, P3) Dዉ`,ܖ- ,a$ɉCx>9f%g a&"%G2[#&Y@KHⶣ3l~o~65Aw)&D %Pنoeh3qIg) MroN^#O/e$w7Y^c4Q%{! Ef=HLɳ A^gUJZqFp`;Ë<ðƟY^/$:*K@-W[8E ?Oշ$6SΉ.EO3>9bv-Fy~|yqܮ/Wz C+]n6˻~ay޾Ӭ/߾_P}Yxaf!ky\Y.qMQKiz꧟ofi æ,T4GQ4xY g &;DBØ+cn? l)Te1X$~"Tl cծMQzhӘ (ߥi&'lFv.c e~u/8p^ Au /퓝E  5#Y2d3nrٲ}8Y}={\){#6x/|F)۟=x}w>~Ee݃cJ8avh?og/N_ˮ?пM5i;ӷ/;z5V#wY-M$~קWO#~PL魹j j>Ah nrtOk/$CZoklKbtNbQ]U+%O h[4UՀj'cr27hak *Azi(L`G*1SENCZ\MGbJb6ZF8D2KPU a!M?ICSz- 3zkeI*rSEG̚HrwRCz'tbv'hdL]ԙJQtN_WЪ24VP Nv.hʪpxKW]Y BRi܇zmH2vѠ_zH]5AboG[sۥ`[P%NaА^3mdr ri}z *3ĤZ/m&-i̞Fh\׼JV PẀ 5VF`.k߁c% :CrLƞ2`8\XCa Zڱ4K_對!ɄsE0*&q0grIfqZU5}w`jL%QvlDMRgSah:89LxF2BuЕb oxl^r.&o/ԤP(6}$I>K0(q WTp IӠ1CdkP8 3_kj1Mqg Kgj y)ZxVJ7ǐ67E2XmI!H̙a0-`AVmu D-AOF)5r 3\@>V=t]P]z %UoɉPl@jy!r1B})`7yuxohOJ=I x`GvgxR}T1G7KٔuMP`,"NW/ (S,'P67#\Ո R-| n9@(jeuxф#PL^Z41B|UyŎc;u /HS*Y ғoht=6+'ɲA*DcuPۄ20sk7`ZJK[\^ݏkruL;)l^umg id1JaEl-i(& ʡ7ش! yLEP?!Fem%\iJ>Zko-\  sj J]ʅAE3[P $j [lj"޷U=诚.4uzrA׻f]xBTUI 2NMnjPGѫRlP(w= 8\: G%[wK84vV'ڮ.*3'g';*M8F=(GC- EPR=*6'a\6E0RN~pG\AѵR|N",ƗiqyxrAIEtpNfa0%syz_JT_27:Y'O W ]~ȿO߾|ޥKμ8[lFpr108L@d1&rz GY+1e2ȗEՔ\qpM'pU2e(֢y!c1o7b>XY0d=]ʛc &1wunCؘyAJY)4,! G'#>0ko0=<#@l|W{R[TGzҧ?~}a;oP}qxT'ι1]DڤR۔9`kmh#[X`\юXˆ,fWW?sl}B-D_nF21F f"-,ESEВM 1F3&ѼZnh @hA_AI6zB+WT_.KLJUTAuovE:VwlU6md+Q~Ul]ƣ AnUWW՗5KwOL l#H`s 6͎M(cr 2GW_s\9T]E`}J_ "gp`n`6E)uUB9Ń'BNPT"˔*zx|'Adɫbh9ô/CpUc삹l=5%|2D-e!$UۥC=PjeN: w2I] & &S7.aM,ۛX)Пks:<(Hє!f:!kl*A,(^1gr;r&Wc{pu4=h5MUs`/嬅)! 6[*w3C\]cm+ fObB׳&^7C:ۜyjQ3cRoG l}T_ΎyCzAjZ\CLPw*`;eZS jGR1iq iay ´ m{VgbmhOWf݅ JWE-~`GHqYjc'|愣"1ryYלS!$V)7gnJ }שּ$OORf_DOFOoo~?._}):=~Coq!o[fl ܅P|56(Y'z![6HOVx6eГe>*ʐH#QKY4?KOOn;ئkhDhmpTAlZ9$Ozhz: ܐDQ;N060{w0_R,R^LS'oV4\Ƣ,j'y!6>2`b~rKVj-PK'[⨄Ҟ %2KiBk M|@.jIĀ>MBHB&yf: 1[nRk*uhҪ4W3RO!HI Rt*TB:c=d>!/3sZV94kmo!ySjK2aQ{E b nyCQm\I"v6Af5, Kn>#DLFtR7aY)H߭`-J7HHJtz57_W ;0SiGː[7;+3(E-e.wmn3_mky4.hЈ3f]/a[.0 L6^aA3-?#z7u^~yZ _̛]0Jا@(/ٕ&)rWrOEi7*u\Bxag+t5 w`\$"'FX9M1{,e,Up!6>.`t\m83k. }E{{bv3X N` N,g,7g:d6VK} h'G'#fZ\8FhVkM<چ>EHQgډ'p(,ѵ`jhmΎyC`̠@%G̏Ēo_>Ď6UZţIL<ĕ"7g%9+T'7d3^ޖBc#vC%ٕQGi=3./&}T=_;8_xu2/Řɽ萻AN(br12aKq͉7.$DY_Yn?3%^m"V!gqo_+/I7^~3w .Bbdi"d;d IA,"Q x;'jwOe ] 3E1:*P9 X9NVC\rN2q,w٠}+Xm 2CVRqǭ&n'ژ G'ZQHX(;.J?cM Jqс*kT?H㾭NlU&Wlq >p-k}μΨZX<` PTZ-6.p6Um*[|CGIKQ>ܘ*mkŠ?ZJ0F",شų9:8R_ych)sG x*4@ D^0]qR6.o2'S6a֜F"b<'n(/&=P8z"&t\ ݎG?%Z%\@M{[.!ZgOez%'jMpNAgq٦9Lru &yp|V8Iݫ emG!%>PRzg PKY9²!.A69f[˸]LFF? 1j#*f<7JGs xu>_S&Ê"*'7c,OH`:R&.6h֣*U2~la=`-i~{׻"xzշS8ˌټC#tyĕC0}kr#Nl_.(JO *sO`ZS_[O?UկdW';*%ؿ?>>So_+|^]^~kw5rZ6;bQBal8-FYW[&eZ5! uD (-Vf0 ÃuݔdqvZRz\v_eB;|`Nد#%r6}$OxL,AB RpL&5볪wˉ(Nb5]]Un;\}pӇ`u[S2јPOF1fVoܚx[?YqY| PS >Y7`rfH5CV6>L. "4o n@`I6im721OV0'm@sIeTNL Tb΄yh,}ڙg +U5~u%^ b#(ċȘd+SO. ~-;)G0X6(@*lmYHj 0xmH%#`uqҾPJCS4DDWyt>~S @cJ,9'˺D[sYWntM- lSL mHayfA([G>0x Gu_WB2rԊ516z.뺆 -flV\ޢ*#=Ez*;wzY0k浑<>%FXmSnl *5: ](mzCrrˎe[N HlK}[rBieKr[&1@)(EQXT]E:.-gQc:UmJDHo `Ii!&[i[izb BR 3zƊhm7<5 SF]o;3*}L?8=ÌUJi[!Έ 3 ,PZ)_iFboI]Ͽ!ɽNZq)y;3Ja[&%b=qKۏ6}Ғw ;5;.?K{:޾!;nX)/)Y~)A-ԿEN]\wO&\Dz7wKT1,RNڕsKoC{Ǜ t`Ff;E =$L3#Ny\K044;ZicCGr2vk}YU9Zx ahl Շ2ܣdt]Q5?E ~(G:b-,MDl.SNl^,^&ByFEy3c*"Y kVh߬D-w^(x+ի᭔mm}늛` ԑj|UDl?h7D+nEH7)DrhsKm|y3i7 +3ꆦ>UVs2q5Ŧ4L^w{rZ8bs+~cFXѨbpHL/.//.ί.o|}wۦ`m?'ugq;f~᭜-//pTzrZſݫ/ᐛ<ۋ_;!^wnjx3^/@:Sc '5ƌA-E^{,HIV(0INbmJ{Ki4؁'&h1% M =:!yT^Eh P ,#J|$KGis ,`&hE#@u FM9:DF48X#?gC2jQ!Gt&j~)A (WGE Šŀg͊Nd}v ;]@O Ҏ*a qaght Ռ ZzL*sx 1:Q)ǘX'a@yH3} a5YG1SZ1U@Oc C 63\g*?$4#pq2Y<2bx;{.)W!1dB t&X-BVD=- ʩeJ)p݀>C4f3$#vp _XǁgcBCJo"i؃|cY:3F |A-AQr"}<5$<=ފaYhn 15VOM̓Z!C%),bb;LfȨl0xFΈPΊ(2+p#ڡ G:'y6b߁BQ#$#3@c JsK|){P)ab$r)tkqM.R InG'&\D>` s]8(*i{=>Q gVF)[t-(RogyĢVǠgu{7L%"9V(TWjDj=ujrJBD`X1@jrzsCM8AD: ]ؒ0 ]A6P}D {}: _O  ڬ3jtl }92$sTW)#p tti OuOvPޞj]Bݶ.bP]d}bQx"$tk5vATݶ QcP@Xv6Lt0m}:W^5&z%((}|@z<E%gQ%(D[ I{P!LC~NW "շTU^JAAb֨9Vc'*z׹Nj-='mE}BֱЀ4lj5jb߹:c_\Bk޶) >.t%:m%^ jpmV v]6wU>{t.*EJ$ғ Njv 곍6Gd/WQgOz%)|x=U!w._5Ar]N}FKex։]r|xoí ak^$ +j) ̅0Mt>s3$I6BL ;GW 5r4B p@]!*ˠ/*E1 H:t}ÅLEF,\֖2?5;3 KQ-UJM(wH+3z->rjpXf嫉g m UMdC~O rhJ.QPw|B>5!/X ]hά&ObLZd_P= |sQݚ6kN=Unj`=]&,W(R!OO^Mo =9~|Xfu.q=8`أ*ld6"nqVmՎrnGlh džjP~;k)`& *P*:U,:Kʹs jI}ǀ)SK@xi5mk*.b ,{?qe_aV;}X*.{ Q6O&Zq2H#[ͫm􋱦&Ӫ/Rj6WueߵtkpyP,*1( -Eq= R,dl _5+t*8i9A-yPF& XAAɺ~%<*yeOkm]Rڴ,|Xzot鯉YG!x]NF_()  <̂ }WrfWN(t }(񠽡G1aPl !+BCցΕ nsGj GvP~eByVe2,kiV&Ja8*gd6]g5Sá(/Me8JNXN.%u-pwչb3Z<dI~+rVJvw7 [Nf0nK>,.F8bRmVAD7r)@(]<8q5ᢪ hl|"[zJHCI8&_|(9";0Yh=|U]@KAI:3dH(;E \-374 Syg]Q{ё p, x3"Q+9=\mIFTa@'&fVۏF"M!nۥT6\K:/unU9Ć]{p}v[weqBVY{})Hʄ~'_5>`+"4ØN|-N+IICI_C,+b:82}J5 D}M,؋} jg$s~md';̟Ң8$"7,ibv,Ac EyI_lϹCɒ-NW |܏9*(t= {d#kB9!cBT8S hl+JUrØ/A.G@34[S=pBABT rv ,n^áư7,ٗ7Չ/uc8fCw :"썋 Gb$w $h1v Q`d wr( PJBа#+ԕ Qt'27t-i!زwN N>1v$<*Ŧ ;;Q#a!\KCAၵ0=҇:0 )#G` ?1$cXswX7Ő^fJGb<2Нi\bCNO4;bJQ)xîkR/?req8qBi G%ܕ+]]kQE,G@.B,'b[An18uEC2 c1Prɹ!rĈ`nEhD10,$k`!1q`,`$.aaģPS1@u@F;n,LiߕZQ 'zp1oŤ-*knտ1ዪUWzvS/\ٍͧU:}#ῷcsCxmS{]&M u)d\I{v;*,{{QXG P یFaGxڬ|M {l\*=+=deQ]Qn~\EZ%CzqX= ) ?xo%q_N~_`yj,S*kۨ&Mo}<ʲni1,P2eI7|`W}ޱl!+$| glȊ2Lw;Akbmy;.W+|zwl/iiqڑE)*T^a7ɝͺ[|,iܰ+CVŬ`W{hPe%KQ\[o_E XH TQq1n3XS_eώj'1H~4~W{JXAt<54juS;%rT;;{y8ebfqMUe3x?P5TR2zYZ:Wv(}D@ 87B =÷ΆV`AOi{K+Ph-bM#/HY{[ڹ7|Y+/m1fQ]5!~KAGo҃iVTپɏ÷żw8k/a͋~o>q-ĎtԠ|9?:.kzw )3S~Uw^gS}Hu)9V=$k-U(ڧ8_ѽ{0\_hD=` ̚a_z˗3"Ž;DO i{>՞ Ԡz{|ĭĴ99oj~U7l#X^Vݹc۽;ar^O 4uI+j5mڋS/9DNc7m3A74bd q]l7o߅gclͶCn?4zV|}n۹posbvPv32] ST_ϷU6xY0~djˬjS"XE_<kBu endstream endobj 34 0 obj <>stream HWNHD*xl?J ,UU=I8h|7`sH)mm<;p^$;ABCW $<ήb.M`U.e Bv|zc@da߀(QIfdAQa ^;S E~7jY{ш(}E A1 Ib3Ż!׈K2Fx -'ؓ 8Vli}}O8 4+VX`odH:N#X0W[ ;gDgAa |F>ˆz\avSd(gG<{gF =(2\\0<3tq:=0_;<Q%ѓG Yt}'*,*1sQb#\5DVc2PiMTlQ~q}}Pz~{Xx̬20Q0` 7 К{~Tvі3TdiH ߷>t|t][&A=vM^75ᖟ'pUMUT_UMUUũ*=҃Wb@{3x_]L[A\Vw$$5SVpnp 03X{W-O_Fd=Oԭ;ta/ga͓x2k5c?Y~ǁ X}; mf ]170G`s9\dw0O=5e3 f$Z`Z/NF +g?}u4_p['DGl Gxc|kL1q> 6ϝ5#RS_("8[s(D)&ڊqu0b֙%l&+Z{gF (2\\0<+x ;=e H%ל= =z?ZB$Lf5PK{',f; +BUCd;(c{= >Z>oJD?fqԩ  ܖlY=`c\~{On/l,5 1Um(<_[dA7Eh}n5-*kkMتԷ֒?|7i<ʸU|mV`ILDN6u%jG0a&sp'dH:"-y<,(lR G3 Qb:c&߹oNikhC>Ob;_Q)~#qa-_Gԍ\ª\ bPh2;r|W1f е ڶ 8ضL|`}k$ȗ8II]_mϒoT @蘞zV\0)s]+Y0#+ TyT*Rú_FQ[\yƾiL )*Rz)C`,7 )UfUqh w hXa%֪*.#ɹC*MS͑6,ci–R Z ]U7zPws%44V3E3erغ|=pDH6;}TܕA`hˁx_I}s4nKJɂ ܄NERlE(*ETD=SdaJ^/Ú**uk2]1/¢jx ʂ¦'Y~S蓯@A-'ex"2dK\8tNB6u}f3ɫ(Y)g\ʭ% `pM:|vj`{-r .Mcs ɂ6+Ѳ6?PHŘNaGG$7*Ӛj@ ԁ&VU*8UB^fT͕*XK@aX8h}w :ҼXΦeX1̃5 mnՌS?ڔ}٪F-AP jq(rcW\:MvGiVYs_m8x/w`nUzL~VhN4̔$(dVΓ3r<ʙ͏I4 ` h"҇,h^9pM6&|pF{R%+ŒƯ%~؂t? Iw' ~HV+4m3HxlN Qn_7 lBBTB7sF |;@I48}8(1c[8vX, .Xߍ #dT9hs.YxbKs}] 0([f-g3kh~}4#J034uNΠ{wp|/T8-Due>B\.|MT7R7r֔Dxp_΋rWwX8Y{XU Ǔ2&(߅΃fo:[;A]3I-T!LOʔaNn 1UA;OW3eR5v;V2ilVFj6 Ni'5,kPDzHQtp<Ή#4K*SNB}qvQz%`Ҫ\aԃo1; RO= q%,pa %ᚃ JI/_M.5.&jf.B?];C+PpZ7{%{ WMYn E,T+/.̛]RMtd6m|&.Ȭı$VyhpyVHݭ`r6 -sCyv"e5uzvyNa* Ji"ʃsuWcI&b aMd^\¦ 1vePolNjJUq &Hp|d6r+2129A  _ ^B$(USr`"98jFÄ15 x w?3Hjڦ8Ƭs: K)3emg+l}J- @l4R,)p 'F]^QWQY@/` KNc4WuӅ`B@L㕧LiTmhӃ&$vitJzADGleev#ͯ[ԹPPoP32uVR{ENܲ3S@f7kx f뙩j4qx@*kWQOݷ[D(zŒM:5څAS F7N|(k0h5sH'6?F ^XH?_"?q+ʉVE[i;9ސEJ1Ců`lHK\E[qKvL} ;EFܹ-]vՉ %6L/?]8H~ɱ #}DbJ5XuԵq\7Vv(A?dʰҌ˞9ϔ>)lh&iPN+ׅhyڴ.Eˎ=ԅf݈#lw9ٚ(K7][8h:9[MpW9kb\q=n.+~Y.^si) J,DZwlWwFZQwvJv6CC NwA)}ɂ5vQ\vjU3M("\36i֌?߀5S#qkh(sٺ!OXe̖tpb7 _[()ߓ9jXlg2y1Z41c)ӉZvż^ڴ<$(ܕ$jl5Cf)ot?е.ыO-d'C+{XoXc{-Wq$N]$F'm'4.<;AOr)uət% $tJ FF&^…sT4^S*DʔIogRfn;-8-FfzX2!R q5uop JhLMK %^KY.옭aPpB)y, *SҼsGJُ?zXq {4s52{ .hƲ6]:^5YtTV+eawIgx^8UoH9) 5-C'{RMPu~1oW|d!$|o۩=[Ke2Y+*q%^~Sp fx-TBLuaJᩓb^6 DN^VC|qܽ8ExՎ1ҝ| ҲkVzy` ʕL%G >p\}s"2~n\rDHW7`t[k'T[%ƠN=;&/TiHb:s LC;&-J)T [}{aB[G]WP*p''rb%"6l+ ٔ -WPlqXLoQyC;tá7EJwsO>"N(K̑h%oȏfπ9f|}u/pk}@D.ݏAfidEh,̀y=;UEhsRSO˒J%[*2[[Tg',:'7߬@xs+Z6bsx5/Z SR,'5(˥Q%C,smD1<<÷">EZ7* ,,֊|V!eLô-cݒ.$u'vP]&ּ13:&v:9V23޷mب t;OǢU/r7ẩ--lШ01ر fF24p#Go/^q^A`}7Kөru YX[|upb-`o43~B8eV Up5xE\,N`sGc"r,׊5!."˗6 Ns=xX؃yFI]RAMCޑWi Q)Zɒo:]szJZy98XJtv:CP=д)ظ0,]0Sj[~Gxvu X~&1Q^I"^Iv!ARwD;^*D! K: ޱj|.N*ߐޤdYmK6b4j/ȼCLvٌ2r,,ֺ.hMWah(h SG_ 8]8:>"gFؚ-!6.6¼ NӔ?*s͋T⎰ TJ"(O'V,SMؖ},_2"M.$ӛW%Xq|ou,S`i\!:L浪jrؗn> U"hN;~52;=N2DR1ddEG EП145j3r{G', @h HV~).a+\nur%f?8l Z*"oir͸l1"KsgsW}PP򈋃5ݝ J73do厸DL̾iׯ[_VoܙzA˯K3O%\^!zWClnBz[!ubiB'HӌeDRlUBmaųz#E?;Q*s/J|;bZf9+mmWfh¶QH^Ў:}q o)`4rpo-A{7"@PF]y^+ -$y9@:aU^Bop =K:jO#žzXl) B65T+q)X̎? "ҒyU| 7Mѡ4Z9f10ddE -C(o'6ߥu;Sd^˥zhC|(>M!ѣOnk&AdXc+#d`#Ma+8"% DQr 7#r1AIpɼ Ҫ#OIo9@I 93^ L܆EhTrE^e1&jJd-ʧML-)PΥ+hU BMqؒ:+zfGnjY *$J~x(<5i⏌TCڻ#=ۣiX Š0`XS~+¥4bˆ.Co+}]UY IW GR V7,&+'=(Y2,]b?i,)5=hsUD!-GW8$+.. N-4D<򩎷_˅# -芯x0KRgyu>{6F$v,;49 ҁ/Ф{.P^^[ *K~aA̠"bI81a (Y<)QtpnKYWnձgzܴ)~8l/ZIB:[w'ʖ`uM?՗4WO "h%;0GI9>ogKmɗy+$ ='~A9c}\,wQlS1qyäcԏ)eˍ҉X^1WoA\~9Cb;R{PMЍ\yQr>}s}/+؜)RX\!?(72TZ҅Lob٩^PcH=WL]u9Of FGCӁoLn 4؟Z/WpZlM55WK6Wú=̋Xչϝ{P!Y  D>= "&LF~"G)%/Z{oPnn::I.&oF ?p׼D<b(C"PYcX={X896!@/ ߠdbVu^I0ֆ!-;zM5φ5D(7?k1num^.\uk7έI`j٣ IŬIB7Mwct2ߪmJn|SkӔA kM~500-[wQzRxy-v_LC)Mɳ} #)K^׼n֕pҒ {{&\ml$պ.X'ݚ~hWm] HȽ"/+ؗ>-$H)xEpWn }.^EԐJ=K1/)=# Q~~qi#BRۉ'mPjWm:j-PFj z$EF919rMiʕ.z_ (LM&*"E u>\猚;퓟 kܞ.1HXkI0M\%2 # }q3lrVabKMz}Yа'+ .t+(m,lVd+y{և3𭒛l(P睟83p0 s{lE E!䇛ɇeQ=jpm`(ϵdQ,ƌ񳶛VQ?,8e~M_W Yy9jc6Ln~f.?Ġa8+@Q+LD>P2LKcB^{hؗjk'" mP-mTq2h]MƱTm!:qqb>IGX*Bt`"(`crΆj:5cJ![ӔDw'ڼǹk )&5yǪ/BåI OR5Gm׾#b6>^>l\M;)ALS_q/\=7&m{Gqh^C`CLR"ҍdn7:R}DY`D]|iz̀Jyx MM'~TrfX}pv{5kh=A K 4! Q+-[B‚5<+(.: y1cI'Rk2;/kȢYk|L/Y$€‘YpC=srPB1d(h-4:wЩ:r!m+ w9y@Ɉ}aT"AOT'z;3ZA}tnycVP]at2aG W₲)UY46^ug:lv Ԇil\o'h?٩=6CXA~)P]-*;MkhAE}6ˑ^ hI$[ 5K fC,Ƶ[hK`w<(PRm핌%hB;;|} zc{ݖQ~ &vhS >15s I~ uF^̨{vUj[siAs&Nt 765o`O^5PS=5_Bx֫u!m&>AKrP? T&T}7IIvf̜9vOj?^mwӋ-kŃ*) Y>:ՇF*J7,iMl(6l1 K̭"2p_ UWWN3$vSޕPgŨ~nf#̭!pBJ.3յr5^nCsڴ> suѼ3C_uSjUdGt}Amu!*~wyMnvi\jʘitm~ۈͷ:.EN׶ՍCU7mJp فl9NJiqF .3XBN9C92"LJboikOWF۔93~XwA|(,йk+6uxs)Jd4_PV/ƂdBo4\hE_ IJvn$soT`6b%ѕ"RO!ԣd"ן!Y]4ȂTňl; =i-/䩞`%kOj +@!AAGݕ]|V?oA#g a˚a za9︘114Čl4Z}q}mϱ}+ac:z&2IxlW |m;ԩU6Xcю= ECctХ2@ <.|C!3X $m BQ8&U/wYxVT6@@mitzʉr>uX7`jh']^5LRť O7}8 @dx<(X#|2(fs_Tz]N@滑hy bHKl= 80RNEcMfqTxAYś} (awjev`>'od +ʫ[޳;*!|щLś%7 m#AlY|WάoS;H©#;T (Tޛn;xTqd^ dN`.+eT rң]$S69't }z<2+3m>Z.>rNf >stream HWZ}<@7!!8*g7 8 ('[%; Iwt?=~Yu]Ur\trB3)).cᅭE,3H'Yܨ9iMV=x,^ bs-I40FQ.MJ!& hQ2UO3r&:-g>gU>QtN-`:/^>WO_QNo@,6huk%ʚ(ㄳRIV,AB+X.EZ?:`wDsUѿ5~R-Vy t2MPMM: ) a%SRy1{*l1Ѫ*SL5 PXvU}J;Y_{m 6mjɸAq1Oq!58>*CClZ=(P:NџOLȳM/cJ%h-mV\//mbǰ˥'zA?^+ګ9*DzR_St Ǐp19nAH:A`?xkIPX<󱴒(;"v NC}Ў '˻g-Vo/&rBZK.Epdj(T%d%Y@׷] ~~i⩡ZVjVˌ/Ebd˃l(Upڋ#`,k|YX:c\/?^>.ϵ d6;m0.ΕJ9xgj),?mT FT UM0,~ }#3W.},t|r:J8zU/+/C2oI:ջQ[^krE1#_)F#AEb Ֆ*ݨ~QJQaP?cMp"}FHz1bF/>1+J7MTrӭ ;UW(FcQ=jLK~zUmMhF7Qs#cjZW5r~[o wjL/DF3Ťyݕԕl-?t*rŎO q8MZ*XTt[,F؅ً:m4F}Z=.[שK5ӥ06/Va;j`:GvIBSQ [ݐFUB}uVBﻎ&F+/Yi̷lArI94:Lu-~. #]Rcu2WɒgqG[ 1:Qp,cJhx}c'˘g 2ꢧ_z M\&ɼ.L%;=-L(D=Pg:+ۈ<ث=S; -Rn6@Qo^J8Q!Adh(W #3O:, CMdy`/:DT׭"tV' YRXL=cFFcx7K0c>\z:.cv^ݿ`b-H Eo⹹ddab]oؾxU06XcfqNUc 41xm|Z21bVs:$xc~8ͯ.#eZp)Ͼf1ރKS#-FBށ;\ ]T>~úP7^Sta5I_i)M4Xn m4F } "'{J#<bZ3Ht1pw4 ^nbD P@9A 6QhNEqpțq4Lcv!JC@[+Cٯ)-oj}$$/4Fkޫ Z!{zSѰp5KC["ZbqFs2̗R:]9^˳ɸ}WRvR>f]0tv%CSڕ4ϲvb](ԍ\Ig;/0_}C[Azoj]۾r _jͻhJ5^꾓rXOXC KHGVz³eoMlgw/usv֫t-u>Q̣AEP@p@T#x'G*! I*==?Jh(G%. 8`jPIlj/V^ >RR)Jl}/Hu^mif#K|jCy JB0W.[0}eGryTC_{8h,WOun]+b(t;wvZ"[3xrf\j=%Ø5EUCS36ub8B#F\iQ\pbGuK40 |Su pM_olJJL:bVnCdGBDk^>ٷ|\}|zZ,7uU_d=MIQӓAՒO[ s!*RD [N5}ښ}rc|jo' _#Hc,&;$R! pYl0q≟(/Vݠu(''J2p"$>N1p'~ OߧԜݱL9jP_~GEq! +P̼deq´ZL4l%;U.8CpIfN>Cو=w}Yx& Vj]MsSOn9qJ dhvT evSEUμ\5 2bƀ R*Z)2%IXky]X6,ŷLF|T6)b"a@"AxWJ1 ҩpz5t'94rjǫaaSrkJrsn!DUBsrר=xWVy"?pWƆ%!% ݗAV9qc Dy XS V.&9h z{J EFd0$^R0B\dI{nм»S~<%)% `ef.Mcb9#.-9p$IV1OMײ"cDkwe徆-$fCi{h~s]Yg=q A=dSW3"":*'C,Ƿ4JҒТ{ԢnjhΆ'5]RВj|5k)'1o`Ko`Bb4?@LtxK_#50a5QqrD7Nsx6[[׭ju4vڢ[ބc=V(껒 Nlg;Jk[JIl >a')aI )%-yHnPǬtZF9Ϣ3:o oX  F&p"$2IBDB4/p/X,9g_t,͙GΔ=QИ\pØγоrD֗ W_2ᜲ;hr 9If}sd§߾G6ɲ<=ƨCcy1F"995U[d|!5]i1q(wCJkCJ@Ҏ1dqd?6lRca-߽h`11}- c4k0k왻;J s!'te0qM"rh?ߜoy =7B6tBЀV{CX}I;˲bm$v=y$@܂e^k{|>_^eD ȍx9;RCH!7 pY`n:_L2HxB9^uaI~=qؼo+|q3hܕBK Cˋ0(ɎCJr0IICݣKd!MjWgzq(0ea-qeu0E(IהUqX[7f_WA^,cLB s.bW1lf[eC-fVl3w\^̤ґGdDw$Jbrn~᧮4TMIv{`"\+>?Lh DCEO^4Cp-DA sxAS7B2'P^?{3V]e!:; 6\FxrP30v[p:|8m*{|r, -wz _ 3L%nVJM OQy(jvT$򩮄^5'wO2;ۖRGW{_L~T ^*-/I3e^ʷJ" gg̙9CJՂn-ǰӷh0JՐ1C`-3 vuJwafޚ5,$TdrnxQ*0hS >J\g;ˮl\$ AyAb׍F?ћCv~# ` ߒB@) :&@ʴ;$NWV}K74,ih &Pxn=DBi3I#Ұ甆Vj}> g $Ok:^e;gPg~1ˉF1)ƑV¿@F1gnHie\n -C0姟?HW11fe IcW{ؒNT}$:Ģn"'Z4bv&4`1՛f2K.hu $l I}L/NŐX*s&Q Jp蜲` 7,{ؗ- +t;VXqX.n^9r٤pw~}J"wPcf5ap. CL{iHuOJh@!Nb$FX+( zl.Z$H1`j/-S/Ěh,7C S\:NeRE$C;<5qXXXGa,E,W0}6AMUKGRhSEk`o2&x=l(Y vZC԰FRr|{_SYg|2YL펇LP4'RuMҝ&s.06NoĔ•=׸,{<xjd/ީۺSn]fE=dۨ%&NP{ 3b˟m,.@/ƻWOB[0aj1w{$Mh#C3E16+=|ҐDp܄`i3ж~Ir,'>EYUU{.!b7#'VzZ_g`Y'Z!9X#/fHbߗ= T;B̗(vZ}WsZJzf_l~mfJ,jl_O$X&Â)|Ϩ҉z{p YfOVYDψ(#S<(E(ĚzPsnnP[E6EXrIv{8`AJLH{ʇy^̼E52͆vO +:r^|I%wC1i8/˴RE ]%'U!:m^ĜOO. X0\sg-tzQW@L4nuB,XoƬhg%2[HZEy<./-r+ Agbཬfs)fPν9WUĂmRԑA~{)NbO6S~^)&RKtՎ?廱d+r{u@1L Mǵ-!<]HWJvP17'JS,Z}o"thh&Lm#FV<>yEf\uFCyn.f]8h[ ;=A?>ql|?BGI. ģ@0VWn'e^\5.W} 3.@-J 4Ѡhi8?iiPJ-#_L>;6PNl^ScDguZWNY?7sO|ÊIc$ޟ&)w-ϦiC؟FqG3gg.ęj4}qJ!~3g&~v8@1/| t2JnS|g#AgK:>Y=C?/ߙsxE1%8 2?{qJ,ƺT0R Q*@"0?)a2|em 2Qr]ޣyb@L|#ײ>1%8n'YTA=JNoTҼ v/|xMxg?,k8jYM/nmr+j^Dnb>.ޥ'D)H. "3kޯr]ϳ~U~Bb|pm|^%'ͅUļ#a!tM*u!L|Sq&Hr50 &ќWk0I tGe ?z$ĈL:svFȽs_6y.+ &i< u O/ti hjoz9i]‡kVwlzw5O;AƈKg2N" P+iJQ˨8`{gН`_u'&+x&* Nת.o PtC䂲p'ma,]yŷ;15ra1^"N @yӐ!W!SEyѝ`݉wIf;[YGUWZQU;,lBʆ\OW={n(:4Ng|/Uı1>mѰD.4Cj֏\MwY"P}L@R%n%6$_}.Bu[oX}A Kd⒊0,"ЎRI?n;9<âs{sSn0EZ<\d$Í2~ GpOGU֠\BݲpJ1NnjFf^aU ZM9"X"\6Uw/Eq7plv7AYOpM&Vftv5!h$""6Y uNiBye#9RNZ RÍڪ Q?] Z&QQ[O#yW{-{&gM>֎7R&yowPŲ>Q骳r9=~Ѿ wH3~z.C&4W[jW6 "30S&`(7\KGqYB Xeimw>2@#5j Ē q2krVdx*/K ba#ϭX(>TN>Qϡd9T P zjAGn'%L?i!axL@!' l`ɢ lo+ l5 3h8E*^?.=kQ?-`K⏅ɛ4,TqTB2\/^jkY)bN,W/쑳B3?imQbcY k̖XF%yǖM |8^c.K]Δ$>> 0>F-jJ\YO;4";A`۞3γtBFZkL꯫`%Tf've.pN#'K~yЊ'b gl s' +< B"xec׺:ؚ4dKPizmT;YZ|Iu?56#= `׬tBy<ŭڥ܍r+0`Yc9 &Ƕy SQV8~wkN=5GUPQ:(&A$h% "[9KzFJxi¢CU+`fw|uw")8]}̹FB͊ #G.,hҼtc6 4.Ѕ\ D p(GR>5 v 711QC Z(194`z_"lkU.:sQ!Ha3g6@fkzWkn5<}z| v&Xq >Ԅ N)L]L|,A5x3]uN$α7*/X:؏xGE븼V-vtciƊѨw_ӴU]s-/^a!Fxߥ4;n?JZ'󀭢@j}T߶+Ny6v1}%oL;؍sP/(^ $n?rcotrl-nBbyں'G=NJ7;&vXvrcnx z߳b͆۽_dauT7k M XȯgH|bЕRl-x+[jӀ~iܳN(/= l hK5i3ia',ATjF@sZJVqҖ ~14GّcbzB^*ucnfHs8}^67HWדNRywKs\Qk %nxe249铈#XϞآl -(@?z<50f'/9dk-/f.ba!F̎'ȢbCa݇H=f8/={c(;`?j+GX +}>vB0C?R,o%{?FIJ*]Wb(FkVk-J9_~,K'e5LVh Sc @O[:9٦ Jڲf<}KB?Թ3e771ʑ =dB-3QN:P_/ e[zo%˲p—' o$F^¡4ܗM,P-U$jF.ffqȃ.3QǻY5P~er. p.6\z0(-}21gޯu*f,qdTԿ܇?H2XPAa ي;k38T b>ϟϗr45_&EZJcR Ї G!D!& >Q?` |棆 fC S*DĸdbXTHx2OH$ HAHXTX`(dћZq;(~2F sR~TljJesC7hHD aG!o@^Gݍ{3S̯v)|L_6L_6ڋ>3z9ޏޜ͊1ZJUcIq^*đW^Gïm5,iQae~=Tuu>/,66zCZRD_Ϻ <`AœW^LfaEDPxK(z6>stream HYW?lLP2#2(B r?v2n_eY{WoN3!l=MkO6Sfy8aڢxmM;w,)ZC#fZwdL9;Q(̯Z J0W$(̯Z  e LV;߳' &*{ts5IB\ 0$O_Z|5;{_,rŚu0[\^0toL/MwXۆ̢aV!8 1 4 p<)N ):DgyĒ Q-@X_a_l7Cyvٓq?aџ.WYu&ݙtgĺUX M@A $MBH(b%љtgҝIw&g*p S$ %AIy@ QL3Τ;7H ,0s<څ< R )a9H(DA0<Ӏ)(`(`3 0< ß+Pr̉0vc pA;jGbì5!CQL0p$0 L  Y1?~tF u-g8tڜ[Cޫ'gŗ<9B!W܉sZ~o{ T ݝ"} FTxV+ʔ)̈́iXBa2x/osڎIl,7Syi2`Z_ïgE*-G}:ohӵPaDG`zKgMV/VY{-qiI=TTFzEO9;yPyVxi-86Qsߡx[+6 ] IkeM<D% Re:.DQ|[h=CʛlD: ;9}}ͨ*8C$F6sk&}eJ(} c $T7%yZByUܽq7zU{&DBb$0%֫ba=> ^y(LQ$%FGl%^!m[gMYܭJVNӬؐDi3/ v$DJ]VS# )Sя,rg|3<С0!ʁ^&WF34LGJ0.:kڿ@^9=$imt tlPAM=}=>+jWH9|#.l)Bоf)dg[bMͨ#֧ic4, 4ȫ2@M?zCR_s^j\-'zefHhڵZnPFV˓ЌƼ}o%eZ檡)uY=WuvmMdKeoۛS7eHF|4Pۻ22݈ 2udQȢsJ%/] %%ŠjڲD%9RRH<_]8c)MRYy- *SLwEPilQ˖_[S:(z`:ћ"(+ PDArF#ZV'ƦFVF K7坓87Nϑ{~m\QYUM;k.qL,7O˽!PAǼE%%]>pQl0$d3 R7SڱnrbVҒey<)#_#{V1P}[ݎV)t;}۲]$Ȁ.w0/J\1+;˦ nXDÈA142+e{'ï݅Ouj7J1̭w~AAo"=K9ߎKwςyTVj%D/K>2bИ11Q{.>&|fdCy}|rGZLYTA*JqG[Dr*(+FX Te-CC幞,#k (kJ,}/hL3Y\Rl*Te{:=f:2w6%y'{ t}sXOEKI68~zD (wѹ`&m AQBhޑl2@SEA9UvD)CT1>ĶJ BTV{$}kmD$UaW*`_H*Hiф{Hi {DIH[ɮ6`7c qtgJN)/OW?l`eA.C]Te5 s(|:;Hy-N@x Qd|U=Y /l7 ڍ2V p=.`χ=Sp;K':eo 5o D|QlPJi[!K՟'|$̥H\[}nD[zbuO=e"Wշ-Ny+6$u| ź % sZRBk+]{]??>e썯!&/;>,vm$WUB^Y]SR(BZN9v*#` uo.~`.ͬޕ/Tc(:C[4ŁԜ$ƴh!t<c^))?Oƾm#eWqm@i+^ij/lf)_ [k"Ey+3,*!yn*k ^kަ i!toIx#F*P \Vҍ &w(E-cVJaa4Pl8pઆ* Or/P Nr:6[#ܷX93_`3 iz0idY\<؛'=ƶDlU,5hWwS "A< ^ sش'00@ۂv1=݌+RXؑeg.rueWq(  bT|J:><Ա+]"KZm*iYsvmMSy f8o5+8Xp2@G~iwM& dQ _M\}Gux,Ehw6_0es OM/-VެlAWcN!|w *;.W.{8zCΕ őc[#ZMDnH:$<%J^y x|Rگ^>Eg@x<\y2̉Bc36D73`2?O0^NW?]Em.:TRL꫍U\SFuQ}_:\KФ.{WjY܌;}f6-h\zLO5~e(Iw=u3w˩cuS_uQ@]%Ģr.3Y#ΎEO5~&e~;\j4EF@g=*WĢ?rXq]BڌB]-gĢ7eLO53Y3΍6nϘjvd-(P)cz1WX>stream Hݎ]Gw7H]]p1ʚؓa{$ Ž9jժ9K۞F6G9lĖS>~=s6[iD3ی}~q:r/EK)fs}xi[/D2suzу{1'_e6`X!6R`W<59fck>oo_}R}w/o^޽yBږ?Rs}Eɽ˛w{ONo?{7ooۻo/[={sͫg/+ۜu۽~SзG/> _Yrrf6eTK6w®@R.;6+|gӬ \s[%G> 8jTN RdcX R@,{|9[̭p1t;\8@sz|9Ϭ ICU>PjRYs\DOOwuK/ۅyD{<ϐ &wfIdL3U~ =ubX$R鸬o/z[ 9-fЈhKR gpv8Wx2x()Qj8pDhB Q\ЏNu٩ei.hsf-WN a%|y&9դ. WKW9|'tdD)uT=6\B.S_l8G4^:s;Mzi_)ss6g=媋U:㼳b^y&I΍;F_ܽ^'cp~4?4 PSl4ir4J-t  D MdT"QJ5(amTE2HISImT^/'t T BfV'MGK Pi-:aj%zb ۘ *H{'uEx̀CSᜀ[N/&Wg{NN[:R;)Jsb%\{kE:/v aw&&L>ÿ 4cn-0/m^ ZPatn q"xS`yT᭭(ɩ󦺮Y*%cHNJ\d0L pśiJ+ Mf`RbYvYv HKJ)Six(IJ>Og0 uzgD{ݎ3"IDez^qP.Xb,‚wPˮ^@dU3(SҴK 3r[fЬF.Ҧ$ (L\vއERHf`#0~¤[D44>9K.uAigH_-ES (4=hQrʤ,JtZJ5ھ0fzj^:NҤ L@Z*6FdhBc-/ņqPbI^G%b,e?🴢h! `Q xaFt{A\բ̔* 5Vkdt/eHI>M θȯQi6 5֭!lfφh}r5]AiEF6jHrNM|O[W|q:[m(㽮ibKH;D1tM~mPDbFE"fC`j) gY Q%~^5MW2*]Wh N ISp'yqh+k޳%T805y것/ZpP"7T1~FIamdiut̡4J SBV"G X+,u|`G@2_ɉB=cKG<@P.)Xt}/eAL_w؍r$zy(X:V Bi8ԃ&BmhR0(k|R~R/UFjg,LV*~ .uV*PYiu(+bҍ2+Kdr2J%xCta:{ZD%uL*jR29wzď wxjF PEhzO .0L .V.MPl]c/pP!B-cYzHUP'9F$o{R{eEQĈ2ArBKM"~sUn7]{,T"ĸ Krb,%G ؊rrƺ]Vkd?&w?@[K.2ŎG<9t&zD(M8̀9 IS,7Bĉ0ԙ6;v<3BT43[Q 2tF @S'ëqLq2δε*=Y+0 ! w:iv|I %B^`}(W~wjvϓ6@V.:qjAg9 A _swn20y-Jch-&W5ts+0}fsOzRvH%s,6:V~~rЍ)'4"@̇R1p¾#Cx!{]ħj'`52fC 9Z]uG<Vz3sD!h֠&%:1Q4u 3.=8-N#eйe/#%;A&<=ӕAwXaŽlYF"~.lB0{ `E BȮaF /ϋN`y+ĵu)!(?uM ^:^UvSLB__io'wAr]@K +ko-ˠWczt4ۆOTQ7c3T2mEIʤSy>=NM @8[7rʸhRɴBh ~듫\0zktG8RQlݑgH{ $rqEo7%+a{-{?B1$@^b^q 8n僋A7gĈuw1)VɌL`<`6*e<\%+ *]Q^$y >/>'i;FA: ‹Qu{CHVH߸I]CקDgߙC Ykۿw6%&L߀hΜ).% `Ϡ4[qNrTJ,bJ+'}d#=89|$f:z#Be}=V,Op6N$3)Wz1<8PxI>:͛;1.AZIzR;B(Ty dR^ #]L!U }8CsVmKn[!Q?1 Ӄq| /dE1W  :m<2-R|H|\z0~ ЃK)cnTXO \͢)ٌv?4Ugg&8+L ]S^E|mZڝiW2,1iw[\4ÖtwYǮ#.Ǒ 3Xb=W^K8{%Ĕ͊ԠO=h{X{8qQ!cw.GL6jcr 9ghª#ZHӖ(?n߇ܮڎ}EG,BO_&9:Gv\^;ED65wo"IUX| * B+*czj">\k] \0U}iNu[/xBg:o\Bg iQFCMu5ӻͫnե{$mb >v;nѡ6_Skl@V 6X6ӎ[ WMlCo=a1[K=#oꔗevTiEht -sQj$Q>b" h!n\#Q ފ9q,帥7K>TjKG/I[^-^ c gn:t;)m)C۸2km6E8XX7f6:9|03L(C8LI]:s}nFBvuCʛ%2r/1(%ƮjC?@ĝYzR'dNB?hIc$Or\>E6"}}Z O.1)~񗋩8@Lg;'Չw-/QS !2_\h5$p\R(g-gFl(KER+HOjloћz>'TݯRHFܸơ )ss@sdX78~tSid0Or 9͑Jn-wL%FQc+M Խ9/>J#!ebϟȅP=MzV2¨\|'jadI> @nIE R'(?Jg_cqJQ0LLf T{u( '`+Tx0wlHY;kqm7 n^Pn,Ku9 =oI'g(;Pjha(N<+*X<5XDb.~mta* B+Ҍ33co OR;ın~6g7ynvK;.1CM:VjvUf jQ!ueGdcF֩F6dtJPYrlbP&ngUkSI19 Si]^8N\5V&;dC@`gP]˵qiZaXƾrAXja V74pSugQ 5pxk=@EeaJ AeWza;Ɩ X_aXA0'Q9P`Z VQ蠞o%?FU L8Tu?ݛ"[\P|db':匕w߇|+ĺdMpgggm GPMgs5~>~}ڵTKMo@Hm٨\ ./ HY8Xq>XuD}x\$N*;m+[+Bzݖ]q(P(+VIJNFceT؉-סp^\2 Oul ? #޳b&KGdKF9|VgN5̉W PF=[_d'x/DV/2fX(kY 7=ۮ%6WӖwd1=ӧb0Ol_MF!6,\M=&HҌ]-|mf߃w5'1L㎸#a{,0U&dyŗ6OQdژtpbr$o!1^:[2d_Hu׊y_uͯ ’87Xº[hDEP޾.2 3C݀f`17Dwʹ,GtIPU],cqyu_bY:#Oxsδq'DF(oA ~yJW&t,U$o#䬏{A ?0Ϙ3 %k_N~K0tj1`^^ՋQ6tlpRnG,OPx#loNqB0 _ *iSPcxPDC@p:6ZR.PBL Pzcy7r_ A m#9sp|h~e IBR31|cf86`0-Ֆ@c+\OssK ( DHf cQ&GGЇ}bl}tlsLR9&Zsϻa%l0rnZHVپ7#zCL-n=\8{ʞWx # \vĩ3\~x8y~8gqaS(PBoK_?sATM@:={59NDh8[+0 b Plq:_UG0U߈+ ݞE ݿC291/pn(dp kAn߹8OAo=n1DrQ~)$`ʶM[z={[q9uU"D=K\-b.ji<%"L;U'P#R~g(& Ӌ{ύP?rgubȼ>\r9A+~B{e>POWV+&>8?O!Wnx[ߟ?1p寿r=@đfml`~Z>|$gDC0yu^-&vAM`9.o-hSaҜ5p;"2C-l>,{MN @* 4֦;De~ƻcǻj_1`QpY- WyA#v**vJ2zh^C""5䂠00Ne SJvdfn܊Qgl@fPZnq Zsjwr T`i7YR|RDBSPnEIGY>2i;1Iw&,>jV^U,}%/advnq^H=?ͯ=Vp{N{>ؠ"e:0vО7<FzG3nWD?˭7 e)#N߻'. zHv"?4QHdP@w{)FRLtK:8SCMZ %*F/~u &e/QKrQa58ykr9/;!҉FZ!ƆrJr*$Y(hxad kE:ɲFE!8͋glב=q(L5bOiū81jO 5X0+;8"g nζD`dt@jp@'hyve}yuࠨ =hh i'1H〱A^t$qd0à ɞ s92FOf_O߾}zp{O~xz}x#YV_ßn?ǏW?Lgw?m/_kϯעvۻл?k tjz~ᬎr8D;%# #6a '])kA7)r, Q!6[:梋>dH ;\d&4XWFs,_t q3jZyNJ`~Óg24+keyC>kw @yXJ!871YW^H#E~LL3o'-\k}-[[;6< Cmo:@lwp|8HUr}ׁT=@5lGG) Oö0j!W_\ގX)kVZ:$"8š q'T[kvT 8@i 횘~0 XMN|L3$KVP08;Kڽt4b5C:rA75v~|ugP9cW?#s9{hEls{!$ -/'O^%ET++&ERԃ ĕ]G}ק>,DlӍa:[}i ~ѮCyĵt%|s/Ead$1K9[40e"YPeu"\g܁E r8:g}EHKZT% !"{ĜHl#k ͘RVWpX~b]4~?/iߐ=+Lk8* 5ƋSa~_+Ar#L<_kzs?cKH'gï%?"YDY/YNlRu JX?'59uK=UBB [Cozl XʉV>qЫ0K5QDĕZ#ޑ2Z{UZPIdT )S%-^uփWU2+'&U] L2('tIQΦ=eh2 jQW`.")!=rfHOk-Zͦ[r[iQ=%i9 OtWqƮZ*8_d閗'V CLn XcZj2i~x|~MGΖ!t C2ThDe l,:_'=x\76|k?a`T)2-!4`gU(|zŢE=g,:}nc|Md0Gi&S}c,)CREDNjd÷mXiW,311g"4GFnTJ~Rׇכ!fxJC Rc3䚵a3P{IQ8dAT5Ěu,1fv{ J~7{Fs oYNU#q;bIV jCbطT|ݸvG)eKw" I\JakWo.!CIepIYN fG".)-m"P`[[XvCfMP1箣ՉO/8,g|D`09ar( FcFҲtЙxl *sSm$eY6P CχƟV&l0<= o_Ґ}fmõF֋BȸEQt.;B@Վg gNv}!W˖yw 'y{9l!W<)i#9hՊEIU]aO)XyLbeۇ灗ꏽH\B4 r+K*JQ>5oAliS({~*,|1AOs_aB㲡5`N ̄HW>"<~8xF¢Q1XШ[sgbں$DKW[>åʫUJUcU;IzׯTz>*M.BZme_2)E8? WCg:q}gztFԔ_^x% =kX_7FB[fy-ƴC.DWHwjQɞD^[Me.#Geմb{#6y~w<=7_?SDtc{&CK1J!Ttb'- qi]9jV~{.]3v!Jvp|wSIgC rͰzqb8֚?SJU*zQ#vyQBdee}?R#-FuԵlvm%us%3o=p>'rcIH^ohA#h(Nl7XX?OϐqJ!4^%t: %V%CW|Rl<%{bT=izlHcU.o,}]㷜0*Y&JO-_YFQyȰ=\ [rzRMŐvwb[U=SӼشUVI_WΜZh'b#v&-6 I/3{J v2MWVu]*@Ken]KkA"Q*̻.?z=j}W DWM#$¼=ԅ<XbZtZn(0#oX}f#Z͊U^>ޠ*>'L[X.ۼM'y6m=B%q~ph(RygZzjh~l /:r#nE+xQsocEG=}N(ʅРM 7G׫u:$')'WSboYE^O",Sp᱊i툉ӊ1Rf5"A߲SCї̣plL1+ق</0*dTq.z#T* >Th{Y5 LC\?Ԧ DU[b.;u9()z~&6q Dl hI!Ĭr( fi*pg nUKEM9:hLOUEm!IutU\J =$w} faRFv8;~=cӈhaTqIc f!:cN+=2 I3]>d[nlhS6b_&N` g 1֣[ÂmAK jk[\8L|dM.$|e OW8c}9B !sidn^ (Ac?Vpox61|Nu)dXr<ŪZi@0|#Qd8;iʹ!K7TF쓝[T#$ҍ<v\}YJB ǁ  Ad"iA=wX[#un CXň@Qb ^t:]^tSd*C[KmP%e資`k. HqʑfR*:>\u8n $o#9ahiiaVtE\혆Fw7޶:qKc $Z`^V0z/Ƌ;NUf.>`nѩ Yu=yp(n*x>q MGB֊Y xNʏjOM,h2N/p]<Oo3qӖX Icܜ6J!SUC rd&G2QvqD#XN޵ɾm1wiMS 6 * YgfKGΚ >!OP?]SE3+ܹ ;I<%mg UWst[_|` KyAqHex*bM^)5'rYg-Dʥpba`iHE aZ(HPi; 1E($'-_2g$Fu#pCOBl3GҬ yٓ>#! L= !JB?a~XIw| X˂bhi wq7<=EnZg(7ذߪ4L'3={ĞE2^UX*a / ĩD[}~k*1Ho 4L0aqg0f-hu A,bjn'la16 u؀Cͱ:4V0cZjܕۚͅܓ$jhp<?K&hEhN 1^ *M܃PŘIx rϮ g.?b20Iy Qbgv4.!l;z1[\1FE]\lj3ڼ#HyT ekg~}@~`S+j4|Pi@ybYܱ٠u)^D?7y|&:D*.c& " 4pqw6P 0ǧ?c?H>!S w/$d@#P27U?2l [b@W 8b,b i!$[R0F@c`;#"*Vu0ji5Szw^|j,r%`T9Oy IYϊkgO<ҿ}'1=zqEK2 HVH6AGH}S3jLYq"DUWսuycbFY*(JV,"U>>>4N?zϏwOwVӟnO?.ǧ.V.\7\O7/Nv_ﭫKtq9k DJ(KPŤ Ol'Va^HQ'3@=6Кk=+pf I2@[E{ Cuc[ěeΫ8si#90Lr8QqD @%l0, 5}GUJr)[qd &>mEG$܊(3b,X=TN /]𝑺L&rx2:p:T8+l6h@ՉcX%\MF UT.:$,RJPVx"3.g4 43ikk8Zk-ezP\̅P,S3Yby 8ДX"2Q ##Yi]ɠI1v2@YGgqG:K4è-@G/I2x܄ 9u / H+B7eb#@ d,Xc,d+]ńHN\`[Nދ56 R(g B `WBe/HYiU;s N;{=@ o5q Փ6b2bPMq!4G]gkdD53nLY *dDV Z:FdCDBX9!%~mUS49FGpT0cIı~arzX .~r(,&NIC:@rDC];LMLeFSVU~#'W8L!gSe}~Bi JA1:I0AUsok5HF.> "LF}4?(f~HhA^ε!-Y<(91$<ʠs;9U+lzR$B[`qj 3PH8e?@>}G3{͞-YOE;2Q4'$.lLƐ-nTSj8%{vQ\ŴO]S ^Dv RUp̸ +xׂS 6L=HVÀb 6JVaj3>ê2"E+#&2UT@gV4zrc[3z邧_X' H l(ҲXP7̇j:ά$mEax+b S{C?wvV':>.{2~wO׻2>j?ZU1TϕU.z~YȨuIg.jx骷3r(q)'On?1~]N+&`[/kraj֍fi4 ϛ)nU۩T]وdI(j}%v0fu;'EDv@TC21J>@F'.67iGZ Gֽ@qTPQlþX\ɫ>6>q*=wfLB k[-w~,M7F'ﺄƙS܆yԿU<,F:Awi~},n-Ä+.WXPr*G;}DR7fmfr:Nb\o[pHj %sc]P HS KYy 1IQiSmlش}k_B__6v&guO$z%W8F3<l4"q'ҜZS&!S>2R |Z)?xquRwY/)JdUNrEģQ71;gEYF츦~3zix&do+NY>gawPFxdK(zU?2vOrPYOik&q+o9,ӾbFiY|}\۟4j_r_a5@;x* )e}.D8$,Q8f# RSi2f YGyݝO)SND/Lϓ2ETm^OQr]E*p,Q?YfI$>?E\syE5>rik4syM:"SUDN3ah ǹӞ1(gc9w9sD#?eL\rᔏPwPrE],8o7~2WkKy{M ˌ>ˌrB}> 猚JM?yM{N"l: tbDz;2|p>3EH%C'\R3%,GJL84a]- qT%(|\W?:,˼pCUI|b-`|μcNrs\E m#KDoW+(aI ^ަ [؂Yih LU[XyTQSZ#PE^R{@2.wj1˟ZstJxMأ͝zFx 1Xr&?"[x4,iwDjFǶ? zº[Z2|#tĞAxMy&8RoPXúL9^ }szVNʕIF%QH *UUDN9iH 9"ХM (I=HF!W ftcN W5Y?/oPm%ۄQic}uv]Zf:.܀f'GzBUu󐦋߄0䞽d{v<jIoX|U;-:j1ZN}N>B\Lh'߆y ۜVtTo>^`4y5a9̉Iy%PRGhG^ouLˡIqV;_(u_z2r~GIJq¤p]bs/h=$5uIwZu{[e}M_v]QrN ] C$O\<7-wZWK4K7qeM^{ 6,k!;% Z㔯=Z30ir*ҦBܞc{R:fԎ؞lKwlOF؎/<;l+ѧ 7l?|[YwҲCpKlGq(*ȹMSaYn\¥UФɶwTdh('s!GZ)i==:s=m}\<{&"L&8r 9MXyݩ ?7fx^Ͱ)0&x21ͦ?uk n1˞9K4Cx9-<ݦԘRYÄ[زSu[:+d&GZ;vn\>"E! {WΑ,mECUtjP#xyORG.KZH8P1M}ֈH)Yр( gg7F?}޶vy淒/SiL ڢ!MQIScKSa:R +2`Hiyd"uúA|oNU,54es@evOI d~?O{'}uQ#>(89Cr54a| ~yIWbVo5R'hs>+|d`&BEwh n?#y_RAh(vYFI;.*χkgFe+5돫y uN$o8t/(7T yM9UmD'}KOwBF&,"gîWt#8\ÊZMQte>b`1o=p8Mx @ʜsXdɖA /SM9l;X`F6E즉%;2g>nx*AaY>N"Vo+) aHy_YԉC+P3qݤ}Ri^ "ONODrT|*\sE1ŤCOiW<#qL`t.a$V#w;w1#oX0>'_ 5>K~F@DCU%fFFd4_X(k/(QjZ#zN`2([qnIBΚ\mSk;R` "cR(W0_zꋾ23*p|K_Wgɐ% \ ܼVnRŚmL'qat>in_K C5 >5(^{RH]<꽖62Tg 1΁82;<*a {  |4j `&zŔV&7 4Јٞ@VO T0LqWeՈlrdBɣѶQvtRyvi@bIu,y&Qۈ@ x7b:98)T.Gǜpc8pja&<^#!IJH4n^aNStdefbvYwd]=쑆3a~O`GP9;V-<) endstream endobj 38 0 obj <>stream H; DO;#A :,{_/Y5#mWm"ƙ.'Hڜf-g_эvMY_[X\l9ۛ=wW_wk{܃Oc'jm,b+|y'ZϾv5hÒys`-:{e3zo쯧^{ jzlܭxZ8M1~a5۞6DpHxZ ,- ~X)O!"&^-* $v43([7y~Pq "yXUX%rI*2|-5GҚF5i⁹h`yfEp]\4M;NPimq?D1J@t sh^`*br2> pɑ"CaRR^.md^/ ozɉ+2qgZĴa0ӣpxvE Ym[w/zI!:AWW €}yBHņP 8o ˥L<@CsֹgTSă2TmHB @S V{ A >@GKmC#M*2.<[P ?M5xR'yAآ+PMfy)? <@D bt Y1qBOk {s/hHЖQi MN6=ۮQ.~D+"6 wt,@ޱv,ak&6|XW\  K8:Ni0=jPgj+gL@WX.G encG0O@,)Ě:|JEJ1뀩)/Ғ`4: rLjGN:~a7:{f rJ!׌ϋ`R9`?T'G/!v %]i/ e  /M)ॱ5Qӝ}>{SV_{F+"SbI =0Ю|3KPaALHqQv{\Ho-Vœ$y k6~Ztʥg:|4LaӮ${EH2  X|0$B_X2Iŷ!H"`SCszeIt-{3- o3繣/L/Iph`xU*>u$Tz<ؖjQ gOaPhU{W],ASJ@/@>/q~'|@ߌ&Bz1;khӜԽhg!ZfHU>~2:* ~{H38Di/Rp|_Sڻ!O!{ŋ"="n4eyIXzwz~x[V?[ipP(K*{aAF'Itm4<|$dw(*RXЀ IPz>T`&ܕ&Piq^D@#t(d=R_w сF;5 at]gT{F0ĩ`t-Z0jc*ꆝ(euab$.2*>ITDTNY*Ip$eni̦~ PS: JPFV(i1Cl/38 ܡWY9k"'ȑG&U_D cDDL^+TiP'f}=%:܁H;姧 Gf\gp^COd fZbXikDpLKi4F HQ OE5˯ 4~,M*! 1cgJ MQDa `P6+>h]bZB[Ky`6I}ڳ-IмL(5g!Pۋʥ$$`ZC}S,:0/|ti34KH>lr1 )Q8:=diKsOw XԊzdk`ǧ5X\F Y×g&``y<4d =JW(3# 7ċgH6 53xϑӊ,\,$P;qb%Gn|P#/x`5!Ƞ38g٠{ zkT`4ceFŒF{,w uuїCAW71amZ 0(r=.$ũ?Ɣ,8=d1MWs+B׸VIͬh?9d E//)f6q=^5C-&ٶpsdKƐHJ48WLh7 '"3]F9dKhf6cM67FU)HD8gb4e p̑ѯQ?O= &~:WDmS03Wة-D2X0r^_ǣjƧfy4hhҲ'bW)9=0",y*D> 6~~?ĒZ1ѳԉl'AxSBC+q.t8Ȓ(IUUzfU;|t4%5+z%xZ"]ъvcA㈘B\te5˄Ѩ"T5p>&&[&"f/`JWN\[ǩ&lO&ղ_|GB"_g7) VxZ'(V);PS!&񕻾њ_SHx2O:} *ta L"#q{"0&jY&?9?Niݺ$DPbԣ+ ou}Wd,sƆJ );/}Y WFal.Pe}xb bK#@Y:GUF"@=BEx/V;_LEc4t| lFlq+롬Ƅ2*Od<"']_6bs N/s; 'YfGB?z'te,V$'.xX3&^FR^5'$v _w7=KXeXpÇG[RmaQ_iBnٔxA9ԻLY@A@*F#HK C>i(qp=_P= 5x04po `%t8OwafA𼿻L9R,4](v©m.pyﵼ ˗ߦ7C?^À``ZCn(**57guJLZhsVjoYXVb?cx>Lz&NnWf;4 HŐ(\Ň:{Y5%W,fg;ZvFeL\S^};UFdn<._UI[hymFb"VBq7LfƘ~GB|'U͚(%/q"-v!sOTr݈ TwR˳1tbph@V=R"XUTNzo_+$PB?_X B9Z>?u?0r2`\^&uW+UDHN(+&iG%wn#Ůb a&xH{%M 0 iӟk$Mf@<'|VyNdWt,2I; %2E#p\&ct?[?=@QvͩY~LкGjR$ٌi]Mа"u5:wOlKYGȺHdD0DE~;7;;nF`%#q$USyνc!A_/]$cվ, B\" 1T979DiDhj 1eW tt xivp4Mhzb!]'"x QH {bceG|}}_=x0&c"V2$}QCq57ʊLPaI;bw%Rq\ bKT̙R:rX1 @Xᖱ;۟'nB\*ބ@ڶ}é"3Ј0ZS&/M: cW3?F:(/ i{+^3@CTY:Mmq C8ۃ &/#k,(3k+Rx Y%E.)NT&n2C)ˊ!V0G$LpÁ@"|KD+Fƕ( $lX%6JqS0 DT3$RjB?5ItRCH[hD^Agq *( 6:ܗ6D=e+䡥T.Jv/CCV#2LK@R;(lFX o AÑTA< }0II0jB 6 +e[5i|>FXFd/ر?Ԋ{bK$'贽tlh-F!0Z).G0u"L8,O?Lģ/GFɊzJ`r St7wAa E>./9^'3/$ĵ9N1BTz0Vbabz 7|>1 |C-ACk,v#NGj`a46>N@%ltsď:]`:z__^}姻O7__G<7meɬ:w'X/E?|S)J,]ȸb].>? 7?~e~/or{5i޲Q?_}W}=x{yk˫w׷?||mH 盏עˇiË }Ӫנ,^/5ok- +B8.U3Mh`" k)oB3,GBeתS%Zc0&>'W, x N ]X%ZϽv*#lɲ!ĈBR`bETFL2jJbѼew@̮0L ?;3V"of-/?OAR;Jdaeώ=tpA8/6@!<(*=T=^̦'ACLHMʰDP(oT9+Ct; dq zpnjUxR>f432*l"Ǚ-ggr1 2W<CWP~=VxS3#xH'zRx3#4ADG Jk;Īɔ` ]Qؑ8j$!dNrF?\$c$Hru FCRomNdqJIaxz YTr߭="Prݖ&\ -^v,0Y>*WyXD#JؐNwOzI4ADL_KTudۢ[G}\.5y] pG6$'%zWK6^ZKxGaj\W{Ǿ'[_O,53-"~!{daIw{ 09^Lzu7]}Co, rS`s%Rڎ5, LNxd10쌢MF@+r[+tz\%zT # E'@ຟkeڈwfu-P^vm+@ Չl ܝ=DZkj<方=玏ĥG/ol{ز_k.6i=`E#Ug:g&Y2@"ctB+]\yD3=Jּ3̭)xu>f"Dfg]G. rM,-'=$'[5kd]fF,R˨a`f=l .t%hEyYiQk-'v#ʽ*wG^-/5H K8[LU`sFWQ1Niػi:E-{TRuTJ]{¤XLqX#Ys}h{KYSլ߰:/۳z q_ m#|Wk[@>t{\ڻ2pYL|:R8z2SzN&# +Yt[=} 2` 3ns?AN:(G!ZC*&,$$v DF/֐$0&`~sdu+CwNX)PǼgzͤ TU'mw _(ao7>1QG+q3" )"'h>"# {ٍgܸEƘ %,Eaj⟯??T={xTm`jAȧ ڭelqS 3w.:(+d)Y1K3Syh\Kb- @4 ! ,N(" ivbI~õLW|]Ay L!,_u ]5#pTEYdJH}dr5RF?=g܃ st%P,Db!Z(хLE"%ޓ·6K9sXE- {NocMΘT}dΗ4{i_BxОj/ g)psjbZuko@'cQ!Q:F(/-D͗&`5+aj}ENzŷ2/DbTX~vu~Gz-%uSq쾽$N{T:\߰)8-U{z9D݃c0k~=˺@Hp[kVSuXoܞ0ZSewxcF!ѯIY}"1ms~cܷ3m 8/zHkw?{o=j2ɷsꇏ1>^bgKHMEQ#oA rĕFP)꒫oX^ s4"="rJuCZA~]d:(.j= ~ێ ܾbM(Uց)bQآ7ϣ@ϸz`dOrR:>oT(jdסUqZyTC&*+M8lTiVY=UV0P?L#'2S.b%ڲJք1;qЅȪOR#.= @a]NM.9iyTRpʪŁ6cQ1-G5 i)>2ϖ(`#CܔYBuFb5 { @SmYr7ٕёX#NJ_}ulLGW9X9 |ȃȥӲ%*I8I"A8oh\/uoE{,#R6D79qd"MYQ'ALx3#uXh}V5€A}sc 6MPwb?w 8̦rX=36=z= rKsP`1__(C!LI- $<)_(?HXl㦭!2w' 0@UKﻛQwě 'q;w ޚl,Wb.b+x :^![D!Se?я!tV2?lP9~v\?fI֬qԞp6 Nǖ[o+̫^Pzjv[^2Xu:!j=VT39 g qf?b]n+t[ujbo ʆO}j1W ۠dϨpI uiqRI6Db'jfi+OGH2; H]\ҩ$ZH@ (kF 8&Hs>sI,w&\;2{~UY^juz#GU-oY<)4Eq,uÙ -QJ2ظkTG~Tg;9!fl'AzZ~3W{A|El} _F&u}o@mq>TVڃlJԊ)6~ƪ6ࠞ u_[ooI arZۃ!wG3O]VVC$a{pДp9dH?sPmce1ocPp1Fq<Գ4+7JR4c "m?*(>Ag:+nf0PirqZ+ %e}*j=L9 m{:n vBwQ Fx9NUmd g*-`A8霂b^G*{Azx@ٙV#%HxɕTx̦zI+Pѐд&m{mTwpٟOgI%QI%*pmv%\u`H az'|XV¡dcANmqKWǃe޹o'7"ǜz]3p PB#5 ?wks9Fcjm1 ɱ2T]GջTX9C"](a^hX'L q%t(fWwxn,[lo aw`ҹ ND3d9@k8rIg-A:}*HcG1ws`񕯱BxNEdSD@# 93]ǵQ4?" ֵk=6s0FrI񷢑bs՘N',*AnACY܈@\wxrq|>`vFpsk4ZI*Fݢ0㨛RC݆Rw8([qA&(.(`*p0%ͯğ?8:6 T_m DpeG(>PP>^GW/\!N͖֗f='J$Ӕ=KРmD?s!SF454>HKp?Y4>KY0;~@jAGj_aKdc7X}p%{ E5h!FRY4b&Qc?\lG/jm^zc#q]\HiDڲ''N>uvAҴwcq_5i>jՕ>b= WGFi =F>"I> CI)3TK"l Z{WX$:.sU8.E`(b`д7J`nyQB(o%\ u ٗ!uA?hrF`^03Xv8!}_Enru 񤏵ܔ~iU6\G=$V,2v[ۓojzZAbfB~b ^+(pZD>p? 0QLHҪ$}3ÜOK'HYU,|\vD)"g~Ҭ+ -kٲU~@u緒E/&n2]U=uK]shj|JepL51b3S'}X"1 @\s:#;!X0#DSq I~%QNA6n?:="HcxUA9f>!|Ű:'&i1!G#Ŵ`[yu UŗXе.,Lz9NisFÌE_cy%ER(NFqnlHۂ?:քA ̳ 1  `ab 4/bA֘tƙa-> ܾF.]Ӕ2uEi8f (;>*Kh"St$FZ9w/P`dyJk2:R,q.-Fa9}s}x!Q duqT(Vze7ۈ-H[E]8w$p\K2s\d}M1 E,WmSC\@1g࠲U$R{6?hh t q--Or BgEۤq&ZMUQt*"SKFYD\ϝwdAuHԫL0.NJ뛎UGmnZ=rJԷ⚦cwD':ZDžQZԺs1O J2!Թx@7?p? MioSC M+hO|XeTMQ?w/ڠD T؅qV.o $j81Z;C_GhDc.=6O|yct8hw.B`K.p'Ht!)YJ0D=0at ad a|W`tZn'ր ٩#aF.$7`3?{3Pi ,ݧ.|}07K=ɼ#J2* fJ=1=nŢlgV9~nLL'*ջN3c"R) ۄÒvf~(\"a,fFxcIaw#a0Fʧ 7 {5:@G K$kd2e&/ % *rj1; _0׷OBMQx Fߨف.|zs.<+>3%2DK%o(>WL /C2<ɜ0!ʩ"6*g'AE'#o5#h2MA]-~9p"m ]Eo#ޯg A(vk2Ŀ9db6'T~bMXY/J/h!,ElBRq?j xOqÝ@#.f]Hi (;ysd>JAV@ ޭ2 /` Нw[r.MJ\uVqCnX1 7cz_g#mڏ[ayƘWf%hpt_' ,l Ü1\ ZRqI Mj.5U/ n|uQNDT_ČN2,dx",*¥Yīa#weDZV6xuɽ#ӤgB]woX&ekި_"&Sj{"\Еln+fO|rxp}USH)=`fWA! D (1Tbk*&W>v>ӄĞ|<Ϟ- a\?p{ˇK-hT"K@A|"//×(K.ĪZYFqOjD0*REs!FHTq.@Ԃ%ëzF5ZOe$̴(=fF#vn* ճ!/M#K#{+#|ȁIykJAHJ`6|U:()q%{GscE,~x>4U%cp d*FB?'UB}H2a-tPϤd;zB,1$LSWpE>duO7]IhLx3l*X>CRY?yOŝV \/4Ywу Q9q  i.4߲7<6T&2 ;Nr޺-A^]5eD2(JX]Ywċ&\.@̩ ?oqgl<+~UxC`^{Y.xlӋ{E~qKg_JrUZ],a*4Qbם{|o>˯>u-OҭW`5\_a$;#GC/^W|w㸭(yR.1!dIrD("mm^Ww.Gdȫ;9ftZl/Yo_-Oכ3oFw'?w}=]豹clrqpTrɊ-jMtxP[VݣBkF5xƧ{+>ߐ̘J,\F` Yo2ڤx a%5^N +!xvk\"2EC% (TP]v$}H0G*(П/h`ӮUXE-"0h D!$cL0lґx@)nr*i u}at9M"qA .#FYzxs+qP P +Lٸs] tQ+e$z<MV!WAw VZЂB2VYs y,&GYK ^Dt!jTnxk6& DHɭM>'̔[%Ћhq!svږS 7 7T( R=!,RRM$Aw_zJ#E=^ G2%e]~Vcz+ćp6 6C D Cҕj,IX(ȩ`=i*Mrô؋'3'Σ]܈ޒi~U&!W*dw{ .DߚUֶ'Vg :`6Z-h ,-t DҺ7_!vdE.c[VJ:X1#2SZ!.&Vbd"k_d*%q!JGdqe =2W "5A1H%Bm0h d)fBa%˭Q/p 5zfnSD#iNq08أ(BpfYʞ[}9=qYyB91ڦG%/OJ'DpJȘBޕ:9lI3?v4bcDv wBPDxEc݌H1ÊLz7KjPv _ w:"bͯk7h1󱛷 ٛDC1v"Ok?V6}7@Eܕ !퀝)y{w, L0 Wf9Z\۬3@uX4 g9+`==\AG/O|qajy<.DzCZl]o7JIa~{ (."| 1lK{1uO`߫݇fz}Zbꁎ_/ubv:_i>C31K"K" 7fzc^/vNwEvٮW{OAv/֧\|ܜ">t/~wp4,M/oV7_v^_?nqs&ճfFh=G-cݦf4idk{I}|XIR:λtY{I{jv{|?ONjh5-~+_"[4!]o>fsjZ:,dҨqxPQs Rk"${u;5oꝈ"KًSD i~$KZvb/A;Ā,0>αUbe $ 2 . %E#bSɂ 6DY.E;qZ.-nffaH0Щ' w7N!3Et:XPL):O.=rX=gjZ!ZnP 2VYwzui=D1F^G䩃lh`ѾtU;8yǒuܠ{!乀A{w*Nr=ڗcr`y3-pf~4+"LT Ztc tXŐ*!>Ρ\Q\A#bzY``X3>@Zd" I FH?Z$31gb@|`>xC~>cyI:U"#y)W+\Wža+SWqv"8?.{0H\.w>:VnZ0e%|%_U$MV9gEj['nBiM'iͼlZU WY1W$Ň+h' 9Ŭ6҈rU1V$z;XQVrŌ62Y@b]χv."ҧSө.m攁 ̡uh* ĊIӓV`0ߎJYn X ؾ{O;CIWLFe dƥCڇ`ڐfD݇ .]+p"n(kU5ۮ(4+Pc Ae@Ji|iv}!Hc>4h6kDSh, _ #a&-T=B% iuGeKb?"P$6! Q!lOQ좣(t q:]Y Gһ!15M!~ LMspYGeV_vWIgE 3DO%㹷zo;@ϯ&СO$]VK#<^t!=n&Gc*7$<Eya\q\e0&Gx" ‡MrkI&oOF鉺B > /ՓYAyH 8#[nvvew@K iqb̓"cSA} KO $~Ttf)SmJss ̋?DP)KSj} &zIM"A:K{B֡ BR׮/  @'fمJ ] 6z(`3]^jX DZxU[ #߯Dr9H: qLd7H+kS*>܎W+oŵUIqA,6|>:wVH9Ktlٌ2.o30t7H.zK}/ 4W-#XHo| ULP $&Q) 3:yP.ISWֻdI|_r=?u2Dk8"43M4k@v#Df͋H1WaBa˗s(R:@7؟ :W3[Eysq~UlYE4tv8C߻H's !KLZח.{f=vqBny#WiYU<.cYM,9r @b@}EKyH^O ݍ#:[J6XeK c@cKLS%AFh|G/5QP rV0Q8] ]Oo(wE$8pDЊ9pS}6|㝌.JD` cne:H.y~ H:75n(r! =@W 4y4tkRJ2z;RnN/ˀ@_mL[2dx=tqH_w+ӾG4-1 w!Q(iHgPA1D @2v #kR~`.G53kֿl۱#7 DSQ.r98~F[Wd^` '*L^Ng*Ef"ޘ,/| R ^4b[脮 TzOXĒC*ߨ0x9jAuրN[m_Oԗ}JkބCkKM0&xjƢ|  DZNIWe0yɗF/) Ɍߛo.}6-ʳaN8uϝA@sw*(ͦjb"Lm1HHX L(h ȴm`˅!Țf޽2P2pz!f^9^C0O^7O'ۂ/ep8TpՆfeԜyßQF~F-Gp^igl)Hަ}`n0!&,K,ˆ!$`7.4bӁiy]urlP?% *K}B;ɦ0!sUU\.ZLTI 4ۊe"jNCw(xc2r &NRm)Ж@SJ@[Q0b6c# t5A~1BK*GEl3v1GCT 8cES\lU!g E)ء@v0 4TUd"XC(oDa(܅@7B̎!aBh?9 Ҷ}Owg| b0wg4fGH:1ZtU-Z<<:D]2U-˶BKµ[ՌEZNJxG7"*Y]cSDE%_4RM$L6avp69)Yf7gjw9dst`>qpl#_)bg`:T|`1+"QhcQ,bu(1AX3`"0"3l`G}vyȏX@e){N8LjwC3>stream H͎g7şweWٰǒP4$R4A;ۃ4ݰbzq]lk4sl{Ųc5lk>;0޳=}yokt~7-f[n)~cs&G1i!{vX-D9o, '(k]#V^a5Z 5{FÑog.O|Y|sMD\sW;b>ӧ9 "\A66ם܀۪n*l,Z 3r~a5.6k9lbX%uRr[0ER^ƲG%go"(E"%~s]eMe:˸ j=ӧͷvUN4rI=h6l'59÷Eqϙ@q'/TIK. ~{"?x{Ezr/cgڞԎm6΅?E-B~w*L* E\57w}.k4_#SXXhoYxRl(H>9xp OPVPAh;庹83 AO' FACJ Bw^+Mqƥ`WVBM1tċ_j>bA|ѱbmLO9i*ƜgskqD1>*XG  D1i5M#>:~˿oiW믿2bWu\,Nkd3m*J׸DA`|Ԉ@k3XKߛ eG=)$)3jf W"Tnʑs."]:+ޥJنCy$x, Z<#P~DjU!LÔ|hh. 5OLOBi5 Dp(U!&v9!+;eU:mSWUn9cDT PK\yC0qвܚx':~HY Ѷ.SW',~`v.=$sHlk"8"j5^w#^/A1t ѐ14ex\8|P룼F+feSQHГ~ E}O݇ở~~Gх?y}W_{?;a?~ |%5Pf#\["'}O bs_甌R Kˀ:5N~e F Ut4QL6| *q-d|z\C*a( h OJ89eUYmvH3.PI5MXْird|5м4mtO0nkD :e2C t 0BU2wN&{!Eå3^JH+({R;43(o%NX9 )}oU+G'f.D& 5~҂ Ԩ. ]Qa ||0sRG).f&(|AO[ B pa3K6\x0USR-?6'.szgƊ_d+wK6 AЉ-@jʯ;"̝mTAcr_|+va4 ґux)tg$fE"!䓢JG?P`W3,Pގ{4^5!G?cFY~ڂ^LF3CͽҖFsUAK^JJaÊyk -̟Gi>:-Oїż?CoB(Շw2AL^|Erm<켔0.LS?2S.40[Q=b ÝG#u_&Y1y@ +oX~z&hs{⽛͑ 1% 9f]¡ "Ka$L|:?iFILڼN3p<D՛/תMz/[q䭆Щq}ٍ2KЁk3z5Z_ Ȋڢk1-Tuɚ8}K|64êF$T(%-73$ =]%u5nXPDЇ$lȮ֣2tRWemCkJY&[fGѱBFG냏+(&P 4F$u m<# }y6(G]pR#9 Ԍ 0!$cS#|yNrb+ 6ejX+t|cPw1St[FldUzI C +5 0dqF}*R(7K$K6Xv=3UW**BcByJꐠ[ njdnq;Myy3gw:;L+2`#tx馤jJgW愮#6sbsMn L© 4Yd%$+bs輄2ʜF trJsn /R'i ҁOyhG4ԴD^P\^TiQ\LOgE|*+ֈ >%{( ԝ&@e4I~`ɟCBsCfVCy,{I<^0Jɓ)$-Dj) &ةer *6Ў`<*a#.˕Ir IsDqnTcNAcqbaO1Ow'>X;#8@j3@ʶj@A)uRTOy$βT&Hzd o2絳:p2QƶI HgM0(rP`䟈Cy,*[딙_tyG ?7`M RlP "K&֠]ϳҘ{*z^"S+boNc>A9i}Rl#V9# t\K3HJ 4&cqQQDhq^(Dnu Z^DD%OVQe7v?яͩymvl;[AI#YD8={D|P) T1;\jDndlJ{٧Hb9p,J|z)$,Lة,tW+tze})wh[xa`.8\;YYw 6V0W$UKWʽgubp;"l~5TR&9IjJ@*u({` iS2R{d C{ ТqdJE1Qzxj<٠zxD5Xg c(7cmGĤOjtKZweDT#TAo*IԈtHb\<K{80pwe# 30HOU.?[%Gc%Gd+R*xGA핛ǃ88_# >g'# 5;QdSstrRD,u@ԅĶ?R : `PڛWhqXբrD;ʹFvZY0zwi\vDn@}ɫc4m?(:MI3oj c{b͵[iѕlL@1oc5QR "|46u6 J.>f ŶM6Fpn{~[[T &-ç_ EDu7I̱<0 U4NTI|u8?(&f / n(3Q|G4k+-M!yLIR˩/~2B ^ e: 8 N$w֭hJ lawĘdDH#u/h ȹ숻FN1\ՎbuF:QgL0s~1>(W j!Z@^)\XMֈDpN2皃K@ +CuV✇iB$Z;wCuݥT/n5 o$N"4HcÁk![ u_LvwI?F5u-_r(c@WQRU29f2 hPoN/vc;4ҭ x"@Ja@}PT|vאcQʡw2 ;PK-cBXgy]8jf5mbBKUatdGkvڲ Fαb,M%ZjK}6_^3qi߁} q^1Eƃ5؍j.w|۟}~ǧ~ `~<}Wß~𭱟?!/Z(=_}~o?|믁'" ?:hP^FE4JռDp2<Xr@CFt`147%ݣXI"}iSC~bb ҎYh)C|t0ݭ^ 4?͸ΒkUJw}Ĩ !&LUvl چ6beGAHGzkP?-q}8 CY_x*ACMթ bz i>P WDՐaV 'H>X_k5x9&ǀ(biŽ1jY4)XXHf%fՃ`i"H6&5{׬%.)Df+߄}2/o@"B=j_e Cd0 BIJdV}Å|6iQl&PN@e3Ϸ(:#I Qw@zh6m2 E'Ƴkl2|UK'G c (TռWXx-_`4*S蛢zS,8#&pIj"{!|2Y?ye\xi!x]DUam/$ٵ[+x{=z> VXȋ,؋`ٚ`fĸp$%~'\`WV'2cAt~|-YQs@CB^4 [f+I755'h;>QTa4}C +-t79ﴐ_VQoUuEف:;mo P5}%b<'P3j1K&c:0&I[m Zױj;e9q$t6Sn iƔ'g2'O֓ZOn%z ;"zڶ"Xxq"ܓD=+Pl3D=."zģ%AuK EbFKXYY:  q`'<0*Gm}k !! V>:9I67oR!'\ k#EV}`'*eԩMv`[Z: wFma8Zρʓߣ+g:? >yn yެx/("^!vj^">AV jv*t~1Gip˃ꖏ'!^+D6u;1j D/O {{f[ Io(ha$ ) (Jp!RQc#8=?9V̰(V#aʨeUu$s/"e 9)SCqY䍒Np@tM ]U쉢>bJ ?yB1 #@Ԗ[ؕtk4p]3=g隭2A HK}=H-WƱ`T cDSJڂJu8~Hs\J_*n(l|(cj$2}(iF= O;V1aBL#z15,"voX-c< H"t"#݁j/Wuȑ(h%P4 yRt?ՙbAwnĴŜܰ(`]le4RwoDZDv"tNވ6E9 oG EC@|jfW64"s1n=RPi!пIqt`F:zF'iFRq1Ќc#?gؠ0Dd|J\3Y6#жfBnyvƭע\ּ6ºPxIoxu]\i}gÜP尩C |THl (@'IׇFw?9 8v΅ц!(}+Z_)Na%>4H_9uai[\U΃_: *ƠcAA`rcaF#O>D*B%K$]8`:?"k8yr/91%"0y:cmdhmRtHennNPd|6e[JX4MW4({ċ.b>ogQd@b+`SE Ayp9~A U{}9ONrv6Afp'3=9`ffG!(X00Go <'lu %b"ԍR-i/۹ۼKDMP[B(ohܨlwT5ƍhv8ʹ@o=1)lxČ^v=vE+sD+'A(,vZfT9k;ޝ鮮z?v/#$LmXp5Mbq: Ʀf\; &UzWLV; X4{qǴ;@ts}qlWgetmKe[bJ._ J.&hVWL]ͺ6#fY3 Ъ*FeOb:}&㳜ykؙقdoX戻`:T4_iOTMȫvB tC A066 ҁn??s=j*X~6gwc1R2Plw< ױ!۬VMa Qae9 `*NjɀԡJ!:M# ZPdd8$33c ne/K|i~Iɲ%@@OQDu=NH&P2Rf3U ˭`⥙ $svp%n)JwrjY6('<;$-f il hc1Np˚YdEeIfX{$\͠Ifdh1d 3pc۰x! *oͨᅦ<P,U<;4*EC iD`gjn}8RN')1d525Z^D#>4H4l+k,m+x}#78A_ xlQ9}Efi  B1f=Ȇ `p㢻 "A$Alo0ȎvS<][**PLr }R 4)+`@T'bs{scXMDZ|I9)8Hn=|[AHq`_o;@( j y}rxQMZEa1A=q,FY]JƗdVhC |Im;$K*+ۉ]L1hE#13*}p&;PE(rykw#f !Ad/fNW= j59r,q7K}D>@YPzǜ^_~fMQy$_; d5C`n, hbcY1ZÐ89vаc9èU=9F{8< ˹| Rm|ɞ >ӢIے̨*,Uv\#H\'_"8x@0b|xNs$渮rn nҮ96FPi1 _s(90Ӄr..[wom^\+籔2Êw޵M6-{ &S#)(7Ϗsk'9&3|$ci)Nϯ[r -}#ueSU'q HGdFs *|r 1W4ܼ&ƠZʬs eH5.AMu-9c*ڢMd?Lg5_B)Ϲ(1f^&;=[ J :|^z8b-4 N93'3 p];∘stx5.$X]PczK^I3hҌ܈!4F9w4~Gޔ8s0 UsAn",wTF7,5}PBv + W&;Z,-$7: *&,lydVAD[na%.>?^(vg`!tA6Fsmj޿X}-]e(:0Y&G8)_7dz"z֓ThmQNcEhG2(BnLR%L)>PF$W 5b\݂;.CMa"\`TG9( (I’  `VX]"n9g-r6vZuLΦ~F+*0% Tؔ;xD-E"q0GG)]bUl\1S.&'|÷o_=/ox׀=%>Wy߷g_ի?/_[?BUS/k~۳/?w~ûo޿y ^X|_}^}ksui{>>Oj<2:?";zstQ NP3($ tg2 /b`JF{4@QHBfii- ďd*Bx : Kq+ gQ+2dArE ͪ؄-28H}e2 ~5plF9 G(Z`̐+02&j }Pjd֗?]QȂ':dap? ÓKNYţ3r %b[Yn!Xv&hEMՁCMʑ)t8zk$ǺYCxd9rP*:A=wfJՒٛv ?T*^CR?> )N]XAs BnX>~٦)H IsCȑF!aP$hq/6AE="Kt$m4kt =m]Ίt.9 cal3 hl 9O/O:d;qwwg9mk #%oX' ۙ #'#i ^0-4G^XޗN5&¦\!g *&ć.T$&>Mfh%cqߚ-t"u@NLUdV0"u MĸA_r`⧶>:k`.Z=:|mֲ"9V4&"#d-ެ!?!Η.bG$T Us&` >峊cJ(Cj` ͤ+nÛGhغ)dp1Q03 GՒvJ SiDBtzTDB0+@R`Re!e>i@aZ p@KU^12Y;AEX2Ȩ뜅\f샔|)\z IWa V [V Yᘂgm܆E3,OIbu ʶf> #<|3`"h4ϳ*17Xz(vb0:HM3<Z!i 3Iu- d0 yZ$ufKq27MŤ!Q)$ϼ>-A0bzsJgoNK\k P3x"B8FvGJn7 Uy\PN.x"uzl"PlwOE*!^w*jBhg_1^d~ghG-x yxAM$8? w z?M {} $`㤰gd@F0 _V[y=j; D 2@v]NpE963}ߠרPkrbLNJ>DYlx[pT܄w^Wј ̼&)VDo5I1=9j# #g ϙt&܏bg,v8];WEI 6;:^3CR8/Ob)+z( !@U_ۑEqhuSF,|l̢JET۷KfM\O:Q9o.:ec̳h` `X3@4Tbv l4aE|މ ӣ;%gajE+j3`+Ƈ^?i#YP"t81VAm@"(ż࢐bvA6DD0 A&(GCAOEUvKYuI+3w_NcHCߑ?1b˦Jpb,:EhAA톘ɕ0(VLqqP/ Vd\rN"PS/BNk 1Y% 4x.Jz=&$i1)^<3jX1曟i#Iu]=tL{gȈfz}K|V{b6tEy0ѝ!YEqENѮ-%5W5SOQR%#>|e^)bmߧg/8[5S7gs ׆6"\@ iJ:_~,(:*f )HViQ# E8){wJy `!Q@e0BI۝by=[HH)O3Ua-Anu닕><~glȃ^{ԋV Z[+`k@$PCAY9K9+A)``^[m+\g hA K_2 VsUbXT+8KgW(AŻr 5D[W/]ZY0¤d!Md%gdFT~jnut4\yp;V6(ÞI.-:ochkq _'+}b6?hEې.3p\iҼ%h0t`L3t7 ŢyESZفƆQ"$!$IT# 3L|ԘBn_ft^ FpEmqHyMwYeXDꏝ&NarɈ.@kQRܟBeS7r.0F{%7|H0UԠ>Yc }jGUrp-C0?b.WPB4y[f@9{bhNUq_F`+b#8/ .&L:L x/57>kD:Kɡ{Lte`V r*A#k*L@0d3Rd2Ý5%s;:4ЯB qp&-R,70 rq&kF1$~z*閊M(G9do{m&w$[ZK )y%mb3p,=.>ּ5x gī՘hah}3QXH*k~Sc͠_yo+Ge^whS e&  Bπɸ{0YT"rɾGgٶ܏GJ@9@ooUN2}0#vuG@-Sߥzp0F] ڲ)h$ uuF!@޲ܬ;SDx.i5op5i BM.Et Ώ*SeFcdFmQXu U"AYaBNwP-t^Ōݙ2x.ݲ+d9=dtXqF:Ѥ[2B2zs 0&!ժ[ƈO)Cb&*TLwQvn#!x@0;=7IB3M*53x:=)*UCa2a jAQJK=5gG:%j߆hNB`w:iTŪj@b1qNcN<M(xU6Ƣ06CF6mY7X<0Y| TJj~+6JC2>3TpH@Xs-S3Mտel`GUYp6tN4=ܗ `K" 5ĆZ[c4'v;Iy"]X5 xt3UѴ3bv{lɂK3TM[O2y?d3>ymmK)VPxRjp żHNł־~G1o uPj)uGfq˜I +Ush ˈMauF^Ez0-c tIc#o Z& N HKYUce ZJ3" D#qc$p fuT_ q!!ks fK?s4A"Mk @Aj>N*,XAƍ: Of>+!ε@I5n""*+&-a =D#]`Xj YpڂjrIwlc#!ʽHBq|P.nR}b^Gow  s彡$`R>?,kjЂ#t/T:POO_olW߻-K5$\$w2׿E!c4*7:;8i4iZ^g(]Ů魶"* oFN6>dsWnd%)t})b7MiN`O S cYR#}oDj$c!EYۋZGVyڶPs~"XV &P /qImI }_|F Q6@ ɐX1K,$u؞R=t5i.}^fd@SmW!Z+*(,GX+v#x^5sPr>5hn8'o"oxNjR"y#r!l׭'hp4R|KͣQ& U"E:NIY@Ƣ"3`0drY>D!?KR'+xɴ_c.֠+dmWK\qD?t1 VgY𭃖c1UAd܋-l҆9d(-YBTsw"RlYaG<\fW.'r0( ?cD~b.{1 F_٨FYYDY}498 ȌEe`A/36h$ңfq7lAhD+ԣYz]LLgP:<}":Ih`P1?'y1Lf]tCz!$BS TؓY/9 8_fcfP%C˰ v iqK7~O/?~~L_7_|w~ˏ~ȿ_ȿ& Fʈ8Rܨh͢"LeXg|lL֮c@X;w|YLDO,d̅ca]HُEen i04Ȕ% ![bN3tf(D?}5\,5yyuCU1"fӦރhbEG-y5z^/*Ҙ^ZEz$]@?*6,1.qR*YCفh51q gba*Xhv3<\*c\phK}v2Y[69%&1Q$ET5 U#pR샀!kib^cR%ET*D EQ9sl0^F"Lw\moD LDD询-ק=i bALKyQ4 y x f3ӊ q%}{)~tңx|-2P-Z:rm?Q@2j#2j(E[PȞ}eݞ#Yq0ؿaPIL @#Sp}ޡ9hYS{=y :QQ7 ]<$"!/ Y-E'^O B)-tm)ԌԴD`Hf 5,V9Iw/Gx=*9۔$kru^8I,L,'eiG}Rsk @vS[ p dL>ziJP7HMI F4-!M͈&_"b 9(]~Q0^D-yM/P4{ʜOcD:`vIiX>+1LJ+ЃMMl TC&DJE{- Ň%3F}3#R%D'a,PW13Bcl i}3o/Z?-[Ǒaf\z7H M:#yqT`]y1o"hM5PXSR2u*ǩ >m'7ָr0n^-@Y=QqOx %V#I {QYB Z].jyN"CM)J0"um8i@FPypV2fZBpD?6h \0;GMHk@ꫜT~k,4g:"$2֢}ung@2.,)"zE0+wfh}{ "8 _)x6s6ʝ?& jK,xX]nZ3b9B&,;\ c!8⼃Sn1UjRLjvQ 0xK`@COEjk僻M@Cʗah؟YPX k(6y K e$@vFȜN+ToTV/"Ri[@eh[lH K 2tJmF i3o!b J\M=pZ rfxൔ͍'C >>p+,JvJa]&G6t,8& /ҥ' . -WGF 8_dFpӥ3j4R<. }ڗntCDwmW!!r@6o|yɻAƢn"ͮIYÿp9' ta#4Lz47z@ߖ5(3%q$H[">;yAP|bc扸P cOeYLPEQc4] PY}l}/#jNo0~B @0I:\p.,6 f.a@.UaeY'{bg*CP^ǁ=(GtruV%#B:KS>62V (ea>h }F M|cYJW Hf@;vZNMS]\@)7,nb] Bc,tՅjx^yS KmӘMU JcN:)V*PR]] "p/ /tXVJT%w.eru/i>VFnluz- Vi[baxtCSIǏVl~Xhe Pd65ҵdž`sꯪI]j,>]XӾPD`D)ϋc#=-!uߏ23#%GcJx)c>n}SFC9oi>MJ v xvj*562I 1H3KHY=,hw8 b%jBw+F[-%tE x:K`#ݒ#ϖݑUBA5n}&t|ZlV~+*D mQpHOW/HszI4`tVNdd[~.shu2WrlJ(P ýو&qpR `%?G持+2eݟi˖Wr Oh+'QҬ3hr)f_~9QQvoy3O#k*3D骈g`-I#ϴ )ۺ(E0ʝ"v!8+U4C<#(!SBJvk< {0L5h8"}u *  03 2k]'s5,p\pj0rG-lИ92DY#4| iFD+-= ! h&{Xb0) jI#FhzFip3#2}(~ k3|Z%4db\HUˮsӗvct9F^CK1HaW"<ǼD'uŖY}a6/2B ڜ#j]EB `d=H+LH%8d{i S;=" @<#UƥDž'O;ٲdȶHhĿD `f+22"ޥ9~*ȉԢ:dp`;Db*Yj:Lq4:׌ďM|\6. &U-L5>MfHJU 5wlkF[?VMfdx;O>st6'a U"&)z~>q1`CVy 8Y;v*+CL3xtSP8S9[zjP%ض3z6BV(D-hXDo[ؽJ{EQ- UtHZM1LՎO;&0COƀB(D։eƐ,"6!m{Esmx=3.Ӑ@,#DދA268-)A9KB(q4؟+]ݭڀ}zs*ѠyMLSZG9¨+/)'v i!۴Y5u߆R S?sHi9o4B-|I4)r9Sv9J /v\g_R0/ɭʊkַ8/QÂ҃+$ ;BRY>PAިG0)mԋ!oY*7Uv:)⋂b%,wv,F]m*gǙqvY/s1Ua| -j,lKENa_WxGN!JO\}g{_!O+-??|sˏ(mlP"J:g_Iu ,U XCܵp<Rq ?BqO@gXid/'mHRFǴvF8 -A|ܔ6:w 7-Q-_J'9edP<{jq 'U3 Wpɉs)nݯ+-.{RE@yr@|T;M0X|AplhMC_}+0 ɕ`/we 7 F^YY͹#vN4 0Ej 6"#Hh ̮ :wdФ^3kdѷ9UEG#!3k$= ;tK"|mQMJỤ d+ՙ5H¾3hp\BqL-VYNdycxO f/ظu2-aY:ol$v9;%lV"eYC`F([ peEF[(X;v"-?wcgdS3Tu|q2 DBƄ%)t$sm@HZLGVj:׋NqIŞNS"9l=d0  ]UsW PU5ę}3x3ƼH֚B lUvk֛r:|XB>YGPڜ)ICTqM u^dnF@d.@B<U2d,yh/`ȸγ,X|tn`|*Pb:1o38R^Ɔ%ka/0;q?ŝx~wA vd[B(g R_V>f}vBӬnʫ #8ț+^r /@+Ij@H3R´@/L&R1EP9, aԲb1)+>Qwf{b}!$tZل-mf% b#9F0BY k} #A1<3Gvda=Fܧ^W i()ٔe~Q(oA ~gՑR FfI((sK 3PqI2 GPUp6njLhӰ%@ endstream endobj 40 0 obj <>stream HlMk G9^!742?_ ޳{Bbe˞nv5دk},ՄmB+z s87 b g< uk%_i#"i}(&[bjID_i/,2o19݃\t;m>d,72;vm!٦8CwOZSBYj5Teԫ\ .rBP`!eܴ)P ׆Pt;q>:qB6j !ܖ{[S 5ǾgpFme#ZTLl/USE%7 Pw%᷽6b~35%jy.17MiST: D4&=ce ?[ҵXlN{_R(M#S5Gh|IE+);#N>^b9TAo9SIq{\oN"T]A3pyA E?t)uF^WSz4V>fAvNyߠb}5:I8o 1KV. 6N*oIQ!e`953t;R0ѫWBCPkC藯ghs5 D` \f, AA.f Qj._D̏SX%Y,dSK_ n9z!:Ԥjה{pi5\I \ dfs:hk?ނM ++"$X_- rI!. Bs]`ܙrQ(mhPx#@c1vkd6;BM." Fk1I" F;~!C ?OԦkS$IΥvCi z3Cˡ@y F|: Φv$@FPО#]q%#p3iioY]Tu~+ J5krceUE !-j :oDŔraYR'HwOsm~X?-=a5_M45^NgC*-lSeoI";hC+"b 2 ےBbA( q2Q'ZS}o J& WJ7`Ow1=/MR•D6փf"nœϰ t#)2'I(? 4.ju,IJAoĝ}ddXtqPW/uiBd+_@B&y)!6 }KRS-4YJ%\4PY~G!wZ[>}yY#͋9m륩6yca׻JڔW JV/0 E^PtZ6!D} P*@Zz~6:< M'IXV] j>r! V7r) l ȄB0JP'2%2t@ӏg>9k>OԄJk{z{r`݇j]g?bn5N-BDJpѰsIm!1R|#RTQ'+uf4QM%‧hQEf~Zd,OBݍs:@_eu ׯN«GA H)=*zV20GsD:;8d( dv|E!oq@2\/sȏ9t~[eTVb8ֽeS)Vlά셐CeQH2RmK ^0|e&O}cUfRw/d晀s29D4/}lG"Mz8=qԝԿg]8ͨ$U[$X9 ȝ?_4˫${A|0y$)JiY]4*D$hLx 'yzq#*:U[G\:=}"@AʲYod6H0&ˆ u7"yxlx<,"9yHU}ނdYI7F́x@>T.8SѧӾa]O: txuGsp)c }g¼zCMג! [??&i4:&mLt2s5@ө@Ahv,# ?{Lx[ŜGG~Cіߣc FRUg_!TݾBr6<pX= "HU+YۀbpnNt9AOlQqҗHLV`N:ݖ뾍AjSb2uƒ`ho˫eiy#QbAP= tē_W` \b[ G }E&vjOuY (^'r5f66Dm8zf >\?M9y"k/e.@a@MNk-݄cF$O9$͹8VBwɀ*\n,V|S5a'63](ε 1$I Ҙ1EtZʡچx|-K;„Y-!{<#vR| ^LR'.-Gmx+B ( A<}&`Z>ltS5a 9j|qفEh 8/XT 1U+U2d۫UvpFP/3$^㐬8-t6XO zA)>w_Woaɯ`9=7o=yw7w+foO%zbI{ۓ϶wwܞ<ϯ_{O_ݿ%>=޼}O_w߿ 5ßcC$o4RF[G?@CۏkH>->W7e`C)%LAASS@NhCQf rA"%ۡ@Ј$Z7P_5Hݼ,i_Z y/." /Ư!@BK: >-j!' 9L ^Q(( }H.@b|WA!j 08$JGDGӁl~ x05]VgWT^#sIS"5E,8 ;gITS;>8~&ZDH՘Wu }tBJ=6v­@.֓s*s>&k|¨Ls5s'N.2i$߹=ooZ\ԓ9iB%Ce r3>gS,.n k\PMPUmW^h%ٺ>aƣI9zELJTo+"$&gPX;4t1}@@%kLX8q YcywP>QA8]PĆZ2)=T[Y .D,N`R>u\3QU8`RVCZ=E")cpsjpn2#3fD1u3:ߝviWNf ʧ4}jQf&ϓ*'k`IzJZg."XUkЉfuGQcW }р I[[sq#1bLWPa9r-B \)+ˀ\dځگ[ Hjit5CXà S/}N2֛lo$ u~;uX`X&KWB-`FHlh) TVb:P4҈tͩ[=U)㦒@6T gʏ.Gr^'hh_3;t]@)R%WU 3<-'UlTUAb7E }fkZ͌JE/q22ֲ҉I ,Ξ~]W"P/oʟoZ/wY8Ԙ.gmGG-fd t>`4 ymLT Kl.S-;$ }y}3@&9fP, Q @?+1i:yn䤎0B*%;] v Sa9eXq ,)gLT 146qIk=9~ ߅p}]4Pc iuZMTlQ-Llj tWpVo.M@" zx #|X`% "ɮ)ŠzcY(`Fp10%g]60 [j,ch-a(9\qJq<(~[8C5[K KɁ ^:x<N(379nT1xK7(:򃊠HfNQȺؐ>qaޖ$&40Tu>Nqd!a}&iP;wk'lV߈ҋQ5f ^{GmJ=HS0[ njLo蔕!sT}89܏(֡"\^ {@5ʓt/6Qin7iz,1CJh=7J'y[8XO-0vttS2SIRX2&5mk2Cma]DM˷hP3Q 0Ԟnqbv<;C=x.xax-56NWb0d^x!FQcjUn!$ug&49 `zN(d5`^MPlzs8X2dYi[4Zu1sU*J4ZѪ# )F¨Gj¢4qL#nۀSo Ėp(Eraۘd"oyhBۗO#M@D!QXG8# ~8[M5x|^)^0BVT?rKY^h- ]$FƒISnPF|&{J|V]kGR5 㵃GCti@;3!BŎ1s=frpQYN۔>8ě3$߶fs"ݬspfMw)TcRoCR ?E.be2Ƽ ]7?e@ ~am[޶YHxig-R!t ϾSGfYԔ IP5bKU|fO# qz`K:[AnG"S 2B%8C74o/Α=zL&Inq7/h0֌*1D*.`\#.wx0+L>!)J?h]7_6]4bFTFe)k d BGSa)jHLet" kJQҜRVXV@ +!S͒DL~}ncd!4$YLff4 ]cMҼMՎ \^4.$ 0ƷY[7Qhgu޸3fO(2vlu*̻1{t&N2Ŭ-ݥts`z kK)In|wbߎlF*ST5|ֲm5{Wd1[XI2BH;xMM\՛Mܥ4U" Jk VyUxgm(4 W@0 \Y(o}*Yn#ŻAGG&ln灆3Kn@# lWn$pfRϻ2×OPh1H!EI QVw8Ux]І1'M$Qi4|Ƞ꼺CPF1ć7A^'DƤ L!<,bT`'55CkAM/9+af¿?S^_GJݮDٕs&_26R)J^$$foE[M:M2g,SOf0RfPcmMu;4MH](lr!t%>= ֲ|yDONf!J['mPA1Ud#(-$0if%+0bF A~>ۍo\wȀnWXec$#=BF.z uoo,a8HǡZ` ,VCi1xBS;b]OJpWyYLqѣ'Kb -r5azG@z"q$2J:0 w} "=4o"*үLpp!N,27X@ hi]\ j8u35Y`! nѯKU\)cy*fLx] K՟usP pXuAQ^C*5Gg xfx ke(]L#o&@ls vina$EhP`>z[CJ kB4J~X]`4rp ^~ k@`{aMi- U )A02v(3bɘF~䘡ʝlWwNYΝPӬ)"i0dtfbN`b5>F;QDmwe}3\ϫ7MAGk%4 0f! lN%+ى!;Vo!):y{]]V2{:zu2xc''vloO=c@G=jx_4-]\}bBtBh-ܷKpEoGO#@`F(or$)2ؓ~Bda69Z0eg,&FRYd"4uYd$Ym4=O!+Y({YVV6Ν[$\DN+/D~zQ1597I^jba-+MKdxMKa0s!Rw2ZT 5x[3i us7J=v[0nU l1Ui 0o{ RS~}|C  xwڄ}t*DiJ!>2E2ᝆ Hw@5,(^PN1ȒdTٌ]c7Nf$l<|_wu5!5?Іu{pQF.Mǽf7q+IDAUJFp"{Tfn 4~2=8yQI8!U0ml JtK㐔pyfXy>=C6SW!,V~X`(D QV'#hebnUZh";~4$b +F'7;>Hk]К  K 7Wd~6>Yx7"]qrkYlM)?7aevйgn9hma We"#pr4 oa9Yʼ9C?csSb~36CHrb+wH fGԪ3Ed}](ޔ^rJd@j'NoԤ*0nR,tz}FWOsF.3'b7?Cf㆒6a2u!\کl*.)7ހƁ\ydRW3VM{i=Zl|CoFbCF H~ͣ1Ҍuo0c:HKA$/I KC58wЄ0{?_fxϷkX/mƹ elDpdz&BFcNNɎ7^0A'.RrVW;O(-^癌[xCW$BgW%7b)BCMTS2%595 KW9G1m#?I^q$ V@SJ f6(W Z1h-7Le vC6|DIR_2uJƛ_OSgO'y\lp1>dʘw %{opB78~:H XBKEPF$v:~q)KN/B>3(_3ve VCX`j0.7:s)V~7p17AYkw#t6"J 5Vt dQfp_&շUUysua r 숂F|bp6M[?VXfLU+6t Ls<=;Q*LPbWfҀdF4%\ W;tg /.#!! H"; |MQ¥q*&PRG" OgL؄;*-FiAg"nL@"|}EcWuu`%^gK|'TCۂ[5b^yJLSe&⟢N}Q-!@liuD q}փ& #0F1Mo{CN.t)m-7:+ϊVt1",D\g"=9zGqg"vy65Altܛt.:P҂ >hr˰6)7!&Zި%lRg[~?I;F+bg\N2Zc_:J]FζΈB1KEJX+N?Fa9[Q9P'dqR5r H]T@\-ݛ-3Ug\7_L3F iϞVp>yI^uby19kT"sfhe>i5\2Ť$C4MEá13d*Ox_!b牱:z&7*\~z0PUl^)} Z1S>~84y*jO /tc@&4ed-bϜpU(VIDզ_r#mKv m___ hň 7j7"#{ Z(e*BFP-0(SZàZtRmwxdP-M4+@MWFcx叮~Y BPb,-7-7e>,E"˶$) d5ž o˝rn˛̌VḺPrtQ:ޝ^C{p`N|ouYY3r>LbiyM#&I)ʉ7b T Y%%"40i 玻:JHE}LP47, Aau23˞uֿѼO&3:s KJ! |xz~{|츛eA |FBP0E:N~\hv,HU# q0bϣ5yva1|͋iy77H R7B3qNt2#È8<DŴ̀z忍ظ0 j{"May,}N1$JnB. Gм4VZ zvL2#ԝt5OzT:smO^?@u ?˥e3ӷIVY%,DVHĿ=9!ӗb۱0QǃɔYmWYuh|$Kll RZ' ?4%Jh-{^=&OA;qmS 2T4x@ft ۓ3rN,$) Yg*XMB v@yoԜdgr,[dȥdfdιvR t];8e3mzw_֣~M41d5y y: ?vgn:lѦ5nfIh#Hʇ<;5鱡3*?nP,)VB`һgUVdⶭoK-haơ5d>M6 p^Z =dĬrڳLo T/Ek\MQQBu˒TC3! gcunW&T&F#Ց޵4\55w"x*F[;.H8lEf#A ¥h2c~!J䎑Z1A:=N}2.:XG[ 7h AH A8JhloFABʭ>Ms n 1}bί 6)$]rrmHTrQ'esfgs 3ckkBgRYD牦ݘn4FiyNoT l!)ưlv~8?|2޿{?Ͼ7?~ko=/+-oƿ~/֟?_̟SZL\umYA2KyF*L*.CjrMF2A]Ut'+z< 8@MԨ5|GC+l8Kf/ B&Ua}@vWq([='JԽ) ڭ%n2eU[PL: #~i pC{'H?Cϛ3Z ËthqyAzmo<`jj@]DC]1I`g0ڵCc0|;"~8<<[%}yZ6T~oNB5߿a1=Ʈ@%ϖ XvDwdS쏖4 T\;Y|K@^dDWA(8^%ߺLAt&6JڜG ˡ/3YY\85?iF zd;0ObtpP(S\-ʛ4(Y3iKDn,-&1|^G4 9z89 zr@{[qh5yyVm  hvnL_184Ť7;Z[Vʇ6,mv_NtiiMp!5@?P%4,됚l0ހS4SW 8ڇʱ`&.ZY {~"c U:I VIm*4C@l1&-]ot7Bʲ,̢Kk̒Asd@X1-h]cЏm /;vjʂt`54͠s׬~3}L,*S_TCq ":@Qxd;a#dꕺOjSIn'P-K3A*e0ŰJc;<D btk ]M-#5M8|x< Vs<8>eZ[4RbH6* b06[r(=(8&<7`,pQ$D@f .P! 25V~)A&Gq}Um N1g7j?tK[7P>z0hj[xi U:u V\B/y bD}A3[zNa 5Q^wZw ]5}~{츞okWgy Y: f"`bp{ Sw}M?b0eH7pyn8!uGYeɅJ>Lr)okK!xϯIɤ-[$f!|YO23pn|Wmق6ZU πcJk.y8ۉY+0J%Cf('A֍ -gy9L:R]&(.Zr+X+ hLK0|bY+깗@4yO!t# \K$Ug?0d+W[wwr,v0:̢0ѕ_F-3RR%ZK 7 AVoSGcwR %Zj%AGqVR``N-˛N j,.INszToBq m.k~"+!V(viC3GhG]'(RoY|&MM:usN'9Æa]6:a{9h1#@_UQ fn(p{}NӐբ#K?$*n%ڃhP,'4Ko^S(SJRz % @# bּ  HnÝؗv#=z@`p A-c^ʉ^:AFRSOUU0e Nn wV߰q.`r^KA<_lUs3\|Q2o?ǜeV?0\0 +"PW5̸F*%(J6bi /x ǀ-3~X"!hqn[-zJ `;OK@An&5UY3G@,Elo|ʉҥ)AD 嘢v-Åױls*1^FەV4YR-7q)P\O9Ss3Le{jk=I^nG+]d߅(os #0_RKT%R*ZJ#=)t Q+LoťHq{܉g\4-l\UwA?y` R"Rj&X5e]6w!}i:GIӧ^Z>e@G(< hx ms-z [|KQj\J6i{q[v>l(.c)AYYإ_LAҫ2|Iz 0  ?L b8530q7)YwAhGg0ގ`X?e 5g"EXz A1{),ILvcdk6B@ nWʞG$:{k/=xf4*͝[H#ap:Ƭf);,Bv{ ^C|5Vdn(az:(WΣOx"@Aid ˌY$oU{R~GNEuk!7> >HPRȌG\|]K i ,_Wnd5 ˴ɻ'Z`#,s8@ʹ>QN̹],[Ejy}e\%t6DL#8h%k`=-ghyrd 7B(R iQN>}G`T-Ǯ3!͡k#Q aʼEˮ厴eTcR0.EePL:KʡŶ$Q8Ώyo_ݿ{çW|؍7_'ϟ?{Oݿ }?~?-(Rd1ſ/>OelO^?o=y_߿~o^߿|n~p m𿏟zm?o}]o?n+nEø뭪6NT7Lz.|m ehXqQD+k xwR69t\(GusH,H'\e0H͸ 8Hp!L&PLaTAESe$""zX;Y;98Ȧ1g0| "(H'ߦZ1X;AyP5 AQFZGK-dJf7!7c<@U|hy'7攕4/F>ebG~H\lBe s$Gl1a(H^dN *t %a!zWBBvQƅ*N]:O9ws CdЈ!®%|F(lb&rCa$n$&vh9Dhf9}2 \DAn7 2-ȖR|"i"GsZw I;:nꯣ'*?A3/ !q}D<&d5רqZtu34@&K3/!m44#ANxs-c̃mp `tə(¢$t_^(Թwg.>4""ү<ocAp\,ܰ H5,v%s{ g ˒պyLrvgj& {{mO`sWXof/ǃ*(>[C"xIĿ CbR#I#) (ɢi-tpȃq5z*IfOB':=;3oBU,ـ?{FpyfN#OT|/, >u'*)wwB`jM6 Th] 9<-hÖ"5l,9N؛wFM` N*;vGFPfR_9!z=|d givl9f #V5 LoZp0zH&6B|z5:G i:E` a )Ȱ*/":0((]G8wLqcXzz>lF9 TthZ ;EsԤ3@IA)Vp}9FMoSsD"<,NK`#WX7gfx,<'#'z ;"بwkIUPIm\'g$B <sRR=]zMQȇѫV<qnѵd/n/ZTZgByƊ> m@t#b![]E\a}5;HH,(`auoq=@생G$8k,6N<4N@a{{6Ż:wTwȕn<Qa:ERUT=\l;@<`hqt,ę԰sA)LN7l^L dj -kҿ;uS#(BJ}ӮX ҈;saN-w i;,X{'fɖYZR ';%ؙit&.@$}gr{ncirYై⭑|_4PuT{!hOZVzc 1:!<#C?x}DaFގ -=6h]b/{8m,C4a뒞mH6Kӵ9 -DCoRLO'& ep,(ل j}N9QhKqƪ`wG@Hca Y֞2mp ! ,A&(U84*SPH@Ko1so; nOƏ*w|\Z͎qX=NOHFDXgBVЯ\&Q uD4 'FI遨E D;RufUDEC ^N~ٌ굇st NqbO xHORuL@X`Qh:>AGv "!J XepPA9N h] RW7Z.~w8(Kq 0"²>*sv(&YzcblCLp)ga7A$æ5h-ߧ0 -d18E#,mo}P@=(}`vOH!3D0I#6 zHEevhQ+o\AuɹJ"QWkLM(bD@UJ+Vk_DpOVQ+^_;y.t4i"Q(SJ8lI&pd:.ǣA аh# "[ԏ"v NVIY]~vBNvWA;eP4 ap|Yx?O _yTʳ;Gl,Dlҙ  l&>}Eeꪯ*#ϰqAâg#MWD<3zև(UЉ+]d;-8YAn':hUMι0tO!N0/8&6F")]+mzGNWL @axDp$9Fdz:\>Q̥H/^в;RX8 Ȓz⤝Q\ei0z7y Q(PQ_A 86ȭ}@"4FLmL]dn0#' [ZGPEAcѥx-K>Y+9 QX&:y(E,=滙N̏%Ә қ$gȒ= "  ![+seA:(;z^3qHSQB06يRv4{Xv  : I\BStË8ƀ ٱp_gsTk"HJ$ d-h>Z58Ivh{M3% w)BWcFr5HApyY~]0XiB3+ i:Úr[-3R{qn,Mb(CT$EPͮ3 zv <[= DQj+-QL^lSkU%Hy:61ocb'{%|4 k'usH4A->ZTNʱ@ƌIxBo? R.'AtCΝm{M2 !0ou+b۠mR|{与6jhsq_52 ;ɒ.*?v( e\)q=RM$(noZ̥:6W^8> )4Dѥ-J&g 0Ge G Ep"~ ZT4<MNm${K]"4u`vPz\V db#cbI{HÌ'L%k[Ľ9pO#WdLq0S=xCP',vGtCe5z^Ȩ2CSbp7!zGH[WB`#NQI;Q%?h}j[dn2ᎍ$TzaI l+yѣ\m%ls}WI?g"DE2ɑ<e Z=topE46HvgoSCɷSsz Ւ%%8U ;D|%I(H0H;rG1B0:#vPOܣi2W5áL̾8a8lh\4kN@xE@IP7Q IFĠ:"6J  2BPms(:v MܰzCv "r2KS Ae3#ׂcqICkKPH`@dΏiIFtz866 ɍ^߳'w yFQJNOԯ1 ҃jhmDMB,!T~wD֞s vPgUH"C`2r-TkNtdn2w$9$ |C|S]%654Gs^,הw`~-A}-r8bt ?P$C3^7= GuTڔwrTˑϷbAP̳>hBD7;֗AXgqF*zX6=@1# 1A2z;x,)P&Zn#N4ޓ!1)^Ρ*"=NW0 ltM{/dO8gId<2;v#mִflAU%V;( 6b%R$L؝_.%t i7(+Ro^?/_]^)(ؑlOK_\,mREq,jErW1"@"JQs؈h詃_oeFW mIB9(TXZrl[' ǗZ(&kG*`b f2{ l~6 })DQP˹qkSU3~P(=E(+ςM/s>{^ˣy;lJ/CUXfEncPC5ߍ%+yf\CƔE^:h 6*HuP !ŝ|uC%Lp7# u= ̣: :$LŸJa+;1KwQ##ii\IYI.WW%j伾</ x endstream endobj 41 0 obj <>stream HK&5W{IK щ;0XB%5AT*= 2APd8'sjykw[®wOs;ZP3bf"|T i gd&,@ٽW旓9-Z0nyM!-{.Kƌ{կs=@ k߾V<=m&c< Z7.z΍9۽cMrX8]_Hֈ} $33ʆP&R`IEk "x:"tB݃F}7x}AZIuc~y+~nཌྷsS]qnX{4@X= 1BMݴ设!+;i7&{L'p{E՗;I|.:$19}4 U(y>Є[m@a7\l~4ơvRLgT0+%S8^MO>~JÖw7πTTei47]'^F=L3Ǥs; tHSa3FkF:>~jjI/aϗ|wWI}~}㧏oy?ga?5_+F 2pFiy}(# zb_6$u)S[},uAhC]e$(5f]SMw9mjN ;!bbCdhp_nF35;9McAi:ݎ]uVѺnF=ͺ xhIO!gۓ!(٘d W@} rjH2 i*c76Qr&$TĈiG4azF pLV&]](-Q ٌZ$+*b:'s`2`6LP,4۱[Y4 @ _ܓ^NDBѣܑ8dMHs@*A&){|/ش)7?a 5aP 3x * *-}CÀ@B(BkBeuȿP,`U a&ea"k AMQ֐lZAY#Hs6f5B@ڕʞ7 ZU=gXPOS8 +lOaP Nk0;KmAsZҙ?[qtuv( 4oS(>(*YvlBl4a jD ~״pM*P$P^0"7H"B4+v,:.T\R:-6`Ș?FiaU *U(v:LPƑ "qD=eՀ.:d/Ż 3O \)~o*!b d4spkNIMh r]zK!Ki1l9t ^ȱQX^7X)Dַ!v&9t/D#a ~&e<ۘ"l4_Ͽh ;5uvRzE"8RӥaH AD'Ղ"DəjHwoJ)f J7%Q_B H=@EVC ϳWg/2)YOH4GP%{g zR'd~]f5^er>MB}Ad)Ma`H ,M=c2~t3ȑT/']ohΕ|/g*u$F"&JL兮fT4һB+/:IB=,M;a^H k$h %GIY0՘9J* "hj頖z\=&(@!hi8Qn ]{bsDv=AS19vrb[?L>IĥGhZ Gf[a'gz|@ꥃ;*(@QWJm#':ZONתD=$T=k.³^aHBi2@1aP]V!~ `sڥ&[-VAЊ*hJyMDG0a@ lM@0OOJ{sSToGf4"qF'#zxuM;l=N~s Jԍ'o?B`]Ed%OZ l0UV#1[DҚVf~q?TznFjJza D@6v{=&䧫AiD~WO3ycQSH%VZjEY[-Lx4E56X)2bQO;VNVj/J.E/¥2HGkPB@K@?@ $@J 5aifOf|+L"9pNg^~^V0x֏ٹn -*3-UEk+'ͨE9(EAJF3R`V!*kuiX {:o55T#Z{ $u=#'PJ4UIu)O 6+մ<ѣX !",֏A^ /8KDhŠW7б)#hZ4;È`?y ֞=\Uvq$OݓiF0Eս=:>"y3@$ pX' R,|#x$jkZs?.%(G,7ꓫO /XЕmZsQ}ڜD6;\j~!3Ot((W^5?Gނx f"Z f'*@l-Uu z;VLD@(5`dppoG#vcÝ()pѷ3M leX_v9GmODbP':Ac'oxx-~bdG R"LjUUxҕ1WMk2H*\0\rW2M{qΙl"8Y !I=>,iV)OtD (wu/<$bNiZ=ODDk [nȏ9^WODNȧu͈aȷFKO6Fū} G)ֱݞ@R#;֡ 6>\8@|`^~h$PX jZ\ BXLIkm8Uyi WIĔZXhO(WXG­ uHL,GKqտR)dk!7Dq؎de`呂˚Jb/p [njCYRDcN .VI|*G-vubP*DxZʲ0{(( rl7Om;l2(\jZۮ.G[@LX_FrG! !XrG{T3ur2d b3/Q>L 4VPHrm]$r'OwN߇@tm.Yy.!+lpMSPljӚNmXJ"F{D!=g Xܓ3wР1cӀI>iˍsDtD{;JDȲ5 pǬ믘G+0 /"t]u}[Q̾y:+mSCf;b ; k!2Z^T?FE!hv b@ 0Ay~[ǜ"ՠpj!`q?tWI[.75B8CQ(4GJ7.LuV@VPSՔxJ_/8{r-Ӆ+|W˖si؉ Qp*S4ע)ӥcU:s5Fn_naVcA`"z2@PA{&uB- ЉStYUTp^/nLUDmQ(.;u*>0K&'N "n"rh{ˉ*#Q?+ ؈YNF:{O'#c[BptIl2bc$}u@ ҼQ-/] Ao?z(}-Q4PeY/MnU>ݿ?>g>",C0p@}vD<‰n4!{"EEE.W{h{}b8xwMr1K2"写R R0UǓ-'[Jw 92|ʤs30w1r[ݡլ2!Ll.at ~`-~ƐI >PML ]мq36N+ Ho"Om.%CYP&ns7I6efǫQ[R,輆VOЬW(uvv`rѲOlBs^x dU .(i2I;ω0g^楼)D15%Q*2sDЈ}"ڲܓ?SaL5m D6[{mmɌ|2GT)V%WspHpJ@tJ13E p`ne٥vJlNRPhrhop!#.xK^R;_)e/C#- hav/l4b/Wp_"LߏF%ѳ!|^.ve~=L"8[WW!CF $F %,)o}b ;sju]]HUjN1tR= gF'?F?9'Aav+ȓ$vۀOZvji%aH:ȅi u\c!xR#fkڔx(RPS3G yP УPԂ}z2vᨧ%2*I6N']zy`.CD9ȣPDnaSv5y_ȫ+f<(9'=FU f6emɛR;FS><J I(Ey}/ J(֓FU)/YՀF*"λ۝ZA ψ20OɗY iukQz=K#Bώ0]St(]:z:|QeKi%8ilC 9,M}]BpksF.7۳:6)-\T{%ˋ\$Jz`(+$6SE 5);҅q^}ɒ'm e/_KG23 OП5$doL{R mRl_=EVy+rl"QE^DX A1134^$ .G'kTh߰I "&ÔTJ}ʩ#z C2qc&8`q!ӾQڹ3O"+ ]JsahwǔS.oeũmhBLyޕA=JZC3e g|G^bwh?K)gɔVLH\Sm*lVhċP]8=?C1Ӆ>YMݥ'4;>BVM14xgPz*͔+i',KfNb 23]%kZe"egS)M&*TO 6 >6Z@LFE$u=H-r-Pl腹WM@܆}sg4Fd%Oaϋ:o}ûϏ/~ ۗo޼}wb| o_4Qy+_6_9;ki1Re"ߨM)?A V(gF)Xh`bfZxq=Y^يs=XQBNҗ@!"phMէ؀"4Q&hf+Q{f>J$a)κ (=]eWD$j% I왇<3z3V6K9ƈ" 2YwRxb NILWn{7wD=r@8c; %Dp&-25[xL)*B8hʡ 8 v2 h!kAC0!sDGR_5+QqA2i2@"`ġ܁_]R P :.t! '[ٺU_u#d?W9#PWn1h J CSi P+Z2>O=e2cVf'~ 1 NϜ Z s336LoZ 5vR)H-ˋnnR֙XT9(@*!ެ`fJo3r"ΠjeֱDѭpBX{}Nd2 ."n3-mu UM[orc96k7pby+B(8Ϗ$̑d|"αrM m ƿk&1?|dѡH}DfGĊǀࠝ)8O@N2gPpjpEQc0 vOQ5h0Պm^*;D Bope*I7}>$8?%;fݾCIL җ Y:o9*;F*Y` [f'4d@b]4N 8DE^dQ&v/˄~P:E[%x??`.Z@OB:92 &E| [Fo21Gge2mJ3i7b a)л+gf~도j8#]JxspZqkKŇ!wK gIƟЗ e4UBCp6%43EibKXԶ1gA٘lˆ8oI`)ݐ|wT'{>(ET*;'3ߩD >ye.C&4T!jYJ^H@@ Z{H,QL "B4ۭFY LFfZ '_e8VKzu `qCTq+t \`ԩSe,j';y>ȁҘ\*ԃ zLlD FA(8@rTg#}B}zn> - \s|Mk 4Q{ :W<,ΕdWt,ćM᝾ <18rWR:.Q"#YD뺇tC"5Ԍ,<##]LHT%#PIPb$0EU n$Zmɲ"A֧gS&Q͎5Q:X*No܃Ǐ~GA/}cjC@܊afF8L;~]L/ ]eR^@-sh'c_-1xh.AO6-h}up{)( aqu<b H i=Q 6ח]h\#\zlVy"x^!=Q& G0n@H`^ydq~_VC.ӼϲN^"_t`Z"Q A>to?A)x`(|!,%Df$|' Qs#[.D"o :6Wh kf\x=W̔X_'Ee* zkx%Ey:!= [n c`XP;:񝺝VÂ8ْ?v|RE<){9}ӳ />qr=|_HU#dzM (y҆_g\`SLvc]f ҉-}/x=\*OcA.m~Yb&hυD3i->6Nx/*N(,?4 `mMxt>$Fz~lۯc|LB|@bވoV_+ޛWs6~D+:/)@\A8 Û}k33b ?\aa D]Ҷ`Dszè_dN-T+r)Vؼ"cGR Ju9|(u&ctPb&p!j1Lt#DR8gC5f*+TN2Ʀ.Z#Xu_LEH*SGxV]T Eۙ( XkH1 Jogհ t iF(1vdpnR";0R)o(0lL8V^" sw bXg' lt.`(Ny{SidLDp5N/Nw={Epq{mÄ|Vr'yAH cn8Ԡq#W9|f(\r3B 0 &>fl\&k: <>'N4fHL՝=٩ZQ@]CDn*c*%tBރ7ZXsl\OD\_VoVβjmuzb,WRj AA"Aa9*DWبkr4>v%^( SZoE_JpF>sT6a8%wC~ $J7 %7{Y~6gޗщf`s6cv:~s0 #e#ux V̉R3A )@a?:d tE!_˭G{#W׵ lP$((<,Ac=kolI<w˹8c!z"tvc'=dz+hePTl }NZyاhdɋڿ-@D, -BW͉3ssb+ǙS򚃶D[r5lm ӣbvƊA9`ƹͭ|QTXńT(hq(7JTt.C}ڱuJhReaeY0@ L0E@68眝wbJ(w`Cd`ގUL F270gX6gۼ0#"!6/YPۅF]fKhp H9x@ e\l@DH*ajۍ 4h(̬ϾdgN /V0/1]YۥK=6& 2s(o].aWF",@0UgKur~B |:.?f|=XWm8uh]AB8v$JalDfWjNm%D#\aG-"szJK#xzBzOt#1 'R D=-g$DwcxI`i10q:/@-zT@1#=&"D)9hK3NhQnR$YƢlU[4  B83hN^g4םXzV.n yu Qj}Ş'u6@7& HI?uYR8ŷ(zbћ4ÍuR T&ԳA vR@W"EE yK`4+#QE+qx`r~dE>Bi#8kN%MjT@Mg@9YHc*%j6{$J_@&!y!2E:B,~,Nk}i,s)|Cu!@a,WG|۬j|FoQYўoAjW-Tˤ(fJ[N<}ZDZ]< ut): Ebc N#lIbUzZ{H`pTV% c ge7~TMb];~T?"zY7GDxs($wA@+Vl=cR"ZPwwA>A#w!׬Q3츠:`5rC8;+F-%< ( `IDiywf(c ql!,oT8QةGTvjJiXg1ES#)_]@}O%]gO0ln!Im!n(<6Ab9ԩb8lRtBQ^jH~s‰!h,r;*]jcNzOޗڊ g1m85զд5 fˢ$*i۝ [˯߭߿ mb:~N*m]޾n>4J/Д%?^TX$x8I/xx3!> V#qՔr#[=H a,d1(YmksF{բD2?i] ݿ2;h`(P-0/"|6pAعOs\ 7)@uYL+vvM[2sRx<;3NX"c*rϖFx;Cu o= !)Pk}ycL!±t,| 4,@0F5DEEHQiM{Z6a/])W"eΧʝPA-L[-KgJIO6Ia_;LY1UhJ3KO$c47ũMtI*a*W{ÆA& ^:Oqx/Znިl Qpyy@0Ef"DD@yT(x~fv#9QI֦ܣX:6Jؔr2pp'8&FjIs<4$A!ˣxLiFA@-ݓo:F2#4" # n\ Dh Z,`%YOW\ѱaٚD,D%QnB>fjlA(:?js`#FS(*u'|TcB}=Cj7 k{8kkN$ֱYv؁m%vOUz%/b-jp\ uE!=5݉G 5w$CAh6X2aPƶ]E x5i I֜`ڇe7Sgbaq8)R=6u}<{}YaPPQ ";&BQ-z}Ue$TR<lIS,^DdSKDqs#Ї/7ڊG=-d`Ek6> 1f)pqQRJz :E)dwFmDcq` rua<,5^y 'B)HL/"k~$0U?M1|OwD 9>4ʒeX;cdqQjR_FXZrxRwf&ˉt cik^SWC 4 M 2q\}r# O @F>жC+?l7P1bAjq7Nd63fkÖ&b;´QmhZ;B-ʾƪޕ}FsS i׹$1ДWu24%Ֆrzy8G+D ,bGF()0zVso.b408+Y*rqǠ׳ӔEd:Oжx >b )LtEi<aT'Qhh?MxQ16nf[F)\Т#d<Ŀ?N Y甋.ZDsiAby/6FL_SAŧm$^?V![bsZJQ}Yߞ @+^ {X (B7 㠂S% fEqf߈W-CZWa%W,z}똓{-׬\8չ8 %2$+cA#uKkF5`JEC۵ԥ\v ] Vi@ŧv\"NHDsUu8)4õš`%j6D G "(x{#ƨ:LtBJN@q Ǹt9MQ:7B4Gx_y=[w.z5M*yDow2#V~gno- }Zi3dy\l#3J<ECBhy}C.Doyota<-JbY1Qb8Q;1XCN˟Xwd,ib ɮK.KǠ qJzrbk* \j!4:F.}ױAG| Yʯ)X0֟S<Mkie˯q3fClL[N"gc)]ϴ%DsJu =S F~x:3Z eޱ[T<>{|#GAp(yBK?,G'6"*~k^C Aa:͐ʇmÓdDrEEW0@qAU1ah 礙sp^ֻ ?>/u絈2!ջb$)℧#`/>9H`u1R@;^+-Kh! FD\ )Ɣ^ֹ %ݲJQx3+0xZ9%băiI w( fvPm,NF' hs~ ΅ا"h myNAhc`HWO%R&Щt؆-2Ag|_b~h#Ɯ!Ӎ"jpdQ~?N&~=7E4w2<_zŒ: xēh S@0MdH?dnNkфw7;*Y"$A;e#VFTqst 2M ي0NBe }GtB`( % 5݀1XfFqgJ5Vl.QmF=n.~ws1OĤ"8>?-"<{C4㚾 4Ve 6MDgc=7 [6AXn|#bC> DX B bt _eQ)-- pZy5h(YL0Y Ϯq. =PG`LH#IĪ]{ ^A"r>@xuZOT8TM -؅ U[@Umj:'hɂ0d1> 5GLy_Q@ wewCRΧik n>D1xD98,(։sđ@Qͼu F|{:pYڦK(4OG(瑫x1z8˧g"F CeDTDΡ up[0̑@#p4V&a ^SpN'k+;NwhϘapPp_&<(+\kت<63qy 1Y!QƉXśAJM8(*QGW՜lu%-S#(ر:0='Ajh(5ow 5H)Xg;pk&2FQܜ$zj菽3ZG\Mӫy1Q79Srs7 kIOvPQ0 D(#~قۇn!^)|o$2{ #kF )\7?;fVg5x\I!+ XǸ|?f!^6*ha(Ά?a6%f(qSڛOxdKJEQ+b мnv s"nQ,!a}`e @NW 0xNX bV󣒹4ITv桽Ȝx)NcM_z8tFߠbl@*}[yg]Ņp qDB۽'" ~&hpJ+;R Ӎp7'%/'i;Ic"tfƄ=),(DO 3`R^#7#<1SPUA b,w5k:ICNjB$A_ݡY6sd&c3F $K>'yQ=(ıA+=}i^II׫^qb`jTqnϸn=˭EC9Y{5b{ Mfq&(d:ɩ=vPڢg(h8/#`4=%f` #?Wt)' dѮ7NEAgoGm[ {j&qv-.3`7[4QBv!dgvkF P =j>yaӝ~-^EBx7p:KYCj*[ʘ&$`ިp( W MsFN@\ ĽLV-2D 5ogfIY|Xn)g x VA@d1AkȩoP7,hHm& H(٘zcDwD!5ye/%4J@<I"/awJkɼ7~wH/o޽4&j^%IWD!j1r PH*k̨ Q0UL÷S>,+\R5hE0b&DEĺE.]gI 2P84®45'%" ?cGw(-c-8NUTB""ޯ+(UEዞ88_TҖu]I@X+0\2:;|k |J;/kL #kA=<+@Xa`H! .bS# CVKL1@CNBnWujȾsX  EֆMUQ5 (zӎq%{q8zmUi) w.U{$I)1 r9v .u47jFګ3CtQq{a 6 D0c NeZR?j|^`ϯN 81 `Oo߿˟?Rp$Q)_|Oͻw?O~PP~ǿo/Hr>B$0UtmNE>jxNj-sy=]ğI0Rxլ2!'n@W\ F-,z.P,M/YhU uBxyY o9:X/vS2Lshީ:S)N[B%uJԽ rX Tg d&!zY`P  v7Z-SM fެ3z65!&V&9xɛWf"yl09 cBE ]cNS +9\\Y5Ic8CeBL,L9AĪ^WFgw°'̼9l~f;~E٧ިjQ-3\U f:PX-ԉJg3kީ_D̟q~T"Tm2^\T<-Fle`eR!k<WXA0X긳i/%G@~Ǯ bH(8;cc^޼-;[͖Z1m-{ߘ$Ls2ihd @+b*ٷ6"Mi)@Q= iGw* )7ZD&0D&Zh@Yt^o{ψVŝ* Uפh|Fu7&yqiF\(r) 6v7¯NEDkr/y^ƽRj"{haă &/cd 3%JDfQQTȻ)5.q 8pQf`|pr"멽hpcvRdݬC)@M+y}2Kv b܅PY^&97J#fx^#ȼ%0|0s>]5ձF;V؜Ȉ)xЃ-dLZu'a-X;8"u`:bDHlyNsidHdreN0}S $I),&Ļ[PVɇ7gU6Sc\i;Cy3Y'_|B\h%nY3d:/*Ws/O;ðd!.#P%e`|OV@ąo~\wh;iN3OB^߮Ny{d=P$WO=`Rt0 2!W™t$%4H~_M\-99|pP /;@ QF.w4R9a(!"WV`,L!ZOFE)^E^ W ~Kإv@1@UONDw%6xMzTߛ5c='t^G'n#9ӭmt <$8Qy 6A}$$xG@ , GH:]EǭwJXI{.#vZQ(HY9 x;x.]Iͫ~"# qvh@n>Tmvt7rW'>DQeYSO$ʍdP%@4 lKfΝ?w,2ֈbR8TI I BDӝF{jP. +lfj_%=B) R>#t$.8RR$z6;shOYnoct1)P@#2B-7"S3t.إxONMOgUDn_'[UD-}PqUImߐٟ%&UN";VeR +d>`iX/) LznNHNeg*^OrӨRCp4DaZv%H|SZm/i`03R`F;a5ԢF:t4>eDKCa3T=W6EYZ%zRl+"!pk4Q:: UnAh(H-a1iMrs@@D3a^r V V( S#4IhVNy,\2u$ ^UECoAq(jLh{6f h `9WF5Sz45 S/"@bDj5^{ `w[C AO(vE${&J#XJV/Y`QE+SI2IN|XeoaRp$<"~CѮI9 WN SPF9cUԢj[,AS[(tUyF,R*]QDy >s`VK]FpΥrJݬ IɹHhKlOI8Ř%̌ɇH^WUjlΝSv"Weqy>-ʡk!xCRVƲs c}~NM@CMI(;:\Ē\/-7A#li:nñ4̘ 0ꊠbYH'0~D-Խξ_eBcáa/,x^oAIғY\\Ytc>݊MI&g;D;q/ߌg10ա=4sU 6UZaG!\7!n(ވ $왉)8,wkNO8^Bu`Exnu)=b3Jňb0 !sr.#I&)H"@@z{)!n0񲽾ͥ}E!AQ>W2>tS8M Sg^7uԩq@|> w? v)xO@Zݙc{wX@ziU|b%cbօPwN4CtKSgt3*Nd"m!!lǓI] ,]LEpt劇~SoqLn]2Ӭ ukAdI.ᕡ5u4$F[{*N7zq6I ͻHG.I5{}GmD~|O?W}_/~37?-T~?oϿ_ɟ-?/ojA)OwѦKAB Efq|YɄOڟaoȂE{VM]wa1X^F~fBbdkpڕ"8ew&>Ն*PҦvft>ELک8Ƭ{#@;p#݄,sb=f:,Fb$҂t3n*4T[HalWE1 9^q W>L#kq32Ҳ6gX4<_t7qŁO8či 5h에A4 N$AO 7p{@VA2O2((aV[:Gv_eJ5hJ Q@V\orT Q%qj߄q(Y^0aϲŕ1"{z~YW7uÉ[ ׁ+RrXx;beع(0Wb{ۗ*MdE>|nF;JqnDzHĦJT]DSCn_eZ+Yɪ endstream endobj 42 0 obj <>stream H]\ W=KH?$' Y@`HۀH^,Hj!bs=cc6zvX{~/|՟y㛿=o?|O~ȿ? \uY^4X~T(cҝ}i!lN²cK5Y0zo@cjlR*,/$HM,h|I17%\·J1lY$ E8'@\WdP>< kLXB2Bye((Rb+$a1F $H` S S0Eluk4{bH7XlBRy¡N n($+k VҺڞRgzL5@:ޓ5ŇB5lmuhB8q{D=j]y'QMBkFCVEkN p6uRq2Lii]K4[G$$/q:Q=Dt%rl,<} *ʏ/c>e\K-o4t:\GbZBcPG͗?zuLk]>-kgr NPH>O- !@})MhdHV\Is()0U/Z qB% [W,ݍ3+plxUG$dsQ$89ijB`2[_yՁZ,˨$&IZ!4B1 08>*e$J8PѨN`yyT?Zxf2?)@CG`]x1NwO1,nR8FY9RK\]PV6QQƮq{0PDY:yl3 " *ӱ\QW18񖩜(c?F ]h6վƹdZC);>` 8/RmDSͩ+1r&ʭ*-J0.{@k>mǥU-i.Syu6N@&=Yy7J 7&"Ⴏ1I8"Z§:pX0_CK _zP [L#g0.#:bȮ@C]Y7৓:ZV̀8p_M$X-g@TԳ(E7)ݢ@Nyu7"?⠸DsQψϨY)NM8":^(xr1Lg:E!71i~/loD|g`S^7m&z{'ݓڙC/̶iH-. qkDV|oȵ86CSĿD&A>x͠5!"MUf+ 'Q;IbFƍ@͊2LpW(6.#A0W2q_ցc@\5Jڨ!1QW#%' M(=^ઓy|%b QFA'kCum8 e22x*]WA~g%%QżλI^882d6͏8.ⴏ eiFivGtǑI6tx!*-Jѓj*E nq%rQ<8ȐKsX咊M`w(^9]#AbpC^t//GDTnϭTt}u\r e"7 6D<[)'0wtơ Ġ/|F+/3Oy ,ܭR626oZ'3Xi03 7yHb/ħZ{j#%&ɕq!Hc͙ -{ $7JM K7y&ֲ-Y^2AH35@x \> CmA3dEPY/ 桌GDN葉P~`Zl>E`_>GދlXPsF%IMz"[̚ 20ܾ#b9c9>zeHhl1CmKIԾ͇fD9D:ۥ u0э]İE!EQbY&{QG+f1*y@IDFTȚv8't| @z;ӡxwyn9=aq8OȒmr@-ҾuX/5FgcO i‰\/ŒBUDVt991kzު_Kt54`f PSJKDnƹ{te3}A9uqr B[TctY`)&#,}h,}L2$\L~Y^2c9h(u6$rDu+9U&x=#5ȐH^vɍ% 23 <6T5=RW221#X=מ"V"-=B :q\ҌxV!ǒ/TZWŹhS;3b4v,O(Ίoe"H@u#yCxmtG.bS͇[s wo+/pj_ዕFL=? irCrabYr8[pPSZ-DPI{ވ,}i6{PFšw;n(3xFGnT k>(&k@ 釁B:/8H{ 4z*OW~ذ5x:h1jƴsH\e?>[z!J V$BNEO.l=z&zD愸9Ԩ2X35t|i^ eV?h &`::(}9y]ΡU y;X!7 ރ06v7"E@S2d^9þ옦aԌ~y@ _BsײtF-'l7:ta:$53V5a}#>D1z<Y=F";v 7wsF黔do3Ywbu_^(YMDk#1k~ L [bVQX"Ьĸb@1E!ׁ#NmMF O[g9jA(ؘ6^}iJM|/>?fCϏ:̴͠f;zy,!dEg"6 q6;;7"V^Ϩ<"z4 !KlL@蔛xJҧgz80W҉`=}+;A(a,IFfTϷKۈx㝪>W$Si* ْY]oA2`vI@ǹN_JI1 '[0Lu4HSpc]ާn=!/8-.2KN+A<1 >mZ!N}ݻo>~~çgVA_>˗/޾ۻ7~&7d}e{=9g_lˋn^|7ww?|w^u׷?~O?[tϼo/~O{eX}Z?";1:Dg@5#nn߯ DevLHhwͩ Ο-yMm<vzD}1Ѐ Nz ;hgBe*HY֔1yP6a"  pmkrX#F@`T%8f,9 uʅ+ಲ8 8KFNVD֠EP!VpO l\286aw(ع76$ƃ/?(p {M/%AUbtmD]~BQPC|ʮA@?2eϩ'X|oCYԴvD ArecNU%JR=v.\5z~R 8i*Vhi.F=E &jZ^Uj&уWcK'#8 *b % ėuɈ%`$ Z1n#0V_Ai ~%{v"Hu!zlA KC#)~JJ:^ CI4A &g<Z\2])$/br9$F'DBoHwhc*ݛێOOa/XDEeLaIՖ{*'[-k'Ƥ1D zwZ㩵@AS(qLX1Ũ>_uJ ߳wjb} xPv ]wt;4<`.2־<Su ,kʑGATi{}== [:ĔK:Zl9 nȑ% ` jinEPn5P0IA|D@#MS F 7VcJZ9˒c̀1Fd  ʑ1\@})co+) 0J~|odGFh(H@3r[ =^O>xT{1ɦ1ЦT%~Vۤ0] 0G%x Ӥ M4 b?ir6-y,YaFrh@. R. n`W$5Z'Lpf|hjeQQ$q.M{(ʲ~1#kȠp^3Ci_;9e%! &7L\7 _eD ݗ_=եb2ï!&1۶ AoC:4Q$ _Aw2@;;9pDAF֭1aݔvf#2Fw~(Q1?B뜟ЯQaF|pZ [f !7@b+u}uFpy= "2'TZzˊ!P]ڱpt AQ GSk|r53 ꠯`# |BFc`IZ;iXY-QG\7}_|EHj5L ~dg]wIyɴۤO(9#o}n!σF .h2¢t!,*qf:QwN v>TC 9Ay*Tv H=ub(sLiPI {Fި-NL =8y)n +_@QtM`c5k`ltu pT>Lɛ$N~ *iC@t"j *v'.FnYEʼC\5BfddzDoWTxG9a'ufe[{#/,ˢS֠=wq}^nagoJ[]BirWBS=:,ǁ+ź uW1O)8}t0׶z2O_ފ^QGF`۳v#QcH5;B~z P7 'DD@q2-U"[GPrXm Iy|)cđHЦ0dRF2gSL8>`tbO "Ok0D.PѲ uG^9nQ" 0QyF0l!o,eRC?@5's4CɶI\w Of؈jAZ:]n¥5Jܤ 2tsnK=#N4Ή񌲶f;`a]Z_"(RIlwsu%yEyxBF[q#ꭰqe>wAٗ@m9-N{b|c36v"WL\޻0. P[y)WjA%jɫ\FVe" r2&n`iPcT7vJM)& h$l'G -zDwG{FM([xMD"1p/#ZH•'+@"}cr˵*n 6NGs?ɤ7F1[7ʙ&-cxl4dd ~R}#31rR &y$𚂃qyˡ+XϷoEV1]cx^*9#AkoD5׫&֕@dUmWRFɒ*\/ ‰Qkk<Ɔw@P0_nB5d: @W]O0-| :Jm4 m~Me5ne3UZ.gJrb-]9B6{ %rFGZ62s;:>)挈H_uUajFia- 1@i-@= L;L¡}|A_F-I4E5)^# Բguġ ѐ›X6 oW$`&oTd.0/n G;'""|u}T`ڧ +ݑRK@H)SxAW]63"hWTp}D\<\ƕ⊐o 5h\DPKm>hJuHBF4@$ZZDu~:{ݭ>[:_i79fÍoM8fye "<Ua1b'@>z h ʆ\ƒZ|I,"\\ħ~K1$%0Pvd4)B; pu; /w<=HNlwuE E1\ϯ`7-d0a`;RwԚ' O$`wKU ?U*^`}t*Dy(^[0P{L=>y?T*᭙cg3"+V1h})#f֗}~F鈎qNx Q LD]OBGv>*'d)?vFZ G{xyY/x) kISA4k!Wt^mI2`1*-m ?# Jw(7ssw}dipFV!6.!* DNͨrETnb3# "-#z\VTa!Wm iLtH:hz$1snIDy8K0wA{!nND@IǦcFzy(׎uثpe#Mqz%Fͼ0gį|ȍ>dR3˜-3 ̜F5E7"P~u:8CC\Gs*pLxj,+VJ,4HAg}ubDq0aA"hK{{ޛ*G<:-8ݳBldEw 61u&ȎMЊpFDzUpLFL7OTS;$LLEcLjJ%bw@G_>x(CZrG$IT*|(z-Q1]mF秅Ÿq,<x^i"*xEe>{+ý RcWD͈y!'xS4 Fm\ߩy)… rU6@uI]Iv͡dXÇ^^Y>Tw,m `.-{ZdL ` Ŗa# Ȍ=~#6Jҥ|eQ2r+_wd*==wH"8U" jw:&+v˅R{ fKkIDj<`_@$K\VoeBudF>+AQNxw@4FSԌX|*2׶* Pk@$|)%\V* &CUT^" a8-5!쒀YoŘ*^2ܮRH;)@Lib/3"(4dRV^i> {JϿW}xw_|wb_ڧɗ_~ݏ_DC~uk ;^-r÷D'mf-֢Zt~T] P͙g0v`hCI39p֒,Sx&3* ,#Bz"5Rڈ<Qʊpg&?OJ ^ >ItM.4 ͓dX(+0P h#yWb}T‰7 9!,v73v>S pC/FkLj5eP}Z*FUH6]ݫh \gپΌ}*$f' pD@#*D+B:EMO)}!/ !- mnwm"I<}v?I%gJYL |ԧsڻ^a*R#Dm ,vɥ)̷d,K3_2,Pˆl WB 9an,4C_z76gAAhrw&vu/̉4Mf㒴=5t4@Dۈ*)#g݊G:WhȒ>ot.,nWLՉ踰>.3AYvfLda(\Af̞X?H"_)Oۨ dqG㨀`B#p)<GQu*OQȟ؅19EBhO8,Ukv9ʁ!NɕZoQZW`T0OK+Ʒ¡os^J[G sV2gC!A-Bw ;wsΞɼ3?T)o فS{#mlr{&m1HJo: j0VKx_GT*+6&9V.\iEOy_*7*3 @T*հtq;\VSUsw r_~"{O"[| D k<ֲ 'w,[V[9b:+>~eڰ :bmLB}-жV  ?x9]7:A= ?dv  VIBKX-|Rdʊ@O>lMd9;pU,L 83p Ǯ]tӪ? ~nQdCM,=8ڢpyy;a.ςp+ɍ8 q/0LOu΅deNGsi_Re}w uR*&^^oüKOG1\YͭD'u\|GּDS6 ”g_jqZ#vl1_8 Zt`JS ~iДa`@? j" R6(J(bh݅ UT4  f΀LH8P#<;$I R(oF*M3UEsGÕ[RREwms` N?pUUlY#n ܵ@zd'YmZ`n`+sPĚ* 4fze< GtU59}NZ85ĮeN)}Y]M2'<}g䓇s4xAy}0`N:vصB}SZܨ8W;Ìq\'q|g)Ώ ь"{m|Vߡ;$qk J[N*+8/%%C;aq2z(O3HG0qq 4wmj1:Pj6v̎<k5%Q&<Ŧ'k)XKWC'z<{\h~a W@~d#OcFN*n7{ )q|ɓ;&pjizgcTRãgO\u`ۜJAYѩĀ">6vr^C)oS4UW1=υG6 %bv:"u;:r_1zޱM[r|6l& k?9 u#NXqjV&Sַ*%i]`?CiyA579u]3?'4j⸒ u AtEBsB0NhuD,t#?#{ c!8d+r]Dqu.{Q^CEj܅S h@:_K>=A:l b 0/34|D؈= t^/PsMnmw~OCqv=xCj7T$K|(w\FɔC}~qMKQ$ȓK#ߑP Y%x>}L$|0B2r4[chk)zr-k-N7e eD ҤsX;Oxgr((MD 5 [M?"mQ**<"әrʃ/ (T;sYe1WεJo#YpM y;^^Ynq,# dCl*>U+gSg0~{34"-(PEJ(3!ugq +H7V,ZJ\frvsxX3 Y2oV%[U`.\uT .+檹1?Sa̋ Y% rPDs VkO5KkwwmB,bnw@Є߹IU]x,+݁_E4 U@wɟ}|ƯAHHX4ʿ`xnyU`r\0]F&Drkf\Qh:VϿf$/t;pt!ˤum+pIL=ʞk& 4li A|9/0DhIҕ}`Q$6-sFtt8262ZNd JH@Cp ,@sXLa,NSq$cP[Kh+{B!W> LWԬ*8a~ϗ#x D|%v>҄O{d AC ^d L "$x>DHYDO 0%}Rh.C9"[(.b:Nɻ9A{>T<E[6 o犲m[Wm*IG^f.VA]THXb8I$U1#1&f^'ʶ|6bLz0WjD@7V Y!2jP) sw]%P 0kbs1ѹ,9 n[۠7ev,yy Z܂Jde<(_?"ߐ$D( ;M@˘aD LF -[Y^4=ll]TC=Dz,9ΨŮRfz ek5_@/)p%!8k 7;U!kN\9$ǯK 蕗)-]"TZ!bLRyS2 JYg`6kQ -2 5P_Fy@O7_(x ܹl))[Gj]t K512G4tr[ > p)t$61 )Sӟu CĐŬ UMO Ic:N$@?0SeF|W&Yqu[ڶS_yiQKg@oS\/e+{̵GgW{IVS$!;aVz}CGe+ #nNz рCJUjC8E !}88m~iw+1DÈʼNܚl fu-ŵy8Q]36*Dhs#DlV턐TF˪<ٚFp (5jJIFK$L(5_]"RXW !3_zɻ9GEҨ:5]JX 9ƾH{@1kNU=hJ <~=>q hU 1E9h\*^4gͥ@Y8[8Im:,2T[FQ)0RiJ7N Z03/|v( )y[_C܈/hSSxqVqKKxuIDA+QCۙ": j[4e&yߓ1DֳϨ!+QMNT!H|"eYC>Q2ӣ"TTZv0w@m=d= #Q?<}z6C.7lR«d}$g IF̃5:c #b9 ?A+yK^N^ɝ¿!lj,9vX"UvPLsUFTu:q"ZΠζA2YF~zqhZV ^Jԩriܻ͡ y.Aە`8icڍHSaMB^=oAJhR0NIC锴"Q$H83t;5@*T8@D}v:GwmP;(|Q G—Z{X41>FA(ԲN $4B tJD̻4v"o;ѡ(讨;+:k6+bѴ`FާsuQ87y\8wkٓґP>mL&l.6s+߉>N/ DyOXf~x=Q9347tPO;†#ɴ8m>4,Zn$"rfM5?4AP:v A\mDfx.v2G%(PYݻs+hH< h_f K 㣬pNuiz8K2|\ww BTADUf}B_!B JTBS.[*aρyV>X)/vMGzYdDڸ87jhJۣĥgTzL)t ƈ``ȂZQCK% pN*t:Ns #tj^nh&Oɣ|5hB&$},YI]ҋ]Rg C/[)P?iϿ7~;>K?dc.c/xC Qɒd;0=/Րʔ51GѶ.SŢ}Ma#l - v#xJ F132D1(:]M8oDLXPQANq@S#aYV66f 1btFD !.2aHz* ΈƎ9nw+sƾVjubqإAih/VHo#B I[C*xL:WXjEts٨su$8xgpaR|#ҵ|&yq$ѕ FLμ߫g}K٧k22[!AW?9D>vYfJLk[*_:%hGP!Tgp.Bx r.8>"; vJQx}"+ObU/ƷOE&=gwQ4\=J B)mlok<*Iy.nO,HF"i 鱎WOm0YZUФ :`iU쭊 g"R0kb#`@[;!nܮ^#SΡ"U/ңi}Tܑl8fDέ3$=Ƌ1^zD'b>(a[ۮA J\j dB!yT61~lPII*!z%/4?ͺp~%%.2ͥ}t:r&y8?YK:QQèuʳF,v:g"n1ьu|yyvA8|gCjV_$b[8*_?H r~Ren#\ ̠͐^Ԃ؀{h^UdIl#WHd8/xJmgNΞŗ=;z2TE6Gт=e0k콽K"6Mb^uȴ KD擈tq'^HQ}zk5t-P۳[< SobqT̃Ts{Ag|X9kFFJ 3i=fR 2ƺ8̚fd9f/6C̞_*;F Q@0f<9r"FFRZBq]9 'VBu U =ɻ X>yIZk &< vg0r hȑY~FcGh{4tT|ʺBkg#Ñ f?;qM jA#K@ &l}>W9W 讘 &Sڶ%)) ]@ApBu)C~yw'T<]ZT|8T0YHu#є5f(ڞHj>bAYq! !D1##+B)dߓ˜31@GfyPz΅s]&)0SPH`tkFVDYO-;Sk̊3,hvSZ\Pqh:޿̰*ݵ)Ԇڧ<B㡹D,0E0XU`kc@Hw x1hJp XFiǦ;~it%c%f=nrvzn֊7; ΰf|ިtrɳ.=33Eȁ)Uw3Z2 4MeG+"HÑYsȤd[iiR0krG"*A>Ѓ>Q}cp+Z0f{nLS~nodtg sʺSE4ho"E=?!ޯTC/d*Ъ&ΐ\#cv<"'G\X'CuE3Т)83AXxXjJ/Y屍\e,\ݡrߞ*vߝ\!}KMS\ora)T祡y3J@DmSݳЛC!ldx$h<`r1y(fQth ů64tFS8t|${9H+^ 1%$Ip=Kb-uqUPz`{1߿هaYR/DVXXٔO/%+o~KП% \'87 ARcr.`}\ nl8<ʵ3ƮW~<`R5>p D[~7uQS!@jmt M&~18H =wPyH3Ckb iрHYIOcT<! D2#2>H |)y2^{gDi & fz$ AH(et?o]V[NhhQ߁xfح6 Bb]P8@ rAN#UEp w } Rjާ7j3`qW #_.:mli \7Z8Q; v*"xp\тe<;!1iw=XI$͘e^xІd0sW&;Oށ |CNjmMW!n{HFʟU!*ɟFͿ+XUBʀU$P>ֆ`LF FmB0"e52@M?ay$ q.ũ(4 /kx'?0 A2h*@yA›A$.ISM*WmDL@KO <;,hKcP-BGY쬶EAy B @Wmf8Jf֡Ѩ|A@~E߿S !!Qؤ0@a3,Xtj1 y-W2ց޼e&=GһK+gx@5GX1. #ȹG]̭~Ua]lz7y}eگ, qm:{JQd<, !>kVwѬmZZ:fsjm4ԣ_/p$z{ڀRZ4ZID  kZ :Q?@\f`7; {}("؃Cu{B6=Mu a%@;U3ɪ,(Ynw: ^6=zE+wD0龷?a"@AaeY,'2E=Syqlo:T6 |Mo8 t 1 u1)A۝ [qM;2)~܀gYD5@Ar P>pjl"IʵP˲BR"Ȥh3rNsQ`~e DBcڌFaZP$ \b:2oQ,([.i^Bү,203!Uf.:ˁ:7BSp`krGxz&zs93L=jP*FC*4+q#DHh8I'P}:RGSL! ZB]:+ Fy)ǺE@G* Rw&E _2׉~u.qʈJ8sVzSbQEavQPVS:Ɏ)k⌃_sM,iaVx5̘e2>Q8 D6]뫞"ȓ7|Xfě =1,9vJ,L p.&LQAԙu[M"U+ 4oP] W4q (@B~ Dt3 *{6 ̇( lxP+u@;g$J.=KɏojxH b8&lAzK(^#71 D 4(`\-:i12_sHKi&QaQ:u{aޮm2AԢvqG U"Ea, fbm , ny%>yOt(J+YYӚJE8ؔ/ gf=CuDL2B3UEBf| zm^qKJw (k[AoMzO9fZT y""U8''Fs EYFD4 ]yS& $9Tf`L FfK#WEē.ѧ(r'S`>sTh$ #^Q!C>Z=Qڊ(z!!! Mz`{''eYv͸O8!#X{U 9b+% qf,`ipbh!$Et1jWxiHt?;jZj}QxMs.z2桓dNź~X;9%|&0Z2jPtfI zX0$[OƸڅ$ Yu?…A! WHXEZ #A"uȱ8aGxİ!zN}Sԙȓv;ĉEDgb0KY-L] 지GQvsB/y/y@ ֯Ůqmkљ9JZ7㐓 kuÚ@,ϊS}`ؼE'QN(X8P }7+RDkbE(pk+P(3|"VJe1ݭBs('kH8fLk!}id'k }!4SrܖxJmDF;z.i6K"hy#xc1Mj;bRoRȭ EFҸC D_Yf3s3{ )͂:b@c& Hſq3ٿD96>4 ,bB-E=13s__e4dj6N2ic:c . n*zŴBlF T{SFcIZ'Xfz˗ƚVHuF)7uGib\B #rZzJGpg{cCu&#a9ZP'&1ޢXɳ䍘)q[DT J-Ϭ#vFfv k}W۫|iZ]7}%(lαPwqG&-}s4E\Z8,*3 3϶/NFQB# +4F{N$˰}2M( Nv T ;% 7(x+Ug!,!cweܧ֨كs }iY\eY' wPY6<`0E)aCo}uиci'C` _uKߝRh#eS~赫քiaq4ПB,ݦ:lwym![NA-"~WmYi+ a9XO90$V/phbO8UBuɻcY/repĺ fAi:=?{ዷ>o u:?9>q~_?+75|Z,B=R;~hNjOo7gx˿~xxݫ/7?yWLX[=^ǟ_߽}~㏟?w4YZYn"u]οnQ;+Ylf:̪yQҰùA hj"TDk  #IHY =T 9\Mi_rNnm qxp*#N,肱F ?E!";ai"h5S6lo8^SACD86Ce"8"D`;äT\@px>f' 0l~'#@TK AA?5#Ž j؇7Ř cL"3jsvCЁN0ax5t*B+qv]b(`i݋c~F'UWguYV ӒiɼE%)^)5MNa~ma~w>H =jF19\ qQ]P m26wsu8ܕxx'\{cF9Q~zOmBB[s*.ts"E`VxI!PN#ZOT’j̠V`^y(`]JXpV@oC[cLf[; NYaz3ɯ3euaTɓ+DŽr>ҍG(FlGbj&t~^:$>깭ePEK%^ BjpxCkqhA`@,ADX$k*dNيRV|ca0Q"8 #Echsn_whpArrU$> ߻Dy[-TA|ֱAd~ j: m"@oy. W:hp\8YK @In^DͦFS۳N;P#rǥKc.}ZÅ-t|APF^e#kgZ) sP"fs ^tfPyu!p8XkBQFgo)5=f hEq;Q5@u&AڈeL1 F 8MOx6NJA/FQ ZR6~N טO0wA"ݬxN͠tShR}#ŒQ|ɆE?N&"@dQnr- EÓb ,h\Gu7_stpeSZ%Kd FDAWD3_W6nަ)1U`zwqC}@PRv!uH"`A *h&3v-B"xBh (}u`(\t,|:"w뎶k) d,`kQ"rmgƞ7<)sDzP0D@WE} ':4Nd V /V?PJ{{\X=Lpްs!,s_/LNSgEBK1JcYgވTelFrf V vcCK~5|;Vq'MVsP nw`>pKX:{D6wFL=t77ٶm;Uk2Mp xH3xgX@!4:ƇQCdvrEM1^!M+'dR(ys {,O@`-끲{DA#a>jhz+D&@)82э:҆+Xg V]h(68|nEB3d,PE#e-gdЕʩ!WBM1ez ID )r֢ۼR "pYŔc9JW endstream endobj 43 0 obj <>stream HlA, DO;ۄ(wUߙ0`wFI Wl}4?>eZE@Lb,D3Bmo̬P{TuPֆGmD:!ļr-W#c}Q9P>Psy.Kvm!|]*NѼd Ϟz8;hna$G&qŚ Lse׮9G6y $w HLkkZFt=8뚞&"\vLW;Z 'IsjjAC^kZQBDx jVA.v V8XCZkBh".Sт?{\Oԩ2V9.ϧjTm\ß__: jDi1xN_OtB^Y'QYhؿem@kڕx)rTQMS.F$s19bR+ LJ=XllR>_ThON ~CM۩Vq&= G Sal ue,K2ؼ v}u ` ^CODVo^iBƮJ;mrqPR0 U&;wTStCT{кDڐ$0%ƫIY*R{A|'8~ iH:YWEo-兲!eRlWsAЖMyK1CB _C,9㜳rm|b@g!9DLIߛ  tC!\$a#$/E$$fx):֏{R\Ą"g+DiC=Ut|E !BZoǠA@W ev7JyϬ~B<#!>1T~x|:|\ cd@EHXzWsHfLD"$Om~$< ),'MrHԙ"M aNOZ{8gN*=EHtD-zvWȷ͸ YXf/Y> `Kr0! uXyIK-KF+pRf41lr+ l :2p? 6_un.SgD [Nu[DFcU?j6EAwvSVA6#Xzk uJR4cxdǘva 4)gl-RVs& 8q3&`BS0!\[)KRB"Ă 3 E~ʟh(>Gv0~-`;l&C9\DsoCӠf,$VYT)\(@CoZ|L2>;juZ.pq[uBdX/몄m~zegcj|GiL̛.:ոSy&MyuBm(~J74ZHY4Kr(J j}^/@ai6EP%8Wb/Ҧό@%6'cJ9[DFcYT0tl*@Q60Ys&V(Z'<7$Q+V})2Mt̲] ]R{}?_?b)i i*n!mC0YmJqSO0?fFP= AЅ{rT 딪  Bhj(& a-]7Ux-yTxh191w%V.mcWr-XÖi^@qcSq(ǁqkEeJmGmAŀ:f'n1\i,D]UV~)j sfAqN+X&y1Uq&"f0ψniib6R_LyRVL2־q l95R=B6yEaq sPZB1і*PB(m"N֍@y $eQw@7Vs7Fb0ƻyz_I7!D![1!Kk.|dA-6:%}M<"Q}87 $ #wԀ B@^ȇ)V!8H>dҐP_}[lwak(H|0[2ane_8t=fE;* %}ž?aj2աMRkf"X{&]WM|/0q=Pb-bY49 s"X*QW ,3t(A!BDHH..nYљ[wrJ *c_51qίֱu{`bRL&2wX,:FxcAGtj ry]DYUJ@^b"ӇK)3 Zt.1ݝpƎNU-d?QT *J uk `krZ&{}nu6b5 P`-a~,P6G?/ѯC2/}،vtvg'ǫֽ!| ʰ9O<Hvf0-oq:TmVW˩e"xBw1kTߖAv?TIv9d88% pJ 6pevSZ@" Nz q&o%?p( XN&b+ &q/䳌]Qs+s)Tuc:86c^zjug0D/;έ֏sgUWD;LGi&J wN^8K"VP#\][QN&hT1(l|$oi|ENǎ awzE/8] vW3>meiWt';Ad_F ̈S_R #;ym"zWzoBz0vȀ@f3=˴Lىgp|{.6՜i+5=Ԯ85n|< G ]K)Ȉ"}  $=:ݍAWT)0|tHaK8Y,A3ȖbJ(sgieFO< 1.פ"¿RI=Ǣ]SOYP'BkFƈƩ4ԔӸzvՓq_VWci%9 ؗR8O΄mΎ贰 %{,>11 X9mCa ׁpH 2& դ!?paY_Yc}%~%O~B@UzMH. ?+ UPvl;F}n+L2h*_`2YPjڥJ{ҁЭm;fߏp?H N3p[o+r?Q>N8B +","*ӌXI9;5((X"v.,U8t?|![+)Īzyp[o=G55:)lz7xHjQJ`5ǹ?ui2DկbTl W0B_ sp}Xὸ}MPu T^Qǀ04Ć#MƐjE!-rk7@+Bhj5\CB,6d`ڊ Z0gb'dTkQ%bitg |5MuА+6yPpxGIq( Ьz_Tb-{B"μ;N:H5wkZq0X!&u1yG u\ Q𲿰:juZ,J17Z{DR:H~](ce>{=F♚fA'aԲL֠a2U5[`9 (L*;}F}zc/;JgC\q>|ã-+@c&)-Eak ~`g!|8#& 9kWڦkˍǷ͏Q)Ϸ$[XMљdb޿_Tf Ȧu\ OH ] \jD-!q|yQvaoZ&^DE5cN}v*]" *zif$F9*@tSU&p)?MUy)nvՆkikDBDP.Vq-_|KowyE-P UƾeaiuC_mS09,0E2/^t\ a8 &7\JoKj*RDc9<$Σ1P2ĥьWTl+2kM@+h88`%>TO}|(T_t?@ g了>{BuF=+?@=}?}?ǟO-ST_?Oa\r,:(dno+` !?ز-{ꓕyNϿߌD?],'- pB#kd夓;٥g/ϣtq'ꌺw׋h]^`{Eɗ%iPB:X5qXL@Q\Y|k0FU@Ƅ`oʴr,/ۺ?xx~LUi:Oq4skQɸ{ߔ J3 }zқ+ cbNݾr3c%arPGUr # <]Z"UDz9lCIG;Qh\@tJY:*ω@:p{.=j|}P\NXx}' `م91Y̶(^̓^t["PS~E;v%$5;*&].VҨtD|w,0"N֩ce&r0ݶ腣fu2QF*9re UK:̳vр@"ze`I\YjG&Ʉ7K (dm*]P$H)D' Pb0rU(àaP,~%ƤBF=\vPl|pcVnk|Q_~(^1,}ύ4՜ҧ"`m5D kXJrLC>!:ˈ.ߓA=[YT(H/wawunxӐdXܑwfkUen,BS׾:w g} CYQT :o(=$ |V(:StN7/Td˒c&3}I"5 A0-s,K&.ոN}A ψ{T8AMbBs#Bgwzc,b$7m7:Q FuʫBȡ%JHxJU90tDE)IJX`c>W*s26 S݋Th+$]G޷#?}1~J|]` O k1p/cҧ_TVOF:LRE!˯˖0'M0ojV-/iMjenǣc0 (R 2hA=%v*W*ܝ˂L[vTQ֗(śU [cn!ELGFND[{ _.-_ hʠa`q]:dUnYwXGkی3%H+C3b <ˌ6LV3Z0UZ)A;Qܙvt>3A,RK_)wŨD^ Э+QQ]zTQV:T? xQ@DFP'4N% '*'&jm Yó>7zsV A}CH[Q@1 zx6\xl{k8@ukRa!Dwy}΄nT*}Av q Tu6Is],j-??']|$F`ѲYkjԠNP=)sXtiNzazN Y6\jSDLP]Qm4Sr!X7pǃQEڟE.$-h #2>Y1B ύI)X:}!gUM8)uhLg)±MUJJcG5qSB'zTGo",~eJnI1AĎT" )h {xhSY%,p.QPBh?DA!O$OjXdkk)Qb1?<6x}sLr!&= %biOKgGdoJH QV㹌]znDH(֊\6`S׮1#eeh18UFF٢GɩK|KFwޛNCsUvL+me#:Hrz5$>hzN,Ԯϕ^8<-.)/!mƒfMan"Hn+C /hs)k¦6ЫH#cVc#X#DN0Ԥ.)eeInROzp}DO53O"$l^Rb ΘCJw5oVoR{M/J/ |Յ!\t:#QxF<#@yř*b!0J3$ɛP K'|iŀ5=/'!)/qqs'~oxf ì!zmi&.($eD j'b4cLc;b -` {d2E<4P0Mʈ "HwA1FdGա%7\ h;˛n\.k a+Xb"To[@8XGx0,N:Ym^MJ]A괊1tRqN7TڇI5nBƥ{]+mxY+ &պܩ^0Wսp0$f{GPw;V-jr@g\z]ZmSE5+&}Mi=V68z #„.lJ814GM.<ƫ? .rfG{Z/vzx<ְܱ#eEzw j0GkRYΟ.MS)CAmq(%f Ijc] hhXv7Q/!IIJ3cvBUsq^ 7R%mi݇{s`IŬ.k2|:(MϨ*GzF 04*"vodAG"(\N0{{<4bAqF&> "i _Š:2("=肓C{e]bĬ^D@.oJ0ۢ7@|`KI*4g c\Ě9CKJtQbfԖvs^Nv Cp,*~f>|&4>ƪ|r:,cA|@:*v}Œk>" h@ٮ6P&dc9ԮwdH9q2N׋eaҧ"?Cl:=|T RzCnEsjzXh S\$ˬ} A՛x.=WUA@b1J6xf) xbfZ?e\&u8<(DqɰRt:Lg ^vN &;OtkPTVeJbޫtMDSDϒ"A3۷ ܧ@^_!& ȆދNE5:EN=ybd/*nn:ZxOMs9 'yF'n dX8x؄|2yjwZp]ņ4C:6c?mnLoV%wr[zzuPةKqd흊%+ hu u"5dDJ׾㠶9w%}-j :fr?#?3>3c"SnV5M\\Ax Q4x(5LOĤD1NF$~Q3R|܉ZQ! TĺPꄪxKbUH]a0qxĮn7k"DA!u%2䍛7=/҃rʹ&G淂<@݈bg̑?Rb7'W%yj:)P8l:IX_CDՊ#rV+@(A DPЏ%r[=aOՄ$* u:!{X`;ѥHݍIT^jwc@Kձx*5< 8,<Ϩ%:b*D S)NuF)"fذ;u}s\S6B݈z  ڈUoDZCDyX"[P 3n3>S3Z3mvq ]/V *)Ea5X9ldĺ)6Bm4tV8tJ;7ÑySQ>U0e` ~Cjԕ9 a,id29wG\;NKlNÙ uR4F bq#6FD:djd23"jQc#F\Ea^:u8ȇ(Q?֕쫘FhF\Xmzg-E1aBbXx`<+,k=(nKlSh -?HpC.@ "p61Wܫ!9 ;́ XI_Oc;] cИ[Pfy$ѷWEzj8Q-(#SJT&WG_|Ul|[ٔ]}99Muc:$;&0B܉NwZH?FTUUUZklB<9ُվB@n{*EX`xptmJ_rjmL{6~75-$z'} Zqi~^SۍՉR$bW8~1kn0h kDYV2*7#)9=2B" fUv' ^{4<⯋2F<^ B`'` %15ދ.j -NբxL*U53꫷_~g/;MTo?ᅣq:ma^XqnfЎ(? fK0LS~ge;gץq[Z&Ե`EJy: D(2 %l-|2+Cc8~PP@ 5p Iw 4e_{O1Q7"y!kU0JT 3&b`^W+>RO= ZvI aCRoMm/p)?4%$z#%2TNjLu-LB"' m=. 0i$=1{B* f-n;͇$Dj.B6`/ݠ#8,ڳd% \ZTzPӜw!)rm>"$I\ ] Y{+[V*$]D UG1̠l*LV=jV_|;!!sOS/S:b]nyMvOєr h*y pQKJ1%XH߹ׇr zdָ$:o" "Qճk8_vjyMv}0esbtjNjǢHQO;QIY|0^L74dzdΑ. hEPKκLc-@t5QD4D~:v\*B.}}^Km &փ*eϓ J=%oQg֬ƙh`P?6hj"ci K80Fi7X P^]rb-ez9"/]qUVY_CeTiP~6,L}>5t4icah-yB3mW ecUE#= z-xd^AY_U.f /䦊쐞wKz}[0C}@< pJ xؕv{R[*觊8` у\9=JԌ(E?(lD5I<@ 1^`ޥc:Ws%'&|d+́; y%_8־|y%ʂ8#2Kf+ 5w4JCCP7;#f0TvȠ / OK*5-%M鴾}( 6*-󰥺}˜Md C{Ǟ2Ҭ3|Z{~Ծt ^wپ#'tD'YGlYnd9R'4$(FAI\bqH!^O%Lo0+غ5òoyn_BqwwB` A jZe)ȨIP1Џ;edW + ̣\ ؅tPA0>ċH,+8(:*PMo jGi/5:xqA:kNyiJOEa4FJgr~;qw<;`]l{@˜X{W@ƿbk̩;N% E[p|ڃL5w<ÿ!6{>M7x;hҎ+2Х<.%M.}+;v~i/+^[Jn;C}ߨݒBrNjȠyn0=,s& "~&'9Rks ;4p5h9a h‹7wZؓb $+^LlJ!KT#m"B3#KB!&UHL B"}@> )` fBSۡ%<@%m$5*`c["} U;zvUTOQ]NHD-q5˅=>q_M3u_5| eP#d[`?LnM(Y(|puhE)1@GU(mz{?\ 0iCTqg4/"lTؘLO0;yLkOXy㵴2l'/Oc(LgIUcj櫹.0#0J8Ta{WFA[A'xxm ar~ >rG=/zr#2RN=>p8q"8tJiFIt;C79=ߓvwJ(YP\@}?EQ kD5cO91G"RDk[$.UE'*AF&Pm 9׹f#GA._DKwge*[J-mhjxb0 {daܓP?oJj$1BWbΉ,KMeLkvȆKԴBtP+QPw}*Cx{qz ;jBw$j(PPI'3!Wޥ-YPr߄?w怨(ZYC%sx5#ݪ98w%skyGQ9\*=&~M qpсPMq.BpTݗ lP ΎXOv##˶y?l[xU%.1-=$;jؼlu|I,YH6F`ɏ,-7> >j aPM^C CBGhDgN |cE Zʗu-|kv7!k'1d8CCa.ЯK9ƢBn03: F\[oXIfmv(fiKh˰~КjTҡ1e"dOhYo]f|̽SXdOڏ4jSX91Vdv_k0n'Qp(~$Ɛa1hQO185;?ǻf{p ((2r= ߇#Xzqcw}TIs̵ݭ <.?Wn@QEtfv։rݭz9"7P7sR{(Qs{..@y:9N ԘPp$w֢L%W()X~GuXG';~2hqb"}`2W/":ϏSrҪpH5(ĎV 5(TXy/0MՍ uvRA\gxPkƖ4mw[rQ_P= ~g0'Y`Y(+(2S0LAA>ÈEuj\d# @<@9hwU xiԨ n#j(bU. wj)9 E'UfnPᗞVZxn ۄ9 s#Br!&+GŨDN2ҠVt @Eh5#8 sEJ@ABPUr]&L&Q[ܖt>+ 4g97R6t K% T%펃@X1 [!{Kj l׈5SYF47ơBP?T кDתxO'ׇ\ oɫ2 @UBd8P8E?IK34wG;VQ6h3>>ޱ]<#r[GDٜ6"UW5xo_Wo߿+=%->}ӓϟz/~u_?K'Ryy=9x/Ӌ?Yw>Ne(W&At.DtcSBmW7"sk"XLt&lItH֙fNe^c2oK}E5(T%aXMK!t 5kݓpeHѱMZ/\,ְf))l4>eRfsV'2j8'0ސz|a}S V/xKGT!U- VMװl*,= Fd)w@a\;& [{bP% ABFlrT%R /0x[޽$ٝZvYn,+{ +N6B|agX\/("z$Rc}Slѿq/':r,gI˳`aYRXaA5qS(Jua`0YrԲO}/mB|LGaCnvKv y9c¸NTQr.RCPISdrmP<ڨٕxČ O &`5}:נZvnsDd혇d;`8 &5QlYͬ ``'45@j&@>Z^ȍk"sS֙FFst*䛩!CmUM":CUaU1.C'_#-_:;t! A*Vtֺ}O~e #[=$t%U-T!NmfLKxtrf Dc&Qb ț1Ȕ.I YLsrl[mizG'|s4jɦ'lCӷffEul2ga Dtm*ba bm-ExrP4Qڥx9duox""''ֹ1tw#'v.#+һ\+ 3!B@vZ7-44 3<a [ y$2D Ke&H%h.&Sl;t tX0wך|AX&fc] Py} a n!h)O Z-78237e:oyN0̅ȝcZR%.h1T?@..jr49G/ R(4μ=E8C;Nz  :t=LGE7־ .G 5r$, ML,!}zb؞.@g 0*4n ̰HF- W+[#<'16M 2p:~cyw-~{܁eB-bs aDLWm,#ہ`l?jt@{(-(z ,ngw~zw%NHVwD,m;* BzyӜ(T'QūVQg }zMc~#@C^31}W׌  $~9 ]]UQBD?(ˌ]o[ѱ$ syPjFNU)u6gm>L_?1ي%_h:}ؼ8]dŵi)QmHZb9m*~r_F*nyc6ƽB 9 ˤr7vᥣ.H6N0$U &1cN6-4bC~'6X$@q+ *4~@HE0=Ob(zk 3[:ּ#=,0B]!$mc8 JCw*躏ev .|.7O/vz:Y:1/}:>eUPk<&`u qpҽN)"h5'Pz/PlAwgbqȖ{>"G^55SNN^ xsE%"ATU3% |ڵtKy6onPY!Rw෭P G JG*V } bNӎ' 2$އ9cNF)7jwiin:"#@K=c'" pDxiCxl5-|oehki@c[=P4ј0WgYx;iHF2l f8ڿY3|I1:Č!(2=Qj/;VĉaXRh!VJGaw OCO{Xϑ{Ž[PX0*2}qr2i7xODVl.$e }dyq5C,FlL=Z?\hKAŔ .}ovMqkyE5} (1p@0u5Yw>E6$.m'#(Q1*-4.MqVvo@\L( )P\ꚑ:֨@|U( fį69/ZRTY(. [%݂MaAa1FQkׂYg:/ak|81p3'2;au`dpa lll]>cl_(Oe88m ߏuV.ӡE~MBZ@(WJwƏ^9K~1߈yA_@6i׀䏔+QC&(֘a D,ީxab0wǍZbNh.?4_rdw< #b0;h}ƌMe/2Vo?|ڄu =0^E-/Pm.:Xyzm"0<Q^+| ]\?P+J+g@+w"8 "ND؉KvHvQWږ}1Ȕ+@ ʓ)Cs"zzLխ".egg-guE9$HwwLHPL[Hb E؃0DhX}בG#F߼ T#,%' 341%EB-4Ž H>xT\1/ߣhFVP33yn+Iqe\<1_|F[*`&HJET5Puj aD_9 *6EQvΓ旦!-h ,L_0R:~KC<8<}HpkKfu/[M]\5,kGFSn"mPS:[5Җc Z.}sW *;iOw;͜c'w p}wҹ+*~ T "RD(yLk+U`iU84 x4,LTa"ls1A5#xnb>7ʛbMkBfI;H5EC1f 8eO#_j U6[љ|'E4,(gh@&;Ng6 |K~[y"Y8_'TׂwXYgB> afݨ}P.i . **Ÿ@^YDj*4 ;1?; q$11 hcmWUR_`&{lCΈ&vVҊdq!2vq!S7\*C\F#Gw'"&;ʸ_g'Ět Obyz&x1|\kD YGT 8uj!5@Ƶ=Pf7OUs?߼c8I:(d͗lyD>Mo|sXμC^Bu9)ZJYlO0C]kIc/, y#4`̃2jUϾ"HD axEUDN!YCW@?@D)^<0/BgX!^[U3 -ݭ -@ <yNh ^qO^b۳ 漶{ɿULMNA X02P/~&*|oO6;xKHj];XƦSR6 sd1hL }u@O3w1eTۜiqL>?+c0WT m[ Et MF@NwGRW P$/mth!B,eQx)8 F;k $QϳƴۏX4F'OزK C6"^"Ly~wRC=.Fw;HȄGxo|*-*<'0AO ky_9y\1(zvp7L#'u $ř}R&4= w՟V(ˠ:+Z謆vo2 L aU(jJ11J(٢Ou1<+x)$9)(٦4;sU(]p:=uE n h`Z:L|JIU1YV[c??4")<bkb"*}Ѵ1D!.\:cP4Qu>c"[ v., %@ mČsHR >2A ?dxJ rD`5&/-,Fʷz},6#ę?zQʞqI/yK b@AUy<7yAST[ v!t󏱝d9n((eK1׬)(X >ȧA ,sEo-3:>Zsj2DZ:? `9~C)szV'u7 ,Pa_Tjڋ׌u0(K™1cL|6^4Z4!SW"ʄ Xv)[ TɳhV:b1FaݔI1Ua5U=n_"U؈3ሰ ؜Y #EЉIbChn@+ "zE⇚%͝\qTRnVKui1u0 8 Y,zfvA5)"P KD;9"i)1f/ST6؜_k~s˾2 a]Bܣ[DiUVNQm)ug?SK%B{9p#]r XA`ጄڬgf4[ k9U@Kp?)V2d:kӣn#K!Ѱ+v`i6AQ &S v|,1>|~6SMG]}×?}雿2EM?~˿^>b}7 Gd),$7^9.S$:?z|FQ)T=#<`SJwwk*{F9kRπE;#"aH} _1?12+ov+Rf+e追op1Zx韕&(tCcZO3f;-NG$4(ÑU7?*EN~W6,Hh*tV# jKb_4!2Oh)I_s_2/+"5VjΑwb @ /@hNQ@r~Z; %\C1A#"IteBd* %qRm+҆VfjM]GLbNPHd3feq%Q ([AU 6(ğ(, T)rm"~ΩM0]t[$ f0YPP@^1EP*'@\JτBѥ[g`D܄{Hw%y# %]l~}yQ؇lyvϰuiE xT&XDꡏU=px!)mu$(qyh%jjBd|8@n wJx?`9:0^ys`ք'Z0M $NBnOAMңRAh1L1c;Z<|0)d}1leU#ᔆB݂|uAZUgA܂e!2uZ~YB@!"NC2Ub/!CI =Bx+Q1jyH,BCKR *--VmF1R^mΰnA'ZHiM5 ) !CC"65E Cj؇S Et27pGWQ x=((^rNYPI҉2{ (B%-vEJιv5i'Ѯ'gy*b$_3SszV>Q(RUЄ* 3?\,~Hߣ_v͑ ݀W;\N-W¡~jbȞ{D{>=K$DoޥbWCfo1C]JٟES*v6$,AN$w^n0M.a&0]ʼn*Z`J8aPM]&L0΢tJޤJz0|Ъr!V÷Bw|cQ>UϏU|ѨwfE8A}{ZZs4&̯*uS}s xa "|Z+VzQP·\-Lx1tƑʂ :kqqy5SIZYT1p>JcsSE!&d-ǣ']a̦ [EjqEqHbBGH :_'F&  *w9'rۗ:cc6&ߕ5y&y7n_PȮGb"Px$x8vJa*ϡxW(Gi5y,I,yʛi']H#zp }y>^s[_P`*>3b;t`A endstream endobj 6 0 obj [5 0 R] endobj 44 0 obj <> endobj xref 0 45 0000000000 65535 f 0000000016 00000 n 0000000144 00000 n 0000067082 00000 n 0000000000 00000 f 0000708177 00000 n 0001473298 00000 n 0000067133 00000 n 0000067546 00000 n 0000708476 00000 n 0000708363 00000 n 0000069846 00000 n 0000067827 00000 n 0000069285 00000 n 0000069333 00000 n 0000708247 00000 n 0000708278 00000 n 0000708549 00000 n 0000709299 00000 n 0000710791 00000 n 0000732330 00000 n 0000761645 00000 n 0000798675 00000 n 0000857292 00000 n 0000904249 00000 n 0000946725 00000 n 0001009922 00000 n 0001051596 00000 n 0001104246 00000 n 0001157228 00000 n 0001187784 00000 n 0001207617 00000 n 0001210984 00000 n 0001224108 00000 n 0001243308 00000 n 0001258136 00000 n 0001272157 00000 n 0001276757 00000 n 0001301886 00000 n 0001327596 00000 n 0001357199 00000 n 0001386037 00000 n 0001415546 00000 n 0001444373 00000 n 0001473321 00000 n trailer <<782026944D014C698F0E9E5EE0B87D08>]>> startxref 1473513 %%EOF libvips-8.15.1/test/test-suite/images/cogs.gif000066400000000000000000000053071454007373500212470ustar00rootroot00000000000000GIF89aUM! NETSCAPE2.0! ,UMI8ͻ`(dihlpw G[@@n; *^8ueەӆM]|FmmW{|SgieaslK[{8xuQV^P^|.XM-H|PA _/Hd0:SSѵ[M݀aIVuvj~tw7k59~Zx$8"bҊMA"#w-Z!Jpp!X!6$؀hHjVDXU>GK|LAK(;,Y/CèbP6l rIY JuYnme)[R8 XAR{~ ᴣKIH3f¢7be]|kt=q~cQ~6Cjv>LtzHZRKp~ItRxO^}eHP]< Vf}oyuOfUwAmcmץorrڤ܁Xnh-I*#TG'jq5UР{e=Ա#+`C8)>3s 0Jƾ2.DVBev?Z% H"2%K,|+|B}5cؓ#30|;2 a7ϜUo#pHfl0V_,9b+fj?*ӨD! ,UMI8ͻ`(dihly4Rٍ~pSbHsiN'hTHdWr 0k֍9wbz{Vpda}er8apxkWrrlOw]qqCCh/k6fp]XK=զF/Z\<=G^4!U,,-f%:j/ Y֟wM_n/V<^u\[%sTRk*ȡ?HTfKJ~zXH57:z[BTVO 1|ao`[ v7+,W}@4$c%ʊ^N~YڐC8FM/ɒ=lPm`g R M-A:J)/uV 8l@Q`_5,K[jۆ׬u!/I޹fZ[ls9uPC!AK/B*N/vJq% ) lLQKzbn)ziLcSeR`[ k$9rGc|^֧@}z熱RЪl`5RPz, 2_*3`BzbiBo,򢐱$NU,=|ؓKkǁeO'(w-l1'GxKF _w])UI$I$I$ /4h6B myxĽW[9{˩ZFSmăSm?zyz&vJ~N ^x=ܴTd*iJHw/+FBvQKp eC XѴ,Lٞ:l0{SQǺHVRSծ$a [oy vuTA$VI JХ \61} 5kc Y*ׇR.<펧^{UDXh%uHJrv$Spꧥ[)kq篟5s/hZ9]`Mo{hL} =#qF Y搲w+UH|\KXdTN_5C3=NuO{{aPS-$5li/i<4Oyj%A/f.iL$ YbJT ;W<3nzXzo햿\[ o%tQgįrfJ}8{JAh H,j;Xp_7G7m[ J|7-mn[P ׎b^B Oe?Oޏ7KN]'G.Z'ֆWRETNpjh}9kOυTU +};@Ҟ L DG<:=. 'T^)hhKq?`$\J*F !j)Ű *R-ğz Uv lo?`b{T^0ɫ-5Z:ڮZbœ=Qvk@1&S qi5baLD/H1i]F$I$I$I=m3DO6zGvze7YeYF޾$?k7nhm3(֟W\,zA0wn@qn@ :Jn n!`=n\ij(硿#_kJ!v"y&bbǣcMxlV`̢I[ismRu w7iŧ.euIA\C+*ƧjA0g 7 )E 89SFFT45(05*]EZ6E aD,8l"<4kLj-ZC `-\ ^0m`@ҝZꔯ(ie +@ 4s{؃WedJ)H Dʁ>,݃`YW`U%3F: F`@4O- {tRyMƎ>v,6P0J=rED 2XD\Wglx 48h@:X@:Ht(af8"s >IR=(JO;Hhنe LJsSm5Ѥx$Řg^A~B<3.^2bV!!M@ f@8^AO&$2%<80eؑ`9^-hQUF^IVpʼڮt\NEJa嵀:qo21D :.ŒKʚ:0 li**X& fX^y_>ԛWm4!G4|ld&p=>1d8j @`1O\* DH jx!xTM (dkd?+e)Zܜ{$AY5meo7,q6" ĜL٧v tWO,NXCO" `E7h197zÒt8aWH@w "X @,*,0HaGB=)ֺ279+ 3cN5!NT:tC8 i?9ZUDFr"" [@w9{/ 7,`0ط3m-$:HZCB MvRp!3"MmJFHNFJQp2h@EY3*@"X%1T{#C>6ѓF!`d؆e4G#`D@)uUd&ǶP@n3MhLLA#/X8̊ rr5{ځ*n3)"FF!K!^ 2aP4|4:  @K^b|D-j !YF265!?yX˾I+\xaa#0!VB)L!pM M[0bQQ5]JP,-CۜH'TgxdQ^tc@)BbNXQbQ0@wPK+}A `XKo$#;ӕYkse-sNpD#{| )]#CBFjcaN”(!c֡U:%t+8oHR.5l`QNZ4 RGM#AJ5<(aP0xB5s8=褻LnVI T".Ɛ pzW}(l֦+qu YTѦU@T}Z\6#[Y͎H r \g |P #bNz 3xX{@a߈yVxUYngLE J!B>&M.SL鍊; 9 ~ }0F& q= `R$/Uar} (fRdb`Dyc"_¿3MuH-5N@?`);v84QQW14 '7C!@91.Y q SDRZ@6Li0"T01I$ 8r$2 hh@v8Q5!< mB>NRLQOG3xGH=˃pG rk"?= yVb'PDl /@s] E@v2.CLrDG&=0)&UuLgB[v6ˣ"a!9 p"xwH&02DLpDa'p6rڸp,$r94uXb)桬oݓrCc? v"r B 6Q?# F ,q08^L0Xr,f d&p29s?pS3 9Y q BqI"} P|s{f> ZxEF$" r'eG0o&%L?r^1;Hx x`!(4B5rnOf~H/ǡLPjud!5*W=Q:0 bK d b@Ji v@M:MQ]/g-oq^%e Ep%!҇0 k}p0^NWӒaMBInW3(z|d:[eu :P aPaPQ@x1{v80&:GmP-ʮኳpH,lx6FoA_k\@ pT@fX{h;CQ,kc5+0pUlR=efuFb p{lk)[ <kaۣnmPEAH-'^0LBf49͠vE a5xa#3ǁ86b#rbⷉ@  iiVej\CX+z'Qmg>1`0t(,Ff}'f= z2TN҅e+j0&@!l\h9r5K_, :|q# )g[1ow@!A[G%d 0PUgӍ.ZJPaQtenЫ8)1i# Csl9<, (^T,sTj0pvq  [Q_&Vekl{FGQSs(m!V —P8C}yf/aZZ ,_=ȋ3A'%3&Լ@94ihS# (p5[Q 0E4!Gt9!f0v.\&[J'gOJzQx&^gpyBW4$?c>d8@W`}`P"DGKdeA`#R0 {dg"`XNh-89u9ڨiEWSMeGE`;!D?g qGt:[W`"N[ TjHo6-v(imc'z)@LrE6ʸ-중 $11>79S63DLS3Q^n8{(m^hLσCqL !_81`l@ 3E4&*ұ]jO # bSd19aCkEP{aF/g _ނך16n![S.'NPDrr3%Y&)653#*!I}R7EXX6L"%*8jR$69z6m@)F}מX'S@\hflcYCmC'hjP7sFH<bN]6-r S% Q:"Jo.>ӣfSTq@ w#Cn#KvP^C=l@qw<&@GCl*AБe!BЉ"0L xC"{$Bt"Yqwmirr=0a$6dSdX\9tW=5 ,BCkGKACP05# <#nD })3<:zrUY3i >N8 :S^LB1-Q@&lr cb[(e & ?A_ߑ>HK2as=A^`h8T*=1rI~*BKxIS!*l+-G艉-7BqRWюR[O1i ݃/zE-9#rH 0^!?4ro9L$}{O1_Bq`Q]W8 C)sv4#S&0cs<_4!X ] |]P:v>Q:=6q "6(I*+k{5ipQT"1+XtABcwFH&!x3bTO$ `9qA\@ f!~x!GdRd6O0,8A0PE . &<p|(3)#!FGH%I , D"#e弤5ӛ 13I[!mP"!Zf}DŽ)  !nsBP w"fpPbҬ!8(}14Pmdr1 (,M=h|y   3  h@6# Y͔!㌋ D Ovٳ^ 4) `@('pg$c5`hx|qev 72X}31 Fk.2-abz1܉CZ(/pțe3tUY}l?1WhҰXja$\S!E8KɇOA`R+ m2ppB;dRX `i)„/2%jT@c8 /-Adq@l( 17cJjcB@h!Vb 7@ ,~qězal+2:(xIa ( 'ljG/p!Bި (eWnʲt XFjҎfA@B<-`AKQËE[(7YXpi44 8kF!#￐FSVL`2LHzYH`!G5\ʍI*R!,aX #Pl(U0)xa3;9/_6˗⪯E[, F jXtAiEH0Zˠ6)!|#+QFiꪢ(^#3nH#U8u5vo!~*#N)?n:fc馔2n(ιO֎pOd/X@8Υi c?40/z#5I+#\_>櫱[@4ҽGŵKbowE5ϱi;jghT<ʕDUC"FkFԨNW NVpDF$``eL!8B5H)@]?86"g ys҉3i|@WxfL@E1 MBLx#"i`812!KM;R>\Cb0mK0!mC{[R4Hz _KF6TMY#Sa4)':"& B 7P*3p+~> D8†rt[*琦܀G&//nWƛJX%ZxxH :qu`Z(:Hvj ;J#ly炈FALA1(!7%T,'/q镳PM AoN C‰xFo%I$7PMp8pU#^ƜĽ. (ipGh0)xzE)b{qibG-lg-8R\8dz%k4)n<;ll 8_PipOSȠR%/a ɮ(O8Z7<] p?~Ӂ\) H#JIhUpf` Ix̒StD&P #MDt;R봃]Lj2 V#.1= a1yTq+-۹vg̘ YXq8/l:_eO@O\M(5R b#JŰa6m)m uC,~ <JXr]V!ygEwTE,>!qtTP)-uݵqTA)#b\AvpVhI_;uθ[Ѐ) W#b4JjuC6R rT'a9C${sny3tmIP81Gńs(aYvm=۱Y3dTNJNa=ѣN_GLXP$3 . zG\޿EFWM[i=яW ?7X.@o& $Y;:*!K@sQQțl8ʂkJr@,M K%Iؾ PX&3ȲVڛ˽[j8-QԘ/3-c/bfLzA'C) Yq72;ڛs4h73%B"Wx<ə-n( [j4JmQ:+Xx)ӳڲ91suº 9xåb'#H3A0iIx!\ND I=@7Ć ĥ*:%94|E3/LpR=)(!F*Eu/U2 )/%C^1ن +n@5(7GQ P 7I+p (80:Il4+#&i,M9JB D%"S@qh56<ۚX;ȇX\H2 P8 sE;ZM^m#h[ +hȩ ¨t0y"(Qbܠh8;1Y3&3ʚK5#)QP%kZmǸz)rxeQuI qz9Aq? $o!c b`"= 8sY岆:,)EBTh(0 ))B Y a{ZW\j`pѡHQ"qS0D* ӳͷ.V3jziN08K8/*HY:(Y(e:j#,JQJtL\ӰA J$eWrȉ=[YP!pU3b(р:m0:L գH*'~9s[̀ BEyي>V2Y >@8xyq*#`m1[i{K^4Pp9 ZP ycxdʼnX4؀*C,2O0 D`@S29Q̀C IP9`\PYJx$$0Ks**L`J0J/X뢤!aP%!BӌRJp ڒzHx܋ 2 26uЭZjs`3ʣZIG c"7É)W4ר/Pp+H`xm*Zvz/AlڇWehp%{#V0QrPHݬ I019 pQx]G ܸ7XJ*m EQPP،[i- T#WSֲZH޸r #2F_<G8՜x-I6-(8m*Tb8_`XJ`T0Yh(XȄٖ>:9KH Th`X` 3CvT؂X8G9i$&Lc3P6 T. R<{5 n7T=zUC72 (-3 IsØ;vh!ZCTNLY`PvJԂH68T02éNneXeI\DxCL/ @dqb؋PD0HJM4j`#Kxv? `;G:QZ\X x(Js5$r܈ڛm9HIѿ\YWAP,b1 QXt-EX ^8APӘRT-U~euRޫTIWf00H8rujiîC?xIy sJp_XM#ePep0wQ~2!Iؔ6kx  -Bw8,! $u(0 vA?ʨp,״pPEx% ,i f0 3 9^,E10VcaB1m%jjo E's74+,zgh Iies BF+=js )Ȥ+뙁O #5:`|^5ӪBv=ۮ pdRR4$bJ#?GPX/) eISKQKW+ሑZEPuHx5uŬFvj@pa? (ohrz,io.(sh90B8b|9Y82qExo=PjD Oqp(PxGW]j,s&h;SG1+›.1XPq'zviԤp.] N*,t#`!T*)p7 {xH!K^Eiy }%AMK X(pm,4 T虩ӆ^o VXN!i&`DH?$`#*C[nQkvP(wH*l)M)1kl9X-ـX1!P:PJoXh  7I Yy4(T5#DMT!Q 4p .Ldt .13Q:{expRFZOM`#}[`1]! vM#(ȕNH``mq DKpK3ddy[0k#9q4pX!)#p 2r F `H[nTWׄ "hO{&m=PeWFU #>"KcVt@uʔSeʵ.1f]@ycKA!P*a@*!sj>Edk^f\@ImxpqfŸEh'0QC BD=3@^˲@ r8}QKqR rG ibτ/30rAyj/D[T@{(JR &(|Un'bB'Ĵ' 1@!1 rȀN%Z`Ȍ(<H ¢  &Erdg3 R@cH:Pf++: 0(t%AP(gH*"25b M<ÂWGE$֓fc\.-<*|q ppGQC:|$ ![D @ w8C=cL?U< D ВB&Tl܄a=sZNCE CIRCULAR ECT SingleSPECTTEST1 08-25-04  SPECTTEST10@000Y 0 00 !CE CIRCULAR ECT p3334 atlas-97001  1.2 0CE CIRCULAR ECT P1.000000ADAC_IMG!A 2048\131072 aadac01X1=L?mFPRTV_ h q   RS K'4(6)8V:U<1@0D-HWL*PT_ls|$n+ !"#%&,oT .,/024p6q83:4<5>6@7B8D;H<J=L9N:PAR>h?j@lBnFpICDEGHJrSPECTTEST1 08-25-04SPECTTEST1A-'A-20040825 ufs048p01CE CIRCULAR ECT9 F@y9#q#k#kufsNMTest Lab17:06:55DP00PROJECTIONCEP`?Singleatlas-97001HEPH1.2Tc-99mTc-99m 0SUPINEH?A ?Hu0"+NhNNODEpc_atlas1DOSE1.553000 0.000000HEAD head1HADS head1CALB0.593310 <65.2.840.10008.20.4.56.112.48.49.524320.10342861.526813.461 @65.2.840.10008.20.4.56.112.48.49.48.48.524320.10342861.526813.46 CE CIRCULAR ECT  0 1 (( MONOCHROME2 (4 ( TT TPT(((03.251014\3.251014 (Q UNIF\LIN\COR((((((L(( L222p@@@@@B@C@D20040825@E170655@P20040825@Q171020@R @T@U@0 TTT0(T T122 T149 TD<T4,C-163A8 99SDM Tc-99mT T!T"E0 G RECTANGLE HEPHPARA 20.000000\0.000000\0.000000 761.000000\0.000000\0.000000\0.000000\0.000000\-1.000000(11.460000\1.460000 (20\0 TPTQTRTL@CWC360 D 90.000000 B30000 TST180 TTSTEP AND SH0OTT PROJECTIONTzF-10450 99SDM  RECUMBENT TB:F-10340 99SDM Supine body positionT6.G-519099SDM  Headfirst BJW2E9=2 8 _ *  @F F" #"H]EL]d^L"T  2{! #libvips-8.15.1/test/test-suite/images/dispose-background.gif000066400000000000000000000165011454007373500240750ustar00rootroot00000000000000GIF89aBē1խ›\\\---ങz̙3̣))!rffRt'z\֫˪<<qq[92caK444###ZWCddd# GG9::.LLL;,33)~a[[IĭDD7gbF"""?:&222l999JJJDDD  jjU! NETSCAPE2.0 !Optimized using ezgif.com! 2B,BB499.< A0 -%4$3605A5A6-<.̣T $ÇL6  2jȱǏ CIɓ aP&!1FD͛8sB XKcqpzb1A2JuZLFDUÆ=P V Dpj7Zc?KQ*Eܿ;mn8#;縫0h]2^,l6$.D}x9_n6ja5-iu_#8YǴ;+Q-2xYMmTЏWx aO_n$€\]7v̼Nje陳K8O;h<`dˀh3oIVhfv {,ފŇ3vƢdT(F⌣ލɝ!;8 %hh擉E2E>9qLfɐ⤖qI^n_`e1bQkmf(g6`9erWLCʢRWV(sU 餋@liЗhꩨꪬfXB jEm!h뭸抠sȪ+-- kf :F j2v˭7,+~@b.+ۦ+xKnī p[/`dAApP޻0>lq+A)3 (\H8`a{\xp9LXf%g(+|ʎ.zQN| 1"nc!yh p#E>7NqlK!\ F@BIqClI$$"E,62Db%GC:,#Z@Ar~[$IIKO\h"@e+?Ͳ([%t1 V2x($)JdVA2C݊EP&MAZ=~$pbsۨTHգ xV -ԫ <7VS}RQ3t ?nubYfUb+NMAlbXBE:"r2];f{ת4yc;iڙʳ;ebgWvֽƶ5զj i4lkJ(^ Mc'/bMnAf߁KoIE)+Gt69. IJQ㖔c5&]Ys7ToÆZS?rKR_'UiVV+/u 00ͤ .HXhR 4(ΗA1:+107`Ab+ኦ89 DJdO,Y^;vr(ZWX-e%/س 60M9x.f7/M+̎&d<9f !|&?o~K/~|S~>7C~w-_ߞyg`XmhXnE啀QG= 8/shfׁ0Ɓ"S$wޤPZg!ȂPO70(Gx 5i&uE* 6؃B8:/7xD鲄L؄I{1C8g]愆[mP((ehgX>`jxo]`%0fx|؇~8Xy! 2!,!!T\WUU c\ `ȿ[TPCڹ`\U]GIPTH#JHŋ3jȱGUP J3IJ˗0cʜI͛8sYeLoJ*ԵCHf$eP&uqr@իɚy$]`;.F!m1 8k bsU;[\IKX_.{j_\mw!+t>X㓝Mdl+㵗]&2dPH F(_ MؑDGw.ţ@X]a޵7qqI]^:"..u;;Ͽ?MĜYzc@$t|˩W Zg!.bZuᇽͷ_V"a ŧk( 'ޖb+b7"d傈1[M!cqY#z/FY\fJ bOSP%gCe\vؗ"lYft=f&o6tvgx$'}l 7葜B N3j6y`W q*ꨤjꩨꪬG\XnH=1뮼JO@ j!&~jJ>HS0Zk#.%[ųګ K'/涂 {x+B/{m KpK«,+"c 2q"wQ. ,0FԼ=S<3uJ[ Ή2о m.?4LۀgSlo:K6\ZŠ]P߀[s/HꦽƇGێcterDM 褗.CSxh;몋̩^zIe@gcp36?=9\#8q^hsş ?}rG^>S?i:|4K!FdmKKռs5}]b8=)s'@xUHBCh#U)jRµ kK W \‚ Nφkt!_bc  K D%]ₛm}T!Ò;D> h2Z Mf@)p{^B 'II?"y̤&7X3l8is FCH,gOT G6rPrj^+WL- 3$N{Y#%RNyT0Jc&2q9.B [[.;;)F f1zӓ3w cܟ0x޼Bi9P{jtxM&s|QY6TZO@{$$іrs&`ub,*Wуԥ@L)OPӍC-41 ^/Y͆y̩OjT .OjcĮaj>c bWߘ]kPǪ%qZD(ahع=s J0md YٹU]LD?H0"aуlh9fVk&fZ%0 *:[veUj3:eo{ wD-\LxZמ Yr1xRծG:my lo%7 0'lma # jxËl=PU#.O|bf,A,0X&*` ]\XS8`c< T s|K:O\+.[>&Gyd2AG4ɔ YesAl㙴zq*@?Zgsùf᯻?̀@Gzrf fviptFhPs!(clMOYl_]vG+U xqMgiV.ĴA vv3TںF7z<-z^=mzhb Mpd\ooግvnM=Nb\#'9XM6*gq|֭o\K}?կuc|\z򰳘ٝ}lzeݼ}mx?{1<ħPn!~J<1/m Axݽa'}`]vf&yZ7{ƿ~j|i />+o~˟Op8>[?G~7~ޗ!2,s iqqr$sjq)Mniqs)$rsnCfKr)%qLH <2pfÇ#JHŋ3jȱk(\6`:p4\ɲ˗3ɲ!G&33[67@ JѣH*]ʴӧEΜ `~R25d]{0 ""p9Cˌ c8ߖ17x4 x2dKdfT[,0\s;pvZ˩=Noyr%Pfz0c9ܤ|ɒ{%|jeHRZΞ_O26sشO1ffEs& 6F(NdG}=cL (bKx 4$ˋ0(㌫Hw)\ b#@ WL5:KlN UY$^fb*ؗL?iAlI[uygu$t=IdR*vB_()*j)wɥ}%ib:_LypJk\Vs-aT֡)Ш6KcI$qRbHJ#f&m"+. pgī 7 +`ĵ @l pob7<¾1Ftܰƕ' +0KL10+<+ (̰͑2-32{+, pƏ1$W?ܴiMk;PF5 P`7mhӽpOĉÌ4AQ SgNӬfMI`% vSrl\9멓at> OQl\*JLg Ћ}L$/ ЊR C) L )'1=&4ERb*ԗ*u8%$Ia hNӗTz GoJԦ~ҨGa>JU14iU:FbuwSXUF Uh%kYEVիk5VVUt+5OԻ^z+_2V4%,zX5lcXu le+uwg?;ظvMlYOB6mk[m[oK\w5q\.upAkJױ-u]Fok:Ĭywͮ{ 7fﭯ}_ꗻ] ` o/+ v,i aN1] oÉAIO!`Ş ;libvips-8.15.1/test/test-suite/images/dispose-background.png000066400000000000000000000361231454007373500241160ustar00rootroot00000000000000PNG  IHDRs pHYs{Rk IDATx{\Tu_e@C+ $К@ۦ"l`bJ˶^h7*q~%Be,_D+dP3̹xHuޟv|`ESSqŊ@Y!"""]]]?wwi& ^? 6ݨ!<~~~n333&7lڴɸ} b!,ؿ?N> X|94ܹӘI&a2d%hhh@bBL4;v^jܵkkl۶#F!* LJw 1h` DKK ̙q>!!8~8@uu5&O^F0yd >b1 gԧ7\{͛Xgk;>[Ƒruqs~Vc&O{ntwwnHb{׿7jjjjU&Mt̛7qe{8q.\~?sW%?@Allk$1b233ᄏgx'[\|2._@ B8jjjXߺu ==x.\$$F\\,>̷'|gFCCﺻa0witD HOOw8&g|2&N*DEEARٔ{xlق;wك'|Dh444 !a6::ܺůXत$t: sħ~p=a2_>d$V8n8!!a.nh4qa< ͛[Хv.!(Z0zF#] k.QPP 0ׄAXLǂ  ] kƍ_<7 ^{̄VEXX=.,`g),,DCC3 'Dyy9j5D]v#Ν8}4 V Iuu54 rrrD3W )((_W\rl=b͚55=bHj_i&<#Rޚp#2KfF999h4Rݖ "ɖHs/^X[@YY)=D76|)--g}tl!\a˖-Xnˑ" D3u{!XbrrrP^^ŋ % NNNg}FO~B effG(.>$H'4P0c]HL\("KA LaSK f bVZ Ā1͛AL jLCF5mc<_عs'TX oL84b$%% I17dO~T= j0PXXT:tuuhnn^ … غu+q-,Xv!FKK ֯_ӧOa{AXX ܸ͛ZOJPPx.>L T vorom47_y@L:g|}^w===?7\s>ޙ; V=uܻ{tફٲA x+k5+4t(Nރ#= ,\ldmhH-d4:,~eGI6.<|Ay ((ȁ_rkfsd'm^R[[F uuMXfM924aҤ2#_@EAWb#2PIG&N>/_Ƈ~h:_s-`u'4t(Q֢c!&1sthٲE`-]ԡySQ^S[[k|폗/_FBlܼi@tTd߷6߉S 4t[f2؆HN!Ҡ@Aw_)ܹs}] ?ΜGJ4\CBBZ[m'[l8qqm)}t}rcr- ** ?no?aBݞsrrg!C ?E;{EH3ݒcuuMxѥ&(-aa.as-jH ڂ>StwMX6lObb" .]*scUONg;(6Lk.֦k&Ppk|\1Cdm۶ax@QYYLԈz3篯][R|Ī1/n:֭[4iZZZo- _]+Pg_»PT Ӧ[mgȡCab8RVJŪ#Y×`Czz`5uVN# ،۷o" uuMkBtt 5>M-}k¢,W$X6uɲs}6dmЧ{"""'OFmmI,#hjj2Κ5 W\`=Glz}7~l pd.H7:)UB9l>e@V\I' `Whq-%e#d-ƺ;a5)()ɡFH e.H$Xd#ڣybTطo f~Ģ:&{n/wv)"3]H eUG*.yY%͚ 9pzlȾ'yrMK!T 0G21V|%%\&Qbݢ-6eKC1ׯhhP殱Ƶǘk,**,R"ebVA@FxxVFkΜ/k7Gle@+P\ )"[EqE*?зH'#ی1z ,^,hm f$pH z}7Ҷ#K"1-#rCbR-Nc ڛg÷6U_V3'pkkuM-[^HnEY`F`0La܉e!im0wQ)bzE];2p"=!yT`P %P^~ŧ[>$\7#[0# xowHI8#~LQ] sytH "~H Bfix,=rSC(H/L$|'# '?|M`~_x@ɉ!~uׯۆdޏ{?]{l`RHn̙y9+=oYÙ3g-5P֪LW[8 Fz |vtttaŊo« F%K6Jr_OR_V'yyyxKhG97Hu;z +O~{ΊR&/-kСxѸq Sк/Ɠk F9M !!KKQ\r}sH)Nr&XFuC&rkhmqГid&/[Nݡ!'\2OKKcL|/mda^" ޟ3w!waO> c`}gМX ;7S,v~6; ttsVy1&&/5߿Nʞ Zݽ b bm@7l} zz !f'"e rsWSػwZ"[׵37\}~kv ڙ@)hC\/&$c^}~x#'7cd3?@ps#))M R 8 @<?@IXuttQN r 8\^ߍH*~ 4 A%(\s.b xdAc(E@0C~4YƂE^߭(dk?Qړ DAKP2X׫H.~ :޺$ۺC"~ bw?@O7 HdfU@6Gl Fؓ dcmزkJx=X-07Av92XyjM07Azz6bO2! o > !<FZm`2~ݗ|8z3!\11(1HOx4L@'6 [Ox |Iwbsèh999$~;1޹A'      ofsmmí[r9EVݍ#G-|l;7HtuuR ,< }>/{a-c… FСC(..Fpp0ϟtx׍EEEϷ.:u ?(±m6^z^ꫯ߭Ä |rk9AHȥKw^|x2/2&MZ+ B$x[wu}]^N3 СCׯ_N^u2;wPSScs}刏AKO ==0/p +Vo~zCq%̟*jTKXn0d|X` Nxtw$<;b֬Y(--EdCx""##9f,'Nىeصk Kwxxph4@zz:֯_H{EJJ :;;u V7xyyyž}Z:*%E?!K,A^^ GQ @'d…xݽ};M Ha݂GA @'$..:]f @'GźX]OHcȇSOdA l!RBT.7rpjl޼t-00~~>]]]ظqh3r,0py`Y^3> .^hZG}Cu!,Nqȇho9B_amo@7P^Go<%HOϖ B"نgZVOAuuZii%֯3ng?bS4 6e|s64JoQKY--aq+Kβl"e!QGAGDGdg,bVZZFk5sPWwF 3] ?se)(-a1G&Gppr 0vX R߾cZb#С}11?Iى :ǎm0A{{yWte;;;qq&/ >\vX Jׯw"..FP^\OQ(.E^*ǎm(k0klyy9EƎ S[[kwϥK~Q'f\YRZ)'NիW>ś?%i]0` D{*^MX:skk}wnn>d3O̦lx(TWE| ӵb֨O{ Ӓ ðaðd@mmPU~G_xEmXʡO8|k/6WhFZ+fKy)apQWW>===>}:^{5B^رcՅzf|cc# IsWL1;lLP_ߌ9s^vRR>e:ϜGl2Ch'ND@@z{{E ۷oӕ}3gΈ(6rs&3px ؆^"p`K`J"epV\#[Ӄ "88ؤ{ȁ ccOUw(559Sk5LCI)82cܟ *!!qaDFFʮ?E{O٩ْ%|Mؽiiy6BChqa+ˬbJ`{qn(xڴp@[,XF=0&j7[ eesOv3 b2פP6#-TS QzwY\C޲Ƅ|}wz[;d^mk˶CIqHp8qcƌE Jj\~ҦlT7[6-uuxkGkR0^k4bJ16f͒-(.0(=p {իVm)6Djͷ,̓󄽴8$դ"#vlh))zcmŴo{yE@|l|嗒FFG?< rEOJ1Ubxa L9ץn \elj;ة?!vQZwmo,7[Wܳ[jO}}m&'Q˹aDe ..fć(ÔzáCoaȐ!HNNsSky #emK0[tQJwkymToFx(^oFTT 7u@+`KT!3|isپ=TUٍ:NMt^Z<%%96dQQkC/f)((oݳCbv20xk$l7$''p>MwKHaa{0y8NIAh&t$pkk#vcǶKjs}C"[ۂjjAy7,H)*yyYMh' _!McL# (ruI!FS݇+wmɘ?MI0JKR4Q"YH /y.'(Oy9\~\9RG3,Hh*g c4@&Whb 8gQRN0g΋ F?X9yg.c#"Rs`^>.o [Q^~pzC (C 46Ȑ9i„ ضm/xl%u~d݌.L'!>/6|ٍ--@gg'^{E`PJ$PvDW`ğ,HA>-2v\@ի曫mرc:uΫ (JiiؽβfCg yE CIx'oksG_PP ;v,>ly@ T9ˢE?ǜ'~ ⓿w Vg='Np]4,ťɾI6k,?LC=Zrk We*i,[*ߏMW]=fk#\7T9w{^ų|H &l狆fˑHPP'JP ڨt13CB  n-㽵Q<TW5TA`AS0 .!+|Ø9SLȄ dkv }'bE 5'`tl=\P;llcd`L0ux0E<will4Κ5KR}\Θ1c$5<nT&6dAlxS2! O1Ʊc}eǎk5Bh3p_\1I{ ̻=$~q'<>&'?3 L@' s$&>F''Nq~;ill4FGG x                  x1//d1cqƌFxƫWa0[,1tPL0 Aߏׯ믿F{{+Ta_H1޹aK@`` 5k`Ȑ!r hooǁ0fŇ?ŷ~ ???lٲOx,1cܹ[|#OxK.E{{;0 00&L ^c={0`ذa4hM"7gb„ UPQQvENȻlgg'*++wPCCoߎgϢ*o)AHHHn2bƍ>}:y̜9g|}}MeBO#88!;C XjVZT>}:^~e7&8444wşF7>g!fܸq6my}1tPkXt) $׸r i󻞞u𮋗غu+>?EMMCTTT`9ݻ< vEEE;w.:0{l:[A𢢢))u@ ++˩z̓` 0dٳ `Æ %"DC")) ==l޼999ͅ aʕ8x BBL]W%47Dsbbbp1̘1mmÇr233aX` b>|8HOO.+VVEHHbR] kPTTJO>7nbƌ8qⴠsPw9s&JKK1w\ZJ[JCC͛Jh4;T$b8G>|8;7 tu ##éaN>I9+Vٳhllք™6m:F#=%5@bb"*++.)oM ֭,d`AI AC$? RLn? F\\kD5p `ƌذaif?*Ř1cZh&W\ATD?O&W\sp$~B1`QB0q&bh4~Mg&XO"-fVŋ>V@O~BJeHMMujˡ[ZZd 99a8|0=bbbP]M; i1%''c߾}Y#1cD3 BX9$7u}ҌD[[&{ተ%K@Rni$$dHj7;߲lkBYY1c.~ 1JsL8@ 773gTl>k&IM#GCI@!>~O Z[ۜ* cƌܹsZgڴi &pnVEkk"'ŠǀD9Ghii8zt$CRVvZQnߜdk[9:}fthܹK.54/C_R/h2P\| II6}~^ul-..VEaa!\z4 >B=J!)+;N ^Ӄo0X߸玐 y*;a#16Aiii/0<`ѢEhiiAq<$b`nJG(3diF"16Ѓ /V=7jjj0sLl߾&Xx ,35{+ G-#,Yp(DGG'h9s&ۯ<ņsp|Yt:9e_ cƌ9y$!?))ߓ+17dbc"<|oᓿ 7tn.D E?e~01cdO涣Cd#'mAq{o/2 )~˺@0ݡFYcw -}o1 Y:⏉nܸcJ]?cJ%Jqrr1AhhZZ~o1`Z:bg=] P !}16-g~r$ XCyyYn-~8sfNob$,#ttܐ|!)`caJ?@Axl&0mkjճo 2똛 &rIyyYvk 2r,4xƿoTO~J9^6!EbiSǃxM2"k,4e~3x@&F{.;$O~9Pp!"P$4O՝ϣ73XsH'hSRis H鑉iQYd9uʕZe:K[ kj +|Kl e\Ĝ +M[ LH:|\Κn1*>NZ>yO $MA %0EAz%FwqD"Ec ؑ\E#CltXD)I~DqRJ61UքeH3Sy?lQׄdSuiQNP5cWz 6رd˚=6ڵlۺ} 7! ,dd猏ڋ޼H扦ʶ L ĢL*̦3 J'˱y>G]^C<[r@!C8cxX&Cay(((9IZzyj ;+[i+Acw K!,Ǽt&$=VM܆ŕ0 .>N^n~/?O_o0 ;libvips-8.15.1/test/test-suite/images/dispose-previous.png000066400000000000000000000045021454007373500236470ustar00rootroot00000000000000PNG  IHDRd,5 pHYs{RkIDATx[z*Ez,xdOt -zN`\T(> O(?a{{1Z`0DK 'WD1BP%'D#ªRbx!FLExWbL[hn8H 0ArBVђTW'(EѮH[Ae"ZʩNQ{Y /dT 9QFQʜeT o>$`dDxHˢo {)7:w!}rEFP][GE< aW5dť`uh%l!` agpO-co!⸩kY awGX0~ OS-dA!`PA!`PA!`PA!`P~svY`PMDO#q5,0l29gԙmөc33$eR,d ~YIO5+)va%G#?I7̼%FIBϜ,0ck΁.;a\q!G6,CB)n9,@r!S$%&aS*;cXJJyrtYKq,ܖ½t #@q<?Ofܰ^RYa@܍ *'q+"`Ƈ!J WX Ђ/0 B0( Ov9$>ỬmGEc!_bxGX:jG京e*e^yP wu,P߭Md=X?"HEXRtBhƭ2/DԬقzIʜ(^Sc b-mҩc~Lk!3;Wkx6ek-F‧CQePq D-e>bBYAFYj 7fen2*R^ZIRҕeTbl~k ʿ:*eI0\BN~Ա>IXܰo!#Չb1ۼ[qDNq7r  qB0( B0( B0( BiZOCY'b?IEY:'EMDQ'qC),vbYNuYn{b` f ١/:9R?CVM? ="E#cYe.C!#|~`lG%F$) UI0rE &YI?z- ,1&R3[K7Xkh}?GU!=Acs렲Xǩ0Nؙ3f/;Y!)mHms H(O܁.WPfUO$xnKr<-8y?! @8!+h+r'B*(bf|BDpOH 0-Bv0( B0d C:q^T =!M}忩x(Njn]֪"ZʑH]F)ib]rM@PN}uR\sTtBNQq huRpg')B()9[v"ibIIKϸf 4 e|A.yJnـcW.V,z o!(s (`=ⶐ`p:o!S]k~~Ķ-$mE?I+8v$? 5 ( 莫ƢUd\w?]껲= AGW򕹊ygP. xBB0( B0dy'prdC/$~$$_;_$Ņ.uS`-BJ OCH)2)Z1k$wXCkFc@Ҵߋi=6鲮|SOwU+ h!tMx,h^$Wb'௦7XpHM&:B:ul||he&>|,d~YIO5+)va%G?I7̼%FIBϜ,0ck΁.;a\q!(i)pX2B(m9_Vҝ8ҍ!'Jq^hj|')yJNita))9en,ųp[; )̏G)T^RYa@܍ *'q+"`Ƈ!J WX Ђ/0 B ֣ҡIENDB`libvips-8.15.1/test/test-suite/images/favicon.ico000066400000000000000000000163561454007373500217540ustar00rootroot00000000000000h6 00F( |VrW&[w].IJfZ:vMW7v[+X7^>Z:_]>ʿy_/olPrV%ZY9nRbuZ*sX']=x^/˻¶x^.Z;aC [;bC vOX8Y8cE77$  $$  $""-1 ## -;&=33=&; 9.>>*'9 $+)0 ! $$82<%(6/28$,5-4::::::77( @[<zRlPW7X7]>Z:bD kNf9e\<zSpT"dFlA°aB [̽rI|Vz`2cijnR bDj?x^0rJX8Y8aC Z;[;cE˻`A YxqG\=pU#y_0bC v[+irW&ƻ[;{a3yRlO`A tY)W6yY9òwPZ9j=============<<=============================FFFTTFFF===9%g+CC+g%9== ZZZ& ff &ZZZ ==:,jZZZS##SZZZj,:==hDZ80Z$::$Z0"ZDh==fZZZI IZ ?ZZf=<f>'ZZ4Z\JJ\ZYalZ'>f<9U\Z/eZZNNZZ2)1Z\U9mZZ6BMZZ3*ZZm<PZZf^ZZn5(ZZP<=f[ZZ`]@ZZZZd-`kZ[f==7SZ\U99VZZZZ!f9LcZS7==9HZZf#SZZbWiKXZZH9==i; ZZRfQ30 :f_ZZ ;i==AEOfF.fGEA==:f============================<<=============(0` Z:klPmP·̼^?Ǽ]cEpF±gJZ:bD uZ*j˻poEfIgItKY9kNZ9~d7˼zT]>i=bC x^/kN~d8lyR\=]=oS!~XaB sX'fHsJjM[<msesKV5X8{b4Y8|b4xQ\<ĹŹ}W_A tɾzv\,iLza2[;ĸrrqV$`A sW'u[*dFdȸ[;~f9f9ĸ;|V\v[+°bU4W7X7vNhxxh*aaaaa**aaaaa*NJ,,JN3zttt-**-tttz3cBUrrrrrV**Vrrrrr Bce6rrrrr=/rrrrrFe*rrrrrrr|{rrrrrrr** rrrrrrrrrrrrrr *ab)rrr$Grr~cc~rr8Xrr)barrri`rr"DD"rr.Grrrx@ rrrS?IrrrKKrrr'trrr @x*rrruZrrr(&%]rrrJprrr*\}rrrj* rr2442rrrrrr}\cyrrrrR^rrrqqrrr;d rrrc,7CrrrfErrrrrrpsrrrC7,xa:_rrrM&*aOrrrrrr**5rrr_:axrrrwxL}rrrrrr"k*rrrQrrrY[*rrrrrrWa!rrrQ*NPrrrvaAorrrrrrlaH9rrrgN*#rrrI*rrrrrra0rrr#arrrrfrrrr arrrra,Errr *Jrrrr<*nrrrE,,7T||>+*m||m1@*||T7,*a*hxxhlibvips-8.15.1/test/test-suite/images/garden.gif000066400000000000000000231755741454007373500215770ustar00rootroot00000000000000GIF89a   xdA6*fXA-%Ebh{NKl=mҚEFN2N" lb_bUB<:gfcw{oGc/FU954RQXJHPUq>srf&"Uv?OS:`cg|tXf[L{r&?sj`\R_jTEC=\|Bols֌~rhiqw<>@Lk156NNIsȭ! NETSCAPE2.0! ,  k H*\ȰÇ#JHŋ3jT(M Ҏxc GȆ9߰Vi  sO>HI >qLuj2&~eŵ+ש[UX5d˪Jj~{VAxݵ+î|'yjtS\Y7EqH(PL|If2 )mu}(\#im(-sҤ(nɬ'WgΆH/#Ez/^K7"]'͚_ x=ݟP6Cԛ!޾2+8 `qD2 &hp8i2,Lx 9E X1h8,F8jdGdF$m]i$ucflS`rfD2[o֖gt vYu5\s g)!UGufdx'xe|{ܖO`q` .n1HnX0"{ w"*@G,Wlq&dQG !1%G\rlFcXqϕhSPAei{IR%Q]e mUeu\xuץBvbe. UVeOj^(gEf(4,\:mc/ڛt"Ѫj`u˄x360,)ɣ٭QǬ}≷馇!e_ {Lp -xb-v+ *$!WogGHÆHAfĽ@/)irLG1-(LXb rPD%IE5`/DҔ0h{ )b:,Y\d]L(%QQKBIe:L73QU D0l`c87!d6-#~c4'ZUkS|sӍnf(FZh!ޓ oy \zГug?]֑X"Nq }AϺ "D`f iy3P=L{ (GIʌ|D$! V / KW kdt`0s "CzR'""0 B*,&>l`аp)WiYh%OI յsl!\`f)0 bLP-3?TL@$H:T!37"8A#hjR嬓~Yc|ڨ.)N EX I4 ,a.zQʲhH Jkĭֈk\їLIȥL6̗II# @%G, ( /@CY4 L*\)K:P /rx:  Q@Ta7:**TLA40-fFժLjэN÷4)b6LapAlq$?ccэ[΃l'Rw' qWkc$_ԂWxJG@U !(* 9!/y s#3Dk{k`00=;Ў6Ehd-Fl)ɡd7fvp ªH$H'MQ Ci@ 2B|JƦhE,`yex^p]^g;GxM-m^ Eh bm*SB=lnE%5G+ACdžyߜ&X[$n> :}Ӣ[<}OEQ[@zXx7X^SCfAA#0z Ng$!%}^)e\Pd@<8T~E>#א?S>ASJ?Yt-`*C[}2 =!cNKUjR ne&%9Źgn5VUGueTnau]ԼjRx{f|nqD/缏5}E*?]PkACi@lUuUi/Ld'I RwX=cbQ$:vn)btWTn"!nxcnFL7U @di&Q&`!k&^p(SNa[1fGB{a5{{/$}A{}r4d8+9|I*PUhh؁7|SEƢ~|h;qcj$G!TP.Xgu!k<`RH$rIq6!"X50#  `%89C_RdBY"MD'd&Spt'&XZ[5P58f) %w}/}Ac(S9Ś8Qk1RwQ\Y_D j,ǜ ")~ f=7_;:yTۙ;JEl;=!iC<,2A0EI1yzhnABm3$e$*qWKc {` (#r>'#~%@H P6"&TQeEr"t(j05|q;5"6 AbNj[J2WjKצ$xsPL*0 `(y9 q&OYK2y]fY[DNrbq+{)q6O|9iy BL! A Վd.P {EQh\ |x&΢3u9݇,0uZ.Bf-sj|p*|rasc{28*G[was~8u7*)^ ^ ]jKtiilT8 zԸ: 2+K7c"ViI!b/30\f}=5;_\mțj>su ? ?tpl /|*z'nb&lA~AOAqhqGBjYJ(c5CW C1| 5+Qa&ʆKo\Y+5%]2˹:>_jļSpJ1:/akW0V #2BY^K7a:#P lE,4nG!E$YI)UdK1ex 8wim.(PkIb S_h4Qj.) 1Of%kBA[l(01ׄyU@/5we'\75ڥƻ20VK/43f .Ė5HSd`̾H|LzJj2yœWhIlG׼/\Kĵ֭g؇{Pd{'O,[F>QL 7dP6CA`@iF !llBL/p-KG"2W 2hW^xЍ ,Z(Yv&V4 $iH"4H$TrI&_bCZE(`)ZfKvbc'0yev,$*I,cy4!i,OJ&A ,+K4@LJ}TSK/kR4L2:S@Q) hkΫ)Vnj`5f V8@q[KF I8BɅ,sy^sGE1n&niIi4CLYJvDP Ԋ\*{ X:t'Rs9g ˸>WhQ';R:,W-2}3(eGw݄ %B <ًzg{Q i1iXfq1}ihA]Be-myK#^:Pr*(<;-i  S`6QEnʛ#RZ\FoP+ ^_ jlj؇eʙns'er t E)|R`a|RgM!<\%?κETK׸ 3mr_^(sR/8 6yfK-d rAљ!8zE:%z!Ų:,+kҏ*YnK!..;3 {G sG:r 0.C`訍d-ia^zڸ-&e:Z0񡒬v p=|L3#4b `dFPPdb,$q2fP(YbdBq6S _ٗr3.wa4#$4bR;eHc 562_N:ڕrYؠ+~P_Y= ȧހ LӺ:qd f,D jFO{,4>өSݕ ڿRPr|fHaQ;S;/6dIArr^ ܌^!JCX}5ztqT2 6Jt څv3[JQO )-eK/%jD4n;*aEdB~T2Q Djߍv kv _֙CPa _tznreXC*-|Wy?;ɂuBI*/f 'יUH -z rKs桾 9gvF]eha`Y~ ܕ;ڢQ{IЛ е؇ex WӤ4A^E_|ȫ:%0Jh,jsp02>a %;l m4&T$=/5HKBRNYp,ys-2B0EBgHC瀏/ds4^4ph"=lH?q ["l9 O/J; ] nnHG)㐦sL:ZXKEQ9:1ZL 4a fJ_lJ|# pC>JX{t y72kƵ&1CY GTآ=ڻ-1+˲,,GBrԍHE/"$dž>jTt.؇<Ė)?tE ;2}$"C8[|-d @@@=3:I|Qi9I밞I@WLW0a N ϑ8FJ  0L<)mDBo\"!,ZE]A[3hH?˳X)jj련̎JI d&r"JDi">88oaᠴa!psqXL_K (!q? \ӖY̞ȞW`ِIt%@+` GpTO0 .bQ@ `GkZ4yIa)TQ QЀ 6I# pKb_IJ"ry)0}$Y\(pOH=MX]XF`㒧H<v\ G7tFLTMU PM%-@W-DU@D½@-2>m ?XQ ӀlȶiPRku.k!Mձ9GD?X@2%PH EȪRK;9yק9#mɇQ0Y}\]؛ J "Y0AԧY9Ž ](=IMBK=Y˺8 t%Uu씺\4ْ33qL0r[̜5[,QjG2:0 ?86m%ݑW`M:735w5qC7 \C,f8Ypk+:.=Fnʼ; 6 `:1νبهC ]HO.a+`vۣG!Gڽx P݀ҋ(܀eU#4R?Y**ёQ(13>۹4[UeU c(|JLs- ߾Vw!^+Ql2 "* %1ILdہPHOEbPv6#dϼT\ɛϧ1 2yYy" YXKHK2wF̬vX  x'-VM[@T"R2.Cɐ3 ]"k߃s(k>4%^k2/?aIl&\-HJh!)h6\#@ %SoCP@- L.LN䈛7+zF Ze6h! \)#1Gy8f4!.O5ԅi’x\C?5NPä#!Mp!C:ZLX4I41$\^Ү$0#ЎPThYkC80쵇8F]9H<$Wr_aFf] ޠ5yF(]-]Gxs'-^slKy0W۰Zrg pÏ 9$_찎|NEZ ?ہ1C997t`h!DN,U/*J)RgkJjHQC(^T -a`XM#` r`XvJN`]E0sIeBawxҌw# ybdXaws兌 <WU/p ژQ\":jpWQF'9J m9C @RI2Gk!cL)?INDlY$l[5u}*}0A>E^ e'@IT`e4ЁuXvЁ6nJ1rl0s˱݋ s\V&lB x-,!p Kan ,SHxŁ^">٢˟Fht[x>Cu)~VYNי|IP Î.?+5mhA@8^(1S#J"~]r)"Jbhppk]zz&GX$ߥ$OJ+ZYXLȼhG; qP`/5%<&\2y>AG7ᦨ豣!Co$(Er)ZF"$[$$vlyr |lҤH2]f(ifilͬnJLծ^؊&RR`_5̋'d&tezM-[$r_z6[ĉVl'Hl@AMQ7NfOB!S6%_NTKTeT(bSX]ATYy^^AS1\Sŗ $x\Ha o)bs՘bmeU q=hj:6іaZ[m@OdL7i1Řp aMtl]lLJ-zfg.f-agnI340| !5wxЎd2W^%*$J-{,(݁{%Xq߱ ̹ց|\G |%/̨|t`:iG.^0~wɽmr˲t:(s"H"d{ȡcݸG;5($BhA8 |#c2AvbA'g@>oiUP*G`(J+Tb!`LdXf5{6d9W6jUVjcWIE Sd@hL0j5K`DItVefzoe6\f>\߿گ*Z?1K8-L`54)4j0h  TaD<ZU bGN.zIfv^-t V`J-DЀҳL,g$3zmA%\4] bV;P[t ~$Ї@a~:d" Q `0kaC:8=fb .BJ <Ԁo bt 4щ%))Y8)t9]Beuۉ^vvc(  # Ĉ| %80;ݹ=\sLI0lLU;CnO0 lzUaMBpFX m<+guzjHV<aDs+\%L׹~ XEuCH0!9$D!I!|ӊ-aVs56 A Ù=Hh=ф)Rd2qJӡP² fP[ A`>yfVe;*@JLl=9#>n:"QVAI' NEhA/5fGK >P>"n*D)8Wȕ,d#Y D 4s{|#NI.OtK|m,ȉ'2#iVLB-$ 21-(&f(+^9N1S4A{yg=q,\K$W]T5!f'6וQmj,qq?m#ΘdZE?E jUUi(?!F%:0)`!D:)|Z?ر*[j@È=`{CL𡶨05 =L1t=$QC " r!eBVhԐ5"FF[e1Cbմ j.KiXAT*\ 7p&[? u pQ7@-F12;kH -2AW%wuAsw90pvdJ(^}"'tϏI5g*ZeF^Ћar.4Nj9,*oJǛ6f2;ڂ%Uka XTyV'[8>%33^fa_IƏR0+=Z3Ќ6@2Z04|ǩª?98Gڼv@&b~ց B bf?uGw X,uCcP[E"}C+"8TG`A?[rE^( ]GᇳCIHVo)1 @ )/zA3DئfCmiC^y|O1@5bs*iT̢[ CaьmۍEvADH y,}[1P7Dv-I{Ox!898IPZUOBDPILV6IF-ÁRh\ܯƌiR aL=Wh H]gK3N3Am!n``\XfWjifW,]i[Pm\E^;E,y_Y"jq G5A(Lڣ <ͬaAAzLTQ{؃)P y`{]d.rhdQt;uV -&^upMݔiI)|TB]>x£Zظeª50<GC!Ÿ kQS5VB$C_a(M)F:@A8G<1 EBDB$GPaG$JIDxBW@EÑEP^J5db^`,t2[Pb0EPh!qY!DuH<@YƫTdZG Pm9RLYL&$뱣s y(=^ZA214.ǽ{ !f (G\E b/.!&>bȁ$CrZ&oUG(p$x$"ƼG#8ѹt(o6jѧ~Qxo 6zJ{#&%ALQ $ LNphq}HFj)H7,D2x[D7OJD0Btߨ/D< DFO8`>FWфW9b8@dkƮ@ťO)0Uf"5@ 8f@:Sz[KdGؚ,E}DC\YfN7 U܎ FaSz gSEa\N=c~LR4B0R ./ҀuwpVsl{c{0:XH^(B= v96N`vDVr.'eŧt&\c%H0܂e$92 $.{BYA'*bPYWi4TQŧ- Mˈ̂Fdϙ*RKDJ),C!ԥNaYJxWЉ44MVefeJ! JTT T+0AXB韺cSN2}%& .LN2dE!ĥƅHV.`EaHݫ.Y`F %0eѩF7ꡁ–i) tLtZs{Bw̞ #چG3ߥ=esbN+(:#tQ9o>=Wf|ʕM=K"-,t#,{s3fN*Ahp̥09+LjAMVL~AlcU+́Y5YgߑDq(шD]uE@< p)$tiqAh@0Gd7KvxD8ضq{>eJ%4]n\ QSQ t0]`NDm,p\B7 jӯp ra L2,$O2B( czp5zp pѵD[h8HM7XFɔ8B08Dcy:|EDWB!OX FWe1 =bI<">γn:B/_J>`hl%?0. 1ɫ#^pE)Ddt8vdH`cGu2eԠ$hԴyg;kJZԡR4v**$4*eZ$&OtTR+PMhi̖kg6!zCQ@%ը4U_:tb]48jrǑ#t3,`Aņu5NV;֥Ye% !%]Ȟё!Q+ Quƌʓ/ึjֺl.+HQBF8:mƴW >qI柏d 0;LXpp4!?5~pLPCCAne v>XE5&Ht`)t}@G QQGG$DJ1 *+)+Ҡ(]sY|,r?T,3tSEƬsGFHGY$e1f٥n`ODab,aEA 5(RA3$(0C U[mՌ#5Oq?PzfMedxA 蕍=i `zʭ)ZI$)i:P*ܛ" !:%jR6rx, *2c/sqxA"! +;<6PC 2Ҹuiڦx E=ib3E& P!? mTZZw,hǿdp%P pA5fnDwƔ yd[d7e ܌",H|XFHYH92@by( U+2HH)DK/ SF4`Z` 50H%m!,^a @ <5<"B E3(/5)@C"ȀH fbOB4nq AZ=D 2CДt8X2GhW H0D8 LrAM"Ҁp k 'U,] p)[`@Ah'?)֬%!Ji1T. E~'[{Ps #֨ERBag/!u& j"ma@0!-lkW)c-T N68e5<YM$~C:=y%%щHq+A94@ ( Q(c!эt[=:70,! wE I&^ \ %b': SBAPT!U0ON| @2" Y@Vz -EP'4Et,ԠQ|q2"ZHQߪw?L˅6L 7\[؂ i("TU6HKIDZH"KUL,Z>1Ou=& F(x r&QfSR&n|ryE#](>Ѽ%Cޔ),$uv\\W% z;IGz\it3tЁ}9,=.Lq.B( xDbKr-&PkM |+)ò5@0PN{<(Ud{cIV64 ($4bPʟ.p("2@C Ԭf CS QRp4V1G@21TnO= gz$2HhXɧfb>jYJy >|fZRuuJ,*P# IVm ,PC`0ޡ[SHJjh%~cMBrP52S8"5nMaYBd#;YnaPIA C .$HEfF2l=ѵa4#` n&3 A 0lT(a\n jC^|(Lk*֓æ0h^B8E^iIX ^B W lX'!Z0m'WY,!zK  O K l1G`f9iM$j^A\KVS$VSJL1-2*0CR" Ј%Afz~g=Geڣ.XXg3tòB\_A3A( 6T #J(dfghBB)[Rxl@Pɋtȇ{X X@r JVY VW*\! F4FRDAƇ|%Ҁl! ! 8@Рr >E LŁ @, `^ġa/<@ͮ {AgZ 2ȅTSV "Ko ,Hf aSZ  َF)l2%:h0ANb~ *0`ʠz,Z"LCfrq+PQ-`^ Ѧdw* 절+>cEg<0 %J&7,lAag>( ((x,`lal&:d"`%n,$4Aw!`^P*ZYx(Ĉ0P!%AEbj!S/ t)_(L`+z^ k".)*A+!/ #hFB^`\bb f+ぶ h 3ʀ+&@\^c;A4+q:0"!) ȡt-쀎Kch~X *1{2oQc,<2鸢KQ!=2<?>D ClC0VEV/ b B!S\@ .`@ op!ߦA=`aH>K (""| M9[!lAf=jv,\Fɺ\oO,$ ݋.0+F%F7P]4&ea!նJ)& ,Dì@|/`1Zv`j..oyMuE w-+&l6Tź*\D/F8Gfz  DFl($,Rtm;E(EGAJR"(D D6UrtfVQ* vAAu GalIf@M޶͍!|E-OX>-[]=Aء | xXbK[b@Rpp! X0#k KA L!bs0'KY` Z ,!G8H@F! P+b 0'K sڸB ܡZpD V<pj>AVA  AYNZ."G 9 9Gbmv/‚9e,ktGif:#&4eFEpE]NbH-ڂ&EJ% k$"N72!JG · y-A[+#v x`#p턹׷Vc x0Xex V NA]\B  P8>= F. `,AJ3-فZP=AT!XUXPxyzZ.B >΅\=8&a+=pNQo6+9ōB Tt'ZQǃH% A?.R"faZ-*T%!=6VD%h*Ԓ*nuCQTňP٠+Pm%z%wmHm,å \i{ڝB5Eի倦G8ҝN"6֡>7r~rRr'U+B,*F Y!R;baR6 `"dD awm˵.\1f׸vC;Axx'OB^xakvPv]+p-;l9M$̧-5tpl"3wRtE,XF ! [({ ?$\Y㘛UX7 3f\rA?DM++Gxa7>LŤtS5l<Uœf/J(?Z"qXQI74Yj!*`Xt4!}`"u2*t@j QZ jT#EL2@0;E}Q.C@->E}G"|AC `B~䕪 yTP>3 KCz-`*WϒְbeW:-5$ Pܘ-5&! :x5M8&! C0ZЅ&t2a-V1! T Q@H !XE>XX$! Gn?Ai@(AkDd$_(#YG9$`LqTg-M, Lx+F$*[ OT 38r j' n.@-`B5.x(7|![@ ]p 23`( pM:9lr{Gl?tFੀnAHn*.PC@t*QC*v!3hBTzV@pj(@Gz B@LN2рMC -!N hFh`C:@@?i=WNd!@`-ix!/ :xU4E$`-B N\T: Hi{%N"K$<(D}qrh Wъ^ Y2V2Dc7&HFG7Whc>Bp1iP=:ЮL#-EԐQB4V\j.v 78zуEI\`I04т?( a3D$\X11ə  apdPA.* ,|B*`&P+,f 8!1:V' 5.Đd {+GH@BkS$ Ҷa0A<V&]7r@iCWԅ;i>!0 Y#$"Q=`%@ AUP 8[ ous]$ԵlBYD eӁSVR(#Yb@ǁVJ(3r]>BU%gA@gWm>s0*n%2[(D$H: <'[B" ӐGIS ҀV@VWW P_&P[$vi'_β+d,_+k^u_ twײc:0 SQ\ I" bpCpGp&Ӑ/wd3wp0 p  S -.0D 9}r SQ P_ ^pP p Wp0f `}f%a5ebK~UMi'a<e!)v{WLyK S P~'U(Q'Uk90eщ1*b$4$`f&!" OdX=$ACtQ #oӐmmB "X't8@2oTES VIsehl q`b(gCByYuY3yT! 8(#iB$\#"[bRx#aR1sA]&`qh%`T* cm1': 0P]7#;<=`%B$x =)[I[QUUpY<@c`UchU(ն&Ջava^˲v8-awv"F(YJ԰cF <&ΘpfpMpG@q I(-P ~R3 -'`z hN ݰcBp7 \  $,/@qqiAI s v~dHJ{wPP "0Dh1[ p^S5La`K.19jjhɱ! *0Dm2(eWAtn u *EX0[yDl@ #VX )mg蜘s(U# r<1ܺBIYa=J-@E*PӰX"LCiᓱ'}8)E*3 B 鶗(n~6t/d$`~ R$OQ=Cl!\!!ñ  u-vĒEZ$aWvxFoFYk-`9q S`Ð#9 p A/pPO #/0GxK, ]p |T PR/ ;qg 7t @ y0i q*]H3z&//WPx$ {1;a_z`lT67MPD@ %&Svj +G;UA%WųV%(l e@mf ֐)1! ",f2a;`醥t!"yU,)>em9̊Ak$dmx ghKbeU>%XJ(.+%"b$kD!Q$6*)B ,ve u_p'uL:P& @\ou`!qgL  ȌgZb/@ROi]w "zz๽P PMPdC{ 0sʒPf!q1P0dAK u  zvS.5F `7z>/0  @@t !һ$]ғjRj AqP7Cԉ v@CBk& >}Ӏp(ƅ"TYB!?=a';sNv e^?֐?Ub8='4 evTEM_ ,]wt.a a!i` t vO@ 4 52!`TiPwffiQ34qco2L2K)3@`Jʯ##3UqpVz>wst26dp `00}SQ_ L:$宱jʫlìS7^ +WU Q1(#LjnBA!)#HUM p! AS2كAu@&⭓a V^?ӠH'\kű56X<_`j, jKo0RlYxn^(uҚU!>!nqlaKC5,*р؀D3M+Y|ic|H82%8"OGM2mTl fxEXSrOlH»xPEC5e2AsӟOU@I,vP=i-dFQ Djв n豧#c5<]A,-ZCB)S5B6 zص[AvYu>:ij\Nٟ?Id{hO-3 UcGphrH>N}Y'_!^ُ3l@A{0fyZ.0C 7C/4:"$ $J5@6nd(I"JJ֡QCiju:xH'%$!ja QB tEP ``r!w"Px +3 LJ xFeĖvY@8"N_ .9VA9TE$$B2duiMƤ~&PR ~cxki-xrx,B?p邝[F$D&' ny ;haGɼaZd聩<h&$DP@&ekH-0>I9݂K #-;/Vo q!=|' )w˾&H~&B' CP0 vQiYho]QyDu8^ِ&:Ix]?7;IJV&~IXbv pHK3+H\ᘱH)Jɶ?leCKS<0Շ7w#H@ jb+0B(btsP(',w`A-Lpb-pA.. ac /O4\f1MFҌ%oEw 9ظɎ Ey#1 j;q-ai{ ӑ Ȇ 1A"~~ Mhz5ڡ!X%#5B)ȕ#HJᑏ~Dv ېڡ.y0$A\DR,}G}R4Y*Gj >IEzD^ . "O:^t&*FX;A˥CE:4N(4zU#I,|QBPJj9ZTQ4$j=5Z. 0ԭ  %v[b5JkLє*\""%gXG8ǁ$j#vb A>a̸tl)ZLqX@lPB\ 2~VXg"R#zH9qV'5`P-jtBHELa&6@Ŭt.U%9TA gb!j%xEFoaBܗQUro(Pݥ-Y@U@'s^'aY)L)!l!$nɛ(4pcr6 (z#gf-`Ao6.n`[FM܍?һwx[*tr!r4gOFu10@&E ]7@cZrsOc h6$3WH?g>b}fm(պPnyFt^ Ӻ8*vOOTBh{ID SR֑d(FU|(uLIʤZuj8jT&Bwڶ&x.+?Z8 jj?XacuPui+ bC:#i?P=&ݳeI)S}= ꩄEPCQ<-K8}{8ۇn7  '7}Ez[z`jȇGɍ(n@a($KHVpCX&hCڅ? *qXéfj:@ຊ@lq l`;HnXO;Gw&\\XA'L0P2ƀ1`|x5xz 3`iq$Z6cjUj1$fX @AʫU),AҷA܊aTHA8'!SK 5 aJG0\Q[u8m)Ii(>Y2v(L;"QAGiI16 jBa˄98[ i3C?k[Ё#H-Ւ|JK {SwIkG: AȔ b!?0.|—藁$ i8Ր:[,D[BXxQ( Ӏ(xyX)q fw@Pɑ.H\Ph Ёx0 vXoق`wЀ>&POV0N-B/XqX(XM, fZq`]$|2 -{ 0'E>eȰxv8b! v`8v@h@H@p. 9xqx x q 1qwej!8| 7/〆| A:xف2PG9 ՋQ`!|*B K 9Iq!T(,M1"!mT&(!xtŊ!I]Aڔ.Qځ>?(PP4!0UYDuP@+*9/ܐ,dN`ui 4&9ٞZ%:K RrZ'|XB9r\mUzAb!j x_%Q;aLqĈ-II ['as !n '/Ȃ4H]`?PИXpx <&H$C;(F98GPGbU[9oꉤI-ȌjDr処k`<{t&Bfn<ij u0Eh^Aڔܓz5Q}Ԫ+Ё[0F/Ae>K[Ƃ.XlAh>$?bюbZcΞ+ڍCU1 j6 3ݒ+dp7і]UmcUig&C?5l:`"[赂8y31}Q1Օq51:qSpȀXh) ÍkYxŭ`.STSK.?@a`hX ]%h͞8 hYHh` voxjDˏ?XَH # 9O Ӏtrp1.FN\ bhp ᚧk2i,%jw0&S؟r8_-3&3Ɵ!u/l{p{h+ȖRƐ!IcY/xZ( "Z(&d(1S!h?&q >fj8ީaS@Uo9Q4dRf^[CGceT b!BXI +gdoEvpvoKr˽(qZ#핇pdz~N#yHx߉q^7P  az3[c͕);{@rkƺ  cQ H@؅)RW 1W8v.j9jkA`PbIF {1\\`K NW VbyGaIH=BG U;rtu2\kYZ< HbZ8-xdd勨^nLt{pJP:+i*Iw^e`C!nbŊ-СhLءP.ˡJ@tHE'@fP4)IBiN^)R?B14̡ $uXQ!#P %{B*iJjZ;ذY *+~F*4ڧWRUҡ l,y2XSh$'p&If"Yj֧ÕOp|^=q#|8 ;wA~Ӗ[ K`(0$ȍBSP0!A׶\ӵG]eNkǣt2/(;M`GL`-!\㉆ԉ' )].T.@7QW7s\C E;d'<2s ah 5@ӡ и8(Su rJpY|w0C_3qM0Ɨx "Oz,c"rie:]I<H@ &T&X1]QQN4PLi)$ҰChRX6唆 Z&uD-L$ME쐆)UTH"|~I00B&Cv!31hf'?`B{xhj`Mֆ!jVl&׈cyDB F r@@>[4]aA .\)^U4ap#N  ]'HCp3@}K z:>tC:8ǎCP+\0(M6Ѝe =LC ѧY FҵD RhJ]A<vtAZR U8pUBz*A )~q DR# #̥ (Yg]3Z3DMj@3Q+z 0B`=iQ7 !B @6`:LC4-t(PPC+8B=_ Aʰ9B:9BУ z %kM W 1JMA(!L >}P% tPPlXalY1]X)V+UBW N@C!,[dET *׾L-Ԃ4C!E(-Q]XÊM `I"A܃)A,$IvٜNp+΋d;|AQ'1Q XT]}n=E]d5dB5yUq@\\e}5v—YHY7) 7yS^c8ȓuTvd>FiFA$m5!@ᙨZhH eC3d6 An!   [, kakYTda#<t lztGThVhRTz`(prJ BߴPq9FctXgKP]H L4=04 ))^K=]HiL]́X0ΐD(&fEaXAQA`^Bd dW9^*q((,\Rf"g"EЃ+vNM\fa X]#P b0e8&*4 _Z D; G;Fqn,oc28j}Yq@m$mA;v(BՔA>T_xM$DM$8C(<׌QA)0T%j%)zPz_}PhvUM>۞F`ZBeiz ydTG)X~Zl h!HVÞ} k  ᥣJ) uh MA]Vx*c4F4W:e^(iGh«sFFfXLF`(=4C( YC eg%bцj"-A;[h,SR֥0CD@;HZ&Ҋ-Y4mvg:)nXVe$IXgҊ-YF#"|/0hkLF(jnYn7F@I@^iDBm4G6d,<@$ҮR*V]֥1)a6YNa:> Y}x :T U$F,%9%*[Á|jZ4kn%] iŐ_\rJ0 H,'N+*CB$*^yq'Fݒb1ʊ ,esՖIȅIf لϝvļ,L X\tɅSni0Y9v(@wELFF@[X/|McNH t.HQ((7]hQYnqb7(nl7ldA  d0Id߄dęVq %a\- &ʢSrWy`>2 G ȤЕV3£e= E!hA$X!8Knn1h0΄;AeC$BAR!-p^t%kpIC1vrdf-$J)ʩ]*ŪydfIm-0RlZm#wgeeD"#4A( HXF-k!$o"[t: D&;>((^uY?ljA;H m̾h>Sm_ξz e_ -t Zz<@%zqd!&8P8 ʕ i.Ñ ,UǐsHC_\йks^^2"Q-wWR%oF QTKc[F3х2Ŝ$b(]%fLd;Ɂ4%|-sX\V4I〆'GȰs-= &)@f2 ө#;eţ#džrr:'p7CFtt/CFhEڨvtGpH]N~*4ԖVVVn $ )lMH*|ߥpZN1a1 v+q@ўGz J" ܡpciP> .X喩Lq 8Rk (qL83nm2ʨ_6]lf^ ]!h9nJt"bsnIķvM3yz\2s*39\&B,B;;ugt^<. Gppwq,C747!i$zgC* BJ: :buz^1(VY ҙOc  hA 1'!kIVGa~eۥ%6ߓj.5rsu1~(lv藱/DMEqߥ|#KRe=:z* o 0$ۨuh(>,>$q6io a_5@2@ ^TB iɋ'0>xqc#@x ^n$ 7֒9fM7qԹgϜ;lG6;fJ;" ZN"TWm"V˚U_ gk yZH۹w*sPVtȔI Ç 7iQ'qL$'d'gv)WeFmZyɋpN/57|xHGBys3f3$)ױhȺ@ Rxc G 2ϰoJ7SA@ PQ'IAeA1 kƐ "&jf"<bGנ_)ڵ^[ؔF` Pꓨ{!qjd|D+Ȧ钬a3vۙj/KovPJ2i08sN2>GkO,3? dL iM#mZM})l|Trltm\ ̐_nܚ1XIGX|$o1m낍wT՝V D] DmCXw/H_)y@Jpc舯8bE,=)zJ5Q@ zBRRł  (X ܑly?bɮrTlLN!$GXi@Al0(@:Ni0A}oP7M$'=MFj)Qi-n;qv`)6D6ܯ69VZgBF#N4&1e+Ccܺ CyB"TFWEv #4Fp:hE<Γ=Ϛ0)RU#,e&@E PJ4oJLb&>2C;.z$J|Qdh$g")I׷ 2dozc)P~r9'q}\ZBVH X:a@LX.ՕLXjd#:R*{*)3<DfdD"jBd>"_X,aXW|@2蓱uc!٬؄-K,_jd:M0m&A_iOh;Au 3Tew[ j5)LpDJMotJ5EB PC7Ԑ ukӒ͵x5\S* ^Ym<&+Pn/pyO6㡣k| iqկ,dWV٪zރ!Nx`w{v`)pJfN̠ "=8-ӝDϰT3JɍfN#UD[ARo*'CѪ k@I`] ov³23lb6]a9 ҫ>N4לT.hVF_g;2QcW'=4&fxt ۾D̯@ŭvamb͎*Whe%V4H*BP案!">poO&::ݬN'M)fҠg͟+7u;S*q,S^-e-˫99qSlxK3 Tьve$ܥ^ssWP:%b_VDY`uasZ捕j\UaCP1ೡ]$Ewz ~(ꌵ##RfPQu81N6E8هli%$ *m9voX)ў>"`!uE;,ly_u'\3+79t鿩|*u_4 $q{.kq:f 9@7H)F{FZi2*p>2r:vZj4ҌTB-srJ}ttF7vYκF^k NO(oB4o0D$$*]IW) :T"$$%v/u`hb/+vmȏLre1"`٘ BCfR#ig$4D%r }* -ho%9ScYk9H;V΋99DHڬ[s pqBd[,m>G.ˉ u.6GD2=&I. %Tg^>VYldW|0u/gǟxH ³P!p1ϴvC碶ȴٮf 5&j4N6 6#86%T8律C:L$d8Qul߄+nH9q1"20U_>D ҥ\M#@nVpH8!kA\UR3?mBJ\eK1$?=\%9XgQg9FFEV5dEvd7bcjz6L:0r01Dg Pgį246JrYYn5l#+#\ʹʞu7@>9i61R[KŹ`@?w%>'8 'ce54$>q/%Z&DBAa7^j6u#Dl#9<"~)Hvs9E*"~v:볖 y4WJrã C3>3XqKOVJ Jh|Qp*V?jx[W햍4+Lv #>iV>T~H䪊+s:>@:AU<, EHda)!,Z(:RPE<t0sgr,`\*hV @0DZ4u219l:3wgw6 L{ui4^qy8 k9 ]tXAe>[6,k"^F5}F#>`qC73saET_DFHVbyw)FbjZe_e=X> V4HQX4pKRD$i즓I3iC򣉛K^u˒7~yh&DL?LmӗQm( I 2oKD<*Qeq#!Rqb)b^X_` #Vn 9Ui/dj+̤byRvuUv~ l"= F 42# ' #H5H §y!T7Nhmh0I,#Asˤ}X@@@xC |[5BxA;|CXd<$.m^pj!ԶmW ^>#J/jFrD_IzpIۯoBO)&/ '*G ,797c:Cfs ,-o3XZr*20Rk67 xf xkJ =Cic8:r$?>ISe4WRr_[~rqW, BRSCS;&lg^ ;䎀) [b)"Ϣ.f-b-BzDؘ/8E+#q;i:|9r60 gr FB;2iiƓD:@?U@>1'Z9:Av}Sm=TD%]1H[w`;]0VC{;>BCCD$kK@F&@lNKzsBF6.: ( -[q:jf4K !9+ BZb{֧Z6 /g[ YK?@CN/6[մ}=%AΕ\9cr.n.VoTbcqB-4ü]D$G"W=r=-%=QQkN(dBcHrKbdBe,)ht(: !JW2, 9óEi4G3ݹn2 !}6LCnKia[!eh6#~ e6@7䦇fǟ#,7$};9DA8KX'1i v@bv#mB~] b sVeBCNx u'ϥ('v`P n*eV:!7o p99yy K^/i|chP*~VYz809[ב{~AƖ.Nn>oqmVHTOpўrV&(!&b `tKe^/YoH<tMH׌zl "o"n gpFGzEgF m]h Ҋ+7|ʝ;2k{-& *JoWleD]DK]"MqMGXsI R  pEF 35p/TC?<117L1!##L -1P O<m9ҵU#lEXSI%T g'AWVk}5V]xA;kNlEVY|ե >俸i5cyb}i2gג⺯"AiQ 6kF$,s)fk܅`7mzf#Yx!zj xm|_7&[! <h &D$!Y Ɏ#yC ;xÔ b[xVȳPg7c~p@P+LG[0F>Kc SH9rh:3V/-}!Nq8DsX :{A;&Bse9it&Jٴ5 *_(k&jH-pDBɳwSȌMdl2ف,j5FCQ z^ĠE#=(G"@!FQN:f$ѵ@ *40*^\2ژԷ%r I1/Q5AU8'FwQa@ Ŕ?g8iۄ6edw+#[28C^Zq6/pyX%ng  sDq@k2iP7PB3d #Z3#tUTi+\t3{׃@k PPT[Ax=CxOPOXp0 358`0 Cy|&sC74ETPC'`nzn)oF'wH+AIjHHUauçWd{;۳p:4~';d.":3fYh8 /0 8fE s1bfe />sˆw6ee6!l` Pp ^i $iu(AjvBj.BWp&%6@pN&_Ie7^x =@p@$u]k3dQwi1 -QEYRSLF S9m'zxv[(a(F*B*bGtGA|A9(2)UX1W0; J{+@-8JȲ~#hpK-SYuKL09r2WRbd!'njD ZBL@rə3>!RՕ6 /_+u"gP1@*_(]` ,%T pv3sBtA䃔vkD&iA @`yqgp0,B"-htPA^`##A129B@@C q BV40>Sxu p1eCP$"%mDnGb51I2qSZcD'wBK'Fq8st!GG)9vd B 1 +SE *EJb=˲Ԓ~ǡXbd,7-7r?w;r9 O o9& @sa(00X ` y:-hr8YS.t2LYyXy&101jlgW \8|7Qp@S"Aj^uj2;r$>ց*!Ty6#'T@S֐{@5&a %piA8車_FQyˊPװPcCuTg O f1T2R!骁 pS&8~䆢(m4)-:'@{PUv):;n=$~c3W)gD-i] 񉜄=أ/ | h=( \;>F=Xp-0fA 2IQY"sn}ڶH>;-s-"-o y)Y d#Uivh6agFYw B+y1P@@Pg 536@vRaiaD"N#3,y3Pb(]3k;2EPSc@HH*3]$9i I8iDnvTFtIz# vnZQsebsr(>JJ{#|g 4(pݰQX@*Q$9p0K<B.ֱ b | mh}0  03>/'f (Ó"&9| FL)v}bKˮ (b\n[}j + .w}i 0 0 0  zSz|( 0 v {; s*f/p\b S˸  n X ܡ?c҄P3'u @Q*B"2:sI$&5%@eX` m@NN压dPnWE _v J(݅[#e :0SS;ņpt[!sgz\Zͧ~)s(|a_a H5FǨoˋ|ip SǦr] Ӑf'ᶱL@ y0 ! g.]cLIv  -   y,b~/鰨;ۣؠ  Pt ! P/??=@eb -D$\YUCD$_wρl֙"_5q@̌"ByVj0K5[ hD8CU. ٫ v\A; \pEFT1^ nj&EV-`?TMfQht8sG7Ö.w9TWGU~7  "-lrX0 iH |I @vr}p .]Y+8ʬ<p۸(IP p q} [ QW!0,@I IX v zڻځ%X-0 0C0 pgܹ~ [ܢ`x!ɪ> rD1m pN3B.]C#j e"WYN- mp_E{ 1O~~kQ%_2H E )%R%IhА$iÄ !NDШ1BFɒil1N8|N^'Y;>D)H]jsK^HG bRv+ tk,52UM7@hPHԺXBFXæ[ui[WAMLe@afJ]NX@NS,3&4hHBLGqӱ<`vu-{eD0QI¶+?-L¤5gV:&uXZ$24hص;4.'^03 )=CZ"pB +B 3pC;Zv#Θ.8f=qOl[q?<sP$f QDv` t'=)# "k@!E (cfcrMc`1G9gKt*Z$z!2L(cdLX$@8j) $RK# ԦS\MuIia'xRu>p)@W DaGB`G[b`hN!x*&Oĝib1J@doXv0Xp"n^(̌WHSTltqkn G=٢?^ye< aaFXbG,BV TFk,ZN?A)a7cf?fقx&3n$tm۶ 6,"E<2zQXodQgxȀdm~|r᎐3\;F] =xa %B3+<5P 8dEet!ĞNf#N#PY(rvсhZo w>v)#>FJ&!km?uxvQ ѡ;/A+FR cU8ki8L1Q@T#pP0n!T;&v h hF˜ n_[$af4s5a@`G)(44xZ w ݇jG^qWx3 9|wHDRR#c׻5 8wlD X86%RD4b(;Kh I!Z#"vntaW885,' Ͳp73Cl@*HQ yBՉ}2/XMR8=˶Fƍbd?зH O0k צ&q;i,t9[ҍbR.!۵r HAH(b`FWcE9&^qF:q/8]r"TcTB H&H8L='1 QXp A駢6"TFV*6,#>V8"@L7@SW8E@0fp rrS'A@((Nj 2Xvc^4qL(6Gh{EM2ЮLH6x62F(Xqn!HG:@h  fB%{-Bl&iN2zSHPF-XkcdZjh=&#-D \͔v]V65 5lZ?@.Gkr)BeP z ϾI^2р3zۈKTROu (1Ip0 sA9xUrTQJm .!feK_`I>-x"PC9`$@ 0@ᇓn@9pLn;ö;Nхa(G<:F 4ff~č= lPCkpCS(X IഏoAu0P hk~֙f8[Qtgqz['D Hn%{/ib-{6D$'[& \I88z嫪vHu`A;7GPȁS:@hb (‚&R:f8,Q j4P>x}ȆeXWX&AT²’³"jH~&Ixe @n(bCc;d.Q#]J,04T~x.8>Fxu +<Ï, G5QH4x&^eKu颤)e،D”Ė-Y ^ '{XPڰQY;+@%dG@xY&8K pۍLw.蠗Yk2ҢS  װ7~K}8 dx9+&S밎>`,"+"YS @*aF}rTE^Fs݉۬M]U23HcPV֥y?VX8sBPD 5Yfp:@n&"zXtkL_~b @uN h:,83(P ؄ -K `#[K zxص'fv(NJ:JXhiمX0&:(N x6\DlQG iK@K[؁W,QsUjOȁJ*-`t0ҝ},81DqY I}IEkDZk1p,=avcyFEq Ȑ"G,i$ʔ*Wl%̘2gMJ(G"$i)piQC5 @iك"@Uͩ6 >8ptVeU-PH 9QE EhPh|r0Tm%viGs p$ ʖ4P]x;u)0=LP-\SQn%1 Hq3W@9K#DS$q|(}SQAEi"8A\טH"؋v 8N Z`'[Hl !Ѐ}^#(pOH` 9G4⥚UnGX-H1檚`hJt0EL*pq#I2&$!!`k/h#t64#XD)i#lF.s23x#)IR,- ZġPV>r+@ JHPi" h)I08#Uq^" 9T@5kPM@n4F j! 0. 10\X:ĪYdQzlSz!p*h5hki<2kAj`ɖ|&V†3("\ou%U5L1 &AHpڊAFF)p,@lrz0 [[Y ^ѸB."OS /撪%f"skxv BzG T#]`A9A>pCbG4 1CI+ Ї&pq("ACEтQhu#02t#bы c K! 8.2ka̐ * |z#yN$x': * . *WAT@#1Hmcq2ڕ|E #Ғ$RG#Fw3 bY_j-}@V:BsI%]C6t?$VۥCD!aрQ2Ơ%*\J8P/iU4 "a7yӃq8Ad>(~}szv!s-!" 1pH/z8OAMN!h@9\O|brxh!*K;  64S$ L_<9`jV'Vk 0V`9&v63}{ATaaFr2?|]֚f֣;M"Y"pMDR3)06 8IrCKM #bD})5p8@itJvǞ T FKTE3CAXnezhšY!WaVd5+F\ex Q`۵0R\l]Dl,B&α[49,q"&0Pu@.4%p"y4,w:˳FjN- MC`Ɣ-/VS~݅@'DtU-ɀ pGoG|H,LA`!?*6Xf@=`ȤC GD(\$8]Eă@qꆶ]LQQhJbCz-8gC0A ȕ]!) 1a֨Q^Qe祀QTxT,\BA@- DeYrXAph%JZUX-X&V&(B8M#Q CjGt@&6\DWu=_a" Cu`DB}eA?`@4Ë&|]w@gt!@,[ <fAnLjj5N%=DB(tNC|![FEBdtuT 3xت7-X"PƓB'\@+pObjÌaxl~ZAYGBelPݏ k`- W%pnX v,&,De%hJVZE Aޙ ,r aEHjAZNs:[Ad҅tCijȂ%J@`r -PYwfEDšxG|l[0 \\#|\CЃlP$ (\ H4ƃo4//)Jc o,/"@,AȂ+@-A XH !f%H`Ih}hhL<,M1圬Z%: E2=ȏ;P(F|svQAMcGLC3.\(ΛnTW:M0*ϫq<DSWP$<.Lp:j? `pj<1Ȑj./\vXy;L*[1I1.|֠ 42.,Í#$`A (M s^ Pgij84C C 嬕@ Ha/!T$x,]o4D\k_e,>3W!E4D:U. BA0f3$aVZq̈́Z.sģ5$N >3Zbl[p/F4[7İȬʁ"ýMS0).-C8HEieG-HA3C0A2(G=s©FOR$A΂ 7E; FKcvH3d&?;PPH łYvHVpBqPh#DT ËĦG复 pvx;B Bؽ@NBo#P+ia3IX$PiNP)7Ύ>vRl) 9CB;+^>4_>Y\7|l]4/E;ƀ"x$T >BD@Qb4LD utD5V1CHsF4AʧP"s5[T0N GCȀ(Lh`S+}$ATYs BglI4;}Yx [~sE ̯S"-4!^Jp4D|^cQ1pJ%N,&tɂ `-P`A;A>x\±C-0(C3AsC$.A0B$DVw^+C%+i 6mHmr,`e A4<:yX̔1;``_7>il0 rxwL dO=?C $\c 4l}+L_UI!`I˵D5huh.Xwyɘx{J??%wV;b 8$!+(x3D- 4xp i OV4,ċl572-$FH hD.Ndq"LfLj(Pp֩[u`%.y2Zͣ. ё$IST.^[RH,PI e.K4vٷO)/;AMK q.QMݣ=gW HeCLjfFŬ: u֬'_p8R`S)zekkASc LJ H"VŔN` @ NYSeL-\{m5`"7g`E\vۂS4`)`j!!SKbPyUXyIK>{ŹW|0c5CRSP4C JӁ~;qvtǑ k b 52IJ<$SJ?S:=/U_.ԒLO&+Ȱ"~#j9qō?RKHcA:UBj@L1UanwiIF VС znf[:uQ`QDD>l P@|vc[q5 >xE_f LX4?Qt#>3i@3L`|Dn_Dc# zBj1 @O ,`^l eOЦЍ) B{(V| `"p p @l0 X@ӂt[?1|dPkF*2(C !y- Dx(42ge2aE"(wpNOtuj$$RN{@7. t^:fs禙'8i ֬<( t&` Wb%2iHURIXS hG@Pa h2r%u#2``cȟ$F7]!2K%ln=,y+k| j*&>"Tyf@A$@ҠFA2ћ 1# "[ 5 H3]t,(x#_5@@X` Tf,Pði`+}A ,o0@P . Xg+y&r3WNsD`A`oO:He?WҖ#bdc H) b$dwGë& уmKMx !WT^1Iwu/wyk_sV̨Az^_ԙ,n;u0xT&=>xZ/9qpR a60SIe\q7IFO~"5H$CTr*׺iP[9 ^!d@4fc^!d*PkrA: d5T2,$ @HO G£C,e<GM`ȀK< PupM< O0+{r@la@"y@O Bv V{ZϞZ/"R"|lO1a[O%@UJ[E&B,JLoǪj6Ϊ/v 0F^5.a&eoBC4DcJAe·r,CO> dP l3ժl܆c*ʳЦg5%! a $@ k a'D6 =VdM֎$x #;H@^gL O<$ǐ Pr `dA iҵA. T˞G$>b{/m[v.H%G&\%81~ÒϦFjv .D\~o[P*.5RC, b/L]55on(A>r2}Ȥj`.2F7P j(в!,c"$NPZLh@j0D.XcRlJP qC@qx ĹdIlt-Cpr`Hz)%KE6G<~i oTCU%W'I ;"O "/  ڀ~Rv@Dg! >`*!܂>bd$tU m3-veW<i%' rEVHDECdfu*R/~aLal^Ҫbt*HN1C034InO 3~10423@f-L3 La n@f``S&p^ZgkD3D :VUpAE@> uQ- !jks=kmTVTVl<)O~#97 dkgnPo8Zf@:entm:Kn\ Jxs0Xp05~ݮS\qD";sJX%Ŷݹ+IĻb"IJzޣ ߇oZ? E@yiY/{ [`|C-^-5-nOrUheH҇VD޼dA5< xd?`_[;sļJŒ'yL}ǁ={ON2 h`z(Ѝ  *F>"><ÉSd>j3ʼnF$P6Hd ِ L$$EQ!MB M 4@)CO%QCZTQ|I-O܄J2%AKL$ `D P'P @KBNU!rU 9C1x- dž^n`arm ='pIwc ZlʆZͶVdveh]VzPeO -[jxA0uDVXP"yw/x{ ‰'1ŋf@s F2(MD?.$_)BPdIZF4$^6$D0B,bcqiǚ#aJ)11'-NM+/x,0CB겺^`n]O 't WKf_k ڲ{|!q[3=( ` Xù+rƞp{IXF!dww@/ <1z_a"PyIB1 e(CLʓ0 Ma1D7F y#EY`"eGfh?JRT3"%e%4,bQJZZYh/ZЂ?Bi`,v ̢l)Y t}rj$RbF& | U") qֵ"WAaCP*K%z\be6 p;̰5k+_ Xr6;euk d =G8VdȄ}(6)툆3Tƣd/R(`$Z%pQhDPޝd-BF[ )M-5i*EK<!KNs*HՉF$,A `qть)(x?5L!i&QXy,Q :3j ™ U19/,ǤE^,c) 0y̓=^a,#,R݆xPYlK]H+Rl;T؄v >dBé#hAOґ:FqyӟRjĄ%v24H(XFx%]_脤@Q}0G O{4"Xy"mׂb b2 5͂X35„#["dWGəB/pHQDneLkO6B*oPƶOČƢ3݂j jr?cPiLЂt0w:軋nc d`F.sF.gTbq G ` *%,Z6Vfja?k:V;+! [fh `|NENuei#OZN0 e 2ɀvt v$ B^k#0hw5j`#&#x:"#Oy#@%HbH%G5ecrSQp%Syb3 x9EdC6mc6!E aaLV@1(Gf'l8/ /0(00GcWqVpn+ WWח=G +=~gW",b_~芯; 5-!Df[p)h5 @p@gd}b};/ 40Cu/P14H d@D,/"# PS P 7hk"Dj*x"%Zl!l<47_!%g4a 9Toz)" S X}H&VG1&Bc[H0)`[0rhXnAP‰r$~IXA~a)bf-|q eSYhA d PS.Z; MH\R'ia0% NZg]0xO]#H ]$2j 9v2{ 2@H3i7hB~x($(0:r2B#pIWG IqEN8NsO \N Ci]PA !悗) X38@wl($A @$_!u%=$6`<Ù$1SR$Y5Wّ0Qyjc&(1$iW m19^{B|MJ)7 8;$V{Kjq dQ69s+g|h;aaJ(7s%jY-B"0"((Oikgr464`DZ?yC/eّ[BjhPcQ8Fcr\Ckf(?A|rkGpx=yI"em|X]f9\~= f? l&}!ᮝ^@.GP {([K` ` KU/ +0QF OECN@TWv{]5 "4&BT5 #NgQA6$3$FxIbC-E l&%mFDy|*GHDRJ`l̒*Vf|׌VGw+jq[ïs:߃g9e,ѺLٕM׊2-npϛKds٠ *PR-X X)­xdk$` `Mn/4P/1따P[ [ON[#ea*jiP{W!' bɑ,ɛ PHxJ@Q33KQNIJHxG #39.,`=3AbHacPATyhdqՇGrLիWКk?1sK*}ڢ#32ObN'b` 澡l`<4 pv~`RէD4Z=H6fZh_$:;5Qc42c9퐳5Uy:ΔYa p[1Nj']Iuލ,x@}A1.+(.w a_.RP*# 42)HSd3Dj) 6C "6lP|@';Rb'/$R̆PeʔdLR3Q^ 3fc3C&Q,[bg3(PBaA/xc-]r=¦6;Cl׵_ݾz#@W;^81… FŒ?Yd W>' pfO=q;" Wq ۞\vFxј1#Z<^)Rt9!z%ID/DDd$k'@>ld/dLP>LA't08 \CpdHfD5Xф(d}ȀlG5`1HBHHA!%rJ):!".r*>$ $zl8 ,$3"ņ!%D⧉$: )2<G#f-6qKI7thCM/ԽTl0V_հ6[o3莩X6XP]}EA xzbx1Z^ bpͳlZ؎a&*c Dr6<)G頁^OE>0,#\A'|c3/ ;8PeHC՘YH ƞpsk H}\:%b`"0B`Q,\K~'iZO0" @jC̘hQVT h#>U~Oݚ-N?4RES+UX_VnYm Yw=VbY]]c3%L3y" C;Eb珉 4Ȩ.5tծcL0!}c9 7BE$A=>֟uh Oc2@؂:v } 4衔̃#~j@@t&}g>A> -1P4! !O2 aGҚTl#)Ζ'$LghKIO(SV"W<? ` m~N^)@YT"7E$! Y4 '1X\)LΑ]Fly]sIWΓ2b0grV~ҕl`^,^TXH%1Ya`jw:3'6T_՛.&ZGLǓXShxa,#ղ / ^1d&l7MAmV:@έM츰fj3 e;̚W;tflS0+wBW t [s 4fސZ4NOYd2ME\6dr0tх|9vf?ԧ<'b'[0 ,$Sr(`I 2!G@;aM"; ~$qFXȈP8#Xq:f0܌GSI q27mHANKu z`K\)6إYk:f U  +EXLKBBF͡,o8C>GO:1Ϋs.D# Q8B;z0MinF?玿bj^A`Fr\ A4<-Ja)Ktu>PCҔD߈8D;,G͂"nq5y"֊`~|ҩ ?RH0xKK J0ی@&[G ͑Z(21#L ȵ z"(q6hJz ɤT$0P[;QzVF# c*-yɅh5D ԊOQj^%ܺx8q9hkGP/丆B5邐Ё(b z/ջbS/ 7xڃpsaQj(v  Bȓ P ؅?]؅nfX)Ɛx!7r#`@{2C1"^.-1 ˣ?H`f9Fq ; T2 kA-Ӝ|+Mb0;AM, ,LNA|zA|M}Mm8P,$T› Z )۪ eSq n jiʨ5.H8CZklhz3-m5r9SiXix0 8Ёv6ٮzڮ06!|ڶeaLaV()>ϴEvkxG҉q?@]P)Y)i iܰ 3 ).")9r0s/A tN.Z1:9R23:QEɉ F}p$0=ϑ+Lds RȲ{%4; 454 (4I6nnHM1 -1c)ݒ&ްBۑv x144/ (C&p ͠\md[hP"P=TiZX\5fؼCȄ_KȄx_DPe˘* . 9̊!SQ4ڻLD̃JΌE  02-)"XB+MPK0T‘?`rT8T8s*Rݒ2>PUU:Oa[ȅ=4O() p܁ xOb){ tB=:OA܆mjMkn"38qX9BfIRIV^9*$!J!j '8ñclF -r\H?K@9JE>$qڜOM ]㢛H@^ &,;cdnpJqL6zA ,/K4S~W}mWT#,0drh^Eȍݨ<%D8f2  ZXya2^faG<_)_豀hp焑ryNl`  f EJ/vk!;-2&?+>i+)"f*Cbb܅pFiη&R8U͆ cf6:_VWgX Hd8mdhI ִ8nWp!m -k1^#' wZ٬ZA? xX?谻4ڰܠlܐEn5E =!lfD`s}~8KO؂ifTE؏2PNHt_ LgpdZ$ny@S/hŎ+xZKQ$P ބ↛bo"1I1!" kW?uR@ _ɅDHFr ؍TSqMB|~Xb4ZpNdm5x<ׯPKfP/x8( hB%']Dy }e8Y 5|ɠLS"MA1z4ѰȖoCw!\nƳɆČf^0缏srΟС93Xc;أ?iC9#G"ydB %Q06ZnCQ>&裏&0hcQ%+  SVE/zScn'@#"B-zQPg P3 D=d:)O8p&]I^txFQ"<ŒQ1=0c3!hUX $D e$[kW^pѵW]nVGYj+X+ ݘ /aZhMDeN83p8ݔs3jжMG p\o6FJpƱ\6͘1 squf]|mG}{=\~yx4s%M237 :7s69H<]5dv<ݵ GqŌ-EH"/5ĐSƖn&7Z~y68ﱁ&{y& QϜ+@g 3(޻*4]A48zrԦ^Q ?p!:yIK`M1tL,Wk"OGdk+=x25$qBBDc G2!.4\]q`ʂ.>+rҖ^"^U,) ⢀_H361PLaL$}hldp TL3pRvd0gf 3,Gl5qB/ 4@~| h h"u t3p18Bkc49*LjPTH$ C|ID9.7"'UDmp%(DLQH]6`p@zn@GgBSP3Q&6phQo{q*U0|EJ0#VdIJr,H(@hP%@:*,-ODd_4,JCn"%Ak1j(cZX+2 ! kʗ0/i eC k_L8Č"&6 +b谇af&nR8bmU!5 g`NY|hO0#~hAGgMv6 ;f@dʳ17430'2aelBK̆@'G1c'ݬ76؂EwȐ4#D".(e{$F)X(ѹb&6`=:M0xݗPH 1H^l"QFP B&N n I:i@1 _ >%HďlʧDy5^ȋ`:GvVH8ܛ7Q?WCO)@I.)xAPX|Ӆ VA}q !,XeB$/L\[\;t^FJFϵTYPahHSQ U6ddF! f@Qt2dF]!s quYxhGYeY}a d [M3 r솥!HwW>+j;%_-XT$""X6=cx!߶c,%ވl3XL %p+8@ X*/Yj@ +.r^N Q/6ptqZ) U,xۨ<߄]MNPl7Ĺ"x GTN"$yvG9Oqb}zUDl4IK L͜ZŎi$LDPL^ C adY,VILѵd5h`  JkDNiFޅP uCj,\ty@ex !)M_QQBinGڝ!}ьU_A~q Tc%եͼc+Є&_>$XtI0&f& ,%߆Ud&f h*Sp.AN(۱rY&+NClTpwQ.` HU, :HyQSQU(@W|*FT!xACSJQg A>qA pG d n$i6Uׄr,$͈<)}(  q<ϐGQs$=G=@0Hu a(H|)BHߘiB< `rF*&#jnHیASL" JNBx|f=(3xA"0jkYCkۙh Lc~*#:I>zyH0I(cFH7aK?Bс ߬duUB½uj_Jr :Z@VB, dB%yƜZ܅(0[EEbLǮh8hd.ʔaIhiUKMNGP$Б Wd$GUmLR  X| !|^M5X)Gn eU:bnF$$MHаjCM_MJMh^bF"tȰ)UX3@.X P lC=@B)B=06f0CC(%ΪfD&p1ONR*XķQMDvĤ;J"G0 G|#y+H|(0 :@ J(\d4'D},o!T4t|:1JfEoX|$dBÿhTG0^?Z\0)Zrq &MLjLm V ᚅM`]FԙLr<2Ղ$L4 -=Jk 3 %D ..f'MAB+aj !4ΫjN,(>AkkXmHl`%"E$9Il\ǛAJϋDM'$[G?O=>aKtG:P #MA`K~w2b"gH p)4tI ,f@hEoZ(24A_PDgxtFӐ0GF(Zh0RœKbF[t ̓ըNRfdM 0sT{i)e mR(Sb-S U ^À%YiRfiaՈ "1C%L5@…ܴ 1o4esS|b;UXUh6a&B,K4! 8~9C8mohˎhtvi[jo@k^/&$/9p2 x~Q hTT\Dx/:ߛNT|ZA,cH$u "A BC:n:K5 4j=l`n"X$8,K䀪tHyvš9H3L6`qCiOWPnPtE7Dpvnk&mvlBxA2z@cD`sb :%v1SwFOIl@0:2wDWHT=4dƓXf@gg_9` ڨzzn(I`#J'`=LA+R=ڈc> Q5lC|f|z"'<8ƃO>"BE$CI鰇*ȥrG@ ` z`&xH+I/,@Q23 EQ$2 AE%HP@Wsi'DTcgxz 8=C^a-BLZ]I2ɄL NrI$6jg#(dN y6ک8BI'72a:ʧ~ʩj+ʇʺj j"Qk K2 ]Ը$/ՠL1$&3 ZN{aLc lAxA23j{论( QC˷;z@ذ.;ꎀZ~ccOk`;6D89\") | 4 =Ak>M= SPA7"+`DFq8ta NJڈHMTR+ƚ=Sأ+S‚U; !D XRqxp)wǠ xtį+ *ʺŸ'Gh<< DWAB(Dx*(V(x p?DĞT+> @1"<)Ƞ#p u3Q]Z(zaa k:ta cL1?w JY@b=HŔk_|RNLE'XY@4+YLe7>P@  E+2 $-ȋVX4 S5d<'6֚tT[[m(S5ݬ[ 85GUM dQ :=TVW-T) Y z u)UЋc{X :o ;G! C[AQ+*4A참ܬ$h@eIˇyPĴJ @xBCDž$p+]^׺}(aQޚ$ґ+oQ^^E0׿YXТH⒴nA E{Le4E0JѪռBnmbҤXn/L.H0jL,tfgfn''lQx:l'@5=Br8Ѡ,~ Y|mBK MP ?"yuE=+"V7 0yj) .Hbʈdp#M|4(^jp5`& q9ŏ_MaF.b ^RmZOȢx P ru<Wa9Nެ X((x@ZL+ZSP(lV r~> FV @ڠV%TdB*%N %x <: :E%c> $:a! # p @ 0p+P@b8I*N++ZgehLi,iޫg@+*c 2|/|kfI-Hih3)g8hl4hv` jHc2:Lp0#8c)l7B NCщ|﨣jOtL#s u@!A p4_u D6` $dy Hj 40u@`(@gZ*|8ARaRe( `  IK`}6 L}0Il2 K~l!lq&!TDTjD+$*[ R@h0[Z'R N%QE( aX @O`@p " `AR@~wNODB = rMT~ ^h ^$k" 8::4=4040: 30 0 @ es `***Be\JvNq0"ciήT2n 7f!`2\ia5k1Ю8Щ .l#plb5`pqNN< O>lq0dAlϠ @̱u8apAVvu~ BeP< -ᠴ(A6AdO FaΡhGrO`6@##MIK2mR L$ J!~Ƅ`(Cir&+hKЏ$OvmZh|UDָeRCEL$.%@ Q1Mr( ,̎rZ*6!⁵ƍ"ce`R9NDW(7H ! !$^$f n50 =S ð3DS MA43CU _s]u6 &p3^ϋ*lF S)LbXI+x7ii&C+`Ҡ@'@:.;?Q"L|v=3.|\qcnc7vv3F88sciNlc/8.&A zP40Ncv>!Ѐ-A֑eN\A΀8`ȱA.6 #@yЦ 6w$W !!A\`t(& #]DI}~شM~R l!iMnO$΂?R zrLSr̊y$d*fEהTdSXhVRVV`'S +^ZmRNObE$"H$hREVY,Pha b!."n>` <Ӏ0<3\M354x)\ӵu : .&psc(7p`+)Q0t.n VцQ2|.@f dai6/~I.Dn!=cif h`kv1fnO/eơm`HZrab@8Ax ! 7qq!!p`tq ڀ AJاM`~oLN%N@C耎>@CcmфyCOXh7BAX0 |EPEO&%TP͋AQJW~Nb36fn<7zѴ jTk@mB,9 Awzw<[0v>lE5uv2DQ"9˶XDE DxRpKQFڻJ WA![r9pD!a2IarG0~Ԏ D3Dė'ߣCʙ?OhYE`[$[jaW0d@meEO"YBЪ *lujXtmXr}OupdA E(}ƒNޮ%J&g< ]] .^0 ݁8ݩL@,]Z44]ڪEH8($drs G``z+ڂ,hZvc=+Q ֖nÿj6i&0a=L4T7leˉz8ȉ7o.{< RmC).5p}3~lhۏVs q͐v._tD]u@. `w~>$`uVy(+Dg@rArA!y8J -;}aya`4A~}Ѧ .§Ig* C$ê14PWL,Tv{rטL(Xʭ%<,1įBeBnŤy3Lmֈt21H!`hl ֬lDDԩQ6"m</|Aˣf^=xVlZp=r6sc LÈ'{1cfW*)Rd @)r36gΌ -" Ν1S(B&ZO{U X5jİ++BfJ([3gDpbN)ž˙_%.Z\M0c}8i`Gca 0)èD='b6!xRo[`iazybC\\a" 3ѐqX41TP"HB3= F D؇6h'=@@ İBdÍ.^$T#$xDC 9(He3 kHWA5=\X@H-?C0q ɒ:2e\s 󢋧^z 3\0A~ H&Ҡ+ HVH'~b ~==@ Nmd묳ң·`F::[F2|$'<1P8DG1DDlF XtN!E ҍ QȯNHHuFHDQ*=0BK5|Qij l4OHI5P9+Y5VJatTGqe)˘VeesKL%H# \GHcWH-܃^ kEq,m6fgChg߰I^D䇍BMT\=%AMp@d ww]yW/.3}Pp]~?_ {X߁)m ]P`_ha'N^#o "p)_C<*B?zIB<< b$ A.qG/E.\$OpA+ E Ġ<IRW"r@$]d Ad*pă@Ѱ=WAg 3j&}H/wH&C55ƐB=pC 0JJ pELTpA2V(pHA ]B>a@AJIP( bHV(aB"$%/?ī^~(,g)K>(. p2 &E(y$J81`ck,d"Y^ 4#gH@GTҴ 0} e+(F)fh dM(TPB},X{B6 R,9  J9[\Z#/n*FJR0F/ca4^#T41\(Pp@߀@: y.4D#Pa"cCsS8v#h:[y7g)؀3p0dX}Q i z,4u}S߉>j((`& q .ʁWF$/ `Fj#*j%cP8Z/bD)G;h FґzCCC]`X,}b@0T$@ шǝkpI] fQFܘu am-D$xF1 |" 15BA8T|l0IiU2Y0W>Z2e;jyˀ D`Q 1XeHHƺA)@ aN,3d8HaS@3HxR.C0 VBz^$Ei ┕P*EJJ4!X(>@BD/z5… Ԃ9p(#pEE 9݌mMN3 \=PRy:9>,NsT:|X9ͩGΊppDK_0! 8:`l2UGA DG,B.V@E8[I$U#R"1EyIRBPT h"8O@4%U-)YðJiG)KZ| 0lbTTk1!E^1PpleB8t/ʓCa4drɚTD1d$@IH@X7fe(IWF=^Gt?K[>`&0A7T %_9bQ0Ŕl{*#LF`y4f$*2i3z&a!KIJCO+qE u5 Q!PviHiv!QYtlXs@PJ4Tm@R8v8ckm&h0lh3rP@eTFa!< UAUAoChm; à  Yn"0<030{0`oR= p!pXA!!XXBp2E!"/btrb%FdZOEA 'rrC ]R&'t'%D%T&r'е $rB5WB3Zb$2@@ NB)G((1 ^s&gsw#=pR%r>{(RH&$($E G${G` `"I=uQ ;pV` a `^  i Ypz {1, {BRJ{{#0qpƷdL} 41  7 ?11;}cM#0!1  MH|єPQ[ }OWQhf2O\3Q'5xi PQ\F4jl;v8%97T fk`kk118qhvTC~1Er)c q+@mӖm@I PheXXnA& eVē ~@ 1Σ o rl` !p(!'$83:2!Z %gr"A_k'$4_ÕBW$u:Bze&1Z'DBCB(BtPtp'qts$]3A5)F 2uCE9 wt!tǖlpw850%$@U%C# "*?MpM@n$x w  =G oP @0IIzI @ - I0 N 0vz)IJT,IWK:VqP|ŧ:1Z}?L;Z}sZLBa{e;1Q}Y9]&fthP l AOE]6[A6Qg-1T!TTZV @'pYu*"gkk& i?lak19XFwEa>Wr]mp`am @q"V8nZ( X;e%I` )`=0 8pWxz GE>y"&"2EAYAF!nvUXZw#%2ZFBpB^@X(z#>&ڟ*)B8s1ZP3723P@C44A͵(NRbw[g`Йw S nb_LRZQc:ZS4~*p nЎhw_@n @b;P 6tAy o{)`P@hxP 7  P  00zR`/=&K4d0:NLݐ#Ñp0aUj8m<@!;AfQ ;V ij F= `PWQ{oQ@YKjbj7!bq^gp30RɇBBQ@C,D=A2DLB_ed#)$tU5Z>B͋(T'@d0UZCl;d:N7%|5({"D5s6BV*2t(") S\`ZV-+%$=a0 fMp ]0 -G` н4h` 9҃J[ B.P pPիZL  Ip{Kb 0pǫeQL'\LyF 1 if@P{6 8 uQ=,OQdw) 5%+AQ+q9T|hUADalPwn#5ƾ {#p9q0S  0 # 8gPsR4q"S=pU6I K K 1H pPU@ 1@ZVA 1 Н"o:  +퓁5 棈 "FAp#\EAzBy&r`ZUR2s"%,%A#T&\2>S"]QBtQ' r\Ι'&J]0^[lj#5ZQ=$ $"]@]k="+w`r 7E@1p !P0 ӨlWGӈj =<]| put0SH @ U} ʠzZ@ _  e-2 {"dL~ķL]fgx1 1L;Tڳ 3[9`3Pd 5LOh3OyFz) hX`!:ƅ=+?0ƭ3m8 k' wBcCFu:jo  5A>ʜP ;!L @}@+=`ʯ oI[ >냁r#Yy"A> *@$$1s @*KGAmwt岃'r"'9]5t.(t'ŵE9T(CH:@5@9 0W]H$I+ >=а@@PT8]O$t`(^`d@K) $DQmW#,.m R5C  s@y ُ)hҤ(,ٳa=%a*kqRUXLbcXZP҅*SS[7MwS2"#Z`GjJ.fjV3OMn+&R$RHEa̓ff!!Eʐ_P)HP/f^zɓv5h"3 R(=L3 aȵye  v]6#CZ"=1;ñХO^ul}{0Š"gࠁC@*d?nڠ6HPqC XȈ'j" VB\zDn|(m`Aicm>Df*!a|!_8!HNt]qB (f.5q`EđAn.<f,h*OB>ka;{ <B{XGFc%AEh"/@DI:<DPTDȨ Pc RE*@Ƞc/(% Xp 2  AcAUVAHY4 Y/"&4*+ 36+*kA)% :/qEs vN $ j@eI!6C[6f!M61 B6dthDXȧU&X8I#-!T%@&bZǟ!IISP;N) >FJpLPʄRP*+jpڇ -G².Cl DJ"l  ^34캼v322{$NӋxǍݒG4V6vh#jx9Ogs{;CK^mhЅI"pA XqUt $ђd(Gc50bCXL!zm'~ K6CH UEN  0W=*ۇe#qz}WPM&,YPXm)Q8m6p1qK+b4(nWy cBIQZ!2pTP;%Ec9eoֹax!J6FaC>BH wBDۀ:`Ĩ6P i`EH5b\%v8ZQjTSFnRMmeCP`*pD)y3 UriE*x>"T$(&ݎ"AŨ1 \}k"JWS|p `v ҪHqMjrg<0_Wܴl*x+g9tW\PkdZu'=O $6(8,@?Ȃ?9pR!]hX,Fa?`qùh6! pvm F0Gab d0D t<o'1 C0Xɱa9O^a-hb2FO 䊇LqՉYzĠbFRU#sxXZJYR[XC9X+xXR*T'@K\L}zG [^ hOK @ `ҍDՇ38fgBx-2F!k8 tG`&2PxP'68#XљhMHHMsMȴԄ 4  VPjHBU[d xU(I^B,d)U`V J? " y(2 5dHҪQQo xۋ7˩ʉ6 A}Xq3H ؇?x|HX7m+x3 Oߐ8s { :Pj9b,/DY Sc)ygL2Ӓ)Y,؄M 2gqJnj.5 W;/;k!FHZ!!;]s0V0#H n8)c)ʐ؂-p s&&Iz+x0==2/=J$QF"FEhnI*C]?E/8|BRxb8C`sNɰ#U7>  y%$wAa+?!¤A(<TJvZ6-x"MЇ '-M=J(@ @Z.xB8((4I@H,5X5+!, 01d.0RX6,NÚ}Pn4Ъ]* fܘ Ɇj@*ADEPu*1 ؋v;݅) P IŌ8z]E^ѿb 24+4F$]1QIo|J:~qFZQyFuI:K[ bL%Q"#Rm $H4!_'A<'!]@H;Ft^@d@<xb8 ɐJ[.BM:Yp&zId3p5=s> l3-#SHȁ+>$38DPB1V ̔8gjʢ; &H8KZX4i@r kX.HI!esڃ#=T+(V-D5(dH(oܑ(1UNdo j ?H)0aC H ! 50(e)Q* pːIdljD3H'H0GԋH0 ?D Ɂ#yXHeX]\[dplh٥78 ꁹKReE(}Ri|Y::h6H*$;`G[H;%:?z?U./q!Ej!tpȋtsxDHH>b0 IK# }X<0qU=̱Ќ"[ t;@a =[=KF d7`!IR:U9p(ȁaJ:[LھS%軈*H']8{ (HX%[> !9E*ʳ;f М>| M6[(6@4\;HM$Y|:'[8|JJM.y5(|ȇ^5 V|@MoPOb\IIr`HF@TQwPx۷U66l6xCXuNìJhE\oD8h*őq $h7` pi]`]NE3Xp ǰ[dQ8^Rސa57ޛK2aKaG^E-XtTr7K8; z ;JpGљ! m(@k'#TN bbxH`Kɑ}(%ڂ*ï6kYUVC?CNdq1K-xmUb#Ex8[fN%EI( 컂*P$l"+[A2X8CrdBI3 Q8.@KR> HO  e8dgKd:#Rk|ypSwوN`(NI!p>2.(O]]Oo,x:XO X }efH"q P3x'U)膺CbD/\*GPVPǹx9sɘIpYKFORhnPݱ @αȍ׈om-t^D,BKc,hA|(mAH8q1 b5a&0m[JY?]/2<1Vٹ%΁i@ Z12G08SH;f[ j(dB =#2 @{x(Fb xdb,ą"/Az~ H^CTWt/1bAEh*(r%FE9+Rh:@a(#)` ^7"^Pr1W$W$tBK.WT! @@G]lwP`AvXPh"dGC1@"p gpEnWP1wƅmWHO4 Ն5X%lp%-{člÕ80D>dg{5~Z)I;,U k#)€3 `JЇ7_/b@ ̃ 2*xC§ xAЈ~G'Ȗ,˖G2#fph-HDI徰O; SD6 ` d3 t/fd/n 1%L6:p$(r6 <3 |iՠ=3 fr 8.MԆJ!KMQmp%qJLآc&( AQ 3%y08xSb%Pw8Z8(8 bm@Ybǝm !.y*@"c 0`q3asb Pq y@EC0sP=0^pyb<@F._Pm|%$0CV@"zpy ۙ 15CFG(bd8x,P'(^S! : mD;x( šlADСQzd<,ph1}r0Tp%2rF$&6G0 +{><,q E@Q.Q061@'t*(*V3`A9) UU z tB̤(+]Wxhİ~XXp",h%#膵HaSG"1-y^0̃ cBBpY2</hK0LFap</xA3P,CcFFdhFP0Uh!3Ҍa42э$5X^C"Ol;3BTD"Id3H&A mk\\6GP f:m8` y7`\5oXIShbCrTnن+(t2DLjE/vEG"x0ϨFcW\\6( " Iv -hB.D @P.ȌހO ߋkx{rb!: "jau'H(AD#3>I4ТۉN}*P@[PNr,;ݑ _*z7":':(GJ FA!@XP+x8!jPGB葄Y܈5la#ƍ=*;+O{ƗjZq蒒c5YOmXtON *Т ,-</YJs  Z"Gdo !ЫX* Ke-wyZ Ե5 St8`/wŋ\ɬf7=W^ό<| Y` >fYdfxAb'fpXAmi@²M1(h:5̡=7"ҏIXbDI\KIM~ =8q`k[I."}ͨ)p$r lyl_٪78⮢6*/kVd>QH \цK^aԥ砻9S \(ӊ ƀ (@`36!&W8#ř@<zԤ5NZܐfy-o>OV^4#Ow@9ۼ0\B @0 QJ1> /x@s  9"SIztױq -5ӫ^ XpVZ=YT&-8-&O܈>&TmOFn\im5p(BxGyH -8{,C<<-+ K#r,@-` "!K8,<Ҧ]KH><˦a,܋=z d +p>,28iS!C'24<"@9@Q?9Ca!" "8HEOkݻ-¼aFĐqH,CO}>CP@ִQD\<,xTXWTPX7`&<)U6pMUl `5cm+4V5B 'hcN74ҵAF+4|Pp+#BGE܆"AB]k]rWPIM(^xBn Gy|4ttqSjxXxɇT|PD <#C$)#<{{ WsP@t)q$@.@tD%"UXLlX>lBo@Q8DTWA 7@ IZH1@=l ؕ6Ca)ҵ#?1ԁ/xomܑBHEB6d6-4}z>37In@c2Ř22xD#DF 4CJLb a0(bC$#."hA $l H\DE(K4*+bp&GPXUTX0 76hZE7hY0#g@[?Zl A pl 6rܜ7&BN6Nc$#rxk4e4kٖiouZ2]  <i =B}|sLG"GtmGwDDv   yG,HVO\ZK("t,M$zw{ /zH05DD\5 xP`<.Y/hr `=x$*C >l t,j A(Y5d518QpIq, Dh}T(B1Dډ]oT!p1ݑ2 Ē |-83ñm'|?ۂt-iziԉneZ%:J MMJA,N4 *~MM|LE@0h\U ́U\R܉n¡03&oeϕ. 7օ/`%68F-F1HFe@cSACL&6 " xA3/TBHPc E\+NY54YrX('@HP$< 2 A /r@W/X )HBF dzy$MtRD:@:ƾ+ڻ6V`O;fXK- *2aXnƚR茍NBӄ E^ V; # ܉Zp!\B@$`RBPD~|ЃA5Idx)`Џ D!9RĎ)Q DIur *!9 hA0`A8E_D ( -x CL'U A *PA^"f0: F.'D2hab$4|hL142Xj)\Sd$;nl΂') h*U`Պې4j!MX%JI`1"6U\=0Q :{C<\yU/sK_x0!cx- A0St+F;!HbbHgQ$c}Le9^B >rX c>3¡nf2}T|XYc/0230f@C0B kZFNU! y@C,CH$h5DWܭ:!d!#Zaݩy8lp ~( f7ťgJWd1G[!=l$aP3^;ŒAx7|)iBx0@@nexç} :R 8'}os63Qym">Ф5~hs&1` &5@`x j= XHJ!$*T?Q' _ !Gd 4΅h t_`^(G ɂ580 P "Fƀ70W'>CE?Hϻ Z`˳,6BEx ,%hS[RKMT8³@Rߡ 1\0C% 3,i؃"ȎЃUA+\sO D@<h1$dUQ/z50.И` UT4 Rl00?"g0ؖ  縉"3sߑJ4sa,QH&bBo`Cg<s`uC/ ^0fߊ '-H @4CI:G ?Hg ib3 "?[ ,bL*ؑ^ \&?c)Nh h( DȨr` NN Lha & `Rp, aB0D*vILbr!| zT$3I%-* BBEQW`aS632c2p``Ɓ: !0Y`vB` z-%A0 Xl:z $ !r,`bgFlB$V%,B蠠T_@Na@L &am"nv! @b^ ^*` c&Ψ6 Zf` ^aF f-&pd: hDZ`q2jh ji&< ^n ~#F!m""RnX"&I ` %rР:k8')),(rڊ`H+z~ +8`>"-`ѢG&ww—t+xFCgTycp:M@16V`4|h!a & p #85 @]o 2,-Ϡ$TDBr (":A2,`@ $@: NP|N ʨRCKN$DHDPSdb)$n" G-XT"$E`E@^J @na,a LaB31Af6ΩQ/cx2ZDqnc.dQ#`&B&|hHfIAe nbNJ".m $XMn.(D( Ǟ`-&j `!"L&ib)bs:+[nt~(Rq.E*ԂNlA]|/o R/yb"xREgS@% Tϼ`Zc;.9A7ҧΡ` V!&!I\ΏDբ&b`> 3h#,&8IF,HV}a h\Ї$Ɠ'4bdB2i" (, LBo DEN ~h|HDB\Ơ] alPmn7& za ta-iDd+@l d$܅r$v*l xe^ z@y2`%4ƁEE%``=CVS6IpRZǀt$خG ~[eHn :np>bK)@Mp*` Mѭ @ҏ0$N]d. @ cҠJU2Qojc` |@ j hbQIUePQGXf dV!iգvգlxWQ8i!@j"RX&\#< ,,ToR&@=&=%b)*ҕV+)~`^(`l,(/_qgb,0k4vo1Oa >SSN|.-i AMtA|f V6 pHbAH҈hVOcc6h@ 4`Ys&4,=Vr@G 0f >"IJDdLTH3yl "jWlB:׀,H330 i$k+`jhub"I m!vr(-b|D`ACDH8`o#2 ;fYn6vY`'463KbTk  R`HatU P{Ô!/ƠGm,H([+vh֓tMY1_TDd 0@! X FQ h.Ҁ.uѦn-fcd{[ Q1b{^TIfS]FcLLKfW4f^`8!j."ŘX!eA$H $o&)I=x5(*R FtX%bV (`p)8g*w~0O/c@DS22c>BE3: N`\\A] ޠ!}dcZ ALCTsaH(@욏,3hAUhv -\G$H/vn'D"4v3~ڈo#EA(`!DxH\NrBJ@,sB#t-D.Pޏ:A  riz⣅ &r:P,.a}(!v)C26*axpje;e}ԙ#S:!aa[$`؜G`~ *؎{nL'7(GO7!(ځT`MT%Mt$:{!bAvD*f 0樈&hJdQPETD&cFF#!vea1Q#\aU|f!dU;j!";S)` !z&r('˕&Ion̐6tPR\(#u``(,`uW 2bϔ_w(u2ǹ/xbx6` ~@6D82XI3t9Pm-@Rc*v|!!3  ln vR$@Rd:(=raF` 2U@RD&D,r\9%8_,(HF*U!$3Hhfxɡ**ʅ2E8Th*8̨+7ofxBkM @Ck,W@O5$Cb;أF 2 :"E-TpҐW :ጋ0]z [5@$Bc5]N+2lڱi+Ȍ@Ӟ=)X6{ {&Ml@t̃c׎ݹҏjԸLpjڔ6 i]?yE rk):)ٴ%c <(Yհ f%sq@Q~B#cN"zBб RM(cJ#ɘjAihK dC7I*,3,S1,Ǒ>DbF^SL@j2]N<> 2L tB:y>:ia aO < :*zjzz Gf1I4^Tm@$pxA@ \HcQm1N8!1&{m-l" g A*?8Pp3ls00 A #&7lq#֤Amppܶ.r4.1G u+3 P  uqr,hp !Ɓj9@% ̭a `A/!@t D'ցu! AJ ]bihP%*HX&)!I BґnbxzE8H#sH.u}e,E d#2(HAB2aN fDel ^pjb"EZ]ZPܳ3FjгW@,7K:õ1k '6-ΥzL  (YD  [6񰇱t&A0ZP8\X6 0xl2e80TWF&ЊBC&u0B+f$o`.`t KCc 2a8'I Ѽ\-%#qNTDE(1XdnWX̴''Jf6A"*9@ 8`ht 8ҕ h #*p;42%FRDo3ZDCх.h1s >ʸ)o,=55V8Q0Q3`8ɍP MU4r+G95P7"<7hk`㓞;D"V@q0A)@EV[<ک+O\WۃHa1Fa"9JFakX<恌5`q{lCQ$LS#wMnH +/ELhA2}KX%+w'Rf Sf%5(򐥥P$4cSO>&)J\RB j3dԔ&5kQeÛOX 3' p\{֗Rr 9vCeAPyn[L,-&6Q]jGA}ae,Z2}A`J<5Ӈ)h*2k[Aqq*tpqQe8;~ `R=ANNUBK1Z16gRcFW2T- uG~$yU3rD&/`7R>aACwWWv3-G,KZ l!@׀*.]2J֡@r@cF  8T ZZ2D{bM2&Ad"p5Z{aQ/z+-$[z~nB5<8E)N04kl'k/ a!=(ʾ3aoX96l_]- +"eE+W +Ax,c]!!F!!q^Y^0k0\]C05fGkVIVb%apT%VL0fRIQI]iy%v$ KhPj=i @bAbfPMr҃ $6iUM(@ d۴Mk$faq,8+Vs@GV\<ג3HPc@rRU/Q.f E 1t108R#p 314pSS }02T%cX@w- U3o4@P4UX:3 '' C{sk8 1w P^`kP58"Pw`OU UXwaS^PZ00,UC368AEѐ988 oy?8%d0cSp 3Y g " + Cq ҳ"E0 "pP8_ ;!w] e?5dl a +4x`p P1Ұ Sca) ܠo?`Q+y ڱap1!0v gE9v{`! (l0cDShFxwђU@v dt] $(p~e H? Q ,h6h -TҞ%f$=x$x,iyJ$|J\A f0jL/`4L @ M j$qM҆tkwhN=lRtEƖNQ + 05+0pCv)090`n.?!c Aʙ @d11G.W.rPW,X" ^ 2qc77"X^i36YP! pp[^uՐ ]hЁ0wD1WPR!  G=: xX *Wcsd/eS]=p '0aU,qw 𖻣h` pxY mP0`V 7Aϗ VE Yd0pqm`ʁp1-)e\<ꁺv?a:}l\ɯO y 9Y&.boļd6]N1`=\B1)3 )k Nʺm ֔m@U}Awx9 `,rMQ"8lpiϞ('pC `xmxpǘAv&ڝ,< i0Z;-Nw hnjtZ# ACBH*41jVe Yp%lk+`ѡB:T(Q/!@L,c [@X)3eϺueʴCfRNTڴ(`e]iv YaK.,i^J7k_}Hɋ4 {:d@1$͞!酙f̠ Eʐ!l'|/lCl؏A3B /% =𤆔n =:.Hrኳ'YAYHz /V YpM3~g6VKRDM(b""x6ʺ ,Xqg1~(Ơdmp119M`gRA?a(GI PM6PSRk:"9 6Z0f7f,9.#ÈFE#lcȅ . D "[/r-Ǚbo}%]g`w/fgUDtP v5by Z*ĘarIB *ȡޱy]Xvǚ\iD D 48™|!M }"jx`8+ \Q\z D] o%lg@̬|!!RMZd2S8ݠsM4q`YzP)%ΊfZ)u<i7a! ul"di#kD,pc0IY1Dϒ ( /r4~@'ivtШ.h@e,gu N$" DA :Dq]f ЀrZ 6pMFB` !s爂iDpሄ'\#xf  P}d jȀ}hlHA6Ȇ}d06 E?P04 Cܓ]JjpC58F\z(\ CD61"3E[,)Y P($6Ig pJ4q 8ڄ,Q2JY Ɛ:r8%Ajt܀f4a(DAX07u*,qPDEQ (֘Hla#!Uz!pR'x"r!Tk*Ї>ԁ ;,X ale>8=\ERБsA8OʤĹ)!aw:9:5!n%Q$Rd%5An{X 3p!h* EX2ٙ @H*D i!0HAG"*>@A VBi.AASslӚpiAr5>E~:Ȁ8)+سd H20>c `WFc d4?!P8g:%xy{) W0%-,4+ XT AX 4R)&@U2Lh:Cࠈ[!RNJMoED(Y wPĠ͑@sD67ItD{C`lJQ :7uʝj%j ' *#X ƻS`bbiQQ\2= K%l -/ dL "EWhK`Hʸ0y] eW -! Qc@C̼ L%=ѓ"4xcI lJQb&F1zX65p+X%cE,6k+pXA@,0b@@ ?ѸЁH?]Ѐ1h!1]5YPYTp>"$P2(3yX$@2ʀ(23")"5 i`l7;'<'08{:BfD>h 2i;0L>J"TKH( @:X0qp3A$Q$Q2%لO|C&JSK 6gL4d#ѦJI(&ˈi3Grڃ#Ј(ix'p_'#pBc0PaK8Pن((CpxXC`~1,:xt0)Ə(]@J*a@yjtl)ZةCu)tY 2atmiکb.rG/pl!+Ha4Ѕi/ [pZP\hj$H[hղzpER2`0d~ ä`* ,(DqPqih00}фMؔ<1l >|8?eq Jxk|=DzUB+:,-W/ Z"RcH Pȅ 'xHBx0Ra qL] 00`.$ j@#@jWWhYPرNٰ !,pvXn%z$)p n,B"+ʀY!T1C4RxPyf(T+,S0IL"h,@EhXMEѥ" :((:@Dp29?tOC3x5#-@A&NDQ&Pm8؆iʈcۆ%hr 6Ra'n<ϛZh'QEF#ЦKD]#zmS?}htWK ٤k|(tƌZoAr*)X)v45Ip1Gt*X["IXT`^V ,op)Z0*P֌ up)V_*u+HE2IG/^6Z:RQahX02ȅ"` i03@.i3*(XCBDP*XE@d2jڒ"MxY9ӫKJ@=88(˖IYzh @0SfH 3rC=yIkOj;£+ 8p4kԤh[\*D}HӇP} oKJNV8V0ȇ|d@% Nؠ]P1J帎+2}|jҭv#B؎HPn5Hx}A,""D3]4 l04^9P#i=a׊/))I}[LX(@qT3*EV3%'4?̑,ђ~pR\Dȓ=p6@Aanpc3EaoJ6n` mCfi-tPYaY$`#$9Y޴"1 dB&>A.>ecK LKER)z7!SFIkwvv*KW WhT #@:.(e1ͪ0\8IB[c8[x#X0/.(҅tcج^I{S{XN脢& Ը v ఱ6p11En02Q4!LP-*AӽYx%x)ʏ^P)(|312!1 I ,["p"0 86L&1[3I5>3C4i Y,((=8MC|=eF@==Ehv={F'rbtF6Ubwz#((WmTiM 0_dՈv8V-)rOV7)d;JWi H񆈪q/d gȅr0sM U3f.8J/O)} 0[胊o WH (hغr,jCHjĨ)6ŸB [gbԸ# Hŋ" :R -`2mYX|4i3&(BAI)|@6n6Hs;D.|L O`>!,fd0K3dC(bX"HdB6/b2Pc/(#8f\C A*]Ea{pEEPPt+VdQ@aEP,1Eg|2EXF{胧%)&qEDp|֌%>TRBېZ70hUQ>p+7@mjRkA )X5k W 61^aDKFP+ B*3TQ 312< 280W/<^x $ܾK}J^3O9R u2 %@Lpkx!/uLK`0O8p9¨H#dTA,|I$@ 1DT8+=xrI|q$BaL pp tPPA#yI?(r _^H@G]giyҐWg E ZPY qjhG}4,`aZb"B |(" c @ P)p(O@N"ƊP$hF4!a@HDZx+\؋'< hX*Э /   m42xa)5C?9@Ig]*@+(>McRARJVPPBU|TEWe^sW{mg=KZ;% B`$x ⚨4 Ha%^Wy@G//^+HE {9-}L4%Du/V^X-E X|a0Ẽ׾ES$M^cjPи*`zL aCBb"0B%@+ p -Zt!f8.X+@.CW(1 O"E0zЃb(`M3@+ PF- J"XP]B1v8T>0Q Dm48b8WQpC8U+8] :" :]= K KD0Ή=%*$"8ļ tF\\@Ga@/stMB”0 COLIL.LLu Khe#Ma@=vFp pK͋7xC/ RuLXU/,d RmTS)BpLTBg(B`-0@̀/dT"0CTA? ҺP ߼p@LF\A.pRd $Q^+%pp@F x'"ppX>DNp[8xq%SN=l=]@4PaƃCʅ>Xa@LF,%@C\Q@>f@h|a]50C4ވQ`iM^Lj#$txOmjXHZ %J/!X] -h@5=BtB ,AA|@)@.tQ7Ga|{txÅ Y64ÏLمRґ!3|q zɛ@M) RI\ 4aA*-- .>p96q6iPȊTER xAA>C*`x $0Gygx ̼æzwT@*00_"DנA.Aܰ-(QNd"BŬ@Е'p D$\KSv C?IJ1UBD8eFh>HNXȊX8\6W9ENT8=Ax]Nӈ%7$T<.Bnq 8άK]Fp,aRidnĘZZ94fԩ`7Dӎ ᄱU@[!AuzQ o$B+=)gz|Q5Hfq}Q:+< 2F!of^hZ`$ҏaSJ +IܱZIr!4V>hZ$BҺ&/Z?ɭi%+I=S4" LEQxrb-+i̬JS;ӯD>mˉ A=`T ! <4]&D7 x7ÿ\̪TɈT"IŔMAqT#sX R -MS T!pց7˱ql\єC.$Sc#B҂f# xkX DZIgtc1}$ȋ11B Kt 2PdMKՈX=.=ɉ= B qx'K7PARQԁPҽ7HTՋb08n*BPQF]KMЂ,@v}} -@f@P@ߐ xr3MeB&&XB?T[ < -mȄ(N]AE=l8iB&(S<59]&,lj/e6ѬABq@iZC4DoPB($t`nB&Fg4`Mg@CQDro) dSq@?!$yD~GoZ0TU9ࠏyqƋcE bC͕ZH‹+Z8c@6D4&EMACWBYZ(gtq~` gf+Bqb , ǼHX ZiBDoy$!`8#ig|rJdJ 3FD(ͅ68bGRȈ$MIk# g|&{GV    ,9jW6De `G\ )32'ppum[6Q)prYEk!i,.ȥE(G_ P&cebuidL-Hاy|ڤ6rhWa44A) H$x P R,#@t!h:Ɏucdxz 49k,1X  ѡE؊_$Q``' Cm`A'0]D4"Q{F"mA +`BֱKHjRݢH(!DHHi0Y4M4Dh]ALlf m]$0S) F>C"Ďw< A6Cb=alh|5ϼ0; BAM|KD(&]04W4h T)qw# qEI8h"%6mlbk8 c6rZ7U)x%+Js&Rn sȔPZL55>YXP1l)gKP%-* U-1Q ޠ1%,XUW3@ր eRޢűTV҅/![yݚUj+G/ЇxQk7R OR^W1EC,KRM3`$wY"`DZ <Z@ ^dT0"h*aT *pD{ 3 #hqJJYoAQkBЏʃȆ!R#wXhb/|ngx-r ' z @A d X?@H,t C4*dFvG~+( uMn$III&4 a > MK4L!" # pbo(M#"F| hێɘ\ %FVfM؀h]!RhE~zM[^V| |A0zʁ͝0<rA{ 8 BB݄ V*b@&HZjRȠY8lچa t,@(`Hvea㏀bR"!X@ ""ʬؠjM  rl r I(KmPM!-NR@4HNN +p,( !X@ NI{$h"dht~ a!]gE$ChhNJG*C yHy| N!`hQEUօ]ZJa ad@2oO <~`o/ Z@A,41g5DπN,:P !t>ĸ`h<#Vƃ=҃j  A < 8 H) c?{nAD$GԨF`(@ԂN+G<]  Z'Eh6,DdsKM ! d & BpN" ,$MjuFK|kzԤl ITe %\mTPԙ Y4%VXVEtV%Ut#XXN(0Y!LBfM*%m,a`Pz f/KކIR@,1f2 sE h",T f(ʁ ` /,jJ+CEQ@F za a Bv v@R`, #u5 2JLJ P ` :I4 #S` ujz8@6bGz J&F:"<]A-gn #ei  $ pR]@nbC0!Rz>Aas p q"@(-LuCijlAnuJ pn 7>IpD pBIVH@0Ġ E$@`*sJ& t*|'Ub@췆~ 'Ȁ?p:Dy volD.`+ bҕRA{\A/w~nco>f5+l5R#,2 8Ҁ i@ah6keH6j(=¶lq(=>-r3-Y0"Ca *0DȳlBrD*bzj.W/.ta@jERT+%ChdSn gJϨcdMzndLK $Nڏ%|G|i_n  |eX@T< }TT۰NQ}EXVX~haX Aܘ)Vm\!4G%U*Ҫj\%hs2ĘU6%|G.{PbPcdLfF_|Ѡ\|h ,AAn/.$`T! #@CXfaaFk"- f޸!jaX M .7B #C k* Irj `` F0 {%b'`A'%2/ k.)|QGHB hqbdAAA! N\ %ۈeNtbt/0+7DAٞh%6Bi ~B< 9Yl6®!4ɖ6lm #mu><t"0of`x <—<&`pd;t oqWs]z(gzfzu\v ӥް @ dnΎ)v$M$ǛB'B҄%"q#6!@Pne0@v , p§I^>YjGE{~Xґ}D%NX`%Uh1"}HN zm\D%| x p QDT_n_\-MJs N `FZTm\Aha, D ,41D̴PDp,`\aroBfkjvRkqȤ:M @PX'dMXxDB%pBEl` Na 8$Nw6b`ET0&badg)r*d_pgVG5o+kw6牝şN ͲzAa~eDc 2ɰk@QE+ìY^Tƌnlc4҄E.Q 0)S"-Ca )Hl? thPO&ThcPJɃ'j0cUf\@h mxXh5]QHHdCV ljCYgC&׌3~iC~roS?@ ƕPM V#km0`7mp7'שּ97a8< )ʞ=|s۰!E ӫ'缵=6}uQ~CDA/h1^T R-@TQ 9xQ-SN9^qF'2<@. C"-3<(h"3x -˂#<3@27}QǑuˈ B9Ӎ@B #ac1+E0B:g P8>LM4 Qؠ{Q~RJSST0=0W\J31( iQE}qH ?$pedgg64Я2N( ۼPq007r{8Cz1G9o%@G uÍ`'YMn\8O|"9,T` 1 ܄ gb -|5TD/Rt^CƀDTbHD(@8A?j"d*JD^up*$z _XC("ZAA,( 2 ,E*4 X) K A @.Ȁ4T Q;Z5YAp k^) JPb Tc<)wk;r> H@@ӓ0K\Bkȁ"X@K:agH-6T"@m]242tPȤF+;>c 5-4E58">AF0F!KhFm N@A"p0rNpny[5"(\DXphG7ḇH.S.xn$cFБYP.jhDbD aNwB!vC񦛼$5ĢUEBD#|X, XUпMp @:pSJ[ځ)%mg[0 Q.o.$@ՑtS@o@O0 "A qoד(H=S2]yZJVz8G@T9 XߨKA y ?en<i03U`9yd\Q ApsQM`7O8#B'v/9bq/3naAEA.D,)P `gu1 g0%Sfg,"U XkX.'πIPy!VB"J-"SU0"#3P# `JK qFk #@FGf  PrRh k[D@Rצ(0St Pt'JgD $ sT 1h 37Z}Fu mFkr&w"P 0 d,0R ;P DE0h ?Ҡ +P%Q0Pp-AD ce ho4)-)`-@,)Sg3FE sR#C2f@ C|G@f$lt*8L. UP3Ep )P OtPa b5r 'F߰bW6' o`&@p$'#xuw7q8 Zc8.q8j |`:ՔWx) Y; (`z`Ж7Qz (0lzCO {LQ{gPW< ^0te@=PAL@Y pEP]>y1C?g @pW%`A# !C7>`" .A8*(bx!Q9pc gd2P!ODP@V2/adg@ I  2!m#T& 5,0h'0 h%"")TG,gB( RbGjm mf##uG*=R[s&)3%b TG}PJ^HFG Br'j"ei`W#KUm~f+u@j3!Gg0L1 ɂTmB6%R3D!a@8,P ^ , F ԑ,A&OԒRl-bRa@ 0Q"QA n".9ȋܲ 0nqP>dK lPt-8CCpe22l8 g$'2 "cp1@ o:4PV )C,p WX%iYY`p ` @*r B % ȐYtG~` 7 D Z0 YQx3i  2ycIf;7Q0;f`;/0/ p ץ,; \@(T S1P? TM1p@~hA51?> AJ+ EqHb*B3&c/CRWChc ,.`3$E Svf#V'," T#P"%B"mJ&F)E&&"*@} 9 5@FdG`V$""E Yh$ ` ^ f('6&yhpaw($)F2,R#$qB|$g LV(u * (pJWCm\Z àN2N^ P 5O,Ѣhoעp_01w.q A ,3<Ḩ6 pq f(sT?& Tv!`4x2EsTGZv2LU|,l8mpW 4`Ə'tPKYS=n@9`J#Hr( r1"ՐB`wp |W9YJu%#9f  c@ ez:1zn0t ]&{4|==^<0=lL+0Eч<=^S1@01@@)d t0^Wu@6P ?A Pd`A}:T*6.&Q bbb.!A 8/=˸͑sqB R) _Ҿ8hހ5)Ÿ !pgB HA tfGVG uHRGqd)d$ "" WrJiWV9*%t)"*CH5s tY,J8 a@$,'`҂ YR m@,k[@gO kx r(P!TPDX ËPe"ۿ}cPp s-Hcudb-7|{pAè?e~p0P4'R|E@ 0I)0ೀ BjT2g@@g H'V0VTALu8PZTp#h&te}'1S PRN  y8:l8G aZZN@Z㮳31/@5QH KzP/˭wzܖh ;7AQzŲ++Wwl \d@\)C}+`u*1 p=eUބP] ]Қ4# xUahB HL7)` 2s/Bc`B"6dbYEDҾ1c(.(顝#eR,8sO%!AL}[$O(Vpg?hEF*J2flDa e|dP B`G02$#R%dB$"p vEI'I# Y ԾpDR?^S YOR)tj$@[}06JZD`:p+WD[&)N}Fw ]`+C HD,,x {` V P5P$Q"@ +8p o6/-p@={RE/^p-'D', h -#@Us` RL,5@  *D' "~BeƲ 'P Q%& gkNRXA`w7:Z a9YiRٔ||x>ޯ䧓yf5f/ H zc\Ŗn9f $ಁ !hCO=0у@4Ű`!hs!"^TN+dbDrQrW#M)R@9j- fT xw!Bp8ӦH6d)  ZH&:d ƞ=ng ؞(F ,6c@Ƌqkخ 6lɮa{6k4 {4uլ+t0mrU h/Ї@X͛okXCƢK/]!$]g'̘Grx)Wy3f*ś3Ӈ;! `#5 5 @1n!2m47j1Ek9 GkeQL):cLtXYa kAIMc.$Zr]mr! J0- Kf H(ؤ 4V @#Ad@Mb*  )Kђ`9,Kp/Kh,"4Hx N _q̊#+y|prxd0EuY>tA]ze,ZhaW^! y]Di]2e >awn2Ȁk5'gHif lېlې{  ?cs 4nӇu38S ۀĦ5@ H? /K }p-E ZdBы@8k R/h dB96]`8-1y)2p8;E!NpTG0.*D_$ȅ0(DZ<ITaT@P/ `U y_0`` @֠!9gM,f# rpl / .FYP` h OzBtH9Q HU, !(|~ <ņ#lM-!X 8*N5CI`P" RRp?Ȉo|0؀>le cQl4p! EGzG:4zX,E `$: :~^Dtt@r@)^R04r f@i?BT3KtԆ~E@LQxY%c[C^!Mp2LuĢN e K3,Ұ4ANB<8 30LBP[3 s䜡8%" n~`/ A@O :[r@hEXFˑ @@ XA{dg8C7J׺5 g+vFZ7BjSHZ34 A auM3aR [.H\4{1z+${.ev`p@D/h dH , ǹBbxGV4I@?:& XԘBdƱ Ϝj+j1~/Ʉ2-gE؊6_f|@D!QmrSb끄ȂVc @?1ETb0'r(!]H!~2]F21:,y(A r&+* y,(O:p6cH AR% B:Y>樃L!ڳ"À3KK$ xp"M :5@Nk?< V VX|8GVH|BY `vڕGIk][85|5C\RAD)&}8c@5[!0,P)j YLZ2849H8786ISyxk(Y#]H!H#/ -p 9hAqA Y D6DGBJ0j \HX{XЁrZ ::]膚5虤Ȫ)Wx'xlx YI;yc8E.-֑axdQ֩x,빂YpBȅ X jY 8SЂ$*98\ X 5|m"=*2 4 è٨ °0"K 6psJ F0*^hCh>o8oP!ox>!NN1]pr Hѐ$"|)@ *HAapd@t*x5E(hI :3 ppw/:@=~Ȃ:84٩Y0M`'i374W*5JCK/+^h$P51xS49XM?܁UaakXxD (L8aDKo6iD[`#8A,*Hxʐ"X F4 n @b̩["dy)߰&62x+3~6 pOȂ@@?lHj.8țȲ4؅䚭)V>Hnɰ)$q $Ȇ²iɽ;Rl ڊǩ+hlfP-\-:h",c6QZ;ȂM5ةKLR*8:\J,(ox=xP~ xHCRVxQ% 0Q:Yr818\`^a&I2J|0Ē H,*q6[p& 6>['2t5o"G 4 @gQ"xaHPTz9:KB\⫰/* pi3[OK)`@uJ -5 mፌDFDXU.:P Ȃ|xGXwVVzuu9i+,ee}zִa⚪?+̀)20e@ydZz-ȑhH-B@x;E}9 ?ؓ`c&cJ"]X|P"1Er5`Y(&)l g0:#>p:Gx#N}D[ *YAA5'|%>c:9AIQYN2dPd4h֟;@BtH@V욞++Q)y3x'x#@O>eCR曕e;a$a h۲W$ fWO 2 8H`5+`E;3TہqZr`=H PehP9o2!zq1/Mp>ȯLdˈILM!> ubEۻnhZXύyЊ#XDkUJ FLΟFIgaVww". "IH"q1H+!0Tg#l3BBQZ] :8Rw֕>Hka7U 4/;^K 5[x*tz~-arh4Z.-|XCZ|鐥^x8PpCIG l?L'Hs2(*E.LpM8[J15&`K8 eIA]`E),GR )w(4FmלGȜp2?>MYO%]1g#-9gAyb9@^px;ܳf<:؝4@6g !5(+` I  ` X=nOWH陎L,A6I )5nWE~'$}@$0AeH "eА62l0["ɕ1yYhWף21<8VÓcǢYJ* pQ•\CQ6:^R3@l# d)$8E(YdI(0-7ĹrA 5qIǶ(M5i!E 3m۶1,s&@AA21Ɔ{9ްgCe0f,;Ӟ. `̨! hq@k:U@k uv7~TRW.]/-3Ÿ <83P<<BTA\qE߉d=vD-y4d,Z)b"²C?P-{blC0GdZ)JsI-Ж+Js+8P"Bb@HTw@ȲIYRDt@"VDÌ'[CaVS$vmJ`&$T1Cr&glq@<(lTX^@Ot#)pCLoNRܳ:IJ$#( (Pt2 .J/=++X], ػX=QJ:Od<,I$ D@ C!C At#yI4[CI7 Wp!xr'@@៾KG[HEa8_nWR@ m"dEwY!r?*L"7rFAIP&90~lQlgsQpavhgl#?8nnS>D1Fs(gЅt~ Y@ufЁdAA91y. H3O1AI- !Ä8.D E0|1o'D-za%`œt% aK|7 jxa9@a,E@S?\3⏛%A , H >ޡ 8ANtpJ+хA ,pTƠ( WG%x)kAd " XTЌnkJ֨4(e M+X;feaA0>5:4 ,XAR\!3EGQ *T9b:dSf@} -ikN%73"U Ӈ%+9`Fv|,eUb <@*Ɋ`2wT =~VvhMc ͩ^cZv5i-D]deZ̐}mo P3ĵ!x^ "i`l2!1chăsGOTA+qC6烍m?If}_&m{gT@1cC7T{}~α5R(8؎QIs 8~ 7qy?*J< ؄P/tr̃?:t |!H"-|!?Ab%TT$BAЁJa@$2m & C+@6da3C uȂ%lA|禈@BAF[ D:) c )`J (t`-rO`AGQ«hs_JEYIA~mފY2 [WU5t 5"p;XA`^GeveR%-f';4b"*|]3 1\A"!N/ &YTk \ WbCb@.ar*$ 74 ^z^  Xa(èE >Mii,0Uuij0X0Vn.|>tC P3Yu S`k$W$샮v+C 6t/qm.b8ĢŠ2AJ`[qAẗG @rAZ3E+,p(Q!v6}lY&HP1a Đ@ ~C1<08г,3Li{М/ /ǯ7/2L|=狦qf Us6!+[ԡHc/ʁ :\<̮X| P|8T _!@цHu7H̃"8/ y3H <) `@w |ǟԁ)YȂ)Ȓ (T]wȁ-xG>̓I& ! ݔ<đH`he-+8$HX.$mZ7u$6"$Zd 1SX Spl*BlB A}Gh+YOtQ%TȓFX!@ÒT( ${^4 #@t ܣд\ Bj`BM&(@7M|U ]|i]7؉^PUڱ=tc $1S@½D4h"`V0OnLƀ7VX"X˜H\jZ77@4B5H^"A t\rC`Ar/ppaf_|-fo!Qef(L`e|ņ"he7PUm!Bӂ86Q<>`l`/zgG*PwCЊX`0̀\u#--p) J0<]Ǘ@+*B#ՠ(ق̓^ l*HtT~G+zXaAa^Y-zTTd8G J#@0 )^b7A)쀑ފ5qHG %@T" 2)IOpUҿxoγtK1I\)I?fԑ1 !XFɢzt>̶.*,$ĩ <2 XI"ԕxL'{Θ)v=: S% T5M7.ޜALUBBMWMX$Dk>, BHU5JZJdN@&%)V'D S-^D'XS@ rq e,Ɂ`@rB%|B"ĴPAoly06inee(fyoNlhp&/le iPB=û- vGy8xpAy@]Y> {"tXтw*I*PX"$Ptw0 :I(-Zd !4\gG؂)Z(R%B ¡( ß@BG_%×qcf*!aƔP !vK}IoVJP8.8Zov7Z4$Z61t 54MiX-%`pi T,4&D#0\D˕T@M (IY (,T-IB1 .3rCGiw !R` 5sMytG -KE$H>t+2C;@X-@S1A2Бc.t$l1t AYY HB]HD UD.<^4b$%@d teD.BfND<ХU@I>aX 81qE66U 7X@l7IÓ 4"nӪ0e;J1% n>h,#Q,( _ ?p  (h*p&_iBqE >5@AdoC~W@h]`@ 7h?u|T z2%Xz?` =9\IdM TiER$~VQMd@$ YHD`Uސ@ȕ%V2=KNFXL(J K\lBN%#cy8"72-ĊtVS 4۴pe >(@! @@:%=/ʞ=)vf }Bm€퇃ܘФij`U̫NjcNk:nV-iրmhKs65u&7n*%}?TΌyU귩- hЪ0GY\Aě>ia0CX EyOTRkZbMY]|VDfyND9'%;hyUf1B 8ni#`+(P,?[氅+aH~`Òh#>(pe  YLқ *"4'邎 b` V(bzf8VpK$Ӫ&Zk,i'[v (rKZ`Kɖr}IA"\H(Y< -B mh(q HਠO ,IfĀD,`GnРV b(:A$}im^\/ AcEE8 \@DYc^1,ara ٰZ 7]X0a% 򑡋.>P@]v#4fiWf% a6x X '} 2C}Xf3^p8)dHe Ɔh6ĆlFAg"D 3,!S4 !b@O/fؚ EȸBmxdQ2z!+h \FSX~t@#G4 2pbW@3\ 4ٌY4/ Yp`mLM6ax)kڄ}(4`p ڃ.̺. f42+'~+ >96 Fi*f$Zb4&XO3` 1g F ]Тob ]CM*t "xFp C"E/z ]$'8-X #pEfo#mGqm#ؚ,Џ*?m GLb K,QP QC8П~%, Dg}RY`U!!`96q8`({&aJ#pi,y@SjT C hI lV* Hp\?D pki¯*pT]EO@dFppW^'p@B9ŧ e\fC$b 4=&J\6!1C( k;1QvԊS"C(`. ,8A&B*gO&$ $@A=z< Aк@ X@ '!BdLւ~b+)z&4a ` DH6 Kk D 6ADZAI^ 0)+emr!%rY0`8IrX!*8er &Jl%6R@rԃShrm)VO` D 2zHFPE daA`p`0&bb F@b .&c|e`| zn2 @"a^~H脮!PP j^j!Rk2O$X`1XVA j@A 8eHpr8N@ ">"~09,`+ "xb(K0 []#+16PE | (ab!)*`[!!S̐z''Frd>6 ,=Q4̲=(&b5BGv&"Rs`>e 8b J)KR)`AppyRi$-0 Vg (wuBwN_u sJ"2Of,xt'CS|<. hġ&A!Van n0@H@8kmb`4 L XGJE&q pO$jK&H&Jx]v" _OG `1?~8O|3Z֠TpqrJ qLaZ`N.aF`!F d TF+ex hxU ^`2Fi<,2jz T4@hADrR#F oj` T m4ů $$s: OEC46:9"6H c"h%!*ϸv΢Ԙg֫/fb-E-cG&rJtǖB *brvc m8Lm fDt"(A``As ϰ"k b{b&MQ0! {4mس!bYs➋n#m8(G)0`{ZF"Dn`p&`AH@\A6;Á- R!U@,@D79ՇVTk ZD̳(<_R={v"h-7]{yӧg9q x222R=N=2Ls BБ ^A$T7r/b'@Z9\"5CAPdT 42AɎ{8T¦\,m HpWTpXUE18L $CUkra@˜RSH!:e|Ç(V@7Ҋm2:P-km$ӍD2n$#+/NBp6(,C (dCJfd2<?lC6 3=\K40sL4P'[hC@@Q0d\CtrU(H xQZA;O^(" %უQD,֤05<&"H5# 䗞&cL0D1wKa+ZGohTEgFm2TVLcŠK<2O3,&ZVbMdo>'X q3hmZ҇Ё. Ԝ o`n5t`A` `l+K\B&@~p\a @PDРB[́ hE+~CA,# *Y(8Ȑ@"9`2]A^Ҹr2Jd!-4~@T]d %BN=,SC2`Eށ.9`QRa,JT\s'\6%ePD b@xaw X -88EAXX p@(@,h$6ln@$SPxӬ(KzyҲ2H+څbD} t,zЂf`xABߕz+SW6,a0X fRD`6h&fـOW @<уcx\ @ .\ HCCYi.OS@>P * < 9S(aN S0 d@  Y7j $V }X%0ǎX"eD '3#7!&X9L%}՜>(QA=E-F| ,*arB PqE@:Tap]ZCB+>чТW` wT$-(ы!xF9u>.@LzZ} d>bt9Szдe0@B9؊laa-Wls%xFء+C?!, VC$IcI 6IcWܢQ.|h 0@Rm$HFDE(ۊ0. PެCB`+хw Dp`} Hoa>APoH'52u' e%`$C4aN@gWX^vc}2{gz׻%/ `(ѯD_G 0CHbXOjT.'j@2DA<B`H2'bI1 WP%ܹjbbA1u-6ԜJ :Ph" r]T(lE&67m$ac[##mr8dp/!@"ϭuvr6a =:N. 11 p@phT {S9Sh2X^hO#՝/|do/Л db{Ș_iaΈY1=ф+J}aK dam+Mj:?@GP | tȁU8095ќ%h @6WAlaT[߁3F,a Dd#v$ `!j dm')#!`" q8u.f QW e ?n5 $Rp pH %BP P  ϶^`IC,P9&hp ; rnEkp{ ^3`T^3 5PK0jj?֠E hDKTh pB&hdbdkPp ݕ4`up g PuPUnPPP5nf/r/ 0.Hf p(/H00Ͱ00qW1`q's1r = P J=ϰ50AsAMz >m@6lT zi5 * S"4@u` FC-;) ;rA[!0 lbs~$I8R@ Q@ws { d!dD W"8e>BED?Tq28 G`g$0 b ]X,cf%'` Y b J|bބ4?D&@/ip !? bhpC B1k')EM\p 0^* KY_q@b?pUtPeE 2lU *4r U@t  @U!;PV@ Оl [76'E!BѳnP|Ȁ3p" @=,I u@t=ҁK uP5J%gl1)r ^,` t Yh@a $u \Mqgr$ DLj1T=" 8`(pD;)KF!"!7G` Da X+8ä}(tP([ڨH @,pO0Ub0h`mS#@]9jhf$z( }",B&DKb d8 &&8pP m]p0s#)++,pbP<,ip\ D-Rer< pOi jOO Pk,HPQ򍑠ـȊseoGhRS1 qSܨ#S01q `2 P+a1'B' jT]6Wp HӤ˻N&Вb"a ]i P'0A )'r- E;EPJ+ mx n΋#_mY\9à d / +37<1Fdd(Z!!u?e` b;xY2K3>WA}]E @ p0Єplhq xX|r{>s>l1^S5Ccr[_=6'@ °3 5`p ,PsCos& >/F!` p"a~du$ 尋9m@8dC#@)d !c$`">l  EQgL2@]P ] n[ [ @ - [| pC0^Νpp p\1 yS)QԹpp)_J c*#GB\p*IО{ ܁˟ 9ax&UNj8 OeDVnfpPr|o`/>`go02/0ŒH# ܇ 6 1!*ؗ!Ch̎/O< 3 GO6fTEAQ0(E*A}]TiyU"״ʚy, 5}:oY>I+|dYcilE`nJ`րGRc}R҅:ŗy|@_D(dZgz{B ۀ$?  ҋr桯5Di~.q6W(d2觟M$M8Kp9|ap1P#.Kk) EVp`Fm>e1fU5l`fl=H;ՠcKw M6CX, !Bg?p'19f 7`S IXBX.ceIGKG9h9 g.B5H:ШX*@2AqŚMM%2 "*@N[lF#Ԅ\".z`h@^ĀZrVb%XL1{)c>DE]vIcf|PQP3P^?Ԟ%')h2bn"!#WC $ %R:?7G"ӛ!RAtKϥzhihz dE 4S-/EXXZZ)ッ*Y.EaZ0F6m E"&V Ɓl H 9o(3`7@ D: B+jb"< g#BTF6AtPhr(*9-LRp*ل,P>Bf@ H=39.aZ. ( A*N7^-x a:f`GC2Б]`A݇kGd~+QB|Q!N`,4m\a,@r#\N,|ԇ``"q FH%C%l1 %Op A Y$  (1:°A\apTJŜUS'7p+ȪV 1TIv:ч,pС 0bH8!r1ȵb, p-T . pG : p x\8Ŗ3:@+ ">>Nc(U@h8pKx %pK|{pD`a P@ T?VA Pb2HB:Z0 UЃk~(C1ڷn P@춋xElco ([72 ,dO42}tv (@AJ]Bu(0!\]3d dhGht583.@R 륨 (@ pL(KЁ b *[,j|(b @C K*)Q4c k@F@(B3 6&Xbl9%,! Q_j"chpP9QNiXmPAΠ&p#FʳZ(c` Wh@wCD3ES :>P Ag#tDC"@ƃ-zƉSa;0i>8Cy IrE !@!P,dA;di9e?]ȑ5* K엖X,1qOs㎋BUA|zgxZjPɴa?CR B= }` 5Q/ 8N+,M`@Cr tkӘ-@@b n`tjyPI, 4Sȼ 1QSPA 'ki`gUZ8(1Xe^'+pxafWfqg X`q RKX?@ \bG!f ?l/C;D[pkAmg8nqS.5 AG\E. Zҙ@@3^p|#Ev۠hl = 3'3Fd0^G a8q5h p3X ў>, 3ɂ6W8"`hŸH#2X) ʲ_a, ꠲! t`!*nqȡH ҕp!2x3ho8`Ȋ($o >دI@D.zHz]]`Br4".8h:14_gcp.y>xF;>. cH#/Ʌ~%I:a`30.:3(€M*3 ,؄b  ( o0Cے5zd^Ko6Rjd3x,xm?6+i~XK7؎:qFbrT"Y؄708kCa4! I~K ]Q VӘ(8}X1 (ŰYm rւ܄[&`5w  xR@%mXDHS9Ap. 8v[Hw`rc0~T>30B*ڋJzЪ xXh€GP/D#Z5 :`[ȁ!SKWPh0(6q uhdH>xʌ=ٚT -b=ه}0-5Z!>M3.#>[ۮ>y.4!\PSDP,IQ8L%TLS ۞K d_2@o hӤ0 %qDӉ~P: ,"\ 8k89"#" }02#kPM( |!M vb}3n2/ء #:"PX-! (0䏩+VC#ASC4_g`Cr@)="xR&9dRJ.C-҅kk\Ho"oVaPGLArA xQ:'I>xICqKRF6*>=x0*9b5iW85PO_p,sQ:MثZEh13^h! vr2't(n(Zո! Ƞ d8K[x͇Q8-:;`y{ ɁepqSN1A@@r$Thq0 %ّYD{ى Y:*4Y6pF *x_PY/ #:e+S;0a@bs<@j~x HъA--2yӃ9۳3$.L.C̆ց.^a>͉.&̅PH P G2/Y]ai {N̳|H, 09SoİZ?YQы 4Ù\1O|čdxkbd?&sP! 2ٰAp_J2XA }ȕ#hJYpX'hTYE0? ")^4NvMnyp)P#Hz>$@RH4@4ta"A8"b6g- d70Bg0k_dn #nOg&(Ha7{o"Fp뇙0X^DW8h'Š ;1iDG~5ZG0BK8"2#dP `([&*s=*9K +Pwh,$e)`N@C_Dɣ9jS`w@pФ}L>ePi&Y窈ϱ..\Չ>: HOG*M靔CzdIXrF`2 3%7 I 9۰O)Bs0 >#$  eğMPĠw,-2P\m]!plҠ }G2#l !r % 7QY 픀΁H^ #vS"D46 A:$~t(]\ YP+$"q"BpDHgaT?RbSO4-Qb8%A=>D)Pka#޵KMnj$Y>3f웢fJ$|I޲e]K&% lͲv6("Ѯmp24ܐthPGhdQ% A!UAd yUHe) 0`Q1u7#-:k @--aaI@8C4 Q@x-GB0aQQcIָh5Fh=3/qDlHc 68jcR I08&Wθ Rj770ɗl:078&)xD)Xӧ)8bt Ayk`@ H!yQ!pB/Gԩ./.QG"BH*<:}L*u< u Q'j/ڇp Z'u%d-Qꮵ<1R07r.JXG'DA|b7^\ x1aІ%r"Ap@!lVuEc&?D4C-;l ,UYΩ l3gEe I;08^-"M}Yc^V5z08,(,^/0}B8k-c7$1;s tNLRΦ"XAK:ޒ0]wQ+O# TTPP1@DQ9ĐCEsa O3C)(s9b1fAB>2:e_9K`;Fd 3 qtCi"H#á n$9oP9X;/ 1Pb0)h@P萻4J?`|c `< t004wt@o P$% fHB EX*Pm``2=j*Zx4H[G8#ٰ,iBRQٮV<:MZh#E M it↗}Dɐ0#0hd= $* NR7oP2N0SUXS3H61,_ ϨU d`}xF"汫dRuh<:3E6Ϩ( c ˙Yp7r#I&Y-#'Z,|ãU-4JEż5x@0%P/̃C3HW.&,ar]C>w}lK؀4P  Qibb6pP18 d[Ӣ P W&p#H\/=O>ғV8Ѷq@hT AZ !: H!-Ho#F*3*?KN !ֵ(PR +8Bup&6!6B/9$[Բ؝G db(00N]@m臥|B|ag?,~a Dh f2]O P?7MocƊ 8UK!&*bhs8 a ]7x)d$biTr m8 Qȡ푀{00 p ']7>] lbC#,UjP ӞŦ"-/Z#ﺃ#\|R KWYjeDg*Md7a{xBEG 4\QH #A|є@PBPg!S 5iMZx nŬ|QB0 dwHD!0DsTE/,gdr>ZU>xox78%: ܜǦ1Z83±z a"bumxL=**PCCj/fXb*Зd憁`jj1ǿFA$0 :1HSYUt*[6]5D* l+%EΑ&^(Jc5ʤ'AǴEǨ!8T^Hpsk#Ž[|RqT3w8NtuXqIOw@X@Ybsp zG~UyX@*:q*] (@SO} c@R§!MdьF4 ,xHY 4 ̠Fq q4Sx(SI NDAz1P-y7ܖÄ$ B L <@QB l>̉77l >xRH,R%]%%H#}Yҍ\͕ 'ɋU(]TiL:M[ݐ ,!A wO  L"ZK4y.Tpm|6uAm%SC4 A[ 32@ۨl ́1X8SqxP\X<L{< 7dp3J.BzA=ò@0BB? c7 \<%p%tM-"@.< $Mń@-`Q1S$2tB~TVaHT%EPMH2`G7gp@?gIÐIRZB>@TY!$H5HH XbUH ] Xa5ݫX%,ZV&Ȥ7|' ~ybáT0>M*Ab( x :;7X3)˶#bfʚJH0(atRJ[M*1YI@|VA\LH?dV%n"̃ÜpH;hʰ@?ԤHUA>$"D%YlErtɴf$CI~I+ I|R֌ J|%>,Ğ_R@vXIHSACAT vBAJC B d8tI)5t[U+I,l.Jv xȕh_ʼnM6X-\ <0O lJTRtXB3()8)-P-@=Ձ{U\L X">C40C 5&L--YsTy%CMcP\ Q%@}G^dO$Æ!aapX OcjjC$Gn!>W/|iu y;B:]Ŷl?Au4ʮS|< vj7:IySFS0b|j Y%~@UJAV29'@-)!nJ7ȩ2 ã vA~V<& ЍI\B%l)$!)m]_qəxҐ!Օ#uHk9$%6DMC <,U IȄuXPWqAB 3P)(]@yWApvA!hf_|٣H<|8r *tp@ UP- JDZ( b(aZeڌI8&4hM aXÔD+/J @dX˜\5<҂m\l87Q8B쓬$.0Hn F=B, 2lj+z*$\ Cy=1EB9ē/)u'LzʶZ~BPs3@T@:r GP9@% ysփ1+M "+P+PNŒJ @=P@ ű`@W@8` 8VCYpc:UqF }g*XM?Kld_?YÖ-}Zr_ q 3Rлi2|ڵ.Y7>ZUkWt5kٲz3o!! I)So$fFW0 Á5Cxq/Veƌ*^X y"J*30xO0hZSʩ5޼a9֠)*4@T UQr |ew|053$ԡ@g&`5Ym[ {mm0 `/#@DkHB )c*>M4 ` ?n`XDؤEb0Gk o  B6b6  H*(X֨Zf@yyF_dR9]桥h)gqFRMy`Ay$ LLgޜ^zF78Ә,17NH8>RyNS>!21gW1!>hyo>7$oZ1[OxS]{#SͬNBO3< `CL-a~(jp@}[a J`e|(qq}4٣aaq 4 Ia_dec6.iROd J`y)8V  AX|V\D$`X YBVY6i  XJɰ`'cz 839lg36a[,` BH"(h ,"s !"BnS#Qc2Hv+՚+520xY̘}ǯp*5b5IA,0C@1WLrf87 J4 @h t) d)^An db LPiH@4`QqTr#oH;gHΠ~In(pc&r}!eFW&T#0Bx#[X()r41}>"2c D*jި'GIX2mQ|,p@ A4Ta3kzr0(ǟЇ:nf 4K9p%5V^T oJD"4T$"-RT0DToIaazF`RJŤ 9S/|Պ7lAU%iTQ},R'Ü8)K@(+ ԁ(΀H{/   aeI5:,?bx `X"c';%Jv*fhblŌ4>xvxmg<[`3XHMF@UF-5nSPmP`E : k>s[A7-` @4a\ܵ@V قP(>@a0g4 >@WXEA @V E8@-)JZۯ% ɳG?a-x-Jpy;f s.) Ȇ!m7˜/pX,Z P;7ĂUx^SbpydP'[CA<X"%H@-8 0@,IҢ -*(!V7uƺY``܃h*!ڀhca"r(Ԍ;)7!TemQ|ZluEpER\A l#.7<, fM)Ͻ8ԛS)MtT'+N(*LuxTCMh>#Sfz z9TV}(S0aδ/-0R(Nu5yORuGNUAU08D[@嘂(arcQ8IIғ(?){#Mlxt 6`'WJSzu`ܐTF G}R[ujS[f H5+` @ T ҪP4Xm8@, W .G "?RRP6W\m>6YH3@8,ȢhHR @xlBdG"!v`m;5wml;%0Cr[3#B$|1o/(o}ϝu<)]r1 P@pLe6:܌E0 #7G$e2=: n0*}9 `_i(И?DF(~v@7QB)Qd4 dAIR?R~>oGx?HR`EdI|u!a &z2N>CF;fЙ*% ʄT|i6|Ph4QtA3RCRTTML VNW8 `RD $ nlEAdc8&`FJ &aVxACvv@FGjf\g2v`ʭf؊ơ㊠avF:R`@ 0 Xjjn d h! b(AI@r%( dA.a&  \r~H@~!L֡`#M@ww .kKwG|%@w ^@ozෂkk a(úK~`P0VĒX4 £J.<Òlm &! elk@h. %\Nha> #i *~#ghDƊ`CC@FjDJ37A>LaoˌdHҏ>3Fe4lC4_3[dpu@kV`44d' |L%D *ٸ,Ґ(@4,% ZP䲒! 8@ϐVᗒ,M,mʡP&c$?R|QL% ?  L>ҼZADAalj_dq?` JI*6$cHA%A5Z^lF@6` b&h`hqfsgntxFh u\`@bi f~Q V@"BV@(lFuo@3q0t,<@j&L b b+zyvaj ynv+ g,^o,d'0P(lr~C!2`Hk24n Anp<(Nl r8|Nme3#FFJ$b`FkTD6,qHN3r4$CËTsHޣd5a6bN4Ք(e8i7>f P`N ?K4ONGDO P̃K\i3S.7#0 3eTF-tQ?s2cC EZ,O>uX> &TvB8`TeRP%MaƉզe MخiA9&!Q0AXrkA3 d@$(TJ+qJA$ș6!Fj6lع6틂>|0OD.`ϛIǠ9BzD>Z yndf3*X 55@4?PĞ`8ϴ9RNH5Z>2ՄQsi!7FQTPcNN%`VczR>P= R@7bcN8%>٘ܫ[9)f0&V%& ! ՗}/?rH d,@{DlG$HCBjry1ejfqnMO*f3~kf7J9~ h~ G#6a jja7mXñS 1`t66a*(XV Pֆ̪ۻ&B˸pv.#kYྙ'gy-Z2"^Kw/" .BP }u}c}:y1"@\3Lha> b@nc@A!0 7f*㠾+ȳ.#HY5(N!. 92gFƪ%fe>@$I3mFF(QDTClA/c&D5/RY5k 4mҧɁMƌᶭaBnqӗk/ZEi0@59°00ТKWO' jƼ5ϼ9ʌ^HpDk0p7D7o=;itV7'h!歏,oNPPNYBJs cߴNz[ }~FX/oZ= ,:c9dIgZqHE,D Cob> #Z$uaZƆ#! (m顦쩘zk #0[M8%%8΃ 2τa pT !>8y1>"*4c0x"Fm&@, bA,AN: Pn"mrXb,lGl2-L䀈9xQTHpQD`u\A[\=tbi'd.Gjdj7ݘ.݄#tÇ2 j0OEPg#|8r&T>)p0() ф hHЁ!%a(B+B"# 0FqM-Qч5,AmBg@"`A9"RPRѤ'Ep<4h%,q ppVP6XGЇ,`i"IPIi 6lP0` pdp'!)У *CQv|P@zu tC Df7XU L!>A$T >}AXL' 3dÝ|;!Oi![ֶ~+rZx# sLz@1YhExAU@$ IdrbP~N3%(0qx-,a,H ;%.9T 8B⑈R 6nQpS,7fid&R3 =5 &P:q;-ֶgg[[F6ɍp)&*h6E$ MjhfZC+@Τx^tAɵ ^@9sKw$`9 2ʁ=-E21)iX]XgE{kqQTob|bꔜdiB7,XbOX}HDyhy!@QD HdQ` sHvÆZ+Oƣj>K c u>ja@p!01E eQARk UhJ҄V4d)d=fO 1he\O!7[atGXQIsdH*Q Bp -0 ,`A:@6( ! 9@h,7i&KT!5tpB1udb U|gv &M5U|xխ^!D8ezךi-~:ZekU (pmYG A&H/oLB+2W Ђ0~R)61)[7n>@ @@Cp#g("򃒗p|V Rr)FgFl ֘Y泵zMkyO&\?: S3WCX8 tK ]w!Ce2/oUxyE-PrR@E. P1 `x ́^t.kMGo( Lo)37cs\"۩01аrxohN`h1lyѝzxoP_!|b oF $(pja\lPH`<6+R?=Q8=VmCwqP | >DHdr 2!]"j!/2"J#.b" 'd tp7'`fs ,GQ"HS$W b W8ph0D"XA((gbA g@N AB@ ^@ip i„L| *jj*rN |PM0j F,$llRml-OTlp@ -fhh׶@a8E@ސJUm@ Ȑ|/u uB >r FPRR1RPghP QR#, /JW)(J:#b1$t(FbDoc\Ctk3X Bt?C76UP4TvbҰl@uR31aH1JQ=^n 3 m[\@ް{p3Q'CvU>u@ 2>@ny|5>[` % %@a9@;=i` }PH &BY}W!$ p& +'p77LCaC)b9kWA6 Pq""Qtҍ0"2!0 Fx"=35rsq3tI)` gHG$JRGs"H҂O%J PWp1n`'`?` @@8@tdd V?A1w `$0 @` e j f( "+vN0+SSkTMSpk*Dkw M>NND BJ bf -/ OҤP*.X-R.un.;5Of^pGbz"'P ,J 0% sApg :{@{`SR1 44P [D / mIF/7FƹN&Q4@tCǚQb4_#vEsS6bC#:bX6UJ#6i a42t5SbJk8$ y@@}x003`ޠ oco 0F.9^zyK/^' `tCG#9'9qS'0 ZP@\=ASs\p`e <}? fz p}ᘖAq0~1F55\bs9CtspELDdJE !E&,DP4Hu" 1+Uev I +pfcffNr~9G\hR7gp#?a3gCD' `Dnm@2]@ `  0 S`j+ Ң-*{&P,4lOz-8PBOVdO2 1Z-m@'0ThpKmP, Chp2{!U[0SnQ pPmЄUdpdm07{7N!|W6~c[uP#4x53ACA^#C)0X5jC ?s7UXCc Wu(7) {0.108/S s`t CazŜ 4994<T Z f} ;` 뗐f6XHgCt Qb>d[sG =8E mc H!":EfrOKlF=7;kpHErr㰸/}f0G+ mps& rW@P@ ԞgHpJP{ԑh^p=(.ue,:@P)қf#0X*)MLh8 b+2`f,b ٢8(ـ,?j h--Fy+ PE:Up |T B`zfk w ^ m}pQp ^`]U\*I +t.Lwԉ7 @5N|Je5=ttfԜZ,V6#}sҠu>AJh%eut3sCW'W4A'upb%F\bI# ?JtF< 0_0;q\W XS> Gr,'/4Zcyf g z9 tх]]"No/ \苒M:j:军mfT`1bOVa J lcUrM^ #[:#J+[HAZy("JV2ն(}W:LSM6IWݣVǤ`XA6q 셖T(裗r)s6]uEHo  ]dԛ^%7a>j=O#,E,, ZI>(PzOx>,8x& Z72@%#6 o\ #\dx(h9 b9N蓫!2I98 $@0-}fሖ^)8,@|ڢdr{ ^zkъ)ӵz,[51 )ҵM^􁡬:,z]|+'R}{~ N;GVP)dfFC>@4XVXSd5 `a: -rlҠ@P" :(;GZHj )D AI<_Cj W`X؅&nt#jXP! * BÂ^!F@hh UDE0t#4fCG Q^bIkPZT X/˜Ő8 #mZ7z!'X(*PrP7Q 4T#y>OXbƘ@q*Y6:Xh[a䙹2r@%?яm&-kp%]A!ߜwq#Z;, ozEwBp+^K(іRqweX'<-oI8Zňw5 ^K{NjSy&Od^B] &}5q,* 5A N QG, ?)4UhCG8FWAPhC><SH!+pQPQQH‚)P Y!A(3h3")"$S"x(Z<1гD@@sTX93Ʌrp/Fr $ rxQ]Y>/ B5:x>g$]H5[B<~4H"\U h >.czytE5ZI[؄y&xmA`giөnPdpBU̶ʰ` "q%|ҊgIٕM(w 44x(_y=aBړ2*=yJj셆ilT>EƠTh+*c92;x2>>(+rWLr9Vhxo6V#:x~6V* hMDz3wk(h p[Ys ɓ k'6HnxQ-h- ֢ ҝ0Q zňWZ8[ {>׀ ٠>>Hx|AV`p.hxp`|h4 XPY +x.pf E(8 [0!z@h 2 ̏]T1 n)Y49&2(ÐxD'D!t0B% D daYB_P%*Z!Y(d ZIKy:g4_3o[hHx08"07`色`XY5\-X!aҔ`ʔ\z70 X &Dd `d&RRjnR҇'u*kϋq07٪]%(h27iÎ!1^RƔdPg(*Ek)7 *۩6dIh Q !7 8Ik\j1ȮAN >ШU9bp=q"#(O釴dEVX[|[SxKM868B*YM~8 (GX68W NSu8d 8"@ , N} @}"` ِf )5ŵ'QXI4dy?ɓ^ArCBGFrȅ5F6) 0TpvLRF]`TiCB@ؖT3 a9]khPQ&\^r I,D)}*'QK+6hc|[m-, u aڃ«<.ɮYʮ_h"ڽCUJ `G*Zxd3qlq_X#9{,oa r*kl>h$aũ @IǧՁ OH֛9g0Ci*P/6 XMhBh97hKX!:xBɋ{r4Ї|Ew) (  JM޹!ptDZQ 롗n^]T+S)˺D 8:܁qMIqZwi/ )hY4`>qL 8x<`||8+8pgDD[؁KUqh948h9K:xG,vHd"]бQ zH-ڇ))! C ii yܔN!#(\,QF=7z87B&gPPF62i.U6/8r\$<.Bh>+HF?_To+ Є.|c [!_Y1kY lw+mSgy7&xRlX'2cɧ(q^[ If`q-}8H3)'<$ESa(x8@-gZv6%( G#8&ę :e=("0SA4=e]=3.)tx! k0+ ,5xX Z@[:d=cp~8ҒN00dȏ YX?! z@]h)آaH, 5R\t Yi 2u|"aFx#=8y*]Т^Xk$!u\< 688TX6/`o6q5MTz (vzr[^ UD뒌u1/`Z,6 fNĦRhn*Edcmax뙧qڀmCqEYӉu pB/DrH$~ G>9:Ѕ$d_},V1z8bvq$5S9a?jcm4+Bԣ"Mm100h9cҤ>H*L7$+IWhd9:W#@xVny6q6Șdkp!&WT5M? s"hrt5`6lwM)Xhʬe6Q5X)< ]QA =0x kE +P  CјӠÌfֈ|X!3֦qpp' 1!>(Z~dc4@Pp )2Ly/ֽ2:LL]vRcT͔nIJP&G-Dj-yPA+Hf,Yg6Cɓfr}jƭ۹Omٯ6brVJ\nތ^tҕ SWNFK5h(W/dF Z|[3>G&:|那B@j9fF pE0(Nq8~lCߞրچ{Ϗ&M0RgF`| | 45)sfjR!1} &&h&+ ?F@An}q36O9UDG'֋i ެ '؞*1]-R$)IϠ- Z<'ЅahӋ89iPA4OPC U,|)MP*]xÐNn( " z(9(!Y5#r$N'!B zaV/:XpTZK#C[<& oh9uK|Y '\)raS"gܸ%V B%~G{v6G

V楸! x5nO9BJHFrhOAF!uyUV`Hr\1Zoo$2+Vc*Z袊D$?.{`рSIU%ӂ?J[Iaɐ>71U/4ˈU/\K2!V~fztb ;cjHP$9Yl!ZzL P#%HUo rx$;⻂D dH.=j1^w;\,ҒUǙ,Bvss<:H3$ <毤$YXIBF6>MC#4j#VNFgK&%p=WC㓊-,8rr >ׇv6^)n~CMhiqIUF{` S-7<).LuXWtYM#0U.sH Lc/a\y=+gyT{KH_1ӊ#7bzT~Ks (/()7u (ZRUzzpc!m@^pb.XT.$;鞕Jy0r=+CNmϹ+J_G+BC8KpF{RJ~~ؤhm O"j @jP9 DK'(ME 5~[,tݚ0r5k<@UF$&c O"˜$ڮh۫׆U.A+gkd؃Qj7G0.R@Χ=.ټƖBFi!?*ρ| <~U%R Lm9l*B+=jlx'zzfKhQU{R>:wg֥@Qt Up/vRWM3~QE]vYgs[۞{ h gڴOa֘i Zn9"sMث3G^ASdx2? l bTHOjrw0%ԥ]ݜv_JzXC(bXҲn@`=qK KuV8Vc-#*t}!㞢Ler8cC1MF$qQܰ& OOjYȊ&Q?ʖf rEsAk,Ak,A5жZn -6 Z` ;ZԮ7 =*VpmvZh* xU9j,T)xJr]9dk"ԄsmF8 E GbjqYWv;Sem7)'%]̀Jk fX*B6w(ԫ Ǹ5W]?2݈%uY,Â3N݆܎C(޳n#j0D < 5AGjI6F24;J;CBIbC=9 U`>LkLZvXN56Cީ ~v;A9KyM 5˘3ޜGHqR-b݂}jZմ&?sb.-gG(1*5³`)]5ҫ#Kl!Jm/ExXag +uVR3yxLzTREQE.OMý5}iZlv9yeI)QXy7b/R1yS&% b-H$9)UY%2Dg?2wCQ#W'/͸uyifyvnr|\ p"R VŴO \1STQE-RipQ!}~RzPpjX~xpvQ&Ȫv ;N2sVD<@F+JΒFRWw͓ޘZ@Xl#2 QIBQK)1Tc?#.m4RB~d2O*XDn?ZFd 9 $mŶ۴kf4*}Hi\ SޝDf^ y9jtAI{ J%ABN EZwڼ?@Γ!|1dQ>9C0^e mV RKo@cawrd+y%jaSjчUM[!&ĊQ{$dA~F>bEIlka)a&[D HjRdH) F1QL05ʰ4r )P=+:H$\1BEeMo(<NwfG+Wó I7W|W{9Tkk"ɝLdT#өi V.=+Dm2l } gjg,Xb8PYM{9jƼ;$f+2eda[,r9i1sL()r9PeUhʑժF;@\v8CZ0$֮JKHij}ksH`U9cZt~U)wc֭ڳEQEQQME0FwFS~C hB8=YCvQ׊o2:T2ds1K2ySީͽr˜5$]E,~Rp*88RO"HUF\`HQa|2mjBVd+ 7*HyV2o94yp%yuO=(ݓ[Nc/ [1(s]ġcl96bZi 08Id٥|8VOThӃdjR9@y$ V}gdr lu54 h:*ʓ2֢r̄Il,G|UW\d%N PsަqW9=kWqqUu$#m;Q]dR6>^zu#8"lFsPc^s*cRXU+q lsUD%*22W`OZ,B ,Ri.ZmcoUlN7VBv5i?;u4b1'8{R"#qurIk.nݼu=,2I'O4ԙɗ;4t@$J]I<j# <id1PG< y^`#T VE9ZȻP(9tWEAu-QE-QEQP]l6e nJ TXHYhѻ37@x11,x5,fQsNx2*K&`Bc`@ <}:RH]FڢyUsǐ/cݩܑ@y^j 6@^j />Fy%sJXB>*GڡI%P xSbǽ_"B9;C֬Cwv#ҟl=Ό:*)r=E] V2*dp+FC\`zU^4l)5a˅8IN] JŹWԞ+>k%%cCTݏ%H^1y#G!Sƨ-^"vzt/c]؞u!'Ր"#RRpZr]21Arq/2>w4۴ŏy,z.j r <-ni]]cߢʒ"d33ްVe͟k*#F+IzgEh**Ux늬GPXSFؖ8`QZ.xL%##jK 1z̶֜ڴQg؞uǩFvZ~ձi(((lH 䊐7ppj=>yҳ&sM `GS* 8T8a9W=M8-'#=iJ)< :ԬI#H Ƅ/5F(%w~^j+-]$il&$$ E{Uwl/*ʬY)y6'*qlfN#ԗE$cmn Q kmn Z̽qdVFwҬd';K IerƪەrZZ )]^kVIf򦙕0?:Ҵ$򤐇뷵hb+Dۆ]iDBӷVtS^[i!;lezSbz*ޝ|4DaX!ȍ\c#uV(ݷPEdE@772k\j0(یnwq12*̲T`(5N"C6'֠ڠnbKC$d~D=7sE{fz1G_zci0cːBYY[sFVyc^7j.obdqڴgcR,^`IojWվyw4>J1\+5ˡ3V5Y0 L'H֢ wm3LW8Ȉ,a/)1(l 8 yn; 1R{N6g \(9-+Op3RERE!Hփq֡p(PeH츪@3#1Qg\9Z*v S=S,mӜՇ #]ho֥u ^B1N'aj ؄c9W#7Vdr߅feϠB4Hێj@XULzUYgArF*viUwY J$W$mpj aw@KTEoSLX2c|?=ǚRBΌ>9tclcp޵lBD pY kzNY>Yx*+WA-mu?+{bR^E/e$rSlG~Y8<3nfb -NpVw)gcHLnA;ϥ-4*ޝc:\+J͵>`}sڬhzuۣ@KXMߜT~uzr[llUF3Z 9Z }lՠ2ck $DN9*O*D%?ZwUy#[K HǦj%$c U?:fc*;V6-$5f_)[r&\r999?LRi_BpA}. qWtYJ(( LTߥ1XVwy>NT. =S}zsҪr1Ƭ>^4}R5^-ܝ+:\[@P@aS2]Y6Gk9g9`,OZ"qUdSֳNϨ5Xlb;ts?N*:|ťUYbe@R&?fo{&T$?͏NjQ.%ڳn-l#T4<9›A¦fqҥ>dr}*XI!#&dQ0!]WgA?lTKU9m wU kJ1Msީ\]A08$lk@d81Zl;Fv br0k!턐lVY>ns~+mn54%la4*2JX/]KfV.'p),98HR[y LUʡ9nn0pzt2OWS#+=]ӭA,?Z~)h)U5)c5P)? 8Q\[=+=9ڟzsMrcCrsc8eFt895 Y3Xf[8e#R>A#N *PpNؒtw0qײ)Ri3;֭v+lv_"~Hg5*gfIwcOYl=M88EZu)?t9*Xdwߔ+1>a;N1P7vmfN1PR7!zmTd|Ȥ[5YV]Ѿ}z|X\ZR2 sO9܌/>>ǹeeq֠v (e8aOH<)!9WVgRMfrde,߅Msm |d'Fxb2{Sb *@ᄋq֡5WIϽH++:>F VF`qUx؄b O5]' H5_KsR$3eBG+Vh%S9Z{˻@Lr>H F1RW[˷mpQ:c&}꤮㎵ϼ.W֢EW3덣խ3k݆'㊍d IVNV?sUTdK& 1\|Z0 8jiZyB.?ҤqIˆSث1 3֒V5.!2ǖO5] 1fd"ت[r=*H^{o*27LtGw;yxKw5|HժBIhfa8Q\8ȞEeh6 ddJðn[jIQ>$V<ӌ 0x&n~ xf\rJ$0^p*#Uy \ځ=}sJ7zzFW(YL.V u(pݍ5rui Ut >9TRzTp4sMEssnǹw%%%9棒qMt@zI.r1mZ AIn6 ĎPffL;#2sǵfnV awpPY%gG-Yj)pISW}rGQ*$- Ò;{T1EeV6dz7#TVp}7#g+VP)OF9!NJBBj9=1*)~ &wcg$Zp'ֺU "=3]3U$&dS*\A2*zj a~\CU˘縛 sO%Dvf(;La:1=F-m7 ֳY95Ey {FXA\4ShivnU *b,U{UIX<=* #cW^{pDZθr-iW~^}@iAz⬀q'=j669^Gj݌ڣ*cV!A)WIӮO 9u-{` N WĜT7'mF~aϵFaWlC{[oE1C)SjN=A>nSFÌt3e$xm6ɑH6YvᏡ4Du~bjS "cGސ?ZIYn#t⯄m\˚BIsjr7/Zؔ L`0Г1T>BFeoF9f&bvLU+"͔lrO9""`U =M>$]Izv"0^N>2l@c nS&1ĤpXjǐ03׽j pjT=cD Rjx-!Tx8#73 ޙy(L|[ T'uu+OX7$('Ҳgun.j DR3@;EA2DLmJX,wLnK_JkP)FM\047A5--*=&;yoJdxK7zǙe-!= PyrX>b=byRnQN2G6ξXýZuhWp|RpH8'"&X ׊$c}TfYUcX!|W!|XO+f%}{ҧۉzvىzAQ:SJ+c&?ZF-`PRڝ9tsljaا0OTg {O+iqpi|)anJV9$G~4zP P-dZ#cbK~j]zc`VQaQmiRPriKʨUqv&a.R~񪭄8 /̸u8ڮvGUeLRӖ qִcè= K[a.[ szӭg1J*;r;Ol[hσsZ$WBQ#)8BXRl ~uSk6[vP.HmxӬb{7aG5PaT=+"Q>Z)k5ĞT{'2G>VPa:ļ (` +79rU* yeԢ818Yȃg=Egc O=>r5Fb'9K)P%y%LB5fڧ ŶuqD@v檤hXjs_eFb F֥H[ yXqOn <+"[ZEǿf(#?]m?]"l3mmjKR-3ҫn[9=QPEnsMN8Ȧ!FeM2YLn4 ޖNxS\J-Hl\I$%7K 3.ʟ~p J1:2H(e\d)ukWҥgXʏJ͚K)o/o5NYD WҩK8BH)}})zoVbRW=1RFgfua*XTіۼ@Y:Y Ȍskj CF<9;D>Ջ8B6nȬG(Pwzω#vb` }j;{H0TrAlx'cʚGAo}&|QCwX∲㊿k"EhDy_&BNsUa+W= Rjd"9 pvr>޵=gM6'kKF؍pG/j[UESeZ<Q͂'~R1ڛ8#?.:d m9Yz ͦ5{[cHNҹLMY#\TrO|.'gen49сmd#Ys[ߛ&{T}``ZԒ{k98W%X6zS҄?(=[ Ag#[x+$>O$RG9W&eu}*Ť,U&CI~$nAUsQ-`zIhmMN@y!I zc9#UOI Rr} ŵ6"y{{kN{QOZa׬g& r5.W|qکlv!$ p0A78fEZA8l d RpP~H\FߒIŬj9+ڭZFE\$;cTgMrs¶Ay ki$QIQ9m^.bGIpcX6fJ40CMn7Eӹ~Pz!OZ(rdlHYCǿNY ӓ݉4cT |ҜV L{x؂5-I⟆l"cw.!unVXٰpcT!5Z0F*)7?ҫ]F!P֤h#c@u0ƱCiF=oڪ08O* nejjqTo+&جǺGPZ#\eYK/9Fzud(Nvlw:BX |sc\DF6m1YN [<#ၡrT̡̡2ϵE4q)0Xr:$pu ?諢(((Z(Z(Z()((()h((J()h()(*8 ƩU 5{~ܝ̸UkĆ'$_j˺HcrIxoWK[QE-RQE-QEQEQEQEQEREQERQE-QEQEQERQEQKEQEQIELҠG_e]V!}+p|f\Mecwrp{d3]uw(()h((J()h)h(((()h(())(" Dx$X.ޕ:S>P:W}x3x_=(b۬$0,ám"I 6$X+ֺz(()h(Z()((J((((((()(J(+3S/2xRC4ҊqᏥ >=@" b(()h(Z()(((((J((((((()(J(()h(((()h()()((J(()h)h() RQIEQIEQEQKEQE%QEQEQEREQERQE-RQE-RQE-QEQERE%RE%QIE (()h(((J(J(J(J((Z((()h)h(Z(QE%QEQE-RQEQEQEQEQEREQIEQEQE-RRQE-]y, !bwff[ rC+/TYm"rҲog#%@b^YͿ yg36SQzsk٘ڻ뵢((ۼ!E9 =* ȥ@\sP#1>{Kdx $5HY'?|W;-֝bW,7g֘ 9 tk|ICW@.J2(UcJ@#2*st=QEQEQEQEQEQEREQIEQIEQERQEQ\橭O*r9?Jmzt!x-ްu=jX1B6>s֥`k7v{ö-U9n®`eS?,M[?*KtN]Y4J\>Ww=ikƊ(((8ᦐ$tnͥvn&VM: z KaRjl ߗҖ6PJT]Omc#*hPG9T((J(((()h((QEQIEQT.tK4PGR[rN&u;*T*0^P0\Ӱ,+ک8SwW`?5"?/Q,O[5VQڊ($i늋1̎5#-#t55R]c߭`jZ3\DY2\&D+SkGsY0kq-j*$b'R&mc=Ᶎ_4R;`@؆=9z((((((((J((((PKt&cFv8U'ڑ"nd+u ]~}6TXÀqRWO>[ܜDo㚷 SsiDž*g;8k*7 éf+ YwW`Q\MPRد=kx\Dfufh(ߌA&CRuWKD˞Ojy{d˞P\囟JǞi!%p9b6tzVMܲ)%=*lHb1mV`9Iy|v`S/tGa0N!A+ 723Nb>_uDDF00tj] "ơT` }--QKEQEQIEQEQEQEQEQEQEQEQQ'81PDfX1Q 8 `&w)V4zDgjJ;ԗ.a7sRy|IHCM!Ͻd6q)*9YFiYoKHhIXg")'&3$`(ڶ |I-鎵ƟI}*Z}QEQEQEQKEQE%QE3}e@z㡬=H\G;yTRyJ˼VCU'Tne՞-n R"$ gҤ>"(+*m5ʎ5<_ghfcߵ1m1cU~\{n8U ѤYG+[QH @n ҫ;3X1T攻c<{UYF=PrDBaQS"  㱤8Y2|~icbd.ADct2 t w">'*kâbr*IoTК"6Gt3eb*ҶU WHURx&dS6X/|pϲC5(&?:1[\qM7P 7j3Z~82~BZQ/lLvkNyU3sZwr z]@!sQFSP/ZazդB:՘Шv9XKe8f9s[xR3>̶4Y[18+Ȓl(}+cQNJU;sӚt 2Đ.Jjw- %;nVboՉFJ|x5㑂vZ?3d\حM݊2NQ؊7J#ީ3ceąWo9I-#S)+EU.Jj,S>apF?:dUt,NZG4[l"-J!<ʷĿ6.(Jzg-q[5 1Iq[uPYƏ1~Nk TNWΑFSo p7"JA`FsҠFI@)VAMi"n2 ɕr\zЙ3Uu9_LUv7Oc$6Ò- Mi#A lFhV혹 jc5N=jݙORU?>[yEGk{%ɵLX+;bYoic&+`%V'pVj)((((JH⼐cֳ&+c!֩I\US5so%4[c9`$8VԬ28;]*c Q9+xxoI7DWsZV 3"iӕv걫H;@"aY4ɲ>dR~Z0PnI,)rr3?'vX* Y$)=GG2QΧ$ZLTJ~qW(]HE^uw @ zf|1MTmf\t5 %\g {R.J  3W]+*OUW ui" {S`1 JOK(?t늘aa*>epTDJmZx[ۂQ135bo7znF8 jmpZն2+Vfq+it[Y1%G8.n%Gj|ppjqUe]Tn \앭ُ֮> ]t)h(Z((bԌT7RFb5gxc5czdݏf],?$+H&[V']xٴub\zVDRssYl0==*}*Dm6& $mZW9$\;{U-֧i,m> l7($& ]F +F6TR@*0Uj&kqzt;sTO! vp)Dq5HLܭS0sSazX`qU'=jp Zn0mlc @ `֡ ɲ>MF oڝSQMPMhG_!?J0jHdmU. #sUnm 1" J>Y"t:ibu+mjk&熩l<WV$m?0``]*0<`(()h)7FiF%tjGMPN}&1|ҹ;"^3K7}¹tĐ@}JH+Uc 5VyyXV%,BePjRcSʁQNE9zR*Hxj9sVQs\Z۹5Vc5LZȷG#pÃWPҍdu08ݏ\U1Pa  ,mwgKfW*Ǚ3VDuc@O ɨ`wriuC|dWlᗜQ»8eԡèR@pj`py2M0Źa4ZKc,8_5,8SQlcRÁUc_g T1&qWv3ڮ'N=))I"Mxsf@el^Fo?9ƭ瀣X7]t1VqI52B>:pG֤#(()(܌uV {71c88YZFC -XMje)c99`,>[ 4(ҫPӥGg?JI`2$0GV~wV;ڤ$*Cy 7CާBzd:wԒ1U 1˻z}jt 1@Bi ka$s⥊ፃzY1cZ ]\R@T67 *VN7 @w$_=i%-UP\X=꒶vQ_lIj{z攲d7F4ebr0zNb܃upb }@GG2i27A4$013Acӵ8gsFYyଜ`Tiޥ_p) r\TxfZ =jdcTx,x'yҍ8>֑|iVSޚ85Z7UL.$D\ᛧt&<]l 3+pgTc< wREQEQEQES&A4m8 Ԏi4.Ai(&Vlֳ'<;\g<{`b8>槵h;685rlj 3l150>خj0CzjC&t</˃v4؍ąG-3WwZ:L2 nSvkXѮ);V"InF--FU nLBR[,]xq&-&c _J cUa9엌Tpt,el:6Pv OU*@j{\U%pUel%azRBМԑ ɞ,qt A1Nf})ql#n/9lɡҔB7v84{pj1rsU&.vg:+$*YHaR*#*UG4G+H[#drbvFH<j6Ar+zRǵd]H3qP4@Iin"  9!v»;;G<*JZuQERE%RE Ea6֪0ڠ#sTv֛im?^I8!^¤՛nGKn+[MfTGCb1]e!-=v53&'Xgչ|Ȅ Z3HlQ9Kboo hs@RDZt ON> ÞNܐw ҳuKrw+VKrz)䴛rcG3ˑϭkz|wWЉáR jXu(</IsDlQhaTo:ocߌjЛFf#yafc'XAAU\`(R;vHLzHPj)î#5cU8[\ 0;{cg1O)s9c4 d uU3'˒9/U3wLDZދ ˃8b8bKKEQEQEQEQE Ŗ8*9=zԄLH[jTɑǭS˞bλגkdw9Fნ&y9jLdrJ3Iir>gvB֔P.Xs,{9Ҧ9F$ ܎ɻ!})'wAp䏘EI玔\G犲F7Q1R,JsҤ'l$UuGQUyD`Tn?]t >PqU$%0j4OJ]Aĺ)?Jl B4QI@*^4QEQ@ EQEQEQE{QUoL*l9B>aT5&<+P!vkm=k1sl ުg*TNTR)Z`hr6KmpG*1WM( {nR7]bl/ ZT^_AZdzuPtxebMYr0=E9[i=Ѱ |l7i&W TF$)ʎ)#d+cocQG{THp~=d-ejH 9Q9wwWlKP pi iFASI7qVG*귙qYfH8\ikKy[D;H!t JIe1 *ԫs)%kA;SesUB89rMD1R+.q]FE*e+>8Iv+PW(REQE((((HSub>\" Rj@Rj<w2Ǩ\1r QsTXh?*cWTeiǕ`ǹ$mA:Aҡ@#Q0x5.HE&tqɢ5*5hwh4/:}jFVf**_Oz!!4*A4)@(T1#jmăSʚX^03KlR#ei$Vp TV lPt94G9{STrdHQ6 } *˸8摝%b 2BDW`=@,d3UEu9WZ"v tLE8Փ<֢xTNoD˃A@<h=9}i =?HQVn*hϥQERE%QQEQEQEQAUngi>GR6)jϒ\I)wlxJeiK$bH=KLMCүET*nElH88'Ҳk%8=jȧ%XYN%XɈ j<zwҝnqږوKlH;AU>v8pxh6ӼҢ}Sq> lMTL$g5!@00* v!82O"Fz6ϽFܒAL-2H9Ql.%@։rā#+FI׽B9qP8\yg'*ݽɋ'0CtPOyڪ4<>,v#f09.:rSm#|@0^Eu:maG.\f((QEQEQEQE^>8|ayam23Ag[ƁwGoa (f]ơUKH *DeP d p.J6 ?Id=}k J3ߥg31^ eYI=GM>u|9 W0eVQ޴B'Nd,ǩW UZbctUeZ@ `S!ub08`fʬO +n:*pqN`+R0i R u=1F:q޳G&@>uZǝv=k:g*ZE`Wҝ^ř@S94Cqq .ȓn@zNe3:zІpr^ {`o@]0p^T8cH8)h(((Z()(Z)i()())k=Uc8۴+(0<{`WfNUmGjXgniQNjte^rSI 0Pa3E6RوRخۉ<*b U; ƸB']tgNfsNs+1>[[!M?D #>>Vp\֞Ux *ԫ)ݢRS5̾Dm)#j5! *pF:j{VCșgCWsprI]*osWc3SOAXԕ'=*Ҫ[ĩ|ƧUXQUǭ*Ȯ>\J&Rpcڗ ~ojnI8s֊((Z))(J((Z()hZZ)(JcFsQoϭ1F0}h'B[G X{gN\ qI/(£qLSU N#Cӥf^'WzUmS*yYF_Z.Tu隷[ɑ\‹m$cWNv8(9f-'.0ONjH7l fZJ))ȦgZZ(((J)h)h()()(ԴQIF4c<`C H}[hE^`FU rnvU 0':Vv: C~p+wCVß# ÜUWꎥS*Xq՛3*8oGcj٪Z"F6ݚ)O9"qoڵɬ-Fwoq\ߛ4Qęc[ lpx'Y.z{b2[ҥI6/c+[ ) nniַiy-= ^5W(((((J((JJ(u>h5KPyUڠ ͖BV- ՙ4HQbO2SǥFwxQD(xd] 1(֑ϛ eE3GjljUMKkgksR@fqPir )W _dTF͖SEXGcKn}*\QEQIEQIEQERQEQKEQEQIEW B)\ \*fB&-uZI,<eJl y9dXBcN}ic%*0MIqUcYIz>Wf uZ2vv5̻{{e=z w0TKH[4S[HKTzgyv䊫~fId~d`>g&xbVVpĕ HrvV3'j]2 w.Ϙ{ YI£r=*jtN?v Nz <PƹY`9QP@Uj;mmgL&z@{VxLUNXU4[ QZg"&81Uq kLǗ 遊h&?YR43^ }亜,-d9"@M_ƼP; TQDԐÞF3LIi fFUs#(ɩ4@H#8In==iiiih)h(((J((﷾jcp|Dk\m@AR&ۘIazSGf$Q>b[ZvLG,MMwd4i= S5+p5R\^D SĢ?/qH{C~ u,{r8$ST=BI@!!ۂI<ĩu3w ¬ѐ9#N޿'ǵ?zxP]w$JgREQEQEQERRQKEWu*=[wq>p+F4$M(=jTEx*ƠAH.Ѥ#h@LLR-ʗD$|ۻ8U6.Br܌i)*G-I"0m# ZcY>Fڙ. ,VspE)2ǠnS)czT.Ly=ir4X9@ lsRD M R1@KnOޕ7lbљml MN#)rMdLDF Fw71STntq)ZC7w-Ͷf5X q-r+1]ˌr uf+3䲖۸Yen[ynX֩bV(N:i)F=jPG{T *"ҭ[Y CcR@f+S&HY[|cfc+0@nߥN!XM\vmT֬G+۽Y\8$ՎԴQKEQIEQERQE-\$${ 'Qƹy6Tpyq+;im!2q֖%''Q$lRM ;qSO +>SSLCUYfInhq'́Ud6*Z |Ə4٣Mg~B|ρL?6md >,չ&mo/$΁aܱrڢfp=p#ڛ,1sR[\9<sNpxjί#MѾڅ\/p2jIRE%QERb)ih()kω.9$^xyckBdn9 qCʚqw(5zxI2sVl`ܱ8⦴'/ Jm>H`eQQZ&$F#ȗkGқgŎr \U+| Qާ[267֮3ɺ5ơ =µcL,@.EXLEcf HWD0Ym.Fpt LB6 ƃ#vYv*5weh>\:P16Y?qZ@*0ǹ[VfC{֤$d!AY#i*+j7+>6T򒩸@ Oxc.O nj=Jf 3p=+&iXfڲc$ǂğʬ7vcߚڰDfݏF;H ,ǽUE(QV]pcg 8]ebhi4X(jd*\nS J8?2XG 6H%KǥU9gV iiFn!zډȕzq]WgVH8QEQKEQERE%QEQKEq jxpB{W#ǵk€F9㊻ʌW $T&xjX>G8Kźb,FL#Hmǩ˱qLuӏ ޝwe")3(Jm̈$TtK6Ki ;]&ՖV93e .29;7yD} ';1Ҙ 5 5yKU=IEFe *{8k2VNцwүiv*]vr>ۛ}>0 ܑZt&4 0O&ڳKEQEREQEQE-RQE-q~y[}9'Ұ5A95bY1$*{2Kqd$dapgce!WBbRKE8VQh>cSGzlF0o["8D` k?ҧ l$w+& 95YXn$9nD>idND+8@P8 @]`ZJ 1O[ܡIr(YcPvJ/?¡0dqSflbTLXN{qP s&<̠>,#Q#d5U uZuiP ~RDA#qnO"-8頶NznXzTMy F/?FQyD{Ð$Ow(zVc,+"K ץ5hiȦ4L9yw|PxB66*KY$F5[j77P/Mj[Q I[i%F2yWr:gWZY_֢Ey$=jbQڑV2c}Xu_J%NGJȿ+F1ӎd%/` rW ;dPJ3i!a)$VYzkҷIwQ ɗ[=jM1L);yL\ښX)ДbrH})8xv19$d{фbs޲u9a+5UH"rJi#{C1]r FCa]_@)RQEQERE%REQIER lCtO59COz`{#1'9)ŝؑԭ#zV /AZ6썾N1Z12~f|Ҥ#p$ j'1<c#1ѵDG,YcȦa|sښBg,Yj̚xÈ[qȪO ӐWT$TVT9 :R m98 7{jHa_m4*;Af-4;?T늹i_jYۋETJ|5FN9NkHD@Ξa=թ%G=09-@`9v6dI)Kgmԙ)mǒj+F_=o)no Y,ޫD_gY=XWej7 KZɼK;wpf]JSO czx,~RXb|@$V)W}+F&C1 c5~2TUީ\Np>8{UX%Zn-jYk.4RXO\W}1]zNJ((Z()())h`.H*bpW޹8y鄙' 1"HhKcVPWu5~d5 H;9Ds RIOɟȪU[[gFf~5^C-yg5bT#e[xΡ_%j'l42:(WhiƬrSYHH}+FG@x5nQDQ Ğ֫_|Xҙ nG 5!LFw'1PrNzS0X=jfe;йNy*VK2V&sA< sTX489'UiFym-%Ճ)rl%YJV+ެ1Fұjϔ`k$Ц+Bfs`\wՇ#|Ƒs,zVhTfڴB?&N{VkeIMē`"fiX௥e\C| ՗$!$g=f7;sVt@G} Z&Q15N6Ak$`C8$)h(Z(Z(()hOu1t`O,+cI! IsR皱mf:Ԑa^$VmfE{%^߽nJz*GCZҠkPJV@FSY8ěVQ*x+n*tU_?20w<>ʆ"OZ b9ZpY{\*9Wbo͒@TY! U,IHFjr@3x)GEw~o^ΪIެl$Z6zrD\xv ErR6.H(xT7 JN¤PLP/@.. d xާ!c,y\1 \GZG }>ደ%nՑ>ycslV|ۧ|vNՕcfգeꍒ&|lwVIV=kNKcocqw3|*ܷf2 p\I=qUu?LsgT]cI!^zU0ڬA od#ZfLC]U['9oZ'ut-ԴRE%QEQEQEQEQE-pҮrOZȑmF}k޶``! z܅ iĒGB*Ӕ'L2EXR2B&S<> \s?J:40e[Ț$!NC bgeĠrxZH>`|P 85; SM".0{H0ϥA*,m׭2@ШVa+GM2W+xV3^K~/k&ײ6+`oj4'PDS^^$Sc$H70U(L7cTf?-MRt!@ϵUr uI¸9\Q4RIo#{$B΢@2KQ$'5^884jN"EL.WQꓖ%Ɏ@A9إ6A{38)hTS6v݁]8n ʤqֺ/ .YH ]@5-Rr>9D!'i|ESly+JJJ:r)IᎣV)h(Z(Z(Z(+in{nrr}m1-+zd (<)E RAQjqʤj P8ndC֍?s nL' шB5$W;C5$nQ_ҦDYB ";.O$jv|JBǜ$y?1*gROuoicl\k]? sVn.aJ+KA#k&;o0dqk>g$Y#xR †hN?HO5v88eċzbk~.M@"u[XXT=@Z4/Up\6:+`4kv-9vi-^ܱ;xjeYsN()h)h(Z( czv̄b1ˑd IPM0 IQ(T94s1Pƒ{@9#y ^Bi㰤bA!<1I3ڒFgA$}zBqͼZ:]G2sZf϶1x^i5EiHv!:e]c'SҬآP X.' >cz=$ 4č12G4L>frt]YFvXԮoJ1@mVG7~\VYeiW,vg@0Xja$!%ʱ GN浾Ʈ#^0:ַ@z`p*[u1K<83F{ o+Gޒ{5'%MBӈQډUeQj5w5řN;P*STQEQEQEQKERE%QEQX>d7>}A88|˃qS S2uJTJr6U։cmUM|cS/+ >V ;UHTaÚ|7I)Ѷ:jU7>BX=˷5!v' TچF'⦆^K] lTj؞3Q꺅ܻsFqR(ˌI.:L|=O&~/4Jp%V̤ JKegGo.V|猲Hcs<9brI&G,O$甥@,w8;d?xaOHA?\g8Kr~qS̼ҡ_Qs{S6(bsR(?(@|dcZYDAd#Vtǔ36mDoW":^h֧JzE%QIEQEQERE%|wv"Ƴ˅@( jHI 5~Wi0A 'J"@+z3sڭFx QIy1U繬%=^˗8)`njf27>j͸³ScR6$MGaJ2sK ̋椻P$jYT4\l)QvTBXqLWkVTT$FzTE*0㚝NأV#6מjcWPNOQMʫ S1x,@"2dR܀;`Ӯ ;b;VUo(ܣJm0xzm01 <'Q[d4`nuVx=}.:UVhJ(()h(v~V ҹ."ݷ+W!b0v2X#ML|F zըUY@)qTRV(T8ƹ=Tg]GcRf[Σ֙mcL|*؍DQ1d]@'>"ޱv/^wv UL]'f9iF 5Vsp*9UP:T3o([ZWsR}*?}U|}j(>z 9R>&6LQ|IX3]*cSkwejm0o).~nV)3m9=in l5 w [sYFFM4g*V%B6xI1ؤuZ%!TR֣dL#Se L,+ 352 χ|a6lϩk-{>Ft [Ao*!;db./ p1z+NkpNTC@e#8T6wRV3Qt@6 ⴭvnyjWmfX&Y/~bf8E_ĨRSQEQEQEQE%QEQEQKEQKEQEQEQE)(Z(O8I{!8,j؀tⳔL'n5Py UQyT<{ P0Ċ8i1Ndd_` ӠU4&GVrshh689#Hb!y*a$`yeLr5(x|tM298ldU2*rg=VF\V.dYh3*Z}:J()ihJ(Z(((JZ)h)h((Z* Tcj)xfPHqRዩ9 sBOIyUsw[f\>8vҩ~C Qګ^H{ڧQ$# UwS#ii!O]OzYZ0v:$0.S"P r l8UxrRhelGOo4H[:՛{>wt5L3`vVWB@"_Y[wOI )Z~79_Ưcs¯UڳERRKERQEQERQE-RQIKE-%QE%QKEQKEQERJ:X$H:yڃ)h1hcV_-B.N>U;R:)?tsPI!]0X^'FaAhQt&”b>]4RRQKEQE)hE%-REQEQIE%RIIE--REQE-RQIEQE--%QIERE%%QE'zCIKEQKE-QIEQEQKERQERE%%QIEQEQKEQKKE%%QEQEQERRQKKE%%RKIEQERQE--RvS.H?ZF`$QFAWV 9rE-(J(J)(Z((J(((ZJ))h(JJ)ihJ(J()h4nM 3L(l旜)$ 9JZu:J()h(()((((Z(((J)()(JZ)i(()h)h(Z))()h((ZZ(Z))))ih((J)((J()hZ(ZJ((J)((((JZ(Z)hJ()h)hZ;EQIE%QKEREQEQEQEQIEQERQEQE-()hZ(Z()(ZZ()()h((J()((()ihZJ))h(()(J)ihJ(J((Z(J(((JZ)hJ))hy"EQERQIEQIEQEQEQE% ?룮J((J()ViVNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEeGEQE-QEQE%Rҭ*үzu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES)REQEQEQEJNS(((((((((((((((e2EQE%RRRREJNS(((((((((((((((e2Z()(JJ)iiViVNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEeGEQEQEQEQE*ҭ*ө((((((((((((((((LQIEQEQIEQIJNZu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES)QEQE-QEJNS(((((((((((((((e2EQEQERQE-QJJu:((((((((((((((((TuQE5ڻy!F+ۑQ0A2*/3k|4Gj<SԱEV@ D{K{TRIz-UV` {\۝~m &a);(= ¶|s3K2~訦[,}>p[$.JC03ZVQEQEQKEQE%Rc &1ҌzQgo #u-QEQEQEQEQEQE%QEQERQE-UK]y5DYLLqu\B79bz5gE<0:a\dT(u *9>shy9r-Uƣ5AORGfMB1\*kV%0,hh028 0j [c=AU٭*(()(((( BJQE-QEQEQEQEQKEQEQIEQERQEgj kIp\:6ik(Wofj- 3ujӝ8$m˞q5fny0\n/+i~{c#6$0>M9 esU(FץV?J6YB$qd3gVB0sUEQKERQE-RQE-RQE-QEQKEQEQEQEQEQEQEQE%RE%u,XG#Wr/+\!@ʞVӓ¨Z(/N)/nc kw?f`Hc|08sL]Q\qQX{UwTV,~T*I#*^1uB^ UҫQEQEQEQEQEQEQE%v/lQKEyQKEQKEQKEQKEQEQMcO#6'ڐJʺMdg#5]WrlۇqVe^YN8eJɅ1+&`VevېO8p ۞j[/vxsbR9 z>EiVnԴRQEQEREQIEQEQEQEQERQEQGz3J(Z()((J((EfdCB'!BWᘐVlI Ivh90|ue>ǽi[C?Jfvo[(9B3j{U BlbF1n~ a?2 )s+J+`Oӥ\Is9RT%QIEQEQEREQIEQE-QEQE%QEQIEQIEQEQKEQEQIAEe0u#O; Ʋ@X:iK@8!N-N%Ӛòoހ8s])[+Z܀Yޕm' Sa.z7֯w̄X,arzԪ8P\.xPOz8 dSEQEQE%QEQEQEQE%RE%RE'~c;EQERQEQKEQEQEu}ŀ8e+7_O TD- "iH]RpIs-ԴdH|EFyw1{Vl== ,i%?*@!ޤsPpg1A&6k(((((Z((i)|š zCx:KERQE-QEQE%QEQIEQEQKE^Mr2 $I4y]5ZQ_p,}+ɭYCf%l9.>SЁ{m'L jm=8QERQE-QEQE%REQERQE-RQEQKEQE%QEQE-RQEQKEN:"A+_T4W(g uidI d+.H!H?u&T,r9pҡb>mgF=[*, êj_r0A )`1\ gқmm+$w9=4ȣ ~r*QEQEQEQEQEQEQEQEQEQEQEQKEQEQEQEQE%U X<Xf|Bо70 :_ˇGKt!V#mcA#hY&Vlo=UME✱R0i=?tzbF}zڬFҭp nHΊHK1GPUx?tJd v֭^((((()h(((((()h(((P)>KP%x"IJ:2#Uz屚ƾTIQ^tdGPr8 ȨD \wlrUs}@׽[>qga*ųyzU*~QFVR 2D5_Jdvs:kӜ֮V[(J(()h(Z((((Z((((Z(S0:}&ϔOWp(<̼A扇/\5wr= F"1vA@Wǿ0#&uYt/7gVt ]*\c` UѱO5Yq208sRڤRXRT%QEQEQEQERQE-QEQE%QEQERQE-RQEQEQEQE-RQEC7߬Dn8LU97 `9,1YwSܟNFtڤg$fo$qƫ!JvDv xΆ5 HF.2kSñle2Z*FkL1 {ֹ}Î1t0^IO$aNBITb((((((((((J((Z((J((PzqG*i?([|:{Vuј|p@U$aXBY7;ajz{nnX8泤(O=IYN+kkI Dqӊ!In +sFU^SU@sZ p&?9'jJ1HKcՊѫtQEQEQEQKEQKEQEQEQEQEQIEQE-QEQEQEQIEwxfj,H[+?1?u>( dL9-EgNB4ĉkMb|uXtQԱ9Mcs䷥tvNaDQoVqg5a Ld֔\T/*вHA׭JPU=~=hU(((J(J((((()h(Z((()h&6z97vopmwjș3^k@#3@UK9]1֠upQZk@s|VQ DGZ?{  ር+p@=*xbcEE\ԗ$#(^E7WXUy3Q|?GAV^((((((Z(((()(;RQE-QEQEQEPzQҢɄgqU-\bʫ }Zǩ@:ĮtX%-qgF(l3;T*-S9q+jKy2?:U$_SJ1$v")5w"c?U%ر=2C+nww9v,A9Z5QIEQEQEQEQERQE-QEQEQEQEQERE%QEQEPzPzQӚs#Q2=}+S0@Q0P£a PHN:u"*ⳤ).I$CDUTYI֕ہ]Ej3򺍼VٰxnzT[k~?VfHXU?SHМ籪W,0sL5 6 %kWS[QEQIEQEQEQEQEQEQE%REQERQEQEQEQIEf8.=Bu܂ RWdjQT/Y 4n2#?cyJ~\,d9\ϙn3TYs2ERxR¨2QBNīP+TY>vOA@tJ] ) J/d m=;? @PT~kԤuuܨ&#"stQEQEQEQEQEQEQIEQEQEQE%RE%QEQIEQ@2({{o-[lk5jfk&'"(8#X:^ʌ琷!jːޢe`TNiM s) 2]8Fs)VLg+AdU']T2/]TR*XG6#$sE3ǻ) #w8:֤,%wG5~&*#o dwS;=GscW)u1ԙI0?W5q!f \@?(8?vWgERQE-QEQE%RE%REQEQEQEQEQIEQE-RQAA;QL*Y;?ʛ+fY~n5ĠI>(~IOq֍FԌLa{qZȱ$x N*?ʩ&y픇F*%܎82*qns@ MhHʐ^(V!c:QJ" KyRYC!YcA+rώ+i-Go-dzI0N8݂p>]ocpIjʺ7Ψg$AeEv/SD%ITzWK]tQEQIEQEQKEQEQERQEQEQEQERQE-Q~P\ȣ3sY긋 dFUv2'sAY2i~OZa/8e~=X1ϯAV]\U{ݰBʧTۥX2d *IDmM[TQEQEQEQIEQE QKEQEQERQE-QEQKEQ@O*aMsmČO,zzv;C<*$QR}* \q5c,@9L K'Sg tQ!qEbsi,Wz  ï>U \:'>i1e5xGpm#+WGn,fQ@֕o$s"b)Y~e0׬ܐ3#g\HeKuo|ޭ$o(XCaoj[}jWܿ)} JvA:,0M@Z1^MCCi19$@Ucxc:v\:R[ѩ;Tэː;U$)\j`$M$wP FsNB@_9vd N|ߚaS ß1OB›G8AzS|Ӈoґ$He>Om(5JEf+ڨݰf#*ӆb8(VU7^1U<뚲۾ 5>OAtj~~O`sYFL~'6[ 67Otoo2;Q⺉4v3I!D+k;hv*GoLXE2@UdsE6>M+RHT $ W6+SXn^99!< ҭL_jf[ eTS$:kCd9̨6֮m?Q90Gf;*%KRpAңUs1Uی` Ӵ2cz^՚fڨܴAUi=UDK?'V"\v߽Vb#Gpێsڨjz=ȍYQM/cXttkE ՆfIs'Pz~Ud2:# `(H* ûhF?Z63 m5hR^F`?Aios4~-1QYp.ѕXvsV#JD+d|F&:A-$8\^`hgw!GQ}bU=O"aE VL#n0a+7a[9*'G(?@jXmACޥ;#!UsRD)"/dIYI+6IXϭPCj{Ff/rj(m{p۶ȫn_.L zՆO#s׵Xe;B6z3KFocQJ ڢp,2I 9tc ڒ7qec$M, 4`;wGAO_u*9'|ǵ6}A?6sڣɍlzSr0U`*&#Xt"gMc|d֔y˻ Ěі2lgkBѕa1qv= lG@ 1ډǛC!@ޕ `9jay''G=Bބ7KU-0%]H'ߵKh! 8FL`IqZKxfI+B‚CriJ)|p02h1#g*0=5$i#ҮBcAg<)y9ALFP}VKhDʬW1 5Uĸ=Oc%ܥɔJK|ܰ=jrrI*5VyI\ A+8 Gi .tÆcߚ[h\ʹrO1Q꺮ʇz.GJ/ &@02*;Eq<ӳ^nf >eGKif]*@AuU$ IyP=$8 CBoW "E;OB1Qi=;^>S]Q@o-p9i4\7 #/;e1tSz qI,*5$dztdQ|Bpèk˖wgYs>_9tdO5wOζVYEX:UHgι\;w3FpC4ڌΠSlc(ynWQ`VƟ6"FU7'=1Y"GHv WT ~n?8˜o$9#JݲR2gz1Gp{,A@wwBA {n"e9BfW@JPFCK qҔ/N) >YZ2YTo/CO ]JޖE[8`)'&ݱ\bE6lh5 OzGj>|РRFrzUc. =GGu۸Odž9VfvEApFT2]Bd"SLFHn+|=)Ѕ%c$֥Y$0 nvO2yT5+J :{: egj) 85FC#8-UILc8[ӐYoaOr2/.}Z͏"3j{c]cB4R2GsZ(>-˜雒܏JB4 _VU7DCG@>cU&8=2+.ض6@7p 6E)ǽ9>VlcFݑBIߕDӴR@$)TffS觍f0PMUJҴ$mJ߾nIh"K%;TJ\)b9qtzL:qTS`Ī輜uwtciX8Sج Y2zS';!ڙ"%VL(3[B6κmڃG't %c1P(e p1ֲ)į>\E#GacȯE:4Tn!Du2}3Vg9 Zgp"3u#j}iЩځ\I皚"$X'j[d"D䨫VgJsP.(TY.N޴Ɣ!8M>Lȣޚ&ܗzO1'(LU-u+jŹr_)oJ|!dïLh@hgJ54b)\3P qRAmު r1lUfF>~gw~FpqQpx۵d$q=?P*;Lo_j6uVVZjA.Q5KMMG>^jWVDjk;aH֪7W˪yk2tTrjq|Zp$UvD >gH+2ڳ8N U*@*yrćH,󻳚k:̛H9L3OF5VzkFq Ly\'´ B]|qLPafIf(2$jfG> )(ģۜj"ۣ7$3SYv1@mc"$esH"*ogT0OV41E^lfOPxh"?1P{-qNL;15stLi11!LWTX8,N=iT%GS4IǭV}&J9lh8nj+{s! 5 eٻPZ!BT6\};UnHsW6 4HT`Km:&.09bFCǽ#e$`xl+{WFܭvoRLWHqOJ̹9~S\$7 wV/hfW-ݱB}*hdgQqێe#Ȣ4Q>dP8^MX2w+aOLU VgRx?jkϛhtm~8B@~rU"^cbUnC<7q#G=~SJi d=qk $*I=(KUޠVZ\*8Tu5+"q=j:| o) s楱G v!S,`=Q!8VA rG3H>I1A!H8AFbVGr)$ltS ~c`)ңC19FAǧz%`Ȫ6r+AQ}D *JbTJIP?Y֗[\%weUx%xfVlcU 8?)ʱ]*M7mGLf{k8TC WG7Ij "栻KHcgr8yDmU[imQTPY]Sode]3Y]yUUe$T!G # 2T`0MCta+&nG}WܼTWpѩ"Obs:=Xc,:|ji>%3p O0+LT3O2`$ïҪxV>iYXd:`TcݡY2ߏ8G,+6KeܙV{0.5QeTQh*.@mڠHb8h8ni dOCBݲB/GљT`bo8Ͻ&˽Ƴo4Q*JȼƩd^PÌ5GQa=*;U qCeWQ8NpI s͞ÜUgOJgLݛC{*ͶczJ$߼joݸjݻaviHڒ%d2H$RF\\2)# pظ`ˎ#,|1ҞDޱ)mG6T8Vʒd8S"@ p(/=Kkl’ {Ԑ&-HSn傢V!\  =ISʷk3L:9hLAϙtU\{:,`ɢUDT@h"P:\Q,jƥ᥅D:r*T̍D}@4BH*IbYbE;8M=qT w OI!UD I+!@nJ]~oR:UB~lVZo)J99u E"2]cIpܲ p~(6;r Ue̥Sd2:sՈw)T=MiYR\ɾu)|5m[|U}UEvbFWEUT :Rөjbp SYZD8P)>ˍ6y_Ik|o@H3\<=zec[PG=Z~oDD9J} +jg U=[h+ {Ue^ݵ1C 0pr>SYg-r+>CLB>HP cw ""pf {e.%\&*kсӟ[tROpF9yqM M7aP.icJ}JA6:S#@G4Ш )|f1±OJR%Ln?0q)\v"XgZ&$|)rG˅#֥Y~RW(A_+AiW XuJ AA9_bMVB$95]tC LRf U՟67hq֫3z3G ,::WVHْOtzKH;dTo`Kvխ*[$p*Y7C{VBLԪOven#!P0HɪITV7=jHwmWv@EPt=ܭ͚YS𧿽ZŪy;FUUHДezhвG5";*n#泙ɀZ&(9۟?#G,/TCeF`3j"V=VuI5Qr֩ZDݤdj,I![x$赿k^N4p Xڝlku\-c #n[atS&r5;DZ_&TvMXHNsZVŖ/xRy5ȕ~VZÅц=Y7cRޣ//$8j1`=%Rx+d&YYL֤:s,Np3ZQr1:UxҔeitLk(iIj 51 {Rfr ;:F򩝾tfEIn"SLsӎePkt8&pS\Oo$OjAH>ڤXZS@!OXRR1LxM?-$ӌ=5Uw1޵ m2tgD.2=PYNKw쏷Vm' ҋ R={Qm+(&isdm`zp(>v3n唚k`rJHR[wYɃ~\27 v-Tn_H$hk@}j-ؑ}8T!nĄz=k5IEZRk7Tx!O*̑y5\[Ԋ槖&< DYٛi WsvHdY0xǥOC$a`8# gbC\4?<0N1Vlhڧml =kaXsP&?-TM8az P`Hi@Y#Hi?O֦bDUqp!\TS 3yOE*+Kj;P@);sQGn# aiA@@^/ʨ Lqo ̓޻J̇ qxg;T$n XU}o* ~^\1?wn4HS*vIVndt$$`d-<&Zl2bH=jmU5ip :qն;g\nI=jY*Qu@:|[ǥ\ڌEl1n.c.9}ij0 Loi4Aլ !De[td\fUp.:$ߛ_tc ?Ll:$CF Cgިä(bx q#)duiZ9|eO_ʛ<[\yWjFz)aבЎkC^YMAZ!I !pB+G^Y\[,JYrShYyxlf%BTT)o2ݼH#v|mu@\Eߕ(2nܕ(F OnѸ2oܽ3~n},sܑ~Gr[T歴AaAZ]„#j\D#whXǩA<d99?E+$Dc<= ,\?rMsUMeEBz\|/沐0emԐ? PrClyeb(WQ!N<Ñ .3uRK1\֜1,ABVcPYArS?Zwi5ߝ8`'̻Qz`TSDLf*1Vmǵ39椌.G>bZA- Q3I =86V!.p Q5&.]68#kN;'8$uNB é#9/[G]zguIt<]\.&<3I7v/&G,rH9?J&wZJ3դmDE8*vO4Tۄ U#ppaӎԏ|PF95I*°wx+5fm*r'vc=*9ޫAݖ>=IMMl>Dq>4 `f)bg%4pңs[:dtQܒު,l dmYW9*Gݩ`AV54l &_meW|8vʨƒbw͸昻?758-Y)y}zR}Jd}*Cl2NS,1 Z3v`00)vlqVq#$TuaS9հQ2y^F\m?JdqbvvR[Jc8$w~I.FHs3X7WK;yNV{887*Ǻ(-MԆ0텕~ZX$fң(14ˎ5HF X<`2{=bϗO1P~zn9 mj5!z֭E9*Ǚh޲zIP9B.1# oJ).ḣc)ญ'Q9|S}\mW\@w'#O 21Jٞܐe|g0pm d1Sd͹LDS)*22Q#H`a$K}̊@ҡꪟ|gs$[ |O 3+ѧsF`urb}k&KG5@ Hс[HY(ڹHb03U.r >byJ Jλ9_jVI:ԑC-.;wR)'lBc /F欅[,,e~PN f'kD'N3V-^_>X8^sq;]^inW#ZV~i#bğf`]=Hy*k!9*rDQRADcsI'q*GK; s#5>$9<<ϓYVd1z >Nf'قt/Uj}{Զ_6xmrG㚚soW뚖o$ ޵$"O LBzaB#!HziB"!lr QcOq֨`֝nY)UQӽ, dwX@\ƭl '=iX ALO4"yQd3Zզc Ҷ '5X H dڴ )<OUV+tbYyW g-N?Ƭڙ'o*g5%m8@x>>p* awz T$3U]riZYx>2+Q@H@֫y\!(|zbKy BJDq؄͊ To$I>ڈ00 cs퓚d{%qK,<Τـ3S@U#9-£dJ>)+ v3N_|fGFھg|>Ӆ8۹Ðp=KR@bC?ɧF¶"lnaQqҠc&)7* DPVLVŴm%ÊԎ@ ,Y{va]jN&Ty9}罐˶xbMw),!'D:}g|=,vSȦgsM*YepTv)U%c~P*D7|p)ݳhOZx(''SA "9yS4pw{ Hd@sIn AH;TK .LS<7ӷH?xs5QI˩_L]Hc _P;fٌW%f Sm|za]Ҩ돭IzҲz:'QKpUfR sV#'b=I!msq֙4XgKdg,ʠG,iad:thP9zs3I>Ty5RiK :d)fl)H\ 9^UKdg$8ぎr[8O=W* sի_ `6:⧻LHTzԖ*#g(cG6@ہAd 1ڣi=s;Sb3.8adYe"` /㌚F+!7v 'Rp'i*R۸ |TX\9#V,lb8`j tn8i'e,&$=Nr)$ Pw|Rr~nbv'>qgRB֥G ,c,aYI kW+{nO\| `I:Z͂BS8 pArJW;Ӷ1"l2 g~STu2H]ܧYobrJ\n\yYro^ƞcV^#IM0N"laޝj}6(~zX Y ڈad*ǣJ|C nY][l|^L H? ~ul"A *r09= MWH=OJ-0+L S$ϭ2IHr8PA=1C|u)ߑ)\'~z ɖPcZu7,F0Ֆ_'7 ՗Or Oedђێ;vl %um%q֠F9ϭC, eڠ2UM (*\ypЊr>pTjT}pF^|1ޘnM*\i 2ڲ>W@P~VK}5w9 ֥1e =jʂr N,j܌$-$*J]d\xO.QdKGպTfR_,.*RwmbmŸ+Ġ3eӵe -3%r 㚸I fH E%p3B#<՛C>槷)=i¨7USoQ 02=)sw+ne;Uc>l"BzP|)S6 ŸKrmdE;0{uNaunJȸcAw~+ $M& =kRmB/7B>pOja<k!1cihDPa==*KyfDv~[-n'gPÌ.@5z+!lx3Vf 30 f*2ש{/rݟSe$cdlb2 %^^&% қXNwwR/E6A=jϦ ղ~qP}ؙI1Ï_zۓdІV|5NbVF)lHRhϥT'JTYאe§R@ɰ+95lB?biЪ)n5> jpm;u 25Ucba#+5A^L(vcU^FlPjNϞ֍BqnWmyk[UTA0sށ"$1 ަ8BH dM{Jw *A"U_=9 ]mžX?KR6s֞B^=S:)Sj?֫Isڠ~EW ҵIF]UŪ+B$)c2 90BsZkfgbGsOUrCu7*R Pw*I9-ګd;y-ڡkm<*bZ >o @O|ݠj}GZk9TD&tSQK݇ZEFi})yLYO?Ё: vTL$t\,(zOr%x8QӞϥVgP& ŏC )$Jڟovc#i.RM6?Zi)8y&8]qO,, aFdv&n=6[Hc])P;A9^FnrqY#Ha!=#e^ =J+x6ڹ'55--yc55Kx!@HE娘+u|IpޟW *C7͵r$nh%RyqRHqI)8;O^C}{LfHL.r7 ,JY@jI_sRpi`==H8_aXLrμ(}"I]Y(/fZF[.ls0 vObXf`> !yCb;(jG0!W5j;yjiɊppqjIf1[ c<$䞵k{c3pžf2IJ #vG}v+נ.*{܉/so/ ރ׵E5tDZ[#w(5fբ|)<<#+*0yqhKeB;$BqA-ARI8bJvIk6~z{vatg5D *<"=֑=+cj0̻Q-&<_Kx'!;TR"]i2#+ɜJpR9'\ZF$V;|ğSYk-'M^mcjݬ' \Ub!ݜhŔ18aF Klp *H'Tvun@m+}E:^ހv=(<JFwKq>խxU3I9|^gԊsЏZ|bl fbmOF<*I)xF?#|!ΎBM^ӥxՁM[c-ܝ+%bBHa+ϸF0Շg/85b͡um9ܬYգ"hNߐGcV&ϛ1 V $Ojm6YN~V迆{UAձT4Ё)QXYZ| ڨ_(<T5)^=*' \.$̹=_䐌ɆW:_O \=; y8ҷRi&H FI4 vvkxF,ҝ"c+Hn".XӒ7 cJp9? Ⱥ.mIۭ:kS @fMn'r9{J2E >?VdT6c5oOg]F=* z(jđ.TzHl#gU$ Wv>cګT0ԕ˓#ԑDXv|+Ϯ*YN}3QpYaaJqU VL-F!b,~Ecҟ<yRM#"gARL쉞2I+3{UGw*Nw{Sg+n˴ TKvIɫX*v*F#*:qڔv$zqAa8ds*2G`aG;=N*sZMCԲ2!*{޵$̄:GsTe4t6)& }ڬ} m =g6Bqz!q@ FFj+dfLUR1E ycce!}P)+FS3EB,sOqSY#i$ka13JdE'*tThKU.y53)8~1qS0;NȦ@yP#< a@{(D!z / EWu z~pʹ u ~Ro*@ qYݙ8X3[k)w$95mXL1QSI QpXE"r|9jEƜ6*.A#~F+wj#' -abʹʠKxy$-jU*zjpTc5 ʨpqޕA *-*6#$S-1I"GyA+#:16"oI\vWW~Ҭ QqJ8t7#%*%Vj=gPxqvI{Su[aOjiM;G褓jz2"ȠbjWpʮ7Z F/'psj~bI1$թ6#|ms &=oF򋴃gD*ybs0[>U:mNl)RëaQ7Up oPW\)q4[ Ibk>I$ʱXf%P'5ֱ28 !mh EfpXZ-TڠNqEDPHSm%xE6)kayy>,=Oz29<RAҔȧn'!I4샐 (jaq1W;؊/`>cJm>LkܝKޣ1o׽$EY=j;%#ablX+ۭExX29Q"maH:sV"ka!8#_JxsYg8p~n5;ؔ45gUg֓PG4u@i[̯<Ei5nno0wetAWh")\ǀ3t&RFѳHjkKx\,a[%0qT(rݍ>3ʩqN8tȧB!'wYjN.IשЬQyrOCV"}G6&]g#ޙ4-8>s䚰<*T Sʳ.:?CHZaY~y/*31ZgsLxGq_y(}:ӌbN[;ҔO"*Ҵ+871MVq⣖V!xu+C]T褌{T7dRIe;&+XgR[qqV--ȈdqWbfPzwf2#5f2N//չ-2u*TpCcڲoRc)pֳnVC}k:vO8Zs)qBF9ZͺFsЌlNLG5 0P㚍Bzd$9j9W'#)$;Ud\|cҴS2}:7jfbL*\>Aq =*vU.H!#XWI`z沧]YW[ [÷X>32Z6e3޵n`Fx] Ojrӑӡr`Y*۲V١YU&0?:"U%7" ̹&yjT:1RjvÜc5 ~^z0܉ET\40=ri{S#A*򧱩^Vaʚ~C \94␞Ԅ旰~Ը*,"K D~4X}Mу[ XPT#OREQEQEQEQEQH)#}ڄO.*>8'$qF;&YGm$+>]_壉 Ʋ[6ܿOjEw}{VVeṗ޲o6 e_v<{܆w0+Ɏ}֩cdr8GzG#G> j`2[YHCKA3;zC1]tP; =(((((G!T5U9s9T@.54!@Jj$jm5VV۴sTmR#O!+k5ao9"o0=wǞ՜-v'rj͵A'8Ȫ j@VIv7A`=]|2*8Ĩ2~G6LNBi3! g {ҶSqqSR3K:g(=0i|'q>"~JQXgnܻ&ʛXW R0ML֞р܀(xCF&:~4݃&A̿7J*ՙ~İ@w Kکݷ#X?M]G؞hmp<^mc\1`)v038F*@PMsORDwdR /QH:E`rGQN$;H1Lx*3L)08YY 3U1+aEA嬍3W4h]#U.YсZz˕_8PFyӊl`r ?/";^!l#E9 rGTr:5 ;Uk|vcM *%.r}*՜!2ϧ>ݕXUӏUCR֧;ۆS=)Π7RV`O ɗ顊@zRO%QTwuZɸGݫv7OWf@ORy5z]bEpjS8# 'uuo=J<=VEWgZ^[(#'o `Vb;u,c>YZGl#hH ؛}]]((*VOfUw#*s}1P1!fxDb4؟]96A؅{V8Ul", ];ү6*TثP=VʡSU/DeۜqtA*ʼuS˸xj ]SV)ڙfV0Y=+\ J G;{U\mVG95t96tS-k,Fy9Cng&YEm<`q"E\A7VF_7 hhTݤ;t*@C#DAsڝl4sMQJlp?QFpy/*hvK' Ԑ͑VP|ޘ zV92=*uMUsJ#Ք{xp^\9'W>|2[Ԛc$@V\n$vТ((YJ\[H`$uԘm2M"pGFe4HU]> z4as} c~H|/sY{lY2܊K¾׮d*(5 ҙ-2m)'xa GIEb84MG$pj]-i$ 5%9*G0 SPf;r*& fk.H=D&HPZ98lr1iZG2shۡd$G-̫o|QtC]Su䩍֨F2ymssOt9 T\ǜU2*~hBTS NqSG+ҡq=jXuy|Sw"QeH o;{UeLmOj Q'61K3H8j=1q;J#{ԓNt9ȥhsʕ'#Fv†F`"!$c3ΕM o#+A nō?$Ci|W/",*Y2 wjYѯ͵֣a| ՙ8Vh/)W1'*A֢wq1f ՘c={{SԜC֙xQ'!p7 W!S4g{֓J*GCTrwsR_${U78񻚳񚶱"@(!P*DSӨI>CP.!zrUi0 q$G:@;:`LHBzVn=ES.T # ң7tQFggJbbި9U1Y$%&z477'nnɮLG@iN&MF^9Fv?Zb)z9SZl$bfP\pƧ |e5X F&}Y]\#ҫ5E~I~n@?> E~G5 ۷Q-恃Zdp^8'\qg8Wa&!FrNܐ}E'$Jy?x b"Ghy$8SBqHZ@l@lFz4US?ZFz֪@LÕ0N*-$Cڢ20c֛[)2K`իh<ެ\ж_19a;:T,sۼhX#"4$:.H&VGgjj[:\vnڮͨY\[H[uj-崰fjgr+ v1@zӚE A=)*4W? lE+j2qҮ@2~!浭~ԕ=ILO(dBK dwK`zg QZH+ǵ6w !Z&>Ͻ ?ʋi.-*|"B6ޤɈmSGo,>U*2@v3MyUHβqMHI8yRA'X=*$瓞'X֭[O !_} O ެ[+R85 5VU֭$}* t!#"m%q֭8#"'V%Gp{T8EYW&zn{ppFj {k]mjS=a)9/p=MH=*DS@bl7j#LnrU)(y ]w0l~nj՛T(NҧuHrsTSB$TPn d{T9gT10i98iRz{ՉZWf9bjO!meUk \\++l\bՌ;)%EhY8jg3Oqⴜ|zU$ڭ;1Cd@T{Lڍx>v?JMd“sب0=j'&J⍎Gz0&jHKASRD >}eNx*tNIÖ~ SW TkpݪڤXsVBa7(GSVߒ:b\){2O\ԆVֺ,moaOl,.*{T ߜ|w.P߯Zf\/ҙ;(~ty+zR,lHGk398Tj=kt"1ꃭi(OpPOjT]dsӥhm9#Yp?V.3*e 5[$SқjqQcyVKgǭ[8<\˸CDFPv9\v(Sx8MfU$g𪅽~U3Y3ߖ_O&ÈvhT zN0"g Sc4AFq7att݄tMُ3cF@Py}:yl Nv&>ԑt}'PE$To. Dsn&)MiA\ IsR,jVy!H4/2Q<P_kEˎZkO\~^1ޫKttq4pB#1ȤI<flqO@BǃR dU;Lx2L<Xjdby~C@Kpպ|_7ݧ`ڑb~W bPGnj1Vo$* z I㯭J[u~G^ߔjXeeǸV8˦XPBF[K"AI\)K5Gtn Ug2۰=p2_kY j׵p`zT:wEK+~b2>U EL=?J-dctbV @ AcUpcԚhePsi)ޫIc#rOfkb܆'ZVZ[%敄0Ė!#;U!K`Đ{O^[ޞ*rpޤRJx^ԂLL$s B@S9ӵ1;c+zU9ʯaP49}j=Hy2nREc~~3օe,95mzZN pW_S*1Z7##QGϠ=*QrE6(`zߐiZ⹛Jͻ \bO͙ SjZ'5|8V}sg)<'m8q)3P\Z,pqG,!!)öCS#Ӥv֒;Gijw8SSGiojpX(b; L :$mh*C.(*S.aE$-jƤMXԶH` SrQҞIңRjY[bkԵXrjė+l3rji.ԟZX[$c\nf)QıpP:w5rUPEcjaZȂp/YAόuBMKsRb(ԍG+U# :laPHqMxuJDLhw$fCHޤXc\ 4@H R z]߳1D/Vbz>%Տ?ă[HSKٜ8i[gbH4 ;y#րNpHWz0AP)BAI~`vSMrSLb_>W5V- SP UI5b-x3n6ۀÓWm0RN1O=*@INw475"'j$BzjXI늹ol>ih: .8YuR6#.A5-[[=ObiӘn!fBzD]%rN$*OV5>WVƞ'#A,BQQ܊xP<{1-9s5`)nɫ8:~U7.U4b7LsM2Gq4kxܾMD+$+*ơb;H$'ԒEsqT'[VqҰ/@汤&zFIEp > DIV%07$4Ф2@@㚅Ij;T.]OJ-68|~fj=@_rc5mˊ{ #qLoʫs隱hEMni㊕zzCҐf1HzRHcC2ǂy43ǭV3NAڹP8f_0GN5<2ɼ&)JîvdR zV!$%aqJk\i]!+c#l3#ڨG"I^B Bdf;mǶ*94IrppSdSeS~U犪S8!7|ݪH0Į3ҟljHՃdsU[# 9.yl%?3;E$AI *@{բhX\.6QS8.| >f* ՁLWb$xwWB%$VI$y Ԓk7k$ZZ^eRF{֖7:N?Nfo2eiʩ .xV.Zm/nj`8ɗ ڣRKLBTOD&Cűѡiv2ޥE&BNrM'vnQFj3!I9<}:i `r?*M:̻ϝK+RY|Ua0ĀGZߝ9*0zk8 ҃wg@4bly>1U3T'<`}<zS"XSG=sޟ|ʹSP984'Iq^AƯCA?bR:Qh1Ҝ-Ge&!=ja!S FM5ZGUYdю)Niȭ;Omj ӭ^$sVR*ͪ[ fg=$s]I%T[2rkbMD徵man"cֵC&KʈlqC=엓yj<.ZM6b©${s &㜰P2~BF$~4!Te,k77Rx&Ԯ%~3ֆWv3MшԻJfދxH!PzR'H=*y0H5<G1Ȫe^ZBF>TN.TU༖ DۊFkFlUI%gbsj{[g_aFzH(ǑcMp)Gx1M~zfeңJpʝҜr)Ul׶):HXXِaPb,tL_j'ZKxF_n)""ҮC;En)UR?g6bv ]ujg is;@) fQXsV#v=럘l8i]!aY጖,9I=!{B繫UU;'|}< cF^^f#c䗨sVf 68*ʹl:UX[~*ҘJ4acNN.L@d@(e<Uv #SVv #SS\u  qݸzmyv!$i%w8*6v0SWE.5icRqӢxi ( ɥʌey.?tqv&`9ayd=rOq`?z2x./s֮L [OZso~MLէ3Vj<4fXUk$H=*Pn)\/OnrǡUddCWTN*q*azQn2 99H\.~.=)eF&4 1v0pMUB|~75D™[$1Q.ne~I-?p-#׊lVyN`rqMa!T&a;G4R0E")$mЊ*-#ZEFs֗Fc6yݥz"@&s/IUBlWFЉKR=vy`9jA S<v8{^JrG cBĆ8T/mHHԬjbhX} KL1rt,p*j>R29qAUyA7f +O؊H=ieƑ`AI4 /aҞ#iNcѸt4x4Gzgع4McrMG ̮"MOJt$b5Ϲ4dG®W5O!,xAaM-&؏,U@E_*+2 CYqOEnk:tZI!*+Gr}-Ԟ1TcJd=;URL?AR7AN+2O')cޤf!McC}ӢvTyC` z5 =qYhDWڳuפ!DWK+Zjx 5Bm9m3zv["VHTJՋtD' "Ŗ'!EHIVn˓ҫ('֫,@0xL $C8^5FoGNjәP8pT(<,Hp*\DaL` Wcg"B!cJmL|4KjlǷ< N~EfF&b{w[[%Bd'-O!FcBxPzxOj"7dU2.ze_4M~df=^Ɯ\J1ZA'֢i7mC®=sR(1c3SF#%#f~Inwʭ1M{)Q&RyM̌x_Fg=)ۧ&o&2K%Hm!,fҟ"Gn;ns3Mf#tsTfz b۞E2!R%>ͣ< rBBvQIj8㊛`/$'qH0:iy9cښX} wƚOoƚOoƢsS;cZݸ,hZ#%}h(}űD`ݻK"HMIw-Fqޟqw$\w_;\Sjl@NyI>9GNv^r'4)vjp>rh&>4sM39AnnH׷SڟUAۜիba^$$2ǵZx,Q*0Փ3|+!㎀qv1LkY¨ݞ傎sMh](¶T{^VFjQJ&_Q};u#InlUȪ1J*B{xXA'G8ROsDB\9'dc'yҪ v-H*wW)".&?jQq1)LϖhHvNhdO&,I=2#ĚH嘓M} U5 o'zV\Y2ӹvsڜ:8攜h'hO'NikqߚkqQH= F>xZ8׶X p0 (Q ?ʲI.A8/eP=T可TI"0+ԊxG;·%QJKޡQp}0(V`Vu?@O5JaibTrxT$WfG4Db=5={9+Lխ6/6W^Z=;-;QR#;TEl 7%)d ʿ1!A&byj~cY{Y HHK5N6-[L<5qL te`ڧ b6UULT*7Ҥq%6RwF3KpZmjj FTqB洼9hd;Vlİ\ïȦ4 ]cLAf^ȭ9^ߍg]Ke8(wvʅ~#mD2gwHJUwdt*01'p\ \9c_*Z,rVk$iaxO=i#/ZO0lNzۄ+;Bb瑂Ɲn"fǐh6 +_WW<`zC,ZZȋI&0ەsgHO6Z0߻5RͅK&H J1+8HN) ()()+ mR=/ԯdYZ%Iu[Yj"}BǧWKx0;RO(ܱ# t$TW'<.ZKrI'`<5)i5dӫ֥Q9,֤yA楶m㹐d՛ oGSȰ['gΫ%#$X"S%{XI!y=$ZmGN)dNA QR[R1)O8&T\2%z|Ѫez"wOҡSTrX¯I"|cYlcUX梑1"1Ke}MmmI Kn,']~V-?WKM5wlsX.ٕuc{K*UgXzs1X#! p,A0jĻ,;ԸaOO0¡-89J8c4pɸnhsr.\EֺOy&.թu3n\_e$B׊F%sV4[n6X̑1d'qT,Dދz֭h5۶b{w5n8Ĭ}sV&SVEQIER7 ZduAni'f O\ LpGZiRd8ҤqVU.2.SݩvwvE&:TVȾ[mcvcGI݀ZæǓ+d`f%Lͻgb{,;:gj#d>,Ğނ<-`*xJYJsNcpj{c S  BV98im ^ӭM̸>Uٵ"o,kKN71MCPdCmGJ551(2cQZWhDHl~B\袵AwUI?RYw꼷Go qi .(sCjbpUUbA),[D&` Ǔ-AJTQEQKEQKE1ɮ؝ҹf9f=j]sYR^lި;&k1/7^PKd$EkۣZ֖ȬصRޡ(J sgMw@vҪܖp ޢ;@Κ巆/d:Sيܑ҄w7jADl|烜/5a| c%G;RYR^GlNQ4>ҞQ]G@~ιeׁc֋ZMzK=c#$%mH98#NXBs*ճ5SR+Y2)";wBpH\Vޙ% +qַfē`kvIY4 G )b8*EI K`^·#E0T3Z@F3Yکly:j>7(2z4+ "@+ǷҲH8-FA'Һ[#-Ř.FOEm3u<}*" VU* p)ih(((q-gw\qg9+ΤzSqOۓk1!&I @jp*d`)'HBjeM:beaIȁTbL`*VhYh( 7%LOjgSH- _riQi>4nZ` @5ҧp'*ijSvK8X+${vAUݫGHǗ" *LPVX7u>'* Nܙw/tHDѝUbVhSJT0 St9timYV_ YPKk)Yo$`T cI aCgڑ(@x XWVhiGTWHɱ'X/ Gf(1Һ/om8$?wtgd ˓[*x--QE-RQE-v(cYmV]c'qPn$j"̄8cKpU\|bVێM6vnkdKnw 5zmĤ5e\P,gǎY0[ 2c|ǡNo9BBwQEQIEQERQE-Wx#$m낝`b'kU2U6?7Jc Vcq yZT^Msw6&<;F1HN8)rz23rzgҘ _(8j9qQ\)'ңm8BN8lpi.[,͎)&9 5qKr(U.VP~.'5̢ɬ׻f۞3ިzg$b\@\>#,MO5sMK8 }sXZ}Ž} r*r*>0}j?Ydrj{cٱ}ign+.qUKxc_T%kf0*L1P~s m^cT76rGz. FNjPlɦX<iQ'M7*FzdӬEGsj]*Icy _rSdui1l %B3ڒ+A;R]#Tna*%Mq9jHD1b]Ì 2Kq#DDzjG}v7yzx7j*Tj-kFJ[(V];NaP1UF㨨aa4*6>% g3cPĊHA Ԛ$U_Z'}ep Ճ׭!<ϺɻlҪs1j)'*o܎p1U T_2&j #ҪݮLX֝@SmС=^C<0$^dYQ\?)'1Í [.ESVkV%QEQE-QEQEQXۀSڹDar{V94PAj±m$|rENHz|Aj}æN}. A?U?z䖔(iUA\)=4#8f)2X U;R ¡SJKQ!WT :Kְp>Cgm-lܒ:V2{jPfI8ww8$,jhTC&8'wEu >b3uqDz8t #vS1ۘt3nyzg1A)HUsϏʧ92i^JS̖ *9Iuڣp,y50wqVk(\ag^-̄lwQ;uGksHT[%+5qrkgLU[$~j_TQEQEREQIEg}$S]rA#ڛ$ ՛;B>Rq\i㑇ڲmäU»Z2y^>fx#4P<zT*~,H'ҡԮjx,XVҬN Ǟ梲x^LAPںIf\hC2,|VVLnP)R/5c'8Zt K4v0w zU/O쐳 V; ng O{bh{_c[ր:GZ:=K\-A1kPD$*!kU*9i]sTA8US#{1Q-Ȫ)5ZCE?9G8<0e8+ Ui\ڡg#<2Jc9ɴd jS/{nZD|+_B3^,Mֶn^\ >[ jmp, zTڲ<1S},S`*K=J+;B {Ԑ^kk6΍I,Wڸ늽ɨI3ƨ~Z6l=_QIEQEQEQEAo%G̽HX5~eJyDQ219iIR*YR^E,ܹi˃2n=iO)®޾@l : N-#BY9%܈Isjk C&r<EbVnb *O;~P0r#3L!qh+JJ}:51 #>žTLrQ r8L^kS|mse`mlW4[?U9e=G5a ǚGO4w՘Q30TQo*]k@WIQGV&>lk {q<~~Y RT8j_9QjU\Jr*ȇ*{'U[$CbKCTpzvNEVt*J֢*C`wRջ;!$ =j^t!ϏýhYCʊ6? >لkPY]CenV%؋>WKq[@ɬzkn')1$g?EpVb@K'/l]m?-QHl +XGcjGrO,RʽO;Kd1=KEQEQERQE-V|]'\$Ghk6Y7X0:@&BU2VUM複ƣUPd7@6lBFEI!Vp?*%9ngR$o RƝ{icޠA Q$Ng(jB ?pFHv :ORуө4U0?VdERU}巟#Tڠ̏#QrYJj"lAVY+Jl.~ⴴ܉c=+Jr}؁cZvFFOZ56^5H7 l*xz 5k9 ?+?S[Tn.>Mg6K>X 9md 0@wzHG4@lqD0 *$Q}Q[ò\Z|E,cwRQJS![QxA UD~8|Iֶ5yž)$/lj2b 5II8AFSzƹGbCjD[WLن#үik6|tLuxTB c돧JtQEQKEQEREr w 'n\ Dpj(̒uЈ# ZP9gO71,Vᙌ\ ]OT SR,qBG<"]cp*B ?<\q֣YW$P"K6p~Ei ǟrj'^I*M;;^jɴtS#I sԨΒmA23s."Tr3Rly~Sk4V1T2ۨo#?C T5]#d^7w"X]xR޻Զ8O%̩F IJw EWN ¶C }lO'>d,ISIT$;$ӀwNgYU`:α5u$7nYOn^f '}iep?:5IR=2C8ɷ⺽^TM>zRuOW{{+9e`HOȽq\2XZM!~Ei a_#rkt6/#rz]YŴr9M]f(((()k͔iE!z\흆3Z2썇NH(HYH=jʨPa/`oN:̉@ ܀ Ze?#=xzm̧קǗ?7\T d`'$ ߽E+`2>^Tr`Qp0}n,h0_j~ص>SWOj!«t gTief;[$cE3:U|6ݥ-8S_8SP84ʍLҽ)WJEW V=ix;I)%c敹ʯN?pMg_\lA`H*Xmi ƙ8Ȧ-FTaʚѴ&,1761WZF*K-NGC}krnp9?J׿n1Ҵͅ{zuY8̯OjfaXy˷mb|5rU(((Z((|㰮}Uv2xCnZ/ytƙ0NIeeT|@]ܨ8U}I;]ى&JF,N}D1q})(HSAk.[v).oq&Ipw|Φk` Oq_s0D䚉 d5dhCqY0\?\qT1.qU3U+qU|:))\f7: SW$╉ h\zSd}*H푚zSK2"o)~~{JcRc$zS~hv SJH< 2O=#B.WlJB ]pǥ]6˷z tF)\ސ0,T-REQEQEQE-QEQEQY1H`ɮ| G2@r`dy.V8 iRrOV(U-1Vɉ885VvƉz; pq8aUTzԁ 9 Ŀ6x#|C;9!o{R49# ڑ$&x.*SK3``{SrXRiR2qP cqQ`&D@{Ԙ`sRUx!Vdv 3GƐer88ug֡pB3[ bo-#Xֵ#vXag-:V{aMpsuc}jO b s\QZ(((()h(؅'knJĊ.' 91'%$*'L9☙JjpK09^b+bC-#ڙ71)[/zKi aOzmTIqZVuH7'j[kR-eܮV'h[jl+!g1ڷ;ַӽQEQEQEQERE%W6ݞ+bWsepj433@j$gs:Tw%Nr8K! j9cd$ Om ۮz楊1jhc/N]A?ZTTA'Jcb4oœn৩JE6DNi'6zUR=*hU |a7 ԑ]p0}:tgV 3S$uwMw~ǐcQPoZ ܑPOEhL0+ѯGna+gJgHV/x[Yq޴[`TpzU:9W5 QԵ-Ue*Cjb!Ywq`"@zŒU`% "޲y>ͱp2*=;Pncv{pE:+)s^ob('g 9WQܪG2@2[s" ֵ.4kY$2+Z3ipJj 3UA+r ;2(sUѶ v*3V "M6x+VfT X8eVR9E+X֝](((+g݌\1`Mrɪ4 ,jJxVѲ75b*?x՘c!}M2H֟{M0/)9n} Sci'sTxi1e*X _Jiqa5}m@S+ HU +:{H»s'|$d,1Z>m bsp3rͺf`;VԳ]ڒ8.OZ5lqG>MXY6s1"m ujegv+O纳b%V=œށ3$Y\K]X!zOޛ+Ř(*:j\Ae ,ev:u>0G#ظH!p;Q&˔7LtmY.'8ܹN$dVpF9HTM֪{лsRԝh((Z((LN햮\kFY<*|MIK a9K$R *@i7cǹP) n7`|ƟrO\3wJ%w=iRȎV]x2F$b)ȱsjAF\)s6rN#ba'g`m8}ks!#o- >[tQ[%>*vZ[!O"˝zVu޾HV$U׈B9fk!kU9|C3 ?'xV=VZ!'eM-Lpz˚i! ɦf%83I }*#sQ1 N)Tœ>@F=i1i ex )0$iq1ch0E(l)bq\F) j1;BIͨ$23N=;G<%;ЋR+1b 4x$1֬2ɱRmj7V' ֵ Id z{:pQEQEQEQG֊Z(YPkU$,IɧZ~O)R5Wv z `Wvoj j ڶ4)c Lpj4! A$npGJӴՅwʹvWXj[DQ#jib2hfq?8rwR,.kuf q.=&H@f}UخŖ!VYpf[k,`fmژ jkǞF8U:ۖ>i_1!>5ZK$sME%Ӹ>"' 1LI^ 0';aR9riI89#^~`ӈ mێM.(:R zѐ)sS/83HHuRn+ލ'{Q#9zUsN'QvUlJ{#,>EmGLֆ~dti}1 BrutJ:QEQEQEQEQEr&>×T)f,c)wpp?3Mhh|[sO5kgoa(f[֖0iA=b(P2:Z\w WSd37rȃloXw2gq;,øsdJID5n$\rvt=iwWHGU!z,yNp)J40='4&cRqJB)i*@R<38s`BwN>PvuE!%= Ozh;jhGʦXv)\jh@H_bgl&K)c)blji$C %0ۚ0Z,3EՅJcHw+Y ڄ@_Oz^!C Iy***ߵ.} tPt/%JV-6\4** ct wz m9rU((((>)nd\3\e3rzA\TpMtvdO e{(m/AɬGX{aޱ]ujaY`yj:d޳eeg ,:q%~lM:$ Y|PrR+Tr:zzcϵFPK(*7E,jn 9ɩE8tN M8qɩW旯ʝڗp)ͅTznNR@{R($d)L8fw_-AR R-{Sx?{  =8[G$SJlHcHqsH19±AsQ*E581jo3n:-L{d S-$Q*ep:UKd8*ΐ 9Uk_D@#cbZM.rMGrEd9ϥ|sɭ E-qZ:ld?@ fVZ(ˋ\f*r]1P]ǵ0;UHjmȜhR;oLp֮QՀj u",ROT,A/ efa'#ڱ/dcj{v{WdtG"!}KPiY:`w@k=F95EWhsJa$/+N_K#mSNf8iN==2JɽH*)F?nF0jd*j1*4g͜ޤUژӀ T!G)ڥ )㢊0 * N3ӊO I9y;AlH< iv\~4 ^9g5!'f;0*)T$m0*sQVNPjcZ\`g֔ sSISRFMIN0N +Gz3 Զz8imNn0j:sy{Kwܓw*!0b=*u2حH|`YJ꧵hYŋmθsگǶkB%t1ZQ.>E#wvqHy ]#9(&d0;zG.mD@+&@=wp8l}5jO[xCu8hXPiT?0jݭlI_;#rxH*V.&QNSN~k ?뢮(((((((()(((Z((((ZJ)(Z((J((J(Z))(((((Z((Z()((Z(J((Z(((((Z(((()h()((JZ(JJ(ZZ((Z))((())h)h(Z((JZ(()ihJ(()hZJ))hZ))(((Z)hMɣ(((()hJ()h((()(CQERRRQE-R~g~QE-QE-%QIEQEvZ(((((()hZ((J(((((((()(()()())hZ((Z(J(JZ())()(JZ(((((((()h((((()h(Z()h(((((((()?JduPQ9JZ((J()h(((J(J((()(()h)h(()h(J()h(())hZ))()h((((JJ()h((((((ZZ)))LE-QKEQEREQIE%QEQEQEQEQEQEQEQEQEQERKEQEQEQEQEQIE%REQIE%n@ p#0_@3.zdy 8NǘڼZA %Ja^8)J XՄm诌ڦSJZZ((((((ZJ)((JZ(()h()((J()jUc܌j $,B(*}9#Cr$Cr[zT2nQeƨìYL{股iQeip.|!#<=C˄E]R0T iʵEQEQEQERQE-QEQEQERKIE%-RQEQEQERQEQEQILt44W*E eܹ'51~h eyKo04D fT-%QEQIEQEQEQEQEQERQE-RQE-RQEQEQEQERQERQE--%%%QEREQEQIEQE-RQEQE%RE%REQEQEQEQEQEQEQEQEQKKERIIIEQEQEQKEQKEQEQERQE--RRQE-RE%RE%QEQEQIEQKKE%%%RE%QEQEQEQEQEQEQEQEQEQEQERQE-QEQEQERQE-RE%%RE%RE%%QEQEQEQEQIEQEQEQKERQIҎt((()(((((()()((J()h(ZZ))()(CGl֊(((J(((()((Z(()(((((JZ(Z((((((ZZ))((Z(((()h)h((((Z(((Z(((((Z((((Z((Z(Z((((Z((((JJ(Z((Z(Z))(((Z()()(()h)h(J((Z((((J)ii)(((Z(())()((((Z(((ZZ)((()((J)()((()h((J(J()(J()hZ((()((Z((Z((()h)h(J((Z(Z(()(((JJ)ih((J(J(J()h(Z((((Z()()(()h)h)sЃG^V{⼆T8aTtt%US(J()h)h(Z((((()(()()(J(ELV'zW=} kS [QAaNO֨Yd1`I?Zi){2r\y޻O&J)((((()h)ih((((Z((((((J+ ?뢮))(Z(Z)hE%RE%RQIKE-%R AE---RERRQKKE%%QIEQEQE%%QEQE-QEQEQIEQEQKKEQE%RE%RbREQE-QERRKEQEQKE%%RQEQERE%%QERQIEQIEQE-REQE%%%---QE%REQE%RIERRE%QIEQE-RQEQKE%%QE--REQEQEQIIE--REQIE%-QKE%%QEQKIEQERQEQKE%%QIE%-QKEQEQERQIKE-%QKKE%QIE--QKEQE%%QIEQEQIIIKE-QERE%%%RKIEQE-RQEQEQERE%-RQE--RQE-RQIKE-QEQEQIIE--QE%QIE-QE%%QIKEREQE-QE%QE-QEQIEQEQEQIERQERE%-QERQEQKE%%QIEQIKE-QIEQEQKEQKERRRREQERQERQE-QE%RE%%QIE%RE%RIIE-RQE--QE%QE-QKEQERERQE-%QFi()()(J((Z(((((JZ(J()h(J)ihZ()h(Z(((JZ(((((J(J)()(()h((ZZ()()((()h)hZ)((J(ZZ(JJ)h()((JZ)h(J(Z((Z(ZZ(Z(()h(((J()h)h)h((J(J(Z((((Z()h)ih((()()hZ(Z))()ihZZJJ(Z((J(J()h)h(((((?(((J)(((((J)h(ZZ()hZJ(JZ)hJ(JZ)h(J()ih))(J(J((()((J(J()h((((((()()(()h()hZ))(J(J(JZ)i()((()()(()(((Z()())h)hZ()(Z((ZZ))()h))(J(J(((()ih(JJ)ih))hJJ()i(Z(JZ)i(((Z(J((Z(Z)i()h()(J(ZJ((((((J()h()()()())h(Z(()hZ(Z))(((J()hZ(Z)i(((JZ(()i(((()()(Z()hZZ))()h()((JZ)i(Z((JJ)ihZJ(J(()h(ERE%QEQIERQEREQEQERIERQKKEQKEQKE%%QEQEQE%RIIEQKEQKEQEQKE-%QKERE%RE%QEQIERQE-%()hZJ((Z))()h(()ih=)))qɣrh\EQE-QERE%QKEQE-RQEQKE-QIEQIKEQEQIEQERE%QEQIEQIEQERRE%QEQKERE%QE%REQIERQE-QIE%-RQKKE%%RE%QEQE-RQE-RRKEQE%QIEQIEQIEQE--RQIEQEQKKE%%QEQEQEQEQKEQE%QEQEQE%REQEQIEQIEQIEQIEQERQEQKEQERRW ?룮(J(()(Zr^u:((((((((((((((((S)QERIIEQKKJJu:((((((((((((((((S)QEQKEQEQEJNS(((((((((((((((eGLJ()i(iV{ө((((((((((((((((QtQEQE-QEQEJNS(((((((((((((((e2EQIIE--QEQIIJ-:N((((((((((((((()ʎ)hZ()(UZUNS(((((((((((((((e2E%RQE-QEQEJNS(((((((((((((((e2)h(ZZ(iV{ө((((((((((((((((QtREQIEQENZrө((((((((((((((((LQE%REQERQEJNS(((((((((((((((eGQE-QE%QKKER*ҭ:N((((((((((((((()ʎ)h(()ViNS(((((((((((((((e2)ih))(Z)ViW:N((((((((((((((()ʎ)h)h(ZU^u:((((((((((((((((Tt)h((U/zUNS(((((((((((((((e2((J(iN^u:((((((((((((((((S*:)((J(iޜuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQLS(((ZZ(iV{ө((((((((((((((((LQIEQKERQENZUNS(((((((((((((((e2)h(Z(U^NS(((((((((((((((e2EQERE%QEN^NS(((((((((((((((e2ZA~4QEQE-RR9iޝNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEe2)()((J)VޝNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEʎ(JZ)i()iVVNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEeGE%RE%-QERJޜuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQLTtQEQEQIEQE-JޝNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEeGEQIEQIE%QE*ӖuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQLS()h(J)VSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2QE-RQE-RQIER*ӗ:N(((((((((((((((+ ?諢(((((((((Z(QKEQEQIEQEQEQKEQEQEQEQEQERQE-QEQEQEQEQEQERQE-RQE-RQE-QE-RQEQEQEQEQ@8h(((Z(((((((Z(((J(((((()(()h)h(())((((((()(()h(((((((Z(((()(((Z(Z(()((JJ( )h(4QEQEQEQEQEQKEQEQEQEQERE%QEQIQuёE4RE&((A"(((֓ґ.2y#4QGhKE"Fh(Z(Z()( zLZZZ()((((((EQEQKEQEQEvYfa|nP}iT҃NKN)(֎RE%R  <@y< RAE/^( Ĝ abN!$Oi;RE%QEQEQEQEdH(*0ďFSCpcM87P}iw ]Œi-QvZuJaooP (2O52p)zR(((((()6曷'Lgy .:ѳ 8ۆ !0N)(((QQ~n:TF\8>4z4$u@G4HR¼L+ҼHA<ii:HF0h<`H8J01O^*ARvQEQEQEQEQIEQERQE-QEQE@(Z(&أ4xusIo&ݷ=} XsBDP(>E;hi7qMMI8҅*M(\sKN(((CA(Z(((((has0H q“x`ju>(((() #PiLޝ)1F(OJA֥1ORw袊Z(Z(((()(2=h)f@'3Q[ONzio96/sޢ{m8 G\$U v5(# ]12[ `=j>p|H?;JǔKw,N8FXp}+>+7F*WCiXrx5zF(Z((C҃1I90d{A)fFqBB=iاNb(((<}4Z-48Jncb }SїH zqRcӞ~zsAaМSX>߭!eN>"r[hMWsГQKpx3_ .Yw$lGq؞Bm@d \DrŠ:2k2m$ r2k>@^pT~|lp1> VDf L)!C})403N `Oj3,DLCqsF`WVuQ1,0j.r2a\F`@qH$!]fBzeO_"ܺ! yi^`qBrMO.ry`BMK%~fejHms5Nkb=IKs+ f9ĎǭG!vcG#K1j- T%SM "R(2ǥ8s=1J.7j 0[|vF9-8D`'zڳY03Sk 0)nn1p9NK{ӅLK9Jkf((((%u O* ]w20tttS*iTRjAOԠ%.R,qfY:6I]5 pHґnCH . IV $wcc.\$Axg8qBgWGaڴPhqrT#LWnT[RH|6aecP~PeBqjJrEXČUxcX$zT1$ʧbusZVQEQEQEQPO^;IG%x>⣑2[1Dt$pҪ'Rz.ʤfJUVi rnf'1MKhd )f'Kx,Yt DeS;7XBxM4E2j#Q\Uh[ 1˶*Ƞ>Lx81kۀ1AFY'NU`1:UlU1è!c`b"#6@FLqQE9H#1=9GWrzd⚖ى*TP[$v#S04 >73?PErg v)škh s*KKEQKEQER7"R7JM=)F0iU¯CŠ\FV+N޹ڜ#CqBǽHt~EQ>+HH])R;@qJ{>٥{o?얥x>\3A I'#ZBIoChzSDsʜtPlwr:T~r0ȥP%B#֞;ʀy*lf>u#EE5bRs榎5EڃNҟz v)sgړmp)6ҔqR*}U P )h)CH*@= JU@4V){birp) &/sH#c=َO'ߵ-?--RQEQKEQEQEQEƓZJ11#iA֚Pu(N)ih(Ĥ+U9feé#9,G>Vǽ2K.@S#im>"8VaRΥA:u>EQEQEQER qQHrؤg ϵ!`cLR*4 h`bx4/\~n:(`qP> }(p`Zy8ػANcd,:`}i#fe)I\jZu:((Z()2if84=&=Ӏ@-QKEQE4ujbPߌRKKKEQEQEQIEQETp~ <Tpd,6=2jJө: EP(#p敀a#ނ20zSL`YG!?1b(Bx'@)KEQKEQEQEQEQEQފ((T{cP(i{E%QEQERQE-RQEQGGEQKE(((((Z((J()h(Z((((((()h)h(Z((((((((()h()((((Z(((((J(()h(((((((((((((((((((( ?諢()(()h((J(J;EQEQEQEQKEQA'#I҃ZZ)(((33FE-QKEQEQEREQERQEQEQEQE-QEQE%(Nh):G^(IғޛH3Pxgi٠֓p!4K҃@EHH:KEQEQEQERdzњ)h(Z(3FEfFhQ(3C8? -QE!8E&*3RPNi 4Ps@P}>ޔ⒓'!'٤.I.IK@(ǭ>QEQEQAGGZZ(:uP3J((EZ֎=i֊;R␐:Qғnt9 >cz69I=)3)s94휚3I/H^ 8E# 4#nig8x sF=E&=E MR)h((((EQKEQEP@=0 KEQAhJQIv書u&J P(;A,}I$qL67.7HO= J;Ԩ3֞1Ҕ)ZLI e_FzdΪp4OJB봶;v0 3Te eڀ,QۊI}Ӷ؜~V NH''U!2~c/{ m̋,cIWrt+*96 $c ܒjOZnB¦=:PZ+6OJ .=)qy~%}Jg iAT8JqnjA-4ڮF®Wv+5q$$o qm\y`v:b)h()RE%RE%QEQIEQEQKEڹ&\<$=+^%WsY\#裭a\_\ܸRpnf' ,ĕ5gTc?ZiܡETէEDsS.5`+pj Je`v5N/Ȫkaw#Kquggf(q!%fAPmb=1TqKSo{TR9ʐ޾"7qRX8rTɕ?b&9SX>W#wzVp|䁍Y¯5]jwKEQEQEQEQEQHH#: }h,@.bi24"z`C6PFI76JnqzlcIoc8!cErdC'ڑ$^u8ۈ,|0!EV65[+Ȍ=jʠL=VNspfP6tCmM: 䞤k>(I $5J(2IֶR߼5i)wE>mmDݽ1"71[MVlN2;KN{yߌ㊰,(Rzxԑ#0Olӣ`٩/+ $t:Gm%"I;-N +ukqPz[%|Qc4.ZEU_֖ #aj)%ڢ%Ly!+}7+'cD(K;3!FlR=3K .N?4+})F$ $TncbQI֘Ꝑ:yR@8QOݨX vP~E%rF{Jb_%ڨ0,}(îOXIUH3!UR Yb'r0H0EkW[]-QEQEQERg3*YǩQIu֣i M2W\9vX2f>ib}Tfdl$U+QٙGQs!rB3TFĀj8<KvdpOnԸ2&ČW3IXj $ifx P)-{T&$b޵n oZշ2q<۷I8'. hEIsV džH[TyGpw?,(U&lBЎlbm;te5-P:&csЎ3J,PoM;>5wk=E1c99n_Ioa1Z{!0G` ϖHmL28˧7qҤ{EyGNxwX1V0D#C{S7@{w0=XJ0qSe$"sL\䝹j~t8V!2ÂNjXōԓJ%%[veXdڤeATZq6O$U8 qU|2']ɕ51Gs JQ9ݎ" *'6fy\`qҦxU*xr;㊊[!j/E{󐣁i\~b@zT"">y^ S:u x#Aڟ< 2+tIw)I%ǥ:n] W ӪԱOs(zuZ$o(;RM гwB^V| 4٢G95BNFQ6pN5H0{(8b)ԶݠgTShᇣ ~ LJH=m?E6{Lh ~VM*v69ҡ}>%v`i(,c"&#v#(@>ȂX>\qv^K;&(g;\յ(4b?pxz⻥&D@iYv#Πy%\+$wP4$+Bݢ($(#KQMhgb̠yy֪^]m䚪rlrMAqp둖_8Ww]sN*s/T%Pzk>Y<6jy}j2{up+tnZ輱*yb 8 Un dcUV^@9zPOj 1qgF OsC,9c5M*) Dۥ*)bc;J @T_S^8d1AN$)T_mHa_O$=T?18P|ۢjX#dF59Oֱq; \o| dW]SɂO 8MU}*1:&F(:N[ښA؞*%q@;xdzT(O~E8O!E8?=U\6s:qSAb\2=TmʤN*K=é-zpjW7r 3Uy$rڦČ:? srO󩍯 LOuȋ'=y?Z/ڮ5VSDcҪrA\J饹H-gn<ʃ"X푇ٯ2 g\G'J2#Ufyldd9 $2|')$opE2KR1 ucNF3n)C/K3u] dX"T*ntPME uB#w"';#JDq,ϷP9n*b-3a:zT<͖_kI t4'i7k2eݖ,q&]\pD5Rːb`$YdV5stح[j{mRU6mj>V ni4[s*M#ԉ<8ƘepH40wa5t\ͳ=ّÊ?C>;?NU99lv)o(wIND}|Ra'?th11y!AwE,E g saҪem= Pcj$p8;R)=jY!vBM5ˀRrHSu2g]ǒQ5:rSQӖh<vaZf=:9q 9tF[9sp+i$˟-r$ӛF2Cs6 3DmҦi0P8Z,i06s<6nT}2Ku ?UzAA<ŀdaV% %󚸆*˒sjBRsҫͽ#)Ռg NUo7)Iq#D(J䚞ght`ZW1.\Fi[]˱zK]>bȪ[t2&<)-[$q7V\*'~sz Uci@F1HqSf]169)$2cV 1PWq݌tOH a )ʑ#*q:֮u7Qd*88$TOrpIg$/͞`̲Djz><>ݺ-ʌx )7G;q?ңvT'Mv?1'ץ&te\eANIrZ$Gf:tPu-bD\-5D5x,@BzA5qy7y#Ak*{)gu~Ysm/q֬/g`[wS[.i*8)LUm ʤ@O+kJ`[%gӌ!_1W?Jw!yzԫI̐)/ZzO ;Aq֘,~M BrfT9W=lvSŢ 9z(۟ƥKQI;n lzS?&W!.BQ8R}uce 9S?!w'?x`9M$R.JrFFrN:71!hrI\VH{Xr~^5\QEQYd`6s\H2k Wm(OSO@+ H ##$u$7wzI&% vj'tޜBGԊKzR$Po5ie0TriZ2/?y[%>jƛIlqYG݉9 p i]tc$QToXlrH~> D򝨥j4`-4v $(h>2:U|Vi tj&mG { 0{}KRR2R4bt*SL1"Q-@pP.߆*je%ƬCH ?3Z[B"@QԚ1#pԕ%QEQEQEfEQKE+tld>VGwaU5cF+Gz~QDegC_}vFѪ:64I|㎦{8w@3{ӌ#|d}N0 -(\$ !WT h]"94Nd䞴#Fw&Z{w)9g`bH9" 61ҮǮg=9q][UOJ5MNQڃ^J*h[QrL1Sse1)(=;q ᔑ3Yw) GaEpByrXp2*7o)7kd\ؘ+-i̕iu5vLT+_AV9 ۚնmcn#зdGcSScV0 0{T(@G* œPSB( ={EQEQKGҏj((Z(((((O>kvfP R9z4kI%O-~SܟJUHGp>ScbBW$})!]Nr$r7 $O<Ѕx(S<) ְbk&{rrWf\]LH;y2 v= j e$I:nD<㨫k`­`ҟ2xR$[kVHS8dtǨIk<و0wNAX3 qRas;*TMw®Ǡ?7id>m®E PkR X-Q0#@1MH}HڹU?<'G/E%RE%REQEQEQEQIEQIEQIEQEQEQEE$ F6=r 0G *) Y0NvQP;O qϹgir誗 3qAH$& * agI NK%nsSwMI5ޭŧ rZ- Wh[CK*"@GqՔ4Ԙ?Jq`z 8)((((Z()((((Z(()((J(u6q֙,I*uϭ#qR` jSxb;F=b(((J(((Z(EQEQEQERQKEQEQEQIEQIEQE-QEQEQIEQEQEQEQIEQIEQEQKEQEQIEQERQE-QEQEQIEQEQEQKEQKEQKEQKEQE%REQIEQIގQEQEQEQE%REQEQEQKEQEQEQEQEQEQEQE%QEQEQEQE%QEQIEQEQEQKEQEQIEQEQEQEQERQE-RQEQG4QERE%REQIEQIEQIEQEQEQEQEQEQEQIEQE-QEQKEQE()h((ь(J(((((((((((((((Z((J()h(Z()(()h(((((J(((( ?諢(((()h(Z(Z((((((((()h)h();QJ)EQERQEQKEQKEQE%QEQE-RQEQEREQERQE-QEQE%RE%REQIEHZ)h((J()h(Z((J(()h()()()((((Z()()(((Z(Z((J(((Z()(()h(((()h(Z(Z((LMdzKKKEQEQERQE-QEQERE%REQEQEQEQEQEQEQE%REQIEQMfEq:[w?EeHSs{UioFpEPYT hQU%Wh*zJ6 *_Ue@Z}K֟ERQE-RQE-RQEQKEQE%QEQEQKEQEQEb:QLgQIpmS@S)\랔▂@c 2N&Gb?:M4?x{sJxP J26xWwv3YwDYc@77o䑲zaoAqZdU]rd~UycvH|BsW;K`})'~ƖA8w= }k$d4 ƛ'o<j7Hx4!+JhaʑM)Rl)zӞWbUە`Bϵ_(TnU?tT$PGLsZ *nJD-)Ja ӆ EQEQIEQEQKEQEREQXqo9'̍Oֹc$IӥCe5$e 9le{'TԖ2W'M<%2zoJſwBT8SZXlWrJ"Xܜڥ/\|}WT#)•SJ+8NGZPM5Ow^ wn=0j?$9'cR*y* R3R9ǭ2P L-#yԁI.ݥ`|)%#i_REQ:dXRW sw!ޯ*0*@Vw(Tq"v5"?"Q5"7 :S:G22ҬHM*I=;T$RF zVuΙ%̊pkqU7 $[znFK&}0@8;0跱a fKh !f߃SC^Ս>-&03RG]GzM@m1RS*fLcGpaNT"\1P3;}*7QA&2CW,F ĦǥY B@^ǥYUIV[KF?(!zyu,0zSjآJ(KEQE%RA(J({Q;[`.X\ݸo$i@1u-S&|>ZE4 SYi%s֩\y=jHkwrI SI!89m)t $@oUdx.=09ySkĚUTW/\rQ\eTi)>)V-zT#+DawR՝EzN ywwd\㌞Z{$bc߫T0I9!!OQCm,;R@<ⷂ" prz[ 'bbG'G1Ia㢎 G1_'##ٰc ±/$1ơ$d˖CQB6Y?uFz&X89H}8\ʓ;56<*BQ10'Şh|JګA]Bٕ^9 7߼ĩVD #ߵm2\B$[i"ȁҖN/ngl u,I,MCTڳ .~`4߶޹`#?8ʂ3Ozʉ0%œ֖EPwAGZRN=iRQ|JY`O:,lŶG&@p!UYXĀ51ҝd(osOqwmIEMr1*=jӢ3s:UͲXxc<P T=6ܫ/jTqbF [GANcׯ4Ejb$Rp: T|t !P8bH@*-2CP<}/#Q}<,L|*gxLUK9Sqs#J&%L=9,_~}D;2>h,71>٥M1eW6GrIM@$AAӚ,ʁOlp=Gb Vg'R—TV?1U'QsgUqY8owSp]Bdulf7&BMYL*܌:O v8Qߍl⤎Df*}3NIxcYabǶidT!$Q%슘ߓUf8YZ%ǘ}3T{8&rW89HT<`>,2M#! @ራo#c*!ɐKo4Q4$9+Z]սKJUa'U;R3G`_A8֜.#$ yO[Y B30o%^OְeϗwCf%03LKh!*2sQmP{E 1l;,pyT"_eHjqo!TGLT#qLuV$Q<4o+{""PUAښX,L2nWLmnU۹z"iU *]좫\[c}3PIUdmʾ UW%k.dfg [#.]Q%,y?ϚObpjd c\һ iAy,{Ư(<b3Eg`xXAwGуY_(LѼgQ2SerP)[2(>g8CQ˒:1~\Q 81>A8nNv Xl$BZϻʋx>΅ʟp(nT([O#G&9/nYPE䣄c{*żLzT98bysV]|dFVeHЕIr#yG^b#zPg̑JXvPqrGaF|5Bgt5$ VR椵,nMkiqm*Z1nkemy.ߌ֐بdPOb r\G>apgR-;T%lve<]@Z{_OjKn6;FyR(=)La3 ~%\]ǎ: OY%1XaJǹ<aTxhE$`)lN`1=\c֬}nj3enj)4]e)=i_ҘK0N1Ԟ*&`bq SK\3RiNnFzfK\dhm2%1e UF.5 6ˎ ܠ0 XD 碓1Ia]ӽVQ)s#&2ÚolĀvɧ}l_k?1#Ix'XЩgbA*4V )#^c89}BpgpHaF[W0&U E_z[XQ3wrml:#Hϸ:B,p'@8+HH ڋՍ$;Gʣ¨$뚬qɪIF̓ƙxCAlt,21PB3tBiKK859m.f*.X=Z:!Its`e!9>s`*@´x8?J}GvŶ7sU{8X3PɧBYN:hv)a=&!dʑޛ%#2MUox=MGqbvH\L(9=+6[pyɪONrsѷ9Ƙyc#֙錊r.?t3V/1 &X'4i_֕U\)Ƌ ǢKr.ҫH|,{ yEOp$yh}>8Hfð<8zI#eA$p)8 2Hǐ(\8WSNDbҭ[O1Ty5k%Qvc prȨͼ>\Y.`\M!$,Wz堶0Ǵ6*˿ XrJ[ ȒR-4:*0pi^a8 1OypkNi6-hZټu@_η 8#q֜qJ@4Ƥ?AI((MdHT Qtov΄}ޠIPJK2?:Şx@dƲ巖3ѱH8D ;LE1J<=F9Nwpr*Fܬ mVZFnpLV TʣԫsWۅY5d*y4qm;nMg\õ&Vw4ppc )vǸSR@ž-Tze+zh$|ނ~vj͆ S0'jŞ2gm/UӦk`mq1jA@9RIEQE-QEQKEg(EW1Gji"ʰwUG$}Y0BcՍ|;vmWEIukq³72=JN]9*c7 |֔bX3f/"i6֔Iƨ\:RT(()h(((()((((Z((()h(Z()Z(()h((((Z()((J()h)h((J((Z((((((J(((Z()()(((()()()(()h((((Z(Z(((()((((((((J((((()h)h(Z()()((()h)h(((()((J(((()((()h((J(()h4E-QEQEQEQEQKEQE%REQIރE-RQE-QEQKEQEQEQEQEREQEQEQEREQERQE-QEQE%QEQE-QEQEQEQEQEQKEQKEQEQERQE-RQE-RQE-QEQKEQE%RE%REQIEQEQEQE%RE%RE%QEQIEQEQERE%REQEQEQEQIEQIEQEQEQEQERQEQEQEQEQEQEQERQEQKEQKEQE%REQERQE-RQE-RQE-QEQEQEQEQE%RE%RE%REQERQE-QEQKEQEQERQE-RQE-RQE-QEQEQEQEQEQERQEQKEQE%QEhKEQE%QEQEQEQF=QIEQE-RQE-RQEQKEQEQIEQEQEQEQERQEQA3֊()((+ ?뢮()((((Z((J((Z(((b3tfq(%nj{rҹ?ʡuZFT0ܽ(6t'ڴ`Є>?W(GMԫ HoM`UK>M2`cFAdSe5# 4)w8$mGQD*T0_Ң(J((((((Z(Z(Z(*88氼C>olz͙cgLc NmSLЇb.rOsֆ&DۜK!2&ޡ9 `whA61B Sъc^n ٌu(gcop ySK*C$+$l˻ӽ$rD2Xr3֩NvglQiR֙1 X޵kc Prz݊8 kCn(E.]NbN:b9ݪP2O@`j6a A#jmín~1Ҥ`"P[DKU,ky| Ӝ%b}N qZ6WuX }2EUsɆ Msc}@OoAPER8|+Bm !]vXض-SST%fjhc7P|uYz{L8 0ުEqnR@3(bnGMԞ0}n9ʺJ.y ~_*߭Z()h(()(q҂q4RQEQERE%;RpS'-idU6Y¯Y (鑚o)/|09|m(W#UQ|T*‚8ڔh8 j{h|xڅw2p?٢5iRz]m=EN%vӭXke`7gG2"{9 SaP\c3A.6w;56!7 >yE[=H&j`򭃑>rUA2d,cJ0ʩj-6?Ji-b0$r+>yҤ]Ė#׾*qsT$"((((((Z()(((_CPr8EǍsM?G.I<8E=Y;ѡ88=jp8f(Hl4&YKq3Wq[ hGs ۂx8J:GxvJY^8v >~ W dftzyRSTk`_Qp4FKJ,ڢ-YGK@ TRdjtH7Q[ ָa@`[v(J1#QeR3'|osT57$y#MWFϷ@0HP,^cpJ :PsOeePPsR  ZU%RGIEQE-RQE-RQE-RQEQEQEQ@@Jk6cz+%,{뙺9H4O(Tr?iʿ[O,)#ҴO=~eem\+&<j;vUozIpyp^?tnqzn3ZUig0X{qI|#hR>&AmQԞ֨u } wQp1~ikO8 "lppW&NVkVQAEk:\RH+U}mpVfYTF8HTSr[*|ږ8+)eJX! FDqw5]]oE%QEQEQKEQEQEQEQEREQGNqAsG5yM\]:n$<Z%t򟛃T0#U\I3*=?Ze,81U5vY)gV$DGR0Z%' =}? ΎsU$)jd;IBQOsn߿~He@3JF;Yp0\TnmWXT;pz 9yw( ;b2Nqa[lF囖J|Hz]-^Uhz5fQExhk"{{@Q3W7,ӏX֧U( r[fL]m sHajY@U5)s5~nh)!q…!}괧~ j;ҩHrI?vO*ϏýUz+8+8ժ(7]Qq]wb(O&y!#늊O"y{>m&YҐI!r oROJ V|3y5@f n3CrH&J|ʑeJ7M HbpҾ_$tLD $Z<(ё#.OoW_]QIEQEQERE%RE%REQIҐO҃j9 ߽Uic'j5ZBp39֫]H(éO$p"aq"#CQ$@wW\C\N"1A*73'lԫ<[a;WzTLV:+K:Z>K8Xu9VSNτ^v#U;W"6cQ{Ӓ8BQ~TOZI/ zcLidVXc'(iNd0 sT$" mU,s^q4ٶM&>|vlTzUxŜƟmҾ@x%.b2Un#6;bK;/KD>[eSMEPͲN~|L]TL隂fc5V5UV cX( Q?Y$b4D͑uc!J){995^"PAQVCߠk+(E@Fh]٣| ?zV W n٫i1C}ҥGWB` 4uQKEQEQEQIEQKEQE!deWR2`jB)d*1;yҩ. 9jx=9U1"3|UqcU*U=;=;j:SX4Уt4dw˂R03TBn yj%V4'eL6;]Gsg*VQ;UlUCQ⣉ Lcz:|RQ{Yy)l?ys{V1bld辵=\iֶR]N)E\cW! Ӗnk[afvVݝv,{ԕnQE%Wp}\*F#nprT E9e?0,b3V,ȮJ72c$te@IhwUAݾaҢoPoy!1ilA ]ETXԌˏº812Hܸ8cBZpc~d`">p*~5!#\"m-ps+Z(B J*ȩE-RQE-RQE-QEQE%REQEQEQEQE!PQ\H[ʨS'qLk&}{\}6V5EG珔HDN>P:8BFpWtSU^v=K%b@qi)))(Ƞc: d_Ձ{<xs'ςǞh圮8 ~jpUYƒXāJ|{To|䞆G ڀ#V].ބ4Wi\` wM @pȬ\qk2(f7sTeb=Vmf3Yq[zu wXb,86{f8y(((()()(6NA҂qA8>QEREQU%ھZ}ekw}>f',GAY!OUXa*YtH #DJj:̐Gc) SLY%ڠ&z՘mD8b[A(LCyy!c#4%m )WQ8=qNU`y)c*&jHt^6zTjf 1 >=Cld!0VR89ZQ\E/n٫*Iʷj+"I-c`ؤesN=Le#rm>Ȳ5eFwB>pqMK8 S;GWӭHXZu-QEQEQEQEQEQE6I$.ˉ㷉eHc29ֳش|u!UcߵbB0$gX̯>ڒCH'f%cA*H4۸n}ih.!so^)Z ?htf25@`=oD`kFj%QIIMf'욎~mp*l'Ҩd1svhހ~_2 ƣTW;v=z{Yn Rw:m8_SI誱!5-yע dԶj&(ZpESZM ٛ ZW QI0<{xXFqgjrTu[ l@xU}gyܔTĬ/ZQ6_?3EZч>Sޥl[#n3ڴK6JH (c v“^5{rQ-8Þ!>i?xQAb]p<M x֛n|IқavStiqOnF~{Nb4Cw{ףYQ O׫vN0:(q+cNMajKh߶1ST%%QIECt82: YN}#Em{I/M8 eg ڲF3I,d3*y9fm#ZXHcqԖC7JGEj=;qW4 >Iy"u)+eGC/7QNo2 G$v; b,;' "RV& 6u?jL>7L2DRHR_4J QQQ1SNc4 6qڥ ,:jjUNW{Ӑ)(j)F\ku9i~(:r)"+)jD+t# SkB1ӍHw"'( ȁv4Q֙'FM1v DWko?ZlRy Q1ƒ)ZHU3K7Qu<{SE@!k'<{FQAD e85K~nF2=jgv~L~4= q@ {AtRdzRǽ:)d=sާhdRjh&hT4]NlU#[J qo)c'<*y2Oq8VSw:oq';{=mr@䚒ڀ0Oj [ ;wo BLxA"5fܑ3V^y`1"08Q\DDk{ӣ+(iJj["*.*74C3ʲl} CxZ>Fv<\yl-@2s\OLS=dc-׭Y8G.7ũŗ*?yiamۓ֭5H,@lq9`ۅ$b+iaf剪iisl^YA%RGHphc$TUtWϏp$Aҩs9*9T"tAGM"#+0c\TTsF*۔r2eWZ'@9|2yUz{щ<;"ʑ&qESk>aӢ$ >95^)bw71Ej,클n2 m]۽jA(yGIgQ$H#VeĒ;0=*Y]2 ܃Risti|Υَ)I*/PN P PXƩF7VoDIҶ/mbL{wk72er2 횴j2E=I.w#XݾB:SĐSqϩ5hQ911$s4,K'etSD/#T,ކh͜(?(m/H0:N: ^b v7 Vd8HHʎUp`nVhvL!~Tð–{ e~l*S;mZ!5Mc8ojF$eL}C<,ΡUBx?ZBd wVFF mJJJ(* H ۹n#)]Fz+p#} ǻu#c=E4y̎ fh~aGq*ni {|CrpdijIЍĞ?FfW\ V$UE.CnR1ٚHO:F(E'59FAV,וֹ8&raUBљDX"nc9>O)Νu8DHmKp.EddyrJܓ}r'޳$nBId@G;dցݯ!=kB-:jhIjeo *+0`S뺦7)v`MN-@2];Xtˈe95+Cw`N=XPw);D\!OlR%2Z$-<,RE݀ d[]ȣ.'DF@›I[iI9,zH!H#$51IET<ڳ% $Dw>-5sJ:SmqhV]5gkXXjc}Fk)U@f'=ZNyֺ;J(.g:6qUu!@U)(=7bnpcY7*>U'D >R9G>99'W9`2#&xF);v%vӊM$$bJ)V9#=V9šLd s]u5EQEQEQEQEQEQKFM.i((>R/XUtW;ҐޕdBVe.2HRFZD9}:QE5dBVMsDF?2hx91JM)̍Z6;}~V-*v 5N79pP}9FSu},\+.Cqw$R6v\X\ժ_·-¬Oާ JA֫ݟܢɪzڭTekO5*N)"-)$e\\#H'8 63L8WÜMOmuRAe%qVu)`xuw9+e92G򥥥a>ƒПNj-j|Θ{(ZGDh´ΐ(Rz2?QxT+ԷU-dzj,6ޕZ?ޅ< V\@2R[S=!x9j_y36Ӹ6Yk0nEXicm~jpGjNC -) 9WqUBR?ß² äf8c|=gSɶ^jJȻ_KdVvсWGdS"'BN 7/ 2*cxBG5xex#f=j} 隭)b<c$EH8ɫF[VAT8rjݣItbQ}2h؎з%[vpt rPcgLPb()(QE-RQE-QEQKEQKEQEQEQEQMqG֣LT^W dfe<BuȬ;ˍY 9Z˺rNCވG 6WLa ,~]yݼ0 };Io8##quIm\XQɥh7ˆ3(Kwִ:uP4{ +W㳂8aK+rA9Gq$'{{vynŎqN(NcN}I;qǞG4V*L ޒxdR~lsV룭Z()(((Z((((((((Ev6șW9GQsde|zt?MhE :T&c4q85.%y` )PQXn~n*FA phCztI(f4˛Anf`RI=,tXTnZN Ֆ5ʲn/5ǡ=W<1,܂zҬѪȧ! xi٪Kw#tV,CgUPIV" KjX2FH$Vɨ,g`8'ZϚlBxYpTG&}{2`x[-nOJӮ()(()h(Z()((J()h(y]$# ~otB0w GҡTfeV {A2pXV$pOc֧>SI.MM1$yM>I-YK9!W677jY cF?SQ]¶x:ԖȏiTd:rOJonGLƳ'o>SOk3 Fߗ+Ͳ!>_VfKWE+t ('l)H Iֹ738[-Z*%KaP-V hCHY#EE@^(vg*) :pT$Y c>m`dm*FqVNW+ZJ(J(J()h(()(((Z((+MezV~9ֹC.޲H1J1۠ ^W8#ެO8{ԲA;+D2z/qU)VQ]#ҫ P9Y~{2EEGbUVZyzA٭;zukuhޤU(Ys%mHC\-K6Xޱn`qShʘG5'ؼAAR;69L9 2sҠ%} g!c)#YX,I!Y9rxj)1J֫IvF$}R袊()h(Z(((J(J((Z()(*c{)Wbq(WҸ;泯#}NH$1\KfnP- {i9r=)IV?-g6Xr3ޛ`#3!LK}t5)LK.}ri +@޴3G4 gN6{BN¸-I٫/ɭɊ4,6gfw 6u)V61zКE10++gq⥴`򑝜DjޒGEr.{ɫsPXE{3*$g*Pd*y 4 x=j((Z(Z(Z(QEQEQE%QEQEQEQANI `k/PI0BQ=m%QeC_$ < T~v 7tUUE3، xK,r9Ԯr.m|T I ㎽Ᵹj磂+q:~n^9 p<{ӆްMt$;eu@1Ӻ 1[m<+c*k&c*[YT5AFNGS2Jn fMxd:*jҫtQERQE-RQEQEQEc4`sE-QEQERE%QEQE-RQE)HI 8p3J$ U8ߐA>YU/U#?{铚 v9_@')v;Y7ݗ~ޣZwh;Sޫjh(ۇP{Ҡi|ȗ>`=Csmc }ݩf弧3sH{(bXE.ܓ^~vŃ+JӞ/n7-ڗVpNN>lRjL$1E(1ý:hA &T.X|j|@\RK=5%+8T lcKn}6B˂jŕmnj[->A7F _ANA@F5jR I OҪ`6L,(CfnWb>\Q6yG'n'd+.zVf;YvV^.B6r3-k!?F*k MS5,:  x~,Y@5"8fzTöT8:dFijPW8Ƞa^)H{р<6eQU&U%}ET9pFG2 I\ƞ_~VwZ &N:~Q/NsTd>SfH)3$ /yğ4=I?ZC&+ т*E8S,>\jK)*sӎq DT称r5U `SZcȿ ;F&I08l³cUŽ=EG)%T 5ȈBޣpB.PPIF*o~ ;K@y1>z |砨nd'r{Q)V9QȲ#nxU&%~#H`˖^^;{iO <6ZK(8qҡ+yw{UУ qִ<*>|)cwR _V!\y5Fʈ` q=}<0? 8 *hZwF-;@;oK+1ǯUR|*Nr· @c΁sƵk:~]Ƶ 8aGwbU|$8FzS.X*#2d+(r8 ;oD(v "k[u"V;AZǖe|sBsg:LgKe8ZwhV|ukB/An|{ӢD(`ic | 4ycsQߔdup+ԊK0ML7`Võ@bdhwDIq֘.y}EZU==*tpELrA=SQГL)Q\YOqIo3(x )\0(F,+r#n@+Z%3QiGY|ӀݩF C[c=*h[vc_;OJ3C͒fvj2Q)$QfG b#NeHAϥ+K\p)󻵫\pDxQNv?;/IsG nT,1|LD1C׽Zg|Ȋ㚳cr!E'6s$od:[ 1Vu-:ΥNӎ3711׬+gHՔ4P5)%\沠dS+Ҍ,vgE£3Wmjdr$\ffs$T:D=ꞙ\%LUF89m2eYڠ즎ej20U,YP+?h;9+?^aKXPk)iD;A-j{(Ed*}2F1 $ gFA($-=fL d!Fc!(j8n=m$h8?(4ʐ6%KYJgTqBcCF{FRxɜ1j   m<.{dYo&[&M͞j͚y5f=MYD,~^{zԭӞ#p) MMzp6s* V Ccrzԟ;TLr*8؝hӑ m!Sl " HæjW@⑐03.sUeqyT (zi #c&Oj2IvOL(`y9vaB\ARC4dY8 IOnb;V1ԚY4s9&4m$i$FG TbB梔fM#=i#"Xcf!,mBrFB"H67sUdM}k=ݤNTUظBثֳ-»* FzVm{ERc?Zn (!sS S9tV.G뻥YSLԒNʹinAv1ʮG։O8C+6p 2_  lGzU&܋tf%OL,&q2i%$op;51kpV[jq1֨i'GJDZhգ]06*!w /85ҢF;R7J*(H1JzVm^ICrβcɻ֨قanGZf YA))+j ^F*1&| Xdrp֋U.[}j|RKXI% j00M5! '4ԇ{ Nj`J0N08zG!SЩeESt[R@WF̲?Jʸ"x4G2 B RFEɱdԉ \#OGXU‘l|77xy&x˜]|OFTaiB1֌zZb8׊(;1SX:TBGzj^vn9x% $hQ~{Hݕö>)@d$I,**DR}Tjj#jc_YL?8a,:1/8CSF_ټXFiдnbIaR@ϒ_=)m"h킑!Q"+c0fDvϦkUfϦjDgWUTo?7ȫ1%R_T+u89䌐 砪jB * 9*{Evo5ĤM-e[V\dv5_U[; e>[u :&vnqNCyf9 ݪdOZ,f|»8%Njݬ"m%8z=yon ooBƫd(q3{8p[JF/#{RG g99$NvK+!8dBxڲb@Ic=VIG>n 9 _,>8*(7QPksC#U,q!c9S.I9Oҟ4pnhivX=/ =KDri & -zRi/8-Ϧ)4qsOZ%_9Zr 8ː5p\!njhf:J1کڴ8׶$aKap&ZnVHKnN49jKCpԞ`W65{/ D]Q7"F4$KӀݩ`͉ZZl\o 7),-0‰3qIg qFoT ]y<pKʿ3pp~\{"b9'^ 4 {VCg~Iޕ;KXU+n?)h%Ro~&}#Uݥ?Cnn՝~*ˆRVYsUaO2MUS# .HknTT2Z2%@_0zuZW,1ۭW䔓^&y2A|f`sEmCl)}qKs`f1#8?y$⨏01VuT/ZoZNr?JPGz h92sIqm yO>÷=qޜךVӓOdRsڣsϱ <ΛM&@ HB@H@'f$|f,O'Y7']R~Z$U?g<桰ݍP[`Z{Ɂ<uo\(sq\LQ)Tv k;!7q*v:xrTcSp'`9#֧Dtq8yXj= 9m啟`$QVl'I<ēVSH=ip;B$T(S'%})~ 7EKnRHN^26H 4d'$qM1! POj[CyX"ܨeMFA&S\5OP:)i՝KPW- ,%,z-Egs $f^@뚆h|8V!9@˃(ݞF(xHY=F(xHmpQWަA0LZ,,JW`{չ#yb\7Z&t?0vQEW p[@棆 |sV[gjdFec,8򃏭cVԷ,ڿ.zQtDQiD[PqTtHݱ'{j-25{N**01cz81*)$碊ؕN{ ֑cBIȀDSn=sU&=sUoDb,z ;ҫ8R);a\Rweuދ‚r;T `֦@eVbAgcq;h-tbr=PJFQҙJn-ї2/ !S ˧E.H&hd櫻a$*Wjs۫*/CD 8#աEN!?6B ~b*cYLrO9BW;KxRsM:i`@[02 ġG"唌i̮;.8",@Q߿?T9b6N3,q݌ujk*s׵Ec;^N7AqTѪьMBpr54aJL UNUP8U=R2AU MEUQg/N{t3JPNOJc/sҪi*$HU'cjIzKX4+ gnz g5mҢ-#P; ?" 6"]j R%1U!Yf,z2,?W3R8`E^;n CtbqVU F2C}'aPa=9 hpx>Rd02qЊ*Ln8<jQ^3 &LNd dFIF-ޣKCە~Tl*(m)o?_w.@==V}y>e|CHpMh 5`ۺP̪F)PvU#B)tB)H S5|j6TAle[K@RsQئFa~=UNcx ޮYpX.9Z$08:Ӱ7);i9Nɦ0PD , _Ki*[tlڜJU/S $9GW蠜,9Y NU~|LaT3ժx§O-HcEjZvjүŲ"n(&oQAzv];E]XY 1V`vb'ӵ$7aڮa*႞洅m{|*ʤdWUgr5SQU@qU B^6  `UK1kHH18*żea?v…b۰h!%sޔ,QI ﷵ,Q6N楎hD i@T7? 3ޜy\{б0_M"IF ilb4֢- lg'ޣ%Q0ïBE2B"wjDHF(ZE;ަHABPǷk Q]:{XA )c1$q֖4x"#Gnf@ׂP椹llppFwsOrp i l?T⺏ 9UaC.@ եrQHH6\bxjR&,3]X,Y =$y < 3?nG+iHJ{'_ƣ<"aT9B>ojX>R9ExQʷVe#b[a#)끊{ 0fR|*v2)t42ʨhHֶb\ӵk@dl ڵ#A"<ـnXorzbn$YyVφ q"HWR,ʍ [ҧEH輁S[КG eWִ.e("f@j˕2D6dQVd)v6S=M rqӊϲs%H'Tt%ga:֞\uۙFAjQsY%rѿJΜk:lğ⥴}&19M44pkdrxLFNONI\'3M0'ZBrH'L#֚ a3r@ 9'֢KyIRzRZK%"T$ C>fPY ی*i7oF28NqߊoPm›jtl>Q9R^Lec7Ӯ2Ʃ|޵,%X IYj䴛T=l2niZM q[s#ӊcXwַjܚЉ )c'xGoot0p :jE"1U sQ̗Ȇ(^1;Oob7fgq1orYck#P@D<ےj\sʪ (TKhYQҺn.F6u,L k adoCR&Tc)(2 9_ž )rbxmv3ɽ\=iS#gn?.G9p-$vqvq)w"tl$8STz|y%QH͐ Sle( ÂZKENYz>RJO~j Qާ @8W֖#;yo ;֫^["3Ƒs׭RL 'AU# L: Ӌ:ԐsV}>[5`nWk:PIZPs. 21VO$=Mh>=cF;UXs9*їTgTF :UpRwt5~Y45r/Y27AVN@Tr-#kHt vxAA=K¶!Wrk& YQ͓fFq$b ?o8vJ0v+>+ւN(,F0)R99$3#mϩJT&F\ƭN@1N+TÓ4%r }jOs(!Ϲ4i;e0H:tVHZ@YyyIE"E=)cYa} /8xT(t{t `ܩQO4*=ODLT)5c}RUcM~$PENcY\4M%3.9.B~jܸ"R瑚ֽP\CZw-@/fɹԂUII*s$x`0;UXXx"8 t1lg4u"צ*=1\\+(bUYZ]2KȪALk nn@c:Tm`݂烊YɸRqF.#R?vlxuUt,5EmxH,m8cڼ$k5yq U4}N<8Rn܊]ɞjmFSޫ$Wo+U$[;ھ-Xa}PO|z20}iDDrhx'8q4;HB@@6qP;+(LmFHy<{VF}\H1fc}֕RĨ6;)bKҨ?gKo ܟZG6IP*1B,㞕B4i,'R3UUK /)(P+'iSP xk崅-]ϻyR3[[x!y\vqPƛ sm!sD6K`b;pw|G +F_1=*(. 14T]ِy4"C3BĎhG8s=+=\!;d@rGnhD'k*yex O> $e'5ou4:onz]zKk`gkՄQu~Ӵ!V_hi& ɦbʁR̒7*ieG<ڤ-o,^٧ܳE Q܌⠖IKERka8ګO<\3A O؟CS#n$Tǚsx}95,ql[81P=ɴȈ ?:n͜[`1Dn%ÎVnQȌ$GqUfYP9 T6(ުw 3*2 8b0xH#),##Sژd'-sH+],۳\קHT:b3Wc˽1Vuɓ1KcԶ[MpU3T?bQLjXdgR~8AZA86]HF.8p=6m %ǐG~a4ۙ$ `jYuaRXg⥌4B<V ^h`aW¶Z6l/-C]`Sy<ȉA&uaʌTmHbPHx5Bdp.HE[$y qރ0V'mē$VוF)8Aږ.%BGj֒-$Gjj5M  *YKciP3id7?3RvcK#$\1ABA:fPwL \t#*r?w9T.tSd2>V<Ic4sٗ‹;meFY:2x-ɼ呸oz}5ٚڏ&5xg=͔rݖF}i%hQ·-3Oǧxdzǧ7?LkK,c?)jvwbX'ǭS9+R[Tw#=#;5yA9RZ$U $q*,;{ T8=)DzbAZ!(_Ǯ)#.sK朒#_8I<|3cj弳.*3uRc'sP\ј,gޑthqgpWr"8 HueʠM>O$r t99⛘wd#)^Cۆ-iVLFn[Ӷ(8{k7e* 1^K]^3* wzSh#*8"y1fJvڿ**T*}iČ^Z@0+k8cԒʽGֹMDDAWu(IFUe]fۥJ!B.=辉RrpEYbaC P Cdq dZ$V*Cïjy"B1 k<rFGJtm*Un*Rԯ<]ؘj۲yMz{}WpT6o3[*sY9VUIaExF=ǭHT#&˜:cqxi\gf 28cPE3>EljY[Δ)u8[#gMt3V$mNֶW! U{"V7(a<$[SK*=1[7KvM/Qf[ @T-D\tg9o@ g$Zt@d֣I DPzɦ%J i$|TE|矾dT;d98WaȨ`a'hdw<㰬KAfsv7Jr}kKv!^0IV2C9'bU4dH*d*sRhC'ltи9 B+@ x(kFWؤGm$к5#kC$lW3jX?arX֞{`Tr-lk٤9Q-Zt^vc.u$k}V'6Txk^",kqEh]FS*ҩۣ7+$>`d`t'csj)7 vnHb*"pɼeQG |Ef]'E@]Z9WrۛO,Grv*M>m ?7kJd"s?Wa"jUۘڎyhޮy3I&+c$f~>|1) $+#z5v ݈;~A$.ne͚Ic9sN>Z4S)Yu{K;y6s:&$o^igH!ˍõs;ʓ۽cJ.&w['k*GgMu,B {WaoE-GQɮ I:kl7+UFF<ޱ5J+k{pw= Xl8ʡz4k"!L~jVET:+*N3W78c}*@${S4e1eC6KEϚfRD$ɀgH'<^DJwD#z#C$Qrq[aFz5R-_JȜxp*k&P~k2@MgnΤ3bmFA`3ڧs rj;%rTҠe?hXَJL) w]BInr{k`dv}nJiDFͦm2n e$&*x9@<+^$-2]pDNLmBā=jA0U c9 P8HK(c9֠,7~=ɨفlz[.VҺ+Kw2ֵp݁5*pH`s6N"D͂?ñ!5)+ZU޻*ݫχrc#mNdg(yR6K{lOxфmtjW["R@aX-Qht< M@-ݶm$Umt慿rX>[L1(Hf=Mt$sjzA~*[F@PUb3!F?Yf$8jy+}Vm3(Ɍuwk nW-Wrb1 Z"U3w`Oo^:iБċЃJ- })I!sޠ31m㌷zg ׽Kczf_U7!b^g vXWZVrn b\%e0+N Vkrqm+^+21UbF;oD$m1YdnEHf>\M"Dk6lCL6:fN'PnV<*K#57ѱb8`ɜ57Q9Ѝ}kʶJT-&njl20{y+bm'8!-=*݅K)2y$U[;!`wҤI7r,JvZM%Lsõcj1M-M!e/Cvmt͏sR[ۺձ_jH!xIngirnN&r8}^^1TZrc IpTͿ;@V-کP'YJRY[;)7hSD22O4uI߻(sñKg*4r zӬn9jjy$e0Wjcb)(,S#[V@Z pj[YW?)-yo3Qe;+{դ;$隀@9oCPX"|p%%j F~tۭCh*pcX] ܟ $d9Y6W%~tg#$8 t=[yaqbm4*HDHjk- tvSRK- ׇcNK{hܰ ?'i 1$dʸ$Ŷ[ƩMfdmO5:0 ҵl:N; Ov;Ub0UbV9-kLkn;^ S8ݎk^|"-RپWZ|RKr#n l*rO"FTZK4BTI]@Q:ՙcXZGAsQO90.r*e&{TMhfn{UQ9|ヷ֫6%v5[QXH$8qYOqR|w3U6f߹jV?<*,[ Rj)CAR{TKV GZ[cu\YAIll w`.Yr\b(SɄy3޻Ku[o޿@]TamaČ3ޚB!9$7q rPʑܧeqٺT<~aN:6HKqc GaO%O^[*W*ޕEpWi VVpTAT 퓊TD~W',SF'o9#JhdVW ')Th9ﱩm1"3k7[LF\8#0`*o#] ݌Ժ|q`wO1c֟h03cMfy 7R}jɽnԎZ!2ee +ީ1FdܲtK{Q b[kcn7$܉-`qKŭ99V<(Ԡ9ʜwi.ڌ9<0k7eހG$rPۏrk?_uLpPm"ϧĚ*Tj>!@5Z]-| ZŒQerg d59)6``U2`խMAnRi 99=jmI丗՛0&85bHiÀxɩ촮B+Q-G kV;HUrF21֔VnĩҚ+(ܚ7kD9Q&2@JX/<@=MJ[[-*ra_ix# (s[Vptw?_JմH"pϥl[FD#p;YYŽ4ZIDfW{rqU@j 99WY7g+maH|nEIlx~}zU) Q@8EWUIq¯ *.S5F ͲCԆ_:K5#\Z:6zOypDapkIpa4Y"/Ư$YvMdDZSr[Wg)\N %܍oxrOqK;JB*ұczɺy0ER"\];6UVt,~$zU;-GK{NXu(2UC15f%uMsjh{$D4ņxܩ|8 zSE[T) CdO%"(=) {qV~p2I<=6A!%FI'[m:(K9k Y$¾?=?UA5=*M$g%j͍ W;j͔ҴyrV [@7.]T{ LcFbǒ}Ν3eo$rU,ÝeftfF*ퟖI8bوd瞠"IK׵2ܷJQGn[ ex8 K{M E žHNxQdB#Z+&Cj+RVꫦ ,MAd[sv{Ӄr~`zS3FrKc {U7A 1 Gsܤq3cRfyI9~ug ,Fٳ~nEWE &`ȩ;%1*ė$`™BVXh"L}׭OR4vUH6 ([97pKupUUyź?Ʈa@@ שk;YwռִbvnoZ ew$pihT)8sޥ.<}|}@879⠺T0cŻ {C>\,  y!Gv88H!'qc)n{l`WzTHʿ6WzlrT YU^L(,^Cs#Ɂ{jUd1#;*Ҹ(HUQfQ]dG"wr*Kc X % Y5%ܲψsk+enlMmn`#b25Ilֶ"'1Z& gTr&ܭ؊LBw؊V ̿?ӊ$!9(C㌎)dœǥD%8H@#'W GjjK(l#z&rď3Gd;FYYhRA=qTW!BHY ]$AajhXDXǖj;+֢Df>b>R[SՒǦC78#56Irka=c̅jՖ$/*yv̸HxQaqilQIal(8ߝK7 `r).%.p yjQ7Rj:Eypn$tȣgu8PyNU*x4@1pў3zcudՑw4$n#PFl{ ӱ]6f3=󫮗qs 3=Nj&AN;QiHyإIQF؅'7NC%ɭ+΍$ldݵʫ չ,԰ap ]ӡ 1*Ķ+,Ix٤ʨp7`Q*+C3 ne1Ph&P2GNƢ%(()5CZK(Uh=Qգ{3ֱbpǹc;q>42@iD-m:1)<3|lf-= ј]-QY+2yDV=[:dԱYcOVbyt'P[=m9}i򞼊EqPlٌR!{WTa7!NX}jC{X}j00P-M(X“jZsLUm<+Fx%xќ*ƛttq_v}:|Ac ֣W,J5TSreHUJp{sNOJ$I9>,J>Cמ)b҇]dzU)ye)ǥYW2J8 :n,ۻ2KXc,ijv`y MO'٬cM1QՔs> Ftu sT4UЏJαx&\V}E:cgWLrldG89VěA"LQ.C(Ͽzi'Hvڧjn Mmć`} ⥂&وdoMGud˹̽ȦOhFW) ~r0 zTV$f7rY7g Β@bq[q!WV]ĦT1XS}vڪ$w}n€i(;nB^>wSZ12)> &L!| &)P^̻nTڌB.ݻjۑ85N, r8S1HyqUh%E\+1W[% 6n;UJFEt W^IQaPrB?ZFgQ6I|5vEf*֦'E ޕ#wR/IR5(ei&pTQ]0g苅8lGJ tEUnN0[Šգp0A=$`' R?۹ 2ۃHV8jKʺ^HB#G>{Չج8+\|Zq2!8)A]<֭=Y#mv^ARvTP3\R'\U"|'#4n $A+i.)T4) Zgk.Q?*غke'3Ij#&6oj0VW1\ǀ >y&I7Y%tCj畮WX[[эEsڥq?s۵lYJ۪cZ-ͮs5h=7ҳe/{"ǖS,wLxڇ+;k^!+\~vⶎ?23rjm.O>jS7 U꣓O8p` U*"3n9HO[Q2s׈6+L?fjz`z^AU}%MsޣY?%"zM0dPpOiHA˞>svQ f{f'(y.HyQoV<f&gHպb3wʅI86vRȄgwM'$e$z㊷i" y_J[e%4dlyϒޖ6>pAJ*;wѺn`BqHn\m(p;7zj,BjWL/9KZGZj:94;սa#&njz]]0 |ZM.yN#,Mnjc`˱ S]~ $d3ʾֵkcbdN\k㔴4rҹxuKRsu9B%n~a]E 5iSƱrܨtv2l{U=W˸F8oS wy8ڪ&R89k{ e8L5 (H}"V6wrKb4Ѵ#2}KEE:ly%NDPer1NR.0DhX\a9'5OHK0LA)Kf*]$)J♤NGt$g "b;Z.9z#}Vc޳o"uZp~x=N_. x!dc;WH"($w&H4 ԎFÞCp^ d7qT1r2ҦYR|W Xc GZޛHV#Dְ漝]Ghx#[ďESO{|1;$8l1,LmsWл&"nUě*̼.OF62'ҩld5fWĨp:FyQU]?jyE 8oQ]>%XCoޙ&6=ު#KGF.7?Fz -fG9֨;&#+qEe=*etjȥ|'!{5zWH'H U^ȇr A c'5-9#8cؗunJ4,:m0V7q`uzU4O8T3AVíL *!D c#jd.XrPM<3U.V.iy)i΋vnjU+LdEWHکZBLIHU-YVE=ȫJAR9 !HG1jpP]ErE$w*)+nELr[YuwK*1Vny58b A4$vł}OSek[i|{֎apUk;hA^K{:! 2\VV\/ /Ҭ,4VOip)(.%$zSF>q&XE*(,֫K`<5ZHU'+I< k ?{̉J*ޑGZk{T2LRLyT.PZ_ *6=z53h$ ui*@=¤JAJ&o440riJ`=8{Ջ,et\ՖiYmqTP1 rrMPp'n!dXfgaDc%KjBb~=Fcl3@Ng䞂e#s*axVcDޜUWf>Y\,NsUay*/E@.$WJ\8|%@QNq 7w aGi"vb 90( ϸ9}*U&ހUh3>K%$qRW8%2Xr.{T,㗦ofK1.ON sK4'ossu=)8@߀37˜ * Y c8<  Ue%lUg%<(*5C<Ґ+gFTr!k>Yc,)b$]bdT?xlQ$q@8R5vXd]X Q nx&lh <хh40~;R11Nn3Hi>jj $g iX(Y-rH[ erHLI0%$*A*ILy" J|hTo8!l9cTSVN\&hK̫R^]nOQI 4'j~= %&;Usb<5Ssn9-JE\OJl3Ո٩_[%tbI#,ey!ƒa9fLN隴?a5eڣT y߽***N) ;6)s1b'y#Hơe, faz9Ww=!'Ґ>t<0^O< c9= >sL#qv`ZFH=je|=]ԥi&?"5ƞ ={S}rԖJ_ha :Wެ]\mVn=NAYUCh7XByjsUU0*0g݅TE{bb3)Ĝ3{1-Ȼ<Ϝ1J͸WkhIyըkuqD`PX|ǑUj+j+G~QUu\]8 "* bT UhMJ*õJ3ԠNH""0F NJ`Nw7JsrY(QM9cŽcvF7 ǥffF}WRoT̬8K]0Q4Wwn&;t=1n}M 0ϭ >^6x=i{S@6IvGt4 ׵@Ns& 78F nE✑a=F_ɤcV|zƬ @OT< 5Qˇ1TY>fʫ& Ԣ ;]1U@늙sud1M@H@#ޢ@48irp=AӈP=JL4m`1-=̘ c0|AP,fc*a$ڣ*ͼJOSPK fg]4.ܞ•0X{ SrϥGz~oOj\${p*XJ:]VH@C9V*ryjT)sM'4I"SԱnϩP}jMFV֞_sIH:uɠt?Z `!Lx468ڕ`~43`{UWm#O֒0Eg8-USxT$+JXlT`sSڳ8Z9q]ZW*PD5^$2sZb1&~cޯ6$nTǩ[i$$idTY}MRg.N9b<95o8mP8J:~41^(D;LSHdXð09sS` c&̩SN_->XUOza*TMB`$75_%5X] (@*Q(n܁Q=iFHcuϥ) N1f FALwǯ=IRbdTJxB( hbGJF8 $TaKOM&NV3kLd2k[{SQZa⠺o.nj9*)dY8OZ\dz|cPC,xW! [G5HI֙%5 R[GnC1ԑ@0-AOaavpFI?jv眊Riv#Y}4=J-όuZHZ`v-,viB zsUfpIwl+96WE%p%m c89­NEG>ojS)rjdC&$}*H 4ߍǎ vp8QRpČJiO90rq4{SX$)M1sHOJBMA!-K]T1J6ңO9QO#xT-3HHF8ͷK}QvvQG sTJ=MUٴ`Wkxg=r)=s+0\nǵ6;lI)aJ")݃ uu D 5qaW@1I$I=I#i'-ǡ4İl}I>pmƤ2p HAԜTAN@cҜo¤ ӭ<8ٴ.iG;0F}M2bBm3ؚd?:bwaUSU l8 {u5X9qVD1.;VlE^>_:CI2~&sA~9sFvc;qs׊xgԜSLp1 sHqLs$?g,ܒ֘s88L#Qy?\Zfz晴sS.8׃O5InSOROJiJmdA#95b첰Ojk[AVM$rX*vK,Kgj@lrI5A+{Jӷ3#jszO5 U'zUZz'MXٙӐ*h,rjx`'>pAmڴzۏUgޣ FEEg5 ˶F^-LwbLw[0bjn:q18$7JV-rsSCs&2:y'=UgC#dw.zCH4ӌw'CF I H6!GV"*0ڸɩ{< }iy]ңrF$AzL MpbOsK{z^Ap1Id CӦUazP47'5jǖ]p"mߩDQ '_ơMFόQI*6li*rÏJG=MF*6LnH8rO4ÑMcɤuv9#F5DdӀ[DpIao%Ԟc@) 䊵4HZ**9vv UBqg*qu>*E#΃<|46In]A9mMSҩYPETyˇ@*>GYBG9";LsZLcQiя%i09vp*#<J^Im'M[S!Es[DJ"BT<9ϥJP#CXЁM x*u0~n~Ȥ|MFZ6 @) 9)cp$^iw(L<(8Qɦ:7*9/Zvm)pD?Zt0GO ;M<yII,.TIv3OM#I&pqHYsEjXݪy$BK-/B/Y Oz ߹ 7?CZ +UPuʡלڟ8;|pzlрMlQWmۤe)R3-Pt֦*\5L[̎p:5Jj 0ZcTww|nJ=6o9^P~rG_n NvVmsl#@.Fs֯[h #9Vv{pGDY'#'m8'U?Lqyh,wt ^zI` L*yjd>r3U~|dn,7abː1)q@ZQ$_/98&<qM@b@j0IqN dzӕ8F@NqƑ,77ed<ʑhlɷsޣTy#'Ees{UF<*nedܧ,jz\Q@9ǥFO=*6lMFdLt8=l͑ZA㎕ǑZwM$e#'i=؃i~f K1=*كOZ#DQGJ U?SPGN /\N/^N:RJl#jWX 6Ph;sLgd]) UyGݎI'}é$Q[B rIAȫQ,LH9jx09 wKg1vbeQ:}hAm=) gڄG\P{jBPDG$!qA[,LRRt4.yMFA!{ԡA!GZxB^K,xnl䞕d&'scQd(H}i )xNh={TO }M3 `BY0ؙ# ޕ#TnG1UYx,)8jk^MMj6s֤/ONqNf'iu3qکgsUmOU~xTng4iM$. vM:sV|N+kwiNvJrUx$T1$^2rir w)HͰMcmNILZy-ڨt#{UDcWGNg/=Un)G=s@\{R2N*Q9*'~8Ubk~vK GFs\FI$JPNIOi(楹,Jŀn`4! J;I ҧ56aϵ^R3EXp}s֬8zҢP@ F7cJ`݃\dj|:Q)Aʦ.sUd*sP><k'>KN~7&_mV`wp8W эM bCR >A=ӊ} `ZttPٶFA=*a6ڨՂ3N}鲹0/MY})1f I;UvHUYpǒ*Nj`_lշ z)F{jpGN}銀?ƣќnV{$f]=9-نA,P 6=/,|-K"5ZQds/j_J[ӷtcA,Z~.;Y/=zmܱqOzuOt_5AҠs4|MCu'_JMFxSN -یTdasQ3RZeob**KV)p}NnIeNpy=94l׵)qRbO;@M9䞝)'wHJ#K)Li|^)R3㠧9@6 یTid>^xlc54v,}<Rb. asvIrI!B3|sx#{9@4`q#4p=O'b2OX,dHOG&n*vi[*ܚ1b:Ә_Ӝ 0mV6l3 ԡ8<9 'ޡdɨ8*sPNxcE*G*R[ĐFN%2HF>~4a+cO5)# J~ ~U$_ГJҝmuojEf;Sԓy{ՑN]H{T Gg,:zT6(G_P@9M3p}*0?N*8L\sH :@8*ēF)r@)9մ`i KnaaHn`CjHg3) 0vrG!iA9;#cڬ@{}jʑ#?m83fXAp*"FdedU+[/Q&x#Uyn9X!8Vi.9ÜtZr5kiqр ռ> XRY'B2Y R1[ W kU+BB p2LF8V}Maj!>Piv̪]n3RZ@f'wYYFzU{jsKWmTn[.bjxTcwz =~!H(H.÷9)ʤzw$Jڟ$@`:dh$20T#'1S'ڜߖʜݖ֛SI?7?1n yP梑xUt:Dͻj;SM 86Oҙ1˙<: L`v^)'r(0)B !Wiނrc(<'~)pB)\ `LIE"R4 I8TrsڞO^ )ʬrK"i\iLݑfs0jk(4N:M(쀰+EŭrIJ=3qQM1ٟ] |sH;M3de9db79 ZlbuSLVPLfɦ1f+ҤrTq6fi_hU5v{۫UxU (ނ1JF1Jx*'nMDg+UW% ֩NV3NޟViGˊe0{"(~yF;Td YӟNq֖u+˚tCb}iЏސ'SA*0@ݷ`t` EjPb9.)jP6*9Y|٩ {pG/,} S,1 rv!VQx8$y~_*늬9#T5Ƥ1iflѭ4*$z;i9O77L_@*KǺisxn.)_Y򾃥MkfЫF]H$um9?ʔyWCOPNJ8[vqD"|zva¨a`ja;Ad GNŖن<\lCەǙ=4<$mec@=i`? <%(sdQһBzz[D['_KxNrrqM]Ds ?1n!TJ~ҥV l7jɸϘnphU|ݍ(OP3OPwOj0ڞg=KbzvR쒰 V,meu=0ׅ!Sc4g?*ƪZ&P٦Tbnj5;xJq=꼤QPPQ; 5jG|qڣU,Ď:KLQʼn̅eOJ(ÎQ֭ ҧ\X\N c)#b1׊kc< X1Lb;)wjnǞҹ~X𨥗 u qT[qoMW䟛U9'5f1*ÌS1JG|F(a =@Әmc~9 >f~}ii6fW4cs;*fnuvU!{ cU#rb<*8[櫗W0CrXI5hgŹ^5^Y˶Vݏ∬d6~n0g>Z GZ,mCTE71Ớ˸W{ 65d@c8=sV 1׮j\ZFǽJBA d0 L8G;riC݂pe8+' ?F0elmnxR8#Dp"c =fe\L}jV`ΫNyI^ I,P$Rw˞Fh fi".Hx(hɀ8 quhb0hA94‰tHSHW34ȆA-қtICQP)(f, Uf'}MB1xQޫ7隃,XTX$q԰vJr9x)x  i񐑗n0TRL[kY.$Xc *F5ܖGN{&5#m~N~1g&XIݎI$Ptlg9J*cޘb5O< jܽzT~qʏJg 1HY0X`cO)Y@)0q1LF^b3WQg",O=Hd˜d|:fS R()ǵR*}Ui2@ᤔ :o!|F0Gz% ;ٲ dU9RFU֚8p:#N4!ץS8.+qǭ҆`X E.7dR0[K=A O InkWv珘Tڍr:RCgtv򌍠dmab[ȼm(789GN&΋`jzx+Q C ڱ3 VL} ^ٛM7G.B1*ޒKXV;==MXsoX|ޝkTǝr~Y9=Mgt9aXIwqUcVʪ obj,zc4]m]*WHAGJK$<6Pq3DKu;K#aҚZKF%H|>B`(vJ[8ݪ93sjob4UpXo$Dެjohdm>Ҝv|o_zoZ Riz sR̫1x2i P<I4jSRJ$r1#Ac BawjKrIz]OZP$1zQR#>0H{8J}{Ja ׊kJvcSZCR|ƅ OU协-8rz`fp֡<+NYxx R oAzI֔ r4:NݶHM1iiv?(\=J+˚ҭ|*}zyG$ ,UQ_njZBYVp1EyLB1:+b=vܑۊ!P?VA\U'IdD`~oE1}~Va՝$&h8(էSnz֝hgkN2&˲&j̘F (VL#x^ym 'ҲRǒk2,9&[ݤ-p$On RYbիyiD([-QՁfV 7Rd`w# Dx6VUֱw*]Jpִ{WpeQ֐bw0 si dB'  ~5R8x-w{T?%D&L&+I)M<|HN1'I=B=lUP=B<( qךkajV T.*M6|1Fj]R)T`x8S=xMj ';incDKC'ڻ84&ߙO]UqY#q,'jɒI-!ڨ^G,'<{UnۓT08n& h)ꧥKi4@S$.Мs>A=]H2zY7#YQyQ _`;Eʘjf6y1P@7S_Z͵͙Q}+:<rJnd'R/fi1¨?LUϙ$|?ȫ,l7*ۦ1j}R`.okhV$ኔ_[2\}QZHglm |?3%X TQ>#.pPpۭ|p{1)mښQNb~w)++!)DZKZTnl},10 `$I/cnn*BacJ~F=A9#z]AA8|'$ Vc:#'UilѨ}_-)ߖh[`dT3@ZmxϭH!$dSYOˍ4jт isVns0 M+W*7+Ԯ#^+;gzsKY s$R(1MܷUXw'hۛLaCzբi8OaՆSg*QZ o$Mg$4v3rű@@K}&`Hs+H"[sL*S9*1aqҚ@# qW)c֔2R;WUiEQ\ ~\VCu4\Tm E8(c 7{8wfHu"gZz&.&ȁ:Źi=kgH(_KW֤&i6TzoJ6(j n/Q#E.u.OzCJ74Lk? ?U養5! &ozVߺ(z=54AsLmIa}48>dIb3N-Ҥ|(#W]nL3})7Tr2H*7ajV2-E)[yte>cn#8ؼ{Tg0tQK2 U,rz֯!jnXg=UzsT2zTFra0ʽ摃1bN)ץ54# :ZCzc12Widg44rzQ֓94$NqOwʅQ (HO$#8#1<.N(OExMHR)XM6ێMLtNN>Y0G^:!pj99c<zJPk!M&ң) *Hg]!cMIL8XkuE;աn#Y})e% U@L̪paRM!!FJKj̉ Qz[<41DCpĜTڔ6$mS5B2b䑟ʳ S,@noSҤ~cRycasqH9*Spq=1֬y { U=qMws'jd2בl9'3UeybEVNEEivLY F('%QKKBW;$yX(9BX>§*c TM.ܓ;lS,s=i-MvIa޺T sQv_At0=---QEQ֊*ޙouuEvczwr=ꍦdT<>,YoM-ݙD`Ov/ Uql d gs/\ ٲsɨdrIFNF3Mjh˃*( IU+1|KvwQ9~5՘D('W?¼y3k1=qڔG#'ڔG+P$\H6: cC+(ۂNz Lp)689}i80eq杜 x9P&UWRҮ2j{8e ɀMOm /ާާ)Τ^a;B/Ҋ8bv!`$W8\) r*/: v9l t-p**\1W>Uq0H_p<[ABTqZcqj3O Wo A0 ʭf~TxZDӖ(_J[u4۷/!̓'߭(((Z(HF/8zR6 ێ(`65JC68@+t"Gtߓo93Z(8{Tv ON.OZS!8c@:˔4h; =M8uSM8N49ҍ< Q\T<6zɩRIڇ֥GSI] Oh®H,ǞiU<S伤cBP[ڠ1 TlA8$),1ҎH$qHw ~nqu478}J *Wwr3;NiX%9fsZYQ\unZ=i'Nk>85QDG Xg犌bUg#+>]~֥!xDTT}j{f&Bǀ:TWyycR$z3 \R\$EvJ#$Svh"PmcHF0JVjZ(()OJJ* /-bU,:EURZ`?y5FJAazY5X)UIumD1}3:M,(9|S$ZtM0JWEn85vT9gGhރVh}j>\) y$r)@ar9F0)$N]mh8hfGVhGAVR/i 7ˆ2G{7\]rV\p+̉.榈L(\/ᚖ"ouHr23S@M֣a 1u]=8_OEQEɡu %Ad,*96DYYk 9aO $0\Dي0!ˀC'j2BtL)AYglIx#m?14sS0UQ5Q1U]cli+`(Dv<G u+;&!@+jzV6 q61һH,1R0HzpA9J!.{1PpDcP SwTnx*mALHAj)iKdP<5]-[ *5\F%-^Xcݶ`G2W< cW HcT%$RɪR'&ÐO-W=) &ب0@zwsO?(ڔKZQ0U Tq'&O#gpl\CcTSԞGJBIjC'2s׹|4s ' *P_'JoRHᛠÅ6r T@n[7!OM `Eg"e8 ַ5!V )?t q=khgڠOJTōU# ޮib<, FqkMxBeAnbMkҺÈǘǼ"3w b(r{Rөhy6ST5+ȌUCj |k1˂D2jd/p9cP\jmFR}WP(\'i=Z/%Z-YzkLȄZUY$˫v{0Wn̐"j$U+5A95-)A\v)ɷQ#G]+u agMβ1B܆늊IW*p9fY1cp)o3GF*4ʱ.nCcңLO|TRɸrj5JrMT$jjGj_,`R sRy>DIgf?$/C\`aM X2~#o9j7bY&vݻSA['pqrE;9;S*C9UŒzӌ)\ S[/=3RB4 f*dI'͌MJ95 /1=6O~\ft/jme<}еE! We aR0 V  V5Z[UNXTI%5廕6GI1;b~\Ku<.6q=̇2Vh |Vm֭QQ'Ǡ/.D .GZr6d@McJ؍a XM#}kK%1좱IX'y8) s׷ZQl2i,ʸA^t5'`Ž֎%A+NsqB#Zqܻyӭ849)1Ԛh!G4ĒO=2GjCzޚI&O'sGJ cI9n(W)F9KPQݑz &%rMdrh#(ri#-IjX1ڵ{C`+R&08[8~5 b1WY#L"҂F7VfSp#kwV[W1MҒ "+ kIĎj)ßP}.{=k9srǜ ܱ}kSn؎ .Obi⵼8n8%!֚(?:<֔wϠ IqH1p1"L/0g] YZYN; ABOIo**9il֙,-,2*6;ZQN+#nl ftavoL sFSHO*i6&󜓒xɨ~~T > 3J{R) S@3H 4uNN?ȥ)qLZ_.c\㪃jCjk);Iza!q,x 7Q *51VΘA dӏדNThK0Tb}9u ;]ۏ4}'v6.onu C4I;RY2^jS.QH2%PXcRn̊lQS0jdB$*&XܞxjE,yltK A2W¯&b3*҉rqcwU{rUr>W-QwrĒM3,NMFK3dԸ}qJPJN8!|pBؠ)Ź0Z҄&sFۭqHSj {{Q@xN 92g n=3S#|ǥA島GQgq+;Z1و#[_[O,Fqɭœrhe)u]".| ªj+U&SdOl}EAh>r<޴ImӡpHoJ$nƧxx0jBQGb{XRxMڹptsafq'jJ~fDwV8*kKH #,oս*ԈČ\ݫu,RdUĎ'kõHcGZ U7ry5"F[ڝs`="w63ۊ;ڿxUiguQeUMO`U$qT.y)<UMEm 6{Z%iX.O :~>ѭ[#HaFcIcXDR8O:Vm9)Y) qY2L x*?vVt+%w<dz5gEݧ]ѕ6kZ[>w\b2l_H5ω HM+ Xsv+9n*Jsn&Oi$dӁކ8S$FcޤS>R#1 f !q=kѲXaWL֥<*=@`S_Z{wsU/IXQvWj{pg\sV ثLIZ}ђkJ "隽>MWyL- b=DHaӚy$AaIK`T:Br6\֧5L,y}:ձi 6cOh_E-23qOr8:u]8Ԧ CN jy6oq׭Yp|ņcJ+g-Fw3a=1Sjs7˟j&9yx8wF#7;1-= U ;}jD2)y#vsmO)C6^9\3acJ(\e;dtʬ!k0D^"nw52*D8+֕#ydtI.6ǻrvQxH@wnMD =F@W8>v)#5~%Sw wgr3L|E ?7N-u\SlLiFceBp>cvlOW֔8ݎxnڪB.j?Ƣ!&dSjרeB8mR? ]ZbLǽrdX~hV/3;kfilm٦d6>QN+i[/-I8$V2,AVq]Xd欩 Õ#j 1vn\~b+ݗcS{Ӕc<ӣ܌a#8` r*0`FAZv~g)lědO\}{T YNN+Ft䎼 ۳ 6 Yq[\ɴA-AWt*V97p­I==c"A9)o-zs"䌮VҘ4qulH2H^QҪGLgW|ch["G0YٕɎ@eݡv8QYrZ?Vsڷ o=}e墋q&X05w`#d[Rzޭ\B Gnա.26<Deɔ'ri,, gj@ X[[qo?5"$V5-MRPJB0i"Fܫ 6DY#({9K[rQ+՟c+Cy$>d۞V_z(0C<';VfmΛ82n\?BL#Cxkd35r%Ybw1<#r[R8(-n*aos9yn{歭YT0=jزnCĤg$氮\O *GaFʮ+vWl"cWr* Qq1σSdFTs";G4ݡi*<`8!iHf!Pc 9'T9ݧlQ=iUcq v`Ҝ1I8R@exFQÚd`Tm9@kSM:o@J },Zta2[PAZ .Ci.Z0_#vجv +\Ue_sUFo 8Z8V(((OR2ij?{g6fh!aZt<}}Ke*K?ΟL@'⥲<@wXj;ٕqUus\TܨPBIaц*Q6Gz0jW$~\#uj\yr޽Fc1]ZSTl ;TtmaGm_ (TE}*lK+h69=0)AՓ>dV\)NZ"BrO˚bBX5^-R}j՜YAHOz3l杵 ?d2õ9O/{q֞chKw(6 ϭ fV^qINi>S'QrѲݍ9 n 9StJqޞ7cz&ݎ)[4 &z +{;q +KU Im4895j)[Ζ^+COT[hdO:YyvY<ǓhK]yЫ7 s]7&G"nѠBvVb$D'iejV pTr rƥЮX)ATL䩌&J((()Ys'$$}3X^$hZbn欝r}X ;Fk-Cʐךv{s=y4Gn,8ÖqZȺ-l8Y7SUҴS %Uս95n@=h/Miix'63WǕ8r4su\=똋]Kŷm.GnL2HޮGq we&8{{?cC"SE0wd'5\Q2?5Q>n]"yHPTse >9E8R` "$3"-[SVcէt kETj6/0{U8m2iH$L1$qD+[IɹH*n >Pr:Uڨ<&vDQc:AobyĤAތIQIEW`nfy\*8w5"Ě4M<&=+͍.ܑ].flDdǓZ5{[Z2[[޽l ?m/dA mGk|fi7B k>P3-&#f8SU-nV$jF^>aVGӎ/zWuk rwL++M@BxjW+r96Y]T!֊u:(((f㷭'n+F V\VWlWzV,VR?.oJa+xQ.t amP: TP01YZ 憖1Р<>lQ(bg_@"ب\=*(2[VQM(#si&r Qd$1#5ôE\űjͭ8$aHnRL0mcrʳ,;[ cOm藎%ܸpn>xAzJ(hݞO?ZA#jZF 2Y#cAMwXX5ZY vdZ-ė$?櫼>?֬ƥg\ D՘T pO<cӟJͽghÂ;7C3\odGR8硪 g8Y2Y rӏNE~tYR.0EcrMg5؈;oZHJRVv$}+/]şjl>%n `^jgin[?romq4Eu4wl9uo%~aZC#v}PْB0* lGz AKCD㝣R)eYXv%ĎEf+>I]SңhAaT;Zg֭F` vR8RpKsޝ'4~bJPG[ ~6 ̫,oΦ#+1롇T[KҺ+]Z)u}E%aG_z5u5Hq $0?p w\m16$f4;InW(ue>goN6!8⺫KQii~|ge?ZD<Ȭ J-rA,ۏO>"gߓN|Nu[kV3Lc{eO)qJsy8f&s CQdalww[1}k5in sT"e%!.KVH6Ej}+F{UsOڊ( x#g$mM@$!\,;Ȧ+|8*HRDka3Q]<N1L;gя˛?5~V9=+#(yOs\,(1}k4H֙4JcC{ d!Vs2IdfVl*71S@FWHr7 ʉLNH~^HZPTZ6Bqڟ{kC=u2i>ݦc֠gf9yڬS<{V2XsY9#&qR$_9\5 j,:FJէIEv.I 1%3,N{D(I1L :9Vb>gb[=c$'` kc#>V+Z$w5oba#e]ŚOwՊ$5l$^HUas.O+֛u`.]9)Y#$Wm"P>#ڴ--!#8@BCu5:>:Zۚ((Pjv/3*gos#c/4CsU;i|T>TOb*gˑ=KM7ĸZgď d@I(gi@,jAjLA0J`mj_ ϭ:YAϰ-c*N{ &ުj޵1vIXLhr0M[`Xk 577/PK2nB沯,ɸ`rk9q{ Z=:pB]|TbUXb]ќz  @*ǂu EEF+XQH7T#:O$G_CQ41-XW?Ľj'J޴3!M>Zu:gс(3HgF3Mm@@:JNFR`vKEQEQERԱ9 ^9-ڨX{b 'tfhHJwf$f zڦY3lJslM!1>7&f7*~rj3sUxPsW`G~>lcڮrض8#ڮiHnPܰ jnz6@8߅6Py5D Œ߶u$\BGo³Itk*I^W%'yf$NAb8)i$am f߽4HOߧV%R;ܲX\s޺-2')[P,#w֛qymKqaȫ+cwHnsڥʗ b'jdI 2ǧ[usSnḖ( b+!)+Nxh%=mt)f 4} {Ky)ria[O!kjH¸S[vpZFR ֶ-mb$*zp#oOJPن67U5 VE*OJ}f[>°$^MV#kS3䃊c:W9톼^s]s t6-"D<ۉHéRT(((((*CpoҪϨAvr/w\$."YF9SA8#Qq;yJ:-0pikvM֤Xq l=)R%Qku T98rjpjՄ$G#8U5Td o.e&xM8ua S')5dgP&=NY"VO'P;A+23;;1gbO#geB77ҜHN)rsMs87 ]PA?:PKc<1q8HdfQ:ӵ.d,zV` =+bqX `RG889v%KrIWvI&&ڬlUڢe;sSH:Sx H"r:]g-1999F9x[կEQEQEQEQE8Co~I40K0 mҨA$e $iщesnQ<*&1jaaj7{W325= ?do9MaHs3޲V3>sՍ4^GjNY^>#Gs]% $+uvZGUֺ[[gU HݽkD>{ZTQEQEQEQEQEQEQERQE-QEQEQEQEQEQEQEQEQEQKErK( 5i! 75MN{t@T|v+}Um:VI] UM^̬AێŠ H/k˨=`F[޶R}BQ{ճ֭QEQEQE-QEQEQEQEQE%RERKIE%QEQEQEQEQIEQE--WتB; dPCĨ*Q;ڨx4q8SݍRn66`? Ć@}jcr)==|u0HZKlbr?Z#;MnkSF~nivWh(((((J()h((()hJ(((J()hvW 1ٮr+pVB]HwvV2M 0 - E#` ==M%` ^\I 1,DX[\푊ОMW9WnuvGz=\\#AXW Q)iԴQEQKEQEREQIEQERQE-QEQEQEQE-RQE-QEQEQEQE_i\5, 93a]ic+cW;}3?:ȸoY7<1D6R[b8_z-U cĂ߇ܲ,[Dh9z~T T UڡrN2{ֲ%1OJ((Z(((J(((Z(Z(((((((MA~G XFq=+( <cҧ3mmEXZubij{[29r.1WSQEQKEQEQEQEQEQEQERQE-QEQEQERQE-QEQEQERQEW' &dq ԗbUHv tc9Ec֤Ә%@0c?JCp%GFZLmeZ4QEQEQEQEQEQEQEQIEQEQKEQE%REQEQEQEQERQKYgVYQX[ڨ `.+=bI9p}),ҒR}ik\Ep `m'?Λc>$t}:s=}( pO3FNS!&z}ܑ2)eܹqUwF@'U=MˢFUX(u_:##*9fc4~kE8T.c-2\*(]6PR2]Y #!zaX<)<ͭڪY,y đtwB#2@sU._jiV+\M6{;ePriA EjfT끏¶tKq2{V`ccKt2v%YLnfJm{0QMt2(2*'ts@T V$w}qDWm'&->gCo}$fTAtҬ v5s ՌEQފ(Z((J((9RA@$$ƀrih)(\S&LgJlq c~2o'W 4/OO~`jz!4#t?{jմ3l{rZ RѼd9&s%з=FMo(ОpR藲BDŌjḎ` CtE8>[scVr$(sjBة :qGl@W*B ds稬V2' F&W@OvT̻?u[y_ 4c wc֬_1RrEMwnLBj[XojeA9wf-݁7SH 9ޝ< ,iu>"/In#˶ ߭6qa$ f[a"KrtR3M!LF4fˈ >i³;s!S60<59qKKEQEQEQEQEQIEQIEQEQQN!?*)e2Gn'5KV'AGRtY 3^{ufRwE^uz8zUc'5luj~k',bHSSr);}MT]IPzRij"p&#5OLEv85Wַֹ(QEQP~W{u^LRSҡ0d8GH wN.xS=U$#8^Q3ҌP(t$(ւvJHd@CޑpH`}(0 jv)>4cQE&()(Gz((cR1JB{U w # GOƳ.#wsɪSI 8_ZR̂h#(;1> Z(IۿWL[Cv0ֳ<Wnors$%FI_(ݔzxU$h$K+#|ثSW6ҳsn缻g#Gzmf$I팚&4lF'$VΝ2c,f[(AïJضKo1fFT։H<Ue ݷ; S_Tުl2)xpW 6=Sː4~I}*n.= h2O#ߵ[D܄u5Se2Y2EO摙_4 74>"pRV1_LUfA0)g$SQ.#+3Hx8Wkd}*r2sVJd*b'і<ǹ4dT- $qש'At!$y1X[Dq؇9CX$ݻ0k-s8|[7h-bI0+i|3DwJ;nv7w vxƬ }V#b#2R ՘ubPP{4z$~>ϪZ$39|ieM+_n>“N4Fp>tnxI[Ni4 4f4`=OM]U=QESfV_l?ZďŒsXV>\VnYzeSgsA+ExD+w\/gҺdbSs! FJ5$qZA8IQ+VUI?zGz!鎴7̀F@}+/'gTZBF6,f!?2&F8ZnvA8l;aI,llx"O%k)Jӡ.k1DB'02TGR(%A׭e.{r_$P)NLZTԳG#p {̹[>u)!1=?ʹ^ !)?+t NoS ^P2[x[r mi%3ۇPv N9acb"E` ݅c4F{ɋ3ۈQvZ.6 4,cc|+gv$Zô ǡˠZ4x07SZnʴ=f~ F]jn*}L$UFur]ؚC[HEy;d)`xVM| 7Uxt=TvcӧHX= Y[dVayjӭOsW XHոPqiX:g>e :u-QIGҊHRH>mв}jY"*G͎ s$rùzmrIV) Ԓ_<RXErL.ŐCXurux知l$zV 4T?.@ ӽ2xc*STsDDzA?g^EHٷ?)mdFr= egp dN~ҭ1{p(p?ɭ!1,Ʈ8b +,jæ:z~.pZulm$ލ~} ZeHv"@ڽ}yWNK¢x zzѲKUUG`&_vU|&6BW'޳/ӴrGUynY: pbcγu+G\7hWlĎ,kw/ a2yWDu."RɞGSX sKNJ8,yaROmIFzN& :c9d ]鎵~2p]ksɫ68 j퀂i;q -ޯI!;۰=7|Pؓvq\*{s OZՑyneR|Ѐ`pj vՎTn"H-IݻnxQK E+YLiedimTѲ[#J܆aȨ5<˰H8S/r'3Y-gq4d.FX\u8縬?YN12X?is1iKAkGQhHrJu &/g! nqjZ6|Stn ?̞lwU赤MF@SjQE-RQEQKER&m$7Sa Y&X5љXǵXlpkL*>jbڟNEUL /%SƒbIu{T<˂gd"Ü ;Ӧ&\#٤mQ͵[XvZ,]o5e#[9{VSgk}XsLptrVm%7U+ylҰCܞGsW{X~zK$Ұo^ƠysҠ0zGJxKҔM!8Tw,d8})IJPYPk~#o9J&QR1V?JƏ6wpkB'%@t1$ką7< Ir#jgqU"w(#Uy'1jylC9ltּKvѷI+YoЖs8⩋Q;rvYDPv="^jdTQI8ngTR;Rh(x1Y) ʼn(N׽lhA 9V#mku" ѥ((QEREQEQEQEREQTdf0r1Y nvG#˲LSQEov6pAޠPF`# yS{a*L&FXQ2F:U߳+ȭO "` ǰDhiw=3RisasSXJf%U1V(=j-~`G5yy|yZ!J`OZd^pಀOޡcm {S#hc֙"`1#EI:P3#'!T.2T|xԬWj4;ސf.)$2eF"B"nMc"T*.EJHSޒMXo#1هO5dggJ8;Z$-)!8%yYNAb,yVC5 AC֦hBrHD %;A֮J 峒b3FK ~gS߸30q={KKi!P)`GCNX݅#=cSI#N6 ^p)PmKNQEQEQEREQIEQEQEQEQEV3j=Ͷ eM{pֲ[qΒffu8j\j4xQUO`u ~@b?QI."_3t{/b:ֱ!osҤ_ȥ_< n#)=B@VD _9WV9ȫ*Q">TRHV>]03Pݶ5rBKd}&9Xwu,C-z։WZjtFV˻A"a;NyEL|t m$jxSIɨ ɍ̽8PZ˯JF՝Yk'kw(%q;33Gן\䲴|5v8|ˌ8gMk'U<8be ձd9g4d#9MoIʄ2WE$繧-:((Z((()h((((K}AOUq=VO*u$0}Edj: C`z5.K)-֩FlKWbHs4;_qS]l;=MoLY@3;P9m o%NqTZPMf_z+T3SH-nk*_&a#GFzö6K.Ӕ8+&  }޸+J]A# s[jp>n&俍ݹO-'u19?.OWaL % Ģ<c=\ipUu\eZ.pYAyc2 CO#>kȒ6%xg;F"F˜ghʞ1S:O">pz34W),Y#Ooƒ\q25er.q/ueSr=룂U! 9-IEQEQIEQEQKEQEREQEQEQEgTU-0T}9٩#qJV+::ARx58J㚡}JąŜ[vUmcG?ze$L~#mazkN6hq"}jYKm>o1aۼ6#ZPQ끊̒DZH`RNd.czTVHr%Ka !I(0*8"̌q#,,mtd="*2dQ`q|J!mzV~nbCrd>ZJIN{bHT3Ȯr;֥=WozѳhI#Z(l Ehi 5~\@^E{g9YMcjA|& tKurH] y:F[Jg_B1i,$ wsZ:LWPdFU:) xdo~V{QEQEQEQEQKEQEQEQEQERVȖVO-i, ,Vё1ҵ+Z*+H-PF qݪ;WRN0B 9OR98cQuI Ǟ|=ĠZbk~qZFcB4-F9b[Y&^EE|y;z+@],_gXK~un[!agKϥ[Ta@bp[rrSqڨj־l&L|vzd{U,8܏#X%}`dȥ&F{QtQ#mo=yNdI׭4R*f<sZGWVFTP+QQQvU#Yk!t(8ڭzHߨX- AtD2lJi4%cqg3)eF9R4q P] ` ~})$\G E!QIαO!QZU?lUy#Ҝ=y4ޖZ(Z(()h()()h((J()i()((ieRazkHKOAHΪp[eҳ[9 :E|59$uzYS$=*0̷+)3m U=י _*ȍ;6ҭlH*26$mnbgjvʽMZ/-[dWX!ܹ$5,Q$|QIsMOREQEQKE%%QEQERE%%&(J(6i8IblgPsJ<өh)ihJ(J(uk;ܙ#lYwWxST rj`94 s殯\vM.MQERRQEQKEQERQIKEQKEQE%RRQERIIIGz)iih)((J((Z(()ih()(((((J(J(J((Z(((((Z)i((Z((J()(JZ)i()(JJ)hZ((Z(((((Z(((((()h()h)h)(ZZ(Z))((()()()()((ZJ(J(J(ZZ(Z((()()()((J((Z()h()(((JJ)h(Z(((J()((((((((J((()((J((Z(J)h)((J)h)h)()h(Z(ZZ(Z))((J)h(Z(()((J((((((((ZJ()h(Z))((()())h)h((((((()(()h)h(()h(J(J((%QE-RQEQKERQIEQE-RQERQERQE-QERIIEQKEQE-RQKEQKEQKKE%%QIE%QEQEQEQEQE-RRKIEQEQERE%QEQEQEQEQERQE-QEQERIIEQE-RQEQKE-%RE%QIEQKEQE%-RQE-RRKIERRQEQEQIKEREQIEQIKEQKEQEQIEQEQKEQEQEQE-QKE%%QE--QERE%%RKEQERQEQE%QEQEQKEQEQE-RRERQIEQEQEQEQIEQIEQIEQERQE--RRERQIEQEQKEQEQERE%QE-RQE--QERRQEQEQEQEQKKKE%%RERRE%QEQEQEQEQIEQEQE-RQE-RQEQERE%-RQEQKE-%QEQE%--RE%QE--RE%QKE-%QEQKERIIE-RQE-QEQIE-QEQKEQEQIKE-%QKKERQE--QEQEQEQKE-%QE-RQE-RQERE%QEQIKE-%QEQEQEQKEQERE%RIIEQEQEQE-RQEQEQEQEQIEQE-RQEQEQEQEQE-QEQEQE-RQEQEQEQERQE-QERE%RE%RIIE-RQE-RQEQKE%%QEQKKEQKE%RQIEQIEQEQEQEQE-RQEQEQEQEQERIIE-RQEQEQEQEQEREQERQEQEQEQEQE-RQE-RQIEQE-RQEQEQEQIEQEQEQKEQE%---%RQIEQERQEW ?룮JZ)i()h)ViޝNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEʎ(Z((Zr-:N((((((((((((((()ʎ((((U/zrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2襢J()()iW*^u:((((((((((((((((Tt(()()iViW:N((((((((((((((()ʎJ(()hU-9{ө((((((((((((((((Qu¯$nr>ԅA`Ǩ* )=EIޝN((iW9iuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQLREQIIEQKEQJN^u:((((((((((((((((S)QIEQERQE-RQJN^u:((((((((((((((((TuQEQEQE%RJN^u:((((((((((((((((S)QIE%QEQERQJ/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES)QE%RE%RER*ӗ:N((((((((((((((()GE-RQE-QERIIJޜuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQL:)h)h)IE-R9iޝNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEeGEQIE%-RQERJN^u:((((((((((((((((TuQE--%%%--RQE-JSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2袊)h)h(UZrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2QERRKIEQIEJNS(((((((((((((((e2EQKEQKEQE*үzrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2襢((()iV{ҭ:N((((((((((((((()GEREQKE%RR*ӗ:N((((((((((((((()GEQKKE%%REQIJN^u:((((((((((((((((S)RRQE-QE%QKE*ҭ9{ө((((((((((((((((Q()()hZrӗ:N((((((((((((((()2(J(J)hU/zrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2襥J((U^SQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2袊)h())hZU/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES*:)h)h(UZrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2QE%QERQEQE-*ӖiuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQLTtRQE-QEQIEN^ޝNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE ?뢮(((((((()(()h((J(((((((()(((((((Z(Z(((((((((((((((((((J(((((((((NQKEQEQERQEQKEQE%REQIGz)h(Z(Z)h(Z((()h(((()((((((REQEQEQEQERQE-RQE-QEQKEQEQEQEQEQEQEQEQERQKKE%QER (((((()((((((((((Z((((KEQEQEQEQEQEQEQE%REQEQEQEQEQEQEQIE--QKEQEQE-RQIEQEQEQEQEQEQEQEQEQEQEQEQE%REQEQEQEQEQEQEQERQE-QEQKEQEQIEQEQEQEQEQEQEQEQEQEQEQEQEQIEQE-QEQE%RE%REQEQEQE%RE%RE%REQEQEQEQEQEQEREQEQEQEQEQEQERE%QEQEQEQEQEQEQEQEQEQEQEQKEQEQEQEQEQERQE-w((((JJ(((((((((((((((Z(Z(((4gKEQEQEQEQEQEQEQEQIEQERQE-QEQEQEQEQEQEQEQKEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQKEQKEQEQEQEQEQERQE-QEQEQERQE-QEQEQEQEQEQEQEQEQIEQEQEQE%REQEQEQEQEQEQEQEQEQE%REQEQEQKEQEQEQEQE%REQEQEQEQEQEQEQEQEQKEQE%REQEQEQEQEQEQKEQE%REQEQEQKEQEQEQEQEQIEQERQE-RQE-QEQEQEQEQKEQKEQKEQEQEQEQEQIEQEQEQEQEQEQEQEQEQEQERQE-QEQEQEQEQEQEQEQEQERQE-QEQEQEQEQEQEQEQEQEQEQEQERQE-QEQEQEQEQEQEQEQEQEQEQEQIEQEQEREQEQEQEQEQEQEQEQEQE%RE%QEQEQEQEQEQEQEQEQEQEQEQEQEQEQE-RQEQEQEQEQE%REQEQEQERE%REQEQEQEQEQEQEQEQEQEQERQE-QEQEQEQEQEQIEQE-RQE-QEQEQEQEQEQEQEQEQEQE-RQEQEQEQEQEQEQEQEQEQEQE%REQIEQEQEQEQEQEQE%REQEQEQEQEQEQEQEQEQEQERQE-QEQKEQEQEQEQKEQEQEQEQEQEQEQEQEQEQEQEQEQKEQEQEQE((((((((((J(((((((((Z((()h(((((((Z((((Z((()h((J((Z((J(J()h((((Z((((((J((((()()4Jm? өi((((Z(\QyRH <ƭƥQT듚 9=REQERE%REQIEQIEQEQEQEQIE--QEQEQEQKEQE%QEuF3' v(=Ju:()()(((((J QE-RQE-QEQE%REQEQEQEQEQEQEQEQIEQE-QEQE%QEQERQE-QEQEQEQEQEQIEQEQE ?諢(J((((((((((()h()((()h(Z((((Z((((Z()(((()(((Z((((((((Z((()h()(((((((((((((Z((((Z(((()(()h()((((((J((()(()h(Z(Z((((Z(((QEQEQEQEQIEQEQE%RE%QEQEQKEQEQIEQERQE-RQE-RQE-QEQEQIEQIEQERQE-QEQE%REQEQEQKEQEQIEQIEQEQEQEQEQEQKEQEQEQEQE%REQIEQEQEQKEQJzQE'z;EREQERQE-RQE-QEQEQEQEQEQIEQEQEQKEQEQERQE-QEQE%QEQE-RQEQKEQKEQE%REQEQEQEQEQEQE%RE%REQEQEQEQIEQIERE%%QEQEQEQE%REQIEQIEQEQKEQEb(()h(()((((((((()hьюh((()h((()h((J(()h()((((Z(Z(Z(()((J()h(Z(Z(Z((J(((()()((((Z((J()h()((J()h)h(Z((()h)h(((J(J()h(Z((J()h()()((()h(Z(((((J()h(((J(((E-QEQKEQEQIEQIEQEQKEQKEQEQERQE-RQEQEQEQEQEQEQIEQEQEQKEQEQIEQERQE-QEQGz((Z((()h((()h)h((((((((((Z()((((((J((((()h((J(((Z()((J(()h(Z(((((J()h((((((((J(()h(Z(Z(((()((J(((Z((()h((J(N(. ]rM2(=5-{j,kF~$+]'pO<`R\${Ŭp?*~vS7=zRْa,d(3s&m7so|TP O!?>j ›j"Gjm EsahU>Hhy{ļ"!׊ܵ X[{ֶV9.}ZRFY@P>ae=InLHSگ}cm;5=hժJ;ERE%QEQIEQIEQEQEQEQEQEQEQEQH OUbrt l7'W(arJpTu5w*A'g\.xF.6r v3.C`{fM3Yެ ׭Ro^ q=k2m]~̐bO8&wHʇl !pf5k?/l28w(+WM$Δdrtz.dAi'p$fSclIs5^sן4cd1nҫ"7*~5VD7";?P U";' {4doJGk`6GlRݩicSMqZ6/tɕIY aqWa+u`N*sqVkVRQE-QEQE%ފ((((()h(()(R0N*3g"Cv3lù2N zi8~r=Jǚ\y+Q+Ko ~fV;r痌9edN}<>n|ƛ 54ч2 dqщͼulF`flڶaY}v#,28ٷƄ ]M/HXS͑W+OKp̡=_P@X8crg1 }pM"6g)28HvtWaSL6Vb?B-Mg`y!Zy.*jJ()h(Z()(((()(((((&|2FP>³uIQCA>PFn*P]zV1Ā=+7hsDhN޸$]F)@g˟zf ހU%ft0yq;SUePI銽^mrd j H=*XWa[0z}k%)#\tQ54ufgִ4S$3#OW4r,-ôqHc^JH`B0_NrO.5نzZ5n(()((((Z(((J()h㞔Y*携bnq1*0BSYܭQA U(YcOJdpLշ) *o)*IVW~_洴U\0m6% &N}s0jC2XA9F*մgc_xYmۯF_ Ny銥,ұ;x+,q |!=u4krvr#^OK4c<hgߪg֯hM$ xqjޒKoB5- e@K+d)o7rbQKEQEQERQEQEQEQIEQEQKEQEQEQECxv?h:~5[QBGlqT2_ZLRyS8ȟc*qOg ?? q )ʮ,WȢhdlǼOBji䛉˸Or'LU]fK,n2WTÂpݴ".s ~Xȑr-lr}4aT)oxF@lD9#FT]H>f(wO3 Q@lͅSӬIo`\nK]܂ۘ*yncaWyvÍZPBġqګ+r>XWs]el8qs%e zvV-RQEQEREQIEQIEQEQEQEQEQKEQKE8F'w$ iI><3P+ v=+X66opT}M1ZVS"UM﹀ TIl;  h^k$+Az[&GG& fŷnߘҤXlJ2>VYۍݷ|#VeV;Ol^ydTB AV&E4tidӮzTwH|'T)uw|PE=E7q}?ֺd  ]7tUf]* JBz9;A5;Ơt=*Y"TLyV89?0 9Z5CIEQIEQE-RQE-RQE袊((()(((I[jEw'lS.ˉLU_@Ⱕ`rO.β`"ˌP3yRw7b~cF*8$fhrXyi'ޮ"v(բLITs_j} 2Ȝgw#TؘJɾiH֬hd GZL',$Y%[$ UMoz&HIA#}q޶ 7:0N\׽k=ɹH(O#9܀R@A 1̲ςrQֳ?:m,9axx4E{gppqL[#p#Qu0* |bk(()((((({ۚ)h((J()ONhTu`|xr*7*`,x'Y3% cȈW9Zkl-` ]!;j[DpHvJlJIY5Dm7MC99%A|1 \5^6FQr3ܞEGs# >6;[-Um+Wm: ֫D9%HVlN.G8]@eG׭3G`xd퇶7wIjޔ'j&.cs.c{{ 0\ cMiW]]%RE%QEQIEQIEQE-QEQEQEQEQEQGN(%Fd^|=z prŹ$~9yO+~ V+w;qڲ4QAb{c*3V5YR,rvi\,x*ܬkxS7<@8Wjy#"L,--˓NK4̹F2SS!.\}Zód"x՘4s8Ě{Wp/w( nR5dQofyAI+oM{qPޢvP~R_tF>kOO`.0 $lMeilؕsߊ±Q< :=,UnFK|7deup9&[R"qgTJԮֺ(((()((J()h((((Ap3B/ŽIfcϸD1CxYnTJG9Phsǭ1K1i𹪥F3;cɨ vo1n=)1e*{t['+gS@2L%Sm$N0=M7Ϻ}RRlS5M)i xh^wӋk7 oRZܭî[}m[:\oAdm"\K-k$;Ip隞 E(a>rݵ+%X˼dp`n>9-)g!s$㓉W̆-bDe#޷]WSYv0"f$NX ~5Y21F@kgZ6M+R*()((J((((J()h(((H wgVQLYn  F>CްeKsr8F8 $pe;6v :=*+eG.Lm ])/ !e<5&*e4gjV񶎲UPx0sFG q\9\XUbY_OEAebI$g qSk j8O WIbh!sݶR8^VP\bƧbE j U9QKEQE%RE%QEQE-Rw-RQE-QEQEQEQE-S]K15 [)iX{w5nNGT6^C _1L;ޡҳ&wu2;rt94L-2j՛ H#]niޙnJ:wC08z :Zl5UmԶ~POzo| BNh|%vYx` Dy1ZPʹ; <[7VQ+J52ܾf[i)&ʯz ov;c2Il` ĊM-uOi|Ĝ{u6XY'gvi$d:TQEQEQKEQEQEQIEQERQE-RQEQEh\o# U C ' I~\S1$9ka,4X5,21$XUZ48n;[Vq6MWܫ31 d Y_&fr9Ts;rT<6&U Y2r^5#3O8'V 4KH=꾐;7>EhidzԖCmcOҖIeyg6Ǔu Kd OU;e^s#($?ҴB%XsR`گKXcQ"Qde e\IY6qiy`)qQ/`Cvfsjr\q5gP>UUޭj(((J(((EQEQEQIEQE-RQEQҡϕqY"((?Ϊj@T!Y'aY 9#Q)%p @Fk^YtݨH G:>d6p?S?Xoc 1Y|:H?%9qRE@IP0?ӊوCH;{;+,  Jgn!B}+PF[Tp~֪C(SOlrkHE/$+ңE$*ب`;Qw_QɐA8kW~dY09=h706hd &s*Eef-ȪQrwdln'?Ҥ ߦIjIٗ0oO"WQ[QEQIEQEQEREQERQE-RQEQEQEQIEJOECwh|0*;İ=T<01=̚ cFɌmGK/ z5~#&\T*0023YI+ba03\=diw9Uc)AVyp'bgsV`8ؘ!Lw"##-~V?":#L-쌥LKrGsKpZ% 5p6x4Ɂc+V-Zv,KJoolJaLRrgi"pyyٰw1 9$Jxg,[`SLxTӴVӵI ȁXN$y9?ʩI#_,`z]TES4y]9"m#-#NB U ]Q@F=U`~IQ+w$1<8w1tpvH^()((J()h(((J(J(Zrޫ`Hpo_L[Es}(Q:2FI⦻q\A)u`{桿$: {ҙv%;ԲGRO2QR1Eڴq$yxcM%(qK,yΒBm4ŋqO w͋&+!=_,2K71V3'jcQ3~p#ޘ*X49ȭ +(Z(()((J(J((()(b^d`BVnsHT2Ƈ1Sma@=@F}iUi=M7OMBv.6㯷TIU  kPI !*v5c9ϵ2 K6]b2S^nFf \S+33` !3; ث6vLq튱omkpIsVxv0T_6ݰj{qL^ޣYQRFMEO.bm=*va{ Ea) 90HF ҳ?t/իLqB;TA$Ky#?ʠUPB@jH"bl`+c#^8QtQ0lU8XG/ϸt8?h c1IF=sZWCEQEQE%QEQEQEQEQE-RQEQEQEPxT7 wJ|,j䛱j8]sPY'S叿QF%F~V5sTvl(0r>c^rOҠ ZEFo U [d cW|ەiiU y*BrWZ3#Tiv ֤?աoΛ+C|r=9,]I*Oҙ#nޥO9 -I-,6k6a%l ިI[ރ+H? iZonn.%_[hL8*/a!]TcڱUGF;e s'0jKmX`c֔X0Ozrp=N8VܷU8@wQS0;/Jz>tշKEQE%QEQEQEQEQEQKEQE%QETrȨpj {W3,Q8gƫrEX͖\FĒKL\cZ8 Af=^-HRQ`H𬩤fy53Bsqު^LZ*ñFNH*m)|L2QrTIgRNJu,5h ?1`ɫ ?@5 riz>J*4ts;rEUx s^E2y !\pGA<(ƫ$穩X̹RDl:eQ\;f:Tl br*fv}jl-*.m=?TF)4;X O1?:@ U+V8wUtVYs\[kƫ1b661nQdCSsܓ5f>wrHY(((()h(()(Ҍz˻;:gJϽ ~\隩q8`6hI5^y)c9M1=7R}n'80lNqpyA0tx7f}ʤխ+5>OIrZi_%m=ZcI*2՝v[eXnLtiy!' a5~+R)h(()((((($ܨ8gvzZnZ$$B¨Mu;")7@jzeX!"2Ƭ:vqWQJNxZ ϥQF[98ϽsRsq;1ĚɝnOh@d^'y 2RO1 b_$\f2x?&11?QF ~A<Jȋ \ܱJ$hM6p}9F ?P냎ToQE=G08>㊖clF^^c6koQZEٞ/&C[# Ίp6JG&J;Jv1SzD0X4}Pk]#TaWBi}Z"Mr$H^r21ҰeFGa T$;5&Ұ#n2vPRJQ׌+n\UB6G}DnerˑE7Hw.xړJ.|QNa$k*T=(8Z2NqVTeɪ^GrAg45bFE&z֛Lr ;d0#-BP9q3T 2/v'$'a\zi׳r|Rtd_=*~WaOjҮºJJ((Z(Z((((͊~w*"$;ȏS*1g#jv!1aFqjhgs{֕vB|z* K ^}INiQEE)oS~%ÁPN++a^F0湫7-9U^*P.E{3^y#q"`{T5Ep=GLMo;  /7x5f^Hpw毫F+Nr2#n˕Q~42I>6\bPrX"-Q-' :RX[=ԷwI0 EI1Vz3XhYyTlddTXg'c|٬` joj**7zcCl}RZA#+F~Rk>OJ  Of5B_ȇ*zMiT B Un|N:UxZS323+GfzqNXץ ?ۉ{Vd&pZp˹< YpbxoSX@&݃gKZD9PI]К͜'gσT4n(J33!8Q4lOһ4P ,;fY.I> yoz{G,cy( GtFurp>+{՛3֮kuxg9rLIO5ZYb3ه5mrm$wUy0֝z$2ea)" w錐 ޱa.hrT~5EoX˻=TI1pg7]d ǭhLĩ.]Nz)2yAqK( $a|<FQ٤ ΪpHNypp*2>e+G\be#nzUKT,w7Rt{ (,%+B-a$d,^\.q}XABсq?ƴZY9MXU6P}D` #)B0zg72ms5$IGުRJ*5FXxܟC[ 9lc~L届22ub++xEl19Vts޳m9n[#T-9fow-[kkdP#lIAoH c*MqpK7\U{H̳4oJOmogx1JJZ5r=RvE {r?9 E:K11x$G%O$Sve~1ۯ FylL̡pAS-̎9{.mCn¬^##ҟuu 7}XXi6|sSG-0\HG͞<kc#XypӊHY/:6y%eBjr"\9✌""t>9Yv\TW!W8#,G]\S֨o2OGcPcFy!v}>%lбtk2ajB%[YңI}& +=|!Q 5~{hTҺ+A0im9_kX턁psͽK$<VuvčoOjϻKXVXoVl!+ _V"yYͭ#4F[!FݞԭjQz2iM_j/RzBI8ES ?cTF}jEB/qڮ lJz>0i5a5>J#'ҵ'{u9%zZx$`HJr,͊|30=59&٘ޑJ0#⢞41`vsQʃd AFV9\cenV⹔ys  ٨ Ep:JO~ z8>_̛$pj2A *HwUò=j݄ff$PA޻ k^~W* Z,.>[ ޺{eSݚee/:*qyH9T茮<Ў1\F+1okMakBL7R9cXngqw#4Q%@+nw,1K^ܣ +ږnB\),\#.N85j7FHힵ%շ>j[y8OKXvm\Njt;Bj70n"٨.?³2Lqy6o=*NFlݕ`N t*F}*v県< V-xv[L=~Gb{@N BcCjV#+=e|j\çإ(Б48Tӊ|]5G!v@HG[9CPNy"nX|rsT0}M2-0}hO\tPqt4{ 8!G#YnLLw$͏f9 ϵ}zUHyy>^8@<ʥ+u}Lֆҗߦjח j2О3An{ҘXݲ@=OM,rsҠ捤 A9RC2q1nxjec4W]a^yncʗUcA%jU'#'\ vj.a#ܫ0{]`@i9#W  FIje-.8 o[ 8e'j[3XzEc_B~a>y q1Wc}kOF[NA]=.B%M#n1YVmm$|8*j[2Kǃ֬04ZdVmU~HY[~´^"omP: /r)=ǵ%©y=^y+Νvv}ꇈ{;*/;gL簪#koJ-,`v Zŷ b˜n nX[pjPZ!g$UkF$| 1Ү56`T yQsX{ә`M4ڲcM?xyWPR(hqZZȐ[Ơƿ;cjz,1 #\,rI!;M<;IIbVy^?6 UFz@d E*mHm`"8)YGMҙ +V#[IBW$sڦȟgVغa&2OZ;?m% zjsԚFGnbc,[R52Tvj5rdg9֫3<3r2x*̒m9^6v~$e;hhrYFI =saq0ɱYTTn ppJ$ cQTZm#jlX"=T(;GU  6NWQNH }x$0iqdq8UW!w#{ҤxP8`PQv,xXۢׄ "q޳.ٓ[wV7Gpϻz$(;{ ޝr`qye\S$#h >0ǵWM"_1CUncU/1ޫ^bQu-’Uyf`aޠ}:yd2c@2+J<; N]@j}>fDnj;V5$Wltbk"KvгM6c\sK4Ӡi3\c =+9݌X唞³fc$I e+dN]nb>7$fZᶌV.c ,+WW6$x,W+>$|qTG#?X9\:m=+27 lЍe#rSFͬ%Rb,e {yyQ `gkASҫ\#w'X)c^Kр =pjcϥKw`zT:Ҥ$ajggCYHʏq\F=zTэ1NzT/̗ARD|ﻃ#Ct#|RvI1ys3J]@e!'X!elzT,tGG8ުZIGֶ27s;w+գ~.,;UfPc}*ԅ ǿ@ ^x;NfVߍmP[n1RY^_Tg+SF! ?*us#v~P d, QheY_&VO8T?+F֢͓+pXerI UCUU-zrpj)2&n˹Soh 0[!qɧ&B}b[x1먖HrV pㅝҧ>9\FmnqMl Z*wݏkIz=*) Fb^y©רD<6]/rB) KG# Cjt'ۥBk0'$ [T&?6IHZT 9J)8$ø;d'9穬Y94FLJ.VR>qW-CpfZ>܎2SdGU:xZȱ/QB),K3itZȭġ=1ΰ7ɻE. Ƨn*]RUe{Mد#o 1*\G*G˹.ӟҪo4Ԕ*o0l{B&dPM.ϏqI4N1R;<ӓbr AQKD7KzTrCFqX.UJ8;􅕉ځ=qP#! 2i2OOϩ*@߽[pȪ޼gڲdr=*1-VHԄ'SS"&8sL3?z$`wU(S6wY@]ñG$j|oJcHX;Ҭڂ-Y˞2JPǧ4zJh,:Pp@\7$~OCH\>een#pO|,3l|n?GHUH'B˹TλXt&S\)o`*I`3~sXnPFcY8*xe;Pk2\gfrd jZηYy hʷ ;$qSK}ם:#V<#E=/#M6>RM60nFzhE WW$Tw&DgP[2]< -ùlZ 3g`8#`@E=9OxHfNxrpHҬEU7trSW)Ugف zJʳ*+hLRʹ$t"8RȹlT`\O"&񐱞:sV-l#M9g;"n~$$8gGZثyc5(0r5?**Ò`~4CʖB 4QU|?HFFpzU}=N1VlDxxjPѷ@NjrStffH7~QVH 'Z~0p@J#{iȲ;Cz~ً#KMJI?:aLZxaM RNG\Ozq8T%%“8*ۥhEЄ jkVw# t^j*ERҢTM>$fDQP}ilʨ@sJoTqP39LQ4K1g;[fN2ĻPP2InHY0rSupU*-n3kiUrȫ8fU Sָ9%djc#Or;MNJsR-)m0*)b,GV:eCH}ifU(X)Ъe3Ig4tU̝F9dpB!0Btry ) QY/w֤!k͐:Q^J0#-EFW9ޣ*iwʬx/{zc;8#sWKm3Ɉ̽y,WQ1S۵^jnerZ!62n!ۄo53- ךg4hىA> 8n@6V8On*S!5;E+B&??5.U4[Ǣ z\fYV(0ڣoy(z4,` 1]@U16ci+,j6ٿ= +x}0qSLόW*{T%Uyː|áq/{֭xJOzhps>Ҩġ:U;wp;Ev])W A YWCu"_dkJlt%zؒlaW?9g@zՍIRpNݠtUB1`0E:D6ՇZyT{o4vjO@u_%V}?5IQq}}i'ǚXv}zV:wx[>YqcҲS>* epY]  \.O)ީ܍ZFUѰTm94 yǏ֥TRB'>HdPN1Զă8ZOJ3ZrHIjB걳ǫgTHup95$E| 1zCi'9g:|urѰ+|tv]Ivm|v1 ZdsXQ<֡;6(6FK{hH]RhL.N}Đu5yL-RRq2R1F0-!2?P:0_lv/&LNQ PzT)Z2{ZO|Ӻ>[gǠi*^+p*:]pz8>6! ߭+.O$`w`V.0,JJ}f1XpiR] tHճ>ج[{#,csYm$sTu2QSq XvqvbzcZFkiIvZ 3 Zo/m Juʑx$G\G0 j!d.Ћj?)V^ZP3p$*kV:e.?V6N{RrPg֪L#d2d֡d2;eչ\@vrW.>!/_N:#U8ߍ8' H*ilر(~wFHE?Lrᑰ >veޯH7Cvт{jӰ/q8'ӐrT9ebڢ~!+ݩacbB989RQ+UxX Gj{9۟*̿-AO~<,9g)C09 *4-2(w^B b L%ye!tXf$l>2 =)ay1<*/:Iq$1ey$񊲟+dqZ+׀Eh(C}2*?{NjԂ3hi U`PB.qrW5^CtTfEO{EL;{TOa)O #f'3WԞ[t0ٰ&=h‘ޣ5#-^ŕ 0_íAup'.:nX[Z$olu#88z!o.t$ʻ{ E]C՛|RG&ݸBj"[#vQueR0Cc O0$y4:Q<&<{GjgW j%ssQzTeFH/4FsMTV$3cR[}s[j1 [VHϸ} TV p7֯ꌱnNj*BHq+*;$j(p:#(cP}9h mH}:V8CqNjęmzqy܄ ÐG\p+JV :!1jXSF P]F%U Tw"8Dٶ"[Қd8#Vhc"1#A,8Fٺc5JiMz4,fQ4"`jxhĻڬDڕ 1S㑱*RN=`"% fJda۵I CfjFX ;Žب/vw; F1',NSIl)md Nݰ2I*=Ī$f{< ;I j[\D!M=F)î{z$:I"Pp¡Y`%B~PyJBKC dR(=9PbpjhTA+3pnbX#rejHKG@ |b3X{9KNV1l -G(/f; :Z!K}NO8$ ,K}sfG(ެ@jS"1Ĭ.~5"թ+Iq ?*3Š ]Mdװf[}ځRj̸e}B=XjVN8c/ kA"% 2*D0*xʙ 2N;Q|젂 qIX2i 0G:y6Z٢D$@~KkA*nge&p2154sN?fResOa֚r~\?ίMAdVt*(8ofƟg- '' 6(~Z^ \HŸg_ʦdC1P:7jER >%{FȌFޫy-s zDfGxz69#C:{̭q瑼ALr=Vɨ|IoZi#zRAg-i]NOAM ֣JPpҬ<*5Ieg3Gvӫ˜Vn-[ː==k?KGIF+Ul^l;֋Dd5o,ME'z=>HVyKT RVɜqڤ1,λM!qF8g. 6TwڼTB5C=1Jz;^ax=1K5[O<6\=)mAg#6im;m$.~F8?i$65xv)Zҍ3/G=ѓi\NHڴ!-ZFc\ ,b4T6Jt{yEe'RfA:̞c8!:4B ʵ*<* pGxj[CM?moxQ?U}Cnc%eĘ'٥B1;yO%3JG9JC)={Xd2?ZiAj]`*JJ@c;Ӑ,8 {T+qrju$b28㩨Nd 16R)lHG^N&8n֦Wo5wF p?JJ\lթ2:>٭GdR3s. :UddSfXל*M#|48TFpMYIqRAH 8‘OMf'E, * H>ZqGMLS`2$K62p^;WvwE\s3W6U@V/CXs&Y3e؜ Y9]Nxl溙aF#=qޝg0$cIu#9#NFM[j[XZ^c gHWvPA4F7 cޜ|OYvB x_ 10ƩϖBYy'N3WW6l`ckw59BVymm>66ϔJ}(9' ޕk2YfL)YfL|}j"JPq&7C`8Wthm9蘪B׫Q! Tڤ¨P2`HHc+@9\|02<$182K=+qݕ>Oj\:!ջV ͎O5їa|u'Lxƥmʀoo,FyE9Aj"1D71})ӿ${v;P;NQ㊸ܧ̮dS|Ù1TnBBXJ"0m'UY#2(B Vm`>Kt@'#֝u!PJudSHddRm/aڢ4C);MõA5m.wQڳIw+׭SۨFXdSg&, zֽ#Zr.TMLĪ)cH@%Ijqؓ9*VjC*[-d'r``e5kO,L(*e?jl#p9^ J.LwJϺwA4# Tnd|a$D8fi?p#8$cMj$FM6'5g16p^4p?C6^DSRmW=jw6#d8YT%L;d$A櫳$TIY A#`j9TeV.G|&G6U+p7V)YI?Q麣e,1f`LZs,c|P>*ΠD8K"TP_Ds ±Qjq@lNe^֓&Y]gEK{),<ɀ*AUlVyqnWVKÖӏ֫,=N?O֫%\]!VBӥjD5*~PZȦY؏“QFtvgsn9Gyptb;WHccj/znBv6nR=-A AwjR . 7$y-[Rq[ڿŴi'/aKBTܧjh ㊈ xt*Om8lAބr*'$)," ܪ̿7~ jvRURyAԦ5YfEXf3ZvS"DTSzEXf sXFc=k'RVizbt@j2Dҳ+6?:GyA?:vsS&$ZY71$ӡCp!vs;V+t(;Hi >E,2nԢ2!#X\#wk]b QEhIHlf\yOx.[70'hR;_$*;_뚕Զ1WAd〵eɅs;.pUD H^wXsޓi;zT762cfPd8,).5p"~vzf!iky;;vV|mU55˳d5glffs5-')n^5#nQ   W$IsqGQ$}*%]1Ҩa>dZnpjZ6"R<jIgk<*qKk嗚WiGJ&bu''q\[){imjLno,kWQO#NYL֮<;Ló_X?汭Fڣv+ZW[im,~b3YۦOjž-s]Xc01s;v4~yni Hǒx3,]r[f-luse~ I e@ϽXӷ @ϽMkL.\z/Yz78||@: n$loUn{rl^g%UitV󠜻ղIRgζq%'ڤHٲw7Է퉙x=K-#B1Ӧ2[;H qnRY ʺN,z|)Z-,Уoi98u~kQigݙ$OW[KXS'sSpb*TUV`@UtJG ҹc:t`D EA=z,veV;2;T9+T+vtdHޕj"M#/P4a9>]9" Ay{t e2Io ͍גx"5Bf9qnd񻎼cڥpP@RO= NRHXԭp=)='d`𤙚[umI;on\Β!3Ⱜ?Iw5%U-a]~:Km{WSc"a*ex 7 GUYj+.U|MVEpPfO@Vuzn8}:GFTJe$^\D*Jkf٤H_,U4J!k VF{J7)jjϥ0<;hS;H?9XNb9U-2땕}:M6Ϲ&,}1Zykir1j(^ႎk8gb!bIQҢIV<bP=*)Xr[wZi髩L1۵E-wҸeE htKip̣imgjo恲HB*{<!_LzU -nh]-gm/*ڝeyIrݩlt\sNU{ּN$%RGO_:Vlp1åO$k[8@tԖ6{ПNNY/?u>jYkl "7yp86*w]ܵDz1R8<椆b=U7oT3Qג<ͻ?LU8Myn-s`j=751cf:j'>`)/];R[KcIcT>njH^$GхNѴKFC'矺;UyxC'׏jKh/{%nZH4)Fu$ $ U5Tsz֮!9l$@)֛$o,8 85SCtwL8I1+[U)>&B1֭zTqT٩ 9 S)w-NM5ചǿ6=sUH٣iTB<֨#_%AbG;@"CY#K&ϳF74(+*êa'l2|jmS΋;c~ӃY캯q1ޠHx`+SRԚ_ֵ/o脇F X C X'ڣd1.NH[,zf9cɤa=(a3ݩb o-c?tH9euBp6HPp3 s"VHK%T=ia98#?>BpVp嘌u-0"a=#Ul9,A'j+˽]ڢY@xhSoz>A\U,-c[q5V;[y*rN̞5 +6Z&6lZ["qҩ(S9g1e2sX LI \9ϯKc7p1E$SL_1~0I)y[-yr/r L?lBv\Q4 3cATc{ə:Xԅ?(86lȤH<,zsKEfAnqW̊6o0n<⠕i$jr^@䓒Ly52`Ir}zюܛEw; 6~SY^=!c}q6&58F鮦 vճäJ3r=jg;zw2ƝR) NvÀqowvUrJu+֧^%T,Bu`sN0$.Eۥ-:D*Hc"H<`9"$H班Pq֪A0BgZ-ӏ-dd`kKr7ڡAhUѭ=>ѥ$+j;aT~u!`ٺXyP[HX ¦y9%~V''w5]˷'=JɼYj'=If2<T$yYdc*ñ N2[?§ɈrzM2ǡ=?WdQe` U[Txq0ܾ?Vn]c<_iދ* N'k{UDp]DT\~nG_; z6GO֟ !篽:3Nbp@>tgl20*+ 'QNs@0/O&+0q-ݿOL9{dEG֛[{ e@mکyPF ͕s~Ue%\ 3vjiXrAk6m>ORB\=Q-8'mØXP #. kYG0 )6LlO `73TwV ߐu K tP{|*?_>1figeŸ@ >Yf)fe>Ӣe$ObVIdf>kI`MhA>265Uu9~u Mמ^ gM©=֡B FQUGss-FU@U9g{˨y bXQ PABBX0KcQ1t \ս*I"+ۂWlPcrEZDB3 sZWPlqPXY#o1ڡRw1$dK1%I%*]l*Fu88s!xw "q7;M=Йƒ$[Ai3Hg֭x_@wɸ%+; >\YZ8';qT!s ET(=Xp{S+`84*U YBV55nRHFw `NTLWԎ"*lܪ?J;7.VI2zl+,`vqX;o`+R;o |ƴh0 A5csoi D+x(͞4M1sVQs&r61J2-ٹzuZC*!$WU;]10=+ϿS_\TL1u8bzȸ oEb:w58'q!`PqU.-ffJ4끒1e\Aro-WM.Ur3x W?LJjGAocP}XwwPZKudm$\f5;P sȹq*G!{,Vvya*jm>%Q<8#==j{(m$yq+ uSˬ+#{+3Q2r*8/4qbF^dU,T`8Tlc0KNp"hT($mDM9۶>/L4Oxc(_Zh!$}O9=j/6=1֪s @?Sv, sIelT7 v2O,;T)TKtg,{.[4v !-A*Bc8U93M `:#˰?4+*d΢|@Qc̜Ңnyj0nZ$".r:4by u=?Uef}MBdă XTɓKgBM:IbJR<ʹmI;h6m"/˞Ү2MJfq}sɥR򀯒6κIfgq$(릒I wxHf4qґ`uO6PV3VD{zֵߦ3Vƨ 1ZҲ4 Z6e&A87 x ,FH"O"UdU | dB-fEKX(xq?tMIē@Q !pg-)YTIYۂ*q`槈m@j{WEHG).x?* ,6÷+:(ty'؜W9b]~gA^<Bl]ݰXəRZ3dY2tVw,eD=jY N@SiD5KÐl3n .ZIbztGF*-ZKXx_Uw!TGA]I< ^ 0;Y.ɥ~g`cZy?J"?AFE^qqq=zM3XmV'90]Il隒7HКXT;X`{S%l2^Ugsp3ޫ#H*?eHظD۵ 3AϨc#y?+N8dnz#y;u? wM2#hNi SQg+HˆU7nZ#HdW?"3Ҟȶf"$@8ޥdX% gufW(Kֳ/'Y"u uV9 ) o&Qz .KIQS苙 Mh\j0;mS@j܈Ua#pjO6 u u /ʊ=kKUGc]%U/ʪ+b-ÉX3lVKO;!\{ona:˪{LmԎSo#?Q m ZH 0[5S"sPHE=Y'C'$؎=9+y~4F`ݻv~`qʢF @8P6)(rLl6;s).XGPJWjsW>S-0zH +JO=ҙ0{u2H,Bjވi繓LՍ(oigc\ШeT* ǎ̑FOʤn&uGϒƹ)nFI5<>d`k\buEL`z hUpέEp urnyg%_hs5gH\\7rxz|i[h";G 55Ǚ,1FW>ٮ Ajk\[*roMWi/-bӬ_ =;U{ e[rZ-clH2Qe<y.vEb43ږ{9Y'Bi#؋4lcw4cb%!*zZ?!6G'ʢ V,wɓT,c$~jJļ2E^ӖI, f jmǟ>̒*xc%E<Ԛ( 5%yU/^ 0ǵDX*Zc0DR[D>s]zT4{V/˕׹\%{ٷڐ -W$+2Ovj#l^{.сZ6Wo0;ӂ:־<@3Z6wm*ki>N]@qևR-aOT( : g8jdDj!ؑr9.]MK!=H9n$il&.&v~X}ne A0橤kHF~Gҳ69BKb)i(cR£W*79SJۈJ>6MF́Nc8BvydJ)2?w1*ҸWqǭ ^M&:KUZޕ8*MQ5cJe"=lY)\sn(\s&w9<X|&I'hEf;άo,ܚ-DG) 5mk뱂ȧ׵\M29[]S[[!p8ǧzg&cUw'PLijdOSUlrjXKO})K*2jHʃڦ/o8Z[I28 sv 'Fr{,S|lp9Hhʤ[ MʤEW>vTOT9,6)5$j<_,w51`h iqTyM3p.89nO\SnU;< i'p n Y8=ErǞ:pv,zՌ'$N@Un y ^v`qU@%szT=G\dlҶLCh<d59vuQ~kgA0sBjm=q֞NJGz j>R0ކn0iBi ;>S(k " wʢuE ?]6F a]\̒ $=x<5S㍤>Tϥ@*S'd̀T,1R'P4aTQ'GNYZw* 攒*M;dnI4m!X CMZ=>7NtrE ջ$2Ja{ޠJ,Qf ԫw1z f2/J UmZQ=EB&g1F>D5)F'9X%L͒I?ZOfHǯj."w (m;*.X, ³RFS$%$o~{Vc\< ;ǁE$x5n Qu/$օ]91 5v0Aκ͉Qt+.f2"=g\Nz":V1<+S|TzMBt{SdPLu p:(?j688Rip:u&AB!JBlgǚ\U3 ]?"zՓY?*Y5A)9nYrrAGnm˽WR܃Jz]#4d+\xi=r2c[ H F0 G)pJq)H>^E68d'S$q44آg$ noJ@#V,)OzTlOx$#_M@n u5~(Z/+J0֒ vn}j}tUŸunk0ng+\D>\}~u#n17tUqtϭG!Āj9ThI-К`$0<Ӏ;)q3\ߚUN1*qJi%g4p:I^A}*>C'N$Xg~UR&#ҘHp8P{)qOFqRiN |^iAjr:R\Cf`?Z|`I4qyjH@{=: *0~ ֧ʋȾ]ߑZ:<*bn/a8)Zٹ!-q9a?y?VIF+68#7Ñ֩^,qyz„of>V<_1cRI+!/&Y%=l^`Genc^dnIQF4穩Z_%6F2ƫܵڴJ)LOvwˈXCArM* L>b{VҤzEa>=6P ,MLxQ}é#HZd[JYsO;OH\x[UvmU)u]sQڣ›Ά{B[A<5oi5_Ŗg[v~!Uq9]& 9z}:Tȩ(皵wڤHZX* zϺYxdsi+ڳ-VL0GN{r-kkKټr~\`֝@w$Ҳvm0Jfڧ:vA Tp;TlwnG5T=*7Rsi`0 z`5"ME~oޫd|3#=}5* }Ǘi@ Dt;G֜{jm"3>FR2XGJjw|r?ZG_,|?h 8\RbU⛬]}v֊+m;te%#Ni#Y+'y" K䝼6KdVdd= W\Ry"ާ+eX3#c2%H>a$Y*H5c,n%'sSm8]GR(~vjE?OSa~F@nt"ڨj oq E,E7Ubb3UylQɪr\H_dQ->%[e^Xqp_M$(8!VN9Qne8ZֻB29% մY`"8^hۆsH ?: Z`䞪:T|2ڬIoM *ejy&F*99,)%)22"XtE{,dZGjVJ'*# %ہ;ǥf9Aު`})Lgi$qS y8ґېpq\/5|bQQLA)dc_jP<1S`M|ci#p1I@8׊Aԃ%9d 1L*c ˴j1U,F2x6dڗҜOjU-9A>jHp~VcVF%nr:Uq[C c{rubqom& 7'jYXҴRHIgaWBK-[n(e06^+bI% W'KVmq*X5iG*Nid2=Dp~Y[)@͖ h9nW9?h[Ɏ۹vD8䴥9XT)8=] K&qVS\ǵeCy"U@Ⲣ2Y` +5/!PO@Uv.GקAu~&1C5H*~Q`n>&!1vJ奸Aҧ?z?Y,9m|w#aQ)*w`aycWde "|ޯ3 AޒG@٤rmi#5kܟJ<0xs߽4Úc*9p {_-2N@UFVyqV|銪/RF04HxfiAS͑WN/'Jr\IgaKs#S,^8; N>E+05&hnLe7e"H?tׂ7]ƪ0wSgeDC[𨮵re mΠDa! r;Rٸr 3K˖r#=2;~[ pSr9 O'“2O!X]5x-:UTw9SZ6RD*89<;;T+H+dR~xQ֬vj֧o=⤝d;u?Oz߯^j[mvֲa$89R9:*px=+"d ͎oϸRCp-(+s&Fjdk$-О™kk7c%U=MC;nX;Uif''_j3Is)Ҷ"8m3p~I=h̲rOnTqZ(؃VӢ[HXIU![ȩbx=\4mGמkuʞ[D+ch"=9A̟02c)'>)p"q=j1`uYw[w3p{Iw9z@YUn{A?V=U~jXȳSD6Cp ~4"Q029 SJa8#݌u SA 5JGuG튨Fj r4I֤w<'3Lʞj@Jc"YݮHVs[2:26pI>خB* r& XC$03ǩZ/rȡ=buGp?OQvCh .;Hb=&0s,'44HFEi_T EҴ*@p TڠY:쑻եX*[$9Y:##5 d,y)=k;,Aqpl*KkdzpYcXsMe))݈nk9vȤ ݍ`\Zi!Y<ޑ}ڢtU\/ ˑx5}p*Xg"T2ߊjA0Hm$HqԮlcOa5I!S\)@< ?3w`#֚sۊj'Jl?*G'I+zyfYSUTi [NJBsT2i0IlguUc)v4*.KִSOXP}ȫg墳F>A[W30jݾJp=8kImPcsI`aBI'&=IaBNKK5|:m\CFqi >Xӥ.*?D#cn#3S|9HxiKƴRE |8E8Aw Y:s\#׽s@߽:iJTӤr$F55-q޶ETnpY1!wm[q"tKɅ°/ZMORR 𢱯UXW~ief/~YۭĽ5=XhҊ+#X7- @w=sNmH'Y:7=@3IoJC8 3ozn{ [>-s2zۈ"`{~?Bdc^"4WalB,[EYaCVG,bS1,R#027SSImmdkQyzj9?tǦ+Ҷ)`wU/] -HXT|Uv#F T&#`SX L0W5'I]~URwp8SZo֤(`45Z.#ﴥsTn/ fen tļv)׸Y~WO֠VrqYYNUi37SC`jw$zF2zqJXG4dg ֔ Ci;PSOqL?vBE Q| Q@7MP,Kx#dlcNqL*ʮ9Q `TRX``#38QjK_EۛoM]Qsl®ih>yDTP0vQFF WR#@`+.|Ԝ,|UfP.k>m?,}WFʇGzM]8XCdڗIG7іrU[6!5VHʼn%3Un*:BMyQ Q`ukC@CD#9*iltn &ɤirOF;U$dObLONӭ1~շú U=ORKEQI(^3ի'0?U5ӷTH Re=kjh>vq[Zܭd'#=JIR .OcLbe{bbAcӸt_5$kzDjk[ۤj~b(IRTQEQEQEڭ8 ]Bo #hUo'hă :W*[4pT ╈)Xx<`g҅^!#sA#LJ~\tj9RsUp?V{Ԅ%p)pH?'@SfmQܾi3h~b}ovTqWS!emʶ0JВEK;`+Ni˹Jg8BY2뇙r.׬ǕRMy+J%(tm)s'7*gVF*+Y2IFsc'Cq'hnfycgƯxzѥ"չ. WA&?̌*԰tہ|iY]2ѣ4\?KDžsZ\b$Vb#WVm~l%qP_B.-;Wq e7&*⹣k47qX aL+R{x~5a{p%}z0?ε.e|$z!Lf 7꺰BDjC* z}IRR(RgL3hYu+xa*@`q!E'vH.cj=pg]j2#s1Mv[;9ltYyU 0PAJR ֗.r?:o3֡8NTSx޵X8:$bWVV IaRd 98'QvҖRʋQ e`UUUw"q]PP8u?-,GJEOQYZUFFZ!i8B[5U\Id$2CoL=Jc7#y7#h f"5 bf$y_JPQvn\> HBV޴|0B`y `XjMqiGsRiR` RkmMMo,`E] *xzd]#Q¦Sk8*b]FDs>OJԵK;jWx%ڭ4A$y0&BSڛE }CҶͻ }qs[ <$e\IL`yWKw.O8Xa'lkT]\Ͷ>r%pwZ/c֯G`9//aLwe/\FEGsugҳYfH`oHj #+YY-8ۅvϫ6A:\vb}U|5zᮐN=+OKkLUp:+YRդy^Dx;-fY.u37zf9Vef_-IA = $pߥO,PrZdyiPRL尾 XWmus' Zgj'JB[9m{U9FFܸ$UI#F_Uk٘U.s;1CprjqrCn9*QtQë}*UccW$RSҫH]>RBn= TskzsUH{UgD$Uw ┢o+O =Z={Ҙ8!LnaOZ%F;{KhYv2jȊK2#EU:‚Z cUɐuVu&dGhZVwp]4`H+\0o~5kP:}+ ?8L*3V*<\w.)g9ZBFLB~S4~SU09 c**qPkezqQ^EDzU@M'4vOnnucU2:P~5P`B7QW#_ |v^k8Hu4Amy ެY¶$xy г,tf?y?O?[-4H,q1[DD{ihXJy}s&h+c]-+-}(g$%Kj[hBϜm[].\G.|F=EKa{{ra]e{ɑѴ {#O-s'Wte7W3J/Vt9%W`ϭTէkm#sgrs|f=SoRx,pkM4Q/_$ĺ2}X֤jy1ƿaHQUTeGZзUFrjP$@m82\i Ai|wn@5嘺pk5ecɣC#i:VS(1㌑Kmqt=H:Y~5dhHn`hgm-w>sXZ;ebI{Ufe =jJi1pi҂Ux=~MbcsOzCҙI-PWOOoZScHjҫ1/jL?n`hqbIpGl~/.K[Z[$fPj(+]&"e 1[ ~m!y88IMQariڕKld:p2MèeVf{3ˮj;Zme}VgᎢM&ĝQ%d%[7!kX*,9VS4dH_i 5ooK ,ձ*جwz#3U;WHr=VX59o2l+QjߎTnQ[ `E->r^ٕdde;7Q4k=!SXS=k9`2ڭ;Wݴ=&vk> YCHuoٔdZ$U}Gzyz+dqpYSeoZ϶{5 ֺ+Kmmֶc@jmԁltQ0F^]є`i̐ ~f_OJib8NO $)- >y{''d&Z,sU ȽƺKi; ?/oӎ+MˀOYvXW,\pzr"kwC;pI$!9y!a[HG?e]IHV#ݬ!*dN"vQ -"1G sv֝c 0_?w}; >堰)XJh;PjriӅ3acչ, 2A$]ƭioۜ̀uɫ4tr6ս5NU^㸫z2\*ޘF8+U=*jw~Ъ&?JuAo#۪3OLU;!~lu靐XW *3鏭e$Q#HY'нv@w&(x&]{l`v=ik}ȨDuESғTbxL*(qx%iӷEijZepijzSU NMfkvdsO5O[6i{m$Rw75=wYL$ s֭[[ffI׊ S'+F/rۉA=띄''{ bs֮]y c'j໸fZ,.>AN`nm z'cR[̦ Asl)UYlU XFX K+cS@UYp0JyﶖE r@ ҕp%RHˁ})$ F)yqOBN8 Sz~5O-, P:Od+GZǖ);E"BU i2EPYUXdx?k62瀫*)nykBV٧@.Z2m-6 ; +KA._OPJHVnOW.s[G>B[ySHnbn*пtU4:Dti ʩ#Tt]*T$Rʩ#U4:Ddy xֳ 8ʞս$k,eeOjeWRaU3Umrjm J7AVfjj 'Ʊ5mYqRcPܳ3YO  agur=kck] ;V}2:lsGZȝ9c=k>v(*czܗg%fi vcR\䟘Y2HLU9=tvm2GJNr[*w[*dm,?Ug[-GN( 5iov+Fkk*Jpn,]݌*Le\uao!`wg$VqC$$36e"<҈w;@􍧛^I871.> eQ>+5ϸpZhwInwJEM *m.DR2$nBF bTO~ґFQ_j@2McP2N:SZc;ri!T,qi,Fk􍋷ZZ &k5dH_IۘTw5 ͸Mprf.>#X8\~ b݉ؿFym )Bbxy1 qSbv||sW4+3#}OYѬaSO62SlpP۩M>R V4>\+GLӡК0Ļbsх\Fh$-@=Pd*'SQʪx}[1<+kKfہ7Hfq%BvHs.|RXӪJ}QEU-V2\ѝ߅foYUr~KSt"@2PvV-QvtYG#n*593t~]Y9V:ܛdS^9XwlFi kf fص1ldnbA5b+:p3S[̫XurwƲa0~5,%56?,TH$RW~2ͪ}4sM֙ D|*{2oOq%<⧹03I}+r_Im2O c1黩~gP8?I}Iʈp8ݢX^dC=dT<1fGGR~_jyjsr1Qߔ qqɤI] sB pv'u5pIC1X5҉f$)e >XZiZ'+gNÊd]˞Jr푓a |QƠGpWؘ2bmZf;;v Jq+{CaT5YXS}]VXc3TuujZƜ\W=HҮHռܑ[OZs qQh R?_ÑK4jnfh;EC:E捺 בPE;ozfT?b? mN3VյL+=q,nqqٵf^'57֭TQE# )V` 0z+ {y4V9Sٮ~KVd3$[Ok{ HMogOJژx\I;)pͪ81r27*Է2fVcb1Snc9mKRF#v?Zl >H[7j!T_ V栂N4V"T^A/1XwœVoTJyWAz {iz f[QfḶxeeūĒ(,ּS@чVpk].c$ `- Ack7i ME2NCn6P|*Xwj%Yޅd ZmJZ-vVlx nrHQBU5g4'kgM'g' ǜ=ir; .)KmZ~9 2G!}媣 UF 2CW[t>^2UF&3z j5G?jTqSYS['+"m/?Yw)PPq1QbTiJGsQ)FWu -hxXgdGAYzDjnu؇4tfs+d^hnOK%(CҦ[EFZ3֤c/ʣ=j^KaO|09>Gat~_zVbŐ8&VVǜ[\|}]xk|S&X9⵬&-< rpM#0[X7<*5V[X6)$B5fSySBsZzvs49VBquj.czdun1lҴ([85\][?QyȬs ah$gQoZ>(H-NO(Hȷ~9mȶ~y=}+KGAINHc]7^UaM'T(N$U2y>wphxP~ V6jlrH9md?zTw}C5^EHcV'"yʱqKch׋X'XpA9a]] 1l6(0 ;E~l`W*ss0OΩ+sԭACr9櫰p1*6W H*2Nbd|8A摎M!;SPNL9njN֡=z3g5]zӴ+6-ub6ZvdDO8Rvl@yXHeȬcyuf-foZaY.ƒ\v-"M{htb}"tDVrC_D(G)Z# 2cVsۈPvmg=65[ [!yv{hVɸOZ,L[N2j G g2=IO${pVv(MQsw/T>\823ʲZeovOae5X(rWmr -~6VbSի B#,@}*͝Y1d\ԳJ F4vfqV4e!zniPzԻ0 ؽw0i]]kÁ+O<_JmfIȉx]tH8OP0GNLr$go/;*&}+[KX!@F @)R0рߕjو0F k>]12Oy-te՟&̹B˟ҵaM5gg 6նG55X`=Mq>P3S\(.q ֆG5WcUռ23ź7db@jO\⠇rųҠcC&deT0OKmu5 XqZ.Bž@7 lRG@:k q w!REZry'ң@vSQ[۴HksK1-܅HXS?S*<  [zY\J@?wGi-S\3q}J!_jfXs*hb+'Ҡ#AnbYc$Qt圶Nv|r+w'>e"c-'k^'#wj q#Yp%y 4AcCđA3w9*Q[C!9܃'bc!8cOkH.RA{rW`㹭tPv}TYPCƅEYo/ɃQֹFPb^]58Q޴46u!&*aYePrjHEjkȭmف8!GYԯc HP=jkۨszo"egkHHәd`oa/6loDmA d.1]FOa Vդb KVeW֩12V]dϮMP;h!ҾyhIf(:ڑ;Pl#rڛwe&.rYI A84hߥlW[;zVz(ǩ+|Prqn9?AP!!Ie3P'=3PO4s!O.y u>_<HtlTW?.O5oN4J~QW i<(гIe=E4Iay` ۹?t5>2:Zٲt7?9[~_T2zdv{aoV-ebpA}+:̪IVn$B@ۖkhNAy% U7H#>zLz Z jlw!Wqdd P+J{Uk*?/ }D;z1O1<)ְ {d(9I-COjǻP8bccXڔ9TYwy .AoO:SVӭr0E=X;(|ٺZWڡ+fTCfT$Y񚍮nv*2]NX4 멋p)\HIHm;`~\$6 &`* leys֍{Ehj^umYm ~lXŽޟ"Mt]~V/Y<vsVtݮNF 8NsU=;q+P \FaL@C*+~PU~0'  6c`R=[F T %R4gty{lY&tޓmPsW^F3~Hg$E >u1,3%>mH~04Z%Brkw3,v <ɀēVH =+g_-ҲmIxP5mToTr%C-1<:6!JEۨRH5ؠAʭU:na2 ?/#sZ1M*~{}oʵcEf|l𢙦Nj#sZ"pDcUΪjpX B1~mXicZC_Es۹>T;F>w/y""mʰ/&k ʣ֯ih`ֆy .e1f=$qYk#Սr.?MK[՗CYx)ܽ5 7"YEȩd&B@jŋkt*y5+Li6&;X4;S2G6nx.* }j.zT66<홙zjHmq򴇟em,BIwEMuaKeA8]O1ڊ(w>ܩfBv\7cl8+f՘HF;׮bY9.wzĸygGoѲxүWK-GP+O÷Kth"khОn>_I{*.db?3\澛o-?3\ry#5%hy,{WB067?W@o 6Q(PX `jsUUru?2]FuVmAR>:v^f;BE8PkyY_ @20u!F; +uQAE=V>H"E9H+u@9_ʆ[T Ȭw9f[qn'saw0_8lH.λUcΝJXpx벁xFr2H Gx(PDDy5i*MEP;҃ұxs+/hwppk+G;+ &gՌ&WBQvWp? M[l7A!SU,6VajQǿ#4!Cq[Q5*cڵLGJb̀T:8*lv=!\U[i?JwdyWd/!wJJĸ>^&f26VNPJ1hZX!d߷,s_BBջcՠ ek YpAS5ov6 ByeA05/'T +q*Q $EbcmzLՉV=]@O;ը#(yUn*z_*,GcVRg]7t4d,#=jR+.AD2Fj ${pp=Cy*75Rp?bӥYxb1;W,yذ}*͸iNAڣ1$w5qԚgbf³5V2vB` 0ONjeXCY INwrQ?xJsFGsP*ǎsQ(LsWg4sbfqH3V?/ccmwSl`Uzf7ՑKF"/ ?*"UsGGZ^`[ڳ~RQcN)sF3Wp\HUFsWT*}f FM  $Q(ɮwj5ǾyNz I3})-HX1fiރ| Su9Z-*—e* Li0'ҢxJāe+\#֡dW1Z^Rڛcaֿ#VCXֺ`` tQEQEQEQKEQER@HH#bոtk_-Mb\oYKȫ6~U*Ɲ|WqnMEy.؊v$1\̈́[wL BVʗSΨɃT&^Hr($?^ЙT^Y=s8ƺnQEQEP:Eckۣ٠˺`L.%rY̌'5jnjH'\RGRkaۭsAI9&GcڃϹWtq(zc 8pAs$V`F2cYOҹǙ";0ALwf`NKbGZI8*6Jf ToǯAVVSX:f6ViSJsVB>y*˓WTiUQUg=2`|~u5 "IbXj~Jն ԰Ҭ_|ZGA](((=*;f[kw *+V0+7"K n Աم󺌳p) AQ_=jX t*Hѹh`ɫ e2GQ+ǥYiceDl1Rd+p^l#21 {G\!* u 4 J嘌[8|qEK=6 {(e(` _V+ܓRKc;V']/ hVe]ɜUpsViZ(((((:S&F͎TgBH™2uNLp6SodHlw8H\S.Xe,qơ@W%8g-19+%7³{u54yc=f*dS y)EL$UNG^J{ӌ HyuOQ~1ij|Q-(PB3J6r@i I=AeKjL_}g]Zv,%<B1[V7o$#jӵ@AD֍[(((((a ҎQְՑ̇*=k-l|=k[?zֳN3PJfaJtES80]ɧ!gF@p4fA/i!,8ZbNژ{U餎7p(\9[D]NI$"KHd515UY ##+WíuTZ((ڍزypZvV;u/֫B']\3sX V$ƸO;K!95h载i,U>¦U؟x*={ԣ]@ n# q tc/e&sJ\G.yf8OOy&xU9Ov}j"Hr)ȩ!ny = tF>gXA%(Iڵt?,I++qq&99=jjo2թeNpѡ#p?rtRFGkNQEQEQEQEQEQEW) #0 2ӓZƣS; 0Fウڢy<':S$h"NB7B'^O֞NF́[Su Bw#'ӟ <Ɂ m֫BwMj%t9lխ&x` !ԃ@sW9R+pJWGR`af!H,=k93 bB{891RqbJzR5⋖7 n*${_wE[*${9[ӥ92~ (X0Y.2'EHANG%xΗzUY%PHA 4FXaZoznՌaP*Op)q䞞s׵ZmcvBHSÚ-mJ9ZlĀkj8 Q\>"DBm_ZT*IN((((Z(#~}ߥpw( +FBP:URFF*.PrQ#QJԬmSQ{I9KJT`Pln#-LgSAANL bojpƦI*50].;4A,JI2gտM:8U4=ϛ$ҚBnURXji ($i۸$/?*3N,d`f-SLM8^ eUi|8_SNnK w7AVty$9\.Sz&'/~n1jqA߮}+c4QIEQEQEQEQEQEW'=òl9p$z!4 ?:R#)Qr/E.=-''vqbajՠFVny5`zq)2CGq#6v'C5  I3m00hckЀR]tJF3WVxؒ)`SI9 Nj5\UO ]7alaWTizOIO35s|ǿs @SW-z~n2i8ʧE)Hz/ALBNj4RHtNƙ݁Ҥr[H7(vB{|H_ t#M:zS;GSO)L7pQ0 lڣ*APHD@(?wS5y#`H8@]ڨ,rK$HHF~o>!  UKTyueDS`0vj먢((((((Z Tg\g6WӢ#{in>`$SU,1- 23WvՌg晨Ǻ N>v0v=uZҤY+W`8ֻl溎y((((((+37/R5N3LTq!^ 1"ϭXe+}jvRzQ|e9QK\wX-s*IW(S1)Ư$BFڥOGnF%mX}q$۱ByjSqǸ6~+7VLk!Xy~{IbT@ Q?}nJf!mC88*@5&uPzs8*($O''dX!Lr/eFic%a87YvDA)ѕMl[jҷkYrv}> ^Ʈ_"vn2*7dǡ<  ٻa99.܊5cYX 3 m]Hr Ҹ޹FT oTjӯ_.96Qҳt"M8jH1GeA,1M+8TLVyޗG{[m?5?Mxdn+u9SҺ$eC=T4QEQEQEQEQEQERGIEQEQKEQEQEQE-Uwu"@#,"A5  rJȖLlàqhS3±Uǖy匢Smۙ_R[LTgkj㖭[ca[ rmy`+m $'کM§w)t* G㊂%:f lAZ6h%s~krgs/Vl%=y+bH nO5[Ҽ1lCH:nZKU6V܏% !Q ҵwd Y^ 5z5BqZZ5<:Vރvdc֮q@W((((((()()((((52xÊ-*&$c2ўrs[ AZ*P)r}irisIAEekF~p  ˌ/XPZ-^j[OqXJHҩ SAG]QҶG ZZ(z@Xx*dzUpU)w*Sz͘dQU%$ma'2h!ݞvc!ݞvكIB!X\皎ЈX4b#g歍RpU-v~eҭ(*2Y/qϵ]ԉOrڧV 9qֹ9aް`єY*g KwG aݜpEmd,l@ɭʐ3Zą!ܠnUlc"---QEQEQEQEQEQEQEQEQE-RQE-V&'ww PKCҰ4y|BoN+KsD+kkx2+cQF3uQ"(rՃjhN>jQq(A~j TӃ>aЊ},0`w!<R·VNKN1K"xN~d~uZخV^}U]>їT9FG=* Kr/]*Ǒ֭_V9V z>`&j{&TGRD$l_X$lh%N}+=#e$ :йY;nL2Y_1ǵG=|֝k.>ɦJ̡L(/{U=LjOW-[1*lK[DǺ/z((((J((((((Q: y&KEWI&Q 7l10r=+b+Mi8ltZpqlydtkTr2h#pǯF) Ym, }+#Fy*v# G\@je.J'jT_cOx8=;1}%X!;q89H[h5p̷D/ٮی p1w|`c`+#(((()((((((b` QKz38Kk+S+BgKb!sOI/=JI \=*[Ktrĝ֬QGoCP X(VqJ5 1OOQEU4Et**zޑ0r=DD\"=# ڝ^ڲ2eq֪jQ:eqU+Dee"!^[LaE {wԅB9^ձNea2pA.mtZ2aEZ \5p'^=a.fFwgYi |9W|[p8QW$n=nc}<\njev Mdp!E/R>+?Y6x<+7YP%ʒIW* Wl7gx:֖,#Wo3vpOkiĶ%yhX'ap }+[[cʘ$H 姷{#Ȕss2?**Jj>v8luMIRL\JEtpJ08Zu-QEQEQEQEREP:TZm~1L{֬k}VIulQZaM[1Ǹ Z@Un 9>L}W9ܤ!'^iJReWhl9wZA4`|X~2M^Я&m_j[%|29;ȣӂ`5gLRn&|jdccGPTH&G\Z 4),/m%)r5[_hD-mXM0֭y &Q Vtf(}ڛR$@n]߈{tm6ϸ5& ɧ1wgU? 1}ҩ^\XIl9*ʼnG<)u;'G'j=SPI#%ܗI"X!H~k[$(0֜10j0JEQEQEQEQEQE(gҌ-/HdR\u&F~t!o߬~e ҿ-4)2Q|֎$`3 Ehji_11=k׶+I@}ԎZ&SHάLJ3z*iq4A4bn 8۠N N3v+#LօǔGY~ۨEu;v98]+pTT|[[=kRQ7{;]G5fK0Hp;漃Λy<.Op7A˒zi(|AWbbxUbk]->щTdW¥'$2-eU P{+$r^%!Pz9$R]L$`/fp8=8xY巑Cn]=*e [1Z#EaN+:o<ʿoSTt#{vnn1*oZejn>28A[c1 P۠LVm57:2ZH$U!煕s40%?3W3n2,qJ`Hʫ[+v;HBCea*e[6֩=Ij(((Z(^uV>%Hn>DM5򁟓7 suNPs{VuU0xک +""|*e8'ұe2\Y2OW%5-[ {V,Vi1uUҶf1j!w/kJ9Q޹i<nzprV +p=̛TS\;1]YŒw G8Z|lbwwZL,pqXdEnfEtEAoJEޛ&o]v$i;a7m$Rʕ棍eXU#<0IBK+ǿb cV{E"]=~9qpTh8{Crq XOz#VRx+J;hF=s[D5-ܚӂIUq$$+ުkYm|*؝ \ gӊ殼1Q.]v7~lLRl5%SIk/ [fF@uI! f/okkQBPcj{,bP?*ΗɐTX0V*X)rh-%QEQC2cޚ̨2h) )z9TKHӁGH?KnWtlY zT|v\N8dIoqqRkdS46:`?"0IXBqeoi>F-6?263-IVK]KJ$wnoj,eö1~Eg95&VGoESgqdYVd<Z\,p֚_FWRuQ޷TԇZ{';GڝaBsM76UM7DC&WZ= Ia pZ#B7']vJ8_֖+hZKHSBYjQX(((l,q~`zl+ePpG\̗rN%scGyeOSQqPxTmY~[e=?E> /eg~ J NdV Ҹ6Yzs}=pp[9Ku5°P+7@k;F..0P!oJYQP!}+XL6k[ XCg$u^ֱɄ>$FbXf$ɒ(5iPT3> O\ |*}F}AQ[n7GA[hE'ZnG`8q1؃K\`cjzvCOL`ڰn;idnzVΧu,1'ұ`QI>բE/%t5u4Yk8WSOEmppǃQ4lǠp $>5^[8yg%>S=*y$TK#]v ?OrG$oMA]}wݷi& 3Cku$Y|lzR ʐT+  AʛMe0i9\ljcHFTq\ֽjK\nb}2qXJaۚʷ`#Y1|#+SDߩM"'۵t:UѸ9;QߵoiW;QU'1M;asi}j++ ci$ +Y#˅U ¹0snp*eVk2Aʔ026G6C\E 28u!R~UuR 5]XH}@=oHy{o+[M7.gsi4<VtŀD-!5RZ{XT38*oGvEspo'{M=lQq֮سlŽ5DgksKE-QEQEQEQEQEQEQE-RQEuR6C \g\obq%1QEfMnG{I tVoƵR8jNJ>|Tǚ?Lf?T'~1C )$i0N{ !;''֬!kpLVMgMۉp_ڴt1%8_SW4`X2F +i '́? lI%$H nitMuCcc( -o5;v7)([ k,qs>@#D( xl:#D@x8&TpBpӎ{{V`GQV-w0;nUd R[N+g*$V3%+,\J .!I9FWCc<Sړ@cҤk'#']J`>#Qc}k.qHcW@ԓ6Dv[NI]pO (K\ =j+D.8nKY ֬i}SڰvZ1H4Sʐ8" Ya҅o 3MU{y}h^CulV>퀑>º[-H~S[1ۂ̡mVIhH`ɫPFGpJoa]bM OE \cK<)q2Җhx7.> 뒕<'~8) wvE %ɡ+VtQ31֢\H#2 h7l#+VZ q{ԳeoN:܍XáʞkXKʚ؍XáM->Mus8~puަJ4p`ЊPASi([vp1w94QEQEQEQKEQKEQEgG1dRrsޠte9QSG,lSj(3Qf$gjr#j0sj(ܩZܰzՈ3@0pzzl֫؆Qʞ뚸n G {Ճ,o5xVbbE"N#Ҝ1*=i2T zҲ{JVRiޱomAPVe*}jkdKmWp?Z[m~.s]R nz:WYӎWKi%iɲ<4b1/Vfc+\Vc0?3V,n%|!oj9?Jd'-UeyS=ǥ5LxzmeR':ECt"H9گhw7W4,,~W}c#J(CAO"v٤XjeWQ:mS1r:S .r{0rBҥAҊ()h((J(HTZki6LC+pxBIl}* 5dDMl꺳,l 4N*j-!,p=M`Lri6w^jUQS6iyh 2Jus aʂqGx 1:$X8=z;px 9})ǕnEVEdFV΁z8?/??l+=~7ZϽH"Yg-8j ZiUX38zwlce*\t=M2 0AQ XVqWœW-2ynz)`:e 56r"88ۮqQHFsIgj{ȧL Š|"MN3+zDԺۣ}%Ñ`zZO_RRQEQAU]EoR8Qσ dQ7DF3ҹ'I*z\L'=88W zVdWfAjгynNAW-o@d 8[ " "ފ)(((Z()(t#4f< ⬛wGf[,>-+K+$Tv˝ qde-Ɩ8^wR"1V$KBfN{Pc{f'KYLsRO TZJUӂsw5u.zE rB\RxS0#1d\Cc ;U3vf2Hv_A >OuzsZA*ȻAҧ22zԱƸ8:-ҤI=_j,`-1ٮwSw}UP 0rjɜu':HH`*A(ϩ5 ~4WZoS&znU2XE>*f =MtBTA!@IA0Slr$7WsMGIcea)]+H+2fGsJK1Š 捉(F2;+ C bvB@4|P RӢrfOֳ5.ȇ˔wR'RqwMwTRV,2r7pqky\:b4۰BE==kJPxAWp!OJ ʃvVr$yrqZ "mȭ=zRi1KKKKEQE%RE%QE=ia#et=Y}YYcSuRI9`> "Tl,8*xڟlQO#M4I5[}\TVBGe F>A85n;Jgv WxZ(r#*{UۈfGmA2JK] d# kD]MB9#ƴjj֑8gEUYwꌢa#w\K" eTe=* ܲvyjZZ((((Lx>R)A )1>8B?A, ©5I3+]sk ki :cy35b;va늻ocxYRWa/![J@弙X)F*)ϖT)yf*+>@sN[e{ӵ.evpAoJ 6 Wj)D3!;Vrf2.G8*]K? vs5{q&JD9?QKɤvS{_ߐI<*֜-i3 :UEO $3ԩor*@x/*j  7Xn$P80[*\cT5LAX,QRwQ }TthԚ]fGN~6B:6)u Xrrz-Fv}AwH3ukoO d歈ÅjT.V/nTƉ# vԮÐkGLr!12a⯖A=K=W2)X0 ƒQV讛Xdu ye+ڹJ[)Km/<0X7ZHXI*[r~#7׵UVj W႞[{VMm,`wJҷxͤ7G淎h:mE~J%d}rJȹӥ%ڛ msUE1ߕ@j\ld˞Le~W֘aZ$2ᑻ5_Zk#A黡hC=~n  ǭ^fo=i_I73Fd[iu Il| ֲOO$ *c#FcT7*cNWz``RUIYS*J_',fc$J.eQ ]F1Le\%Dd|*ռL!Qwz"~U?+ʍr`CU턓d 2,&B]df;+>Iw"=x0$s GSLmϖ<&qi-3C/hG`J-6sUŵUa$r)$s¤KnnՋ%i 27TSqX _B#gڣUw11֧s1֬G?SL8j@8?SI$k,lV׍$rtY ݫ.j &[`GǟN@ۀIkI/CTЂ1 eM,XgZO>X[*NGZMO#tdwb' Y[lyuVu@1uaɒke!~:CS؜V EQIEQEQERE%RulGܲ& +6;{$l0k=Q :~Q\.?0mH&2mQբbB'rt;*nlrYu/,-oaZFn?kZwn/s1]:bόisʲ(~g$gp: $2Fc).ݽNEsq\`tTḫ"_o銧jYb㡨4ے@?%ݍ䥤!w W~8-j\hL`9٧ɧ\JW|Cy*̖ɷtkunaiew?2'%*9S쌑nnv-B noN@#~i$ mpإĞ|,6ҭi$,c.%zbiw rV>`qZg 0qiE#& +.wfPZe{&[O[Z }Izr yֶ8+WQE vl-RQEQEQEQE-SҚL_WYqTfH5d- rI}W5qj*-ѫmmP|͍ЪEʟB8\C =h'Lm}*'y[ ?bbv4\) Z7D9x)#R,2F͵I=Tt<^޳E]BH)jIʐV!{qFVAbںA3[}=HJ921Yz ȥ[=o?ek)gnAEgjn*`;U a[1b{jE ,HMAxԲAԜ]+?*(GqM3[^hQu' FmjDn>P/#*AZGv$b8R@r}1CI{gچp$; Fcx3O QP\[' _2I0 5T!Ybx?nc,lCP;Fak.+i3n_c\b! +QTrȪ[J a{4kmr7)۽&: ҵSSi?F*ՃSi"(] VW,#Uמ}J銹?zX$wTavxHWҫغ/^jU(((((2bҀ; @(F{PJ*)Bї\}3jOwVkp@ Ozc0 GH7qZ=i$>Te+KM)B[Q2Jn2# {b-n ] JQ8iy:((((p 'w$I8*׾Y;wgj7nJ5UY&N>퍲1&`R)9:m`z&ǘI<{З@,6k 2ط.W g# ⤞lR N88[}+Nh@$v".B7?+Sֳp9XȨfv?LCd6U[_Kd|f^tpV+:֥Wht  QڷKnCpEjWL7B)~CdcsU -z˾ {l,[}jq 5^Iyj\ƨIu,1Tʏk'NZ$ B~K$#s,&VK㹅q)Ď#sܳ2:aoUi.: x|Et2\ZmL6v֮CŘbJf0Il12L5|Ȁ#O)6oջ\r28ֽ2c;U@A`h=@ Ttg8icT-&KG ey qι%8ȫWXdU7 U7UMmJmRyz2Z<7;cb1/\Ҥ9gtgzUJKZzf"ǕG5wQ){Du 8d}$ER d"E;Ӗwe8+3W[Ei_UbkPB>AnIrR&+ˁNG[t5wLH #D;gӏ+ASYoV &-'Үi2:'P\iYc;T I8KU;юsPAeb*H; 3pLd>B0YK|]vRQEQHK1 #"vUQԚ cVvx U)5jA`qfŶ,֪"3W_TD/ow r9&hW292,Ϳ=TP_$J U3#Fmb< k'OjO7zSpe9fHT-I9HI-X[H\7 "Z1I# Zn`g*%lR0dgb)r><>#/ۤMtd=[t)[ui[ZhW)[2fγj;-Gk6C此h'.)Xv43ZI"E9#Ql;ryY0yr/&\ʰ={V=c(t8,dpzS`2?!QoZ7p@*pHn})]2ŹW {uuO2'WrIJa!9Rmz`ڤFŻ{T+y3 AsA/$~8\BHXsrw"\Huby,}O\[c4 W1 zfC֋;s7m#w_qMZxco!pp~aZѴHѰVlxՑzPOUe^r;1NҠޢ $2/]utTQE6YV%w.#{$ e{ިO);eu.ÅA;˦t˛lYRb&gU<|v֨<&_pj&&yP;zj'0 -ڣ˜.jզ%OVU*kHo\՛]6KI*f^wb֤Gx=w3T695A ؤhv%Ae(Cgm.mymFp:<#Z\:α99ihR'ɭ *Vq[_^޵(Z(dЈx=1\Υo_|5{xympe8 U t}*}(_ nMZ-.~KK1جHÐb5[VU9 u:f;pG̽zSn (|ѽɎf)qSwjRTu8?5%ʣr9Ee%Otz}2 PZ"$d0UKpc;pՕ@QZQdFGF#FGjεR\gTgFO<<  jLM3E:-;Hb=e^ Vz> Oz:LJ{j.lF6=Ԑ|MLB=[+tڳ ՟"?f̎qҭZ|ƯDF,rKy5Y6ɿkL8%$18Pqփ'rIr.gڧ.9fc/y"Y4!GI \>\TB)r 5\12 MFLѨO@)AԜqZ.(IcZȃ-m;4ط;3Jܸ)9v 9E6;9 ͎Gr+jݬMNMIX;浫Ԓm$w5]\!8t\}e1樰e8#54VYc̑NS%t,pl XnO[˿U^X>ثV:z^~*Tkqsfܫ Ӟ6vZܟQMAj{ 0AX:bCqX7ڥԤ>u\N>ZobsZ ŌY@I5v++XRs9oicoo* dઢ&Oc^n 8'# s̘^:*Td>3SIޒc|VmM(ZFA:ݫm+"I[4öQ4* IG YnHkSӥS|tW FJ8ٸg4ϴwOА&$׭;MTZy}T$Ϸ*=H~D2]A*U8$g-ڗg#?n7cbcW@}zQTvºSA 4d?+*}Zd5x;ysL3 ^A#%+"wgDdzVw{R~I?v}*u?ukcקuG\@xi }ƚ'-MzTWQ(F>_ZۙW\n֫_C#-Gru676 ma0n=4Ho#+2ÑZVDpF\Ae%L2V;>=9cIM2Q}HW=Pjl ?O ;[8=;]c=ld֯ - W4 1qq ~ ]Hz'cZ`2cC_B`sS/`ݷ:ɉҪ[ v6jEQ+1TVeK FEEqC?v,̡Sdc y ~_c޵R`Yd .3w5}Cz̰o`CaHTgSLV0nXgWXAnyF?*콪}pUWMpҟ n7) >Z=1YhM LT³^DpZ֋˲@̘bC"Z0KzSК( MV`MBay\$qU=MT:8m XpA" QV8Nn=8IqC"QW>^V$]،&R8ft;1H奈vA{9i"8lѮZ+dҴS2EB2w5P<=|͸#p@rێ\8pŐ18R/C>A)<;L3=;B7$fT`NKT/̈́uS*Y`S;'_5$C& z[EeH\=Y++V^lΗQpFw+<4dV2)Rx6[ʗvNyjeKeO~e[U<0Bڅ÷ 1FӃʊ(OUA$RW\SH2GP0bx"5B^#ç>`sK֒Apc>nwCJXaV a 6 (p֮mx]Bv헅JukǹMׄSRyr!nv5ee J\afcw\jd;zY"K|cNڲ|ڔK_zU y\[dj"HqJNeVQҚчjĹg\?NPWqYdi6NoϵX/ F`{zԚmɴk0]T3$Y s]\RN"țבK!9Ғ䅈?$FAEWQ)c?Jy%b,21ɩ dSS匑ۚ]݇V60W@pA%dwQP1u|>p66 oaYC:܂A"GcCVM"Q#:g\uu $z\9?j#1Dmz f0SҴl\?+pGh9${N21L2&PN+;TEu@ym[^PbuOAHiW֕dUl t@zɦ2spp2+i 1z\u̒Jw ǰ<$j`j}s[m_6NҶE*d~}rmCqv<=+.iCf#1U4x5PB̡^7L{ɝ݉n1#N圜aQ̅L&#KN:T (+JAiKnO +,~e㓚!d7H򪲜J;fLZnݴv4ҔS ~U8J+C;F|d;ݩɒ]PzZrY*E{f77 {sCqFٽ*kOvIsr*X瑑 !eMXߑ)ŹQ" HirP&6묒#CAUo&K r!]nm%!,kkK!dMk ye.9\A-ē& <\S'?Zཌྷ>݉oHjUELuK 9!dcGjfdcKV^yԍjVt'VYȎuZA.H_@TuOi }GQM1)  ?F;4"E!w>=n#CIR9YFFq]QZ#D`#ޓyaTeM [IUv?Zo0G!9Q {tH ڊ=)Zb Jo砮" p$A;Ȩ85yc.۱vfkƍNn 1j ;Rw?u̎MdǕPMS%cߊrA-@#,z 0b>nէ[eoDޮ.׸SWtWk' 8QMnwc*)2HGzlҙ Ҡ!'j&8}ǥB>j^>bq9QN N݁P2FBʪ2;P @qE6KYNZJhsso~&q{UǺOS9B|}Th^@DfL1$Xè0he\1vPd0r+idw6p]H6ুkZ^ɴ~=1Yw#}ڥpec1Im;NsMCtM};Ojx53סhܙ*Bſga$ͻq-,hс6]֩<,lcWia#(~>-<N`|`'z{RByȤAtjoj_n'!@T`m~=Dd)zՇEQ ͖7vQGzj-s:T",j>ULdgEFGjEu8}iG)QJ04r*$%<aW#$uɑqY<hCA9銍4RdR:>X犑#i]Q9$P)TNI$a:`sLm<` 2S4ԑ%?!h%6> M ]W4ʠI뽊e$9]Jƒ/;T@'' ` KKKL2rzo^dn!q%IY7*A$U3 U,QֆrVesH:t5Zy zdp:z[v9~8D{ b+1(Fv*:zU$$%jʅU7cjMaU-֮Zcʙp)̶Bv婸`p;TW~e`PPz0r*R$gz+V=_'6_ڭ4WJJ#k(WH 3[cKEQIEƱeMpDڸNWlmbE:,&$:օ|R09aNЛh?&o ?AM!V1Y3Y~ojbwSSp Pڕ853%K%=J}M>)J'F($fwf55>[gnޛngQ('swgnM& &9vZ2O'-J]pG\Se0],2T)47JÒ`=Iۿq){@*7m5w$U ;*FNAx qZZu#FNcvGWQERE7Rwc$_g\OM0ǻq4@)”:( ҕur)XurEZ+#;{VMݳ%NSWv1#6t⇝jC|#@cn3OJ}̶;zSdvTVsoԒ;1qԲ zDаl=Z ⺌M72?kO>Ԃoފ)(Z(()#޸gSi*쌻zzxLc c#&0W$N]>Nrş=?ϵsPq,I?MLbL&$%*8帬cb %n}*[x2TFcE?w'-Nx\=)QmwSHFjc tn:uSx5#x/g;RwL1ϥ&?:n4GLP9JCP+Fߧz8pHҎIydOz])@ZRv/GZڵ4 }*kEY mɬQXCi#ˍqSTKh4alP:ZsZ{uⴸ8J()hi\с]a-zzU)i%21;0O| 9fr>BKH}Q *9%:챪[JXtXz60~`TrMQn.RDckB3yPHꖟEREr 0@N,Ada>#$:[acxS$EhbՅ?s5 'rzi#5n8#5}:/Zq_alY,19*a2aaFՙ>rj BG&$ޚ@F@ɪy4M:$9q>4.aa&XŒb߼۷P3p1B-Rn\ T)U`N9LE94ߕzu:QL8N3#d)a|tz%^vt8yc#H0X;FXz=z5vg~p5C(Sèoλ8YcIWu ?uJ\}}1ORE%QEQIEQE-QEQE%QEQEsMd%qkJ{W2WH=Z;c*Ȅ{c5E#w@F;Zc Տ$N+ tG}Ӓ? y 9.4jqN'(ً֡;TlǷ*' i`犬 Za5#Jh֐ucYO$uQ<xii͕'96sP`3MDij j3lAΟNh_Zٱ0pmGBaލDh{qZȡ(NNW?X1gnsږNjĽ-E[]@Qpt=0V0 b((((J()h)h)h ?뢮((ZJ)()((()h(((J((Z((((Z()((((()h((((J(((J()((Z()(()hJ(((((((J()(J(((()(((((((((((Z()h(Z((((Z`擸l0`?1CbHفs)m{ S(()hJZ(Z((J(((Z((J((((Aޫ=棎Vٙݎ})0>KH֖۟]dc(aI#)HN5InQM6)dd\zUHnH|8n9D ueX2 ӨZZ(((J((J(JZ(Z(h(jKo?vOr$p9}D9?"r$I7P H<+ O ZV[Zs GA[\QYZ.9eְ]5D#?oOc[ QxqZjPHbI &Jy nPC߈ -5*w_~%X|ϕ*0zV\prG 0;|3w_sMoV!sҲ㝭fRG!{yoPk[F//1sVqu3C7#uB{LS \;g ZVn@oy<VY}{ꆯ,H:{fD͉޸PԌlR'`XKѹ89mԝăˆm7=kG ێZd^3+fF~v_¯U(((J((Z()hZ(Z()(()h+%i|`A;W8OJk ll?]8ѥ?3ӊjH/kSCXm njΏgpAR~ͥZJKނKK*eltCtb8U46K"q":cQYlHrm@J s0-B;|$s+3g$ f=\1Wn;?*?{0SvmRO $3 F}xh sϨAgx*ޟiT~Z6z$gW-죊.2fM\%;Kɫ0@.'=I5b(%ԕ%:((((((J(JZ)i(Z(ZJ))hZ(c ð}+xk z łx~% VA zY+q)yǥYW7-; W RxEݾc5% z/g``V,vv,6zzV? I W4cG%/a2͈-OVbǮEOD JR=iIlLʜ4ɴe@*zf#: F%P,2}8q9#dnsի ;#Z=LnOLUsmӷ'ҬUʱEREQEQEQEQEQEQEQIEQEQE-RRRRREQIERPx8c8r) i#f]̀L@2[AeܞVH2G{drJ-M9ĚXwY]f m4$LGyŐI\yNc ĜN&ݸsTǓbw=NIEQEQEQEQEQEQIEQIEQE-Rt(Z()()(((xPCu`J){;h,)nN.Î1PYQYj e*jqeOެªOg>Užk6&ڹ~hUK}x8e5VdkiG tr8,[7 A9־ $(,gO`c1PM$fH'-`9eCo"(+zuh2 ?O}1ISq϶*]C-b2~V ݵǧdX]}9ݵe (i.P ?km[ʻc>gV YC8*̬q{,* QD'T]_$ Ήt>2ۜwww+2IݪIy3`Rɪ3Br27)-ߊ}"4b;?baQc4"%ĂKgS`}G5rU_G5j7Yʬ[9VQEQEQERQE-RQEQKE*"b{/MgԶKgI ]~i=IEQEGbxV%gCv!V5$뎵͙n,y_cg!5CXY쐌"UmV9c E TU]F9VRzx`M+ǿyM̼rVAZڍ:A/洯JraPxok6:Ѫ8.g‘l\r{X{.kwcm$=ydT$P9 |qV4>{)u?Z.Ju529ǽXՕykGS2n͵v6:vv­wiM2aUJޢFڻv'Ս6m&q ;vsLEQEt搜A;A8*~f +#RٕZϾe ڳҶ95CHuISLu 3W5kHȢV`ִK!ޭꗶE_1o1&v!YOX1tݐc Rp,Qo¶uyB6Ĝ I ~'L ɲG4ݨ[uB_&NS1/"@.U z2'x7(=XMra5TOs*p4>|hШ˖a*vAuT+BK%9 }nسO85]V{w6Xn1{;_qPdm±'PO]3TWT^=Em!tam ZԺRv}jjӫQEg)h)h(Z(GQr{UhR!;YVYV\X* V1ڵmPU`((RA>ZFV p0 E3 x 9Evہ#mdKwX)8?7CYQ1I@Qz42'*,çҫI̍Ue̙^]ǘ^O=*kWQ vGOj,|I !ew77Ȏw;UIYfP=J餸ap~gq-cj{v7< ՎP\\"*n R}M$ӈUlSD҈zt`g=3L{f۹n#86ܩ=j)7 Nӳ'J4dW6(i2iK ֶOX8k$j2 +Jd6ڀejԁC[vy.Y/~}M\6!,a{17JQofh%h,w?:Bu"N880a Mt|fSTQ@EM"rh~4RERE%RE2V!zdB Q\#3 8P>:(e-MWj%QEQEW; Vui]NN2z1NU]FQ! U=^Ak6ڛP89edo3x)V+Cnd!*r,zrJ6H Zm +Hǿ U|w=j}VNԍ@j=Ÿ֧dׅҤ?:gwc(:D|.$o$vW2n&f'-dXo9l+JQ+YVJH?3b%ypsQ٢|ϽCyl7'4/Co϶9c}n% }c{9c( G@cV?k\UYR7=O1*Oj%;ݰ-fKx+>Q@jx#,(d1ZU v-ĞZ *֭t-JYA =Mΰ@SjպJ(J(J(( NHH Y&Kt&G$)ojyfp3dw$) ڦv{gr[EZ:U-{kN-sWYi#v%9`8Ui`ɀ7ɜj]o>vD=jXB}o>n,]F܆Q6X@T*YJ%r)o1p*ƵV%yZQDU9ڥl(è<ڟy`DNޝy)@n⣏hqŽQUi[⠰:(#Tlg/T7itn3Ә9y^Uwd_.y?d''eoLv/ 8w~ȫ%Msq1y7O׮ҺzJ(J(((((((J( vRTI(`jźϗ,*GYI'֪E{xK)a{ L LETA-+7VyXZt5{SYb p>Wҫ`찒=Xs! dOPb؁+ϭn},ݎsZZFW-cPRѩb Dy|<ⲅ(Ͽl15jс2;՛f@AʰG4,0 ۰zzn#v~ *;8j"Dk ĎU$91 f%S<ԈV<OAm+h>tkMM { )Bp@eQv{RD8m,H^B)p> Iz.F?2NE}ӯs隣 [|n{ ͈2g{ 8Ct[@C}~2$]!p Ml.A"Q=2(e\d 5p#Ӛ H#ji]EQIEQEQGJ  ucu'i$rE'i LӀ4𦝃H̩*9g>2Ic0PaNiȒp` )ԴQER5E~4Qcc*i䣌 RyesszynWڬVc*>@Lful팲>A{u l錞Z.1zTSa-m܃O}U z r1Fa.#R!CT̼ ښnG,(sAAUhwj'_lV}K 2MRx8WHGX*.A`8VuGnd*LXnV=?\YEs~kWe]EQKEQE%QGEE$ ͹T{N]ϽWY ;n+UJϕMKJ!c#Ga=)e|'csڢgs[rښ`0#=jXgZD [Ҭ_ K lHǞ7 .u V[TMR2TKaSpA֧[Z=?N ޔ; m>E !cH!!,[iI ;S'437PCjE Ta:Ftc&B9jŖe8MmfaJSʷ(1@ATzבla\ *-Rʀļ+@'s6vՏ9+OZnYʫgwJ9pjWsS]đu2(Iҋɻi'E'˒J*HM.df9\j#{n0m.gF Nw>:o_j|D3O84r4*М4 "G%cjE؜[x g7Yw'LDby5rьqI1Pz;)Ɂ)]a 2ťzH#Xu4YcH{eXT*c vj±ؑ2DaKjpjFaR}F)Pdwsz7}ہ;a}?\ +IgeñFO2Oۯbg&Y~X`,ܱYA2`QOϰ$!{>٭Jk(Z(((sFiFd* Xqs늎h#Zlq57<=TM/J`,A;)e"rSðKװ V.P9iTeӅSas(˞5AБX G:&Aګ*@ck=@YS&( / VF3xvgʉ~=ɫVÉSs(l j}Sl~=ԠmgBF ǽ:8$@Ҟ-o1HA8@e$sCC t ~򎆚bM)i6DrGKb989)c˺2w }O]8} aߖSĹPGֲw=̍r3]眞YLP'%ĥTm%BKq)UܤkOJ%wO_c9Yg"ϱDxZ7)Kl6zUc*HX'5 ԫ4Z$3޳5{Թu/1sF+uH4ww8*}j 畓#YʺV-@8jtյ@-RQEQEQEQEQEQER`Z)h(h=+G7Hι1:f r#'v╧ښhs<asvO{KXd2(,rqz$bι$>VD#I[o%"k P,ǵARܒ 9f;836zog8vVG*li"ؒx+HSUP$dS6IT6M9^XS#.r*Ԙګ1ִ¹#r_ZL%]ڄhTC#&*(kuj|,Cb`*d1~\6Ɏ#kgIɍ>g}qZT; `$^+[Oˌ.0rH5FZ!Y8+7Q۸5$dӊc}_LI>smtՇr0{TtQ0eO=o֩B;=Ufʕ+&-AGGlV_V1ɎLVp29OZrS-! _ZrL:Ɵ)i1Z,k,CVU]䓰e[fz|7r kwW,I`jw~R(*%ޭ:\lDdޟnp*ܜTw)OSOXf8?5sMyi8V*'r\Fa'4^K@:`QR7~dP`>R{NW~)?Zh)h(((J()h(((:,rmz6lL)3UY$V/Zʶ:˩ J5n@*̶Q8݃ZqMh|`` p+B C*1 WBı1Ҫ >d5ƒy'#5F۟AV.?B{6!p8&O$F읢$I,v wFbȏqǽD#%ɪW%cbȼ:z+*0*9SXR[j[Bбܤvu )18 zμx/rl2k^uY<Z$ lO9{Zkʱ mZˊfX+:;Q+)ֻ8F>Gpe84ܓmnmD ?Y '1}jIu0qFu5jCV&(g&pG`_A5X7 U+r(((Z(()(((Z(Ahn"+سJmIZgC1=^?ιRd2XȹbިZuX,qC̦!9=}hyTƩbzF._G֬@e_Ո_hZ\MH A'g0$}*mHs EK Ǘ~cS۾,P ?5Om)1Qܕ`d@ 65RD]рI8 wnI$;g9Sr:xv"S&h|ȝHTRڦAT~BGAilM#>] hKq֡e=OJ~8L1TK8&\1О 8W3 OWl9T|JzpG)'rI='H>å8L#g%⢱<|7f785, n(?Ph((((((Z(((=*+k#{UaiU8B W YCbL8/Ty# U,-i[~"G˟W(3WLiGnO_Ȕ`,rĉ2:9j[.G j *]6A.M˷ H"y'TN}j;5 H}{T}.b,QUQ"9ǯb?8Αb}0Njkb ˴a P*ŋ)⧵e&R8Vl-E03s U6H Z(((J((((h³̛ z6횠mb`UzqSXNaQ«thP\OVjsy'(}+B Dn^kf ۴U}~T(#n[Afķ@G\Ab3A5m ڳ'1I);FhQpo%~ЋUIؼ̰aEU{+H!$'+ȏdkґ:v/z|+¨c5@Kp0 K c}9G]JтZ*J46!XrIf%RK~SUIXJ}>6*zwn[Oovg#)yyX =LTƚl pսkLQXYz59GB9Sިiz\BYGU 5,FQ;`lÑ5ș#8,I_H)\j2IuT8-`ǥ&#o)>:Hh\sc$*9$@xqUUI9<{3$V1 b-FrYGnb0"x*GwIWӭIVipyr]hlFiCO$'Ң,?Vc}+Nߢ( LyZ)h((()h(()($ax=ʼY:bh^) +5)PxVXR<HR4K=VKi {*1"A;r ;F`&B<ޟ[lFN;Ȼw5i߶*2+֦p!ʓ\qZǔsjUt"t*pۤLG@}*Ռ4*ӱBnU!c{ԳH7r=k`KŸQPt.vFq!#5gq*1棑rOcC(/* W cs)s•XoseXv9cLܢ 1>՝i41 {g۴&?I0N;/lw$ }{D[>H&{gZ4 X[1¢2ù[dG _r% HCܜ}EFph )ԈJEn "c3a:{TQVfxYZIf#Jb9n¥wJG =z}"8a#g^޵E<9Dqi$ԣ/!ޑ{+uQ*c-mCz UT}}>;*/nVbepO#`eO5Ĵ^'Z$Wb(((EQKEQE(((((q?[A?y+?Z8.z[td+~A[ u w jE9>`Q{[9&' ֱRyɵկ.$PBk(킡dP֧ H<SiM%ޱoZ9ZS"G^3,vݷq1Oy<˜v>Fو.Xҕ!>\*h#|2G֙*cγW*{`UCF}̀ݻ⩝N%7*ӷ#P7uծZijLq{V @u )fv`fUYA21#Smr8˵M! {c`p?Jl.%8Ɏ4RSj,!Qytj-S,lC @tZ۸?(?ʶ1>9/d##5\s4c8iy]Nޤ((E((Z(((((Tlz`kcO\cY:'T@;%axU%P=4GrW'ޜw#x=r*I4O##4HF˂h|4e/(9?Z$,#6򃓟\R1Qɫ/,voP*g-$?9AQc-#5+1~hBQ)/ lUVr1Ums9V1 .xBbzVt:uMLm}2yn=tMtQvvʌZ HDp!yc`H"D[nv J^FzzMlA*|=w?JIJ#gǹvp' ;ZY„V^69_mWhPG&*{V#9N?ִ,d-<Stf{g|a8\}k.q#m|{a$VuRQE-QE襥((J((()(q6F o4B}jsՒ?.G&u@VT<G(Wznqc#?8W[V3 ~gsj;ԩȏ,\jp. }X(ĬX^By"f-֕B܋9G8 fg+N>|Ryfv!d?0T,D)SS#^7. ,Eu~Dѻq3)!3{QEq9=h[obdR 4Ee#͗90wO=jC8T#֮H|S"ā n'>%ˆ 9$eĄ4xfi66 fH՛;t`cQ"яQU1Xi?L]GZU-RQE-RQEQERE%QEQE-RQEQKE9\T7ctxTS?xNؒzc`,fĮrOYWɉ tˆ /@zℛg)U:f̎~] RoW(]J̍``>߹ .w=H 4ò PƘ,NeTO*3SD_0fQL8q'pgе>GSض)gbێr8J׷ >f۽d1k/7ׅMnŵgh*$Úl2$ZF}钰ʏ֣b$beh8 ~Tew ;WdF $; IJQX ˬ6%; ˪B4JǂYUyH'UGVQEQEfqEQKEQKEQERE%RE%R?*㊯zpqQ\{.&YFx7z tVI'jLqZ>2&#f8 s$EП*bUT| (~5$`0F%rܕL 8Tܘ8V4璩n#G*-<ۓ+̒nRpIV#:U;"hV|G*]06;Yw1(F}iFM̟j"!{㚥u TX$Cj{|M#@V0Y" H#߽Zr%VMf. OS<˃7`U_ݢ|[e* Ǘp[*z/Q;@r:/^ܲpʇvW& $x 5]zJs#=VDGlJ:[y-9g@$Jb[5V%QEQERQE-RQEQEQEQIEQEQM=W`#Ң!a$NX+§<+e7J1fʦfVNvzs|:RNA劃|sI0qBɵ皫3M[9e8PyY@#S(Îe^*DJCrBe$RTp jMTzӯnLC54\˰}F- ![qTv %yMa@늱{:9XWZQ$@0*=Yid FKdU/!sJJ$g qG^ȩeaq .Tv"vbNTN"Ԭg 6 :Dh3IuH3 s)`x|ތ{ҕ܄/p@,*Xn~ɩm`_&C('sn0D-2Ē*լQv2 W14GϸW7#bGs.뜎2:iU!|-_LOvxv&q(1{AH#W!F v4 &&`$ UQ-Φ`U$BA~u*Np+FU /V#[VE7L(KWV"%QcU~ \`(:mE>թA˓QKn&m U/6bTuFyQ[rѢ@$P2kb};ܞPVbww'SRIqҕE9i͓u@ SONO15ت[iK"M_)2dzәĪm۵9 @ s3jȉqR1jxw"yJI7cB'm+Ic#*D}QyNʩKn8P+ܻ;zלZo,!$Z3ƹ-g59[gySm\[yFOg1$Nc#𤶗hx@:4#Wp W,j1\q1e>o*#7~p}+&њPAs3Y$HNj.rSpkY"77sIgՐgD{B֚@w=G8ɫX]B9dըgv&KO0Ȁ(9M/'8==Mf/'?RI@{BrI4*<ҢP=BT 0Ae 9T~g ?)5bt4M^G/zi$ἄC ՘Cyj1A+@ mNjXuӃ2I q!l~ 4͟,z[(摹B0-mېxX(lwz)M5oH^3sZޫ/ی0"ǫw5뺔_Cr;9r6wM!.d9o(nU^.?~y%o~|!%BPG ^PH Uvdrp2G)frԓJ!>+ZBzoYQR& 0m^:Ty"݅U'HļX} Iێ~ A9Zt lloIێ[=MNI!dT6޵;k?%PPӽhݲn"^3A)Csmeu* (wLі8.zsS] :tJV 6D Ŏ QsIU9Mxp2T n^AԖ/H21֙Kll*\>\rR-uA$R֫|;ӷ΢ɁbNy* @a^~<69ˑMLNry: ^]5b(¨Yg8H?:2vv3}ꖩ;*SX)-yaFseF=rK$`+ҬF, cM0#=cyJUrvP}ӰU\>Y}0A8B,A'Y?DgjϻRO 񟛞jPK Z[ȚpZ[LWZ1"1sN7OKu5S#HBN ʦBJ^7Qm=h;`=i/c9cY *c-e2yiEhZA)_u;G0UP >@)ԀW@18R>*HX*jCPdkAIno5u$9TQB1')ILJb 9?`>덄l'&% jcl"=[r%OqȟJ@{ m$6/FA|tF~1"R3pFM= L{UK2U1l}蘍ʀQP{*+YaF{e*1ۚI ko٫Zs 1߀ǰ?3*ծ^+Q]gz3GOz _/r1[EL(欠1Ĉzս)bf,j w7$rQb>^?8'oS'? 8YD}z {#!$V>ppnzVDR"r65>ZLC“i$sMJztc$R٨IjŤdG: $]8T6«Zڐw?AT@A;Tm;]cVXQVI'N:w4ghFp>_70Av%ITL@wZVMpq.dPOc*[c<Hf ;U}[U`qPiR}}WpA 卤ғ[T8G.rj%sUG/ZizGX?koO\z%\J[ 5_O! lwgrSQL6Rӥfh _^PTUu i׀}TeޅxpTpjY[,ӳ4y&xz&59gխԋerJPZҒO=KIۑV/fḌ Cu' `3UT&mX^UKwYoQF%lm#׭5X6qQ0,  *WF3ǭZkQKj@}N3XW7;ӏb67+YN8zT)\y c_Ғ x ޮ^ $ vm0awz p>ب.#7c>HcG4rpKqN9;1N( +uݑF:*dE"IcUPRst} j:`jc A$ǯJF#N*iI`U 4 %ĀqlxfŢKLmϥixzɡ3WuNu>6zv41u>.rv)XS̐e} YR7gDus@*Hf(P7VMuenةiwC?tczuWO 00qv2GSQޚR"(QNzwHCjL`51Xr37ddvHSe vu9=6O: G^8JpG@s~U}KVԡI*D#2(4CIW\BOYGƷ-[t,sQF?I4x@d<YN T[,HsYZ,$$ }J&YA9?e9Kţ[;|zƴb- ~:],=ÔE(zr:D `iG\ ;m2: B)7?gɸ)oc51׵%40΍4|V.Ra {$q8*ZQv*ÑYvWUQgnBn_NF{iq"gu{O6 |Xӊw ًrVp.K1ֳ485( 'ۚәHf'~ZҐ`~Q*)!6Yï)T NӗEق!Q|sW4uvpZ$$9 o.Ɯ"\H"Pq e$*ڴ]I$}=*zxgifo}I_2OZgy_2g=iתnFwN]ƖwA`1R 1PXVG!2;S:BʊwM 3 |.NOǀ3)NIJ6psJ< 00?3Q &1_ƛi'dhܓ9j]JǃRiW'h%bW<W0sn]2kNoh'"\8法NU&ax0pLR3"ʐ0m;qšc;TY_1l`*R͝6m 3R؝Ш^iw584rJmqYѲr xѲ16[<-]n-M>Oͩ#W)b;wxsSisdoQGSX[7/̢e @ GBdڃ1z (G ݟ(+& =8ZLYv(#ԶQGcFdbvR*Ycs=[X-pc.wH힔تn'$wR2~`5SKF.BsUԹv8 rrZIx8:P҆ l-)->5;A#s U,p騤?y]&(!p2j5ڔ;>2_8Y׻sz&Se{Uuڣ Qҩjpbǀ=;C9?ʵhlG#֭ 6,Y v#L(<(:⌮aFc6֡I!AtƍfEc4 E\;TD~TC Me+3ެ|ʒ9Ikⷬe-bCiұH=Qna;1H lTwDldFRvv?:e[qɪDX\ӰT1!B2v^$A'd)v?ٷ9j idG4NFTqJJ4md2A(b+JGxdx^X:u!Ͻ-vZO/AZvR>05?SM&p`@?ZѰg~ʲMzU#zU'a1#bk^ȩl'iU{Kjox=$bmeOYUԩwz V( cUv'To.׎ɪB[5SQwXDJ흔`=* vBP; Ȋh&Ybr@]o0t;jܐK*ը/-_-_CWWLqi<ՌZ>0G\GZdh.ET0wUh2[hÀ[=j3皘 Lw֐ǹdln- 8',bI#FFpOItY!F۹[)a8ʞIKe)SŃaʩN[]* YŤCy qMMm#^pMOmFuc}FO_!^aSFD*r)5R#{S.pdX# nN)Yļ(TFuK#*(T@KLHhb >DG>8L R)@bOGz򓁞w5{n`7LVib3c]V2f*-) pNu rh %@GL***A4趮 /riPFi~f<=;SF9oG&7HqGGV5͹E@m)f*kv@"m=1Z9U5w_sEiHHUP|!YgS,}j ܼFJ.I$y Ͻ2`. {B>YQiS#@sKs+Ρ(7Jv^jJaFi{Tv=JT}Y(e*"=f5`Fc=*X?{.㝃{Hϸv>oMO2_5Ip9L[̙6qGTRe Fr>c6AJ!BUQ)eHB˓*;y% VI̷RQYdH8>ݚ\ct;*:e|Bqw7t[I4䚫,️NGt$GPњH`UFYIVܡÓAL d+=9 Td)ҨY8ӵTO.JFr]*q 3,_­*i`OSE2(r? ɷ 2}JY8W< &Oa^ϖS(-@ES7ϼBH-Gj.\*6_3}YmR) =>kOcieNnzU>K3p>oaq$OWbr}OlRG'#p›Ԡ`0q1ɤcM={w%gW MlBzS&alǥAFmI@jsޢA>V9H$}A;$$g#?0j Pq.0$#?@*]d~菺nJS˖6'ة*7j;w8b[dQ &uڪA`U[I.1U#Q+ddB3"EfB㚚Ң$Z61c!bSZ0 ~ZzQH[IV1_zm@y c7a!~zS p?GVQ{ F :a:uX0QUm&@X$xUh2w\Vqե@ GGR͂pOBC8V8 qr}`@|֬+ Zi];6H<-:sUbyմ61 8Uq?U67 YzC;p;(8ژT|xʮ?:HHaYdެ3'Ci8= qfp?<S|}=9g#a*xΧc-q$JbBƬ$r6Z3T=&GROpa\) ٮ ajk"%냅_v5yovhuGnN ص"|>cn=Uvd Hzʻsozθ&a9lVm̞SyKZ8`ƹ$oi!-٦YaWvy[cR6/) =Lx <JVxLp)Ěe™E$:=)'Uyc) HUPLem>EĭW=UjwgSmEƇ$cZ]!n,եal H;dzn!-qU+.>܃U˨r>U!pYP; ~JQԴ7aU ."A#VtI%܊<8m85zCmxsZZdZyTmn&Uep1߹[ty\'Y'u29eJC>\Ӝԯ GzsFhqޒw˵: z8KxY:U1v:qR[)D$`Zm3Y+oo}+ʌ䝸g$Q]H΄nA3,) 5+U+xěDj~f!OjSpք 6jVJA9VnIUdsLŏ-=[:SR!9=[ޛ8*sIhLfV{Z ">c*;LQ(;8L7"dL%s[6[-xi|1c[-3{foV5Ld<5s$1XBYX}ۓV]G Oy%HqMimG% bJqS$ļs7Z̹ެosiX㕆3 "$q =VQCZ j?ojWcS<Z֙څB4)sF⑹8-9- &}j.:'?U9ڷㅍ f9+j+) 78k-o\(\jŜWhJN~#8;5?ˊjUn!oҙSPq{flz$~HU.>gԷwUSG2~!A*[U2NҮ_iѫr Ҭ٠HF6wJن(}@s.f>Ĵ䏠.U|޵m;zqk¦rӱݷcVrec Av2s:Yr#)q䎕ry9;X0ZΚsm7vaj4BḪwDN (CkuJy ޠwf=kǘj{xԚbj |~) B?JTiYNpN8{`T*>}H;jߏ^-~|9Sf6sOdV pg~>ٛT6VUPUYe(P d)*7zn?#wool,d$p{ƬKfaFH';8KxY*uhG#(HT3C9c,@mCucX}*$m 33m$IQIqj )1Z]H1Sܺ2ǏjF<}* mUC r}G'Mn8s#5v]OaWW+5nU\銻..P:S%K+0hU`v\Vf+}*>qe_\\[ YsͲMg]Njf̒ "!Gj|z dGsVw x5h8;rz}*$EiNЃd*7$c;^XSB Js{wS;L!El.?^ip̀G^wwN c5jXdXIȋ'f0ʱjAUsL6YX0OzD!H%ޢt2Yd]mF=V3{UT*!L$Tc^ܜ~c>ddSQB3{UmbCG9izte`,j Rg1ncPf_9*-:7P:n /6TL(_JIKzA$GFڴd;eUi$oҮ>ݷ2?J x~-W%q99#pTL܊OPP1(ybR;iUSkny<gA+;"[)څx.4{\C1Uw9UWN$o)$An/+ćl1u?N+rI<A}M"2J'$c$zT *%xEa18Ed1W78=*b8P]'(ǷҫɗBݍVpZV/6<qW0m29 gT,q T!pUO.GR rZŚ6Fn3Y/Y 'ܠgߊ>erNEmcj;U=X2 GW؞z$, -I^Q{&Dpu||( <3RkNm`$}6{*5(TdoRt.=1ޖ]#p~1%D^>n=hn$$AwCvpIO<;K&Zvmc/ U 3<5ԚG!0yBA ?$ j)T2prZs; S B܀jzxf_|5t*X ZQԐ~*m_dqFU/֬Y~Fp~Yޣ`eϚ{e 1 @ǭf(>mF?kZ\1ZEBxpj܏/;y~ ;A%E);0 Է0 ER }ji @${vq?Φkdߊ}Ԙvj1$)͉tɸ/N#ϙv8Fc-P1AMX,P9@svi1m\n*;Vn <SfZD|5BYAF9V%6F9# WV"Aol Rv3Jp9,{Ui MRf ,yRMd֥&:7ӭE GzRiStaUA#i{NK%!Sɫ:'RBqŚ{[S=k耶05F٘n\%F24Y#p#~5@d ىщʩin*5UU Ȍ_:ջzX OuS A|t~|tB6M /H9bSۑTS7wg梛TMjruU?iv^HQ\,9fUCP=֏_U.q1WQ"qVDPEON^>h\dΫb8 qj [& gc8oyv~i]֥l"ṠPyPG$v{Nj# Kpd/qd FQ{*ځA2ׁƒP35ɕT5H2.w~5JBwpn+1]+`A܌³4m OUeAÚg{,/"5shQ#UԈTH{2TeUowEU玵^犂䓁#=) [qҒ8=~ERL!E'T2Q2>@91o'7sPE/qRZ!:gsSMlK$ t)*N4j").a v{+ޱ㑚9-m r9-K[4gqO E ki$%j5kw%˜q1,>w;J#T(tY &`޴#[fA)} ( H99s֫]:E{d'/.$TE7N*̏& 1*}SFIF*hY'yX 5cj.n%snz͖I T8Fqb~=ⲵPŎN{VulAnO[ݺ:M\׹-Vu4Vt:7mbDm3 [U <#P*Qj3AҪ9>4 Wɾݦz{W޹^i2ZdJ{:l2~N.Rl2~VFH@O?fGannԥm9CYiF q⨭b+(lt"v*:a=,H};^M }iNTl+:rk27i7,z d gf[t]}sVKHzIyqv +i43I,)P.>0>GBQsM acq$.)nl.ŒU=s~*( \@\GSv)j>g;jvĄIު^1!Տ5pD B?$~ue1IXT#GVMɎ_F@oG=ڥ 1$~mMĶ3d;6KO>^Hضдc8io;Xp+Zb 1oՇ ɔUf߉N~k.+4́*T h?h22qӷ E2rd6Rzgwܹ8,jG2S,1e===~c)dR|4 SC0O7$9MoZnx{gQHMdu1W"c*UwH'>C`1#qqR FWle[@H V. WqElw$0ܠZhӜn\rp2=\(q=Az*g\* o\+Xd+W0^v~yp)c'߭h"Sd,%a !Nijnv*}呴էè yrZّVhSOV"U=}ϖ zYگb"9=1֩F}.sv{zU ?6FSϧPϸc­X@"#vz#,zl\ |cl hCԜUkD%Lɨœ*O>l^rd91-NYFkF3IZ*0vUXc T4qtOcpO*R*F$*vT(gqp9tȒ3x09FΕ Kyz)2/Ud2N3UIScǸmneW06~?έX$|ʬY]4zqcon)o5 ]B;kpDAI/5@_Rin/u?tS;N6BljvZ+5ByHYZy1ja i1GjjGZjrG{R GcRmN ݘA seAӒii2NOI'5N55ZR͓~ <}zqR9lPǧzl*G˺SH')&95l"~El " AprzVhPXizvkq*0&_Q?8 0kn[#rqZ:"=z{x!ɐJCb<3-b!~[fl]KI95Li˞&RTdm"i%ڹ0p;"SN%Cw'i^J`, /צ*̆4€7㿥WDal\6ӷUbųJi #ܾqֳ5 1*8;{+AjS,;$C^bg4۳MO&`"ctQaGE4ǜMB08$Tn<9#=1R[tf}*H'S0Da=zS"7yҞU2JYLd,C%=)~v-QY۠=ɘ(*JΘɌ(赝=ْvE<;m)'c#3nDaҮj`frJ?^@yT 镋,ÏXXUo+Գta"Pr0>R趃O4eg'8!ew+MR3 ~]CϹ5:L"4xFdwDyeRXu(XyY*pR8TYjAUU-Rv77֛$;Q$TnZ8C q4ʇsu#Zwd%\2i1ktrjcHp<S 030⡐WE.jS*9=h{⓵'4(=jTj8vΥ6`)dWb0W!dVb1rڃw>e@,uGV(ԃ13Cā֮b%O\FRi'PɨW]zwJXbV5>SJ@]̄֠d{z9-:gQƪN Z@ܟUn;5^3_ƀP~_zp^r+?UՅن YPbL-U[osxrl,7~Dy`=3DLwAopvSRlI2* [!JC*P\9 ~]23MH>LKtAϵ$<RH!G"`\}95r< updFgXdUn$9c֪[4Y"*NJԲgc )*KX(nsoF# 3?{U(mP"#=zjN@=)0|;qS#kH@.J|=橈 vWwv֑c c uzdqUSUZ#?$lI,mʥ}Bl ѽv<͖ݷ~qPS(-)m}GqNPo͐sYH O`*y~I7w;fn` xŠ{cQOQNeQs%gڭTT{Ԡ@08dp/n(|dސCIґߵUA#ؑUi '"G~΃3PiJe SU`8Y j.%pDL|DB~\`J}֠ϸL1j[?˷p~i7ҹtdmT\؝WS;e: ]۝#W8H/#aW#xuvDN g*'m{-ڡo_\jeLnEڭZKF)9@7L8 "*8B8 @EM8HO=&GaH\{Jt!kK1nH\qͼky rŊF|Ai7DN±/̗;AYtdڦHJO%!>sR{&i$?*RɚW/5nLLp=֡L|xTJQ<j:4`gǠ<ҭL0sÑ7#G<5RH@p =U]٩0g0"Kh QmB  WY I 1X0&%F23lXKΊ%CTdR_vjz#nFjx-q~W35n @s(STGe5;c)r*q\u/]cZ\v]99\6\I8y4|ү42͐tK yh}qTP*uz’ yN¤aT`5e4';N4G>D jxlUI]G rlw Tfq,vHsVmXى㊫# FpN?*sT>J9-`C㠫]b tj%߾zVVr#m\S+SmJ VUoUA 6V^ fV>S?4|NqEgim"CտXhբd`HsH  ]A]߭UXE4]̗ZM>O)ҬjhKDeTRYb`$`>4x|jq0}Nj[tP ?SZ =k_R[6D@C1^rY:R@Tf1P .K3q*&-3r-W tC&=&P4%Gl`4$ҕ2Xy!p Fȼ 7250=k.e܊& aU!@c9**ѩ9fn~/9b l XO5pX=~cn98婑 l psSl:c‰O8۞›3nmGJr6?+1P}{ +3SPi@pϰZS]B#]t dw5rRWqӝ"IdI98e=E\rrqډٴci98@m:*1GUmF|:M 1XՋdI@(c+F-丹A&q특jO&һX_4tXrXm`0+"̼is UDPV8LFnug^l1Y[#vK5N.n'bҧQ2ĪqSW; d7rr w(#1T,AQ9fҫi<䊬3UIZF$t4 ;Ӥ\c䊷bֲUj.>pj}>,B2qS־eprA GҬiۮDc8iKYBr JH㱺T۸dw``Dpx9LoIl tp8ubzqᐳ}K!anZ[ҟ!"ն)}1${D*8'}>$(œ$7ryjEK4oBA)q%ޅN*㧗h\N*U< 7o'Kc'\~q5 jfni9!SG (dnK(.0T[aqi<9$1Mr|(}[;R>9kin >\*԰1cU@?Ո$f1jadz#GVvh_VHUF9ڭ,q9 ( T%$ a>ϩ'~汔aٙP6+F0UTx'u`6AVJIcK $1>bH!#sK6Р}lgڟB(HB5+Mw}V=:j̝ԇ2Jz{Tzdf8tjV?LCd!u5^I>{Tj&o:王5c5E}kQ6 ?pPx ҮQG`N e@L/;6̹U$_ni1`p}+O6>ջñ$|sH6"V9Ja\CsT..~w)p*ӟDU[`'kDV ZW %(!1GuB[,q.CzU{ؖ |yFQWsNpWu[>+0ZĿ+nbFbgsǷYg=iK66:5w4q[h8WHPtY77 J˖=HC1$Ց>XЮrI YyN8Cӎ[0){wi;T ĨW8B 8H|JṡsmXbقܦFXS0i&e8\\oVRG0jWP2V%5SXp 1rBjTR[oJɿd93#Ҳnd9;Vm܂I cHRl!;G֑fݽE"lYqIÕ3[d)IXDfS1V,JOw$dC?M`yeS'5=%iT_5r*q0faふ S&qU|m;K`VR8*EeX@'c7)+(&w%9l[X7ǔ"%#'Wmb1zU#hnrrsR\$^'] [2Fs9$t|RU#P7{Ubhlb>늖Sx- lTjQB@9~Imq~#I$n'ڠ{i qU 1u8 )_N Q.n;5n8J" ԀƊ[ = ('4$Q&piIF 9l>ƒhqD@<G4K)H5tcӚ~> 9Lc֣9RFLTgn1TlyEBҀ]#mFO$ i;ќi+x^H H@~ʃSpzjBrJBOurK}u#t翵t$vRN9d$:20ݳ=ɮj 为i,yid<]{UQSOpRQ ǂHӁ-.<7#UHUW jYd[{w`p\3+71ߌ=ĢيVQrݛVK,w2Ov=#+[?5bg;(,"F?xM[X9) VNѱkRVDH5pbD ԙ(Z͔G=0xv5v"4N8k2qe*Q~^*wc 9=!0}MHѨUOO6*qK0#o~ 3z`䟔3ҳżmI;q! e'rEgg{mcvq w<-*ۼ^\!n*;}BPxQQG{qqw#e m_qQ{=̧qUaҬG*1jgXZVU-3Th gl1^C%ET@R>:/o^uL&%\ 7XdJt6~k. 922= Ļr[+2 ps]sRzҒ((=Fi HT3"ĥו\?ιicfy]p,D>~kUR 5Ed"0qU+V>ě Gnp05/|ˆb0ә  7-f=rr 7 cOSr~Y+bc%ێ&m$6ǗWk(<^[O!sYZ|8}: 2o>g~o)E?*nC +uD$qX)k;Rxֱ4ѭISVv$ih]zآ((({RKI+W-'$Xt/$"f ȝo-przc2μ}jRVx\e\dl2q0a7 ?D!4}'B?tȸ`5"\B.aBTO 70z㊭qwl'^⢒xK\SWSt%z`0 9MЁ$6Y5;6CA)X ZeTsUM,^ǿcKD$_}{t0+'n1\%>M5.FjRF*BM|rZ1Gw*ŻM.>ªZ]c<8vM+<0^k=kV!Giر!Yz|^= JZ|czννPu yPqP6<;9'~OMSJq'ڦX=-3 }I^̼r>5cqYϙHy=juāNsS4<7B]q1~L)|6YWsZuZ4QEQERzU)rvI=1.>bz$uEckV@B2ѫ7^)ph1nffv>I@ g^ E?2Ef+,~e"6y~UF#Jhe :=^E(02thjRL4rr:6Qf0x&hqFvҭWȱrb^Ket W>>5Ue]uodVAu~GJ%%e$dtz•r2dtznr\Z%ߕ8@N4烊ڹgp85$3\f\9c8R2 ɳ4_Jsv)^rkR!;qvEZՂ}̓X棷<sֱ"&i$ l֥wfItFhx'ӵYfO1H \E m&&`,`My1,1ʯsZ:F?lC{dC隳Vz(((3+5I}j>}kLSB9Aum,c9ޱ.":yxٶHGR;5c4p@dݫ"hňQqVɖD FQ9V4Q gZ|QXv^Cg@`b΋h.3Njmj59,2F:-B!BnVR1O`+WBK`4ueXդEu55"Uӡ99$NT֪@,B8x`gQZ#z )Rң_lԺ|&(p'隟O}Z:̞|@PxM~o>(??.F󥳉ܩ#[5}9G8 d2T圆aT2ҠMשy]A]zJ((((ny5VS^9T71UU 0=MWĘ<A~pe_ue_\c^j24k ٬@5F`^Gfh2+.0c f+1E^tЎEm'C=W_6&_}EhXLx+֥}l2p{~H0ZuW6BBcm\KH-DE`_"vu(ʟZ捩uQo09oUQ1U#kXPd >l~eE<+ɪȭH$䚅^O43K!qIv<ۘIWGͺCAsI9.?\]PpsTͅXaVop|ͅUUy#7Ϭ+* (w_]ow(((ER2RaH2)0Ʊ" $j =hDTPT:^Z]%OU,ͣ?xr[PvO,94֮1\Ri](D*ۿ:tAc[/ِ?TSN, #|5XO7f<2䗟jw̟*Hl曩 l966j@d [@;vX).l.Ό}EIR?8jYZ L+.UrqMlL)9QF'cPGEJN*@Zټ$|dߓ/.KyqRhhܷasU)΍ҷ5)Vw ,f6bOl64ο3s'ߵ2W?,ɬ}QfG?+u5,S?#u>HeN3go'Z\y*s}j6 ˖{2^F]ք#vu"j>:¡ڝv6_C9>OV=Ieq/(RO!y4I6z kkB&<'Gu< rBaTwm\w'U`̷}zY&Đ韔wpVXrcV.`$rNĞWqcR\H{Jد#7+eX0o+ǽjȢ(bQEQEQG4P* `L58WwD0Dʯ"bMWEI4Jw*ɥRdU#EKf>u_S[wF8nZ+6c;/Oo$HXeO^X5ݐEPft;fFsk25Qۤ0*: ϶+1ϯ>?}*ęr$(VJ;另*ͬ[vɢ4ZHWCvxǶO__Zt*'4)]N20tm(vZ34(p?SK[1 si|r|ϩhvc "idQZ,˅cVi%_lwE@uTI ExXgk=*rH1i@F7VݨunJ҄*Z}QH3)EQE}Մ]YZԗaBb&Cڨj8\ uN;CAmnT̠3''baLyb|tiO15^[%>_j5. ٽf`CnѱZbЙ#l:GaG OEJgeJ%3OpO4!t.8'HoNFv:|yВ3:ߎx 0kxf?!܊X| ;P8͞cf ~yj죿".-lf#y/' ڳP6xytk"yX`zІX# jV#q޵F>Fr+p܍V=y7pF dFMVPaXcj-?cS `XwΰF}N MeL0zđ?JɕoaOP**_kS1GZu Y2OF1P;Wth7IVcdKT~$,*b۬ⅸ-ֶZ3f[B,fZ:2#n?Jtg2\rE ΁CTdJ<'UuwIWHg4Eqp$3icM腀'GZ2$+DA>­>ԴQGQEQES]SefFG})D(+%) +4jVxO%tFUbNs=$BM}!PdsӌEzoUj*Z]`nx }@XyxιؑďUѪim\ >ƧT15,F\u+= @< Bs֨ρdOU>>}J,0OPHD8p1b<17h݂G}ijxYQO18oW`f){w1>Eq\s8à"\|˚hr2vd'CoDOz$><Ԓ}#q{3Iz>UT?-Iu#j3#jŤ`Ly“V4Ȕzj[(y5k$ ln1'S\ӭY!FGQ. s~#*JZAj/} cΣGMC% f 䏫H~$չ i=vՖWwqy?Z魡-!Qqq]1aHT->d?53 7U?W^i?*GW[i&mX=I:1۪h*EQEQEQGJ:QU ee,W UW = ˁkg${gmO`}2O׽g0&A3cZaXzܔnHgf=?5%Al:=QG3ښ%H#ڛƘN3֫>fqOUY!X`OWhnNsNIL D77ɁrM1c6;U +epxVy-fpxS$n} TXnc|C{VIIe1ǥosxɮNqLqkn*H2H ѫpu"8k25GAt-ƲB/{6 wGIq+v~2΂HQZ8ŽQkIG!pO5pd%ߕqrC8\<-IdRI)"2}i˵OҞg8~ͺ{8HCÐ,tGvr%8,k.2f}Hn}߀Vؓr߀Ydzw(((((( p:3X CGv_¹fwjUpF㹭+uHsԟ~cZkOz׶aPzd=IHHk K*G*^kEHϓEVOa;ko7(i .2_=21,)$R K 6d¤B65I^$$a *tW i7#ګmqXed}֦.e x խ*UBǖSظw,9z7Nq%aC8k~Xf> &h8㚧~m!{m;fe0M1&ސ I6|Մ-5Jǒ9*nw$|ߥL\}7|?Jb.Qr~c5W/!BBilk:JAӽ*; z1ډH$Z@NY,Z[t$hK~| ױ>NpǓ)|=iB<B0h4 6[H ݭFzֳ0Aӽ U J0A((((*+I= l*+n\~]V =Z# z+Tz]AҺ԰YuSZPİֶ-[xi ERgץI}VcٕRʈDcبeػ(iL'80MQE=*bFܳY腉r*HOz%V*AsXy"$%YySSKk[y`Ðk2ͼiak͍ .sY<քwRe>pYO]U6> g=\*95* 525K[Rx4 zHy=3W"ge^*ad`>FoUN ђK}dQˑ[,Om(˾d#ֶtJ槻hِ(8W$!!T F[w8u]QH6F=ƋrV+ kLۙzU1#5dA Mq;vFiuQEQEQEQPȎcgA,R49}ڢ71HҹH<20#h3庖p%?ڒG*;#jޛP\FpkYr0}OB*R UA)hKEq d}K\(ӢbL(ǩE0)4ө(,(˷ALA Ea6G cۥT'Py?ʀ$ع6WifaM`G'kK'秵Z5v e穫DVjz*Q\Zr%@}U6B{ =>4@OaQ-'\_4ħޮF?T߻sا0;0'J+9=I1؁Z7˱Lozպij2K` vgo*$58UNLK k@UyjK+RlYZR,")BCS9ePcƒRm6 R>cziW^)zz9eϗZ[N@t{5ݦ~ziRQEQEQEQEF@z8ӽdI 50 =Z奖ԝȍLJ|/N>̋"9V-jCVov M6qOj]6UF%[Ic"7C[qH& A ΂H*k^)VT܇ SQEQETO=-BDZZرVoTnPC$V;v1u&--ӁUg%rOkk3ՏZ {=Z((QָrE# r() HIIA=U d$s6J:ر"] AkL?kg#5~57ǶkeIZg5([B;E_qJÕ~Ө kAYl{Ձ~o52BrTĒ$KH#X؃U'ϻV1PD"v(((1zTf21Q9,({p?cF͕^ ;VN=Á#zB }aSgiHԘ9 ĈqҔé(z6:UT}>_22^3ګ,lЖҫYI'l_z㪚ܱaO~m/#N VnRd`PNI9|oXI0DAp_V[Ő8qXh]^HCr\G$%ܬXj#Ip~ʢ-©] .=Ż_7s7@jt՚J((+|eבdr 쾦KX+ y8 خ)5F Si$V!=XQ[cSد?dJpTD_Hl[3oh;u4c;oh}3;oG8.q庮~Q)ײ`AnnsБK?3@}G!/<%Gx.UBAK.#xKuf:ʠұybzCzbI/.?+6V[IEQEQEQEQEQYf[ӻ ~vSͲ 9LҰ`AU>"EkxTvFFZQ8wڭIe \}*F0oI*ƽ&s5:]֟5mV]e>E/N{՝+Y"p vo5v9œneVo|!YaSS-QU5B+|Pu&j:vd7 jZG.~ k9ej9f^P9ogTvo^dᎳ&o*BZg!-Qyt ZIcV<MZz:w95DU쏰DFvv X좻{ 80-eVR~E VF& c7SmZ6QmQG~kZ! /hZTu<Ԓmppgx M>\y.[ cikaݷJW?sul?Ft.kp>IEQEQEQEPzQLuQH#*Q";5 M!ͨ$&@?k3NA<;X3ګ5cl=*ZkH-{TQ4#+vtdWGqAڊE0rTi)t<ؾIGqYƐ+HoÔzVT:儞M,gR8 t:ūS@.Tu_Jˋ{@oZ۲szUVh(QEP2 G0yȵOS@ VPzkw}rT:f/1)M!J$eO8T n T 'ӊ坼3WHM> \un+ZXGi2iR0ִo|UkC]} j3rk6f t,EvZDe[}̻%d 쏩n~}Aǫm ڊkwjlWOqU5)Ow2"MO+"7X!ir?ZO!  tdn>vܖaXlNI - 7r*JEQEQEQAE(8Mwֱ|PwVVb;٪II>nՉ%ΙrEcVw\cqa8eDsiêA&7⵭kyiC} o~p6@#zWs=*=ꞣy bNƨdwU (%lT~ŤFvi%;XV>^GPx5 7JՃøNT{KKEU{m̯=궡}NOE_z-!ڳ47W9OoCYMJ%hzT4W9aklFOJaJoJ: HaF)`q\u;hy8Fn<^*䜫95,Xm?Vb˷Tz|!BL{? RŌJzMhYS[d  .Lnxk_NƾSv5 |pCn'ڣg9-Lq-'##ӭt9ȭoqީj6ܞ:yE8jO6$ hdt+*q5by"e#,~5#i1ʃf4@ԀRB2Mog9ҟsҌ(((3h9Vƻ\V#n Zc jՖE['oj` wXZ>j~ 2(eVuR28T]#1YؘϥSݞ*_n@]EU}B%F/Z9.@_֌2@})LRl5'ZA$!qǩ.Ewl=i # 8qӵj':vӵ---94 Jo:v~0\@ybO]b80~k OQ5ЪEP00+ UWQ[B(P0b(hJN߮j" rw3e$;88-ObUT܅-}5e$py}֕zjsi `*уcuʡԔ5$}a7Y1ݍS\5`I V._#eQblH퓐Fv^fDS5$lBtNn̓C`#)6md@`ȥNASJuQEQESUAc&[ >KW*8Bza[u"Fqֹد&8$ņK0t.ȕQ]d(cC1NӨ(dMқ$k(@㚮6V,zUdӭGv@w,M%$cRɉB׎=yh:{Tdӡ[;#h)q-Xj;iT7 cWGJ"ne=vy5ᘼۉnOy5ǾWڵ] EI]~\W&,dqo%1[ïA\g$m_θp|O^OaZzR$G|ߍji c -4.Z}ͱ !c*[V!)&?/Uv l}9_JDBOSgs MnS;f9U~0Td'ό{  ~4n]3`A[@BGɍ:z0xLI޵4i$te?twjۭ*()8)15&6z;d6 Yu7>$1%ăҨKX\H?R`{E n}Gʣ] ٟ:v &>P:&P$IVlVQEQEQEQUT!tTSra`j-:9ZPE3LW/ :ձsZЃWApsPjNn3jNMcFC6 s{t!N*٥nOlӕW$ֽkVQT5I9$VV0!aq H e #s/McD&qR0)^jx`¦MDivï*޵o-NfNQzQ“\UJ: v}5QrJG560nի qG=y g0(gӢ#Qp'$q@ 9Sw&t#95)梼δtFktL\d&bf@pvse\j~RDisc53ug?3_[Z*iA?ZTӡ(0JknUm#1ɫUrAsҊ%ߴt܁&Ҡ`P6̧Vu"ɿqS*Ugoan[$awn}35n;koVF3ڒ(((e Eehs>m/4V۞³o4vp)F9&;]6kxeӒ}-즆5zԖdݧs* vV,04~U6Q˟vnoϥSl=̃生ʵz֭_n>Yʵ\Y{1JD_!rSJVm>3%oSG&hݞ t gj@֫/ {TXOQ Ҭ*DXK}j)7,=k ݁[ F)tm6|tt +nگ)$ni ^N+7]Y|߇z i~>gkkC*<\ޱՃ٫c,˚qYHKen s5_\rlOp,ʚVlV}++Rl܅nBlT1mS*#7{T ,OJοrpNf^Iw,M5OLEvR3ґs+2Z n ZHwɼW9?0k(WF@@T KKE-QEQEQҊZƞ!>sUsyڥ~Y}1nRkr^ON<bcsqkoǥ.!~lƋJ>UUDhj@RҎd2?鼻Y[j9eAXWҨX-TkkHזZ,Gy2p!j.8W40L W'Z}=UX۳)?Þ*ZH>swSi>ki'ֱdusQ}fISIrdL &hCe2(zV[mC*vesUOAYie\{V_2ڳ2Lw}vڦ(O{aT׼c6YR%{fYZ6H϶*h]] >:vNT}+ltJZZ((('XIP7*p>v<`T3\| e 框[ +^P@7\¡3V|~IAP~UO338T6D~`Ƿv;7!s=k|jJJ* @f`;Nt${ ι3߄ [Њ~d eڽ@n;KrSt%8ڟYlf*% GZ)yT$AB UIL>P;#ːGuf vT1<:{TVUCX199ki7o&O+ qjE*;O5(msWH7t4]x<k~".?G2p*Ͻ&kRw'ӸIgp֠PwǟJu[LmG̙$ *mF2 ~m=XZKgs_ZAhO֏,vHV;9y{ZCΒ*Đ $OizS`8ɬx 2+zջݑǵOFyjTjr##vcr#UnG94% ȮFu"󑌊|Rh8zR$ނ@=P6@A'YZc_.܏sYFH'AdH7ˌR{ 8j@n;f_헐iж~l;f)#2b[9#@',.1:gER;xjr-ϔ:j75ZE]<-[fbuZ+L|ŀҮcc9hͯE_4_e>ߐj N>Sg5/#+6]6X1"zwM#eLGU3Y g1S I#+~j,bHFF=: &UY9FP8ʪt аiZU\7G[W ?Êgt@Ǯ8Y..z 7T;'#4IoQ9_cNքrm cKE2cWed>͚g3 ~sW-%+~842ҹ#siil3OC|lr5TCn;cS&.]}IkfH`2Aǽl![%8vIx SgՌt(^V"LERi&skեibG7\!LsiK#UFLζ]/FccEj2Xi 1^V\'&xjs}6KU+l.͹A$q5U†PcQ42 6ZpX QZUz9XÑR[%s94_(C isqOdw&q*H't%}>9U܄⤩)CV2BE*OP-wFOB_A<zp|ߓ>`ň#}560> Y*O^Kk&HUƝm:xp5|aKH/OSFfXZ)<ϜJFTln95F1Xn920?:M*\U5V r쒘ĻHSȴR!sֹyN*d`sn#󧬄DǏ¤Y2Q~R+gG5ЍF6V ivAԺ֟pKG}MH?it}D\g`ޝjB1Y`{Ԛm蹌q"pA+H&~7LWGQkWK?Z˶]KQU,DPDY֑Z2|8SoW9>T*Ԛy%G Uޕqp("h oZ["Y\kĢ( 3\Ťzo#{vmIV.`FG=jDѝA2Č*ҥLЪ~GqՈ>*14JP n@NJGBSkb0O❃jLJv!I=1C #gi9w}DrR}I~˽Ii *Och ;m?*c-޳o^Ι!Ļ9!s} q$%~HbX9==(bXTw_@bʾN>7T yhr1$ڧ ۄ2Sg]cxl,SEMmN  K`7[QH *⠸c9u$?{,[-b#qi}jq8v0"~1+R(P? Zx(;z.j_FY>kZSުdsL}TFQr5 w.}*[ˮ=oqiW*LNaMZԑG3ῥOox!֘ד!UG|Jgp_P7s(;jŽ[(ی`VG**؂9aP@+!,>l+K9_EiJ{Ci]U3F;ڱZ"ڣk}]]C!`rA+qOcVVL/WQUȿ:wfa/{#_CZu_ùFxe=]K/p޳n.lmO@gg7$0dQOu8EGi&  좤`Zr嬄Rhqզ=db|bT$hљGJZf$O*f{ܓ^ZdY9 l־/`8,@h2yvs 7C5> \Rݲ`r+Z[tWbIX _jK3 Vf\{4S!9)32})G+ϭ\43=zῺrU$8힢+ɟ!lz`K%8K!.Gq|89_C4ķ.Gd2}d2$WQ!#ZfqNkUYZPG8h]p:T`UEq O#Ғ| v,{s7Z@I˳95GX\Y$'Ҩk(n-'g͒sThF%y5#\i}(%k+d?٣LI8*Yl6XڣeVpO ;W6Qj{t>UjՄ|Ʈ0kıs%`x}X# N#LJ&h$}Ԛrቚ/*[Hxu/<5vsyxf5Ph/E0܏Zz~5g5˸k?k&{)fWH=3[Fg?<ϫp@k>pn+!T/f a|xKr, p8EϯzB@TY$aT.G'tЊ0PO-̤*ݤRhcId!C _D@"(osUL`ϕ-IksD7k ?ݶYSڶRxGUyRE!b}?uJ9ᘱgQ0O5Gg#y#ڠV8#IOJ׆,qQȭHګ:V{ǷPvQ9&$e􌣧@juڸ{Յ֤Tvi6V"9\Ԩru~<jDȥ#=Td皖TQEQEQE1U\`R;*.]ZF`,j:#'Sq޹}_TLq|~@p1ޥ{)?N zSPdpW J5 .JFU.Oٴv Ǜ1|䰷}l/ح>//P)~ͽqRxNSYg_p1B6CmU+D01USh<)cy~Qh;P ^jJ/Wդ`.eNUW_{uSWtȮvv ;-.Wt^>8 ]6'f $y؉63yDk(&GP5ך"#p @Dz2)T h{mU?R|ui&1q66#1zњwiXĂ[žJM^Z5WI <[eA<;׽UQ]j5rA$t*˹隃2O?Zi"iedǡ?AZtgo•߷Wę1zFC־xa洴6i#Bj䵌IUo{T' ?JX  ["wU*\8T08=*cwy:qTۣ6G GUfV}jB+}}Pl+n]q#xޡE%YDp݇>",P)g=dcs8ZW28WAgb-™ {{o)FʬUʞ(((,`ɧ=0_L%b]q\w5صBs:භݵ{M{s{|uY -!O8򠌁6~mw''## T3<چR ׵];ݸ)kXMHӰ8QM$>D(UW,gZmƫ5-P!FɤPh?uHG L#yG=sڲ%g/#.%;$3ݜ FK*Ş%4O=HEsWWRbq&j~BME)6xȤCx- ;REls*spT43Tˤ;ePǰ< zHٮ'}ʫj_ =ᷪ;I.ɤfܣY%E ׬)ˈ\vy'[# F**gXK!F:'YrD*P76l9ԞflcEu'krUFa";'oVmO:;?w`S)a)u)Tm$$Lgy0'=FƔ]Ɯj55Yq=RGQ'SK9Q\j@{'vk|J袡RV%ķ34HӠ{iefvc۠{.åXӴ˛¥Ty~oMno 6E_XvZF&l53n7 ޾{n4a1n0ZFI2KFOk݃":XXṥ M\M❰}%|?n-eB 6ԉcRPΤ^ r0q]~H2 t,J*2+r2:U)sq'pG3jjC?֫g kFSj#7 *ԟ9cp+8 ;砬.wdϢ$U+Hq.d qTKIAީ1$xWكwoJߋEۤ}>\v>^46b*EXBjC@8ԯ $SA^?Z-B ڞKl=ŘyMU{N$$L5>7+l5=([c{{XęX#pu<̑L5r;ʱ1?Z9?Z9A=wn.\'f` =jWS;,d@$fϨ\찑 QjsHG߽Uhrn@"o$Lk UGbñiV\;C`OzeXe=82LvtU;d'n©^H3s7w?UnXE;y?4 .p""^ ''tAI;2N)]3D-$ 1E2Kݴ6b?L1V8'֫g\n9P}݇'D}kgCX6;OƘyFKH &p:h%}:5; .*KWSHT9>iWB4aNio ~ZFu1X[EDp:j{TSjN(P1U űH­UOHV[;0VKP{HtE5jZʢFEUҰu+/eE좨3(QT#aT$prW(|I'曼[34 ;uSF@Zdm̌9J3)^{T!\ao:U?89<@Oh,J9:n$Zp2ruj&)V*!Re)mè趆KvES՝X(SiH浏4ނ#4aSLhF6g7OJ}luRUum.!+;e85VVW5VdɏxPGZ_Am zk/Ty[D$ e줲YbrAtj$dqIs:Bd~q/.Rq8U5%ovX65.:J:o:|[TټL T'){ ﻜt3"=DFJĄާH ؄1Jzޢ"J[rqAۉrp_cv8+BA`kzIʯdkNDy@{?+f&9=n>DAIzշ>TaIm" G~,a۱k'Lk+?qY56=+Qs (8+QRqb&'tEfXIITg `wBЈVqV,q桐#B($H9GJ]_xK9=)亿rp,ӵkh~eޢ$ZI_ִ[1vrs[CodeG+f#8$VѴ󋼀gURYxNuI=S(W TkV >@5+Y2W8 'Fn-jɀ "FTڐ% U\Fsr3Kʦ0[?CSʐCRdAjf<{jޠC,CaRۍПJuasf\Xߨ9.D90,+bP L5KHE蓑Qb,>Ojnxi-fnLq庌QyᝎzV/{p!?+.Igg8QjݼrK=_Y3 HW[7rג-Ӽ1/fwx`Js"XHzV~|k)Lw>J̿D$x{߁КM{B")Qt*aN; qlaoOsZ +x#K0GmZ2ҲwI Uk3$Acwy3wI0=9 }!GSQKzefBn?Ѯ쬢&H?| MiiΙ'Ւ6_^r@95uUFj)5sQ]?b^};H"AXz +?sV5]^TH7 '8=@WEB9Ap}*VfbLjv!uy6E>Z7_R+`NIuS2,#Ė>g<$I5#3&"GIsF@=j6`Ā0jk83x[i)=kXf(ǹ5v=25׈Ӡ;q3 <Y)˲9/2ԫek&mtA-֭chݪP~dZ۞(? [:"«Ds\4B%8R,.>^" i]5!a'F#|m6K]#!ndhY#>Ty;x#dFՔ/ڇj l@^sƻc8\jh=.nn/g]\⣚{qipA4rtvVCt#Vo k>Tv-rrqDmYqz{\KvE@L\( q*Ō}}>gJU1 |=Oa.N.~0_qSڞIqRjc:qY7b^n\CiIgˌw5?!ilrD jHҟQs,3NkCR=&!@Ul# (=kSSKDFQ\K%rҹTsqm$99,rƴ}jNִV!98fH[$qGjm;*֧6@rBQzj>"OTQs2$c?WH+Z[x1W_gp Op6BvƂYXnƲ#Y;b? ',K4 xLT@N YrƭqڜlڬB;6 H l ԄX T-)+ZbW`pT|'@Ǎw)9==d~z`#\ U:][iڸA)g(խF-#6ָx8뚚m޲#ҲlaܲO*HN\Jγ0i2IZZ˫;)}K&D })Vjm,B~ѰElmIH^1p8\U̗O3$+rIc=qח^ݳK([ hiZv-#jӴ }jn҆>= |̗6YlD~%~I$_jMҧ !$_NO5wJ%ĆMji>$2QFs2} /2?v4^ NiPTZO޳K!cz_K[55[O楴%e>B?:FHQɪ3WRZiˀV(9ꦢ:S9\Ԅ|ԥA~}iq''?>$ϥKa XdXP;I81P犜ĻMBdܩ+}8Q+^{Qp\bV ;W$\F-w79\2'yO~k)W dd`ZcNJAY[#/26YͿr5Zkh{No\\Gzk]\(nCkay*}.\1]jik%S'G^i}A~'zmSɶP_ϝ821QdĉS#i"${V7J\VfR=j7HW\TwIi`?/[c~14ʇtVJߙ5:3H&>R]cCF?OFl4,cYdh~usTXCVuͭΝj,}e[gg }kZ[ăz%ZٍN\ҹ>|}??"w5CO8{xQYjO)㠪1qJI4a!ޖGDP=w]FBgAެ~dT e*X>rAVd[T}*f6 1ZBj׆`RY׏֙-,16)6Bˌ&$rsԚ\KdMXR09=i XʗJ&+@Ҫ.f,z桒B5rw[4Lԥ\d HSl1,: EzT}*hfaVT>78$Pqj$r}j'.8XJD cJ~PI9> UPI]ȣ+TDso=_7֩=Üzbeng1sw;[yIŊAK h@FҮuɿhC s:Ɩ"HڌǺW=EMnz*xl@¡Q=⯛+ơ{Ǟz/R*+{oNIqy}ΒQ '3T̷Wq>TGE_Uڪ WW'#]UI=D jpUp^`>DXNe==ꎧ{xvF1 ys&9Jdn+0]I)f?14"Θ0>wC7obcK75՞aZ]=N%qUR頶!kZ6ֻclI/w:Ɇp\`%\$Os'n:Z%X_ujo n/'܌]`D9Hj.^<,Nq$쿻񲴲LF#N ̷O4EK7;JOJ,tWҡJFy? el-C8%y's{ dϿZB <R'`J8 Qh<v ҈cL 9#(E^^S^acK8S)v+(^<'m"6˽r*6ضVjd{ 8 piSel2X4% BU֢;`@z0s~ù=W*9_G#Tl|94B=tk}8mm$^IjYDȋysNxFA5֥qs!ܬQtL繐n|qkQCn#zSmǙf.yK O.y2*zO$Z=9o61$z56CZҦkijij5<-WҴƾo r=.rbEUP #tK(U>N"U@FJ}>Q "~[@Ϟ{}j;|t'Xfe2?'kiKM/IM\^-b?;|TTG?4!7#V5 +W5˂&hq4µ.32%I88zN޸"ju0b#xx՜Ǧ"u8nbds׷ou)OOV-Y%`p}j:EycT\gr#*ZD2ϩ- Re\ܯʫP}2DjpCw7SQWݩ֫aUUIjzAnԡ}U\FFrzʊ7Ɠy@z@cԉ Fr H#zbT{d\gbwm^ cHC`sO| $¾cco>, :Aַ|DJO-pTuf<S̲37QUgvv,y#0, $6}49'"9joʸb (3Q @)vwq( Oٵ(56jn$~t̒ :]\W1HGPkI'\}_؅GW9l6!CU_o%#C)4= QdB{nwPL<WLd82j{ZD23R[@^@7ɒ~Z -pqx؈}pJ&l/Ҡ'j/ޠɓԨ##ӕ[xQ֤UŸJp:pj90EWr)yXP\簡U!J*=ˁǩ*֜MTG)v1۴⍨iϽ!Œ:TCF854Q֬E=jbw&8ARLbCT6/Xv>cH1j $<⡐<㊋i55]K"F;OZ-tEEkKx9^‰i&3WG d˅֙y%0>hק /OγtgWSj dumȴcAV/Qof706/uTstT~-}jia/1K.%O'F-OOҧ}[X[sJٛS0Y!7%8ol 9|vw^\Gmi-Pa# Einۑs֋H"(ciW`u簪AIR N;})aa{/f\[EiRA;[ki{ DFLc @*333x\ķP;T# j7b# ڠ%Gǒ3Mw ,':bGOf'Pk79oF'@#i_sp+BDJがsVbMZal:SrSIP9>e'ژ98qm^\/=jH@VEb:TBB#`gT0*5C+֘]S =*c?CRzvx))8[U&J# RF5sB\s'ElxsOK] +KAIEt]'O[T7w0LÎpdt V:ް.#GsWZ >ʾuuqz =Klh~f?j}MY~$5>cp:];WK~¶ sG),é+2W"caջ q*|u>JIɮ$nesy⩼6rT-\/,x䚭! 2,njuWPd+KOªKp>ld'Ι,jr_JҲ5Y%0+Scӵk8 ;zUUA ~W7;%Ԅ:~έ Ks! uGJX)+&ѝ\_zdz5.?β;4`c֥|ɾf}Fa,3whne䞹$fկ~ s#)^yJv̎;-D7jwF0vƨoUB1 |*U;}ʃڪ_ܬb4T N>fګZEs9<tSL^}}ۜ`Ҁrx!h\K2|zV/*[s 8ہZti;qR8!$1$t-vcߚ-Ǟ4,@5,q!a'H">)tn듑N™LM㊘N@@q)qQ̀:wsx&*j _tUy =Gmje\%Z4[=6k޿ʙzQcl5[¶H8%:=IRW=ڌi%Pem徛Xir9Sڴr#h&u__ZK`p"KkH)zzրM[a(:T仒4q#?k:}BKh8ƪKt9DS{OGs UD^0qTD\ ZT!1PCNCI,Oj׳}:=aAGkYn3;ռfc5bV8{hi\m$v6G/k4i#ek:G[CK M 8<"氞 VdpyW5$2-g-Šti9cWAo#ct1=+jl,7&nnQvr]I^aoBLgA˵1KKP>s6Koh֖a޴nխm?1K2{sY9ɤN81sPؿHI1~j1\9MāO9C}jյ,z>ZUSNJP)@'NS9N)qlp0~֑2ci6n9S(ٱ.AҥP#G (]FNMFM1 cLrS,s?C_j~`~>ifpJ: c`/Ƌk`Q]**EOREDp#9X䕎5/ڇŭc}?7ځXAfXG*=~[8Oڳ bGYe"f v cTrևn0xRRb)*=}jh/+R*ntԱǒfAB 0v1#ntg#?;ejpŚK%S=1Y3Np-O<K wޤ'HN&"(8M_XFӔSPN/ )g8u8QM)8'ְuI6zp8i+ Usg i;VEޣ-tgzH#̛DZ~sՏcVm~vI=ϕ H5|ݩڕEEQk,6=5E.GӉbNp:CqcX9̤tH9˱+<421R1%ysM$jT_-2<G=vi(s4imb2&9i^%{=xj.qivA .dF;OK(˷jt  T|ǫUVh)hEU R x{k;W1 IjQ *H7"2}ꥍaD^[ޫC0Wj"$k(I BJDX`RԎȑsGSH쨍#QH*s9~yn5 E뜞{rC 1)zŚi[%gg A!Ar{ܱ0/͎XKKH# 42:zc3ޤ-2H\=!gcZd{6 f8EuMɐr~P;;iBdڪ^nUo]I)͡'PpP` 'ߛ"yT)߷2vy-G㩥;zX`SIҤ I'{@{UV@Jp>D=*9<yۂ.,_6sWc1e̼Jy(ŗs2W2qQdeN3Q+=qQ#3c84݆ &g8t4z ǁҟv"X0znW@!=MG\N"3HɃ.pƢ (itvIJG-+tȬ' 13J߱KDB95p}*=8X/j>iiih+%|vqG3\MpGOc$vӷZ6Q~ײAXxQjz#QmEiEFګԚFeD.jwjCm9_ͩK#dRGb{,v ;H vpsֵZ95ORaRCTuMn+5)Mڪ.![+^_]Xzk6WVrY[]jyLR^n!ۨ~HP65[L*ѵ>B$ HYaYMg(³9cMd;SIҘI-ݪP1N*E\QM"00)ѡlqN lq z _|J ֒g;Yc늫1̹#p'~yɚBj\V`D ǹ3ښ\8-SA^i&sJ 8) /0GsK 4Ur.9ljj!rh n]cdIcOzQacFJltc,YAB]Xftnn:ۭ[hM0eԴ)OJZ֐P((:?1g8;ְqmnaӚj'  kH*%b qHv?*K;R"!vILC{Y+^sAM@|5A5 )>Xڤ T~؋x):Y%ΞGE<*z5K"+t_ZtNfEn{43wiFPhaΐ&i6`HmNmR*pZq -mVqidv3^tNN]'nhQyc\ UycMrA*9|ˇ0|S'~T䍥}t :tR6vbMU.*H *{P8~ 2OZrQб9il1qMs#u4Ӂ=i8^sMM')=9Fj0iE5E! zUxh=0? -Z7M g]ݮ=[mݮvyk4,d9E·&"*VՖSV E <=KZ}͢=ȧit#+<ȸ~56;Pd 85RHEo:n\5ц_wzfr=FiiԴQEQEU&=5ŲٜXM6=^Z< VrN="K)AX:)k*f^jFU;U?"ڌ~ozlȧjִl@Z֖Pi^|d =66dk6I Օ4jOaT{0za[v8GU7ֺ{;qkl Om c`rkss%3ߘT\.%yXE.-5" 3aQ\eGl;lp)ll['6@k4k7'95*Bv2 #c>oZ' ֈU'&cޮzDvTj Ҭ<֧Q¦QGy(<'JNz46$'7qQޙ=*OO=}S֣<\T`r\Ɯ$SU\֘sȪ3;LKo1VgvSa NՍ6#Lw4'NMt҃nI;uEFO-FLP)589G֎ayO9GC޳u h}S ~F{"f/D 95H*E$sO(z _$i2uPuzM']tf$D#_,vgOMW9#ڳ&ݳ'%k>_ۼqZZEV1,H>U!`c` f{!qsqa=x9Q(p 5yVڨA*+Њ=*\qH)@ QRE^Zp=Vn0#qGAyqxK{VM>@>c\K-۩5U#Ѡ{U̺`SAV6y ÷Of5id/{1eOƳ1Z˶,1ZGrǎI51TWBֿuQ\rڦ2v?Zu{sZ7C(8P*.hD>nHӅg"aҭ_:iv3GkB,략|svv~❠sӥ^vOLԒdzB̼w3:ӗ(EɥPG^6Ӑu $NA9&AGJQԸ 7wܜgQ1ґ\=)^p:t4֗ ҩ:;TImm6: V9ogXREt~) }kDXcwtvz|l"ՓҭT/ExL{mBۗ@ WlՑaCgvy={-KP]AOjʹ{VځVpgf[< wit69Y_PfNߗ=+n^Bb˞5ȸ/TְiGŪDM7!~T$j 5I?\Tg^GI!o5R?v8蠊,yqԪ"*ҺTP)ihE-v絹 x(jwXZIU[8~sjьյ[E riJOϸNy_2U=\WF?*ޝ~`fN_1 查D hn SfVYzMg<3Yٲ ³5X0=xcQiŦ[= 9#mDl=6L?xGz˸%y9f==+&KiN]>².nVX=`N~f(?֟@m=&wFRcH94qKO&}iȾqϠztj'cp*'rTNROUW2pj01ECyq WMX{]fV62޺>m-1Fd)̇3PԢR3?2;d jҳ`˩\\ĤA+[_j[=Jf0,%wޞ%ķ[yECz1ܴCgcRkypE<$TDhuۿzU4;Kl7$13zԱMķM_C  Tcyv+Fw3UGkwrI8QP/t3+ kIt1:Z]|6=+{N[$$7_jW(((+y`x$&}{աQ} ܰk$K M>W;cś<RZSz-[b$4М(P\ndl }*S8![/4*G|vR_j !\3w$&+n"QzÇˎpʇ8=`[4q $5j Y>min'_2f'v-ķ2o'6K #(i-.AW\G㖫!7jHP-R[ r9S֞N IĊxR0 srirϖ/AZGŒ-Dp7vLBf9SJ1VvgojtmKi+aCԽ@ʯַ4m8RLVzvߺ]}+OTkH2ߏ]nZ/ݮ5J\5Ը|{W=/u&VtK))%N>R7B.^\"9g2D$RAޑ : ǵ7#xv |w {" { [HqƤCDc[[p%K_LpǵmZXCj23tVY(Iފ)h*Ų0&:5hu֛pTf \ܶ}+%\,#<*<ٖ!֌ [RbBkǹ dKkrv aA.hrXuJ?߬w&Wbu&YY(nN;,c;Z;ku:|:MsԚY t+P':Ոo l_ϓjR;yqڑmp|c85gh P$4F6hFiP4~lMlSNwdy8Xn'X,7qަּ"C>գiid)yl+ݯ?S]8 xUF+fH$QkucLEsڮāsZB w5jG2O4BUKY [=;i f{T2[=gDKT K1,zU{v@T۞rG&H80=Z6㊳FXN2mUs &Usu.TjIRhܹ. \^ouj1[J@Gq&؀UUcQp)iQEQEQEQEQEThɬVmcZ_Jt tE&F>X[8 Caީ^@q̌*ԍދhc9vncKhV5DZDH" ArfW\ǐ WUp͞h6j b,)]vҦC'4A֮\#E 8$}*Ĭ8*luD ԖќoaɧFvaɩ\cn1S7́8^pO|qm8^Zl.Y$d0lQ-gD!EL$}=%',}8Y@nt&ss2MpPz";X0 >KK|`wU-rHu5r8~Q6}+pq+|LƱi[,B5r6zZ˲FVХ`WWm툂`WQ `w֥+{71sf$Jc3!$uy=#v@Fiwi<܊|*]ԢW-Ŭ"1=knlؿ{jZۭA-QEQEQEP)Z+I؜j$}˹9`.v#,`Yԯ$zU ;zӵ;4L aڵ4X.ܳtT|}kJ,j2ǹ5z-Ws*~ ۡGuK~R9]ԗ '"jevMl;οAQOjq5<Gf`#Jnm(JC@4|=⯮AqF8]*:R* <5ٙTݘIي[)vx8֥K=jhOZR[H̀OSòy`)s?MGЭFܫ1=+P0u:tJ89 3[!(aEQEQEQEQEQފZ(St?;~WoI̭W6ɻ+kIV?2Aw䞸HV/13$կ-~cܒjvp4{ի۸2@8WՋ# %>Z.I5*JŶKZϻ<˺pdmp 1序jSmOȦ |r-Y LaWqVXTt^IFnb>ݽz7OΒFc$ ҼxҘBL1وQ5"FT 7RC>RQ#쏧sTd|4~{-k%cXk_QK<֝Ž[ e{KbYϩܫ>vzU^hk7ZMb-!*֫,vV}GkhkrY?{֞l#*̎f ¦Hs+M>¦p$d .qU'e!?15"7N}K֌fȪ*W=;:qԇ >_O ZtN(%PɥFM6#SRZ=ƃ-/{:tz\vܚ-4m>n ]>8Z*WhWBQڮ(p((jMh՜9aҚQK#u:KEQEQEQEQKEQKEQE%REQ\e"Ulx (7JUZ`- Y9K6 `rkkڶkJ(((((()h(Z(Z(Z(AA-^}Nz搀 ֚949Hc8Ӻ.)\~5',ry7K{'*/HǦhhq'Mí)L744xl"`ujr)0«lC/=i$85oIi!kx'Xz1]ly+D8Gan-\>T@w5fQEQERE%REQEQEQEREQEQEQEQEWMy RF):Ԙ6:yCV,[=i6U*O `1J[:4/J| `J~9(_ԪrzzԿuJF8)9z@4^ }wSw5sպWQ kFa閟eቾo[RM_*簫=:QEQEQKEQKEQEQEQE-QEQEQERQEQKEQEq)*LJ WBdaN I4G:){T{&(*=ȧƞ:#"xJr) sJk^ Mvqޥmۨa Oִ4 3u0'?j[10:=Cڊ((()(((()(((()(( aJ9&4%,N8& WX P`ziǭ7ߊ`RsSpC1sPf={$q<3O# K$iEcIks+Ջ=.Ԗes]nf z5%@--ts5b(Z((((()(((()(-RQE-W 6 @kPJ08ݼrMs{ t5"mO ˂'0'1Zc0kbR)Oxʱec'Mkg5݊B-%HRtr} oXh1GJ2kbG/>$J8#P1ZHTSiԔQEQEQEQKEQE%QEQEQKEQEQERQE-QEQKEQEqڀq66OW'(0/ h`8{Hgڐ:;P؞mg^bkHҖBgb IC&Sz k+$"(T"(#Bjߎ4@U'ZERQEQEQEQIEQIEQERQE-QEQEREQEQEQEQEW ϿW ͸ pNF 2Œ޴3 FifƊF8?:F,N0)O6neRJIjSuri949g#"#=)7gޛ>ipsKKތ{R(((:RQIERE%RE%Qڊ(((J(J()h)h3EF1ӭGҌRbGqJyvP(QEQERQE-RRE'EQERQEQKEQKEQKEQEQIEQEQERE!(=(=( AҌ4(ITqSA)h((((((((()h((()h(S98#ޔ9ڽIw;Ҟ8Q)(Q:EQEQKEQEQERQEQEQEQEQEQEQEQEREQIEQE((()h(Z(Z((((J((1((Z((((((J(((((((+ ?뢮(Z(((J()hQEQEQEQEQEQKEQERKIE%QKE-QIIE--QE%%QEQERE%-RQKEQE-RQEQEQEQERE%QE%REQIEQIEQE--RRRQKEQE%RKEQERE%QEQEQEQEQEQKEQEQEQE-RQE-%QIE%RERE%QEQEQE%REQEQKEQEQEQEQERE%QEQE-RIIEQERIERQERE%QE%REQEQEQEQIKE-%QKERQKKE%QEQEQEQEQERE%-RRE%QIKIERQEQEQEQKEQEQEQIEQIEQE-RQE-RQEQERE%REQEQEQE%QEQEQEQEQEQEQEQEQKEQEQERE%QEQEQEQIEQE-RRKIERRQEQEQEQEQKERE%QEQIEQEQEQEQEQKEQERIERQE-RRE%RKIIIE-QE-RQEQEQEQEQEQE-RQE-RQEQKERQE-QEQEQEQEQEQEQERIEQE-%QEQKEREQIEQIEQIEQIEQEQIIEQIEQEQKERE%%%QE-QEQEQEQEQEQERE%QEQEQEQEQKEQERE%-QEQE%QEQEQIE-QEQEQIE%REQEQEQEQIEQERQIKEQEQEQKEQERERRQEQKEQEQE--RQIEQEQEQEQIEQEQKEQEQEQEQE-%QEQEQEQIERQERIIEQKEQҊ(()h()(Z()((((((Z(Z(()h()(Z((()h(((((J((Z(()(((Z(J()(((((((()h)h(()(()h(Z(ZJ)((J(()hZ((Z((Z((()hZ(()h()(()h(((()h)ihZJ)(((()(()((ZZ)(J((((()())h(()h()(JJZZZJ)()()((J)((((((Z(((J((()()(()h()(JJ)h((((J)h)(J(J(((((((()h())h((A֊)h)h()(()h(QEQEQERKIE%QEQE-QKE%%QGj(RE%QEQIE%Qފ)hZZ))(JZ()((((Z((((JJ)hcʈȇǙc4,x!OE%RE%QEQE-RQE-RQE--RE%QEQERQE-QERE%QERERQIERRSJۑ) ) `du:J)(Z)i())h())h)(((J(((ZZ((()h(Gz1--RQEQEQERRQKEQEQEQE-QEQKEQE%QEQEQEQEQIE%RQE-RQEQERފJ(JJ((Z(Z(Z(J((Z((J((J(((((((()h(JJ)h)h((()h(J(((JZ(((J)h((()hZZ))()()ih)((Z((Z(((((()h((Z()((((Z()()((J(( ?룮)()())hZUNZu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES)QEQEQIER*/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES*:(JJ)h\nw|RQKENZrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2襥Z(()VNS(((((((((((((((e2E%%QEQERIE*Ӗ{ө((((((((((((((((LQIIE--QE%%QIJN^u:((((((((((((((((S*:)()())hiN^u:((((((((((((((((S*:(J()h(ZU/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES)((J(iW9{ө((((((((((((((((QtREQIKEREJNS(((((((((((((((eGQKEREQERQEJNS(((((((((((((((eGQEQKE-QIEQIJNZu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES)RRIIE--RQJN^u:((((((((((((((((S*:)()((J)VNS(((((((((((((((e2((J()iViW:N((((((((((((((()GEQEQEQIEQJ/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES)RE%QEQIEQJ/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES*:()(Z(iޜu:((((((((((((((((S)QERQERQE-RQJN^u:((((((((((((((((S*:)()()(U^NS(((((((((((((((eGQEQE%RKEQKJJuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQLREQKERQE-JNS(((((((((((((((e2(())hiNZu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES)QKEQKERR*/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES)QIEQE-QKJJuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQLQIE--QKE-%R9{ӗ:N((((((((((((((()2Z()hJ(ZUJuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQL:J(((A֒rӖuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQL:)ih)hJZ(Zr/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES*:(J((iN^u:(((((((((((((((( ?諢((((J(((((()h(()REQEQEQEQEQEQEQERQE-QEQE%RE%REQIEQE-RQE-QEQKEQE%REQIEQE-QEQEQEQEQE%REQIEQE-RQE-QEQEREQERQE-RQE-RQE-QEQEQEQEQE%QEQEQEQE%QEQEQEQEQE-RQEQEQEQEQEQKEQKEQE%REQIEQIEQIEQEQKEQEQERQE-RQE-RQEQKEQE%QEQIEQIEQEQKEQEQERQE-RQE-QEQEQEQIEQERQE-RQE-QEQE%QEQERQE-QEQEQEQEQKEQEREQERQE-RQE-RQE-RQEQEQEQE-QEQEQIEQE-QEQEQERQE-RQEQKEQEQEQEQE%QEQIEQERQEQERE%QEQIEQE-RQEQEQEQE-RQEQKEQKEQE%QEQEQEQE%RE%RE%QEQERQEQEQEQERQEQEREQIEQE-RQEQKEQE%RE%QEQIEQERQE-RQEQEQEQE-RQE-QEQEQIEQEQKEQEQIEQEQEQE%QEQE-RQEQKEQE%QEQEQKEQKEQE%QEQE-RQE-RQE-QEQEQIEQIEQEQEQKEQE%QEQEQKEQEQEQEQEQE%REQIEQIEQE-QEQE%RE%RE%RE%RE%QEQERQE-QEQKEQE%REQERQE-QEQERE%QEQERQE-QEQEQERQE-RQE-QEQE%RE%RE%QEQIEQߥh)h(Z()()(((Z()((J()h(((J((()((J()h)h(Z((()h(((((((((((()((J(J((Z()(((Z((J()h)h)h(Z()()(((((()h)h)h)h(((J(J(J()h()(((()(()h((()h(Z(Z(Z(((((Z((J((()()()((J((Z(Z(Z((J()h(Z((J()h)h)h()(((Z(Z()((J((Z(Z((J()h(Z()((J()h((()h)h(Z(((J((()(()h(((((()h(Z(Z()()()(()h)h((((Z((J(J(((Z()((J()h()(((()((((()h(((J(J(()h)h(((((Z(()((J((()((J(((((J(((((J()h(Z(((((((Z((J((((J((Z(((((((Z(((J((Z(((J()h(((((()h)h)h(()(()h()((((Z(;ފ((J(J((((((((()(( ?뢮((((((()(()h(((((IEQIEQERQE-RQE-RQE-QEQE%QEQE-QEQEQIEQE-RQE-QEQEQEQEQE%RE%REQERQE-QEQEQIEQEQKEQKEQKEQKEQEQEQEQKEQEQEQEQKEQEQEQEQEQIEQEQEQERE%QEQE-RQE-RQE-QEQEQEQEQEQIEQE-QEQEREQEQEQEQIEQIEQEQEQERE%RE%REQEQEQEQEQEQEQEQEQEQERQE-QEQERE%RE%RE%RE%QQEQKEQKEQEQEQEQKEQEREQEQEQE%QEQE-QEQERE%RE%QEQEQEQEQEQEQE%R3`摜)4g8݂?:((()h()((J((()(((()()()((Rm_J0=(:R:RE%REQEQEQEQERQE-QEQERE%QEQEQKEQEQEQEQEQEQފ((((((((J((()(((Z()((J()h(Z((J((()((J(J(J(J(J(((((((((((((Z((((()((J(((^QEQEQKEQEREQEQEQKEQE%RE%QEQIEQEQKEQKEQE%REQEQEQE%QEQIEQIEQE-QEQEQIEQEQEQKEQEQIEQE-QEQEQEQEQKEQEQERQE-QEQEQIEQERQE-QEQEQEQEQKEQEREQEQEQKEQEQERQEQKEQEQEQIEQEQEQEQEQEQE%REQEQEQEQEQE-QEQE%REQERQEQF99()h(((()(()h((J((((()h(((((((Z(((()()()((((((((((Z(Z((J(J(J((Z(((J(J((((()h)h(Z((()h(Z(Z(Z(((J((((()h(Z(Z()(((()(((((((()h((J(((((J(((Z()((J()h(((J(J(((Z()() q)H(i8<1 A3REQEQEQEQIEQE-QEQEQERQEQKEQKEQKEQEQIEQIEQE-QEߦx h5Cq̐v?ZSqӵRQE-QEQKEQKEQE%RE%REQIEQEQEQEQEQEQEREQIEQEQKEQEQEQEQE%REQIEQEQKEQEQEQEQEQIEQE-QEQEQERQE-RQE-QEQEQIEQE-RQEQEQEQEQEQEQEQE-QEQEQEQERQE-QEQEQEQEQKEQKEQEQIEQIEQEQE(Z((J((((J(J()h(Z(((()h(((J(J(((Z()((J(J()h)h((J()h(Z()((J((()()(()h(Z(((()h)h(Z()((J(()h(((J()h( ?諢(()h(((EQKEQKEQEQEQEQKEQEQEQERQE-RQEQKEQEQIEQE-QEQEQIEQIEQERQE-QEQEQEQEQEQEQEQE-RQEQKEQEQIEQEQEQEQEQEQKEQE%REQIEQEQEQEQIEQE-QEQEREQEQEQEQERQEQERE%QEQERQEQKEQEQEQEQE%RE%QEQEQEQEQERQEQERE%QEQEQEQE%QEQEQKEQKEQE%QEfRE%QEQEQEQKEQKEQEQIEQE-QEQEREQIEQE-QEQEQEQEQEEQIEQERQEQEQEQERQE-QEQEQIEQERQEQEQEQEQEQEQEQEQERE%QEQIEQIEQEQEQEQEQE-RQE-QEQEQIEQE-RQE-QEQEQEQE-RQE-QEQE%REQIEQIEQEQKEQEQIEQEQEREQERQE-QEQE%RE%QEQERQE-QEQEREQIEQE-RQE-QEQKEQERE%REQIEQERQE-QEQERE%QEQEQKEQE%REQIEQIEQERQEQEQEQE-RQE-QEQEQEQEQKEQEQEQE>QEQEQE% Z()((EQEQE%REQIEQE-QEQEQEQEQEQEQEQEQEQIEQIEQE-QEQE%REQEQEQEQIEQEQEQE%RE%QEQE-QEQE%RE%REQIEQERQE-QEQE%REQERQEQKEQKEQEQEQEQKEQEQIEQIEQERQEQKEQEQIEQIEQE-RQE-QEQKEQKEQE%QEQE-RQEQERE%RE(J()h)h(((((J((((()h)h)h((((Z((J(((()h)h(Z((((((()h(((()()((J(J(J()h((J((()()((J(J((((J((()()(((((J(((()h()((J((((((Z((((Z((()h((((((J()h()(((((J(()h(()()()()((J((Z(()((J((()()(()h(Z((J((((J(((Z(()((((((()h(Z()(((()(((((()h((J(((((Z(Z((()h)h(Z()()()(()h(Z((()h)h)h)h(QKEQERE%RE%QEQEQEQEQERQEQEQEQE-RQEQKEQEQERQEQKEQEREQIEQERQEQEREQEQEQEQIEQEQKEQE%QEQEQEQEQEQEQEQIEQEQKEQE%QEQEQEQEQEQEQEQE-RQE-RQEQKEQE%RE%QEQEsEQEQEQE-QEQEQERQEQKEQEQIEQIEQEQEQEQEQERE%QEQEQKEQERE%QEQERQEQEQEQEQKEQEQIEQE-QEQKE ?뢮((((((J(J(((5SQG ($P^!x9&"jFnG]m~VPS p^8?Ξ5³1y*;g7ޔka ֡eV\u#\P:⛒eC`SS휋l|jKwqH,3R]J6s#рM,D Xר&5QeTA ;G fU 2CSNst>Ԍw}*kxҀpGʧ/ߑ 8$qЀïuQn)/NfqDͻjer93$NI;aI+'2i7yJT@r=OjdpP.eY@R=zfH#n&HQĿiv#k&Zy,?srOZIdE?3ӳ«Zk][*XOaqUʙ.}*tչIEQIEQEQEQEQEQEQEQIEhj ucT9zNӽVB~ӽUxۜV3K`Jg֟NxTqc+M0H\v?{' ~椔,m皒LsCUvcޣ cG#dHž1ޤP2g{lknVGvH&$܁O'$`W Բ?rT?jY ; sPoc#ֲ丸v#SYi[ۊ{sIcS\D"DA ,MM2Q0>|iETEϠWԕ`G}03U F o:ܓ!jO >K-̌r+^@bCI֯+o |ҟsRa!CTuO-X[a JΕmJ׮*(((((((()((wP9}KʇdJ^ J$rl`3yȏ$]v\j 0@̲*Yp=@HHX'Hs+=s{¶PTz֠_%g#J"u8$X942<}Om 4[:\,7-mOJ ?!u": K)I>֏*;yaY'ѱ!5$k=G5-H1猚e Qz{H1%MjKZ@z/_jX%$ ]-ԒmQ A?F%rI$ASoK=³NHJ.4?{WբI폚Z8GՐIlfIÌTZi, PsSUuӣ2i|UϐKTGl}4 擩 4g)^j߈"cu'9Yc&^9F܀灞Slsc]9_(Z(((((((((uɂG۷\/7PX\ͼyqI#=Nd,H_c X)ݕ6FzR#fEa a'azߑic*"7,rsԹbǐ1sw!%B|}Vd9NˊʞyfAh04};]nIwuL>N0Yw"]1|}qɬ]B^*BF;d my/kcD+@ i1H:^\Gj VϠί"3rO>T,n)-a}ݣ0fAV$7$8I/>‹|JxΌ>zڊ;f;L!H =+>gpPMYv="(?fʹT֮XQ&dJy8.kC3rPF389qM VZ((((((J(J(*$ؤon>yy1H0OEQԮi7H0J4t 3ްcIF{Ru&\=R۾1R[~QO2+_,:Z2 A*GT5G*o/,N7>O ʛ.I¡BI;yclV0ܕi2>ݪՎ Ǒ2ŵRg_5keH+5w[z\x'<ڼNvs%ɟ<t٦ppI)}kWA) g#j%I#7!t+Qn#S T c֕Xc}'L?iLZ`FvxDVA+H#ӧ*`i\toj#$ Uok3Xɶ 8g\1.HFO%!n|sWn^8Fi om@MWv]bYQ2A$q 9^2c,?S3Ÿ 62+0d,:Ir:آ)(((Z(()((( `pZkm Kp2~' Yw rI湋̷H0=aK^9 }*ISrL_-mGp\sHa^z0@ʹ8R#K 󁚗6۲3֯6|@WaB>pr}L>k!!$;bp/Xs*u1G [WBu2!YDC8, cP\,Q)#cPjmUb#JlaAӤ py/-@Y°G;rOU]E CQsgwc+Ri _n!9Swb[!rNFr*r6!%ML0i?J9囚7;y#JvUQ^})Ĩ:W+J(J(((((Z(Z("$XFxɋhK@V5Xm?3sY(2wO~+>1ʹ皒so]d)nyi34xY}gD-.Dk{E620v>\`5[ssYmd#.wWBʹ t'޶%hR5!p=l\J qsZZzGsW-v|ɦVP-HˑרG V.@*faK%@w#j$RFøRMɥ@OV"6[ژN=j+i Qkt5@5˃ xQ$f{S};_K2"8QHQȁX88o$d}+oXԎ@4ܪqҤUw*1'2~GIW?1oʮWM[4QE%RE%QEQERQEQERE Fq&\Ls]+ԏcFA>@D`J# o s9Q%%@|*H .+ijB 3vAR 5ta*[T|w5&E!  YIbvO@OGHʬC?›Pi=ܫ^+gCww+ƣȑSPouT`>P@Q ۫}x (9??¥0m8ȧ9bӊk}A9'5^ʈ#rO嚐W+O8jVRWFrw)>ZUwE眃S(+.$VhcvF_ޭjŇGUen 8:Vt o&r<NY) G"tG.T.LA1yRR264+}$aOW dF%ᓞBZ;: hidoduԞ`J=d'r*H҆1=*/znݸ*&?]i(((()()((c6}*)[jVFqajYz˼W4p<ZYXG~Y6m?.*($9,g4?\}j+9LV@mǘSwqVA̛UG]ƬYIee1ʑ:r[+md,k[*tqO?+,,WOK,-n'X{q)b&K7~"a/C⣼} vEu 0g9OQ0*~7?k8xkpxU )F7FliϵF6Z_?9=pj? 0+QMl\7kd? };|d|=ItS T3DZ$gjV<܁QOۣzI7:9SlJpZUg$U1j~-ɦ,@p8PF}68S\ gҲadˀ4y/ilzLҵe<5f-RQE-QEQEQEQEQESdpRN* mdEq'oS$"I-2EA'aHMAȂr~)(T1 9Iu߽?LR]u҄Ìmߊ!3:zq.8֝mC?m5.aV92t>ZTw[ 16* U]c#r|s[/̧B| Y~\R\ ӷ=})q<ߔQ"4n idCkҚwA(XJ0ꅳ 0j"QZ?)=S-II$̣j՛|0 Kw76FqϽTD$,>j($DcB*Xp=z֯FB`>WVˍhSծWi]U%QEQE-RQEQEQEQEQPܢ;T9%ꖥʱ$5b}hU$¤dTzXՋ%bm褶q̿&h* /XU{9;ȉ8 }* 9B]!<ޞ@fH-鎵$$c叵I#+1ēB1K$g KT`NDal]x,x4hٟBpO.ZD 0P4EʟRLZ8 [qskx*advZ%[H4Ne SP/'恴ƑdQ۾j_0I4`uzU.EaެFQ1!| ,~cRIoܓjփ?.b^eB\ |fx{|9oy ֳ󎴩&dF'Vc|I-J<2gk}Ik,R 8XA rA0[V?pǷ>j$+eϨ=N5ܦU!SRC/ Te\%Jȿ;6z}+6MYxn2C1FC|ۓUyݗJF CQWy⋸s峒qby$UGpP ~iqF)q׭h1(tJ7ӵP9jGcvtķeT&}ҷ폖#ٳRĤ/',DZcPCEs;rďx_;Mh%zTXQGztj6C}U}fѺGơ*)~5Yyݰ'=EgekӟzKQ]Mv5EQEREQIEQIEQE-Tr`H^Q5`?b(o%He~@A\u.ù#W;< ěA9ү[BR/1ASEm@?H8֬Gm@EIy3V,r|̼{ Xw ~T#Ƒvh=]4F햕˨ %Foq%we9l֩M3?jY{- ]vp H6Mg-8v?6Oc$15f$6@|;]*g"CGj]2$Ŝ|>nSX8"xq۸چh7B*D!BU{YFcQ$MNo\:Vj# uaL ޵̶ V9ҬAg͏֬}6VjU6"с1ڡRCMm9Z28RV}{0d7rk`O8+dd@<̜ _.1$T #Nҡa,dAަ :Uig#OtU!!@ Ю袊Z((()h(_Z(pGoH1Mf0ifzvs3Iq#6#;gy_bzv1L A$t E$S#,KldzfH, =jݝ\XKp'kWYy,v1_ݏAOd׫y 9<֜U OnxO'?,~bW=;%lx3-:±t"N?r+ܗ~E洭`ϻ"kBݖt*)/rňP8\ic9:jǾsڍFm #?]c Fxަ_Ff(#SZuklA?Ci, aGEg,֚ϴ%~YN9KSf-N#tZm: $9b0kv'nX4锕g9L#ͲmS/!O/XW}ӌFa8?H\(YkypσV3D򨌬Vk`]SL}A?O¦ARp*X*O *dQզ"TUc;cB}ФUT(!VknPuvU(,U5EHIZeh$K=MWE&!7rvdpaRۏHI\'d8BӯfeaApJh˙@eiXx 㣽X}?1޵on2< y-v~\oeb&0@E4"Vdv Rb`?Emn.wI")@cTR؛2HdIki: .-K;+>#6˖#*Һjk)((((((E^"N8= ejVYhxʞBٞV"2ZȬHu zpKX榕Dr`}@53CdqU%nXţp;#'V-ܙ$Tti%p8czI?1i_#P1az~1;EF[PN$B9ޚ\I2AsLv3iiPszao9'wڬ 0}MEC7g8oγfQI*.p:PXK-ʥc^QXK%X"Bndtls^.̍=i.TrǮ3]%vUQEQEQEQEQEQEQE#3tVG@$u8+[b@4w>M(T4>Ywyp7d- /L~${bu[ˆt##8MR9sTC֥;v_Z4Ş6V09=1(ҠTpïʼ vO$eͻ{g&3$%؟JfGP6Il- 5& jrM< T 4Նe33cV8jͲJ"Tm+N!1aQnA?G[a< 2ӚNJ#p~qڳc{,j[XDwG}3ޤHGȣ!0=*+9ZU\ޙg)BS(EK9>ywA.GyB]fE2J]*2(g 'ђؙb,1FS@||$dEg>w9kZ١n_=p?dB?>ԣjMIec#zT5O/.޵cHyļ:1vT*(1C[j;n1^l.=ºJJ((((((:Qҙ#`d ơ-{$⣜ J/ZJ͕V[f!H\/lXFIUjg˧Fg`2j̱ `?x`HrwfB2XbXu5WܽWRY]~d@B; N6w[z [l~^+F0-Y4Lg#=ITXNETv2KV$nb eX wy6"1py8Įmu֕Nagϡ51\UV"kn{_,,_y}Gm =pS/Q㱨5>T?.CP ܎i,ERe9,jn0R\`,y e:Ld7Ԛ:f̿A9ƙT^#۸76i#y+"##rns`TLHH$`T`bϘrJw A$$ n.wXP1Zzoq;@#WoURZF?PO槾?7)b_pnU UGh3;@ #yp'1TC€>drx M.{zdowM厃־9s q־')N)"0TU?ΩI /U~5Ypw |Ȥe#w`3fZA FV)#P254L*c2Fj2dS=?w~ZӤuHʜU9w)ZnW3`n*qמDf`720{V#7qU.ci\1X|&k0*ޝ/$Ja{fd6c95bXQ}*v eϽ^ˆ( c%I9nUQ*` ~m8Uv;H O Ny8?]X";%oG0O^WRqMU#\9-V]ag9p֫]yas qO!%DIQd=A)c9/ջ$o3H'jh5kx^sSĭd֮fڗ o@ jB~وKr+R+N((((((GXTWS:}j;D@Jo#MyzW7o+ߗ`Oki{cX7$q;/ƨ]nے qY !+}Z;__aVgeWrNGz1oߝ q80qLZGOB~)CJ@?ZO;~+nMO>Igҵ-l E˿&XLXb duy&O;:&Wj6J²u /sGVN*TG&;dS]m}VAMXUvJ'ڙ [ƍ>T03 jm%u;#}@."JA$j׸ Zܾ6SpZS-['zRonZKŸLL ,C‘ ,ӚkcUJp4FSE \/DbA(bfZ[a%CΛl@ \v[Cqޛi0V'h)!!С+n1 dj1=ݹ#ݻcsSW*b_\^yp2qڮ#oh.*rɾ@@1灀|`p[)ig'iڬyon.w'Ufqaf @G,> g۽c˽sj |V<@ItNw5dۑ-FNrFk, X$f?XM/m\8$ S-ɕ sV<;nę\sB!GrkR/v=! gpQݩjJu-RQEQEQEQEQKFhuQaOҹivM#\uMUH#q??`bnmZnZ=pN4ӽGoy%>[Kh0L1ݽp $c,OK5˿j3/NdXy%d HL-#Iڥ.rIkVWrIZZGĸ~Ux"1{VW&G8 ~(i5 ccڔUO$&Tmi䁓UHZ$Qs= Z@:Tiw8dHPXRK'+FFy>򘪝zMS05oO#I Á5n+di݊hQ()"#fFܷP"a5bgWJ9u־xOKq֎r=$6Snㄫ TW 0Tjv:p?S\U$(8$ٷoךLK3F/z TijuYW;U;Iq'&ܯoܧj9$hltcֱ,ەa~]\A'{˰FkAsZIs_W#pЯα$.y^kLN1Z4q<`cVL6=kJ40/'2!/KV*ZJ()h(Z(dͶ>߿g!v梺m늫8S-dd bfNNYaf r en3*RCɟUYحEn?o6.k[OitؑZCZVpRIosS$623-EݟLU79ʰ.unYXwm#S{ĹGlc^=h(KI>}sUFv,XMBsdգy|ZtX'siy@˹ nݏNL˼]żYxFP22s$ U"ܮh<6~U_*챉vv&sHxL `23ҙ4mxMKV9!W+nځVM sdE0@ F]M!~t^_$nL9gD7`?X $8lW-1"?0V_Y#aSyzv㓞b==;RD/Ƥr;S[?O _6Ш;AlU Xa*}!{u3n{UdMxo~ԭ;#)w4YJfw4i7sć<%;%?(mٻn"~hc8A5.19^4JBИ#UѫQEQEQEQEPK1ڣ6I8PucMwH/#mQyCuEG$8NYq ʓ+%finY5fSy[ڵ=FKǠU(KݴVͩ), m2UTzj60]@:}~O`II 8 [uIE袊'OA@ BugTRh9Sr͜pzNOҩ^Iql~]=X%0l91Ipde8<͸柷 N 9482,1+3n$ƌpXosRD>jhCZ(9 +cG+|8M;A`ޡ6p \O\U 2vV#;WU;$DmF|ӣRpaeJzR.V w={Tpa5#dx80x4$vH7qG.&;R)£O^Շ4R̉q1}x'hϘyfHy%mh)(=@LU=Q;(v#Q_3P1B,mi+<}aGqY9KoA\}ynFXაOEQ[j~j#57jbFy ?处cRb b8vnF+f_&*XlwX_eTf ;cHxQs׬l'n#`]#9#VZBcq[RgE O1zԒZ~\3VkS\\H]39|[EBcs*Br G)4ϳc(,{J8o(KC!"\:*ɐޟ,j0I5b;uy?54q$C 44RFXǭbxFT/\VmPAs֢e?xYzyXj`~ъS`8OӌUrTBb UrG >aSkvjEô䬟ҋ;F0 8 ֩2~cU$OJM- U<'0ҭhg=dE!N>ֳd8#Ot$ ?b?:'[u`*Sh@SyxxԷ-h8٩Hpq ~1|?> viy?. Z1s/ը1Gڎg1(뚫g  OPY$2IOZ@AGUp58jʦ#Of|1`N>ZCN59$yn$$w#1[78˥v~-ӶX0>k-$db5{9?01=L\$Ȥ\z rV# pCU",h!ႠSZtYTޤ`d09 pNqkiGdj ~FRq9vAct=7U}sYH {)8-da7OUVt  5KND8FVV8Xn}*ozpgGanJf0ĎzT@ǩYѯQFcsDHNp ӥO\]`1s]ϟCZIu/ZAV瓒qcݏjg3j ;>{MM^2D'/Zė}6 RkmO\ lj_2b+\Z&7βU,`oiSIqm#g-+kH (iY+cL)aےMYl7'w7w cSMugګI gmSO%CPUO$4aUEڵ\0xqLK=c.(׀ϴy"/ҫ%sUXl`AZb1B.zqI4O^Ր;u$]Rjj >AY"Tbxi5aBz }3 vqQY.p3L [f{TĞ?J@*2rĊyNjS*^8*CJ78=y{'JwnHQ֢)8AQ|W(#LXƤYBOZHLsۥ0`Lu 9H*78B1ڐBQVKF}*g9vD_?ӶN[ ѷ =XSї#*pTY(X ^jųqNIx2. p1VE.qڴd8Ed;^L v{Zf}JvNZǹF0sw5SQ$g0CLpƫjyT`Ttcޠo9\.{Ud?j ;##*%w7o}ȆǷ4j3\IsI|89"Zq<ZZo1ի[68*`5%Z^#$ƤcہWuݳG!͏kg#<՘ᴱ'3Vȱp:GﵤnFp+6P3i: pf EEwjh!,>ͪy˔;ON\[`󧐐/X`E &aP` t,aaS]m\2X%Fyo_J}0F2d> "/̜Ʃ\~&kPik]G =mŷdQDž4i~6F>N.Sbt I *}-~q+{)- q)[+ROp9829M>yM2j6GNyqэXFBs;(T$TwE8P{ pU: *Fp @ȪzUu5hZ{LTDTd #8<"#UJdPNEASj90ǧA2y.%ڟ; dhV@䎴8~)e5V3H}(+[;B|8>-i̛~#{V_8,S Z/,ppǧ54wSŽy4n%GX^_?>vD8Q*C!nd* $Fgrsj=|'qm'䃒*|C95q0 ,Hdcު'q"T{Y^ASQQƮ㧱ӑrśE7LU]̹jubRq)q}W?r$Tqi[\cl9*Aִ,du2n´--`HO3f~N:n\Td,~O {k[QZL*O|ҽ``20XWI<mGgڄqXw2ҲDQ[:j4o[ZlRpH("Q*RQ]OĠ~$#kZy pRI5hƛ=Jr4(Z#0H/R$K qn8Ep7`O`\y?jdvlsX3nnX(8c3Xk.[̐xmy?v?xW=c_~aY ޕ\-XVy:㚅ɷbX3* f 1ҭD4$J,_Uc@ ߝ[>hdGP)+o w;Iy>P(Od಴{zTM@su#r9 ޥ9'ց4Ags&TP眊Ėȩ2>z3anr5q]5R&I¸fm1W@HeVwœ^YFpA?Nod!ٞ9f|(9o%{)Y=[wyI`c ȶERX}8uH"Uxd [&&bdFga͐z5!E؏6nF襾3|} SlVqTlziVYnTPvMMc YX3"m,d>e|`ZdGMtmQS‚ "3n_$tUF#֥~u&N0*FE@ZmNyQklv~Op4n1yI\TValE{4aN{W.B+l%Izm pMdQ]JSY[Z)Cq|RÕ:Y4-Nήxzo2=TV$ԝ[;AՑZ'2lVFU!V@1ȭY-c2`g<8UMs-X ᚢmC쮱 ({HqVJW'VT6>,~4uFʯ,'v?{U]*%T#=M_]LQJQ\\48ڧI+ux5]A(dUJ7aS!G"Q 8™xuvj;V|EpK|qڴ py]9e^ #TҦ]Ks7DEID2">iu;;RK#6F!(Uwaҭɸ9bT}3Zzc\ eW>W41m× Aؓ 6Qɼ}#jV<@LjG7L?{)?jI^39!yZEoodQi< yOC;O$v0?<~U[un',HsS]!⥱dH,zХ->Ne2?JAT{{ҪH p@7qڬO0nfZB8$?Jb&nM[Ax; 80n%bcǹI& 4xiƒShֱZp< {JF|!xU?Zms퓌c5~1. #EĠp6E2otڧ?ʰ@2w5g ņxsU5ĈʿGe5i:H$zuKQe܃ lz/ApZ1†lZR*] 54d]O5< Q do<goii;sM pWsS.",zTD2pjYQL6}6ԜG7֌dRc9>cܒm1T*qQ#Ҙb*I28ɂNN)_9*((w z!t ( zlnޢs4nRnr] .Ojp2MCКpA"CpX]1nW5˙m!If +JhT174mUA01O3+`7«^F±늂3LU ɷ;eO/d?aYa IsP.$8g=Pd zʬ%2֬0]Au,pevǥ3WIrڣ՟}ʢ8Z (`3W۾Rߥ_|E"$ 銭:O1XӮ$OhpǡRTisM$/0?,@zZEV{y 'q$\}^KY/k#1A5mr@r:\$UVl ,Jsy*r.7/m7W?1I(9f?Cx4(MRdg`UbIh6q,R8"0NW?85aF8p4P]yŠl6p\B*@fqԪDO z㩩뎵(7\0J{ZV|p@/#7qKgێ*Wmx=kLݰO)Asޕc 8)8H$SV=tM B<~4 .TwdL;@!PFN4pj)y]e1)r3L|۞jn ר ZHAܲBĹ玼q]V$0GCSZu #c:R1=8i7ټrIcͥ:=z-ZΈArx硬Rq4jA`{~8E9$V2Aro`qY4tJZ2qwhK?`t9cjlmW-ְ&D69?TZ{:UM\8o]ac@Nϵn"6?wϷljLHN'l[9c_cޱܪ_c޲o(Z?OLxuxW@P9ir8* yKǵ7g Fp}iFbNz!_= LD%e$MA.>~(.7b mc,Vmвn Gd.S y?CZ3J|:V4~4X`zU J\w8ұ윱$M?*bx ϽUd2<+8Pn 2=-m^C2*;۸ٽ7=;˕%IQvމ)9DGRѱb`—PVy Y7SEXgp=Y"e۸D?[t}جJk%P}MuVkh.lT'>Vj>s!1A5e >Չy );,AZ;H=}+Ng$L{_Z"!jUT"6|ߏM+;fr!}O<,95YXIN՟|,1U4#pnx;&PĿV'&Fj#_ҁ++(!)d@#i>QVsPc8b}*͸Tp65ra=t3x h~ 'jY_ϑ9*K>*r*4qMŽ99"# ;fX9Q㜞Nnue=+1 A#-*6o[8l%8;?ҘÌnjmN6j.`P1QБ]|ؼtRۧ V2\|s,rI1vqHxy$'d|{)'CN{}6p5ڄ|*?Ʊ%,uAP,b$T{_s?PyH:(ll:o<իTű8>vv2yIWk4jԱdr޴BMGaN?b=7WʌVm5ޤ 9ck#FR*#`Ž0k3E}@J23޾Tvlv1裚 f5iT {)]ڪ0\ro|ij}ޫ;}qMEg#2_$ 8ܢ +Kif@=mYʢIN2=ԏq ?SMJm5RyE|fؐ 99V+u FA9?έ2g&.CO5 ъ0zȄ{T74Ikm$>TjzڱA'o= E"eOjq7ڭPcUbV'h8;PfҬ8H0pvXM)RF cKz~Xtq+4%:CxX5vF59/ sYPdVP[Epr3W/[on~H F` A;9 zl!* g9N[bq$㧭7iX}zR҆PF 0c#EE(99g98*ɭ6R%j zҵt  9=+_O.~cjvz4 wj_gߴqݽjK߰H20U}.Iy&=*k%̲ cWӭrOLռ1õ:ImVp@і8[p[ŵ@un.cx#J{hz{O,?53) ,Hf=MX6۬iN{Է0CİFP~u4E豯Ɂ.e.*MB[ q on>Z?w6*4xGOjcjyqDNdn|:E~5kɦ2O0 /=*8.#(qzTQ v=+RIKöA+:Vh@WykKx'8kO)kaנv0 '$*F`n4܃!SNߵssQK:!9{rL~vu>f'c0P=u_66BE{62HSaO{gaه8uilm6rdl@$lS#oN99j#G 2*X'u@p5FD_1}8)timl.1ӥTIx2JqVYw9Wd,zu2VόndnS8+*W\j 5.)PcTɷYPH/!:g؇";d5ic!_23Gu8/XZn5%U8=k*F0H dL 5ڗ;%OO]f;n$)+IE`Pَ/04ʦziz^[4mau qEߵGlp]Mvs r* 4 nP>-)6A즐U{HAUjxl2GJvr<)֙MyJ.Du{T/|TC 22o^y}r3Տ9m?y.LDc7L/ه( "M#2ǡ*@#-Š"\Ǧq[uܡJEP{I {IO: `V<褀ߝv,~٫W:j]>8 XtI[G5XLtyͤUBA(稐c]Ve8_?7jмD!=XTɰc6U3P˯1T@{hIasکہq 2XI8pEŠ}6鿍cVKb!p"?VzKӖIhƤY!)E]xm;VQ%Pӥ^Hų ^ FkcQL^IPps2 jeHRdҭBl#n#&zU{BgqMx^@%JaBU\jK;; ;`1XG2=3S\ZIGC! aAFGzo1V#+ޚw1أxGV57j{UW;8vM V(}jg*zb"H5QqP`Sd\HwۃM8HgFp=y.e z0<!̟Q\?qwʸ}ڨ 98V2Fs8(֐ʐn`E4JcS g \)8Dዄ'S^_]1GD~D)''y/DM#L*{ܚM*{b&rTC*'<UV7*$W.2A<57+eMEr\bI7 bIFX$5P*PycQq$zjHt^9ٵ6>ͨnJҷVNF[JNפ#K@;΍a犣`'+fd''Y65f eZ0Tc s(Uf{{Sm#)C;qXZ&y4nRG.rw ܟs\|kZnnɀ$kZL9ԉXRVu#ޚ!ʮ9 y݅@B*F*/L Fޙ#8>pzS};;nzp]NUZ>~TgoZ첌HvYGNZlPOwJnt@tVŰJTNUWWݻXtMaR7ڒ``l>`HsM7\zsґWt0G>aʊ+Y%,CHޔr]ΖTvs3nj;M5bQ=}k:b[X6{vVu]ݯ8 2MoF;wte0q=kr@oAY]$i|E$ˡnWRb<< ̱I>\>gOLq^BP2vNԍK!|nd~5 Gp9AkjbC69^X!hPQ k ܹ*Ju`xB~Uq 5aڪV|@2!ux &mG۩Pz.+UTP0( qU5{22{VG'ڂ yeY̸ZҬcTg 6(~0eytiaN$,O@),ُg-EJ&U^=Y3Lҝ-M4.* e,PpJǽgQ,Z9)g{V6ù>+l^f  7<`}jglw"Wzi54?5Dj4¸apySI$hD,N2*y0ijY0<#YViV/\pjq>N,+;ÃBMe@ڸ٦#Ic &:4`eMW9>jҦ86*V8Elf>mj6c}WqL`!{B vMF;ka;)QիzC N+h3E1'׭snQoI&6dԴaeZd{$:|n_Rkn7 =;W{ޫ0;GPڳghR4Q[Dq]–k9,W%I E RۘS$LՍ8e+1 05b˵VV%}WZ%Pd>WΒ@ldӌSgIQ_UD qcw#XW r+{K lnGk[Xfܶ  ϴdڞobBUo)b2>\\|j}*r8‘Yg; g|N>*|8H+nA&Dlul5|PQۆ 瞾B#ޢ@;5[P z츤x6So/ c*kƱ\0\G"UA:JUU# W)UI#4趍܎ޖ2Җ2*F?5Y"}j8(4# !"T;Iـa#0Qyxc57'jwu9QVa. 10Fv8_:C v7ur; %{NLnRM(\|n$2޳G[g|o>K'm;#277"2-屗>5 W̓QASʖ?:t#5oTiʽQ0>ui˦O*pUp?ԧ6,PwjS}_Ei.ZVP[RP>nkFpWf>lSTnSUM>Q"I倫KϭOmfM3+>v4$ۅPpTe^H󼇑*$cf9ojylSZ}ldl*}o`d 3E8L `;‰rzRJp>= rE^6=jӍcaH,(Gy TaGDDDہn㏥50Acۭ:$% wN#<ޜT)e8Pr}P19>?ϵWIq#** <;A*AP5qϗ{Bp׻!FT ŒշlUDyPprߝE^ԌF摏iKs[we$~A%ę,Z[xD@ԊDkiD**T efai|Q"c.J7 * :CkJ0]AsH,IG{Vu{cXcqzӁ4GWnJױhtc8VL#J;?4ܟ̇'? u 1,x'Tg$.1ב5Oʠu;fH9bhH}ky! P dp16=*̤ip|9jĿkgc¬KwPPM!#lK'iIĻ-"]?v5PG,054s,ݖzJ#R&P(=Uq299@/ uHSWSr06LTcxFώF8 aC@ [pX#)1ޛ;YPzҟ 4xc͐kH$K M zZJ;RN9 sP2 Ci 78;cv05#͟M. 9SL]lenY7vmY"uɬ}JAw@ ҷZM!;WJ\`8{b4w9V-e;UqD=Ol*FFJuH^A%I8(9TB_U7;0RO֡$pIU<$A-)xnj]@P[t>a$5^IxOmŔT -v*]Fi pEA m6dA8ۻjcU.vU<>E^ޠxd 9Pp#j7yYy@sWYyc>uUQj6$ SRG$ӏ2i$ڈĞ}1DU'>NOJ.m:8#?D@ʹzIcMac6E8ώƫ!*r; v5 1R=A$p3h5i잴.7aiF3׵P>jUCyyc[yDL# tujP 2`svTPGT6~c[(LK͜J2rie)].aRxKY\3RM*6Үw4Y`U%˻`9V}q(]7ܫg9?S'urO5-d09TڎشT6fn*[%(Y85'0i#8p/8oWf(=X$0XFpqK9U aXR؅'k.Prz%sl*SH ?h GJb =N9~\ګmU?pzE "3!<:굴QBe`{$%ĸ栏0$LyJ̉$f>Y?NB6$'$ң GG;x^3RGvVtQˁdh-!'*q&/)"4ڴ!!Ų8n@-"q Uki#?s%:vi#$\CʂX}j=.5|tStII`sO2՗h<⢖iUJ'8ERV~w)J@=cR uX G=t-'h)3TWLQnG\zW UAN̈Ḗ=±5B)<j'dqJAFIo/̑{ ͖X{oSZ ۽d8r;h1ʏմsRCG/n5,Q (1um8rOVeಚ͋L2J^4zuK4(;fclK(LS"l婻qRO4XV'zip[cґ2 ci#b & 'R3qqǯZzbcӌyMb )֛'`G;8Xv>҄E$6L)=i%zn&vqGqM.$BzWjr}^Ӵnc*j^ۅ6vz~i;HPz-O$%ܷ.٦,S:TW 41QA=*dFj8ic8v1q1~e򱲿Vluܝ_Sdą1Ú\؅=h$6UHs`mҧ#.G 5{w 3\ e܄Ty+S*Cb=:#E*jrR ]BDJF2wmVFb"a=5yGH'IJ]n9 RU_;(*A'-RTNO_0 g ) v2?9Id$@rɓt>ᐛ)$o3c夐$Wۆ5ߘtUc`r犲r:Dz$ !*58CLS>hs=qU.~L5ZUKdK͐2ږ-!8Kk|V'hV\U{U䨤 Қ͚>Qy&-3jǔ A=MMs"Ԁlrx*ΫxbHDQxڥ.C 86yxV;bUҭZ8XcPik1xXo&x(#{Tx$ ~o@jΡy<*7y&eU{쏀ntcUb>U6yj8@vyjHp$-냜$m2G5ǡgI8j[m@ҿ12qǽHJw6SI)\ajMqNI4dy&FN:j=5rIJ› rrW͡drGo9y[/TI,6I^gi[``ьp94( o*zJ{P@%ϿC4[oH0:BO')a!rIc)Gss)Ɍˌi;/_8I2A=\jpfhO֠`Y* =*FQXq |B)$b8ܕ<ڮIrۋkv‘ՙ& z*u*D& irıAdD2[YbX\9BKtX-KtlZm.G-[QxUϽUlȯOZbӖ gqk(RH$0Ojh!vUe2Tp{E`i*Z:rX* E*J[Šm̄U]Z*zzvڔITʝ#i ODn .2MIklvKRFUTbOڪjN <lj#Ȍ5=UBOoQb[6nwj\m@^-!'A^,v P dsީZinY ij=rJZzj+ bՙ+`c 0BTHi2jE >r;qW"T<8j(Q%889䵍4sqs0UDV;5 ) o'UfCj C{|Rt@j} ODT(xRLsHz:Q)89A֤ Τbj,aaX$BVMHʩ§LMHrZ.eF ?V 雐=)mkiXs)YFGNIU=Oz[DyCK(8ڼpIqz2ZqaӮm 7m9O1SOD0=BY>aU4Ba@ZW& [ڮ$F(d\XS#Lʲ* U84&  U٤ aWgcj4b*ycUݜU39U?IOHdu9I c֚YpKIP7҂dwvo ȩQ { |SoA 0C c`M0f/9߁1X7K*\1#i%P5^ Ojncf#˷Xsxov˳u ļf׎*^L2F_*8v,e?lQs#v*}4yF9U9v5AV立Jq|N@g{~#qo.ܬzgRl  c pQƖeIe={T%g-jO,Kp *ܠ) *(^*QRZqZǓ3I 8O(w5zJ,E6yh[$Jm(SY=FNߗf{$k+ SxI WsmhBT$5f6mF6'@ۄx-O?g[nNVFb6nrj8 bq7NLjdyn.^nQ<)J9./iFکOxJT"\dԄqA Fq.<.p UY:֖B9==aʮQ 3ʇJ_U}UOٗE# Sͱ7cQjm^M+@SU|;DWILk~X&"cMǠ"s>ܓܝuqj$3_m$Սzl^T ( >5cS}ݍT(ԸW`ZG%3UQVli3<t\`TFi/\gc\+M}{Տ,v+ ~K$v;Gs*ysg(f1W+e@&}kOFWη|qcZ٨y1 mQ{:z+7GWMu1][B [5K6Hjk jVU0:U{Ȁ5SR̄7cJ^޼ep¹`rܻXV;QuiOM* >4}7GRh:t==ks֪rtۇB֪jy:e@H"$=\ŠfӣI$oKQXU`h~dMIe 6@Oi|SƨH=PRx 'WOhְ;O&2vUEjM{4mO#=sZ_K^jKqvb'qȪsF ȪܘPEiAd_N.zU,n_W5zU擖ңO`İmkg$^tvvE-yRsV/t)YO>}=|9ǽ[YlVe]O3+,'$Ui#խD0.xKÐ}>*UǥU&S6Ngn֭*YAdiQةo2HsREh `Lj+dQ?!Tl шUP3/gQIsKW'?!X:LF,w=)W2zd~Jfwfo>ǣWKm'z7呭w2=Lz™1""s­n@p~NV]˶:=AB~GPr{_dPOGxm` s60@`gN|FbSW+O:Gk=kn+3mIp?~>%(ҳ|@t¹̪YPn.'|mE 8Qjx|qsq ?N+2QS4hg8!kUqf؛V,LpU+rxA<+ɬ]0;X6;8fm D VnoLwe$:æH9c '$C CXHR?5Cq0I7&a6t( zja9^ )FYK*ʎf"T5<2r1r>b0*Xŗd?12l{ٲ繫%&~cޮ17Hv=jKj{Vd~fGsRkG5 !ZڜAnOȲLqH_7`sȶOG"k j_9YT3W,u$rF֭ 6[Ko'BFW,'xn ktrAV^/YZԾKOj/Xnņ囂M`X=Þ@\Ʋ@Ӱ ft7 JtY4v$Ҝ=n=W%gs]Yh`[)J~QEc4Q\eՒeCr?s:jx`uk x` IfPkFrOɘ"Ě\01,+rEje#A]0lhtRQ[3EyxǘX4MNVң]a!\=),]RYsCu&bSqVw[T~yqnkm4yhRXw,iʌu:v~Wꢩ*ciZ9r(s}hsMks:$0#\[â` q<.Er0e oԱ.qjkePcSO'd:u5 Xz*[| )&*!-NŪl|Zw]cM?؜ ZXpŠXUInrrvuxHs&W[;>sֺ]5١#Zjj+h9CTK- YÎPMJotuME\ q4cjD3ٛy-)]͏pj6{Wc( V[W + [Hfdn>:Uiw,.PL(r:6*]RWS͇{խUYpqКKXr0'֡ m$To|T:% vQ^2ޅ"^I֣1j'S+Zb*z6BhRop!lz_Kot-HIiti?*87Q]ym2:r(t c-QE8 q2s<>n/̍ڳ5<5`2UO]!' W',pW Ts"ơ\׉buKn'!TT&$0G4S,1ED\L_1sRZ7inn՟ F/#}z;qU9eR8AT9Է;PU{k(#uZw̟ҟ4_ilecU=$\kvR%Tr6AZ#F{u'zgCK$ԣzpAԀUO+:0OJ✥d-00 7LЬvcM"8\8`kRg5^ZtKh k%[ H w6 {duf"aX`3RT%9ceEa".ar~;}_YV ku^0x<²u.X.+/^,aҳKVHH|FQFvh+8P !MiC<ˋC#ҧYncCV,ZK NbUu5ȀB:hvW0LJ1K skk,mbf9b&aB'-KRQEQ֫mpH MFkx]'a*찤0i@dy۞Q5KĮdՑMS\ɪ$iP3V'ik!sEL=+6BqSk]:V(@Ң. nf=;=GtP[ׂ("6ܓ+=]/֢ ҵ̇'ZiyG;ETon/_!Bx෹l8-\؃͐t 4dU>'grI=0<}85jQ9HHPK0vJ/#B:=53GjnjwdJW}p=gi'+wp*\XXT hمN >T@5_i"F 3Hr0EW3œַWycnxR>v/o @<.'` +ְݩGldg9v[<_TW߅n;+{b1DeR%G[`펴Vt?Yisq /YX^]IB/Ykqq BfZ+iFsVl셳 W1֭Ny!3XZxW )S1O BcUsaa8ҵf>)$+r>:jrmXp gHMrrEtZUvVtw1=tN.1Vflqj[}r̹\|o oxZ @_N*p7jpF HNܞE:T1}]gI*`tڨSi &$Jr6 :'9Le_$d ~WE^_6%x5iseXT}jilk:'}F#{z},MYsb% r;կc)d=Y V!(u${ ̑F +#ct!ܐv.ܰ,)d&Sgڤ`v+]-(YL`3YQ A}(*+N-2 65ۂ|Zkŧ% Pu!.$Eܾticb:u')*(YDQ8G:8⥊tD]ZErF x٬Il z#5ks+SjAݢ2z*Ŷ 3 T_#J<d޲7!*ј]uTn.*hHkpREBQQNΝ)lc7ZSu4`dA;g8bH?Ju6V xw.L'}HrTf~lnyq|#mH*6 cjgj?{B{rۺ͞1r۹5F{9 NY$Uݰ{TIgt;K% iرKPj]ŦTV˹n/+dog2HAYwwr]^B}C軜"S$ƺ->]]`.̗q[}j4ʭĀcs)TMaAX1V+& #V5j`309*΃na G5[JhuIp7ә^\-C+'QL'_M%hj ˌS%(e8ߙn-MaVڢ,ZX_,[q YGHƳ;cjpL7J2m8]ӴgB1]vpV5XZGcozVZ95j}p1OA\rn]j|YUTדsU$ ~ܻ"T9{T~x⡠  0?Ḁ ;D *G'n:/B9AtRTz )d/؆ߚk{u[;dYT8,`HaH"\Q6 £6οґMuVR4r#Iʎ) H6{bl:d.=OZtH#BM7֠VFϩ3[v?FߏzVBݎE`9B_eIo{syBPkK,| j bx"߈ Qk3Bg=(wMbӹcAx:je ĞjƞKE~&iiplfU]q*º@1L#$evq&ni3myW)W`@A+\1W/ s}괭e+-$e޺[MFW[h_m}m+ba0**ZgSq?oҲuPYs3~jB?.3> oZtۛ.c}jnP$M`]۷-x{֤Zl>\>$dh9$Y'tX2Đ*](#VYnIF$qbF}j +1%ʫ*ԨHc 0Jc@8U5[p6W?jn:1co bdX0ZI=zՑ~*U֬,xL9\G= rzƻ8`7=qM*pQn upDLz֬3,j?xԮBǷzFH = dU|懅/)@(hFp)56$MNOcF))Y@Ee?QQH>Iy%ԱF鏕HeXK3zR,E/ZjC@~ݭ"6lc!8Px"zmpR&PpN9./>IpV6?*?jy5ȷ-$PGSYI,ۖF?S{dr2k(O(|sM#穦>IMpO[Wf1{ [cr#=cІz|W$?w 5;ǥcvb{_9.? OflF7\ K+p% ׵e\NBu3B^E^ ͻ$.b꧗oAynsǹyn퐑tyUo>lEA܋KGkjo"ݜu>6QԤ{XFrkѭ-,XZMykU Ga]RQtjT"P]%y'=VKHAwrGך望iX}v7wT>IV8 "KpF<-.%=el:<,#qj%NwwW/pa'ZֵV3?wkyaX{5K3dICm랝6qң`⢐rE5A_L}Dg_cs"BzBZ>e_5nqQ8ۑҫ6:sMVX>}isD-,اxjH[ ^*jq02`ՠHpAUHT4;yE[k "^3EXR2sAYSy iI;UnUV,)S9UUsv >QZXm܀A;.l3VrC0)FG dUkmZP#03I&g*4vn&']D--cCZ5 ilU07(õTI ᷶>M i"A891&S&o?9 ncIc}:WcÈ O,~Y_Xmv ѹ[[r0䷻suoUٻzcL7m &bO*U͞@O!OJ ,UcK#HO$MU@9X|n(8NiCe#OƜ样{{iR>$=ߜmA;8+n5B\c߭m֩ g1ֵ]F?sUH4 h(sTY-< ~OSqI?fJ"WuRIoj8&o pX}6ݙ*?ns\ko.*Q۵E}-Bʫ^x*@#z^Ue6+BIS<7qڀ} )OB2Ɨ40C/_ztKՏZXqQ ` 2 2v1{n]psʖFQ#TeҚH94C+qN0`qOZrnW#i)럕6Q:AP9QBapv%Nj8؆RϭE8*@<[ 0I $m$Z)$^)$"FCs(~UA*;x֠r[{ w8-m˖wsR% N8m9gl{TVklfQOjmԊ7qSP)\tUi$$ p:UuVH<iL`<'iWu' ̄ VY *qS߹ YsQ+M0("mPgʪwDl02)ڪF@kZ#]5mo{"P=OsZĐɩ;Ե%r:@9RhvBꆡe%kBvq* 0$j"hTbqP58`pg<YھaY7ʹxSc˚~ϗhjP;>'<)#J#!rI*B9';x(%u=j@QTu=jE]:bOݒ59n҄2 a"sjS=֪=1'wu;eK'hxgbR99jA(^3Smkikӌq!bU OIWf`ц'kL)h* 5j]eQo!O;w }G5naRp=ORE- B),p)3*JȺ^VeE;%XA˫bBtTCe$]ϽTl8zoxrV哅ۧyAͻkF@[$*98Ė!EJ7ޑT#=pJj|1.܁O6a9<4(۩TЩo7 HRƤSnu4]Ȼnc֥ۻaSR=z(*?MG9}m1{S-;Smш,ԯ f遜憈#h61io)SLX=8:ԙsG8N*=z}*I@Ǔ')`"Ӌ?4+?ނGnVFCl6vPI9#8ܰ҄ 7 R*=JHeA*t; 3튔6уgҧS(?6})%'6Qs<`Uur$1zT!޴z\L=>Ni;HG҅f R<S)Y9V/Y5^y[t&00{EG,y 8\ d ҵ4}YV8qjѵ8mSZ^4?l [kwn Ej,0MZfF^RX_-޽ c}jv ڍ<IW'*O $ b8H0i E!R9j-:ՙDGS0TtenYVe_P9nd9<5VL6H)Q,p+G!J\*к9'['#lW* Ԙn$M5'&.^ծy1Cj%ZR/CjĞӏWTT˱㹬3ܟsY<;4Fj #FpQ׭M@(r?Hdo'LgC̸,8MǠ+y@tx#F zC#'8ePg<_@N֣ $ $6XztE TyϘ)l`i$8 ЊKuz@siy<[;ai9v'#OeFmÀ:Ґ J'=(I$#'P8i& 3aM(MɅ$iꛐ18`~p2^In4*5Rg\s[p"ieӚ5(bSYlO%袲-@?K Ѽ[Lj3Uo,(Cnf~ *e g5bD aeڦI v UxcjݼJ9JoasԳ̠ 1&bq*YI$}1P%);WK^"glSXTb<>iX[55uQ8,V"Wd+ATī{Tyo¡Tw' sI.phc񩕲/Ԋr8⣑{/?sMpH*? hG=ONzRl;rz&R_i 8# SL ^)sq桏tsN? <=Oc TfH#a:YLd`0]1K9gi°*Snv1vzThxy qRN=9b8T.cCP(Rvg?xk}EG+~txSL@ɒ@@*sR"Qs8 SARyHolӷC#<˵>O~)U";/N6:H*m´ݖ'ߚW$'ޚ$.M\U[qĒ2Wb/5:ԈD6"j{=1s٪7ҥFB*tKʁ£ I+opi1RHtzЊ@ /M,jFNqJ2E jk?YOw'o>qTs3{]oҢ79QFޥuP#뒠NvE'CynI-{T̰gmȉy;b@\_ZP֡AILgʓb>9TmWרz)m:#6ЧhA9,҅vI#*7T'A=C$X `ZpB2=9fF@f66Z)C ޘz'(k*ݏ6`"#H sND/Km(aZ[Za2t=GJ6I =0۪-ә#@ڤs4bP*Y̘VXcPr0zbN~cႀLȨ+OBt :R'Y\~/CҬD\m{Ӝv=M=e|5BHU@;:TGF)YǩUzBX*OSAHʧpiL{ou="D>Pz! )cV2:}*bG__Jp=jXT MHTH Kc;*FgEVp .z @i S\*vJYqVAؼuSTt`u*$;ڸ=M-W';T7=)0\zm83sڣ-"dX)s=i3֪k$j4OUӒO˚Qx#D*lQHF]DmǓMwj7/5o#+QeȫP~^ޕ/b/S5(?/j/Si2Gx8<€y4SEm=E<6=Tv*/jX{Uvm[L`cZX9Q=XM zKd>S#̮GZOX?i%l=)2IQL?atsH` ;4` h IH*11) @rFUHǭN m8Q2G.0sQ:#'֢uHю*y rj AA[9|cFyL23Ͽq˟xCqmcj{Th37TH$)')>YϘh/ wހT(;J5,@1ӵ>%_J>TN>Tui9ޘO), XT.wuSB|sڦF={T|NzL4pmiUm# \0ع*,dث(vjj& dM@E42j$p:p:k|)cVjfyjmۜfEl=kn?&CrOjuWlJ魌z@'S*Gb)eaAF`}iџsM8@ɤ5o=i&? Ua\7Jч劷 Z0|ygr9maeSfVH!ҶwPm}*8AP"nLH}sO 4q9i[4%\UHBڣ/s˕?zS"8mnUcqF t9'NܪG֞YA~ɱpI'#h|ɴsU \SWe%1iΤ}1qn05Զӌ#-԰c$gSLHzX} *OX*L3cqO}iυi͎-ynaSAFMK |d\tK!j ԇvORVPx0g84ϺO`&z=A<=AjM.ROAT iJN3PDQ:!%Fq#)<'z'ң1!VEq[UP.bG=j'bGLye%OP?aV l(9Vƚ7Z*nUsT߃3Yv;sR2NX~*FM)vtu)c j ǥ1Es\fQ0U4A*{bzj2 ñ^E KޮK -xL7&ݭrM7Q&ǮZ- Q FA’$aUevby c1'A$ ӒzUJ` v8I6B7ʃM4e,^IKcZNew"Pp} ymn^"&i\`/ֶ;==~e ҨM oBIӧT_k u8$jԙFN+ ?ǣBI 0K֞-HUZHXy Xj 5Aݾ~ 5{^rר.c^?Ʒn=3OwpT`}MnݴZVD `}Mk\2i.0T'}1cgI/n^B٥(C@9~Dw^fr3<-OKR8(wڭ6Gz1QVS,YXi^j1i6Zv>AqRrH4vH &@})d-K 1 ~5cGiYiXBWBm@nk{)isUgr yCTGKڣ7ڈ ;A:Ve%V<WQc#Z6[{.ҴY[tYq$ؗIm-דM_l<^´t0cX\Xk7[ԄNT4iEV4i>Z‡UeWTd [PHjtLrT/@x*(jmGQϱRmSG&`I!N) cRFiF;{FiF)n{R ($)s<'?JCw{ mr?1{.j3q>%o/'oҜv{ӣךrr ڽvaN "|L*95Z0jW^xm# $zTK+E ndX@»Z$H\*{yUYؖ4*oj)p5 v38RqP@Bk]6"t=u6ʰ@%BF*\9<ex@STQEQEQEQEQEw((o ڛ=5bvn|5xr?|֯gxl(b=Z~$8 +K]BwOlW,ILs\%۞Vc,q C*xFոF:06oaޞ"qҭ'2w=ڦ_ݡnLKto=sOMަS֜ 2\I=[= 3s:SJe)NOґ"VeOxЌ)` ?SV໌/RVV{qUQb@dU#z$+>) ]ߥVI%mgpM,UNIb2wS^31rǟzx]1V4@ zJܵ!1cR[̏XUiKprI\@p$ԐNXg֦lmP0֝ܮq: ж3}V4VSC)acTc3"7zό#m^$V|!ڕ%IrrTtڮYxrg$JkW!Z\ fh 3Z!n[RԔQEQEQEQEQEQEQEQEVuDx_\5,"?(Xz}3W>ź5Ϝ`u5[[;DQ@UO"1qS|e_jtSN;p:_Ӄ, iRpkAӞL$l\X>>Uh$1[K}>&v`3Q)[Y%TaVu;8 Q28T:]$8G[Hei ;iOoc> T3ޟJӀ\FB}+B?5F,NH[fA<}MO(()(()h((J(Bv\# iGa+I9|,-Z(L r2ˇv )%:"FIɫEN\Dء{NTQc'ۜ(6p!y4Ҡ6b=*(H}3Q(R; l#'x3ҘM8ΞK_:S)}ݱK$RK {G4 0(6tqnn09MmԸ[xIg[aciRYGi&ǍXmp9%?ۺK0j‘,ʊE,(KQIq B֬*F3 T[R[.Nš gQF㎇iąNvΈwN]UIqN(J((()((J(+pPy%&*^]ڬHKK[*x2cP{԰&>(`Q6@9SNMyU;j됾Z9?Nvw~MW un Kl/P-%>rBYTh Ap)7J͏G-!b;Օ*ڃz^8?zreQSo.vqjqf%OkFc?Z P6Ў}QmSX=>#sS̋e ޵3FTvocQY2j(=2s L[Ivv[r3Zjol7kgh$V2~gdskz##^X@0rP0JTQEQEQEQEQKEQEREQEQEB \$ccmXJ%QڤONwcR@ ;T;[uPthtUOtq9Ci4=*VWbAPKv C,"F xp7A5j#Q\{T{"]mU?,a=W}(O'F'֣|GSQ](kY#V6|zՌx^Ӡm!kMҝƙlmpyM6b?3Uh@oWo< Ud'Ib@.<8bG"dqVj9+kV"#,7Zw*7 T6v-o͓ iWyP6nkB6uT-QEQEQEQEQEQEQEQEQEQ\xR5ªyL!*BY].FjxUS 1mRz*Bi#h4Jic1Mbo<ʚ9Tnr__OpC;j;eP=yo9ۻ5j6L}֭ 5X}HrOV*DX&9?JP`w'?ZA ra#4¦Nh ԈKO3znt 1ӊz++Sʃ1צjեH:J)m#*ͭzuVĮꢬ[–0dojn7fEׅ%'>. 1, ;*+B8 *ڦ8UTjcMF6->EQEQEQERE%QEQE-RQEQKE \WR1@U09I8N$\Rq8;i>lP~M3-;nS]* Fc). ΪG>Y r]DhUhJTHͱ2{ݹʨ=)7n!_0GF T#dVnDCkODE#Z:L[+#}jk Ct/㲷y#?¾#{ εS$Mrs 1%ܗ1\=ē8kɈ9n},1I]ۼy=DqUGPcw 5pOP&H!c=@NZ =zS:*r?Z4ؿxHu&KEQEQEQEQEQIEQEQEQEQErѯ͸\R'湕9=1gnGR*Y8ӁB?D󚉉׽)Z穧7ȾSi,nR?֤P2r90zw:TSvt[⢔361YD]Ģ1I.V\Dڥ{i˒A̟p{Sd_jִWy ǵo(m25`E֨qr]ʃV1i7'*(HUucyF%WɄ&r}Gz,j)'ռEA??z"3})~'~x Ҋ(((((((((Z(+B9f%n+b͒: ˇq1VqUO|THvB>nThv昧7zI O'ښ۹ퟩ`x:51=dpV ';vy&8ZoyX|I*U-O|~v4Ġn԰^5ǥI1y"1 FGWĶrUQ{ UZnl4bx;hC1bV'94f bN9oJX <ң0>Wpmc=*{kW jiv nZf 6f- =>k֏?\uŠJ((QEQEQEQIEQERQE-RQEQKEۯ3\\ Zb]czVRjYqQ8%NʘXL'M}IL.yjhOjxbϥ2Tbtbu5]L00dqIGeLvn qO?JiUXICgSաY4OCU>դy覝:c'Q<5icɛfV9WdG`yU%T ċ(v(_LTG5(eҴm26!縆=wymAlp[ t*C gjyZVr͞+%i< ]ێp)",x؁wzt'7v># kD[Ui8%@&HJ4w<KKE%RE%QEQEQEQEQEQEQEQEQEQE̸؁Tǩ5(޹06qOQӽ!<M!87SUɃ#*_ˈ桖O*&QsMb~f)P}xuv2۷/uch-ЅN>cZVΒ" sSKxżUڜ⥹0|%؋ԗ71pj8FYq9fcި<,Ǯjueԡvt R٨Rx HoG'dcI$Þ=+D*t* UU)ԴQE)!!Af;GsA=;R\ƃ`{ qAD۰q"6nSŽާ )lV NIr@=n3!V`"cTJ#&r(Z(((()h)h(m0G#=m:6z {dJKq1\q1t~rIu#Xw[$p۳YWX@T䚳&cߨBjK1EMl~p(OfjD8+ 0o }+T (QM 7vi5J}5K龵{&Ȩ^5Te$`UvRGVmroVf>L>cVh׌jlUJȆXt67ZΆ89 0T%bNU6if#?JҢ*{(s"9$gZ~XF#WU)BrGZ6F[I.GGʖ-ԜQIpneb[]#NXq24TNS`ٗ*U0cAϐ<2do5$ S/n5RTS.Q~o`+[Nľa裁Z6pbj(z&' y2,b.=־i;{T ē^wn)$Bq"nXU4[BL{YNJc$3)Nb)s Y`s׿\TB"rw?8&ahzuIOJ3Ȝ1 Uz*ܓH\csX Gs*'jN֬A$m>>iPʮZI~S H'&`Y HPIPN`U^Y]V <M5(((J(OW%{1C F s&D_z. Jl>TI5V 1j(mٛͬaE xШiw.!'Pf JTǝ步ۧv$lsZiigiN=E` {Tq {T}1ےk#wS%B d wR$'ڳK=@;Gzb),{q:H]-X5R9Py"R20BP5 3ޫio֡"\)<WTa@5@i( J)ԴQE2SG<^OlYx:RGF.sXi;c*(3~.jOQH@T* >RCQ IŔ#9'$8As*}9.*[FRϼ`6^,]t)/0W$#lB._!K PQE-QEQKEQEQAErBF Iq7 t>W+t#.`>r__2T<Ϊ2ƬDgP24;*0} <cKeX?JֆMt)ظ$rkr;F֠ݑ sU+sBGԚ_-\qZ´[^AߵsIn&ieEs,nK(ȑ H ycZG J50y4vzqNU o-⟃۩avwE+ҬZ;Ku8rFV Fq1x 5y9QEA!ۖbFW_,dzc2͌U9h2>9ҕjDƒOҢNbpR3J,ջB\ _5J/nI'X>ZkJnZa"iώki>G_&?'im8O1@GCk}֢$. Spյ웎vnbf} TBO oU∟ƱDz[`N6 {9-hx<՚ӫFM5F)M7&AUH`1NRJqzPHpSA=;Y\2qX:py5{pVȤ;B?Zd(cˆf4pqqtb}7Z|jADm >|Ҭ(C~U! 9Ҫ4ORiɲшN)]JenoۤF!@E*J1p BJ?g܍ZV<)r?udVl~BZ撊JZ(()(< OBQ.O&Lc=OJC斺qEkhArIEh+IY f @Zl@+*Kns n徜"p}YO;Jx J{vQoqKr9>ߧri|At[eɔt\BKWCH qZ35 /d\o)9vbFwi6zV\2Hd^BrzU*gk_NRs7_jѴ@{-[vPz{-Š8+RtqK S]EH+P}k~زƱa@5GSb̹IY:!Cԯkޛ˾9%:-Aa1S;co%Чh9>Zr9k͌p?Z ZIe8E+cq|~S_´5Y\ |dA3P\hs3bTF${ά%nI%ڰDx ƴ4or6C~u{Ob ZBn1@'?Z ;{E--QEQEQIEQEc^ ϥr,~~!2-*1-fU}k`=5ӳR瀢©c=N}2!uq7Ze&Mi[ Q֦1;TUwcN]J$bNYP \Ψ7<{][ 4n͋[u>3c5R42R95)f ic@+j(9b@=p9 d é̪MEDp9`3,H 1q#kixGQچ7BGN. "r{*4~ެ}^2HSI[,ҷq=`sޤ]\Մݷ}jU H5F#!w֯%#H)`wU-RUCjRGk7LI9''*WxĻpjESrew'ڞdfBǥKj5m$Y //d[v~lG"a2J7Sɮ?Zh(((((~NKu5V+5&>YImmB$:ՏMA-v :؁oN\3/fcsiuMj!#p-#;,x+3Hp:hX#}tEHy2I+wM[Xw& $C"4cӶ)r5$q՘CG5,q*sRR!=*n47WW=wvp)>c3LXUFJ`zZ 97봿t)tsYȾÅVbQЊɰym`@u4+)&$eEj;+9go1"/]w&֮V3$ӢKHHK3[nx>l*ؕ3hV 2))ih((($h2J;U;e!t\;Uq;,[BF+X2KY?I,ұ1XI3I)-4sTnD6 Z[,H>fֆe.Ÿ֧VMHF 1'n18#JbHPO%}G'c=*ڤc:+#7>bssIA1`j;}W̡'hWd+ӝ6HòE9d7ThKT`T-sNӤcxҖ܏ҭ8eg["PG8 ZnFVNda  911!cmҹȭ^mұ٧ephR"-Q?N03>N9$` Yy }vI wZ7*l=/M)柬̳^hN@yQu6HUSKGS]J¬[A#*xc{ː1E ޺xR k K-IO; i4p3Nvfj=EsO nZY08 <Y21 a7OO6#I6xNB-e&UK=5%w,qQlک}jK 0*[wl:Ŷ\kAQF8U?J%tH8U\#ijG~\"VZvTVR0ykUFzt0ݤ c*yu氵X(?d2ܔ$Tv.bxS2C?kH$4dY~yw544ر\͝︓ؾw\]Q%- oϮ)w%)z#ɀg4#zKB&ܹ'@jKKyOu+9 ڣHq#I#OnI$2~^6Bݷcڦ7Bb_fމHcFw3ɢ['w5 o98\5ԡLt3O ': Lh֮n都}7-[Ю lַ{֯CIEQEQYEʳ#-FC{W>۠^*ED.03jʪ(i?Ok=C凔ns6#HzZn5CZ$gHd@g@NdSVD-ۏܧfG=V.MZE{fǖڹl1soj]M\GesU(W,=jʧ|WS$C?) UU(3L''=@~l^y /$Oҥ]c 5-_dftfV߈K5~Uo6 pXݢg9]2Cy'%Ü y| {(1xjΘvʹS/$>p(CFW+iF=W?Wt6&OHջ+f}?w֠55hhj]GU Qbٔ^Է1jK2:jЊ13aZ\XR=jQ<֯[*)9aE%[$8ɨ8gEPzmhWF94e(6P LDn 1r۬&4T X3y7p޵OLɂnt9ᱜVÒ9>FhlizԃJ}5ٗUR3ZgtuzQIERE ?諡hZ)h(((J  @--QE%REQIEQE-QEQERE%QEQIEQEQEQA4P)EQEQERE%QEQEQKEQEQERQEQKEQEREQERQEQEREQEQEQEQEQEQERE%QEQE-RQEQKEQKEQEQEQEE-Q(((((JJ(((()h)h((J(()h(Z(((((((((((Z((-RQE-QEQEQIEQERQE-QEQEQEQEQEQEQEQE%QEQE-RQE-QEQE%QEQE-RQE-QEQEQIEQIEQEQEQEQEQEQEQEQEQEQEQERQE-QEQE%REQEQEQEQIEQIEQEQEQE%REQEQEQEQERQE-v(((Z((J()h(Z(((J((J(((Z()(((()((J(J(J()h)h((J((((((Z()((J()h((J((()((((()(((Z(((()h((J(((()(()h(((((J)(Z(;QE-RQE-RQEQEQEQE-RQE-RQE-RQEQKEQE%PFqEQHsۏZ()h(((J((()((J()h(()((QEQEQERE%QEQIEQEJ)$Cn;42d7ɎE!?qҙ珴,Ddj!uږ0^wxcӚV.1E%QE!h((Z((((()(((()((((Z(R H#tg/lbɔ%NAYr~*r Og4 >kKL҅0jip֬ dU|E!i9=JB]pF ᘞiHg)`ԹsOQKEQEQIEQEQEQKEQEZ(((Z(((J()BsjG;TJ ?27C!FNOJhcJ&zU`B)h((((Z((()h()((hhcCHLXgPm^4F+%BxjJp+_O֘g4#v}3PY:^F TgEjԓVm<8zخ'>'C3aR —ZyTsҢ?/zF"1ޑ8ӽOF}W$m,GQٲ^A¢z2mcǗE7S)ݸϭ4+oI#\)8ݰ("'SP{x6>2p|QQg';MIn669{;r8>QE-QEQKE8{уGjZ()(((>ȅH?fxf:K PFmf忴?3Y:snDQɬ:]ʠpzWe`0rv] cֲȽCK!=EsfPIaw;V=}dH9jG:L\E2L$g*+Z9Vhӣ 6DiQޱfqE]S\4$W8&I85a' 0V)[Ipsv9(tv#h'ԮJ]]q]ԡ՛ks(YwTc튞%pN{5mMhC:~hgڃ;FsB\,m*5(Ľc)O*@l*H#Q V,2߃]vUԄ  ).6v2LqA#p ږi>n_nBSo滷{v8"ӮݥB.8{Tu̗6in2M"\$j!E;ӯ4E/Z݁bfqQ< T8i|✎eNqwYWrSÌu:u-Jy]Uw5\Isx"Vl.=kY..DqHW qZ;'Xȭ]: GWY#[xOִ,"*UՓujREP(J+7\ mi8 gkDE<~Y5KV ,?`[7Q+۞tF<Yc`1~ike Zݷɷ6mռF x-RB#eGaTq5p>d>_R|A/SUYPyq;5^InA8= Sgb@Hy#p-'<~+,9;O v+sӸgsӽ"4L0Vඹ G*0O!/ ҮNG1-{U >h(v=?ZЊ͝5r87vS$cqU58m[joc*#yM %W}K{yRgjSK Rʰ p4r3T%#ZGLVtCB_J˒o>VVT =kW`0*}Fh1Imc;=ƓiʘvkCFw*ƵF0?ia: t ch؂9=TT})%fB`U`;x gj$gQpQm X;QSb"ȠڤTw#+ $YQ¤QE( w'nu9Q͵ʹ|dSD #:T܌GS2r8"mb湩]R54I]>cqlV-`ֽ-՚(()j)mWBڟڠ'6>cQI*;dv@*pH:mj\\\UiٟrF1}k:i&fcg珩g6>^f({z֭uQS_.c^^ '=nݸpj4.B"gBrYH%-JCKE+.I A6$1y,e(0p =E O/Wcor@e-m85d[%#/#> 1 1]LqHQ+}cUERSԟNRU >Ԏc8Y3V>:1WjLm!zw>m'`cdF23iȢ2_;*`7VmrYp tN`vXgX#Kr(y/VHT_ėR=؍X`j杨(,}9vڛ[hX/<~~Ť9h?JT5j3.Aj23V4?{uqkqv0$ա#Vk֝QEQERIIE#-i  F$ x`P*k]NJȔlu? fv?0čJK\w<^;Xc9X--TrD- HT7_JRҢ Bƈ29ZvA'9>՟s*(3=Me׈0qOIU`gURNv32Z7ǒ̀6Et Lq=xl=ibVKsT5Jv Ʊ޲ōxZ.{sVv9-۞*,ȪjZkU'>%^2ʴl[{eAԌb(((k峊kP18N})GLR32i!yzdF5tۮaL/DP8*k#P2JAAY,RRǥQbI~=P z ؍] w'jE4tɬHlCܜ$wA*õeGd^L,7ر[&ȌNN+V͑N_kdܔo'e($Rjzge/-R_ʈE*3$ȓ&%t'h FEB1֥ar6{ק7B65Q 3rm J$Rx>Ԛz$%"0>L{;Զ9k [jWx8س0px5oPn#J9c"7 ҥx-8mp)ʒaݷڟO(b+6aZz\.e5}_eqG6rR[ QNN{4moQU:60#'ڝgvnc3|6s2 u*E)2t *Xڀ"@:Ram%J8Us:aԪPؕ0|x޴RwFzuZI%-1)< cK.~b8M dpU`zin[֭[D 9בR($1uF`=:қHBEO,kqQm_nUPmSi(e8؋@%SqY͐lrAi#bʥ=+ؘ(mbUz֔Q(0Zw9A{ֽ'!dF8^y Q/j~q}9\@:gd`-j~9xCM̾gݐx{ZU$gF&0;\+$k5܈vgN=v+fC*{gxE?3TZX4>69ĞaԳw⭴1ǽ*i. 2l\I4(*,֊Y2-rOϜԚbMbMf^ou"ydla4lZ+22OSڪ#F:RYB #Yƪkrt=5UX:9݅L!% z{S6U3L7v+" NpZo Nv< g/ڒR`N[p?+f0V%^ QP{ }-QIK@$ҏ*;<ʫ>Z}⢹_XB ӡ[s;7O$W<q"ue~y1%cU$bK ZHa(䁓Shsr1MKKR=yۨQ{nB:n V jY%r=6cwɜjxOYPOg*8mEr]1ҢRS2.6z)yw`ԺhPn}ahs%Pr3֫jIq!(X8M+_2OC(ՙ;zazl8g{ELt 䲪k;Y76ϧjS@G^+1g1v=Zƚy/o>ήȹہ:t5ϔ=Z`/8V1aǽhLҳuk `U-Ei[NH<Ɑ$[A( \? Rk W'.҇ ͼ <חU۴ [a(71;s\qZ2x 3ҺsU"OV&BJIaڦ,Aݨ_rkQ@0+gRKEQKEQE%T](vCd* a =⢒ef}6VE܎2Oqsd~eM.h|`wMC'{sW,aY#I-ӵ3Ҫx!xe ~[ZPL}A*(2\ycPػg3ުf̞tުj7IstnF*Aқu33rzjHZ*ki[C-Ny#:yj~SժK[ *mϡ= ˉgԶ)o7sGWEejFઆ#u7OH-Mgl k6;!+QMUka*9[ȓiITzV%Ɯ%E=+bVIwJ+Nkw ;=mDfk !zjRx/o!14#o֤4'o ޭ֨˓Z<5R[`8H^c8%W/KXK"H Md}8MyHh9ʪ67ī4bxfYYcCҙZ~TBz[$r9\b(($FBH;R2R+TpOC\bQs+s#ŷ[yX^ZLnC ?뢮)((Z(҃ҊARE%袊)ih)(ZJ)(Z)i(((J(J()((()((((Z(((()(((Z()h(Z()((()h(((()()(Z(((((J()h(ZZ((J(()(((((((()h()((((((((((Z(()h)ih=(IE-QEQE%RE%-QKE%%QE-RRE%QE-RRE%RKIE%-RRE%QEQEQEQEQEREQIEQIKE-%QE%RIIE-QKGIIE-RQފ()(((((J(((Z(4QEQKEQE%REQIKE-%QE-RQEQKEQEQIKE-%QKKE%QIEQERQEQERE%%RE%-RQEQEQERQEQEQEQKEQE%QEQEQEQEQEQEQKEQEQEQE-RQEQERs1#RscQEQERE%RE%RE%QKEQEQIEQEQEQEQEQEQEQEQEQKEQERKIE%QKERE%-RQERERRQEQKE-%QE-QEQEQEQEQEQEQEQEQEQKEQEREQIEQEQERQEQEQERQE--QEQEQEQEQEQEQEQERE%QEQEQEQEQIEQIKEQKIE%RE%QEQEQERE%QEQEQEQEQEQEQEQKEQEQE-QEQERdR;lB 8t:=h(((((()((((((((J(()(L*؜Pp48vK)h((((((((((()hJZ)i)hZ(((vehE-QERE%RE%-RQKERQE-QEQEQEQEQERE%RRQERE%QEQE-QKEQERRQEQKEQKE-RQE-)h((((Z((((Z(ZZ))()h()hӎQH3z(((Z()h()((()hZ((Z()()(JJ(()(((((()h(((((JZ)i(())h(()hZJ)(JJ)h((((((J(J()((Z((((Z())hZZ(()h(((((()hZ((((J)h(J)hZ()(c> [)9NGjZ((J((()hZ()h()(Z((J()ihZ([cR#җE-QEQKEQEQEQERE%-RQERERRQEQEQIEQIKE-%QKEQEQIEQIE%QEQEQEQKEQEQEQIE-RRKIE%-QEQKE-%QE%QE%REQIERRQERIIEQEQEQEQEQEQIKEQEQEQEQEQEQEQEQIE%REQE-RQEQIEQEQEQEQEQKEQEQE-RQEQEQKEQEQERQEQEQKEQEQERQEQEQEQEQEQEQEQEQEQEQEQEQE-RQEQEQKEQEQEQERE%QE%REQEQEQKEQEQIERRQKEQEQEQEQEQE-REQERQE-QEQEQEQEQEQEQEQKEQKEQEQERPh)h()()(@)(Z(ZJ(E%-QEQEQERQE-QEќ.ҁ =G:((((((Z((((((()(((Z()h(Z ?뢮ZZ(ZJ)()VޝNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEʎ(J(J(iVuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQL:)ihJ(J(U/zrө((((((((((((((((L褢ZJ((U-9{ө((((((((((((((((QtRE%QEQE-NZrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2襢()ihJZU/zUNS(((((((((((((((eGQE-RQKEQE%QE*ӖuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQLTtRRE%QE-RQIE-9{ө((((((((((((((((Q(Z()()iVW:N((((((((((((((()ʎJ(((U/zrө((((((((((((((((QtQKKEQEQEQJN^u:((((((((((((((((S*:)(JJ)hZ)))VNS(((((((((((((((hZ(Z(JJU-9{ө((((((((((((((((QtQKEQKEQKENZrө((((((((((((((((QtREQIEQIERҭ9iVNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEʎEQEQERQEQE*Ӗu:((((((((((((((((TuQE-RQEQKER9{ӗ:N((((((((((((((()GERQIE)hiN^u:((((((((((((((((vQIE-RQEQEQKJ^u:((((((((((((((((S*:(J((Z(iޜuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQL:((Z((iW9{ө((((((((((((((((Q()h((U/zrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2QERRE%QEQEN^NS(((((((((((((((eGQEQEQIEQIE*ӗ9{ө((((((((((((((((QtQEQIKEREJW:N((((((((((((((()GEQKEQIE-SޝNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE~GKERE%QEQER9iޝNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEʎ(J(J(U-9{ө((((((((((((((((QtQEQEQEQEQJ-:N((((((((((((((()GEQEQKKKESNS((((((((((((((( ?뢮)h(((()hQIEQIEQEQKEQEQEQE-QEQEQEQE-RQEQEQEQEQKEQEQEQEQKEQE%QEQEQEQEQEQEQEQE-RQEQKEQEQERQEQKEQE%REQERQEQEQEQIEQEQEQEQERQEQERE%REQEQEQE%QEQE-RQEQEQEQEQEQEQEQEQEQE-RQEQEQEQEQEQEQEQEQEQIEQEQEQKEQEQIEQERQEQKEQEQEQEQKEQKEQEQIEQEQEQEREQIEQE-RQE-RQEQKEQKEQEQEQEQKEQKEQEREQEQEQEQERQE-QEQE%REQIEQIEQEQEQEQIEQEQERE%QEQEQEQKEQEQIEQE-QEQE%REQIEQIEQIEQEQEQEQIEQIEQIEQE-QEQE%RE%REQIEQEQERE%QEQEQKEQEQIEQEQKEQE%QEQEQEREQIEQEQEQEQEQEQKEQEQIEQIEQEQEQEQIEQIEQE-RQEQEQEQERQE-QEQEQEQE-RQE-RQEQEQEQEQERE%RE%RE%QEQEQEREQEQEQKEQEQEQEQEQEQEQEQEQIEQIEZ(Z(Z()()(((Z()((()h(((((()h(((((((Z((()h(Z()()((((((Z((((((J(()h(Z()()(((Z((((((J(AEQEQEQKEQE%RE%QEQEQKEQEQEQEQEQEQE-RQEQERE%QEQEQKEQEREQIEQIEQE-RQEQKEQEQEQEQEQEQEQEQEQIEQIEQEQEQEQEQKEQEQIEQIEQE-QEQKEQE%RE%QEQIEQEQEQEQIEQEQEQEQE-QEQERE%QEQEQERE%QEQIEQEQEQEQEQEQEQEQEQEQIEQIEQEQKEQERE%RE%RE%QEQE-QEQERE%QEQIEQE-RQEQKEQEQEQEQE%REQIEQE-RQEQERE%QEQEQKEQEQEQEQEQEQEQEQEQE-QEQE%RE%REQIEQE-QEQE%QEQEQKEQEQEQEQKEQEQEQEQEQEQEQIEQIEQEQERE%QEQEQEQEQEQEQEQEQEQEQE-QEQEQEQE-RQEQKEQERE%QEQE-QEQEQEQEQKEQKEQE%QEQE (((((Z(Z((((((((((Z((()h(Z(Z(((J((((((()h((()h(Z(()()()()(((()(((((J((()()((J(J(((((J()h((((()(()h((()h(Z()((J()h)h(((J(J(((QEQEQE-RQE-RQEQKEQEQIEQIEQEQEQEQE-RQEQEQEQEQEQEQEQEQEQEQEQERE%REQIEQIE ?뢮((()h(Z(Z((()h)h(Z((()h(((()h(()(((((J(((Z(Z((J(()h((((Z()((((((J()h((J((((((Z(((J(J(J((((J(J((Z(((((((((()(((Z()()(((((J()h(((J(J(J((((((((()h(Z((((((((((()(()h(Z((J((((J((((((Z(Z(()((((((((J(J()h()((J(J(()h()(((()(((((J()h(Z(Z(((J(((Z(Z(((((()((()h()()>Q@()(()h)h)h(((()h(Z(Z(Z(()(((()(()h((()h((J(J()h)h)h(Z()()(()h((()h(Z(Z((((Z(Z(Z()(()h(()()()()()()((J(()h)h(((((Z(Z(((((()h(Z(()(()h((((((((((()h()(((Z()((J(J(((((((((((((((((()h(((()h(()((J((()(((Z(Z(Z((((Z((((((((()h(((J(((()h(()((((Z()((((()h)h((J((()((J(tQKEQEQEQEQEQEQEQERE%QEQEQKEQKEQE%QEQEQEQEQEQKEQKEQKEQEQEQEQEQEQIEQIEQE-QEQE%QEQERQEQEREQIEQIEQIEQE-RQEQEQEQIEQEQERE%RE%RE%REQIEQE-RQEQERE%RE%QEQIEQEQKEQE%QEQE-QEQEREQIEQERQEQEQEQEQEQKEQKEQE%QEQEQEQEQEQKEQEQEQIEQE-RQEQEQEQE-RQEQEQEQIEQE-QEQEREQIEQE-RQEQEQEQEQEQEQEQEQKEQERE%RE%QEQE-RQE-RQEQKEQE%RE%QEQE-QEQEQEQERQEQEQEQEQEQEw((((((((()h)h%QEQEQEQEQEQEQEQEQERQE-QEQERE%RE%REQފ(Z(((((()h(((J(J(((((Z((((((J()h)h((((Z( ?뢮()(;EQEQEQKEQERE%RE%QEQIEQEQEQEQEQE-QEQEZ(Z((((((J(J()h(((J((((((()h((()h()()((J()h)h)h((()h((((Z()((((()h)h(Z(((((()h(()()((J(J(((()(((((((((((uEQERQKEQKEQEQEQE-QEQKEQE%REQERQEQEQEQEQERE%RE%RE%QEQEQEQEQE-RQE-QEQE%RE%RE%QEQEQKEQKEQE%QEQE-QEQEQEQEQERE%PN[襢)(((Z(Z(()(()h(@()h(((((()h(()((J()h(()((J:QEQEQEQEQIEQEQKEQKEQ@(((Z(Z(((;EQEQEQEQEQKEQERE%QEQE-RQEQERE%QEQEQKEQKEQERE%QEQEQEQEQEQEREQIEQIEQIEQE-RQEQEQEQEQEQEQEQEQEQIEQE-RQEQEQEQIEQIEQEQERE%QEQE-QEQEQEQEQEQEQIEQEQEQEQEQEQEQEQEQEQEQEQEQE-RQE-RQEQERE%QEQEQEQEQEQKEQEQEQEQEQEQE-RQEQEQEPh(Z(((J(J()h)h(Z(((J((()(((((((Z(((襢()h(Z((((((J((((J((Z(Z((((((((((Z((((((((((J((Z(((((((Z()()(((((J(((((((((((((((()h((((()((J((Z(Z()()()(((Z((((Z((((((((()h((((((((((Z()((J((()(((((J((3ړ88QKEQKEQEQEQIEwN(4RQEQEQEQE-RQE-RQEQEQEQEQERE%RE%SpCa %$m4$':N((() Sɤ,ZZ}-%RE%QEQEQEQEQIEQEQEQEQEQEREQIEQE-RQEQEQEQE=0?3HrxZhB?}i#)QEQEQEQE-RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQIEQE-QEQEQEQERQEQKEQEQEQEQEQEQE-RQEQEQEQEQEQEQEQEQEQEQERE%QEQEQEQEQEQEREQIEQEQEQEQIEQEQA8I4QEQKEQKEQEQERQEQEQEQEQEQEQEQEQEQIEQE-RQEQEQER3F)ih((J((((((((Z((()h((((((((((((J(((((((J()h((((()((( ?wjciFW[7a}Ѐ*Wo M*j1ڝRSh)hhYnV]IOJ9HYpbzxMEcI۲H0>k@ZLYiqTveh??֪Y1-!o{0 Ko>|2}I邑Ԥrb"08FS0:Uo-#Oin#f&{ []>@ qK&<"O6{- X'tEv\zH`|ՄL0n=jYO;w)zVy[# ҴlMA_zĶo#Ӛ~o^L=;QC#ßj~,]?]H;joQ--xRL˩(Svx; onj2 $PvֵxI@8Z(у"5X.<ѿɗz.;[jE`s {SE~>CqޠYPn'nNz K2{TIՂ(DwhTBsEfɿQBz} QMGE6@f2ļ[k$-]Ȝ\~fۉČ~TVș4:ݼIaIWevQE]1mkr(m GAk_U1d>㊀&Yy`1JktB3w{ѧX3&1[Ӵǀ6==WW2==hb(EQER6vQJŹzqdĬ{*`I9z_\1Y/͑ ~R ' ٦\hurٶʪiR7t Lx1xTH'b>傏ʩ-,ՋUf1ZLVQC"-mDp ۸׊n˓QI#́Tcj&4P' K$@˲@^Yl'w,Y>xHɌI+YI7r>"JI1p~5$#lpj뷯׏ZZU8׏WuG\~tñU?<{㊬H0zqQق&g &5>6\K.N~6ZGPjY9uV`ddeAVnWtZJ%n ZY*UqT.dvZRiֲ[C$ދW$Y|ՏE*ݼD%, e41_jE".ye^@嗥E:MQʠ&2P5W/͟ҩdwNjO_,e1+l U7'b .yk sؚlcR}~bqҥӒQ`VHN ԐMg!2?.Z4Yo9LWTyqJK080}*֖fQ׭eM6*ci=^%>ʊ/Pk< [VQIEQEQQܶVԤ&a#o'sA9\,{eIoYhDgRK) BUM-؎=. ];h$JLS^*?!R83FVW΢ıBӮ (ٴUbYߖ2K6Z(v݌Mojqr|b|*0<&\ ATٞ=YL1Ufw$=\`{,q#<,jw< A'5w4*N95kOF0X/$U=LhJԗMT3Vuƣ\f ݽ~QPbA9D7čLp*[uVBeԏ`e-˹cި=FWf?S^I8*)"eo&݉ bFcM/3>`?֖WQe$vLWp:S9RE heOh{VlRȭZm$G9 N1 D|.%X0о?ZHY3 QpE:O;]^LݳW뢭(((dOӚ( @格ǐlxUrr 8++6%,YW5,`ḏո;yQl:Xv-lp&[ZMʶVo D# lJ,DNtTe14kޡIϥV&D3uo2I">g&ư6ˏOm n@djGJ+e:*"EBC 6Y ]v8Lv2%aT&ÃɬKKsYS1 qԓ C(V&ʆwDsy1`I +L^p^it;3Wyy$:fxr7=U2&sqU&2gjcn C$:So2I QAtь+Oj"$m8#Bx\Ϩ>F=)5()$mЛ!p~֬ 4XIunfmG 7Idv$?LӉair{E^&j */,ǚ}̬XӮ%+"#Qs}yȦiC[6Df?~Uz(Yao_Jd[Qd>f@p;UQD|*Or^+@f{;yb)pZ|3cifMF&c=:{T ]e6?J/]MnRQE-QEQQ\d3XZ)&L[ g +6њff\NشE|N? p d ?ɹ9ޔ LS&Ic?R$'je'D ]$*Hܥ!Q lթ beG/9e:3y^kS³ǖ$U?׾bFZ1Zˁ&TbVP>NvK?JyaNFU\N˻n~|d+fy[ⳡBx$\Qf@\v5~I*rsR![2EY{ݎ2ӓH{A[;=Z6K?'4`U9{ԖK Icab0Z!@㊢ͻo\ 5[Fi[mcqI@2sP>4&>ꟚX޵ |j30]9r>pJ7UӓU):7|SnwMpS%--rFۤʮґX{ ⧒5[`ŝH.e8&+XaZţʥ`kKcF.= >Ts# cҪMd3z$h3v"CGn 戒bd|ydǥޘz-d9WRͥ@lY# ;Uۭ*((( 蕓K]WY3Tn.k,$F>`I4=#U 1-Fn#-C}X=p3ץgH1NN#\TZB;Z{TzѬɈQ ;&xsCo4}Q@7i;0X h'$NBO >DQ="EN*fGG;VQ=9(kÁP[ܳg[UII 9$)=s]{3|Edb%BP;mk;6U]D wj&"Y@#Ax?Je9ZVQKEQE/Z fx>+39;qڳIfu[r$Ā_F(7^۬g oq9XDLPCdg :7T$>ئꖒZKb~xfnF [`<{b;W*/0z󚳸.FWz/-z$ rMdI?YC YYa=+_Aث ]̛dbAUXIMKrԗq<)8_UQLI.Yp6zV*@f~nH& 0<䑞jjNs8$jŎt\Z[G+7sǵ-ŶbBBʹGa5 J 0k r1jNT皷 7+COːsު3şp9u]&ƳV+nۚD.e^UGT 6jB-``}jSq'z.m8a#pKgj[#lq` 'V @5qt<QvCv&`Gndu 7*n$p?t-6RlsjVR;Z+v8)*m \j| 09+bj?*ѹud5Ip6`znq.ӊ̆?ӡ'*Q7~"va ew+Fd1sP~2< ʁ/z3e3Q̈5 eY@G{ o3Q퐊 Դuw1V'JwT4>\7'-1m_=IY,O#C,{r1Vf_/qn.dOf8V~X'=]4QEQER6vwyMl%N @rVXۖLgM ynsP# ǨPL=@vbd?|$dmuǩGې˿Iun8i`!,?41D=H@ tQۊO<*6_1b0w5!*'G+x=XN>V4g=ibnƳش7ҨHpz Fu'is0sՍ93rVt&n@utȤqVywec wXc,ǻ3VڸՏZrx٣`zP02>=DwFBu{ <ѰRa 2^e oazUdR>nJݰB|Ojڧc r(Z(Udix*+tr(AQgE$4ex",z9gH7`2m#z ݀I( Uu楸Ja=]]2,xq֑$3aWq3+GwiT'$'Pé~*- 7 @X|K0޴JAFEHV]e<4mh XhD2k%}G5MZQqI$}ЖDBI*T_ixqziN;3|\vJf˰IV. ;-A֘4apsM` 7N0) bF[23+U ]vY)([Ω>]ލă80q0*27PGițb FR*-6vs >Ϛɝ)VtZ'd ! = MLI8NR\1bNv䑻NK:(4i@`""69j2իX'F*CmaےEh^ȱN BM]uUb@156t?ʧ f@x˴{P1cjv:zXY^NQRAjcrsօ˦s}ȧjyVܵ4qF'suڿXT<B>YX0 %#vۅRrǑRaZE1KYe(4,IR;HEEIqS򨭩ǗZ"F1Ӿ;j:-IbX!G?jK$yrۉzt!cg$ |3U#ʟ YTzqY`N66eQOUęELX-*c|MX3ʾP*DO+ܞƫ ?&eIkݏcUݮe''޵+(()ry\qHWIQ} zҹcnOv'+2c4LnrOӚa1D̠ҝ$Ďޢ09$`:R\,*ybQ! pWMh%pzWȱYpF*f""R+`-A^'6D+ RPhac;wDOrkRL( \gV-i#AL3t,Weݪ#&Ǧ{U(UFb6(ʏSVx[w'*=MYң&en|8H8nuH⅞4fldqZw tuڀ#o,t9ejǚP;Vl̂A9^* hrI**Kn#;pc{(#{ M` mžjhtl@ UWWxezZqRˆr}I,jЃɩ#QLyw1l9R9?XIw4AOV=OSJ `}jem0VZ}`\(ZѺKKoŲ\Hb!-x6,"y z:e_rTrcxbQut2^{g̥[>T$]ӷHk̮6nEW\t,>co40Hކp s>jq['ǜ-C*!' T 2v's|E."@d#5X r$~\U FB-IoH?OLEݢDQң{U(HNO@V MsYp[\\D .JΆ{joGj~a[آ$Ga~EXQI)h 1 3*m-3UA9+f((Gm[TWN#f' N!bN oڤ3\Iڜ?αTgkEܣq9"< *MX"63֤ݣVpN4Tc-ږ%h1G3FJƑ;Uo]C}ޏ"lx>S5.F}2f"˱裿Xu2 8^ǰYl (胖5p?88F8_|U۬یԒęwP0cbG;ر|c4GlR"D#I QH $D8N5/nXѸgM*nT/>` vPd~?*H~VpXfc:@?J{ܡ@?JQpR :Je/lUy}Qu/|ժ[C٪.'*}qU늊evZcgIv4K\J)دx*y[0>,1Td{l䑹f=R3 <};UHٱ=_,f}nǠLiUH'S+}i'9+GL77;U|Kd2yȤm33C G~jK}whDLP&[u . z&y!T5femÂu9u so[+dOikXqg9zc=H[vCVi F Ċng@Xdj~((銪gP=MU'W]+^?Zͱi?JkURڸlPv֋)N['˞ƒ@df 1osMI{qׅz*8^9͐(ow#kmgn^n$<jolzewGy6mI+]N&+*_RsYvhJ1j X:8X㈺DR:ۘ,"^ngN\ %v)frJ('r@V.˞*o\(]zX xW"FXUđ &8y'o,{TRU?/'ҡڱR#zEX+õF#Mr S>ˁ0ҏ8ĄzҨp8ÑY,2 s%FcXb8G l*䎡~U2 5 &eGqL)*%E$%FAqC(hܧ9*71dU^NIeHA GF*o. ar˲ F*̯`늤lsuyND@8'ToshJ6{VH-AkBY :H }- 9,-s 9?*\Q~y9?^jKɷn6SAj6s֤޾Tڂ<Ƣa *TPw_Z$8Jҝ01m8 tV۔aHՙogq笡3[-簬8W=>bk^ݢ)h*S޲ug`9p6/T.A|)b&T--3gޝIrw !_βaI uGd+<0zg$=LaA#9>kLMWY?̼=e}(f)>vJ<),bM}tl *Kcrr\N٤SZIYmj.sh|#\SL^i N!Yۻtg{ZuƳ`&Hjch$,0Au֠;ੌɦ_"J>FH_U`1⠅z([ S"bnXJ&K3p00p*O+gVdԊ |U{;Pxp}c#x5eu4~lTwWRSZ0A֮31Ԋ`Ԩs:T$py:繨|5vRܦ\jrU &~Ew1W&Wf@K^p={U{ițmQٓqWV*/u򧳔%L$h,m*eM~41n(e4%@W/N+שʼ'IlR6r-W]%\.Y0H?߫nx+G?کoI}0*ޭsZxna֦e$:s8||A_W"/ҢS[ERE)3i OG)GPΜWn@=9Jd<қvDV5"brHExjad-ʰPXVM\+en= Z)Cu $Z[<*؎`TnJSj EPf P?Z[%z(WqgѬ*hAڻ[a@ .j uیOZy;+p=j:H!*"FI#dTcH'F=(q,sS[0<(ڃ-۵IQ znIa\ܯs<0#y^IyX>&Oqӷ q}i Vu4]JȤxf1XH˖e}3E읗+/C~v@Ojѿ꞊w "󯃣W//~F GV̻%N6us1t_sZwڭܨRǎBAgf$2cꪲS ξPX ̺A&׼Q Us+ (˱~U0<LL,H1Z _ƞ*3@fPFyjX'ʤ/w P;*v\ZO =)I*FMEX4YF#Ry-$b%|8<*!R=Ң LKH46c/eϦzUvp6dʟ$yOpmjMK`;)v5%f8hjn֝QM@z`*9@M,(1 f2 )ONJv3}IVh Ǐ)QH퐇9L/6G 1L&\"w==?xcbA=; o~ I#Ivn77AXbP،Z0>GӽTViLʫ17\FлmmB,DHdTGw2 TUp$`~r@~b+M!$9? 䀰ol !԰1ne" J 9BYGgIY̊Svqң\\M=aՁr7-? G 346xF@=)6S5 it86?Ҫ$fya"] {i$q8Eߥ=Qؙ\QM, Hɴ >*ag5pvſ j&>T-ث|65^naaڃ'֫%h5+&_OH*NTP@J9 ڣla໅Q rdn U=5]c-›x/**q}H#PjqQ$N#NJMǥTH&NH Fjż2\KX)$YNqV,squ&FcǥMkm3rJu,wE㿽K\t#'z :~4sJRZN)5# Pg?ΣycjBU@33ޮT2 ^`18OUxHprۏgpp9`ꛁ $0ܶ=Se? ݟscMRN~B$ prSBps©dQ1jO<ɔ^|?`vJݙ#eU(I&5|~Z%z#)fV]fRX7 d܂jhV@GK9PuSsӞj|튯rOI=X20&`1B0f1ܫ98%Ja)8ŵS"Vl+fBL P~&HBsUTӁZ&wW'Y[^%xD>k~-2016dmDۊG∮C-bE]Hj.z󚥨J+iݜA'jmV`*IH:OT~eGu~T^H3e:uler.}$> _jg%16qF ?Zk,cZ0!1] **(wP"Q*L㚜s !y"XkD*[7U$6>L ib8.~bzU9d!2@.rj?c nM9YɵH5YyIU`饊,QrOAS~ #MҰs M<3#ALgJ`FvcQ3(ܥH+iw2bH9< p[$n>9m9>^EzA x…V_)0?I?; V ǖe[` ayEI Byn{3ߚ!ݞMY$f`= Յ1 L3pqT'!p[}MT$$Z'3y'O< rJ7I$k.0JHRJETX$E>`R˅h<Ȩ]*TW /8H݁|qRC_ˌK(8Ul ,$2IU̫%1GujC\+m1MQEMOYkȢ\"P"4U?"v@U AHR Bz|k{R\&TM^Z}T'Vo.a1NӴ Fɩt8TpyPc8˓9-WVm7P3g#;>NnX/v׵Vq~3= Pz}i!PYnY9'TGrNnXԘ5c&?0Qj[Ck!@l S@x ¨#|U42ǵS|2n*uUn4nHQ\Sm2rp)a=w\IZӜ?Wu:;ok+wZV˟6CS[m>8ٶ7-B,2'Ɂ8gW0ݵ>_Ÿ4eh6,&A(*8L8FH8itcytLwRXĄkU@ WN H(^nB&B cֲIZy#N`7k`gkaKkԚqPWojVgA4PWoґا %4V0HX^4Iz m9'3Y2.y,G2w| P&RQ|ˇwaJzWU6vru՗|zU6! =*^DrsE1FYxQM; 6;S/QpN@qڡe q3 ׭S( lmOFcpź#kvU(arÜ;,qzX}Y6nMOq\[bFەݐk x[>ޕnEXB>Ƭȫ ]f!d[F=Fzn* F~3R],c)>́0g'BAVBg*aC/3Tلr 0Gҟ[ ҥ ztv\7(OpgqM*dm/"4zQ0D.;U4fiϧ5Və9j 6-ssV?6`?u*RGZhi5,mǷ% =IAg8B׊2Ҫ_[3Ƥ}lN rjd*kH"@8bv n=OKn#u XF J7nK1ڑʎ>RDb%NL嶮X㊗  ֢` xOG V+q˱@G$ٱZ|i /FX?6@e;F3DdcH ϧ2+dLSCy2>?jX{Ӓ-q'*G-z*,X' 2OJZ[!$TW1 M}QZo'jo;fLWrLITosY3aخ\Oja3 &,R1ޔ͏$BK&иVqޖUڇsNb sTng xNYL1<**r<ѕXcw*P9 1JWF;fJ6US Zьt󓺭>Z; Z<PM)FOP)VOP5})'uG)gu&b8YΝjZSM㌚ݓfp1xK3Nm'֝rw}in籢3p t dN] 25 ᙀqN33! z$])1LeO-FUcq#<*ZRfg>!ӌ7S.e~v=83~| 95 npO8L7 XdMb(:x&%IuO֤1*ށSueir,`(8z5 #W bF[dKfC_F`b0m:O[UDwV!UI-$3+ t9ǭ1 -U.|],LT7;Tmdnj/%d1?P*'r̓73HԁI28UwX38ҹEK!&ۃՏִQ5sˌln"RNXq;TIF1Ϡp@?AQZ͙g\ mǰ}K2ö@*, X7R/^j;pvxv=Z)8#}kv3?Tֽ5_΍$vIՙY]Zv͐q޲([D;{$N֩^#,q3 c8X2EC BV[(,T)^,H*eJz$?¬DFw79 += TmC䎪?:䎠TqRF Oi1S(:b;B?SަUz>#nqTzn Jz"Hn#%2\J;,rG+XSH1,嬇a#sץdC^Ғ_&R~?'׽X˞? fGVl"ZֹQiIlC*T!'$vIJj\脏$zVCpr H(fpA+sZuGR}sXz[C V>Ybj&)\+bBONֺֺ֘Უ= \=jKbH!_0`J,>B#d%5Z:|t0>nP@#]c@ i$P0>z w'F?ZINăV /cVH(QCRy&zI;0h=1O31ʃfSB/GJc(Qq:T%w(FъKIVTHQ\i##׽G:ns";c|N^Ź-(yVm||݌ڍHW1'i<JʞqY4Irc?e1$FOY\ 2}jq[i‡q8{ dW)y >C})p?t;5d1HpvTԤ`leFqZ sn*qϥ^dZ]s ##֏0e0ˑP] H8SG2eN(9=L׎6ߺ+ 0RIcÄ'[AX瓚сXj(ڠVVp޲u Yހː:)?t# j¯L~¬eL ŬYsGzɖ\c+Ց$,FkWN,-pqU|qJD*s*.Z2v{ `*ͦ^y3Md̅>l;mdr?mY+5GƋic h^)J"<ur'|w".{ M̫'įytYXpYmq OjRX-#I'P9'Ԟ+s] 5V爃%1|Gg;UK)Jypl,:DZ=TdO倪ZEb ˌ~^,`rFiv^ȭYSW#o?5R/xR& j YH3-@1ޢYь(vj0#ҳ:|aT#V%. l$c U^٭t|d78XZ /F:%eil9OSU Z٧xJNYPHg*us aZ {2E_uVxZ2=8뚵 .1FSXX엛جvvKOzlIfxA8 #4g<i+s!l}n8̅*n=*9 트zbލwVu]u7Cqb;b$$$ZP3K!"8*\vOJ19fXkJ6ep\y*yP9C|ү-!:zUK@C$d y#?,$1FCw6&-dmcqVlrp1c5 _s޹R9!?ZþENQ1\QZyC8TVHI-^ks!;`vO1m^Iy>,UYPKb}d1k5 dwR+pLnR Uާ9dY9."<^=9lsGSŁօ(N*n@mA'@ $U9ӏ6GF? 7o] C%I$N#T2B$d&4| Ւ"2ӚZ8g̞m*6=e" 6b=3QDglqia?RdD?}MKm /c9 NTw3BLv]k(OIp2B`p@)sOLթ+U0oLl2YB)FsY''א})p#H<`>\D&mvzR7j}{X1x%Z0G92)'8Z;=jRcס"V={ 15ZҳחTSҴO1I\֋qgy!r@p X]uyjl0A GnaGcN bg*Q.@@?JP>@Hly@OCa+>78eR{U9mоOn8HT!1_ִ| y!GZ؁8glkR"ְc$ 0;lj`rX媿0=4N٩umD[ZD\䷭&z^,NM[hfgEݱGǜX#'$֍%#-Ʊİ gsgMBZs `>²/.I-ד4ϰ#8'7$ {_vO~CwPATU sAp:mI,cl4 mO ;bzU&8c'sZF&'r~6em$IK Q}!}.1 iӞI~fW=Kh&Hjޛj!qMZˋɨ瓝@pN: BO)_Sq^\4l*rFc_ urFl5YaI=hTa ݎ*o'ڧ'I1j䟲\09V"mv {H(2ҢY^TB zS!W`}X`d0 Ӄ޲巏w2HTu`ljEER j86̮<2)Ήe7/HHJyHIY6 oۃɩaGojؼAokk) _kk1-` HO˧ʊ, M ?M9G Yi{qrϐ{Uhof>saZkk+tɈqiX72;XP@rq[UY9r{{WUY9s]d,#9>xumy5,iiʠrW }~dRQ=ɮvSyz͜v&Y ۸ݏ)/n9U- !n%IYElZ\G u+u2ʏ!A^>ߔff0q꯫M8#;:gthfOxN#KuPpM2) $8'n$$J< InH=NY"!gq{枯Il~Z+mpNOQVeUu'=*(`MfNV)0W˻b#`TYlDl1V]Dl|f8.I=aUlZCiEUi@*wv`ÅRhB nFGYYx{U*;;2n5PH˸vȢ$a0&|3Ԛ[ #MvsUs F02 UV:*ir?YRIgZEKVTHԹSȸUy[aF{isV{ߺ?zn 栖!agQIrY2GdrEJ[JSp?JV9’jrCsݪZR_QPV'7^1{T'h`A<۵2I۵A@> VxLj{oԻ<@@!S <7cOc84@҂N܏CAb[w#ҌO҂s9ь((4zKwoc҂XʒJgdEխ;"-ҊIx{7Z]rk^#i$6GXy;QKz k;}wU+o;T'%jT6 ϽsWWW=}WLBW޴;lv6Zz,+\0nR*1.2TRUTҧv1խ5=|jͫ fs\Rf˜ .e7:~UU =@E]6I0*"'%Q9B@-C؊nOM+d!@0IQޮ['٭T6Yc4Ta $} :ՙ} MH>B65Y 15A}zU5fr (*Fs9*Q_+SnPa><}?;`S5%H4k֛" cTzmm2Y. H6bYQƬ_մʹgls#C";tN%8SZXdCJ8j_/n1ꎣ' 'y@5R(4HܮpqMMӎ~QIlE^8ldҭ1;vɤbA>4p@vMg'GPgҏF{Ru#4{u?9)LS1qҀOJ;*A@$}qG^4y('GFI$U<~jށNY6,ΧeB0Xkz-7C+wFbR7Lv~7t)T,l)kvkѾHr2+z-$"G=-!.E0*'?šϕ ۿ6=ރgջ|4b^cѓh۸mwlhaYzEYdpQk0]9V5gcիI ,i+4^YWWzu+'V4+C̙J >6k4IAxs[a`r+V T`"hJ)$d:M@fRyYGҪ\IKT:±,InW9Udi.QG3zU5y/Qxyo݈]" ; kfE!TDz٨ (1 ˀ k1QW-ȿ(WZY Wey/cP XxѐqE]C~T@T Աiœ<楏sNgԑA>ⳮy.IX1Tby''nA=;Ip#@eRJ Ӑ2KU* 5V9gwɑuI]X*V~X*uT\ǩ%}jeQqԀyyva j]zb:T*z;TcNx8cJh])p=yirq9=N_ ߚRzPs#Hi<3?k3<dȪdȨ[9<Iv[]5 kmd;5Øy2riV5Ԇo6E>z ܄j{ԕ8@;kRd˟{=m LFA+ZbzG ;VFq&vmoƲ5;/ *Nk*'h"%ԚҲ F8T 3M_$Kp !w5~V qi@:T:ϒ S}߻\N!*1ު+u*lPM4m#o>_[G`RBomON>ս=:Y2u{d.\zEL:wX[t9w_a/M5n|>Y8 9!@q!BO ',N!fT%⧵H6NB CS[B9Jώ* aP s9B_璣*X;b]ÃJĽp;\Z:CrL>v}j|LuEp}VSqZm ޴ $m,;b?*kPʧtYI@!N 泴2]2Xsj!{Ra!WB>40HXp>~ة#'œ67c88ix%:tBXLcW檨 ^*9֪JS.e؃\)bilwbil֝jiGS@! ԠۺTqKn'R6}}*CL7}j/&_Jڙy6DQ[3!wW P#f: ܗ.Z mSYWM+.x=M>ƤaڤҡY5(/b:Sjm};֞8['.GvwR W7r*lEry{Vh$Gm!5GL3qkr^/7 u HcVzz{jp8R s{%0-#1V]e#Js ;Ɍj1Ĩ>^bl*T->e8h_^NT@ y\f)ǭor}+ ONm9/J1lsYznq/{V24v J³ͼQʲ%jL>Qɸ}܌Vn3eF<L(@sޒ1ldgK ]Py9Jl$0 [ĮP"| p A݌sQ(M5pst4Kqwjm(#$ pAE#8540ArM=~zS߉0y')Ï^Ҕ=}){S 0CQ>j3Q,Z֖Sd`"&FTdTKo$Kl"KP2 f[yipAlNI+ޮh4Ҷ19̐㚊9n^0EA)Pѫ;y52aYCy@*;TV5\w&+5͘ >⛥L^ۀWue.qP] B⣜LgJћdoJw;Gjr.=jPhcWeHvop8ª9$ 4C+{Xvt\ɂ65mHJc+sY&iQ䔑X}kRZ`d#PS#prQeNq~OVq_U[6] ]Vf%} KN` `1V eWWnbL/!%WUf]@mo/$c5@1UG 隁<@FM41H0϶T@@j1"#3 XWrOԢXfr*S<a@Ҡӛ$~0ѝ3V"`B?*tP̫TI)@`q52`‹- q~4Ƨ ZH?W2O{V%. ܣsV.*0޴!&UO#"2sf.=iF }֣ƔI˷AG,qF,{Q2XVjHҶy`8$Hpdl0QzVdp6K/z$R&8 4@@i)}vsڜ~e۳yKˍ ސ79?0@qIǥ6N#})$@9 @1[!v.=vv̹I2pHo&GQsܱ -J*K5-s*n*SZ**c@H JغbmBpx9ae ׌de zkK-.692\Dhi91q֩7HتLNN*R-nvUsmcg"GoÊF#&5mtnn"u,ʃ*3JUT!Oҭ)<Sip<~fN?KBbY3'Zt2CEm`em.F7eFāXduT72p rANRL+ğ}Eb9U8C~!sVY}T z.ഊ< =ϞҖ 0zT$A<Z3P ہYB\noιT9,j+x*M?Y(A}~UISi{pMUa- t I mE$vi!k:,d\򾆰S6Pe\qaVӲc) qp1JGp#mܝ@Ө9g"3s7=k\ƙoJnQ nIp32?$(RE&4 u5u pV \qү_ c;.kњkmU# F5iKm{[=>rI+ o۷ 4kjM%Ć0Xm$nev 0j[LOejmn%ێ Y)yU;qTz-NFOCUm}R7M*H5SĩP~[ y`zU=tS*j·$쬮bVҤӦHdbbRzXK,[W7y9ޜx435'1 fs^sP[R9B.X;t˚Kā|b[CG;/*Ai5ıaخ=Yi.$ұ5{ #_.l'c`8-66,[K`Fh+ z]94{18V,'80J_q+ެC&:ԥي|@)eb9lsy+^ڢFnY,{d4xzRL R!, 1";wgfv/ A]Qգ`Uj I!vt iYL aVWrҌ6HLK`$6֕IBrGZpeQ ;!x<BsB8H@;֥7Vƹ9`:esHIy;~Ϩْx'QNfX،.OW3'Gv̘ TVHW>P-Ӓ>횐(ˮؗsPN>4W\U Vb=)MnGQC i-0ܚlmJ6) 6oF+svH.,$o+$ˆ<?3E]_cX_MtiPGeE8|{qmzM~vd$1hT2@ĤJp?dSU8 Gj|:H{Uek1Ԓ~cWRFNw#cgOR@ 8\P iwz䎂?xv#=E8mn$c q5;K$ҫIPv弸/nGj{{jS9fbO5Sq?M$I=3S89 BY$DV?JTuӝW!lR:֦if$-:Z-nchNmkIcp˼xR}sdR3rμf&C@zҮ\3y[dA[&$ [vsZp;eWmj.KrzVEǒ?zZDb3W4L+̲2QR#,N1Pi5֫,7TP[I5+d#YzFrAǯ' r\GBz?ֳIsJֈm u=Onl$jV^pT/&he'?.U#֡ $#}OJ4{YI(zT&Y=2u8 5 c'2TjS RGE3PWEЅ2Ajx-Pum2_C@k:̓uTlXnx9*Kr3NvctFriR3 :)܆m"1q?-TۑFv ~u "BS8V;TI9u$gy9=*P 9Rwr56gj_1j# `c媷|;v+H1L[u.c5Z⭽#^sVZݛ Yh^$@:u5y8Vsӭ\i#XvJ"Ҫ/d2 [[̀sd;ױڥS܏Z&ϛք[cV85Enui?OrOuIe8-\2jzZ-9fUHx?JZX@'үHokGZҪq/̥%zfn[9O,Fj«%fcTbYU-Uds*6 k! 7,qYXg5$*<8SMiLJ[d] :H >;vIg2 >Nd֮[ZGcV XLNH< %$*v4 p9Lp) H,X~?wQ I'J{GO`0sGzqr0EC'(ê9)#֙& E_jjP}/EP?#{cd~4ǽ!"?@i; Abs&qSpzbMBlwn*86r[b)j'p0~a cߊ^u>-Z$a$ ؑyDZ⧕nIZa%PUAwzpQt'vx-ĝ$gs5ܟTgl`ƥ ѳr=* 8*FÑU=#6PsP٭Ua֓HOך{YA T,LULF=H⦷ZRs i+F隿ijm{w=̈ϴk:DW()6@<Jr++F;pwʏ##.G͎eADL)]M[<)M<4J] Uts%mR漁A|DsUi.cB[Lmo.BcA?\Lf*Yy@! ֬#7[BGji1\JӐ!GZ.|{Y1^j/!f^k3]@95{$sMQq<,8 icn.i;ӊ>zi[f a8W4U{S"[/.?ѷźsSZEpSP$`I"f0s8]Fxʎq̌Q(@^kIl [,:TRƜ$9Zl)Kmpe} NhJzqjF?vr~f(]#D ~e#f'KD딢kilKF! zSp^C.?ʜ)!:LxsS=Ld%3ޫFJ"8'TQ$ g*8F O'ڵnDi +Aҵ5 SdPBV09ar;F*l7 Dm5mo0H80|ۙO=YIkRs mQ7%P+1ϵUӋ,0vA[ {8|;UdǦ*ŋu:BNzcVc9+GGy0ljKQzwL@j]NfO'TbgkV^6 NTNUBD̤{ڇ%!c<}Iʬ\mTꏆ zz~cVv\VuR; vJVu$bApU0g>TM>_Uf_]M6*|z՛crGͷX,,lOU[9n99y:1|qw2 $ibqx>ni#ߌVb麬F 8ՈNяu8{ܞ Jp6OޞqOZp1zBQ1=6裳+JϹ!O*z-Ǝ'͚, k*1l5RײlL+6sm^# y>ze$XՋ2[R7*2 x dy1pW^7SivTmC&)@Oz?rz }jt aO?V-ʱ( b%5,ŎA*pZԮ ڼ*l Tg{'?7Bjo"Ha?ҪѳS`D+2C{ֵQXۇNYSZG 7$\\+#<5KVYHUu rQ,Gh2ڛl͍2SYǾ`;.[USZGV4t¶K,Acg ,^ݳ%=*g/${Sx w5vv8ʠ˿ws,mAH_wKyZH'HY~TQ pH$Tsg?zo\SEa \Z%Pvj6E=U{#xc?(q6*y19w8y1噱z÷Ɍ䞵1#?w898_jS~iC#j)Q;J[esiSƻ!qzԪ1T"ϽN£RSS~ryIZxT 1szU3o+89Fp -==҅<8b:VH!cҐAǹoQ@늓r>Qޤ.dw:TnA?tE!sOZk<ڳDZ5H[1r+vrk]Ok_i#n}sZeci6P"Y@c֠o®_qQ|`@8?6="NF:i0iHO vR0[kHWoO҉Aך!@7E2${\ri-#w}MZ BK}B53aSNl٤[]ʇtT.OJ9\2Xц'VM @rOh_J9nڇ;cE _j/6pJ\g<( A AJz zsӠvIceF<Ap0sȩA,O!6⴬YmMv1$2>1b@yM߈HGf;kl3 7\E/wQ*trW'JD UiR9s۷M坎Cʬ[[,yx`+eX nb8H^!8>As֝H=p~lz}i0y{_~})t1F2M58:MrH;_`A=Zvs׽/nԅ 0F2qB>`;c40vh{ k*@'ґ/Z;e8w55i&qzKr`VILd57LhFH:PӓpQN7*BqU0>215UpGBˏ@1VZ,>_3V# +>Ztn,+ɲ1hȰC$9wj/#u.pe?4YL]ܞܳM(V?wڤx-ydOj _?J> Ox㚿,caO SW?pj/bT#0ڙbxW?x%f®X+"V[ HU&E~9X}wa^Tn;>#~ jaɜCtn7\qi,!8nu) wwW@Ԙ ; ͣ0(1L}xen P?V̒]2@֬[ ۊX`b&ThL UT2=+&g"68+e+ܔ%{WtDf'#!=ZcbI=3Y걶RDfQɩ&2~ZՓ) )zMaF⵺ ?iEo$ɼO2>yj'_zЖ ޖw|1yIe)^~nfDaV)*XչYTm$ҎXmq:;P~NqRn@^^݀rE= Od⛕ΐAH 2h`pHu4tﺛt! ҜOI[InNiޚ~=q'r}*"[C=@sDUTerP*iDp85WLK%cuoI wA>}Sy?Z'`l.[ @xXjD /E! ?[ZAiKҷ I+6Vh!;䊽p$O?=MZ%FH->-(A{ma HF ==+X!v AX7I X󵙆~b&`xQZ%軜 >A]F1Y(b[$4e-e|La R忳c8(Q@# *mJݜ_a?\Ԅ@OEK`&40$֖prM *5\&%ӥXlRnI*# de &bQ0J< pq}]J*3!k_G֬$#humwt"vU4! yv6YOVj{r6ʢdk VgFc7OjVVfYgd9Ē #$|ǞXdIgnm,n=H-`[;}*Kh1枠o_Id,hX"Ww3&8)͐f_CҔܧڝ={R?8ϥqKW=)sS>dqΣ?3w&yl gcMsdLl9M>ƚ~6)&KѩKIFy8iO$IFמ)!qF\zJth7FT5N$O3TH&('֨CpHcP c^=:[WWeeL}Z6OYH2R[T{VRc('hqSVȂ1#3V"kK\6{*›[X_b~ԖQ46p]qX7X!QYo?Zi'Fp+vI%6`V$jӵgO ¨rf]kVRxE 4nTP9W6V~rX֥uV$4c+]wEj)af"dO57 |8@chv܄c0,4ۍ!vV ONHkREhɭ}&N*BZ:|O.NZKL=j-N$H N|D^s:wGs{cJC1P/=Apw1SXY*.n׎Ap &d`qU7hJx\[G!%vuCshyd]G:V VhnJ;@|90Ѯ95f/5捿)*3;nRH,2$әatl9$ ^aeS}뜒v$W2Ӳ\I9" . VO8=x?l;O^Z6SH,ۘ )9#ғ9n>ojLlv?@~iIS;TwlxaOlFxwV&=1f =OMHS]9hZ)u#z[n9_&I袲YonAo5,=3* HE>k-#{HjkJ?`}ox$PB }+c[+Q|*;S9}zBC}w]8ƛ+C2[OŠnre\(%-a$Ah%٬-ذK!/"vʝqO{.7`|ǶhAGZA2Tp~B2OVETO 5,2< ouEh^w_nj+5ld%}֞2/??SWcqw⩅2\4p_$ֲn34pXt[To2 `dxqZjKp܂F։ceN0X)e:]U%g]>;tPto[mX5y` @{VecӶ+& oDhAǵC#8@4cT;Y<Ί*9ݓ[IN{zt4[[<~U#%wS?*cݓCMcczF?ɦl?x9ƛ3H=UX=P^F1sϭVw5~A>=g~_zlA,I~WYmƭÜZB" sUo" V"y\ 3Ze]q#ϧsZ^d38= -OMҩ#8z-G6nHIɎRxiq)@D#r8ZKLI|P5f_Bv]yːČnVs7zTsEB8=M TRQ4 8jk1yrnURژO*: W (UM0>@=tqi5̟x/iV+}>#sUD߄mtrBbԶU.ųMUR]w&Ys֟q=>.sMX'z&@jPf?`̜Ƞ`c`a!ֺ2Mf[!xz9[̏0Ÿ 8Ԉ /_sڝ++ghږ1TN:`YcJy:϶*o/#~y8qG!9Ms_H!MR#nLF9"a9L,.N;PqS,wo۳ǭYnLUPV* J'銗PLsOҪjH +!fŋ0UbпT}dl6D,hɹ$@{cs %*4vI!OJG yPRfn~IHUqW&^GhAgS)i$fa9Ҁ#]U f! tw ]X62ψnJWV?.&"ǓPX[r.} ^b"X,i-PCe?֗Lmą2r[;Tq-'u)ϐ |w:4EuU/'i&Ld ƨ]yzi*şS{/PR sgw3~U  gidGd pAu5 XnO9FI8`V]ݺL ٞyά>f#|#,G)ګv|g,p* Zp/F-ڭR, 2UR2iYc%yܧ .[o3sn ż' U}ŗN*d `ULp5jeWQxϧдht٥\"z8kfUb@rYIӊtxm#)a;}I33SMӥkv@rp=@_eԡR8=]ҔK|KUۏePp_mBU_f,dh8kP6[J#T?ej ,ZvCdCZvBGORQQwPG\UYF O Zȵ q{lOCg{b3y&squ3845̭i EWCVֆ5T06xOK9^4P?`>fMn#DҗnКnz%`t&*#btۻSY@ ,#Pvdg֖Vb 9>~ҐIj6lAzkdsV}#/>SI989R?Gp;3bZ-ߓy"<''=OxzjkjMHp$<ⳒAk6gQI Ysp8$. |FH5~H(Xt-Fb([d+.XθR6cf*&u8#iNrs%ܜz|QW$$~4cS)1P"d 3:d*)28=6=ѩ5DzU;@3P ^)'[ jK)G򄷧%,e ji?_Ul~Gk2EIJFGT-R0*kI0JpeI#pœfdj2J'B@6O^qg#V)ITz\n|¡UfB7U[v?YWn`SbWhQ 63®,s\dޤK E@f\:gY`IRE8Mw8ǥ$sF;n.`Wº* u/78I{y8xdGLb0VRlSO6gbM/<7 UI̕5@s ?֬+XβJƱQqOoʺ 0s}{X6cI=cR1C?}V#T<X)ӴH$R'%zyD J׬nllU hLkԁk'[lwc >y C,}GBN?NJZ-{֥hx ihc?7W^28%ڨ@rQY{$lk2O&2lTV3o<5LY=̀sS8`NU>@?3ɭ٣=(=JӲv] O.AlV91+!w1&smEH?FֻKH6p?DW g}w71G'UFNuq'k+C"-J_?fndHkRܽ;v8EO QyyPykw8ަXy>eT}>5i,簩C, ? T2`y㊅z`pGCQj3Y8c&\ uąur0IK+ p>mg؊4G@~4Wpz?T?-w`/P t6Ρʲ! c~(]]ϥY 9MZ.cPXd}9OH [;@iw*E7Ds[BR#-D$Y,] oԯI->k'-NkP $ A0*ܪd"Py\Eʆi)|>5݈LckO[_Ꞩ%jWoRSU yJS_k= XnѐHʇ!iaV![pQ3Xp|=zcO3!T40Uh`( ir7nRnp}y#Ɵj3oj3pN8}k>LqL~W?B[QڢTdZ{5V}-jd2s,ٍe(AڎKaLg#kkHɸn~R [`V;]8_ħb3Z| ݘ}ķ18Dq 2E}:4p1OV $;N+:Uj o, ګKpME\iƷцݣ֧AIm&} J1Xf',{S!94m6*(\[ i8?u1n'ezzU (n2kgJ4YiXZ$O=ꎳ2Ip3j"U$g5E=3UK`}j}sgq B Ǿhԯ'PCƛ{5h!TT߫HNY'vdq%F^ie n Md hr[\cWVŔAPgWPV#cO5_S-c:gFV* HpPhU1΃v:J^I lp ٖK+{?M/tZ@ۭq)rPւnXfZ5rFfu\ܲI$H.G٬ $gfSةgRV(|YU2n=U>BkvIqYɊl7],7#67:'W/g|WFv~5Wk0x  (ҠݶLvZ,*U(\ _˚nILd0-IC[UO1?+rCFȭ(ьc6d\.> }Ֆ\cfYӐͿ֢mY۸j5?e\r3u`[x ܞ(pxz6w&ផrME$*<rxU9An IVA&9Hɸsڑp Mg#Q 4vI߫SWXթB^=M4 O)`)`94=G'pnDa~c*%_EM!F" 702F4Aay$A`Aݪm!a"{vlIhBWSVp2Ԩq =@nNsޞ';rM?sIi3cMxFE*Ǔ*-4jxWx ?^3SB(4H2F95BitW8Svj3@jǙ$uYe8f<js,qMFI^)S^FgO1R\*> zSx۷ֆ-HhbCڢBڋscjPRj6qT:l76@2G$$hm~~kH2G+SQ Ú1OdF\dɞ}: zbgfWJ_J ޼Ra~)OœF;A463iN:SAh~^V,d?/-RڴV[y܊p}C5и9Qj F٭JMQW8RXpnM3Y|Xyjٕ15DK!$u5nSiW&;ccWLv G~G)"/#Ry뵳v J%nZ^" VR#v?N宮؜* ;tUP.}AT9sT'!Ɵc8Ur{qVsT瞸4{R/LL\gc끜SZ>x*SٽjNSӃ/zxnޔԣO*N=h3`[n 1Hr~chIsaHGgs֤ 9➫⍛^3Ҝ ;`A;hQ0E3xJ~N) O$@p%:$^~RO9}{"s= { t:S$8-jS8-L޲pR>Lu kGIuZch58';W%໰?AN|-V C;GӽDžtMXc]0L~±(2j%QX@?P/:R)#gϧPɐc3dýAn<5v2NG^QF!$AVb\9>ÚݹA!E'w隕\7xvk?b\1\nX1 ڷ-1mZTx 0DZ}j#Ԛ4bۺ֝2ג=HK*j08WNJrqQԻ\.@VԭfOr?ZbO1!ښm2O=3I杴s֍vW jNp4:r`d `Z $ dT^H:RmZjMdjKlHc9qW q֐ * cނvȦ-3'>R&z7G8'__JYU*\MW!W!ըSn*xn*tR8#v$ԐeMI (y4Kp Y )?f;'41$->aj'sIw/H"SۉhvҪږrp ,ۇR`f}`زw~'OҮϯyy^*IģQ/,x?CR9ҟ~fo' ¶V` @*by!W3o}띏gkK B[{s)BUd-9t5_-1d4N`{98rq:ûw:Tol0flq&i,ULqŽsS<~3' *F0H7qc3$sqP>H+x4 <J Hq#ړfIIFn&1d=;S$bTf#pT嘫FF*#"l6>ڼv\}+Zݒ4sP'Od'UqOucJ8'y3dSu3 uoZ=*2˜6SF= +y=J)fҥeqv 2{ }N)˼])f_j8a!\%cb4hKu'Ѻr{T*?(pje g87PN*DUPXQ(FjK0*:-o̮>X{T\>uɐz}jrM>Z] p~HǖWWM.>ꍫQX[$ASP[~wREYivg;yC~39cS$b)8sZqp =*ܓADqSp|J>!T֣$nv+:o'F䢒{UvvFB90*3 ";wa*Jw|¬ *PZp~T881Q~aQrڣ}*cNjbؖ_u5<'#ڞ#U+q0;m4Si!S#؜@FӚњHJ\1+:yp*31$TeZh%X`~C5=J5b%2jQ»Ǯ*mOZ2„JҳU՘-޶49+ 1 ڹigTv!w*,N:^_1ε|EHڤaf*\~4Sc$H|Zd؃wB('UTgT0~[h֠}^^F`qZI jXLQ^{\@O( &{[ʃPW-•qJU#)F$ y`Hw}jB4Aǭ`ހf:6$;~|tiߎG9N\ K!OJnvͬ͟45Pd|xEP\&s) Lue)'*:#%yJ@󊽦ʳmu:`BWYyϭ[I0R~NcßZy?98qL#妰$,rzzryFzՇ;b~Bշ)e%lHrNsXH=sM6\/O7ˈqS@GmPÒ9iR+0PPT\ =X Grj=B?6Fq Kvw؅'z|x7څ<^$+OL[ StcxE]u "@aaaIڱ;3J20nY^A JwRo,q3H\“~{ vtP77aN J R2q^Oj?*Zrd (╥TRHJ*)=g JϽ'VfÞ>қ$1H2aO9$ ŸUUO2$ԻqPrZux`I=HaUL31*UWj{* Dؽ{IrN{(=: vXe@.nހt7P%X3r*ilw=>`)9|vN@vo=j7UU1$>=rƙ0#2^PJQհEDĿO`LŰ5r1qUA(6 ?lRJz{U  zUG˱?SUh"}55%*3n']poqW5Kj! U{*#  O9ܺbF OD1!K+9OJ?*F\眏Ex63s\Ta^AT4af~U&_@+DO[+)sp x|u'kQw8ʓ髲JEd]{K㎂M_7n8㠧>)vŴe,#pI4L)"3M<͚Հgڡ$PT31QNr[銎(BHqǕ£2=*IXTҞuP*+O"$5YUpI5UCJ㿭t cHZ,̓URl 8DNXduc<$Ar?$lSeliXI}N),w| OpPjqMpe+&ixy6tZ9NGZGyXqU5X!vשo0md\& Eۉ$#9Uga5GS*"wxKWJ\wz`V}%zU;g|dE<{Tq@XNQG=j8=dEV߲ iR5 Tʱ(\eAPr%??ʠ|UQ@'֢i6/zIBJvX(y"v3lU,ǰk i%MTlo6iRG*fytIFLL~sYrkcvUCNi.?vOzC~PN:{TRfOjWlW#I$H梅$a]Ԋ8ԴOkB9RF$ɂUPjRܝ0vAemW  ȫr^%HڣjTId;wJcUeRFlF: dUڛ+)ޕ6@*JJ *Q)RgS&.X֡z]K{рH xrL@'?Wh]jZZY8rru2? W K T 2$X~L"EgpiabQK"yh:*m܂-_7>MkTݎd#FcO]f„a?S]b+X qVjZG1ڋHOYfA+C/9fHnzSj6@zT@ޑbeMvo)ҡDNN*03198sHFOz;/WPGT ~^X*JAaOJiKW% Iw86=NJӠ2vl煭*#408?~ a2Gz7jHL7M3v *G{n),qJdqe8+*bn3͗9q) =܁ ̘jq$o#\wz3a=ŭ( joii$}hmYb W9>FO IfBcو5y$_ks5x;%zkTD#6.*YmcpP2P=zG^$lN輟*7AySSDʣk'ߚ%˱I ~?Je@sP<7ZUYe>aΡ1=is u yבQ:;z<ϸ;o ?T3Hw98;U{rA1UDAMV#'jepQrXV9*U sZRʂUG"%"-$n!I>@ v9%IY6\$F[ɶo8k$sRg(l}{@MWozFwB}Oɮȷ>]mEj}pĻy*jYr0~qU;(_ڳ,Zܣ&Ineos}X;UHoVG\.` !y[xAy˞{٬0f\z82Y}3U-C##9s)F@9VQt^ߵOnbέ[=%4YzAY549iK 1nHW"M#8rxӞ1R`ҤE@?yFƪqpޡ3yk­VkURY? l[JuDF5% 4ȃ ̀5cYrFבRgdF?t?QlFqTNNEKۧ9赵*qt* 5tsZ9 FM5jFm521ʃְiJA'֐(OMiMV$ޗDbB7|`8O>\n78SK"A#4]Q |#՜723"֪B0ƒT-+ AU[?U{UVKujq8T=j"\K,W<5IJTzU#7믙b ZGRO@IccI8.~ x0t1Dx5[0Vy%oh5ejw-{y$XaY75Oȧjn@#VYvGFg-qevHOV5Ɲx NV6rvwGT8][+mxASFGpxǮj$lTYY# tfRǎ Ko7#j}RB~Jv0rڟ))Ljf+Oj#jDR# S"5^Eڄt' sRc֘4QL'iMyDQMw)8E'6I'_Oz wbx-)m$9lYeq{M̲L>^(UjG{AHnf0: ImMZSP@×S0[`ie[,@TWn]C8&˾*T}`Evl~G_kIm8$ju$*1҈YEr!&(2NX\CmҫX' EPNX#$%AlUk 5awaE7%?%%i.fk_F]$tdkŽQ<QK;#͈ZYe>RG>&8pC<73Rgp5={ _ W<;* sV,wO={2X1_MA؄5&gۗwW'ޤ̭#=+Rv2 hNУ.}+GZq8EP\Jܱ|,Td v#qC`:1}ʢ@cӎT>ǜ#Q ub?Y1YϾ Xd-}j7O$qS;HDgF&qK5I#qdW>XnX#=O&[ean:rAr1j 4h$zEB6'$cU=ʍ=B;SsN~48c?SLjq*q*nabkF?. {({UjzOo:W{S&OP81y:r*hȆ$,3¾Xyz._svW4L dqU/i,G;iFURv%K!-.P>X󊷣1խ17ݧFtչڊJ*pYU{V~P`! 4@#XrOZs1~9kV85R>^ίa9ȭ@f^JeX&9y5s!qG/aNj9>QS!Aׯ5DsFu#Mv>榰y,l1}HSX'Tlj 8~M,EMkw$S<drpOaS\ʒHp} k"Hm8=*$BH&i Mn[hbr0WֺKXҬ2ChD:mʺ('+?Sy;%OA?QA)PJP 6eeF֡HF߽$stv { ɒd&7&Gr'U5H8?E?ZS1ǞKt%-OQ?:gPTP-LrS"qo9og\6:Ͻgdҳb;U;t,7 $C8'1)0 0 DrM qj!R2G8ġb-Vc-Tr͟^lrh9)ښ[DfQAR-2J]VڑGV0Xq`-lR ]|WJJ/Qp\,1;?LNX'Rx?AP]W\FIWwVt<^aOSطHz*w,J~TʠE,@~r<} ͚СcֶvjAs[h| pp 7좲td dLHsY2cVV8w7ʣ֥`35!b9f٣enҪ^V̏sژ#\4Aǭ0pB<Ɨ(q={h2rrrjiwT y*WT'8N*:,mPySW`ɷ.F3ޯE{wxa#G\0Gj΅l\=Î[pѧ(MܽEiK}9h/vW Jw]ƣeQ.]ͷjl2i]vc%e;b hRNO\T %9\£CHOjTG?Q}X -jWU+mj; qj[w4q&S=rQBՁcުHC/ppMUA5.]'͓U|nmr^~aj%OKɝjG͚W^Z&1G֦ZNMO@0bSm⦙/`(Ρr}*G&j6Fg1|ȽPMXٵ^bf =j+ˇoCu377S;{U{x[#85^5-"{Ua+Nn6wzUXfP>X$nC$€ըI C[Gic!mL}ʜͷny;"3u1u\L)!~DJDɭUO^0-h)Vucavjg^YjPa޼s0F-[8'w\cLgjŏx}MĜsPs#w,0ңN8<5Aq6x5]#g TAK D~5b+lE<3 pj"8GbpX8AV,ڮ#>oooƵ/TZ*+Ҫ̇'OGy|ltwH{L0l`~5j?݁dbyS `u95n?@I&r *ʑ3v SL1Bϙq&b\D[$6R?,4? u<TGF~E!d#Z &?НUS;`+BWhr{MgRbQYHv(j7 ]m4譣I򫲲$9P@$0樌pGÌ+Os=\aG5oL{y?Ү9$ ڝbW$GaZr rqR1Ҭr:T˂($0֩;y{K rR 'L\|ͼ8^5LD:QaBۡ/Lm}5J~leFcA/֛ M3<SLeP>,4fxCM$=ZDLWE؆wMpJ JhσȪ"-F8xXt}XT5;N^C*˰oUkJnr"ciŵf?,\ִtsIkK 9Ǩ"cۙK61X/d;h) 'ƻ8BJpӉ iX5?5]nxOD~oβ*(c\|jP6L:K>rp>$?'Q֞bWW{=i  \{֎f, T6,8\+X!r^fۅ8=kE"(g+sڴmrwIޯ$Q@\u4+}̌=*GxG&YN1R5*V VGfYjygie-֪ pIՏ,sGQNv U>q.©j/jέ\ φmBˀrzU+k9u Uj@*_ڊ~f.aciN|A'Hds#gjcb!Un i<ݣ_OHl5#dn=>#@4js&3#wڳ`̱F;}k1zu]¨`7L%aSƁ2r}*1jFI"R L GM?1'SVLɕTbݗGF/=MޥXj/h;Fi&2#o bXi#3$uz+[#'ZY.}{k[r(< S*ŏ/q:^ɇt âRF./Ck;*ոQUg!c?J͝` X#,sV.$kkO[[7r}+>>:T?fy)==ꥨgj D$r.n U$99}32!8'hAx7HtSU|ycR"yHڕ­ZyG~œrq̏F'AS"NjESo&2ҦEQ)S~ہS %Ӝd)u2H;(FW HAfZr3vV[qִmq*DŽiwj Gwd\\*K(s҈Ua+ N)n&v/,i$HpDzq$fVlgsFY5*Ι75/`~tI߼)0C)jrzS?%A1# fpU|]Z6rb 7JngH][7w,G.kCSNE O֥W*'ҵ5MlJZȒ^8{ӠY>';d\̛bO\e^E8ݎjͻr7)azf!u+?M ǖkLBi{\W%w՞'%Ifm3ci!r2d Dq@_Z! ,BԸUHçjL .GSlg.slVoT e?{Xҷ\qQs>f?-6Iۆo޿n­GUcqN^Hc*F94e˿A2śi"(z;LUwA$㠨sj7'pAU=r2ZG uiHa^. ȴvjD!ch[$q@@HXcÊo 1ݩ8+ޮ>P nbN6a @EaF9`{xU< `R'ĞjuuKfXK)u2l’N88/2y#!s*]mzV̈,dLaP#gEsϽc\3);=<brw A yϸAI,mèO':gך9B̄u*DYr*ug.J[$?yOZ ) zSlaS5By,꤮Y-ީJZy>IKJP7N* `5#b=(*4K6[5ZI $j$ L߼ەވqsAN8JXK,c{qfXT9RDr<5b!|~g$``H,Ob! ۴5cH"2{)gS'䊝PcDF88w*YjK)hM s\j𤚧>e8T|n<Ud-XL+1wJwsSBR{befw|#.Hjk@2tR԰) SSP>vԁ}RUX_6dA['OӪ l| $Pt Ts$Q=j⵵XðU! 1rK&k5c!cIp (H[ڣ vzk}f!]܌v=)bdǵ,8e` ~rZ3E)1yxqGV%ܤZxF89dslNriveri$,p\6ʽ֢y깓 ւvzsx)p;Ԗ_LSሸz {pչdU*U*6$I8r~QқmVfcEN\S yj ΖWV=U7u $jGqV-b*C-=cK 9cڴlOjsqӠ]?.NlW8֥ƁcUVPjG1Cx7E9J::XI~"DFcr K$?#9!Z[)eN?x9sBOx^BK5ɴ. qշBjH &0qޤH0oC6x< lZ"OJ`i{Q;TPO$(6IQ2"DeBeB_jG]B/ӊBsM(XRGiLK*@Sj 2O*β pp1OEg>T{∱NԱDN1YUwn$>tcbr)^[,4㓒ЅC:*n(LfNAө6zTrON"sޞsUiXf$ђķJHNJgM*8=jdGNC~tI- ΠIuK`B'ʴ]NNwG/TpoKxT=*Am< :>U.B*4p:"63P<2'?ݩ?v HbE&>e Db =3C pȮ|/`GS5]JéɌp4o$1%M^n5϶V3e;[w\arǨdPCKzJ}@Pn1 yz5 a$mv$lgnsD*%sc4،Uz;RP[8EHJthD<6:vOew )VA]S /.3V Dn}jIdbSl b1҈{Jۺ,aZ=@`KAMXf)!F{Nqֈ*Uz娉K|%6皖V^{ b^{ |Uw`zUflZ=$l $- dB(=MC&LED3Ȩ%ڬ/ȸdsRTzR Uyg%O Q31zT&F,px,]G-RHb -RHcMR[wyU0y_)UDNdPF{֎A`n>5,UN3R\Twk,aGoh־U/[PݶD59ćnnSsLi>qSa(v-9VLzqV;S0楏 T=6YBB Ȧ\hјM rEWr~B>Շ?\ 9+.M`M;"wlkidRxP  ?,z4*Hͼ*MN$`z~TQ$7ݦLt4V<~}_K$#IY;+;եo7W"I8aV,EQL U$z@NywKVyɮ&w\T /M Tަ|ª:Ӊ q8cOclm;}kv@{ԀcMXUSsE:)HaN>\$Lހԉ\9+C,jYݬ]ZiBqU@ɮDK#}MoE$|ɪ}V&F]+'Q7q*PKhj* _ɧ]1#>F.9 `3~"FKsqmivvi %XE+L=*ג8Ok,,I v8?z]j6ĸgpwS̵/¨$R>G I T}k" $T'ep $(4\ksK0(Tƛ.$B[Z}Ѹr,kwJ76r4.ֽןh%zKw&b8'ۚu} `9L ނ\];QquPaXDR\|nkA 3U{%2y (Z$5SPIT ,cnBh )ݎK3%Wcw7AREg-ͪ@#|}EV1'8\Qbhg0 6WENp`t}*FzRB7sB[1*߸2[]I$?SWDd=}͋?UMuܧAh v\.l~Q k %U?ZӳZE p3Z:mW>լ3*\aGR d>Tk IZs~XkbB&krOZ"GMtS#;F ߓjvJE԰Sd 3cfZy8 cGWt9|FUc[}RF}jxs3x*v1*yic59Nx =jY6FBHCg ,{teW l2Z{vʞ1C*n֍F p p)h+KE>Yyf\nYJIPzWog!#u0~}MRQE8^+- o vӵsNvT1P1bVPs[zXM'ߐqZrv因}ŜqVnL46@1M#@I5%?asRԔ3ghKEX54s^o _|Յ{rEnMnQER1UAHOJYp7Ny6H^ˁ9aYF*Q߷G^yȍ$!w>TL1"yԲȥ$9 VgYgHcT3J*ć!p[j- 0GF ePS#OY=jXnڴl"Dl2fn]U˗'G.c0G#ӽ.y' )5+<(>qF,L+2 U8">NSSF~qZYZ$#ft*mC qkV2#3 vETh{|.ޕRMpI7[EcyYSu% Q3N w8XF"\Y-dDC)cP$ ;M^!#N~eǧn `VF.31M2(U oR\zS1֗~0QQ)V&'VSr{[.[10烊Ú'`c`3PMzD!緽({${һ8r@l.ђAP瞂,֗eZ:M[I\>Q\Cϕ~յp$B}j&!ohFT9p2`-#‚p={Ԁp94n3A$Enp>KSk['|p«^-&@mDw'{(ȥH=^袊IWEAz3oفb0wͼ';q5KDc4'nVs *t9=G?8ɭ 1AlΫϹ,#Idw&ڰLDrwU\,?O;s֎5 )A`qQʊPi#Upa7 *,#"rS*x+}W95FVvS֪w6:RyldZJ[ v{`4c ?j9.nďGd5UWi]Zڥlgojнl0wǸ+*kU7Xð v++Tiⵇw1GZVA9_Qx$0oF_OoJԵa:J2I+x?SʹI+v>N"dwcP%# I=)-Z \#*bHI l弰 ;|19TֶL2⺍"Z5iyܜ8 c efLEvަv@ᛦi@鎢*8Jq< I<ޝj?(W5^8氵[4^>خ۷a[%QE,@r N k(y4r9~;{ yuMs4SRin:A'Q|ZR>]L7LsU3-G/4 [֯i6C\Kz YwKw P~_ukFR8P>/X}!FGy֪|#98%0\Uȑc hM*ح#0Y>mUFV(n>v`7&+`g1R\LgHdfO(1,J3ܚ[U;oW*vjb0b)~`7ݩw_?>o)sr8M(d8s=h-1p ֋q#'!\B>QZQP!\8@@RSW dzE/P;w>{Q֩}qYژ1ŐzWwDVW,9X}cMݸwx3DrZ-n 50.W05õzxI=gvl$fH*nfTI )jee=9znEdׇE 3s$UV4+ GKV>biu(q"txR?ʦӯK}pTJ8..jάz`UK^Ekhu$tZf9ދMӴ䎋WQES%Cb~lqUnVI ,qYqϜ+Q;$:$՛q1]GmO֭N#`ך`}ÿhwշ t#۸?kʆWUos6՟p&~pNU [pL#7zIeqSC?0kft]`yq:0!51R?PV?s7FL;Ҫ^\*qTޕXŲDqUH9eOONpNg N2=Fj+#%r'2yז'k';yk|c>{ԣ H`Z~J& 8ezS>Ȯk֤HBz( 0ؓY$?4FuC\8sғMbj.$us* .NXuԅyccԌۜ6?THB+z?[vy#>-,W*ƍ9w6yg8j/vinKON*T,K[+ąv@5ɎH`~U$y[0n qHHBe~'wz)%+#(9MI&g"{֎j"JXr<](` pCJ>ƌu|'nMfGv8j3M$Ҍ?0ʙj{@#껨F99wde'J wj sRZ0wܚOJ>Mǟ^jk!M,8LV%I6BcKvy8NOQL{%Wִ,Xr5\[jS3TxaL (1 zzM="3 4m[fJKa^><{t^?xs\nX®lXH[(_8zҬi`Ir㓜O :U2?2Ht 7qJ#=Lc$VAoLf9o-86$SyNxO QN5Xx G#"|a?Z}{0V`=5`=ըPFj9XߦTdkWdѸQ)tx|ؒl.*m"̈́Jte >-OBbڟs1!yk[1 NKe1XZƞmg;1X$81ƭ,+8|ҡ(cFǑ֚ɶ 0Z(ۏZZI(q+UޭZqTu;d}v-TsE35و̮b:O/f5n*(pUU+y:~1Z"f8ڈT ZBV0; ܕ5{L27ސWA`ðwb,Gԓc1%Wqϰ2j(yFOFY#ܧ՘D;^z5/ܚ'޳)Ԯ`=Hjr@Z^F^T55xNxT*sݵyy"{ Ix nr<(?col$2?Gҳ>wBJnU>oFԃ vWCҶj̛eOݬ B싦(yqҦ'#ޮiwr5j8-Su0tO5҉c#Yw0**Mj3wnosN,945,xzR3N8xF+Ɂc ؉6F 0jP<~_So}ɬw_<`sTcaOv0c(+*cݰ2ǥg3R[Vt=*k3њ\dUL`EY+{ۉn+RYnR;~J:;ܸg>?A3'*]2o&ցT$8 V7a}fk18PV19Y =A˵ƷH+-־۹juzU? 5ӝVO`ʰuA~r}Fy5GVt2Ih8 wq){}\a}?Wdw7Ru9\ Ktn#Di*Oy'VJn%;}eƞtsie>UP=Cײ.#ʕr3{ @x ujqClu+o<2է}0G>s(sYe+Ԋֹ_{;Pzf&գ"JYm8+rGi| IS$cޕܯ9cR7AO MApm5Gس˳~\UK l]jǸbzareyk'?`?Z豁λ,`cҺAJ*F:Xڒ88g)W8NfV:hQRڒsیUW~ k A9w2tFI/d(1 VSǙ/brOҙFgS6~= `w~U?{赽,=A,&ʐrf_sg"]]$!Udb Curp<Օzh?tDZrs~hRɘVޘZSj; Ւp ͙呏~\9Gc\y1M! #GCH#riDɵִa[$}pEupYXw5Fmlz _H|;YG5M(YzǙ!Ube+l jȰ w qoYjsylJHd dG#FĩÞ+-Rn  pXSIHG9&]ɵ6$uNHlj^ꥼEf +&զG`?:ε2G M( mQM6#@٩y܌nkY%i _F m,>j96C(vڳ1Fceo S Ƭ˸jXrKtF< g*@yY`}qRLcv%o1ㅧǂ <*<@QVclPO?l8xXx`Z0LaAаK^|[Fq؁WԏYSnm"{hu\YСuk|JU6{JՐV~ Kw6bF-*YjV!b6J ,d\8MjS[hQZJ@8X׶42Avkաk8aV&krTvx4١d8aRY0.c8~9Q]LL HXڢlڧaJJ2. >2E)8 Ӯ6Rc#i#$UKUV_Ƨdd\cC͊F덣[ZTHp@րZ u r1Y9]y,pGrd9p@k(.r{Uh|YջX hۑZ47 toS2?wAj;2w;~W}NA(/8l\zUZw\V^u0KlV|Vʨ4-de Hn ) ʂ^_APm9;d !L\;B=RKUglNRF[l0i v n⣅p)PAN/!;HU!b}iF͟>Z#>XmJ"Xb(X۷yVmcZh=koR֖1\S})VFz6zvמ-nƗK1^=i0e3WkbW{H-Uk+7|| zo0F0VU9P߳dSRp4lFPj36Ys!UBIUPd LFU2m)]8n{z{u{V-1e+v1g* }#fx.Y9>6 `#^6}j}jbӅSPsPD!\%P0j6H#k{ScҧrCS㚿$v*x"bZI6[[>>zMe!Z;e=ҝǒ x2yyJa=Ϙyb8 Soۊe&nzbSx5%ڃ5%&B $aQkkM>g*kEv\N׉w^M/~Ƴt̛;k@b|vؤbɿ՚̽ Ҝְ"yx#u:Dd؊n:wM1UGSO,6}kX|>~=f|,9":[ yP`OǍ^dq/ ?Yh *U-ULd0 EJ#_2%HF@ vI 63p f˩HV1*'bwΓ{ʥ;MQpE,sH\֥ ɑFsVS$㎍cioi?4j/ʵOZZZ)))5M|Tw/UYF{ ̳G'ld,Xv8Fi08nV`rGQLAa*i$ VL@/R*3Ԋ},1l9LzeFۈZ[i(7oj{}3ҨNJ$d*\»2< ؾo7*!#{ҩ p 5SӨc Z]L\ѿh8>*yC|fvcצjś]žȩ- ^_*!U/XJD}G9Պۂ;+'*=XHќjxG~b&"✄чOlgL?s#rpUW$,l?JP>+*䭥ۨX>7˓rɛ"=RmQ֕`[gQV_[cv mJ7|/N'Fp`] cZ7z^Rdڊ3 d~ud9*tdf љ0倫1K8u=;WDxR80:c)i(dsKUUN\4X GAcgιvN 7vUX$Yp2=;q38V4 *Ɯv;wVF`ʵcTVlYU.8I/zs!Vc+]Ɲ*'ٜG4˔H))Gp:/B[<2.9Orwׯ~jXrGS\)r0yV25ji3~vWӚ7;iINт "Jza-$5{I\O szrp52ISʚӎ!ek}Wo,퓐y_&e|T|@ # ~k)Znxmҝ n~Z~mۍǭ\=9V`t9W`ۚG2vsY໮8VOx+;s8[cdoTu ;TRyE|߼>y$n.RҬ"f,F*E!.Y丅okmI<,m DG^hyf1'2dҬk+HVNdcW$[~XNv-jlYj ssID%qޛF8ޅ g7n=ji `)l?,psUekƌ)bO2*ho(_'ʡL63r\犞!媂9#jY)O,GkJyh$hݨko8 N*ĀXڙeG .6!9"J(@E?7:BV+T`Ou$ @U %Okmm(JuiRAny#5;!v3Yr.HcWF{P9.q\i@䱮uэuc]6鰌 ֻ]?pz.+ӳp 3P8p`6Itpcdk 4c(#֠VXm!̀`C6Dc4Wrj(Tg$Tqޟ<^bSҧϏr;=*KS!0UlH; >X`ud$%҆ ` (eR @0jQUT>Xˈz"6}1VMČGS40Q =ֳIB>**05<Ӣ&؁ ÒGJ=؆ ૲nih!"ʥyYp jZy@FO]s~.NMZboVf'~1O8=+N>;V|o*Nsc޹x{{k<(%kYsO´^x-'jR Ȫ4sL |SfFvS9jn1>lӥ)#&RH%S0pHXnF5gP"@H?1h3S\H]Tt'Z:Ƅ_JVQsR1r8ALmզuc620AJ\c? =pF\wuӮ%89Uluy¶?c< ZP}ZB>1֞,C @1L-ԏL~5 mҦf-"8#J|x9?*s8QF[;? e=21MڳV)&O¾kddą+Nr4"G*Rϵ#1U,mF0:c5 ^)SP&HÊ5' rWԽҦ1;@ fOFP^6{MdZ60ow|λ5b4Tžy$P=jŜkz *+DBҮdA;B<ՋR2TMnU1q-ӢA|q+:/4vқiaTpxreOI<`jeG)>?J I QWSE55itR. x+"[4ol3!S#3z E*ұ>,(FI r(W;樬Tu#ۻuI }|[-AEh[F6L`sHsVȨL {dF"0T66ÀU[LPہ~:I}QU3vnTi0'PnvǭKn1:`d|g*HHˌ˜wIr1ۯ(̊3΍e%:E@PƮ̈8;*,8,,1&m" wc ;Wf*N*O9 +~L3V;GLڵ8{RO `UsQ]̰@Ǩ U ӧkglF͞ri΂x߿sSKXG^+(CyQmFfصQEP~fmmwQO,EhyLl$xU։h!skjСPgC>U#' U[q;zҫ8b:#6CsD0h';v-|j#/߱CSDT6m 2 ^U j2JP>EQԤyD;lGATq9H8橡*f)ڨ&+9#uk1`f95/֝ҳr$|ֹrϻX?XZɖu*f(['gnlgA#s FkN5Rb3洮m`ryeY9 d Ҩ8),`'28 Y *J#c{UnRF7NUR`Iӡ[w`qZtk0^{GV*n·XR%\Sd2  'urITdzB7(i~} h[*F0?,U5N\<~ussIzj. *Ω3\ݜsUkkZD`2>b2Gz݆/팏sZGZ$x=).1U]QT= /[̀\38?J;8?J9ԞhG&xl`wt˅F d9;0sQۆ,4A%Qxm (sF$ sW.y=1ڵc8$pEh4\J&X|NMa7Z0ygq]J AE3Ep-ȉqS!qpS\ɲG^p+J"+u)2:+mTpqlE?*|YVn0NcZg'+7[nTLK\椯ۘMb߃q=122ͷ'Co(_5֩bB2G1ww? ZK/uJePI'cnMqۉf?xgbOSNO*;zУՋ U N~y[1ǭk\`7?3rj 9vUc8G=m-l,ߒ;բ[#ǜd=@Ub̊P̐CB vOz|Xw Dʞ=kDVwajhФdϵ^cW->3a~x=ʴIS5p SHr iZBcT? o1T'4B}Ә5# R=!R81iUy)G(<:њ-P@#U8G{'O~Զ$u!͹TVfywNrỌ޵4u>\y=*o_j}p ZUݨ9+> qj 1U 3:C8UUw֣F30 6pҤQ9VvNO\VO=qW-m5˞zf`qqU˸[w*l/j{;{~$rs)BѮ{ae3ޢ&ܫ>i8z{Q^\I~]$e21T̷S9)& jƧpvQň,Gn)n;$u"Yfo#lr>)Zڼ1K,ӷj 馐8%NxI \ [2:staRNOB!\p~'?P+0BAV## !"thƚD).axDyk6[vQw0=bOqRn,)i $cj:kD|Aڴt&weL=y>_@52;E1P"+Pz#@OSMwL㡤. ڍ`R q麋t,a_֋x٘9RL'\OrnjI Xǹ*[96ñB=m:eW'p2䥸B8\KxPJIMׄ,:"(ƠI|If`8F=j2*HE;#`:.G$;bGA"pqtqQ [@{' v#57 zoW-&;',/_zڳ8 ofПy gj2~,c+TzӮ\E / Sɶ8̅@|GF*>ɧFcZd`?Zn@u?#K}9UZߨ|!TUt/vTqg& ;زCֲ5bJtOֳy޽1φl꾜]TΣQ,1Ys@B;ZUzhb>C"py!9~K.Y ֆIQcq@֑OӲv pxSQcS I84a2+Åtݖ;C  S;,v|p-p$G_+`A TR8!gqȢ݇$#h=>EDاZ4'Tdwo O^#YǧXgB:SmWv &h*p}9Vi7p@f[lH~L;KHSJһtrjϛuZbv9,EdM2:b ^DV=5@qMk #9i&?qO6M {hL,\Lӿ;N4BK>mcV 8_jc7<[wyPw٢sGLvf Y"zSScOJڭ֨*OZZKŁT#7 \B1>F1N1O#b"A##5 ra`ݸk-dgYIOihAVt>=͒~9Hn*+m]I; PHmϥ&'Nl~Ic,J~EM>1's%üyTwwRN {R*=VTHCx 4ECv h[\579=<Vo-#E'@sW/㾷JpOwlQ~5,hFQ*hXbXaT`{Ԩ5SiT*;#SefMSE,O/n S˥/UM!m+&)92# I ʣ f~*[szس*n Vœуi< kW#4ƍ&[£]>[pAN.g1Ck1$-"x6ϑ?'mbu~Uu+_.m[#eO\f7R*EI,Ţ0ϭh6,5yFPոa[h<[vVia.ycZgT1j9n[ kJj vQevqƑnddÓV#4z[[>w|p(̙I V́Y0;́Vd-*x–BFO>@cfGv>Y]@^3Q]?JĐ* UaKg;$VkBO"GliLjmX ųPi$^2mtnFyJعT9~ޕ;R~j[쮱oTP m\~^PPvyH۴73+J8+2)wFvm ڣ @=*F%8Ԓ:7aYIJEf27`qucҭjsZ۴*3"*q/̪8ȭ9exᄠQ*NсǡSQ'-w "u#'Yzu?UZONqYH?{ F3]6$ ̽$!*trZrƺ 8j >cK݋K){sojϑ0L`u<\c =[ F 'Kq||+z[i5o]/5pi}BƼ.{տ~[!Sj*YۄA /,oU>՗w}l6#o v#Eϵf;I tOZL/Q\,s= -9-4k ( 5s[j㠢)h((޺hxݓLU bALx1UuTnO]\l)# wfvr*֛ipTD{V46yI|S26db<{^!>đPri ipȠ/]{6 _gHFP?>s̬ YP@ _RK)|K;sN˝`@H~ RRϹanyggdjKy.';Q$2ns2RҙJ[5}#\_e {~S"dERMh5J DB8WnTU[r!:{p'IU;LYDn8=jtaRu#ޤ7NAfJ/gҔ1IQx{@$c>9sPj*h]ml,sV)1jޒ1[c8j@Uðk{w'd|u\ޫtnpqbR[Fpiђ1Up$H~($0GQGkPGzٺR]IW ޵" u$cekl6\GEo.|k D#y% yq+ßƲ4(8VlJd<rOWxJu w=ө6zTkrU8 WSAdzMd;@V*&]@002)iz ZJ(()hP{YK zծRi<~Udv|\pOorCsҺ;)rrd m![ Vސm$[?J/ ,W wz=kQTYX~6PH}o zfVh``psnBym<8a+-fy_KTPC{SFDuOWHcJ;eγ&3sP$fg5Em^$zա}@H,3g9{f~18}*xDRTЉdu$eޤln&r59H9 zTƹ9cޭ y?تs RA1r2x?d[əe taǯj]^38cIrPMXs9)F${[vJc ͸1k%%e7ʝI"Utkq=Į~@~QXV*,<{6n,xǿ5UrmUc 2k+6 wI -R28nqV PjbKIޙwExfu>MnKoQQa==*j(S PVԜG#0 qȭr{[uKEQEQKEQEQEQEQXpp 8,ܷHk3rAXӑ\0P6ZZEYG؊'3}jweZ9v/\/4 pcoZ'+S,nc>VVYCAʳdbY~f"d&R}I9,h,;rirgY2k.F$#?+6Zkid; ҥ{ےc;bAԷ 3! }9M>^LcڪSĘ?Jkd"07SlEHWyw/Z8yƺ h$3݆NGsZϴ0\K/;qVvN0_/'֪Ci,c@6ڪɫIdcUj$ԥ)=g$1ִATJQڳ4a,30m3qTm[t+ ߎsH e׊׉vD64*|T7 M0*(b0ڙl2OAQꛑ#} GV kU1Aޥ Gk(AީLv1OY*8sVR)ǧiCwaNz׆-B7ZqS3YxPP2ʳI|cih(x$.2M]fa;ddӹ3eA uKRpئM4TAGßAV:*Sxl'~[@ ?R!18sR@!j+& lW\B$`=#EۅLP=Q#LO!wbkƬі,${U>P1xS\*6Z,J \[0xpTux4*܀Fy<FޣQ&;d hˮt{TӮmMai z?iVlt!?i]w9S;WCYgLAyV}іQs[ZXpSr\{%# PۨT<*;hB0=3 Vih(Z((((*yb2+`#XP*ݝz74lv*Pc,9T֧u)L򉇘T qޝos9ctǥZ_1U銱iqb;g7(U]VV9~Px~[OEJB|]{N;al}yWHB%c(Z.c]48`zzv2OjͺnUL*yo2W`V' XwֲH=OJvJ +S1b?v>cOdb1jwY E}jSG$*V#E#PpMOhAg#Dc3ܐ}j`:BgCdSvI~,~9 wU[kF8S!vc8q7'~s#90A1j`  tIbi*1 9tgXmq%QA Ĉ0FM"8Q-KN(((((Z(q7#Mb6}n\qץfv狄\G*aGe܍c5p 9#8'ȢP@'R1sQL ϴ)e ZL .=ZL"DP7 )n"Tݜ㰬;I.4y&-mtEk՘eVQ\[ [hbخ`]jw֢iT骤r Hg-_ZRYBXGyRsJ&R9U9LxȪX*iud'ٿJ!9j YyU=CS,{d؁YG}UX4륙nFi%ȫR 6*i| Un>f5ycW~(---QEQEQERQE-QEQE69%\⠎eJ0 nu{Q>8+I.f>y$q؎,M`cx͞_*3G,AnƱ 2.XYA {S 56Q)@Zڭӭ!Ο.}}kOR`157> J6U;yDr.yYxаcIa?BojH;F ڭqj+}*=D!}_=QބUNѼҷ3i vǷ>fc6yJV=hH<6ǎ$-\'YHPoyRS袊(()h((((x ³,4X QU.ml7heXG=MaIp<0OSXNXTiy?I1VjmWjA&KZxnv ̤F@U# Z61JPG<.ss5cy%RݮnRnӐUmg{|ӷi뭕-q׊sۨEQEQEQEQEQEQEg7&ڟuOꗦNW=}?(SN*Up2•f߽nl|V [.̗m[6Vwm t!f;~N; uJPYvf˥Xi$A<*}K8z|@G9++B``nE˄b[3n+B]cu~L3*D1_±۠#)u!*sNW+i>9 22OhH%yEtLuox\>i-iw9bJҼ?VGIfv4Fq#2RhevgCD*sudT:5]T=y=5}zT?jH9Krzn(c9'\jOjsq_7vr:."}bZFR%a7fo(cwN=KWv8hrj-K)*ʠdޗG<*s4d[%rvYWrkwi֍QEREQEQEQERE%Vb+ILeByziڤL(ݺ ic4:Iy2H;V@EڦF 5ڧrE2W1#O*K|i&5$gNO*j#sS]pKJųbIs$g5*` AwЌa a^20A%c}*͑#OAJSܧr(؍}gTR d8zfHv~qWCuYQ [>~Vi3mN'1¶,o'{eT{;fO9wcu?3ZQDfD6Ӱg=YPv-d)_&_:T3pnQ>f2 ]Gb0 Cr&ӑȨLjSϥ@tu Xcq~9*` ֶkGd\m?l2]zt5t޶r9n2{ vj iAFrET`<ꇚĹv_Aۺ\cwoZ]}=k:G 럐d^դU72}sZeF ջX|1=K-сHlgzfXGVc J#AeӌU]J_1i''pj(,1^3qSi3:MnyBDpNʎzg9 (+rRxHVqڴQ9\GY:rdSiQE-QEQEQEQEQEQX,pY\{36rq*2@f Ŵ 2[WMiѭ |7?tV6H\vWr%F(T 9#`vxG9HH483 1K*Q<(\)1\rIY8byrPC9>TAsЊBpݸP(F~*t&@aU=u"F2G.SKX*Wvፔ2 :ZHeF Gj:(jXaߵr#R$#= f*y7t@F?1 8{Un׏#F n-b' 5o^k;P2Oez\\n7pU/rդFkt8V ֓dį~rTjdƧ w9^Q:0dr$&8gu+ye#9ϵUӧHbGja+-!Z;w y] eYs[r#*Z)h)h(Z(Z(<\)\iO͍hhf@qц~ڙ8<֙b)1RtO)?0`Gu8 Duk#ۊIzCY>5[Kk;q16'AY_gj ?ިQ5Mɚd4s<0mns@94g#MkhVbqߊhFcjZi 05/c 1T]DʶO/49)*Q7C'9 PΊOp( eKg#qLi|6CI=ǵ!pXڪE2[>J1 aA$}j]tW1qw*q!>pAnN[V5cM,3[0S-j単O˞իe/=O~bxǯAO4H^ESѣW|ڛodd,.7|S"o9`t5! q{Fq8kfY175`FGR1dREQEQIEQEQEQEd2|ڸeCո,|*žO]>4w&=!6X QUuA":åe¨kM,g0i+Ȥai&S>* @L5gNd-ҹ>*$r8#Rǔ/JҦ U8LlWp^):1,&pv&j1c#}MKv뀼j查s$;g`P%^n8Ojׂ_8 ЍA:S#T8b)8\96v=USz6i_uxNM7R@7&+<|ɪ&Ü}+>ՄV[>©]5ДۘYPpeaS2(ɟa*KK*8f9ZU  ӭKR'$`@^u$dc*PZϒO=6Q Ȅ>ő+K乒D#+IKa zr+efWHޏRԔ(((((((,!qֹG=+N (aaec]=yV'Ӫz(/2%y^K5ejIkۿs~N-(d'a|؏Cҧ jMQ6L`+`{$.;S[mn2־'O>^t嗧zG|ڡH##5B==i/IvG~jBRĀ#d)2n#&EnX9=NG5cHҪN#0fٵz*WVR㿭Kqc2zjYmRAAUR>X:bD7"pH=3t'十dVSF$+i$;:۳7"cQFNWFA^dq3jht$Y[;[0!M2sճ9F=3=vf܆ VMT:d_ЫK"FQYI^ïRO,3W4FϘ^F!=ihL}LҮ*.9=+wiօQIEQE-QEQEQEQEvvw!ߡ">?һA֑1EPzP~T$O"P8>V9 a#u081*sl<5z2ZܡY$kj/FԁV(هFJ-}ҬXl1WW?a\>kHi񂿍22C ؤ1[ĸnV[ƿ]G- ҚMC0WR(F廳u+J(a{x.zgj7.zIFyV C 梸 nvi<TY:&RXӶ;YD@gsQ@}>ŒVE27 1HP4p w8հd$F*vVi-2ZQ"j,!]ŰB nmޕ#V,! t.YG͚()ʃaMs;@tmgAFH³2_a< s3`r9m) %---RQE-QEQEQIEQYeھpk 3*rrE >ǥu' JJJ(i OCzθm\ H30]Ȅ`EsyW,=LsjyTm$0 $U=<f#I1Q1]]Tij'.kJ.I;XOZ%LL̿*.) "WkPq^!)q*dQxWS-T:˔[\KZ`Xbi1$A*ng'ޫ_٤ǭG:9 ?N {ԓQڮOn#USXpK .vM>I0 `d}0siή Sr,.pVr"U0HqI?J։o 7PyYy2/q*V[ZcO! 'ӊx&NI5@:C3XbE1fSsqU♞uGC66@zd#8K$#|Ú؈ivd{ U`D(W9IAc@31$drG`dLE3=fEQIEQEQEQEQIEp 1 qHT9Jf]Z-5G[YeOrjĒ-[|?*yH3Q5w%֬RA,G`*5;h!EBڃ21'ϟ_і4 )u֡7ەEةܨLjklC6?OG},~ z }@5Z+dF,N(]IqQH,[zj[LӬ { k+L!oҴ-H#zz,^.޵mg eyfdu(ZMxY2l|(*$u*lQvuZƠ&Gn7L.Jؽ ;RԧPn|wm_ DmEp;*8(h00m@QI*,:7!)1$IC֛: "taۊWrFI0wA5\$p*B(skgEAo#I{֞s} ?Ͽt mN˃Wp>Np[aڠP1AAe-ѷrŜGii .٘.Z2bs3aV$<˜] ʷ85o$=* қ)mHjY78I0 \ @XScq}J0z0%x#$ozV;aP\ ;yֳiaWTnR%Sjmcp桌̐9c EG*vkq&vζ _8Mg%@;֔Vmh隞3隚ˇL*@X28k2B P0qҨ_9 8\Ê yT'd#=uqof'qZz|Dq,KڮMI*>vR[kS{֏֊(((((((D0+Aa \պf@Mo)@D:qӽUH8 98^uL]Wj*h)\JG֫m0pDʼnO!$UgI&'Wi@ҾI*{xɥ+GmOP=+riFFdcjֶacU!i:R5,:.Mީ.W i49烜V}#us9QSiziR.'?J#8Zuǐ{L6ڿY@) JK #5Bq09Bq4>sC']8zU Fmg]*Nyrp-M̃P.UX=m ị#0X1kV!bnj;I8R4$޹.V8Tֲ..p&qQDb ?%`0O҈QbݸOOz̰yj2 _ǾiJ" ܽ;M*HIUղ̼«$ӭ`y.c T:Fi/IA4"nD [;9 PhĖ-Mg,7#Qv5nq5|N86p1T7I?zj24vcf8Ȩnݖᘊ8ަ#Fޤ 0\j8RpUIWPb3\WCj ϙ;>ݣf,͍ߘd.9凌+`>aՃNm29~!@!8rƈbw.Xj-pi9bOsO҆-W>!^p9X!sWXֵY֯8 T7W$͆`xv*9W=}jɼx9Pɂ+* [4pH~5b8gXr)WSep-K; R ЏU&(mqV^h4ghQ=BJ0@cm-,73zT&E)n2OV`cxU#F&48Ry?P"ԷV f- :H3V/]-T dhc/T(giOn1ν`yNZMzUeȭ)@?1UgrI ~8/FHܤXҁDRvb̊^wR6F~n#R0kᤔD1?(cK#54_jkgOmlv1?ʶ,0q5n["7$J1 VP;ĎAǽYH]>Pٓo+c6#i$U'ڸ_nޕn[GJ$Q+<˷tw>Bk~fo-sk:ystIo,7240sM{i2:Eφ%nZ;Olr*f6蒱m##sK')-0PkY~=[7[r}G}n݌@[aܘ=k^p(ݰ_Ʋ5x[` 7m;4FۍP1g>`+sQf5GRjƜMpNOozƣKսp-l|uU $;&#jĭ-cOjYd%ZpKTh`GҴlq†O8 e,;d|ֳ$q kh`>TMl2P[z[[Dx νfd1\};BNM-iy]GQS˔H6}z}1'kPeq;ֈ~u?Ɩ((J(((+8]1'rŖj5y)O5G\2p^D+|o˥EOj O r1֠" b)xxW !}+J!9A":[2mtjͥؕ6J5=ȑݗlxʥoX2E2/rOdesn #܂֢I3$?(5ZD~@PHb}џjf֚DP&44R3Yڴ< ?Z|q Q$sT/k8 :l#T6GkGد_ǰJԆ=>S9cJcYEVB7z U tlFoJh&F1*ռՋ+[Mtfh ^IF%F   5A?E jS {[yH Gak9K|:mm=_T4d=;uD%;yUh2閈&voMZ1mI\}Mkr*Gj_QT.S3tt,2GCzU0y׽XUdDZS HFcP+EpNw+nqLh3|hfw(8EU=gwvP~U ]^wMFvj|TxxHF;czemr۳b8*'idR:46o np) 3JڂFڛ"3ү!ɫP&T%%QEQE-QEQEQEW ?뢮()(((((((()(((((()((J()h(((Z(((((()h(((((((((J((((((((((J((()(<~4j)h(()h(()hJ(((((((((J()h()hZ(((J((ZZ))((((((((J((((J(()h)hZ(((()h(((J(((((((J((Z(())h)hZ(J)h(((((Z(((((()h(((Z(Z(()((((((Z))(((()h(()((J((()((((((Z((((()((J(J(JZ)i((J(J(()h(((((((J((()h(Z()h(JJZZ)((((((((((((((((((Z((J(((((((((((((((()((J(((()())h()()((J()h(((())h((J(()sIE%-QKEQEQEQEQEQEQEQEQKEQKEi:EQEQEQEQEQEQIEQKEQEQKEQKE-%QEQE%QEQERQE-QEQEQEQEQEQIEQEQEQKEQKIE%QERE%QIEQIEQEQEQEREQEQEQEQEQEQEQE-RQEQEQEQERE%%QEQE-RQEQE%QEQE-QEVVj UV‡8nnflo8qŖɖn?YSj![?3kʙ'_³徒SmXEt7]Gj ~<JѶ<3Vj(((((((((Z((()hZZ)(((Z?ZJo/5@>ÅFSTwܪ>{eq{m򊽇[UNkcMHjC޵fRQE-RQE-QEQEQEQEQEQEQIE-RQEQEQE%RE%REQEQEQKEgF9Z(Z(()h(Z(((J()h(L|٢Z()((LrNzE-QEQKEQEQIEQIEQEQKEQEQEQERQE-QEQEQERQE()h((J(()h((((((Z((():QE-QEJ $dI ZLzԔQE%QEQEQEQEQIEQIEQEQEQEQEQEQEQEQEQEQEQIEQEz()h)h)h((((h(((((((((()(((()((((3ERQE-QEQEQEQEQEQE-tEQEQEQERE%QEQEQKE()(((c1KE-RQEQEQEQEQEQIE--QEQEQERE%QKE-%QEQEQEQEQE-%QE-RQEQEQEQEQEQKEQKEQEQEQEQERE%QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE-RQE-RQE-RQEQEQEQEQEQIEQEQEQEQIEQE-RQERQE-QIEQEQEQEQEQKEQEQEQEQEQHsQϵQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE-%-%-%QEREQIEQEQEQEQEQEQEQKEQEQKKEQEQEQEPzQE zhih(((()(+ ?뢮F}(~4ޖ(J)(rӖu:((((((((((((((((棨h((()NZrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2袊(()()VޝNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEʎ(J(J))iVޝNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEeGE%REQIEQER9iNS(((((((((((((((eGQEQKEQKIE%RJޜuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQQu--QEQE%RE%-*ӗ*SQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2袊)ih((Zrҭ:N((((((((((((((()GE-QE%%QIEJW:N((((((((((((((()GEQKKE%RQE-NZrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2袊()h()VSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2QIEQEQEQERҭ9iVNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEeGE%RE%QEQER9{ӖNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEʎ((()?:3hNZr/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES*:Z(Z):J(׌(z/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES*:eRQEQE!((wz1F)Rҭ9iW:N((((((((((((((()GE-RQEQEQER*/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQETuGKEQKEZ(r/zrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEGQtQERQEQKEQNQ֜ޝNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEʎ()h(JJ)ޜޝNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEʎZ(((U/zrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2袖)((()VNS(((((((((((((((eGQEQKEQEQER9{ӗ:N((((((((((((((()GEQKEQERE%N^NS(((((((((((((((eGQEQEQEQEQE*ӗ9{ө((((((((((((((((9#ޣh)h((iW9{ө((((((((((((((((QtRE%QEQEQEN^SQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2QEQKE%%QEQIJN^u:((((((((((((((((TuQEQEQEQERzr/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES*:Z()()()VޝNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE ?諢(((()()()(()h)h)h((J()h)h)h(Z((((Z((((()((J((((((()((J((()((()h(()()(()h()((J(J()h)h(((J(J()h(Z(Z(Z()(((Z(();QEQEREQIEQEQKEQE%QEQE-QEQEQEQEQEREQERQEQEQEQEQEREQIEQHQEQEQEQEQEQKEQERE%REQIEQE-RQEQEREQIEQIEQEQEREQIEQE-RQEQKEQEQEQEQEQERE%RE%RE%QEQIEQE-QEQKEQKEQKEQE%RE%REQERQE-RQE-QEQKEQKEQEQIEQEQKEQEQEQEQEREQEQEQEREQEQEQE%REQIEQEQKEQE%QEQEQEQERE%QEQERQE-RQE-RQEQKEQEQERQEQEREQIEQE-QEQKEQEQEQIEQIEQIEQEQEQEQIEQE-RQEQEREQIEQE-RQEQEQEQEQEQEQE-RQEQKEQE%RE%RE%RE%REQERQEQKEQE%REQIEQIEzJ-RQE-QEQEQEQEQEQEQIEQIEQERQEQEREQERQEQKEQE%QEQEQKEQERE%RE%RE%REQIEQIEQIEQE-QEQEQERQE-RQE-RQEQKEQERE%REQEQEQE%QEQEQEQEQEQEQKEQKEQEQEQEQEQERQE-QEQEQEQEQE%REQIEw()()(()h)h((((((J((Z()((J(((()h)h(Z(Z(Z((()h(Z((((((()()((J(((Z(Z(()(((Z(QKEQE%REQIEQE-RQE-RQEQEQEQIEQE-RQE-RQE-QEQKEQKEQKEQEQEQEQEREQERQEQEREQERQEQEQEQE-RQE-RQE-QEQE%QEQE-RQE-QEQE%RE%REQERQEQEQEQERQE-RQE-QEQEQEQEQKEQERE%RE%REQERQEQEQEQE-RQE-RQE-QEQKEQEQIEQE-R}(()h((()h(((()((J()h)h(()()()((((Z((((Z()()()((J((Z((J(J(EAcRQEQEREQEQEQKEQEQIEQEQEQKEQKEQE%RE%REQIEQEQEREQERQE-RQEQKEQE%QEQEQEQERE%QEQE-QEQKEQEQEQE-QEQE%QEQIEQE-QEQKE((J()h((((Z()(()h(Z(((J(J((Z((֊)h)h)h(Z(((((()h(Z((()h()((J(J()h(((((((((J(J()h4QEQEQEQEQEQEQEQEQIEQEQEQEQE-RQEQ_ ?뢮(((((((Z((((Z()((J(((Z(((J(((()h((((((J(J(J((((;QEQE-RQEQERE%QEQIEQIEQEQEQEQEQEREQERQE-QEQKEQEQEQEQEQEQEQEQEQE-RQEQEQEQEQEREQIEQE-RQEQERE%REQEQEQE%QEQE-QEQE%RE%RE%QEQEQEREQERQEQEQEQEQKEQERE%RE%REQIEQIEQEQKEQE%QEQE-RQE-QEQE%QEQEQEQEQE-RQE-RQE-RQEQERE%REQEQEQEQEQEQEv)h()(()h(((J()h(((J((Z()(((()()((((()h((((Z()((((((Z()(((()((J(J(()h)h(((J(J((((J(((()h()((ERE%REQIEQE-RQEQEQEQIEQEQEREQERQEQKEQKEQEQIEQE-RQEQKEQEQEQIEQE-RQEQEQEQEQKEQERE%REQIEQEQEQEQIEQERQEQEQEQEQEQEQIEQEQEQEQIEQERQEQEQEQEZ(()(()h(Z(((J((Z(EQEQE-QEQEQEQEQKEQEQEQIEQIEQERQEQEQEQEQEQEQEQKEQEQEQEQEQEQE-RQEQEQEQEQERE%REQIEQE-RQEQEQEQEQEQEQERQEQKEQEQIEQIEQE-RQE-RQE-RQEQERE%QEQEQEQEQEQEQEQIEQERQE-RQEQEQEQIEQEQKEQERE%QEQEQKEQKEQEQEQEQKEQEQIEQERQEQEQEQEQEQEQEQEQEQIEQEQERE%RE%QEQEQKEQEQEQEQERE%QEQIEQE-QEQKEQEQEQIEQEQEQEQEQKEQKEQEQERQEQERE%QEQEQKEQERE%REQIEQE-QEQEQEQIEQEQKEQERE%QEQEQKEQEQEQEQEQEQEQEQEQEQKEQEQEQEQEQEQIEQE-QEQEQIEQE-RQE-RQEQKEQE%RE%QEQEQEQEQERQEQERE%RE%QEQEQEQEQEQEQEQEQKEQEQEQH(QEQEQIEQEQEQEQEQEQEQE-RQEQERE%QEQEQKEQEQIEQEQEQEQEQEQEQEQEQEQEQEREQIEZ(Z((()h((((((((((()()(((((((((((EQEQIEQE-RQE-RQEQERE%QEQE-RQE-RQEQEQEQEQEQEQEQEQEQEQKEQE%QEQEQEQEQE-RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE-QEQE%QEQEQEQEQEQEQEQE-QEQEQEQEQKEQEQEQEQEQEQEQKEQEQIEQIEQEQEQEQE-R  ?뢮(((((((((()h((((((J(((EQEQEQEQEQEQEQEQE-RQEQEQEQEQEQEQEQEQEQEQKEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQKEQKEQEQEQIEQEQERE%RE%QEQEQG((((()h((((((((()h(((J((()((((QE-J((((((((((((Z(()((J(((((Z((J(((((Z((QEQE~QEQEQEQEQEQEQEQEQEQERE%RE%RE%QEQEQEQEPiIό^\FԴQEQEQKEQEQEQEQEQEQEQEQEQE-RQEQEQEQEQEQEQEQC}2p I)ap0M->EQEQERE%QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE/cޑ* %X(((((EQEQIEQEQEQEQIEQEQERE%QEQEQEQEQEQEQEQEQKEQEQEQE-RQEQKEQEREQIEQEQEQEQEQEQEQEQEQEQEQKEQEQEQIEQEQEQEQEQKEQE%QEQEQEQEQEQEQEQEQEUs*%!ޒGX. ?ZZ}-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV2_-yT9cXכ7+/Yd$9DjmVQERE%QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ@AETw'%EajVMlNIǽe^A9\դZ(((((((((J((Z())((((((hF`G*ҩv<1yc,ҫ_D,eYIjY(((((((((QEQKEQKEQEQEQEQEQEQEQEPx GA{"cj)agSKEQEQEQKEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQ`zQQPކ65G[_o%HoU]MK&STzRQE-QEQKEQKEQEQEQE-QEQEQEQEQKEQEQEQEQEQEQEQJ==F⒖Z(9=)sJ((((((((((()h(((((()h^QEREQIEQE-RQE-RQEQEQEQEQEQEQIEQEQEQEQEQERE%QE }h9֒Z((((((((((((((((((((iJ GgT/ul౪7{NȰOvjZ()h(()((((((Z(Z(((((()>ҩW>LAdʫMEPВzS@enZ((((((((J(((((((((()h4}:zUiX}㩬]M%y(@SsY^pPʏ<w 68 ;NAگU[ԴQIEQIEQEQEQEQEQEQEQEQEQEQEQEQEQEQKEQKEQE'^(ECydTZ{nF_We2rEEt]G]ZbVfJdiE-o8m_Jϰmpz0sIcrI&q ۶D5vܢ(Z(((((((Z((((Z((((((PE*jCJG W(+W?2'" 4\()((((((((((((((((((bO*WLTwO[;z \$X=jIq"c:yF]mt4QIEQE-RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQP^1Vn/dvTuy6Zj2=IFx_ZTC!>Jvv2K%?Vm̪@*tEQEQEQKEQEQEQEQEQEQIEQEQEQEQEQEQEQEQEQIIU5+X^"lg6f?JB y¸ZfFr:U!f# VV0e98V +'[F1A ?]w1[% ޷QHN;z\F =[;Bo@T G4!i,2 Ԏh`UX+BsALlEMbwe@츫Bf2]դ̵slTM_‘*քC>?X?x[Ec.H\zSJ@|r> s!9#ZκˈЌOJsn ښmnOkxQH*I%\ &QuŽ󨜺( q֣bv>R_?샊A2qqB͞:VV][kl2k;Q,Ӵ5.[Hr:t%.rERdb@RJA$o- 󑸷5%#qnilLY'? -1'Klg8\Z7i[7B@*J TV.x^8dۧQե'N+ 9)aן)`=MSg5c&SCp *y v'SHcBjXI?J29Ih~uY6̜U^5pmIqV6wEL3=jf|y*!f_-JVU."d\JV`XaE#կbMQol @o7LwmQ3;^ب󤑁v̑#*IrH5e`g%U'M+OAQA9pyQC?٤'ZxPb::gw;)\vS҉| Yږn.-Xr|fYg8<)d2H0P1D^nr; 3Yz†0xsToR}uwA)p_1AԀr=CӁ$zWa\U?qV 7YO={SrXI0069jPȃny[0nSKq\`/{΋8ޫ4Uʐ909F*f}ihV/GOv9~ [rqT4*IMZao9s*O=㊊Cq*'njY<nwl*r*qڳǃSII,IV4f#hl\㚚͉7`~U=s*Ώ }z`ۼӴ ; Gimn-U%dde bzJѺCQm%J0W̙) v5y!l1SGr~uabW 1m̜Iq9⬒ǒ0=fI" G~o9!"Wj3ݏ&GI.Tvjɩ\?/F0ΤךM-^=Bes(8ԭ`2r=ƹldhg'GKA {Vkօ%R )E#m 02gXwc_zگqk{~B V"Wlo ƯX#y3!OF*墑o+b2zNwС"^<ΠC58$| zsWk\h2hBE✲lҕUiI ߶Ww2~P6|BzB u7!w"F,rOAIq RLc69#9\(^q9c}n$G JQIn$d!,Ty2?B[H 5=l1j[Mjkmh~'z.3ڹ7jܼ}?g].<QmvSTlXV, Ċ0qqMfGx,j[t;N4Y6'7\@8U뚫%IOAPId.A{F59UTcb{Ufn܃ܚ*602MHrɧ,r;m#)*9mcߵY1Y,IG*J pL &Ip?V ՘ UYB"̢%@,:ށ%̲-j*inޗSh[s[<7[Ѣ*#*` q#tf]8sQp05+0¤aO>Vg27zG/U.!#޳ИnzFLW1 LK;O|sKrLǀ_9viY=[4)Â԰1w Zm\":@;e6H3˞Oʈ#crN0qTu;jAfsU+ٍ qy12֖6$Bx9RLDFIcvNYK,jrY c)/EbTdGK2T$vI VGbQ":H< "z߮I e:OZ\#3> [>XXf|OYL}flAЁ6(v(j~AFݽ(GS0YTP8 ]s)˗*`j]#S@D6Ѐ#Qv.$.YGq+ېѮYg#bKmxɲb0sDWM))Rsr3ڧPAa܀3KJ@<> :S#)8>u8vV捣a.ܨEbF%-`+ Ԗsrsibx$xZ< * *0mV-2HAKTe?JtEz'O,!j;tnyI~GүI[4P:\wֹoc6OTiB@ʿfLGPT8*ZQG%F8! |f6vS v,cf F胁TBtzbd;A>PzT`wpR3dWbѝ E %j H cD~u-oTijWU[ut<˝à~5kO_e~(AXyeQQ@|NvP:T:MX|xP:St+[BUOʼ1jJ;$ӆ t.diX}j8\nǽgD.2z(U9QLd/@;f>?9B(vMhF#%zÑ?Zi2J#.q7ifu3)dvVrZw+*ӳ ګU[l.<`5 vrwD,K FO|4,yKGpJO);@MK'85Z1Ap#b⭾ F*ˀ1Sji D#ڣnzS X=081OAU@ٲ?.h+4M, c,1?¡b}:Ugpį: sa wvlg==qTnj9.ڭv eYie#ZU|N:Tn0=hƯr#=^]n#v%®V$F#DA'#9+9E9 vly r=ŸAQ(_Q砧o]##x+M=N #Fj)<l3GUmsgr֫@&T8= \/OqdK<QUU$l!{6]IS)F`I$T-u'ԓs2ʯHX1މD")vҖK(E%,|(Q&d6R&Qľdeܣ"% W$<} &FCGL1(Zrh^n ݵTR`.y Pe EZv=0EYz:}ܞj4E;TyfV ;ȁv%@>\29`,Ķy-38jey#'UT2!ǘ>cV;7W1QZˉѹ*ď7-!Q3tGLw4-3N==h *f`)6n)Qq,zQs!wb\۽G]oHN1;⣽.* )i/?0zCN~pzarBG= uc9%Jپ˦f$-%@X[&3U9 PMhg|9ڧ!+NHBLw=i )< d˻`Ҩ\Eb1KJ%U&L&iRi6[9Uz,gsl=@Xgb9œzT^{i\c/5TqvILJq g1$L$9gʹI$9ڨc\Zp<ǽhd9̀W`nq3;@UAʰ/# 9SjHFGqZY#c8U쑵5{C}3Kw= (ǜX9ܤgd0`p;A7ADImdhݩjNesnnexA0G${BpgrcJf_.F-)|m݋!jw,,[0836t5rN֭VgݗqoZ#Fď1o CϨ@ >IZ4Tvk4 X3NIcܬ-,H Rp7"/- $ `Gp:U;DLˎ*1nq.ePN1qV|{, ʓ>ԗN/-)K3}ʏ,d}VmYpFyU+ I;WYül1 +sQzLSnn ۸R\N#S1q8Nii, >914Svq1؞MI!(Xn;8fEYIq֢?Zb7PMcc4]f?Ϛm*&_*Hfۣ[!K@$%s;?%fH6) U-(2C+^⬤ %p A-(95)l P]""4i: QM'FvLIGy$GZxWMqҶW$J^Zʾ2N5B_6RPϩBb(P~2; e [2;uԜ7'5\[r8<>H;UWpA&Qٛ:U=KG?v: ׹G(4HsMX™1qQ x'|b@oSA-ӊy>M֨JZn~PZɑɪ'\z[ f AY+Iq֪ )wN1д]ca?`H$ 䓟=!cʬY%HX榴`,O~^n6M6폙Tmۖo3ߖ3H'88 zjABd#tpMPJ4Lyi_LRZT䜹!N1QjVonb#^:܃Q^<$8mFo4{B'-a'5|GH%p3fIC+\JR0 Ei@ >B*V˲@}0F]g Y?JfɵKIҪ̛0d;$ݫCNݮϕJaU4ϸ2A B3˸; {iw=3Y̗?Ar0X*kxO3~1t41"<+U-=Rn,1UmFo##jn @t ֳlB@>l,RjfOި|.Nx_8S%v@ Zw2rlTK̿wnXc9w*>RBb]{gݍv=ie%~b,Q{ iq W #^*HʜQD.Fw^`{Jᓠ 5$,Sv'i%\+>ѹ$" Ra*9P`ztDI¯OPQr1֩ۯӥUOނ8+ւ>#;Jb͏nmJ;'$p^ RPmbJ~)] gXFI ޛǙ(e,"=H.OB?3RG&GF= {S @本✄|S@E|nDxB>lֵo;Ie^6VIr?&>ݫJ&Ӏ'STFH2w u>cc*zT>TJC+O>aqvi ,`s*!79`OV,ʋ 9׊j==34HhGf!p*;E&G gTɹ?έj K PҰ_4Vf,Py&R8mcbˉBTmcbberMMy.`q  hjcF/\Ԯ?ѼHUC<8p!ͳG%C *4Q\^dF8*lVmqҦ@CsZrqkCXi/ZFw}sFCп1%yTi8Mpq θtlTFKq #,)өU&mϒGZ 6dܬ>9HZ¸T|<'db10wSe>7e>&dNKyZR" j "Fq>T'f&$yG“Nӕq4cM\X1V,j~6qJ JisPg]tj \e~jİN:i^*Vh9@zta')qWRMQ٩x3T0|)U\ \%[xm`iXR-\2!9'5f݅֒34QhdYd`8\sEyrΤ rKp8E^J8SnS͸w,0*q@(1{]%A* yϦipTQ.X}P19p͸s$?33~&bzKVUԐJ+mƎ/djXuD,j"R^Iגpy <6aڡf*d\bmy?&A1u XF*fPX⧺$!8@>ǜ(ֹ)] 0DVl BI=nGjin%kV+ |U,hTⳬ_Ϻ 2#}*y1dp9 }*αn7cR;z̖~~ltj6Ѵ!޳Cu͊(ᏌPA՛xG֬Höj/ex皫}n^cwn%wVIKx&O4#X(9aG0?H0ݩn1R@玜Rg /g;?4BF\$tbhdG dqU΍m da?|O86^Gc#z!=*NQH,(1 7cVvJn 8B~lګFs)! 8^CwPۍ!=MjM*y$c+J3L{Sm縊GU~6R_\dN2y ڦR-r ɧ@1c#z1d84yb$*W=~Fn bJ}A 8b_^sWai  5nHl8򼠌1Nu~6?Ju[$vFEcY9r76pTKV<8ÖsUd$Qj3ޒD&:ǿR IZ"nw?*aC Q]xmi`9&B#Ǡ[ƕۏi$/y$ űwqwgع0HBI'&leT3[:\lYG cCr0 =*s,sq޳ y"l3k#MZyGyV\e+%c<m6b]#'K0XI$u=6i?fJ":v[Y +fA{j#٭+,H֯\@T@dj*zTR^G#`vl[81Oz[CLyTw7͕\()#læ3Үߜ`j|5?LkddgLbAv \0^Ԫ ^AHzs#cccR2#[Wʡ\ӊ`sDh^ i([F Gݦ>9$9f9)|-YVr+C/<dx *j05%nE^+V[tfxI8u:$SJq"ᜮ>Β5 ,F*fG\tێû:&w)t)aޫO/ v'L6L3t,EGSIil.%Uv(@]Tq$0QGEH(]`=3XnHzgڳupjN}j ?>rQxh[E9QDƭ]DZqٿ$_5v5k3 ŏ=kHVn''c$k.sϹVܱ^QFyUل*<.JძIF>Ro(U;~yeDc'q%6.IA+Hv桸 3mW;VTn+ҝq@ʹ|ѭOIJU (L{9-mHwU-ќne㷽j188 U1`FINYy$7vP#4NpzkH| /NL9'_R&Rbs;*T.ONsҝ('zSR)-|jH;-0?Zti.zRդh;ErC|9犯}nU?$naľbGcP$9gZG-yEWZ]*3WBaUNH nc⥙<+;YO8?JDh0W@UxakjkfTuZ71 (ʚv Ifܓ)+*v2q<{(i>R?ObK/p1ڥHW pE2HMS8 '$OX6+Ia$:3RZX`1gL}mʌc5dd U 'z3x r>k!u9j÷"x*vG!TY3+ ԖHzֆP #WtDl0:֠.0J |V4+"VݖOhwQGFrPmխhnZ'w}Rj UBwmg ½=sR[B!ixth8C"S&\uB>\g?OM1aRnU RX>=5F,PyʥHk`!*X#ڤm!Q2GV1zdA%ڣ>J兺(~Uo%Z^LQ=A.7c'Ҫ@,KO`9;M(9%p};}QlF⯍g&dq6bpyv5!fh+9iK4PXxaK2ҭe\sCu"lu~,'9ꬍұf}O`{g͕Wh]͆ SgwWscMʁ`SwhtJFĞxLkMcR̢m+JбX}8~`#~8@G4K,5=y:  cMq!tg c g:"㊤SʒdQRְ.*>+ ʃ5%;_{~gC[J6#Y\*ӡ nێ>Ƶn1z g"Jr?V=qxW XANW#q·5f{"+Ng  T"PcT/_̖!*L!s Pu%clp3SF]k9G %rg8Q~k}_9Vf2 gj`k&KUK^My8`j)}ClI ¨ދKv7߰"žf*0C\((\O;FǫUԜyYFjɈJjLByRs"TVQƧ\_n?RUv U!fWQ?*Һ+䌙–H `*Ga{a~p zRgld|R?s$W*7Er8UMH?J#NNjە/|皆PjqqoΠڨTqr`NXUۨt1)VAH݆rrAvXM(0#*]U8$SF &^7RFF}*ҷ+ bp25x 'ʣ,A%Ua]v3iF#`Zyi8*adeR+#"(=ꌰyw+rqTe,N 1l*i"E>|w$B$%wJ,YL_-Kh3R͒UJY A>!"8? ƘpG$~5)>kbjpd)Vuyk,),iI78kmYV(*՛92ږr5HL?2g 2drA~uuk|Y3ͺm۲T^Nd/$¸VXF[,:#9Y[,Ѻ w~>&F-4] 8$TϒPYOpFw;.fd iWБwT̋*kvwN|q[!lndX }Oy0K9psgiPϒ+ͰUFMeZB~H]'v TwZ:.2C)W 02Cǯj]Al5M h-#?_i1O.ܚ¸R^Me IAoi(l>O,Z@K`vBjuAri!31Wx1VX#+4 2>TG<}ުcrz0-eڛG~iү0ÁKgefvi'̥ݟzu#.ǔ8]c*~%90a⇵m3^C۝j;miޡ%o7f{LOlV,qڭP*6Nz Qʎ>EXS`Џ~< v3=~pb\`N5I\5bƤbW-clbztW䌕ʫ iuđ*O+$rA-w*TcgJ O" zSᑖ28SY\R;y :֜I"Psi {?#FϾy#ɸG4HY p9'5ØlnUdk) jI˴H!M܀Tt܀+UI<ô{QnO=,8 C9̮"| 5KjdERTr{SΞYWpڧڝ J0VF\>pnnϮ{S0Ӟ6̚&bc JUfYR@"O kS&^JZͿOq~cߞ})4*7~q(?GMj^W@KGlsG_kW>d:8$lA F1qP8 IQ}f~RMԁ=?JvmؑY.̎8H#ƙ7,q+qI>d>I#*EQL{CɌT'f2 E 01S6S cic j1i94ܞ4ܞQ< oTMg-OFb˖P^Jy$T7W?-&wIdT9u@Ȁӕ5vV̮q 8R6#&vzvMQdyS#y|S/֠%'*~|EW1`A"Lw8yr7r}xs'ԒZ,OrIY]9b7&KH̙&@Zb%/;yT~thY;J`iq^)ﶎ>w;H̢km3\G\O2 m9෰|Xܕ=p2:d~UF&->u<Ҭ*yK#<ig@:!G`98^zn8IrKRWwʪZ鑗gN)*ތ=?ZIuPG40i4^fn-YeQS*JK!)U Mrr 7֓Uס84lVZÐyYU .Xx%YdE [3*~nNj-Кe`~險eaՎ;Uo2 8יƎP>f&m8LB;q8j30p6gZ 6OKv5kmǜީ؈%%W{=89 {{1IŸA۴w$A'imˬ(㜏jt2@ʡ>.17?N3 )y3 (zr*L(6=jXs*a*Mlo.,GdQ#D~H[? RY8EF?*>^R[w''Tbg5U3`k2lsU. #za¬4E ν;klщ%r=j{h {r7c1VY.dRI$,2d^OzDuK@Rz銣1-q(=7Ui2fpU[;YdŸq󩭐$c?I76R|~+k! 7Ϗ֞rm<ب ?IUՋ ` {❧/8 qT:< ɪw TNxN菷E<׈fќS >9Ѯ,'5}F-NJJO[!XOSa~|R,_4=)\*a~ӤaۃJ6*3 1D /*ܰaFsPcnE#WSsH5UK>|Qm| n,{Է^t0 8 714čTdSMHmazRH} @ޛ0&7d#cjIw1كujb ?c%WJZq-aI6$]RB֜xU\S̊*y"")XyX,ĂӹF.ebI0c۸4:+rWQOV5.ʹlQA*.p>Uw-2yq~.6~Si|ۭ偏$įa1jųn#qQ X‘i}*HsZ05n?(±L݉c8OOnj8Qȧ?.isuʶ=9 ]IV+G!%$p*(F]O9_ɴ2: #GA;{%LIp?Ux>HݻTr3l'${TAO6g${Tj?zjoŵ3JΊ}Z\9Ul={Ie{Fb#ïOo+Y"ã:O []0rHYӕf$zg.'q$ҨUI$Òp~53!ަ\JUc 3MJHMax&H0@50RJ8 S R¾eggqԐ(`yΟ|F_l[N;of$|؝HK"^.⌏WV6>_jWutx ZX#y@)aG3;-$b $P1&O];i¹892RDW"ȓ:M|5`ⷧf eH<3*,h Ȭ 蠎tlBԆ8ո~.G luEpNأP1ZH'`sXwQ^zVVS5qm,0^PAld~k!$YtEO0Ha kԆOP v E1{Tl.Aa =1ԚXA֜p3sV݅Fpj̯x"03ℶsEejgW=7Gine`o$npxF,W!!hg 3ڬwjyڱ`i ;<*&Dw, Td.?co"F,Q-8 #;X\b2H* O橛Y#S^NX7v9I#6~=~96$5JU|ٜ3 {53nXք%k6AnZDcW5M=5?ԟҨE|g'VJqVfl*x#Լq'\7ʠ u]L{ crUʷz-=R }qT Vҹ]>ҙ rj5NCPH9ֹMUePuzE ,FWH >Bɵ :ȨRY-e8S֒{)ݤ_H$ӝ7z"oѓ8P;S.icOF2@%1좴<[/ :/^Yq/=)y9s+6nzU]*KwmǝŽ=))8|tV2Fq;;qsz/aQZ$b;S7SmSs>a:1ZM钘ܒ?@acylw хC3ʶsTLCAlTNs*y5;<6֪L)r31#fɭ p>lqVb~9j̰jh qzZXCo˚~U?{\^Ƙ8U5Z5;>P=i&n.WڡC!Bd@p ~84n"vGQʒ${˨a;RFsscMN-9wJ-oZ'l qPg*X^xtra#rq3NF ĢݩHcaS٧䛶mTcsK h`JIHS;S/[5;` onپ '.pI%YIZY7JRz՜aqmKTh:U!Uޫjkv<;J:DcޜW-G=qnYMXjA %b; Y]c7ֱ/$rYE>R"}sj${,J7!bù))j@pwqLK>oYIl{9Z1g$쉘$ՉrsHXQ޴zWګzU(ہ53n_H tK9^~%Ð}k>ܟNJ6{*[" T௶HmAunp+Ǹ-ɒ6++9 FsZ-yܘ$ 8=jL¤*똣0p*{"sUKRBixj f+?䍦ӏirW8hEʪ9\1Wb 9PU)sW5,c¬G[p :rό?LG 2zqZQܙ-f@9"Bs*uRqU:0~k1c `5HFͨH2pk[ģ1\o^4!l֬Q)"Vԭm"Hn`uⴛPTC䊳Ew ;X⹈S۸sEDT4YGMSBT^=B[toa [m9{)$0Gư5 [\q#14Z8gw+5O&($SjyrE; ' FOO *IHM BX2]6dzVg,6ȫRr13W$D|Ҳ-7pX~XB&}2?*$Ӂ Ae@}*0?Q P23U~#q.]3;V%߀ү;U3(HuI]X`(rKԱip$2ǖ˹`EE"8}{~ZhR$xH WR.J+*65::5c$uAtQ,gnGVͽv>~NϞbGAT_^ ̾GAUۖèqִYLu+j(ETE&cdZȅ68'qT!Bnd?v(ڠrOjL ,i\ٻfz-a\5͎Tmp8WM*&O]Lk-˜cV- TW@9d^v#N+2oyz/HډKx3r SwUQǶ1Z$R#cڴ!f@n2.!ʟCbX+k*ZF^z TtGZ=y5K| C`k Vby]DbUƒ|}9+EKɹS>H)W;z)drǑ#ҐN?9Մ &T5l"W9ǭZ)"Đ e}f\~u8X# A_ eFکqcXq*PUM It>C[,>?F1yM9fۆ TG9;@hȠZ0GִU[->0_Pl9)om'm,W-+"T=3XDnB8lDDH.).F?.)&\OJҍvu0*Nb$#8L cEr?u!,Sn$% h+¬^&yɭT2K~_~V)w[vg!7q8l;zvm-W%;U5 A(G?jѼp>{ T0+VosSW[C'!d>Q>GQVsg5\`Y6)>Al-bOksxU9M?*+V\dA wL<7z+9qc Mi[G m=H5q=7`H/P`Uyfb0UXBϳŸ"9ҟ-|ĶG>X6ǹI&FݹϭZ.W sQSiFCԊFfB c3|9d-B=gMfa5mIn1[dџ!X?}sMqX1LɗPlY888mu kHY$ƲtF)9ۂ >:4JIzVԮ#G ޡ ?5K"[9) #Ww' :S`_6VfOS`O19#۵:A >dB\R~P81V#rG Jw3Q (灚eiY$ՂjcKo`*5m\]I$ +*Vy.OAYnGZW.ph p:VV HPdq 1M[ȖXT֬ I}}jp3O|1*I=oƟ(gS+&@ENVc2@*nXrNOOD|rT1\ Wl!6H"&y@W\*‘23>@b\ HϷQ JT|ReT(Ztp:ڪV;a*Պƣ͵F/@TUU ʵ5f?cf`U{Qbmr:?UkF]ܜ$R{vM|,bhlw%M ?ӰA7TS89^?)Q:G*/P\(Q,fg <)H1^G=1{r1*]ͼ@pj-SpM'u(]N* jBG_ζ;1ӻp'+%#8>wJǮՁ)%xս3GaV^fUFTTƪpzUNZz1CU-b.#+6;Tp=*Vy嘕AG)$:L,K>ݗ.6ӁLr7?5ZYpA<+vKq{c V}fmE76>Et-fy-hŅSj0ۀ# pPn.q֣l7,8Ja`!- x_mbX]!>rF@Q9+*fRv/SYkA;Z[1x*{[RdiM)*IONJe:h v;T }#ʛ*䝵bo$iJP: qn4eʗP:j{Y6AlPqU?{ҫN ɥDi(9 )^NNJ\gҎIZNKNKgSOo֚]!<Êg;iE==NQ)Ai%i$5~&z%ǐHdM52E,(r;X U^sB;>"䔨%B~= *2K^VQʞ? ڼ2H?ʫjv#HRO9 b@ʌ槸&DvoQN)!>5L|U/ ̑O83OJ-ך{tr0^Ckɲ`OX1+;QlL1+>_uQ֚㊂\-dy5[G%F(?ΐeJ25Q\*U"PqKB"UCu!Tڼz֒a|WE ؃:!?U;x~X3#y({8k5pyAun1oPhB0SB`OJdk;}MNw_µ]Lw*X'کƛBqө,Jc繬vy}j6O'?^X <ϥ?f=r+7[߈ʢ)QTSEEQro6@ S|˓Kj ֒9Pi œKin `}7U :Զѕ]݅LeCߎ8yʃڢr(0\#Pێ*HO#@ ›R@'f f*,`9w6Ҝ@biTӴ@Wڞt+mPm:tQQڀMZO3X>GwϻT$Ojݠ__EW]8X351%̊}$Zmֺ]qs NZdF\~q,\ƉJKfQli)1Yn"̝ wk"UVcYS фz&G"(O^sNӖD12Z[ c[.F01]U#F!F8Uy\.޳/h@R9**񷚎̃3$z]-fg<*OJcJ('` mgg@HI!8Op~pO]0*͓VFh­G!ambP}1'?;#h;=j[ O%N{֐y9rr) 9b1TRJRqp?ϵGn'8-FDyܼZZNV0v9#ӭ\Q*ͼgeo9Yw{v8XeCVbFpzbZlnR^*v T?@}*lPlK/~Gҭh&*.7`tan&)JYYؓSɫnsj>I;p硪H%2W=*Hd9aFj唑AUsqro#Abh_,\mh\ \ qO2f2|ýH0N2nCӭ0{oR@ը 9y7)qL[LI5B(U;(ۭ9 bF\/\\jsoV./fӬ.mVe܌Gҭ-"4@|ޝq?W'ՍBte+'wEa˸ "H z e#'?Ζ?F#(1\c+chi8 #Ұu Jюlqw?ÅNaVGGL9ըNOjXs(s>jPW{TOݮ@>V% ޮdHsQ2~R{Rvƣmk~TA45ȏ$CqzTn'`D4+ɜRNaX#})HqS֠(% pjAP<GTPwnˑVƍ5Nb+ONnW¢S{5qsV\ ]I[ pF ;+5F#ӟjN#nՒ.@Qv;|CT%"K?Zn69ڡ ѩULK֝8 JQȫ튯me,dD:x-LbuQAj唸ڙ=JmǏ860y[Jx=>꤈3j ǭOlbFqG=jͫEgo)4 k{hctkmr:CϯQs҆)jr!)M>Pzҝ 9.:AHHR )GEcTos)v;TR #DH<2kNB&bPܸW9%rR- 4p^SpV*s˕^ժO$Ȉr;үns变j!A{VdwA%>M⳼D(UKg,8+;Z9h y5r82kk<? F#UۏL jn냈\Y 0 [!_Rs$&1WK k(u#dX9e{ 82P~tp@Mu"e /eVk`}ZTث++FnTTsֳ0 ?PcpIR %'-{T1LxK`1{mp00{AlVhZfݶN1UmstgSK9#$cڕ5,䌑jXز,H<``Ҳ. rP M  ¢2lp3iL f\G\;,VP 3֩@EW*1җx4:`b* r{sS"WRR;d4DHojfք' LǖW0PYA뚍4vjkN{R8[QNOS]n&}X.2 .x-$ס:Fn%>BEȝ߅SѠ)d֌BB՛ 97kL< ];Ũ.*?QO?N ", ǸDg.矩q 9cqW#GCC`Ԓ"ȢBqt."lЃMM2&`r HM a{(O:W}UG=gR^jU)QȻvcjTp$@Fn:L=iu\FXH9=9뚣p~.q#{T\8>aMW-1@`ո#1[70c$ҟxu?s1ިFGAT8jz7٤T|N}*#ΣvU3f1R@2Qʢ,e<*}Lj̇9 p*v*~=EX|sV9\TqRs8cX&$5x`X8ot=O*#=Mn6Rz/RmCT') \9i3=Q ,3̤5s?qQۯ<:<U&1[Läcp>*JcDߥafݦL>X ۙ9'>K04O;k1$ToCg8.r3B8,rqU1@YwOv0~Օvdc+6).8 mD'.9lFfi;֨UEqN:)ۅvEb6PpsGJo5$A,v<'ڲus*F8Aҫru~ҟ=WV rڥm'^CT#r:UYr3](T U>PAL)P~Mۇj+dݕ5֗J4\9ܽNfH@ea 뚤vAڳNLOC6x FzJiM?T<1ػ{Vi4$ODU315>h6b1Kҭ@>nKUuI5˒rym쥘19K잙Y\$5&rIcuPM>pddM 1.'o)څc='8\MC#'1YPe'EZ͸T?n\!FR,;sjKjqňgjLAaVmVG;k#V.DڱuH{:ՓDf.^kc.1Sf:TT1":Gm/%o'ǧzYb'1 /~w)qV.LSKfQwOY%[0$% R-͂TJ<ܧfۘe}] sڨ E#4֝ive;Glf 8dc-Ԓ21''$YkB#+1ni>fri<'@OݒďBiD$}B~$d(XxP$eTwFUG6=O`V&ܸc g=1O`3Z N@@1㚉 c[$@]& Z,Hrn+ ^xH;VFdDM!fABϗcC溁Ȍ*Zc"B!>?J!B5̦;vuxw&6u8NncXwnjsw%@,k AJ|2!A ~4y{ZMF5DkZǿ֢mw~nɤj;R0MWpHA/q,V`{bM zݳ I =j l/^y!},@>q7̘ڷ/nmڵ.nZFa2f_sF0k]4m7 ʔXp]}jk'Fe#/9i˶$r+j"my(=ꎨ*C/TRARowEÀHǭWQ|TlVÈfqrk~A<[Q;`gj{3X>C˲8'$k(۵Tr3IcPIH-! :̎H>XRĨ٨UI|Q Ԝԓ ~^Ď8Zغ?\fG#[FPU Qͬ`2aUyw!TC\r5gP$/c؞-G'>꣕&[rxZlrzV0&r);0fnK3]5~X+c}*嚜2naXpig\rqOZY9֝*dT`[1M#,nPSRJS3sN:KqT.wqT+qU'V>02>_j%N8J0v#ձ0ێzmg1U/sL'8ctc8Hp=O;'iZ27+cqǯՇqNgqէ*?}[l&a5ilOSMD6ȠjCai:` f m-P{6Auw8;`N_6wVcvS*v٫G鑧jik>@p䲨 ǹgk.KًܱU/6T÷VkǪ=aU8T:V~r\#$g`߷]񪏺9vĀT|ս}fDPp7MckYPquek,J 3xqs͕=̱'n99(Fe `֖1=DQZV'!T1Hr[ZݨL%S]\3H; ҳNf zUSb'QJm ɓzX;h#DքGo֋{e&voa4A|I D1ICNnI0Jn_zwwS7$SY銔~Rȗo"XSu.Uޗ é E3C#MNC2٭PA]+Ue:d$|g8"Yryb+ǡ6Q֨;rpX9Ҫj @x,i['aǰO;l ێI5:mt򗍤UnmeabU5k@<&zXY /$;׊H-P ,3hNc1'ڼS.>[vU?9Gk^s(@ t=*_*ܹ)s<".q@F\(̎Byn˟aTH=OZ.^=*ɸf*ȁZ ۚ8|`RUrh[LS_JMIW9oӨJH-@̄csEkʘC58l梇#OJKt3:f3 ǭ=)%FNsP ]<db1aǵIBgIЕ{ ΑEVzqriXUVިpaUU:)2.ɤ{y=,D==V(.01W;d)b|=QO S=)43=($ch;pzbd}*xҡ)*~=*D2156mg3紌GAW4tݗ˹6JAUUﯾ!L7~kd (jX6*ߵS.W͹Z;TnI(+֭+:sza9ʸ?>jsԖ1?yAZd^<ːOCW|@y8Uce 3#ީHJ@ =ꦥ[1H9E9Q\`|yg(@!S[UbbK#z3rfzfJWlJUS$YYK9,Yfo.{X`VfXq >l;n @*B ڮyF6L)QCHjͼ*NBƧ5kwҘ0*W| 2c9LU;=)!_.AI1js|.6jl͵qjd8 C(p04+($*ak>8⺙Q*qPw2)㸨.$`/)n`0)+R\&0%E:x,iX&8,s^y!fcUɤbnoK(Zw \d ֍&8f [v"yCR 7w5!!:lf`086F’m8@2+9gi r"w~-3Mq~5/;3`WjI9ǡ`}<䏼*3FY gE NE>[4:THyo&sRX(mTrA}vgnErwpde;՘ 6GL'ޥR|b~5sWՖ|c=hX&s/^z1 1JfaK5Nr <й,j)H SS!6G$$鎟ҧmYpTyR۷nxw5,I`~MX$nl`gm2T >IWbp V7GDF2*̑v]n;QR;YBɓjq*\rV[2ZS)eB*ī[,?Zvg5n6AAjŲi xM]De'j79$Ź2TIzVdoVb1K;&7;c>AlDeP߾M-H"@@,ãv⡀Na/l䪸\oXh4qJHXYHc9-S;Cj(;(1F\㩤.?IDG+f?Jr d 4?& 犫T&N`C!_&;U+R'0࿿Sbc X֎i,,5zӕuXS֯1[yyj ۙn0;TF[r`eL.sz .Ơ>U֢4=i(wEhV,iWE; U$gc qΑW?0Iػph^PpX†!u)!;Evm4~;(ieysʨG `8(MS ^`5P,b!Ayh * (A8 @Ym࿷ҝjC5knC_Iyl)ěPՠ=2eNTF< 0)ܺxOڿʷ&4{05?0QelTQB4n 9z# *88 M?,T6wmSzE#mY%vxfK[ ÌW,*.Yq݌5ҋ`\Ű=kRGd%Gh鷰*>TJ8BMq FyBN9>Ibb<ګ;: Ui7,#sǧfu+KTJ͟ʖm5P?g=/Sv*´5a["eTcڞ"OF7nHr'=*[u7AҫǺF iǿ>S5{v,V$[&3b"zAs"ݿc2(ԚjDl觀=չ)rͅQK JmO2p*]za9#b8PzIKH)8nBd~n՗ub@y76id7e~YS|t7'j@{\qZfm>H8wV+>|c$Աȳ&H4q*zru )2I[} n3gE' ǽFڨH}bj ڪH`Ahwe,x*hfe,x*xщjiG Xĉ1|yDs="?684GNIxS p=q󒠜t`HUoݯqFsLԥ7@;@桺/8PEA1t^*)⭫[)p[I23jv;ScRF~nY#hdp +ulTn@5JEjᐑUXoZ{hk#UkkqI)u۴ vlnAMg9usEh}MiEj* ..ӚО>$Ad~.+HNHNAzxOSZP./;0ߺ_h^lSQ̌{96A˸I;qǯ_U.5Ƒpy1p5By< ڧqAA51(>|ݏ:&X>_ZXKu%D_\˷y~;՛gP3UWa~o ta6qު@:U[($Ts9G<`ubqk1 ۈig7nǭ2#*BN=jZIrUQٝ]b8QU i77rҾS4XF[%e9y;{ 歲PYfߏzU9gyIU6哹oAZ:ɷ_"_bh-~j[ ugLp*rH+r\ jҒI  :U$wL #38ڡ ,gF-ޤ#c*53{/#?*/LF~T_zx@lye$42% Xfcl"Sal2~mβV[O?^sglq(8+X؝?*Z.g*KE\qQ{9g$c"ᣟ a\1W1,3) kOSfbv RkOQW!v GQe#6`%3DXn*߇kkR_v->V%YֹiVLEd27ϑ#σ73#s[#OU3V5KR>]@'ݨ\8'JvgjO .~T'쓜 RhlM!v9jF*8#G ;9 Mqd AzsX|r6aXr?f ~kƑ{Nh\#;PP/DABzr˽W'TItQI$*ZccW KP.S_ո-VoB2g>Yݕ 3*3:U=+{in%vc$y؞'5y Tؠn#Mj>cڭ117!XY1]S鶮P句Ym'5=l,O5:iY۞qEyT,O|UmJ1"u+WʏZw@n@E'΁q*'wbqTU n1|la2{`r0UmmDJߛ1)Cׯ5X_ CAdZ[$sY5M$ǖzu?h3E*IqYX۞ tl(Qݽ "yE~Wn=m_TGtRB<(T^9w4F0*yiNL1F>m֫I`$TnFX+.xQMrSԘcBNjL|xKDt?* F?*ks+sVtXp]_9$Mu,a֒@E T;dA=*|VNURNj;$q ʾA犹Ij۰=}~("ܑu5qG@Tnv$|zkՌ}+"BNzU >0*Ϋ"gn'%--˷՛41b4dHGN3PEF ۞g۪X ΪBO3H9݉!Zy +yF❕yUh4l"a7#6&=}hgGj7 `(Z~vzͻH'5OSUgLe9 kVN:T6NT2pA)ceoaN*Ԡ⧔)9? mƒSxYHz,s j[GޢpdfڹE3:(ZPTg* XHgE(lKT!X ·sw\9o˚̷}iԖRYVܛR4 `jA`Fa1W9 uMpj͡$ܘr O&HҦX+ޔ|g5] cXp+)~~QQ*h]jLg{ոa++)e*q8G2`qL%1B"R0[s`tmB'Q\.s2n kU#f/&Io٠oZPS(rk?/ȐtL֨k-A#"òl PXDlN{S,O"9t"B0}kGRagfoj}3aU]jNJZCVtPŤFΓ7 㞦PsROa5, NƲIo76<㸬<ˆ[)8Eaz ʸW^F )6ޚOzJ /S*G(X@QVU baDNBQ R?1@c_(1k)#+m?+j7^K7zv% 2X.cG$K[=cQZs4F9Goktv5rW+qu@/čq ^jTqf)/~ al .n2*K)gϔ_Sm^Y NUGNԖ$'e dk{W.\5V>X`j럺:TjG9M}hǕQu =nE!E=\N`Qn[g1ЌU;ek sb0BҨ`QƱ*MRk.kUU{E]K9p*E[fx%;T+GTnƞDt#=*2}tudYg 5R@ZΜC z)Jc9JlC]J˖SP;QM:&6 )@\=IG2xy@m@L.ʂ#V˪G S]H@E_wX.`ys#"E8gW$o}w4θLg\ipVŤ)HH[-笝8_j킧#|q.7b̻xNy[o:IĐ5j,zT(Ӫ$Qoh.gNh$-JW/f$-$c?FTS*)/ ۗSGBj=89c!P kÖ,p ,JG$Yy#"0M$fIX&>ED̐Q ϴ& *`uSQceAޣȪ@< zJűn18#cn RF%. TXgSB (*epø$8UMB'? B!/LC*1lG sOjc.h*A iO8"L){T8K4ҟ=-|Tූfj0s+ c'$xayٲ03ִbT~sVI?5,>`c}ͬVucpVEc4mߜ@⫳K5RLPIg*HxXW#4JGy@=*Hg,cyqNڱB4`@ϵ+FTzLvʁ ŌAQbD,rG8#r̈=GZq|;)rfUi`=*0#*$ 1NbYc cqV.W1Lnv9#„w}0xȦø[dzcB$~ZbJ*< rǷ>aH@X5;F Fv@#¨ CPyQA ! N:cy ihQܚzJf. G57ږ0R\ܸJl93q+֛I?GQMaҗ蕎P3jCyG8+z#%܀%S:R;höATqSMT }Wt}g۴^}aU-̏pf$y>,UXrIb1JNC'Iu$DDuZZG̕ jLw?>8 $ame8#$wib[$Ev~~ҠHC=k3ZI#HG'jȪsSC)|>e_s*MlDDoMHh7NԦKU2"|94RH;㌌/L]BDnE# ֨lڋ,ƫr}*oY(sV w$7ȣ[ c=q!{+%/Z#slx{fy MP_\~f#먮6.> HEO0 :j8%SL$A=wأؤ}*upP1YX0 qSn(XHd[o48$Ac’/F;;bH/tb3 p) h>US򑝫Wp EE")`Hy{Z`{$*0r~NqBN,0ґOaJz{ k c^2dch X..٩$56c$$cSێ{VLBETk.YC\D=}k9&FReD@G,"j~d@rƪjS1VV 7ڡm ?3 B ]*0A4%c==ǘѵWzy21GzTn1ǿ-xD' 5LQёNL 媌S.P;U)2۾cKѯ=+.rPcH-Oȭ{x..?"-2qsO+{"ӯV" _[sך;TɋQޠ)t>o#;r}h[%K4yHzi_DB *{՛tg8_aR\`dF8ҙ ,@ly6b8lz{P ~fSdϡZHʅo-sksWY }xP[n ΫF;9cG'+JQ^OJ}<]:"BqjԲ=ÀqFVXNW8hVXz?(a Qe:F{,MB7`%]@';S idS!:։!9mԃ|HdzGIGJ7@9J6-g`8C}fϪ ب.-K s銵F#*9')0GSc*r]JPsǵS7/q+/TPY'Qnb|t{R4>ZOڞ0pH}wr 7 'u Xnڽj9Y|UoIeq~gU{$chM)"vɍU r) R.NFNi-;RBn$L0zU @`m㸧$ %-pi*rO @)))Y`*1.ùylgd^*s)9E9Vp & j99A41vP).*zҒf/ 0DQR*jNT{*)o*+%@=34W,ߥRXf*It%?/,sּCNskM'O󬋍y!?gI7_©"3onR}]!Hjշ^[G:(0{V251$8G$՝HV 'ZF,HswjX8E'>4jB0+>w C}*&$00#t ~n0pSW2TTT- C"G&&@CcAltc'__ҡeY1#6~$p>sj[F|,̈zSLe8>Ly#⡻r'nd5 jGkgq{@3 =%-''ެO,q'.gmi^['7*PŌoe+[Ah^~Aޮ~GGt n#VE˯qÌSY%VH쿧n-Trv3@I7} E&5r2TME-rBTXtTWzedU4/q)G=.@X3jkwmKǔ0'*B(ds,1\(?|ISnعsZڧ*ʪXgw\lycʈEu3Sig ,PƦ>V8<ӥ %ݏ^d*wVp:TTulMFDeg U`p1NP@T5_)zu,#1lq5Z[{kBy7CHN:TRHv`ED϶Fa֘37Rj*\&l'^ȰXϻ*ܤ yDIaX\WwnX (}OSYyC3p-slܴbR}zִ҅ʮq׭J6~=jX^*d:Z\X.jX'O*G)U#+RF".A#(dw*t4il;`~P=1P* =)$GA!tL҆Ͽ5^`9[ϛ [JeH ֛k+yyܒpvto!gʰTO!s^iP6zޠh#;J'{S\ @cПT^yL6;V$Sؐ9GeI<6qR-M'*KkXX T[YEP0S֧iE<+uC⦕@Vnp`I+F![~tF7SM.Tc895R0W] Qr1pⳖfGl*p'?2F$`sqJ4O$biXSҧb+liVo'VG nj DbXb>:VD!9"$VMŁ!nyg)`C6yPCB{]q(vA*w۟(1qB*6mε_ˎ~@ٰv+*pEb}=9?Z ti'h;W~pj{$ (k>+bKS7()U^YzjF\ ^ ?~U7\ #!@#? 8)T y 3K,CdM,F2KF23nYW PcUrrHl+zI:-N8ۏHS%zZdS!*vש{)ԙF xl9lcnA#4ԃE-BgcI4IPw1b$pQ< R;GRp*v9%V3ŊaHÍ㩦#nxi[%[sQs8bAQ'Io³W*O<.@8?9rPFG&3L'HL?wO⁗azzPb:й-iOҝ$c^=ns4UyiP eG#5 s2#eޙ#+#|OZ\d יq#Zg;Qfc8F~vC\dJLNil5qAcEjTm9ir78D7 L #wJH5 ¢N;Tnqڧ+e 3eNeYlNh~g>;fe^*)ޢN[2 'l'eDzT.k8+3jى S-x]$`Ȥ3YD*#\99)aUI;Z;wU5SGG6|پT$zhG\۱ʵUrIFE'9,K~uƾ51lU598JGp#C0ڢ]>fzي|p>!|D9'hcERD'K:S FSFՍB3HhqrkE%MfHhsFG@){RgxϵQ*C7viԇ0:){fqŒ$@\iB$H@bG2ES 6egPޛ2PcU}\ U`Xc]Xq s$8TVDzl)QE_dY*g29ݱ眚lyjRG,qj,q@@MvS;T1dR#2 468J`b8=),VP0I95Y\0UTNp*jHx;TSv-wO9J| j+jUw֭ѨU1AVbV1 qNi >搼vM(VݻDCG Ptrb!KXBİ j w?.k@FxRZZlWME&wg߰*?ҙ f| 4I-(1QXǛcTb, v:S3ATW{3$dEf~cn_2uNiG\NYr9nW܀)HS }9➋9OE0zrуޗpߥ)=JN: Br$SIK~=D~rښ1/R5bOWRGCq!Pܱc8:$QM,8;*PsSsE!, 23Ȩ SRMZMM+my&zn \vs5&Pr*2QҘ˻*:R q=R!&Eөآ}ڇ;u490:{X=Ѯ{rDN1Qr&)aMRNxT@ZŸzA-Zh'Z/-ö K!cRGsc؎U;ˉ@K>KqbFnQg;£V8dRpyl,5?[W(zTRV ,T-!z92Mkƾ\j_oD6]1Q*sNȩ2)QA6 I觯Y:+̱SBJ?tS V3늋Iq,#g}i%!gc&. ?lP]%~7/?Ҫ!ڬ=EVL6;ua9sV4q,cRƦsMY7yyLҼKsT2Hd2i`TzS*e50Զi(zwUS&6ګ0<{SHPwg<0zu֑e+צir@E>fdu5 |({Хy P4scXAH: $c#r=M#r=M5;?JiK{#?)zr9c919)rS76zq{ԪvJ%1'˓w’+XȦ#EQ V pj\^>ׯFC'^e߭81V9li W ՍX!^:oSW 3ޞ?7 ֚͗MAN~fL:"FzO^{Rt9"Mw :Ps Dyx, & 6`|d[q5]w ӻ3)3s֙';%PZAН276T}j壬-#YeJv'j KcnB38.G5R20FKkO6ɒq@ r7'^C gcVؤlw'OOh̑fٙc`Đ:R҉X:fCOiT>1Ԇ9?tTRI9=J#$x8d g駨('aFJ }{Ы0q/|zPsփQ  SJ)L晌w/dԡwEK/y8r(A 6Y 0?:kʀqǽ2IT6 { ǭ6w =i!q9p`6ė_- U[TqH85ZxĎZ!^)ł3zr3ڪfc> J<n6*I*5"pw1HF5NjhW} ս"36,oK}g<t''SY Bvv:t3I0qv1y7zTgW G5: Qdf'~RY/Ug,Ws!FOsYd`=Mg9xH،>x~ O@ҡ۩Ѯxo?ҦE~Kd-4|5{A +Gʼ &8 ʕWo! ۓYd!TjwF):Nb'sLE& ؄jprITqZ @R< >Km?w.{P"?Rqo*d J1f}8(ŎsLIiܨ+ZRv^ z7=yF9>SI^xҔpuqL= 5sDNU'@Q>vɗFjn<#,v!q'$A["%A">f%{Se>4w!2t$S$*HHV] I7tj)$өlua9BNiO"li*ЋڦP 52๧M@c6BRc=#qMqvFi4\R1}`mAيp@piG+M$1Hq8dSLl2 lސچIcT?$v]c4[c4Hԉbm\,{V3g~7sQlh2z@RiѠF*YsLB#j?(,Anh2x4N%U`1HҖ4E&BAŽq՘J~¬DnՏF3p=gkx#MtN8lLjfmZp9(u#2˜zBA,p*ܢrkSv%"9YwXYBY7y9s.\}=/yqޝ`Y#i#4s[S9v@DZ8;֤ҙH@@q‰0:Qŗi* D7W?ΤTL):՝Z7m槾FdV-~Y+2O&?%>S ^J79vV{p>YfRCOҶftiAT[1ڪP+NVV McNsئ4)2z {⌊QܼJwBrsdE1V?2^[W)wp7R.}:W+<<ٱ7q!w?l 4xƺ=2wcVi"8P9>D.8 dJXtWw_5\Uga*!084c rzj$`ll^KzԁS{E< *>@uWzkum٢p%qq0j8z;ʓ>zG1]N^ɷ*J t<ӆTICVq*^ #7SW xtz{}F찌}Ut&XڣjŊW-Str4ѕ'j[DId$Qoy_jޚ8ae.pHSkw;"GST#S\݌*&M2Ms𢛟Ьʱ0'w.l=m{VRQ Ymr0X)^dJ=Z4r$p=j]qӽCkR{VV}SMUnޭ_,Q5KSxAS UwsKT}` ߡ{'Td09B~U}EvT;ME-z Si|o{WSߚumq >t[ƦN9oO^t'ɨuI)D zf o$K;el}끚K ~Ɩl>5JBsBFFz dfi)cr8iifTl<7L~0PW Q[n6(֙*T,gpRć=;iq#g4#qҀڗhvϽ8F)b4Z~W,w5jiqRFwCjHX$qN~&J}ɫP1Ou#?|ʻI3O0]8Xr=j֍vppMXS̸r8X3WZ4d(+[rE4~[֓&S-;2PZ[GC, vJy>w>TS7@@[SCb$*f&pqWto2щzS B8g1Mq N*]8m$n*3YzɍMdk7&Yۚg-#c5oHo8qn$nTHv@$#v5^caZed_Zұqp:So%|9QʙyC܋L'TvQojY&D:kH $ոZٳ7Ob#y3tO\ŴMwyn}D+t#OۀZrp*[3SsRٜ=&|o&gڲw'q̟t.jG9[LXxVjA=P_p(@O$qO,ϭ<c>`)晟|3У(-څs aAEԫHIs*űH |nc2)QlSaX6K"JeeJ{ rvpIEDf;?Ï֬~p?*nS(V;z(߻  SU9^W?69>:#VUsCCԗz֝7ruY$(j)v<Ɍ8ȃ݅s`I=MXE%rޕ.8-ls,;V% ڬ4b73d{O7qY|lFZu09fnYFkuy2dֹOq7")"Kek@.胚f~Viz}HO}jZ[A4W&ⳬ۟'vjۓ~51ɖF<?X i27Ƞe1Msd-/.KQ$&![+8h|<3R#yLNN7VU"]VJ5ѿK>VU4$ |AS2s6ܩTZû UF9*w9*x 8Q*\gjpY {HWR{ԁd ڣ?{9݌sO8DvcOj=iq mi[kDd;qɢ.pz3U=Dp:pv=oᚖ@՛y6۵Y?xxTw N ‚DTe] )e8qDT.OOǚ8$0 JLR y6@B".֍  HUI#9 S?'/eN$4)7˶[jJ]PwS[i^)Lr6Z|-pGʒ߯zuRj֖40u$jbUaI r{Vȶ`6WYqc98 F?FSԸDPبlv\1Q nIoRǾR[ {yDަM~~-x>B6/y#@:kJQÑWXt5 Ϙm՗gL9wbuqΘaLCKc;fS0+AhGr6t"<~B@ehZ'Q+3L*[tJ UD9Utj)ؤxz$R<@=qޛ+q\>F3Q$`OBjLAJ ZA&:ҡ߃OSJ8Hl/suBH$;Y8=t#'$E [*( *ҤPj:(F'j֝8p՛X0*Oz}싈R1Q6zu܃tj*}hnRWgzqzӉԁʎK?'?7ݨ $IPd6p55~6Nvm[Ѧ j*OZ  t3@lռ㞕 ϵQy&=*Ť.scҘpjn&Q sG9مd Fv$rK8/?* Ut2՛I>26K!`G, ZS_VHsPVԜlU _1?՝rkF>vEoYCr:(#уU*)Uu 0A͙\rV9L ՘}.#uGa۶j!zQǥKHw z[hV>Y}>Zf޸n;ZhS̜88#w=BsVA\rry5:A4ˎPn=):~T>4Kz Ӈ >5rΞudb>N?*hqk)JY3ޭ[K+UvTgj2;[y R;@ΕsQ戋$2HѩцHVNҢbE4ӔRA˅ !7PDܳQPğg +zŀFII`+gn؝돭T.) _+IV>8[N d^)8?h2qZ~qYZ J噛8s3gsWT5nKw?a}z[g<` ƣt)#`Yb[‘8yzڟm5 =zVQcؽm[X$1,k=M2Pꥨk.U+ees|¨ sUĒ*tN>{fctwA I8$BU8*Cy*adf &і6>ֹ;dr:ߩtv£aoȚܶB<>SR7ʈ#&7ʪ3SLA!W֬2mN~bb7*(Q(zX*'ƇOn `M\$v  t gZߚo# 5$ s5e?t1c\O&Ck3j nþVg}ڶmi_ly[ҵ?7SVBP6i 2FFG'9]P#;:dsX-yqs)u5 U޹ԟtdpz{wj p@o֣;$#™!qژUq'PHY|(U';FHj\N3E$L c񤍾jDninahKpV8=e&81-<Ke.E]NZhk̄+V(@"$!8$=[RNrx,4+Ɓ`{T$1siڏ=軹}h0H{nn".{-%ԥP(pGd?tG] ,¨@CLF·tAK#U5~>bzn5B.Hک(d yq":SQ*b:RCR[FH.8j0jF#dq͚䉑lN+c}.Շ4q*&7Kˈ" '#ۚs$i`b*.d~cB1s5n]~F3^LN'uҧEXWwje[ ~u@r\*{_qZ[sZ[H>oThxXs5Y4OL.B@}Y>#1kp( >C!b S*ӴBp*ÖjʉhӮk"2#FgB @8_"bS&?JKF۩H#-ժ;2dWGo#JF׽2Laz-#WJiZd+<{t{t$.?&Ԛs1F^'8+˓qḆ4=qPi zӬ` wm$;«WHP`ՈAxX0vƣ/IDecA*rvmD`3Q6_ 0j;|ǐ1L32֔ Tz6޵jHV$?<#R~[X[1R`t)AR:Twa@{V$XmoJ7׹$bXciF%E rE9m;8gj9g2~_1˒ieT'ަ.'D=X yN;ӧ}ڑRqR[UI8=H(Իuɬ3&u sj[] ,h ;Ž3P,aGM ,BAAh0y'n ypXasZQs*) 0#?|{+#iQ2~u.@;hW FKmȇS9ϥ"{vyi$e+su-O9ZuBciI##Zz`,]r/,F;fJWPg+ꇊ}6\3c,Nک[s}Q>D䪄˖-.j_jɌH#STB5$'D[PCGET2.*K6+7p1XT&KtPNk&/:瞃(78#͕'wQ?)>z%)n_RqUtﳁHCAeךl q[4yxSֵt.Χ?w?ʡt3sQj't*#@J< W5KdAycT<ąU {T̋'$qOH~0G#tj7o$S@mt2#IL`XucLe,zLdn!i=xZiB7.d1i1vg4_`z(K_4US\& {Sg,Q!q6刴{:D^@m>klwWYO4𘔒0OCKo #ZQ ZLqƴmbXc c^8dh;lw~5ɹbp>QN8:ӢC1`d &\RZnstpƃp1Twr16W2%iHx8'Zg]:rt5bI'做K;~. ,ưKyqI&[?GzݰG:V坉E8qƹ$ZVvfaӥ]0H:p,ULpiU7 ]Us ="%+Y 0{Չl͜[7d9`V˘m$9.*BJ@Q\ ! Ԛ M,U?"p?5-vcVR]K$Θ߳=9'қ['zH_E?68c]-IieFq5s(xW7q" dc\Gc["݂K 2PZ6XaeXyk?OMjp&5}Ҙv3pGy棉wfsJnntd`"kU[UV=ȸS,i<7\g̻=xs(,@FiѨVYkȃh!ES!AToQǥY϶<΀>c0{@9S79P:V|  kDžZ PNA@|]s ?$v9?қ)HjxS_!1ʦoo+ MV)Qj n2kK8.\qS*SжZ7hnBÕ`/zidjҳbFtNy"G:)?O KxۆҴ+I$~d=ۼvvڡ9/j>pYعjBK%dppRKɰ#<TnKɶ.zZf-cNnk_GӊF6ki""cZ8VܣE@">޳.gi%H \u4f9 \q$%!A[KY҄trI=֞e(}񈓒H?K^sM?T9ɨ_@0k(N8qSEG@jP,Q _Vb!ªž|q6I?J]:pV?JuFIFF7s:.r_V"EhKWu-UMLVRzbn*ҥHJW9sӚRee:Ӥmsq`sqP&9%DZ<"v}Q=j2~ws8 Ag7'jPJ\Jnj8 8#Kv!U+4,@c`k>FbƾjAX Dq JY؝ҩY6/EŞq$yQŕIeK'Y$=j/xR 5Zn(T88.OOẸrnI#Wn`2B۱GXM99Zw qVlbkJ/8% *󊱧L/5bIk`AV]r6 y,cjxY>QYo֩^}>Q֭U?1~c%hF]vϽXV* C7ɞG,}MVbal叩D)8ޢAP(QO\r|J~0?*{H&iN*^l<|gMZrp]0#$ּqԔ(zF =k7Vcp=*;:|GjΊi<O2O|q[l>"69=i6'GFN*8@2*9sV^HB# rg}ʈ| Zmd :$'Ϋ޲9 ;JEwœV>⫌G=A&9x1ƛ#sS񸞦` 5cPZhErkoDLEOZb>;Sv4Fo~[Da|nM P^P/y-&e)qۭWu۽DABE ?L֢%(5bMQsOrYoҖ /G%F$`$o?{j{\3J:qcU0XVc1(<~5XŸ%?Jz ԋFE=궮CmQ OzWAcH85i8sƺ 8|xMOVjjZ(6Li)nbDP泦Mp,!j!fߜ+j ~W9aƾu3&e@wRs={ӍY'jYhlc>(8U}~s'nجei$I姂?4a+Vblٮ1. cK#hU]fC=1UGĸE!8¥LapOSCi4s8IYmGj4ya1zv*; (()Av!Ͻ2vjVǵTu@|pv5XȨw9ʯd4,p?*t#2sBsǮATi,AT4Y?^.qGڥ JHscOSJSq鞕NMe\{ҩɨ_rw_Vb4W`cqy!|3V4GlGe$V$ o[df!*;> [wW-,N}+"MLx,j #1Y̙cfYG1[6 Z6x |?^gձ#C I9T5q5VzFo9j+t,3Q3>6!6Faժlˉr-6F2)TRpj6V3!<1W=Mh @կEQREQEQQ UndqP\0*Ggg 1s8pA)5s FY$H鶜B @Csm(v VE˜>mmQ)G(@h&Fޔ ;JFȿ#A!E-^$0WD  ŒMiU*;ЊAíGpja銧Q?³h$U# V5٠h;7FJB怌0Yz/pnnif~w"Fdbun( p:9QNS@ PÃ8^p_(}jdeZPH#=C*1̪y&@'ҥޫSYBLO r+9IfpGgY#ޜl p~P>c|]fVDP0$c>kcMP"Gj˒Zo+MHFF\5HIYG#YN.'j@8&iYdl?l~&|m9*#r1MqsicĭG)d^x2 "dFN$3bgU?(}(=I`fu8&Bz55j֍1@֓(n~SS +>3s$%6F VZ26PI{r*F#/QUfSsR[NNjzy4)彪͕˼;@SbE([s (eYDCAeqګEkm7:vR,APLR&-ZvJ4P?8}&>610:[dgW8^yP(0}xH &epqZeŽbT94S"Tg qۚo* S?&UZ v ]* :-m弈Rbe8)VrcO-UHEzY2zְV k)lzwE2sPvTi)V}nF1AÒ5)v_Ir[[:|mךas}`71L9Unbygv oFQcp*[kMFE(W`Ңii%R<sޣi˰`1ά=ͬV`X ГQUL72|V#MY%zdǿ&˂ `4*w$ s Aj{3-BxO^٨ZFcf:U',qNYBn}pj2[Ȣ6o)AjݻmܘS&]f' ˱@fcTSnb}+#XŎ#)֨jn]*'DUFSڢP 'j%)11%eajѰ 9Y8=Le49ScR+3m.[8su->ȁqTSs<{#7pUMʫx:8a 2H <ĀK:C tֺ"n1 t&l%f/+1"Iv3754Gtю٫ {,?XVxB:[<~xC{ b&&Ar6Xr9 XQ:tjFa3N2wVXEOpG ӭ`3M]C.G, *QL K#֭i(֧,%Ɲt{*κB?K*iUxGPUI-Iԓj @9裮=C[k"zޮjO85 2CsYR4b>n|%#fy4d#Q"i<-T/$JS2jrf#o+[uJppͲLA\kBG|5 gmb29.[kg%B;֎>IR՝&2PӝyҨ]i0iNŜܵZM *j4|)UPAbPU[lh00s~~ա634{SU&0czz6Maj25ΰdt:T@>?JϼvWA݀>Oº'H<6T&IJF-bhgYEV\vpE.qR[ŵ˓Šڔi8uɌRs+|ӱjJ^axWYS0u_ FNGjV R( *XPv (]Ռ1;,dE$][Ns&3qTr}ig8j;Nښ)OjEVt^7J ٻFs[ZFQjBR?xpNDX˒^*,z|ew)9 Wvc?Unm7= 4'2&>@s4HMI-bnZOʺzq>0W|AdkJT?ԁS<DҲBYLvN)o58|%O)]th4uFF".O֜Fzґ&Q'*( `! Gs01u2ϵs{+wV9ث7°ⴢD¶1W f 3b\Ftf1²K}k>,wl~Z t{aO#].<Y3\yNbR1N*я0BFpsv} q5 1ҫYdC^AKHUw !x^F#ԴRg&XScnl̹q+`SY%9ی3^E&K8\aEN-CF<=?ZЧ':Ո}OG,}G2VVUҤܺ#{jk^=H^ 0sҴtڷݝU7 7˻ި- n@ TqLaFB7p>(#ҥ%킻 J TAQ).bF1F]os _[Un7<{jl*n_j ɴp(y313uY_G~-YF'OA9rI> qVr @ZQv{{gl-Ht2H-"TRF+ :w̗]YuPȬHo]A̛F1֞$&Mj೑Yz$8#2,39SK A_H#`7 ҫ3o9X3\F"-6k1 ;I fLӑZHd UE_ך4^8֋] _5uڶA4RWgρ:U]M8* "FP2Q}k.8v#Ҭ 4 f0`1犻(U73}>vtcn6l;1ҠstmBZ|FZo}]*Ց2ˁLe630S~ujxJ[=i7$^wqi8WPPFnT3MˏcĻWv=>Di% kJH!m*eȨe&Á |pI gYO]f8 8@Sd>]?#&y=-*?)PyUA&.HAL1Pܪ@-"O7i,d_ASX` )Y&U'!94| 3KHx#mۦ|gޝ$mO#eGTnBwYVPnjl6}3YQKjY򓲱6OI}fO> W,i!x W+eqt~?#`+Ȭ/2ÿ+:(L®jE3vsZ:ؗ{RaTR @("U#C2U# +q1[wUd. h%`c Dr{ԖoU"$*ęHRa}|>&e`Q@`I^{,D^v\QQZdBcyXp*ż%C@+n8Uc ؃^OCj =kF;EtV7{ tٵ[n MVjZ퀷RmOVm*x8'78:kvORyd9'iFb|9?v1{ ,IۊYbQ7ni1#Rv1ژ)1vUk0H{VJ2Õi-^3*`zй؍$\G }ݝ=%-T.>ޕv:#G#soHf\_$hB`UA YFO)7 rX0[8(y,K xq犳x4 azc0X1Ud2?0 ~5rVγb DZ9}-jy[3 #55Ϙ,s>rASdX_m} }(Hp>UBJ>MsԟZȗ=;q&8v,?NhX4qmJyhZwq9awZYZXhYZg'&i#5?'o>HXfLcz[뤭 ؍y\CyjO=j.m"Cęީ̨ޝR ojnNN1>i[$iBgʢ3nd@)S/#j7!JUB2/\P7`M3;y ZpHZ[ ֌$pyxGt%='5n_8QȮnk%$)^I7g>v--ɮGOBˆ~MnV20[U`S1^8oe_PLG\qYqQԁ%#aԀ sgz;nU7p? )32j*U=8$|Alc7%$jy@8ݶw]wҠQ&sKQ[I84qT8glsKJEpO#;Q11tmEHz{b"(epAZaX#XQZfO9j4#9a9tLÚLtV zCUF1LtTqR!0K[nAU]iߚrFw~ǓoRIPǿD3$Rcr3IiNi# ;>e=ڴ {_0_)Ȣo.I}.NbK=C#!2Md xdUvEY?`9aϵh_hc ?ݫsu(݂M[8lّ8#V%̫:MEAko>]sŹ>my~7íR{5ؼQ uNnW[<&F3]6W5Qela\D5r2^0xq@XBmS*e z QlIdm!RY;ҴU9,{!IO'iF1pkGI<{cMIvXRZ}xrW-,]Vl7JYYyvX$9_ _My49FTֆ@%܄=3Hk*/$Ou+"K_`![~vЁ$ RY\Ы:Q7jKGZvx*VO;Ձ<ǞBL,:9ҹ;M;s\\H )*Ip=*ySFcxcWB4.cWuNs:dS#՛+v\Y9횞?9C R+b՟LEd0d0x1F%Xa0,eiGoz!• fiҤ7J >rs&w+e$lW5DYNU@[ CGJ- $Nw,CZqéPjuuFM: £dSS"aC_Sª>=Bw]At vqԒl%-mU n,2֠A#I䚊Gc$26gRayMv.xS[-2Zp=OS]]ckbD)I_mҫk{osPjy!Q,8Hnbġq:~5Te(ҭnÏs C1 Lo}iF//+Dq([{Yd4>jr n8sڃ å61]Fpvii[4wH$δ^+=ky;U%$c*^,~zF[52#̤Dcl7\3UTU{qهQܩ$ wB̫]:,d#I2IaՔN/%IoSF~aNW,qH'mG6H#EnX7?JPyI*&3ӽGY9_yjX%WUy)_qXrN84O3LLʆt\}Fw]y20~m)Ž?: I*5k95[*({_3ܛʫR|qSʕX$~4R'+? E!Qv;ATIw^,ŗ>Y7K)8$UVȅ TC/PLaG ä́K+n*Sxq!$;~&di$$+9ݪRv=k3SvJ}*v6ֲqΨ#T,'P ۟J:$3+#HPj/qTP'߿L=j̷27 (8ªpõLH >T8 YK_,';gh.Ȭn^ ZvFTkGNyɖ\q5cj2LN~m\y $+UYM*AR䞄?Z~IHU_Paڳɚ[CWuQfW r>StmY}x$F+AT,x+ ll؅ER`ܚ.-!M@UxxYNH5]&h"N'V8)iw} 'D8a[7"Æ^BG;WhO+JWPaBzbQyه2svQ*K~)I ӧ;'nW4H9id.deS>QeiZ48L0SR«IaHTW,XA'֧]CVU]T"P7cƹBKG2P61+F̃v6ew{T1ʂyoVfQJbag\!88bǃ6qY:iǚwǹRg_sCOCx-4"pSʨ02VAUrd2h*9~;Xj ba{dԱC<9&`#qun?6!Ȧ#c`1JcpI.ϭ_< {UgOsR8-/NI{+[GjmFea9>15w"0u5~[ SK6F sk~ȶiUWl[p#61R9y!PGVf2Bꑕx'ji *Lxi{pwmMheSCyN}ޣ(!3ϹQ& RܞR]b,VV3Rˤc}tu*5|2jm1U->bVUr8<[ݤѺzҵdV^SV(8dopÜT$`՛Xc[T(y_qօJq0*jzY Kqe>^cb8Bsv?H2G`2?*}řR}7SW!r@1L#89࿦kB8ۻ6jrD>*0pCT5ocҬM >r=i8c<{r(v&T%H5^M6vU# 㚁W# GGf@D a eobmly-W,IH KU,'^ú'%N&HIvO'֫H99?~x}("c 3-DiNF욦[ I J质Dvzڱdɧ4qeӚ%3ITJ5w>OLq\֭m{ڸC S >YKwۃPY6ۅ`3ȟ=N9$ 1${uOК55@XE-MRđ]mVlv4vޗ :\;rᗒL7c4cj~ 뜩{]l#ہzmY%AU'ޛf +6>l`Sygo@w_i- WXY]Nd1X򨭧*݋V0HIn#p1\ܱvzi<*IA ,x7իIgp>ՋMSV쐍@u, 6yΒS*cV_d#sa'i>ӕ~ȤsV7?@5zi2$Vbؐ*EϿQURK\FqM=@WQ)`AZ;L^$l}9gZ]yT\]9YwLb#EeٷzIe>v7eLTt(ΎRh-VW#+I[S\(K֩`WKdS!~j +gjwH7ώWK*JArH=)˻i# 6G݌W8bޜVuRb @6}i 5;I]U@ɨnd'֙qy12G隊CU=,j~l,Ge5ɕ[& ђNMk^@јsWb#뚽f/K{v \zioqdLVl H嫒ʰs}hOrn3^Tk1MqE68ZJ9fXwJT7 3W嵊oV"!]HE ۊ,mb]"Q im n T3G<)?Q59.˾%>bYQn~S8/o|}^Juי TVJ $Kʍ 'Qkgc)*O I!:SF|=IMȊsT1-@ nΙkJ 8 ٦mICH&^d gV޴(G>ޕ#j AƹLjYU i.x}95i!Gn*0c9Aݪ[M/p"N^PEKph8ÿPj _48? ]Qv]?vp`=*3hC0x-cuKf>~SFBбu}]O'nA'50Dj=9s ~B鋝RbuOïWFUiS7,XF ~Ji5ȣr;M_$"ɂ85wL#:x?ldr>^Hv*hՈG.E*P(NfV`;5,!V-NX O=<bkcQgXڞ`p?ZHOvJ"Z͌º 2ts02}Ol&Y_jҭ ޷Y@+C ݚO)8 t3"s\O)Q©ᥐ@#Ue%\08e9VSgr*S4CH]к`2qWE@rLn?tۆ]Zڹ"Ec QVK?dӉԐN0& Fzs2{*8$P}٬ˈR * θ%t&&7"U?δ4'QN9ʭ8#98ȭ ,j!rq+&p:er_3ޕMiӥ~Zkn YU 4͂b=hVb2TP{kVRCvYDgҹT ?%\? r򬧕lṙ#֪>d#\r8*Πr1V4viF};{+R2B2HpR 1WX9y"; It|"$2˚c6i?ZVҡ˳Lt]#%ۨT@mǒDhNjwvj*,5}2{TZ"g5iIp*^F0Zif]9-T쬚KsuD1]Gm(R1m.Ak"d?jr= Tb%w$z^RJU\}i񉮑\A$}#)>Wf1ED퉏օVuTc^eʀ~M9Ȫ~@h%ʌUvA&JGUSǽ*D yrEJmK* A⛨4(ۦsr*үS*# o (9?^+H\ǵpFi((+XUcGo*^՚LfV-mVMbȪvH9 V[&'5&NTnΕ%~b_.[ӊc&vr Fj %b~G7Se-5DW`c~@$-z3ibqՉu|sjݴ;`kkN Hel#TrəVuiR2=Y5sED[%FnjΔ%yxP1R\H@O3&<O"ZGlFcN2q`}95t39sYw=ȠR3+6E>`L YmnieEY>%B{(n<ʑ.?63n%[^z~< S<;98ŸNBrn> 9>%BTj͸ @>ja`c:\,A@?ZKRX q>l*=Z'go$Tz $j,pHp8m9XhN]_VI #rZ?j͞Z 0X"tuShL qO 1;C#mic"3U._tS򪐃'lA X45Iwαݢg٬5[L߶0X0?jEj/Tip/nsQ^Ev?Gqt 3wіi<{KR:c3ĽVX(iiiFdƨj>?wnKwzÝWMe\(jq8uUrGI1X&HR@Il[2cv䅧unA2@gu1`Y\c>2Ǧi/0.=MiJ#59fkt ;7*ޱS+Ge0:UlD o1;[P؊CbAS&!@87L8ķLՈ/O5iTYch[6^ch9?޳ϰNzYNjYF-"}HyK[`rFZӖTb5 `%5ٮЎk K]J;Mm)EH犾UQUUU 63ܙX3=M]jk*9-RXOy9u5ϕ$g`[K)Oz֣T,uGށ(*vk?P|p)SfJQ7g#~Tc CZ:dջ7#9"<$O)]̳GVnS}Vt.W"c5͆=:sR$m?T7/1&ݾ ?ZӦ0܅_Ʊ0U3⺘9j݅_9!! sY0wv?*ͽٻ[m :~xbV.[ڬYv0>e9^V u`Vn`u->i!'AՅ2e(Y̎y#UJLr:+bRGSNPdSL?ɷzl*GPl푢95iDhcGa6ksO;P[INeH\CPcD?,PN1SmF.#"k$yi&ǔ}8RrH(*ekJHXcbI7j!u} e@r֧ q~^|/JWpx>Ԗݹ L_-+J>;|j}bb8'隃SHlhwҠs60«ep{;@'j2y]*AjsxZ*czGI@@ RnNI'`8"9!sڭ I$~Uc%i*Ul#5SXX_P`EAp^H>u;I" f\ͼh8lONlT\었EIV x=ʨ'5HsYq 5ŎI>0ܻcOʤԶ$BET> @Í&X+csҘxڤm&GHқz/HڣRtف+7EW2I#}j5N֩ip9w8Pv"ݱ( ;/BPFw.sT1dciKYp[S̿#՝)KݟB*|º |~ul]E*~GQTJGQH28(Rq:]eO$s\ζ5)sXZ%{hry8P UU0JXTm{Ҫ&!ڣ$TA?]=al'޺t-W5Y77 ܓ\vrYXkg2O$V$FfaQ"#Xx#$*" v nP>T>/1QExÒT{R2KrW{XM$l uX[4CLgҠVfbgtUf 9EUlWm9ڬA$mP RMkyf3HܚжAU}Mfl}?Đ<#I+{FĞimFe`)P,KA['Ijv\aUf$`tASBdJʠt:Յ>lB[IFܓQ;>bQiU`*%|<~UCs򎟕11`n1FҤ˺=GZeo6G؃RC(YC/WI36jj ep`28^5 Z̒HYJٶLU1j[EbIXQJBU0jFQ>HSP^<>T'[0A/};xLDgA=KR]͸R_.J[7ׯw0F HbEYqZ6ĢAUmc8Y7!@Hw5B_>n jy~ռ0sm䊞K2:K{uJz֢ilap}:z:#23b/$wS;OxE;+.E<)@˖\tRNPO6vFڸNjԱmvlfvUȣɭkKr[̕>"%:vExQM=fm41&ryq2'˓ɪFu` n[='5n_Vƭ_/LjҰrW5GCDsc>E3kVr 1,Z{wrVmҝpEN)VfaO:S)ZUaH$U4r5$%p3;>اW'^i[{+JdH#<>X,>y9&6?$3qT$EU!je?fs#tysanI]"6l)D3sKh| r FcR-/˞Iϲ )n1Ӭ 2 j.FOjʆUA,;VGjl&V@2WR3G0\jݙd#jHA]:0g!vgUI3D@Py\My#zUV?9$/" W` ,YHSh><2,"M2AW5dgs1VneDŽ^%A*/8GǭQӑ^"Aگ֪ {b y՛1rѡVΡ)|,c?Z7o<,Ngft%]J͌*>i\HN:t(vrc 0Hc֦FHhI#yNXP̹lwNsHXk޳,ن0Ij̴wYW#Z̳濚V9E?Xg,M@߼fO EubQ0bkA6bkPjg85{ۜy"!P52)~U8 VC%ʴd jjncڻӷ5 aK$C>? >d:odJ1W,:0*ڬ*uF'p^^5fQ@kgU%,$ =Msְ*ͺT /z#Wg~Q޶Xx$ʑҝz^ŀN-nHaQm1/,BI03U=HA3zѲ-Phgw_қqtb $̢@~XU}F@'1U{j8-l8ˑ8Z}uE6V9HȤӞ?J&̟0,<~Alǖ<2b&+r}]+r}'gb?Y4Pj鶱V?z8bԮYgRa?K!hYG=F\.j}-DQO=jqs c}ȇު4l6rB?mbUq:Vz:U?1cT h#㶈gjI|۲[P2OI22*Ky$,8K{ ҇i&?(c׊/%-ǽ%ԒJXqjn |*֛XO_Jlnr7a&ࡓ/M(?y03iu0 C*؟KvΚٳJC4R8;cXnPT"'# N-vla*ŵIc*kKA~v;ڶpN~Yy3 sVͼc*a95+f$摜{Wwϕyjw#Ar*ݲ{s463m*$k끆#D~ Jn)Bg@67_mbYqj3Ѩ.1;B՝q3CjQ݁j| b5s\}kSVǞQ`wJ#?Z#JMlٌ)sQ\!cqE^g˰7pQN0ڪI&ZG6L]92m4ll6L[X-D]>1v(QE<959>^9Sm )kjcQT T6 Yo $TY#'8=鲖,cҪ3ʪyU- P:sR$]ZO*~F+#w? o=})&`+JGjG9`\ޫݯc+&@B>+1?Wa|;vjA,TVEWyn GעXTpzU1W@K|GC~kF]ڴ5gIPPfJgq%S Lw |FnGZ .B>8 "՘ 9Cyٴ+yj ,U|᏷j;K28\*P]I"0 yAwqd<ګ\.YH1MtM@cѫAUcMN@DpP g$aS;$/߼tPO3%ڥg&W$8-q$œ&:Y^BwlTS$)cLǩwm$D82pc+% <%T!d#= U@O*.]G1ؙWK~AQ 2?*ՕD֒*C!zWdeNbE%Tu>Gwl1G Tq|[98"HEˌLNj֖[NYc}IYcO69T~t;ͻy5 |M Us߁MOM}mt|Z`*=}kޫ{z|pEpZ v EUĚ{0M &əX~&O#K2; *dXdRYE#ˏ֯3#S.XnjY>SUѕz6!Zhn8rS̬2Huoa'rybMJ[rŜy(XfuaR˛eA{ry5R8q#'j*`OZ|MV,%1S[HVBG 'ZHeݜjdjI =LWn3ZV!^3DVY6p*Ε6Hn*ɤ LٮWiP#ŷ{܍#F!kUUɪVFpMV޶ˁTŷȇp"Kv%BV!^ܮc<X}ޔϔ!ưR 5_ryKԃEQ(:U!~u5 nMH6H08oSR(&S ?AVٛ zQE 0.3a*˵v_:HWfxLhخݡTQȭ7Uޠ͸3IѿjIyD'Lbp:Y]́ݝ9OmsyE SP nSTwu`8ڤHyPQm,#IpT{RY8F2Zz-7 Te F2N0#l0 M iTyrd\CZ-y1k;?ZľI&j̯)}jm>UU8ϭjEčjms'e@ہ[l})-zUNaGֳn-6T.eN?qn l^%݌LF%*0Ҵ[T,>r85Me"v^+e`P3#8j.Jd0k~x"L{t.:5T#0eOsX(Z]~I=Y2Q/ R+ˌpKfٺ$6zu-[3(;g &..0 Zb26Tai`Щhʰb}1NxRHrPOqH2cwj X*;H7݂9*m sJ*rZjѩ1*Y㬪< R/\JZhN`au~0@ߞyᄦb6|#%K<g^7h Ӛņ z;` U=Ҹ'_I%рc`֪N4@S;IdQPx֢i1’~RʷD'"?"HAx@(:{qR()h)h)h(+>+&K3+H1bsM,V,Vi@]YSwj[O"e@rN}˜9a :\VvDr$T\X4:~@<5(f}9-$JIKs֫D-+<`zݻa90D7"r21Õ (e񸁜zq[avg@`";0F~UZ~eqׁ+.y.y<܂1)#w![\OȅS̆-)8ϥ8]8wR` ;r.riJ.FwtǯSٴ77/iCz]uVW4dUЌ{R4FX_dLb@K}C&c8wqcivWn韖e]8Գj!2;qX$#r0K UI_X2_%pO'-e'q $2+j9)KX98m5]Y8##iZc\>WbRJO޺8k*)OZʁQO0T梞PqO-ayYUFIl.uld{ ZBa,>T֞B&_:Sa,:I!ÞHU.VziP(A?ŚzdYSLH'1 JtC1ǥ:YLS.PWdKs:*vI2A&a5<.~L= מe o֡|ɑyߍEmғ?MY!.xUQ1aSU]Z<}>K*[#95oRPy8ϵOzF|sf3I,JT$68#?@j:L85s ^s(/+O9ji$er|;VxZt.9B \VwAz5 7;~`0Mtv11ؑ[Ӥ.9<+ M۞<*h{=zӥwO~ܚj}}X.=+e]X r85->IEQIEQIEQE-QEQEC2o ^ejV\*;-UId ²%fKuVpڳefXT0SJ_p2EWq^r~nǻLIhNP@nXf-,sUP|zVڔ$dzV5ҕFW#ҤT!H>٦4,bP:/Jm?0ۮ;6K{h`KK9D0)q~@#=U\1{UiVՕdX!+LYΒA ?NWyBt*G5/c׵g ;r)6Da?jm2d|j~zS @2}N)ɺ0q|#dH"QY'E9^9In7Jæi)OZm\1|[WP?`Vq#:(?JˮN}+$/ANX8?r'V՘^&W#u|w0x~Dl)컦]voct7J2r*+lV̯[q71ȭYG ˅>hڰ? 5pϠK㚱t!t*i~3qVVYO˝خ$Fa58BQ*<ZɼF~#ϵZg?3>OPcnb:UKjw#!Qp]}w5AfГӚJ͵7]^]өn+zS;i7xmu d+i][ QZ@G5|6zcKEQIEQER)PCsqԈUn+MqYmsZ޷GMB٠bT Cs* pYIw7\~kK i=ɦO::7fM*ɹ8W P} \?*>Xqc,N$H,>$` :(UnI0oޮFWn>r*D =0HԈ5 r7@P2 ~I6!A@}1 ;֌F>lϟ*ErĵC\# LeqOVR;SmW6Ӗ9)6Jye,ukpArw6u?f E$ C)#V 8=sV 䡉vQAq%<{bu&^Z20kcQ8vld`9X"ӯ8Yr r#Np\}Ӗ 9j]Xp2=9X+H\Qv~kIc6HW Y;rknw0}kVuf]HC>u;l݃Ȫ[i,ZIBV,?:1 sZ.L:dej+to~PIn2Fr7t,p? 221⤌+¢vH0||n%~Rx>]:>.T3gڢ`Dq|4dW IpvCVc$( 8Z6EV5QU|W+IjG6¹Hjo)X~uP-9^ U9;c5Lc=qR^/)u`=[Zq\[njpحTC,8MTE=Q{*X/a!HR8ni-V(\\|jِhe6"$$j;X!G$s祚7 cM8UW OQU,U#BI=jA bIYO.l$SW \Ӿ[ #p;?PP2TT-K3yXd1\FNc^ب1ϷjGTOƩAƞˈ%J=Jk(#(~JL't {TPۿ灘N?*]6kkFah{v Nɮ`~u,O0NՒ'޺F!djߍ[${V"X7PI>°羒¡!_w ʁYy$7$d)нDbvOSSwľZO.fQ}jƔ/T|Oz[á9\ս%U&8zƶUOʠ{߰S e^j:E# k ݤ]SRc @bsti~@wgskō[ sXITFbeTa;Ӆ"I.?/jX%R |Q"2<`ś+(WIa=[}.0sȪP)e-7ӤpG2Oҷq,k"*+F"akt<өRE%QER IGX:Ռ)xk'Sq&OObx4aX 5%9%bb+S-ojyAYZv˹#+6P^a;w|{jNrXw]+s_՝(B5<|ӌn` ;|٪`yAH[1vF D~DyZRA3Aelt3rTr}T#E8l_(dÏZ#ܒ@WέZ:ПF}閫!8Tj}mсj6dm*}rV {jq s?VŽ\ش>V({S [㢏~euPCd6836HNJgz\)AZAadÀzfql׍2 +R<\3G;<'k?L{BH,_-FWh;dCZt_ى?t ZTeS:fI!zsӊkC OLjbmb]+±F+CKnfW4s'?+OtJ> .F3ǰ8]FGH}sQeF#*B1Xe P/A[ķAY x}Iq^?gMQܣzfGRڹi#S!d.ښĒHqL|8L|ڜT-3IDKX,rI@'M#Fr <昧iҤ9*ހqVu 7nFM|qC(eG`|rZE54X2m6=ջlpOcr$#;~O~*lcv!Jģ,~o֬^eeObj+)ew Jv 8XsgYV,͂ފ3ZI"%fcW=N|m}]$ӑ.sV& f;+'SG\jtDIn.0FW~qcQcߜr fKĩrG#К!.!YWE2 ZGbqYdHPӥ9cMzv}nD 1Vӭ3m)ޡT\!;0{9IAq7آH`ت'C,cEESK6hT/#Hg* ?4啣|fl1ܻrҨ  jy|ăw h#c'$ҙ5q?Qj+L, ջ[4Jya2HXpGZt`t9X[:V6*DkZKxsc>%{ւeqXS((w9\G\Y&m+)!Ryjv*^P6j6o|Ā?N*Q:T&: 臕DvsF~c;U?3ԎoĪt^Z>[1V#֒ aQ U;6p:!?T8:) dQg'9F~= N^xS:phl=iYHQ!xd!|„3Px?ʖ,|N>\zt;Ap)ۖ9WsWR"EL6Z Fvm"Uf; ִ#dǒmàS.a $>j vgp50GWU؄c91T-Y" cf#RF}qTH¤a =*^f(P^*Mo ֯iwO,s֭WHAZJ(+)FrMqPA8n^fa={Up`B>\o[ƒh1# [q*IFƫmˑdK ї"eˎsHibA9(5?ږw ~z]k\N TK&R"fm"CxZEb}j2;b# ۇ+HG9d̜SIm$d֧y0gJl3ƣYj9 \KV3eeKmkӂ)_ZSd9jg˂0EK}̡ KuqdQ+d!0%H n-ʶۚ-7'>_jߒX*+EĮYGNkcE`7\gHtcDSWSN{ȂwWKșT u:gH:/Et:'MW=2HIW{u5Ưuu +)xSqOul5ؚн'FqV.-6nƫ\Ivxg~ޕRB۲ĴzJ#R#v]"[Y&V8NH*힞Ad{`ÞE\iI^e~:w'b$HSVN ;+EPLשD>GFY12`Gŝk2~TZxL@KG9Rɧxw?FKqhmr̬0֙NoШRiOЪ~iL ;PZۭ~QEQENc $\[d]'޹scZLF LEe7RS[ vol_9cP&2*<CU8?׃ҝq!X TEeԛoqOeĂERN%/lY@[ĚYCz6R.UF*S2/QD(4H}HzBqGG,ҫK m*3$G\ZYZgsv/5*#lS59 lR1_pCQg sOC,28RkcË*[ #+WDYٟ5^zV`#֋}Py1 so @ ֲmH(ިk ]<> liG[WE`Zm'mjvcEmo{SuL/QSBW#=BNpH^ +zVL5q0۽;|dx#\~i\tdzhBr*E8Ig {TY'|JhcUe!~ҶD豱2zXESw/˨Y:FEU^7~qWt}0qZsoӣUF[M^m˶{sTȳ3.B۽ŚQ[,(l9$Ϟ $8w Hw"[0}pXQZ68`*KRRQEQEV|AUZa޵ö0ȡC\[c #qpq3؏J& 9'w^IUBm722[F:K2sڵ DX>~QU-xM`[x"$=5KQ0G8>ľ^^m#Ui* Aɤ̄ $mqi.58 |zI@!nwɫrBA;@vɫX\|u +H0a*Č3W1ʩSi.2aeV+OåOFXd"3$f2XzUܑJs1cV]2^ R q.>L;5i=+GE"r8* lY'pIYwaYאh8^O$KeK$-`٩{${W_hc0d{W_F_LpÜu7$VnH%N8NA.Qo3kOJ>5qCLRiIdVK0\})FI] C$ zVXmH`XrEl[HۜBVTP*O>RayyC٪q_c *iuXڷonI XMX9RKYBF IZ8K@TEE?JKEQEQEPe"wR;~uN+#o$~\J'Së ơ;ƤUtۚ,OʝhnSќ=+RG 'ҺɄQQV́i*?yÚѳ`#{N.]N[UnбSTJMpF 9f&(8D/Bz_ZVR٣rNno*<7j^b5d pݪ͕q=-Y>pk-@𭂿\U-RmuwDXW,Ä2V6VLn7 aO K4⭃FmSEgpQ⴬Tv.\+;\[6+DJdN≦I2a~]Ԩ/V"g;Hg/L?*/$!\W=kkk32sx+ic_?u+gX~47Tlp|y*9/JA IV4"22隽Kխ"fk;Pnʨ˛08:Lb6@Ih8fDnq].wlwőާ2OZM\Z-Ȑ+R mV'%qޡDzV|iIH:)⌿> n4L3m T#%h]_Dj•~+%c媜)^)e?)Ԉ8@0j $W `Z}--QEQERr {OHXF`c>|8[Ov1׶R"[<}*8UsW":RXe LLNAY.[?_a%ԤO>W\Hܘ?S<<> cO9UՍ6CvG Кc(u8Oi%yrp&<;=Ē%9--'ƪi rdQ?{+P|d֤rOf.!i+ŕy1iJ3R%ܗ<5QܝB<-譃tKyg\U8.fx,BPҤD; wU$cYHk8a ۊm$ս,L&;oXn$1aĖ#ҪK3+2+R;(/dk%@=jKdapI@lXAXm{*uo@7YBM88ZҎ46 I!.Np+MP'&OQEQEQKEV$KO߅ajSdQg+/P*Q>37je|pIlT _2&pNpj#u\䐦[l*^#. 8c6psG ϭcc=!x8>-q~zHXcPK1)=3L'dsljR7uңEdx9Q#8zbKMDi{:[%6q[tcۊ}82fDh[+)%֝PG&^Iq犟X0]7CnޟS$–r$x M*)j-ǜх<"b:ۥV8v[IHYX 'p-ǵXQ,Q#5Q).R*,BT7r;~,s4p R m9Ί3ZwM4p:*^2FCz -cX :Zk5:@A<[\۶HB'=9ڍ0~V^B1[x^wY35Xn+ z|ssJK=:T vq;Uuwϸ+8b@Ē1Rcn02A϶bRh EdEƼ [k&>l[Fџ@ $T9 f. |x@b]33ڒW 8 9YpcP1%̒NtWl0[oܵo閦+}ֽf ߽OVzZ((((2"jk *b5a]Jeĝ ?*H5Y0Xr&D{2“,Js3 %p9+S\[^9 7U+sihpPdwhe9(w~FEܿuQJ{Gop={RjBO5C: zO$\".'8Egd[9'@UKb۸;~-`33׌KH !rT4<@!Ү+V{uEqYV-bA8!`ڄDK$6 xC,8QM3/G.I2Xh֢IV\8V4 %n[fi((((+9Pݱ)oֹM TݣDR$:N!o!*H5=f‚E~X -$0KM𬨵&e)F=:U5720=*D*eKiDO#{UyB! R 𿙩VcTj@>^EW[9 a=t@@~ր8Y{'{U[y ~5 EcW>̅V8$Q$BkHVZ 9+9c#FqOiD*HLgҤ2B}*O01ڣb%~R1W%)z#F˶lQ`Wٱ0LީJ\J\3[XX n*ƒ5|Φ_m] Bn =Of 3Ys2v+U-L+SSA[|*g@8T"fc?TJOT$3+sU\\˳ydeʌu<̑A8P(uCƑOrB1R<»m35˕7o]`}k_N qֺH c#jIRRE%QEQEQEDk)`: [H±!e/[fϭAkcwt5Oƨkɐ8 #Ơs 8JʳIPgr&֨[Z&uVqO `I2*#v׵:@wa(F֠Ԕ$E;$ry%vn#IE0LbT;[f1N2ېY22+dK,FUr$ViO8AqҴE(!IhSyN}혅"%#JuհP+1֙"VT@sUPrծ.5 >@Y F> d ,\1XsP[# !Uek'Tzl;XvT.{#=Aq'X(oƪڮ[5h;A7P1X<ⱒgݜ˵I${ $#ޫޕ o*AF)L`B)``n))b#'nrتЪ27d*d)r;{TWNUq<*Kmǔvb a>cJͲ^~@V]tQEQEQIEQEQKEdP#g-4:H2\ZeE X{v-vaX6 {UV!ǎtmFb: k"i e\HGЁjorh'SIBȣ3˂[!XOɟMIzE$cRt{TPQ#a|P['TVc@ `sUnOCUZMD8ltu7$ݜV WsW&kUb'Z%rlExV 7,qTO9%]v)V;d/@RirrAK{ofʯAlWV>n1<=)-g іnqU氈̧bc2ZFe Ty^doS,RrԶQOB$s=FjXdDJt*d&}ڮ&uMXJKkot$όҚy]n0kG'v泝t9Y;y0ŋv 5T3ݏOV# ejǓ@#5E 5==pG>b)s:cA=kn>Elq3ZV_bT z֧/EQEQEQEQEQEV}ow<=ijX,;yD}iҌ"xŸ$=䟝@iȁNsź qGdBdH ;vCY)35UIUPf)]d6*7o5ܜ:sFΫ,=ڱ<}*$vuljOJw;ڤ<$xJ8U6L5gN1s5wM%2&,Wj$>dzy1GE4o"8`}a$G"r=3Zur+n4C Oz1&C3 ,O*xffaxfxC2HDxDqw -|67]*[F{U_bV;U$t !ۛdeW I<*6$s N Ii}ojImڋ{mN+ L}QUc>wümBI>CùMJKXլF3p 9W!RQO5v&#K1E\k^F.KZּ6FRB_PdIxٔ*HzUͩ$T*SU4hkblcIcڧV?x ՘wrk~(Z(Z()(*Ie`K.}>yZ^G5NMԃc?!Yw/1ʖag;s;E)U<;Kts'1\\Ï֝W* `Ŵ,Tm[kr$vr)-c7[7856aiY \PWEkycK/*+E$j]l3sJ jALUB :yL2uV<yܤMOg.mf|e'>TֲfHeH'{U-;yLA^v9&~A늴b[ R9)Y85xr2.P-LyXZ!OZ@'.#hk"%}Ĩ g96r$9 # Ts؋pmVf,:֟{[,d^Z]Cʂ1PKdV^6 \|泊@|ǚ6F*}I@Vmb( o;TnQc%=U Z.͜o;sp[`薿gVn $Vj`=+r+B()h)h((*湖`)q&mʾvFڼ6Pqܚ>T5D!; )sבǯ"rB(jt NjT4Um Qs u\6~\O* <j9ٝ@\frjxт9Szѯqԑ6gNESUE?* dWG2OK Nq`S):1 x 8oTwkŨ[Bn8}k37pv+HU،j;x1)((Z((((( T` \cTRe:GT@^6P/EfAtܒG˜T,1Zp7D팂Fl}*yW(N:B1ҡ6>OJXV](âQĀ zUxYEb4$Y/8Iv؍Jojc3y'{UFb(c15)J4jFu;cVV\cj/ER}|{a;Nv\Mor C:am.bt I2:dΑ#xc$Eq"z1vS$ԥF!4@Q AN`}qĜݦo%ypf?6;w"}kg`18P3]d+Y.UtrGkH\sڳ sw/W7*FGrHX40]Gz*4h3Hj"w"Xw5q^WNM20yl)_T@.w aH5$`Sc7 U*O h9i<SD;sRᑟ=GQ{Xl,`Vu56LY2Jnu?19 ]_9簮BzE%QEREQIEQEQEt'fB8?aJןʲ6$ Uy S%9Y۴L VUer8rˌj=݆j"л ݹ (x꽮 !gkH~Fsަ'{HN>ip3zm]ɳ "ջSpqCɭT|TWH)Em%vj|*3޵jph-N 5x-P( >KcVZsAH+A&nvYp>d-mc|VBͧG.N՛YAU[YQy]IXpqLҭ%IۏJN7D`6,ǚGWy7&CϷQpxQȨ~V3McaV9QΨێHclTR"ڳP15%buvBF@?DH=TQDA?[vGX?qGVfCL?e@zH*=n&5Fgw%5҂OJI^TZ8VwpkE(7bj;*i$3U X5\[lY Չ#8 d(B Hs//&]Ubܮ85FY|I{UIf.')VCګ1ǐjG4#0`b3Spxjv]+waQ8R1Mf28d` i>dc=إzJxntVFdp:UWF)|RjidґUg2![p/VSn]Ub*&l(Ue zdmre Ohyw{K0j(c]P[;k_)#KRS((((Z()(Z((((Z(((((()hUrOt_^V]]mr#W]Yٺ0kCMLVxv4yAկ 7(?uoND]tKEQEQEQEQEQEQEQEQEQEQEQEQEQEQERQEQKEQEREQP[Ct'0=ECsil8=EEqm XcJrORhB94[l!M9jZ(((J((((()((((Z() 3EQIEQEQEQEQEQE8恜s@(((JZ((((Z(((((J((((()h(Z)h((((((()()(3P)QEQE-RQEQEQEQE-QEQE%Q((Z))((J(((((Z(((ZJ((()(((JJ(((4(Z(((((()h(Z(ւqґبƆ8P99QEQKEQKEQKEQEQIEQEQEQKEQKEQEQERQEQޖ(()hJLb1@(NQEQEQEQE%RE%REQERQERQIEQIEQIEQEQEQKEQEQEQEQEQIEQEQEQEQEQIIEQEQKEQEQIEQEQEQEQEQEQE%REQEQEQEQEQEQEQIEQE-QE-%QE-QIEQEQEQIEQEQEQE#gZڏ()((((((())h)h((((((((J(((((((((((J(ZC␜Q@(J((((()h((J((()()(((((CA@v-QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQERKIE%QEQERQE-QE-RQEQKEQE%RE%REQERQE-QEQEQIEQIEQEQKEQEQERERQIEQEQEQGֹMJMt[qfvQW|g$qTb/6zWAޯUEQKEQEQEQEQEQEQEQEQEQEQEQEQKERIERQEQEQEQEQE7M.b:0qN(()(((()(((Z()()(Z()())h(Z(Z(Z(((((((((((((Z(((Z(J(((((((((J((((;EQEQKEQE-QE-%QEQEQIEQEQEQEQEQEQEQIEQIEQEQEQEQEQEQEQEREQERQIEQEQEQEQEQEQEQEQEQERE%袊(QE-RQE-RQEQEQEQKEQE%QEQEQEQEQEQEQKEQKEQEQEQEQEQIEQEQEQEQE--QKIE%RE%QEQIEQEQEQEQEQIEQEQKEQEQEQEQERKIE%QEREQIE-RQE-QKE%%QIEQEQEQEQERQE-QEQKEQKEQEQEQEQEQEQEQKERE%RE%QEQEQEQEQEQEQEQEQEQEQEQEQEQEQE-RQEQEQEQIEQIEQEQEQEQKEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQIE%QKEQEQIEW ?뢮)(()h)N^NS(((((((((((((((eGQKEQE%QE%RGzUN^NS(((((((((((((((h()()(N^u:((((((((((((((((TuQE-RRE%QERzr/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES*:(f)(JU-9iuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQL:()hZ((Zrӗ:N((((((((((((((()GEQEQEQEQIJ/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES*:(((Z(UZrө((((((((((((((((QtQEREQERR*ӗ:N((((((((((((((()GEQEQEQEQENZrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2袊(Z()hZU/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES*:()(())VNS(((((((((((((((eGQE-RQEQERJN^u:((((((((((((((((TuQEQERQEQE*ӗ9{ө((((((((((((((((QtQEQIEQEQE-*Ӗ{ө((((((((((((((((QtRE%QKEQKEN^NS(((((((((((((((eGQE-RQE-RQEQE*ӖuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQLTtRQEQKKE%QEJSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2QE%QEQEQENZrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2襥J(J((iޜuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQLTtRQE-RREQEQJJu:((((((((((((((((S)QIEQIEQIEQJN^u:((((((((((((((((TuQIE%REQE-*үzUNS(((((((((((((((e2(((Zr^u:((((((((((((((((S*:)(JJ)ihiW*SQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2QE%QIEQE-QKJJuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQLQIEQIEQE-QJJuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQL:(((J)(Zrӗ:N((((((((((((((()GEQEQEQEQIJ/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES*:(()hZJUZrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE ?諢((((J(()h)h)h(((J((((((()h((((Z((J()h)h((((((J((((J()h()((J((Z((()h)h(((J((()(((((J((((J()h(Z(Z((((((((QEQEREQIEQEQKEQEQEQEQEQEQߦ=Ҋ(J(J()h(((((()h(((J(()h)h((QKEQEQEQEQERE%QEQE-QEQE%RE%QEQE-RQE-RQEQERE%QEQEQKEQEQEQIEQIEQEQEQEQGZZ(((((((()((J(J(J()h((((((()h)h()(((()((J(J(J((Z((J((Z(((((((J(((((((J(J(((((((((((Z(Z()(((((J(J(((((((((((<=(Z(()((J()h(Z()(()h)h(Z((((((J()h((((((((()h((((((J()h(Z()()((J()h((((((((()h((((()((J(((((((((((Z(Z(((((((Z(((((((Z(Z(((((()h((((Z((()h((((((()((((()()((((()h(Z((((Z(()()(((Z(Z(Z(((J((((((()h((((()((((((((()h)h((()h)h((((Z((((((((((Z(((((((((J((Z()()(((Z((()h((((((((()h(Z((()h)h(()((J()h((((((J(EQEQEQIEQEQEQEQEQERE%RE%QEQEQKEQERE%QEQEQEQECAQEQEQEQEQEQIEQEQGz(Z((((((J(((J((Z((J(J(((((()()((((((((((()h(()((((((Z((((()()((袊(((J((((((()h)h)h(((J((((((((Z((((((J((((((((((J(J()h((((()((J()h(((((((( ?諢)(((((J(((((((J()h)h((((((((((((((((((Z(Z((((((J((((((((((((()h((J((((J((((((()h((((((((()h((((Z(((((((((((()h(((((((((J((((((((((((()h((((s\ R ---%R1HI'zZZZ((((((Z((()h(((J(((((J()h((()h(((((((Z((((()()(()h(()((((((((J((Z(((((((Z(((((((((((((((((((((J((Z((((((((((((J(((((((((((((J((((((((Z(((((((((((((((((((((J(((((((J((((((Z(()(((Z((((Z(((((()((((((((((((((((((QKEQEQEQEQKEQEQEQIEQIEQEQEQEQEQEQEQE-RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE-RQEQEQEQIEQEQEQEQEQEQEQEQERE%QEQGj((((((((J(((((Z((((((((((()((((((((((((((((((Z((((((()((((((((((((((((Z(((((((((((((Z((((((J(((()h(((EQEQEQEQEQEQEQEQEQEQEQEQEQEQE-RQEQERE%QEQEQEQEQE-RQEQEQEQE-RQEQEQEQEQEQEQEQEQEQEQERE%QEQIEQIEQE-RQEQEQEQEQEQEQEQEQEQEQEQEQIEQEQEQEQIEQIEQEw)((((((((((((()(((((((((((((((()((((((()((E%QEQEQKEӝiv᎔斝KEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE((((((((((((()h((((()((((((((((((((((((((((( ?뢮(Z(((((((Z(((((Z(((QAⓝ4R}(W7Jf9Xy Q4F1|q, Ǡz5r>ol֦|A<$o#3իW(((((((((((((((((((+qU56s8/$ےO^*Y>Úw%'˚KuR}OʦH'k{y'txϩOUtC+IZ6rBuw(rmWl/|®V^(((((((((((((((((=(bK7 &bݎGI+FVc'~P嶌w=JASGBGaTf_j>f ?CMq@dڟ Fi$ʯ 8ҺuD#NsR288՛Dҩƻ#,w\䟼rkd.OV95~ h((((((((((((((((F[x5f&[#]H;ʹrOQ;",i1 ]p$C43GsQ/,h83ʈS/8fHr1LV3l<2C d֔rXYP*WR `}k>k0W3K:#? 1\dQc$LqM"s^袊((J((((((((((((&@8 w0EWNZ^hUhozԯ[n5 *(T?* @hkRmْna:y\dni6ic 'qZ~ոF+*ՎUb3)LSI'Xn!wJ^XPscӭ!G$}A4icEN0FM0fl1.,XaR# 5rjڣQEQEQEQEQEQERE%QEQEQEQEH͵Yi rHeqQwZ)q( pqȻsWSm>sTY_\ܘۖV5̻'QP.eidҨ4]sU$ۓTy?tԪ6ߊ*33+_ƭGI$~\<qf--Unm=*m 1)gtbCPj%+">ҠR@ PC1T<JY,T{YA f_/<p>I0T`\r9j%q1nۙrW-6Tp %G@=I{|FYG\،rvrV(((((Z((((((uB) z(?fO$.ʲdc99R8MBWl84S"ȿFW=j)ue"r⛓$yQ=ۈ#0т1N,[#Wer9y3RI  Cq#.˹=E ?oj]lQEQE-RQEQEQEQEQEQEQEQKA GE8F( ( !ֆA0 0A%w).5PO'Q֪\ rxTRG G?Z,apƯFD3 {Gj-$#bU Nݖ%%[-6U ҫ0D_o_Xm@Ggsؔ5sk0cfdLO/ f_>_+lfbeӖ#83D{-gfڽpyj:C"0S}Ftzmb!ǥiGZQE-RQEQEQEQEQEQEQEQB٦`)vsΒܟ-OQFu @\I"$\V/6]"~{cB?t ~JUq'H(JqTڱCүU+\x|py;xr$޼R+dH~U&]Nuj*]^TOj(fŒx20/$v!rp>]Zzn-v$ yv FަYF1q$hmzVZQEQEQEQEQEQEQEQEQE})` rU.ȍ'9ZIOMU>vٞ]1AĀgy,Jq@؅^h:"T2 2cȊH`2>`{jS5e[rXQӕAjsICԝ'IU9 fcV,陱®?kv<<8DZxw*P3ϥm\68;K{kNf"&sTnsܚ .Bszi736j ޘ[;A̪8RFHS^bfɵr±twj֝@"Lr>6[ު;W"$`s{֌QPu88O. \#'+ H]IyI^((((((((*Sq v҆YW##V}IQBM2s~5^FU)##?)P c)!5=9d}"UцWZk6tb~_z+ [WuL`I9f Y- $ן +5I^ JX8o1u֘qץGL),yy[vXU,$W!gXmaXX殿d%TuV Sf>|aN@x\ c*c˒f Hn􄍹 ׋`֙aB609ZtQEQEQEQEQEQEQEQEP:P:I&#9$?`]]e 3Y7&uQE6؜M(#zsRh{1SrԚe@W8Y/˃!-_]砦[t]G"iF1zmj\9Xr0'8jc>EFaTnVas0Ui9PA+9?*BcՒI!t^=7Cpel>viFd1H1F*⥒Y?zH% `f+Q`}1닗K`Y_.ރ,5IK0?1LF1}jq&$pM6|ne^).dڽ5^jhH⋡e7lBR`˹Z({-Or5=oV9vR_2l!c෩w+5ҤG参ަO0`§+g5XZ`rkF)((((((((g>Vd̒4=7:󮢌p+f[ UوX;:w-Z+lS*m_qG`=oCq <pIȫڰ\g,/D-6@'#k>Wk}hN>JR1o|b5uWܐD{S5֢e?w ڛlEEe'p;Z?/O9‘W/>XZqML0?j]61B~lK[Fy]Ϻ&X/|q|M.wUG|L͵Ɍ'T6r-3:dcHl.\ ~5R$9?Zv";$Ԑ‘I'Vċ ?V><1 5j,p ąbKJ$ XOhN9f<"@}Ԑɶ9A jrO׵TUN8 Cʩ<&Y9,jtUEQEQEQEQEQEQEQEQMp Ulen#ʵF*̹@F0ws+ӣpG+"?:ќg3ns>k~8@ sS{s֤e={w1Ny$ g&Bsɬ ɐuo-$qIX4|x@Fsp6Qܩtv:}Wu/\z1c|ܴvb(4H_=T1nRq9nK(Ⅾ[9$j$)Lww U x3҉',h~^`yC*ʂAcԖjf,TnBjB 6Ri@Vl8q|G_b\B})Р.H7*.4ve1jsK+n;pd{jqy̝> ,$3*tu5$b[aWpS,aU%Ic&<#$ *lH׀*ARܸ栝oW_]QEQEQEQEQEQEQEQE;G@k+]g pg+M30X|Rv FAANQ\|t<:5]'^*ź\/0áry3'ʠĽ6w &eZk!U$1JpM|#?(P}u;eZ51$3`V> OSY[J&3q2" Fvnmk_H]=+WN\4ۥ"T8j~qKFjcQLO }?2gPXnyz/YeAUV["AP$sPF ꥨYD+c5F]o-g8Q^M_ݾY[QqWG||0jܸa+ax K7V0xsL%A{RWDcP!AR+; Up'27U3 'tҫ3V5VY $|cF* O inS?!QBԹB`]ƺJ+(((((((($wjkHMͷ ⢒ugڟq @;bQP_Z}l|Zz>b Iڱ2W'#ZF9H<(JNcR1֢nZ {XUK)Ƞ}._&.~R.mO~tbd8ȮPMÕȼJ95@B;7$2NqŒO,qY7H6+ۦ)ܻ ;dvҭiR4zFا#Ґݫ6 CV@g&?nT KW5FYXGjtةP9\21S ^z(OzK)TMEd ҳ +In@))- |Ƀ#i'$2 Y($?2n\Q%/nƺJ쫣J(((((((((ց֊1+`cXeܧ9ڲ<}8F0NU'bE' R>!V>֙*Œ|d]A2b]0ȪGL*LHDQ C"?}"p;5k h 68 A^k.A! t~]|'<lW5?u?=Kh;~Af`p6w>((ZȩmT=+Z=!=F0c'I` ./-ͺILۧ.ҝ܈c<}((Zb02H% }U K$P>crH&S 1X.稬fXnUv/=ŻkjЈT6SpczVuEQEQEQEQEQIEQE-RQEQER⎠T!K ",dU;NEI9 /f8)\mPpzSc* R1$,ilUy5 Zi`Z./E8jJ/j+@bıD~1$֓7v k3෯t}5}b$*N+#VVTYCOjϾ |H 3S5 qljVF1< IrFp*{UFj[XPЇjSب]=Q6d )mE?mE+n6:[so,9+U>nV,~ncW=ECsf:LF 2(dǽ68[8)>8&]F$ ěOJ봮(J(((()h(((Z9 w]VYVex@HXDL~aP,9 dp-&˜#j;ANsM5Ts6nelЊvKXU.y9O4[jr=ՍiI`# c/Oz[L Ouc_& 54ao0XiI>\qFsk;4@9+%!b,a[ t{!bH)#c/mH:pVhwU5QEQEQEQEQEQEQEQEQEQA@Cޙ3ul2jQp#uJHٯDwҳR<6Mv@jop0$}σܹ\"WtEwF՛LU jpK!#֪B"{8MWQv c_:<;+B5f$>]X`Cm$1RHa*F1(!;F0b߻Nu5Whf-.cMWےZ@U;GSOWS*0Rg95.RE@ *X$puR h'=o)X9dQ.<0.|Wc\nNHQG  90a[d)ױc;7wC==)R,bH<O4;['cOaL"&H*y=鲁庮q(7 ֳQF}.YGTOqֻZk(((((((((iV!^~~j8sY 3f3ֲZ`R>ZpsGEZ@gX{RZ槽a؝Ojծ<n/lUF"DcяOSYi#p5E"pNpǡFf8ZJ#}_Wa3sǠ )ۓg$T"c$A#`oBQ1󁃏Qb !ivzb,^\sڜ`88+nF8Tۀ4?0Qm$m3qL*̦F9p$݀K]۰#?@-j#ųmY¡h?QRİY=b40kI)tSKiԋi9SFMM0dBbv;T mN9Y|& -B-8psQ F`Aj+(Z((((4tr(0KqAŽ=EQGҌzQ*!q ]8CUNHa;o܊Kt55/zUϹV=)9g-M+ƿs)Jƣ|{%DǞI9-P=PEoB"O-~昱IpJCRp'ҢK b耀}J#:) sWT0ykiaϐ.:f+g?Bxvۆךd$iBq:rD 2r;ҹFNIWA+]`; s09£p,8$-AaAҿʹҐet?бNiX m"rGqǚƸ؟oec>EQW'2PHl߻HCUpRݹb).ݘ8GnsD@('ڙUMH3V+$a,qثlOBk2a$!`Tf|S:$Z빮(((((P;Jv mIE~eȬJ(qG :@OXgj;+n'ۜ։!$GDYVDXV>}vҪ݉$a;BK*#޲'P3o5*/MƐdmqLFɽ\S|Y|alXㅭD3B mX{qV;Fga!TP?TN椚C ep{z,80p3MKeHb!Jv %ȥX<Ƨ-tl}j[XRqi "(>i5qH[hFuII SMI%CojTYSw!@v.s4[s>17q1JnM#=zy04G7oY#^NÚιMœQ 5)]Az`\nle*Y; n'!FOj|@o91uD:N v\[na:MiځWL#E@~5U 91PόlĬ9m"^ZB=|)4e=cX:'V|xL Ov*dZ@m>[ԨͩN[h:SOR׳,QPAL$!|?S5d/xؙ̥͐G4Jk8UoP؊xjgN6wAnufN٪1#~ehݝa +"s6bد _6خPC0#8Dy$/8*ia>Lh i5DljyWS5Q6w);q%nYZu8iI7'双XO:l/ʜP_j "y U.j6}H;x\zP;o7^Nq?TQ 4dԖj#jX.PTr::Ԅ8< ~rpx^?އ@H"?ނT3+ELqKk Cdp3LRɒvOpI#U9N*; + ?ao&DDF\p̀imb+K<#H )5brA>4OK`Q*e$M°R„4_'[<ȏFɤiԟM>pZsJcR?ZY=GvA?k27;E}-LowV.Z^e;sL #GCYapC8jQa _\TӪ3@hmM0Wf܅lTv˔ mU5 J`}[Uč6'm'P6?So.<=jm9 d=~Mx'K c{*qAf"1N%H=IiRGZ;X8Jb\y8;5X[Ϊx$4Y 4 bx?:eNIvzaݮvk`b]);j ܩ ;b +wT}ptAP9j_{HbH,Uu=:ۣ`ߏ[M:U! H$Q^[+kpY716!A& 3 .;b`ȊFt{TD a> y yh~:X)$~6AF_}3YHfuBJ=d`hi +wM+J+wK!rha[SCm?(4oV'X Lvg (f<*Ҟϸ;v:(D!Tcw,6@QfJ1Ue$6wUw$(W'OeJ0|o.Dyā~b:75_qH,q>j쩅ՕbF)93q MϖN8ԴnB.L@ϹԲɅ^]xyW.)y=UT󦔕a^zZV>X}M2h٤ݸ8v,3{\[`8O(l\V6($2O.!xϹU$ y;61%T$[ҡfXӨnI^̊FWCl\SR}YHpj_^*"CH5c*vN|àw5o䐤gpMHLtnR»G ,yr 8튨 ǐ7pjɉYGA波WitOZYGqJG)!s${Rj-aVB$oj35U7cAӔ%ԚװGrxMjƪmԕ9SAF.ۃ :Mѱv=I\){Ioo8HċvZN'VUĘ'ҟo(EW>1ϥ,LlNӯox$'팁7<\8rH.f2?G4P3Qq|n$ډ]>˩东ҙq+O1b:ڟonYĒE_t.ΤcwN*,T`xJ.q@wp-Qɻ;8U>Ks`Y8qښ]d=G5 @3W ?)rݻ֣ch5Z@ARROZmE{OUsޒ`OV(kpF ;Xzb"/9IRw$AqM1{95\t 3:՛E6 oDi'mGN\*˕h*ՍE^apʘQnم&>m l70=Jk㊭u##Ku%9³̪AC0fT|lA/wHVPrQȥl YhNkhiW=Wgd #-T2d;e~P%'%(ǔpĂH5hf׷Q "wlI;daG[KKG%Kphdv<ګJb5ܦp=֢t25^WrX+.䕉$swRLw+kO+č*q[mW[B8c /E=kZAR+GPSTh1kP`{Ud9u$c-ϵg#8ϵY9G5ad 鞢dPW ؚpF5r$^W5gK/F8 歺Iz%S;M9ǵI"1HLs/f~I_ƩӓdhG35-<~+~5$B݀5r;$qwpUQNAQAg9l4RF~KHrۿJIИK&'x"&󼪟8QψXHM,r[U 4h9;JT*5U6ǐ$w'59;W`rRi-4g09GNAoI4;ҖEH9 -3>*Xʽry}*xhD8'  uaY̩ޑ51?Z033`_^M1#-r)/5P5N6c֬>lf%"iz3#Wqo~cSd=J8.aSNj+exٸX}2inEcx#6.2 "2P7DlS$Vkف_5KӐ䕿do,SʍşQRLk)|_*IHX^~P0Zf9ǩV:kWu(M3:RN bԉ T*[Q`U[Fnd$Vs^l|N<T^xުxz) |x~Sdq+9+1K!2HMœyuX[0A-1'>$4BmBQ%q}* 7(a$Te:O;O|d/${f$F0,N1Z]11)1?E=+^ g~RӽTRo*7rG8Uc֨LA FOZv)#=qU٩R]?xWlm|6b E'ݍN8n?{5[*I֒6 qz+NH&@B}3Ydݿ&a[o( 4O(/嚭;+yM~Y\gBطy\ OUk%2az~<nThdmsjnhCF0_j&Ì 5}UMFc+~cĬpƴ|⍈#׿ZD["P Z©ʡI$v7ڃptUVFHʛ\)%l'ȌF4Y̭k*1˷L֢&XayVŤ0 eՒ1mKZx| b>Ҙb $}ߥ09PYrYASDZ\zV)2gqZmHy^'oNe,7r:֫{X7s4n5(# &)nL1R(;Ƞ)ߵ~ӱG4?GHU9@ӊu8'6ihvXS鎵D#;?SdYH?ުڼNR݂DU&bF;KrNj َ9'5c+%K9r=ja"]ϽVH \{֟ <L]>nPF2ש/"(mP bx#. 9w_ la$Nz F÷,m4 i#Ӵ+Ɖ$浤?go6 ]8OoبƒVcs(>åo,kbY ؊!1f#paF床#In$UKQFeF*OZ gH}jűW_~+t1;Жp =8$B1 G!P)aצB0W':1ao7.Q,%.sQH*t.nAa}ꞣ?8 |0$DfvEMan/#Vy9wnJlOb3RݩI=;Ӯ?ss5Slu"u XA֨AL"\Ջ!`}ҵ5IEv(֎' ZB9aUg@bej}e$ U$Յp 5͜DchD?A{kHp?Asj6k8\+bYڊ]8UBkhQہ ügّۅ9YW7)ϐvnU"I|zTqO  ԕ W o&Hݼʰj_*9id|t>zFtl,:89MfCGjnb*Wi ܏iJfx2p͑A#cҢC>aQ#S- Vܧ, $|Y!H-~ZҮU0\arM HaU/uxH?J"ӪH5bF31ڵo I# }*0=q#6wc2m||g6;K01{{v.1 f͚uncN\iڀ| RqRćcLhzַЪeLҺ*e%eU)t˦ȧ:ͱa"0mX&V'[F._Yu1,#u5;C Xj%$yrW $kJ$@Uڢ䁐隭seGJ2dv$h T U_U`mpjb=@jAnV RszւDVш ɨԏ./g=8GL5Y%IF,~dڝ,O̿x{R7OjuҟUSsK~(ΖrUi͉_T[n_\Tsn7v [ʯW ׊~bߊ]L+m# ,~{b~j??U7ñCP/Ԛ*nyd= #lʙzs2j[?N*4u;qTs*!=MJ)f n ii崮6'hYƁ|ӂű\|dH:1ꬭaa$ x5+Yqbk_,ayU>ony_% 7c\"J 4*QFON}kBesڨ^w)Corܣ ;[K9#krzWEv)Ql\3!d` z v ѷM'?05Lm؀sH y];+"e ̬@)\Z?)"cnn}jm2Xd1<55nZ4a#n{UKo^cg5"& {!8%!dny?l+jT t*|-#S{O ޤwɂWb]_2I*Z)3U$ nVWi^xbgCmf3+85V;; @5T\ su7 Nx`?o<,D: ǵLeґʦd褶o'ߊ Ջ~*8Ċm %n=R\>Ab96IP)*G.FH`j*1#?0p3+BBA ,'cO5rJ)p<{,B:Qި0&=è5a43s4l`pXu,e%xRU4͂~ erАI dm=7|Aydyhd|g{"N}^aqh@63UAZ᳃p4C&R1uT: Q]2梌|͸j*?U]ҟ((K#j61Ǒb61Z\hۿ=ymY2CөPYd#;{u;tUzpC7^EkCi`śV(Fde-\㷜˃@r3[瑖@XVOLS{OZ%Ɲؘe5loh.PzV*loih.j"oS,Pm}мk3`uYdsl]P4h7ˁ8<04rC#huJH"ݒ:}J;X:TssHnڣ)1}VWmg,ǡzogmwzӧ>a=p B_:CNLq#3p;,L0ʊ֩ya4UP;tm*PsNȘb\p4>Ȅ Ԟ- g~@rzT@ dwܜb~n9&NH#ʹ JTDĐHSEFw䎕fpHF\cǽ^$c]DF[z.AKtDGU4%UinXp~SEPk:(UD.HEK*(\erG=O"M6E[ 11C݅;pN~5A1n .\8UJa5$m0OaRJF0j'0aY%dbjqO- cP]gZw!} ю>|v NO͑HT6O*ݳ<ҥU(NE]O-j)f y+mbcS'3A+U/(q*9v>n|igw?}*YN#!⛬#.8d?Su?|uJ3/]z{cG~~:Bszg;A摚4'Y2o+D̐BX|5^'Y\OJW;\j}'%,RmsHrIa,z+b02*m*#/sU=bN#ީ˰Fp|ˍNj&.@.1#[g*ڏ#tĚR畛HP1? +Eoz9*0Tzaqϥ6+p}EH#`\&rvuO/(#4QX~U{o~ƠsX2A;:g T7a?*e0*=qI Ī-rIp7fU= Y-+5y=HOE+=N*-@_S.) BIg'=r)aaqsVHls=;6*0OR}j "iW'#'֠IEI*Z<m Z&a*!x'ʯ QLF  # HOUlʧ1V@!_R|a79SL;p3uS2cP|V'{qHsw-liM$i 7>M DǜgbJ 浵IWe"]9R9MJ*[v'kPk#3Zǽ7,k/Ӄ:vCSi23ަFC@=A{ qWeAGi2vn$cR9ڡj#Xvf%œUMK!&͜.޸nry;~SV;f,ߑ@SI )"2KPwV#&TNTc>ԑ *.PWA|6*ԅc*#,d|(ƒq=˺^:Sm$Ls}jg#p=mCΥ;G뚒&!/RiěrY=e_nK G,Cs>FQA[nn,,= c0fۜV>v1_bEm:0F#;^*ëZF1Ԅǯw=o( =*-Trq#^uzp;U7cbX?aĹ* OFףP, ׊ԗIׯnH d88ڭ16QTaqڧshmAXR{i'$ OaA!iI+fQMH$U n M+aH^ǑW FWF Fr8/aMr̲FtHrSm𣞽MUT HP[8\pJs8Rs8ʉ +gj,GjħlBJv>l qՠK2o5GWeO;=3y33X!\(cº!1kK|F195fTqoEGf;F?1S9[hj峢p#Q(gYkA\ +\Rf)_ZL;ttbȍ\S՚96s3Ek$N~~Z5/=²Pnr{u1'&C.3bGʃXeAnT+-r0 ֟.(a0yԗQ^y5%djQ.%\(x?Zrj(F YPVIX\CǓ&w2,51NiQ |y>f,)v,xϹ6E 8b̸GEXtiFBẔC4gs~5qhJYX=H?5]}A @rzcH^@:F>^L3U㍤%͂~$*Bp_Sj{(H =rjy " _Z|m=+ s x3,uՋI-:MMo3\Be{Ux/+>k;oު[sRF$ujO&b%o<RR2tӖ6e{"$3q'i\ԫ#R[Fހ?+'1^^V$@a3{Bg*cn3S **p_%GOnQIcaOQֆFg%MG$HgZcTRfa#翭N ̜O@zԻKo'hSAAqG@+P(A[8m-Rn5 E` ddtDŽS턻 vv+y ;OO8R>_̕1T;eh%#U(=M89Xm d3sNV $q>ف8͏ʙ&pw5ZŽdǶy5 ~ ~dd#>eْ舰 Vu+b,'ʮ.GqWxHzɫ8R2XեU]JAaN0=*tҪ<ʕ\!P?vZ4d*&[ߞ)c NvEtQI $E:%F]U=Annojf25? ^eFxʂ)12F)~?ji&JoyT8?J|t.WXvܨhL.U:TżHvsޒ"J(BvJy@aSFe-q*1V.>⣟'`q $,ˀ8>ZI r $\ei߀2W)l>vZ*M+c}lemQ@k4H6@Vk10S0pQ]8dj VyM('p"9Vqp3oz};P]dA%ASdUGf`|Uo qTn\ p(bD.a+pyБNUV̽*`w[AS39^L}骣x$gpQ!UGU7\OsqR<ɮ70)7)p P'ߵE|5$#}vFU.1%,~5oOM)l ؉NލD4$q]0KzlrQv*g.v኎FdX£,epy>؁h '=HtiFLbE` L6J7pdRmqGJ}O*['f_ϥ5>dQ);rP=#w :tFHk!bDB c{TcTR2y8UN8(=%T9­g<էD7 zո8ݐǧZUlIfb8Tؒ[QU %w<.ݪRm~㊒X88R j1!YXNH|sU|G4h:V|ͣ^"F  cMw$7^[wf$?ZȢgcTP r1Yv<ִ-^@y=8(ܓ(85Jyٮ(#nUҨvLUw#1V.Xc`y?*{ɩ.cGq8 4XјqUÕ*;V>`eXxj&v/<Όv$޵vLnoU+U}tm#yj T2;`WS 8oZ 񤙶Tfv~`(<{e c \pDO!7c<܆E2yUҢ #=5$Y-XOtHe RO6uL`;qVX766] LTvL JmV{TY* Wdxj8RIϻ4u)Bb9S0pYA5+n9,B@=>C5\BtqWj兠Rd%c[wZP%F8>ŔaccB.W{W 6ʴF2WaPbK]rŇ;T{׀XIHm4g*=r[gyuf{ĖT?{o6lPl8?Σ E9gg'LG叙fo$/ X&AYI<vÑ;GTaSiBW 568eӽKd4`=>udGeEi^1VCE5VIW~U6q ^Pb΂irPe ghnvu~Ny'Wal1RHPsʱ)( yF_֒ſE 12B:ln-A]Y\,'TJZ1$q@v@3B : )]X1f1\RL=OzdlU.3U7`}3ǩbZzIW?RMhi  {\/#6s RLcsx#LdU֤u'Bv) '8W6%$0 4qM+dFN>) ؕ3$n} x@3Ɗ2sEEnYczT3FQFFm8j=:(ż>UOX'jؤp92涷F$ic_{Q Iby<bsTrI<㊴ij zUIf=MRM;C~3SO"+%!@.Oe@6jF rZQ`XFIQ(뚽/jzՉ0[Ú,2, U]RsP4nj)mI˷P eۗ>b(.r˚B\.pr\ v?^Fq uM2_{@X>PTS"n?3=Jf<<b ڵh[3w^w+4T4nOLd{ )YVBW #{`T$8oIhv@1L0_TQimhw?B81j>QԶɼh9" $?׭X_&HO&w<`t\tdo (⛩xTE/$*5r2IeUqQ| 3MY W`ia x\cH3R1'5%Ҵm(<9M:ue,:sPo :x=3όR {R9$sV3IIpELIwɵ-v䍀OYM ?ZITO Cڤ·#~BOEfWc `Ҟ؍r g3Xj&=r,N'TZ%7->ZF~9Ջ g,djŤ-!37 5/$8HQPcmT\#@ lTRT%\M1qM/wcz`O+\Mc;M"qUidN2=*x~ J,=026;b7Gڟ*S(>eeiYr׵E bBp8Wk:݁LsΦ<'N݌`KќS#׽>.r1׽>,cs֙, 3};KJtvRB[q*ϒ>UZ;yn#^"a-]4l],>ox#֝B)G~?KdXzT1V!3tcF#OF£Mds؜{RʿUlYHy0g+v1:֩KpzyϾ+@Vs՗9VFTWUn0w2ǦzU ~*Iy2;IQ$O6m?Jhib!)!%20ImqP4O,ev4 ۂA8Xˎp=Ӯc~8#5\2T wU/) V#ن`>Si #`=Z 4|r6`|8=3Y۳p5At^*|$֔Ev ơ N䟘tt GD\wwQ6]t` v711r?*Ք 5wONqY6>BZ1?XYch2wPjxQdLgT/坰)_i;Y#҉cMYG_jYs8>Id~#$.Jtd2V[#Jr=X1s,,=XIbj+Ϧ?Z 9*&@=y5|9 n r9<SN'&TUC$ns>ޠzRdQ3*ǸEamc77ee$zU;d ݧ&Zc֛L{ڴUT1A[,!j >^G8"834J2?_[-BoսL[qlItUJDEYe|N<2 ,~]ܐb?L$e`@8֟pH6q1Hʏ0ߕC| UB9#2{U(bONESOJ~{~jh ͷ~T֖x[)/bx>ST˗m9ު5+K[G' Ŝ >~* #4gp,1ިdnT|d'KlTY$mVj[8}mIf2ҳneG:&V`Ԩw NZM`m*(U/ Lvʣ[b\p;!FIF[8>aqFI$sҮZͻLdtpK6;ʦGcVAxj !^!ÍyERH>_<{>>bǏj2m$@,%3#HV-˕$DdRKe1R^prĜdT39Ye,G Q\$V.(goYaj>yg5˭0N p֐xT?+~5uj KۏT,2On*#n'Te:zӣ_N܏B$95n=z%ɩCN1L/Rԗ|i7''GJ[S}1Ha4ZPWsCzv\ޫHr})lc3܇sW 'RMZHq`H!B/VI7 5an=K唓?DId`L_.s_Js}H*+I>RJnn][v4WCC'%2X*HlRpzSXpCB2B TDeJ0=6x]!x6UbbhU%n=%RW*>cڴ$1T^´,WL_-}Ẫ1љUk^@I9PQԐ'$1=z1.swf$[WS78;ՖE>d~rB5#K> FdUN)1k{uBa)[=Ī*lB8F8 <Ҫ/5 SYS%ܑ:ޮˍz  .܌R.U$|Ñ縡p0ޖ$GV!&rbq%x# QMx-i =F»3L@ dI 囓B!; <6kyJ`nTSeͬʕ|Z JSHʐj`cpzSszz7,rJs'* X' MWr~O֜ y“ȧ/Ju88U~V!Vx :ɟ}O-}*p=>Pڶ~ q߿jE @Zz.aq$*(K"> >Q#un*ƜVj#) E^Sd }MFi9ſ#TkN~M7e'857Q, ߟ'zrWpz&ܙF@Z &܎jV#H5\.Adcӊ>K1z0T)3:ϖu\R4HrEK%ʱv HO˜j3F/s\׃@XhXlc UY<N83JTt+*fȪʹ4JԅĠ 㧽HtcS!u5VT`=꬈D:BsI?- *R ե99o$=*PvZER$ | dc4W!෭084`S~"4%վnGcM[խUWvҬm€: /NHZX(ipG A)ѻnv&8$œŞ6P\pHا4JMXmN1ƨp=-f5@83EP:gYj6cεr5f=f$ ~5[&@GNjj.H)Z@jROURD,9@z Hyܸ$zҜT3: wp;c @u@+=$,{x Uۨi7$U V+p+-2݊F{I#G?Z+4pj?99UE1ccnIXHݟzH" ʻמ֐Hc22rCn~OTy'c֪~[ԗLOa~ؙobCWg |dk8! 䚑ՔR"t*0m_j)`=Nj)d{G4v>WXUx'"S ޖE/@+=jDlGRiO 49SD؅c'ih<)r}X1rr5Ν}\b݀oz#M=(#4hp1֘W,F{昻W8# L\gׅ%dtiQ*'zrRIG5/$ۋer9 ǖyL#ұf=SDI0JŐ 5? GִtZ\p3ZajF+U*j^]ǥ6?ơSFpW]HS[oj!}DW N1Q-~RqVRҢc6.*Ke/s6j[u2\")T/j֪C SMvu$lbHfLV)ĀѱI^&su zh,)`&$mWw̬@jrLʑ}){aoId`ofBVRW sS[|DF 8nitzR[ؒƍVR }& =ЍemBAU"0*XԒg?jʹ{-s^4 ݮ Wf~^q5Z ֠L1jY3ˏc5nM^B?jiUzm?I(I?( tdF+eP*Պy*O&Dc:S5_SP9_^T;X»~oB#S35~܃[Dc }+Gqy (e6֪^;v֠C$@ O:67w7ȸ zzlNnvs"ǃj77*8š+ޫAF: M$+crpn. p:֢ʳa$ Wì%2+5Ųՙ;:-T&9Fp}FPcqN?J ux~*Ďv=fḿ5YcF+TWf#BAzl*! 4⅊ni9=* DjU&ml帓~lY߇oj݌"I~L 3M;w٬<"mT湐!6}*È2~&)Nq)(hFۖPHa($dVgʕ]ylqZ`񓻿hFLR?t [9SY&u(&BԖ>إsSȡnX{?Or_SK@ɤ!@>J.甁n_#TdrzsC0 }C! 3~|u4:R.ڤ Zty?ʞ1K# nW'`EPG$DĞ<^gdA7֗\YITdF7dzMZ'UA2k%$/?)k=$ޥDX;>^Q?jȇs~]D̑'&27,qFO'>♩1J:3б9ۑ5WIpejlǧ>l}kWP+g,2{!ev4c0r̝v:`OTgJQt|#S[H>4EL!`A0A1M吘3t$Q nYU?*N7[kmms@a?rYxYڛ<>TԔnOŎj{nA"1ޡmk;֌o&WwUؘ S XUظsʱgG5K4y5dqBI`* Ď3r$n>r[ 'yufi-UX 3²G1){{ ͵CUYsۍ s_O+P±FKR9S=Ed5짎yuXG q޴bq=I*{֌n%r tP'pQ9q[kr$rʸEe;mU5qfQ09'Gr[䞂ۿl`}J&dA>¥U4M9f Gˏz n=J[HAJLb8" hќαLG* v=Ȩc_Q071a$tx%_&-\'F枑4GfjGc3 j[Gv!$F4jS-ͺ,Dmpu#Lԏ΅cY13j H>B%UČV𛄍CjVQbwƶ̼0{jEsZEu+W 5[43gu&Auf?yb)UROuVŇeɑxt,k{dWhQVd犫fW1?cƧ c'֎`i\"@#Ċ=gy5LɻIۆAR?ի7A~ Ջf0Cr$)|ԯ:ϕX9z%Ux3[%, 7gڋ||ӑ~5ۋ h&s UKƳ+#]aPHG*ٌQvv5HZbJPVvL(TVvT* ֜pHVqaԝ;sXLVh]qNUO,="F2gNC`~R|ӻNӵ8SRؐ@ဪHuUT NF}{TA JvڼІ"WauVB֪}wjnFCҡbҹ$dJb+ ǓM@͕^19Q׽\Fgf$l\F}HqV[/ecTNlT䪏Nx%U{&!z73Na/V>!*:pNԛm󢜈UGhl]?9U ؄]sR+]#jT\!pj8X0/ Nޙ))8'Mq1c&4F&JKʌ՟Ax||wR1# #26E2)"1)"Őۣ-0l?( X;pzjqf4J NՋQ$$;0l KuXOs҅%_ nx.P)&9Szm7g> scX\y[`}==vGoS ? ֳ&UWG#8MPuH2rqRCs2/#35-cs;gDL\IOj !o_LS Yn9Q۞OϮ*|w>ɜv2) юǹ5d=;{(AͫY $EͫYK#h{rIrA*l W, KnfΞ ޝ Qd<1PHrrQ SH 2Fޢpz1sK y * O֝@*3T_/ J*P>] HZFVc@ z栙- Aqښ@'c4 mǻRެ(_Uˇf8?NgbriJ%n>)8'n1i~Hҧ )OQ,dIю)@g̒.4JLդ&FS8sUxiUUA:s# J  GӚ̍|d'J4pFr. X a|jl&yǐgV!H; RF;՛apkmiDCMi.#"pcӯw ӮsvI SPjުY1S_Xg#`q {֫to};"cN=>2A8 d'7c1X)zvC`0W:cD5c;j.b/^F Kv nTҴu P9ے>n.tfPaֳ%H5JfQAE \ޢq tP 7tPr]v'201 ͞ 5J\)&\/K/DQh`!:4K֟;r6?ˌ 9JB Nc>#-,Y1&Чޝm5/ggoڱf tjʒVYqͬrS~u· ||ubWlwm;խ9V6u;HI{4ٔȆ2q.<;Sdh>|gv>Jk~eˑvUK渍maNUP:b%\9Un_3#2E|Uv# sLvhPc ZgHLU=S6?raN678&9vҬ36+E;2;dbG9-oKIÁS g9}ʐ,>W}#1>< G?4ٲc۟Qd`c' ~unm?ƤVEs lkZd& ěV6Cu{}kY(@5sx!eN ?@ @`OK4Y]A` kj9f !sP"B)E=>: UO6M:ՏU6s+P}WfiI (uf8KmVb5p*up@:Yc|6y$YLViT >?vsW4k[R"NiVl  Z_yȈi柳BqJ]VP0y>i$EeBQ~T6SI,&RU~Sm$wDZ<9PNӌUES3(o2*T%ݸ, 'OL=sI1Rp MvTAOe*TNV1#CVzfsˊ`Aw !VV }x ;v:-ҸS@Oz}$x"I,ƴsOTc5KaV<~bvP^<gyb?0ɓP>]PLO͐EP%wW'9'g )& 7}iڄA'4+;TvB$S]hдXCc*mRx 208sVX)Y$8!F.XZǠ)',0zk"ۜ=i,έcm#ƅxOSPdnjrƄqinj"(yRu֡F*UF35IPE=0rX$CX*I8ȧsQ*=F+R8#LT9JX<;UwR$svy#שk &j򪒱>Byu5А7pZ"oi1igMQv1t>T#G#2EvCjO'a8=\-~˶Mrzymr{ƣRN8ڣIqrKmAqQNhsP i@CQ%4@?\E\F+~y6{V3_JךRTC*AxtM ˜;UxF:R2Ko)61RHISqCmS|q=!$H82sަ17Ipy.3Q\J[*9dX@m<^j*lA8&DjZ7z6Йvڳu-`x|`jVDǽ3Kmz~Ӟ(6-1ZMsbU *2;R][c-3q% ]`qF|*v1 ${Y>?D*:Pb_{sMb['q4,y<7.\]*-hO,m?Fe;cҚJܒ*peQt@0U;f^KY~P+>_6BqpX`A 1 '"+!A'[]|Mm2̄2S_Pb<*rP۴# (xℳcқ$v0ڪ۞|c?bj7l| w99D%H䲓WZ~lD3t-P~֤-.HcOZUE\Sus F[I,uY r+,?zj?+& _$WXm]aRƱDlLT"UmL఩ѕXT+sV,I SVeHN B'򤎇cO=fGQk&}xm)}<2QZ"O^%23߱aY$-%}w%dOAw6ňʑSAВ@%FAOHxnx7+x0M:+nX|Úh469*l]Iq YN; ߸aL\ʼ&,-95[r!VIvS YA*BOsR1ư@}k8`ԓ[qT @҉$;8=ן3yc2OvjPSR4|O\R(+⢻#pW wgqGrx#׵fPr{U7"<)fU^2Pd\z H꼬qֆj$wdC$zgA|NM* }AN)!5 r)L9;cYǥQ?ZĄ'-KniڠqزIvj@%dp˔`ku,Bc^޲/fS %!zDyi} 2V>a` Q85FVp3\v E P8oc[@@ۄ1Mli‘֢u7a>w}rin&/9A㰨5;=̀z 1ɗo9f;pO/k2l=jȱϐqY2 n*O'PY2,kȱh5/ J*`er:qY{j4x'NbH}3T4oF=[]B\XWikg J*sOJ렶 l;ӣ ŸCۭabW2a<țwQޥyPܞõHΠnvˑT䚬\8 Ā7Bs܂s\~6Y%Ht6 A39^ޕ31^8n.T;q[1y{EA*S&=+jN7n,Z2ޡ|O+1!UX*G$jx$TV',3ɭDM 0k^ajG@2N: F1ӯc2^jy10ZبSh^lH7y݀\P0-<` Pd%7̇9Z,l&[ ޯd8,Krǩ>cȋjHS ̫z>$Ѻ;@Xij ;|v5K"̬vz*d1N+Eb˞j7esn ZFWFջ4C8"fJnwwP{iVL* $8! nZV6dJҌя.@Y67a[v&EcJŔ;W <[N)nؼl C#v"PSJd ԬM*"44.SwՁ }M"i6 ]?1{7ɨXUI#H*!NO"\d8\3Z:u4ʇQI^z;)' $X 6f3( ڸPjrھFJeHX&sTu6yh9!sz0B_H3Jn%tVC3mF3+i $XrpzVsAr+N9DC$dLQB@F G@VT3\m'H?:~5,m8eq{}jIQTveCˀFl@+YsH6H좪J/һI=6+)X|F=i[99ؤcr0bm㋕$ZNFs}*Q* ϭl܂rEtViH$VղBIrqSqQԓ)D8Cc9'֠tseQ:5-@pv ɾ.?֍v5CUfĈHIUVjĄIZiX"x[\$U߇5&:$;н2D,ԖI"Tw9]O0zY[dx"bȉmf?J$8ͼ<U =YyoHc2~?fjp;3ƛǮ+Tr|aʒ`=Xv+c#>ա=28!pp+CD^}{֎`iePſkd*ŴD)Z35q12۽ioW O8=j: npBPJ3lӜ ȒK6$fܾcƦ&Q~}S[`T}ORzs^sc1,0 * 囇^NqNER7;dS㇆sOcg;J('S+)fY t-T]BWKW20` n`/=*k$4I*IL`So!i'G`Ux>UQϽ_vUTQG5vؠ|MLZ'U>,/15}*I|AYxFp`Yuڭݫ# ⴯=W?fo_)Hzʕb=T9g .a=@ W—n-x^ʳɺn^:c?Egi%_jX$ɵқڡS;|7>U;F@; { +t,3T>S Ug]cIK%EY;3/&x47K@m{TAzCm:&7( 54n {sx,V6T3N85PjdӽgvU7)\ޤ/( 6o>٠r o:rQB"DynU;H0^D۱TrO886m$SY*u#F3RXӒEE,9,&}vS۽E$E=á yB.8'x݄װ>P1۟SDIŠj?"zRIyy zSnK2@Un<.ms!,?2*SAl PG.8ݖvAX?1 rA)6?<lmI^0i$p jFzcgv2M=0A&,>1j0x!Zd q5*E |kV䈤= \Qa9SVǗ6b Rv&Hp@"vA) RL^0Vن|Z҆EeqM&UzV|AN'NQ;U),nc/9U]ي>]f?@kȘptbd ʊjf7aeugcmd >tzJHp[h#Gi>ۆ;Zlґ2VA-o :si G2 6Jl ‚r>0&8fe<2zP DIOH,. %%O?1=fnw;mc#}qˍˉ>9tTeÐ $er byǵ-ˤ[pw4L.>sI$Wx,юH#Ux"nV7*Ek:BV-ez n4ex@8隣$Ycѩ7DJP;AtxFpvid#MWFbDX P$H+'$0yQn.NNFA:y4d0Vǒtb{U(C7#ӂ@>bgo{)v3Cp s{S7pBwH$vߔi8Yy 8fwA#T|OLUhTHLV 呷²a{a#nA=)gUh;yvqE;ݣօ$1Y23ƒ:+GnQ呢A<ݠ҄ݐM9"0Oj# dT1:Tvⶤ10G]o [- S(v>SԙRw3Yd66L{DW_*guh[ 8qV\dZ9v?hzT:z;fYq4̮[;j0Z$,`fZ8Gm8ީ!tւ+ҺHB+f0nP>TOҨk0'@ZwSޱT?f.6E!XX'ҧ"X'Ҧ*l2^*9$lm#chj\x UK!P9jÅ-KI-.rPiHw7% y7-ID<3=yIYb9c[ep rrG$`V+`CCBy@a0@W`K֬YcxlK* }zthJXN2zFY0b 5껨Cm Af݆q#5nWf5IS ;J{#mL|c]Y<iLCdnڣkY.qLIڣ&VQmo x&0 '*Ofo4Ryn5VHdF=^&C?tֶ뵢W uN('֤WͺF#y횲I{BؘeH'e>a3PH7+ zniCLsGsS89T8 "k>aqaw>h9Qm2dh UX{$jvG}<0!W4^;fFcQSizwT8F*y(1= }3>’0sSثxw6;xʓRi g1Mn2UKh. Mk 63 \і kg3 ,܎E, 唜_Է:->yp¾ɦ ˌdSc`t2s_WKHcء@43No a44!OzT69w~nUU, xyۊ\t#SʲqU5O$(|FHS [(6MZo $*\RۂA&E;_Zoo\+Z)6\ qn*},.[*3wn*kF@54 #V/%(8cT% .Ř K5dJ!9$sY:(]A5CgrodBÕ/OG U,9*5c3`M0#vL_k0SS"P}{S2@S&gzgOOZtΦbnVp#e- ]dB?Ja؆%'j#8 U`6TM@#m̻~l|ɑͻ mB~bޕf! R\dj G#Wj`F("VLn0 d|@=NFCMң#"Z \6yۭJc9Bl l '~JATh c8\ o)pךmɍ/u$pE &o*#P뎵:Ec 8FL%]JʞC PNTvQ&2$ "3-'$#yȈD1B)$ GZI"f@ɑN,dA_QMco5}``P?ziiiCW+5cq |{ք3 zdtP : )DNI^ҋI8;OҋYYo#9jE_V?Zւbj@d, +0#GGLFusK,y 6׊Tã׊ 0r9P]TbyFJGS&[=)J3?Vˌ`ڤϴtk' x֢GgÍ% zi^Y #gg˚q2GQީܾr@^֪;t^֫ztPJV/3.бƘbYr6Tks:JbyR20Vj;SYL SX&bOzt2`@LƮAHq&XI%b@dI$g/P74]O/E H~:2]2bJʗ"P`e,E(֒G3*|t3K1ASR޿|E]F1+w/cQǘHf|tDk|۳mbEw1]H-`ɽ (Œcnq$ FTnsd)  Igvt4Ln%%9>-ħ[#&4`&ʌ~u5RDoIGұ&{VX*톦BK`=G]3XEA!=hXjKG08|C`:Mpjez"84&g$n\d5eQ"0x 0VVPW^ V A2X;ADFaxGkw61AQ@3Izع0u#$hR: '9BaƆ8ڳh(N9=`2q֦ލ"$} K,[X7Ķ8WUG,p:<j&jǛ1ڹڢw)U/AQƣaC=#l_UۓW$j4揍ǿmhX$9=ҵt'qBחpTaA7ɕc% $UvR"ێ*NsqTw=+E#ymw NuBt5t!x`t5B]6wrGSYUۻ SRӅy42NQzSn>s۳9vKm$zӭЍzVD( ǹ;Vjݹ<8b(̠TR19pe-{ S 3b'Z_/8'ޠ&X|lQpXvT gw2_7a8rHI^ +) K*)2 xϧnEsI֣D": F{.FABpc˩3ЎԖ`# %ʹQ_mM]epIzVFǭWҴ28 cϵEiA ڡ9OAww BbPOV#$kxfL215" 5FǰcW,#H-t㢓Vcۼlrl$ɜQnuǚòtt}*ڴ%GA{qD )隯u?z.jXH$l nY9HrԌ!*͛+4'x㱭] XXX.=CJ$ 8șBtb.1ҟ:YQq{V,1qdd#Y [\DC=]>٢]ݬ$. Vb1!-0ⴣq=a1Oy6tR.OCɩcs8 ?JSL*$'9ne<{e'chsSAU# G\E' i![e?C [e8N~cKR Ak5 +89h@=:m9^0ұ5|*.0sV]>`GLB@QXyцm43*!Brj@(c)\J o=LѭQqLd-*9'ڣs-۲ѱYj 6޳6H% p gn&^tj:ZPXU0=Juy% ;hʶE%ۅy"+'*I")5<皔pDK^2{sޤۼqzt|Îޥ$@(RIa#L;RL$z@`{Uy3X.݁OV]ĻYI}i];Tu',5DcC'&1OfyU]ƜKǩcC=zT$R*l_zBvx֣1 DcAj5ȣ%IEql`"oTrFyRe?ʆ-ˑAsJrqQɟ=)\PFIr{U-ݱ,9 b7w$$CV3<*=yc3?LsA|Ǿ@gpSo[;IIx,9<ȹ#x5s!gA-'jLTkFƪ:%Q:EM~e9Ѯ~]zUp.viA$#eJH]r7>X(/#w\ZBeS`/!r@K0SSU-YKfaaԳd'rzy%v`dtv',W%Bِ@Q_!`e- >IBFyLwn VxEI;0e6֣rw0t#+P[,C\d`Db?3wj#Y"R7Î)D |3H!c||W2ZMm<0NKiL|Ul,,6 ~@ZKV8׆#USR6Ha^J7^$1O'mG\b̄߾V*i;e4\ArxU/ MBedÜ693) jm^z icr;"&p8~Փ̱(hѴ;n'=: oU#K?kY@>@8hKhX uv­#4VNGi^-d8"Ns 8:9Ғټn6sDoڔat-8bʫJH@$Uic" cKE0@jK4sGjKRI˞8=3R3N[@+ G A]Zj)Y $dsqPB$$C#'⤉ ?/8hy˟fYfNǎk'P~tЩ1V~@Ygjܴ0Fάj];Q:\*N}}JGTmݛ"Fp!09ע !Yw; Hl*TrZ5o-Lp `񻸨- ۃBB%Bs6+.+hRNxK`pSkhHGFw5##~u"8 }DZ;bl}Jsf,H@̗< X,Z\23Xb5S mLo>Jma+;BezyւK )n珖q=äk' Lki V{A&)}`:EvsWmuv_vx=hxEܠ!t#;g8ܣ44@ r\1P6z kX1P98U#p!jrOPAfld!Y1tQy6D+z3Lę673Vs݂rs8<*I RUIy6GE!uyV*|S;|P14\G&D=gF߸G**}M(ІVsm)")T]!W9chBvGN ;%XTV-ުVqΌNS^ e۔TP1LH0JGzH&iF 2dDŽx>gtvqe=k@IL(#R.\gu5Q"Ğu?6c<{XI)qH)6Vq8&=<"zP>5vW]LMZ M>iOCX㨭DS N[&B9Z2|ӓR4(*yyPBx\$~RۋвO!_ozw 2cɪYiI<,O M To2/.>K؈>laM* w0(Q}b),\T(G|Sr}qQU<#B/VchHv/X Җ(l֥$$`} wKW4;@rs?ҡ1wm9-P,1*y4ǹE=Y>UcG>H;;gq56սj)HqQ_ӧ֑7ʣI NeeUD kHݺ(DTŽX7,jI411@i/nd-oTlS9hp> "+i$c4 1fyl ?r7ÉC2,b[k?@U ]؝tj Aۻp8RBoZ%pO8Fzԑ[8VOjе Ӎ|=*彪Y3S¸yrM:UPrXӤIr IIn9cPś8y&w,dUvv2gi*!AQ) Yvd횛a P3Ի msL1񞿕UtV|?Vu̻IUٱ rOiD l zM'2?rǁI$7?տAH򈟦Myu9;z{]AW\gj c֫*rx5]PzTBBsVb¦vŅNJ+|KA3D,qiΑ_i r1KPL`H4qXִѠA$ӥd$ wmR]^,ULD:%Llf654jJw'­D`YRy1V"F94 :cMsnF"18>hp  ؊BW֢fgǝ@>%O#Ŕ ޲3PxPH3ս< Ae X.-ޒfl5v (?+cmhn8 J-QX3Ahg*.>ww%!k& :-<ew1Sٜ$sR3S|٘/>QLI BsؓB\_bhY#hTsNiUO9%e ÞH4䄀IrR \5f]>fmt)%fN gE7TVi>Ԏ329ګj"\*Z+M( sҧ[w<kFKLB`kU\秭NtķHJ)Xel֙tIB&SJL~BEE^}JSƫ\DbMjh076Ѥ[K%K?9 ;iN1$_xօ%їz7Ȫzpg921r)lo/xg=#]щÂ)L .Sz`y[;0$o%]Py&`!}( 1XWY߼F?Eq\8'SNRn:8[Ͻsu*#{psJQ܎)Ryjj~m]đ*x >\̼cR&ݞC寙XPJCYy(  }ZApinJnu"ʒ{Vs! Y7BPNiRޚc쬠|M,0б9Sm1hި:VgRʧE4.\CB";*b5V`R:G"js.jhـ[0 J%㊒yդD7*Ƨ|Cn /Բ$L6(H)ek=yrInM'$JR Rm Alm$zUnTSɼAQt*6;t͖˷҂f Av3RyX 1OAR}M:Ug 0VVBOڞ=*Y>Z4[S#T1 "fn) n1Y\r>EgʯjDmev:e"=bT0e*En$;tVbj~NTtU6bO5g`{Tڊ~ ST7}*2oNqYSO#4`FibQy r07{VΓ{}j{q_zV39Ks8Uw8P*}2pU;Id9\Viln#UȢ.AV.cD S𫗰=8`w!qVnU\jR,qX6m岰zY@j9O;Բբxvv>UKhNk8 >G˟E9 9=ŐrSxj)6 oOj9LJ ֧b0Py#;XL#W̜ὪF.%ڬ7qڡ xYHZ&e ;T" H.`tz1S$cӌfRRm4tϐr p7luHj_Ѻ1qJgr3*Fb"g'USbXSeX*`1I D ޔE@sވ?M}Y7/!G~:YM0x#d%GA4*@0z2 [Uv'rGSJ>QRHzi_ފÕSDf|w`2jAIk/>^6C;1vFRD#SI;κ+*G1@^I 08* HɿsMB ˲:и<bn|vHt1Vn`=Xw]kR썸>zWP_jpYF` MCU삙}g%e%|pq~}[P$)حV$!zU;5C$VAj# 6.mzPwy jͥ8t՛H7nf85ib *,kJ U۸ޒ{vᲄE&8]GmHgc# 9cjʎWyV?ZA }2YH~@@wU_l1=xHK;?[|ko $1sZ֑#i#3$zU[ƖMv7&G1ʲ{SHϸ p~lwpgUaU2r8I,s$=F*c*?~'X+M 8gXqݼOjK֊LsfCq8!Jo#19=tfjA61V(HAߟ'59#'5"GG54p QsRR `XV-Cg\眊P`+:*Yg]X񎂃p;ݪ955F9=7\Ex(d.9frwG-+2F0r0r3ޘ[vUrz{ՈNt9#[lXBd|էWO93c,V=l.'a;Z˹:RX+!~4I'"v9UIڧH¡,uJeyȊ z_pޒA:2e)lSRԃnp)5S`](SU.nC&% =OٵWS?Zxꑘr0mUĀc+EƸ,}+=!Llkɓi+ g&PVBʲ).zRR%VlΜn5$Q,ev'psS GT_CeZ&m%jD z۱|7N=1<7 g]S[Ijwwhe,`vq[XM弶fAX(cK"rNWK۵"ɓSP\@E"|8)'#u.#ߵ!ڥ81!nýSVNxe,KٟJwBSO%)M8^}KDoA'P@1֬-1HʽvBK2Q)'&@ w3& p@LO mR}ح"(Iۏ v$0 4d}~#+$`YiMvp8q,Ho 3iqE\1/搠)zGE!`(X=XVSSn@FṺ٦IRO\lQ+߄`w4b Gsza.$bS:?ZU$0v(л^Mj0r9$t_%׳@G Oqtbq'ס}6ޭzw_JGsU&Hr~]j1C8%'=Stq30̀j ̠#;X~g"BNӑ{TӐr#{TNGJQ\[^9Z䉝85^r%$BrҪ2x?vo!QOF8`/+K (sqSXy\oUh2S[6`pz"5gqD@R~iSn'V%_^QX3O;m˳p-/ &9YVwo.5twSy^-lc%W!B֣7RyH>P2kln[`֧a H\aWX0' km' NV$nP]^It Y@z⢚b>+PN k+p !$YNb = =ͱ)hfhPIQ$9`NzbC3Vo~lTp`]j{VUACO5=@pp ,3Ά6T/(>N{1A~4}Hܣ֣S$!n*:Pӳ\5#JGQ-HA+ן֥զu,Գ2;NO:!QkT/nqZ:R}gc~z~j$Ux1%ޕB/ZRKƪ[G>d圜 !ELT(|}*ۘB̪W\@crjW3 01T'A-B8l;dZ(-Ȏ)b y<+f5= I=j Hv $$m:+Jŀ,$2h["Q!}ۀ=Sg_,qRK4nqҖO*i%BF tCu42"P0[ Wh%I1Ҭr? .(;0d8uF rnpR0Lr q;v%`*FqMW8o-)#,Y8,$j S1?T23āiG $h1Q+; )!zPTnvӷ8% $<<K d,<硢$;VhHR@K-U/Pj ۅN݅F>^W$h(WΘ814 O*ە9%*VrIؒUPݨ$nRKiWFF~H;(6$$pz(m@$OJ]۶8P:Tf$g),)8OC'#<f!mg' i=[d[)dE6<q=MR睊5R]Fi.Ԧ2FldH% \Mfx%sM.!._zIO"\^@1ҙr@0i`ǹf8-[g t[Ӵ%q5ҭYX1q$ÓȩK0LWoe6H\鑚O Z2,  Y n"yWW,B#Ė9ǥUgUbYqP~B%Wײ4qF%su;5RgIQ#+ԖePoJ[ip3m:\ ýjQ 0W5jqaFj߻erK ߥ5$Da g4"FEM Z eoJ!rHer8Zc2FP7OQem96&,c:K$q5! #O.$mI㝫ȥgMiX8)H@'ןʠSp>UfD+ԛbfF9=8!sDO\v5lI)MX,b4Ebf-w1ÐbiU .Ap?{):`qH&;J#H g֥[FFs֥BHNi&U7LTI)ϔwtF|=j^Td0,I'7) $lgswc<sf]|WΫ'LO:.Tʫm K A$@$hZKu( ? k0?h%GBjܳ>2>r3gȏ+j1rT(OE\N;UMJX7vUd,3ryZ2vMebRϟ̈X[TsE28ƌ6?j{H>vb ?Ik<)cwcٗKpF2kF[]NF[Yg\1ݐ1V֚lp:V[1gg3sRGj孧5jۋlaGzqz#El6Z-ȍBB0"N\uCQs%-T ұDIRyG4)֥%? ΊC5s#o#4H=1MvGv8 b}p*hJP7je+#SK~ˁS4.ÁZ0 [!?J `9`jlB/f[FUsޭ<^U21VO*i'AIǘz ?sq?tU;vfS#b4_5RFt.pSUnp\E=Kk("PM-Td{RZ UR }OZZonnSʰ Swgi$`V%Rr0F+*,ڮ(V/ϵX >2wjp軻Rem*ŅY†sؼe$yK+ s){$\d[+)oʜzԑ^C3Wu.!&;SqdUjp k+߰[d%oiG7Rμw^UHU/3TgSlL%% Hɭ 1mϼ w$hLste>p4쪵,{m_2oEOWA}tPFp񭋽> _Ƶ`pHU;B|y8>YՏ4A561on u$~^55Lc!#X85X;Or!TV_O:͌"a:ٌUʇ5l>nUrBXa{U[UO˜b gb(%l/u;M;eicpdJh>US¦X*(n;G`UxUbXѠXu2 XzqդfGcRI?/ERIܱھ0Tp1ϜP{-N.3~c4[G4\`G彪wTLdGq5B c,>#J겷*aӭnu#\ 8@cZeuR BzZY[ZN=Ob3}sI_Ok(T@j OaPcUQDFsߏ5uS)*O)"8צM]v}kN!$Z/*3sP]4<I6y6oNHNMQզ_`Uu GڋEԮ3Po~cTL[YPUC̱d՘ CDvlhUZp©8V|+&P`{E܋nQ˹rXu RIbqL0rO4ݤi6BMhX-V ~f+bॖli#+F\oqQ[pï=jٯ]/ 5[kss @{dc$.y,nq7 +I)h|]B,}%S+W*@Co\MF12D/ڱv,Kk>df}{?@2kDq#(.F`?Z}F{N֜Q=MoEnPpy5"7)@"Q=*  M2[ǽ6IU;|pzbB)u8Xeؔ=xYEbXtZf>&8\vQ0+kPo Vܞ\XA7v#*f8>`UݱRú)fln'ǚ|Qe$Qupḩi8a֥~#Fk*Ss4~ZYWSFcT#8r[=(-iiEL0'W aLEl|cKfx/!?TXwv&vJw9qNN(dG.KsM3(A3=j܄ƘηY%~^barj؀pAp~n:suheV,08?37~f)i8 Mg7) (MS1 /I#6AAZCikHuj[i&;z-#,I~l\8aU$bO)% #xoJs2 gl!S4cYo2'5Z 9#qSZIqF\}MXtu99XvV~jYjucmB)m#E\#t#gɎ´jHXJo22 TB==5>v9g([n탨ȭm()h+9W֯#+zf3#TU@KոU3c%V4ɤl(^I !ǚ/ulBpUF8!Ă'.FFMVcFj3м!|FͶK8~,;X[ =ϛ5 :s0ݦ) ZҝʂǠmSM e$3I x=:ĞpC\pVeS*Gz6CGOjY@6*6#=6fXCQxS!~UZGwzT)#45Ԍ7yh9$ď3vLc5>J܃ =b_̌`mQֳ/2Yլ@ *}: Ag`h> 1d{1R89cZ"jTN\zVK 9oz@yg]]1̎*eGޮ[°Ĩ8Eah~b$ͭ ^qh-Ym@2jعES*3Le'ҫF&Ib,FSELI?RQ<8.b{32܊PY;uB: jGIZGZ5f@=x-iY4㊸챨Hm6prU :Q]\$9 i5۱{UZ$V zp\H3,c UEB>biѝSHŒ}sN#̝%!@ld/ҙI"G& '=)#nKIYW!~dO+JX ً]?֬C %~K=xoY[-PrHJvf{-ʖ$ 5.xH&v\nEtX̏̒WO 4sТ})NzzEʔ`T 5!@Ldf$/=Talt#+(ZQ۫7st[9QSvbrb?݁toi.HB"CވF0w~Qw?Jt<ۀyJlxv}I׊g Ū iT \f4T$n0YnVmeܼ(c5-. n~g pAڧ7IKS!|>R^HB~P96;}'`y_h~AitC#:*@<+j;XN8ִ-48F9$id0\}2x+dYXgұw,HFzR*\ ˿JW囩5j%Qϵe9#T/S6j͵}jKeG\rWԚuP2B?:~ tfW7$Ux!2cWtE 2j֞85`pUۚ5#Zr"VҩF\`&C~5A'oHq’bE(8!RU!Ey#pW8wU6W-[863άD=ݱ{c5yځ"1 /B d~Qh u3&/ 6Mkށ4 0V omI¨8ClQ$x@#] Mc+ʚe6r*l9#+K6FCGfĥEEkƑ?.3[ah* Ry;9&A#FOJ8Wt?6MOc{]QHfY LfsA?*)QڏB Ԛmd2TOUg\tHȪy1>E e֮L(rvj y9o-xvN;ӭo$F'`S&p1i6/EƽS+\2BpRYr'#d9'h$⯪X6CZOY彇]pm G2 S LKDy$g( MT^Mfxl*Etq"x4B>`FF+)Vkp8gXWKy7& Hx"IneWY=j+xW<(O8ўwmrgE4M)CJq:Y[Qʚdc(pa#'9cXi9XwnjkByLcwJc 0Q>•pb>J!ɌS^ī9x"b[ ZVVh/@5z'=@棼q0S:D`r*tF2* d$6jsgв3lمVf-{9~\St,N)4!$l*k9Hb sT bP=-Uy"xn}nߕY91'i'M^B RHV,t+'h!X8*MT]Β`!@7X5eܡ߽fڳr$J8ȍp4Q~P{d* ҫ;?!!jIi05Hd<< {(E.id_-F]:Ȼ{R$i$!M\!{ d&y>nQR9.yNf0*Ԇ݁0©fr8<ɌpI㊖$yrH ~M.2p@n9n(,1Ҩ9d%M%{$cA]/[ޒ%r^OsV3c 1Fj/Kd|ڑpB'{thOtgo>&߹ `xIff§zmS ZPll(=qYS#+Y! JIŸlG4G֩me_SZ 6(SWZ-ˈ~5.}wOzE3]7r_M]Ғܓ޶GL-K5N,}+6pҞrDvk#s?ŏR oN _(OANV ~sS;|gN,ʊE#Zd`;/ܡ9;k}ɟx?]F󚣬_*(zNHOX}`S4ۅ"sG Nvvr)srEj#Vău&#7|TP1#Vm#2+` @򴟘>D@ +9ǸP\CEK x'^8cC78zԖj bhIq;L")jk[g;#Rf$kUjy"S&8MYR"|{ԷWVUtګާ{|rzVTm2XK9',hw$mEWǔڽҗ\ a?0Ȥ֫ʧ8=j[8̩.wMyvli%f3g8`@;{) wXI7)z#LTGAuzAin'ˁYUc=jd#'Xjǜ,N+2R$\Ӗ#OJbn|"_/H8lE `j8Kh$޵h-eQ ִt[<4IՇ^ީdw|aAHdva]UKtҡ G;S $d"pVKe@ˎ<,*\S.YQQȝQX6a Q@cdňV|qRlJ0RN=MGo 7)R&.zJՏXk?UU@FWO18FxV(HXՇos r$̂)iu34󺴴l Wt6r3MC ;\ #F/= +W[#SGn.Tlkpv6M (7P}VOkw62>Z$QUm'0ATt *JGc늱pMQL>an/C:-@33EGID:zZfG Yjf|?T;7F_lITzy=5;8mM t8 Zb0p MApw((jb@Qs9p㢨 N }+T/7l ۞ i:X5HnSY85-WOᇷj6&ثX=Fsp/R(/"Cl(lVt+@  JxSM>.$ |ucOuBlVr)VPvOSW&`\q+WSCœ syHqqT8i_wV4ɞDarz ػ0rjfSmdPOfc@qUi0(ҚҔAՏEV$QQۚmm09Eb(/ҞHjy;Fz} }:(]QpX^^"ۛ=r8ǽXdXJ˷OZed#ZX $0`sOzƺYC9l, @zTvLKy(!_LTpyp5Ì#֑I,ycZEg~X*nt.F=}RCd' *HS.z w0S|PJs|ϥBhۨXֺ{4XcP8kv ب/bYpJEW]N!q` -9*7!7r hMrHkl~kT!O$UM0W#lt K'L9,cv=ɥ-9<5ByK͜4s$ y#*[0;5(h8 eSl{V[sXInX$]N6y7K\^Iu;ڰfyf|*ȣ4>LkRXD`}+̓tEP Ip>T,~x]TR@8JUt[E 9#ZzBK!FSZ:D{]![5)p})@=. B p Sq2sԁU'v|UYUPHZ[cqNnu*"zԤnݪOrzAKYdn]R™[I,HUh?N櫠Ha? j_Oz0c8AV)a?JzK G4gu܌"[Шw4:Ms3=ޤO_hՎIgdivfFaU~ՅYDdvn*o|lwgVNx@ ?Za(˳HSKTHp%@[GRؒ#}*h%S.=jTȞilAZ!uNVHv2 VsR\Gn2i7:U2F8i}I8*, FWC~<9 L~v6ٺۏҳ\-sJ.=+ /+nO1]:?-<;3}}F k [$ܤۛ$Ye4[.Nˆ?HU?p GzLׄ'W )\fKV#GWSZp8%*Ql c$ !V!}]2HoҲ7.l{? ,ǩ\TWY,J&ėϭYn`ެIzf$}=M-z 0$P۰ cЏJzǪƸQlc xDQ.Fʫ tӷp^s?(1H@9pԞMF>f}j0ǫUoǁ[zJaݫ_O_&٤n )ewͿnAM#UMJi- *-I,ITWe+;1\NOJI9sG$@ffYA=..|̄A S[eF:(5 Cʃ}&U m TK諚\*ˊ2fr+>6{ח.۾sr$)dV"]&@5O̯T[Z.9ke]EsFޒ3qHժ0Ojݑ>V6GJhmU8QԕԝzJ/ѥU`VS+q pT͏UWX^,wa4u/˳JEǼՋΟIg[lgqG9cU攐KsjYIRZuk3_Z vRcjJUK0j{|ga}MhkW o@sSEfp* |FwK|fmQ򯸪6{yUSOzfꙓ;@%OM./rAqU==jڒqe'9;r6ɘu8wF =p8~sR9P9r tI@j[I2)5 sy IɁv|, d@pph%;lWt 1+qUNݣ Q8,,&* }WMٿ˰/ O˜ɲ>erH?a/U#׵-) 0h9%rԞjS2S@=]dOGu\ :ĂIqEYTB0qy % j5s2Z+|A=\Eg#>b_hٛwηVꭅ¬]ޛ4hB=jX 4=SK6# qi@^U!"ZCkh Z7O\@qD 9XqO Ep+&$iu'b+QksXak}[ jf))*8Tr' 1u'H`# CLe$ ǽHya.6Tv94pfQ&"@$IY" &[>4 'd[=1ڤwMRGj]1 'R1K"M8Z\(bsF~D.?tfw7}}آ _JқFIv4; |?sU>\%>0@*=7HHoަ1XZgH 'sT{g5\8~n 'jl*\gAǵC r棆p9 od!@ZWI:,l0jo"?Zl1>nzmWcΡ&PapiFz)6޴G=*֪djէA-O7[6IGWDq"ozj`1UmbVe@\})dT8bhQ G.Y. R1P2?Z N\7G"i%e;p*6ޜS&GS4L3 ZpUp[=OKi օvˮ1Wm?P>Pimeb&i7(dܣxb"]f=}AQ.K3ʢB<%8020[]˄q*_T}j;A ޡgYdUE+(Au|jKo8Qњ!O.Հ8g{Rƞ]V17WyPtC+8 xe`cc4i%Xg828YDknա+{F w>XY kKhUr&FFަx5N[.]/vR.[(sX_w, pM fgLٙw)Hevd=UF؀:boAa -i(`UEY-X0#O3徕)qm>D۟&XcRM$5%vQ)V`zUxS :m!@Ǒڹwն\R+"dMEBtR6#޺vuaS feX?l푷NH6GVݭB3Ҵg- UifRe\\[[@8qYC^LCsqIcgi[<;ogp#0*繭{֭6GF:Pm%uU\n:3{d\DNs?s}yD28a]lЗ?-mi 'jK¬cvb$ ܰ{Tz"&ڱhc!fo A>$V:$nOu6-QVlq'j` VIH йA%rKə 3)CS3Zp"y?1t=f$u#_j!2Mi`_: z"ӥ8gG,zJorǒ}*>O 95{yTbF3ޘA䁊HѮ3#Q3Z2H.N3WY4oIֺu{dV.}*"tɜ8L19fcw-T%ćҡɑSӢTLت.7Pڛ+CUT5j 3ʺ)>H$ ] `BiE g!ڱ$ǽe,rR¤g5-āmSoKpA*yԖ s~n Nϵ\a7XjĥH ]h]d'>v)RjL7ɮzQm0u^k ]Ry'XH[Xԍr@tvU\m"14GJV+7n`nCnE#Y7X Mٵ n#CNO67]Aҩا~Xʱ4Y{5 XQqAwWwKe) G K qu,1Im''8ښ@1~UbLy--J*8jn ,{zUQczv坘^.: .,İP C*EmU vV*qwG=}y9d'5t17d{T{eM[ٷ9'nqW#+Ym#eQ\R9<UUPNCs2؀xAc$rąNOy2W.cLnq(TE=VC@k#~֥mG#n+FԾGƯ[yћ3H?ҭj3WuyWryd/E9faU9bGnyjr>L"NXi9-Ub ']L%E'k~8BtTqt<Uwp:T fg"rZȆpD/33lj"826sWp<7ssWbaNuX:V 06;WeZs)\f7?Zfr3ʪ|Xwc~a`/k"=yST58 FƳ+V3V~,rJ+7$jut,Q"!A&pvdýC4'4<R&9G R*Er۽:$3JFMI,pE8UOsx Fvqzkp$*Lg֎sVc F;re}xp(ҭB R)AT l+SXeGrqYqғ1Hqd<0&)&Oq@ aSLm.95#`G$RHF4, Kd.ޤ0(?UV*{H~G'8ƒT J,})-c{i6s-m<8.* 'U/p_ZB`Pizzl-R#==G|3!̗3~7q/jYf aս*Yg[qII(Fh6}Og`sSYEzcQg3iۯZR7,k^*iD ["bZ+r&< 㰨Z7#SU^a#/^& .?Z.o+hqӽYUG<涴RqrMhD~IM[AOAQRAb&h t`A굔k[v?0mwmdDKuݴnJs)qjR}׌ʯ{ xT@g2т3銎I馑R~fy\WT6^j嘳hfU3g4a1/ udlr\չ1Cpm89e[bU8PY=N چe~BH$u6D68["vszjTG2rT|VfHP|U Qc*)!|}75$LmmLRFEVwƋVf+5 yH"o+Gm +Z!tL0sH1N-ʶc- a=\2isE ;|1|x/ŅUeK_բZ`bHZ~[6m~1rT\Tmlub0*6`I),GF|Q2 =khZ8s=+OOkXTon ;o'ח?fIAdL(A|8*ѷiۚӅϜ\g$QC g9ji$sWdT#?{EYԌ)( qR]DWj t޳ OOMm& P om=SnXASqB@gb!F`p)?QȨUK3MTYrj)lfOd.YC[TRZ}@ ݾ haIǩ?ʤL1s=ԑXl1P gF~vjeUVB$J9TBr )JrYx,$Je>QJ;cIM8SM ۏ iQ}* G֒i*I(2<RNw.ކ A?֩4`wTde\U_-b)HkkM0FkB6{;Ӷ¤s6XH9#N l\(#9R"qc$Q_ݑ{G.pk*/W8Ϡt2O9hT[#P ~/vJ}E3i2=~ޢB~z8ִ݀ ˿_Zѵ VHӊ|AheH۷#YXy;[)&ǀ?6@AϰEx!86Ir@2gXwTSdd3 TWڊژ6m(stОD~I?0no?0j*;Hղ:C*hĎsQŋ%~rߥT"Ò2a`ElYTP# 5nFu剁lXڕl);x}v\TIֳce`jR,*[ X7JڒI$jϼ8U٤WpS>8U#U$Q'7[5};g?ʫݻ$vG]Һy,(?6}`[Y#·q'ej̿Zٳ 8l2?+:mq[<3`GFéZtvwq "=j5bԻ[m#cp}E$)-H }L@xa5 h\޵ކ.#9<ü]SNj[O2FA 2zUs:kPs*ްAmZܴ- es(PYN[n{>sb)6pA4F$r0jC\r*Œ-#甒I+sD cv9$ZdA`2KV+FяZkT4{vA\5Xs\\ni7 jker֘I_.}}A@;~1U[);c'z YE?[`65'R͕3 h !UOpYeiUTWv UfW!ީ.u98"Yػҷ0ZcAZ6+nU5¬6TӁ<d-߰OzijM{{ʅqU:}dvޗ8E<:|fI:վѮЀ[XG9ҺW`1 Ȼ|J>G ϵ2C*?ZB?Z{Ud&؆F{Vplfŋlc#"JA'ҲVvXc&^ȰU"$J7i#|3έ5au8v=I1yr$^0{ذǵv=蹀brjJ|ery#+fVq.7qT'kAdgO\TF6 mdpI㨦qZ#(?ֵu8:jDr8+WV`K 9H+r˜8˰I.:~=i9$4٧YR3PtQꢉa"O-oEQF-<Lo!15%T 8i~l-棓61=+.Nl=*iۅb:յIJ4r@:ֲn'EGVtO$ R[ݖSFz/Q"gOl葖3S:,ʻ~R`UȣUhP61%ƒt)SX|–Zf5R\ j^N6ޯ\J F͎IFՀ:s6RM#M)c ld~!TS)$ z|]ɁݧU>'5r?.T-If?Ur~BLI1˒O8wN%mq'.Ϻ([.L;U_zS g$ֳIT 5 vb%b9aP:Oڲac/NQJ3j€z5Ң \ EMm^ugMMbVB_0V57T9\XVJNӎke `%Wm1lY["}Em|R1ӵk 7 7ާnT6iM>6nn;Q+dg ~|S VxUzVӣXPXq֦+5U@ =jy;1 XwfvqY7Fc'T~~JWSFK";+ב`pX0"nϯjbDZzjRQE4cv^){U]1I8{i5ZkW~fZ$GpZ5M]ԛ{|–xYWzmha³wnP7cq3]TmImms>ҁEM* *`R=(8ֶD 5,f 01Q[ onU-fˍ7֠%)L8UCjWRʎUBKŘ@ ޵qg+#<=k0Ҍ3Jʔ t_s}ս2Μ4"V}`/4bN>y3j7b~UC{u {l]Ȗ:n GhHxQT]fi ndci,YU,B_kF6r2IqɁ$StOvH'?ZJR7SXˋO/jFrwU"تZڗAQ{U=lfU8a3L Xa2K9R<Vc37Y[vS\_*UpAo_Z%!?Ɵ5b<0jke Vysko,I⠞Ghʒ@!1{TrcnFԚŲP8 8\Iښ1onTzsZr?R/yc0xk9$ҕc[T̲0x5?<CVJEl\,uJ D\4L3JVo=;ųFF}+Lg+O *@,eRp@)iSyz y$uZC=x)d[O^*6gAă ThBX8 2ż8cTQ{guIWs_ ?_Ud/B֬ i#ӤrVE1"S#:ʀpxe]5.&Q5{ċ) G8a5ZLT]۫9?η:lCƊ,juUlZW Ub҅Y7ȷr1i>+⠴o2}њ8عUn̎t(MnV=_"5nbBsjb[nx-j&YG{tSީwX G/$s+>sJ -ʩWӴpPI& 3đUs}k2F`ZVRZ4[*T_O֛`g I:X:ջi_9Z<" l8#~5 ɋ6^f6ە-k$54 JM7O@՘Nۉc<(;W.#<*OzU:rU`IYF%;T8bB?{<Pj Jw[# f?+ Vqyl-V5M.&&t!1K}a(H4Gxl-а(9 +96^A)0QXgpj_-xe qVןu8Pۏ*YsȂL-~2!L1Mc=q8jI+&O+SD?{*hFdzVՂu5Þc'lG"q}i5[i F#^ocjMpd]Stq*F%[$ ( EA( zUL}<1]&4IBkz azmU-!P= SEӰk-? iRBUub$/CQFŜc5j@jFdu5jjMLIZN+FXRy~"Pȸ>V`#x*)IWPzuˬO> B:g]5#[F;f5iu8<ا_$'|zeVOCYC!OjMg*Z5ips{U뻳5[Zg*I'w>lXG5 MB`ֲwx);@ddlg8Bv]K`,lF>75QMoJqE/<սJC "e'j!Ah˸C.?ݦi 2Stѕ*%ӕIv^5AG5JE"Vq4ef8GPX* 2B-"pp~jwH:{VVK1c;Ok98t9d10aVf+S i8dZ": ɭRB-t6bYQW̓ˑ~YT*-=C/VvI;W+M0nJ5WʚQ7~K~Y|1Ƙ\_=qQn¡ i4(doq*o 8v|λh!bҴt2<{@'%{Upޕp(0L!b0+=tP+<=+&tc#0ʉcfqDj,9 Z1& NI>ϦDmHPpd"GepdZ[tJ鑊X@ N NHb@IT\Iq&~j~-WEggZ~O$]m*Yb-ޫHKsX,\nq9v}L?*}dE.kq7 u(6ẆHy5 &C'(n<֒ĎSd0.J5& fr$9f]L.Xҩ c[ ުXJ\8^Шrǎh Ip`iH &}o=M6吣H@jG&'W,7GzM<綷S 8%m@5(CPV!)I X#l>Kg#K+iG!I^fn3sarFKV;NM+ 43pGXixivR|'ΣaXT3=HeXtqS9`H9Q\̪wt$vA0q2%kT1i.d,fsTw72Kq#=H xV0{*5pė٭:/*%auZ`EԻG\zԀz}Lt)?@5 ֘T?b:- !+>Ȅn~o? $o_ \cnE]qE!6֥<ǽs8'M9#OjKLwAAI߅8s, I nZ`RFcI3°5=$9<Ջ]wkԓI&{%c좝$u^)l#T"ăj}Cx,``/|-˨H͞lbo>]%֑}r~y>\ t2|/˻n+(GZC叔T nwޠ2ҍz}iJe'#S8V^=)Įr+S^fK&mF';w{W2 X99">mR1޶7z\h\ *~k!A>ޛp@}̭:T *G|k29J2[ҳB>`jy2yq1VkY;b\1A(;Eh8ɃF GaƼ)ՋDد),z+oBʶr>+SJ˷yO;$}ޢԵ$aLh 2Z)# uG"юxe|sF:r[S?z$ t fto,-(<ȿ´4D6oƣysڹ%Fef?ҙi( , rXa [늧*+Q޻a$jq]"P}QoxkH'>#p/nOvZgiR8^cY t'#RS sA#= /њ! xbz;V+nE~kE~2kNj>AG[W]ӱc ~%#vgٱb3j$]-;qݨ`|n )<Զt{|?Z/=sZȖsӠ.{Zn-NÜ79Z,'$rHP:Z[I# +9jdS#ވxu&a3} #O{x=Y:2H]q#gJ<^mn&x>ƹMqȧBB\~O֦XnYH2~m>Qέ~j |oL(=CK4ֶQF?U!;Oe X1 Y2"jH3#qЊ?7QTS8=zdkH Lmbx1Zb`)[$%OMk-v>XqҫkgB}bj P|B-}k6$_!ؐ1TcA(9(P1 sڬ# XalzֽLhY|7֭Y٦|NF*ywms>Jew"EDɰ0=SPNO#IZ??MͰCՖ;Fi+UYGX ߩAe -Ұ;1ޤ2W n+fQ;pެ djI,wpd6z qh$ǔ=ޱuЮ}ErDVf H'{{~k*L2FT.~?δ<<5AYO#v%C"+kR3!#+N?:DVlM5qW'ˏC33y 0vZ\QH@jC^#*Sx8Si|뮁vv?S̸`c(v#],=j9b{2|m1B"5n3"jM%ǒgRfBN)-0dzz4&K!(Ie(N!X {R c13P Q(+tP9҅~ϥ‹5~!DZY"Vw )ڝ 81[Pzg*ŎSreh@~NV r2 DO4`pYI ֡Xa*㚾V8'/z0&)Fz{dS4Oީ7IR,xo5n;{K<zT<3.8'P lnW_[}"n324Ʋq#0}*deH81S" R?#&! I{xާDoҟo]>qS)AD8IkXm8ե%q qI8]z2b ~;@jL#?5dwQ pjfTXz!38TйPCj1:fLT|儰j.\H&BҒ=H܍٩c"xq#=R&iQgYe#k[ʷ t"*Vzۚ!ޤ: &PQ}<獿wEb<K{$2Rf7(JOՇ<88*ɞfpT6wE7.:Ik0̠}M6\D!%Ux̌;Z-V9P=UmN7vW#|QYۢKJ( e E6C/L桹ޝEArAҒۛUQk0:^vu6}jNIFOEs~z#B^2`u'֩ę|u5$Z<h=C cxcM8 (dR>+Z;9^EhE*`Nw4FXKb2!PZ,/b7T,m̲KuN=Q@ɩ(HQޛ#DQ!ZKս1L©>cJөf' WW!oBIVfEjk {V@jVxð?ΧU zRMsEMf8H֦spOR1Qyx0?֍QNqM/MOʭYIH# z١?Z$O $qP]#̳#Gn9VK)Tc%D'ku֚č`S<_yzު3C"·8&FdYWa郋e" ZȚ9 *Kwkf s>J;p 1qR$[. };Ԑ*Ȑ ~UHi M0ܭ524oM Xyqq 44۾UQDwAI?>sNG= >гJ eDj>v=XֆnUbWc'0;ɢG{w9yP0G2u;lT2r:Q{Ur/^N l ɁE<9*|Yޞz}O Oă 4  t~Rr$F8zߒU;uv[%H3UXbkBQ[,8-tbdG,;"Ӓcc=䃞M]Le8>Yc>*YRaqOAxY&mIhB8s)~QrI޴tzW޽?55OWQW:xVu;mJ c(>\@F íg^[:JH-puJ8][$c5 *ߜWE6ءU9; ԹE;uUې!2~f> 0Q# =m6iS le@9+Ӣ0@,3ڭPmqp\u\BYXo~yOO:׆ARͰF 6_V Ur $XfwgsYFgy0 f8ݼWhWKdg\.:/sZVN[͘c}jixVL50OOt ?*,1Fkx#UPJΚ@ 8[=1ޥRE!KޥXH03ӥXY[Ks*}+IeE4ISӮϥ'h&A6 "m_sP 1Qٖ6ûd~5ktv!i VGhV59zB1G恢T1_0} ,R#)#5VZ e8ɨa2۬2fb\<1kR& {tp͌; X# i"M"Z2S$2wl9@_VCyv(6PgA" UVުԿjR]Aj]y+E?L~n(Dri kU XdKa:ݎAcZ ,$=*9 98P*;zgu((=xOz~5~2ǽ[^8U=_.EɒUTs̿RL&,hz B!ҡ_ujm*'ީY":a$oY>T۬θGb1ڳLnp |Of2>R9,.rjӈ0u =Faol? q82:;+ {v =+"k&ۇ{u2 κ $}9 lfT/qZM_ 5@n{"~BIk`*&Q1򦘈K*DL2>\Տ'qR{U&8@G1~N#?%C6EVPc_-cU=(bKxRCӞJ#X`?*qNsS,Hw }N52㓑T.F)r~V1Ucr ncdUI\.:r=} \jP\?0,.j6oz4$lcj-GPH[>FL'jO;?;Q`\Q{s5B _)59[VړmK_x5XH=zG-pZbO=RKGjҲ  ^Ư[۵KIVݑЯgUed# ͉!sJקְ2:~ur2aٲބvZVe0ýhBe!ٲsQB{2gnOjȧSDTPfpݯWd;c nܰKrfTzӘa yǙڀn&2:T R>R6\Tr+}S $xoWFYrd~L`9ZJd~aG֝pʎrKp\S$0nlYX-(J*tS`ՙjRt匇xYjځy؈cZKd # ;Q2b\ kS!|P9ΪΛK9\JK9SҢ:zT@84r0#pz-coLSXq$K7RIJ~$2HzMInt4*\vI) %=@R1Ӕ<`L%9#)H{$FHɿ05J6ʞ.4SOzKy9yOojA':TϥH`4v) cj7%{Sz܍[.Ek$2:qkYCaڬ*3ZS>vBG qU,юYsym2\͙@Z˰K@ V <Ch\'o=2Yvs$Ti\因Yy1a-rfqӠ6"e20S6㑀W80stdR.>ZдD`Y2:9vSvTdn 2_Ԛ˚2p:zkg%[[R~E7PVQwR^K#/cVUQP!#9UPPi!,F1Zm)ǮjV})|n|T@| (x- ý=F9IB:rjc֠@zuqU&%) DosLH9FEic"H7QQ eI⥙wHJ[2>–fu K8"s^.u#֡.DsYJMDS#63Qv9Cd֊Y-ަьjv5&F[$9kI:WC>;q,Lp3Xzv3Ypl!R塌o,?]"0ծb l*&{ g>Jn 8\ګX 欐67]|AZ-R ?zrw+gN+&F1[I8#ۚv( n]|S^H b0T'ZաO/i| g,E`8 :2w2vN=xGpӷTE8FHBASۊhR r="dHM(>A4WR Jࢗ9V%"#9튯w78Q¢~Ni:S,bY& Ց}ݸ[ȩ-~u!Uw^KsYe{׊({W@FXP$o6m$ҿ\q;[aHgn5р9BQT, f ,:-lZ[yVʥ ZerpʼSmJet,L`Gt<^PAuy-ʕqu$_jō,~l>񭿟2wtI . *ݣ$Wb f(0y#g].pRu#6:wvЛ!"b[^`o%̈́+Sq. BrkEb1q(*akLNރ]vf훹ޱ^BwlsY; x% }MQ)riY~yN:sJ. Հ|!S@/OZKP)gL.j9`l ʖrRx'X# {urH *°rJ>| O#|qRڡ*KT;Kv֧ ӽ,xYJ©Il(=rzT{z.y݊s))凯5 VrPvԖt=kBF?Z g}+>pUY9K԰M=+i}RC$eAOI)/R8buMlV&A%͸}.dG}y*#3zҕ?D@c%goMYmM'|mp[R<,yfi,V/ɪ3yэ)޲K  P3 0)F<X? XyҟH'4ט/v*V#0E"YϗB 䊎ܤdf3U-Cpdf5Z܈.ǓVldQԫ|}n:|7,y^JF b)Q*Hpp  j#fJdgAU&rO!*͍F+-9w4 72p1ޙ8Gۦ ٘rL'xilf W r lGj[HWPX9)P*UYAU8`88Ɨ1SIL2'eU@SPʯz#p`OYU<@{8Sa@jkt) U ['N) W`9=jWc lg*!8xd?ݫL.:2gzDf$*H$(i"!' u@ݛ|uj9 0N{ < ڈb:#;36IA1MǽU˹>[oKzUp+I^IkDr9+>p35`3SYUg~nhv]-< n NVHf~V)>14N$` bQj0>*76qRyF;V+r6G15$*2sޯHc8u;Si.m\r}kfT[>5Oִ뚴I)xJ&sZ1B}1SUۉ6ŷ UQ'h֠-̋z,ZUU㊫M5rȬz$ ¨jc& DqK!Ȉ8Sa!_'"Wo00,Yׯfg˵em:*9jֳ"l=nLD chGqWBPqWIF7 ~Xx\sW|pajKKMi+ Icm~9˩3n}!yW1ɸ| !L}pР 5o$=z{U1pCt*U]7u%BdVeu T S3B>dU^O&{@4`;-KiƦy4n=gzRp1O8y!W]WPA֭ Gs*|L/5:HccjԄ?81`>q+^R Er6-ED6ql?uRyVVv|tv_{W  $clYږ)po*1d7M6)Nsҝzm_b1jϩaRq53\P3^qk˔%cg2yQե"Jݹ1 ki*2 !h.c8aޞwbEX}^71)\EH{ǩRFTֲf7P>_ȣWVD;\1Pz/VYƇ1QK18$,"SԜCzQEUAAp@ԃ_ި}K!D6RݤA[Ks/VR`Fӂ+8. # wd`Gđϧj6(? #F>b0k91\iMI 5XVRJ!AHSO*qcEE=Ա('`G6&<3jfB@N{V,td"mB2kH&c 5[eCWۚxH  J.3GIԪKE\`nj \Bs֡O5b)Ea֦Gb>XWa'":ޑNW#4`մX\RSc8ءhOZZjCI<i$*F8]Ro>;uoRG"p<晬Tg oO֣ #U71T!3AU2n"P߅t66Fp+b @jxm2ɜnx!89L\纃IDsNHZD|F.K\ghn>[^w*w**Ls")\ʤp@56tWifX\=1ZQe!I`?ƴ.M:)h@=eCswrw|ҹͨN!ϑg7ߌU/BQce1j o]x nSA ~eg^P%l3o58*;H֩_yS# Aӯ8$c֢6ҡQة&Aq1y#9<=\4aK,'@xdW\rKnL!U5T9qPgw$1a<ԍ;G(:e r6}!"@MfML#Ur%v9Cd#ʑ{Ժ̞|k8Qo25WGbybyQhlwtsޮsV K`b3JI.kP\cQ{W$nU h%mr+M ;U;7$x;=V&f!\Ӣq]GzDR`lR3VHkH.\B@>*iiij HC{ FyMy${Uk8fUa&̂b{ ¸a`vk&uTM=dO?0= 9a@ާ,bXIhltriG w"sf E$桝8<sm˒EҪKߘ Metd g-_ IImG[* R 2VnmJAVQW&TJh3_ba-(dpj k0Op3NNM~lsjKImWawt7E>dc8 m^LDɒp9ʌdxQ|=qIq#BA)mG}"rшu1❟?1l}xh qgZp8s5@ H\0)a#5A JE:(v6ӁNRNۊS2v}Ќ=*@їD:iw!l&r:ӚE.u[+;.ը-Q\CV |14ll62 Xՠھ5UȼRB|_m@W(y"CU۬mU BUYƋ7 l0waiQa#݅4y8%HyiB'%,-%NȐf9*wci /8$[ʷP."sVS!tYO-ǝ(Vf?* $#̓iIX zc5-[|p=a䳑1W+j{b# ^\"116)تC3,/M ёԚk!f2r?hE0j3(i2ުWJ H˅'S"r1]\֙m W $c@X'͌`V@l05ubKiA.65V9aבLgcMپNf gDsz`9lJ Y75 }sUmԺ *[6qN̂LERȜ㲚o0㰪ֹXԃqTij+gGc [jo\mPjܥR"1 Z&"qګؕfum9*Ļ&{M*/# ?T@m*nAjWhBuR+lT9+~68\qҪے sZ1Ir7nn<r?;Y-m¢t.'$` (?qu`b`*3ژsi[yW ʆr5^'̾uhrMXH 7uZP5v( Mp*b%5pZې7u[dw5}pȀǏ9NLe21XRo%.ݪCȇL/#޶l5dqj H86A`z6Xc6_ UY Hw7͊FPVI$?wT;:J#ax;_H.HNVԮ|r>j|Ҝ,$W\jlB9AOjcѯee"~94XNAfNcy.$t\1dpE3Z%oA?tG[EF ݺb [NnޔF$+b6UXgS`TZcb3@F9 IY(f"M'3a08bً<N+2,p&"H:gp{tK:tr Ip9|C?9>"9n? o’;+~,~Yvb%f^V`/~ә>>SLs*+ 閧7v?>jqɧ#|ih)QOYCc~XwFSMQd`! wPVdP$U r7HpqǽR1rE F^{k,uS,0AqS#8|5P%*?7$9UuFr~ (8#A8FzcSJ8B#X]+ѷ3sUwh.n>Pr}j5'қ ,rHJ jif1x:Iv5.)BR-sۼd =fI t n5 $qf [c^}cAf. sW6T6&ѻ#Ib= "MU '<~5^au5glf%O?:8 8¦90Jx'5 9QU&PHiUmH Z&*Npi>Lп$9%*IA8ï޺8#L`2kr#p zܶHAYԅZ/(7zV@//aGUrҠXYxݲ?:ҬlfR{TcegA:rq1*U_T@rkT(Ytd9m ʳ7kߍwZҺx{IeuvªX6:dʮESɴIv9(I#׼oh#zq" ɒ8"C0{ᑳ. '&%$ɂUIt,%cOpN=j]PmHS${A[U%`&/_zdl Ͻ2F_[%7zqҡۘz au⠸;T) xBME!& :y=EPܟbPx7E G2&8zU W"v?1γ.v(LyuSs90Ǩ5Z ֙oiC#֛d0n­^7a/皞JČ6ǽM6"G=φY$UGV֪~xsET'UP:jm 3Nm8l~л Յ2R.#:LInQ@ǚ6FF@~u\1?P 1.EC敗n"!Oʹ;O9S C=نTmq3TR[(Slč]R+N'dG޵-n/cq)%XSqGtA埯ҪmNZNOҠdXAҫIlШ*nwJW  Ọǚe!bV<NJkfB~@JEpl!#'b}jsJv7.1ZIdbsUa~prI'uhUWb8b-]g qhz{<2ۆ F#|p g\.APڬޢXpECc]+ۣgH횵 @A]x8⡙d`mQ2F8ZdL}H%_98d&xtဦsڛ[r; dQ/c+/$RΙPGҟp@G^1#8 F~iob26iyTɲ,3MvQ^,jKU$U9qrj(P8 (@q *[y]#etr0BJ|N?Im39`O̜Ԑ'"rAje X|HJޤYA|Z|?gK)6ni2*Er[VV˱Ej+\vV7tdհ͟V|^ws7&ӵ`\ &pMYR<$Cn}$N#z5R#r2jISyw]:&ɮ {gѲk3P'2dɂ泥6{1m6n+CGSÌfU5Gy&TeOZ~ZYv2;Y۰i$|+7Kjm"~0*ԁcOVSʴu)eNU%[=8J%spڔĶ?rsZ^xY&Bmx\Uu \"1}9Q ~ՙffVҙʰ9֧ ԪJMD/ Iy JȞ8mw4tsTvi? T|=$!U/r)BTt4y^ƦRQ"v6FA"jFϡv;inWݲx"I|TRr OZVZ|HHXn1?uSqέ?dέ;zQsTa UB7rp +տqaB[˵Q` ;L:`X+=8#yzonFk[3{ ڵO*(jI(vR5e:gI -S y (hi,Eޭ#ax;bjpAvSt56Uvpj_|Wbw,Wo03֧9;=fAWgR6 qϥSF0K dY*ݍ[c6 a3(B֩JŮ˝ӲZG*3Tvq̀ՆkKHA"s & f'P x5$2Xc>hݚf3yA2VHXeo5q4.X9XI)Q =.hR'9U4"9_hQ JXPDAr=钢YGqQHTzSV({Њv:sK;Hj߽?rǀ iHH`6wO  08E@;Q8"NHШ^]Ѥ*]F5$)ڦb~۠Uj3G%92nSS"5q2OLUdW!fE< |*eӕ^Vاқ /<00p~ȠiTn<՛/$vF}kWW5xK@ ֞DXڃ 3FN3YMJ̇eI)i /@x7!0ILj 07KKÜXe>`"ơ\)ZyCrx swoBTw'0fPA'OwUwe$ M!yvݑϥUYطgQ\F< .oza؟Oƣނ5!FG_JiD!z4֎d#%~աkKFB8Zzl.FZ6¶xkhdhl~+wr iW*s nҝ=KEQKEQE%REQ\-A2irz1OUnc0⡝NbكF08mʩ铊ܛsӰBqީvcU;&dj@3T&cS[!gUsSWf cާZc+P"TJiuT>Z4墨PijvZ)mFO\9w#h(fmtB O$WՓ"CUiRASޯ}Y#g1խ6aprvY^TxB/`\)wˑaΏk|8*IZʦ cNW=օZf(=^ +O)ڣ˱spDPW=9Nw8-Ie"<qM!4P*hUb fX>HNaP02ic˳`b9@;)ǓUUk`Lҭq%Q7i9ocfwQ5#ʜQy`*u0B'\ <{$y`ֵa8 ~U \S/UNsڡ`{GD.EKk,M7gR@ڑ,c iڍb]FaPs[h\,@AUk 0i"ZD0 <I$Dn8'hX+ˬc<$?AQMws"w$|^ vU=>m.)3qvMeMgˍ[H#2LSYNE' ;R0*!*u)LTauLcml;Z!#1ֈ>LHO9eH }i'BrJFA<3sMo2ECy xjgI\psǽC)GJ$ fQKCF\Ҥ ~ g2t c 'J |PO'Njj o"FA#֠cOUYqcڭZ_,Qjh/4eaօCm쑀6zԱV3i\Cqb`y1rm],G#TS7 Dlب%7=XМnjDzdSAb:RI@RqiyAV C0jir8PXUr .pt4ـV䎆+sŀ,CvqxLwS֔`zhi3Vf`1q[%棻6m{V3JbqW(((!'='W[dqSEҥ=ຌb8Ա*hԠbzΉl;eԱx˜?K= 2h@ /&Y^:b@fy'b}dڑ=*g}8$, sWaKb9lrjfIw86W6xQKip!whGB)rGOcڬfة'b!6Lab'gj=.-׮P\B ڄr@4$<}:TIY`ePG33nRw>QJx^R?WH0qtQOj*0(,T7@.UI 8=)8lue6MYӕFt<jhqXO\*6R}}kF+B)h(+2Tʸ5R[łA WWrcj'T>z2l8'қ.ӌ篥1#1 &61 Qd@Smя'I3es󤉚`jHȗ|ڝD8i0JXÂm 9 i\AS._M1yeoJʏyUI_$yZw=p*[w18flE>&U%Tsg'#cw-VBrHL㟖j $xQ?eU% |Z4-NvM:{"U-?J۷ X'}E{֥p T{ŵ@!sի fvRzV^a,\[ܣfj/)I_>?QIh{u^;˘Vo *:X`ҟX9s#ON~<wO 0Q'bKs D0KjwXqEn `@bNj^9Mi\aUf4cw3'itD'nsU# Bh9[ gG+pq]tPǑwZhemg `Uf)h)h("S-$ \I+5펕fi7Bz>Q[F*ĭV둊؟4GTQd_SQÁ=Mia W6O*E\!@U+"ÀiX{~*Ą n@0;*uwl*W#6}QQX\=QCr P۝)A[bHf'#M?Z"+ ܸe Wq'ҭbޢ02GZHP]FR*ɮNd7EVǶFPW(U1SRKEQE%QEt .^3=k'ĖMsb4r~ #qeo\quG9L&vA> 5Ԏ6Dr*{+v򿨭FVFZ<Ș =֡ ,lA=抳_FAeP:(BAN(Z((O\.e?ZHУA'**"3f5hG5VLnLvGSĢs7LBb߿]_j,@Y-Dƌ qT+(\ڪVsI a!J#!3Ks3G +X%|q֒w)gUK3ٛ'5n$O\!'YP#y44feU/,8*DYqҭyNdݽ7ޭyOz3V.LZDkˎե&K8kCGMS$vq5ERE%QEQE-Qڊ>N}2e ǴrK6{pr j6&׌Nr%D+I< E"&(n}jVEf FH4gb2E;Z(()h(+ IP넕Ǚ5T9^>42x<ߊ7`4qڛ}Bw};Ÿ]L/^w A"鞕Ȯ6GAn٤H5$q*7&7@F iq ^DOcd#yKyM~oZXDpNXkmþ<&޴"ݜpkkÊY?AҺ ǷM?G$ނ/W'95~-If`gִFO%}&>MQEQEQEQEQE-RQEQEREQEQE( 'ZZ6f'qJn =*hsO"OIwݳPL>EF'5,jX1f ı-)XI=TrEFsqQ1x2#'4HH).7aRnR,EH]J}ZIwdPvF*6I⣗nҤ4z}xF~soi7%pF yxO~+cOKX<*i_jSV 1&]wwVv,U;ZLzɵ=jHFMی|r s<i%M'rid_zimF `bKr@DvNjБmۇ V aM[,6NÜk1#LY*: kLU,JdZYBFS\чBgWS` ?]`1!]*bEQE-RQEQEQEQERQEQKEQEQEQEQEqѻ B+ upk ;-@u"}9Dgy>j"ay[M0(@!7AL 5+ ;֜iBls ؈ecsLnec< b7ޢa#]:R]ǠKjsY;1 )i&HTAV`@=*f"d!E?XcA-nb A&NqN-@ ʻ\`:WZx#Ҋ)(((((EQEQE-QEQEQEQEQEQ\2ۇ}IW*A>)H'An*V e@U ruR-H9WTW.u rdUqܙ 0v(UX1'w1XMQ';]͢(JZD|Fs])fiQIEQEQERE%RKEQEQEQEQEQ\܈Fq:O<z g* _" 9fmF3qj/Z#ydtRRG!bzIKs< "6AV[w,O_Ztt4r&e4D9}֙cTX'I|qe> ջD*\}Njժ,O* ͐?Ң2H }zT N{tɤ34`0U̮<ҩLFqږ>\8Dg84<Ԍ,sc!]4ǽYЬ#2Na>խ>)ۙx 6~Y$ʹ;C]ѻtk >REQEQERE%QEQERP3REQEQEQEq]06pOzS`\t֯[p2OO3S<,>zDvV2^EhU8( v eڣ[A$}y`SW͜3@$`%_VIajB9>q Ǐk3ST>f9MW5(>v`Xb$ ayH8R5y ž ) +(#׮*YBjICXJ g5cMYnrj[1)H$%#%bup.V2vvoO{딏BIZ^--mQXb\*((T%>)()()((((((((ql C B 5y!$ ǑTG'늳;F[ZFS*ˁؤdcV[l(E66gP_qU`wu`{69}Hc>\f?_"IR .? <CH|ɥquL#מE\F谚cEPf[pǍ[CŒ08mKBpw }*K^j'Ui~~ cA> u;viTʌsn>fV1QQ,bKvAo^ir˹oZŚC]S٤VImno[B]juQEQE-RQEQEREQIEQEQEQKEQKEQ0$kyVfʚҷ +nPkV݀BIWu1X*z*a*!V '"6dޞj$P 5$Wb*xÎRGt|(vt5Fe ʿ1P 0rAT>n⻇| >~Q5+ąR u5-zU[#ѾCU-Re=Ūʠ OH<2;ṬDm.9qj47\SaH78#=Hmd{n"ƁH,G+H<Z@b݇_4"4og\"Yf9Oj`If$Bp VqҗqvKEQEQEQEQEQE-RQEQKEQE%RE%REQ\e% !WpQFwjCֶ # I҄*ǽvH"# ˑZ,[2fV25GcqCٍG7j)"lx>ң9BTSc/yc ;My.&`:gHrr)BƣfPri=iƻT>>_Jb8< 6Iﲬ)ȨN9'ڧFqU+P,^fmoEI7- =+ONwb;(ݫvzn +؍H Vsg}3N((((((((Z()()((<ط0I\Q0vF2Gs޹=:ք'|A35r&L"ۢ mHE,O'w:'Pw0,N:Sf (Y՘(=2[W,q/3S  U94z⠉yƛLg.sccJc 'ja zӉh€;ep_G\YccM$s gh9'1Ƞ{wWDfSџ[Ɣ(-ފJ(()h((()h)h)h(Z((cfYCkQh؉5õp lBTmD3RdOfrc$T3.;u 1!n1s֘dU}B0d$6ޝ%`b?oi%TbDT> L{N fJs}j ;i`bk\:zv6@F~uYvTu p\^N7qA yaO.ax=a=kG6S8m&H0յW颊)h(((((()h((J(((+jW9#!`\dp& QҮE)=EhC79)*rM:[2zK%W i~P;QÏON} <`9SSV#3JK1r|гr|N1AM͗?'lUK륌U ^bEsK%¨ E> ̍dX5uf e+J㳅9!v--#ETm^jOޖ)h(()(((Z(()((J()h0\MMrYYX䟕3y[rJ)o'#Q۳zTVĴj,DT`5 GkNF}Mi #mF {P$jT)sڧ&v3I&uPnT\2c ʻH@*9&ʬdިȬdKúiVr3] a"48@iaasWBkkki((((((((J(((Z(((( ?뢮(((((((((((()hREQEQEQEQEQEQKEQE%QEQEQEQEQEQEQE-RQEQEQEQIhQEQEQE EQIEQEQKEQERIIEQIEQEQEQIEQEQEQEQEQEQEQEQERQEQEQEQE-QERE%QE%QE%REQEQEQEQEQEQEQEQERE%QEQEQEQEQIEQE-QKERQEQEQKEQEQEQEQEQEQEQKEQEQEQEQEQIE--RE%-RRQKE%RE%RRQEQEQEQEQEQEQEQE%REQEQEQEQE-RQEQEQERE%QE-RQE-RQEQEQEQEQEQEQERQE-QEQEQIEQEQKEQKEQE-RQKEQIEQE-RQEQEQEQEQEQERKIE%QEQEQEQEQEQEQEQEQERE%QEQEQEQEtZ((JJ)h((((((((()h(()()h((((()}j99 6N>'g-QEQEQEQEQEQEQEQEQEQKEQEQEQEQEQERRQEQEQEQER2P@?Ҕ:QKEQEQEQIERQE-QKEQEQEQEQEQEQEQEQERE%QEQEQEQEQEQEQIEQEQEE-QEQEQEQERE%QEQIERQE-%QERIIEQE88Ҋ(QKEQE%QEQEQEQEQEQEQEQEQEQEQE-RQEQERE%QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQIEQEQEQEQEQEQERQE-QEQEQEQEQEQEQEQEQEQEQEQE-RQE-RQEQEQEQEQEQEQERQ(Z((QKEQEQEQEQEQEQE-RQEQEQEQEQE-RQEQEQEQEQE 4QKEQEQEQERE%RE%QE%REQEQEQEQE-RQEQEQEQIEQIEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQERQEQKEQEQIEQE-RQE-QEQEREQEQEQEQEQEQEQEQEQEQEQEQEQIF(((((()((J()hMREQEQERE%QEQEQEQEQEQEQEQERQE-QE-RQEQEQڊ()((J(((ZZ(((((Z()((((((()(EREQEQEQEQEQEQEQIEQEQEQEQEQEQEQEQEQEQE-RQEQEQE%REQIEQE-RQEQKEQEQEQEQEQEQEQEQERQE-QE-RQE-RQEQE%QEQGKEQEQEQEQEQEQEQEQKEQKEQEQEQEQEQEQEQE%REQEQEQE%Qx&Og֊(J(((((((J(((Z(((()()()(h{j /NIQzZu-QKEQEQEQEQKEQKEQEQERQEQKEQKEQEQEQEQEQIEQEQEQKEQKEQEREQEQEQEQEQEQKEQEREQEQEQKEQEQEQE-RQEQEREQIߏփG4QEQEQEQEQEQERE%QEQIEQIEQEQEQKEQKEQE h((QKEQKEQKEQKEQEQEQEQERE%REQEQEm8'0('g8QE%QEQEQERKEQKEQERE%QIEQIEQEQEQE%REQEQEQKEQE%W ?뢮()())hZUN^u:((((((((((((((((TuQE--QKIE%-JNS(((((((((((((((eGQQE--QKE%%QEJޝNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEe2JJ(Z((ZU/zUNS(((((((((((((((eGQEQEQIE%QE*ӗ9{ө((((((((((((((((QtQEQIERE%QJ/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES)QE%-RQEQKE*ҭ9{ө((((((((((((((((Q(Z(()(Zr/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES*:((J((iޜuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQL:((((Z)V{ӗ:N((((((((((((((()ʎ((((U/zrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2襢J)(((iޜuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQL:J((((U/zrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2RQIERKEQEQJN^u:((((((((((((((((TuQIEQEQEQE*ӖuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQLQIE-RQEQIER9iޝNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEGQEQEQEQEQJN^u:((((((((((((((((TuQEQEQEQER9{ӗ:N((((((((((((((()ʎJ((((U/zrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2袊J((()VޝNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEʎ((((U/zrSQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE2袊((((iޜuQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQL:(((((Zrӗ:N((((((((((((((()GERQE-QEQE%SޝNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEʎ(()h(Zr/zu:EQEQEQEQEQEQEQEQEQEQEQEQEQEQEQES*:(((()VޝNQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEʎ((((U-9{ө((((((((((((((((QtQEREQEQEN^NS(((((((((((((((:uQEQEQEQEN^NS(((((((((((((((h(Z()(N^u:(((((((((((((((( ?뢮((((Z(((((()h(Z(Z(((J(((((((((((((((((((((((((((((()(()h(Z(Z(Z()(()h((((((((((Z((((((((()h((((EQEQEQEQEQEQEQIEQEQEQEQEQEQEQEQERE%QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQERE%QEQE-QEQEQEQEQEQEQEQEQEQE-RQEQERE%QEQEQEQEQEQERE%QEQE-RQEQEQEQIEQEQERE%QEQIEQEQEQEQEQEREQIEQEQEQEQEQEQEQEQEQEQE-RQEQEQEQERQEQEQEQEQEQEQEQEQEQEQEQEQEQKEQEQEQEQERE%QEQEQERE%QEQIEQEQEQEQE-RQEQEQEQEQEQEQEQEQEQE-RQE 984REQEQEQEQEQEQEQEQEQEQEQEQEQEQEQERE%QEQEQEQEQEQEQEQEQEQEQEQEQEQERQEQEQEQEQEQEQEQEQEQEQKEQKEQEQEQEQKEQERE%QEQEQEQEQE-RQEQERE%QEQE-RQEQEQEQEQEQEQEQEQEQEQEREQIEQEQEQEQIEQEEQEQEQEQEQEQEQFh4QEQE-RQEQKEQERE%QEQEQEQEQEQEQEQEM'zNREQEQKEQEQEQEQEQEQEQEQEQEQKEQEQEQE-RQEQKEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQERE% EQEQEQEQEQE-RQEQEQEQEQEQEQEQEQEQE-RQEQEQEQEQEQEQEQEQEQEQEQEQIEQEQEQEQEQEQEQEQEQEQEQGj;QEQEQEQEQEQEQEQEQEQEQEQIEQEQEQEQEQEQEQEQG|ފ(((((((()h((((((((((((((((((((()h(((((((((((((()((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((((QEQEQEQKEQERE%QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE(@)h((((((((((Z(((((((()1EQERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQERE%~4QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQERE%QEQEQEQEQEQ_ ?諢(((((Z((((((((=(R ()(((((J((()((((((QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEtqE-RQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE-RQEQEQEQEQERE%QEQIEQEQEQE)99'GPZG:S>,@ǥi pJ8,ZIF JOJC,ʤyJJޅ?Rj`]bI "KmO.žONr r:ԓI%AnrUOTjy`j v`܃YDb6H%Hj!#k҇a?F-? "o/|ޮ-1=ض1#8ښ0eW?{v3׊HJ{D` jG`<{ن69UTD8v!?UOP6'`*l#ztC[٪@b T[n1ToO`'R)>jTvS(wda>F1ǜH1TRj!mEVݸ vMjBێ񌑹r+B#H8ȫyyV8j^<ۺ7Կ֫m̌O ~IkZ(((oe08KX6d/~Um:*qpNI'0$sX;KI40>4<{"S1R,-enV;&/!J?(j'*bE2MʧiG+͒Eh"?-ڧ@l5vuBgaV B7VPHs paUVfYh `nÉ ~ASE(`A4Ӯ)LWs1GqLft(Au-P^߮R`e2rMߕCjvL~Pڢ_24'm§dV2qʯ] 3ǥ2>YJh*v bol>]~d1Dc?҉>@ILIKn>UmiYcQ˲##6}Xu",p~QT-pXVc;,O^ʄd8Ֆa0+B[.-N I'#wLG>dlǍ55[rm)$~4 玔3HF5~[ *16Gk|9R3_Zr oZ1.*T#y>cN`1c|Ɲ,OTe1Eg)F<[ʩJ8&\bl(VlH08sP.$JZ)"Ri&78dlʄl•rBΖ1dR6>/bF*9 `:6L1aڡ zQ Tqw*Uqt>n0}8>e8 5\s1H˺B1Bߥ;b*$ Nء+~TT2?wZVQEQEQEW bx|k+Yګft|K*. 92ĢImqJPcaSVim"*-A"2NU$S Ud4aR(ViT'v8p;U4N~u4H {J]Z0|FZh󓒜$ n T{9ǭWNd|Ńb{-jG\T1B` o;U;d1  U;/ͷ>lA#(\*⣒*ϔsTI p:S[;#֥ Ҥ|c>Unw:=Z%GXtH;΍@h!(O@ҕIsJpzjB&Aps.;U|GE;؎gq5DH|̞THCJB ;Izv)%f=*-g86%wR6RqYGS`OS[ˌdUz;Vc@p YElǰ'RzUf{nlzDAK>5ḃp8UB\4Φ"[Z!{*IDd]8I!$)j.0R޼/CNr*G[wV(CkEWZ\ܘ:cZ~ѧ8nLDRơ*0~u>8 +{4]gi(ݴh@ʻ{玔Z ^) sϭ3R[ۖR78 aOm % "ǨFv^iѻbxN@d/+">@5lrx^޴JF8V ?R}0@j*6mJnf-ԊdQ;| zm̌t;Ld'%+('n{UY 0j SYIR1sG!j>u4o=N",?8oN4]`Z2Y>\J2I'*Q6좰p)bPzA4MI iAy{S9Zd-0:fAh:h[qˈǞEWo.3w؆1<yb=qҢQ}).T9ơ8=;S 浫((J(= #C}1H* P-^CrrMF"9 ޘ2[%wBV- #\|qZ&L֎VE3KQLR;Z^|m%O`cops? jR dIBz0>_8*hXE  V㷍m\ bRLD1Jm|LUXe@CF#Y1 ' "'=jՒ[Vm܏85otWz{gT* JVR)ZbGblێ:0۷S]B<`;pe*88bRF })kWv|X ū/(1Th o8*a+j~ޫ̏ߌ5eD-W#")nxasPB>MC)N*pUz[s#QPxEZm,gڪg6H\$ !Hiȷ\yYA*JUQ3 4ܼBOqұ@un>hF G;B)W;p?Jlyy#$8#,78yw%q)˰G =`Ѫ0{qLu>,őɒy\Ka{c<ՉwLReQb<ڳʻ6pjʨ9a=&֊A!\d`.J{SlIfQ c\vRhڟyXp5 L8M;P]rѱU'a=CtyGPlNsU/tj2~n9S!d;Um!b `&%:ԢHcOZC'<qSU L(xTZ'XޫԊ#K  9ϵ2==EyqRwf թJUa 3U>6\8ԸN =%)cL|w5hqF*sg`S$M@c8KkXV]1)ަWf԰k75l gi=y=Axf+!/#u5Ϙ\n> `j# En{ާ˷ ۴,ǂbH_cPjH%= N>{Y]'oJ1 ]bS"![Y8I}EHE`{Qe GIjGo799R@GKg+(t9cӵ-%Ffq.p[vKw%A pr.g g9ve,;RʛSS.w}je#% 4ː3֝ igݕnr6J$BzpjɸqjcQ]`G4ےqQUDll`ƫl, 0*RA=8I!T*im 9lÑ֦kvqa*Dϗ2xRdjHT`w!RNz,N|Ւ f$qS B*«zXɉ'lԚ}Qcx_%J23q7nTI@Kp\eHG(dݎq =Mhv_ƭŜ=z jPy?);(g^cǭhiQEQE2eg=j ؞kfD=j;g橼z3.<9[LVDHx#Vgt9@WIu %Gzǚ3E2 |!sҡ܆wIl3=-#>T ňAzqK{+'s-3T Ѧ' v*VbĈɢĬ8۴>HJME@j]Ș%qXEv-N,$bUԅхvoZy!ii)miIub8^~UY'$:"VJ$[vJ?) q՘pQAHC/}h f(Rh !zt rNL>fw,|;щ?*Tevfrrvr>POOJvf%{Lk$=}i#1NriPNֈfS\G'sTi[&gˀ;Sjhq<2?xKvY1֧Y۔(ʕ++fZ(lcMÎZ᭠Ozc {Tlz럺u 3Y.DO&f*FHx4 gu16Au(rV>Ң;@j2N˸k^n㌁VdX*;+gPHt-9bEiNٔ^Pfq -cٳTNiG" (d.}=}ٛwSԙ0RsWULDK)l5goa@ʞj,# HUHI8T8 )zsRQ|:T-q弑>p8NU65c({2ٔ4x8$c޳ cuD5 B5,pDnBG1\SA 5yqӁVHӥY?(fZrı U0* g)v0C/[7p%a6`by;qzI]tTQEQQlJضWw?Wxv5,jӭ4ׯgVQHpAbҲ"s$,ҳab$5=3žj֩0wEOJGAKh<$e!SXm>)ڼ(tUHT{d$=̊8,@7/x)*U }hі%v0}h6)Q\ҤbUBCcqnMKk"4w6qNJ$ |gw8U[F`AA= W}k* pϟ2M|یS`Pp65=1vBzҁsS̻Wx?)\P[R6oZCJrOIcՙՋ5S {(SI bEt5H1_bpz Ԯ*6s+ oÖvL&P\XwqQ#Wiq֚I01I=>#bB_ҟ:P-g.1Z2*-۾p@\uvrF6z/9 U \ڡ fP8Bŷ:S;xƺ*((iFW(8sY%{ҹ+.$W;qɤ+F\4 G^?*/I>>+jFŃ 1U,SqLⱬD>fX71~+DI~8%*O,yKɴ㚞G4RkN⩡ڟķOQجSS]`ƓWX1ɫ7*7UD~scG02IĎÚԕY᪕þs:*π*HB;J}{vcmimn>GD ў=O*O$NjxOsc9#bx5|{QFzV*cpxc*@c8XiU.9j@99eNr993FyIx:Pw-:4>շ]MnQEQEh7%Ө+ՐG"=E8Zjݖ .j(FjDInُʫVdY̫)ny$W?>sOJŜ%3׿J5w&㚒C;K~G;sնa^s8i0@ئ2;V;eVR< "Ȥy'E?`iYD`z){vHRH3N+pA;Sb7qNu#'Ұ˱,4B0*Hh…?RE*@|xz€6ZɳqJ*3!@uMMgid-ҩf$jbI ZN"Gw~zR2@nU\w51(B2TCC$͙8L}Ojc'j,OE+?5/ ޼dJ=ri #2Iخ袊(ӊk qPF%MV\C?:U+q,^bzf#d?*{5\$);+"?Εf"BNII )Q~o)0+)l\BwGZ'Kn&G ~sO4O09$4R bNzx'*i#w' :Vr\}#xj9 ;4 XY Ԟ*Q6A<Avy;TWLlvqU@Zzd Ο0qJ xm&`  yqҮ.܌J0z$cJĺTw.8(O6pdcsSa\=1>?2R8b(8WDN({L &w*T\9UϮE>!|y: :$Fzaj%Flㅨc7I!|?~ꑏ9s00 PsL'j{X68f-Ͻ*kX6ڦW;'O;*[b9Wnh( !U,H*[\<ޱ=ܦPGIu<&QIKq^ @bci@8]mzU MRTD!z{ՋY>2V-pGP-{]ʧOi͎=2::sJZ^y=@AX#ɐMY&Y b zҴPvmJ-cU9=>oe!4#ξ Bg